ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDQ5Mjk5ZWUuLjU5ZDM4MzIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTUsMTEgKzE1LDEzIEBACiBEb2MvdG9vbHMvcHlnbWVudHMvCiBEb2MvdG9vbHMvc3BoaW54LwogTGliL2xpYjJ0bzMvKi5waWNrbGUKK0xpYi90ZXN0L2RhdGEvKgogTGliL19zeXNjb25maWdkYXRhLnB5CiBMaWIvcGxhdC1tYWMvZXJyb3JzLnJzcmMuZGYucnNyYwogTWFrZWZpbGUKIE1ha2VmaWxlLnByZQogTWlzYy9weXRob24ucGMKK01pc2MvcHl0aG9uLWNvbmZpZy5zaAogTW9kdWxlcy9TZXR1cAogTW9kdWxlcy9TZXR1cC5jb25maWcKIE1vZHVsZXMvU2V0dXAubG9jYWwKQEAgLTU3LDYgKzU5LDggQEAKIHB5YnVpbGRkaXIudHh0CiBweWNvbmZpZy5oCiBweXRob24KK3B5dGhvbi1jb25maWcKK3B5dGhvbi1jb25maWcucHkKIHB5dGhvbi5leGUKIHB5dGhvbi1nZGIucHkKIHB5dGhvbi5leGUtZ2RiLnB5CmRpZmYgLS1naXQgYS8uaGdlb2wgYi8uaGdlb2wKaW5kZXggNGUwMzY5MC4uYWFkNzljMiAxMDA2NDQKLS0tIGEvLmhnZW9sCisrKyBiLy5oZ2VvbApAQCAtMjYsNiArMjYsNyBAQAogKioucHNkICA9IEJJTgogKioudGFyICA9IEJJTgogKioud2F2ICA9IEJJTgorKioud2hsICA9IEJJTgogKioueGFyICA9IEJJTgogKiouemlwICA9IEJJTgogCmRpZmYgLS1naXQgYS8uaGdpZ25vcmUgYi8uaGdpZ25vcmUKaW5kZXggYzQyZGQwMy4uOTFmMDJmZCAxMDA2NDQKLS0tIGEvLmhnaWdub3JlCisrKyBiLy5oZ2lnbm9yZQpAQCAtMTksMjEgKzE5LDIwIEBACiBweWNvbmZpZy5oJAogcHl0aG9uJAogcHl0aG9uLmV4ZSQKK3B5dGhvbi1jb25maWckCitweXRob24tY29uZmlnLnB5JAogcmVmbG9nLnR4dCQKIHRhZ3MkCiBMaWIvcGxhdC1tYWMvZXJyb3JzLnJzcmMuZGYucnNyYwotRG9jL3Rvb2xzL3NwaGlueC8KLURvYy90b29scy9kb2N1dGlscy8KLURvYy90b29scy9qaW5qYS8KLURvYy90b29scy9qaW5qYTIvCi1Eb2MvdG9vbHMvcHlnbWVudHMvCiBNaXNjL3B5dGhvbi5wYworTWlzYy9weXRob24tY29uZmlnLnNoJAogTW9kdWxlcy9TZXR1cCQKIE1vZHVsZXMvU2V0dXAuY29uZmlnCiBNb2R1bGVzL1NldHVwLmxvY2FsCiBNb2R1bGVzL2NvbmZpZy5jCiBNb2R1bGVzL2xkX3NvX2FpeCQKIFBhcnNlci9wZ2VuJAorXmxjb3YtcmVwb3J0LwogXmNvcmUKIF5weXRob24tZ2RiLnB5CiBecHl0aG9uLmV4ZS1nZGIucHkKQEAgLTgyLDYgKzgxLDkgQEAKIFBDYnVpbGQvV2luMzItdGVtcC0qCiBQQ2J1aWxkL3g2NC10ZW1wLSoKIFBDYnVpbGQvYW1kNjQKK1BDYnVpbGQvaXBjaAorVG9vbHMvdW5pY29kZS9idWlsZC8KK1Rvb2xzL3VuaWNvZGUvTUFQUElOR1MvCiBCdWlsZExvZy5odG0KIF9fcHljYWNoZV9fCiBNb2R1bGVzL19mcmVlemVfaW1wb3J0bGliCkBAIC04OSwzICs5MSw3IEBACiAuY292ZXJhZ2UKIGNvdmVyYWdlLwogaHRtbGNvdi8KKyouZ2NkYQorKi5nY25vCisqLmdjb3YKK2NvdmVyYWdlLmluZm8KZGlmZiAtLWdpdCBhLy5oZ3RhZ3MgYi8uaGd0YWdzCmluZGV4IDhjYmFiNGUuLjJkNWM0MmIgMTAwNjQ0Ci0tLSBhLy5oZ3RhZ3MKKysrIGIvLmhndGFncwpAQCAtMTIwLDMgKzEyMCwxMSBAQAogYzM4OTYyNzVjMGY2MWIyNTEwYTZjN2U2YzQ1OGE3NTAzNTlhOTFiOCB2My4zLjMKIGZhOTJmNWY5NDBjNmMwZDgzOWQ3ZjA2MTFlNGI3MTc2MDY1MDRhM2MgdjMuMy40cmMxCiA3ZmY2MjQxNWU0MjYzYzQzMmM4YWNmNmU0MjQyMjQyMDkyMTFlYWRiIHYzLjMuNAorNDY1MzVmNjVlN2YzYmNkY2YxNzZmMzZkMzRiYzFmZWQ3MTlmZmQyYiB2My40LjBhMQorOTI2NWEyMTY4ZTJjYjJhODQ3ODVkODcxNzc5MmFjYzY2MWU2YjY5MiB2My40LjBhMgorZGQ5Y2RmOTBhNTA3MzUxMDg3N2U5ZGQ1MTEyZjhlNmNmMjBkNWU4OSB2My40LjBhMworZTI0NWIwZDcyMDliYjZkMGUxOTMxNmUxZTJhZjFhYTljMjEzOTEwNCB2My40LjBhNAorMzQwNWRjOWE2YWZhYTBhMDZkZDFmNmYxODJlYzVjOTk4ZGNlNmY1ZiB2My40LjBiMQorYmEzMjkxM2ViMTNlYzU0NWE0NmRkMGNlMTgwMzViNmM0MTZmMGQ3OCB2My40LjBiMgorYTk3Y2UzZWNjOTZhZjc5YmQyZTFhYzY2Y2U0OGQ5MTM4ZTBjYTc0OSB2My40LjBiMworNWUwODhjZWE4NjYwNjc3OTY5MTEzNzQxYzEzMTNkNTcwZDk3N2UwMiB2My40LjByYzEKZGlmZiAtLWdpdCBhLy5oZ3RvdWNoIGIvLmhndG91Y2gKaW5kZXggYTYyOWRlOS4uN2UzYTVlNyAxMDA2NDQKLS0tIGEvLmhndG91Y2gKKysrIGIvLmhndG91Y2gKQEAgLTQsOCArNCw3IEBACiAKIFB5dGhvbi9pbXBvcnRsaWIuaDogTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwogCi1JbmNsdWRlL2FzdC5oOiBQYXJzZXIvUHl0aG9uLmFzZGwgUGFyc2VyL2FzZGwucHkgUGFyc2VyL2FzZGxfYy5weQotSW5jbHVkZS9QeXRob24tYXN0Lmg6IEluY2x1ZGUvYXN0LmgKK0luY2x1ZGUvUHl0aG9uLWFzdC5oOiBQYXJzZXIvUHl0aG9uLmFzZGwgUGFyc2VyL2FzZGwucHkgUGFyc2VyL2FzZGxfYy5weQogUHl0aG9uL1B5dGhvbi1hc3QuYzogSW5jbHVkZS9QeXRob24tYXN0LmgKIAogUHl0aG9uL29wY29kZV90YXJnZXRzLmg6IFB5dGhvbi9tYWtlb3Bjb2RldGFyZ2V0cy5weSBMaWIvb3Bjb2RlLnB5CmRpZmYgLS1naXQgYS9Eb2MvTWFrZWZpbGUgYi9Eb2MvTWFrZWZpbGUKaW5kZXggODJmNWJlZi4uNDczNDUyNiAxMDA2NDQKLS0tIGEvRG9jL01ha2VmaWxlCisrKyBiL0RvYy9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAKIAogIyBZb3UgY2FuIHNldCB0aGVzZSB2YXJpYWJsZXMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgogUFlUSE9OICAgICAgID0gcHl0aG9uCi1TVk5ST09UICAgICAgPSBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMKK1NQSElOWEJVSUxEICA9IHNwaGlueC1idWlsZAogU1BISU5YT1BUUyAgID0KIFBBUEVSICAgICAgICA9CiBTT1VSQ0VTICAgICAgPQpAQCAtMjEsNyArMjEsNiBAQAogaGVscDoKIAlAZWNobyAiUGxlYXNlIHVzZSBcYG1ha2UgPHRhcmdldD4nIHdoZXJlIDx0YXJnZXQ+IGlzIG9uZSBvZiIKIAlAZWNobyAiICBjbGVhbiAgICAgIHRvIHJlbW92ZSBidWlsZCBmaWxlcyIKLQlAZWNobyAiICB1cGRhdGUgICAgIHRvIHVwZGF0ZSBidWlsZCB0b29scyIKIAlAZWNobyAiICBodG1sICAgICAgIHRvIG1ha2Ugc3RhbmRhbG9uZSBIVE1MIGZpbGVzIgogCUBlY2hvICIgIGh0bWxoZWxwICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBhIEhUTUwgaGVscCBwcm9qZWN0IgogCUBlY2hvICIgIGxhdGV4ICAgICAgdG8gbWFrZSBMYVRlWCBmaWxlcywgeW91IGNhbiBzZXQgUEFQRVI9YTQgb3IgUEFQRVI9bGV0dGVyIgpAQCAtMzcsMzAgKzM2LDggQEAKIAlAZWNobyAiICBjaGVjayAgICAgIHRvIHJ1biBhIGNoZWNrIGZvciBmcmVxdWVudCBtYXJrdXAgZXJyb3JzIgogCUBlY2hvICIgIHNlcnZlICAgICAgdG8gc2VydmUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGxvY2FsaG9zdCAoODAwMCkiCiAKLSMgTm90ZTogaWYgeW91IHVwZGF0ZSB2ZXJzaW9ucyBoZXJlLCBkbyB0aGUgc2FtZSBpbiBtYWtlLmJhdCBhbmQgUkVBRE1FLnR4dAotY2hlY2tvdXQ6Ci0JQGlmIFsgISAtZCB0b29scy9zcGhpbnggXTsgdGhlbiBcCi0JICBlY2hvICJDaGVja2luZyBvdXQgU3BoaW54Li4uIjsgXAotCSAgc3ZuIGNoZWNrb3V0ICQoU1ZOUk9PVCkvZXh0ZXJuYWwvU3BoaW54LTEuMi9zcGhpbnggdG9vbHMvc3BoaW54OyBcCi0JZmkKLQlAaWYgWyAhIC1kIHRvb2xzL2RvY3V0aWxzIF07IHRoZW4gXAotCSAgZWNobyAiQ2hlY2tpbmcgb3V0IERvY3V0aWxzLi4uIjsgXAotCSAgc3ZuIGNoZWNrb3V0ICQoU1ZOUk9PVCkvZXh0ZXJuYWwvZG9jdXRpbHMtMC4xMS9kb2N1dGlscyB0b29scy9kb2N1dGlsczsgXAotCWZpCi0JQGlmIFsgISAtZCB0b29scy9qaW5qYTIgXTsgdGhlbiBcCi0JICBlY2hvICJDaGVja2luZyBvdXQgSmluamEuLi4iOyBcCi0JICBzdm4gY2hlY2tvdXQgJChTVk5ST09UKS9leHRlcm5hbC9KaW5qYS0yLjMuMS9qaW5qYTIgdG9vbHMvamluamEyOyBcCi0JZmkKLQlAaWYgWyAhIC1kIHRvb2xzL3B5Z21lbnRzIF07IHRoZW4gXAotCSAgZWNobyAiQ2hlY2tpbmcgb3V0IFB5Z21lbnRzLi4uIjsgXAotCSAgc3ZuIGNoZWNrb3V0ICQoU1ZOUk9PVCkvZXh0ZXJuYWwvUHlnbWVudHMtMS42L3B5Z21lbnRzIHRvb2xzL3B5Z21lbnRzOyBcCi0JZmkKLQotdXBkYXRlOiBjbGVhbiBjaGVja291dAotCiBidWlsZDogY2hlY2tvdXQKLQlta2RpciAtcCBidWlsZC8kKEJVSUxERVIpIGJ1aWxkL2RvY3RyZWVzCi0JJChQWVRIT04pIHRvb2xzL3NwaGlueC1idWlsZC5weSAkKEFMTFNQSElOWE9QVFMpCisJJChTUEhJTlhCVUlMRCkgJChBTExTUEhJTlhPUFRTKQogCUBlY2hvCiAKIGh0bWw6IEJVSUxERVIgPSBodG1sCkBAIC0xMjAsMTAgKzk3LDYgQEAKIAogY2xlYW46CiAJLXJtIC1yZiBidWlsZC8qCi0JLXJtIC1yZiB0b29scy9zcGhpbngKLQktcm0gLXJmIHRvb2xzL3B5Z21lbnRzCi0JLXJtIC1yZiB0b29scy9qaW5qYTIKLQktcm0gLXJmIHRvb2xzL2RvY3V0aWxzCiAKIGRpc3Q6CiAJcm0gLXJmIGRpc3QKZGlmZiAtLWdpdCBhL0RvYy9SRUFETUUudHh0IGIvRG9jL1JFQURNRS50eHQKaW5kZXggYTE2YzE0YS4uNGExNTdkNSAxMDA2NDQKLS0tIGEvRG9jL1JFQURNRS50eHQKKysrIGIvRG9jL1JFQURNRS50eHQKQEAgLTcsNyArNyw4IEBACiAKIERvY3VtZW50YXRpb24gb24gdGhlIGF1dGhvcmluZyBQeXRob24gZG9jdW1lbnRhdGlvbiwgaW5jbHVkaW5nIGluZm9ybWF0aW9uIGFib3V0CiBib3RoIHN0eWxlIGFuZCBtYXJrdXAsIGlzIGF2YWlsYWJsZSBpbiB0aGUgIkRvY3VtZW50aW5nIFB5dGhvbiIgY2hhcHRlciBvZiB0aGUKLWRvY3VtZW50YXRpb24uICBUaGVyZSdzIGFsc28gYSBjaGFwdGVyIGludGVuZGVkIHRvIHBvaW50IG91dCBkaWZmZXJlbmNlcyB0bworZGV2ZWxvcGVycyBndWlkZSAoaHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9kb2N1bWVudGluZy5odG1sKS4KK1RoZXJlJ3MgYWxzbyBhIGNoYXB0ZXIgaW50ZW5kZWQgdG8gcG9pbnQgb3V0IGRpZmZlcmVuY2VzIHRvCiB0aG9zZSBmYW1pbGlhciB3aXRoIHRoZSBwcmV2aW91cyBkb2NzIHdyaXR0ZW4gaW4gTGFUZVguCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2FyZy5yc3QgYi9Eb2MvYy1hcGkvYXJnLnJzdAppbmRleCA1OGMwZjNkLi5iZjEzZWVkIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvYXJnLnJzdAorKysgYi9Eb2MvYy1hcGkvYXJnLnJzdApAQCAtMjk0LDYgKzI5NCw4IEBACiAgICB0aGUgb2JqZWN0IHBvaW50ZXIgaXMgc3RvcmVkLiAgSWYgdGhlIFB5dGhvbiBvYmplY3QgZG9lcyBub3QgaGF2ZSB0aGUgcmVxdWlyZWQKICAgIHR5cGUsIDpleGM6YFR5cGVFcnJvcmAgaXMgcmFpc2VkLgogCisuLiBfb19hbXBlcnNhbmQ6CisKIGBgTyZgYCAob2JqZWN0KSBbKmNvbnZlcnRlciosICphbnl0aGluZypdCiAgICBDb252ZXJ0IGEgUHl0aG9uIG9iamVjdCB0byBhIEMgdmFyaWFibGUgdGhyb3VnaCBhICpjb252ZXJ0ZXIqIGZ1bmN0aW9uLiAgVGhpcwogICAgdGFrZXMgdHdvIGFyZ3VtZW50czogdGhlIGZpcnN0IGlzIGEgZnVuY3Rpb24sIHRoZSBzZWNvbmQgaXMgdGhlIGFkZHJlc3Mgb2YgYSBDCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0IGIvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdAppbmRleCA2NTkwNGVlLi4yZDU2Mzg2IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0CisrKyBiL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QKQEAgLTc0LDI2ICs3NCwzNSBAQAogCiAuLiBfbWFwb2JqZWN0czoKIAotTWFwcGluZyBPYmplY3RzCi09PT09PT09PT09PT09PT0KK0NvbnRhaW5lciBPYmplY3RzCis9PT09PT09PT09PT09PT09PQogCiAuLiBpbmRleDo6IG9iamVjdDogbWFwcGluZwogCiAuLiB0b2N0cmVlOjoKIAogICAgZGljdC5yc3QKKyAgIHNldC5yc3QKIAogCiAuLiBfb3RoZXJvYmplY3RzOgogCitGdW5jdGlvbiBPYmplY3RzCis9PT09PT09PT09PT09PT09CisKKy4uIHRvY3RyZWU6OgorCisgICBmdW5jdGlvbi5yc3QKKyAgIG1ldGhvZC5yc3QKKyAgIGNlbGwucnN0CisgICBjb2RlLnJzdAorCisKIE90aGVyIE9iamVjdHMKID09PT09PT09PT09PT0KIAogLi4gdG9jdHJlZTo6CiAKLSAgIHNldC5yc3QKLSAgIGZ1bmN0aW9uLnJzdAotICAgbWV0aG9kLnJzdAogICAgZmlsZS5yc3QKICAgIG1vZHVsZS5yc3QKICAgIGl0ZXJhdG9yLnJzdApAQCAtMTAyLDcgKzExMSw2IEBACiAgICBtZW1vcnl2aWV3LnJzdAogICAgd2Vha3JlZi5yc3QKICAgIGNhcHN1bGUucnN0Ci0gICBjZWxsLnJzdAogICAgZ2VuLnJzdAogICAgZGF0ZXRpbWUucnN0Ci0gICBjb2RlLnJzdAorCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZGljdC5yc3QgYi9Eb2MvYy1hcGkvZGljdC5yc3QKaW5kZXggNmJhY2MzMi4uNWE5ZGNhMiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2RpY3QucnN0CisrKyBiL0RvYy9jLWFwaS9kaWN0LnJzdApAQCAtODQsNyArODQsNyBAQAogICAgb24gZmFpbHVyZS4KIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJlbW92ZSB0aGUgZW50cnkgaW4gZGljdGlvbmFyeSAqcCogd2hpY2ggaGFzIGEga2V5IHNwZWNpZmllZCBieSB0aGUgc3RyaW5nCiAgICAqa2V5Ki4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzIG9yIGBgLTFgYCBvbiBmYWlsdXJlLgpAQCAtMTEwLDYgKzExMCwxNSBAQAogICAgOmM6dHlwZTpgY2hhclwqYCwgcmF0aGVyIHRoYW4gYSA6Yzp0eXBlOmBQeU9iamVjdFwqYC4KIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9TZXREZWZhdWx0KFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdCkKKworICAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgUHl0aG9uLWxldmVsIDptZXRoOmBkaWN0LnNldGRlZmF1bHRgLiAgSWYgcHJlc2VudCwgaXQKKyAgIHJldHVybnMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gKmtleSogZnJvbSB0aGUgZGljdGlvbmFyeSAqcCouICBJZiB0aGUga2V5CisgICBpcyBub3QgaW4gdGhlIGRpY3QsIGl0IGlzIGluc2VydGVkIHdpdGggdmFsdWUgKmRlZmF1bHRvYmoqIGFuZCAqZGVmYXVsdG9iaioKKyAgIGlzIHJldHVybmVkLiAgVGhpcyBmdW5jdGlvbiBldmFsdWF0ZXMgdGhlIGhhc2ggZnVuY3Rpb24gb2YgKmtleSogb25seSBvbmNlLAorICAgaW5zdGVhZCBvZiBldmFsdWF0aW5nIGl0IGluZGVwZW5kZW50bHkgZm9yIHRoZSBsb29rdXAgYW5kIHRoZSBpbnNlcnRpb24uCisKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RfSXRlbXMoUHlPYmplY3QgKnApCiAKICAgIFJldHVybiBhIDpjOnR5cGU6YFB5TGlzdE9iamVjdGAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlIGRpY3Rpb25hcnkuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QgYi9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKaW5kZXggYzNkOTc4Zi4uOTg5MTY2ZiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdApAQCAtOTAsNiArOTAsMTYgQEAKICAgIHRoZSBjbGFzcyBpbiB0aGF0IGNhc2UuICBJZiB0aGUgdmFsdWVzIGFyZSBhbHJlYWR5IG5vcm1hbGl6ZWQsIG5vdGhpbmcgaGFwcGVucy4KICAgIFRoZSBkZWxheWVkIG5vcm1hbGl6YXRpb24gaXMgaW1wbGVtZW50ZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4KIAorICAgLi4gbm90ZTo6CisKKyAgICAgIFRoaXMgZnVuY3Rpb24gKmRvZXMgbm90KiBpbXBsaWNpdGx5IHNldCB0aGUgYGBfX3RyYWNlYmFja19fYGAKKyAgICAgIGF0dHJpYnV0ZSBvbiB0aGUgZXhjZXB0aW9uIHZhbHVlLiBJZiBzZXR0aW5nIHRoZSB0cmFjZWJhY2sKKyAgICAgIGFwcHJvcHJpYXRlbHkgaXMgZGVzaXJlZCwgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIHNuaXBwZXQgaXMgbmVlZGVkOjoKKworICAgICAgICAgaWYgKHRiICE9IE5VTEwpIHsKKyAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHZhbCwgdGIpOworICAgICAgICAgfQorCiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX0NsZWFyKCkKIApAQCAtMjMxLDExICsyNDEsMjAgQEAKICAgIGV4Y2VwdGlvbiBpbnN0YW5jZS4KIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdCwgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0MikKKworICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RgLCBidXQgdGFrZXMgYSBzZWNvbmQKKyAgIGZpbGVuYW1lIG9iamVjdCwgZm9yIHJhaXNpbmcgZXJyb3JzIHdoZW4gYSBmdW5jdGlvbiB0aGF0IHRha2VzIHR3byBmaWxlbmFtZXMKKyAgIGZhaWxzLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeU9iamVjdCAqdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0YCwgYnV0IHRoZSBmaWxlbmFtZQogICAgaXMgZ2l2ZW4gYXMgYSBDIHN0cmluZy4gICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nCi0gICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KKyAgICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KIAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCBpZXJyKQpAQCAtMjU2LDE4ICsyNzUsMTEgQEAKICAgIHNwZWNpZnlpbmcgdGhlIGV4Y2VwdGlvbiB0eXBlIHRvIGJlIHJhaXNlZC4gQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoaW50IGllcnIsIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdCkKLQotICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUVycl9TZXRGcm9tV2luZG93c0VycmAsIHdpdGggdGhlIGFkZGl0aW9uYWwgYmVoYXZpb3IKLSAgIHRoYXQgaWYgKmZpbGVuYW1lT2JqZWN0KiBpcyBub3QgKk5VTEwqLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mCi0gICA6ZXhjOmBXaW5kb3dzRXJyb3JgIGFzIGEgdGhpcmQgcGFyYW1ldGVyLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgotCi0KIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoaW50IGllcnIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogCiAgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0YCwgYnV0IHRoZQogICAgZmlsZW5hbWUgaXMgZ2l2ZW4gYXMgYSBDIHN0cmluZy4gICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtCi0gICBlbmNvZGluZyAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4gIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKyAgIGVuY29kaW5nICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4gIEF2YWlsYWJpbGl0eTogV2luZG93cy4KIAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KFB5T2JqZWN0ICp0eXBlLCBpbnQgaWVyciwgUHlPYmplY3QgKmZpbGVuYW1lKQpAQCAtMjc3LDYgKzI4OSwxNSBAQAogICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKFB5T2JqZWN0ICp0eXBlLCBpbnQgaWVyciwgUHlPYmplY3QgKmZpbGVuYW1lLCBQeU9iamVjdCAqZmlsZW5hbWUyKQorCisgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0YCwKKyAgIGJ1dCBhY2NlcHRzIGEgc2Vjb25kIGZpbGVuYW1lIG9iamVjdC4KKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZShQeU9iamVjdCAqdHlwZSwgaW50IGllcnIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogCiAgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lYCwgd2l0aCBhbiBhZGRpdGlvbmFsCkBAIC0yOTMsMjAgKzMxNCwyNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU3ludGF4TG9jYXRpb25FeChjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogCiAgICBTZXQgZmlsZSwgbGluZSwgYW5kIG9mZnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLiAgSWYgdGhlCiAgICBjdXJyZW50IGV4Y2VwdGlvbiBpcyBub3QgYSA6ZXhjOmBTeW50YXhFcnJvcmAsIHRoZW4gaXQgc2V0cyBhZGRpdGlvbmFsCiAgICBhdHRyaWJ1dGVzLCB3aGljaCBtYWtlIHRoZSBleGNlcHRpb24gcHJpbnRpbmcgc3Vic3lzdGVtIHRoaW5rIHRoZSBleGNlcHRpb24KLSAgIGlzIGEgOmV4YzpgU3ludGF4RXJyb3JgLiAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBpcyBhIDpleGM6YFN5bnRheEVycm9yYC4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKKworICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdGAsIGJ1dCAqZmlsZW5hbWUqIGlzIGEgYnl0ZSBzdHJpbmcKKyAgIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1N5bnRheExvY2F0aW9uKGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQogCi0gICBMaWtlIDpjOmZ1bmM6YFB5RXJyX1N5bnRheExvY2F0aW9uRXhjYCwgYnV0IHRoZSBjb2xfb2Zmc2V0IHBhcmFtZXRlciBpcworICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbkV4YCwgYnV0IHRoZSBjb2xfb2Zmc2V0IHBhcmFtZXRlciBpcwogICAgb21pdHRlZC4KIAogCkBAIC0zNTUsMTUgKzM4MywyMiBAQAogICAgZG9jdW1lbnRhdGlvbi4gIFRoZXJlIGlzIG5vIEMgQVBJIGZvciB3YXJuaW5nIGNvbnRyb2wuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRXhwbGljaXQoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICptZXNzYWdlLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSkKIAogICAgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCBleHBsaWNpdCBjb250cm9sIG92ZXIgYWxsIHdhcm5pbmcgYXR0cmlidXRlcy4gIFRoaXMKICAgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIgYXJvdW5kIHRoZSBQeXRob24gZnVuY3Rpb24KICAgIDpmdW5jOmB3YXJuaW5ncy53YXJuX2V4cGxpY2l0YCwgc2VlIHRoZXJlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVGhlICptb2R1bGUqCiAgICBhbmQgKnJlZ2lzdHJ5KiBhcmd1bWVudHMgbWF5IGJlIHNldCB0byAqTlVMTCogdG8gZ2V0IHRoZSBkZWZhdWx0IGVmZmVjdAotICAgZGVzY3JpYmVkIHRoZXJlLiAqbWVzc2FnZSogYW5kICptb2R1bGUqIGFyZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MsCi0gICAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBkZXNjcmliZWQgdGhlcmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfV2FybkV4cGxpY2l0KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGNvbnN0IGNoYXIgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5KQorCisgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdGAgZXhjZXB0IHRoYXQgKm1lc3NhZ2UqIGFuZAorICAgKm1vZHVsZSogYXJlIFVURi04IGVuY29kZWQgc3RyaW5ncywgYW5kICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZQorICAgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlfc3NpemVfdCBzdGFja19sZXZlbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZmlsZS5yc3QgYi9Eb2MvYy1hcGkvZmlsZS5yc3QKaW5kZXggY2MxOTBjOS4uNmYyZWNlZSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2ZpbGUucnN0CisrKyBiL0RvYy9jLWFwaS9maWxlLnJzdApAQCAtMTcsNyArMTcsNyBAQAogdGhlIDptb2Q6YGlvYCBBUElzIGluc3RlYWQuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5RmlsZV9Gcm9tRmQoaW50IGZkLCBjaGFyICpuYW1lLCBjaGFyICptb2RlLCBpbnQgYnVmZmVyaW5nLCBjaGFyICplbmNvZGluZywgY2hhciAqZXJyb3JzLCBjaGFyICpuZXdsaW5lLCBpbnQgY2xvc2VmZCkKKy4uIGM6ZnVuY3Rpb246OiBQeUZpbGVfRnJvbUZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycywgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCiAKICAgIENyZWF0ZSBhIFB5dGhvbiBmaWxlIG9iamVjdCBmcm9tIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYW4gYWxyZWFkeQogICAgb3BlbmVkIGZpbGUgKmZkKi4gIFRoZSBhcmd1bWVudHMgKm5hbWUqLCAqZW5jb2RpbmcqLCAqZXJyb3JzKiBhbmQgKm5ld2xpbmUqCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW1wb3J0LnJzdCBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CmluZGV4IDI3MDE1MmUuLjZjZDJiOGIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9pbXBvcnQucnN0CisrKyBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgIGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IGNvbXBpbGUKIApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXNgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUpCiAKICAgIExpa2UgOmM6ZnVuYzpgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVgLCBidXQgdGhlIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIG9mCiAgICB0aGUgbW9kdWxlIG9iamVjdCBpcyBzZXQgdG8gKnBhdGhuYW1lKiBpZiBpdCBpcyBub24tYGBOVUxMYGAuCkBAIC0xNjIsNyArMTYyLDcgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUsIGNoYXIgKmNwYXRobmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKmNwYXRobmFtZSkKIAogICAgTGlrZSA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdGAsIGJ1dCAqbmFtZSosICpwYXRobmFtZSogYW5kCiAgICAqY3BhdGhuYW1lKiBhcmUgVVRGLTggZW5jb2RlZCBzdHJpbmdzLiBBdHRlbXB0cyBhcmUgYWxzbyBtYWRlIHRvIGZpZ3VyZSBvdXQKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY2hhciAqbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0YCwgYnV0IHRoZSBuYW1lIGlzIGEKICAgIFVURi04IGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9pbml0LnJzdCBiL0RvYy9jLWFwaS9pbml0LnJzdAppbmRleCA3MDU1MDlmLi42NDM5ZDdmIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW5pdC5yc3QKKysrIGIvRG9jL2MtYXBpL2luaXQucnN0CkBAIC04Niw2ICs4NiwzNiBAQAogPT09PT09PT09PT09PT09PT09PT09PT0KIAogCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoY2hhciAqZW5jb2RpbmcsIGNoYXIgKmVycm9ycykKKworICAgLi4gaW5kZXg6OgorICAgICAgc2luZ2xlOiBQeV9Jbml0aWFsaXplKCkKKyAgICAgIHNpbmdsZTogbWFpbigpCisgICAgICB0cmlwbGU6IHN0ZGluOyBzdGRvdXQ7IHNkdGVycgorCisgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLCBpZiBpdCBpcworICAgY2FsbGVkIGF0IGFsbC4gSXQgc3BlY2lmaWVzIHdoaWNoIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGluZyB0byB1c2UKKyAgIHdpdGggc3RhbmRhcmQgSU8sIHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMgaW4gOmZ1bmM6YHN0ci5lbmNvZGVgLgorCisgICBJdCBvdmVycmlkZXMgOmVudnZhcjpgUFlUSE9OSU9FTkNPRElOR2AgdmFsdWVzLCBhbmQgYWxsb3dzIGVtYmVkZGluZyBjb2RlCisgICB0byBjb250cm9sIElPIGVuY29kaW5nIHdoZW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGRvZXMgbm90IHdvcmsuCisKKyAgIGBgZW5jb2RpbmdgYCBhbmQvb3IgYGBlcnJvcnNgYCBtYXkgYmUgTlVMTCB0byB1c2UKKyAgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGFuZC9vciBkZWZhdWx0IHZhbHVlcyAoZGVwZW5kaW5nIG9uIG90aGVyCisgICBzZXR0aW5ncykuCisKKyAgIE5vdGUgdGhhdCA6ZGF0YTpgc3lzLnN0ZGVycmAgYWx3YXlzIHVzZXMgdGhlICJiYWNrc2xhc2hyZXBsYWNlIiBlcnJvcgorICAgaGFuZGxlciwgcmVnYXJkbGVzcyBvZiB0aGlzIChvciBhbnkgb3RoZXIpIHNldHRpbmcuCisKKyAgIElmIDpjOmZ1bmM6YFB5X0ZpbmFsaXplYCBpcyBjYWxsZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIGJlIGNhbGxlZAorICAgYWdhaW4gaW4gb3JkZXIgdG8gYWZmZWN0IHN1YnNlcXVlbnQgY2FsbHMgdG8gOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWAuCisKKyAgIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBhIG5vbnplcm8gdmFsdWUgb24gZXJyb3IgKGUuZy4gY2FsbGluZyBhZnRlciB0aGUKKyAgIGludGVycHJldGVyIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeV9TZXRQcm9ncmFtTmFtZSh3Y2hhcl90ICpuYW1lKQogCiAgICAuLiBpbmRleDo6CkBAIC0zMjksNyArMzU5LDExIEBACiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX1NldEFyZ3YoaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2KQogCi0gICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndkV4YCB3aXRoICp1cGRhdGVwYXRoKiBzZXQgdG8gMS4KKyAgIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSA6YzpmdW5jOmBQeVN5c19TZXRBcmd2RXhgIHdpdGggKnVwZGF0ZXBhdGgqIHNldAorICAgdG8gMSB1bmxlc3MgdGhlIDpwcm9ncmFtOmBweXRob25gIGludGVycHJldGVyIHdhcyBzdGFydGVkIHdpdGggdGhlCisgICA6b3B0aW9uOmAtSWAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IFRoZSAqdXBkYXRlcGF0aCogdmFsdWUgZGVwZW5kcyBvbiA6b3B0aW9uOmAtSWAuCiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICpob21lKQpAQCAtNjU3LDYgKzY5MSwyMCBAQAogICAgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQuICBUaGlzIGlzIG1haW5seSBhIGhlbHBlci9kaWFnbm9zdGljIGZ1bmN0aW9uLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlHSUxTdGF0ZV9DaGVjaygpCisKKyAgIFJldHVybiAxIGlmIHRoZSBjdXJyZW50IHRocmVhZCBpcyBob2xkaW5nIHRoZSBHSUwgYW5kIDAgb3RoZXJ3aXNlLgorICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZCBhdCBhbnkgdGltZS4KKyAgIE9ubHkgaWYgaXQgaGFzIGhhZCBpdHMgUHl0aG9uIHRocmVhZCBzdGF0ZSBpbml0aWFsaXplZCBhbmQgY3VycmVudGx5IGlzCisgICBob2xkaW5nIHRoZSBHSUwgd2lsbCBpdCByZXR1cm4gMS4KKyAgIFRoaXMgaXMgbWFpbmx5IGEgaGVscGVyL2RpYWdub3N0aWMgZnVuY3Rpb24uICBJdCBjYW4gYmUgdXNlZnVsCisgICBmb3IgZXhhbXBsZSBpbiBjYWxsYmFjayBjb250ZXh0cyBvciBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd2hlbgorICAga25vd2luZyB0aGF0IHRoZSBHSUwgaXMgbG9ja2VkIGNhbiBhbGxvdyB0aGUgY2FsbGVyIHRvIHBlcmZvcm0gc2Vuc2l0aXZlCisgICBhY3Rpb25zIG9yIG90aGVyd2lzZSBiZWhhdmUgZGlmZmVyZW50bHkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBub3JtYWxseSB1c2VkIHdpdGhvdXQgYSB0cmFpbGluZyBzZW1pY29sb247IGxvb2sgZm9yCiBleGFtcGxlIHVzYWdlIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2xvbmcucnN0IGIvRG9jL2MtYXBpL2xvbmcucnN0CmluZGV4IGQ1NDMwZmQuLmIzNDgwMTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9sb25nLnJzdAorKysgYi9Eb2MvYy1hcGkvbG9uZy5yc3QKQEAgLTgwLDcgKzgwLDcgQEAKICAgICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQogCiAgICBSZXR1cm4gYSBuZXcgOmM6dHlwZTpgUHlMb25nT2JqZWN0YCBiYXNlZCBvbiB0aGUgc3RyaW5nIHZhbHVlIGluICpzdHIqLCB3aGljaAogICAgaXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSByYWRpeCBpbiAqYmFzZSouICBJZiAqcGVuZCogaXMgbm9uLSpOVUxMKiwKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tYXBwaW5nLnJzdCBiL0RvYy9jLWFwaS9tYXBwaW5nLnJzdAppbmRleCAwZWYyOTYxLi4yODAzZmQwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWFwcGluZy5yc3QKKysrIGIvRG9jL2MtYXBpL21hcHBpbmcucnN0CkBAIC0yMiw3ICsyMiw3IEBACiAgICBleHByZXNzaW9uIGBgbGVuKG8pYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogCiAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCAqa2V5KiBmcm9tIHRoZSBvYmplY3QgKm8qLiBSZXR1cm4gYGAtMWBgIG9uCiAgICBmYWlsdXJlLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gc3RhdGVtZW50IGBgZGVsIG9ba2V5XWBgLgpAQCAtNjcsMTMgKzY3LDEzIEBACiAgICB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBsaXN0KG8uaXRlbXMoKSlgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJldHVybiBlbGVtZW50IG9mICpvKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgKmtleSogb3IgKk5VTEwqIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9ba2V5XWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnYpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2KQogCiAgICBNYXAgdGhlIG9iamVjdCAqa2V5KiB0byB0aGUgdmFsdWUgKnYqIGluIG9iamVjdCAqbyouIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgb1trZXldID0gdmBgLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21lbW9yeS5yc3QgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdAppbmRleCA4YWZhNTZhLi5hODJlMWMyIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWVtb3J5LnJzdAorKysgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdApAQCAtODQsNiArODQsNDggQEAKIGZvciB0aGUgSS9PIGJ1ZmZlciBlc2NhcGVzIGNvbXBsZXRlbHkgdGhlIFB5dGhvbiBtZW1vcnkgbWFuYWdlci4KIAogCitSYXcgTWVtb3J5IEludGVyZmFjZQorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzZXRzIGFyZSB3cmFwcGVycyB0byB0aGUgc3lzdGVtIGFsbG9jYXRvci4gVGhlc2UKK2Z1bmN0aW9ucyBhcmUgdGhyZWFkLXNhZmUsIHRoZSA6dGVybTpgR0lMIDxnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jaz5gIGRvZXMgbm90CituZWVkIHRvIGJlIGhlbGQuCisKK1RoZSBkZWZhdWx0IHJhdyBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fUmF3TWFsbG9jKHNpemVfdCBuKQorCisgICBBbGxvY2F0ZXMgKm4qIGJ5dGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciBvZiB0eXBlIDpjOnR5cGU6YHZvaWRcKmAgdG8gdGhlCisgICBhbGxvY2F0ZWQgbWVtb3J5LCBvciAqTlVMTCogaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFJlcXVlc3RpbmcgemVybyBieXRlcworICAgcmV0dXJucyBhIGRpc3RpbmN0IG5vbi0qTlVMTCogcG9pbnRlciBpZiBwb3NzaWJsZSwgYXMgaWYKKyAgIGBgUHlNZW1fUmF3TWFsbG9jKDEpYGAgaGFkIGJlZW4gY2FsbGVkIGluc3RlYWQuIFRoZSBtZW1vcnkgd2lsbCBub3QgaGF2ZQorICAgYmVlbiBpbml0aWFsaXplZCBpbiBhbnkgd2F5LgorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9SYXdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuKQorCisgICBSZXNpemVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCogdG8gKm4qIGJ5dGVzLiBUaGUgY29udGVudHMgd2lsbAorICAgYmUgdW5jaGFuZ2VkIHRvIHRoZSBtaW5pbXVtIG9mIHRoZSBvbGQgYW5kIHRoZSBuZXcgc2l6ZXMuIElmICpwKiBpcyAqTlVMTCosCisgICB0aGUgY2FsbCBpcyBlcXVpdmFsZW50IHRvIGBgUHlNZW1fUmF3TWFsbG9jKG4pYGA7IGVsc2UgaWYgKm4qIGlzIGVxdWFsIHRvCisgICB6ZXJvLCB0aGUgbWVtb3J5IGJsb2NrIGlzIHJlc2l6ZWQgYnV0IGlzIG5vdCBmcmVlZCwgYW5kIHRoZSByZXR1cm5lZCBwb2ludGVyCisgICBpcyBub24tKk5VTEwqLiBVbmxlc3MgKnAqIGlzICpOVUxMKiwgaXQgbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgYQorICAgcHJldmlvdXMgY2FsbCB0byA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLiBJZgorICAgdGhlIHJlcXVlc3QgZmFpbHMsIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgIHJldHVybnMgKk5VTEwqIGFuZCAqcCogcmVtYWlucworICAgYSB2YWxpZCBwb2ludGVyIHRvIHRoZSBwcmV2aW91cyBtZW1vcnkgYXJlYS4KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9SYXdGcmVlKHZvaWQgKnApCisKKyAgIEZyZWVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCosIHdoaWNoIG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEKKyAgIHByZXZpb3VzIGNhbGwgdG8gOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYC4KKyAgIE90aGVyd2lzZSwgb3IgaWYgYGBQeU1lbV9GcmVlKHApYGAgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdW5kZWZpbmVkCisgICBiZWhhdmlvciBvY2N1cnMuIElmICpwKiBpcyAqTlVMTCosIG5vIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCisKKwogLi4gX21lbW9yeWludGVyZmFjZToKIAogTWVtb3J5IEludGVyZmFjZQpAQCAtOTEsOCArMTMzLDE2IEBACiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2V0cywgbW9kZWxlZCBhZnRlciB0aGUgQU5TSSBDIHN0YW5kYXJkLCBidXQgc3BlY2lmeWluZwogYmVoYXZpb3Igd2hlbiByZXF1ZXN0aW5nIHplcm8gYnl0ZXMsIGFyZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpbmcgYW5kIHJlbGVhc2luZwotbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwOgorbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwLgogCitUaGUgZGVmYXVsdCBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHdhcm5pbmc6OgorCisgICBUaGUgOnRlcm06YEdJTCA8Z2xvYmFsIGludGVycHJldGVyIGxvY2s+YCBtdXN0IGJlIGhlbGQgd2hlbiB1c2luZyB0aGVzZQorICAgZnVuY3Rpb25zLgogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fTWFsbG9jKHNpemVfdCBuKQogCkBAIC0xNTUsNiArMjA1LDEyNSBAQAogOmM6ZnVuYzpgUHlNZW1fTkVXYCwgOmM6ZnVuYzpgUHlNZW1fUkVTSVpFYCwgOmM6ZnVuYzpgUHlNZW1fREVMYC4KIAogCitDdXN0b21pemUgTWVtb3J5IEFsbG9jYXRvcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3IKKworICAgU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yLiBUaGUgc3RydWN0dXJlIGhhcworICAgZm91ciBmaWVsZHM6CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgYGB2b2lkICpjdHhgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiBtYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICAgICAgICAgfCBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiByZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpYGAgfCBhbGxvY2F0ZSBvciByZXNpemUgYSBtZW1vcnkgYmxvY2sgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpYGAgICAgICAgICAgICAgICAgICAgICAgfCBmcmVlIGEgbWVtb3J5IGJsb2NrICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3JEb21haW4KKworICAgRW51bSB1c2VkIHRvIGlkZW50aWZ5IGFuIGFsbG9jYXRvciBkb21haW4uIERvbWFpbnM6CisKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX1JBV2A6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX01FTWA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fRnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX09CSmA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLgorCisgICBUaGUgbmV3IGFsbG9jYXRvciBtdXN0IHJldHVybiBhIGRpc3RpbmN0IG5vbi1OVUxMIHBvaW50ZXIgd2hlbiByZXF1ZXN0aW5nCisgICB6ZXJvIGJ5dGVzLgorCisgICBGb3IgdGhlIDpjOmRhdGE6YFBZTUVNX0RPTUFJTl9SQVdgIGRvbWFpbiwgdGhlIGFsbG9jYXRvciBtdXN0IGJlCisgICB0aHJlYWQtc2FmZTogdGhlIDp0ZXJtOmBHSUwgPGdsb2JhbCBpbnRlcnByZXRlciBsb2NrPmAgaXMgbm90IGhlbGQgd2hlbiB0aGUKKyAgIGFsbG9jYXRvciBpcyBjYWxsZWQuCisKKyAgIElmIHRoZSBuZXcgYWxsb2NhdG9yIGlzIG5vdCBhIGhvb2sgKGRvZXMgbm90IGNhbGwgdGhlIHByZXZpb3VzIGFsbG9jYXRvciksCisgICB0aGUgOmM6ZnVuYzpgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzYCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byByZWluc3RhbGwgdGhlCisgICBkZWJ1ZyBob29rcyBvbiB0b3Agb24gdGhlIG5ldyBhbGxvY2F0b3IuCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpCisKKyAgIFNldHVwIGhvb2tzIHRvIGRldGVjdCBidWdzIGluIHRoZSBmb2xsb3dpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0b3IKKyAgIGZ1bmN0aW9uczoKKworICAgLSA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCwKKyAgICAgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgIC0gOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AsIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgCisgICAtIDpjOmZ1bmM6YFB5T2JqZWN0X01hbGxvY2AsIDpjOmZ1bmM6YFB5T2JqZWN0X1JlYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9GcmVlYAorCisgICBOZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhDQmBgLCBmcmVlZCBtZW1vcnkgaXMKKyAgIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhEQmBgLiBBZGRpdGlvbm5hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAgY2FsbGVkIG9uIGEgYnVmZmVyCisgICAgIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgCisgICAtIGRldGVjdCB3cml0ZSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGJ1ZmZlciB1bmRlcmZsb3cpCisgICAtIGRldGVjdCB3cml0ZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKGJ1ZmZlciBvdmVyZmxvdykKKworICAgVGhlIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiBQeXRob24gaXMgbm90IGNvbXBpbGVkIGlzIGRlYnVnIG1vZGUuCisKKworQ3VzdG9taXplIFB5T2JqZWN0IEFyZW5hIEFsbG9jYXRvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24gaGFzIGEgKnB5bWFsbG9jKiBhbGxvY2F0b3IgZm9yIGFsbG9jYXRpb25zIHNtYWxsZXIgdGhhbiA1MTIgYnl0ZXMuIFRoaXMKK2FsbG9jYXRvciBpcyBvcHRpbWl6ZWQgZm9yIHNtYWxsIG9iamVjdHMgd2l0aCBhIHNob3J0IGxpZmV0aW1lLiBJdCB1c2VzIG1lbW9yeQorbWFwcGluZ3MgY2FsbGVkICJhcmVuYXMiIHdpdGggYSBmaXhlZCBzaXplIG9mIDI1NiBLQi4gSXQgZmFsbHMgYmFjayB0bworOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AgZm9yIGFsbG9jYXRpb25zIGxhcmdlcgordGhhbiA1MTIgYnl0ZXMuICAqcHltYWxsb2MqIGlzIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB1c2VkIGJ5Cis6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLgorCitUaGUgZGVmYXVsdCBhcmVuYSBhbGxvY2F0b3IgdXNlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworKiA6YzpmdW5jOmBWaXJ0dWFsQWxsb2NgIGFuZCA6YzpmdW5jOmBWaXJ0dWFsRnJlZWAgb24gV2luZG93cywKKyogOmM6ZnVuYzpgbW1hcGAgYW5kIDpjOmZ1bmM6YG11bm1hcGAgaWYgYXZhaWxhYmxlLAorKiA6YzpmdW5jOmBtYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYCBvdGhlcndpc2UuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOnR5cGU6OiBQeU9iamVjdEFyZW5hQWxsb2NhdG9yCisKKyAgIFN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGFuIGFyZW5hIGFsbG9jYXRvci4gVGhlIHN0cnVjdHVyZSBoYXMKKyAgIHRocmVlIGZpZWxkczoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBgYHZvaWQgKmN0eGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgdm9pZCogYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICB8IGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSwgdm9pZCAqcHRyKWBgIHwgZnJlZSBhbiBhcmVuYSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4KKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuCisKKwogLi4gX21lbW9yeWV4YW1wbGVzOgogCiBFeGFtcGxlcwpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21vZHVsZS5yc3QgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdAppbmRleCBlODBlMGVhLi4yNmM0Mzg0IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbW9kdWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdApAQCAtMzUsMTMgKzM1LDIwIEBACiAgICAgICBzaW5nbGU6IF9fbmFtZV9fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2RvY19fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2ZpbGVfXyAobW9kdWxlIGF0dHJpYnV0ZSkKKyAgICAgIHNpbmdsZTogX19wYWNrYWdlX18gKG1vZHVsZSBhdHRyaWJ1dGUpCisgICAgICBzaW5nbGU6IF9fbG9hZGVyX18gKG1vZHVsZSBhdHRyaWJ1dGUpCiAKICAgIFJldHVybiBhIG5ldyBtb2R1bGUgb2JqZWN0IHdpdGggdGhlIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlIHNldCB0byAqbmFtZSouCi0gICBPbmx5IHRoZSBtb2R1bGUncyA6YXR0cjpgX19kb2NfX2AgYW5kIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlcyBhcmUgZmlsbGVkIGluOwotICAgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGEgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUuCisgICBUaGUgbW9kdWxlJ3MgOmF0dHI6YF9fbmFtZV9fYCwgOmF0dHI6YF9fZG9jX19gLCA6YXR0cjpgX19wYWNrYWdlX19gLCBhbmQKKyAgIDphdHRyOmBfX2xvYWRlcl9fYCBhdHRyaWJ1dGVzIGFyZSBmaWxsZWQgaW4gKGFsbCBidXQgOmF0dHI6YF9fbmFtZV9fYCBhcmUgc2V0CisgICB0byBgYE5vbmVgYCk7IHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBhIDphdHRyOmBfX2ZpbGVfX2AKKyAgIGF0dHJpYnV0ZS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6YXR0cjpgX19wYWNrYWdlX19gIGFuZCA6YXR0cjpgX19sb2FkZXJfX2AgYXJlIHNldCB0byBgYE5vbmVgYC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TW9kdWxlX05ldyhjb25zdCBjaGFyICpuYW1lKQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvb2JqZWN0LnJzdCBiL0RvYy9jLWFwaS9vYmplY3QucnN0CmluZGV4IDBhYmEzNjAuLmFkODQzMDEgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9vYmplY3QucnN0CisrKyBiL0RvYy9jLWFwaS9vYmplY3QucnN0CkBAIC0xNDksNiArMTQ5LDkgQEAKICAgIHJlcHJlc2VudGF0aW9uIG9uIHN1Y2Nlc3MsICpOVUxMKiBvbiBmYWlsdXJlLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUKICAgIFB5dGhvbiBleHByZXNzaW9uIGBgcmVwcihvKWBgLiAgQ2FsbGVkIGJ5IHRoZSA6ZnVuYzpgcmVwcmAgYnVpbHQtaW4gZnVuY3Rpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGlzIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyBhIGRlYnVnIGFzc2VydGlvbiB0byBoZWxwIGVuc3VyZSB0aGF0IGl0CisgICAgICBkb2VzIG5vdCBzaWxlbnRseSBkaXNjYXJkIGFuIGFjdGl2ZSBleGNlcHRpb24uCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQVNDSUkoUHlPYmplY3QgKm8pCiAKQEAgLTE3MCw2ICsxNzMsMTAgQEAKICAgIFB5dGhvbiBleHByZXNzaW9uIGBgc3RyKG8pYGAuICBDYWxsZWQgYnkgdGhlIDpmdW5jOmBzdHJgIGJ1aWx0LWluIGZ1bmN0aW9uCiAgICBhbmQsIHRoZXJlZm9yZSwgYnkgdGhlIDpmdW5jOmBwcmludGAgZnVuY3Rpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGlzIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyBhIGRlYnVnIGFzc2VydGlvbiB0byBoZWxwIGVuc3VyZSB0aGF0IGl0CisgICAgICBkb2VzIG5vdCBzaWxlbnRseSBkaXNjYXJkIGFuIGFjdGl2ZSBleGNlcHRpb24uCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQnl0ZXMoUHlPYmplY3QgKm8pCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogYnl0ZXMKQEAgLTI0MCw3ICsyNDcsNyBAQAogICAgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgY2FsbGFibGVfb2JqZWN0KCphcmdzKWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5T2JqZWN0ICpjYWxsYWJsZSwgY2hhciAqZm9ybWF0LCAuLi4pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCiAgICBDYWxsIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdCAqY2FsbGFibGUqLCB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIEMgYXJndW1lbnRzLgogICAgVGhlIEMgYXJndW1lbnRzIGFyZSBkZXNjcmliZWQgdXNpbmcgYSA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCBzdHlsZSBmb3JtYXQKQEAgLTI1MCw4ICsyNTcsMTEgQEAKICAgIHBhc3MgOmM6dHlwZTpgUHlPYmplY3QgXCpgIGFyZ3MsIDpjOmZ1bmM6YFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3NgIGlzIGEKICAgIGZhc3RlciBhbHRlcm5hdGl2ZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSB0eXBlIG9mICpmb3JtYXQqIHdhcyBjaGFuZ2VkIGZyb20gYGBjaGFyICpgYC4KIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjaGFyICptZXRob2QsIGNoYXIgKmZvcm1hdCwgLi4uKQorCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKm1ldGhvZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAKICAgIENhbGwgdGhlIG1ldGhvZCBuYW1lZCAqbWV0aG9kKiBvZiBvYmplY3QgKm8qIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YgQwogICAgYXJndW1lbnRzLiAgVGhlIEMgYXJndW1lbnRzIGFyZSBkZXNjcmliZWQgYnkgYSA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCBmb3JtYXQKQEAgLTI2MSw2ICsyNzEsOSBAQAogICAgTm90ZSB0aGF0IGlmIHlvdSBvbmx5IHBhc3MgOmM6dHlwZTpgUHlPYmplY3QgXCpgIGFyZ3MsCiAgICA6YzpmdW5jOmBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJnc2AgaXMgYSBmYXN0ZXIgYWx0ZXJuYXRpdmUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgdHlwZXMgb2YgKm1ldGhvZCogYW5kICpmb3JtYXQqIHdlcmUgY2hhbmdlZCBmcm9tIGBgY2hhciAqYGAuCisKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKFB5T2JqZWN0ICpjYWxsYWJsZSwgLi4uLCBOVUxMKQogCkBAIC0zNDIsNiArMzU1LDE1IEBACiAgICByZXR1cm5lZC4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbGVuKG8pYGAuCiAKIAorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBkZWZhdWx0KQorCisgICBSZXR1cm4gYW4gZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAqbyouIEZpcnN0IHRyeWluZyB0byByZXR1cm4gaXRzCisgICBhY3R1YWwgbGVuZ3RoLCB0aGVuIGFuIGVzdGltYXRlIHVzaW5nIGBgX19sZW5ndGhfaGludF9fYGAsIGFuZCBmaW5hbGx5CisgICByZXR1cm5pbmcgdGhlIGRlZmF1bHQgdmFsdWUuIE9uIGVycm9yIGBgLTFgYCBpcyByZXR1cm5lZC4gVGhpcyBpcyB0aGUKKyAgIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgb3BlcmF0b3IubGVuZ3RoX2hpbnQobywgZGVmYXVsdClgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfR2V0SXRlbShQeU9iamVjdCAqbywgUHlPYmplY3QgKmtleSkKIAogICAgUmV0dXJuIGVsZW1lbnQgb2YgKm8qIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCAqa2V5KiBvciAqTlVMTCogb24gZmFpbHVyZS4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS90eXBlLnJzdCBiL0RvYy9jLWFwaS90eXBlLnJzdAppbmRleCA1ZDgzMjU0Li44ZGMwNDBiIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvdHlwZS5yc3QKKysrIGIvRG9jL2MtYXBpL3R5cGUucnN0CkBAIC05NywzICs5NywxMyBAQAogICAgdHlwZXMuIFRoaXMgYWxsb3dzIHRoZSBjYWxsZXIgdG8gcmVmZXJlbmNlIG90aGVyIGhlYXAgdHlwZXMgYXMgYmFzZSB0eXBlcy4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeVR5cGVfR2V0U2xvdChQeVR5cGVPYmplY3QgKnR5cGUsIGludCBzbG90KQorCisgICBSZXR1cm4gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgc3RvcmVkIGluIHRoZSBnaXZlbiBzbG90LiBJZiB0aGUKKyAgIHJlc3VsdCBpcyAqTlVMTCosIHRoaXMgaW5kaWNhdGVzIHRoYXQgZWl0aGVyIHRoZSBzbG90IGlzICpOVUxMKiwKKyAgIG9yIHRoYXQgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aCBpbnZhbGlkIHBhcmFtZXRlcnMuCisgICBDYWxsZXJzIHdpbGwgdHlwaWNhbGx5IGNhc3QgdGhlIHJlc3VsdCBwb2ludGVyIGludG8gdGhlIGFwcHJvcHJpYXRlCisgICBmdW5jdGlvbiB0eXBlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS90eXBlb2JqLnJzdCBiL0RvYy9jLWFwaS90eXBlb2JqLnJzdAppbmRleCBiMmI4MDM4Li40OGIxM2U1IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKKysrIGIvRG9jL2MtYXBpL3R5cGVvYmoucnN0CkBAIC00NjUsNiArNDY1LDE0IEBACiAgICAgICA6Y29uc3Q6YFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBR2AuCiAKIAorICAgLi4gZGF0YTo6IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRQorCisgICAgICBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBzbG90IGlzIHByZXNlbnQgaW4gdGhlCisgICAgICB0eXBlIHN0cnVjdHVyZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gYzptZW1iZXI6OiBjaGFyKiBQeVR5cGVPYmplY3QudHBfZG9jCiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYSBOVUwtdGVybWluYXRlZCBDIHN0cmluZyBnaXZpbmcgdGhlIGRvY3N0cmluZyBmb3IgdGhpcwpAQCAtOTY4LDYgKzk3Niw0NyBAQAogICAgVGhpcyBmaWVsZCBpcyBub3QgaW5oZXJpdGVkOyBpdCBpcyBjYWxjdWxhdGVkIGZyZXNoIGJ5IDpjOmZ1bmM6YFB5VHlwZV9SZWFkeWAuCiAKIAorLi4gYzptZW1iZXI6OiBkZXN0cnVjdG9yIFB5VHlwZU9iamVjdC50cF9maW5hbGl6ZQorCisgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGFuIGluc3RhbmNlIGZpbmFsaXphdGlvbiBmdW5jdGlvbi4gIEl0cyBzaWduYXR1cmUgaXMKKyAgIDpjOnR5cGU6YGRlc3RydWN0b3JgOjoKKworICAgICAgdm9pZCB0cF9maW5hbGl6ZShQeU9iamVjdCAqKQorCisgICBJZiA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZmluYWxpemVgIGlzIHNldCwgdGhlIGludGVycHJldGVyIGNhbGxzIGl0IG9uY2Ugd2hlbgorICAgZmluYWxpemluZyBhbiBpbnN0YW5jZS4gIEl0IGlzIGNhbGxlZCBlaXRoZXIgZnJvbSB0aGUgZ2FyYmFnZQorICAgY29sbGVjdG9yIChpZiB0aGUgaW5zdGFuY2UgaXMgcGFydCBvZiBhbiBpc29sYXRlZCByZWZlcmVuY2UgY3ljbGUpIG9yCisgICBqdXN0IGJlZm9yZSB0aGUgb2JqZWN0IGlzIGRlYWxsb2NhdGVkLiAgRWl0aGVyIHdheSwgaXQgaXMgZ3VhcmFudGVlZAorICAgdG8gYmUgY2FsbGVkIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMsIGVuc3VyaW5nCisgICB0aGF0IGl0IGZpbmRzIHRoZSBvYmplY3QgaW4gYSBzYW5lIHN0YXRlLgorCisgICA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZmluYWxpemVgIHNob3VsZCBub3QgbXV0YXRlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBzdGF0dXM7CisgICB0aGVyZWZvcmUsIGEgcmVjb21tZW5kZWQgd2F5IHRvIHdyaXRlIGEgbm9uLXRyaXZpYWwgZmluYWxpemVyIGlzOjoKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIGxvY2FsX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQorICAgICAgeworICAgICAgICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICAgICAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLworICAgICAgICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworCisgICAgICAgICAgLyogLi4uICovCisKKyAgICAgICAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCisgICAgICAgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKKyAgICAgIH0KKworICAgRm9yIHRoaXMgZmllbGQgdG8gYmUgdGFrZW4gaW50byBhY2NvdW50IChldmVuIHRocm91Z2ggaW5oZXJpdGFuY2UpLAorICAgeW91IG11c3QgYWxzbyBzZXQgdGhlIDpjb25zdDpgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFYCBmbGFncyBiaXQuCisKKyAgIFRoaXMgZmllbGQgaXMgaW5oZXJpdGVkIGJ5IHN1YnR5cGVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgLi4gc2VlYWxzbzo6ICJTYWZlIG9iamVjdCBmaW5hbGl6YXRpb24iICg6cGVwOmA0NDJgKQorCisKIC4uIGM6bWVtYmVyOjogUHlPYmplY3QqIFB5VHlwZU9iamVjdC50cF9jYWNoZQogCiAgICBVbnVzZWQuICBOb3QgaW5oZXJpdGVkLiAgSW50ZXJuYWwgdXNlIG9ubHkuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdW5pY29kZS5yc3QgYi9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKaW5kZXggMzY0OWNmYi4uYzdlZDVlNSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3VuaWNvZGUucnN0CisrKyBiL0RvYy9jLWFwaS91bmljb2RlLnJzdApAQCAtNTI2LDEyICs1MjYsMjMgQEAKICAgICAgIFRoZSBgIiVsbGQiYCBhbmQgYCIlbGx1ImAgZm9ybWF0IHNwZWNpZmllcnMgYXJlIG9ubHkgYXZhaWxhYmxlCiAgICAgICB3aGVuIDpjb25zdDpgSEFWRV9MT05HX0xPTkdgIGlzIGRlZmluZWQuCiAKKyAgIC4uIG5vdGU6OgorICAgICAgVGhlIHdpZHRoIGZvcm1hdHRlciB1bml0IGlzIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIGJ5dGVzLgorICAgICAgVGhlIHByZWNpc2lvbiBmb3JtYXR0ZXIgdW5pdCBpcyBudW1iZXIgb2YgYnl0ZXMgZm9yIGBgIiVzImBgIGFuZAorICAgICAgYGAiJVYiYGAgKGlmIHRoZSBgYFB5T2JqZWN0KmBgIGFyZ3VtZW50IGlzIE5VTEwpLCBhbmQgYSBudW1iZXIgb2YKKyAgICAgIGNoYXJhY3RlcnMgZm9yIGBgIiVBImBgLCBgYCIlVSJgYCwgYGAiJVMiYGAsIGBgIiVSImBgIGFuZCBgYCIlViJgYAorICAgICAgKGlmIHRoZSBgYFB5T2JqZWN0KmBgIGFyZ3VtZW50IGlzIG5vdCBOVUxMKS4KKwogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIFN1cHBvcnQgZm9yIGBgIiVsbGQiYGAgYW5kIGBgIiVsbHUiYGAgYWRkZWQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBTdXBwb3J0IGZvciBgYCIlbGkiYGAsIGBgIiVsbGkiYGAgYW5kIGBgIiV6aSJgYCBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFN1cHBvcnQgd2lkdGggYW5kIHByZWNpc2lvbiBmb3JtYXR0ZXIgZm9yIGBgIiVzImBgLCBgYCIlQSJgYCwgYGAiJVUiYGAsCisgICAgICBgYCIlViJgYCwgYGAiJVMiYGAsIGBgIiVSImBgIGFkZGVkLgorCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YXJncykKIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdCBiL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKaW5kZXggMTRlZjhkZi4uZjdlZDRjNyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdAorKysgYi9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CkBAIC0xNDQsNiArMTQ0LDM3IEBACiAgICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4gIFJldHVybnMgYGAwYGAgYXQgRU9GLgogCiAKKy4uIGM6dmFyOjogaW50ICgqUHlPU19JbnB1dEhvb2spKHZvaWQpCisKKyAgIENhbiBiZSBzZXQgdG8gcG9pbnQgdG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBwcm90b3R5cGUKKyAgIGBgaW50IGZ1bmModm9pZClgYC4gIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIFB5dGhvbidzCisgICBpbnRlcnByZXRlciBwcm9tcHQgaXMgYWJvdXQgdG8gYmVjb21lIGlkbGUgYW5kIHdhaXQgZm9yIHVzZXIgaW5wdXQKKyAgIGZyb20gdGhlIHRlcm1pbmFsLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLiAgT3ZlcnJpZGluZyB0aGlzCisgICBob29rIGNhbiBiZSB1c2VkIHRvIGludGVncmF0ZSB0aGUgaW50ZXJwcmV0ZXIncyBwcm9tcHQgd2l0aCBvdGhlcgorICAgZXZlbnQgbG9vcHMsIGFzIGRvbmUgaW4gdGhlIDpmaWxlOmBNb2R1bGVzL190a2ludGVyLmNgIGluIHRoZQorICAgUHl0aG9uIHNvdXJjZSBjb2RlLgorCisKKy4uIGM6dmFyOjogY2hhciogKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKQorCisgICBDYW4gYmUgc2V0IHRvIHBvaW50IHRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdG90eXBlCisgICBgYGNoYXIgKmZ1bmMoRklMRSAqc3RkaW4sIEZJTEUgKnN0ZG91dCwgY2hhciAqcHJvbXB0KWBgLAorICAgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBmdW5jdGlvbiB1c2VkIHRvIHJlYWQgYSBzaW5nbGUgbGluZSBvZiBpbnB1dAorICAgYXQgdGhlIGludGVycHJldGVyJ3MgcHJvbXB0LiAgVGhlIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIG91dHB1dAorICAgdGhlIHN0cmluZyAqcHJvbXB0KiBpZiBpdCdzIG5vdCAqTlVMTCosIGFuZCB0aGVuIHJlYWQgYSBsaW5lIG9mCisgICBpbnB1dCBmcm9tIHRoZSBwcm92aWRlZCBzdGFuZGFyZCBpbnB1dCBmaWxlLCByZXR1cm5pbmcgdGhlCisgICByZXN1bHRpbmcgc3RyaW5nLiAgRm9yIGV4YW1wbGUsIFRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlIHNldHMKKyAgIHRoaXMgaG9vayB0byBwcm92aWRlIGxpbmUtZWRpdGluZyBhbmQgdGFiLWNvbXBsZXRpb24gZmVhdHVyZXMuCisKKyAgIFRoZSByZXN1bHQgbXVzdCBiZSBhIHN0cmluZyBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvcgorICAgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsIG9yICpOVUxMKiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSByZXN1bHQgbXVzdCBiZSBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvcgorICAgICAgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsIGluc3RlYWQgb2YgYmVpbmcgYWxsb2NhdGVkIGJ5CisgICAgICA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgLgorCisKIC4uIGM6ZnVuY3Rpb246OiBzdHJ1Y3QgX25vZGUqIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHN0YXJ0KQogCiAgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8KQEAgLTIzNSwxNiArMjY2LDE1IEBACiAgICAqb3B0aW1pemUqIHNldCB0byBgYC0xYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeV9Db21waWxlU3RyaW5nRXhGbGFncyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlfQ29tcGlsZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzdHIsIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCiAKICAgIFBhcnNlIGFuZCBjb21waWxlIHRoZSBQeXRob24gc291cmNlIGNvZGUgaW4gKnN0ciosIHJldHVybmluZyB0aGUgcmVzdWx0aW5nIGNvZGUKICAgIG9iamVjdC4gIFRoZSBzdGFydCB0b2tlbiBpcyBnaXZlbiBieSAqc3RhcnQqOyB0aGlzIGNhbiBiZSB1c2VkIHRvIGNvbnN0cmFpbiB0aGUKICAgIGNvZGUgd2hpY2ggY2FuIGJlIGNvbXBpbGVkIGFuZCBzaG91bGQgYmUgOmNvbnN0OmBQeV9ldmFsX2lucHV0YCwKICAgIDpjb25zdDpgUHlfZmlsZV9pbnB1dGAsIG9yIDpjb25zdDpgUHlfc2luZ2xlX2lucHV0YC4gIFRoZSBmaWxlbmFtZSBzcGVjaWZpZWQgYnkKICAgICpmaWxlbmFtZSogaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGNvZGUgb2JqZWN0IGFuZCBtYXkgYXBwZWFyIGluIHRyYWNlYmFja3Mgb3IKLSAgIDpleGM6YFN5bnRheEVycm9yYCBleGNlcHRpb24gbWVzc2FnZXMsIGl0IGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbQotICAgZW5jb2RpbmcgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuICBUaGlzIHJldHVybnMgKk5VTEwqIGlmIHRoZQotICAgY29kZSBjYW5ub3QgYmUgcGFyc2VkIG9yIGNvbXBpbGVkLgorICAgOmV4YzpgU3ludGF4RXJyb3JgIGV4Y2VwdGlvbiBtZXNzYWdlcy4gIFRoaXMgcmV0dXJucyAqTlVMTCogaWYgdGhlIGNvZGUKKyAgIGNhbm5vdCBiZSBwYXJzZWQgb3IgY29tcGlsZWQuCiAKICAgIFRoZSBpbnRlZ2VyICpvcHRpbWl6ZSogc3BlY2lmaWVzIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgb2YgdGhlIGNvbXBpbGVyOyBhCiAgICB2YWx1ZSBvZiBgYC0xYGAgc2VsZWN0cyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIG9mIHRoZSBpbnRlcnByZXRlciBhcyBnaXZlbiBieQpAQCAtMjUyLDkgKzI4MiwxNiBAQAogICAgYGBfX2RlYnVnX19gYCBpcyB0cnVlKSwgYGAxYGAgKGFzc2VydHMgYXJlIHJlbW92ZWQsIGBgX19kZWJ1Z19fYGAgaXMgZmFsc2UpCiAgICBvciBgYDJgYCAoZG9jc3RyaW5ncyBhcmUgcmVtb3ZlZCB0b28pLgogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCisKKyAgIExpa2UgOmM6ZnVuYzpgUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3NgLCBidXQgKmZpbGVuYW1lKiBpcyBhIGJ5dGUgc3RyaW5nCisgICBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKDpmdW5jOmBvcy5mc2RlY29kZWApLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV2YWxfRXZhbENvZGUoUHlPYmplY3QgKmNvLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscykKIAogICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjOmZ1bmM6YFB5RXZhbF9FdmFsQ29kZUV4YCwgd2l0aCBqdXN0CkBAIC0yODUsNiArMzIyLDEwIEBACiAgICBpdCBjYXVzZXMgYW4gZXhjZXB0aW9uIHRvIGltbWVkaWF0ZWx5IGJlIHRocm93bjsgdGhpcyBpcyB1c2VkIGZvciB0aGUKICAgIDptZXRoOmB+Z2VuZXJhdG9yLnRocm93YCBtZXRob2RzIG9mIGdlbmVyYXRvciBvYmplY3RzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhpcyBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBkZWJ1ZyBhc3NlcnRpb24gdG8gaGVscCBlbnN1cmUgdGhhdCBpdAorICAgICAgZG9lcyBub3Qgc2lsZW50bHkgZGlzY2FyZCBhbiBhY3RpdmUgZXhjZXB0aW9uLgorCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFdmFsX01lcmdlQ29tcGlsZXJGbGFncyhQeUNvbXBpbGVyRmxhZ3MgKmNmKQogCkBAIC0zMzgsNCArMzc5LDMgQEAKIAogICAgVGhpcyBiaXQgY2FuIGJlIHNldCBpbiAqZmxhZ3MqIHRvIGNhdXNlIGRpdmlzaW9uIG9wZXJhdG9yIGBgL2BgIHRvIGJlCiAgICBpbnRlcnByZXRlZCBhcyAidHJ1ZSBkaXZpc2lvbiIgYWNjb3JkaW5nIHRvIDpwZXA6YDIzOGAuCi0KZGlmZiAtLWdpdCBhL0RvYy9jb25mLnB5IGIvRG9jL2NvbmYucHkKaW5kZXggNWI2M2NhZC4uNjllNDVkZSAxMDA2NDQKLS0tIGEvRG9jL2NvbmYucHkKKysrIGIvRG9jL2NvbmYucHkKQEAgLTYxLDYgKzYxLDggQEAKICMgQnkgZGVmYXVsdCwgaGlnaGxpZ2h0IGFzIFB5dGhvbiAzLgogaGlnaGxpZ2h0X2xhbmd1YWdlID0gJ3B5dGhvbjMnCiAKK25lZWRzX3NwaGlueCA9ICcxLjEnCisKIAogIyBPcHRpb25zIGZvciBIVE1MIG91dHB1dAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jL2RhdGEvcmVmY291bnRzLmRhdCBiL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKaW5kZXggYTQyNTg0Yy4uNjAyNTYxNyAxMDA2NDQKLS0tIGEvRG9jL2RhdGEvcmVmY291bnRzLmRhdAorKysgYi9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CkBAIC0yOSw3ICsyOSw3IEBACiAjIHJlZmVyZW5jZSB0byB0aGUgaXRlbSBhcmd1bWVudCEKIAogIyBUaGUgcGFyYW1ldGVyIG5hbWVzIGFyZSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgQVBJIG1hbnVhbCwgbm90IHRoZSBzb3VyY2UKLSMgY29kZS4gCisjIGNvZGUuCiAKIFB5Qm9vbF9Gcm9tTG9uZzpQeU9iamVjdCo6OisxOgogUHlCb29sX0Zyb21Mb25nOmxvbmc6djowOgpAQCAtMjIwLDYgKzIyMCwxMSBAQAogUHlEaWN0X0dldEl0ZW1TdHJpbmc6UHlPYmplY3QqOnA6MDoKIFB5RGljdF9HZXRJdGVtU3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiAKK1B5RGljdF9TZXREZWZhdWx0OlB5T2JqZWN0Kjo6MDoKK1B5RGljdF9TZXREZWZhdWx0OlB5T2JqZWN0KjpwOjA6CitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6a2V5OjA6Y29uZGl0aW9uYWxseSArMSBpZiBpbnNlcnRlZCBpbnRvIHRoZSBkaWN0CitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6ZGVmYXVsdDowOmNvbmRpdGlvbmFsbHkgKzEgaWYgaW5zZXJ0ZWQgaW50byB0aGUgZGljdAorCiBQeURpY3RfSXRlbXM6UHlPYmplY3QqOjorMToKIFB5RGljdF9JdGVtczpQeU9iamVjdCo6cDowOgogCkBAIC01MDMsMTMgKzUwOCwxMyBAQAogUHlJbXBvcnRfQ2xlYW51cDp2b2lkOjo6CiAKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlOlB5T2JqZWN0Kjo6KzE6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpjaGFyKjpuYW1lOjoKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlOmNvbnN0IGNoYXIqOm5hbWU6OgogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU6UHlPYmplY3QqOmNvOjA6CiAKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6UHlPYmplY3QqOjorMToKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6Y2hhcio6bmFtZTo6CitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNvbnN0IGNoYXIqOm5hbWU6OgogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpQeU9iamVjdCo6Y286MDoKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6Y2hhcio6cGF0aG5hbWU6OgorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpjb25zdCBjaGFyKjpwYXRobmFtZTo6CiAKIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyOmxvbmc6OjoKIApAQCAtNTE5LDcgKzUyNCw3IEBACiBQeUltcG9ydF9JbXBvcnQ6UHlPYmplY3QqOm5hbWU6MDoKIAogUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlOmludDo6OgotUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlOmNoYXIqOjo6CitQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGU6Y29uc3QgY2hhcio6OjoKIAogUHlJbXBvcnRfSW1wb3J0TW9kdWxlOlB5T2JqZWN0Kjo6KzE6CiBQeUltcG9ydF9JbXBvcnRNb2R1bGU6Y29uc3QgY2hhcio6bmFtZTo6CkBAIC02NjgsNyArNjczLDcgQEAKIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZzp1bnNpZ25lZCBsb25nIGxvbmc6djo6CiAKIFB5TG9uZ19Gcm9tU3RyaW5nOlB5T2JqZWN0Kjo6KzE6Ci1QeUxvbmdfRnJvbVN0cmluZzpjaGFyKjpzdHI6OgorUHlMb25nX0Zyb21TdHJpbmc6Y29uc3QgY2hhcio6c3RyOjoKIFB5TG9uZ19Gcm9tU3RyaW5nOmNoYXIqKjpwZW5kOjoKIFB5TG9uZ19Gcm9tU3RyaW5nOmludDpiYXNlOjoKIApAQCAtNjk2LDcgKzcwMSw3IEBACiAKIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nOlB5T2JqZWN0Kjo6KzE6CiBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpQeU9iamVjdCo6bzowOgotUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc6Y2hhcio6a2V5OjoKK1B5TWFwcGluZ19HZXRJdGVtU3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiAKIFB5TWFwcGluZ19IYXNLZXk6aW50Ojo6CiBQeU1hcHBpbmdfSGFzS2V5OlB5T2JqZWN0KjpvOjA6CkBAIC03MDQsNyArNzA5LDcgQEAKIAogUHlNYXBwaW5nX0hhc0tleVN0cmluZzppbnQ6OjoKIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc6UHlPYmplY3QqOm86MDoKLVB5TWFwcGluZ19IYXNLZXlTdHJpbmc6Y2hhcio6a2V5OjoKK1B5TWFwcGluZ19IYXNLZXlTdHJpbmc6Y29uc3QgY2hhcio6a2V5OjoKIAogUHlNYXBwaW5nX0l0ZW1zOlB5T2JqZWN0Kjo6KzE6CiBQeU1hcHBpbmdfSXRlbXM6UHlPYmplY3QqOm86MDoKQEAgLTcxNyw3ICs3MjIsNyBAQAogCiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzppbnQ6OjoKIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nOlB5T2JqZWN0KjpvOjA6Ci1QeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpjaGFyKjprZXk6OgorUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6Y29uc3QgY2hhcio6a2V5OjoKIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nOlB5T2JqZWN0Kjp2OisxOgogCiBQeU1hcHBpbmdfVmFsdWVzOlB5T2JqZWN0Kjo6KzE6CkBAIC03MzAsNyArNzM1LDcgQEAKIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGU6RklMRSo6ZmlsZTo6CiAKIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZzpQeU9iamVjdCo6OisxOgotUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nOmNoYXIqOnN0cmluZzo6CitQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6Y29uc3QgY2hhcio6c3RyaW5nOjoKIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZzppbnQ6bGVuOjoKIAogUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmc6UHlPYmplY3QqOjorMToKQEAgLTkwMiw3ICs5MDcsNyBAQAogUHlOdW1iZXJfWG9yOlB5T2JqZWN0KjpvMTowOgogUHlOdW1iZXJfWG9yOlB5T2JqZWN0KjpvMjowOgogCi1QeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yOmludDo6OiAKK1B5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I6aW50Ojo6CiBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yOlB5T2JqZWN0KjpvOjA6CiAKIFB5T2JqZWN0X0NhbGw6UHlPYmplY3QqOjorMToKQEAgLTkxMiw3ICs5MTcsNyBAQAogCiBQeU9iamVjdF9DYWxsRnVuY3Rpb246UHlPYmplY3QqOjorMToKIFB5T2JqZWN0X0NhbGxGdW5jdGlvbjpQeU9iamVjdCo6Y2FsbGFibGVfb2JqZWN0OjA6Ci1QeU9iamVjdF9DYWxsRnVuY3Rpb246Y2hhcio6Zm9ybWF0OjoKK1B5T2JqZWN0X0NhbGxGdW5jdGlvbjpjb25zdCBjaGFyKjpmb3JtYXQ6OgogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOjouLi46OgogCiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzOlB5T2JqZWN0Kjo6KzE6CkBAIC05MjEsOCArOTI2LDggQEAKIAogUHlPYmplY3RfQ2FsbE1ldGhvZDpQeU9iamVjdCo6OisxOgogUHlPYmplY3RfQ2FsbE1ldGhvZDpQeU9iamVjdCo6bzowOgotUHlPYmplY3RfQ2FsbE1ldGhvZDpjaGFyKjptOjoKLVB5T2JqZWN0X0NhbGxNZXRob2Q6Y2hhcio6Zm9ybWF0OjoKK1B5T2JqZWN0X0NhbGxNZXRob2Q6Y29uc3QgY2hhcio6bTo6CitQeU9iamVjdF9DYWxsTWV0aG9kOmNvbnN0IGNoYXIqOmZvcm1hdDo6CiBQeU9iamVjdF9DYWxsTWV0aG9kOjouLi46OgogCiBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJnczpQeU9iamVjdCo6OisxOgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0IGIvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0CmluZGV4IGQxYWI3ZGIuLjgzYzY4YWUgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QKQEAgLTIzOSw3ICsyMzksOCBAQAogY29uZmlndXJhdGlvbiBmaWxlLCA6ZmlsZTpgc2V0dXAuY2ZnYFwgLS0tc2VlIHNlY3Rpb24gOnJlZjpgc2V0dXAtY29uZmlnYC4gIElmCiB5b3UgZGlzdHJpYnV0ZSBvciBwYWNrYWdlIG1hbnkgUHl0aG9uIG1vZHVsZSBkaXN0cmlidXRpb25zLCB5b3UgbWlnaHQgd2FudCB0bwogcHV0IG9wdGlvbnMgdGhhdCBhcHBseSB0byBhbGwgb2YgdGhlbSBpbiB5b3VyIHBlcnNvbmFsIERpc3R1dGlscyBjb25maWd1cmF0aW9uCi1maWxlICg6ZmlsZTpgfi8ucHlkaXN0dXRpbHMuY2ZnYCkuCitmaWxlICg6ZmlsZTpgfi8ucHlkaXN0dXRpbHMuY2ZnYCkuICBJZiB5b3Ugd2FudCB0byB0ZW1wb3JhcmlseSBkaXNhYmxlCit0aGlzIGZpbGUsIHlvdSBjYW4gcGFzcyB0aGUgOm9wdGlvbjpgLS1uby11c2VyLWNmZ2Agb3B0aW9uIHRvIDpmaWxlOmBzZXR1cC5weWAuCiAKIFRoZXJlIGFyZSB0aHJlZSBzdGVwcyB0byBidWlsZGluZyBhIGJpbmFyeSBSUE0gcGFja2FnZSwgYWxsIG9mIHdoaWNoIGFyZQogaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBEaXN0dXRpbHM6CmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0IGIvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdAppbmRleCAxNjY2NDM2Li45ZjdhMzhlIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QKQEAgLTI2LDE2ICsyNiwxNiBAQAogKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09KwogfCBgYHppcGBgICAgfCB6aXAgZmlsZSAoOmZpbGU6YC56aXBgKSB8ICgxKSwoMykgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwotfCBgYGd6dGFyYGAgfCBnemlwJ2VkIHRhciBmaWxlICAgICAgICB8ICgyKSwoNCkgfAorfCBgYGd6dGFyYGAgfCBnemlwJ2VkIHRhciBmaWxlICAgICAgICB8IFwoMikgICAgfAogfCAgICAgICAgICAgfCAoOmZpbGU6YC50YXIuZ3pgKSAgICAgICB8ICAgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwotfCBgYGJ6dGFyYGAgfCBiemlwMidlZCB0YXIgZmlsZSAgICAgICB8IFwoNCkgICAgfAorfCBgYGJ6dGFyYGAgfCBiemlwMidlZCB0YXIgZmlsZSAgICAgICB8ICAgICAgICAgfAogfCAgICAgICAgICAgfCAoOmZpbGU6YC50YXIuYnoyYCkgICAgICB8ICAgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwogfCBgYHp0YXJgYCAgfCBjb21wcmVzc2VkIHRhciBmaWxlICAgICB8IFwoNCkgICAgfAogfCAgICAgICAgICAgfCAoOmZpbGU6YC50YXIuWmApICAgICAgICB8ICAgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwotfCBgYHRhcmBgICAgfCB0YXIgZmlsZSAoOmZpbGU6YC50YXJgKSB8IFwoNCkgICAgfAorfCBgYHRhcmBgICAgfCB0YXIgZmlsZSAoOmZpbGU6YC50YXJgKSB8ICAgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwogCiBOb3RlczoKQEAgLTUxLDggKzUxLDE2IEBACiAgICBvZiB0aGUgc3RhbmRhcmQgUHl0aG9uIGxpYnJhcnkgc2luY2UgUHl0aG9uIDEuNikKIAogKDQpCi0gICByZXF1aXJlcyBleHRlcm5hbCB1dGlsaXRpZXM6IDpwcm9ncmFtOmB0YXJgIGFuZCBwb3NzaWJseSBvbmUgb2YgOnByb2dyYW06YGd6aXBgLAotICAgOnByb2dyYW06YGJ6aXAyYCwgb3IgOnByb2dyYW06YGNvbXByZXNzYAorICAgcmVxdWlyZXMgdGhlIDpwcm9ncmFtOmBjb21wcmVzc2AgcHJvZ3JhbS4gTm90aWNlIHRoYXQgdGhpcyBmb3JtYXQgaXMgbm93CisgICBwZW5kaW5nIGZvciBkZXByZWNhdGlvbiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgdmVyc2lvbnMgb2YgUHl0aG9uLgorCitXaGVuIHVzaW5nIGFueSBgYHRhcmBgIGZvcm1hdCAoYGBnenRhcmBgLCBgYGJ6dGFyYGAsIGBgenRhcmBgIG9yCitgYHRhcmBgKSwgdW5kZXIgVW5peCB5b3UgY2FuIHNwZWNpZnkgdGhlIGBgb3duZXJgYCBhbmQgYGBncm91cGBgIG5hbWVzCit0aGF0IHdpbGwgYmUgc2V0IGZvciBlYWNoIG1lbWJlciBvZiB0aGUgYXJjaGl2ZS4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IGFsbCBmaWxlcyBvZiB0aGUgYXJjaGl2ZSB0byBiZSBvd25lZCBieSByb290OjoKKworICAgIHB5dGhvbiBzZXR1cC5weSBzZGlzdCAtLW93bmVyPXJvb3QgLS1ncm91cD1yb290CiAKIAogLi4gX21hbmlmZXN0OgpkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0IGIvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0CmluZGV4IGJkNjYwODYuLjZjYjY4NmEgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QKQEAgLTI4NSwxNCArMjg1LDE0IEBACiAqIGBgcHl0aG9uWC5ZLWNvbmZpZyAtLWNmbGFnc2BgIHdpbGwgZ2l2ZSB5b3UgdGhlIHJlY29tbWVuZGVkIGZsYWdzIHdoZW4KICAgY29tcGlsaW5nOjoKIAotICAgJCAvb3B0L2Jpbi9weXRob24zLjMtY29uZmlnIC0tY2ZsYWdzCi0gICAtSS9vcHQvaW5jbHVkZS9weXRob24zLjNtIC1JL29wdC9pbmNsdWRlL3B5dGhvbjMuM20gLUROREVCVUcgLWcgLWZ3cmFwdiAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcworICAgJCAvb3B0L2Jpbi9weXRob24zLjQtY29uZmlnIC0tY2ZsYWdzCisgICAtSS9vcHQvaW5jbHVkZS9weXRob24zLjRtIC1JL29wdC9pbmNsdWRlL3B5dGhvbjMuNG0gLUROREVCVUcgLWcgLWZ3cmFwdiAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcwogCiAqIGBgcHl0aG9uWC5ZLWNvbmZpZyAtLWxkZmxhZ3NgYCB3aWxsIGdpdmUgeW91IHRoZSByZWNvbW1lbmRlZCBmbGFncyB3aGVuCiAgIGxpbmtpbmc6OgogCi0gICAkIC9vcHQvYmluL3B5dGhvbjMuMy1jb25maWcgLS1sZGZsYWdzCi0gICAtTC9vcHQvbGliL3B5dGhvbjMuMy9jb25maWctMy4zbSAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uMy4zbSAtWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMKKyAgICQgL29wdC9iaW4vcHl0aG9uMy40LWNvbmZpZyAtLWxkZmxhZ3MKKyAgIC1ML29wdC9saWIvcHl0aG9uMy40L2NvbmZpZy0zLjRtIC1scHRocmVhZCAtbGRsIC1sdXRpbCAtbG0gLWxweXRob24zLjRtIC1YbGlua2VyIC1leHBvcnQtZHluYW1pYwogCiAuLiBub3RlOjoKICAgIFRvIGF2b2lkIGNvbmZ1c2lvbiBiZXR3ZWVuIHNldmVyYWwgUHl0aG9uIGluc3RhbGxhdGlvbnMgKGFuZCBlc3BlY2lhbGx5CmRpZmYgLS1naXQgYS9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdCBiL0RvYy9leHRlbmRpbmcvbmV3dHlwZXMucnN0CmluZGV4IGY0ODRiYTQuLjQ1YjU3MjEgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvbmV3dHlwZXMucnN0CisrKyBiL0RvYy9leHRlbmRpbmcvbmV3dHlwZXMucnN0CkBAIC0xNTcsNyArMTU3LDggQEAKICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgIC8qIHRwX2ZsYWdzICovCiAKIEFsbCB0eXBlcyBzaG91bGQgaW5jbHVkZSB0aGlzIGNvbnN0YW50IGluIHRoZWlyIGZsYWdzLiAgSXQgZW5hYmxlcyBhbGwgb2YgdGhlCi1tZW1iZXJzIGRlZmluZWQgYnkgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBQeXRob24uCittZW1iZXJzIGRlZmluZWQgdW50aWwgYXQgbGVhc3QgUHl0aG9uIDMuMy4gIElmIHlvdSBuZWVkIGZ1cnRoZXIgbWVtYmVycywKK3lvdSB3aWxsIG5lZWQgdG8gT1IgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZ3MuCiAKIFdlIHByb3ZpZGUgYSBkb2Mgc3RyaW5nIGZvciB0aGUgdHlwZSBpbiA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZG9jYC4gOjoKIApAQCAtOTI4LDggKzkyOSw5IEBACiAKIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgaW5zdGFuY2Ugb2YgeW91ciB0eXBlIGlzCiByZWR1Y2VkIHRvIHplcm8gYW5kIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2FudHMgdG8gcmVjbGFpbSBpdC4gIElmIHlvdXIgdHlwZQotaGFzIG1lbW9yeSB0byBmcmVlIG9yIG90aGVyIGNsZWFuLXVwIHRvIHBlcmZvcm0sIHB1dCBpdCBoZXJlLiAgVGhlIG9iamVjdCBpdHNlbGYKLW5lZWRzIHRvIGJlIGZyZWVkIGhlcmUgYXMgd2VsbC4gIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGlzIGZ1bmN0aW9uOjoKK2hhcyBtZW1vcnkgdG8gZnJlZSBvciBvdGhlciBjbGVhbi11cCB0byBwZXJmb3JtLCB5b3UgY2FuIHB1dCBpdCBoZXJlLiAgVGhlCitvYmplY3QgaXRzZWxmIG5lZWRzIHRvIGJlIGZyZWVkIGhlcmUgYXMgd2VsbC4gIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGlzCitmdW5jdGlvbjo6CiAKICAgIHN0YXRpYyB2b2lkCiAgICBuZXdkYXRhdHlwZV9kZWFsbG9jKG5ld2RhdGF0eXBlb2JqZWN0ICogb2JqKQpAQCAtOTgwLDYgKzk4MiwyMiBAQAogICAgICAgIFB5X1RZUEUob2JqKS0+dHBfZnJlZSgoUHlPYmplY3QqKXNlbGYpOwogICAgfQogCisuLiBub3RlOjoKKyAgIFRoZXJlIGFyZSBsaW1pdGF0aW9ucyB0byB3aGF0IHlvdSBjYW4gc2FmZWx5IGRvIGluIGEgZGVhbGxvY2F0b3IgZnVuY3Rpb24uCisgICBGaXJzdCwgaWYgeW91ciB0eXBlIHN1cHBvcnRzIGdhcmJhZ2UgY29sbGVjdGlvbiAodXNpbmcgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3RyYXZlcnNlYAorICAgYW5kL29yIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9jbGVhcmApLCBzb21lIG9mIHRoZSBvYmplY3QncyBtZW1iZXJzIGNhbiBoYXZlIGJlZW4KKyAgIGNsZWFyZWQgb3IgZmluYWxpemVkIGJ5IHRoZSB0aW1lIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9kZWFsbG9jYCBpcyBjYWxsZWQuICBTZWNvbmQsIGluCisgICA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AsIHlvdXIgb2JqZWN0IGlzIGluIGFuIHVuc3RhYmxlIHN0YXRlOiBpdHMgcmVmZXJlbmNlCisgICBjb3VudCBpcyBlcXVhbCB0byB6ZXJvLiAgQW55IGNhbGwgdG8gYSBub24tdHJpdmlhbCBvYmplY3Qgb3IgQVBJIChhcyBpbiB0aGUKKyAgIGV4YW1wbGUgYWJvdmUpIG1pZ2h0IGVuZCB1cCBjYWxsaW5nIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9kZWFsbG9jYCBhZ2FpbiwgY2F1c2luZyBhCisgICBkb3VibGUgZnJlZSBhbmQgYSBjcmFzaC4KKworICAgU3RhcnRpbmcgd2l0aCBQeXRob24gMy40LCBpdCBpcyByZWNvbW1lbmRlZCBub3QgdG8gcHV0IGFueSBjb21wbGV4CisgICBmaW5hbGl6YXRpb24gY29kZSBpbiA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AsIGFuZCBpbnN0ZWFkIHVzZSB0aGUgbmV3CisgICA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZmluYWxpemVgIHR5cGUgbWV0aG9kLgorCisgICAuLiBzZWVhbHNvOjoKKyAgICAgIDpwZXA6YDQ0MmAgZXhwbGFpbnMgdGhlIG5ldyBmaW5hbGl6YXRpb24gc2NoZW1lLgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IHN0cmluZzsgb2JqZWN0IHJlcHJlc2VudGF0aW9uCmRpZmYgLS1naXQgYS9Eb2MvZmFxL2xpYnJhcnkucnN0IGIvRG9jL2ZhcS9saWJyYXJ5LnJzdAppbmRleCA0NzU1MTEwLi4zNGUyZmRmIDEwMDY0NAotLS0gYS9Eb2MvZmFxL2xpYnJhcnkucnN0CisrKyBiL0RvYy9mYXEvbGlicmFyeS5yc3QKQEAgLTIxMSw3ICsyMTEsNyBAQAogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBjID0gc3lzLnN0ZGluLnJlYWQoMSkKICAgICAgICAgICAgICAgIHByaW50KCJHb3QgY2hhcmFjdGVyIiwgcmVwcihjKSkKLSAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgcGFzcwogICAgZmluYWxseToKICAgICAgICB0ZXJtaW9zLnRjc2V0YXR0cihmZCwgdGVybWlvcy5UQ1NBRkxVU0gsIG9sZHRlcm0pCkBAIC0yMjQsNyArMjI0LDExIEBACiAgICA6ZnVuYzpgdGVybWlvcy50Y3NldGF0dHJgIHR1cm5zIG9mZiBzdGRpbidzIGVjaG9pbmcgYW5kIGRpc2FibGVzIGNhbm9uaWNhbAogICAgbW9kZS4gIDpmdW5jOmBmY250bC5mbmN0bGAgaXMgdXNlZCB0byBvYnRhaW4gc3RkaW4ncyBmaWxlIGRlc2NyaXB0b3IgZmxhZ3MKICAgIGFuZCBtb2RpZnkgdGhlbSBmb3Igbm9uLWJsb2NraW5nIG1vZGUuICBTaW5jZSByZWFkaW5nIHN0ZGluIHdoZW4gaXQgaXMgZW1wdHkKLSAgIHJlc3VsdHMgaW4gYW4gOmV4YzpgSU9FcnJvcmAsIHRoaXMgZXJyb3IgaXMgY2F1Z2h0IGFuZCBpZ25vcmVkLgorICAgcmVzdWx0cyBpbiBhbiA6ZXhjOmBPU0Vycm9yYCwgdGhpcyBlcnJvciBpcyBjYXVnaHQgYW5kIGlnbm9yZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICAqc3lzLnN0ZGluLnJlYWQqIHVzZWQgdG8gcmFpc2UgOmV4YzpgSU9FcnJvcmAuIFN0YXJ0aW5nIGZyb20gUHl0aG9uIDMuMworICAgICAgOmV4YzpgSU9FcnJvcmAgaXMgYWxpYXMgZm9yIDpleGM6YE9TRXJyb3JgLgogCiAKIFRocmVhZHMKZGlmZiAtLWdpdCBhL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0IGIvRG9jL2ZhcS9wcm9ncmFtbWluZy5yc3QKaW5kZXggNDJlNTVkNi4uNzljNzI4OSAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9wcm9ncmFtbWluZy5yc3QKKysrIGIvRG9jL2ZhcS9wcm9ncmFtbWluZy5yc3QKQEAgLTE3NTAsMTIgKzE3NTAsMTIgQEAKIEZvciByZWFzb25zIG9mIGVmZmljaWVuY3kgYXMgd2VsbCBhcyBjb25zaXN0ZW5jeSwgUHl0aG9uIG9ubHkgcmVhZHMgdGhlIG1vZHVsZQogZmlsZSBvbiB0aGUgZmlyc3QgdGltZSBhIG1vZHVsZSBpcyBpbXBvcnRlZC4gIElmIGl0IGRpZG4ndCwgaW4gYSBwcm9ncmFtCiBjb25zaXN0aW5nIG9mIG1hbnkgbW9kdWxlcyB3aGVyZSBlYWNoIG9uZSBpbXBvcnRzIHRoZSBzYW1lIGJhc2ljIG1vZHVsZSwgdGhlCi1iYXNpYyBtb2R1bGUgd291bGQgYmUgcGFyc2VkIGFuZCByZS1wYXJzZWQgbWFueSB0aW1lcy4gIFRvIGZvcmNlIHJlcmVhZGluZyBvZiBhCitiYXNpYyBtb2R1bGUgd291bGQgYmUgcGFyc2VkIGFuZCByZS1wYXJzZWQgbWFueSB0aW1lcy4gIFRvIGZvcmNlIHJlLXJlYWRpbmcgb2YgYQogY2hhbmdlZCBtb2R1bGUsIGRvIHRoaXM6OgogCi0gICBpbXBvcnQgaW1wCisgICBpbXBvcnQgaW1wb3J0bGliCiAgICBpbXBvcnQgbW9kbmFtZQotICAgaW1wLnJlbG9hZChtb2RuYW1lKQorICAgaW1wb3J0bGliLnJlbG9hZChtb2RuYW1lKQogCiBXYXJuaW5nOiB0aGlzIHRlY2huaXF1ZSBpcyBub3QgMTAwJSBmb29sLXByb29mLiAgSW4gcGFydGljdWxhciwgbW9kdWxlcwogY29udGFpbmluZyBzdGF0ZW1lbnRzIGxpa2UgOjoKQEAgLTE3NjcsMTAgKzE3NjcsMTAgQEAKIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgY2xhc3MgZGVmaW5pdGlvbi4gIFRoaXMgY2FuIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nCiBwYXJhZG94aWNhbCBiZWhhdmlvdXI6CiAKLSAgID4+PiBpbXBvcnQgaW1wCisgICA+Pj4gaW1wb3J0IGltcG9ydGxpYgogICAgPj4+IGltcG9ydCBjbHMKICAgID4+PiBjID0gY2xzLkMoKSAgICAgICAgICAgICAgICAjIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBDCi0gICA+Pj4gaW1wLnJlbG9hZChjbHMpCisgICA+Pj4gaW1wb3J0bGliLnJlbG9hZChjbHMpCiAgICA8bW9kdWxlICdjbHMnIGZyb20gJ2Nscy5weSc+CiAgICA+Pj4gaXNpbnN0YW5jZShjLCBjbHMuQykgICAgICAgIyBpc2luc3RhbmNlIGlzIGZhbHNlPyE/CiAgICBGYWxzZQpkaWZmIC0tZ2l0IGEvRG9jL2dsb3NzYXJ5LnJzdCBiL0RvYy9nbG9zc2FyeS5yc3QKaW5kZXggYjQ4ZWIxZS4uZjcxYTFmNyAxMDA2NDQKLS0tIGEvRG9jL2dsb3NzYXJ5LnJzdAorKysgYi9Eb2MvZ2xvc3NhcnkucnN0CkBAIC0zMTAsNiArMzEwLDE1IEBACiAgICAgICAgICA+Pj4gc3VtKGkqaSBmb3IgaSBpbiByYW5nZSgxMCkpICAgICAgICAgIyBzdW0gb2Ygc3F1YXJlcyAwLCAxLCA0LCAuLi4gODEKICAgICAgICAgIDI4NQogCisgICBnZW5lcmljIGZ1bmN0aW9uCisgICAgICBBIGZ1bmN0aW9uIGNvbXBvc2VkIG9mIG11bHRpcGxlIGZ1bmN0aW9ucyBpbXBsZW1lbnRpbmcgdGhlIHNhbWUgb3BlcmF0aW9uCisgICAgICBmb3IgZGlmZmVyZW50IHR5cGVzLiBXaGljaCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgdXNlZCBkdXJpbmcgYSBjYWxsIGlzCisgICAgICBkZXRlcm1pbmVkIGJ5IHRoZSBkaXNwYXRjaCBhbGdvcml0aG0uCisKKyAgICAgIFNlZSBhbHNvIHRoZSA6dGVybTpgc2luZ2xlIGRpc3BhdGNoYCBnbG9zc2FyeSBlbnRyeSwgdGhlCisgICAgICA6ZnVuYzpgZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoYCBkZWNvcmF0b3IsIGFuZCA6cGVwOmA0NDNgLgorCisKICAgIEdJTAogICAgICAgU2VlIDp0ZXJtOmBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9ja2AuCiAKQEAgLTUzMCw2ICs1MzksMTAgQEAKIAogICAgICAgU2VlIGFsc28gOnRlcm06YHBhY2thZ2VgLgogCisgICBtb2R1bGUgc3BlYworICAgICAgQSBuYW1lc3BhY2UgY29udGFpbmluZyB0aGUgaW1wb3J0LXJlbGF0ZWQgaW5mb3JtYXRpb24gdXNlZCB0byBsb2FkIGEKKyAgICAgIG1vZHVsZS4KKwogICAgTVJPCiAgICAgICBTZWUgOnRlcm06YG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyYC4KIApAQCAtNjcxLDIwICs2ODQsMjcgQEAKICAgIHBvc2l0aW9uYWwgYXJndW1lbnQKICAgICAgIFNlZSA6dGVybTpgYXJndW1lbnRgLgogCi0gICBwcm92aXNpb25hbCBwYWNrYWdlCi0gICAgICBBIHByb3Zpc2lvbmFsIHBhY2thZ2UgaXMgb25lIHdoaWNoIGhhcyBiZWVuIGRlbGliZXJhdGVseSBleGNsdWRlZCBmcm9tCisgICBwcm92aXNpb25hbCBBUEkKKyAgICAgIEEgcHJvdmlzaW9uYWwgQVBJIGlzIG9uZSB3aGljaCBoYXMgYmVlbiBkZWxpYmVyYXRlbHkgZXhjbHVkZWQgZnJvbQogICAgICAgdGhlIHN0YW5kYXJkIGxpYnJhcnkncyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiAgV2hpbGUgbWFqb3IKLSAgICAgIGNoYW5nZXMgdG8gc3VjaCBwYWNrYWdlcyBhcmUgbm90IGV4cGVjdGVkLCBhcyBsb25nIGFzIHRoZXkgYXJlIG1hcmtlZAorICAgICAgY2hhbmdlcyB0byBzdWNoIGludGVyZmFjZXMgYXJlIG5vdCBleHBlY3RlZCwgYXMgbG9uZyBhcyB0aGV5IGFyZSBtYXJrZWQKICAgICAgIHByb3Zpc2lvbmFsLCBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIGNoYW5nZXMgKHVwIHRvIGFuZCBpbmNsdWRpbmcgcmVtb3ZhbAotICAgICAgb2YgdGhlIHBhY2thZ2UpIG1heSBvY2N1ciBpZiBkZWVtZWQgbmVjZXNzYXJ5IGJ5IGNvcmUgZGV2ZWxvcGVycy4gIFN1Y2gKKyAgICAgIG9mIHRoZSBpbnRlcmZhY2UpIG1heSBvY2N1ciBpZiBkZWVtZWQgbmVjZXNzYXJ5IGJ5IGNvcmUgZGV2ZWxvcGVycy4gIFN1Y2gKICAgICAgIGNoYW5nZXMgd2lsbCBub3QgYmUgbWFkZSBncmF0dWl0b3VzbHkgLS0gdGhleSB3aWxsIG9jY3VyIG9ubHkgaWYgc2VyaW91cwotICAgICAgZmxhd3MgYXJlIHVuY292ZXJlZCB0aGF0IHdlcmUgbWlzc2VkIHByaW9yIHRvIHRoZSBpbmNsdXNpb24gb2YgdGhlCi0gICAgICBwYWNrYWdlLgorICAgICAgZnVuZGFtZW50YWwgZmxhd3MgYXJlIHVuY292ZXJlZCB0aGF0IHdlcmUgbWlzc2VkIHByaW9yIHRvIHRoZSBpbmNsdXNpb24KKyAgICAgIG9mIHRoZSBBUEkuCisKKyAgICAgIEV2ZW4gZm9yIHByb3Zpc2lvbmFsIEFQSXMsIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlcyBhcmUgc2VlbiBhcworICAgICAgYSAic29sdXRpb24gb2YgbGFzdCByZXNvcnQiIC0gZXZlcnkgYXR0ZW1wdCB3aWxsIHN0aWxsIGJlIG1hZGUgdG8gZmluZAorICAgICAgYSBiYWNrd2FyZHMgY29tcGF0aWJsZSByZXNvbHV0aW9uIHRvIGFueSBpZGVudGlmaWVkIHByb2JsZW1zLgogCiAgICAgICBUaGlzIHByb2Nlc3MgYWxsb3dzIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHRvIGNvbnRpbnVlIHRvIGV2b2x2ZSBvdmVyCiAgICAgICB0aW1lLCB3aXRob3V0IGxvY2tpbmcgaW4gcHJvYmxlbWF0aWMgZGVzaWduIGVycm9ycyBmb3IgZXh0ZW5kZWQgcGVyaW9kcwogICAgICAgb2YgdGltZS4gIFNlZSA6cGVwOmA0MTFgIGZvciBtb3JlIGRldGFpbHMuCiAKKyAgIHByb3Zpc2lvbmFsIHBhY2thZ2UKKyAgICAgIFNlZSA6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4KKwogICAgUHl0aG9uIDMwMDAKICAgICAgIE5pY2tuYW1lIGZvciB0aGUgUHl0aG9uIDMueCByZWxlYXNlIGxpbmUgKGNvaW5lZCBsb25nIGFnbyB3aGVuIHRoZQogICAgICAgcmVsZWFzZSBvZiB2ZXJzaW9uIDMgd2FzIHNvbWV0aGluZyBpbiB0aGUgZGlzdGFudCBmdXR1cmUuKSAgVGhpcyBpcyBhbHNvCkBAIC03NzEsNiArNzkxLDEwIEBACiAgICAgICBpbnRlcmZhY2UgY2FuIGJlIHJlZ2lzdGVyZWQgZXhwbGljaXRseSB1c2luZwogICAgICAgOmZ1bmM6YH5hYmMucmVnaXN0ZXJgLgogCisgICBzaW5nbGUgZGlzcGF0Y2gKKyAgICAgIEEgZm9ybSBvZiA6dGVybTpgZ2VuZXJpYyBmdW5jdGlvbmAgZGlzcGF0Y2ggd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGlzCisgICAgICBjaG9zZW4gYmFzZWQgb24gdGhlIHR5cGUgb2YgYSBzaW5nbGUgYXJndW1lbnQuCisKICAgIHNsaWNlCiAgICAgICBBbiBvYmplY3QgdXN1YWxseSBjb250YWluaW5nIGEgcG9ydGlvbiBvZiBhIDp0ZXJtOmBzZXF1ZW5jZWAuICBBIHNsaWNlIGlzCiAgICAgICBjcmVhdGVkIHVzaW5nIHRoZSBzdWJzY3JpcHQgbm90YXRpb24sIGBgW11gYCB3aXRoIGNvbG9ucyBiZXR3ZWVuIG51bWJlcnMKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9jbGluaWMucnN0IGIvRG9jL2hvd3RvL2NsaW5pYy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwZGRiZQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9ob3d0by9jbGluaWMucnN0CkBAIC0wLDAgKzEsMTY4NiBAQAorKioqKioqKioqKioqKioqKioqKioqKgorQXJndW1lbnQgQ2xpbmljIEhvdy1UbworKioqKioqKioqKioqKioqKioqKioqKgorCis6YXV0aG9yOiBMYXJyeSBIYXN0aW5ncworCisKKy4uIHRvcGljOjogQWJzdHJhY3QKKworICBBcmd1bWVudCBDbGluaWMgaXMgYSBwcmVwcm9jZXNzb3IgZm9yIENQeXRob24gQyBmaWxlcy4KKyAgSXRzIHB1cnBvc2UgaXMgdG8gYXV0b21hdGUgYWxsIHRoZSBib2lsZXJwbGF0ZSBpbnZvbHZlZAorICB3aXRoIHdyaXRpbmcgYXJndW1lbnQgcGFyc2luZyBjb2RlIGZvciAiYnVpbHRpbnMiLgorICBUaGlzIGRvY3VtZW50IHNob3dzIHlvdSBob3cgdG8gY29udmVydCB5b3VyIGZpcnN0IEMKKyAgZnVuY3Rpb24gdG8gd29yayB3aXRoIEFyZ3VtZW50IENsaW5pYywgYW5kIHRoZW4gaW50cm9kdWNlcworICBzb21lIGFkdmFuY2VkIHRvcGljcyBvbiBBcmd1bWVudCBDbGluaWMgdXNhZ2UuCisKKyAgQ3VycmVudGx5IEFyZ3VtZW50IENsaW5pYyBpcyBjb25zaWRlcmVkIGludGVybmFsLW9ubHkKKyAgZm9yIENQeXRob24uICBJdHMgdXNlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGZpbGVzIG91dHNpZGUKKyAgQ1B5dGhvbiwgYW5kIG5vIGd1YXJhbnRlZXMgYXJlIG1hZGUgcmVnYXJkaW5nIGJhY2t3YXJkcworICBjb21wYXRpYmlsaXR5IGZvciBmdXR1cmUgdmVyc2lvbnMuICBJbiBvdGhlciB3b3JkczogaWYgeW91CisgIG1haW50YWluIGFuIGV4dGVybmFsIEMgZXh0ZW5zaW9uIGZvciBDUHl0aG9uLCB5b3UncmUgd2VsY29tZQorICB0byBleHBlcmltZW50IHdpdGggQXJndW1lbnQgQ2xpbmljIGluIHlvdXIgb3duIGNvZGUuICBCdXQgdGhlCisgIHZlcnNpb24gb2YgQXJndW1lbnQgQ2xpbmljIHRoYXQgc2hpcHMgd2l0aCBDUHl0aG9uIDMuNSAqY291bGQqCisgIGJlIHRvdGFsbHkgaW5jb21wYXRpYmxlIGFuZCBicmVhayBhbGwgeW91ciBjb2RlLgorCitUaGUgR29hbHMgT2YgQXJndW1lbnQgQ2xpbmljCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FyZ3VtZW50IENsaW5pYydzIHByaW1hcnkgZ29hbAoraXMgdG8gdGFrZSBvdmVyIHJlc3BvbnNpYmlsaXR5IGZvciBhbGwgYXJndW1lbnQgcGFyc2luZyBjb2RlCitpbnNpZGUgQ1B5dGhvbi4gIFRoaXMgbWVhbnMgdGhhdCwgd2hlbiB5b3UgY29udmVydCBhIGZ1bmN0aW9uCit0byB3b3JrIHdpdGggQXJndW1lbnQgQ2xpbmljLCB0aGF0IGZ1bmN0aW9uIHNob3VsZCBubyBsb25nZXIKK2RvIGFueSBvZiBpdHMgb3duIGFyZ3VtZW50IHBhcnNpbmctLXRoZSBjb2RlIGdlbmVyYXRlZCBieQorQXJndW1lbnQgQ2xpbmljIHNob3VsZCBiZSBhICJibGFjayBib3giIHRvIHlvdSwgd2hlcmUgQ1B5dGhvbgorY2FsbHMgaW4gYXQgdGhlIHRvcCwgYW5kIHlvdXIgY29kZSBnZXRzIGNhbGxlZCBhdCB0aGUgYm90dG9tLAord2l0aCBgYFB5T2JqZWN0ICphcmdzYGAgKGFuZCBtYXliZSBgYFB5T2JqZWN0ICprd2FyZ3NgYCkKK21hZ2ljYWxseSBjb252ZXJ0ZWQgaW50byB0aGUgQyB2YXJpYWJsZXMgYW5kIHR5cGVzIHlvdSBuZWVkLgorCitJbiBvcmRlciBmb3IgQXJndW1lbnQgQ2xpbmljIHRvIGFjY29tcGxpc2ggaXRzIHByaW1hcnkgZ29hbCwKK2l0IG11c3QgYmUgZWFzeSB0byB1c2UuICBDdXJyZW50bHksIHdvcmtpbmcgd2l0aCBDUHl0aG9uJ3MKK2FyZ3VtZW50IHBhcnNpbmcgbGlicmFyeSBpcyBhIGNob3JlLCByZXF1aXJpbmcgbWFpbnRhaW5pbmcKK3JlZHVuZGFudCBpbmZvcm1hdGlvbiBpbiBhIHN1cnByaXNpbmcgbnVtYmVyIG9mIHBsYWNlcy4KK1doZW4geW91IHVzZSBBcmd1bWVudCBDbGluaWMsIHlvdSBkb24ndCBoYXZlIHRvIHJlcGVhdCB5b3Vyc2VsZi4KKworT2J2aW91c2x5LCBubyBvbmUgd291bGQgd2FudCB0byB1c2UgQXJndW1lbnQgQ2xpbmljIHVubGVzcworaXQncyBzb2x2aW5nIHRoZWlyIHByb2JsZW0tLWFuZCB3aXRob3V0IGNyZWF0aW5nIG5ldyBwcm9ibGVtcyBvZgoraXRzIG93bi4KK1NvIGl0J3MgcGFyYW1vdW50IHRoYXQgQXJndW1lbnQgQ2xpbmljIGdlbmVyYXRlIGNvcnJlY3QgY29kZS4KK0l0J2QgYmUgbmljZSBpZiB0aGUgY29kZSB3YXMgZmFzdGVyLCB0b28sIGJ1dCBhdCB0aGUgdmVyeSBsZWFzdAoraXQgc2hvdWxkIG5vdCBpbnRyb2R1Y2UgYSBtYWpvciBzcGVlZCByZWdyZXNzaW9uLiAgKEV2ZW50dWFsbHkgQXJndW1lbnQKK0NsaW5pYyAqc2hvdWxkKiBtYWtlIGEgbWFqb3Igc3BlZWR1cCBwb3NzaWJsZS0td2UgY291bGQKK3Jld3JpdGUgaXRzIGNvZGUgZ2VuZXJhdG9yIHRvIHByb2R1Y2UgdGFpbG9yLW1hZGUgYXJndW1lbnQKK3BhcnNpbmcgY29kZSwgcmF0aGVyIHRoYW4gY2FsbGluZyB0aGUgZ2VuZXJhbC1wdXJwb3NlIENQeXRob24KK2FyZ3VtZW50IHBhcnNpbmcgbGlicmFyeS4gIFRoYXQgd291bGQgbWFrZSBmb3IgdGhlIGZhc3Rlc3QKK2FyZ3VtZW50IHBhcnNpbmcgcG9zc2libGUhKQorCitBZGRpdGlvbmFsbHksIEFyZ3VtZW50IENsaW5pYyBtdXN0IGJlIGZsZXhpYmxlIGVub3VnaCB0bword29yayB3aXRoIGFueSBhcHByb2FjaCB0byBhcmd1bWVudCBwYXJzaW5nLiAgUHl0aG9uIGhhcworc29tZSBmdW5jdGlvbnMgd2l0aCBzb21lIHZlcnkgc3RyYW5nZSBwYXJzaW5nIGJlaGF2aW9yczsKK0FyZ3VtZW50IENsaW5pYydzIGdvYWwgaXMgdG8gc3VwcG9ydCBhbGwgb2YgdGhlbS4KKworRmluYWxseSwgdGhlIG9yaWdpbmFsIG1vdGl2YXRpb24gZm9yIEFyZ3VtZW50IENsaW5pYyB3YXMKK3RvIHByb3ZpZGUgaW50cm9zcGVjdGlvbiAic2lnbmF0dXJlcyIgZm9yIENQeXRob24gYnVpbHRpbnMuCitJdCB1c2VkIHRvIGJlLCB0aGUgaW50cm9zcGVjdGlvbiBxdWVyeSBmdW5jdGlvbnMgd291bGQgdGhyb3cKK2FuIGV4Y2VwdGlvbiBpZiB5b3UgcGFzc2VkIGluIGEgYnVpbHRpbi4gIFdpdGggQXJndW1lbnQKK0NsaW5pYywgdGhhdCdzIGEgdGhpbmcgb2YgdGhlIHBhc3QhCisKK09uZSBpZGVhIHlvdSBzaG91bGQga2VlcCBpbiBtaW5kLCBhcyB5b3Ugd29yayB3aXRoCitBcmd1bWVudCBDbGluaWM6IHRoZSBtb3JlIGluZm9ybWF0aW9uIHlvdSBnaXZlIGl0LCB0aGUKK2JldHRlciBqb2IgaXQnbGwgYmUgYWJsZSB0byBkby4KK0FyZ3VtZW50IENsaW5pYyBpcyBhZG1pdHRlZGx5IHJlbGF0aXZlbHkgc2ltcGxlIHJpZ2h0Citub3cuICBCdXQgYXMgaXQgZXZvbHZlcyBpdCB3aWxsIGdldCBtb3JlIHNvcGhpc3RpY2F0ZWQsCithbmQgaXQgc2hvdWxkIGJlIGFibGUgdG8gZG8gbWFueSBpbnRlcmVzdGluZyBhbmQgc21hcnQKK3RoaW5ncyB3aXRoIGFsbCB0aGUgaW5mb3JtYXRpb24geW91IGdpdmUgaXQuCisKKworQmFzaWMgQ29uY2VwdHMgQW5kIFVzYWdlCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworQXJndW1lbnQgQ2xpbmljIHNoaXBzIHdpdGggQ1B5dGhvbjsgeW91J2xsIGZpbmQgaXQgaW4gYGBUb29scy9jbGluaWMvY2xpbmljLnB5YGAuCitJZiB5b3UgcnVuIHRoYXQgc2NyaXB0LCBzcGVjaWZ5aW5nIGEgQyBmaWxlIGFzIGFuIGFyZ3VtZW50OjoKKworICAgICUgcHl0aG9uMyBUb29scy9jbGluaWMvY2xpbmljLnB5IGZvby5jCisKK0FyZ3VtZW50IENsaW5pYyB3aWxsIHNjYW4gb3ZlciB0aGUgZmlsZSBsb29raW5nIGZvciBsaW5lcyB0aGF0Citsb29rIGV4YWN0bHkgbGlrZSB0aGlzOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKworV2hlbiBpdCBmaW5kcyBvbmUsIGl0IHJlYWRzIGV2ZXJ5dGhpbmcgdXAgdG8gYSBsaW5lIHRoYXQgbG9va3MKK2V4YWN0bHkgbGlrZSB0aGlzOjoKKworICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworRXZlcnl0aGluZyBpbiBiZXR3ZWVuIHRoZXNlIHR3byBsaW5lcyBpcyBpbnB1dCBmb3IgQXJndW1lbnQgQ2xpbmljLgorQWxsIG9mIHRoZXNlIGxpbmVzLCBpbmNsdWRpbmcgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGNvbW1lbnQKK2xpbmVzLCBhcmUgY29sbGVjdGl2ZWx5IGNhbGxlZCBhbiBBcmd1bWVudCBDbGluaWMgImJsb2NrIi4KKworV2hlbiBBcmd1bWVudCBDbGluaWMgcGFyc2VzIG9uZSBvZiB0aGVzZSBibG9ja3MsIGl0CitnZW5lcmF0ZXMgb3V0cHV0LiAgVGhpcyBvdXRwdXQgaXMgcmV3cml0dGVuIGludG8gdGhlIEMgZmlsZQoraW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGJsb2NrLCBmb2xsb3dlZCBieSBhIGNvbW1lbnQgY29udGFpbmluZyBhIGNoZWNrc3VtLgorVGhlIEFyZ3VtZW50IENsaW5pYyBibG9jayBub3cgbG9va3MgbGlrZSB0aGlzOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAuLi4gY2xpbmljIGlucHV0IGdvZXMgaGVyZSAuLi4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisgICAgLi4uIGNsaW5pYyBvdXRwdXQgZ29lcyBoZXJlIC4uLgorICAgIC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPS4uLl0qLworCitJZiB5b3UgcnVuIEFyZ3VtZW50IENsaW5pYyBvbiB0aGUgc2FtZSBmaWxlIGEgc2Vjb25kIHRpbWUsIEFyZ3VtZW50IENsaW5pYword2lsbCBkaXNjYXJkIHRoZSBvbGQgb3V0cHV0IGFuZCB3cml0ZSBvdXQgdGhlIG5ldyBvdXRwdXQgd2l0aCBhIGZyZXNoIGNoZWNrc3VtCitsaW5lLiAgSG93ZXZlciwgaWYgdGhlIGlucHV0IGhhc24ndCBjaGFuZ2VkLCB0aGUgb3V0cHV0IHdvbid0IGNoYW5nZSBlaXRoZXIuCisKK1lvdSBzaG91bGQgbmV2ZXIgbW9kaWZ5IHRoZSBvdXRwdXQgcG9ydGlvbiBvZiBhbiBBcmd1bWVudCBDbGluaWMgYmxvY2suICBJbnN0ZWFkLAorY2hhbmdlIHRoZSBpbnB1dCB1bnRpbCBpdCBwcm9kdWNlcyB0aGUgb3V0cHV0IHlvdSB3YW50LiAgKFRoYXQncyB0aGUgcHVycG9zZSBvZiB0aGUKK2NoZWNrc3VtLS10byBkZXRlY3QgaWYgc29tZW9uZSBjaGFuZ2VkIHRoZSBvdXRwdXQsIGFzIHRoZXNlIGVkaXRzIHdvdWxkIGJlIGxvc3QKK3RoZSBuZXh0IHRpbWUgQXJndW1lbnQgQ2xpbmljIHdyaXRlcyBvdXQgZnJlc2ggb3V0cHV0LikKKworRm9yIHRoZSBzYWtlIG9mIGNsYXJpdHksIGhlcmUncyB0aGUgdGVybWlub2xvZ3kgd2UnbGwgdXNlIHdpdGggQXJndW1lbnQgQ2xpbmljOgorCisqIFRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjb21tZW50IChgYC8qW2NsaW5pYyBpbnB1dF1gYCkgaXMgdGhlICpzdGFydCBsaW5lKi4KKyogVGhlIGxhc3QgbGluZSBvZiB0aGUgaW5pdGlhbCBjb21tZW50IChgYFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi9gYCkgaXMgdGhlICplbmQgbGluZSouCisqIFRoZSBsYXN0IGxpbmUgKGBgLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogY2hlY2tzdW09Li4uXSovYGApIGlzIHRoZSAqY2hlY2tzdW0gbGluZSouCisqIEluIGJldHdlZW4gdGhlIHN0YXJ0IGxpbmUgYW5kIHRoZSBlbmQgbGluZSBpcyB0aGUgKmlucHV0Ki4KKyogSW4gYmV0d2VlbiB0aGUgZW5kIGxpbmUgYW5kIHRoZSBjaGVja3N1bSBsaW5lIGlzIHRoZSAqb3V0cHV0Ki4KKyogQWxsIHRoZSB0ZXh0IGNvbGxlY3RpdmVseSwgZnJvbSB0aGUgc3RhcnQgbGluZSB0byB0aGUgY2hlY2tzdW0gbGluZSBpbmNsdXNpdmVseSwKKyAgaXMgdGhlICpibG9jayouICAoQSBibG9jayB0aGF0IGhhc24ndCBiZWVuIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgYnkgQXJndW1lbnQKKyAgQ2xpbmljIHlldCBkb2Vzbid0IGhhdmUgb3V0cHV0IG9yIGEgY2hlY2tzdW0gbGluZSwgYnV0IGl0J3Mgc3RpbGwgY29uc2lkZXJlZAorICBhIGJsb2NrLikKKworCitDb252ZXJ0aW5nIFlvdXIgRmlyc3QgRnVuY3Rpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgYmVzdCB3YXkgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IEFyZ3VtZW50IENsaW5pYyB3b3JrcyBpcyB0bworY29udmVydCBhIGZ1bmN0aW9uIHRvIHdvcmsgd2l0aCBpdC4gIEhlcmUsIHRoZW4sIGFyZSB0aGUgYmFyZQorbWluaW11bSBzdGVwcyB5b3UnZCBuZWVkIHRvIGZvbGxvdyB0byBjb252ZXJ0IGEgZnVuY3Rpb24gdG8KK3dvcmsgd2l0aCBBcmd1bWVudCBDbGluaWMuICBOb3RlIHRoYXQgZm9yIGNvZGUgeW91IHBsYW4gdG8KK2NoZWNrIGluIHRvIENQeXRob24sIHlvdSByZWFsbHkgc2hvdWxkIHRha2UgdGhlIGNvbnZlcnNpb24gZmFydGhlciwKK3VzaW5nIHNvbWUgb2YgdGhlIGFkdmFuY2VkIGNvbmNlcHRzIHlvdSdsbCBzZWUgbGF0ZXIgb24gaW4KK3RoZSBkb2N1bWVudCAobGlrZSAicmV0dXJuIGNvbnZlcnRlcnMiIGFuZCAic2VsZiBjb252ZXJ0ZXJzIikuCitCdXQgd2UnbGwga2VlcCBpdCBzaW1wbGUgZm9yIHRoaXMgd2Fsa3Rocm91Z2ggc28geW91IGNhbiBsZWFybi4KKworTGV0J3MgZGl2ZSBpbiEKKworMC4gTWFrZSBzdXJlIHlvdSdyZSB3b3JraW5nIHdpdGggYSBmcmVzaGx5IHVwZGF0ZWQgY2hlY2tvdXQKKyAgIG9mIHRoZSBDUHl0aG9uIHRydW5rLgorCisxLiBGaW5kIGEgUHl0aG9uIGJ1aWx0aW4gdGhhdCBjYWxscyBlaXRoZXIgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAKKyAgIG9yIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2AsIGFuZCBoYXNuJ3QgYmVlbiBjb252ZXJ0ZWQKKyAgIHRvIHdvcmsgd2l0aCBBcmd1bWVudCBDbGluaWMgeWV0LgorICAgRm9yIG15IGV4YW1wbGUgSSdtIHVzaW5nIGBgX3BpY2tsZS5QaWNrbGVyLmR1bXAoKWBgLgorCisyLiBJZiB0aGUgY2FsbCB0byB0aGUgYGBQeUFyZ19QYXJzZWBgIGZ1bmN0aW9uIHVzZXMgYW55IG9mIHRoZQorICAgZm9sbG93aW5nIGZvcm1hdCB1bml0czo6CisKKyAgICAgICBPJgorICAgICAgIE8hCisgICAgICAgZXMKKyAgICAgICBlcyMKKyAgICAgICBldAorICAgICAgIGV0IworCisgICBvciBpZiBpdCBoYXMgbXVsdGlwbGUgY2FsbHMgdG8gOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAsCisgICB5b3Ugc2hvdWxkIGNob29zZSBhIGRpZmZlcmVudCBmdW5jdGlvbi4gIEFyZ3VtZW50IENsaW5pYyAqZG9lcyoKKyAgIHN1cHBvcnQgYWxsIG9mIHRoZXNlIHNjZW5hcmlvcy4gIEJ1dCB0aGVzZSBhcmUgYWR2YW5jZWQKKyAgIHRvcGljcy0tbGV0J3MgZG8gc29tZXRoaW5nIHNpbXBsZXIgZm9yIHlvdXIgZmlyc3QgZnVuY3Rpb24uCisKKyAgIEFsc28sIGlmIHRoZSBmdW5jdGlvbiBoYXMgbXVsdGlwbGUgY2FsbHMgdG8gOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAKKyAgIG9yIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2Agd2hlcmUgaXQgc3VwcG9ydHMgZGlmZmVyZW50CisgICB0eXBlcyBmb3IgdGhlIHNhbWUgYXJndW1lbnQsIG9yIGlmIHRoZSBmdW5jdGlvbiB1c2VzIHNvbWV0aGluZyBiZXNpZGVzCisgICBQeUFyZ19QYXJzZSBmdW5jdGlvbnMgdG8gcGFyc2UgaXRzIGFyZ3VtZW50cywgaXQgcHJvYmFibHkKKyAgIGlzbid0IHN1aXRhYmxlIGZvciBjb252ZXJzaW9uIHRvIEFyZ3VtZW50IENsaW5pYy4gIEFyZ3VtZW50IENsaW5pYworICAgZG9lc24ndCBzdXBwb3J0IGdlbmVyaWMgZnVuY3Rpb25zIG9yIHBvbHltb3JwaGljIHBhcmFtZXRlcnMuCisKKzMuIEFkZCB0aGUgZm9sbG93aW5nIGJvaWxlcnBsYXRlIGFib3ZlIHRoZSBmdW5jdGlvbiwgY3JlYXRpbmcgb3VyIGJsb2NrOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKzQuIEN1dCB0aGUgZG9jc3RyaW5nIGFuZCBwYXN0ZSBpdCBpbiBiZXR3ZWVuIHRoZSBgYFtjbGluaWNdYGAgbGluZXMsCisgICByZW1vdmluZyBhbGwgdGhlIGp1bmsgdGhhdCBtYWtlcyBpdCBhIHByb3Blcmx5IHF1b3RlZCBDIHN0cmluZy4KKyAgIFdoZW4geW91J3JlIGRvbmUgeW91IHNob3VsZCBoYXZlIGp1c3QgdGhlIHRleHQsIGJhc2VkIGF0IHRoZSBsZWZ0CisgICBtYXJnaW4sIHdpdGggbm8gbGluZSB3aWRlciB0aGFuIDgwIGNoYXJhY3RlcnMuCisgICAoQXJndW1lbnQgQ2xpbmljIHdpbGwgcHJlc2VydmUgaW5kZW50cyBpbnNpZGUgdGhlIGRvY3N0cmluZy4pCisKKyAgIElmIHRoZSBvbGQgZG9jc3RyaW5nIGhhZCBhIGZpcnN0IGxpbmUgdGhhdCBsb29rZWQgbGlrZSBhIGZ1bmN0aW9uCisgICBzaWduYXR1cmUsIHRocm93IHRoYXQgbGluZSBhd2F5LiAgKFRoZSBkb2NzdHJpbmcgZG9lc24ndCBuZWVkIGl0CisgICBhbnltb3JlLS13aGVuIHlvdSB1c2UgYGBoZWxwKClgYCBvbiB5b3VyIGJ1aWx0aW4gaW4gdGhlIGZ1dHVyZSwKKyAgIHRoZSBmaXJzdCBsaW5lIHdpbGwgYmUgYnVpbHQgYXV0b21hdGljYWxseSBiYXNlZCBvbiB0aGUgZnVuY3Rpb24ncworICAgc2lnbmF0dXJlLikKKworICAgU2FtcGxlOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCis1LiBJZiB5b3VyIGRvY3N0cmluZyBkb2Vzbid0IGhhdmUgYSAic3VtbWFyeSIgbGluZSwgQXJndW1lbnQgQ2xpbmljIHdpbGwKKyAgIGNvbXBsYWluLiAgU28gbGV0J3MgbWFrZSBzdXJlIGl0IGhhcyBvbmUuICBUaGUgInN1bW1hcnkiIGxpbmUgc2hvdWxkCisgICBiZSBhIHBhcmFncmFwaCBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIDgwLWNvbHVtbiBsaW5lCisgICBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2NzdHJpbmcuCisKKyAgIChPdXIgZXhhbXBsZSBkb2NzdHJpbmcgY29uc2lzdHMgc29sZWx5IG9mIGEgc3VtbWFyeSBsaW5lLCBzbyB0aGUgc2FtcGxlCisgICBjb2RlIGRvZXNuJ3QgaGF2ZSB0byBjaGFuZ2UgZm9yIHRoaXMgc3RlcC4pCisKKzYuIEFib3ZlIHRoZSBkb2NzdHJpbmcsIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiwgZm9sbG93ZWQKKyAgIGJ5IGEgYmxhbmsgbGluZS4gIFRoaXMgc2hvdWxkIGJlIHRoZSBQeXRob24gbmFtZSBvZiB0aGUgZnVuY3Rpb24sCisgICBhbmQgc2hvdWxkIGJlIHRoZSBmdWxsIGRvdHRlZCBwYXRoCisgICB0byB0aGUgZnVuY3Rpb24tLWl0IHNob3VsZCBzdGFydCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUsCisgICBpbmNsdWRlIGFueSBzdWItbW9kdWxlcywgYW5kIGlmIHRoZSBmdW5jdGlvbiBpcyBhIG1ldGhvZCBvbgorICAgYSBjbGFzcyBpdCBzaG91bGQgaW5jbHVkZSB0aGUgY2xhc3MgbmFtZSB0b28uCisKKyAgIFNhbXBsZTo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKzcuIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhhdCBtb2R1bGUgb3IgY2xhc3MgaGFzIGJlZW4gdXNlZCB3aXRoIEFyZ3VtZW50CisgICBDbGluaWMgaW4gdGhpcyBDIGZpbGUsCisgICB5b3UgbXVzdCBkZWNsYXJlIHRoZSBtb2R1bGUgYW5kL29yIGNsYXNzLiAgUHJvcGVyIEFyZ3VtZW50IENsaW5pYyBoeWdpZW5lCisgICBwcmVmZXJzIGRlY2xhcmluZyB0aGVzZSBpbiBhIHNlcGFyYXRlIGJsb2NrIHNvbWV3aGVyZSBuZWFyIHRoZQorICAgdG9wIG9mIHRoZSBDIGZpbGUsIGluIHRoZSBzYW1lIHdheSB0aGF0IGluY2x1ZGUgZmlsZXMgYW5kIHN0YXRpY3MgZ28gYXQKKyAgIHRoZSB0b3AuICAoSW4gb3VyIHNhbXBsZSBjb2RlIHdlJ2xsIGp1c3Qgc2hvdyB0aGUgdHdvIGJsb2NrcyBuZXh0IHRvCisgICBlYWNoIG90aGVyLikKKworICAgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIGFuZCBtb2R1bGUgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKKyAgIHNlZW4gYnkgUHl0aG9uLiAgQ2hlY2sgdGhlIG5hbWUgZGVmaW5lZCBpbiB0aGUgOmM6dHlwZTpgUHlNb2R1bGVEZWZgCisgICBvciA6Yzp0eXBlOmBQeVR5cGVPYmplY3RgIGFzIGFwcHJvcHJpYXRlLgorCisgICBXaGVuIHlvdSBkZWNsYXJlIGEgY2xhc3MsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0d28gYXNwZWN0cyBvZiBpdHMgdHlwZQorICAgaW4gQzogdGhlIHR5cGUgZGVjbGFyYXRpb24geW91J2QgdXNlIGZvciBhIHBvaW50ZXIgdG8gYW4gaW5zdGFuY2Ugb2YKKyAgIHRoaXMgY2xhc3MsIGFuZCBhIHBvaW50ZXIgdG8gdGhlIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgZm9yIHRoaXMgY2xhc3MuCisKKyAgIFNhbXBsZTo6CisKKyAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgbW9kdWxlIF9waWNrbGUKKyAgICAgICBjbGFzcyBfcGlja2xlLlBpY2tsZXIgIlBpY2tsZXJPYmplY3QgKiIgIiZQaWNrbGVyX1R5cGUiCisgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgIF9waWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisKKworCis4LiBEZWNsYXJlIGVhY2ggb2YgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIGZ1bmN0aW9uLiAgRWFjaCBwYXJhbWV0ZXIKKyAgIHNob3VsZCBnZXQgaXRzIG93biBsaW5lLiAgQWxsIHRoZSBwYXJhbWV0ZXIgbGluZXMgc2hvdWxkIGJlCisgICBpbmRlbnRlZCBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCB0aGUgZG9jc3RyaW5nLgorCisgICBUaGUgZ2VuZXJhbCBmb3JtIG9mIHRoZXNlIHBhcmFtZXRlciBsaW5lcyBpcyBhcyBmb2xsb3dzOjoKKworICAgICAgIG5hbWVfb2ZfcGFyYW1ldGVyOiBjb252ZXJ0ZXIKKworICAgSWYgdGhlIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhZGQgdGhhdCBhZnRlciB0aGUKKyAgIGNvbnZlcnRlcjo6CisKKyAgICAgICBuYW1lX29mX3BhcmFtZXRlcjogY29udmVydGVyID0gZGVmYXVsdF92YWx1ZQorCisgICBBcmd1bWVudCBDbGluaWMncyBzdXBwb3J0IGZvciAiZGVmYXVsdCB2YWx1ZXMiIGlzIHF1aXRlIHNvcGhpc3RpY2F0ZWQ7CisgICBwbGVhc2Ugc2VlIDpyZWY6YHRoZSBzZWN0aW9uIGJlbG93IG9uIGRlZmF1bHQgdmFsdWVzIDxkZWZhdWx0X3ZhbHVlcz5gCisgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgQWRkIGEgYmxhbmsgbGluZSBiZWxvdyB0aGUgcGFyYW1ldGVycy4KKworICAgV2hhdCdzIGEgImNvbnZlcnRlciI/ICBJdCBlc3RhYmxpc2hlcyBib3RoIHRoZSB0eXBlCisgICBvZiB0aGUgdmFyaWFibGUgdXNlZCBpbiBDLCBhbmQgdGhlIG1ldGhvZCB0byBjb252ZXJ0IHRoZSBQeXRob24KKyAgIHZhbHVlIGludG8gYSBDIHZhbHVlIGF0IHJ1bnRpbWUuCisgICBGb3Igbm93IHlvdSdyZSBnb2luZyB0byB1c2Ugd2hhdCdzIGNhbGxlZCBhICJsZWdhY3kgY29udmVydGVyIi0tYQorICAgY29udmVuaWVuY2Ugc3ludGF4IGludGVuZGVkIHRvIG1ha2UgcG9ydGluZyBvbGQgY29kZSBpbnRvIEFyZ3VtZW50CisgICBDbGluaWMgZWFzaWVyLgorCisgICBGb3IgZWFjaCBwYXJhbWV0ZXIsIGNvcHkgdGhlICJmb3JtYXQgdW5pdCIgZm9yIHRoYXQKKyAgIHBhcmFtZXRlciBmcm9tIHRoZSBgYFB5QXJnX1BhcnNlKClgYCBmb3JtYXQgYXJndW1lbnQgYW5kCisgICBzcGVjaWZ5ICp0aGF0KiBhcyBpdHMgY29udmVydGVyLCBhcyBhIHF1b3RlZAorICAgc3RyaW5nLiAgKCJmb3JtYXQgdW5pdCIgaXMgdGhlIGZvcm1hbCBuYW1lIGZvciB0aGUgb25lLXRvLXRocmVlCisgICBjaGFyYWN0ZXIgc3Vic3RyaW5nIG9mIHRoZSBgYGZvcm1hdGBgIHBhcmFtZXRlciB0aGF0IHRlbGxzCisgICB0aGUgYXJndW1lbnQgcGFyc2luZyBmdW5jdGlvbiB3aGF0IHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZQorICAgaXMgYW5kIGhvdyB0byBjb252ZXJ0IGl0LiAgRm9yIG1vcmUgb24gZm9ybWF0IHVuaXRzIHBsZWFzZQorICAgc2VlIDpyZWY6YGFyZy1wYXJzaW5nYC4pCisKKyAgIEZvciBtdWx0aWNoYXJhY3RlciBmb3JtYXQgdW5pdHMgbGlrZSBgYHojYGAsIHVzZSB0aGUKKyAgIGVudGlyZSB0d28tb3ItdGhyZWUgY2hhcmFjdGVyIHN0cmluZy4KKworICAgU2FtcGxlOjoKKworICAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgIG1vZHVsZSBfcGlja2xlCisgICAgICAgIGNsYXNzIF9waWNrbGUuUGlja2xlciAiUGlja2xlck9iamVjdCAqIiAiJlBpY2tsZXJfVHlwZSIKKyAgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgICAgICBvYmo6ICdPJworCisgICAgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworOS4gSWYgeW91ciBmdW5jdGlvbiBoYXMgYGB8YGAgaW4gdGhlIGZvcm1hdCBzdHJpbmcsIG1lYW5pbmcgc29tZQorICAgcGFyYW1ldGVycyBoYXZlIGRlZmF1bHQgdmFsdWVzLCB5b3UgY2FuIGlnbm9yZSBpdC4gIEFyZ3VtZW50CisgICBDbGluaWMgaW5mZXJzIHdoaWNoIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGJhc2VkIG9uIHdoZXRoZXIKKyAgIG9yIG5vdCB0aGV5IGhhdmUgZGVmYXVsdCB2YWx1ZXMuCisKKyAgIElmIHlvdXIgZnVuY3Rpb24gaGFzIGBgJGBgIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBtZWFuaW5nIGl0CisgICB0YWtlcyBrZXl3b3JkLW9ubHkgYXJndW1lbnRzLCBzcGVjaWZ5IGBgKmBgIG9uIGEgbGluZSBieQorICAgaXRzZWxmIGJlZm9yZSB0aGUgZmlyc3Qga2V5d29yZC1vbmx5IGFyZ3VtZW50LCBpbmRlbnRlZCB0aGUKKyAgIHNhbWUgYXMgdGhlIHBhcmFtZXRlciBsaW5lcy4KKworICAgKGBgX3BpY2tsZS5QaWNrbGVyLmR1bXBgYCBoYXMgbmVpdGhlciwgc28gb3VyIHNhbXBsZSBpcyB1bmNoYW5nZWQuKQorCisKKzEwLiBJZiB0aGUgZXhpc3RpbmcgQyBmdW5jdGlvbiBjYWxscyA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYAorICAgIChhcyBvcHBvc2VkIHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2ApLCB0aGVuIGFsbCBpdHMKKyAgICBhcmd1bWVudHMgYXJlIHBvc2l0aW9uYWwtb25seS4KKworICAgIFRvIG1hcmsgYWxsIHBhcmFtZXRlcnMgYXMgcG9zaXRpb25hbC1vbmx5IGluIEFyZ3VtZW50IENsaW5pYywKKyAgICBhZGQgYSBgYC9gYCBvbiBhIGxpbmUgYnkgaXRzZWxmIGFmdGVyIHRoZSBsYXN0IHBhcmFtZXRlciwKKyAgICBpbmRlbnRlZCB0aGUgc2FtZSBhcyB0aGUgcGFyYW1ldGVyIGxpbmVzLgorCisgICAgQ3VycmVudGx5IHRoaXMgaXMgYWxsLW9yLW5vdGhpbmc7IGVpdGhlciBhbGwgcGFyYW1ldGVycyBhcmUKKyAgICBwb3NpdGlvbmFsLW9ubHksIG9yIG5vbmUgb2YgdGhlbSBhcmUuICAoSW4gdGhlIGZ1dHVyZSBBcmd1bWVudAorICAgIENsaW5pYyBtYXkgcmVsYXggdGhpcyByZXN0cmljdGlvbi4pCisKKyAgICBTYW1wbGU6OgorCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgbW9kdWxlIF9waWNrbGUKKyAgICAgICAgY2xhc3MgX3BpY2tsZS5QaWNrbGVyICJQaWNrbGVyT2JqZWN0ICoiICImUGlja2xlcl9UeXBlIgorICAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyAgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICAgICAgICBvYmo6ICdPJworICAgICAgICAgICAgLworCisgICAgICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisxMS4gSXQncyBoZWxwZnVsIHRvIHdyaXRlIGEgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmcgZm9yIGVhY2ggcGFyYW1ldGVyLgorICAgIEJ1dCBwZXItcGFyYW1ldGVyIGRvY3N0cmluZ3MgYXJlIG9wdGlvbmFsOyB5b3UgY2FuIHNraXAgdGhpcyBzdGVwCisgICAgaWYgeW91IHByZWZlci4KKworICAgIEhlcmUncyBob3cgdG8gYWRkIGEgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmcuICBUaGUgZmlyc3QgbGluZQorICAgIG9mIHRoZSBwZXItcGFyYW1ldGVyIGRvY3N0cmluZyBtdXN0IGJlIGluZGVudGVkIGZ1cnRoZXIgdGhhbiB0aGUKKyAgICBwYXJhbWV0ZXIgZGVmaW5pdGlvbi4gIFRoZSBsZWZ0IG1hcmdpbiBvZiB0aGlzIGZpcnN0IGxpbmUgZXN0YWJsaXNoZXMKKyAgICB0aGUgbGVmdCBtYXJnaW4gZm9yIHRoZSB3aG9sZSBwZXItcGFyYW1ldGVyIGRvY3N0cmluZzsgYWxsIHRoZSB0ZXh0CisgICAgeW91IHdyaXRlIHdpbGwgYmUgb3V0ZGVudGVkIGJ5IHRoaXMgYW1vdW50LiAgWW91IGNhbiB3cml0ZSBhcyBtdWNoCisgICAgdGV4dCBhcyB5b3UgbGlrZSwgYWNyb3NzIG11bHRpcGxlIGxpbmVzIGlmIHlvdSB3aXNoLgorCisgICAgU2FtcGxlOjoKKworICAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgIG1vZHVsZSBfcGlja2xlCisgICAgICAgIGNsYXNzIF9waWNrbGUuUGlja2xlciAiUGlja2xlck9iamVjdCAqIiAiJlBpY2tsZXJfVHlwZSIKKyAgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgICAgICAgb2JqOiAnTycKKyAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRvIGJlIHBpY2tsZWQuCisgICAgICAgICAgICAvCisKKyAgICAgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKzEyLiBTYXZlIGFuZCBjbG9zZSB0aGUgZmlsZSwgdGhlbiBydW4gYGBUb29scy9jbGluaWMvY2xpbmljLnB5YGAgb24gaXQuCisgICAgV2l0aCBsdWNrIGV2ZXJ5dGhpbmcgd29ya2VkIGFuZCB5b3VyIGJsb2NrIG5vdyBoYXMgb3V0cHV0ISAgUmVvcGVuCisgICAgdGhlIGZpbGUgaW4geW91ciB0ZXh0IGVkaXRvciB0byBzZWU6OgorCisgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgIG1vZHVsZSBfcGlja2xlCisgICAgICAgY2xhc3MgX3BpY2tsZS5QaWNrbGVyICJQaWNrbGVyT2JqZWN0ICoiICImUGlja2xlcl9UeXBlIgorICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKyAgICAgICAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBjaGVja3N1bT1kYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKKyAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgICAgICBvYmo6ICdPJworICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0byBiZSBwaWNrbGVkLgorICAgICAgICAgICAvCisKKyAgICAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisgICAgICAgUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlcl9kdW1wX19kb2NfXywKKyAgICAgICAiV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLlxuIgorICAgICAgICJcbiIKKyAgICAgICAuLi4KKyAgICAgICBzdGF0aWMgUHlPYmplY3QgKgorICAgICAgIF9waWNrbGVfUGlja2xlcl9kdW1wX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKKyAgICAgICAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBjaGVja3N1bT0zYmQzMDc0NWJmMjA2YTQ4ZjhiNTc2YTFkYTNkOTBmNTVhMGE0MTg3XSovCisKKyAgICBPYnZpb3VzbHksIGlmIEFyZ3VtZW50IENsaW5pYyBkaWRuJ3QgcHJvZHVjZSBhbnkgb3V0cHV0LCBpdCdzIGJlY2F1c2UKKyAgICBpdCBmb3VuZCBhbiBlcnJvciBpbiB5b3VyIGlucHV0LiAgS2VlcCBmaXhpbmcgeW91ciBlcnJvcnMgYW5kIHJldHJ5aW5nCisgICAgdW50aWwgQXJndW1lbnQgQ2xpbmljIHByb2Nlc3NlcyB5b3VyIGZpbGUgd2l0aG91dCBjb21wbGFpbnQuCisKKzEzLiBEb3VibGUtY2hlY2sgdGhhdCB0aGUgYXJndW1lbnQtcGFyc2luZyBjb2RlIEFyZ3VtZW50IENsaW5pYyBnZW5lcmF0ZWQKKyAgICBsb29rcyBiYXNpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIGV4aXN0aW5nIGNvZGUuCisKKyAgICBGaXJzdCwgZW5zdXJlIGJvdGggcGxhY2VzIHVzZSB0aGUgc2FtZSBhcmd1bWVudC1wYXJzaW5nIGZ1bmN0aW9uLgorICAgIFRoZSBleGlzdGluZyBjb2RlIG11c3QgY2FsbCBlaXRoZXIKKyAgICA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBvciA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgOworICAgIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGdlbmVyYXRlZCBieSBBcmd1bWVudCBDbGluaWMgY2FsbHMgdGhlCisgICAgKmV4YWN0KiBzYW1lIGZ1bmN0aW9uLgorCisgICAgU2Vjb25kLCB0aGUgZm9ybWF0IHN0cmluZyBwYXNzZWQgaW4gdG8gOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgb3IKKyAgICA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgIHNob3VsZCBiZSAqZXhhY3RseSogdGhlIHNhbWUKKyAgICBhcyB0aGUgaGFuZC13cml0dGVuIG9uZSBpbiB0aGUgZXhpc3RpbmcgZnVuY3Rpb24sIHVwIHRvIHRoZSBjb2xvbgorICAgIG9yIHNlbWktY29sb24uCisKKyAgICAoQXJndW1lbnQgQ2xpbmljIGFsd2F5cyBnZW5lcmF0ZXMgaXRzIGZvcm1hdCBzdHJpbmdzCisgICAgd2l0aCBhIGBgOmBgIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4gIElmIHRoZQorICAgIGV4aXN0aW5nIGNvZGUncyBmb3JtYXQgc3RyaW5nIGVuZHMgd2l0aCBgYDtgYCwgdG8gcHJvdmlkZQorICAgIHVzYWdlIGhlbHAsIHRoaXMgY2hhbmdlIGlzIGhhcm1sZXNzLS1kb24ndCB3b3JyeSBhYm91dCBpdC4pCisKKyAgICBUaGlyZCwgZm9yIHBhcmFtZXRlcnMgd2hvc2UgZm9ybWF0IHVuaXRzIHJlcXVpcmUgdHdvIGFyZ3VtZW50cworICAgIChsaWtlIGEgbGVuZ3RoIHZhcmlhYmxlLCBvciBhbiBlbmNvZGluZyBzdHJpbmcsIG9yIGEgcG9pbnRlcgorICAgIHRvIGEgY29udmVyc2lvbiBmdW5jdGlvbiksIGVuc3VyZSB0aGF0IHRoZSBzZWNvbmQgYXJndW1lbnQgaXMKKyAgICAqZXhhY3RseSogdGhlIHNhbWUgYmV0d2VlbiB0aGUgdHdvIGludm9jYXRpb25zLgorCisgICAgRm91cnRoLCBpbnNpZGUgdGhlIG91dHB1dCBwb3J0aW9uIG9mIHRoZSBibG9jayB5b3UnbGwgZmluZCBhIHByZXByb2Nlc3NvcgorICAgIG1hY3JvIGRlZmluaW5nIHRoZSBhcHByb3ByaWF0ZSBzdGF0aWMgOmM6dHlwZTpgUHlNZXRob2REZWZgIHN0cnVjdHVyZSBmb3IKKyAgICB0aGlzIGJ1aWx0aW46OgorCisgICAgICAgICNkZWZpbmUgX19QSUNLTEVfUElDS0xFUl9EVU1QX01FVEhPRERFRiAgICBcCisgICAgICAgIHsiZHVtcCIsIChQeUNGdW5jdGlvbilfX3BpY2tsZV9QaWNrbGVyX2R1bXAsIE1FVEhfTywgX19waWNrbGVfUGlja2xlcl9kdW1wX19kb2NfX30sCisKKyAgICBUaGlzIHN0YXRpYyBzdHJ1Y3R1cmUgc2hvdWxkIGJlICpleGFjdGx5KiB0aGUgc2FtZSBhcyB0aGUgZXhpc3Rpbmcgc3RhdGljCisgICAgOmM6dHlwZTpgUHlNZXRob2REZWZgIHN0cnVjdHVyZSBmb3IgdGhpcyBidWlsdGluLgorCisgICAgSWYgYW55IG9mIHRoZXNlIGl0ZW1zIGRpZmZlciBpbiAqYW55IHdheSosCisgICAgYWRqdXN0IHlvdXIgQXJndW1lbnQgQ2xpbmljIGZ1bmN0aW9uIHNwZWNpZmljYXRpb24gYW5kIHJlcnVuCisgICAgYGBUb29scy9jbGluaWMvY2xpbmljLnB5YGAgdW50aWwgdGhleSAqYXJlKiB0aGUgc2FtZS4KKworCisxNC4gTm90aWNlIHRoYXQgdGhlIGxhc3QgbGluZSBvZiBpdHMgb3V0cHV0IGlzIHRoZSBkZWNsYXJhdGlvbgorICAgIG9mIHlvdXIgImltcGwiIGZ1bmN0aW9uLiAgVGhpcyBpcyB3aGVyZSB0aGUgYnVpbHRpbidzIGltcGxlbWVudGF0aW9uIGdvZXMuCisgICAgRGVsZXRlIHRoZSBleGlzdGluZyBwcm90b3R5cGUgb2YgdGhlIGZ1bmN0aW9uIHlvdSdyZSBtb2RpZnlpbmcsIGJ1dCBsZWF2ZQorICAgIHRoZSBvcGVuaW5nIGN1cmx5IGJyYWNlLiAgTm93IGRlbGV0ZSBpdHMgYXJndW1lbnQgcGFyc2luZyBjb2RlIGFuZCB0aGUKKyAgICBkZWNsYXJhdGlvbnMgb2YgYWxsIHRoZSB2YXJpYWJsZXMgaXQgZHVtcHMgdGhlIGFyZ3VtZW50cyBpbnRvLgorICAgIE5vdGljZSBob3cgdGhlIFB5dGhvbiBhcmd1bWVudHMgYXJlIG5vdyBhcmd1bWVudHMgdG8gdGhpcyBpbXBsIGZ1bmN0aW9uOworICAgIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIGRpZmZlcmVudCBuYW1lcyBmb3IgdGhlc2UgdmFyaWFibGVzLCBmaXggaXQuCisKKyAgICBMZXQncyByZWl0ZXJhdGUsIGp1c3QgYmVjYXVzZSBpdCdzIGtpbmQgb2Ygd2VpcmQuICBZb3VyIGNvZGUgc2hvdWxkIG5vdworICAgIGxvb2sgbGlrZSB0aGlzOjoKKworICAgICAgICBzdGF0aWMgcmV0dXJuX3R5cGUKKyAgICAgICAgeW91cl9mdW5jdGlvbl9pbXBsKC4uLikKKyAgICAgICAgLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogY2hlY2tzdW09Li4uXSovCisgICAgICAgIHsKKyAgICAgICAgLi4uCisKKyAgICBBcmd1bWVudCBDbGluaWMgZ2VuZXJhdGVkIHRoZSBjaGVja3N1bSBsaW5lIGFuZCB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIGp1c3QKKyAgICBhYm92ZSBpdC4gIFlvdSBzaG91bGQgd3JpdGUgdGhlIG9wZW5pbmcgKGFuZCBjbG9zaW5nKSBjdXJseSBicmFjZXMgZm9yIHRoZQorICAgIGZ1bmN0aW9uLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGluc2lkZS4KKworICAgIFNhbXBsZTo6CisKKyAgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgICBtb2R1bGUgX3BpY2tsZQorICAgICAgICBjbGFzcyBfcGlja2xlLlBpY2tsZXIgIlBpY2tsZXJPYmplY3QgKiIgIiZQaWNrbGVyX1R5cGUiCisgICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKyAgICAgICAgLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogY2hlY2tzdW09ZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgICAgICAgb2JqOiAnTycKKyAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRvIGJlIHBpY2tsZWQuCisgICAgICAgICAgICAvCisKKyAgICAgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyAgICAgICAgUHlEb2NfU1RSVkFSKF9fcGlja2xlX1BpY2tsZXJfZHVtcF9fZG9jX18sCisgICAgICAgICJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuXG4iCisgICAgICAgICJcbiIKKyAgICAgICAgLi4uCisgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCisgICAgICAgIF9waWNrbGVfUGlja2xlcl9kdW1wX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKKyAgICAgICAgLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogY2hlY2tzdW09M2JkMzA3NDViZjIwNmE0OGY4YjU3NmExZGEzZDkwZjU1YTBhNDE4N10qLworICAgICAgICB7CisgICAgICAgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBQaWNrbGVyIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgKGlzc3VlMzY2NCkuCisgICAgICAgICAgICAgICBEZXZlbG9wZXJzIG9mdGVuIGZvcmdldCB0byBjYWxsIF9faW5pdF9fKCkgaW4gdGhlaXIgc3ViY2xhc3Nlcywgd2hpY2gKKyAgICAgICAgICAgICAgIHdvdWxkIHRyaWdnZXIgYSBzZWdmYXVsdCB3aXRob3V0IHRoaXMgY2hlY2suICovCisgICAgICAgICAgICBpZiAoc2VsZi0+d3JpdGUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICVzLl9faW5pdF9fKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKF9QaWNrbGVyX0NsZWFyQnVmZmVyKHNlbGYpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgLi4uCisKKzE1LiBSZW1lbWJlciB0aGUgbWFjcm8gd2l0aCB0aGUgOmM6dHlwZTpgUHlNZXRob2REZWZgIHN0cnVjdHVyZSBmb3IgdGhpcworICAgIGZ1bmN0aW9uPyAgRmluZCB0aGUgZXhpc3RpbmcgOmM6dHlwZTpgUHlNZXRob2REZWZgIHN0cnVjdHVyZSBmb3IgdGhpcworICAgIGZ1bmN0aW9uIGFuZCByZXBsYWNlIGl0IHdpdGggYSByZWZlcmVuY2UgdG8gdGhlIG1hY3JvLiAgKElmIHRoZSBidWlsdGluCisgICAgaXMgYXQgbW9kdWxlIHNjb3BlLCB0aGlzIHdpbGwgcHJvYmFibHkgYmUgdmVyeSBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGU7CisgICAgaWYgdGhlIGJ1aWx0aW4gaXMgYSBjbGFzcyBtZXRob2QsIHRoaXMgd2lsbCBwcm9iYWJseSBiZSBiZWxvdyBidXQgcmVsYXRpdmVseQorICAgIG5lYXIgdG8gdGhlIGltcGxlbWVudGF0aW9uLikKKworICAgIE5vdGUgdGhhdCB0aGUgYm9keSBvZiB0aGUgbWFjcm8gY29udGFpbnMgYSB0cmFpbGluZyBjb21tYS4gIFNvIHdoZW4geW91CisgICAgcmVwbGFjZSB0aGUgZXhpc3Rpbmcgc3RhdGljIDpjOnR5cGU6YFB5TWV0aG9kRGVmYCBzdHJ1Y3R1cmUgd2l0aCB0aGUgbWFjcm8sCisgICAgKmRvbid0KiBhZGQgYSBjb21tYSB0byB0aGUgZW5kLgorCisgICAgU2FtcGxlOjoKKworICAgICAgICBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIFBpY2tsZXJfbWV0aG9kc1tdID0geworICAgICAgICAgICAgX19QSUNLTEVfUElDS0xFUl9EVU1QX01FVEhPRERFRgorICAgICAgICAgICAgX19QSUNLTEVfUElDS0xFUl9DTEVBUl9NRU1PX01FVEhPRERFRgorICAgICAgICAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCisgICAgICAgIH07CisKKworMTYuIENvbXBpbGUsIHRoZW4gcnVuIHRoZSByZWxldmFudCBwb3J0aW9ucyBvZiB0aGUgcmVncmVzc2lvbi10ZXN0IHN1aXRlLgorICAgIFRoaXMgY2hhbmdlIHNob3VsZCBub3QgaW50cm9kdWNlIGFueSBuZXcgY29tcGlsZS10aW1lIHdhcm5pbmdzIG9yIGVycm9ycywKKyAgICBhbmQgdGhlcmUgc2hvdWxkIGJlIG5vIGV4dGVybmFsbHktdmlzaWJsZSBjaGFuZ2UgdG8gUHl0aG9uJ3MgYmVoYXZpb3IuCisKKyAgICBXZWxsLCBleGNlcHQgZm9yIG9uZSBkaWZmZXJlbmNlOiBgYGluc3BlY3Quc2lnbmF0dXJlKClgYCBydW4gb24geW91ciBmdW5jdGlvbgorICAgIHNob3VsZCBub3cgcHJvdmlkZSBhIHZhbGlkIHNpZ25hdHVyZSEKKworICAgIENvbmdyYXR1bGF0aW9ucywgeW91J3ZlIHBvcnRlZCB5b3VyIGZpcnN0IGZ1bmN0aW9uIHRvIHdvcmsgd2l0aCBBcmd1bWVudCBDbGluaWMhCisKK0FkdmFuY2VkIFRvcGljcworPT09PT09PT09PT09PT09CisKK05vdyB0aGF0IHlvdSd2ZSBoYWQgc29tZSBleHBlcmllbmNlIHdvcmtpbmcgd2l0aCBBcmd1bWVudCBDbGluaWMsIGl0J3MgdGltZQorZm9yIHNvbWUgYWR2YW5jZWQgdG9waWNzLgorCisKK1N5bWJvbGljIGRlZmF1bHQgdmFsdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCB2YWx1ZSB5b3UgcHJvdmlkZSBmb3IgYSBwYXJhbWV0ZXIgY2FuJ3QgYmUgYW55IGFyYml0cmFyeQorZXhwcmVzc2lvbi4gIEN1cnJlbnRseSB0aGUgZm9sbG93aW5nIGFyZSBleHBsaWNpdGx5IHN1cHBvcnRlZDoKKworKiBOdW1lcmljIGNvbnN0YW50cyAoaW50ZWdlciBhbmQgZmxvYXQpCisqIFN0cmluZyBjb25zdGFudHMKKyogYGBUcnVlYGAsIGBgRmFsc2VgYCwgYW5kIGBgTm9uZWBgCisqIFNpbXBsZSBzeW1ib2xpYyBjb25zdGFudHMgbGlrZSBgYHN5cy5tYXhzaXplYGAsIHdoaWNoIG11c3QKKyAgc3RhcnQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlCisKK0luIGNhc2UgeW91J3JlIGN1cmlvdXMsIHRoaXMgaXMgaW1wbGVtZW50ZWQgaW4gIGBgZnJvbV9idWlsdGluKClgYAoraW4gYGBMaWIvaW5zcGVjdC5weWBgLgorCisoSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYXkgbmVlZCB0byBnZXQgZXZlbiBtb3JlIGVsYWJvcmF0ZSwKK3RvIGFsbG93IGZ1bGwgZXhwcmVzc2lvbnMgbGlrZSBgYENPTlNUQU5UIC0gMWBgLikKKworCitSZW5hbWluZyB0aGUgQyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBnZW5lcmF0ZWQgYnkgQXJndW1lbnQgQ2xpbmljCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FyZ3VtZW50IENsaW5pYyBhdXRvbWF0aWNhbGx5IG5hbWVzIHRoZSBmdW5jdGlvbnMgaXQgZ2VuZXJhdGVzIGZvciB5b3UuCitPY2Nhc2lvbmFsbHkgdGhpcyBtYXkgY2F1c2UgYSBwcm9ibGVtLCBpZiB0aGUgZ2VuZXJhdGVkIG5hbWUgY29sbGlkZXMgd2l0aAordGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgQyBmdW5jdGlvbi4gIFRoZXJlJ3MgYW4gZWFzeSBzb2x1dGlvbjogb3ZlcnJpZGUgdGhlIG5hbWVzCit1c2VkIGZvciB0aGUgQyBmdW5jdGlvbnMuICBKdXN0IGFkZCB0aGUga2V5d29yZCBgYCJhcyJgYAordG8geW91ciBmdW5jdGlvbiBkZWNsYXJhdGlvbiBsaW5lLCBmb2xsb3dlZCBieSB0aGUgZnVuY3Rpb24gbmFtZSB5b3Ugd2lzaCB0byB1c2UuCitBcmd1bWVudCBDbGluaWMgd2lsbCB1c2UgdGhhdCBmdW5jdGlvbiBuYW1lIGZvciB0aGUgYmFzZSAoZ2VuZXJhdGVkKSBmdW5jdGlvbiwKK3RoZW4gYWRkIGBgIl9pbXBsImBgIHRvIHRoZSBlbmQgYW5kIHVzZSB0aGF0IGZvciB0aGUgbmFtZSBvZiB0aGUgaW1wbCBmdW5jdGlvbi4KKworRm9yIGV4YW1wbGUsIGlmIHdlIHdhbnRlZCB0byByZW5hbWUgdGhlIEMgZnVuY3Rpb24gbmFtZXMgZ2VuZXJhdGVkIGZvcgorYGBwaWNrbGUuUGlja2xlci5kdW1wYGAsIGl0J2QgbG9vayBsaWtlIHRoaXM6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIHBpY2tsZS5QaWNrbGVyLmR1bXAgYXMgcGlja2xlcl9kdW1wZXIKKworICAgIC4uLgorCitUaGUgYmFzZSBmdW5jdGlvbiB3b3VsZCBub3cgYmUgbmFtZWQgYGBwaWNrbGVyX2R1bXBlcigpYGAsCithbmQgdGhlIGltcGwgZnVuY3Rpb24gd291bGQgbm93IGJlIG5hbWVkIGBgcGlja2xlcl9kdW1wZXJfaW1wbCgpYGAuCisKKworU2ltaWxhcmx5LCB5b3UgbWF5IGhhdmUgYSBwcm9ibGVtIHdoZXJlIHlvdSB3YW50IHRvIGdpdmUgYSBwYXJhbWV0ZXIKK2Egc3BlY2lmaWMgUHl0aG9uIG5hbWUsIGJ1dCB0aGF0IG5hbWUgbWF5IGJlIGluY29udmVuaWVudCBpbiBDLiAgQXJndW1lbnQKK0NsaW5pYyBhbGxvd3MgeW91IHRvIGdpdmUgYSBwYXJhbWV0ZXIgZGlmZmVyZW50IG5hbWVzIGluIFB5dGhvbiBhbmQgaW4gQywKK3VzaW5nIHRoZSBzYW1lIGBgImFzImBgIHN5bnRheDo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisgICAgcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICAgIG9iajogb2JqZWN0CisgICAgICAgIGZpbGUgYXMgZmlsZV9vYmo6IG9iamVjdAorICAgICAgICBwcm90b2NvbDogb2JqZWN0ID0gTlVMTAorICAgICAgICAqCisgICAgICAgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorCitIZXJlLCB0aGUgbmFtZSB1c2VkIGluIFB5dGhvbiAoaW4gdGhlIHNpZ25hdHVyZSBhbmQgdGhlIGBga2V5d29yZHNgYAorYXJyYXkpIHdvdWxkIGJlIGBgZmlsZWBgLCBidXQgdGhlIEMgdmFyaWFibGUgd291bGQgYmUgbmFtZWQgYGBmaWxlX29iamBgLgorCitZb3UgY2FuIHVzZSB0aGlzIHRvIHJlbmFtZSB0aGUgYGBzZWxmYGAgcGFyYW1ldGVyIHRvbyEKKworCitDb252ZXJ0aW5nIGZ1bmN0aW9ucyB1c2luZyBQeUFyZ19VbnBhY2tUdXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gY29udmVydCBhIGZ1bmN0aW9uIHBhcnNpbmcgaXRzIGFyZ3VtZW50cyB3aXRoIDpjOmZ1bmM6YFB5QXJnX1VucGFja1R1cGxlYCwKK3NpbXBseSB3cml0ZSBvdXQgYWxsIHRoZSBhcmd1bWVudHMsIHNwZWNpZnlpbmcgZWFjaCBhcyBhbiBgYG9iamVjdGBgLiAgWW91CittYXkgc3BlY2lmeSB0aGUgYGB0eXBlYGAgYXJndW1lbnQgdG8gY2FzdCB0aGUgdHlwZSBhcyBhcHByb3ByaWF0ZS4gIEFsbAorYXJndW1lbnRzIHNob3VsZCBiZSBtYXJrZWQgcG9zaXRpb25hbC1vbmx5IChhZGQgYSBgYC9gYCBvbiBhIGxpbmUgYnkgaXRzZWxmCithZnRlciB0aGUgbGFzdCBhcmd1bWVudCkuCisKK0N1cnJlbnRseSB0aGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCB1c2UgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAsIGJ1dCB0aGlzCit3aWxsIGNoYW5nZSBzb29uLgorCitPcHRpb25hbCBHcm91cHMKKy0tLS0tLS0tLS0tLS0tLQorCitTb21lIGxlZ2FjeSBmdW5jdGlvbnMgaGF2ZSBhIHRyaWNreSBhcHByb2FjaCB0byBwYXJzaW5nIHRoZWlyIGFyZ3VtZW50czoKK3RoZXkgY291bnQgdGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cywgdGhlbiB1c2UgYSBgYHN3aXRjaGBgIHN0YXRlbWVudAordG8gY2FsbCBvbmUgb2Ygc2V2ZXJhbCBkaWZmZXJlbnQgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgY2FsbHMgZGVwZW5kaW5nIG9uCitob3cgbWFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGVyZSBhcmUuICAoVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBhY2NlcHQKK2tleXdvcmQtb25seSBhcmd1bWVudHMuKSAgVGhpcyBhcHByb2FjaCB3YXMgdXNlZCB0byBzaW11bGF0ZSBvcHRpb25hbAorYXJndW1lbnRzIGJhY2sgYmVmb3JlIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2Agd2FzIGNyZWF0ZWQuCisKK1doaWxlIGZ1bmN0aW9ucyB1c2luZyB0aGlzIGFwcHJvYWNoIGNhbiBvZnRlbiBiZSBjb252ZXJ0ZWQgdG8KK3VzZSA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgLCBvcHRpb25hbCBhcmd1bWVudHMsIGFuZCBkZWZhdWx0IHZhbHVlcywKK2l0J3Mgbm90IGFsd2F5cyBwb3NzaWJsZS4gIFNvbWUgb2YgdGhlc2UgbGVnYWN5IGZ1bmN0aW9ucyBoYXZlCitiZWhhdmlvcnMgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCBkb2Vzbid0IGRpcmVjdGx5IHN1cHBvcnQuCitUaGUgbW9zdCBvYnZpb3VzIGV4YW1wbGUgaXMgdGhlIGJ1aWx0aW4gZnVuY3Rpb24gYGByYW5nZSgpYGAsIHdoaWNoIGhhcworYW4gb3B0aW9uYWwgYXJndW1lbnQgb24gdGhlICpsZWZ0KiBzaWRlIG9mIGl0cyByZXF1aXJlZCBhcmd1bWVudCEKK0Fub3RoZXIgZXhhbXBsZSBpcyBgYGN1cnNlcy53aW5kb3cuYWRkY2goKWBgLCB3aGljaCBoYXMgYSBncm91cCBvZiB0d28KK2FyZ3VtZW50cyB0aGF0IG11c3QgYWx3YXlzIGJlIHNwZWNpZmllZCB0b2dldGhlci4gIChUaGUgYXJndW1lbnRzIGFyZQorY2FsbGVkIGBgeGBgIGFuZCBgYHlgYDsgaWYgeW91IGNhbGwgdGhlIGZ1bmN0aW9uIHBhc3NpbmcgaW4gYGB4YGAsCit5b3UgbXVzdCBhbHNvIHBhc3MgaW4gYGB5YGAtLWFuZCBpZiB5b3UgZG9uJ3QgcGFzcyBpbiBgYHhgYCB5b3UgbWF5IG5vdAorcGFzcyBpbiBgYHlgYCBlaXRoZXIuKQorCitJbiBhbnkgY2FzZSwgdGhlIGdvYWwgb2YgQXJndW1lbnQgQ2xpbmljIGlzIHRvIHN1cHBvcnQgYXJndW1lbnQgcGFyc2luZworZm9yIGFsbCBleGlzdGluZyBDUHl0aG9uIGJ1aWx0aW5zIHdpdGhvdXQgY2hhbmdpbmcgdGhlaXIgc2VtYW50aWNzLgorVGhlcmVmb3JlIEFyZ3VtZW50IENsaW5pYyBzdXBwb3J0cwordGhpcyBhbHRlcm5hdGUgYXBwcm9hY2ggdG8gcGFyc2luZywgdXNpbmcgd2hhdCBhcmUgY2FsbGVkICpvcHRpb25hbCBncm91cHMqLgorT3B0aW9uYWwgZ3JvdXBzIGFyZSBncm91cHMgb2YgYXJndW1lbnRzIHRoYXQgbXVzdCBhbGwgYmUgcGFzc2VkIGluIHRvZ2V0aGVyLgorVGhleSBjYW4gYmUgdG8gdGhlIGxlZnQgb3IgdGhlIHJpZ2h0IG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudHMuICBUaGV5CitjYW4gKm9ubHkqIGJlIHVzZWQgd2l0aCBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycy4KKworLi4gbm90ZTo6IE9wdGlvbmFsIGdyb3VwcyBhcmUgKm9ubHkqIGludGVuZGVkIGZvciB1c2Ugd2hlbiBjb252ZXJ0aW5nCisgICAgICAgICAgZnVuY3Rpb25zIHRoYXQgbWFrZSBtdWx0aXBsZSBjYWxscyB0byA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCEKKyAgICAgICAgICBGdW5jdGlvbnMgdGhhdCB1c2UgKmFueSogb3RoZXIgYXBwcm9hY2ggZm9yIHBhcnNpbmcgYXJndW1lbnRzCisgICAgICAgICAgc2hvdWxkICphbG1vc3QgbmV2ZXIqIGJlIGNvbnZlcnRlZCB0byBBcmd1bWVudCBDbGluaWMgdXNpbmcKKyAgICAgICAgICBvcHRpb25hbCBncm91cHMuICBGdW5jdGlvbnMgdXNpbmcgb3B0aW9uYWwgZ3JvdXBzIGN1cnJlbnRseQorICAgICAgICAgIGNhbm5vdCBoYXZlIGFjY3VyYXRlIHNpZ2FudHVyZXMgaW4gUHl0aG9uLCBiZWNhdXNlIFB5dGhvbiBqdXN0CisgICAgICAgICAgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSBjb25jZXB0LiAgUGxlYXNlIGF2b2lkIHVzaW5nIG9wdGlvbmFsCisgICAgICAgICAgZ3JvdXBzIHdoZXJldmVyIHBvc3NpYmxlLgorCitUbyBzcGVjaWZ5IGFuIG9wdGlvbmFsIGdyb3VwLCBhZGQgYSBgYFtgYCBvbiBhIGxpbmUgYnkgaXRzZWxmIGJlZm9yZQordGhlIHBhcmFtZXRlcnMgeW91IHdpc2ggdG8gZ3JvdXAgdG9nZXRoZXIsIGFuZCBhIGBgXWBgIG9uIGEgbGluZSBieSBpdHNlbGYKK2FmdGVyIHRoZXNlIHBhcmFtZXRlcnMuICBBcyBhbiBleGFtcGxlLCBoZXJlJ3MgaG93IGBgY3Vyc2VzLndpbmRvdy5hZGRjaGBgCit1c2VzIG9wdGlvbmFsIGdyb3VwcyB0byBtYWtlIHRoZSBmaXJzdCB0d28gcGFyYW1ldGVycyBhbmQgdGhlIGxhc3QKK3BhcmFtZXRlciBvcHRpb25hbDo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisKKyAgICBjdXJzZXMud2luZG93LmFkZGNoCisKKyAgICAgICAgWworICAgICAgICB4OiBpbnQKKyAgICAgICAgICBYLWNvb3JkaW5hdGUuCisgICAgICAgIHk6IGludAorICAgICAgICAgIFktY29vcmRpbmF0ZS4KKyAgICAgICAgXQorCisgICAgICAgIGNoOiBvYmplY3QKKyAgICAgICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorCisgICAgICAgIFsKKyAgICAgICAgYXR0cjogbG9uZworICAgICAgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgIF0KKyAgICAgICAgLworCisgICAgLi4uCisKKworTm90ZXM6CisKKyogRm9yIGV2ZXJ5IG9wdGlvbmFsIGdyb3VwLCBvbmUgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSBwYXNzZWQgaW50byB0aGUKKyAgaW1wbCBmdW5jdGlvbiByZXByZXNlbnRpbmcgdGhlIGdyb3VwLiAgVGhlIHBhcmFtZXRlciB3aWxsIGJlIGFuIGludCBuYW1lZAorICBgYGdyb3VwX3tkaXJlY3Rpb259X3tudW1iZXJ9YGAsCisgIHdoZXJlIGBge2RpcmVjdGlvbn1gYCBpcyBlaXRoZXIgYGByaWdodGBgIG9yIGBgbGVmdGBgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBncm91cAorICBpcyBiZWZvcmUgb3IgYWZ0ZXIgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMsIGFuZCBgYHtudW1iZXJ9YGAgaXMgYSBtb25vdG9uaWNhbGx5CisgIGluY3JlYXNpbmcgbnVtYmVyIChzdGFydGluZyBhdCAxKSBpbmRpY2F0aW5nIGhvdyBmYXIgYXdheSB0aGUgZ3JvdXAgaXMgZnJvbQorICB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy4gIFdoZW4gdGhlIGltcGwgaXMgY2FsbGVkLCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldAorICB0byB6ZXJvIGlmIHRoaXMgZ3JvdXAgd2FzIHVudXNlZCwgYW5kIHNldCB0byBub24temVybyBpZiB0aGlzIGdyb3VwIHdhcyB1c2VkLgorICAoQnkgdXNlZCBvciB1bnVzZWQsIEkgbWVhbiB3aGV0aGVyIG9yIG5vdCB0aGUgcGFyYW1ldGVycyByZWNlaXZlZCBhcmd1bWVudHMKKyAgaW4gdGhpcyBpbnZvY2F0aW9uLikKKworKiBJZiB0aGVyZSBhcmUgbm8gcmVxdWlyZWQgYXJndW1lbnRzLCB0aGUgb3B0aW9uYWwgZ3JvdXBzIHdpbGwgYmVoYXZlCisgIGFzIGlmIHRoZXkncmUgdG8gdGhlIHJpZ2h0IG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudHMuCisKKyogSW4gdGhlIGNhc2Ugb2YgYW1iaWd1aXR5LCB0aGUgYXJndW1lbnQgcGFyc2luZyBjb2RlCisgIGZhdm9ycyBwYXJhbWV0ZXJzIG9uIHRoZSBsZWZ0IChiZWZvcmUgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMpLgorCisqIE9wdGlvbmFsIGdyb3VwcyBjYW4gb25seSBjb250YWluIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLgorCisqIE9wdGlvbmFsIGdyb3VwcyBhcmUgKm9ubHkqIGludGVuZGVkIGZvciBsZWdhY3kgY29kZS4gIFBsZWFzZSBkbyBub3QKKyAgdXNlIG9wdGlvbmFsIGdyb3VwcyBmb3IgbmV3IGNvZGUuCisKKworVXNpbmcgcmVhbCBBcmd1bWVudCBDbGluaWMgY29udmVydGVycywgaW5zdGVhZCBvZiAibGVnYWN5IGNvbnZlcnRlcnMiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gc2F2ZSB0aW1lLCBhbmQgdG8gbWluaW1pemUgaG93IG11Y2ggeW91IG5lZWQgdG8gbGVhcm4KK3RvIGFjaGlldmUgeW91ciBmaXJzdCBwb3J0IHRvIEFyZ3VtZW50IENsaW5pYywgdGhlIHdhbGt0aHJvdWdoIGFib3ZlIHRlbGxzCit5b3UgdG8gdXNlICJsZWdhY3kgY29udmVydGVycyIuICAiTGVnYWN5IGNvbnZlcnRlcnMiIGFyZSBhIGNvbnZlbmllbmNlLAorZGVzaWduZWQgZXhwbGljaXRseSB0byBtYWtlIHBvcnRpbmcgZXhpc3RpbmcgY29kZSB0byBBcmd1bWVudCBDbGluaWMKK2Vhc2llci4gIEFuZCB0byBiZSBjbGVhciwgdGhlaXIgdXNlIGlzIGFjY2VwdGFibGUgd2hlbiBwb3J0aW5nIGNvZGUgZm9yCitQeXRob24gMy40LgorCitIb3dldmVyLCBpbiB0aGUgbG9uZyB0ZXJtIHdlIHByb2JhYmx5IHdhbnQgYWxsIG91ciBibG9ja3MgdG8KK3VzZSBBcmd1bWVudCBDbGluaWMncyByZWFsIHN5bnRheCBmb3IgY29udmVydGVycy4gIFdoeT8gIEEgY291cGxlCityZWFzb25zOgorCisqIFRoZSBwcm9wZXIgY29udmVydGVycyBhcmUgZmFyIGVhc2llciB0byByZWFkIGFuZCBjbGVhcmVyIGluIHRoZWlyIGludGVudC4KKyogVGhlcmUgYXJlIHNvbWUgZm9ybWF0IHVuaXRzIHRoYXQgYXJlIHVuc3VwcG9ydGVkIGFzICJsZWdhY3kgY29udmVydGVycyIsCisgIGJlY2F1c2UgdGhleSByZXF1aXJlIGFyZ3VtZW50cywgYW5kIHRoZSBsZWdhY3kgY29udmVydGVyIHN5bnRheCBkb2Vzbid0CisgIHN1cHBvcnQgc3BlY2lmeWluZyBhcmd1bWVudHMuCisqIEluIHRoZSBmdXR1cmUgd2UgbWF5IGhhdmUgYSBuZXcgYXJndW1lbnQgcGFyc2luZyBsaWJyYXJ5IHRoYXQgaXNuJ3QKKyAgcmVzdHJpY3RlZCB0byB3aGF0IDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIHN1cHBvcnRzOyB0aGlzIGZsZXhpYmlsaXR5CisgIHdvbid0IGJlIGF2YWlsYWJsZSB0byBwYXJhbWV0ZXJzIHVzaW5nIGxlZ2FjeSBjb252ZXJ0ZXJzLgorCitUaGVyZWZvcmUsIGlmIHlvdSBkb24ndCBtaW5kIGEgbGl0dGxlIGV4dHJhIGVmZm9ydCwgcGxlYXNlIHVzZSB0aGUgbm9ybWFsCitjb252ZXJ0ZXJzIGluc3RlYWQgb2YgbGVnYWN5IGNvbnZlcnRlcnMuCisKK0luIGEgbnV0c2hlbGwsIHRoZSBzeW50YXggZm9yIEFyZ3VtZW50IENsaW5pYyAobm9uLWxlZ2FjeSkgY29udmVydGVycworbG9va3MgbGlrZSBhIFB5dGhvbiBmdW5jdGlvbiBjYWxsLiAgSG93ZXZlciwgaWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0Cithcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uIChhbGwgZnVuY3Rpb25zIHRha2UgdGhlaXIgZGVmYXVsdCB2YWx1ZXMpLAoreW91IG1heSBvbWl0IHRoZSBwYXJlbnRoZXNlcy4gIFRodXMgYGBib29sYGAgYW5kIGBgYm9vbCgpYGAgYXJlIGV4YWN0bHkKK3RoZSBzYW1lIGNvbnZlcnRlcnMuCisKK0FsbCBhcmd1bWVudHMgdG8gQXJndW1lbnQgQ2xpbmljIGNvbnZlcnRlcnMgYXJlIGtleXdvcmQtb25seS4KK0FsbCBBcmd1bWVudCBDbGluaWMgY29udmVydGVycyBhY2NlcHQgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CisKKyAgYGBjX2RlZmF1bHRgYAorICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciB3aGVuIGRlZmluZWQgaW4gQy4KKyAgICBTcGVjaWZpY2FsbHksIHRoaXMgd2lsbCBiZSB0aGUgaW5pdGlhbGl6ZXIgZm9yIHRoZSB2YXJpYWJsZSBkZWNsYXJlZAorICAgIGluIHRoZSAicGFyc2UgZnVuY3Rpb24iLiAgU2VlIDpyZWY6YHRoZSBzZWN0aW9uIG9uIGRlZmF1bHQgdmFsdWVzIDxkZWZhdWx0X3ZhbHVlcz5gCisgICAgZm9yIGhvdyB0byB1c2UgdGhpcy4KKyAgICBTcGVjaWZpZWQgYXMgYSBzdHJpbmcuCisKKyAgYGBhbm5vdGF0aW9uYGAKKyAgICBUaGUgYW5ub3RhdGlvbiB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIuICBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCwKKyAgICBiZWNhdXNlIFBFUCA4IG1hbmRhdGVzIHRoYXQgdGhlIFB5dGhvbiBsaWJyYXJ5IG1heSBub3QgdXNlCisgICAgYW5ub3RhdGlvbnMuCisKK0luIGFkZGl0aW9uLCBzb21lIGNvbnZlcnRlcnMgYWNjZXB0IGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgSGVyZSBpcyBhIGxpc3QKK29mIHRoZXNlIGFyZ3VtZW50cywgYWxvbmcgd2l0aCB0aGVpciBtZWFuaW5nczoKKworICBgYGJpdHdpc2VgYAorICAgIE9ubHkgc3VwcG9ydGVkIGZvciB1bnNpZ25lZCBpbnRlZ2Vycy4gIFRoZSBuYXRpdmUgaW50ZWdlciB2YWx1ZSBvZiB0aGlzCisgICAgUHl0aG9uIGFyZ3VtZW50IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgcGFyYW1ldGVyIHdpdGhvdXQgYW55IHJhbmdlIGNoZWNraW5nLAorICAgIGV2ZW4gZm9yIG5lZ2F0aXZlIHZhbHVlcy4KKworICBgYGNvbnZlcnRlcmBgCisgICAgT25seSBzdXBwb3J0ZWQgYnkgdGhlIGBgb2JqZWN0YGAgY29udmVydGVyLiAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEKKyAgICA6cmVmOmBDICJjb252ZXJ0ZXIgZnVuY3Rpb24iIDxvX2FtcGVyc2FuZD5gCisgICAgdG8gdXNlIHRvIGNvbnZlcnQgdGhpcyBvYmplY3QgdG8gYSBuYXRpdmUgdHlwZS4KKworICBgYGVuY29kaW5nYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3Igc3RyaW5ncy4gIFNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdG8gdXNlIHdoZW4gY29udmVydGluZworICAgIHRoaXMgc3RyaW5nIGZyb20gYSBQeXRob24gc3RyIChVbmljb2RlKSB2YWx1ZSBpbnRvIGEgQyBgYGNoYXIgKmBgIHZhbHVlLgorCisgIGBgbGVuZ3RoYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3Igc3RyaW5ncy4gIElmIHRydWUsIHJlcXVlc3RzIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUKKyAgICBzdHJpbmcgYmUgcGFzc2VkIGluIHRvIHRoZSBpbXBsIGZ1bmN0aW9uLCBqdXN0IGFmdGVyIHRoZSBzdHJpbmcgcGFyYW1ldGVyLAorICAgIGluIGEgcGFyYW1ldGVyIG5hbWVkIGBgPHBhcmFtZXRlcl9uYW1lPl9sZW5ndGhgYC4KKworICBgYG51bGxhYmxlYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3Igc3RyaW5ncy4gIElmIHRydWUsIHRoaXMgcGFyYW1ldGVyIG1heSBhbHNvIGJlIHNldCB0bworICAgIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlIHRoZSBDIHBhcmFtZXRlciB3aWxsIGJlIHNldCB0byBgYE5VTExgYC4KKworICBgYHN1YmNsYXNzX29mYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgb2JqZWN0YGAgY29udmVydGVyLiAgUmVxdWlyZXMgdGhhdCB0aGUgUHl0aG9uCisgICAgdmFsdWUgYmUgYSBzdWJjbGFzcyBvZiBhIFB5dGhvbiB0eXBlLCBhcyBleHByZXNzZWQgaW4gQy4KKworICBgYHR5cGVzYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgb2JqZWN0YGAgKGFuZCBgYHNlbGZgYCkgY29udmVydGVyLiAgU3BlY2lmaWVzCisgICAgdGhlIEMgdHlwZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZWNsYXJlIHRoZSB2YXJpYWJsZS4gIERlZmF1bHQgdmFsdWUgaXMKKyAgICBgYCJQeU9iamVjdCAqImBgLgorCisgIGBgdHlwZXNgYAorICAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBsaXN0IG9mIFB5dGhvbiB0eXBlcyAoYW5kIHBvc3NpYmx5IHBzZXVkby10eXBlcyk7CisgICAgdGhpcyByZXN0cmljdHMgdGhlIGFsbG93YWJsZSBQeXRob24gYXJndW1lbnQgdG8gdmFsdWVzIG9mIHRoZXNlIHR5cGVzLgorICAgIChUaGlzIGlzIG5vdCBhIGdlbmVyYWwtcHVycG9zZSBmYWNpbGl0eTsgYXMgYSBydWxlIGl0IG9ubHkgc3VwcG9ydHMKKyAgICBzcGVjaWZpYyBsaXN0cyBvZiB0eXBlcyBhcyBzaG93biBpbiB0aGUgbGVnYWN5IGNvbnZlcnRlciB0YWJsZS4pCisKKyAgYGB6ZXJvZXNgYAorICAgIE9ubHkgc3VwcG9ydGVkIGZvciBzdHJpbmdzLiAgSWYgdHJ1ZSwgZW1iZWRkZWQgTlVMIGJ5dGVzIChgYCdcXDAnYGApIGFyZQorICAgIHBlcm1pdHRlZCBpbnNpZGUgdGhlIHZhbHVlLgorCitQbGVhc2Ugbm90ZSwgbm90IGV2ZXJ5IHBvc3NpYmxlIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB3aWxsIHdvcmsuCitPZnRlbiB0aGVzZSBhcmd1bWVudHMgYXJlIGltcGxlbWVudGVkIGludGVybmFsbHkgYnkgc3BlY2lmaWMgYGBQeUFyZ19QYXJzZVR1cGxlYGAKKypmb3JtYXQgdW5pdHMqLCB3aXRoIHNwZWNpZmljIGJlaGF2aW9yLiAgRm9yIGV4YW1wbGUsIGN1cnJlbnRseSB5b3UgY2Fubm90CitjYWxsIGBgc3RyYGAgYW5kIHBhc3MgaW4gYGB6ZXJvZXM9VHJ1ZWBgIHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5nIGFuIGBgZW5jb2RpbmdgYDsKK2FsdGhvdWdoIGl0J3MgcGVyZmVjdGx5IHJlYXNvbmFibGUgdG8gdGhpbmsgdGhpcyB3b3VsZCB3b3JrLCB0aGVzZSBzZW1hbnRpY3MgZG9uJ3QKK21hcCB0byBhbnkgZXhpc3RpbmcgZm9ybWF0IHVuaXQuICBTbyBBcmd1bWVudCBDbGluaWMgZG9lc24ndCBzdXBwb3J0IGl0LiAgKE9yLCBhdAorbGVhc3QsIG5vdCB5ZXQuKQorCitCZWxvdyBpcyBhIHRhYmxlIHNob3dpbmcgdGhlIG1hcHBpbmcgb2YgbGVnYWN5IGNvbnZlcnRlcnMgaW50byByZWFsCitBcmd1bWVudCBDbGluaWMgY29udmVydGVycy4gIE9uIHRoZSBsZWZ0IGlzIHRoZSBsZWdhY3kgY29udmVydGVyLAorb24gdGhlIHJpZ2h0IGlzIHRoZSB0ZXh0IHlvdSdkIHJlcGxhY2UgaXQgd2l0aC4KKworPT09PT09PT09ICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitgYCdCJ2BgICAgICBgYHVuc2lnbmVkX2NoYXIoYml0d2lzZT1UcnVlKWBgCitgYCdiJ2BgICAgICBgYHVuc2lnbmVkX2NoYXJgYAorYGAnYydgYCAgICAgYGBjaGFyYGAKK2BgJ0MnYGAgICAgIGBgaW50KHR5cGVzPSdzdHInKWBgCitgYCdkJ2BgICAgICBgYGRvdWJsZWBgCitgYCdEJ2BgICAgICBgYFB5X2NvbXBsZXhgYAorYGAnZXMjJ2BgICAgYGBzdHIoZW5jb2Rpbmc9J25hbWVfb2ZfZW5jb2RpbmcnLCBsZW5ndGg9VHJ1ZSwgemVyb2VzPVRydWUpYGAKK2BgJ2VzJ2BgICAgIGBgc3RyKGVuY29kaW5nPSduYW1lX29mX2VuY29kaW5nJylgYAorYGAnZXQjJ2BgICAgYGBzdHIoZW5jb2Rpbmc9J25hbWVfb2ZfZW5jb2RpbmcnLCB0eXBlcz0nYnl0ZXMgYnl0ZWFycmF5IHN0cicsIGxlbmd0aD1UcnVlKWBgCitgYCdldCdgYCAgICBgYHN0cihlbmNvZGluZz0nbmFtZV9vZl9lbmNvZGluZycsIHR5cGVzPSdieXRlcyBieXRlYXJyYXkgc3RyJylgYAorYGAnZidgYCAgICAgYGBmbG9hdGBgCitgYCdoJ2BgICAgICBgYHNob3J0YGAKK2BgJ0gnYGAgICAgIGBgdW5zaWduZWRfc2hvcnQoYml0d2lzZT1UcnVlKWBgCitgYCdpJ2BgICAgICBgYGludGBgCitgYCdJJ2BgICAgICBgYHVuc2lnbmVkX2ludChiaXR3aXNlPVRydWUpYGAKK2BgJ2snYGAgICAgIGBgdW5zaWduZWRfbG9uZyhiaXR3aXNlPVRydWUpYGAKK2BgJ0snYGAgICAgIGBgdW5zaWduZWRfUFlfTE9OR19MT05HKGJpdHdpc2U9VHJ1ZSlgYAorYGAnTCdgYCAgICAgYGBQWV9MT05HX0xPTkdgYAorYGAnbidgYCAgICAgYGBQeV9zc2l6ZV90YGAKK2BgJ08hJ2BgICAgIGBgb2JqZWN0KHN1YmNsYXNzX29mPScmUHlTb21ldGhpbmdfVHlwZScpYGAKK2BgJ08mJ2BgICAgIGBgb2JqZWN0KGNvbnZlcnRlcj0nbmFtZV9vZl9jX2Z1bmN0aW9uJylgYAorYGAnTydgYCAgICAgYGBvYmplY3RgYAorYGAncCdgYCAgICAgYGBib29sYGAKK2BgJ3MjJ2BgICAgIGBgc3RyKGxlbmd0aD1UcnVlKWBgCitgYCdTJ2BgICAgICBgYFB5Qnl0ZXNPYmplY3RgYAorYGAncydgYCAgICAgYGBzdHJgYAorYGAncyonYGAgICAgYGBQeV9idWZmZXIodHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJylgYAorYGAndSMnYGAgICAgYGBQeV9VTklDT0RFKGxlbmd0aD1UcnVlKWBgCitgYCd1J2BgICAgICBgYFB5X1VOSUNPREVgYAorYGAnVSdgYCAgICAgYGB1bmljb2RlYGAKK2BgJ3cqJ2BgICAgIGBgUHlfYnVmZmVyKHR5cGVzPSdieXRlYXJyYXkgcndidWZmZXInKWBgCitgYCd5IydgYCAgICBgYHN0cih0eXBlcz0nYnl0ZXMnLCBsZW5ndGg9VHJ1ZSlgYAorYGAnWSdgYCAgICAgYGBQeUJ5dGVBcnJheU9iamVjdGBgCitgYCd5J2BgICAgICBgYHN0cih0eXBlcz0nYnl0ZXMnKWBgCitgYCd5KidgYCAgICBgYFB5X2J1ZmZlcmBgCitgYCdaIydgYCAgICBgYFB5X1VOSUNPREUobnVsbGFibGU9VHJ1ZSwgbGVuZ3RoPVRydWUpYGAKK2BgJ3ojJ2BgICAgIGBgc3RyKG51bGxhYmxlPVRydWUsIGxlbmd0aD1UcnVlKWBgCitgYCdaJ2BgICAgICBgYFB5X1VOSUNPREUobnVsbGFibGU9VHJ1ZSlgYAorYGAneidgYCAgICAgYGBzdHIobnVsbGFibGU9VHJ1ZSlgYAorYGAneionYGAgICAgYGBQeV9idWZmZXIodHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJywgbnVsbGFibGU9VHJ1ZSlgYAorPT09PT09PT09ICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FzIGFuIGV4YW1wbGUsIGhlcmUncyBvdXIgc2FtcGxlIGBgcGlja2xlLlBpY2tsZXIuZHVtcGBgIHVzaW5nIHRoZSBwcm9wZXIKK2NvbnZlcnRlcjo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisgICAgcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICAgIG9iajogb2JqZWN0CisgICAgICAgICAgICBUaGUgb2JqZWN0IHRvIGJlIHBpY2tsZWQuCisgICAgICAgIC8KKworICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK0FyZ3VtZW50IENsaW5pYyB3aWxsIHNob3cgeW91IGFsbCB0aGUgY29udmVydGVycyBpdCBoYXMKK2F2YWlsYWJsZS4gIEZvciBlYWNoIGNvbnZlcnRlciBpdCdsbCBzaG93IHlvdSBhbGwgdGhlIHBhcmFtZXRlcnMKK2l0IGFjY2VwdHMsIGFsb25nIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcGFyYW1ldGVyLgorSnVzdCBydW4gYGBUb29scy9jbGluaWMvY2xpbmljLnB5IC0tY29udmVydGVyc2BgIHRvIHNlZSB0aGUgZnVsbCBsaXN0LgorCitQeV9idWZmZXIKKy0tLS0tLS0tLQorCitXaGVuIHVzaW5nIHRoZSBgYFB5X2J1ZmZlcmBgIGNvbnZlcnRlcgorKG9yIHRoZSBgYCdzKidgYCwgYGAndyonYGAsIGBgJyp5J2BgLCBvciBgYCd6KidgYCBsZWdhY3kgY29udmVydGVycyksCit5b3UgKm11c3QqIG5vdCBjYWxsIDpjOmZ1bmM6YFB5QnVmZmVyX1JlbGVhc2VgIG9uIHRoZSBwcm92aWRlZCBidWZmZXIuCitBcmd1bWVudCBDbGluaWMgZ2VuZXJhdGVzIGNvZGUgdGhhdCBkb2VzIGl0IGZvciB5b3UgKGluIHRoZSBwYXJzaW5nIGZ1bmN0aW9uKS4KKworCisKK0FkdmFuY2VkIGNvbnZlcnRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVtZWJlciB0aG9zZSBmb3JtYXQgdW5pdHMgeW91IHNraXBwZWQgZm9yIHlvdXIgZmlyc3QKK3RpbWUgYmVjYXVzZSB0aGV5IHdlcmUgYWR2YW5jZWQ/ICBIZXJlJ3MgaG93IHRvIGhhbmRsZSB0aG9zZSB0b28uCisKK1RoZSB0cmljayBpcywgYWxsIHRob3NlIGZvcm1hdCB1bml0cyB0YWtlIGFyZ3VtZW50cy0tZWl0aGVyCitjb252ZXJzaW9uIGZ1bmN0aW9ucywgb3IgdHlwZXMsIG9yIHN0cmluZ3Mgc3BlY2lmeWluZyBhbiBlbmNvZGluZy4KKyhCdXQgImxlZ2FjeSBjb252ZXJ0ZXJzIiBkb24ndCBzdXBwb3J0IGFyZ3VtZW50cy4gIFRoYXQncyB3aHkgd2UKK3NraXBwZWQgdGhlbSBmb3IgeW91ciBmaXJzdCBmdW5jdGlvbi4pICBUaGUgYXJndW1lbnQgeW91IHNwZWNpZmllZAordG8gdGhlIGZvcm1hdCB1bml0IGlzIG5vdyBhbiBhcmd1bWVudCB0byB0aGUgY29udmVydGVyOyB0aGlzCithcmd1bWVudCBpcyBlaXRoZXIgYGBjb252ZXJ0ZXJgYCAoZm9yIGBgTyZgYCksIGBgc3ViY2xhc3Nfb2ZgYCAoZm9yIGBgTyFgYCksCitvciBgYGVuY29kaW5nYGAgKGZvciBhbGwgdGhlIGZvcm1hdCB1bml0cyB0aGF0IHN0YXJ0IHdpdGggYGBlYGApLgorCitXaGVuIHVzaW5nIGBgc3ViY2xhc3Nfb2ZgYCwgeW91IG1heSBhbHNvIHdhbnQgdG8gdXNlIHRoZSBvdGhlcgorY3VzdG9tIGFyZ3VtZW50IGZvciBgYG9iamVjdCgpYGA6IGBgdHlwZWBgLCB3aGljaCBsZXRzIHlvdSBzZXQgdGhlIHR5cGUKK2FjdHVhbGx5IHVzZWQgZm9yIHRoZSBwYXJhbWV0ZXIuICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZW5zdXJlCit0aGF0IHRoZSBvYmplY3QgaXMgYSBzdWJjbGFzcyBvZiBgYFB5VW5pY29kZV9UeXBlYGAsIHlvdSBwcm9iYWJseSB3YW50Cit0byB1c2UgdGhlIGNvbnZlcnRlciBgYG9iamVjdCh0eXBlPSdQeVVuaWNvZGVPYmplY3QgKicsIHN1YmNsYXNzX29mPScmUHlVbmljb2RlX1R5cGUnKWBgLgorCitPbmUgcG9zc2libGUgcHJvYmxlbSB3aXRoIHVzaW5nIEFyZ3VtZW50IENsaW5pYzogaXQgdGFrZXMgYXdheSBzb21lIHBvc3NpYmxlCitmbGV4aWJpbGl0eSBmb3IgdGhlIGZvcm1hdCB1bml0cyBzdGFydGluZyB3aXRoIGBgZWBgLiAgV2hlbiB3cml0aW5nIGEKK2BgUHlBcmdfUGFyc2VgYCBjYWxsIGJ5IGhhbmQsIHlvdSBjb3VsZCB0aGVvcmV0aWNhbGx5IGRlY2lkZSBhdCBydW50aW1lIHdoYXQKK2VuY29kaW5nIHN0cmluZyB0byBwYXNzIGluIHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLiAgIEJ1dCBub3cgdGhpcyBzdHJpbmcgbXVzdAorYmUgaGFyZC1jb2RlZCBhdCBBcmd1bWVudC1DbGluaWMtcHJlcHJvY2Vzc2luZy10aW1lLiAgVGhpcyBsaW1pdGF0aW9uIGlzIGRlbGliZXJhdGU7CitpdCBtYWRlIHN1cHBvcnRpbmcgdGhpcyBmb3JtYXQgdW5pdCBtdWNoIGVhc2llciwgYW5kIG1heSBhbGxvdyBmb3IgZnV0dXJlIG9wdGltaXphdGlvbnMuCitUaGlzIHJlc3RyaWN0aW9uIGRvZXNuJ3Qgc2VlbSB1bnJlYXNvbmFibGU7IENQeXRob24gaXRzZWxmIGFsd2F5cyBwYXNzZXMgaW4gc3RhdGljCitoYXJkLWNvZGVkIGVuY29kaW5nIHN0cmluZ3MgZm9yIHBhcmFtZXRlcnMgd2hvc2UgZm9ybWF0IHVuaXRzIHN0YXJ0IHdpdGggYGBlYGAuCisKKworLi4gX2RlZmF1bHRfdmFsdWVzOgorCitQYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZWZhdWx0IHZhbHVlcyBmb3IgcGFyYW1ldGVycyBjYW4gYmUgYW55IG9mIGEgbnVtYmVyIG9mIHZhbHVlcy4KK0F0IHRoZWlyIHNpbXBsZXN0LCB0aGV5IGNhbiBiZSBzdHJpbmcsIGludCwgb3IgZmxvYXQgbGl0ZXJhbHM6OgorCisgICAgZm9vOiBzdHIgPSAiYWJjIgorICAgIGJhcjogaW50ID0gMTIzCisgICAgYmF0OiBmbG9hdCA9IDQ1LjYKKworVGhleSBjYW4gYWxzbyB1c2UgYW55IG9mIFB5dGhvbidzIGJ1aWx0LWluIGNvbnN0YW50czo6CisKKyAgICB5ZXA6ICBib29sID0gVHJ1ZQorICAgIG5vcGU6IGJvb2wgPSBGYWxzZQorICAgIG5hZGE6IG9iamVjdCA9IE5vbmUKKworVGhlcmUncyBhbHNvIHNwZWNpYWwgc3VwcG9ydCBmb3IgYSBkZWZhdWx0IHZhbHVlIG9mIGBgTlVMTGBgLCBhbmQKK2ZvciBzaW1wbGUgZXhwcmVzc2lvbnMsIGRvY3VtZW50ZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKworCitUaGUgYGBOVUxMYGAgZGVmYXVsdCB2YWx1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIHN0cmluZyBhbmQgb2JqZWN0IHBhcmFtZXRlcnMsIHlvdSBjYW4gc2V0IHRoZW0gdG8gYGBOb25lYGAgdG8gaW5kaWNhdGUKK3RoYXQgdGhlcmUncyBubyBkZWZhdWx0LiAgSG93ZXZlciwgdGhhdCBtZWFucyB0aGUgQyB2YXJpYWJsZSB3aWxsIGJlCitpbml0aWFsaXplZCB0byBgYFB5X05vbmVgYC4gIEZvciBjb252ZW5pZW5jZSdzIHNha2VzLCB0aGVyZSdzIGEgc3BlY2lhbAordmFsdWUgY2FsbGVkIGBgTlVMTGBgIGZvciBqdXN0IHRoaXMgcmVhc29uOiBmcm9tIFB5dGhvbidzIHBlcnNwZWN0aXZlIGl0CitiZWhhdmVzIGxpa2UgYSBkZWZhdWx0IHZhbHVlIG9mIGBgTm9uZWBgLCBidXQgdGhlIEMgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQKK3dpdGggYGBOVUxMYGAuCisKK0V4cHJlc3Npb25zIHNwZWNpZmllZCBhcyBkZWZhdWx0IHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciBhIHBhcmFtZXRlciBjYW4gYmUgbW9yZSB0aGFuIGp1c3QgYSBsaXRlcmFsIHZhbHVlLgorSXQgY2FuIGJlIGFuIGVudGlyZSBleHByZXNzaW9uLCB1c2luZyBtYXRoIG9wZXJhdG9ycyBhbmQgbG9va2luZyB1cCBhdHRyaWJ1dGVzCitvbiBvYmplY3RzLiAgSG93ZXZlciwgdGhpcyBzdXBwb3J0IGlzbid0IGV4YWN0bHkgc2ltcGxlLCBiZWNhdXNlIG9mIHNvbWUKK25vbi1vYnZpb3VzIHNlbWFudGljcy4KKworQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOjoKKworICAgIGZvbzogUHlfc3NpemVfdCA9IHN5cy5tYXhzaXplIC0gMQorCitgYHN5cy5tYXhzaXplYGAgY2FuIGhhdmUgZGlmZmVyZW50IHZhbHVlcyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiAgVGhlcmVmb3JlCitBcmd1bWVudCBDbGluaWMgY2FuJ3Qgc2ltcGx5IGV2YWx1YXRlIHRoYXQgZXhwcmVzc2lvbiBsb2NhbGx5IGFuZCBoYXJkLWNvZGUgaXQKK2luIEMuICBTbyBpdCBzdG9yZXMgdGhlIGRlZmF1bHQgaW4gc3VjaCBhIHdheSB0aGF0IGl0IHdpbGwgZ2V0IGV2YWx1YXRlZCBhdAorcnVudGltZSwgd2hlbiB0aGUgdXNlciBhc2tzIGZvciB0aGUgZnVuY3Rpb24ncyBzaWduYXR1cmUuCisKK1doYXQgbmFtZXNwYWNlIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZD8gIEl0J3MgZXZhbHVhdGVkCitpbiB0aGUgY29udGV4dCBvZiB0aGUgbW9kdWxlIHRoZSBidWlsdGluIGNhbWUgZnJvbS4gIFNvLCBpZiB5b3VyIG1vZHVsZSBoYXMgYW4KK2F0dHJpYnV0ZSBjYWxsZWQgImBgbWF4X3dpZGdldHNgYCIsIHlvdSBtYXkgc2ltcGx5IHVzZSBpdDo6CisKKyAgICBmb286IFB5X3NzaXplX3QgPSBtYXhfd2lkZ2V0cworCitJZiB0aGUgc3ltYm9sIGlzbid0IGZvdW5kIGluIHRoZSBjdXJyZW50IG1vZHVsZSwgaXQgZmFpbHMgb3ZlciB0byBsb29raW5nIGluCitgYHN5cy5tb2R1bGVzYGAuICBUaGF0J3MgaG93IGl0IGNhbiBmaW5kIGBgc3lzLm1heHNpemVgYCBmb3IgZXhhbXBsZS4gIChTaW5jZSB5b3UKK2Rvbid0IGtub3cgaW4gYWR2YW5jZSB3aGF0IG1vZHVsZXMgdGhlIHVzZXIgd2lsbCBsb2FkIGludG8gdGhlaXIgaW50ZXJwcmV0ZXIsCitpdCdzIGJlc3QgdG8gcmVzdHJpY3QgeW91cnNlbGYgdG8gbW9kdWxlcyB0aGF0IGFyZSBwcmVsb2FkZWQgYnkgUHl0aG9uIGl0c2VsZi4pCisKK0V2YWx1YXRpbmcgZGVmYXVsdCB2YWx1ZXMgb25seSBhdCBydW50aW1lIG1lYW5zIEFyZ3VtZW50IENsaW5pYyBjYW4ndCBjb21wdXRlCit0aGUgY29ycmVjdCBlcXVpdmFsZW50IEMgZGVmYXVsdCB2YWx1ZS4gIFNvIHlvdSBuZWVkIHRvIHRlbGwgaXQgZXhwbGljaXRseS4KK1doZW4geW91IHVzZSBhbiBleHByZXNzaW9uLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIGVxdWl2YWxlbnQgZXhwcmVzc2lvbgoraW4gQywgdXNpbmcgdGhlIGBgY19kZWZhdWx0YGAgcGFyYW1ldGVyIHRvIHRoZSBjb252ZXJ0ZXI6OgorCisgICAgZm9vOiBQeV9zc2l6ZV90KGNfZGVmYXVsdD0iUFlfU1NJWkVfVF9NQVggLSAxIikgPSBzeXMubWF4c2l6ZSAtIDEKKworQW5vdGhlciBjb21wbGljYXRpb246IEFyZ3VtZW50IENsaW5pYyBjYW4ndCBrbm93IGluIGFkdmFuY2Ugd2hldGhlciBvciBub3QgdGhlCitleHByZXNzaW9uIHlvdSBzdXBwbHkgaXMgdmFsaWQuICBJdCBwYXJzZXMgaXQgdG8gbWFrZSBzdXJlIGl0IGxvb2tzIGxlZ2FsLCBidXQKK2l0IGNhbid0ICphY3R1YWxseSoga25vdy4gIFlvdSBtdXN0IGJlIHZlcnkgY2FyZWZ1bCB3aGVuIHVzaW5nIGV4cHJlc3Npb25zIHRvCitzcGVjaWZ5IHZhbHVlcyB0aGF0IGFyZSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIGF0IHJ1bnRpbWUhCisKK0ZpbmFsbHksIGJlY2F1c2UgZXhwcmVzc2lvbnMgbXVzdCBiZSByZXByZXNlbnRhYmxlIGFzIHN0YXRpYyBDIHZhbHVlcywgdGhlcmUKK2FyZSBtYW55IHJlc3RyaWN0aW9ucyBvbiBsZWdhbCBleHByZXNzaW9ucy4gIEhlcmUncyBhIGxpc3Qgb2YgUHl0aG9uIGZlYXR1cmVzCit5b3UncmUgbm90IHBlcm1pdHRlZCB0byB1c2U6CisKKyogRnVuY3Rpb24gY2FsbHMuCisqIElubGluZSBpZiBzdGF0ZW1lbnRzIChgYDMgaWYgZm9vIGVsc2UgNWBgKS4KKyogQXV0b21hdGljIHNlcXVlbmNlIHVucGFja2luZyAoYGAqWzEsIDIsIDNdYGApLgorKiBMaXN0L3NldC9kaWN0IGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMuCisqIFR1cGxlL2xpc3Qvc2V0L2RpY3QgbGl0ZXJhbHMuCisKKworCitVc2luZyBhIHJldHVybiBjb252ZXJ0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0IHRoZSBpbXBsIGZ1bmN0aW9uIEFyZ3VtZW50IENsaW5pYyBnZW5lcmF0ZXMgZm9yIHlvdSByZXR1cm5zIGBgUHlPYmplY3QgKmBgLgorQnV0IHlvdXIgQyBmdW5jdGlvbiBvZnRlbiBjb21wdXRlcyBzb21lIEMgdHlwZSwgdGhlbiBjb252ZXJ0cyBpdCBpbnRvIHRoZSBgYFB5T2JqZWN0ICpgYAorYXQgdGhlIGxhc3QgbW9tZW50LiAgQXJndW1lbnQgQ2xpbmljIGhhbmRsZXMgY29udmVydGluZyB5b3VyIGlucHV0cyBmcm9tIFB5dGhvbiB0eXBlcworaW50byBuYXRpdmUgQyB0eXBlcy0td2h5IG5vdCBoYXZlIGl0IGNvbnZlcnQgeW91ciByZXR1cm4gdmFsdWUgZnJvbSBhIG5hdGl2ZSBDIHR5cGUKK2ludG8gYSBQeXRob24gdHlwZSB0b28/CisKK1RoYXQncyB3aGF0IGEgInJldHVybiBjb252ZXJ0ZXIiIGRvZXMuICBJdCBjaGFuZ2VzIHlvdXIgaW1wbCBmdW5jdGlvbiB0byByZXR1cm4KK3NvbWUgQyB0eXBlLCB0aGVuIGFkZHMgY29kZSB0byB0aGUgZ2VuZXJhdGVkIChub24taW1wbCkgZnVuY3Rpb24gdG8gaGFuZGxlIGNvbnZlcnRpbmcKK3RoYXQgdmFsdWUgaW50byB0aGUgYXBwcm9wcmlhdGUgYGBQeU9iamVjdCAqYGAuCisKK1RoZSBzeW50YXggZm9yIHJldHVybiBjb252ZXJ0ZXJzIGlzIHNpbWlsYXIgdG8gdGhhdCBvZiBwYXJhbWV0ZXIgY29udmVydGVycy4KK1lvdSBzcGVjaWZ5IHRoZSByZXR1cm4gY29udmVydGVyIGxpa2UgaXQgd2FzIGEgcmV0dXJuIGFubm90YXRpb24gb24gdGhlCitmdW5jdGlvbiBpdHNlbGYuICBSZXR1cm4gY29udmVydGVycyBiZWhhdmUgbXVjaCB0aGUgc2FtZSBhcyBwYXJhbWV0ZXIgY29udmVydGVyczsKK3RoZXkgdGFrZSBhcmd1bWVudHMsIHRoZSBhcmd1bWVudHMgYXJlIGFsbCBrZXl3b3JkLW9ubHksIGFuZCBpZiB5b3UncmUgbm90IGNoYW5naW5nCithbnkgb2YgdGhlIGRlZmF1bHQgYXJndW1lbnRzIHlvdSBjYW4gb21pdCB0aGUgcGFyZW50aGVzZXMuCisKKyhJZiB5b3UgdXNlIGJvdGggYGAiYXMiYGAgKmFuZCogYSByZXR1cm4gY29udmVydGVyIGZvciB5b3VyIGZ1bmN0aW9uLAordGhlIGBgImFzImBgIHNob3VsZCBjb21lIGJlZm9yZSB0aGUgcmV0dXJuIGNvbnZlcnRlci4pCisKK1RoZXJlJ3Mgb25lIGFkZGl0aW9uYWwgY29tcGxpY2F0aW9uIHdoZW4gdXNpbmcgcmV0dXJuIGNvbnZlcnRlcnM6IGhvdyBkbyB5b3UKK2luZGljYXRlIGFuIGVycm9yIGhhcyBvY2N1cmVkPyAgTm9ybWFsbHksIGEgZnVuY3Rpb24gcmV0dXJucyBhIHZhbGlkIChub24tYGBOVUxMYGApCitwb2ludGVyIGZvciBzdWNjZXNzLCBhbmQgYGBOVUxMYGAgZm9yIGZhaWx1cmUuICBCdXQgaWYgeW91IHVzZSBhbiBpbnRlZ2VyIHJldHVybiBjb252ZXJ0ZXIsCithbGwgaW50ZWdlcnMgYXJlIHZhbGlkLiAgSG93IGNhbiBBcmd1bWVudCBDbGluaWMgZGV0ZWN0IGFuIGVycm9yPyAgSXRzIHNvbHV0aW9uOiBlYWNoIHJldHVybgorY29udmVydGVyIGltcGxpY2l0bHkgbG9va3MgZm9yIGEgc3BlY2lhbCB2YWx1ZSB0aGF0IGluZGljYXRlcyBhbiBlcnJvci4gIElmIHlvdSByZXR1cm4KK3RoYXQgdmFsdWUsIGFuZCBhbiBlcnJvciBoYXMgYmVlbiBzZXQgKGBgUHlFcnJfT2NjdXJyZWQoKWBgIHJldHVybnMgYSB0cnVlCit2YWx1ZSksIHRoZW4gdGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgcHJvcG9nYXRlIHRoZSBlcnJvci4gIE90aGVyd2lzZSBpdCB3aWxsCitlbmNvZGUgdGhlIHZhbHVlIHlvdSByZXR1cm4gbGlrZSBub3JtYWwuCisKK0N1cnJlbnRseSBBcmd1bWVudCBDbGluaWMgc3VwcG9ydHMgb25seSBhIGZldyByZXR1cm4gY29udmVydGVyczo6CisKKyAgICBib29sCisgICAgaW50CisgICAgdW5zaWduZWQgaW50CisgICAgbG9uZworICAgIHVuc2lnbmVkIGludAorICAgIHNpemVfdAorICAgIFB5X3NzaXplX3QKKyAgICBmbG9hdAorICAgIGRvdWJsZQorICAgIERlY29kZUZTRGVmYXVsdAorCitOb25lIG9mIHRoZXNlIHRha2UgcGFyYW1ldGVycy4gIEZvciB0aGUgZmlyc3QgdGhyZWUsIHJldHVybiAtMSB0byBpbmRpY2F0ZQorZXJyb3IuICBGb3IgYGBEZWNvZGVGU0RlZmF1bHRgYCwgdGhlIHJldHVybiB0eXBlIGlzIGBgY2hhciAqYGA7IHJldHVybiBhIE5VTEwKK3BvaW50ZXIgdG8gaW5kaWNhdGUgYW4gZXJyb3IuCisKKyhUaGVyZSdzIGFsc28gYW4gZXhwZXJpbWVudGFsIGBgTm9uZVR5cGVgYCBjb252ZXJ0ZXIsIHdoaWNoIGxldHMgeW91CityZXR1cm4gYGBQeV9Ob25lYGAgb24gc3VjY2VzcyBvciBgYE5VTExgYCBvbiBmYWlsdXJlLCB3aXRob3V0IGhhdmluZwordG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24gYGBQeV9Ob25lYGAuICBJJ20gbm90IHN1cmUgaXQgYWRkcworZW5vdWdoIGNsYXJpdHkgdG8gYmUgd29ydGggdXNpbmcuKQorCitUbyBzZWUgYWxsIHRoZSByZXR1cm4gY29udmVydGVycyBBcmd1bWVudCBDbGluaWMgc3VwcG9ydHMsIGFsb25nIHdpdGgKK3RoZWlyIHBhcmFtZXRlcnMgKGlmIGFueSksCitqdXN0IHJ1biBgYFRvb2xzL2NsaW5pYy9jbGluaWMucHkgLS1jb252ZXJ0ZXJzYGAgZm9yIHRoZSBmdWxsIGxpc3QuCisKKworQ2xvbmluZyBleGlzdGluZyBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBoYXZlIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0aGF0IGxvb2sgc2ltaWxhciwgeW91IG1heSBiZSBhYmxlIHRvCit1c2UgQ2xpbmljJ3MgImNsb25lIiBmZWF0dXJlLiAgV2hlbiB5b3UgY2xvbmUgYW4gZXhpc3RpbmcgZnVuY3Rpb24sCit5b3UgcmV1c2U6CisKKyogaXRzIHBhcmFtZXRlcnMsIGluY2x1ZGluZworCisgICogdGhlaXIgbmFtZXMsCisKKyAgKiB0aGVpciBjb252ZXJ0ZXJzLCB3aXRoIGFsbCBwYXJhbWV0ZXJzLAorCisgICogdGhlaXIgZGVmYXVsdCB2YWx1ZXMsCisKKyAgKiB0aGVpciBwZXItcGFyYW1ldGVyIGRvY3N0cmluZ3MsCisKKyAgKiB0aGVpciAqa2luZCogKHdoZXRoZXIgdGhleSdyZSBwb3NpdGlvbmFsIG9ubHksCisgICAgcG9zaXRpb25hbCBvciBrZXl3b3JkLCBvciBrZXl3b3JkIG9ubHkpLCBhbmQKKworKiBpdHMgcmV0dXJuIGNvbnZlcnRlci4KKworVGhlIG9ubHkgdGhpbmcgbm90IGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBpcyBpdHMgZG9jc3RyaW5nOwordGhlIHN5bnRheCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBuZXcgZG9jc3RyaW5nLgorCitIZXJlJ3MgdGhlIHN5bnRheCBmb3IgY2xvbmluZyBhIGZ1bmN0aW9uOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBtb2R1bGUuY2xhc3MubmV3X2Z1bmN0aW9uIFthcyBjX2Jhc2VuYW1lXSA9IG1vZHVsZS5jbGFzcy5leGlzdGluZ19mdW5jdGlvbgorCisgICAgRG9jc3RyaW5nIGZvciBuZXdfZnVuY3Rpb24gZ29lcyBoZXJlLgorICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworKFRoZSBmdW5jdGlvbnMgY2FuIGJlIGluIGRpZmZlcmVudCBtb2R1bGVzIG9yIGNsYXNzZXMuICBJIHdyb3RlCitgYG1vZHVsZS5jbGFzc2BgIGluIHRoZSBzYW1wbGUganVzdCB0byBpbGx1c3RyYXRlIHRoYXQgeW91IG11c3QKK3VzZSB0aGUgZnVsbCBwYXRoIHRvICpib3RoKiBmdW5jdGlvbnMuKQorCitTb3JyeSwgdGhlcmUncyBubyBzeW50YXggZm9yIHBhcnRpYWxseS1jbG9uaW5nIGEgZnVuY3Rpb24sIG9yIGNsb25pbmcgYSBmdW5jdGlvbgordGhlbiBtb2RpZnlpbmcgaXQuICBDbG9uaW5nIGlzIGFuIGFsbC1vciBub3RoaW5nIHByb3Bvc2l0aW9uLgorCitBbHNvLCB0aGUgZnVuY3Rpb24geW91IGFyZSBjbG9uaW5nIGZyb20gbXVzdCBoYXZlIGJlZW4gcHJldmlvdXNseSBkZWZpbmVkCitpbiB0aGUgY3VycmVudCBmaWxlLgorCitDYWxsaW5nIFB5dGhvbiBjb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZXN0IG9mIHRoZSBhZHZhbmNlZCB0b3BpY3MgcmVxdWlyZSB5b3UgdG8gd3JpdGUgUHl0aG9uIGNvZGUKK3doaWNoIGxpdmVzIGluc2lkZSB5b3VyIEMgZmlsZSBhbmQgbW9kaWZpZXMgQXJndW1lbnQgQ2xpbmljJ3MKK3J1bnRpbWUgc3RhdGUuICBUaGlzIGlzIHNpbXBsZTogeW91IHNpbXBseSBkZWZpbmUgYSBQeXRob24gYmxvY2suCisKK0EgUHl0aG9uIGJsb2NrIHVzZXMgZGlmZmVyZW50IGRlbGltaXRlciBsaW5lcyB0aGFuIGFuIEFyZ3VtZW50CitDbGluaWMgZnVuY3Rpb24gYmxvY2suICBJdCBsb29rcyBsaWtlIHRoaXM6OgorCisgICAgLypbcHl0aG9uIGlucHV0XQorICAgICMgcHl0aG9uIGNvZGUgZ29lcyBoZXJlCisgICAgW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitBbGwgdGhlIGNvZGUgaW5zaWRlIHRoZSBQeXRob24gYmxvY2sgaXMgZXhlY3V0ZWQgYXQgdGhlCit0aW1lIGl0J3MgcGFyc2VkLiAgQWxsIHRleHQgd3JpdHRlbiB0byBzdGRvdXQgaW5zaWRlIHRoZSBibG9jaworaXMgcmVkaXJlY3RlZCBpbnRvIHRoZSAib3V0cHV0IiBhZnRlciB0aGUgYmxvY2suCisKK0FzIGFuIGV4YW1wbGUsIGhlcmUncyBhIFB5dGhvbiBibG9jayB0aGF0IGFkZHMgYSBzdGF0aWMgaW50ZWdlcgordmFyaWFibGUgdG8gdGhlIEMgY29kZTo6CisKKyAgICAvKltweXRob24gaW5wdXRdCisgICAgcHJpbnQoJ3N0YXRpYyBpbnQgX19pZ25vcmVkX3VudXNlZF92YXJpYWJsZV9fID0gMDsnKQorICAgIFtweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKyAgICBzdGF0aWMgaW50IF9faWdub3JlZF91bnVzZWRfdmFyaWFibGVfXyA9IDA7CisgICAgLypbcHl0aG9uIGNoZWNrc3VtOi4uLl0qLworCisKK1VzaW5nIGEgInNlbGYgY29udmVydGVyIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FyZ3VtZW50IENsaW5pYyBhdXRvbWF0aWNhbGx5IGFkZHMgYSAic2VsZiIgcGFyYW1ldGVyIGZvciB5b3UKK3VzaW5nIGEgZGVmYXVsdCBjb252ZXJ0ZXIuICBJdCBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIGBgdHlwZWBgCitvZiB0aGlzIHBhcmFtZXRlciB0byB0aGUgInBvaW50ZXIgdG8gYW4gaW5zdGFuY2UiIHlvdSBzcGVjaWZpZWQKK3doZW4geW91IGRlY2xhcmVkIHRoZSB0eXBlLiAgSG93ZXZlciwgeW91IGNhbiBvdmVycmlkZQorQXJndW1lbnQgQ2xpbmljJ3MgY29udmVydGVyIGFuZCBzcGVjaWZ5IG9uZSB5b3Vyc2VsZi4KK0p1c3QgYWRkIHlvdXIgb3duIGBgc2VsZmBgIHBhcmFtZXRlciBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIGluIGEKK2Jsb2NrLCBhbmQgZW5zdXJlIHRoYXQgaXRzIGNvbnZlcnRlciBpcyBhbiBpbnN0YW5jZSBvZgorYGBzZWxmX2NvbnZlcnRlcmBgIG9yIGEgc3ViY2xhc3MgdGhlcmVvZi4KKworV2hhdCdzIHRoZSBwb2ludD8gIFRoaXMgbGV0cyB5b3Ugb3ZlcnJpZGUgdGhlIHR5cGUgb2YgYGBzZWxmYGAsCitvciBnaXZlIGl0IGEgZGlmZmVyZW50IGRlZmF1bHQgbmFtZS4KKworSG93IGRvIHlvdSBzcGVjaWZ5IHRoZSBjdXN0b20gdHlwZSB5b3Ugd2FudCB0byBjYXN0IGBgc2VsZmBgIHRvPworSWYgeW91IG9ubHkgaGF2ZSBvbmUgb3IgdHdvIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIHR5cGUgZm9yIGBgc2VsZmBgLAoreW91IGNhbiBkaXJlY3RseSB1c2UgQXJndW1lbnQgQ2xpbmljJ3MgZXhpc3RpbmcgYGBzZWxmYGAgY29udmVydGVyLAorcGFzc2luZyBpbiB0aGUgdHlwZSB5b3Ugd2FudCB0byB1c2UgYXMgdGhlIGBgdHlwZWBgIHBhcmFtZXRlcjo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisKKyAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICBzZWxmOiBzZWxmKHR5cGU9IlBpY2tsZXJPYmplY3QgKiIpCisgICAgICBvYmo6IG9iamVjdAorICAgICAgLworCisgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gdGhlIG9wZW4gZmlsZS4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK09uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3UgaGF2ZSBhIGxvdCBvZiBmdW5jdGlvbnMgdGhhdCB3aWxsIHVzZSB0aGUgc2FtZQordHlwZSBmb3IgYGBzZWxmYGAsIGl0J3MgYmVzdCB0byBjcmVhdGUgeW91ciBvd24gY29udmVydGVyLCBzdWJjbGFzc2luZworYGBzZWxmX2NvbnZlcnRlcmBgIGJ1dCBvdmVyd3JpdGluZyB0aGUgYGB0eXBlYGAgbWVtYmVyOjoKKworICAgIC8qW3B5dGhvbiBpbnB1dF0KKyAgICBjbGFzcyBQaWNrbGVyT2JqZWN0X2NvbnZlcnRlcihzZWxmX2NvbnZlcnRlcik6CisgICAgICAgIHR5cGUgPSAiUGlja2xlck9iamVjdCAqIgorICAgIFtweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKworICAgIF9waWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgIHNlbGY6IFBpY2tsZXJPYmplY3QKKyAgICAgIG9iajogb2JqZWN0CisgICAgICAvCisKKyAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIG9iamVjdCB0byB0aGUgb3BlbiBmaWxlLgorICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworCisKK1dyaXRpbmcgYSBjdXN0b20gY29udmVydGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB3ZSBoaW50ZWQgYXQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uLi4geW91IGNhbiB3cml0ZSB5b3VyIG93biBjb252ZXJ0ZXJzIQorQSBjb252ZXJ0ZXIgaXMgc2ltcGx5IGEgUHl0aG9uIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBgYENDb252ZXJ0ZXJgYC4KK1RoZSBtYWluIHB1cnBvc2Ugb2YgYSBjdXN0b20gY29udmVydGVyIGlzIGlmIHlvdSBoYXZlIGEgcGFyYW1ldGVyIHVzaW5nCit0aGUgYGBPJmBgIGZvcm1hdCB1bml0LS1wYXJzaW5nIHRoaXMgcGFyYW1ldGVyIG1lYW5zIGNhbGxpbmcKK2EgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgImNvbnZlcnRlciBmdW5jdGlvbiIuCisKK1lvdXIgY29udmVydGVyIGNsYXNzIHNob3VsZCBiZSBuYW1lZCBgYCpzb21ldGhpbmcqX2NvbnZlcnRlcmBgLgorSWYgdGhlIG5hbWUgZm9sbG93cyB0aGlzIGNvbnZlbnRpb24sIHRoZW4geW91ciBjb252ZXJ0ZXIgY2xhc3MKK3dpbGwgYmUgYXV0b21hdGljYWxseSByZWdpc3RlcmVkIHdpdGggQXJndW1lbnQgQ2xpbmljOyBpdHMgbmFtZQord2lsbCBiZSB0aGUgbmFtZSBvZiB5b3VyIGNsYXNzIHdpdGggdGhlIGBgX2NvbnZlcnRlcmBgIHN1ZmZpeAorc3RyaXBwZWQgb2ZmLiAgKFRoaXMgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBtZXRhY2xhc3MuKQorCitZb3Ugc2hvdWxkbid0IHN1YmNsYXNzIGBgQ0NvbnZlcnRlci5fX2luaXRfX2BgLiAgSW5zdGVhZCwgeW91IHNob3VsZAord3JpdGUgYSBgYGNvbnZlcnRlcl9pbml0KClgYCBmdW5jdGlvbi4gIGBgY29udmVydGVyX2luaXQoKWBgCithbHdheXMgYWNjZXB0cyBhIGBgc2VsZmBgIHBhcmFtZXRlcjsgYWZ0ZXIgdGhhdCwgYWxsIGFkZGl0aW9uYWwKK3BhcmFtZXRlcnMgKm11c3QqIGJlIGtleXdvcmQtb25seS4gIEFueSBhcmd1bWVudHMgcGFzc2VkIGluIHRvCit0aGUgY29udmVydGVyIGluIEFyZ3VtZW50IENsaW5pYyB3aWxsIGJlIHBhc3NlZCBhbG9uZyB0byB5b3VyCitgYGNvbnZlcnRlcl9pbml0KClgYC4KKworVGhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCBtZW1iZXJzIG9mIGBgQ0NvbnZlcnRlcmBgIHlvdSBtYXkgd2lzaAordG8gc3BlY2lmeSBpbiB5b3VyIHN1YmNsYXNzLiAgSGVyZSdzIHRoZSBjdXJyZW50IGxpc3Q6CisKK2BgdHlwZWBgCisgICAgVGhlIEMgdHlwZSB0byB1c2UgZm9yIHRoaXMgdmFyaWFibGUuCisgICAgYGB0eXBlYGAgc2hvdWxkIGJlIGEgUHl0aG9uIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSB0eXBlLCBlLmcuIGBgaW50YGAuCisgICAgSWYgdGhpcyBpcyBhIHBvaW50ZXIgdHlwZSwgdGhlIHR5cGUgc3RyaW5nIHNob3VsZCBlbmQgd2l0aCBgYCcgKidgYC4KKworYGBkZWZhdWx0YGAKKyAgICBUaGUgUHl0aG9uIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyLCBhcyBhIFB5dGhvbiB2YWx1ZS4KKyAgICBPciB0aGUgbWFnaWMgdmFsdWUgYGB1bnNwZWNpZmllZGBgIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisKK2BgcHlfZGVmYXVsdGBgCisgICAgYGBkZWZhdWx0YGAgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBQeXRob24gY29kZSwKKyAgICBhcyBhIHN0cmluZy4KKyAgICBPciBgYE5vbmVgYCBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgorCitgYGNfZGVmYXVsdGBgCisgICAgYGBkZWZhdWx0YGAgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBDIGNvZGUsCisgICAgYXMgYSBzdHJpbmcuCisgICAgT3IgYGBOb25lYGAgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKworYGBjX2lnbm9yZWRfZGVmYXVsdGBgCisgICAgVGhlIGRlZmF1bHQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBDIHZhcmlhYmxlIHdoZW4KKyAgICB0aGVyZSBpcyBubyBkZWZhdWx0LCBidXQgbm90IHNwZWNpZnlpbmcgYSBkZWZhdWx0IG1heQorICAgIHJlc3VsdCBpbiBhbiAidW5pbml0aWFsaXplZCB2YXJpYWJsZSIgd2FybmluZy4gIFRoaXMgY2FuCisgICAgZWFzaWx5IGhhcHBlbiB3aGVuIHVzaW5nIG9wdGlvbiBncm91cHMtLWFsdGhvdWdoCisgICAgcHJvcGVybHktd3JpdHRlbiBjb2RlIHdpbGwgbmV2ZXIgYWN0dWFsbHkgdXNlIHRoaXMgdmFsdWUsCisgICAgdGhlIHZhcmlhYmxlIGRvZXMgZ2V0IHBhc3NlZCBpbiB0byB0aGUgaW1wbCwgYW5kIHRoZQorICAgIEMgY29tcGlsZXIgd2lsbCBjb21wbGFpbiBhYm91dCB0aGUgInVzZSIgb2YgdGhlCisgICAgdW5pbml0aWFsaXplZCB2YWx1ZS4gIFRoaXMgdmFsdWUgc2hvdWxkIGFsd2F5cyBiZSBhCisgICAgbm9uLWVtcHR5IHN0cmluZy4KKworYGBjb252ZXJ0ZXJgYAorICAgIFRoZSBuYW1lIG9mIHRoZSBDIGNvbnZlcnRlciBmdW5jdGlvbiwgYXMgYSBzdHJpbmcuCisKK2BgaW1wbF9ieV9yZWZlcmVuY2VgYAorICAgIEEgYm9vbGVhbiB2YWx1ZS4gIElmIHRydWUsCisgICAgQXJndW1lbnQgQ2xpbmljIHdpbGwgYWRkIGEgYGAmYGAgaW4gZnJvbnQgb2YgdGhlIG5hbWUgb2YKKyAgICB0aGUgdmFyaWFibGUgd2hlbiBwYXNzaW5nIGl0IGludG8gdGhlIGltcGwgZnVuY3Rpb24uCisKK2BgcGFyc2VfYnlfcmVmZXJlbmNlYGAKKyAgICBBIGJvb2xlYW4gdmFsdWUuICBJZiB0cnVlLAorICAgIEFyZ3VtZW50IENsaW5pYyB3aWxsIGFkZCBhIGBgJmBgIGluIGZyb250IG9mIHRoZSBuYW1lIG9mCisgICAgdGhlIHZhcmlhYmxlIHdoZW4gcGFzc2luZyBpdCBpbnRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLgorCisKK0hlcmUncyB0aGUgc2ltcGxlc3QgZXhhbXBsZSBvZiBhIGN1c3RvbSBjb252ZXJ0ZXIsIGZyb20gYGBNb2R1bGVzL3psaWJtb2R1bGUuY2BgOjoKKworICAgIC8qW3B5dGhvbiBpbnB1dF0KKworICAgIGNsYXNzIHVpbnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgICAgICB0eXBlID0gJ3Vuc2lnbmVkIGludCcKKyAgICAgICAgY29udmVydGVyID0gJ3VpbnRfY29udmVydGVyJworCisgICAgW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworICAgIC8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPWRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKworVGhpcyBibG9jayBhZGRzIGEgY29udmVydGVyIHRvIEFyZ3VtZW50IENsaW5pYyBuYW1lZCBgYHVpbnRgYC4gIFBhcmFtZXRlcnMKK2RlY2xhcmVkIGFzIGBgdWludGBgIHdpbGwgYmUgZGVjbGFyZWQgYXMgdHlwZSBgYHVuc2lnbmVkIGludGBgLCBhbmQgd2lsbAorYmUgcGFyc2VkIGJ5IHRoZSBgYCdPJidgYCBmb3JtYXQgdW5pdCwgd2hpY2ggd2lsbCBjYWxsIHRoZSBgYHVpbnRfY29udmVydGVyYGAKK2NvbnZlcnRlciBmdW5jdGlvbi4KK2BgdWludGBgIHZhcmlhYmxlcyBhdXRvbWF0aWNhbGx5IHN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMuCisKK01vcmUgc29waGlzdGljYXRlZCBjdXN0b20gY29udmVydGVycyBjYW4gaW5zZXJ0IGN1c3RvbSBDIGNvZGUgdG8KK2hhbmRsZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cC4KK1lvdSBjYW4gc2VlIG1vcmUgZXhhbXBsZXMgb2YgY3VzdG9tIGNvbnZlcnRlcnMgaW4gdGhlIENQeXRob24KK3NvdXJjZSB0cmVlOyBncmVwIHRoZSBDIGZpbGVzIGZvciB0aGUgc3RyaW5nIGBgQ0NvbnZlcnRlcmBgLgorCitXcml0aW5nIGEgY3VzdG9tIHJldHVybiBjb252ZXJ0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXcml0aW5nIGEgY3VzdG9tIHJldHVybiBjb252ZXJ0ZXIgaXMgbXVjaCBsaWtlIHdyaXRpbmcKK2EgY3VzdG9tIGNvbnZlcnRlci4gIEV4Y2VwdCBpdCdzIHNvbWV3aGF0IHNpbXBsZXIsIGJlY2F1c2UgcmV0dXJuCitjb252ZXJ0ZXJzIGFyZSB0aGVtc2VsdmVzIG11Y2ggc2ltcGxlci4KKworUmV0dXJuIGNvbnZlcnRlcnMgbXVzdCBzdWJjbGFzcyBgYENSZXR1cm5Db252ZXJ0ZXJgYC4KK1RoZXJlIGFyZSBubyBleGFtcGxlcyB5ZXQgb2YgY3VzdG9tIHJldHVybiBjb252ZXJ0ZXJzLAorYmVjYXVzZSB0aGV5IGFyZSBub3Qgd2lkZWx5IHVzZWQgeWV0LiAgSWYgeW91IHdpc2ggdG8KK3dyaXRlIHlvdXIgb3duIHJldHVybiBjb252ZXJ0ZXIsIHBsZWFzZSByZWFkIGBgVG9vbHMvY2xpbmljL2NsaW5pYy5weWBgLAorc3BlY2lmaWNhbGx5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYENSZXR1cm5Db252ZXJ0ZXJgYCBhbmQKK2FsbCBpdHMgc3ViY2xhc3Nlcy4KKworTUVUSF9PIGFuZCBNRVRIX05PQVJHUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBjb252ZXJ0IGEgZnVuY3Rpb24gdXNpbmcgYGBNRVRIX09gYCwgbWFrZSBzdXJlIHRoZSBmdW5jdGlvbidzCitzaW5nbGUgYXJndW1lbnQgaXMgdXNpbmcgdGhlIGBgb2JqZWN0YGAgY29udmVydGVyLCBhbmQgbWFyayB0aGUKK2FyZ3VtZW50cyBhcyBwb3NpdGlvbmFsLW9ubHk6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIG1ldGhfb19zYW1wbGUKKworICAgICAgICAgYXJndW1lbnQ6IG9iamVjdAorICAgICAgICAgLworICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworCitUbyBjb252ZXJ0IGEgZnVuY3Rpb24gdXNpbmcgYGBNRVRIX05PQVJHU2BgLCBqdXN0IGRvbid0IHNwZWNpZnkKK2FueSBhcmd1bWVudHMuCisKK1lvdSBjYW4gc3RpbGwgdXNlIGEgc2VsZiBjb252ZXJ0ZXIsIGEgcmV0dXJuIGNvbnZlcnRlciwgYW5kIHNwZWNpZnkKK2EgYGB0eXBlYGAgYXJndW1lbnQgdG8gdGhlIG9iamVjdCBjb252ZXJ0ZXIgZm9yIGBgTUVUSF9PYGAuCisKK3RwX25ldyBhbmQgdHBfaW5pdCBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBjb252ZXJ0IGBgdHBfbmV3YGAgYW5kIGBgdHBfaW5pdGBgIGZ1bmN0aW9ucy4gIEp1c3QgbmFtZQordGhlbSBgYF9fbmV3X19gYCBvciBgYF9faW5pdF9fYGAgYXMgYXBwcm9wcmlhdGUuICBOb3RlczoKKworKiBUaGUgZnVuY3Rpb24gbmFtZSBnZW5lcmF0ZWQgZm9yIGBgX19uZXdfX2BgIGRvZXNuJ3QgZW5kIGluIGBgX19uZXdfX2BgCisgIGxpa2UgaXQgd291bGQgYnkgZGVmYXVsdC4gIEl0J3MganVzdCB0aGUgbmFtZSBvZiB0aGUgY2xhc3MsIGNvbnZlcnRlZAorICBpbnRvIGEgdmFsaWQgQyBpZGVudGlmaWVyLgorCisqIE5vIGBgUHlNZXRob2REZWZgYCBgYCNkZWZpbmVgYCBpcyBnZW5lcmF0ZWQgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KKworKiBgYF9faW5pdF9fYGAgZnVuY3Rpb25zIHJldHVybiBgYGludGBgLCBub3QgYGBQeU9iamVjdCAqYGAuCisKKyogVXNlIHRoZSBkb2NzdHJpbmcgYXMgdGhlIGNsYXNzIGRvY3N0cmluZy4KKworKiBBbHRob3VnaCBgYF9fbmV3X19gYCBhbmQgYGBfX2luaXRfX2BgIGZ1bmN0aW9ucyBtdXN0IGFsd2F5cworICBhY2NlcHQgYm90aCB0aGUgYGBhcmdzYGAgYW5kIGBga3dhcmdzYGAgb2JqZWN0cywgd2hlbiBjb252ZXJ0aW5nCisgIHlvdSBtYXkgc3BlY2lmeSBhbnkgc2lnbmF0dXJlIGZvciB0aGVzZSBmdW5jdGlvbnMgdGhhdCB5b3UgbGlrZS4KKyAgKElmIHlvdXIgZnVuY3Rpb24gZG9lc24ndCBzdXBwb3J0IGtleXdvcmRzLCB0aGUgcGFyc2luZyBmdW5jdGlvbgorICBnZW5lcmF0ZWQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgaXQgcmVjZWl2ZXMgYW55LikKKworQ2hhbmdpbmcgYW5kIHJlZGlyZWN0aW5nIENsaW5pYydzIG91dHB1dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBjYW4gYmUgaW5jb252ZW5pZW50IHRvIGhhdmUgQ2xpbmljJ3Mgb3V0cHV0IGludGVyc3BlcnNlZCB3aXRoCit5b3VyIGNvbnZlbnRpb25hbCBoYW5kLWVkaXRlZCBDIGNvZGUuICBMdWNraWx5LCBDbGluaWMgaXMgY29uZmlndXJhYmxlOgoreW91IGNhbiBidWZmZXIgdXAgaXRzIG91dHB1dCBmb3IgcHJpbnRpbmcgbGF0ZXIgKG9yIGVhcmxpZXIhKSwgb3Igd3JpdGUKK2l0cyBvdXRwdXQgdG8gYSBzZXBhcmF0ZSBmaWxlLiAgWW91IGNhbiBhbHNvIGFkZCBhIHByZWZpeCBvciBzdWZmaXggdG8KK2V2ZXJ5IGxpbmUgb2YgQ2xpbmljJ3MgZ2VuZXJhdGVkIG91dHB1dC4KKworV2hpbGUgY2hhbmdpbmcgQ2xpbmljJ3Mgb3V0cHV0IGluIHRoaXMgbWFubmVyIGNhbiBiZSBhIGJvb24gdG8gcmVhZGFiaWxpdHksCitpdCBtYXkgcmVzdWx0IGluIENsaW5pYyBjb2RlIHVzaW5nIHR5cGVzIGJlZm9yZSB0aGV5IGFyZSBkZWZpbmVkLCBvcgoreW91ciBjb2RlIGF0dGVtcHRpbmcgdG8gdXNlIENsaW5pYy1nZW5lcmF0ZWQgY29kZSBiZWZpcmUgaXQgaXMgZGVmaW5lZC4KK1RoZXNlIHByb2JsZW1zIGNhbiBiZSBlYXNpbHkgc29sdmVkIGJ5IHJlYXJyYW5naW5nIHRoZSBkZWNsYXJhdGlvbnMgaW4geW91ciBmaWxlLAorb3IgbW92aW5nIHdoZXJlIENsaW5pYydzIGdlbmVyYXRlZCBjb2RlIGdvZXMuICAoVGhpcyBpcyB3aHkgdGhlIGRlZmF1bHQgYmVoYXZpb3IKK29mIENsaW5pYyBpcyB0byBvdXRwdXQgZXZlcnl0aGluZyBpbnRvIHRoZSBjdXJyZW50IGJsb2NrOyB3aGlsZSBtYW55IHBlb3BsZQorY29uc2lkZXIgdGhpcyBoYW1wZXJzIHJlYWRhYmlsaXR5LCBpdCB3aWxsIG5ldmVyIHJlcXVpcmUgcmVhcnJhbmdpbmcgeW91cgorY29kZSB0byBmaXggZGVmaW5pdGlvbi1iZWZvcmUtdXNlIHByb2JsZW1zLikKKworTGV0J3Mgc3RhcnQgd2l0aCBkZWZpbmluZyBzb21lIHRlcm1pbm9sb2d5OgorCisqZmllbGQqCisgIEEgZmllbGQsIGluIHRoaXMgY29udGV4dCwgaXMgYSBzdWJzZWN0aW9uIG9mIENsaW5pYydzIG91dHB1dC4KKyAgRm9yIGV4YW1wbGUsIHRoZSBgYCNkZWZpbmVgYCBmb3IgdGhlIGBgUHlNZXRob2REZWZgYCBzdHJ1Y3R1cmUKKyAgaXMgYSBmaWVsZCwgY2FsbGVkIGBgbWV0aG9kZGVmX2RlZmluZWBgLiAgQ2xpbmljIGhhcyBzZXZlbgorICBkaWZmZXJlbnQgZmllbGRzIGl0IGNhbiBvdXRwdXQgcGVyIGZ1bmN0aW9uIGRlZmluaXRpb246OgorCisgICAgICBkb2NzdHJpbmdfcHJvdG90eXBlCisgICAgICBkb2NzdHJpbmdfZGVmaW5pdGlvbgorICAgICAgbWV0aG9kZGVmX2RlZmluZQorICAgICAgaW1wbF9wcm90b3R5cGUKKyAgICAgIHBhcnNlcl9wcm90b3R5cGUKKyAgICAgIHBhcnNlcl9kZWZpbml0aW9uCisgICAgICBpbXBsX2RlZmluaXRpb24KKworICBBbGwgdGhlIG5hbWVzIGFyZSBvZiB0aGUgZm9ybSBgYCI8YT5fPGI+ImBgLAorICB3aGVyZSBgYCI8YT4iYGAgaXMgdGhlIHNlbWFudGljIG9iamVjdCByZXByZXNlbnRlZCAodGhlIHBhcnNpbmcgZnVuY3Rpb24sCisgIHRoZSBpbXBsIGZ1bmN0aW9uLCB0aGUgZG9jc3RyaW5nLCBvciB0aGUgbWV0aG9kZGVmIHN0cnVjdHVyZSkgYW5kIGBgIjxiPiJgYAorICByZXByZXNlbnRzIHdoYXQga2luZCBvZiBzdGF0ZW1lbnQgdGhlIGZpZWxkIGlzLiAgRmllbGQgbmFtZXMgdGhhdCBlbmQgaW4KKyAgYGAiX3Byb3RvdHlwZSJgYAorICByZXByZXNlbnQgZm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgdGhhdCB0aGluZywgd2l0aG91dCB0aGUgYWN0dWFsIGJvZHkvZGF0YQorICBvZiB0aGUgdGhpbmc7IGZpZWxkIG5hbWVzIHRoYXQgZW5kIGluIGBgIl9kZWZpbml0aW9uImBgIHJlcHJlc2VudCB0aGUgYWN0dWFsCisgIGRlZmluaXRpb24gb2YgdGhlIHRoaW5nLCB3aXRoIHRoZSBib2R5L2RhdGEgb2YgdGhlIHRoaW5nLiAgKGBgIm1ldGhvZGRlZiJgYAorICBpcyBzcGVjaWFsLCBpdCdzIHRoZSBvbmx5IG9uZSB0aGF0IGVuZHMgd2l0aCBgYCJfZGVmaW5lImBgLCByZXByZXNlbnRpbmcgdGhhdAorICBpdCdzIGEgcHJlcHJvY2Vzc29yICNkZWZpbmUuKQorCisqZGVzdGluYXRpb24qCisgIEEgZGVzdGluYXRpb24gaXMgYSBwbGFjZSBDbGluaWMgY2FuIHdyaXRlIG91dHB1dCB0by4gIFRoZXJlIGFyZQorICBmaXZlIGJ1aWx0LWluIGRlc3RpbmF0aW9uczoKKworICBgYGJsb2NrYGAKKyAgICBUaGUgZGVmYXVsdCBkZXN0aW5hdGlvbjogcHJpbnRlZCBpbiB0aGUgb3V0cHV0IHNlY3Rpb24gb2YKKyAgICB0aGUgY3VycmVudCBDbGluaWMgYmxvY2suCisKKyAgYGBidWZmZXJgYAorICAgIEEgdGV4dCBidWZmZXIgd2hlcmUgeW91IGNhbiBzYXZlIHRleHQgZm9yIGxhdGVyLiAgVGV4dCBzZW50CisgICAgaGVyZSBpcyBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIGFueSBleHNpdGluZyB0ZXh0LiAgSXQncyBhbgorICAgIGVycm9yIHRvIGhhdmUgYW55IHRleHQgbGVmdCBpbiB0aGUgYnVmZmVyIHdoZW4gQ2xpbmljIGZpbmlzaGVzCisgICAgcHJvY2Vzc2luZyBhIGZpbGUuCisKKyAgYGBmaWxlYGAKKyAgICBBIHNlcGFyYXRlICJjbGluaWMgZmlsZSIgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBDbGluaWMuCisgICAgVGhlIGZpbGVuYW1lIGNob3NlbiBmb3IgdGhlIGZpbGUgaXMgYGB7YmFzZW5hbWV9LmNsaW5pY3tleHRlbnNpb259YGAsCisgICAgd2hlcmUgYGBiYXNlbmFtZWBgIGFuZCBgYGV4dGVuc2lvbmBgIHdlcmUgYXNzaWduZWQgdGhlIG91dHB1dAorICAgIGZyb20gYGBvcy5wYXRoLnNwbGl0ZXh0KClgYCBydW4gb24gdGhlIGN1cnJlbnQgZmlsZS4gIChFeGFtcGxlOgorICAgIHRoZSBgYGZpbGVgYCBkZXN0aW5hdGlvbiBmb3IgYGBfcGlja2xlLmNgYCB3b3VsZCBiZSB3cml0dGVuIHRvCisgICAgYGBfcGlja2xlLmNsaW5pYy5jYGAuKQorCisgICAgKipJbXBvcnRhbnQ6IFdoZW4gdXNpbmcgYSoqIGBgZmlsZWBgICoqZGVzdGluYXRpb24sIHlvdSoqCisgICAgKm11c3QgY2hlY2sgaW4qICoqdGhlIGdlbmVyYXRlZCBmaWxlISoqCisKKyAgYGB0d28tcGFzc2BgCisgICAgQSBidWZmZXIgbGlrZSBgYGJ1ZmZlcmBgLiAgSG93ZXZlciwgYSB0d28tcGFzcyBidWZmZXIgY2FuIG9ubHkKKyAgICBiZSB3cml0dGVuIG9uY2UsIGFuZCBpdCBwcmludHMgb3V0IGFsbCB0ZXh0IHNlbnQgdG8gaXQgZHVyaW5nCisgICAgYWxsIG9mIHByb2Nlc3NpbmcsIGV2ZW4gZnJvbSBDbGluaWMgYmxvY2tzICphZnRlciogdGhlCisKKyAgYGBzdXBwcmVzc2BgCisgICAgVGhlIHRleHQgaXMgc3VwcHJlc3NlZC0tdGhyb3duIGF3YXkuCisKKworQ2xpbmljIGRlZmluZXMgZml2ZSBuZXcgZGlyZWN0aXZlcyB0aGF0IGxldCB5b3UgcmVjb25maWd1cmUgaXRzIG91dHB1dC4KKworVGhlIGZpcnN0IG5ldyBkaXJlY3RpdmUgaXMgYGBkdW1wYGA6OgorCisgICBkdW1wIDxkZXN0aW5hdGlvbj4KKworVGhpcyBkdW1wcyB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgbmFtZWQgZGVzdGluYXRpb24gaW50byB0aGUgb3V0cHV0IG9mCit0aGUgY3VycmVudCBibG9jaywgYW5kIGVtcHRpZXMgaXQuICBUaGlzIG9ubHkgd29ya3Mgd2l0aCBgYGJ1ZmZlcmBgIGFuZAorYGB0d28tcGFzc2BgIGRlc3RpbmF0aW9ucy4KKworVGhlIHNlY29uZCBuZXcgZGlyZWN0aXZlIGlzIGBgb3V0cHV0YGAuICBUaGUgbW9zdCBiYXNpYyBmb3JtIG9mIGBgb3V0cHV0YGAKK2lzIGxpa2UgdGhpczo6CisKKyAgICBvdXRwdXQgPGZpZWxkPiA8ZGVzdGluYXRpb24+CisKK1RoaXMgdGVsbHMgQ2xpbmljIHRvIG91dHB1dCAqZmllbGQqIHRvICpkZXN0aW5hdGlvbiouICBgYG91dHB1dGBgIGFsc28KK3N1cHBvcnRzIGEgc3BlY2lhbCBtZXRhLWRlc3RpbmF0aW9uLCBjYWxsZWQgYGBldmVyeXRoaW5nYGAsIHdoaWNoIHRlbGxzCitDbGluaWMgdG8gb3V0cHV0ICphbGwqIGZpZWxkcyB0byB0aGF0ICpkZXN0aW5hdGlvbiouCisKK2Bgb3V0cHV0YGAgaGFzIGEgbnVtYmVyIG9mIG90aGVyIGZ1bmN0aW9uczo6CisKKyAgICBvdXRwdXQgcHVzaAorICAgIG91dHB1dCBwb3AKKyAgICBvdXRwdXQgcHJlc2V0IDxwcmVzZXQ+CisKKworYGBvdXRwdXQgcHVzaGBgIGFuZCBgYG91dHB1dCBwb3BgYCBhbGxvdyB5b3UgdG8gcHVzaCBhbmQgcG9wCitjb25maWd1cmF0aW9ucyBvbiBhbiBpbnRlcm5hbCBjb25maWd1cmF0aW9uIHN0YWNrLCBzbyB0aGF0IHlvdQorY2FuIHRlbXBvcmFyaWx5IG1vZGlmeSB0aGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24sIHRoZW4gZWFzaWx5IHJlc3RvcmUKK3RoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uLiAgU2ltcGx5IHB1c2ggYmVmb3JlIHlvdXIgY2hhbmdlIHRvIHNhdmUKK3RoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHRoZW4gcG9wIHdoZW4geW91IHdpc2ggdG8gcmVzdG9yZSB0aGUKK3ByZXZpb3VzIGNvbmZpZ3VyYXRpb24uCisKK2Bgb3V0cHV0IHByZXNldGBgIHNldHMgQ2xpbmljJ3Mgb3V0cHV0IHRvIG9uZSBvZiBzZXZlcmFsIGJ1aWx0LWluCitwcmVzZXQgY29uZmlndXJhdGlvbnMsIGFzIGZvbGxvd3M6CisKKyAgYGBibG9ja2BgCisgICAgQ2xpbmljJ3Mgb3JpZ2luYWwgc3RhcnRpbmcgY29uZmlndXJhdGlvbi4gIFdyaXRlcyBldmVyeXRoaW5nCisgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGlucHV0IGJsb2NrLgorCisgICAgU3VwcHJlc3MgdGhlIGBgcGFyc2VyX3Byb3RvdHlwZWBgCisgICAgYW5kIGBgZG9jc3RyaW5nX3Byb3RvdHlwZWBgLCB3cml0ZSBldmVyeXRoaW5nIGVsc2UgdG8gYGBibG9ja2BgLgorCisgIGBgZmlsZWBgCisgICAgRGVzaWduZWQgdG8gd3JpdGUgZXZlcnl0aGluZyB0byB0aGUgImNsaW5pYyBmaWxlIiB0aGF0IGl0IGNhbi4KKyAgICBZb3UgdGhlbiBgYCNpbmNsdWRlYGAgdGhpcyBmaWxlIG5lYXIgdGhlIHRvcCBvZiB5b3VyIGZpbGUuCisgICAgWW91IG1heSBuZWVkIHRvIHJlYXJyYW5nZSB5b3VyIGZpbGUgdG8gbWFrZSB0aGlzIHdvcmssIHRob3VnaAorICAgIHVzdWFsbHkgdGhpcyBqdXN0IG1lYW5zIGNyZWF0aW5nIGZvcndhcmQgZGVjbGFyYXRpb25zIGZvciB2YXJpb3VzCisgICAgYGB0eXBlZGVmYGAgYW5kIGBgUHlUeXBlT2JqZWN0YGAgZGVmaW5pdGlvbnMuCisKKyAgICBTdXBwcmVzcyB0aGUgYGBwYXJzZXJfcHJvdG90eXBlYGAKKyAgICBhbmQgYGBkb2NzdHJpbmdfcHJvdG90eXBlYGAsIHdyaXRlIHRoZSBgYGltcGxfZGVmaW5pdGlvbmBgIHRvCisgICAgYGBibG9ja2BgLCBhbmQgd3JpdGUgZXZlcnl0aGluZyBlbHNlIHRvIGBgZmlsZWBgLgorCisgICAgVGhlIGRlZmF1bHQgZmlsZW5hbWUgaXMgYGAie2Rpcm5hbWV9L2NsaW5pYy97YmFzZW5hbWV9LmgiYGAuCisKKyAgYGBidWZmZXJgYAorICAgIFNhdmUgdXAgYWxsIG1vc3Qgb2YgdGhlIG91dHB1dCBmcm9tIENsaW5pYywgdG8gYmUgd3JpdHRlbiBpbnRvCisgICAgeW91ciBmaWxlIG5lYXIgdGhlIGVuZC4gIEZvciBQeXRob24gZmlsZXMgaW1wbGVtZW50aW5nIG1vZHVsZXMKKyAgICBvciBidWlsdGluIHR5cGVzLCBpdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGR1bXAgdGhlIGJ1ZmZlcgorICAgIGp1c3QgYWJvdmUgdGhlIHN0YXRpYyBzdHJ1Y3R1cmVzIGZvciB5b3VyIG1vZHVsZSBvcgorICAgIGJ1aWx0aW4gdHlwZTsgdGhlc2UgYXJlIG5vcm1hbGx5IHZlcnkgbmVhciB0aGUgZW5kLiAgVXNpbmcKKyAgICBgYGJ1ZmZlcmBgIG1heSByZXF1aXJlIGV2ZW4gbW9yZSBlZGl0aW5nIHRoYW4gYGBmaWxlYGAsIGlmCisgICAgeW91ciBmaWxlIGhhcyBzdGF0aWMgYGBQeU1ldGhvZERlZmBgIGFycmF5cyBkZWZpbmVkIGluIHRoZQorICAgIG1pZGRsZSBvZiB0aGUgZmlsZS4KKworICAgIFN1cHByZXNzIHRoZSBgYHBhcnNlcl9wcm90b3R5cGVgYCwgYGBpbXBsX3Byb3RvdHlwZWBgLAorICAgIGFuZCBgYGRvY3N0cmluZ19wcm90b3R5cGVgYCwgd3JpdGUgdGhlIGBgaW1wbF9kZWZpbml0aW9uYGAgdG8KKyAgICBgYGJsb2NrYGAsIGFuZCB3cml0ZSBldmVyeXRoaW5nIGVsc2UgdG8gYGBmaWxlYGAuCisKKyAgYGB0d28tcGFzc2BgCisgICAgU2ltaWxhciB0byB0aGUgYGBidWZmZXJgYCBwcmVzZXQsIGJ1dCB3cml0ZXMgZm9yd2FyZCBkZWNsYXJhdGlvbnMgdG8KKyAgICB0aGUgYGB0d28tcGFzc2BgIGJ1ZmZlciwgYW5kIGRlZmluaXRpb25zIHRvIHRoZSBgYGJ1ZmZlcmBgLgorICAgIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgYGBidWZmZXJgYCBwcmVzZXQsIGJ1dCBtYXkgcmVxdWlyZQorICAgIGxlc3MgZWRpdGluZyB0aGFuIGBgYnVmZmVyYGAuICBEdW1wIHRoZSBgYHR3by1wYXNzYGAgYnVmZmVyCisgICAgbmVhciB0aGUgdG9wIG9mIHlvdXIgZmlsZSwgYW5kIGR1bXAgdGhlIGBgYnVmZmVyYGAgbmVhcgorICAgIHRoZSBlbmQganVzdCBsaWtlIHlvdSB3b3VsZCB3aGVuIHVzaW5nIHRoZSBgYGJ1ZmZlcmBgIHByZXNldC4KKworICAgIFN1cHByZXNzZXMgdGhlIGBgaW1wbF9wcm90b3R5cGVgYCwgd3JpdGUgdGhlIGBgaW1wbF9kZWZpbml0aW9uYGAKKyAgICB0byBgYGJsb2NrYGAsIHdyaXRlIGBgZG9jc3RyaW5nX3Byb3RvdHlwZWBgLCBgYG1ldGhvZGRlZl9kZWZpbmVgYCwKKyAgICBhbmQgYGBwYXJzZXJfcHJvdG90eXBlYGAgdG8gYGB0d28tcGFzc2BgLCB3cml0ZSBldmVyeXRoaW5nIGVsc2UKKyAgICB0byBgYGJ1ZmZlcmBgLgorCisgIGBgcGFydGlhbC1idWZmZXJgYAorICAgIFNpbWlsYXIgdG8gdGhlIGBgYnVmZmVyYGAgcHJlc2V0LCBidXQgd3JpdGVzIG1vcmUgdGhpbmdzIHRvIGBgYmxvY2tgYCwKKyAgICBvbmx5IHdyaXRpbmcgdGhlIHJlYWxseSBiaWcgY2h1bmtzIG9mIGdlbmVyYXRlZCBjb2RlIHRvIGBgYnVmZmVyYGAuCisgICAgVGhpcyBhdm9pZHMgdGhlIGRlZmluaXRpb24tYmVmb3JlLXVzZSBwcm9ibGVtIG9mIGBgYnVmZmVyYGAgY29tcGxldGVseSwKKyAgICBhdCB0aGUgc21hbGwgY29zdCBvZiBoYXZpbmcgc2xpZ2h0bHkgbW9yZSBzdHVmZiBpbiB0aGUgYmxvY2sncyBvdXRwdXQuCisgICAgRHVtcCB0aGUgYGBidWZmZXJgYCBuZWFyIHRoZSBlbmQsIGp1c3QgbGlrZSB5b3Ugd291bGQgd2hlbiB1c2luZworICAgIHRoZSBgYGJ1ZmZlcmBgIHByZXNldC4KKworICAgIFN1cHByZXNzZXMgdGhlIGBgaW1wbF9wcm90b3R5cGVgYCwgd3JpdGUgdGhlIGBgZG9jc3RyaW5nX2RlZmluaXRpb25gYAorICAgIGFuZCBgYHBhcnNlcl9kZWZpbnRpb25gYCB0byBgYGJ1ZmZlcmBgLCB3cml0ZSBldmVyeXRoaW5nIGVsc2UgdG8gYGBibG9ja2BgLgorCitUaGUgdGhpcmQgbmV3IGRpcmVjdGl2ZSBpcyBgYGRlc3RpbmF0aW9uYGA6OgorCisgICAgZGVzdGluYXRpb24gPG5hbWU+IDxjb21tYW5kPiBbLi4uXQorCitUaGlzIHBlcmZvcm1zIGFuIG9wZXJhdGlvbiBvbiB0aGUgZGVzdGluYXRpb24gbmFtZWQgYGBuYW1lYGAuCisKK1RoZXJlIGFyZSB0d28gZGVmaW5lZCBzdWJjb21tYW5kczogYGBuZXdgYCBhbmQgYGBjbGVhcmBgLgorCitUaGUgYGBuZXdgYCBzdWJjb21tYW5kIHdvcmtzIGxpa2UgdGhpczo6CisKKyAgICBkZXN0aW5hdGlvbiA8bmFtZT4gbmV3IDx0eXBlPgorCitUaGlzIGNyZWF0ZXMgYSBuZXcgZGVzdGluYXRpb24gd2l0aCBuYW1lIGBgPG5hbWU+YGAgYW5kIHR5cGUgYGA8dHlwZT5gYC4KKworVGhlcmUgYXJlIGZpdmUgZGVzdGluYXRpb24gdHlwZXM6CisKKyAgICBgYHN1cHByZXNzYGAKKyAgICAgICAgVGhyb3dzIHRoZSB0ZXh0IGF3YXkuCisKKyAgICBgYGJsb2NrYGAKKyAgICAgICAgV3JpdGVzIHRoZSB0ZXh0IHRvIHRoZSBjdXJyZW50IGJsb2NrLiAgVGhpcyBpcyB3aGF0IENsaW5pYworICAgICAgICBvcmlnaW5hbGx5IGRpZC4KKworICAgIGBgYnVmZmVyYGAKKyAgICAgICAgQSBzaW1wbGUgdGV4dCBidWZmZXIsIGxpa2UgdGhlICJidWZmZXIiIGJ1aWx0aW4gZGVzdGluYXRpb24gYWJvdmUuCisKKyAgICBgYGZpbGVgYAorICAgICAgICBBIHRleHQgZmlsZS4gIFRoZSBmaWxlIGRlc3RpbmF0aW9uIHRha2VzIGFuIGV4dHJhIGFyZ3VtZW50LAorICAgICAgICBhIHRlbXBsYXRlIHRvIHVzZSBmb3IgYnVpbGRpbmcgdGhlIGZpbGVuYW1lLCBsaWtlIHNvOgorCisgICAgICAgICAgICBkZXN0aW5hdGlvbiA8bmFtZT4gbmV3IDx0eXBlPiA8ZmlsZV90ZW1wbGF0ZT4KKworICAgICAgICBUaGUgdGVtcGxhdGUgY2FuIHVzZSB0aHJlZSBzdHJpbmdzIGludGVybmFsbHkgdGhhdCB3aWxsIGJlIHJlcGxhY2VkCisgICAgICAgIGJ5IGJpdHMgb2YgdGhlIGZpbGVuYW1lOgorCisgICAgICAgICAgICB7cGF0aH0KKyAgICAgICAgICAgICAgICBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlLCBpbmNsdWRpbmcgZGlyZWN0b3J5IGFuZCBmdWxsIGZpbGVuYW1lLgorICAgICAgICAgICAge2Rpcm5hbWV9CisgICAgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGUgZmlsZSBpcyBpbi4KKyAgICAgICAgICAgIHtiYXNlbmFtZX0KKyAgICAgICAgICAgICAgICBKdXN0IHRoZSBuYW1lIG9mIHRoZSBmaWxlLCBub3QgaW5jbHVkaW5nIHRoZSBkaXJlY3RvcnkuCisgICAgICAgICAgICB7YmFzZW5hbWVfcm9vdH0KKyAgICAgICAgICAgICAgICBCYXNlbmFtZSB3aXRoIHRoZSBleHRlbnNpb24gY2xpcHBlZCBvZmYKKyAgICAgICAgICAgICAgICAoZXZlcnl0aGluZyB1cCB0byBidXQgbm90IGluY2x1ZGluZyB0aGUgbGFzdCAnLicpLgorICAgICAgICAgICAge2Jhc2VuYW1lX2V4dGVuc2lvbn0KKyAgICAgICAgICAgICAgICBUaGUgbGFzdCAnLicgYW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQuICBJZiB0aGUgYmFzZW5hbWUKKyAgICAgICAgICAgICAgICBkb2VzIG5vdCBjb250YWluIGEgcGVyaW9kLCB0aGlzIHdpbGwgYmUgdGhlIGVtcHR5IHN0cmluZy4KKworICAgICAgICBJZiB0aGVyZSBhcmUgbm8gcGVyaW9kcyBpbiB0aGUgZmlsZW5hbWUsIHtiYXNlbmFtZX0gYW5kIHtmaWxlbmFtZX0KKyAgICAgICAgYXJlIHRoZSBzYW1lLCBhbmQge2V4dGVuc2lvbn0gaXMgZW1wdHkuICAie2Jhc2VuYW1lfXtleHRlbnNpb259IgorICAgICAgICBpcyBhbHdheXMgZXhhY3RseSB0aGUgc2FtZSBhcyAie2ZpbGVuYW1lfSIuIgorCisgICAgYGB0d28tcGFzc2BgCisgICAgICAgIEEgdHdvLXBhc3MgYnVmZmVyLCBsaWtlIHRoZSAidHdvLXBhc3MiIGJ1aWx0aW4gZGVzdGluYXRpb24gYWJvdmUuCisKKworVGhlIGBgY2xlYXJgYCBzdWJjb21tYW5kIHdvcmtzIGxpa2UgdGhpczo6CisKKyAgICBkZXN0aW5hdGlvbiA8bmFtZT4gY2xlYXIKKworSXQgcmVtb3ZlcyBhbGwgdGhlIGFjY3VtdWxhdGVkIHRleHQgdXAgdG8gdGhpcyBwb2ludCBpbiB0aGUgZGVzdGluYXRpb24uCisoSSBkb24ndCBrbm93IHdoYXQgeW91J2QgbmVlZCB0aGlzIGZvciwgYnV0IEkgdGhvdWdodCBtYXliZSBpdCdkIGJlCit1c2VmdWwgd2hpbGUgc29tZW9uZSdzIGV4cGVyaW1lbnRpbmcuKQorCitUaGUgZm91cnRoIG5ldyBkaXJlY3RpdmUgaXMgYGBzZXRgYDo6CisKKyAgICBzZXQgbGluZV9wcmVmaXggInN0cmluZyIKKyAgICBzZXQgbGluZV9zdWZmaXggInN0cmluZyIKKworYGBzZXRgYCBsZXRzIHlvdSBzZXQgdHdvIGludGVybmFsIHZhcmlhYmxlcyBpbiBDbGluaWMuCitgYGxpbmVfcHJlZml4YGAgaXMgYSBzdHJpbmcgdGhhdCB3aWxsIGJlIHByZXBlbmRlZCB0byBldmVyeSBsaW5lIG9mIENsaW5pYydzIG91dHB1dDsKK2BgbGluZV9zdWZmaXhgYCBpcyBhIHN0cmluZyB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gZXZlcnkgbGluZSBvZiBDbGluaWMncyBvdXRwdXQuCisKK0JvdGggb2YgdGhlc2Ugc3Vwb3J0IHR3byBmb3JtYXQgc3RyaW5nczoKKworICBgYHtibG9jayBjb21tZW50IHN0YXJ0fWBgCisgICAgVHVybnMgaW50byB0aGUgc3RyaW5nIGBgLypgYCwgdGhlIHN0YXJ0LWNvbW1lbnQgdGV4dCBzZXF1ZW5jZSBmb3IgQyBmaWxlcy4KKworICBgYHtibG9jayBjb21tZW50IGVuZH1gYAorICAgIFR1cm5zIGludG8gdGhlIHN0cmluZyBgYCovYGAsIHRoZSBlbmQtY29tbWVudCB0ZXh0IHNlcXVlbmNlIGZvciBDIGZpbGVzLgorCitUaGUgZmluYWwgbmV3IGRpcmVjdGl2ZSBpcyBvbmUgeW91IHNob3VsZG4ndCBuZWVkIHRvIHVzZSBkaXJlY3RseSwKK2NhbGxlZCBgYHByZXNlcnZlYGA6OgorCisgICAgcHJlc2VydmUKKworVGhpcyB0ZWxscyBDbGluaWMgdGhhdCB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHNob3VsZCBiZSBrZXB0LCB1bm1vZGlmZWQuCitUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBDbGluaWMgd2hlbiBkdW1waW5nIG91dHB1dCBpbnRvIGBgZmlsZWBgIGZpbGVzOyB3cmFwcGluZworaXQgaW4gYSBDbGluaWMgYmxvY2sgbGV0cyBDbGluaWMgdXNlIGl0cyBleGlzdGluZyBjaGVja3N1bSBmdW5jdGlvbmFsaXR5IHRvIGVuc3VyZQordGhlIGZpbGUgd2FzIG5vdCBtb2RpZmllZCBieSBoYW5kIGJlZm9yZSBpdCBnZXRzIG92ZXJ3cml0dGVuLgorCisKK1RoZSAjaWZkZWYgdHJpY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91J3JlIGNvbnZlcnRpbmcgYSBmdW5jdGlvbiB0aGF0IGlzbid0IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLAordGhlcmUncyBhIHRyaWNrIHlvdSBjYW4gdXNlIHRvIG1ha2UgbGlmZSBhIGxpdHRsZSBlYXNpZXIuICBUaGUgZXhpc3RpbmcKK2NvZGUgcHJvYmFibHkgbG9va3MgbGlrZSB0aGlzOjoKKworICAgICNpZmRlZiBIQVZFX0ZVTkNUSU9OTkFNRQorICAgIHN0YXRpYyBtb2R1bGVfZnVuY3Rpb25uYW1lKC4uLikKKyAgICB7CisgICAgLi4uCisgICAgfQorICAgICNlbmRpZiAvKiBIQVZFX0ZVTkNUSU9OTkFNRSAqLworCitBbmQgdGhlbiBpbiB0aGUgYGBQeU1ldGhvZERlZmBgIHN0cnVjdHVyZSBhdCB0aGUgYm90dG9tIHRoZSBleGlzdGluZyBjb2RlCit3aWxsIGhhdmU6OgorCisgICAgI2lmZGVmIEhBVkVfRlVOQ1RJT05OQU1FCisgICAgeydmdW5jdGlvbm5hbWUnLCAuLi4gfSwKKyAgICAjZW5kaWYgLyogSEFWRV9GVU5DVElPTk5BTUUgKi8KKworSW4gdGhpcyBzY2VuYXJpbywgeW91IHNob3VsZCBlbmNsb3NlIHRoZSBib2R5IG9mIHlvdXIgaW1wbCBmdW5jdGlvbiBpbnNpZGUgdGhlIGBgI2lmZGVmYGAsCitsaWtlIHNvOjoKKworICAgICNpZmRlZiBIQVZFX0ZVTkNUSU9OTkFNRQorICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBtb2R1bGUuZnVuY3Rpb25uYW1lCisgICAgLi4uCisgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworICAgIHN0YXRpYyBtb2R1bGVfZnVuY3Rpb25uYW1lKC4uLikKKyAgICB7CisgICAgLi4uCisgICAgfQorICAgICNlbmRpZiAvKiBIQVZFX0ZVTkNUSU9OTkFNRSAqLworCitUaGVuLCByZW1vdmUgdGhvc2UgdGhyZWUgbGluZXMgZnJvbSB0aGUgYGBQeU1ldGhvZERlZmBgIHN0cnVjdHVyZSwKK3JlcGxhY2luZyB0aGVtIHdpdGggdGhlIG1hY3JvIEFyZ3VtZW50IENsaW5pYyBnZW5lcmF0ZWQ6OgorCisgICAgTU9EVUxFX0ZVTkNUSU9OTkFNRV9NRVRIT0RERUYKKworKFlvdSBjYW4gZmluZCB0aGUgcmVhbCBuYW1lIGZvciB0aGlzIG1hY3JvIGluc2lkZSB0aGUgZ2VuZXJhdGVkIGNvZGUuCitPciB5b3UgY2FuIGNhbGN1bGF0ZSBpdCB5b3Vyc2VsZjogaXQncyB0aGUgbmFtZSBvZiB5b3VyIGZ1bmN0aW9uIGFzIGRlZmluZWQKK29uIHRoZSBmaXJzdCBsaW5lIG9mIHlvdXIgYmxvY2ssIGJ1dCB3aXRoIHBlcmlvZHMgY2hhbmdlZCB0byB1bmRlcnNjb3JlcywKK3VwcGVyY2FzZWQsIGFuZCBgYCJfTUVUSE9EREVGImBgIGFkZGVkIHRvIHRoZSBlbmQuKQorCitQZXJoYXBzIHlvdSdyZSB3b25kZXJpbmc6IHdoYXQgaWYgYGBIQVZFX0ZVTkNUSU9OTkFNRWBgIGlzbid0IGRlZmluZWQ/CitUaGUgYGBNT0RVTEVfRlVOQ1RJT05OQU1FX01FVEhPRERFRmBgIG1hY3JvIHdvbid0IGJlIGRlZmluZWQgZWl0aGVyIQorCitIZXJlJ3Mgd2hlcmUgQXJndW1lbnQgQ2xpbmljIGdldHMgdmVyeSBjbGV2ZXIuICBJdCBhY3R1YWxseSBkZXRlY3RzIHRoYXQgdGhlCitBcmd1bWVudCBDbGluaWMgYmxvY2sgbWlnaHQgYmUgZGVhY3RpdmF0ZWQgYnkgdGhlIGBgI2lmZGVmYGAuICBXaGVuIHRoYXQKK2hhcHBlbnMsIGl0IGdlbmVyYXRlcyBhIGxpdHRsZSBleHRyYSBjb2RlIHRoYXQgbG9va3MgbGlrZSB0aGlzOjoKKworICAgICNpZm5kZWYgTU9EVUxFX0ZVTkNUSU9OTkFNRV9NRVRIT0RERUYKKyAgICAgICAgI2RlZmluZSBNT0RVTEVfRlVOQ1RJT05OQU1FX01FVEhPRERFRgorICAgICNlbmRpZiAvKiAhZGVmaW5lZChNT0RVTEVfRlVOQ1RJT05OQU1FX01FVEhPRERFRikgKi8KKworVGhhdCBtZWFucyB0aGUgbWFjcm8gYWx3YXlzIHdvcmtzLiAgSWYgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIHRoaXMgdHVybnMKK2ludG8gdGhlIGNvcnJlY3Qgc3RydWN0dXJlLCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIGNvbW1hLiAgSWYgdGhlIGZ1bmN0aW9uIGlzCit1bmRlZmluZWQsIHRoaXMgdHVybnMgaW50byBub3RoaW5nLgorCitIb3dldmVyLCB0aGlzIGNhdXNlcyBvbmUgdGlja2xpc2ggcHJvYmxlbTogd2hlcmUgc2hvdWxkIEFyZ3VtZW50IENsaW5pYyBwdXQgdGhpcworZXh0cmEgY29kZSB3aGVuIHVzaW5nIHRoZSAiYmxvY2siIG91dHB1dCBwcmVzZXQ/ICBJdCBjYW4ndCBnbyBpbiB0aGUgb3V0cHV0IGJsb2NrLAorYmVjYXVzZSB0aGF0IGNvdWxkIGJlIGRlY2F0aXZhdGVkIGJ5IHRoZSBgYCNpZmRlZmBgLiAgKFRoYXQncyB0aGUgd2hvbGUgcG9pbnQhKQorCitJbiB0aGlzIHNpdHVhdGlvbiwgQXJndW1lbnQgQ2xpbmljIHdyaXRlcyB0aGUgZXh0cmEgY29kZSB0byB0aGUgImJ1ZmZlciIgZGVzdGluYXRpb24uCitUaGlzIG1heSBtZWFuIHRoYXQgeW91IGdldCBhIGNvbXBsYWludCBmcm9tIEFyZ3VtZW50IENsaW5pYzo6CisKKyAgICBXYXJuaW5nIGluIGZpbGUgIk1vZHVsZXMvcG9zaXhtb2R1bGUuYyIgb24gbGluZSAxMjM1NzoKKyAgICBEZXN0aW5hdGlvbiBidWZmZXIgJ2J1ZmZlcicgbm90IGVtcHR5IGF0IGVuZCBvZiBmaWxlLCBlbXB0eWluZy4KKworV2hlbiB0aGlzIGhhcHBlbnMsIGp1c3Qgb3BlbiB5b3VyIGZpbGUsIGZpbmQgdGhlIGBgZHVtcCBidWZmZXJgYCBibG9jayB0aGF0CitBcmd1bWVudCBDbGluaWMgYWRkZWQgdG8geW91ciBmaWxlIChpdCdsbCBiZSBhdCB0aGUgdmVyeSBib3R0b20pLCB0aGVuCittb3ZlIGl0IGFib3ZlIHRoZSBgYFB5TWV0aG9kRGVmYGAgc3RydWN0dXJlIHdoZXJlIHRoYXQgbWFjcm8gaXMgdXNlZC4KKworCisKK1VzaW5nIEFyZ3VtZW50IENsaW5pYyBpbiBQeXRob24gZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQncyBhY3R1YWxseSBwb3NzaWJsZSB0byB1c2UgQXJndW1lbnQgQ2xpbmljIHRvIHByZXByb2Nlc3MgUHl0aG9uIGZpbGVzLgorVGhlcmUncyBubyBwb2ludCB0byB1c2luZyBBcmd1bWVudCBDbGluaWMgYmxvY2tzLCBvZiBjb3Vyc2UsIGFzIHRoZSBvdXRwdXQKK3dvdWxkbid0IG1ha2UgYW55IHNlbnNlIHRvIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBCdXQgdXNpbmcgQXJndW1lbnQgQ2xpbmljCit0byBydW4gUHl0aG9uIGJsb2NrcyBsZXRzIHlvdSB1c2UgUHl0aG9uIGFzIGEgUHl0aG9uIHByZXByb2Nlc3NvciEKKworU2luY2UgUHl0aG9uIGNvbW1lbnRzIGFyZSBkaWZmZXJlbnQgZnJvbSBDIGNvbW1lbnRzLCBBcmd1bWVudCBDbGluaWMKK2Jsb2NrcyBlbWJlZGRlZCBpbiBQeXRob24gZmlsZXMgbG9vayBzbGlnaHRseSBkaWZmZXJlbnQuICBUaGV5IGxvb2sgbGlrZSB0aGlzOjoKKworICAgICMvKltweXRob24gaW5wdXRdCisgICAgI3ByaW50KCJkZWYgZm9vKCk6IHBhc3MiKQorICAgICNbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisgICAgZGVmIGZvbygpOiBwYXNzCisgICAgIy8qW3B5dGhvbiBjaGVja3N1bTouLi5dKi8KZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdCBiL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdAppbmRleCA3MTg5YzY1Li45N2M5MGM3IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QKKysrIGIvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CkBAIC0zLDcgKzMsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogOkF1dGhvcjogQS4gTS4gS3VjaGxpbmcKLTpSZWxlYXNlOiAwLjMxCis6UmVsZWFzZTogMC4zMgogCiBJbiB0aGlzIGRvY3VtZW50LCB3ZSdsbCB0YWtlIGEgdG91ciBvZiBQeXRob24ncyBmZWF0dXJlcyBzdWl0YWJsZSBmb3IKIGltcGxlbWVudGluZyBwcm9ncmFtcyBpbiBhIGZ1bmN0aW9uYWwgc3R5bGUuICBBZnRlciBhbiBpbnRyb2R1Y3Rpb24gdG8gdGhlCkBAIC0xNSw5ICsxNSw5IEBACiBJbnRyb2R1Y3Rpb24KID09PT09PT09PT09PQogCi1UaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlIGJhc2ljIGNvbmNlcHQgb2YgZnVuY3Rpb25hbCBwcm9ncmFtbWluZzsgaWYgeW91J3JlCi1qdXN0IGludGVyZXN0ZWQgaW4gbGVhcm5pbmcgYWJvdXQgUHl0aG9uIGxhbmd1YWdlIGZlYXR1cmVzLCBza2lwIHRvIHRoZSBuZXh0Ci1zZWN0aW9uLgorVGhpcyBzZWN0aW9uIGV4cGxhaW5zIHRoZSBiYXNpYyBjb25jZXB0IG9mIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmc7IGlmCit5b3UncmUganVzdCBpbnRlcmVzdGVkIGluIGxlYXJuaW5nIGFib3V0IFB5dGhvbiBsYW5ndWFnZSBmZWF0dXJlcywKK3NraXAgdG8gdGhlIG5leHQgc2VjdGlvbiBvbiA6cmVmOmBmdW5jdGlvbmFsLWhvd3RvLWl0ZXJhdG9yc2AuCiAKIFByb2dyYW1taW5nIGxhbmd1YWdlcyBzdXBwb3J0IGRlY29tcG9zaW5nIHByb2JsZW1zIGluIHNldmVyYWwgZGlmZmVyZW50IHdheXM6CiAKQEAgLTE3Myw2ICsxNzMsOCBAQAogYSBmZXcgZnVuY3Rpb25zIHNwZWNpYWxpemVkIGZvciB0aGUgY3VycmVudCB0YXNrLgogCiAKKy4uIF9mdW5jdGlvbmFsLWhvd3RvLWl0ZXJhdG9yczoKKwogSXRlcmF0b3JzCiA9PT09PT09PT0KIApAQCAtNjcwLDcgKzY3Miw3IEBACiAKIDpmdW5jOmBzb3J0ZWQoaXRlcmFibGUsIGtleT1Ob25lLCByZXZlcnNlPUZhbHNlKSA8c29ydGVkPmAgY29sbGVjdHMgYWxsIHRoZQogZWxlbWVudHMgb2YgdGhlIGl0ZXJhYmxlIGludG8gYSBsaXN0LCBzb3J0cyB0aGUgbGlzdCwgYW5kIHJldHVybnMgdGhlIHNvcnRlZAotcmVzdWx0LiAgVGhlICprZXkqLCBhbmQgKnJldmVyc2UqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlCityZXN1bHQuICBUaGUgKmtleSogYW5kICpyZXZlcnNlKiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZQogY29uc3RydWN0ZWQgbGlzdCdzIDptZXRoOmB+bGlzdC5zb3J0YCBtZXRob2QuIDo6CiAKICAgICA+Pj4gaW1wb3J0IHJhbmRvbQpAQCAtODM2LDcgKzgzOCw4IEBACiBwcmVkaWNhdGUuCiAKIDpmdW5jOmBpdGVydG9vbHMuZmlsdGVyZmFsc2UocHJlZGljYXRlLCBpdGVyKSA8aXRlcnRvb2xzLmZpbHRlcmZhbHNlPmAgaXMgdGhlCi1vcHBvc2l0ZSwgcmV0dXJuaW5nIGFsbCBlbGVtZW50cyBmb3Igd2hpY2ggdGhlIHByZWRpY2F0ZSByZXR1cm5zIGZhbHNlOjoKK29wcG9zaXRlIG9mIDpmdW5jOmBmaWx0ZXJgLCByZXR1cm5pbmcgYWxsIGVsZW1lbnRzIGZvciB3aGljaCB0aGUgcHJlZGljYXRlCityZXR1cm5zIGZhbHNlOjoKIAogICAgIGl0ZXJ0b29scy5maWx0ZXJmYWxzZShpc19ldmVuLCBpdGVydG9vbHMuY291bnQoKSkgPT4KICAgICAgIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUsIC4uLgpAQCAtODY0LDYgKzg2Nyw3NyBAQAogICAgIGl0ZXJ0b29scy5kcm9wd2hpbGUoaXNfZXZlbiwgaXRlcnRvb2xzLmNvdW50KCkpID0+CiAgICAgICAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgLi4uCiAKKzpmdW5jOmBpdGVydG9vbHMuY29tcHJlc3MoZGF0YSwgc2VsZWN0b3JzKSA8aXRlcnRvb2xzLmNvbXByZXNzPmAgdGFrZXMgdHdvCitpdGVyYXRvcnMgYW5kIHJldHVybnMgb25seSB0aG9zZSBlbGVtZW50cyBvZiAqZGF0YSogZm9yIHdoaWNoIHRoZSBjb3JyZXNwb25kaW5nCitlbGVtZW50IG9mICpzZWxlY3RvcnMqIGlzIHRydWUsIHN0b3BwaW5nIHdoZW5ldmVyIGVpdGhlciBvbmUgaXMgZXhoYXVzdGVkOjoKKworICAgIGl0ZXJ0b29scy5jb21wcmVzcyhbMSwyLDMsNCw1XSwgW1RydWUsIFRydWUsIEZhbHNlLCBGYWxzZSwgVHJ1ZV0pID0+CisgICAgICAgMSwgMiwgNQorCisKK0NvbWJpbmF0b3JpYyBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIDpmdW5jOmBpdGVydG9vbHMuY29tYmluYXRpb25zKGl0ZXJhYmxlLCByKSA8aXRlcnRvb2xzLmNvbWJpbmF0aW9ucz5gCityZXR1cm5zIGFuIGl0ZXJhdG9yIGdpdmluZyBhbGwgcG9zc2libGUgKnIqLXR1cGxlIGNvbWJpbmF0aW9ucyBvZiB0aGUKK2VsZW1lbnRzIGNvbnRhaW5lZCBpbiAqaXRlcmFibGUqLiAgOjoKKworICAgIGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDIpLCAoMSwgMyksICgxLCA0KSwgKDEsIDUpLAorICAgICAgKDIsIDMpLCAoMiwgNCksICgyLCA1KSwKKyAgICAgICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDUpCisKKyAgICBpdGVydG9vbHMuY29tYmluYXRpb25zKFsxLCAyLCAzLCA0LCA1XSwgMykgPT4KKyAgICAgICgxLCAyLCAzKSwgKDEsIDIsIDQpLCAoMSwgMiwgNSksICgxLCAzLCA0KSwgKDEsIDMsIDUpLCAoMSwgNCwgNSksCisgICAgICAoMiwgMywgNCksICgyLCAzLCA1KSwgKDIsIDQsIDUpLAorICAgICAgKDMsIDQsIDUpCisKK1RoZSBlbGVtZW50cyB3aXRoaW4gZWFjaCB0dXBsZSByZW1haW4gaW4gdGhlIHNhbWUgb3JkZXIgYXMKKyppdGVyYWJsZSogcmV0dXJuZWQgdGhlbS4gIEZvciBleGFtcGxlLCB0aGUgbnVtYmVyIDEgaXMgYWx3YXlzIGJlZm9yZQorMiwgMywgNCwgb3IgNSBpbiB0aGUgZXhhbXBsZXMgYWJvdmUuICBBIHNpbWlsYXIgZnVuY3Rpb24sCis6ZnVuYzpgaXRlcnRvb2xzLnBlcm11dGF0aW9ucyhpdGVyYWJsZSwgcj1Ob25lKSA8aXRlcnRvb2xzLnBlcm11dGF0aW9ucz5gLAorcmVtb3ZlcyB0aGlzIGNvbnN0cmFpbnQgb24gdGhlIG9yZGVyLCByZXR1cm5pbmcgYWxsIHBvc3NpYmxlCithcnJhbmdlbWVudHMgb2YgbGVuZ3RoICpyKjo6CisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKFsxLCAyLCAzLCA0LCA1XSwgMikgPT4KKyAgICAgICgxLCAyKSwgKDEsIDMpLCAoMSwgNCksICgxLCA1KSwKKyAgICAgICgyLCAxKSwgKDIsIDMpLCAoMiwgNCksICgyLCA1KSwKKyAgICAgICgzLCAxKSwgKDMsIDIpLCAoMywgNCksICgzLCA1KSwKKyAgICAgICg0LCAxKSwgKDQsIDIpLCAoNCwgMyksICg0LCA1KSwKKyAgICAgICg1LCAxKSwgKDUsIDIpLCAoNSwgMyksICg1LCA0KQorCisgICAgaXRlcnRvb2xzLnBlcm11dGF0aW9ucyhbMSwgMiwgMywgNCwgNV0pID0+CisgICAgICAoMSwgMiwgMywgNCwgNSksICgxLCAyLCAzLCA1LCA0KSwgKDEsIDIsIDQsIDMsIDUpLAorICAgICAgLi4uCisgICAgICAoNSwgNCwgMywgMiwgMSkKKworSWYgeW91IGRvbid0IHN1cHBseSBhIHZhbHVlIGZvciAqciogdGhlIGxlbmd0aCBvZiB0aGUgaXRlcmFibGUgaXMgdXNlZCwKK21lYW5pbmcgdGhhdCBhbGwgdGhlIGVsZW1lbnRzIGFyZSBwZXJtdXRlZC4KKworTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBwcm9kdWNlIGFsbCBvZiB0aGUgcG9zc2libGUgY29tYmluYXRpb25zIGJ5Citwb3NpdGlvbiBhbmQgZG9uJ3QgcmVxdWlyZSB0aGF0IHRoZSBjb250ZW50cyBvZiAqaXRlcmFibGUqIGFyZSB1bmlxdWU6OgorCisgICAgaXRlcnRvb2xzLnBlcm11dGF0aW9ucygnYWJhJywgMykgPT4KKyAgICAgICgnYScsICdiJywgJ2EnKSwgKCdhJywgJ2EnLCAnYicpLCAoJ2InLCAnYScsICdhJyksCisgICAgICAoJ2InLCAnYScsICdhJyksICgnYScsICdhJywgJ2InKSwgKCdhJywgJ2InLCAnYScpCisKK1RoZSBpZGVudGljYWwgdHVwbGUgYGAoJ2EnLCAnYScsICdiJylgYCBvY2N1cnMgdHdpY2UsIGJ1dCB0aGUgdHdvICdhJworc3RyaW5ncyBjYW1lIGZyb20gZGlmZmVyZW50IHBvc2l0aW9ucy4KKworVGhlIDpmdW5jOmBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoaXRlcmFibGUsIHIpIDxpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQ+YAorZnVuY3Rpb24gcmVsYXhlcyBhIGRpZmZlcmVudCBjb25zdHJhaW50OiBlbGVtZW50cyBjYW4gYmUgcmVwZWF0ZWQKK3dpdGhpbiBhIHNpbmdsZSB0dXBsZS4gIENvbmNlcHR1YWxseSBhbiBlbGVtZW50IGlzIHNlbGVjdGVkIGZvciB0aGUKK2ZpcnN0IHBvc2l0aW9uIG9mIGVhY2ggdHVwbGUgYW5kIHRoZW4gaXMgcmVwbGFjZWQgYmVmb3JlIHRoZSBzZWNvbmQKK2VsZW1lbnQgaXMgc2VsZWN0ZWQuICA6OgorCisgICAgaXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KFsxLCAyLCAzLCA0LCA1XSwgMikgPT4KKyAgICAgICgxLCAxKSwgKDEsIDIpLCAoMSwgMyksICgxLCA0KSwgKDEsIDUpLAorICAgICAgKDIsIDIpLCAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDMpLCAoMywgNCksICgzLCA1KSwKKyAgICAgICg0LCA0KSwgKDQsIDUpLAorICAgICAgKDUsIDUpCisKIAogR3JvdXBpbmcgZWxlbWVudHMKIC0tLS0tLS0tLS0tLS0tLS0tCkBAIC05ODYsNiArMTA2MCwxNyBAQAogICAgZm9yIGkgaW4gWzEsMiwzXToKICAgICAgICBwcm9kdWN0ICo9IGkKIAorQSByZWxhdGVkIGZ1bmN0aW9uIGlzIGBpdGVydG9vbHMuYWNjdW11bGF0ZShpdGVyYWJsZSwgZnVuYz1vcGVyYXRvci5hZGQpIDxpdGVydG9vbHMuYWNjdW11bGF0ZWAuCitJdCBwZXJmb3JtcyB0aGUgc2FtZSBjYWxjdWxhdGlvbiwgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIG9ubHkgdGhlCitmaW5hbCByZXN1bHQsIDpmdW5jOmBhY2N1bXVsYXRlYCByZXR1cm5zIGFuIGl0ZXJhdG9yIHRoYXQgYWxzbyB5aWVsZHMKK2VhY2ggcGFydGlhbCByZXN1bHQ6OgorCisgICAgaXRlcnRvb2xzLmFjY3VtdWxhdGUoWzEsMiwzLDQsNV0pID0+CisgICAgICAxLCAzLCA2LCAxMCwgMTUKKworICAgIGl0ZXJ0b29scy5hY2N1bXVsYXRlKFsxLDIsMyw0LDVdLCBvcGVyYXRvci5tdWwpID0+CisgICAgICAxLCAyLCA2LCAyNCwgMTIwCisKIAogVGhlIG9wZXJhdG9yIG1vZHVsZQogLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTE1OSw1MSArMTI0NCw2IEBACiAKIC4uIGNvbW1lbnQKIAotICAgIFRvcGljcyB0byBwbGFjZQotICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBYWFggb3Mud2FsaygpCi0KLSAgICBYWFggTmVlZCBhIGxhcmdlIGV4YW1wbGUuCi0KLSAgICBCdXQgd2lsbCBhbiBleGFtcGxlIGFkZCBtdWNoPyAgSSdsbCBwb3N0IGEgZmlyc3QgZHJhZnQgYW5kIHNlZQotICAgIHdoYXQgdGhlIGNvbW1lbnRzIHNheS4KLQotLi4gY29tbWVudAotCi0gICAgT3JpZ2luYWwgb3V0bGluZToKLSAgICBJbnRyb2R1Y3Rpb24KLSAgICAgICAgICAgIElkZWEgb2YgRlAKLSAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbXMgYnVpbHQgb3V0IG9mIGZ1bmN0aW9ucwotICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbnMgYXJlIHN0cmljdGx5IGlucHV0LW91dHB1dCwgbm8gaW50ZXJuYWwgc3RhdGUKLSAgICAgICAgICAgIE9wcG9zZWQgdG8gT08gcHJvZ3JhbW1pbmcsIHdoZXJlIG9iamVjdHMgaGF2ZSBzdGF0ZQotCi0gICAgICAgICAgICBXaHkgRlA/Ci0gICAgICAgICAgICAgICAgICAgIEZvcm1hbCBwcm92YWJpbGl0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbm1lbnQgaXMgZGlmZmljdWx0IHRvIHJlYXNvbiBhYm91dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCB2ZXJ5IHJlbGV2YW50IHRvIFB5dGhvbgotICAgICAgICAgICAgICAgICAgICBNb2R1bGFyaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU21hbGwgZnVuY3Rpb25zIHRoYXQgZG8gb25lIHRoaW5nCi0gICAgICAgICAgICAgICAgICAgIERlYnVnZ2FiaWxpdHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWFzeSB0byB0ZXN0IGR1ZSB0byBsYWNrIG9mIHN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWFzeSB0byB2ZXJpZnkgb3V0cHV0IGZyb20gaW50ZXJtZWRpYXRlIHN0ZXBzCi0gICAgICAgICAgICAgICAgICAgIENvbXBvc2FiaWxpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgYXNzZW1ibGUgYSB0b29sYm94IG9mIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBtaXhlZAotCi0gICAgVGFja2xpbmcgYSBwcm9ibGVtCi0gICAgICAgICAgICBOZWVkIGEgc2lnbmlmaWNhbnQgZXhhbXBsZQotCi0gICAgSXRlcmF0b3JzCi0gICAgR2VuZXJhdG9ycwotICAgIFRoZSBpdGVydG9vbHMgbW9kdWxlCi0gICAgTGlzdCBjb21wcmVoZW5zaW9ucwotICAgIFNtYWxsIGZ1bmN0aW9ucyBhbmQgdGhlIGxhbWJkYSBzdGF0ZW1lbnQKLSAgICBCdWlsdC1pbiBmdW5jdGlvbnMKLSAgICAgICAgICAgIG1hcAotICAgICAgICAgICAgZmlsdGVyCi0KLS4uIGNvbW1lbnQKLQogICAgIEhhbmR5IGxpdHRsZSBmdW5jdGlvbiBmb3IgcHJpbnRpbmcgcGFydCBvZiBhbiBpdGVyYXRvciAtLSB1c2VkCiAgICAgd2hpbGUgd3JpdGluZyB0aGlzIGRvY3VtZW50LgogCkBAIC0xMjE0LDUgKzEyNTQsMyBAQAogICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyKGVsZW0pKQogICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJywgJykKICAgICAgICAgcHJpbnQoZWxlbVstMV0pCi0KLQpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2luZGV4LnJzdCBiL0RvYy9ob3d0by9pbmRleC5yc3QKaW5kZXggODFhNGY4Yi4uMmM5ZDY5OSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2luZGV4LnJzdAorKysgYi9Eb2MvaG93dG8vaW5kZXgucnN0CkBAIC0yOCw0ICsyOCw1IEBACiAgICB3ZWJzZXJ2ZXJzLnJzdAogICAgYXJncGFyc2UucnN0CiAgICBpcGFkZHJlc3MucnN0CisgICBjbGluaWMucnN0CiAKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdCBiL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdAppbmRleCA1NjNkYTlkLi5hMjE0MjNiIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QKKysrIGIvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0CkBAIC03MDQsOSArNzA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihyZWNvcmQubmFtZSkKICAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKHJlY29yZCkgIyBObyBsZXZlbCBvciBmaWx0ZXIgbG9naWMgYXBwbGllZCAtIGp1c3QgZG8gaXQhCi0gICAgICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KToKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzLCB0cmFjZWJhY2sKICAgICAgICAgICAgICAgICBwcmludCgnV2hvb3BzISBQcm9ibGVtOicsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZGVycikKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9sb2dnaW5nLnJzdCBiL0RvYy9ob3d0by9sb2dnaW5nLnJzdAppbmRleCA1NWIxYzg2Li5kYWI1OGY0IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vbG9nZ2luZy5yc3QKKysrIGIvRG9jL2hvd3RvL2xvZ2dpbmcucnN0CkBAIC05MDEsMTAgKzkwMSwxMCBAQAogICAgZGlzayBmaWxlcywgcm90YXRpbmcgdGhlIGxvZyBmaWxlIGF0IGNlcnRhaW4gdGltZWQgaW50ZXJ2YWxzLgogCiAjLiA6Y2xhc3M6YH5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBUQ1AvSVAKLSAgIHNvY2tldHMuCisgICBzb2NrZXRzLiBTaW5jZSAzLjQsIFVuaXggZG9tYWluIHNvY2tldHMgYXJlIGFsc28gc3VwcG9ydGVkLgogCiAjLiA6Y2xhc3M6YH5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXJgIGluc3RhbmNlcyBzZW5kIG1lc3NhZ2VzIHRvIFVEUAotICAgc29ja2V0cy4KKyAgIHNvY2tldHMuIFNpbmNlIDMuNCwgVW5peCBkb21haW4gc29ja2V0cyBhcmUgYWxzbyBzdXBwb3J0ZWQuCiAKICMuIDpjbGFzczpgfmhhbmRsZXJzLlNNVFBIYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBhIGRlc2lnbmF0ZWQKICAgIGVtYWlsIGFkZHJlc3MuCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vcHlwb3J0aW5nLnJzdCBiL0RvYy9ob3d0by9weXBvcnRpbmcucnN0CmluZGV4IDkyMjA3ZTIuLmQ2YWQ0MDEgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9weXBvcnRpbmcucnN0CisrKyBiL0RvYy9ob3d0by9weXBvcnRpbmcucnN0CkBAIC0xMCwyNTggKzEwLDE4NSBAQAogCiAgICBXaXRoIFB5dGhvbiAzIGJlaW5nIHRoZSBmdXR1cmUgb2YgUHl0aG9uIHdoaWxlIFB5dGhvbiAyIGlzIHN0aWxsIGluIGFjdGl2ZQogICAgdXNlLCBpdCBpcyBnb29kIHRvIGhhdmUgeW91ciBwcm9qZWN0IGF2YWlsYWJsZSBmb3IgYm90aCBtYWpvciByZWxlYXNlcyBvZgotICAgUHl0aG9uLiBUaGlzIGd1aWRlIGlzIG1lYW50IHRvIGhlbHAgeW91IGNob29zZSB3aGljaCBzdHJhdGVneSB3b3JrcyBiZXN0Ci0gICBmb3IgeW91ciBwcm9qZWN0IHRvIHN1cHBvcnQgYm90aCBQeXRob24gMiAmIDMgYWxvbmcgd2l0aCBob3cgdG8gZXhlY3V0ZQotICAgdGhhdCBzdHJhdGVneS4KKyAgIFB5dGhvbi4gVGhpcyBndWlkZSBpcyBtZWFudCB0byBoZWxwIHlvdSBmaWd1cmUgb3V0IGhvdyBiZXN0IHRvIHN1cHBvcnQgYm90aAorICAgUHl0aG9uIDIgJiAzIHNpbXVsdGFuZW91c2x5LgogCiAgICBJZiB5b3UgYXJlIGxvb2tpbmcgdG8gcG9ydCBhbiBleHRlbnNpb24gbW9kdWxlIGluc3RlYWQgb2YgcHVyZSBQeXRob24gY29kZSwKICAgIHBsZWFzZSBzZWUgOnJlZjpgY3BvcnRpbmctaG93dG9gLgogCisgICBJZiB5b3Ugd291bGQgbGlrZSB0byByZWFkIG9uZSBjb3JlIFB5dGhvbiBkZXZlbG9wZXIncyB0YWtlIG9uIHdoeSBQeXRob24gMworICAgY2FtZSBpbnRvIGV4aXN0ZW5jZSwgeW91IGNhbiByZWFkIE5pY2sgQ29naGxhbidzIGBQeXRob24gMyBRICYgQWBfLgogCi1DaG9vc2luZyBhIFN0cmF0ZWd5Ci09PT09PT09PT09PT09PT09PT09CisgICBJZiB5b3UgcHJlZmVyIHRvIHJlYWQgYSAoZnJlZSkgYm9vayBvbiBwb3J0aW5nIGEgcHJvamVjdCB0byBQeXRob24gMywKKyAgIGNvbnNpZGVyIHJlYWRpbmcgYFBvcnRpbmcgdG8gUHl0aG9uIDNgXyBieSBMZW5uYXJ0IFJlZ2Vicm8gd2hpY2ggc2hvdWxkIGNvdmVyCisgICBtdWNoIG9mIHdoYXQgaXMgZGlzY3Vzc2VkIGluIHRoaXMgSE9XVE8uCiAKLVdoZW4gYSBwcm9qZWN0IGNob29zZXMgdG8gc3VwcG9ydCBib3RoIFB5dGhvbiAyICYgMywKLWEgZGVjaXNpb24gbmVlZHMgdG8gYmUgbWFkZSBhcyB0byBob3cgdG8gZ28gYWJvdXQgYWNjb21wbGlzaGluZyB0aGF0IGdvYWwuCi1UaGUgY2hvc2VuIHN0cmF0ZWd5IHdpbGwgZGVwZW5kIG9uIGhvdyBsYXJnZSB0aGUgcHJvamVjdCdzIGV4aXN0aW5nCi1jb2RlYmFzZSBpcyBhbmQgaG93IG11Y2ggZGl2ZXJnZW5jZSB5b3Ugd2FudCBmcm9tIHlvdXIgY3VycmVudCBQeXRob24gMiBjb2RlYmFzZQotKGUuZy4sIGNoYW5naW5nIHlvdXIgY29kZSB0byB3b3JrIHNpbXVsdGFuZW91c2x5IHdpdGggUHl0aG9uIDIgYW5kIDMpLgotCi1JZiB5b3Ugd291bGQgcHJlZmVyIHRvIG1haW50YWluIGEgY29kZWJhc2Ugd2hpY2ggaXMgc2VtYW50aWNhbGx5ICoqYW5kKioKLXN5bnRhY3RpY2FsbHkgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyICYgMyBzaW11bHRhbmVvdXNseSwgeW91IGNhbiB3cml0ZQotOnJlZjpgdXNlX3NhbWVfc291cmNlYC4gV2hpbGUgdGhpcyB0ZW5kcyB0byBsZWFkIHRvIHNvbWV3aGF0IG5vbi1pZGlvbWF0aWMKLWNvZGUsIGl0IGRvZXMgbWVhbiB5b3Uga2VlcCBhIHJhcGlkIGRldmVsb3BtZW50IHByb2Nlc3MgZm9yIHlvdSwgdGhlIGRldmVsb3Blci4KLQotSWYgeW91ciBwcm9qZWN0IGlzIGJyYW5kLW5ldyBvciBkb2VzIG5vdCBoYXZlIGEgbGFyZ2UgY29kZWJhc2UsIHRoZW4geW91IG1heQotd2FudCB0byBjb25zaWRlciB3cml0aW5nL3BvcnRpbmcgOnJlZjpgYWxsIG9mIHlvdXIgY29kZSBmb3IgUHl0aG9uIDMKLWFuZCB1c2UgM3RvMiA8dXNlXzN0bzI+YCB0byBwb3J0IHlvdXIgY29kZSBmb3IgUHl0aG9uIDIuCi0KLUZpbmFsbHksIHlvdSBkbyBoYXZlIHRoZSBvcHRpb24gb2YgOnJlZjpgdXNpbmcgMnRvMyA8dXNlXzJ0bzM+YCB0byB0cmFuc2xhdGUKLVB5dGhvbiAyIGNvZGUgaW50byBQeXRob24gMyBjb2RlICh3aXRoIHNvbWUgbWFudWFsIGhlbHApLiBUaGlzIGNhbiB0YWtlIHRoZQotZm9ybSBvZiBicmFuY2hpbmcgeW91ciBjb2RlIGFuZCB1c2luZyAydG8zIHRvIHN0YXJ0IGEgUHl0aG9uIDMgYnJhbmNoLiBZb3UgY2FuCi1hbHNvIGhhdmUgdXNlcnMgcGVyZm9ybSB0aGUgdHJhbnNsYXRpb24gYXQgaW5zdGFsbGF0aW9uIHRpbWUgYXV0b21hdGljYWxseSBzbwotdGhhdCB5b3Ugb25seSBoYXZlIHRvIG1haW50YWluIGEgUHl0aG9uIDIgY29kZWJhc2UuCi0KLVJlZ2FyZGxlc3Mgb2Ygd2hpY2ggYXBwcm9hY2ggeW91IGNob29zZSwgcG9ydGluZyBpcyBub3QgYXMgaGFyZCBvcgotdGltZS1jb25zdW1pbmcgYXMgeW91IG1pZ2h0IGluaXRpYWxseSB0aGluay4gWW91IGNhbiBhbHNvIHRhY2tsZSB0aGUgcHJvYmxlbQotcGllY2UtbWVhbCBhcyBhIGdvb2QgcG9ydGlvbiBvZiBwb3J0aW5nIGlzIHNpbXBseSB1cGRhdGluZyB5b3VyIGNvZGUgdG8gZm9sbG93Ci1jdXJyZW50IGJlc3QgcHJhY3RpY2VzIGluIGEgUHl0aG9uIDIvMyBjb21wYXRpYmxlIHdheS4KKyAgIEZvciBoZWxwIHdpdGggcG9ydGluZywgeW91IGNhbiBlbWFpbCB0aGUgcHl0aG9uLXBvcnRpbmdfIG1haWxpbmcgbGlzdCB3aXRoCisgICBxdWVzdGlvbnMuCiAKIAotVW5pdmVyc2FsIEJpdHMgb2YgQWR2aWNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0JlZm9yZSBZb3UgQmVnaW4KKz09PT09PT09PT09PT09PT0KIAotUmVnYXJkbGVzcyBvZiB3aGF0IHN0cmF0ZWd5IHlvdSBwaWNrLCB0aGVyZSBhcmUgYSBmZXcgdGhpbmdzIHlvdSBzaG91bGQKLWNvbnNpZGVyLgorSWYgeW91ciBwcm9qZWN0IGlzIG9uIHRoZSBDaGVlc2VzaG9wXy9QeVBJXywgbWFrZSBzdXJlIGl0IGhhcyB0aGUgcHJvcGVyCitgdHJvdmUgY2xhc3NpZmllcnNgXyB0byBzaWduaWZ5IHdoYXQgdmVyc2lvbnMgb2YgUHl0aG9uIGl0ICoqY3VycmVudGx5KioKK3N1cHBvcnRzLiBBdCBtaW5pbXVtIHlvdSBzaG91bGQgc3BlY2lmeSB0aGUgbWFqb3IgdmVyc2lvbihzKSwgZS5nLgorYGBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMmBgIGlmIHlvdXIgcHJvamVjdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cworUHl0aG9uIDIuIEl0IGlzIHByZWZlcnJhYmxlIHRoYXQgeW91IGJlIGFzIHNwZWNpZmljIGFzIHBvc3NpYmxlIGJ5IGxpc3RpbmcgZXZlcnkKK21ham9yL21pbm9yIHZlcnNpb24gb2YgUHl0aG9uIHRoYXQgeW91IHN1cHBvcnQsIGUuZy4gaWYgeW91ciBwcm9qZWN0IHN1cHBvcnRzCitQeXRob24gMi42IGFuZCAyLjcsIHRoZW4geW91IHdhbnQgdGhlIGNsYXNzaWZpZXJzIG9mOjoKIAotT25lIGlzIG1ha2Ugc3VyZSB5b3UgaGF2ZSBhIHJvYnVzdCB0ZXN0IHN1aXRlLiBZb3UgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZwotY29udGludWVzIHRvIHdvcmssIGp1c3QgbGlrZSB3aGVuIHlvdSBzdXBwb3J0IGEgbmV3IG1pbm9yL2ZlYXR1cmUgcmVsZWFzZSBvZgotUHl0aG9uLiBUaGlzIG1lYW5zIG1ha2luZyBzdXJlIHlvdXIgdGVzdCBzdWl0ZSBpcyB0aG9yb3VnaCBhbmQgaXMgcG9ydGVkCi1wcm9wZXJseSBiZXR3ZWVuIFB5dGhvbiAyICYgMy4gWW91IHdpbGwgYWxzbyBtb3N0IGxpa2VseSB3YW50IHRvIHVzZSBzb21ldGhpbmcKLWxpa2UgdG94XyB0byBhdXRvbWF0ZSB0ZXN0aW5nIGJldHdlZW4gYm90aCBhIFB5dGhvbiAyIGFuZCBQeXRob24gMyBpbnRlcnByZXRlci4KKyBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMgorIFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYKKyBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43CiAKLVR3bywgb25jZSB5b3VyIHByb2plY3QgaGFzIFB5dGhvbiAzIHN1cHBvcnQsIG1ha2Ugc3VyZSB0byBhZGQgdGhlIHByb3BlcgotY2xhc3NpZmllciBvbiB0aGUgQ2hlZXNlc2hvcF8gKFB5UElfKS4gVG8gaGF2ZSB5b3VyIHByb2plY3QgbGlzdGVkIGFzIFB5dGhvbiAzCi1jb21wYXRpYmxlIGl0IG11c3QgaGF2ZSB0aGUKLWBQeXRob24gMyBjbGFzc2lmaWVyIDxodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGk/OmFjdGlvbj1icm93c2UmYz01MzM+YF8KLShmcm9tCi1odHRwOi8vdGVjaHNwb3Quenp6ZWVrLm9yZy8yMDExLzAxLzI0L3p6emVlay1zLWd1aWRlLXRvLXB5dGhvbi0zLXBvcnRpbmcvKTo6CitPbmNlIHlvdXIgcHJvamVjdCBzdXBwb3J0cyBQeXRob24gMyB5b3Ugd2lsbCB3YW50IHRvIGdvIGJhY2sgYW5kIGFkZCB0aGUKK2FwcHJvcHJpYXRlIGNsYXNzaWZpZXJzIGZvciBQeXRob24gMyBhcyB3ZWxsLiBUaGlzIGlzIGltcG9ydGFudCBhcyBzZXR0aW5nIHRoZQorYGBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogM2BgIGNsYXNzaWZpZXIgd2lsbCBsZWFkIHRvIHlvdXIgcHJvamVjdAorYmVpbmcgbGlzdGVkIHVuZGVyIHRoZSBgUHl0aG9uIDMgUGFja2FnZXNgXyBzZWN0aW9uIG9mIFB5UEkuCiAKLSAgIHNldHVwKAotICAgICBuYW1lPSdZb3VyIExpYnJhcnknLAotICAgICB2ZXJzaW9uPScxLjAnLAotICAgICBjbGFzc2lmaWVycz1bCi0gICAgICAgICAjIG1ha2Ugc3VyZSB0byB1c2UgOjogUHl0aG9uICphbmQqIDo6IFB5dGhvbiA6OiAzIHNvCi0gICAgICAgICAjIHRoYXQgcHlwaSBjYW4gbGlzdCB0aGUgcGFja2FnZSBvbiB0aGUgcHl0aG9uIDMgcGFnZQotICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCi0gICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMnCi0gICAgIF0sCi0gICAgIHBhY2thZ2VzPVsneW91cmxpYnJhcnknXSwKLSAgICAgIyBtYWtlIHN1cmUgdG8gYWRkIGN1c3RvbV9maXhlcnMgdG8gdGhlIE1BTklGRVNULmluCi0gICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPVRydWUsCi0gICAgICMgLi4uCi0gICApCitNYWtlIHN1cmUgeW91IGhhdmUgYSByb2J1c3QgdGVzdCBzdWl0ZS4gWW91IG5lZWQgdG8KK21ha2Ugc3VyZSBldmVyeXRoaW5nIGNvbnRpbnVlcyB0byB3b3JrLCBqdXN0IGxpa2Ugd2hlbiB5b3Ugc3VwcG9ydCBhIG5ldworbWlub3IvZmVhdHVyZSByZWxlYXNlIG9mIFB5dGhvbi4gVGhpcyBtZWFucyBtYWtpbmcgc3VyZSB5b3VyIHRlc3Qgc3VpdGUgaXMKK3Rob3JvdWdoIGFuZCBpcyBwb3J0ZWQgcHJvcGVybHkgYmV0d2VlbiBQeXRob24gMiAmIDMgKGNvbnNpZGVyIHVzaW5nIGNvdmVyYWdlXwordG8gbWVhc3VyZSB0aGF0IHlvdSBoYXZlIGVmZmVjdGl2ZSB0ZXN0IGNvdmVyYWdlKS4gWW91IHdpbGwgYWxzbyBtb3N0IGxpa2VseQord2FudCB0byB1c2Ugc29tZXRoaW5nIGxpa2UgdG94XyB0byBhdXRvbWF0ZSB0ZXN0aW5nIGJldHdlZW4gYWxsIG9mIHlvdXIKK3N1cHBvcnRlZCB2ZXJzaW9ucyBvZiBQeXRob24uIFlvdSB3aWxsIGFsc28gd2FudCB0byAqKnBvcnQgeW91ciB0ZXN0cyBmaXJzdCoqIHNvCit0aGF0IHlvdSBjYW4gbWFrZSBzdXJlIHRoYXQgeW91IGRldGVjdCBicmVha2FnZSBkdXJpbmcgdGhlIHRyYW5zaXRpb24uIFRlc3RzIGFsc28KK3RlbmQgdG8gYmUgc2ltcGxlciB0aGFuIHRoZSBjb2RlIHRoZXkgYXJlIHRlc3Rpbmcgc28gaXQgZ2l2ZXMgeW91IGFuIGlkZWEgb2YgaG93CitlYXN5IGl0IGNhbiBiZSB0byBwb3J0IGNvZGUuCiAKLQotRG9pbmcgc28gd2lsbCBjYXVzZSB5b3VyIHByb2plY3QgdG8gc2hvdyB1cCBpbiB0aGUKLWBQeXRob24gMyBwYWNrYWdlcyBsaXN0Ci08aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpPzphY3Rpb249YnJvd3NlJmM9NTMzJnNob3c9YWxsPmBfLiBZb3Ugd2lsbCBrbm93Ci15b3Ugc2V0IHRoZSBjbGFzc2lmaWVyIHByb3Blcmx5IGFzIHZpc2l0aW5nIHlvdXIgcHJvamVjdCBwYWdlIG9uIHRoZSBDaGVlc2VzaG9wCi13aWxsIHNob3cgYSBQeXRob24gMyBsb2dvIGluIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcGFnZS4KLQotVGhyZWUsIHRoZSBzaXhfIHByb2plY3QgcHJvdmlkZXMgYSBsaWJyYXJ5IHdoaWNoIGhlbHBzIGlyb24gb3V0IGRpZmZlcmVuY2VzCi1iZXR3ZWVuIFB5dGhvbiAyICYgMy4gSWYgeW91IGZpbmQgdGhlcmUgaXMgYSBzdGlja3kgcG9pbnQgdGhhdCBpcyBhIGNvbnRpbnVhbAotcG9pbnQgb2YgY29udGVudGlvbiBpbiB5b3VyIHRyYW5zbGF0aW9uIG9yIG1haW50ZW5hbmNlIG9mIGNvZGUsIGNvbnNpZGVyIHVzaW5nCi1hIHNvdXJjZS1jb21wYXRpYmxlIHNvbHV0aW9uIHJlbHlpbmcgb24gc2l4LiBJZiB5b3UgaGF2ZSB0byBjcmVhdGUgeW91ciBvd24KLVB5dGhvbiAyLzMgY29tcGF0aWJsZSBzb2x1dGlvbiwgeW91IGNhbiB1c2UgYGBzeXMudmVyc2lvbl9pbmZvWzBdID49IDNgYCBhcyBhCi1ndWFyZC4KLQotRm91ciwgcmVhZCBhbGwgdGhlIGFwcHJvYWNoZXMuIEp1c3QgYmVjYXVzZSBzb21lIGJpdCBvZiBhZHZpY2UgYXBwbGllcyB0byBvbmUKLWFwcHJvYWNoIG1vcmUgdGhhbiBhbm90aGVyIGRvZXNuJ3QgbWVhbiB0aGF0IHNvbWUgYWR2aWNlIGRvZXNuJ3QgYXBwbHkgdG8gb3RoZXIKLXN0cmF0ZWdpZXMuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIG9mIHdoZXRoZXIgeW91IGRlY2lkZSB0byB1c2UgMnRvMyBvciBiZQotc291cmNlLWNvbXBhdGlibGU7IHRpcHMgZm9yIG9uZSBhcHByb2FjaCBhbG1vc3QgYWx3YXlzIGFwcGx5IHRvIHRoZSBvdGhlci4KLQotRml2ZSwgZHJvcCBzdXBwb3J0IGZvciBvbGRlciBQeXRob24gdmVyc2lvbnMgaWYgcG9zc2libGUuIGBQeXRob24gMi41YF8KK0Ryb3Agc3VwcG9ydCBmb3Igb2xkZXIgUHl0aG9uIHZlcnNpb25zIGlmIHBvc3NpYmxlLiBgUHl0aG9uIDIuNWBfCiBpbnRyb2R1Y2VkIGEgbG90IG9mIHVzZWZ1bCBzeW50YXggYW5kIGxpYnJhcmllcyB3aGljaCBoYXZlIGJlY29tZSBpZGlvbWF0aWMKIGluIFB5dGhvbiAzLiBgUHl0aG9uIDIuNmBfIGludHJvZHVjZWQgZnV0dXJlIHN0YXRlbWVudHMgd2hpY2ggbWFrZXMKIGNvbXBhdGliaWxpdHkgbXVjaCBlYXNpZXIgaWYgeW91IGFyZSBnb2luZyBmcm9tIFB5dGhvbiAyIHRvIDMuCi1gUHl0aG9uIDIuN2BfIGNvbnRpbnVlcyB0aGUgdHJlbmQgaW4gdGhlIHN0ZGxpYi4gU28gY2hvb3NlIHRoZSBuZXdlc3QgdmVyc2lvbgorYFB5dGhvbiAyLjdgXyBjb250aW51ZXMgdGhlIHRyZW5kIGluIHRoZSBzdGRsaWIuIENob29zZSB0aGUgbmV3ZXN0IHZlcnNpb24KIG9mIFB5dGhvbiB3aGljaCB5b3UgYmVsaWV2ZSBjYW4gYmUgeW91ciBtaW5pbXVtIHN1cHBvcnQgdmVyc2lvbgogYW5kIHdvcmsgZnJvbSB0aGVyZS4KIAotU2l4LCB0YXJnZXQgdGhlIG5ld2VzdCB2ZXJzaW9uIG9mIFB5dGhvbiAzIHRoYXQgeW91IGNhbi4gQmV5b25kIGp1c3QgdGhlIHVzdWFsCitUYXJnZXQgdGhlIG5ld2VzdCB2ZXJzaW9uIG9mIFB5dGhvbiAzIHRoYXQgeW91IGNhbi4gQmV5b25kIGp1c3QgdGhlIHVzdWFsCiBidWdmaXhlcywgY29tcGF0aWJpbGl0eSBoYXMgY29udGludWVkIHRvIGltcHJvdmUgYmV0d2VlbiBQeXRob24gMiBhbmQgMyBhcyB0aW1lCi1oYXMgcGFzc2VkLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBmb3IgUHl0aG9uIDMuMyB3aGVyZSB0aGUgYGB1YGAgcHJlZml4IGZvcgotc3RyaW5ncyBpcyBhbGxvd2VkLCBtYWtpbmcgc291cmNlLWNvbXBhdGlibGUgUHl0aG9uIGNvZGUgZWFzaWVyLgotCi1TZXZlbiwgbWFrZSBzdXJlIHRvIGxvb2sgYXQgdGhlIGBPdGhlciBSZXNvdXJjZXNgXyBmb3IgdGlwcyBmcm9tIG90aGVyIHBlb3BsZQotd2hpY2ggbWF5IGhlbHAgeW91IG91dC4KK2hhcyBwYXNzZWQuIEUuZy4gUHl0aG9uIDMuMyBhZGRlZCBiYWNrIHRoZSBgYHVgYCBwcmVmaXggZm9yCitzdHJpbmdzLCBtYWtpbmcgc291cmNlLWNvbXBhdGlibGUgUHl0aG9uIGNvZGUgZWFzaWVyIHRvIHdyaXRlLgogCiAKLS4uIF90b3g6IGh0dHA6Ly9jb2Rlc3BlYWsubmV0L3RveC8KLS4uIF9DaGVlc2VzaG9wOgotLi4gX1B5UEk6IGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvCi0uLiBfc2l4OiBodHRwOi8vcGFja2FnZXMucHl0aG9uLm9yZy9zaXgKLS4uIF9QeXRob24gMi43OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi43LngKLS4uIF9QeXRob24gMi42OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi42LngKLS4uIF9QeXRob24gMi41OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi41LngKLS4uIF9QeXRob24gMi40OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi40LngKLS4uIF9QeXRob24gMi4zOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi4zLngKLS4uIF9QeXRob24gMi4yOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi4yLngKK1dyaXRpbmcgU291cmNlLUNvbXBhdGlibGUgUHl0aG9uIDIvMyBDb2RlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPdmVyIHRoZSB5ZWFycyB0aGUgUHl0aG9uIGNvbW11bml0eSBoYXMgZGlzY292ZXJlZCB0aGF0IHRoZSBlYXNpZXN0IHdheSB0bworc3VwcG9ydCBib3RoIFB5dGhvbiAyIGFuZCAzIGluIHBhcmFsbGVsIGlzIHRvIHdyaXRlIFB5dGhvbiBjb2RlIHRoYXQgd29ya3MgaW4KK2VpdGhlciB2ZXJzaW9uLiBXaGlsZSB0aGlzIG1pZ2h0IHNvdW5kIGNvdW50ZXItaW50dWl0aXZlIGF0IGZpcnN0LCBpdCBhY3R1YWxseQoraXMgbm90IGRpZmZpY3VsdCBhbmQgdHlwaWNhbGx5IG9ubHkgcmVxdWlyZXMgZm9sbG93aW5nIHNvbWUgc2VsZWN0Cisobm9uLWlkaW9tYXRpYykgcHJhY3RpY2VzIGFuZCB1c2luZyBzb21lIGtleSBwcm9qZWN0cyB0byBoZWxwIG1ha2UgYnJpZGdpbmcKK2JldHdlZW4gUHl0aG9uIDIgYW5kIDMgZWFzaWVyLgorCitQcm9qZWN0cyB0byBDb25zaWRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxvd2VzdCBsZXZlbCBsaWJyYXJ5IGZvciBzdXBwb3RpbmcgUHl0aG9uIDIgJiAzIHNpbXVsdGFuZW91c2x5IGlzIHNpeF8uCitSZWFkaW5nIHRocm91Z2ggaXRzIGRvY3VtZW50YXRpb24gd2lsbCBnaXZlIHlvdSBhbiBpZGVhIG9mIHdoZXJlIGV4YWN0bHkgdGhlCitQeXRob24gbGFuZ3VhZ2UgY2hhbmdlZCBiZXR3ZWVuIHZlcnNpb25zIDIgJiAzIGFuZCB0aHVzIHdoYXQgeW91IHdpbGwgd2FudCB0aGUKK2xpYnJhcnkgdG8gaGVscCB5b3UgY29udGludWUgdG8gc3VwcG9ydC4KKworVG8gaGVscCBhdXRvbWF0ZSBwb3J0aW5nIHlvdXIgY29kZSBvdmVyIHRvIHVzaW5nIHNpeCwgeW91IGNhbiB1c2UKK21vZGVybml6ZV8uIFRoaXMgcHJvamVjdCB3aWxsIGF0dGVtcHQgdG8gcmV3cml0ZSB5b3VyIGNvZGUgdG8gYmUgYXMgbW9kZXJuIGFzCitwb3NzaWJsZSB3aGlsZSB1c2luZyBzaXggdG8gc21vb3RoIG91dCBhbnkgZGlmZmVyZW5jZXMgYmV0d2VlbiBQeXRob24gMiAmIDMuCisKK0lmIHlvdSB3YW50IHRvIHdyaXRlIHlvdXIgY29tcGF0aWJsZSBjb2RlIHRvIGZlZWwgbW9yZSBsaWtlIFB5dGhvbiAzIHRoZXJlIGlzCit0aGUgZnV0dXJlXyBwcm9qZWN0LiBJdCB0cmllcyB0byBwcm92aWRlIGJhY2twb3J0cyBvZiBvYmplY3RzIGZyb20gUHl0aG9uIDMgc28KK3RoYXQgeW91IGNhbiB1c2UgdGhlbSBmcm9tIFB5dGhvbiAyLWNvbXBhdGlibGUgY29kZSwgZS5nLiByZXBsYWNpbmcgdGhlCitgYGJ5dGVzYGAgdHlwZSBmcm9tIFB5dGhvbiAyIHdpdGggdGhlIG9uZSBmcm9tIFB5dGhvbiAzLgorSXQgYWxzbyBwcm92aWRlcyBhIHRyYW5zbGF0aW9uIHNjcmlwdCBsaWtlIG1vZGVybml6ZSAoaXRzIHRyYW5zbGF0aW9uIGNvZGUgaXMKK2FjdHVhbGx5IHBhcnRpYWxseSBiYXNlZCBvbiBpdCkgdG8gaGVscCBzdGFydCB3b3JraW5nIHdpdGggYSBwcmUtZXhpc3RpbmcgY29kZQorYmFzZS4gSXQgaXMgYWxzbyB1bmlxdWUgaW4gdGhhdCBpdHMgdHJhbnNsYXRpb24gc2NyaXB0IHdpbGwgYWxzbyBwb3J0IFB5dGhvbiAzCitjb2RlIGJhY2t3YXJkcyBhcyB3ZWxsIGFzIFB5dGhvbiAyIGNvZGUgZm9yd2FyZHMuCiAKIAotLi4gX3VzZV8zdG8yOgorVGlwcyAmIFRyaWNrcworLS0tLS0tLS0tLS0tLQogCi1QeXRob24gMyBhbmQgM3RvMgotPT09PT09PT09PT09PT09PT0KLQotSWYgeW91IGFyZSBzdGFydGluZyBhIG5ldyBwcm9qZWN0IG9yIHlvdXIgY29kZWJhc2UgaXMgc21hbGwgZW5vdWdoLCB5b3UgbWF5Ci13YW50IHRvIGNvbnNpZGVyIHdyaXRpbmcgeW91ciBjb2RlIGZvciBQeXRob24gMyBhbmQgYmFja3BvcnRpbmcgdG8gUHl0aG9uIDIKLXVzaW5nIDN0bzJfLiBUaGFua3MgdG8gUHl0aG9uIDMgYmVpbmcgbW9yZSBzdHJpY3QgYWJvdXQgdGhpbmdzIHRoYW4gUHl0aG9uIDIKLShlLmcuLCBieXRlcyB2cy4gc3RyaW5ncyksIHRoZSBzb3VyY2UgdHJhbnNsYXRpb24gY2FuIGJlIGVhc2llciBhbmQgbW9yZQotc3RyYWlnaHRmb3J3YXJkIHRoYW4gZnJvbSBQeXRob24gMiB0byAzLiBQbHVzIGl0IGdpdmVzIHlvdSBtb3JlIGRpcmVjdAotZXhwZXJpZW5jZSBkZXZlbG9waW5nIGluIFB5dGhvbiAzIHdoaWNoLCBzaW5jZSBpdCBpcyB0aGUgZnV0dXJlIG9mIFB5dGhvbiwgaXMgYQotZ29vZCB0aGluZyBsb25nLXRlcm0uCi0KLUEgZHJhd2JhY2sgb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IDN0bzIgaXMgYSB0aGlyZC1wYXJ0eSBwcm9qZWN0LiBUaGlzIG1lYW5zCi10aGF0IHRoZSBQeXRob24gY29yZSBkZXZlbG9wZXJzIChhbmQgdGh1cyB0aGlzIGd1aWRlKSBjYW4gbWFrZSBubyBwcm9taXNlcwotYWJvdXQgaG93IHdlbGwgM3RvMiB3b3JrcyBhdCBhbnkgdGltZS4gVGhlcmUgaXMgbm90aGluZyB0byBzdWdnZXN0LCB0aG91Z2gsCi10aGF0IDN0bzIgaXMgbm90IGEgaGlnaC1xdWFsaXR5IHByb2plY3QuCi0KLQotLi4gXzN0bzI6IGh0dHBzOi8vYml0YnVja2V0Lm9yZy9hbWVudGFqby9saWIzdG8yL292ZXJ2aWV3Ci0KLQotLi4gX3VzZV8ydG8zOgotCi1QeXRob24gMiBhbmQgMnRvMwotPT09PT09PT09PT09PT09PT0KLQotSW5jbHVkZWQgd2l0aCBQeXRob24gc2luY2UgMi42LCB0aGUgMnRvM18gdG9vbCAoYW5kIDptb2Q6YGxpYjJ0bzNgIG1vZHVsZSkKLWhlbHBzIHdpdGggcG9ydGluZyBQeXRob24gMiB0byBQeXRob24gMyBieSBwZXJmb3JtaW5nIHZhcmlvdXMgc291cmNlCi10cmFuc2xhdGlvbnMuIFRoaXMgaXMgYSBwZXJmZWN0IHNvbHV0aW9uIGZvciBwcm9qZWN0cyB3aGljaCB3aXNoIHRvIGJyYW5jaAotdGhlaXIgUHl0aG9uIDMgY29kZSBmcm9tIHRoZWlyIFB5dGhvbiAyIGNvZGViYXNlIGFuZCBtYWludGFpbiB0aGVtIGFzCi1pbmRlcGVuZGVudCBjb2RlYmFzZXMuIFlvdSBjYW4gZXZlbiBiZWdpbiBwcmVwYXJpbmcgdG8gdXNlIHRoaXMgYXBwcm9hY2gKLXRvZGF5IGJ5IHdyaXRpbmcgZnV0dXJlLWNvbXBhdGlibGUgUHl0aG9uIGNvZGUgd2hpY2ggd29ya3MgY2xlYW5seSBpbgotUHl0aG9uIDIgaW4gY29uanVuY3Rpb24gd2l0aCAydG8zOyBhbGwgc3RlcHMgb3V0bGluZWQgYmVsb3cgd2lsbCB3b3JrCi13aXRoIFB5dGhvbiAyIGNvZGUgdXAgdG8gdGhlIHBvaW50IHdoZW4gdGhlIGFjdHVhbCB1c2Ugb2YgMnRvMyBvY2N1cnMuCi0KLVVzZSBvZiAydG8zIGFzIGFuIG9uLWRlbWFuZCB0cmFuc2xhdGlvbiBzdGVwIGF0IGluc3RhbGwgdGltZSBpcyBhbHNvIHBvc3NpYmxlLAotcHJldmVudGluZyB0aGUgbmVlZCB0byBtYWludGFpbiBhIHNlcGFyYXRlIFB5dGhvbiAzIGNvZGViYXNlLCBidXQgdGhpcyBhcHByb2FjaAotZG9lcyBjb21lIHdpdGggc29tZSBkcmF3YmFja3MuIFdoaWxlIHVzZXJzIHdpbGwgb25seSBoYXZlIHRvIHBheSB0aGUKLXRyYW5zbGF0aW9uIGNvc3Qgb25jZSBhdCBpbnN0YWxsYXRpb24sIHlvdSBhcyBhIGRldmVsb3BlciB3aWxsIG5lZWQgdG8gcGF5IHRoZQotY29zdCByZWd1bGFybHkgZHVyaW5nIGRldmVsb3BtZW50LiBJZiB5b3VyIGNvZGViYXNlIGlzIHN1ZmZpY2llbnRseSBsYXJnZQotZW5vdWdoIHRoZW4gdGhlIHRyYW5zbGF0aW9uIHN0ZXAgZW5kcyB1cCBhY3RpbmcgbGlrZSBhIGNvbXBpbGF0aW9uIHN0ZXAsCi1yb2JiaW5nIHlvdSBvZiB0aGUgcmFwaWQgZGV2ZWxvcG1lbnQgcHJvY2VzcyB5b3UgYXJlIHVzZWQgdG8gd2l0aCBQeXRob24uCi1PYnZpb3VzbHkgdGhlIHRpbWUgcmVxdWlyZWQgdG8gdHJhbnNsYXRlIGEgcHJvamVjdCB3aWxsIHZhcnksIHNvIGRvIGFuCi1leHBlcmltZW50YWwgdHJhbnNsYXRpb24ganVzdCB0byBzZWUgaG93IGxvbmcgaXQgdGFrZXMgdG8gZXZhbHVhdGUgd2hldGhlciB5b3UKLXByZWZlciB0aGlzIGFwcHJvYWNoIGNvbXBhcmVkIHRvIHVzaW5nIDpyZWY6YHVzZV9zYW1lX3NvdXJjZWAgb3Igc2ltcGx5IGtlZXBpbmcKLWEgc2VwYXJhdGUgUHl0aG9uIDMgY29kZWJhc2UuCi0KLUJlbG93IGFyZSB0aGUgdHlwaWNhbCBzdGVwcyB0YWtlbiBieSBhIHByb2plY3Qgd2hpY2ggdHJpZXMgdG8gc3VwcG9ydAotUHl0aG9uIDIgJiAzIHdoaWxlIGtlZXBpbmcgdGhlIGNvZGUgZGlyZWN0bHkgZXhlY3V0YWJsZSBieSBQeXRob24gMi4KLQorVG8gaGVscCB3aXRoIHdyaXRpbmcgc291cmNlLWNvbXBhdGlibGUgY29kZSB1c2luZyBvbmUgb2YgdGhlIHByb2plY3RzIG1lbnRpb25lZAoraW4gYFByb2plY3RzIHRvIENvbnNpZGVyYF8sIGNvbnNpZGVyIGZvbGxvd2luZyB0aGUgYmVsb3cgc3VnZ2VzdGlvbnMuIFNvbWUgb2YKK3RoZW0gYXJlIGhhbmRsZWQgYnkgdGhlIHN1Z2dlc3RlZCBwcm9qZWN0cywgc28gaWYgeW91IGRvIHVzZSBvbmUgb2YgdGhlbSB0aGVuCityZWFkIHRoZWlyIGRvY3VtZW50YXRpb24gZmlyc3QgdG8gc2VlIHdoaWNoIHN1Z2dlc3Rpb25zIGJlbG93IHdpbGwgdGFrZW4gY2FyZSBvZgorZm9yIHlvdS4KIAogU3VwcG9ydCBQeXRob24gMi43Ci0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLy8vLy8vLy8vLy8vLy8vLwogCiBBcyBhIGZpcnN0IHN0ZXAsIG1ha2Ugc3VyZSB0aGF0IHlvdXIgcHJvamVjdCBpcyBjb21wYXRpYmxlIHdpdGggYFB5dGhvbiAyLjdgXy4KIFRoaXMgaXMganVzdCBnb29kIHRvIGRvIGFzIFB5dGhvbiAyLjcgaXMgdGhlIGxhc3QgcmVsZWFzZSBvZiBQeXRob24gMiBhbmQgdGh1cwogd2lsbCBiZSB1c2VkIGZvciBhIHJhdGhlciBsb25nIHRpbWUuIEl0IGFsc28gYWxsb3dzIGZvciB1c2Ugb2YgdGhlIGBgLTNgYCBmbGFnCi10byBQeXRob24gdG8gaGVscCBkaXNjb3ZlciBwbGFjZXMgaW4geW91ciBjb2RlIHdoaWNoIDJ0bzMgY2Fubm90IGhhbmRsZSBidXQgYXJlCi1rbm93biB0byBjYXVzZSBpc3N1ZXMuCit0byBQeXRob24gdG8gaGVscCBkaXNjb3ZlciBwbGFjZXMgaW4geW91ciBjb2RlIHdoZXJlIGNvbXBhdGliaWxpdHkgbWlnaHQgYmUgYW4KK2lzc3VlICh0aGUgYGAtM2BgIGZsYWcgaXMgaW4gUHl0aG9uIDIuNiBidXQgUHl0aG9uIDIuNyBhZGRzIG1vcmUgd2FybmluZ3MpLgogCiBUcnkgdG8gU3VwcG9ydCBgUHl0aG9uIDIuNmBfIGFuZCBOZXdlciBPbmx5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIFdoaWxlIG5vdCBwb3NzaWJsZSBmb3IgYWxsIHByb2plY3RzLCBpZiB5b3UgY2FuIHN1cHBvcnQgYFB5dGhvbiAyLjZgXyBhbmQgbmV3ZXIKICoqb25seSoqLCB5b3VyIGxpZmUgd2lsbCBiZSBtdWNoIGVhc2llci4gVmFyaW91cyBmdXR1cmUgc3RhdGVtZW50cywgc3RkbGliCiBhZGRpdGlvbnMsIGV0Yy4gZXhpc3Qgb25seSBpbiBQeXRob24gMi42IGFuZCBsYXRlciB3aGljaCBncmVhdGx5IGFzc2lzdCBpbgotcG9ydGluZyB0byBQeXRob24gMy4gQnV0IGlmIHlvdSBwcm9qZWN0IG11c3Qga2VlcCBzdXBwb3J0IGZvciBgUHl0aG9uIDIuNWBfIChvcgotZXZlbiBgUHl0aG9uIDIuNGBfKSB0aGVuIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHBvcnQgdG8gUHl0aG9uIDMuCitzdXBwb3J0aW5nIFB5dGhvbiAzLiBCdXQgaWYgeW91IHByb2plY3QgbXVzdCBrZWVwIHN1cHBvcnQgZm9yIGBQeXRob24gMi41YF8gdGhlbgoraXQgaXMgc3RpbGwgcG9zc2libGUgdG8gc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCBQeXRob24gMy4KIAogQmVsb3cgYXJlIHRoZSBiZW5lZml0cyB5b3UgZ2FpbiBpZiB5b3Ugb25seSBoYXZlIHRvIHN1cHBvcnQgUHl0aG9uIDIuNiBhbmQKIG5ld2VyLiBTb21lIG9mIHRoZXNlIG9wdGlvbnMgYXJlIHBlcnNvbmFsIGNob2ljZSB3aGlsZSBvdGhlcnMgYXJlCiAqKnN0cm9uZ2x5KiogcmVjb21tZW5kZWQgKHRoZSBvbmVzIHRoYXQgYXJlIG1vcmUgZm9yIHBlcnNvbmFsIGNob2ljZSBhcmUKIGxhYmVsZWQgYXMgc3VjaCkuICBJZiB5b3UgY29udGludWUgdG8gc3VwcG9ydCBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24gdGhlbiB5b3UKLWF0IGxlYXN0IG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBzaXR1YXRpb25zIHRoYXQgdGhlc2Ugc29sdXRpb25zIGZpeC4KK2F0IGxlYXN0IG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBzaXR1YXRpb25zIHRoYXQgdGhlc2Ugc29sdXRpb25zIGZpeCBhbmQgaGFuZGxlCit0aGVtIGFwcHJvcHJpYXRlbHkgKHdoaWNoIGlzIHdoZXJlIGxpYnJhcnkgaGVscCBmcm9tIGUuZy4gc2l4XyBjb21lcyBpbiBoYW5keSkuCiAKIAogYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uYGAKICcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCiAKLVRoaXMgaXMgYSBwZXJzb25hbCBjaG9pY2UuIDJ0bzMgaGFuZGxlcyB0aGUgdHJhbnNsYXRpb24gZnJvbSB0aGUgcHJpbnQKLXN0YXRlbWVudCB0byB0aGUgcHJpbnQgZnVuY3Rpb24gcmF0aGVyIHdlbGwgc28gdGhpcyBpcyBhbiBvcHRpb25hbCBzdGVwLiBUaGlzCi1mdXR1cmUgc3RhdGVtZW50IGRvZXMgaGVscCwgdGhvdWdoLCB3aXRoIGdldHRpbmcgdXNlZCB0byB0eXBpbmcKLWBgcHJpbnQoJ0hlbGxvLCBXb3JsZCcpYGAgaW5zdGVhZCBvZiBgYHByaW50ICdIZWxsbywgV29ybGQnYGAuCitJdCB3aWxsIG5vdCBvbmx5IGdldCB5b3UgdXNlZCB0byB0eXBpbmcgYGBwcmludCgpYGAgYXMgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEKK3N0YXRlbWVudCwgYnV0IGl0IHdpbGwgYWxzbyBnaXZlIHlvdSB0aGUgdmFyaW91cyBiZW5lZml0cyB0aGUgZnVuY3Rpb24gaGFzIG92ZXIKK3RoZSBQeXRob24gMiBzdGF0ZW1lbnQgKHNpeF8gcHJvdmlkZXMgYSBmdW5jdGlvbiBpZiB5b3Ugc3VwcG9ydCBQeXRob24gMi41IG9yCitvbGRlcikuCiAKIAogYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHNgYAogJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJwogCi1Bbm90aGVyIHBlcnNvbmFsIGNob2ljZS4gWW91IGNhbiBhbHdheXMgbWFyayB3aGF0IHlvdSB3YW50IHRvIGJlIGEgKHVuaWNvZGUpCi1zdHJpbmcgd2l0aCBhIGBgdWBgIHByZWZpeCB0byBnZXQgdGhlIHNhbWUgZWZmZWN0LiBCdXQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCi15b3UgdXNlIHRoaXMgZnV0dXJlIHN0YXRlbWVudCBvciBub3QsIHlvdSAqKm11c3QqKiBtYWtlIHN1cmUgeW91IGtub3cgZXhhY3RseQotd2hpY2ggUHl0aG9uIDIgc3RyaW5ncyB5b3Ugd2FudCB0byBiZSBieXRlcywgYW5kIHdoaWNoIGFyZSB0byBiZSBzdHJpbmdzLiBUaGlzCi1tZWFucyB5b3Ugc2hvdWxkLCAqKmF0IG1pbmltdW0qKiBtYXJrIGFsbCBzdHJpbmdzIHRoYXQgYXJlIG1lYW50IHRvIGJlIHRleHQKLXN0cmluZ3Mgd2l0aCBhIGBgdWBgIHByZWZpeCBpZiB5b3UgZG8gbm90IHVzZSB0aGlzIGZ1dHVyZSBzdGF0ZW1lbnQuIFB5dGhvbiAzLjMKLWFsbG93cyBzdHJpbmdzIHRvIGNvbnRpbnVlIHRvIGhhdmUgdGhlIGBgdWBgIHByZWZpeCAoaXQncyBhIG5vLW9wIGluIHRoYXQgY2FzZSkKLXRvIG1ha2UgaXQgZWFzaWVyIGZvciBjb2RlIHRvIGJlIHNvdXJjZS1jb21wYXRpYmxlIGJldHdlZW4gUHl0aG9uIDIgJiAzLgorSWYgeW91IGNob29zZSB0byB1c2UgdGhpcyBmdXR1cmUgc3RhdGVtZW50IHRoZW4gYWxsIHN0cmluZyBsaXRlcmFscyBpbgorUHl0aG9uIDIgd2lsbCBiZSBhc3N1bWVkIHRvIGJlIFVuaWNvZGUgKGFzIGlzIGFscmVhZHkgdGhlIGNhc2UgaW4gUHl0aG9uIDMpLgorSWYgeW91IGNob29zZSBub3QgdG8gdXNlIHRoaXMgZnV0dXJlIHN0YXRlbWVudCB0aGVuIHlvdSBzaG91bGQgbWFyayBhbGwgb2YgeW91cgordGV4dCBzdHJpbmdzIHdpdGggYSBgYHVgYCBwcmVmaXggYW5kIG9ubHkgc3VwcG9ydCBQeXRob24gMy4zIG9yIG5ld2VyLiBCdXQgeW91CithcmUgKipzdHJvbmdseSoqIGFkdmlzZWQgdG8gZG8gb25lIG9yIHRoZSBvdGhlciAoc2l4XyBwcm92aWRlcyBhIGZ1bmN0aW9uIGluCitjYXNlIHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgZnV0dXJlIHN0YXRlbWVudCAqKmFuZCoqIHlvdSB3YW50IHRvIHN1cHBvcnQKK1B5dGhvbiAzLjIgb3Igb2xkZXIpLgogCiAKLUJ5dGVzIGxpdGVyYWxzCi0nJycnJycnJycnJycnJworQnl0ZXMvc3RyaW5nIGxpdGVyYWxzCisnJycnJycnJycnJycnJycnJycnJycKIAotVGhpcyBpcyBhICoqdmVyeSoqIGltcG9ydGFudCBvbmUuIFRoZSBhYmlsaXR5IHRvIHByZWZpeCBQeXRob24gMiBzdHJpbmdzIHRoYXQKLWFyZSBtZWFudCB0byBjb250YWluIGJ5dGVzIHdpdGggYSBgYGJgYCBwcmVmaXggaGVscCB0byB2ZXJ5IGNsZWFybHkgZGVsaW5lYXRlCi13aGF0IGlzIGFuZCBpcyBub3QgYSBQeXRob24gMyBzdHJpbmcuIFdoZW4geW91IHJ1biAydG8zIG9uIGNvZGUsIGFsbCBQeXRob24gMgotc3RyaW5ncyBiZWNvbWUgUHl0aG9uIDMgc3RyaW5ncyAqKnVubGVzcyoqIHRoZXkgYXJlIHByZWZpeGVkIHdpdGggYGBiYGAuCitUaGlzIGlzIGEgKip2ZXJ5KiogaW1wb3J0YW50IG9uZS4gUHJlZml4IFB5dGhvbiAyIHN0cmluZ3MgdGhhdAorYXJlIG1lYW50IHRvIGNvbnRhaW4gYnl0ZXMgd2l0aCBhIGBgYmBgIHByZWZpeCB0byB2ZXJ5IGNsZWFybHkgZGVsaW5lYXRlCit3aGF0IGlzIGFuZCBpcyBub3QgYSBQeXRob24gMyB0ZXh0IHN0cmluZyAoc2l4XyBwcm92aWRlcyBhIGZ1bmN0aW9uIHRvIHVzZSBmb3IKK1B5dGhvbiAyLjUgY29tcGF0aWJpbGl0eSkuCiAKIFRoaXMgcG9pbnQgY2Fubm90IGJlIHN0cmVzc2VkIGVub3VnaDogbWFrZSBzdXJlIHlvdSBrbm93IHdoYXQgYWxsIG9mIHlvdXIgc3RyaW5nCi1saXRlcmFscyBpbiBQeXRob24gMiBhcmUgbWVhbnQgdG8gYmVjb21lIGluIFB5dGhvbiAzLiBBbnkgc3RyaW5nIGxpdGVyYWwgdGhhdAorbGl0ZXJhbHMgaW4gUHl0aG9uIDIgYXJlIG1lYW50IHRvIGJlIGluIFB5dGhvbiAzLiBBbnkgc3RyaW5nIGxpdGVyYWwgdGhhdAogc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYnl0ZXMgc2hvdWxkIGhhdmUgdGhlIGBgYmBgIHByZWZpeC4gQW55IHN0cmluZyBsaXRlcmFsCiB0aGF0IHNob3VsZCBiZSBVbmljb2RlL3RleHQgaW4gUHl0aG9uIDIgc2hvdWxkIGVpdGhlciBoYXZlIHRoZSBgYHVgYCBsaXRlcmFsCiAoc3VwcG9ydGVkLCBidXQgaWdub3JlZCwgaW4gUHl0aG9uIDMuMyBhbmQgbGF0ZXIpIG9yIHlvdSBzaG91bGQgaGF2ZQogYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHNgYCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLiBCdXQgdGhlIGtleQotcG9pbnQgaXMgeW91IHNob3VsZCBrbm93IGhvdyBQeXRob24gMyB3aWxsIHRyZWF0IGV2ZXJ5b25lIG9uZSBvZiB5b3VyIHN0cmluZworcG9pbnQgaXMgeW91IHNob3VsZCBrbm93IGhvdyBQeXRob24gMyB3aWxsIHRyZWF0IGV2ZXJ5IG9uZSBvbmUgb2YgeW91ciBzdHJpbmcKIGxpdGVyYWxzIGFuZCB5b3Ugc2hvdWxkIG1hcmsgdGhlbSBhcyBhcHByb3ByaWF0ZS4KIAogVGhlcmUgYXJlIHNvbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiBieXRlIGxpdGVyYWxzIGluIFB5dGhvbiAyIGFuZCB0aG9zZSBpbgogUHl0aG9uIDMgdGhhbmtzIHRvIHRoZSBieXRlcyB0eXBlIGp1c3QgYmVpbmcgYW4gYWxpYXMgdG8gYGBzdHJgYCBpbiBQeXRob24gMi4KLVByb2JhYmx5IHRoZSBiaWdnZXN0ICJnb3RjaGEiIGlzIHRoYXQgaW5kZXhpbmcgcmVzdWx0cyBpbiBkaWZmZXJlbnQgdmFsdWVzLiBJbgotUHl0aG9uIDIsIHRoZSB2YWx1ZSBvZiBgYGIncHknWzFdYGAgaXMgYGAneSdgYCwgd2hpbGUgaW4gUHl0aG9uIDMgaXQncyBgYDEyMWBgLgotWW91IGNhbiBhdm9pZCB0aGlzIGRpc3Bhcml0eSBieSBhbHdheXMgc2xpY2luZyBhdCB0aGUgc2l6ZSBvZiBhIHNpbmdsZSBlbGVtZW50OgotYGBiJ3B5J1sxOjJdYGAgaXMgYGAneSdgYCBpbiBQeXRob24gMiBhbmQgYGBiJ3knYGAgaW4gUHl0aG9uIDMgKGkuZS4sIGNsb3NlCi1lbm91Z2gpLgorU2VlIHRoZSBgSGFuZGxlIENvbW1vbiAiR290Y2hhcyJgXyBzZWN0aW9uIGZvciB3aGF0IHRvIHdhdGNoIG91dCBmb3IuCiAKLVlvdSBjYW5ub3QgY29uY2F0ZW5hdGUgYnl0ZXMgYW5kIHN0cmluZ3MgaW4gUHl0aG9uIDMuIEJ1dCBzaW5jZSBQeXRob24KLTIgaGFzIGJ5dGVzIGFsaWFzZWQgdG8gYGBzdHJgYCwgaXQgd2lsbCBzdWNjZWVkOiBgYGInYScgKyB1J2InYGAgd29ya3MgaW4KLVB5dGhvbiAyLCBidXQgYGBiJ2EnICsgJ2InYGAgaW4gUHl0aG9uIDMgaXMgYSA6ZXhjOmBUeXBlRXJyb3JgLiBBIHNpbWlsYXIgaXNzdWUKLWFsc28gY29tZXMgYWJvdXQgd2hlbiBkb2luZyBjb21wYXJpc29ucyBiZXR3ZWVuIGJ5dGVzIGFuZCBzdHJpbmdzLgorYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydGBgCisnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKK0Rpc2N1c3NlZCBpbiBtb3JlIGRldGFpbCBiZWxvdywgYnV0IHlvdSBzaG91bGQgdXNlIHRoaXMgZnV0dXJlIHN0YXRlbWVudCB0bworcHJldmVudCB5b3Vyc2VsZiBmcm9tIGFjY2lkZW50YWxseSB1c2luZyBpbXBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzLgogCiAKIFN1cHBvcnRpbmcgYFB5dGhvbiAyLjVgXyBhbmQgTmV3ZXIgT25seQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogSWYgeW91IGFyZSBzdXBwb3J0aW5nIGBQeXRob24gMi41YF8gYW5kIG5ld2VyIHRoZXJlIGFyZSBzdGlsbCBzb21lIGZlYXR1cmVzIG9mCiBQeXRob24gdGhhdCB5b3UgY2FuIHV0aWxpemUuCkBAIC0yNzEsNyArMTk4LDcgQEAKICcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJwogCiBJbXBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzIChlLmcuLCBpbXBvcnRpbmcgYGBzcGFtLmJhY29uYGAgZnJvbSB3aXRoaW4KLWBgc3BhbS5lZ2dzYGAgd2l0aCB0aGUgc3RhdGVtZW50IGBgaW1wb3J0IGJhY29uYGApIGRvZXMgbm90IHdvcmsgaW4gUHl0aG9uIDMuCitgYHNwYW0uZWdnc2BgIHdpdGggdGhlIHN0YXRlbWVudCBgYGltcG9ydCBiYWNvbmBgKSBkbyBub3Qgd29yayBpbiBQeXRob24gMy4KIFRoaXMgZnV0dXJlIHN0YXRlbWVudCBtb3ZlcyBhd2F5IGZyb20gdGhhdCBhbmQgYWxsb3dzIHRoZSB1c2Ugb2YgZXhwbGljaXQKIHJlbGF0aXZlIGltcG9ydHMgKGUuZy4sIGBgZnJvbSAuIGltcG9ydCBiYWNvbmBgKS4KIApAQCAtMjgxLDcgKzIwOCw3IEBACiB0aGUgc3RhdGVtZW50LCBidXQgeW91IHN0aWxsIHdhbnQgdGhlIF9fZnV0dXJlX18gc3RhdGVtZW50IHRvIHByZXZlbnQgaW1wbGljaXQKIHJlbGF0aXZlIGltcG9ydHMuIEluIGBQeXRob24gMi43YF8gdGhlIF9fZnV0dXJlX18gc3RhdGVtZW50IGlzIG5vdCBuZWVkZWQuIEluCiBvdGhlciB3b3JkcywgdW5sZXNzIHlvdSBhcmUgb25seSBzdXBwb3J0aW5nIFB5dGhvbiAyLjcgb3IgYSB2ZXJzaW9uIGVhcmxpZXIKLXRoYW4gUHl0aG9uIDIuNSwgdXNlIHRoZSBfX2Z1dHVyZV9fIHN0YXRlbWVudC4KK3RoYW4gUHl0aG9uIDIuNSwgdXNlIHRoaXMgX19mdXR1cmVfXyBzdGF0ZW1lbnQuCiAKIAogTWFyayBhbGwgVW5pY29kZSBzdHJpbmdzIHdpdGggYSBgYHVgYCBwcmVmaXgKQEAgLTI5MCwxNyArMjE3LDY1IEBACiBXaGlsZSBQeXRob24gMi42IGhhcyBhIGBgX19mdXR1cmVfX2BgIHN0YXRlbWVudCB0byBhdXRvbWF0aWNhbGx5IGNhdXNlIFB5dGhvbiAyCiB0byB0cmVhdCBhbGwgc3RyaW5nIGxpdGVyYWxzIGFzIFVuaWNvZGUsIFB5dGhvbiAyLjUgZG9lcyBub3QgaGF2ZSB0aGF0IHNob3J0Y3V0LgogVGhpcyBtZWFucyB5b3Ugc2hvdWxkIGdvIHRocm91Z2ggYW5kIG1hcmsgYWxsIHN0cmluZyBsaXRlcmFscyB3aXRoIGEgYGB1YGAKLXByZWZpeCB0byB0dXJuIHRoZW0gZXhwbGljaXRseSBpbnRvIFVuaWNvZGUgc3RyaW5ncyB3aGVyZSBhcHByb3ByaWF0ZS4gVGhhdAotbGVhdmVzIGFsbCB1bm1hcmtlZCBzdHJpbmcgbGl0ZXJhbHMgdG8gYmUgY29uc2lkZXJlZCBieXRlIGxpdGVyYWxzIGluIFB5dGhvbiAzLgorcHJlZml4IHRvIHR1cm4gdGhlbSBleHBsaWNpdGx5IGludG8gdGV4dCBzdHJpbmdzIHdoZXJlIGFwcHJvcHJpYXRlIGFuZCBvbmx5CitzdXBwb3J0IFB5dGhvbiAzLjMgb3IgbmV3ZXIuIE90aGVyd2lzZSB1c2UgYSBwcm9qZWN0IGxpa2Ugc2l4XyB3aGljaCBwcm92aWRlcyBhCitmdW5jdGlvbiB0byBwYXNzIGFsbCB0ZXh0IHN0cmluZyBsaXRlcmFscyB0aHJvdWdoLgogCiAKK0NhcHR1cmluZyB0aGUgQ3VycmVudGx5IFJhaXNlZCBFeGNlcHRpb24KKycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKKworSW4gUHl0aG9uIDIuNSBhbmQgZWFybGllciB0aGUgc3ludGF4IHRvIGFjY2VzcyB0aGUgY3VycmVudCBleGNlcHRpb24gaXM6OgorCisgICB0cnk6CisgICAgIHJhaXNlIEV4Y2VwdGlvbigpCisgICBleGNlcHQgRXhjZXB0aW9uLCBleGM6CisgICAgICMgQ3VycmVudCBleGNlcHRpb24gaXMgJ2V4YycuCisgICAgIHBhc3MKKworVGhpcyBzeW50YXggY2hhbmdlZCBpbiBQeXRob24gMyAoYW5kIGJhY2twb3J0ZWQgdG8gYFB5dGhvbiAyLjZgXyBhbmQgbGF0ZXIpCit0bzo6CisKKyAgIHRyeToKKyAgICAgcmFpc2UgRXhjZXB0aW9uKCkKKyAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAjIEN1cnJlbnQgZXhjZXB0aW9uIGlzICdleGMnLgorICAgICAjIEluIFB5dGhvbiAzLCAnZXhjJyBpcyByZXN0cmljdGVkIHRvIHRoZSBibG9jazsgaW4gUHl0aG9uIDIuNi8yLjcgaXQgd2lsbCAibGVhayIuCisgICAgIHBhc3MKKworQmVjYXVzZSBvZiB0aGlzIHN5bnRheCBjaGFuZ2UgeW91IG11c3QgY2hhbmdlIGhvdyB5b3UgY2FwdHVyZSB0aGUgY3VycmVudAorZXhjZXB0aW9uIGluIFB5dGhvbiAyLjUgYW5kIGVhcmxpZXIgdG86OgorCisgICB0cnk6CisgICAgIHJhaXNlIEV4Y2VwdGlvbigpCisgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICBpbXBvcnQgc3lzCisgICAgIGV4YyA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICMgQ3VycmVudCBleGNlcHRpb24gaXMgJ2V4YycuCisgICAgIHBhc3MKKworWW91IGNhbiBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmFpc2VkIGV4Y2VwdGlvbiBmcm9tCis6ZnVuYzpgc3lzLmV4Y19pbmZvYCB0aGFuIHNpbXBseSB0aGUgY3VycmVudCBleGNlcHRpb24gaW5zdGFuY2UsIGJ1dCB5b3UgbW9zdAorbGlrZWx5IGRvbid0IG5lZWQgaXQuCisKKy4uIG5vdGU6OgorICAgSW4gUHl0aG9uIDMsIHRoZSB0cmFjZWJhY2sgaXMgYXR0YWNoZWQgdG8gdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZQorICAgdGhyb3VnaCB0aGUgYGBfX3RyYWNlYmFja19fYGAgYXR0cmlidXRlLiBJZiB0aGUgaW5zdGFuY2UgaXMgc2F2ZWQgaW4KKyAgIGEgbG9jYWwgdmFyaWFibGUgdGhhdCBwZXJzaXN0cyBvdXRzaWRlIG9mIHRoZSBgYGV4Y2VwdGBgIGJsb2NrLCB0aGUKKyAgIHRyYWNlYmFjayB3aWxsIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZSB3aXRoIHRoZSBjdXJyZW50IGZyYW1lIGFuZCBpdHMKKyAgIGRpY3Rpb25hcnkgb2YgbG9jYWwgdmFyaWFibGVzLiAgVGhpcyB3aWxsIGRlbGF5IHJlY2xhaW1pbmcgZGVhZAorICAgcmVzb3VyY2VzIHVudGlsIHRoZSBuZXh0IGN5Y2xpYyA6dGVybTpgZ2FyYmFnZSBjb2xsZWN0aW9uYCBwYXNzLgorCisgICBJbiBQeXRob24gMiwgdGhpcyBwcm9ibGVtIG9ubHkgb2NjdXJzIGlmIHlvdSBzYXZlIHRoZSB0cmFjZWJhY2sgaXRzZWxmCisgICAoZS5nLiB0aGUgdGhpcmQgZWxlbWVudCBvZiB0aGUgdHVwbGUgcmV0dXJuZWQgYnkgOmZ1bmM6YHN5cy5leGNfaW5mb2ApCisgICBpbiBhIHZhcmlhYmxlLgorCiAKIEhhbmRsZSBDb21tb24gIkdvdGNoYXMiCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotVGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB0aGF0IGp1c3QgY29uc2lzdGVudGx5IGNvbWUgdXAgYXMgc3RpY2tpbmcgcG9pbnRzIGZvcgotcGVvcGxlIHdoaWNoIDJ0bzMgY2Fubm90IGhhbmRsZSBhdXRvbWF0aWNhbGx5IG9yIGNhbiBlYXNpbHkgYmUgZG9uZSBpbiBQeXRob24gMgotdG8gaGVscCBtb2Rlcm5pemUgeW91ciBjb2RlLgorVGhlc2UgYXJlIHRoaW5ncyB0byB3YXRjaCBvdXQgZm9yIG5vIG1hdHRlciB3aGF0IHZlcnNpb24gb2YgUHl0aG9uIDIgeW91IGFyZQorc3VwcG9ydGluZyB3aGljaCBhcmUgbm90IHN5bnRhY3RpYyBjb25zaWRlcmF0aW9ucy4KIAogCiBgYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb25gYApAQCAtMzU3LDkgKzMzMiw5IEBACiB0aGUgYnl0ZXMvc3RyaW5nIGRpY2hvdG9teS4gQmVjYXVzZSBQeXRob24gMiBhbGxvd2VkIHRoZSBgYHN0cmBgIHR5cGUgdG8gaG9sZAogdGV4dHVhbCBkYXRhLCBwZW9wbGUgaGF2ZSBvdmVyIHRoZSB5ZWFycyBiZWVuIHJhdGhlciBsb29zZSBpbiB0aGVpciBkZWxpbmVhdGlvbgogb2Ygd2hhdCBgYHN0cmBgIGluc3RhbmNlcyBoZWxkIHRleHQgY29tcGFyZWQgdG8gYnl0ZXMuIEluIFB5dGhvbiAzIHlvdSBjYW5ub3QKLWJlIHNvIGNhcmUtZnJlZSBhbnltb3JlIGFuZCBuZWVkIHRvIHByb3Blcmx5IGhhbmRsZSB0aGUgZGlmZmVyZW5jZS4gVGhlIGtleQorYmUgc28gY2FyZS1mcmVlIGFueW1vcmUgYW5kIG5lZWQgdG8gcHJvcGVybHkgaGFuZGxlIHRoZSBkaWZmZXJlbmNlLiBUaGUga2V5IHRvCiBoYW5kbGluZyB0aGlzIGlzc3VlIGlzIHRvIG1ha2Ugc3VyZSB0aGF0ICoqZXZlcnkqKiBzdHJpbmcgbGl0ZXJhbCBpbiB5b3VyCi1QeXRob24gMiBjb2RlIGlzIGVpdGhlciBzeW50YWN0aWNhbGx5IG9mIGZ1bmN0aW9uYWxseSBtYXJrZWQgYXMgZWl0aGVyIGJ5dGVzIG9yCitQeXRob24gMiBjb2RlIGlzIGVpdGhlciBzeW50YWN0aWNhbGx5IG9yIGZ1bmN0aW9uYWxseSBtYXJrZWQgYXMgZWl0aGVyIGJ5dGVzIG9yCiB0ZXh0IGRhdGEuIEFmdGVyIHRoaXMgaXMgZG9uZSB5b3UgdGhlbiBuZWVkIHRvIG1ha2Ugc3VyZSB5b3VyIEFQSXMgYXJlIGRlc2lnbmVkCiB0byBlaXRoZXIgaGFuZGxlIGEgc3BlY2lmaWMgdHlwZSBvciBtYWRlIHRvIGJlIHByb3Blcmx5IHBvbHltb3JwaGljLgogCkBAIC00NjYsMTQgKzQ0MSw3IEBACiBoYXBwZW4gdG8gdXNlIHRoZSBgYHVuaWNvZGUoc2VsZikuZW5jb2RlKCd1dGY4JylgYCBpZGlvbSBhcyB0aGUgYm9keSBvZiB5b3VyCiBgYF9fc3RyX18oKWBgIG1ldGhvZCkuCiAKLVRoZXJlIGFyZSB0d28gd2F5cyB0byBzb2x2ZSB0aGlzIGlzc3VlLiBPbmUgaXMgdG8gdXNlIGEgY3VzdG9tIDJ0bzMgZml4ZXIuIFRoZQotYmxvZyBwb3N0IGF0IGh0dHA6Ly9sdWN1bXIucG9jb28ub3JnLzIwMTEvMS8yMi9mb3J3YXJkcy1jb21wYXRpYmxlLXB5dGhvbi8KLXNwZWNpZmllcyBob3cgdG8gZG8gdGhpcy4gVGhhdCB3aWxsIGFsbG93IDJ0bzMgdG8gY2hhbmdlIGFsbCBpbnN0YW5jZXMgb2YgYGBkZWYKLV9fdW5pY29kZShzZWxmKTogLi4uYGAgdG8gYGBkZWYgX19zdHJfXyhzZWxmKTogLi4uYGAuIFRoaXMgZG9lcyByZXF1aXJlIHRoYXQgeW91Ci1kZWZpbmUgeW91ciBgYF9fc3RyX18oKWBgIG1ldGhvZCBpbiBQeXRob24gMiBiZWZvcmUgeW91ciBgYF9fdW5pY29kZV9fKClgYAotbWV0aG9kLgotCi1UaGUgb3RoZXIgb3B0aW9uIGlzIHRvIHVzZSBhIG1peGluIGNsYXNzLiBUaGlzIGFsbG93cyB5b3UgdG8gb25seSBkZWZpbmUgYQorWW91IGNhbiB1c2UgYSBtaXhpbiBjbGFzcyB0byB3b3JrIGFyb3VuZCB0aGlzLiBUaGlzIGFsbG93cyB5b3UgdG8gb25seSBkZWZpbmUgYQogYGBfX3VuaWNvZGVfXygpYGAgbWV0aG9kIGZvciB5b3VyIGNsYXNzIGFuZCBsZXQgdGhlIG1peGluIGRlcml2ZQogYGBfX3N0cl9fKClgYCBmb3IgeW91IChjb2RlIGZyb20KIGh0dHA6Ly9sdWN1bXIucG9jb28ub3JnLzIwMTEvMS8yMi9mb3J3YXJkcy1jb21wYXRpYmxlLXB5dGhvbi8pOjoKQEAgLTUxNiw2ICs0ODQsNyBAQAogCiBFdmVuIGJldHRlciBpcyB0byB1c2UgdGhlIGRvY3VtZW50ZWQgYXR0cmlidXRlcyB0aGUgZXhjZXB0aW9uIHByb3ZpZGVzLgogCisKIERvbid0IHVzZSBgYF9fZ2V0c2xpY2VfX2BgICYgRnJpZW5kcwogJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCiAKQEAgLTUyNywyMyArNDk2LDIzIEBACiBVcGRhdGluZyBkb2N0ZXN0cwogJycnJycnJycnJycnJycnJycKIAotMnRvM18gd2lsbCBhdHRlbXB0IHRvIGdlbmVyYXRlIGZpeGVzIGZvciBkb2N0ZXN0cyB0aGF0IGl0IGNvbWVzIGFjcm9zcy4gSXQncwotbm90IHBlcmZlY3QsIHRob3VnaC4gSWYgeW91IHdyb3RlIGEgbW9ub2xpdGhpYyBzZXQgb2YgZG9jdGVzdHMgKGUuZy4sIGEgc2luZ2xlCi1kb2NzdHJpbmcgY29udGFpbmluZyBhbGwgb2YgeW91ciBkb2N0ZXN0cyksIHlvdSBzaG91bGQgYXQgbGVhc3QgY29uc2lkZXIKLWJyZWFraW5nIHRoZSBkb2N0ZXN0cyB1cCBpbnRvIHNtYWxsZXIgcGllY2VzIHRvIG1ha2UgaXQgbW9yZSBtYW5hZ2VhYmxlIHRvIGZpeC4KLU90aGVyd2lzZSBpdCBtaWdodCB2ZXJ5IHdlbGwgYmUgd29ydGggeW91ciB0aW1lIGFuZCBlZmZvcnQgdG8gcG9ydCB5b3VyIHRlc3RzCi10byA6bW9kOmB1bml0dGVzdGAuCitEb24ndCBmb3JnZXQgdG8gbWFrZSB0aGVtIFB5dGhvbiAyLzMgY29tcGF0aWJsZSBhcyB3ZWxsLiBJZiB5b3Ugd3JvdGUgYQorbW9ub2xpdGhpYyBzZXQgb2YgZG9jdGVzdHMgKGUuZy4sIGEgc2luZ2xlIGRvY3N0cmluZyBjb250YWluaW5nIGFsbCBvZiB5b3VyCitkb2N0ZXN0cyksIHlvdSBzaG91bGQgYXQgbGVhc3QgY29uc2lkZXIgYnJlYWtpbmcgdGhlIGRvY3Rlc3RzIHVwIGludG8gc21hbGxlcgorcGllY2VzIHRvIG1ha2UgaXQgbW9yZSBtYW5hZ2VhYmxlIHRvIGZpeC4gT3RoZXJ3aXNlIGl0IG1pZ2h0IHZlcnkgd2VsbCBiZSB3b3J0aAoreW91ciB0aW1lIGFuZCBlZmZvcnQgdG8gcG9ydCB5b3VyIHRlc3RzIHRvIDptb2Q6YHVuaXR0ZXN0YC4KIAogCi1VcGRhdGUgYG1hcGAgZm9yIGltYmFsYW5jZWQgaW5wdXQgc2VxdWVuY2VzCi0nJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCitVcGRhdGUgYGBtYXBgYCBmb3IgaW1iYWxhbmNlZCBpbnB1dCBzZXF1ZW5jZXMKKycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJwogCi1XaXRoIFB5dGhvbiAyLCBgbWFwYCB3b3VsZCBwYWQgaW5wdXQgc2VxdWVuY2VzIG9mIHVuZXF1YWwgbGVuZ3RoIHdpdGgKLWBOb25lYCB2YWx1ZXMsIHJldHVybmluZyBhIHNlcXVlbmNlIGFzIGxvbmcgYXMgdGhlIGxvbmdlc3QgaW5wdXQgc2VxdWVuY2UuCitXaXRoIFB5dGhvbiAyLCB3aGVuIGBgbWFwYGAgd2FzIGdpdmVuIG1vcmUgdGhhbiBvbmUgaW5wdXQgc2VxdWVuY2UgaXQgd291bGQgcGFkCit0aGUgc2hvcnRlciBzZXF1ZW5jZXMgd2l0aCBgTm9uZWAgdmFsdWVzLCByZXR1cm5pbmcgYSBzZXF1ZW5jZSBhcyBsb25nIGFzIHRoZQorbG9uZ2VzdCBpbnB1dCBzZXF1ZW5jZS4KIAotV2l0aCBQeXRob24gMywgaWYgdGhlIGlucHV0IHNlcXVlbmNlcyB0byBgbWFwYCBhcmUgb2YgdW5lcXVhbCBsZW5ndGgsIGBtYXBgCitXaXRoIFB5dGhvbiAzLCBpZiB0aGUgaW5wdXQgc2VxdWVuY2VzIHRvIGBgbWFwYGAgYXJlIG9mIHVuZXF1YWwgbGVuZ3RoLCBgYG1hcGBgCiB3aWxsIHN0b3AgYXQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoZSBzaG9ydGVzdCBvZiB0aGUgc2VxdWVuY2VzLiBGb3IgZnVsbAotY29tcGF0aWJpbGl0eSB3aXRoIGBtYXBgIGZyb20gUHl0aG9uIDIueCwgYWxzbyB3cmFwIHRoZSBzZXF1ZW5jZXMgaW4KK2NvbXBhdGliaWxpdHkgd2l0aCBgYG1hcGBgIGZyb20gUHl0aG9uIDIueCwgd3JhcCB0aGUgc2VxdWVuY2UgYXJndW1lbnRzIGluCiA6ZnVuYzpgaXRlcnRvb2xzLnppcF9sb25nZXN0YCwgZS5nLiBgYG1hcChmdW5jLCAqc2VxdWVuY2VzKWBgIGJlY29tZXMKIGBgbGlzdChtYXAoZnVuYywgaXRlcnRvb2xzLnppcF9sb25nZXN0KCpzZXF1ZW5jZXMpKSlgYC4KIApAQCAtNTUyLDE3NiArNTIxLDM0IEBACiAKIFdoZW4geW91IHJ1biB5b3VyIGFwcGxpY2F0aW9uJ3MgdGVzdCBzdWl0ZSwgcnVuIGl0IHVzaW5nIHRoZSBgYC0zYGAgZmxhZyBwYXNzZWQKIHRvIFB5dGhvbi4gVGhpcyB3aWxsIGNhdXNlIHZhcmlvdXMgd2FybmluZ3MgdG8gYmUgcmFpc2VkIGR1cmluZyBleGVjdXRpb24gYWJvdXQKLXRoaW5ncyB0aGF0IDJ0bzMgY2Fubm90IGhhbmRsZSBhdXRvbWF0aWNhbGx5IChlLmcuLCBtb2R1bGVzIHRoYXQgaGF2ZSBiZWVuCi1yZW1vdmVkKS4gVHJ5IHRvIGVsaW1pbmF0ZSB0aG9zZSB3YXJuaW5ncyB0byBtYWtlIHlvdXIgY29kZSBldmVuIG1vcmUgcG9ydGFibGUKLXRvIFB5dGhvbiAzLgordGhpbmdzIHRoYXQgYXJlIHNlbWFudGljIGNoYW5nZXMgYmV0d2VlbiBQeXRob24gMiBhbmQgMy4gVHJ5IHRvIGVsaW1pbmF0ZSB0aG9zZQord2FybmluZ3MgdG8gbWFrZSB5b3VyIGNvZGUgZXZlbiBtb3JlIHBvcnRhYmxlIHRvIFB5dGhvbiAzLgogCiAKLVJ1biAydG8zCi0tLS0tLS0tLQorQWx0ZXJuYXRpdmUgQXBwcm9hY2hlcworPT09PT09PT09PT09PT09PT09PT09PQogCi1PbmNlIHlvdSBoYXZlIG1hZGUgeW91ciBQeXRob24gMiBjb2RlIGZ1dHVyZS1jb21wYXRpYmxlIHdpdGggUHl0aG9uIDMsIGl0J3MKLXRpbWUgdG8gdXNlIDJ0bzNfIHRvIGFjdHVhbGx5IHBvcnQgeW91ciBjb2RlLgorV2hpbGUgc3VwcG9ydGluZyBQeXRob24gMiAmIDMgc2ltdWx0YW5lb3VzbHkgaXMgdHlwaWNhbGx5IHRoZSBwcmVmZXJyZWQgY2hvaWNlCitieSBwZW9wbGUgc28gdGhhdCB0aGV5IGNhbiBjb250aW51ZSB0byBpbXByb3ZlIGNvZGUgYW5kIGhhdmUgaXQgd29yayBmb3IgdGhlCittb3N0IG51bWJlciBvZiB1c2VycywgeW91ciBsaWZlIG1heSBiZSBlYXNpZXIgaWYgeW91IG9ubHkgaGF2ZSB0byBzdXBwb3J0IG9uZQorbWFqb3IgdmVyc2lvbiBvZiBQeXRob24gZ29pbmcgZm9yd2FyZC4KKworU3VwcG9ydGluZyBPbmx5IFB5dGhvbiAzIEdvaW5nIEZvcndhcmQgRnJvbSBQeXRob24gMiBDb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGhhdmUgUHl0aG9uIDIgY29kZSBidXQgZ29pbmcgZm9yd2FyZCBvbmx5IHdhbnQgdG8gaW1wcm92ZSBpdCBhcyBQeXRob24gMworY29kZSwgdGhlbiB5b3UgY2FuIHVzZSAydG8zXyB0byB0cmFuc2xhdGUgeW91ciBQeXRob24gMiBjb2RlIHRvIFB5dGhvbiAzIGNvZGUuCitUaGlzIGlzIG9ubHkgcmVjb21tZW5kZWQsIHRob3VnaCwgaWYgeW91ciBjdXJyZW50IHZlcnNpb24gb2YgeW91ciBwcm9qZWN0IGlzCitnb2luZyBpbnRvIG1haW50ZW5hbmNlIG1vZGUgYW5kIHlvdSB3YW50IGFsbCBuZXcgZmVhdHVyZXMgdG8gYmUgZXhjbHVzaXZlIHRvCitQeXRob24gMy4KIAogCi1NYW51YWxseQotJycnJycnJycKK0JhY2twb3J0aW5nIFB5dGhvbiAzIGNvZGUgdG8gUHl0aG9uIDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVG8gbWFudWFsbHkgY29udmVydCBzb3VyY2UgY29kZSB1c2luZyAydG8zXywgeW91IHVzZSB0aGUgYGAydG8zYGAgc2NyaXB0IHRoYXQKLWlzIGluc3RhbGxlZCB3aXRoIFB5dGhvbiAyLjYgYW5kIGxhdGVyLjo6Ci0KLSAgIDJ0bzMgPGRpcmVjdG9yeSBvciBmaWxlIHRvIGNvbnZlcnQ+Ci0KLVRoaXMgd2lsbCBjYXVzZSAydG8zIHRvIHdyaXRlIG91dCBhIGRpZmYgd2l0aCBhbGwgb2YgdGhlIGZpeGVycyBhcHBsaWVkIGZvciB0aGUKLWNvbnZlcnRlZCBzb3VyY2UgY29kZS4gSWYgeW91IHdvdWxkIGxpa2UgMnRvMyB0byBnbyBhaGVhZCBhbmQgYXBwbHkgdGhlIGNoYW5nZXMKLXlvdSBjYW4gcGFzcyBpdCB0aGUgYGAtd2BgIGZsYWc6OgotCi0gICAydG8zIC13IDxzdHVmZiB0byBjb252ZXJ0PgotCi1UaGVyZSBhcmUgb3RoZXIgZmxhZ3MgYXZhaWxhYmxlIHRvIGNvbnRyb2wgZXhhY3RseSB3aGljaCBmaXhlcnMgYXJlIGFwcGxpZWQsCi1ldGMuCi0KLQotRHVyaW5nIEluc3RhbGxhdGlvbgotJycnJycnJycnJycnJycnJycnJwotCi1XaGVuIGEgdXNlciBpbnN0YWxscyB5b3VyIHByb2plY3QgZm9yIFB5dGhvbiAzLCB5b3UgY2FuIGhhdmUgZWl0aGVyCi06bW9kOmBkaXN0dXRpbHNgIG9yIERpc3RyaWJ1dGVfIHJ1biAydG8zXyBvbiB5b3VyIGJlaGFsZi4KLUZvciBkaXN0dXRpbHMsIHVzZSB0aGUgZm9sbG93aW5nIGlkaW9tOjoKLQotICAgdHJ5OiAgIyBQeXRob24gMwotICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5IGltcG9ydCBidWlsZF9weV8ydG8zIGFzIGJ1aWxkX3B5Ci0gICBleGNlcHQgSW1wb3J0RXJyb3I6ICAjIFB5dGhvbiAyCi0gICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfcHkgaW1wb3J0IGJ1aWxkX3B5Ci0KLSAgIHNldHVwKGNtZGNsYXNzID0geydidWlsZF9weSc6IGJ1aWxkX3B5fSwKLSAgICAgIyAuLi4KLSAgICkKLQotRm9yIERpc3RyaWJ1dGU6OgotCi0gICBzZXR1cCh1c2VfMnRvMz1UcnVlLAotICAgICAjIC4uLgotICAgKQotCi1UaGlzIHdpbGwgYWxsb3cgeW91IHRvIG5vdCBoYXZlIHRvIGRpc3RyaWJ1dGUgYSBzZXBhcmF0ZSBQeXRob24gMyB2ZXJzaW9uIG9mCi15b3VyIHByb2plY3QuIEl0IGRvZXMgcmVxdWlyZSwgdGhvdWdoLCB0aGF0IHdoZW4geW91IHBlcmZvcm0gZGV2ZWxvcG1lbnQgdGhhdAoteW91IGF0IGxlYXN0IGJ1aWxkIHlvdXIgcHJvamVjdCBhbmQgdXNlIHRoZSBidWlsdCBQeXRob24gMyBzb3VyY2UgZm9yIHRlc3RpbmcuCi0KLQotVmVyaWZ5ICYgVGVzdAotLS0tLS0tLS0tLS0tLQotCi1BdCB0aGlzIHBvaW50IHlvdSBzaG91bGQgKGhvcGVmdWxseSkgaGF2ZSB5b3VyIHByb2plY3QgY29udmVydGVkIGluIHN1Y2ggYSB3YXkKLXRoYXQgaXQgd29ya3MgaW4gUHl0aG9uIDMuIFZlcmlmeSBpdCBieSBydW5uaW5nIHlvdXIgdW5pdCB0ZXN0cyBhbmQgbWFraW5nIHN1cmUKLW5vdGhpbmcgaGFzIGdvbmUgYXdyeS4gSWYgeW91IG1pc3Mgc29tZXRoaW5nIHRoZW4gZmlndXJlIG91dCBob3cgdG8gZml4IGl0IGluCi1QeXRob24gMywgYmFja3BvcnQgdG8geW91ciBQeXRob24gMiBjb2RlLCBhbmQgcnVuIHlvdXIgY29kZSB0aHJvdWdoIDJ0bzMgYWdhaW4KLXRvIHZlcmlmeSB0aGUgZml4IHRyYW5zZm9ybXMgcHJvcGVybHkuCi0KLQotLi4gXzJ0bzM6IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcHkzay9saWJyYXJ5LzJ0bzMuaHRtbAotLi4gX0Rpc3RyaWJ1dGU6IGh0dHA6Ly9wYWNrYWdlcy5weXRob24ub3JnL2Rpc3RyaWJ1dGUvCi0KLQotLi4gX3VzZV9zYW1lX3NvdXJjZToKLQotUHl0aG9uIDIvMyBDb21wYXRpYmxlIFNvdXJjZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1XaGlsZSBpdCBtYXkgc2VlbSBjb3VudGVyLWludHVpdGl2ZSwgeW91IGNhbiB3cml0ZSBQeXRob24gY29kZSB3aGljaCBpcwotc291cmNlLWNvbXBhdGlibGUgYmV0d2VlbiBQeXRob24gMiAmIDMuIEl0IGRvZXMgbGVhZCB0byBjb2RlIHRoYXQgaXMgbm90Ci1lbnRpcmVseSBpZGlvbWF0aWMgUHl0aG9uIChlLmcuLCBoYXZpbmcgdG8gZXh0cmFjdCB0aGUgY3VycmVudGx5IHJhaXNlZAotZXhjZXB0aW9uIGZyb20gYGBzeXMuZXhjX2luZm8oKVsxXWBgKSwgYnV0IGl0IGNhbiBiZSBydW4gdW5kZXIgUHl0aG9uIDIKLSoqYW5kKiogUHl0aG9uIDMgd2l0aG91dCB1c2luZyAydG8zXyBhcyBhIHRyYW5zbGF0aW9uIHN0ZXAgKGFsdGhvdWdoIHRoZSB0b29sCi1zaG91bGQgYmUgdXNlZCB0byBoZWxwIGZpbmQgcG90ZW50aWFsIHBvcnRhYmlsaXR5IHByb2JsZW1zKS4gVGhpcyBhbGxvd3MgeW91IHRvCi1jb250aW51ZSB0byBoYXZlIGEgcmFwaWQgZGV2ZWxvcG1lbnQgcHJvY2VzcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgeW91IGFyZQotZGV2ZWxvcGluZyB1bmRlciBQeXRob24gMiBvciBQeXRob24gMy4gV2hldGhlciB0aGlzIGFwcHJvYWNoIG9yIHVzaW5nCi06cmVmOmB1c2VfMnRvM2Agd29ya3MgYmVzdCBmb3IgeW91IHdpbGwgYmUgYSBwZXItcHJvamVjdCBkZWNpc2lvbi4KLQotVG8gZ2V0IGEgY29tcGxldGUgaWRlYSBvZiB3aGF0IGlzc3VlcyB5b3Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCwgc2VlIHRoZQotYFdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMGBfLiBPdGhlcnMgaGF2ZSByZW9yZ2FuaXplZCB0aGUgZGF0YSBpbiBvdGhlciBmb3JtYXRzCi1zdWNoIGFzIGh0dHA6Ly9kb2NzLnB5dGhvbnNwcmludHMuY29tL3B5dGhvbjNfcG9ydGluZy9weS1wb3J0aW5nLmh0bWxcIC4KLQotVGhlIGZvbGxvd2luZyBhcmUgc29tZSBzdGVwcyB0byB0YWtlIHRvIHRyeSB0byBzdXBwb3J0IGJvdGggUHl0aG9uIDIgJiAzIGZyb20KLXRoZSBzYW1lIHNvdXJjZSBjb2RlLgotCi0KLS4uIF9XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjA6IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcmVsZWFzZS8zLjAvd2hhdHNuZXcvMy4wLmh0bWwKLQotCi1Gb2xsb3cgVGhlIFN0ZXBzIGZvciBVc2luZyAydG8zXwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQWxsIG9mIHRoZSBzdGVwcyBvdXRsaW5lZCBpbiBob3cgdG8KLTpyZWY6YHBvcnQgUHl0aG9uIDIgY29kZSB3aXRoIDJ0bzMgPHVzZV8ydG8zPmAgYXBwbHkKLXRvIGNyZWF0aW5nIGEgUHl0aG9uIDIvMyBjb2RlYmFzZS4gVGhpcyBpbmNsdWRlcyB0cnlpbmcgb25seSBzdXBwb3J0IFB5dGhvbiAyLjYKLW9yIG5ld2VyICh0aGUgOm1vZDpgX19mdXR1cmVfX2Agc3RhdGVtZW50cyB3b3JrIGluIFB5dGhvbiAzIHdpdGhvdXQgaXNzdWUpLAotZWxpbWluYXRpbmcgd2FybmluZ3MgdGhhdCBhcmUgdHJpZ2dlcmVkIGJ5IGBgLTNgYCwgZXRjLgotCi1Zb3Ugc2hvdWxkIGV2ZW4gY29uc2lkZXIgcnVubmluZyAydG8zXyBvdmVyIHlvdXIgY29kZSAod2l0aG91dCBjb21taXR0aW5nIHRoZQotY2hhbmdlcykuIFRoaXMgd2lsbCBsZXQgeW91IGtub3cgd2hlcmUgcG90ZW50aWFsIHBhaW4gcG9pbnRzIGFyZSB3aXRoaW4geW91cgotY29kZSBzbyB0aGF0IHlvdSBjYW4gZml4IHRoZW0gcHJvcGVybHkgYmVmb3JlIHRoZXkgYmVjb21lIGFuIGlzc3VlLgotCi0KLVVzZSBzaXhfCi0tLS0tLS0tLQotCi1UaGUgc2l4XyBwcm9qZWN0IGNvbnRhaW5zIG1hbnkgdGhpbmdzIHRvIGhlbHAgeW91IHdyaXRlIHBvcnRhYmxlIFB5dGhvbiBjb2RlLgotWW91IHNob3VsZCBtYWtlIHN1cmUgdG8gcmVhZCBpdHMgZG9jdW1lbnRhdGlvbiBmcm9tIGJlZ2lubmluZyB0byBlbmQgYW5kIHVzZQotYW55IGFuZCBhbGwgZmVhdHVyZXMgaXQgcHJvdmlkZXMuIFRoYXQgd2F5IHlvdSB3aWxsIG1pbmltaXplIGFueSBtaXN0YWtlcyB5b3UKLW1pZ2h0IG1ha2UgaW4gd3JpdGluZyBjcm9zcy12ZXJzaW9uIGNvZGUuCi0KLQotQ2FwdHVyaW5nIHRoZSBDdXJyZW50bHkgUmFpc2VkIEV4Y2VwdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1PbmUgY2hhbmdlIGJldHdlZW4gUHl0aG9uIDIgYW5kIDMgdGhhdCB3aWxsIHJlcXVpcmUgY2hhbmdpbmcgaG93IHlvdSBjb2RlIChpZgoteW91IHN1cHBvcnQgYFB5dGhvbiAyLjVgXyBhbmQgZWFybGllcikgaXMKLWFjY2Vzc2luZyB0aGUgY3VycmVudGx5IHJhaXNlZCBleGNlcHRpb24uICBJbiBQeXRob24gMi41IGFuZCBlYXJsaWVyIHRoZSBzeW50YXgKLXRvIGFjY2VzcyB0aGUgY3VycmVudCBleGNlcHRpb24gaXM6OgotCi0gICB0cnk6Ci0gICAgIHJhaXNlIEV4Y2VwdGlvbigpCi0gICBleGNlcHQgRXhjZXB0aW9uLCBleGM6Ci0gICAgICMgQ3VycmVudCBleGNlcHRpb24gaXMgJ2V4YycKLSAgICAgcGFzcwotCi1UaGlzIHN5bnRheCBjaGFuZ2VkIGluIFB5dGhvbiAzIChhbmQgYmFja3BvcnRlZCB0byBgUHl0aG9uIDIuNmBfIGFuZCBsYXRlcikKLXRvOjoKLQotICAgdHJ5OgotICAgICByYWlzZSBFeGNlcHRpb24oKQotICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6Ci0gICAgICMgQ3VycmVudCBleGNlcHRpb24gaXMgJ2V4YycKLSAgICAgIyBJbiBQeXRob24gMywgJ2V4YycgaXMgcmVzdHJpY3RlZCB0byB0aGUgYmxvY2s7IFB5dGhvbiAyLjYgd2lsbCAibGVhayIKLSAgICAgcGFzcwotCi1CZWNhdXNlIG9mIHRoaXMgc3ludGF4IGNoYW5nZSB5b3UgbXVzdCBjaGFuZ2UgdG8gY2FwdHVyaW5nIHRoZSBjdXJyZW50Ci1leGNlcHRpb24gdG86OgotCi0gICB0cnk6Ci0gICAgIHJhaXNlIEV4Y2VwdGlvbigpCi0gICBleGNlcHQgRXhjZXB0aW9uOgotICAgICBpbXBvcnQgc3lzCi0gICAgIGV4YyA9IHN5cy5leGNfaW5mbygpWzFdCi0gICAgICMgQ3VycmVudCBleGNlcHRpb24gaXMgJ2V4YycKLSAgICAgcGFzcwotCi1Zb3UgY2FuIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSByYWlzZWQgZXhjZXB0aW9uIGZyb20KLTpmdW5jOmBzeXMuZXhjX2luZm9gIHRoYW4gc2ltcGx5IHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBpbnN0YW5jZSwgYnV0IHlvdSBtb3N0Ci1saWtlbHkgZG9uJ3QgbmVlZCBpdC4KLQotLi4gbm90ZTo6Ci0gICBJbiBQeXRob24gMywgdGhlIHRyYWNlYmFjayBpcyBhdHRhY2hlZCB0byB0aGUgZXhjZXB0aW9uIGluc3RhbmNlCi0gICB0aHJvdWdoIHRoZSBgYF9fdHJhY2ViYWNrX19gYCBhdHRyaWJ1dGUuIElmIHRoZSBpbnN0YW5jZSBpcyBzYXZlZCBpbgotICAgYSBsb2NhbCB2YXJpYWJsZSB0aGF0IHBlcnNpc3RzIG91dHNpZGUgb2YgdGhlIGBgZXhjZXB0YGAgYmxvY2ssIHRoZQotICAgdHJhY2ViYWNrIHdpbGwgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlIHdpdGggdGhlIGN1cnJlbnQgZnJhbWUgYW5kIGl0cwotICAgZGljdGlvbmFyeSBvZiBsb2NhbCB2YXJpYWJsZXMuICBUaGlzIHdpbGwgZGVsYXkgcmVjbGFpbWluZyBkZWFkCi0gICByZXNvdXJjZXMgdW50aWwgdGhlIG5leHQgY3ljbGljIDp0ZXJtOmBnYXJiYWdlIGNvbGxlY3Rpb25gIHBhc3MuCi0KLSAgIEluIFB5dGhvbiAyLCB0aGlzIHByb2JsZW0gb25seSBvY2N1cnMgaWYgeW91IHNhdmUgdGhlIHRyYWNlYmFjayBpdHNlbGYKLSAgIChlLmcuIHRoZSB0aGlyZCBlbGVtZW50IG9mIHRoZSB0dXBsZSByZXR1cm5lZCBieSA6ZnVuYzpgc3lzLmV4Y19pbmZvYCkKLSAgIGluIGEgdmFyaWFibGUuCitJZiB5b3UgaGF2ZSBQeXRob24gMyBjb2RlIGFuZCBoYXZlIGxpdHRsZSBpbnRlcmVzdCBpbiBzdXBwb3J0aW5nIFB5dGhvbiAyIHlvdQorY2FuIHVzZSAzdG8yXyB0byB0cmFuc2xhdGUgZnJvbSBQeXRob24gMyBjb2RlIHRvIFB5dGhvbiAyIGNvZGUuIFRoaXMgaXMgb25seQorcmVjb21tZW5kZWQgaWYgeW91IGRvbid0IHBsYW4gdG8gaGVhdmlseSBzdXBwb3J0IFB5dGhvbiAyIHVzZXJzLgogCiAKIE90aGVyIFJlc291cmNlcwpAQCAtNzI5LDE4ICs1NTYsNDEgQEAKIAogVGhlIGF1dGhvcnMgb2YgdGhlIGZvbGxvd2luZyBibG9nIHBvc3RzLCB3aWtpIHBhZ2VzLCBhbmQgYm9va3MgZGVzZXJ2ZSBzcGVjaWFsCiB0aGFua3MgZm9yIG1ha2luZyBwdWJsaWMgdGhlaXIgdGlwcyBmb3IgcG9ydGluZyBQeXRob24gMiBjb2RlIHRvIFB5dGhvbiAzIChhbmQKLXRodXMgaGVscGluZyBwcm92aWRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGRvY3VtZW50KToKK3RodXMgaGVscGluZyBwcm92aWRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGRvY3VtZW50IGFuZCBpdHMgdmFyaW91cyByZXZpc2lvbnMKK292ZXIgdGhlIHllYXJzKToKIAorKiBodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vUG9ydGluZ1B5dGhvblRvUHkzawogKiBodHRwOi8vcHl0aG9uM3BvcnRpbmcuY29tLwogKiBodHRwOi8vZG9jcy5weXRob25zcHJpbnRzLmNvbS9weXRob24zX3BvcnRpbmcvcHktcG9ydGluZy5odG1sCiAqIGh0dHA6Ly90ZWNoc3BvdC56enplZWsub3JnLzIwMTEvMDEvMjQvenp6ZWVrLXMtZ3VpZGUtdG8tcHl0aG9uLTMtcG9ydGluZy8KICogaHR0cDovL2RhYmVhei5ibG9nc3BvdC5jb20vMjAxMS8wMS9wb3J0aW5nLXB5NjUtYW5kLW15LXN1cGVyYm9hcmQtdG8uaHRtbAogKiBodHRwOi8vbHVjdW1yLnBvY29vLm9yZy8yMDExLzEvMjIvZm9yd2FyZHMtY29tcGF0aWJsZS1weXRob24vCiAqIGh0dHA6Ly9sdWN1bXIucG9jb28ub3JnLzIwMTAvMi8xMS9wb3J0aW5nLXRvLXB5dGhvbi0zLWEtZ3VpZGUvCi0qIGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9Qb3J0aW5nUHl0aG9uVG9QeTNrCiAqIGh0dHBzOi8vd2lraS51YnVudHUuY29tL1B5dGhvbi8zCiAKIElmIHlvdSBmZWVsIHRoZXJlIGlzIHNvbWV0aGluZyBtaXNzaW5nIGZyb20gdGhpcyBkb2N1bWVudCB0aGF0IHNob3VsZCBiZSBhZGRlZCwKIHBsZWFzZSBlbWFpbCB0aGUgcHl0aG9uLXBvcnRpbmdfIG1haWxpbmcgbGlzdC4KIAorCisKKy4uIF8ydG8zOiBodHRwOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwKKy4uIF8zdG8yOiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpLzN0bzIKKy4uIF9DaGVlc2VzaG9wOiBQeVBJXworLi4gX2NvdmVyYWdlOiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvdmVyYWdlCisuLiBfZnV0dXJlOiBodHRwOi8vcHl0aG9uLWZ1dHVyZS5vcmcvCisuLiBfbW9kZXJuaXplOiBodHRwczovL2dpdGh1Yi5jb20vbWl0c3VoaWtvL3B5dGhvbi1tb2Rlcm5pemUKKy4uIF9Qb3J0aW5nIHRvIFB5dGhvbiAzOiBodHRwOi8vcHl0aG9uM3BvcnRpbmcuY29tLworLi4gX1B5UEk6IGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvCisuLiBfUHl0aG9uIDIuMjogaHR0cDovL3d3dy5weXRob24ub3JnLzIuMi54CisuLiBfUHl0aG9uIDIuNTogaHR0cDovL3d3dy5weXRob24ub3JnLzIuNS54CisuLiBfUHl0aG9uIDIuNjogaHR0cDovL3d3dy5weXRob24ub3JnLzIuNi54CisuLiBfUHl0aG9uIDIuNzogaHR0cDovL3d3dy5weXRob24ub3JnLzIuNy54CisuLiBfUHl0aG9uIDIuNTogaHR0cDovL3d3dy5weXRob24ub3JnLzIuNS54CisuLiBfUHl0aG9uIDMuMzogaHR0cDovL3d3dy5weXRob24ub3JnLzMuMy54CisuLiBfUHl0aG9uIDMgUGFja2FnZXM6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk/OmFjdGlvbj1icm93c2UmYz01MzMmc2hvdz1hbGwKKy4uIF9QeXRob24gMyBRICYgQTogaHR0cDovL25jb2dobGFuLWRldnMtcHl0aG9uLW5vdGVzLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvcHl0aG9uMy9xdWVzdGlvbnNfYW5kX2Fuc3dlcnMuaHRtbAogLi4gX3B5dGhvbi1wb3J0aW5nOiBodHRwOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0aG9uLXBvcnRpbmcKKy4uIF9zaXg6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvc2l4CisuLiBfdG94OiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3RveAorLi4gX3Ryb3ZlIGNsYXNzaWZpZXJzOiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpPyUzQWFjdGlvbj1saXN0X2NsYXNzaWZpZXJzCisKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9yZWdleC5yc3QgYi9Eb2MvaG93dG8vcmVnZXgucnN0CmluZGV4IDUyMDNlNTMuLmZiZTc2M2IgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9yZWdleC5yc3QKKysrIGIvRG9jL2hvd3RvL3JlZ2V4LnJzdApAQCAtMjcxLDggKzI3MSw4IEBACiAKICAgID4+PiBpbXBvcnQgcmUKICAgID4+PiBwID0gcmUuY29tcGlsZSgnYWIqJykKLSAgID4+PiBwICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfUGF0dGVybiBvYmplY3QgYXQgMHguLi4+CisgICA+Pj4gcAorICAgcmUuY29tcGlsZSgnYWIqJykKIAogOmZ1bmM6YHJlLmNvbXBpbGVgIGFsc28gYWNjZXB0cyBhbiBvcHRpb25hbCAqZmxhZ3MqIGFyZ3VtZW50LCB1c2VkIHRvIGVuYWJsZQogdmFyaW91cyBzcGVjaWFsIGZlYXR1cmVzIGFuZCBzeW50YXggdmFyaWF0aW9ucy4gIFdlJ2xsIGdvIG92ZXIgdGhlIGF2YWlsYWJsZQpAQCAtMzgzLDggKzM4Myw4IEBACiAKICAgID4+PiBpbXBvcnQgcmUKICAgID4+PiBwID0gcmUuY29tcGlsZSgnW2Etel0rJykKLSAgID4+PiBwICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfUGF0dGVybiBvYmplY3QgYXQgMHguLi4+CisgICA+Pj4gcAorICAgcmUuY29tcGlsZSgnW2Etel0rJykKIAogTm93LCB5b3UgY2FuIHRyeSBtYXRjaGluZyB2YXJpb3VzIHN0cmluZ3MgYWdhaW5zdCB0aGUgUkUgYGBbYS16XStgYC4gIEFuIGVtcHR5CiBzdHJpbmcgc2hvdWxkbid0IG1hdGNoIGF0IGFsbCwgc2luY2UgYGArYGAgbWVhbnMgJ29uZSBvciBtb3JlIHJlcGV0aXRpb25zJy4KQEAgLTQwMiw3ICs0MDIsNyBAQAogCiAgICA+Pj4gbSA9IHAubWF0Y2goJ3RlbXBvJykKICAgID4+PiBtICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNSksIG1hdGNoPSd0ZW1wbyc+CiAKIE5vdyB5b3UgY2FuIHF1ZXJ5IHRoZSA6cmVmOmBtYXRjaCBvYmplY3QgPG1hdGNoLW9iamVjdHM+YCBmb3IgaW5mb3JtYXRpb24KIGFib3V0IHRoZSBtYXRjaGluZyBzdHJpbmcuICA6cmVmOmBtYXRjaCBvYmplY3QgPG1hdGNoLW9iamVjdHM+YCBpbnN0YW5jZXMKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgPj4+IHByaW50KHAubWF0Y2goJzo6OiBtZXNzYWdlJykpCiAgICBOb25lCiAgICA+Pj4gbSA9IHAuc2VhcmNoKCc6OjogbWVzc2FnZScpOyBwcmludChtKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDQsIDExKSwgbWF0Y2g9J21lc3NhZ2UnPgogICAgPj4+IG0uZ3JvdXAoKQogICAgJ21lc3NhZ2UnCiAgICA+Pj4gbS5zcGFuKCkKQEAgLTQ5Myw3ICs0OTMsNyBAQAogICAgPj4+IHByaW50KHJlLm1hdGNoKHInRnJvbVxzKycsICdGcm9tYWdlIGFtaycpKQogICAgTm9uZQogICAgPj4+IHJlLm1hdGNoKHInRnJvbVxzKycsICdGcm9tIGFtayBUaHUgTWF5IDE0IDE5OjEyOjEwIDE5OTgnKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDUpLCBtYXRjaD0nRnJvbSAnPgogCiBVbmRlciB0aGUgaG9vZCwgdGhlc2UgZnVuY3Rpb25zIHNpbXBseSBjcmVhdGUgYSBwYXR0ZXJuIG9iamVjdCBmb3IgeW91CiBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kIG9uIGl0LiAgVGhleSBhbHNvIHN0b3JlIHRoZSBjb21waWxlZApAQCAtNjg1LDcgKzY4NSw3IEBACiAgICBsaW5lLCB0aGUgUkUgdG8gdXNlIGlzIGBgXkZyb21gYC4gOjoKIAogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnXkZyb20nLCAnRnJvbSBIZXJlIHRvIEV0ZXJuaXR5JykpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNCksIG1hdGNoPSdGcm9tJz4KICAgICAgID4+PiBwcmludChyZS5zZWFyY2goJ15Gcm9tJywgJ1JlY2l0aW5nIEZyb20gTWVtb3J5JykpCiAgICAgICBOb25lCiAKQEAgLTY5NywxMSArNjk3LDExIEBACiAgICBvciBhbnkgbG9jYXRpb24gZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGNoYXJhY3Rlci4gICAgIDo6CiAKICAgICAgID4+PiBwcmludChyZS5zZWFyY2goJ30kJywgJ3tibG9ja30nKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSg2LCA3KSwgbWF0Y2g9J30nPgogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnfSQnLCAne2Jsb2NrfSAnKSkKICAgICAgIE5vbmUKICAgICAgID4+PiBwcmludChyZS5zZWFyY2goJ30kJywgJ3tibG9ja31cbicpKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDYsIDcpLCBtYXRjaD0nfSc+CiAKICAgIFRvIG1hdGNoIGEgbGl0ZXJhbCBgYCckJ2BgLCB1c2UgYGBcJGBgIG9yIGVuY2xvc2UgaXQgaW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLAogICAgYXMgaW4gIGBgWyRdYGAuCkBAIC03MjYsNyArNzI2LDcgQEAKIAogICAgICAgPj4+IHAgPSByZS5jb21waWxlKHInXGJjbGFzc1xiJykKICAgICAgID4+PiBwcmludChwLnNlYXJjaCgnbm8gY2xhc3MgYXQgYWxsJykpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMywgOCksIG1hdGNoPSdjbGFzcyc+CiAgICAgICA+Pj4gcHJpbnQocC5zZWFyY2goJ3RoZSBkZWNsYXNzaWZpZWQgYWxnb3JpdGhtJykpCiAgICAgICBOb25lCiAgICAgICA+Pj4gcHJpbnQocC5zZWFyY2goJ29uZSBzdWJjbGFzcyBpcycpKQpAQCAtNzQ0LDcgKzc0NCw3IEBACiAgICAgICA+Pj4gcHJpbnQocC5zZWFyY2goJ25vIGNsYXNzIGF0IGFsbCcpKQogICAgICAgTm9uZQogICAgICAgPj4+IHByaW50KHAuc2VhcmNoKCdcYicgKyAnY2xhc3MnICsgJ1xiJykpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNyksIG1hdGNoPSdceDA4Y2xhc3NceDA4Jz4KIAogICAgU2Vjb25kLCBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIHdoZXJlIHRoZXJlJ3Mgbm8gdXNlIGZvciB0aGlzIGFzc2VydGlvbiwKICAgIGBgXGJgYCByZXByZXNlbnRzIHRoZSBiYWNrc3BhY2UgY2hhcmFjdGVyLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbidzCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vdXJsbGliMi5yc3QgYi9Eb2MvaG93dG8vdXJsbGliMi5yc3QKaW5kZXggNWEyMjY2MC4uM2Q1ZGUzMiAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3VybGxpYjIucnN0CisrKyBiL0RvYy9ob3d0by91cmxsaWIyLnJzdApAQCAtNTA3LDcgKzUwNyw3IEBACiAgICAgLS0gYGBQcm94eUhhbmRsZXJgYCAoaWYgYSBwcm94eSBzZXR0aW5nIHN1Y2ggYXMgYW4gOmVudnZhcjpgaHR0cF9wcm94eWAKICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQpLCBgYFVua25vd25IYW5kbGVyYGAsIGBgSFRUUEhhbmRsZXJgYCwKICAgICBgYEhUVFBEZWZhdWx0RXJyb3JIYW5kbGVyYGAsIGBgSFRUUFJlZGlyZWN0SGFuZGxlcmBgLCBgYEZUUEhhbmRsZXJgYCwKLSAgICBgYEZpbGVIYW5kbGVyYGAsIGBgSFRUUEVycm9yUHJvY2Vzc29yYGAuCisgICAgYGBGaWxlSGFuZGxlcmBgLCBgYERhdGFIYW5kbGVyYGAsIGBgSFRUUEVycm9yUHJvY2Vzc29yYGAuCiAKIGBgdG9wX2xldmVsX3VybGBgIGlzIGluIGZhY3QgKmVpdGhlciogYSBmdWxsIFVSTCAoaW5jbHVkaW5nIHRoZSAnaHR0cDonIHNjaGVtZQogY29tcG9uZW50IGFuZCB0aGUgaG9zdG5hbWUgYW5kIG9wdGlvbmFsbHkgdGhlIHBvcnQgbnVtYmVyKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLW5ldy1hcGkucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWFiZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLW5ldy1hcGkucHkKQEAgLTAsMCArMSw1NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCitpbXBvcnQgc210cGxpYgorCitmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQorZnJvbSBlbWFpbC5oZWFkZXJyZWdpc3RyeSBpbXBvcnQgQWRkcmVzcworZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgbWFrZV9tc2dpZAorCisjIENyZWF0ZSB0aGUgYmFzZSB0ZXh0IG1lc3NhZ2UuCittc2cgPSBFbWFpbE1lc3NhZ2UoKQorbXNnWydTdWJqZWN0J10gPSAiQXlvbnMgYXNwZXJnZXMgcG91ciBsZSBkw6lqZXVuZXIiCittc2dbJ0Zyb20nXSA9IEFkZHJlc3MoIlBlcMOpIExlIFBldyIsICJwZXBlQGV4YW1wbGUuY29tIikKK21zZ1snVG8nXSA9IChBZGRyZXNzKCJQZW5lbG9wZSBQdXNzeWNhdCIsICJwZW5lbG9wZUBleGFtcGxlLmNvbSIpLAorICAgICAgICAgICAgIEFkZHJlc3MoIkZhYnJldHRlIFB1c3N5Y2F0IiwgImZhYnJldHRlQGV4YW1wbGUuY29tIikpCittc2cuc2V0X2NvbnRlbnQoIiIiXAorU2FsdXQhCisKK0NlbGEgcmVzc2VtYmxlIMOgIHVuIGV4Y2VsbGVudCByZWNpcGllWzFdIGTDqWpldW5lci4KKworWzFdIGh0dHA6Ly93d3cueXVtbWx5LmNvbS9yZWNpcGUvUm9hc3RlZC1Bc3BhcmFndXMtRXBpY3VyaW91cy0yMDM3MTgKKworLS3DiXJpYworIiIiKQorCisjIEFkZCB0aGUgaHRtbCB2ZXJzaW9uLiAgVGhpcyBjb252ZXJ0cyB0aGUgbWVzc2FnZSBpbnRvIGEgbXVsdGlwYXJ0L2FsdGVybmF0aXZlCisjIGNvbnRhaW5lciwgd2l0aCB0aGUgb3JpZ2luYWwgdGV4dCBtZXNzYWdlIGFzIHRoZSBmaXJzdCBwYXJ0IGFuZCB0aGUgbmV3IGh0bWwKKyMgbWVzc2FnZSBhcyB0aGUgc2Vjb25kIHBhcnQuCithc3BhcmFndXNfY2lkID0gbWFrZV9tc2dpZCgpCittc2cuYWRkX2FsdGVybmF0aXZlKCIiIlwKKzxodG1sPgorICA8aGVhZD48L2hlYWQ+CisgIDxib2R5PgorICAgIDxwPlNhbHV0ITxccD4KKyAgICA8cD5DZWxhIHJlc3NlbWJsZSDDoCB1biBleGNlbGxlbnQKKyAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy55dW1tbHkuY29tL3JlY2lwZS9Sb2FzdGVkLUFzcGFyYWd1cy1FcGljdXJpb3VzLTIwMzcxOD4KKyAgICAgICAgICAgIHJlY2lwaWUKKyAgICAgICAgPC9hPiBkw6lqZXVuZXIuCisgICAgPC9wPgorICAgIDxpbWcgc3JjPSJjaWQ6e2FzcGFyYWd1c19jaWR9IiBcPgorICA8L2JvZHk+Cis8L2h0bWw+CisiIiIuZm9ybWF0KGFzcGFyYWd1c19jaWQ9YXNwYXJhZ3VzX2NpZFsxOi0xXSksIHN1YnR5cGU9J2h0bWwnKQorIyBub3RlIHRoYXQgd2UgbmVlZGVkIHRvIHBlZWwgdGhlIDw+IG9mZiB0aGUgbXNnaWQgZm9yIHVzZSBpbiB0aGUgaHRtbC4KKworIyBOb3cgYWRkIHRoZSByZWxhdGVkIGltYWdlIHRvIHRoZSBodG1sIHBhcnQuCit3aXRoIG9wZW4oInJvYXN0ZWQtYXNwYXJhZ3VzLmpwZyIsICdyYicpIGFzIGltZzoKKyAgICBtc2cuZ2V0X3BheWxvYWQoKVsxXS5hZGRfcmVsYXRlZChpbWcucmVhZCgpLCAnaW1hZ2UnLCAnanBlZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkPWFzcGFyYWd1c19jaWQpCisKKyMgTWFrZSBhIGxvY2FsIGNvcHkgb2Ygd2hhdCB3ZSBhcmUgZ29pbmcgdG8gc2VuZC4KK3dpdGggb3Blbignb3V0Z29pbmcubXNnJywgJ3diJykgYXMgZjoKKyAgICBmLndyaXRlKGJ5dGVzKG1zZykpCisKKyMgU2VuZCB0aGUgbWVzc2FnZSB2aWEgbG9jYWwgU01UUCBzZXJ2ZXIuCit3aXRoIHNtdHBsaWIuU01UUCgnbG9jYWxob3N0JykgYXMgczoKKyAgICBzLnNlbmRfbWVzc2FnZShtc2cpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weQppbmRleCBjYzU1MjllLi4zYzdjNzcwIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1kaXIucHkKQEAgLTgsNyArOCw3IEBACiAjIEZvciBndWVzc2luZyBNSU1FIHR5cGUgYmFzZWQgb24gZmlsZSBuYW1lIGV4dGVuc2lvbgogaW1wb3J0IG1pbWV0eXBlcwogCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2Zyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCiAKIGZyb20gZW1haWwgaW1wb3J0IGVuY29kZXJzCiBmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IE1lc3NhZ2UKQEAgLTIyLDQ0ICsyMiwzNiBAQAogCiAKIGRlZiBtYWluKCk6Ci0gICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPSIiIlwKKyAgICBwYXJzZXIgPSBBcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iIiJcCiBTZW5kIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeSBhcyBhIE1JTUUgbWVzc2FnZS4KLQotVXNhZ2U6ICVwcm9nIFtvcHRpb25zXQotCiBVbmxlc3MgdGhlIC1vIG9wdGlvbiBpcyBnaXZlbiwgdGhlIGVtYWlsIGlzIHNlbnQgYnkgZm9yd2FyZGluZyB0byB5b3VyIGxvY2FsCiBTTVRQIHNlcnZlciwgd2hpY2ggdGhlbiBkb2VzIHRoZSBub3JtYWwgZGVsaXZlcnkgcHJvY2Vzcy4gIFlvdXIgbG9jYWwgbWFjaGluZQogbXVzdCBiZSBydW5uaW5nIGFuIFNNVFAgc2VydmVyLgogIiIiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWRpcmVjdG9yeScsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJNYWlsIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9ubHkgdGhlIHJlZ3VsYXIKLSAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IGFyZSBzZW50LCBhbmQgd2UgZG9uJ3QgcmVjdXJzZSB0bwotICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLiIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS1vdXRwdXQnLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLCBtZXRhdmFyPSdGSUxFJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlByaW50IHRoZSBjb21wb3NlZCBtZXNzYWdlIHRvIEZJTEUgaW5zdGVhZCBvZgotICAgICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgdGhlIG1lc3NhZ2UgdG8gdGhlIFNNVFAgc2VydmVyLiIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zZW5kZXInLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLCBtZXRhdmFyPSdTRU5ERVInLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RoZSB2YWx1ZSBvZiB0aGUgRnJvbTogaGVhZGVyIChyZXF1aXJlZCknKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJlY2lwaWVudCcsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdhcHBlbmQnLCBtZXRhdmFyPSdSRUNJUElFTlQnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9W10sIGRlc3Q9J3JlY2lwaWVudHMnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0EgVG86IGhlYWRlciB2YWx1ZSAoYXQgbGVhc3Qgb25lIHJlcXVpcmVkKScpCi0gICAgb3B0cywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBpZiBub3Qgb3B0cy5zZW5kZXIgb3Igbm90IG9wdHMucmVjaXBpZW50czoKLSAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQotICAgICAgICBzeXMuZXhpdCgxKQotICAgIGRpcmVjdG9yeSA9IG9wdHMuZGlyZWN0b3J5CisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kaXJlY3RvcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJNYWlsIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB1c2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT25seSB0aGUgcmVndWxhcgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgc2VudCwgYW5kIHdlIGRvbid0IHJlY3Vyc2UgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLiIiIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW91dHB1dCcsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdGSUxFJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiUHJpbnQgdGhlIGNvbXBvc2VkIG1lc3NhZ2UgdG8gRklMRSBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kaW5nIHRoZSBtZXNzYWdlIHRvIHRoZSBTTVRQIHNlcnZlci4iIiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zZW5kZXInLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIHZhbHVlIG9mIHRoZSBGcm9tOiBoZWFkZXIgKHJlcXVpcmVkKScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXInLCAnLS1yZWNpcGllbnQnLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLCBtZXRhdmFyPSdSRUNJUElFTlQnLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1bXSwgZGVzdD0ncmVjaXBpZW50cycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBIFRvOiBoZWFkZXIgdmFsdWUgKGF0IGxlYXN0IG9uZSByZXF1aXJlZCknKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgZGlyZWN0b3J5ID0gYXJncy5kaXJlY3RvcnkKICAgICBpZiBub3QgZGlyZWN0b3J5OgogICAgICAgICBkaXJlY3RvcnkgPSAnLicKICAgICAjIENyZWF0ZSB0aGUgZW5jbG9zaW5nIChvdXRlcikgbWVzc2FnZQogICAgIG91dGVyID0gTUlNRU11bHRpcGFydCgpCiAgICAgb3V0ZXJbJ1N1YmplY3QnXSA9ICdDb250ZW50cyBvZiBkaXJlY3RvcnkgJXMnICUgb3MucGF0aC5hYnNwYXRoKGRpcmVjdG9yeSkKLSAgICBvdXRlclsnVG8nXSA9IENPTU1BU1BBQ0Uuam9pbihvcHRzLnJlY2lwaWVudHMpCi0gICAgb3V0ZXJbJ0Zyb20nXSA9IG9wdHMuc2VuZGVyCisgICAgb3V0ZXJbJ1RvJ10gPSBDT01NQVNQQUNFLmpvaW4oYXJncy5yZWNpcGllbnRzKQorICAgIG91dGVyWydGcm9tJ10gPSBhcmdzLnNlbmRlcgogICAgIG91dGVyLnByZWFtYmxlID0gJ1lvdSB3aWxsIG5vdCBzZWUgdGhpcyBpbiBhIE1JTUUtYXdhcmUgbWFpbCByZWFkZXIuXG4nCiAKICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpOgpAQCAtNzYsMjMgKzY4LDE5IEBACiAgICAgICAgICAgICBjdHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nCiAgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gY3R5cGUuc3BsaXQoJy8nLCAxKQogICAgICAgICBpZiBtYWludHlwZSA9PSAndGV4dCc6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ocGF0aCkKLSAgICAgICAgICAgICMgTm90ZTogd2Ugc2hvdWxkIGhhbmRsZSBjYWxjdWxhdGluZyB0aGUgY2hhcnNldAotICAgICAgICAgICAgbXNnID0gTUlNRVRleHQoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGZwOgorICAgICAgICAgICAgICAgICMgTm90ZTogd2Ugc2hvdWxkIGhhbmRsZSBjYWxjdWxhdGluZyB0aGUgY2hhcnNldAorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVUZXh0KGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKICAgICAgICAgZWxpZiBtYWludHlwZSA9PSAnaW1hZ2UnOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgICAgICBtc2cgPSBNSU1FSW1hZ2UoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVJbWFnZShmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCiAgICAgICAgIGVsaWYgbWFpbnR5cGUgPT0gJ2F1ZGlvJzoKLSAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQotICAgICAgICAgICAgbXNnID0gTUlNRUF1ZGlvKGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBtc2cgPSBNSU1FQXVkaW8oZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgICAgICBtc2cgPSBNSU1FQmFzZShtYWludHlwZSwgc3VidHlwZSkKLSAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChmcC5yZWFkKCkpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbXNnID0gTUlNRUJhc2UobWFpbnR5cGUsIHN1YnR5cGUpCisgICAgICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKGZwLnJlYWQoKSkKICAgICAgICAgICAgICMgRW5jb2RlIHRoZSBwYXlsb2FkIHVzaW5nIEJhc2U2NAogICAgICAgICAgICAgZW5jb2RlcnMuZW5jb2RlX2Jhc2U2NChtc2cpCiAgICAgICAgICMgU2V0IHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIKQEAgLTEwMCwxNCArODgsMTIgQEAKICAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKICAgICAjIE5vdyBzZW5kIG9yIHN0b3JlIHRoZSBtZXNzYWdlCiAgICAgY29tcG9zZWQgPSBvdXRlci5hc19zdHJpbmcoKQotICAgIGlmIG9wdHMub3V0cHV0OgotICAgICAgICBmcCA9IG9wZW4ob3B0cy5vdXRwdXQsICd3JykKLSAgICAgICAgZnAud3JpdGUoY29tcG9zZWQpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICBpZiBhcmdzLm91dHB1dDoKKyAgICAgICAgd2l0aCBvcGVuKGFyZ3Mub3V0cHV0LCAndycpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoY29tcG9zZWQpCiAgICAgZWxzZToKLSAgICAgICAgcyA9IHNtdHBsaWIuU01UUCgnbG9jYWxob3N0JykKLSAgICAgICAgcy5zZW5kbWFpbChvcHRzLnNlbmRlciwgb3B0cy5yZWNpcGllbnRzLCBjb21wb3NlZCkKLSAgICAgICAgcy5xdWl0KCkKKyAgICAgICAgd2l0aCBzbXRwbGliLlNNVFAoJ2xvY2FsaG9zdCcpIGFzIHM6CisgICAgICAgICAgICBzLnNlbmRtYWlsKGFyZ3Muc2VuZGVyLCBhcmdzLnJlY2lwaWVudHMsIGNvbXBvc2VkKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtcmVhZC1hbHRlcm5hdGl2ZS1uZXctYXBpLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLXJlYWQtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWI0ZTlmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2luY2x1ZGVzL2VtYWlsLXJlYWQtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weQpAQCAtMCwwICsxLDc0IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IG1pbWV0eXBlcworaW1wb3J0IHdlYmJyb3dzZXIKKworIyBJbXBvcnQgdGhlIGVtYWlsIG1vZHVsZXMgd2UnbGwgbmVlZAorZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Citmcm9tIGVtYWlsLnBhcnNlciBpbXBvcnQgQnl0ZXNQYXJzZXIKKworIyBBbiBpbWFnaW5hcnkgbW9kdWxlIHRoYXQgd291bGQgbWFrZSB0aGlzIHdvcmsgYW5kIGJlIHNhZmUuCitmcm9tIGltYWdpbmFyeSBpbXBvcnQgbWFnaWNfaHRtbF9wYXJzZXIKKworIyBJbiBhIHJlYWwgcHJvZ3JhbSB5b3UnZCBnZXQgdGhlIGZpbGVuYW1lIGZyb20gdGhlIGFyZ3VtZW50cy4KK21zZyA9IEJ5dGVzUGFyc2VyKHBvbGljeT1wb2xpY3kuZGVmYXVsdCkucGFyc2Uob3Blbignb3V0Z29pbmcubXNnJywgJ3JiJykpCisKKyMgTm93IHRoZSBoZWFkZXIgaXRlbXMgY2FuIGJlIGFjY2Vzc2VkIGFzIGEgZGljdGlvbmFyeSwgYW5kIGFueSBub24tQVNDSUkgd2lsbAorIyBiZSBjb252ZXJ0ZWQgdG8gdW5pY29kZToKK3ByaW50KCdUbzonLCBtc2dbJ3RvJ10pCitwcmludCgnRnJvbTonLCBtc2dbJ2Zyb20nXSkKK3ByaW50KCdTdWJqZWN0OicsIG1zZ1snc3ViamVjdCddKQorCisjIElmIHdlIHdhbnQgdG8gcHJpbnQgYSBwcml2aWV3IG9mIHRoZSBtZXNzYWdlIGNvbnRlbnQsIHdlIGNhbiBleHRyYWN0IHdoYXRldmVyCisjIHRoZSBsZWFzdCBmb3JtYXR0ZWQgcGF5bG9hZCBpcyBhbmQgcHJpbnQgdGhlIGZpcnN0IHRocmVlIGxpbmVzLiAgT2YgY291cnNlLAorIyBpZiB0aGUgbWVzc2FnZSBoYXMgbm8gcGxhaW4gdGV4dCBwYXJ0IHByaW50aW5nIHRoZSBmaXJzdCB0aHJlZSBsaW5lcyBvZiBodG1sCisjIGlzIHByb2JhYmx5IHVzZWxlc3MsIGJ1dCB0aGlzIGlzIGp1c3QgYSBjb25jZXB0dWFsIGV4YW1wbGUuCitzaW1wbGVzdCA9IG1zZy5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ3BsYWluJywgJ2h0bWwnKSkKK3ByaW50KCkKK3ByaW50KCcnLmpvaW4oc2ltcGxlc3QuZ2V0X2NvbnRlbnQoKS5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpWzozXSkpCisKK2FucyA9IGlucHV0KCJWaWV3IGZ1bGwgbWVzc2FnZT8iKQoraWYgYW5zLmxvd2VyKClbMF0gPT0gJ24nOgorICAgIHN5cy5leGl0KCkKKworIyBXZSBjYW4gZXh0cmFjdCB0aGUgcmljaGVzdCBhbHRlcm5hdGl2ZSBpbiBvcmRlciB0byBkaXNwbGF5IGl0OgorcmljaGVzdCA9IG1zZy5nZXRfYm9keSgpCitwYXJ0ZmlsZXMgPSB7fQoraWYgcmljaGVzdFsnY29udGVudC10eXBlJ10ubWFpbnR5cGUgPT0gJ3RleHQnOgorICAgIGlmIHJpY2hlc3RbJ2NvbnRlbnQtdHlwZSddLnN1YnR5cGUgPT0gJ3BsYWluJzoKKyAgICAgICAgZm9yIGxpbmUgaW4gcmljaGVzdC5nZXRfY29udGVudCgpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHByaW50KGxpbmUpCisgICAgICAgIHN5cy5leGl0KCkKKyAgICBlbGlmIHJpY2hlc3RbJ2NvbnRlbnQtdHlwZSddLnN1YnR5cGUgPT0gJ2h0bWwnOgorICAgICAgICBib2R5ID0gcmljaGVzdAorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJEb24ndCBrbm93IGhvdyB0byBkaXNwbGF5IHt9Ii5mb3JtYXQocmljaGVzdC5nZXRfY29udGVudF90eXBlKCkpKQorICAgICAgICBzeXMuZXhpdCgpCitlbGlmIHJpY2hlc3RbJ2NvbnRlbnQtdHlwZSddLmNvbnRlbnRfdHlwZSA9PSAnbXVsdGlwYXJ0L3JlbGF0ZWQnOgorICAgIGJvZHkgPSByaWNoZXN0LmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgnaHRtbCcpKQorICAgIGZvciBwYXJ0IGluIHJpY2hlc3QuaXRlcl9hdHRhY2htZW50cygpOgorICAgICAgICBmbiA9IHBhcnQuZ2V0X2ZpbGVuYW1lKCkKKyAgICAgICAgaWYgZm46CisgICAgICAgICAgICBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KHBhcnQuZ2V0X2ZpbGVuYW1lKCkpWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHRlbnNpb24gPSBtaW1ldHlwZXMuZ3Vlc3NfZXh0ZW5zaW9uKHBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpKQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShzdWZmaXg9ZXh0ZW5zaW9uLCBkZWxldGU9RmFsc2UpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHBhcnQuZ2V0X2NvbnRlbnQoKSkKKyAgICAgICAgICAgICMgYWdhaW4gc3RyaXAgdGhlIDw+IHRvIGdvIGZyb20gZW1haWwgZm9ybSBvZiBjaWQgdG8gaHRtbCBmb3JtLgorICAgICAgICAgICAgcGFydGZpbGVzW3BhcnRbJ2NvbnRlbnQtaWQnXVsxOi0xXV0gPSBmLm5hbWUKK2Vsc2U6CisgICAgcHJpbnQoIkRvbid0IGtub3cgaG93IHRvIGRpc3BsYXkge30iLmZvcm1hdChyaWNoZXN0LmdldF9jb250ZW50X3R5cGUoKSkpCisgICAgc3lzLmV4aXQoKQord2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUobW9kZT0ndycsIGRlbGV0ZT1GYWxzZSkgYXMgZjoKKyAgICAjIFRoZSBtYWdpY19odG1sX3BhcnNlciBoYXMgdG8gcmV3cml0ZSB0aGUgaHJlZj0iY2lkOi4uLi4iIGF0dHJpYnV0ZXMgdG8KKyAgICAjIHBvaW50IHRvIHRoZSBmaWxlbmFtZXMgaW4gcGFydGZpbGVzLiAgSXQgYWxzbyBoYXMgdG8gZG8gYSBzYWZldHktc2FuaXRpemUKKyAgICAjIG9mIHRoZSBodG1sLiAgSXQgY291bGQgYmUgd3JpdHRlbiB1c2luZyBodG1sLnBhcnNlci4KKyAgICBmLndyaXRlKG1hZ2ljX2h0bWxfcGFyc2VyKGJvZHkuZ2V0X2NvbnRlbnQoKSwgcGFydGZpbGVzKSkKK3dlYmJyb3dzZXIub3BlbihmLm5hbWUpCitvcy5yZW1vdmUoZi5uYW1lKQorZm9yIGZuIGluIHBhcnRmaWxlcy52YWx1ZXMoKToKKyAgICBvcy5yZW1vdmUoZm4pCisKKyMgT2YgY291cnNlLCB0aGVyZSBhcmUgbG90cyBvZiBlbWFpbCBtZXNzYWdlcyB0aGF0IGNvdWxkIGJyZWFrIHRoaXMgc2ltcGxlCisjIG1pbmRlZCBwcm9ncmFtLCBidXQgaXQgd2lsbCBoYW5kbGUgdGhlIG1vc3QgY29tbW9uIG9uZXMuCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weQppbmRleCAzNjUzNTQzLi41NzRhMGI2IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC11bnBhY2sucHkKQEAgLTgsNDEgKzgsMjcgQEAKIGltcG9ydCBlcnJubwogaW1wb3J0IG1pbWV0eXBlcwogCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2Zyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCiAKIAogZGVmIG1haW4oKToKLSAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9IiIiXAorICAgIHBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSIiIlwKIFVucGFjayBhIE1JTUUgbWVzc2FnZSBpbnRvIGEgZGlyZWN0b3J5IG9mIGZpbGVzLgotCi1Vc2FnZTogJXByb2cgW29wdGlvbnNdIG1zZ2ZpbGUKICIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kaXJlY3RvcnknLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiVW5wYWNrIHRoZSBNSU1FIG1lc3NhZ2UgaW50byB0aGUgbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgICBleGlzdC4iIiIpCi0gICAgb3B0cywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBpZiBub3Qgb3B0cy5kaXJlY3Rvcnk6Ci0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRpcmVjdG9yeScsIHJlcXVpcmVkPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlVucGFjayB0aGUgTUlNRSBtZXNzYWdlIGludG8gdGhlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0LiIiIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdtc2dmaWxlJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgd2l0aCBvcGVuKGFyZ3MubXNnZmlsZSkgYXMgZnA6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwKQogCiAgICAgdHJ5OgotICAgICAgICBtc2dmaWxlID0gYXJnc1swXQotICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICB0cnk6Ci0gICAgICAgIG9zLm1rZGlyKG9wdHMuZGlyZWN0b3J5KQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICMgSWdub3JlIGRpcmVjdG9yeSBleGlzdHMgZXJyb3IKLSAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICByYWlzZQotCi0gICAgZnAgPSBvcGVuKG1zZ2ZpbGUpCi0gICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnApCi0gICAgZnAuY2xvc2UoKQorICAgICAgICBvcy5ta2RpcihhcmdzLmRpcmVjdG9yeSkKKyAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICBwYXNzCiAKICAgICBjb3VudGVyID0gMQogICAgIGZvciBwYXJ0IGluIG1zZy53YWxrKCk6CkBAIC01OSw5ICs0NSw4IEBACiAgICAgICAgICAgICAgICAgZXh0ID0gJy5iaW4nCiAgICAgICAgICAgICBmaWxlbmFtZSA9ICdwYXJ0LSUwM2QlcycgJSAoY291bnRlciwgZXh0KQogICAgICAgICBjb3VudGVyICs9IDEKLSAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihvcHRzLmRpcmVjdG9yeSwgZmlsZW5hbWUpLCAnd2InKQotICAgICAgICBmcC53cml0ZShwYXJ0LmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGFyZ3MuZGlyZWN0b3J5LCBmaWxlbmFtZSksICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUocGFydC5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5IGIvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NjNlYTkuLjAwMDAwMDAKLS0tIGEvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotIwotIyBTaW1wbGUgYmVuY2htYXJrcyBmb3IgdGhlIG11bHRpcHJvY2Vzc2luZyBwYWNrYWdlCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQotaW1wb3J0IHRpbWUKLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCBxdWV1ZQotaW1wb3J0IGdjCi0KLV90aW1lciA9IHRpbWUucGVyZl9jb3VudGVyCi0KLWRlbHRhID0gMQotCi0KLSMjIyMgVEVTVF9RVUVVRVNQRUVECi0KLWRlZiBxdWV1ZXNwZWVkX2Z1bmMocSwgYywgaXRlcmF0aW9ucyk6Ci0gICAgYSA9ICcwJyAqIDI1NgotICAgIGMuYWNxdWlyZSgpCi0gICAgYy5ub3RpZnkoKQotICAgIGMucmVsZWFzZSgpCi0KLSAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgcS5wdXQoYSkKLQotICAgIHEucHV0KCdTVE9QJykKLQotZGVmIHRlc3RfcXVldWVzcGVlZChQcm9jZXNzLCBxLCBjKToKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIHAgPSBQcm9jZXNzKHRhcmdldD1xdWV1ZXNwZWVkX2Z1bmMsIGFyZ3M9KHEsIGMsIGl0ZXJhdGlvbnMpKQotICAgICAgICBjLmFjcXVpcmUoKQotICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgYy53YWl0KCkKLSAgICAgICAgYy5yZWxlYXNlKCkKLQotICAgICAgICByZXN1bHQgPSBOb25lCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIHdoaWxlIHJlc3VsdCAhPSAnU1RPUCc6Ci0gICAgICAgICAgICByZXN1bHQgPSBxLmdldCgpCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgICAgIHAuam9pbigpCi0KLSAgICBwcmludChpdGVyYXRpb25zLCAnb2JqZWN0cyBwYXNzZWQgdGhyb3VnaCB0aGUgcXVldWUgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX1BJUEVTUEVFRAotCi1kZWYgcGlwZV9mdW5jKGMsIGNvbmQsIGl0ZXJhdGlvbnMpOgotICAgIGEgPSAnMCcgKiAyNTYKLSAgICBjb25kLmFjcXVpcmUoKQotICAgIGNvbmQubm90aWZ5KCkKLSAgICBjb25kLnJlbGVhc2UoKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgIGMuc2VuZChhKQotCi0gICAgYy5zZW5kKCdTVE9QJykKLQotZGVmIHRlc3RfcGlwZXNwZWVkKCk6Ci0gICAgYywgZCA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKCkKLSAgICBjb25kID0gbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpCi0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXBpcGVfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGQsIGNvbmQsIGl0ZXJhdGlvbnMpKQotICAgICAgICBjb25kLmFjcXVpcmUoKQotICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgY29uZC53YWl0KCkKLSAgICAgICAgY29uZC5yZWxlYXNlKCkKLQotICAgICAgICByZXN1bHQgPSBOb25lCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIHdoaWxlIHJlc3VsdCAhPSAnU1RPUCc6Ci0gICAgICAgICAgICByZXN1bHQgPSBjLnJlY3YoKQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLSAgICAgICAgcC5qb2luKCkKLQotICAgIHByaW50KGl0ZXJhdGlvbnMsICdvYmplY3RzIHBhc3NlZCB0aHJvdWdoIGNvbm5lY3Rpb24gaW4nLGVsYXBzZWQsJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucy9lbGFwc2VkKQotCi0KLSMjIyMgVEVTVF9TRVFTUEVFRAotCi1kZWYgdGVzdF9zZXFzcGVlZChzZXEpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgICAgICBhID0gc2VxWzVdCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgcHJpbnQoaXRlcmF0aW9ucywgJ2l0ZXJhdGlvbnMgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX0xPQ0sKLQotZGVmIHRlc3RfbG9ja3NwZWVkKGwpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgICAgICBsLmFjcXVpcmUoKQotICAgICAgICAgICAgbC5yZWxlYXNlKCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICBwcmludChpdGVyYXRpb25zLCAnaXRlcmF0aW9ucyBpbicsIGVsYXBzZWQsICdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMvZWxhcHNlZCkKLQotCi0jIyMjIFRFU1RfQ09ORElUSU9OCi0KLWRlZiBjb25kaXRpb25zcGVlZF9mdW5jKGMsIE4pOgotICAgIGMuYWNxdWlyZSgpCi0gICAgYy5ub3RpZnkoKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoTik6Ci0gICAgICAgIGMud2FpdCgpCi0gICAgICAgIGMubm90aWZ5KCkKLQotICAgIGMucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X2NvbmRpdGlvbnNwZWVkKFByb2Nlc3MsIGMpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgYy5hY3F1aXJlKCkKLSAgICAgICAgcCA9IFByb2Nlc3ModGFyZ2V0PWNvbmRpdGlvbnNwZWVkX2Z1bmMsIGFyZ3M9KGMsIGl0ZXJhdGlvbnMpKQotICAgICAgICBwLnN0YXJ0KCkKLQotICAgICAgICBjLndhaXQoKQotCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICAgICAgYy5ub3RpZnkoKQotICAgICAgICAgICAgYy53YWl0KCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICAgICAgYy5yZWxlYXNlKCkKLSAgICAgICAgcC5qb2luKCkKLQotICAgIHByaW50KGl0ZXJhdGlvbnMgKiAyLCAnd2FpdHMgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zICogMiAvIGVsYXBzZWQpCi0KLSMjIyMKLQotZGVmIHRlc3QoKToKLSAgICBtYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotCi0gICAgZ2MuZGlzYWJsZSgpCi0KLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgUXVldWUuUXVldWVcbicpCi0gICAgdGVzdF9xdWV1ZXNwZWVkKHRocmVhZGluZy5UaHJlYWQsIHF1ZXVlLlF1ZXVlKCksCi0gICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlXG4nKQotICAgIHRlc3RfcXVldWVzcGVlZChtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcywgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCksCi0gICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgUXVldWUgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X3F1ZXVlc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG1hbmFnZXIuUXVldWUoKSwKLSAgICAgICAgICAgICAgICAgICAgbWFuYWdlci5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLlBpcGVcbicpCi0gICAgdGVzdF9waXBlc3BlZWQoKQotCi0gICAgcHJpbnQoKQotCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGxpc3RcbicpCi0gICAgdGVzdF9zZXFzcGVlZChsaXN0KHJhbmdlKDEwKSkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGxpc3QgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X3NlcXNwZWVkKG1hbmFnZXIubGlzdChsaXN0KHJhbmdlKDEwKSkpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBBcnJheSgiaSIsIC4uLiwgbG9jaz1GYWxzZSlcbicpCi0gICAgdGVzdF9zZXFzcGVlZChtdWx0aXByb2Nlc3NpbmcuQXJyYXkoJ2knLCBsaXN0KHJhbmdlKDEwKSksIGxvY2s9RmFsc2UpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBBcnJheSgiaSIsIC4uLiwgbG9jaz1UcnVlKVxuJykKLSAgICB0ZXN0X3NlcXNwZWVkKG11bHRpcHJvY2Vzc2luZy5BcnJheSgnaScsIGxpc3QocmFuZ2UoMTApKSwgbG9jaz1UcnVlKSkKLQotICAgIHByaW50KCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuTG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZCh0aHJlYWRpbmcuTG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuUkxvY2tcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQodGhyZWFkaW5nLlJMb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5Mb2NrXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG11bHRpcHJvY2Vzc2luZy5Mb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5STG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZChtdWx0aXByb2Nlc3NpbmcuUkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbG9jayBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG1hbmFnZXIuTG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBybG9jayBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG1hbmFnZXIuUkxvY2soKSkKLQotICAgIHByaW50KCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuQ29uZGl0aW9uXG4nKQotICAgIHRlc3RfY29uZGl0aW9uc3BlZWQodGhyZWFkaW5nLlRocmVhZCwgdGhyZWFkaW5nLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uXG4nKQotICAgIHRlc3RfY29uZGl0aW9uc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgY29uZGl0aW9uIG1hbmFnZWQgYnkgYSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X2NvbmRpdGlvbnNwZWVkKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLCBtYW5hZ2VyLkNvbmRpdGlvbigpKQotCi0gICAgZ2MuZW5hYmxlKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnQoKQotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX25ld3R5cGUucHkgYi9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQppbmRleCA3MjkxNzQzLi4xYzc5NmE1IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQpAQCAtMSwxMSArMSwzIEBACi0jCi0jIFRoaXMgbW9kdWxlIHNob3dzIGhvdyB0byB1c2UgYXJiaXRyYXJ5IGNhbGxhYmxlcyB3aXRoIGEgc3ViY2xhc3Mgb2YKLSMgYEJhc2VNYW5hZ2VyYC4KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCiBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgZnJlZXplX3N1cHBvcnQKIGZyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBCYXNlTWFuYWdlciwgQmFzZVByb3h5CiBpbXBvcnQgb3BlcmF0b3IKQEAgLTI3LDEyICsxOSwxMCBAQAogCiAjIFByb3h5IHR5cGUgZm9yIGdlbmVyYXRvciBvYmplY3RzCiBjbGFzcyBHZW5lcmF0b3JQcm94eShCYXNlUHJveHkpOgotICAgIF9leHBvc2VkXyA9ICgnbmV4dCcsICdfX25leHRfXycpCisgICAgX2V4cG9zZWRfID0gWydfX25leHRfXyddCiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZgogICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxtZXRob2QoJ25leHQnKQotICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxtZXRob2QoJ19fbmV4dF9fJykKIAogIyBGdW5jdGlvbiB0byByZXR1cm4gdGhlIG9wZXJhdG9yIG1vZHVsZQpAQCAtOTAsOCArODAsNiBAQAogICAgIG9wID0gbWFuYWdlci5vcGVyYXRvcigpCiAgICAgcHJpbnQoJ29wLmFkZCgyMywgNDUpID0nLCBvcC5hZGQoMjMsIDQ1KSkKICAgICBwcmludCgnb3AucG93KDIsIDk0KSA9Jywgb3AucG93KDIsIDk0KSkKLSAgICBwcmludCgnb3AuZ2V0c2xpY2UocmFuZ2UoMTApLCAyLCA2KSA9Jywgb3AuZ2V0c2xpY2UobGlzdChyYW5nZSgxMCkpLCAyLCA2KSkKLSAgICBwcmludCgnb3AucmVwZWF0KHJhbmdlKDUpLCAzKSA9Jywgb3AucmVwZWF0KGxpc3QocmFuZ2UoNSkpLCAzKSkKICAgICBwcmludCgnb3AuX2V4cG9zZWRfID0nLCBvcC5fZXhwb3NlZF8pCiAKICMjCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfcG9vbC5weSBiL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CmluZGV4IDE1Nzg0OTguLjExMTAxZTEgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CkBAIC0xLDEwICsxLDMgQEAKLSMKLSMgQSB0ZXN0IG9mIGBtdWx0aXByb2Nlc3NpbmcuUG9vbGAgY2xhc3MKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHJhbmRvbQpAQCAtNDYsMjY5ICszOSwxMTUgQEAKICMKIAogZGVmIHRlc3QoKToKLSAgICBwcmludCgnY3B1X2NvdW50KCkgPSAlZFxuJyAlIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSkKLQotICAgICMKLSAgICAjIENyZWF0ZSBwb29sCi0gICAgIwotCiAgICAgUFJPQ0VTU0VTID0gNAogICAgIHByaW50KCdDcmVhdGluZyBwb29sIHdpdGggJWQgcHJvY2Vzc2VzXG4nICUgUFJPQ0VTU0VTKQotICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbChQUk9DRVNTRVMpCi0gICAgcHJpbnQoJ3Bvb2wgPSAlcycgJSBwb29sKQotICAgIHByaW50KCkKIAotICAgICMKLSAgICAjIFRlc3RzCi0gICAgIworICAgIHdpdGggbXVsdGlwcm9jZXNzaW5nLlBvb2woUFJPQ0VTU0VTKSBhcyBwb29sOgorICAgICAgICAjCisgICAgICAgICMgVGVzdHMKKyAgICAgICAgIwogCi0gICAgVEFTS1MgPSBbKG11bCwgKGksIDcpKSBmb3IgaSBpbiByYW5nZSgxMCldICsgXAotICAgICAgICAgICAgWyhwbHVzLCAoaSwgOCkpIGZvciBpIGluIHJhbmdlKDEwKV0KKyAgICAgICAgVEFTS1MgPSBbKG11bCwgKGksIDcpKSBmb3IgaSBpbiByYW5nZSgxMCldICsgXAorICAgICAgICAgICAgICAgIFsocGx1cywgKGksIDgpKSBmb3IgaSBpbiByYW5nZSgxMCldCiAKLSAgICByZXN1bHRzID0gW3Bvb2wuYXBwbHlfYXN5bmMoY2FsY3VsYXRlLCB0KSBmb3IgdCBpbiBUQVNLU10KLSAgICBpbWFwX2l0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQotICAgIGltYXBfdW5vcmRlcmVkX2l0ID0gcG9vbC5pbWFwX3Vub3JkZXJlZChjYWxjdWxhdGVzdGFyLCBUQVNLUykKKyAgICAgICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgdCkgZm9yIHQgaW4gVEFTS1NdCisgICAgICAgIGltYXBfaXQgPSBwb29sLmltYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpCisgICAgICAgIGltYXBfdW5vcmRlcmVkX2l0ID0gcG9vbC5pbWFwX3Vub3JkZXJlZChjYWxjdWxhdGVzdGFyLCBUQVNLUykKIAotICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5hcHBseV9hc3luYygpOicpCi0gICAgZm9yIHIgaW4gcmVzdWx0czoKLSAgICAgICAgcHJpbnQoJ1x0Jywgci5nZXQoKSkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5hcHBseV9hc3luYygpOicpCisgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICBwcmludCgnXHQnLCByLmdldCgpKQorICAgICAgICBwcmludCgpCiAKLSAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuaW1hcCgpOicpCi0gICAgZm9yIHggaW4gaW1hcF9pdDoKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5pbWFwKCk6JykKKyAgICAgICAgZm9yIHggaW4gaW1hcF9pdDoKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHgpCisgICAgICAgIHByaW50KCkKIAotICAgIHByaW50KCdVbm9yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXBfdW5vcmRlcmVkKCk6JykKLSAgICBmb3IgeCBpbiBpbWFwX3Vub3JkZXJlZF9pdDoKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdVbm9yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXBfdW5vcmRlcmVkKCk6JykKKyAgICAgICAgZm9yIHggaW4gaW1hcF91bm9yZGVyZWRfaXQ6CisgICAgICAgICAgICBwcmludCgnXHQnLCB4KQorICAgICAgICBwcmludCgpCiAKLSAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wubWFwKCkgLS0tIHdpbGwgYmxvY2sgdGlsbCBjb21wbGV0ZTonKQotICAgIGZvciB4IGluIHBvb2wubWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKToKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5tYXAoKSAtLS0gd2lsbCBibG9jayB0aWxsIGNvbXBsZXRlOicpCisgICAgICAgIGZvciB4IGluIHBvb2wubWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKToKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHgpCisgICAgICAgIHByaW50KCkKIAotICAgICMKLSAgICAjIFNpbXBsZSBiZW5jaG1hcmtzCi0gICAgIworICAgICAgICAjCisgICAgICAgICMgVGVzdCBlcnJvciBoYW5kbGluZworICAgICAgICAjCiAKLSAgICBOID0gMTAwMDAwCi0gICAgcHJpbnQoJ2RlZiBwb3czKHgpOiByZXR1cm4geCoqMycpCisgICAgICAgIHByaW50KCdUZXN0aW5nIGVycm9yIGhhbmRsaW5nOicpCiAKLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBBID0gbGlzdChtYXAocG93MywgcmFuZ2UoTikpKQotICAgIHByaW50KCdcdG1hcChwb3czLCByYW5nZSglZCkpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgIChOLCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQiA9IHBvb2wubWFwKHBvdzMsIHJhbmdlKE4pKQotICAgIHByaW50KCdcdHBvb2wubWFwKHBvdzMsIHJhbmdlKCVkKSk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKE4sIHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBDID0gbGlzdChwb29sLmltYXAocG93MywgcmFuZ2UoTiksIGNodW5rc2l6ZT1OLy84KSkKLSAgICBwcmludCgnXHRsaXN0KHBvb2wuaW1hcChwb3czLCByYW5nZSglZCksIGNodW5rc2l6ZT0lZCkpOlxuXHRcdCVzJyBcCi0gICAgICAgICAgJyBzZWNvbmRzJyAlIChOLCBOLy84LCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgYXNzZXJ0IEEgPT0gQiA9PSBDLCAobGVuKEEpLCBsZW4oQiksIGxlbihDKSkKLSAgICBwcmludCgpCi0KLSAgICBMID0gW05vbmVdICogMTAwMDAwMAotICAgIHByaW50KCdkZWYgbm9vcCh4KTogcGFzcycpCi0gICAgcHJpbnQoJ0wgPSBbTm9uZV0gKiAxMDAwMDAwJykKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEEgPSBsaXN0KG1hcChub29wLCBMKSkKLSAgICBwcmludCgnXHRtYXAobm9vcCwgTCk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBCID0gcG9vbC5tYXAobm9vcCwgTCkKLSAgICBwcmludCgnXHRwb29sLm1hcChub29wLCBMKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAodGltZS50aW1lKCkgLSB0KSkKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEMgPSBsaXN0KHBvb2wuaW1hcChub29wLCBMLCBjaHVua3NpemU9bGVuKEwpLy84KSkKLSAgICBwcmludCgnXHRsaXN0KHBvb2wuaW1hcChub29wLCBMLCBjaHVua3NpemU9JWQpKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAobGVuKEwpLy84LCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgYXNzZXJ0IEEgPT0gQiA9PSBDLCAobGVuKEEpLCBsZW4oQiksIGxlbihDKSkKLSAgICBwcmludCgpCi0KLSAgICBkZWwgQSwgQiwgQywgTAotCi0gICAgIwotICAgICMgVGVzdCBlcnJvciBoYW5kbGluZwotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIGVycm9yIGhhbmRsaW5nOicpCi0KLSAgICB0cnk6Ci0gICAgICAgIHByaW50KHBvb2wuYXBwbHkoZiwgKDUsKSkpCi0gICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLmFwcGx5KCknKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCi0KLSAgICB0cnk6Ci0gICAgICAgIHByaW50KHBvb2wubWFwKGYsIGxpc3QocmFuZ2UoMTApKSkpCi0gICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLm1hcCgpJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQotCi0gICAgdHJ5OgotICAgICAgICBwcmludChsaXN0KHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpKSkKLSAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIGxpc3QocG9vbC5pbWFwKCkpJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQotCi0gICAgaXQgPSBwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKQotICAgIGZvciBpIGluIHJhbmdlKDEwKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgeCA9IG5leHQoaXQpCisgICAgICAgICAgICBwcmludChwb29sLmFwcGx5KGYsICg1LCkpKQogICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBpZiBpID09IDU6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLmFwcGx5KCknKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgaSA9PSA1OgotICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgYXNzZXJ0IGkgPT0gOQotICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIElNYXBJdGVyYXRvci5uZXh0KCknKQotICAgIHByaW50KCkKLQotICAgICMKLSAgICAjIFRlc3RpbmcgdGltZW91dHMKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBBcHBseVJlc3VsdC5nZXQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKLSAgICByZXMgPSBwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgVEFTS1NbMF0pCi0gICAgd2hpbGUgMToKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuXHQlcycgJSByZXMuZ2V0KDAuMDIpKQotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKLSAgICBwcmludCgpCi0gICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQocG9vbC5tYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gcG9vbC5tYXAoKScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgcHJpbnQoJ1Rlc3RpbmcgSU1hcEl0ZXJhdG9yLm5leHQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKLSAgICBpdCA9IHBvb2wuaW1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUykKLSAgICB3aGlsZSAxOgotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIGl0Lm5leHQoMC4wMikpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKLSAgICBwcmludCgpCi0gICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQobGlzdChwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIGxpc3QocG9vbC5pbWFwKCkpJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCiAKLSAgICAjCi0gICAgIyBUZXN0aW5nIGNhbGxiYWNrCi0gICAgIworICAgICAgICBpdCA9IHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB4ID0gbmV4dChpdCkKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBpID09IDU6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKIAotICAgIHByaW50KCdUZXN0aW5nIGNhbGxiYWNrOicpCisgICAgICAgIGFzc2VydCBpID09IDkKKyAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gSU1hcEl0ZXJhdG9yLm5leHQoKScpCisgICAgICAgIHByaW50KCkKIAotICAgIEEgPSBbXQotICAgIEIgPSBbNTYsIDAsIDEsIDgsIDI3LCA2NCwgMTI1LCAyMTYsIDM0MywgNTEyLCA3MjldCisgICAgICAgICMKKyAgICAgICAgIyBUZXN0aW5nIHRpbWVvdXRzCisgICAgICAgICMKIAotICAgIHIgPSBwb29sLmFwcGx5X2FzeW5jKG11bCwgKDcsIDgpLCBjYWxsYmFjaz1BLmFwcGVuZCkKLSAgICByLndhaXQoKQorICAgICAgICBwcmludCgnVGVzdGluZyBBcHBseVJlc3VsdC5nZXQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKKyAgICAgICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhjYWxjdWxhdGUsIFRBU0tTWzBdKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIHJlcy5nZXQoMC4wMikpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQorICAgICAgICBwcmludCgpCisgICAgICAgIHByaW50KCkKIAotICAgIHIgPSBwb29sLm1hcF9hc3luYyhwb3czLCBsaXN0KHJhbmdlKDEwKSksIGNhbGxiYWNrPUEuZXh0ZW5kKQotICAgIHIud2FpdCgpCi0KLSAgICBpZiBBID09IEI6Ci0gICAgICAgIHByaW50KCdcdGNhbGxiYWNrcyBzdWNjZWVkZWRcbicpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoJ1x0KioqIGNhbGxiYWNrcyBmYWlsZWRcblx0XHQlcyAhPSAlc1xuJyAlIChBLCBCKSkKLQotICAgICMKLSAgICAjIENoZWNrIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyB0YXNrcwotICAgICMKLQotICAgIGFzc2VydCBub3QgcG9vbC5fY2FjaGUsICdjYWNoZSA9ICVyJyAlIHBvb2wuX2NhY2hlCi0KLSAgICAjCi0gICAgIyBDaGVjayBjbG9zZSgpIG1ldGhvZHMKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBjbG9zZSgpOicpCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCB3b3JrZXIuaXNfYWxpdmUoKQotCi0gICAgcmVzdWx0ID0gcG9vbC5hcHBseV9hc3luYyh0aW1lLnNsZWVwLCBbMC41XSkKLSAgICBwb29sLmNsb3NlKCkKLSAgICBwb29sLmpvaW4oKQotCi0gICAgYXNzZXJ0IHJlc3VsdC5nZXQoKSBpcyBOb25lCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdGNsb3NlKCkgc3VjY2VlZGVkXG4nKQotCi0gICAgIwotICAgICMgQ2hlY2sgdGVybWluYXRlKCkgbWV0aG9kCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgdGVybWluYXRlKCk6JykKLQotICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgyKQotICAgIERFTFRBID0gMC4xCi0gICAgaWdub3JlID0gcG9vbC5hcHBseShwb3czLCBbMl0pCi0gICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKHRpbWUuc2xlZXAsIFtERUxUQV0pIGZvciBpIGluIHJhbmdlKDEwMCldCi0gICAgcG9vbC50ZXJtaW5hdGUoKQotICAgIHBvb2wuam9pbigpCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdHRlcm1pbmF0ZSgpIHN1Y2NlZWRlZFxuJykKLQotICAgICMKLSAgICAjIENoZWNrIGdhcmJhZ2UgY29sbGVjdGlvbgotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIGdhcmJhZ2UgY29sbGVjdGlvbjonKQotCi0gICAgcG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDIpCi0gICAgREVMVEEgPSAwLjEKLSAgICBwcm9jZXNzZXMgPSBwb29sLl9wb29sCi0gICAgaWdub3JlID0gcG9vbC5hcHBseShwb3czLCBbMl0pCi0gICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKHRpbWUuc2xlZXAsIFtERUxUQV0pIGZvciBpIGluIHJhbmdlKDEwMCldCi0KLSAgICByZXN1bHRzID0gcG9vbCA9IE5vbmUKLQotICAgIHRpbWUuc2xlZXAoREVMVEEgKiAyKQotCi0gICAgZm9yIHdvcmtlciBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdGdhcmJhZ2UgY29sbGVjdGlvbiBzdWNjZWVkZWRcbicpCisgICAgICAgIHByaW50KCdUZXN0aW5nIElNYXBJdGVyYXRvci5uZXh0KCkgd2l0aCB0aW1lb3V0OicsIGVuZD0nICcpCisgICAgICAgIGl0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIGl0Lm5leHQoMC4wMikpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLicpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgbXVsdGlwcm9jZXNzaW5nLmZyZWV6ZV9zdXBwb3J0KCkKLQotICAgIGFzc2VydCBsZW4oc3lzLmFyZ3YpIGluICgxLCAyKQotCi0gICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxIG9yIHN5cy5hcmd2WzFdID09ICdwcm9jZXNzZXMnOgotICAgICAgICBwcmludCgnIFVzaW5nIHByb2Nlc3NlcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICd0aHJlYWRzJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyB0aHJlYWRzICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmR1bW15IGFzIG11bHRpcHJvY2Vzc2luZwotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCdVc2FnZTpcblx0JXMgW3Byb2Nlc3NlcyB8IHRocmVhZHNdJyAlIHN5cy5hcmd2WzBdKQotICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDIpCi0KICAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9zeW5jaHJvbml6ZS5weSBiL0RvYy9pbmNsdWRlcy9tcF9zeW5jaHJvbml6ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFkYmMzOC4uMDAwMDAwMAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAsMCBAQAotIwotIyBBIHRlc3QgZmlsZSBmb3IgdGhlIGBtdWx0aXByb2Nlc3NpbmdgIHBhY2thZ2UKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCi1pbXBvcnQgdGltZQotaW1wb3J0IHN5cwotaW1wb3J0IHJhbmRvbQotZnJvbSBxdWV1ZSBpbXBvcnQgRW1wdHkKLQotaW1wb3J0IG11bHRpcHJvY2Vzc2luZyAgICAgICAgICAgICAgICMgbWF5IGdldCBvdmVyd3JpdHRlbgotCi0KLSMjIyMgVEVTVF9WQUxVRQotCi1kZWYgdmFsdWVfZnVuYyhydW5uaW5nLCBtdXRleCk6Ci0gICAgcmFuZG9tLnNlZWQoKQotICAgIHRpbWUuc2xlZXAocmFuZG9tLnJhbmRvbSgpKjQpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBwcmludCgnXG5cdFx0XHQnICsgc3RyKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkgKyAnIGhhcyBmaW5pc2hlZCcpCi0gICAgcnVubmluZy52YWx1ZSAtPSAxCi0gICAgbXV0ZXgucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X3ZhbHVlKCk6Ci0gICAgVEFTS1MgPSAxMAotICAgIHJ1bm5pbmcgPSBtdWx0aXByb2Nlc3NpbmcuVmFsdWUoJ2knLCBUQVNLUykKLSAgICBtdXRleCA9IG11bHRpcHJvY2Vzc2luZy5Mb2NrKCkKLQotICAgIGZvciBpIGluIHJhbmdlKFRBU0tTKToKLSAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD12YWx1ZV9mdW5jLCBhcmdzPShydW5uaW5nLCBtdXRleCkpCi0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgd2hpbGUgcnVubmluZy52YWx1ZSA+IDA6Ci0gICAgICAgIHRpbWUuc2xlZXAoMC4wOCkKLSAgICAgICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgICAgIHByaW50KHJ1bm5pbmcudmFsdWUsIGVuZD0nICcpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBtdXRleC5yZWxlYXNlKCkKLQotICAgIHByaW50KCkKLSAgICBwcmludCgnTm8gbW9yZSBydW5uaW5nIHByb2Nlc3NlcycpCi0KLQotIyMjIyBURVNUX1FVRVVFCi0KLWRlZiBxdWV1ZV9mdW5jKHF1ZXVlKToKLSAgICBmb3IgaSBpbiByYW5nZSgzMCk6Ci0gICAgICAgIHRpbWUuc2xlZXAoMC41ICogcmFuZG9tLnJhbmRvbSgpKQotICAgICAgICBxdWV1ZS5wdXQoaSppKQotICAgIHF1ZXVlLnB1dCgnU1RPUCcpCi0KLWRlZiB0ZXN0X3F1ZXVlKCk6Ci0gICAgcSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCi0KLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXF1ZXVlX2Z1bmMsIGFyZ3M9KHEsKSkKLSAgICBwLnN0YXJ0KCkKLQotICAgIG8gPSBOb25lCi0gICAgd2hpbGUgbyAhPSAnU1RPUCc6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG8gPSBxLmdldCh0aW1lb3V0PTAuMykKLSAgICAgICAgICAgIHByaW50KG8sIGVuZD0nICcpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IEVtcHR5OgotICAgICAgICAgICAgcHJpbnQoJ1RJTUVPVVQnKQotCi0gICAgcHJpbnQoKQotCi0KLSMjIyMgVEVTVF9DT05ESVRJT04KLQotZGVmIGNvbmRpdGlvbl9mdW5jKGNvbmQpOgotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgcHJpbnQoJ1x0JyArIHN0cihjb25kKSkKLSAgICB0aW1lLnNsZWVwKDIpCi0gICAgcHJpbnQoJ1x0Y2hpbGQgaXMgbm90aWZ5aW5nJykKLSAgICBwcmludCgnXHQnICsgc3RyKGNvbmQpKQotICAgIGNvbmQubm90aWZ5KCkKLSAgICBjb25kLnJlbGVhc2UoKQotCi1kZWYgdGVzdF9jb25kaXRpb24oKToKLSAgICBjb25kID0gbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpCi0KLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWNvbmRpdGlvbl9mdW5jLCBhcmdzPShjb25kLCkpCi0gICAgcHJpbnQoY29uZCkKLQotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgcHJpbnQoY29uZCkKLSAgICBjb25kLmFjcXVpcmUoKQotICAgIHByaW50KGNvbmQpCi0KLSAgICBwLnN0YXJ0KCkKLQotICAgIHByaW50KCdtYWluIGlzIHdhaXRpbmcnKQotICAgIGNvbmQud2FpdCgpCi0gICAgcHJpbnQoJ21haW4gaGFzIHdva2VuIHVwJykKLQotICAgIHByaW50KGNvbmQpCi0gICAgY29uZC5yZWxlYXNlKCkKLSAgICBwcmludChjb25kKQotICAgIGNvbmQucmVsZWFzZSgpCi0KLSAgICBwLmpvaW4oKQotICAgIHByaW50KGNvbmQpCi0KLQotIyMjIyBURVNUX1NFTUFQSE9SRQotCi1kZWYgc2VtYXBob3JlX2Z1bmMoc2VtYSwgbXV0ZXgsIHJ1bm5pbmcpOgotICAgIHNlbWEuYWNxdWlyZSgpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBydW5uaW5nLnZhbHVlICs9IDEKLSAgICBwcmludChydW5uaW5nLnZhbHVlLCAndGFza3MgYXJlIHJ1bm5pbmcnKQotICAgIG11dGV4LnJlbGVhc2UoKQotCi0gICAgcmFuZG9tLnNlZWQoKQotICAgIHRpbWUuc2xlZXAocmFuZG9tLnJhbmRvbSgpKjIpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBydW5uaW5nLnZhbHVlIC09IDEKLSAgICBwcmludCgnJXMgaGFzIGZpbmlzaGVkJyAlIG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkKLSAgICBtdXRleC5yZWxlYXNlKCkKLQotICAgIHNlbWEucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X3NlbWFwaG9yZSgpOgotICAgIHNlbWEgPSBtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKDMpCi0gICAgbXV0ZXggPSBtdWx0aXByb2Nlc3NpbmcuUkxvY2soKQotICAgIHJ1bm5pbmcgPSBtdWx0aXByb2Nlc3NpbmcuVmFsdWUoJ2knLCAwKQotCi0gICAgcHJvY2Vzc2VzID0gWwotICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VtYXBob3JlX2Z1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHNlbWEsIG11dGV4LCBydW5uaW5nKSkKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApCi0gICAgICAgIF0KLQotICAgIGZvciBwIGluIHByb2Nlc3NlczoKLSAgICAgICAgcC5zdGFydCgpCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuam9pbigpCi0KLQotIyMjIyBURVNUX0pPSU5fVElNRU9VVAotCi1kZWYgam9pbl90aW1lb3V0X2Z1bmMoKToKLSAgICBwcmludCgnXHRjaGlsZCBzbGVlcGluZycpCi0gICAgdGltZS5zbGVlcCg1LjUpCi0gICAgcHJpbnQoJ1xuXHRjaGlsZCB0ZXJtaW5hdGluZycpCi0KLWRlZiB0ZXN0X2pvaW5fdGltZW91dCgpOgotICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9am9pbl90aW1lb3V0X2Z1bmMpCi0gICAgcC5zdGFydCgpCi0KLSAgICBwcmludCgnd2FpdGluZyBmb3IgcHJvY2VzcyB0byBmaW5pc2gnKQotCi0gICAgd2hpbGUgMToKLSAgICAgICAgcC5qb2luKHRpbWVvdXQ9MSkKLSAgICAgICAgaWYgbm90IHAuaXNfYWxpdmUoKToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHByaW50KCcuJywgZW5kPScgJykKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0KLQotIyMjIyBURVNUX0VWRU5UCi0KLWRlZiBldmVudF9mdW5jKGV2ZW50KToKLSAgICBwcmludCgnXHQlciBpcyB3YWl0aW5nJyAlIG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkKLSAgICBldmVudC53YWl0KCkKLSAgICBwcmludCgnXHQlciBoYXMgd29rZW4gdXAnICUgbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpKQotCi1kZWYgdGVzdF9ldmVudCgpOgotICAgIGV2ZW50ID0gbXVsdGlwcm9jZXNzaW5nLkV2ZW50KCkKLQotICAgIHByb2Nlc3NlcyA9IFttdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9ZXZlbnRfZnVuYywgYXJncz0oZXZlbnQsKSkKLSAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSldCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgcHJpbnQoJ21haW4gaXMgc2xlZXBpbmcnKQotICAgIHRpbWUuc2xlZXAoMikKLQotICAgIHByaW50KCdtYWluIGlzIHNldHRpbmcgZXZlbnQnKQotICAgIGV2ZW50LnNldCgpCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuam9pbigpCi0KLQotIyMjIyBURVNUX1NIQVJFRFZBTFVFUwotCi1kZWYgc2hhcmVkdmFsdWVzX2Z1bmModmFsdWVzLCBhcnJheXMsIHNoYXJlZF92YWx1ZXMsIHNoYXJlZF9hcnJheXMpOgotICAgIGZvciBpIGluIHJhbmdlKGxlbih2YWx1ZXMpKToKLSAgICAgICAgdiA9IHZhbHVlc1tpXVsxXQotICAgICAgICBzdiA9IHNoYXJlZF92YWx1ZXNbaV0udmFsdWUKLSAgICAgICAgYXNzZXJ0IHYgPT0gc3YKLQotICAgIGZvciBpIGluIHJhbmdlKGxlbih2YWx1ZXMpKToKLSAgICAgICAgYSA9IGFycmF5c1tpXVsxXQotICAgICAgICBzYSA9IGxpc3Qoc2hhcmVkX2FycmF5c1tpXVs6XSkKLSAgICAgICAgYXNzZXJ0IGEgPT0gc2EKLQotICAgIHByaW50KCdUZXN0cyBwYXNzZWQnKQotCi1kZWYgdGVzdF9zaGFyZWR2YWx1ZXMoKToKLSAgICB2YWx1ZXMgPSBbCi0gICAgICAgICgnaScsIDEwKSwKLSAgICAgICAgKCdoJywgLTIpLAotICAgICAgICAoJ2QnLCAxLjI1KQotICAgICAgICBdCi0gICAgYXJyYXlzID0gWwotICAgICAgICAoJ2knLCBsaXN0KHJhbmdlKDEwMCkpKSwKLSAgICAgICAgKCdkJywgWzAuMjUgKiBpIGZvciBpIGluIHJhbmdlKDEwMCldKSwKLSAgICAgICAgKCdIJywgbGlzdChyYW5nZSgxMDAwKSkpCi0gICAgICAgIF0KLQotICAgIHNoYXJlZF92YWx1ZXMgPSBbbXVsdGlwcm9jZXNzaW5nLlZhbHVlKGlkLCB2KSBmb3IgaWQsIHYgaW4gdmFsdWVzXQotICAgIHNoYXJlZF9hcnJheXMgPSBbbXVsdGlwcm9jZXNzaW5nLkFycmF5KGlkLCBhKSBmb3IgaWQsIGEgaW4gYXJyYXlzXQotCi0gICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKAotICAgICAgICB0YXJnZXQ9c2hhcmVkdmFsdWVzX2Z1bmMsCi0gICAgICAgIGFyZ3M9KHZhbHVlcywgYXJyYXlzLCBzaGFyZWRfdmFsdWVzLCBzaGFyZWRfYXJyYXlzKQotICAgICAgICApCi0gICAgcC5zdGFydCgpCi0gICAgcC5qb2luKCkKLQotICAgIGFzc2VydCBwLmV4aXRjb2RlID09IDAKLQotCi0jIyMjCi0KLWRlZiB0ZXN0KG5hbWVzcGFjZT1tdWx0aXByb2Nlc3NpbmcpOgotICAgIGdsb2JhbCBtdWx0aXByb2Nlc3NpbmcKLQotICAgIG11bHRpcHJvY2Vzc2luZyA9IG5hbWVzcGFjZQotCi0gICAgZm9yIGZ1bmMgaW4gW3Rlc3RfdmFsdWUsIHRlc3RfcXVldWUsIHRlc3RfY29uZGl0aW9uLAotICAgICAgICAgICAgICAgICB0ZXN0X3NlbWFwaG9yZSwgdGVzdF9qb2luX3RpbWVvdXQsIHRlc3RfZXZlbnQsCi0gICAgICAgICAgICAgICAgIHRlc3Rfc2hhcmVkdmFsdWVzXToKLQotICAgICAgICBwcmludCgnXG5cdCMjIyMjIyMjICVzXG4nICUgZnVuYy5fX25hbWVfXykKLSAgICAgICAgZnVuYygpCi0KLSAgICBpZ25vcmUgPSBtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkgICAgICAjIGNsZWFudXAgYW55IG9sZCBwcm9jZXNzZXMKLSAgICBpZiBoYXNhdHRyKG11bHRpcHJvY2Vzc2luZywgJ19kZWJ1Z19pbmZvJyk6Ci0gICAgICAgIGluZm8gPSBtdWx0aXByb2Nlc3NpbmcuX2RlYnVnX2luZm8oKQotICAgICAgICBpZiBpbmZvOgotICAgICAgICAgICAgcHJpbnQoaW5mbykKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3RoZXJlIHNob3VsZCBiZSBubyBwb3NpdGl2ZSByZWZjb3VudHMgbGVmdCcpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnQoKQotCi0gICAgYXNzZXJ0IGxlbihzeXMuYXJndikgaW4gKDEsIDIpCi0KLSAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDEgb3Igc3lzLmFyZ3ZbMV0gPT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgcHJvY2Vzc2VzICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBuYW1lc3BhY2UgPSBtdWx0aXByb2Nlc3NpbmcKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICdtYW5hZ2VyJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyBwcm9jZXNzZXMgYW5kIGEgbWFuYWdlciAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgbmFtZXNwYWNlID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotICAgICAgICBuYW1lc3BhY2UuUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCi0gICAgICAgIG5hbWVzcGFjZS5jdXJyZW50X3Byb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzCi0gICAgICAgIG5hbWVzcGFjZS5hY3RpdmVfY2hpbGRyZW4gPSBtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAndGhyZWFkcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgdGhyZWFkcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5kdW1teSBhcyBuYW1lc3BhY2UKLSAgICBlbHNlOgotICAgICAgICBwcmludCgnVXNhZ2U6XG5cdCVzIFtwcm9jZXNzZXMgfCBtYW5hZ2VyIHwgdGhyZWFkc10nICUgc3lzLmFyZ3ZbMF0pCi0gICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoMikKLQotICAgIHRlc3QobmFtZXNwYWNlKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3dlYnNlcnZlci5weSBiL0RvYy9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MTAyNGQuLjAwMDAwMDAKLS0tIGEvRG9jL2luY2x1ZGVzL21wX3dlYnNlcnZlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLSMKLSMgRXhhbXBsZSB3aGVyZSBhIHBvb2wgb2YgaHR0cCBzZXJ2ZXJzIHNoYXJlIGEgc2luZ2xlIGxpc3RlbmluZyBzb2NrZXQKLSMKLSMgT24gV2luZG93cyB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIHRoZSBhYmlsaXR5IHRvIHBpY2tsZSBhIHNvY2tldAotIyBvYmplY3Qgc28gdGhhdCB0aGUgd29ya2VyIHByb2Nlc3NlcyBjYW4gaW5oZXJpdCBhIGNvcHkgb2YgdGhlIHNlcnZlcgotIyBvYmplY3QuICAoV2UgaW1wb3J0IGBtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uYCB0byBlbmFibGUgdGhpcyBwaWNrbGluZy4pCi0jCi0jIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gYHNvY2tldC5hY2NlcHQoKWAgbWV0aG9kIGJ5Ci0jIHVzaW5nIGEgcHJvY2Vzcy1zaGFyZWQgbG9jayAtLSBkb2VzIG5vdCBzZWVtIHRvIGJlIG5lY2Vzc2FyeS4KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgZnJlZXplX3N1cHBvcnQKLWZyb20gaHR0cC5zZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2ZXIKLWZyb20gaHR0cC5zZXJ2ZXIgaW1wb3J0IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgotCi1pZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbiAgICAjIG1ha2Ugc29ja2V0cyBwaWNrYWJsZS9pbmhlcml0YWJsZQotCi0KLWRlZiBub3RlKGZvcm1hdCwgKmFyZ3MpOgotICAgIHN5cy5zdGRlcnIud3JpdGUoJ1slc11cdCVzXG4nICUgKGN1cnJlbnRfcHJvY2VzcygpLm5hbWUsIGZvcm1hdCAlIGFyZ3MpKQotCi0KLWNsYXNzIFJlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6Ci0gICAgIyB3ZSBvdmVycmlkZSBsb2dfbWVzc2FnZSgpIHRvIHNob3cgd2hpY2ggcHJvY2VzcyBpcyBoYW5kbGluZyB0aGUgcmVxdWVzdAotICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXQsICphcmdzKToKLSAgICAgICAgbm90ZShmb3JtYXQsICphcmdzKQotCi1kZWYgc2VydmVfZm9yZXZlcihzZXJ2ZXIpOgotICAgIG5vdGUoJ3N0YXJ0aW5nIHNlcnZlcicpCi0gICAgdHJ5OgotICAgICAgICBzZXJ2ZXIuc2VydmVfZm9yZXZlcigpCi0gICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICBwYXNzCi0KLQotZGVmIHJ1bnBvb2woYWRkcmVzcywgbnVtYmVyX29mX3Byb2Nlc3Nlcyk6Ci0gICAgIyBjcmVhdGUgYSBzaW5nbGUgc2VydmVyIG9iamVjdCAtLSBjaGlsZHJlbiB3aWxsIGVhY2ggaW5oZXJpdCBhIGNvcHkKLSAgICBzZXJ2ZXIgPSBIVFRQU2VydmVyKGFkZHJlc3MsIFJlcXVlc3RIYW5kbGVyKQotCi0gICAgIyBjcmVhdGUgY2hpbGQgcHJvY2Vzc2VzIHRvIGFjdCBhcyB3b3JrZXJzCi0gICAgZm9yIGkgaW4gcmFuZ2UobnVtYmVyX29mX3Byb2Nlc3NlcyAtIDEpOgotICAgICAgICBQcm9jZXNzKHRhcmdldD1zZXJ2ZV9mb3JldmVyLCBhcmdzPShzZXJ2ZXIsKSkuc3RhcnQoKQotCi0gICAgIyBtYWluIHByb2Nlc3MgYWxzbyBhY3RzIGFzIGEgd29ya2VyCi0gICAgc2VydmVfZm9yZXZlcihzZXJ2ZXIpCi0KLQotZGVmIHRlc3QoKToKLSAgICBESVIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJykKLSAgICBBRERSRVNTID0gKCdsb2NhbGhvc3QnLCA4MDAwKQotICAgIE5VTUJFUl9PRl9QUk9DRVNTRVMgPSA0Ci0KLSAgICBwcmludCgnU2VydmluZyBhdCBodHRwOi8vJXM6JWQgdXNpbmcgJWQgd29ya2VyIHByb2Nlc3NlcycgJSBcCi0gICAgICAgICAgKEFERFJFU1NbMF0sIEFERFJFU1NbMV0sIE5VTUJFUl9PRl9QUk9DRVNTRVMpKQotICAgIHByaW50KCdUbyBleGl0IHByZXNzIEN0cmwtJyArIFsnQycsICdCcmVhayddW3N5cy5wbGF0Zm9ybT09J3dpbjMyJ10pCi0KLSAgICBvcy5jaGRpcihESVIpCi0gICAgcnVucG9vbChBRERSRVNTLCBOVU1CRVJfT0ZfUFJPQ0VTU0VTKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJlZXplX3N1cHBvcnQoKQotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3dvcmtlcnMucHkgYi9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQppbmRleCBlNjZkOTdiLi4zYjkyMjY5IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQorKysgYi9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQpAQCAtMSwxNiArMSwzIEBACi0jCi0jIFNpbXBsZSBleGFtcGxlIHdoaWNoIHVzZXMgYSBwb29sIG9mIHdvcmtlcnMgdG8gY2Fycnkgb3V0IHNvbWUgdGFza3MuCi0jCi0jIE5vdGljZSB0aGF0IHRoZSByZXN1bHRzIHdpbGwgcHJvYmFibHkgbm90IGNvbWUgb3V0IG9mIHRoZSBvdXRwdXQKLSMgcXVldWUgaW4gdGhlIHNhbWUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGNvcnJlc3BvbmRpbmcgdGFza3Mgd2VyZQotIyBwdXQgb24gdGhlIGlucHV0IHF1ZXVlLiAgSWYgaXQgaXMgaW1wb3J0YW50IHRvIGdldCB0aGUgcmVzdWx0cyBiYWNrCi0jIGluIHRoZSBvcmlnaW5hbCBvcmRlciB0aGVuIGNvbnNpZGVyIHVzaW5nIGBQb29sLm1hcCgpYCBvcgotIyBgUG9vbC5pbWFwKClgICh3aGljaCB3aWxsIHNhdmUgb24gdGhlIGFtb3VudCBvZiBjb2RlIG5lZWRlZCBhbnl3YXkpLgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KIGltcG9ydCB0aW1lCiBpbXBvcnQgcmFuZG9tCiAKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmggYi9Eb2MvaW5jbHVkZXMvdHlwZXN0cnVjdC5oCmluZGV4IDMyNjQ3YzAuLmZjYjg0NmEgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmgKKysrIGIvRG9jL2luY2x1ZGVzL3R5cGVzdHJ1Y3QuaApAQCAtNzAsNCArNzAsMTEgQEAKICAgICBQeU9iamVjdCAqdHBfc3ViY2xhc3NlczsKICAgICBQeU9iamVjdCAqdHBfd2Vha2xpc3Q7CiAKKyAgICBkZXN0cnVjdG9yIHRwX2RlbDsKKworICAgIC8qIFR5cGUgYXR0cmlidXRlIGNhY2hlIHZlcnNpb24gdGFnLiBBZGRlZCBpbiB2ZXJzaW9uIDIuNiAqLworICAgIHVuc2lnbmVkIGludCB0cF92ZXJzaW9uX3RhZzsKKworICAgIGRlc3RydWN0b3IgdHBfZmluYWxpemU7CisKIH0gUHlUeXBlT2JqZWN0OwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvMnRvMy5yc3QgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdAppbmRleCAxZTVmNDJkLi4xMDkyZTZiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS8ydG8zLnJzdAorKysgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdApAQCAtMTQyLDYgKzE0MiwzOSBAQAogICAgUmVtb3ZlcyB1c2FnZSBvZiA6ZnVuYzpgYXBwbHlgLiAgRm9yIGV4YW1wbGUgYGBhcHBseShmdW5jdGlvbiwgKmFyZ3MsCiAgICAqKmt3YXJncylgYCBpcyBjb252ZXJ0ZWQgdG8gYGBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpYGAuCiAKKy4uIDJ0bzNmaXhlcjo6IGFzc2VydHMKKworICAgUmVwbGFjZXMgZGVwcmVjYXRlZCA6bW9kOmB1bml0dGVzdGAgbWV0aG9kIG5hbWVzIHdpdGggdGhlIGNvcnJlY3Qgb25lcy4KKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBgYGZhaWxVbmxlc3NFcXVhbChhLCBiKWBgICAgICAgICAgOm1ldGg6YGFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsPmAKKyAgIGBgYXNzZXJ0RXF1YWxzKGEsIGIpYGAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWw+YAorICAgYGBmYWlsSWZFcXVhbChhLCBiKWBgICAgICAgICAgICAgIDptZXRoOmBhc3NlcnROb3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RFcXVhbD5gCisgICBgYGFzc2VydE5vdEVxdWFscyhhLCBiKWBgICAgICAgICAgOm1ldGg6YGFzc2VydE5vdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEVxdWFsPmAKKyAgIGBgZmFpbFVubGVzcyhhKWBgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0VHJ1ZShhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlPmAKKyAgIGBgYXNzZXJ0XyhhKWBgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0VHJ1ZShhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlPmAKKyAgIGBgZmFpbElmKGEpYGAgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0RmFsc2UoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RmFsc2U+YAorICAgYGBmYWlsVW5sZXNzUmFpc2VzKGV4YywgY2FsKWBgICAgIDptZXRoOmBhc3NlcnRSYWlzZXMoZXhjLCBjYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJhaXNlcz5gCisgICBgYGZhaWxVbmxlc3NBbG1vc3RFcXVhbChhLCBiKWBgICAgOm1ldGg6YGFzc2VydEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsPmAKKyAgIGBgYXNzZXJ0QWxtb3N0RXF1YWxzKGEsIGIpYGAgICAgICA6bWV0aDpgYXNzZXJ0QWxtb3N0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWw+YAorICAgYGBmYWlsSWZBbG1vc3RFcXVhbChhLCBiKWBgICAgICAgIDptZXRoOmBhc3NlcnROb3RBbG1vc3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RBbG1vc3RFcXVhbD5gCisgICBgYGFzc2VydE5vdEFsbW9zdEVxdWFscyhhLCBiKWBgICAgOm1ldGg6YGFzc2VydE5vdEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEFsbW9zdEVxdWFsPmAKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogLi4gMnRvM2ZpeGVyOjogYmFzZXN0cmluZwogCiAgICBDb252ZXJ0cyA6Y2xhc3M6YGJhc2VzdHJpbmdgIHRvIDpjbGFzczpgc3RyYC4KQEAgLTM0Miw2ICszNzUsMTAgQEAKIAogICAgSGFuZGxlcyB0aGUgbW92ZSBvZiA6ZnVuYzpgcmVkdWNlYCB0byA6ZnVuYzpgZnVuY3Rvb2xzLnJlZHVjZWAuCiAKKy4uIDJ0bzNmaXhlcjo6IHJlbG9hZAorCisgICBDb252ZXJ0cyA6ZnVuYzpgcmVsb2FkYCB0byA6ZnVuYzpgaW1wLnJlbG9hZGAuCisKIC4uIDJ0bzNmaXhlcjo6IHJlbmFtZXMKIAogICAgQ2hhbmdlcyA6ZGF0YTpgc3lzLm1heGludGAgdG8gOmRhdGE6YHN5cy5tYXhzaXplYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FiYy5yc3QgYi9Eb2MvbGlicmFyeS9hYmMucnN0CmluZGV4IDkyOTkxMjQuLjdhNzM3MDQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYWJjLnJzdApAQCAtMTIsOSArMTIsOSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGluZnJhc3RydWN0dXJlIGZvciBkZWZpbmluZyA6dGVybTpgYWJzdHJhY3QgYmFzZQotY2xhc3NlcyA8YWJzdHJhY3QgYmFzZSBjbGFzcz5gIChBQkNzKSBpbiBQeXRob24sIGFzIG91dGxpbmVkIGluIDpwZXA6YDMxMTlgOyBzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMKLXdhcyBhZGRlZCB0byBQeXRob24uIChTZWUgYWxzbyA6cGVwOmAzMTQxYCBhbmQgdGhlIDptb2Q6YG51bWJlcnNgIG1vZHVsZQotcmVnYXJkaW5nIGEgdHlwZSBoaWVyYXJjaHkgZm9yIG51bWJlcnMgYmFzZWQgb24gQUJDcy4pCitjbGFzc2VzIDxhYnN0cmFjdCBiYXNlIGNsYXNzPmAgKEFCQ3MpIGluIFB5dGhvbiwgYXMgb3V0bGluZWQgaW4gOnBlcDpgMzExOWA7CitzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMgd2FzIGFkZGVkIHRvIFB5dGhvbi4gKFNlZSBhbHNvIDpwZXA6YDMxNDFgIGFuZCB0aGUKKzptb2Q6YG51bWJlcnNgIG1vZHVsZSByZWdhcmRpbmcgYSB0eXBlIGhpZXJhcmNoeSBmb3IgbnVtYmVycyBiYXNlZCBvbiBBQkNzLikKIAogVGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUgaGFzIHNvbWUgY29uY3JldGUgY2xhc3NlcyB0aGF0IGRlcml2ZSBmcm9tCiBBQkNzOyB0aGVzZSBjYW4sIG9mIGNvdXJzZSwgYmUgZnVydGhlciBkZXJpdmVkLiBJbiBhZGRpdGlvbiB0aGUKQEAgLTIzLDcgKzIzLDcgQEAKIGhhc2hhYmxlIG9yIGEgbWFwcGluZy4KIAogCi1UaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNsYXNzOgorVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAuLiBjbGFzczo6IEFCQ01ldGEKIApAQCAtNTgsNiArNTgsMTAgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgICBSZXR1cm5zIHRoZSByZWdpc3RlcmVkIHN1YmNsYXNzLCB0byBhbGxvdyB1c2FnZSBhcyBhIGNsYXNzIGRlY29yYXRvci4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFRvIGRldGVjdCBjYWxscyB0byA6bWV0aDpgcmVnaXN0ZXJgLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgIDpmdW5jOmBnZXRfY2FjaGVfdG9rZW5gIGZ1bmN0aW9uLgorCiAgICBZb3UgY2FuIGFsc28gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4gYW4gYWJzdHJhY3QgYmFzZSBjbGFzczoKIAogICAgLi4gbWV0aG9kOjogX19zdWJjbGFzc2hvb2tfXyhzdWJjbGFzcykKQEAgLTEyNyw2ICsxMzEsMTkgQEAKICAgIGF2YWlsYWJsZSBhcyBhIG1ldGhvZCBvZiBgYEZvb2BgLCBzbyBpdCBpcyBwcm92aWRlZCBzZXBhcmF0ZWx5LgogCiAKKy4uIGNsYXNzOjogQUJDCisKKyAgIEEgaGVscGVyIGNsYXNzIHRoYXQgaGFzIDpjbGFzczpgQUJDTWV0YWAgYXMgaXRzIG1ldGFjbGFzcy4gIFdpdGggdGhpcyBjbGFzcywKKyAgIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgY2FuIGJlIGNyZWF0ZWQgYnkgc2ltcGx5IGRlcml2aW5nIGZyb20gOmNsYXNzOmBBQkNgLAorICAgYXZvaWRpbmcgc29tZXRpbWVzIGNvbmZ1c2luZyBtZXRhY2xhc3MgdXNhZ2UuCisKKyAgIE5vdGUgdGhhdCB0aGUgdHlwZSBvZiA6Y2xhc3M6YEFCQ2AgaXMgc3RpbGwgOmNsYXNzOmBBQkNNZXRhYCwgdGhlcmVmb3JlCisgICBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBBQkNgIHJlcXVpcmVzIHRoZSB1c3VhbCBwcmVjYXV0aW9ucyByZWdhcmRpbmcgbWV0YWNsYXNzCisgICB1c2FnZSwgYXMgbXVsdGlwbGUgaW5oZXJpdGFuY2UgbWF5IGxlYWQgdG8gbWV0YWNsYXNzIGNvbmZsaWN0cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBkZWNvcmF0b3JzOgogCiAuLiBkZWNvcmF0b3I6OiBhYnN0cmFjdG1ldGhvZApAQCAtMjk1LDYgKzMxMiwxOSBAQAogICAgICAgIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAsIG1ha2luZyB0aGlzIGRlY29yYXRvciByZWR1bmRhbnQuCiAKIAorVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisKKy4uIGZ1bmN0aW9uOjogZ2V0X2NhY2hlX3Rva2VuKCkKKworICAgUmV0dXJucyB0aGUgY3VycmVudCBhYnN0cmFjdCBiYXNlIGNsYXNzIGNhY2hlIHRva2VuLgorCisgICBUaGUgdG9rZW4gaXMgYW4gb3BhcXVlIG9iamVjdCAodGhhdCBzdXBwb3J0cyBlcXVhbGl0eSB0ZXN0aW5nKSBpZGVudGlmeWluZworICAgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBjYWNoZSBmb3IgdmlydHVhbCBzdWJjbGFzc2VzLgorICAgVGhlIHRva2VuIGNoYW5nZXMgd2l0aCBldmVyeSBjYWxsIHRvIDptZXRoOmBBQkNNZXRhLnJlZ2lzdGVyYCBvbiBhbnkgQUJDLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIEMrKyBwcm9ncmFtbWVycyBzaG91bGQgbm90ZSB0aGF0IFB5dGhvbidzIHZpcnR1YWwgYmFzZSBjbGFzcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYWlmYy5yc3QgYi9Eb2MvbGlicmFyeS9haWZjLnJzdAppbmRleCA4YTM1NDFiLi5jYWVjZmJjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9haWZjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9haWZjLnJzdApAQCAtMzAsOCArMzAsOCBAQAogc2FtcGxlZC4gIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaW5kaWNhdGUgaWYgdGhlIGF1ZGlvIGlzIG1vbm8sIHN0ZXJlbywgb3IKIHF1YWRyby4gIEVhY2ggZnJhbWUgY29uc2lzdHMgb2Ygb25lIHNhbXBsZSBwZXIgY2hhbm5lbC4gIFRoZSBzYW1wbGUgc2l6ZSBpcyB0aGUKIHNpemUgaW4gYnl0ZXMgb2YgZWFjaCBzYW1wbGUuICBUaHVzIGEgZnJhbWUgY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKiBieXRlcywgYW5kIGEgc2Vjb25kJ3Mgd29ydGggb2YgYXVkaW8gY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKlwqXCAqZnJhbWVyYXRlKiBieXRlcy4KK2BgbmNoYW5uZWxzICogc2FtcGxlc2l6ZWBgIGJ5dGVzLCBhbmQgYSBzZWNvbmQncyB3b3J0aCBvZiBhdWRpbyBjb25zaXN0cyBvZgorYGBuY2hhbm5lbHMgKiBzYW1wbGVzaXplICogZnJhbWVyYXRlYGAgYnl0ZXMuCiAKIEZvciBleGFtcGxlLCBDRCBxdWFsaXR5IGF1ZGlvIGhhcyBhIHNhbXBsZSBzaXplIG9mIHR3byBieXRlcyAoMTYgYml0cyksIHVzZXMgdHdvCiBjaGFubmVscyAoc3RlcmVvKSBhbmQgaGFzIGEgZnJhbWUgcmF0ZSBvZiA0NCwxMDAgZnJhbWVzL3NlY29uZC4gIFRoaXMgZ2l2ZXMgYQpAQCAtNTEsNiArNTEsMTEgQEAKICAgIHVzZWQgZm9yIHdyaXRpbmcsIHRoZSBmaWxlIG9iamVjdCBzaG91bGQgYmUgc2Vla2FibGUsIHVubGVzcyB5b3Uga25vdyBhaGVhZCBvZgogICAgdGltZSBob3cgbWFueSBzYW1wbGVzIHlvdSBhcmUgZ29pbmcgdG8gd3JpdGUgaW4gdG90YWwgYW5kIHVzZQogICAgOm1ldGg6YHdyaXRlZnJhbWVzcmF3YCBhbmQgOm1ldGg6YHNldG5mcmFtZXNgLgorICAgVGhlIDpmdW5jOmAub3BlbmAgZnVuY3Rpb24gbWF5IGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiAgV2hlbgorICAgdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBjb21wbGV0ZXMsIHRoZSA6bWV0aDpgfmFpZmMuY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTdXBwb3J0IGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3YXMgYWRkZWQuCiAKIE9iamVjdHMgcmV0dXJuZWQgYnkgOmZ1bmM6YC5vcGVuYCB3aGVuIGEgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcgaGF2ZSB0aGUKIGZvbGxvd2luZyBtZXRob2RzOgpAQCAtOTIsNyArOTcsOSBAQAogCiAuLiBtZXRob2Q6OiBhaWZjLmdldHBhcmFtcygpCiAKLSAgIFJldHVybiBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZSBhYm92ZSB2YWx1ZXMgaW4gdGhlIGFib3ZlIG9yZGVyLgorICAgUmV0dXJucyBhIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsCisgICBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlCisgICA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCiAKIAogLi4gbWV0aG9kOjogYWlmYy5nZXRtYXJrZXJzKCkKQEAgLTIxOCwxMiArMjI1LDE4IEBACiAgICBXcml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgZmlsZS4gIFRoaXMgbWV0aG9kIGNhbiBvbmx5IGJlIGNhbGxlZCBhZnRlciB0aGUgYXVkaW8KICAgIGZpbGUgcGFyYW1ldGVycyBoYXZlIGJlZW4gc2V0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMgYXJlIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBhaWZjLndyaXRlZnJhbWVzcmF3KGRhdGEpCiAKICAgIExpa2UgOm1ldGg6YHdyaXRlZnJhbWVzYCwgZXhjZXB0IHRoYXQgdGhlIGhlYWRlciBvZiB0aGUgYXVkaW8gZmlsZSBpcyBub3QKICAgIHVwZGF0ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IGFpZmMuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QgYi9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QKaW5kZXggYjY4NmM0NC4uYjFiNTEzNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdApAQCAtOTc3LDkgKzk3Nyw5IEBACiBgYHR5cGVgYCBhcmd1bWVudCBpcyBhcHBsaWVkIHRvIGRlZmF1bHQgYXJndW1lbnRzLgogCiBUbyBlYXNlIHRoZSB1c2Ugb2YgdmFyaW91cyB0eXBlcyBvZiBmaWxlcywgdGhlIGFyZ3BhcnNlIG1vZHVsZSBwcm92aWRlcyB0aGUKLWZhY3RvcnkgRmlsZVR5cGUgd2hpY2ggdGFrZXMgdGhlIGBgbW9kZT1gYCBhbmQgYGBidWZzaXplPWBgIGFyZ3VtZW50cyBvZiB0aGUKLTpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLCBgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYQotd3JpdGFibGUgZmlsZTo6CitmYWN0b3J5IEZpbGVUeXBlIHdoaWNoIHRha2VzIHRoZSBgYG1vZGU9YGAsIGBgYnVmc2l6ZT1gYCwgYGBlbmNvZGluZz1gYCBhbmQKK2BgZXJyb3JzPWBgIGFyZ3VtZW50cyBvZiB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUsCitgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSB3cml0YWJsZSBmaWxlOjoKIAogICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JykpCkBAIC0xNjQ4LDE3ICsxNjQ4LDE5IEBACiBGaWxlVHlwZSBvYmplY3RzCiBeXl5eXl5eXl5eXl5eXl5eCiAKLS4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9Tm9uZSkKKy4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKQogCiAgICBUaGUgOmNsYXNzOmBGaWxlVHlwZWAgZmFjdG9yeSBjcmVhdGVzIG9iamVjdHMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSB0eXBlCiAgICBhcmd1bWVudCBvZiA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YC4gIEFyZ3VtZW50cyB0aGF0IGhhdmUKLSAgIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHMgYXMgdGhlaXIgdHlwZSB3aWxsIG9wZW4gY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcyBmaWxlcwotICAgd2l0aCB0aGUgcmVxdWVzdGVkIG1vZGVzIGFuZCBidWZmZXIgc2l6ZXM6OgorICAgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhcyB0aGVpciB0eXBlIHdpbGwgb3BlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFzCisgICBmaWxlcyB3aXRoIHRoZSByZXF1ZXN0ZWQgbW9kZXMsIGJ1ZmZlciBzaXplcywgZW5jb2RpbmdzIGFuZCBlcnJvciBoYW5kbGluZworICAgKHNlZSB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uIGZvciBtb3JlIGRldGFpbHMpOjoKIAogICAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKLSAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCi0gICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLW91dHB1dCcsICdvdXQnXSkKLSAgICAgIE5hbWVzcGFjZShvdXRwdXQ9PF9pby5CdWZmZXJlZFdyaXRlciBuYW1lPSdvdXQnPikKKyAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJhdycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCisgICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnb3V0JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycsIGVuY29kaW5nPSdVVEYtOCcpKQorICAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1yYXcnLCAncmF3LmRhdCcsICdmaWxlLnR4dCddKQorICAgICAgTmFtZXNwYWNlKG91dD08X2lvLlRleHRJT1dyYXBwZXIgbmFtZT0nZmlsZS50eHQnIG1vZGU9J3cnIGVuY29kaW5nPSdVVEYtOCc+LCByYXc9PF9pby5GaWxlSU8gbmFtZT0ncmF3LmRhdCcgbW9kZT0nd2InPikKIAogICAgRmlsZVR5cGUgb2JqZWN0cyB1bmRlcnN0YW5kIHRoZSBwc2V1ZG8tYXJndW1lbnQgYGAnLSdgYCBhbmQgYXV0b21hdGljYWxseQogICAgY29udmVydCB0aGlzIGludG8gYGBzeXMuc3RkaW5gYCBmb3IgcmVhZGFibGUgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhbmQKQEAgLTE2NjksNiArMTY3MSw5IEBACiAgICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctJ10pCiAgICAgICBOYW1lc3BhY2UoaW5maWxlPTxfaW8uVGV4dElPV3JhcHBlciBuYW1lPSc8c3RkaW4+JyBlbmNvZGluZz0nVVRGLTgnPikKIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKmVuY29kaW5ncyogYW5kICplcnJvcnMqIGtleXdvcmQgYXJndW1lbnRzLgorCiAKIEFyZ3VtZW50IGdyb3VwcwogXl5eXl5eXl5eXl5eXl5eCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QKaW5kZXggYWRiZDNiZS4uYzZmYTA2MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNoYXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdApAQCAtMTAsNiArMTAsMTEgQEAKIAogLS0tLS0tLS0tLS0tLS0KIAorLi4gbm90ZTo6CisKKyAgIFRoaXMgbW9kdWxlIGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seS4gIEZvciBuZXcgY29kZSB3ZQorICAgcmVjb21tZW5kIHVzaW5nIDptb2Q6YGFzeW5jaW9gLgorCiBUaGlzIG1vZHVsZSBidWlsZHMgb24gdGhlIDptb2Q6YGFzeW5jb3JlYCBpbmZyYXN0cnVjdHVyZSwgc2ltcGxpZnlpbmcKIGFzeW5jaHJvbm91cyBjbGllbnRzIGFuZCBzZXJ2ZXJzIGFuZCBtYWtpbmcgaXQgZWFzaWVyIHRvIGhhbmRsZSBwcm90b2NvbHMKIHdob3NlIGVsZW1lbnRzIGFyZSB0ZXJtaW5hdGVkIGJ5IGFyYml0cmFyeSBzdHJpbmdzLCBvciBhcmUgb2YgdmFyaWFibGUgbGVuZ3RoLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1kZXYucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby1kZXYucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZDI4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWRldi5yc3QKQEAgLTAsMCArMSwyNTAgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKK0RldmVsb3Agd2l0aCBhc3luY2lvCis9PT09PT09PT09PT09PT09PT09PQorCitBc3luY2hyb25vdXMgcHJvZ3JhbW1pbmcgaXMgZGlmZmVyZW50IHRoYW4gY2xhc3NpY2FsICJzZXF1ZW50aWFsIiBwcm9ncmFtbWluZy4KK1RoaXMgcGFnZSBsaXN0cyBjb21tb24gdHJhcHMgYW5kIGV4cGxhaW5zIGhvdyB0byBhdm9pZCB0aGVtLgorCisKKy4uIF9hc3luY2lvLW11bHRpdGhyZWFkaW5nOgorCitDb25jdXJyZW5jeSBhbmQgbXVsdGl0aHJlYWRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBldmVudCBsb29wIHJ1bnMgaW4gYSB0aHJlYWQgYW5kIGV4ZWN1dGVzIGFsbCBjYWxsYmFja3MgYW5kIHRhc2tzIGluIHRoZSBzYW1lCit0aHJlYWQuIFdoaWxlIGEgdGFzayBpbiBydW5uaW5nIGluIHRoZSBldmVudCBsb29wLCBubyBvdGhlciB0YXNrIGlzIHJ1bm5pbmcgaW4KK3RoZSBzYW1lIHRocmVhZC4gQnV0IHdoZW4gdGhlIHRhc2sgdXNlcyBgYHlpZWxkIGZyb21gYCwgdGhlIHRhc2sgaXMgc3VzcGVuZGVkCithbmQgdGhlIGV2ZW50IGxvb3AgZXhlY3V0ZXMgdGhlIG5leHQgdGFzay4KKworVG8gc2NoZWR1bGUgYSBjYWxsYmFjayBmcm9tIGEgZGlmZmVyZW50IHRocmVhZCwgdGhlCis6bWV0aDpgQmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZWAgbWV0aG9kIHNob3VsZCBiZSB1c2VkLiBFeGFtcGxlIHRvCitzY2hlZHVsZSBhIGNvcm91dGluZSBmcm9tIGEgZGlmZmVyZW50IHRocmVhZDo6CisKKyAgICBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKGFzeW5jaW8uYXN5bmMsIGNvcm9fZnVuYygpKQorCitNb3N0IGFzeW5jaW8gb2JqZWN0cyBhcmUgbm90IHRocmVhZCBzYWZlLiBZb3Ugc2hvdWxkIG9ubHkgd29ycnkgaWYgeW91IGFjY2Vzcworb2JqZWN0cyBvdXRzaWRlIHRoZSBldmVudCBsb29wLiBGb3IgZXhhbXBsZSwgdG8gY2FuY2VsIGEgZnV0dXJlLCBkb24ndCBjYWxsCitkaXJlY3RseSBpdHMgOm1ldGg6YEZ1dHVyZS5jYW5jZWxgIG1ldGhvZCwgYnV0OjoKKworICAgIGxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoZnV0LmNhbmNlbCkKKworVG8gaGFuZGxlIHNpZ25hbHMgYW5kIHRvIGV4ZWN1dGUgc3VicHJvY2Vzc2VzLCB0aGUgZXZlbnQgbG9vcCBtdXN0IGJlIHJ1biBpbgordGhlIG1haW4gdGhyZWFkLgorCitUaGUgOm1ldGg6YEJhc2VFdmVudExvb3AucnVuX2luX2V4ZWN1dG9yYCBtZXRob2QgY2FuIGJlIHVzZWQgd2l0aCBhIHRocmVhZCBwb29sCitleGVjdXRvciB0byBleGVjdXRlIGEgY2FsbGJhY2sgaW4gZGlmZmVyZW50IHRocmVhZCB0byBub3QgYmxvY2sgdGhlIHRocmVhZCBvZgordGhlIGV2ZW50IGxvb3AuCisKKy4uIHNlZWFsc286OgorCisgICBTZWUgdGhlIDpyZWY6YFN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIDxhc3luY2lvLXN5bmM+YCBzZWN0aW9uIHRvCisgICBzeW5jaHJvbml6ZSB0YXNrcy4KKworCisuLiBfYXN5bmNpby1oYW5kbGUtYmxvY2tpbmc6CisKK0hhbmRsZSBibG9ja2luZyBmdW5jdGlvbnMgY29ycmVjdGx5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCbG9ja2luZyBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEZvciBleGFtcGxlLCBpZiBhIGZ1bmN0aW9uCitibG9ja3MgZm9yIDEgc2Vjb25kLCBvdGhlciB0YXNrcyBhcmUgZGVsYXllZCBieSAxIHNlY29uZCB3aGljaCBjYW4gaGF2ZSBhbgoraW1wb3J0YW50IGltcGFjdCBvbiByZWFjdGl2aXR5LgorCitGb3IgbmV0d29ya2luZyBhbmQgc3VicHJvY2Vzc2VzLCB0aGUgOm1vZDpgYXN5bmNpb2AgbW9kdWxlIHByb3ZpZGVzIGhpZ2gtbGV2ZWwKK0FQSXMgbGlrZSA6cmVmOmBwcm90b2NvbHMgPGFzeW5jaW8tcHJvdG9jb2w+YC4KKworQW4gZXhlY3V0b3IgY2FuIGJlIHVzZWQgdG8gcnVuIGEgdGFzayBpbiBhIGRpZmZlcmVudCB0aHJlYWQgb3IgZXZlbiBpbiBhCitkaWZmZXJlbnQgcHJvY2VzcywgdG8gbm90IGJsb2NrIHRoZSB0aHJlYWQgb2YgdGhlIGV2ZW50IGxvb3AuIFNlZSB0aGUKKzptZXRoOmBCYXNlRXZlbnRMb29wLnJ1bl9pbl9leGVjdXRvcmAgbWV0aG9kLgorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YERlbGF5ZWQgY2FsbHMgPGFzeW5jaW8tZGVsYXllZC1jYWxscz5gIHNlY3Rpb24gZGV0YWlscyBob3cgdGhlCisgICBldmVudCBsb29wIGhhbmRsZXMgdGltZS4KKworCisuLiBfYXN5bmNpby1sb2dnZXI6CisKK0xvZ2dpbmcKKy0tLS0tLS0KKworVGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSBsb2dzIGluZm9ybWF0aW9uIHdpdGggdGhlIDptb2Q6YGxvZ2dpbmdgIG1vZHVsZSBpbgordGhlIGxvZ2dlciBgYCdhc3luY2lvJ2BgLgorCisKKy4uIF9hc3luY2lvLWNvcm91dGluZS1ub3Qtc2NoZWR1bGVkOgorCitEZXRlY3QgY29yb3V0aW5lIG9iamVjdHMgbmV2ZXIgc2NoZWR1bGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gYSBjb3JvdXRpbmUgZnVuY3Rpb24gaXMgY2FsbGVkIGJ1dCBub3QgcGFzc2VkIHRvIDpmdW5jOmBhc3luY2Agb3IgdG8gdGhlCis6Y2xhc3M6YFRhc2tgIGNvbnN0cnVjdG9yLCBpdCBpcyBub3Qgc2NoZWR1bGVkIGFuZCBpdCBpcyBwcm9iYWJseSBhIGJ1Zy4KKworVG8gZGV0ZWN0IHN1Y2ggYnVnLCBzZXQgOmRhdGE6YGFzeW5jaW8udGFza3MuX0RFQlVHYCB0byBgYFRydWVgYC4gV2hlbiB0aGUKK2Nvcm91dGluZSBvYmplY3QgaXMgZGVzdHJveWVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3RvciwgYSBsb2cgd2lsbCBiZSBlbWl0dGVkCit3aXRoIHRoZSB0cmFjZWJhY2sgd2hlcmUgdGhlIGNvcm91dGluZSBmdW5jdGlvbiB3YXMgY2FsbGVkLiBTZWUgdGhlCis6cmVmOmBhc3luY2lvIGxvZ2dlciA8YXN5bmNpby1sb2dnZXI+YC4KKworVGhlIGRlYnVnIGZsYWcgY2hhbmdlcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSA6ZnVuYzpgY29yb3V0aW5lYCBkZWNvcmF0b3IuIFRoZQorZGVidWcgZmxhZyB2YWx1ZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGVuIGNvcm91dGluZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBub3Qgd2hlbgoraXQgaXMgY2FsbGVkLiAgQ29yb3V0aW5lIGZ1bmN0aW9ucyBkZWZpbmVkIGJlZm9yZSB0aGUgZGVidWcgZmxhZyBpcyBzZXQgdG8KK2BgVHJ1ZWBgIHdpbGwgbm90IGJlIHRyYWNrZWQuIEZvciBleGFtcGxlLCBpdCBpcyBub3QgcG9zc2libGUgdG8gZGVidWcKK2Nvcm91dGluZXMgZGVmaW5lZCBpbiB0aGUgOm1vZDpgYXN5bmNpb2AgbW9kdWxlLCBiZWNhdXNlIHRoZSBtb2R1bGUgbXVzdCBiZQoraW1wb3J0ZWQgYmVmb3JlIHRoZSBmbGFnIHZhbHVlIGNhbiBiZSBjaGFuZ2VkLgorCitFeGFtcGxlIHdpdGggdGhlIGJ1Zzo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworICAgIGFzeW5jaW8udGFza3MuX0RFQlVHID0gVHJ1ZQorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHRlc3QoKToKKyAgICAgICAgcHJpbnQoIm5ldmVyIHNjaGVkdWxlZCIpCisKKyAgICB0ZXN0KCkKKworT3V0cHV0IGluIGRlYnVnIG1vZGU6OgorCisgICAgQ29yb3V0aW5lICd0ZXN0JyBkZWZpbmVkIGF0IHRlc3QucHk6NCB3YXMgbmV2ZXIgeWllbGRlZCBmcm9tCisKK1RoZSBmaXggaXMgdG8gY2FsbCB0aGUgOmZ1bmM6YGFzeW5jYCBmdW5jdGlvbiBvciBjcmVhdGUgYSA6Y2xhc3M6YFRhc2tgIG9iamVjdAord2l0aCB0aGlzIGNvcm91dGluZSBvYmplY3QuCisKKworRGV0ZWN0IGV4Y2VwdGlvbnMgbm90IGNvbnN1bWVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHl0aG9uIHVzdWFsbHkgY2FsbHMgOmZ1bmM6YHN5cy5kaXNwbGF5aG9va2Agb24gdW5oYW5kbGVkIGV4Y2VwdGlvbnMuIElmCis6bWV0aDpgRnV0dXJlLnNldF9leGNlcHRpb25gIGlzIGNhbGxlZCwgYnV0IHRoZSBleGNlcHRpb24gaXMgbm90IGNvbnN1bWVkLAorOmZ1bmM6YHN5cy5kaXNwbGF5aG9va2AgaXMgbm90IGNhbGxlZC4gSW5zdGVhZCwgYSBsb2cgaXMgZW1pdHRlZCB3aGVuIHRoZQorZnV0dXJlIGlzIGRlbGV0ZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLCB3aXRoIHRoZSB0cmFjZWJhY2sgd2hlcmUgdGhlCitleGNlcHRpb24gd2FzIHJhaXNlZC4gU2VlIHRoZSA6cmVmOmBhc3luY2lvIGxvZ2dlciA8YXN5bmNpby1sb2dnZXI+YC4KKworRXhhbXBsZSBvZiB1bmhhbmRsZWQgZXhjZXB0aW9uOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgYnVnKCk6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigibm90IGNvbnN1bWVkIikKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBhc3luY2lvLmFzeW5jKGJ1ZygpKQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorCitPdXRwdXQ6OgorCisgICAgRnV0dXJlL1Rhc2sgZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWQ6CisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L2FzeW5jaW8vdGFza3MucHkiLCBsaW5lIDI3OSwgaW4gX3N0ZXAKKyAgICAgICAgcmVzdWx0ID0gbmV4dChjb3JvKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L2FzeW5jaW8vdGFza3MucHkiLCBsaW5lIDgwLCBpbiBjb3JvCisgICAgICAgIHJlcyA9IGZ1bmMoKmFyZ3MsICoqa3cpCisgICAgICBGaWxlICJ0ZXN0LnB5IiwgbGluZSA1LCBpbiBidWcKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJub3QgY29uc3VtZWQiKQorICAgIEV4Y2VwdGlvbjogbm90IGNvbnN1bWVkCisKK1RoZXJlIGFyZSBkaWZmZXJlbnQgb3B0aW9ucyB0byBmaXggdGhpcyBpc3N1ZS4gVGhlIGZpcnN0IG9wdGlvbiBpcyB0byBjaGFpbiB0bworY29yb3V0aW5lIGluIGFub3RoZXIgY29yb3V0aW5lIGFuZCB1c2UgY2xhc3NpYyB0cnkvZXhjZXB0OjoKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYnVnKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHByaW50KCJleGNlcHRpb24gY29uc3VtZWQiKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGFzeW5jaW8uYXN5bmMoaGFuZGxlX2V4Y2VwdGlvbigpKQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorCitBbm90aGVyIG9wdGlvbiBpcyB0byB1c2UgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLnJ1bl91bnRpbF9jb21wbGV0ZWAKK2Z1bmN0aW9uOjoKKworICAgIHRhc2sgPSBhc3luY2lvLmFzeW5jKGJ1ZygpKQorICAgIHRyeToKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBwcmludCgiZXhjZXB0aW9uIGNvbnN1bWVkIikKKworU2VlIGFsc28gdGhlIDptZXRoOmBGdXR1cmUuZXhjZXB0aW9uYCBtZXRob2QuCisKKworQ2hhaW4gY29yb3V0aW5lcyBjb3JyZWN0bHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gYSBjb3JvdXRpbmUgZnVuY3Rpb24gY2FsbHMgb3RoZXIgY29yb3V0aW5lIGZ1bmN0aW9ucyBhbmQgdGFza3MsIHRoZXkKK3Nob3VsZCBiZSBjaGFpbmVkIGV4cGxpY2l0bHkgd2l0aCBgYHlpZWxkIGZyb21gYC4gT3RoZXJ3aXNlLCB0aGUgZXhlY3V0aW9uIGlzCitub3QgZ3VhcmFudGVlZCB0byBiZSBzZXF1ZW50aWFsLgorCitFeGFtcGxlIHdpdGggZGlmZmVyZW50IGJ1Z3MgdXNpbmcgOmZ1bmM6YGFzeW5jaW8uc2xlZXBgIHRvIHNpbXVsYXRlIHNsb3cKK29wZXJhdGlvbnM6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBjcmVhdGUoKToKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDMuMCkKKyAgICAgICAgcHJpbnQoIigxKSBjcmVhdGUgZmlsZSIpCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgd3JpdGUoKToKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEuMCkKKyAgICAgICAgcHJpbnQoIigyKSB3cml0ZSBpbnRvIGZpbGUiKQorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGNsb3NlKCk6CisgICAgICAgIHByaW50KCIoMykgY2xvc2UgZmlsZSIpCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgdGVzdCgpOgorICAgICAgICBhc3luY2lvLmFzeW5jKGNyZWF0ZSgpKQorICAgICAgICBhc3luY2lvLmFzeW5jKHdyaXRlKCkpCisgICAgICAgIGFzeW5jaW8uYXN5bmMoY2xvc2UoKSkKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDIuMCkKKyAgICAgICAgbG9vcC5zdG9wKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBhc3luY2lvLmFzeW5jKHRlc3QoKSkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBwcmludCgiUGVuZGluZyB0YXNrcyBhdCBleGl0OiAlcyIgJSBhc3luY2lvLlRhc2suYWxsX3Rhc2tzKGxvb3ApKQorICAgIGxvb3AuY2xvc2UoKQorCitFeHBlY3RlZCBvdXRwdXQ6OgorCisgICAgKDEpIGNyZWF0ZSBmaWxlCisgICAgKDIpIHdyaXRlIGludG8gZmlsZQorICAgICgzKSBjbG9zZSBmaWxlCisgICAgUGVuZGluZyB0YXNrcyBhdCBleGl0OiBzZXQoKQorCitBY3R1YWwgb3V0cHV0OjoKKworICAgICgzKSBjbG9zZSBmaWxlCisgICAgKDIpIHdyaXRlIGludG8gZmlsZQorICAgIFBlbmRpbmcgdGFza3MgYXQgZXhpdDoge1Rhc2soPGNyZWF0ZT4pPFBFTkRJTkc+fQorCitUaGUgbG9vcCBzdG9wcGVkIGJlZm9yZSB0aGUgYGBjcmVhdGUoKWBgIGZpbmlzaGVkLCBgYGNsb3NlKClgYCBoYXMgYmVlbiBjYWxsZWQKK2JlZm9yZSBgYHdyaXRlKClgYCwgd2hlcmVhcyBjb3JvdXRpbmUgZnVuY3Rpb25zIHdlcmUgY2FsbGVkIGluIHRoaXMgb3JkZXI6CitgYGNyZWF0ZSgpYGAsIGBgd3JpdGUoKWBgLCBgYGNsb3NlKClgYC4KKworVG8gZml4IHRoZSBleGFtcGxlLCB0YXNrcyBtdXN0IGJlIG1hcmtlZCB3aXRoIGBgeWllbGQgZnJvbWBgOjoKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiB0ZXN0KCk6CisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5hc3luYyhjcmVhdGUoKSkKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLmFzeW5jKHdyaXRlKCkpCisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5hc3luYyhjbG9zZSgpKQorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMi4wKQorICAgICAgICBsb29wLnN0b3AoKQorCitPciB3aXRob3V0IGBgYXN5bmNpby5hc3luYygpYGA6OgorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHRlc3QoKToKKyAgICAgICAgeWllbGQgZnJvbSBjcmVhdGUoKQorICAgICAgICB5aWVsZCBmcm9tIHdyaXRlKCkKKyAgICAgICAgeWllbGQgZnJvbSBjbG9zZSgpCisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgyLjApCisgICAgICAgIGxvb3Auc3RvcCgpCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzYwZmNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AucnN0CkBAIC0wLDAgKzEsNTc5IEBACisuLiBjdXJyZW50bW9kdWxlOjogYXN5bmNpbworCisuLiBfYXN5bmNpby1ldmVudC1sb29wOgorCitFdmVudCBsb29wcworPT09PT09PT09PT0KKworVGhlIGV2ZW50IGxvb3AgaXMgdGhlIGNlbnRyYWwgZXhlY3V0aW9uIGRldmljZSBwcm92aWRlZCBieSA6bW9kOmBhc3luY2lvYC4KK0l0IHByb3ZpZGVzIG11bHRpcGxlIGZhY2lsaXRpZXMsIGFtb25nc3Qgd2hpY2g6CisKKyogUmVnaXN0ZXJpbmcsIGV4ZWN1dGluZyBhbmQgY2FuY2VsbGluZyBkZWxheWVkIGNhbGxzICh0aW1lb3V0cykuCisKKyogQ3JlYXRpbmcgY2xpZW50IGFuZCBzZXJ2ZXIgOnJlZjpgdHJhbnNwb3J0cyA8YXN5bmNpby10cmFuc3BvcnQ+YCBmb3IgdmFyaW91cworICBraW5kcyBvZiBjb21tdW5pY2F0aW9uLgorCisqIExhdW5jaGluZyBzdWJwcm9jZXNzZXMgYW5kIHRoZSBhc3NvY2lhdGVkIDpyZWY6YHRyYW5zcG9ydHMKKyAgPGFzeW5jaW8tdHJhbnNwb3J0PmAgZm9yIGNvbW11bmljYXRpb24gd2l0aCBhbiBleHRlcm5hbCBwcm9ncmFtLgorCisqIERlbGVnYXRpbmcgY29zdGx5IGZ1bmN0aW9uIGNhbGxzIHRvIGEgcG9vbCBvZiB0aHJlYWRzLgorCitFdmVudCBsb29wIHBvbGljaWVzIGFuZCB0aGUgZGVmYXVsdCBwb2xpY3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFdmVudCBsb29wIG1hbmFnZW1lbnQgaXMgYWJzdHJhY3RlZCB3aXRoIGEgKnBvbGljeSogcGF0dGVybiwgdG8gcHJvdmlkZSBtYXhpbWFsCitmbGV4aWJpbGl0eSBmb3IgY3VzdG9tIHBsYXRmb3JtcyBhbmQgZnJhbWV3b3Jrcy4gVGhyb3VnaG91dCB0aGUgZXhlY3V0aW9uIG9mIGEKK3Byb2Nlc3MsIGEgc2luZ2xlIGdsb2JhbCBwb2xpY3kgb2JqZWN0IG1hbmFnZXMgdGhlIGV2ZW50IGxvb3BzIGF2YWlsYWJsZSB0byB0aGUKK3Byb2Nlc3MgYmFzZWQgb24gdGhlIGNhbGxpbmcgY29udGV4dC4gQSBwb2xpY3kgaXMgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUKKzpjbGFzczpgQWJzdHJhY3RFdmVudExvb3BQb2xpY3lgIGludGVyZmFjZS4KKworRm9yIG1vc3QgdXNlcnMgb2YgOm1vZDpgYXN5bmNpb2AsIHBvbGljaWVzIG5ldmVyIGhhdmUgdG8gYmUgZGVhbHQgd2l0aAorZXhwbGljaXRseSwgc2luY2UgdGhlIGRlZmF1bHQgZ2xvYmFsIHBvbGljeSBpcyBzdWZmaWNpZW50LgorCitUaGUgZGVmYXVsdCBwb2xpY3kgZGVmaW5lcyBjb250ZXh0IGFzIHRoZSBjdXJyZW50IHRocmVhZCwgYW5kIG1hbmFnZXMgYW4gZXZlbnQKK2xvb3AgcGVyIHRocmVhZCB0aGF0IGludGVyYWN0cyB3aXRoIDptb2Q6YGFzeW5jaW9gLiBUaGUgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucworOmZ1bmM6YGdldF9ldmVudF9sb29wYCBhbmQgOmZ1bmM6YHNldF9ldmVudF9sb29wYCBwcm92aWRlIGNvbnZlbmllbnQgYWNjZXNzIHRvCitldmVudCBsb29wcyBtYW5hZ2VkIGJ5IHRoZSBkZWZhdWx0IHBvbGljeS4KKworRXZlbnQgbG9vcCBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBjb252ZW5pZW50IHNob3J0Y3V0cyB0byBhY2Nlc3NpbmcgdGhlIG1ldGhvZHMgb2YgdGhlCitnbG9iYWwgcG9saWN5LiBOb3RlIHRoYXQgdGhpcyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGRlZmF1bHQgcG9saWN5LCB1bmxlc3MgYW4KK2FsdGVybmF0aXZlIHBvbGljeSB3YXMgc2V0IGJ5IGNhbGxpbmcgOmZ1bmM6YHNldF9ldmVudF9sb29wX3BvbGljeWAgZWFybGllciBpbgordGhlIGV4ZWN1dGlvbiBvZiB0aGUgcHJvY2Vzcy4KKworLi4gZnVuY3Rpb246OiBnZXRfZXZlbnRfbG9vcCgpCisKKyAgIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYGdldF9ldmVudF9sb29wX3BvbGljeSgpLmdldF9ldmVudF9sb29wKClgYC4KKworLi4gZnVuY3Rpb246OiBzZXRfZXZlbnRfbG9vcChsb29wKQorCisgICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5zZXRfZXZlbnRfbG9vcChsb29wKWBgLgorCisuLiBmdW5jdGlvbjo6IG5ld19ldmVudF9sb29wKCkKKworICAgRXF1aXZhbGVudCB0byBjYWxsaW5nIGBgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkubmV3X2V2ZW50X2xvb3AoKWBgLgorCitFdmVudCBsb29wIHBvbGljeSBpbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBldmVudCBsb29wIHBvbGljeSBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIGludGVyZmFjZToKKworLi4gY2xhc3M6OiBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeQorCisgICAuLiBtZXRob2Q6OiBnZXRfZXZlbnRfbG9vcCgpCisKKyAgIEdldCB0aGUgZXZlbnQgbG9vcCBmb3IgY3VycmVudCBjb250ZXh0LiBSZXR1cm5zIGFuIGV2ZW50IGxvb3Agb2JqZWN0CisgICBpbXBsZW1lbnRpbmcgOmNsYXNzOmBCYXNlRXZlbnRMb29wYCBpbnRlcmZhY2UsIG9yIHJhaXNlcyBhbiBleGNlcHRpb24gaW4gY2FzZQorICAgbm8gZXZlbnQgbG9vcCBoYXMgYmVlbiBzZXQgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHRoZSBjdXJyZW50IHBvbGljeQorICAgZG9lcyBub3Qgc3BlY2lmeSB0byBjcmVhdGUgb25lLiBJdCBzaG91bGQgbmV2ZXIgcmV0dXJuIGBgTm9uZWBgLgorCisgICAuLiBtZXRob2Q6OiBzZXRfZXZlbnRfbG9vcChsb29wKQorCisgICBTZXQgdGhlIGV2ZW50IGxvb3Agb2YgdGhlIGN1cnJlbnQgY29udGV4dCB0byAqbG9vcCouCisKKyAgIC4uIG1ldGhvZDo6IG5ld19ldmVudF9sb29wKCkKKworICAgQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgZXZlbnQgbG9vcCBvYmplY3QgYWNjb3JkaW5nIHRvIHRoaXMgcG9saWN5J3MgcnVsZXMuCisgICBJZiB0aGVyZSdzIG5lZWQgdG8gc2V0IHRoaXMgbG9vcCBhcyB0aGUgZXZlbnQgbG9vcCBvZiB0aGUgY3VycmVudCBjb250ZXh0LAorICAgOm1ldGg6YHNldF9ldmVudF9sb29wYCBtdXN0IGJlIGNhbGxlZCBleHBsaWNpdGx5LgorCitBY2Nlc3MgdG8gdGhlIGdsb2JhbCBsb29wIHBvbGljeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gZnVuY3Rpb246OiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKQorCisgICBHZXQgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBwb2xpY3kuCisKKy4uIGZ1bmN0aW9uOjogc2V0X2V2ZW50X2xvb3BfcG9saWN5KHBvbGljeSkKKworICAgU2V0IHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgcG9saWN5LiBJZiAqcG9saWN5KiBpcyBgYE5vbmVgYCwgdGhlIGRlZmF1bHQKKyAgIHBvbGljeSBpcyByZXN0b3JlZC4KKworUnVuIGFuIGV2ZW50IGxvb3AKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AucnVuX2ZvcmV2ZXIoKQorCisgICBSdW4gdW50aWwgOm1ldGg6YHN0b3BgIGlzIGNhbGxlZC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0dXJlKQorCisgICBSdW4gdW50aWwgdGhlIDpjbGFzczpgRnV0dXJlYCBpcyBkb25lLgorCisgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBjb3JvdXRpbmUsIGl0IGlzIHdyYXBwZWQgaW4gYSA6Y2xhc3M6YFRhc2tgLgorCisgICBSZXR1cm4gdGhlIEZ1dHVyZSdzIHJlc3VsdCwgb3IgcmFpc2UgaXRzIGV4Y2VwdGlvbi4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5pc19ydW5uaW5nKCkKKworICAgUmV0dXJucyBydW5uaW5nIHN0YXR1cyBvZiBldmVudCBsb29wLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnN0b3AoKQorCisgICBTdG9wIHJ1bm5pbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgIEV2ZXJ5IGNhbGxiYWNrIHNjaGVkdWxlZCBiZWZvcmUgOm1ldGg6YHN0b3BgIGlzIGNhbGxlZCB3aWxsIHJ1bi4KKyAgIENhbGxiYWNrIHNjaGVkdWxlZCBhZnRlciA6bWV0aDpgc3RvcGAgaXMgY2FsbGVkIHdvbid0LiAgSG93ZXZlciwgdGhvc2UKKyAgIGNhbGxiYWNrcyB3aWxsIHJ1biBpZiA6bWV0aDpgcnVuX2ZvcmV2ZXJgIGlzIGNhbGxlZCBhZ2FpbiBsYXRlci4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jbG9zZSgpCisKKyAgIENsb3NlIHRoZSBldmVudCBsb29wLiBUaGUgbG9vcCBzaG91bGQgbm90IGJlIHJ1bm5pbmcuCisKKyAgIFRoaXMgY2xlYXJzIHRoZSBxdWV1ZXMgYW5kIHNodXRzIGRvd24gdGhlIGV4ZWN1dG9yLCBidXQgZG9lcyBub3Qgd2FpdCBmb3IKKyAgIHRoZSBleGVjdXRvciB0byBmaW5pc2guCisKKyAgIFRoaXMgaXMgaWRlbXBvdGVudCBhbmQgaXJyZXZlcnNpYmxlLiBObyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIKKyAgIHRoaXMgb25lLgorCisKK0NhbGxzCistLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNhbGxfc29vbihjYWxsYmFjaywgXCphcmdzKQorCisgICBBcnJhbmdlIGZvciBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLgorCisgICBUaGlzIG9wZXJhdGVzIGFzIGEgRklGTyBxdWV1ZSwgY2FsbGJhY2tzIGFyZSBjYWxsZWQgaW4gdGhlIG9yZGVyIGluCisgICB3aGljaCB0aGV5IGFyZSByZWdpc3RlcmVkLiAgRWFjaCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UuCisKKyAgIEFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCisgICBjYWxsYmFjayB3aGVuIGl0IGlzIGNhbGxlZC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjYWxsYmFjaywgXCphcmdzKQorCisgICBMaWtlIDptZXRoOmBjYWxsX3Nvb25gLCBidXQgdGhyZWFkIHNhZmUuCisKKworLi4gX2FzeW5jaW8tZGVsYXllZC1jYWxsczoKKworRGVsYXllZCBjYWxscworLS0tLS0tLS0tLS0tLQorCitUaGUgZXZlbnQgbG9vcCBoYXMgaXRzIG93biBpbnRlcm5hbCBjbG9jayBmb3IgY29tcHV0aW5nIHRpbWVvdXRzLgorV2hpY2ggY2xvY2sgaXMgdXNlZCBkZXBlbmRzIG9uIHRoZSAocGxhdGZvcm0tc3BlY2lmaWMpIGV2ZW50IGxvb3AKK2ltcGxlbWVudGF0aW9uOyBpZGVhbGx5IGl0IGlzIGEgbW9ub3RvbmljIGNsb2NrLiAgVGhpcyB3aWxsIGdlbmVyYWxseSBiZQorYSBkaWZmZXJlbnQgY2xvY2sgdGhhbiA6ZnVuYzpgdGltZS50aW1lYC4KKworCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNhbGxfbGF0ZXIoZGVsYXksIGNhbGxiYWNrLCAqYXJncykKKworICAgQXJyYW5nZSBmb3IgdGhlICpjYWxsYmFjayogdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBnaXZlbiAqZGVsYXkqCisgICBzZWNvbmRzIChlaXRoZXIgYW4gaW50IG9yIGZsb2F0KS4KKworICAgQSAiaGFuZGxlIiBpcyByZXR1cm5lZDogYW4gb3BhcXVlIG9iamVjdCB3aXRoIGEgOm1ldGg6YGNhbmNlbGAgbWV0aG9kCisgICB0aGF0IGNhbiBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgY2FsbC4KKworICAgKmNhbGxiYWNrKiB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgcGVyIGNhbGwgdG8gOm1ldGg6YGNhbGxfbGF0ZXJgLgorICAgSWYgdHdvIGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIGZvciBleGFjdGx5IHRoZSBzYW1lIHRpbWUsIGl0IGlzCisgICB1bmRlZmluZWQgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZmlyc3QuCisKKyAgIFRoZSBvcHRpb25hbCBwb3NpdGlvbmFsICphcmdzKiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgd2hlbiBpdAorICAgaXMgY2FsbGVkLiBJZiB5b3Ugd2FudCB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdpdGggc29tZSBuYW1lZAorICAgYXJndW1lbnRzLCB1c2UgYSBjbG9zdXJlIG9yIDpmdW5jOmBmdW5jdG9vbHMucGFydGlhbGAuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY2FsbF9hdCh3aGVuLCBjYWxsYmFjaywgKmFyZ3MpCisKKyAgIEFycmFuZ2UgZm9yIHRoZSAqY2FsbGJhY2sqIHRvIGJlIGNhbGxlZCBhdCB0aGUgZ2l2ZW4gYWJzb2x1dGUgdGltZXN0YW1wCisgICAqd2hlbiogKGFuIGludCBvciBmbG9hdCksIHVzaW5nIHRoZSBzYW1lIHRpbWUgcmVmZXJlbmNlIGFzIDptZXRoOmB0aW1lYC4KKworICAgVGhpcyBtZXRob2QncyBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyA6bWV0aDpgY2FsbF9sYXRlcmAuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AudGltZSgpCisKKyAgIFJldHVybiB0aGUgY3VycmVudCB0aW1lLCBhcyBhIDpjbGFzczpgZmxvYXRgIHZhbHVlLCBhY2NvcmRpbmcgdG8gdGhlCisgICBldmVudCBsb29wJ3MgaW50ZXJuYWwgY2xvY2suCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOmZ1bmM6YGFzeW5jaW8uc2xlZXBgIGZ1bmN0aW9uLgorCisKK0NyZWF0aW5nIGNvbm5lY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uKHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCBcKiwgc3NsPU5vbmUsIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wLCBzb2NrPU5vbmUsIGxvY2FsX2FkZHI9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpCisKKyAgIENyZWF0ZSBhIHN0cmVhbWluZyB0cmFuc3BvcnQgY29ubmVjdGlvbiB0byBhIGdpdmVuIEludGVybmV0ICpob3N0KiBhbmQKKyAgICpwb3J0Ki4gICpwcm90b2NvbF9mYWN0b3J5KiBtdXN0IGJlIGEgY2FsbGFibGUgcmV0dXJuaW5nIGEKKyAgIDpyZWY6YHByb3RvY29sIDxhc3luY2lvLXByb3RvY29sPmAgaW5zdGFuY2UuCisKKyAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YCB3aGljaCB3aWxsIHRyeSB0bworICAgZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uIGluIHRoZSBiYWNrZ3JvdW5kLiAgV2hlbiBzdWNjZXNzZnVsLCB0aGUKKyAgIGNvcm91dGluZSByZXR1cm5zIGEgYGAodHJhbnNwb3J0LCBwcm90b2NvbClgYCBwYWlyLgorCisgICBUaGUgY2hyb25vbG9naWNhbCBzeW5vcHNpcyBvZiB0aGUgdW5kZXJseWluZyBvcGVyYXRpb24gaXMgYXMgZm9sbG93czoKKworICAgIy4gVGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCBhIDpyZWY6YHRyYW5zcG9ydCA8YXN5bmNpby10cmFuc3BvcnQ+YAorICAgICAgaXMgY3JlYXRlZCB0byByZXByZXNlbnQgaXQuCisKKyAgICMuICpwcm90b2NvbF9mYWN0b3J5KiBpcyBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMgYW5kIG11c3QgcmV0dXJuIGEKKyAgICAgIDpyZWY6YHByb3RvY29sIDxhc3luY2lvLXByb3RvY29sPmAgaW5zdGFuY2UuCisKKyAgICMuIFRoZSBwcm90b2NvbCBpbnN0YW5jZSBpcyB0aWVkIHRvIHRoZSB0cmFuc3BvcnQsIGFuZCBpdHMKKyAgICAgIDptZXRoOmBjb25uZWN0aW9uX21hZGVgIG1ldGhvZCBpcyBjYWxsZWQuCisKKyAgICMuIFRoZSBjb3JvdXRpbmUgcmV0dXJucyBzdWNjZXNzZnVsbHkgd2l0aCB0aGUgYGAodHJhbnNwb3J0LCBwcm90b2NvbClgYAorICAgICAgcGFpci4KKworICAgVGhlIGNyZWF0ZWQgdHJhbnNwb3J0IGlzIGFuIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBiaWRpcmVjdGlvbmFsIHN0cmVhbS4KKworICAgLi4gbm90ZTo6CisgICAgICAqcHJvdG9jb2xfZmFjdG9yeSogY2FuIGJlIGFueSBraW5kIG9mIGNhbGxhYmxlLCBub3QgbmVjZXNzYXJpbHkKKyAgICAgIGEgY2xhc3MuICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gdXNlIGEgcHJlLWNyZWF0ZWQKKyAgICAgIHByb3RvY29sIGluc3RhbmNlLCB5b3UgY2FuIHBhc3MgYGBsYW1iZGE6IG15X3Byb3RvY29sYGAuCisKKyAgIE9wdGlvbnMgYWxsb3dpbmcgdG8gY2hhbmdlIGhvdyB0aGUgY29ubmVjdGlvbiBpcyBjcmVhdGVkOgorCisgICAqICpzc2wqOiBpZiBnaXZlbiBhbmQgbm90IGZhbHNlLCBhIFNTTC9UTFMgdHJhbnNwb3J0IGlzIGNyZWF0ZWQKKyAgICAgKGJ5IGRlZmF1bHQgYSBwbGFpbiBUQ1AgdHJhbnNwb3J0IGlzIGNyZWF0ZWQpLiAgSWYgKnNzbCogaXMKKyAgICAgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3QsIHRoaXMgY29udGV4dCBpcyB1c2VkIHRvIGNyZWF0ZQorICAgICB0aGUgdHJhbnNwb3J0OyBpZiAqc3NsKiBpcyA6Y29uc3Q6YFRydWVgLCBhIGNvbnRleHQgd2l0aCBzb21lCisgICAgIHVuc3BlY2lmaWVkIGRlZmF1bHQgc2V0dGluZ3MgaXMgdXNlZC4KKworICAgKiAqc2VydmVyX2hvc3RuYW1lKiwgaXMgb25seSBmb3IgdXNlIHRvZ2V0aGVyIHdpdGggKnNzbCosCisgICAgIGFuZCBzZXRzIG9yIG92ZXJyaWRlcyB0aGUgaG9zdG5hbWUgdGhhdCB0aGUgdGFyZ2V0IHNlcnZlcidzIGNlcnRpZmljYXRlCisgICAgIHdpbGwgYmUgbWF0Y2hlZCBhZ2FpbnN0LiAgQnkgZGVmYXVsdCB0aGUgdmFsdWUgb2YgdGhlICpob3N0KiBhcmd1bWVudAorICAgICBpcyB1c2VkLiAgSWYgKmhvc3QqIGlzIGVtcHR5LCB0aGVyZSBpcyBubyBkZWZhdWx0IGFuZCB5b3UgbXVzdCBwYXNzIGEKKyAgICAgdmFsdWUgZm9yICpzZXJ2ZXJfaG9zdG5hbWUqLiAgSWYgKnNlcnZlcl9ob3N0bmFtZSogaXMgYW4gZW1wdHkKKyAgICAgc3RyaW5nLCBob3N0bmFtZSBtYXRjaGluZyBpcyBkaXNhYmxlZCAod2hpY2ggaXMgYSBzZXJpb3VzIHNlY3VyaXR5CisgICAgIHJpc2ssIGFsbG93aW5nIGZvciBtYW4taW4tdGhlLW1pZGRsZS1hdHRhY2tzKS4KKworICAgKiAqZmFtaWx5KiwgKnByb3RvKiwgKmZsYWdzKiBhcmUgdGhlIG9wdGlvbmFsIGFkZHJlc3MgZmFtaWx5LCBwcm90b2NvbAorICAgICBhbmQgZmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdG8gZ2V0YWRkcmluZm8oKSBmb3IgKmhvc3QqIHJlc29sdXRpb24uCisgICAgIElmIGdpdmVuLCB0aGVzZSBzaG91bGQgYWxsIGJlIGludGVnZXJzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgOm1vZDpgc29ja2V0YCBtb2R1bGUgY29uc3RhbnRzLgorCisgICAqICpzb2NrKiwgaWYgZ2l2ZW4sIHNob3VsZCBiZSBhbiBleGlzdGluZywgYWxyZWFkeSBjb25uZWN0ZWQKKyAgICAgOmNsYXNzOmBzb2NrZXQuc29ja2V0YCBvYmplY3QgdG8gYmUgdXNlZCBieSB0aGUgdHJhbnNwb3J0LgorICAgICBJZiAqc29jayogaXMgZ2l2ZW4sIG5vbmUgb2YgKmhvc3QqLCAqcG9ydCosICpmYW1pbHkqLCAqcHJvdG8qLCAqZmxhZ3MqCisgICAgIGFuZCAqbG9jYWxfYWRkciogc2hvdWxkIGJlIHNwZWNpZmllZC4KKworICAgKiAqbG9jYWxfYWRkciosIGlmIGdpdmVuLCBpcyBhIGBgKGxvY2FsX2hvc3QsIGxvY2FsX3BvcnQpYGAgdHVwbGUgdXNlZAorICAgICB0byBiaW5kIHRoZSBzb2NrZXQgdG8gbG9jYWxseS4gIFRoZSAqbG9jYWxfaG9zdCogYW5kICpsb2NhbF9wb3J0KgorICAgICBhcmUgbG9va2VkIHVwIHVzaW5nIGdldGFkZHJpbmZvKCksIHNpbWlsYXJseSB0byAqaG9zdCogYW5kICpwb3J0Ki4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIFRoZSA6ZnVuYzpgb3Blbl9jb25uZWN0aW9uYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBnZXQgYSBwYWlyIG9mCisgICAgICAoOmNsYXNzOmBTdHJlYW1SZWFkZXJgLCA6Y2xhc3M6YFN0cmVhbVdyaXRlcmApIGluc3RlYWQgb2YgYSBwcm90b2NvbC4KKworCitDcmVhdGluZyBsaXN0ZW5pbmcgY29ubmVjdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXIocHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsIFwqLCBmYW1pbHk9c29ja2V0LkFGX1VOU1BFQywgZmxhZ3M9c29ja2V0LkFJX1BBU1NJVkUsIHNvY2s9Tm9uZSwgYmFja2xvZz0xMDAsIHNzbD1Ob25lLCByZXVzZV9hZGRyZXNzPU5vbmUpCisKKyAgIEEgOnJlZjpgY29yb3V0aW5lIGZ1bmN0aW9uIDxjb3JvdXRpbmU+YCB3aGljaCBjcmVhdGVzIGEgVENQIHNlcnZlciBib3VuZCB0byBob3N0IGFuZAorICAgcG9ydC4KKworICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIDpjbGFzczpgQWJzdHJhY3RTZXJ2ZXJgIG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBzdG9wCisgICB0aGUgc2VydmljZS4KKworICAgSWYgKmhvc3QqIGlzIGFuIGVtcHR5IHN0cmluZyBvciBOb25lIGFsbCBpbnRlcmZhY2VzIGFyZSBhc3N1bWVkCisgICBhbmQgYSBsaXN0IG9mIG11bHRpcGxlIHNvY2tldHMgd2lsbCBiZSByZXR1cm5lZCAobW9zdCBsaWtlbHkKKyAgIG9uZSBmb3IgSVB2NCBhbmQgYW5vdGhlciBvbmUgZm9yIElQdjYpLgorCisgICAqZmFtaWx5KiBjYW4gYmUgc2V0IHRvIGVpdGhlciA6ZGF0YTpgfnNvY2tldC5BRl9JTkVUYCBvcgorICAgOmRhdGE6YH5zb2NrZXQuQUZfSU5FVDZgIHRvIGZvcmNlIHRoZSBzb2NrZXQgdG8gdXNlIElQdjQgb3IgSVB2Ni4gSWYgbm90IHNldAorICAgaXQgd2lsbCBiZSBkZXRlcm1pbmVkIGZyb20gaG9zdCAoZGVmYXVsdHMgdG8gOmRhdGE6YH5zb2NrZXQuQUZfVU5TUEVDYCkuCisKKyAgICpmbGFncyogaXMgYSBiaXRtYXNrIGZvciA6bWV0aDpgZ2V0YWRkcmluZm9gLgorCisgICAqc29jayogY2FuIG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkIGluIG9yZGVyIHRvIHVzZSBhIHByZWV4aXN0aW5nCisgICBzb2NrZXQgb2JqZWN0LgorCisgICAqYmFja2xvZyogaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb25uZWN0aW9ucyBwYXNzZWQgdG8KKyAgIDptZXRoOmB+c29ja2V0LnNvY2tldC5saXN0ZW5gIChkZWZhdWx0cyB0byAxMDApLgorCisgICBzc2wgY2FuIGJlIHNldCB0byBhbiA6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAgdG8gZW5hYmxlIFNTTCBvdmVyIHRoZQorICAgYWNjZXB0ZWQgY29ubmVjdGlvbnMuCisKKyAgICpyZXVzZV9hZGRyZXNzKiB0ZWxscyB0aGUga2VybmVsIHRvIHJldXNlIGEgbG9jYWwgc29ja2V0IGluCisgICBUSU1FX1dBSVQgc3RhdGUsIHdpdGhvdXQgd2FpdGluZyBmb3IgaXRzIG5hdHVyYWwgdGltZW91dCB0bworICAgZXhwaXJlLiBJZiBub3Qgc3BlY2lmaWVkIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgdG8gVHJ1ZSBvbgorICAgVU5JWC4KKworICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgVGhlIGZ1bmN0aW9uIDpmdW5jOmBzdGFydF9zZXJ2ZXJgIGNyZWF0ZXMgYSAoOmNsYXNzOmBTdHJlYW1SZWFkZXJgLAorICAgICAgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgKSBwYWlyIGFuZCBjYWxscyBiYWNrIGEgZnVuY3Rpb24gd2l0aCB0aGlzIHBhaXIuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHByb3RvY29sX2ZhY3RvcnksIGxvY2FsX2FkZHI9Tm9uZSwgcmVtb3RlX2FkZHI9Tm9uZSwgXCosIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wKQorCisgICBDcmVhdGUgZGF0YWdyYW0gY29ubmVjdGlvbi4KKworICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisKKworV2F0Y2ggZmlsZSBkZXNjcmlwdG9ycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmFkZF9yZWFkZXIoZmQsIGNhbGxiYWNrLCBcKmFyZ3MpCisKKyAgIFN0YXJ0IHdhdGNoaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgZm9yIHJlYWQgYXZhaWxhYmlsaXR5IGFuZCB0aGVuIGNhbGwgdGhlCisgICAqY2FsbGJhY2sqIHdpdGggc3BlY2lmaWVkIGFyZ3VtZW50cy4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5yZW1vdmVfcmVhZGVyKGZkKQorCisgICBTdG9wIHdhdGNoaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgZm9yIHJlYWQgYXZhaWxhYmlsaXR5LgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmFkZF93cml0ZXIoZmQsIGNhbGxiYWNrLCBcKmFyZ3MpCisKKyAgIFN0YXJ0IHdhdGNoaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgZm9yIHdyaXRlIGF2YWlsYWJpbGl0eSBhbmQgdGhlbiBjYWxsIHRoZQorICAgKmNhbGxiYWNrKiB3aXRoIHNwZWNpZmllZCBhcmd1bWVudHMuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AucmVtb3ZlX3dyaXRlcihmZCkKKworICAgU3RvcCB3YXRjaGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciB3cml0ZSBhdmFpbGFiaWxpdHkuCisKKworTG93LWxldmVsIHNvY2tldCBvcGVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zb2NrX3JlY3Yoc29jaywgbmJ5dGVzKQorCisgICBSZWNlaXZlIGRhdGEgZnJvbSB0aGUgc29ja2V0LiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdAorICAgcmVwcmVzZW50aW5nIHRoZSBkYXRhIHJlY2VpdmVkLiAgVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQKKyAgIGF0IG9uY2UgaXMgc3BlY2lmaWVkIGJ5ICpuYnl0ZXMqLgorCisgICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOm1ldGg6YHNvY2tldC5zb2NrZXQucmVjdmAgbWV0aG9kLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnNvY2tfc2VuZGFsbChzb2NrLCBkYXRhKQorCisgICBTZW5kIGRhdGEgdG8gdGhlIHNvY2tldC4gIFRoZSBzb2NrZXQgbXVzdCBiZSBjb25uZWN0ZWQgdG8gYSByZW1vdGUgc29ja2V0LgorICAgVGhpcyBtZXRob2QgY29udGludWVzIHRvIHNlbmQgZGF0YSBmcm9tICpkYXRhKiB1bnRpbCBlaXRoZXIgYWxsIGRhdGEgaGFzCisgICBiZWVuIHNlbnQgb3IgYW4gZXJyb3Igb2NjdXJzLiAgYGBOb25lYGAgaXMgcmV0dXJuZWQgb24gc3VjY2Vzcy4gIE9uIGVycm9yLAorICAgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCwgYW5kIHRoZXJlIGlzIG5vIHdheSB0byBkZXRlcm1pbmUgaG93IG11Y2ggZGF0YSwgaWYKKyAgIGFueSwgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LgorCisgICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOm1ldGg6YHNvY2tldC5zb2NrZXQuc2VuZGFsbGAgbWV0aG9kLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKQorCisgICBDb25uZWN0IHRvIGEgcmVtb3RlIHNvY2tldCBhdCAqYWRkcmVzcyouCisKKyAgIFRoZSAqYWRkcmVzcyogbXVzdCBiZSBhbHJlYWR5IHJlc29sdmVkIHRvIGF2b2lkIHRoZSB0cmFwIG9mIGhhbmdpbmcgdGhlCisgICBlbnRpcmUgZXZlbnQgbG9vcCB3aGVuIHRoZSBhZGRyZXNzIHJlcXVpcmVzIGRvaW5nIGEgRE5TIGxvb2t1cC4gIEZvcgorICAgZXhhbXBsZSwgaXQgbXVzdCBiZSBhbiBJUCBhZGRyZXNzLCBub3QgYW4gaG9zdG5hbWUsIGZvcgorICAgOnB5OmRhdGE6YH5zb2NrZXQuQUZfSU5FVGAgYW5kIDpweTpkYXRhOmB+c29ja2V0LkFGX0lORVQ2YCBhZGRyZXNzIGZhbWlsaWVzLgorICAgVXNlIDptZXRoOmBnZXRhZGRyaW5mb2AgdG8gcmVzb2x2ZSB0aGUgaG9zdG5hbWUgYXN5bmNocm9ub3VzbHkuCisKKyAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YC4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIFRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbmAgbWV0aG9kLCB0aGUKKyAgICAgIDpmdW5jOmBvcGVuX2Nvbm5lY3Rpb25gIGZ1bmN0aW9uIGFuZCB0aGUgOm1ldGg6YHNvY2tldC5zb2NrZXQuY29ubmVjdGAKKyAgICAgIG1ldGhvZC4KKworCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnNvY2tfYWNjZXB0KHNvY2spCisKKyAgIEFjY2VwdCBhIGNvbm5lY3Rpb24uIFRoZSBzb2NrZXQgbXVzdCBiZSBib3VuZCB0byBhbiBhZGRyZXNzIGFuZCBsaXN0ZW5pbmcKKyAgIGZvciBjb25uZWN0aW9ucy4gVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBhaXIgYGAoY29ubiwgYWRkcmVzcylgYCB3aGVyZSAqY29ubioKKyAgIGlzIGEgKm5ldyogc29ja2V0IG9iamVjdCB1c2FibGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLAorICAgYW5kICphZGRyZXNzKiBpcyB0aGUgYWRkcmVzcyBib3VuZCB0byB0aGUgc29ja2V0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlCisgICBjb25uZWN0aW9uLgorCisgICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcmAgbWV0aG9kLCB0aGUgOmZ1bmM6YHN0YXJ0X3NlcnZlcmAKKyAgICAgIGZ1bmN0aW9uIGFuZCB0aGUgOm1ldGg6YHNvY2tldC5zb2NrZXQuYWNjZXB0YCBtZXRob2QuCisKKworUmVzb2x2ZSBob3N0IG5hbWUKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgXCosIGZhbWlseT0wLCB0eXBlPTAsIHByb3RvPTAsIGZsYWdzPTApCisKKyAgIFNpbWlsYXIgdG8gdGhlIDptZXRoOmBzb2NrZXQuZ2V0YWRkcmluZm9gICBmdW5jdGlvbiwgYnV0IHJldHVybiBhCisgICA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5nZXRuYW1laW5mbyhzb2NrYWRkciwgZmxhZ3M9MCkKKworICAgU2ltaWxhciB0byB0aGUgOm1ldGg6YHNvY2tldC5nZXRuYW1laW5mb2AgIGZ1bmN0aW9uLCBidXQgcmV0dXJuIGEKKyAgIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisKK1J1bm5pbmcgc3VicHJvY2Vzc2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSdW4gc3VicHJvY2Vzc2VzIGFzeW5jaHJvbm91c2x5IHVzaW5nIHRoZSA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUuCisKKy4uIG5vdGU6OgorCisgICBPbiBXaW5kb3dzLCB0aGUgZGVmYXVsdCBldmVudCBsb29wIHVzZXMKKyAgIDpjbGFzczpgc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yYCB3aGljaCBvbmx5IHN1cHBvcnRzIHNvY2tldHMuIFRoZQorICAgOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAgc2hvdWxkIGJlIHVzZWQgdG8gc3VwcG9ydCBzdWJwcm9jZXNzZXMuCisKKy4uIG5vdGU6OgorCisgICBPbiBNYWMgT1MgWCBvbGRlciB0aGFuIDEwLjkgKE1hdmVyaWNrcyksIDpjbGFzczpgc2VsZWN0b3JzLktxdWV1ZVNlbGVjdG9yYAorICAgZG9lcyBub3Qgc3VwcG9ydCBjaGFyYWN0ZXIgZGV2aWNlcyBsaWtlIFBUWSwgd2hlcmVhcyBpdCBpcyB1c2VkIGJ5IHRoZQorICAgZGVmYXVsdCBldmVudCBsb29wLiBUaGUgOmNsYXNzOmBTZWxlY3RvckV2ZW50TG9vcGAgY2FuIGJlIHVzZWQgd2l0aAorICAgOmNsYXNzOmBTZWxlY3RTZWxlY3RvcmAgb3IgOmNsYXNzOmBQb2xsU2VsZWN0b3JgIHRvIGhhbmRsZSBjaGFyYWN0ZXIgZGV2aWNlcworICAgb24gTWFjIE9TIFggMTAuNiAoU25vdyBMZW9wYXJkKSBhbmQgbGF0ZXIuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19leGVjKHByb3RvY29sX2ZhY3RvcnksIFwqYXJncywgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHNoZWxsPUZhbHNlLCBidWZzaXplPTAsIFwqXCprd2FyZ3MpCisKKyAgIFhYWAorCisgICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAuCisKKyAgIFNlZSB0aGUgY29uc3RydWN0b3Igb2YgdGhlIDpjbGFzczpgc3VicHJvY2Vzcy5Qb3BlbmAgY2xhc3MgZm9yIHBhcmFtZXRlcnMuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19zaGVsbChwcm90b2NvbF9mYWN0b3J5LCBjbWQsIFwqLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgc2hlbGw9VHJ1ZSwgYnVmc2l6ZT0wLCBcKlwqa3dhcmdzKQorCisgICBYWFgKKworICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisgICBTZWUgdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gIGNsYXNzIGZvciBwYXJhbWV0ZXJzLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNvbm5lY3RfcmVhZF9waXBlKHByb3RvY29sX2ZhY3RvcnksIHBpcGUpCisKKyAgIFJlZ2lzdGVyIHJlYWQgcGlwZSBpbiBldmVudGxvb3AuCisKKyAgICpwcm90b2NvbF9mYWN0b3J5KiBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggOmNsYXNzOmBQcm90b2NvbGAKKyAgIGludGVyZmFjZS4gIHBpcGUgaXMgZmlsZS1saWtlIG9iamVjdCBhbHJlYWR5IHN3aXRjaGVkIHRvIG5vbmJsb2NraW5nLgorICAgUmV0dXJuIHBhaXIgKHRyYW5zcG9ydCwgcHJvdG9jb2wpLCB3aGVyZSB0cmFuc3BvcnQgc3VwcG9ydAorICAgOmNsYXNzOmBSZWFkVHJhbnNwb3J0YCBpbnRlcmZhY2UuCisKKyAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jb25uZWN0X3dyaXRlX3BpcGUocHJvdG9jb2xfZmFjdG9yeSwgcGlwZSkKKworICAgUmVnaXN0ZXIgd3JpdGUgcGlwZSBpbiBldmVudGxvb3AuCisKKyAgICpwcm90b2NvbF9mYWN0b3J5KiBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggOmNsYXNzOmBCYXNlUHJvdG9jb2xgCisgICBpbnRlcmZhY2UuICBQaXBlIGlzIGZpbGUtbGlrZSBvYmplY3QgYWxyZWFkeSBzd2l0Y2hlZCB0byBub25ibG9ja2luZy4KKyAgIFJldHVybiBwYWlyICh0cmFuc3BvcnQsIHByb3RvY29sKSwgd2hlcmUgdHJhbnNwb3J0IHN1cHBvcnQKKyAgIDpjbGFzczpgV3JpdGVUcmFuc3BvcnRgIGludGVyZmFjZS4KKworICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19leGVjYCBhbmQgOmZ1bmM6YGNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsYAorICAgZnVuY3Rpb25zLgorCisKK1VOSVggc2lnbmFscworLS0tLS0tLS0tLS0tCisKK0F2YWlsYWJpbGl0eTogVU5JWCBvbmx5LgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWdudW0sIGNhbGxiYWNrLCBcKmFyZ3MpCisKKyAgIEFkZCBhIGhhbmRsZXIgZm9yIGEgc2lnbmFsLgorCisgICBSYWlzZSA6ZXhjOmBWYWx1ZUVycm9yYCBpZiB0aGUgc2lnbmFsIG51bWJlciBpcyBpbnZhbGlkIG9yIHVuY2F0Y2hhYmxlLgorICAgUmFpc2UgOmV4YzpgUnVudGltZUVycm9yYCBpZiB0aGVyZSBpcyBhIHByb2JsZW0gc2V0dGluZyB1cCB0aGUgaGFuZGxlci4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnKQorCisgICBSZW1vdmUgYSBoYW5kbGVyIGZvciBhIHNpZ25hbC4KKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIGEgc2lnbmFsIGhhbmRsZXIgd2FzIHJlbW92ZWQsIGBgRmFsc2VgYCBpZiBub3QuCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOm1vZDpgc2lnbmFsYCBtb2R1bGUuCisKKworRXhlY3V0b3IKKy0tLS0tLS0tCisKK0NhbGwgYSBmdW5jdGlvbiBpbiBhbiA6Y2xhc3M6YH5jb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3JgIChwb29sIG9mIHRocmVhZHMgb3IKK3Bvb2wgb2YgcHJvY2Vzc2VzKS4gQnkgZGVmYXVsdCwgYW4gZXZlbnQgbG9vcCB1c2VzIGEgdGhyZWFkIHBvb2wgZXhlY3V0b3IKKyg6Y2xhc3M6YH5jb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yYCkuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AucnVuX2luX2V4ZWN1dG9yKGV4ZWN1dG9yLCBjYWxsYmFjaywgXCphcmdzKQorCisgICBBcnJhbmdlIGZvciBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBpbiB0aGUgc3BlY2lmaWVkIGV4ZWN1dG9yLgorCisgICAqZXhlY3V0b3IqIGlzIGEgOmNsYXNzOmB+Y29uY3VycmVudC5mdXR1cmVzLkV4ZWN1dG9yYCBpbnN0YW5jZSwKKyAgIHRoZSBkZWZhdWx0IGV4ZWN1dG9yIGlzIHVzZWQgaWYgKmV4ZWN1dG9yKiBpcyBgYE5vbmVgYC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zZXRfZGVmYXVsdF9leGVjdXRvcihleGVjdXRvcikKKworICAgU2V0IHRoZSBkZWZhdWx0IGV4ZWN1dG9yIHVzZWQgYnkgOm1ldGg6YHJ1bl9pbl9leGVjdXRvcmAuCisKKworU2VydmVyCistLS0tLS0KKworLi4gY2xhc3M6OiBBYnN0cmFjdFNlcnZlcgorCisgICBBYnN0cmFjdCBzZXJ2ZXIgcmV0dXJuZWQgYnkgOmZ1bmM6YEJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcmAuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgU3RvcCBzZXJ2aW5nLiAgVGhpcyBsZWF2ZXMgZXhpc3RpbmcgY29ubmVjdGlvbnMgb3Blbi4KKworICAgLi4gbWV0aG9kOjogd2FpdF9jbG9zZWQoKQorCisgICAgICBDb3JvdXRpbmUgdG8gd2FpdCB1bnRpbCBzZXJ2aWNlIGlzIGNsb3NlZC4KKworCisuLiBfYXN5bmNpby1oZWxsby13b3JsZC1jYWxsYmFjazoKKworRXhhbXBsZTogSGVsbG8gV29ybGQgKGNhbGxiYWNrKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQcmludCBgYEhlbGxvIFdvcmxkYGAgZXZlcnkgdHdvIHNlY29uZHMsIHVzaW5nIGEgY2FsbGJhY2s6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIGRlZiBwcmludF9hbmRfcmVwZWF0KGxvb3ApOgorICAgICAgICBwcmludCgnSGVsbG8gV29ybGQnKQorICAgICAgICBsb29wLmNhbGxfbGF0ZXIoMiwgcHJpbnRfYW5kX3JlcGVhdCwgbG9vcCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBsb29wLmNhbGxfc29vbihwcmludF9hbmRfcmVwZWF0LCBsb29wKQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorCisuLiBzZWVhbHNvOjoKKworICAgOnJlZjpgSGVsbG8gV29ybGQgZXhhbXBsZSB1c2luZyBhIGNvcm91dGluZSA8YXN5bmNpby1oZWxsby13b3JsZC1jb3JvdXRpbmU+YC4KKworCitFeGFtcGxlOiBTZXQgc2lnbmFsIGhhbmRsZXJzIGZvciBTSUdJTlQgYW5kIFNJR1RFUk0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWdpc3RlciBoYW5kbGVycyBmb3Igc2lnbmFscyA6cHk6ZGF0YTpgU0lHSU5UYCBhbmQgOnB5OmRhdGE6YFNJR1RFUk1gOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgaW1wb3J0IGZ1bmN0b29scworICAgIGltcG9ydCBvcworICAgIGltcG9ydCBzaWduYWwKKworICAgIGRlZiBhc2tfZXhpdChzaWduYW1lKToKKyAgICAgICAgcHJpbnQoImdvdCBzaWduYWwgJXM6IGV4aXQiICUgc2lnbmFtZSkKKyAgICAgICAgbG9vcC5zdG9wKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBmb3Igc2lnbmFtZSBpbiAoJ1NJR0lOVCcsICdTSUdURVJNJyk6CisgICAgICAgIGxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKGdldGF0dHIoc2lnbmFsLCBzaWduYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoYXNrX2V4aXQsIHNpZ25hbWUpKQorCisgICAgcHJpbnQoIkV2ZW50IGxvb3AgcnVubmluZyBmb3JldmVyLCBwcmVzcyBDVFJMK2MgdG8gaW50ZXJydXB0LiIpCisgICAgcHJpbnQoInBpZCAlczogc2VuZCBTSUdJTlQgb3IgU0lHVEVSTSB0byBleGl0LiIgJSBvcy5nZXRwaWQoKSkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWJlN2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5yc3QKQEAgLTAsMCArMSw0OTMgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitUcmFuc3BvcnRzICBhbmQgcHJvdG9jb2xzIChsb3ctbGV2ZWwgQVBJKQorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworLi4gX2FzeW5jaW8tdHJhbnNwb3J0OgorCitUcmFuc3BvcnRzCis9PT09PT09PT09CisKK1RyYW5zcG9ydHMgYXJlIGNsYXNzZWQgcHJvdmlkZWQgYnkgOm1vZDpgYXN5bmNpb2AgaW4gb3JkZXIgdG8gYWJzdHJhY3QKK3ZhcmlvdXMga2luZHMgb2YgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gIFlvdSBnZW5lcmFsbHkgd29uJ3QgaW5zdGFudGlhdGUKK2EgdHJhbnNwb3J0IHlvdXJzZWxmOyBpbnN0ZWFkLCB5b3Ugd2lsbCBjYWxsIGEgOmNsYXNzOmBCYXNlRXZlbnRMb29wYCBtZXRob2QKK3doaWNoIHdpbGwgY3JlYXRlIHRoZSB0cmFuc3BvcnQgYW5kIHRyeSB0byBpbml0aWF0ZSB0aGUgdW5kZXJseWluZworY29tbXVuaWNhdGlvbiBjaGFubmVsLCBjYWxsaW5nIHlvdSBiYWNrIHdoZW4gaXQgc3VjY2VlZHMuCisKK09uY2UgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbCBpcyBlc3RhYmxpc2hlZCwgYSB0cmFuc3BvcnQgaXMgYWx3YXlzCitwYWlyZWQgd2l0aCBhIDpyZWY6YHByb3RvY29sIDxhc3luY2lvLXByb3RvY29sPmAgaW5zdGFuY2UuICBUaGUgcHJvdG9jb2wgY2FuCit0aGVuIGNhbGwgdGhlIHRyYW5zcG9ydCdzIG1ldGhvZHMgZm9yIHZhcmlvdXMgcHVycG9zZXMuCisKKzptb2Q6YGFzeW5jaW9gIGN1cnJlbnRseSBpbXBsZW1lbnRzIHRyYW5zcG9ydHMgZm9yIFRDUCwgVURQLCBTU0wsIGFuZAorc3VicHJvY2VzcyBwaXBlcy4gIFRoZSBtZXRob2RzIGF2YWlsYWJsZSBvbiBhIHRyYW5zcG9ydCBkZXBlbmQgb24KK3RoZSB0cmFuc3BvcnQncyBraW5kLgorCisKK0Jhc2VUcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBCYXNlVHJhbnNwb3J0CisKKyAgIEJhc2UgY2xhc3MgZm9yIHRyYW5zcG9ydHMuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKHNlbGYpCisKKyAgICAgIENsb3NlIHRoZSB0cmFuc3BvcnQuICBJZiB0aGUgdHJhbnNwb3J0IGhhcyBhIGJ1ZmZlciBmb3Igb3V0Z29pbmcKKyAgICAgIGRhdGEsIGJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBmbHVzaGVkIGFzeW5jaHJvbm91c2x5LiAgTm8gbW9yZSBkYXRhCisgICAgICB3aWxsIGJlIHJlY2VpdmVkLiAgQWZ0ZXIgYWxsIGJ1ZmZlcmVkIGRhdGEgaXMgZmx1c2hlZCwgdGhlCisgICAgICBwcm90b2NvbCdzIDptZXRoOmBjb25uZWN0aW9uX2xvc3RgIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aXRoCisgICAgICA6Y29uc3Q6YE5vbmVgIGFzIGl0cyBhcmd1bWVudC4KKworCisgICAuLiBtZXRob2Q6OiBnZXRfZXh0cmFfaW5mbyhuYW1lLCBkZWZhdWx0PU5vbmUpCisKKyAgICAgIFJldHVybiBvcHRpb25hbCB0cmFuc3BvcnQgaW5mb3JtYXRpb24uICAqbmFtZSogaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nCisgICAgICB0aGUgcGllY2Ugb2YgdHJhbnNwb3J0LXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGdldCwgKmRlZmF1bHQqIGlzIHRoZQorICAgICAgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBpbmZvcm1hdGlvbiBkb2Vzbid0IGV4aXN0LgorCisgICAgICBUaGlzIG1ldGhvZCBhbGxvd3MgdHJhbnNwb3J0IGltcGxlbWVudGF0aW9ucyB0byBlYXNpbHkgZXhwb3NlCisgICAgICBjaGFubmVsLXNwZWNpZmljIGluZm9ybWF0aW9uLgorCisgICAgICAqIHNvY2tldDoKKworICAgICAgICAtIGBgJ3BlZXJuYW1lJ2BgOiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gd2hpY2ggdGhlIHNvY2tldCBpcyBjb25uZWN0ZWQsCisgICAgICAgICAgcmVzdWx0IG9mIDptZXRoOmBzb2NrZXQuc29ja2V0LmdldHBlZXJuYW1lYCAoYGBOb25lYGAgb24gZXJyb3IpCisgICAgICAgIC0gYGAnc29ja2V0J2BgOiA6Y2xhc3M6YHNvY2tldC5zb2NrZXRgIGluc3RhbmNlCisgICAgICAgIC0gYGAnc29ja25hbWUnYGA6IHRoZSBzb2NrZXQncyBvd24gYWRkcmVzcywKKyAgICAgICAgICByZXN1bHQgb2YgOm1ldGg6YHNvY2tldC5zb2NrZXQuZ2V0c29ja25hbWVgCisKKyAgICAgICogU1NMIHNvY2tldDoKKworICAgICAgICAtIGBgJ2NvbXByZXNzaW9uJ2BgOiB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGJlaW5nIHVzZWQgYXMgYSBzdHJpbmcsCisgICAgICAgICAgb3IgYGBOb25lYGAgaWYgdGhlIGNvbm5lY3Rpb24gaXNuJ3QgY29tcHJlc3NlZDsgcmVzdWx0IG9mCisgICAgICAgICAgOm1ldGg6YHNzbC5TU0xTb2NrZXQuY29tcHJlc3Npb25gCisgICAgICAgIC0gYGAnY2lwaGVyJ2BgOiBhIHRocmVlLXZhbHVlIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGNpcGhlcgorICAgICAgICAgIGJlaW5nIHVzZWQsIHRoZSB2ZXJzaW9uIG9mIHRoZSBTU0wgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIGl0cyB1c2UsIGFuZAorICAgICAgICAgIHRoZSBudW1iZXIgb2Ygc2VjcmV0IGJpdHMgYmVpbmcgdXNlZDsgcmVzdWx0IG9mCisgICAgICAgICAgOm1ldGg6YHNzbC5TU0xTb2NrZXQuY2lwaGVyYAorICAgICAgICAtIGBgJ3BlZXJjZXJ0J2BgOiBwZWVyIGNlcnRpZmljYXRlOyByZXN1bHQgb2YKKyAgICAgICAgICA6bWV0aDpgc3NsLlNTTFNvY2tldC5nZXRwZWVyY2VydGAKKyAgICAgICAgLSBgYCdzc2xjb250ZXh0J2BgOiA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBpbnN0YW5jZQorCisgICAgICAqIHBpcGU6CisKKyAgICAgICAgLSBgYCdwaXBlJ2BgOiBwaXBlIG9iamVjdAorCisgICAgICAqIHN1YnByb2Nlc3M6CisKKyAgICAgICAgLSBgYCdzdWJwcm9jZXNzJ2BgOiA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gIGluc3RhbmNlCisKKworUmVhZFRyYW5zcG9ydAorLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFJlYWRUcmFuc3BvcnQKKworICAgSW50ZXJmYWNlIGZvciByZWFkLW9ubHkgdHJhbnNwb3J0cy4KKworICAgLi4gbWV0aG9kOjogcGF1c2VfcmVhZGluZygpCisKKyAgICAgIFBhdXNlIHRoZSByZWNlaXZpbmcgZW5kIG9mIHRoZSB0cmFuc3BvcnQuICBObyBkYXRhIHdpbGwgYmUgcGFzc2VkIHRvCisgICAgICB0aGUgcHJvdG9jb2wncyA6bWV0aDpgZGF0YV9yZWNlaXZlZGAgbWV0aG9kIHVudGlsIG1ldGg6YHJlc3VtZV9yZWFkaW5nYAorICAgICAgaXMgY2FsbGVkLgorCisgICAuLiBtZXRob2Q6OiByZXN1bWVfcmVhZGluZygpCisKKyAgICAgIFJlc3VtZSB0aGUgcmVjZWl2aW5nIGVuZC4gIFRoZSBwcm90b2NvbCdzIDptZXRoOmBkYXRhX3JlY2VpdmVkYCBtZXRob2QKKyAgICAgIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdhaW4gaWYgc29tZSBkYXRhIGlzIGF2YWlsYWJsZSBmb3IgcmVhZGluZy4KKworCitXcml0ZVRyYW5zcG9ydAorLS0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBXcml0ZVRyYW5zcG9ydAorCisgICBJbnRlcmZhY2UgZm9yIHdyaXRlLW9ubHkgdHJhbnNwb3J0cy4KKworICAgLi4gbWV0aG9kOjogYWJvcnQoKQorCisgICAgICBDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgZm9yIHBlbmRpbmcgb3BlcmF0aW9ucworICAgICAgdG8gY29tcGxldGUuICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgbG9zdC4gIE5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlY2VpdmVkLgorICAgICAgVGhlIHByb3RvY29sJ3MgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgbWV0aG9kIHdpbGwgZXZlbnR1YWxseSBiZQorICAgICAgY2FsbGVkIHdpdGggOmNvbnN0OmBOb25lYCBhcyBpdHMgYXJndW1lbnQuCisKKyAgIC4uIG1ldGhvZDo6IGNhbl93cml0ZV9lb2YoKQorCisgICAgICBSZXR1cm4gOmNvbnN0OmBUcnVlYCBpZiB0aGUgdHJhbnNwb3J0IHN1cHBvcnRzIDptZXRoOmB3cml0ZV9lb2ZgLAorICAgICAgOmNvbnN0OmBGYWxzZWAgaWYgbm90LgorCisgICAuLiBtZXRob2Q6OiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoKQorCisgICAgICBSZXR1cm4gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciB1c2VkIGJ5IHRoZSB0cmFuc3BvcnQuCisKKyAgIC4uIG1ldGhvZDo6IHNldF93cml0ZV9idWZmZXJfbGltaXRzKGhpZ2g9Tm9uZSwgbG93PU5vbmUpCisKKyAgICAgIFNldCB0aGUgKmhpZ2gqLSBhbmQgKmxvdyotd2F0ZXIgbGltaXRzIGZvciB3cml0ZSBmbG93IGNvbnRyb2wuCisKKyAgICAgIFRoZXNlIHR3byB2YWx1ZXMgY29udHJvbCB3aGVuIGNhbGwgdGhlIHByb3RvY29sJ3MKKyAgICAgIDptZXRoOmBwYXVzZV93cml0aW5nYCBhbmQgOm1ldGg6YHJlc3VtZV93cml0aW5nYCBtZXRob2RzIGFyZSBjYWxsZWQuCisgICAgICBJZiBzcGVjaWZpZWQsIHRoZSBsb3ctd2F0ZXIgbGltaXQgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgTmVpdGhlciAqaGlnaCogbm9yICpsb3cqIGNhbiBiZSBuZWdhdGl2ZS4KKworICAgICAgVGhlIGRlZmF1bHRzIGFyZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIElmIG9ubHkgdGhlCisgICAgICBoaWdoLXdhdGVyIGxpbWl0IGlzIGdpdmVuLCB0aGUgbG93LXdhdGVyIGxpbWl0IGRlZmF1bHRzIHRvIGEKKyAgICAgIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgIGhpZ2gtd2F0ZXIgbGltaXQuICBTZXR0aW5nICpoaWdoKiB0byB6ZXJvIGZvcmNlcyAqbG93KiB0byB6ZXJvIGFzCisgICAgICB3ZWxsLCBhbmQgY2F1c2VzIDptZXRoOmBwYXVzZV93cml0aW5nYCB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlCisgICAgICBidWZmZXIgYmVjb21lcyBub24tZW1wdHkuICBTZXR0aW5nICpsb3cqIHRvIHplcm8gY2F1c2VzCisgICAgICA6bWV0aDpgcmVzdW1lX3dyaXRpbmdgIHRvIGJlIGNhbGxlZCBvbmx5IG9uY2UgdGhlIGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgIFVzZSBvZiB6ZXJvIGZvciBlaXRoZXIgbGltaXQgaXMgZ2VuZXJhbGx5IHN1Yi1vcHRpbWFsIGFzIGl0CisgICAgICByZWR1Y2VzIG9wcG9ydHVuaXRpZXMgZm9yIGRvaW5nIEkvTyBhbmQgY29tcHV0YXRpb24KKyAgICAgIGNvbmN1cnJlbnRseS4KKworICAgLi4gbWV0aG9kOjogd3JpdGUoZGF0YSkKKworICAgICAgV3JpdGUgc29tZSAqZGF0YSogYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydC4KKworICAgICAgVGhpcyBtZXRob2QgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgdG8gYmUgc2VudCBvdXQgYXN5bmNocm9ub3VzbHkuCisKKyAgIC4uIG1ldGhvZDo6IHdyaXRlbGluZXMobGlzdF9vZl9kYXRhKQorCisgICAgICBXcml0ZSBhIGxpc3QgKG9yIGFueSBpdGVyYWJsZSkgb2YgZGF0YSBieXRlcyB0byB0aGUgdHJhbnNwb3J0LgorICAgICAgVGhpcyBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBjYWxsaW5nIDptZXRoOmB3cml0ZWAgb24gZWFjaAorICAgICAgZWxlbWVudCB5aWVsZGVkIGJ5IHRoZSBpdGVyYWJsZSwgYnV0IG1heSBiZSBpbXBsZW1lbnRlZCBtb3JlIGVmZmljaWVudGx5LgorCisgICAuLiBtZXRob2Q6OiB3cml0ZV9lb2YoKQorCisgICAgICBDbG9zZSB0aGUgd3JpdGUgZW5kIG9mIHRoZSB0cmFuc3BvcnQgYWZ0ZXIgZmx1c2hpbmcgYnVmZmVyZWQgZGF0YS4KKyAgICAgIERhdGEgbWF5IHN0aWxsIGJlIHJlY2VpdmVkLgorCisgICAgICBUaGlzIG1ldGhvZCBjYW4gcmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgaWYgdGhlIHRyYW5zcG9ydAorICAgICAgKGUuZy4gU1NMKSBkb2Vzbid0IHN1cHBvcnQgaGFsZi1jbG9zZXMuCisKKworRGF0YWdyYW1UcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IERhdGFncmFtVHJhbnNwb3J0LnNlbmR0byhkYXRhLCBhZGRyPU5vbmUpCisKKyAgIFNlbmQgdGhlICpkYXRhKiBieXRlcyB0byB0aGUgcmVtb3RlIHBlZXIgZ2l2ZW4gYnkgKmFkZHIqIChhCisgICB0cmFuc3BvcnQtZGVwZW5kZW50IHRhcmdldCBhZGRyZXNzKS4gIElmICphZGRyKiBpcyA6Y29uc3Q6YE5vbmVgLCB0aGUKKyAgIGRhdGEgaXMgc2VudCB0byB0aGUgdGFyZ2V0IGFkZHJlc3MgZ2l2ZW4gb24gdHJhbnNwb3J0IGNyZWF0aW9uLgorCisgICBUaGlzIG1ldGhvZCBkb2VzIG5vdCBibG9jazsgaXQgYnVmZmVycyB0aGUgZGF0YSBhbmQgYXJyYW5nZXMgZm9yIGl0CisgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKworLi4gbWV0aG9kOjogRGF0YWdyYW1UcmFuc3BvcnQuYWJvcnQoKQorCisgICBDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgZm9yIHBlbmRpbmcgb3BlcmF0aW9ucworICAgdG8gY29tcGxldGUuICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgbG9zdC4gIE5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlY2VpdmVkLgorICAgVGhlIHByb3RvY29sJ3MgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgbWV0aG9kIHdpbGwgZXZlbnR1YWxseSBiZQorICAgY2FsbGVkIHdpdGggOmNvbnN0OmBOb25lYCBhcyBpdHMgYXJndW1lbnQuCisKKworQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQKKworICAgLi4gbWV0aG9kOjogZ2V0X3BpZCgpCisKKyAgICAgIFJldHVybiB0aGUgc3VicHJvY2VzcyBwcm9jZXNzIGlkIGFzIGFuIGludGVnZXIuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9waXBlX3RyYW5zcG9ydChmZCkKKworICAgICAgUmV0dXJuIHRoZSB0cmFuc3BvcnQgZm9yIHRoZSBjb21tdW5pY2F0aW9uIHBpcGUgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICAgIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yICpmZCouICBUaGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBhIHJlYWRhYmxlIG9yCisgICAgICB3cml0YWJsZSBzdHJlYW1pbmcgdHJhbnNwb3J0LCBkZXBlbmRpbmcgb24gdGhlICpmZCouICBJZiAqZmQqIGRvZXNuJ3QKKyAgICAgIGNvcnJlc3BvbmQgdG8gYSBwaXBlIGJlbG9uZ2luZyB0byB0aGlzIHRyYW5zcG9ydCwgOmNvbnN0OmBOb25lYCBpcworICAgICAgcmV0dXJuZWQuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9yZXR1cm5jb2RlKCkKKworICAgICAgUmV0dXJuIHRoZSBzdWJwcm9jZXNzIHJldHVybmNvZGUgYXMgYW4gaW50ZWdlciBvciA6Y29uc3Q6YE5vbmVgCisgICAgICBpZiBpdCBoYXNuJ3QgcmV0dXJuZWQsIHNpbWlsYXJseSB0byB0aGUKKyAgICAgIDphdHRyOmBzdWJwcm9jZXNzLlBvcGVuLnJldHVybmNvZGVgIGF0dHJpYnV0ZS4KKworICAgLi4gbWV0aG9kOjoga2lsbChzZWxmKQorCisgICAgICBLaWxsIHRoZSBzdWJwcm9jZXNzLCBhcyBpbiA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi5raWxsYAorCisgICAgICBPbiBQT1NJWCBzeXN0ZW1zLCB0aGUgZnVuY3Rpb24gc2VuZHMgU0lHS0lMTCB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgIE9uIFdpbmRvd3MsIHRoaXMgbWV0aG9kIGlzIGFuIGFsaWFzIGZvciA6bWV0aDpgdGVybWluYXRlYC4KKworICAgLi4gbWV0aG9kOjogc2VuZF9zaWduYWwoc2lnbmFsKQorCisgICAgICBTZW5kIHRoZSAqc2lnbmFsKiBudW1iZXIgdG8gdGhlIHN1YnByb2Nlc3MsIGFzIGluCisgICAgICA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi5zZW5kX3NpZ25hbGAuCisKKyAgIC4uIG1ldGhvZDo6IHRlcm1pbmF0ZSgpCisKKyAgICAgIEFzayB0aGUgc3VicHJvY2VzcyB0byBzdG9wLCBhcyBpbiA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGVgLgorICAgICAgVGhpcyBtZXRob2QgaXMgYW4gYWxpYXMgZm9yIHRoZSA6bWV0aDpgY2xvc2VgIG1ldGhvZC4KKworICAgICAgT24gUE9TSVggc3lzdGVtcywgdGhpcyBtZXRob2Qgc2VuZHMgU0lHVEVSTSB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgIE9uIFdpbmRvd3MsIHRoZSBXaW5kb3dzIEFQSSBmdW5jdGlvbiBUZXJtaW5hdGVQcm9jZXNzKCkgaXMgY2FsbGVkIHRvCisgICAgICBzdG9wIHRoZSBzdWJwcm9jZXNzLgorCisKKy4uIF9hc3luY2lvLXByb3RvY29sOgorCitQcm90b2NvbHMKKz09PT09PT09PQorCis6bW9kOmBhc3luY2lvYCBwcm92aWRlcyBiYXNlIGNsYXNzZXMgdGhhdCB5b3UgY2FuIHN1YmNsYXNzIHRvIGltcGxlbWVudAoreW91ciBuZXR3b3JrIHByb3RvY29scy4gIFRob3NlIGNsYXNzZXMgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAorOnJlZjpgdHJhbnNwb3J0cyA8YXN5bmNpby10cmFuc3BvcnQ+YCAoc2VlIGJlbG93KTogdGhlIHByb3RvY29sIHBhcnNlcyBpbmNvbWluZworZGF0YSBhbmQgYXNrcyBmb3IgdGhlIHdyaXRpbmcgb2Ygb3V0Z29pbmcgZGF0YSwgd2hpbGUgdGhlIHRyYW5zcG9ydCBpcworcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgSS9PIGFuZCBidWZmZXJpbmcuCisKK1doZW4gc3ViY2xhc3NpbmcgYSBwcm90b2NvbCBjbGFzcywgaXQgaXMgcmVjb21tZW5kZWQgeW91IG92ZXJyaWRlIGNlcnRhaW4KK21ldGhvZHMuICBUaG9zZSBtZXRob2RzIGFyZSBjYWxsYmFja3M6IHRoZXkgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIHRyYW5zcG9ydAorb24gY2VydGFpbiBldmVudHMgKGZvciBleGFtcGxlIHdoZW4gc29tZSBkYXRhIGlzIHJlY2VpdmVkKTsgeW91IHNob3VsZG4ndAorY2FsbCB0aGVtIHlvdXJzZWxmLCB1bmxlc3MgeW91IGFyZSBpbXBsZW1lbnRpbmcgYSB0cmFuc3BvcnQuCisKKy4uIG5vdGU6OgorICAgQWxsIGNhbGxiYWNrcyBoYXZlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zLCB3aGljaCBhcmUgZW1wdHkuICBUaGVyZWZvcmUsCisgICB5b3Ugb25seSBuZWVkIHRvIGltcGxlbWVudCB0aGUgY2FsbGJhY2tzIGZvciB0aGUgZXZlbnRzIGluIHdoaWNoIHlvdQorICAgYXJlIGludGVyZXN0ZWQuCisKKworUHJvdG9jb2wgY2xhc3NlcworLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFByb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgc3RyZWFtaW5nIHByb3RvY29scyAoZm9yIHVzZSB3aXRoCisgICBlLmcuIFRDUCBhbmQgU1NMIHRyYW5zcG9ydHMpLgorCisuLiBjbGFzczo6IERhdGFncmFtUHJvdG9jb2wKKworICAgVGhlIGJhc2UgY2xhc3MgZm9yIGltcGxlbWVudGluZyBkYXRhZ3JhbSBwcm90b2NvbHMgKGZvciB1c2Ugd2l0aAorICAgZS5nLiBVRFAgdHJhbnNwb3J0cykuCisKKy4uIGNsYXNzOjogU3VicHJvY2Vzc1Byb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgcHJvdG9jb2xzIGNvbW11bmljYXRpbmcgd2l0aCBjaGlsZAorICAgcHJvY2Vzc2VzICh0aHJvdWdoIGEgc2V0IG9mIHVuaWRpcmVjdGlvbmFsIHBpcGVzKS4KKworCitDb25uZWN0aW9uIGNhbGxiYWNrcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY2FsbGJhY2tzIG1heSBiZSBjYWxsZWQgb24gOmNsYXNzOmBQcm90b2NvbGAgYW5kCis6Y2xhc3M6YFN1YnByb2Nlc3NQcm90b2NvbGAgaW5zdGFuY2VzOgorCisuLiBtZXRob2Q6OiBCYXNlUHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKKworICAgQ2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGlzIG1hZGUuCisKKyAgIFRoZSAqdHJhbnNwb3J0KiBhcmd1bWVudCBpcyB0aGUgdHJhbnNwb3J0IHJlcHJlc2VudGluZyB0aGUKKyAgIGNvbm5lY3Rpb24uICBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdG9yaW5nIGl0IHNvbWV3aGVyZQorICAgKGUuZy4gYXMgYW4gYXR0cmlidXRlKSBpZiB5b3UgbmVlZCB0by4KKworLi4gbWV0aG9kOjogQmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisKKyAgIENhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3Qgb3IgY2xvc2VkLgorCisgICBUaGUgYXJndW1lbnQgaXMgZWl0aGVyIGFuIGV4Y2VwdGlvbiBvYmplY3Qgb3IgOmNvbnN0OmBOb25lYC4KKyAgIFRoZSBsYXR0ZXIgbWVhbnMgYSByZWd1bGFyIEVPRiBpcyByZWNlaXZlZCwgb3IgdGhlIGNvbm5lY3Rpb24gd2FzCisgICBhYm9ydGVkIG9yIGNsb3NlZCBieSB0aGlzIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24uCisKKzptZXRoOmBjb25uZWN0aW9uX21hZGVgIGFuZCA6bWV0aDpgY29ubmVjdGlvbl9sb3N0YCBhcmUgY2FsbGVkIGV4YWN0bHkgb25jZQorcGVyIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4gIEFsbCBvdGhlciBjYWxsYmFja3Mgd2lsbCBiZSBjYWxsZWQgYmV0d2VlbiB0aG9zZQordHdvIG1ldGhvZHMsIHdoaWNoIGFsbG93cyBmb3IgZWFzaWVyIHJlc291cmNlIG1hbmFnZW1lbnQgaW4geW91ciBwcm90b2NvbAoraW1wbGVtZW50YXRpb24uCisKK1RoZSBmb2xsb3dpbmcgY2FsbGJhY2tzIG1heSBiZSBjYWxsZWQgb25seSBvbiA6Y2xhc3M6YFN1YnByb2Nlc3NQcm90b2NvbGAKK2luc3RhbmNlczoKKworLi4gbWV0aG9kOjogU3VicHJvY2Vzc1Byb3RvY29sLnBpcGVfZGF0YV9yZWNlaXZlZChmZCwgZGF0YSkKKworICAgQ2FsbGVkIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3Mgd3JpdGVzIGRhdGEgaW50byBpdHMgc3Rkb3V0IG9yIHN0ZGVyciBwaXBlLgorICAgKmZkKiBpcyB0aGUgaW50ZWdlciBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHBpcGUuICAqZGF0YSogaXMgYSBub24tZW1wdHkKKyAgIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHRoZSBkYXRhLgorCisuLiBtZXRob2Q6OiBTdWJwcm9jZXNzUHJvdG9jb2wucGlwZV9jb25uZWN0aW9uX2xvc3QoZmQsIGV4YykKKworICAgQ2FsbGVkIHdoZW4gb25lIG9mIHRoZSBwaXBlcyBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGNoaWxkIHByb2Nlc3MKKyAgIGlzIGNsb3NlZC4gICpmZCogaXMgdGhlIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yIHRoYXQgd2FzIGNsb3NlZC4KKworLi4gbWV0aG9kOjogU3VicHJvY2Vzc1Byb3RvY29sLnByb2Nlc3NfZXhpdGVkKCkKKworICAgQ2FsbGVkIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGV4aXRlZC4KKworCitTdHJlYW1pbmcgcHJvdG9jb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgY2FsbGJhY2tzIGFyZSBjYWxsZWQgb24gOmNsYXNzOmBQcm90b2NvbGAgaW5zdGFuY2VzOgorCisuLiBtZXRob2Q6OiBQcm90b2NvbC5kYXRhX3JlY2VpdmVkKGRhdGEpCisKKyAgIENhbGxlZCB3aGVuIHNvbWUgZGF0YSBpcyByZWNlaXZlZC4gICpkYXRhKiBpcyBhIG5vbi1lbXB0eSBieXRlcyBvYmplY3QKKyAgIGNvbnRhaW5pbmcgdGhlIGluY29taW5nIGRhdGEuCisKKyAgIC4uIG5vdGU6OgorICAgICAgV2hldGhlciB0aGUgZGF0YSBpcyBidWZmZXJlZCwgY2h1bmtlZCBvciByZWFzc2VtYmxlZCBkZXBlbmRzIG9uCisgICAgICB0aGUgdHJhbnNwb3J0LiAgSW4gZ2VuZXJhbCwgeW91IHNob3VsZG4ndCByZWx5IG9uIHNwZWNpZmljIHNlbWFudGljcworICAgICAgYW5kIGluc3RlYWQgbWFrZSB5b3VyIHBhcnNpbmcgZ2VuZXJpYyBhbmQgZmxleGlibGUgZW5vdWdoLiAgSG93ZXZlciwKKyAgICAgIGRhdGEgaXMgYWx3YXlzIHJlY2VpdmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorCisuLiBtZXRob2Q6OiBQcm90b2NvbC5lb2ZfcmVjZWl2ZWQoKQorCisgICBDYWxscyB3aGVuIHRoZSBvdGhlciBlbmQgc2lnbmFscyBpdCB3b24ndCBzZW5kIGFueSBtb3JlIGRhdGEKKyAgIChmb3IgZXhhbXBsZSBieSBjYWxsaW5nIDptZXRoOmB3cml0ZV9lb2ZgLCBpZiB0aGUgb3RoZXIgZW5kIGFsc28gdXNlcworICAgYXN5bmNpbykuCisKKyAgIFRoaXMgbWV0aG9kIG1heSByZXR1cm4gYSBmYWxzZSB2YWx1ZSAoaW5jbHVkaW5nIE5vbmUpLCBpbiB3aGljaCBjYXNlCisgICB0aGUgdHJhbnNwb3J0IHdpbGwgY2xvc2UgaXRzZWxmLiAgQ29udmVyc2VseSwgaWYgdGhpcyBtZXRob2QgcmV0dXJucyBhCisgICB0cnVlIHZhbHVlLCBjbG9zaW5nIHRoZSB0cmFuc3BvcnQgaXMgdXAgdG8gdGhlIHByb3RvY29sLiAgU2luY2UgdGhlCisgICBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgTm9uZSwgaXQgaW1wbGljaXRseSBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uCisKKyAgIC4uIG5vdGU6OgorICAgICAgU29tZSB0cmFuc3BvcnRzIHN1Y2ggYXMgU1NMIGRvbid0IHN1cHBvcnQgaGFsZi1jbG9zZWQgY29ubmVjdGlvbnMsCisgICAgICBpbiB3aGljaCBjYXNlIHJldHVybmluZyB0cnVlIGZyb20gdGhpcyBtZXRob2Qgd2lsbCBub3QgcHJldmVudCBjbG9zaW5nCisgICAgICB0aGUgY29ubmVjdGlvbi4KKworOm1ldGg6YGRhdGFfcmVjZWl2ZWRgIGNhbiBiZSBjYWxsZWQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiB0aW1lcyBkdXJpbmcKK2EgY29ubmVjdGlvbi4gIEhvd2V2ZXIsIDptZXRoOmBlb2ZfcmVjZWl2ZWRgIGlzIGNhbGxlZCBhdCBtb3N0IG9uY2UKK2FuZCwgaWYgY2FsbGVkLCA6bWV0aDpgZGF0YV9yZWNlaXZlZGAgd29uJ3QgYmUgY2FsbGVkIGFmdGVyIGl0LgorCitEYXRhZ3JhbSBwcm90b2NvbHMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBhcmUgY2FsbGVkIG9uIDpjbGFzczpgRGF0YWdyYW1Qcm90b2NvbGAgaW5zdGFuY2VzLgorCisuLiBtZXRob2Q6OiBEYXRhZ3JhbVByb3RvY29sLmRhdGFncmFtX3JlY2VpdmVkKGRhdGEsIGFkZHIpCisKKyAgIENhbGxlZCB3aGVuIGEgZGF0YWdyYW0gaXMgcmVjZWl2ZWQuICAqZGF0YSogaXMgYSBieXRlcyBvYmplY3QgY29udGFpbmluZworICAgdGhlIGluY29taW5nIGRhdGEuICAqYWRkciogaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBlZXIgc2VuZGluZyB0aGUgZGF0YTsKKyAgIHRoZSBleGFjdCBmb3JtYXQgZGVwZW5kcyBvbiB0aGUgdHJhbnNwb3J0LgorCisuLiBtZXRob2Q6OiBEYXRhZ3JhbVByb3RvY29sLmVycm9yX3JlY2VpdmVkKGV4YykKKworICAgQ2FsbGVkIHdoZW4gYSBwcmV2aW91cyBzZW5kIG9yIHJlY2VpdmUgb3BlcmF0aW9uIHJhaXNlcyBhbgorICAgOmNsYXNzOmBPU0Vycm9yYC4gICpleGMqIGlzIHRoZSA6Y2xhc3M6YE9TRXJyb3JgIGluc3RhbmNlLgorCisgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gcmFyZSBjb25kaXRpb25zLCB3aGVuIHRoZSB0cmFuc3BvcnQgKGUuZy4gVURQKQorICAgZGV0ZWN0cyB0aGF0IGEgZGF0YWdyYW0gY291bGRuJ3QgYmUgZGVsaXZlcmVkIHRvIGl0cyByZWNpcGllbnQuCisgICBJbiBtYW55IGNvbmRpdGlvbnMgdGhvdWdoLCB1bmRlbGl2ZXJhYmxlIGRhdGFncmFtcyB3aWxsIGJlIHNpbGVudGx5CisgICBkcm9wcGVkLgorCisKK0Zsb3cgY29udHJvbCBjYWxsYmFja3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY2FsbGJhY2tzIG1heSBiZSBjYWxsZWQgb24gOmNsYXNzOmBQcm90b2NvbGAgYW5kCis6Y2xhc3M6YFN1YnByb2Nlc3NQcm90b2NvbGAgaW5zdGFuY2VzOgorCisuLiBtZXRob2Q6OiBCYXNlUHJvdG9jb2wucGF1c2Vfd3JpdGluZygpCisKKyAgIENhbGxlZCB3aGVuIHRoZSB0cmFuc3BvcnQncyBidWZmZXIgZ29lcyBvdmVyIHRoZSBoaWdoLXdhdGVyIG1hcmsuCisKKy4uIG1ldGhvZDo6IEJhc2VQcm90b2NvbC5yZXN1bWVfd3JpdGluZygpCisKKyAgIENhbGxlZCB3aGVuIHRoZSB0cmFuc3BvcnQncyBidWZmZXIgZHJhaW5zIGJlbG93IHRoZSBsb3ctd2F0ZXIgbWFyay4KKworCis6bWV0aDpgcGF1c2Vfd3JpdGluZ2AgYW5kIDptZXRoOmByZXN1bWVfd3JpdGluZ2AgY2FsbHMgYXJlIHBhaXJlZCAtLQorOm1ldGg6YHBhdXNlX3dyaXRpbmdgIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIGJ1ZmZlciBnb2VzIHN0cmljdGx5IG92ZXIKK3RoZSBoaWdoLXdhdGVyIG1hcmsgKGV2ZW4gaWYgc3Vic2VxdWVudCB3cml0ZXMgaW5jcmVhc2VzIHRoZSBidWZmZXIgc2l6ZQorZXZlbiBtb3JlKSwgYW5kIGV2ZW50dWFsbHkgOm1ldGg6YHJlc3VtZV93cml0aW5nYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZQorYnVmZmVyIHNpemUgcmVhY2hlcyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKy4uIG5vdGU6OgorICAgSWYgdGhlIGJ1ZmZlciBzaXplIGVxdWFscyB0aGUgaGlnaC13YXRlciBtYXJrLAorICAgOm1ldGg6YHBhdXNlX3dyaXRpbmdgIGlzIG5vdCBjYWxsZWQgLS0gaXQgbXVzdCBnbyBzdHJpY3RseSBvdmVyLgorICAgQ29udmVyc2VseSwgOm1ldGg6YHJlc3VtZV93cml0aW5nYCBpcyBjYWxsZWQgd2hlbiB0aGUgYnVmZmVyIHNpemUgaXMKKyAgIGVxdWFsIG9yIGxvd2VyIHRoYW4gdGhlIGxvdy13YXRlciBtYXJrLiAgVGhlc2UgZW5kIGNvbmRpdGlvbnMKKyAgIGFyZSBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgdGhpbmdzIGdvIGFzIGV4cGVjdGVkIHdoZW4gZWl0aGVyCisgICBtYXJrIGlzIHplcm8uCisKKworQ29yb3V0aW5lcyBhbmQgcHJvdG9jb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29yb3V0aW5lcyBjYW4gYmUgc2NoZWR1bGVkIGluIGEgcHJvdG9jb2wgbWV0aG9kIHVzaW5nIDpmdW5jOmBhc3luY2AsIGJ1dCB0aGVyZQoraXMgbm90IGd1YXJhbnRlZSBvbiB0aGUgZXhlY3V0aW9uIG9yZGVyLiBQcm90b2NvbHMgYXJlIG5vdCBhd2FyZSBvZiBjb3JvdXRpbmVzCitjcmVhdGVkIGluIHByb3RvY29sIG1ldGhvZHMgYW5kIHNvIHdpbGwgbm90IHdhaXQgZm9yIHRoZW0uCisKK1RvIGhhdmUgYSByZWxpYWJsZSBleGVjdXRpb24gb3JkZXIsIHVzZSA6cmVmOmBzdHJlYW0gb2JqZWN0cyA8YXN5bmNpby1zdHJlYW1zPmAgaW4gYQorY29yb3V0aW5lIHdpdGggYGB5aWVsZCBmcm9tYGAuIEZvciBleGFtcGxlLCB0aGUgOm1ldGg6YFN0cmVhbVdyaXRlci5kcmFpbmAKK2Nvcm91dGluZSBjYW4gYmUgdXNlZCB0byB3YWl0IHVudGlsIHRoZSB3cml0ZSBidWZmZXIgaXMgZmx1c2hlZC4KKworCitQcm90b2NvbCBleGFtcGxlOiBUQ1AgZWNobyBzZXJ2ZXIgYW5kIGNsaWVudAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRWNobyBjbGllbnQKKy0tLS0tLS0tLS0tCisKK1RDUCBlY2hvIGNsaWVudCBleGFtcGxlLCBzZW5kIGRhdGEgYW5kIHdhaXQgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBjbGFzcyBFY2hvQ2xpZW50KGFzeW5jaW8uUHJvdG9jb2wpOgorICAgICAgICBtZXNzYWdlID0gJ1RoaXMgaXMgdGhlIG1lc3NhZ2UuIEl0IHdpbGwgYmUgZWNob2VkLicKKworICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICB0cmFuc3BvcnQud3JpdGUoc2VsZi5tZXNzYWdlLmVuY29kZSgpKQorICAgICAgICAgICAgcHJpbnQoJ2RhdGEgc2VudDoge30nLmZvcm1hdChzZWxmLm1lc3NhZ2UpKQorCisgICAgICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcHJpbnQoJ2RhdGEgcmVjZWl2ZWQ6IHt9Jy5mb3JtYXQoZGF0YS5kZWNvZGUoKSkpCisKKyAgICAgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICAgICAgcHJpbnQoJ3NlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24nKQorICAgICAgICAgICAgYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpLnN0b3AoKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGNvcm8gPSBsb29wLmNyZWF0ZV9jb25uZWN0aW9uKEVjaG9DbGllbnQsICcxMjcuMC4wLjEnLCA4ODg4KQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisgICAgbG9vcC5jbG9zZSgpCisKK1RoZSBldmVudCBsb29wIGlzIHJ1bm5pbmcgdHdpY2UuIFRoZQorOm1ldGg6YH5CYXNlRXZlbnRMb29wLnJ1bl91bnRpbF9jb21wbGV0ZWAgbWV0aG9kIGlzIHByZWZlcnJlZCBpbiB0aGlzIHNob3J0CitleGFtcGxlIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgc2VydmVyIGlzIG5vdCBsaXN0ZW5pbmcsIGluc3RlYWQgb2YKK2hhdmluZyB0byB3cml0ZSBhIHNob3J0IGNvcm91dGluZSB0byBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBhbmQgc3RvcCB0aGUKK3J1bm5pbmcgbG9vcC4gQXQgOm1ldGg6YH5CYXNlRXZlbnRMb29wLnJ1bl91bnRpbF9jb21wbGV0ZWAgZXhpdCwgdGhlIGxvb3AgaXMKK25vIG1vcmUgcnVubmluZywgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBzdG9wIHRoZSBsb29wIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisKK0VjaG8gc2VydmVyCistLS0tLS0tLS0tLQorCitUQ1AgZWNobyBzZXJ2ZXIgZXhhbXBsZSwgc2VuZCBiYWNrIHJlY2VpdmVkIGRhdGEgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBjbGFzcyBFY2hvU2VydmVyKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICBwZWVybmFtZSA9IHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGVlcm5hbWUnKQorICAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3Rpb24gZnJvbSB7fScuZm9ybWF0KHBlZXJuYW1lKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisKKyAgICAgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICBwcmludCgnZGF0YSByZWNlaXZlZDoge30nLmZvcm1hdChkYXRhLmRlY29kZSgpKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgICAgICMgY2xvc2UgdGhlIHNvY2tldAorICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQuY2xvc2UoKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGNvcm8gPSBsb29wLmNyZWF0ZV9zZXJ2ZXIoRWNob1NlcnZlciwgJzEyNy4wLjAuMScsIDg4ODgpCisgICAgc2VydmVyID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICBwcmludCgnc2VydmluZyBvbiB7fScuZm9ybWF0KHNlcnZlci5zb2NrZXRzWzBdLmdldHNvY2tuYW1lKCkpKQorCisgICAgdHJ5OgorICAgICAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHByaW50KCJleGl0IikKKyAgICBmaW5hbGx5OgorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorICAgICAgICBsb29wLmNsb3NlKCkKKworOm1ldGg6YFRyYW5zcG9ydC5jbG9zZWAgY2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlcgorOm1ldGg6YFdyaXRlVHJhbnNwb3J0LndyaXRlYCBldmVuIGlmIGRhdGEgYXJlIG5vdCBzZW50IHlldCBvbiB0aGUgc29ja2V0OiBib3RoCittZXRob2RzIGFyZSBhc3luY2hyb25vdXMuIGBgeWllbGQgZnJvbWBgIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGVzZSB0cmFuc3BvcnQKK21ldGhvZHMgZG9uJ3QgcmV0dXJuIGNvcm91dGluZXMuCisKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0ucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NTdkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN0cmVhbS5yc3QKQEAgLTAsMCArMSwyNjQgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKKy4uIF9hc3luY2lvLXN0cmVhbXM6CisKKysrKysrKysrKysrKysrKysrKysrKysrKworU3RyZWFtcyAoaGlnaC1sZXZlbCBBUEkpCisrKysrKysrKysrKysrKysrKysrKysrKysKKworU3RyZWFtIGZ1bmN0aW9ucworPT09PT09PT09PT09PT09PQorCisuLiBmdW5jdGlvbjo6IG9wZW5fY29ubmVjdGlvbihob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgXCosIGxvb3A9Tm9uZSwgbGltaXQ9Tm9uZSwgKiprd2RzKQorCisgICBBIHdyYXBwZXIgZm9yIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbigpYCByZXR1cm5pbmcgYSAocmVhZGVyLAorICAgd3JpdGVyKSBwYWlyLgorCisgICBUaGUgcmVhZGVyIHJldHVybmVkIGlzIGEgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIGluc3RhbmNlOyB0aGUgd3JpdGVyIGlzCisgICBhIDpjbGFzczpgU3RyZWFtV3JpdGVyYCBpbnN0YW5jZS4KKworICAgVGhlIGFyZ3VtZW50cyBhcmUgYWxsIHRoZSB1c3VhbCBhcmd1bWVudHMgdG8KKyAgIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uYCBleGNlcHQgKnByb3RvY29sX2ZhY3RvcnkqOyBtb3N0CisgICBjb21tb24gYXJlIHBvc2l0aW9uYWwgaG9zdCBhbmQgcG9ydCwgd2l0aCB2YXJpb3VzIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzCisgICBmb2xsb3dpbmcuCisKKyAgIEFkZGl0aW9uYWwgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpsb29wKiAodG8gc2V0IHRoZSBldmVudCBsb29wCisgICBpbnN0YW5jZSB0byB1c2UpIGFuZCAqbGltaXQqICh0byBzZXQgdGhlIGJ1ZmZlciBsaW1pdCBwYXNzZWQgdG8gdGhlCisgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcmApLgorCisgICAoSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIHRoZSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgYW5kL29yCisgICA6Y2xhc3M6YFN0cmVhbVJlYWRlclByb3RvY29sYCBjbGFzc2VzLCBqdXN0IGNvcHkgdGhlIGNvZGUgLS0gdGhlcmUncyByZWFsbHkKKyAgIG5vdGhpbmcgc3BlY2lhbCBoZXJlIGV4Y2VwdCBzb21lIGNvbnZlbmllbmNlLikKKworICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAuCisKKy4uIGZ1bmN0aW9uOjogc3RhcnRfc2VydmVyKGNsaWVudF9jb25uZWN0ZWRfY2IsIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCBcKiwgbG9vcD1Ob25lLCBsaW1pdD1Ob25lLCAqKmt3ZHMpCisKKyAgIFN0YXJ0IGEgc29ja2V0IHNlcnZlciwgY2FsbCBiYWNrIGZvciBlYWNoIGNsaWVudCBjb25uZWN0ZWQuCisKKyAgIFRoZSBmaXJzdCBwYXJhbWV0ZXIsICpjbGllbnRfY29ubmVjdGVkX2NiKiwgdGFrZXMgdHdvIHBhcmFtZXRlcnM6CisgICAqY2xpZW50X3JlYWRlciosICpjbGllbnRfd3JpdGVyKi4gICpjbGllbnRfcmVhZGVyKiBpcyBhCisgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgb2JqZWN0LCB3aGlsZSAqY2xpZW50X3dyaXRlciogaXMgYQorICAgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgIG9iamVjdC4gIFRoaXMgcGFyYW1ldGVyIGNhbiBlaXRoZXIgYmUgYSBwbGFpbiBjYWxsYmFjaworICAgZnVuY3Rpb24gb3IgYSA6cmVmOmBjb3JvdXRpbmUgZnVuY3Rpb24gPGNvcm91dGluZT5gOyBpZiBpdCBpcyBhIGNvcm91dGluZQorICAgZnVuY3Rpb24sIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgaW50byBhIDpjbGFzczpgVGFza2AuCisKKyAgIFRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMgYXJlIGFsbCB0aGUgdXN1YWwgYXJndW1lbnRzIHRvCisgICA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcigpYCBleGNlcHQgKnByb3RvY29sX2ZhY3RvcnkqOyBtb3N0CisgICBjb21tb24gYXJlIHBvc2l0aW9uYWwgaG9zdCBhbmQgcG9ydCwgd2l0aCB2YXJpb3VzIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzCisgICBmb2xsb3dpbmcuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIGFzCisgICA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcigpYC4KKworICAgQWRkaXRpb25hbCBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmxvb3AqICh0byBzZXQgdGhlIGV2ZW50IGxvb3AKKyAgIGluc3RhbmNlIHRvIHVzZSkgYW5kICpsaW1pdCogKHRvIHNldCB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgIDpjbGFzczpgU3RyZWFtUmVhZGVyYCkuCisKKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXIoKWAsIGkuZS4KKyAgIGEgOmNsYXNzOmBBYnN0cmFjdFNlcnZlcmAgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgdGhlIHNlcnZpY2UuCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisKK1N0cmVhbVJlYWRlcgorPT09PT09PT09PT09CisKKy4uIGNsYXNzOjogU3RyZWFtUmVhZGVyKGxpbWl0PU5vbmUsIGxvb3A9Tm9uZSkKKworICAgLi4gbWV0aG9kOjogZXhjZXB0aW9uKCkKKworICAgICAgR2V0IHRoZSBleGNlcHRpb24uCisKKyAgIC4uIG1ldGhvZDo6IGZlZWRfZW9mKCkKKworICAgICAgWFhYCisKKyAgIC4uIG1ldGhvZDo6IGZlZWRfZGF0YShkYXRhKQorCisgICAgICBYWFgKKworICAgLi4gbWV0aG9kOjogc2V0X2V4Y2VwdGlvbihleGMpCisKKyAgICAgIFNldCB0aGUgZXhjZXB0aW9uLgorCisgICAuLiBtZXRob2Q6OiBzZXRfdHJhbnNwb3J0KHRyYW5zcG9ydCkKKworICAgICAgU2V0IHRoZSB0cmFuc3BvcnQuCisKKyAgIC4uIG1ldGhvZDo6IHJlYWQobj0tMSkKKworICAgICAgWFhYCisKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogcmVhZGxpbmUoKQorCisgICAgICBYWFgKKworICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiByZWFkZXhhY3RseShuKQorCisgICAgICBSZWFkIGV4YWN0bHkgKm4qIGJ5dGVzLiBSYWlzZSBhbiA6ZXhjOmBJbmNvbXBsZXRlUmVhZEVycm9yYCBpZiB0aGUgZW5kIG9mCisgICAgICB0aGUgc3RyZWFtIGlzIHJlYWNoZWQgYmVmb3JlICpuKiBjYW4gYmUgcmVhZCwgdGhlCisgICAgICA6YXR0cjpgSW5jb21wbGV0ZVJlYWRFcnJvci5wYXJ0aWFsYCBhdHRyaWJ1dGUgb2YgdGhlIGV4Y2VwdGlvbiBjb250YWlucworICAgICAgdGhlIHBhcnRpYWwgcmVhZCBieXRlcy4KKworICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisKK1N0cmVhbVdyaXRlcgorPT09PT09PT09PT09CisKKy4uIGNsYXNzOjogU3RyZWFtV3JpdGVyKHRyYW5zcG9ydCwgcHJvdG9jb2wsIHJlYWRlciwgbG9vcCkKKworICAgV3JhcHMgYSBUcmFuc3BvcnQuCisKKyAgIFRoaXMgZXhwb3NlcyA6bWV0aDpgd3JpdGVgLCA6bWV0aDpgd3JpdGVsaW5lc2AsIDptZXRoOmBjYW5fd3JpdGVfZW9mKClgLAorICAgOm1ldGg6YHdyaXRlX2VvZmAsIDptZXRoOmBnZXRfZXh0cmFfaW5mb2AgYW5kIDptZXRoOmBjbG9zZWAuICBJdCBhZGRzCisgICA6bWV0aDpgZHJhaW5gIHdoaWNoIHJldHVybnMgYW4gb3B0aW9uYWwgOmNsYXNzOmBGdXR1cmVgIG9uIHdoaWNoIHlvdSBjYW4KKyAgIHdhaXQgZm9yIGZsb3cgY29udHJvbC4gIEl0IGFsc28gYWRkcyBhIHRyYW5zcG9ydCBhdHRyaWJ1dGUgd2hpY2ggcmVmZXJlbmNlcworICAgdGhlIDpjbGFzczpgVHJhbnNwb3J0YCBkaXJlY3RseS4KKworICAgLi4gYXR0cmlidXRlOjogdHJhbnNwb3J0CisKKyAgICAgIFRyYW5zcG9ydC4KKworICAgLi4gbWV0aG9kOjogY2FuX3dyaXRlX2VvZigpCisKKyAgICAgIFJldHVybiA6Y29uc3Q6YFRydWVgIGlmIHRoZSB0cmFuc3BvcnQgc3VwcG9ydHMgOm1ldGg6YHdyaXRlX2VvZmAsCisgICAgICA6Y29uc3Q6YEZhbHNlYCBpZiBub3QuIFNlZSA6bWV0aDpgV3JpdGVUcmFuc3BvcnQuY2FuX3dyaXRlX2VvZmAuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgQ2xvc2UgdGhlIHRyYW5zcG9ydDogc2VlIDptZXRoOmBCYXNlVHJhbnNwb3J0LmNsb3NlYC4KKworICAgLi4gbWV0aG9kOjogZHJhaW4oKQorCisgICAgICBXYWl0IHVudGlsIHRoZSB3cml0ZSBidWZmZXIgb2YgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGlzIGZsdXNoZWQuCisKKyAgICAgIFRoaXMgbWV0aG9kIGhhcyBhbiB1bnVzdWFsIHJldHVybiB2YWx1ZS4gVGhlIGludGVuZGVkIHVzZSBpcyB0byB3cml0ZTo6CisKKyAgICAgICAgICB3LndyaXRlKGRhdGEpCisgICAgICAgICAgeWllbGQgZnJvbSB3LmRyYWluKCkKKworICAgICAgV2hlbiB0aGVyZSdzIG5vdGhpbmcgdG8gd2FpdCBmb3IsIDptZXRoOmBkcmFpbigpYCByZXR1cm5zIGBgKClgYCwgYW5kIHRoZQorICAgICAgeWllbGQtZnJvbSBjb250aW51ZXMgaW1tZWRpYXRlbHkuICBXaGVuIHRoZSB0cmFuc3BvcnQgYnVmZmVyIGlzIGZ1bGwgKHRoZQorICAgICAgcHJvdG9jb2wgaXMgcGF1c2VkKSwgOm1ldGg6YGRyYWluYCBjcmVhdGVzIGFuZCByZXR1cm5zIGEKKyAgICAgIDpjbGFzczpgRnV0dXJlYCBhbmQgdGhlIHlpZWxkLWZyb20gd2lsbCBibG9jayB1bnRpbAorICAgICAgdGhhdCBGdXR1cmUgaXMgY29tcGxldGVkLCB3aGljaCB3aWxsIGhhcHBlbiB3aGVuIHRoZSBidWZmZXIgaXMKKyAgICAgIChwYXJ0aWFsbHkpIGRyYWluZWQgYW5kIHRoZSBwcm90b2NvbCBpcyByZXN1bWVkLgorCisgICAuLiBtZXRob2Q6OiBnZXRfZXh0cmFfaW5mbyhuYW1lLCBkZWZhdWx0PU5vbmUpCisKKyAgICAgIFJldHVybiBvcHRpb25hbCB0cmFuc3BvcnQgaW5mb3JtYXRpb246IHNlZQorICAgICAgOm1ldGg6YEJhc2VUcmFuc3BvcnQuZ2V0X2V4dHJhX2luZm9gLgorCisgICAuLiBtZXRob2Q6OiB3cml0ZShkYXRhKQorCisgICAgICBXcml0ZSBzb21lICpkYXRhKiBieXRlcyB0byB0aGUgdHJhbnNwb3J0OiBzZWUKKyAgICAgIDptZXRoOmBXcml0ZVRyYW5zcG9ydC53cml0ZWAuCisKKyAgIC4uIG1ldGhvZDo6IHdyaXRlbGluZXMoZGF0YSkKKworICAgICAgV3JpdGUgYSBsaXN0IChvciBhbnkgaXRlcmFibGUpIG9mIGRhdGEgYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydDoKKyAgICAgIHNlZSA6bWV0aDpgV3JpdGVUcmFuc3BvcnQud3JpdGVsaW5lc2AuCisKKyAgIC4uIG1ldGhvZDo6IHdyaXRlX2VvZigpCisKKyAgICAgIENsb3NlIHRoZSB3cml0ZSBlbmQgb2YgdGhlIHRyYW5zcG9ydCBhZnRlciBmbHVzaGluZyBidWZmZXJlZCBkYXRhOgorICAgICAgc2VlIDptZXRoOmBXcml0ZVRyYW5zcG9ydC53cml0ZV9lb2ZgLgorCisKK1N0cmVhbVJlYWRlclByb3RvY29sCis9PT09PT09PT09PT09PT09PT09PQorCisuLiBjbGFzczo6IFN0cmVhbVJlYWRlclByb3RvY29sKHN0cmVhbV9yZWFkZXIsIGNsaWVudF9jb25uZWN0ZWRfY2I9Tm9uZSwgbG9vcD1Ob25lKQorCisgICAgVHJpdmlhbCBoZWxwZXIgY2xhc3MgdG8gYWRhcHQgYmV0d2VlbiA6Y2xhc3M6YFByb3RvY29sYCBhbmQKKyAgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAuIFN1YmxjbGFzcyBvZiA6Y2xhc3M6YFByb3RvY29sYC4KKworICAgICpzdHJlYW1fcmVhZGVyKiBpcyBhIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBpbnN0YW5jZSwgKmNsaWVudF9jb25uZWN0ZWRfY2IqCisgICAgaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGVkIHdpdGggKHN0cmVhbV9yZWFkZXIsIHN0cmVhbV93cml0ZXIpIHdoZW4gYQorICAgIGNvbm5lY3Rpb24gaXMgbWFkZSwgKmxvb3AqIGlzIHRoZSBldmVudCBsb29wIGluc3RhbmNlIHRvIHVzZS4KKworICAgIChUaGlzIGlzIGEgaGVscGVyIGNsYXNzIGluc3RlYWQgb2YgbWFraW5nIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBpdHNlbGYgYQorICAgIDpjbGFzczpgUHJvdG9jb2xgIHN1YmNsYXNzLCBiZWNhdXNlIHRoZSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgaGFzIG90aGVyCisgICAgcG90ZW50aWFsIHVzZXMsIGFuZCB0byBwcmV2ZW50IHRoZSB1c2VyIG9mIHRoZSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgdG8KKyAgICBhY2NpZGVudGFsbHkgY2FsbCBpbmFwcHJvcHJpYXRlIG1ldGhvZHMgb2YgdGhlIHByb3RvY29sLikKKworICAgIC4uIG1ldGhvZDo6IGNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCisKKyAgICAgICBYWFgKKworICAgIC4uIG1ldGhvZDo6IGNvbm5lY3Rpb25fbG9zdChleGMpCisKKyAgICAgICBYWFgKKworICAgIC4uIG1ldGhvZDo6IGRhdGFfcmVjZWl2ZWQoZGF0YSkKKworICAgICAgIFhYWAorCisgICAgLi4gbWV0aG9kOjogZW9mX3JlY2VpdmVkKCkKKworICAgICAgIFhYWAorCisgICAgLi4gbWV0aG9kOjogcGF1c2Vfd3JpdGluZygpCisKKyAgICAgICBYWFgKKworICAgIC4uIG1ldGhvZDo6IHJlc3VtZV93cml0aW5nKCkKKworICAgICAgIFhYWAorCisKK0luY29tcGxldGVSZWFkRXJyb3IKKz09PT09PT09PT09PT09PT09PT0KKworLi4gZXhjZXB0aW9uOjogSW5jb21wbGV0ZVJlYWRFcnJvcgorCisgICAgSW5jb21wbGV0ZSByZWFkIGVycm9yLCBzdWJjbGFzcyBvZiA6ZXhjOmBFT0ZFcnJvcmAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGV4cGVjdGVkCisKKyAgICAgIFRvdGFsIG51bWJlciBvZiBleHBlY3RlZCBieXRlcyAoOmNsYXNzOmBpbnRgKS4KKworICAgLi4gYXR0cmlidXRlOjogcGFydGlhbAorCisgICAgICBSZWFkIGJ5dGVzIHN0cmluZyBiZWZvcmUgdGhlIGVuZCBvZiBzdHJlYW0gd2FzIHJlYWNoZWQgKDpjbGFzczpgYnl0ZXNgKS4KKworCitFeGFtcGxlCis9PT09PT09CisKK1NpbXBsZSBleGFtcGxlIHF1ZXJ5aW5nIEhUVFAgaGVhZGVycyBvZiB0aGUgVVJMIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgaW1wb3J0IHVybGxpYi5wYXJzZQorICAgIGltcG9ydCBzeXMKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBwcmludF9odHRwX2hlYWRlcnModXJsKToKKyAgICAgICAgdXJsID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KHVybCkKKyAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSB5aWVsZCBmcm9tIGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKHVybC5ob3N0bmFtZSwgODApCisgICAgICAgIHF1ZXJ5ID0gKCdIRUFEIHt1cmwucGF0aH0gSFRUUC8xLjBcclxuJworICAgICAgICAgICAgICAgICAnSG9zdDoge3VybC5ob3N0bmFtZX1cclxuJworICAgICAgICAgICAgICAgICAnXHJcbicpLmZvcm1hdCh1cmw9dXJsKQorICAgICAgICB3cml0ZXIud3JpdGUocXVlcnkuZW5jb2RlKCdsYXRpbi0xJykpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBsaW5lID0geWllbGQgZnJvbSByZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLmRlY29kZSgnbGF0aW4xJykucnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgcHJpbnQoJ0hUVFAgaGVhZGVyPiAlcycgJSBsaW5lKQorCisgICAgdXJsID0gc3lzLmFyZ3ZbMV0KKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgdGFzayA9IGFzeW5jaW8uYXN5bmMocHJpbnRfaHR0cF9oZWFkZXJzKHVybCkpCisgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICBsb29wLmNsb3NlKCkKKworVXNhZ2U6OgorCisgICAgcHl0aG9uIGV4YW1wbGUucHkgaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvcGFnZS5odG1sCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN1YnByb2Nlc3MucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmU2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN1YnByb2Nlc3MucnN0CkBAIC0wLDAgKzEsMTc2IEBACisuLiBjdXJyZW50bW9kdWxlOjogYXN5bmNpbworCitTdWJwcm9jZXNzCis9PT09PT09PT09CisKK0NyZWF0ZSBhIHN1YnByb2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gZnVuY3Rpb246OiBjcmVhdGVfc3VicHJvY2Vzc19zaGVsbChjbWQsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgbG9vcD1Ob25lLCBsaW1pdD1Ob25lLCBcKlwqa3dkcykKKworICAgUnVuIHRoZSBzaGVsbCBjb21tYW5kICpjbWQqIGdpdmVuIGFzIGEgc3RyaW5nLiBSZXR1cm4gYSA6Y2xhc3M6YFByb2Nlc3NgCisgICBpbnN0YW5jZS4KKworICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAuCisKKy4uIGZ1bmN0aW9uOjogY3JlYXRlX3N1YnByb2Nlc3NfZXhlYyhcKmFyZ3MsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgbG9vcD1Ob25lLCBsaW1pdD1Ob25lLCBcKlwqa3dkcykKKworICAgQ3JlYXRlIGEgc3VicHJvY2Vzcy4gUmV0dXJuIGEgOmNsYXNzOmBQcm9jZXNzYCBpbnN0YW5jZS4KKworICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAuCisKK1VzZSB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY29ubmVjdF9yZWFkX3BpcGVgIGFuZAorOm1ldGg6YEJhc2VFdmVudExvb3AuY29ubmVjdF93cml0ZV9waXBlYCBtZXRob2RzIHRvIGNvbm5lY3QgcGlwZXMuCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOm1ldGg6YEJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19leGVjYCBhbmQKKyAgIDptZXRoOmBCYXNlRXZlbnRMb29wLnN1YnByb2Nlc3Nfc2hlbGxgIG1ldGhvZHMuCisKKworQ29uc3RhbnRzCistLS0tLS0tLS0KKworLi4gZGF0YTo6IGFzeW5jaW8uc3VicHJvY2Vzcy5QSVBFCisKKyAgIFNwZWNpYWwgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgKnN0ZGluKiwgKnN0ZG91dCogb3IgKnN0ZGVyciogYXJndW1lbnQKKyAgIHRvIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19zaGVsbGAgYW5kIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19leGVjYCBhbmQKKyAgIGluZGljYXRlcyB0aGF0IGEgcGlwZSB0byB0aGUgc3RhbmRhcmQgc3RyZWFtIHNob3VsZCBiZSBvcGVuZWQuCisKKy4uIGRhdGE6OiBhc3luY2lvLnN1YnByb2Nlc3MuU1RET1VUCisKKyAgIFNwZWNpYWwgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgKnN0ZGVyciogYXJndW1lbnQgdG8KKyAgIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19zaGVsbGAgYW5kIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19leGVjYCBhbmQKKyAgIGluZGljYXRlcyB0aGF0IHN0YW5kYXJkIGVycm9yIHNob3VsZCBnbyBpbnRvIHRoZSBzYW1lIGhhbmRsZSBhcyBzdGFuZGFyZAorICAgb3V0cHV0LgorCisuLiBkYXRhOjogYXN5bmNpby5zdWJwcm9jZXNzLkRFVk5VTEwKKworICAgU3BlY2lhbCB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSAqc3RkZXJyKiBhcmd1bWVudCB0bworICAgOmZ1bmM6YGNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsYCBhbmQgOmZ1bmM6YGNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWNgIGFuZAorICAgaW5kaWNhdGVzIHRoYXQgc3RhbmRhcmQgZXJyb3Igc2hvdWxkIGdvIGludG8gdGhlIHNhbWUgaGFuZGxlIGFzIHN0YW5kYXJkCisgICBvdXRwdXQuCisKKworUHJvY2VzcworLS0tLS0tLQorCisuLiBjbGFzczo6IGFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHBpZAorCisgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJvY2Vzcy4KKworICAgICAgTm90ZSB0aGF0IGlmIHlvdSBzZXQgdGhlICpzaGVsbCogYXJndW1lbnQgdG8gYGBUcnVlYGAsIHRoaXMgaXMgdGhlCisgICAgICBwcm9jZXNzIGlkZW50aWZpZXIgb2YgdGhlIHNwYXduZWQgc2hlbGwuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHJldHVybmNvZGUKKworICAgICAgUmV0dXJuIGNvZGUgb2YgdGhlIHByb2Nlc3Mgd2hlbiBpdCBleGl0ZWQuICBBIGBgTm9uZWBgIHZhbHVlIGluZGljYXRlcworICAgICAgdGhhdCB0aGUgcHJvY2VzcyBoYXMgbm90IHRlcm1pbmF0ZWQgeWV0LgorCisgICAgICBBIG5lZ2F0aXZlIHZhbHVlIGBgLU5gYCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hpbGQgd2FzIHRlcm1pbmF0ZWQgYnkgc2lnbmFsCisgICAgICBgYE5gYCAoVW5peCBvbmx5KS4KKworICAgLi4gYXR0cmlidXRlOjogc3RkaW4KKworICAgICAgU3RhbmRhcmQgaW5wdXQgc3RyZWFtICh3cml0ZSksIGBgTm9uZWBgIGlmIHRoZSBwcm9jZXNzIHdhcyBjcmVhdGVkIHdpdGgKKyAgICAgIGBgc3RkaW49Tm9uZWBgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdGRvdXQKKworICAgICAgU3RhbmRhcmQgb3V0cHV0IHN0cmVhbSAocmVhZCksIGBgTm9uZWBgIGlmIHRoZSBwcm9jZXNzIHdhcyBjcmVhdGVkIHdpdGgKKyAgICAgIGBgc3Rkb3V0PU5vbmVgYC4KKworICAgLi4gYXR0cmlidXRlOjogc3RkZXJyCisKKyAgICAgIFN0YW5kYXJkIGVycm9yIHN0cmVhbSAocmVhZCksIGBgTm9uZWBgIGlmIHRoZSBwcm9jZXNzIHdhcyBjcmVhdGVkIHdpdGgKKyAgICAgIGBgc3RkZXJyPU5vbmVgYC4KKworICAgLi4gbWV0aG9kOjogY29tbXVuaWNhdGUoaW5wdXQ9Tm9uZSkKKworICAgICAgSW50ZXJhY3Qgd2l0aCBwcm9jZXNzOiBTZW5kIGRhdGEgdG8gc3RkaW4uICBSZWFkIGRhdGEgZnJvbSBzdGRvdXQgYW5kCisgICAgICBzdGRlcnIsIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQuICBXYWl0IGZvciBwcm9jZXNzIHRvIHRlcm1pbmF0ZS4KKyAgICAgIFRoZSBvcHRpb25hbCAqaW5wdXQqIGFyZ3VtZW50IHNob3VsZCBiZSBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlIGNoaWxkCisgICAgICBwcm9jZXNzLCBvciBgYE5vbmVgYCwgaWYgbm8gZGF0YSBzaG91bGQgYmUgc2VudCB0byB0aGUgY2hpbGQuICBUaGUgdHlwZQorICAgICAgb2YgKmlucHV0KiBtdXN0IGJlIGJ5dGVzLgorCisgICAgICA6bWV0aDpgY29tbXVuaWNhdGVgIHJldHVybnMgYSB0dXBsZSBgYChzdGRvdXRkYXRhLCBzdGRlcnJkYXRhKWBgLgorCisgICAgICBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gc2VuZCBkYXRhIHRvIHRoZSBwcm9jZXNzJ3Mgc3RkaW4sIHlvdSBuZWVkIHRvCisgICAgICBjcmVhdGUgdGhlIFByb2Nlc3Mgb2JqZWN0IHdpdGggYGBzdGRpbj1QSVBFYGAuICBTaW1pbGFybHksIHRvIGdldCBhbnl0aGluZworICAgICAgb3RoZXIgdGhhbiBgYE5vbmVgYCBpbiB0aGUgcmVzdWx0IHR1cGxlLCB5b3UgbmVlZCB0byBnaXZlIGBgc3Rkb3V0PVBJUEVgYAorICAgICAgYW5kL29yIGBgc3RkZXJyPVBJUEVgYCB0b28uCisKKyAgICAgIC4uIG5vdGU6OgorCisgICAgICAgICBUaGUgZGF0YSByZWFkIGlzIGJ1ZmZlcmVkIGluIG1lbW9yeSwgc28gZG8gbm90IHVzZSB0aGlzIG1ldGhvZCBpZiB0aGUKKyAgICAgICAgIGRhdGEgc2l6ZSBpcyBsYXJnZSBvciB1bmxpbWl0ZWQuCisKKyAgIC4uIG1ldGhvZDo6IGtpbGwoKQorCisgICAgICBLaWxscyB0aGUgY2hpbGQuIE9uIFBvc2l4IE9TcyB0aGUgZnVuY3Rpb24gc2VuZHMgOnB5OmRhdGE6YFNJR0tJTExgIHRvCisgICAgICB0aGUgY2hpbGQuICBPbiBXaW5kb3dzIDptZXRoOmBraWxsYCBpcyBhbiBhbGlhcyBmb3IgOm1ldGg6YHRlcm1pbmF0ZWAuCisKKyAgIC4uIG1ldGhvZDo6IHNlbmRfc2lnbmFsKHNpZ25hbCkKKworICAgICAgU2VuZHMgdGhlIHNpZ25hbCAqc2lnbmFsKiB0byB0aGUgY2hpbGQgcHJvY2Vzcy4KKworICAgICAgLi4gbm90ZTo6CisKKyAgICAgICAgIE9uIFdpbmRvd3MsIDpweTpkYXRhOmBTSUdURVJNYCBpcyBhbiBhbGlhcyBmb3IgOm1ldGg6YHRlcm1pbmF0ZWAuCisgICAgICAgICBgYENUUkxfQ19FVkVOVGBgIGFuZCBgYENUUkxfQlJFQUtfRVZFTlRgYCBjYW4gYmUgc2VudCB0byBwcm9jZXNzZXMKKyAgICAgICAgIHN0YXJ0ZWQgd2l0aCBhICpjcmVhdGlvbmZsYWdzKiBwYXJhbWV0ZXIgd2hpY2ggaW5jbHVkZXMKKyAgICAgICAgIGBgQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQYGAuCisKKyAgIC4uIG1ldGhvZDo6IHRlcm1pbmF0ZSgpCisKKyAgICAgIFN0b3AgdGhlIGNoaWxkLiBPbiBQb3NpeCBPU3MgdGhlIG1ldGhvZCBzZW5kcyA6cHk6ZGF0YTpgc2lnbmFsLlNJR1RFUk1gCisgICAgICB0byB0aGUgY2hpbGQuIE9uIFdpbmRvd3MgdGhlIFdpbjMyIEFQSSBmdW5jdGlvbgorICAgICAgOmM6ZnVuYzpgVGVybWluYXRlUHJvY2Vzc2AgaXMgY2FsbGVkIHRvIHN0b3AgdGhlIGNoaWxkLgorCisgICAuLiBtZXRob2Q6OiB3YWl0KHNlbGYpOgorCisgICAgICBXYWl0IGZvciBjaGlsZCBwcm9jZXNzIHRvIHRlcm1pbmF0ZS4gIFNldCBhbmQgcmV0dXJuIDphdHRyOmByZXR1cm5jb2RlYAorICAgICAgYXR0cmlidXRlLgorCisKK0V4YW1wbGUKKy0tLS0tLS0KKworSW1wbGVtZW50IGEgZnVuY3Rpb24gc2ltaWxhciB0byA6ZnVuYzpgc3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXRgLCBleGNlcHQgdGhhdAoraXQgZG9lcyBub3QgdXNlIGEgc2hlbGwuIEdldCB0aGUgb3V0cHV0IG9mIHRoZSAicHl0aG9uIC1tIHBsYXRmb3JtIiBjb21tYW5kIGFuZAorZGlzcGxheSB0aGUgb3V0cHV0OjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgaW1wb3J0IHN5cworICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgc3VicHJvY2VzcworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGdldHN0YXR1c291dHB1dCgqYXJncyk6CisgICAgICAgIHByb2MgPSB5aWVsZCBmcm9tIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3Rkb3V0LCBfID0geWllbGQgZnJvbSBwcm9jLmNvbW11bmljYXRlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcHJvYy5raWxsKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcHJvYy53YWl0KCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4aXRjb2RlID0geWllbGQgZnJvbSBwcm9jLndhaXQoKQorICAgICAgICByZXR1cm4gKGV4aXRjb2RlLCBzdGRvdXQpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgY29ybyA9IGdldHN0YXR1c291dHB1dChzeXMuZXhlY3V0YWJsZSwgJy1tJywgJ3BsYXRmb3JtJykKKyAgICBleGl0Y29kZSwgc3Rkb3V0ID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICBpZiBub3QgZXhpdGNvZGU6CisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5kZWNvZGUoJ2FzY2lpJykucnN0cmlwKCkKKyAgICAgICAgcHJpbnQoIlBsYXRmb3JtOiAlcyIgJSBzdGRvdXQpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIlB5dGhvbiBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXM6IiAlIGV4aXRjb2RlKQorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIuZmx1c2goKQorICAgICAgICBzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShzdGRvdXQpCisgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLmZsdXNoKCkKKyAgICBsb29wLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3luYy5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN5bmMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTQ5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN5bmMucnN0CkBAIC0wLDAgKzEsMzg1IEBACisuLiBjdXJyZW50bW9kdWxlOjogYXN5bmNpbworLi4gX2FzeW5jaW8tc3luYzoKKworU3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0xvY2tzCistLS0tLQorCitMb2NrCiteXl5eCisKKy4uIGNsYXNzOjogTG9jayhcKiwgbG9vcD1Ob25lKQorCisgICBQcmltaXRpdmUgbG9jayBvYmplY3RzLgorCisgICBBIHByaW1pdGl2ZSBsb2NrIGlzIGEgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSB0aGF0IGlzIG5vdCBvd25lZCBieSBhCisgICBwYXJ0aWN1bGFyIGNvcm91dGluZSB3aGVuIGxvY2tlZC4gIEEgcHJpbWl0aXZlIGxvY2sgaXMgaW4gb25lIG9mIHR3byBzdGF0ZXMsCisgICAnbG9ja2VkJyBvciAndW5sb2NrZWQnLgorCisgICBJdCBpcyBjcmVhdGVkIGluIHRoZSB1bmxvY2tlZCBzdGF0ZS4gIEl0IGhhcyB0d28gYmFzaWMgbWV0aG9kcywgOm1ldGg6YGFjcXVpcmVgCisgICBhbmQgOm1ldGg6YHJlbGVhc2VgLiAgV2hlbiB0aGUgc3RhdGUgaXMgdW5sb2NrZWQsIGFjcXVpcmUoKSBjaGFuZ2VzIHRoZSBzdGF0ZSB0bworICAgbG9ja2VkIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgV2hlbiB0aGUgc3RhdGUgaXMgbG9ja2VkLCBhY3F1aXJlKCkgYmxvY2tzCisgICB1bnRpbCBhIGNhbGwgdG8gcmVsZWFzZSgpIGluIGFub3RoZXIgY29yb3V0aW5lIGNoYW5nZXMgaXQgdG8gdW5sb2NrZWQsIHRoZW4KKyAgIHRoZSBhY3F1aXJlKCkgY2FsbCByZXNldHMgaXQgdG8gbG9ja2VkIGFuZCByZXR1cm5zLiAgVGhlIHJlbGVhc2UoKSBtZXRob2QKKyAgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiB0aGUgbG9ja2VkIHN0YXRlOyBpdCBjaGFuZ2VzIHRoZSBzdGF0ZSB0byB1bmxvY2tlZAorICAgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuICBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVsZWFzZSBhbiB1bmxvY2tlZCBsb2NrLAorICAgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorCisgICBXaGVuIG1vcmUgdGhhbiBvbmUgY29yb3V0aW5lIGlzIGJsb2NrZWQgaW4gYWNxdWlyZSgpIHdhaXRpbmcgZm9yIHRoZSBzdGF0ZQorICAgdG8gdHVybiB0byB1bmxvY2tlZCwgb25seSBvbmUgY29yb3V0aW5lIHByb2NlZWRzIHdoZW4gYSByZWxlYXNlKCkgY2FsbAorICAgcmVzZXRzIHRoZSBzdGF0ZSB0byB1bmxvY2tlZDsgZmlyc3QgY29yb3V0aW5lIHdoaWNoIGlzIGJsb2NrZWQgaW4gYWNxdWlyZSgpCisgICBpcyBiZWluZyBwcm9jZXNzZWQuCisKKyAgIDptZXRoOmBhY3F1aXJlYCBpcyBhIGNvcm91dGluZSBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGBgeWllbGQgZnJvbWBgLgorCisgICBMb2NrcyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4gIGBgKHlpZWxkIGZyb20gbG9jaylgYAorICAgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24uCisKKyAgIFVzYWdlOjoKKworICAgICAgIGxvY2sgPSBMb2NrKCkKKyAgICAgICAuLi4KKyAgICAgICB5aWVsZCBmcm9tIGxvY2sKKyAgICAgICB0cnk6CisgICAgICAgICAgIC4uLgorICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgIENvbnRleHQgbWFuYWdlciB1c2FnZTo6CisKKyAgICAgICBsb2NrID0gTG9jaygpCisgICAgICAgLi4uCisgICAgICAgd2l0aCAoeWllbGQgZnJvbSBsb2NrKToKKyAgICAgICAgICAgIC4uLgorCisgICBMb2NrIG9iamVjdHMgY2FuIGJlIHRlc3RlZCBmb3IgbG9ja2luZyBzdGF0ZTo6CisKKyAgICAgICBpZiBub3QgbG9jay5sb2NrZWQoKToKKyAgICAgICAgICB5aWVsZCBmcm9tIGxvY2sKKyAgICAgICBlbHNlOgorICAgICAgICAgICMgbG9jayBpcyBhY3F1aXJlZAorICAgICAgICAgICAuLi4KKworICAgLi4gbWV0aG9kOjogbG9ja2VkKCkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIGxvY2sgaXMgYWNxdWlyZWQuCisKKyAgIC4uIG1ldGhvZDo6IGFjcXVpcmUoKQorCisgICAgICBBY3F1aXJlIGEgbG9jay4KKworICAgICAgVGhpcyBtZXRob2QgYmxvY2tzIHVudGlsIHRoZSBsb2NrIGlzIHVubG9ja2VkLCB0aGVuIHNldHMgaXQgdG8gbG9ja2VkIGFuZAorICAgICAgcmV0dXJucyBgYFRydWVgYC4KKworICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiByZWxlYXNlKCkKKworICAgICAgUmVsZWFzZSBhIGxvY2suCisKKyAgICAgIFdoZW4gdGhlIGxvY2sgaXMgbG9ja2VkLCByZXNldCBpdCB0byB1bmxvY2tlZCwgYW5kIHJldHVybi4gIElmIGFueSBvdGhlcgorICAgICAgY29yb3V0aW5lcyBhcmUgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgbG9jayB0byBiZWNvbWUgdW5sb2NrZWQsIGFsbG93CisgICAgICBleGFjdGx5IG9uZSBvZiB0aGVtIHRvIHByb2NlZWQuCisKKyAgICAgIFdoZW4gaW52b2tlZCBvbiBhbiB1bmxvY2tlZCBsb2NrLCBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisgICAgICBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuCisKKworRXZlbnQKK15eXl5eCisKKy4uIGNsYXNzOjogRXZlbnQoXCosIGxvb3A9Tm9uZSkKKworICAgQW4gRXZlbnQgaW1wbGVtZW50YXRpb24sIGFzeW5jaHJvbm91cyBlcXVpdmFsZW50IHRvIDpjbGFzczpgdGhyZWFkaW5nLkV2ZW50YC4KKworICAgQ2xhc3MgaW1wbGVtZW50aW5nIGV2ZW50IG9iamVjdHMuIEFuIGV2ZW50IG1hbmFnZXMgYSBmbGFnIHRoYXQgY2FuIGJlIHNldCB0bworICAgdHJ1ZSB3aXRoIHRoZSA6bWV0aDpgc2V0YCBtZXRob2QgYW5kIHJlc2V0IHRvIGZhbHNlIHdpdGggdGhlIDptZXRoOmBjbGVhcmAKKyAgIG1ldGhvZC4gIFRoZSA6bWV0aDpgd2FpdGAgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgZmxhZyBpcyB0cnVlLiBUaGUgZmxhZyBpcworICAgaW5pdGlhbGx5IGZhbHNlLgorCisgICAuLiBtZXRob2Q6OiBjbGVhcigpCisKKyAgICAgIFJlc2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIGZhbHNlLiBTdWJzZXF1ZW50bHksIGNvcm91dGluZXMgY2FsbGluZworICAgICAgOm1ldGg6YHdhaXRgIHdpbGwgYmxvY2sgdW50aWwgOm1ldGg6YHNldGAgaXMgY2FsbGVkIHRvIHNldCB0aGUgaW50ZXJuYWwKKyAgICAgIGZsYWcgdG8gdHJ1ZSBhZ2Fpbi4KKworICAgLi4gbWV0aG9kOjogaXNfc2V0KCkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIGFuZCBvbmx5IGlmIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUuCisKKyAgIC4uIG1ldGhvZDo6IHNldCgpCisKKyAgICAgIFNldCB0aGUgaW50ZXJuYWwgZmxhZyB0byB0cnVlLiBBbGwgY29yb3V0aW5lcyB3YWl0aW5nIGZvciBpdCB0byBiZWNvbWUKKyAgICAgIHRydWUgYXJlIGF3YWtlbmVkLiBDb3JvdXRpbmUgdGhhdCBjYWxsIDptZXRoOmB3YWl0YCBvbmNlIHRoZSBmbGFnIGlzIHRydWUKKyAgICAgIHdpbGwgbm90IGJsb2NrIGF0IGFsbC4KKworICAgLi4gbWV0aG9kOjogd2FpdCgpCisKKyAgICAgIEJsb2NrIHVudGlsIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUuCisKKyAgICAgIElmIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUgb24gZW50cnksIHJldHVybiBgYFRydWVgYCBpbW1lZGlhdGVseS4KKyAgICAgIE90aGVyd2lzZSwgYmxvY2sgdW50aWwgYW5vdGhlciBjb3JvdXRpbmUgY2FsbHMgOm1ldGg6YHNldGAgdG8gc2V0IHRoZQorICAgICAgZmxhZyB0byB0cnVlLCB0aGVuIHJldHVybiBgYFRydWVgYC4KKworICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisKK0NvbmRpdGlvbgorXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogQ29uZGl0aW9uKFwqLCBsb29wPU5vbmUpCisKKyAgIEEgQ29uZGl0aW9uIGltcGxlbWVudGF0aW9uLCBhc3luY2hyb25vdXMgZXF1aXZhbGVudCB0bworICAgOmNsYXNzOmB0aHJlYWRpbmcuQ29uZGl0aW9uYC4KKworICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGNvbmRpdGlvbiB2YXJpYWJsZSBvYmplY3RzLiBBIGNvbmRpdGlvbiB2YXJpYWJsZQorICAgYWxsb3dzIG9uZSBvciBtb3JlIGNvcm91dGluZXMgdG8gd2FpdCB1bnRpbCB0aGV5IGFyZSBub3RpZmllZCBieSBhbm90aGVyCisgICBjb3JvdXRpbmUuCisKKyAgIEEgbmV3IDpjbGFzczpgTG9ja2Agb2JqZWN0IGlzIGNyZWF0ZWQgYW5kIHVzZWQgYXMgdGhlIHVuZGVybHlpbmcgbG9jay4KKworICAgLi4gbWV0aG9kOjogbm90aWZ5KG49MSkKKworICAgICAgQnkgZGVmYXVsdCwgd2FrZSB1cCBvbmUgY29yb3V0aW5lIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24sIGlmIGFueS4KKyAgICAgIElmIHRoZSBjYWxsaW5nIGNvcm91dGluZSBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcyBtZXRob2QgaXMKKyAgICAgIGNhbGxlZCwgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4KKworICAgICAgVGhpcyBtZXRob2Qgd2FrZXMgdXAgYXQgbW9zdCAqbiogb2YgdGhlIGNvcm91dGluZXMgd2FpdGluZyBmb3IgdGhlCisgICAgICBjb25kaXRpb24gdmFyaWFibGU7IGl0IGlzIGEgbm8tb3AgaWYgbm8gY29yb3V0aW5lcyBhcmUgd2FpdGluZy4KKworICAgICAgLi4gbm90ZTo6CisKKyAgICAgICAgIEFuIGF3YWtlbmVkIGNvcm91dGluZSBkb2VzIG5vdCBhY3R1YWxseSByZXR1cm4gZnJvbSBpdHMgOm1ldGg6YHdhaXRgCisgICAgICAgICBjYWxsIHVudGlsIGl0IGNhbiByZWFjcXVpcmUgdGhlIGxvY2suIFNpbmNlIDptZXRoOmBub3RpZnlgIGRvZXMgbm90CisgICAgICAgICByZWxlYXNlIHRoZSBsb2NrLCBpdHMgY2FsbGVyIHNob3VsZC4KKworICAgLi4gbWV0aG9kOjogbm90aWZ5X2FsbCgpCisKKyAgICAgIFdha2UgdXAgYWxsIHRocmVhZHMgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbi4gVGhpcyBtZXRob2QgYWN0cyBsaWtlCisgICAgICA6bWV0aDpgbm90aWZ5YCwgYnV0IHdha2VzIHVwIGFsbCB3YWl0aW5nIHRocmVhZHMgaW5zdGVhZCBvZiBvbmUuIElmIHRoZQorICAgICAgY2FsbGluZyB0aHJlYWQgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgYQorICAgICAgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQuCisKKyAgIC4uIG1ldGhvZDo6IHdhaXQoKQorCisgICAgICBXYWl0IHVudGlsIG5vdGlmaWVkLgorCisgICAgICBJZiB0aGUgY2FsbGluZyBjb3JvdXRpbmUgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kIGlzCisgICAgICBjYWxsZWQsIGEgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQuCisKKyAgICAgIFRoaXMgbWV0aG9kIHJlbGVhc2VzIHRoZSB1bmRlcmx5aW5nIGxvY2ssIGFuZCB0aGVuIGJsb2NrcyB1bnRpbCBpdCBpcworICAgICAgYXdha2VuZWQgYnkgYSA6bWV0aDpgbm90aWZ5YCBvciA6bWV0aDpgbm90aWZ5X2FsbGAgY2FsbCBmb3IgdGhlIHNhbWUKKyAgICAgIGNvbmRpdGlvbiB2YXJpYWJsZSBpbiBhbm90aGVyIGNvcm91dGluZS4gIE9uY2UgYXdha2VuZWQsIGl0IHJlLWFjcXVpcmVzCisgICAgICB0aGUgbG9jayBhbmQgcmV0dXJucyBgYFRydWVgYC4KKworICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiB3YWl0X2ZvcihwcmVkaWNhdGUpCisKKyAgICAgIFdhaXQgdW50aWwgYSBwcmVkaWNhdGUgYmVjb21lcyB0cnVlLgorCisgICAgICBUaGUgcHJlZGljYXRlIHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIHJlc3VsdCB3aWxsIGJlIGludGVycHJldGVkIGFzIGEKKyAgICAgIGJvb2xlYW4gdmFsdWUuIFRoZSBmaW5hbCBwcmVkaWNhdGUgdmFsdWUgaXMgdGhlIHJldHVybiB2YWx1ZS4KKworICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisKK1NlbWFwaG9yZXMKKy0tLS0tLS0tLS0KKworU2VtYXBob3JlCiteXl5eXl5eXl4KKworLi4gY2xhc3M6OiBTZW1hcGhvcmUodmFsdWU9MSwgXCosIGxvb3A9Tm9uZSkKKworICAgQSBTZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uCisKKyAgIEEgc2VtYXBob3JlIG1hbmFnZXMgYW4gaW50ZXJuYWwgY291bnRlciB3aGljaCBpcyBkZWNyZW1lbnRlZCBieSBlYWNoCisgICA6bWV0aDpgYWNxdWlyZWAgY2FsbCBhbmQgaW5jcmVtZW50ZWQgYnkgZWFjaCA6bWV0aDpgcmVsZWFzZWAgY2FsbC4gVGhlCisgICBjb3VudGVyIGNhbiBuZXZlciBnbyBiZWxvdyB6ZXJvOyB3aGVuIDptZXRoOmBhY3F1aXJlYCBmaW5kcyB0aGF0IGl0IGlzIHplcm8sCisgICBpdCBibG9ja3MsIHdhaXRpbmcgdW50aWwgc29tZSBvdGhlciB0aHJlYWQgY2FsbHMgOm1ldGg6YHJlbGVhc2VgLgorCisgICBTZW1hcGhvcmVzIGFsc28gc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLgorCisgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgZ2l2ZXMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBpbnRlcm5hbCBjb3VudGVyOyBpdAorICAgZGVmYXVsdHMgdG8gYGAxYGAuIElmIHRoZSB2YWx1ZSBnaXZlbiBpcyBsZXNzIHRoYW4gYGAwYGAsIDpleGM6YFZhbHVlRXJyb3JgCisgICBpcyByYWlzZWQuCisKKyAgIC4uIG1ldGhvZDo6IGFjcXVpcmUoKQorCisgICAgICBBY3F1aXJlIGEgc2VtYXBob3JlLgorCisgICAgICBJZiB0aGUgaW50ZXJuYWwgY291bnRlciBpcyBsYXJnZXIgdGhhbiB6ZXJvIG9uIGVudHJ5LCBkZWNyZW1lbnQgaXQgYnkgb25lCisgICAgICBhbmQgcmV0dXJuIGBgVHJ1ZWBgIGltbWVkaWF0ZWx5LiAgSWYgaXQgaXMgemVybyBvbiBlbnRyeSwgYmxvY2ssIHdhaXRpbmcKKyAgICAgIHVudGlsIHNvbWUgb3RoZXIgY29yb3V0aW5lIGhhcyBjYWxsZWQgOm1ldGg6YHJlbGVhc2VgIHRvIG1ha2UgaXQgbGFyZ2VyCisgICAgICB0aGFuIGBgMGBgLCBhbmQgdGhlbiByZXR1cm4gYGBUcnVlYGAuCisKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogbG9ja2VkKCkKKworICAgICAgUmV0dXJucyBgYFRydWVgYCBpZiBzZW1hcGhvcmUgY2FuIG5vdCBiZSBhY3F1aXJlZCBpbW1lZGlhdGVseS4KKworICAgLi4gbWV0aG9kOjogcmVsZWFzZSgpCisKKyAgICAgIFJlbGVhc2UgYSBzZW1hcGhvcmUsIGluY3JlbWVudGluZyB0aGUgaW50ZXJuYWwgY291bnRlciBieSBvbmUuIFdoZW4gaXQKKyAgICAgIHdhcyB6ZXJvIG9uIGVudHJ5IGFuZCBhbm90aGVyIGNvcm91dGluZSBpcyB3YWl0aW5nIGZvciBpdCB0byBiZWNvbWUKKyAgICAgIGxhcmdlciB0aGFuIHplcm8gYWdhaW4sIHdha2UgdXAgdGhhdCBjb3JvdXRpbmUuCisKKworQm91bmRlZFNlbWFwaG9yZQorXl5eXl5eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IEJvdW5kZWRTZW1hcGhvcmUodmFsdWU9MSwgXCosIGxvb3A9Tm9uZSkKKworICAgIEEgYm91bmRlZCBzZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uIEluaGVyaXQgZnJvbSA6Y2xhc3M6YFNlbWFwaG9yZWAuCisKKyAgICBUaGlzIHJhaXNlcyA6ZXhjOmBWYWx1ZUVycm9yYCBpbiA6bWV0aDpgflNlbWFwaG9yZS5yZWxlYXNlYCBpZiBpdCB3b3VsZAorICAgIGluY3JlYXNlIHRoZSB2YWx1ZSBhYm92ZSB0aGUgaW5pdGlhbCB2YWx1ZS4KKworCitRdWV1ZXMKKy0tLS0tLQorCitRdWV1ZQorXl5eXl4KKworLi4gY2xhc3M6OiBRdWV1ZShtYXhzaXplPTAsIFwqLCBsb29wPU5vbmUpCisKKyAgIEEgcXVldWUsIHVzZWZ1bCBmb3IgY29vcmRpbmF0aW5nIHByb2R1Y2VyIGFuZCBjb25zdW1lciBjb3JvdXRpbmVzLgorCisgICBJZiAqbWF4c2l6ZSogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIHRoZSBxdWV1ZSBzaXplIGlzIGluZmluaXRlLiBJZgorICAgaXQgaXMgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gYGAwYGAsIHRoZW4gYGB5aWVsZCBmcm9tIHB1dCgpYGAgd2lsbCBibG9jaworICAgd2hlbiB0aGUgcXVldWUgcmVhY2hlcyAqbWF4c2l6ZSosIHVudGlsIGFuIGl0ZW0gaXMgcmVtb3ZlZCBieSA6bWV0aDpgZ2V0YC4KKworICAgVW5saWtlIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IDptb2Q6YHF1ZXVlYCwgeW91IGNhbiByZWxpYWJseSBrbm93IHRoaXMgUXVldWUncworICAgc2l6ZSB3aXRoIDptZXRoOmBxc2l6ZWAsIHNpbmNlIHlvdXIgc2luZ2xlLXRocmVhZGVkIGFzeW5jaW8gYXBwbGljYXRpb24gd29uJ3QKKyAgIGJlIGludGVycnVwdGVkIGJldHdlZW4gY2FsbGluZyA6bWV0aDpgcXNpemVgIGFuZCBkb2luZyBhbiBvcGVyYXRpb24gb24gdGhlCisgICBRdWV1ZS4KKworICAgLi4gbWV0aG9kOjogZW1wdHkoKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LCBgYEZhbHNlYGAgb3RoZXJ3aXNlLgorCisgICAuLiBtZXRob2Q6OiBmdWxsKCkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZXJlIGFyZSBtYXhzaXplIGl0ZW1zIGluIHRoZSBxdWV1ZS4KKworICAgICAgLi4gbm90ZTo6CisKKyAgICAgICAgIElmIHRoZSBRdWV1ZSB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBgYG1heHNpemU9MGBgICh0aGUgZGVmYXVsdCksIHRoZW4KKyAgICAgICAgIDptZXRoOmBmdWxsKClgIGlzIG5ldmVyIGBgVHJ1ZWBgLgorCisgICAuLiBtZXRob2Q6OiBnZXQoKQorCisgICAgICBSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLgorCisgICAgICBJZiB5b3UgeWllbGQgZnJvbSA6bWV0aDpgZ2V0KClgLCB3YWl0IHVudGlsIGEgaXRlbSBpcyBhdmFpbGFibGUuCisKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogZ2V0X25vd2FpdCgpCisKKyAgICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUuCisKKyAgICAgIFJldHVybiBhbiBpdGVtIGlmIG9uZSBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIGVsc2UgcmFpc2UKKyAgICAgIDpleGM6YFF1ZXVlRW1wdHlgLgorCisgICAuLiBtZXRob2Q6OiBwdXQoaXRlbSkKKworICAgICAgUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUuCisKKyAgICAgIElmIHlvdSB5aWVsZCBmcm9tIGBgcHV0KClgYCwgd2FpdCB1bnRpbCBhIGZyZWUgc2xvdCBpcyBhdmFpbGFibGUgYmVmb3JlCisgICAgICBhZGRpbmcgaXRlbS4KKworICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiBwdXRfbm93YWl0KGl0ZW0pCisKKyAgICAgIFB1dCBhbiBpdGVtIGludG8gdGhlIHF1ZXVlIHdpdGhvdXQgYmxvY2tpbmcuCisKKyAgICAgIElmIG5vIGZyZWUgc2xvdCBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIHJhaXNlIDpleGM6YFF1ZXVlRnVsbGAuCisKKyAgIC4uIG1ldGhvZDo6IHFzaXplKCkKKworICAgICAgTnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBxdWV1ZS4KKworICAgLi4gYXR0cmlidXRlOjogbWF4c2l6ZQorCisgICAgICBOdW1iZXIgb2YgaXRlbXMgYWxsb3dlZCBpbiB0aGUgcXVldWUuCisKKworUHJpb3JpdHlRdWV1ZQorXl5eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IFByaW9yaXR5UXVldWUKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFF1ZXVlYDsgcmV0cmlldmVzIGVudHJpZXMgaW4gcHJpb3JpdHkgb3JkZXIgKGxvd2VzdAorICAgZmlyc3QpLgorCisgICBFbnRyaWVzIGFyZSB0eXBpY2FsbHkgdHVwbGVzIG9mIHRoZSBmb3JtOiAocHJpb3JpdHkgbnVtYmVyLCBkYXRhKS4KKworCitMaWZvUXVldWUKK15eXl5eXl5eXgorCisuLiBjbGFzczo6IExpZm9RdWV1ZQorCisgICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFF1ZXVlYCB0aGF0IHJldHJpZXZlcyBtb3N0IHJlY2VudGx5IGFkZGVkIGVudHJpZXMKKyAgICBmaXJzdC4KKworCitKb2luYWJsZVF1ZXVlCiteXl5eXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogSm9pbmFibGVRdWV1ZQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUXVldWVgIHdpdGggOm1ldGg6YHRhc2tfZG9uZWAgYW5kIDptZXRoOmBqb2luYAorICAgbWV0aG9kcy4KKworICAgLi4gbWV0aG9kOjogam9pbigpCisKKyAgICAgIEJsb2NrIHVudGlsIGFsbCBpdGVtcyBpbiB0aGUgcXVldWUgaGF2ZSBiZWVuIGdvdHRlbiBhbmQgcHJvY2Vzc2VkLgorCisgICAgICBUaGUgY291bnQgb2YgdW5maW5pc2hlZCB0YXNrcyBnb2VzIHVwIHdoZW5ldmVyIGFuIGl0ZW0gaXMgYWRkZWQgdG8gdGhlCisgICAgICBxdWV1ZS4gVGhlIGNvdW50IGdvZXMgZG93biB3aGVuZXZlciBhIGNvbnN1bWVyIHRocmVhZCBjYWxscworICAgICAgOm1ldGg6YHRhc2tfZG9uZWAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaXRlbSB3YXMgcmV0cmlldmVkIGFuZCBhbGwgd29yayBvbgorICAgICAgaXQgaXMgY29tcGxldGUuICBXaGVuIHRoZSBjb3VudCBvZiB1bmZpbmlzaGVkIHRhc2tzIGRyb3BzIHRvIHplcm8sCisgICAgICA6bWV0aDpgam9pbmAgdW5ibG9ja3MuCisKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogdGFza19kb25lKCkKKworICAgICAgSW5kaWNhdGUgdGhhdCBhIGZvcm1lcmx5IGVucXVldWVkIHRhc2sgaXMgY29tcGxldGUuCisKKyAgICAgIFVzZWQgYnkgcXVldWUgY29uc3VtZXJzLiBGb3IgZWFjaCA6bWV0aDpgflF1ZXVlLmdldGAgdXNlZCB0byBmZXRjaCBhIHRhc2ssIGEKKyAgICAgIHN1YnNlcXVlbnQgY2FsbCB0byA6bWV0aDpgdGFza19kb25lYCB0ZWxscyB0aGUgcXVldWUgdGhhdCB0aGUgcHJvY2Vzc2luZworICAgICAgb24gdGhlIHRhc2sgaXMgY29tcGxldGUuCisKKyAgICAgIElmIGEgOm1ldGg6YGpvaW5gIGlzIGN1cnJlbnRseSBibG9ja2luZywgaXQgd2lsbCByZXN1bWUgd2hlbiBhbGwgaXRlbXMKKyAgICAgIGhhdmUgYmVlbiBwcm9jZXNzZWQgKG1lYW5pbmcgdGhhdCBhIDptZXRoOmB0YXNrX2RvbmVgIGNhbGwgd2FzIHJlY2VpdmVkCisgICAgICBmb3IgZXZlcnkgaXRlbSB0aGF0IGhhZCBiZWVuIDptZXRoOmB+UXVldWUucHV0YCBpbnRvIHRoZSBxdWV1ZSkuCisKKyAgICAgIFJhaXNlcyA6ZXhjOmBWYWx1ZUVycm9yYCBpZiBjYWxsZWQgbW9yZSB0aW1lcyB0aGFuIHRoZXJlIHdlcmUgaXRlbXMKKyAgICAgIHBsYWNlZCBpbiB0aGUgcXVldWUuCisKKworRXhjZXB0aW9ucworXl5eXl5eXl5eXgorCisuLiBleGNlcHRpb246OiBRdWV1ZUVtcHR5CisKKyAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBub24tYmxvY2tpbmcgOm1ldGg6YH5RdWV1ZS5nZXRgIChvcgorICAgOm1ldGg6YH5RdWV1ZS5nZXRfbm93YWl0YCkgaXMgY2FsbGVkCisgICBvbiBhIDpjbGFzczpgUXVldWVgIG9iamVjdCB3aGljaCBpcyBlbXB0eS4KKworCisuLiBleGNlcHRpb246OiBRdWV1ZUZ1bGwKKworICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIG5vbi1ibG9ja2luZyA6bWV0aDpgflF1ZXVlLnB1dGAgKG9yCisgICA6bWV0aDpgflF1ZXVlLnB1dF9ub3dhaXRgKSBpcyBjYWxsZWQKKyAgIG9uIGEgOmNsYXNzOmBRdWV1ZWAgb2JqZWN0IHdoaWNoIGlzIGZ1bGwuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLXRhc2sucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby10YXNrLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Q5NzQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby10YXNrLnJzdApAQCAtMCwwICsxLDUzMiBAQAorLi4gY3VycmVudG1vZHVsZTo6IGFzeW5jaW8KKworVGFza3MgYW5kIGNvcm91dGluZXMKKz09PT09PT09PT09PT09PT09PT09CisKKy4uIF9jb3JvdXRpbmU6CisKK0Nvcm91dGluZXMKKy0tLS0tLS0tLS0KKworQSBjb3JvdXRpbmUgaXMgYSBnZW5lcmF0b3IgdGhhdCBmb2xsb3dzIGNlcnRhaW4gY29udmVudGlvbnMuICBGb3IKK2RvY3VtZW50YXRpb24gcHVycG9zZXMsIGFsbCBjb3JvdXRpbmVzIHNob3VsZCBiZSBkZWNvcmF0ZWQgd2l0aAorYGBAYXN5bmNpby5jb3JvdXRpbmVgYCwgYnV0IHRoaXMgY2Fubm90IGJlIHN0cmljdGx5IGVuZm9yY2VkLgorCitDb3JvdXRpbmVzIHVzZSB0aGUgYGB5aWVsZCBmcm9tYGAgc3ludGF4IGludHJvZHVjZWQgaW4gOnBlcDpgMzgwYCwKK2luc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGBgeWllbGRgYCBzeW50YXguCisKK1RoZSB3b3JkICJjb3JvdXRpbmUiLCBsaWtlIHRoZSB3b3JkICJnZW5lcmF0b3IiLCBpcyB1c2VkIGZvciB0d28KK2RpZmZlcmVudCAodGhvdWdoIHJlbGF0ZWQpIGNvbmNlcHRzOgorCistIFRoZSBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBjb3JvdXRpbmUgKGEgZnVuY3Rpb24gZGVmaW5pdGlvbgorICBkZWNvcmF0ZWQgd2l0aCBgYEBhc3luY2lvLmNvcm91dGluZWBgKS4gIElmIGRpc2FtYmlndWF0aW9uIGlzIG5lZWRlZAorICB3ZSB3aWxsIGNhbGwgdGhpcyBhICpjb3JvdXRpbmUgZnVuY3Rpb24qICg6ZnVuYzpgaXNjb3JvdXRpbmVmdW5jdGlvbmAKKyAgcmV0dXJucyBgYFRydWVgYCkuCisKKy0gVGhlIG9iamVjdCBvYnRhaW5lZCBieSBjYWxsaW5nIGEgY29yb3V0aW5lIGZ1bmN0aW9uLiAgVGhpcyBvYmplY3QKKyAgcmVwcmVzZW50cyBhIGNvbXB1dGF0aW9uIG9yIGFuIEkvTyBvcGVyYXRpb24gKHVzdWFsbHkgYSBjb21iaW5hdGlvbikKKyAgdGhhdCB3aWxsIGNvbXBsZXRlIGV2ZW50dWFsbHkuICBJZiBkaXNhbWJpZ3VhdGlvbiBpcyBuZWVkZWQgd2Ugd2lsbAorICBjYWxsIGl0IGEgKmNvcm91dGluZSBvYmplY3QqICg6ZnVuYzpgaXNjb3JvdXRpbmVgIHJldHVybnMgYGBUcnVlYGApLgorCitUaGluZ3MgYSBjb3JvdXRpbmUgY2FuIGRvOgorCistIGBgcmVzdWx0ID0geWllbGQgZnJvbSBmdXR1cmVgYCAtLSBzdXNwZW5kcyB0aGUgY29yb3V0aW5lIHVudGlsIHRoZQorICBmdXR1cmUgaXMgZG9uZSwgdGhlbiByZXR1cm5zIHRoZSBmdXR1cmUncyByZXN1bHQsIG9yIHJhaXNlcyBhbgorICBleGNlcHRpb24sIHdoaWNoIHdpbGwgYmUgcHJvcGFnYXRlZC4gIChJZiB0aGUgZnV0dXJlIGlzIGNhbmNlbGxlZCwKKyAgaXQgd2lsbCByYWlzZSBhIGBgQ2FuY2VsbGVkRXJyb3JgYCBleGNlcHRpb24uKSAgTm90ZSB0aGF0IHRhc2tzIGFyZQorICBmdXR1cmVzLCBhbmQgZXZlcnl0aGluZyBzYWlkIGFib3V0IGZ1dHVyZXMgYWxzbyBhcHBsaWVzIHRvIHRhc2tzLgorCistIGBgcmVzdWx0ID0geWllbGQgZnJvbSBjb3JvdXRpbmVgYCAtLSB3YWl0IGZvciBhbm90aGVyIGNvcm91dGluZSB0bworICBwcm9kdWNlIGEgcmVzdWx0IChvciByYWlzZSBhbiBleGNlcHRpb24sIHdoaWNoIHdpbGwgYmUgcHJvcGFnYXRlZCkuCisgIFRoZSBgYGNvcm91dGluZWBgIGV4cHJlc3Npb24gbXVzdCBiZSBhICpjYWxsKiB0byBhbm90aGVyIGNvcm91dGluZS4KKworLSBgYHJldHVybiBleHByZXNzaW9uYGAgLS0gcHJvZHVjZSBhIHJlc3VsdCB0byB0aGUgY29yb3V0aW5lIHRoYXQgaXMKKyAgd2FpdGluZyBmb3IgdGhpcyBvbmUgdXNpbmcgYGB5aWVsZCBmcm9tYGAuCisKKy0gYGByYWlzZSBleGNlcHRpb25gYCAtLSByYWlzZSBhbiBleGNlcHRpb24gaW4gdGhlIGNvcm91dGluZSB0aGF0IGlzCisgIHdhaXRpbmcgZm9yIHRoaXMgb25lIHVzaW5nIGBgeWllbGQgZnJvbWBgLgorCitDYWxsaW5nIGEgY29yb3V0aW5lIGRvZXMgbm90IHN0YXJ0IGl0cyBjb2RlIHJ1bm5pbmcgLS0gaXQgaXMganVzdCBhCitnZW5lcmF0b3IsIGFuZCB0aGUgY29yb3V0aW5lIG9iamVjdCByZXR1cm5lZCBieSB0aGUgY2FsbCBpcyByZWFsbHkgYQorZ2VuZXJhdG9yIG9iamVjdCwgd2hpY2ggZG9lc24ndCBkbyBhbnl0aGluZyB1bnRpbCB5b3UgaXRlcmF0ZSBvdmVyIGl0LgorSW4gdGhlIGNhc2Ugb2YgYSBjb3JvdXRpbmUgb2JqZWN0LCB0aGVyZSBhcmUgdHdvIGJhc2ljIHdheXMgdG8gc3RhcnQKK2l0IHJ1bm5pbmc6IGNhbGwgYGB5aWVsZCBmcm9tIGNvcm91dGluZWBgIGZyb20gYW5vdGhlciBjb3JvdXRpbmUKKyhhc3N1bWluZyB0aGUgb3RoZXIgY29yb3V0aW5lIGlzIGFscmVhZHkgcnVubmluZyEpLCBvciBjb252ZXJ0IGl0IHRvIGEKKzpjbGFzczpgVGFza2AuCisKK0Nvcm91dGluZXMgKGFuZCB0YXNrcykgY2FuIG9ubHkgcnVuIHdoZW4gdGhlIGV2ZW50IGxvb3AgaXMgcnVubmluZy4KKworLi4gZGVjb3JhdG9yOjogY29yb3V0aW5lCisKKyAgICBEZWNvcmF0b3IgdG8gbWFyayBjb3JvdXRpbmVzLgorCisgICAgSWYgdGhlIGNvcm91dGluZSBpcyBub3QgeWllbGRlZCBmcm9tIGJlZm9yZSBpdCBpcyBkZXN0cm95ZWQsIGFuIGVycm9yCisgICAgbWVzc2FnZSBpcyBsb2dnZWQuIFNlZSA6cmVmOmBEZXRlY3QgY29yb3V0aW5lcyBuZXZlciBzY2hlZHVsZWQKKyAgICA8YXN5bmNpby1jb3JvdXRpbmUtbm90LXNjaGVkdWxlZD5gLgorCisKKy4uIF9hc3luY2lvLWhlbGxvLXdvcmxkLWNvcm91dGluZToKKworRXhhbXBsZTogIkhlbGxvIFdvcmxkIiBjb3JvdXRpbmUKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1ByaW50IGBgIkhlbGxvIFdvcmxkImBgIGV2ZXJ5IHR3byBzZWNvbmRzIHVzaW5nIGEgY29yb3V0aW5lOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgZ3JlZXRfZXZlcnlfdHdvX3NlY29uZHMoKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHByaW50KCdIZWxsbyBXb3JsZCcpCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMikKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShncmVldF9ldmVyeV90d29fc2Vjb25kcygpKQorCisuLiBzZWVhbHNvOjoKKworICAgOnJlZjpgSGVsbG8gV29ybGQgZXhhbXBsZSB1c2luZyBhIGNhbGxiYWNrIDxhc3luY2lvLWhlbGxvLXdvcmxkLWNhbGxiYWNrPmAuCisKKworRXhhbXBsZTogQ2hhaW4gY29yb3V0aW5lcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitFeGFtcGxlIGNoYWluaW5nIGNvcm91dGluZXM6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBjb21wdXRlKHgsIHkpOgorICAgICAgICBwcmludCgiQ29tcHV0ZSAlcyArICVzIC4uLiIgJSAoeCwgeSkpCisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxLjApCisgICAgICAgIHJldHVybiB4ICsgeQorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHByaW50X3N1bSh4LCB5KToKKyAgICAgICAgcmVzdWx0ID0geWllbGQgZnJvbSBjb21wdXRlKHgsIHkpCisgICAgICAgIHByaW50KCIlcyArICVzID0gJXMiICUgKHgsIHksIHJlc3VsdCkpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJpbnRfc3VtKDEsIDIpKQorICAgIGxvb3AuY2xvc2UoKQorCitgYGNvbXB1dGUoKWBgIGlzIGNoYWluZWQgdG8gYGBwcmludF9zdW0oKWBgOiBgYHByaW50X3N1bSgpYGAgY29yb3V0aW5lIHdhaXRzCit1bnRpbCBgYGNvbXB1dGUoKWBgIGlzIGNvbXBsZXRlZCBiZWZvcmUgcmV0dXJuaW5nIGl0cyByZXN1bHQuCisKK1NlcXVlbmNlIGRpYWdyYW0gb2YgdGhlIGV4YW1wbGU6CisKKy4uIGltYWdlOjogdHVsaXBfY29yby5wbmcKKyAgIDphbGlnbjogY2VudGVyCisKK1RoZSAiVGFzayIgaXMgY3JlYXRlZCBieSB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlYCBtZXRob2QKK3doZW4gaXQgZ2V0cyBhIGNvcm91dGluZSBvYmplY3QgaW5zdGVhZCBvZiBhIHRhc2suCisKK1RoZSBkaWFncmFtIHNob3dzIHRoZSBjb250cm9sIGZsb3csIGl0IGRvZXMgbm90IGRlc2NyaWJlIGV4YWN0bHkgaG93IHRoaW5ncword29yayBpbnRlcm5hbGx5LiBGb3IgZXhhbXBsZSwgdGhlIHNsZWVwIGNvcm91dGluZSBjcmVhdGVzIGFuIGludGVybmFsIGZ1dHVyZQord2hpY2ggdXNlcyA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jYWxsX2xhdGVyYCB0byB3YWtlIHVwIHRoZSB0YXNrIGluIDEgc2Vjb25kLgorCisKK0ludmFsaWRTdGF0ZUVycm9yCistLS0tLS0tLS0tLS0tLS0tLQorCisuLiBleGNlcHRpb246OiBJbnZhbGlkU3RhdGVFcnJvcgorCisgICBUaGUgb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgc3RhdGUuCisKKworRnV0dXJlCistLS0tLS0KKworLi4gY2xhc3M6OiBGdXR1cmUoXCosIGxvb3A9Tm9uZSkKKworICAgVGhpcyBjbGFzcyBpcyAqYWxtb3N0KiBjb21wYXRpYmxlIHdpdGggOmNsYXNzOmBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlYC4KKworICAgRGlmZmVyZW5jZXM6CisKKyAgIC0gOm1ldGg6YHJlc3VsdGAgYW5kIDptZXRoOmBleGNlcHRpb25gIGRvIG5vdCB0YWtlIGEgdGltZW91dCBhcmd1bWVudCBhbmQKKyAgICAgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIGZ1dHVyZSBpc24ndCBkb25lIHlldC4KKworICAgLSBDYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIDptZXRoOmBhZGRfZG9uZV9jYWxsYmFja2AgYXJlIGFsd2F5cyBjYWxsZWQKKyAgICAgdmlhIHRoZSBldmVudCBsb29wJ3MgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNhbGxfc29vbl90aHJlYWRzYWZlYC4KKworICAgLSBUaGlzIGNsYXNzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIDpmdW5jOmB+Y29uY3VycmVudC5mdXR1cmVzLndhaXRgIGFuZAorICAgICA6ZnVuYzpgfmNvbmN1cnJlbnQuZnV0dXJlcy5hc19jb21wbGV0ZWRgIGZ1bmN0aW9ucyBpbiB0aGUKKyAgICAgOm1vZDpgY29uY3VycmVudC5mdXR1cmVzYCBwYWNrYWdlLgorCisgICAuLiBtZXRob2Q6OiBjYW5jZWwoKQorCisgICAgICBDYW5jZWwgdGhlIGZ1dHVyZSBhbmQgc2NoZWR1bGUgY2FsbGJhY2tzLgorCisgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSBvciBjYW5jZWxsZWQsIHJldHVybiBgYEZhbHNlYGAuIE90aGVyd2lzZSwKKyAgICAgIGNoYW5nZSB0aGUgZnV0dXJlJ3Mgc3RhdGUgdG8gY2FuY2VsbGVkLCBzY2hlZHVsZSB0aGUgY2FsbGJhY2tzIGFuZCByZXR1cm4KKyAgICAgIGBgVHJ1ZWBgLgorCisgICAuLiBtZXRob2Q6OiBjYW5jZWxsZWQoKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIGZ1dHVyZSB3YXMgY2FuY2VsbGVkLgorCisgICAuLiBtZXRob2Q6OiBkb25lKCkKKworICAgICAgUmV0dXJuIFRydWUgaWYgdGhlIGZ1dHVyZSBpcyBkb25lLgorCisgICAgICBEb25lIG1lYW5zIGVpdGhlciB0aGF0IGEgcmVzdWx0IC8gZXhjZXB0aW9uIGFyZSBhdmFpbGFibGUsIG9yIHRoYXQgdGhlCisgICAgICBmdXR1cmUgd2FzIGNhbmNlbGxlZC4KKworICAgLi4gbWV0aG9kOjogcmVzdWx0KCkKKworICAgICAgUmV0dXJuIHRoZSByZXN1bHQgdGhpcyBmdXR1cmUgcmVwcmVzZW50cy4KKworICAgICAgSWYgdGhlIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJhaXNlcyA6ZXhjOmBDYW5jZWxsZWRFcnJvcmAuIElmIHRoZQorICAgICAgZnV0dXJlJ3MgcmVzdWx0IGlzbid0IHlldCBhdmFpbGFibGUsIHJhaXNlcyA6ZXhjOmBJbnZhbGlkU3RhdGVFcnJvcmAuIElmCisgICAgICB0aGUgZnV0dXJlIGlzIGRvbmUgYW5kIGhhcyBhbiBleGNlcHRpb24gc2V0LCB0aGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKyAgIC4uIG1ldGhvZDo6IGV4Y2VwdGlvbigpCisKKyAgICAgIFJldHVybiB0aGUgZXhjZXB0aW9uIHRoYXQgd2FzIHNldCBvbiB0aGlzIGZ1dHVyZS4KKworICAgICAgVGhlIGV4Y2VwdGlvbiAob3IgYGBOb25lYGAgaWYgbm8gZXhjZXB0aW9uIHdhcyBzZXQpIGlzIHJldHVybmVkIG9ubHkgaWYKKyAgICAgIHRoZSBmdXR1cmUgaXMgZG9uZS4gSWYgdGhlIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJhaXNlcworICAgICAgOmV4YzpgQ2FuY2VsbGVkRXJyb3JgLiBJZiB0aGUgZnV0dXJlIGlzbid0IGRvbmUgeWV0LCByYWlzZXMKKyAgICAgIDpleGM6YEludmFsaWRTdGF0ZUVycm9yYC4KKworICAgLi4gbWV0aG9kOjogYWRkX2RvbmVfY2FsbGJhY2soZm4pCisKKyAgICAgIEFkZCBhIGNhbGxiYWNrIHRvIGJlIHJ1biB3aGVuIHRoZSBmdXR1cmUgYmVjb21lcyBkb25lLgorCisgICAgICBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgLSB0aGUgZnV0dXJlIG9iamVjdC4gSWYgdGhlCisgICAgICBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBpcyBjYWxsZWQsIHRoZSBjYWxsYmFjayBpcyBzY2hlZHVsZWQKKyAgICAgIHdpdGggOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNhbGxfc29vbmAuCisKKyAgIC4uIG1ldGhvZDo6IHJlbW92ZV9kb25lX2NhbGxiYWNrKGZuKQorCisgICAgICBSZW1vdmUgYWxsIGluc3RhbmNlcyBvZiBhIGNhbGxiYWNrIGZyb20gdGhlICJjYWxsIHdoZW4gZG9uZSIgbGlzdC4KKworICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNhbGxiYWNrcyByZW1vdmVkLgorCisgICAuLiBtZXRob2Q6OiBzZXRfcmVzdWx0KHJlc3VsdCkKKworICAgICAgTWFyayB0aGUgZnV0dXJlIGRvbmUgYW5kIHNldCBpdHMgcmVzdWx0LgorCisgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgcmFpc2VzCisgICAgICA6ZXhjOmBJbnZhbGlkU3RhdGVFcnJvcmAuCisKKyAgIC4uIG1ldGhvZDo6IHNldF9leGNlcHRpb24oZXhjZXB0aW9uKQorCisgICAgICBNYXJrIHRoZSBmdXR1cmUgZG9uZSBhbmQgc2V0IGFuIGV4Y2VwdGlvbi4KKworICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHJhaXNlcworICAgICAgOmV4YzpgSW52YWxpZFN0YXRlRXJyb3JgLgorCisKK0V4YW1wbGU6IEZ1dHVyZSB3aXRoIHJ1bl91bnRpbF9jb21wbGV0ZSgpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitFeGFtcGxlIGNvbWJpbmluZyBhIDpjbGFzczpgRnV0dXJlYCBhbmQgYSA6cmVmOmBjb3JvdXRpbmUgZnVuY3Rpb24KKzxjb3JvdXRpbmU+YDo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHNsb3dfb3BlcmF0aW9uKGZ1dHVyZSk6CisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxKQorICAgICAgICBmdXR1cmUuc2V0X3Jlc3VsdCgnRnV0dXJlIGluIGRvbmUhJykKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBmdXR1cmUgPSBhc3luY2lvLkZ1dHVyZSgpCisgICAgYXN5bmNpby5UYXNrKHNsb3dfb3BlcmF0aW9uKGZ1dHVyZSkpCisgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0dXJlKQorICAgIHByaW50KGZ1dHVyZS5yZXN1bHQoKSkKKyAgICBsb29wLmNsb3NlKCkKKworVGhlIGNvcm91dGluZSBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBvZiB0aGUgY29tcHV0YXRpb24gKHdoaWNoIHRha2VzIDEgc2Vjb25kKQorYW5kIGl0IHN0b3JlcyB0aGUgcmVzdWx0IGludG8gdGhlIGZ1dHVyZS4gVGhlCis6bWV0aDpgfkJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlYCBtZXRob2Qgd2FpdHMgZm9yIHRoZSBjb21wbGV0aW9uIG9mCit0aGUgZnV0dXJlLgorCisuLiBub3RlOjoKKyAgIFRoZSA6bWV0aDpgfkJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlYCBtZXRob2QgdXNlcyBpbnRlcm5hbGx5IHRoZQorICAgOm1ldGg6YH5GdXR1cmUuYWRkX2RvbmVfY2FsbGJhY2tgIG1ldGhvZCB0byBiZSBub3RpZmllZCB3aGVuIHRoZSBmdXR1cmUgaXMKKyAgIGRvbmUuCisKKworRXhhbXBsZTogRnV0dXJlIHdpdGggcnVuX2ZvcmV2ZXIoKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgcHJldmlvdXMgZXhhbXBsZSBjYW4gYmUgd3JpdHRlbiBkaWZmZXJlbnRseSB1c2luZyB0aGUKKzptZXRoOmBGdXR1cmUuYWRkX2RvbmVfY2FsbGJhY2tgIG1ldGhvZCB0byBkZXNjcmliZSBleHBsaWNpdGx5IHRoZSBjb250cm9sCitmbG93OjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgc2xvd19vcGVyYXRpb24oZnV0dXJlKToKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEpCisgICAgICAgIGZ1dHVyZS5zZXRfcmVzdWx0KCdGdXR1cmUgaW4gZG9uZSEnKQorCisgICAgZGVmIGdvdF9yZXN1bHQoZnV0dXJlKToKKyAgICAgICAgcHJpbnQoZnV0dXJlLnJlc3VsdCgpKQorICAgICAgICBsb29wLnN0b3AoKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGZ1dHVyZSA9IGFzeW5jaW8uRnV0dXJlKCkKKyAgICBhc3luY2lvLlRhc2soc2xvd19vcGVyYXRpb24oZnV0dXJlKSkKKyAgICBmdXR1cmUuYWRkX2RvbmVfY2FsbGJhY2soZ290X3Jlc3VsdCkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKworSW4gdGhpcyBleGFtcGxlLCB0aGUgZnV0dXJlIGlzIHJlc3BvbnNpYmxlIHRvIGRpc3BsYXkgdGhlIHJlc3VsdCBhbmQgdG8gc3RvcAordGhlIGxvb3AuCisKKy4uIG5vdGU6OgorICAgVGhlICJzbG93X29wZXJhdGlvbiIgY29yb3V0aW5lIG9iamVjdCBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gdGhlIGV2ZW50IGxvb3AKKyAgIHN0YXJ0cyBydW5uaW5nLCBzbyBpdCBpcyBwb3NzaWJsZSB0byBhZGQgYSAiZG9uZSBjYWxsYmFjayIgdG8gdGhlIGZ1dHVyZQorICAgYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhc2sgc2NoZWR1bGluZyB0aGUgY29yb3V0aW5lIG9iamVjdC4KKworCisKK1Rhc2sKKy0tLS0KKworLi4gY2xhc3M6OiBUYXNrKGNvcm8sIFwqLCBsb29wPU5vbmUpCisKKyAgIEEgY29yb3V0aW5lIG9iamVjdCB3cmFwcGVkIGluIGEgOmNsYXNzOmBGdXR1cmVgLiBTdWJjbGFzcyBvZiA6Y2xhc3M6YEZ1dHVyZWAuCisKKyAgIC4uIGNsYXNzbWV0aG9kOjogYWxsX3Rhc2tzKGxvb3A9Tm9uZSkKKworICAgICAgUmV0dXJuIGEgc2V0IG9mIGFsbCB0YXNrcyBmb3IgYW4gZXZlbnQgbG9vcC4KKworICAgICAgQnkgZGVmYXVsdCBhbGwgdGFza3MgZm9yIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgYXJlIHJldHVybmVkLgorCisgICAuLiBjbGFzc21ldGhvZDo6IGN1cnJlbnRfdGFzayhsb29wPU5vbmUpCisKKyAgICAgIFJldHVybiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzayBpbiBhbiBldmVudCBsb29wIG9yIGBgTm9uZWBgLgorCisgICAgICBCeSBkZWZhdWx0IHRoZSBjdXJyZW50IHRhc2sgZm9yIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgaXMgcmV0dXJuZWQuCisKKyAgICAgIGBgTm9uZWBgIGlzIHJldHVybmVkIHdoZW4gY2FsbGVkIG5vdCBpbiB0aGUgY29udGV4dCBvZiBhIDpjbGFzczpgVGFza2AuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9zdGFjayhzZWxmLCBcKiwgbGltaXQ9Tm9uZSkKKworICAgICAgUmV0dXJuIHRoZSBsaXN0IG9mIHN0YWNrIGZyYW1lcyBmb3IgdGhpcyB0YXNrJ3MgY29yb3V0aW5lLgorCisgICAgICBJZiB0aGUgY29yb3V0aW5lIGlzIGFjdGl2ZSwgdGhpcyByZXR1cm5zIHRoZSBzdGFjayB3aGVyZSBpdCBpcyBzdXNwZW5kZWQuCisgICAgICBJZiB0aGUgY29yb3V0aW5lIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IG9yIHdhcyBjYW5jZWxsZWQsIHRoaXMKKyAgICAgIHJldHVybnMgYW4gZW1wdHkgbGlzdC4gIElmIHRoZSBjb3JvdXRpbmUgd2FzIHRlcm1pbmF0ZWQgYnkgYW4gZXhjZXB0aW9uLAorICAgICAgdGhpcyByZXR1cm5zIHRoZSBsaXN0IG9mIHRyYWNlYmFjayBmcmFtZXMuCisKKyAgICAgIFRoZSBmcmFtZXMgYXJlIGFsd2F5cyBvcmRlcmVkIGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KKworICAgICAgVGhlIG9wdGlvbmFsIGxpbWl0IGdpdmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgdG8gcmV0dXJuOyBieQorICAgICAgZGVmYXVsdCBhbGwgYXZhaWxhYmxlIGZyYW1lcyBhcmUgcmV0dXJuZWQuICBJdHMgbWVhbmluZyBkaWZmZXJzIGRlcGVuZGluZworICAgICAgb24gd2hldGhlciBhIHN0YWNrIG9yIGEgdHJhY2ViYWNrIGlzIHJldHVybmVkOiB0aGUgbmV3ZXN0IGZyYW1lcyBvZiBhCisgICAgICBzdGFjayBhcmUgcmV0dXJuZWQsIGJ1dCB0aGUgb2xkZXN0IGZyYW1lcyBvZiBhIHRyYWNlYmFjayBhcmUgcmV0dXJuZWQuCisgICAgICAoVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiB0aGUgdHJhY2ViYWNrIG1vZHVsZS4pCisKKyAgICAgIEZvciByZWFzb25zIGJleW9uZCBvdXIgY29udHJvbCwgb25seSBvbmUgc3RhY2sgZnJhbWUgaXMgcmV0dXJuZWQgZm9yIGEKKyAgICAgIHN1c3BlbmRlZCBjb3JvdXRpbmUuCisKKyAgIC4uIG1ldGhvZDo6IHByaW50X3N0YWNrKFwqLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUpCisKKyAgICAgIFByaW50IHRoZSBzdGFjayBvciB0cmFjZWJhY2sgZm9yIHRoaXMgdGFzaydzIGNvcm91dGluZS4KKworICAgICAgVGhpcyBwcm9kdWNlcyBvdXRwdXQgc2ltaWxhciB0byB0aGF0IG9mIHRoZSB0cmFjZWJhY2sgbW9kdWxlLCBmb3IgdGhlCisgICAgICBmcmFtZXMgcmV0cmlldmVkIGJ5IGdldF9zdGFjaygpLiAgVGhlIGxpbWl0IGFyZ3VtZW50IGlzIHBhc3NlZCB0bworICAgICAgZ2V0X3N0YWNrKCkuICBUaGUgZmlsZSBhcmd1bWVudCBpcyBhbiBJL08gc3RyZWFtIHRvIHdoaWNoIHRoZSBvdXRwdXQKKyAgICAgIGdvZXM7IGJ5IGRlZmF1bHQgaXQgZ29lcyB0byBzeXMuc3RkZXJyLgorCisKK0V4YW1wbGU6IFBhcmFsbGVsIGV4ZWN1dGlvbiBvZiB0YXNrcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0V4YW1wbGUgZXhlY3V0aW5nIDMgdGFza3MgKEEsIEIsIEMpIGluIHBhcmFsbGVsOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgZmFjdG9yaWFsKG5hbWUsIG51bWJlcik6CisgICAgICAgIGYgPSAxCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIsIG51bWJlcisxKToKKyAgICAgICAgICAgIHByaW50KCJUYXNrICVzOiBDb21wdXRlIGZhY3RvcmlhbCglcykuLi4iICUgKG5hbWUsIGkpKQorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEpCisgICAgICAgICAgICBmICo9IGkKKyAgICAgICAgcHJpbnQoIlRhc2sgJXM6IGZhY3RvcmlhbCglcykgPSAlcyIgJSAobmFtZSwgbnVtYmVyLCBmKSkKKworICAgIHRhc2tzID0gWworICAgICAgICBhc3luY2lvLlRhc2soZmFjdG9yaWFsKCJBIiwgMikpLAorICAgICAgICBhc3luY2lvLlRhc2soZmFjdG9yaWFsKCJCIiwgMykpLAorICAgICAgICBhc3luY2lvLlRhc2soZmFjdG9yaWFsKCJDIiwgNCkpXQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdCh0YXNrcykpCisgICAgbG9vcC5jbG9zZSgpCisKK091dHB1dDo6CisKKyAgICBUYXNrIEE6IENvbXB1dGUgZmFjdG9yaWFsKDIpLi4uCisgICAgVGFzayBCOiBDb21wdXRlIGZhY3RvcmlhbCgyKS4uLgorICAgIFRhc2sgQzogQ29tcHV0ZSBmYWN0b3JpYWwoMikuLi4KKyAgICBUYXNrIEE6IGZhY3RvcmlhbCgyKSA9IDIKKyAgICBUYXNrIEI6IENvbXB1dGUgZmFjdG9yaWFsKDMpLi4uCisgICAgVGFzayBDOiBDb21wdXRlIGZhY3RvcmlhbCgzKS4uLgorICAgIFRhc2sgQjogZmFjdG9yaWFsKDMpID0gNgorICAgIFRhc2sgQzogQ29tcHV0ZSBmYWN0b3JpYWwoNCkuLi4KKyAgICBUYXNrIEM6IGZhY3RvcmlhbCg0KSA9IDI0CisKK0EgdGFzayBpcyBhdXRvbWF0aWNhbGx5IHNjaGVkdWxlZCBmb3IgZXhlY3V0aW9uIHdoZW4gaXQgaXMgY3JlYXRlZC4gVGhlIGV2ZW50Citsb29wIHN0b3BzIHdoZW4gYWxsIHRhc2tzIGFyZSBkb25lLgorCisKK1Rhc2sgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLQorCisuLiBub3RlOjoKKworICAgSW4gdGhlIGZ1bmN0aW9ucyBiZWxvdywgdGhlIG9wdGlvbmFsICpsb29wKiBhcmd1bWVudCBhbGxvd3MgdG8gZXhwbGljaXRseSBzZXQKKyAgIHRoZSBldmVudCBsb29wIG9iamVjdCB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nIHRhc2sgb3IgY29yb3V0aW5lLiAgSWYgaXQncworICAgbm90IHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBldmVudCBsb29wIGlzIHVzZWQuCisKKy4uIGZ1bmN0aW9uOjogYXNfY29tcGxldGVkKGZzLCBcKiwgbG9vcD1Ob25lLCB0aW1lb3V0PU5vbmUpCisKKyAgIFJldHVybiBhbiBpdGVyYXRvciB3aG9zZSB2YWx1ZXMsIHdoZW4gd2FpdGVkIGZvciwgYXJlIDpjbGFzczpgRnV0dXJlYAorICAgaW5zdGFuY2VzLgorCisgICBSYWlzZXMgOmV4YzpgVGltZW91dEVycm9yYCBpZiB0aGUgdGltZW91dCBvY2N1cnMgYmVmb3JlIGFsbCBGdXR1cmVzIGFyZSBkb25lLgorCisgICBFeGFtcGxlOjoKKworICAgICAgIGZvciBmIGluIGFzX2NvbXBsZXRlZChmcyk6CisgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gZiAgIyBUaGUgJ3lpZWxkIGZyb20nIG1heSByYWlzZQorICAgICAgICAgICAjIFVzZSByZXN1bHQKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBmdXR1cmVzIGBgZmBgIGFyZSBub3QgbmVjZXNzYXJpbHkgbWVtYmVycyBvZiBmcy4KKworLi4gZnVuY3Rpb246OiBhc3luYyhjb3JvX29yX2Z1dHVyZSwgXCosIGxvb3A9Tm9uZSkKKworICAgV3JhcCBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gIGluIGEgZnV0dXJlLgorCisgICBJZiB0aGUgYXJndW1lbnQgaXMgYSA6Y2xhc3M6YEZ1dHVyZWAsIGl0IGlzIHJldHVybmVkIGRpcmVjdGx5LgorCisuLiBmdW5jdGlvbjo6IGdhdGhlcihcKmNvcm9zX29yX2Z1dHVyZXMsIGxvb3A9Tm9uZSwgcmV0dXJuX2V4Y2VwdGlvbnM9RmFsc2UpCisKKyAgIFJldHVybiBhIGZ1dHVyZSBhZ2dyZWdhdGluZyByZXN1bHRzIGZyb20gdGhlIGdpdmVuIGNvcm91dGluZSBvYmplY3RzIG9yCisgICBmdXR1cmVzLgorCisgICBBbGwgZnV0dXJlcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGV2ZW50IGxvb3AuICBJZiBhbGwgdGhlIHRhc2tzIGFyZSBkb25lCisgICBzdWNjZXNzZnVsbHksIHRoZSByZXR1cm5lZCBmdXR1cmUncyByZXN1bHQgaXMgdGhlIGxpc3Qgb2YgcmVzdWx0cyAoaW4gdGhlCisgICBvcmRlciBvZiB0aGUgb3JpZ2luYWwgc2VxdWVuY2UsIG5vdCBuZWNlc3NhcmlseSB0aGUgb3JkZXIgb2YgcmVzdWx0cworICAgYXJyaXZhbCkuICBJZiAqcmV0dXJuX2V4Y2VwdGlvbnMqIGlzIFRydWUsIGV4Y2VwdGlvbnMgaW4gdGhlIHRhc2tzIGFyZQorICAgdHJlYXRlZCB0aGUgc2FtZSBhcyBzdWNjZXNzZnVsIHJlc3VsdHMsIGFuZCBnYXRoZXJlZCBpbiB0aGUgcmVzdWx0IGxpc3Q7CisgICBvdGhlcndpc2UsIHRoZSBmaXJzdCByYWlzZWQgZXhjZXB0aW9uIHdpbGwgYmUgaW1tZWRpYXRlbHkgcHJvcGFnYXRlZCB0byB0aGUKKyAgIHJldHVybmVkIGZ1dHVyZS4KKworICAgQ2FuY2VsbGF0aW9uOiBpZiB0aGUgb3V0ZXIgRnV0dXJlIGlzIGNhbmNlbGxlZCwgYWxsIGNoaWxkcmVuICh0aGF0IGhhdmUgbm90CisgICBjb21wbGV0ZWQgeWV0KSBhcmUgYWxzbyBjYW5jZWxsZWQuICBJZiBhbnkgY2hpbGQgaXMgY2FuY2VsbGVkLCB0aGlzIGlzCisgICB0cmVhdGVkIGFzIGlmIGl0IHJhaXNlZCA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYCAtLSB0aGUKKyAgIG91dGVyIEZ1dHVyZSBpcyAqbm90KiBjYW5jZWxsZWQgaW4gdGhpcyBjYXNlLiAgKFRoaXMgaXMgdG8gcHJldmVudCB0aGUKKyAgIGNhbmNlbGxhdGlvbiBvZiBvbmUgY2hpbGQgdG8gY2F1c2Ugb3RoZXIgY2hpbGRyZW4gdG8gYmUgY2FuY2VsbGVkLikKKworLi4gZnVuY3Rpb246OiBpc2Nvcm91dGluZShvYmopCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiAqb2JqKiBpcyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisuLiBmdW5jdGlvbjo6IGlzY29yb3V0aW5lZnVuY3Rpb24ob2JqKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgKmZ1bmMqIGlzIGEgZGVjb3JhdGVkIDpyZWY6YGNvcm91dGluZSBmdW5jdGlvbgorICAgPGNvcm91dGluZT5gLgorCisuLiBmdW5jdGlvbjo6IHNsZWVwKGRlbGF5LCByZXN1bHQ9Tm9uZSwgXCosIGxvb3A9Tm9uZSkKKworICAgQ3JlYXRlIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgYSBnaXZlbgorICAgdGltZSAoaW4gc2Vjb25kcykuICBJZiAqcmVzdWx0KiBpcyBwcm92aWRlZCwgaXQgaXMgcHJvZHVjZWQgdG8gdGhlIGNhbGxlcgorICAgd2hlbiB0aGUgY29yb3V0aW5lIGNvbXBsZXRlcy4KKworICAgVGhlIHJlc29sdXRpb24gb2YgdGhlIHNsZWVwIGRlcGVuZHMgb24gdGhlIDpyZWY6YGdyYW51bGFyaXR5IG9mIHRoZSBldmVudAorICAgbG9vcCA8YXN5bmNpby1kZWxheWVkLWNhbGxzPmAuCisKKy4uIGZ1bmN0aW9uOjogc2hpZWxkKGFyZywgXCosIGxvb3A9Tm9uZSkKKworICAgV2FpdCBmb3IgYSBmdXR1cmUsIHNoaWVsZGluZyBpdCBmcm9tIGNhbmNlbGxhdGlvbi4KKworICAgVGhlIHN0YXRlbWVudDo6CisKKyAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKworICAgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIHRoZSBzdGF0ZW1lbnQ6OgorCisgICAgICAgcmVzID0geWllbGQgZnJvbSBzb21ldGhpbmcoKQorCisgICAqZXhjZXB0KiB0aGF0IGlmIHRoZSBjb3JvdXRpbmUgY29udGFpbmluZyBpdCBpcyBjYW5jZWxsZWQsIHRoZSB0YXNrIHJ1bm5pbmcKKyAgIGluIGBgc29tZXRoaW5nKClgYCBpcyBub3QgY2FuY2VsbGVkLiAgRnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZgorICAgYGBzb21ldGhpbmcoKWBgLCB0aGUgY2FuY2VsbGF0aW9uIGRpZCBub3QgaGFwcGVuLiAgQnV0IGl0cyBjYWxsZXIgaXMgc3RpbGwKKyAgIGNhbmNlbGxlZCwgc28gdGhlIHlpZWxkLWZyb20gZXhwcmVzc2lvbiBzdGlsbCByYWlzZXMKKyAgIDpleGM6YH5jb25jdXJyZW50LmZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3JgLiAgTm90ZTogSWYgYGBzb21ldGhpbmcoKWBgIGlzCisgICBjYW5jZWxsZWQgYnkgb3RoZXIgbWVhbnMgdGhpcyB3aWxsIHN0aWxsIGNhbmNlbCBgYHNoaWVsZCgpYGAuCisKKyAgIElmIHlvdSB3YW50IHRvIGNvbXBsZXRlbHkgaWdub3JlIGNhbmNlbGxhdGlvbiAobm90IHJlY29tbWVuZGVkKSB5b3UgY2FuCisgICBjb21iaW5lIGBgc2hpZWxkKClgYCB3aXRoIGEgdHJ5L2V4Y2VwdCBjbGF1c2UsIGFzIGZvbGxvd3M6OgorCisgICAgICAgdHJ5OgorICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKyAgICAgICBleGNlcHQgQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgIHJlcyA9IE5vbmUKKworLi4gZnVuY3Rpb246OiB3YWl0KGZ1dHVyZXMsIFwqLCBsb29wPU5vbmUsIHRpbWVvdXQ9Tm9uZSwgcmV0dXJuX3doZW49QUxMX0NPTVBMRVRFRCkKKworICAgV2FpdCBmb3IgdGhlIEZ1dHVyZXMgYW5kIGNvcm91dGluZSBvYmplY3RzIGdpdmVuIGJ5IHRoZSBzZXF1ZW5jZSAqZnV0dXJlcyoKKyAgIHRvIGNvbXBsZXRlLiAgQ29yb3V0aW5lcyB3aWxsIGJlIHdyYXBwZWQgaW4gVGFza3MuIFJldHVybnMgdHdvIHNldHMgb2YKKyAgIDpjbGFzczpgRnV0dXJlYDogKGRvbmUsIHBlbmRpbmcpLgorCisgICAqdGltZW91dCogY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZQorICAgcmV0dXJuaW5nLiAgKnRpbWVvdXQqIGNhbiBiZSBhbiBpbnQgb3IgZmxvYXQuICBJZiAqdGltZW91dCogaXMgbm90IHNwZWNpZmllZAorICAgb3IgYGBOb25lYGAsIHRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSB3YWl0IHRpbWUuCisKKyAgICpyZXR1cm5fd2hlbiogaW5kaWNhdGVzIHdoZW4gdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuLiAgSXQgbXVzdCBiZSBvbmUgb2YKKyAgIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIG9mIHRoZSA6bW9kOmBjb25jdXJyZW50LmZ1dHVyZXNgIG1vZHVsZToKKworICAgLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfAorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgQ29uc3RhbnQgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDpjb25zdDpgRklSU1RfQ09NUExFVEVEYCAgICB8IFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGVuIGFueSAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnV0dXJlIGZpbmlzaGVzIG9yIGlzIGNhbmNlbGxlZC4gICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgRklSU1RfRVhDRVBUSU9OYCAgICB8IFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGVuIGFueSAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnV0dXJlIGZpbmlzaGVzIGJ5IHJhaXNpbmcgYW4gICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBleGNlcHRpb24uICBJZiBubyBmdXR1cmUgcmFpc2VzIGFuICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4Y2VwdGlvbiB0aGVuIGl0IGlzIGVxdWl2YWxlbnQgdG8gICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmNvbnN0OmBBTExfQ09NUExFVEVEYC4gICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgQUxMX0NPTVBMRVRFRGAgICAgICB8IFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGVuIGFsbCAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnV0dXJlcyBmaW5pc2ggb3IgYXJlIGNhbmNlbGxlZC4gICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLgorCisgICBVc2FnZTo6CisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0KGZzKQorCisgICAuLiBub3RlOjoKKworICAgICAgVGhpcyBkb2VzIG5vdCByYWlzZSA6ZXhjOmBUaW1lb3V0RXJyb3JgISBGdXR1cmVzIHRoYXQgYXJlbid0IGRvbmUgd2hlbgorICAgICAgdGhlIHRpbWVvdXQgb2NjdXJzIGFyZSByZXR1cm5lZCBpbiB0aGUgc2Vjb25kIHNldC4KKworCisuLiBmdW5jdGlvbjo6IHdhaXRfZm9yKGZ1dCwgdGltZW91dCwgXCosIGxvb3A9Tm9uZSkKKworICAgV2FpdCBmb3IgdGhlIHNpbmdsZSA6Y2xhc3M6YEZ1dHVyZWAgb3IgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAKKyAgIHRvIGNvbXBsZXRlLCB3aXRoIHRpbWVvdXQuIElmICp0aW1lb3V0KiBpcyBgYE5vbmVgYCwgYmxvY2sgdW50aWwgdGhlIGZ1dHVyZQorICAgY29tcGxldGVzLgorCisgICBDb3JvdXRpbmUgd2lsbCBiZSB3cmFwcGVkIGluIDpjbGFzczpgVGFza2AuCisKKyAgIFJldHVybnMgcmVzdWx0IG9mIHRoZSBGdXR1cmUgb3IgY29yb3V0aW5lLiAgV2hlbiBhIHRpbWVvdXQgb2NjdXJzLCBpdAorICAgY2FuY2VscyB0aGUgdGFzayBhbmQgcmFpc2VzIDpleGM6YFRpbWVvdXRFcnJvcmAuIFRvIGF2b2lkIHRoZSB0YXNrCisgICBjYW5jZWxsYXRpb24sIHdyYXAgaXQgaW4gOmZ1bmM6YHNoaWVsZGAuCisKKyAgIFVzYWdlOjoKKworICAgICAgICByZXN1bHQgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdF9mb3IoZnV0LCA2MC4wKQorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNzMxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLnJzdApAQCAtMCwwICsxLDU5IEBACis6bW9kOmBhc3luY2lvYCAtLSBBc3luY2hyb25vdXMgSS9PLCBldmVudCBsb29wLCBjb3JvdXRpbmVzIGFuZCB0YXNrcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogYXN5bmNpbworICAgOnN5bm9wc2lzOiBBc3luY2hyb25vdXMgSS9PLCBldmVudCBsb29wLCBjb3JvdXRpbmVzIGFuZCB0YXNrcy4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2FzeW5jaW8vYAorCistLS0tLS0tLS0tLS0tLQorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBpbmZyYXN0cnVjdHVyZSBmb3Igd3JpdGluZyBzaW5nbGUtdGhyZWFkZWQgY29uY3VycmVudAorY29kZSB1c2luZyBjb3JvdXRpbmVzLCBtdWx0aXBsZXhpbmcgSS9PIGFjY2VzcyBvdmVyIHNvY2tldHMgYW5kIG90aGVyCityZXNvdXJjZXMsIHJ1bm5pbmcgbmV0d29yayBjbGllbnRzIGFuZCBzZXJ2ZXJzLCBhbmQgb3RoZXIgcmVsYXRlZCBwcmltaXRpdmVzLgorSGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgbGlzdCBvZiB0aGUgcGFja2FnZSBjb250ZW50czoKKworKiBhIHBsdWdnYWJsZSA6cmVmOmBldmVudCBsb29wIDxhc3luY2lvLWV2ZW50LWxvb3A+YCB3aXRoIHZhcmlvdXMgc3lzdGVtLXNwZWNpZmljCisgIGltcGxlbWVudGF0aW9uczsKKworKiA6cmVmOmB0cmFuc3BvcnQgPGFzeW5jaW8tdHJhbnNwb3J0PmAgYW5kIDpyZWY6YHByb3RvY29sIDxhc3luY2lvLXByb3RvY29sPmAgYWJzdHJhY3Rpb25zCisgIChzaW1pbGFyIHRvIHRob3NlIGluIGBUd2lzdGVkIDxodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vPmBfKTsKKworKiBjb25jcmV0ZSBzdXBwb3J0IGZvciBUQ1AsIFVEUCwgU1NMLCBzdWJwcm9jZXNzIHBpcGVzLCBkZWxheWVkIGNhbGxzLCBhbmQKKyAgb3RoZXJzIChzb21lIG1heSBiZSBzeXN0ZW0tZGVwZW5kZW50KTsKKworKiBhIDpjbGFzczpgRnV0dXJlYCBjbGFzcyB0aGF0IG1pbWljcyB0aGUgb25lIGluIHRoZSA6bW9kOmBjb25jdXJyZW50LmZ1dHVyZXNgCisgIG1vZHVsZSwgYnV0IGFkYXB0ZWQgZm9yIHVzZSB3aXRoIHRoZSBldmVudCBsb29wOworCisqIGNvcm91dGluZXMgYW5kIHRhc2tzIGJhc2VkIG9uIGBgeWllbGQgZnJvbWBgICg6UEVQOmAzODBgKSwgdG8gaGVscCB3cml0ZQorICBjb25jdXJyZW50IGNvZGUgaW4gYSBzZXF1ZW50aWFsIGZhc2hpb247CisKKyogY2FuY2VsbGF0aW9uIHN1cHBvcnQgZm9yIDpjbGFzczpgRnV0dXJlYFxzIGFuZCBjb3JvdXRpbmVzOworCisqIDpyZWY6YHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIDxhc3luY2lvLXN5bmM+YCBmb3IgdXNlIGJldHdlZW4gY29yb3V0aW5lcyBpbgorICBhIHNpbmdsZSB0aHJlYWQsIG1pbWlja2luZyB0aG9zZSBpbiB0aGUgOm1vZDpgdGhyZWFkaW5nYCBtb2R1bGU7CisKKyogYW4gaW50ZXJmYWNlIGZvciBwYXNzaW5nIHdvcmsgb2ZmIHRvIGEgdGhyZWFkcG9vbCwgZm9yIHRpbWVzIHdoZW4KKyAgeW91IGFic29sdXRlbHksIHBvc2l0aXZlbHkgaGF2ZSB0byB1c2UgYSBsaWJyYXJ5IHRoYXQgbWFrZXMgYmxvY2tpbmcKKyAgSS9PIGNhbGxzLgorCitUYWJsZSBvZiBjb250ZW50OgorCisuLiB0b2N0cmVlOjoKKyAgIDptYXhkZXB0aDogMworCisgICBhc3luY2lvLWV2ZW50bG9vcC5yc3QKKyAgIGFzeW5jaW8tdGFzay5yc3QKKyAgIGFzeW5jaW8tcHJvdG9jb2wucnN0CisgICBhc3luY2lvLXN0cmVhbS5yc3QKKyAgIGFzeW5jaW8tc3VicHJvY2Vzcy5yc3QKKyAgIGFzeW5jaW8tc3luYy5yc3QKKyAgIGFzeW5jaW8tZGV2LnJzdAorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSB3YXMgZGVzaWduZWQgaW4gdGhlIDpQRVA6YDMxNTZgLiBGb3IgYQorICAgbW90aXZhdGlvbmFsIHByaW1lciBvbiB0cmFuc3BvcnRzIGFuZCBwcm90b2NvbHMsIHNlZSA6UEVQOmAzMTUzYC4KKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0CmluZGV4IDE1MjFlNzIuLjBhZGY4ZDkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QKQEAgLTEzLDYgKzEzLDExIEBACiAKIC0tLS0tLS0tLS0tLS0tCiAKKy4uIG5vdGU6OgorCisgICBUaGlzIG1vZHVsZSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9ubHkuICBGb3IgbmV3IGNvZGUgd2UKKyAgIHJlY29tbWVuZCB1c2luZyA6bW9kOmBhc3luY2lvYC4KKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGJhc2ljIGluZnJhc3RydWN0dXJlIGZvciB3cml0aW5nIGFzeW5jaHJvbm91cyAgc29ja2V0CiBzZXJ2aWNlIGNsaWVudHMgYW5kIHNlcnZlcnMuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0IGIvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKaW5kZXggZWRiMzg3MC4uZmJiN2ZjNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKQEAgLTYsOSArNiwxNiBAQAogCiAKIFRoZSA6bW9kOmBhdWRpb29wYCBtb2R1bGUgY29udGFpbnMgc29tZSB1c2VmdWwgb3BlcmF0aW9ucyBvbiBzb3VuZCBmcmFnbWVudHMuCi1JdCBvcGVyYXRlcyBvbiBzb3VuZCBmcmFnbWVudHMgY29uc2lzdGluZyBvZiBzaWduZWQgaW50ZWdlciBzYW1wbGVzIDgsIDE2IG9yIDMyCi1iaXRzIHdpZGUsIHN0b3JlZCBpbiBieXRlcyBvYmplY3RzLiAgQWxsIHNjYWxhciBpdGVtcyBhcmUgaW50ZWdlcnMsIHVubGVzcwotc3BlY2lmaWVkIG90aGVyd2lzZS4KK0l0IG9wZXJhdGVzIG9uIHNvdW5kIGZyYWdtZW50cyBjb25zaXN0aW5nIG9mIHNpZ25lZCBpbnRlZ2VyIHNhbXBsZXMgOCwgMTYsIDI0CitvciAzMiBiaXRzIHdpZGUsIHN0b3JlZCBpbiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzLiAgQWxsIHNjYWxhciBpdGVtcyBhcmUKK2ludGVnZXJzLCB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFN1cHBvcnQgZm9yIDI0LWJpdCBzYW1wbGVzIHdhcyBhZGRlZC4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQgYnkgYWxsIGZ1bmN0aW9ucyBpbiB0aGlzCisgICBtb2R1bGUuICBTdHJpbmdzIG5vIG1vcmUgc3VwcG9ydGVkLgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IEludGVsL0RWSSBBRFBDTQpAQCAtMzUsNyArNDIsNyBAQAogLi4gZnVuY3Rpb246OiBhZGQoZnJhZ21lbnQxLCBmcmFnbWVudDIsIHdpZHRoKQogCiAgICBSZXR1cm4gYSBmcmFnbWVudCB3aGljaCBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIHR3byBzYW1wbGVzIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLgotICAgKndpZHRoKiBpcyB0aGUgc2FtcGxlIHdpZHRoIGluIGJ5dGVzLCBlaXRoZXIgYGAxYGAsIGBgMmBgIG9yIGBgNGBgLiAgQm90aAorICAgKndpZHRoKiBpcyB0aGUgc2FtcGxlIHdpZHRoIGluIGJ5dGVzLCBlaXRoZXIgYGAxYGAsIGBgMmBgLCBgYDNgYCBvciBgYDRgYC4gIEJvdGgKICAgIGZyYWdtZW50cyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguICBTYW1wbGVzIGFyZSB0cnVuY2F0ZWQgaW4gY2FzZSBvZiBvdmVyZmxvdy4KIAogCkBAIC03MCw2ICs3NywxNCBAQAogICAgc2FtcGxlLiAgU2FtcGxlcyB3cmFwIGFyb3VuZCBpbiBjYXNlIG9mIG92ZXJmbG93LgogCiAKKy4uIGZ1bmN0aW9uOjogYnl0ZXN3YXAoZnJhZ21lbnQsIHdpZHRoKQorCisgICAiQnl0ZXN3YXAiIGFsbCBzYW1wbGVzIGluIGEgZnJhZ21lbnQgYW5kIHJldHVybnMgdGhlIG1vZGlmaWVkIGZyYWdtZW50LgorICAgQ29udmVydHMgYmlnLWVuZGlhbiBzYW1wbGVzIHRvIGxpdHRsZS1lbmRpYW4gYW5kIHZpY2UgdmVyc2EuCisKKyAgIC4uIHZlcnNpb25hZGRlZDogMy40CisKKwogLi4gZnVuY3Rpb246OiBjcm9zcyhmcmFnbWVudCwgd2lkdGgpCiAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHplcm8gY3Jvc3NpbmdzIGluIHRoZSBmcmFnbWVudCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuCkBAIC0xMzMsMTkgKzE0OCwxOSBAQAogCiAuLiBmdW5jdGlvbjo6IGxpbjJsaW4oZnJhZ21lbnQsIHdpZHRoLCBuZXd3aWR0aCkKIAotICAgQ29udmVydCBzYW1wbGVzIGJldHdlZW4gMS0sIDItIGFuZCA0LWJ5dGUgZm9ybWF0cy4KKyAgIENvbnZlcnQgc2FtcGxlcyBiZXR3ZWVuIDEtLCAyLSwgMy0gYW5kIDQtYnl0ZSBmb3JtYXRzLgogCiAgICAuLiBub3RlOjoKIAotICAgICAgSW4gc29tZSBhdWRpbyBmb3JtYXRzLCBzdWNoIGFzIC5XQVYgZmlsZXMsIDE2IGFuZCAzMiBiaXQgc2FtcGxlcyBhcmUKKyAgICAgIEluIHNvbWUgYXVkaW8gZm9ybWF0cywgc3VjaCBhcyAuV0FWIGZpbGVzLCAxNiwgMjQgYW5kIDMyIGJpdCBzYW1wbGVzIGFyZQogICAgICAgc2lnbmVkLCBidXQgOCBiaXQgc2FtcGxlcyBhcmUgdW5zaWduZWQuICBTbyB3aGVuIGNvbnZlcnRpbmcgdG8gOCBiaXQgd2lkZQogICAgICAgc2FtcGxlcyBmb3IgdGhlc2UgZm9ybWF0cywgeW91IG5lZWQgdG8gYWxzbyBhZGQgMTI4IHRvIHRoZSByZXN1bHQ6OgogCiAgICAgICAgICBuZXdfZnJhbWVzID0gYXVkaW9vcC5saW4ybGluKGZyYW1lcywgb2xkX3dpZHRoLCAxKQogICAgICAgICAgbmV3X2ZyYW1lcyA9IGF1ZGlvb3AuYmlhcyhuZXdfZnJhbWVzLCAxLCAxMjgpCiAKLSAgICAgIFRoZSBzYW1lLCBpbiByZXZlcnNlLCBoYXMgdG8gYmUgYXBwbGllZCB3aGVuIGNvbnZlcnRpbmcgZnJvbSA4IHRvIDE2IG9yIDMyCi0gICAgICBiaXQgd2lkdGggc2FtcGxlcy4KKyAgICAgIFRoZSBzYW1lLCBpbiByZXZlcnNlLCBoYXMgdG8gYmUgYXBwbGllZCB3aGVuIGNvbnZlcnRpbmcgZnJvbSA4IHRvIDE2LCAyNAorICAgICAgb3IgMzIgYml0IHdpZHRoIHNhbXBsZXMuCiAKIAogLi4gZnVuY3Rpb246OiBsaW4ydWxhdyhmcmFnbWVudCwgd2lkdGgpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9iYXNlNjQucnN0IGIvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdAppbmRleCBmMGQxMWIwLi4zZDFmMDg3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKQEAgLTI3LDYgKzI3LDEwIEBACiAgICBBU0NJSS1vbmx5IFVuaWNvZGUgc3RyaW5ncyBhcmUgbm93IGFjY2VwdGVkIGJ5IHRoZSBkZWNvZGluZyBmdW5jdGlvbnMgb2YKICAgIHRoZSBtb2Rlcm4gaW50ZXJmYWNlLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgQW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMgYXJlIG5vdyBhY2NlcHRlZCBieSBhbGwKKyAgIGVuY29kaW5nIGFuZCBkZWNvZGluZyBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUuCisKIFRoZSBtb2Rlcm4gaW50ZXJmYWNlIHByb3ZpZGVzOgogCiAuLiBmdW5jdGlvbjo6IGI2NGVuY29kZShzLCBhbHRjaGFycz1Ob25lKQpAQCAtMTI4LDYgKzEzMiw3NiBAQAogICAgc3RyaW5nLgogCiAKKy4uIGZ1bmN0aW9uOjogYTg1ZW5jb2RlKHMsICosIGZvbGRzcGFjZXM9RmFsc2UsIHdyYXBjb2w9MCwgcGFkPUZhbHNlLCBhZG9iZT1GYWxzZSkKKworICAgRW5jb2RlIGEgYnl0ZSBzdHJpbmcgdXNpbmcgQXNjaWk4NS4KKworICAgKnMqIGlzIHRoZSBzdHJpbmcgdG8gZW5jb2RlLiBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KKworICAgKmZvbGRzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIGZsYWcgdGhhdCB1c2VzIHRoZSBzcGVjaWFsIHNob3J0IHNlcXVlbmNlICd5JworICAgaW5zdGVhZCBvZiA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkgYXMgc3VwcG9ydGVkIGJ5ICdidG9hJy4gVGhpcworICAgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAic3RhbmRhcmQiIEFzY2lpODUgZW5jb2RpbmcuCisKKyAgICp3cmFwY29sKiBjb250cm9scyB3aGV0aGVyIHRoZSBvdXRwdXQgc2hvdWxkIGhhdmUgbmV3bGluZSAoJ1xuJykKKyAgIGNoYXJhY3RlcnMgYWRkZWQgdG8gaXQuIElmIHRoaXMgaXMgbm9uLXplcm8sIGVhY2ggb3V0cHV0IGxpbmUgd2lsbCBiZQorICAgYXQgbW9zdCB0aGlzIG1hbnkgY2hhcmFjdGVycyBsb25nLgorCisgICAqcGFkKiBjb250cm9scyB3aGV0aGVyIHRoZSBpbnB1dCBzdHJpbmcgaXMgcGFkZGVkIHRvIGEgbXVsdGlwbGUgb2YgNAorICAgYmVmb3JlIGVuY29kaW5nLiBOb3RlIHRoYXQgdGhlIGBgYnRvYWBgIGltcGxlbWVudGF0aW9uIGFsd2F5cyBwYWRzLgorCisgICAqYWRvYmUqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGVuY29kZWQgYnl0ZSBzZXF1ZW5jZSBpcyBmcmFtZWQgd2l0aCBgYDx+YGAKKyAgIGFuZCBgYH4+YGAsIHdoaWNoIGlzIHVzZWQgYnkgdGhlIEFkb2JlIGltcGxlbWVudGF0aW9uLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IGE4NWRlY29kZShzLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCBhZG9iZT1GYWxzZSwgaWdub3JlY2hhcnM9YicgXHRcblxyXHYnKQorCisgICBEZWNvZGUgYW4gQXNjaWk4NSBlbmNvZGVkIGJ5dGUgc3RyaW5nLgorCisgICAqcyogaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGRlY29kZS4KKworICAgKmZvbGRzcGFjZXMqIGlzIGEgZmxhZyB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSAneScgc2hvcnQgc2VxdWVuY2UKKyAgIHNob3VsZCBiZSBhY2NlcHRlZCBhcyBzaG9ydGhhbmQgZm9yIDQgY29uc2VjdXRpdmUgc3BhY2VzIChBU0NJSSAweDIwKS4KKyAgIFRoaXMgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAic3RhbmRhcmQiIEFzY2lpODUgZW5jb2RpbmcuCisKKyAgICphZG9iZSogY29udHJvbHMgd2hldGhlciB0aGUgaW5wdXQgc2VxdWVuY2UgaXMgaW4gQWRvYmUgQXNjaWk4NSBmb3JtYXQKKyAgIChpLmUuIGlzIGZyYW1lZCB3aXRoIDx+IGFuZCB+PikuCisKKyAgICppZ25vcmVjaGFycyogc2hvdWxkIGJlIGEgYnl0ZSBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGlnbm9yZQorICAgZnJvbSB0aGUgaW5wdXQuIFRoaXMgc2hvdWxkIG9ubHkgY29udGFpbiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIGFuZCBieQorICAgZGVmYXVsdCBjb250YWlucyBhbGwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIEFTQ0lJLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IGI4NWVuY29kZShzLCBwYWQ9RmFsc2UpCisKKyAgIEVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIGJhc2U4NSwgYXMgdXNlZCBpbiBlLmcuIGdpdC1zdHlsZSBiaW5hcnkKKyAgIGRpZmZzLgorCisgICBJZiAqcGFkKiBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgcGFkZGVkIHdpdGggIlxcMCIgc28gaXRzIGxlbmd0aCBpcyBhCisgICBtdWx0aXBsZSBvZiA0IGNoYXJhY3RlcnMgYmVmb3JlIGVuY29kaW5nLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IGI4NWRlY29kZShiKQorCisgICBEZWNvZGUgYmFzZTg1LWVuY29kZWQgYnl0ZSBzdHJpbmcuICBQYWRkaW5nIGlzIGltcGxpY2l0bHkgcmVtb3ZlZCwgaWYKKyAgIG5lY2Vzc2FyeS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gbm90ZTo6CisgICBCb3RoIEJhc2U4NSBhbmQgQXNjaWk4NSBoYXZlIGFuIGV4cGFuc2lvbiBmYWN0b3Igb2YgNSB0byA0ICg1IEJhc2U4NSBvcgorICAgQXNjaWk4NSBjaGFyYWN0ZXJzIGNhbiBlbmNvZGUgNCBiaW5hcnkgYnl0ZXMpLCB3aGlsZSB0aGUgYmV0dGVyLWtub3duCisgICBCYXNlNjQgaGFzIGFuIGV4cGFuc2lvbiBmYWN0b3Igb2YgNiB0byA0LiAgVGhleSBhcmUgdGhlcmVmb3JlIG1vcmUKKyAgIGVmZmljaWVudCB3aGVuIHNwYWNlIGV4cGVuc2l2ZS4gIFRoZXkgZGlmZmVyIGJ5IGRldGFpbHMgc3VjaCBhcyB0aGUKKyAgIGNoYXJhY3RlciBtYXAgdXNlZCBmb3IgZW5jb2RpbmcuCisKKwogVGhlIGxlZ2FjeSBpbnRlcmZhY2U6CiAKIC4uIGZ1bmN0aW9uOjogZGVjb2RlKGlucHV0LCBvdXRwdXQpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9iejIucnN0IGIvRG9jL2xpYnJhcnkvYnoyLnJzdAppbmRleCBiNzliY2NkLi40ODhjZGE1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9iejIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2J6Mi5yc3QKQEAgLTM3LDggKzM3LDggQEAKICAgIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgYW55IG9mIGBgJ3InYGAsIGBgJ3JiJ2BgLCBgYCd3J2BgLCBgYCd3YidgYCwKLSAgIGBgJ2EnYGAsIG9yIGBgJ2FiJ2BgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAncnQnYGAsIGBgJ3d0J2BgLCBvciBgYCdhdCdgYCBmb3IKLSAgIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCisgICBgYCd4J2BgLCBgYCd4YidgYCwgYGAnYSdgYCBvciBgYCdhYidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLAorICAgYGAnd3QnYGAsIGBgJ3h0J2BgLCBvciBgYCdhdCdgYCBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCdyYidgYC4KIAogICAgVGhlICpjb21wcmVzc2xldmVsKiBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZyb20gMSB0byA5LCBhcyBmb3IgdGhlCiAgICA6Y2xhc3M6YEJaMkZpbGVgIGNvbnN0cnVjdG9yLgpAQCAtNTQsNiArNTQsOSBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBgYCd4J2BgIChleGNsdXNpdmUgY3JlYXRpb24pIG1vZGUgd2FzIGFkZGVkLgorCiAKIC4uIGNsYXNzOjogQloyRmlsZShmaWxlbmFtZSwgbW9kZT0ncicsIGJ1ZmZlcmluZz1Ob25lLCBjb21wcmVzc2xldmVsPTkpCiAKQEAgLTY0LDggKzY3LDkgQEAKICAgIGJlIHVzZWQgdG8gcmVhZCBvciB3cml0ZSB0aGUgY29tcHJlc3NlZCBkYXRhLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgYGAncidgYCBmb3IgcmVhZGluZyAoZGVmYXVsdCksIGBgJ3cnYGAgZm9yCi0gICBvdmVyd3JpdGluZywgb3IgYGAnYSdgYCBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzCi0gICBgYCdyYidgYCwgYGAnd2InYGAsIGFuZCBgYCdhYidgYCByZXNwZWN0aXZlbHkuCisgICBvdmVyd3JpdGluZywgYGAneCdgYCBmb3IgZXhjbHVzaXZlIGNyZWF0aW9uLCBvciBgYCdhJ2BgIGZvciBhcHBlbmRpbmcuIFRoZXNlCisgICBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzIGBgJ3JiJ2BgLCBgYCd3YidgYCwgYGAneGInYGAgYW5kIGBgJ2FiJ2BgCisgICByZXNwZWN0aXZlbHkuCiAKICAgIElmICpmaWxlbmFtZSogaXMgYSBmaWxlIG9iamVjdCAocmF0aGVyIHRoYW4gYW4gYWN0dWFsIGZpbGUgbmFtZSksIGEgbW9kZSBvZgogICAgYGAndydgYCBkb2VzIG5vdCB0cnVuY2F0ZSB0aGUgZmlsZSwgYW5kIGlzIGluc3RlYWQgZXF1aXZhbGVudCB0byBgYCdhJ2BgLgpAQCAtMTEzLDYgKzExNyw5IEBACiAgICAgICBUaGUgYGAnYSdgYCAoYXBwZW5kKSBtb2RlIHdhcyBhZGRlZCwgYWxvbmcgd2l0aCBzdXBwb3J0IGZvciByZWFkaW5nCiAgICAgICBtdWx0aS1zdHJlYW0gZmlsZXMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGAneCdgYCAoZXhjbHVzaXZlIGNyZWF0aW9uKSBtb2RlIHdhcyBhZGRlZC4KKwogCiBJbmNyZW1lbnRhbCAoZGUpY29tcHJlc3Npb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY2dpLnJzdCBiL0RvYy9saWJyYXJ5L2NnaS5yc3QKaW5kZXggYzRlN2M2MC4uZmExMzE0NSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY2dpLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jZ2kucnN0CkBAIC0xNDIsOSArMTQyLDExIEBACiBtZXRob2QgcmVhZHMgdGhlIGVudGlyZSBmaWxlIGluIG1lbW9yeSBhcyBieXRlcy4gIFRoaXMgbWF5IG5vdCBiZSB3aGF0IHlvdQogd2FudC4gIFlvdSBjYW4gdGVzdCBmb3IgYW4gdXBsb2FkZWQgZmlsZSBieSB0ZXN0aW5nIGVpdGhlciB0aGUKIDphdHRyOmB+RmllbGRTdG9yYWdlLmZpbGVuYW1lYCBhdHRyaWJ1dGUgb3IgdGhlIDphdHRyOmB+RmllbGRTdG9yYWdlLmZpbGVgCi1hdHRyaWJ1dGUuICBZb3UgY2FuIHRoZW4gcmVhZCB0aGUgZGF0YSBhdCBsZWlzdXJlIGZyb20gdGhlIDphdHRyOmAhZmlsZWAKLWF0dHJpYnV0ZSAodGhlIDpmdW5jOmB+aW8uUmF3SU9CYXNlLnJlYWRgIGFuZCA6ZnVuYzpgfmlvLklPQmFzZS5yZWFkbGluZWAKLW1ldGhvZHMgd2lsbCByZXR1cm4gYnl0ZXMpOjoKK2F0dHJpYnV0ZS4gIFlvdSBjYW4gdGhlbiByZWFkIHRoZSBkYXRhIGZyb20gdGhlIDphdHRyOmAhZmlsZWAKK2F0dHJpYnV0ZSBiZWZvcmUgaXQgaXMgYXV0b21hdGljYWxseSBjbG9zZWQgYXMgcGFydCBvZiB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mCit0aGUgOmNsYXNzOmBGaWVsZFN0b3JhZ2VgIGluc3RhbmNlCisodGhlIDpmdW5jOmB+aW8uUmF3SU9CYXNlLnJlYWRgIGFuZCA6ZnVuYzpgfmlvLklPQmFzZS5yZWFkbGluZWAgbWV0aG9kcyB3aWxsCityZXR1cm4gYnl0ZXMpOjoKIAogICAgZmlsZWl0ZW0gPSBmb3JtWyJ1c2VyZmlsZSJdCiAgICBpZiBmaWxlaXRlbS5maWxlOgpAQCAtMTc2LDYgKzE3OCwxMSBAQAogQSBmb3JtIHN1Ym1pdHRlZCB2aWEgUE9TVCB0aGF0IGFsc28gaGFzIGEgcXVlcnkgc3RyaW5nIHdpbGwgY29udGFpbiBib3RoCiA6Y2xhc3M6YEZpZWxkU3RvcmFnZWAgYW5kIDpjbGFzczpgTWluaUZpZWxkU3RvcmFnZWAgaXRlbXMuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgOmF0dHI6YH5GaWVsZFN0b3JhZ2UuZmlsZWAgYXR0cmlidXRlIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHVwb24gdGhlCisgICBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgdGhlIGNyZWF0aW5nIDpjbGFzczpgRmllbGRTdG9yYWdlYCBpbnN0YW5jZS4KKworCiBIaWdoZXIgTGV2ZWwgSW50ZXJmYWNlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvZGUucnN0IGIvRG9jL2xpYnJhcnkvY29kZS5yc3QKaW5kZXggZTg2OTAwNC4uNWI1ZDdjYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29kZS5yc3QKQEAgLTEzMiwxMiArMTMyLDE1IEBACiAKIC4uIG1ldGhvZDo6IEludGVyYWN0aXZlQ29uc29sZS5pbnRlcmFjdChiYW5uZXI9Tm9uZSkKIAotICAgQ2xvc2VseSBlbXVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBQeXRob24gY29uc29sZS4gVGhlIG9wdGlvbmFsIGJhbm5lciBhcmd1bWVudAorICAgQ2xvc2VseSBlbXVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBQeXRob24gY29uc29sZS4gVGhlIG9wdGlvbmFsICpiYW5uZXIqIGFyZ3VtZW50CiAgICBzcGVjaWZ5IHRoZSBiYW5uZXIgdG8gcHJpbnQgYmVmb3JlIHRoZSBmaXJzdCBpbnRlcmFjdGlvbjsgYnkgZGVmYXVsdCBpdCBwcmludHMgYQogICAgYmFubmVyIHNpbWlsYXIgdG8gdGhlIG9uZSBwcmludGVkIGJ5IHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIsIGZvbGxvd2VkCiAgICBieSB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY29uc29sZSBvYmplY3QgaW4gcGFyZW50aGVzZXMgKHNvIGFzIG5vdCB0byBjb25mdXNlCiAgICB0aGlzIHdpdGggdGhlIHJlYWwgaW50ZXJwcmV0ZXIgLS0gc2luY2UgaXQncyBzbyBjbG9zZSEpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVG8gc3VwcHJlc3MgcHJpbnRpbmcgYW55IGJhbm5lciwgcGFzcyBhbiBlbXB0eSBzdHJpbmcuCisKIAogLi4gbWV0aG9kOjogSW50ZXJhY3RpdmVDb25zb2xlLnB1c2gobGluZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdCBiL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKaW5kZXggMDA5YWUyNi4uODQzZGUyNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CkBAIC0zNjUsMTggKzM2NSwyMyBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGluIDpwZXA6YDM4M2AuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgZXJyb3IgaGFuZGxlcnMgYXJlIHNwZWNpZmljIHRvIGEgc2luZ2xlIGNvZGVjOgorSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgZXJyb3IgaGFuZGxlcnMgYXJlIHNwZWNpZmljIHRvIFVuaWNvZGUgZW5jb2RpbmcKK3NjaGVtZXM6CiAKLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBWYWx1ZSAgICAgICAgICAgICB8IENvZGVjICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXxgYCdzdXJyb2dhdGVwYXNzJ2BgfCB1dGYtOCAgIHwgQWxsb3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHN1cnJvZ2F0ZSAgfAotfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBjb2RlcyBpbiBVVEYtOC4gICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKystLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBWYWx1ZSAgICAgICAgICAgICB8IENvZGVjICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3xgYCdzdXJyb2dhdGVwYXNzJ2BgfCB1dGYtOCwgdXRmLTE2LCB1dGYtMzIsIHwgQWxsb3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHN1cnJvZ2F0ZSAgfAorfCAgICAgICAgICAgICAgICAgICB8IHV0Zi0xNi1iZSwgdXRmLTE2LWxlLCAgfCBjb2RlcyBpbiBhbGwgdGhlIFVuaWNvZGUgZW5jb2Rpbmcgc2NoZW1lcy58Cit8ICAgICAgICAgICAgICAgICAgIHwgdXRmLTMyLWJlLCB1dGYtMzItbGUgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKICAgIFRoZSBgYCdzdXJyb2dhdGVlc2NhcGUnYGAgYW5kIGBgJ3N1cnJvZ2F0ZXBhc3MnYGAgZXJyb3IgaGFuZGxlcnMuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgYGAnc3Vycm9nYXRlcGFzcydgYCBlcnJvciBoYW5kbGVycyBub3cgd29ya3Mgd2l0aCB1dGYtMTZcKiBhbmQgdXRmLTMyXCogY29kZWNzLgorCiBUaGUgc2V0IG9mIGFsbG93ZWQgdmFsdWVzIGNhbiBiZSBleHRlbmRlZCB2aWEgOm1ldGg6YHJlZ2lzdGVyX2Vycm9yYC4KIAogCkBAIC0xMDIyLDYgKzEwMjcsMTAgQEAKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMDI2ICAgICAgICAgIHwgaWJtMTAyNiAgICAgICAgICAgICAgICAgICAgICAgIHwgVHVya2lzaCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgY3AxMTI1ICAgICAgICAgIHwgMTEyNSwgaWJtMTEyNSwgY3A4NjZ1LCBydXNjaWkgIHwgVWtyYWluaWFuICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmFkZGVkOjogMy40ICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMTQwICAgICAgICAgIHwgaWJtMTE0MCAgICAgICAgICAgICAgICAgICAgICAgIHwgV2VzdGVybiBFdXJvcGUgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMjUwICAgICAgICAgIHwgd2luZG93cy0xMjUwICAgICAgICAgICAgICAgICAgIHwgQ2VudHJhbCBhbmQgRWFzdGVybiBFdXJvcGUgICAgIHwKQEAgLTExNjcsNiArMTE3NiwxMiBAQAogfCB1dGZfOF9zaWcgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbGwgbGFuZ3VhZ2VzICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIHV0Zi0xNlwqIGFuZCB1dGYtMzJcKiBlbmNvZGVycyBubyBsb25nZXIgYWxsb3cgc3Vycm9nYXRlIGNvZGUgcG9pbnRzCisgICAoVStEODAwLS1VK0RGRkYpIHRvIGJlIGVuY29kZWQuICBUaGUgdXRmLTMyXCogZGVjb2RlcnMgbm8gbG9uZ2VyIGRlY29kZQorICAgYnl0ZSBzZXF1ZW5jZXMgdGhhdCBjb3JyZXNwb25kIHRvIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cy4KKworCiBQeXRob24gU3BlY2lmaWMgRW5jb2RpbmdzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTExNzcsNiArMTE5Miw5IEBACiBhcmJpdHJhcnkgZGF0YSB0cmFuc2Zvcm1zIHJhdGhlciB0aGFuIGp1c3QgdGV4dCBlbmNvZGluZ3MpLiAgRm9yIGFzeW1tZXRyaWMKIGNvZGVjcywgdGhlIHN0YXRlZCBwdXJwb3NlIGRlc2NyaWJlcyB0aGUgZW5jb2RpbmcgZGlyZWN0aW9uLgogCitUZXh0IEVuY29kaW5ncworXl5eXl5eXl5eXl5eXl4KKwogVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSA6Y2xhc3M6YHN0cmAgdG8gOmNsYXNzOmBieXRlc2AgZW5jb2RpbmcgYW5kCiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIHRvIDpjbGFzczpgc3RyYCBkZWNvZGluZywgc2ltaWxhciB0byB0aGUgVW5pY29kZSB0ZXh0CiBlbmNvZGluZ3MuCkBAIC0xMjIzLDU3ICsxMjQxLDgzIEBACiB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAuLiBkZXByZWNhdGVkOjogMy4zICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCi1UaGUgZm9sbG93aW5nIGNvZGVjcyBwcm92aWRlIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgdG8gOmNsYXNzOmBieXRlc2AKLW1hcHBpbmdzLgorLi4gX2JpbmFyeS10cmFuc2Zvcm1zOgorCitCaW5hcnkgVHJhbnNmb3JtcworXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSBiaW5hcnkgdHJhbnNmb3JtczogOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YAordG8gOmNsYXNzOmBieXRlc2AgbWFwcGluZ3MuCiAKIAotLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfEx8CisuLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8THxMfAogCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb2RlYyAgICAgICAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgfCBFbmNvZGVyL2RlY29kZXIgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IGJhc2U2NF9jb2RlYyBbI2I2NF1fIHwgQ29udmVydCBvcGVyYW5kIHRvIE1JTUUgICB8IDptZXRoOmBiYXNlNjQuYjY0ZW5jb2RlYCwgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IGJhc2U2NCAodGhlIHJlc3VsdCBhbHdheXMgfCA6bWV0aDpgYmFzZTY0LmI2NGRlY29kZWAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBpbmNsdWRlcyBhIHRyYWlsaW5nICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgYGAnXG4nYGApICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgYnoyX2NvZGVjICAgICAgICAgICAgfCBDb21wcmVzcyB0aGUgb3BlcmFuZCAgICAgIHwgOm1ldGg6YGJ6Mi5jb21wcmVzc2AsICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgdXNpbmcgYnoyICAgICAgICAgICAgICAgICB8IDptZXRoOmBiejIuZGVjb21wcmVzc2AgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgaGV4X2NvZGVjICAgICAgICAgICAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZlbmNvZGVgLCAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgaGV4YWRlY2ltYWwgICAgICAgICAgICAgICB8IDptZXRoOmBiYXNlNjQuYjE2ZGVjb2RlYCAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudGF0aW9uLCB3aXRoIHR3byAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBkaWdpdHMgcGVyIGJ5dGUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBxdW9wcmlfY29kZWMgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgfCA6bWV0aDpgcXVvcHJpLmVuY29kZXN0cmluZ2AsIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBxdW90ZWQgcHJpbnRhYmxlICAgICAgICAgIHwgOm1ldGg6YHF1b3ByaS5kZWNvZGVzdHJpbmdgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCB1dV9jb2RlYyAgICAgICAgICAgICB8IENvbnZlcnQgdGhlIG9wZXJhbmQgdXNpbmcgfCA6bWV0aDpgdXUuZW5jb2RlYCwgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1dWVuY29kZSAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHV1LmRlY29kZWAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCB6bGliX2NvZGVjICAgICAgICAgICB8IENvbXByZXNzIHRoZSBvcGVyYW5kICAgICAgfCA6bWV0aDpgemxpYi5jb21wcmVzc2AsICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1c2luZyBnemlwICAgICAgICAgICAgICAgIHwgOm1ldGg6YHpsaWIuZGVjb21wcmVzc2AgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvZGVjICAgICAgICAgICAgICAgIHwgQWxpYXNlcyAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgICAgfCBFbmNvZGVyIC8gZGVjb2RlciAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBiYXNlNjRfY29kZWMgWyNiNjRdXyB8IGJhc2U2NCwgYmFzZV82NCAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gTUlNRSAgICAgIHwgOm1ldGg6YGJhc2U2NC5iNjRlbmNvZGVgIC8gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IGJhc2U2NCAodGhlIHJlc3VsdCBhbHdheXMgICAgfCA6bWV0aDpgYmFzZTY0LmI2NGRlY29kZWAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgaW5jbHVkZXMgYSB0cmFpbGluZyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBgYCdcbidgYCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBhY2NlcHRzIGFueSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgYXMgaW5wdXQgZm9yIGVuY29kaW5nIGFuZCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBkZWNvZGluZyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYnoyX2NvZGVjICAgICAgICAgICAgfCBiejIgICAgICAgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICAgICB8IDptZXRoOmBiejIuY29tcHJlc3NgIC8gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1c2luZyBiejIgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJ6Mi5kZWNvbXByZXNzYCAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgaGV4X2NvZGVjICAgICAgICAgICAgfCBoZXggICAgICAgICAgICAgIHwgQ29udmVydCBvcGVyYW5kIHRvICAgICAgICAgICB8IDptZXRoOmBiYXNlNjQuYjE2ZW5jb2RlYCAvICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBoZXhhZGVjaW1hbCAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZkZWNvZGVgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudGF0aW9uLCB3aXRoIHR3byAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgZGlnaXRzIHBlciBieXRlICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHF1b3ByaV9jb2RlYyAgICAgICAgIHwgcXVvcHJpLCAgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgICAgfCA6bWV0aDpgcXVvcHJpLmVuY29kZXN0cmluZ2AgL3wKK3wgICAgICAgICAgICAgICAgICAgICAgfCBxdW90ZWRwcmludGFibGUsIHwgcXVvdGVkIHByaW50YWJsZSAgICAgICAgICAgICB8IDptZXRoOmBxdW9wcmkuZGVjb2Rlc3RyaW5nYCAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlZF9wcmludGFibGUgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgdXVfY29kZWMgICAgICAgICAgICAgfCB1dSAgICAgICAgICAgICAgIHwgQ29udmVydCB0aGUgb3BlcmFuZCB1c2luZyAgICB8IDptZXRoOmB1dS5lbmNvZGVgIC8gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1dWVuY29kZSAgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHV1LmRlY29kZWAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgemxpYl9jb2RlYyAgICAgICAgICAgfCB6aXAsIHpsaWIgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICAgICB8IDptZXRoOmB6bGliLmNvbXByZXNzYCAvICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1c2luZyBnemlwICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHpsaWIuZGVjb21wcmVzc2AgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotLi4gWyNiNjRdIFJhdGhlciB0aGFuIGFjY2VwdGluZyBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCwKLSAgIGBgJ2Jhc2U2NF9jb2RlYydgYCBhY2NlcHRzIG9ubHkgOmNsYXNzOmBieXRlc2AgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCBmb3IKLSAgIGVuY29kaW5nIGFuZCBvbmx5IDpjbGFzczpgYnl0ZXNgLCA6Y2xhc3M6YGJ5dGVhcnJheWAsIGFuZCBBU0NJSS1vbmx5Ci0gICBpbnN0YW5jZXMgb2YgOmNsYXNzOmBzdHJgIGZvciBkZWNvZGluZwotCi0KLVRoZSBmb2xsb3dpbmcgY29kZWNzIHByb3ZpZGUgOmNsYXNzOmBzdHJgIHRvIDpjbGFzczpgc3RyYCBtYXBwaW5ncy4KLQotLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfAotCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb2RlYyAgICAgICAgICAgICAgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IHJvdF8xMyAgICAgICAgICAgICB8IFJldHVybnMgdGhlIENhZXNhci1jeXBoZXIgfAotfCAgICAgICAgICAgICAgICAgICAgfCBlbmNyeXB0aW9uIG9mIHRoZSBvcGVyYW5kIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisuLiBbI2I2NF0gSW4gYWRkaXRpb24gdG8gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YCwKKyAgIGBgJ2Jhc2U2NF9jb2RlYydgYCBhbHNvIGFjY2VwdHMgQVNDSUktb25seSBpbnN0YW5jZXMgb2YgOmNsYXNzOmBzdHJgIGZvcgorICAgZGVjb2RpbmcKIAogLi4gdmVyc2lvbmFkZGVkOjogMy4yCi0gICBieXRlcy10by1ieXRlcyBhbmQgc3RyLXRvLXN0ciBjb2RlY3MuCisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYmluYXJ5IHRyYW5zZm9ybXMuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYWxpYXNlcyBmb3IgdGhlIGJpbmFyeSB0cmFuc2Zvcm1zLgorCisKKy4uIF90ZXh0LXRyYW5zZm9ybXM6CisKK1RleHQgVHJhbnNmb3JtcworXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBmb2xsb3dpbmcgY29kZWMgcHJvdmlkZXMgYSB0ZXh0IHRyYW5zZm9ybTogYSA6Y2xhc3M6YHN0cmAgdG8gOmNsYXNzOmBzdHJgCittYXBwaW5nLgorCisuLiB0YWJ1bGFyY29sdW1uczo6IHxsfGx8THwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvZGVjICAgICAgICAgICAgICB8IEFsaWFzZXMgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCByb3RfMTMgICAgICAgICAgICAgfCByb3QxMyAgIHwgUmV0dXJucyB0aGUgQ2Flc2FyLWN5cGhlciB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBlbmNyeXB0aW9uIG9mIHRoZSBvcGVyYW5kIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgIFJlc3RvcmF0aW9uIG9mIHRoZSBgYHJvdF8xM2BgIHRleHQgdHJhbnNmb3JtLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgUmVzdG9yYXRpb24gb2YgdGhlIGBgcm90MTNgYCBhbGlhcy4KIAogCiA6bW9kOmBlbmNvZGluZ3MuaWRuYWAgLS0tIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyBpbiBBcHBsaWNhdGlvbnMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMucnN0CmluZGV4IDRiMjE5MzIuLjM1NmY0NzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLnJzdApAQCAtMTUsNyArMTUsNyBAQAogICAgaW1wb3J0IGl0ZXJ0b29scwogICAgX19uYW1lX18gPSAnPGRvY3Rlc3Q+JwogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jb2xsZWN0aW9ucy9hYmMucHlgCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9fY29sbGVjdGlvbnNfYWJjLnB5YAogCiAtLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKaW5kZXggNGRlZjFkYy4uZjVmZTEyYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdApAQCAtNzYsMTQgKzc2LDE5IEBACiAgICAgICAgIGJlIG1vZGlmaWVkIHRvIGNoYW5nZSB3aGljaCBtYXBwaW5ncyBhcmUgc2VhcmNoZWQuICBUaGUgbGlzdCBzaG91bGQKICAgICAgICAgYWx3YXlzIGNvbnRhaW4gYXQgbGVhc3Qgb25lIG1hcHBpbmcuCiAKLSAgICAuLiBtZXRob2Q6OiBuZXdfY2hpbGQoKQorICAgIC4uIG1ldGhvZDo6IG5ld19jaGlsZChtPU5vbmUpCiAKLSAgICAgICAgUmV0dXJucyBhIG5ldyA6Y2xhc3M6YENoYWluTWFwYCBjb250YWluaW5nIGEgbmV3IDpjbGFzczpgZGljdGAgZm9sbG93ZWQgYnkKLSAgICAgICAgYWxsIG9mIHRoZSBtYXBzIGluIHRoZSBjdXJyZW50IGluc3RhbmNlLiAgQSBjYWxsIHRvIGBgZC5uZXdfY2hpbGQoKWBgIGlzCi0gICAgICAgIGVxdWl2YWxlbnQgdG86IGBgQ2hhaW5NYXAoe30sICpkLm1hcHMpYGAuICBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvcgorICAgICAgICBSZXR1cm5zIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYSBuZXcgbWFwIGZvbGxvd2VkIGJ5CisgICAgICAgIGFsbCBvZiB0aGUgbWFwcyBpbiB0aGUgY3VycmVudCBpbnN0YW5jZS4gIElmIGBgbWBgIGlzIHNwZWNpZmllZCwKKyAgICAgICAgaXQgYmVjb21lcyB0aGUgbmV3IG1hcCBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qgb2YgbWFwcGluZ3M7IGlmIG5vdAorICAgICAgICBzcGVjaWZpZWQsIGFuIGVtcHR5IGRpY3QgaXMgdXNlZCwgc28gdGhhdCBhIGNhbGwgdG8gYGBkLm5ld19jaGlsZCgpYGAKKyAgICAgICAgaXMgZXF1aXZhbGVudCB0bzogYGBDaGFpbk1hcCh7fSwgKmQubWFwcylgYC4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yCiAgICAgICAgIGNyZWF0aW5nIHN1YmNvbnRleHRzIHRoYXQgY2FuIGJlIHVwZGF0ZWQgd2l0aG91dCBhbHRlcmluZyB2YWx1ZXMgaW4gYW55CiAgICAgICAgIG9mIHRoZSBwYXJlbnQgbWFwcGluZ3MuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgVGhlIG9wdGlvbmFsIGBgbWBgIHBhcmFtZXRlciB3YXMgYWRkZWQuCisKICAgICAuLiBhdHRyaWJ1dGU6OiBwYXJlbnRzCiAKICAgICAgICAgUHJvcGVydHkgcmV0dXJuaW5nIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBtYXBzIGluCkBAIC0zNjksMTAgKzM3NCw2IEBACiAKIC4uIHNlZWFsc286OgogCi0gICAgKiBgQ291bnRlciBjbGFzcyA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NjExLz5gXwotICAgICAgYWRhcHRlZCBmb3IgUHl0aG9uIDIuNSBhbmQgYW4gZWFybHkgYEJhZyByZWNpcGUKLSAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8yNTkxNzQvPmBfIGZvciBQeXRob24gMi40LgotCiAgICAgKiBgQmFnIGNsYXNzIDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc21hbGx0YWxrL21hbnVhbC1iYXNlL2h0bWxfbm9kZS9CYWcuaHRtbD5gXwogICAgICAgaW4gU21hbGx0YWxrLgogCkBAIC05MTUsMTEgKzkxNiw2IEBACiAgICAgPj4+IGNsYXNzIFN0YXR1czoKICAgICAgICAgb3BlbiwgcGVuZGluZywgY2xvc2VkID0gcmFuZ2UoMykKIAotLi4gc2VlYWxzbzo6Ci0KLSAgICAqIGBOYW1lZCB0dXBsZSByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUwMDI2MS8+YF8KLSAgICAgIGFkYXB0ZWQgZm9yIFB5dGhvbiAyLjQuCi0KICAgICAqIGBSZWNpcGUgZm9yIG5hbWVkIHR1cGxlIGFic3RyYWN0IGJhc2UgY2xhc3Mgd2l0aCBhIG1ldGFjbGFzcyBtaXgtaW4KICAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc2MjktbmFtZWR0dXBsZWFiYy1hYnN0cmFjdC1iYXNlLWNsYXNzLW1peC1pbi1mb3ItbmFtZWQvPmBfCiAgICAgICBieSBKYW4gS2FsaXN6ZXdza2kuICBCZXNpZGVzIHByb3ZpZGluZyBhbiA6dGVybTpgYWJzdHJhY3QgYmFzZSBjbGFzc2AgZm9yCkBAIC05ODIsMTAgKzk3OCw2IEBACiBrZXl3b3JkIGFyZ3VtZW50cywgYnV0IHRoZWlyIG9yZGVyIGlzIGxvc3QgYmVjYXVzZSBQeXRob24ncyBmdW5jdGlvbiBjYWxsCiBzZW1hbnRpY3MgcGFzcy1pbiBrZXl3b3JkIGFyZ3VtZW50cyB1c2luZyBhIHJlZ3VsYXIgdW5vcmRlcmVkIGRpY3Rpb25hcnkuCiAKLS4uIHNlZWFsc286OgotCi0gICAgYEVxdWl2YWxlbnQgT3JkZXJlZERpY3QgcmVjaXBlIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2OTMvPmBfCi0gICAgdGhhdCBydW5zIG9uIFB5dGhvbiAyLjQgb3IgbGF0ZXIuCiAKIDpjbGFzczpgT3JkZXJlZERpY3RgIEV4YW1wbGVzIGFuZCBSZWNpcGVzCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0CmluZGV4IGYyYTUxMmYuLjBkZTI4MWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbmN1cnJlbmN5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb25jdXJyZW5jeS5yc3QKQEAgLTIwLDcgKzIwLDYgQEAKICAgIHN1YnByb2Nlc3MucnN0CiAgICBzY2hlZC5yc3QKICAgIHF1ZXVlLnJzdAotICAgc2VsZWN0LnJzdAogCiAKIFRoZSBmb2xsb3dpbmcgYXJlIHN1cHBvcnQgbW9kdWxlcyBmb3Igc29tZSBvZiB0aGUgYWJvdmUgc2VydmljZXM6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLnJzdAppbmRleCA1NzViMWVhLi4wNDk1NzM3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QKQEAgLTE2NCw2ICsxNjQsOSBAQAogYWxsb3dzIGl0IHRvIHNpZGUtc3RlcCB0aGUgOnRlcm06YEdsb2JhbCBJbnRlcnByZXRlciBMb2NrYCBidXQgYWxzbyBtZWFucyB0aGF0CiBvbmx5IHBpY2tsYWJsZSBvYmplY3RzIGNhbiBiZSBleGVjdXRlZCBhbmQgcmV0dXJuZWQuCiAKK1RoZSBgYF9fbWFpbl9fYGAgbW9kdWxlIG11c3QgYmUgaW1wb3J0YWJsZSBieSB3b3JrZXIgc3VicHJvY2Vzc2VzLiBUaGlzIG1lYW5zCit0aGF0IDpjbGFzczpgUHJvY2Vzc1Bvb2xFeGVjdXRvcmAgd2lsbCBub3Qgd29yayBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCisKIENhbGxpbmcgOmNsYXNzOmBFeGVjdXRvcmAgb3IgOmNsYXNzOmBGdXR1cmVgIG1ldGhvZHMgZnJvbSBhIGNhbGxhYmxlIHN1Ym1pdHRlZAogdG8gYSA6Y2xhc3M6YFByb2Nlc3NQb29sRXhlY3V0b3JgIHdpbGwgcmVzdWx0IGluIGRlYWRsb2NrLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdCBiL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CmluZGV4IGZiYTQ4ZjQuLjgyZWZkMGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CkBAIC05NSw2ICs5NSw4MyBAQAogICAgYGBwYWdlLmNsb3NlKClgYCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSA6a2V5d29yZDpgd2l0aGAgYmxvY2sgaXMgZXhpdGVkLgogCiAKKy4uIGZ1bmN0aW9uOjogc3VwcHJlc3MoKmV4Y2VwdGlvbnMpCisKKyAgIFJldHVybiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHN1cHByZXNzZXMgYW55IG9mIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9ucworICAgaWYgdGhleSBvY2N1ciBpbiB0aGUgYm9keSBvZiBhIHdpdGggc3RhdGVtZW50IGFuZCB0aGVuIHJlc3VtZXMgZXhlY3V0aW9uCisgICB3aXRoIHRoZSBmaXJzdCBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlIHdpdGggc3RhdGVtZW50LgorCisgICBBcyB3aXRoIGFueSBvdGhlciBtZWNoYW5pc20gdGhhdCBjb21wbGV0ZWx5IHN1cHByZXNzZXMgZXhjZXB0aW9ucywgdGhpcworICAgY29udGV4dCBtYW5hZ2VyIHNob3VsZCBiZSB1c2VkIG9ubHkgdG8gY292ZXIgdmVyeSBzcGVjaWZpYyBlcnJvcnMgd2hlcmUKKyAgIHNpbGVudGx5IGNvbnRpbnVpbmcgd2l0aCBwcm9ncmFtIGV4ZWN1dGlvbiBpcyBrbm93biB0byBiZSB0aGUgcmlnaHQKKyAgIHRoaW5nIHRvIGRvLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgICBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IHN1cHByZXNzCisKKyAgICAgICB3aXRoIHN1cHByZXNzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lZmlsZS50bXAnKQorCisgICAgICAgd2l0aCBzdXBwcmVzcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgIG9zLnJlbW92ZSgnc29tZW90aGVyZmlsZS50bXAnKQorCisgICBUaGlzIGNvZGUgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICAgICB0cnk6CisgICAgICAgICAgIG9zLnJlbW92ZSgnc29tZWZpbGUudG1wJykKKyAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgIHBhc3MKKworICAgICAgIHRyeToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lb3RoZXJmaWxlLnRtcCcpCisgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICBwYXNzCisKKyAgIFRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIDpyZWY6YHJlZW50cmFudCA8cmVlbnRyYW50LWNtcz5gLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IHJlZGlyZWN0X3N0ZG91dChuZXdfdGFyZ2V0KQorCisgICBDb250ZXh0IG1hbmFnZXIgZm9yIHRlbXBvcmFyaWx5IHJlZGlyZWN0aW5nIDpkYXRhOmBzeXMuc3Rkb3V0YCB0bworICAgYW5vdGhlciBmaWxlIG9yIGZpbGUtbGlrZSBvYmplY3QuCisKKyAgIFRoaXMgdG9vbCBhZGRzIGZsZXhpYmlsaXR5IHRvIGV4aXN0aW5nIGZ1bmN0aW9ucyBvciBjbGFzc2VzIHdob3NlIG91dHB1dAorICAgaXMgaGFyZHdpcmVkIHRvIHN0ZG91dC4KKworICAgRm9yIGV4YW1wbGUsIHRoZSBvdXRwdXQgb2YgOmZ1bmM6YGhlbHBgIG5vcm1hbGx5IGlzIHNlbnQgdG8gKnN5cy5zdGRvdXQqLgorICAgWW91IGNhbiBjYXB0dXJlIHRoYXQgb3V0cHV0IGluIGEgc3RyaW5nIGJ5IHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQgdG8gYQorICAgOmNsYXNzOmBpby5TdHJpbmdJT2Agb2JqZWN0OjoKKworICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgIGhlbHAocG93KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisKKyAgIFRvIHNlbmQgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgdG8gYSBmaWxlIG9uIGRpc2ssIHJlZGlyZWN0IHRoZSBvdXRwdXQKKyAgIHRvIGEgcmVndWxhciBmaWxlOjoKKworICAgICAgICB3aXRoIG9wZW4oJ2hlbHAudHh0JywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZik6CisgICAgICAgICAgICAgICAgaGVscChwb3cpCisKKyAgIFRvIHNlbmQgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgdG8gKnN5cy5zdGRlcnIqOjoKKworICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChzeXMuc3RkZXJyKToKKyAgICAgICAgICAgIGhlbHAocG93KQorCisgICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzaWRlIGVmZmVjdCBvbiA6ZGF0YTpgc3lzLnN0ZG91dGAgbWVhbnMgdGhhdCB0aGlzCisgICBjb250ZXh0IG1hbmFnZXIgaXMgbm90IHN1aXRhYmxlIGZvciB1c2UgaW4gbGlicmFyeSBjb2RlIGFuZCBtb3N0IHRocmVhZGVkCisgICBhcHBsaWNhdGlvbnMuIEl0IGFsc28gaGFzIG5vIGVmZmVjdCBvbiB0aGUgb3V0cHV0IG9mIHN1YnByb2Nlc3Nlcy4KKyAgIEhvd2V2ZXIsIGl0IGlzIHN0aWxsIGEgdXNlZnVsIGFwcHJvYWNoIGZvciBtYW55IHV0aWxpdHkgc2NyaXB0cy4KKworICAgVGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgOnJlZjpgcmV1c2FibGUgYnV0IG5vdCByZWVudHJhbnQgPHJldXNhYmxlLWNtcz5gLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjbGFzczo6IENvbnRleHREZWNvcmF0b3IoKQogCiAgICBBIGJhc2UgY2xhc3MgdGhhdCBlbmFibGVzIGEgY29udGV4dCBtYW5hZ2VyIHRvIGFsc28gYmUgdXNlZCBhcyBhIGRlY29yYXRvci4KQEAgLTUyMCwzICs1OTcsMTUzIEBACiAgICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uIDprZXl3b3JkOmB3aXRoYAogICAgICAgc3RhdGVtZW50LgogCisuLiBfc2luZ2xlLXVzZS1yZXVzYWJsZS1hbmQtcmVlbnRyYW50LWNtczoKKworU2luZ2xlIHVzZSwgcmV1c2FibGUgYW5kIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9zdCBjb250ZXh0IG1hbmFnZXJzIGFyZSB3cml0dGVuIGluIGEgd2F5IHRoYXQgbWVhbnMgdGhleSBjYW4gb25seSBiZQordXNlZCBlZmZlY3RpdmVseSBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgb25jZS4gVGhlc2Ugc2luZ2xlIHVzZQorY29udGV4dCBtYW5hZ2VycyBtdXN0IGJlIGNyZWF0ZWQgYWZyZXNoIGVhY2ggdGltZSB0aGV5J3JlIHVzZWQgLQorYXR0ZW1wdGluZyB0byB1c2UgdGhlbSBhIHNlY29uZCB0aW1lIHdpbGwgdHJpZ2dlciBhbiBleGNlcHRpb24gb3IKK290aGVyd2lzZSBub3Qgd29yayBjb3JyZWN0bHkuCisKK1RoaXMgY29tbW9uIGxpbWl0YXRpb24gbWVhbnMgdGhhdCBpdCBpcyBnZW5lcmFsbHkgYWR2aXNhYmxlIHRvIGNyZWF0ZQorY29udGV4dCBtYW5hZ2VycyBkaXJlY3RseSBpbiB0aGUgaGVhZGVyIG9mIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50Cit3aGVyZSB0aGV5IGFyZSB1c2VkIChhcyBzaG93biBpbiBhbGwgb2YgdGhlIHVzYWdlIGV4YW1wbGVzIGFib3ZlKS4KKworRmlsZXMgYXJlIGFuIGV4YW1wbGUgb2YgZWZmZWN0aXZlbHkgc2luZ2xlIHVzZSBjb250ZXh0IG1hbmFnZXJzLCBzaW5jZQordGhlIGZpcnN0IDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2lsbCBjbG9zZSB0aGUgZmlsZSwgcHJldmVudGluZyBhbnkKK2Z1cnRoZXIgSU8gb3BlcmF0aW9ucyB1c2luZyB0aGF0IGZpbGUgb2JqZWN0LgorCitDb250ZXh0IG1hbmFnZXJzIGNyZWF0ZWQgdXNpbmcgOmZ1bmM6YGNvbnRleHRtYW5hZ2VyYCBhcmUgYWxzbyBzaW5nbGUgdXNlCitjb250ZXh0IG1hbmFnZXJzLCBhbmQgd2lsbCBjb21wbGFpbiBhYm91dCB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZmFpbGluZwordG8geWllbGQgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHVzZSB0aGVtIGEgc2Vjb25kIHRpbWU6OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKKyAgICA+Pj4gQGNvbnRleHRtYW5hZ2VyCisgICAgLi4uIGRlZiBzaW5nbGV1c2UoKToKKyAgICAuLi4gICAgIHByaW50KCJCZWZvcmUiKQorICAgIC4uLiAgICAgeWllbGQKKyAgICAuLi4gICAgIHByaW50KCJBZnRlciIpCisgICAgLi4uCisgICAgPj4+IGNtID0gc2luZ2xldXNlKCkKKyAgICA+Pj4gd2l0aCBjbToKKyAgICAuLi4gICAgIHBhc3MKKyAgICAuLi4KKyAgICBCZWZvcmUKKyAgICBBZnRlcgorICAgID4+PiB3aXRoIGNtOgorICAgIC4uLiAgICBwYXNzCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAuLi4KKyAgICBSdW50aW1lRXJyb3I6IGdlbmVyYXRvciBkaWRuJ3QgeWllbGQKKworCisuLiBfcmVlbnRyYW50LWNtczoKKworUmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK01vcmUgc29waGlzdGljYXRlZCBjb250ZXh0IG1hbmFnZXJzIG1heSBiZSAicmVlbnRyYW50Ii4gVGhlc2UgY29udGV4dAorbWFuYWdlcnMgY2FuIG5vdCBvbmx5IGJlIHVzZWQgaW4gbXVsdGlwbGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudHMsCitidXQgbWF5IGFsc28gYmUgdXNlZCAqaW5zaWRlKiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgdGhhdCBpcyBhbHJlYWR5Cit1c2luZyB0aGUgc2FtZSBjb250ZXh0IG1hbmFnZXIuCisKKzpjbGFzczpgdGhyZWFkaW5nLlJMb2NrYCBpcyBhbiBleGFtcGxlIG9mIGEgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlciwgYXMgYXJlCis6ZnVuYzpgc3VwcHJlc3NgIGFuZCA6ZnVuYzpgcmVkaXJlY3Rfc3Rkb3V0YC4gSGVyZSdzIGEgdmVyeSBzaW1wbGUgZXhhbXBsZSBvZgorcmVlbnRyYW50IHVzZTo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCByZWRpcmVjdF9zdGRvdXQKKyAgICA+Pj4gZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KKyAgICA+Pj4gc3RyZWFtID0gU3RyaW5nSU8oKQorICAgID4+PiB3cml0ZV90b19zdHJlYW0gPSByZWRpcmVjdF9zdGRvdXQoc3RyZWFtKQorICAgID4+PiB3aXRoIHdyaXRlX3RvX3N0cmVhbToKKyAgICAuLi4gICAgIHByaW50KCJUaGlzIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSByYXRoZXIgdGhhbiBzdGRvdXQiKQorICAgIC4uLiAgICAgd2l0aCB3cml0ZV90b19zdHJlYW06CisgICAgLi4uICAgICAgICAgcHJpbnQoIlRoaXMgaXMgYWxzbyB3cml0dGVuIHRvIHRoZSBzdHJlYW0iKQorICAgIC4uLgorICAgID4+PiBwcmludCgiVGhpcyBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHN0ZG91dCIpCisgICAgVGhpcyBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHN0ZG91dAorICAgID4+PiBwcmludChzdHJlYW0uZ2V0dmFsdWUoKSkKKyAgICBUaGlzIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSByYXRoZXIgdGhhbiBzdGRvdXQKKyAgICBUaGlzIGlzIGFsc28gd3JpdHRlbiB0byB0aGUgc3RyZWFtCisKK1JlYWwgd29ybGQgZXhhbXBsZXMgb2YgcmVlbnRyYW5jeSBhcmUgbW9yZSBsaWtlbHkgdG8gaW52b2x2ZSBtdWx0aXBsZQorZnVuY3Rpb25zIGNhbGxpbmcgZWFjaCBvdGhlciBhbmQgaGVuY2UgYmUgZmFyIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGlzCitleGFtcGxlLgorCitOb3RlIGFsc28gdGhhdCBiZWluZyByZWVudHJhbnQgaXMgKm5vdCogdGhlIHNhbWUgdGhpbmcgYXMgYmVpbmcgdGhyZWFkIHNhZmUuCis6ZnVuYzpgcmVkaXJlY3Rfc3Rkb3V0YCwgZm9yIGV4YW1wbGUsIGlzIGRlZmluaXRlbHkgbm90IHRocmVhZCBzYWZlLCBhcyBpdAorbWFrZXMgYSBnbG9iYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBzeXN0ZW0gc3RhdGUgYnkgYmluZGluZyA6ZGF0YTpgc3lzLnN0ZG91dGAKK3RvIGEgZGlmZmVyZW50IHN0cmVhbS4KKworCisuLiBfcmV1c2FibGUtY21zOgorCitSZXVzYWJsZSBjb250ZXh0IG1hbmFnZXJzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0Rpc3RpbmN0IGZyb20gYm90aCBzaW5nbGUgdXNlIGFuZCByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycyBhcmUgInJldXNhYmxlIgorY29udGV4dCBtYW5hZ2VycyAob3IsIHRvIGJlIGNvbXBsZXRlbHkgZXhwbGljaXQsICJyZXVzYWJsZSwgYnV0IG5vdAorcmVlbnRyYW50IiBjb250ZXh0IG1hbmFnZXJzLCBzaW5jZSByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycyBhcmUgYWxzbworcmV1c2FibGUpLiBUaGVzZSBjb250ZXh0IG1hbmFnZXJzIHN1cHBvcnQgYmVpbmcgdXNlZCBtdWx0aXBsZSB0aW1lcywgYnV0Cit3aWxsIGZhaWwgKG9yIG90aGVyd2lzZSBub3Qgd29yayBjb3JyZWN0bHkpIGlmIHRoZSBzcGVjaWZpYyBjb250ZXh0IG1hbmFnZXIKK2luc3RhbmNlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiBhIGNvbnRhaW5pbmcgd2l0aCBzdGF0ZW1lbnQuCisKKzpjbGFzczpgdGhyZWFkaW5nLkxvY2tgIGlzIGFuIGV4YW1wbGUgb2YgYSByZXVzYWJsZSwgYnV0IG5vdCByZWVudHJhbnQsCitjb250ZXh0IG1hbmFnZXIgKGZvciBhIHJlZW50cmFudCBsb2NrLCBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlCis6Y2xhc3M6YHRocmVhZGluZy5STG9ja2AgaW5zdGVhZCkuCisKK0Fub3RoZXIgZXhhbXBsZSBvZiBhIHJldXNhYmxlLCBidXQgbm90IHJlZW50cmFudCwgY29udGV4dCBtYW5hZ2VyIGlzCis6Y2xhc3M6YEV4aXRTdGFja2AsIGFzIGl0IGludm9rZXMgKmFsbCogY3VycmVudGx5IHJlZ2lzdGVyZWQgY2FsbGJhY2tzCit3aGVuIGxlYXZpbmcgYW55IHdpdGggc3RhdGVtZW50LCByZWdhcmRsZXNzIG9mIHdoZXJlIHRob3NlIGNhbGxiYWNrcword2VyZSBhZGRlZDo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCBFeGl0U3RhY2sKKyAgICA+Pj4gc3RhY2sgPSBFeGl0U3RhY2soKQorICAgID4+PiB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBmaXJzdCBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIGZpcnN0IGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgZmlyc3QgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIGZpcnN0IGNvbnRleHQKKyAgICA+Pj4gd2l0aCBzdGFjazoKKyAgICAuLi4gICAgIHN0YWNrLmNhbGxiYWNrKHByaW50LCAiQ2FsbGJhY2s6IGZyb20gc2Vjb25kIGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgc2Vjb25kIGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgc2Vjb25kIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBzZWNvbmQgY29udGV4dAorICAgID4+PiB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0IikKKyAgICAuLi4gICAgIHdpdGggc3RhY2s6CisgICAgLi4uICAgICAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgICAgICBwcmludCgiTGVhdmluZyBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIG91dGVyIGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgaW5uZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0CisgICAgTGVhdmluZyBvdXRlciBjb250ZXh0CisKK0FzIHRoZSBvdXRwdXQgZnJvbSB0aGUgZXhhbXBsZSBzaG93cywgcmV1c2luZyBhIHNpbmdsZSBzdGFjayBvYmplY3QgYWNyb3NzCittdWx0aXBsZSB3aXRoIHN0YXRlbWVudHMgd29ya3MgY29ycmVjdGx5LCBidXQgYXR0ZW1wdGluZyB0byBuZXN0IHRoZW0KK3dpbGwgY2F1c2UgdGhlIHN0YWNrIHRvIGJlIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiB0aGUgaW5uZXJtb3N0IHdpdGgKK3N0YXRlbWVudCwgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgZGVzaXJhYmxlIGJlaGF2aW91ci4KKworVXNpbmcgc2VwYXJhdGUgOmNsYXNzOmBFeGl0U3RhY2tgIGluc3RhbmNlcyBpbnN0ZWFkIG9mIHJldXNpbmcgYSBzaW5nbGUKK2luc3RhbmNlIGF2b2lkcyB0aGF0IHByb2JsZW06OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgRXhpdFN0YWNrCisgICAgPj4+IHdpdGggRXhpdFN0YWNrKCkgYXMgb3V0ZXJfc3RhY2s6CisgICAgLi4uICAgICBvdXRlcl9zdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgd2l0aCBFeGl0U3RhY2soKSBhcyBpbm5lcl9zdGFjazoKKyAgICAuLi4gICAgICAgICBpbm5lcl9zdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgICAgIHByaW50KCJMZWF2aW5nIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgb3V0ZXIgY29udGV4dCIpCisgICAgLi4uCisgICAgTGVhdmluZyBpbm5lciBjb250ZXh0CisgICAgQ2FsbGJhY2s6IGZyb20gaW5uZXIgY29udGV4dAorICAgIExlYXZpbmcgb3V0ZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS9kYXRhdHlwZXMucnN0CmluZGV4IGQwMzgyZTAuLjQ4YWYwODIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGF0YXR5cGVzLnJzdApAQCAtMzAsMyArMzAsNCBAQAogICAgY29weS5yc3QKICAgIHBwcmludC5yc3QKICAgIHJlcHJsaWIucnN0CisgICBlbnVtLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0IGIvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CmluZGV4IDA2NWU4NTAuLmU0ZjFlYjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKQEAgLTE3MCwxMCArMTcwLDEyIEBACiAgICAqIGBgMCA8PSBzZWNvbmRzIDwgMzYwMCoyNGBgICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgaW4gb25lIGRheSkKICAgICogYGAtOTk5OTk5OTk5IDw9IGRheXMgPD0gOTk5OTk5OTk5YGAKIAotICAgSWYgYW55IGFyZ3VtZW50IGlzIGEgZmxvYXQgYW5kIHRoZXJlIGFyZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcywgdGhlIGZyYWN0aW9uYWwKLSAgIG1pY3Jvc2Vjb25kcyBsZWZ0IG92ZXIgZnJvbSBhbGwgYXJndW1lbnRzIGFyZSBjb21iaW5lZCBhbmQgdGhlaXIgc3VtIGlzIHJvdW5kZWQKLSAgIHRvIHRoZSBuZWFyZXN0IG1pY3Jvc2Vjb25kLiAgSWYgbm8gYXJndW1lbnQgaXMgYSBmbG9hdCwgdGhlIGNvbnZlcnNpb24gYW5kCi0gICBub3JtYWxpemF0aW9uIHByb2Nlc3NlcyBhcmUgZXhhY3QgKG5vIGluZm9ybWF0aW9uIGlzIGxvc3QpLgorICAgSWYgYW55IGFyZ3VtZW50IGlzIGEgZmxvYXQgYW5kIHRoZXJlIGFyZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcywKKyAgIHRoZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcyBsZWZ0IG92ZXIgZnJvbSBhbGwgYXJndW1lbnRzIGFyZQorICAgY29tYmluZWQgYW5kIHRoZWlyIHN1bSBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IG1pY3Jvc2Vjb25kIHVzaW5nCisgICByb3VuZC1oYWxmLXRvLWV2ZW4gdGllYnJlYWtlci4gIElmIG5vIGFyZ3VtZW50IGlzIGEgZmxvYXQsIHRoZQorICAgY29udmVyc2lvbiBhbmQgbm9ybWFsaXphdGlvbiBwcm9jZXNzZXMgYXJlIGV4YWN0IChubyBpbmZvcm1hdGlvbiBpcworICAgbG9zdCkuCiAKICAgIElmIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIGRheXMgbGllcyBvdXRzaWRlIHRoZSBpbmRpY2F0ZWQgcmFuZ2UsCiAgICA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBpcyByYWlzZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kYm0ucnN0IGIvRG9jL2xpYnJhcnkvZGJtLnJzdAppbmRleCA4MWEwNWM3Li5mNTQ5NmQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kYm0ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RibS5yc3QKQEAgLTczLDMzICs3MywzOSBAQAogc3RyaW5ncyBhcmUgdXNlZCB0aGV5IGFyZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byB0aGUgZGVmYXVsdCBlbmNvZGluZyBiZWZvcmUKIGJlaW5nIHN0b3JlZC4KIAorVGhlc2Ugb2JqZWN0cyBhbHNvIHN1cHBvcnQgYmVpbmcgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQsIHdoaWNoCit3aWxsIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlbSB3aGVuIGRvbmUuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBBZGRlZCBuYXRpdmUgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCB0byB0aGUgb2JqZWN0cworICAgcmV0dXJuZWQgYnkgOmZ1bmM6YC5vcGVuYC4KKwogVGhlIGZvbGxvd2luZyBleGFtcGxlIHJlY29yZHMgc29tZSBob3N0bmFtZXMgYW5kIGEgY29ycmVzcG9uZGluZyB0aXRsZSwgIGFuZAogdGhlbiBwcmludHMgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2U6OgogCiAgICBpbXBvcnQgZGJtCiAKICAgICMgT3BlbiBkYXRhYmFzZSwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LgotICAgZGIgPSBkYm0ub3BlbignY2FjaGUnLCAnYycpCisgICB3aXRoIGRibS5vcGVuKCdjYWNoZScsICdjJykgYXMgZGI6CiAKLSAgICMgUmVjb3JkIHNvbWUgdmFsdWVzCi0gICBkYltiJ2hlbGxvJ10gPSBiJ3RoZXJlJwotICAgZGJbJ3d3dy5weXRob24ub3JnJ10gPSAnUHl0aG9uIFdlYnNpdGUnCi0gICBkYlsnd3d3LmNubi5jb20nXSA9ICdDYWJsZSBOZXdzIE5ldHdvcmsnCisgICAgICAgIyBSZWNvcmQgc29tZSB2YWx1ZXMKKyAgICAgICBkYltiJ2hlbGxvJ10gPSBiJ3RoZXJlJworICAgICAgIGRiWyd3d3cucHl0aG9uLm9yZyddID0gJ1B5dGhvbiBXZWJzaXRlJworICAgICAgIGRiWyd3d3cuY25uLmNvbSddID0gJ0NhYmxlIE5ld3MgTmV0d29yaycKIAotICAgIyBOb3RlIHRoYXQgdGhlIGtleXMgYXJlIGNvbnNpZGVyZWQgYnl0ZXMgbm93LgotICAgYXNzZXJ0IGRiW2Ind3d3LnB5dGhvbi5vcmcnXSA9PSBiJ1B5dGhvbiBXZWJzaXRlJwotICAgIyBOb3RpY2UgaG93IHRoZSB2YWx1ZSBpcyBub3cgaW4gYnl0ZXMuCi0gICBhc3NlcnQgZGJbJ3d3dy5jbm4uY29tJ10gPT0gYidDYWJsZSBOZXdzIE5ldHdvcmsnCisgICAgICAgIyBOb3RlIHRoYXQgdGhlIGtleXMgYXJlIGNvbnNpZGVyZWQgYnl0ZXMgbm93LgorICAgICAgIGFzc2VydCBkYltiJ3d3dy5weXRob24ub3JnJ10gPT0gYidQeXRob24gV2Vic2l0ZScKKyAgICAgICAjIE5vdGljZSBob3cgdGhlIHZhbHVlIGlzIG5vdyBpbiBieXRlcy4KKyAgICAgICBhc3NlcnQgZGJbJ3d3dy5jbm4uY29tJ10gPT0gYidDYWJsZSBOZXdzIE5ldHdvcmsnCiAKLSAgICMgT2Z0ZW4tdXNlZCBtZXRob2RzIG9mIHRoZSBkaWN0IGludGVyZmFjZSB3b3JrIHRvby4KLSAgIHByaW50KGRiLmdldCgncHl0aG9uLm9yZycsIGInbm90IHByZXNlbnQnKSkKKyAgICAgICAjIE9mdGVuLXVzZWQgbWV0aG9kcyBvZiB0aGUgZGljdCBpbnRlcmZhY2Ugd29yayB0b28uCisgICAgICAgcHJpbnQoZGIuZ2V0KCdweXRob24ub3JnJywgYidub3QgcHJlc2VudCcpKQogCi0gICAjIFN0b3JpbmcgYSBub24tc3RyaW5nIGtleSBvciB2YWx1ZSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiAobW9zdAotICAgIyBsaWtlbHkgYSBUeXBlRXJyb3IpLgotICAgZGJbJ3d3dy55YWhvby5jb20nXSA9IDQKKyAgICAgICAjIFN0b3JpbmcgYSBub24tc3RyaW5nIGtleSBvciB2YWx1ZSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiAobW9zdAorICAgICAgICMgbGlrZWx5IGEgVHlwZUVycm9yKS4KKyAgICAgICBkYlsnd3d3LnlhaG9vLmNvbSddID0gNAogCi0gICAjIENsb3NlIHdoZW4gZG9uZS4KLSAgIGRiLmNsb3NlKCkKKyAgICMgZGIgaXMgYXV0b21hdGljYWxseSBjbG9zZWQgd2hlbiBsZWF2aW5nIHRoZSB3aXRoIHN0YXRlbWVudC4KIAogCiAuLiBzZWVhbHNvOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RlYnVnLnJzdCBiL0RvYy9saWJyYXJ5L2RlYnVnLnJzdAppbmRleCBjNjlmYjFjLi44OGEyZmE2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZWJ1Zy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGVidWcucnN0CkBAIC0xNSwzICsxNSw0IEBACiAgICBwcm9maWxlLnJzdAogICAgdGltZWl0LnJzdAogICAgdHJhY2UucnN0CisgICB0cmFjZW1hbGxvYy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdCBiL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdAppbmRleCAyMzY4NzY5Li4wNmU3MDQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZXZlbG9wbWVudC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGV2ZWxvcG1lbnQucnN0CkBAIC0yMyw0ICsyMywzIEBACiAgICB1bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdAogICAgMnRvMy5yc3QKICAgIHRlc3QucnN0Ci0gICB2ZW52LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlzLnJzdCBiL0RvYy9saWJyYXJ5L2Rpcy5yc3QKaW5kZXggZWM3MTEyZC4uZDg2NTUwZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGlzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kaXMucnN0CkBAIC0yNiw3ICsyNiw4IEBACiAgICBkZWYgbXlmdW5jKGFsaXN0KToKICAgICAgICByZXR1cm4gbGVuKGFsaXN0KQogCi10aGUgZm9sbG93aW5nIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSBkaXNhc3NlbWJseSBvZiA6ZnVuYzpgbXlmdW5jYDo6Cit0aGUgZm9sbG93aW5nIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgZGlzYXNzZW1ibHkgb2YKKzpmdW5jOmBteWZ1bmNgOjoKIAogICAgPj4+IGRpcy5kaXMobXlmdW5jKQogICAgICAyICAgICAgICAgICAwIExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChsZW4pCkBAIC0zNiw4ICszNyw3NyBAQAogCiAoVGhlICIyIiBpcyBhIGxpbmUgbnVtYmVyKS4KIAotVGhlIDptb2Q6YGRpc2AgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNvbnN0YW50czoKK0J5dGVjb2RlIGFuYWx5c2lzCistLS0tLS0tLS0tLS0tLS0tLQogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworVGhlIGJ5dGVjb2RlIGFuYWx5c2lzIEFQSSBhbGxvd3MgcGllY2VzIG9mIFB5dGhvbiBjb2RlIHRvIGJlIHdyYXBwZWQgaW4gYQorOmNsYXNzOmBCeXRlY29kZWAgb2JqZWN0IHRoYXQgcHJvdmlkZXMgZWFzeSBhY2Nlc3MgdG8gZGV0YWlscyBvZiB0aGUKK2NvbXBpbGVkIGNvZGUuCisKKy4uIGNsYXNzOjogQnl0ZWNvZGUoeCwgKiwgZmlyc3RfbGluZT1Ob25lLCBjdXJyZW50X29mZnNldD1Ob25lKQorCisgICBBbmFseXNlIHRoZSBieXRlY29kZSBjb3JyZXNwb25kaW5nIHRvIGEgZnVuY3Rpb24sIG1ldGhvZCwgc3RyaW5nIG9mCisgICBzb3VyY2UgY29kZSwgb3IgYSBjb2RlIG9iamVjdCAoYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGNvbXBpbGVgKS4KKworICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIG1hbnkgb2YgdGhlIGZ1bmN0aW9ucyBsaXN0ZWQgYmVsb3csCisgICBtb3N0IG5vdGFibHkgOmZ1bmM6YGdldF9pbnN0cnVjdGlvbnNgLCBhcyBpdGVyYXRpbmcgb3ZlciBhCisgICA6Y2xhc3M6YEJ5dGVjb2RlYCBpbnN0YW5jZSB5aWVsZHMgdGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMgYXMKKyAgIDpjbGFzczpgSW5zdHJ1Y3Rpb25gIGluc3RhbmNlcy4KKworICAgSWYgKmZpcnN0X2xpbmUqIGlzIG5vdCBOb25lLCBpdCBpbmRpY2F0ZXMgdGhlIGxpbmUgbnVtYmVyIHRoYXQgc2hvdWxkCisgICBiZSByZXBvcnRlZCBmb3IgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIGluIHRoZSBkaXNhc3NlbWJsZWQgY29kZS4KKyAgIE90aGVyd2lzZSwgdGhlIHNvdXJjZSBsaW5lIGluZm9ybWF0aW9uIChpZiBhbnkpIGlzIHRha2VuIGRpcmVjdGx5IGZyb20KKyAgIHRoZSBkaXNhc3NlbWJsZWQgY29kZSBvYmplY3QuCisKKyAgIElmICpjdXJyZW50X29mZnNldCogaXMgbm90IE5vbmUsIGl0IHJlZmVycyB0byBhbiBpbnN0cnVjdGlvbiBvZmZzZXQKKyAgIGluIHRoZSBkaXNhc3NlbWJsZWQgY29kZS4gU2V0dGluZyB0aGlzIG1lYW5zIDptZXRoOmBkaXNgIHdpbGwgZGlzcGxheQorICAgYSAiY3VycmVudCBpbnN0cnVjdGlvbiIgbWFya2VyIGFnYWluc3QgdGhlIHNwZWNpZmllZCBvcGNvZGUuCisKKyAgIC4uIGNsYXNzbWV0aG9kOjogZnJvbV90cmFjZWJhY2sodGIpCisKKyAgICAgIENvbnN0cnVjdCBhIDpjbGFzczpgQnl0ZWNvZGVgIGluc3RhbmNlIGZyb20gdGhlIGdpdmVuIHRyYWNlYmFjaywKKyAgICAgIHNldHRpbmcgKmN1cnJlbnRfb2Zmc2V0KiB0byB0aGUgaW5zdHJ1Y3Rpb24gcmVzcG9uc2libGUgZm9yIHRoZQorICAgICAgZXhjZXB0aW9uLgorCisgICAuLiBkYXRhOjogY29kZW9iagorCisgICAgICBUaGUgY29tcGlsZWQgY29kZSBvYmplY3QuCisKKyAgIC4uIGRhdGE6OiBmaXJzdF9saW5lCisKKyAgICAgIFRoZSBmaXJzdCBzb3VyY2UgbGluZSBvZiB0aGUgY29kZSBvYmplY3QgKGlmIGF2YWlsYWJsZSkKKworICAgLi4gbWV0aG9kOjogZGlzKCkKKworICAgICAgUmV0dXJuIGEgZm9ybWF0dGVkIHZpZXcgb2YgdGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMgKHRoZSBzYW1lIGFzCisgICAgICBwcmludGVkIGJ5IDpmdW5jOmBkaXNgLCBidXQgcmV0dXJuZWQgYXMgYSBtdWx0aS1saW5lIHN0cmluZykuCisKKyAgIC4uIG1ldGhvZDo6IGluZm8oKQorCisgICAgICBSZXR1cm4gYSBmb3JtYXR0ZWQgbXVsdGktbGluZSBzdHJpbmcgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgIGNvZGUgb2JqZWN0LCBsaWtlIDpmdW5jOmBjb2RlX2luZm9gLgorCitFeGFtcGxlOjoKKworICAgID4+PiBieXRlY29kZSA9IGRpcy5CeXRlY29kZShteWZ1bmMpCisgICAgPj4+IGZvciBpbnN0ciBpbiBieXRlY29kZToKKyAgICAuLi4gICAgIHByaW50KGluc3RyLm9wbmFtZSkKKyAgICAuLi4KKyAgICBMT0FEX0dMT0JBTAorICAgIExPQURfRkFTVAorICAgIENBTExfRlVOQ1RJT04KKyAgICBSRVRVUk5fVkFMVUUKKworCitBbmFseXNpcyBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOm1vZDpgZGlzYCBtb2R1bGUgYWxzbyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgYW5hbHlzaXMgZnVuY3Rpb25zIHRoYXQKK2NvbnZlcnQgdGhlIGlucHV0IGRpcmVjdGx5IHRvIHRoZSBkZXNpcmVkIG91dHB1dC4gVGhleSBjYW4gYmUgdXNlZnVsIGlmCitvbmx5IGEgc2luZ2xlIG9wZXJhdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQsIHNvIHRoZSBpbnRlcm1lZGlhdGUgYW5hbHlzaXMKK29iamVjdCBpc24ndCB1c2VmdWw6CiAKIC4uIGZ1bmN0aW9uOjogY29kZV9pbmZvKHgpCiAKQEAgLTUxLDE3ICsxMjEsMjIgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKLS4uIGZ1bmN0aW9uOjogc2hvd19jb2RlKHgpCisuLiBmdW5jdGlvbjo6IHNob3dfY29kZSh4LCAqLCBmaWxlPU5vbmUpCiAKICAgIFByaW50IGRldGFpbGVkIGNvZGUgb2JqZWN0IGluZm9ybWF0aW9uIGZvciB0aGUgc3VwcGxpZWQgZnVuY3Rpb24sIG1ldGhvZCwKLSAgIHNvdXJjZSBjb2RlIHN0cmluZyBvciBjb2RlIG9iamVjdCB0byBzdGRvdXQuCisgICBzb3VyY2UgY29kZSBzdHJpbmcgb3IgY29kZSBvYmplY3QgdG8gKmZpbGUqIChvciBgYHN5cy5zdGRvdXRgYCBpZiAqZmlsZSoKKyAgIGlzIG5vdCBzcGVjaWZpZWQpLgogCi0gICBUaGlzIGlzIGEgY29udmVuaWVudCBzaG9ydGhhbmQgZm9yIGBgcHJpbnQoY29kZV9pbmZvKHgpKWBgLCBpbnRlbmRlZCBmb3IKLSAgIGludGVyYWN0aXZlIGV4cGxvcmF0aW9uIGF0IHRoZSBpbnRlcnByZXRlciBwcm9tcHQuCisgICBUaGlzIGlzIGEgY29udmVuaWVudCBzaG9ydGhhbmQgZm9yIGBgcHJpbnQoY29kZV9pbmZvKHgpLCBmaWxlPWZpbGUpYGAsCisgICBpbnRlbmRlZCBmb3IgaW50ZXJhY3RpdmUgZXhwbG9yYXRpb24gYXQgdGhlIGludGVycHJldGVyIHByb21wdC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKLS4uIGZ1bmN0aW9uOjogZGlzKHg9Tm9uZSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBgYGZpbGVgYCBwYXJhbWV0ZXIKKworCisuLiBmdW5jdGlvbjo6IGRpcyh4PU5vbmUsICosIGZpbGU9Tm9uZSkKIAogICAgRGlzYXNzZW1ibGUgdGhlICp4KiBvYmplY3QuICAqeCogY2FuIGRlbm90ZSBlaXRoZXIgYSBtb2R1bGUsIGEgY2xhc3MsIGEKICAgIG1ldGhvZCwgYSBmdW5jdGlvbiwgYSBjb2RlIG9iamVjdCwgYSBzdHJpbmcgb2Ygc291cmNlIGNvZGUgb3IgYSBieXRlIHNlcXVlbmNlCkBAIC03MiwxNiArMTQ3LDI4IEBACiAgICBkaXNhc3NlbWJsZWQuICBJZiBubyBvYmplY3QgaXMgcHJvdmlkZWQsIHRoaXMgZnVuY3Rpb24gZGlzYXNzZW1ibGVzIHRoZSBsYXN0CiAgICB0cmFjZWJhY2suCiAKKyAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkIGBgZmlsZWBgIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgogCi0uLiBmdW5jdGlvbjo6IGRpc3RiKHRiPU5vbmUpCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgYGBmaWxlYGAgcGFyYW1ldGVyCisKKworLi4gZnVuY3Rpb246OiBkaXN0Yih0Yj1Ob25lLCAqLCBmaWxlPU5vbmUpCiAKICAgIERpc2Fzc2VtYmxlIHRoZSB0b3Atb2Ytc3RhY2sgZnVuY3Rpb24gb2YgYSB0cmFjZWJhY2ssIHVzaW5nIHRoZSBsYXN0CiAgICB0cmFjZWJhY2sgaWYgbm9uZSB3YXMgcGFzc2VkLiAgVGhlIGluc3RydWN0aW9uIGNhdXNpbmcgdGhlIGV4Y2VwdGlvbiBpcwogICAgaW5kaWNhdGVkLgogCisgICBUaGUgZGlzYXNzZW1ibHkgaXMgd3JpdHRlbiBhcyB0ZXh0IHRvIHRoZSBzdXBwbGllZCBgYGZpbGVgYCBhcmd1bWVudCBpZgorICAgcHJvdmlkZWQgYW5kIHRvIGBgc3lzLnN0ZG91dGBgIG90aGVyd2lzZS4KIAotLi4gZnVuY3Rpb246OiBkaXNhc3NlbWJsZShjb2RlLCBsYXN0aT0tMSkKLSAgICAgICAgICAgICAgZGlzY28oY29kZSwgbGFzdGk9LTEpCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgYGBmaWxlYGAgcGFyYW1ldGVyCisKKworLi4gZnVuY3Rpb246OiBkaXNhc3NlbWJsZShjb2RlLCBsYXN0aT0tMSwgKiwgZmlsZT1Ob25lKQorICAgICAgICAgICAgICBkaXNjbyhjb2RlLCBsYXN0aT0tMSwgKiwgZmlsZT1Ob25lKQogCiAgICBEaXNhc3NlbWJsZSBhIGNvZGUgb2JqZWN0LCBpbmRpY2F0aW5nIHRoZSBsYXN0IGluc3RydWN0aW9uIGlmICpsYXN0aSogd2FzCiAgICBwcm92aWRlZC4gIFRoZSBvdXRwdXQgaXMgZGl2aWRlZCBpbiB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CkBAIC05Nyw2ICsxODQsMjggQEAKICAgIFRoZSBwYXJhbWV0ZXIgaW50ZXJwcmV0YXRpb24gcmVjb2duaXplcyBsb2NhbCBhbmQgZ2xvYmFsIHZhcmlhYmxlIG5hbWVzLAogICAgY29uc3RhbnQgdmFsdWVzLCBicmFuY2ggdGFyZ2V0cywgYW5kIGNvbXBhcmUgb3BlcmF0b3JzLgogCisgICBUaGUgZGlzYXNzZW1ibHkgaXMgd3JpdHRlbiBhcyB0ZXh0IHRvIHRoZSBzdXBwbGllZCBgYGZpbGVgYCBhcmd1bWVudCBpZgorICAgcHJvdmlkZWQgYW5kIHRvIGBgc3lzLnN0ZG91dGBgIG90aGVyd2lzZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIGBgZmlsZWBgIHBhcmFtZXRlcgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2luc3RydWN0aW9ucyh4LCAqLCBmaXJzdF9saW5lPU5vbmUpCisKKyAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHN1cHBsaWVkIGZ1bmN0aW9uLCBtZXRob2QsCisgICBzb3VyY2UgY29kZSBzdHJpbmcgb3IgY29kZSBvYmplY3QuCisKKyAgIFRoZSBpdGVyYXRvciBnZW5lcmF0ZXMgYSBzZXJpZXMgb2YgOmNsYXNzOmBJbnN0cnVjdGlvbmAgbmFtZWQgdHVwbGVzCisgICBnaXZpbmcgdGhlIGRldGFpbHMgb2YgZWFjaCBvcGVyYXRpb24gaW4gdGhlIHN1cHBsaWVkIGNvZGUuCisKKyAgIElmICpmaXJzdF9saW5lKiBpcyBub3QgTm9uZSwgaXQgaW5kaWNhdGVzIHRoZSBsaW5lIG51bWJlciB0aGF0IHNob3VsZAorICAgYmUgcmVwb3J0ZWQgZm9yIHRoZSBmaXJzdCBzb3VyY2UgbGluZSBpbiB0aGUgZGlzYXNzZW1ibGVkIGNvZGUuCisgICBPdGhlcndpc2UsIHRoZSBzb3VyY2UgbGluZSBpbmZvcm1hdGlvbiAoaWYgYW55KSBpcyB0YWtlbiBkaXJlY3RseSBmcm9tCisgICB0aGUgZGlzYXNzZW1ibGVkIGNvZGUgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiAuLiBmdW5jdGlvbjo6IGZpbmRsaW5lc3RhcnRzKGNvZGUpCiAKQEAgLTExMSw2MSArMjIwLDY3IEBACiAgICByZXR1cm4gYSBsaXN0IG9mIHRoZXNlIG9mZnNldHMuCiAKIAotLi4gZGF0YTo6IG9wbmFtZQorLi4gZnVuY3Rpb246OiBzdGFja19lZmZlY3Qob3Bjb2RlLCBbb3BhcmddKQogCi0gICBTZXF1ZW5jZSBvZiBvcGVyYXRpb24gbmFtZXMsIGluZGV4YWJsZSB1c2luZyB0aGUgYnl0ZWNvZGUuCisgICBDb21wdXRlIHRoZSBzdGFjayBlZmZlY3Qgb2YgKm9wY29kZSogd2l0aCBhcmd1bWVudCAqb3BhcmcqLgogCi0KLS4uIGRhdGE6OiBvcG1hcAotCi0gICBEaWN0aW9uYXJ5IG1hcHBpbmcgb3BlcmF0aW9uIG5hbWVzIHRvIGJ5dGVjb2Rlcy4KLQotCi0uLiBkYXRhOjogY21wX29wCi0KLSAgIFNlcXVlbmNlIG9mIGFsbCBjb21wYXJlIG9wZXJhdGlvbiBuYW1lcy4KLQotCi0uLiBkYXRhOjogaGFzY29uc3QKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhIGNvbnN0YW50IHBhcmFtZXRlci4KLQotCi0uLiBkYXRhOjogaGFzZnJlZQotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYSBmcmVlIHZhcmlhYmxlLgotCi0KLS4uIGRhdGE6OiBoYXNuYW1lCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhbiBhdHRyaWJ1dGUgYnkgbmFtZS4KLQotCi0uLiBkYXRhOjogaGFzanJlbAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGEgcmVsYXRpdmUganVtcCB0YXJnZXQuCi0KLQotLi4gZGF0YTo6IGhhc2phYnMKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhbiBhYnNvbHV0ZSBqdW1wIHRhcmdldC4KLQotCi0uLiBkYXRhOjogaGFzbG9jYWwKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGEgbG9jYWwgdmFyaWFibGUuCi0KLQotLi4gZGF0YTo6IGhhc2NvbXBhcmUKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIG9mIEJvb2xlYW4gb3BlcmF0aW9ucy4KLQorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIF9ieXRlY29kZXM6CiAKIFB5dGhvbiBCeXRlY29kZSBJbnN0cnVjdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorVGhlIDpmdW5jOmBnZXRfaW5zdHJ1Y3Rpb25zYCBmdW5jdGlvbiBhbmQgOmNsYXNzOmBCeXRlY29kZWAgY2xhc3MgcHJvdmlkZQorZGV0YWlscyBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMgYXMgOmNsYXNzOmBJbnN0cnVjdGlvbmAgaW5zdGFuY2VzOgorCisuLiBjbGFzczo6IEluc3RydWN0aW9uCisKKyAgIERldGFpbHMgZm9yIGEgYnl0ZWNvZGUgb3BlcmF0aW9uCisKKyAgIC4uIGRhdGE6OiBvcGNvZGUKKworICAgICAgbnVtZXJpYyBjb2RlIGZvciBvcGVyYXRpb24sIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9wY29kZSB2YWx1ZXMgbGlzdGVkCisgICAgICBiZWxvdyBhbmQgdGhlIGJ5dGVjb2RlIHZhbHVlcyBpbiB0aGUgOnJlZjpgb3Bjb2RlX2NvbGxlY3Rpb25zYC4KKworCisgICAuLiBkYXRhOjogb3BuYW1lCisKKyAgICAgIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIG9wZXJhdGlvbgorCisKKyAgIC4uIGRhdGE6OiBhcmcKKworICAgICAgbnVtZXJpYyBhcmd1bWVudCB0byBvcGVyYXRpb24gKGlmIGFueSksIG90aGVyd2lzZSBOb25lCisKKworICAgLi4gZGF0YTo6IGFyZ3ZhbAorCisgICAgICByZXNvbHZlZCBhcmcgdmFsdWUgKGlmIGtub3duKSwgb3RoZXJ3aXNlIHNhbWUgYXMgYXJnCisKKworICAgLi4gZGF0YTo6IGFyZ3JlcHIKKworICAgICAgaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygb3BlcmF0aW9uIGFyZ3VtZW50CisKKworICAgLi4gZGF0YTo6IG9mZnNldAorCisgICAgICBzdGFydCBpbmRleCBvZiBvcGVyYXRpb24gd2l0aGluIGJ5dGVjb2RlIHNlcXVlbmNlCisKKworICAgLi4gZGF0YTo6IHN0YXJ0c19saW5lCisKKyAgICAgIGxpbmUgc3RhcnRlZCBieSB0aGlzIG9wY29kZSAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKworCisgICAuLiBkYXRhOjogaXNfanVtcF90YXJnZXQKKworICAgICAgYGBUcnVlYGAgaWYgb3RoZXIgY29kZSBqdW1wcyB0byBoZXJlLCBvdGhlcndpc2UgYGBGYWxzZWBgCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZSBQeXRob24gY29tcGlsZXIgY3VycmVudGx5IGdlbmVyYXRlcyB0aGUgZm9sbG93aW5nIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KIAogCkBAIC01MDYsMTIgKzYyMSw2IEBACiAgICAuLiBYWFggZXhwbGFpbiB0aGUgV0hZIHN0dWZmIQogCiAKLS4uIG9wY29kZTo6IFNUT1JFX0xPQ0FMUwotCi0gICBQb3BzIFRPUyBmcm9tIHRoZSBzdGFjayBhbmQgc3RvcmVzIGl0IGFzIHRoZSBjdXJyZW50IGZyYW1lJ3MgYGBmX2xvY2Fsc2BgLgotICAgVGhpcyBpcyB1c2VkIGluIGNsYXNzIGNvbnN0cnVjdGlvbi4KLQotCiBBbGwgb2YgdGhlIGZvbGxvd2luZyBvcGNvZGVzIGV4cGVjdCBhcmd1bWVudHMuICBBbiBhcmd1bWVudCBpcyB0d28gYnl0ZXMsIHdpdGgKIHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgbGFzdC4KIApAQCAtNzIyLDYgKzgzMSwxMyBAQAogICAgUHVzaGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdGhlIGNlbGwgY29udGFpbnMgb24gdGhlIHN0YWNrLgogCiAKKy4uIG9wY29kZTo6IExPQURfQ0xBU1NERVJFRiAoaSkKKworICAgTXVjaCBsaWtlIDpvcGNvZGU6YExPQURfREVSRUZgIGJ1dCBmaXJzdCBjaGVja3MgdGhlIGxvY2FscyBkaWN0aW9uYXJ5IGJlZm9yZQorICAgY29uc3VsdGluZyB0aGUgY2VsbC4gIFRoaXMgaXMgdXNlZCBmb3IgbG9hZGluZyBmcmVlIHZhcmlhYmxlcyBpbiBjbGFzcworICAgYm9kaWVzLgorCisKIC4uIG9wY29kZTo6IFNUT1JFX0RFUkVGIChpKQogCiAgICBTdG9yZXMgVE9TIGludG8gdGhlIGNlbGwgY29udGFpbmVkIGluIHNsb3QgKmkqIG9mIHRoZSBjZWxsIGFuZCBmcmVlIHZhcmlhYmxlCkBAIC04MjAsMyArOTM2LDYyIEBACiAgICB3aGljaCBkb24ndCB0YWtlIGFyZ3VtZW50cyBgYDwgSEFWRV9BUkdVTUVOVGBgIGFuZCB0aG9zZSB3aGljaCBkbyBgYD49CiAgICBIQVZFX0FSR1VNRU5UYGAuCiAKKy4uIF9vcGNvZGVfY29sbGVjdGlvbnM6CisKK09wY29kZSBjb2xsZWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNvbGxlY3Rpb25zIGFyZSBwcm92aWRlZCBmb3IgYXV0b21hdGljIGludHJvc3BlY3Rpb24gb2YgYnl0ZWNvZGUKK2luc3RydWN0aW9uczoKKworLi4gZGF0YTo6IG9wbmFtZQorCisgICBTZXF1ZW5jZSBvZiBvcGVyYXRpb24gbmFtZXMsIGluZGV4YWJsZSB1c2luZyB0aGUgYnl0ZWNvZGUuCisKKworLi4gZGF0YTo6IG9wbWFwCisKKyAgIERpY3Rpb25hcnkgbWFwcGluZyBvcGVyYXRpb24gbmFtZXMgdG8gYnl0ZWNvZGVzLgorCisKKy4uIGRhdGE6OiBjbXBfb3AKKworICAgU2VxdWVuY2Ugb2YgYWxsIGNvbXBhcmUgb3BlcmF0aW9uIG5hbWVzLgorCisKKy4uIGRhdGE6OiBoYXNjb25zdAorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGEgY29uc3RhbnQgcGFyYW1ldGVyLgorCisKKy4uIGRhdGE6OiBoYXNmcmVlCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGZyZWUgdmFyaWFibGUgKG5vdGUgdGhhdCAnZnJlZScgaW4KKyAgIHRoaXMgY29udGV4dCByZWZlcnMgdG8gbmFtZXMgaW4gdGhlIGN1cnJlbnQgc2NvcGUgdGhhdCBhcmUgcmVmZXJlbmNlZCBieQorICAgaW5uZXIgc2NvcGVzIG9yIG5hbWVzIGluIG91dGVyIHNjb3BlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGZyb20gdGhpcyBzY29wZS4KKyAgIEl0IGRvZXMgKm5vdCogaW5jbHVkZSByZWZlcmVuY2VzIHRvIGdsb2JhbCBvciBidWlsdGluIHNjb3BlcykuCisKKworLi4gZGF0YTo6IGhhc25hbWUKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGFuIGF0dHJpYnV0ZSBieSBuYW1lLgorCisKKy4uIGRhdGE6OiBoYXNqcmVsCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSByZWxhdGl2ZSBqdW1wIHRhcmdldC4KKworCisuLiBkYXRhOjogaGFzamFicworCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGFuIGFic29sdXRlIGp1bXAgdGFyZ2V0LgorCisKKy4uIGRhdGE6OiBoYXNsb2NhbAorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYSBsb2NhbCB2YXJpYWJsZS4KKworCisuLiBkYXRhOjogaGFzY29tcGFyZQorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgb2YgQm9vbGVhbiBvcGVyYXRpb25zLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlzdHJpYnV0aW9uLnJzdCBiL0RvYy9saWJyYXJ5L2Rpc3RyaWJ1dGlvbi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzZjVkZgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2Rpc3RyaWJ1dGlvbi5yc3QKQEAgLTAsMCArMSwxNCBAQAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1NvZnR3YXJlIFBhY2thZ2luZyBhbmQgRGlzdHJpYnV0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGVzZSBsaWJyYXJpZXMgaGVscCB5b3Ugd2l0aCBwdWJsaXNoaW5nIGFuZCBpbnN0YWxsaW5nIFB5dGhvbiBzb2Z0d2FyZS4KK1doaWxlIHRoZXNlIG1vZHVsZXMgYXJlIGRlc2lnbmVkIHRvIHdvcmsgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKK2BQeXRob24gUGFja2FnZSBJbmRleCA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmc+YF9fLCB0aGV5IGNhbiBhbHNvIGJlIHVzZWQKK3dpdGggYSBsb2NhbCBpbmRleCBzZXJ2ZXIsIG9yIHdpdGhvdXQgYW55IGluZGV4IHNlcnZlciBhdCBhbGwuCisKKy4uIHRvY3RyZWU6OgorCisgICBkaXN0dXRpbHMucnN0CisgICBlbnN1cmVwaXAucnN0CisgICB2ZW52LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QgYi9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdAppbmRleCAyMjJjNzE5Li4yOGRmNDljIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdApAQCAtMjc4LDYgKzI3OCwxMCBAQAogQW55IGNsYXNzZXMgZm91bmQgYXJlIHJlY3Vyc2l2ZWx5IHNlYXJjaGVkIHNpbWlsYXJseSwgdG8gdGVzdCBkb2NzdHJpbmdzIGluCiB0aGVpciBjb250YWluZWQgbWV0aG9kcyBhbmQgbmVzdGVkIGNsYXNzZXMuCiAKKy4uIGltcGwtZGV0YWlsOjoKKyAgIFByaW9yIHRvIHZlcnNpb24gMy40LCBleHRlbnNpb24gbW9kdWxlcyB3cml0dGVuIGluIEMgd2VyZSBub3QgZnVsbHkKKyAgIHNlYXJjaGVkIGJ5IGRvY3Rlc3QuCisKIAogLi4gX2RvY3Rlc3QtZmluZGluZy1leGFtcGxlczoKIApAQCAtNDk1LDcgKzQ5OSwxMCBAQAogQSBudW1iZXIgb2Ygb3B0aW9uIGZsYWdzIGNvbnRyb2wgdmFyaW91cyBhc3BlY3RzIG9mIGRvY3Rlc3QncyBiZWhhdmlvci4KIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZ3MgYXJlIHN1cHBsaWVkIGFzIG1vZHVsZSBjb25zdGFudHMsIHdoaWNoIGNhbiBiZQogb3InZWQgdG9nZXRoZXIgYW5kIHBhc3NlZCB0byB2YXJpb3VzIGZ1bmN0aW9ucy4gIFRoZSBuYW1lcyBjYW4gYWxzbyBiZSB1c2VkIGluCi06cmVmOmBkb2N0ZXN0IGRpcmVjdGl2ZXMgPGRvY3Rlc3QtZGlyZWN0aXZlcz5gLgorOnJlZjpgZG9jdGVzdCBkaXJlY3RpdmVzIDxkb2N0ZXN0LWRpcmVjdGl2ZXM+YCwgYW5kIG1heSBiZSBwYXNzZWQgdG8gdGhlCitkb2N0ZXN0IGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdmlhIHRoZSBgYC1vYGAgb3B0aW9uLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQgdGhlIGBgLW9gYCBjb21tYW5kIGxpbmUgb3B0aW9uCiAKIFRoZSBmaXJzdCBncm91cCBvZiBvcHRpb25zIGRlZmluZSB0ZXN0IHNlbWFudGljcywgY29udHJvbGxpbmcgYXNwZWN0cyBvZiBob3cKIGRvY3Rlc3QgZGVjaWRlcyB3aGV0aGVyIGFjdHVhbCBvdXRwdXQgbWF0Y2hlcyBhbiBleGFtcGxlJ3MgZXhwZWN0ZWQgb3V0cHV0OgpAQCAtNjMzLDYgKzY0MCwxOSBAQAogICAgdGhlIG91dHB1dCBpcyBzdXBwcmVzc2VkLgogCiAKKy4uIGRhdGE6OiBGQUlMX0ZBU1QKKworICAgV2hlbiBzcGVjaWZpZWQsIGV4aXQgYWZ0ZXIgdGhlIGZpcnN0IGZhaWxpbmcgZXhhbXBsZSBhbmQgZG9uJ3QgYXR0ZW1wdCB0byBydW4KKyAgIHRoZSByZW1haW5pbmcgZXhhbXBsZXMuIFRodXMsIHRoZSBudW1iZXIgb2YgZmFpbHVyZXMgcmVwb3J0ZWQgd2lsbCBiZSBhdCBtb3N0CisgICAxLiAgVGhpcyBmbGFnIG1heSBiZSB1c2VmdWwgZHVyaW5nIGRlYnVnZ2luZywgc2luY2UgZXhhbXBsZXMgYWZ0ZXIgdGhlIGZpcnN0CisgICBmYWlsdXJlIHdvbid0IGV2ZW4gcHJvZHVjZSBkZWJ1Z2dpbmcgb3V0cHV0LgorCisgICBUaGUgZG9jdGVzdCBjb21tYW5kIGxpbmUgYWNjZXB0cyB0aGUgb3B0aW9uIGBgLWZgYCBhcyBhIHNob3J0aGFuZCBmb3IgYGAtbworICAgRkFJTF9GQVNUYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGRhdGE6OiBSRVBPUlRJTkdfRkxBR1MKIAogICAgQSBiaXRtYXNrIG9yJ2luZyB0b2dldGhlciBhbGwgdGhlIHJlcG9ydGluZyBmbGFncyBhYm92ZS4KQEAgLTEyNjksOSArMTI4OSw4IEBACiAKICAgIEEgcHJvY2Vzc2luZyBjbGFzcyB1c2VkIHRvIGV4dHJhY3QgdGhlIDpjbGFzczpgRG9jVGVzdGBcIHMgdGhhdCBhcmUgcmVsZXZhbnQgdG8KICAgIGEgZ2l2ZW4gb2JqZWN0LCBmcm9tIGl0cyBkb2NzdHJpbmcgYW5kIHRoZSBkb2NzdHJpbmdzIG9mIGl0cyBjb250YWluZWQgb2JqZWN0cy4KLSAgIDpjbGFzczpgRG9jVGVzdGBcIHMgY2FuIGN1cnJlbnRseSBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIG9iamVjdCB0eXBlczoKLSAgIG1vZHVsZXMsIGZ1bmN0aW9ucywgY2xhc3NlcywgbWV0aG9kcywgc3RhdGljbWV0aG9kcywgY2xhc3NtZXRob2RzLCBhbmQKLSAgIHByb3BlcnRpZXMuCisgICA6Y2xhc3M6YERvY1Rlc3RgXCBzIGNhbiBiZSBleHRyYWN0ZWQgZnJvbSBtb2R1bGVzLCBjbGFzc2VzLCBmdW5jdGlvbnMsCisgICBtZXRob2RzLCBzdGF0aWNtZXRob2RzLCBjbGFzc21ldGhvZHMsIGFuZCBwcm9wZXJ0aWVzLgogCiAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKnZlcmJvc2UqIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIG9iamVjdHMgc2VhcmNoZWQgYnkKICAgIHRoZSBmaW5kZXIuICBJdCBkZWZhdWx0cyB0byBgYEZhbHNlYGAgKG5vIG91dHB1dCkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QKaW5kZXggMzJjZWNmMy4uMjk0ZTEzMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwtZXhhbXBsZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLnJzdApAQCAtNDAsNiArNDAsMzQgQEAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUucHkKIAogCitFeGFtcGxlcyB1c2luZyB0aGUgUHJvdmlzaW9uIEFQSQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0hlcmUgaXMgYSByZXdvcmtpbmcgb2YgdGhlIGxhc3QgZXhhbXBsZSB1c2luZyB0aGUgcHJvdmlzaW9uYWwgQVBJLiAgVG8gbWFrZQordGhpbmdzIGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIHdlIGluY2x1ZGUgYSByZWxhdGVkIGltYWdlIGluIHRoZSBodG1sIHBhcnQsIGFuZAord2Ugc2F2ZSBhIGNvcHkgb2Ygd2hhdCB3ZSBhcmUgZ29pbmcgdG8gc2VuZCB0byBkaXNrLCBhcyB3ZWxsIGFzIHNlbmRpbmcgaXQuCisKK1RoaXMgZXhhbXBsZSBhbHNvIHNob3dzIGhvdyBlYXN5IGl0IGlzIHRvIGluY2x1ZGUgbm9uLUFTQ0lJLCBhbmQgc2ltcGxpZmllcyB0aGUKK3NlbmRpbmcgb2YgdGhlIG1lc3NhZ2UgdXNpbmcgdGhlIDptZXRoOmAuc2VuZF9tZXNzYWdlYCBtZXRob2Qgb2YgdGhlCis6bW9kOmBzbXRwbGliYCBtb2R1bGUuCisKKy4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weQorCitJZiB3ZSB3ZXJlIGluc3RlYWQgc2VudCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBsYXN0IGV4YW1wbGUsIGhlcmUgaXMgb25lCit3YXkgd2UgY291bGQgcHJvY2VzcyBpdDoKKworLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9lbWFpbC1yZWFkLWFsdGVybmF0aXZlLW5ldy1hcGkucHkKKworVXAgdG8gdGhlIHByb21wdCwgdGhlIG91dHB1dCBmcm9tIHRoZSBhYm92ZSBpczo6CisKKyAgICBUbzogUGVuZWxvcGUgUHVzc3ljYXQgPCJwZW5lbG9wZUBleGFtcGxlLmNvbSI+LCBGYWJyZXR0ZSBQdXNzeWNhdCA8ImZhYnJldHRlQGV4YW1wbGUuY29tIj4KKyAgICBGcm9tOiBQZXDDqSBMZSBQZXcgPHBlcGVAZXhhbXBsZS5jb20+CisgICAgU3ViamVjdDogQXlvbnMgYXNwZXJnZXMgcG91ciBsZSBkw6lqZXVuZXIKKworICAgIFNhbHV0IQorCisgICAgQ2VsYSByZXNzZW1ibGUgw6AgdW4gZXhjZWxsZW50IHJlY2lwaWVbMV0gZMOpamV1bmVyLgorCisKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCiAuLiBbMV0gVGhhbmtzIHRvIE1hdHRoZXcgRGl4b24gQ293bGVzIGZvciB0aGUgb3JpZ2luYWwgaW5zcGlyYXRpb24gYW5kIGV4YW1wbGVzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjJkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5jb250ZW50bWFuYWdlci5yc3QKQEAgLTAsMCArMSw0MjcgQEAKKzptb2Q6YGVtYWlsLmNvbnRlbnRtYW5hZ2VyYDogTWFuYWdpbmcgTUlNRSBDb250ZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtb2R1bGU6OiBlbWFpbC5jb250ZW50bWFuYWdlcgorICAgOnN5bm9wc2lzOiBTdG9yaW5nIGFuZCBSZXRyaWV2aW5nIENvbnRlbnQgZnJvbSBNSU1FIFBhcnRzCisKKy4uIG1vZHVsZWF1dGhvcjo6IFIuIERhdmlkIE11cnJheSA8cmRtdXJyYXlAYml0ZGFuY2UuY29tPgorLi4gc2VjdGlvbmF1dGhvcjo6IFIuIERhdmlkIE11cnJheSA8cmRtdXJyYXlAYml0ZGFuY2UuY29tPgorCisKKy4uIG5vdGU6OgorCisgICBUaGUgY29udGVudG1hbmFnZXIgbW9kdWxlIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uIGEKKyAgIDp0ZXJtOmBwcm92aXNpb25hbCBiYXNpcyA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLiBCYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICBjaGFuZ2VzICh1cCB0byBhbmQgaW5jbHVkaW5nIHJlbW92YWwgb2YgdGhlIG1vZHVsZSkgbWF5IG9jY3VyIGlmIGRlZW1lZAorICAgbmVjZXNzYXJ5IGJ5IHRoZSBjb3JlIGRldmVsb3BlcnMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgYXMgYSA6dGVybTpgcHJvdmlzaW9uYWwgbW9kdWxlIDxwcm92aXNpb25hbCBwYWNrYWdlPmAuCisKK1RoZSA6bW9kOmB+ZW1haWwubWVzc2FnZWAgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgdGhhdCBjYW4gcmVwcmVzZW50IGFuCithcmJpdHJhcnkgZW1haWwgbWVzc2FnZS4gIFRoYXQgYmFzaWMgbWVzc2FnZSBtb2RlbCBoYXMgYSB1c2VmdWwgYW5kIGZsZXhpYmxlCitBUEksIGJ1dCBpdCBwcm92aWRlcyBvbmx5IGEgbG93ZXItbGV2ZWwgQVBJIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBnZW5lcmljCitwYXJ0cyBvZiBhIG1lc3NhZ2UgKHRoZSBoZWFkZXJzLCBnZW5lcmljIGhlYWRlciBwYXJhbWV0ZXJzLCBhbmQgdGhlIHBheWxvYWQsCit3aGljaCBtYXkgYmUgYSBsaXN0IG9mIHN1Yi1wYXJ0cykuICBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGFuZCB0b29scwordGhhdCBwcm92aWRlIGFuIGVuaGFuY2VkIGFuZCBleHRlbnNpYmxlIEFQSSBmb3IgZGVhbGluZyB3aXRoIHZhcmlvdXMgc3BlY2lmaWMKK3R5cGVzIG9mIGNvbnRlbnQsIGluY2x1ZGluZyB0aGUgYWJpbGl0eSB0byByZXRyaWV2ZSB0aGUgY29udGVudCBvZiB0aGUgbWVzc2FnZQorYXMgYSBzcGVjaWFsaXplZCBvYmplY3QgdHlwZSByYXRoZXIgdGhhbiBhcyBhIHNpbXBsZSBieXRlcyBvYmplY3QuICBUaGUgbW9kdWxlCithdXRvbWF0aWNhbGx5IHRha2VzIGNhcmUgb2YgdGhlIFJGQy1zcGVjaWZpZWQgTUlNRSBkZXRhaWxzIChyZXF1aXJlZCBoZWFkZXJzCithbmQgcGFyYW1ldGVycywgZXRjLikgZm9yIHRoZSBjZXJ0YWluIGNvbW1vbiBjb250ZW50IHR5cGVzIGNvbnRlbnQgcHJvcGVydGllcywKK2FuZCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIHR5cGVzIGNhbiBiZSBhZGRlZCBieSBhbiBhcHBsaWNhdGlvbiB1c2luZyB0aGUKK2V4dGVuc2lvbiBtZWNoYW5pc21zLgorCitUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBlcG9ueW1vdXMgIkNvbnRlbnQgTWFuYWdlciIgY2xhc3Nlcy4gIFRoZSBiYXNlCis6Y2xhc3M6YC5Db250ZW50TWFuYWdlcmAgY2xhc3MgZGVmaW5lcyBhbiBBUEkgZm9yIHJlZ2lzdGVyaW5nIGNvbnRlbnQKK21hbmFnZW1lbnQgZnVuY3Rpb25zIHdoaWNoIGV4dHJhY3QgZGF0YSBmcm9tIGBgTWVzc2FnZWBgIG9iamVjdHMgb3IgaW5zZXJ0IGRhdGEKK2FuZCBoZWFkZXJzIGludG8gYGBNZXNzYWdlYGAgb2JqZWN0cywgdGh1cyBwcm92aWRpbmcgYSB3YXkgb2YgY29udmVydGluZworYmV0d2VlbiBgYE1lc3NhZ2VgYCBvYmplY3RzIGNvbnRhaW5pbmcgZGF0YSBhbmQgb3RoZXIgcmVwcmVzZW50YXRpb25zIG9mIHRoYXQKK2RhdGEgKFB5dGhvbiBkYXRhIHR5cGVzLCBzcGVjaWFsaXplZCBQeXRob24gb2JqZWN0cywgZXh0ZXJuYWwgZmlsZXMsIGV0YykuICBUaGUKK21vZHVsZSBhbHNvIGRlZmluZXMgb25lIGNvbmNyZXRlIGNvbnRlbnQgbWFuYWdlcjogOmRhdGE6YHJhd19kYXRhX21hbmFnZXJgCitjb252ZXJ0cyBiZXR3ZWVuIE1JTUUgY29udGVudCB0eXBlcyBhbmQgYGBzdHJgYCBvciBgYGJ5dGVzYGAgZGF0YS4gIEl0IGFsc28KK3Byb3ZpZGVzIGEgY29udmVuaWVudCBBUEkgZm9yIG1hbmFnaW5nIHRoZSBNSU1FIHBhcmFtZXRlcnMgd2hlbiBpbnNlcnRpbmcKK2NvbnRlbnQgaW50byBgYE1lc3NhZ2VgYFwgcy4gIEl0IGFsc28gaGFuZGxlcyBpbnNlcnRpbmcgYW5kIGV4dHJhY3RpbmcKK2BgTWVzc2FnZWBgIG9iamVjdHMgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGBgbWVzc2FnZS9yZmM4MjJgYCBjb250ZW50IHR5cGUuCisKK0Fub3RoZXIgcGFydCBvZiB0aGUgZW5oYW5jZWQgaW50ZXJmYWNlIGlzIHN1YmNsYXNzZXMgb2YKKzpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgdGhhdCBwcm92aWRlIG5ldyBjb252ZW5pZW5jZSBBUEkgZnVuY3Rpb25zLAoraW5jbHVkaW5nIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGNhbGxpbmcgdGhlIENvbnRlbnQgTWFuYWdlcnMgZGVyaXZlZCBmcm9tCit0aGlzIG1vZHVsZS4KKworLi4gbm90ZTo6CisKKyAgIEFsdGhvdWdoIDpjbGFzczpgLkVtYWlsTWVzc2FnZWAgYW5kIDpjbGFzczpgLk1JTUVQYXJ0YCBhcmUgY3VycmVudGx5CisgICBkb2N1bWVudGVkIGluIHRoaXMgbW9kdWxlIGJlY2F1c2Ugb2YgdGhlIHByb3Zpc2lvbmFsIG5hdHVyZSBvZiB0aGUgY29kZSwgdGhlCisgICBpbXBsZW1lbnRhdGlvbiBsaXZlcyBpbiB0aGUgOm1vZDpgZW1haWwubWVzc2FnZWAgbW9kdWxlLgorCisKKy4uIGNsYXNzOjogRW1haWxNZXNzYWdlKHBvbGljeT1kZWZhdWx0KQorCisgICBJZiAqcG9saWN5KiBpcyBzcGVjaWZpZWQgKGl0IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSA6bW9kOmB+ZW1haWwucG9saWN5YAorICAgY2xhc3MpIHVzZSB0aGUgcnVsZXMgaXQgc3BlY2lmaWVzIHRvIHVkcGF0ZSBhbmQgc2VyaWFsaXplIHRoZSByZXByZXNlbnRhdGlvbgorICAgb2YgdGhlIG1lc3NhZ2UuICBJZiAqcG9saWN5KiBpcyBub3Qgc2V0LCB1c2UgdGhlCisgICA6Y2xhc3M6YH5lbWFpbC5wb2xpY3kuZGVmYXVsdGAgcG9saWN5LCB3aGljaCBmb2xsb3dzIHRoZSBydWxlcyBvZiB0aGUgZW1haWwKKyAgIFJGQ3MgZXhjZXB0IGZvciBsaW5lIGVuZGluZ3MgKGluc3RlYWQgb2YgdGhlIFJGQyBtYW5kYXRlZCBgYFxyXG5gYCwgaXQgdXNlcworICAgdGhlIFB5dGhvbiBzdGFuZGFyZCBgYFxuYGAgbGluZSBlbmRpbmdzKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUKKyAgIDptb2Q6YH5lbWFpbC5wb2xpY3lgIGRvY3VtZW50YXRpb24uCisKKyAgIFRoaXMgY2xhc3MgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgLiAgSXQgYWRkcworICAgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGlzX2F0dGFjaG1lbnQKKworICAgICAgU2V0IHRvIGBgVHJ1ZWBgIGlmIHRoZXJlIGlzIGEgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlcgorICAgICAgYW5kIGl0cyAoY2FzZSBpbnNlbnNpdGl2ZSkgdmFsdWUgaXMgYGBhdHRhY2htZW50YGAsIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKworICAgLi4gbWV0aG9kOjogZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKSkKKworICAgICAgUmV0dXJuIHRoZSBNSU1FIHBhcnQgdGhhdCBpcyB0aGUgYmVzdCBjYW5kaWRhdGUgdG8gYmUgdGhlICJib2R5IiBvZiB0aGUKKyAgICAgIG1lc3NhZ2UuCisKKyAgICAgICpwcmVmZXJlbmNlbGlzdCogbXVzdCBiZSBhIHNlcXVlbmNlIG9mIHN0cmluZ3MgZnJvbSB0aGUgc2V0IGBgcmVsYXRlZGBgLAorICAgICAgYGBodG1sYGAsIGFuZCBgYHBsYWluYGAsIGFuZCBpbmRpY2F0ZXMgdGhlIG9yZGVyIG9mIHByZWZlcmVuY2UgZm9yIHRoZQorICAgICAgY29udGVudCB0eXBlIG9mIHRoZSBwYXJ0IHJldHVybmVkLgorCisgICAgICBTdGFydCBsb29raW5nIGZvciBjYW5kaWRhdGUgbWF0Y2hlcyB3aXRoIHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlCisgICAgICBgYGdldF9ib2R5YGAgbWV0aG9kIGlzIGNhbGxlZC4KKworICAgICAgSWYgYGByZWxhdGVkYGAgaXMgbm90IGluY2x1ZGVkIGluICpwcmVmZXJlbmNlbGlzdCosIGNvbnNpZGVyIHRoZSByb290CisgICAgICBwYXJ0IChvciBzdWJwYXJ0IG9mIHRoZSByb290IHBhcnQpIG9mIGFueSByZWxhdGVkIGVuY291bnRlcmVkIGFzIGEKKyAgICAgIGNhbmRpZGF0ZSBpZiB0aGUgKHN1Yi0pcGFydCBtYXRjaGVzIGEgcHJlZmVyZW5jZS4KKworICAgICAgV2hlbiBlbmNvdW50ZXJpbmcgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAsIGNoZWNrIHRoZSBgYHN0YXJ0YGAgcGFyYW1ldGVyCisgICAgICBhbmQgaWYgYSBwYXJ0IHdpdGggYSBtYXRjaGluZyA6bWFpbGhlYWRlcjpgQ29udGVudC1JRGAgaXMgZm91bmQsIGNvbnNpZGVyCisgICAgICBvbmx5IGl0IHdoZW4gbG9va2luZyBmb3IgY2FuZGlkYXRlIG1hdGNoZXMuICBPdGhlcndpc2UgY29uc2lkZXIgb25seSB0aGUKKyAgICAgIGZpcnN0IChkZWZhdWx0IHJvb3QpIHBhcnQgb2YgdGhlIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYC4KKworICAgICAgSWYgYSBwYXJ0IGhhcyBhIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIsIG9ubHkgY29uc2lkZXIKKyAgICAgIHRoZSBwYXJ0IGEgY2FuZGlkYXRlIG1hdGNoIGlmIHRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIGlzIGBgaW5saW5lYGAuCisKKyAgICAgIElmIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgbWF0Y2hlcyBhbnkgb2YgdGhlIHByZWZlcmVuY2VzIGluCisgICAgICAqcHJlZmVybmVjbGlzdCosIHJldHVybiBgYE5vbmVgYC4KKworICAgICAgTm90ZXM6ICgxKSBGb3IgbW9zdCBhcHBsaWNhdGlvbnMgdGhlIG9ubHkgKnByZWZlcmVuY2VsaXN0KiBjb21iaW5hdGlvbnMKKyAgICAgIHRoYXQgcmVhbGx5IG1ha2Ugc2Vuc2UgYXJlIGBgKCdwbGFpbicsKWBgLCBgYCgnaHRtbCcsICdwbGFpbicpYGAsIGFuZCB0aGUKKyAgICAgIGRlZmF1bHQsIGBgKCdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKWBgLiAgKDIpIEJlY2F1c2UgbWF0Y2hpbmcgc3RhcnRzCisgICAgICB3aXRoIHRoZSBvYmplY3Qgb24gd2hpY2ggYGBnZXRfYm9keWBgIGlzIGNhbGxlZCwgY2FsbGluZyBgYGdldF9ib2R5YGAgb24KKyAgICAgIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgIHdpbGwgcmV0dXJuIHRoZSBvYmplY3QgaXRzZWxmIHVubGVzcworICAgICAgKnByZWZlcmVuY2VsaXN0KiBoYXMgYSBub24tZGVmYXVsdCB2YWx1ZS4gKDMpIE1lc3NhZ2VzIChvciBtZXNzYWdlIHBhcnRzKQorICAgICAgdGhhdCBkbyBub3Qgc3BlY2lmeSBhIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIG9yIHdob3NlCisgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBoZWFkZXIgaXMgaW52YWxpZCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgdGhleQorICAgICAgYXJlIG9mIHR5cGUgYGB0ZXh0L3BsYWluYGAsIHdoaWNoIG1heSBvY2Nhc2lvbmFsbHkgY2F1c2UgYGBnZXRfYm9keWBgIHRvCisgICAgICByZXR1cm4gdW5leHBlY3RlZCByZXN1bHRzLgorCisKKyAgIC4uIG1ldGhvZDo6IGl0ZXJfYXR0YWNobWVudHMoKQorCisgICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBhbGwgb2YgdGhlIHBhcnRzIG9mIHRoZSBtZXNzYWdlIHRoYXQgYXJlIG5vdAorICAgICAgY2FuZGlkYXRlICJib2R5IiBwYXJ0cy4gIFRoYXQgaXMsIHNraXAgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgZWFjaCBvZgorICAgICAgYGB0ZXh0L3BsYWluYGAsIGBgdGV4dC9odG1sYGAsIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgb3IKKyAgICAgIGBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYGAgKHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5IG1hcmtlZCBhcworICAgICAgYXR0YWNobWVudHMgdmlhIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50YCksIGFuZAorICAgICAgcmV0dXJuIGFsbCByZW1haW5pbmcgcGFydHMuICBXaGVuIGFwcGxpZWQgZGlyZWN0bHkgdG8gYQorICAgICAgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCByZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgYWxsIHRoZSByZWxhdGVkIHBhcnRzCisgICAgICBleGNlcHQgdGhlIHJvb3QgcGFydCAoaWU6IHRoZSBwYXJ0IHBvaW50ZWQgdG8gYnkgdGhlIGBgc3RhcnRgYCBwYXJhbWV0ZXIsCisgICAgICBvciB0aGUgZmlyc3QgcGFydCBpZiB0aGVyZSBpcyBubyBgYHN0YXJ0YGAgcGFyYW1ldGVyIG9yIHRoZSBgYHN0YXJ0YGAKKyAgICAgIHBhcmFtZXRlciBkb2Vzbid0IG1hdGNoIHRoZSA6bWFpbGhlYWRlcjpgQ29udGVudC1JRGAgb2YgYW55IG9mIHRoZQorICAgICAgcGFydHMpLiAgV2hlbiBhcHBsaWVkIGRpcmVjdGx5IHRvIGEgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCBvciBhCisgICAgICBub24tYGBtdWx0aXBhcnRgYCwgcmV0dXJuIGFuIGVtcHR5IGl0ZXJhdG9yLgorCisKKyAgIC4uIG1ldGhvZDo6IGl0ZXJfcGFydHMoKQorCisgICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBhbGwgb2YgdGhlIGltbWVkaWF0ZSBzdWItcGFydHMgb2YgdGhlIG1lc3NhZ2UsCisgICAgICB3aGljaCB3aWxsIGJlIGVtcHR5IGZvciBhIG5vbi1gYG11bHRpcGFydGBgLiAgKFNlZSBhbHNvCisgICAgICA6bWV0aDpgfmVtYWlsLm1lc3NhZ2Uud2Fsa2AuKQorCisKKyAgIC4uIG1ldGhvZDo6IGdldF9jb250ZW50KCphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdykKKworICAgICAgQ2FsbCB0aGUgYGBnZXRfY29udGVudGBgIG1ldGhvZCBvZiB0aGUgKmNvbnRlbnRfbWFuYWdlciosIHBhc3Npbmcgc2VsZgorICAgICAgYXMgdGhlIG1lc3NhZ2Ugb2JqZWN0LCBhbmQgcGFzc2luZyBhbG9uZyBhbnkgb3RoZXIgYXJndW1lbnRzIG9yIGtleXdvcmRzCisgICAgICBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cy4gIElmICpjb250ZW50X21hbmFnZXIqIGlzIG5vdCBzcGVjaWZpZWQsIHVzZQorICAgICAgdGhlIGBgY29udGVudF9tYW5hZ2VyYGAgc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50IDptb2Q6YH5lbWFpbC5wb2xpY3lgLgorCisKKyAgIC4uIG1ldGhvZDo6IHNldF9jb250ZW50KCphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdykKKworICAgICAgQ2FsbCB0aGUgYGBzZXRfY29udGVudGBgIG1ldGhvZCBvZiB0aGUgKmNvbnRlbnRfbWFuYWdlciosIHBhc3Npbmcgc2VsZgorICAgICAgYXMgdGhlIG1lc3NhZ2Ugb2JqZWN0LCBhbmQgcGFzc2luZyBhbG9uZyBhbnkgb3RoZXIgYXJndW1lbnRzIG9yIGtleXdvcmRzCisgICAgICBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cy4gIElmICpjb250ZW50X21hbmFnZXIqIGlzIG5vdCBzcGVjaWZpZWQsIHVzZQorICAgICAgdGhlIGBgY29udGVudF9tYW5hZ2VyYGAgc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50IDptb2Q6YH5lbWFpbC5wb2xpY3lgLgorCisKKyAgIC4uIG1ldGhvZDo6IG1ha2VfcmVsYXRlZChib3VuZGFyeT1Ob25lKQorCisgICAgICBDb252ZXJ0IGEgbm9uLWBgbXVsdGlwYXJ0YGAgbWVzc2FnZSBpbnRvIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgIG1lc3NhZ2UsCisgICAgICBtb3ZpbmcgYW55IGV4aXN0aW5nIDptYWlsaGVhZGVyOmBDb250ZW50LWAgaGVhZGVycyBhbmQgcGF5bG9hZCBpbnRvIGEKKyAgICAgIChuZXcpIGZpcnN0IHBhcnQgb2YgdGhlIGBgbXVsdGlwYXJ0YGAuICBJZiAqYm91bmRhcnkqIGlzIHNwZWNpZmllZCwgdXNlCisgICAgICBpdCBhcyB0aGUgYm91bmRhcnkgc3RyaW5nIGluIHRoZSBtdWx0aXBhcnQsIG90aGVyd2lzZSBsZWF2ZSB0aGUgYm91bmRhcnkKKyAgICAgIHRvIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aGVuIGl0IGlzIG5lZWRlZCAoZm9yIGV4YW1wbGUsIHdoZW4gdGhlCisgICAgICBtZXNzYWdlIGlzIHNlcmlhbGl6ZWQpLgorCisKKyAgIC4uIG1ldGhvZDo6IG1ha2VfYWx0ZXJuYXRpdmUoYm91bmRhcnk9Tm9uZSkKKworICAgICAgQ29udmVydCBhIG5vbi1gYG11bHRpcGFydGBgIG9yIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgIGludG8gYQorICAgICAgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCwgbW92aW5nIGFueSBleGlzdGluZyA6bWFpbGhlYWRlcjpgQ29udGVudC1gCisgICAgICBoZWFkZXJzIGFuZCBwYXlsb2FkIGludG8gYSAobmV3KSBmaXJzdCBwYXJ0IG9mIHRoZSBgYG11bHRpcGFydGBgLiAgSWYKKyAgICAgICpib3VuZGFyeSogaXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgdGhlIGJvdW5kYXJ5IHN0cmluZyBpbiB0aGUgbXVsdGlwYXJ0LAorICAgICAgb3RoZXJ3aXNlIGxlYXZlIHRoZSBib3VuZGFyeSB0byBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2hlbiBpdCBpcworICAgICAgbmVlZGVkIChmb3IgZXhhbXBsZSwgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZXJpYWxpemVkKS4KKworCisgICAuLiBtZXRob2Q6OiBtYWtlX21peGVkKGJvdW5kYXJ5PU5vbmUpCisKKyAgICAgIENvbnZlcnQgYSBub24tYGBtdWx0aXBhcnRgYCwgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAsIG9yIGEKKyAgICAgIGBgbXVsdGlwYXJ0LWFsdGVybmF0aXZlYGAgaW50byBhIGBgbXVsdGlwYXJ0L21peGVkYGAsIG1vdmluZyBhbnkgZXhpc3RpbmcKKyAgICAgIDptYWlsaGVhZGVyOmBDb250ZW50LWAgaGVhZGVycyBhbmQgcGF5bG9hZCBpbnRvIGEgKG5ldykgZmlyc3QgcGFydCBvZiB0aGUKKyAgICAgIGBgbXVsdGlwYXJ0YGAuICBJZiAqYm91bmRhcnkqIGlzIHNwZWNpZmllZCwgdXNlIGl0IGFzIHRoZSBib3VuZGFyeSBzdHJpbmcKKyAgICAgIGluIHRoZSBtdWx0aXBhcnQsIG90aGVyd2lzZSBsZWF2ZSB0aGUgYm91bmRhcnkgdG8gYmUgYXV0b21hdGljYWxseQorICAgICAgY3JlYXRlZCB3aGVuIGl0IGlzIG5lZWRlZCAoZm9yIGV4YW1wbGUsIHdoZW4gdGhlIG1lc3NhZ2UgaXMgc2VyaWFsaXplZCkuCisKKworICAgLi4gbWV0aG9kOjogYWRkX3JlbGF0ZWQoKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KQorCisgICAgICBJZiB0aGUgbWVzc2FnZSBpcyBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgY3JlYXRlIGEgbmV3IG1lc3NhZ2UKKyAgICAgIG9iamVjdCwgcGFzcyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0byBpdHMgOm1ldGg6YHNldF9jb250ZW50YCBtZXRob2QsCisgICAgICBhbmQgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXR0YWNoYCBpdCB0byB0aGUgYGBtdWx0aXBhcnRgYC4gIElmCisgICAgICB0aGUgbWVzc2FnZSBpcyBhIG5vbi1gYG11bHRpcGFydGBgLCBjYWxsIDptZXRoOmBtYWtlX3JlbGF0ZWRgIGFuZCB0aGVuCisgICAgICBwcm9jZWVkIGFzIGFib3ZlLiAgSWYgdGhlIG1lc3NhZ2UgaXMgYW55IG90aGVyIHR5cGUgb2YgYGBtdWx0aXBhcnRgYCwKKyAgICAgIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYC4gSWYgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlCisgICAgICB0aGUgYGBjb250ZW50X21hbmFnZXJgYCBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuCisgICAgICBJZiB0aGUgYWRkZWQgcGFydCBoYXMgbm8gOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlciwKKyAgICAgIGFkZCBvbmUgd2l0aCB0aGUgdmFsdWUgYGBpbmxpbmVgYC4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfYWx0ZXJuYXRpdmUoKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KQorCisgICAgICBJZiB0aGUgbWVzc2FnZSBpcyBhIGBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYGAsIGNyZWF0ZSBhIG5ldyBtZXNzYWdlCisgICAgICBvYmplY3QsIHBhc3MgYWxsIG9mIHRoZSBhcmd1bWVudHMgdG8gaXRzIDptZXRoOmBzZXRfY29udGVudGAgbWV0aG9kLCBhbmQKKyAgICAgIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaGAgaXQgdG8gdGhlIGBgbXVsdGlwYXJ0YGAuICBJZiB0aGUKKyAgICAgIG1lc3NhZ2UgaXMgYSBub24tYGBtdWx0aXBhcnRgYCBvciBgYG11bHRpcGFydC9yZWxhdGVkYGAsIGNhbGwKKyAgICAgIDptZXRoOmBtYWtlX2FsdGVybmF0aXZlYCBhbmQgdGhlbiBwcm9jZWVkIGFzIGFib3ZlLiAgSWYgdGhlIG1lc3NhZ2UgaXMKKyAgICAgIGFueSBvdGhlciB0eXBlIG9mIGBgbXVsdGlwYXJ0YGAsIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYC4gSWYKKyAgICAgICpjb250ZW50X21hbmFnZXIqIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgYGBjb250ZW50X21hbmFnZXJgYCBzcGVjaWZpZWQKKyAgICAgIGJ5IHRoZSBjdXJyZW50IDptb2Q6YH5lbWFpbC5wb2xpY3lgLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9hdHRhY2htZW50KCphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdykKKworICAgICAgSWYgdGhlIG1lc3NhZ2UgaXMgYSBgYG11bHRpcGFydC9taXhlZGBgLCBjcmVhdGUgYSBuZXcgbWVzc2FnZSBvYmplY3QsCisgICAgICBwYXNzIGFsbCBvZiB0aGUgYXJndW1lbnRzIHRvIGl0cyA6bWV0aDpgc2V0X2NvbnRlbnRgIG1ldGhvZCwgYW5kCisgICAgICA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hdHRhY2hgIGl0IHRvIHRoZSBgYG11bHRpcGFydGBgLiAgSWYgdGhlCisgICAgICBtZXNzYWdlIGlzIGEgbm9uLWBgbXVsdGlwYXJ0YGAsIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgb3IKKyAgICAgIGBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYGAsIGNhbGwgOm1ldGg6YG1ha2VfbWl4ZWRgIGFuZCB0aGVuIHByb2NlZWQgYXMKKyAgICAgIGFib3ZlLiBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UgdGhlIGBgY29udGVudF9tYW5hZ2VyYGAKKyAgICAgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4gIElmIHRoZSBhZGRlZCBwYXJ0CisgICAgICBoYXMgbm8gOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlciwgYWRkIG9uZSB3aXRoIHRoZSB2YWx1ZQorICAgICAgYGBhdHRhY2htZW50YGAuICBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBib3RoIGZvciBleHBsaWNpdCBhdHRhY2htZW50cworICAgICAgKDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50YCBhbmQgYGBpbmxpbmVgYCBhdHRhY2htZW50cworICAgICAgKDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmVgKSwgYnkgcGFzc2luZyBhcHByb3ByaWF0ZQorICAgICAgb3B0aW9ucyB0byB0aGUgYGBjb250ZW50X21hbmFnZXJgYC4KKworCisgICAuLiBtZXRob2Q6OiBjbGVhcigpCisKKyAgICAgIFJlbW92ZSB0aGUgcGF5bG9hZCBhbmQgYWxsIG9mIHRoZSBoZWFkZXJzLgorCisKKyAgIC4uIG1ldGhvZDo6IGNsZWFyX2NvbnRlbnQoKQorCisgICAgICBSZW1vdmUgdGhlIHBheWxvYWQgYW5kIGFsbCBvZiB0aGUgOmV4YzpgQ29udGVudC1gIGhlYWRlcnMsIGxlYXZpbmcKKyAgICAgIGFsbCBvdGhlciBoZWFkZXJzIGludGFjdCBhbmQgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIuCisKKworLi4gY2xhc3M6OiBDb250ZW50TWFuYWdlcigpCisKKyAgIEJhc2UgY2xhc3MgZm9yIGNvbnRlbnQgbWFuYWdlcnMuICBQcm92aWRlcyB0aGUgc3RhbmRhcmQgcmVnaXN0cnkgbWVjaGFuaXNtcworICAgdG8gcmVnaXN0ZXIgY29udmVydGVycyBiZXR3ZWVuIE1JTUUgY29udGVudCBhbmQgb3RoZXIgcmVwcmVzZW50YXRpb25zLCBhcworICAgd2VsbCBhcyB0aGUgYGBnZXRfY29udGVudGBgIGFuZCBgYHNldF9jb250ZW50YGAgZGlzcGF0Y2ggbWV0aG9kcy4KKworCisgICAuLiBtZXRob2Q6OiBnZXRfY29udGVudChtc2csICphcmdzLCAqKmt3KQorCisgICAgICBMb29rIHVwIGEgaGFuZGxlciBmdW5jdGlvbiBiYXNlZCBvbiB0aGUgYGBtaW1ldHlwZWBgIG9mICptc2cqIChzZWUgbmV4dAorICAgICAgcGFyYWdyYXBoKSwgY2FsbCBpdCwgcGFzc2luZyB0aHJvdWdoIGFsbCBhcmd1bWVudHMsIGFuZCByZXR1cm4gdGhlIHJlc3VsdAorICAgICAgb2YgdGhlIGNhbGwuICBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUgaGFuZGxlciB3aWxsIGV4dHJhY3QgdGhlCisgICAgICBwYXlsb2FkIGZyb20gKm1zZyogYW5kIHJldHVybiBhbiBvYmplY3QgdGhhdCBlbmNvZGVzIGluZm9ybWF0aW9uIGFib3V0CisgICAgICB0aGUgZXh0cmFjdGVkIGRhdGEuCisKKyAgICAgIFRvIGZpbmQgdGhlIGhhbmRsZXIsIGxvb2sgZm9yIHRoZSBmb2xsb3dpbmcga2V5cyBpbiB0aGUgcmVnaXN0cnksCisgICAgICBzdG9wcGluZyB3aXRoIHRoZSBmaXJzdCBvbmUgZm91bmQ6CisKKyAgICAgICAgICAgICogdGhlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZ1bGwgTUlNRSB0eXBlIChgYG1haW50eXBlL3N1YnR5cGVgYCkKKyAgICAgICAgICAgICogdGhlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGBgbWFpbnR5cGVgYAorICAgICAgICAgICAgKiB0aGUgZW1wdHkgc3RyaW5nCisKKyAgICAgIElmIG5vbmUgb2YgdGhlc2Uga2V5cyBwcm9kdWNlIGEgaGFuZGxlciwgcmFpc2UgYSA6ZXhjOmBLZXlFcnJvcmAgZm9yIHRoZQorICAgICAgZnVsbCBNSU1FIHR5cGUuCisKKworICAgLi4gbWV0aG9kOjogc2V0X2NvbnRlbnQobXNnLCBvYmosICphcmdzLCAqKmt3KQorCisgICAgICBJZiB0aGUgYGBtYWludHlwZWBgIGlzIGBgbXVsdGlwYXJ0YGAsIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYDsgb3RoZXJ3aXNlCisgICAgICBsb29rIHVwIGEgaGFuZGxlciBmdW5jdGlvbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiAqb2JqKiAoc2VlIG5leHQKKyAgICAgIHBhcmFncmFwaCksIGNhbGwgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5jbGVhcl9jb250ZW50YCBvbiB0aGUKKyAgICAgICptc2cqLCBhbmQgY2FsbCB0aGUgaGFuZGxlciBmdW5jdGlvbiwgcGFzc2luZyB0aHJvdWdoIGFsbCBhcmd1bWVudHMuICBUaGUKKyAgICAgIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlIGhhbmRsZXIgd2lsbCB0cmFuc2Zvcm0gYW5kIHN0b3JlICpvYmoqIGludG8KKyAgICAgICptc2cqLCBwb3NzaWJseSBtYWtpbmcgb3RoZXIgY2hhbmdlcyB0byAqbXNnKiBhcyB3ZWxsLCBzdWNoIGFzIGFkZGluZworICAgICAgdmFyaW91cyBNSU1FIGhlYWRlcnMgdG8gZW5jb2RlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBpbnRlcnByZXQgdGhlIHN0b3JlZAorICAgICAgZGF0YS4KKworICAgICAgVG8gZmluZCB0aGUgaGFuZGxlciwgb2J0YWluIHRoZSB0eXBlIG9mICpvYmoqIChgYHR5cCA9IHR5cGUob2JqKWBgKSwgYW5kCisgICAgICBsb29rIGZvciB0aGUgZm9sbG93aW5nIGtleXMgaW4gdGhlIHJlZ2lzdHJ5LCBzdG9wcGluZyB3aXRoIHRoZSBmaXJzdCBvbmUKKyAgICAgIGZvdW5kOgorCisgICAgICAgICAgICogdGhlIHR5cGUgaXRzZWxmIChgYHR5cGBgKQorICAgICAgICAgICAqIHRoZSB0eXBlJ3MgZnVsbHkgcXVhbGlmaWVkIG5hbWUgKGBgdHlwLl9fbW9kdWxlX18gKyAnLicgKworICAgICAgICAgICAgIHR5cC5fX3F1YWxuYW1lX19gYCkuCisgICAgICAgICAgICogdGhlIHR5cGUncyBxdWFsbmFtZSAoYGB0eXAuX19xdWFsbmFtZV9fYGApCisgICAgICAgICAgICogdGhlIHR5cGUncyBuYW1lIChgYHR5cC5fX25hbWVfX2BgKS4KKworICAgICAgSWYgbm9uZSBvZiB0aGUgYWJvdmUgbWF0Y2gsIHJlcGVhdCBhbGwgb2YgdGhlIGNoZWNrcyBhYm92ZSBmb3IgZWFjaCBvZgorICAgICAgdGhlIHR5cGVzIGluIHRoZSA6dGVybTpgTVJPYCAoYGB0eXAuX19tcm9fX2BgKS4gIEZpbmFsbHksIGlmIG5vIG90aGVyIGtleQorICAgICAgeWllbGRzIGEgaGFuZGxlciwgY2hlY2sgZm9yIGEgaGFuZGxlciBmb3IgdGhlIGtleSBgYE5vbmVgYC4gIElmIHRoZXJlIGlzCisgICAgICBubyBoYW5kbGVyIGZvciBgYE5vbmVgYCwgcmFpc2UgYSA6ZXhjOmBLZXlFcnJvcmAgZm9yIHRoZSBmdWxseQorICAgICAgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHR5cGUuCisKKyAgICAgIEFsc28gYWRkIGEgOm1haWxoZWFkZXI6YE1JTUUtVmVyc2lvbmAgaGVhZGVyIGlmIG9uZSBpcyBub3QgcHJlc2VudCAoc2VlCisgICAgICBhbHNvIDpjbGFzczpgLk1JTUVQYXJ0YCkuCisKKworICAgLi4gbWV0aG9kOjogYWRkX2dldF9oYW5kbGVyKGtleSwgaGFuZGxlcikKKworICAgICAgUmVjb3JkIHRoZSBmdW5jdGlvbiAqaGFuZGxlciogYXMgdGhlIGhhbmRsZXIgZm9yICprZXkqLiAgRm9yIHRoZSBwb3NzaWJsZQorICAgICAgdmFsdWVzIG9mICprZXkqLCBzZWUgOm1ldGg6YGdldF9jb250ZW50YC4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfc2V0X2hhbmRsZXIodHlwZWtleSwgaGFuZGxlcikKKworICAgICAgUmVjb3JkICpoYW5kbGVyKiBhcyB0aGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGFuIG9iamVjdCBvZiBhIHR5cGUKKyAgICAgIG1hdGNoaW5nICp0eXBla2V5KiBpcyBwYXNzZWQgdG8gOm1ldGg6YHNldF9jb250ZW50YC4gIEZvciB0aGUgcG9zc2libGUKKyAgICAgIHZhbHVlcyBvZiAqdHlwZWtleSosIHNlZSA6bWV0aDpgc2V0X2NvbnRlbnRgLgorCisKKy4uIGNsYXNzOjogTUlNRVBhcnQocG9saWN5PWRlZmF1bHQpCisKKyAgICBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBzdWJwYXJ0IG9mIGEgTUlNRSBtZXNzYWdlLiAgSXQgaXMgaWRlbnRpY2FsIHRvCisgICAgOmNsYXNzOmBFbWFpbE1lc3NhZ2VgLCBleGNlcHQgdGhhdCBubyA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXJzIGFyZQorICAgIGFkZGVkIHdoZW4gOm1ldGg6YH5FbWFpbE1lc3NhZ2Uuc2V0X2NvbnRlbnRgIGlzIGNhbGxlZCwgc2luY2Ugc3ViLXBhcnRzIGRvCisgICAgbm90IG5lZWQgdGhlaXIgb3duIDptYWlsaGVhZGVyOmBNSU1FLVZlcnNpb25gIGhlYWRlcnMuCisKKworQ29udGVudCBNYW5hZ2VyIEluc3RhbmNlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitDdXJyZW50bHkgdGhlIGVtYWlsIHBhY2thZ2UgcHJvdmlkZXMgb25seSBvbmUgY29uY3JldGUgY29udGVudCBtYW5hZ2VyLAorOmRhdGE6YHJhd19kYXRhX21hbmFnZXJgLCBhbHRob3VnaCBtb3JlIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgorOmRhdGE6YHJhd19kYXRhX21hbmFnZXJgIGlzIHRoZQorOmF0dHI6YH5lbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kuY29udGVudF9tYW5hZ2VyYCBwcm92aWRlZCBieQorOmF0dHI6YH5lbWFpbC5wb2xpY3kuRW1haWxQb2xpY3lgIGFuZCBpdHMgZGVyaXZhdGl2ZXMuCisKKworLi4gZGF0YTo6IHJhd19kYXRhX21hbmFnZXIKKworICAgVGhpcyBjb250ZW50IG1hbmFnZXIgcHJvdmlkZXMgb25seSBhIG1pbmltdW0gaW50ZXJmYWNlIGJleW9uZCB0aGF0IHByb3ZpZGVkCisgICBieSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGl0c2VsZjogIGl0IGRlYWxzIG9ubHkgd2l0aCB0ZXh0LCByYXcKKyAgIGJ5dGUgc3RyaW5ncywgYW5kIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0cy4gIE5ldmVydGhlbGVzcywgaXQKKyAgIHByb3ZpZGVzIHNpZ25pZmljYW50IGFkdmFudGFnZXMgY29tcGFyZWQgdG8gdGhlIGJhc2UgQVBJOiBgYGdldF9jb250ZW50YGAgb24KKyAgIGEgdGV4dCBwYXJ0IHdpbGwgcmV0dXJuIGEgdW5pY29kZSBzdHJpbmcgd2l0aG91dCB0aGUgYXBwbGljYXRpb24gbmVlZGluZyB0bworICAgbWFudWFsbHkgZGVjb2RlIGl0LCBgYHNldF9jb250ZW50YGAgcHJvdmlkZXMgYSByaWNoIHNldCBvZiBvcHRpb25zIGZvcgorICAgY29udHJvbGxpbmcgdGhlIGhlYWRlcnMgYWRkZWQgdG8gYSBwYXJ0IGFuZCBjb250cm9sbGluZyB0aGUgY29udGVudCB0cmFuc2ZlcgorICAgZW5jb2RpbmcsIGFuZCBpdCBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIHZhcmlvdXMgYGBhZGRfYGAgbWV0aG9kcywgdGhlcmVieQorICAgc2ltcGxpZnlpbmcgdGhlIGNyZWF0aW9uIG9mIG11bHRpcGFydCBtZXNzYWdlcy4KKworICAgLi4gbWV0aG9kOjogZ2V0X2NvbnRlbnQobXNnLCBlcnJvcnM9J3JlcGxhY2UnKQorCisgICAgICBSZXR1cm4gdGhlIHBheWxvYWQgb2YgdGhlIHBhcnQgYXMgZWl0aGVyIGEgc3RyaW5nIChmb3IgYGB0ZXh0YGAgcGFydHMpLCBhCisgICAgICA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZWAgb2JqZWN0IChmb3IgYGBtZXNzYWdlL3JmYzgyMmBgCisgICAgICBwYXJ0cyksIG9yIGEgYGBieXRlc2BgIG9iamVjdCAoZm9yIGFsbCBvdGhlciBub24tbXVsdGlwYXJ0IHR5cGVzKS4gIFJhaXNlCisgICAgICBhIDpleGM6YEtleUVycm9yYCBpZiBjYWxsZWQgb24gYSBgYG11bHRpcGFydGBgLiAgSWYgdGhlIHBhcnQgaXMgYQorICAgICAgYGB0ZXh0YGAgcGFydCBhbmQgKmVycm9ycyogaXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgdGhlIGVycm9yIGhhbmRsZXIgd2hlbgorICAgICAgZGVjb2RpbmcgdGhlIHBheWxvYWQgdG8gdW5pY29kZS4gIFRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIgaXMKKyAgICAgIGBgcmVwbGFjZWBgLgorCisgICAuLiBtZXRob2Q6OiBzZXRfY29udGVudChtc2csIDwnc3RyJz4sIHN1YnR5cGU9InBsYWluIiwgY2hhcnNldD0ndXRmLTgnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0ZT1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSkKKyAgICAgICAgICAgICAgIHNldF9jb250ZW50KG1zZywgPCdieXRlcyc+LCBtYWludHlwZSwgc3VidHlwZSwgY3RlPSJiYXNlNjQiLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSkKKyAgICAgICAgICAgICAgIHNldF9jb250ZW50KG1zZywgPCdNZXNzYWdlJz4sIGN0ZT1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSkKKyAgICAgICAgICAgICAgIHNldF9jb250ZW50KG1zZywgPCdsaXN0Jz4sIHN1YnR5cGU9J21peGVkJywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisKKyAgICAgICBBZGQgaGVhZGVycyBhbmQgcGF5bG9hZCB0byAqbXNnKjoKKworICAgICAgIEFkZCBhIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlciB3aXRoIGEgYGBtYWludHlwZS9zdWJ0eXBlYGAKKyAgICAgICB2YWx1ZS4KKworICAgICAgICAgICAqIEZvciBgYHN0cmBgLCBzZXQgdGhlIE1JTUUgYGBtYWludHlwZWBgIHRvIGBgdGV4dGBgLCBhbmQgc2V0IHRoZQorICAgICAgICAgICAgIHN1YnR5cGUgdG8gKnN1YnR5cGUqIGlmIGl0IGlzIHNwZWNpZmllZCwgb3IgYGBwbGFpbmBgIGlmIGl0IGlzIG5vdC4KKyAgICAgICAgICAgKiBGb3IgYGBieXRlc2BgLCB1c2UgdGhlIHNwZWNpZmllZCAqbWFpbnR5cGUqIGFuZCAqc3VidHlwZSosIG9yCisgICAgICAgICAgICAgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGlmIHRoZXkgYXJlIG5vdCBzcGVjaWZpZWQuCisgICAgICAgICAgICogRm9yIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0cywgc2V0IHRoZSBtYWludHlwZSB0bworICAgICAgICAgICAgIGBgbWVzc2FnZWBgLCBhbmQgc2V0IHRoZSBzdWJ0eXBlIHRvICpzdWJ0eXBlKiBpZiBpdCBpcyBzcGVjaWZpZWQKKyAgICAgICAgICAgICBvciBgYHJmYzgyMmBgIGlmIGl0IGlzIG5vdC4gIElmICpzdWJ0eXBlKiBpcyBgYHBhcnRpYWxgYCwgcmFpc2UgYW4KKyAgICAgICAgICAgICBlcnJvciAoYGBieXRlc2BgIG9iamVjdHMgbXVzdCBiZSB1c2VkIHRvIGNvbnN0cnVjdAorICAgICAgICAgICAgIGBgbWVzc2FnZS9wYXJ0aWFsYGAgcGFydHMpLgorICAgICAgICAgICAqIEZvciAqPCdsaXN0Jz4qLCB3aGljaCBzaG91bGQgYmUgYSBsaXN0IG9mCisgICAgICAgICAgICAgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3RzLCBzZXQgdGhlIGBgbWFpbnR5cGVgYCB0bworICAgICAgICAgICAgIGBgbXVsdGlwYXJ0YGAsIGFuZCB0aGUgYGBzdWJ0eXBlYGAgdG8gKnN1YnR5cGUqIGlmIGl0IGlzCisgICAgICAgICAgICAgc3BlY2lmaWVkLCBhbmQgYGBtaXhlZGBgIGlmIGl0IGlzIG5vdC4gIElmIHRoZSBtZXNzYWdlIHBhcnRzIGluCisgICAgICAgICAgICAgdGhlICo8J2xpc3QnPiogaGF2ZSA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXJzLCByZW1vdmUKKyAgICAgICAgICAgICB0aGVtLgorCisgICAgICAgSWYgKmNoYXJzZXQqIGlzIHByb3ZpZGVkICh3aGljaCBpcyB2YWxpZCBvbmx5IGZvciBgYHN0cmBgKSwgZW5jb2RlIHRoZQorICAgICAgIHN0cmluZyB0byBieXRlcyB1c2luZyB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBzZXQuICBUaGUgZGVmYXVsdCBpcworICAgICAgIGBgdXRmLThgYC4gIElmIHRoZSBzcGVjaWZpZWQgKmNoYXJzZXQqIGlzIGEga25vd24gYWxpYXMgZm9yIGEgc3RhbmRhcmQKKyAgICAgICBNSU1FIGNoYXJzZXQgbmFtZSwgdXNlIHRoZSBzdGFuZGFyZCBjaGFyc2V0IGluc3RlYWQuCisKKyAgICAgICBJZiAqY3RlKiBpcyBzZXQsIGVuY29kZSB0aGUgcGF5bG9hZCB1c2luZyB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgdHJhbnNmZXIKKyAgICAgICBlbmNvZGluZywgYW5kIHNldCB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtVHJhbnNmZXItRW5kY29kaW5nYCBoZWFkZXIgdG8KKyAgICAgICB0aGF0IHZhbHVlLiAgRm9yIGBgc3RyYGAgb2JqZWN0cywgaWYgaXQgaXMgbm90IHNldCB1c2UgaGV1cmlzdGljcyB0bworICAgICAgIGRldGVybWluZSB0aGUgbW9zdCBjb21wYWN0IGVuY29kaW5nLiAgUG9zc2libGUgdmFsdWVzIGZvciAqY3RlKiBhcmUKKyAgICAgICBgYHF1b3RlZC1wcmludGFibGVgYCwgYGBiYXNlNjRgYCwgYGA3Yml0YGAsIGBgOGJpdGBgLCBhbmQgYGBiaW5hcnlgYC4KKyAgICAgICBJZiB0aGUgaW5wdXQgY2Fubm90IGJlIGVuY29kZWQgaW4gdGhlIHNwZWNpZmllZCBlbmNvZGluZyAoZWc6IGBgN2JpdGBgKSwKKyAgICAgICByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgLiAgRm9yIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAsIHBlcgorICAgICAgIDpyZmM6YDIwNDZgLCByYWlzZSBhbiBlcnJvciBpZiBhICpjdGUqIG9mIGBgcXVvdGVkLXByaW50YWJsZWBgIG9yCisgICAgICAgYGBiYXNlNjRgYCBpcyByZXF1ZXN0ZWQgZm9yICpzdWJ0eXBlKiBgYHJmYzgyMmBgLCBhbmQgZm9yIGFueSAqY3RlKgorICAgICAgIG90aGVyIHRoYW4gYGA3Yml0YGAgZm9yICpzdWJ0eXBlKiBgYGV4dGVybmFsLWJvZHlgYC4gIEZvcgorICAgICAgIGBgbWVzc2FnZS9yZmM4MjJgYCwgdXNlIGBgOGJpdGBgIGlmICpjdGUqIGlzIG5vdCBzcGVjaWZpZWQuICBGb3IgYWxsCisgICAgICAgb3RoZXIgdmFsdWVzIG9mICpzdWJ0eXBlKiwgdXNlIGBgN2JpdGBgLgorCisgICAgICAgLi4gbm90ZTo6IEEgKmN0ZSogb2YgYGBiaW5hcnlgYCBkb2VzIG5vdCBhY3R1YWxseSB3b3JrIGNvcnJlY3RseSB5ZXQuCisgICAgICAgICAgVGhlIGBgTWVzc2FnZWBgIG9iamVjdCBhcyBtb2RpZmllZCBieSBgYHNldF9jb250ZW50YGAgaXMgY29ycmVjdCwgYnV0CisgICAgICAgICAgOmNsYXNzOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yYCBkb2VzIG5vdCBzZXJpYWxpemUgaXQKKyAgICAgICAgICBjb3JyZWN0bHkuCisKKyAgICAgICBJZiAqZGlzcG9zaXRpb24qIGlzIHNldCwgdXNlIGl0IGFzIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLiAgSWYgbm90IHNwZWNpZmllZCwgYW5kCisgICAgICAgKmZpbGVuYW1lKiBpcyBzcGVjaWZpZWQsIGFkZCB0aGUgaGVhZGVyIHdpdGggdGhlIHZhbHVlIGBgYXR0YWNobWVudGBgLgorICAgICAgIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgYW5kICpmaWxlbmFtZSogaXMgYWxzbyBub3Qgc3BlY2lmaWVkLCBkbyBub3QgYWRkCisgICAgICAgdGhlIGhlYWRlci4gIFRoZSBvbmx5IHZhbGlkIHZhbHVlcyBmb3IgKmRpc3Bvc2l0aW9uKiBhcmUgYGBhdHRhY2htZW50YGAKKyAgICAgICBhbmQgYGBpbmxpbmVgYC4KKworICAgICAgIElmICpmaWxlbmFtZSogaXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgdGhlIHZhbHVlIG9mIHRoZSBgYGZpbGVuYW1lYGAKKyAgICAgICBwYXJhbWV0ZXIgb2YgdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIuICBUaGVyZSBpcyBubworICAgICAgIGRlZmF1bHQuCisKKyAgICAgICBJZiAqY2lkKiBpcyBzcGVjaWZpZWQsIGFkZCBhIDptYWlsaGVhZGVyOmBDb250ZW50LUlEYCBoZWFkZXIgd2l0aAorICAgICAgICpjaWQqIGFzIGl0cyB2YWx1ZS4KKworICAgICAgIElmICpwYXJhbXMqIGlzIHNwZWNpZmllZCwgaXRlcmF0ZSBpdHMgYGBpdGVtc2BgIG1ldGhvZCBhbmQgdXNlIHRoZQorICAgICAgIHJlc3VsdGluZyBgYChrZXksIHZhbHVlKWBgIHBhaXJzIHRvIHNldCBhZGRpdGlvbmFsIHBhcmFtdGVycyBvbiB0aGUKKyAgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBoZWFkZXIuCisKKyAgICAgICBJZiAqaGVhZGVycyogaXMgc3BlY2lmaWVkIGFuZCBpcyBhIGxpc3Qgb2Ygc3RyaW5ncyBvZiB0aGUgZm9ybQorICAgICAgIGBgaGVhZGVybmFtZTogaGVhZGVydmFsdWVgYCBvciBhIGxpc3Qgb2YgYGBoZWFkZXJgYCBvYmplY3RzCisgICAgICAgKGRpc3Rpbmd1aXNlZCBmcm9tIHN0cmluZ3MgYnkgaGF2aW5nIGEgYGBuYW1lYGAgYXR0cmlidXRlKSwgYWRkIHRoZQorICAgICAgIGhlYWRlcnMgdG8gKm1zZyouCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CmluZGV4IDMwNzVlODYuLjg0YTVmNTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CkBAIC0zMywyMyArMzMsMzEgQEAKIAogLi4gY2xhc3M6OiBNZXNzYWdlKHBvbGljeT1jb21wYXQzMikKIAotICAgVGhlICpwb2xpY3kqIGFyZ3VtZW50IGRldGVybWllbnMgdGhlIDptb2Q6YH5lbWFpbC5wb2xpY3lgIHRoYXQgd2lsbCBiZSB1c2VkCi0gICB0byB1cGRhdGUgdGhlIG1lc3NhZ2UgbW9kZWwuICBUaGUgZGVmYXVsdCB2YWx1ZSwgOmNsYXNzOmBjb21wYXQzMgotICAgPGVtYWlsLnBvbGljeS5Db21wYXQzMj5gIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlCi0gICBQeXRob24gMy4yIHZlcnNpb24gb2YgdGhlIGVtYWlsIHBhY2thZ2UuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCisgICBJZiAqcG9saWN5KiBpcyBzcGVjaWZpZWQgKGl0IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSA6bW9kOmB+ZW1haWwucG9saWN5YAorICAgY2xhc3MpIHVzZSB0aGUgcnVsZXMgaXQgc3BlY2lmaWVzIHRvIHVkcGF0ZSBhbmQgc2VyaWFsaXplIHRoZSByZXByZXNlbnRhdGlvbgorICAgb2YgdGhlIG1lc3NhZ2UuICBJZiAqcG9saWN5KiBpcyBub3Qgc2V0LCB1c2UgdGhlIDpjbGFzczpgY29tcGF0MzIKKyAgIDxlbWFpbC5wb2xpY3kuQ29tcGF0MzI+YCBwb2xpY3ksIHdoaWNoIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgIHRoZSBQeXRob24gMy4yIHZlcnNpb24gb2YgdGhlIGVtYWlsIHBhY2thZ2UuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCiAgICA6bW9kOmB+ZW1haWwucG9saWN5YCBkb2N1bWVudGF0aW9uLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMyBUaGUgKnBvbGljeSoga2V5d29yZCBhcmd1bWVudCB3YXMgYWRkZWQuCiAKIAotICAgLi4gbWV0aG9kOjogYXNfc3RyaW5nKHVuaXhmcm9tPUZhbHNlLCBtYXhoZWFkZXJsZW49MCkKKyAgIC4uIG1ldGhvZDo6IGFzX3N0cmluZyh1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTAsIHBvbGljeT1Ob25lKQogCiAgICAgICBSZXR1cm4gdGhlIGVudGlyZSBtZXNzYWdlIGZsYXR0ZW5lZCBhcyBhIHN0cmluZy4gIFdoZW4gb3B0aW9uYWwgKnVuaXhmcm9tKgotICAgICAgaXMgYGBUcnVlYGAsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZy4KLSAgICAgICp1bml4ZnJvbSogZGVmYXVsdHMgdG8gYGBGYWxzZWBgLiAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlcgotICAgICAgY2hhbmdlcyB0byB0aGUgOmNsYXNzOmBNZXNzYWdlYCBpZiBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0bwotICAgICAgY29tcGxldGUgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIGEgc3RyaW5nIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heQotICAgICAgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkKS4KKyAgICAgIGlzIHRydWUsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZy4KKyAgICAgICp1bml4ZnJvbSogZGVmYXVsdHMgdG8gYGBGYWxzZWBgLiAgRm9yIGJhY2t3YXJkIGNvbXBhYml0aWxpdHkgcmVhc29ucywKKyAgICAgICptYXhoZWFkZXJsZW4qIGRlZmF1bHRzIHRvIGBgMGBgLCBzbyBpZiB5b3Ugd2FudCBhIGRpZmZlcmVudCB2YWx1ZSB5b3UKKyAgICAgIG11c3Qgb3ZlcnJpZGUgaXQgZXhwbGljaXRseSAodGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgKm1heF9saW5lX2xlbmd0aCogaW4KKyAgICAgIHRoZSBwb2xpY3kgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoaXMgbWV0aG9kKS4gIFRoZSAqcG9saWN5KiBhcmd1bWVudCBtYXkgYmUKKyAgICAgIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9idGFpbmVkIGZyb20gdGhlIG1lc3NhZ2UgaW5zdGFuY2UuCisgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgc29tZSBvZiB0aGUgZm9ybWF0dGluZyBwcm9kdWNlZCBieSB0aGUKKyAgICAgIG1ldGhvZCwgc2luY2UgdGhlIHNwZWNpZmllZCAqcG9saWN5KiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgYGBHZW5lcmF0b3JgYC4KKworICAgICAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlciBjaGFuZ2VzIHRvIHRoZSA6Y2xhc3M6YE1lc3NhZ2VgIGlmCisgICAgICBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0byBjb21wbGV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gdG8gYSBzdHJpbmcKKyAgICAgIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heSBiZSBnZW5lcmF0ZWQgb3IgbW9kaWZpZWQpLgogCiAgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBhbmQgbWF5IG5vdCBhbHdheXMKICAgICAgIGZvcm1hdCB0aGUgbWVzc2FnZSB0aGUgd2F5IHlvdSB3YW50LiAgRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQgaXQgZG9lcwpAQCAtNjUsMTAgKzczLDU4IEBACiAgICAgICAgICBnLmZsYXR0ZW4obXNnKQogICAgICAgICAgdGV4dCA9IGZwLmdldHZhbHVlKCkKIAorICAgICAgSWYgdGhlIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5zIGJpbmFyeSBkYXRhIHRoYXQgaXMgbm90IGVuY29kZWQgYWNjb3JkaW5nCisgICAgICB0byBSRkMgc3RhbmRhcmRzLCB0aGUgbm9uLWNvbXBsaWFudCBkYXRhIHdpbGwgYmUgcmVwbGFjZWQgYnkgdW5pY29kZQorICAgICAgInVua25vd24gY2hhcmFjdGVyIiBjb2RlIHBvaW50cy4gIChTZWUgYWxzbyA6bWV0aDpgLmFzX2J5dGVzYCBhbmQKKyAgICAgIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcmAuKQorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNCB0aGUgKnBvbGljeSoga2V5d29yZCBhcmd1bWVudCB3YXMgYWRkZWQuCisKIAogICAgLi4gbWV0aG9kOjogX19zdHJfXygpCiAKLSAgICAgIEVxdWl2YWxlbnQgdG8gYGBhc19zdHJpbmcodW5peGZyb209VHJ1ZSlgYC4KKyAgICAgIEVxdWl2YWxlbnQgdG8gOm1ldGg6YC5hc19zdHJpbmcoKWAuICBBbGxvd3MgYGBzdHIobXNnKWBgIHRvIHByb2R1Y2UgYQorICAgICAgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBtZXNzYWdlLgorCisKKyAgIC4uIG1ldGhvZDo6IGFzX2J5dGVzKHVuaXhmcm9tPUZhbHNlLCBwb2xpY3k9Tm9uZSkKKworICAgICAgUmV0dXJuIHRoZSBlbnRpcmUgbWVzc2FnZSBmbGF0dGVuZWQgYXMgYSBieXRlcyBvYmplY3QuICBXaGVuIG9wdGlvbmFsCisgICAgICAqdW5peGZyb20qIGlzIHRydWUsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkCisgICAgICBzdHJpbmcuICAqdW5peGZyb20qIGRlZmF1bHRzIHRvIGBgRmFsc2VgYC4gIFRoZSAqcG9saWN5KiBhcmd1bWVudCBtYXkgYmUKKyAgICAgIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9idGFpbmVkIGZyb20gdGhlIG1lc3NhZ2UgaW5zdGFuY2UuCisgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgc29tZSBvZiB0aGUgZm9ybWF0dGluZyBwcm9kdWNlZCBieSB0aGUKKyAgICAgIG1ldGhvZCwgc2luY2UgdGhlIHNwZWNpZmllZCAqcG9saWN5KiB3aWxsIGJlIHBhc3NlZCB0byB0aGUKKyAgICAgIGBgQnl0ZXNHZW5lcmF0b3JgYC4KKworICAgICAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlciBjaGFuZ2VzIHRvIHRoZSA6Y2xhc3M6YE1lc3NhZ2VgIGlmCisgICAgICBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0byBjb21wbGV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gdG8gYSBzdHJpbmcKKyAgICAgIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heSBiZSBnZW5lcmF0ZWQgb3IgbW9kaWZpZWQpLgorCisgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBhbmQgbWF5IG5vdCBhbHdheXMKKyAgICAgIGZvcm1hdCB0aGUgbWVzc2FnZSB0aGUgd2F5IHlvdSB3YW50LiAgRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQgaXQgZG9lcworICAgICAgbm90IGRvIHRoZSBtYW5nbGluZyBvZiBsaW5lcyB0aGF0IGJlZ2luIHdpdGggYGBGcm9tYGAgdGhhdCBpcworICAgICAgcmVxdWlyZWQgYnkgdGhlIHVuaXggbWJveCBmb3JtYXQuICBGb3IgbW9yZSBmbGV4aWJpbGl0eSwgaW5zdGFudGlhdGUgYQorICAgICAgOmNsYXNzOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yYCBpbnN0YW5jZSBhbmQgdXNlIGl0cworICAgICAgOm1ldGg6YH5lbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3IuZmxhdHRlbmAgbWV0aG9kIGRpcmVjdGx5LgorICAgICAgRm9yIGV4YW1wbGU6OgorCisgICAgICAgICBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCisgICAgICAgICBmcm9tIGVtYWlsLmdlbmVyYXRvciBpbXBvcnQgQnl0ZXNHZW5lcmF0b3IKKyAgICAgICAgIGZwID0gQnl0ZXNJTygpCisgICAgICAgICBnID0gQnl0ZXNHZW5lcmF0b3IoZnAsIG1hbmdsZV9mcm9tXz1UcnVlLCBtYXhoZWFkZXJsZW49NjApCisgICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICAgdGV4dCA9IGZwLmdldHZhbHVlKCkKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworICAgLi4gbWV0aG9kOjogX19ieXRlc19fKCkKKworICAgICAgRXF1aXZhbGVudCB0byA6bWV0aDpgLmFzX2J5dGVzKClgLiAgQWxsb3dzIGBgYnl0ZXMobXNnKWBgIHRvIHByb2R1Y2UgYQorICAgICAgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBtZXNzYWdlLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogCiAgICAuLiBtZXRob2Q6OiBpc19tdWx0aXBhcnQoKQpAQCAtNDEwLDcgKzQ2Niw4IEBACiAgICAgICB0byBgYEZhbHNlYGAuCiAKIAotICAgLi4gbWV0aG9kOjogc2V0X3BhcmFtKHBhcmFtLCB2YWx1ZSwgaGVhZGVyPSdDb250ZW50LVR5cGUnLCByZXF1b3RlPVRydWUsIGNoYXJzZXQ9Tm9uZSwgbGFuZ3VhZ2U9JycpCisgICAuLiBtZXRob2Q6OiBzZXRfcGFyYW0ocGFyYW0sIHZhbHVlLCBoZWFkZXI9J0NvbnRlbnQtVHlwZScsIHJlcXVvdGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0PU5vbmUsIGxhbmd1YWdlPScnLCByZXBsYWNlPUZhbHNlKQogCiAgICAgICBTZXQgYSBwYXJhbWV0ZXIgaW4gdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlci4gIElmIHRoZQogICAgICAgcGFyYW1ldGVyIGFscmVhZHkgZXhpc3RzIGluIHRoZSBoZWFkZXIsIGl0cyB2YWx1ZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGgKQEAgLTQyNyw2ICs0ODQsMTIgQEAKICAgICAgIGxhbmd1YWdlLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSBzdHJpbmcuICBCb3RoICpjaGFyc2V0KiBhbmQgKmxhbmd1YWdlKgogICAgICAgc2hvdWxkIGJlIHN0cmluZ3MuCiAKKyAgICAgIElmICpyZXBsYWNlKiBpcyBgYEZhbHNlYGAgKHRoZSBkZWZhdWx0KSB0aGUgaGVhZGVyIGlzIG1vdmVkIHRvIHRoZQorICAgICAgZW5kIG9mIHRoZSBsaXN0IG9mIGhlYWRlcnMuICBJZiAqcmVwbGFjZSogaXMgYGBUcnVlYGAsIHRoZSBoZWFkZXIKKyAgICAgIHdpbGwgYmUgdXBkYXRlZCBpbiBwbGFjZS4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6IDMuNCBgYHJlcGxhY2VgYCBrZXl3b3JkIHdhcyBhZGRlZC4KKwogCiAgICAuLiBtZXRob2Q6OiBkZWxfcGFyYW0ocGFyYW0sIGhlYWRlcj0nY29udGVudC10eXBlJywgcmVxdW90ZT1UcnVlKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwucG9saWN5LnJzdAppbmRleCBjYjIwMjNjLi5jMmY5ZTZhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QKQEAgLTk3LDYgKzk3LDE3IEBACiBgYHNlbmRtYWlsJ3NgYCBgYHN0ZGluYGAsIHdoZXJlIHRoZSBkZWZhdWx0IHBvbGljeSB3b3VsZCB1c2UgYGBcbmBgIGxpbmUKIHNlcGFyYXRvcnMuCiAKK1NvbWUgZW1haWwgcGFja2FnZSBtZXRob2RzIGFjY2VwdCBhICpwb2xpY3kqIGtleXdvcmQgYXJndW1lbnQsIGFsbG93aW5nIHRoZQorcG9saWN5IHRvIGJlIG92ZXJyaWRkZW4gZm9yIHRoYXQgbWV0aG9kLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSB1c2VzCit0aGUgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nYCBtZXRob2Qgb2YgdGhlICptc2cqIG9iamVjdCBmcm9tCit0aGUgcHJldmlvdXMgZXhhbXBsZSBhbmQgd3JpdGVzIHRoZSBtZXNzYWdlIHRvIGEgZmlsZSB1c2luZyB0aGUgbmF0aXZlIGxpbmUKK3NlcGFyYXRvcnMgZm9yIHRoZSBwbGF0Zm9ybSBvbiB3aGljaCBpdCBpcyBydW5uaW5nOjoKKworICAgPj4+IGltcG9ydCBvcworICAgPj4+IHdpdGggb3BlbignY29udmVydGVkLnR4dCcsICd3YicpIGFzIGY6CisgICAuLi4gICAgIGYud3JpdGUobXNnLmFzX2J5dGVzKHBvbGljeT1tc2cucG9saWN5LmNsb25lKGxpbmVzZXA9b3MubGluZXNlcCkpKQorICAgMTcKKwogUG9saWN5IG9iamVjdHMgY2FuIGFsc28gYmUgY29tYmluZWQgdXNpbmcgdGhlIGFkZGl0aW9uIG9wZXJhdG9yLCBwcm9kdWNpbmcgYQogcG9saWN5IG9iamVjdCB3aG9zZSBzZXR0aW5ncyBhcmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgbm9uLWRlZmF1bHQgdmFsdWVzIG9mIHRoZQogc3VtbWVkIG9iamVjdHM6OgpAQCAtMzYwLDcgKzM3MSw3IEBACiAgICB0bykgOnJmYzpgNTMyMmAsIDpyZmM6YDIwNDdgLCBhbmQgdGhlIGN1cnJlbnQgTUlNRSBSRkNzLgogCiAgICBUaGlzIHBvbGljeSBhZGRzIG5ldyBoZWFkZXIgcGFyc2luZyBhbmQgZm9sZGluZyBhbGdvcml0aG1zLiAgSW5zdGVhZCBvZgotICAgc2ltcGxlIHN0cmluZ3MsIGhlYWRlcnMgYXJlIGN1c3RvbSBvYmplY3RzIHdpdGggY3VzdG9tIGF0dHJpYnV0ZXMgZGVwZW5kaW5nCisgICBzaW1wbGUgc3RyaW5ncywgaGVhZGVycyBhcmUgYGBzdHJgYCBzdWJjbGFzc2VzIHdpdGggYXR0cmlidXRlcyB0aGF0IGRlcGVuZAogICAgb24gdGhlIHR5cGUgb2YgdGhlIGZpZWxkLiAgVGhlIHBhcnNpbmcgYW5kIGZvbGRpbmcgYWxnb3JpdGhtIGZ1bGx5IGltcGxlbWVudAogICAgOnJmYzpgMjA0N2AgYW5kIDpyZmM6YDUzMjJgLgogCkBAIC0zOTcsNiArNDA4LDIwIEBACiAgICAgICBmaWVsZHMgYXJlIHRyZWF0ZWQgYXMgdW5zdHJ1Y3R1cmVkLiAgVGhpcyBsaXN0IHdpbGwgYmUgY29tcGxldGVkIGJlZm9yZQogICAgICAgdGhlIGV4dGVuc2lvbiBpcyBtYXJrZWQgc3RhYmxlLikKIAorICAgLi4gYXR0cmlidXRlOjogY29udGVudF9tYW5hZ2VyCisKKyAgICAgIEFuIG9iamVjdCB3aXRoIGF0IGxlYXN0IHR3byBtZXRob2RzOiBnZXRfY29udGVudCBhbmQgc2V0X2NvbnRlbnQuICBXaGVuCisgICAgICB0aGUgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NvbnRlbnRgIG9yCisgICAgICA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfY29udGVudGAgbWV0aG9kIG9mIGEKKyAgICAgIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0IGlzIGNhbGxlZCwgaXQgY2FsbHMgdGhlCisgICAgICBjb3JyZXNwb25kaW5nIG1ldGhvZCBvZiB0aGlzIG9iamVjdCwgcGFzc2luZyBpdCB0aGUgbWVzc2FnZSBvYmplY3QgYXMgaXRzCisgICAgICBmaXJzdCBhcmd1bWVudCwgYW5kIGFueSBhcmd1bWVudHMgb3Iga2V5d29yZHMgdGhhdCB3ZXJlIHBhc3NlZCB0byBpdCBhcworICAgICAgYWRkaXRpb25hbCBhcmd1bWVudHMuICBCeSBkZWZhdWx0IGBgY29udGVudF9tYW5hZ2VyYGAgaXMgc2V0IHRvCisgICAgICA6ZGF0YTpgfmVtYWlsLmNvbnRlbnRtYW5hZ2VyLnJhd19kYXRhX21hbmFnZXJgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQgMy40CisKKwogICAgVGhlIGNsYXNzIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBhYnN0cmFjdAogICAgbWV0aG9kcyBvZiA6Y2xhc3M6YFBvbGljeWA6CiAKQEAgLTQxNiw3ICs0NDEsNyBAQAogICAgICAgVGhlIG5hbWUgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLiAgSWYgdGhlIGlucHV0IHZhbHVlIGhhcyBhIGBgbmFtZWBgCiAgICAgICBhdHRyaWJ1dGUgYW5kIGl0IG1hdGNoZXMgKm5hbWUqIGlnbm9yaW5nIGNhc2UsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZAogICAgICAgdW5jaGFuZ2VkLiAgT3RoZXJ3aXNlIHRoZSAqbmFtZSogYW5kICp2YWx1ZSogYXJlIHBhc3NlZCB0bwotICAgICAgYGBoZWFkZXJfZmFjdG9yeWBgLCBhbmQgdGhlIHJlc3VsdGluZyBjdXN0b20gaGVhZGVyIG9iamVjdCBpcyByZXR1cm5lZCBhcworICAgICAgYGBoZWFkZXJfZmFjdG9yeWBgLCBhbmQgdGhlIHJlc3VsdGluZyBoZWFkZXIgb2JqZWN0IGlzIHJldHVybmVkIGFzCiAgICAgICB0aGUgdmFsdWUuICBJbiB0aGlzIGNhc2UgYSBgYFZhbHVlRXJyb3JgYCBpcyByYWlzZWQgaWYgdGhlIGlucHV0IHZhbHVlCiAgICAgICBjb250YWlucyBDUiBvciBMRiBjaGFyYWN0ZXJzLgogCkBAIC00MjQsNyArNDQ5LDcgQEAKIAogICAgICAgSWYgdGhlIHZhbHVlIGhhcyBhIGBgbmFtZWBgIGF0dHJpYnV0ZSwgaXQgaXMgcmV0dXJuZWQgdG8gdW5tb2RpZmllZC4KICAgICAgIE90aGVyd2lzZSB0aGUgKm5hbWUqLCBhbmQgdGhlICp2YWx1ZSogd2l0aCBhbnkgQ1Igb3IgTEYgY2hhcmFjdGVycwotICAgICAgcmVtb3ZlZCwgYXJlIHBhc3NlZCB0byB0aGUgYGBoZWFkZXJfZmFjdG9yeWBgLCBhbmQgdGhlIHJlc3VsdGluZyBjdXN0b20KKyAgICAgIHJlbW92ZWQsIGFyZSBwYXNzZWQgdG8gdGhlIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcKICAgICAgIGhlYWRlciBvYmplY3QgaXMgcmV0dXJuZWQuICBBbnkgc3Vycm9nYXRlZXNjYXBlZCBieXRlcyBnZXQgdHVybmVkIGludG8KICAgICAgIHRoZSB1bmljb2RlIHVua25vd24tY2hhcmFjdGVyIGdseXBoLgogCkBAIC00MzQsOSArNDU5LDkgQEAKICAgICAgIEEgdmFsdWUgaXMgY29uc2lkZXJlZCB0byBiZSBhICdzb3VyY2UgdmFsdWUnIGlmIGFuZCBvbmx5IGlmIGl0IGRvZXMgbm90CiAgICAgICBoYXZlIGEgYGBuYW1lYGAgYXR0cmlidXRlIChoYXZpbmcgYSBgYG5hbWVgYCBhdHRyaWJ1dGUgbWVhbnMgaXQgaXMgYQogICAgICAgaGVhZGVyIG9iamVjdCBvZiBzb21lIHNvcnQpLiAgSWYgYSBzb3VyY2UgdmFsdWUgbmVlZHMgdG8gYmUgcmVmb2xkZWQKLSAgICAgIGFjY29yZGluZyB0byB0aGUgcG9saWN5LCBpdCBpcyBjb252ZXJ0ZWQgaW50byBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGJ5CisgICAgICBhY2NvcmRpbmcgdG8gdGhlIHBvbGljeSwgaXQgaXMgY29udmVydGVkIGludG8gYSBoZWFkZXIgb2JqZWN0IGJ5CiAgICAgICBwYXNzaW5nIHRoZSAqbmFtZSogYW5kIHRoZSAqdmFsdWUqIHdpdGggYW55IENSIGFuZCBMRiBjaGFyYWN0ZXJzIHJlbW92ZWQKLSAgICAgIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAuICBGb2xkaW5nIG9mIGEgY3VzdG9tIGhlYWRlciBvYmplY3QgaXMgZG9uZSBieQorICAgICAgdG8gdGhlIGBgaGVhZGVyX2ZhY3RvcnlgYC4gIEZvbGRpbmcgb2YgYSBoZWFkZXIgb2JqZWN0IGlzIGRvbmUgYnkKICAgICAgIGNhbGxpbmcgaXRzIGBgZm9sZGBgIG1ldGhvZCB3aXRoIHRoZSBjdXJyZW50IHBvbGljeS4KIAogICAgICAgU291cmNlIHZhbHVlcyBhcmUgc3BsaXQgaW50byBsaW5lcyB1c2luZyA6bWV0aDpgfnN0ci5zcGxpdGxpbmVzYC4gIElmCkBAIC00OTEsMjMgKzUxNiwyMyBAQAogdGhlIGVtYWlsIHBhY2thZ2UgaXMgY2hhbmdlZCBmcm9tIHRoZSBQeXRob24gMy4yIEFQSSBpbiB0aGUgZm9sbG93aW5nIHdheXM6CiAKICAgICogU2V0dGluZyBhIGhlYWRlciBvbiBhIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgcmVzdWx0cyBpbiB0aGF0Ci0gICAgIGhlYWRlciBiZWluZyBwYXJzZWQgYW5kIGEgY3VzdG9tIGhlYWRlciBvYmplY3QgY3JlYXRlZC4KKyAgICAgaGVhZGVyIGJlaW5nIHBhcnNlZCBhbmQgYSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQuCiAKICAgICogRmV0Y2hpbmcgYSBoZWFkZXIgdmFsdWUgZnJvbSBhIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgcmVzdWx0cwotICAgICBpbiB0aGF0IGhlYWRlciBiZWluZyBwYXJzZWQgYW5kIGEgY3VzdG9tIGhlYWRlciBvYmplY3QgY3JlYXRlZCBhbmQKKyAgICAgaW4gdGhhdCBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGhlYWRlciBvYmplY3QgY3JlYXRlZCBhbmQKICAgICAgcmV0dXJuZWQuCiAKLSAgICogQW55IGN1c3RvbSBoZWFkZXIgb2JqZWN0LCBvciBhbnkgaGVhZGVyIHRoYXQgaXMgcmVmb2xkZWQgZHVlIHRvIHRoZQorICAgKiBBbnkgaGVhZGVyIG9iamVjdCwgb3IgYW55IGhlYWRlciB0aGF0IGlzIHJlZm9sZGVkIGR1ZSB0byB0aGUKICAgICAgcG9saWN5IHNldHRpbmdzLCBpcyBmb2xkZWQgdXNpbmcgYW4gYWxnb3JpdGhtIHRoYXQgZnVsbHkgaW1wbGVtZW50cyB0aGUKICAgICAgUkZDIGZvbGRpbmcgYWxnb3JpdGhtcywgaW5jbHVkaW5nIGtub3dpbmcgd2hlcmUgZW5jb2RlZCB3b3JkcyBhcmUgcmVxdWlyZWQKICAgICAgYW5kIGFsbG93ZWQuCiAKIEZyb20gdGhlIGFwcGxpY2F0aW9uIHZpZXcsIHRoaXMgbWVhbnMgdGhhdCBhbnkgaGVhZGVyIG9idGFpbmVkIHRocm91Z2ggdGhlCi06Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGlzIGEgY3VzdG9tIGhlYWRlciBvYmplY3Qgd2l0aCBjdXN0b20KKzpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgaXMgYSBoZWFkZXIgb2JqZWN0IHdpdGggZXh0cmEKIGF0dHJpYnV0ZXMsIHdob3NlIHN0cmluZyB2YWx1ZSBpcyB0aGUgZnVsbHkgZGVjb2RlZCB1bmljb2RlIHZhbHVlIG9mIHRoZQogaGVhZGVyLiAgTGlrZXdpc2UsIGEgaGVhZGVyIG1heSBiZSBhc3NpZ25lZCBhIG5ldyB2YWx1ZSwgb3IgYSBuZXcgaGVhZGVyCiBjcmVhdGVkLCB1c2luZyBhIHVuaWNvZGUgc3RyaW5nLCBhbmQgdGhlIHBvbGljeSB3aWxsIHRha2UgY2FyZSBvZiBjb252ZXJ0aW5nCiB0aGUgdW5pY29kZSBzdHJpbmcgaW50byB0aGUgY29ycmVjdCBSRkMgZW5jb2RlZCBmb3JtLgogCi1UaGUgY3VzdG9tIGhlYWRlciBvYmplY3RzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIGFyZSBkZXNjcmliZWQgaW4KK1RoZSBoZWFkZXIgb2JqZWN0cyBhbmQgdGhlaXIgYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkIGluCiA6bW9kOmB+ZW1haWwuaGVhZGVycmVnaXN0cnlgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwucnN0CmluZGV4IGE2Y2JiY2UuLjMzMWQyZWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5yc3QKQEAgLTUzLDYgKzUzLDcgQEAKICAgIGVtYWlsLmdlbmVyYXRvci5yc3QKICAgIGVtYWlsLnBvbGljeS5yc3QKICAgIGVtYWlsLmhlYWRlcnJlZ2lzdHJ5LnJzdAorICAgZW1haWwuY29udGVudG1hbmFnZXIucnN0CiAgICBlbWFpbC5taW1lLnJzdAogICAgZW1haWwuaGVhZGVyLnJzdAogICAgZW1haWwuY2hhcnNldC5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Vuc3VyZXBpcC5yc3QgYi9Eb2MvbGlicmFyeS9lbnN1cmVwaXAucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODIxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9lbnN1cmVwaXAucnN0CkBAIC0wLDAgKzEsMTMxIEBACis6bW9kOmBlbnN1cmVwaXBgIC0tLSBCb290c3RyYXBwaW5nIHRoZSBgYHBpcGBgIGluc3RhbGxlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogZW5zdXJlcGlwCisgICA6c3lub3BzaXM6IEJvb3RzdHJhcHBpbmcgdGhlIGBgcGlwYGAgaW5zdGFsbGVyIGludG8gYW4gZXhpc3RpbmcgUHl0aG9uCisgICAgICAgICAgICAgIGluc3RhbGxhdGlvbiBvciB2aXJ0dWFsIGVudmlyb25tZW50LgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworVGhlIDptb2Q6YGVuc3VyZXBpcGAgcGFja2FnZSBwcm92aWRlcyBzdXBwb3J0IGZvciBib290c3RyYXBwaW5nIHRoZSBgYHBpcGBgCitpbnN0YWxsZXIgaW50byBhbiBleGlzdGluZyBQeXRob24gaW5zdGFsbGF0aW9uIG9yIHZpcnR1YWwgZW52aXJvbm1lbnQuIFRoaXMKK2Jvb3RzdHJhcHBpbmcgYXBwcm9hY2ggcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCBgYHBpcGBgIGlzIGFuIGluZGVwZW5kZW50Citwcm9qZWN0IHdpdGggaXRzIG93biByZWxlYXNlIGN5Y2xlLCBhbmQgdGhlIGxhdGVzdCBhdmFpbGFibGUgc3RhYmxlIHZlcnNpb24KK2lzIGJ1bmRsZWQgd2l0aCBtYWludGVuYW5jZSBhbmQgZmVhdHVyZSByZWxlYXNlcyBvZiB0aGUgQ1B5dGhvbiByZWZlcmVuY2UKK2ludGVycHJldGVyLgorCitJbiBtb3N0IGNhc2VzLCBlbmQgdXNlcnMgb2YgUHl0aG9uIHNob3VsZG4ndCBuZWVkIHRvIGludm9rZSB0aGlzIG1vZHVsZQorZGlyZWN0bHkgKGFzIGBgcGlwYGAgc2hvdWxkIGJlIGJvb3RzdHJhcHBlZCBieSBkZWZhdWx0KSwgYnV0IGl0IG1heSBiZQorbmVlZGVkIGlmIGluc3RhbGxpbmcgYGBwaXBgYCB3YXMgc2tpcHBlZCB3aGVuIGluc3RhbGxpbmcgUHl0aG9uIChvcgord2hlbiBjcmVhdGluZyBhIHZpcnR1YWwgZW52aXJvbm1lbnQpIG9yIGFmdGVyIGV4cGxpY2l0bHkgdW5pbnN0YWxsaW5nCitgYHBpcGBgLgorCisuLiBub3RlOjoKKworICAgVGhpcyBtb2R1bGUgKmRvZXMgbm90KiBhY2Nlc3MgdGhlIGludGVybmV0LiBBbGwgb2YgdGhlIGNvbXBvbmVudHMKKyAgIG5lZWRlZCB0byBib290c3RyYXAgYGBwaXBgYCBhcmUgaW5jbHVkZWQgYXMgaW50ZXJuYWwgcGFydHMgb2YgdGhlCisgICBwYWNrYWdlLgorCisuLiBzZWVhbHNvOjoKKworICAgOnJlZjpgaW5zdGFsbC1pbmRleGAKKyAgICAgIFRoZSBlbmQgdXNlciBndWlkZSBmb3IgaW5zdGFsbGluZyBQeXRob24gcGFja2FnZXMKKworICAgOnBlcDpgNDUzYDogRXhwbGljaXQgYm9vdHN0cmFwcGluZyBvZiBwaXAgaW4gUHl0aG9uIGluc3RhbGxhdGlvbnMKKyAgICAgIFRoZSBvcmlnaW5hbCByYXRpb25hbGUgYW5kIHNwZWNpZmljYXRpb24gZm9yIHRoaXMgbW9kdWxlLgorCisKK0NvbW1hbmQgbGluZSBpbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgaXMgaW52b2tlZCB1c2luZyB0aGUgaW50ZXJwcmV0ZXIncyBgYC1tYGAgc3dpdGNoLgorCitUaGUgc2ltcGxlc3QgcG9zc2libGUgaW52b2NhdGlvbiBpczo6CisKKyAgICBweXRob24gLW0gZW5zdXJlcGlwCisKK1RoaXMgaW52b2NhdGlvbiB3aWxsIGluc3RhbGwgYGBwaXBgYCBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQsCitidXQgb3RoZXJ3aXNlIGRvZXMgbm90aGluZy4gVG8gZW5zdXJlIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBgYHBpcGBgCitpcyBhdCBsZWFzdCBhcyByZWNlbnQgYXMgdGhlIG9uZSBidW5kbGVkIHdpdGggYGBlbnN1cmVwaXBgYCwgcGFzcyB0aGUKK2BgLS11cGdyYWRlYGAgb3B0aW9uOjoKKworICAgIHB5dGhvbiAtbSBlbnN1cmVwaXAgLS11cGdyYWRlCisKK0J5IGRlZmF1bHQsIGBgcGlwYGAgaXMgaW5zdGFsbGVkIGludG8gdGhlIGN1cnJlbnQgdmlydHVhbCBlbnZpcm9ubWVudAorKGlmIG9uZSBpcyBhY3RpdmUpIG9yIGludG8gdGhlIHN5c3RlbSBzaXRlIHBhY2thZ2VzIChpZiB0aGVyZSBpcyBubworYWN0aXZlIHZpcnR1YWwgZW52aXJvbm1lbnQpLiBUaGUgaW5zdGFsbGF0aW9uIGxvY2F0aW9uIGNhbiBiZSBjb250cm9sbGVkCit0aHJvdWdoIHR3byBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBvcHRpb25zOgorCisqIGBgLS1yb290IDxkaXI+YGA6IEluc3RhbGxzIGBgcGlwYGAgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIHJvb3QgZGlyZWN0b3J5CisgIHJhdGhlciB0aGFuIHRoZSByb290IG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHZpcnR1YWwgZW52aXJvbm1lbnQgKGlmIGFueSkKKyAgb3IgdGhlIGRlZmF1bHQgcm9vdCBmb3IgdGhlIGN1cnJlbnQgUHl0aG9uIGluc3RhbGxhdGlvbi4KKyogYGAtLXVzZXJgYDogSW5zdGFsbHMgYGBwaXBgYCBpbnRvIHRoZSB1c2VyIHNpdGUgcGFja2FnZXMgZGlyZWN0b3J5IHJhdGhlcgorICB0aGFuIGdsb2JhbGx5IGZvciB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uICh0aGlzIG9wdGlvbiBpcyBub3QKKyAgcGVybWl0dGVkIGluc2lkZSBhbiBhY3RpdmUgdmlydHVhbCBlbnZpcm9ubWVudCkuCisKK0J5IGRlZmF1bHQsIHRoZSBzY3JpcHRzIGBgcGlwWGBgIGFuZCBgYHBpcFguWWBgIHdpbGwgYmUgaW5zdGFsbGVkICh3aGVyZQorWC5ZIHN0YW5kcyBmb3IgdGhlIHZlcnNpb24gb2YgUHl0aG9uIHVzZWQgdG8gaW52b2tlIGBgZW5zdXJlcGlwYGApLiBUaGUKK3NjcmlwdHMgaW5zdGFsbGVkIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggdHdvIGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lCitvcHRpb25zOgorCisqIGBgLS1hbHRpbnN0YWxsYGA6IGlmIGFuIGFsdGVybmF0ZSBpbnN0YWxsYXRpb24gaXMgcmVxdWVzdGVkLCB0aGUgYGBwaXBYYGAKKyAgc2NyaXB0IHdpbGwgKm5vdCogYmUgaW5zdGFsbGVkLgorCisqIGBgLS1kZWZhdWx0LXBpcGBgOiBpZiBhICJkZWZhdWx0IHBpcCIgaW5zdGFsbGF0aW9uIGlzIHJlcXVlc3RlZCwgdGhlCisgICBgYHBpcGBgIHNjcmlwdCB3aWxsIGJlIGluc3RhbGxlZCBpbiBhZGRpdGlvbiB0byB0aGUgdHdvIHJlZ3VsYXIgc2NyaXB0cy4KKworUHJvdmlkaW5nIGJvdGggb2YgdGhlIHNjcmlwdCBzZWxlY3Rpb24gb3B0aW9ucyB3aWxsIHRyaWdnZXIgYW4gZXhjZXB0aW9uLgorCisKK01vZHVsZSBBUEkKKy0tLS0tLS0tLS0KKworOm1vZDpgZW5zdXJlcGlwYCBleHBvc2VzIHR3byBmdW5jdGlvbnMgZm9yIHByb2dyYW1tYXRpYyB1c2U6CisKKy4uIGZ1bmN0aW9uOjogdmVyc2lvbigpCisKKyAgIFJldHVybnMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgYnVuZGxlZCB2ZXJzaW9uIG9mIHBpcCB0aGF0IHdpbGwgYmUKKyAgIGluc3RhbGxlZCB3aGVuIGJvb3RzdHJhcHBpbmcgYW4gZW52aXJvbm1lbnQuCisKKy4uIGZ1bmN0aW9uOjogYm9vdHN0cmFwKHJvb3Q9Tm9uZSwgdXBncmFkZT1GYWxzZSwgdXNlcj1GYWxzZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgYWx0aW5zdGFsbD1GYWxzZSwgZGVmYXVsdF9waXA9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eT0wKQorCisgICBCb290c3RyYXBzIGBgcGlwYGAgaW50byB0aGUgY3VycmVudCBvciBkZXNpZ25hdGVkIGVudmlyb25tZW50LgorCisgICAqcm9vdCogc3BlY2lmaWVzIGFuIGFsdGVybmF0aXZlIHJvb3QgZGlyZWN0b3J5IHRvIGluc3RhbGwgcmVsYXRpdmUgdG8uCisgICBJZiAqcm9vdCogaXMgTm9uZSwgdGhlbiBpbnN0YWxsYXRpb24gdXNlcyB0aGUgZGVmYXVsdCBpbnN0YWxsIGxvY2F0aW9uCisgICBmb3IgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCisKKyAgICp1cGdyYWRlKiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdG8gdXBncmFkZSBhbiBleGlzdGluZyBpbnN0YWxsYXRpb24KKyAgIG9mIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiBgYHBpcGBgIHRvIHRoZSBidW5kbGVkIHZlcnNpb24uCisKKyAgICp1c2VyKiBpbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgdGhlIHVzZXIgc2NoZW1lIHJhdGhlciB0aGFuIGluc3RhbGxpbmcKKyAgIGdsb2JhbGx5LgorCisgICBCeSBkZWZhdWx0LCB0aGUgc2NyaXB0cyBgYHBpcFhgYCBhbmQgYGBwaXBYLllgYCB3aWxsIGJlIGluc3RhbGxlZCAod2hlcmUKKyAgIFguWSBzdGFuZHMgZm9yIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUHl0aG9uKS4KKworICAgSWYgKmFsdGluc3RhbGwqIGlzIHNldCwgdGhlbiBgYHBpcFhgYCB3aWxsICpub3QqIGJlIGluc3RhbGxlZC4KKworICAgSWYgKmRlZmF1bHRfcGlwKiBpcyBzZXQsIHRoZW4gYGBwaXBgYCB3aWxsIGJlIGluc3RhbGxlZCBpbiBhZGRpdGlvbiB0bworICAgdGhlIHR3byByZWd1bGFyIHNjcmlwdHMuCisKKyAgIFNldHRpbmcgYm90aCAqYWx0aW5zdGFsbCogYW5kICpkZWZhdWx0X3BpcCogd2lsbCB0cmlnZ2VyCisgICA6ZXhjOmBWYWx1ZUVycm9yYC4KKworICAgKnZlcmJvc2l0eSogY29udHJvbHMgdGhlIGxldmVsIG9mIG91dHB1dCB0byA6ZGF0YTpgc3lzLnN0ZG91dGAgZnJvbSB0aGUKKyAgIGJvb3RzdHJhcHBpbmcgb3BlcmF0aW9uLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJvb3RzdHJhcHBpbmcgcHJvY2VzcyBoYXMgc2lkZSBlZmZlY3RzIG9uIGJvdGggYGBzeXMucGF0aGBgIGFuZAorICAgICAgYGBvcy5lbnZpcm9uYGAuIEludm9raW5nIHRoZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGluIGEgc3VicHJvY2VzcworICAgICAgaW5zdGVhZCBhbGxvd3MgdGhlc2Ugc2lkZSBlZmZlY3RzIHRvIGJlIGF2b2lkZWQuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYm9vdHN0cmFwcGluZyBwcm9jZXNzIG1heSBpbnN0YWxsIGFkZGl0aW9uYWwgbW9kdWxlcyByZXF1aXJlZCBieQorICAgICAgYGBwaXBgYCwgYnV0IG90aGVyIHNvZnR3YXJlIHNob3VsZCBub3QgYXNzdW1lIHRob3NlIGRlcGVuZGVuY2llcyB3aWxsCisgICAgICBhbHdheXMgYmUgcHJlc2VudCBieSBkZWZhdWx0IChhcyB0aGUgZGVwZW5kZW5jaWVzIG1heSBiZSByZW1vdmVkIGluIGEKKyAgICAgIGZ1dHVyZSB2ZXJzaW9uIG9mIGBgcGlwYGApLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW51bS5yc3QgYi9Eb2MvbGlicmFyeS9lbnVtLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2U0OTY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZW51bS5yc3QKQEAgLTAsMCArMSw3MTUgQEAKKzptb2Q6YGVudW1gIC0tLSBTdXBwb3J0IGZvciBlbnVtZXJhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogZW51bQorICAgOnN5bm9wc2lzOiBJbXBsZW1lbnRhdGlvbiBvZiBhbiBlbnVtZXJhdGlvbiBjbGFzcy4KKworLi4gOm1vZHVsZWF1dGhvcjo6IEV0aGFuIEZ1cm1hbiA8ZXRoYW5Ac3RvbmVsZWFmLnVzPgorLi4gOnNlY3Rpb25hdXRob3I6OiBCYXJyeSBXYXJzYXcgPGJhcnJ5QHB5dGhvbi5vcmc+LAorLi4gOnNlY3Rpb25hdXRob3I6OiBFbGkgQmVuZGVyc2t5IDxlbGliZW5AZ21haWwuY29tPiwKKy4uIDpzZWN0aW9uYXV0aG9yOjogRXRoYW4gRnVybWFuIDxldGhhbkBzdG9uZWxlYWYudXM+CisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9lbnVtLnB5YAorCistLS0tLS0tLS0tLS0tLS0tCisKK0FuIGVudW1lcmF0aW9uIGlzIGEgc2V0IG9mIHN5bWJvbGljIG5hbWVzIChtZW1iZXJzKSBib3VuZCB0byB1bmlxdWUsCitjb25zdGFudCB2YWx1ZXMuICBXaXRoaW4gYW4gZW51bWVyYXRpb24sIHRoZSBtZW1iZXJzIGNhbiBiZSBjb21wYXJlZAorYnkgaWRlbnRpdHksIGFuZCB0aGUgZW51bWVyYXRpb24gaXRzZWxmIGNhbiBiZSBpdGVyYXRlZCBvdmVyLgorCisKK01vZHVsZSBDb250ZW50cworLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIGRlZmluZXMgdHdvIGVudW1lcmF0aW9uIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdW5pcXVlCitzZXRzIG9mIG5hbWVzIGFuZCB2YWx1ZXM6IDpjbGFzczpgRW51bWAgYW5kIDpjbGFzczpgSW50RW51bWAuICBJdCBhbHNvIGRlZmluZXMKK29uZSBkZWNvcmF0b3IsIDpmdW5jOmB1bmlxdWVgLgorCisuLiBjbGFzczo6IEVudW0KKworICAgIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGVudW1lcmF0ZWQgY29uc3RhbnRzLiAgU2VlIHNlY3Rpb24KKyAgICBgRnVuY3Rpb25hbCBBUElgXyBmb3IgYW4gYWx0ZXJuYXRlIGNvbnN0cnVjdGlvbiBzeW50YXguCisKKy4uIGNsYXNzOjogSW50RW51bQorCisgICAgQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgZW51bWVyYXRlZCBjb25zdGFudHMgdGhhdCBhcmUgYWxzbworICAgIHN1YmNsYXNzZXMgb2YgOmNsYXNzOmBpbnRgLgorCisuLiBmdW5jdGlvbjo6IHVuaXF1ZQorCisgICAgRW51bSBjbGFzcyBkZWNvcmF0b3IgdGhhdCBlbnN1cmVzIG9ubHkgb25lIG5hbWUgaXMgYm91bmQgdG8gYW55IG9uZSB2YWx1ZS4KKworCitDcmVhdGluZyBhbiBFbnVtCistLS0tLS0tLS0tLS0tLS0tCisKK0VudW1lcmF0aW9ucyBhcmUgY3JlYXRlZCB1c2luZyB0aGUgOmtleXdvcmQ6YGNsYXNzYCBzeW50YXgsIHdoaWNoIG1ha2VzIHRoZW0KK2Vhc3kgdG8gcmVhZCBhbmQgd3JpdGUuICBBbiBhbHRlcm5hdGl2ZSBjcmVhdGlvbiBtZXRob2QgaXMgZGVzY3JpYmVkIGluCitgRnVuY3Rpb25hbCBBUElgXy4gIFRvIGRlZmluZSBhbiBlbnVtZXJhdGlvbiwgc3ViY2xhc3MgOmNsYXNzOmBFbnVtYCBhcworZm9sbG93czo6CisKKyAgICA+Pj4gZnJvbSBlbnVtIGltcG9ydCBFbnVtCisgICAgPj4+IGNsYXNzIENvbG9yKEVudW0pOgorICAgIC4uLiAgICAgcmVkID0gMQorICAgIC4uLiAgICAgZ3JlZW4gPSAyCisgICAgLi4uICAgICBibHVlID0gMworICAgIC4uLgorCisuLiBub3RlOjogTm9tZW5jbGF0dXJlCisKKyAgLSBUaGUgY2xhc3MgOmNsYXNzOmBDb2xvcmAgaXMgYW4gKmVudW1lcmF0aW9uKiAob3IgKmVudW0qKQorICAtIFRoZSBhdHRyaWJ1dGVzIDphdHRyOmBDb2xvci5yZWRgLCA6YXR0cjpgQ29sb3IuZ3JlZW5gLCBldGMuLCBhcmUKKyAgICAqZW51bWVyYXRpb24gbWVtYmVycyogKG9yICplbnVtIG1lbWJlcnMqKS4KKyAgLSBUaGUgZW51bSBtZW1iZXJzIGhhdmUgKm5hbWVzKiBhbmQgKnZhbHVlcyogKHRoZSBuYW1lIG9mCisgICAgOmF0dHI6YENvbG9yLnJlZGAgaXMgYGByZWRgYCwgdGhlIHZhbHVlIG9mIDphdHRyOmBDb2xvci5ibHVlYCBpcworICAgIGBgM2BgLCBldGMuKQorCisuLiBub3RlOjoKKworICAgIEV2ZW4gdGhvdWdoIHdlIHVzZSB0aGUgOmtleXdvcmQ6YGNsYXNzYCBzeW50YXggdG8gY3JlYXRlIEVudW1zLCBFbnVtcworICAgIGFyZSBub3Qgbm9ybWFsIFB5dGhvbiBjbGFzc2VzLiAgU2VlIGBIb3cgYXJlIEVudW1zIGRpZmZlcmVudD9gXyBmb3IKKyAgICBtb3JlIGRldGFpbHMuCisKK0VudW1lcmF0aW9uIG1lbWJlcnMgaGF2ZSBodW1hbiByZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb25zOjoKKworICAgID4+PiBwcmludChDb2xvci5yZWQpCisgICAgQ29sb3IucmVkCisKKy4uLndoaWxlIHRoZWlyIGBgcmVwcmBgIGhhcyBtb3JlIGluZm9ybWF0aW9uOjoKKworICAgID4+PiBwcmludChyZXByKENvbG9yLnJlZCkpCisgICAgPENvbG9yLnJlZDogMT4KKworVGhlICp0eXBlKiBvZiBhbiBlbnVtZXJhdGlvbiBtZW1iZXIgaXMgdGhlIGVudW1lcmF0aW9uIGl0IGJlbG9uZ3MgdG86OgorCisgICAgPj4+IHR5cGUoQ29sb3IucmVkKQorICAgIDxlbnVtICdDb2xvcic+CisgICAgPj4+IGlzaW5zdGFuY2UoQ29sb3IuZ3JlZW4sIENvbG9yKQorICAgIFRydWUKKyAgICA+Pj4KKworRW51bSBtZW1iZXJzIGFsc28gaGF2ZSBhIHByb3BlcnR5IHRoYXQgY29udGFpbnMganVzdCB0aGVpciBpdGVtIG5hbWU6OgorCisgICAgPj4+IHByaW50KENvbG9yLnJlZC5uYW1lKQorICAgIHJlZAorCitFbnVtZXJhdGlvbnMgc3VwcG9ydCBpdGVyYXRpb24sIGluIGRlZmluaXRpb24gb3JkZXI6OgorCisgICAgPj4+IGNsYXNzIFNoYWtlKEVudW0pOgorICAgIC4uLiAgICAgdmFuaWxsYSA9IDcKKyAgICAuLi4gICAgIGNob2NvbGF0ZSA9IDQKKyAgICAuLi4gICAgIGNvb2tpZXMgPSA5CisgICAgLi4uICAgICBtaW50ID0gMworICAgIC4uLgorICAgID4+PiBmb3Igc2hha2UgaW4gU2hha2U6CisgICAgLi4uICAgICBwcmludChzaGFrZSkKKyAgICAuLi4KKyAgICBTaGFrZS52YW5pbGxhCisgICAgU2hha2UuY2hvY29sYXRlCisgICAgU2hha2UuY29va2llcworICAgIFNoYWtlLm1pbnQKKworRW51bWVyYXRpb24gbWVtYmVycyBhcmUgaGFzaGFibGUsIHNvIHRoZXkgY2FuIGJlIHVzZWQgaW4gZGljdGlvbmFyaWVzIGFuZCBzZXRzOjoKKworICAgID4+PiBhcHBsZXMgPSB7fQorICAgID4+PiBhcHBsZXNbQ29sb3IucmVkXSA9ICdyZWQgZGVsaWNpb3VzJworICAgID4+PiBhcHBsZXNbQ29sb3IuZ3JlZW5dID0gJ2dyYW5ueSBzbWl0aCcKKyAgICA+Pj4gYXBwbGVzID09IHtDb2xvci5yZWQ6ICdyZWQgZGVsaWNpb3VzJywgQ29sb3IuZ3JlZW46ICdncmFubnkgc21pdGgnfQorICAgIFRydWUKKworCitQcm9ncmFtbWF0aWMgYWNjZXNzIHRvIGVudW1lcmF0aW9uIG1lbWJlcnMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21ldGltZXMgaXQncyB1c2VmdWwgdG8gYWNjZXNzIG1lbWJlcnMgaW4gZW51bWVyYXRpb25zIHByb2dyYW1tYXRpY2FsbHkgKGkuZS4KK3NpdHVhdGlvbnMgd2hlcmUgYGBDb2xvci5yZWRgYCB3b24ndCBkbyBiZWNhdXNlIHRoZSBleGFjdCBjb2xvciBpcyBub3Qga25vd24KK2F0IHByb2dyYW0td3JpdGluZyB0aW1lKS4gIGBgRW51bWBgIGFsbG93cyBzdWNoIGFjY2Vzczo6CisKKyAgICA+Pj4gQ29sb3IoMSkKKyAgICA8Q29sb3IucmVkOiAxPgorICAgID4+PiBDb2xvcigzKQorICAgIDxDb2xvci5ibHVlOiAzPgorCitJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZW51bSBtZW1iZXJzIGJ5ICpuYW1lKiwgdXNlIGl0ZW0gYWNjZXNzOjoKKworICAgID4+PiBDb2xvclsncmVkJ10KKyAgICA8Q29sb3IucmVkOiAxPgorICAgID4+PiBDb2xvclsnZ3JlZW4nXQorICAgIDxDb2xvci5ncmVlbjogMj4KKworSWYgaGF2ZSBhbiBlbnVtIG1lbWJlciBhbmQgbmVlZCBpdHMgOmF0dHI6YG5hbWVgIG9yIDphdHRyOmB2YWx1ZWA6OgorCisgICAgPj4+IG1lbWJlciA9IENvbG9yLnJlZAorICAgID4+PiBtZW1iZXIubmFtZQorICAgICdyZWQnCisgICAgPj4+IG1lbWJlci52YWx1ZQorICAgIDEKKworCitEdXBsaWNhdGluZyBlbnVtIG1lbWJlcnMgYW5kIHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGF2aW5nIHR3byBlbnVtIG1lbWJlcnMgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGludmFsaWQ6OgorCisgICAgPj4+IGNsYXNzIFNoYXBlKEVudW0pOgorICAgIC4uLiAgICAgc3F1YXJlID0gMgorICAgIC4uLiAgICAgc3F1YXJlID0gMworICAgIC4uLgorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byByZXVzZSBrZXk6ICdzcXVhcmUnCisKK0hvd2V2ZXIsIHR3byBlbnVtIG1lbWJlcnMgYXJlIGFsbG93ZWQgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gIEdpdmVuIHR3byBtZW1iZXJzCitBIGFuZCBCIHdpdGggdGhlIHNhbWUgdmFsdWUgKGFuZCBBIGRlZmluZWQgZmlyc3QpLCBCIGlzIGFuIGFsaWFzIHRvIEEuICBCeS12YWx1ZQorbG9va3VwIG9mIHRoZSB2YWx1ZSBvZiBBIGFuZCBCIHdpbGwgcmV0dXJuIEEuICBCeS1uYW1lIGxvb2t1cCBvZiBCIHdpbGwgYWxzbworcmV0dXJuIEE6OgorCisgICAgPj4+IGNsYXNzIFNoYXBlKEVudW0pOgorICAgIC4uLiAgICAgc3F1YXJlID0gMgorICAgIC4uLiAgICAgZGlhbW9uZCA9IDEKKyAgICAuLi4gICAgIGNpcmNsZSA9IDMKKyAgICAuLi4gICAgIGFsaWFzX2Zvcl9zcXVhcmUgPSAyCisgICAgLi4uCisgICAgPj4+IFNoYXBlLnNxdWFyZQorICAgIDxTaGFwZS5zcXVhcmU6IDI+CisgICAgPj4+IFNoYXBlLmFsaWFzX2Zvcl9zcXVhcmUKKyAgICA8U2hhcGUuc3F1YXJlOiAyPgorICAgID4+PiBTaGFwZSgyKQorICAgIDxTaGFwZS5zcXVhcmU6IDI+CisKKy4uIG5vdGU6OgorCisgICAgQXR0ZW1wdGluZyB0byBjcmVhdGUgYSBtZW1iZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGFscmVhZHkKKyAgICBkZWZpbmVkIGF0dHJpYnV0ZSAoYW5vdGhlciBtZW1iZXIsIGEgbWV0aG9kLCBldGMuKSBvciBhdHRlbXB0aW5nIHRvIGNyZWF0ZQorICAgIGFuIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYSBtZW1iZXIgaXMgbm90IGFsbG93ZWQuCisKKworRW5zdXJpbmcgdW5pcXVlIGVudW1lcmF0aW9uIHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0LCBlbnVtZXJhdGlvbnMgYWxsb3cgbXVsdGlwbGUgbmFtZXMgYXMgYWxpYXNlcyBmb3IgdGhlIHNhbWUgdmFsdWUuCitXaGVuIHRoaXMgYmVoYXZpb3IgaXNuJ3QgZGVzaXJlZCwgdGhlIGZvbGxvd2luZyBkZWNvcmF0b3IgY2FuIGJlIHVzZWQgdG8KK2Vuc3VyZSBlYWNoIHZhbHVlIGlzIHVzZWQgb25seSBvbmNlIGluIHRoZSBlbnVtZXJhdGlvbjoKKworLi4gZGVjb3JhdG9yOjogdW5pcXVlCisKK0EgOmtleXdvcmQ6YGNsYXNzYCBkZWNvcmF0b3Igc3BlY2lmaWNhbGx5IGZvciBlbnVtZXJhdGlvbnMuICBJdCBzZWFyY2hlcyBhbgorZW51bWVyYXRpb24ncyA6YXR0cjpgX19tZW1iZXJzX19gIGdhdGhlcmluZyBhbnkgYWxpYXNlcyBpdCBmaW5kczsgaWYgYW55IGFyZQorZm91bmQgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIHdpdGggdGhlIGRldGFpbHM6OgorCisgICAgPj4+IGZyb20gZW51bSBpbXBvcnQgRW51bSwgdW5pcXVlCisgICAgPj4+IEB1bmlxdWUKKyAgICAuLi4gY2xhc3MgTWlzdGFrZShFbnVtKToKKyAgICAuLi4gICAgIG9uZSA9IDEKKyAgICAuLi4gICAgIHR3byA9IDIKKyAgICAuLi4gICAgIHRocmVlID0gMworICAgIC4uLiAgICAgZm91ciA9IDMKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogZHVwbGljYXRlIHZhbHVlcyBmb3VuZCBpbiA8ZW51bSAnTWlzdGFrZSc+OiBmb3VyIC0+IHRocmVlCisKKworSXRlcmF0aW9uCistLS0tLS0tLS0KKworSXRlcmF0aW5nIG92ZXIgdGhlIG1lbWJlcnMgb2YgYW4gZW51bSBkb2VzIG5vdCBwcm92aWRlIHRoZSBhbGlhc2VzOjoKKworICAgID4+PiBsaXN0KFNoYXBlKQorICAgIFs8U2hhcGUuc3F1YXJlOiAyPiwgPFNoYXBlLmRpYW1vbmQ6IDE+LCA8U2hhcGUuY2lyY2xlOiAzPl0KKworVGhlIHNwZWNpYWwgYXR0cmlidXRlIGBgX19tZW1iZXJzX19gYCBpcyBhbiBvcmRlcmVkIGRpY3Rpb25hcnkgbWFwcGluZyBuYW1lcwordG8gbWVtYmVycy4gIEl0IGluY2x1ZGVzIGFsbCBuYW1lcyBkZWZpbmVkIGluIHRoZSBlbnVtZXJhdGlvbiwgaW5jbHVkaW5nIHRoZQorYWxpYXNlczo6CisKKyAgICA+Pj4gZm9yIG5hbWUsIG1lbWJlciBpbiBTaGFwZS5fX21lbWJlcnNfXy5pdGVtcygpOgorICAgIC4uLiAgICAgbmFtZSwgbWVtYmVyCisgICAgLi4uCisgICAgKCdzcXVhcmUnLCA8U2hhcGUuc3F1YXJlOiAyPikKKyAgICAoJ2RpYW1vbmQnLCA8U2hhcGUuZGlhbW9uZDogMT4pCisgICAgKCdjaXJjbGUnLCA8U2hhcGUuY2lyY2xlOiAzPikKKyAgICAoJ2FsaWFzX2Zvcl9zcXVhcmUnLCA8U2hhcGUuc3F1YXJlOiAyPikKKworVGhlIGBgX19tZW1iZXJzX19gYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgZm9yIGRldGFpbGVkIHByb2dyYW1tYXRpYyBhY2Nlc3MgdG8KK3RoZSBlbnVtZXJhdGlvbiBtZW1iZXJzLiAgRm9yIGV4YW1wbGUsIGZpbmRpbmcgYWxsIHRoZSBhbGlhc2VzOjoKKworICAgID4+PiBbbmFtZSBmb3IgbmFtZSwgbWVtYmVyIGluIFNoYXBlLl9fbWVtYmVyc19fLml0ZW1zKCkgaWYgbWVtYmVyLm5hbWUgIT0gbmFtZV0KKyAgICBbJ2FsaWFzX2Zvcl9zcXVhcmUnXQorCisKK0NvbXBhcmlzb25zCistLS0tLS0tLS0tLQorCitFbnVtZXJhdGlvbiBtZW1iZXJzIGFyZSBjb21wYXJlZCBieSBpZGVudGl0eTo6CisKKyAgICA+Pj4gQ29sb3IucmVkIGlzIENvbG9yLnJlZAorICAgIFRydWUKKyAgICA+Pj4gQ29sb3IucmVkIGlzIENvbG9yLmJsdWUKKyAgICBGYWxzZQorICAgID4+PiBDb2xvci5yZWQgaXMgbm90IENvbG9yLmJsdWUKKyAgICBUcnVlCisKK09yZGVyZWQgY29tcGFyaXNvbnMgYmV0d2VlbiBlbnVtZXJhdGlvbiB2YWx1ZXMgYXJlICpub3QqIHN1cHBvcnRlZC4gIEVudW0KK21lbWJlcnMgYXJlIG5vdCBpbnRlZ2VycyAoYnV0IHNlZSBgSW50RW51bWBfIGJlbG93KTo6CisKKyAgICA+Pj4gQ29sb3IucmVkIDwgQ29sb3IuYmx1ZQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgVHlwZUVycm9yOiB1bm9yZGVyYWJsZSB0eXBlczogQ29sb3IoKSA8IENvbG9yKCkKKworRXF1YWxpdHkgY29tcGFyaXNvbnMgYXJlIGRlZmluZWQgdGhvdWdoOjoKKworICAgID4+PiBDb2xvci5ibHVlID09IENvbG9yLnJlZAorICAgIEZhbHNlCisgICAgPj4+IENvbG9yLmJsdWUgIT0gQ29sb3IucmVkCisgICAgVHJ1ZQorICAgID4+PiBDb2xvci5ibHVlID09IENvbG9yLmJsdWUKKyAgICBUcnVlCisKK0NvbXBhcmlzb25zIGFnYWluc3Qgbm9uLWVudW1lcmF0aW9uIHZhbHVlcyB3aWxsIGFsd2F5cyBjb21wYXJlIG5vdCBlcXVhbAorKGFnYWluLCA6Y2xhc3M6YEludEVudW1gIHdhcyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGJlaGF2ZSBkaWZmZXJlbnRseSwgc2VlCitiZWxvdyk6OgorCisgICAgPj4+IENvbG9yLmJsdWUgPT0gMgorICAgIEZhbHNlCisKKworQWxsb3dlZCBtZW1iZXJzIGFuZCBhdHRyaWJ1dGVzIG9mIGVudW1lcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZXhhbXBsZXMgYWJvdmUgdXNlIGludGVnZXJzIGZvciBlbnVtZXJhdGlvbiB2YWx1ZXMuICBVc2luZyBpbnRlZ2VycyBpcworc2hvcnQgYW5kIGhhbmR5IChhbmQgcHJvdmlkZWQgYnkgZGVmYXVsdCBieSB0aGUgYEZ1bmN0aW9uYWwgQVBJYF8pLCBidXQgbm90CitzdHJpY3RseSBlbmZvcmNlZC4gIEluIHRoZSB2YXN0IG1ham9yaXR5IG9mIHVzZS1jYXNlcywgb25lIGRvZXNuJ3QgY2FyZSB3aGF0Cit0aGUgYWN0dWFsIHZhbHVlIG9mIGFuIGVudW1lcmF0aW9uIGlzLiAgQnV0IGlmIHRoZSB2YWx1ZSAqaXMqIGltcG9ydGFudCwKK2VudW1lcmF0aW9ucyBjYW4gaGF2ZSBhcmJpdHJhcnkgdmFsdWVzLgorCitFbnVtZXJhdGlvbnMgYXJlIFB5dGhvbiBjbGFzc2VzLCBhbmQgY2FuIGhhdmUgbWV0aG9kcyBhbmQgc3BlY2lhbCBtZXRob2RzIGFzCit1c3VhbC4gIElmIHdlIGhhdmUgdGhpcyBlbnVtZXJhdGlvbjo6CisKKyAgICA+Pj4gY2xhc3MgTW9vZChFbnVtKToKKyAgICAuLi4gICAgIGZ1bmt5ID0gMQorICAgIC4uLiAgICAgaGFwcHkgPSAzCisgICAgLi4uCisgICAgLi4uICAgICBkZWYgZGVzY3JpYmUoc2VsZik6CisgICAgLi4uICAgICAgICAgIyBzZWxmIGlzIHRoZSBtZW1iZXIgaGVyZQorICAgIC4uLiAgICAgICAgIHJldHVybiBzZWxmLm5hbWUsIHNlbGYudmFsdWUKKyAgICAuLi4KKyAgICAuLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHJldHVybiAnbXkgY3VzdG9tIHN0ciEgezB9Jy5mb3JtYXQoc2VsZi52YWx1ZSkKKyAgICAuLi4KKyAgICAuLi4gICAgIEBjbGFzc21ldGhvZAorICAgIC4uLiAgICAgZGVmIGZhdm9yaXRlX21vb2QoY2xzKToKKyAgICAuLi4gICAgICAgICAjIGNscyBoZXJlIGlzIHRoZSBlbnVtZXJhdGlvbgorICAgIC4uLiAgICAgICAgIHJldHVybiBjbHMuaGFwcHkKKyAgICAuLi4KKworVGhlbjo6CisKKyAgICA+Pj4gTW9vZC5mYXZvcml0ZV9tb29kKCkKKyAgICA8TW9vZC5oYXBweTogMz4KKyAgICA+Pj4gTW9vZC5oYXBweS5kZXNjcmliZSgpCisgICAgKCdoYXBweScsIDMpCisgICAgPj4+IHN0cihNb29kLmZ1bmt5KQorICAgICdteSBjdXN0b20gc3RyISAxJworCitUaGUgcnVsZXMgZm9yIHdoYXQgaXMgYWxsb3dlZCBhcmUgYXMgZm9sbG93czogX3N1bmRlcl8gbmFtZXMgKHN0YXJ0aW5nIGFuZAorZW5kaW5nIHdpdGggYSBzaW5nbGUgdW5kZXJzY29yZSkgYXJlIHJlc2VydmVkIGJ5IGVudW0gYW5kIGNhbm5vdCBiZSB1c2VkOworYWxsIG90aGVyIGF0dHJpYnV0ZXMgZGVmaW5lZCB3aXRoaW4gYW4gZW51bWVyYXRpb24gd2lsbCBiZWNvbWUgbWVtYmVycyBvZiB0aGlzCitlbnVtZXJhdGlvbiwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICpfX2R1bmRlcl9fKiBuYW1lcyBhbmQgZGVzY3JpcHRvcnMgKG1ldGhvZHMKK2FyZSBhbHNvIGRlc2NyaXB0b3JzKS4KKworTm90ZTogIGlmIHlvdXIgZW51bWVyYXRpb24gZGVmaW5lcyA6bWV0aDpgX19uZXdfX2AgYW5kL29yIDptZXRoOmBfX2luaXRfX2AgdGhlbgord2hhdGV2ZXIgdmFsdWUocykgd2VyZSBnaXZlbiB0byB0aGUgZW51bSBtZW1iZXIgd2lsbCBiZSBwYXNzZWQgaW50byB0aG9zZQorbWV0aG9kcy4gIFNlZSBgUGxhbmV0YF8gZm9yIGFuIGV4YW1wbGUuCisKKworUmVzdHJpY3RlZCBzdWJjbGFzc2luZyBvZiBlbnVtZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1YmNsYXNzaW5nIGFuIGVudW1lcmF0aW9uIGlzIGFsbG93ZWQgb25seSBpZiB0aGUgZW51bWVyYXRpb24gZG9lcyBub3QgZGVmaW5lCithbnkgbWVtYmVycy4gIFNvIHRoaXMgaXMgZm9yYmlkZGVuOjoKKworICAgID4+PiBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgIC4uLiAgICAgcGluayA9IDE3CisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFR5cGVFcnJvcjogQ2Fubm90IGV4dGVuZCBlbnVtZXJhdGlvbnMKKworQnV0IHRoaXMgaXMgYWxsb3dlZDo6CisKKyAgICA+Pj4gY2xhc3MgRm9vKEVudW0pOgorICAgIC4uLiAgICAgZGVmIHNvbWVfYmVoYXZpb3Ioc2VsZik6CisgICAgLi4uICAgICAgICAgcGFzcworICAgIC4uLgorICAgID4+PiBjbGFzcyBCYXIoRm9vKToKKyAgICAuLi4gICAgIGhhcHB5ID0gMQorICAgIC4uLiAgICAgc2FkID0gMgorICAgIC4uLgorCitBbGxvd2luZyBzdWJjbGFzc2luZyBvZiBlbnVtcyB0aGF0IGRlZmluZSBtZW1iZXJzIHdvdWxkIGxlYWQgdG8gYSB2aW9sYXRpb24gb2YKK3NvbWUgaW1wb3J0YW50IGludmFyaWFudHMgb2YgdHlwZXMgYW5kIGluc3RhbmNlcy4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBtYWtlcworc2Vuc2UgdG8gYWxsb3cgc2hhcmluZyBzb21lIGNvbW1vbiBiZWhhdmlvciBiZXR3ZWVuIGEgZ3JvdXAgb2YgZW51bWVyYXRpb25zLgorKFNlZSBgT3JkZXJlZEVudW1gXyBmb3IgYW4gZXhhbXBsZS4pCisKKworUGlja2xpbmcKKy0tLS0tLS0tCisKK0VudW1lcmF0aW9ucyBjYW4gYmUgcGlja2xlZCBhbmQgdW5waWNrbGVkOjoKKworICAgID4+PiBmcm9tIHRlc3QudGVzdF9lbnVtIGltcG9ydCBGcnVpdAorICAgID4+PiBmcm9tIHBpY2tsZSBpbXBvcnQgZHVtcHMsIGxvYWRzCisgICAgPj4+IEZydWl0LnRvbWF0byBpcyBsb2FkcyhkdW1wcyhGcnVpdC50b21hdG8pKQorICAgIFRydWUKKworVGhlIHVzdWFsIHJlc3RyaWN0aW9ucyBmb3IgcGlja2xpbmcgYXBwbHk6IHBpY2tsYWJsZSBlbnVtcyBtdXN0IGJlIGRlZmluZWQgaW4KK3RoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUsIHNpbmNlIHVucGlja2xpbmcgcmVxdWlyZXMgdGhlbSB0byBiZSBpbXBvcnRhYmxlCitmcm9tIHRoYXQgbW9kdWxlLgorCisuLiBub3RlOjoKKworICAgIFdpdGggcGlja2xlIHByb3RvY29sIHZlcnNpb24gNCBpdCBpcyBwb3NzaWJsZSB0byBlYXNpbHkgcGlja2xlIGVudW1zCisgICAgbmVzdGVkIGluIG90aGVyIGNsYXNzZXMuCisKKworRnVuY3Rpb25hbCBBUEkKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YEVudW1gIGNsYXNzIGlzIGNhbGxhYmxlLCBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIEFQSTo6CisKKyAgICA+Pj4gQW5pbWFsID0gRW51bSgnQW5pbWFsJywgJ2FudCBiZWUgY2F0IGRvZycpCisgICAgPj4+IEFuaW1hbAorICAgIDxlbnVtICdBbmltYWwnPgorICAgID4+PiBBbmltYWwuYW50CisgICAgPEFuaW1hbC5hbnQ6IDE+CisgICAgPj4+IEFuaW1hbC5hbnQudmFsdWUKKyAgICAxCisgICAgPj4+IGxpc3QoQW5pbWFsKQorICAgIFs8QW5pbWFsLmFudDogMT4sIDxBbmltYWwuYmVlOiAyPiwgPEFuaW1hbC5jYXQ6IDM+LCA8QW5pbWFsLmRvZzogND5dCisKK1RoZSBzZW1hbnRpY3Mgb2YgdGhpcyBBUEkgcmVzZW1ibGUgOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAuIFRoZSBmaXJzdAorYXJndW1lbnQgb2YgdGhlIGNhbGwgdG8gOmNsYXNzOmBFbnVtYCBpcyB0aGUgbmFtZSBvZiB0aGUgZW51bWVyYXRpb24uCisKK1RoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlICpzb3VyY2UqIG9mIGVudW1lcmF0aW9uIG1lbWJlciBuYW1lcy4gIEl0IGNhbiBiZSBhCit3aGl0ZXNwYWNlLXNlcGFyYXRlZCBzdHJpbmcgb2YgbmFtZXMsIGEgc2VxdWVuY2Ugb2YgbmFtZXMsIGEgc2VxdWVuY2Ugb2YKKzItdHVwbGVzIHdpdGgga2V5L3ZhbHVlIHBhaXJzLCBvciBhIG1hcHBpbmcgKGUuZy4gZGljdGlvbmFyeSkgb2YgbmFtZXMgdG8KK3ZhbHVlcy4gIFRoZSBsYXN0IHR3byBvcHRpb25zIGVuYWJsZSBhc3NpZ25pbmcgYXJiaXRyYXJ5IHZhbHVlcyB0bworZW51bWVyYXRpb25zOyB0aGUgb3RoZXJzIGF1dG8tYXNzaWduIGluY3JlYXNpbmcgaW50ZWdlcnMgc3RhcnRpbmcgd2l0aCAxLiAgQQorbmV3IGNsYXNzIGRlcml2ZWQgZnJvbSA6Y2xhc3M6YEVudW1gIGlzIHJldHVybmVkLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBhYm92ZQorYXNzaWdubWVudCB0byA6Y2xhc3M6YEFuaW1hbGAgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICA+Pj4gY2xhc3MgQW5pbWFscyhFbnVtKToKKyAgICAuLi4gICAgIGFudCA9IDEKKyAgICAuLi4gICAgIGJlZSA9IDIKKyAgICAuLi4gICAgIGNhdCA9IDMKKyAgICAuLi4gICAgIGRvZyA9IDQKKyAgICAuLi4KKworVGhlIHJlYXNvbiBmb3IgZGVmYXVsdGluZyB0byBgYDFgYCBhcyB0aGUgc3RhcnRpbmcgbnVtYmVyIGFuZCBub3QgYGAwYGAgaXMKK3RoYXQgYGAwYGAgaXMgYGBGYWxzZWBgIGluIGEgYm9vbGVhbiBzZW5zZSwgYnV0IGVudW0gbWVtYmVycyBhbGwgZXZhbHVhdGUKK3RvIGBgVHJ1ZWBgLgorCitQaWNrbGluZyBlbnVtcyBjcmVhdGVkIHdpdGggdGhlIGZ1bmN0aW9uYWwgQVBJIGNhbiBiZSB0cmlja3kgYXMgZnJhbWUgc3RhY2sKK2ltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIHVzZWQgdG8gdHJ5IGFuZCBmaWd1cmUgb3V0IHdoaWNoIG1vZHVsZSB0aGUKK2VudW1lcmF0aW9uIGlzIGJlaW5nIGNyZWF0ZWQgaW4gKGUuZy4gaXQgd2lsbCBmYWlsIGlmIHlvdSB1c2UgYSB1dGlsaXR5CitmdW5jdGlvbiBpbiBzZXBhcmF0ZSBtb2R1bGUsIGFuZCBhbHNvIG1heSBub3Qgd29yayBvbiBJcm9uUHl0aG9uIG9yIEp5dGhvbikuCitUaGUgc29sdXRpb24gaXMgdG8gc3BlY2lmeSB0aGUgbW9kdWxlIG5hbWUgZXhwbGljaXRseSBhcyBmb2xsb3dzOjoKKworICAgID4+PiBBbmltYWxzID0gRW51bSgnQW5pbWFscycsICdhbnQgYmVlIGNhdCBkb2cnLCBtb2R1bGU9X19uYW1lX18pCisKK1RoZSBuZXcgcGlja2xlIHByb3RvY29sIDQgYWxzbywgaW4gc29tZSBjaXJjdW1zdGFuY2VzLCByZWxpZXMgb24KKzphdHRyOmBfX3F1YWxuYW1lX19gIGJlaW5nIHNldCB0byB0aGUgbG9jYXRpb24gd2hlcmUgcGlja2xlIHdpbGwgYmUgYWJsZQordG8gZmluZCB0aGUgY2xhc3MuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGNsYXNzIHdhcyBtYWRlIGF2YWlsYWJsZSBpbiBjbGFzcworU29tZURhdGEgaW4gdGhlIGdsb2JhbCBzY29wZTo6CisKKyAgICA+Pj4gQW5pbWFscyA9IEVudW0oJ0FuaW1hbHMnLCAnYW50IGJlZSBjYXQgZG9nJywgcXVhbG5hbWU9J1NvbWVEYXRhLkFuaW1hbHMnKQorCisKK0Rlcml2ZWQgRW51bWVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnRFbnVtCiteXl5eXl5eCisKK0EgdmFyaWF0aW9uIG9mIDpjbGFzczpgRW51bWAgaXMgcHJvdmlkZWQgd2hpY2ggaXMgYWxzbyBhIHN1YmNsYXNzIG9mCis6Y2xhc3M6YGludGAuICBNZW1iZXJzIG9mIGFuIDpjbGFzczpgSW50RW51bWAgY2FuIGJlIGNvbXBhcmVkIHRvIGludGVnZXJzOworYnkgZXh0ZW5zaW9uLCBpbnRlZ2VyIGVudW1lcmF0aW9ucyBvZiBkaWZmZXJlbnQgdHlwZXMgY2FuIGFsc28gYmUgY29tcGFyZWQKK3RvIGVhY2ggb3RoZXI6OgorCisgICAgPj4+IGZyb20gZW51bSBpbXBvcnQgSW50RW51bQorICAgID4+PiBjbGFzcyBTaGFwZShJbnRFbnVtKToKKyAgICAuLi4gICAgIGNpcmNsZSA9IDEKKyAgICAuLi4gICAgIHNxdWFyZSA9IDIKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgUmVxdWVzdChJbnRFbnVtKToKKyAgICAuLi4gICAgIHBvc3QgPSAxCisgICAgLi4uICAgICBnZXQgPSAyCisgICAgLi4uCisgICAgPj4+IFNoYXBlID09IDEKKyAgICBGYWxzZQorICAgID4+PiBTaGFwZS5jaXJjbGUgPT0gMQorICAgIFRydWUKKyAgICA+Pj4gU2hhcGUuY2lyY2xlID09IFJlcXVlc3QucG9zdAorICAgIFRydWUKKworSG93ZXZlciwgdGhleSBzdGlsbCBjYW4ndCBiZSBjb21wYXJlZCB0byBzdGFuZGFyZCA6Y2xhc3M6YEVudW1gIGVudW1lcmF0aW9uczo6CisKKyAgICA+Pj4gY2xhc3MgU2hhcGUoSW50RW51bSk6CisgICAgLi4uICAgICBjaXJjbGUgPSAxCisgICAgLi4uICAgICBzcXVhcmUgPSAyCisgICAgLi4uCisgICAgPj4+IGNsYXNzIENvbG9yKEVudW0pOgorICAgIC4uLiAgICAgcmVkID0gMQorICAgIC4uLiAgICAgZ3JlZW4gPSAyCisgICAgLi4uCisgICAgPj4+IFNoYXBlLmNpcmNsZSA9PSBDb2xvci5yZWQKKyAgICBGYWxzZQorCis6Y2xhc3M6YEludEVudW1gIHZhbHVlcyBiZWhhdmUgbGlrZSBpbnRlZ2VycyBpbiBvdGhlciB3YXlzIHlvdSdkIGV4cGVjdDo6CisKKyAgICA+Pj4gaW50KFNoYXBlLmNpcmNsZSkKKyAgICAxCisgICAgPj4+IFsnYScsICdiJywgJ2MnXVtTaGFwZS5jaXJjbGVdCisgICAgJ2InCisgICAgPj4+IFtpIGZvciBpIGluIHJhbmdlKFNoYXBlLnNxdWFyZSldCisgICAgWzAsIDFdCisKK0ZvciB0aGUgdmFzdCBtYWpvcml0eSBvZiBjb2RlLCA6Y2xhc3M6YEVudW1gIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLAorc2luY2UgOmNsYXNzOmBJbnRFbnVtYCBicmVha3Mgc29tZSBzZW1hbnRpYyBwcm9taXNlcyBvZiBhbiBlbnVtZXJhdGlvbiAoYnkKK2JlaW5nIGNvbXBhcmFibGUgdG8gaW50ZWdlcnMsIGFuZCB0aHVzIGJ5IHRyYW5zaXRpdml0eSB0byBvdGhlcgordW5yZWxhdGVkIGVudW1lcmF0aW9ucykuICBJdCBzaG91bGQgYmUgdXNlZCBvbmx5IGluIHNwZWNpYWwgY2FzZXMgd2hlcmUKK3RoZXJlJ3Mgbm8gb3RoZXIgY2hvaWNlOyBmb3IgZXhhbXBsZSwgd2hlbiBpbnRlZ2VyIGNvbnN0YW50cyBhcmUKK3JlcGxhY2VkIHdpdGggZW51bWVyYXRpb25zIGFuZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpcyByZXF1aXJlZCB3aXRoIGNvZGUKK3RoYXQgc3RpbGwgZXhwZWN0cyBpbnRlZ2Vycy4KKworCitPdGhlcnMKK15eXl5eXgorCitXaGlsZSA6Y2xhc3M6YEludEVudW1gIGlzIHBhcnQgb2YgdGhlIDptb2Q6YGVudW1gIG1vZHVsZSwgaXQgd291bGQgYmUgdmVyeQorc2ltcGxlIHRvIGltcGxlbWVudCBpbmRlcGVuZGVudGx5OjoKKworICAgIGNsYXNzIEludEVudW0oaW50LCBFbnVtKToKKyAgICAgICAgcGFzcworCitUaGlzIGRlbW9uc3RyYXRlcyBob3cgc2ltaWxhciBkZXJpdmVkIGVudW1lcmF0aW9ucyBjYW4gYmUgZGVmaW5lZDsgZm9yIGV4YW1wbGUKK2EgOmNsYXNzOmBTdHJFbnVtYCB0aGF0IG1peGVzIGluIDpjbGFzczpgc3RyYCBpbnN0ZWFkIG9mIDpjbGFzczpgaW50YC4KKworU29tZSBydWxlczoKKworMS4gV2hlbiBzdWJjbGFzc2luZyA6Y2xhc3M6YEVudW1gLCBtaXgtaW4gdHlwZXMgbXVzdCBhcHBlYXIgYmVmb3JlCisgICA6Y2xhc3M6YEVudW1gIGl0c2VsZiBpbiB0aGUgc2VxdWVuY2Ugb2YgYmFzZXMsIGFzIGluIHRoZSA6Y2xhc3M6YEludEVudW1gCisgICBleGFtcGxlIGFib3ZlLgorMi4gV2hpbGUgOmNsYXNzOmBFbnVtYCBjYW4gaGF2ZSBtZW1iZXJzIG9mIGFueSB0eXBlLCBvbmNlIHlvdSBtaXggaW4gYW4KKyAgIGFkZGl0aW9uYWwgdHlwZSwgYWxsIHRoZSBtZW1iZXJzIG11c3QgaGF2ZSB2YWx1ZXMgb2YgdGhhdCB0eXBlLCBlLmcuCisgICA6Y2xhc3M6YGludGAgYWJvdmUuICBUaGlzIHJlc3RyaWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIG1peC1pbnMgd2hpY2ggb25seQorICAgYWRkIG1ldGhvZHMgYW5kIGRvbid0IHNwZWNpZnkgYW5vdGhlciBkYXRhIHR5cGUgc3VjaCBhcyA6Y2xhc3M6YGludGAgb3IKKyAgIDpjbGFzczpgc3RyYC4KKzMuIFdoZW4gYW5vdGhlciBkYXRhIHR5cGUgaXMgbWl4ZWQgaW4sIHRoZSA6YXR0cjpgdmFsdWVgIGF0dHJpYnV0ZSBpcyAqbm90IHRoZQorICAgc2FtZSogYXMgdGhlIGVudW0gbWVtYmVyIGl0c2VsZiwgYWx0aG91Z2ggaXQgaXMgZXF1aXZhbGFudCBhbmQgd2lsbCBjb21wYXJlCisgICBlcXVhbC4KKzQuICUtc3R5bGUgZm9ybWF0dGluZzogIGAlc2AgYW5kIGAlcmAgY2FsbCA6Y2xhc3M6YEVudW1gJ3MgOm1ldGg6YF9fc3RyX19gIGFuZAorICAgOm1ldGg6YF9fcmVwcl9fYCByZXNwZWN0aXZlbHk7IG90aGVyIGNvZGVzIChzdWNoIGFzIGAlaWAgb3IgYCVoYCBmb3IKKyAgIEludEVudW0pIHRyZWF0IHRoZSBlbnVtIG1lbWJlciBhcyBpdHMgbWl4ZWQtaW4gdHlwZS4KKzUuIDptZXRoOmBzdHIuX19mb3JtYXRfX2AgKG9yIDpmdW5jOmBmb3JtYXRgKSB3aWxsIHVzZSB0aGUgbWl4ZWQtaW4KKyAgIHR5cGUncyA6bWV0aDpgX19mb3JtYXRfX2AuICBJZiB0aGUgOmNsYXNzOmBFbnVtYCdzIDpmdW5jOmBzdHJgIG9yCisgICA6ZnVuYzpgcmVwcmAgaXMgZGVzaXJlZCB1c2UgdGhlIGAhc2Agb3IgYCFyYCA6Y2xhc3M6YHN0cmAgZm9ybWF0IGNvZGVzLgorCisKK0ludGVyZXN0aW5nIGV4YW1wbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGlsZSA6Y2xhc3M6YEVudW1gIGFuZCA6Y2xhc3M6YEludEVudW1gIGFyZSBleHBlY3RlZCB0byBjb3ZlciB0aGUgbWFqb3JpdHkgb2YKK3VzZS1jYXNlcywgdGhleSBjYW5ub3QgY292ZXIgdGhlbSBhbGwuICBIZXJlIGFyZSByZWNpcGVzIGZvciBzb21lIGRpZmZlcmVudAordHlwZXMgb2YgZW51bWVyYXRpb25zIHRoYXQgY2FuIGJlIHVzZWQgZGlyZWN0bHksIG9yIGFzIGV4YW1wbGVzIGZvciBjcmVhdGluZworb25lJ3Mgb3duLgorCisKK0F1dG9OdW1iZXIKK15eXl5eXl5eXl4KKworQXZvaWRzIGhhdmluZyB0byBzcGVjaWZ5IHRoZSB2YWx1ZSBmb3IgZWFjaCBlbnVtZXJhdGlvbiBtZW1iZXI6OgorCisgICAgPj4+IGNsYXNzIEF1dG9OdW1iZXIoRW51bSk6CisgICAgLi4uICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgIC4uLiAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgLi4uICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgIC4uLiAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gb2JqCisgICAgLi4uCisgICAgPj4+IGNsYXNzIENvbG9yKEF1dG9OdW1iZXIpOgorICAgIC4uLiAgICAgcmVkID0gKCkKKyAgICAuLi4gICAgIGdyZWVuID0gKCkKKyAgICAuLi4gICAgIGJsdWUgPSAoKQorICAgIC4uLgorICAgID4+PiBDb2xvci5ncmVlbi52YWx1ZSA9PSAyCisgICAgVHJ1ZQorCisuLiBub3RlOjoKKworICAgIFRoZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kLCBpZiBkZWZpbmVkLCBpcyB1c2VkIGR1cmluZyBjcmVhdGlvbiBvZiB0aGUgRW51bQorICAgIG1lbWJlcnM7IGl0IGlzIHRoZW4gcmVwbGFjZWQgYnkgRW51bSdzIDptZXRoOmBfX25ld19fYCB3aGljaCBpcyB1c2VkIGFmdGVyCisgICAgY2xhc3MgY3JlYXRpb24gZm9yIGxvb2t1cCBvZiBleGlzdGluZyBtZW1iZXJzLiAgRHVlIHRvIHRoZSB3YXkgRW51bXMgYXJlCisgICAgc3VwcG9zZWQgdG8gYmVoYXZlLCB0aGVyZSBpcyBubyB3YXkgdG8gY3VzdG9taXplIEVudW0ncyA6bWV0aDpgX19uZXdfX2AuCisKKworT3JkZXJlZEVudW0KK15eXl5eXl5eXl5eCisKK0FuIG9yZGVyZWQgZW51bWVyYXRpb24gdGhhdCBpcyBub3QgYmFzZWQgb24gOmNsYXNzOmBJbnRFbnVtYCBhbmQgc28gbWFpbnRhaW5zCit0aGUgbm9ybWFsIDpjbGFzczpgRW51bWAgaW52YXJpYW50cyAoc3VjaCBhcyBub3QgYmVpbmcgY29tcGFyYWJsZSB0byBvdGhlcgorZW51bWVyYXRpb25zKTo6CisKKyAgICA+Pj4gY2xhc3MgT3JkZXJlZEVudW0oRW51bSk6CisgICAgLi4uICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID49IG90aGVyLnZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgLi4uICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID4gb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4gICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPD0gb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4gICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIC4uLgorICAgID4+PiBjbGFzcyBHcmFkZShPcmRlcmVkRW51bSk6CisgICAgLi4uICAgICBBID0gNQorICAgIC4uLiAgICAgQiA9IDQKKyAgICAuLi4gICAgIEMgPSAzCisgICAgLi4uICAgICBEID0gMgorICAgIC4uLiAgICAgRiA9IDEKKyAgICAuLi4KKyAgICA+Pj4gR3JhZGUuQyA8IEdyYWRlLkEKKyAgICBUcnVlCisKKworRHVwbGljYXRlRnJlZUVudW0KK15eXl5eXl5eXl5eXl5eXl5eCisKK1JhaXNlcyBhbiBlcnJvciBpZiBhIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZSBpcyBmb3VuZCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGFuCithbGlhczo6CisKKyAgICA+Pj4gY2xhc3MgRHVwbGljYXRlRnJlZUVudW0oRW51bSk6CisgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgIC4uLiAgICAgICAgIGNscyA9IHNlbGYuX19jbGFzc19fCisgICAgLi4uICAgICAgICAgaWYgYW55KHNlbGYudmFsdWUgPT0gZS52YWx1ZSBmb3IgZSBpbiBjbHMpOgorICAgIC4uLiAgICAgICAgICAgICBhID0gc2VsZi5uYW1lCisgICAgLi4uICAgICAgICAgICAgIGUgPSBjbHMoc2VsZi52YWx1ZSkubmFtZQorICAgIC4uLiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgIC4uLiAgICAgICAgICAgICAgICAgImFsaWFzZXMgbm90IGFsbG93ZWQgaW4gRHVwbGljYXRlRnJlZUVudW06ICAlciAtLT4gJXIiCisgICAgLi4uICAgICAgICAgICAgICAgICAlIChhLCBlKSkKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgQ29sb3IoRHVwbGljYXRlRnJlZUVudW0pOgorICAgIC4uLiAgICAgcmVkID0gMQorICAgIC4uLiAgICAgZ3JlZW4gPSAyCisgICAgLi4uICAgICBibHVlID0gMworICAgIC4uLiAgICAgZ3JlbmUgPSAyCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IGFsaWFzZXMgbm90IGFsbG93ZWQgaW4gRHVwbGljYXRlRnJlZUVudW06ICAnZ3JlbmUnIC0tPiAnZ3JlZW4nCisKKy4uIG5vdGU6OgorCisgICAgVGhpcyBpcyBhIHVzZWZ1bCBleGFtcGxlIGZvciBzdWJjbGFzc2luZyBFbnVtIHRvIGFkZCBvciBjaGFuZ2Ugb3RoZXIKKyAgICBiZWhhdmlvcnMgYXMgd2VsbCBhcyBkaXNhbGxvd2luZyBhbGlhc2VzLiAgSWYgdGhlIG9ubHkgZGVzaXJlZCBjaGFuZ2UgaXMKKyAgICBkaXNhbGxvd2luZyBhbGlhc2VzLCB0aGUgOmZ1bmM6YHVuaXF1ZWAgZGVjb3JhdG9yIGNhbiBiZSB1c2VkIGluc3RlYWQuCisKKworUGxhbmV0CiteXl5eXl4KKworSWYgOm1ldGg6YF9fbmV3X19gIG9yIDptZXRoOmBfX2luaXRfX2AgaXMgZGVmaW5lZCB0aGUgdmFsdWUgb2YgdGhlIGVudW0gbWVtYmVyCit3aWxsIGJlIHBhc3NlZCB0byB0aG9zZSBtZXRob2RzOjoKKworICAgID4+PiBjbGFzcyBQbGFuZXQoRW51bSk6CisgICAgLi4uICAgICBNRVJDVVJZID0gKDMuMzAzZSsyMywgMi40Mzk3ZTYpCisgICAgLi4uICAgICBWRU5VUyAgID0gKDQuODY5ZSsyNCwgNi4wNTE4ZTYpCisgICAgLi4uICAgICBFQVJUSCAgID0gKDUuOTc2ZSsyNCwgNi4zNzgxNGU2KQorICAgIC4uLiAgICAgTUFSUyAgICA9ICg2LjQyMWUrMjMsIDMuMzk3MmU2KQorICAgIC4uLiAgICAgSlVQSVRFUiA9ICgxLjllKzI3LCAgIDcuMTQ5MmU3KQorICAgIC4uLiAgICAgU0FUVVJOICA9ICg1LjY4OGUrMjYsIDYuMDI2OGU3KQorICAgIC4uLiAgICAgVVJBTlVTICA9ICg4LjY4NmUrMjUsIDIuNTU1OWU3KQorICAgIC4uLiAgICAgTkVQVFVORSA9ICgxLjAyNGUrMjYsIDIuNDc0NmU3KQorICAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3MsIHJhZGl1cyk6CisgICAgLi4uICAgICAgICAgc2VsZi5tYXNzID0gbWFzcyAgICAgICAjIGluIGtpbG9ncmFtcworICAgIC4uLiAgICAgICAgIHNlbGYucmFkaXVzID0gcmFkaXVzICAgIyBpbiBtZXRlcnMKKyAgICAuLi4gICAgIEBwcm9wZXJ0eQorICAgIC4uLiAgICAgZGVmIHN1cmZhY2VfZ3Jhdml0eShzZWxmKToKKyAgICAuLi4gICAgICAgICAjIHVuaXZlcnNhbCBncmF2aXRhdGlvbmFsIGNvbnN0YW50ICAobTMga2ctMSBzLTIpCisgICAgLi4uICAgICAgICAgRyA9IDYuNjczMDBFLTExCisgICAgLi4uICAgICAgICAgcmV0dXJuIEcgKiBzZWxmLm1hc3MgLyAoc2VsZi5yYWRpdXMgKiBzZWxmLnJhZGl1cykKKyAgICAuLi4KKyAgICA+Pj4gUGxhbmV0LkVBUlRILnZhbHVlCisgICAgKDUuOTc2ZSsyNCwgNjM3ODE0MC4wKQorICAgID4+PiBQbGFuZXQuRUFSVEguc3VyZmFjZV9ncmF2aXR5CisgICAgOS44MDI2NTI3NDMzMzcxMjkKKworCitIb3cgYXJlIEVudW1zIGRpZmZlcmVudD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFbnVtcyBoYXZlIGEgY3VzdG9tIG1ldGFjbGFzcyB0aGF0IGFmZmVjdHMgbWFueSBhc3BlY3RzIG9mIGJvdGggZGVyaXZlZCBFbnVtCitjbGFzc2VzIGFuZCB0aGVpciBpbnN0YW5jZXMgKG1lbWJlcnMpLgorCisKK0VudW0gQ2xhc3NlcworXl5eXl5eXl5eXl5eCisKK1RoZSA6Y2xhc3M6YEVudW1NZXRhYCBtZXRhY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyB0aGUKKzptZXRoOmBfX2NvbnRhaW5zX19gLCA6bWV0aDpgX19kaXJfX2AsIDptZXRoOmBfX2l0ZXJfX2AgYW5kIG90aGVyIG1ldGhvZHMgdGhhdAorYWxsb3cgb25lIHRvIGRvIHRoaW5ncyB3aXRoIGFuIDpjbGFzczpgRW51bWAgY2xhc3MgdGhhdCBmYWlsIG9uIGEgdHlwaWNhbAorY2xhc3MsIHN1Y2ggYXMgYGxpc3QoQ29sb3IpYCBvciBgc29tZV92YXIgaW4gQ29sb3JgLiAgOmNsYXNzOmBFbnVtTWV0YWAgaXMKK3Jlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHZhcmlvdXMgb3RoZXIgbWV0aG9kcyBvbiB0aGUgZmluYWwgOmNsYXNzOmBFbnVtYAorY2xhc3MgYXJlIGNvcnJlY3QgKHN1Y2ggYXMgOm1ldGg6YF9fbmV3X19gLCA6bWV0aDpgX19nZXRuZXdhcmdzX19gLAorOm1ldGg6YF9fc3RyX19gIGFuZCA6bWV0aDpgX19yZXByX19gKQorCisKK0VudW0gTWVtYmVycyAoYWthIGluc3RhbmNlcykKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIG1vc3QgaW50ZXJlc3RpbmcgdGhpbmcgYWJvdXQgRW51bSBtZW1iZXJzIGlzIHRoYXQgdGhleSBhcmUgc2luZ2xldG9ucy4KKzpjbGFzczpgRW51bU1ldGFgIGNyZWF0ZXMgdGhlbSBhbGwgd2hpbGUgaXQgaXMgY3JlYXRpbmcgdGhlIDpjbGFzczpgRW51bWAKK2NsYXNzIGl0c2VsZiwgYW5kIHRoZW4gcHV0cyBhIGN1c3RvbSA6bWV0aDpgX19uZXdfX2AgaW4gcGxhY2UgdG8gZW5zdXJlCit0aGF0IG5vIG5ldyBvbmVzIGFyZSBldmVyIGluc3RhbnRpYXRlZCBieSByZXR1cm5pbmcgb25seSB0aGUgZXhpc3RpbmcKK21lbWJlciBpbnN0YW5jZXMuCisKKworRmluZXIgUG9pbnRzCiteXl5eXl5eXl5eXl4KKworRW51bSBtZW1iZXJzIGFyZSBpbnN0YW5jZXMgb2YgYW4gRW51bSBjbGFzcywgYW5kIGV2ZW4gdGhvdWdoIHRoZXkgYXJlCithY2Nlc3NpYmxlIGFzIGBFbnVtQ2xhc3MubWVtYmVyYCwgdGhleSBhcmUgbm90IGFjY2Vzc2libGUgZGlyZWN0bHkgZnJvbQordGhlIG1lbWJlcjo6CisKKyAgICA+Pj4gQ29sb3IucmVkCisgICAgPENvbG9yLnJlZDogMT4KKyAgICA+Pj4gQ29sb3IucmVkLmJsdWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgQXR0cmlidXRlRXJyb3I6ICdDb2xvcicgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2JsdWUnCisKK0xpa2V3aXNlLCB0aGUgOmF0dHI6YF9fbWVtYmVyc19fYCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY2xhc3MuCisKK0lmIHlvdSBnaXZlIHlvdXIgOmNsYXNzOmBFbnVtYCBzdWJjbGFzcyBleHRyYSBtZXRob2RzLCBsaWtlIHRoZSBgUGxhbmV0YF8KK2NsYXNzIGFib3ZlLCB0aG9zZSBtZXRob2RzIHdpbGwgc2hvdyB1cCBpbiBhIDpmdW5jOmBkaXJgIG9mIHRoZSBtZW1iZXIsCitidXQgbm90IG9mIHRoZSBjbGFzczo6CisKKyAgICA+Pj4gZGlyKFBsYW5ldCkKKyAgICBbJ0VBUlRIJywgJ0pVUElURVInLCAnTUFSUycsICdNRVJDVVJZJywgJ05FUFRVTkUnLCAnU0FUVVJOJywgJ1VSQU5VUycsICdWRU5VUycsICdfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21lbWJlcnNfXycsICdfX21vZHVsZV9fJ10KKyAgICA+Pj4gZGlyKFBsYW5ldC5FQVJUSCkKKyAgICBbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLCAnbmFtZScsICdzdXJmYWNlX2dyYXZpdHknLCAndmFsdWUnXQorCitBIDptZXRoOmBfX25ld19fYCBtZXRob2Qgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUKKzpjbGFzczpgRW51bWAgbWVtYmVycyAtLSBhZnRlciB0aGF0IGl0IGlzIHJlcGxhY2VkLiAgVGhpcyBtZWFucyBpZiB5b3Ugd2lzaCB0bworY2hhbmdlIGhvdyA6Y2xhc3M6YEVudW1gIG1lbWJlcnMgYXJlIGxvb2tlZCB1cCB5b3UgZWl0aGVyIGhhdmUgdG8gd3JpdGUgYQoraGVscGVyIGZ1bmN0aW9uIG9yIGEgOmZ1bmM6YGNsYXNzbWV0aG9kYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKaW5kZXggNmU0NTU5Yy4uYzIwMTdjYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKQEAgLTI1MywxMiArMjUzLDIzIEBACiAgICBGb3IgZXhjZXB0aW9ucyB0aGF0IGludm9sdmUgYSBmaWxlIHN5c3RlbSBwYXRoIChzdWNoIGFzIDpmdW5jOmBvcGVuYCBvcgogICAgOmZ1bmM6YG9zLnVubGlua2ApLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIHdpbGwgY29udGFpbiBhbiBhZGRpdGlvbmFsCiAgICBhdHRyaWJ1dGUsIDphdHRyOmBmaWxlbmFtZWAsIHdoaWNoIGlzIHRoZSBmaWxlIG5hbWUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KKyAgIEZvciBmdW5jdGlvbnMgdGhhdCBpbnZvbHZlIHR3byBmaWxlIHN5c3RlbSBwYXRocyAoc3VjaCBhcworICAgOmZ1bmM6YG9zLnJlbmFtZWApLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIHdpbGwgY29udGFpbiBhIHNlY29uZAorICAgOmF0dHI6YGZpbGVuYW1lMmAgYXR0cmlidXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlY29uZCBmaWxlIG5hbWUgcGFzc2VkCisgICB0byB0aGUgZnVuY3Rpb24uCisKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIDpleGM6YEVudmlyb25tZW50RXJyb3JgLCA6ZXhjOmBJT0Vycm9yYCwgOmV4YzpgV2luZG93c0Vycm9yYCwKICAgICAgIDpleGM6YFZNU0Vycm9yYCwgOmV4Yzpgc29ja2V0LmVycm9yYCwgOmV4Yzpgc2VsZWN0LmVycm9yYCBhbmQKICAgICAgIDpleGM6YG1tYXAuZXJyb3JgIGhhdmUgYmVlbiBtZXJnZWQgaW50byA6ZXhjOmBPU0Vycm9yYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKworICAgICAgVGhlIDphdHRyOmBmaWxlbmFtZWAgYXR0cmlidXRlIGlzIG5vdyB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIHBhc3NlZCB0bworICAgICAgdGhlIGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIHRoZSBuYW1lIGVuY29kZWQgdG8gb3IgZGVjb2RlZCBmcm9tIHRoZQorICAgICAgZmlsZXN5c3RlbSBlbmNvZGluZy4gIEFsc28sIHRoZSA6YXR0cjpgZmlsZW5hbWUyYCBhdHRyaWJ1dGUgd2FzIGFkZGVkLgorCiAKIC4uIGV4Y2VwdGlvbjo6IE92ZXJmbG93RXJyb3IKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdCBiL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QKaW5kZXggM2MzMzYyMS4uNjFiYzUwMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mYXVsdGhhbmRsZXIucnN0CkBAIC0yNyw2ICsyNyw3IEBACiAqIE9ubHkgdGhlIGZpbGVuYW1lLCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlIGxpbmUgbnVtYmVyIGFyZQogICBkaXNwbGF5ZWQuIChubyBzb3VyY2UgY29kZSkKICogSXQgaXMgbGltaXRlZCB0byAxMDAgZnJhbWVzIGFuZCAxMDAgdGhyZWFkcy4KKyogVGhlIG9yZGVyIGlzIHJldmVyc2VkOiB0aGUgbW9zdCByZWNlbnQgY2FsbCBpcyBzaG93biBmaXJzdC4KIAogQnkgZGVmYXVsdCwgdGhlIFB5dGhvbiB0cmFjZWJhY2sgaXMgd3JpdHRlbiB0byA6ZGF0YTpgc3lzLnN0ZGVycmAuIFRvIHNlZQogdHJhY2ViYWNrcywgYXBwbGljYXRpb25zIG11c3QgYmUgcnVuIGluIHRoZSB0ZXJtaW5hbC4gQSBsb2cgZmlsZSBjYW4KQEAgLTEyOSw3ICsxMzAsNyBAQAogICAgID4+PiBjdHlwZXMuc3RyaW5nX2F0KDApCiAgICAgRmF0YWwgUHl0aG9uIGVycm9yOiBTZWdtZW50YXRpb24gZmF1bHQKIAotICAgIEN1cnJlbnQgdGhyZWFkIDB4MDAwMDdmYjg5OWYzOTcwMDoKKyAgICBDdXJyZW50IHRocmVhZCAweDAwMDA3ZmI4OTlmMzk3MDAgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOgogICAgICAgRmlsZSAiL2hvbWUvcHl0aG9uL2NweXRob24vTGliL2N0eXBlcy9fX2luaXRfXy5weSIsIGxpbmUgNDg2IGluIHN0cmluZ19hdAogICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSBpbiA8bW9kdWxlPgogICAgIFNlZ21lbnRhdGlvbiBmYXVsdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QgYi9Eb2MvbGlicmFyeS9maWxlY21wLnJzdAppbmRleCA4YTg4ZjhjLi4wNmQzZjIxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlY21wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlY21wLnJzdApAQCAtMjcsNiArMjcsMTAgQEAKICAgIE5vdGUgdGhhdCBubyBleHRlcm5hbCBwcm9ncmFtcyBhcmUgY2FsbGVkIGZyb20gdGhpcyBmdW5jdGlvbiwgZ2l2aW5nIGl0CiAgICBwb3J0YWJpbGl0eSBhbmQgZWZmaWNpZW5jeS4KIAorICAgVGhpcyBmdW5jdGlvbiB1c2VzIGEgY2FjaGUgZm9yIHBhc3QgY29tcGFyaXNvbnMgYW5kIHRoZSByZXN1bHRzLAorICAgd2l0aCBjYWNoZSBlbnRyaWVzIGludmFsaWRhdGVkIGlmIHRoZSA6ZnVuYzpgb3Muc3RhdGAgaW5mb3JtYXRpb24gZm9yIHRoZQorICAgZmlsZSBjaGFuZ2VzLiAgVGhlIGVudGlyZSBjYWNoZSBtYXkgYmUgY2xlYXJlZCB1c2luZyA6ZnVuYzpgY2xlYXJfY2FjaGVgLgorCiAKIC4uIGZ1bmN0aW9uOjogY21wZmlsZXMoZGlyMSwgZGlyMiwgY29tbW9uLCBzaGFsbG93PVRydWUpCiAKQEAgLTQ4LDYgKzUyLDE1IEBACiAgICBvbmUgb2YgdGhlIHRocmVlIHJldHVybmVkIGxpc3RzLgogCiAKKy4uIGZ1bmN0aW9uOjogY2xlYXJfY2FjaGUoKQorCisgICBDbGVhciB0aGUgZmlsZWNtcCBjYWNoZS4gVGhpcyBtYXkgYmUgdXNlZnVsIGlmIGEgZmlsZSBpcyBjb21wYXJlZCBzbyBxdWlja2x5CisgICBhZnRlciBpdCBpcyBtb2RpZmllZCB0aGF0IGl0IGlzIHdpdGhpbiB0aGUgbXRpbWUgcmVzb2x1dGlvbiBvZgorICAgdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gX2RpcmNtcC1vYmplY3RzOgogCiBUaGUgOmNsYXNzOmBkaXJjbXBgIGNsYXNzCkBAIC01NSwyOCArNjgsMjUgQEAKIAogLi4gY2xhc3M6OiBkaXJjbXAoYSwgYiwgaWdub3JlPU5vbmUsIGhpZGU9Tm9uZSkKIAotICAgQ29uc3RydWN0IGEgbmV3IGRpcmVjdG9yeSBjb21wYXJpc29uIG9iamVjdCwgdG8gY29tcGFyZSB0aGUgZGlyZWN0b3JpZXMgKmEqIGFuZAotICAgKmIqLiAqaWdub3JlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaWdub3JlLCBhbmQgZGVmYXVsdHMgdG8gYGBbJ1JDUycsICdDVlMnLAotICAgJ3RhZ3MnXWBgLiAqaGlkZSogaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGhpZGUsIGFuZCBkZWZhdWx0cyB0byBgYFtvcy5jdXJkaXIsCi0gICBvcy5wYXJkaXJdYGAuCisgICBDb25zdHJ1Y3QgYSBuZXcgZGlyZWN0b3J5IGNvbXBhcmlzb24gb2JqZWN0LCB0byBjb21wYXJlIHRoZSBkaXJlY3RvcmllcyAqYSoKKyAgIGFuZCAqYiouICAqaWdub3JlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaWdub3JlLCBhbmQgZGVmYXVsdHMgdG8KKyAgIDphdHRyOmBmaWxlY21wLkRFRkFVTFRfSUdOT1JFU2AuICAqaGlkZSogaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGhpZGUsIGFuZAorICAgZGVmYXVsdHMgdG8gYGBbb3MuY3VyZGlyLCBvcy5wYXJkaXJdYGAuCiAKICAgIFRoZSA6Y2xhc3M6YGRpcmNtcGAgY2xhc3MgY29tcGFyZXMgZmlsZXMgYnkgZG9pbmcgKnNoYWxsb3cqIGNvbXBhcmlzb25zCiAgICBhcyBkZXNjcmliZWQgZm9yIDpmdW5jOmBmaWxlY21wLmNtcGAuCiAKICAgIFRoZSA6Y2xhc3M6YGRpcmNtcGAgY2xhc3MgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCi0KICAgIC4uIG1ldGhvZDo6IHJlcG9ydCgpCiAKICAgICAgIFByaW50ICh0byA6ZGF0YTpgc3lzLnN0ZG91dGApIGEgY29tcGFyaXNvbiBiZXR3ZWVuICphKiBhbmQgKmIqLgogCi0KICAgIC4uIG1ldGhvZDo6IHJlcG9ydF9wYXJ0aWFsX2Nsb3N1cmUoKQogCiAgICAgICBQcmludCBhIGNvbXBhcmlzb24gYmV0d2VlbiAqYSogYW5kICpiKiBhbmQgY29tbW9uIGltbWVkaWF0ZQogICAgICAgc3ViZGlyZWN0b3JpZXMuCiAKLQogICAgLi4gbWV0aG9kOjogcmVwb3J0X2Z1bGxfY2xvc3VyZSgpCiAKICAgICAgIFByaW50IGEgY29tcGFyaXNvbiBiZXR3ZWVuICphKiBhbmQgKmIqIGFuZCBjb21tb24gc3ViZGlyZWN0b3JpZXMKQEAgLTEzMyw3ICsxNDMsNyBAQAogCiAgICAuLiBhdHRyaWJ1dGU6OiBjb21tb25fZmlsZXMKIAotICAgICAgRmlsZXMgaW4gYm90aCAqYSogYW5kICpiKgorICAgICAgRmlsZXMgaW4gYm90aCAqYSogYW5kICpiKi4KIAogCiAgICAuLiBhdHRyaWJ1dGU6OiBjb21tb25fZnVubnkKQEAgLTE2NCw2ICsxNzQsMTIgQEAKICAgICAgIEEgZGljdGlvbmFyeSBtYXBwaW5nIG5hbWVzIGluIDphdHRyOmBjb21tb25fZGlyc2AgdG8gOmNsYXNzOmBkaXJjbXBgCiAgICAgICBvYmplY3RzLgogCisuLiBhdHRyaWJ1dGU6OiBERUZBVUxUX0lHTk9SRVMKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIExpc3Qgb2YgZGlyZWN0b3JpZXMgaWdub3JlZCBieSA6Y2xhc3M6YGRpcmNtcGAgYnkgZGVmYXVsdC4KKwogCiBIZXJlIGlzIGEgc2ltcGxpZmllZCBleGFtcGxlIG9mIHVzaW5nIHRoZSBgYHN1YmRpcnNgYCBhdHRyaWJ1dGUgdG8gc2VhcmNoCiByZWN1cnNpdmVseSB0aHJvdWdoIHR3byBkaXJlY3RvcmllcyB0byBzaG93IGNvbW1vbiBkaWZmZXJlbnQgZmlsZXM6OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QKaW5kZXggZDVhNDg3NS4uZWUwNjgzMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0CkBAIC0xNjAsNiArMTYwLDkgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlci4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICBUaGUgYGAnclUnYGAgYW5kIGBgJ1UnYGAgbW9kZXMuCisKIAogKipPcHRpb25hbCBpbi1wbGFjZSBmaWx0ZXJpbmc6KiogaWYgdGhlIGtleXdvcmQgYXJndW1lbnQgYGBpbnBsYWNlPVRydWVgYCBpcwogcGFzc2VkIHRvIDpmdW5jOmBmaWxlaW5wdXQuaW5wdXRgIG9yIHRvIHRoZSA6Y2xhc3M6YEZpbGVJbnB1dGAgY29uc3RydWN0b3IsIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZXN5cy5yc3QgYi9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdAppbmRleCA1ODk5OGE4Li4wM2UwODViIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdApAQCAtMTIsNiArMTIsNyBAQAogCiAuLiB0b2N0cmVlOjoKIAorICAgcGF0aGxpYi5yc3QKICAgIG9zLnBhdGgucnN0CiAgICBmaWxlaW5wdXQucnN0CiAgICBzdGF0LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZm5tYXRjaC5yc3QgYi9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdAppbmRleCBlMDQzNGIwLi5lZjkzZjA1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdApAQCAtODYsNyArODYsNyBAQAogICAgICAgJy4qXFwudHh0JCcKICAgICAgID4+PiByZW9iaiA9IHJlLmNvbXBpbGUocmVnZXgpCiAgICAgICA+Pj4gcmVvYmoubWF0Y2goJ2Zvb2Jhci50eHQnKQotICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDEwKSwgbWF0Y2g9J2Zvb2Jhci50eHQnPgogCiAKIC4uIHNlZWFsc286OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdCBiL0RvYy9saWJyYXJ5L2Zvcm1hdHRlci5yc3QKaW5kZXggODhiZTExYy4uMTg0N2E4MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0CkBAIC0zLDYgKzMsMTEgQEAKIAogLi4gbW9kdWxlOjogZm9ybWF0dGVyCiAgICA6c3lub3BzaXM6IEdlbmVyaWMgb3V0cHV0IGZvcm1hdHRlciBhbmQgZGV2aWNlIGludGVyZmFjZS4KKyAgIDpkZXByZWNhdGVkOgorCisuLiBkZXByZWNhdGVkOjogMy40CisgICBEdWUgdG8gbGFjayBvZiB1c2FnZSwgdGhlIGZvcm1hdHRlciBtb2R1bGUgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgaXMgc2xhdGVkCisgICBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy42LgogCiAKIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHR3byBpbnRlcmZhY2UgZGVmaW5pdGlvbnMsIGVhY2ggd2l0aCBtdWx0aXBsZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnRwbGliLnJzdCBiL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QKaW5kZXggZGNiMmFjNC4uN2Y5OGQwYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdHBsaWIucnN0CkBAIC05NCw2ICs5NCwxMSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICpzb3VyY2VfYWRkcmVzcyogcGFyYW1ldGVyIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBjbGFzcyBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVgIGFuZCAqU2VydmVyIE5hbWUgSW5kaWNhdG9yKiAoc2VlCisgICAgICA6ZGF0YTpgfnNzbC5IQVNfU05JYCkuCisKICAgIEhlcmUncyBhIHNhbXBsZSBzZXNzaW9uIHVzaW5nIHRoZSA6Y2xhc3M6YEZUUF9UTFNgIGNsYXNzOgogCiAgICA+Pj4gZnJvbSBmdHBsaWIgaW1wb3J0IEZUUF9UTFMKQEAgLTQyNyw2ICs0MzIsMTEgQEAKICAgIFNldCB1cCBzZWN1cmUgY29udHJvbCBjb25uZWN0aW9uIGJ5IHVzaW5nIFRMUyBvciBTU0wsIGRlcGVuZGluZyBvbiB3aGF0CiAgICBzcGVjaWZpZWQgaW4gOm1ldGg6YHNzbF92ZXJzaW9uYCBhdHRyaWJ1dGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbWV0aG9kIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0b3IqIChzZWUKKyAgICAgIDpkYXRhOmB+c3NsLkhBU19TTklgKS4KKwogLi4gbWV0aG9kOjogRlRQX1RMUy5jY2MoKQogCiAgICBSZXZlcnQgY29udHJvbCBjaGFubmVsIGJhY2sgdG8gcGxhaW50ZXh0LiAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHRha2UKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CmluZGV4IGFlMjljZDguLjU3ZjAxNWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdApAQCAtNTQwLDggKzU0MCwxMyBAQAogICAgQSBjYWxsIHRvIGBgZm9ybWF0KHZhbHVlLCBmb3JtYXRfc3BlYylgYCBpcyB0cmFuc2xhdGVkIHRvCiAgICBgYHR5cGUodmFsdWUpLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpYGAgd2hpY2ggYnlwYXNzZXMgdGhlIGluc3RhbmNlCiAgICBkaWN0aW9uYXJ5IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgdmFsdWUncyA6bWV0aDpgX19mb3JtYXRfX2AgbWV0aG9kLiAgQQotICAgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHRoZSBtZXRob2QgaXMgbm90IGZvdW5kIG9yIGlmIGVpdGhlcgotICAgdGhlICpmb3JtYXRfc3BlYyogb3IgdGhlIHJldHVybiB2YWx1ZSBhcmUgbm90IHN0cmluZ3MuCisgICA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQgaWYgdGhlIG1ldGhvZCBzZWFyY2ggcmVhY2hlcworICAgOm1vZDpgb2JqZWN0YCBhbmQgdGhlICpmb3JtYXRfc3BlYyogaXMgbm9uLWVtcHR5LCBvciBpZiBlaXRoZXIgdGhlCisgICAqZm9ybWF0X3NwZWMqIG9yIHRoZSByZXR1cm4gdmFsdWUgYXJlIG5vdCBzdHJpbmdzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgYGBvYmplY3QoKS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKWBgIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgCisgICAgICBpZiAqZm9ybWF0X3NwZWMqIGlzIG5vdCBhbiBlbXB0eSBzdHJpbmcuCiAKIAogLi4gX2Z1bmMtZnJvemVuc2V0OgpAQCAtNjY2LDYgKzY3MSwxMiBAQAogCiAgICBUaGUgaW50ZWdlciB0eXBlIGlzIGRlc2NyaWJlZCBpbiA6cmVmOmB0eXBlc251bWVyaWNgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSWYgKmJhc2UqIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YGludGAgYW5kIHRoZSAqYmFzZSogb2JqZWN0IGhhcyBhCisgICAgICA6bWV0aDpgYmFzZS5fX2luZGV4X18gPG9iamVjdC5fX2luZGV4X18+YCBtZXRob2QsIHRoYXQgbWV0aG9kIGlzIGNhbGxlZAorICAgICAgdG8gb2J0YWluIGFuIGludGVnZXIgZm9yIHRoZSBiYXNlLiAgUHJldmlvdXMgdmVyc2lvbnMgdXNlZAorICAgICAgOm1ldGg6YGJhc2UuX19pbnRfXyA8b2JqZWN0Ll9faW50X18+YCBpbnN0ZWFkIG9mIDptZXRoOmBiYXNlLl9faW5kZXhfXworICAgICAgPG9iamVjdC5fX2luZGV4X18+YC4KIAogLi4gZnVuY3Rpb246OiBpc2luc3RhbmNlKG9iamVjdCwgY2xhc3NpbmZvKQogCkBAIC03NDgsMTkgKzc1OSwyMiBAQAogICAgYWxyZWFkeSBhcnJhbmdlZCBpbnRvIGFyZ3VtZW50IHR1cGxlcywgc2VlIDpmdW5jOmBpdGVydG9vbHMuc3Rhcm1hcGBcLgogCiAKLS4uIGZ1bmN0aW9uOjogbWF4KGl0ZXJhYmxlLCAqWywga2V5XSkKKy4uIGZ1bmN0aW9uOjogbWF4KGl0ZXJhYmxlLCAqWywgZGVmYXVsdCwga2V5XSkKICAgICAgICAgICAgICAgbWF4KGFyZzEsIGFyZzIsICphcmdzWywga2V5XSkKIAogICAgUmV0dXJuIHRoZSBsYXJnZXN0IGl0ZW0gaW4gYW4gaXRlcmFibGUgb3IgdGhlIGxhcmdlc3Qgb2YgdHdvIG9yIG1vcmUKICAgIGFyZ3VtZW50cy4KIAotICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsICppdGVyYWJsZSogbXVzdCBiZSBhIG5vbi1lbXB0eQotICAgaXRlcmFibGUgKHN1Y2ggYXMgYSBub24tZW1wdHkgc3RyaW5nLCB0dXBsZSBvciBsaXN0KS4gIFRoZSBsYXJnZXN0IGl0ZW0KLSAgIGluIHRoZSBpdGVyYWJsZSBpcyByZXR1cm5lZC4gIElmIHR3byBvciBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZQotICAgcHJvdmlkZWQsIHRoZSBsYXJnZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcyByZXR1cm5lZC4KKyAgIElmIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBpdCBzaG91bGQgYmUgYW4gOnRlcm06YGl0ZXJhYmxlYC4KKyAgIFRoZSBsYXJnZXN0IGl0ZW0gaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbAorICAgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgdGhlIHNtYWxsZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcworICAgcmV0dXJuZWQuCiAKLSAgIFRoZSBvcHRpb25hbCBrZXl3b3JkLW9ubHkgKmtleSogYXJndW1lbnQgc3BlY2lmaWVzIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nCi0gICBmdW5jdGlvbiBsaWtlIHRoYXQgdXNlZCBmb3IgOm1ldGg6YGxpc3Quc29ydGAuCisgICBUaGVyZSBhcmUgdHdvIG9wdGlvbmFsIGtleXdvcmQtb25seSBhcmd1bWVudHMuIFRoZSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMKKyAgIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4gVGhlCisgICAqZGVmYXVsdCogYXJndW1lbnQgc3BlY2lmaWVzIGFuIG9iamVjdCB0byByZXR1cm4gaWYgdGhlIHByb3ZpZGVkIGl0ZXJhYmxlIGlzCisgICBlbXB0eS4gSWYgdGhlIGl0ZXJhYmxlIGlzIGVtcHR5IGFuZCAqZGVmYXVsdCogaXMgbm90IHByb3ZpZGVkLCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCiAKICAgIElmIG11bHRpcGxlIGl0ZW1zIGFyZSBtYXhpbWFsLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3Qgb25lCiAgICBlbmNvdW50ZXJlZC4gIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIG90aGVyIHNvcnQtc3RhYmlsaXR5IHByZXNlcnZpbmcgdG9vbHMKQEAgLTc3NiwxOSArNzkwLDIyIEBACiAgICA6cmVmOmB0eXBlbWVtb3J5dmlld2AgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAotLi4gZnVuY3Rpb246OiBtaW4oaXRlcmFibGUsICpbLCBrZXldKQorLi4gZnVuY3Rpb246OiBtaW4oaXRlcmFibGUsICpbLCBkZWZhdWx0LCBrZXldKQogICAgICAgICAgICAgICBtaW4oYXJnMSwgYXJnMiwgKmFyZ3NbLCBrZXldKQogCiAgICBSZXR1cm4gdGhlIHNtYWxsZXN0IGl0ZW0gaW4gYW4gaXRlcmFibGUgb3IgdGhlIHNtYWxsZXN0IG9mIHR3byBvciBtb3JlCiAgICBhcmd1bWVudHMuCiAKLSAgIElmIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCAqaXRlcmFibGUqIG11c3QgYmUgYSBub24tZW1wdHkKLSAgIGl0ZXJhYmxlIChzdWNoIGFzIGEgbm9uLWVtcHR5IHN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBUaGUgc21hbGxlc3QgaXRlbQotICAgaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlCi0gICBwcm92aWRlZCwgdGhlIHNtYWxsZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcyByZXR1cm5lZC4KKyAgIElmIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBpdCBzaG91bGQgYmUgYW4gOnRlcm06YGl0ZXJhYmxlYC4KKyAgIFRoZSBzbWFsbGVzdCBpdGVtIGluIHRoZSBpdGVyYWJsZSBpcyByZXR1cm5lZC4gIElmIHR3byBvciBtb3JlIHBvc2l0aW9uYWwKKyAgIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIHRoZSBzbWFsbGVzdCBvZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgaXMKKyAgIHJldHVybmVkLgogCi0gICBUaGUgb3B0aW9uYWwga2V5d29yZC1vbmx5ICprZXkqIGFyZ3VtZW50IHNwZWNpZmllcyBhIG9uZS1hcmd1bWVudCBvcmRlcmluZwotICAgZnVuY3Rpb24gbGlrZSB0aGF0IHVzZWQgZm9yIDptZXRoOmBsaXN0LnNvcnRgLgorICAgVGhlcmUgYXJlIHR3byBvcHRpb25hbCBrZXl3b3JkLW9ubHkgYXJndW1lbnRzLiBUaGUgKmtleSogYXJndW1lbnQgc3BlY2lmaWVzCisgICBhIG9uZS1hcmd1bWVudCBvcmRlcmluZyBmdW5jdGlvbiBsaWtlIHRoYXQgdXNlZCBmb3IgOm1ldGg6YGxpc3Quc29ydGAuIFRoZQorICAgKmRlZmF1bHQqIGFyZ3VtZW50IHNwZWNpZmllcyBhbiBvYmplY3QgdG8gcmV0dXJuIGlmIHRoZSBwcm92aWRlZCBpdGVyYWJsZSBpcworICAgZW1wdHkuIElmIHRoZSBpdGVyYWJsZSBpcyBlbXB0eSBhbmQgKmRlZmF1bHQqIGlzIG5vdCBwcm92aWRlZCwgYQorICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkLgogCiAgICBJZiBtdWx0aXBsZSBpdGVtcyBhcmUgbWluaW1hbCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IG9uZQogICAgZW5jb3VudGVyZWQuICBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzb3J0LXN0YWJpbGl0eSBwcmVzZXJ2aW5nIHRvb2xzCkBAIC04NTYsOCArODczLDcgQEAKICAgIGBgJ2InYGAgICBiaW5hcnkgbW9kZQogICAgYGAndCdgYCAgIHRleHQgbW9kZSAoZGVmYXVsdCkKICAgIGBgJysnYGAgICBvcGVuIGEgZGlzayBmaWxlIGZvciB1cGRhdGluZyAocmVhZGluZyBhbmQgd3JpdGluZykKLSAgIGBgJ1UnYGAgICB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZSAoZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OyBzaG91bGQKLSAgICAgICAgICAgICBub3QgYmUgdXNlZCBpbiBuZXcgY29kZSkKKyAgIGBgJ1UnYGAgICA6dGVybTpgdW5pdmVyc2FsIG5ld2xpbmVzYCBtb2RlIChkZXByZWNhdGVkKQogICAgPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICBUaGUgZGVmYXVsdCBtb2RlIGlzIGBgJ3InYGAgKG9wZW4gZm9yIHJlYWRpbmcgdGV4dCwgc3lub255bSBvZiBgYCdydCdgYCkuCkBAIC05NjMsNiArOTc5LDggQEAKICAgIDptb2Q6YG9zLm9wZW5gIGFzICpvcGVuZXIqIHJlc3VsdHMgaW4gZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIHBhc3NpbmcKICAgIGBgTm9uZWBgKS4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIHRoZSA6cmVmOmBkaXJfZmQgPGRpcl9mZD5gIHBhcmFtZXRlciBvZiB0aGUKICAgIDpmdW5jOmBvcy5vcGVuYCBmdW5jdGlvbiB0byBvcGVuIGEgZmlsZSByZWxhdGl2ZSB0byBhIGdpdmVuIGRpcmVjdG9yeTo6CiAKQEAgLTk3NiwxMCArOTk0LDYgQEAKICAgICAgIC4uLgogICAgICAgPj4+IG9zLmNsb3NlKGRpcl9mZCkgICMgZG9uJ3QgbGVhayBhIGZpbGUgZGVzY3JpcHRvcgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgICAgVGhlICpvcGVuZXIqIHBhcmFtZXRlciB3YXMgYWRkZWQuCi0gICAgICBUaGUgYGAneCdgYCBtb2RlIHdhcyBhZGRlZC4KLQogICAgVGhlIHR5cGUgb2YgOnRlcm06YGZpbGUgb2JqZWN0YCByZXR1cm5lZCBieSB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uCiAgICBkZXBlbmRzIG9uIHRoZSBtb2RlLiAgV2hlbiA6ZnVuYzpgb3BlbmAgaXMgdXNlZCB0byBvcGVuIGEgZmlsZSBpbiBhIHRleHQKICAgIG1vZGUgKGBgJ3cnYGAsIGBgJ3InYGAsIGBgJ3d0J2BgLCBgYCdydCdgYCwgZXRjLiksIGl0IHJldHVybnMgYSBzdWJjbGFzcyBvZgpAQCAtMTAwNiwxMCArMTAyMCwxOCBAQAogICAgYW5kIDptb2Q6YHNodXRpbGAuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgKm9wZW5lciogcGFyYW1ldGVyIHdhcyBhZGRlZC4KKyAgICAgIFRoZSBgYCd4J2BgIG1vZGUgd2FzIGFkZGVkLgogICAgICAgOmV4YzpgSU9FcnJvcmAgdXNlZCB0byBiZSByYWlzZWQsIGl0IGlzIG5vdyBhbiBhbGlhcyBvZiA6ZXhjOmBPU0Vycm9yYC4KICAgICAgIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgaXMgbm93IHJhaXNlZCBpZiB0aGUgZmlsZSBvcGVuZWQgaW4gZXhjbHVzaXZlCiAgICAgICBjcmVhdGlvbiBtb2RlIChgYCd4J2BgKSBhbHJlYWR5IGV4aXN0cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmaWxlIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKKyAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuNCA0LjAKKyAgICAgIFRoZSBgYCdVJ2BgIG1vZGUuCisKIAogLi4gWFhYIHdvcmtzIGZvciBieXRlcyB0b28sIGJ1dCBzaG91bGQgaXQ/CiAuLiBmdW5jdGlvbjo6IG9yZChjKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKaW5kZXggM2M5NDZlMy4uNzdjZDgzOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CkBAIC02LDYgKzYsNyBAQAogLi4gbW9kdWxlYXV0aG9yOjogUGV0ZXIgSGFycmlzIDxzY2F2QGJsdWV5b25kZXIuY28udWs+CiAuLiBtb2R1bGVhdXRob3I6OiBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uQHJjbi5jb20+CiAuLiBtb2R1bGVhdXRob3I6OiBOaWNrIENvZ2hsYW4gPG5jb2dobGFuQGdtYWlsLmNvbT4KKy4uIG1vZHVsZWF1dGhvcjo6IMWBdWthc3ogTGFuZ2EgPGx1a2FzekBsYW5nYS5wbD4KIC4uIHNlY3Rpb25hdXRob3I6OiBQZXRlciBIYXJyaXMgPHNjYXZAYmx1ZXlvbmRlci5jby51az4KIAogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZnVuY3Rvb2xzLnB5YApAQCAtMTMzLDE1ICsxMzQsMzQgQEAKIAogICAgICAgIEB0b3RhbF9vcmRlcmluZwogICAgICAgIGNsYXNzIFN0dWRlbnQ6CisgICAgICAgICAgIGRlZiBfaXNfdmFsaWRfb3BlcmFuZChzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICByZXR1cm4gKGhhc2F0dHIob3RoZXIsICJsYXN0bmFtZSIpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG90aGVyLCAiZmlyc3RuYW1lIikpCiAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX3ZhbGlkX29wZXJhbmQob3RoZXIpOgorICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICAgICAgICAgcmV0dXJuICgoc2VsZi5sYXN0bmFtZS5sb3dlcigpLCBzZWxmLmZpcnN0bmFtZS5sb3dlcigpKSA9PQogICAgICAgICAgICAgICAgICAgICAgICAob3RoZXIubGFzdG5hbWUubG93ZXIoKSwgb3RoZXIuZmlyc3RuYW1lLmxvd2VyKCkpKQogICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9pc192YWxpZF9vcGVyYW5kKG90aGVyKToKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICAgICAgICAgICAgIHJldHVybiAoKHNlbGYubGFzdG5hbWUubG93ZXIoKSwgc2VsZi5maXJzdG5hbWUubG93ZXIoKSkgPAogICAgICAgICAgICAgICAgICAgICAgICAob3RoZXIubGFzdG5hbWUubG93ZXIoKSwgb3RoZXIuZmlyc3RuYW1lLmxvd2VyKCkpKQogCisgICAuLiBub3RlOjoKKworICAgICAgV2hpbGUgdGhpcyBkZWNvcmF0b3IgbWFrZXMgaXQgZWFzeSB0byBjcmVhdGUgd2VsbCBiZWhhdmVkIHRvdGFsbHkKKyAgICAgIG9yZGVyZWQgdHlwZXMsIGl0ICpkb2VzKiBjb21lIGF0IHRoZSBjb3N0IG9mIHNsb3dlciBleGVjdXRpb24gYW5kCisgICAgICBtb3JlIGNvbXBsZXggc3RhY2sgdHJhY2VzIGZvciB0aGUgZGVyaXZlZCBjb21wYXJpc29uIG1ldGhvZHMuIElmCisgICAgICBwZXJmb3JtYW5jZSBiZW5jaG1hcmtpbmcgaW5kaWNhdGVzIHRoaXMgaXMgYSBib3R0bGVuZWNrIGZvciBhIGdpdmVuCisgICAgICBhcHBsaWNhdGlvbiwgaW1wbGVtZW50aW5nIGFsbCBzaXggcmljaCBjb21wYXJpc29uIG1ldGhvZHMgaW5zdGVhZCBpcworICAgICAgbGlrZWx5IHRvIHByb3ZpZGUgYW4gZWFzeSBzcGVlZCBib29zdC4KKwogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBSZXR1cm5pbmcgTm90SW1wbGVtZW50ZWQgZnJvbSB0aGUgdW5kZXJseWluZyBjb21wYXJpc29uIGZ1bmN0aW9uIGZvcgorICAgICAgdW5yZWNvZ25pc2VkIHR5cGVzIGlzIG5vdyBzdXBwb3J0ZWQuCiAKIC4uIGZ1bmN0aW9uOjogcGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKIApAQCAtMTc0LDYgKzE5NCw0OCBAQAogICAgICAgMTgKIAogCisuLiBjbGFzczo6IHBhcnRpYWxtZXRob2QoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpCisKKyAgIFJldHVybiBhIG5ldyA6Y2xhc3M6YHBhcnRpYWxtZXRob2RgIGRlc2NyaXB0b3Igd2hpY2ggYmVoYXZlcworICAgbGlrZSA6Y2xhc3M6YHBhcnRpYWxgIGV4Y2VwdCB0aGF0IGl0IGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYSBtZXRob2QKKyAgIGRlZmluaXRpb24gcmF0aGVyIHRoYW4gYmVpbmcgZGlyZWN0bHkgY2FsbGFibGUuCisKKyAgICpmdW5jKiBtdXN0IGJlIGEgOnRlcm06YGRlc2NyaXB0b3JgIG9yIGEgY2FsbGFibGUgKG9iamVjdHMgd2hpY2ggYXJlIGJvdGgsCisgICBsaWtlIG5vcm1hbCBmdW5jdGlvbnMsIGFyZSBoYW5kbGVkIGFzIGRlc2NyaXB0b3JzKS4KKworICAgV2hlbiAqZnVuYyogaXMgYSBkZXNjcmlwdG9yIChzdWNoIGFzIGEgbm9ybWFsIFB5dGhvbiBmdW5jdGlvbiwKKyAgIDpmdW5jOmBjbGFzc21ldGhvZGAsIDpmdW5jOmBzdGF0aWNtZXRob2RgLCA6ZnVuYzpgYWJzdHJhY3RtZXRob2RgIG9yCisgICBhbm90aGVyIGluc3RhbmNlIG9mIDpjbGFzczpgcGFydGlhbG1ldGhvZGApLCBjYWxscyB0byBgYF9fZ2V0X19gYCBhcmUKKyAgIGRlbGVnYXRlZCB0byB0aGUgdW5kZXJseWluZyBkZXNjcmlwdG9yLCBhbmQgYW4gYXBwcm9wcmlhdGUKKyAgIDpjbGFzczpgcGFydGlhbGAgb2JqZWN0IHJldHVybmVkIGFzIHRoZSByZXN1bHQuCisKKyAgIFdoZW4gKmZ1bmMqIGlzIGEgbm9uLWRlc2NyaXB0b3IgY2FsbGFibGUsIGFuIGFwcHJvcHJpYXRlIGJvdW5kIG1ldGhvZCBpcworICAgY3JlYXRlZCBkeW5hbWljYWxseS4gVGhpcyBiZWhhdmVzIGxpa2UgYSBub3JtYWwgUHl0aG9uIGZ1bmN0aW9uIHdoZW4KKyAgIHVzZWQgYXMgYSBtZXRob2Q6IHRoZSAqc2VsZiogYXJndW1lbnQgd2lsbCBiZSBpbnNlcnRlZCBhcyB0aGUgZmlyc3QKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnQsIGV2ZW4gYmVmb3JlIHRoZSAqYXJncyogYW5kICprZXl3b3Jkcyogc3VwcGxpZWQgdG8KKyAgIHRoZSA6Y2xhc3M6YHBhcnRpYWxtZXRob2RgIGNvbnN0cnVjdG9yLgorCisgICBFeGFtcGxlOjoKKworICAgICAgPj4+IGNsYXNzIENlbGwob2JqZWN0KToKKyAgICAgIC4uLiAgICAgQHByb3BlcnR5CisgICAgICAuLi4gICAgIGRlZiBhbGl2ZShzZWxmKToKKyAgICAgIC4uLiAgICAgICAgIHJldHVybiBzZWxmLl9hbGl2ZQorICAgICAgLi4uICAgICBkZWYgc2V0X3N0YXRlKHNlbGYsIHN0YXRlKToKKyAgICAgIC4uLiAgICAgICAgIHNlbGYuX2FsaXZlID0gYm9vbChzdGF0ZSkKKyAgICAgIC4uLiAgICAgc2V0X2FsaXZlID0gcGFydGlhbG1ldGhvZChzZXRfc3RhdGUsIFRydWUpCisgICAgICAuLi4gICAgIHNldF9kZWFkID0gcGFydGlhbG1ldGhvZChzZXRfc3RhdGUsIEZhbHNlKQorICAgICAgLi4uCisgICAgICA+Pj4gYyA9IENlbGwoKQorICAgICAgPj4+IGMuYWxpdmUKKyAgICAgIEZhbHNlCisgICAgICA+Pj4gYy5zZXRfYWxpdmUoKQorICAgICAgPj4+IGMuYWxpdmUKKyAgICAgIFRydWUKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiByZWR1Y2UoZnVuY3Rpb24sIGl0ZXJhYmxlWywgaW5pdGlhbGl6ZXJdKQogCiAgICBBcHBseSAqZnVuY3Rpb24qIG9mIHR3byBhcmd1bWVudHMgY3VtdWxhdGl2ZWx5IHRvIHRoZSBpdGVtcyBvZiAqc2VxdWVuY2UqLCBmcm9tCkBAIC0xOTgsNiArMjYwLDExMSBAQAogICAgICAgICAgIHJldHVybiB2YWx1ZQogCiAKKy4uIGRlY29yYXRvcjo6IHNpbmdsZWRpc3BhdGNoKGRlZmF1bHQpCisKKyAgIFRyYW5zZm9ybXMgYSBmdW5jdGlvbiBpbnRvIGEgOnRlcm06YHNpbmdsZS1kaXNwYXRjaCA8c2luZ2xlCisgICBkaXNwYXRjaD5gIDp0ZXJtOmBnZW5lcmljIGZ1bmN0aW9uYC4KKworICAgVG8gZGVmaW5lIGEgZ2VuZXJpYyBmdW5jdGlvbiwgZGVjb3JhdGUgaXQgd2l0aCB0aGUgYGBAc2luZ2xlZGlzcGF0Y2hgYAorICAgZGVjb3JhdG9yLiBOb3RlIHRoYXQgdGhlIGRpc3BhdGNoIGhhcHBlbnMgb24gdGhlIHR5cGUgb2YgdGhlIGZpcnN0IGFyZ3VtZW50LAorICAgY3JlYXRlIHlvdXIgZnVuY3Rpb24gYWNjb3JkaW5nbHk6OgorCisgICAgID4+PiBmcm9tIGZ1bmN0b29scyBpbXBvcnQgc2luZ2xlZGlzcGF0Y2gKKyAgICAgPj4+IEBzaW5nbGVkaXNwYXRjaAorICAgICAuLi4gZGVmIGZ1bihhcmcsIHZlcmJvc2U9RmFsc2UpOgorICAgICAuLi4gICAgIGlmIHZlcmJvc2U6CisgICAgIC4uLiAgICAgICAgIHByaW50KCJMZXQgbWUganVzdCBzYXksIiwgZW5kPSIgIikKKyAgICAgLi4uICAgICBwcmludChhcmcpCisKKyAgIFRvIGFkZCBvdmVybG9hZGVkIGltcGxlbWVudGF0aW9ucyB0byB0aGUgZnVuY3Rpb24sIHVzZSB0aGUgOmZ1bmM6YHJlZ2lzdGVyYAorICAgYXR0cmlidXRlIG9mIHRoZSBnZW5lcmljIGZ1bmN0aW9uLiAgSXQgaXMgYSBkZWNvcmF0b3IsIHRha2luZyBhIHR5cGUKKyAgIHBhcmFtZXRlciBhbmQgZGVjb3JhdGluZyBhIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgb3BlcmF0aW9uIGZvciB0aGF0CisgICB0eXBlOjoKKworICAgICA+Pj4gQGZ1bi5yZWdpc3RlcihpbnQpCisgICAgIC4uLiBkZWYgXyhhcmcsIHZlcmJvc2U9RmFsc2UpOgorICAgICAuLi4gICAgIGlmIHZlcmJvc2U6CisgICAgIC4uLiAgICAgICAgIHByaW50KCJTdHJlbmd0aCBpbiBudW1iZXJzLCBlaD8iLCBlbmQ9IiAiKQorICAgICAuLi4gICAgIHByaW50KGFyZykKKyAgICAgLi4uCisgICAgID4+PiBAZnVuLnJlZ2lzdGVyKGxpc3QpCisgICAgIC4uLiBkZWYgXyhhcmcsIHZlcmJvc2U9RmFsc2UpOgorICAgICAuLi4gICAgIGlmIHZlcmJvc2U6CisgICAgIC4uLiAgICAgICAgIHByaW50KCJFbnVtZXJhdGUgdGhpczoiKQorICAgICAuLi4gICAgIGZvciBpLCBlbGVtIGluIGVudW1lcmF0ZShhcmcpOgorICAgICAuLi4gICAgICAgICBwcmludChpLCBlbGVtKQorCisgICBUbyBlbmFibGUgcmVnaXN0ZXJpbmcgbGFtYmRhcyBhbmQgcHJlLWV4aXN0aW5nIGZ1bmN0aW9ucywgdGhlCisgICA6ZnVuYzpgcmVnaXN0ZXJgIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCBpbiBhIGZ1bmN0aW9uYWwgZm9ybTo6CisKKyAgICAgPj4+IGRlZiBub3RoaW5nKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgcHJpbnQoIk5vdGhpbmcuIikKKyAgICAgLi4uCisgICAgID4+PiBmdW4ucmVnaXN0ZXIodHlwZShOb25lKSwgbm90aGluZykKKworICAgVGhlIDpmdW5jOmByZWdpc3RlcmAgYXR0cmlidXRlIHJldHVybnMgdGhlIHVuZGVjb3JhdGVkIGZ1bmN0aW9uIHdoaWNoCisgICBlbmFibGVzIGRlY29yYXRvciBzdGFja2luZywgcGlja2xpbmcsIGFzIHdlbGwgYXMgY3JlYXRpbmcgdW5pdCB0ZXN0cyBmb3IKKyAgIGVhY2ggdmFyaWFudCBpbmRlcGVuZGVudGx5OjoKKworICAgICA+Pj4gQGZ1bi5yZWdpc3RlcihmbG9hdCkKKyAgICAgLi4uIEBmdW4ucmVnaXN0ZXIoRGVjaW1hbCkKKyAgICAgLi4uIGRlZiBmdW5fbnVtKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIkhhbGYgb2YgeW91ciBudW1iZXI6IiwgZW5kPSIgIikKKyAgICAgLi4uICAgICBwcmludChhcmcgLyAyKQorICAgICAuLi4KKyAgICAgPj4+IGZ1bl9udW0gaXMgZnVuCisgICAgIEZhbHNlCisKKyAgIFdoZW4gY2FsbGVkLCB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBkaXNwYXRjaGVzIG9uIHRoZSB0eXBlIG9mIHRoZSBmaXJzdAorICAgYXJndW1lbnQ6OgorCisgICAgID4+PiBmdW4oIkhlbGxvLCB3b3JsZC4iKQorICAgICBIZWxsbywgd29ybGQuCisgICAgID4+PiBmdW4oInRlc3QuIiwgdmVyYm9zZT1UcnVlKQorICAgICBMZXQgbWUganVzdCBzYXksIHRlc3QuCisgICAgID4+PiBmdW4oNDIsIHZlcmJvc2U9VHJ1ZSkKKyAgICAgU3RyZW5ndGggaW4gbnVtYmVycywgZWg/IDQyCisgICAgID4+PiBmdW4oWydzcGFtJywgJ3NwYW0nLCAnZWdncycsICdzcGFtJ10sIHZlcmJvc2U9VHJ1ZSkKKyAgICAgRW51bWVyYXRlIHRoaXM6CisgICAgIDAgc3BhbQorICAgICAxIHNwYW0KKyAgICAgMiBlZ2dzCisgICAgIDMgc3BhbQorICAgICA+Pj4gZnVuKE5vbmUpCisgICAgIE5vdGhpbmcuCisgICAgID4+PiBmdW4oMS4yMykKKyAgICAgMC42MTUKKworICAgV2hlcmUgdGhlcmUgaXMgbm8gcmVnaXN0ZXJlZCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBzcGVjaWZpYyB0eXBlLCBpdHMKKyAgIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyIGlzIHVzZWQgdG8gZmluZCBhIG1vcmUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4KKyAgIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiBkZWNvcmF0ZWQgd2l0aCBgYEBzaW5nbGVkaXNwYXRjaGBgIGlzIHJlZ2lzdGVyZWQKKyAgIGZvciB0aGUgYmFzZSBgYG9iamVjdGBgIHR5cGUsIHdoaWNoIG1lYW5zIGl0IGlzIHVzZWQgaWYgbm8gYmV0dGVyCisgICBpbXBsZW1lbnRhdGlvbiBpcyBmb3VuZC4KKworICAgVG8gY2hlY2sgd2hpY2ggaW1wbGVtZW50YXRpb24gd2lsbCB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBjaG9vc2UgZm9yCisgICBhIGdpdmVuIHR5cGUsIHVzZSB0aGUgYGBkaXNwYXRjaCgpYGAgYXR0cmlidXRlOjoKKworICAgICA+Pj4gZnVuLmRpc3BhdGNoKGZsb2F0KQorICAgICA8ZnVuY3Rpb24gZnVuX251bSBhdCAweDEwMzVhMjg0MD4KKyAgICAgPj4+IGZ1bi5kaXNwYXRjaChkaWN0KSAgICAjIG5vdGU6IGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICAgPGZ1bmN0aW9uIGZ1biBhdCAweDEwM2ZlMDAwMD4KKworICAgVG8gYWNjZXNzIGFsbCByZWdpc3RlcmVkIGltcGxlbWVudGF0aW9ucywgdXNlIHRoZSByZWFkLW9ubHkgYGByZWdpc3RyeWBgCisgICBhdHRyaWJ1dGU6OgorCisgICAgPj4+IGZ1bi5yZWdpc3RyeS5rZXlzKCkKKyAgICBkaWN0X2tleXMoWzxjbGFzcyAnTm9uZVR5cGUnPiwgPGNsYXNzICdpbnQnPiwgPGNsYXNzICdvYmplY3QnPiwKKyAgICAgICAgICAgICAgPGNsYXNzICdkZWNpbWFsLkRlY2ltYWwnPiwgPGNsYXNzICdsaXN0Jz4sCisgICAgICAgICAgICAgIDxjbGFzcyAnZmxvYXQnPl0pCisgICAgPj4+IGZ1bi5yZWdpc3RyeVtmbG9hdF0KKyAgICA8ZnVuY3Rpb24gZnVuX251bSBhdCAweDEwMzVhMjg0MD4KKyAgICA+Pj4gZnVuLnJlZ2lzdHJ5W29iamVjdF0KKyAgICA8ZnVuY3Rpb24gZnVuIGF0IDB4MTAzZmUwMDAwPgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IHVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIHdyYXBwZWQsIGFzc2lnbmVkPVdSQVBQRVJfQVNTSUdOTUVOVFMsIHVwZGF0ZWQ9V1JBUFBFUl9VUERBVEVTKQogCiAgICBVcGRhdGUgYSAqd3JhcHBlciogZnVuY3Rpb24gdG8gbG9vayBsaWtlIHRoZSAqd3JhcHBlZCogZnVuY3Rpb24uIFRoZSBvcHRpb25hbApAQCAtMjEyLDggKzM3OSw4IEBACiAKICAgIFRvIGFsbG93IGFjY2VzcyB0byB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZm9yIGludHJvc3BlY3Rpb24gYW5kIG90aGVyIHB1cnBvc2VzCiAgICAoZS5nLiBieXBhc3NpbmcgYSBjYWNoaW5nIGRlY29yYXRvciBzdWNoIGFzIDpmdW5jOmBscnVfY2FjaGVgKSwgdGhpcyBmdW5jdGlvbgotICAgYXV0b21hdGljYWxseSBhZGRzIGEgX193cmFwcGVkX18gYXR0cmlidXRlIHRvIHRoZSB3cmFwcGVyIHRoYXQgcmVmZXJzIHRvCi0gICB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uCisgICBhdXRvbWF0aWNhbGx5IGFkZHMgYSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIHRvIHRoZSB3cmFwcGVyIHRoYXQgcmVmZXJzIHRvCisgICB0aGUgZnVuY3Rpb24gYmVpbmcgd3JhcHBlZC4KIAogICAgVGhlIG1haW4gaW50ZW5kZWQgdXNlIGZvciB0aGlzIGZ1bmN0aW9uIGlzIGluIDp0ZXJtOmBkZWNvcmF0b3JgIGZ1bmN0aW9ucyB3aGljaAogICAgd3JhcCB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIGFuZCByZXR1cm4gdGhlIHdyYXBwZXIuIElmIHRoZSB3cmFwcGVyIGZ1bmN0aW9uIGlzCkBAIC0yMzYsNiArNDAzLDExIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgTWlzc2luZyBhdHRyaWJ1dGVzIG5vIGxvbmdlciB0cmlnZ2VyIGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIG5vdyBhbHdheXMgcmVmZXJzIHRvIHRoZSB3cmFwcGVkCisgICAgICBmdW5jdGlvbiwgZXZlbiBpZiB0aGF0IGZ1bmN0aW9uIGRlZmluZWQgYSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlLgorICAgICAgKHNlZSA6aXNzdWU6YDE3NDgyYCkKKwogCiAuLiBkZWNvcmF0b3I6OiB3cmFwcyh3cmFwcGVkLCBhc3NpZ25lZD1XUkFQUEVSX0FTU0lHTk1FTlRTLCB1cGRhdGVkPVdSQVBQRVJfVVBEQVRFUykKIApAQCAtMzAxLDQgKzQ3MywzIEBACiBhcmUgbm90IGNyZWF0ZWQgYXV0b21hdGljYWxseS4gIEFsc28sIDpjbGFzczpgcGFydGlhbGAgb2JqZWN0cyBkZWZpbmVkIGluCiBjbGFzc2VzIGJlaGF2ZSBsaWtlIHN0YXRpYyBtZXRob2RzIGFuZCBkbyBub3QgdHJhbnNmb3JtIGludG8gYm91bmQgbWV0aG9kcwogZHVyaW5nIGluc3RhbmNlIGF0dHJpYnV0ZSBsb29rLXVwLgotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9nYy5yc3QgYi9Eb2MvbGlicmFyeS9nYy5yc3QKaW5kZXggNzE0NDlhMy4uODEzNTU0MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2MucnN0CisrKyBiL0RvYy9saWJyYXJ5L2djLnJzdApAQCAtNjcsNiArNjcsMjUgQEAKICAgIHJldHVybmVkLgogCiAKKy4uIGZ1bmN0aW9uOjogZ2V0X3N0YXRzKCkKKworICAgUmV0dXJuIGEgbGlzdCBvZiB0aHJlZSBwZXItZ2VuZXJhdGlvbiBkaWN0aW9uYXJpZXMgY29udGFpbmluZyBjb2xsZWN0aW9uCisgICBzdGF0aXN0aWNzIHNpbmNlIGludGVycHJldGVyIHN0YXJ0LiAgVGhlIG51bWJlciBvZiBrZXlzIG1heSBjaGFuZ2UKKyAgIGluIHRoZSBmdXR1cmUsIGJ1dCBjdXJyZW50bHkgZWFjaCBkaWN0aW9uYXJ5IHdpbGwgY29udGFpbiB0aGUgZm9sbG93aW5nCisgICBpdGVtczoKKworICAgKiBgYGNvbGxlY3Rpb25zYGAgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIGdlbmVyYXRpb24gd2FzIGNvbGxlY3RlZDsKKworICAgKiBgYGNvbGxlY3RlZGBgIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBjb2xsZWN0ZWQgaW5zaWRlIHRoaXMKKyAgICAgZ2VuZXJhdGlvbjsKKworICAgKiBgYHVuY29sbGVjdGFibGVgYCBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG9iamVjdHMgd2hpY2ggd2VyZSBmb3VuZAorICAgICB0byBiZSB1bmNvbGxlY3RhYmxlIChhbmQgd2VyZSB0aGVyZWZvcmUgbW92ZWQgdG8gdGhlIDpkYXRhOmBnYXJiYWdlYAorICAgICBsaXN0KSBpbnNpZGUgdGhpcyBnZW5lcmF0aW9uLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IHNldF90aHJlc2hvbGQodGhyZXNob2xkMFssIHRocmVzaG9sZDFbLCB0aHJlc2hvbGQyXV0pCiAKICAgIFNldCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHRocmVzaG9sZHMgKHRoZSBjb2xsZWN0aW9uIGZyZXF1ZW5jeSkuIFNldHRpbmcKQEAgLTE1OCwyNCArMTc3LDEzIEBACiAKIC4uIGRhdGE6OiBnYXJiYWdlCiAKLSAgIEEgbGlzdCBvZiBvYmplY3RzIHdoaWNoIHRoZSBjb2xsZWN0b3IgZm91bmQgdG8gYmUgdW5yZWFjaGFibGUgYnV0IGNvdWxkIG5vdCBiZQotICAgZnJlZWQgKHVuY29sbGVjdGFibGUgb2JqZWN0cykuICBCeSBkZWZhdWx0LCB0aGlzIGxpc3QgY29udGFpbnMgb25seSBvYmplY3RzIHdpdGgKLSAgIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzLiBPYmplY3RzIHRoYXQgaGF2ZSA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBhbmQgYXJlCi0gICBwYXJ0IG9mIGEgcmVmZXJlbmNlIGN5Y2xlIGNhdXNlIHRoZSBlbnRpcmUgcmVmZXJlbmNlIGN5Y2xlIHRvIGJlIHVuY29sbGVjdGFibGUsCi0gICBpbmNsdWRpbmcgb2JqZWN0cyBub3QgbmVjZXNzYXJpbHkgaW4gdGhlIGN5Y2xlIGJ1dCByZWFjaGFibGUgb25seSBmcm9tIGl0LgotICAgUHl0aG9uIGRvZXNuJ3QgY29sbGVjdCBzdWNoIGN5Y2xlcyBhdXRvbWF0aWNhbGx5IGJlY2F1c2UsIGluIGdlbmVyYWwsIGl0IGlzbid0Ci0gICBwb3NzaWJsZSBmb3IgUHl0aG9uIHRvIGd1ZXNzIGEgc2FmZSBvcmRlciBpbiB3aGljaCB0byBydW4gdGhlIDptZXRoOmBfX2RlbF9fYAotICAgbWV0aG9kcy4gIElmIHlvdSBrbm93IGEgc2FmZSBvcmRlciwgeW91IGNhbiBmb3JjZSB0aGUgaXNzdWUgYnkgZXhhbWluaW5nIHRoZQotICAgKmdhcmJhZ2UqIGxpc3QsIGFuZCBleHBsaWNpdGx5IGJyZWFraW5nIGN5Y2xlcyBkdWUgdG8geW91ciBvYmplY3RzIHdpdGhpbiB0aGUKLSAgIGxpc3QuICBOb3RlIHRoYXQgdGhlc2Ugb2JqZWN0cyBhcmUga2VwdCBhbGl2ZSBldmVuIHNvIGJ5IHZpcnR1ZSBvZiBiZWluZyBpbiB0aGUKLSAgICpnYXJiYWdlKiBsaXN0LCBzbyB0aGV5IHNob3VsZCBiZSByZW1vdmVkIGZyb20gKmdhcmJhZ2UqIHRvby4gIEZvciBleGFtcGxlLAotICAgYWZ0ZXIgYnJlYWtpbmcgY3ljbGVzLCBkbyBgYGRlbCBnYy5nYXJiYWdlWzpdYGAgdG8gZW1wdHkgdGhlIGxpc3QuICBJdCdzCi0gICBnZW5lcmFsbHkgYmV0dGVyIHRvIGF2b2lkIHRoZSBpc3N1ZSBieSBub3QgY3JlYXRpbmcgY3ljbGVzIGNvbnRhaW5pbmcgb2JqZWN0cwotICAgd2l0aCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcywgYW5kICpnYXJiYWdlKiBjYW4gYmUgZXhhbWluZWQgaW4gdGhhdCBjYXNlIHRvCi0gICB2ZXJpZnkgdGhhdCBubyBzdWNoIGN5Y2xlcyBhcmUgYmVpbmcgY3JlYXRlZC4KKyAgIEEgbGlzdCBvZiBvYmplY3RzIHdoaWNoIHRoZSBjb2xsZWN0b3IgZm91bmQgdG8gYmUgdW5yZWFjaGFibGUgYnV0IGNvdWxkCisgICBub3QgYmUgZnJlZWQgKHVuY29sbGVjdGFibGUgb2JqZWN0cykuICBTdGFydGluZyB3aXRoIFB5dGhvbiAzLjQsIHRoaXMKKyAgIGxpc3Qgc2hvdWxkIGJlIGVtcHR5IG1vc3Qgb2YgdGhlIHRpbWUsIGV4Y2VwdCB3aGVuIHVzaW5nIGluc3RhbmNlcyBvZgorICAgQyBleHRlbnNpb24gdHlwZXMgd2l0aCBhIG5vbi1OVUxMIGBgdHBfZGVsYGAgc2xvdC4KIAotICAgSWYgOmNvbnN0OmBERUJVR19TQVZFQUxMYCBpcyBzZXQsIHRoZW4gYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgd2lsbCBiZSBhZGRlZAotICAgdG8gdGhpcyBsaXN0IHJhdGhlciB0aGFuIGZyZWVkLgorICAgSWYgOmNvbnN0OmBERUJVR19TQVZFQUxMYCBpcyBzZXQsIHRoZW4gYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgd2lsbCBiZQorICAgYWRkZWQgdG8gdGhpcyBsaXN0IHJhdGhlciB0aGFuIGZyZWVkLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgSWYgdGhpcyBsaXN0IGlzIG5vbi1lbXB0eSBhdCBpbnRlcnByZXRlciBzaHV0ZG93biwgYQpAQCAtMTgzLDYgKzE5MSwxMCBAQAogICAgICAgOmNvbnN0OmBERUJVR19VTkNPTExFQ1RBQkxFYCBpcyBzZXQsIGluIGFkZGl0aW9uIGFsbCB1bmNvbGxlY3RhYmxlIG9iamVjdHMKICAgICAgIGFyZSBwcmludGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgRm9sbG93aW5nIDpwZXA6YDQ0MmAsIG9iamVjdHMgd2l0aCBhIDptZXRoOmBfX2RlbF9fYCBtZXRob2QgZG9uJ3QgZW5kCisgICAgICB1cCBpbiA6YXR0cjpgZ2MuZ2FyYmFnZWAgYW55bW9yZS4KKwogLi4gZGF0YTo6IGNhbGxiYWNrcwogCiAgICBBIGxpc3Qgb2YgY2FsbGJhY2tzIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3RvciBiZWZvcmUgYW5kCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9nbG9iLnJzdCBiL0RvYy9saWJyYXJ5L2dsb2IucnN0CmluZGV4IGVmZjEzOGIuLmFiY2JmMzggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2dsb2IucnN0CisrKyBiL0RvYy9saWJyYXJ5L2dsb2IucnN0CkBAIC0yNSw2ICsyNSwxMCBAQAogRm9yIGV4YW1wbGUsIGBgJ1s/XSdgYCBtYXRjaGVzIHRoZSBjaGFyYWN0ZXIgYGAnPydgYC4KIAogCisuLiBzZWVhbHNvOjoKKyAgIFRoZSA6bW9kOmBwYXRobGliYCBtb2R1bGUgb2ZmZXJzIGhpZ2gtbGV2ZWwgcGF0aCBvYmplY3RzLgorCisKIC4uIGZ1bmN0aW9uOjogZ2xvYihwYXRobmFtZSkKIAogICAgUmV0dXJuIGEgcG9zc2libHktZW1wdHkgbGlzdCBvZiBwYXRoIG5hbWVzIHRoYXQgbWF0Y2ggKnBhdGhuYW1lKiwgd2hpY2ggbXVzdCBiZQpAQCAtNDAsNiArNDQsMTcgQEAKICAgIHdpdGhvdXQgYWN0dWFsbHkgc3RvcmluZyB0aGVtIGFsbCBzaW11bHRhbmVvdXNseS4KIAogCisuLiBmdW5jdGlvbjo6IGVzY2FwZShwYXRobmFtZSkKKworICAgRXNjYXBlIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMgKGBgJz8nYGAsIGBgJyonYGAgYW5kIGBgJ1snYGApLgorICAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gbWF0Y2ggYW4gYXJiaXRyYXJ5IGxpdGVyYWwgc3RyaW5nIHRoYXQgbWF5CisgICBoYXZlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBpdC4gIFNwZWNpYWwgY2hhcmFjdGVycyBpbiBkcml2ZS9VTkMKKyAgIHNoYXJlcG9pbnRzIGFyZSBub3QgZXNjYXBlZCwgZS5nLiBvbiBXaW5kb3dzCisgICBgYGVzY2FwZSgnLy8/L2M6L1F1byB2YWRpcz8udHh0JylgYCByZXR1cm5zIGBgJy8vPy9jOi9RdW8gdmFkaXNbP10udHh0J2BgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSBkaXJlY3RvcnkgY29udGFpbmluZyBvbmx5IHRoZSBmb2xsb3dpbmcgZmlsZXM6CiA6ZmlsZTpgMS5naWZgLCA6ZmlsZTpgMi50eHRgLCBhbmQgOmZpbGU6YGNhcmQuZ2lmYC4gIDpmdW5jOmBnbG9iYCB3aWxsIHByb2R1Y2UKIHRoZSBmb2xsb3dpbmcgcmVzdWx0cy4gIE5vdGljZSBob3cgYW55IGxlYWRpbmcgY29tcG9uZW50cyBvZiB0aGUgcGF0aCBhcmUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2d6aXAucnN0IGIvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKaW5kZXggMzU0ZGVlZC4uNzg1MzZmYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKQEAgLTM1LDggKzM1LDggQEAKICAgIDpjbGFzczpgYnl0ZXNgIG9iamVjdCksIG9yIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgYW55IG9mIGBgJ3InYGAsIGBgJ3JiJ2BgLCBgYCdhJ2BgLCBgYCdhYidgYCwKLSAgIGBgJ3cnYGAsIG9yIGBgJ3diJ2BgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAncnQnYGAsIGBgJ2F0J2BgLCBvciBgYCd3dCdgYCBmb3IKLSAgIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCisgICBgYCd3J2BgLCBgYCd3YidgYCwgYGAneCdgYCBvciBgYCd4YidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLAorICAgYGAnYXQnYGAsIGBgJ3d0J2BgLCBvciBgYCd4dCdgYCBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCdyYidgYC4KIAogICAgVGhlICpjb21wcmVzc2xldmVsKiBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZyb20gMCB0byA5LCBhcyBmb3IgdGhlCiAgICA6Y2xhc3M6YEd6aXBGaWxlYCBjb25zdHJ1Y3Rvci4KQEAgLTUzLDYgKzUzLDkgQEAKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yICpmaWxlbmFtZSogYmVpbmcgYSBmaWxlIG9iamVjdCwgc3VwcG9ydCBmb3IgdGV4dCBtb2RlLAogICAgICAgYW5kIHRoZSAqZW5jb2RpbmcqLCAqZXJyb3JzKiBhbmQgKm5ld2xpbmUqIGFyZ3VtZW50cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBgYCd4J2BgLCBgYCd4YidgYCBhbmQgYGAneHQnYGAgbW9kZXMuCisKIAogLi4gY2xhc3M6OiBHemlwRmlsZShmaWxlbmFtZT1Ob25lLCBtb2RlPU5vbmUsIGNvbXByZXNzbGV2ZWw9OSwgZmlsZW9iaj1Ob25lLCBtdGltZT1Ob25lKQogCkBAIC03Myw4ICs3Niw5IEBACiAgICBvcmlnaW5hbCBmaWxlbmFtZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGhlYWRlci4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgYW55IG9mIGBgJ3InYGAsIGBgJ3JiJ2BgLCBgYCdhJ2BgLCBgYCdhYidgYCwgYGAndydgYCwKLSAgIG9yIGBgJ3diJ2BgLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBkZWZhdWx0Ci0gICBpcyB0aGUgbW9kZSBvZiAqZmlsZW9iaiogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCisgICBgYCd3YidgYCwgYGAneCdgYCwgb3IgYGAneGInYGAsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaWxlIHdpbGwgYmUgcmVhZCBvcgorICAgd3JpdHRlbi4gIFRoZSBkZWZhdWx0IGlzIHRoZSBtb2RlIG9mICpmaWxlb2JqKiBpZiBkaXNjZXJuaWJsZTsgb3RoZXJ3aXNlLCB0aGUKKyAgIGRlZmF1bHQgaXMgYGAncmInYGAuCiAKICAgIE5vdGUgdGhhdCB0aGUgZmlsZSBpcyBhbHdheXMgb3BlbmVkIGluIGJpbmFyeSBtb2RlLiBUbyBvcGVuIGEgY29tcHJlc3NlZCBmaWxlCiAgICBpbiB0ZXh0IG1vZGUsIHVzZSA6ZnVuYzpgLm9wZW5gIChvciB3cmFwIHlvdXIgOmNsYXNzOmBHemlwRmlsZWAgd2l0aCBhbgpAQCAtMTMwLDYgKzEzNCw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgVGhlIDptZXRoOmBpby5CdWZmZXJlZElPQmFzZS5yZWFkMWAgbWV0aG9kIGlzIG5vdyBpbXBsZW1lbnRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBgYCd4J2BgIGFuZCBgYCd4YidgYCBtb2Rlcy4KKwogCiAuLiBmdW5jdGlvbjo6IGNvbXByZXNzKGRhdGEsIGNvbXByZXNzbGV2ZWw9OSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9oYXNobGliLnJzdAppbmRleCA0OWZlZGVjLi44ZjRjZDcwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9oYXNobGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9oYXNobGliLnJzdApAQCAtMzIsNiArMzIsMTIgQEAKICAgIFNvbWUgYWxnb3JpdGhtcyBoYXZlIGtub3duIGhhc2ggY29sbGlzaW9uIHdlYWtuZXNzZXMsIHJlZmVyIHRvIHRoZSAiU2VlCiAgICBhbHNvIiBzZWN0aW9uIGF0IHRoZSBlbmQuCiAKKworLi4gX2hhc2gtYWxnb3JpdGhtczoKKworSGFzaCBhbGdvcml0aG1zCistLS0tLS0tLS0tLS0tLS0KKwogVGhlcmUgaXMgb25lIGNvbnN0cnVjdG9yIG1ldGhvZCBuYW1lZCBmb3IgZWFjaCB0eXBlIG9mIDpkZm46YGhhc2hgLiAgQWxsIHJldHVybgogYSBoYXNoIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNpbXBsZSBpbnRlcmZhY2UuIEZvciBleGFtcGxlOiB1c2UgOmZ1bmM6YHNoYTFgIHRvCiBjcmVhdGUgYSBTSEExIGhhc2ggb2JqZWN0LiBZb3UgY2FuIG5vdyBmZWVkIHRoaXMgb2JqZWN0IHdpdGggOnRlcm06YGJ5dGVzLWxpa2UKQEAgLTUzLDkgKzU5LDkgQEAKIC4uIGluZGV4Ojogc2luZ2xlOiBPcGVuU1NMOyAodXNlIGluIG1vZHVsZSBoYXNobGliKQogCiBDb25zdHJ1Y3RvcnMgZm9yIGhhc2ggYWxnb3JpdGhtcyB0aGF0IGFyZSBhbHdheXMgcHJlc2VudCBpbiB0aGlzIG1vZHVsZSBhcmUKLTpmdW5jOmBtZDVgLCA6ZnVuYzpgc2hhMWAsIDpmdW5jOmBzaGEyMjRgLCA6ZnVuYzpgc2hhMjU2YCwgOmZ1bmM6YHNoYTM4NGAsIGFuZAotOmZ1bmM6YHNoYTUxMmAuICBBZGRpdGlvbmFsIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlIGRlcGVuZGluZyB1cG9uIHRoZQotT3BlblNTTCBsaWJyYXJ5IHRoYXQgUHl0aG9uIHVzZXMgb24geW91ciBwbGF0Zm9ybS4KKzpmdW5jOmBtZDVgLCA6ZnVuYzpgc2hhMWAsIDpmdW5jOmBzaGEyMjRgLCA6ZnVuYzpgc2hhMjU2YCwgOmZ1bmM6YHNoYTM4NGAsCithbmQgOmZ1bmM6YHNoYTUxMmAuIEFkZGl0aW9uYWwgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBhdmFpbGFibGUgZGVwZW5kaW5nIHVwb24KK3RoZSBPcGVuU1NMIGxpYnJhcnkgdGhhdCBQeXRob24gdXNlcyBvbiB5b3VyIHBsYXRmb3JtLgogCiBGb3IgZXhhbXBsZSwgdG8gb2J0YWluIHRoZSBkaWdlc3Qgb2YgdGhlIGJ5dGUgc3RyaW5nIGBgYidOb2JvZHkgaW5zcGVjdHMgdGhlCiBzcGFtbWlzaCByZXBldGl0aW9uJ2BgOjoKQEAgLTEyMiw2ICsxMjgsMTggQEAKIAogICAgVGhlIGludGVybmFsIGJsb2NrIHNpemUgb2YgdGhlIGhhc2ggYWxnb3JpdGhtIGluIGJ5dGVzLgogCitBIGhhc2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKKy4uIGF0dHJpYnV0ZTo6IGhhc2gubmFtZQorCisgICBUaGUgY2Fub25pY2FsIG5hbWUgb2YgdGhpcyBoYXNoLCBhbHdheXMgbG93ZXJjYXNlIGFuZCBhbHdheXMgc3VpdGFibGUgYXMgYQorICAgcGFyYW1ldGVyIHRvIDpmdW5jOmBuZXdgIHRvIGNyZWF0ZSBhbm90aGVyIGhhc2ggb2YgdGhpcyB0eXBlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG5hbWUgYXR0cmlidXRlIGhhcyBiZWVuIHByZXNlbnQgaW4gQ1B5dGhvbiBzaW5jZSBpdHMgaW5jZXB0aW9uLCBidXQKKyAgICAgIHVudGlsIFB5dGhvbiAzLjQgd2FzIG5vdCBmb3JtYWxseSBzcGVjaWZpZWQsIHNvIG1heSBub3QgZXhpc3Qgb24gc29tZQorICAgICAgcGxhdGZvcm1zLgorCiBBIGhhc2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKIApAQCAtMTU4LDYgKzE3Niw0NSBAQAogICAgY29tcHV0ZSB0aGUgZGlnZXN0cyBvZiBkYXRhIHNoYXJpbmcgYSBjb21tb24gaW5pdGlhbCBzdWJzdHJpbmcuCiAKIAorS2V5IERlcml2YXRpb24gRnVuY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0tleSBkZXJpdmF0aW9uIGFuZCBrZXkgc3RyZXRjaGluZyBhbGdvcml0aG1zIGFyZSBkZXNpZ25lZCBmb3Igc2VjdXJlIHBhc3N3b3JkCitoYXNoaW5nLiBOYWl2ZSBhbGdvcml0aG1zIHN1Y2ggYXMgYGBzaGExKHBhc3N3b3JkKWBgIGFyZSBub3QgcmVzaXN0YW50CithZ2FpbnN0IGJydXRlLWZvcmNlIGF0dGFja3MuIEEgZ29vZCBwYXNzd29yZCBoYXNoaW5nIGZ1bmN0aW9uIG11c3QgYmUgdHVuYWJsZSwKK3Nsb3cgYW5kIGluY2x1ZGUgYSBzYWx0LgorCisKKy4uIGZ1bmN0aW9uOjogcGJrZGYyX2htYWMobmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcywgZGtsZW49Tm9uZSkKKworICAgVGhlIGZ1bmN0aW9uIHByb3ZpZGVzIFBLQ1MjNSBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyLiBJdAorICAgdXNlcyBITUFDIGFzIHBzZXVkb3JhbmRvbSBmdW5jdGlvbi4KKworICAgVGhlIHN0cmluZyAqbmFtZSogaXMgdGhlIGRlc2lyZWQgbmFtZSBvZiB0aGUgaGFzaCBkaWdlc3QgYWxnb3JpdGhtIGZvcgorICAgSE1BQywgZS5nLiAnc2hhMScgb3IgJ3NoYTI1NicuICpwYXNzd29yZCogYW5kICpzYWx0KiBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgIGJ1ZmZlcnMgb2YgYnl0ZXMuIEFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIHNob3VsZCBsaW1pdCAqcGFzc3dvcmQqIHRvCisgICBhIHNlbnNpYmxlIHZhbHVlIChlLmcuIDEwMjQpLiAqc2FsdCogc2hvdWxkIGJlIGFib3V0IDE2IG9yIG1vcmUgYnl0ZXMgZnJvbQorICAgYSBwcm9wZXIgc291cmNlLCBlLmcuIDpmdW5jOmBvcy51cmFuZG9tYC4KKworICAgVGhlIG51bWJlciBvZiAqcm91bmRzKiBzaG91bGQgYmUgY2hvc2VuIGJhc2VkIG9uIHRoZSBoYXNoIGFsZ29yaXRobSBhbmQKKyAgIGNvbXB1dGluZyBwb3dlci4gQXMgb2YgMjAxMyBhIHZhbHVlIG9mIGF0IGxlYXN0IDEwMCwwMDAgcm91bmRzIG9mIFNIQS0yNTYKKyAgIGhhdmUgYmVlbiBzdWdnZXN0ZWQuCisKKyAgICpka2xlbiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgZGVyaXZlZCBrZXkuIElmICpka2xlbiogaXMgYGBOb25lYGAgdGhlbiB0aGUKKyAgIGRpZ2VzdCBzaXplIG9mIHRoZSBoYXNoIGFsZ29yaXRobSAqbmFtZSogaXMgdXNlZCwgZS5nLiA2NCBmb3IgU0hBLTUxMi4KKworICAgPj4+IGltcG9ydCBoYXNobGliLCBiaW5hc2NpaQorICAgPj4+IGRrID0gaGFzaGxpYi5wYmtkZjJfaG1hYygnc2hhMjU2JywgYidwYXNzd29yZCcsIGInc2FsdCcsIDEwMDAwMCkKKyAgID4+PiBiaW5hc2NpaS5oZXhsaWZ5KGRrKQorICAgYicwMzk0YTJlZGUzMzJjOWExM2ViODJlOWIyNDYzMTYwNGMzMWRmOTc4YjRlMmYwZmJkMmM1NDk5NDRmOWQ3OWE1JworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgLi4gbm90ZTo6IEEgZmFzdCBpbXBsZW1lbnRhdGlvbiBvZiAqcGJrZGYyX2htYWMqIGlzIGF2YWlsYWJsZSB3aXRoIE9wZW5TU0wuCisgICAgICBUaGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIHVzZXMgYW4gaW5saW5lIHZlcnNpb24gb2YgOm1vZDpgaG1hY2AuIEl0IGlzCisgICAgICBhYm91dCB0aHJlZSB0aW1lcyBzbG93ZXIgYW5kIGRvZXNuJ3QgcmVsZWFzZSB0aGUgR0lMLgorCisKIC4uIHNlZWFsc286OgogCiAgICBNb2R1bGUgOm1vZDpgaG1hY2AKQEAgLTE3MywzICsyMzAsNSBAQAogICAgICAgV2lraXBlZGlhIGFydGljbGUgd2l0aCBpbmZvcm1hdGlvbiBvbiB3aGljaCBhbGdvcml0aG1zIGhhdmUga25vd24gaXNzdWVzIGFuZAogICAgICAgd2hhdCB0aGF0IG1lYW5zIHJlZ2FyZGluZyB0aGVpciB1c2UuCiAKKyAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI4OTgudHh0CisgICAgICBQS0NTICM1OiBQYXNzd29yZC1CYXNlZCBDcnlwdG9ncmFwaHkgU3BlY2lmaWNhdGlvbiBWZXJzaW9uIDIuMApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaG1hYy5yc3QgYi9Eb2MvbGlicmFyeS9obWFjLnJzdAppbmRleCA5NTc1NjkzLi4yZTliMGIyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9obWFjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9obWFjLnJzdApAQCAtMTYsMjAgKzE2LDMzIEBACiAKIC4uIGZ1bmN0aW9uOjogbmV3KGtleSwgbXNnPU5vbmUsIGRpZ2VzdG1vZD1Ob25lKQogCi0gICBSZXR1cm4gYSBuZXcgaG1hYyBvYmplY3QuICAqa2V5KiBpcyBhIGJ5dGVzIG9iamVjdCBnaXZpbmcgdGhlIHNlY3JldCBrZXkuICBJZgotICAgKm1zZyogaXMgcHJlc2VudCwgdGhlIG1ldGhvZCBjYWxsIGBgdXBkYXRlKG1zZylgYCBpcyBtYWRlLiAgKmRpZ2VzdG1vZCogaXMKLSAgIHRoZSBkaWdlc3QgY29uc3RydWN0b3Igb3IgbW9kdWxlIGZvciB0aGUgSE1BQyBvYmplY3QgdG8gdXNlLiBJdCBkZWZhdWx0cyB0bwotICAgdGhlIDpkYXRhOmBoYXNobGliLm1kNWAgY29uc3RydWN0b3IuCisgICBSZXR1cm4gYSBuZXcgaG1hYyBvYmplY3QuICAqa2V5KiBpcyBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QgZ2l2aW5nIHRoZQorICAgc2VjcmV0IGtleS4gIElmICptc2cqIGlzIHByZXNlbnQsIHRoZSBtZXRob2QgY2FsbCBgYHVwZGF0ZShtc2cpYGAgaXMgbWFkZS4KKyAgICpkaWdlc3Rtb2QqIGlzIHRoZSBkaWdlc3QgbmFtZSwgZGlnZXN0IGNvbnN0cnVjdG9yIG9yIG1vZHVsZSBmb3IgdGhlIEhNQUMKKyAgIG9iamVjdCB0byB1c2UuIEl0IHN1cHBvcnRzIGFueSBuYW1lIHN1aXRhYmxlIHRvIDpmdW5jOmBoYXNobGliLm5ld2AgYW5kCisgICBkZWZhdWx0cyB0byB0aGUgOmRhdGE6YGhhc2hsaWIubWQ1YCBjb25zdHJ1Y3Rvci4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFBhcmFtZXRlciAqa2V5KiBjYW4gYmUgYSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0LiBQYXJhbWV0ZXIgKm1zZyogY2FuCisgICAgICBiZSBvZiBhbnkgdHlwZSBzdXBwb3J0ZWQgYnkgOm1vZDpgaGFzaGxpYmAuCisKKyAgICAgIFBhcmFtdGVyICpkaWdlc3Rtb2QqIGNhbiBiZSB0aGUgbmFtZSBvZiBhIGhhc2ggYWxnb3JpdGhtLgorCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBNRDUgYXMgaW1wbGljaXQgZGVmYXVsdCBkaWdlc3QgZm9yICpkaWdlc3Rtb2QqIGlzIGRlcHJlY2F0ZWQuCiAKIAogQW4gSE1BQyBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogLi4gbWV0aG9kOjogSE1BQy51cGRhdGUobXNnKQogCi0gICBVcGRhdGUgdGhlIGhtYWMgb2JqZWN0IHdpdGggdGhlIGJ5dGVzIG9iamVjdCAqbXNnKi4gIFJlcGVhdGVkIGNhbGxzIGFyZQotICAgZXF1aXZhbGVudCB0byBhIHNpbmdsZSBjYWxsIHdpdGggdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBhcmd1bWVudHM6CisgICBVcGRhdGUgdGhlIGhtYWMgb2JqZWN0IHdpdGggKm1zZyouICBSZXBlYXRlZCBjYWxscyBhcmUgZXF1aXZhbGVudCB0byBhCisgICBzaW5nbGUgY2FsbCB3aXRoIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFsbCB0aGUgYXJndW1lbnRzOgogICAgYGBtLnVwZGF0ZShhKTsgbS51cGRhdGUoYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgbS51cGRhdGUoYSArIGIpYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBQYXJhbWV0ZXIgKm1zZyogY2FuIGJlIG9mIGFueSB0eXBlIHN1cHBvcnRlZCBieSA6bW9kOmBoYXNobGliYC4KKwogCiAuLiBtZXRob2Q6OiBITUFDLmRpZ2VzdCgpCiAKQEAgLTY2LDYgKzc5LDI1IEBACiAgICBjb21wdXRlIHRoZSBkaWdlc3RzIG9mIHN0cmluZ3MgdGhhdCBzaGFyZSBhIGNvbW1vbiBpbml0aWFsIHN1YnN0cmluZy4KIAogCitBIGhhc2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKKy4uIGF0dHJpYnV0ZTo6IEhNQUMuZGlnZXN0X3NpemUKKworICAgVGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBITUFDIGRpZ2VzdCBpbiBieXRlcy4KKworLi4gYXR0cmlidXRlOjogSE1BQy5ibG9ja19zaXplCisKKyAgIFRoZSBpbnRlcm5hbCBibG9jayBzaXplIG9mIHRoZSBoYXNoIGFsZ29yaXRobSBpbiBieXRlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGF0dHJpYnV0ZTo6IEhNQUMubmFtZQorCisgICBUaGUgY2Fub25pY2FsIG5hbWUgb2YgdGhpcyBITUFDLCBhbHdheXMgbG93ZXJjYXNlLCBlLmcuIGBgaG1hYy1tZDVgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhpcyBtb2R1bGUgYWxzbyBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbjoKIAogLi4gZnVuY3Rpb246OiBjb21wYXJlX2RpZ2VzdChhLCBiKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHRtbC5lbnRpdGllcy5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdAppbmRleCAwYWFiYmFkLi4wOWIwYWJjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdApAQCAtMjAsNiArMjAsNyBAQAogICAgTm90ZSB0aGF0IHRoZSB0cmFpbGluZyBzZW1pY29sb24gaXMgaW5jbHVkZWQgaW4gdGhlIG5hbWUgKGUuZy4gYGAnZ3Q7J2BgKSwKICAgIGhvd2V2ZXIgc29tZSBvZiB0aGUgbmFtZXMgYXJlIGFjY2VwdGVkIGJ5IHRoZSBzdGFuZGFyZCBldmVuIHdpdGhvdXQgdGhlCiAgICBzZW1pY29sb246IGluIHRoaXMgY2FzZSB0aGUgbmFtZSBpcyBwcmVzZW50IHdpdGggYW5kIHdpdGhvdXQgdGhlIGBgJzsnYGAuCisgICBTZWUgYWxzbyA6ZnVuYzpgaHRtbC51bmVzY2FwZWAuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QKaW5kZXggZTQxNTRlZi4uNDRiN2Q2ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHRtbC5wYXJzZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdApAQCAtMTYsMTQgKzE2LDIxIEBACiBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgY2xhc3MgOmNsYXNzOmBIVE1MUGFyc2VyYCB3aGljaCBzZXJ2ZXMgYXMgdGhlIGJhc2lzIGZvcgogcGFyc2luZyB0ZXh0IGZpbGVzIGZvcm1hdHRlZCBpbiBIVE1MIChIeXBlclRleHQgTWFyay11cCBMYW5ndWFnZSkgYW5kIFhIVE1MLgogCi0uLiBjbGFzczo6IEhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlKQorLi4gY2xhc3M6OiBIVE1MUGFyc2VyKHN0cmljdD1GYWxzZSwgKiwgY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAotICAgQ3JlYXRlIGEgcGFyc2VyIGluc3RhbmNlLiAgSWYgKnN0cmljdCogaXMgYGBGYWxzZWBgICh0aGUgZGVmYXVsdCksIHRoZSBwYXJzZXIKLSAgIHdpbGwgYWNjZXB0IGFuZCBwYXJzZSBpbnZhbGlkIG1hcmt1cC4gIElmICpzdHJpY3QqIGlzIGBgVHJ1ZWBgIHRoZSBwYXJzZXIKLSAgIHdpbGwgcmFpc2UgYW4gOmV4Yzpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yYCBleGNlcHRpb24gaW5zdGVhZCBbI11fIHdoZW4KLSAgIGl0J3Mgbm90IGFibGUgdG8gcGFyc2UgdGhlIG1hcmt1cC4KLSAgIFRoZSB1c2Ugb2YgYGBzdHJpY3Q9VHJ1ZWBgIGlzIGRpc2NvdXJhZ2VkIGFuZCB0aGUgKnN0cmljdCogYXJndW1lbnQgaXMKLSAgIGRlcHJlY2F0ZWQuCisgICBDcmVhdGUgYSBwYXJzZXIgaW5zdGFuY2UuCisKKyAgIElmICpjb252ZXJ0X2NoYXJyZWZzKiBpcyBgYFRydWVgYCAoZGVmYXVsdDogYGBGYWxzZWBgKSwgYWxsIGNoYXJhY3RlcgorICAgcmVmZXJlbmNlcyAoZXhjZXB0IHRoZSBvbmVzIGluIGBgc2NyaXB0YGAvYGBzdHlsZWBgIGVsZW1lbnRzKSBhcmUKKyAgIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4KKyAgIFRoZSB1c2Ugb2YgYGBjb252ZXJ0X2NoYXJyZWZzPVRydWVgYCBpcyBlbmNvdXJhZ2VkIGFuZCB3aWxsIGJlY29tZQorICAgdGhlIGRlZmF1bHQgaW4gUHl0aG9uIDMuNS4KKworICAgSWYgKnN0cmljdCogaXMgYGBGYWxzZWBgICh0aGUgZGVmYXVsdCksIHRoZSBwYXJzZXIgd2lsbCBhY2NlcHQgYW5kIHBhcnNlCisgICBpbnZhbGlkIG1hcmt1cC4gIElmICpzdHJpY3QqIGlzIGBgVHJ1ZWBgIHRoZSBwYXJzZXIgd2lsbCByYWlzZSBhbgorICAgOmV4Yzpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yYCBleGNlcHRpb24gaW5zdGVhZCBbI11fIHdoZW4gaXQncyBub3QKKyAgIGFibGUgdG8gcGFyc2UgdGhlIG1hcmt1cC4gIFRoZSB1c2Ugb2YgYGBzdHJpY3Q9VHJ1ZWBgIGlzIGRpc2NvdXJhZ2VkIGFuZAorICAgdGhlICpzdHJpY3QqIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuCiAKICAgIEFuIDpjbGFzczpgLkhUTUxQYXJzZXJgIGluc3RhbmNlIGlzIGZlZCBIVE1MIGRhdGEgYW5kIGNhbGxzIGhhbmRsZXIgbWV0aG9kcwogICAgd2hlbiBzdGFydCB0YWdzLCBlbmQgdGFncywgdGV4dCwgY29tbWVudHMsIGFuZCBvdGhlciBtYXJrdXAgZWxlbWVudHMgYXJlCkBAIC0zNCwxMiArNDEsMTUgQEAKICAgIGhhbmRsZXIgZm9yIGVsZW1lbnRzIHdoaWNoIGFyZSBjbG9zZWQgaW1wbGljaXRseSBieSBjbG9zaW5nIGFuIG91dGVyIGVsZW1lbnQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCi0gICAgICAqc3RyaWN0KiBrZXl3b3JkIGFkZGVkLgorICAgICAgKnN0cmljdCogYXJndW1lbnQgYWRkZWQuCiAKICAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjUKICAgICAgIFRoZSAqc3RyaWN0KiBhcmd1bWVudCBhbmQgdGhlIHN0cmljdCBtb2RlIGhhdmUgYmVlbiBkZXByZWNhdGVkLgogICAgICAgVGhlIHBhcnNlciBpcyBub3cgYWJsZSB0byBhY2NlcHQgYW5kIHBhcnNlIGludmFsaWQgbWFya3VwIHRvby4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICpjb252ZXJ0X2NoYXJyZWZzKiBrZXl3b3JkIGFyZ3VtZW50IGFkZGVkLgorCiBBbiBleGNlcHRpb24gaXMgZGVmaW5lZCBhcyB3ZWxsOgogCiAKQEAgLTc0LDcgKzg0LDcgQEAKICAgICAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgICAgIHByaW50KCJFbmNvdW50ZXJlZCBzb21lIGRhdGEgIDoiLCBkYXRhKQogCi0gICBwYXJzZXIgPSBNeUhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlKQorICAgcGFyc2VyID0gTXlIVE1MUGFyc2VyKCkKICAgIHBhcnNlci5mZWVkKCc8aHRtbD48aGVhZD48dGl0bGU+VGVzdDwvdGl0bGU+PC9oZWFkPicKICAgICAgICAgICAgICAgICc8Ym9keT48aDE+UGFyc2UgbWUhPC9oMT48L2JvZHk+PC9odG1sPicpCiAKQEAgLTE4MSw3ICsxOTEsOCBAQAogCiAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcHJvY2VzcyBhIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2Ugb2YgdGhlIGZvcm0KICAgIGBgJm5hbWU7YGAgKGUuZy4gYGAmZ3Q7YGApLCB3aGVyZSAqbmFtZSogaXMgYSBnZW5lcmFsIGVudGl0eSByZWZlcmVuY2UKLSAgIChlLmcuIGBgJ2d0J2BgKS4KKyAgIChlLmcuIGBgJ2d0J2BgKS4gIFRoaXMgbWV0aG9kIGlzIG5ldmVyIGNhbGxlZCBpZiAqY29udmVydF9jaGFycmVmcyogaXMKKyAgIGBgVHJ1ZWBgLgogCiAKIC4uIG1ldGhvZDo6IEhUTUxQYXJzZXIuaGFuZGxlX2NoYXJyZWYobmFtZSkKQEAgLTE4OSw3ICsyMDAsOCBAQAogICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHByb2Nlc3MgZGVjaW1hbCBhbmQgaGV4YWRlY2ltYWwgbnVtZXJpYyBjaGFyYWN0ZXIKICAgIHJlZmVyZW5jZXMgb2YgdGhlIGZvcm0gYGAmI05OTjtgYCBhbmQgYGAmI3hOTk47YGAuICBGb3IgZXhhbXBsZSwgdGhlIGRlY2ltYWwKICAgIGVxdWl2YWxlbnQgZm9yIGBgJmd0O2BgIGlzIGBgJiM2MjtgYCwgd2hlcmVhcyB0aGUgaGV4YWRlY2ltYWwgaXMgYGAmI3gzRTtgYDsKLSAgIGluIHRoaXMgY2FzZSB0aGUgbWV0aG9kIHdpbGwgcmVjZWl2ZSBgYCc2MidgYCBvciBgYCd4M0UnYGAuCisgICBpbiB0aGlzIGNhc2UgdGhlIG1ldGhvZCB3aWxsIHJlY2VpdmUgYGAnNjInYGAgb3IgYGAneDNFJ2BgLiAgVGhpcyBtZXRob2QKKyAgIGlzIG5ldmVyIGNhbGxlZCBpZiAqY29udmVydF9jaGFycmVmcyogaXMgYGBUcnVlYGAuCiAKIAogLi4gbWV0aG9kOjogSFRNTFBhcnNlci5oYW5kbGVfY29tbWVudChkYXRhKQpAQCAtMjcyLDcgKzI4NCw3IEBACiAgICAgICAgZGVmIGhhbmRsZV9kZWNsKHNlbGYsIGRhdGEpOgogICAgICAgICAgICBwcmludCgiRGVjbCAgICAgOiIsIGRhdGEpCiAKLSAgIHBhcnNlciA9IE15SFRNTFBhcnNlcihzdHJpY3Q9RmFsc2UpCisgICBwYXJzZXIgPSBNeUhUTUxQYXJzZXIoKQogCiBQYXJzaW5nIGEgZG9jdHlwZTo6CiAKQEAgLTMyNCw3ICszMzYsOCBAQAogICAgTnVtIGVudCAgOiA+CiAKIEZlZWRpbmcgaW5jb21wbGV0ZSBjaHVua3MgdG8gOm1ldGg6YH5IVE1MUGFyc2VyLmZlZWRgIHdvcmtzLCBidXQKLTptZXRoOmB+SFRNTFBhcnNlci5oYW5kbGVfZGF0YWAgbWlnaHQgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlOjoKKzptZXRoOmB+SFRNTFBhcnNlci5oYW5kbGVfZGF0YWAgbWlnaHQgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCisodW5sZXNzICpjb252ZXJ0X2NoYXJyZWZzKiBpcyBzZXQgdG8gYGBUcnVlYGApOjoKIAogICAgPj4+IGZvciBjaHVuayBpbiBbJzxzcCcsICdhbj5idWZmJywgJ2VyZWQgJywgJ3RleHQ8L3MnLCAncGFuPiddOgogICAgLi4uICAgICBwYXJzZXIuZmVlZChjaHVuaykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0bWwucnN0IGIvRG9jL2xpYnJhcnkvaHRtbC5yc3QKaW5kZXggMTEwN2NhOS4uZDA3MDZiYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHRtbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHRtbC5yc3QKQEAgLTIwLDYgKzIwLDE3IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisKKy4uIGZ1bmN0aW9uOjogdW5lc2NhcGUocykKKworICAgQ29udmVydCBhbGwgbmFtZWQgYW5kIG51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZXMgKGUuZy4gYGAmZ3Q7YGAsCisgICBgYCYjNjI7YGAsIGBgJngzZTtgYCkgaW4gdGhlIHN0cmluZyAqcyogdG8gdGhlIGNvcnJlc3BvbmRpbmcgdW5pY29kZQorICAgY2hhcmFjdGVycy4gIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgcnVsZXMgZGVmaW5lZCBieSB0aGUgSFRNTCA1IHN0YW5kYXJkCisgICBmb3IgYm90aCB2YWxpZCBhbmQgaW52YWxpZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcywgYW5kIHRoZSA6ZGF0YTpgbGlzdCBvZgorICAgSFRNTCA1IG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIDxodG1sLmVudGl0aWVzLmh0bWw1PmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAtLS0tLS0tLS0tLS0tLQogCiBTdWJtb2R1bGVzIGluIHRoZSBgYGh0bWxgYCBwYWNrYWdlIGFyZToKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdCBiL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdAppbmRleCA3ODNhNTk2Li5kNGNkZmQzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odHRwLmNsaWVudC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0CkBAIC0yNyw3ICsyNyw3IEBACiBUaGUgbW9kdWxlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKIAogCi0uLiBjbGFzczo6IEhUVFBDb25uZWN0aW9uKGhvc3QsIHBvcnQ9Tm9uZVssIHN0cmljdF1bLCB0aW1lb3V0XSwgXAorLi4gY2xhc3M6OiBIVFRQQ29ubmVjdGlvbihob3N0LCBwb3J0PU5vbmVbLCB0aW1lb3V0XSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lKQogCiAgICBBbiA6Y2xhc3M6YEhUVFBDb25uZWN0aW9uYCBpbnN0YW5jZSByZXByZXNlbnRzIG9uZSB0cmFuc2FjdGlvbiB3aXRoIGFuIEhUVFAKQEAgLTUxLDEzICs1MSwxMyBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICpzb3VyY2VfYWRkcmVzcyogd2FzIGFkZGVkLgogCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjIgMy40Ci0gICAgICBUaGUgKnN0cmljdCogcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQuICBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIKLSAgICAgIGFyZSBub3Qgc3VwcG9ydGVkIGFueW1vcmUuCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlICAqc3RyaWN0KiBwYXJhbWV0ZXIgd2FzIHJlbW92ZWQuIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIiBhcmUKKyAgICAgIG5vdCBsb25nZXIgc3VwcG9ydGVkLgogCiAKIC4uIGNsYXNzOjogSFRUUFNDb25uZWN0aW9uKGhvc3QsIHBvcnQ9Tm9uZSwga2V5X2ZpbGU9Tm9uZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9maWxlPU5vbmVbLCBzdHJpY3RdWywgdGltZW91dF0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfZmlsZT1Ob25lWywgdGltZW91dF0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUsICosIGNvbnRleHQ9Tm9uZSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9Tm9uZSkKIApAQCAtODksMTkgKzg5LDE5IEBACiAgICAgICBUaGlzIGNsYXNzIG5vdyBzdXBwb3J0cyBIVFRQUyB2aXJ0dWFsIGhvc3RzIGlmIHBvc3NpYmxlICh0aGF0IGlzLAogICAgICAgaWYgOmRhdGE6YHNzbC5IQVNfU05JYCBpcyB0cnVlKS4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgd2FzIHJlbW92ZWQuIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIiBhcmUKKyAgICAgIG5vIGxvbmdlciBzdXBwb3J0ZWQuCiAKIAotLi4gY2xhc3M6OiBIVFRQUmVzcG9uc2Uoc29jaywgZGVidWdsZXZlbD0wWywgc3RyaWN0XSwgbWV0aG9kPU5vbmUsIHVybD1Ob25lKQorLi4gY2xhc3M6OiBIVFRQUmVzcG9uc2Uoc29jaywgZGVidWdsZXZlbD0wLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpCiAKICAgIENsYXNzIHdob3NlIGluc3RhbmNlcyBhcmUgcmV0dXJuZWQgdXBvbiBzdWNjZXNzZnVsIGNvbm5lY3Rpb24uICBOb3QKICAgIGluc3RhbnRpYXRlZCBkaXJlY3RseSBieSB1c2VyLgogCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjIgMy40Ci0gICAgICBUaGUgKnN0cmljdCogcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQuICBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIKLSAgICAgIGFyZSBub3Qgc3VwcG9ydGVkIGFueW1vcmUuCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciB3YXMgcmVtb3ZlZC4gSFRUUCAwLjkgc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiIGFyZQorICAgICAgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KIAogCiBUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMgYXJlIHJhaXNlZCBhcyBhcHByb3ByaWF0ZToKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0dHAuc2VydmVyLnJzdCBiL0RvYy9saWJyYXJ5L2h0dHAuc2VydmVyLnJzdAppbmRleCA1YWViNzE5Li4wZjdjOGIzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0CkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgIEhUVFAgZXJyb3IgY29kZSB2YWx1ZS4gKm1lc3NhZ2UqIHNob3VsZCBiZSBhIHN0cmluZyBjb250YWluaW5nIGEKICAgICAgIChkZXRhaWxlZCkgZXJyb3IgbWVzc2FnZSBvZiB3aGF0IG9jY3VycmVkLCBhbmQgKmV4cGxhaW4qIHNob3VsZCBiZSBhbgogICAgICAgZXhwbGFuYXRpb24gb2YgdGhlIGVycm9yIGNvZGUgbnVtYmVyLiBEZWZhdWx0ICptZXNzYWdlKiBhbmQgKmV4cGxhaW4qCi0gICAgICB2YWx1ZXMgY2FuIGZvdW5kIGluIHRoZSAqcmVzcG9uc2VzKiBjbGFzcyB2YXJpYWJsZS4KKyAgICAgIHZhbHVlcyBjYW4gZm91bmQgaW4gdGhlIDphdHRyOmByZXNwb25zZXNgIGNsYXNzIHZhcmlhYmxlLgogCiAgICAuLiBhdHRyaWJ1dGU6OiBlcnJvcl9jb250ZW50X3R5cGUKIApAQCAtMTcwLDEyICsxNzAsMjIgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKLSAgIC4uIG1ldGhvZDo6IHNlbmRfZXJyb3IoY29kZSwgbWVzc2FnZT1Ob25lKQorICAgLi4gbWV0aG9kOjogc2VuZF9lcnJvcihjb2RlLCBtZXNzYWdlPU5vbmUsIGV4cGxhaW49Tm9uZSkKIAogICAgICAgU2VuZHMgYW5kIGxvZ3MgYSBjb21wbGV0ZSBlcnJvciByZXBseSB0byB0aGUgY2xpZW50LiBUaGUgbnVtZXJpYyAqY29kZSoKLSAgICAgIHNwZWNpZmllcyB0aGUgSFRUUCBlcnJvciBjb2RlLCB3aXRoICptZXNzYWdlKiBhcyBvcHRpb25hbCwgbW9yZSBzcGVjaWZpYyB0ZXh0LiBBCi0gICAgICBjb21wbGV0ZSBzZXQgb2YgaGVhZGVycyBpcyBzZW50LCBmb2xsb3dlZCBieSB0ZXh0IGNvbXBvc2VkIHVzaW5nIHRoZQotICAgICAgOmF0dHI6YGVycm9yX21lc3NhZ2VfZm9ybWF0YCBjbGFzcyB2YXJpYWJsZS4KKyAgICAgIHNwZWNpZmllcyB0aGUgSFRUUCBlcnJvciBjb2RlLCB3aXRoICptZXNzYWdlKiBhcyBhbiBvcHRpb25hbCwgc2hvcnQsIGh1bWFuCisgICAgICByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IuICBUaGUgKmV4cGxhaW4qIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvCisgICAgICBwcm92aWRlIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yOyBpdCB3aWxsIGJlIGZvcm1hdHRlZAorICAgICAgdXNpbmcgdGhlIDphdHRyOmBlcnJvcl9tZXNzYWdlX2Zvcm1hdGAgY2xhc3MgdmFyaWFibGUgYW5kIGVtaXR0ZWQsIGFmdGVyCisgICAgICBhIGNvbXBsZXRlIHNldCBvZiBoZWFkZXJzLCBhcyB0aGUgcmVzcG9uc2UgYm9keS4gIFRoZSA6YXR0cjpgcmVzcG9uc2VzYAorICAgICAgY2xhc3MgdmFyaWFibGUgaG9sZHMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciAqbWVzc2FnZSogYW5kICpleHBsYWluKiB0aGF0CisgICAgICB3aWxsIGJlIHVzZWQgaWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQ7IGZvciB1bmtub3duIGNvZGVzIHRoZSBkZWZhdWx0IHZhbHVlCisgICAgICBmb3IgYm90aCBpcyB0aGUgc3RyaW5nIGBgPz8/YGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBUaGUgZXJyb3IgcmVzcG9uc2UgaW5jbHVkZXMgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIuCisgICAgICAgICBBZGRlZCB0aGUgKmV4cGxhaW4qIGFyZ3VtZW50LgorCiAKICAgIC4uIG1ldGhvZDo6IHNlbmRfcmVzcG9uc2UoY29kZSwgbWVzc2FnZT1Ob25lKQogCkBAIC0zNjEsNiArMzcxLDE1IEBACiAKICAgICAgICAgcHl0aG9uIC1tIGh0dHAuc2VydmVyIDgwMDAKIAorQnkgZGVmYXVsdCwgc2VydmVyIGJpbmRzIGl0c2VsZiB0byBhbGwgaW50ZXJmYWNlcy4gVG8gcmVzdHJpY3QgaXQgdG8gYmluZCB0byBhCitwYXJ0aWN1bGFyIGludGVyZmFjZSBvbmx5LCBgYC0tYmluZCBBRERSRVNTYGAgYXJndW1lbnQgY2FuIGJlIHVzZWQuIEZvciBlLmcsIHRvCityZXN0cmljdCB0aGUgc2VydmVyIHRvIGJpbmQgb25seSB0byBsb2NhbGhvc3QuIDo6CisKKyAgICAgICAgcHl0aG9uIC1tIGh0dHAuc2VydmVyIDgwMDAgLS1iaW5kIDEyNy4wLjAuMQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICBgYC0tYmluZGBgIGFyZ3VtZW50IHdhcyBpbnRyb2R1Y2VkLgorCiAKIC4uIGNsYXNzOjogQ0dJSFRUUFJlcXVlc3RIYW5kbGVyKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzLCBzZXJ2ZXIpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2lkbGUucnN0IGIvRG9jL2xpYnJhcnkvaWRsZS5yc3QKaW5kZXggMzZkNzhiMC4uMjcxOGNlZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaWRsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaWRsZS5yc3QKQEAgLTE2LDcwICsxNiw4MiBAQAogCiAqIGNvZGVkIGluIDEwMCUgcHVyZSBQeXRob24sIHVzaW5nIHRoZSA6bW9kOmB0a2ludGVyYCBHVUkgdG9vbGtpdAogCi0qIGNyb3NzLXBsYXRmb3JtOiB3b3JrcyBvbiBXaW5kb3dzIGFuZCBVbml4CisqIGNyb3NzLXBsYXRmb3JtOiB3b3JrcyBvbiBXaW5kb3dzLCBVbml4LCBhbmQgTWFjIE9TIFgKIAotKiBtdWx0aS13aW5kb3cgdGV4dCBlZGl0b3Igd2l0aCBtdWx0aXBsZSB1bmRvLCBQeXRob24gY29sb3JpemluZyBhbmQgbWFueSBvdGhlcgotICBmZWF0dXJlcywgZS5nLiBzbWFydCBpbmRlbnQgYW5kIGNhbGwgdGlwcworKiBtdWx0aS13aW5kb3cgdGV4dCBlZGl0b3Igd2l0aCBtdWx0aXBsZSB1bmRvLCBQeXRob24gY29sb3JpemluZywKKyAgc21hcnQgaW5kZW50LCBjYWxsIHRpcHMsIGFuZCBtYW55IG90aGVyIGZlYXR1cmVzCiAKICogUHl0aG9uIHNoZWxsIHdpbmRvdyAoYS5rLmEuIGludGVyYWN0aXZlIGludGVycHJldGVyKQogCi0qIGRlYnVnZ2VyIChub3QgY29tcGxldGUsIGJ1dCB5b3UgY2FuIHNldCBicmVha3BvaW50cywgdmlldyAgYW5kIHN0ZXApCisqIGRlYnVnZ2VyIChub3QgY29tcGxldGUsIGJ1dCB5b3UgY2FuIHNldCBicmVha3BvaW50cywgdmlldyBhbmQgc3RlcCkKIAogCiBNZW51cwogLS0tLS0KIAorSURMRSBoYXMgdHdvIHdpbmRvdyB0eXBlcywgdGhlIFNoZWxsIHdpbmRvdyBhbmQgdGhlIEVkaXRvciB3aW5kb3cuIEl0IGlzCitwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGVkaXRvciB3aW5kb3dzIHNpbXVsdGFuZW91c2x5LiBJRExFJ3MKK21lbnVzIGR5bmFtaWNhbGx5IGNoYW5nZSBiYXNlZCBvbiB3aGljaCB3aW5kb3cgaXMgY3VycmVudGx5IHNlbGVjdGVkLiBFYWNoIG1lbnUKK2RvY3VtZW50ZWQgYmVsb3cgaW5kaWNhdGVzIHdoaWNoIHdpbmRvdyB0eXBlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gQ2xpY2sgb24KK3RoZSBkb3R0ZWQgbGluZSBhdCB0aGUgdG9wIG9mIGEgbWVudSB0byAidGVhciBpdCBvZmYiOiBhIHNlcGFyYXRlIHdpbmRvdworY29udGFpbmluZyB0aGUgbWVudSBpcyBjcmVhdGVkIChmb3IgVW5peCBhbmQgV2luZG93cyBvbmx5KS4KIAotRmlsZSBtZW51Ci1eXl5eXl5eXl4KK0ZpbGUgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogTmV3IGZpbGUKLSAgIGNyZWF0ZSBhIG5ldyBmaWxlIGVkaXRpbmcgd2luZG93CisgICBDcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdwogCiBPcGVuLi4uCi0gICBvcGVuIGFuIGV4aXN0aW5nIGZpbGUKKyAgIE9wZW4gYW4gZXhpc3RpbmcgZmlsZQogCiBPcGVuIG1vZHVsZS4uLgotICAgb3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQorICAgT3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQorCitSZWNlbnQgRmlsZXMKKyAgIE9wZW4gYSBsaXN0IG9mIHJlY2VudCBmaWxlcwogCiBDbGFzcyBicm93c2VyCi0gICBzaG93IGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gY3VycmVudCBmaWxlCisgICBTaG93IGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gY3VycmVudCBmaWxlCiAKIFBhdGggYnJvd3NlcgotICAgc2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcyBhbmQgbWV0aG9kcworICAgU2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcyBhbmQgbWV0aG9kcwogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IENsYXNzIGJyb3dzZXIKICAgIHNpbmdsZTogUGF0aCBicm93c2VyCiAKIFNhdmUKLSAgIHNhdmUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSAodW5zYXZlZCB3aW5kb3dzIGhhdmUgYSBcKiBiZWZvcmUgYW5kCi0gICBhZnRlciB0aGUgd2luZG93IHRpdGxlKQorICAgU2F2ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgYXNzb2NpYXRlZCBmaWxlICh1bnNhdmVkIHdpbmRvd3MgaGF2ZSBhCisgICBcKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSB3aW5kb3cgdGl0bGUpCiAKIFNhdmUgQXMuLi4KLSAgIHNhdmUgY3VycmVudCB3aW5kb3cgdG8gbmV3IGZpbGUsIHdoaWNoIGJlY29tZXMgdGhlIGFzc29jaWF0ZWQgZmlsZQorICAgU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcyB0aGUgYXNzb2NpYXRlZCBmaWxlCiAKIFNhdmUgQ29weSBBcy4uLgotICAgc2F2ZSBjdXJyZW50IHdpbmRvdyB0byBkaWZmZXJlbnQgZmlsZSB3aXRob3V0IGNoYW5naW5nIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gZGlmZmVyZW50IGZpbGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCisKK1ByaW50IFdpbmRvdworICAgUHJpbnQgdGhlIGN1cnJlbnQgd2luZG93CiAKIENsb3NlCi0gICBjbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCiAKIEV4aXQKLSAgIGNsb3NlIGFsbCB3aW5kb3dzIGFuZCBxdWl0IElETEUgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQorICAgQ2xvc2UgYWxsIHdpbmRvd3MgYW5kIHF1aXQgSURMRSAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCiAKIAotRWRpdCBtZW51Ci1eXl5eXl5eXl4KK0VkaXQgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogVW5kbwotICAgVW5kbyBsYXN0IGNoYW5nZSB0byBjdXJyZW50IHdpbmRvdyAobWF4IDEwMDAgY2hhbmdlcykKKyAgIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cgKGEgbWF4aW11bSBvZiAxMDAwIGNoYW5nZXMgbWF5IGJlIHVuZG9uZSkKIAogUmVkbwogICAgUmVkbyBsYXN0IHVuZG9uZSBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKIAogQ3V0Ci0gICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZDsgdGhlbiBkZWxldGUgc2VsZWN0aW9uCisgICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZDsgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgogCiBDb3B5CiAgICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZApAQCAtMTA4LDExICsxMjAsMzAgQEAKIEdvIHRvIGxpbmUKICAgIEFzayBmb3IgYSBsaW5lIG51bWJlciBhbmQgc2hvdyB0aGF0IGxpbmUKIAorRXhwYW5kIHdvcmQKKyAgIEV4cGFuZCB0aGUgd29yZCB5b3UgaGF2ZSB0eXBlZCB0byBtYXRjaCBhbm90aGVyIHdvcmQgaW4gdGhlIHNhbWUgYnVmZmVyOworICAgcmVwZWF0IHRvIGdldCBhIGRpZmZlcmVudCBleHBhbnNpb24KKworU2hvdyBjYWxsIHRpcAorICAgQWZ0ZXIgYW4gdW5jbG9zZWQgcGFyZW50aGVzaXMgZm9yIGEgZnVuY3Rpb24sIG9wZW4gYSBzbWFsbCB3aW5kb3cgd2l0aAorICAgZnVuY3Rpb24gcGFyYW1ldGVyIGhpbnRzCisKK1Nob3cgc3Vycm91bmRpbmcgcGFyZW5zCisgICBIaWdobGlnaHQgdGhlIHN1cnJvdW5kaW5nIHBhcmVudGhlc2lzCisKK1Nob3cgQ29tcGxldGlvbnMKKyAgIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcyBhbmQgYXR0cmlidXRlcy4gU2VlCisgICBDb21wbGV0aW9ucyBiZWxvdy4KKworCitGb3JtYXQgbWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKwogSW5kZW50IHJlZ2lvbgotICAgU2hpZnQgc2VsZWN0ZWQgbGluZXMgcmlnaHQgNCBzcGFjZXMKKyAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IGJ5IHRoZSBpbmRlbnQgd2lkdGggKGRlZmF1bHQgNCBzcGFjZXMpCiAKIERlZGVudCByZWdpb24KLSAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgNCBzcGFjZXMKKyAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgYnkgdGhlIGluZGVudCB3aWR0aCAoZGVmYXVsdCA0IHNwYWNlcykKIAogQ29tbWVudCBvdXQgcmVnaW9uCiAgICBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKQEAgLTEyMSw2NyArMTUyLDEyMSBAQAogICAgUmVtb3ZlIGxlYWRpbmcgIyBvciAjIyBmcm9tIHNlbGVjdGVkIGxpbmVzCiAKIFRhYmlmeSByZWdpb24KLSAgIFR1cm5zICpsZWFkaW5nKiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicworICAgVHVybnMgKmxlYWRpbmcqIHN0cmV0Y2hlcyBvZiBzcGFjZXMgaW50byB0YWJzLiAoTm90ZTogV2UgcmVjb21tZW5kIHVzaW5nCisgICA0IHNwYWNlIGJsb2NrcyB0byBpbmRlbnQgUHl0aG9uIGNvZGUuKQogCiBVbnRhYmlmeSByZWdpb24KLSAgIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSByaWdodCBudW1iZXIgb2Ygc3BhY2VzCisgICBUdXJuICphbGwqIHRhYnMgaW50byB0aGUgY29ycmVjdCBudW1iZXIgb2Ygc3BhY2VzCiAKLUV4cGFuZCB3b3JkCi0gICBFeHBhbmQgdGhlIHdvcmQgeW91IGhhdmUgdHlwZWQgdG8gbWF0Y2ggYW5vdGhlciB3b3JkIGluIHRoZSBzYW1lIGJ1ZmZlcjsgcmVwZWF0Ci0gICB0byBnZXQgYSBkaWZmZXJlbnQgZXhwYW5zaW9uCitUb2dnbGUgdGFicworICAgT3BlbiBhIGRpYWxvZyB0byBzd2l0Y2ggYmV0d2VlbiBpbmRlbnRpbmcgd2l0aCBzcGFjZXMgYW5kIHRhYnMuCisKK05ldyBJbmRlbnQgV2lkdGgKKyAgIE9wZW4gYSBkaWFsb2cgdG8gY2hhbmdlIGluZGVudCB3aWR0aC4gVGhlIGFjY2VwdGVkIGRlZmF1bHQgYnkgdGhlIFB5dGhvbgorICAgY29tbXVuaXR5IGlzIDQgc3BhY2VzLgogCiBGb3JtYXQgUGFyYWdyYXBoCi0gICBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZCBwYXJhZ3JhcGgKKyAgIFJlZm9ybWF0IHRoZSBjdXJyZW50IGJsYW5rLWxpbmUtc2VwYXJhdGVkIHBhcmFncmFwaC4gQWxsIGxpbmVzIGluIHRoZQorICAgcGFyYWdyYXBoIHdpbGwgYmUgZm9ybWF0dGVkIHRvIGxlc3MgdGhhbiA4MCBjb2x1bW5zLgogCi1JbXBvcnQgbW9kdWxlCi0gICBJbXBvcnQgb3IgcmVsb2FkIHRoZSBjdXJyZW50IG1vZHVsZQotCi1SdW4gc2NyaXB0Ci0gICBFeGVjdXRlIHRoZSBjdXJyZW50IGZpbGUgaW4gdGhlIF9fbWFpbl9fIG5hbWVzcGFjZQorU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZQorICAgUmVtb3ZlcyBhbnkgc3BhY2UgY2hhcmFjdGVycyBhZnRlciB0aGUgZW5kIG9mIHRoZSBsYXN0IG5vbi1zcGFjZSBjaGFyYWN0ZXIKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBJbXBvcnQgbW9kdWxlCiAgICBzaW5nbGU6IFJ1biBzY3JpcHQKIAogCi1XaW5kb3dzIG1lbnUKLV5eXl5eXl5eXl5eXgorUnVuIG1lbnUgKEVkaXRvciB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVpvb20gSGVpZ2h0Ci0gICB0b2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBub3JtYWwgc2l6ZSAoMjR4ODApIGFuZCBtYXhpbXVtIGhlaWdodC4KK1B5dGhvbiBTaGVsbAorICAgT3BlbiBvciB3YWtlIHVwIHRoZSBQeXRob24gU2hlbGwgd2luZG93CiAKLVRoZSByZXN0IG9mIHRoaXMgbWVudSBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIG9wZW4gd2luZG93czsgc2VsZWN0IG9uZSB0byBicmluZwotaXQgdG8gdGhlIGZvcmVncm91bmQgKGRlaWNvbmlmeWluZyBpdCBpZiBuZWNlc3NhcnkpLgorQ2hlY2sgbW9kdWxlCisgICBDaGVjayB0aGUgc3ludGF4IG9mIHRoZSBtb2R1bGUgY3VycmVudGx5IG9wZW4gaW4gdGhlIEVkaXRvciB3aW5kb3cuIElmIHRoZQorICAgbW9kdWxlIGhhcyBub3QgYmVlbiBzYXZlZCBJRExFIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIHNhdmUgdGhlIGNvZGUuCiAKK1J1biBtb2R1bGUKKyAgIFJlc3RhcnQgdGhlIHNoZWxsIHRvIGNsZWFuIHRoZSBlbnZpcm9ubWVudCwgdGhlbiBleGVjdXRlIHRoZSBjdXJyZW50bHkKKyAgIG9wZW4gbW9kdWxlLiAgSWYgdGhlIG1vZHVsZSBoYXMgbm90IGJlZW4gc2F2ZWQgSURMRSB3aWxsIHByb21wdCB0aGUgdXNlcgorICAgdG8gc2F2ZSB0aGUgY29kZS4KIAotRGVidWcgbWVudQotXl5eXl5eXl5eXgorU2hlbGwgbWVudSAoU2hlbGwgd2luZG93IG9ubHkpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotKiBpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBvbmx5CitWaWV3IExhc3QgUmVzdGFydAorICBTY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCBTaGVsbCByZXN0YXJ0CisKK1Jlc3RhcnQgU2hlbGwKKyAgUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50CisKK0RlYnVnIG1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIEdvIHRvIGZpbGUvbGluZQogICAgTG9vayBhcm91bmQgdGhlIGluc2VydCBwb2ludCBmb3IgYSBmaWxlbmFtZSBhbmQgbGluZSBudW1iZXIsIG9wZW4gdGhlIGZpbGUsCiAgICBhbmQgc2hvdyB0aGUgbGluZS4gIFVzZWZ1bCB0byB2aWV3IHRoZSBzb3VyY2UgbGluZXMgcmVmZXJlbmNlZCBpbiBhbgotICAgZXhjZXB0aW9uIHRyYWNlYmFjay4KKyAgIGV4Y2VwdGlvbiB0cmFjZWJhY2suIEF2YWlsYWJsZSBpbiB0aGUgY29udGV4dCBtZW51IG9mIHRoZSBTaGVsbCB3aW5kb3cuCiAKLURlYnVnZ2VyCi0gICBSdW4gY29tbWFuZHMgaW4gdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlci4KK0RlYnVnZ2VyICh0b2dnbGUpCisgICBUaGlzIGZlYXR1cmUgaXMgbm90IGNvbXBsZXRlIGFuZCBjb25zaWRlcmVkIGV4cGVyaW1lbnRhbC4gUnVuIGNvbW1hbmRzIGluCisgICB0aGUgc2hlbGwgdW5kZXIgdGhlIGRlYnVnZ2VyCiAKIFN0YWNrIHZpZXdlcgotICAgU2hvdyB0aGUgc3RhY2sgdHJhY2ViYWNrIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbi4KKyAgIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24KIAogQXV0by1vcGVuIFN0YWNrIFZpZXdlcgotICAgT3BlbiBzdGFjayB2aWV3ZXIgb24gdHJhY2ViYWNrLgorICAgVG9nZ2xlIGF1dG9tYXRpY2FsbHkgb3BlbmluZyB0aGUgc3RhY2sgdmlld2VyIG9uIHVuaGFuZGxlZCBleGNlcHRpb24KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBzdGFjayB2aWV3ZXIKICAgIHNpbmdsZTogZGVidWdnZXIKIAorT3B0aW9ucyBtZW51IChTaGVsbCBhbmQgRWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1FZGl0IGNvbnRleHQgbWVudQotXl5eXl5eXl5eXl5eXl5eXl4KK0NvbmZpZ3VyZSBJRExFCisgICBPcGVuIGEgY29uZmlndXJhdGlvbiBkaWFsb2cuICBGb250cywgaW5kZW50YXRpb24sIGtleWJpbmRpbmdzLCBhbmQgY29sb3IKKyAgIHRoZW1lcyBtYXkgYmUgYWx0ZXJlZC4gIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIGFkZGl0aW9uYWwKKyAgIGhlbHAgc291cmNlcyBjYW4gYmUgc3BlY2lmaWVkLgogCi0qIFJpZ2h0LWNsaWNrIGluIEVkaXQgd2luZG93IChDb250cm9sLWNsaWNrIG9uIE9TIFgpCitDb2RlIENvbnRleHQgKHRvZ2dsZSkoRWRpdG9yIFdpbmRvdyBvbmx5KQorICAgT3BlbiBhIHBhbmUgYXQgdGhlIHRvcCBvZiB0aGUgZWRpdCB3aW5kb3cgd2hpY2ggc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQKKyAgIG9mIHRoZSBzZWN0aW9uIG9mIGNvZGUgd2hpY2ggaXMgc2Nyb2xsaW5nIG9mZiB0aGUgdG9wIG9mIHRoZSB3aW5kb3cuCisKK1dpbmRvd3MgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworWm9vbSBIZWlnaHQKKyAgIFRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIG5vcm1hbCBzaXplICg0MHg4MCBpbml0aWFsIHNldHRpbmcpIGFuZCBtYXhpbXVtCisgICBoZWlnaHQuIFRoZSBpbml0aWFsIHNpemUgaXMgaW4gdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZyB1bmRlciB0aGUgZ2VuZXJhbAorICAgdGFiLgorCitUaGUgcmVzdCBvZiB0aGlzIG1lbnUgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBvcGVuIHdpbmRvd3M7IHNlbGVjdCBvbmUgdG8gYnJpbmcKK2l0IHRvIHRoZSBmb3JlZ3JvdW5kIChkZWljb25pZnlpbmcgaXQgaWYgbmVjZXNzYXJ5KS4KKworSGVscCBtZW51IChTaGVsbCBhbmQgRWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitBYm91dCBJRExFCisgICBWZXJzaW9uLCBjb3B5cmlnaHQsIGxpY2Vuc2UsIGNyZWRpdHMKKworSURMRSBIZWxwCisgICBEaXNwbGF5IGEgaGVscCBmaWxlIGZvciBJRExFIGRldGFpbGluZyB0aGUgbWVudSBvcHRpb25zLCBiYXNpYyBlZGl0aW5nIGFuZAorICAgbmF2aWdhdGlvbiwgYW5kIG90aGVyIHRpcHMuCisKK1B5dGhvbiBEb2NzCisgICBBY2Nlc3MgbG9jYWwgUHl0aG9uIGRvY3VtZW50YXRpb24sIGlmIGluc3RhbGxlZC4gT3Igd2lsbCBzdGFydCBhIHdlYiBicm93c2VyCisgICBhbmQgb3BlbiBkb2NzLnB5dGhvbi5vcmcgc2hvd2luZyB0aGUgbGF0ZXN0IFB5dGhvbiBkb2N1bWVudGF0aW9uLgorCitBZGRpdGlvbmFsIGhlbHAgc291cmNlcyBtYXkgYmUgYWRkZWQgaGVyZSB3aXRoIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cgdW5kZXIKK3RoZSBHZW5lcmFsIHRhYi4KKworRWRpdG9yIFdpbmRvdyBjb250ZXh0IG1lbnUKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKyogUmlnaHQtY2xpY2sgaW4gRWRpdG9yIHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKQogCiBDdXQKICAgIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkOyB0aGVuIGRlbGV0ZSBzZWxlY3Rpb24KQEAgLTIwNyw4ICsyOTIsOCBAQAogICAgc2luZ2xlOiBicmVha3BvaW50cwogCiAKLVNoZWxsIGNvbnRleHQgbWVudQotXl5eXl5eXl5eXl5eXl5eXl5eCitTaGVsbCBXaW5kb3cgY29udGV4dCBtZW51CiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKICogUmlnaHQtY2xpY2sgaW4gUHl0aG9uIFNoZWxsIHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKQogCkBAIC0yMjUsMTkgKzMxMCw0NCBAQAogICAgU2FtZSBhcyBpbiBEZWJ1ZyBtZW51LgogCiAKLUJhc2ljIGVkaXRpbmcgYW5kIG5hdmlnYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0VkaXRpbmcgYW5kIG5hdmlnYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogKiA6a2JkOmBCYWNrc3BhY2VgIGRlbGV0ZXMgdG8gdGhlIGxlZnQ7IDprYmQ6YERlbGAgZGVsZXRlcyB0byB0aGUgcmlnaHQKIAorKiA6a2JkOmBDLUJhY2tzcGFjZWAgZGVsZXRlIHdvcmQgbGVmdDsgOmtiZDpgQy1EZWxgIGRlbGV0ZSB3b3JkIHRvIHRoZSByaWdodAorCiAqIEFycm93IGtleXMgYW5kIDprYmQ6YFBhZ2UgVXBgLzprYmQ6YFBhZ2UgRG93bmAgdG8gbW92ZSBhcm91bmQKIAorKiA6a2JkOmBDLUxlZnRBcnJvd2AgYW5kIDprYmQ6YEMtUmlnaHRBcnJvd2AgbW92ZXMgYnkgd29yZHMKKwogKiA6a2JkOmBIb21lYC86a2JkOmBFbmRgIGdvIHRvIGJlZ2luL2VuZCBvZiBsaW5lCiAKICogOmtiZDpgQy1Ib21lYC86a2JkOmBDLUVuZGAgZ28gdG8gYmVnaW4vZW5kIG9mIGZpbGUKIAotKiBTb21lIDpwcm9ncmFtOmBFbWFjc2AgYmluZGluZ3MgbWF5IGFsc28gd29yaywgaW5jbHVkaW5nIDprYmQ6YEMtQmAsCi0gIDprYmQ6YEMtUGAsIDprYmQ6YEMtQWAsIDprYmQ6YEMtRWAsIDprYmQ6YEMtRGAsIDprYmQ6YEMtTGAKKyogU29tZSB1c2VmdWwgRW1hY3MgYmluZGluZ3MgYXJlIGluaGVyaXRlZCBmcm9tIFRjbC9UazoKKworICAgKiA6a2JkOmBDLWFgIGJlZ2lubmluZyBvZiBsaW5lCisKKyAgICogOmtiZDpgQy1lYCBlbmQgb2YgbGluZQorCisgICAqIDprYmQ6YEMta2Aga2lsbCBsaW5lIChidXQgZG9lc24ndCBwdXQgaXQgaW4gY2xpcGJvYXJkKQorCisgICAqIDprYmQ6YEMtbGAgY2VudGVyIHdpbmRvdyBhcm91bmQgdGhlIGluc2VydGlvbiBwb2ludAorCisgICAqIDprYmQ6YEMtYmAgZ28gYmFja3dhcmRzIG9uZSBjaGFyYWN0ZXIgd2l0aG91dCBkZWxldGluZyAodXN1YWxseSB5b3UgY2FuCisgICAgIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvciB0aGlzKQorCisgICAqIDprYmQ6YEMtZmAgZ28gZm9yd2FyZCBvbmUgY2hhcmFjdGVyIHdpdGhvdXQgZGVsZXRpbmcgKHVzdWFsbHkgeW91IGNhbgorICAgICBhbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IgdGhpcykKKworICAgKiA6a2JkOmBDLXBgIGdvIHVwIG9uZSBsaW5lICh1c3VhbGx5IHlvdSBjYW4gYWxzbyB1c2UgdGhlIGN1cnNvciBrZXkgZm9yCisgICAgIHRoaXMpCisKKyAgICogOmtiZDpgQy1kYCBkZWxldGUgbmV4dCBjaGFyYWN0ZXIKKworU3RhbmRhcmQga2V5YmluZGluZ3MgKGxpa2UgOmtiZDpgQy1jYCB0byBjb3B5IGFuZCA6a2JkOmBDLXZgIHRvIHBhc3RlKQorbWF5IHdvcmsuICBLZXliaW5kaW5ncyBhcmUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZy4KIAogCiBBdXRvbWF0aWMgaW5kZW50YXRpb24KQEAgLTI0NiwyNyArMzU2LDc2IEBACiBBZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzIChpbiB0aGUKIFB5dGhvbiBTaGVsbCB3aW5kb3cgYnkgb25lIHRhYikuICBBZnRlciBjZXJ0YWluIGtleXdvcmRzIChicmVhaywgcmV0dXJuIGV0Yy4pCiB0aGUgbmV4dCBsaW5lIGlzIGRlZGVudGVkLiAgSW4gbGVhZGluZyBpbmRlbnRhdGlvbiwgOmtiZDpgQmFja3NwYWNlYCBkZWxldGVzIHVwCi10byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gOmtiZDpgVGFiYCBpbnNlcnRzIDEtNCBzcGFjZXMgKGluIHRoZSBQeXRob24KLVNoZWxsIHdpbmRvdyBvbmUgdGFiKS4gU2VlIGFsc28gdGhlIGluZGVudC9kZWRlbnQgcmVnaW9uIGNvbW1hbmRzIGluIHRoZSBlZGl0Ci1tZW51LgordG8gNCBzcGFjZXMgaWYgdGhleSBhcmUgdGhlcmUuIDprYmQ6YFRhYmAgaW5zZXJ0cyBzcGFjZXMgKGluIHRoZSBQeXRob24KK1NoZWxsIHdpbmRvdyBvbmUgdGFiKSwgbnVtYmVyIGRlcGVuZHMgb24gSW5kZW50IHdpZHRoLiBDdXJyZW50bHkgdGFicworYXJlIHJlc3RyaWN0ZWQgdG8gZm91ciBzcGFjZXMgZHVlIHRvIFRjbC9UayBsaW1pdGF0aW9ucy4KIAorU2VlIGFsc28gdGhlIGluZGVudC9kZWRlbnQgcmVnaW9uIGNvbW1hbmRzIGluIHRoZSBlZGl0IG1lbnUuCisKK0NvbXBsZXRpb25zCiteXl5eXl5eXl5eXgorCitDb21wbGV0aW9ucyBhcmUgc3VwcGxpZWQgZm9yIGZ1bmN0aW9ucywgY2xhc3NlcywgYW5kIGF0dHJpYnV0ZXMgb2YgY2xhc3NlcywKK2JvdGggYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZC4gQ29tcGxldGlvbnMgYXJlIGFsc28gcHJvdmlkZWQgZm9yCitmaWxlbmFtZXMuCisKK1RoZSBBdXRvQ29tcGxldGVXaW5kb3cgKEFDVykgd2lsbCBvcGVuIGFmdGVyIGEgcHJlZGVmaW5lZCBkZWxheSAoZGVmYXVsdCBpcwordHdvIHNlY29uZHMpIGFmdGVyIGEgJy4nIG9yIChpbiBhIHN0cmluZykgYW4gb3Muc2VwIGlzIHR5cGVkLiBJZiBhZnRlciBvbmUKK29mIHRob3NlIGNoYXJhY3RlcnMgKHBsdXMgemVybyBvciBtb3JlIG90aGVyIGNoYXJhY3RlcnMpIGEgdGFiIGlzIHR5cGVkCit0aGUgQUNXIHdpbGwgb3BlbiBpbW1lZGlhdGVseSBpZiBhIHBvc3NpYmxlIGNvbnRpbnVhdGlvbiBpcyBmb3VuZC4KKworSWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29tcGxldGlvbiBmb3IgdGhlIGNoYXJhY3RlcnMgZW50ZXJlZCwgYQorOmtiZDpgVGFiYCB3aWxsIHN1cHBseSB0aGF0IGNvbXBsZXRpb24gd2l0aG91dCBvcGVuaW5nIHRoZSBBQ1cuCisKKydTaG93IENvbXBsZXRpb25zJyB3aWxsIGZvcmNlIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3csIGJ5IGRlZmF1bHQgdGhlCis6a2JkOmBDLXNwYWNlYCB3aWxsIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3cuIEluIGFuIGVtcHR5CitzdHJpbmcsIHRoaXMgd2lsbCBjb250YWluIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIE9uIGEKK2JsYW5rIGxpbmUsIGl0IHdpbGwgY29udGFpbiB0aGUgYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgYW5kCitjbGFzc2VzIGluIHRoZSBjdXJyZW50IG5hbWUgc3BhY2VzLCBwbHVzIGFueSBtb2R1bGVzIGltcG9ydGVkLiBJZiBzb21lCitjaGFyYWN0ZXJzIGhhdmUgYmVlbiBlbnRlcmVkLCB0aGUgQUNXIHdpbGwgYXR0ZW1wdCB0byBiZSBtb3JlIHNwZWNpZmljLgorCitJZiBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGlzIHR5cGVkLCB0aGUgQUNXIHNlbGVjdGlvbiB3aWxsIGp1bXAgdG8gdGhlCitlbnRyeSBtb3N0IGNsb3NlbHkgbWF0Y2hpbmcgdGhvc2UgY2hhcmFjdGVycy4gIEVudGVyaW5nIGEgOmtiZDpgdGFiYCB3aWxsCitjYXVzZSB0aGUgbG9uZ2VzdCBub24tYW1iaWd1b3VzIG1hdGNoIHRvIGJlIGVudGVyZWQgaW4gdGhlIEVkaXRvciB3aW5kb3cgb3IKK1NoZWxsLiAgVHdvIDprYmQ6YHRhYmAgaW4gYSByb3cgd2lsbCBzdXBwbHkgdGhlIGN1cnJlbnQgQUNXIHNlbGVjdGlvbiwgYXMKK3dpbGwgcmV0dXJuIG9yIGEgZG91YmxlIGNsaWNrLiAgQ3Vyc29yIGtleXMsIFBhZ2UgVXAvRG93biwgbW91c2Ugc2VsZWN0aW9uLAorYW5kIHRoZSBzY3JvbGwgd2hlZWwgYWxsIG9wZXJhdGUgb24gdGhlIEFDVy4KKworIkhpZGRlbiIgYXR0cmlidXRlcyBjYW4gYmUgYWNjZXNzZWQgYnkgdHlwaW5nIHRoZSBiZWdpbm5pbmcgb2YgaGlkZGVuCituYW1lIGFmdGVyIGEgJy4nLCBlLmcuICdfJy4gVGhpcyBhbGxvd3MgYWNjZXNzIHRvIG1vZHVsZXMgd2l0aAorYGBfX2FsbF9fYGAgc2V0LCBvciB0byBjbGFzcy1wcml2YXRlIGF0dHJpYnV0ZXMuCisKK0NvbXBsZXRpb25zIGFuZCB0aGUgJ0V4cGFuZCBXb3JkJyBmYWNpbGl0eSBjYW4gc2F2ZSBhIGxvdCBvZiB0eXBpbmchCisKK0NvbXBsZXRpb25zIGFyZSBjdXJyZW50bHkgbGltaXRlZCB0byB0aG9zZSBpbiB0aGUgbmFtZXNwYWNlcy4gTmFtZXMgaW4KK2FuIEVkaXRvciB3aW5kb3cgd2hpY2ggYXJlIG5vdCB2aWEgYGBfX21haW5fX2BgIGFuZCA6ZGF0YTpgc3lzLm1vZHVsZXNgIHdpbGwKK25vdCBiZSBmb3VuZC4gIFJ1biB0aGUgbW9kdWxlIG9uY2Ugd2l0aCB5b3VyIGltcG9ydHMgdG8gY29ycmVjdCB0aGlzIHNpdHVhdGlvbi4KK05vdGUgdGhhdCBJRExFIGl0c2VsZiBwbGFjZXMgcXVpdGUgYSBmZXcgbW9kdWxlcyBpbiBzeXMubW9kdWxlcywgc28KK211Y2ggY2FuIGJlIGZvdW5kIGJ5IGRlZmF1bHQsIGUuZy4gdGhlIHJlIG1vZHVsZS4KKworSWYgeW91IGRvbid0IGxpa2UgdGhlIEFDVyBwb3BwaW5nIHVwIHVuYmlkZGVuLCBzaW1wbHkgbWFrZSB0aGUgZGVsYXkKK2xvbmdlciBvciBkaXNhYmxlIHRoZSBleHRlbnNpb24uICBPciBhbm90aGVyIG9wdGlvbiBpcyB0aGUgZGVsYXkgY291bGQKK2JlIHNldCB0byB6ZXJvLiBBbm90aGVyIGFsdGVybmF0aXZlIHRvIHByZXZlbnRpbmcgQUNXIHBvcHVwcyBpcyB0bworZGlzYWJsZSB0aGUgY2FsbCB0aXBzIGV4dGVuc2lvbi4KIAogUHl0aG9uIFNoZWxsIHdpbmRvdwogXl5eXl5eXl5eXl5eXl5eXl5eXgogCi0qIDprYmQ6YEMtQ2AgaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZAorKiA6a2JkOmBDLWNgIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQKIAotKiA6a2JkOmBDLURgIHNlbmRzIGVuZC1vZi1maWxlOyBjbG9zZXMgd2luZG93IGlmIHR5cGVkIGF0IGEgYGA+Pj5gYCBwcm9tcHQKKyogOmtiZDpgQy1kYCBzZW5kcyBlbmQtb2YtZmlsZTsgY2xvc2VzIHdpbmRvdyBpZiB0eXBlZCBhdCBhIGBgPj4+YGAgcHJvbXB0CisgICh0aGlzIGlzIDprYmQ6YEMtemAgb24gV2luZG93cykuCiAKLSogOmtiZDpgQWx0LXBgIHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQKKyogOmtiZDpgQWx0LS9gIChFeHBhbmQgd29yZCkgaXMgYWxzbyB1c2VmdWwgdG8gcmVkdWNlIHR5cGluZwogCi0qIDprYmQ6YEFsdC1uYCByZXRyaWV2ZXMgbmV4dAorICBDb21tYW5kIGhpc3RvcnkKIAotKiA6a2JkOmBSZXR1cm5gIHdoaWxlIG9uIGFueSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQKKyAgKiA6a2JkOmBBbHQtcGAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZC4gT24KKyAgICBPUyBYIHVzZSA6a2JkOmBDLXBgLgogCi0qIDprYmQ6YEFsdC0vYCAoRXhwYW5kIHdvcmQpIGlzIGFsc28gdXNlZnVsIGhlcmUKKyAgKiA6a2JkOmBBbHQtbmAgcmV0cmlldmVzIG5leHQuIE9uIE9TIFggdXNlIDprYmQ6YEMtbmAuCiAKLS4uIGluZGV4Ojogc2luZ2xlOiBpbmRlbnRhdGlvbgorICAqIDprYmQ6YFJldHVybmAgd2hpbGUgb24gYW55IHByZXZpb3VzIGNvbW1hbmQgcmV0cmlldmVzIHRoYXQgY29tbWFuZAogCiAKIFN5bnRheCBjb2xvcnMKQEAgLTMwOCwxNyArNDY3LDE3IEBACiAKIFVwb24gc3RhcnR1cCB3aXRoIHRoZSBgYC1zYGAgb3B0aW9uLCBJRExFIHdpbGwgZXhlY3V0ZSB0aGUgZmlsZSByZWZlcmVuY2VkIGJ5CiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIDplbnZ2YXI6YElETEVTVEFSVFVQYCBvciA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYC4KLUlkbGUgZmlyc3QgY2hlY2tzIGZvciBgYElETEVTVEFSVFVQYGA7IGlmIGBgSURMRVNUQVJUVVBgYCBpcyBwcmVzZW50IHRoZSBmaWxlCi1yZWZlcmVuY2VkIGlzIHJ1bi4gIElmIGBgSURMRVNUQVJUVVBgYCBpcyBub3QgcHJlc2VudCwgSWRsZSBjaGVja3MgZm9yCitJRExFIGZpcnN0IGNoZWNrcyBmb3IgYGBJRExFU1RBUlRVUGBgOyBpZiBgYElETEVTVEFSVFVQYGAgaXMgcHJlc2VudCB0aGUgZmlsZQorcmVmZXJlbmNlZCBpcyBydW4uICBJZiBgYElETEVTVEFSVFVQYGAgaXMgbm90IHByZXNlbnQsIElETEUgY2hlY2tzIGZvcgogYGBQWVRIT05TVEFSVFVQYGAuICBGaWxlcyByZWZlcmVuY2VkIGJ5IHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUKLWNvbnZlbmllbnQgcGxhY2VzIHRvIHN0b3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGZyZXF1ZW50bHkgZnJvbSB0aGUgSWRsZQorY29udmVuaWVudCBwbGFjZXMgdG8gc3RvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgZnJlcXVlbnRseSBmcm9tIHRoZSBJRExFCiBzaGVsbCwgb3IgZm9yIGV4ZWN1dGluZyBpbXBvcnQgc3RhdGVtZW50cyB0byBpbXBvcnQgY29tbW9uIG1vZHVsZXMuCiAKIEluIGFkZGl0aW9uLCBgYFRrYGAgYWxzbyBsb2FkcyBhIHN0YXJ0dXAgZmlsZSBpZiBpdCBpcyBwcmVzZW50LiAgTm90ZSB0aGF0IHRoZQogVGsgZmlsZSBpcyBsb2FkZWQgdW5jb25kaXRpb25hbGx5LiAgVGhpcyBhZGRpdGlvbmFsIGZpbGUgaXMgYGAuSWRsZS5weWBgIGFuZCBpcwogbG9va2VkIGZvciBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LiAgU3RhdGVtZW50cyBpbiB0aGlzIGZpbGUgd2lsbCBiZQogZXhlY3V0ZWQgaW4gdGhlIFRrIG5hbWVzcGFjZSwgc28gdGhpcyBmaWxlIGlzIG5vdCB1c2VmdWwgZm9yIGltcG9ydGluZyBmdW5jdGlvbnMKLXRvIGJlIHVzZWQgZnJvbSBJZGxlJ3MgUHl0aG9uIHNoZWxsLgordG8gYmUgdXNlZCBmcm9tIElETEUncyBQeXRob24gc2hlbGwuCiAKIAogQ29tbWFuZCBsaW5lIHVzYWdlCkBAIC0zNDksMyArNTA4LDQ1IEBACiAgICB0aGUgYXJndW1lbnRzIGFyZSBzdGlsbCBhdmFpbGFibGUgaW4gYGBzeXMuYXJndmBgLgogCiAKK0FkZGl0aW9uYWwgaGVscCBzb3VyY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJRExFIGluY2x1ZGVzIGEgaGVscCBtZW51IGVudHJ5IGNhbGxlZCAiUHl0aG9uIERvY3MiIHRoYXQgd2lsbCBvcGVuIHRoZQorZXh0ZW5zaXZlIHNvdXJjZXMgb2YgaGVscCwgaW5jbHVkaW5nIHR1dG9yaWFscywgYXZhaWxhYmxlIGF0IGRvY3MucHl0aG9uLm9yZy4KK1NlbGVjdGVkIFVSTHMgY2FuIGJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgaGVscCBtZW51IGF0IGFueSB0aW1lIHVzaW5nIHRoZQorQ29uZmlndXJlIElETEUgZGlhbG9nLiBTZWUgdGhlIElETEUgaGVscCBvcHRpb24gaW4gdGhlIGhlbHAgbWVudSBvZiBJRExFIGZvcgorbW9yZSBpbmZvcm1hdGlvbi4KKworCitPdGhlciBwcmVmZXJlbmNlcworLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbnQgcHJlZmVyZW5jZXMsIGhpZ2hsaWdodGluZywga2V5cywgYW5kIGdlbmVyYWwgcHJlZmVyZW5jZXMgY2FuIGJlCitjaGFuZ2VkIHZpYSB0aGUgQ29uZmlndXJlIElETEUgbWVudSBvcHRpb24uICBCZSBzdXJlIHRvIG5vdGUgdGhhdAora2V5cyBjYW4gYmUgdXNlciBkZWZpbmVkLCBJRExFIHNoaXBzIHdpdGggZm91ciBidWlsdCBpbiBrZXkgc2V0cy4gSW4KK2FkZGl0aW9uIGEgdXNlciBjYW4gY3JlYXRlIGEgY3VzdG9tIGtleSBzZXQgaW4gdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZwordW5kZXIgdGhlIGtleXMgdGFiLgorCitFeHRlbnNpb25zCistLS0tLS0tLS0tCisKK0lETEUgY29udGFpbnMgYW4gZXh0ZW5zaW9uIGZhY2lsaXR5LiAgU2VlIHRoZSBiZWdpbm5pbmcgb2YKK2NvbmZpZy1leHRlbnNpb25zLmRlZiBpbiB0aGUgaWRsZWxpYiBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uICBUaGUKK2RlZmF1bHQgZXh0ZW5zaW9ucyBhcmUgY3VycmVudGx5OgorCisqIEZvcm1hdFBhcmFncmFwaAorCisqIEF1dG9FeHBhbmQKKworKiBab29tSGVpZ2h0CisKKyogU2NyaXB0QmluZGluZworCisqIENhbGxUaXBzCisKKyogUGFyZW5NYXRjaAorCisqIEF1dG9Db21wbGV0ZQorCisqIENvZGVDb250ZXh0CisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltYXBsaWIucnN0IGIvRG9jL2xpYnJhcnkvaW1hcGxpYi5yc3QKaW5kZXggMDEyMzZmYi4uYmUyZjU5OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW1hcGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW1hcGxpYi5yc3QKQEAgLTgwLDYgKzgwLDEwIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgKnNzbF9jb250ZXh0KiBwYXJhbWV0ZXIgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgY2xhc3Mgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRvciogKHNlZQorICAgICAgOmRhdGE6YH5zc2wuSEFTX1NOSWApLgogCiBUaGUgc2Vjb25kIHN1YmNsYXNzIGFsbG93cyBmb3IgY29ubmVjdGlvbnMgY3JlYXRlZCBieSBhIGNoaWxkIHByb2Nlc3M6CiAKQEAgLTQzNyw2ICs0NDEsMTAgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbWV0aG9kIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0b3IqIChzZWUKKyAgICAgIDpkYXRhOmB+c3NsLkhBU19TTklgKS4KIAogLi4gbWV0aG9kOjogSU1BUDQuc3RhdHVzKG1haWxib3gsIG5hbWVzKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbXAucnN0IGIvRG9jL2xpYnJhcnkvaW1wLnJzdAppbmRleCAzNjRkODFlLi44ZjBiNzlmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ltcC5yc3QKQEAgLTMsNyArMywxMCBAQAogCiAuLiBtb2R1bGU6OiBpbXAKICAgIDpzeW5vcHNpczogQWNjZXNzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW1wb3J0IHN0YXRlbWVudC4KKyAgIDpkZXByZWNhdGVkOgogCisuLiBkZXByZWNhdGVkOjogMy40CisgICBUaGUgOm1vZDpgaW1wYCBwYWNrYWdlIGlzIHBlbmRpbmcgZGVwcmVjYXRpb24gaW4gZmF2b3Igb2YgOm1vZDpgaW1wb3J0bGliYC4KIAogLi4gaW5kZXg6OiBzdGF0ZW1lbnQ6IGltcG9ydAogCkBAIC0xMSwxMCArMTQsNiBAQAogOmtleXdvcmQ6YGltcG9ydGAgc3RhdGVtZW50LiAgSXQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhbmQgZnVuY3Rpb25zOgogCiAKLS4uIG5vdGU6OgotICAgTmV3IHByb2dyYW1zIHNob3VsZCB1c2UgOm1vZDpgaW1wb3J0bGliYCByYXRoZXIgdGhhbiB0aGlzIG1vZHVsZS4KLQotCiAuLiBmdW5jdGlvbjo6IGdldF9tYWdpYygpCiAKICAgIC4uIGluZGV4OjogcGFpcjogZmlsZTsgYnl0ZS1jb2RlCkBAIC0yMiw2ICsyMSw5IEBACiAgICBSZXR1cm4gdGhlIG1hZ2ljIHN0cmluZyB2YWx1ZSB1c2VkIHRvIHJlY29nbml6ZSBieXRlLWNvbXBpbGVkIGNvZGUgZmlsZXMKICAgICg6ZmlsZTpgLnB5Y2AgZmlsZXMpLiAgKFRoaXMgdmFsdWUgbWF5IGJlIGRpZmZlcmVudCBmb3IgZWFjaCBQeXRob24gdmVyc2lvbi4pCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICBVc2UgOmF0dHI6YGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUmAgaW5zdGVhZC4KKwogCiAuLiBmdW5jdGlvbjo6IGdldF9zdWZmaXhlcygpCiAKQEAgLTEwMSw4ICsxMDMsMTAgQEAKICAgIHVzaW5nIGEgOmtleXdvcmQ6YHRyeWAgLi4uIDprZXl3b3JkOmBmaW5hbGx5YCBzdGF0ZW1lbnQuCiAKICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLSAgICAgIFVubmVlZGVkIGFzIGxvYWRlcnMgc2hvdWxkIGJlIHVzZWQgdG8gbG9hZCBtb2R1bGVzIGFuZAotICAgICAgOmZ1bmM6YGZpbmRfbW9kdWxlYCBpcyBkZXByZWNhdGVkLgorICAgICAgSWYgcHJldmlvdXNseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggOmZ1bmM6YGltcC5maW5kX21vZHVsZWAgdGhlbgorICAgICAgY2FsbCBgYGxvYWRfbW9kdWxlKClgYCBvbiB0aGUgcmV0dXJuZWQgbG9hZGVyLiBJZiB5b3Ugd2lzaCB0byBsb2FkIGEKKyAgICAgIG1vZHVsZSBmcm9tIGEgc3BlY2lmaWMgZmlsZSwgdGhlbiB1c2Ugb25lIG9mIHRoZSBmaWxlLWJhc2VkIGxvYWRlcnMgZm91bmQKKyAgICAgIGluIDptb2Q6YGltcG9ydGxpYi5tYWNoaW5lcnlgLgogCiAKIC4uIGZ1bmN0aW9uOjogbmV3X21vZHVsZShuYW1lKQpAQCAtMTEwLDYgKzExNCw5IEBACiAgICBSZXR1cm4gYSBuZXcgZW1wdHkgbW9kdWxlIG9iamVjdCBjYWxsZWQgKm5hbWUqLiAgVGhpcyBvYmplY3QgaXMgKm5vdCogaW5zZXJ0ZWQKICAgIGluIGBgc3lzLm1vZHVsZXNgYC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVXNlIDpjbGFzczpgdHlwZXMuTW9kdWxlVHlwZWAgaW5zdGVhZC4KKwogCiAuLiBmdW5jdGlvbjo6IHJlbG9hZChtb2R1bGUpCiAKQEAgLTE3Niw2ICsxODMsOSBAQAogICAgICAgUmVsaWVzIG9uIGJvdGggYGBfX25hbWVfX2BgIGFuZCBgYF9fbG9hZGVyX19gYCBiZWluZyBkZWZpbmVkIG9uIHRoZSBtb2R1bGUKICAgICAgIGJlaW5nIHJlbG9hZGVkIGluc3RlYWQgb2YganVzdCBgYF9fbmFtZV9fYGAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnJlbG9hZGAgaW5zdGVhZC4KKwogCiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgY29udmVuaWVuY2VzIGZvciBoYW5kbGluZyA6cGVwOmAzMTQ3YCBieXRlLWNvbXBpbGVkCiBmaWxlIHBhdGhzLgpAQCAtMjAxLDYgKzIxMSw5IEBACiAgICAgICBJZiA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgaXMgYGBOb25lYGAsIHRoZW4KICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlzIHJhaXNlZC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVXNlIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZWAgaW5zdGVhZC4KKwogCiAuLiBmdW5jdGlvbjo6IHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCiAKQEAgLTIxNiwxNCArMjI5LDE3IEBACiAgICAgICBSYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCB3aGVuCiAgICAgICA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgaXMgbm90IGRlZmluZWQuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuc291cmNlX2Zyb21fY2FjaGVgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBnZXRfdGFnKCkKIAogICAgUmV0dXJuIHRoZSA6cGVwOmAzMTQ3YCBtYWdpYyB0YWcgc3RyaW5nIG1hdGNoaW5nIHRoaXMgdmVyc2lvbiBvZiBQeXRob24ncwogICAgbWFnaWMgbnVtYmVyLCBhcyByZXR1cm5lZCBieSA6ZnVuYzpgZ2V0X21hZ2ljYC4KIAotICAgLi4gbm90ZTo6Ci0gICAgICBZb3UgbWF5IHVzZSA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgZGlyZWN0bHkgc3RhcnRpbmcKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgZGlyZWN0bHkgc3RhcnRpbmcKICAgICAgIGluIFB5dGhvbiAzLjMuCiAKIApAQCAtMjUxLDYgKzI2Nyw4IEBACiAgICB0aGUgbW9zdCBwYXJ0LiAgQSBnbG9iYWwgaW1wb3J0IGxvY2sgaXMga2VwdCBmb3Igc29tZSBjcml0aWNhbCB0YXNrcywKICAgIHN1Y2ggYXMgaW5pdGlhbGl6aW5nIHRoZSBwZXItbW9kdWxlIGxvY2tzLgogCisuLiBkZXByZWNhdGVkOjogMy40CisKIAogLi4gZnVuY3Rpb246OiBhY3F1aXJlX2xvY2soKQogCkBAIC0yNjksNiArMjg3LDggQEAKICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAogICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKwogCiAuLiBmdW5jdGlvbjo6IHJlbGVhc2VfbG9jaygpCiAKQEAgLTI4MCw2ICszMDAsOCBAQAogICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCiAgICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorCiAKIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIHdpdGggaW50ZWdlciB2YWx1ZXMsIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUsIGFyZSB1c2VkCiB0byBpbmRpY2F0ZSB0aGUgc2VhcmNoIHJlc3VsdCBvZiA6ZnVuYzpgZmluZF9tb2R1bGVgLgpAQCAtMzQ1LDYgKzM2Nyw5IEBACiAgICAgICBgYE5vbmVgYCBpcyBpbnNlcnRlZCBpbnRvIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBpbnN0ZWFkIG9mIGFuCiAgICAgICBpbnN0YW5jZSBvZiA6Y2xhc3M6YE51bGxJbXBvcnRlcmAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIEluc2VydCBgYE5vbmVgYCBpbnRvIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBpbnN0ZWFkLgorCiAKIC4uIF9leGFtcGxlcy1pbXA6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CmluZGV4IDVmNzQwYTIuLmE4MWNjZmQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdApAQCAtOTUsNyArOTUsNyBAQAogCiAgICBGaW5kIHRoZSBsb2FkZXIgZm9yIGEgbW9kdWxlLCBvcHRpb25hbGx5IHdpdGhpbiB0aGUgc3BlY2lmaWVkICpwYXRoKi4gSWYgdGhlCiAgICBtb2R1bGUgaXMgaW4gOmF0dHI6YHN5cy5tb2R1bGVzYCwgdGhlbiBgYHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX19gYCBpcwotICAgcmV0dXJuZWQgKHVubGVzcyB0aGUgbG9hZGVyIHdvdWxkIGJlIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlCisgICByZXR1cm5lZCAodW5sZXNzIHRoZSBsb2FkZXIgd291bGQgYmUgYGBOb25lYGAgb3IgaXMgbm90IHNldCwgaW4gd2hpY2ggY2FzZQogICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkKS4gT3RoZXJ3aXNlIGEgc2VhcmNoIHVzaW5nIDphdHRyOmBzeXMubWV0YV9wYXRoYAogICAgaXMgZG9uZS4gYGBOb25lYGAgaXMgcmV0dXJuZWQgaWYgbm8gbG9hZGVyIGlzIGZvdW5kLgogCkBAIC0xMDQsNiArMTA0LDE1IEBACiAgICB3aWxsIG5lZWQgdG8gaW1wb3J0IGFsbCBwYXJlbnQgcGFja2FnZXMgb2YgdGhlIHN1Ym1vZHVsZSBhbmQgdXNlIHRoZSBjb3JyZWN0CiAgICBhcmd1bWVudCB0byAqcGF0aCouCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSWYgYGBfX2xvYWRlcl9fYGAgaXMgbm90IHNldCwgcmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAsIGp1c3QgbGlrZSB3aGVuIHRoZQorICAgICAgYXR0cmlidXRlIGlzIHNldCB0byBgYE5vbmVgYC4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVXNlIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWNgIGluc3RlYWQuCisKIC4uIGZ1bmN0aW9uOjogaW52YWxpZGF0ZV9jYWNoZXMoKQogCiAgICBJbnZhbGlkYXRlIHRoZSBpbnRlcm5hbCBjYWNoZXMgb2YgZmluZGVycyBzdG9yZWQgYXQKQEAgLTExNCw2ICsxMjMsNzQgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKy4uIGZ1bmN0aW9uOjogcmVsb2FkKG1vZHVsZSkKKworICAgUmVsb2FkIGEgcHJldmlvdXNseSBpbXBvcnRlZCAqbW9kdWxlKi4gIFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgbW9kdWxlIG9iamVjdCwKKyAgIHNvIGl0IG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UKKyAgIGhhdmUgZWRpdGVkIHRoZSBtb2R1bGUgc291cmNlIGZpbGUgdXNpbmcgYW4gZXh0ZXJuYWwgZWRpdG9yIGFuZCB3YW50IHRvIHRyeQorICAgb3V0IHRoZSBuZXcgdmVyc2lvbiB3aXRob3V0IGxlYXZpbmcgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4gIFRoZSByZXR1cm4gdmFsdWUKKyAgIGlzIHRoZSBtb2R1bGUgb2JqZWN0ICh3aGljaCBjYW4gYmUgZGlmZmVyZW50IGlmIHJlLWltcG9ydGluZyBjYXVzZXMgYQorICAgZGlmZmVyZW50IG9iamVjdCB0byBiZSBwbGFjZWQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCkuCisKKyAgIFdoZW4gOmZ1bmM6YHJlbG9hZGAgaXMgZXhlY3V0ZWQ6CisKKyAgICogUHl0aG9uIG1vZHVsZXMnIGNvZGUgaXMgcmVjb21waWxlZCBhbmQgdGhlIG1vZHVsZS1sZXZlbCBjb2RlIHJlLWV4ZWN1dGVkLAorICAgICBkZWZpbmluZyBhIG5ldyBzZXQgb2Ygb2JqZWN0cyB3aGljaCBhcmUgYm91bmQgdG8gbmFtZXMgaW4gdGhlIG1vZHVsZSdzCisgICAgIGRpY3Rpb25hcnkgYnkgcmV1c2luZyB0aGUgOnRlcm06YGxvYWRlcmAgd2hpY2ggb3JpZ2luYWxseSBsb2FkZWQgdGhlCisgICAgIG1vZHVsZS4gIFRoZSBgYGluaXRgYCBmdW5jdGlvbiBvZiBleHRlbnNpb24gbW9kdWxlcyBpcyBub3QgY2FsbGVkIGEgc2Vjb25kCisgICAgIHRpbWUuCisKKyAgICogQXMgd2l0aCBhbGwgb3RoZXIgb2JqZWN0cyBpbiBQeXRob24gdGhlIG9sZCBvYmplY3RzIGFyZSBvbmx5IHJlY2xhaW1lZAorICAgICBhZnRlciB0aGVpciByZWZlcmVuY2UgY291bnRzIGRyb3AgdG8gemVyby4KKworICAgKiBUaGUgbmFtZXMgaW4gdGhlIG1vZHVsZSBuYW1lc3BhY2UgYXJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gYW55IG5ldyBvcgorICAgICBjaGFuZ2VkIG9iamVjdHMuCisKKyAgICogT3RoZXIgcmVmZXJlbmNlcyB0byB0aGUgb2xkIG9iamVjdHMgKHN1Y2ggYXMgbmFtZXMgZXh0ZXJuYWwgdG8gdGhlIG1vZHVsZSkgYXJlCisgICAgIG5vdCByZWJvdW5kIHRvIHJlZmVyIHRvIHRoZSBuZXcgb2JqZWN0cyBhbmQgbXVzdCBiZSB1cGRhdGVkIGluIGVhY2ggbmFtZXNwYWNlCisgICAgIHdoZXJlIHRoZXkgb2NjdXIgaWYgdGhhdCBpcyBkZXNpcmVkLgorCisgICBUaGVyZSBhcmUgYSBudW1iZXIgb2Ygb3RoZXIgY2F2ZWF0czoKKworICAgSWYgYSBtb2R1bGUgaXMgc3ludGFjdGljYWxseSBjb3JyZWN0IGJ1dCBpdHMgaW5pdGlhbGl6YXRpb24gZmFpbHMsIHRoZSBmaXJzdAorICAgOmtleXdvcmQ6YGltcG9ydGAgc3RhdGVtZW50IGZvciBpdCBkb2VzIG5vdCBiaW5kIGl0cyBuYW1lIGxvY2FsbHksIGJ1dCBkb2VzCisgICBzdG9yZSBhIChwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQpIG1vZHVsZSBvYmplY3QgaW4gYGBzeXMubW9kdWxlc2BgLiAgVG8gcmVsb2FkCisgICB0aGUgbW9kdWxlIHlvdSBtdXN0IGZpcnN0IDprZXl3b3JkOmBpbXBvcnRgIGl0IGFnYWluICh0aGlzIHdpbGwgYmluZCB0aGUgbmFtZQorICAgdG8gdGhlIHBhcnRpYWxseSBpbml0aWFsaXplZCBtb2R1bGUgb2JqZWN0KSBiZWZvcmUgeW91IGNhbiA6ZnVuYzpgcmVsb2FkYCBpdC4KKworICAgV2hlbiBhIG1vZHVsZSBpcyByZWxvYWRlZCwgaXRzIGRpY3Rpb25hcnkgKGNvbnRhaW5pbmcgdGhlIG1vZHVsZSdzIGdsb2JhbAorICAgdmFyaWFibGVzKSBpcyByZXRhaW5lZC4gIFJlZGVmaW5pdGlvbnMgb2YgbmFtZXMgd2lsbCBvdmVycmlkZSB0aGUgb2xkCisgICBkZWZpbml0aW9ucywgc28gdGhpcyBpcyBnZW5lcmFsbHkgbm90IGEgcHJvYmxlbS4gIElmIHRoZSBuZXcgdmVyc2lvbiBvZiBhCisgICBtb2R1bGUgZG9lcyBub3QgZGVmaW5lIGEgbmFtZSB0aGF0IHdhcyBkZWZpbmVkIGJ5IHRoZSBvbGQgdmVyc2lvbiwgdGhlIG9sZAorICAgZGVmaW5pdGlvbiByZW1haW5zLiAgVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkIHRvIHRoZSBtb2R1bGUncyBhZHZhbnRhZ2UgaWYgaXQKKyAgIG1haW50YWlucyBhIGdsb2JhbCB0YWJsZSBvciBjYWNoZSBvZiBvYmplY3RzIC0tLSB3aXRoIGEgOmtleXdvcmQ6YHRyeWAKKyAgIHN0YXRlbWVudCBpdCBjYW4gdGVzdCBmb3IgdGhlIHRhYmxlJ3MgcHJlc2VuY2UgYW5kIHNraXAgaXRzIGluaXRpYWxpemF0aW9uIGlmCisgICBkZXNpcmVkOjoKKworICAgICAgdHJ5OgorICAgICAgICAgIGNhY2hlCisgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgIGNhY2hlID0ge30KKworICAgSXQgaXMgbGVnYWwgdGhvdWdoIGdlbmVyYWxseSBub3QgdmVyeSB1c2VmdWwgdG8gcmVsb2FkIGJ1aWx0LWluIG9yCisgICBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyAodGhpcyBpcyBub3QgdHJ1ZSBmb3IgZS5nLiA6bW9kOmBzeXNgLAorICAgOm1vZDpgX19tYWluX19gLCA6bW9kOmBidWlsdGluc2AgYW5kIG90aGVyIGtleSBtb2R1bGVzIHdoZXJlIHJlbG9hZGluZyBpcworICAgZnJvd25lZCB1cG9uKS4gSW4gbWFueSBjYXNlcywgaG93ZXZlciwgZXh0ZW5zaW9uIG1vZHVsZXMgYXJlIG5vdCBkZXNpZ25lZCB0bworICAgYmUgaW5pdGlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UsIGFuZCBtYXkgZmFpbCBpbiBhcmJpdHJhcnkgd2F5cyB3aGVuIHJlbG9hZGVkLgorCisgICBJZiBhIG1vZHVsZSBpbXBvcnRzIG9iamVjdHMgZnJvbSBhbm90aGVyIG1vZHVsZSB1c2luZyA6a2V5d29yZDpgZnJvbWAgLi4uCisgICA6a2V5d29yZDpgaW1wb3J0YCAuLi4sIGNhbGxpbmcgOmZ1bmM6YHJlbG9hZGAgZm9yIHRoZSBvdGhlciBtb2R1bGUgZG9lcyBub3QKKyAgIHJlZGVmaW5lIHRoZSBvYmplY3RzIGltcG9ydGVkIGZyb20gaXQgLS0tIG9uZSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8KKyAgIHJlLWV4ZWN1dGUgdGhlIDprZXl3b3JkOmBmcm9tYCBzdGF0ZW1lbnQsIGFub3RoZXIgaXMgdG8gdXNlIDprZXl3b3JkOmBpbXBvcnRgCisgICBhbmQgcXVhbGlmaWVkIG5hbWVzICgqbW9kdWxlLm5hbWUqKSBpbnN0ZWFkLgorCisgICBJZiBhIG1vZHVsZSBpbnN0YW50aWF0ZXMgaW5zdGFuY2VzIG9mIGEgY2xhc3MsIHJlbG9hZGluZyB0aGUgbW9kdWxlIHRoYXQKKyAgIGRlZmluZXMgdGhlIGNsYXNzIGRvZXMgbm90IGFmZmVjdCB0aGUgbWV0aG9kIGRlZmluaXRpb25zIG9mIHRoZSBpbnN0YW5jZXMgLS0tCisgICB0aGV5IGNvbnRpbnVlIHRvIHVzZSB0aGUgb2xkIGNsYXNzIGRlZmluaXRpb24uICBUaGUgc2FtZSBpcyB0cnVlIGZvciBkZXJpdmVkCisgICBjbGFzc2VzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiA6bW9kOmBpbXBvcnRsaWIuYWJjYCAtLSBBYnN0cmFjdCBiYXNlIGNsYXNzZXMgcmVsYXRlZCB0byBpbXBvcnQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM3LDggKzIxNCw2IEBACiAgICAgICAgICAgICAgICArLS0gRXhlY3V0aW9uTG9hZGVyIC0tKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBGaWxlTG9hZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tIFNvdXJjZUxvYWRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tIFB5TG9hZGVyIChkZXByZWNhdGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tIFB5UHljTG9hZGVyIChkZXByZWNhdGVkKQogCiAKIC4uIGNsYXNzOjogRmluZGVyCkBAIC0xNTQsNiArMjI5LDEwIEBACiAgICAgICBtb2R1bGUuICBPcmlnaW5hbGx5IHNwZWNpZmllZCBpbiA6cGVwOmAzMDJgLCB0aGlzIG1ldGhvZCB3YXMgbWVhbnQKICAgICAgIGZvciB1c2UgaW4gOmRhdGE6YHN5cy5tZXRhX3BhdGhgIGFuZCBpbiB0aGUgcGF0aC1iYXNlZCBpbXBvcnQgc3Vic3lzdGVtLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgUmV0dXJucyBgYE5vbmVgYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAKIC4uIGNsYXNzOjogTWV0YVBhdGhGaW5kZXIKIApAQCAtMTYyLDIwICsyNDEsNDYgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIG1ldGhvZDo6IGZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCwgdGFyZ2V0PU5vbmUpCisKKyAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCBmb3IgZmluZGluZyBhIDp0ZXJtOmBzcGVjIDxtb2R1bGUgc3BlYz5gIGZvcgorICAgICAgdGhlIHNwZWNpZmllZCBtb2R1bGUuICBJZiB0aGlzIGlzIGEgdG9wLWxldmVsIGltcG9ydCwgKnBhdGgqIHdpbGwKKyAgICAgIGJlIGBgTm9uZWBgLiAgT3RoZXJ3aXNlLCB0aGlzIGlzIGEgc2VhcmNoIGZvciBhIHN1YnBhY2thZ2Ugb3IKKyAgICAgIG1vZHVsZSBhbmQgKnBhdGgqIHdpbGwgYmUgdGhlIHZhbHVlIG9mIDphdHRyOmBfX3BhdGhfX2AgZnJvbSB0aGUKKyAgICAgIHBhcmVudCBwYWNrYWdlLiBJZiBhIHNwZWMgY2Fubm90IGJlIGZvdW5kLCBgYE5vbmVgYCBpcyByZXR1cm5lZC4KKyAgICAgIFdoZW4gcGFzc2VkIGluLCBgYHRhcmdldGBgIGlzIGEgbW9kdWxlIG9iamVjdCB0aGF0IHRoZSBmaW5kZXIgbWF5CisgICAgICB1c2UgdG8gbWFrZSBhIG1vcmUgZWR1Y2F0ZWQgYWJvdXQgd2hhdCBzcGVjIHRvIHJldHVybi4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKICAgIC4uIG1ldGhvZDo6IGZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoKQogCi0gICAgICBBbiBhYnN0cmFjdCBtZXRob2QgZm9yIGZpbmRpbmcgYSA6dGVybTpgbG9hZGVyYCBmb3IgdGhlIHNwZWNpZmllZAorICAgICAgQSBsZWdhY3kgbWV0aG9kIGZvciBmaW5kaW5nIGEgOnRlcm06YGxvYWRlcmAgZm9yIHRoZSBzcGVjaWZpZWQKICAgICAgIG1vZHVsZS4gIElmIHRoaXMgaXMgYSB0b3AtbGV2ZWwgaW1wb3J0LCAqcGF0aCogd2lsbCBiZSBgYE5vbmVgYC4KICAgICAgIE90aGVyd2lzZSwgdGhpcyBpcyBhIHNlYXJjaCBmb3IgYSBzdWJwYWNrYWdlIG9yIG1vZHVsZSBhbmQgKnBhdGgqCiAgICAgICB3aWxsIGJlIHRoZSB2YWx1ZSBvZiA6YXR0cjpgX19wYXRoX19gIGZyb20gdGhlIHBhcmVudAogICAgICAgcGFja2FnZS4gSWYgYSBsb2FkZXIgY2Fubm90IGJlIGZvdW5kLCBgYE5vbmVgYCBpcyByZXR1cm5lZC4KIAorICAgICAgSWYgOm1ldGg6YGZpbmRfc3BlY2AgaXMgZGVmaW5lZCwgYmFja3dhcmRzLWNvbXBhdGlibGUgZnVuY3Rpb25hbGl0eSBpcworICAgICAgcHJvdmlkZWQuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBSZXR1cm5zIGBgTm9uZWBgIHdoZW4gY2FsbGVkIGluc3RlYWQgb2YgcmFpc2luZworICAgICAgICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuIENhbiB1c2UgOm1ldGg6YGZpbmRfc3BlY2AgdG8gcHJvdmlkZQorICAgICAgICAgZnVuY3Rpb25hbGl0eS4KKworICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICAgVXNlIDptZXRoOmBmaW5kX3NwZWNgIGluc3RlYWQuCisKICAgIC4uIG1ldGhvZDo6IGludmFsaWRhdGVfY2FjaGVzKCkKIAogICAgICAgQW4gb3B0aW9uYWwgbWV0aG9kIHdoaWNoLCB3aGVuIGNhbGxlZCwgc2hvdWxkIGludmFsaWRhdGUgYW55IGludGVybmFsCiAgICAgICBjYWNoZSB1c2VkIGJ5IHRoZSBmaW5kZXIuIFVzZWQgYnkgOmZ1bmM6YGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlc2AKICAgICAgIHdoZW4gaW52YWxpZGF0aW5nIHRoZSBjYWNoZXMgb2YgYWxsIGZpbmRlcnMgb24gOmRhdGE6YHN5cy5tZXRhX3BhdGhgLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgUmV0dXJucyBgYE5vbmVgYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mIGBgTm90SW1wbGVtZW50ZWRgYC4KKwogCiAuLiBjbGFzczo6IFBhdGhFbnRyeUZpbmRlcgogCkBAIC0xODMsMjcgKzI4OCw1MSBAQAogICAgaXQgYmVhcnMgc29tZSBzaW1pbGFyaXRpZXMgdG8gOmNsYXNzOmBNZXRhUGF0aEZpbmRlcmAsIGBgUGF0aEVudHJ5RmluZGVyYGAKICAgIGlzIG1lYW50IGZvciB1c2Ugb25seSB3aXRoaW4gdGhlIHBhdGgtYmFzZWQgaW1wb3J0IHN1YnN5c3RlbSBwcm92aWRlZAogICAgYnkgOmNsYXNzOmBQYXRoRmluZGVyYC4gVGhpcyBBQkMgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YEZpbmRlcmAgZm9yCi0gICBjb21wYXRpYmlsaXR5LgorICAgY29tcGF0aWJpbGl0eSByZWFzb25zIG9ubHkuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiBtZXRob2Q6OiBmaW5kX3NwZWMoZnVsbG5hbWUsIHRhcmdldD1Ob25lKQorCisgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgZm9yIGZpbmRpbmcgYSA6dGVybTpgc3BlYyA8bW9kdWxlIHNwZWM+YCBmb3IKKyAgICAgIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiAgVGhlIGZpbmRlciB3aWxsIHNlYXJjaCBmb3IgdGhlIG1vZHVsZSBvbmx5CisgICAgICB3aXRoaW4gdGhlIDp0ZXJtOmBwYXRoIGVudHJ5YCB0byB3aGljaCBpdCBpcyBhc3NpZ25lZC4gIElmIGEgc3BlYworICAgICAgY2Fubm90IGJlIGZvdW5kLCBgYE5vbmVgYCBpcyByZXR1cm5lZC4gIFdoZW4gcGFzc2VkIGluLCBgYHRhcmdldGBgCisgICAgICBpcyBhIG1vZHVsZSBvYmplY3QgdGhhdCB0aGUgZmluZGVyIG1heSB1c2UgdG8gbWFrZSBhIG1vcmUgZWR1Y2F0ZWQKKyAgICAgIGFib3V0IHdoYXQgc3BlYyB0byByZXR1cm4uCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAuLiBtZXRob2Q6OiBmaW5kX2xvYWRlcihmdWxsbmFtZSkKIAotICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIGZvciBmaW5kaW5nIGEgOnRlcm06YGxvYWRlcmAgZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgIEEgbGVnYWN5IG1ldGhvZCBmb3IgZmluZGluZyBhIDp0ZXJtOmBsb2FkZXJgIGZvciB0aGUgc3BlY2lmaWVkCiAgICAgICBtb2R1bGUuICBSZXR1cm5zIGEgMi10dXBsZSBvZiBgYChsb2FkZXIsIHBvcnRpb24pYGAgd2hlcmUgYGBwb3J0aW9uYGAKICAgICAgIGlzIGEgc2VxdWVuY2Ugb2YgZmlsZSBzeXN0ZW0gbG9jYXRpb25zIGNvbnRyaWJ1dGluZyB0byBwYXJ0IG9mIGEgbmFtZXNwYWNlCiAgICAgICBwYWNrYWdlLiBUaGUgbG9hZGVyIG1heSBiZSBgYE5vbmVgYCB3aGlsZSBzcGVjaWZ5aW5nIGBgcG9ydGlvbmBgIHRvCiAgICAgICBzaWduaWZ5IHRoZSBjb250cmlidXRpb24gb2YgdGhlIGZpbGUgc3lzdGVtIGxvY2F0aW9ucyB0byBhIG5hbWVzcGFjZQogICAgICAgcGFja2FnZS4gQW4gZW1wdHkgbGlzdCBjYW4gYmUgdXNlZCBmb3IgYGBwb3J0aW9uYGAgdG8gc2lnbmlmeSB0aGUgbG9hZGVyCi0gICAgICBpcyBub3QgcGFydCBvZiBhIHBhY2thZ2UuIElmIGBgbG9hZGVyYGAgaXMgYGBOb25lYGAgYW5kIGBgcG9ydGlvbmBgIGlzCi0gICAgICB0aGUgZW1wdHkgbGlzdCB0aGVuIG5vIGxvYWRlciBvciBsb2NhdGlvbiBmb3IgYSBuYW1lc3BhY2UgcGFja2FnZSB3ZXJlCi0gICAgICBmb3VuZCAoaS5lLiBmYWlsdXJlIHRvIGZpbmQgYW55dGhpbmcgZm9yIHRoZSBtb2R1bGUpLgorICAgICAgaXMgbm90IHBhcnQgb2YgYSBuYW1lc3BhY2UgcGFja2FnZS4gSWYgYGBsb2FkZXJgYCBpcyBgYE5vbmVgYCBhbmQKKyAgICAgIGBgcG9ydGlvbmBgIGlzIHRoZSBlbXB0eSBsaXN0IHRoZW4gbm8gbG9hZGVyIG9yIGxvY2F0aW9uIGZvciBhIG5hbWVzcGFjZQorICAgICAgcGFja2FnZSB3ZXJlIGZvdW5kIChpLmUuIGZhaWx1cmUgdG8gZmluZCBhbnl0aGluZyBmb3IgdGhlIG1vZHVsZSkuCisKKyAgICAgIElmIDptZXRoOmBmaW5kX3NwZWNgIGlzIGRlZmluZWQgdGhlbiBiYWNrd2FyZHMtY29tcGF0aWJsZSBmdW5jdGlvbmFsaXR5IGlzCisgICAgICBwcm92aWRlZC4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGAoTm9uZSwgW10pYGAgaW5zdGVhZCBvZiByYWlzaW5nIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorICAgICAgICAgVXNlcyA6bWV0aDpgZmluZF9zcGVjYCB3aGVuIGF2YWlsYWJsZSB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgIFVzZSA6bWV0aDpgZmluZF9zcGVjYCBpbnN0ZWFkLgogCiAgICAuLiBtZXRob2Q6OiBmaW5kX21vZHVsZShmdWxsbmFtZSkKIAogICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgRmluZGVyLmZpbmRfbW9kdWxlYCB3aGljaCBpcwogICAgICAgZXF1aXZhbGVudCB0byBgYHNlbGYuZmluZF9sb2FkZXIoZnVsbG5hbWUpWzBdYGAuCiAKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgIFVzZSA6bWV0aDpgZmluZF9zcGVjYCBpbnN0ZWFkLgorCiAgICAuLiBtZXRob2Q6OiBpbnZhbGlkYXRlX2NhY2hlcygpCiAKICAgICAgIEFuIG9wdGlvbmFsIG1ldGhvZCB3aGljaCwgd2hlbiBjYWxsZWQsIHNob3VsZCBpbnZhbGlkYXRlIGFueSBpbnRlcm5hbApAQCAtMjE2LDkgKzM0NSwyNiBAQAogICAgIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGEgOnRlcm06YGxvYWRlcmAuCiAgICAgU2VlIDpwZXA6YDMwMmAgZm9yIHRoZSBleGFjdCBkZWZpbml0aW9uIGZvciBhIGxvYWRlci4KIAorICAgIC4uIG1ldGhvZDo6IGNyZWF0ZV9tb2R1bGUoc3BlYykKKworICAgICAgIEFuIG9wdGlvbmFsIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIG1vZHVsZSBvYmplY3QgdG8gdXNlIHdoZW4KKyAgICAgICBpbXBvcnRpbmcgYSBtb2R1bGUuICBjcmVhdGVfbW9kdWxlKCkgbWF5IGFsc28gcmV0dXJuIGBgTm9uZWBgLAorICAgICAgIGluZGljYXRpbmcgdGhhdCB0aGUgZGVmYXVsdCBtb2R1bGUgY3JlYXRpb24gc2hvdWxkIHRha2UgcGxhY2UKKyAgICAgICBpbnN0ZWFkLgorCisgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgICAuLiBtZXRob2Q6OiBleGVjX21vZHVsZShtb2R1bGUpCisKKyAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdGhhdCBleGVjdXRlcyB0aGUgbW9kdWxlIGluIGl0cyBvd24gbmFtZXNwYWNlCisgICAgICAgd2hlbiBhIG1vZHVsZSBpcyBpbXBvcnRlZCBvciByZWxvYWRlZC4gIFRoZSBtb2R1bGUgc2hvdWxkIGFscmVhZHkKKyAgICAgICBiZSBpbml0aWFsaXplZCB3aGVuIGV4ZWNfbW9kdWxlKCkgaXMgY2FsbGVkLgorCisgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKICAgICAuLiBtZXRob2Q6OiBsb2FkX21vZHVsZShmdWxsbmFtZSkKIAotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgZm9yIGxvYWRpbmcgYSBtb2R1bGUuIElmIHRoZSBtb2R1bGUgY2Fubm90IGJlCisgICAgICAgIEEgbGVnYWN5IG1ldGhvZCBmb3IgbG9hZGluZyBhIG1vZHVsZS4gSWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUKICAgICAgICAgbG9hZGVkLCA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLCBvdGhlcndpc2UgdGhlIGxvYWRlZCBtb2R1bGUgaXMKICAgICAgICAgcmV0dXJuZWQuCiAKQEAgLTIyOSwxMiArMzc1LDExIEBACiAgICAgICAgIGZyb20gdGhlIGltcG9ydC4gSWYgdGhlIGxvYWRlciBpbnNlcnRlZCBhIG1vZHVsZSBhbmQgdGhlIGxvYWQgZmFpbHMsIGl0CiAgICAgICAgIG11c3QgYmUgcmVtb3ZlZCBieSB0aGUgbG9hZGVyIGZyb20gOmRhdGE6YHN5cy5tb2R1bGVzYDsgbW9kdWxlcyBhbHJlYWR5CiAgICAgICAgIGluIDpkYXRhOmBzeXMubW9kdWxlc2AgYmVmb3JlIHRoZSBsb2FkZXIgYmVnYW4gZXhlY3V0aW9uIHNob3VsZCBiZSBsZWZ0Ci0gICAgICAgIGFsb25lLiBUaGUgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBkZWNvcmF0b3IgaGFuZGxlcwotICAgICAgICBhbGwgb2YgdGhlc2UgZGV0YWlscy4KKyAgICAgICAgYWxvbmUgKHNlZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgKS4KIAogICAgICAgICBUaGUgbG9hZGVyIHNob3VsZCBzZXQgc2V2ZXJhbCBhdHRyaWJ1dGVzIG9uIHRoZSBtb2R1bGUuCiAgICAgICAgIChOb3RlIHRoYXQgc29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBjaGFuZ2Ugd2hlbiBhIG1vZHVsZSBpcwotICAgICAgICByZWxvYWRlZC4pCisgICAgICAgIHJlbG9hZGVkKToKIAogICAgICAgICAtIDphdHRyOmBfX25hbWVfX2AKICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCkBAIC0yNTQsMjAgKzM5OSw0MiBAQAogICAgICAgICAtIDphdHRyOmBfX3BhY2thZ2VfX2AKICAgICAgICAgICAgIFRoZSBwYXJlbnQgcGFja2FnZSBmb3IgdGhlIG1vZHVsZS9wYWNrYWdlLiBJZiB0aGUgbW9kdWxlIGlzCiAgICAgICAgICAgICB0b3AtbGV2ZWwgdGhlbiBpdCBoYXMgYSB2YWx1ZSBvZiB0aGUgZW1wdHkgc3RyaW5nLiBUaGUKLSAgICAgICAgICAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5zZXRfcGFja2FnZWAgZGVjb3JhdG9yIGNhbiBoYW5kbGUgdGhlIGRldGFpbHMKLSAgICAgICAgICAgIGZvciA6YXR0cjpgX19wYWNrYWdlX19gLgorICAgICAgICAgICAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBkZWNvcmF0b3IgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgICAgIGRldGFpbHMgZm9yIDphdHRyOmBfX3BhY2thZ2VfX2AuCiAKICAgICAgICAgLSA6YXR0cjpgX19sb2FkZXJfX2AKLSAgICAgICAgICAgIFRoZSBsb2FkZXIgdXNlZCB0byBsb2FkIHRoZSBtb2R1bGUuCi0gICAgICAgICAgICAoVGhpcyBpcyBub3Qgc2V0IGJ5IHRoZSBidWlsdC1pbiBpbXBvcnQgbWFjaGluZXJ5LAotICAgICAgICAgICAgYnV0IGl0IHNob3VsZCBiZSBzZXQgd2hlbmV2ZXIgYSA6dGVybTpgbG9hZGVyYCBpcyB1c2VkLikKKyAgICAgICAgICAgIFRoZSBsb2FkZXIgdXNlZCB0byBsb2FkIHRoZSBtb2R1bGUuIFRoZQorICAgICAgICAgICAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBkZWNvcmF0b3IgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgICAgIGRldGFpbHMgZm9yIDphdHRyOmBfX3BhY2thZ2VfX2AuCisKKyAgICAgICAgV2hlbiA6bWV0aDpgZXhlY19tb2R1bGVgIGlzIGF2YWlsYWJsZSB0aGVuIGJhY2t3YXJkcy1jb21wYXRpYmxlCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQuCisKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2UgOmV4YzpgSW1wb3J0RXJyb3JgIHdoZW4gY2FsbGVkIGluc3RlYWQgb2YKKyAgICAgICAgICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuIEZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgd2hlbgorICAgICAgICAgICA6bWV0aDpgZXhlY19tb2R1bGVgIGlzIGF2YWlsYWJsZS4KKworICAgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICAgIFRoZSByZWNvbW1lbmRlZCBBUEkgZm9yIGxvYWRpbmcgYSBtb2R1bGUgaXMgOm1ldGg6YGV4ZWNfbW9kdWxlYAorICAgICAgICAgICAoYW5kIG9wdGlvbmFsbHkgOm1ldGg6YGNyZWF0ZV9tb2R1bGVgKS4gIExvYWRlcnMgc2hvdWxkIGltcGxlbWVudAorICAgICAgICAgICBpdCBpbnN0ZWFkIG9mIGxvYWRfbW9kdWxlKCkuICBUaGUgaW1wb3J0IG1hY2hpbmVyeSB0YWtlcyBjYXJlIG9mCisgICAgICAgICAgIGFsbCB0aGUgb3RoZXIgcmVzcG9uc2liaWxpdGllcyBvZiBsb2FkX21vZHVsZSgpIHdoZW4gZXhlY19tb2R1bGUoKQorICAgICAgICAgICBpcyBpbXBsZW1lbnRlZC4KIAogICAgIC4uIG1ldGhvZDo6IG1vZHVsZV9yZXByKG1vZHVsZSkKIAotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZQotICAgICAgICBnaXZlbiBtb2R1bGUncyByZXByLCBhcyBhIHN0cmluZy4KKyAgICAgICAgQSBsZWdhY3kgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUKKyAgICAgICAgZ2l2ZW4gbW9kdWxlJ3MgcmVwciwgYXMgYSBzdHJpbmcuIFRoZSBtb2R1bGUgdHlwZSdzIGRlZmF1bHQgcmVwcigpIHdpbGwKKyAgICAgICAgdXNlIHRoZSByZXN1bHQgb2YgdGhpcyBtZXRob2QgYXMgYXBwcm9wcmlhdGUuCiAKLSAgICAgICAgLi4gdmVyc2lvbmFkZGVkOiAzLjMKKyAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgTWFkZSBvcHRpb25hbCBpbnN0ZWFkIG9mIGFuIGFic3RyYWN0bWV0aG9kLgorCisgICAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgICAgVGhlIGltcG9ydCBtYWNoaW5lcnkgbm93IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LgogCiAKIC4uIGNsYXNzOjogUmVzb3VyY2VMb2FkZXIKQEAgLTI4Niw2ICs0NTMsOSBAQAogICAgICAgICBiZSBmb3VuZC4gVGhlICpwYXRoKiBpcyBleHBlY3RlZCB0byBiZSBjb25zdHJ1Y3RlZCB1c2luZyBhIG1vZHVsZSdzCiAgICAgICAgIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIG9yIGFuIGl0ZW0gZnJvbSBhIHBhY2thZ2UncyA6YXR0cjpgX19wYXRoX19gLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlcyA6ZXhjOmBJT0Vycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAKIC4uIGNsYXNzOjogSW5zcGVjdExvYWRlcgogCkBAIC0yOTQsMTQgKzQ2NCwyMSBAQAogCiAgICAgLi4gbWV0aG9kOjogZ2V0X2NvZGUoZnVsbG5hbWUpCiAKLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRvIHJldHVybiB0aGUgOmNsYXNzOmBjb2RlYCBvYmplY3QgZm9yIGEgbW9kdWxlLgotICAgICAgICBgYE5vbmVgYCBpcyByZXR1cm5lZCBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGhhdmUgYSBjb2RlIG9iamVjdAotICAgICAgICAoZS5nLiBidWlsdC1pbiBtb2R1bGUpLiAgOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZCBpZiBsb2FkZXIgY2Fubm90Ci0gICAgICAgIGZpbmQgdGhlIHJlcXVlc3RlZCBtb2R1bGUuCisgICAgICAgIFJldHVybiB0aGUgY29kZSBvYmplY3QgZm9yIGEgbW9kdWxlLCBvciBgYE5vbmVgYCBpZiB0aGUgbW9kdWxlIGRvZXMgbm90CisgICAgICAgIGhhdmUgYSBjb2RlIG9iamVjdCAoYXMgd291bGQgYmUgdGhlIGNhc2UsIGZvciBleGFtcGxlLCBmb3IgYSBidWlsdC1pbgorICAgICAgICBtb2R1bGUpLiAgUmFpc2UgYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlmIGxvYWRlciBjYW5ub3QgZmluZCB0aGUKKyAgICAgICAgcmVxdWVzdGVkIG1vZHVsZS4KKworICAgICAgICAuLiBub3RlOjoKKyAgICAgICAgICAgV2hpbGUgdGhlIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCBpdCBpcyBzdWdnZXN0ZWQgdGhhdAorICAgICAgICAgICBpdCBiZSBvdmVycmlkZGVuIGlmIHBvc3NpYmxlIGZvciBwZXJmb3JtYW5jZS4KIAogICAgICAgICAuLiBpbmRleDo6CiAgICAgICAgICAgIHNpbmdsZTogdW5pdmVyc2FsIG5ld2xpbmVzOyBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZSBtZXRob2QKIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBObyBsb25nZXIgYWJzdHJhY3QgYW5kIGEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQuCisKICAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQogCiAgICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0byByZXR1cm4gdGhlIHNvdXJjZSBvZiBhIG1vZHVsZS4gSXQgaXMgcmV0dXJuZWQgYXMKQEAgLTMxMCwxMiArNDg3LDQyIEBACiAgICAgICAgIGlmIG5vIHNvdXJjZSBpcyBhdmFpbGFibGUgKGUuZy4gYSBidWlsdC1pbiBtb2R1bGUpLiBSYWlzZXMKICAgICAgICAgOmV4YzpgSW1wb3J0RXJyb3JgIGlmIHRoZSBsb2FkZXIgY2Fubm90IGZpbmQgdGhlIG1vZHVsZSBzcGVjaWZpZWQuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAgICAgLi4gbWV0aG9kOjogaXNfcGFja2FnZShmdWxsbmFtZSkKIAogICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdG8gcmV0dXJuIGEgdHJ1ZSB2YWx1ZSBpZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSwgYQogICAgICAgICBmYWxzZSB2YWx1ZSBvdGhlcndpc2UuIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQgaWYgdGhlCiAgICAgICAgIDp0ZXJtOmBsb2FkZXJgIGNhbm5vdCBmaW5kIHRoZSBtb2R1bGUuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCisgICAgLi4gbWV0aG9kOjogc291cmNlX3RvX2NvZGUoZGF0YSwgcGF0aD0nPHN0cmluZz4nKQorCisgICAgICAgIENyZWF0ZSBhIGNvZGUgb2JqZWN0IGZyb20gUHl0aG9uIHNvdXJjZS4KKworICAgICAgICBUaGUgKmRhdGEqIGFyZ3VtZW50IGNhbiBiZSB3aGF0ZXZlciB0aGUgOmZ1bmM6YGNvbXBpbGVgIGZ1bmN0aW9uCisgICAgICAgIHN1cHBvcnRzIChpLmUuIHN0cmluZyBvciBieXRlcykuIFRoZSAqcGF0aCogYXJndW1lbnQgc2hvdWxkIGJlCisgICAgICAgIHRoZSAicGF0aCIgdG8gd2hlcmUgdGhlIHNvdXJjZSBjb2RlIG9yaWdpbmF0ZWQgZnJvbSwgd2hpY2ggY2FuIGJlIGFuCisgICAgICAgIGFic3RyYWN0IGNvbmNlcHQgKGUuZy4gbG9jYXRpb24gaW4gYSB6aXAgZmlsZSkuCisKKyAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgICAuLiBtZXRob2Q6OiBleGVjX21vZHVsZShtb2R1bGUpCisKKyAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgTG9hZGVyLmV4ZWNfbW9kdWxlYC4KKworICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoZnVsbG5hbWUpCisKKyAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgTG9hZGVyLmxvYWRfbW9kdWxlYC4KKworICAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgICB1c2UgOm1ldGg6YGV4ZWNfbW9kdWxlYCBpbnN0ZWFkLgorCiAKIC4uIGNsYXNzOjogRXhlY3V0aW9uTG9hZGVyCiAKQEAgLTMzMyw2ICs1NDAsOSBAQAogICAgICAgICB0aGUgc291cmNlIGZpbGUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIGJ5dGVjb2RlIHdhcyB1c2VkIHRvIGxvYWQgdGhlCiAgICAgICAgIG1vZHVsZS4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZXMgOmV4YzpgSW1wb3J0RXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKIAogLi4gY2xhc3M6OiBGaWxlTG9hZGVyKGZ1bGxuYW1lLCBwYXRoKQogCkBAIC0zNTcsMTMgKzU2NywxNiBAQAogCiAgICAgICBDYWxscyBzdXBlcidzIGBgbG9hZF9tb2R1bGUoKWBgLgogCisgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICBVc2UgOm1ldGg6YExvYWRlci5leGVjX21vZHVsZWAgaW5zdGVhZC4KKwogICAgLi4gbWV0aG9kOjogZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQogCiAgICAgICBSZXR1cm5zIDphdHRyOmBwYXRoYC4KIAogICAgLi4gbWV0aG9kOjogZ2V0X2RhdGEocGF0aCkKIAotICAgICAgUmV0dXJucyB0aGUgb3BlbiwgYmluYXJ5IGZpbGUgZm9yICpwYXRoKi4KKyAgICAgIFJlYWRzICpwYXRoKiBhcyBhIGJpbmFyeSBmaWxlIGFuZCByZXR1cm5zIHRoZSBieXRlcyBmcm9tIGl0LgogCiAKIC4uIGNsYXNzOjogU291cmNlTG9hZGVyCkBAIC0zNzgsNyArNTkxLDggQEAKICAgICAgICAgICBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCiAKICAgICBUaGUgYWJzdHJhY3QgbWV0aG9kcyBkZWZpbmVkIGJ5IHRoaXMgY2xhc3MgYXJlIHRvIGFkZCBvcHRpb25hbCBieXRlY29kZQotICAgIGZpbGUgc3VwcG9ydC4gTm90IGltcGxlbWVudGluZyB0aGVzZSBvcHRpb25hbCBtZXRob2RzIGNhdXNlcyB0aGUgbG9hZGVyIHRvCisgICAgZmlsZSBzdXBwb3J0LiBOb3QgaW1wbGVtZW50aW5nIHRoZXNlIG9wdGlvbmFsIG1ldGhvZHMgKG9yIGNhdXNpbmcgdGhlbSB0bworICAgIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgKSBjYXVzZXMgdGhlIGxvYWRlciB0bwogICAgIG9ubHkgd29yayB3aXRoIHNvdXJjZSBjb2RlLiBJbXBsZW1lbnRpbmcgdGhlIG1ldGhvZHMgYWxsb3dzIHRoZSBsb2FkZXIgdG8KICAgICB3b3JrIHdpdGggc291cmNlICphbmQqIGJ5dGVjb2RlIGZpbGVzOyBpdCBkb2VzIG5vdCBhbGxvdyBmb3IgKnNvdXJjZWxlc3MqCiAgICAgbG9hZGluZyB3aGVyZSBvbmx5IGJ5dGVjb2RlIGlzIHByb3ZpZGVkLiAgQnl0ZWNvZGUgZmlsZXMgYXJlIGFuCkBAIC0zOTUsMTAgKzYwOSwxMyBAQAogICAgICAgICAtIGBgJ3NpemUnYGAgKG9wdGlvbmFsKTogdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBjb2RlLgogCiAgICAgICAgIEFueSBvdGhlciBrZXlzIGluIHRoZSBkaWN0aW9uYXJ5IGFyZSBpZ25vcmVkLCB0byBhbGxvdyBmb3IgZnV0dXJlCi0gICAgICAgIGV4dGVuc2lvbnMuCisgICAgICAgIGV4dGVuc2lvbnMuIElmIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLCA6ZXhjOmBJT0Vycm9yYCBpcyByYWlzZWQuCiAKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2UgOmV4YzpgSU9FcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogICAgIC4uIG1ldGhvZDo6IHBhdGhfbXRpbWUocGF0aCkKIAogICAgICAgICBPcHRpb25hbCBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZQpAQCAtNDA3LDcgKzYyNCwxMCBAQAogICAgICAgICAuLiBkZXByZWNhdGVkOjogMy4zCiAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIDptZXRoOmBwYXRoX3N0YXRzYC4gIFlvdSBkb24ndAogICAgICAgICAgICBoYXZlIHRvIGltcGxlbWVudCBpdCwgYnV0IGl0IGlzIHN0aWxsIGF2YWlsYWJsZSBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICAgICBwdXJwb3Nlcy4KKyAgICAgICAgICAgcHVycG9zZXMuIFJhaXNlIDpleGM6YElPRXJyb3JgIGlmIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLgorCisgICAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgICBSYWlzZSA6ZXhjOmBJT0Vycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCiAgICAgLi4gbWV0aG9kOjogc2V0X2RhdGEocGF0aCwgZGF0YSkKIApAQCAtNDE5LDEzICs2MzksMjUgQEAKICAgICAgICAgKDphdHRyOmBlcnJuby5FQUNDRVNgLzpleGM6YFBlcm1pc3Npb25FcnJvcmApLCBkbyBub3QgcHJvcGFnYXRlIHRoZQogICAgICAgICBleGNlcHRpb24uCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgTm8gbG9uZ2VyIHJhaXNlcyA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCB3aGVuIGNhbGxlZC4KKwogICAgIC4uIG1ldGhvZDo6IGdldF9jb2RlKGZ1bGxuYW1lKQogCiAgICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBJbnNwZWN0TG9hZGVyLmdldF9jb2RlYC4KIAorICAgIC4uIG1ldGhvZDo6IGV4ZWNfbW9kdWxlKG1vZHVsZSkKKworICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBMb2FkZXIuZXhlY19tb2R1bGVgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQogCi0gICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBMb2FkZXIubG9hZF9tb2R1bGVgLgorICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBMb2FkZXIubG9hZF9tb2R1bGVgLgorCisgICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICAgIFVzZSA6bWV0aDpgZXhlY19tb2R1bGVgIGluc3RlYWQuCiAKICAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQogCkBAIC00NDAsMTQyICs2NzIsNiBAQAogICAgICAgICBpdHNlbGYgZG9lcyBub3QgZW5kIGluIGBgX19pbml0X19gYC4KIAogCi0uLiBjbGFzczo6IFB5TG9hZGVyCi0KLSAgICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGluaGVyaXRpbmcgZnJvbQotICAgIDpjbGFzczpgRXhlY3V0aW9uTG9hZGVyYCBhbmQKLSAgICA6Y2xhc3M6YFJlc291cmNlTG9hZGVyYCBkZXNpZ25lZCB0byBlYXNlIHRoZSBsb2FkaW5nIG9mCi0gICAgUHl0aG9uIHNvdXJjZSBtb2R1bGVzIChieXRlY29kZSBpcyBub3QgaGFuZGxlZDsgc2VlCi0gICAgOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGZvciBhIHNvdXJjZS9ieXRlY29kZSBBQkMpLiBBIHN1YmNsYXNzCi0gICAgaW1wbGVtZW50aW5nIHRoaXMgQUJDIHdpbGwgb25seSBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cG9zaW5nIGhvdyB0aGUgc291cmNlCi0gICAgY29kZSBpcyBzdG9yZWQ7IGFsbCBvdGhlciBkZXRhaWxzIGZvciBsb2FkaW5nIFB5dGhvbiBzb3VyY2UgY29kZSB3aWxsIGJlCi0gICAgaGFuZGxlZCBieSB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIGtleSBtZXRob2RzLgotCi0gICAgLi4gZGVwcmVjYXRlZDo6IDMuMgotICAgICAgICBUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGFuZCBpcwotICAgICAgICBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNC4gU2VlIGJlbG93IGZvciBob3cgdG8gY3JlYXRlIGEKLSAgICAgICAgc3ViY2xhc3MgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMuMSBvbndhcmRzLgotCi0gICAgSWYgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjEgaXMgcmVxdWlyZWQsIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgaWRpb20KLSAgICB0byBpbXBsZW1lbnQgYSBzdWJjbGFzcyB0aGF0IHdpbGwgd29yayB3aXRoIFB5dGhvbiAzLjEgb253YXJkcyAobWFrZSBzdXJlCi0gICAgdG8gaW1wbGVtZW50IDptZXRoOmBFeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCk6OgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgU291cmNlTG9hZGVyCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgUHlMb2FkZXIgYXMgU291cmNlTG9hZGVyCi0KLQotICAgICAgICBjbGFzcyBDdXN0b21Mb2FkZXIoU291cmNlTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgc291cmNlIGZpbGUuIiIiCi0gICAgICAgICAgICAgICAgIyBJbXBsZW1lbnQgLi4uCi0KLSAgICAgICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgIiIiSW1wbGVtZW50IHNvdXJjZV9wYXRoIGluIHRlcm1zIG9mIGdldF9maWxlbmFtZS4iIiIKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICAiIiJJbXBsZW1lbnQgaXNfcGFja2FnZSBieSBsb29raW5nIGZvciBhbiBfX2luaXRfXyBmaWxlCi0gICAgICAgICAgICAgICAgbmFtZSBhcyByZXR1cm5lZCBieSBnZXRfZmlsZW5hbWUuIiIiCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gPT0gJ19faW5pdF9fJwotCi0KLSAgICAuLiBtZXRob2Q6OiBzb3VyY2VfcGF0aChmdWxsbmFtZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgY29kZSBmb3IgYQotICAgICAgICBtb2R1bGUuIFNob3VsZCByZXR1cm4gYGBOb25lYGAgaWYgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUuCi0gICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaWYgdGhlIGxvYWRlciBrbm93cyBpdCBjYW5ub3QgaGFuZGxlIHRoZQotICAgICAgICBtb2R1bGUuCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCB0aGF0Ci0gICAgICAgIHJlbGllcyBvbiA6bWV0aDpgc291cmNlX3BhdGhgLiBJZiA6bWV0aDpgc291cmNlX3BhdGhgIHJldHVybnMKLSAgICAgICAgYGBOb25lYGAsIHRoZW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KLQotICAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQotCi0gICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYAotICAgICAgICB0aGF0IGxvYWRzIFB5dGhvbiBzb3VyY2UgY29kZS4gQWxsIG5lZWRlZCBpbmZvcm1hdGlvbiBjb21lcyBmcm9tIHRoZQotICAgICAgICBhYnN0cmFjdCBtZXRob2RzIHJlcXVpcmVkIGJ5IHRoaXMgQUJDLiBUaGUgb25seSBwZXJ0aW5lbnQgYXNzdW1wdGlvbgotICAgICAgICBtYWRlIGJ5IHRoaXMgbWV0aG9kIGlzIHRoYXQgd2hlbiBsb2FkaW5nIGEgcGFja2FnZQotICAgICAgICA6YXR0cjpgX19wYXRoX19gIGlzIHNldCB0byBgYFtvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pXWBgLgotCi0gICAgLi4gbWV0aG9kOjogZ2V0X2NvZGUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9jb2RlYCB0aGF0IGNyZWF0ZXMgY29kZSBvYmplY3RzCi0gICAgICAgIGZyb20gUHl0aG9uIHNvdXJjZSBjb2RlLCBieSByZXF1ZXN0aW5nIHRoZSBzb3VyY2UgY29kZSAodXNpbmcKLSAgICAgICAgOm1ldGg6YHNvdXJjZV9wYXRoYCBhbmQgOm1ldGg6YGdldF9kYXRhYCkgYW5kIGNvbXBpbGluZyBpdCB3aXRoIHRoZQotICAgICAgICBidWlsdC1pbiA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24uCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQotCi0gICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YKLSAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfc291cmNlYC4gVXNlcwotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5SZXNvdXJjZUxvYWRlci5nZXRfZGF0YWAgYW5kIDptZXRoOmBzb3VyY2VfcGF0aGAKLSAgICAgICAgdG8gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEl0IHRyaWVzIHRvIGd1ZXNzIHRoZSBzb3VyY2UgZW5jb2RpbmcgdXNpbmcKLSAgICAgICAgOmZ1bmM6YHRva2VuaXplLmRldGVjdF9lbmNvZGluZ2AuCi0KLQotLi4gY2xhc3M6OiBQeVB5Y0xvYWRlcgotCi0gICAgQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBQeUxvYWRlcmAuCi0gICAgVGhpcyBBQkMgaXMgbWVhbnQgdG8gaGVscCBpbiBjcmVhdGluZyBsb2FkZXJzIHRoYXQgc3VwcG9ydCBib3RoIFB5dGhvbgotICAgIHNvdXJjZSBhbmQgYnl0ZWNvZGUuCi0KLSAgICAuLiBkZXByZWNhdGVkOjogMy4yCi0gICAgICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIHRvCi0gICAgICAgIHByb3Blcmx5IHN1cHBvcnQgOnBlcDpgMzE0N2AuIElmIGNvbXBhdGliaWxpdHkgaXMgcmVxdWlyZWQgd2l0aAotICAgICAgICBQeXRob24gMy4xLCBpbXBsZW1lbnQgYm90aCA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIDpjbGFzczpgUHlMb2FkZXJgOwotICAgICAgICBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGRvIHNvIGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKLSAgICAgICAgOmNsYXNzOmBQeUxvYWRlcmAuIERvIG5vdGUgdGhhdCB0aGlzIHNvbHV0aW9uIHdpbGwgbm90IHN1cHBvcnQKLSAgICAgICAgc291cmNlbGVzcy9ieXRlY29kZS1vbmx5IGxvYWRpbmc7IG9ubHkgc291cmNlICphbmQqIGJ5dGVjb2RlIGxvYWRpbmcuCi0KLSAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgICAgIFVwZGF0ZWQgdG8gcGFyc2UgKGJ1dCBub3QgdXNlKSB0aGUgbmV3IHNvdXJjZSBzaXplIGZpZWxkIGluIGJ5dGVjb2RlCi0gICAgICAgZmlsZXMgd2hlbiByZWFkaW5nIGFuZCB0byB3cml0ZSBvdXQgdGhlIGZpZWxkIHByb3Blcmx5IHdoZW4gd3JpdGluZy4KLQotICAgIC4uIG1ldGhvZDo6IHNvdXJjZV9tdGltZShmdWxsbmFtZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZSBzb3VyY2UKLSAgICAgICAgY29kZSBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHNob3VsZCBiZSBhbgotICAgICAgICBpbnRlZ2VyLiBJZiB0aGVyZSBpcyBubyBzb3VyY2UgY29kZSwgcmV0dXJuIGBgTm9uZWBgLiBJZiB0aGUKLSAgICAgICAgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZCB0aGVuIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCi0KLSAgICAuLiBtZXRob2Q6OiBieXRlY29kZV9wYXRoKGZ1bGxuYW1lKQotCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBieXRlY29kZSBmb3IgdGhlCi0gICAgICAgIHNwZWNpZmllZCBtb2R1bGUsIGlmIGl0IGV4aXN0cy4gSXQgcmV0dXJucyBgYE5vbmVgYAotICAgICAgICBpZiBubyBieXRlY29kZSBleGlzdHMgKHlldCkuCi0gICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaWYgdGhlIGxvYWRlciBrbm93cyBpdCBjYW5ub3QgaGFuZGxlIHRoZQotICAgICAgICBtb2R1bGUuCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgRXhlY3V0aW9uTG9hZGVyLmdldF9maWxlbmFtZWAgdGhhdCByZWxpZXMgb24KLSAgICAgICAgOm1ldGg6YFB5TG9hZGVyLnNvdXJjZV9wYXRoYCBhbmQgOm1ldGg6YGJ5dGVjb2RlX3BhdGhgLgotICAgICAgICBJZiA6bWV0aDpgc291cmNlX3BhdGhgIHJldHVybnMgYSBwYXRoLCB0aGVuIHRoYXQgdmFsdWUgaXMgcmV0dXJuZWQuCi0gICAgICAgIEVsc2UgaWYgOm1ldGg6YGJ5dGVjb2RlX3BhdGhgIHJldHVybnMgYSBwYXRoLCB0aGF0IHBhdGggd2lsbCBiZQotICAgICAgICByZXR1cm5lZC4gSWYgYSBwYXRoIGlzIG5vdCBhdmFpbGFibGUgZnJvbSBib3RoIG1ldGhvZHMsCi0gICAgICAgIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCi0KLSAgICAuLiBtZXRob2Q6OiB3cml0ZV9ieXRlY29kZShmdWxsbmFtZSwgYnl0ZWNvZGUpCi0KLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIGhhcyB0aGUgbG9hZGVyIHdyaXRlICpieXRlY29kZSogZm9yIGZ1dHVyZQotICAgICAgICB1c2UuIElmIHRoZSBieXRlY29kZSBpcyB3cml0dGVuLCByZXR1cm4gYGBUcnVlYGAuIFJldHVybgotICAgICAgICBgYEZhbHNlYGAgaWYgdGhlIGJ5dGVjb2RlIGNvdWxkIG5vdCBiZSB3cml0dGVuLiBUaGlzIG1ldGhvZAotICAgICAgICBzaG91bGQgbm90IGJlIGNhbGxlZCBpZiA6ZGF0YTpgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGVgIGlzIHRydWUuCi0gICAgICAgIFRoZSAqYnl0ZWNvZGUqIGFyZ3VtZW50IHNob3VsZCBiZSBhIGJ5dGVzIHN0cmluZyBvciBieXRlcyBhcnJheS4KLQotCiA6bW9kOmBpbXBvcnRsaWIubWFjaGluZXJ5YCAtLSBJbXBvcnRlcnMgYW5kIHBhdGggaG9va3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC02NDIsNiArNzM4LDEwIEBACiAgICAgT25seSBjbGFzcyBtZXRob2RzIGFyZSBkZWZpbmVkIGJ5IHRoaXMgY2xhc3MgdG8gYWxsZXZpYXRlIHRoZSBuZWVkIGZvcgogICAgIGluc3RhbnRpYXRpb24uCiAKKyAgICAuLiBub3RlOjoKKyAgICAgICBEdWUgdG8gbGltaXRhdGlvbnMgaW4gdGhlIGV4dGVuc2lvbiBtb2R1bGUgQy1BUEksIGZvciBub3cKKyAgICAgICBCdWlsdGluSW1wb3J0ZXIgZG9lcyBub3QgaW1wbGVtZW50IDptZXRoOmBMb2FkZXIuZXhlY19tb2R1bGVgLgorCiAKIC4uIGNsYXNzOjogRnJvemVuSW1wb3J0ZXIKIApAQCAtNjcyLDI0ICs3NzIsMzcgQEAKICAgIE9ubHkgY2xhc3MgbWV0aG9kcyBhcmUgZGVmaW5lZCBieSB0aGlzIGNsYXNzIHRvIGFsbGV2aWF0ZSB0aGUgbmVlZCBmb3IKICAgIGluc3RhbnRpYXRpb24uCiAKKyAgIC4uIGNsYXNzbWV0aG9kOjogZmluZF9zcGVjKGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKQorCisgICAgICBDbGFzcyBtZXRob2QgdGhhdCBhdHRlbXB0cyB0byBmaW5kIGEgOnRlcm06YHNwZWMgPG1vZHVsZSBzcGVjPmAKKyAgICAgIGZvciB0aGUgbW9kdWxlIHNwZWNpZmllZCBieSAqZnVsbG5hbWUqIG9uIDpkYXRhOmBzeXMucGF0aGAgb3IsIGlmCisgICAgICBkZWZpbmVkLCBvbiAqcGF0aCouIEZvciBlYWNoIHBhdGggZW50cnkgdGhhdCBpcyBzZWFyY2hlZCwKKyAgICAgIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgaXMgY2hlY2tlZC4gSWYgYSBub24tZmFsc2Ugb2JqZWN0CisgICAgICBpcyBmb3VuZCB0aGVuIGl0IGlzIHVzZWQgYXMgdGhlIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAgdG8gbG9vaworICAgICAgZm9yIHRoZSBtb2R1bGUgYmVpbmcgc2VhcmNoZWQgZm9yLiBJZiBubyBlbnRyeSBpcyBmb3VuZCBpbgorICAgICAgOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCwgdGhlbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIGlzCisgICAgICBzZWFyY2hlZCBmb3IgYSBmaW5kZXIgZm9yIHRoZSBwYXRoIGVudHJ5IGFuZCwgaWYgZm91bmQsIGlzIHN0b3JlZAorICAgICAgaW4gOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCBhbG9uZyB3aXRoIGJlaW5nIHF1ZXJpZWQgYWJvdXQKKyAgICAgIHRoZSBtb2R1bGUuIElmIG5vIGZpbmRlciBpcyBldmVyIGZvdW5kIHRoZW4gYGBOb25lYGAgaXMgYm90aAorICAgICAgc3RvcmVkIGluIHRoZSBjYWNoZSBhbmQgcmV0dXJuZWQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAuLiBjbGFzc21ldGhvZDo6IGZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoPU5vbmUpCiAKLSAgICAgQ2xhc3MgbWV0aG9kIHRoYXQgYXR0ZW1wdHMgdG8gZmluZCBhIDp0ZXJtOmBsb2FkZXJgIGZvciB0aGUgbW9kdWxlCi0gICAgIHNwZWNpZmllZCBieSAqZnVsbG5hbWUqIG9uIDpkYXRhOmBzeXMucGF0aGAgb3IsIGlmIGRlZmluZWQsIG9uCi0gICAgICpwYXRoKi4gRm9yIGVhY2ggcGF0aCBlbnRyeSB0aGF0IGlzIHNlYXJjaGVkLAotICAgICA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIGlzIGNoZWNrZWQuIElmIGEgbm9uLWZhbHNlIG9iamVjdCBpcwotICAgICBmb3VuZCB0aGVuIGl0IGlzIHVzZWQgYXMgdGhlIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAgdG8gbG9vayBmb3IgdGhlCi0gICAgIG1vZHVsZSBiZWluZyBzZWFyY2hlZCBmb3IuIElmIG5vIGVudHJ5IGlzIGZvdW5kIGluCi0gICAgIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAsIHRoZW4gOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCBpcwotICAgICBzZWFyY2hlZCBmb3IgYSBmaW5kZXIgZm9yIHRoZSBwYXRoIGVudHJ5IGFuZCwgaWYgZm91bmQsIGlzIHN0b3JlZCBpbgotICAgICA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIGFsb25nIHdpdGggYmVpbmcgcXVlcmllZCBhYm91dCB0aGUKLSAgICAgbW9kdWxlLiBJZiBubyBmaW5kZXIgaXMgZXZlciBmb3VuZCB0aGVuIGBgTm9uZWBgIGlzIGJvdGggc3RvcmVkIGluCi0gICAgIHRoZSBjYWNoZSBhbmQgcmV0dXJuZWQuCisgICAgICBBIGxlZ2FjeSB3cmFwcGVyIGFyb3VuZCA6bWV0aDpgZmluZF9zcGVjYC4KKworICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICAgVXNlIDptZXRoOmBmaW5kX3NwZWNgIGluc3RlYWQuCiAKICAgIC4uIGNsYXNzbWV0aG9kOjogaW52YWxpZGF0ZV9jYWNoZXMoKQogCi0gICAgIENhbGxzIDptZXRoOmBpbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5pbnZhbGlkYXRlX2NhY2hlc2Agb24gYWxsCi0gICAgIGZpbmRlcnMgc3RvcmVkIGluIDphdHRyOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAuCisgICAgICBDYWxscyA6bWV0aDpgaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuaW52YWxpZGF0ZV9jYWNoZXNgIG9uIGFsbAorICAgICAgZmluZGVycyBzdG9yZWQgaW4gOmF0dHI6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIENhbGxzIG9iamVjdHMgaW4gOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCB3aXRoIHRoZSBjdXJyZW50IHdvcmtpbmcKKyAgICAgIGRpcmVjdG9yeSBmb3IgYGAnJ2BgIChpLmUuIHRoZSBlbXB0eSBzdHJpbmcpLgogCiAKIC4uIGNsYXNzOjogRmlsZUZpbmRlcihwYXRoLCBcKmxvYWRlcl9kZXRhaWxzKQpAQCAtNzIxLDYgKzgzNCwxMiBAQAogCiAgICAgICBUaGUgcGF0aCB0aGUgZmluZGVyIHdpbGwgc2VhcmNoIGluLgogCisgICAuLiBtZXRob2Q6OiBmaW5kX3NwZWMoZnVsbG5hbWUsIHRhcmdldD1Ob25lKQorCisgICAgICBBdHRlbXB0IHRvIGZpbmQgdGhlIHNwZWMgdG8gaGFuZGxlICpmdWxsbmFtZSogd2l0aGluIDphdHRyOmBwYXRoYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKICAgIC4uIG1ldGhvZDo6IGZpbmRfbG9hZGVyKGZ1bGxuYW1lKQogCiAgICAgICBBdHRlbXB0IHRvIGZpbmQgdGhlIGxvYWRlciB0byBoYW5kbGUgKmZ1bGxuYW1lKiB3aXRoaW4gOmF0dHI6YHBhdGhgLgpAQCAtODA1LDcgKzkyNCw3IEBACiAKIC4uIGNsYXNzOjogRXh0ZW5zaW9uRmlsZUxvYWRlcihmdWxsbmFtZSwgcGF0aCkKIAotICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6Y2xhc3M6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlcmAgZm9yCisgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXJgIGZvcgogICAgZXh0ZW5zaW9uIG1vZHVsZXMuCiAKICAgIFRoZSAqZnVsbG5hbWUqIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBsb2FkZXIgaXMgdG8KQEAgLTgyNiw2ICs5NDUsMTAgQEAKICAgICAgIExvYWRzIHRoZSBleHRlbnNpb24gbW9kdWxlIGlmIGFuZCBvbmx5IGlmICpmdWxsbmFtZSogaXMgdGhlIHNhbWUgYXMKICAgICAgIDphdHRyOmBuYW1lYCBvciBpcyBgYE5vbmVgYC4KIAorICAgICAgLi4gbm90ZTo6CisgICAgICAgICBEdWUgdG8gbGltaXRhdGlvbnMgaW4gdGhlIGV4dGVuc2lvbiBtb2R1bGUgQy1BUEksIGZvciBub3cKKyAgICAgICAgIEV4dGVuc2lvbkZpbGVMb2FkZXIgZG9lcyBub3QgaW1wbGVtZW50IDptZXRoOmBMb2FkZXIuZXhlY19tb2R1bGVgLgorCiAgICAuLiBtZXRob2Q6OiBpc19wYWNrYWdlKGZ1bGxuYW1lKQogCiAgICAgICBSZXR1cm5zIGBgVHJ1ZWBgIGlmIHRoZSBmaWxlIHBhdGggcG9pbnRzIHRvIGEgcGFja2FnZSdzIGBgX19pbml0X19gYApAQCAtODM5LDYgKzk2Miw3MCBAQAogCiAgICAgICBSZXR1cm5zIGBgTm9uZWBgIGFzIGV4dGVuc2lvbiBtb2R1bGVzIGRvIG5vdCBoYXZlIHNvdXJjZSBjb2RlLgogCisgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisKKyAgICAgIFJldHVybnMgOmF0dHI6YHBhdGhgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBjbGFzczo6IE1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCAqLCBvcmlnaW49Tm9uZSwgbG9hZGVyX3N0YXRlPU5vbmUsIGlzX3BhY2thZ2U9Tm9uZSkKKworICAgQSBzcGVjaWZpY2F0aW9uIGZvciBhIG1vZHVsZSdzIGltcG9ydC1zeXN0ZW0tcmVsYXRlZCBzdGF0ZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIC4uIGF0dHJpYnV0ZTo6IG5hbWUKKworICAgKGBgX19uYW1lX19gYCkKKworICAgQSBzdHJpbmcgZm9yIHRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlLgorCisgICAuLiBhdHRyaWJ1dGU6OiBsb2FkZXIKKworICAgKGBgX19sb2FkZXJfX2BgKQorCisgICBUaGUgbG9hZGVyIHRvIHVzZSBmb3IgbG9hZGluZy4gIEZvciBuYW1lc3BhY2UgcGFja2FnZXMgdGhpcyBzaG91bGQgYmUKKyAgIHNldCB0byBOb25lLgorCisgICAuLiBhdHRyaWJ1dGU6OiBvcmlnaW4KKworICAgKGBgX19maWxlX19gYCkKKworICAgTmFtZSBvZiB0aGUgcGxhY2UgZnJvbSB3aGljaCB0aGUgbW9kdWxlIGlzIGxvYWRlZCwgZS5nLiAiYnVpbHRpbiIgZm9yCisgICBidWlsdC1pbiBtb2R1bGVzIGFuZCB0aGUgZmlsZW5hbWUgZm9yIG1vZHVsZXMgbG9hZGVkIGZyb20gc291cmNlLgorICAgTm9ybWFsbHkgIm9yaWdpbiIgc2hvdWxkIGJlIHNldCwgYnV0IGl0IG1heSBiZSBOb25lICh0aGUgZGVmYXVsdCkKKyAgIHdoaWNoIGluZGljYXRlcyBpdCBpcyB1bnNwZWNpZmllZC4KKworICAgLi4gYXR0cmlidXRlOjogc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKworICAgKGBgX19wYXRoX19gYCkKKworICAgTGlzdCBvZiBzdHJpbmdzIGZvciB3aGVyZSB0byBmaW5kIHN1Ym1vZHVsZXMsIGlmIGEgcGFja2FnZSAoTm9uZQorICAgb3RoZXJ3aXNlKS4KKworICAgLi4gYXR0cmlidXRlOjogbG9hZGVyX3N0YXRlCisKKyAgIENvbnRhaW5lciBvZiBleHRyYSBtb2R1bGUtc3BlY2lmaWMgZGF0YSBmb3IgdXNlIGR1cmluZyBsb2FkaW5nIChvcgorICAgTm9uZSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGNhY2hlZAorCisgICAoYGBfX2NhY2hlZF9fYGApCisKKyAgIFN0cmluZyBmb3Igd2hlcmUgdGhlIGNvbXBpbGVkIG1vZHVsZSBzaG91bGQgYmUgc3RvcmVkIChvciBOb25lKS4KKworICAgLi4gYXR0cmlidXRlOjogcGFyZW50CisKKyAgIChgYF9fcGFja2FnZV9fYGApCisKKyAgIChSZWFkLW9ubHkpIEZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIHdoaWNoIHRoZSBtb2R1bGUKKyAgIGJlbG9uZ3MgYXMgYSBzdWJtb2R1bGUgKG9yIE5vbmUpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBoYXNfbG9jYXRpb24KKworICAgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBtb2R1bGUncyAib3JpZ2luIgorICAgYXR0cmlidXRlIHJlZmVycyB0byBhIGxvYWRhYmxlIGxvY2F0aW9uLgogCiA6bW9kOmBpbXBvcnRsaWIudXRpbGAgLS0gVXRpbGl0eSBjb2RlIGZvciBpbXBvcnRlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODQ5LDYgKzEwMzYsNTEgQEAKIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSB2YXJpb3VzIG9iamVjdHMgdGhhdCBoZWxwIGluIHRoZSBjb25zdHJ1Y3Rpb24gb2YKIGFuIDp0ZXJtOmBpbXBvcnRlcmAuCiAKKy4uIGF0dHJpYnV0ZTo6IE1BR0lDX05VTUJFUgorCisgICBUaGUgYnl0ZXMgd2hpY2ggcmVwcmVzZW50IHRoZSBieXRlY29kZSB2ZXJzaW9uIG51bWJlci4gSWYgeW91IG5lZWQgaGVscCB3aXRoCisgICBsb2FkaW5nL3dyaXRpbmcgYnl0ZWNvZGUgdGhlbiBjb25zaWRlciA6Y2xhc3M6YGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGU9Tm9uZSkKKworICAgUmV0dXJuIHRoZSA6cGVwOmAzMTQ3YCBwYXRoIHRvIHRoZSBieXRlLWNvbXBpbGVkIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgc291cmNlICpwYXRoKi4gIEZvciBleGFtcGxlLCBpZiAqcGF0aCogaXMgYGAvZm9vL2Jhci9iYXoucHlgYCB0aGUgcmV0dXJuCisgICB2YWx1ZSB3b3VsZCBiZSBgYC9mb28vYmFyL19fcHljYWNoZV9fL2Jhei5jcHl0aG9uLTMyLnB5Y2BgIGZvciBQeXRob24gMy4yLgorICAgVGhlIGBgY3B5dGhvbi0zMmBgIHN0cmluZyBjb21lcyBmcm9tIHRoZSBjdXJyZW50IG1hZ2ljIHRhZyAoc2VlCisgICA6ZnVuYzpgZ2V0X3RhZ2A7IGlmIDphdHRyOmBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnYCBpcyBub3QgZGVmaW5lZCB0aGVuCisgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCB3aWxsIGJlIHJhaXNlZCkuICBUaGUgcmV0dXJuZWQgcGF0aCB3aWxsIGVuZCBpbgorICAgYGAucHljYGAgd2hlbiBgYF9fZGVidWdfX2BgIGlzIGBgVHJ1ZWBgIG9yIGBgLnB5b2BgIGZvciBhbiBvcHRpbWl6ZWQgUHl0aG9uCisgICAoaS5lLiBgYF9fZGVidWdfX2BgIGlzIGBgRmFsc2VgYCkuICBCeSBwYXNzaW5nIGluIGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYCBmb3IKKyAgICpkZWJ1Z19vdmVycmlkZSogeW91IGNhbiBvdmVycmlkZSB0aGUgc3lzdGVtJ3MgdmFsdWUgZm9yIGBgX19kZWJ1Z19fYGAgZm9yCisgICBleHRlbnNpb24gc2VsZWN0aW9uLgorCisgICAqcGF0aCogbmVlZCBub3QgZXhpc3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogc291cmNlX2Zyb21fY2FjaGUocGF0aCkKKworICAgR2l2ZW4gdGhlICpwYXRoKiB0byBhIDpwZXA6YDMxNDdgIGZpbGUgbmFtZSwgcmV0dXJuIHRoZSBhc3NvY2lhdGVkIHNvdXJjZSBjb2RlCisgICBmaWxlIHBhdGguICBGb3IgZXhhbXBsZSwgaWYgKnBhdGgqIGlzCisgICBgYC9mb28vYmFyL19fcHljYWNoZV9fL2Jhei5jcHl0aG9uLTMyLnB5Y2BgIHRoZSByZXR1cm5lZCBwYXRoIHdvdWxkIGJlCisgICBgYC9mb28vYmFyL2Jhei5weWBgLiAgKnBhdGgqIG5lZWQgbm90IGV4aXN0LCBob3dldmVyIGlmIGl0IGRvZXMgbm90IGNvbmZvcm0KKyAgIHRvIDpwZXA6YDMxNDdgIGZvcm1hdCwgYSBgYFZhbHVlRXJyb3JgYCBpcyByYWlzZWQuIElmCisgICA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgaXMgbm90IGRlZmluZWQsCisgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpcyByYWlzZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKQorCisgICBEZWNvZGUgdGhlIGdpdmVuIGJ5dGVzIHJlcHJlc2VudGluZyBzb3VyY2UgY29kZSBhbmQgcmV0dXJuIGl0IGFzIGEgc3RyaW5nCisgICB3aXRoIHVuaXZlcnNhbCBuZXdsaW5lcyAoYXMgcmVxdWlyZWQgYnkKKyAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZWApLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZnVuY3Rpb246OiByZXNvbHZlX25hbWUobmFtZSwgcGFja2FnZSkKIAogICAgUmVzb2x2ZSBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lIHRvIGFuIGFic29sdXRlIG9uZS4KQEAgLTg2NSw5ICsxMDk3LDI1IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisuLiBmdW5jdGlvbjo6IGZpbmRfc3BlYyhuYW1lLCBwYWNrYWdlPU5vbmUpCisKKyAgIEZpbmQgdGhlIDp0ZXJtOmBzcGVjIDxtb2R1bGUgc3BlYz5gIGZvciBhIG1vZHVsZSwgb3B0aW9uYWxseSByZWxhdGl2ZSB0bworICAgdGhlIHNwZWNpZmllZCAqKnBhY2thZ2UqKiBuYW1lLiBJZiB0aGUgbW9kdWxlIGlzIGluIDphdHRyOmBzeXMubW9kdWxlc2AsCisgICB0aGVuIGBgc3lzLm1vZHVsZXNbbmFtZV0uX19zcGVjX19gYCBpcyByZXR1cm5lZCAodW5sZXNzIHRoZSBzcGVjIHdvdWxkIGJlCisgICBgYE5vbmVgYCBvciBpcyBub3Qgc2V0LCBpbiB3aGljaCBjYXNlIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCkuCisgICBPdGhlcndpc2UgYSBzZWFyY2ggdXNpbmcgOmF0dHI6YHN5cy5tZXRhX3BhdGhgIGlzIGRvbmUuIGBgTm9uZWBgIGlzCisgICByZXR1cm5lZCBpZiBubyBzcGVjIGlzIGZvdW5kLgorCisgICBJZiAqKm5hbWUqKiBpcyBmb3IgYSBzdWJtb2R1bGUgKGNvbnRhaW5zIGEgZG90KSwgdGhlIHBhcmVudCBtb2R1bGUgaXMKKyAgIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQuCisKKyAgICoqbmFtZSoqIGFuZCAqKnBhY2thZ2UqKiB3b3JrIHRoZSBzYW1lIGFzIGZvciA6ZnVuYzpgaW1wb3J0X21vZHVsZWAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBkZWNvcmF0b3I6OiBtb2R1bGVfZm9yX2xvYWRlcgogCi0gICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgYSA6dGVybTpgbG9hZGVyYCBtZXRob2QsCisgICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYAogICAgIHRvIGhhbmRsZSBzZWxlY3RpbmcgdGhlIHByb3BlcgogICAgIG1vZHVsZSBvYmplY3QgdG8gbG9hZCB3aXRoLiBUaGUgZGVjb3JhdGVkIG1ldGhvZCBpcyBleHBlY3RlZCB0byBoYXZlIGEgY2FsbAogICAgIHNpZ25hdHVyZSB0YWtpbmcgdHdvIHBvc2l0aW9uYWwgYXJndW1lbnRzCkBAIC04NzgsNTUgKzExMjYsNjggQEAKIAogICAgIFRoZSBkZWNvcmF0ZWQgbWV0aG9kIHdpbGwgdGFrZSBpbiB0aGUgKipuYW1lKiogb2YgdGhlIG1vZHVsZSB0byBiZSBsb2FkZWQKICAgICBhcyBleHBlY3RlZCBmb3IgYSA6dGVybTpgbG9hZGVyYC4gSWYgdGhlIG1vZHVsZSBpcyBub3QgZm91bmQgaW4KLSAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gYSBuZXcgb25lIGlzIGNvbnN0cnVjdGVkIHdpdGggaXRzCi0gICAgOmF0dHI6YF9fbmFtZV9fYCBhdHRyaWJ1dGUgc2V0IHRvICoqbmFtZSoqLCA6YXR0cjpgX19sb2FkZXJfX2Agc2V0IHRvCi0gICAgKipzZWxmKiosIGFuZCA6YXR0cjpgX19wYWNrYWdlX19gIHNldCBpZgotICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuaXNfcGFja2FnZWAgaXMgZGVmaW5lZCBmb3IgKipzZWxmKiogYW5kCi0gICAgZG9lcyBub3QgcmFpc2UgOmV4YzpgSW1wb3J0RXJyb3JgIGZvciAqKm5hbWUqKi4gSWYgYSBuZXcgbW9kdWxlIGlzIG5vdAotICAgIG5lZWRlZCB0aGVuIHRoZSBtb2R1bGUgZm91bmQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCB3aWxsIGJlIHBhc3NlZCBpbnRvIHRoZQotICAgIG1ldGhvZC4KKyAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gYSBuZXcgb25lIGlzIGNvbnN0cnVjdGVkLiBSZWdhcmRsZXNzIG9mIHdoZXJlIHRoZQorICAgIG1vZHVsZSBjYW1lIGZyb20sIDphdHRyOmBfX2xvYWRlcl9fYCBzZXQgdG8gKipzZWxmKiogYW5kIDphdHRyOmBfX3BhY2thZ2VfX2AKKyAgICBpcyBzZXQgYmFzZWQgb24gd2hhdCA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmlzX3BhY2thZ2VgIHJldHVybnMKKyAgICAoaWYgYXZhaWxhYmxlKS4gVGhlc2UgYXR0cmlidXRlcyBhcmUgc2V0IHVuY29uZGl0aW9uYWxseSB0byBzdXBwb3J0CisgICAgcmVsb2FkaW5nLgogCiAgICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBieSB0aGUgZGVjb3JhdGVkIG1ldGhvZCBhbmQgYSBtb2R1bGUgd2FzIGFkZGVkIHRvCi0gICAgOmRhdGE6YHN5cy5tb2R1bGVzYCBpdCB3aWxsIGJlIHJlbW92ZWQgdG8gcHJldmVudCBhIHBhcnRpYWxseSBpbml0aWFsaXplZAotICAgIG1vZHVsZSBmcm9tIGJlaW5nIGluIGxlZnQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4gSWYgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeQotICAgIGluIDpkYXRhOmBzeXMubW9kdWxlc2AgdGhlbiBpdCBpcyBsZWZ0IGFsb25lLgotCi0gICAgVXNlIG9mIHRoaXMgZGVjb3JhdG9yIGhhbmRsZXMgYWxsIHRoZSBkZXRhaWxzIG9mIHdoaWNoIG1vZHVsZSBvYmplY3QgYQotICAgIGxvYWRlciBzaG91bGQgaW5pdGlhbGl6ZSBhcyBzcGVjaWZpZWQgYnkgOnBlcDpgMzAyYCBhcyBiZXN0IGFzIHBvc3NpYmxlLgorICAgIDpkYXRhOmBzeXMubW9kdWxlc2AsIHRoZW4gdGhlIG1vZHVsZSB3aWxsIGJlIHJlbW92ZWQgdG8gcHJldmVudCBhIHBhcnRpYWxseQorICAgIGluaXRpYWxpemVkIG1vZHVsZSBmcm9tIGJlaW5nIGluIGxlZnQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4gSWYgdGhlIG1vZHVsZQorICAgIHdhcyBhbHJlYWR5IGluIDpkYXRhOmBzeXMubW9kdWxlc2AgdGhlbiBpdCBpcyBsZWZ0IGFsb25lLgogCiAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICA6YXR0cjpgX19sb2FkZXJfX2AgYW5kIDphdHRyOmBfX3BhY2thZ2VfX2AgYXJlIGF1dG9tYXRpY2FsbHkgc2V0CiAgICAgICAgKHdoZW4gcG9zc2libGUpLgogCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBTZXQgOmF0dHI6YF9fbmFtZV9fYCwgOmF0dHI6YF9fbG9hZGVyX19gIDphdHRyOmBfX3BhY2thZ2VfX2AKKyAgICAgICB1bmNvbmRpdGlvbmFsbHkgdG8gc3VwcG9ydCByZWxvYWRpbmcuCisKKyAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgVGhlIGltcG9ydCBtYWNoaW5lcnkgbm93IGRpcmVjdGx5IHBlcmZvcm1zIGFsbCB0aGUgZnVuY3Rpb25hbGl0eQorICAgICAgIHByb3ZpZGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisKIC4uIGRlY29yYXRvcjo6IHNldF9sb2FkZXIKIAotICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgbWV0aG9kLAotICAgIHRvIHNldCB0aGUgOmF0dHI6YF9fbG9hZGVyX19gCi0gICAgYXR0cmlidXRlIG9uIGxvYWRlZCBtb2R1bGVzLiBJZiB0aGUgYXR0cmlidXRlIGlzIGFscmVhZHkgc2V0IHRoZSBkZWNvcmF0b3IKLSAgICBkb2VzIG5vdGhpbmcuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudCB0byB0aGUKLSAgICB3cmFwcGVkIG1ldGhvZCAoaS5lLiBgYHNlbGZgYCkgaXMgd2hhdCA6YXR0cjpgX19sb2FkZXJfX2Agc2hvdWxkIGJlIHNldCB0by4KKyAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAKKyAgIHRvIHNldCB0aGUgOmF0dHI6YF9fbG9hZGVyX19gCisgICBhdHRyaWJ1dGUgb24gdGhlIHJldHVybmVkIG1vZHVsZS4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHJlYWR5IHNldCB0aGUKKyAgIGRlY29yYXRvciBkb2VzIG5vdGhpbmcuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudCB0bworICAgdGhlIHdyYXBwZWQgbWV0aG9kIChpLmUuIGBgc2VsZmBgKSBpcyB3aGF0IDphdHRyOmBfX2xvYWRlcl9fYCBzaG91bGQgYmUgc2V0CisgICB0by4KIAotICAgLi4gbm90ZTo6CisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgU2V0IGBgX19sb2FkZXJfX2BgIGlmIHNldCB0byBgYE5vbmVgYCwgYXMgaWYgdGhlIGF0dHJpYnV0ZSBkb2VzIG5vdAorICAgICAgZXhpc3QuCiAKLSAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgOmZ1bmM6YG1vZHVsZV9mb3JfbG9hZGVyYCBiZSB1c2VkIG92ZXIgdGhpcwotICAgICAgZGVjb3JhdG9yIGFzIGl0IHN1YnN1bWVzIHRoaXMgZnVuY3Rpb25hbGl0eS4KLQorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVGhlIGltcG9ydCBtYWNoaW5lcnkgdGFrZXMgY2FyZSBvZiB0aGlzIGF1dG9tYXRpY2FsbHkuCiAKIC4uIGRlY29yYXRvcjo6IHNldF9wYWNrYWdlCiAKLSAgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciBhIDp0ZXJtOmBsb2FkZXJgIHRvIHNldCB0aGUgOmF0dHI6YF9fcGFja2FnZV9fYAotICAgIGF0dHJpYnV0ZSBvbiB0aGUgbW9kdWxlIHJldHVybmVkIGJ5IHRoZSBsb2FkZXIuIElmIDphdHRyOmBfX3BhY2thZ2VfX2AgaXMKLSAgICBzZXQgYW5kIGhhcyBhIHZhbHVlIG90aGVyIHRoYW4gYGBOb25lYGAgaXQgd2lsbCBub3QgYmUgY2hhbmdlZC4KLSAgICBOb3RlIHRoYXQgdGhlIG1vZHVsZSByZXR1cm5lZCBieSB0aGUgbG9hZGVyIGlzIHdoYXQgaGFzIHRoZSBhdHRyaWJ1dGUKLSAgICBzZXQgb24gYW5kIG5vdCB0aGUgbW9kdWxlIGZvdW5kIGluIDpkYXRhOmBzeXMubW9kdWxlc2AuCisgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIHRvIHNldCB0aGUgOmF0dHI6YF9fcGFja2FnZV9fYCBhdHRyaWJ1dGUgb24gdGhlIHJldHVybmVkIG1vZHVsZS4gSWYgOmF0dHI6YF9fcGFja2FnZV9fYAorICAgaXMgc2V0IGFuZCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuIGBgTm9uZWBgIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQuCiAKLSAgICBSZWxpYW5jZSBvbiB0aGlzIGRlY29yYXRvciBpcyBkaXNjb3VyYWdlZCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHNldAotICAgIDphdHRyOmBfX3BhY2thZ2VfX2AgYmVmb3JlIGltcG9ydGluZy4gQnkKLSAgICBzZXR0aW5nIGl0IGJlZm9yZWhhbmQgdGhlIGNvZGUgZm9yIHRoZSBtb2R1bGUgaXMgZXhlY3V0ZWQgd2l0aCB0aGUKLSAgICBhdHRyaWJ1dGUgc2V0IGFuZCB0aHVzIGNhbiBiZSB1c2VkIGJ5IGdsb2JhbCBsZXZlbCBjb2RlIGR1cmluZwotICAgIGluaXRpYWxpemF0aW9uLgorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVGhlIGltcG9ydCBtYWNoaW5lcnkgdGFrZXMgY2FyZSBvZiB0aGlzIGF1dG9tYXRpY2FsbHkuCiAKLSAgIC4uIG5vdGU6OgorLi4gZnVuY3Rpb246OiBzcGVjX2Zyb21fbG9hZGVyKG5hbWUsIGxvYWRlciwgKiwgb3JpZ2luPU5vbmUsIGlzX3BhY2thZ2U9Tm9uZSkKIAotICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCA6ZnVuYzpgbW9kdWxlX2Zvcl9sb2FkZXJgIGJlIHVzZWQgb3ZlciB0aGlzCi0gICAgICBkZWNvcmF0b3IgYXMgaXQgc3Vic3VtZXMgdGhpcyBmdW5jdGlvbmFsaXR5LgorICAgQSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIDpjbGFzczpgTW9kdWxlU3BlY2AgaW5zdGFuY2UgYmFzZWQKKyAgIG9uIGEgbG9hZGVyLiAgVGhlIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIHRoZXkgZG8gZm9yCisgICBNb2R1bGVTcGVjLiAgVGhlIGZ1bmN0aW9uIHVzZXMgYXZhaWxhYmxlIDp0ZXJtOmBsb2FkZXJgIEFQSXMsIHN1Y2ggYXMKKyAgIDptZXRoOmBJbnNwZWN0TG9hZGVyLmlzX3BhY2thZ2VgLCB0byBmaWxsIGluIGFueSBtaXNzaW5nCisgICBpbmZvcm1hdGlvbiBvbiB0aGUgc3BlYy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9jYXRpb24sICosIGxvYWRlcj1Ob25lLCBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1Ob25lKQorCisgICBBIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgOmNsYXNzOmBNb2R1bGVTcGVjYCBpbnN0YW5jZSBiYXNlZAorICAgb24gdGhlIHBhdGggdG8gYSBmaWxlLiAgTWlzc2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGZpbGxlZCBpbiBvbiB0aGUKKyAgIHNwZWMgYnkgbWFraW5nIHVzZSBvZiBsb2FkZXIgQVBJcyBhbmQgYnkgdGhlIGltcGxpY2F0aW9uIHRoYXQgdGhlCisgICBtb2R1bGUgd2lsbCBiZSBmaWxlLWJhc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2luZGV4LnJzdCBiL0RvYy9saWJyYXJ5L2luZGV4LnJzdAppbmRleCAxYjI1YzZlLi44MTI4OWE1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbmRleC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW5kZXgucnN0CkBAIC02NSw2ICs2NSw3IEBACiAgICB0ay5yc3QKICAgIGRldmVsb3BtZW50LnJzdAogICAgZGVidWcucnN0CisgICBkaXN0cmlidXRpb24ucnN0CiAgICBweXRob24ucnN0CiAgICBjdXN0b21pbnRlcnAucnN0CiAgICBtb2R1bGVzLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QgYi9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdAppbmRleCBkNGNmOTA1Li5jY2IyYmQ3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdApAQCAtNjksNyArNjksMTIgQEAKIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgOnRlcm06YGJ5dGVjb2RlYCAgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCAgICAgICAgICAgfCBfX2RlZmF1bHRzX18gICAgfCB0dXBsZSBvZiBhbnkgZGVmYXVsdCAgICAgIHwKLXwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgdmFsdWVzIGZvciBhcmd1bWVudHMgICAgICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHZhbHVlcyBmb3IgcG9zaXRpb25hbCBvciAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBrZXl3b3JkIHBhcmFtZXRlcnMgICAgICAgIHwKKystLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICB8IF9fa3dkZWZhdWx0c19fICB8IG1hcHBpbmcgb2YgYW55IGRlZmF1bHQgICAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB2YWx1ZXMgZm9yIGtleXdvcmQtb25seSAgIHwKK3wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgcGFyYW1ldGVycyAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCAgICAgICAgICAgfCBfX2dsb2JhbHNfXyAgICAgfCBnbG9iYWwgbmFtZXNwYWNlIGluIHdoaWNoIHwKIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgdGhpcyBmdW5jdGlvbiB3YXMgZGVmaW5lZCB8CkBAIC0xNzMsOCArMTc4LDkgQEAKIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIDpmdW5jOmBnZXRtZW1iZXJzYCBkb2VzIG5vdCByZXR1cm4gbWV0YWNsYXNzIGF0dHJpYnV0ZXMgd2hlbiB0aGUgYXJndW1lbnQKLSAgICAgIGlzIGEgY2xhc3MgKHRoaXMgYmVoYXZpb3IgaXMgaW5oZXJpdGVkIGZyb20gdGhlIDpmdW5jOmBkaXJgIGZ1bmN0aW9uKS4KKyAgICAgIDpmdW5jOmBnZXRtZW1iZXJzYCB3aWxsIG9ubHkgcmV0dXJuIGNsYXNzIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgIG1ldGFjbGFzcyB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIGNsYXNzIGFuZCB0aG9zZSBhdHRyaWJ1dGVzIGhhdmUgYmVlbgorICAgICAgbGlzdGVkIGluIHRoZSBtZXRhY2xhc3MnIGN1c3RvbSA6bWV0aDpgX19kaXJfX2AuCiAKIAogLi4gZnVuY3Rpb246OiBnZXRtb2R1bGVpbmZvKHBhdGgpCkBAIC00MjgsMTEgKzQzNCwxNCBAQAogICAgQWNjZXB0cyBhIHdpZGUgcmFuZ2Ugb2YgcHl0aG9uIGNhbGxhYmxlcywgZnJvbSBwbGFpbiBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgdG8KICAgIDpmdW5jOmBmdW5jdG9vbHMucGFydGlhbGAgb2JqZWN0cy4KIAorICAgUmFpc2VzIDpleGM6YFZhbHVlRXJyb3JgIGlmIG5vIHNpZ25hdHVyZSBjYW4gYmUgcHJvdmlkZWQsIGFuZAorICAgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGF0IHR5cGUgb2Ygb2JqZWN0IGlzIG5vdCBzdXBwb3J0ZWQuCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBTb21lIGNhbGxhYmxlcyBtYXkgbm90IGJlIGludHJvc3BlY3RhYmxlIGluIGNlcnRhaW4gaW1wbGVtZW50YXRpb25zIG9mCi0gICAgICBQeXRob24uICBGb3IgZXhhbXBsZSwgaW4gQ1B5dGhvbiwgYnVpbHQtaW4gZnVuY3Rpb25zIGRlZmluZWQgaW4gQyBwcm92aWRlCi0gICAgICBubyBtZXRhZGF0YSBhYm91dCB0aGVpciBhcmd1bWVudHMuCisgICAgICBQeXRob24uICBGb3IgZXhhbXBsZSwgaW4gQ1B5dGhvbiwgc29tZSBidWlsdC1pbiBmdW5jdGlvbnMgZGVmaW5lZCBpbgorICAgICAgQyBwcm92aWRlIG5vIG1ldGFkYXRhIGFib3V0IHRoZWlyIGFyZ3VtZW50cy4KIAogCiAuLiBjbGFzczo6IFNpZ25hdHVyZShwYXJhbWV0ZXJzPU5vbmUsIFwqLCByZXR1cm5fYW5ub3RhdGlvbj1TaWduYXR1cmUuZW1wdHkpCkBAIC01MTAsOSArNTE5LDggQEAKIAogICAgLi4gYXR0cmlidXRlOjogUGFyYW1ldGVyLm5hbWUKIAotICAgICAgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBhcyBhIHN0cmluZy4gIE11c3QgYmUgYSB2YWxpZCBweXRob24gaWRlbnRpZmllcgotICAgICAgbmFtZSAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGBgUE9TSVRJT05BTF9PTkxZYGAgcGFyYW1ldGVycywgd2hpY2ggY2FuIGhhdmUKLSAgICAgIGl0IHNldCB0byBgYE5vbmVgYCkuCisgICAgICBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGFzIGEgc3RyaW5nLiAgVGhlIG5hbWUgbXVzdCBiZSBhIHZhbGlkCisgICAgICBQeXRob24gaWRlbnRpZmllci4KIAogICAgLi4gYXR0cmlidXRlOjogUGFyYW1ldGVyLmRlZmF1bHQKIApAQCAtNTk2LDYgKzYwNCwxMCBAQAogICAgICAgICAgPj4+IHN0cihwYXJhbS5yZXBsYWNlKGRlZmF1bHQ9UGFyYW1ldGVyLmVtcHR5LCBhbm5vdGF0aW9uPSdzcGFtJykpCiAgICAgICAgICAiZm9vOidzcGFtJyIKIAorICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgIEluIFB5dGhvbiAzLjMgUGFyYW1ldGVyIG9iamVjdHMgd2VyZSBhbGxvd2VkIHRvIGhhdmUgYGBuYW1lYGAgc2V0CisgICAgICAgIHRvIGBgTm9uZWBgIGlmIHRoZWlyIGBga2luZGBgIHdhcyBzZXQgdG8gYGBQT1NJVElPTkFMX09OTFlgYC4KKyAgICAgICAgVGhpcyBpcyBubyBsb25nZXIgcGVybWl0dGVkLgogCiAuLiBjbGFzczo6IEJvdW5kQXJndW1lbnRzCiAKQEAgLTgwNiw2ICs4MTgsMjMgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKKy4uIGZ1bmN0aW9uOjogdW53cmFwKGZ1bmMsICosIHN0b3A9Tm9uZSkKKworICAgR2V0IHRoZSBvYmplY3Qgd3JhcHBlZCBieSAqZnVuYyouIEl0IGZvbGxvd3MgdGhlIGNoYWluIG9mIDphdHRyOmBfX3dyYXBwZWRfX2AKKyAgIGF0dHJpYnV0ZXMgcmV0dXJuaW5nIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgY2hhaW4uCisKKyAgICpzdG9wKiBpcyBhbiBvcHRpb25hbCBjYWxsYmFjayBhY2NlcHRpbmcgYW4gb2JqZWN0IGluIHRoZSB3cmFwcGVyIGNoYWluCisgICBhcyBpdHMgc29sZSBhcmd1bWVudCB0aGF0IGFsbG93cyB0aGUgdW53cmFwcGluZyB0byBiZSB0ZXJtaW5hdGVkIGVhcmx5IGlmCisgICB0aGUgY2FsbGJhY2sgcmV0dXJucyBhIHRydWUgdmFsdWUuIElmIHRoZSBjYWxsYmFjayBuZXZlciByZXR1cm5zIGEgdHJ1ZQorICAgdmFsdWUsIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgY2hhaW4gaXMgcmV0dXJuZWQgYXMgdXN1YWwuIEZvciBleGFtcGxlLAorICAgOmZ1bmM6YHNpZ25hdHVyZWAgdXNlcyB0aGlzIHRvIHN0b3AgdW53cmFwcGluZyBpZiBhbnkgb2JqZWN0IGluIHRoZQorICAgY2hhaW4gaGFzIGEgYGBfX3NpZ25hdHVyZV9fYGAgYXR0cmlidXRlIGRlZmluZWQuCisKKyAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZiBhIGN5Y2xlIGlzIGVuY291bnRlcmVkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBfaW5zcGVjdC1zdGFjazoKIAogVGhlIGludGVycHJldGVyIHN0YWNrCkBAIC04MzgsNiArODY3LDEwIEBACiAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgZGVsIGZyYW1lCiAKKyAgIElmIHlvdSB3YW50IHRvIGtlZXAgdGhlIGZyYW1lIGFyb3VuZCAoZm9yIGV4YW1wbGUgdG8gcHJpbnQgYSB0cmFjZWJhY2sKKyAgIGxhdGVyKSwgeW91IGNhbiBhbHNvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgYnkgdXNpbmcgdGhlCisgICA6bWV0aDpgZnJhbWUuY2xlYXJgIG1ldGhvZC4KKwogVGhlIG9wdGlvbmFsICpjb250ZXh0KiBhcmd1bWVudCBzdXBwb3J0ZWQgYnkgbW9zdCBvZiB0aGVzZSBmdW5jdGlvbnMgc3BlY2lmaWVzCiB0aGUgbnVtYmVyIG9mIGxpbmVzIG9mIGNvbnRleHQgdG8gcmV0dXJuLCB3aGljaCBhcmUgY2VudGVyZWQgYXJvdW5kIHRoZSBjdXJyZW50CiBsaW5lLgpAQCAtOTk0LDMgKzEwMjcsMjIgQEAKICAgICAgIHJldHVybiBhbiBlbXB0eSBkaWN0aW9uYXJ5LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKworCisuLiBfaW5zcGVjdC1tb2R1bGUtY2xpOgorCitDb21tYW5kIExpbmUgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmBpbnNwZWN0YCBtb2R1bGUgYWxzbyBwcm92aWRlcyBhIGJhc2ljIGludHJvc3BlY3Rpb24gY2FwYWJpbGl0eQorZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisuLiBwcm9ncmFtOjogaW5zcGVjdAorCitCeSBkZWZhdWx0LCBhY2NlcHRzIHRoZSBuYW1lIG9mIGEgbW9kdWxlIGFuZCBwcmludHMgdGhlIHNvdXJjZSBvZiB0aGF0Cittb2R1bGUuIEEgY2xhc3Mgb3IgZnVuY3Rpb24gd2l0aGluIHRoZSBtb2R1bGUgY2FuIGJlIHByaW50ZWQgaW5zdGVhZCBieQorYXBwZW5kZWQgYSBjb2xvbiBhbmQgdGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0LgorCisuLiBjbWRvcHRpb246OiAtLWRldGFpbHMKKworICAgUHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCBvYmplY3QgcmF0aGVyIHRoYW4gdGhlIHNvdXJjZSBjb2RlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pby5yc3QgYi9Eb2MvbGlicmFyeS9pby5yc3QKaW5kZXggM2Q3MjNjMC4uYzgwMTk4YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW8ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lvLnJzdApAQCAtMjgzLDEwICsyODMsMTAgQEAKICAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgc3RyZWFtIGNhbiBiZSByZWFkIGZyb20uICBJZiBgYEZhbHNlYGAsIDptZXRoOmByZWFkYAogICAgICAgd2lsbCByYWlzZSA6ZXhjOmBPU0Vycm9yYC4KIAotICAgLi4gbWV0aG9kOjogcmVhZGxpbmUobGltaXQ9LTEpCisgICAuLiBtZXRob2Q6OiByZWFkbGluZShzaXplPS0xKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gb25lIGxpbmUgZnJvbSB0aGUgc3RyZWFtLiAgSWYgKmxpbWl0KiBpcyBzcGVjaWZpZWQsIGF0Ci0gICAgICBtb3N0ICpsaW1pdCogYnl0ZXMgd2lsbCBiZSByZWFkLgorICAgICAgUmVhZCBhbmQgcmV0dXJuIG9uZSBsaW5lIGZyb20gdGhlIHN0cmVhbS4gIElmICpzaXplKiBpcyBzcGVjaWZpZWQsIGF0CisgICAgICBtb3N0ICpzaXplKiBieXRlcyB3aWxsIGJlIHJlYWQuCiAKICAgICAgIFRoZSBsaW5lIHRlcm1pbmF0b3IgaXMgYWx3YXlzIGBgYidcbidgYCBmb3IgYmluYXJ5IGZpbGVzOyBmb3IgdGV4dCBmaWxlcywKICAgICAgIHRoZSAqbmV3bGluZXMqIGFyZ3VtZW50IHRvIDpmdW5jOmBvcGVuYCBjYW4gYmUgdXNlZCB0byBzZWxlY3QgdGhlIGxpbmUKQEAgLTM2NiwxNCArMzY2LDE0IEBACiAgICBJbiBhZGRpdGlvbiB0byB0aGUgYXR0cmlidXRlcyBhbmQgbWV0aG9kcyBmcm9tIDpjbGFzczpgSU9CYXNlYCwKICAgIDpjbGFzczpgUmF3SU9CYXNlYCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQobj0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWQoc2l6ZT0tMSkKIAotICAgICAgUmVhZCB1cCB0byAqbiogYnl0ZXMgZnJvbSB0aGUgb2JqZWN0IGFuZCByZXR1cm4gdGhlbS4gIEFzIGEgY29udmVuaWVuY2UsCi0gICAgICBpZiAqbiogaXMgdW5zcGVjaWZpZWQgb3IgLTEsIDptZXRoOmByZWFkYWxsYCBpcyBjYWxsZWQuICBPdGhlcndpc2UsCi0gICAgICBvbmx5IG9uZSBzeXN0ZW0gY2FsbCBpcyBldmVyIG1hZGUuICBGZXdlciB0aGFuICpuKiBieXRlcyBtYXkgYmUKLSAgICAgIHJldHVybmVkIGlmIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbGwgcmV0dXJucyBmZXdlciB0aGFuICpuKiBieXRlcy4KKyAgICAgIFJlYWQgdXAgdG8gKnNpemUqIGJ5dGVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuIHRoZW0uICBBcyBhIGNvbnZlbmllbmNlLAorICAgICAgaWYgKnNpemUqIGlzIHVuc3BlY2lmaWVkIG9yIC0xLCA6bWV0aDpgcmVhZGFsbGAgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlLAorICAgICAgb25seSBvbmUgc3lzdGVtIGNhbGwgaXMgZXZlciBtYWRlLiAgRmV3ZXIgdGhhbiAqc2l6ZSogYnl0ZXMgbWF5IGJlCisgICAgICByZXR1cm5lZCBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYWxsIHJldHVybnMgZmV3ZXIgdGhhbiAqc2l6ZSogYnl0ZXMuCiAKLSAgICAgIElmIDAgYnl0ZXMgYXJlIHJldHVybmVkLCBhbmQgKm4qIHdhcyBub3QgMCwgdGhpcyBpbmRpY2F0ZXMgZW5kIG9mIGZpbGUuCisgICAgICBJZiAwIGJ5dGVzIGFyZSByZXR1cm5lZCwgYW5kICpzaXplKiB3YXMgbm90IDAsIHRoaXMgaW5kaWNhdGVzIGVuZCBvZiBmaWxlLgogICAgICAgSWYgdGhlIG9iamVjdCBpcyBpbiBub24tYmxvY2tpbmcgbW9kZSBhbmQgbm8gYnl0ZXMgYXJlIGF2YWlsYWJsZSwKICAgICAgIGBgTm9uZWBgIGlzIHJldHVybmVkLgogCkBAIC00NDIsMTAgKzQ0MiwxMCBAQAogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAotICAgLi4gbWV0aG9kOjogcmVhZChuPS0xKQorICAgLi4gbWV0aG9kOjogcmVhZChzaXplPS0xKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKm4qIGJ5dGVzLiAgSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGBgTm9uZWBgLCBvcgotICAgICAgbmVnYXRpdmUsIGRhdGEgaXMgcmVhZCBhbmQgcmV0dXJuZWQgdW50aWwgRU9GIGlzIHJlYWNoZWQuICBBbiBlbXB0eQorICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpzaXplKiBieXRlcy4gIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBgYE5vbmVgYCwKKyAgICAgIG9yIG5lZ2F0aXZlLCBkYXRhIGlzIHJlYWQgYW5kIHJldHVybmVkIHVudGlsIEVPRiBpcyByZWFjaGVkLiAgQW4gZW1wdHkKICAgICAgIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBpcyByZXR1cm5lZCBpZiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgYXQgRU9GLgogCiAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgcG9zaXRpdmUsIGFuZCB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIG5vdApAQCAtNDU3LDkgKzQ1Nyw5IEBACiAgICAgICBBIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgaW4KICAgICAgIG5vbiBibG9ja2luZy1tb2RlLCBhbmQgaGFzIG5vIGRhdGEgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQxKG49LTEpCisgICAuLiBtZXRob2Q6OiByZWFkMShzaXplPS0xKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKm4qIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcKKyAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqc2l6ZSogYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgY2FsbCB0byB0aGUgdW5kZXJseWluZwogICAgICAgcmF3IHN0cmVhbSdzIDptZXRoOmB+UmF3SU9CYXNlLnJlYWRgIG1ldGhvZC4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3UKICAgICAgIGFyZSBpbXBsZW1lbnRpbmcgeW91ciBvd24gYnVmZmVyaW5nIG9uIHRvcCBvZiBhIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgCiAgICAgICBvYmplY3QuCkBAIC01MjIsNiArNTIyLDggQEAKICAgIDptb2Q6YG9zLm9wZW5gIGFzICpvcGVuZXIqIHJlc3VsdHMgaW4gZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIHBhc3NpbmcKICAgIGBgTm9uZWBgKS4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKICAgIFNlZSB0aGUgOmZ1bmM6YG9wZW5gIGJ1aWx0LWluIGZ1bmN0aW9uIGZvciBleGFtcGxlcyBvbiB1c2luZyB0aGUgKm9wZW5lcioKICAgIHBhcmFtZXRlci4KIApAQCAtNTI5LDYgKzUzMSw5IEBACiAgICAgICBUaGUgKm9wZW5lciogcGFyYW1ldGVyIHdhcyBhZGRlZC4KICAgICAgIFRoZSBgYCd4J2BgIG1vZGUgd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGZpbGUgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogICAgSW4gYWRkaXRpb24gdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMgZnJvbSA6Y2xhc3M6YElPQmFzZWAgYW5kCiAgICA6Y2xhc3M6YFJhd0lPQmFzZWAsIDpjbGFzczpgRmlsZUlPYCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGRhdGEKICAgIGF0dHJpYnV0ZXM6CkBAIC02MDEsMjEgKzYwNiwyMSBAQAogICAgOmNsYXNzOmBCdWZmZXJlZFJlYWRlcmAgcHJvdmlkZXMgb3Igb3ZlcnJpZGVzIHRoZXNlIG1ldGhvZHMgaW4gYWRkaXRpb24gdG8KICAgIHRob3NlIGZyb20gOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAgYW5kIDpjbGFzczpgSU9CYXNlYDoKIAotICAgLi4gbWV0aG9kOjogcGVlayhbbl0pCisgICAuLiBtZXRob2Q6OiBwZWVrKFtzaXplXSkKIAogICAgICAgUmV0dXJuIGJ5dGVzIGZyb20gdGhlIHN0cmVhbSB3aXRob3V0IGFkdmFuY2luZyB0aGUgcG9zaXRpb24uICBBdCBtb3N0IG9uZQogICAgICAgc2luZ2xlIHJlYWQgb24gdGhlIHJhdyBzdHJlYW0gaXMgZG9uZSB0byBzYXRpc2Z5IHRoZSBjYWxsLiBUaGUgbnVtYmVyIG9mCiAgICAgICBieXRlcyByZXR1cm5lZCBtYXkgYmUgbGVzcyBvciBtb3JlIHRoYW4gcmVxdWVzdGVkLgogCi0gICAuLiBtZXRob2Q6OiByZWFkKFtuXSkKKyAgIC4uIG1ldGhvZDo6IHJlYWQoW3NpemVdKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gKm4qIGJ5dGVzLCBvciBpZiAqbiogaXMgbm90IGdpdmVuIG9yIG5lZ2F0aXZlLCB1bnRpbCBFT0YKLSAgICAgIG9yIGlmIHRoZSByZWFkIGNhbGwgd291bGQgYmxvY2sgaW4gbm9uLWJsb2NraW5nIG1vZGUuCisgICAgICBSZWFkIGFuZCByZXR1cm4gKnNpemUqIGJ5dGVzLCBvciBpZiAqc2l6ZSogaXMgbm90IGdpdmVuIG9yIG5lZ2F0aXZlLCB1bnRpbAorICAgICAgRU9GIG9yIGlmIHRoZSByZWFkIGNhbGwgd291bGQgYmxvY2sgaW4gbm9uLWJsb2NraW5nIG1vZGUuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQxKG4pCisgICAuLiBtZXRob2Q6OiByZWFkMShzaXplKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKm4qIGJ5dGVzIHdpdGggb25seSBvbmUgY2FsbCBvbiB0aGUgcmF3IHN0cmVhbS4gIElmCi0gICAgICBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgb25seSBidWZmZXJlZCBieXRlcyBhcmUgcmV0dXJuZWQuCisgICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKnNpemUqIGJ5dGVzIHdpdGggb25seSBvbmUgY2FsbCBvbiB0aGUgcmF3IHN0cmVhbS4KKyAgICAgIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCBvbmx5IGJ1ZmZlcmVkIGJ5dGVzIGFyZSByZXR1cm5lZC4KICAgICAgIE90aGVyd2lzZSwgb25lIHJhdyBzdHJlYW0gcmVhZCBjYWxsIGlzIG1hZGUuCiAKIApAQCAtNzM0LDE3ICs3MzksMTcgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQobikKKyAgIC4uIG1ldGhvZDo6IHJlYWQoc2l6ZSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIGF0IG1vc3QgKm4qIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RyZWFtIGFzIGEgc2luZ2xlCi0gICAgICA6Y2xhc3M6YHN0cmAuICBJZiAqbiogaXMgbmVnYXRpdmUgb3IgYGBOb25lYGAsIHJlYWRzIHVudGlsIEVPRi4KKyAgICAgIFJlYWQgYW5kIHJldHVybiBhdCBtb3N0ICpzaXplKiBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmVhbSBhcyBhIHNpbmdsZQorICAgICAgOmNsYXNzOmBzdHJgLiAgSWYgKnNpemUqIGlzIG5lZ2F0aXZlIG9yIGBgTm9uZWBgLCByZWFkcyB1bnRpbCBFT0YuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKGxpbWl0PS0xKQorICAgLi4gbWV0aG9kOjogcmVhZGxpbmUoc2l6ZT0tMSkKIAogICAgICAgUmVhZCB1bnRpbCBuZXdsaW5lIG9yIEVPRiBhbmQgcmV0dXJuIGEgc2luZ2xlIGBgc3RyYGAuICBJZiB0aGUgc3RyZWFtIGlzCiAgICAgICBhbHJlYWR5IGF0IEVPRiwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgogCi0gICAgICBJZiAqbGltaXQqIGlzIHNwZWNpZmllZCwgYXQgbW9zdCAqbGltaXQqIGNoYXJhY3RlcnMgd2lsbCBiZSByZWFkLgorICAgICAgSWYgKnNpemUqIGlzIHNwZWNpZmllZCwgYXQgbW9zdCAqc2l6ZSogY2hhcmFjdGVycyB3aWxsIGJlIHJlYWQuCiAKICAgIC4uIG1ldGhvZDo6IHNlZWsob2Zmc2V0LCB3aGVuY2U9U0VFS19TRVQpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2lwYWRkcmVzcy5yc3QgYi9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0CmluZGV4IDhlYWM5MmYuLmFlZGY1YzIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2lwYWRkcmVzcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaXBhZGRyZXNzLnJzdApAQCAtOSwxMyArOSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tCiAKLS4uIG5vdGU6OgotCi0gICBUaGUgYGBpcGFkZHJlc3NgYCBtb2R1bGUgaGFzIGJlZW4gaW5jbHVkZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgb24gYQotICAgOnRlcm06YHByb3Zpc2lvbmFsIGJhc2lzIDxwcm92aXNpb25hbCBwYWNrYWdlPmAuIEJhY2t3YXJkcyBpbmNvbXBhdGlibGUKLSAgIGNoYW5nZXMgKHVwIHRvIGFuZCBpbmNsdWRpbmcgcmVtb3ZhbCBvZiB0aGUgcGFja2FnZSkgbWF5IG9jY3VyIGlmIGRlZW1lZAotICAgbmVjZXNzYXJ5IGJ5IHRoZSBjb3JlIGRldmVsb3BlcnMuCi0KIDptb2Q6YGlwYWRkcmVzc2AgcHJvdmlkZXMgdGhlIGNhcGFiaWxpdGllcyB0byBjcmVhdGUsIG1hbmlwdWxhdGUgYW5kCiBvcGVyYXRlIG9uIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzIGFuZCBuZXR3b3Jrcy4KIApAQCAtMTYxLDcgKzE1NCwxNiBAQAogICAgLi4gYXR0cmlidXRlOjogaXNfcHJpdmF0ZQogCiAgICAgICBgYFRydWVgYCBpZiB0aGUgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuICBTZWUKLSAgICAgIDpSRkM6YDE5MThgIChmb3IgSVB2NCkgb3IgOlJGQzpgNDE5M2AgKGZvciBJUHY2KS4KKyAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5IChmb3IgSVB2NCkgb3IgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkKKyAgICAgIChmb3IgSVB2NikuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGlzX2dsb2JhbAorCisgICAgICBgYFRydWVgYCBpZiB0aGUgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHB1YmxpYyBuZXR3b3Jrcy4gIFNlZQorICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkgKGZvciBJUHY0KSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeQorICAgICAgKGZvciBJUHY2KS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3Vuc3BlY2lmaWVkCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2lwYy5yc3QgYi9Eb2MvbGlicmFyeS9pcGMucnN0CmluZGV4IDkxZWM2OTMuLjZiMTc1NjMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2lwYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaXBjLnJzdApAQCAtOSw3ICs5LDcgQEAKIAogU29tZSBtb2R1bGVzIG9ubHkgd29yayBmb3IgdHdvIHByb2Nlc3NlcyB0aGF0IGFyZSBvbiB0aGUgc2FtZSBtYWNoaW5lLCBlLmcuCiA6bW9kOmBzaWduYWxgIGFuZCA6bW9kOmBtbWFwYC4gIE90aGVyIG1vZHVsZXMgc3VwcG9ydCBuZXR3b3JraW5nIHByb3RvY29scwotdGhhdCB0d28gb3IgbW9yZSBwcm9jZXNzZXMgY2FuIHVzZWQgdG8gY29tbXVuaWNhdGUgYWNyb3NzIG1hY2hpbmVzLgordGhhdCB0d28gb3IgbW9yZSBwcm9jZXNzZXMgY2FuIHVzZSB0byBjb21tdW5pY2F0ZSBhY3Jvc3MgbWFjaGluZXMuCiAKIFRoZSBsaXN0IG9mIG1vZHVsZXMgZGVzY3JpYmVkIGluIHRoaXMgY2hhcHRlciBpczoKIApAQCAtMTgsNiArMTgsOSBAQAogCiAgICBzb2NrZXQucnN0CiAgICBzc2wucnN0CisgICBzZWxlY3QucnN0CisgICBzZWxlY3RvcnMucnN0CisgICBhc3luY2lvLnJzdAogICAgYXN5bmNvcmUucnN0CiAgICBhc3luY2hhdC5yc3QKICAgIHNpZ25hbC5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2pzb24ucnN0IGIvRG9jL2xpYnJhcnkvanNvbi5yc3QKaW5kZXggZjY1MjAzOS4uNWQ5N2VlOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvanNvbi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvanNvbi5yc3QKQEAgLTQyLDggKzQyLDcgQEAKIFByZXR0eSBwcmludGluZzo6CiAKICAgICA+Pj4gaW1wb3J0IGpzb24KLSAgICA+Pj4gcHJpbnQoanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwKLSAgICAuLi4gICAgICAgICAgICAgICAgICBpbmRlbnQ9NCwgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSkpCisgICAgPj4+IHByaW50KGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsIGluZGVudD00KSkKICAgICB7CiAgICAgICAgICI0IjogNSwKICAgICAgICAgIjYiOiA3CkBAIC0xNTgsMTUgKzE1NywxMyBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFsbG93IHN0cmluZ3MgZm9yICppbmRlbnQqIGluIGFkZGl0aW9uIHRvIGludGVnZXJzLgogCi0gICAuLiBub3RlOjoKKyAgIElmIHNwZWNpZmllZCwgKnNlcGFyYXRvcnMqIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAorICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgYGAoJywnLCAnOiAnKWBgIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCiAKLSAgICAgIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlIG91dHB1dCBtaWdodCBpbmNsdWRlCi0gICAgICB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gKmluZGVudCogaXMgc3BlY2lmaWVkLiAgWW91IGNhbiB1c2UKLSAgICAgIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCi0KLSAgIElmICpzZXBhcmF0b3JzKiBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwgZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUsIHRoZW4gaXQKLSAgIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2VwYXJhdG9ycy4gIGBgKCcsJywKLSAgICc6JylgYCBpcyB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24uCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXNlIGBgKCcsJywgJzogJylgYCBhcyBkZWZhdWx0IGlmICppbmRlbnQqIGlzIG5vdCBgYE5vbmVgYC4KIAogICAgKmRlZmF1bHQob2JqKSogaXMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCByZXR1cm4gYSBzZXJpYWxpemFibGUgdmVyc2lvbiBvZgogICAgKm9iaiogb3IgcmFpc2UgOmV4YzpgVHlwZUVycm9yYC4gIFRoZSBkZWZhdWx0IHNpbXBseSByYWlzZXMgOmV4YzpgVHlwZUVycm9yYC4KQEAgLTI0OCw2ICsyNDUsOCBAQAogICAga3dhcmc7IG90aGVyd2lzZSA6Y2xhc3M6YEpTT05EZWNvZGVyYCBpcyB1c2VkLiAgQWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cwogICAgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjbGFzcy4KIAorICAgSWYgdGhlIGRhdGEgYmVpbmcgZGVzZXJpYWxpemVkIGlzIG5vdCBhIHZhbGlkIEpTT04gZG9jdW1lbnQsIGEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgogCiAuLiBmdW5jdGlvbjo6IGxvYWRzKHMsIGVuY29kaW5nPU5vbmUsIGNscz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lLCBwYXJzZV9mbG9hdD1Ob25lLCBwYXJzZV9pbnQ9Tm9uZSwgcGFyc2VfY29uc3RhbnQ9Tm9uZSwgb2JqZWN0X3BhaXJzX2hvb2s9Tm9uZSwgKiprdykKIApAQCAtMjU3LDYgKzI1Niw4IEBACiAgICBUaGUgb3RoZXIgYXJndW1lbnRzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiA6ZnVuYzpgbG9hZGAsIGV4Y2VwdAogICAgKmVuY29kaW5nKiB3aGljaCBpcyBpZ25vcmVkIGFuZCBkZXByZWNhdGVkLgogCisgICBJZiB0aGUgZGF0YSBiZWluZyBkZXNlcmlhbGl6ZWQgaXMgbm90IGEgdmFsaWQgSlNPTiBkb2N1bWVudCwgYQorICAgOmV4YzpgVmFsdWVFcnJvcmAgd2lsbCBiZSByYWlzZWQuCiAKIEVuY29kZXJzIGFuZCBEZWNvZGVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNTQsMjMgKzM1NSwyNiBAQAogCiAgICAuLiBfcHktdG8tanNvbi10YWJsZToKIAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBQeXRob24gICAgICAgICAgICB8IEpTT04gICAgICAgICAgfAotICAgKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09KwotICAgfCBkaWN0ICAgICAgICAgICAgICB8IG9iamVjdCAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBsaXN0LCB0dXBsZSAgICAgICB8IGFycmF5ICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBzdHIgICAgICAgICAgICAgICB8IHN0cmluZyAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBpbnQsIGZsb2F0ICAgICAgICB8IG51bWJlciAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBUcnVlICAgICAgICAgICAgICB8IHRydWUgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBGYWxzZSAgICAgICAgICAgICB8IGZhbHNlICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgfCBOb25lICAgICAgICAgICAgICB8IG51bGwgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBQeXRob24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEpTT04gICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09KworICAgfCBkaWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9iamVjdCAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBsaXN0LCB0dXBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFycmF5ICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBzdHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0cmluZyAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBpbnQsIGZsb2F0LCBpbnQtICYgZmxvYXQtZGVyaXZlZCBFbnVtcyB8IG51bWJlciAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBUcnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRydWUgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBGYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZhbHNlICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG51bGwgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgaW50LSBhbmQgZmxvYXQtZGVyaXZlZCBFbnVtIGNsYXNzZXMuCiAKICAgIFRvIGV4dGVuZCB0aGlzIHRvIHJlY29nbml6ZSBvdGhlciBvYmplY3RzLCBzdWJjbGFzcyBhbmQgaW1wbGVtZW50IGEKICAgIDptZXRoOmBkZWZhdWx0YCBtZXRob2Qgd2l0aCBhbm90aGVyIG1ldGhvZCB0aGF0IHJldHVybnMgYSBzZXJpYWxpemFibGUgb2JqZWN0CkBAIC00MTAsMTUgKzQxNCwxMyBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFsbG93IHN0cmluZ3MgZm9yICppbmRlbnQqIGluIGFkZGl0aW9uIHRvIGludGVnZXJzLgogCi0gICAuLiBub3RlOjoKLQotICAgICAgU2luY2UgdGhlIGRlZmF1bHQgaXRlbSBzZXBhcmF0b3IgaXMgYGAnLCAnYGAsICB0aGUgb3V0cHV0IG1pZ2h0IGluY2x1ZGUKLSAgICAgIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2hlbiAqaW5kZW50KiBpcyBzcGVjaWZpZWQuICBZb3UgY2FuIHVzZQotICAgICAgYGBzZXBhcmF0b3JzPSgnLCcsICc6ICcpYGAgdG8gYXZvaWQgdGhpcy4KLQogICAgSWYgc3BlY2lmaWVkLCAqc2VwYXJhdG9ycyogc2hvdWxkIGJlIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKWBgCi0gICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OCi0gICByZXByZXNlbnRhdGlvbiwgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgorICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgYGAoJywnLCAnOiAnKWBgIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBVc2UgYGAoJywnLCAnOiAnKWBgIGFzIGRlZmF1bHQgaWYgKmluZGVudCogaXMgbm90IGBgTm9uZWBgLgogCiAgICBJZiBzcGVjaWZpZWQsICpkZWZhdWx0KiBpcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBjYW4ndAogICAgb3RoZXJ3aXNlIGJlIHNlcmlhbGl6ZWQuICBJdCBzaG91bGQgcmV0dXJuIGEgSlNPTiBlbmNvZGFibGUgdmVyc2lvbiBvZiB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdCBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdAppbmRleCA0NTNmYWI1Li41ZmIxYjdhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbG9nZ2luZy5jb25maWcucnN0CkBAIC04MCwxMiArODAsMjUgQEAKIAogLi4gZnVuY3Rpb246OiBmaWxlQ29uZmlnKGZuYW1lLCBkZWZhdWx0cz1Ob25lLCBkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM9VHJ1ZSkKIAotICAgUmVhZHMgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmcm9tIGEgOm1vZDpgY29uZmlncGFyc2VyYFwtZm9ybWF0IGZpbGUKLSAgIG5hbWVkICpmbmFtZSouIFRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgc2hvdWxkIGJlIGFzIGRlc2NyaWJlZCBpbgotICAgOnJlZjpgbG9nZ2luZy1jb25maWctZmlsZWZvcm1hdGAuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzCi0gICBmcm9tIGFuIGFwcGxpY2F0aW9uLCBhbGxvd2luZyBhbiBlbmQgdXNlciB0byBzZWxlY3QgZnJvbSB2YXJpb3VzIHByZS1jYW5uZWQKLSAgIGNvbmZpZ3VyYXRpb25zIChpZiB0aGUgZGV2ZWxvcGVyIHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIHByZXNlbnQgdGhlIGNob2ljZXMKLSAgIGFuZCBsb2FkIHRoZSBjaG9zZW4gY29uZmlndXJhdGlvbikuCisgICBSZWFkcyB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGZyb20gYSA6bW9kOmBjb25maWdwYXJzZXJgXC1mb3JtYXQgZmlsZS4gVGhlCisgICBmb3JtYXQgb2YgdGhlIGZpbGUgc2hvdWxkIGJlIGFzIGRlc2NyaWJlZCBpbgorICAgOnJlZjpgbG9nZ2luZy1jb25maWctZmlsZWZvcm1hdGAuCisgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBmcm9tIGFuIGFwcGxpY2F0aW9uLCBhbGxvd2luZyBhbgorICAgZW5kIHVzZXIgdG8gc2VsZWN0IGZyb20gdmFyaW91cyBwcmUtY2FubmVkIGNvbmZpZ3VyYXRpb25zIChpZiB0aGUgZGV2ZWxvcGVyCisgICBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBwcmVzZW50IHRoZSBjaG9pY2VzIGFuZCBsb2FkIHRoZSBjaG9zZW4KKyAgIGNvbmZpZ3VyYXRpb24pLgorCisgICA6cGFyYW0gZm5hbWU6IEEgZmlsZW5hbWUsIG9yIGEgZmlsZS1saWtlIG9iamVjdCwgb3IgYW4gaW5zdGFuY2UgZGVyaXZlZAorICAgICAgICAgICAgICAgICBmcm9tIDpjbGFzczpgfmNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXJgLiBJZiBhCisgICAgICAgICAgICAgICAgIGBgUmF3Q29uZmlnUGFyc2VyYGAtZGVyaXZlZCBpbnN0YW5jZSBpcyBwYXNzZWQsIGl0IGlzIHVzZWQgYXMKKyAgICAgICAgICAgICAgICAgaXMuIE90aGVyd2lzZSwgYSA6Y2xhc3M6YH5jb25maWdwYXJzZXIuQ29uZmlncGFyc2VyYCBpcworICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZWQsIGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWFkIGJ5IGl0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgIG9iamVjdCBwYXNzZWQgaW4gYGBmbmFtZWBgLiBJZiB0aGF0IGhhcyBhIDptZXRoOmByZWFkbGluZWAKKyAgICAgICAgICAgICAgICAgbWV0aG9kLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgZmlsZS1saWtlIG9iamVjdCBhbmQgcmVhZCB1c2luZworICAgICAgICAgICAgICAgICA6bWV0aDpgfmNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVhZF9maWxlYDsgb3RoZXJ3aXNlLAorICAgICAgICAgICAgICAgICBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgZmlsZW5hbWUgYW5kIHBhc3NlZCB0bworICAgICAgICAgICAgICAgICA6bWV0aDpgfmNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVhZGAuCisKIAogICAgOnBhcmFtIGRlZmF1bHRzOiBEZWZhdWx0cyB0byBiZSBwYXNzZWQgdG8gdGhlIENvbmZpZ1BhcnNlciBjYW4gYmUgc3BlY2lmaWVkCiAgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgYXJndW1lbnQuCkBAIC05OSw4ICsxMTIsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyIGFuY2VzdG9ycyBhcmUgZXhwbGljaXRseSBuYW1lZCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmB+Y29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcmAgaXMKKyAgICAgIG5vdyBhY2NlcHRlZCBhcyBhIHZhbHVlIGZvciBgYGZuYW1lYGAuIFRoaXMgZmFjaWxpdGF0ZXM6CiAKLS4uIGZ1bmN0aW9uOjogbGlzdGVuKHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JUKQorICAgICAgKiBVc2Ugb2YgYSBjb25maWd1cmF0aW9uIGZpbGUgd2hlcmUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGlzIGp1c3QgcGFydAorICAgICAgICBvZiB0aGUgb3ZlcmFsbCBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLgorICAgICAgKiBVc2Ugb2YgYSBjb25maWd1cmF0aW9uIHJlYWQgZnJvbSBhIGZpbGUsIGFuZCB0aGVuIG1vZGlmaWVkIGJ5IHRoZSB1c2luZworICAgICAgICBhcHBsaWNhdGlvbiAoZS5nLiBiYXNlZCBvbiBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyBvciBvdGhlciBhc3BlY3RzCisgICAgICAgIG9mIHRoZSBydW50aW1lIGVudmlyb25tZW50KSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBgZmlsZUNvbmZpZ2BgLgorCisuLiBmdW5jdGlvbjo6IGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwgdmVyaWZ5PU5vbmUpCiAKICAgIFN0YXJ0cyB1cCBhIHNvY2tldCBzZXJ2ZXIgb24gdGhlIHNwZWNpZmllZCBwb3J0LCBhbmQgbGlzdGVucyBmb3IgbmV3CiAgICBjb25maWd1cmF0aW9ucy4gSWYgbm8gcG9ydCBpcyBzcGVjaWZpZWQsIHRoZSBtb2R1bGUncyBkZWZhdWx0CkBAIC0xMTEsNiArMTMzLDE3IEBACiAgICA6bWV0aDpgfnRocmVhZGluZy5UaHJlYWQuam9pbmAgd2hlbiBhcHByb3ByaWF0ZS4gVG8gc3RvcCB0aGUgc2VydmVyLAogICAgY2FsbCA6ZnVuYzpgc3RvcExpc3RlbmluZ2AuCiAKKyAgIFRoZSBgYHZlcmlmeWBgIGFyZ3VtZW50LCBpZiBzcGVjaWZpZWQsIHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIHNob3VsZAorICAgdmVyaWZ5IHdoZXRoZXIgYnl0ZXMgcmVjZWl2ZWQgYWNyb3NzIHRoZSBzb2NrZXQgYXJlIHZhbGlkIGFuZCBzaG91bGQgYmUKKyAgIHByb2Nlc3NlZC4gVGhpcyBjb3VsZCBiZSBkb25lIGJ5IGVuY3J5cHRpbmcgYW5kL29yIHNpZ25pbmcgd2hhdCBpcyBzZW50CisgICBhY3Jvc3MgdGhlIHNvY2tldCwgc3VjaCB0aGF0IHRoZSBgYHZlcmlmeWBgIGNhbGxhYmxlIGNhbiBwZXJmb3JtCisgICBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGFuZC9vciBkZWNyeXB0aW9uLiBUaGUgYGB2ZXJpZnlgYCBjYWxsYWJsZSBpcyBjYWxsZWQKKyAgIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgLSB0aGUgYnl0ZXMgcmVjZWl2ZWQgYWNyb3NzIHRoZSBzb2NrZXQgLSBhbmQgc2hvdWxkCisgICByZXR1cm4gdGhlIGJ5dGVzIHRvIGJlIHByb2Nlc3NlZCwgb3IgTm9uZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBieXRlcyBzaG91bGQKKyAgIGJlIGRpc2NhcmRlZC4gVGhlIHJldHVybmVkIGJ5dGVzIGNvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwYXNzZWQgaW4gYnl0ZXMKKyAgIChlLmcuIHdoZW4gb25seSB2ZXJpZmljYXRpb24gaXMgZG9uZSksIG9yIHRoZXkgY291bGQgYmUgY29tcGxldGVseSBkaWZmZXJlbnQKKyAgIChwZXJoYXBzIGlmIGRlY3J5cHRpb24gd2VyZSBwZXJmb3JtZWQpLgorCiAgICBUbyBzZW5kIGEgY29uZmlndXJhdGlvbiB0byB0aGUgc29ja2V0LCByZWFkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kCiAgICBzZW5kIGl0IHRvIHRoZSBzb2NrZXQgYXMgYSBzdHJpbmcgb2YgYnl0ZXMgcHJlY2VkZWQgYnkgYSBmb3VyLWJ5dGUgbGVuZ3RoCiAgICBzdHJpbmcgcGFja2VkIGluIGJpbmFyeSB1c2luZyBgYHN0cnVjdC5wYWNrKCc+TCcsIG4pYGAuCkBAIC0xMjcsNyArMTYwLDEyIEBACiAgICAgICA6ZnVuYzpgbGlzdGVuYCBzb2NrZXQgYW5kIHNlbmRpbmcgYSBjb25maWd1cmF0aW9uIHdoaWNoIHJ1bnMgd2hhdGV2ZXIKICAgICAgIGNvZGUgdGhlIGF0dGFja2VyIHdhbnRzIHRvIGhhdmUgZXhlY3V0ZWQgaW4gdGhlIHZpY3RpbSdzIHByb2Nlc3MuIFRoaXMgaXMKICAgICAgIGVzcGVjaWFsbHkgZWFzeSB0byBkbyBpZiB0aGUgZGVmYXVsdCBwb3J0IGlzIHVzZWQsIGJ1dCBub3QgaGFyZCBldmVuIGlmIGEKLSAgICAgIGRpZmZlcmVudCBwb3J0IGlzIHVzZWQpLgorICAgICAgZGlmZmVyZW50IHBvcnQgaXMgdXNlZCkuIFRvIGF2b2lkIHRoZSByaXNrIG9mIHRoaXMgaGFwcGVuaW5nLCB1c2UgdGhlCisgICAgICBgYHZlcmlmeWBgIGFyZ3VtZW50IHRvIDpmdW5jOmBsaXN0ZW5gIHRvIHByZXZlbnQgdW5yZWNvZ25pc2VkCisgICAgICBjb25maWd1cmF0aW9ucyBmcm9tIGJlaW5nIGFwcGxpZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LgorICAgICAgVGhlIGBgdmVyaWZ5YGAgYXJndW1lbnQgd2FzIGFkZGVkLgogCiAuLiBmdW5jdGlvbjo6IHN0b3BMaXN0ZW5pbmcoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdCBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CmluZGV4IDQxNWUzOTcuLjMxNWMxNjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CkBAIC0zMDAsNyArMzAwLDcgQEAKIHRpbWVkIGludGVydmFscy4KIAogCi0uLiBjbGFzczo6IFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcihmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UpCisuLiBjbGFzczo6IFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcihmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UsIGF0VGltZT1Ob25lKQogCiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcmAgY2xhc3MuIFRoZQogICAgc3BlY2lmaWVkIGZpbGUgaXMgb3BlbmVkIGFuZCB1c2VkIGFzIHRoZSBzdHJlYW0gZm9yIGxvZ2dpbmcuIE9uIHJvdGF0aW5nIGl0IGFsc28KQEAgLTM1MCw2ICszNTAsMTIgQEAKICAgIElmICpkZWxheSogaXMgdHJ1ZSwgdGhlbiBmaWxlIG9wZW5pbmcgaXMgZGVmZXJyZWQgdW50aWwgdGhlIGZpcnN0IGNhbGwgdG8KICAgIDptZXRoOmBlbWl0YC4KIAorICAgSWYgKmF0VGltZSogaXMgbm90IGBgTm9uZWBgLCBpdCBtdXN0IGJlIGEgYGBkYXRldGltZS50aW1lYGAgaW5zdGFuY2Ugd2hpY2gKKyAgIHNwZWNpZmllcyB0aGUgdGltZSBvZiBkYXkgd2hlbiByb2xsb3ZlciBvY2N1cnMsIGZvciB0aGUgY2FzZXMgd2hlcmUgcm9sbG92ZXIKKyAgIGlzIHNldCB0byBoYXBwZW4gImF0IG1pZG5pZ2h0IiBvciAib24gYSBwYXJ0aWN1bGFyIHdlZWtkYXkiLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgKmF0VGltZSogcGFyYW1ldGVyIHdhcyBhZGRlZC4KIAogICAgLi4gbWV0aG9kOjogZG9Sb2xsb3ZlcigpCiAKQEAgLTM3NSw2ICszODEsOSBAQAogICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBTb2NrZXRIYW5kbGVyYCBjbGFzcyBpbnRlbmRlZCB0bwogICAgY29tbXVuaWNhdGUgd2l0aCBhIHJlbW90ZSBtYWNoaW5lIHdob3NlIGFkZHJlc3MgaXMgZ2l2ZW4gYnkgKmhvc3QqIGFuZCAqcG9ydCouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJZiBgYHBvcnRgYCBpcyBzcGVjaWZpZWQgYXMgYGBOb25lYGAsIGEgVW5peCBkb21haW4gc29ja2V0IGlzIGNyZWF0ZWQKKyAgICAgIHVzaW5nIHRoZSB2YWx1ZSBpbiBgYGhvc3RgYCAtIG90aGVyd2lzZSwgYSBUQ1Agc29ja2V0IGlzIGNyZWF0ZWQuCiAKICAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKIApAQCAtNDYwLDYgKzQ2OSw5IEBACiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YERhdGFncmFtSGFuZGxlcmAgY2xhc3MgaW50ZW5kZWQgdG8KICAgIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgbWFjaGluZSB3aG9zZSBhZGRyZXNzIGlzIGdpdmVuIGJ5ICpob3N0KiBhbmQgKnBvcnQqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSWYgYGBwb3J0YGAgaXMgc3BlY2lmaWVkIGFzIGBgTm9uZWBgLCBhIFVuaXggZG9tYWluIHNvY2tldCBpcyBjcmVhdGVkCisgICAgICB1c2luZyB0aGUgdmFsdWUgaW4gYGBob3N0YGAgLSBvdGhlcndpc2UsIGEgVENQIHNvY2tldCBpcyBjcmVhdGVkLgogCiAgICAuLiBtZXRob2Q6OiBlbWl0KCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbHptYS5yc3QgYi9Eb2MvbGlicmFyeS9sem1hLnJzdAppbmRleCAwN2I2OWViLi5iNzEwNTFkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sem1hLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sem1hLnJzdApAQCAtMzksOCArMzksOCBAQAogICAgb3BlbmVkLCBvciBpdCBjYW4gYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgYGAiciJgYCwgYGAicmIiYGAsIGBgInciYGAsIGBgIndiImBgLAotICAgYGAiYSJgYCBvciBgYCJhYiJgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgInJ0ImBgLCBgYCJ3dCJgYCwgb3IgYGAiYXQiYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgInJiImBgLgorICAgYGAieCJgYCwgYGAieGIiYGAsIGBgImEiYGAgb3IgYGAiYWIiYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCJydCJgYCwKKyAgIGBgInd0ImBgLCBgYCJ4dCJgYCwgb3IgYGAiYXQiYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAicmIiYGAuCiAKICAgIFdoZW4gb3BlbmluZyBhIGZpbGUgZm9yIHJlYWRpbmcsIHRoZSAqZm9ybWF0KiBhbmQgKmZpbHRlcnMqIGFyZ3VtZW50cyBoYXZlCiAgICB0aGUgc2FtZSBtZWFuaW5ncyBhcyBmb3IgOmNsYXNzOmBMWk1BRGVjb21wcmVzc29yYC4gSW4gdGhpcyBjYXNlLCB0aGUgKmNoZWNrKgpAQCAtNTcsNiArNTcsOSBAQAogICAgOmNsYXNzOmBpby5UZXh0SU9XcmFwcGVyYCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yCiAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgIngiYGAsIGBgInhiImBgIGFuZCBgYCJ4dCJgYCBtb2Rlcy4KKwogCiAuLiBjbGFzczo6IExaTUFGaWxlKGZpbGVuYW1lPU5vbmUsIG1vZGU9InIiLCBcKiwgZm9ybWF0PU5vbmUsIGNoZWNrPS0xLCBwcmVzZXQ9Tm9uZSwgZmlsdGVycz1Ob25lKQogCkBAIC02OSw4ICs3Miw5IEBACiAgICBmaWxlIHdpbGwgbm90IGJlIGNsb3NlZCB3aGVuIHRoZSA6Y2xhc3M6YExaTUFGaWxlYCBpcyBjbG9zZWQuCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGVpdGhlciBgYCJyImBgIGZvciByZWFkaW5nIChkZWZhdWx0KSwgYGAidyJgYCBmb3IKLSAgIG92ZXJ3cml0aW5nLCBvciBgYCJhImBgIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMKLSAgIGBgInJiImBgLCBgYCJ3YiJgYCwgYW5kIGBgImFiImBgIHJlc3BlY3RpdmVseS4KKyAgIG92ZXJ3cml0aW5nLCBgYCJ4ImBgIGZvciBleGNsdXNpdmUgY3JlYXRpb24sIG9yIGBgImEiYGAgZm9yIGFwcGVuZGluZy4gVGhlc2UKKyAgIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgYGAicmIiYGAsIGBgIndiImBgLCBgYCJ4YiJgYCBhbmQgYGAiYWIiYGAKKyAgIHJlc3BlY3RpdmVseS4KIAogICAgSWYgKmZpbGVuYW1lKiBpcyBhIGZpbGUgb2JqZWN0IChyYXRoZXIgdGhhbiBhbiBhY3R1YWwgZmlsZSBuYW1lKSwgYSBtb2RlIG9mCiAgICBgYCJ3ImBgIGRvZXMgbm90IHRydW5jYXRlIHRoZSBmaWxlLCBhbmQgaXMgaW5zdGVhZCBlcXVpdmFsZW50IHRvIGBgImEiYGAuCkBAIC0xMDMsNiArMTA3LDkgQEAKICAgICAgICAgIGZpbGUgb2JqZWN0IChlLmcuIGlmIHRoZSA6Y2xhc3M6YExaTUFGaWxlYCB3YXMgY29uc3RydWN0ZWQgYnkgcGFzc2luZyBhCiAgICAgICAgICBmaWxlIG9iamVjdCBmb3IgKmZpbGVuYW1lKikuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAieCJgYCBhbmQgYGAieGIiYGAgbW9kZXMuCisKIAogQ29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcgZGF0YSBpbiBtZW1vcnkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdCBiL0RvYy9saWJyYXJ5L21hcnNoYWwucnN0CmluZGV4IDNiOWUzZDIuLjEyNGViNjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21hcnNoYWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L21hcnNoYWwucnN0CkBAIC00MCwxMCArNDAsMTEgQEAKIHBvaW50IG51bWJlcnMsIGNvbXBsZXggbnVtYmVycywgc3RyaW5ncywgYnl0ZXMsIGJ5dGVhcnJheXMsIHR1cGxlcywgbGlzdHMsIHNldHMsCiBmcm96ZW5zZXRzLCBkaWN0aW9uYXJpZXMsIGFuZCBjb2RlIG9iamVjdHMsIHdoZXJlIGl0IHNob3VsZCBiZSB1bmRlcnN0b29kIHRoYXQKIHR1cGxlcywgbGlzdHMsIHNldHMsIGZyb3plbnNldHMgYW5kIGRpY3Rpb25hcmllcyBhcmUgb25seSBzdXBwb3J0ZWQgYXMgbG9uZyBhcwotdGhlIHZhbHVlcyBjb250YWluZWQgdGhlcmVpbiBhcmUgdGhlbXNlbHZlcyBzdXBwb3J0ZWQ7IGFuZCByZWN1cnNpdmUgbGlzdHMsIHNldHMKLWFuZCBkaWN0aW9uYXJpZXMgc2hvdWxkIG5vdCBiZSB3cml0dGVuICh0aGV5IHdpbGwgY2F1c2UgaW5maW5pdGUgbG9vcHMpLiAgVGhlCit0aGUgdmFsdWVzIGNvbnRhaW5lZCB0aGVyZWluIGFyZSB0aGVtc2VsdmVzIHN1cHBvcnRlZC4KIHNpbmdsZXRvbnMgOmNvbnN0OmBOb25lYCwgOmNvbnN0OmBFbGxpcHNpc2AgYW5kIDpleGM6YFN0b3BJdGVyYXRpb25gIGNhbiBhbHNvIGJlCiBtYXJzaGFsbGVkIGFuZCB1bm1hcnNoYWxsZWQuCitGb3IgZm9ybWF0ICp2ZXJzaW9uKiBsb3dlciB0aGFuIDMsIHJlY3Vyc2l2ZSBsaXN0cywgc2V0cyBhbmQgZGljdGlvbmFyaWVzIGNhbm5vdAorYmUgd3JpdHRlbiAoc2VlIGJlbG93KS4KIAogVGhlcmUgYXJlIGZ1bmN0aW9ucyB0aGF0IHJlYWQvd3JpdGUgZmlsZXMgYXMgd2VsbCBhcyBmdW5jdGlvbnMgb3BlcmF0aW5nIG9uCiBzdHJpbmdzLgpAQCAtMTAzLDcgKzEwNCw5IEBACiAKICAgIEluZGljYXRlcyB0aGUgZm9ybWF0IHRoYXQgdGhlIG1vZHVsZSB1c2VzLiBWZXJzaW9uIDAgaXMgdGhlIGhpc3RvcmljYWwKICAgIGZvcm1hdCwgdmVyc2lvbiAxIHNoYXJlcyBpbnRlcm5lZCBzdHJpbmdzIGFuZCB2ZXJzaW9uIDIgdXNlcyBhIGJpbmFyeSBmb3JtYXQKLSAgIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLiBUaGUgY3VycmVudCB2ZXJzaW9uIGlzIDIuCisgICBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4KKyAgIFZlcnNpb24gMyBhZGRzIHN1cHBvcnQgZm9yIG9iamVjdCBpbnN0YW5jaW5nIGFuZCByZWN1cnNpb24uCisgICBUaGUgY3VycmVudCB2ZXJzaW9uIGlzIDMuCiAKIAogLi4gcnVicmljOjogRm9vdG5vdGVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0IGIvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAppbmRleCA1ZjUwY2YxLi5mNzU3YjMxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKQEAgLTkzLDExICs5MywxMTAgQEAKICAgICAgICAgcC5zdGFydCgpCiAgICAgICAgIHAuam9pbigpCiAKLUZvciBhbiBleHBsYW5hdGlvbiBvZiB3aHkgKG9uIFdpbmRvd3MpIHRoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBwYXJ0IGlzCitGb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBwYXJ0IGlzCiBuZWNlc3NhcnksIHNlZSA6cmVmOmBtdWx0aXByb2Nlc3NpbmctcHJvZ3JhbW1pbmdgLgogCiAKIAorQ29udGV4dHMgYW5kIHN0YXJ0IG1ldGhvZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy4uIF9tdWx0aXByb2Nlc3Npbmctc3RhcnQtbWV0aG9kczoKKworRGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSwgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBzdXBwb3J0cyB0aHJlZSB3YXlzCit0byBzdGFydCBhIHByb2Nlc3MuICBUaGVzZSAqc3RhcnQgbWV0aG9kcyogYXJlCisKKyAgKnNwYXduKgorICAgIFRoZSBwYXJlbnQgcHJvY2VzcyBzdGFydHMgYSBmcmVzaCBweXRob24gaW50ZXJwcmV0ZXIgcHJvY2Vzcy4gIFRoZQorICAgIGNoaWxkIHByb2Nlc3Mgd2lsbCBvbmx5IGluaGVyaXQgdGhvc2UgcmVzb3VyY2VzIG5lY2Vzc2FyeSB0byBydW4KKyAgICB0aGUgcHJvY2VzcyBvYmplY3RzIDptZXRoOmB+UHJvY2Vzcy5ydW5gIG1ldGhvZC4gIEluIHBhcnRpY3VsYXIsCisgICAgdW5uZWNlc3NhcnkgZmlsZSBkZXNjcmlwdG9ycyBhbmQgaGFuZGxlcyBmcm9tIHRoZSBwYXJlbnQgcHJvY2VzcworICAgIHdpbGwgbm90IGJlIGluaGVyaXRlZC4gIFN0YXJ0aW5nIGEgcHJvY2VzcyB1c2luZyB0aGlzIG1ldGhvZCBpcworICAgIHJhdGhlciBzbG93IGNvbXBhcmVkIHRvIHVzaW5nICpmb3JrKiBvciAqZm9ya3NlcnZlciouCisKKyAgICBBdmFpbGFibGUgb24gVW5peCBhbmQgV2luZG93cy4gIFRoZSBkZWZhdWx0IG9uIFdpbmRvd3MuCisKKyAgKmZvcmsqCisgICAgVGhlIHBhcmVudCBwcm9jZXNzIHVzZXMgOmZ1bmM6YG9zLmZvcmtgIHRvIGZvcmsgdGhlIFB5dGhvbgorICAgIGludGVycHJldGVyLiAgVGhlIGNoaWxkIHByb2Nlc3MsIHdoZW4gaXQgYmVnaW5zLCBpcyBlZmZlY3RpdmVseQorICAgIGlkZW50aWNhbCB0byB0aGUgcGFyZW50IHByb2Nlc3MuICBBbGwgcmVzb3VyY2VzIG9mIHRoZSBwYXJlbnQgYXJlCisgICAgaW5oZXJpdGVkIGJ5IHRoZSBjaGlsZCBwcm9jZXNzLiAgTm90ZSB0aGF0IHNhZmVseSBmb3JraW5nIGEKKyAgICBtdWx0aXRocmVhZGVkIHByb2Nlc3MgaXMgcHJvYmxlbWF0aWMuCisKKyAgICBBdmFpbGFibGUgb24gVW5peCBvbmx5LiAgVGhlIGRlZmF1bHQgb24gVW5peC4KKworICAqZm9ya3NlcnZlcioKKyAgICBXaGVuIHRoZSBwcm9ncmFtIHN0YXJ0cyBhbmQgc2VsZWN0cyB0aGUgKmZvcmtzZXJ2ZXIqIHN0YXJ0IG1ldGhvZCwKKyAgICBhIHNlcnZlciBwcm9jZXNzIGlzIHN0YXJ0ZWQuICBGcm9tIHRoZW4gb24sIHdoZW5ldmVyIGEgbmV3IHByb2Nlc3MKKyAgICBpcyBuZWVkZWQsIHRoZSBwYXJlbnQgcHJvY2VzcyBjb25uZWN0cyB0byB0aGUgc2VydmVyIGFuZCByZXF1ZXN0cworICAgIHRoYXQgaXQgZm9yayBhIG5ldyBwcm9jZXNzLiAgVGhlIGZvcmsgc2VydmVyIHByb2Nlc3MgaXMgc2luZ2xlCisgICAgdGhyZWFkZWQgc28gaXQgaXMgc2FmZSBmb3IgaXQgdG8gdXNlIDpmdW5jOmBvcy5mb3JrYC4gIE5vCisgICAgdW5uZWNlc3NhcnkgcmVzb3VyY2VzIGFyZSBpbmhlcml0ZWQuCisKKyAgICBBdmFpbGFibGUgb24gVW5peCBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCBwYXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMKKyAgICBvdmVyIFVuaXggcGlwZXMuCisKK0JlZm9yZSBQeXRob24gMy40ICpmb3JrKiB3YXMgdGhlIG9ubHkgb3B0aW9uIGF2YWlsYWJsZSBvbiBVbml4LiAgQWxzbywKK3ByaW9yIHRvIFB5dGhvbiAzLjQsIGNoaWxkIHByb2Nlc3NlcyB3b3VsZCBpbmhlcml0IGFsbCB0aGUgcGFyZW50cworaW5oZXJpdGFibGUgaGFuZGxlcyBvbiBXaW5kb3dzLgorCitPbiBVbml4IHVzaW5nIHRoZSAqc3Bhd24qIG9yICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2RzIHdpbGwgYWxzbworc3RhcnQgYSAqc2VtYXBob3JlIHRyYWNrZXIqIHByb2Nlc3Mgd2hpY2ggdHJhY2tzIHRoZSB1bmxpbmtlZCBuYW1lZAorc2VtYXBob3JlcyBjcmVhdGVkIGJ5IHByb2Nlc3NlcyBvZiB0aGUgcHJvZ3JhbS4gIFdoZW4gYWxsIHByb2Nlc3NlcworaGF2ZSBleGl0ZWQgdGhlIHNlbWFwaG9yZSB0cmFja2VyIHVubGlua3MgYW55IHJlbWFpbmluZyBzZW1hcGhvcmVzLgorVXN1YWxseSB0aGVyZSBzaG91bGQgYmUgbm9uZSwgYnV0IGlmIGEgcHJvY2VzcyB3YXMga2lsbGVkIGJ5IGEgc2lnbmFsCit0aGVyZSBtYXkgc29tZSAibGVha2VkIiBzZW1hcGhvcmVzLiAgKFVubGlua2luZyB0aGUgbmFtZWQgc2VtYXBob3JlcworaXMgYSBzZXJpb3VzIG1hdHRlciBzaW5jZSB0aGUgc3lzdGVtIGFsbG93cyBvbmx5IGEgbGltaXRlZCBudW1iZXIsIGFuZAordGhleSB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHVubGlua2VkIHVudGlsIHRoZSBuZXh0IHJlYm9vdC4pCisKK1RvIHNlbGVjdCBhIHN0YXJ0IG1ldGhvZCB5b3UgdXNlIHRoZSA6ZnVuYzpgc2V0X3N0YXJ0X21ldGhvZGAgaW4KK3RoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBjbGF1c2Ugb2YgdGhlIG1haW4gbW9kdWxlLiAgRm9yCitleGFtcGxlOjoKKworICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcgYXMgbXAKKworICAgICAgIGRlZiBmb28ocSk6CisgICAgICAgICAgIHEucHV0KCdoZWxsbycpCisKKyAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAgICBtcC5zZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCisgICAgICAgICAgIHEgPSBtcC5RdWV1ZSgpCisgICAgICAgICAgIHAgPSBtcC5Qcm9jZXNzKHRhcmdldD1mb28sIGFyZ3M9KHEsKSkKKyAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgIHByaW50KHEuZ2V0KCkpCisgICAgICAgICAgIHAuam9pbigpCisKKzpmdW5jOmBzZXRfc3RhcnRfbWV0aG9kYCBzaG91bGQgbm90IGJlIHVzZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlCitwcm9ncmFtLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSA6ZnVuYzpgZ2V0X2NvbnRleHRgIHRvIG9idGFpbiBhIGNvbnRleHQKK29iamVjdC4gIENvbnRleHQgb2JqZWN0cyBoYXZlIHRoZSBzYW1lIEFQSSBhcyB0aGUgbXVsdGlwcm9jZXNzaW5nCittb2R1bGUsIGFuZCBhbGxvdyBvbmUgdG8gdXNlIG11bHRpcGxlIHN0YXJ0IG1ldGhvZHMgaW4gdGhlIHNhbWUKK3Byb2dyYW0uIDo6CisKKyAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nIGFzIG1wCisKKyAgICAgICBkZWYgZm9vKHEpOgorICAgICAgICAgICBxLnB1dCgnaGVsbG8nKQorCisgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgY3R4ID0gbXAuZ2V0X2NvbnRleHQoJ3NwYXduJykKKyAgICAgICAgICAgcSA9IGN0eC5RdWV1ZSgpCisgICAgICAgICAgIHAgPSBjdHguUHJvY2Vzcyh0YXJnZXQ9Zm9vLCBhcmdzPShxLCkpCisgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICBwcmludChxLmdldCgpKQorICAgICAgICAgICBwLmpvaW4oKQorCitOb3RlIHRoYXQgb2JqZWN0cyByZWxhdGVkIHRvIG9uZSBjb250ZXh0IG1heSBub3QgYmUgY29tcGF0aWJsZSB3aXRoCitwcm9jZXNzZXMgZm9yIGEgZGlmZmVyZW50IGNvbnRleHQuICBJbiBwYXJ0aWN1bGFyLCBsb2NrcyBjcmVhdGVkIHVzaW5nCit0aGUgKmZvcmsqIGNvbnRleHQgY2Fubm90IGJlIHBhc3NlZCB0byBhIHByb2Nlc3NlcyBzdGFydGVkIHVzaW5nIHRoZQorKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcy4KKworQSBsaWJyYXJ5IHdoaWNoIHdhbnRzIHRvIHVzZSBhIHBhcnRpY3VsYXIgc3RhcnQgbWV0aG9kIHNob3VsZCBwcm9iYWJseQordXNlIDpmdW5jOmBnZXRfY29udGV4dGAgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgY2hvaWNlIG9mIHRoZQorbGlicmFyeSB1c2VyLgorCisKIEV4Y2hhbmdpbmcgb2JqZWN0cyBiZXR3ZWVuIHByb2Nlc3Nlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTI3NCwxNSArMzczLDMxIEBACiBGb3IgZXhhbXBsZTo6CiAKICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCisgICBmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCiAKICAgIGRlZiBmKHgpOgogICAgICAgIHJldHVybiB4KngKIAogICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAgICB3aXRoIFBvb2wocHJvY2Vzc2VzPTQpIGFzIHBvb2w6ICAgICAgICAjIHN0YXJ0IDQgd29ya2VyIHByb2Nlc3NlcwotICAgICAgICAgICByZXN1bHQgPSBwb29sLmFwcGx5X2FzeW5jKGYsIFsxMF0pICMgZXZhbHVhdGUgImYoMTApIiBhc3luY2hyb25vdXNseQotICAgICAgICAgICBwcmludChyZXN1bHQuZ2V0KHRpbWVvdXQ9MSkpICAgICAgICMgcHJpbnRzICIxMDAiIHVubGVzcyB5b3VyIGNvbXB1dGVyIGlzICp2ZXJ5KiBzbG93Ci0gICAgICAgICAgIHByaW50KHBvb2wubWFwKGYsIHJhbmdlKDEwKSkpICAgICAgIyBwcmludHMgIlswLCAxLCA0LC4uLiwgODFdIgorICAgICAgICMgc3RhcnQgNCB3b3JrZXIgcHJvY2Vzc2VzCisgICAgICAgd2l0aCBQb29sKHByb2Nlc3Nlcz00KSBhcyBwb29sOgorCisgICAgICAgICAgICMgcHJpbnQgIlswLCAxLCA0LC4uLiwgODFdIgorICAgICAgICAgICBwcmludChwb29sLm1hcChmLCByYW5nZSgxMCkpKQorCisgICAgICAgICAgICMgcHJpbnQgc2FtZSBudW1iZXJzIGluIGFyYml0cmFyeSBvcmRlcgorICAgICAgICAgICBmb3IgaSBpbiBwb29sLmltYXBfdW5vcmRlcmVkKGYsIHJhbmdlKDEwKSk6CisgICAgICAgICAgICAgICBwcmludChpKQorCisgICAgICAgICAgICMgZXZhbHVhdGUgImYoMTApIiBhc3luY2hyb25vdXNseQorICAgICAgICAgICByZXMgPSBwb29sLmFwcGx5X2FzeW5jKGYsIFsxMF0pCisgICAgICAgICAgIHByaW50KHJlcy5nZXQodGltZW91dD0xKSkgICAgICAgICAgICAgIyBwcmludHMgIjEwMCIKKworICAgICAgICAgICAjIG1ha2Ugd29ya2VyIHNsZWVwIGZvciAxMCBzZWNzCisgICAgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoc2xlZXAsIDEwKQorICAgICAgICAgICBwcmludChyZXMuZ2V0KHRpbWVvdXQ9MSkpICAgICAgICAgICAgICMgcmFpc2VzIG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3IKKworICAgICAgICMgZXhpdGluZyB0aGUgJ3dpdGgnLWJsb2NrIGhhcyBzdG9wcGVkIHRoZSBwb29sCiAKIE5vdGUgdGhhdCB0aGUgbWV0aG9kcyBvZiBhIHBvb2wgc2hvdWxkIG9ubHkgZXZlciBiZSB1c2VkIGJ5IHRoZQogcHJvY2VzcyB3aGljaCBjcmVhdGVkIGl0LgpAQCAtNzMxLDYgKzg0Niw5IEBACiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0uICBNYXkgcmFpc2UKICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCisgICAuLiBzZWVhbHNvOjoKKyAgICAgIDpmdW5jOmBvcy5jcHVfY291bnRgCisKIC4uIGZ1bmN0aW9uOjogY3VycmVudF9wcm9jZXNzKCkKIAogICAgUmV0dXJuIHRoZSA6Y2xhc3M6YFByb2Nlc3NgIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MuCkBAIC03NjEsNiArODc5LDQzIEBACiAgICBJZiB0aGUgbW9kdWxlIGlzIGJlaW5nIHJ1biBub3JtYWxseSBieSB0aGUgUHl0aG9uIGludGVycHJldGVyIHRoZW4KICAgIDpmdW5jOmBmcmVlemVfc3VwcG9ydGAgaGFzIG5vIGVmZmVjdC4KIAorLi4gZnVuY3Rpb246OiBnZXRfYWxsX3N0YXJ0X21ldGhvZHMoKQorCisgICBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgc3VwcG9ydGVkIHN0YXJ0IG1ldGhvZHMsIHRoZSBmaXJzdCBvZiB3aGljaAorICAgaXMgdGhlIGRlZmF1bHQuICBUaGUgcG9zc2libGUgc3RhcnQgbWV0aG9kcyBhcmUgYGAnZm9yaydgYCwKKyAgIGBgJ3NwYXduJ2BgIGFuZCBgYCdmb3Jrc2VydmVyJ2BgLiAgT24gV2luZG93cyBvbmx5IGBgJ3NwYXduJ2BgIGlzCisgICBhdmFpbGFibGUuICBPbiBVbml4IGBgJ2ZvcmsnYGAgYW5kIGBgJ3NwYXduJ2BgIGFyZSBhbHdheXMKKyAgIHN1cHBvcnRlZCwgd2l0aCBgYCdmb3JrJ2BgIGJlaW5nIHRoZSBkZWZhdWx0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBnZXRfY29udGV4dChtZXRob2Q9Tm9uZSkKKworICAgUmV0dXJuIGEgY29udGV4dCBvYmplY3Qgd2hpY2ggaGFzIHRoZSBzYW1lIGF0dHJpYnV0ZXMgYXMgdGhlCisgICA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG1vZHVsZS4KKworICAgSWYgKm1ldGhvZCogaXMgKk5vbmUqIHRoZW4gdGhlIGRlZmF1bHQgY29udGV4dCBpcyByZXR1cm5lZC4KKyAgIE90aGVyd2lzZSAqbWV0aG9kKiBzaG91bGQgYmUgYGAnZm9yaydgYCwgYGAnc3Bhd24nYGAsCisgICBgYCdmb3Jrc2VydmVyJ2BgLiAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQKKyAgIHN0YXJ0IG1ldGhvZCBpcyBub3QgYXZhaWxhYmxlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBnZXRfc3RhcnRfbWV0aG9kKGFsbG93X25vbmU9RmFsc2UpCisKKyAgIFJldHVybiB0aGUgbmFtZSBvZiBzdGFydCBtZXRob2QgdXNlZCBmb3Igc3RhcnRpbmcgcHJvY2Vzc2VzLgorCisgICBJZiB0aGUgc3RhcnQgbWV0aG9kIGhhcyBub3QgYmVlbiBmaXhlZCBhbmQgKmFsbG93X25vbmUqIGlzIGZhbHNlLAorICAgdGhlbiB0aGUgc3RhcnQgbWV0aG9kIGlzIGZpeGVkIHRvIHRoZSBkZWZhdWx0IGFuZCB0aGUgbmFtZSBpcworICAgcmV0dXJuZWQuICBJZiB0aGUgc3RhcnQgbWV0aG9kIGhhcyBub3QgYmVlbiBmaXhlZCBhbmQgKmFsbG93X25vbmUqCisgICBpcyB0cnVlIHRoZW4gKk5vbmUqIGlzIHJldHVybmVkLgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCwgYGAnZm9ya3NlcnZlcidgYAorICAgb3IgKk5vbmUqLiAgYGAnZm9yaydgYCBpcyB0aGUgZGVmYXVsdCBvbiBVbml4LCB3aGlsZSBgYCdzcGF3bidgYCBpcworICAgdGhlIGRlZmF1bHQgb24gV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGZ1bmN0aW9uOjogc2V0X2V4ZWN1dGFibGUoKQogCiAgICBTZXRzIHRoZSBwYXRoIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gdXNlIHdoZW4gc3RhcnRpbmcgYSBjaGlsZCBwcm9jZXNzLgpAQCAtNzY5LDggKzkyNCwyMSBAQAogCiAgICAgICBzZXRfZXhlY3V0YWJsZShvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAncHl0aG9udy5leGUnKSkKIAotICAgYmVmb3JlIHRoZXkgY2FuIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMuICAoV2luZG93cyBvbmx5KQorICAgYmVmb3JlIHRoZXkgY2FuIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBOb3cgc3VwcG9ydGVkIG9uIFVuaXggd2hlbiB0aGUgYGAnc3Bhd24nYGAgc3RhcnQgbWV0aG9kIGlzIHVzZWQuCisKKy4uIGZ1bmN0aW9uOjogc2V0X3N0YXJ0X21ldGhvZChtZXRob2QpCisKKyAgIFNldCB0aGUgbWV0aG9kIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvIHN0YXJ0IGNoaWxkIHByb2Nlc3Nlcy4KKyAgICptZXRob2QqIGNhbiBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCBvciBgYCdmb3Jrc2VydmVyJ2BgLgorCisgICBOb3RlIHRoYXQgdGhpcyBzaG91bGQgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSwgYW5kIGl0IHNob3VsZCBiZQorICAgcHJvdGVjdGVkIGluc2lkZSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgY2xhdXNlIG9mIHRoZQorICAgbWFpbiBtb2R1bGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBub3RlOjoKIApAQCAtMTY3OCwxNCArMTg0NiwxNCBAQAogT25lIGNhbiBjcmVhdGUgYSBwb29sIG9mIHByb2Nlc3NlcyB3aGljaCB3aWxsIGNhcnJ5IG91dCB0YXNrcyBzdWJtaXR0ZWQgdG8gaXQKIHdpdGggdGhlIDpjbGFzczpgUG9vbGAgY2xhc3MuCiAKLS4uIGNsYXNzOjogUG9vbChbcHJvY2Vzc2VzWywgaW5pdGlhbGl6ZXJbLCBpbml0YXJnc1ssIG1heHRhc2tzcGVyY2hpbGRdXV1dKQorLi4gY2xhc3M6OiBQb29sKFtwcm9jZXNzZXNbLCBpbml0aWFsaXplclssIGluaXRhcmdzWywgbWF4dGFza3NwZXJjaGlsZCBbLCBjb250ZXh0XV1dXV0pCiAKICAgIEEgcHJvY2VzcyBwb29sIG9iamVjdCB3aGljaCBjb250cm9scyBhIHBvb2wgb2Ygd29ya2VyIHByb2Nlc3NlcyB0byB3aGljaCBqb2JzCiAgICBjYW4gYmUgc3VibWl0dGVkLiAgSXQgc3VwcG9ydHMgYXN5bmNocm9ub3VzIHJlc3VsdHMgd2l0aCB0aW1lb3V0cyBhbmQKICAgIGNhbGxiYWNrcyBhbmQgaGFzIGEgcGFyYWxsZWwgbWFwIGltcGxlbWVudGF0aW9uLgogCiAgICAqcHJvY2Vzc2VzKiBpcyB0aGUgbnVtYmVyIG9mIHdvcmtlciBwcm9jZXNzZXMgdG8gdXNlLiAgSWYgKnByb2Nlc3NlcyogaXMKLSAgIGBgTm9uZWBgIHRoZW4gdGhlIG51bWJlciByZXR1cm5lZCBieSA6ZnVuYzpgY3B1X2NvdW50YCBpcyB1c2VkLiAgSWYKKyAgIGBgTm9uZWBgIHRoZW4gdGhlIG51bWJlciByZXR1cm5lZCBieSA6ZnVuYzpgb3MuY3B1X2NvdW50YCBpcyB1c2VkLiAgSWYKICAgICppbml0aWFsaXplciogaXMgbm90IGBgTm9uZWBgIHRoZW4gZWFjaCB3b3JrZXIgcHJvY2VzcyB3aWxsIGNhbGwKICAgIGBgaW5pdGlhbGl6ZXIoKmluaXRhcmdzKWBgIHdoZW4gaXQgc3RhcnRzLgogCkBAIC0xNjk4LDYgKzE4NjYsMTMgQEAKICAgICAgIHVudXNlZCByZXNvdXJjZXMgdG8gYmUgZnJlZWQuIFRoZSBkZWZhdWx0ICptYXh0YXNrc3BlcmNoaWxkKiBpcyBOb25lLCB3aGljaAogICAgICAgbWVhbnMgd29ya2VyIHByb2Nlc3NlcyB3aWxsIGxpdmUgYXMgbG9uZyBhcyB0aGUgcG9vbC4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICAqY29udGV4dCogY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29udGV4dCB1c2VkIGZvciBzdGFydGluZworICAgICAgdGhlIHdvcmtlciBwcm9jZXNzZXMuICBVc3VhbGx5IGEgcG9vbCBpcyBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgZnVuY3Rpb24gOmZ1bmM6YG11bHRpcHJvY2Vzc2luZy5Qb29sYCBvciB0aGUgOm1ldGg6YFBvb2xgIG1ldGhvZAorICAgICAgb2YgYSBjb250ZXh0IG9iamVjdC4gIEluIGJvdGggY2FzZXMgKmNvbnRleHQqIGlzIHNldAorICAgICAgYXBwcm9wcmlhdGVseS4KKwogICAgLi4gbm90ZTo6CiAKICAgICAgIFdvcmtlciBwcm9jZXNzZXMgd2l0aGluIGEgOmNsYXNzOmBQb29sYCB0eXBpY2FsbHkgbGl2ZSBmb3IgdGhlIGNvbXBsZXRlCkBAIC0yMTg5LDQzICsyMzY0LDggQEAKICAgICBbSU5GTy9NYWluUHJvY2Vzc10gc2VuZGluZyBzaHV0ZG93biBtZXNzYWdlIHRvIG1hbmFnZXIKICAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIG1hbmFnZXIgZXhpdGluZyB3aXRoIGV4aXRjb2RlIDAKIAotSW4gYWRkaXRpb24gdG8gaGF2aW5nIHRoZXNlIHR3byBsb2dnaW5nIGZ1bmN0aW9ucywgdGhlIG11bHRpcHJvY2Vzc2luZyBhbHNvCi1leHBvc2VzIHR3byBhZGRpdGlvbmFsIGxvZ2dpbmcgbGV2ZWwgYXR0cmlidXRlcy4gVGhlc2UgYXJlICA6Y29uc3Q6YFNVQldBUk5JTkdgCi1hbmQgOmNvbnN0OmBTVUJERUJVR2AuIFRoZSB0YWJsZSBiZWxvdyBpbGx1c3RyYXRlcyB3aGVyZSB0aGVzZXMgZml0IGluIHRoZQotbm9ybWFsIGxldmVsIGhpZXJhcmNoeS4KLQotKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLXwgTGV2ZWwgICAgICAgICAgfCBOdW1lcmljIHZhbHVlICB8Ci0rPT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09KwotfCBgYFNVQldBUk5JTkdgYCB8IDI1ICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCi18IGBgU1VCREVCVUdgYCAgIHwgNSAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLQogRm9yIGEgZnVsbCB0YWJsZSBvZiBsb2dnaW5nIGxldmVscywgc2VlIHRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUuCiAKLVRoZXNlIGFkZGl0aW9uYWwgbG9nZ2luZyBsZXZlbHMgYXJlIHVzZWQgcHJpbWFyaWx5IGZvciBjZXJ0YWluIGRlYnVnIG1lc3NhZ2VzCi13aXRoaW4gdGhlIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUuIEJlbG93IGlzIHRoZSBzYW1lIGV4YW1wbGUgYXMgYWJvdmUsIGV4Y2VwdAotd2l0aCA6Y29uc3Q6YFNVQkRFQlVHYCBlbmFibGVkOjoKLQotICAgID4+PiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLCBsb2dnaW5nCi0gICAgPj4+IGxvZ2dlciA9IG11bHRpcHJvY2Vzc2luZy5sb2dfdG9fc3RkZXJyKCkKLSAgICA+Pj4gbG9nZ2VyLnNldExldmVsKG11bHRpcHJvY2Vzc2luZy5TVUJERUJVRykKLSAgICA+Pj4gbG9nZ2VyLndhcm5pbmcoJ2Rvb21lZCcpCi0gICAgW1dBUk5JTkcvTWFpblByb2Nlc3NdIGRvb21lZAotICAgID4+PiBtID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gY2hpbGQgcHJvY2VzcyBjYWxsaW5nIHNlbGYucnVuKCkKLSAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIGNyZWF0ZWQgdGVtcCBkaXJlY3RvcnkgLy4uLi9weW1wLS4uLgotICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gbWFuYWdlciBzZXJ2aW5nIGF0ICcvLi4uL3B5bXAtZGpHQlhOL2xpc3RlbmVyLS4uLicKLSAgICA+Pj4gZGVsIG0KLSAgICBbU1VCREVCVUcvTWFpblByb2Nlc3NdIGZpbmFsaXplciBjYWxsaW5nIC4uLgotICAgIFtJTkZPL01haW5Qcm9jZXNzXSBzZW5kaW5nIHNodXRkb3duIG1lc3NhZ2UgdG8gbWFuYWdlcgotICAgIFtERUJVRy9TeW5jTWFuYWdlci0uLi5dIG1hbmFnZXIgcmVjZWl2ZWQgc2h1dGRvd24gbWVzc2FnZQotICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0uLi5dIGNhbGxpbmcgPEZpbmFsaXplIG9iamVjdCwgY2FsbGJhY2s9dW5saW5rLCAuLi4KLSAgICBbU1VCREVCVUcvU3luY01hbmFnZXItLi4uXSBmaW5hbGl6ZXIgY2FsbGluZyA8YnVpbHQtaW4gZnVuY3Rpb24gdW5saW5rPiAuLi4KLSAgICBbU1VCREVCVUcvU3luY01hbmFnZXItLi4uXSBjYWxsaW5nIDxGaW5hbGl6ZSBvYmplY3QsIGRlYWQ+Ci0gICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gZmluYWxpemVyIGNhbGxpbmcgPGZ1bmN0aW9uIHJtdHJlZSBhdCAweDVhYTczMD4gLi4uCi0gICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBtYW5hZ2VyIGV4aXRpbmcgd2l0aCBleGl0Y29kZSAwCiAKIFRoZSA6bW9kOmBtdWx0aXByb2Nlc3NpbmcuZHVtbXlgIG1vZHVsZQogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CkBAIC0yMjQ2LDggKzIzODYsMTAgQEAKIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AuCiAKIAotQWxsIHBsYXRmb3Jtcwotfn5+fn5+fn5+fn5+fgorQWxsIHN0YXJ0IG1ldGhvZHMKK35+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBmb2xsb3dpbmcgYXBwbGllcyB0byBhbGwgc3RhcnQgbWV0aG9kcy4KIAogQXZvaWQgc2hhcmVkIHN0YXRlCiAKQEAgLTIyODEsMTEgKzI0MjMsMTMgQEAKIAogQmV0dGVyIHRvIGluaGVyaXQgdGhhbiBwaWNrbGUvdW5waWNrbGUKIAotICAgIE9uIFdpbmRvd3MgbWFueSB0eXBlcyBmcm9tIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbmVlZCB0byBiZSBwaWNrbGFibGUgc28KLSAgICB0aGF0IGNoaWxkIHByb2Nlc3NlcyBjYW4gdXNlIHRoZW0uICBIb3dldmVyLCBvbmUgc2hvdWxkIGdlbmVyYWxseSBhdm9pZAotICAgIHNlbmRpbmcgc2hhcmVkIG9iamVjdHMgdG8gb3RoZXIgcHJvY2Vzc2VzIHVzaW5nIHBpcGVzIG9yIHF1ZXVlcy4gIEluc3RlYWQKLSAgICB5b3Ugc2hvdWxkIGFycmFuZ2UgdGhlIHByb2dyYW0gc28gdGhhdCBhIHByb2Nlc3Mgd2hpY2ggbmVlZHMgYWNjZXNzIHRvIGEKLSAgICBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBlbHNld2hlcmUgY2FuIGluaGVyaXQgaXQgZnJvbSBhbiBhbmNlc3RvciBwcm9jZXNzLgorICAgIFdoZW4gdXNpbmcgdGhlICpzcGF3biogb3IgKmZvcmtzZXJ2ZXIqIHN0YXJ0IG1ldGhvZHMgbWFueSB0eXBlcworICAgIGZyb20gOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBuZWVkIHRvIGJlIHBpY2tsYWJsZSBzbyB0aGF0IGNoaWxkCisgICAgcHJvY2Vzc2VzIGNhbiB1c2UgdGhlbS4gIEhvd2V2ZXIsIG9uZSBzaG91bGQgZ2VuZXJhbGx5IGF2b2lkCisgICAgc2VuZGluZyBzaGFyZWQgb2JqZWN0cyB0byBvdGhlciBwcm9jZXNzZXMgdXNpbmcgcGlwZXMgb3IgcXVldWVzLgorICAgIEluc3RlYWQgeW91IHNob3VsZCBhcnJhbmdlIHRoZSBwcm9ncmFtIHNvIHRoYXQgYSBwcm9jZXNzIHdoaWNoCisgICAgbmVlZHMgYWNjZXNzIHRvIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgZWxzZXdoZXJlIGNhbiBpbmhlcml0IGl0CisgICAgZnJvbSBhbiBhbmNlc3RvciBwcm9jZXNzLgogCiBBdm9pZCB0ZXJtaW5hdGluZyBwcm9jZXNzZXMKIApAQCAtMjMzMiwxNSArMjQ3NiwxNyBAQAogCiBFeHBsaWNpdGx5IHBhc3MgcmVzb3VyY2VzIHRvIGNoaWxkIHByb2Nlc3NlcwogCi0gICAgT24gVW5peCBhIGNoaWxkIHByb2Nlc3MgY2FuIG1ha2UgdXNlIG9mIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgaW4gYQotICAgIHBhcmVudCBwcm9jZXNzIHVzaW5nIGEgZ2xvYmFsIHJlc291cmNlLiAgSG93ZXZlciwgaXQgaXMgYmV0dGVyIHRvIHBhc3MgdGhlCi0gICAgb2JqZWN0IGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuCisgICAgT24gVW5peCB1c2luZyB0aGUgKmZvcmsqIHN0YXJ0IG1ldGhvZCwgYSBjaGlsZCBwcm9jZXNzIGNhbiBtYWtlCisgICAgdXNlIG9mIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgaW4gYSBwYXJlbnQgcHJvY2VzcyB1c2luZyBhCisgICAgZ2xvYmFsIHJlc291cmNlLiAgSG93ZXZlciwgaXQgaXMgYmV0dGVyIHRvIHBhc3MgdGhlIG9iamVjdCBhcyBhbgorICAgIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuCiAKLSAgICBBcGFydCBmcm9tIG1ha2luZyB0aGUgY29kZSAocG90ZW50aWFsbHkpIGNvbXBhdGlibGUgd2l0aCBXaW5kb3dzIHRoaXMgYWxzbwotICAgIGVuc3VyZXMgdGhhdCBhcyBsb25nIGFzIHRoZSBjaGlsZCBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlIHRoZSBvYmplY3Qgd2lsbCBub3QKLSAgICBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuICBUaGlzIG1pZ2h0IGJlIGltcG9ydGFudCBpZiBzb21lCi0gICAgcmVzb3VyY2UgaXMgZnJlZWQgd2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQKLSAgICBwcm9jZXNzLgorICAgIEFwYXJ0IGZyb20gbWFraW5nIHRoZSBjb2RlIChwb3RlbnRpYWxseSkgY29tcGF0aWJsZSB3aXRoIFdpbmRvd3MKKyAgICBhbmQgdGhlIG90aGVyIHN0YXJ0IG1ldGhvZHMgdGhpcyBhbHNvIGVuc3VyZXMgdGhhdCBhcyBsb25nIGFzIHRoZQorICAgIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBnYXJiYWdlCisgICAgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIFRoaXMgbWlnaHQgYmUgaW1wb3J0YW50IGlmIHNvbWUKKyAgICByZXNvdXJjZSBpcyBmcmVlZCB3aGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgaW4gdGhlCisgICAgcGFyZW50IHByb2Nlc3MuCiAKICAgICBTbyBmb3IgaW5zdGFuY2UgOjoKIApAQCAtMjM5OSwxNyArMjU0NSwxOSBAQAogCiAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA6aXNzdWU6YDUxNTVgLCA6aXNzdWU6YDUzMTNgIGFuZCA6aXNzdWU6YDUzMzFgCiAKLVdpbmRvd3MKLX5+fn5+fn4KK1RoZSAqc3Bhd24qIGFuZCAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVNpbmNlIFdpbmRvd3MgbGFja3MgOmZ1bmM6YG9zLmZvcmtgIGl0IGhhcyBhIGZldyBleHRyYSByZXN0cmljdGlvbnM6CitUaGVyZSBhcmUgYSBmZXcgZXh0cmEgcmVzdHJpY3Rpb24gd2hpY2ggZG9uJ3QgYXBwbHkgdG8gdGhlICpmb3JrKgorc3RhcnQgbWV0aG9kLgogCiBNb3JlIHBpY2tsYWJpbGl0eQogCi0gICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlIHBpY2tsYWJsZS4gIFRoaXMKLSAgICBtZWFucywgaW4gcGFydGljdWxhciwgdGhhdCBib3VuZCBvciB1bmJvdW5kIG1ldGhvZHMgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkKLSAgICBhcyB0aGUgYGB0YXJnZXRgYCBhcmd1bWVudCBvbiBXaW5kb3dzIC0tLSBqdXN0IGRlZmluZSBhIGZ1bmN0aW9uIGFuZCB1c2UKLSAgICB0aGF0IGluc3RlYWQuCisgICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlCisgICAgcGlja2xhYmxlLiAgVGhpcyBtZWFucywgaW4gcGFydGljdWxhciwgdGhhdCBib3VuZCBvciB1bmJvdW5kCisgICAgbWV0aG9kcyBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBhcyB0aGUgYGB0YXJnZXRgYCAodW5sZXNzIHlvdSB1c2UKKyAgICB0aGUgKmZvcmsqIHN0YXJ0IG1ldGhvZCkgLS0tIGp1c3QgZGVmaW5lIGEgZnVuY3Rpb24gYW5kIHVzZSB0aGF0CisgICAgaW5zdGVhZC4KIAogICAgIEFsc28sIGlmIHlvdSBzdWJjbGFzcyA6Y2xhc3M6YH5tdWx0aXByb2Nlc3NpbmcuUHJvY2Vzc2AgdGhlbiBtYWtlIHN1cmUgdGhhdAogICAgIGluc3RhbmNlcyB3aWxsIGJlIHBpY2tsYWJsZSB3aGVuIHRoZSA6bWV0aDpgUHJvY2Vzcy5zdGFydApAQCAtMjQzMSw3ICsyNTc5LDggQEAKICAgICBpbnRlcnByZXRlciB3aXRob3V0IGNhdXNpbmcgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYSBzdGFydGluZyBhIG5ldwogICAgIHByb2Nlc3MpLgogCi0gICAgRm9yIGV4YW1wbGUsIHVuZGVyIFdpbmRvd3MgcnVubmluZyB0aGUgZm9sbG93aW5nIG1vZHVsZSB3b3VsZCBmYWlsIHdpdGggYQorICAgIEZvciBleGFtcGxlLCB1c2luZyB0aGUgKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kCisgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIG1vZHVsZSB3b3VsZCBmYWlsIHdpdGggYQogICAgIDpleGM6YFJ1bnRpbWVFcnJvcmA6OgogCiAgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzCkBAIC0yNDQ1LDEzICsyNTk0LDE0IEBACiAgICAgSW5zdGVhZCBvbmUgc2hvdWxkIHByb3RlY3QgdGhlICJlbnRyeSBwb2ludCIgb2YgdGhlIHByb2dyYW0gYnkgdXNpbmcgYGBpZgogICAgIF9fbmFtZV9fID09ICdfX21haW5fXyc6YGAgYXMgZm9sbG93czo6CiAKLSAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgZnJlZXplX3N1cHBvcnQKKyAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgZnJlZXplX3N1cHBvcnQsIHNldF9zdGFydF9tZXRob2QKIAogICAgICAgIGRlZiBmb28oKToKICAgICAgICAgICAgcHJpbnQoJ2hlbGxvJykKIAogICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKKyAgICAgICAgICAgc2V0X3N0YXJ0X21ldGhvZCgnc3Bhd24nKQogICAgICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9Zm9vKQogICAgICAgICAgICBwLnN0YXJ0KCkKIApAQCAtMjQ4MiwyNiArMjYzMiw3IEBACiAgICA6bGFuZ3VhZ2U6IHB5dGhvbjMKIAogCi1TeW5jaHJvbml6YXRpb24gdHlwZXMgbGlrZSBsb2NrcywgY29uZGl0aW9ucyBhbmQgcXVldWVzOgotCi0uLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5Ci0gICA6bGFuZ3VhZ2U6IHB5dGhvbjMKLQotCiBBbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSBxdWV1ZXMgdG8gZmVlZCB0YXNrcyB0byBhIGNvbGxlY3Rpb24gb2Ygd29ya2VyCiBwcm9jZXNzZXMgYW5kIGNvbGxlY3QgdGhlIHJlc3VsdHM6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfd29ya2Vycy5weQotCi0KLUFuIGV4YW1wbGUgb2YgaG93IGEgcG9vbCBvZiB3b3JrZXIgcHJvY2Vzc2VzIGNhbiBlYWNoIHJ1biBhCi06Y2xhc3M6YH5odHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJgIGluc3RhbmNlIHdoaWxlIHNoYXJpbmcgYSBzaW5nbGUKLWxpc3RlbmluZyBzb2NrZXQuCi0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5Ci0KLQotU29tZSBzaW1wbGUgYmVuY2htYXJrcyBjb21wYXJpbmcgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCB3aXRoIDptb2Q6YHRocmVhZGluZ2A6Ci0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfYmVuY2htYXJrcy5weQotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9uZXRyYy5yc3QgYi9Eb2MvbGlicmFyeS9uZXRyYy5yc3QKaW5kZXggNTY0ZjEwMS4uMjNmZmVkNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbmV0cmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L25ldHJjLnJzdApAQCAtMjksNyArMjksNyBAQAogICAgVGhpcyBpbXBsZW1lbnRzIHNlY3VyaXR5IGJlaGF2aW9yIGVxdWl2YWxlbnQgdG8gdGhhdCBvZiBmdHAgYW5kIG90aGVyCiAgICBwcm9ncmFtcyB0aGF0IHVzZSA6ZmlsZTpgLm5ldHJjYC4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMuMyBBZGRlZCB0aGUgUE9TSVggcGVybWlzc2lvbiBjaGVjay4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IEFkZGVkIHRoZSBQT1NJWCBwZXJtaXNzaW9uIGNoZWNrLgogCiAKIC4uIGV4Y2VwdGlvbjo6IE5ldHJjUGFyc2VFcnJvcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbm50cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAppbmRleCBhMTVkN2Y3Li5hODE0NWZlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgbm50cGxpYmAgLS0tIE5OVFAgcHJvdG9jb2wgY2xpZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNzEsNyArNzAsNyBAQAogICAgcmVhZGVyLXNwZWNpZmljIGNvbW1hbmRzLCBzdWNoIGFzIGBgZ3JvdXBgYC4gIElmIHlvdSBnZXQgdW5leHBlY3RlZAogICAgOmV4YzpgTk5UUFBlcm1hbmVudEVycm9yYFwgcywgeW91IG1pZ2h0IG5lZWQgdG8gc2V0ICpyZWFkZXJtb2RlKi4KICAgIDpjbGFzczpgTk5UUGAgY2xhc3Mgc3VwcG9ydHMgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgdG8KLSAgIHVuY29uZGl0aW9uYWxseSBjb25zdW1lIDpleGM6YHNvY2tldC5lcnJvcmAgZXhjZXB0aW9ucyBhbmQgdG8gY2xvc2UgdGhlIE5OVFAKKyAgIHVuY29uZGl0aW9uYWxseSBjb25zdW1lIDpleGM6YE9TRXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZSBOTlRQCiAgICBjb25uZWN0aW9uIHdoZW4gZG9uZS4gSGVyZSBpcyBhIHNhbXBsZSBvbiBob3cgdXNpbmcgaXQ6CiAKICAgICA+Pj4gZnJvbSBubnRwbGliIGltcG9ydCBOTlRQCkBAIC0xMDMsNiArMTAyLDEwIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGNsYXNzIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0b3IqIChzZWUKKyAgICAgIDpkYXRhOmB+c3NsLkhBU19TTklgKS4KIAogLi4gZXhjZXB0aW9uOjogTk5UUEVycm9yCiAKQEAgLTI0Miw2ICsyNDUsMTAgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbWV0aG9kIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0b3IqIChzZWUKKyAgICAgIDpkYXRhOmB+c3NsLkhBU19TTklgKS4KIAogLi4gbWV0aG9kOjogTk5UUC5uZXdncm91cHMoZGF0ZSwgKiwgZmlsZT1Ob25lKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9udW1lcmljLnJzdCBiL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CmluZGV4IDI3MzJhODQuLjdjNzZhNDcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CisrKyBiL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CkBAIC0yMywzICsyMyw0IEBACiAgICBkZWNpbWFsLnJzdAogICAgZnJhY3Rpb25zLnJzdAogICAgcmFuZG9tLnJzdAorICAgc3RhdGlzdGljcy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdCBiL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdAppbmRleCAyNGJlY2Y5Li5mYTNiY2RkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CkBAIC0xMSw2ICsxMSw5IEBACiAgICBpbXBvcnQgb3BlcmF0b3IKICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIsIGlhZGQKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvb3BlcmF0b3IucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBvcGVyYXRvcmAgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgZWZmaWNpZW50IGZ1bmN0aW9ucyBjb3JyZXNwb25kaW5nIHRvCiB0aGUgaW50cmluc2ljIG9wZXJhdG9ycyBvZiBQeXRob24uICBGb3IgZXhhbXBsZSwgYGBvcGVyYXRvci5hZGQoeCwgeSlgYCBpcwpAQCAtMjM1LDYgKzIzOCwxNCBAQAogCiAuLiBYWFg6IGZpbmQgYSBiZXR0ZXIsIHJlYWRhYmxlLCBleGFtcGxlCiAKKy4uIGZ1bmN0aW9uOjogbGVuZ3RoX2hpbnQob2JqLCBkZWZhdWx0PTApCisKKyAgIFJldHVybiBhbiBlc3RpbWF0ZWQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICpvKi4gRmlyc3QgdHJ5aW5nIHRvIHJldHVybiBpdHMKKyAgIGFjdHVhbCBsZW5ndGgsIHRoZW4gYW4gZXN0aW1hdGUgdXNpbmcgOm1ldGg6YG9iamVjdC5fX2xlbmd0aF9oaW50X19gLCBhbmQKKyAgIGZpbmFsbHkgcmV0dXJuaW5nIHRoZSBkZWZhdWx0IHZhbHVlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogVGhlIDptb2Q6YG9wZXJhdG9yYCBtb2R1bGUgYWxzbyBkZWZpbmVzIHRvb2xzIGZvciBnZW5lcmFsaXplZCBhdHRyaWJ1dGUgYW5kIGl0ZW0KIGxvb2t1cHMuICBUaGVzZSBhcmUgdXNlZnVsIGZvciBtYWtpbmcgZmFzdCBmaWVsZCBleHRyYWN0b3JzIGFzIGFyZ3VtZW50cyBmb3IKIDpmdW5jOmBtYXBgLCA6ZnVuYzpgc29ydGVkYCwgOm1ldGg6YGl0ZXJ0b29scy5ncm91cGJ5YCwgb3Igb3RoZXIgZnVuY3Rpb25zIHRoYXQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0IGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKaW5kZXggNTdhNmJjYS4uYjFhZDIxNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKQEAgLTIyLDYgKzIyLDExIEBACiBleHBsaWNpdGx5IHdoZW4gYW4gYXBwbGljYXRpb24gZGVzaXJlcyBzaGVsbC1saWtlIHBhdGggZXhwYW5zaW9uLiAgKFNlZSBhbHNvCiB0aGUgOm1vZDpgZ2xvYmAgbW9kdWxlLikKIAorCisuLiBzZWVhbHNvOjoKKyAgIFRoZSA6bW9kOmBwYXRobGliYCBtb2R1bGUgb2ZmZXJzIGhpZ2gtbGV2ZWwgcGF0aCBvYmplY3RzLgorCisKIC4uIG5vdGU6OgogCiAgICBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFjY2VwdCBlaXRoZXIgb25seSBieXRlcyBvciBvbmx5IHN0cmluZyBvYmplY3RzIGFzCkBAIC00Miw3ICs0Nyw2IEBACiAgICAqIDptb2Q6YHBvc2l4cGF0aGAgZm9yIFVOSVgtc3R5bGUgcGF0aHMKICAgICogOm1vZDpgbnRwYXRoYCBmb3IgV2luZG93cyBwYXRocwogICAgKiA6bW9kOmBtYWNwYXRoYCBmb3Igb2xkLXN0eWxlIE1hY09TIHBhdGhzCi0gICAqIDptb2Q6YG9zMmVteHBhdGhgIGZvciBPUy8yIEVNWCBwYXRocwogCiAKIC4uIGZ1bmN0aW9uOjogYWJzcGF0aChwYXRoKQpAQCAtMjQ3LDE4ICsyNTEsMTcgQEAKIC4uIGZ1bmN0aW9uOjogc2FtZWZpbGUocGF0aDEsIHBhdGgyKQogCiAgICBSZXR1cm4gYGBUcnVlYGAgaWYgYm90aCBwYXRobmFtZSBhcmd1bWVudHMgcmVmZXIgdG8gdGhlIHNhbWUgZmlsZSBvciBkaXJlY3RvcnkuCi0gICBPbiBVbml4LCB0aGlzIGlzIGRldGVybWluZWQgYnkgdGhlIGRldmljZSBudW1iZXIgYW5kIGktbm9kZSBudW1iZXIgYW5kIHJhaXNlcyBhbgorICAgVGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZXZpY2UgbnVtYmVyIGFuZCBpLW5vZGUgbnVtYmVyIGFuZCByYWlzZXMgYW4KICAgIGV4Y2VwdGlvbiBpZiBhIDpmdW5jOmBvcy5zdGF0YCBjYWxsIG9uIGVpdGhlciBwYXRobmFtZSBmYWlscy4KIAotICAgT24gV2luZG93cywgdHdvIGZpbGVzIGFyZSB0aGUgc2FtZSBpZiB0aGV5IHJlc29sdmUgdG8gdGhlIHNhbWUgZmluYWwgcGF0aAotICAgbmFtZSB1c2luZyB0aGUgV2luZG93cyBBUEkgY2FsbCBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUuIFRoaXMgZnVuY3Rpb24KLSAgIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgaGFuZGxlcyBjYW5ub3QgYmUgb2J0YWluZWQgdG8gZWl0aGVyIGZpbGUuCi0KICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFkZGVkIFdpbmRvd3Mgc3VwcG9ydC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFdpbmRvd3Mgbm93IHVzZXMgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgYWxsIG90aGVyIHBsYXRmb3Jtcy4KKwogCiAuLiBmdW5jdGlvbjo6IHNhbWVvcGVuZmlsZShmcDEsIGZwMikKIApAQCAtMjc3LDcgKzI4MCwxMCBAQAogICAgOmZ1bmM6YG9zLmxzdGF0YCwgb3IgOmZ1bmM6YG9zLnN0YXRgLiAgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZQogICAgdW5kZXJseWluZyBjb21wYXJpc29uIHVzZWQgYnkgOmZ1bmM6YHNhbWVmaWxlYCBhbmQgOmZ1bmM6YHNhbWVvcGVuZmlsZWAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIFdpbmRvd3Mgc3VwcG9ydC4KIAogCiAuLiBmdW5jdGlvbjo6IHNwbGl0KHBhdGgpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcy5yc3QgYi9Eb2MvbGlicmFyeS9vcy5yc3QKaW5kZXggYjExMDk4ZS4uMWZjOGRlOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L29zLnJzdApAQCAtNTQsNyArNTQsNyBAQAogCiAgICBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQgbW9kdWxlIGltcG9ydGVkLiAgVGhlIGZvbGxvd2luZwogICAgbmFtZXMgaGF2ZSBjdXJyZW50bHkgYmVlbiByZWdpc3RlcmVkOiBgYCdwb3NpeCdgYCwgYGAnbnQnYGAsIGBgJ21hYydgYCwKLSAgIGBgJ29zMidgYCwgYGAnY2UnYGAsIGBgJ2phdmEnYGAuCisgICBgYCdjZSdgYCwgYGAnamF2YSdgYC4KIAogICAgLi4gc2VlYWxzbzo6CiAgICAgICA6YXR0cjpgc3lzLnBsYXRmb3JtYCBoYXMgYSBmaW5lciBncmFudWxhcml0eS4gIDpmdW5jOmBvcy51bmFtZWAgZ2l2ZXMKQEAgLTY4NSwxNyArNjg1LDMwIEBACiAKIC4uIGZ1bmN0aW9uOjogZHVwKGZkKQogCi0gICBSZXR1cm4gYSBkdXBsaWNhdGUgb2YgZmlsZSBkZXNjcmlwdG9yICpmZCouCisgICBSZXR1cm4gYSBkdXBsaWNhdGUgb2YgZmlsZSBkZXNjcmlwdG9yICpmZCouIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzCisgICA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIE9uIFdpbmRvd3MsIHdoZW4gZHVwbGljYXRpbmcgYSBzdGFuZGFyZCBzdHJlYW0gKDA6IHN0ZGluLCAxOiBzdGRvdXQsCisgICAyOiBzdGRlcnIpLCB0aGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyA6cmVmOmBpbmhlcml0YWJsZQorICAgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCiAKLS4uIGZ1bmN0aW9uOjogZHVwMihmZCwgZmQyKQorCisuLiBmdW5jdGlvbjo6IGR1cDIoZmQsIGZkMiwgaW5oZXJpdGFibGU9VHJ1ZSkKIAogICAgRHVwbGljYXRlIGZpbGUgZGVzY3JpcHRvciAqZmQqIHRvICpmZDIqLCBjbG9zaW5nIHRoZSBsYXR0ZXIgZmlyc3QgaWYgbmVjZXNzYXJ5LgorICAgVGhlIGZpbGUgZGVzY3JpcHRvciAqZmQyKiBpcyA6cmVmOmBpbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YCBieSBkZWZhdWx0LAorICAgb3Igbm9uLWluaGVyaXRhYmxlIGlmICppbmhlcml0YWJsZSogaXMgYGBGYWxzZWBgLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGQgdGhlIG9wdGlvbmFsICppbmhlcml0YWJsZSogcGFyYW1ldGVyLgorCiAKIC4uIGZ1bmN0aW9uOjogZmNobW9kKGZkLCBtb2RlKQogCkBAIC04NDYsMTcgKzg1OSwyMSBAQAogICAgT3BlbiB0aGUgZmlsZSAqZmlsZSogYW5kIHNldCB2YXJpb3VzIGZsYWdzIGFjY29yZGluZyB0byAqZmxhZ3MqIGFuZCBwb3NzaWJseQogICAgaXRzIG1vZGUgYWNjb3JkaW5nIHRvICptb2RlKi4gIFdoZW4gY29tcHV0aW5nICptb2RlKiwgdGhlIGN1cnJlbnQgdW1hc2sgdmFsdWUKICAgIGlzIGZpcnN0IG1hc2tlZCBvdXQuICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIG5ld2x5IG9wZW5lZCBmaWxlLgorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmxhZyBhbmQgbW9kZSB2YWx1ZXMsIHNlZSB0aGUgQyBydW4tdGltZSBkb2N1bWVudGF0aW9uOwogICAgZmxhZyBjb25zdGFudHMgKGxpa2UgOmNvbnN0OmBPX1JET05MWWAgYW5kIDpjb25zdDpgT19XUk9OTFlgKSBhcmUgZGVmaW5lZCBpbgotICAgdGhpcyBtb2R1bGUgdG9vIChzZWUgOnJlZjpgb3Blbi1jb25zdGFudHNgKS4gIEluIHBhcnRpY3VsYXIsIG9uIFdpbmRvd3MgYWRkaW5nCisgICB0aGUgOm1vZDpgb3NgIG1vZHVsZS4gIEluIHBhcnRpY3VsYXIsIG9uIFdpbmRvd3MgYWRkaW5nCiAgICA6Y29uc3Q6YE9fQklOQVJZYCBpcyBuZWVkZWQgdG8gb3BlbiBmaWxlcyBpbiBiaW5hcnkgbW9kZS4KIAogICAgVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCA6cmVmOmBwYXRocyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgZGVzY3JpcHRvcnMKLSAgIDxkaXJfZmQ+YC4KKyAgIDxkaXJfZmQ+YCB3aXRoIHRoZSAqZGlyX2ZkKiBwYXJhbWV0ZXIuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBsb3ctbGV2ZWwgSS9PLiAgRm9yIG5vcm1hbCB1c2FnZSwgdXNlIHRoZQpAQCAtODY3LDI1ICs4ODQsOTIgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogICAgICAgVGhlICpkaXJfZmQqIGFyZ3VtZW50LgogCitUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgb3B0aW9ucyBmb3IgdGhlICpmbGFncyogcGFyYW1ldGVyIHRvIHRoZQorOmZ1bmM6YH5vcy5vcGVuYCBmdW5jdGlvbi4gIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBiaXR3aXNlIE9SIG9wZXJhdG9yCitgYHxgYC4gIFNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLiAgRm9yIGRlc2NyaXB0aW9ucyBvZgordGhlaXIgYXZhaWxhYmlsaXR5IGFuZCB1c2UsIGNvbnN1bHQgdGhlIDptYW5wYWdlOmBvcGVuKDIpYCBtYW51YWwgcGFnZSBvbiBVbml4CitvciBgdGhlIE1TRE4gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS96MGtjOGUzei5hc3B4PmBfIG9uIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fUkRPTkxZCisgICAgICAgICAgT19XUk9OTFkKKyAgICAgICAgICBPX1JEV1IKKyAgICAgICAgICBPX0FQUEVORAorICAgICAgICAgIE9fQ1JFQVQKKyAgICAgICAgICBPX0VYQ0wKKyAgICAgICAgICBPX1RSVU5DCisKKyAgIFRoZXNlIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fRFNZTkMKKyAgICAgICAgICBPX1JTWU5DCisgICAgICAgICAgT19TWU5DCisgICAgICAgICAgT19OREVMQVkKKyAgICAgICAgICBPX05PTkJMT0NLCisgICAgICAgICAgT19OT0NUVFkKKyAgICAgICAgICBPX1NITE9DSworICAgICAgICAgIE9fRVhMT0NLCisgICAgICAgICAgT19DTE9FWEVDCisKKyAgIFRoZXNlIGNvbnN0YW50cyBhcmUgb25seSBhdmFpbGFibGUgb24gVW5peC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIEFkZCA6ZGF0YTpgT19DTE9FWEVDYCBjb25zdGFudC4KKworLi4gZGF0YTo6IE9fQklOQVJZCisgICAgICAgICAgT19OT0lOSEVSSVQKKyAgICAgICAgICBPX1NIT1JUX0xJVkVECisgICAgICAgICAgT19URU1QT1JBUlkKKyAgICAgICAgICBPX1JBTkRPTQorICAgICAgICAgIE9fU0VRVUVOVElBTAorICAgICAgICAgIE9fVEVYVAorCisgICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fQVNZTkMKKyAgICAgICAgICBPX0RJUkVDVAorICAgICAgICAgIE9fRElSRUNUT1JZCisgICAgICAgICAgT19OT0ZPTExPVworICAgICAgICAgIE9fTk9BVElNRQorICAgICAgICAgIE9fUEFUSAorICAgICAgICAgIE9fVE1QRklMRQorCisgICBUaGVzZSBjb25zdGFudHMgYXJlIEdOVSBleHRlbnNpb25zIGFuZCBub3QgcHJlc2VudCBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCBieQorICAgdGhlIEMgbGlicmFyeS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZCA6ZGF0YTpgT19UTVBGSUxFYCBjb25zdGFudC4gSXQncyBvbmx5IGF2YWlsYWJsZSBvbiBMaW51eCBLZXJuZWwgMy4xMQorICAgICAgb3IgbmV3ZXIuCisKIAogLi4gZnVuY3Rpb246OiBvcGVucHR5KCkKIAogICAgLi4gaW5kZXg6OiBtb2R1bGU6IHB0eQogCi0gICBPcGVuIGEgbmV3IHBzZXVkby10ZXJtaW5hbCBwYWlyLiBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAobWFzdGVyLAotICAgc2xhdmUpYGAgZm9yIHRoZSBwdHkgYW5kIHRoZSB0dHksIHJlc3BlY3RpdmVseS4gRm9yIGEgKHNsaWdodGx5KSBtb3JlIHBvcnRhYmxlCi0gICBhcHByb2FjaCwgdXNlIHRoZSA6bW9kOmBwdHlgIG1vZHVsZS4KKyAgIE9wZW4gYSBuZXcgcHNldWRvLXRlcm1pbmFsIHBhaXIuIFJldHVybiBhIHBhaXIgb2YgZmlsZSBkZXNjcmlwdG9ycworICAgYGAobWFzdGVyLCBzbGF2ZSlgYCBmb3IgdGhlIHB0eSBhbmQgdGhlIHR0eSwgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGZpbGUKKyAgIGRlc2NyaXB0b3JzIGFyZSA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuIEZvciBhIChzbGlnaHRseSkgbW9yZQorICAgcG9ydGFibGUgYXBwcm9hY2gsIHVzZSB0aGUgOm1vZDpgcHR5YCBtb2R1bGUuCiAKICAgIEF2YWlsYWJpbGl0eTogc29tZSBmbGF2b3JzIG9mIFVuaXguCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBwaXBlKCkKIAotICAgQ3JlYXRlIGEgcGlwZS4gIFJldHVybiBhIHBhaXIgb2YgZmlsZSBkZXNjcmlwdG9ycyBgYChyLCB3KWBgIHVzYWJsZSBmb3IgcmVhZGluZwotICAgYW5kIHdyaXRpbmcsIHJlc3BlY3RpdmVseS4KKyAgIENyZWF0ZSBhIHBpcGUuICBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAociwgdylgYCB1c2FibGUgZm9yCisgICByZWFkaW5nIGFuZCB3cml0aW5nLCByZXNwZWN0aXZlbHkuIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzCisgICA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9ycyBhcmUgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IHBpcGUyKGZsYWdzKQogCkBAIC0xMDI1LDcgKzExMDksNyBAQAogICAgc2VxdWVuY2UgdG8gaG9sZCB0aGUgcmVzdCBvZiB0aGUgZGF0YS4gOmZ1bmM6YH5vcy5yZWFkdmAgcmV0dXJucyB0aGUgdG90YWwKICAgIG51bWJlciBvZiBieXRlcyByZWFkICh3aGljaCBtYXkgYmUgbGVzcyB0aGFuIHRoZSB0b3RhbCBjYXBhY2l0eSBvZiBhbGwgdGhlCiAgICBvYmplY3RzKS4KLSAgICAgICAgICAKKwogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKQEAgLTEwNzgsODQgKzExNjIsMTIgQEAKICAgIHNlcXVlbmNlIG9mIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdHMgPGJ5dGVzLWxpa2Ugb2JqZWN0PmAuCiAgICA6ZnVuYzpgfm9zLndyaXRldmAgd3JpdGVzIHRoZSBjb250ZW50cyBvZiBlYWNoIG9iamVjdCB0byB0aGUgZmlsZSBkZXNjcmlwdG9yCiAgICBhbmQgcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCi0gICAKKwogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCi0uLiBfb3Blbi1jb25zdGFudHM6Ci0KLWBgb3BlbigpYGAgZmxhZyBjb25zdGFudHMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIG9wdGlvbnMgZm9yIHRoZSAqZmxhZ3MqIHBhcmFtZXRlciB0byB0aGUKLTpmdW5jOmB+b3Mub3BlbmAgZnVuY3Rpb24uICBUaGV5IGNhbiBiZSBjb21iaW5lZCB1c2luZyB0aGUgYml0d2lzZSBPUiBvcGVyYXRvcgotYGB8YGAuICBTb21lIG9mIHRoZW0gYXJlIG5vdCBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4gIEZvciBkZXNjcmlwdGlvbnMgb2YKLXRoZWlyIGF2YWlsYWJpbGl0eSBhbmQgdXNlLCBjb25zdWx0IHRoZSA6bWFucGFnZTpgb3BlbigyKWAgbWFudWFsIHBhZ2Ugb24gVW5peAotb3IgYHRoZSBNU0ROIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvejBrYzhlM3ouYXNweD5gXyBvbiBXaW5kb3dzLgotCi0KLS4uIGRhdGE6OiBPX1JET05MWQotICAgICAgICAgIE9fV1JPTkxZCi0gICAgICAgICAgT19SRFdSCi0gICAgICAgICAgT19BUFBFTkQKLSAgICAgICAgICBPX0NSRUFUCi0gICAgICAgICAgT19FWENMCi0gICAgICAgICAgT19UUlVOQwotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIGF2YWlsYWJsZSBvbiBVbml4IGFuZCBXaW5kb3dzLgotCi0KLS4uIGRhdGE6OiBPX0RTWU5DCi0gICAgICAgICAgT19SU1lOQwotICAgICAgICAgIE9fU1lOQwotICAgICAgICAgIE9fTkRFTEFZCi0gICAgICAgICAgT19OT05CTE9DSwotICAgICAgICAgIE9fTk9DVFRZCi0gICAgICAgICAgT19TSExPQ0sKLSAgICAgICAgICBPX0VYTE9DSwotICAgICAgICAgIE9fQ0xPRVhFQwotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFVuaXguCi0KLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICBBZGQgOmRhdGE6YE9fQ0xPRVhFQ2AgY29uc3RhbnQuCi0KLS4uIGRhdGE6OiBPX0JJTkFSWQotICAgICAgICAgIE9fTk9JTkhFUklUCi0gICAgICAgICAgT19TSE9SVF9MSVZFRAotICAgICAgICAgIE9fVEVNUE9SQVJZCi0gICAgICAgICAgT19SQU5ET00KLSAgICAgICAgICBPX1NFUVVFTlRJQUwKLSAgICAgICAgICBPX1RFWFQKLQotICAgVGhlc2UgY29uc3RhbnRzIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgotCi0KLS4uIGRhdGE6OiBPX0FTWU5DCi0gICAgICAgICAgT19ESVJFQ1QKLSAgICAgICAgICBPX0RJUkVDVE9SWQotICAgICAgICAgIE9fTk9GT0xMT1cKLSAgICAgICAgICBPX05PQVRJTUUKLQotICAgVGhlc2UgY29uc3RhbnRzIGFyZSBHTlUgZXh0ZW5zaW9ucyBhbmQgbm90IHByZXNlbnQgaWYgdGhleSBhcmUgbm90IGRlZmluZWQgYnkKLSAgIHRoZSBDIGxpYnJhcnkuCi0KLQotLi4gZGF0YTo6IFJUTERfTEFaWQotICAgICAgICAgIFJUTERfTk9XCi0gICAgICAgICAgUlRMRF9HTE9CQUwKLSAgICAgICAgICBSVExEX0xPQ0FMCi0gICAgICAgICAgUlRMRF9OT0RFTEVURQotICAgICAgICAgIFJUTERfTk9MT0FECi0gICAgICAgICAgUlRMRF9ERUVQQklORAotCi0gICBTZWUgdGhlIFVuaXggbWFudWFsIHBhZ2UgOm1hbnBhZ2U6YGRsb3BlbigzKWAuCi0KLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotCi0KIC4uIF90ZXJtaW5hbC1zaXplOgogCiBRdWVyeWluZyB0aGUgc2l6ZSBvZiBhIHRlcm1pbmFsCkBAIC0xMTkzLDYgKzEyMDUsNDkgQEAKICAgICAgIEhlaWdodCBvZiB0aGUgdGVybWluYWwgd2luZG93IGluIGNoYXJhY3RlcnMuCiAKIAorLi4gX2ZkX2luaGVyaXRhbmNlOgorCitJbmhlcml0YW5jZSBvZiBGaWxlIERlc2NyaXB0b3JzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitBIGZpbGUgZGVzY3JpcHRvciBoYXMgYW4gImluaGVyaXRhYmxlIiBmbGFnIHdoaWNoIGluZGljYXRlcyBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yCitjYW4gYmUgaW5oZXJpdGVkIGJ5IGNoaWxkIHByb2Nlc3Nlcy4gIFNpbmNlIFB5dGhvbiAzLjQsIGZpbGUgZGVzY3JpcHRvcnMKK2NyZWF0ZWQgYnkgUHl0aG9uIGFyZSBub24taW5oZXJpdGFibGUgYnkgZGVmYXVsdC4KKworT24gVU5JWCwgbm9uLWluaGVyaXRhYmxlIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZCBpbiBjaGlsZCBwcm9jZXNzZXMgYXQgdGhlCitleGVjdXRpb24gb2YgYSBuZXcgcHJvZ3JhbSwgb3RoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgaW5oZXJpdGVkLgorCitPbiBXaW5kb3dzLCBub24taW5oZXJpdGFibGUgaGFuZGxlcyBhbmQgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIGluIGNoaWxkCitwcm9jZXNzZXMsIGV4Y2VwdCBmb3Igc3RhbmRhcmQgc3RyZWFtcyAoZmlsZSBkZXNjcmlwdG9ycyAwLCAxIGFuZCAyOiBzdGRpbiwgc3Rkb3V0CithbmQgc3RkZXJyKSwgd2hpY2ggYXJlIGFsd2F5cyBpbmhlcml0ZWQuICBVc2luZyA6ZnVuYzpgc3Bhd25cKiA8c3Bhd25sPmAgZnVuY3Rpb25zLAorYWxsIGluaGVyaXRhYmxlIGhhbmRsZXMgYW5kIGFsbCBpbmhlcml0YWJsZSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBpbmhlcml0ZWQuCitVc2luZyB0aGUgOm1vZDpgc3VicHJvY2Vzc2AgbW9kdWxlLCBhbGwgZmlsZSBkZXNjcmlwdG9ycyBleGNlcHQgc3RhbmRhcmQKK3N0cmVhbXMgYXJlIGNsb3NlZCwgYW5kIGluaGVyaXRhYmxlIGhhbmRsZXMgYXJlIG9ubHkgaW5oZXJpdGVkIGlmIHRoZQorKmNsb3NlX2ZkcyogcGFyYW1ldGVyIGlzIGBgRmFsc2VgYC4KKworLi4gZnVuY3Rpb246OiBnZXRfaW5oZXJpdGFibGUoZmQpCisKKyAgIEdldCB0aGUgImluaGVyaXRhYmxlIiBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yIChhIGJvb2xlYW4pLgorCisuLiBmdW5jdGlvbjo6IHNldF9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUpCisKKyAgIFNldCB0aGUgImluaGVyaXRhYmxlIiBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLgorCisuLiBmdW5jdGlvbjo6IGdldF9oYW5kbGVfaW5oZXJpdGFibGUoaGFuZGxlKQorCisgICBHZXQgdGhlICJpbmhlcml0YWJsZSIgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGhhbmRsZSAoYSBib29sZWFuKS4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisuLiBmdW5jdGlvbjo6IHNldF9oYW5kbGVfaW5oZXJpdGFibGUoaGFuZGxlLCBpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBoYW5kbGUuCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworCiAuLiBfb3MtZmlsZS1kaXI6CiAKIEZpbGVzIGFuZCBEaXJlY3RvcmllcwpAQCAtMTkyOSwxMSArMTk4NCwyNiBAQAogICAgcmVhZC1vbmx5LCBhbmQgaWYgOmNvbnN0OmBTVF9OT1NVSURgIGlzIHNldCwgdGhlIHNlbWFudGljcyBvZgogICAgc2V0dWlkL3NldGdpZCBiaXRzIGFyZSBkaXNhYmxlZCBvciBub3Qgc3VwcG9ydGVkLgogCisgICBBZGRpdGlvbmFsIG1vZHVsZS1sZXZlbCBjb25zdGFudHMgYXJlIGRlZmluZWQgZm9yIEdOVS9nbGliYyBiYXNlZCBzeXN0ZW1zLgorICAgVGhlc2UgYXJlIDpjb25zdDpgU1RfTk9ERVZgIChkaXNhbGxvdyBhY2Nlc3MgdG8gZGV2aWNlIHNwZWNpYWwgZmlsZXMpLAorICAgOmNvbnN0OmBTVF9OT0VYRUNgIChkaXNhbGxvdyBwcm9ncmFtIGV4ZWN1dGlvbiksIDpjb25zdDpgU1RfU1lOQ0hST05PVVNgCisgICAod3JpdGVzIGFyZSBzeW5jZWQgYXQgb25jZSksIDpjb25zdDpgU1RfTUFORExPQ0tgIChhbGxvdyBtYW5kYXRvcnkgbG9ja3Mgb24gYW4gRlMpLAorICAgOmNvbnN0OmBTVF9XUklURWAgKHdyaXRlIG9uIGZpbGUvZGlyZWN0b3J5L3N5bWxpbmspLCA6Y29uc3Q6YFNUX0FQUEVORGAKKyAgIChhcHBlbmQtb25seSBmaWxlKSwgOmNvbnN0OmBTVF9JTU1VVEFCTEVgIChpbW11dGFibGUgZmlsZSksIDpjb25zdDpgU1RfTk9BVElNRWAKKyAgIChkbyBub3QgdXBkYXRlIGFjY2VzcyB0aW1lcyksIDpjb25zdDpgU1RfTk9ESVJBVElNRWAgKGRvIG5vdCB1cGRhdGUgZGlyZWN0b3J5IGFjY2VzcworICAgdGltZXMpLCA6Y29uc3Q6YFNUX1JFTEFUSU1FYCAodXBkYXRlIGF0aW1lIHJlbGF0aXZlIHRvIG10aW1lL2N0aW1lKS4KKwogICAgVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCA6cmVmOmBzcGVjaWZ5aW5nIGEgZmlsZSBkZXNjcmlwdG9yIDxwYXRoX2ZkPmAuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBUaGUgOmNvbnN0OmBTVF9SRE9OTFlgIGFuZCA6Y29uc3Q6YFNUX05PU1VJRGAgY29uc3RhbnRzIHdlcmUgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgOmNvbnN0OmBTVF9OT0RFVmAsIDpjb25zdDpgU1RfTk9FWEVDYCwgOmNvbnN0OmBTVF9TWU5DSFJPTk9VU2AsCisgICAgICA6Y29uc3Q6YFNUX01BTkRMT0NLYCwgOmNvbnN0OmBTVF9XUklURWAsIDpjb25zdDpgU1RfQVBQRU5EYCwKKyAgICAgIDpjb25zdDpgU1RfSU1NVVRBQkxFYCwgOmNvbnN0OmBTVF9OT0FUSU1FYCwgOmNvbnN0OmBTVF9OT0RJUkFUSU1FYCwKKyAgICAgIGFuZCA6Y29uc3Q6YFNUX1JFTEFUSU1FYCBjb25zdGFudHMgd2VyZSBhZGRlZC4KKwogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKQEAgLTMwNTEsNyArMzEyMSw3IEBACiAKIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCi1UaGUgZm9sbG93aW5nIHNjaGVkdWxpbmcgcG9saWNpZXMgYXJlIGV4cG9zZWQgaWYgdGhleSBhcmUgYSBzdXBwb3J0ZWQgYnkgdGhlCitUaGUgZm9sbG93aW5nIHNjaGVkdWxpbmcgcG9saWNpZXMgYXJlIGV4cG9zZWQgaWYgdGhleSBhcmUgc3VwcG9ydGVkIGJ5IHRoZQogb3BlcmF0aW5nIHN5c3RlbS4KIAogLi4gZGF0YTo6IFNDSEVEX09USEVSCkBAIC0zMTYwLDEwICszMjMwLDYgQEAKICAgIFJldHVybiB0aGUgc2V0IG9mIENQVXMgdGhlIHByb2Nlc3Mgd2l0aCBQSUQgKnBpZCogKG9yIHRoZSBjdXJyZW50IHByb2Nlc3MKICAgIGlmIHplcm8pIGlzIHJlc3RyaWN0ZWQgdG8uCiAKLSAgIC4uIHNlZWFsc286OgotICAgICAgOmZ1bmM6YG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnRgIHJldHVybnMgdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZQotICAgICAgc3lzdGVtLgotCiAKIC4uIF9vcy1wYXRoOgogCkBAIC0zMjAxLDYgKzMyNjcsMTMgQEAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCisuLiBmdW5jdGlvbjo6IGNwdV9jb3VudCgpCisKKyAgIFJldHVybiB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbS4gUmV0dXJucyBOb25lIGlmIHVuZGV0ZXJtaW5lZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBnZXRsb2FkYXZnKCkKIAogICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIGluIHRoZSBzeXN0ZW0gcnVuIHF1ZXVlIGF2ZXJhZ2VkIG92ZXIgdGhlIGxhc3QKQEAgLTMyOTksNiArMzM3MiwxOSBAQAogICAgVGhlIGZpbGUgcGF0aCBvZiB0aGUgbnVsbCBkZXZpY2UuIEZvciBleGFtcGxlOiBgYCcvZGV2L251bGwnYGAgZm9yCiAgICBQT1NJWCwgYGAnbnVsJ2BgIGZvciBXaW5kb3dzLiAgQWxzbyBhdmFpbGFibGUgdmlhIDptb2Q6YG9zLnBhdGhgLgogCisuLiBkYXRhOjogUlRMRF9MQVpZCisgICAgICAgICAgUlRMRF9OT1cKKyAgICAgICAgICBSVExEX0dMT0JBTAorICAgICAgICAgIFJUTERfTE9DQUwKKyAgICAgICAgICBSVExEX05PREVMRVRFCisgICAgICAgICAgUlRMRF9OT0xPQUQKKyAgICAgICAgICBSVExEX0RFRVBCSU5ECisKKyAgIEZsYWdzIGZvciB1c2Ugd2l0aCB0aGUgOmZ1bmM6YH5zeXMuc2V0ZGxvcGVuZmxhZ3NgIGFuZAorICAgOmZ1bmM6YH5zeXMuZ2V0ZGxvcGVuZmxhZ3NgIGZ1bmN0aW9ucy4gIFNlZSB0aGUgVW5peCBtYW51YWwgcGFnZQorICAgOm1hbnBhZ2U6YGRsb3BlbigzKWAgZm9yIHdoYXQgdGhlIGRpZmZlcmVudCBmbGFncyBtZWFuLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogLi4gX29zLW1pc2NmdW5jOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wYXRobGliLWluaGVyaXRhbmNlLnBuZyBiL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MWMzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9wYXRobGliLWluaGVyaXRhbmNlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wYXRobGliLWluaGVyaXRhbmNlLnN2ZyBiL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2Uuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNDIwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9wYXRobGliLWluaGVyaXRhbmNlLnN2ZwpAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ieWVzIj8+CisKKzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwLjAgMC4wIDUzOC4wIDQ5Ni4wIiBmaWxsPSJub25lIiBzdHJva2U9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGNsaXBQYXRoIGlkPSJwLjAiPjxwYXRoIGQ9Im0wIDBsNTM4LjAgMGwwIDQ5Ni4wbC01MzguMCAwbDAgLTQ5Ni4weiIgY2xpcC1ydWxlPSJub256ZXJvIj48L3BhdGg+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjcC4wKSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwLjAiIGQ9Im0wIDBsNTM4LjkxNiAwbDAgNDk2LjA4Mzk4bC01MzguOTE2IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjZmZmZmZmIiBkPSJtMTc2LjAgMjQuMGwxODcuNDMzMDcgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDcgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMTc2LjAgMjQuMGwxODcuNDMzMDcgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDcgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Im0yMzUuMTg1MjcgNjYuODc3NzE2bDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xMy45Mjk2ODc1IC0yLjIzNDM3NWwwIDUuNDg0Mzc1cTAuNTE1NjI1IDAgMC43NSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtMS41MTU2MjUgMGwwIC0wLjM3NXEtMC42ODc1IDAuMzEyNSAtMS4zMTI1IDAuNDY4NzVxLTAuNjI1IDAuMTcxODc1IC0xLjE4NzUgMC4xNzE4NzVxLTAuNzk2ODc1IDAgLTEuMzc1IC0wLjMyODEyNXEtMC41NzgxMjUgLTAuMzQzNzUgLTAuOTA2MjUgLTAuOTM3NXEtMC4yNSAtMC40MjE4NzUgLTAuMjUgLTEuMDQ2ODc1bDAgLTMuNDUzMTI1bC0wLjI2NTYyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjg3NSAwbDAgNC43NjU2MjVxMCAwLjUgMC4yMzQzNzUgMC43NXEwLjI1IDAuMjM0Mzc1IDAuNzY1NjI1IDAuMjM0Mzc1cTAuNDg0Mzc1IDAgMS4wMzEyNSAtMC4xODc1cTAuNTYyNSAtMC4yMDMxMjUgMS4zOTA2MjUgLTAuNzAzMTI1bDAgLTMuMjY1NjI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjE3MTg3NSAwem01Ljg2NzE4NzUgMGwwIDEuMHExLjAxNTYyNSAtMC43MzQzNzUgMS41OTM3NSAtMC45Njg3NXEwLjU3ODEyNSAtMC4yNSAxLjA5Mzc1IC0wLjI1cTAuNzgxMjUgMCAxLjUxNTYyNSAwLjU3ODEyNXEwLjUgMC4zOTA2MjUgMC41IDAuNzk2ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU5Mzc1cS0wLjIzNDM3NSAwLjIzNDM3NSAtMC41NjI1IDAuMjM0Mzc1cS0wLjI5Njg3NSAwIC0wLjYyNSAtMC4yOTY4NzVxLTAuMzI4MTI1IC0wLjI5Njg3NSAtMC41OTM3NSAtMC4yOTY4NzVxLTAuMzI4MTI1IDAgLTEuMCAwLjQyMTg3NXEtMC42NzE4NzUgMC40MjE4NzUgLTEuNjcxODc1IDEuMjY1NjI1bDAgMi40MDYyNWwyLjI4MTI1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtNC44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjk1MzEyNSAwbDAgLTMuODkwNjI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjE3MTg3NSAwem0xMy45NjA5Mzc1IDQuMzU5Mzc1bC02LjU3ODEyNSAwcTAuMjUgMC42MjUgMC44OTA2MjUgMS4wMTU2MjVxMC42NDA2MjUgMC4zNzUgMS43MTg3NSAwLjM3NXEwLjg5MDYyNSAwIDIuMzc1IC0wLjM5MDYyNXEwLjYwOTM3NSAtMC4xNTYyNSAwLjg0Mzc1IC0wLjE1NjI1cTAuMzEyNSAwIDAuNTMxMjUgMC4yMzQzNzVxMC4yMTg3NSAwLjIxODc1IDAuMjE4NzUgMC41NjI1cTAgMC4zMTI1IC0wLjIzNDM3NSAwLjUzMTI1cS0wLjMxMjUgMC4yOTY4NzUgLTEuNTMxMjUgMC41NjI1cS0xLjIwMzEyNSAwLjI2NTYyNSAtMi4zMTI1IDAuMjY1NjI1cS0xLjkyMTg3NSAwIC0zLjA3ODEyNSAtMS4wOTM3NXEtMS4xNTYyNSAtMS4wOTM3NSAtMS4xNTYyNSAtMi42NzE4NzVxMCAtMS42ODc1IDEuMjUgLTIuNzVxMS4yNSAtMS4wNjI1IDIuODc1IC0xLjA2MjVxMC45Njg3NSAwIDEuNzgxMjUgMC4zNDM3NXEwLjgyODEyNSAwLjM0Mzc1IDEuMjE4NzUgMC43NXEwLjU2MjUgMC41NzgxMjUgMC45Mzc1IDEuNDIxODc1cTAuMjUgMC41OTM3NSAwLjI1IDEuMzc1bDAgMC42ODc1em0tMS43ODEyNSAtMS42MDkzNzVxLTAuMzU5Mzc1IC0wLjY4NzUgLTAuOTUzMTI1IC0xLjAxNTYyNXEtMC41OTM3NSAtMC4zNDM3NSAtMS40MjE4NzUgLTAuMzQzNzVxLTAuODEyNSAwIC0xLjQwNjI1IDAuMzQzNzVxLTAuNTkzNzUgMC4zMjgxMjUgLTAuOTY4NzUgMS4wMTU2MjVsNC43NSAwem02LjQyOTY4NzUgMS4wOTM3NWwwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTEuOTc2NTYyNSA0Ljg1OTM3NWwwIC0wLjM3NXEtMC42MDkzNzUgMC4zMTI1IC0xLjM0Mzc1IDAuNDY4NzVxLTAuNzE4NzUgMC4xNzE4NzUgLTEuMzEyNSAwLjE3MTg3NXEtMS4yODEyNSAwIC0yLjA5Mzc1IC0wLjY4NzVxLTAuNzk2ODc1IC0wLjY4NzUgLTAuNzk2ODc1IC0xLjUxNTYyNXEwIC0xLjAgMS4wMTU2MjUgLTEuODU5Mzc1cTEuMDMxMjUgLTAuODc1IDIuODQzNzUgLTAuODc1cTAuNzM0Mzc1IDAgMS42ODc1IDAuMTU2MjVsMCAtMC4zNzVxMCAtMC4zNTkzNzUgLTAuMzEyNSAtMC41NzgxMjVxLTAuMzEyNSAtMC4yMzQzNzUgLTEuMTcxODc1IC0wLjIzNDM3NXEtMC43MTg3NSAwIC0xLjg0Mzc1IDAuMjgxMjVxLTAuNDIxODc1IDAuMDkzNzUgLTAuNjU2MjUgMC4wOTM3NXEtMC4zMjgxMjUgMCAtMC41NDY4NzUgLTAuMjE4NzVxLTAuMjE4NzUgLTAuMjM0Mzc1IC0wLjIxODc1IC0wLjU5Mzc1cTAgLTAuMjAzMTI1IDAuMDc4MTI1IC0wLjM0Mzc1cTAuMDc4MTI1IC0wLjE1NjI1IDAuMjE4NzUgLTAuMjVxMC4xNDA2MjUgLTAuMDkzNzUgMC41NzgxMjUgLTAuMjE4NzVxMC41OTM3NSAtMC4xNTYyNSAxLjIwMzEyNSAtMC4yNXEwLjYyNSAtMC4xMDkzNzUgMS4xMjUgLTAuMTA5Mzc1cTEuNSAwIDIuMzEyNSAwLjY1NjI1cTAuODI4MTI1IDAuNjQwNjI1IDAuODI4MTI1IDEuNzVsMCAzLjI5Njg3NWwwLjI4MTI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44NzUgMHptMCAtMi44NzVxLTAuOTY4NzUgLTAuMTg3NSAtMS43ODEyNSAtMC4xODc1cS0wLjk2ODc1IDAgLTEuNjcxODc1IDAuNDg0Mzc1cS0wLjQzNzUgMC4yOTY4NzUgLTAuNDM3NSAwLjYwOTM3NXEwIDAuMjM0Mzc1IDAuMjAzMTI1IDAuMzc1cTAuMzkwNjI1IDAuMjUgMS4wNzgxMjUgMC4yNXEwLjU3ODEyNSAwIDEuMjk2ODc1IC0wLjIxODc1cTAuNzM0Mzc1IC0wLjIzNDM3NSAxLjMxMjUgLTAuNjI1bDAgLTAuNjg3NXptNy43NTc4MTI1IC0yLjYyNWwwIDMuMjE4NzVxMCAwLjUxNTYyNSAwLjIxODc1IDAuNjcxODc1cTAuMzI4MTI1IDAuMjY1NjI1IDEuMTcxODc1IDAuMjY1NjI1cTEuMjE4NzUgMCAyLjI2NTYyNSAtMC41MzEyNXEwLjM5MDYyNSAtMC4yMDMxMjUgMC42MjUgLTAuMjAzMTI1cTAuMzEyNSAwIDAuNTMxMjUgMC4yMzQzNzVxMC4yMzQzNzUgMC4yMzQzNzUgMC4yMzQzNzUgMC41NzgxMjVxMCAwLjMxMjUgLTAuMjUgMC41MzEyNXEtMC4zNzUgMC4zNzUgLTEuNTE1NjI1IDAuNjg3NXEtMS4xMjUgMC4zMTI1IC0xLjg5MDYyNSAwLjMxMjVxLTEuNSAwIC0yLjI1IC0wLjY0MDYyNXEtMC43MzQzNzUgLTAuNjU2MjUgLTAuNzM0Mzc1IC0xLjU5Mzc1bDAgLTMuNTMxMjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDAuNTc4MTI1IDBsMCAtMS40NTMxMjVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4zNTkzNzUgMCAwLjU3ODEyNSAwLjI1cTAuMjE4NzUgMC4yMzQzNzUgMC4yMTg3NSAwLjgxMjVsMCAxLjQ1MzEyNWwyLjk2ODc1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzU5Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMi45Njg3NSAwem04LjM1MTU2MjUgLTQuNjQwNjI1bDAgMy40MjE4NzVxMC41IC0wLjI5Njg3NSAxLjAgLTAuNDM3NXEwLjUxNTYyNSAtMC4xNTYyNSAxLjA0Njg3NSAtMC4xNTYyNXEwLjgyODEyNSAwIDEuNDY4NzUgMC4yODEyNXEwLjY1NjI1IDAuMjgxMjUgMS4wNzgxMjUgMC44OTA2MjVxMC40MjE4NzUgMC42MDkzNzUgMC40MjE4NzUgMS41MzEyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMjAzMTI1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtMi44OTA2MjVxMCAtMC42MjUgLTAuMjgxMjUgLTAuODc1cS0wLjM1OTM3NSAtMC4zMjgxMjUgLTEuMDc4MTI1IC0wLjMyODEyNXEtMC41MzEyNSAwIC0wLjk1MzEyNSAwLjIwMzEyNXEtMC40MDYyNSAwLjIwMzEyNSAtMS4wOTM3NSAwLjg5MDYyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMTg3NSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTYuOTIxODc1bC0wLjI2NTYyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuODc1IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjZmZmZmZmIiBkPSJtMTYuMCAxNDQuMGwxODcuNDMzMDYgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDYgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMTYuMCAxNDQuMGwxODcuNDMzMDYgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDYgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Im01MS4xODEzNzQgMTg2Ljg3NzcybDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xMy45Mjk2ODc1IC0yLjIzNDM3NWwwIDUuNDg0Mzc1cTAuNTE1NjI1IDAgMC43NSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtMS41MTU2MjUgMGwwIC0wLjM3NXEtMC42ODc1IDAuMzEyNSAtMS4zMTI1IDAuNDY4NzVxLTAuNjI1IDAuMTcxODc1IC0xLjE4NzUgMC4xNzE4NzVxLTAuNzk2ODc1IDAgLTEuMzc1IC0wLjMyODEyNXEtMC41NzgxMjUgLTAuMzQzNzUgLTAuOTA2MjUgLTAuOTM3NXEtMC4yNSAtMC40MjE4NzUgLTAuMjUgLTEuMDQ2ODc1bDAgLTMuNDUzMTI1bC0wLjI2NTYyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjg3NSAwbDAgNC43NjU2MjVxMCAwLjUgMC4yMzQzNzUgMC43NXEwLjI1IDAuMjM0Mzc1IDAuNzY1NjI1IDAuMjM0Mzc1cTAuNDg0Mzc1IDAgMS4wMzEyNSAtMC4xODc1cTAuNTYyNSAtMC4yMDMxMjUgMS4zOTA2MjUgLTAuNzAzMTI1bDAgLTMuMjY1NjI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjE3MTg3NSAwem01Ljg2NzE4NzUgMGwwIDEuMHExLjAxNTYyNSAtMC43MzQzNzUgMS41OTM3NSAtMC45Njg3NXEwLjU3ODEyNSAtMC4yNSAxLjA5Mzc1IC0wLjI1cTAuNzgxMjUgMCAxLjUxNTYyNSAwLjU3ODEyNXEwLjUgMC4zOTA2MjUgMC41IDAuNzk2ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU5Mzc1cS0wLjIzNDM3NSAwLjIzNDM3NSAtMC41NjI1IDAuMjM0Mzc1cS0wLjI5Njg3NSAwIC0wLjYyNSAtMC4yOTY4NzVxLTAuMzI4MTI1IC0wLjI5Njg3NSAtMC41OTM3NSAtMC4yOTY4NzVxLTAuMzI4MTI1IDAgLTEuMCAwLjQyMTg3NXEtMC42NzE4NzUgMC40MjE4NzUgLTEuNjcxODc1IDEuMjY1NjI1bDAgMi40MDYyNWwyLjI4MTI1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtNC44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjk1MzEyNSAwbDAgLTMuODkwNjI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjE3MTg3NSAwem0xMy45NjA5Mzc1IDQuMzU5Mzc1bC02LjU3ODEyNSAwcTAuMjUgMC42MjUgMC44OTA2MjUgMS4wMTU2MjVxMC42NDA2MjUgMC4zNzUgMS43MTg3NSAwLjM3NXEwLjg5MDYyNSAwIDIuMzc1IC0wLjM5MDYyNXEwLjYwOTM3NSAtMC4xNTYyNSAwLjg0Mzc1IC0wLjE1NjI1cTAuMzEyNSAwIDAuNTMxMjUgMC4yMzQzNzVxMC4yMTg3NSAwLjIxODc1IDAuMjE4NzUgMC41NjI1cTAgMC4zMTI1IC0wLjIzNDM3NSAwLjUzMTI1cS0wLjMxMjUgMC4yOTY4NzUgLTEuNTMxMjUgMC41NjI1cS0xLjIwMzEyNSAwLjI2NTYyNSAtMi4zMTI1IDAuMjY1NjI1cS0xLjkyMTg3NSAwIC0zLjA3ODEyNSAtMS4wOTM3NXEtMS4xNTYyNSAtMS4wOTM3NSAtMS4xNTYyNSAtMi42NzE4NzVxMCAtMS42ODc1IDEuMjUgLTIuNzVxMS4yNSAtMS4wNjI1IDIuODc1IC0xLjA2MjVxMC45Njg3NSAwIDEuNzgxMjUgMC4zNDM3NXEwLjgyODEyNSAwLjM0Mzc1IDEuMjE4NzUgMC43NXEwLjU2MjUgMC41NzgxMjUgMC45Mzc1IDEuNDIxODc1cTAuMjUgMC41OTM3NSAwLjI1IDEuMzc1bDAgMC42ODc1em0tMS43ODEyNSAtMS42MDkzNzVxLTAuMzU5Mzc1IC0wLjY4NzUgLTAuOTUzMTI1IC0xLjAxNTYyNXEtMC41OTM3NSAtMC4zNDM3NSAtMS40MjE4NzUgLTAuMzQzNzVxLTAuODEyNSAwIC0xLjQwNjI1IDAuMzQzNzVxLTAuNTkzNzUgMC4zMjgxMjUgLTAuOTY4NzUgMS4wMTU2MjVsNC43NSAwem02LjQyOTY4NzUgMS4wOTM3NWwwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTQuNjk1MzEyNSAxLjQzNzVxMCAwLjkyMTg3NSAtMC41MTU2MjUgMS43OTY4NzVxLTAuNTE1NjI1IDAuODU5Mzc1IC0xLjUzMTI1IDEuMzc1cS0xLjAgMC41MTU2MjUgLTIuMTA5Mzc1IDAuNTE1NjI1cS0xLjA5Mzc1IDAgLTIuMDkzNzUgLTAuNXEtMS4wIC0wLjUxNTYyNSAtMS41MzEyNSAtMS4zNzVxLTAuNTE1NjI1IC0wLjg3NSAtMC41MTU2MjUgLTEuODI4MTI1cTAgLTAuOTUzMTI1IDAuNTMxMjUgLTEuODc1cTAuNTMxMjUgLTAuOTM3NSAxLjUzMTI1IC0xLjQ2ODc1cTEuMCAtMC41MzEyNSAyLjA3ODEyNSAtMC41MzEyNXExLjA5Mzc1IDAgMi4xMDkzNzUgMC41NDY4NzVxMS4wMTU2MjUgMC41NDY4NzUgMS41MzEyNSAxLjQ2ODc1cTAuNTE1NjI1IDAuOTA2MjUgMC41MTU2MjUgMS44NzV6bS0xLjYwOTM3NSAwLjAxNTYyNXEwIC0wLjc4MTI1IC0wLjU0Njg3NSAtMS40MjE4NzVxLTAuNzY1NjI1IC0wLjg3NSAtMi4wIC0wLjg3NXEtMS4wNzgxMjUgMCAtMS44MTI1IDAuNzAzMTI1cS0wLjcxODc1IDAuNjg3NSAtMC43MTg3NSAxLjU5Mzc1cTAgMC43NSAwLjczNDM3NSAxLjQwNjI1cTAuNzM0Mzc1IDAuNjU2MjUgMS43OTY4NzUgMC42NTYyNXExLjA3ODEyNSAwIDEuODEyNSAtMC42NTYyNXEwLjczNDM3NSAtMC42NTYyNSAwLjczNDM3NSAtMS40MDYyNXptOC43NzM0Mzc1IC0xLjgxMjVxLTAuMzkwNjI1IC0wLjI1IC0wLjgyODEyNSAtMC4zNTkzNzVxLTAuNDIxODc1IC0wLjEyNSAtMC44OTA2MjUgLTAuMTI1cS0wLjkyMTg3NSAwIC0xLjQ2ODc1IDAuMjk2ODc1cS0wLjI1IDAuMTQwNjI1IC0wLjI1IDAuMjk2ODc1cTAgMC4xNzE4NzUgMC4zMjgxMjUgMC4zNDM3NXEwLjI1IDAuMTI1IDEuMTI1IDAuMjVxMS41OTM3NSAwLjIxODc1IDIuMjE4NzUgMC40Mzc1cTAuODEyNSAwLjI4MTI1IDEuMjUgMC44NTkzNzVxMC40NTMxMjUgMC41NjI1IDAuNDUzMTI1IDEuMjAzMTI1cTAgMC44NTkzNzUgLTAuNzUgMS40Mzc1cS0xLjA5Mzc1IDAuODQzNzUgLTIuODI4MTI1IDAuODQzNzVxLTAuNjg3NSAwIC0xLjI4MTI1IC0wLjEyNXEtMC41OTM3NSAtMC4xMjUgLTEuMDc4MTI1IC0wLjM1OTM3NXEtMC4xMjUgMC4wOTM3NSAtMC4yNjU2MjUgMC4xNTYyNXEtMC4xMjUgMC4wNDY4NzUgLTAuMjY1NjI1IDAuMDQ2ODc1cS0wLjM3NSAwIC0wLjU5Mzc1IC0wLjIzNDM3NXEtMC4yMTg3NSAtMC4yNSAtMC4yMTg3NSAtMC44MjgxMjVsMCAtMC41NDY4NzVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4yOTY4NzUgMCAwLjQ4NDM3NSAwLjE1NjI1cTAuMjAzMTI1IDAuMTU2MjUgMC4zMTI1IDAuNTQ2ODc1cTAuMzU5Mzc1IDAuMzEyNSAwLjg3NSAwLjQ4NDM3NXEwLjUxNTYyNSAwLjE1NjI1IDEuMTg3NSAwLjE1NjI1cTEuMTA5Mzc1IDAgMS43MTg3NSAtMC4zNDM3NXEwLjI4MTI1IC0wLjE3MTg3NSAwLjI4MTI1IC0wLjM1OTM3NXEwIC0wLjMxMjUgLTAuNDA2MjUgLTAuNTE1NjI1cS0wLjQyMTg3NSAtMC4yMDMxMjUgLTEuNzE4NzUgLTAuMzQzNzVxLTEuOTIxODc1IC0wLjIwMzEyNSAtMi41NzgxMjUgLTAuNzgxMjVxLTAuNjQwNjI1IC0wLjU3ODEyNSAtMC42NDA2MjUgLTEuNDA2MjVxMCAtMC44NTkzNzUgMC43MTg3NSAtMS40Mzc1cTAuOTg0Mzc1IC0wLjc4MTI1IDIuNTc4MTI1IC0wLjc4MTI1cTAuNTYyNSAwIDEuMDYyNSAwLjEwOTM3NXEwLjUxNTYyNSAwLjEwOTM3NSAwLjk4NDM3NSAwLjMyODEyNXEwLjE1NjI1IC0wLjEwOTM3NSAwLjI4MTI1IC0wLjE1NjI1cTAuMTI1IC0wLjA2MjUgMC4yMzQzNzUgLTAuMDYyNXEwLjMyODEyNSAwIDAuNTQ2ODc1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDAuMzkwNjI1cTAgMC41MzEyNSAtMC4xMjUgMC43MTg3NXEtMC4yNSAwLjM1OTM3NSAtMC42NzE4NzUgMC4zNTkzNzVxLTAuMjk2ODc1IDAgLTAuNTE1NjI1IC0wLjE3MTg3NXEtMC4yMTg3NSAtMC4xODc1IC0wLjI4MTI1IC0wLjQ4NDM3NXptOC40NDUzMTI1IC00LjkyMTg3NWwwIDEuNzAzMTI1bC0xLjkwNjI1IDBsMCAtMS43MDMxMjVsMS45MDYyNSAwem0wLjIxODc1IDMuMDQ2ODc1bDAgNS40ODQzNzVsMS45MjE4NzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC01LjQzNzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjkyMTg3NSAwbDAgLTMuODkwNjI1bC0xLjI5Njg3NSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjg5MDYyNSAwem0xMC4wMDc4MDUgMy40MDYyNWwyLjQzNzUgMi4wNzgxMjVxMC40Mzc1IDAuMDMxMjUgMC42NTYyNSAwLjI1cTAuMjE4NzUgMC4yMTg3NSAwLjIxODc1IDAuNTYyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtMS44MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjI4MTI1IDAuMTcxODc1IC0wLjVxMC4xODc1IC0wLjIxODc1IDAuNDg0Mzc1IC0wLjI5Njg3NWwtMS4xODc1IC0xLjAzMTI1bC0xLjIxODc0MjQgMS4wMzEyNXEwLjM1OTM2NzM3IDAuMDkzNzUgMC41MTU2MTc0IDAuMjk2ODc1cTAuMTcxODc1IDAuMTg3NSAwLjE3MTg3NSAwLjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU5Mzc1cS0wLjIzNDM2NzM3IDAuMjE4NzUgLTAuODEyNDkyNCAwLjIxODc1bC0xLjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC4zMjgxMjUgMC4yMTg3NSAtMC41NDY4NzVxMC4yMTg3NSAtMC4yMTg3NSAwLjY1NjI1IC0wLjI1bDIuMzc1IC0yLjA5Mzc1bC0yLjEwOTM3NSAtMS43OTY4NzVxLTAuNDA2MjUgLTAuMDMxMjUgLTAuNjI1IC0wLjI1cS0wLjIxODc1IC0wLjIxODc1IC0wLjIxODc1IC0wLjU0Njg3NXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNSAwcTAuNTc4MTI1IDAgMC44MTI0OTI0IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NjI1cTAgMC40Njg3NSAtMC40Mzc0OTIzNyAwLjc1bDAuOTY4NzQyNCAwLjgxMjVsMC45NTMxMjUgLTAuODI4MTI1cS0wLjQyMTg3NSAtMC4yOTY4NzUgLTAuNDIxODc1IC0wLjcwMzEyNXEwIC0wLjM3NSAwLjIzNDM3NSAtMC41OTM3NXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNDg0Mzc1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zMjgxMjUgLTAuMjE4NzUgMC41NDY4NzVxLTAuMjE4NzUgMC4yMTg3NSAtMC42NDA2MjUgMC4yNWwtMi4xMDkzNzUgMS44MTI1em03LjQ3NjU2MjUgMC40Mzc1bDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xMS45NzY1NjI1IDQuODU5Mzc1bDAgLTAuMzc1cS0wLjYwOTM3NSAwLjMxMjUgLTEuMzQzNzUgMC40Njg3NXEtMC43MTg3NSAwLjE3MTg3NSAtMS4zMTI1IDAuMTcxODc1cS0xLjI4MTI1IDAgLTIuMDkzNzUgLTAuNjg3NXEtMC43OTY4NzUgLTAuNjg3NSAtMC43OTY4NzUgLTEuNTE1NjI1cTAgLTEuMCAxLjAxNTYyNSAtMS44NTkzNzVxMS4wMzEyNSAtMC44NzUgMi44NDM3NSAtMC44NzVxMC43MzQzNzUgMCAxLjY4NzUgMC4xNTYyNWwwIC0wLjM3NXEwIC0wLjM1OTM3NSAtMC4zMTI1IC0wLjU3ODEyNXEtMC4zMTI1IC0wLjIzNDM3NSAtMS4xNzE4NzUgLTAuMjM0Mzc1cS0wLjcxODc1IDAgLTEuODQzNzUgMC4yODEyNXEtMC40MjE4NzUgMC4wOTM3NSAtMC42NTYyNSAwLjA5Mzc1cS0wLjMyODEyNSAwIC0wLjU0Njg3NSAtMC4yMTg3NXEtMC4yMTg3NSAtMC4yMzQzNzUgLTAuMjE4NzUgLTAuNTkzNzVxMCAtMC4yMDMxMjUgMC4wNzgxMjUgLTAuMzQzNzVxMC4wNzgxMjUgLTAuMTU2MjUgMC4yMTg3NSAtMC4yNXEwLjE0MDYyNSAtMC4wOTM3NSAwLjU3ODEyNSAtMC4yMTg3NXEwLjU5Mzc1IC0wLjE1NjI1IDEuMjAzMTI1IC0wLjI1cTAuNjI1IC0wLjEwOTM3NSAxLjEyNSAtMC4xMDkzNzVxMS41IDAgMi4zMTI1IDAuNjU2MjVxMC44MjgxMjUgMC42NDA2MjUgMC44MjgxMjUgMS43NWwwIDMuMjk2ODc1bDAuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjg3NSAwem0wIC0yLjg3NXEtMC45Njg3NSAtMC4xODc1IC0xLjc4MTI1IC0wLjE4NzVxLTAuOTY4NzUgMCAtMS42NzE4NzUgMC40ODQzNzVxLTAuNDM3NSAwLjI5Njg3NSAtMC40Mzc1IDAuNjA5Mzc1cTAgMC4yMzQzNzUgMC4yMDMxMjUgMC4zNzVxMC4zOTA2MjUgMC4yNSAxLjA3ODEyNSAwLjI1cTAuNTc4MTI1IDAgMS4yOTY4NzUgLTAuMjE4NzVxMC43MzQzNzUgLTAuMjM0Mzc1IDEuMzEyNSAtMC42MjVsMCAtMC42ODc1em03Ljc1NzgxMjUgLTIuNjI1bDAgMy4yMTg3NXEwIDAuNTE1NjI1IDAuMjE4NzUgMC42NzE4NzVxMC4zMjgxMjUgMC4yNjU2MjUgMS4xNzE4NzUgMC4yNjU2MjVxMS4yMTg3NSAwIDIuMjY1NjI1IC0wLjUzMTI1cTAuMzkwNjI1IC0wLjIwMzEyNSAwLjYyNSAtMC4yMDMxMjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIzNDM3NSAwLjIzNDM3NSAwLjIzNDM3NSAwLjU3ODEyNXEwIDAuMzEyNSAtMC4yNSAwLjUzMTI1cS0wLjM3NSAwLjM3NSAtMS41MTU2MjUgMC42ODc1cS0xLjEyNSAwLjMxMjUgLTEuODkwNjI1IDAuMzEyNXEtMS41IDAgLTIuMjUgLTAuNjQwNjI1cS0wLjczNDM3NSAtMC42NTYyNSAtMC43MzQzNzUgLTEuNTkzNzVsMCAtMy41MzEyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMC41NzgxMjUgMGwwIC0xLjQ1MzEyNXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjM1OTM3NSAwIDAuNTc4MTI1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDEuNDUzMTI1bDIuOTY4NzUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0yLjk2ODc1IDB6bTguMzUxNTYyNSAtNC42NDA2MjVsMCAzLjQyMTg3NXEwLjUgLTAuMjk2ODc1IDEuMCAtMC40Mzc1cTAuNTE1NjI1IC0wLjE1NjI1IDEuMDQ2ODc1IC0wLjE1NjI1cTAuODI4MTI1IDAgMS40Njg3NSAwLjI4MTI1cTAuNjU2MjUgMC4yODEyNSAxLjA3ODEyNSAwLjg5MDYyNXEwLjQyMTg3NSAwLjYwOTM3NSAwLjQyMTg3NSAxLjUzMTI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4yMDMxMjUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC0yLjg5MDYyNXEwIC0wLjYyNSAtMC4yODEyNSAtMC44NzVxLTAuMzU5Mzc1IC0wLjMyODEyNSAtMS4wNzgxMjUgLTAuMzI4MTI1cS0wLjUzMTI1IDAgLTAuOTUzMTI1IDAuMjAzMTI1cS0wLjQwNjI1IDAuMjAzMTI1IC0xLjA5Mzc1IDAuODkwNjI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtNi45MjE4NzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS44NzUgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Im0zMzYuMCAxNDMuNDY0NTdsMTg3LjQzMzA0IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA0IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMS4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTMzNi4wIDE0My40NjQ1N2wxODcuNDMzMDQgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDQgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Im0zNjEuNTc5OCAxODYuMzQyMjlsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTEzLjkyOTY4NzUgLTIuMjM0Mzc1bDAgNS40ODQzNzVxMC41MTU2MjUgMCAwLjc1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0xLjUxNTYyNSAwbDAgLTAuMzc1cS0wLjY4NzUgMC4zMTI1IC0xLjMxMjUgMC40Njg3NXEtMC42MjUgMC4xNzE4NzUgLTEuMTg3NSAwLjE3MTg3NXEtMC43OTY4NzUgMCAtMS4zNzUgLTAuMzI4MTI1cS0wLjU3ODEyNSAtMC4zNDM3NSAtMC45MDYyNSAtMC45Mzc1cS0wLjI1IC0wLjQyMTg3NSAtMC4yNSAtMS4wNDY4NzVsMCAtMy40NTMxMjVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuODc1IDBsMCA0Ljc2NTYyNXEwIDAuNSAwLjIzNDM3NSAwLjc1cTAuMjUgMC4yMzQzNzUgMC43NjU2MjUgMC4yMzQzNzVxMC40ODQzNzUgMCAxLjAzMTI1IC0wLjE4NzVxMC41NjI1IC0wLjIwMzEyNSAxLjM5MDYyNSAtMC43MDMxMjVsMCAtMy4yNjU2MjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuMTcxODc1IDB6bTUuODY3MTg3NSAwbDAgMS4wcTEuMDE1NjI1IC0wLjczNDM3NSAxLjU5Mzc1IC0wLjk2ODc1cTAuNTc4MTI1IC0wLjI1IDEuMDkzNzUgLTAuMjVxMC43ODEyNSAwIDEuNTE1NjI1IDAuNTc4MTI1cTAuNSAwLjM5MDYyNSAwLjUgMC43OTY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTkzNzVxLTAuMjM0Mzc1IDAuMjM0Mzc1IC0wLjU2MjUgMC4yMzQzNzVxLTAuMjk2ODc1IDAgLTAuNjI1IC0wLjI5Njg3NXEtMC4zMjgxMjUgLTAuMjk2ODc1IC0wLjU5Mzc1IC0wLjI5Njg3NXEtMC4zMjgxMjUgMCAtMS4wIDAuNDIxODc1cS0wLjY3MTg3NSAwLjQyMTg3NSAtMS42NzE4NzUgMS4yNjU2MjVsMCAyLjQwNjI1bDIuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC00LjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuOTUzMTI1IDBsMCAtMy44OTA2MjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuMTcxODc1IDB6bTEzLjk2MDkzNzUgNC4zNTkzNzVsLTYuNTc4MTI1IDBxMC4yNSAwLjYyNSAwLjg5MDYyNSAxLjAxNTYyNXEwLjY0MDYyNSAwLjM3NSAxLjcxODc1IDAuMzc1cTAuODkwNjI1IDAgMi4zNzUgLTAuMzkwNjI1cTAuNjA5Mzc1IC0wLjE1NjI1IDAuODQzNzUgLTAuMTU2MjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIxODc1IDAuMjE4NzUgMC4yMTg3NSAwLjU2MjVxMCAwLjMxMjUgLTAuMjM0Mzc1IDAuNTMxMjVxLTAuMzEyNSAwLjI5Njg3NSAtMS41MzEyNSAwLjU2MjVxLTEuMjAzMTI1IDAuMjY1NjI1IC0yLjMxMjUgMC4yNjU2MjVxLTEuOTIxODc1IDAgLTMuMDc4MTI1IC0xLjA5Mzc1cS0xLjE1NjI1IC0xLjA5Mzc1IC0xLjE1NjI1IC0yLjY3MTg3NXEwIC0xLjY4NzUgMS4yNSAtMi43NXExLjI1IC0xLjA2MjUgMi44NzUgLTEuMDYyNXEwLjk2ODc1IDAgMS43ODEyNSAwLjM0Mzc1cTAuODI4MTI1IDAuMzQzNzUgMS4yMTg3NSAwLjc1cTAuNTYyNSAwLjU3ODEyNSAwLjkzNzUgMS40MjE4NzVxMC4yNSAwLjU5Mzc1IDAuMjUgMS4zNzVsMCAwLjY4NzV6bS0xLjc4MTI1IC0xLjYwOTM3NXEtMC4zNTkzNzUgLTAuNjg3NSAtMC45NTMxMjUgLTEuMDE1NjI1cS0wLjU5Mzc1IC0wLjM0Mzc1IC0xLjQyMTg3NSAtMC4zNDM3NXEtMC44MTI1IDAgLTEuNDA2MjUgMC4zNDM3NXEtMC41OTM3NSAwLjMyODEyNSAtMC45Njg3NSAxLjAxNTYyNWw0Ljc1IDB6bTcuMzY3MTg3NSAtMC4yMDMxMjVsLTEuNDg0Mzc1IDQuNTQ2ODc1bC0xLjc5Njg3NSAwbC0wLjk1MzEyNSAtNy44NzVxLTAuMzc1IC0wLjA0Njg3NSAtMC41NjI1IC0wLjI1cS0wLjE4NzUgLTAuMjAzMTI1IC0wLjE4NzUgLTAuNTMxMjVxMCAtMC4zNzUgMC4yNSAtMC41OTM3NXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMi4xMjUgMC4wMTU2MjVxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtMC44MjgxMjUgMGwwLjUzMTI1IDQuNDg0Mzc1bDEuMjUgLTMuNzM0Mzc1bDEuNjcxODc1IDBsMS4yNSAzLjczNDM3NWwwLjUzMTI1IC00LjQ4NDM3NWwtMC44NDM3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjE4NzUgLTAuMjM0Mzc1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDIuMTI1IDAuMDE1NjI1cTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMjk2ODc1IC0wLjIwMzEyNSAwLjUxNTYyNXEtMC4xODc1IDAuMjE4NzUgLTAuNTYyNSAwLjI4MTI1bC0wLjkyMTg3NSA3Ljg3NWwtMS43NjU2MjUgMGwtMS41MzEyNSAtNC41NDY4NzV6bTEwLjE2NDA2MjUgLTUuNTkzNzVsMCAxLjcwMzEyNWwtMS45MDYyNSAwbDAgLTEuNzAzMTI1bDEuOTA2MjUgMHptMC4yMTg3NSAzLjA0Njg3NWwwIDUuNDg0Mzc1bDEuOTIxODc1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtNS40Mzc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS45MjE4NzUgMGwwIC0zLjg5MDYyNWwtMS4yOTY4NzUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yMzQzNzUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi44OTA2MjUgMHptNy4xOTUzMTI1IDBsMCAwLjUzMTI1cTAuNDM3NSAtMC4zNzUgMC45NTMxMjUgLTAuNTYyNXEwLjUzMTI1IC0wLjE4NzUgMS4xNTYyNSAtMC4xODc1cTEuNDIxODc1IDAgMi4yNSAwLjg5MDYyNXEwLjY1NjI1IDAuNzAzMTI1IDAuNjU2MjUgMS44NDM3NWwwIDIuOTY4NzVxMC41IDAgMC43MzQzNzUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS40NTMxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjIzNDM3NSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuNzUgLTAuMjM0Mzc1bDAgLTMuMDE1NjI1cTAgLTAuNTMxMjUgLTAuMjgxMjUgLTAuNzY1NjI1cS0wLjM1OTM3NSAtMC4zMTI1IC0xLjA5Mzc1IC0wLjMxMjVxLTAuNTYyNSAwIC0wLjk4NDM3NSAwLjIxODc1cS0wLjQwNjI1IDAuMjAzMTI1IC0xLjA0Njg3NSAwLjkwNjI1bDAgMi45Njg3NXEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMTg3NSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTMuODkwNjI1cS0wLjUgMCAtMC43NSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yMzQzNzUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS41MzEyNSAwem0xNC44OTg0Mzc1IC0zLjA0Njg3NWwwIDguNTMxMjVsMC4yNjU2MjUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0xLjg3NSAwbDAgLTAuMzkwNjI1cS0wLjU0Njg3NSAwLjMxMjUgLTEuMTQwNjI1IDAuNDg0Mzc1cS0wLjU5Mzc1IDAuMTcxODc1IC0xLjIzNDM3NSAwLjE3MTg3NXEtMS44MTI1IDAgLTIuOTIxODc1IC0xLjA0Njg3NXEtMS4wOTM3NSAtMS4wNDY4NzUgLTEuMDkzNzUgLTIuNjA5Mzc1cTAgLTEuNjI1IDEuMTU2MjUgLTIuNzY1NjI1cTEuMTU2MjUgLTEuMTU2MjUgMi44MjgxMjUgLTEuMTU2MjVxMC42MjUgMCAxLjIxODc1IDAuMjAzMTI1cTAuNjA5Mzc1IDAuMTg3NSAxLjE4NzUgMC41NjI1bDAgLTEuOTg0Mzc1bC0wLjI2NTYyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjg3NSAwem0tMS42MDkzNzUgNi43OTY4NzVxMCAtMC45ODQzNzUgLTAuNzAzMTI1IC0xLjY3MTg3NXEtMC42ODc1IC0wLjY4NzUgLTEuNjg3NSAtMC42ODc1cS0xLjAgMCAtMS43MDMxMjUgMC42ODc1cS0wLjY4NzUgMC42ODc1IC0wLjY4NzUgMS42NTYyNXEwIDAuODc1IDAuNjI1IDEuNDUzMTI1cTAuNjI1IDAuNTYyNSAxLjc2NTYyNSAwLjU2MjVxMS4xMjUgMCAxLjc1IC0wLjU2MjVxMC42NDA2MjUgLTAuNTc4MTI1IDAuNjQwNjI1IC0xLjQzNzV6bTExLjY5NTMxMjUgLTAuMDc4MTI1cTAgMC45MjE4NzUgLTAuNTE1NjI1IDEuNzk2ODc1cS0wLjUxNTYyNSAwLjg1OTM3NSAtMS41MzEyNSAxLjM3NXEtMS4wIDAuNTE1NjI1IC0yLjEwOTM3NSAwLjUxNTYyNXEtMS4wOTM3NSAwIC0yLjA5Mzc1IC0wLjVxLTEuMCAtMC41MTU2MjUgLTEuNTMxMjUgLTEuMzc1cS0wLjUxNTYyNSAtMC44NzUgLTAuNTE1NjI1IC0xLjgyODEyNXEwIC0wLjk1MzEyNSAwLjUzMTI1IC0xLjg3NXEwLjUzMTI1IC0wLjkzNzUgMS41MzEyNSAtMS40Njg3NXExLjAgLTAuNTMxMjUgMi4wNzgxMjUgLTAuNTMxMjVxMS4wOTM3NSAwIDIuMTA5Mzc1IDAuNTQ2ODc1cTEuMDE1NjI1IDAuNTQ2ODc1IDEuNTMxMjUgMS40Njg3NXEwLjUxNTYyNSAwLjkwNjI1IDAuNTE1NjI1IDEuODc1em0tMS42MDkzNzUgMC4wMTU2MjVxMCAtMC43ODEyNSAtMC41NDY4NzUgLTEuNDIxODc1cS0wLjc2NTYyNSAtMC44NzUgLTIuMCAtMC44NzVxLTEuMDc4MTI1IDAgLTEuODEyNSAwLjcwMzEyNXEtMC43MTg3NSAwLjY4NzUgLTAuNzE4NzUgMS41OTM3NXEwIDAuNzUgMC43MzQzNzUgMS40MDYyNXEwLjczNDM3NSAwLjY1NjI1IDEuNzk2ODc1IDAuNjU2MjVxMS4wNzgxMjUgMCAxLjgxMjUgLTAuNjU2MjVxMC43MzQzNzUgLTAuNjU2MjUgMC43MzQzNzUgLTEuNDA2MjV6bTcuMDU0Njg3NSAwLjQ1MzEyNWwtMS4xMDkzNzUgMi45NTMxMjVsLTEuNSAwbC0xLjM0Mzc1IC01LjVxLTAuNDM3NSAtMC4wMTU2MjUgLTAuNjcxODc1IC0wLjIzNDM3NXEtMC4yMTg3NSAtMC4yMzQzNzUgLTAuMjE4NzUgLTAuNTYyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNDg0Mzc1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjgxMjUgMC42MDkzNzVxLTAuMjE4NzUgMC4xODc1IC0wLjgyODEyNSAwLjE4NzVsMC42MDkzNzUgMi41NDY4NzVsMC45ODQzNzUgLTIuNjA5Mzc1bDEuNDIxODc1IDBsMS4wIDIuNjA5Mzc1bDAuNjI1IC0yLjU0Njg3NXEtMC41OTM3NSAwIC0wLjc4MTI1IC0wLjEwOTM3NXEtMC4zNzUgLTAuMjUgLTAuMzc1IC0wLjY4NzVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjMyODEyNSAtMC4yMTg3NSAwLjU0Njg3NXEtMC4yMTg3NSAwLjIxODc1IC0wLjY0MDYyNSAwLjI1bC0xLjMxMjUgNS41bC0xLjQ4NDM3NSAwbC0xLjE3MTg3NSAtMi45NTMxMjV6bTExLjMyMDMxMjUgLTIuMjY1NjI1cS0wLjM5MDYyNSAtMC4yNSAtMC44MjgxMjUgLTAuMzU5Mzc1cS0wLjQyMTg3NSAtMC4xMjUgLTAuODkwNjI1IC0wLjEyNXEtMC45MjE4NzUgMCAtMS40Njg3NSAwLjI5Njg3NXEtMC4yNSAwLjE0MDYyNSAtMC4yNSAwLjI5Njg3NXEwIDAuMTcxODc1IDAuMzI4MTI1IDAuMzQzNzVxMC4yNSAwLjEyNSAxLjEyNSAwLjI1cTEuNTkzNzUgMC4yMTg3NSAyLjIxODc1IDAuNDM3NXEwLjgxMjUgMC4yODEyNSAxLjI1IDAuODU5Mzc1cTAuNDUzMTI1IDAuNTYyNSAwLjQ1MzEyNSAxLjIwMzEyNXEwIDAuODU5Mzc1IC0wLjc1IDEuNDM3NXEtMS4wOTM3NSAwLjg0Mzc1IC0yLjgyODEyNSAwLjg0Mzc1cS0wLjY4NzUgMCAtMS4yODEyNSAtMC4xMjVxLTAuNTkzNzUgLTAuMTI1IC0xLjA3ODEyNSAtMC4zNTkzNzVxLTAuMTI1IDAuMDkzNzUgLTAuMjY1NjI1IDAuMTU2MjVxLTAuMTI1IDAuMDQ2ODc1IC0wLjI2NTYyNSAwLjA0Njg3NXEtMC4zNzUgMCAtMC41OTM3NSAtMC4yMzQzNzVxLTAuMjE4NzUgLTAuMjUgLTAuMjE4NzUgLTAuODI4MTI1bDAgLTAuNTQ2ODc1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMjk2ODc1IDAgMC40ODQzNzUgMC4xNTYyNXEwLjIwMzEyNSAwLjE1NjI1IDAuMzEyNSAwLjU0Njg3NXEwLjM1OTM3NSAwLjMxMjUgMC44NzUgMC40ODQzNzVxMC41MTU2MjUgMC4xNTYyNSAxLjE4NzUgMC4xNTYyNXExLjEwOTM3NSAwIDEuNzE4NzUgLTAuMzQzNzVxMC4yODEyNSAtMC4xNzE4NzUgMC4yODEyNSAtMC4zNTkzNzVxMCAtMC4zMTI1IC0wLjQwNjI1IC0wLjUxNTYyNXEtMC40MjE4NzUgLTAuMjAzMTI1IC0xLjcxODc1IC0wLjM0Mzc1cS0xLjkyMTg3NSAtMC4yMDMxMjUgLTIuNTc4MTI1IC0wLjc4MTI1cS0wLjY0MDYyNSAtMC41NzgxMjUgLTAuNjQwNjI1IC0xLjQwNjI1cTAgLTAuODU5Mzc1IDAuNzE4NzUgLTEuNDM3NXEwLjk4NDM3NSAtMC43ODEyNSAyLjU3ODEyNSAtMC43ODEyNXEwLjU2MjUgMCAxLjA2MjUgMC4xMDkzNzVxMC41MTU2MjUgMC4xMDkzNzUgMC45ODQzNzUgMC4zMjgxMjVxMC4xNTYyNSAtMC4xMDkzNzUgMC4yODEyNSAtMC4xNTYyNXEwLjEyNSAtMC4wNjI1IDAuMjM0Mzc1IC0wLjA2MjVxMC4zMjgxMjUgMCAwLjU0Njg3NSAwLjI1cTAuMjE4NzUgMC4yMzQzNzUgMC4yMTg3NSAwLjgxMjVsMCAwLjM5MDYyNXEwIDAuNTMxMjUgLTAuMTI1IDAuNzE4NzVxLTAuMjUgMC4zNTkzNzUgLTAuNjcxODc1IDAuMzU5Mzc1cS0wLjI5Njg3NSAwIC0wLjUxNTYyNSAtMC4xNzE4NzVxLTAuMjE4NzUgLTAuMTg3NSAtMC4yODEyNSAtMC40ODQzNzV6bTYuOTQ1MzEyNSAxLjk2ODc1bDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xMS45NzY1NjI1IDQuODU5Mzc1bDAgLTAuMzc1cS0wLjYwOTM3NSAwLjMxMjUgLTEuMzQzNzUgMC40Njg3NXEtMC43MTg3NSAwLjE3MTg3NSAtMS4zMTI1IDAuMTcxODc1cS0xLjI4MTI1IDAgLTIuMDkzNzUgLTAuNjg3NXEtMC43OTY4NzUgLTAuNjg3NSAtMC43OTY4NzUgLTEuNTE1NjI1cTAgLTEuMCAxLjAxNTYyNSAtMS44NTkzNzVxMS4wMzEyNSAtMC44NzUgMi44NDM3NSAtMC44NzVxMC43MzQzNzUgMCAxLjY4NzUgMC4xNTYyNWwwIC0wLjM3NXEwIC0wLjM1OTM3NSAtMC4zMTI1IC0wLjU3ODEyNXEtMC4zMTI1IC0wLjIzNDM3NSAtMS4xNzE4NzUgLTAuMjM0Mzc1cS0wLjcxODc1IDAgLTEuODQzNzUgMC4yODEyNXEtMC40MjE4NzUgMC4wOTM3NSAtMC42NTYyNSAwLjA5Mzc1cS0wLjMyODEyNSAwIC0wLjU0Njg3NSAtMC4yMTg3NXEtMC4yMTg3NSAtMC4yMzQzNzUgLTAuMjE4NzUgLTAuNTkzNzVxMCAtMC4yMDMxMjUgMC4wNzgxMjUgLTAuMzQzNzVxMC4wNzgxMjUgLTAuMTU2MjUgMC4yMTg3NSAtMC4yNXEwLjE0MDYyNSAtMC4wOTM3NSAwLjU3ODEyNSAtMC4yMTg3NXEwLjU5Mzc1IC0wLjE1NjI1IDEuMjAzMTI1IC0wLjI1cTAuNjI1IC0wLjEwOTM3NSAxLjEyNSAtMC4xMDkzNzVxMS41IDAgMi4zMTI1IDAuNjU2MjVxMC44MjgxMjUgMC42NDA2MjUgMC44MjgxMjUgMS43NWwwIDMuMjk2ODc1bDAuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjg3NSAwem0wIC0yLjg3NXEtMC45Njg3NSAtMC4xODc1IC0xLjc4MTI1IC0wLjE4NzVxLTAuOTY4NzUgMCAtMS42NzE4NzUgMC40ODQzNzVxLTAuNDM3NSAwLjI5Njg3NSAtMC40Mzc1IDAuNjA5Mzc1cTAgMC4yMzQzNzUgMC4yMDMxMjUgMC4zNzVxMC4zOTA2MjUgMC4yNSAxLjA3ODEyNSAwLjI1cTAuNTc4MTI1IDAgMS4yOTY4NzUgLTAuMjE4NzVxMC43MzQzNzUgLTAuMjM0Mzc1IDEuMzEyNSAtMC42MjVsMCAtMC42ODc1em03Ljc1NzgxMjUgLTIuNjI1bDAgMy4yMTg3NXEwIDAuNTE1NjI1IDAuMjE4NzUgMC42NzE4NzVxMC4zMjgxMjUgMC4yNjU2MjUgMS4xNzE4NzUgMC4yNjU2MjVxMS4yMTg3NSAwIDIuMjY1NjI1IC0wLjUzMTI1cTAuMzkwNjI1IC0wLjIwMzEyNSAwLjYyNSAtMC4yMDMxMjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIzNDM3NSAwLjIzNDM3NSAwLjIzNDM3NSAwLjU3ODEyNXEwIDAuMzEyNSAtMC4yNSAwLjUzMTI1cS0wLjM3NSAwLjM3NSAtMS41MTU2MjUgMC42ODc1cS0xLjEyNSAwLjMxMjUgLTEuODkwNjI1IDAuMzEyNXEtMS41IDAgLTIuMjUgLTAuNjQwNjI1cS0wLjczNDM3NSAtMC42NTYyNSAtMC43MzQzNzUgLTEuNTkzNzVsMCAtMy41MzEyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMC41NzgxMjUgMGwwIC0xLjQ1MzEyNXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjM1OTM3NSAwIDAuNTc4MTI1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDEuNDUzMTI1bDIuOTY4NzUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0yLjk2ODc1IDB6bTguMzUxNTYyNSAtNC42NDA2MjVsMCAzLjQyMTg3NXEwLjUgLTAuMjk2ODc1IDEuMCAtMC40Mzc1cTAuNTE1NjI1IC0wLjE1NjI1IDEuMDQ2ODc1IC0wLjE1NjI1cTAuODI4MTI1IDAgMS40Njg3NSAwLjI4MTI1cTAuNjU2MjUgMC4yODEyNSAxLjA3ODEyNSAwLjg5MDYyNXEwLjQyMTg3NSAwLjYwOTM3NSAwLjQyMTg3NSAxLjUzMTI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4yMDMxMjUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC0yLjg5MDYyNXEwIC0wLjYyNSAtMC4yODEyNSAtMC44NzVxLTAuMzU5Mzc1IC0wLjMyODEyNSAtMS4wNzgxMjUgLTAuMzI4MTI1cS0wLjUzMTI1IDAgLTAuOTUzMTI1IDAuMjAzMTI1cS0wLjQwNjI1IDAuMjAzMTI1IC0xLjA5Mzc1IDAuODkwNjI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtNi45MjE4NzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS44NzUgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Im0xNzYuMCAyNzEuNDY0NTdsMTg3LjQzMzA3IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA3IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMS4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTE3Ni4wIDI3MS40NjQ1N2wxODcuNDMzMDcgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDcgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Im0yNTQuMzg4NCAzMTQuMzQyM2wwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTEuOTc2NTYyNSA0Ljg1OTM3NWwwIC0wLjM3NXEtMC42MDkzNzUgMC4zMTI1IC0xLjM0Mzc1IDAuNDY4NzVxLTAuNzE4NzUgMC4xNzE4NzUgLTEuMzEyNSAwLjE3MTg3NXEtMS4yODEyNSAwIC0yLjA5Mzc1IC0wLjY4NzVxLTAuNzk2ODc1IC0wLjY4NzUgLTAuNzk2ODc1IC0xLjUxNTYyNXEwIC0xLjAgMS4wMTU2MjUgLTEuODU5Mzc1cTEuMDMxMjUgLTAuODc1IDIuODQzNzUgLTAuODc1cTAuNzM0Mzc1IDAgMS42ODc1IDAuMTU2MjVsMCAtMC4zNzVxMCAtMC4zNTkzNzUgLTAuMzEyNSAtMC41NzgxMjVxLTAuMzEyNSAtMC4yMzQzNzUgLTEuMTcxODc1IC0wLjIzNDM3NXEtMC43MTg3NSAwIC0xLjg0Mzc1IDAuMjgxMjVxLTAuNDIxODc1IDAuMDkzNzUgLTAuNjU2MjUgMC4wOTM3NXEtMC4zMjgxMjUgMCAtMC41NDY4NzUgLTAuMjE4NzVxLTAuMjE4NzUgLTAuMjM0Mzc1IC0wLjIxODc1IC0wLjU5Mzc1cTAgLTAuMjAzMTI1IDAuMDc4MTI1IC0wLjM0Mzc1cTAuMDc4MTI1IC0wLjE1NjI1IDAuMjE4NzUgLTAuMjVxMC4xNDA2MjUgLTAuMDkzNzUgMC41NzgxMjUgLTAuMjE4NzVxMC41OTM3NSAtMC4xNTYyNSAxLjIwMzEyNSAtMC4yNXEwLjYyNSAtMC4xMDkzNzUgMS4xMjUgLTAuMTA5Mzc1cTEuNSAwIDIuMzEyNSAwLjY1NjI1cTAuODI4MTI1IDAuNjQwNjI1IDAuODI4MTI1IDEuNzVsMCAzLjI5Njg3NWwwLjI4MTI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44NzUgMHptMCAtMi44NzVxLTAuOTY4NzUgLTAuMTg3NSAtMS43ODEyNSAtMC4xODc1cS0wLjk2ODc1IDAgLTEuNjcxODc1IDAuNDg0Mzc1cS0wLjQzNzUgMC4yOTY4NzUgLTAuNDM3NSAwLjYwOTM3NXEwIDAuMjM0Mzc1IDAuMjAzMTI1IDAuMzc1cTAuMzkwNjI1IDAuMjUgMS4wNzgxMjUgMC4yNXEwLjU3ODEyNSAwIDEuMjk2ODc1IC0wLjIxODc1cTAuNzM0Mzc1IC0wLjIzNDM3NSAxLjMxMjUgLTAuNjI1bDAgLTAuNjg3NXptNy43NTc4MTI1IC0yLjYyNWwwIDMuMjE4NzVxMCAwLjUxNTYyNSAwLjIxODc1IDAuNjcxODc1cTAuMzI4MTI1IDAuMjY1NjI1IDEuMTcxODc1IDAuMjY1NjI1cTEuMjE4NzUgMCAyLjI2NTYyNSAtMC41MzEyNXEwLjM5MDYyNSAtMC4yMDMxMjUgMC42MjUgLTAuMjAzMTI1cTAuMzEyNSAwIDAuNTMxMjUgMC4yMzQzNzVxMC4yMzQzNzUgMC4yMzQzNzUgMC4yMzQzNzUgMC41NzgxMjVxMCAwLjMxMjUgLTAuMjUgMC41MzEyNXEtMC4zNzUgMC4zNzUgLTEuNTE1NjI1IDAuNjg3NXEtMS4xMjUgMC4zMTI1IC0xLjg5MDYyNSAwLjMxMjVxLTEuNSAwIC0yLjI1IC0wLjY0MDYyNXEtMC43MzQzNzUgLTAuNjU2MjUgLTAuNzM0Mzc1IC0xLjU5Mzc1bDAgLTMuNTMxMjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDAuNTc4MTI1IDBsMCAtMS40NTMxMjVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4zNTkzNzUgMCAwLjU3ODEyNSAwLjI1cTAuMjE4NzUgMC4yMzQzNzUgMC4yMTg3NSAwLjgxMjVsMCAxLjQ1MzEyNWwyLjk2ODc1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzU5Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMi45Njg3NSAwem04LjM1MTU2MjUgLTQuNjQwNjI1bDAgMy40MjE4NzVxMC41IC0wLjI5Njg3NSAxLjAgLTAuNDM3NXEwLjUxNTYyNSAtMC4xNTYyNSAxLjA0Njg3NSAtMC4xNTYyNXEwLjgyODEyNSAwIDEuNDY4NzUgMC4yODEyNXEwLjY1NjI1IDAuMjgxMjUgMS4wNzgxMjUgMC44OTA2MjVxMC40MjE4NzUgMC42MDkzNzUgMC40MjE4NzUgMS41MzEyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMjAzMTI1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtMi44OTA2MjVxMCAtMC42MjUgLTAuMjgxMjUgLTAuODc1cS0wLjM1OTM3NSAtMC4zMjgxMjUgLTEuMDc4MTI1IC0wLjMyODEyNXEtMC41MzEyNSAwIC0wLjk1MzEyNSAwLjIwMzEyNXEtMC40MDYyNSAwLjIwMzEyNSAtMS4wOTM3NSAwLjg5MDYyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMTg3NSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTYuOTIxODc1bC0wLjI2NTYyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuODc1IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjZmZmZmZmIiBkPSJtMTYuMCA0MDAuMGwxODcuNDMzMDYgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDYgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMTYuMCA0MDAuMGwxODcuNDMzMDYgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDYgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Im03MC4zODQ1IDQ0Mi44Nzc3MmwwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTQuNjk1MzEyNSAxLjQzNzVxMCAwLjkyMTg3NSAtMC41MTU2MjUgMS43OTY4NzVxLTAuNTE1NjI1IDAuODU5Mzc1IC0xLjUzMTI1IDEuMzc1cS0xLjAgMC41MTU2MjUgLTIuMTA5Mzc1IDAuNTE1NjI1cS0xLjA5Mzc1IDAgLTIuMDkzNzUgLTAuNXEtMS4wIC0wLjUxNTYyNSAtMS41MzEyNSAtMS4zNzVxLTAuNTE1NjI1IC0wLjg3NSAtMC41MTU2MjUgLTEuODI4MTI1cTAgLTAuOTUzMTI1IDAuNTMxMjUgLTEuODc1cTAuNTMxMjUgLTAuOTM3NSAxLjUzMTI1IC0xLjQ2ODc1cTEuMCAtMC41MzEyNSAyLjA3ODEyNSAtMC41MzEyNXExLjA5Mzc1IDAgMi4xMDkzNzUgMC41NDY4NzVxMS4wMTU2MjUgMC41NDY4NzUgMS41MzEyNSAxLjQ2ODc1cTAuNTE1NjI1IDAuOTA2MjUgMC41MTU2MjUgMS44NzV6bS0xLjYwOTM3NSAwLjAxNTYyNXEwIC0wLjc4MTI1IC0wLjU0Njg3NSAtMS40MjE4NzVxLTAuNzY1NjI1IC0wLjg3NSAtMi4wIC0wLjg3NXEtMS4wNzgxMjUgMCAtMS44MTI1IDAuNzAzMTI1cS0wLjcxODc1IDAuNjg3NSAtMC43MTg3NSAxLjU5Mzc1cTAgMC43NSAwLjczNDM3NSAxLjQwNjI1cTAuNzM0Mzc1IDAuNjU2MjUgMS43OTY4NzUgMC42NTYyNXExLjA3ODEyNSAwIDEuODEyNSAtMC42NTYyNXEwLjczNDM3NSAtMC42NTYyNSAwLjczNDM3NSAtMS40MDYyNXptOC43NzM0Mzc1IC0xLjgxMjVxLTAuMzkwNjI1IC0wLjI1IC0wLjgyODEyNSAtMC4zNTkzNzVxLTAuNDIxODc1IC0wLjEyNSAtMC44OTA2MjUgLTAuMTI1cS0wLjkyMTg3NSAwIC0xLjQ2ODc1IDAuMjk2ODc1cS0wLjI1IDAuMTQwNjI1IC0wLjI1IDAuMjk2ODc1cTAgMC4xNzE4NzUgMC4zMjgxMjUgMC4zNDM3NXEwLjI1IDAuMTI1IDEuMTI1IDAuMjVxMS41OTM3NSAwLjIxODc1IDIuMjE4NzUgMC40Mzc1cTAuODEyNSAwLjI4MTI1IDEuMjUgMC44NTkzNzVxMC40NTMxMjUgMC41NjI1IDAuNDUzMTI1IDEuMjAzMTI1cTAgMC44NTkzNzUgLTAuNzUgMS40Mzc1cS0xLjA5Mzc1IDAuODQzNzUgLTIuODI4MTI1IDAuODQzNzVxLTAuNjg3NSAwIC0xLjI4MTI1IC0wLjEyNXEtMC41OTM3NSAtMC4xMjUgLTEuMDc4MTI1IC0wLjM1OTM3NXEtMC4xMjUgMC4wOTM3NSAtMC4yNjU2MjUgMC4xNTYyNXEtMC4xMjUgMC4wNDY4NzUgLTAuMjY1NjI1IDAuMDQ2ODc1cS0wLjM3NSAwIC0wLjU5Mzc1IC0wLjIzNDM3NXEtMC4yMTg3NSAtMC4yNSAtMC4yMTg3NSAtMC44MjgxMjVsMCAtMC41NDY4NzVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4yOTY4NzUgMCAwLjQ4NDM3NSAwLjE1NjI1cTAuMjAzMTI1IDAuMTU2MjUgMC4zMTI1IDAuNTQ2ODc1cTAuMzU5Mzc1IDAuMzEyNSAwLjg3NSAwLjQ4NDM3NXEwLjUxNTYyNSAwLjE1NjI1IDEuMTg3NSAwLjE1NjI1cTEuMTA5Mzc1IDAgMS43MTg3NSAtMC4zNDM3NXEwLjI4MTI1IC0wLjE3MTg3NSAwLjI4MTI1IC0wLjM1OTM3NXEwIC0wLjMxMjUgLTAuNDA2MjUgLTAuNTE1NjI1cS0wLjQyMTg3NSAtMC4yMDMxMjUgLTEuNzE4NzUgLTAuMzQzNzVxLTEuOTIxODc1IC0wLjIwMzEyNSAtMi41NzgxMjUgLTAuNzgxMjVxLTAuNjQwNjI1IC0wLjU3ODEyNSAtMC42NDA2MjUgLTEuNDA2MjVxMCAtMC44NTkzNzUgMC43MTg3NSAtMS40Mzc1cTAuOTg0Mzc1IC0wLjc4MTI1IDIuNTc4MTI1IC0wLjc4MTI1cTAuNTYyNSAwIDEuMDYyNSAwLjEwOTM3NXEwLjUxNTYyNSAwLjEwOTM3NSAwLjk4NDM3NSAwLjMyODEyNXEwLjE1NjI1IC0wLjEwOTM3NSAwLjI4MTI1IC0wLjE1NjI1cTAuMTI1IC0wLjA2MjUgMC4yMzQzNzUgLTAuMDYyNXEwLjMyODEyNSAwIDAuNTQ2ODc1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDAuMzkwNjI1cTAgMC41MzEyNSAtMC4xMjUgMC43MTg3NXEtMC4yNSAwLjM1OTM3NSAtMC42NzE4NzUgMC4zNTkzNzVxLTAuMjk2ODc1IDAgLTAuNTE1NjI1IC0wLjE3MTg3NXEtMC4yMTg3NSAtMC4xODc1IC0wLjI4MTI1IC0wLjQ4NDM3NXptOC40NDUzMTI1IC00LjkyMTg3NWwwIDEuNzAzMTI1bC0xLjkwNjI1IDBsMCAtMS43MDMxMjVsMS45MDYyNSAwem0wLjIxODc1IDMuMDQ2ODc1bDAgNS40ODQzNzVsMS45MjE4NzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC01LjQzNzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjkyMTg3NSAwbDAgLTMuODkwNjI1bC0xLjI5Njg3NSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjg5MDYyNSAwem0xMC4wMDc4MTI1IDMuNDA2MjVsMi40Mzc1IDIuMDc4MTI1cTAuNDM3NSAwLjAzMTI1IDAuNjU2MjUgMC4yNXEwLjIxODc1IDAuMjE4NzUgMC4yMTg3NSAwLjU2MjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTEuODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4yODEyNSAwLjE3MTg3NSAtMC41cTAuMTg3NSAtMC4yMTg3NSAwLjQ4NDM3NSAtMC4yOTY4NzVsLTEuMTg3NSAtMS4wMzEyNWwtMS4yMTg3NSAxLjAzMTI1cTAuMzU5Mzc1IDAuMDkzNzUgMC41MTU2MjUgMC4yOTY4NzVxMC4xNzE4NzUgMC4xODc1IDAuMTcxODc1IDAuNXEwIDAuMzU5Mzc1IC0wLjI1IDAuNTkzNzVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC4zMjgxMjUgMC4yMTg3NSAtMC41NDY4NzVxMC4yMTg3NSAtMC4yMTg3NSAwLjY1NjI1IC0wLjI1bDIuMzc1IC0yLjA5Mzc1bC0yLjEwOTM3NSAtMS43OTY4NzVxLTAuNDA2MjUgLTAuMDMxMjUgLTAuNjI1IC0wLjI1cS0wLjIxODc1IC0wLjIxODc1IC0wLjIxODc1IC0wLjU0Njg3NXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NjI1cTAgMC40Njg3NSAtMC40Mzc1IDAuNzVsMC45Njg3NSAwLjgxMjVsMC45NTMxMjUgLTAuODI4MTI1cS0wLjQyMTg3NSAtMC4yOTY4NzUgLTAuNDIxODc1IC0wLjcwMzEyNXEwIC0wLjM3NSAwLjIzNDM3NSAtMC41OTM3NXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNDg0Mzc1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zMjgxMjUgLTAuMjE4NzUgMC41NDY4NzVxLTAuMjE4NzUgMC4yMTg3NSAtMC42NDA2MjUgMC4yNWwtMi4xMDkzNzUgMS44MTI1em03LjQ3NjU2MjUgMC40Mzc1bDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xMS45NzY1NTUgNC44NTkzNzVsMCAtMC4zNzVxLTAuNjA5Mzc1IDAuMzEyNSAtMS4zNDM3NSAwLjQ2ODc1cS0wLjcxODc1IDAuMTcxODc1IC0xLjMxMjQ5MjQgMC4xNzE4NzVxLTEuMjgxMjUgMCAtMi4wOTM3NSAtMC42ODc1cS0wLjc5Njg3NSAtMC42ODc1IC0wLjc5Njg3NSAtMS41MTU2MjVxMCAtMS4wIDEuMDE1NjI1IC0xLjg1OTM3NXExLjAzMTI1IC0wLjg3NSAyLjg0Mzc0MjQgLTAuODc1cTAuNzM0Mzc1IDAgMS42ODc1IDAuMTU2MjVsMCAtMC4zNzVxMCAtMC4zNTkzNzUgLTAuMzEyNSAtMC41NzgxMjVxLTAuMzEyNSAtMC4yMzQzNzUgLTEuMTcxODc1IC0wLjIzNDM3NXEtMC43MTg3NSAwIC0xLjg0Mzc0MjQgMC4yODEyNXEtMC40MjE4NzUgMC4wOTM3NSAtMC42NTYyNSAwLjA5Mzc1cS0wLjMyODEyNSAwIC0wLjU0Njg3NSAtMC4yMTg3NXEtMC4yMTg3NSAtMC4yMzQzNzUgLTAuMjE4NzUgLTAuNTkzNzVxMCAtMC4yMDMxMjUgMC4wNzgxMjUgLTAuMzQzNzVxMC4wNzgxMjUgLTAuMTU2MjUgMC4yMTg3NSAtMC4yNXEwLjE0MDYyNSAtMC4wOTM3NSAwLjU3ODEyNSAtMC4yMTg3NXEwLjU5Mzc1IC0wLjE1NjI1IDEuMjAzMTI1IC0wLjI1cTAuNjI0OTkyNCAtMC4xMDkzNzUgMS4xMjQ5OTI0IC0wLjEwOTM3NXExLjUgMCAyLjMxMjUgMC42NTYyNXEwLjgyODEyNSAwLjY0MDYyNSAwLjgyODEyNSAxLjc1bDAgMy4yOTY4NzVsMC4yODEyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODc1IDB6bTAgLTIuODc1cS0wLjk2ODc1IC0wLjE4NzUgLTEuNzgxMjUgLTAuMTg3NXEtMC45Njg3NDI0IDAgLTEuNjcxODY3NCAwLjQ4NDM3NXEtMC40Mzc1IDAuMjk2ODc1IC0wLjQzNzUgMC42MDkzNzVxMCAwLjIzNDM3NSAwLjIwMzEyNSAwLjM3NXEwLjM5MDYyNSAwLjI1IDEuMDc4MTI1IDAuMjVxMC41NzgxMTc0IDAgMS4yOTY4Njc0IC0wLjIxODc1cTAuNzM0Mzc1IC0wLjIzNDM3NSAxLjMxMjUgLTAuNjI1bDAgLTAuNjg3NXptNy43NTc4MTI1IC0yLjYyNWwwIDMuMjE4NzVxMCAwLjUxNTYyNSAwLjIxODc1IDAuNjcxODc1cTAuMzI4MTI1IDAuMjY1NjI1IDEuMTcxODc1IDAuMjY1NjI1cTEuMjE4NzUgMCAyLjI2NTYyNSAtMC41MzEyNXEwLjM5MDYyNSAtMC4yMDMxMjUgMC42MjUgLTAuMjAzMTI1cTAuMzEyNSAwIDAuNTMxMjUgMC4yMzQzNzVxMC4yMzQzNzUgMC4yMzQzNzUgMC4yMzQzNzUgMC41NzgxMjVxMCAwLjMxMjUgLTAuMjUgMC41MzEyNXEtMC4zNzUgMC4zNzUgLTEuNTE1NjI1IDAuNjg3NXEtMS4xMjUgMC4zMTI1IC0xLjg5MDYyNSAwLjMxMjVxLTEuNSAwIC0yLjI1IC0wLjY0MDYyNXEtMC43MzQzNzUgLTAuNjU2MjUgLTAuNzM0Mzc1IC0xLjU5Mzc1bDAgLTMuNTMxMjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDAuNTc4MTI1IDBsMCAtMS40NTMxMjVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4zNTkzNzUgMCAwLjU3ODEyNSAwLjI1cTAuMjE4NzUgMC4yMzQzNzUgMC4yMTg3NSAwLjgxMjVsMCAxLjQ1MzEyNWwyLjk2ODc1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzU5Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMi45Njg3NSAwem04LjM1MTU2MjUgLTQuNjQwNjI1bDAgMy40MjE4NzVxMC41IC0wLjI5Njg3NSAxLjAgLTAuNDM3NXEwLjUxNTYyNSAtMC4xNTYyNSAxLjA0Njg3NSAtMC4xNTYyNXEwLjgyODEyNSAwIDEuNDY4NzUgMC4yODEyNXEwLjY1NjI1IDAuMjgxMjUgMS4wNzgxMjUgMC44OTA2MjVxMC40MjE4NzUgMC42MDkzNzUgMC40MjE4NzUgMS41MzEyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMjAzMTI1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtMi44OTA2MjVxMCAtMC42MjUgLTAuMjgxMjUgLTAuODc1cS0wLjM1OTM3NSAtMC4zMjgxMjUgLTEuMDc4MTI1IC0wLjMyODEyNXEtMC41MzEyNSAwIC0wLjk1MzEyNSAwLjIwMzEyNXEtMC40MDYyNSAwLjIwMzEyNSAtMS4wOTM3NSAwLjg5MDYyNWwwIDMuMHEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMTg3NSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTYuOTIxODc1bC0wLjI2NTYyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuODc1IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjZmZmZmZmIiBkPSJtMzM2LjAgNDAwLjBsMTg3LjQzMzA0IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA0IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMS4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTMzNi4wIDQwMC4wbDE4Ny40MzMwNCAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNCAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0ibTM4MS43MjA0MyA0NDEuNTgwODRsLTEuNDg0Mzc1IDQuNTQ2ODc1bC0xLjc5Njg3NSAwbC0wLjk1MzEyNSAtNy44NzVxLTAuMzc1IC0wLjA0Njg3NSAtMC41NjI1IC0wLjI1cS0wLjE4NzUgLTAuMjAzMTI1IC0wLjE4NzUgLTAuNTMxMjVxMCAtMC4zNzUgMC4yNSAtMC41OTM3NXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMi4xMjUgMC4wMTU2MjVxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtMC44MjgxMjUgMGwwLjUzMTI1IDQuNDg0Mzc1bDEuMjUgLTMuNzM0Mzc1bDEuNjcxODc1IDBsMS4yNSAzLjczNDM3NWwwLjUzMTI1IC00LjQ4NDM3NWwtMC44NDM3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjE4NzUgLTAuMjM0Mzc1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDIuMTI1IDAuMDE1NjI1cTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMjk2ODc1IC0wLjIwMzEyNSAwLjUxNTYyNXEtMC4xODc1IDAuMjE4NzUgLTAuNTYyNSAwLjI4MTI1bC0wLjkyMTg3NSA3Ljg3NWwtMS43NjU2MjUgMGwtMS41MzEyNSAtNC41NDY4NzV6bTEwLjE2NDA2MjUgLTUuNTkzNzVsMCAxLjcwMzEyNWwtMS45MDYyNSAwbDAgLTEuNzAzMTI1bDEuOTA2MjUgMHptMC4yMTg3NSAzLjA0Njg3NWwwIDUuNDg0Mzc1bDEuOTIxODc1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtNS40Mzc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS45MjE4NzUgMGwwIC0zLjg5MDYyNWwtMS4yOTY4NzUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yMzQzNzUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi44OTA2MjUgMHptNy4xOTUzMTI1IDBsMCAwLjUzMTI1cTAuNDM3NSAtMC4zNzUgMC45NTMxMjUgLTAuNTYyNXEwLjUzMTI1IC0wLjE4NzUgMS4xNTYyNSAtMC4xODc1cTEuNDIxODc1IDAgMi4yNSAwLjg5MDYyNXEwLjY1NjI1IDAuNzAzMTI1IDAuNjU2MjUgMS44NDM3NWwwIDIuOTY4NzVxMC41IDAgMC43MzQzNzUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS40NTMxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjIzNDM3NSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuNzUgLTAuMjM0Mzc1bDAgLTMuMDE1NjI1cTAgLTAuNTMxMjUgLTAuMjgxMjUgLTAuNzY1NjI1cS0wLjM1OTM3NSAtMC4zMTI1IC0xLjA5Mzc1IC0wLjMxMjVxLTAuNTYyNSAwIC0wLjk4NDM3NSAwLjIxODc1cS0wLjQwNjI1IDAuMjAzMTI1IC0xLjA0Njg3NSAwLjkwNjI1bDAgMi45Njg3NXEwLjYwOTM3NSAwIDAuNzk2ODc1IDAuMTI1cTAuMzc1IDAuMjM0Mzc1IDAuMzc1IDAuNjg3NXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjQzNzUgMC4zNzUgLTAuNjcxODc1cTAuMTg3NSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTMuODkwNjI1cS0wLjUgMCAtMC43NSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yMzQzNzUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS41MzEyNSAwem0xNC44OTg0Mzc1IC0zLjA0Njg3NWwwIDguNTMxMjVsMC4yNjU2MjUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0xLjg3NSAwbDAgLTAuMzkwNjI1cS0wLjU0Njg3NSAwLjMxMjUgLTEuMTQwNjI1IDAuNDg0Mzc1cS0wLjU5Mzc1IDAuMTcxODc1IC0xLjIzNDM3NSAwLjE3MTg3NXEtMS44MTI1IDAgLTIuOTIxODc1IC0xLjA0Njg3NXEtMS4wOTM3NSAtMS4wNDY4NzUgLTEuMDkzNzUgLTIuNjA5Mzc1cTAgLTEuNjI1IDEuMTU2MjUgLTIuNzY1NjI1cTEuMTU2MjUgLTEuMTU2MjUgMi44MjgxMjUgLTEuMTU2MjVxMC42MjUgMCAxLjIxODc1IDAuMjAzMTI1cTAuNjA5Mzc1IDAuMTg3NSAxLjE4NzUgMC41NjI1bDAgLTEuOTg0Mzc1bC0wLjI2NTYyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjg3NSAwem0tMS42MDkzNzUgNi43OTY4NzVxMCAtMC45ODQzNzUgLTAuNzAzMTI1IC0xLjY3MTg3NXEtMC42ODc1IC0wLjY4NzUgLTEuNjg3NSAtMC42ODc1cS0xLjAgMCAtMS43MDMxMjUgMC42ODc1cS0wLjY4NzUgMC42ODc1IC0wLjY4NzUgMS42NTYyNXEwIDAuODc1IDAuNjI1IDEuNDUzMTI1cTAuNjI1IDAuNTYyNSAxLjc2NTYyNSAwLjU2MjVxMS4xMjUgMCAxLjc1IC0wLjU2MjVxMC42NDA2MjUgLTAuNTc4MTI1IDAuNjQwNjI1IC0xLjQzNzV6bTExLjY5NTMxMjUgLTAuMDc4MTI1cTAgMC45MjE4NzUgLTAuNTE1NjI1IDEuNzk2ODc1cS0wLjUxNTYyNSAwLjg1OTM3NSAtMS41MzEyNSAxLjM3NXEtMS4wIDAuNTE1NjI1IC0yLjEwOTM3NSAwLjUxNTYyNXEtMS4wOTM3NSAwIC0yLjA5Mzc1IC0wLjVxLTEuMCAtMC41MTU2MjUgLTEuNTMxMjUgLTEuMzc1cS0wLjUxNTYyNSAtMC44NzUgLTAuNTE1NjI1IC0xLjgyODEyNXEwIC0wLjk1MzEyNSAwLjUzMTI1IC0xLjg3NXEwLjUzMTI1IC0wLjkzNzUgMS41MzEyNSAtMS40Njg3NXExLjAgLTAuNTMxMjUgMi4wNzgxMjUgLTAuNTMxMjVxMS4wOTM3NSAwIDIuMTA5Mzc1IDAuNTQ2ODc1cTEuMDE1NjI1IDAuNTQ2ODc1IDEuNTMxMjUgMS40Njg3NXEwLjUxNTYyNSAwLjkwNjI1IDAuNTE1NjI1IDEuODc1em0tMS42MDkzNzUgMC4wMTU2MjVxMCAtMC43ODEyNSAtMC41NDY4NzUgLTEuNDIxODc1cS0wLjc2NTYyNSAtMC44NzUgLTIuMCAtMC44NzVxLTEuMDc4MTI1IDAgLTEuODEyNSAwLjcwMzEyNXEtMC43MTg3NSAwLjY4NzUgLTAuNzE4NzUgMS41OTM3NXEwIDAuNzUgMC43MzQzNzUgMS40MDYyNXEwLjczNDM3NSAwLjY1NjI1IDEuNzk2ODc1IDAuNjU2MjVxMS4wNzgxMjUgMCAxLjgxMjUgLTAuNjU2MjVxMC43MzQzNzUgLTAuNjU2MjUgMC43MzQzNzUgLTEuNDA2MjV6bTcuMDU0Njg3NSAwLjQ1MzEyNWwtMS4xMDkzNzUgMi45NTMxMjVsLTEuNSAwbC0xLjM0Mzc1IC01LjVxLTAuNDM3NSAtMC4wMTU2MjUgLTAuNjcxODc1IC0wLjIzNDM3NXEtMC4yMTg3NSAtMC4yMzQzNzUgLTAuMjE4NzUgLTAuNTYyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNDg0Mzc1IDBxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjgxMjUgMC42MDkzNzVxLTAuMjE4NzUgMC4xODc1IC0wLjgyODEyNSAwLjE4NzVsMC42MDkzNzUgMi41NDY4NzVsMC45ODQzNzUgLTIuNjA5Mzc1bDEuNDIxODc1IDBsMS4wIDIuNjA5Mzc1bDAuNjI1IC0yLjU0Njg3NXEtMC41OTM3NSAwIC0wLjc4MTI1IC0wLjEwOTM3NXEtMC4zNzUgLTAuMjUgLTAuMzc1IC0wLjY4NzVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjMyODEyNSAtMC4yMTg3NSAwLjU0Njg3NXEtMC4yMTg3NSAwLjIxODc1IC0wLjY0MDYyNSAwLjI1bC0xLjMxMjUgNS41bC0xLjQ4NDM3NSAwbC0xLjE3MTg3NSAtMi45NTMxMjV6bTExLjMyMDMxMjUgLTIuMjY1NjI1cS0wLjM5MDYyNSAtMC4yNSAtMC44MjgxMjUgLTAuMzU5Mzc1cS0wLjQyMTg3NSAtMC4xMjUgLTAuODkwNjI1IC0wLjEyNXEtMC45MjE4NzUgMCAtMS40Njg3NSAwLjI5Njg3NXEtMC4yNSAwLjE0MDYyNSAtMC4yNSAwLjI5Njg3NXEwIDAuMTcxODc1IDAuMzI4MTI1IDAuMzQzNzVxMC4yNSAwLjEyNSAxLjEyNSAwLjI1cTEuNTkzNzUgMC4yMTg3NSAyLjIxODc1IDAuNDM3NXEwLjgxMjUgMC4yODEyNSAxLjI1IDAuODU5Mzc1cTAuNDUzMTI1IDAuNTYyNSAwLjQ1MzEyNSAxLjIwMzEyNXEwIDAuODU5Mzc1IC0wLjc1IDEuNDM3NXEtMS4wOTM3NSAwLjg0Mzc1IC0yLjgyODEyNSAwLjg0Mzc1cS0wLjY4NzUgMCAtMS4yODEyNSAtMC4xMjVxLTAuNTkzNzUgLTAuMTI1IC0xLjA3ODEyNSAtMC4zNTkzNzVxLTAuMTI1IDAuMDkzNzUgLTAuMjY1NjI1IDAuMTU2MjVxLTAuMTI1IDAuMDQ2ODc1IC0wLjI2NTYyNSAwLjA0Njg3NXEtMC4zNzUgMCAtMC41OTM3NSAtMC4yMzQzNzVxLTAuMjE4NzUgLTAuMjUgLTAuMjE4NzUgLTAuODI4MTI1bDAgLTAuNTQ2ODc1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMjk2ODc1IDAgMC40ODQzNzUgMC4xNTYyNXEwLjIwMzEyNSAwLjE1NjI1IDAuMzEyNSAwLjU0Njg3NXEwLjM1OTM3NSAwLjMxMjUgMC44NzUgMC40ODQzNzVxMC41MTU2MjUgMC4xNTYyNSAxLjE4NzUgMC4xNTYyNXExLjEwOTM3NSAwIDEuNzE4NzUgLTAuMzQzNzVxMC4yODEyNSAtMC4xNzE4NzUgMC4yODEyNSAtMC4zNTkzNzVxMCAtMC4zMTI1IC0wLjQwNjI1IC0wLjUxNTYyNXEtMC40MjE4NzUgLTAuMjAzMTI1IC0xLjcxODc1IC0wLjM0Mzc1cS0xLjkyMTg3NSAtMC4yMDMxMjUgLTIuNTc4MTI1IC0wLjc4MTI1cS0wLjY0MDYyNSAtMC41NzgxMjUgLTAuNjQwNjI1IC0xLjQwNjI1cTAgLTAuODU5Mzc1IDAuNzE4NzUgLTEuNDM3NXEwLjk4NDM3NSAtMC43ODEyNSAyLjU3ODEyNSAtMC43ODEyNXEwLjU2MjUgMCAxLjA2MjUgMC4xMDkzNzVxMC41MTU2MjUgMC4xMDkzNzUgMC45ODQzNzUgMC4zMjgxMjVxMC4xNTYyNSAtMC4xMDkzNzUgMC4yODEyNSAtMC4xNTYyNXEwLjEyNSAtMC4wNjI1IDAuMjM0Mzc1IC0wLjA2MjVxMC4zMjgxMjUgMCAwLjU0Njg3NSAwLjI1cTAuMjE4NzUgMC4yMzQzNzUgMC4yMTg3NSAwLjgxMjVsMCAwLjM5MDYyNXEwIDAuNTMxMjUgLTAuMTI1IDAuNzE4NzVxLTAuMjUgMC4zNTkzNzUgLTAuNjcxODc1IDAuMzU5Mzc1cS0wLjI5Njg3NSAwIC0wLjUxNTYyNSAtMC4xNzE4NzVxLTAuMjE4NzUgLTAuMTg3NSAtMC4yODEyNSAtMC40ODQzNzV6bTYuOTQ1MzEyNSAxLjk2ODc1bDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xMS45NzY1NjI1IDQuODU5Mzc1bDAgLTAuMzc1cS0wLjYwOTM3NSAwLjMxMjUgLTEuMzQzNzUgMC40Njg3NXEtMC43MTg3NSAwLjE3MTg3NSAtMS4zMTI1IDAuMTcxODc1cS0xLjI4MTI1IDAgLTIuMDkzNzUgLTAuNjg3NXEtMC43OTY4NzUgLTAuNjg3NSAtMC43OTY4NzUgLTEuNTE1NjI1cTAgLTEuMCAxLjAxNTYyNSAtMS44NTkzNzVxMS4wMzEyNSAtMC44NzUgMi44NDM3NSAtMC44NzVxMC43MzQzNzUgMCAxLjY4NzUgMC4xNTYyNWwwIC0wLjM3NXEwIC0wLjM1OTM3NSAtMC4zMTI1IC0wLjU3ODEyNXEtMC4zMTI1IC0wLjIzNDM3NSAtMS4xNzE4NzUgLTAuMjM0Mzc1cS0wLjcxODc1IDAgLTEuODQzNzUgMC4yODEyNXEtMC40MjE4NzUgMC4wOTM3NSAtMC42NTYyNSAwLjA5Mzc1cS0wLjMyODEyNSAwIC0wLjU0Njg3NSAtMC4yMTg3NXEtMC4yMTg3NSAtMC4yMzQzNzUgLTAuMjE4NzUgLTAuNTkzNzVxMCAtMC4yMDMxMjUgMC4wNzgxMjUgLTAuMzQzNzVxMC4wNzgxMjUgLTAuMTU2MjUgMC4yMTg3NSAtMC4yNXEwLjE0MDYyNSAtMC4wOTM3NSAwLjU3ODEyNSAtMC4yMTg3NXEwLjU5Mzc1IC0wLjE1NjI1IDEuMjAzMTI1IC0wLjI1cTAuNjI1IC0wLjEwOTM3NSAxLjEyNSAtMC4xMDkzNzVxMS41IDAgMi4zMTI1IDAuNjU2MjVxMC44MjgxMjUgMC42NDA2MjUgMC44MjgxMjUgMS43NWwwIDMuMjk2ODc1bDAuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjg3NSAwem0wIC0yLjg3NXEtMC45Njg3NSAtMC4xODc1IC0xLjc4MTI1IC0wLjE4NzVxLTAuOTY4NzUgMCAtMS42NzE4NzUgMC40ODQzNzVxLTAuNDM3NSAwLjI5Njg3NSAtMC40Mzc1IDAuNjA5Mzc1cTAgMC4yMzQzNzUgMC4yMDMxMjUgMC4zNzVxMC4zOTA2MjUgMC4yNSAxLjA3ODEyNSAwLjI1cTAuNTc4MTI1IDAgMS4yOTY4NzUgLTAuMjE4NzVxMC43MzQzNzUgLTAuMjM0Mzc1IDEuMzEyNSAtMC42MjVsMCAtMC42ODc1em03Ljc1NzgxMjUgLTIuNjI1bDAgMy4yMTg3NXEwIDAuNTE1NjI1IDAuMjE4NzUgMC42NzE4NzVxMC4zMjgxMjUgMC4yNjU2MjUgMS4xNzE4NzUgMC4yNjU2MjVxMS4yMTg3NSAwIDIuMjY1NjI1IC0wLjUzMTI1cTAuMzkwNjI1IC0wLjIwMzEyNSAwLjYyNSAtMC4yMDMxMjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIzNDM3NSAwLjIzNDM3NSAwLjIzNDM3NSAwLjU3ODEyNXEwIDAuMzEyNSAtMC4yNSAwLjUzMTI1cS0wLjM3NSAwLjM3NSAtMS41MTU2MjUgMC42ODc1cS0xLjEyNSAwLjMxMjUgLTEuODkwNjI1IDAuMzEyNXEtMS41IDAgLTIuMjUgLTAuNjQwNjI1cS0wLjczNDM3NSAtMC42NTYyNSAtMC43MzQzNzUgLTEuNTkzNzVsMCAtMy41MzEyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMC41NzgxMjUgMGwwIC0xLjQ1MzEyNXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjM1OTM3NSAwIDAuNTc4MTI1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDEuNDUzMTI1bDIuOTY4NzUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0yLjk2ODc1IDB6bTguMzUxNTYyNSAtNC42NDA2MjVsMCAzLjQyMTg3NXEwLjUgLTAuMjk2ODc1IDEuMCAtMC40Mzc1cTAuNTE1NjI1IC0wLjE1NjI1IDEuMDQ2ODc1IC0wLjE1NjI1cTAuODI4MTI1IDAgMS40Njg3NSAwLjI4MTI1cTAuNjU2MjUgMC4yODEyNSAxLjA3ODEyNSAwLjg5MDYyNXEwLjQyMTg3NSAwLjYwOTM3NSAwLjQyMTg3NSAxLjUzMTI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4yMDMxMjUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC0yLjg5MDYyNXEwIC0wLjYyNSAtMC4yODEyNSAtMC44NzVxLTAuMzU5Mzc1IC0wLjMyODEyNSAtMS4wNzgxMjUgLTAuMzI4MTI1cS0wLjUzMTI1IDAgLTAuOTUzMTI1IDAuMjAzMTI1cS0wLjQwNjI1IDAuMjAzMTI1IC0xLjA5Mzc1IDAuODkwNjI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtNi45MjE4NzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS44NzUgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMC4wIiBkPSJtOTYuMCAxNDQuMGwwIC04MC4wbDgwLjAgMCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im05Ni4wIDE0NC4wbDAgLTgwLjBsNjguMCAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTE2NC4wIDY3LjMwMzQ3bDkuMDc2MjAyIC0zLjMwMzQ2NjhsLTkuMDc2MjAyIC0zLjMwMzQ2M3oiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMC4wIiBkPSJtNDMxLjUwMTMgMTQzLjA4Mzk4bDAgLTc4Ljk5OTk5bC02OC4wIDAiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtNDMxLjUwMTMgMTQzLjA4Mzk4bDAgLTc4Ljk5OTk5bC01Ni4wIDAiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMzc1LjUwMTMgNjAuNzgwNTI1bC05LjA3NjIwMiAzLjMwMzQ2NjhsOS4wNzYyMDIgMy4zMDM0NTkyeiIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwLjAiIGQ9Im0yNjkuNzE2NTIgMTA0LjUzNTQzbDAgMTY2LjkyOTE0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTI2OS43MTY1MiAxMTYuNTM1NDNsMCAxNTQuOTI5MTQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMjczLjAyIDExNi41MzU0M2wtMy4zMDM0NjY4IC05LjA3NjE5NWwtMy4zMDM0NjY4IDkuMDc2MTk1eiIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwLjAiIGQ9Im02NS4wIDIyMy4wODM5OGwtMS4wMDc4NzM1IDE3Ni45MTMzOSIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im02NC45MzE2MyAyMzUuMDgzNzlsLTAuOTM5NTA2NTMgMTY0LjkxMzU5IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTY4LjIzNTA1IDIzNS4xMDI2MmwtMy4yNTE3MDE0IC05LjA5NDg2NGwtMy4zNTUxMTc4IDkuMDU3MjJ6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTQ3MS4wIDIyNC4zODA1OGwtMS4wMDc4NzM1IDE3Ni45MTMzNiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im00NzAuOTMxNjQgMjM2LjM4MDM3bC0wLjkzOTUxNDE2IDE2NC45MTM2IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTQ3NC4yMzUwNSAyMzYuMzk5MmwtMy4yNTE3MDkgLTkuMDk0ODY0bC0zLjM1NTEwMjUgOS4wNTcyMnoiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMC4wIiBkPSJtMTI4LjUwMTMxIDQwMC4wMDI2NmwwIC04Ni4xNjhsNDcuNDk2MDAyIDAiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMTI4LjUwMTMxIDQwMC4wMDI2NmwwIC04Ni4xNjhsMzUuNDk2MDAyIDAiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMTYzLjk5NzMxIDMxNy4xMzgxMmw5LjA3NjIwMiAtMy4zMDM0NjY4bC05LjA3NjIwMiAtMy4zMDM0NjY4eiIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwLjAiIGQ9Im00MTQuNzE5MDIgNDAwLjAwMjY2bDAgLTg2LjE2OGwtNTEuMjE2MDAzIDAiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtNDE0LjcxOTAyIDQwMC4wMDI2NmwwIC04Ni4xNjhsLTM5LjIxNjAwMyAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTM3NS41MDMwMiAzMTAuNTMxMmwtOS4wNzYxNzIgMy4zMDM0NjY4bDkuMDc2MTcyIDMuMzAzNDY2OHoiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjwvZz48L3N2Zz4KKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGF0aGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9wYXRobGliLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWE5ZDRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvcGF0aGxpYi5yc3QKQEAgLTAsMCArMSw4ODkgQEAKKworOm1vZDpgcGF0aGxpYmAgLS0tIE9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogcGF0aGxpYgorICAgOnN5bm9wc2lzOiBPYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocworCisuLiBpbmRleDo6IHNpbmdsZTogcGF0aDsgb3BlcmF0aW9ucworCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworVGhpcyBtb2R1bGUgb2ZmZXJzIGNsYXNzZXMgcmVwcmVzZW50aW5nIGZpbGVzeXN0ZW0gcGF0aHMgd2l0aCBzZW1hbnRpY3MKK2FwcHJvcHJpYXRlIGZvciBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMuICBQYXRoIGNsYXNzZXMgYXJlIGRpdmlkZWQKK2JldHdlZW4gOnJlZjpgcHVyZSBwYXRocyA8cHVyZS1wYXRocz5gLCB3aGljaCBwcm92aWRlIHB1cmVseSBjb21wdXRhdGlvbmFsCitvcGVyYXRpb25zIHdpdGhvdXQgSS9PLCBhbmQgOnJlZjpgY29uY3JldGUgcGF0aHMgPGNvbmNyZXRlLXBhdGhzPmAsIHdoaWNoCitpbmhlcml0IGZyb20gcHVyZSBwYXRocyBidXQgYWxzbyBwcm92aWRlIEkvTyBvcGVyYXRpb25zLgorCisuLiBpbWFnZTo6IHBhdGhsaWItaW5oZXJpdGFuY2UucG5nCisgICA6YWxpZ246IGNlbnRlcgorCitJZiB5b3UndmUgbmV2ZXIgdXNlZCB0aGlzIG1vZHVsZSBiZWZvcmUgb3IganVzdCBhcmVuJ3Qgc3VyZSB3aGljaCBjbGFzcyBpcworcmlnaHQgZm9yIHlvdXIgdGFzaywgOmNsYXNzOmBQYXRoYCBpcyBtb3N0IGxpa2VseSB3aGF0IHlvdSBuZWVkLiBJdCBpbnN0YW50aWF0ZXMKK2EgOnJlZjpgY29uY3JldGUgcGF0aCA8Y29uY3JldGUtcGF0aHM+YCBmb3IgdGhlIHBsYXRmb3JtIHRoZSBjb2RlIGlzIHJ1bm5pbmcgb24uCisKK1B1cmUgcGF0aHMgYXJlIHVzZWZ1bCBpbiBzb21lIHNwZWNpYWwgY2FzZXM7IGZvciBleGFtcGxlOgorCisjLiBJZiB5b3Ugd2FudCB0byBtYW5pcHVsYXRlIFdpbmRvd3MgcGF0aHMgb24gYSBVbml4IG1hY2hpbmUgKG9yIHZpY2UgdmVyc2EpLgorICAgWW91IGNhbm5vdCBpbnN0YW50aWF0ZSBhIDpjbGFzczpgV2luZG93c1BhdGhgIHdoZW4gcnVubmluZyBvbiBVbml4LCBidXQgeW91CisgICBjYW4gaW5zdGFudGlhdGUgOmNsYXNzOmBQdXJlV2luZG93c1BhdGhgLgorIy4gWW91IHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgeW91ciBjb2RlIG9ubHkgbWFuaXB1bGF0ZXMgcGF0aHMgd2l0aG91dCBhY3R1YWxseQorICAgYWNjZXNzaW5nIHRoZSBPUy4gSW4gdGhpcyBjYXNlLCBpbnN0YW50aWF0aW5nIG9uZSBvZiB0aGUgcHVyZSBjbGFzc2VzIG1heSBiZQorICAgdXNlZnVsIHNpbmNlIHRob3NlIHNpbXBseSBkb24ndCBoYXZlIGFueSBPUy1hY2Nlc3Npbmcgb3BlcmF0aW9ucy4KKworLi4gbm90ZTo6CisgICBUaGlzIG1vZHVsZSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBvbiBhCisgICA6dGVybTpgcHJvdmlzaW9uYWwgYmFzaXMgPHByb3Zpc2lvbmFsIHBhY2thZ2U+YC4gQmFja3dhcmRzIGluY29tcGF0aWJsZQorICAgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsIG9mIHRoZSBwYWNrYWdlKSBtYXkgb2NjdXIgaWYgZGVlbWVkCisgICBuZWNlc3NhcnkgYnkgdGhlIGNvcmUgZGV2ZWxvcGVycy4KKworLi4gc2VlYWxzbzo6CisgICA6cGVwOmA0MjhgOiBUaGUgcGF0aGxpYiBtb2R1bGUgLS0gb2JqZWN0LW9yaWVudGVkIGZpbGVzeXN0ZW0gcGF0aHMuCisKKy4uIHNlZWFsc286OgorICAgRm9yIGxvdy1sZXZlbCBwYXRoIG1hbmlwdWxhdGlvbiBvbiBzdHJpbmdzLCB5b3UgY2FuIGFsc28gdXNlIHRoZQorICAgOm1vZDpgb3MucGF0aGAgbW9kdWxlLgorCisKK0Jhc2ljIHVzZQorLS0tLS0tLS0tCisKK0ltcG9ydGluZyB0aGUgbWFpbiBjbGFzczo6CisKKyAgID4+PiBmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKKworTGlzdGluZyBzdWJkaXJlY3Rvcmllczo6CisKKyAgID4+PiBwID0gUGF0aCgnLicpCisgICA+Pj4gW3ggZm9yIHggaW4gcC5pdGVyZGlyKCkgaWYgeC5pc19kaXIoKV0KKyAgIFtQb3NpeFBhdGgoJy5oZycpLCBQb3NpeFBhdGgoJ2RvY3MnKSwgUG9zaXhQYXRoKCdkaXN0JyksCisgICAgUG9zaXhQYXRoKCdfX3B5Y2FjaGVfXycpLCBQb3NpeFBhdGgoJ2J1aWxkJyldCisKK0xpc3RpbmcgUHl0aG9uIHNvdXJjZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSB0cmVlOjoKKworICAgPj4+IGxpc3QocC5nbG9iKCcqKi8qLnB5JykpCisgICBbUG9zaXhQYXRoKCd0ZXN0X3BhdGhsaWIucHknKSwgUG9zaXhQYXRoKCdzZXR1cC5weScpLAorICAgIFBvc2l4UGF0aCgncGF0aGxpYi5weScpLCBQb3NpeFBhdGgoJ2RvY3MvY29uZi5weScpLAorICAgIFBvc2l4UGF0aCgnYnVpbGQvbGliL3BhdGhsaWIucHknKV0KKworTmF2aWdhdGluZyBpbnNpZGUgYSBkaXJlY3RvcnkgdHJlZTo6CisKKyAgID4+PiBwID0gUGF0aCgnL2V0YycpCisgICA+Pj4gcSA9IHAgLyAnaW5pdC5kJyAvICdyZWJvb3QnCisgICA+Pj4gcQorICAgUG9zaXhQYXRoKCcvZXRjL2luaXQuZC9yZWJvb3QnKQorICAgPj4+IHEucmVzb2x2ZSgpCisgICBQb3NpeFBhdGgoJy9ldGMvcmMuZC9pbml0LmQvaGFsdCcpCisKK1F1ZXJ5aW5nIHBhdGggcHJvcGVydGllczo6CisKKyAgID4+PiBxLmV4aXN0cygpCisgICBUcnVlCisgICA+Pj4gcS5pc19kaXIoKQorICAgRmFsc2UKKworT3BlbmluZyBhIGZpbGU6OgorCisgICA+Pj4gd2l0aCBxLm9wZW4oKSBhcyBmOiBmLnJlYWRsaW5lKCkKKyAgIC4uLgorICAgJyMhL2Jpbi9iYXNoXG4nCisKKworLi4gX3B1cmUtcGF0aHM6CisKK1B1cmUgcGF0aHMKKy0tLS0tLS0tLS0KKworUHVyZSBwYXRoIG9iamVjdHMgcHJvdmlkZSBwYXRoLWhhbmRsaW5nIG9wZXJhdGlvbnMgd2hpY2ggZG9uJ3QgYWN0dWFsbHkKK2FjY2VzcyBhIGZpbGVzeXN0ZW0uICBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBhY2Nlc3MgdGhlc2UgY2xhc3Nlcywgd2hpY2gKK3dlIGFsc28gY2FsbCAqZmxhdm91cnMqOgorCisuLiBjbGFzczo6IFB1cmVQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgZ2VuZXJpYyBjbGFzcyB0aGF0IHJlcHJlc2VudHMgdGhlIHN5c3RlbSdzIHBhdGggZmxhdm91ciAoaW5zdGFudGlhdGluZworICAgaXQgY3JlYXRlcyBlaXRoZXIgYSA6Y2xhc3M6YFB1cmVQb3NpeFBhdGhgIG9yIGEgOmNsYXNzOmBQdXJlV2luZG93c1BhdGhgKTo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnc2V0dXAucHknKSAgICAgICMgUnVubmluZyBvbiBhIFVuaXggbWFjaGluZQorICAgICAgUHVyZVBvc2l4UGF0aCgnc2V0dXAucHknKQorCisgICBFYWNoIGVsZW1lbnQgb2YgKnBhdGhzZWdtZW50cyogY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBieXRlcyBvYmplY3QKKyAgIHJlcHJlc2VudGluZyBhIHBhdGggc2VnbWVudDsgaXQgY2FuIGFsc28gYmUgYW5vdGhlciBwYXRoIG9iamVjdDo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnZm9vJywgJ3NvbWUvcGF0aCcsICdiYXInKQorICAgICAgUHVyZVBvc2l4UGF0aCgnZm9vL3NvbWUvcGF0aC9iYXInKQorICAgICAgPj4+IFB1cmVQYXRoKFBhdGgoJ2ZvbycpLCBQYXRoKCdiYXInKSkKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ2Zvby9iYXInKQorCisgICBXaGVuICpwYXRoc2VnbWVudHMqIGlzIGVtcHR5LCB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgYXNzdW1lZDo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgpCisgICAgICBQdXJlUG9zaXhQYXRoKCcuJykKKworICAgV2hlbiBzZXZlcmFsIGFic29sdXRlIHBhdGhzIGFyZSBnaXZlbiwgdGhlIGxhc3QgaXMgdGFrZW4gYXMgYW4gYW5jaG9yCisgICAobWltaWNraW5nIDpmdW5jOmBvcy5wYXRoLmpvaW5gJ3MgYmVoYXZpb3VyKTo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnL2V0YycsICcvdXNyJywgJ2xpYjY0JykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy91c3IvbGliNjQnKQorICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovV2luZG93cycsICdkOmJhcicpCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2Q6YmFyJykKKworICAgSG93ZXZlciwgaW4gYSBXaW5kb3dzIHBhdGgsIGNoYW5naW5nIHRoZSBsb2NhbCByb290IGRvZXNuJ3QgZGlzY2FyZCB0aGUKKyAgIHByZXZpb3VzIGRyaXZlIHNldHRpbmc6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9XaW5kb3dzJywgJy9Qcm9ncmFtIEZpbGVzJykKKyAgICAgIFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcycpCisKKyAgIFNwdXJpb3VzIHNsYXNoZXMgYW5kIHNpbmdsZSBkb3RzIGFyZSBjb2xsYXBzZWQsIGJ1dCBkb3VibGUgZG90cyAoYGAnLi4nYGApCisgICBhcmUgbm90LCBzaW5jZSB0aGlzIHdvdWxkIGNoYW5nZSB0aGUgbWVhbmluZyBvZiBhIHBhdGggaW4gdGhlIGZhY2Ugb2YKKyAgIHN5bWJvbGljIGxpbmtzOjoKKworICAgICAgPj4+IFB1cmVQYXRoKCdmb28vL2JhcicpCisgICAgICBQdXJlUG9zaXhQYXRoKCdmb28vYmFyJykKKyAgICAgID4+PiBQdXJlUGF0aCgnZm9vLy4vYmFyJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ2Zvby9iYXInKQorICAgICAgPj4+IFB1cmVQYXRoKCdmb28vLi4vYmFyJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ2Zvby8uLi9iYXInKQorCisgICAoYSBuYcOvdmUgYXBwcm9hY2ggd291bGQgbWFrZSBgYFB1cmVQb3NpeFBhdGgoJ2Zvby8uLi9iYXInKWBgIGVxdWl2YWxlbnQKKyAgIHRvIGBgUHVyZVBvc2l4UGF0aCgnYmFyJylgYCwgd2hpY2ggaXMgd3JvbmcgaWYgYGBmb29gYCBpcyBhIHN5bWJvbGljIGxpbmsKKyAgIHRvIGFub3RoZXIgZGlyZWN0b3J5KQorCisuLiBjbGFzczo6IFB1cmVQb3NpeFBhdGgoKnBhdGhzZWdtZW50cykKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFB1cmVQYXRoYCwgdGhpcyBwYXRoIGZsYXZvdXIgcmVwcmVzZW50cyBub24tV2luZG93cworICAgZmlsZXN5c3RlbSBwYXRoczo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9ldGMnKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCisuLiBjbGFzczo6IFB1cmVXaW5kb3dzUGF0aCgqcGF0aHNlZ21lbnRzKQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUHVyZVBhdGhgLCB0aGlzIHBhdGggZmxhdm91ciByZXByZXNlbnRzIFdpbmRvd3MKKyAgIGZpbGVzeXN0ZW0gcGF0aHM6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzLycpCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCitSZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0geW91J3JlIHJ1bm5pbmcgb24sIHlvdSBjYW4gaW5zdGFudGlhdGUgYWxsIG9mCit0aGVzZSBjbGFzc2VzLCBzaW5jZSB0aGV5IGRvbid0IHByb3ZpZGUgYW55IG9wZXJhdGlvbiB0aGF0IGRvZXMgc3lzdGVtIGNhbGxzLgorCisKK0dlbmVyYWwgcHJvcGVydGllcworXl5eXl5eXl5eXl5eXl5eXl5eCisKK1BhdGhzIGFyZSBpbW11dGFibGUgYW5kIGhhc2hhYmxlLiAgUGF0aHMgb2YgYSBzYW1lIGZsYXZvdXIgYXJlIGNvbXBhcmFibGUKK2FuZCBvcmRlcmFibGUuICBUaGVzZSBwcm9wZXJ0aWVzIHJlc3BlY3QgdGhlIGZsYXZvdXIncyBjYXNlLWZvbGRpbmcKK3NlbWFudGljczo6CisKKyAgID4+PiBQdXJlUG9zaXhQYXRoKCdmb28nKSA9PSBQdXJlUG9zaXhQYXRoKCdGT08nKQorICAgRmFsc2UKKyAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2ZvbycpID09IFB1cmVXaW5kb3dzUGF0aCgnRk9PJykKKyAgIFRydWUKKyAgID4+PiBQdXJlV2luZG93c1BhdGgoJ0ZPTycpIGluIHsgUHVyZVdpbmRvd3NQYXRoKCdmb28nKSB9CisgICBUcnVlCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdDOicpIDwgUHVyZVdpbmRvd3NQYXRoKCdkOicpCisgICBUcnVlCisKK1BhdGhzIG9mIGEgZGlmZmVyZW50IGZsYXZvdXIgY29tcGFyZSB1bmVxdWFsIGFuZCBjYW5ub3QgYmUgb3JkZXJlZDo6CisKKyAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2ZvbycpID09IFB1cmVQb3NpeFBhdGgoJ2ZvbycpCisgICBGYWxzZQorICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnZm9vJykgPCBQdXJlUG9zaXhQYXRoKCdmb28nKQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgVHlwZUVycm9yOiB1bm9yZGVyYWJsZSB0eXBlczogUHVyZVdpbmRvd3NQYXRoKCkgPCBQdXJlUG9zaXhQYXRoKCkKKworCitPcGVyYXRvcnMKK15eXl5eXl5eXgorCitUaGUgc2xhc2ggb3BlcmF0b3IgaGVscHMgY3JlYXRlIGNoaWxkIHBhdGhzLCBzaW1pbGFybHkgdG8gOmZ1bmM6YG9zLnBhdGguam9pbmA6OgorCisgICA+Pj4gcCA9IFB1cmVQYXRoKCcvZXRjJykKKyAgID4+PiBwCisgICBQdXJlUG9zaXhQYXRoKCcvZXRjJykKKyAgID4+PiBwIC8gJ2luaXQuZCcgLyAnYXBhY2hlMicKKyAgIFB1cmVQb3NpeFBhdGgoJy9ldGMvaW5pdC5kL2FwYWNoZTInKQorICAgPj4+IHEgPSBQdXJlUGF0aCgnYmluJykKKyAgID4+PiAnL3VzcicgLyBxCisgICBQdXJlUG9zaXhQYXRoKCcvdXNyL2JpbicpCisKK1RoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBwYXRoIGlzIHRoZSByYXcgZmlsZXN5c3RlbSBwYXRoIGl0c2VsZgorKGluIG5hdGl2ZSBmb3JtLCBlLmcuIHdpdGggYmFja3NsYXNoZXMgdW5kZXIgV2luZG93cyksIHdoaWNoIHlvdSBjYW4KK3Bhc3MgdG8gYW55IGZ1bmN0aW9uIHRha2luZyBhIGZpbGUgcGF0aCBhcyBhIHN0cmluZzo6CisKKyAgID4+PiBwID0gUHVyZVBhdGgoJy9ldGMnKQorICAgPj4+IHN0cihwKQorICAgJy9ldGMnCisgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcycpCisgICA+Pj4gc3RyKHApCisgICAnYzpcXFByb2dyYW0gRmlsZXMnCisKK1NpbWlsYXJseSwgY2FsbGluZyA6Y2xhc3M6YGJ5dGVzYCBvbiBhIHBhdGggZ2l2ZXMgdGhlIHJhdyBmaWxlc3lzdGVtIHBhdGggYXMgYQorYnl0ZXMgb2JqZWN0LCBhcyBlbmNvZGVkIGJ5IDpmdW5jOmBvcy5mc2VuY29kZWA6OgorCisgICA+Pj4gYnl0ZXMocCkKKyAgIGInL2V0YycKKworLi4gbm90ZTo6CisgICBDYWxsaW5nIDpjbGFzczpgYnl0ZXNgIGlzIG9ubHkgcmVjb21tZW5kZWQgdW5kZXIgVW5peC4gIFVuZGVyIFdpbmRvd3MsCisgICB0aGUgdW5pY29kZSBmb3JtIGlzIHRoZSBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gb2YgZmlsZXN5c3RlbSBwYXRocy4KKworCitBY2Nlc3NpbmcgaW5kaXZpZHVhbCBwYXJ0cworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVG8gYWNjZXNzIHRoZSBpbmRpdmlkdWFsICJwYXJ0cyIgKGNvbXBvbmVudHMpIG9mIGEgcGF0aCwgdXNlIHRoZSBmb2xsb3dpbmcKK3Byb3BlcnR5OgorCisuLiBkYXRhOjogUHVyZVBhdGgucGFydHMKKworICAgQSB0dXBsZSBnaXZpbmcgYWNjZXNzIHRvIHRoZSBwYXRoJ3MgdmFyaW91cyBjb21wb25lbnRzOjoKKworICAgICAgPj4+IHAgPSBQdXJlUGF0aCgnL3Vzci9iaW4vcHl0aG9uMycpCisgICAgICA+Pj4gcC5wYXJ0cworICAgICAgKCcvJywgJ3VzcicsICdiaW4nLCAncHl0aG9uMycpCisKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzL1BTRicpCisgICAgICA+Pj4gcC5wYXJ0cworICAgICAgKCdjOlxcJywgJ1Byb2dyYW0gRmlsZXMnLCAnUFNGJykKKworICAgKG5vdGUgaG93IHRoZSBkcml2ZSBhbmQgbG9jYWwgcm9vdCBhcmUgcmVncm91cGVkIGluIGEgc2luZ2xlIHBhcnQpCisKKworTWV0aG9kcyBhbmQgcHJvcGVydGllcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitQdXJlIHBhdGhzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzOgorCisuLiBkYXRhOjogUHVyZVBhdGguZHJpdmUKKworICAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkcml2ZSBsZXR0ZXIgb3IgbmFtZSwgaWYgYW55OjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKS5kcml2ZQorICAgICAgJ2M6JworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnL1Byb2dyYW0gRmlsZXMvJykuZHJpdmUKKyAgICAgICcnCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpLmRyaXZlCisgICAgICAnJworCisgICBVTkMgc2hhcmVzIGFyZSBhbHNvIGNvbnNpZGVyZWQgZHJpdmVzOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnLy9ob3N0L3NoYXJlL2Zvby50eHQnKS5kcml2ZQorICAgICAgJ1xcXFxob3N0XFxzaGFyZScKKworLi4gZGF0YTo6IFB1cmVQYXRoLnJvb3QKKworICAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSAobG9jYWwgb3IgZ2xvYmFsKSByb290LCBpZiBhbnk6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzLycpLnJvb3QKKyAgICAgICdcXCcKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6UHJvZ3JhbSBGaWxlcy8nKS5yb290CisgICAgICAnJworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5yb290CisgICAgICAnLycKKworICAgVU5DIHNoYXJlcyBhbHdheXMgaGF2ZSBhIHJvb3Q6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvL2hvc3Qvc2hhcmUnKS5yb290CisgICAgICAnXFwnCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5hbmNob3IKKworICAgVGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGRyaXZlIGFuZCByb290OjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKS5hbmNob3IKKyAgICAgICdjOlxcJworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzpQcm9ncmFtIEZpbGVzLycpLmFuY2hvcgorICAgICAgJ2M6JworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5hbmNob3IKKyAgICAgICcvJworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnLy9ob3N0L3NoYXJlJykuYW5jaG9yCisgICAgICAnXFxcXGhvc3RcXHNoYXJlXFwnCisKKworLi4gZGF0YTo6IFB1cmVQYXRoLnBhcmVudHMKKworICAgQW4gaW1tdXRhYmxlIHNlcXVlbmNlIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGxvZ2ljYWwgYW5jZXN0b3JzIG9mCisgICB0aGUgcGF0aDo6CisKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9mb28vYmFyL3NldHVwLnB5JykKKyAgICAgID4+PiBwLnBhcmVudHNbMF0KKyAgICAgIFB1cmVXaW5kb3dzUGF0aCgnYzovZm9vL2JhcicpCisgICAgICA+Pj4gcC5wYXJlbnRzWzFdCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L2ZvbycpCisgICAgICA+Pj4gcC5wYXJlbnRzWzJdCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6LycpCisKKworLi4gZGF0YTo6IFB1cmVQYXRoLnBhcmVudAorCisgICBUaGUgbG9naWNhbCBwYXJlbnQgb2YgdGhlIHBhdGg6OgorCisgICAgICA+Pj4gcCA9IFB1cmVQb3NpeFBhdGgoJy9hL2IvYy9kJykKKyAgICAgID4+PiBwLnBhcmVudAorICAgICAgUHVyZVBvc2l4UGF0aCgnL2EvYi9jJykKKworICAgWW91IGNhbm5vdCBnbyBwYXN0IGFuIGFuY2hvciwgb3IgZW1wdHkgcGF0aDo6CisKKyAgICAgID4+PiBwID0gUHVyZVBvc2l4UGF0aCgnLycpCisgICAgICA+Pj4gcC5wYXJlbnQKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy8nKQorICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCcuJykKKyAgICAgID4+PiBwLnBhcmVudAorICAgICAgUHVyZVBvc2l4UGF0aCgnLicpCisKKyAgIC4uIG5vdGU6OgorICAgICAgVGhpcyBpcyBhIHB1cmVseSBsZXhpY2FsIG9wZXJhdGlvbiwgaGVuY2UgdGhlIGZvbGxvd2luZyBiZWhhdmlvdXI6OgorCisgICAgICAgICA+Pj4gcCA9IFB1cmVQb3NpeFBhdGgoJ2Zvby8uLicpCisgICAgICAgICA+Pj4gcC5wYXJlbnQKKyAgICAgICAgIFB1cmVQb3NpeFBhdGgoJ2ZvbycpCisKKyAgICAgIElmIHlvdSB3YW50IHRvIHdhbGsgYW4gYXJiaXRyYXJ5IGZpbGVzeXN0ZW0gcGF0aCB1cHdhcmRzLCBpdCBpcworICAgICAgcmVjb21tZW5kZWQgdG8gZmlyc3QgY2FsbCA6bWV0aDpgUGF0aC5yZXNvbHZlYCBzbyBhcyB0byByZXNvbHZlCisgICAgICBzeW1saW5rcyBhbmQgZWxpbWluYXRlIGAiLi4iYCBjb21wb25lbnRzLgorCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5uYW1lCisKKyAgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZmluYWwgcGF0aCBjb21wb25lbnQsIGV4Y2x1ZGluZyB0aGUgZHJpdmUgYW5kCisgICByb290LCBpZiBhbnk6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeS9zZXR1cC5weScpLm5hbWUKKyAgICAgICdzZXR1cC5weScKKworICAgVU5DIGRyaXZlIG5hbWVzIGFyZSBub3QgY29uc2lkZXJlZDo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vc29tZS9zaGFyZS9zZXR1cC5weScpLm5hbWUKKyAgICAgICdzZXR1cC5weScKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vc29tZS9zaGFyZScpLm5hbWUKKyAgICAgICcnCisKKworLi4gZGF0YTo6IFB1cmVQYXRoLnN1ZmZpeAorCisgICBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbmFsIGNvbXBvbmVudCwgaWYgYW55OjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkvc2V0dXAucHknKS5zdWZmaXgKKyAgICAgICcucHknCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeS50YXIuZ3onKS5zdWZmaXgKKyAgICAgICcuZ3onCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeScpLnN1ZmZpeAorICAgICAgJycKKworCisuLiBkYXRhOjogUHVyZVBhdGguc3VmZml4ZXMKKworICAgQSBsaXN0IG9mIHRoZSBwYXRoJ3MgZmlsZSBleHRlbnNpb25zOjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyLmdhcicpLnN1ZmZpeGVzCisgICAgICBbJy50YXInLCAnLmdhciddCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeS50YXIuZ3onKS5zdWZmaXhlcworICAgICAgWycudGFyJywgJy5neiddCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeScpLnN1ZmZpeGVzCisgICAgICBbXQorCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5zdGVtCisKKyAgIFRoZSBmaW5hbCBwYXRoIGNvbXBvbmVudCwgd2l0aG91dCBpdHMgc3VmZml4OjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyLmd6Jykuc3RlbQorICAgICAgJ2xpYnJhcnkudGFyJworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyJykuc3RlbQorICAgICAgJ2xpYnJhcnknCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeScpLnN0ZW0KKyAgICAgICdsaWJyYXJ5JworCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmFzX3Bvc2l4KCkKKworICAgUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoIHdpdGggZm9yd2FyZCBzbGFzaGVzIChgYC9gYCk6OgorCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzpcXHdpbmRvd3MnKQorICAgICAgPj4+IHN0cihwKQorICAgICAgJ2M6XFx3aW5kb3dzJworICAgICAgPj4+IHAuYXNfcG9zaXgoKQorICAgICAgJ2M6L3dpbmRvd3MnCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGguYXNfdXJpKCkKKworICAgUmVwcmVzZW50IHRoZSBwYXRoIGFzIGEgYGBmaWxlYGAgVVJJLiAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmCisgICB0aGUgcGF0aCBpc24ndCBhYnNvbHV0ZS4KKworICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCcvZXRjL3Bhc3N3ZCcpCisgICAgICA+Pj4gcC5hc191cmkoKQorICAgICAgJ2ZpbGU6Ly8vZXRjL3Bhc3N3ZCcKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9XaW5kb3dzJykKKyAgICAgID4+PiBwLmFzX3VyaSgpCisgICAgICAnZmlsZTovLy9jOi9XaW5kb3dzJworCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmlzX2Fic29sdXRlKCkKKworICAgUmV0dXJuIHdoZXRoZXIgdGhlIHBhdGggaXMgYWJzb2x1dGUgb3Igbm90LiAgQSBwYXRoIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUKKyAgIGlmIGl0IGhhcyBib3RoIGEgcm9vdCBhbmQgKGlmIHRoZSBmbGF2b3VyIGFsbG93cykgYSBkcml2ZTo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvYS9iJykuaXNfYWJzb2x1dGUoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ2EvYicpLmlzX2Fic29sdXRlKCkKKyAgICAgIEZhbHNlCisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L2EvYicpLmlzX2Fic29sdXRlKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy9hL2InKS5pc19hYnNvbHV0ZSgpCisgICAgICBGYWxzZQorICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzonKS5pc19hYnNvbHV0ZSgpCisgICAgICBGYWxzZQorICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnLy9zb21lL3NoYXJlJykuaXNfYWJzb2x1dGUoKQorICAgICAgVHJ1ZQorCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmlzX3Jlc2VydmVkKCkKKworICAgV2l0aCA6Y2xhc3M6YFB1cmVXaW5kb3dzUGF0aGAsIHJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBpcyBjb25zaWRlcmVkCisgICByZXNlcnZlZCB1bmRlciBXaW5kb3dzLCBgYEZhbHNlYGAgb3RoZXJ3aXNlLiAgV2l0aCA6Y2xhc3M6YFB1cmVQb3NpeFBhdGhgLAorICAgYGBGYWxzZWBgIGlzIGFsd2F5cyByZXR1cm5lZC4KKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnbnVsJykuaXNfcmVzZXJ2ZWQoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ251bCcpLmlzX3Jlc2VydmVkKCkKKyAgICAgIEZhbHNlCisKKyAgIEZpbGUgc3lzdGVtIGNhbGxzIG9uIHJlc2VydmVkIHBhdGhzIGNhbiBmYWlsIG15c3RlcmlvdXNseSBvciBoYXZlCisgICB1bmludGVuZGVkIGVmZmVjdHMuCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGguam9pbnBhdGgoKm90aGVyKQorCisgICBDYWxsaW5nIHRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gY29tYmluaW5nIHRoZSBwYXRoIHdpdGggZWFjaCBvZgorICAgdGhlICpvdGhlciogYXJndW1lbnRzIGluIHR1cm46OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpLmpvaW5wYXRoKCdwYXNzd2QnKQorICAgICAgUHVyZVBvc2l4UGF0aCgnL2V0Yy9wYXNzd2QnKQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5qb2lucGF0aChQdXJlUG9zaXhQYXRoKCdwYXNzd2QnKSkKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9ldGMvcGFzc3dkJykKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykuam9pbnBhdGgoJ2luaXQuZCcsICdhcGFjaGUyJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9ldGMvaW5pdC5kL2FwYWNoZTInKQorICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzonKS5qb2lucGF0aCgnL1Byb2dyYW0gRmlsZXMnKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzJykKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5tYXRjaChwYXR0ZXJuKQorCisgICBNYXRjaCB0aGlzIHBhdGggYWdhaW5zdCB0aGUgcHJvdmlkZWQgZ2xvYi1zdHlsZSBwYXR0ZXJuLiAgUmV0dXJuIGBgVHJ1ZWBgCisgICBpZiBtYXRjaGluZyBpcyBzdWNjZXNzZnVsLCBgYEZhbHNlYGAgb3RoZXJ3aXNlLgorCisgICBJZiAqcGF0dGVybiogaXMgcmVsYXRpdmUsIHRoZSBwYXRoIGNhbiBiZSBlaXRoZXIgcmVsYXRpdmUgb3IgYWJzb2x1dGUsCisgICBhbmQgbWF0Y2hpbmcgaXMgZG9uZSBmcm9tIHRoZSByaWdodDo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnYS9iLnB5JykubWF0Y2goJyoucHknKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFB1cmVQYXRoKCcvYS9iL2MucHknKS5tYXRjaCgnYi8qLnB5JykKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUGF0aCgnL2EvYi9jLnB5JykubWF0Y2goJ2EvKi5weScpCisgICAgICBGYWxzZQorCisgICBJZiAqcGF0dGVybiogaXMgYWJzb2x1dGUsIHRoZSBwYXRoIG11c3QgYmUgYWJzb2x1dGUsIGFuZCB0aGUgd2hvbGUgcGF0aAorICAgbXVzdCBtYXRjaDo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnL2EucHknKS5tYXRjaCgnLyoucHknKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFB1cmVQYXRoKCdhL2IucHknKS5tYXRjaCgnLyoucHknKQorICAgICAgRmFsc2UKKworICAgQXMgd2l0aCBvdGhlciBtZXRob2RzLCBjYXNlLXNlbnNpdGl2aXR5IGlzIG9ic2VydmVkOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYi5weScpLm1hdGNoKCcqLlBZJykKKyAgICAgIFRydWUKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5yZWxhdGl2ZV90bygqb3RoZXIpCisKKyAgIENvbXB1dGUgYSB2ZXJzaW9uIG9mIHRoaXMgcGF0aCByZWxhdGl2ZSB0byB0aGUgcGF0aCByZXByZXNlbnRlZCBieQorICAgKm90aGVyKi4gIElmIGl0J3MgaW1wb3NzaWJsZSwgVmFsdWVFcnJvciBpcyByYWlzZWQ6OgorCisgICAgICA+Pj4gcCA9IFB1cmVQb3NpeFBhdGgoJy9ldGMvcGFzc3dkJykKKyAgICAgID4+PiBwLnJlbGF0aXZlX3RvKCcvJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ2V0Yy9wYXNzd2QnKQorICAgICAgPj4+IHAucmVsYXRpdmVfdG8oJy9ldGMnKQorICAgICAgUHVyZVBvc2l4UGF0aCgncGFzc3dkJykKKyAgICAgID4+PiBwLnJlbGF0aXZlX3RvKCcvdXNyJykKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICAgICAgRmlsZSAicGF0aGxpYi5weSIsIGxpbmUgNjk0LCBpbiByZWxhdGl2ZV90bworICAgICAgICAgIC5mb3JtYXQoc3RyKHNlbGYpLCBzdHIoZm9ybWF0dGVkKSkpCisgICAgICBWYWx1ZUVycm9yOiAnL2V0Yy9wYXNzd2QnIGRvZXMgbm90IHN0YXJ0IHdpdGggJy91c3InCisKKworLi4gX2NvbmNyZXRlLXBhdGhzOgorCisKK0NvbmNyZXRlIHBhdGhzCistLS0tLS0tLS0tLS0tLQorCitDb25jcmV0ZSBwYXRocyBhcmUgc3ViY2xhc3NlcyBvZiB0aGUgcHVyZSBwYXRoIGNsYXNzZXMuICBJbiBhZGRpdGlvbiB0bworb3BlcmF0aW9ucyBwcm92aWRlZCBieSB0aGUgbGF0dGVyLCB0aGV5IGFsc28gcHJvdmlkZSBtZXRob2RzIHRvIGRvIHN5c3RlbQorY2FsbHMgb24gcGF0aCBvYmplY3RzLiAgVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gaW5zdGFudGlhdGUgY29uY3JldGUgcGF0aHM6CisKKy4uIGNsYXNzOjogUGF0aCgqcGF0aHNlZ21lbnRzKQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUHVyZVBhdGhgLCB0aGlzIGNsYXNzIHJlcHJlc2VudHMgY29uY3JldGUgcGF0aHMgb2YKKyAgIHRoZSBzeXN0ZW0ncyBwYXRoIGZsYXZvdXIgKGluc3RhbnRpYXRpbmcgaXQgY3JlYXRlcyBlaXRoZXIgYQorICAgOmNsYXNzOmBQb3NpeFBhdGhgIG9yIGEgOmNsYXNzOmBXaW5kb3dzUGF0aGApOjoKKworICAgICAgPj4+IFBhdGgoJ3NldHVwLnB5JykKKyAgICAgIFBvc2l4UGF0aCgnc2V0dXAucHknKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCisuLiBjbGFzczo6IFBvc2l4UGF0aCgqcGF0aHNlZ21lbnRzKQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUGF0aGAgYW5kIDpjbGFzczpgUHVyZVBvc2l4UGF0aGAsIHRoaXMgY2xhc3MKKyAgIHJlcHJlc2VudHMgY29uY3JldGUgbm9uLVdpbmRvd3MgZmlsZXN5c3RlbSBwYXRoczo6CisKKyAgICAgID4+PiBQb3NpeFBhdGgoJy9ldGMnKQorICAgICAgUG9zaXhQYXRoKCcvZXRjJykKKworICAgKnBhdGhzZWdtZW50cyogaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byA6Y2xhc3M6YFB1cmVQYXRoYC4KKworLi4gY2xhc3M6OiBXaW5kb3dzUGF0aCgqcGF0aHNlZ21lbnRzKQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUGF0aGAgYW5kIDpjbGFzczpgUHVyZVdpbmRvd3NQYXRoYCwgdGhpcyBjbGFzcworICAgcmVwcmVzZW50cyBjb25jcmV0ZSBXaW5kb3dzIGZpbGVzeXN0ZW0gcGF0aHM6OgorCisgICAgICA+Pj4gV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMvJykKKyAgICAgIFdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzJykKKworICAgKnBhdGhzZWdtZW50cyogaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byA6Y2xhc3M6YFB1cmVQYXRoYC4KKworWW91IGNhbiBvbmx5IGluc3RhbnRpYXRlIHRoZSBjbGFzcyBmbGF2b3VyIHRoYXQgY29ycmVzcG9uZHMgdG8geW91ciBzeXN0ZW0KKyhhbGxvd2luZyBzeXN0ZW0gY2FsbHMgb24gbm9uLWNvbXBhdGlibGUgcGF0aCBmbGF2b3VycyBjb3VsZCBsZWFkIHRvCitidWdzIG9yIGZhaWx1cmVzIGluIHlvdXIgYXBwbGljYXRpb24pOjoKKworICAgPj4+IGltcG9ydCBvcworICAgPj4+IG9zLm5hbWUKKyAgICdwb3NpeCcKKyAgID4+PiBQYXRoKCdzZXR1cC5weScpCisgICBQb3NpeFBhdGgoJ3NldHVwLnB5JykKKyAgID4+PiBQb3NpeFBhdGgoJ3NldHVwLnB5JykKKyAgIFBvc2l4UGF0aCgnc2V0dXAucHknKQorICAgPj4+IFdpbmRvd3NQYXRoKCdzZXR1cC5weScpCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgIEZpbGUgInBhdGhsaWIucHkiLCBsaW5lIDc5OCwgaW4gX19uZXdfXworICAgICAgICUgKGNscy5fX25hbWVfXywpKQorICAgTm90SW1wbGVtZW50ZWRFcnJvcjogY2Fubm90IGluc3RhbnRpYXRlICdXaW5kb3dzUGF0aCcgb24geW91ciBzeXN0ZW0KKworCitNZXRob2RzCiteXl5eXl5eCisKK0NvbmNyZXRlIHBhdGhzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBtZXRob2RzIGluIGFkZGl0aW9uIHRvIHB1cmUgcGF0aHMKK21ldGhvZHMuICBNYW55IG9mIHRoZXNlIG1ldGhvZHMgY2FuIHJhaXNlIGFuIDpleGM6YE9TRXJyb3JgIGlmIGEgc3lzdGVtCitjYWxsIGZhaWxzIChmb3IgZXhhbXBsZSBiZWNhdXNlIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3QpOgorCisuLiBjbGFzc21ldGhvZDo6IFBhdGguY3dkKCkKKworICAgUmV0dXJuIGEgbmV3IHBhdGggb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKGFzIHJldHVybmVkCisgICBieSA6ZnVuYzpgb3MuZ2V0Y3dkYCk6OgorCisgICAgICA+Pj4gUGF0aC5jd2QoKQorICAgICAgUG9zaXhQYXRoKCcvaG9tZS9hbnRvaW5lL3BhdGhsaWInKQorCisKKy4uIG1ldGhvZDo6IFBhdGguc3RhdCgpCisKKyAgIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhdGggKHNpbWlsYXJseSB0byA6ZnVuYzpgb3Muc3RhdGApLgorICAgVGhlIHJlc3VsdCBpcyBsb29rZWQgdXAgYXQgZWFjaCBjYWxsIHRvIHRoaXMgbWV0aG9kLgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ3NldHVwLnB5JykKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9zaXplCisgICAgICA5NTYKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9tdGltZQorICAgICAgMTMyNzg4MzU0Ny44NTI1NTQKKworCisuLiBtZXRob2Q6OiBQYXRoLmNobW9kKG1vZGUpCisKKyAgIENoYW5nZSB0aGUgZmlsZSBtb2RlIGFuZCBwZXJtaXNzaW9ucywgbGlrZSA6ZnVuYzpgb3MuY2htb2RgOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdzZXR1cC5weScpCisgICAgICA+Pj4gcC5zdGF0KCkuc3RfbW9kZQorICAgICAgMzMyNzcKKyAgICAgID4+PiBwLmNobW9kKDBvNDQ0KQorICAgICAgPj4+IHAuc3RhdCgpLnN0X21vZGUKKyAgICAgIDMzMDYwCisKKworLi4gbWV0aG9kOjogUGF0aC5leGlzdHMoKQorCisgICBXaGV0aGVyIHRoZSBwYXRoIHBvaW50cyB0byBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeTo6CisKKyAgICAgID4+PiBQYXRoKCcuJykuZXhpc3RzKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQYXRoKCdzZXR1cC5weScpLmV4aXN0cygpCisgICAgICBUcnVlCisgICAgICA+Pj4gUGF0aCgnL2V0YycpLmV4aXN0cygpCisgICAgICBUcnVlCisgICAgICA+Pj4gUGF0aCgnbm9uZXhpc3RlbnRmaWxlJykuZXhpc3RzKCkKKyAgICAgIEZhbHNlCisKKyAgIC4uIG5vdGU6OgorICAgICAgSWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltbGluaywgOm1ldGg6YGV4aXN0c2AgcmV0dXJucyB3aGV0aGVyIHRoZQorICAgICAgc3ltbGluayAqcG9pbnRzIHRvKiBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeS4KKworCisuLiBtZXRob2Q6OiBQYXRoLmdsb2IocGF0dGVybikKKworICAgR2xvYiB0aGUgZ2l2ZW4gKnBhdHRlcm4qIGluIHRoZSBkaXJlY3RvcnkgcmVwcmVzZW50ZWQgYnkgdGhpcyBwYXRoLAorICAgeWllbGRpbmcgYWxsIG1hdGNoaW5nIGZpbGVzIChvZiBhbnkga2luZCk6OgorCisgICAgICA+Pj4gc29ydGVkKFBhdGgoJy4nKS5nbG9iKCcqLnB5JykpCisgICAgICBbUG9zaXhQYXRoKCdwYXRobGliLnB5JyksIFBvc2l4UGF0aCgnc2V0dXAucHknKSwgUG9zaXhQYXRoKCd0ZXN0X3BhdGhsaWIucHknKV0KKyAgICAgID4+PiBzb3J0ZWQoUGF0aCgnLicpLmdsb2IoJyovKi5weScpKQorICAgICAgW1Bvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyldCisKKyAgIFRoZSAiYGAqKmBgIiBwYXR0ZXJuIG1lYW5zICJ0aGlzIGRpcmVjdG9yeSBhbmQgYWxsIHN1YmRpcmVjdG9yaWVzLAorICAgcmVjdXJzaXZlbHkiLiAgSW4gb3RoZXIgd29yZHMsIGl0IGVuYWJsZXMgcmVjdXJzaXZlIGdsb2JiaW5nOjoKKworICAgICAgPj4+IHNvcnRlZChQYXRoKCcuJykuZ2xvYignKiovKi5weScpKQorICAgICAgW1Bvc2l4UGF0aCgnYnVpbGQvbGliL3BhdGhsaWIucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ2RvY3MvY29uZi5weScpLAorICAgICAgIFBvc2l4UGF0aCgncGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnc2V0dXAucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpXQorCisgICAuLiBub3RlOjoKKyAgICAgIFVzaW5nIHRoZSAiYGAqKmBgIiBwYXR0ZXJuIGluIGxhcmdlIGRpcmVjdG9yeSB0cmVlcyBtYXkgY29uc3VtZQorICAgICAgYW4gaW5vcmRpbmF0ZSBhbW91bnQgb2YgdGltZS4KKworCisuLiBtZXRob2Q6OiBQYXRoLmdyb3VwKCkKKworICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBncm91cCBvd25pbmcgdGhlIGZpbGUuICA6ZXhjOmBLZXlFcnJvcmAgaXMgcmFpc2VkCisgICBpZiB0aGUgZmlsZSdzIGdpZCBpc24ndCBmb3VuZCBpbiB0aGUgc3lzdGVtIGRhdGFiYXNlLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfZGlyKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIGRpcmVjdG9yeSksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19maWxlKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHJlZ3VsYXIgZmlsZSAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIHJlZ3VsYXIgZmlsZSksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19zeW1saW5rKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWJvbGljIGxpbmssIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Q7IG90aGVyIGVycm9ycyAoc3VjaAorICAgYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfc29ja2V0KCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIFVuaXggc29ja2V0IChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgVW5peCBzb2NrZXQpLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfZmlmbygpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBGSUZPIChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgRklGTyksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19ibG9ja19kZXZpY2UoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgYmxvY2sgZGV2aWNlIChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgYmxvY2sgZGV2aWNlKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX2NoYXJfZGV2aWNlKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIGNoYXJhY3RlciBkZXZpY2UgKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBjaGFyYWN0ZXIgZGV2aWNlKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLml0ZXJkaXIoKQorCisgICBXaGVuIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSwgeWllbGQgcGF0aCBvYmplY3RzIG9mIHRoZSBkaXJlY3RvcnkKKyAgIGNvbnRlbnRzOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdkb2NzJykKKyAgICAgID4+PiBmb3IgY2hpbGQgaW4gcC5pdGVyZGlyKCk6IGNoaWxkCisgICAgICAuLi4KKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9fdGVtcGxhdGVzJykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9tYWtlLmJhdCcpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvaW5kZXgucnN0JykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9fYnVpbGQnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL19zdGF0aWMnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL01ha2VmaWxlJykKKworLi4gbWV0aG9kOjogUGF0aC5sY2htb2QobW9kZSkKKworICAgTGlrZSA6bWV0aDpgUGF0aC5jaG1vZGAgYnV0LCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1ib2xpYyBsaW5rLCB0aGUKKyAgIHN5bWJvbGljIGxpbmsncyBtb2RlIGlzIGNoYW5nZWQgcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzLgorCisKKy4uIG1ldGhvZDo6IFBhdGgubHN0YXQoKQorCisgICBMaWtlIDptZXRoOmBQYXRoLnN0YXRgIGJ1dCwgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltYm9saWMgbGluaywgcmV0dXJuCisgICB0aGUgc3ltYm9saWMgbGluaydzIGluZm9ybWF0aW9uIHJhdGhlciB0aGFuIGl0cyB0YXJnZXQncy4KKworCisuLiBtZXRob2Q6OiBQYXRoLm1rZGlyKG1vZGU9MG83NzcsIHBhcmVudHM9RmFsc2UpCisKKyAgIENyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgYXQgdGhpcyBnaXZlbiBwYXRoLiAgSWYgKm1vZGUqIGlzIGdpdmVuLCBpdCBpcworICAgY29tYmluZWQgd2l0aCB0aGUgcHJvY2VzcycgYGB1bWFza2BgIHZhbHVlIHRvIGRldGVybWluZSB0aGUgZmlsZSBtb2RlCisgICBhbmQgYWNjZXNzIGZsYWdzLiAgSWYgdGhlIHBhdGggYWxyZWFkeSBleGlzdHMsIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAKKyAgIGlzIHJhaXNlZC4KKworICAgSWYgKnBhcmVudHMqIGlzIHRydWUsIGFueSBtaXNzaW5nIHBhcmVudHMgb2YgdGhpcyBwYXRoIGFyZSBjcmVhdGVkCisgICBhcyBuZWVkZWQ7IHRoZXkgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCBwZXJtaXNzaW9ucyB3aXRob3V0IHRha2luZworICAgKm1vZGUqIGludG8gYWNjb3VudCAobWltaWNraW5nIHRoZSBQT1NJWCBgYG1rZGlyIC1wYGAgY29tbWFuZCkuCisKKyAgIElmICpwYXJlbnRzKiBpcyBmYWxzZSAodGhlIGRlZmF1bHQpLCBhIG1pc3NpbmcgcGFyZW50IHJhaXNlcworICAgOmV4YzpgRmlsZU5vdEZvdW5kRXJyb3JgLgorCisKKy4uIG1ldGhvZDo6IFBhdGgub3Blbihtb2RlPSdyJywgYnVmZmVyaW5nPS0xLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKQorCisgICBPcGVuIHRoZSBmaWxlIHBvaW50ZWQgdG8gYnkgdGhlIHBhdGgsIGxpa2UgdGhlIGJ1aWx0LWluIDpmdW5jOmBvcGVuYAorICAgZnVuY3Rpb24gZG9lczo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnc2V0dXAucHknKQorICAgICAgPj4+IHdpdGggcC5vcGVuKCkgYXMgZjoKKyAgICAgIC4uLiAgICAgZi5yZWFkbGluZSgpCisgICAgICAuLi4KKyAgICAgICcjIS91c3IvYmluL2VudiBweXRob24zXG4nCisKKworLi4gbWV0aG9kOjogUGF0aC5vd25lcigpCisKKyAgIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgdXNlciBvd25pbmcgdGhlIGZpbGUuICA6ZXhjOmBLZXlFcnJvcmAgaXMgcmFpc2VkCisgICBpZiB0aGUgZmlsZSdzIHVpZCBpc24ndCBmb3VuZCBpbiB0aGUgc3lzdGVtIGRhdGFiYXNlLgorCisKKy4uIG1ldGhvZDo6IFBhdGgucmVuYW1lKHRhcmdldCkKKworICAgUmVuYW1lIHRoaXMgZmlsZSBvciBkaXJlY3RvcnkgdG8gdGhlIGdpdmVuICp0YXJnZXQqLiAgKnRhcmdldCogY2FuIGJlCisgICBlaXRoZXIgYSBzdHJpbmcgb3IgYW5vdGhlciBwYXRoIG9iamVjdDo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnZm9vJykKKyAgICAgID4+PiBwLm9wZW4oJ3cnKS53cml0ZSgnc29tZSB0ZXh0JykKKyAgICAgIDkKKyAgICAgID4+PiB0YXJnZXQgPSBQYXRoKCdiYXInKQorICAgICAgPj4+IHAucmVuYW1lKHRhcmdldCkKKyAgICAgID4+PiB0YXJnZXQub3BlbigpLnJlYWQoKQorICAgICAgJ3NvbWUgdGV4dCcKKworCisuLiBtZXRob2Q6OiBQYXRoLnJlcGxhY2UodGFyZ2V0KQorCisgICBSZW5hbWUgdGhpcyBmaWxlIG9yIGRpcmVjdG9yeSB0byB0aGUgZ2l2ZW4gKnRhcmdldCouICBJZiAqdGFyZ2V0KiBwb2ludHMKKyAgIHRvIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5LCBpdCB3aWxsIGJlIHVuY29uZGl0aW9uYWxseSByZXBsYWNlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLnJlc29sdmUoKQorCisgICBNYWtlIHRoZSBwYXRoIGFic29sdXRlLCByZXNvbHZpbmcgYW55IHN5bWxpbmtzLiAgQSBuZXcgcGF0aCBvYmplY3QgaXMKKyAgIHJldHVybmVkOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCkKKyAgICAgID4+PiBwCisgICAgICBQb3NpeFBhdGgoJy4nKQorICAgICAgPj4+IHAucmVzb2x2ZSgpCisgICAgICBQb3NpeFBhdGgoJy9ob21lL2FudG9pbmUvcGF0aGxpYicpCisKKyAgIGAiLi4iYCBjb21wb25lbnRzIGFyZSBhbHNvIGVsaW1pbmF0ZWQgKHRoaXMgaXMgdGhlIG9ubHkgbWV0aG9kIHRvIGRvIHNvKTo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnZG9jcy8uLi9zZXR1cC5weScpCisgICAgICA+Pj4gcC5yZXNvbHZlKCkKKyAgICAgIFBvc2l4UGF0aCgnL2hvbWUvYW50b2luZS9wYXRobGliL3NldHVwLnB5JykKKworICAgSWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCwgOmV4YzpgRmlsZU5vdEZvdW5kRXJyb3JgIGlzIHJhaXNlZC4gIElmIGFuCisgICBpbmZpbml0ZSBsb29wIGlzIGVuY291bnRlcmVkIGFsb25nIHRoZSByZXNvbHV0aW9uIHBhdGgsCisgICA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLnJnbG9iKHBhdHRlcm4pCisKKyAgIFRoaXMgaXMgbGlrZSBjYWxsaW5nIDptZXRoOmBnbG9iYCB3aXRoICJgYCoqYGAiIGFkZGVkIGluIGZyb250IG9mIHRoZQorICAgZ2l2ZW4gKnBhdHRlcm4qOgorCisgICAgICA+Pj4gc29ydGVkKFBhdGgoKS5yZ2xvYigiKi5weSIpKQorICAgICAgW1Bvc2l4UGF0aCgnYnVpbGQvbGliL3BhdGhsaWIucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ2RvY3MvY29uZi5weScpLAorICAgICAgIFBvc2l4UGF0aCgncGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnc2V0dXAucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpXQorCisKKy4uIG1ldGhvZDo6IFBhdGgucm1kaXIoKQorCisgICBSZW1vdmUgdGhpcyBkaXJlY3RvcnkuICBUaGUgZGlyZWN0b3J5IG11c3QgYmUgZW1wdHkuCisKKworLi4gbWV0aG9kOjogUGF0aC5zeW1saW5rX3RvKHRhcmdldCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1GYWxzZSkKKworICAgTWFrZSB0aGlzIHBhdGggYSBzeW1ib2xpYyBsaW5rIHRvICp0YXJnZXQqLiAgVW5kZXIgV2luZG93cywKKyAgICp0YXJnZXRfaXNfZGlyZWN0b3J5KiBtdXN0IGJlIHRydWUgKGRlZmF1bHQgYGBGYWxzZWBgKSBpZiB0aGUgbGluaydzIHRhcmdldAorICAgaXMgYSBkaXJlY3RvcnkuICBVbmRlciBQT1NJWCwgKnRhcmdldF9pc19kaXJlY3RvcnkqJ3MgdmFsdWUgaXMgaWdub3JlZC4KKworICAgICAgPj4+IHAgPSBQYXRoKCdteWxpbmsnKQorICAgICAgPj4+IHAuc3ltbGlua190bygnc2V0dXAucHknKQorICAgICAgPj4+IHAucmVzb2x2ZSgpCisgICAgICBQb3NpeFBhdGgoJy9ob21lL2FudG9pbmUvcGF0aGxpYi9zZXR1cC5weScpCisgICAgICA+Pj4gcC5zdGF0KCkuc3Rfc2l6ZQorICAgICAgOTU2CisgICAgICA+Pj4gcC5sc3RhdCgpLnN0X3NpemUKKyAgICAgIDgKKworICAgLi4gbm90ZTo6CisgICAgICBUaGUgb3JkZXIgb2YgYXJndW1lbnRzIChsaW5rLCB0YXJnZXQpIGlzIHRoZSByZXZlcnNlCisgICAgICBvZiA6ZnVuYzpgb3Muc3ltbGlua2Ancy4KKworCisuLiBtZXRob2Q6OiBQYXRoLnRvdWNoKG1vZGU9MG83NzcsIGV4aXN0X29rPVRydWUpCisKKyAgIENyZWF0ZSBhIGZpbGUgYXQgdGhpcyBnaXZlbiBwYXRoLiAgSWYgKm1vZGUqIGlzIGdpdmVuLCBpdCBpcyBjb21iaW5lZAorICAgd2l0aCB0aGUgcHJvY2VzcycgYGB1bWFza2BgIHZhbHVlIHRvIGRldGVybWluZSB0aGUgZmlsZSBtb2RlIGFuZCBhY2Nlc3MKKyAgIGZsYWdzLiAgSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyBpZiAqZXhpc3Rfb2sqCisgICBpcyB0cnVlIChhbmQgaXRzIG1vZGlmaWNhdGlvbiB0aW1lIGlzIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgdGltZSksCisgICBvdGhlcndpc2UgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBpcyByYWlzZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC51bmxpbmsoKQorCisgICBSZW1vdmUgdGhpcyBmaWxlIG9yIHN5bWJvbGljIGxpbmsuICBJZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBkaXJlY3RvcnksCisgICB1c2UgOmZ1bmM6YFBhdGgucm1kaXJgIGluc3RlYWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wZGIucnN0IGIvRG9jL2xpYnJhcnkvcGRiLnJzdAppbmRleCBmNGUzN2FjLi40OGE4YTZiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wZGIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BkYi5yc3QKQEAgLTQxLDcgKzQxLDcgQEAKIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICBUYWItY29tcGxldGlvbiB2aWEgdGhlIDptb2Q6YHJlYWRsaW5lYCBtb2R1bGUgaXMgYXZhaWxhYmxlIGZvciBjb21tYW5kcyBhbmQKICAgIGNvbW1hbmQgYXJndW1lbnRzLCBlLmcuIHRoZSBjdXJyZW50IGdsb2JhbCBhbmQgbG9jYWwgbmFtZXMgYXJlIG9mZmVyZWQgYXMKLSAgIGFyZ3VtZW50cyBvZiB0aGUgYGBwcmludGBgIGNvbW1hbmQuCisgICBhcmd1bWVudHMgb2YgdGhlIGBgcGBgIGNvbW1hbmQuCiAKIDpmaWxlOmBwZGIucHlgIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy4gIEZvcgogZXhhbXBsZTo6CkBAIC0zMDksNyArMzA5LDcgQEAKICAgIGBgZW5kYGAgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kcy4gQW4gZXhhbXBsZTo6CiAKICAgICAgIChQZGIpIGNvbW1hbmRzIDEKLSAgICAgIChjb20pIHByaW50IHNvbWVfdmFyaWFibGUKKyAgICAgIChjb20pIHAgc29tZV92YXJpYWJsZQogICAgICAgKGNvbSkgZW5kCiAgICAgICAoUGRiKQogCkBAIC00MDMsMTMgKzQwMywxOSBAQAogCiAgICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4KIAotLi4gcGRiY29tbWFuZDo6IHAocmludCkgZXhwcmVzc2lvbgorLi4gcGRiY29tbWFuZDo6IHAgZXhwcmVzc2lvbgogCiAgICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIGluIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHByaW50IGl0cyB2YWx1ZS4KIAorICAgLi4gbm90ZTo6CisKKyAgICAgIGBgcHJpbnQoKWBgIGNhbiBhbHNvIGJlIHVzZWQsIGJ1dCBpcyBub3QgYSBkZWJ1Z2dlciBjb21tYW5kIC0tLSB0aGlzIGV4ZWN1dGVzIHRoZQorICAgICAgUHl0aG9uIDpmdW5jOmBwcmludGAgZnVuY3Rpb24uCisKKwogLi4gcGRiY29tbWFuZDo6IHBwIGV4cHJlc3Npb24KIAotICAgTGlrZSB0aGUgOnBkYmNtZDpgcHJpbnRgIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMKKyAgIExpa2UgdGhlIDpwZGJjbWQ6YHBgIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMKICAgIHByZXR0eS1wcmludGVkIHVzaW5nIHRoZSA6bW9kOmBwcHJpbnRgIG1vZHVsZS4KIAogLi4gcGRiY29tbWFuZDo6IHdoYXRpcyBleHByZXNzaW9uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9waWNrbGUucnN0IGIvRG9jL2xpYnJhcnkvcGlja2xlLnJzdAppbmRleCAyNzNmYjM0Li5jZTU0NjdmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9waWNrbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKQEAgLTk0LDYgKzk0LDkgQEAKICAgIFRoZSA6bW9kOmBqc29uYCBtb2R1bGU6IGEgc3RhbmRhcmQgbGlicmFyeSBtb2R1bGUgYWxsb3dpbmcgSlNPTgogICAgc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgogCisKKy4uIF9waWNrbGUtcHJvdG9jb2xzOgorCiBEYXRhIHN0cmVhbSBmb3JtYXQKIC0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTMsNyArMTE2LDkgQEAKIGdlbmVyYXRlZCBieSA6bW9kOmBwaWNrbGVgLiAgOm1vZDpgcGlja2xldG9vbHNgIHNvdXJjZSBjb2RlIGhhcyBleHRlbnNpdmUKIGNvbW1lbnRzIGFib3V0IG9wY29kZXMgdXNlZCBieSBwaWNrbGUgcHJvdG9jb2xzLgogCi1UaGVyZSBhcmUgY3VycmVudGx5IDQgZGlmZmVyZW50IHByb3RvY29scyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcGlja2xpbmcuCitUaGVyZSBhcmUgY3VycmVudGx5IDUgZGlmZmVyZW50IHByb3RvY29scyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcGlja2xpbmcuCitUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZAordG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLgogCiAqIFByb3RvY29sIHZlcnNpb24gMCBpcyB0aGUgb3JpZ2luYWwgImh1bWFuLXJlYWRhYmxlIiBwcm90b2NvbCBhbmQgaXMKICAgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbi4KQEAgLTEyNSwxMCArMTMwLDE1IEBACiAgIGVmZmljaWVudCBwaWNrbGluZyBvZiA6dGVybTpgbmV3LXN0eWxlIGNsYXNzYFxlcy4gIFJlZmVyIHRvIDpwZXA6YDMwN2AgZm9yCiAgIGluZm9ybWF0aW9uIGFib3V0IGltcHJvdmVtZW50cyBicm91Z2h0IGJ5IHByb3RvY29sIDIuCiAKLSogUHJvdG9jb2wgdmVyc2lvbiAzIHdhcyBhZGRlZCBpbiBQeXRob24gMy4gIEl0IGhhcyBleHBsaWNpdCBzdXBwb3J0IGZvcgorKiBQcm90b2NvbCB2ZXJzaW9uIDMgd2FzIGFkZGVkIGluIFB5dGhvbiAzLjAuICBJdCBoYXMgZXhwbGljaXQgc3VwcG9ydCBmb3IKICAgOmNsYXNzOmBieXRlc2Agb2JqZWN0cyBhbmQgY2Fubm90IGJlIHVucGlja2xlZCBieSBQeXRob24gMi54LiAgVGhpcyBpcwotICB0aGUgZGVmYXVsdCBhcyB3ZWxsIGFzIHRoZSBjdXJyZW50IHJlY29tbWVuZGVkIHByb3RvY29sOyB1c2UgaXQgd2hlbmV2ZXIKLSAgcG9zc2libGUuCisgIHRoZSBkZWZhdWx0IHByb3RvY29sLCBhbmQgdGhlIHJlY29tbWVuZGVkIHByb3RvY29sIHdoZW4gY29tcGF0aWJpbGl0eSB3aXRoCisgIG90aGVyIFB5dGhvbiAzIHZlcnNpb25zIGlzIHJlcXVpcmVkLgorCisqIFByb3RvY29sIHZlcnNpb24gNCB3YXMgYWRkZWQgaW4gUHl0aG9uIDMuNC4gIEl0IGFkZHMgc3VwcG9ydCBmb3IgdmVyeSBsYXJnZQorICBvYmplY3RzLCBwaWNrbGluZyBtb3JlIGtpbmRzIG9mIG9iamVjdHMsIGFuZCBzb21lIGRhdGEgZm9ybWF0CisgIG9wdGltaXphdGlvbnMuICBSZWZlciB0byA6cGVwOmAzMTU0YCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaW1wcm92ZW1lbnRzCisgIGJyb3VnaHQgYnkgcHJvdG9jb2wgNC4KIAogLi4gbm90ZTo6CiAgICBTZXJpYWxpemF0aW9uIGlzIGEgbW9yZSBwcmltaXRpdmUgbm90aW9uIHRoYW4gcGVyc2lzdGVuY2U7IGFsdGhvdWdoCkBAIC0xNTYsMTMgKzE2NiwxNiBAQAogCiAuLiBkYXRhOjogSElHSEVTVF9QUk9UT0NPTAogCi0gICBUaGUgaGlnaGVzdCBwcm90b2NvbCB2ZXJzaW9uIGF2YWlsYWJsZS4gIFRoaXMgdmFsdWUgY2FuIGJlIHBhc3NlZCBhcyBhCi0gICAqcHJvdG9jb2wqIHZhbHVlLgorICAgQW4gaW50ZWdlciwgdGhlIGhpZ2hlc3QgOnJlZjpgcHJvdG9jb2wgdmVyc2lvbiA8cGlja2xlLXByb3RvY29scz5gCisgICBhdmFpbGFibGUuICBUaGlzIHZhbHVlIGNhbiBiZSBwYXNzZWQgYXMgYSAqcHJvdG9jb2wqIHZhbHVlIHRvIGZ1bmN0aW9ucworICAgOmZ1bmM6YGR1bXBgIGFuZCA6ZnVuYzpgZHVtcHNgIGFzIHdlbGwgYXMgdGhlIDpjbGFzczpgUGlja2xlcmAKKyAgIGNvbnN0cnVjdG9yLgogCiAuLiBkYXRhOjogREVGQVVMVF9QUk9UT0NPTAogCi0gICBUaGUgZGVmYXVsdCBwcm90b2NvbCB1c2VkIGZvciBwaWNrbGluZy4gIE1heSBiZSBsZXNzIHRoYW4gSElHSEVTVF9QUk9UT0NPTC4KLSAgIEN1cnJlbnRseSB0aGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzLCBhIG5ldyBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC4KKyAgIEFuIGludGVnZXIsIHRoZSBkZWZhdWx0IDpyZWY6YHByb3RvY29sIHZlcnNpb24gPHBpY2tsZS1wcm90b2NvbHM+YCB1c2VkCisgICBmb3IgcGlja2xpbmcuICBNYXkgYmUgbGVzcyB0aGFuIDpkYXRhOmBISUdIRVNUX1BST1RPQ09MYC4gIEN1cnJlbnRseSB0aGUKKyAgIGRlZmF1bHQgcHJvdG9jb2wgaXMgMywgYSBuZXcgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLgogCiAKIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byBtYWtlIHRoZSBwaWNrbGluZwpAQCAtMTczLDEzICsxODYsMTAgQEAKICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiAqb2JqKiB0byB0aGUgb3BlbiA6dGVybTpgZmlsZSBvYmplY3RgICpmaWxlKi4KICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgYFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKWBgLgogCi0gICBUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sOwotICAgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0IHByb3RvY29sIGlzIDM7IGEKLSAgIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC4KLQotICAgU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbCB2ZXJzaW9uCi0gICBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YKLSAgIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLgorICAgVGhlIG9wdGlvbmFsICpwcm90b2NvbCogYXJndW1lbnQsIGFuIGludGVnZXIsIHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZQorICAgdGhlIGdpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwIHRvIDpkYXRhOmBISUdIRVNUX1BST1RPQ09MYC4KKyAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIDpkYXRhOmBERUZBVUxUX1BST1RPQ09MYC4gIElmIGEgbmVnYXRpdmUKKyAgIG51bWJlciBpcyBzcGVjaWZpZWQsIDpkYXRhOmBISUdIRVNUX1BST1RPQ09MYCBpcyBzZWxlY3RlZC4KIAogICAgVGhlICpmaWxlKiBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgYnl0ZXMKICAgIGFyZ3VtZW50LiAgSXQgY2FuIHRodXMgYmUgYW4gb24tZGlzayBmaWxlIG9wZW5lZCBmb3IgYmluYXJ5IHdyaXRpbmcsIGEKQEAgLTE4Nyw2NCArMTk3LDU3IEBACiAgICBpbnRlcmZhY2UuCiAKICAgIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSBhbmQgKnByb3RvY29sKiBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvCi0gICBtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCwKLSAgIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguCisgICBtYXAgdGhlIG5ldyBQeXRob24gMyBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLCBzbworICAgdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIuCiAKIC4uIGZ1bmN0aW9uOjogZHVtcHMob2JqLCBwcm90b2NvbD1Ob25lLCBcKiwgZml4X2ltcG9ydHM9VHJ1ZSkKIAotICAgUmV0dXJuIHRoZSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgYXMgYSA6Y2xhc3M6YGJ5dGVzYAotICAgb2JqZWN0LCBpbnN0ZWFkIG9mIHdyaXRpbmcgaXQgdG8gYSBmaWxlLgorICAgUmV0dXJuIHRoZSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgYXMgYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QsCisgICBpbnN0ZWFkIG9mIHdyaXRpbmcgaXQgdG8gYSBmaWxlLgogCi0gICBUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sOwotICAgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0IHByb3RvY29sIGlzIDM7IGEKLSAgIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC4KLQotICAgU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbCB2ZXJzaW9uCi0gICBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YKLSAgIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLgotCi0gICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUgYW5kICpwcm90b2NvbCogaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0bwotICAgbWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLngsCi0gICBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LgorICAgQXJndW1lbnRzICpwcm90b2NvbCogYW5kICpmaXhfaW1wb3J0cyogaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCisgICA6ZnVuYzpgZHVtcGAuCiAKIC4uIGZ1bmN0aW9uOjogbG9hZChmaWxlLCBcKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKQogCi0gICBSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiA6dGVybTpgZmlsZSBvYmplY3RgICpmaWxlKgotICAgYW5kIHJldHVybiB0aGUgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluLiAgVGhpcyBpcwotICAgZXF1aXZhbGVudCB0byBgYFVucGlja2xlcihmaWxlKS5sb2FkKClgYC4KKyAgIFJlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIDp0ZXJtOmBmaWxlIG9iamVjdGAKKyAgICpmaWxlKiBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkgc3BlY2lmaWVkIHRoZXJlaW4uCisgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBVbnBpY2tsZXIoZmlsZSkubG9hZCgpYGAuCiAKLSAgIFRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8gcHJvdG9jb2wKLSAgIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlCi0gICBpZ25vcmVkLgorICAgVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubworICAgcHJvdG9jb2wgYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3QncworICAgcmVwcmVzZW50YXRpb24gYXJlIGlnbm9yZWQuCiAKICAgIFRoZSBhcmd1bWVudCAqZmlsZSogbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlcyBhbgogICAgaW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdCByZXF1aXJlcyBubyBhcmd1bWVudHMuICBCb3RoCi0gICBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYW4gb24tZGlzayBmaWxlIG9wZW5lZAotICAgZm9yIGJpbmFyeSByZWFkaW5nLCBhIDpjbGFzczpgaW8uQnl0ZXNJT2Agb2JqZWN0LCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdAorICAgbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGFuIG9uLWRpc2sgZmlsZSBvcGVuZWQgZm9yCisgICBiaW5hcnkgcmVhZGluZywgYSA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QKICAgIHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuCiAKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiwKICAgIHdoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJpbGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtIGdlbmVyYXRlZAotICAgYnkgUHl0aG9uIDIueC4gIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkCi0gICBQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlICplbmNvZGluZyogYW5kCisgICBieSBQeXRob24gMi4gIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkCisgICBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMuICBUaGUgKmVuY29kaW5nKiBhbmQKICAgICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbgotICAgMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuCisgICAyOyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4KKyAgIGJlICdieXRlcycgdG8gcmVhZCB0aGVzZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCiAKIC4uIGZ1bmN0aW9uOjogbG9hZHMoYnl0ZXNfb2JqZWN0LCBcKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKQogCiAgICBSZWFkIGEgcGlja2xlZCBvYmplY3QgaGllcmFyY2h5IGZyb20gYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgYW5kIHJldHVybiB0aGUKICAgIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpbgogCi0gICBUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vIHByb3RvY29sCi0gICBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzIHJlcHJlc2VudGF0aW9uIGFyZQotICAgaWdub3JlZC4KKyAgIFRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KKyAgIHByb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKKyAgIHJlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgogCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCiAgICB3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWQKLSAgIGJ5IFB5dGhvbiAyLnguICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAotICAgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSAqZW5jb2RpbmcqIGFuZAorICAgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAorICAgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlICplbmNvZGluZyogYW5kCiAgICAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24KLSAgIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorICAgMjsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuCisgICBiZSAnYnl0ZXMnIHRvIHJlYWQgdGhlc2UgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLgogCiAKIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBkZWZpbmVzIHRocmVlIGV4Y2VwdGlvbnM6CkBAIC0yNzksMjEgKzI4MiwxOSBAQAogCiAgICBUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHdyaXRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCiAKLSAgIFRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2w7Ci0gICBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYQotICAgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLgotCi0gICBTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24KLSAgIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZgotICAgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCisgICBUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCwgYW4gaW50ZWdlciwgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlCisgICB0aGUgZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAgdG8gOmRhdGE6YEhJR0hFU1RfUFJPVE9DT0xgLgorICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgOmRhdGE6YERFRkFVTFRfUFJPVE9DT0xgLiAgSWYgYSBuZWdhdGl2ZQorICAgbnVtYmVyIGlzIHNwZWNpZmllZCwgOmRhdGE6YEhJR0hFU1RfUFJPVE9DT0xgIGlzIHNlbGVjdGVkLgogCiAgICBUaGUgKmZpbGUqIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZSBieXRlcwogICAgYXJndW1lbnQuICBJdCBjYW4gdGh1cyBiZSBhbiBvbi1kaXNrIGZpbGUgb3BlbmVkIGZvciBiaW5hcnkgd3JpdGluZywgYQotICAgOmNsYXNzOmBpby5CeXRlc0lPYCBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KKyAgIDpjbGFzczpgaW8uQnl0ZXNJT2AgaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcworICAgaW50ZXJmYWNlLgogCiAgICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUgYW5kICpwcm90b2NvbCogaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0bwotICAgbWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLngsCi0gICBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LgorICAgbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMiwgc28KKyAgIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLgogCiAgICAuLiBtZXRob2Q6OiBkdW1wKG9iaikKIApAQCAtMzU1LDE2ICszNTYsMTcgQEAKIAogICAgVGhlIGFyZ3VtZW50ICpmaWxlKiBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0IHRha2VzIGFuCiAgICBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0IHJlcXVpcmVzIG5vIGFyZ3VtZW50cy4gIEJvdGgKLSAgIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqIGNhbiBiZSBhbiBvbi1kaXNrIGZpbGUgb2JqZWN0IG9wZW5lZAotICAgZm9yIGJpbmFyeSByZWFkaW5nLCBhIDpjbGFzczpgaW8uQnl0ZXNJT2Agb2JqZWN0LCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdAotICAgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KKyAgIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqIGNhbiBiZSBhbiBvbi1kaXNrIGZpbGUgb2JqZWN0CisgICBvcGVuZWQgZm9yIGJpbmFyeSByZWFkaW5nLCBhIDpjbGFzczpgaW8uQnl0ZXNJT2Agb2JqZWN0LCBvciBhbnkgb3RoZXIKKyAgIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KIAogICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLAogICAgd2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW0gZ2VuZXJhdGVkCi0gICBieSBQeXRob24gMi54LiAgSWYgKmZpeF9pbXBvcnRzKiBpcyB0cnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGQKLSAgIFB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGUgKmVuY29kaW5nKiBhbmQKKyAgIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyB0cnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGQKKyAgIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZSAqZW5jb2RpbmcqIGFuZAogICAgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uCi0gICAyLng7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS4KKyAgIDI7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS4gIFRoZSAqZW5jb2RpbmcqIGNhbgorICAgYmUgJ2J5dGVzJyB0byByZWFkIHRoZXNlIMOfOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLgogCiAgICAuLiBtZXRob2Q6OiBsb2FkKCkKIApAQCAtNDA5LDcgKzQxMSw4IEBACiAKICogdHVwbGVzLCBsaXN0cywgc2V0cywgYW5kIGRpY3Rpb25hcmllcyBjb250YWluaW5nIG9ubHkgcGlja2xhYmxlIG9iamVjdHMKIAotKiBmdW5jdGlvbnMgZGVmaW5lZCBhdCB0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlCisqIGZ1bmN0aW9ucyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUgKHVzaW5nIDprZXl3b3JkOmBkZWZgLCBub3QKKyAgOmtleXdvcmQ6YGxhbWJkYWApCiAKICogYnVpbHQtaW4gZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIG1vZHVsZQogCkBAIC00MjcsNyArNDMwLDcgQEAKIDpmdW5jOmBzeXMuc2V0cmVjdXJzaW9ubGltaXRgLgogCiBOb3RlIHRoYXQgZnVuY3Rpb25zIChidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkKSBhcmUgcGlja2xlZCBieSAiZnVsbHkgcXVhbGlmaWVkIgotbmFtZSByZWZlcmVuY2UsIG5vdCBieSB2YWx1ZS4gIFRoaXMgbWVhbnMgdGhhdCBvbmx5IHRoZSBmdW5jdGlvbiBuYW1lIGlzCituYW1lIHJlZmVyZW5jZSwgbm90IGJ5IHZhbHVlLiBbI11fICBUaGlzIG1lYW5zIHRoYXQgb25seSB0aGUgZnVuY3Rpb24gbmFtZSBpcwogcGlja2xlZCwgYWxvbmcgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGluLiAgTmVpdGhlcgogdGhlIGZ1bmN0aW9uJ3MgY29kZSwgbm9yIGFueSBvZiBpdHMgZnVuY3Rpb24gYXR0cmlidXRlcyBhcmUgcGlja2xlZC4gIFRodXMgdGhlCiBkZWZpbmluZyBtb2R1bGUgbXVzdCBiZSBpbXBvcnRhYmxlIGluIHRoZSB1bnBpY2tsaW5nIGVudmlyb25tZW50LCBhbmQgdGhlIG1vZHVsZQpAQCAtNDgzLDEyICs0ODYsMjkgQEAKIENsYXNzZXMgY2FuIGFsdGVyIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBieSBwcm92aWRpbmcgb25lIG9yIHNldmVyYWwgc3BlY2lhbAogbWV0aG9kczoKIAorLi4gbWV0aG9kOjogb2JqZWN0Ll9fZ2V0bmV3YXJnc19leF9fKCkKKworICAgSW4gcHJvdG9jb2xzIDQgYW5kIG5ld2VyLCBjbGFzc2VzIHRoYXQgaW1wbGVtZW50cyB0aGUKKyAgIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AgbWV0aG9kIGNhbiBkaWN0YXRlIHRoZSB2YWx1ZXMgcGFzc2VkIHRvIHRoZQorICAgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB1cG9uIHVucGlja2xpbmcuICBUaGUgbWV0aG9kIG11c3QgcmV0dXJuIGEgcGFpcgorICAgYGAoYXJncywga3dhcmdzKWBgIHdoZXJlICphcmdzKiBpcyBhIHR1cGxlIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzCisgICBhbmQgKmt3YXJncyogYSBkaWN0aW9uYXJ5IG9mIG5hbWVkIGFyZ3VtZW50cyBmb3IgY29uc3RydWN0aW5nIHRoZQorICAgb2JqZWN0LiAgVGhvc2Ugd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDptZXRoOmBfX25ld19fYCBtZXRob2QgdXBvbgorICAgdW5waWNrbGluZy4KKworICAgWW91IHNob3VsZCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgaWYgdGhlIDptZXRoOmBfX25ld19fYCBtZXRob2Qgb2YgeW91cgorICAgY2xhc3MgcmVxdWlyZXMga2V5d29yZC1vbmx5IGFyZ3VtZW50cy4gIE90aGVyd2lzZSwgaXQgaXMgcmVjb21tZW5kZWQgZm9yCisgICBjb21wYXRpYmlsaXR5IHRvIGltcGxlbWVudCA6bWV0aDpgX19nZXRuZXdhcmdzX19gLgorCisKIC4uIG1ldGhvZDo6IG9iamVjdC5fX2dldG5ld2FyZ3NfXygpCiAKLSAgIEluIHByb3RvY29sIDIgYW5kIG5ld2VyLCBjbGFzc2VzIHRoYXQgaW1wbGVtZW50cyB0aGUgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYAotICAgbWV0aG9kIGNhbiBkaWN0YXRlIHRoZSB2YWx1ZXMgcGFzc2VkIHRvIHRoZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHVwb24KLSAgIHVucGlja2xpbmcuICBUaGlzIGlzIG9mdGVuIG5lZWRlZCBmb3IgY2xhc3NlcyB3aG9zZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kCi0gICByZXF1aXJlcyBhcmd1bWVudHMuCisgICBUaGlzIG1ldGhvZCBzZXJ2ZSBhIHNpbWlsYXIgcHVycG9zZSBhcyA6bWV0aDpgX19nZXRuZXdhcmdzX2V4X19gIGJ1dAorICAgZm9yIHByb3RvY29scyAyIGFuZCBuZXdlci4gIEl0IG11c3QgcmV0dXJuIGEgdHVwbGUgb2YgYXJndW1lbnRzIGBhcmdzYAorICAgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDptZXRoOmBfX25ld19fYCBtZXRob2QgdXBvbiB1bnBpY2tsaW5nLgorCisgICBJbiBwcm90b2NvbHMgNCBhbmQgbmV3ZXIsIDptZXRoOmBfX2dldG5ld2FyZ3NfX2Agd2lsbCBub3QgYmUgY2FsbGVkIGlmCisgICA6bWV0aDpgX19nZXRuZXdhcmdzX2V4X19gIGlzIGRlZmluZWQuCiAKIAogLi4gbWV0aG9kOjogb2JqZWN0Ll9fZ2V0c3RhdGVfXygpCkBAIC01MjAsMTAgKzU0MCwxMCBAQAogCiAgICBBdCB1bnBpY2tsaW5nIHRpbWUsIHNvbWUgbWV0aG9kcyBsaWtlIDptZXRoOmBfX2dldGF0dHJfX2AsCiAgICA6bWV0aDpgX19nZXRhdHRyaWJ1dGVfX2AsIG9yIDptZXRoOmBfX3NldGF0dHJfX2AgbWF5IGJlIGNhbGxlZCB1cG9uIHRoZQotICAgaW5zdGFuY2UuICBJbiBjYXNlIHRob3NlIG1ldGhvZHMgcmVseSBvbiBzb21lIGludGVybmFsIGludmFyaWFudCBiZWluZyB0cnVlLAotICAgdGhlIHR5cGUgc2hvdWxkIGltcGxlbWVudCA6bWV0aDpgX19nZXRuZXdhcmdzX19gIHRvIGVzdGFibGlzaCBzdWNoIGFuCi0gICBpbnZhcmlhbnQ7IG90aGVyd2lzZSwgbmVpdGhlciA6bWV0aDpgX19uZXdfX2Agbm9yIDptZXRoOmBfX2luaXRfX2Agd2lsbCBiZQotICAgY2FsbGVkLgorICAgaW5zdGFuY2UuICBJbiBjYXNlIHRob3NlIG1ldGhvZHMgcmVseSBvbiBzb21lIGludGVybmFsIGludmFyaWFudCBiZWluZworICAgdHJ1ZSwgdGhlIHR5cGUgc2hvdWxkIGltcGxlbWVudCA6bWV0aDpgX19nZXRuZXdhcmdzX19gIG9yCisgICA6bWV0aDpgX19nZXRuZXdhcmdzX2V4X19gIHRvIGVzdGFibGlzaCBzdWNoIGFuIGludmFyaWFudDsgb3RoZXJ3aXNlLAorICAgbmVpdGhlciA6bWV0aDpgX19uZXdfX2Agbm9yIDptZXRoOmBfX2luaXRfX2Agd2lsbCBiZSBjYWxsZWQuCiAKIC4uIGluZGV4OjogcGFpcjogY29weTsgcHJvdG9jb2wKIApAQCAtNTM1LDcgKzU1NSw3IEBACiAKIEFsdGhvdWdoIHBvd2VyZnVsLCBpbXBsZW1lbnRpbmcgOm1ldGg6YF9fcmVkdWNlX19gIGRpcmVjdGx5IGluIHlvdXIgY2xhc3NlcyBpcwogZXJyb3IgcHJvbmUuICBGb3IgdGhpcyByZWFzb24sIGNsYXNzIGRlc2lnbmVycyBzaG91bGQgdXNlIHRoZSBoaWdoLWxldmVsCi1pbnRlcmZhY2UgKGkuZS4sIDptZXRoOmBfX2dldG5ld2FyZ3NfX2AsIDptZXRoOmBfX2dldHN0YXRlX19gIGFuZAoraW50ZXJmYWNlIChpLmUuLCA6bWV0aDpgX19nZXRuZXdhcmdzX2V4X19gLCA6bWV0aDpgX19nZXRzdGF0ZV9fYCBhbmQKIDptZXRoOmBfX3NldHN0YXRlX19gKSB3aGVuZXZlciBwb3NzaWJsZS4gIFdlIHdpbGwgc2hvdywgaG93ZXZlciwgY2FzZXMgd2hlcmUKIHVzaW5nIDptZXRoOmBfX3JlZHVjZV9fYCBpcyB0aGUgb25seSBvcHRpb24gb3IgbGVhZHMgdG8gbW9yZSBlZmZpY2llbnQgcGlja2xpbmcKIG9yIGJvdGguCkBAIC04ODMsNiArOTAzLDkgQEAKIAogLi4gWyNdIERvbid0IGNvbmZ1c2UgdGhpcyB3aXRoIHRoZSA6bW9kOmBtYXJzaGFsYCBtb2R1bGUKIAorLi4gWyNdIFRoaXMgaXMgd2h5IDprZXl3b3JkOmBsYW1iZGFgIGZ1bmN0aW9ucyBjYW5ub3QgYmUgcGlja2xlZDogIGFsbAorICAgIDprZXl3b3JkOmBsYW1iZGFgIGZ1bmN0aW9ucyBzaGFyZSB0aGUgc2FtZSBuYW1lOiAgYGA8bGFtYmRhPmBgLgorCiAuLiBbI10gVGhlIGV4Y2VwdGlvbiByYWlzZWQgd2lsbCBsaWtlbHkgYmUgYW4gOmV4YzpgSW1wb3J0RXJyb3JgIG9yIGFuCiAgICA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAgYnV0IGl0IGNvdWxkIGJlIHNvbWV0aGluZyBlbHNlLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QKaW5kZXggYTI2NzM2OC4uNzMwMWQ0OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BsaXN0bGliLnJzdApAQCAtMTYsMjYgKzE2LDIxIEBACiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlICJwcm9wZXJ0eSBsaXN0IgotWE1MIGZpbGVzIHVzZWQgbWFpbmx5IGJ5IE1hYyBPUyBYLgorZmlsZXMgdXNlZCBtYWlubHkgYnkgTWFjIE9TIFggYW5kIHN1cHBvcnRzIGJvdGggYmluYXJ5IGFuZCBYTUwgcGxpc3QgZmlsZXMuCiAKLVRoZSBwcm9wZXJ0eSBsaXN0IChgYC5wbGlzdGBgKSBmaWxlIGZvcm1hdCBpcyBhIHNpbXBsZSBYTUwgcGlja2xlIHN1cHBvcnRpbmcKK1RoZSBwcm9wZXJ0eSBsaXN0IChgYC5wbGlzdGBgKSBmaWxlIGZvcm1hdCBpcyBhIHNpbXBsZSBzZXJpYWxpemF0aW9uIHN1cHBvcnRpbmcKIGJhc2ljIG9iamVjdCB0eXBlcywgbGlrZSBkaWN0aW9uYXJpZXMsIGxpc3RzLCBudW1iZXJzIGFuZCBzdHJpbmdzLiAgVXN1YWxseSB0aGUKIHRvcCBsZXZlbCBvYmplY3QgaXMgYSBkaWN0aW9uYXJ5LgogCi1UbyB3cml0ZSBvdXQgYW5kIHRvIHBhcnNlIGEgcGxpc3QgZmlsZSwgdXNlIHRoZSA6ZnVuYzpgd3JpdGVQbGlzdGAgYW5kCi06ZnVuYzpgcmVhZFBsaXN0YCBmdW5jdGlvbnMuCitUbyB3cml0ZSBvdXQgYW5kIHRvIHBhcnNlIGEgcGxpc3QgZmlsZSwgdXNlIHRoZSA6ZnVuYzpgZHVtcGAgYW5kCis6ZnVuYzpgbG9hZGAgZnVuY3Rpb25zLgogCi1UbyB3b3JrIHdpdGggcGxpc3QgZGF0YSBpbiBieXRlcyBvYmplY3RzLCB1c2UgOmZ1bmM6YHdyaXRlUGxpc3RUb0J5dGVzYAotYW5kIDpmdW5jOmByZWFkUGxpc3RGcm9tQnl0ZXNgLgorVG8gd29yayB3aXRoIHBsaXN0IGRhdGEgaW4gYnl0ZXMgb2JqZWN0cywgdXNlIDpmdW5jOmBkdW1wc2AKK2FuZCA6ZnVuYzpgbG9hZHNgLgogCiBWYWx1ZXMgY2FuIGJlIHN0cmluZ3MsIGludGVnZXJzLCBmbG9hdHMsIGJvb2xlYW5zLCB0dXBsZXMsIGxpc3RzLCBkaWN0aW9uYXJpZXMKLShidXQgb25seSB3aXRoIHN0cmluZyBrZXlzKSwgOmNsYXNzOmBEYXRhYCBvciA6Y2xhc3M6YGRhdGV0aW1lLmRhdGV0aW1lYAotb2JqZWN0cy4gIFN0cmluZyB2YWx1ZXMgKGluY2x1ZGluZyBkaWN0aW9uYXJ5IGtleXMpIGhhdmUgdG8gYmUgdW5pY29kZSBzdHJpbmdzIC0tCi10aGV5IHdpbGwgYmUgd3JpdHRlbiBvdXQgYXMgVVRGLTguCi0KLVRoZSBgYDxkYXRhPmBgIHBsaXN0IHR5cGUgaXMgc3VwcG9ydGVkIHRocm91Z2ggdGhlIDpjbGFzczpgRGF0YWAgY2xhc3MuICBUaGlzIGlzCi1hIHRoaW4gd3JhcHBlciBhcm91bmQgYSBQeXRob24gYnl0ZXMgb2JqZWN0LiAgVXNlIDpjbGFzczpgRGF0YWAgaWYgeW91ciBzdHJpbmdzCi1jb250YWluIGNvbnRyb2wgY2hhcmFjdGVycy4KKyhidXQgb25seSB3aXRoIHN0cmluZyBrZXlzKSwgOmNsYXNzOmBEYXRhYCwgOmNsYXNzOmBieXRlc2AsIDpjbGFzczpgYnl0ZXNhcnJheWAKK29yIDpjbGFzczpgZGF0ZXRpbWUuZGF0ZXRpbWVgIG9iamVjdHMuCiAKIC4uIHNlZWFsc286OgogCkBAIC00NSwzNyArNDAsMTQ3IEBACiAKIFRoaXMgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKLS4uIGZ1bmN0aW9uOjogcmVhZFBsaXN0KHBhdGhPckZpbGUpCisuLiBmdW5jdGlvbjo6IGxvYWQoZnAsIFwqLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9VHJ1ZSwgZGljdF90eXBlPWRpY3QpCiAKLSAgIFJlYWQgYSBwbGlzdCBmaWxlLiAqcGF0aE9yRmlsZSogbWF5IGVpdGhlciBiZSBhIGZpbGUgbmFtZSBvciBhIChyZWFkYWJsZSBhbmQKLSAgIGJpbmFyeSkgZmlsZSBvYmplY3QuICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEKKyAgIFJlYWQgYSBwbGlzdCBmaWxlLiAqZnAqIHNob3VsZCBiZSBhIHJlYWRhYmxlIGFuZCBiaW5hcnkgZmlsZSBvYmplY3QuCisgICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEKICAgIGRpY3Rpb25hcnkpLgogCi0gICBUaGUgWE1MIGRhdGEgaXMgcGFyc2VkIHVzaW5nIHRoZSBFeHBhdCBwYXJzZXIgZnJvbSA6bW9kOmB4bWwucGFyc2Vycy5leHBhdGAKLSAgIC0tIHNlZSBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgcG9zc2libGUgZXhjZXB0aW9ucyBvbiBpbGwtZm9ybWVkIFhNTC4KLSAgIFVua25vd24gZWxlbWVudHMgd2lsbCBzaW1wbHkgYmUgaWdub3JlZCBieSB0aGUgcGxpc3QgcGFyc2VyLgorICAgVGhlICpmbXQqIGlzIHRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgYW5kIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB2YWxpZDoKKworICAgKiA6ZGF0YTpgTm9uZWA6IEF1dG9kZXRlY3QgdGhlIGZpbGUgZm9ybWF0CisKKyAgICogOmRhdGE6YEZNVF9YTUxgOiBYTUwgZmlsZSBmb3JtYXQKKworICAgKiA6ZGF0YTpgRk1UX0JJTkFSWWA6IEJpbmFyeSBwbGlzdCBmb3JtYXQKKworICAgSWYgKnVzZV9idWlsdGluX3R5cGVzKiBpcyB0cnVlICh0aGUgZGVmYXVsdCkgYmluYXJ5IGRhdGEgd2lsbCBiZSByZXR1cm5lZAorICAgYXMgaW5zdGFuY2VzIG9mIDpjbGFzczpgYnl0ZXNgLCBvdGhlcndpc2UgaXQgaXMgcmV0dXJuZWQgYXMgaW5zdGFuY2VzIG9mCisgICA6Y2xhc3M6YERhdGFgLgorCisgICBUaGUgKmRpY3RfdHlwZSogaXMgdGhlIHR5cGUgdXNlZCBmb3IgZGljdGlvbmFyaWVzIHRoYXQgYXJlIHJlYWQgZnJvbSB0aGUKKyAgIHBsaXN0IGZpbGUuIFRoZSBleGFjdCBzdHJ1Y3R1cmUgb2YgdGhlIHBsaXN0IGNhbiBiZSByZWNvdmVyZWQgYnkgdXNpbmcKKyAgIDpjbGFzczpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIChhbHRob3VnaCB0aGUgb3JkZXIgb2Yga2V5cyBzaG91bGRuJ3QgYmUKKyAgIGltcG9ydGFudCBpbiBwbGlzdCBmaWxlcykuCisKKyAgIFhNTCBkYXRhIGZvciB0aGUgOmRhdGE6YEZNVF9YTUxgIGZvcm1hdCBpcyBwYXJzZWQgdXNpbmcgdGhlIEV4cGF0IHBhcnNlcgorICAgZnJvbSA6bW9kOmB4bWwucGFyc2Vycy5leHBhdGAgLS0gc2VlIGl0cyBkb2N1bWVudGF0aW9uIGZvciBwb3NzaWJsZQorICAgZXhjZXB0aW9ucyBvbiBpbGwtZm9ybWVkIFhNTC4gIFVua25vd24gZWxlbWVudHMgd2lsbCBzaW1wbHkgYmUgaWdub3JlZAorICAgYnkgdGhlIHBsaXN0IHBhcnNlci4KKworICAgVGhlIHBhcnNlciBmb3IgdGhlIGJpbmFyeSBmb3JtYXQgcmFpc2VzIDpleGM6YEludmFsaWRGaWxlRXhjZXB0aW9uYAorICAgd2hlbiB0aGUgZmlsZSBjYW5ub3QgYmUgcGFyc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IGxvYWRzKGRhdGEsIFwqLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9VHJ1ZSwgZGljdF90eXBlPWRpY3QpCisKKyAgIExvYWQgYSBwbGlzdCBmcm9tIGEgYnl0ZXMgb2JqZWN0LiBTZWUgOmZ1bmM6YGxvYWRgIGZvciBhbiBleHBsYW5hdGlvbiBvZgorICAgdGhlIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IGR1bXAodmFsdWUsIGZwLCBcKiwgZm10PUZNVF9YTUwsIHNvcnRfa2V5cz1UcnVlLCBza2lwa2V5cz1GYWxzZSkKKworICAgV3JpdGUgKnZhbHVlKiB0byBhIHBsaXN0IGZpbGUuICpGcCogc2hvdWxkIGJlIGEgd3JpdGFibGUsIGJpbmFyeQorICAgZmlsZSBvYmplY3QuCisKKyAgIFRoZSAqZm10KiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGUgcGxpc3QgZmlsZSBhbmQgY2FuIGJlCisgICBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgICogOmRhdGE6YEZNVF9YTUxgOiBYTUwgZm9ybWF0dGVkIHBsaXN0IGZpbGUKKworICAgKiA6ZGF0YTpgRk1UX0JJTkFSWWA6IEJpbmFyeSBmb3JtYXR0ZWQgcGxpc3QgZmlsZQorCisgICBXaGVuICpzb3J0X2tleXMqIGlzIHRydWUgKHRoZSBkZWZhdWx0KSB0aGUga2V5cyBmb3IgZGljdGlvbmFyaWVzIHdpbGwgYmUKKyAgIHdyaXR0ZW4gdG8gdGhlIHBsaXN0IGluIHNvcnRlZCBvcmRlciwgb3RoZXJ3aXNlIHRoZXkgd2lsbCBiZSB3cml0dGVuIGluCisgICB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mIHRoZSBkaWN0aW9uYXJ5LgorCisgICBXaGVuICpza2lwa2V5cyogaXMgZmFsc2UgKHRoZSBkZWZhdWx0KSB0aGUgZnVuY3Rpb24gcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAKKyAgIHdoZW4gYSBrZXkgb2YgYSBkaWN0aW9uYXJ5IGlzIG5vdCBhIHN0cmluZywgb3RoZXJ3aXNlIHN1Y2gga2V5cyBhcmUgc2tpcHBlZC4KKworICAgQSA6ZXhjOmBUeXBlRXJyb3JgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBvYmplY3QgaXMgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZSBvcgorICAgYSBjb250YWluZXIgdGhhdCBjb250YWlucyBvYmplY3RzIG9mIHVuc3VwcG9ydGVkIHR5cGVzLgorCisgICBBbiA6ZXhjOmBPdmVyZmxvd0Vycm9yYCB3aWxsIGJlIHJhaXNlZCBmb3IgaW50ZWdlciB2YWx1ZXMgdGhhdCBjYW5ub3QKKyAgIGJlIHJlcHJlc2VudGVkIGluIChiaW5hcnkpIHBsaXN0IGZpbGVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogZHVtcHModmFsdWUsIFwqLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKQorCisgICBSZXR1cm4gKnZhbHVlKiBhcyBhIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuIFNlZQorICAgdGhlIGRvY3VtZW50YXRpb24gZm9yIDpmdW5jOmBkdW1wYCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGtleXdvcmQKKyAgIGFyZ3VtZW50cyBvZiB0aGlzIGZ1bmN0aW9uLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6IDMuNAorCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVwcmVjYXRlZDoKKworLi4gZnVuY3Rpb246OiByZWFkUGxpc3QocGF0aE9yRmlsZSkKKworICAgUmVhZCBhIHBsaXN0IGZpbGUuICpwYXRoT3JGaWxlKiBtYXkgYmUgZWl0aGVyIGEgZmlsZSBuYW1lIG9yIGEgKHJlYWRhYmxlCisgICBhbmQgYmluYXJ5KSBmaWxlIG9iamVjdC4gUmV0dXJucyB0aGUgdW5wYWNrZWQgcm9vdCBvYmplY3QgKHdoaWNoIHVzdWFsbHkKKyAgIGlzIGEgZGljdGlvbmFyeSkuCisKKyAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgOmZ1bmM6YGxvYWRgIHRvIGRvIHRoZSBhY3R1YWwgd29yaywgdGhlIHRoZSBkb2N1bWVudGF0aW9uCisgICBvZiA6ZnVuYzpgdGhhdCBmdW5jdGlvbiA8bG9hZD5gIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5d29yZCBhcmd1bWVudHMuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBEaWN0IHZhbHVlcyBpbiB0aGUgcmVzdWx0IGhhdmUgYSBgYF9fZ2V0YXR0cl9fYGAgbWV0aG9kIHRoYXQgZGVmZXJzCisgICAgICB0byBgYF9fZ2V0aXRlbV9gYC4gVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gdXNlIGF0dHJpYnV0ZSBhY2Nlc3MgdG8KKyAgICAgIGFjY2VzcyBpdGVtcyBvZiB0aGVzZSBkaWN0aW9uYXJpZXMuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6IDMuNCBVc2UgOmZ1bmM6YGxvYWRgIGluc3RlYWQuCiAKIAogLi4gZnVuY3Rpb246OiB3cml0ZVBsaXN0KHJvb3RPYmplY3QsIHBhdGhPckZpbGUpCiAKLSAgICBXcml0ZSAqcm9vdE9iamVjdCogdG8gYSBwbGlzdCBmaWxlLiAqcGF0aE9yRmlsZSogbWF5IGVpdGhlciBiZSBhIGZpbGUgbmFtZQotICAgIG9yIGEgKHdyaXRhYmxlIGFuZCBiaW5hcnkpIGZpbGUgb2JqZWN0LgorICAgV3JpdGUgKnJvb3RPYmplY3QqIHRvIGFuIFhNTCBwbGlzdCBmaWxlLiAqcGF0aE9yRmlsZSogbWF5IGJlIGVpdGhlciBhIGZpbGUgbmFtZQorICAgb3IgYSAod3JpdGFibGUgYW5kIGJpbmFyeSkgZmlsZSBvYmplY3QKIAotICAgIEEgOmV4YzpgVHlwZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgb2JqZWN0IGlzIG9mIGFuIHVuc3VwcG9ydGVkIHR5cGUgb3IKLSAgICBhIGNvbnRhaW5lciB0aGF0IGNvbnRhaW5zIG9iamVjdHMgb2YgdW5zdXBwb3J0ZWQgdHlwZXMuCisgICAuLiBkZXByZWNhdGVkOiAzLjQgVXNlIDpmdW5jOmBkdW1wYCBpbnN0ZWFkLgogCiAKIC4uIGZ1bmN0aW9uOjogcmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpCiAKICAgIFJlYWQgYSBwbGlzdCBkYXRhIGZyb20gYSBieXRlcyBvYmplY3QuICBSZXR1cm4gdGhlIHJvb3Qgb2JqZWN0LgogCisgICBTZWUgOmZ1bmM6YGxvYWRgIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIERpY3QgdmFsdWVzIGluIHRoZSByZXN1bHQgaGF2ZSBhIGBgX19nZXRhdHRyX19gYCBtZXRob2QgdGhhdCBkZWZlcnMKKyAgICAgIHRvIGBgX19nZXRpdGVtX2BgLiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiB1c2UgYXR0cmlidXRlIGFjY2VzcyB0bworICAgICAgYWNjZXNzIGl0ZW1zIG9mIHRoZXNlIGRpY3Rpb25hcmllcy4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuNCBVc2UgOmZ1bmM6YGxvYWRzYCBpbnN0ZWFkLgorCiAKIC4uIGZ1bmN0aW9uOjogd3JpdGVQbGlzdFRvQnl0ZXMocm9vdE9iamVjdCkKIAotICAgUmV0dXJuICpyb290T2JqZWN0KiBhcyBhIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCisgICBSZXR1cm4gKnJvb3RPYmplY3QqIGFzIGFuIFhNTCBwbGlzdC1mb3JtYXR0ZWQgYnl0ZXMgb2JqZWN0LgorCisgICAuLiBkZXByZWNhdGVkOjogMy40IFVzZSA6ZnVuYzpgZHVtcHNgIGluc3RlYWQuCiAKIAotVGhlIGZvbGxvd2luZyBjbGFzcyBpcyBhdmFpbGFibGU6CitUaGUgZm9sbG93aW5nIGNsYXNzZXMgYXJlIGF2YWlsYWJsZToKKworLi4gY2xhc3M6OiBEaWN0KFtkaWN0XSk6CisKKyAgIFJldHVybiBhbiBleHRlbmRlZCBtYXBwaW5nIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIGFzIGRpY3Rpb25hcnkKKyAgICpkaWN0Ki4KKworICAgVGhpcyBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIDpjbGFzczpgZGljdGAgd2hlcmUgYXR0cmlidXRlIGFjY2VzcyBjYW4KKyAgIGJlIHVzZWQgdG8gYWNjZXNzIGl0ZW1zLiBUaGF0IGlzLCBgYGFEaWN0LmtleWBgIGlzIHRoZSBzYW1lIGFzCisgICBgYGFEaWN0WydrZXknXWBgIGZvciBnZXR0aW5nLCBzZXR0aW5nIGFuZCBkZWxldGluZyBpdGVtcyBpbiB0aGUgbWFwcGluZy4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuMAorCiAKIC4uIGNsYXNzOjogRGF0YShkYXRhKQogCkBAIC04Niw2ICsxOTEsMjQgQEAKICAgIEl0IGhhcyBvbmUgYXR0cmlidXRlLCA6YXR0cjpgZGF0YWAsIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIFB5dGhvbgogICAgYnl0ZXMgb2JqZWN0IHN0b3JlZCBpbiBpdC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNCBVc2UgYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgaW5zdGVhZAorCisKK1RoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBhdmFpYWJsZToKKworLi4gZGF0YTo6IEZNVF9YTUwKKworICAgVGhlIFhNTCBmb3JtYXQgZm9yIHBsaXN0IGZpbGVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogRk1UX0JJTkFSWQorCisgICBUaGUgYmluYXJ5IGZvcm1hdCBmb3IgcGxpc3QgZmlsZXMKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogRXhhbXBsZXMKIC0tLS0tLS0tCkBAIC0xMDMsMTMgKzIyNiwxNSBAQAogICAgICAgICAgICAgYVRydWVWYWx1ZSA9IFRydWUsCiAgICAgICAgICAgICBhRmFsc2VWYWx1ZSA9IEZhbHNlLAogICAgICAgICApLAotICAgICAgICBzb21lRGF0YSA9IERhdGEoYiI8YmluYXJ5IGd1bms+IiksCi0gICAgICAgIHNvbWVNb3JlRGF0YSA9IERhdGEoYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz4iICogMTApLAorICAgICAgICBzb21lRGF0YSA9IGIiPGJpbmFyeSBndW5rPiIsCisgICAgICAgIHNvbWVNb3JlRGF0YSA9IGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwLAogICAgICAgICBhRGF0ZSA9IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZS5ta3RpbWUodGltZS5nbXRpbWUoKSkpLAogICAgICkKLSAgICB3cml0ZVBsaXN0KHBsLCBmaWxlTmFtZSkKKyAgICB3aXRoIG9wZW4oZmlsZU5hbWUsICd3YicpIGFzIGZwOgorICAgICAgICBkdW1wKHBsLCBmcCkKIAogUGFyc2luZyBhIHBsaXN0OjoKIAotICAgIHBsID0gcmVhZFBsaXN0KHBhdGhPckZpbGUpCisgICAgd2l0aCBvcGVuKGZpbGVOYW1lLCAncmInKSBhcyBmcDoKKyAgICAgICAgcGwgPSBsb2FkKGZwKQogICAgIHByaW50KHBsWyJhS2V5Il0pCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wb3BsaWIucnN0IGIvRG9jL2xpYnJhcnkvcG9wbGliLnJzdAppbmRleCBiNDA4MGQ2Li5mYTFkYjAxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wb3BsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BvcGxpYi5yc3QKQEAgLTEzLDggKzEzLDExIEBACiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgY2xhc3MsIDpjbGFzczpgUE9QM2AsIHdoaWNoIGVuY2Fwc3VsYXRlcyBhIGNvbm5lY3Rpb24gdG8gYQotUE9QMyBzZXJ2ZXIgYW5kIGltcGxlbWVudHMgdGhlIHByb3RvY29sIGFzIGRlZmluZWQgaW4gOnJmYzpgMTcyNWAuICBUaGUKLTpjbGFzczpgUE9QM2AgY2xhc3Mgc3VwcG9ydHMgYm90aCB0aGUgbWluaW1hbCBhbmQgb3B0aW9uYWwgY29tbWFuZCBzZXRzLgorUE9QMyBzZXJ2ZXIgYW5kIGltcGxlbWVudHMgdGhlIHByb3RvY29sIGFzIGRlZmluZWQgaW4gOnJmYzpgMTkzOWAuIFRoZQorOmNsYXNzOmBQT1AzYCBjbGFzcyBzdXBwb3J0cyBib3RoIHRoZSBtaW5pbWFsIGFuZCBvcHRpb25hbCBjb21tYW5kIHNldHMgZnJvbQorOnJmYzpgMTkzOWAuIFRoZSA6Y2xhc3M6YFBPUDNgIGNsYXNzIGFsc28gc3VwcG9ydHMgdGhlIGBTVExTYCBjb21tYW5kIGludHJvZHVjZWQKK2luIDpyZmM6YDI1OTVgIHRvIGVuYWJsZSBlbmNyeXB0ZWQgY29tbXVuaWNhdGlvbiBvbiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIGNvbm5lY3Rpb24uCisKIEFkZGl0aW9uYWxseSwgdGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyA6Y2xhc3M6YFBPUDNfU1NMYCwgd2hpY2ggcHJvdmlkZXMKIHN1cHBvcnQgZm9yIGNvbm5lY3RpbmcgdG8gUE9QMyBzZXJ2ZXJzIHRoYXQgdXNlIFNTTCBhcyBhbiB1bmRlcmx5aW5nIHByb3RvY29sCiBsYXllci4KQEAgLTUwLDYgKzUzLDEwIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgKmNvbnRleHQqIHBhcmFtZXRlciBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBjbGFzcyBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVgIGFuZCAqU2VydmVyIE5hbWUgSW5kaWNhdG9yKiAoc2VlCisgICAgICA6ZGF0YTpgfnNzbC5IQVNfU05JYCkuCiAKIE9uZSBleGNlcHRpb24gaXMgZGVmaW5lZCBhcyBhbiBhdHRyaWJ1dGUgb2YgdGhlIDptb2Q6YHBvcGxpYmAgbW9kdWxlOgogCkBAIC05Nyw2ICsxMDQsMTQgQEAKICAgIFJldHVybnMgdGhlIGdyZWV0aW5nIHN0cmluZyBzZW50IGJ5IHRoZSBQT1AzIHNlcnZlci4KIAogCisuLiBtZXRob2Q6OiBQT1AzLmNhcGEoKQorCisgICBRdWVyeSB0aGUgc2VydmVyJ3MgY2FwYWJpbGl0aWVzIGFzIHNwZWNpZmllZCBpbiA6cmZjOmAyNDQ5YC4KKyAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IGluIHRoZSBmb3JtIGBgeyduYW1lJzogWydwYXJhbScuLi5dfWBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBQT1AzLnVzZXIodXNlcm5hbWUpCiAKICAgIFNlbmQgdXNlciBjb21tYW5kLCByZXNwb25zZSBzaG91bGQgaW5kaWNhdGUgdGhhdCBhIHBhc3N3b3JkIGlzIHJlcXVpcmVkLgpAQCAtMTc2LDYgKzE5MSwyMSBAQAogICAgdGhlIHVuaXF1ZSBpZCBmb3IgdGhhdCBtZXNzYWdlIGluIHRoZSBmb3JtIGBgJ3Jlc3BvbnNlIG1lc2dudW0gdWlkYGAsIG90aGVyd2lzZQogICAgcmVzdWx0IGlzIGxpc3QgYGAocmVzcG9uc2UsIFsnbWVzZ251bSB1aWQnLCAuLi5dLCBvY3RldHMpYGAuCiAKKy4uIG1ldGhvZDo6IFBPUDMuc3Rscyhjb250ZXh0PU5vbmUpCisKKyAgIFN0YXJ0IGEgVExTIHNlc3Npb24gb24gdGhlIGFjdGl2ZSBjb25uZWN0aW9uIGFzIHNwZWNpZmllZCBpbiA6cmZjOmAyNTk1YC4KKyAgIFRoaXMgaXMgb25seSBhbGxvd2VkIGJlZm9yZSB1c2VyIGF1dGhlbnRpY2F0aW9uCisKKyAgICpjb250ZXh0KiBwYXJhbWV0ZXIgaXMgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3Qgd2hpY2ggYWxsb3dzCisgICBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbiBvcHRpb25zLCBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvCisgICBhIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkgc3RydWN0dXJlLiAgVGhpcyBtZXRob2Qgc3VwcG9ydHMKKyAgIGhvc3RuYW1lIGNoZWNraW5nIHZpYSA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAKKyAgIDphdHRyOmBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRvciogKHNlZQorICAgOmRhdGE6YH5zc2wuSEFTX1NOSWApLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBJbnN0YW5jZXMgb2YgOmNsYXNzOmBQT1AzX1NTTGAgaGF2ZSBubyBhZGRpdGlvbmFsIG1ldGhvZHMuIFRoZSBpbnRlcmZhY2Ugb2YgdGhpcwogc3ViY2xhc3MgaXMgaWRlbnRpY2FsIHRvIGl0cyBwYXJlbnQuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QgYi9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CmluZGV4IDNhODYzMzEuLjQ0N2Y4ZjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHByaW50LnJzdApAQCAtMTQsOCArMTQsOCBAQAogUHl0aG9uIGRhdGEgc3RydWN0dXJlcyBpbiBhIGZvcm0gd2hpY2ggY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gdGhlIGludGVycHJldGVyLgogSWYgdGhlIGZvcm1hdHRlZCBzdHJ1Y3R1cmVzIGluY2x1ZGUgb2JqZWN0cyB3aGljaCBhcmUgbm90IGZ1bmRhbWVudGFsIFB5dGhvbgogdHlwZXMsIHRoZSByZXByZXNlbnRhdGlvbiBtYXkgbm90IGJlIGxvYWRhYmxlLiAgVGhpcyBtYXkgYmUgdGhlIGNhc2UgaWYgb2JqZWN0cwotc3VjaCBhcyBmaWxlcywgc29ja2V0cywgY2xhc3Nlcywgb3IgaW5zdGFuY2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55Ci1vdGhlciBidWlsdC1pbiBvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gY29uc3RhbnRzLgorc3VjaCBhcyBmaWxlcywgc29ja2V0cyBvciBjbGFzc2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55IG90aGVyCitvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gbGl0ZXJhbHMuCiAKIFRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24ga2VlcHMgb2JqZWN0cyBvbiBhIHNpbmdsZSBsaW5lIGlmIGl0IGNhbiwgYW5kCiBicmVha3MgdGhlbSBvbnRvIG11bHRpcGxlIGxpbmVzIGlmIHRoZXkgZG9uJ3QgZml0IHdpdGhpbiB0aGUgYWxsb3dlZCB3aWR0aC4KQEAgLTI5LDE0ICsyOSwxNCBAQAogLi4gRmlyc3QgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzOgogCiAKLS4uIGNsYXNzOjogUHJldHR5UHJpbnRlcihpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lKQorLi4gY2xhc3M6OiBQcmV0dHlQcmludGVyKGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUsICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKQogCiAgICBDb25zdHJ1Y3QgYSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGluc3RhbmNlLiAgVGhpcyBjb25zdHJ1Y3RvciB1bmRlcnN0YW5kcwogICAgc2V2ZXJhbCBrZXl3b3JkIHBhcmFtZXRlcnMuICBBbiBvdXRwdXQgc3RyZWFtIG1heSBiZSBzZXQgdXNpbmcgdGhlICpzdHJlYW0qCiAgICBrZXl3b3JkOyB0aGUgb25seSBtZXRob2QgdXNlZCBvbiB0aGUgc3RyZWFtIG9iamVjdCBpcyB0aGUgZmlsZSBwcm90b2NvbCdzCiAgICA6bWV0aDpgd3JpdGVgIG1ldGhvZC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGFkb3B0cwotICAgYGBzeXMuc3Rkb3V0YGAuICBUaHJlZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgbWF5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUKLSAgIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbi4gIFRoZSBrZXl3b3JkcyBhcmUgKmluZGVudCosICpkZXB0aCosIGFuZCAqd2lkdGgqLiAgVGhlCisgICBgYHN5cy5zdGRvdXRgYC4gIFRoZQogICAgYW1vdW50IG9mIGluZGVudGF0aW9uIGFkZGVkIGZvciBlYWNoIHJlY3Vyc2l2ZSBsZXZlbCBpcyBzcGVjaWZpZWQgYnkgKmluZGVudCo7CiAgICB0aGUgZGVmYXVsdCBpcyBvbmUuICBPdGhlciB2YWx1ZXMgY2FuIGNhdXNlIG91dHB1dCB0byBsb29rIGEgbGl0dGxlIG9kZCwgYnV0IGNhbgogICAgbWFrZSBuZXN0aW5nIGVhc2llciB0byBzcG90LiAgVGhlIG51bWJlciBvZiBsZXZlbHMgd2hpY2ggbWF5IGJlIHByaW50ZWQgaXMKQEAgLTQ1LDcgKzQ1LDEyIEBACiAgICB0aGUgZGVwdGggb2YgdGhlIG9iamVjdHMgYmVpbmcgZm9ybWF0dGVkLiAgVGhlIGRlc2lyZWQgb3V0cHV0IHdpZHRoIGlzCiAgICBjb25zdHJhaW5lZCB1c2luZyB0aGUgKndpZHRoKiBwYXJhbWV0ZXI7IHRoZSBkZWZhdWx0IGlzIDgwIGNoYXJhY3RlcnMuICBJZiBhCiAgICBzdHJ1Y3R1cmUgY2Fubm90IGJlIGZvcm1hdHRlZCB3aXRoaW4gdGhlIGNvbnN0cmFpbmVkIHdpZHRoLCBhIGJlc3QgZWZmb3J0IHdpbGwKLSAgIGJlIG1hZGUuCisgICBiZSBtYWRlLiAgSWYgKmNvbXBhY3QqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkgZWFjaCBpdGVtIG9mIGEgbG9uZyBzZXF1ZW5jZQorICAgd2lsbCBiZSBmb3JtYXR0ZWQgb24gYSBzZXBhcmF0ZSBsaW5lLiAgSWYgKmNvbXBhY3QqIGlzIHRydWUsIGFzIG1hbnkgaXRlbXMKKyAgIGFzIHdpbGwgZml0IHdpdGhpbiB0aGUgKndpZHRoKiB3aWxsIGJlIGZvcm1hdHRlZCBvbiBlYWNoIG91dHB1dCBsaW5lLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICpjb21wYWN0KiBwYXJhbWV0ZXIuCiAKICAgICAgID4+PiBpbXBvcnQgcHByaW50CiAgICAgICA+Pj4gc3R1ZmYgPSBbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywgJ2tuaWdodHMnLCAnbmknXQpAQCAtNTgsNiArNjMsMTIgQEAKICAgICAgICAgICAnbHVtYmVyamFjaycsCiAgICAgICAgICAgJ2tuaWdodHMnLAogICAgICAgICAgICduaSddCisgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcih3aWR0aD00MSwgY29tcGFjdD1UcnVlKQorICAgICAgPj4+IHBwLnBwcmludChzdHVmZikKKyAgICAgIFtbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywKKyAgICAgICAgJ2tuaWdodHMnLCAnbmknXSwKKyAgICAgICAnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsCisgICAgICAgJ25pJ10KICAgICAgID4+PiB0dXAgPSAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywKICAgICAgIC4uLiAoJ3BhcnJvdCcsICgnZnJlc2ggZnJ1aXQnLCkpKSkpKSkpCiAgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcihkZXB0aD02KQpAQCAtNjUsMjMgKzc2LDMwIEBACiAgICAgICAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywgKC4uLikpKSkpKSkKIAogCi1UaGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjbGFzcyBzdXBwb3J0cyBzZXZlcmFsIGRlcml2YXRpdmUgZnVuY3Rpb25zOgorVGhlIDptb2Q6YHBwcmludGAgbW9kdWxlIGFsc28gcHJvdmlkZXMgc2V2ZXJhbCBzaG9ydGN1dCBmdW5jdGlvbnM6CiAKLS4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgY29tcGFjdD1GYWxzZSkKIAotICAgUmV0dXJuIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogYXMgYSBzdHJpbmcuICAqaW5kZW50KiwgKndpZHRoKgotICAgYW5kICpkZXB0aCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAgY29uc3RydWN0b3IgYXMKLSAgIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKyAgIFJldHVybiB0aGUgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIG9mICpvYmplY3QqIGFzIGEgc3RyaW5nLiAgKmluZGVudCosCisgICAqd2lkdGgqLCAqZGVwdGgqIGFuZCAqY29tcGFjdCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAKKyAgIGNvbnN0cnVjdG9yIGFzIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSAqY29tcGFjdCogcGFyYW1ldGVyLgogCiAKLS4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgY29tcGFjdD1GYWxzZSkKIAogICAgUHJpbnRzIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogb24gKnN0cmVhbSosIGZvbGxvd2VkIGJ5IGEKICAgIG5ld2xpbmUuICBJZiAqc3RyZWFtKiBpcyBgYE5vbmVgYCwgYGBzeXMuc3Rkb3V0YGAgaXMgdXNlZC4gIFRoaXMgbWF5IGJlIHVzZWQKICAgIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBpbnN0ZWFkIG9mIHRoZSA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uIGZvcgogICAgaW5zcGVjdGluZyB2YWx1ZXMgKHlvdSBjYW4gZXZlbiByZWFzc2lnbiBgYHByaW50ID0gcHByaW50LnBwcmludGBgIGZvciB1c2UKLSAgIHdpdGhpbiBhIHNjb3BlKS4gICppbmRlbnQqLCAqd2lkdGgqIGFuZCAqZGVwdGgqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQotICAgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisgICB3aXRoaW4gYSBzY29wZSkuICAqaW5kZW50KiwgKndpZHRoKiwgKmRlcHRoKiBhbmQgKmNvbXBhY3QqIHdpbGwgYmUgcGFzc2VkCisgICB0byB0aGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKmNvbXBhY3QqIHBhcmFtZXRlci4KIAogICAgICAgPj4+IGltcG9ydCBwcHJpbnQKICAgICAgID4+PiBzdHVmZiA9IFsnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsICduaSddCkBAIC0xOTMsMTAxICsyMTEsMTQxIEBACiAtLS0tLS0tCiAKIFRvIGRlbW9uc3RyYXRlIHNldmVyYWwgdXNlcyBvZiB0aGUgOmZ1bmM6YHBwcmludGAgZnVuY3Rpb24gYW5kIGl0cyBwYXJhbWV0ZXJzLAotbGV0J3MgZmV0Y2ggaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9qZWN0IGZyb20gUHlQSTo6CitsZXQncyBmZXRjaCBpbmZvcm1hdGlvbiBhYm91dCBhIHByb2plY3QgZnJvbSBgUHlQSSA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmc+YF86OgogCiAgICA+Pj4gaW1wb3J0IGpzb24KICAgID4+PiBpbXBvcnQgcHByaW50CiAgICA+Pj4gZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgotICAgPj4+IHdpdGggdXJsb3BlbignaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlci9qc29uJykgYXMgdXJsOgorICAgPj4+IHdpdGggdXJsb3BlbignaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQvanNvbicpIGFzIHVybDoKICAgIC4uLiAgICAgaHR0cF9pbmZvID0gdXJsLmluZm8oKQogICAgLi4uICAgICByYXdfZGF0YSA9IHVybC5yZWFkKCkuZGVjb2RlKGh0dHBfaW5mby5nZXRfY29udGVudF9jaGFyc2V0KCkpCiAgICA+Pj4gcHJvamVjdF9pbmZvID0ganNvbi5sb2FkcyhyYXdfZGF0YSkKLSAgID4+PiByZXN1bHQgPSB7J2hlYWRlcnMnOiBodHRwX2luZm8uaXRlbXMoKSwgJ2JvZHknOiBwcm9qZWN0X2luZm99CiAKIEluIGl0cyBiYXNpYyBmb3JtLCA6ZnVuYzpgcHByaW50YCBzaG93cyB0aGUgd2hvbGUgb2JqZWN0OjoKIAotICAgPj4+IHBwcmludC5wcHJpbnQocmVzdWx0KQotICAgeydib2R5JzogeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMiwKLSAgICAgICAgICAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgOjogRW5nbGlzaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcyA6OiBQeXRob24gTW9kdWxlcyddLAotICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCi0gICAgICAgICAgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ2tleXdvcmRzJzogJ2NvbmZpZ3BhcnNlciBpbmkgcGFyc2luZyBjb25mIGNmZyBjb25maWd1cmF0aW9uIGZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAnY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ2FueScsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb25maWdwYXJzZXIvMy4yLjByMycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3VtbWFyeSc6ICdUaGlzIGxpYnJhcnkgYnJpbmdzIHRoZSB1cGRhdGVkIGNvbmZpZ3BhcnNlciBmcm9tIFB5dGhvbiAzLjIrIHRvIFB5dGhvbiAyLjYtMi43LicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMy4yLjByMyd9LAotICAgICAgICAgICAndXJscyc6IFt7J2NvbW1lbnRfdGV4dCc6ICcnLAotICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2Fkcyc6IDQ3LAotICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ2NvbmZpZ3BhcnNlci0zLjIuMHIzLnRhci5neicsCi0gICAgICAgICAgICAgICAgICAgICAnaGFzX3NpZyc6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgJ21kNV9kaWdlc3QnOiAnODUwMGZkODdjNjFhYzBkZTMyOGZjOTk2ZmNlNjliOTYnLAotICAgICAgICAgICAgICAgICAgICAgJ3BhY2thZ2V0eXBlJzogJ3NkaXN0JywKLSAgICAgICAgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICdzb3VyY2UnLAotICAgICAgICAgICAgICAgICAgICAgJ3NpemUnOiAzMjI4MSwKLSAgICAgICAgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDExLTA1LTEwVDE2OjI4OjUwJywKLSAgICAgICAgICAgICAgICAgICAgICd1cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvYy9jb25maWdwYXJzZXIvY29uZmlncGFyc2VyLTMuMi4wcjMudGFyLmd6J31dfSwKLSAgICdoZWFkZXJzJzogWygnRGF0ZScsICdTYXQsIDE0IE1heSAyMDExIDEyOjQ4OjUyIEdNVCcpLAotICAgICAgICAgICAgICAgKCdTZXJ2ZXInLCAnQXBhY2hlLzIuMi4xNiAoRGViaWFuKScpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2lubGluZScpLAotICAgICAgICAgICAgICAgKCdDb25uZWN0aW9uJywgJ2Nsb3NlJyksCi0gICAgICAgICAgICAgICAoJ1RyYW5zZmVyLUVuY29kaW5nJywgJ2NodW5rZWQnKSwKLSAgICAgICAgICAgICAgICgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9IlVURi04IicpXX0KKyAgID4+PiBwcHJpbnQucHByaW50KHByb2plY3RfaW5mbykKKyAgIHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTI1LAorICAgICAgICAgICAgICdhdXRob3InOiAnR2x5cGggTGVma293aXR6JywKKyAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ2dseXBoQHR3aXN0ZWRtYXRyaXguY29tJywKKyAgICAgICAgICAgICAnYnVndHJhY2tfdXJsJzogJycsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfY29kZV9rd2FsaXRlZV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfZG9jdW1lbnRhdGlvbl9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfaW5zdGFsbGFiaWxpdHlfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyIDo6IE9ubHknXSwKKyAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW4gZXh0ZW5zaWJsZSBmcmFtZXdvcmsgZm9yIFB5dGhvbiBwcm9ncmFtbWluZywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHNwZWNpYWwgZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCBuZXR3b3JrIHByb2dyYW1taW5nIGFuZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcHJvdG9jb2wgaW50ZWdyYXRpb24uJywKKyAgICAgICAgICAgICAnZG9jc191cmwnOiAnJywKKyAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLycsCisgICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCisgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcic6ICcnLAorICAgICAgICAgICAgICdtYWludGFpbmVyX2VtYWlsJzogJycsCisgICAgICAgICAgICAgJ25hbWUnOiAnVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkJywKKyAgICAgICAgICAgICAncGxhdGZvcm0nOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkLzEyLjMuMCcsCisgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3VtbWFyeSc6ICdBbiBhc3luY2hyb25vdXMgbmV0d29ya2luZyBmcmFtZXdvcmsgd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICd2ZXJzaW9uJzogJzEyLjMuMCd9LAorICAgICd1cmxzJzogW3snY29tbWVudF90ZXh0JzogJycsCisgICAgICAgICAgICAgICdkb3dubG9hZHMnOiA3MTg0NCwKKyAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ1R3aXN0ZWQtMTIuMy4wLnRhci5iejInLAorICAgICAgICAgICAgICAnaGFzX3NpZyc6IEZhbHNlLAorICAgICAgICAgICAgICAnbWQ1X2RpZ2VzdCc6ICc2ZTI4OTgyNWYzYmY1NTkxY2ZkNjcwODc0Y2MwODYyZCcsCisgICAgICAgICAgICAgICdwYWNrYWdldHlwZSc6ICdzZGlzdCcsCisgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICdzb3VyY2UnLAorICAgICAgICAgICAgICAnc2l6ZSc6IDI2MTU3MzMsCisgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDEyLTEyLTI2VDEyOjQ3OjAzJywKKyAgICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvVC9Ud2lzdGVkL1R3aXN0ZWQtMTIuMy4wLnRhci5iejInfSwKKyAgICAgICAgICAgICB7J2NvbW1lbnRfdGV4dCc6ICcnLAorICAgICAgICAgICAgICAnZG93bmxvYWRzJzogNTIyNCwKKyAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ1R3aXN0ZWQtMTIuMy4wLndpbjMyLXB5Mi43Lm1zaScsCisgICAgICAgICAgICAgICdoYXNfc2lnJzogRmFsc2UsCisgICAgICAgICAgICAgICdtZDVfZGlnZXN0JzogJzZiNzc4ZjUyMDFiNjIyYTU1MTlhMmFjYTFhMmZlNTEyJywKKyAgICAgICAgICAgICAgJ3BhY2thZ2V0eXBlJzogJ2JkaXN0X21zaScsCisgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICcyLjcnLAorICAgICAgICAgICAgICAnc2l6ZSc6IDI5MTYzNTIsCisgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDEyLTEyLTI2VDEyOjQ4OjE1JywKKyAgICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy8yLjcvVC9Ud2lzdGVkL1R3aXN0ZWQtMTIuMy4wLndpbjMyLXB5Mi43Lm1zaSd9XX0KIAogVGhlIHJlc3VsdCBjYW4gYmUgbGltaXRlZCB0byBhIGNlcnRhaW4gKmRlcHRoKiAoZWxsaXBzaXMgaXMgdXNlZCBmb3IgZGVlcGVyCiBjb250ZW50cyk6OgogCi0gICA+Pj4gcHByaW50LnBwcmludChyZXN1bHQsIGRlcHRoPTMpCi0gICB7J2JvZHknOiB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyLAotICAgICAgICAgICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsuLi5dLAotICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCi0gICAgICAgICAgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ2tleXdvcmRzJzogJ2NvbmZpZ3BhcnNlciBpbmkgcGFyc2luZyBjb25mIGNmZyBjb25maWd1cmF0aW9uIGZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAnY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ2FueScsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb25maWdwYXJzZXIvMy4yLjByMycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3VtbWFyeSc6ICdUaGlzIGxpYnJhcnkgYnJpbmdzIHRoZSB1cGRhdGVkIGNvbmZpZ3BhcnNlciBmcm9tIFB5dGhvbiAzLjIrIHRvIFB5dGhvbiAyLjYtMi43LicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMy4yLjByMyd9LAotICAgICAgICAgICAndXJscyc6IFt7Li4ufV19LAotICAgJ2hlYWRlcnMnOiBbKCdEYXRlJywgJ1NhdCwgMTQgTWF5IDIwMTEgMTI6NDg6NTIgR01UJyksCi0gICAgICAgICAgICAgICAoJ1NlcnZlcicsICdBcGFjaGUvMi4yLjE2IChEZWJpYW4pJyksCi0gICAgICAgICAgICAgICAoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnaW5saW5lJyksCi0gICAgICAgICAgICAgICAoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKSwKLSAgICAgICAgICAgICAgICgnVHJhbnNmZXItRW5jb2RpbmcnLCAnY2h1bmtlZCcpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0iVVRGLTgiJyldfQorICAgPj4+IHBwcmludC5wcHJpbnQocHJvamVjdF9pbmZvLCBkZXB0aD0yKQorICAgeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMjUsCisgICAgICAgICAgICAgJ2F1dGhvcic6ICdHbHlwaCBMZWZrb3dpdHonLAorICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAnZ2x5cGhAdHdpc3RlZG1hdHJpeC5jb20nLAorICAgICAgICAgICAgICdidWd0cmFja191cmwnOiAnJywKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9jb2RlX2t3YWxpdGVlX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9kb2N1bWVudGF0aW9uX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9pbnN0YWxsYWJpbGl0eV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWy4uLl0sCisgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ0FuIGV4dGVuc2libGUgZnJhbWV3b3JrIGZvciBQeXRob24gcHJvZ3JhbW1pbmcsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCBzcGVjaWFsIGZvY3VzXHJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb24gZXZlbnQtYmFzZWQgbmV0d29yayBwcm9ncmFtbWluZyBhbmQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXByb3RvY29sIGludGVncmF0aW9uLicsCisgICAgICAgICAgICAgJ2RvY3NfdXJsJzogJycsCisgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS8nLAorICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAorICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCisgICAgICAgICAgICAgJ21haW50YWluZXInOiAnJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcl9lbWFpbCc6ICcnLAorICAgICAgICAgICAgICduYW1lJzogJ1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC8xMi4zLjAnLAorICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAorICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N1bW1hcnknOiAnQW4gYXN5bmNocm9ub3VzIG5ldHdvcmtpbmcgZnJhbWV3b3JrIHdyaXR0ZW4gaW4gUHl0aG9uJywKKyAgICAgICAgICAgICAndmVyc2lvbic6ICcxMi4zLjAnfSwKKyAgICAndXJscyc6IFt7Li4ufSwgey4uLn1dfQogCi1BZGRpdGlvbmFsbHksIG1heGltdW0gKndpZHRoKiBjYW4gYmUgc3VnZ2VzdGVkLiBJZiBhIGxvbmcgb2JqZWN0IGNhbm5vdCBiZQotc3BsaXQsIHRoZSBzcGVjaWZpZWQgd2lkdGggd2lsbCBiZSBleGNlZWRlZDo6CitBZGRpdGlvbmFsbHksIG1heGltdW0gY2hhcmFjdGVyICp3aWR0aCogY2FuIGJlIHN1Z2dlc3RlZC4gSWYgYSBsb25nIG9iamVjdAorY2Fubm90IGJlIHNwbGl0LCB0aGUgc3BlY2lmaWVkIHdpZHRoIHdpbGwgYmUgZXhjZWVkZWQ6OgogCi0gICA+Pj4gcHByaW50LnBwcmludChyZXN1bHRbJ2hlYWRlcnMnXSwgd2lkdGg9MzApCi0gICBbKCdEYXRlJywKLSAgICAgJ1NhdCwgMTQgTWF5IDIwMTEgMTI6NDg6NTIgR01UJyksCi0gICAgKCdTZXJ2ZXInLAotICAgICAnQXBhY2hlLzIuMi4xNiAoRGViaWFuKScpLAotICAgICgnQ29udGVudC1EaXNwb3NpdGlvbicsCi0gICAgICdpbmxpbmUnKSwKLSAgICAoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKSwKLSAgICAoJ1RyYW5zZmVyLUVuY29kaW5nJywKLSAgICAgJ2NodW5rZWQnKSwKLSAgICAoJ0NvbnRlbnQtVHlwZScsCi0gICAgICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PSJVVEYtOCInKV0KKyAgID4+PiBwcHJpbnQucHByaW50KHByb2plY3RfaW5mbywgZGVwdGg9Miwgd2lkdGg9NTApCisgICB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAorICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyNSwKKyAgICAgICAgICAgICAnYXV0aG9yJzogJ0dseXBoIExlZmtvd2l0eicsCisgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICdnbHlwaEB0d2lzdGVkbWF0cml4LmNvbScsCisgICAgICAgICAgICAgJ2J1Z3RyYWNrX3VybCc6ICcnLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2NvZGVfa3dhbGl0ZWVfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2RvY3VtZW50YXRpb25faWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2luc3RhbGxhYmlsaXR5X2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbLi4uXSwKKyAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW4gZXh0ZW5zaWJsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyYW1ld29yayBmb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQeXRob24gcHJvZ3JhbW1pbmcsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCBzcGVjaWFsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldHdvcmsgcHJvZ3JhbW1pbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgbXVsdGlwcm90b2NvbCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludGVncmF0aW9uLicsCisgICAgICAgICAgICAgJ2RvY3NfdXJsJzogJycsCisgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS8nLAorICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAorICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCisgICAgICAgICAgICAgJ21haW50YWluZXInOiAnJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcl9lbWFpbCc6ICcnLAorICAgICAgICAgICAgICduYW1lJzogJ1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC8xMi4zLjAnLAorICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAorICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N1bW1hcnknOiAnQW4gYXN5bmNocm9ub3VzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICduZXR3b3JraW5nIGZyYW1ld29yayAnCisgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICd2ZXJzaW9uJzogJzEyLjMuMCd9LAorICAgICd1cmxzJzogW3suLi59LCB7Li4ufV19CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wdHkucnN0IGIvRG9jL2xpYnJhcnkvcHR5LnJzdAppbmRleCAyYjkzODViLi45MGJhZWM1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wdHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B0eS5yc3QKQEAgLTQ1LDYgKzQ1LDkgQEAKICAgIGEgZmlsZSBkZXNjcmlwdG9yLiBUaGUgZGVmYXVsdHMgdHJ5IHRvIHJlYWQgMTAyNCBieXRlcyBlYWNoIHRpbWUgdGhleSBhcmUKICAgIGNhbGxlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIDpmdW5jOmBzcGF3bmAgbm93IHJldHVybnMgdGhlIHN0YXR1cyB2YWx1ZSBmcm9tIDpmdW5jOmBvcy53YWl0cGlkYAorICAgICAgb24gdGhlIGNoaWxkIHByb2Nlc3MuCiAKIEV4YW1wbGUKIC0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0IGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKaW5kZXggMDdkZGMyNS4uYmFlODQ1MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKQEAgLTI4LDcgKzI4LDcgQEAKIAogLi4gZnVuY3Rpb246OiBjb21waWxlKGZpbGUsIGNmaWxlPU5vbmUsIGRmaWxlPU5vbmUsIGRvcmFpc2U9RmFsc2UsIG9wdGltaXplPS0xKQogCi0gICBDb21waWxlIGEgc291cmNlIGZpbGUgdG8gYnl0ZS1jb2RlIGFuZCB3cml0ZSBvdXQgdGhlIGJ5dGUtY29kZSBjYWNoZSAgZmlsZS4KKyAgIENvbXBpbGUgYSBzb3VyY2UgZmlsZSB0byBieXRlLWNvZGUgYW5kIHdyaXRlIG91dCB0aGUgYnl0ZS1jb2RlIGNhY2hlIGZpbGUuCiAgICBUaGUgc291cmNlIGNvZGUgaXMgbG9hZGVkIGZyb20gdGhlIGZpbGUgbmFtZSAqZmlsZSouICBUaGUgIGJ5dGUtY29kZSBpcwogICAgd3JpdHRlbiB0byAqY2ZpbGUqLCB3aGljaCBkZWZhdWx0cyB0byB0aGUgOlBFUDpgMzE0N2AgcGF0aCwgZW5kaW5nIGluCiAgICBgYC5weWNgYCAoYGAucHlvYGAgaWYgb3B0aW1pemF0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIpLgpAQCAtNDEsNiArNDEsMTMgQEAKICAgIGlzIHJhaXNlZC4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcGF0aCB0byBieXRlLWNvbXBpbGVkIGZpbGUsIGkuZS4KICAgIHdoYXRldmVyICpjZmlsZSogdmFsdWUgd2FzIHVzZWQuCiAKKyAgIElmIHRoZSBwYXRoIHRoYXQgKmNmaWxlKiBiZWNvbWVzIChlaXRoZXIgZXhwbGljaXRseSBzcGVjaWZpZWQgb3IgY29tcHV0ZWQpCisgICBpcyBhIHN5bWxpbmsgb3Igbm9uLXJlZ3VsYXIgZmlsZSwgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCB3aWxsIGJlIHJhaXNlZC4KKyAgIFRoaXMgaXMgdG8gYWN0IGFzIGEgd2FybmluZyB0aGF0IGltcG9ydCB3aWxsIHR1cm4gdGhvc2UgcGF0aHMgaW50byByZWd1bGFyCisgICBmaWxlcyBpZiBpdCBpcyBhbGxvd2VkIHRvIHdyaXRlIGJ5dGUtY29tcGlsZWQgZmlsZXMgdG8gdGhvc2UgcGF0aHMuIFRoaXMgaXMKKyAgIGEgc2lkZS1lZmZlY3Qgb2YgaW1wb3J0IHVzaW5nIGZpbGUgcmVuYW1pbmcgdG8gcGxhY2UgdGhlIGZpbmFsIGJ5dGUtY29tcGlsZWQKKyAgIGZpbGUgaW50byBwbGFjZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgZmlsZSB3cml0aW5nIGlzc3Vlcy4KKwogICAgKm9wdGltaXplKiBjb250cm9scyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIGFuZCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWx0LWluCiAgICA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24uICBUaGUgZGVmYXVsdCBvZiBgYC0xYGAgc2VsZWN0cyB0aGUgb3B0aW1pemF0aW9uCiAgICBsZXZlbCBvZiB0aGUgY3VycmVudCBpbnRlcnByZXRlci4KQEAgLTUwLDYgKzU3LDEzIEBACiAgICAgICBkZWZhdWx0IHdhcyAqZmlsZSogKyBgYCdjJ2BgIChgYCdvJ2BgIGlmIG9wdGltaXphdGlvbiB3YXMgZW5hYmxlZCkuCiAgICAgICBBbHNvIGFkZGVkIHRoZSAqb3B0aW1pemUqIHBhcmFtZXRlci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIENoYW5nZWQgY29kZSB0byB1c2UgOm1vZDpgaW1wb3J0bGliYCBmb3IgdGhlIGJ5dGUtY29kZSBjYWNoZSBmaWxlIHdyaXRpbmcuCisgICAgICBUaGlzIG1lYW5zIGZpbGUgY3JlYXRpb24vd3JpdGluZyBzZW1hbnRpY3Mgbm93IG1hdGNoIHdoYXQgOm1vZDpgaW1wb3J0bGliYAorICAgICAgZG9lcywgZS5nLiBwZXJtaXNzaW9ucywgd3JpdGUtYW5kLW1vdmUgc2VtYW50aWNzLCBldGMuIEFsc28gYWRkZWQgdGhlCisgICAgICBjYXZlYXQgdGhhdCA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGlzIHJhaXNlZCBpZiAqY2ZpbGUqIGlzIGEgc3ltbGluayBvcgorICAgICAgbm9uLXJlZ3VsYXIgZmlsZS4KKwogCiAuLiBmdW5jdGlvbjo6IG1haW4oYXJncz1Ob25lKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9weXRob24ucnN0IGIvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdAppbmRleCBiNjdmYmZjLi5mMzA3ZDdkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9weXRob24ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QKQEAgLTI1LDQgKzI1LDMgQEAKICAgIGluc3BlY3QucnN0CiAgICBzaXRlLnJzdAogICAgZnBlY3RsLnJzdAotICAgZGlzdHV0aWxzLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmUucnN0IGIvRG9jL2xpYnJhcnkvcmUucnN0CmluZGV4IGRkNzkwZTcuLjFmYTFjYzAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZS5yc3QKQEAgLTQ4MSw3ICs0ODEsNyBAQAogICAgLi4gbm90ZTo6CiAKICAgICAgIFRoZSBjb21waWxlZCB2ZXJzaW9ucyBvZiB0aGUgbW9zdCByZWNlbnQgcGF0dGVybnMgcGFzc2VkIHRvCi0gICAgICA6ZnVuYzpgcmUubWF0Y2hgLCA6ZnVuYzpgcmUuc2VhcmNoYCBvciA6ZnVuYzpgcmUuY29tcGlsZWAgYXJlIGNhY2hlZCwgc28KKyAgICAgIDpmdW5jOmByZS5jb21waWxlYCBhbmQgdGhlIG1vZHVsZS1sZXZlbCBtYXRjaGluZyBmdW5jdGlvbnMgYXJlIGNhY2hlZCwgc28KICAgICAgIHByb2dyYW1zIHRoYXQgdXNlIG9ubHkgYSBmZXcgcmVndWxhciBleHByZXNzaW9ucyBhdCBhIHRpbWUgbmVlZG4ndCB3b3JyeQogICAgICAgYWJvdXQgY29tcGlsaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAKQEAgLTU4NCw2ICs1ODQsMTYgQEAKICAgIGluc3RlYWQgKHNlZSBhbHNvIDpyZWY6YHNlYXJjaC12cy1tYXRjaGApLgogCiAKKy4uIGZ1bmN0aW9uOjogZnVsbG1hdGNoKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCkKKworICAgSWYgdGhlIHdob2xlICpzdHJpbmcqIG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAqcGF0dGVybiosIHJldHVybiBhCisgICBjb3JyZXNwb25kaW5nIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gLiAgUmV0dXJuIGBgTm9uZWBgIGlmIHRoZQorICAgc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuOyBub3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhCisgICB6ZXJvLWxlbmd0aCBtYXRjaC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBzcGxpdChwYXR0ZXJuLCBzdHJpbmcsIG1heHNwbGl0PTAsIGZsYWdzPTApCiAKICAgIFNwbGl0ICpzdHJpbmcqIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiAqcGF0dGVybiouICBJZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgYXJlCkBAIC03NTUsNyArNzY1LDcgQEAKIAogICAgPj4+IHBhdHRlcm4gPSByZS5jb21waWxlKCJkIikKICAgID4+PiBwYXR0ZXJuLnNlYXJjaCgiZG9nIikgICAgICMgTWF0Y2ggYXQgaW5kZXggMAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCAxKSwgbWF0Y2g9J2QnPgogICAgPj4+IHBhdHRlcm4uc2VhcmNoKCJkb2ciLCAxKSAgIyBObyBtYXRjaDsgc2VhcmNoIGRvZXNuJ3QgaW5jbHVkZSB0aGUgImQiCiAKIApAQCAtNzcyLDEyICs3ODIsMzAgQEAKICAgID4+PiBwYXR0ZXJuID0gcmUuY29tcGlsZSgibyIpCiAgICA+Pj4gcGF0dGVybi5tYXRjaCgiZG9nIikgICAgICAjIE5vIG1hdGNoIGFzICJvIiBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mICJkb2ciLgogICAgPj4+IHBhdHRlcm4ubWF0Y2goImRvZyIsIDEpICAgIyBNYXRjaCBhcyAibyIgaXMgdGhlIDJuZCBjaGFyYWN0ZXIgb2YgImRvZyIuCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDEsIDIpLCBtYXRjaD0nbyc+CiAKICAgIElmIHlvdSB3YW50IHRvIGxvY2F0ZSBhIG1hdGNoIGFueXdoZXJlIGluICpzdHJpbmcqLCB1c2UKICAgIDptZXRoOmB+cmVnZXguc2VhcmNoYCBpbnN0ZWFkIChzZWUgYWxzbyA6cmVmOmBzZWFyY2gtdnMtbWF0Y2hgKS4KIAogCisuLiBtZXRob2Q6OiByZWdleC5mdWxsbWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pCisKKyAgIElmIHRoZSB3aG9sZSAqc3RyaW5nKiBtYXRjaGVzIHRoaXMgcmVndWxhciBleHByZXNzaW9uLCByZXR1cm4gYSBjb3JyZXNwb25kaW5nCisgICA6cmVmOmBtYXRjaCBvYmplY3QgPG1hdGNoLW9iamVjdHM+YC4gIFJldHVybiBgYE5vbmVgYCBpZiB0aGUgc3RyaW5nIGRvZXMgbm90CisgICBtYXRjaCB0aGUgcGF0dGVybjsgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSB6ZXJvLWxlbmd0aCBtYXRjaC4KKworICAgVGhlIG9wdGlvbmFsICpwb3MqIGFuZCAqZW5kcG9zKiBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgdGhlCisgICA6bWV0aDpgfnJlZ2V4LnNlYXJjaGAgbWV0aG9kLgorCisgICA+Pj4gcGF0dGVybiA9IHJlLmNvbXBpbGUoIm9bZ2hdIikKKyAgID4+PiBwYXR0ZXJuLmZ1bGxtYXRjaCgiZG9nIikgICAgICAjIE5vIG1hdGNoIGFzICJvIiBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mICJkb2ciLgorICAgPj4+IHBhdHRlcm4uZnVsbG1hdGNoKCJvZ3JlIikgICAgICMgTm8gbWF0Y2ggYXMgbm90IHRoZSBmdWxsIHN0cmluZyBtYXRjaGVzLgorICAgPj4+IHBhdHRlcm4uZnVsbG1hdGNoKCJkb2dnaWUiLCAxLCAzKSAgICMgTWF0Y2hlcyB3aXRoaW4gZ2l2ZW4gbGltaXRzLgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMSwgMyksIG1hdGNoPSdvZyc+CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IHJlZ2V4LnNwbGl0KHN0cmluZywgbWF4c3BsaXQ9MCkKIAogICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgc3BsaXRgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgcGF0dGVybi4KQEAgLTExMzksNyArMTE2Nyw3IEBACiAKICAgID4+PiByZS5tYXRjaCgiYyIsICJhYmNkZWYiKSAgIyBObyBtYXRjaAogICAgPj4+IHJlLnNlYXJjaCgiYyIsICJhYmNkZWYiKSAjIE1hdGNoCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDIsIDMpLCBtYXRjaD0nYyc+CiAKIFJlZ3VsYXIgZXhwcmVzc2lvbnMgYmVnaW5uaW5nIHdpdGggYGAnXidgYCBjYW4gYmUgdXNlZCB3aXRoIDpmdW5jOmBzZWFyY2hgIHRvCiByZXN0cmljdCB0aGUgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nOjoKQEAgLTExNDcsNyArMTE3NSw3IEBACiAgICA+Pj4gcmUubWF0Y2goImMiLCAiYWJjZGVmIikgICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goIl5jIiwgImFiY2RlZiIpICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goIl5hIiwgImFiY2RlZiIpICAjIE1hdGNoCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDEpLCBtYXRjaD0nYSc+CiAKIE5vdGUgaG93ZXZlciB0aGF0IGluIDpjb25zdDpgTVVMVElMSU5FYCBtb2RlIDpmdW5jOmBtYXRjaGAgb25seSBtYXRjaGVzIGF0IHRoZQogYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcsIHdoZXJlYXMgdXNpbmcgOmZ1bmM6YHNlYXJjaGAgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgpAQCAtMTE1NSw3ICsxMTgzLDcgQEAKIAogICAgPj4+IHJlLm1hdGNoKCdYJywgJ0FcbkJcblgnLCByZS5NVUxUSUxJTkUpICAjIE5vIG1hdGNoCiAgICA+Pj4gcmUuc2VhcmNoKCdeWCcsICdBXG5CXG5YJywgcmUuTVVMVElMSU5FKSAgIyBNYXRjaAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSg0LCA1KSwgbWF0Y2g9J1gnPgogCiAKIE1ha2luZyBhIFBob25lYm9vawpAQCAtMTI3NCw5ICsxMzAyLDkgQEAKIGZ1bmN0aW9uYWxseSBpZGVudGljYWw6CiAKICAgID4+PiByZS5tYXRjaChyIlxXKC4pXDFcVyIsICIgZmYgIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNCksIG1hdGNoPScgZmYgJz4KICAgID4+PiByZS5tYXRjaCgiXFxXKC4pXFwxXFxXIiwgIiBmZiAiKQotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA0KSwgbWF0Y2g9JyBmZiAnPgogCiBXaGVuIG9uZSB3YW50cyB0byBtYXRjaCBhIGxpdGVyYWwgYmFja3NsYXNoLCBpdCBtdXN0IGJlIGVzY2FwZWQgaW4gdGhlIHJlZ3VsYXIKIGV4cHJlc3Npb24uICBXaXRoIHJhdyBzdHJpbmcgbm90YXRpb24sIHRoaXMgbWVhbnMgYGByIlxcImBgLiAgV2l0aG91dCByYXcgc3RyaW5nCkBAIC0xMjg0LDkgKzEzMTIsOSBAQAogZnVuY3Rpb25hbGx5IGlkZW50aWNhbDoKIAogICAgPj4+IHJlLm1hdGNoKHIiXFwiLCByIlxcIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdcXCc+CiAgICA+Pj4gcmUubWF0Y2goIlxcXFwiLCByIlxcIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdcXCc+CiAKIAogV3JpdGluZyBhIFRva2VuaXplcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0IGIvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CmluZGV4IDExMzQ2MTkuLjY5MjMxMGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKQEAgLTE5MCwyOCArMTkwLDMyIEBACiAKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSdzCiBoaXN0b3J5IHJlYWRpbmcgYW5kIHdyaXRpbmcgZnVuY3Rpb25zIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBhbmQgc2F2ZSBhIGhpc3RvcnkKLWZpbGUgbmFtZWQgOmZpbGU6YC5weWhpc3RgIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFRoZSBjb2RlIGJlbG93IHdvdWxkCi1ub3JtYWxseSBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBpbnRlcmFjdGl2ZSBzZXNzaW9ucyBmcm9tIHRoZSB1c2VyJ3MKLTplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuIDo6CitmaWxlIG5hbWVkIDpmaWxlOmAucHl0aG9uX2hpc3RvcnlgIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFRoZSBjb2RlCitiZWxvdyB3b3VsZCBub3JtYWxseSBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBpbnRlcmFjdGl2ZSBzZXNzaW9ucworZnJvbSB0aGUgdXNlcidzIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuIDo6CiAKKyAgIGltcG9ydCBhdGV4aXQKICAgIGltcG9ydCBvcwogICAgaW1wb3J0IHJlYWRsaW5lCi0gICBoaXN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi5weWhpc3QiKQorCisgICBoaXN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi5weXRob25faGlzdG9yeSIpCiAgICB0cnk6CiAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCiAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgcGFzcwotICAgaW1wb3J0IGF0ZXhpdAorCiAgICBhdGV4aXQucmVnaXN0ZXIocmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlLCBoaXN0ZmlsZSkKLSAgIGRlbCBvcywgaGlzdGZpbGUKKworVGhpcyBjb2RlIGlzIGFjdHVhbGx5IGF1dG9tYXRpY2FsbHkgcnVuIHdoZW4gUHl0aG9uIGlzIHJ1biBpbgorOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAgKHNlZSA6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KIAogVGhlIGZvbGxvd2luZyBleGFtcGxlIGV4dGVuZHMgdGhlIDpjbGFzczpgY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGVgIGNsYXNzIHRvCiBzdXBwb3J0IGhpc3Rvcnkgc2F2ZS9yZXN0b3JlLiA6OgogCi0gICBpbXBvcnQgY29kZQotICAgaW1wb3J0IHJlYWRsaW5lCiAgICBpbXBvcnQgYXRleGl0CisgICBpbXBvcnQgY29kZQogICAgaW1wb3J0IG9zCisgICBpbXBvcnQgcmVhZGxpbmUKIAogICAgY2xhc3MgSGlzdG9yeUNvbnNvbGUoY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbHM9Tm9uZSwgZmlsZW5hbWU9Ijxjb25zb2xlPiIsCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QgYi9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QKaW5kZXggZWQ4NTg1MC4uZjgxMTJjYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdApAQCAtNzQsNiArNzQsMjcgQEAKICAgIGBgc2V0cmxpbWl0YGAgbWF5IGFsc28gcmFpc2UgOmV4YzpgZXJyb3JgIGlmIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxsCiAgICBmYWlscy4KIAorLi4gZnVuY3Rpb246OiBwcmxpbWl0KHBpZCwgcmVzb3VyY2VbLCBsaW1pdHNdKQorCisgICBDb21iaW5lcyA6ZnVuYzpgc2V0cmxpbWl0YCBhbmQgOmZ1bmM6YGdldHJsaW1pdGAgaW4gb25lIGZ1bmN0aW9uIGFuZAorICAgc3VwcG9ydHMgdG8gZ2V0IGFuZCBzZXQgdGhlIHJlc291cmNlcyBsaW1pdHMgb2YgYW4gYXJiaXRyYXJ5IHByb2Nlc3MuIElmCisgICAqcGlkKiBpcyAwLCB0aGVuIHRoZSBjYWxsIGFwcGxpZXMgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzcy4gKnJlc291cmNlKiBhbmQKKyAgICpsaW1pdHMqIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiA6ZnVuYzpgc2V0cmxpbWl0YCwgZXhjZXB0IHRoYXQKKyAgICpsaW1pdHMqIGlzIG9wdGlvbmFsLgorCisgICBXaGVuICpsaW1pdHMqIGlzIG5vdCBnaXZlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgKnJlc291cmNlKiBsaW1pdCBvZiB0aGUKKyAgIHByb2Nlc3MgKnBpZCouIFdoZW4gKmxpbWl0cyogaXMgZ2l2ZW4gdGhlICpyZXNvdXJjZSogbGltaXQgb2YgdGhlIHByb2Nlc3MgaXMKKyAgIHNldCBhbmQgdGhlIGZvcm1lciByZXNvdXJjZSBsaW1pdCBpcyByZXR1cm5lZC4KKworICAgUmFpc2VzIDpleGM6YFByb2Nlc3NMb29rdXBFcnJvcmAgd2hlbiAqcGlkKiBjYW4ndCBiZSBmb3VuZCBhbmQKKyAgIDpleGM6YFBlcm1pc3Npb25FcnJvcmAgd2hlbiB0aGUgdXNlciBkb2Vzbid0IGhhdmUgYGBDQVBfU1lTX1JFU09VUkNFYGAgZm9yCisgICB0aGUgcHJvY2Vzcy4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMzYgb3IgbGF0ZXIgd2l0aCBnbGliYyAyLjEzIG9yIGxhdGVyCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZXNlIHN5bWJvbHMgZGVmaW5lIHJlc291cmNlcyB3aG9zZSBjb25zdW1wdGlvbiBjYW4gYmUgY29udHJvbGxlZCB1c2luZyB0aGUKIDpmdW5jOmBzZXRybGltaXRgIGFuZCA6ZnVuYzpgZ2V0cmxpbWl0YCBmdW5jdGlvbnMgZGVzY3JpYmVkIGJlbG93LiBUaGUgdmFsdWVzIG9mCiB0aGVzZSBzeW1ib2xzIGFyZSBleGFjdGx5IHRoZSBjb25zdGFudHMgdXNlZCBieSBDIHByb2dyYW1zLgpAQCAtMTUxLDYgKzE3Miw4MCBAQAogICAgVGhlIG1heGltdW0gYXJlYSAoaW4gYnl0ZXMpIG9mIGFkZHJlc3Mgc3BhY2Ugd2hpY2ggbWF5IGJlIHRha2VuIGJ5IHRoZSBwcm9jZXNzLgogCiAKKy4uIGRhdGE6OiBSTElNSVRfTVNHUVVFVUUKKworICAgVGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgZm9yIFBPU0lYIG1lc3NhZ2UgcXVldWVzLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi44IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogUkxJTUlUX05JQ0UKKworICAgVGhlIGNlaWxpbmcgZm9yIHRoZSBwcm9jZXNzJ3MgbmljZSBsZXZlbCAoY2FsY3VsYXRlZCBhcyAyMCAtIHJsaW1fY3VyKS4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMTIgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfUlRQUklPCisKKyAgIFRoZSBjZWlsaW5nIG9mIHRoZSByZWFsLXRpbWUgcHJpb3JpdHkuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42LjEyIG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogUkxJTUlUX1JUVElNRQorCisgICBUaGUgdGltZSBsaW1pdCAoaW4gbWljcm9zZWNvbmRzKSBvbiBDUFUgdGltZSB0aGF0IGEgcHJvY2VzcyBjYW4gc3BlbmQKKyAgIHVuZGVyIHJlYWwtdGltZSBzY2hlZHVsaW5nIHdpdGhvdXQgbWFraW5nIGEgYmxvY2tpbmcgc3lzY2FsbC4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMjUgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfU0lHUEVORElORworCisgICBUaGUgbnVtYmVyIG9mIHNpZ25hbHMgd2hpY2ggdGhlIHByb2Nlc3MgbWF5IHF1ZXVlLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi44IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFJMSU1JVF9TQlNJWkUKKworICAgVGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIHNvY2tldCBidWZmZXIgdXNhZ2UgZm9yIHRoaXMgdXNlci4KKyAgIFRoaXMgbGltaXRzIHRoZSBhbW91bnQgb2YgbmV0d29yayBtZW1vcnksIGFuZCBoZW5jZSB0aGUgYW1vdW50IG9mIG1idWZzLAorICAgdGhhdCB0aGlzIHVzZXIgbWF5IGhvbGQgYXQgYW55IHRpbWUuCisKKyAgIEF2YWlsYWJpbGl0eTogRnJlZUJTRCA5IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFJMSU1JVF9TV0FQCisKKyAgIFRoZSBtYXhpbXVtIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgc3dhcCBzcGFjZSB0aGF0IG1heSBiZSByZXNlcnZlZCBvcgorICAgdXNlZCBieSBhbGwgb2YgdGhpcyB1c2VyIGlkJ3MgcHJvY2Vzc2VzLgorICAgVGhpcyBsaW1pdCBpcyBlbmZvcmNlZCBvbmx5IGlmIGJpdCAxIG9mIHRoZSB2bS5vdmVyY29tbWl0IHN5c2N0bCBpcyBzZXQuCisgICBQbGVhc2Ugc2VlIDptYW5wYWdlOmB0dW5pbmcoNylgIGZvciBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoaXMgc3lzY3RsLgorCisgICBBdmFpbGFiaWxpdHk6IEZyZWVCU0QgOSBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBSTElNSVRfTlBUUworCisgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgcHNldWRvLXRlcm1pbmFscyBjcmVhdGVkIGJ5IHRoaXMgdXNlciBpZC4KKworICAgQXZhaWxhYmlsaXR5OiBGcmVlQlNEIDkgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBSZXNvdXJjZSBVc2FnZQogLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0IGIvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0CmluZGV4IDYzMzA4OGQuLjllZDAxYzcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QKQEAgLTI3LDE4ICsyNywxMCBAQAogICAgcmVhZGxpbmUuX19uYW1lX18gICAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgKICAgID4+PiByZWFkbGluZS4KIAotVGhlIDptb2Q6YHJsY29tcGxldGVyYCBtb2R1bGUgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIFB5dGhvbidzIGludGVyYWN0aXZlCi1tb2RlLiAgQSB1c2VyIGNhbiBhZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBoaXMgb3IgaGVyIGluaXRpYWxpemF0aW9uIGZpbGUKLShpZGVudGlmaWVkIGJ5IHRoZSA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBlbnZpcm9ubWVudCB2YXJpYWJsZSkgdG8gZ2V0Ci1hdXRvbWF0aWMgOmtiZDpgVGFiYCBjb21wbGV0aW9uOjoKLQotICAgdHJ5OgotICAgICAgIGltcG9ydCByZWFkbGluZQotICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgIHByaW50KCJNb2R1bGUgcmVhZGxpbmUgbm90IGF2YWlsYWJsZS4iKQotICAgZWxzZToKLSAgICAgICBpbXBvcnQgcmxjb21wbGV0ZXIKLSAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgidGFiOiBjb21wbGV0ZSIpCitUaGUgOm1vZDpgcmxjb21wbGV0ZXJgIG1vZHVsZSBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggUHl0aG9uJ3MKKzpyZWY6YGludGVyYWN0aXZlIG1vZGUgPHR1dC1pbnRlcmFjdGl2ZT5gLiAgVW5sZXNzIFB5dGhvbiBpcyBydW4gd2l0aCB0aGUKKzpvcHRpb246YC1TYCBvcHRpb24sIHRoZSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBpbXBvcnRlZCBhbmQgY29uZmlndXJlZAorKHNlZSA6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KIAogT24gcGxhdGZvcm1zIHdpdGhvdXQgOm1vZDpgcmVhZGxpbmVgLCB0aGUgOmNsYXNzOmBDb21wbGV0ZXJgIGNsYXNzIGRlZmluZWQgYnkKIHRoaXMgbW9kdWxlIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBjdXN0b20gcHVycG9zZXMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ydW5weS5yc3QgYi9Eb2MvbGlicmFyeS9ydW5weS5yc3QKaW5kZXggNjkxOWJjMC4uZWU5ZmJjZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcnVucHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3J1bnB5LnJzdApAQCAtNDQsMjggKzQ0LDIyIEBACiAgICBiZWxvdyBhcmUgZGVmaW5lZCBpbiB0aGUgc3VwcGxpZWQgZGljdGlvbmFyeSwgdGhvc2UgZGVmaW5pdGlvbnMgYXJlCiAgICBvdmVycmlkZGVuIGJ5IDpmdW5jOmBydW5fbW9kdWxlYC4KIAotICAgVGhlIHNwZWNpYWwgZ2xvYmFsIHZhcmlhYmxlcyBgYF9fbmFtZV9fYGAsIGBgX19maWxlX19gYCwgYGBfX2NhY2hlZF9fYGAsCi0gICBgYF9fbG9hZGVyX19gYAotICAgYW5kIGBgX19wYWNrYWdlX19gYCBhcmUgc2V0IGluIHRoZSBnbG9iYWxzIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUKLSAgIGNvZGUgaXMgZXhlY3V0ZWQgKE5vdGUgdGhhdCB0aGlzIGlzIGEgbWluaW1hbCBzZXQgb2YgdmFyaWFibGVzIC0gb3RoZXIKLSAgIHZhcmlhYmxlcyBtYXkgYmUgc2V0IGltcGxpY2l0bHkgYXMgYW4gaW50ZXJwcmV0ZXIgaW1wbGVtZW50YXRpb24gZGV0YWlsKS4KKyAgIFRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMgYGBfX25hbWVfX2BgLCBgYF9fc3BlY19fYGAsIGBgX19maWxlX19gYCwKKyAgIGBgX19jYWNoZWRfX2BgLCBgYF9fbG9hZGVyX19gYCBhbmQgYGBfX3BhY2thZ2VfX2BgIGFyZSBzZXQgaW4gdGhlIGdsb2JhbHMKKyAgIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUgY29kZSBpcyBleGVjdXRlZCAoTm90ZSB0aGF0IHRoaXMgaXMgYQorICAgbWluaW1hbCBzZXQgb2YgdmFyaWFibGVzIC0gb3RoZXIgdmFyaWFibGVzIG1heSBiZSBzZXQgaW1wbGljaXRseSBhcyBhbgorICAgaW50ZXJwcmV0ZXIgaW1wbGVtZW50YXRpb24gZGV0YWlsKS4KIAogICAgYGBfX25hbWVfX2BgIGlzIHNldCB0byAqcnVuX25hbWUqIGlmIHRoaXMgb3B0aW9uYWwgYXJndW1lbnQgaXMgbm90CiAgICA6Y29uc3Q6YE5vbmVgLCB0byBgYG1vZF9uYW1lICsgJy5fX21haW5fXydgYCBpZiB0aGUgbmFtZWQgbW9kdWxlIGlzIGEKICAgIHBhY2thZ2UgYW5kIHRvIHRoZSAqbW9kX25hbWUqIGFyZ3VtZW50IG90aGVyd2lzZS4KIAotICAgYGBfX2ZpbGVfX2BgIGlzIHNldCB0byB0aGUgbmFtZSBwcm92aWRlZCBieSB0aGUgbW9kdWxlIGxvYWRlci4gSWYgdGhlCi0gICBsb2FkZXIgZG9lcyBub3QgbWFrZSBmaWxlbmFtZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIHRoaXMgdmFyaWFibGUgaXMgc2V0Ci0gICB0byA6Y29uc3Q6YE5vbmVgLgorICAgYGBfX3NwZWNfX2BgIHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkgZm9yIHRoZSAqYWN0dWFsbHkqIGltcG9ydGVkCisgICBtb2R1bGUgKHRoYXQgaXMsIGBgX19zcGVjX18ubmFtZWBgIHdpbGwgYWx3YXlzIGJlICptb2RfbmFtZSogb3IKKyAgIGBgbW9kX25hbWUgKyAnLl9fbWFpbl9fYGAsIG5ldmVyICpydW5fbmFtZSopLgogCi0gICBgYF9fY2FjaGVkX19gYCB3aWxsIGJlIHNldCB0byBgYE5vbmVgYC4KLQotICAgYGBfX2xvYWRlcl9fYGAgaXMgc2V0IHRvIHRoZSA6cGVwOmAzMDJgIG1vZHVsZSBsb2FkZXIgdXNlZCB0byByZXRyaWV2ZSB0aGUKLSAgIGNvZGUgZm9yIHRoZSBtb2R1bGUgKFRoaXMgbG9hZGVyIG1heSBiZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFyZAotICAgaW1wb3J0IG1lY2hhbmlzbSkuCi0KLSAgIGBgX19wYWNrYWdlX19gYCBpcyBzZXQgdG8gKm1vZF9uYW1lKiBpZiB0aGUgbmFtZWQgbW9kdWxlIGlzIGEgcGFja2FnZSBhbmQKLSAgIHRvIGBgbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdYGAgb3RoZXJ3aXNlLgorICAgYGBfX2ZpbGVfX2BgLCBgYF9fY2FjaGVkX19gYCwgYGBfX2xvYWRlcl9fYGAgYW5kIGBgX19wYWNrYWdlX19gYCBhcmUKKyAgIDpyZWY6YHNldCBhcyBub3JtYWwgPGltcG9ydC1tb2QtYXR0cnM+YCBiYXNlZCBvbiB0aGUgbW9kdWxlIHNwZWMuCiAKICAgIElmIHRoZSBhcmd1bWVudCAqYWx0ZXJfc3lzKiBpcyBzdXBwbGllZCBhbmQgZXZhbHVhdGVzIHRvIDpjb25zdDpgVHJ1ZWAsCiAgICB0aGVuIGBgc3lzLmFyZ3ZbMF1gYCBpcyB1cGRhdGVkIHdpdGggdGhlIHZhbHVlIG9mIGBgX19maWxlX19gYCBhbmQKQEAgLTgzLDggKzc3LDEzIEBACiAgICAgICBBZGRlZCBhYmlsaXR5IHRvIGV4ZWN1dGUgcGFja2FnZXMgYnkgbG9va2luZyBmb3IgYSBgYF9fbWFpbl9fYGAgc3VibW9kdWxlLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgotICAgICAgQWRkZWQgYGBfX2NhY2hlZF9fYGAgZ2xvYmFsIHZhcmlhYmxlIChzZWUgOlBFUDpgMzE0N2ApLgorICAgICAgQWRkZWQgYGBfX2NhY2hlZF9fYGAgZ2xvYmFsIHZhcmlhYmxlIChzZWUgOnBlcDpgMzE0N2ApLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXBkYXRlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbW9kdWxlIHNwZWMgZmVhdHVyZSBhZGRlZCBieQorICAgICAgOnBlcDpgNDUxYC4gVGhpcyBhbGxvd3MgYGBfX2NhY2hlZF9fYGAgdG8gYmUgc2V0IGNvcnJlY3RseSBmb3IgbW9kdWxlcworICAgICAgcnVuIHRoaXMgd2F5LCBhcyB3ZWxsIGFzIGVuc3VyaW5nIHRoZSByZWFsIG1vZHVsZSBuYW1lIGlzIGFsd2F5cworICAgICAgYWNjZXNzaWJsZSBhcyBgYF9fc3BlY19fLm5hbWVgYC4KIAogLi4gZnVuY3Rpb246OiBydW5fcGF0aChmaWxlX3BhdGgsIGluaXRfZ2xvYmFscz1Ob25lLCBydW5fbmFtZT1Ob25lKQogCkBAIC0xMDgsMjMgKzEwNywyOCBAQAogICAgYmVsb3cgYXJlIGRlZmluZWQgaW4gdGhlIHN1cHBsaWVkIGRpY3Rpb25hcnksIHRob3NlIGRlZmluaXRpb25zIGFyZQogICAgb3ZlcnJpZGRlbiBieSA6ZnVuYzpgcnVuX3BhdGhgLgogCi0gICBUaGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzIGBgX19uYW1lX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fbG9hZGVyX19gYAotICAgYW5kIGBgX19wYWNrYWdlX19gYCBhcmUgc2V0IGluIHRoZSBnbG9iYWxzIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUKLSAgIGNvZGUgaXMgZXhlY3V0ZWQgKE5vdGUgdGhhdCB0aGlzIGlzIGEgbWluaW1hbCBzZXQgb2YgdmFyaWFibGVzIC0gb3RoZXIKLSAgIHZhcmlhYmxlcyBtYXkgYmUgc2V0IGltcGxpY2l0bHkgYXMgYW4gaW50ZXJwcmV0ZXIgaW1wbGVtZW50YXRpb24gZGV0YWlsKS4KKyAgIFRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMgYGBfX25hbWVfX2BgLCBgYF9fc3BlY19fYGAsIGBgX19maWxlX19gYCwKKyAgIGBgX19jYWNoZWRfX2BgLCBgYF9fbG9hZGVyX19gYCBhbmQgYGBfX3BhY2thZ2VfX2BgIGFyZSBzZXQgaW4gdGhlIGdsb2JhbHMKKyAgIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUgY29kZSBpcyBleGVjdXRlZCAoTm90ZSB0aGF0IHRoaXMgaXMgYQorICAgbWluaW1hbCBzZXQgb2YgdmFyaWFibGVzIC0gb3RoZXIgdmFyaWFibGVzIG1heSBiZSBzZXQgaW1wbGljaXRseSBhcyBhbgorICAgaW50ZXJwcmV0ZXIgaW1wbGVtZW50YXRpb24gZGV0YWlsKS4KIAogICAgYGBfX25hbWVfX2BgIGlzIHNldCB0byAqcnVuX25hbWUqIGlmIHRoaXMgb3B0aW9uYWwgYXJndW1lbnQgaXMgbm90CiAgICA6Y29uc3Q6YE5vbmVgIGFuZCB0byBgYCc8cnVuX3BhdGg+J2BgIG90aGVyd2lzZS4KIAotICAgYGBfX2ZpbGVfX2BgIGlzIHNldCB0byB0aGUgbmFtZSBwcm92aWRlZCBieSB0aGUgbW9kdWxlIGxvYWRlci4gSWYgdGhlCi0gICBsb2FkZXIgZG9lcyBub3QgbWFrZSBmaWxlbmFtZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIHRoaXMgdmFyaWFibGUgaXMgc2V0Ci0gICB0byA6Y29uc3Q6YE5vbmVgLiBGb3IgYSBzaW1wbGUgc2NyaXB0LCB0aGlzIHdpbGwgYmUgc2V0IHRvIGBgZmlsZV9wYXRoYGAuCisgICBJZiB0aGUgc3VwcGxpZWQgcGF0aCBkaXJlY3RseSByZWZlcmVuY2VzIGEgc2NyaXB0IGZpbGUgKHdoZXRoZXIgYXMgc291cmNlCisgICBvciBhcyBwcmVjb21waWxlZCBieXRlIGNvZGUpLCB0aGVuIGBgX19maWxlX19gYCB3aWxsIGJlIHNldCB0byB0aGUKKyAgIHN1cHBsaWVkIHBhdGgsIGFuZCBgYF9fc3BlY19fYGAsIGBgX19jYWNoZWRfX2BgLCBgYF9fbG9hZGVyX19gYCBhbmQKKyAgIGBgX19wYWNrYWdlX19gYCB3aWxsIGFsbCBiZSBzZXQgdG8gOmNvbnN0OmBOb25lYC4KIAotICAgYGBfX2xvYWRlcl9fYGAgaXMgc2V0IHRvIHRoZSA6cGVwOmAzMDJgIG1vZHVsZSBsb2FkZXIgdXNlZCB0byByZXRyaWV2ZSB0aGUKLSAgIGNvZGUgZm9yIHRoZSBtb2R1bGUgKFRoaXMgbG9hZGVyIG1heSBiZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFyZAotICAgaW1wb3J0IG1lY2hhbmlzbSkuIEZvciBhIHNpbXBsZSBzY3JpcHQsIHRoaXMgd2lsbCBiZSBzZXQgdG8gOmNvbnN0OmBOb25lYC4KKyAgIGBgX19zcGVjX19gYCB3aWxsIGJlIHNldCB0byA6Y29uc3Q6YE5vbmVgIGlmIHRoZSBzdXBwbGllZCBwYXRoIGlzIGEKKyAgIGRpcmVjdCBwYXRoIHRvIGEgc2NyaXB0IChhcyBzb3VyY2Ugb3IgYXMgcHJlY29tcGlsZWQgYnl0ZWNvZGUpLgogCi0gICBgYF9fcGFja2FnZV9fYGAgaXMgc2V0IHRvIGBgX19uYW1lX18ucnBhcnRpdGlvbignLicpWzBdYGAuCisgICBJZiB0aGUgc3VwcGxpZWQgcGF0aCBpcyBhIHJlZmVyZW5jZSB0byBhIHZhbGlkIHN5cy5wYXRoIGVudHJ5LCB0aGVuCisgICBgYF9fc3BlY19fYGAgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseSBmb3IgdGhlIGltcG9ydGVkIGBgX19tYWluX19gYAorICAgbW9kdWxlICh0aGF0IGlzLCBgYF9fc3BlY19fLm5hbWVgYCB3aWxsIGFsd2F5cyBiZSBgYF9fbWFpbl9fYGApLgorICAgYGBfX2ZpbGVfX2BgLCBgYF9fY2FjaGVkX19gYCwgYGBfX2xvYWRlcl9fYGAgYW5kIGBgX19wYWNrYWdlX19gYCB3aWxsIGJlCisgICA6cmVmOmBzZXQgYXMgbm9ybWFsIDxpbXBvcnQtbW9kLWF0dHJzPmAgYmFzZWQgb24gdGhlIG1vZHVsZSBzcGVjLgogCiAgICBBIG51bWJlciBvZiBhbHRlcmF0aW9ucyBhcmUgYWxzbyBtYWRlIHRvIHRoZSA6bW9kOmBzeXNgIG1vZHVsZS4gRmlyc3RseSwKICAgIGBgc3lzLnBhdGhgYCBtYXkgYmUgYWx0ZXJlZCBhcyBkZXNjcmliZWQgYWJvdmUuIGBgc3lzLmFyZ3ZbMF1gYCBpcyB1cGRhdGVkCkBAIC0xNDEsNiArMTQ1LDEyIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXBkYXRlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbW9kdWxlIHNwZWMgZmVhdHVyZSBhZGRlZCBieQorICAgICAgOnBlcDpgNDUxYC4gVGhpcyBhbGxvd3MgYGBfX2NhY2hlZF9fYGAgdG8gYmUgc2V0IGNvcnJlY3RseSBpbiB0aGUKKyAgICAgIGNhc2Ugd2hlcmUgYGBfX21haW5fX2BgIGlzIGltcG9ydGVkIGZyb20gYSB2YWxpZCBzeXMucGF0aCBlbnRyeSByYXRoZXIKKyAgICAgIHRoYW4gYmVpbmcgZXhlY3V0ZWQgZGlyZWN0bHkuCisKIC4uIHNlZWFsc286OgogCiAgICA6cGVwOmAzMzhgIC0gRXhlY3V0aW5nIG1vZHVsZXMgYXMgc2NyaXB0cwpAQCAtMTQ5LDYgKzE1OSw5IEBACiAgICA6cGVwOmAzNjZgIC0gTWFpbiBtb2R1bGUgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cwogICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IE5pY2sgQ29naGxhbi4KIAorICAgOnBlcDpgNDUxYCAtIEEgTW9kdWxlU3BlYyBUeXBlIGZvciB0aGUgSW1wb3J0IFN5c3RlbQorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IEVyaWMgU25vdworCiAgICA6cmVmOmB1c2luZy1vbi1nZW5lcmFsYCAtIENQeXRob24gY29tbWFuZCBsaW5lIGRldGFpbHMKIAogICAgVGhlIDpmdW5jOmBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QgYi9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CmluZGV4IGIxZmQzYTguLjRmYWU4N2UgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdApAQCAtMTQsNiArMTQsMTQgQEAKIEl0IGNhbm5vdCBiZSB1c2VkIG9uIHJlZ3VsYXIgZmlsZXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBmaWxlIGhhcyBncm93biBzaW5jZQogaXQgd2FzIGxhc3QgcmVhZC4KIAorLi4gbm90ZTo6CisKKyAgIFRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSBhbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTworICAgbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZSA6bW9kOmBzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLiBVc2VycyBhcmUKKyAgIGVuY291cmFnZWQgdG8gdXNlIHRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSBpbnN0ZWFkLCB1bmxlc3MgdGhleSB3YW50CisgICBwcmVjaXNlIGNvbnRyb2wgb3ZlciB0aGUgT1MtbGV2ZWwgcHJpbWl0aXZlcyB1c2VkLgorCisKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nOgogCiAKQEAgLTM3LDIxICs0NSwzNyBAQAogICAgaW5jcmVhc2VzIHRoaXMgdmFsdWUsIDpjOmZ1bmM6YGRldnBvbGxgIG1heSByZXR1cm4gYW4KICAgIGluY29tcGxldGUgbGlzdCBvZiBhY3RpdmUgZmlsZSBkZXNjcmlwdG9ycy4KIAorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIC4uIGZ1bmN0aW9uOjogZXBvbGwoc2l6ZWhpbnQ9LTEsIGZsYWdzPTApCiAKICAgIChPbmx5IHN1cHBvcnRlZCBvbiBMaW51eCAyLjUuNDQgYW5kIG5ld2VyLikgUmV0dXJuIGFuIGVkZ2UgcG9sbGluZyBvYmplY3QsCiAgICB3aGljaCBjYW4gYmUgdXNlZCBhcyBFZGdlIG9yIExldmVsIFRyaWdnZXJlZCBpbnRlcmZhY2UgZm9yIEkvTwogICAgZXZlbnRzLiAqc2l6ZWhpbnQqIGlzIGRlcHJlY2F0ZWQgYW5kIGNvbXBsZXRlbHkgaWdub3JlZC4gKmZsYWdzKiBjYW4gYmUgc2V0CiAgICB0byA6Y29uc3Q6YEVQT0xMX0NMT0VYRUNgLCB3aGljaCBjYXVzZXMgdGhlIGVwb2xsIGRlc2NyaXB0b3IgdG8gYmUgY2xvc2VkCi0gICBhdXRvbWF0aWNhbGx5IHdoZW4gOmZ1bmM6YG9zLmV4ZWN2ZWAgaXMgY2FsbGVkLiBTZWUgc2VjdGlvbgotICAgOnJlZjpgZXBvbGwtb2JqZWN0c2AgYmVsb3cgZm9yIHRoZSBtZXRob2RzIHN1cHBvcnRlZCBieSBlcG9sbGluZyBvYmplY3RzLgorICAgYXV0b21hdGljYWxseSB3aGVuIDpmdW5jOmBvcy5leGVjdmVgIGlzIGNhbGxlZC4KIAorICAgU2VlIHRoZSA6cmVmOmBlcG9sbC1vYmplY3RzYCBzZWN0aW9uIGJlbG93IGZvciB0aGUgbWV0aG9kcyBzdXBwb3J0ZWQgYnkKKyAgIGVwb2xsaW5nIG9iamVjdHMuCisKKyAgIGBgZXBvbGxgYCBvYmplY3RzIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbDogd2hlbiB1c2VkIGluIGEKKyAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQsIHRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkCisgICBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4KKworICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgdGhlICpmbGFncyogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgU3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IHBvbGwoKQogCkBAIC02Niw2ICs5MCwxMSBAQAogICAgKE9ubHkgc3VwcG9ydGVkIG9uIEJTRC4pICBSZXR1cm5zIGEga2VybmVsIHF1ZXVlIG9iamVjdDsgc2VlIHNlY3Rpb24KICAgIDpyZWY6YGtxdWV1ZS1vYmplY3RzYCBiZWxvdyBmb3IgdGhlIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IGtxdWV1ZSBvYmplY3RzLgogCisgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjoga2V2ZW50KGlkZW50LCBmaWx0ZXI9S1FfRklMVEVSX1JFQUQsIGZsYWdzPUtRX0VWX0FERCwgZmZsYWdzPTAsIGRhdGE9MCwgdWRhdGE9MCkKIApAQCAtMTQ0LDYgKzE3MywyNyBAQAogb2JqZWN0LgogCiAKKy4uIG1ldGhvZDo6IGRldnBvbGwuY2xvc2UoKQorCisgICBDbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBwb2xsaW5nIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gYXR0cmlidXRlOjogZGV2cG9sbC5jbG9zZWQKKworICAgYGBUcnVlYGAgaWYgdGhlIHBvbGxpbmcgb2JqZWN0IGlzIGNsb3NlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gbWV0aG9kOjogZGV2cG9sbC5maWxlbm8oKQorCisgICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgb2YgdGhlIHBvbGxpbmcgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBkZXZwb2xsLnJlZ2lzdGVyKGZkWywgZXZlbnRtYXNrXSkKIAogICAgUmVnaXN0ZXIgYSBmaWxlIGRlc2NyaXB0b3Igd2l0aCB0aGUgcG9sbGluZyBvYmplY3QuICBGdXR1cmUgY2FsbHMgdG8gdGhlCkBAIC0yNDEsNiArMjkxLDExIEBACiAgICBDbG9zZSB0aGUgY29udHJvbCBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGVwb2xsIG9iamVjdC4KIAogCisuLiBhdHRyaWJ1dGU6OiBlcG9sbC5jbG9zZWQKKworICAgYGBUcnVlYGAgaWYgdGhlIGVwb2xsIG9iamVjdCBpcyBjbG9zZWQuCisKKwogLi4gbWV0aG9kOjogZXBvbGwuZmlsZW5vKCkKIAogICAgUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIG9mIHRoZSBjb250cm9sIGZkLgpAQCAtMjU4LDcgKzMxMyw3IEBACiAKIC4uIG1ldGhvZDo6IGVwb2xsLm1vZGlmeShmZCwgZXZlbnRtYXNrKQogCi0gICBNb2RpZnkgYSByZWdpc3RlciBmaWxlIGRlc2NyaXB0b3IuCisgICBNb2RpZnkgYSByZWdpc3RlcmVkIGZpbGUgZGVzY3JpcHRvci4KIAogCiAuLiBtZXRob2Q6OiBlcG9sbC51bnJlZ2lzdGVyKGZkKQpAQCAtMzYwLDYgKzQxNSwxMSBAQAogICAgQ2xvc2UgdGhlIGNvbnRyb2wgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBrcXVldWUgb2JqZWN0LgogCiAKKy4uIGF0dHJpYnV0ZTo6IGtxdWV1ZS5jbG9zZWQKKworICAgYGBUcnVlYGAgaWYgdGhlIGtxdWV1ZSBvYmplY3QgaXMgY2xvc2VkLgorCisKIC4uIG1ldGhvZDo6IGtxdWV1ZS5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgb2YgdGhlIGNvbnRyb2wgZmQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zZWxlY3RvcnMucnN0IGIvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODM3N2M4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdApAQCAtMCwwICsxLDI1NyBAQAorOm1vZDpgc2VsZWN0b3JzYCAtLSBIaWdoLWxldmVsIEkvTyBtdWx0aXBsZXhpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHNlbGVjdG9ycworICAgOnN5bm9wc2lzOiBIaWdoLWxldmVsIEkvTyBtdWx0aXBsZXhpbmcuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIGFsbG93cyBoaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUKKzptb2Q6YHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuIFVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGlzIG1vZHVsZQoraW5zdGVhZCwgdW5sZXNzIHRoZXkgd2FudCBwcmVjaXNlIGNvbnRyb2wgb3ZlciB0aGUgT1MtbGV2ZWwgcHJpbWl0aXZlcyB1c2VkLgorCitJdCBkZWZpbmVzIGEgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGFic3RyYWN0IGJhc2UgY2xhc3MsIGFsb25nIHdpdGggc2V2ZXJhbAorY29uY3JldGUgaW1wbGVtZW50YXRpb25zICg6Y2xhc3M6YEtxdWV1ZVNlbGVjdG9yYCwgOmNsYXNzOmBFcG9sbFNlbGVjdG9yYC4uLiksCit0aGF0IGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yIEkvTyByZWFkaW5lc3Mgbm90aWZpY2F0aW9uIG9uIG11bHRpcGxlIGZpbGUKK29iamVjdHMuIEluIHRoZSBmb2xsb3dpbmcsICJmaWxlIG9iamVjdCIgcmVmZXJzIHRvIGFueSBvYmplY3Qgd2l0aCBhCis6bWV0aDpgZmlsZW5vKClgIG1ldGhvZCwgb3IgYSByYXcgZmlsZSBkZXNjcmlwdG9yLiBTZWUgOnRlcm06YGZpbGUgb2JqZWN0YC4KKworOmNsYXNzOmBEZWZhdWx0U2VsZWN0b3JgIGlzIGFuIGFsaWFzIHRvIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbgorYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtOiB0aGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yIG1vc3QKK3VzZXJzLgorCisuLiBub3RlOjoKKyAgIFRoZSB0eXBlIG9mIGZpbGUgb2JqZWN0cyBzdXBwb3J0ZWQgZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm06IG9uIFdpbmRvd3MsCisgICBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQsIGJ1dCBub3QgcGlwZXMsIHdoZXJlYXMgb24gVW5peCwgYm90aCBhcmUgc3VwcG9ydGVkCisgICAoc29tZSBvdGhlciB0eXBlcyBtYXkgYmUgc3VwcG9ydGVkIGFzIHdlbGwsIHN1Y2ggYXMgZmlmb3Mgb3Igc3BlY2lhbCBmaWxlCisgICBkZXZpY2VzKS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDptb2Q6YHNlbGVjdGAKKyAgICAgIExvdy1sZXZlbCBJL08gbXVsdGlwbGV4aW5nIG1vZHVsZS4KKworCitDbGFzc2VzCistLS0tLS0tCisKK0NsYXNzZXMgaGllcmFyY2h5OjoKKworICAgQmFzZVNlbGVjdG9yCisgICArLS0gU2VsZWN0U2VsZWN0b3IKKyAgICstLSBQb2xsU2VsZWN0b3IKKyAgICstLSBFcG9sbFNlbGVjdG9yCisgICArLS0gS3F1ZXVlU2VsZWN0b3IKKworCitJbiB0aGUgZm9sbG93aW5nLCAqZXZlbnRzKiBpcyBhIGJpdHdpc2UgbWFzayBpbmRpY2F0aW5nIHdoaWNoIEkvTyBldmVudHMgc2hvdWxkCitiZSB3YWl0ZWQgZm9yIG9uIGEgZ2l2ZW4gZmlsZSBvYmplY3QuIEl0IGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBjb25zdGFudHMKK2JlbG93OgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IENvbnN0YW50ICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDpjb25zdDpgRVZFTlRfUkVBRGAgICB8IEF2YWlsYWJsZSBmb3IgcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgRVZFTlRfV1JJVEVgICB8IEF2YWlsYWJsZSBmb3Igd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworLi4gY2xhc3M6OiBTZWxlY3RvcktleQorCisgICBBIDpjbGFzczpgU2VsZWN0b3JLZXlgIGlzIGEgOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgdXNlZCB0bworICAgYXNzb2NpYXRlIGEgZmlsZSBvYmplY3QgdG8gaXRzIHVuZGVybHlpbmcgZmlsZSBkZWNyaXB0b3IsIHNlbGVjdGVkIGV2ZW50CisgICBtYXNrIGFuZCBhdHRhY2hlZCBkYXRhLiBJdCBpcyByZXR1cm5lZCBieSBzZXZlcmFsIDpjbGFzczpgQmFzZVNlbGVjdG9yYAorICAgbWV0aG9kcy4KKworICAgLi4gYXR0cmlidXRlOjogZmlsZW9iagorCisgICAgICBGaWxlIG9iamVjdCByZWdpc3RlcmVkLgorCisgICAuLiBhdHRyaWJ1dGU6OiBmZAorCisgICAgICBVbmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci4KKworICAgLi4gYXR0cmlidXRlOjogZXZlbnRzCisKKyAgICAgIEV2ZW50cyB0aGF0IG11c3QgYmUgd2FpdGVkIGZvciBvbiB0aGlzIGZpbGUgb2JqZWN0LgorCisgICAuLiBhdHRyaWJ1dGU6OiBkYXRhCisKKyAgICAgIE9wdGlvbmFsIG9wYXF1ZSBkYXRhIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWxlIG9iamVjdDogZm9yIGV4YW1wbGUsIHRoaXMKKyAgICAgIGNvdWxkIGJlIHVzZWQgdG8gc3RvcmUgYSBwZXItY2xpZW50IHNlc3Npb24gSUQuCisKKworLi4gY2xhc3M6OiBCYXNlU2VsZWN0b3IKKworICAgQSA6Y2xhc3M6YEJhc2VTZWxlY3RvcmAgaXMgdXNlZCB0byB3YWl0IGZvciBJL08gZXZlbnQgcmVhZGluZXNzIG9uIG11bHRpcGxlCisgICBmaWxlIG9iamVjdHMuIEl0IHN1cHBvcnRzIGZpbGUgc3RyZWFtIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBhCisgICBtZXRob2QgdG8gd2FpdCBmb3IgSS9PIGV2ZW50cyBvbiB0aG9zZSBzdHJlYW1zLCB3aXRoIGFuIG9wdGlvbmFsIHRpbWVvdXQuCisgICBJdCdzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MsIHNvIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuIFVzZQorICAgOmNsYXNzOmBEZWZhdWx0U2VsZWN0b3JgIGluc3RlYWQsIG9yIG9uZSBvZiA6Y2xhc3M6YFNlbGVjdFNlbGVjdG9yYCwKKyAgIDpjbGFzczpgS3F1ZXVlU2VsZWN0b3JgIGV0Yy4gaWYgeW91IHdhbnQgdG8gc3BlY2lmaWNhbGx5IHVzZSBhbgorICAgaW1wbGVtZW50YXRpb24sIGFuZCB5b3VyIHBsYXRmb3JtIHN1cHBvcnRzIGl0LgorICAgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGFuZCBpdHMgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgdGhlCisgICA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCBwcm90b2NvbC4KKworICAgLi4gbWV0aG9kOjogcmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpCisKKyAgICAgIFJlZ2lzdGVyIGEgZmlsZSBvYmplY3QgZm9yIHNlbGVjdGlvbiwgbW9uaXRvcmluZyBpdCBmb3IgSS9PIGV2ZW50cy4KKworICAgICAgKmZpbGVvYmoqIGlzIHRoZSBmaWxlIG9iamVjdCB0byBtb25pdG9yLiAgSXQgbWF5IGVpdGhlciBiZSBhbiBpbnRlZ2VyCisgICAgICBmaWxlIGRlc2NyaXB0b3Igb3IgYW4gb2JqZWN0IHdpdGggYSBgYGZpbGVubygpYGAgbWV0aG9kLgorICAgICAgKmV2ZW50cyogaXMgYSBiaXR3aXNlIG1hc2sgb2YgZXZlbnRzIHRvIG1vbml0b3IuCisgICAgICAqZGF0YSogaXMgYW4gb3BhcXVlIG9iamVjdC4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbmV3IDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlLCBvciByYWlzZXMgYQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaW4gY2FzZSBvZiBpbnZhbGlkIGV2ZW50IG1hc2sgb3IgZmlsZSBkZXNjcmlwdG9yLCBvcgorICAgICAgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSBmaWxlIG9iamVjdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCisKKyAgIC4uIG1ldGhvZDo6IHVucmVnaXN0ZXIoZmlsZW9iaikKKworICAgICAgVW5yZWdpc3RlciBhIGZpbGUgb2JqZWN0IGZyb20gc2VsZWN0aW9uLCByZW1vdmluZyBpdCBmcm9tIG1vbml0b3JpbmcuIEEKKyAgICAgIGZpbGUgb2JqZWN0IHNoYWxsIGJlIHVucmVnaXN0ZXJlZCBwcmlvciB0byBiZWluZyBjbG9zZWQuCisKKyAgICAgICpmaWxlb2JqKiBtdXN0IGJlIGEgZmlsZSBvYmplY3QgcHJldmlvdXNseSByZWdpc3RlcmVkLgorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UsIG9yIHJhaXNlcyBhCisgICAgICA6ZXhjOmBLZXlFcnJvcmAgaWYgKmZpbGVvYmoqIGlzIG5vdCByZWdpc3RlcmVkLiAgSXQgd2lsbCByYWlzZQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaWYgKmZpbGVvYmoqIGlzIGludmFsaWQgKGUuZy4gaXQgaGFzIG5vIGBgZmlsZW5vKClgYAorICAgICAgbWV0aG9kIG9yIGl0cyBgYGZpbGVubygpYGAgbWV0aG9kIGhhcyBhbiBpbnZhbGlkIHJldHVybiB2YWx1ZSkuCisKKyAgIC4uIG1ldGhvZDo6IG1vZGlmeShmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSkKKworICAgICAgQ2hhbmdlIGEgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdCdzIG1vbml0b3JlZCBldmVudHMgb3IgYXR0YWNoZWQgZGF0YS4KKworICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIDptZXRoOmBCYXNlU2VsZWN0b3IudW5yZWdpc3RlcihmaWxlb2JqKWAgZm9sbG93ZWQKKyAgICAgIGJ5IDptZXRoOmBCYXNlU2VsZWN0b3IucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKWAsIGV4Y2VwdCB0aGF0IGl0CisgICAgICBjYW4gYmUgaW1wbGVtZW50ZWQgbW9yZSBlZmZpY2llbnRseS4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbmV3IDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlLCBvciByYWlzZXMgYQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaW4gY2FzZSBvZiBpbnZhbGlkIGV2ZW50IG1hc2sgb3IgZmlsZSBkZXNjcmlwdG9yLCBvcgorICAgICAgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSBmaWxlIG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZC4KKworICAgLi4gbWV0aG9kOjogc2VsZWN0KHRpbWVvdXQ9Tm9uZSkKKworICAgICAgV2FpdCB1bnRpbCBzb21lIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3RzIGJlY29tZSByZWFkeSwgb3IgdGhlIHRpbWVvdXQKKyAgICAgIGV4cGlyZXMuCisKKyAgICAgIElmIGBgdGltZW91dCA+IDBgYCwgdGhpcyBzcGVjaWZpZXMgdGhlIG1heGltdW0gd2FpdCB0aW1lLCBpbiBzZWNvbmRzLgorICAgICAgSWYgYGB0aW1lb3V0IDw9IDBgYCwgdGhlIGNhbGwgd29uJ3QgYmxvY2ssIGFuZCB3aWxsIHJlcG9ydCB0aGUgY3VycmVudGx5CisgICAgICByZWFkeSBmaWxlIG9iamVjdHMuCisgICAgICBJZiAqdGltZW91dCogaXMgYGBOb25lYGAsIHRoZSBjYWxsIHdpbGwgYmxvY2sgdW50aWwgYSBtb25pdG9yZWQgZmlsZSBvYmplY3QKKyAgICAgIGJlY29tZXMgcmVhZHkuCisKKyAgICAgIFRoaXMgcmV0dXJucyBhIGxpc3Qgb2YgYGAoa2V5LCBldmVudHMpYGAgdHVwbGVzLCBvbmUgZm9yIGVhY2ggcmVhZHkgZmlsZQorICAgICAgb2JqZWN0LgorCisgICAgICAqa2V5KiBpcyB0aGUgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UgY29ycmVzcG9uZGluZyB0byBhIHJlYWR5IGZpbGUKKyAgICAgIG9iamVjdC4KKyAgICAgICpldmVudHMqIGlzIGEgYml0bWFzayBvZiBldmVudHMgcmVhZHkgb24gdGhpcyBmaWxlIG9iamVjdC4KKworICAgICAgLi4gbm90ZTo6CisgICAgICAgICAgVGhpcyBtZXRob2QgY2FuIHJldHVybiBiZWZvcmUgYW55IGZpbGUgb2JqZWN0IGJlY29tZXMgcmVhZHkgb3IgdGhlCisgICAgICAgICAgdGltZW91dCBoYXMgZWxhcHNlZCBpZiB0aGUgY3VycmVudCBwcm9jZXNzIHJlY2VpdmVzIGEgc2lnbmFsOiBpbiB0aGlzCisgICAgICAgICAgY2FzZSwgYW4gZW1wdHkgbGlzdCB3aWxsIGJlIHJldHVybmVkLgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIENsb3NlIHRoZSBzZWxlY3Rvci4KKworICAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdW5kZXJseWluZyByZXNvdXJjZSBpcyBmcmVlZC4KKyAgICAgIFRoZSBzZWxlY3RvciBzaGFsbCBub3QgYmUgdXNlZCBvbmNlIGl0IGhhcyBiZWVuIGNsb3NlZC4KKworICAgLi4gbWV0aG9kOjogZ2V0X2tleShmaWxlb2JqKQorCisgICAgICBSZXR1cm4gdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0LgorCisgICAgICBUaGlzIHJldHVybnMgdGhlIDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWxlCisgICAgICBvYmplY3QsIG9yIHJhaXNlcyA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiBnZXRfbWFwKCkKKworICAgICAgUmV0dXJuIGEgbWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4KKworICAgICAgVGhpcyByZXR1cm5zIGEgOmNsYXNzOmB+Y29sbGVjdGlvbnMuYWJjLk1hcHBpbmdgIGluc3RhbmNlIG1hcHBpbmcKKyAgICAgIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3RzIHRvIHRoZWlyIGFzc29jaWF0ZWQgOmNsYXNzOmBTZWxlY3RvcktleWAKKyAgICAgIGluc3RhbmNlLgorCisKKy4uIGNsYXNzOjogRGVmYXVsdFNlbGVjdG9yKCkKKworICAgVGhlIGRlZmF1bHQgc2VsZWN0b3IgY2xhc3MsIHVzaW5nIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbgorICAgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBUaGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yCisgICBtb3N0IHVzZXJzLgorCisKKy4uIGNsYXNzOjogU2VsZWN0U2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LnNlbGVjdGAtYmFzZWQgc2VsZWN0b3IuCisKKworLi4gY2xhc3M6OiBQb2xsU2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LnBvbGxgLWJhc2VkIHNlbGVjdG9yLgorCisKKy4uIGNsYXNzOjogRXBvbGxTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3QuZXBvbGxgLWJhc2VkIHNlbGVjdG9yLgorCisgICAuLiBtZXRob2Q6OiBmaWxlbm8oKQorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nCisgICAgICA6ZnVuYzpgc2VsZWN0LmVwb2xsYCBvYmplY3QuCisKKworLi4gY2xhc3M6OiBLcXVldWVTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3Qua3F1ZXVlYC1iYXNlZCBzZWxlY3Rvci4KKworICAgLi4gbWV0aG9kOjogZmlsZW5vKCkKKworICAgICAgVGhpcyByZXR1cm5zIHRoZSBmaWxlIGRlc2NyaXB0b3IgdXNlZCBieSB0aGUgdW5kZXJseWluZworICAgICAgOmZ1bmM6YHNlbGVjdC5rcXVldWVgIG9iamVjdC4KKworCitFeGFtcGxlcworLS0tLS0tLS0KKworSGVyZSBpcyBhIHNpbXBsZSBlY2hvIHNlcnZlciBpbXBsZW1lbnRhdGlvbjo6CisKKyAgIGltcG9ydCBzZWxlY3RvcnMKKyAgIGltcG9ydCBzb2NrZXQKKworICAgc2VsID0gc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpCisKKyAgIGRlZiBhY2NlcHQoc29jaywgbWFzayk6CisgICAgICAgY29ubiwgYWRkciA9IHNvY2suYWNjZXB0KCkgICMgU2hvdWxkIGJlIHJlYWR5CisgICAgICAgcHJpbnQoJ2FjY2VwdGVkJywgY29ubiwgJ2Zyb20nLCBhZGRyKQorICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgc2VsLnJlZ2lzdGVyKGNvbm4sIHNlbGVjdG9ycy5FVkVOVF9SRUFELCByZWFkKQorCisgICBkZWYgcmVhZChjb25uLCBtYXNrKToKKyAgICAgICBkYXRhID0gY29ubi5yZWN2KDEwMDApICAjIFNob3VsZCBiZSByZWFkeQorICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgIHByaW50KCdlY2hvaW5nJywgcmVwcihkYXRhKSwgJ3RvJywgY29ubikKKyAgICAgICAgICAgY29ubi5zZW5kKGRhdGEpICAjIEhvcGUgaXQgd29uJ3QgYmxvY2sKKyAgICAgICBlbHNlOgorICAgICAgICAgICBwcmludCgnY2xvc2luZycsIGNvbm4pCisgICAgICAgICAgIHNlbC51bnJlZ2lzdGVyKGNvbm4pCisgICAgICAgICAgIGNvbm4uY2xvc2UoKQorCisgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICBzb2NrLmJpbmQoKCdsb2NhbGhvc3QnLCAxMjM0KSkKKyAgIHNvY2subGlzdGVuKDEwMCkKKyAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICBzZWwucmVnaXN0ZXIoc29jaywgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGFjY2VwdCkKKworICAgd2hpbGUgVHJ1ZToKKyAgICAgICBldmVudHMgPSBzZWwuc2VsZWN0KCkKKyAgICAgICBmb3Iga2V5LCBtYXNrIGluIGV2ZW50czoKKyAgICAgICAgICAgY2FsbGJhY2sgPSBrZXkuZGF0YQorICAgICAgICAgICBjYWxsYmFjayhrZXkuZmlsZW9iaiwgbWFzaykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QgYi9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CmluZGV4IDA0OGY4MGEuLjIyZTIwMmQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdApAQCAtNDQsOCArNDQsMTEgQEAKICAgIC4uIG5vdGU6OgogCiAgICAgICBEbyBub3QgcmVseSBvbiB0aGUgc2hlbGYgYmVpbmcgY2xvc2VkIGF1dG9tYXRpY2FsbHk7IGFsd2F5cyBjYWxsCi0gICAgICA6bWV0aDpgY2xvc2VgIGV4cGxpY2l0bHkgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnkgbW9yZSwgb3IgdXNlIGEKLSAgICAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2l0aCA6ZnVuYzpgY29udGV4dGxpYi5jbG9zaW5nYC4KKyAgICAgIDptZXRoOmB+U2hlbGYuY2xvc2VgIGV4cGxpY2l0bHkgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnkgbW9yZSwgb3IKKyAgICAgIHVzZSA6ZnVuYzpgc2hlbHZlLm9wZW5gIGFzIGEgY29udGV4dCBtYW5hZ2VyOjoKKworICAgICAgICAgIHdpdGggc2hlbHZlLm9wZW4oJ3NwYW0nKSBhcyBkYjoKKyAgICAgICAgICAgICAgZGJbJ2VnZ3MnXSA9ICdlZ2dzJwogCiAuLiB3YXJuaW5nOjoKIApAQCAtMTE4LDEwICsxMjEsMTYgQEAKICAgIFRoZSAqa2V5ZW5jb2RpbmcqIHBhcmFtZXRlciBpcyB0aGUgZW5jb2RpbmcgdXNlZCB0byBlbmNvZGUga2V5cyBiZWZvcmUgdGhleQogICAgYXJlIHVzZWQgd2l0aCB0aGUgdW5kZXJseWluZyBkaWN0LgogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKLSAgICAgIFRoZSAqa2V5ZW5jb2RpbmcqIHBhcmFtZXRlcjsgcHJldmlvdXNseSwga2V5cyB3ZXJlIGFsd2F5cyBlbmNvZGVkIGluCisgICBBIDpjbGFzczpgU2hlbGZgIG9iamVjdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLCBpbiB3aGljaAorICAgY2FzZSBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHdoZW4gdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBlbmRzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkZWQgdGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyOyBwcmV2aW91c2x5LCBrZXlzIHdlcmUgYWx3YXlzIGVuY29kZWQgaW4KICAgICAgIFVURi04LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgY29udGV4dCBtYW5hZ2VyIHN1cHBvcnQuCisKIAogLi4gY2xhc3M6OiBCc2REYlNoZWxmKGRpY3QsIHByb3RvY29sPU5vbmUsIHdyaXRlYmFjaz1GYWxzZSwga2V5ZW5jb2Rpbmc9J3V0Zi04JykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdCBiL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKaW5kZXggYTE0NTdkMC4uZTRmMzQ4YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CkBAIC01Myw3ICs1Myw3IEBACiAgICAqZHN0KiBhbmQgcmV0dXJuICpkc3QqLiAgKnNyYyogYW5kICpkc3QqIGFyZSBwYXRoIG5hbWVzIGdpdmVuIGFzIHN0cmluZ3MuCiAgICAqZHN0KiBtdXN0IGJlIHRoZSBjb21wbGV0ZSB0YXJnZXQgZmlsZSBuYW1lOyBsb29rIGF0IDpmdW5jOmBzaHV0aWwuY29weWAKICAgIGZvciBhIGNvcHkgdGhhdCBhY2NlcHRzIGEgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoLiAgSWYgKnNyYyogYW5kICpkc3QqCi0gICBzcGVjaWZ5IHRoZSBzYW1lIGZpbGUsIDpleGM6YEVycm9yYCBpcyByYWlzZWQuCisgICBzcGVjaWZ5IHRoZSBzYW1lIGZpbGUsIDpleGM6YFNhbWVGaWxlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgVGhlIGRlc3RpbmF0aW9uIGxvY2F0aW9uIG11c3QgYmUgd3JpdGFibGU7IG90aGVyd2lzZSwgYW4gOmV4YzpgT1NFcnJvcmAKICAgIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC4gSWYgKmRzdCogYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmVwbGFjZWQuCkBAIC02OSw2ICs2OSwxOSBAQAogICAgICAgQWRkZWQgKmZvbGxvd19zeW1saW5rcyogYXJndW1lbnQuCiAgICAgICBOb3cgcmV0dXJucyAqZHN0Ki4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFJhaXNlIDpleGM6YFNhbWVGaWxlRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgRXJyb3JgLiAgU2luY2UgdGhlIGZvcm1lciBpcworICAgICAgYSBzdWJjbGFzcyBvZiB0aGUgbGF0dGVyLCB0aGlzIGNoYW5nZSBpcyBiYWNrd2FyZCBjb21wYXRpYmxlLgorCisKKy4uIGV4Y2VwdGlvbjo6IFNhbWVGaWxlRXJyb3IKKworICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW4gOmZ1bmM6YGNvcHlmaWxlYAorICAgYXJlIHRoZSBzYW1lIGZpbGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY29weW1vZGUoc3JjLCBkc3QsICosIGZvbGxvd19zeW1saW5rcz1UcnVlKQogCiAgICBDb3B5IHRoZSBwZXJtaXNzaW9uIGJpdHMgZnJvbSAqc3JjKiB0byAqZHN0Ki4gIFRoZSBmaWxlIGNvbnRlbnRzLCBvd25lciwgYW5kCkBAIC0zODAsMTEgKzM5MywxMCBAQAogICAgICAgICAgICAgICAgZXJyb3JzLmV4dGVuZChlcnIuYXJnc1swXSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIGNvcHlzdGF0KHNyYywgZHN0KQotICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6Ci0gICAgICAgICAgICMgY2FuJ3QgY29weSBmaWxlIGFjY2VzcyB0aW1lcyBvbiBXaW5kb3dzCi0gICAgICAgICAgIHBhc3MKICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6Ci0gICAgICAgICAgIGVycm9ycy5leHRlbmQoKHNyYywgZHN0LCBzdHIod2h5KSkpCisgICAgICAgICAgICMgY2FuJ3QgY29weSBmaWxlIGFjY2VzcyB0aW1lcyBvbiBXaW5kb3dzCisgICAgICAgICAgIGlmIHdoeS53aW5lcnJvciBpcyBOb25lOgorICAgICAgICAgICAgICAgZXJyb3JzLmV4dGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKICAgICAgICBpZiBlcnJvcnM6CiAgICAgICAgICAgIHJhaXNlIEVycm9yKGVycm9ycykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2l0ZS5yc3QgYi9Eb2MvbGlicmFyeS9zaXRlLnJzdAppbmRleCAzNmI4MGMzLi5kOTNlOTM4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaXRlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaXRlLnJzdApAQCAtMzgsNiArMzgsOSBAQAogaWYgaXQgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgYW5kIGlmIHNvLCBhZGRzIGl0IHRvIGBgc3lzLnBhdGhgYCBhbmQKIGFsc28gaW5zcGVjdHMgdGhlIG5ld2x5IGFkZGVkIHBhdGggZm9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuCiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgIFN1cHBvcnQgZm9yIHRoZSAic2l0ZS1weXRob24iIGRpcmVjdG9yeSB3aWxsIGJlIHJlbW92ZWQgaW4gMy41LgorCiBJZiBhIGZpbGUgbmFtZWQgInB5dmVudi5jZmciIGV4aXN0cyBvbmUgZGlyZWN0b3J5IGFib3ZlIHN5cy5leGVjdXRhYmxlLAogc3lzLnByZWZpeCBhbmQgc3lzLmV4ZWNfcHJlZml4IGFyZSBzZXQgdG8gdGhhdCBkaXJlY3RvcnkgYW5kCiBpdCBpcyBhbHNvIGNoZWNrZWQgZm9yIHNpdGUtcGFja2FnZXMgYW5kIHNpdGUtcHl0aG9uIChzeXMuYmFzZV9wcmVmaXggYW5kCkBAIC0xMTEsNiArMTE0LDIzIEBACiA6bW9kOmBzaXRlY3VzdG9taXplYCBhbmQgOm1vZDpgdXNlcmN1c3RvbWl6ZWAgaXMgc3RpbGwgYXR0ZW1wdGVkLgogCiAKKy4uIF9ybGNvbXBsZXRlci1jb25maWc6CisKK1JlYWRsaW5lIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgOm1vZDpgcmVhZGxpbmVgLCB0aGlzIG1vZHVsZSB3aWxsIGFsc28gaW1wb3J0IGFuZAorY29uZmlndXJlIHRoZSA6bW9kOmBybGNvbXBsZXRlcmAgbW9kdWxlLCBpZiBQeXRob24gaXMgc3RhcnRlZCBpbgorOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAgYW5kIHdpdGhvdXQgdGhlIDpvcHRpb246YC1TYCBvcHRpb24uCitUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBlbmFibGUgdGFiLWNvbXBsZXRpb24gYW5kIHRvIHVzZQorOmZpbGU6YH4vLnB5dGhvbl9oaXN0b3J5YCBhcyB0aGUgaGlzdG9yeSBzYXZlIGZpbGUuICBUbyBkaXNhYmxlIGl0LCBvdmVycmlkZQordGhlIDpkYXRhOmBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX2AgYXR0cmlidXRlIGluIHlvdXIgOm1vZDpgc2l0ZWN1c3RvbWl6ZWAKK29yIDptb2Q6YHVzZXJjdXN0b21pemVgIG1vZHVsZSBvciB5b3VyIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuCisKKworTW9kdWxlIGNvbnRlbnRzCistLS0tLS0tLS0tLS0tLS0KKwogLi4gZGF0YTo6IFBSRUZJWEVTCiAKICAgIEEgbGlzdCBvZiBwcmVmaXhlcyBmb3Igc2l0ZS1wYWNrYWdlcyBkaXJlY3Rvcmllcy4KQEAgLTE1Myw4ICsxNzMsNyBAQAogCiAgICBBZGRzIGFsbCB0aGUgc3RhbmRhcmQgc2l0ZS1zcGVjaWZpYyBkaXJlY3RvcmllcyB0byB0aGUgbW9kdWxlIHNlYXJjaAogICAgcGF0aC4gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGlzIG1vZHVsZSBpcyBpbXBvcnRlZCwKLSAgIHVubGVzcyB0aGUgOnByb2dyYW06YHB5dGhvbmAgaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgOm9wdGlvbjpgLVNgCi0gICBmbGFnLgorICAgdW5sZXNzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgOm9wdGlvbjpgLVNgIGZsYWcuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gYmUgY2FsbGVkIHVuY29uZGl0aW9ubmFsbHkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zbXRwZC5yc3QgYi9Eb2MvbGlicmFyeS9zbXRwZC5yc3QKaW5kZXggZjMwNTgxOC4uM2ViZWQwNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc210cGQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NtdHBkLnJzdApAQCAtMjcsNyArMjcsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAotLi4gY2xhc3M6OiBTTVRQU2VydmVyKGxvY2FsYWRkciwgcmVtb3RlYWRkciwgZGF0YV9zaXplX2xpbWl0PTMzNTU0NDMyKQorLi4gY2xhc3M6OiBTTVRQU2VydmVyKGxvY2FsYWRkciwgcmVtb3RlYWRkciwgZGF0YV9zaXplX2xpbWl0PTMzNTU0NDMyLFwKKyAgICAgICAgICAgICAgICAgICAgICBtYXA9Tm9uZSkKIAogICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgU01UUFNlcnZlcmAgb2JqZWN0LCB3aGljaCBiaW5kcyB0byBsb2NhbCBhZGRyZXNzCiAgICAqbG9jYWxhZGRyKi4gIEl0IHdpbGwgdHJlYXQgKnJlbW90ZWFkZHIqIGFzIGFuIHVwc3RyZWFtIFNNVFAgcmVsYXllci4gIEl0CkBAIC0zOCw2ICszOSw4IEBACiAgICBhY2NlcHRlZCBpbiBhIGBgREFUQWBgIGNvbW1hbmQuICBBIHZhbHVlIG9mIGBgTm9uZWBgIG9yIGBgMGBgIG1lYW5zIG5vCiAgICBsaW1pdC4KIAorICAgQSBkaWN0aW9uYXJ5IGNhbiBiZSBzcGVjaWZpZWQgaW4gKm1hcCogdG8gYXZvaWQgdXNpbmcgYSBnbG9iYWwgc29ja2V0IG1hcC4KKwogICAgLi4gbWV0aG9kOjogcHJvY2Vzc19tZXNzYWdlKHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKQogCiAgICAgICBSYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBleGNlcHRpb24uIE92ZXJyaWRlIHRoaXMgaW4gc3ViY2xhc3NlcyB0bwpAQCAtNTMsNiArNTYsOSBAQAogICAgICAgT3ZlcnJpZGUgdGhpcyBpbiBzdWJjbGFzc2VzIHRvIHVzZSBhIGN1c3RvbSA6Y2xhc3M6YFNNVFBDaGFubmVsYCBmb3IKICAgICAgIG1hbmFnaW5nIFNNVFAgY2xpZW50cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqbWFwKiBhcmd1bWVudCB3YXMgYWRkZWQuCisKIAogRGVidWdnaW5nU2VydmVyIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05MCwxMSArOTYsMjAgQEAKIFNNVFBDaGFubmVsIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLi4gY2xhc3M6OiBTTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIpCisuLiBjbGFzczo6IFNNVFBDaGFubmVsKHNlcnZlciwgY29ubiwgYWRkciwgZGF0YV9zaXplX2xpbWl0PTMzNTU0NDMyLFwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFwPU5vbmUpKQogCiAgICBDcmVhdGUgYSBuZXcgOmNsYXNzOmBTTVRQQ2hhbm5lbGAgb2JqZWN0IHdoaWNoIG1hbmFnZXMgdGhlIGNvbW11bmljYXRpb24KICAgIGJldHdlZW4gdGhlIHNlcnZlciBhbmQgYSBzaW5nbGUgU01UUCBjbGllbnQuCiAKKyAgICpjb25uKiBhbmQgKmFkZHIqIGFyZSBhcyBwZXIgdGhlIGluc3RhbmNlIHZhcmlhYmxlcyBkZXNjcmliZWQgYmVsb3cuCisKKyAgICpkYXRhX3NpemVfbGltaXQqIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIGJlCisgICBhY2NlcHRlZCBpbiBhIGBgREFUQWBgIGNvbW1hbmQuICBBIHZhbHVlIG9mIGBgTm9uZWBgIG9yIGBgMGBgIG1lYW5zIG5vCisgICBsaW1pdC4KKworICAgQSBkaWN0aW9uYXJ5IGNhbiBiZSBzcGVjaWZpZWQgaW4gKm1hcCogdG8gYXZvaWQgdXNpbmcgYSBnbG9iYWwgc29ja2V0IG1hcC4KKwogICAgVG8gdXNlIGEgY3VzdG9tIFNNVFBDaGFubmVsIGltcGxlbWVudGF0aW9uIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHRoZQogICAgOmF0dHI6YFNNVFBTZXJ2ZXIuY2hhbm5lbF9jbGFzc2Agb2YgeW91ciA6Y2xhc3M6YFNNVFBTZXJ2ZXJgLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdCBiL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CmluZGV4IGFkZGM2YmUuLmViYThhZTkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CkBAIC05MCw2ICs5MCwxMCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIHNvdXJjZV9hZGRyZXNzIGFyZ3VtZW50IHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBjbGFzcyBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVgIGFuZCAqU2VydmVyIE5hbWUgSW5kaWNhdG9yKiAoc2VlCisgICAgICA6ZGF0YTpgfnNzbC5IQVNfU05JYCkuCiAKIC4uIGNsYXNzOjogTE1UUChob3N0PScnLCBwb3J0PUxNVFBfUE9SVCwgbG9jYWxfaG9zdG5hbWU9Tm9uZSwgc291cmNlX2FkZHJlc3M9Tm9uZSkKIApAQCAtMTEwLDggKzExNCw4IEBACiAKIC4uIGV4Y2VwdGlvbjo6IFNNVFBFeGNlcHRpb24KIAotICAgVGhlIGJhc2UgZXhjZXB0aW9uIGNsYXNzIGZvciBhbGwgdGhlIG90aGVyIGV4Y2VwdGlvbnMgcHJvdmlkZWQgYnkgdGhpcwotICAgbW9kdWxlLgorICAgU3ViY2xhc3Mgb2YgOmV4YzpgT1NFcnJvcmAgdGhhdCBpcyB0aGUgYmFzZSBleGNlcHRpb24gY2xhc3MgZm9yIGFsbAorICAgdGhlIG90aGVyIGV4Y2VwdGlvbnMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUuCiAKIAogLi4gZXhjZXB0aW9uOjogU01UUFNlcnZlckRpc2Nvbm5lY3RlZApAQCAtMzE2LDYgKzMyMCwxMSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICpjb250ZXh0KiB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbWV0aG9kIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0b3IqIChzZWUKKyAgICAgIDpkYXRhOmB+c3NsLkhBU19TTklgKS4KKwogCiAuLiBtZXRob2Q6OiBTTVRQLnNlbmRtYWlsKGZyb21fYWRkciwgdG9fYWRkcnMsIG1zZywgbWFpbF9vcHRpb25zPVtdLCByY3B0X29wdGlvbnM9W10pCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QgYi9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CmluZGV4IGRiYWExYjAuLjViYmM3ZTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc29ja2V0LnJzdApAQCAtMTA3LDggKzEwNyw4IEBACiAKICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKLS0gQ2VydGFpbiBvdGhlciBhZGRyZXNzIGZhbWlsaWVzICg6Y29uc3Q6YEFGX0JMVUVUT09USGAsIDpjb25zdDpgQUZfUEFDS0VUYCkKLSAgc3VwcG9ydCBzcGVjaWZpYyByZXByZXNlbnRhdGlvbnMuCistIENlcnRhaW4gb3RoZXIgYWRkcmVzcyBmYW1pbGllcyAoOmNvbnN0OmBBRl9CTFVFVE9PVEhgLCA6Y29uc3Q6YEFGX1BBQ0tFVGAsCisgIDpjb25zdDpgQUZfQ0FOYCkgc3VwcG9ydCBzcGVjaWZpYyByZXByZXNlbnRhdGlvbnMuCiAKICAgLi4gWFhYIGRvY3VtZW50IHRoZW0hCiAKQEAgLTI2NCw2ICsyNjQsMTYgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKy4uIGRhdGE6OiBDQU5fQkNNCisgICAgICAgICAgQ0FOX0JDTV8qCisKKyAgIENBTl9CQ00sIGluIHRoZSBDQU4gcHJvdG9jb2wgZmFtaWx5LCBpcyB0aGUgYnJvYWRjYXN0IG1hbmFnZXIgKEJDTSkgcHJvdG9jb2wuCisgICBCcm9hZGNhc3QgbWFuYWdlciBjb25zdGFudHMsIGRvY3VtZW50ZWQgaW4gdGhlIExpbnV4IGRvY3VtZW50YXRpb24sIGFyZSBhbHNvCisgICBkZWZpbmVkIGluIHRoZSBzb2NrZXQgbW9kdWxlLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4ID49IDIuNi4yNS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIGRhdGE6OiBBRl9SRFMKICAgICAgICAgICBQRl9SRFMKQEAgLTI5MCw2ICszMDAsMTEgQEAKICAgIFRJUEMgcmVsYXRlZCBjb25zdGFudHMsIG1hdGNoaW5nIHRoZSBvbmVzIGV4cG9ydGVkIGJ5IHRoZSBDIHNvY2tldCBBUEkuIFNlZQogICAgdGhlIFRJUEMgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorLi4gZGF0YTo6IEFGX0xJTksKKworICBBdmFpbGFiaWxpdHk6IEJTRCwgT1NYLgorCisgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBkYXRhOjogaGFzX2lwdjYKIApAQCAtMzA2LDIwICszMjEsMjkgQEAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFsbCBjcmVhdGUgOnJlZjpgc29ja2V0IG9iamVjdHMgPHNvY2tldC1vYmplY3RzPmAuCiAKIAotLi4gZnVuY3Rpb246OiBzb2NrZXQoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkKKy4uIGZ1bmN0aW9uOjogc29ja2V0KGZhbWlseT1BRl9JTkVULCB0eXBlPVNPQ0tfU1RSRUFNLCBwcm90bz0wLCBmaWxlbm89Tm9uZSkKIAogICAgQ3JlYXRlIGEgbmV3IHNvY2tldCB1c2luZyB0aGUgZ2l2ZW4gYWRkcmVzcyBmYW1pbHksIHNvY2tldCB0eXBlIGFuZCBwcm90b2NvbAogICAgbnVtYmVyLiAgVGhlIGFkZHJlc3MgZmFtaWx5IHNob3VsZCBiZSA6Y29uc3Q6YEFGX0lORVRgICh0aGUgZGVmYXVsdCksCiAgICA6Y29uc3Q6YEFGX0lORVQ2YCwgOmNvbnN0OmBBRl9VTklYYCwgOmNvbnN0OmBBRl9DQU5gIG9yIDpjb25zdDpgQUZfUkRTYC4gVGhlCiAgICBzb2NrZXQgdHlwZSBzaG91bGQgYmUgOmNvbnN0OmBTT0NLX1NUUkVBTWAgKHRoZSBkZWZhdWx0KSwKICAgIDpjb25zdDpgU09DS19ER1JBTWAsIDpjb25zdDpgU09DS19SQVdgIG9yIHBlcmhhcHMgb25lIG9mIHRoZSBvdGhlciBgYFNPQ0tfYGAKLSAgIGNvbnN0YW50cy4gVGhlIHByb3RvY29sIG51bWJlciBpcyB1c3VhbGx5IHplcm8gYW5kIG1heSBiZSBvbWl0dGVkIGluIHRoYXQKLSAgIGNhc2Ugb3IgOmNvbnN0OmBDQU5fUkFXYCBpbiBjYXNlIHRoZSBhZGRyZXNzIGZhbWlseSBpcyA6Y29uc3Q6YEFGX0NBTmAuCisgICBjb25zdGFudHMuIFRoZSBwcm90b2NvbCBudW1iZXIgaXMgdXN1YWxseSB6ZXJvIGFuZCBtYXkgYmUgb21pdHRlZCBvciBpbiB0aGUKKyAgIGNhc2Ugd2hlcmUgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIDpjb25zdDpgQUZfQ0FOYCB0aGUgcHJvdG9jb2wgc2hvdWxkIGJlIG9uZQorICAgb2YgOmNvbnN0OmBDQU5fUkFXYCBvciA6Y29uc3Q6YENBTl9CQ01gLgorCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgVGhlIEFGX0NBTiBmYW1pbHkgd2FzIGFkZGVkLgogICAgICAgVGhlIEFGX1JEUyBmYW1pbHkgd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgIFRoZSBDQU5fQkNNIHByb3RvY29sIHdhcyBhZGRlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSByZXR1cm5lZCBzb2NrZXQgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IHNvY2tldHBhaXIoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkKIApAQCAtMzI5LDEwICszNTMsMTUgQEAKICAgIGlmIGRlZmluZWQgb24gdGhlIHBsYXRmb3JtOyBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzIDpjb25zdDpgQUZfSU5FVGAuCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldHMgYXJlIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKwogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIFRoZSByZXR1cm5lZCBzb2NrZXQgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgd2hvbGUgc29ja2V0IEFQSSwgcmF0aGVyCiAgICAgICB0aGFuIGEgc3Vic2V0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHJldHVybmVkIHNvY2tldHMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBjcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzWywgdGltZW91dFssIHNvdXJjZV9hZGRyZXNzXV0pCiAKQEAgLTM2MCw3ICszODksNyBAQAogICAgICAgc3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgogCiAKLS4uIGZ1bmN0aW9uOjogZnJvbWZkKGZkLCBmYW1pbHksIHR5cGVbLCBwcm90b10pCisuLiBmdW5jdGlvbjo6IGZyb21mZChmZCwgZmFtaWx5LCB0eXBlLCBwcm90bz0wKQogCiAgICBEdXBsaWNhdGUgdGhlIGZpbGUgZGVzY3JpcHRvciAqZmQqIChhbiBpbnRlZ2VyIGFzIHJldHVybmVkIGJ5IGEgZmlsZSBvYmplY3QncwogICAgOm1ldGg6YGZpbGVub2AgbWV0aG9kKSBhbmQgYnVpbGQgYSBzb2NrZXQgb2JqZWN0IGZyb20gdGhlIHJlc3VsdC4gIEFkZHJlc3MKQEAgLTM3MSw2ICs0MDAsMTEgQEAKICAgIGEgc29ja2V0IHBhc3NlZCB0byBhIHByb2dyYW0gYXMgc3RhbmRhcmQgaW5wdXQgb3Igb3V0cHV0IChzdWNoIGFzIGEgc2VydmVyCiAgICBzdGFydGVkIGJ5IHRoZSBVbml4IGluZXQgZGFlbW9uKS4gIFRoZSBzb2NrZXQgaXMgYXNzdW1lZCB0byBiZSBpbiBibG9ja2luZyBtb2RlLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHJldHVybmVkIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogZnJvbXNoYXJlKGRhdGEpCiAKQEAgLTU5OCw3ICs2MzIsNyBAQAogICAgYm90aCB0aGUgdmFsdWUgb2YgKmFkZHJlc3NfZmFtaWx5KiBhbmQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gb2YKICAgIDpjOmZ1bmM6YGluZXRfcHRvbmAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCAobWF5YmUgbm90IGFsbCBwbGF0Zm9ybXMpLgorICAgQXZhaWxhYmlsaXR5OiBVbml4IChtYXliZSBub3QgYWxsIHBsYXRmb3JtcyksIFdpbmRvd3MuCiAKIAogLi4gZnVuY3Rpb246OiBpbmV0X250b3AoYWRkcmVzc19mYW1pbHksIHBhY2tlZF9pcCkKQEAgLTYxNCw3ICs2NDgsNyBAQAogICAgc3BlY2lmaWVkIGFkZHJlc3MgZmFtaWx5LCA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4gIEEKICAgIDpleGM6YE9TRXJyb3JgIGlzIHJhaXNlZCBmb3IgZXJyb3JzIGZyb20gdGhlIGNhbGwgdG8gOmZ1bmM6YGluZXRfbnRvcGAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCAobWF5YmUgbm90IGFsbCBwbGF0Zm9ybXMpLgorICAgQXZhaWxhYmlsaXR5OiBVbml4IChtYXliZSBub3QgYWxsIHBsYXRmb3JtcyksIFdpbmRvd3MuCiAKIAogLi4KQEAgLTczNSw2ICs3NjksMTEgQEAKICAgICpuZXcqIHNvY2tldCBvYmplY3QgdXNhYmxlIHRvIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvbiB0aGUgY29ubmVjdGlvbiwgYW5kCiAgICAqYWRkcmVzcyogaXMgdGhlIGFkZHJlc3MgYm91bmQgdG8gdGhlIHNvY2tldCBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIG1ldGhvZDo6IHNvY2tldC5iaW5kKGFkZHJlc3MpCiAKQEAgLTc4Niw2ICs4MjUsMTYgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKKy4uIG1ldGhvZDo6IHNvY2tldC5kdXAoKQorCisgICBEdXBsaWNhdGUgdGhlIHNvY2tldC4KKworICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBzb2NrZXQgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKworCiAuLiBtZXRob2Q6OiBzb2NrZXQuZmlsZW5vKCkKIAogICAgUmV0dXJuIHRoZSBzb2NrZXQncyBmaWxlIGRlc2NyaXB0b3IgKGEgc21hbGwgaW50ZWdlcikuICBUaGlzIGlzIHVzZWZ1bCB3aXRoCkBAIC03OTYsNiArODQ1LDE1IEBACiAgICB0aGlzIGxpbWl0YXRpb24uCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LmdldF9pbmhlcml0YWJsZSgpCisKKyAgIEdldCB0aGUgOnJlZjpgaW5oZXJpdGFibGUgZmxhZyA8ZmRfaW5oZXJpdGFuY2U+YCBvZiB0aGUgc29ja2V0J3MgZmlsZQorICAgZGVzY3JpcHRvciBvciBzb2NrZXQncyBoYW5kbGU6IGBgVHJ1ZWBgIGlmIHRoZSBzb2NrZXQgY2FuIGJlIGluaGVyaXRlZCBpbgorICAgY2hpbGQgcHJvY2Vzc2VzLCBgYEZhbHNlYGAgaWYgaXQgY2Fubm90LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBzb2NrZXQuZ2V0cGVlcm5hbWUoKQogCiAgICBSZXR1cm4gdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkLiAgVGhpcyBpcyB1c2VmdWwgdG8KQEAgLTEwODIsNiArMTE0MCwxNCBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LnNldF9pbmhlcml0YWJsZShpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIHRoZSBzb2NrZXQncyBmaWxlCisgICBkZXNjcmlwdG9yIG9yIHNvY2tldCdzIGhhbmRsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogc29ja2V0LnNldGJsb2NraW5nKGZsYWcpCiAKICAgIFNldCBibG9ja2luZyBvciBub24tYmxvY2tpbmcgbW9kZSBvZiB0aGUgc29ja2V0OiBpZiAqZmxhZyogaXMgZmFsc2UsIHRoZQpAQCAtMTM2Myw3ICsxNDI5LDE2IEBACiAgICBzLmlvY3RsKHNvY2tldC5TSU9fUkNWQUxMLCBzb2NrZXQuUkNWQUxMX09GRikKIAogVGhlIGxhc3QgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIHRoZSBzb2NrZXQgaW50ZXJmYWNlIHRvIGNvbW11bmljYXRlIHRvIGEgQ0FOCi1uZXR3b3JrLiBUaGlzIGV4YW1wbGUgbWlnaHQgcmVxdWlyZSBzcGVjaWFsIHByaXZpbGVkZ2U6OgorbmV0d29yayB1c2luZyB0aGUgcmF3IHNvY2tldCBwcm90b2NvbC4gVG8gdXNlIENBTiB3aXRoIHRoZSBicm9hZGNhc3QKK21hbmFnZXIgcHJvdG9jb2wgaW5zdGVhZCwgb3BlbiBhIHNvY2tldCB3aXRoOjoKKworICAgIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0NBTiwgc29ja2V0LlNPQ0tfREdSQU0sIHNvY2tldC5DQU5fQkNNKQorCitBZnRlciBiaW5kaW5nICg6Y29uc3Q6YENBTl9SQVdgKSBvciBjb25uZWN0aW5nICg6Y29uc3Q6YENBTl9CQ01gKSB0aGUgc29ja2V0LCB5b3UKK2NhbiB1c2UgdGhlIDptZXRoOmBzb2NrZXQuc2VuZGAsIGFuZCB0aGUgOm1ldGg6YHNvY2tldC5yZWN2YCBvcGVyYXRpb25zIChhbmQKK3RoZWlyIGNvdW50ZXJwYXJ0cykgb24gdGhlIHNvY2tldCBvYmplY3QgYXMgdXN1YWwuCisKK1RoaXMgZXhhbXBsZSBtaWdodCByZXF1aXJlIHNwZWNpYWwgcHJpdmlsZWRnZTo6CiAKICAgIGltcG9ydCBzb2NrZXQKICAgIGltcG9ydCBzdHJ1Y3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Nwd2QucnN0IGIvRG9jL2xpYnJhcnkvc3B3ZC5yc3QKaW5kZXggYWRkNjExZi4uNThiZTc4ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3B3ZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3B3ZC5yc3QKQEAgLTE5LDkgKzE5LDkgQEAKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IEluZGV4IHwgQXR0cmlidXRlICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfAogKz09PT09PT0rPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXwgMCAgICAgfCBgYHNwX25hbWBgICAgIHwgTG9naW4gbmFtZSAgICAgICAgICAgICAgICAgICAgICB8Cit8IDAgICAgIHwgYGBzcF9uYW1wYGAgICB8IExvZ2luIG5hbWUgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgMSAgICAgfCBgYHNwX3B3ZGBgICAgIHwgRW5jcnlwdGVkIHBhc3N3b3JkICAgICAgICAgICAgICB8Cit8IDEgICAgIHwgYGBzcF9wd2RwYGAgICB8IEVuY3J5cHRlZCBwYXNzd29yZCAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgMiAgICAgfCBgYHNwX2xzdGNoZ2BgIHwgRGF0ZSBvZiBsYXN0IGNoYW5nZSAgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMzYsMTUgKzM2LDE1IEBACiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA2ICAgICB8IGBgc3BfaW5hY3RgYCAgfCBOdW1iZXIgb2YgZGF5cyBhZnRlciBwYXNzd29yZCAgIHwKIHwgICAgICAgfCAgICAgICAgICAgICAgIHwgZXhwaXJlcyB1bnRpbCBhY2NvdW50IGlzICAgICAgICB8Ci18ICAgICAgIHwgICAgICAgICAgICAgICB8IGJsb2NrZWQgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICB8ICAgICAgICAgICAgICAgfCBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDcgICAgIHwgYGBzcF9leHBpcmVgYCB8IE51bWJlciBvZiBkYXlzIHNpbmNlIDE5NzAtMDEtMDEgfAotfCAgICAgICB8ICAgICAgICAgICAgICAgfCB1bnRpbCBhY2NvdW50IGlzIGRpc2FibGVkICAgICAgIHwKK3wgICAgICAgfCAgICAgICAgICAgICAgIHwgd2hlbiBhY2NvdW50IGV4cGlyZXMgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA4ICAgICB8IGBgc3BfZmxhZ2BgICAgfCBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLVRoZSBzcF9uYW0gYW5kIHNwX3B3ZCBpdGVtcyBhcmUgc3RyaW5ncywgYWxsIG90aGVycyBhcmUgaW50ZWdlcnMuCitUaGUgc3BfbmFtcCBhbmQgc3BfcHdkcCBpdGVtcyBhcmUgc3RyaW5ncywgYWxsIG90aGVycyBhcmUgaW50ZWdlcnMuCiA6ZXhjOmBLZXlFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBlbnRyeSBhc2tlZCBmb3IgY2Fubm90IGJlIGZvdW5kLgogCiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZDoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NxbGl0ZTMucnN0IGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKaW5kZXggOGE1MGY4Ny4uMWVjODM5OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKQEAgLTE1OSw3ICsxNTksNyBAQAogICAgZmlyc3QgYmxhbmsgZm9yIHRoZSBjb2x1bW4gbmFtZTogdGhlIGNvbHVtbiBuYW1lIHdvdWxkIHNpbXBseSBiZSAieCIuCiAKIAotLi4gZnVuY3Rpb246OiBjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgZGV0ZWN0X3R5cGVzLCBpc29sYXRpb25fbGV2ZWwsIGNoZWNrX3NhbWVfdGhyZWFkLCBmYWN0b3J5LCBjYWNoZWRfc3RhdGVtZW50c10pCisuLiBmdW5jdGlvbjo6IGNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCwgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzLCB1cmldKQogCiAgICBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlICpkYXRhYmFzZSouIFlvdSBjYW4gdXNlCiAgICBgYCI6bWVtb3J5OiJgYCB0byBvcGVuIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIHRoYXQgcmVzaWRlcyBpbiBSQU0KQEAgLTE5NSw2ICsxOTUsMTggQEAKICAgIGZvciB0aGUgY29ubmVjdGlvbiwgeW91IGNhbiBzZXQgdGhlICpjYWNoZWRfc3RhdGVtZW50cyogcGFyYW1ldGVyLiBUaGUgY3VycmVudGx5CiAgICBpbXBsZW1lbnRlZCBkZWZhdWx0IGlzIHRvIGNhY2hlIDEwMCBzdGF0ZW1lbnRzLgogCisgICBJZiAqdXJpKiBpcyB0cnVlLCAqZGF0YWJhc2UqIGlzIGludGVycHJldGVkIGFzIGEgVVJJLiBUaGlzIGFsbG93cyB5b3UKKyAgIHRvIHNwZWNpZnkgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIHRvIG9wZW4gYSBkYXRhYmFzZSBpbiByZWFkLW9ubHkgbW9kZQorICAgeW91IGNhbiB1c2U6OgorCisgICAgICAgZGIgPSBzcWxpdGUzLmNvbm5lY3QoJ2ZpbGU6cGF0aC90by9kYXRhYmFzZT9tb2RlPXJvJywgdXJpPVRydWUpCisKKyAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmZWF0dXJlLCBpbmNsdWRpbmcgYSBsaXN0IG9mIHJlY29nbml6ZWQgb3B0aW9ucywgY2FuCisgICBiZSBmb3VuZCBpbiB0aGUgYFNRTGl0ZSBVUkkgZG9jdW1lbnRhdGlvbiA8aHR0cDovL3d3dy5zcWxpdGUub3JnL3VyaS5odG1sPmBfLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICp1cmkqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IHJlZ2lzdGVyX2NvbnZlcnRlcih0eXBlbmFtZSwgY2FsbGFibGUpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NzbC5yc3QgYi9Eb2MvbGlicmFyeS9zc2wucnN0CmluZGV4IGViYzlhNGUuLjc2YmI0MzIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NzbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3NsLnJzdApAQCAtMjYsNyArMjYsOCBAQAogCiAgICBTb21lIGJlaGF2aW9yIG1heSBiZSBwbGF0Zm9ybSBkZXBlbmRlbnQsIHNpbmNlIGNhbGxzIGFyZSBtYWRlIHRvIHRoZQogICAgb3BlcmF0aW5nIHN5c3RlbSBzb2NrZXQgQVBJcy4gIFRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBPcGVuU1NMIG1heSBhbHNvCi0gICBjYXVzZSB2YXJpYXRpb25zIGluIGJlaGF2aW9yLgorICAgY2F1c2UgdmFyaWF0aW9ucyBpbiBiZWhhdmlvci4gRm9yIGV4YW1wbGUsIFRMU3YxLjEgYW5kIFRMU3YxLjIgY29tZSB3aXRoCisgICBvcGVuc3NsIHZlcnNpb24gMS4wLjEuCiAKIC4uIHdhcm5pbmc6OgogICAgRG9uJ3QgdXNlIHRoaXMgbW9kdWxlIHdpdGhvdXQgcmVhZGluZyB0aGUgOnJlZjpgc3NsLXNlY3VyaXR5YC4gIERvaW5nIHNvCkBAIC0xODYsMTQgKzE4NywxNiBAQAogCiAgICAgIC4uIHRhYmxlOjoKIAotICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PQotICAgICAgICAqY2xpZW50KiAvICoqc2VydmVyKiogICAgKipTU0x2MioqICAqKlNTTHYzKiogICoqU1NMdjIzKiogICoqVExTdjEqKgotICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLQotICAgICAgICAqU1NMdjIqICAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8KLSAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vCi0gICAgICAgICpTU0x2MjMqICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubwotICAgICAgICAqVExTdjEqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgeWVzCi0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09CisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09PSAgPT09PT09PT09PT0KKyAgICAgICAgKmNsaWVudCogLyAqKnNlcnZlcioqICAgICoqU1NMdjIqKiAgKipTU0x2MyoqICAqKlNTTHYyMyoqICAqKlRMU3YxKiogICoqVExTdjEuMSoqICAqKlRMU3YxLjIqKgorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tCisgICAgICAgICpTU0x2MiogICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICBubworICAgICAgICAqU1NMdjIzKiAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIG5vCisgICAgICAgICpUTFN2MSogICAgICAgICAgICAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlRMU3YxLjEqICAgICAgICAgICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICBubworICAgICAgICAqVExTdjEuMiogICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcworICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PT0gID09PT09PT09PT09CiAKICAgIC4uIG5vdGU6OgogCkBAIC0yMjcsNiArMjMwLDQ1IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpjaXBoZXJzKi4KIAorCitDb250ZXh0IGNyZWF0aW9uCiteXl5eXl5eXl5eXl5eXl5eCisKK0EgY29udmVuaWVuY2UgZnVuY3Rpb24gaGVscHMgY3JlYXRlIDpjbGFzczpgU1NMQ29udGV4dGAgb2JqZWN0cyBmb3IgY29tbW9uCitwdXJwb3Nlcy4KKworLi4gZnVuY3Rpb246OiBjcmVhdGVfZGVmYXVsdF9jb250ZXh0KHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCwgY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSkKKworICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgU1NMQ29udGV4dGAgb2JqZWN0IHdpdGggZGVmYXVsdCBzZXR0aW5ncyBmb3IKKyAgIHRoZSBnaXZlbiAqcHVycG9zZSouICBUaGUgc2V0dGluZ3MgYXJlIGNob3NlbiBieSB0aGUgOm1vZDpgc3NsYCBtb2R1bGUsCisgICBhbmQgdXN1YWxseSByZXByZXNlbnQgYSBoaWdoZXIgc2VjdXJpdHkgbGV2ZWwgdGhhbiB3aGVuIGNhbGxpbmcgdGhlCisgICA6Y2xhc3M6YFNTTENvbnRleHRgIGNvbnN0cnVjdG9yIGRpcmVjdGx5LgorCisgICAqY2FmaWxlKiwgKmNhcGF0aCosICpjYWRhdGEqIHJlcHJlc2VudCBvcHRpb25hbCBDQSBjZXJ0aWZpY2F0ZXMgdG8KKyAgIHRydXN0IGZvciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24sIGFzIGluCisgICA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgLiAgSWYgYWxsIHRocmVlIGFyZQorICAgOmNvbnN0OmBOb25lYCwgdGhpcyBmdW5jdGlvbiBjYW4gY2hvb3NlIHRvIHRydXN0IHRoZSBzeXN0ZW0ncyBkZWZhdWx0CisgICBDQSBjZXJ0aWZpY2F0ZXMgaW5zdGVhZC4KKworICAgVGhlIHNldHRpbmdzIGluIFB5dGhvbiAzLjQgYXJlOiA6ZGF0YTpgUFJPVE9DT0xfVExTdjFgIHdpdGggaGlnaCBlbmNyeXB0aW9uCisgICBjaXBoZXIgc3VpdGVzIHdpdGhvdXQgUkM0IGFuZCB3aXRob3V0IHVuYXV0aGVudGljYXRlZCBjaXBoZXIgc3VpdGVzLgorICAgUGFzc2luZyA6ZGF0YTpgflB1cnBvc2UuU0VSVkVSX0FVVEhgIGFzICpwdXJwb3NlKiBzZXRzCisgICA6ZGF0YTpgflNTTENvbnRleHQudmVyaWZ5X21vZGVgIHRvIDpkYXRhOmBDRVJUX1JFUVVJUkVEYCBhbmQgZWl0aGVyCisgICBsb2FkcyBDQSBjZXJ0aWZpY2F0ZXMgKHdoZW4gYXQgbGVhc3Qgb25lIG9mICpjYWZpbGUqLCAqY2FwYXRoKiBvciAqY2FkYXRhKgorICAgaXMgZ2l2ZW4pIG9yIHVzZXMgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYCB0byBsb2FkIGRlZmF1bHQKKyAgIENBIGNlcnRpZmljYXRlcy4KKworICAgLi4gbm90ZTo6CisgICAgICBUaGUgcHJvdG9jb2wsIG9wdGlvbnMsIGNpcGhlciBhbmQgb3RoZXIgc2V0dGluZ3MgbWF5IGNoYW5nZSB0byBtb3JlCisgICAgICByZXN0cmljdGl2ZSB2YWx1ZXMgYW55dGltZSB3aXRob3V0IHByaW9yIGRlcHJlY2F0aW9uLiAgVGhlIHZhbHVlcworICAgICAgcmVwcmVzZW50IGEgZmFpciBiYWxhbmNlIGJldHdlZW4gY29tcGF0aWJpbGl0eSBhbmQgc2VjdXJpdHkuCisKKyAgICAgIElmIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgc3BlY2lmaWMgc2V0dGluZ3MsIHlvdSBzaG91bGQgY3JlYXRlIGEKKyAgICAgIDpjbGFzczpgU1NMQ29udGV4dGAgYW5kIGFwcGx5IHRoZSBzZXR0aW5ncyB5b3Vyc2VsZi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogUmFuZG9tIGdlbmVyYXRpb24KIF5eXl5eXl5eXl5eXl5eXl5eCiAKQEAgLTM1Niw2ICszOTgsNjEgQEAKICAgIEdpdmVuIGEgY2VydGlmaWNhdGUgYXMgYW4gQVNDSUkgUEVNIHN0cmluZywgcmV0dXJucyBhIERFUi1lbmNvZGVkIHNlcXVlbmNlIG9mCiAgICBieXRlcyBmb3IgdGhhdCBzYW1lIGNlcnRpZmljYXRlLgogCisuLiBmdW5jdGlvbjo6IGdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisKKyAgIFJldHVybnMgYSBuYW1lZCB0dXBsZSB3aXRoIHBhdGhzIHRvIE9wZW5TU0wncyBkZWZhdWx0IGNhZmlsZSBhbmQgY2FwYXRoLgorICAgVGhlIHBhdGhzIGFyZSB0aGUgc2FtZSBhcyB1c2VkIGJ5CisgICA6bWV0aDpgU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNgLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEKKyAgIDp0ZXJtOmBuYW1lZCB0dXBsZWAgYGBEZWZhdWx0VmVyaWZ5UGF0aHNgYDoKKworICAgKiA6YXR0cjpgY2FmaWxlYCAtIHJlc29sdmVkIHBhdGggdG8gY2FmaWxlIG9yIE5vbmUgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwKKyAgICogOmF0dHI6YGNhcGF0aGAgLSByZXNvbHZlZCBwYXRoIHRvIGNhcGF0aCBvciBOb25lIGlmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FmaWxlX2VudmAgLSBPcGVuU1NMJ3MgZW52aXJvbm1lbnQga2V5IHRoYXQgcG9pbnRzIHRvIGEgY2FmaWxlLAorICAgKiA6YXR0cjpgb3BlbnNzbF9jYWZpbGVgIC0gaGFyZCBjb2RlZCBwYXRoIHRvIGEgY2FmaWxlLAorICAgKiA6YXR0cjpgb3BlbnNzbF9jYXBhdGhfZW52YCAtIE9wZW5TU0wncyBlbnZpcm9ubWVudCBrZXkgdGhhdCBwb2ludHMgdG8gYSBjYXBhdGgsCisgICAqIDphdHRyOmBvcGVuc3NsX2NhcGF0aGAgLSBoYXJkIGNvZGVkIHBhdGggdG8gYSBjYXBhdGggZGlyZWN0b3J5CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGVudW1fY2VydGlmaWNhdGVzKHN0b3JlX25hbWUpCisKKyAgIFJldHJpZXZlIGNlcnRpZmljYXRlcyBmcm9tIFdpbmRvd3MnIHN5c3RlbSBjZXJ0IHN0b3JlLiAqc3RvcmVfbmFtZSogbWF5IGJlCisgICBvbmUgb2YgYGBDQWBgLCBgYFJPT1RgYCBvciBgYE1ZYGAuIFdpbmRvd3MgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBjZXJ0CisgICBzdG9yZXMsIHRvby4KKworICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChjZXJ0X2J5dGVzLCBlbmNvZGluZ190eXBlLCB0cnVzdCkgdHVwbGVzLgorICAgVGhlIGVuY29kaW5nX3R5cGUgc3BlY2lmaWVzIHRoZSBlbmNvZGluZyBvZiBjZXJ0X2J5dGVzLiBJdCBpcyBlaXRoZXIKKyAgIDpjb25zdDpgeDUwOV9hc25gIGZvciBYLjUwOSBBU04uMSBkYXRhIG9yIDpjb25zdDpgcGtjc183X2FzbmAgZm9yCisgICBQS0NTIzcgQVNOLjEgZGF0YS4gVHJ1c3Qgc3BlY2lmaWVzIHRoZSBwdXJwb3NlIG9mIHRoZSBjZXJ0aWZpY2F0ZSBhcyBhIHNldAorICAgb2YgT0lEUyBvciBleGFjdGx5IGBgVHJ1ZWBgIGlmIHRoZSBjZXJ0aWZpY2F0ZSBpcyB0cnVzdHdvcnRoeSBmb3IgYWxsCisgICBwdXJwb3Nlcy4KKworICAgRXhhbXBsZTo6CisKKyAgICAgID4+PiBzc2wuZW51bV9jZXJ0aWZpY2F0ZXMoIkNBIikKKyAgICAgIFsoYidkYXRhLi4uJywgJ3g1MDlfYXNuJywgeycxLjMuNi4xLjUuNS43LjMuMScsICcxLjMuNi4xLjUuNS43LjMuMid9KSwKKyAgICAgICAoYidkYXRhLi4uJywgJ3g1MDlfYXNuJywgVHJ1ZSldCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogZW51bV9jcmxzKHN0b3JlX25hbWUpCisKKyAgIFJldHJpZXZlIENSTHMgZnJvbSBXaW5kb3dzJyBzeXN0ZW0gY2VydCBzdG9yZS4gKnN0b3JlX25hbWUqIG1heSBiZQorICAgb25lIG9mIGBgQ0FgYCwgYGBST09UYGAgb3IgYGBNWWBgLiBXaW5kb3dzIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgY2VydAorICAgc3RvcmVzLCB0b28uCisKKyAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiAoY2VydF9ieXRlcywgZW5jb2RpbmdfdHlwZSwgdHJ1c3QpIHR1cGxlcy4KKyAgIFRoZSBlbmNvZGluZ190eXBlIHNwZWNpZmllcyB0aGUgZW5jb2Rpbmcgb2YgY2VydF9ieXRlcy4gSXQgaXMgZWl0aGVyCisgICA6Y29uc3Q6YHg1MDlfYXNuYCBmb3IgWC41MDkgQVNOLjEgZGF0YSBvciA6Y29uc3Q6YHBrY3NfN19hc25gIGZvcgorICAgUEtDUyM3IEFTTi4xIGRhdGEuCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogQ29uc3RhbnRzCiBeXl5eXl5eXl4KIApAQCAtMzkyLDYgKzQ4OSwzOCBAQAogICAgYmUgcGFzc2VkLCBlaXRoZXIgdG8gOm1ldGg6YFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zYCBvciBhcyBhCiAgICB2YWx1ZSBvZiB0aGUgYGBjYV9jZXJ0c2BgIHBhcmFtZXRlciB0byA6ZnVuYzpgd3JhcF9zb2NrZXRgLgogCisuLiBkYXRhOjogVkVSSUZZX0RFRkFVTFQKKworICAgUG9zc2libGUgdmFsdWUgZm9yIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AuIEluIHRoaXMgbW9kZSwKKyAgIGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdHMgKENSTHMpIGFyZSBub3QgY2hlY2tlZC4gQnkgZGVmYXVsdCBPcGVuU1NMCisgICBkb2VzIG5laXRoZXIgcmVxdWlyZSBub3IgdmVyaWZ5IENSTHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogVkVSSUZZX0NSTF9DSEVDS19MRUFGCisKKyAgIFBvc3NpYmxlIHZhbHVlIGZvciA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgLiBJbiB0aGlzIG1vZGUsIG9ubHkgdGhlCisgICBwZWVyIGNlcnQgaXMgY2hlY2sgYnV0IG5vbiBvZiB0aGUgaW50ZXJtZWRpYXRlIENBIGNlcnRpZmljYXRlcy4gVGhlIG1vZGUKKyAgIHJlcXVpcmVzIGEgdmFsaWQgQ1JMIHRoYXQgaXMgc2lnbmVkIGJ5IHRoZSBwZWVyIGNlcnQncyBpc3N1ZXIgKGl0cyBkaXJlY3QKKyAgIGFuY2VzdG9yIENBKS4gSWYgbm8gcHJvcGVyIGhhcyBiZWVuIGxvYWRlZAorICAgOmF0dHI6YFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zYCwgdmFsaWRhdGlvbiB3aWxsIGZhaWwuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogVkVSSUZZX0NSTF9DSEVDS19DSEFJTgorCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzYC4gSW4gdGhpcyBtb2RlLCBDUkxzIG9mCisgICBhbGwgY2VydGlmaWNhdGVzIGluIHRoZSBwZWVyIGNlcnQgY2hhaW4gYXJlIGNoZWNrZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogVkVSSUZZX1g1MDlfU1RSSUNUCisKKyAgIFBvc3NpYmxlIHZhbHVlIGZvciA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgIHRvIGRpc2FibGUgd29ya2Fyb3VuZHMKKyAgIGZvciBicm9rZW4gWC41MDkgY2VydGlmaWNhdGVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZGF0YTo6IFBST1RPQ09MX1NTTHYyCiAKICAgIFNlbGVjdHMgU1NMIHZlcnNpb24gMiBhcyB0aGUgY2hhbm5lbCBlbmNyeXB0aW9uIHByb3RvY29sLgpAQCAtNDE3LDkgKzU0NiwyMiBAQAogCiAuLiBkYXRhOjogUFJPVE9DT0xfVExTdjEKIAotICAgU2VsZWN0cyBUTFMgdmVyc2lvbiAxIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuICBUaGlzIGlzIHRoZSBtb3N0CisgICBTZWxlY3RzIFRMUyB2ZXJzaW9uIDEuMCBhcyB0aGUgY2hhbm5lbCBlbmNyeXB0aW9uIHByb3RvY29sLgorCisuLiBkYXRhOjogUFJPVE9DT0xfVExTdjFfMQorCisgICBTZWxlY3RzIFRMUyB2ZXJzaW9uIDEuMSBhcyB0aGUgY2hhbm5lbCBlbmNyeXB0aW9uIHByb3RvY29sLgorICAgQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMS4wLjErLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFBST1RPQ09MX1RMU3YxXzIKKworICAgU2VsZWN0cyBUTFMgdmVyc2lvbiAxLjIgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gVGhpcyBpcyB0aGUgbW9zdAogICAgbW9kZXJuIHZlcnNpb24sIGFuZCBwcm9iYWJseSB0aGUgYmVzdCBjaG9pY2UgZm9yIG1heGltdW0gcHJvdGVjdGlvbiwgaWYgYm90aAotICAgc2lkZXMgY2FuIHNwZWFrIGl0LgorICAgc2lkZXMgY2FuIHNwZWFrIGl0LiAgQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMS4wLjErLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gZGF0YTo6IE9QX0FMTAogCkBAIC00NTMsNiArNTk1LDIyIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBkYXRhOjogT1BfTk9fVExTdjFfMQorCisgICBQcmV2ZW50cyBhIFRMU3YxLjEgY29ubmVjdGlvbi4gVGhpcyBvcHRpb24gaXMgb25seSBhcHBsaWNhYmxlIGluIGNvbmp1bmN0aW9uCisgICB3aXRoIDpjb25zdDpgUFJPVE9DT0xfU1NMdjIzYC4gSXQgcHJldmVudHMgdGhlIHBlZXJzIGZyb20gY2hvb3NpbmcgVExTdjEuMSBhcworICAgdGhlIHByb3RvY29sIHZlcnNpb24uIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBPUF9OT19UTFN2MV8yCisKKyAgIFByZXZlbnRzIGEgVExTdjEuMiBjb25uZWN0aW9uLiBUaGlzIG9wdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgaW4gY29uanVuY3Rpb24KKyAgIHdpdGggOmNvbnN0OmBQUk9UT0NPTF9TU0x2MjNgLiBJdCBwcmV2ZW50cyB0aGUgcGVlcnMgZnJvbSBjaG9vc2luZyBUTFN2MS4yIGFzCisgICB0aGUgcHJvdG9jb2wgdmVyc2lvbi4gQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMS4wLjErLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZGF0YTo6IE9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRQogCiAgICBVc2UgdGhlIHNlcnZlcidzIGNpcGhlciBvcmRlcmluZyBwcmVmZXJlbmNlLCByYXRoZXIgdGhhbiB0aGUgY2xpZW50J3MuCkBAIC01NDksNiArNzA3LDM3IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBkYXRhOjogQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkUKKyAgICAgICAgICBBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUgorICAgICAgICAgIEFMRVJUX0RFU0NSSVBUSU9OXyoKKworICAgQWxlcnQgRGVzY3JpcHRpb25zIGZyb20gOnJmYzpgNTI0NmAgYW5kIG90aGVycy4gVGhlIGBJQU5BIFRMUyBBbGVydCBSZWdpc3RyeQorICAgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sI3Rscy1wYXJhbWV0ZXJzLTY+YF8KKyAgIGNvbnRhaW5zIHRoaXMgbGlzdCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgUkZDcyB3aGVyZSB0aGVpciBtZWFuaW5nIGlzIGRlZmluZWQuCisKKyAgIFVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaW4KKyAgIDptZXRoOmBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQdXJwb3NlLlNFUlZFUl9BVVRICisKKyAgIE9wdGlvbiBmb3IgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGFuZAorICAgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYC4gIFRoaXMgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICBjb250ZXh0IG1heSBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBXZWIgc2VydmVycyAodGhlcmVmb3JlLCBpdCB3aWxsCisgICBiZSB1c2VkIHRvIGNyZWF0ZSBjbGllbnQtc2lkZSBzb2NrZXRzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQdXJwb3NlLkNMSUVOVF9BVVRICisKKyAgIE9wdGlvbiBmb3IgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGFuZAorICAgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYC4gIFRoaXMgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICBjb250ZXh0IG1heSBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBXZWIgY2xpZW50cyAodGhlcmVmb3JlLCBpdCB3aWxsCisgICBiZSB1c2VkIHRvIGNyZWF0ZSBzZXJ2ZXItc2lkZSBzb2NrZXRzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogU1NMIFNvY2tldHMKIC0tLS0tLS0tLS0tCkBAIC01ODQsMTAgKzc3MywxNiBAQAogCiAgICBQZXJmb3JtIHRoZSBTU0wgc2V0dXAgaGFuZHNoYWtlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGhhbmRzaGFrZSBtZXRob2QgYWxzbyBwZXJmb3JtY2UgOmZ1bmM6YG1hdGNoX2hvc3RuYW1lYCB3aGVuIHRoZQorICAgICAgOmF0dHI6YH5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhdHRyaWJ1dGUgb2YgdGhlIHNvY2tldCdzCisgICAgICA6YXR0cjpgflNTTFNvY2tldC5jb250ZXh0YCBpcyB0cnVlLgorCiAuLiBtZXRob2Q6OiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoYmluYXJ5X2Zvcm09RmFsc2UpCiAKICAgIElmIHRoZXJlIGlzIG5vIGNlcnRpZmljYXRlIGZvciB0aGUgcGVlciBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLAotICAgcmV0dXJucyBgYE5vbmVgYC4KKyAgIHJldHVybiBgYE5vbmVgYC4gIElmIHRoZSBTU0wgaGFuZHNoYWtlIGhhc24ndCBiZWVuIGRvbmUgeWV0LCByYWlzZQorICAgOmV4YzpgVmFsdWVFcnJvcmAuCiAKICAgIElmIHRoZSBgYGJpbmFyeV9mb3JtYGAgcGFyYW1ldGVyIGlzIDpjb25zdDpgRmFsc2VgLCBhbmQgYSBjZXJ0aWZpY2F0ZSB3YXMKICAgIHJlY2VpdmVkIGZyb20gdGhlIHBlZXIsIHRoaXMgbWV0aG9kIHJldHVybnMgYSA6Y2xhc3M6YGRpY3RgIGluc3RhbmNlLiAgSWYgdGhlCkBAIC02NDQsNiArODM5LDEzIEBACiAgICAgICBUaGUgcmV0dXJuZWQgZGljdGlvbmFyeSBpbmNsdWRlcyBhZGRpdGlvbmFsIGl0ZW1zIHN1Y2ggYXMgYGBpc3N1ZXJgYAogICAgICAgYW5kIGBgbm90QmVmb3JlYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgd2hlbiB0aGUgaGFuZHNoYWtlIGlzbid0IGRvbmUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgcmV0dXJuZWQgZGljdGlvbmFyeSBpbmNsdWRlcyBhZGRpdGlvbmFsIFg1MDl2MyBleHRlbnNpb24gaXRlbXMKKyAgICAgIHN1Y2ggYXMgYGBjcmxEaXN0cmlidXRpb25Qb2ludHNgYCwgYGBjYUlzc3VlcnNgYCBhbmQgYGBPQ1NQYGAgVVJJcy4KKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmNpcGhlcigpCiAKICAgIFJldHVybnMgYSB0aHJlZS12YWx1ZSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIgYmVpbmcgdXNlZCwgdGhlCkBAIC03MTQsMTEgKzkxNiwzMCBAQAogCiAgICBDcmVhdGUgYSBuZXcgU1NMIGNvbnRleHQuICBZb3UgbXVzdCBwYXNzICpwcm90b2NvbCogd2hpY2ggbXVzdCBiZSBvbmUKICAgIG9mIHRoZSBgYFBST1RPQ09MXypgYCBjb25zdGFudHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZS4KLSAgIDpkYXRhOmBQUk9UT0NPTF9TU0x2MjNgIGlzIHJlY29tbWVuZGVkIGZvciBtYXhpbXVtIGludGVyb3BlcmFiaWxpdHkuCisgICA6ZGF0YTpgUFJPVE9DT0xfU1NMdjIzYCBpcyBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIG1heGltdW0KKyAgIGludGVyb3BlcmFiaWxpdHkuCisKKyAgIC4uIHNlZWFsc286OgorICAgICAgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGxldHMgdGhlIDptb2Q6YHNzbGAgbW9kdWxlIGNob29zZQorICAgICAgc2VjdXJpdHkgc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gcHVycG9zZS4KIAogCiA6Y2xhc3M6YFNTTENvbnRleHRgIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXM6CiAKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuY2VydF9zdG9yZV9zdGF0cygpCisKKyAgIEdldCBzdGF0aXN0aWNzIGFib3V0IHF1YW50aXRpZXMgb2YgbG9hZGVkIFguNTA5IGNlcnRpZmljYXRlcywgY291bnQgb2YKKyAgIFguNTA5IGNlcnRpZmljYXRlcyBmbGFnZ2VkIGFzIENBIGNlcnRpZmljYXRlcyBhbmQgY2VydGlmaWNhdGUgcmV2b2NhdGlvbgorICAgbGlzdHMgYXMgZGljdGlvbmFyeS4KKworICAgRXhhbXBsZSBmb3IgYSBjb250ZXh0IHdpdGggb25lIENBIGNlcnQgYW5kIG9uZSBvdGhlciBjZXJ0OjoKKworICAgICAgPj4+IGNvbnRleHQuY2VydF9zdG9yZV9zdGF0cygpCisgICAgICB7J2NybCc6IDAsICd4NTA5X2NhJzogMSwgJ3g1MDknOiAyfQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBTU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZT1Ob25lLCBwYXNzd29yZD1Ob25lKQogCiAgICBMb2FkIGEgcHJpdmF0ZSBrZXkgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNlcnRpZmljYXRlLiAgVGhlICpjZXJ0ZmlsZSoKQEAgLTc0OSwxMiArOTcwLDMyIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpwYXNzd29yZCouCiAKLS4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSkKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCkKKworICAgTG9hZCBhIHNldCBvZiBkZWZhdWx0ICJjZXJ0aWZpY2F0aW9uIGF1dGhvcml0eSIgKENBKSBjZXJ0aWZpY2F0ZXMgZnJvbQorICAgZGVmYXVsdCBsb2NhdGlvbnMuIE9uIFdpbmRvd3MgaXQgbG9hZHMgQ0EgY2VydHMgZnJvbSB0aGUgYGBDQWBgIGFuZAorICAgYGBST09UYGAgc3lzdGVtIHN0b3Jlcy4gT24gb3RoZXIgc3lzdGVtcyBpdCBjYWxscworICAgOm1ldGg6YFNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYC4gSW4gdGhlIGZ1dHVyZSB0aGUgbWV0aG9kIG1heQorICAgbG9hZCBDQSBjZXJ0aWZpY2F0ZXMgZnJvbSBvdGhlciBsb2NhdGlvbnMsIHRvby4KKworICAgVGhlICpwdXJwb3NlKiBmbGFnIHNwZWNpZmllcyB3aGF0IGtpbmQgb2YgQ0EgY2VydGlmaWNhdGVzIGFyZSBsb2FkZWQuIFRoZQorICAgZGVmYXVsdCBzZXR0aW5ncyA6ZGF0YTpgUHVycG9zZS5TRVJWRVJfQVVUSGAgbG9hZHMgY2VydGlmaWNhdGVzLCB0aGF0IGFyZQorICAgZmxhZ2dlZCBhbmQgdHJ1c3RlZCBmb3IgVExTIHdlYiBzZXJ2ZXIgYXV0aGVudGljYXRpb24gKGNsaWVudCBzaWRlCisgICBzb2NrZXRzKS4gOmRhdGE6YFB1cnBvc2UuQ0xJRU5UX0FVVEhgIGxvYWRzIENBIGNlcnRpZmljYXRlcyBmb3IgY2xpZW50CisgICBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gb24gdGhlIHNlcnZlciBzaWRlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSkKIAogICAgTG9hZCBhIHNldCBvZiAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIHVzZWQgdG8gdmFsaWRhdGUKICAgIG90aGVyIHBlZXJzJyBjZXJ0aWZpY2F0ZXMgd2hlbiA6ZGF0YTpgdmVyaWZ5X21vZGVgIGlzIG90aGVyIHRoYW4KICAgIDpkYXRhOmBDRVJUX05PTkVgLiAgQXQgbGVhc3Qgb25lIG9mICpjYWZpbGUqIG9yICpjYXBhdGgqIG11c3QgYmUgc3BlY2lmaWVkLgogCisgICBUaGlzIG1ldGhvZCBjYW4gYWxzbyBsb2FkIGNlcnRpZmljYXRpb24gcmV2b2NhdGlvbiBsaXN0cyAoQ1JMcykgaW4gUEVNIG9yCisgICBvciBERVIgZm9ybWF0LiBJbiBvcmRlciB0byBtYWtlIHVzZSBvZiBDUkxzLCA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgCisgICBtdXN0IGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkuCisKICAgIFRoZSAqY2FmaWxlKiBzdHJpbmcsIGlmIHByZXNlbnQsIGlzIHRoZSBwYXRoIHRvIGEgZmlsZSBvZiBjb25jYXRlbmF0ZWQKICAgIENBIGNlcnRpZmljYXRlcyBpbiBQRU0gZm9ybWF0LiBTZWUgdGhlIGRpc2N1c3Npb24gb2YKICAgIDpyZWY6YHNzbC1jZXJ0aWZpY2F0ZXNgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBhcnJhbmdlIHRoZQpAQCAtNzY1LDYgKzEwMDYsMjUgQEAKICAgIGZvbGxvd2luZyBhbiBgT3BlblNTTCBzcGVjaWZpYyBsYXlvdXQKICAgIDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3Mvc3NsL1NTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zLmh0bWw+YF8uCiAKKyAgIFRoZSAqY2FkYXRhKiBvYmplY3QsIGlmIHByZXNlbnQsIGlzIGVpdGhlciBhbiBBU0NJSSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKKyAgIFBFTS1lbmNvZGVkIGNlcnRpZmljYXRlcyBvciBhIGJ5dGVzLWxpa2Ugb2JqZWN0IG9mIERFUi1lbmNvZGVkCisgICBjZXJ0aWZpY2F0ZXMuIExpa2Ugd2l0aCAqY2FwYXRoKiBleHRyYSBsaW5lcyBhcm91bmQgUEVNLWVuY29kZWQKKyAgIGNlcnRpZmljYXRlcyBhcmUgaWdub3JlZCBidXQgYXQgbGVhc3Qgb25lIGNlcnRpZmljYXRlIG11c3QgYmUgcHJlc2VudC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIE5ldyBvcHRpb25hbCBhcmd1bWVudCAqY2FkYXRhKgorCisuLiBtZXRob2Q6OiBTU0xDb250ZXh0LmdldF9jYV9jZXJ0cyhiaW5hcnlfZm9ybT1GYWxzZSkKKworICAgR2V0IGEgbGlzdCBvZiBsb2FkZWQgImNlcnRpZmljYXRpb24gYXV0aG9yaXR5IiAoQ0EpIGNlcnRpZmljYXRlcy4gSWYgdGhlCisgICBgYGJpbmFyeV9mb3JtYGAgcGFyYW1ldGVyIGlzIDpjb25zdDpgRmFsc2VgIGVhY2ggbGlzdAorICAgZW50cnkgaXMgYSBkaWN0IGxpa2UgdGhlIG91dHB1dCBvZiA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YC4gT3RoZXJ3aXNlCisgICB0aGUgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIERFUi1lbmNvZGVkIGNlcnRpZmljYXRlcy4gVGhlIHJldHVybmVkIGxpc3QKKyAgIGRvZXMgbm90IGNvbnRhaW4gY2VydGlmaWNhdGVzIGZyb20gKmNhcGF0aCogdW5sZXNzIGEgY2VydGlmaWNhdGUgd2FzCisgICByZXF1ZXN0ZWQgYW5kIGxvYWRlZCBieSBhIFNTTCBjb25uZWN0aW9uLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQogCiAgICBMb2FkIGEgc2V0IG9mIGRlZmF1bHQgImNlcnRpZmljYXRpb24gYXV0aG9yaXR5IiAoQ0EpIGNlcnRpZmljYXRlcyBmcm9tCkBAIC04MDIsNiArMTA2Miw1NiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhzZXJ2ZXJfbmFtZV9jYWxsYmFjaykKKworICAgUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBUTFMgQ2xpZW50IEhlbGxvCisgICBoYW5kc2hha2UgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZCBieSB0aGUgU1NML1RMUyBzZXJ2ZXIgd2hlbiB0aGUgVExTIGNsaWVudAorICAgc3BlY2lmaWVzIGEgc2VydmVyIG5hbWUgaW5kaWNhdGlvbi4gVGhlIHNlcnZlciBuYW1lIGluZGljYXRpb24gbWVjaGFuaXNtCisgICBpcyBzcGVjaWZpZWQgaW4gOnJmYzpgNjA2NmAgc2VjdGlvbiAzIC0gU2VydmVyIE5hbWUgSW5kaWNhdGlvbi4KKworICAgT25seSBvbmUgY2FsbGJhY2sgY2FuIGJlIHNldCBwZXIgYGBTU0xDb250ZXh0YGAuICBJZiAqc2VydmVyX25hbWVfY2FsbGJhY2sqCisgICBpcyBgYE5vbmVgYCB0aGVuIHRoZSBjYWxsYmFjayBpcyBkaXNhYmxlZC4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGEKKyAgIHN1YnNlcXVlbnQgdGltZSB3aWxsIGRpc2FibGUgdGhlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFjay4KKworICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCAqc2VydmVyX25hbWVfY2FsbGJhY2sqLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRocmVlCisgICBhcmd1bWVudHM7IHRoZSBmaXJzdCBiZWluZyB0aGUgOmNsYXNzOmBzc2wuU1NMU29ja2V0YCwgdGhlIHNlY29uZCBpcyBhIHN0cmluZworICAgdGhhdCByZXByZXNlbnRzIHRoZSBzZXJ2ZXIgbmFtZSB0aGF0IHRoZSBjbGllbnQgaXMgaW50ZW5kaW5nIHRvIGNvbW11bmljYXRlCisgICAob3IgOmNvbnN0OmBOb25lYCBpZiB0aGUgVExTIENsaWVudCBIZWxsbyBkb2VzIG5vdCBjb250YWluIGEgc2VydmVyIG5hbWUpCisgICBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSBvcmlnaW5hbCA6Y2xhc3M6YFNTTENvbnRleHRgLiBUaGUgc2VydmVyIG5hbWUKKyAgIGFyZ3VtZW50IGlzIHRoZSBJRE5BIGRlY29kZWQgc2VydmVyIG5hbWUuCisKKyAgIEEgdHlwaWNhbCB1c2Ugb2YgdGhpcyBjYWxsYmFjayBpcyB0byBjaGFuZ2UgdGhlIDpjbGFzczpgc3NsLlNTTFNvY2tldGAncworICAgOmF0dHI6YFNTTFNvY2tldC5jb250ZXh0YCBhdHRyaWJ1dGUgdG8gYSBuZXcgb2JqZWN0IG9mIHR5cGUKKyAgIDpjbGFzczpgU1NMQ29udGV4dGAgcmVwcmVzZW50aW5nIGEgY2VydGlmaWNhdGUgY2hhaW4gdGhhdCBtYXRjaGVzIHRoZSBzZXJ2ZXIKKyAgIG5hbWUuCisKKyAgIER1ZSB0byB0aGUgZWFybHkgbmVnb3RpYXRpb24gcGhhc2Ugb2YgdGhlIFRMUyBjb25uZWN0aW9uLCBvbmx5IGxpbWl0ZWQKKyAgIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgYXJlIHVzYWJsZSBsaWtlCisgICA6bWV0aDpgU1NMU29ja2V0LnNlbGVjdGVkX25wbl9wcm90b2NvbGAgYW5kIDphdHRyOmBTU0xTb2NrZXQuY29udGV4dGAuCisgICA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YCwgOm1ldGg6YFNTTFNvY2tldC5nZXRwZWVyY2VydGAsCisgICA6bWV0aDpgU1NMU29ja2V0LmNpcGhlcmAgYW5kIDptZXRoOmBTU0xTb2NrZXQuY29tcHJlc3NgIG1ldGhvZHMgcmVxdWlyZSB0aGF0CisgICB0aGUgVExTIGNvbm5lY3Rpb24gaGFzIHByb2dyZXNzZWQgYmV5b25kIHRoZSBUTFMgQ2xpZW50IEhlbGxvIGFuZCB0aGVyZWZvcmUKKyAgIHdpbGwgbm90IGNvbnRhaW4gcmV0dXJuIG1lYW5pbmdmdWwgdmFsdWVzIG5vciBjYW4gdGhleSBiZSBjYWxsZWQgc2FmZWx5LgorCisgICBUaGUgKnNlcnZlcl9uYW1lX2NhbGxiYWNrKiBmdW5jdGlvbiBtdXN0IHJldHVybiBgYE5vbmVgYCB0byBhbGxvdyB0aGUKKyAgIFRMUyBuZWdvdGlhdGlvbiB0byBjb250aW51ZS4gIElmIGEgVExTIGZhaWx1cmUgaXMgcmVxdWlyZWQsIGEgY29uc3RhbnQKKyAgIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fKiA8QUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1I+YCBjYW4gYmUKKyAgIHJldHVybmVkLiAgT3RoZXIgcmV0dXJuIHZhbHVlcyB3aWxsIHJlc3VsdCBpbiBhIFRMUyBmYXRhbCBlcnJvciB3aXRoCisgICA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SYC4KKworICAgSWYgdGhlcmUgaXMgYSBJRE5BIGRlY29kaW5nIGVycm9yIG9uIHRoZSBzZXJ2ZXIgbmFtZSwgdGhlIFRMUyBjb25uZWN0aW9uCisgICB3aWxsIHRlcm1pbmF0ZSB3aXRoIGFuIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1JgIGZhdGFsIFRMUworICAgYWxlcnQgbWVzc2FnZSB0byB0aGUgY2xpZW50LgorCisgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGZyb20gdGhlICpzZXJ2ZXJfbmFtZV9jYWxsYmFjayogZnVuY3Rpb24gdGhlIFRMUworICAgY29ubmVjdGlvbiB3aWxsIHRlcm1pbmF0ZSB3aXRoIGEgZmF0YWwgVExTIGFsZXJ0IG1lc3NhZ2UKKyAgIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkVgLgorCisgICBUaGlzIG1ldGhvZCB3aWxsIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlmIHRoZSBPcGVuU1NMIGxpYnJhcnkKKyAgIGhhZCBPUEVOU1NMX05PX1RMU0VYVCBkZWZpbmVkIHdoZW4gaXQgd2FzIGJ1aWx0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcyhkaGZpbGUpCiAKICAgIExvYWQgdGhlIGtleSBnZW5lcmF0aW9uIHBhcmFtZXRlcnMgZm9yIERpZmZpZS1IZWxtYW4gKERIKSBrZXkgZXhjaGFuZ2UuCkBAIC04NjgsNiArMTE3OCw0NSBAQAogICAgICAgPj4+IHN0YXRzWydoaXRzJ10sIHN0YXRzWydtaXNzZXMnXQogICAgICAgKDAsIDApCiAKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKQorCisgICBSZXR1cm5zIGEgbGlzdCBvZiBkaWN0cyB3aXRoIGluZm9ybWF0aW9uIG9mIGxvYWRlZCBDQSBjZXJ0cy4gSWYgdGhlCisgICBvcHRpb25hbCBhcmd1bWVudCBpcyB0cnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGUgQ0EKKyAgIGNlcnRpZmljYXRlLgorCisgICAuLiBub3RlOjoKKyAgICAgIENlcnRpZmljYXRlcyBpbiBhIGNhcGF0aCBkaXJlY3RvcnkgYXJlbid0IGxvYWRlZCB1bmxlc3MgdGhleSBoYXZlCisgICAgICBiZWVuIHVzZWQgYXQgbGVhc3Qgb25jZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGF0dHJpYnV0ZTo6IFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUKKworICAgV2V0aGVyIHRvIG1hdGNoIHRoZSBwZWVyIGNlcnQncyBob3N0bmFtZSB3aXRoIDpmdW5jOmBtYXRjaF9ob3N0bmFtZWAgaW4KKyAgIDptZXRoOmBTU0xTb2NrZXQuZG9faGFuZHNoYWtlYC4gVGhlIGNvbnRleHQncworICAgOmF0dHI6YH5TU0xDb250ZXh0LnZlcmlmeV9tb2RlYCBtdXN0IGJlIHNldCB0byA6ZGF0YTpgQ0VSVF9PUFRJT05BTGAgb3IKKyAgIDpkYXRhOmBDRVJUX1JFUVVJUkVEYCwgYW5kIHlvdSBtdXN0IHBhc3MgKnNlcnZlcl9ob3N0bmFtZSogdG8KKyAgIDptZXRoOmB+U1NMQ29udGV4dC53cmFwX3NvY2tldGAgaW4gb3JkZXIgdG8gbWF0Y2ggdGhlIGhvc3RuYW1lLgorCisgICBFeGFtcGxlOjoKKworICAgICAgaW1wb3J0IHNvY2tldCwgc3NsCisKKyAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgIGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICBjb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisKKyAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICBzc2xfc29jayA9IGNvbnRleHQud3JhcF9zb2NrZXQocywgc2VydmVyX2hvc3RuYW1lPSd3d3cudmVyaXNpZ24uY29tJyk6CisgICAgICAgICBzc2xfc29jay5jb25uZWN0KCgnd3d3LnZlcmlzaWduLmNvbScsIDQ0MykpCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAuLiBub3RlOjoKKworICAgICBUaGlzIGZlYXR1cmVzIHJlcXVpcmVzIE9wZW5TU0wgMC45LjhmIG9yIG5ld2VyLgorCiAuLiBhdHRyaWJ1dGU6OiBTU0xDb250ZXh0Lm9wdGlvbnMKIAogICAgQW4gaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIHNldCBvZiBTU0wgb3B0aW9ucyBlbmFibGVkIG9uIHRoaXMgY29udGV4dC4KQEAgLTg4NCw2ICsxMjMzLDE1IEBACiAgICBUaGUgcHJvdG9jb2wgdmVyc2lvbiBjaG9zZW4gd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGNvbnRleHQuICBUaGlzIGF0dHJpYnV0ZQogICAgaXMgcmVhZC1vbmx5LgogCisuLiBhdHRyaWJ1dGU6OiBTU0xDb250ZXh0LnZlcmlmeV9mbGFncworCisgICBUaGUgZmxhZ3MgZm9yIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBvcGVyYXRpb25zLiBZb3UgY2FuIHNldCBmbGFncyBsaWtlCisgICA6ZGF0YTpgVkVSSUZZX0NSTF9DSEVDS19MRUFGYCBieSBPUmluZyB0aGVtIHRvZ2V0aGVyLiBCeSBkZWZhdWx0IE9wZW5TU0wKKyAgIGRvZXMgbmVpdGhlciByZXF1aXJlIG5vciB2ZXJpZnkgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0cyAoQ1JMcykuCisgICBBdmFpbGFibGUgb25seSB3aXRoIG9wZW5zc2wgdmVyc2lvbiAwLjkuOCsuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBhdHRyaWJ1dGU6OiBTU0xDb250ZXh0LnZlcmlmeV9tb2RlCiAKICAgIFdoZXRoZXIgdG8gdHJ5IHRvIHZlcmlmeSBvdGhlciBwZWVycycgY2VydGlmaWNhdGVzIGFuZCBob3cgdG8gYmVoYXZlCkBAIC0xMjczLDcgKzE2MzEsOSBAQAogaGF2ZSB0byBjaGVjayB0aGF0IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUsIHdoaWNoIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCiA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YCwgbWF0Y2hlcyB0aGUgZGVzaXJlZCBzZXJ2aWNlLiAgRm9yIG1hbnkKIHByb3RvY29scyBhbmQgYXBwbGljYXRpb25zLCB0aGUgc2VydmljZSBjYW4gYmUgaWRlbnRpZmllZCBieSB0aGUgaG9zdG5hbWU7Ci1pbiB0aGlzIGNhc2UsIHRoZSA6ZnVuYzpgbWF0Y2hfaG9zdG5hbWVgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkLgoraW4gdGhpcyBjYXNlLCB0aGUgOmZ1bmM6YG1hdGNoX2hvc3RuYW1lYCBmdW5jdGlvbiBjYW4gYmUgdXNlZC4gIFRoaXMgY29tbW9uCitjaGVjayBpcyBhdXRvbWF0aWNhbGx5IHBlcmZvcm1lZCB3aGVuIDphdHRyOmBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBpcworZW5hYmxlZC4KIAogSW4gc2VydmVyIG1vZGUsIGlmIHlvdSB3YW50IHRvIGF1dGhlbnRpY2F0ZSB5b3VyIGNsaWVudHMgdXNpbmcgdGhlIFNTTCBsYXllcgogKHJhdGhlciB0aGFuIHVzaW5nIGEgaGlnaGVyLWxldmVsIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSksIHlvdSdsbCBhbHNvIGhhdmUKQEAgLTEzNDksMyArMTcwOSwxMiBAQAogCiAgICBgUkZDIDQzNjY6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBFeHRlbnNpb25zIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzY2PmBfCiAgICAgICAgQmxha2UtV2lsc29uIGV0LiBhbC4KKworICAgYFJGQyA1MjQ2OiBUaGUgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFByb3RvY29sIFZlcnNpb24gMS4yIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM1MjQ2PmBfCisgICAgICAgVC4gRGllcmtzIGV0LiBhbC4KKworICAgYFJGQyA2MDY2OiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgRXh0ZW5zaW9ucyA8aHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNjA2Nj5gXworICAgICAgIEQuIEVhc3RsYWtlCisKKyAgIGBJQU5BIFRMUzogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFBhcmFtZXRlcnMgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sPmBfCisgICAgICAgSUFOQQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdC5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdAppbmRleCA2YzIwYWEyLi4yNDc2OWY2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGF0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdApAQCAtNiw3ICs2LDggQEAKICAgICAgICAgICAgICAgb3MubHN0YXQoKSBhbmQgb3MuZnN0YXQoKS4KIC4uIHNlY3Rpb25hdXRob3I6OiBTa2lwIE1vbnRhbmFybyA8c2tpcEBhdXRvbWF0cml4LmNvbT4KIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3RhdC5weWAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTW9kdWxlcy9fc3RhdC5jYAorICAgICAgICAgICAgICAgICA6c291cmNlOmBMaWIvc3RhdC5weWAKIAogLS0tLS0tLS0tLS0tLS0KIApAQCAtMTUsNiArMTYsOSBAQAogZXhpc3QpLiAgRm9yIGNvbXBsZXRlIGRldGFpbHMgYWJvdXQgdGhlIDpjOmZ1bmM6YHN0YXRgLCA6YzpmdW5jOmBmc3RhdGAgYW5kCiA6YzpmdW5jOmBsc3RhdGAgY2FsbHMsIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgc3lzdGVtLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIHN0YXQgbW9kdWxlIGlzIGJhY2tlZCBieSBhIEMgaW1wbGVtZW50YXRpb24uCisKIFRoZSA6bW9kOmBzdGF0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byB0ZXN0IGZvciBzcGVjaWZpYyBmaWxlCiB0eXBlczoKIApAQCAtNTMsNiArNTcsMjQgQEAKIAogICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSBzb2NrZXQuCiAKKy4uIGZ1bmN0aW9uOjogU19JU0RPT1IobW9kZSkKKworICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSBkb29yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBTX0lTUE9SVChtb2RlKQorCisgICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIG1vZGUgaXMgZnJvbSBhbiBldmVudCBwb3J0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBTX0lTV0hUKG1vZGUpCisKKyAgIFJldHVybiBub24temVybyBpZiB0aGUgbW9kZSBpcyBmcm9tIGEgd2hpdGVvdXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUd28gYWRkaXRpb25hbCBmdW5jdGlvbnMgYXJlIGRlZmluZWQgZm9yIG1vcmUgZ2VuZXJhbCBtYW5pcHVsYXRpb24gb2YgdGhlIGZpbGUncwogbW9kZToKIApAQCAtMTEzLDYgKzEzNSwxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyA6ZGF0YTpgU19JRkRPT1JgLCA6ZGF0YTpgU19JRlBPUlRgIGFuZAorICAgICAgOmRhdGE6YFNfSUZXSFRgLgorCiAKIEFsbCB0aGUgdmFyaWFibGVzIGJlbG93IGFyZSBzaW1wbHkgc3ltYm9saWMgaW5kZXhlcyBpbnRvIHRoZSAxMC10dXBsZSByZXR1cm5lZAogYnkgOmZ1bmM6YG9zLnN0YXRgLCA6ZnVuYzpgb3MuZnN0YXRgIG9yIDpmdW5jOmBvcy5sc3RhdGAuCkBAIC0yMTAsNiArMjM2LDI5IEBACiAKICAgIEZJRk8uCiAKKy4uIGRhdGE6OiBTX0lGRE9PUgorCisgICBEb29yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFNfSUZQT1JUCisKKyAgIEV2ZW50IHBvcnQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogU19JRldIVAorCisgICBXaGl0ZW91dC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIG5vdGU6OgorCisgICA6ZGF0YTpgU19JRkRPT1JgLCA6ZGF0YTpgU19JRlBPUlRgIG9yIDpkYXRhOmBTX0lGV0hUYCBhcmUgZGVmaW5lZCBhcworICAgMCB3aGVuIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIHRoZSBmaWxlIHR5cGVzLgorCiBUaGUgZm9sbG93aW5nIGZsYWdzIGNhbiBhbHNvIGJlIHVzZWQgaW4gdGhlICptb2RlKiBhcmd1bWVudCBvZiA6ZnVuYzpgb3MuY2htb2RgOgogCiAuLiBkYXRhOjogU19JU1VJRApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTc3ODM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QKQEAgLTAsMCArMSw0MTggQEAKKzptb2Q6YHN0YXRpc3RpY3NgIC0tLSBNYXRoZW1hdGljYWwgc3RhdGlzdGljcyBmdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogc3RhdGlzdGljcworICAgOnN5bm9wc2lzOiBtYXRoZW1hdGljYWwgc3RhdGlzdGljcyBmdW5jdGlvbnMKKy4uIG1vZHVsZWF1dGhvcjo6IFN0ZXZlbiBEJ0FwcmFubyA8c3RldmUrcHl0aG9uQHBlYXJ3b29kLmluZm8+CisuLiBzZWN0aW9uYXV0aG9yOjogU3RldmVuIEQnQXByYW5vIDxzdGV2ZStweXRob25AcGVhcndvb2QuaW5mbz4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIHRlc3RzZXR1cDo6ICoKKworICAgZnJvbSBzdGF0aXN0aWNzIGltcG9ydCAqCisgICBfX25hbWVfXyA9ICc8ZG9jdGVzdD4nCisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3N0YXRpc3RpY3MucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgY2FsY3VsYXRpbmcgbWF0aGVtYXRpY2FsIHN0YXRpc3RpY3Mgb2YKK251bWVyaWMgKDpjbGFzczpgUmVhbGAtdmFsdWVkKSBkYXRhLgorCisuLiBub3RlOjoKKworICAgVW5sZXNzIGV4cGxpY2l0bHkgbm90ZWQgb3RoZXJ3aXNlLCB0aGVzZSBmdW5jdGlvbnMgc3VwcG9ydCA6Y2xhc3M6YGludGAsCisgICA6Y2xhc3M6YGZsb2F0YCwgOmNsYXNzOmBkZWNpbWFsLkRlY2ltYWxgIGFuZCA6Y2xhc3M6YGZyYWN0aW9ucy5GcmFjdGlvbmAuCisgICBCZWhhdmlvdXIgd2l0aCBvdGhlciB0eXBlcyAod2hldGhlciBpbiB0aGUgbnVtZXJpYyB0b3dlciBvciBub3QpIGlzCisgICBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuICBNaXhlZCB0eXBlcyBhcmUgYWxzbyB1bmRlZmluZWQgYW5kCisgICBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuICBJZiB5b3VyIGlucHV0IGRhdGEgY29uc2lzdHMgb2YgbWl4ZWQgdHlwZXMsCisgICB5b3UgbWF5IGJlIGFibGUgdG8gdXNlIDpmdW5jOmBtYXBgIHRvIGVuc3VyZSBhIGNvbnNpc3RlbnQgcmVzdWx0LCBlLmcuCisgICBgYG1hcChmbG9hdCwgaW5wdXRfZGF0YSlgYC4KKworQXZlcmFnZXMgYW5kIG1lYXN1cmVzIG9mIGNlbnRyYWwgbG9jYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGZ1bmN0aW9ucyBjYWxjdWxhdGUgYW4gYXZlcmFnZSBvciB0eXBpY2FsIHZhbHVlIGZyb20gYSBwb3B1bGF0aW9uCitvciBzYW1wbGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpmdW5jOmBtZWFuYCAgICAgICAgICAgICBBcml0aG1ldGljIG1lYW4gKCJhdmVyYWdlIikgb2YgZGF0YS4KKzpmdW5jOmBtZWRpYW5gICAgICAgICAgICBNZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgZGF0YS4KKzpmdW5jOmBtZWRpYW5fbG93YCAgICAgICBMb3cgbWVkaWFuIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuX2hpZ2hgICAgICAgSGlnaCBtZWRpYW4gb2YgZGF0YS4KKzpmdW5jOmBtZWRpYW5fZ3JvdXBlZGAgICBNZWRpYW4sIG9yIDUwdGggcGVyY2VudGlsZSwgb2YgZ3JvdXBlZCBkYXRhLgorOmZ1bmM6YG1vZGVgICAgICAgICAgICAgIE1vZGUgKG1vc3QgY29tbW9uIHZhbHVlKSBvZiBkaXNjcmV0ZSBkYXRhLgorPT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNZWFzdXJlcyBvZiBzcHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBmdW5jdGlvbnMgY2FsY3VsYXRlIGEgbWVhc3VyZSBvZiBob3cgbXVjaCB0aGUgcG9wdWxhdGlvbiBvciBzYW1wbGUKK3RlbmRzIHRvIGRldmlhdGUgZnJvbSB0aGUgdHlwaWNhbCBvciBhdmVyYWdlIHZhbHVlcy4KKworPT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOmZ1bmM6YHBzdGRldmAgICAgICAgICAgIFBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRhdGEuCis6ZnVuYzpgcHZhcmlhbmNlYCAgICAgICAgUG9wdWxhdGlvbiB2YXJpYW5jZSBvZiBkYXRhLgorOmZ1bmM6YHN0ZGV2YCAgICAgICAgICAgIFNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgZGF0YS4KKzpmdW5jOmB2YXJpYW5jZWAgICAgICAgICBTYW1wbGUgdmFyaWFuY2Ugb2YgZGF0YS4KKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitGdW5jdGlvbiBkZXRhaWxzCistLS0tLS0tLS0tLS0tLS0tCisKK05vdGU6IFRoZSBmdW5jdGlvbnMgZG8gbm90IHJlcXVpcmUgdGhlIGRhdGEgZ2l2ZW4gdG8gdGhlbSB0byBiZSBzb3J0ZWQuCitIb3dldmVyLCBmb3IgcmVhZGluZyBjb252ZW5pZW5jZSwgbW9zdCBvZiB0aGUgZXhhbXBsZXMgc2hvdyBzb3J0ZWQgc2VxdWVuY2VzLgorCisuLiBmdW5jdGlvbjo6IG1lYW4oZGF0YSkKKworICAgUmV0dXJuIHRoZSBzYW1wbGUgYXJpdGhtZXRpYyBtZWFuIG9mICpkYXRhKiwgYSBzZXF1ZW5jZSBvciBpdGVyYXRvciBvZgorICAgcmVhbC12YWx1ZWQgbnVtYmVycy4KKworICAgVGhlIGFyaXRobWV0aWMgbWVhbiBpcyB0aGUgc3VtIG9mIHRoZSBkYXRhIGRpdmlkZWQgYnkgdGhlIG51bWJlciBvZiBkYXRhCisgICBwb2ludHMuICBJdCBpcyBjb21tb25seSBjYWxsZWQgInRoZSBhdmVyYWdlIiwgYWx0aG91Z2ggaXQgaXMgb25seSBvbmUgb2YgbWFueQorICAgZGlmZmVyZW50IG1hdGhlbWF0aWNhbCBhdmVyYWdlcy4gIEl0IGlzIGEgbWVhc3VyZSBvZiB0aGUgY2VudHJhbCBsb2NhdGlvbiBvZgorICAgdGhlIGRhdGEuCisKKyAgIElmICpkYXRhKiBpcyBlbXB0eSwgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCB3aWxsIGJlIHJhaXNlZC4KKworICAgU29tZSBleGFtcGxlcyBvZiB1c2U6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVhbihbMSwgMiwgMywgNCwgNF0pCisgICAgICAyLjgKKyAgICAgID4+PiBtZWFuKFstMS4wLCAyLjUsIDMuMjUsIDUuNzVdKQorICAgICAgMi42MjUKKworICAgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgICA+Pj4gbWVhbihbRigzLCA3KSwgRigxLCAyMSksIEYoNSwgMyksIEYoMSwgMyldKQorICAgICAgRnJhY3Rpb24oMTMsIDIxKQorCisgICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICAgID4+PiBtZWFuKFtEKCIwLjUiKSwgRCgiMC43NSIpLCBEKCIwLjYyNSIpLCBEKCIwLjM3NSIpXSkKKyAgICAgIERlY2ltYWwoJzAuNTYyNScpCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgbWVhbiBpcyBzdHJvbmdseSBhZmZlY3RlZCBieSBvdXRsaWVycyBhbmQgaXMgbm90IGEgcm9idXN0IGVzdGltYXRvcgorICAgICAgZm9yIGNlbnRyYWwgbG9jYXRpb246IHRoZSBtZWFuIGlzIG5vdCBuZWNlc3NhcmlseSBhIHR5cGljYWwgZXhhbXBsZSBvZiB0aGUKKyAgICAgIGRhdGEgcG9pbnRzLiAgRm9yIG1vcmUgcm9idXN0LCBhbHRob3VnaCBsZXNzIGVmZmljaWVudCwgbWVhc3VyZXMgb2YKKyAgICAgIGNlbnRyYWwgbG9jYXRpb24sIHNlZSA6ZnVuYzpgbWVkaWFuYCBhbmQgOmZ1bmM6YG1vZGVgLiAgKEluIHRoaXMgY2FzZSwKKyAgICAgICJlZmZpY2llbnQiIHJlZmVycyB0byBzdGF0aXN0aWNhbCBlZmZpY2llbmN5IHJhdGhlciB0aGFuIGNvbXB1dGF0aW9uYWwKKyAgICAgIGVmZmljaWVuY3kuKQorCisgICAgICBUaGUgc2FtcGxlIG1lYW4gZ2l2ZXMgYW4gdW5iaWFzZWQgZXN0aW1hdGUgb2YgdGhlIHRydWUgcG9wdWxhdGlvbiBtZWFuLAorICAgICAgd2hpY2ggbWVhbnMgdGhhdCwgdGFrZW4gb24gYXZlcmFnZSBvdmVyIGFsbCB0aGUgcG9zc2libGUgc2FtcGxlcywKKyAgICAgIGBgbWVhbihzYW1wbGUpYGAgY29udmVyZ2VzIG9uIHRoZSB0cnVlIG1lYW4gb2YgdGhlIGVudGlyZSBwb3B1bGF0aW9uLiAgSWYKKyAgICAgICpkYXRhKiByZXByZXNlbnRzIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiByYXRoZXIgdGhhbiBhIHNhbXBsZSwgdGhlbgorICAgICAgYGBtZWFuKGRhdGEpYGAgaXMgZXF1aXZhbGVudCB0byBjYWxjdWxhdGluZyB0aGUgdHJ1ZSBwb3B1bGF0aW9uIG1lYW4gzrwuCisKKworLi4gZnVuY3Rpb246OiBtZWRpYW4oZGF0YSkKKworICAgUmV0dXJuIHRoZSBtZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgbnVtZXJpYyBkYXRhLCB1c2luZyB0aGUgY29tbW9uICJtZWFuIG9mCisgICBtaWRkbGUgdHdvIiBtZXRob2QuICBJZiAqZGF0YSogaXMgZW1wdHksIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAgaXMgcmFpc2VkLgorCisgICBUaGUgbWVkaWFuIGlzIGEgcm9idXN0IG1lYXN1cmUgb2YgY2VudHJhbCBsb2NhdGlvbiwgYW5kIGlzIGxlc3MgYWZmZWN0ZWQgYnkKKyAgIHRoZSBwcmVzZW5jZSBvZiBvdXRsaWVycyBpbiB5b3VyIGRhdGEuICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMKKyAgIG9kZCwgdGhlIG1pZGRsZSBkYXRhIHBvaW50IGlzIHJldHVybmVkOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbihbMSwgMywgNV0pCisgICAgICAzCisKKyAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBldmVuLCB0aGUgbWVkaWFuIGlzIGludGVycG9sYXRlZCBieSB0YWtpbmcKKyAgIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW4oWzEsIDMsIDUsIDddKQorICAgICAgNC4wCisKKyAgIFRoaXMgaXMgc3VpdGVkIGZvciB3aGVuIHlvdXIgZGF0YSBpcyBkaXNjcmV0ZSwgYW5kIHlvdSBkb24ndCBtaW5kIHRoYXQgdGhlCisgICBtZWRpYW4gbWF5IG5vdCBiZSBhbiBhY3R1YWwgZGF0YSBwb2ludC4KKworICAgLi4gc2VlYWxzbzo6IDpmdW5jOmBtZWRpYW5fbG93YCwgOmZ1bmM6YG1lZGlhbl9oaWdoYCwgOmZ1bmM6YG1lZGlhbl9ncm91cGVkYAorCisKKy4uIGZ1bmN0aW9uOjogbWVkaWFuX2xvdyhkYXRhKQorCisgICBSZXR1cm4gdGhlIGxvdyBtZWRpYW4gb2YgbnVtZXJpYyBkYXRhLiAgSWYgKmRhdGEqIGlzIGVtcHR5LAorICAgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCBpcyByYWlzZWQuCisKKyAgIFRoZSBsb3cgbWVkaWFuIGlzIGFsd2F5cyBhIG1lbWJlciBvZiB0aGUgZGF0YSBzZXQuICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YQorICAgcG9pbnRzIGlzIG9kZCwgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gIFdoZW4gaXQgaXMgZXZlbiwgdGhlIHNtYWxsZXIgb2YKKyAgIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1XSkKKyAgICAgIDMKKyAgICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1LCA3XSkKKyAgICAgIDMKKworICAgVXNlIHRoZSBsb3cgbWVkaWFuIHdoZW4geW91ciBkYXRhIGFyZSBkaXNjcmV0ZSBhbmQgeW91IHByZWZlciB0aGUgbWVkaWFuIHRvCisgICBiZSBhbiBhY3R1YWwgZGF0YSBwb2ludCByYXRoZXIgdGhhbiBpbnRlcnBvbGF0ZWQuCisKKworLi4gZnVuY3Rpb246OiBtZWRpYW5faGlnaChkYXRhKQorCisgICBSZXR1cm4gdGhlIGhpZ2ggbWVkaWFuIG9mIGRhdGEuICBJZiAqZGF0YSogaXMgZW1wdHksIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAKKyAgIGlzIHJhaXNlZC4KKworICAgVGhlIGhpZ2ggbWVkaWFuIGlzIGFsd2F5cyBhIG1lbWJlciBvZiB0aGUgZGF0YSBzZXQuICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YQorICAgcG9pbnRzIGlzIG9kZCwgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gIFdoZW4gaXQgaXMgZXZlbiwgdGhlIGxhcmdlciBvZgorICAgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9oaWdoKFsxLCAzLCA1XSkKKyAgICAgIDMKKyAgICAgID4+PiBtZWRpYW5faGlnaChbMSwgMywgNSwgN10pCisgICAgICA1CisKKyAgIFVzZSB0aGUgaGlnaCBtZWRpYW4gd2hlbiB5b3VyIGRhdGEgYXJlIGRpc2NyZXRlIGFuZCB5b3UgcHJlZmVyIHRoZSBtZWRpYW4gdG8KKyAgIGJlIGFuIGFjdHVhbCBkYXRhIHBvaW50IHJhdGhlciB0aGFuIGludGVycG9sYXRlZC4KKworCisuLiBmdW5jdGlvbjo6IG1lZGlhbl9ncm91cGVkKGRhdGEsIGludGVydmFsPTEpCisKKyAgIFJldHVybiB0aGUgbWVkaWFuIG9mIGdyb3VwZWQgY29udGludW91cyBkYXRhLCBjYWxjdWxhdGVkIGFzIHRoZSA1MHRoCisgICBwZXJjZW50aWxlLCB1c2luZyBpbnRlcnBvbGF0aW9uLiAgSWYgKmRhdGEqIGlzIGVtcHR5LCA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgCisgICBpcyByYWlzZWQuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzUyLCA1MiwgNTMsIDU0XSkKKyAgICAgIDUyLjUKKworICAgSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUgZGF0YSBhcmUgcm91bmRlZCwgc28gdGhhdCBlYWNoIHZhbHVlIHJlcHJlc2VudHMKKyAgIHRoZSBtaWRwb2ludCBvZiBkYXRhIGNsYXNzZXMsIGUuZy4gMSBpcyB0aGUgbWlkcG9pbnQgb2YgdGhlIGNsYXNzIDAuNS0xLjUsIDIKKyAgIGlzIHRoZSBtaWRwb2ludCBvZiAxLjUtMi41LCAzIGlzIHRoZSBtaWRwb2ludCBvZiAyLjUtMy41LCBldGMuICBXaXRoIHRoZSBkYXRhCisgICBnaXZlbiwgdGhlIG1pZGRsZSB2YWx1ZSBmYWxscyBzb21ld2hlcmUgaW4gdGhlIGNsYXNzIDMuNS00LjUsIGFuZAorICAgaW50ZXJwb2xhdGlvbiBpcyB1c2VkIHRvIGVzdGltYXRlIGl0OgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAyLCAyLCAzLCA0LCA0LCA0LCA0LCA0LCA1XSkKKyAgICAgIDMuNworCisgICBPcHRpb25hbCBhcmd1bWVudCAqaW50ZXJ2YWwqIHJlcHJlc2VudHMgdGhlIGNsYXNzIGludGVydmFsLCBhbmQgZGVmYXVsdHMKKyAgIHRvIDEuICBDaGFuZ2luZyB0aGUgY2xhc3MgaW50ZXJ2YWwgbmF0dXJhbGx5IHdpbGwgY2hhbmdlIHRoZSBpbnRlcnBvbGF0aW9uOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAzLCAzLCA1LCA3XSwgaW50ZXJ2YWw9MSkKKyAgICAgIDMuMjUKKyAgICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMywgMywgNSwgN10sIGludGVydmFsPTIpCisgICAgICAzLjUKKworICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIHRoZSBkYXRhIHBvaW50cyBhcmUgYXQgbGVhc3QKKyAgICppbnRlcnZhbCogYXBhcnQuCisKKyAgIC4uIGltcGwtZGV0YWlsOjoKKworICAgICAgVW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCA6ZnVuYzpgbWVkaWFuX2dyb3VwZWRgIG1heSBjb2VyY2UgZGF0YSBwb2ludHMgdG8KKyAgICAgIGZsb2F0cy4gIFRoaXMgYmVoYXZpb3VyIGlzIGxpa2VseSB0byBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgICogIlN0YXRpc3RpY3MgZm9yIHRoZSBCZWhhdmlvcmFsIFNjaWVuY2VzIiwgRnJlZGVyaWNrIEogR3JhdmV0dGVyIGFuZAorICAgICAgICBMYXJyeSBCIFdhbGxuYXUgKDh0aCBFZGl0aW9uKS4KKworICAgICAgKiBDYWxjdWxhdGluZyB0aGUgYG1lZGlhbiA8aHR0cDovL3d3dy51YWxiZXJ0YS5jYS9+b3BzY2FuL21lZGlhbi5odG1sPmBfLgorCisgICAgICAqIFRoZSBgU1NNRURJQU4KKyAgICAgICAgPGh0dHBzOi8vcHJvamVjdHMuZ25vbWUub3JnL2dudW1lcmljL2RvYy9nbnVtZXJpYy1mdW5jdGlvbi1TU01FRElBTi5zaHRtbD5gXworICAgICAgICBmdW5jdGlvbiBpbiB0aGUgR25vbWUgR251bWVyaWMgc3ByZWFkc2hlZXQsIGluY2x1ZGluZyBgdGhpcyBkaXNjdXNzaW9uCisgICAgICAgIDxodHRwczovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL2dudW1lcmljLWxpc3QvMjAxMS1BcHJpbC9tc2cwMDAxOC5odG1sPmBfLgorCisKKy4uIGZ1bmN0aW9uOjogbW9kZShkYXRhKQorCisgICBSZXR1cm4gdGhlIG1vc3QgY29tbW9uIGRhdGEgcG9pbnQgZnJvbSBkaXNjcmV0ZSBvciBub21pbmFsICpkYXRhKi4gIFRoZSBtb2RlCisgICAod2hlbiBpdCBleGlzdHMpIGlzIHRoZSBtb3N0IHR5cGljYWwgdmFsdWUsIGFuZCBpcyBhIHJvYnVzdCBtZWFzdXJlIG9mCisgICBjZW50cmFsIGxvY2F0aW9uLgorCisgICBJZiAqZGF0YSogaXMgZW1wdHksIG9yIGlmIHRoZXJlIGlzIG5vdCBleGFjdGx5IG9uZSBtb3N0IGNvbW1vbiB2YWx1ZSwKKyAgIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAgaXMgcmFpc2VkLgorCisgICBgYG1vZGVgYCBhc3N1bWVzIGRpc2NyZXRlIGRhdGEsIGFuZCByZXR1cm5zIGEgc2luZ2xlIHZhbHVlLiBUaGlzIGlzIHRoZQorICAgc3RhbmRhcmQgdHJlYXRtZW50IG9mIHRoZSBtb2RlIGFzIGNvbW1vbmx5IHRhdWdodCBpbiBzY2hvb2xzOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1vZGUoWzEsIDEsIDIsIDMsIDMsIDMsIDMsIDRdKQorICAgICAgMworCisgICBUaGUgbW9kZSBpcyB1bmlxdWUgaW4gdGhhdCBpdCBpcyB0aGUgb25seSBzdGF0aXN0aWMgd2hpY2ggYWxzbyBhcHBsaWVzCisgICB0byBub21pbmFsIChub24tbnVtZXJpYykgZGF0YToKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtb2RlKFsicmVkIiwgImJsdWUiLCAiYmx1ZSIsICJyZWQiLCAiZ3JlZW4iLCAicmVkIiwgInJlZCJdKQorICAgICAgJ3JlZCcKKworCisuLiBmdW5jdGlvbjo6IHBzdGRldihkYXRhLCBtdT1Ob25lKQorCisgICBSZXR1cm4gdGhlIHBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uICh0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHBvcHVsYXRpb24KKyAgIHZhcmlhbmNlKS4gIFNlZSA6ZnVuYzpgcHZhcmlhbmNlYCBmb3IgYXJndW1lbnRzIGFuZCBvdGhlciBkZXRhaWxzLgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IHBzdGRldihbMS41LCAyLjUsIDIuNSwgMi43NSwgMy4yNSwgNC43NV0pCisgICAgICAwLjk4Njg5MzI3MzUyNzI1MQorCisKKy4uIGZ1bmN0aW9uOjogcHZhcmlhbmNlKGRhdGEsIG11PU5vbmUpCisKKyAgIFJldHVybiB0aGUgcG9wdWxhdGlvbiB2YXJpYW5jZSBvZiAqZGF0YSosIGEgbm9uLWVtcHR5IGl0ZXJhYmxlIG9mIHJlYWwtdmFsdWVkCisgICBudW1iZXJzLiAgVmFyaWFuY2UsIG9yIHNlY29uZCBtb21lbnQgYWJvdXQgdGhlIG1lYW4sIGlzIGEgbWVhc3VyZSBvZiB0aGUKKyAgIHZhcmlhYmlsaXR5IChzcHJlYWQgb3IgZGlzcGVyc2lvbikgb2YgZGF0YS4gIEEgbGFyZ2UgdmFyaWFuY2UgaW5kaWNhdGVzIHRoYXQKKyAgIHRoZSBkYXRhIGlzIHNwcmVhZCBvdXQ7IGEgc21hbGwgdmFyaWFuY2UgaW5kaWNhdGVzIGl0IGlzIGNsdXN0ZXJlZCBjbG9zZWx5CisgICBhcm91bmQgdGhlIG1lYW4uCisKKyAgIElmIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgKm11KiBpcyBnaXZlbiwgaXQgc2hvdWxkIGJlIHRoZSBtZWFuIG9mCisgICAqZGF0YSouICBJZiBpdCBpcyBtaXNzaW5nIG9yIGBgTm9uZWBgICh0aGUgZGVmYXVsdCksIHRoZSBtZWFuIGlzCisgICBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQuCisKKyAgIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgdmFyaWFuY2UgZnJvbSB0aGUgZW50aXJlIHBvcHVsYXRpb24uICBUbworICAgZXN0aW1hdGUgdGhlIHZhcmlhbmNlIGZyb20gYSBzYW1wbGUsIHRoZSA6ZnVuYzpgdmFyaWFuY2VgIGZ1bmN0aW9uIGlzIHVzdWFsbHkKKyAgIGEgYmV0dGVyIGNob2ljZS4KKworICAgUmFpc2VzIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAgaWYgKmRhdGEqIGlzIGVtcHR5LgorCisgICBFeGFtcGxlczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBkYXRhID0gWzAuMCwgMC4yNSwgMC4yNSwgMS4yNSwgMS41LCAxLjc1LCAyLjc1LCAzLjI1XQorICAgICAgPj4+IHB2YXJpYW5jZShkYXRhKQorICAgICAgMS4yNQorCisgICBJZiB5b3UgaGF2ZSBhbHJlYWR5IGNhbGN1bGF0ZWQgdGhlIG1lYW4gb2YgeW91ciBkYXRhLCB5b3UgY2FuIHBhc3MgaXQgYXMgdGhlCisgICBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgKm11KiB0byBhdm9pZCByZWNhbGN1bGF0aW9uOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG11ID0gbWVhbihkYXRhKQorICAgICAgPj4+IHB2YXJpYW5jZShkYXRhLCBtdSkKKyAgICAgIDEuMjUKKworICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIHZlcmlmeSB0aGF0IHlvdSBoYXZlIHBhc3NlZCB0aGUgYWN0dWFsIG1lYW4KKyAgIGFzICptdSouICBVc2luZyBhcmJpdHJhcnkgdmFsdWVzIGZvciAqbXUqIG1heSBsZWFkIHRvIGludmFsaWQgb3IgaW1wb3NzaWJsZQorICAgcmVzdWx0cy4KKworICAgRGVjaW1hbHMgYW5kIEZyYWN0aW9ucyBhcmUgc3VwcG9ydGVkOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgICA+Pj4gcHZhcmlhbmNlKFtEKCIyNy41IiksIEQoIjMwLjI1IiksIEQoIjMwLjI1IiksIEQoIjM0LjUiKSwgRCgiNDEuNzUiKV0pCisgICAgICBEZWNpbWFsKCcyNC44MTUnKQorCisgICAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICAgID4+PiBwdmFyaWFuY2UoW0YoMSwgNCksIEYoNSwgNCksIEYoMSwgMildKQorICAgICAgRnJhY3Rpb24oMTMsIDcyKQorCisgICAuLiBub3RlOjoKKworICAgICAgV2hlbiBjYWxsZWQgd2l0aCB0aGUgZW50aXJlIHBvcHVsYXRpb24sIHRoaXMgZ2l2ZXMgdGhlIHBvcHVsYXRpb24gdmFyaWFuY2UKKyAgICAgIM+DwrIuICBXaGVuIGNhbGxlZCBvbiBhIHNhbXBsZSBpbnN0ZWFkLCB0aGlzIGlzIHRoZSBiaWFzZWQgc2FtcGxlIHZhcmlhbmNlCisgICAgICBzwrIsIGFsc28ga25vd24gYXMgdmFyaWFuY2Ugd2l0aCBOIGRlZ3JlZXMgb2YgZnJlZWRvbS4KKworICAgICAgSWYgeW91IHNvbWVob3cga25vdyB0aGUgdHJ1ZSBwb3B1bGF0aW9uIG1lYW4gzrwsIHlvdSBtYXkgdXNlIHRoaXMgZnVuY3Rpb24KKyAgICAgIHRvIGNhbGN1bGF0ZSB0aGUgdmFyaWFuY2Ugb2YgYSBzYW1wbGUsIGdpdmluZyB0aGUga25vd24gcG9wdWxhdGlvbiBtZWFuIGFzCisgICAgICB0aGUgc2Vjb25kIGFyZ3VtZW50LiAgUHJvdmlkZWQgdGhlIGRhdGEgcG9pbnRzIGFyZSByZXByZXNlbnRhdGl2ZQorICAgICAgKGUuZy4gaW5kZXBlbmRlbnQgYW5kIGlkZW50aWNhbGx5IGRpc3RyaWJ1dGVkKSwgdGhlIHJlc3VsdCB3aWxsIGJlIGFuCisgICAgICB1bmJpYXNlZCBlc3RpbWF0ZSBvZiB0aGUgcG9wdWxhdGlvbiB2YXJpYW5jZS4KKworCisuLiBmdW5jdGlvbjo6IHN0ZGV2KGRhdGEsIHhiYXI9Tm9uZSkKKworICAgUmV0dXJuIHRoZSBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uICh0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHNhbXBsZQorICAgdmFyaWFuY2UpLiAgU2VlIDpmdW5jOmB2YXJpYW5jZWAgZm9yIGFyZ3VtZW50cyBhbmQgb3RoZXIgZGV0YWlscy4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBzdGRldihbMS41LCAyLjUsIDIuNSwgMi43NSwgMy4yNSwgNC43NV0pCisgICAgICAxLjA4MTA4NzQxNTUyMTk4MjcKKworCisuLiBmdW5jdGlvbjo6IHZhcmlhbmNlKGRhdGEsIHhiYXI9Tm9uZSkKKworICAgUmV0dXJuIHRoZSBzYW1wbGUgdmFyaWFuY2Ugb2YgKmRhdGEqLCBhbiBpdGVyYWJsZSBvZiBhdCBsZWFzdCB0d28gcmVhbC12YWx1ZWQKKyAgIG51bWJlcnMuICBWYXJpYW5jZSwgb3Igc2Vjb25kIG1vbWVudCBhYm91dCB0aGUgbWVhbiwgaXMgYSBtZWFzdXJlIG9mIHRoZQorICAgdmFyaWFiaWxpdHkgKHNwcmVhZCBvciBkaXNwZXJzaW9uKSBvZiBkYXRhLiAgQSBsYXJnZSB2YXJpYW5jZSBpbmRpY2F0ZXMgdGhhdAorICAgdGhlIGRhdGEgaXMgc3ByZWFkIG91dDsgYSBzbWFsbCB2YXJpYW5jZSBpbmRpY2F0ZXMgaXQgaXMgY2x1c3RlcmVkIGNsb3NlbHkKKyAgIGFyb3VuZCB0aGUgbWVhbi4KKworICAgSWYgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCAqeGJhciogaXMgZ2l2ZW4sIGl0IHNob3VsZCBiZSB0aGUgbWVhbiBvZgorICAgKmRhdGEqLiAgSWYgaXQgaXMgbWlzc2luZyBvciBgYE5vbmVgYCAodGhlIGRlZmF1bHQpLCB0aGUgbWVhbiBpcworICAgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorCisgICBVc2UgdGhpcyBmdW5jdGlvbiB3aGVuIHlvdXIgZGF0YSBpcyBhIHNhbXBsZSBmcm9tIGEgcG9wdWxhdGlvbi4gVG8gY2FsY3VsYXRlCisgICB0aGUgdmFyaWFuY2UgZnJvbSB0aGUgZW50aXJlIHBvcHVsYXRpb24sIHNlZSA6ZnVuYzpgcHZhcmlhbmNlYC4KKworICAgUmFpc2VzIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAgaWYgKmRhdGEqIGhhcyBmZXdlciB0aGFuIHR3byB2YWx1ZXMuCisKKyAgIEV4YW1wbGVzOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IGRhdGEgPSBbMi43NSwgMS43NSwgMS4yNSwgMC4yNSwgMC41LCAxLjI1LCAzLjVdCisgICAgICA+Pj4gdmFyaWFuY2UoZGF0YSkKKyAgICAgIDEuMzcyMDIzODA5NTIzODA5NQorCisgICBJZiB5b3UgaGF2ZSBhbHJlYWR5IGNhbGN1bGF0ZWQgdGhlIG1lYW4gb2YgeW91ciBkYXRhLCB5b3UgY2FuIHBhc3MgaXQgYXMgdGhlCisgICBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgKnhiYXIqIHRvIGF2b2lkIHJlY2FsY3VsYXRpb246CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbSA9IG1lYW4oZGF0YSkKKyAgICAgID4+PiB2YXJpYW5jZShkYXRhLCBtKQorICAgICAgMS4zNzIwMjM4MDk1MjM4MDk1CisKKyAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYXR0ZW1wdCB0byB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBwYXNzZWQgdGhlIGFjdHVhbCBtZWFuCisgICBhcyAqeGJhciouICBVc2luZyBhcmJpdHJhcnkgdmFsdWVzIGZvciAqeGJhciogY2FuIGxlYWQgdG8gaW52YWxpZCBvcgorICAgaW1wb3NzaWJsZSByZXN1bHRzLgorCisgICBEZWNpbWFsIGFuZCBGcmFjdGlvbiB2YWx1ZXMgYXJlIHN1cHBvcnRlZDoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgICAgPj4+IHZhcmlhbmNlKFtEKCIyNy41IiksIEQoIjMwLjI1IiksIEQoIjMwLjI1IiksIEQoIjM0LjUiKSwgRCgiNDEuNzUiKV0pCisgICAgICBEZWNpbWFsKCczMS4wMTg3NScpCisKKyAgICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgICAgPj4+IHZhcmlhbmNlKFtGKDEsIDYpLCBGKDEsIDIpLCBGKDUsIDMpXSkKKyAgICAgIEZyYWN0aW9uKDY3LCAxMDgpCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGlzIGlzIHRoZSBzYW1wbGUgdmFyaWFuY2Ugc8KyIHdpdGggQmVzc2VsJ3MgY29ycmVjdGlvbiwgYWxzbyBrbm93biBhcworICAgICAgdmFyaWFuY2Ugd2l0aCBOLTEgZGVncmVlcyBvZiBmcmVlZG9tLiAgUHJvdmlkZWQgdGhhdCB0aGUgZGF0YSBwb2ludHMgYXJlCisgICAgICByZXByZXNlbnRhdGl2ZSAoZS5nLiBpbmRlcGVuZGVudCBhbmQgaWRlbnRpY2FsbHkgZGlzdHJpYnV0ZWQpLCB0aGUgcmVzdWx0CisgICAgICBzaG91bGQgYmUgYW4gdW5iaWFzZWQgZXN0aW1hdGUgb2YgdGhlIHRydWUgcG9wdWxhdGlvbiB2YXJpYW5jZS4KKworICAgICAgSWYgeW91IHNvbWVob3cga25vdyB0aGUgYWN0dWFsIHBvcHVsYXRpb24gbWVhbiDOvCB5b3Ugc2hvdWxkIHBhc3MgaXQgdG8gdGhlCisgICAgICA6ZnVuYzpgcHZhcmlhbmNlYCBmdW5jdGlvbiBhcyB0aGUgKm11KiBwYXJhbWV0ZXIgdG8gZ2V0IHRoZSB2YXJpYW5jZSBvZiBhCisgICAgICBzYW1wbGUuCisKK0V4Y2VwdGlvbnMKKy0tLS0tLS0tLS0KKworQSBzaW5nbGUgZXhjZXB0aW9uIGlzIGRlZmluZWQ6CisKKy4uIGV4Y2VwdGlvbjo6IFN0YXRpc3RpY3NFcnJvcgorCisgICBTdWJjbGFzcyBvZiA6ZXhjOmBWYWx1ZUVycm9yYCBmb3Igc3RhdGlzdGljcy1yZWxhdGVkIGV4Y2VwdGlvbnMuCisKKy4uCisgICAjIFRoaXMgbW9kZWxpbmVzIG11c3QgYXBwZWFyIHdpdGhpbiB0aGUgbGFzdCB0ZW4gbGluZXMgb2YgdGhlIGZpbGUuCisgICBrYXRlOiBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRhYnMgb247IGVuY29kaW5nIHV0Zi04OwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0IGIvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CmluZGV4IGFiNzhjZGMuLmJiNDIxYWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKQEAgLTE1MjYsNyArMTUyNiw3IEBACiAgICBhdCB0aGF0IHBvc2l0aW9uLgogCiAKLS4uIG1ldGhvZDo6IHN0ci5leHBhbmR0YWJzKFt0YWJzaXplXSkKKy4uIG1ldGhvZDo6IHN0ci5leHBhbmR0YWJzKHRhYnNpemU9OCkKIAogICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgYnkgb25lIG9yCiAgICBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlIGdpdmVuIHRhYiBzaXplLiAgVGFiCkBAIC0yNDYyLDYgKzI0NjIsMTAgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBPbmUtZGltZW5zaW9uYWwgbWVtb3J5dmlld3Mgd2l0aCBmb3JtYXRzICdCJywgJ2InIG9yICdjJyBhcmUgbm93IGhhc2hhYmxlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgbWVtb3J5dmlldyBpcyBub3cgcmVnaXN0ZXJlZCBhdXRvbWF0aWNhbGx5IHdpdGgKKyAgICAgIDpjbGFzczpgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlYAorCiAgICA6Y2xhc3M6YG1lbW9yeXZpZXdgIGhhcyBzZXZlcmFsIG1ldGhvZHM6CiAKICAgIC4uIG1ldGhvZDo6IF9fZXFfXyhleHBvcnRlcikKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QgYi9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CmluZGV4IGRkZTMyYjkuLmVjMmUxYmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RydWN0LnJzdApAQCAtNjYsNiArNjYsMTkgQEAKICAgIGZvcm1hdCAoYGBsZW4oYnVmZmVyW29mZnNldDpdKWBgIG11c3QgYmUgYXQgbGVhc3QgYGBjYWxjc2l6ZShmbXQpYGApLgogCiAKKy4uIGZ1bmN0aW9uOjogaXRlcl91bnBhY2soZm10LCBidWZmZXIpCisKKyAgIEl0ZXJhdGl2ZWx5IHVucGFjayBmcm9tIHRoZSBidWZmZXIgKmJ1ZmZlciogYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQKKyAgIHN0cmluZyAqZm10Ki4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBpdGVyYXRvciB3aGljaCB3aWxsIHJlYWQKKyAgIGVxdWFsbHktc2l6ZWQgY2h1bmtzIGZyb20gdGhlIGJ1ZmZlciB1bnRpbCBhbGwgaXRzIGNvbnRlbnRzIGhhdmUgYmVlbgorICAgY29uc3VtZWQuICBUaGUgYnVmZmVyJ3Mgc2l6ZSBpbiBieXRlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGFtb3VudAorICAgb2YgZGF0YSByZXF1aXJlZCBieSB0aGUgZm9ybWF0LCBhcyByZWZsZWN0ZWQgYnkgOmZ1bmM6YGNhbGNzaXplYC4KKworICAgRWFjaCBpdGVyYXRpb24geWllbGRzIGEgdHVwbGUgYXMgc3BlY2lmaWVkIGJ5IHRoZSBmb3JtYXQgc3RyaW5nLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IGNhbGNzaXplKGZtdCkKIAogICAgUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3QgKGFuZCBoZW5jZSBvZiB0aGUgYnl0ZXMgb2JqZWN0IHByb2R1Y2VkIGJ5CkBAIC0zODgsNiArNDAxLDEzIEBACiAgICAgICAoYGBsZW4oYnVmZmVyW29mZnNldDpdKWBgIG11c3QgYmUgYXQgbGVhc3QgOmF0dHI6YHNlbGYuc2l6ZWApLgogCiAKKyAgIC4uIG1ldGhvZDo6IGl0ZXJfdW5wYWNrKGJ1ZmZlcikKKworICAgICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgaXRlcl91bnBhY2tgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgZm9ybWF0LgorICAgICAgKGBgbGVuKGJ1ZmZlcilgYCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOmF0dHI6YHNlbGYuc2l6ZWApLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgLi4gYXR0cmlidXRlOjogZm9ybWF0CiAKICAgICAgIFRoZSBmb3JtYXQgc3RyaW5nIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgU3RydWN0IG9iamVjdC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0IGIvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKaW5kZXggMGNiM2MzNS4uMWE5ZGQ5ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KIAogCi0uLiBmdW5jdGlvbjo6IGNoZWNrX291dHB1dChhcmdzLCAqLCBzdGRpbj1Ob25lLCBzdGRlcnI9Tm9uZSwgc2hlbGw9RmFsc2UsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdGltZW91dD1Ob25lKQorLi4gZnVuY3Rpb246OiBjaGVja19vdXRwdXQoYXJncywgKiwgaW5wdXQ9Tm9uZSwgc3RkaW49Tm9uZSwgc3RkZXJyPU5vbmUsIHNoZWxsPUZhbHNlLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRpbWVvdXQ9Tm9uZSkKIAogICAgUnVuIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMgYW5kIHJldHVybiBpdHMgb3V0cHV0LgogCkBAIC0xMjksMTUgKzEyOSwyMSBAQAogICAgaW4gOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AgKGhlbmNlIHRoZSB1c2Ugb2Yga2V5d29yZC1vbmx5IG5vdGF0aW9uCiAgICBpbiB0aGUgYWJicmV2aWF0ZWQgc2lnbmF0dXJlKS4gVGhlIGZ1bGwgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIGxhcmdlbHkgdGhlCiAgICBzYW1lIGFzIHRoYXQgb2YgdGhlIDpjbGFzczpgUG9wZW5gIGNvbnN0cnVjdG9yIC0gdGhpcyBmdW5jdGlvbnMgcGFzc2VzIGFsbAotICAgc3VwcGxpZWQgYXJndW1lbnRzIG90aGVyIHRoYW4gKnRpbWVvdXQqIGRpcmVjdGx5IHRocm91Z2ggdG8gdGhhdCBpbnRlcmZhY2UuCi0gICBJbiBhZGRpdGlvbiwgKnN0ZG91dCogaXMgbm90IHBlcm1pdHRlZCBhcyBhbiBhcmd1bWVudCwgYXMgaXQgaXMgdXNlZAotICAgaW50ZXJuYWxseSB0byBjb2xsZWN0IHRoZSBvdXRwdXQgZnJvbSB0aGUgc3VicHJvY2Vzcy4KKyAgIHN1cHBsaWVkIGFyZ3VtZW50cyBvdGhlciB0aGFuICppbnB1dCogYW5kICp0aW1lb3V0KiBkaXJlY3RseSB0aHJvdWdoIHRvCisgICB0aGF0IGludGVyZmFjZS4gIEluIGFkZGl0aW9uLCAqc3Rkb3V0KiBpcyBub3QgcGVybWl0dGVkIGFzIGFuIGFyZ3VtZW50LCBhcworICAgaXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGNvbGxlY3QgdGhlIG91dHB1dCBmcm9tIHRoZSBzdWJwcm9jZXNzLgogCiAgICBUaGUgKnRpbWVvdXQqIGFyZ3VtZW50IGlzIHBhc3NlZCB0byA6bWV0aDpgUG9wZW4ud2FpdGAuIElmIHRoZSB0aW1lb3V0CiAgICBleHBpcmVzLCB0aGUgY2hpbGQgcHJvY2VzcyB3aWxsIGJlIGtpbGxlZCBhbmQgdGhlbiB3YWl0ZWQgZm9yIGFnYWluLiAgVGhlCiAgICA6ZXhjOmBUaW1lb3V0RXhwaXJlZGAgZXhjZXB0aW9uIHdpbGwgYmUgcmUtcmFpc2VkIGFmdGVyIHRoZSBjaGlsZCBwcm9jZXNzCiAgICBoYXMgdGVybWluYXRlZC4KIAorICAgVGhlICppbnB1dCogYXJndW1lbnQgaXMgcGFzc2VkIHRvIDptZXRoOmBQb3Blbi5jb21tdW5pY2F0ZWAgYW5kIHRodXMgdG8gdGhlCisgICBzdWJwcm9jZXNzJ3Mgc3RkaW4uICBJZiB1c2VkIGl0IG11c3QgYmUgYSBieXRlIHNlcXVlbmNlLCBvciBhIHN0cmluZyBpZgorICAgYGB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZWBgLiAgV2hlbiB1c2VkLCB0aGUgaW50ZXJuYWwgOmNsYXNzOmBQb3BlbmAgb2JqZWN0CisgICBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2l0aCBgYHN0ZGluPVBJUEVgYCwgYW5kIHRoZSAqc3RkaW4qIGFyZ3VtZW50IG1heQorICAgbm90IGJlIHVzZWQgYXMgd2VsbC4KKwogICAgRXhhbXBsZXM6OgogCiAgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJlY2hvIiwgIkhlbGxvIFdvcmxkISJdKQpAQCAtMTQ2LDYgKzE1MiwxMCBAQAogICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiZWNobyIsICJIZWxsbyBXb3JsZCEiXSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCiAgICAgICAnSGVsbG8gV29ybGQhXG4nCiAKKyAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbInNlZCIsICItZSIsICJzL2Zvby9iYXIvIl0sCisgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ9YiJ3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgZm9vbWFuIGV2ZW50c1xuIikKKyAgICAgIGInd2hlbiBpbiB0aGUgY291cnNlIG9mIGJhcm1hbiBldmVudHNcbicKKwogICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJleGl0IDEiLCBzaGVsbD1UcnVlKQogICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgICAgLi4uCkBAIC0xNjcsMTAgKzE3Nyw2IEBACiAgICAgICAuLi4gICAgIHNoZWxsPVRydWUpCiAgICAgICAnbHM6IG5vbl9leGlzdGVudF9maWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4nCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQotCi0gICAuLgotCiAgICAuLiB3YXJuaW5nOjoKIAogICAgICAgSW52b2tpbmcgdGhlIHN5c3RlbSBzaGVsbCB3aXRoIGBgc2hlbGw9VHJ1ZWBgIGNhbiBiZSBhIHNlY3VyaXR5IGhhemFyZApAQCAtMTgzLDkgKzE4OSwxMyBAQAogICAgICAgcmVhZCBpbiB0aGUgY3VycmVudCBwcm9jZXNzLCB0aGUgY2hpbGQgcHJvY2VzcyBtYXkgYmxvY2sgaWYgaXQKICAgICAgIGdlbmVyYXRlcyBlbm91Z2ggb3V0cHV0IHRvIHRoZSBwaXBlIHRvIGZpbGwgdXAgdGhlIE9TIHBpcGUgYnVmZmVyLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKwogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICp0aW1lb3V0KiB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAqaW5wdXQqIHdhcyBhZGRlZC4KIAogLi4gZGF0YTo6IERFVk5VTEwKIApAQCAtNjI5LDYgKzYzOSwxMSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICp0aW1lb3V0KiB3YXMgYWRkZWQuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKworICAgICAgRG8gbm90IHVzZSB0aGUgdW5kb2N1bWVudGVkICplbmR0aW1lKiBwYXJhbWV0ZXIuICBJdCBpcyB3YXMKKyAgICAgIHVuaW50ZW50aW9uYWxseSBleHBvc2VkIGluIDMuMyBidXQgd2FzIGludGVuZGVkIHRvIGJlIHByaXZhdGUKKyAgICAgIGZvciBpbnRlcm5hbCB1c2UuICBVc2UgKnRpbWVvdXQqIGluc3RlYWQuCiAKIC4uIG1ldGhvZDo6IFBvcGVuLmNvbW11bmljYXRlKGlucHV0PU5vbmUsIHRpbWVvdXQ9Tm9uZSkKIApAQCAtODQxLDggKzg1Niw2IEBACiAgICBUaGUgbmV3IHByb2Nlc3MgaGFzIGEgbmV3IGNvbnNvbGUsIGluc3RlYWQgb2YgaW5oZXJpdGluZyBpdHMgcGFyZW50J3MKICAgIGNvbnNvbGUgKHRoZSBkZWZhdWx0KS4KIAotICAgVGhpcyBmbGFnIGlzIGFsd2F5cyBzZXQgd2hlbiA6Y2xhc3M6YFBvcGVuYCBpcyBjcmVhdGVkIHdpdGggYGBzaGVsbD1UcnVlYGAuCi0KIC4uIGRhdGE6OiBDUkVBVEVfTkVXX1BST0NFU1NfR1JPVVAKIAogICAgQSA6Y2xhc3M6YFBvcGVuYCBgYGNyZWF0aW9uZmxhZ3NgYCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGF0IGEgbmV3IHByb2Nlc3MKQEAgLTEwNTcsOSArMTA3MCw5IEBACiAKICAgIFJldHVybiBgYChzdGF0dXMsIG91dHB1dClgYCBvZiBleGVjdXRpbmcgKmNtZCogaW4gYSBzaGVsbC4KIAotICAgRXhlY3V0ZSB0aGUgc3RyaW5nICpjbWQqIGluIGEgc2hlbGwgd2l0aCA6Y2xhc3M6YFBvcGVuYCBhbmQgcmV0dXJuIGEgMi10dXBsZQotICAgYGAoc3RhdHVzLCBvdXRwdXQpYGAgdmlhIDpmdW5jOmBQb3Blbi5jb21tdW5pY2F0ZWAuIFVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlCi0gICBpcyB1c2VkOyBzZWUgdGhlIG5vdGVzIG9uIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgIGZvciBtb3JlIGRldGFpbHMuCisgICBFeGVjdXRlIHRoZSBzdHJpbmcgKmNtZCogaW4gYSBzaGVsbCB3aXRoIDptZXRoOmBQb3Blbi5jaGVja19vdXRwdXRgIGFuZAorICAgcmV0dXJuIGEgMi10dXBsZSBgYChzdGF0dXMsIG91dHB1dClgYC4gVW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgaXMgdXNlZDsKKyAgIHNlZSB0aGUgbm90ZXMgb24gOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgQSB0cmFpbGluZyBuZXdsaW5lIGlzIHN0cmlwcGVkIGZyb20gdGhlIG91dHB1dC4KICAgIFRoZSBleGl0IHN0YXR1cyBmb3IgdGhlIGNvbW1hbmQgY2FuIGJlIGludGVycHJldGVkCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdW5hdS5yc3QgYi9Eb2MvbGlicmFyeS9zdW5hdS5yc3QKaW5kZXggNGJkYjk5Yi4uMTVjMDZiNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3VuYXUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N1bmF1LnJzdApAQCAtMTUwLDggKzE1MCw5IEBACiAKIC4uIG1ldGhvZDo6IEFVX3JlYWQuZ2V0cGFyYW1zKCkKIAotICAgUmV0dXJucyBhIHR1cGxlIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLCBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLAotICAgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZSA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCisgICBSZXR1cm5zIGEgOmZ1bmM6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYCBgYChuY2hhbm5lbHMsIHNhbXB3aWR0aCwKKyAgIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsIGNvbXBuYW1lKWBgLCBlcXVpdmFsZW50IHRvIG91dHB1dCBvZiB0aGUKKyAgIDptZXRoOmBnZXRcKmAgbWV0aG9kcy4KIAogCiAuLiBtZXRob2Q6OiBBVV9yZWFkLnJlYWRmcmFtZXMobikKQEAgLTIxMSw2ICsyMTIsOSBAQAogCiAgICBTZXQgdGhlIHNhbXBsZSB3aWR0aCAoaW4gYnl0ZXMuKQogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgMjQtYml0IHNhbXBsZXMuCisKIAogLi4gbWV0aG9kOjogQVVfd3JpdGUuc2V0ZnJhbWVyYXRlKG4pCiAKQEAgLTI0NiwxMSArMjUwLDE3IEBACiAKICAgIFdyaXRlIGF1ZGlvIGZyYW1lcywgd2l0aG91dCBjb3JyZWN0aW5nICpuZnJhbWVzKi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQuCisKIAogLi4gbWV0aG9kOjogQVVfd3JpdGUud3JpdGVmcmFtZXMoZGF0YSkKIAogICAgV3JpdGUgYXVkaW8gZnJhbWVzIGFuZCBtYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IEFVX3dyaXRlLmNsb3NlKCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3lzLnJzdCBiL0RvYy9saWJyYXJ5L3N5cy5yc3QKaW5kZXggMjJiZTYyZS4uNWZmNzE3OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3lzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zeXMucnN0CkBAIC0zODAsNiArMzgwLDIxIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCisuLiBmdW5jdGlvbjo6IGdldGFsbG9jYXRlZGJsb2NrcygpCisKKyAgIFJldHVybiB0aGUgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgY3VycmVudGx5IGFsbG9jYXRlZCBieSB0aGUgaW50ZXJwcmV0ZXIsCisgICByZWdhcmRsZXNzIG9mIHRoZWlyIHNpemUuICBUaGlzIGZ1bmN0aW9uIGlzIG1haW5seSB1c2VmdWwgZm9yIHRyYWNraW5nCisgICBhbmQgZGVidWdnaW5nIG1lbW9yeSBsZWFrcy4gIEJlY2F1c2Ugb2YgdGhlIGludGVycHJldGVyJ3MgaW50ZXJuYWwKKyAgIGNhY2hlcywgdGhlIHJlc3VsdCBjYW4gdmFyeSBmcm9tIGNhbGwgdG8gY2FsbDsgeW91IG1heSBoYXZlIHRvIGNhbGwKKyAgIDpmdW5jOmBfY2xlYXJfdHlwZV9jYWNoZSgpYCBhbmQgOmZ1bmM6YGdjLmNvbGxlY3QoKWAgdG8gZ2V0IG1vcmUKKyAgIHByZWRpY3RhYmxlIHJlc3VsdHMuCisKKyAgIElmIGEgUHl0aG9uIGJ1aWxkIG9yIGltcGxlbWVudGF0aW9uIGNhbm5vdCByZWFzb25hYmx5IGNvbXB1dGUgdGhpcworICAgaW5mb3JtYXRpb24sIDpmdW5jOmBnZXRhbGxvY2F0ZWRibG9ja3MoKWAgaXMgYWxsb3dlZCB0byByZXR1cm4gMCBpbnN0ZWFkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IGdldGNoZWNraW50ZXJ2YWwoKQogCiAgICBSZXR1cm4gdGhlIGludGVycHJldGVyJ3MgImNoZWNrIGludGVydmFsIjsgc2VlIDpmdW5jOmBzZXRjaGVja2ludGVydmFsYC4KQEAgLTM5Niw5ICs0MTEsMTAgQEAKIAogLi4gZnVuY3Rpb246OiBnZXRkbG9wZW5mbGFncygpCiAKLSAgIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmxhZ3MgdGhhdCBhcmUgdXNlZCBmb3IgOmM6ZnVuYzpgZGxvcGVuYCBjYWxscy4KLSAgIFRoZSBmbGFnIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB0aGUgOm1vZDpgY3R5cGVzYCBhbmQgOm1vZDpgRExGQ05gIG1vZHVsZXMuCi0gICBBdmFpbGFiaWxpdHk6IFVuaXguCisgICBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZsYWdzIHRoYXQgYXJlIHVzZWQgZm9yCisgICA6YzpmdW5jOmBkbG9wZW5gIGNhbGxzLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIHZhbHVlcyBjYW4gYmUKKyAgIGZvdW5kIGluIHRoZSA6bW9kOmBvc2AgbW9kdWxlIChgYFJUTERfeHh4YGAgY29uc3RhbnRzLCBlLmcuCisgICA6ZGF0YTpgb3MuUlRMRF9MQVpZYCkuICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAogLi4gZnVuY3Rpb246OiBnZXRmaWxlc3lzdGVtZW5jb2RpbmcoKQpAQCAtNTc3LDkgKzU5MywyMCBAQAogICAgfCA6Y29uc3Q6YGltYWdgICAgICAgIHwgbXVsdGlwbGllciB1c2VkIGZvciB0aGUgaW1hZ2luYXJ5IHBhcnQgb2YgYSAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGNvbXBsZXggbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YGFsZ29yaXRobWAgIHwgbmFtZSBvZiB0aGUgYWxnb3JpdGhtIGZvciBoYXNoaW5nIG9mIHN0ciwgYnl0ZXMsIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICB8IGFuZCBtZW1vcnl2aWV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YGhhc2hfYml0c2AgIHwgaW50ZXJuYWwgb3V0cHV0IHNpemUgb2YgdGhlIGhhc2ggYWxnb3JpdGhtICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgc2VlZF9iaXRzYCAgfCBzaXplIG9mIHRoZSBzZWVkIGtleSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6IDMuNAorICAgICAgQWRkZWQgKmFsZ29yaXRobSosICpoYXNoX2JpdHMqIGFuZCAqc2VlZF9iaXRzKgorCiAKIC4uIGRhdGE6OiBoZXh2ZXJzaW9uCiAKQEAgLTY2Myw2ICs2OTAsMTYgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAKKy4uIGRhdGE6OiBfX2ludGVyYWN0aXZlaG9va19fCisKKyAgIFdoZW4gcHJlc2VudCwgdGhpcyBmdW5jdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCAod2l0aCBubyBhcmd1bWVudHMpCisgICB3aGVuIHRoZSBpbnRlcnByZXRlciBpcyBsYXVuY2hlZCBpbiA6cmVmOmBpbnRlcmFjdGl2ZSBtb2RlIDx0dXQtaW50ZXJhY3RpdmU+YC4KKyAgIFRoaXMgaXMgZG9uZSBhZnRlciB0aGUgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZmlsZSBpcyByZWFkLCBzbyB0aGF0IHlvdQorICAgY2FuIHNldCB0aGlzIGhvb2sgdGhlcmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogaW50ZXJuKHN0cmluZykKIAogICAgRW50ZXIgKnN0cmluZyogaW4gdGhlIHRhYmxlIG9mICJpbnRlcm5lZCIgc3RyaW5ncyBhbmQgcmV0dXJuIHRoZSBpbnRlcm5lZCBzdHJpbmcKQEAgLTgxMCw4ICs4NDcsNiBAQAogICAgV2luZG93cyAgICAgICAgICBgYCd3aW4zMidgYAogICAgV2luZG93cy9DeWd3aW4gICBgYCdjeWd3aW4nYGAKICAgIE1hYyBPUyBYICAgICAgICAgYGAnZGFyd2luJ2BgCi0gICBPUy8yICAgICAgICAgICAgIGBgJ29zMidgYAotICAgT1MvMiBFTVggICAgICAgICBgYCdvczJlbXgnYGAKICAgID09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCkBAIC04ODIsNyArOTE3LDcgQEAKICAgIHRoZSBpbnRlcnByZXRlciBsb2FkcyBleHRlbnNpb24gbW9kdWxlcy4gIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyB3aWxsIGVuYWJsZSBhCiAgICBsYXp5IHJlc29sdmluZyBvZiBzeW1ib2xzIHdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlLCBpZiBjYWxsZWQgYXMKICAgIGBgc3lzLnNldGRsb3BlbmZsYWdzKDApYGAuICBUbyBzaGFyZSBzeW1ib2xzIGFjcm9zcyBleHRlbnNpb24gbW9kdWxlcywgY2FsbCBhcwotICAgYGBzeXMuc2V0ZGxvcGVuZmxhZ3Mob3MuUlRMRF9HTE9CQUwpYGAuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgbW9kdWxlcworICAgYGBzeXMuc2V0ZGxvcGVuZmxhZ3Mob3MuUlRMRF9HTE9CQUwpYGAuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgdmFsdWVzCiAgICBjYW4gYmUgZm91bmQgaW4gdGhlIDptb2Q6YG9zYCBtb2R1bGUgKGBgUlRMRF94eHhgYCBjb25zdGFudHMsIGUuZy4KICAgIDpkYXRhOmBvcy5SVExEX0xBWllgKS4KIApAQCAtMTA5Miw3ICsxMTI3LDYgQEAKICAgIHwgOmNvbnN0OmBuYW1lYCAgICB8IE5hbWUgb2YgdGhlIHRocmVhZCBpbXBsZW1lbnRhdGlvbjogICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgKiBgYCdudCdgYDogV2luZG93cyB0aHJlYWRzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICB8ICAqIGBgJ29zMidgYDogT1MvMiB0aHJlYWRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgICogYGAncHRocmVhZCdgYDogUE9TSVggdGhyZWFkcyAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgKiBgYCdzb2xhcmlzJ2BgOiBTb2xhcmlzIHRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdCBiL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QKaW5kZXggYzQ3ZGNjZS4uNTM1YWM1NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0CkBAIC04Myw4ICs4Myw2IEBACiAgIGxvY2F0ZWQgdW5kZXIgdGhlIHVzZXIgaG9tZSBkaXJlY3RvcnkuCiAtICpudCo6IHNjaGVtZSBmb3IgTlQgcGxhdGZvcm1zIGxpa2UgV2luZG93cy4KIC0gKm50X3VzZXIqOiBzY2hlbWUgZm9yIE5UIHBsYXRmb3Jtcywgd2hlbiB0aGUgKnVzZXIqIG9wdGlvbiBpcyB1c2VkLgotLSAqb3MyKjogc2NoZW1lIGZvciBPUy8yIHBsYXRmb3Jtcy4KLS0gKm9zMl9ob21lKjogc2NoZW1lIGZvciBPUy8yIHBhdGZvcm1zLCB3aGVuIHRoZSAqdXNlciogb3B0aW9uIGlzIHVzZWQuCiAKIEVhY2ggc2NoZW1lIGlzIGl0c2VsZiBjb21wb3NlZCBvZiBhIHNlcmllcyBvZiBwYXRocyBhbmQgZWFjaCBwYXRoIGhhcyBhIHVuaXF1ZQogaWRlbnRpZmllci4gIFB5dGhvbiBjdXJyZW50bHkgdXNlcyBlaWdodCBwYXRoczoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0IGIvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKaW5kZXggMWVhZDcxYy4uNTkzMzZjOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKQEAgLTU5MSw2ICs1OTEsNjcgQEAKICAgIFJldHVybiA6Y29uc3Q6YFRydWVgIGlmIGl0IGlzIG9uZSBvZiBjaGFyYWN0ZXIgZGV2aWNlLCBibG9jayBkZXZpY2Ugb3IgRklGTy4KIAogCisuLiBfdGFyZmlsZS1jb21tYW5kbGluZToKKworQ29tbWFuZCBMaW5lIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworVGhlIDptb2Q6YHRhcmZpbGVgIG1vZHVsZSBwcm92aWRlcyBhIHNpbXBsZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHRvIGludGVyYWN0Cit3aXRoIHRhciBhcmNoaXZlcy4KKworSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IHRhciBhcmNoaXZlLCBzcGVjaWZ5IGl0cyBuYW1lIGFmdGVyIHRoZSA6b3B0aW9uOmAtY2AKK29wdGlvbiBhbmQgdGhlbiBsaXN0IHRoZSBmaWxlbmFtZShzKSB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZDo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1jIG1vbnR5LnRhciAgc3BhbS50eHQgZWdncy50eHQKKworUGFzc2luZyBhIGRpcmVjdG9yeSBpcyBhbHNvIGFjY2VwdGFibGU6OgorCisgICAgJCBweXRob24gLW0gdGFyZmlsZSAtYyBtb250eS50YXIgbGlmZS1vZi1icmlhbl8xOTc5LworCitJZiB5b3Ugd2FudCB0byBleHRyYWN0IGEgdGFyIGFyY2hpdmUgaW50byB0aGUgY3VycmVudCBkaXJlY3RvcnksIHVzZQordGhlIDpvcHRpb246YC1lYCBvcHRpb246OgorCisgICAgJCBweXRob24gLW0gdGFyZmlsZSAtZSBtb250eS50YXIKKworWW91IGNhbiBhbHNvIGV4dHJhY3QgYSB0YXIgYXJjaGl2ZSBpbnRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeSBieSBwYXNzaW5nIHRoZQorZGlyZWN0b3J5J3MgbmFtZTo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1lIG1vbnR5LnRhciAgb3RoZXItZGlyLworCitGb3IgYSBsaXN0IG9mIHRoZSBmaWxlcyBpbiBhIHRhciBhcmNoaXZlLCB1c2UgdGhlIDpvcHRpb246YC1sYCBvcHRpb246OgorCisgICAgJCBweXRob24gLW0gdGFyZmlsZSAtbCBtb250eS50YXIKKworCitDb21tYW5kIGxpbmUgb3B0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLi4gY21kb3B0aW9uOjogLWwgPHRhcmZpbGU+CisgICAgICAgICAgICAgICAtLWxpc3QgPHRhcmZpbGU+CisKKyAgIExpc3QgZmlsZXMgaW4gYSB0YXJmaWxlLgorCisuLiBjbWRvcHRpb246OiAtYyA8dGFyZmlsZT4gPHNvdXJjZTE+IDxzb3VyY2VOPgorICAgICAgICAgICAgICAgLS1jcmVhdGUgPHRhcmZpbGU+IDxzb3VyY2UxPiA8c291cmNlTj4KKworICAgQ3JlYXRlIHRhcmZpbGUgZnJvbSBzb3VyY2UgZmlsZXMuCisKKy4uIGNtZG9wdGlvbjo6IC1lIDx0YXJmaWxlPiBbPG91dHB1dF9kaXI+XQorICAgICAgICAgICAgICAgLS1leHRyYWN0IDx0YXJmaWxlPiBbPG91dHB1dF9kaXI+XQorCisgICBFeHRyYWN0IHRhcmZpbGUgaW50byB0aGUgY3VycmVudCBkaXJlY3RvcnkgaWYgKm91dHB1dF9kaXIqIGlzIG5vdCBzcGVjaWZpZWQuCisKKy4uIGNtZG9wdGlvbjo6IC10IDx0YXJmaWxlPgorICAgICAgICAgICAgICAgLS10ZXN0IDx0YXJmaWxlPgorCisgICBUZXN0IHdoZXRoZXIgdGhlIHRhcmZpbGUgaXMgdmFsaWQgb3Igbm90LgorCisuLiBjbWRvcHRpb246OiAtdiwgLS12ZXJib3NlCisKKyAgIFZlcmJvc2Ugb3V0cHV0CisKIC4uIF90YXItZXhhbXBsZXM6CiAKIEV4YW1wbGVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CmluZGV4IGMxMjcwZjQuLjJjNTE1NDkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CkBAIC00NDIsMTMgKzQ0Miw2IEBACiAgICBBIGRlY29yYXRvciBmb3IgcnVubmluZyB0ZXN0cyB0aGF0IHJlcXVpcmUgc3VwcG9ydCBmb3Igc3ltYm9saWMgbGlua3MuCiAKIAotLi4gZnVuY3Rpb246OiBzdXBwcmVzc19jcmFzaF9wb3B1cCgpCi0KLSAgIEEgY29udGV4dCBtYW5hZ2VyIHRoYXQgZGlzYWJsZXMgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZwotICAgYFNldEVycm9yTW9kZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMSUyOHY9dnMuODUlMjkuYXNweD5gXy4KLSAgIE9uIG90aGVyIHBsYXRmb3JtcyBpdCdzIGEgbm8tb3AuCi0KLQogLi4gZGVjb3JhdG9yOjogYW50aWNpcGF0ZV9mYWlsdXJlKGNvbmRpdGlvbikKIAogICAgQSBkZWNvcmF0b3IgdG8gY29uZGl0aW9uYWxseSBtYXJrIHRlc3RzIHdpdGgKQEAgLTU5Myw2ICs1ODYsMjEgQEAKICAgIFRlbXBvcmFyaWx5IHVuc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYGVudnZhcmBgLgogCiAKKy4uIGNsYXNzOjogU3VwcHJlc3NDcmFzaFJlcG9ydCgpCisKKyAgIEEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gdHJ5IHRvIHByZXZlbnQgY3Jhc2ggZGlhbG9nIHBvcHVwcyBvbiB0ZXN0cyB0aGF0CisgICBhcmUgZXhwZWN0ZWQgdG8gY3Jhc2ggYSBzdWJwcm9jZXNzLgorCisgICBPbiBXaW5kb3dzLCBpdCBkaXNhYmxlcyBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2dzIHVzaW5nCisgICBgU2V0RXJyb3JNb2RlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjgwNjIxLmFzcHg+YF8uCisKKyAgIE9uIFVOSVgsIDpmdW5jOmByZXNvdXJjZS5zZXRybGltaXRgIGlzIHVzZWQgdG8gc2V0CisgICA6YXR0cjpgcmVzb3VyY2UuUkxJTUlUX0NPUkVgJ3Mgc29mdCBsaW1pdCB0byAwIHRvIHByZXZlbnQgY29yZWR1bXAgZmlsZQorICAgY3JlYXRpb24uCisKKyAgIE9uIGJvdGggcGxhdGZvcm1zLCB0aGUgb2xkIHZhbHVlIGlzIHJlc3RvcmVkIGJ5IDptZXRoOmBfX2V4aXRfX2AuCisKKwogLi4gY2xhc3M6OiBXYXJuaW5nc1JlY29yZGVyKCkKIAogICAgQ2xhc3MgdXNlZCB0byByZWNvcmQgd2FybmluZ3MgZm9yIHVuaXQgdGVzdHMuIFNlZSBkb2N1bWVudGF0aW9uIG9mCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QgYi9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKaW5kZXggYzYyNTI1NC4uMWJhNDJhMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdApAQCAtMTAsMTEgKzEwLDExIEBACiAKIC0tLS0tLS0tLS0tLS0tCiAKLVRoZSA6bW9kOmB0ZXh0d3JhcGAgbW9kdWxlIHByb3ZpZGVzIHR3byBjb252ZW5pZW5jZSBmdW5jdGlvbnMsIDpmdW5jOmB3cmFwYCBhbmQKLTpmdW5jOmBmaWxsYCwgYXMgd2VsbCBhcyA6Y2xhc3M6YFRleHRXcmFwcGVyYCwgdGhlIGNsYXNzIHRoYXQgZG9lcyBhbGwgdGhlIHdvcmssCi1hbmQgdHdvIHV0aWxpdHkgZnVuY3Rpb25zLCA6ZnVuYzpgZGVkZW50YCBhbmQgOmZ1bmM6YGluZGVudGAuICBJZiB5b3UncmUganVzdCB3cmFwcGluZyBvciBmaWxsaW5nIG9uZQotb3IgdHdvICB0ZXh0IHN0cmluZ3MsIHRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGdvb2QgZW5vdWdoOwotb3RoZXJ3aXNlLCAgeW91IHNob3VsZCB1c2UgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBUZXh0V3JhcHBlcmAgZm9yIGVmZmljaWVuY3kuCitUaGUgOm1vZDpgdGV4dHdyYXBgIG1vZHVsZSBwcm92aWRlcyBzb21lIGNvbnZlbmllbmNlIGZ1bmN0aW9ucywKK2FzIHdlbGwgYXMgOmNsYXNzOmBUZXh0V3JhcHBlcmAsIHRoZSBjbGFzcyB0aGF0IGRvZXMgYWxsIHRoZSB3b3JrLgorSWYgeW91J3JlIGp1c3Qgd3JhcHBpbmcgb3IgZmlsbGluZyBvbmUgb3IgdHdvIHRleHQgc3RyaW5ncywgdGhlIGNvbnZlbmllbmNlCitmdW5jdGlvbnMgc2hvdWxkIGJlIGdvb2QgZW5vdWdoOyBvdGhlcndpc2UsIHlvdSBzaG91bGQgdXNlIGFuIGluc3RhbmNlIG9mCis6Y2xhc3M6YFRleHRXcmFwcGVyYCBmb3IgZWZmaWNpZW5jeS4KIAogLi4gZnVuY3Rpb246OiB3cmFwKHRleHQsIHdpZHRoPTcwLCAqKmt3YXJncykKIApAQCAtMzksMTkgKzM5LDI0IEBACiAgICBJbiBwYXJ0aWN1bGFyLCA6ZnVuYzpgZmlsbGAgYWNjZXB0cyBleGFjdGx5IHRoZSBzYW1lIGtleXdvcmQgYXJndW1lbnRzIGFzCiAgICA6ZnVuYzpgd3JhcGAuCiAKLUJvdGggOmZ1bmM6YHdyYXBgIGFuZCA6ZnVuYzpgZmlsbGAgd29yayBieSBjcmVhdGluZyBhIDpjbGFzczpgVGV4dFdyYXBwZXJgCi1pbnN0YW5jZSBhbmQgY2FsbGluZyBhIHNpbmdsZSBtZXRob2Qgb24gaXQuICBUaGF0IGluc3RhbmNlIGlzIG5vdCByZXVzZWQsIHNvIGZvcgotYXBwbGljYXRpb25zIHRoYXQgd3JhcC9maWxsIG1hbnkgdGV4dCBzdHJpbmdzLCBpdCB3aWxsIGJlIG1vcmUgZWZmaWNpZW50IGZvciB5b3UKLXRvIGNyZWF0ZSB5b3VyIG93biA6Y2xhc3M6YFRleHRXcmFwcGVyYCBvYmplY3QuCiAKLVRleHQgaXMgcHJlZmVyYWJseSB3cmFwcGVkIG9uIHdoaXRlc3BhY2VzIGFuZCByaWdodCBhZnRlciB0aGUgaHlwaGVucyBpbgotaHlwaGVuYXRlZCB3b3Jkczsgb25seSB0aGVuIHdpbGwgbG9uZyB3b3JkcyBiZSBicm9rZW4gaWYgbmVjZXNzYXJ5LCB1bmxlc3MKLTphdHRyOmBUZXh0V3JhcHBlci5icmVha19sb25nX3dvcmRzYCBpcyBzZXQgdG8gZmFsc2UuCisuLiBmdW5jdGlvbjo6IHNob3J0ZW4odGV4dCwgd2lkdGg9NzAsICosIHBsYWNlaG9sZGVyPSIgWy4uLl0iKQogCi1Ud28gYWRkaXRpb25hbCB1dGlsaXR5IGZ1bmN0aW9uLCA6ZnVuYzpgZGVkZW50YCBhbmQgOmZ1bmM6YGluZGVudGAsIGFyZQotcHJvdmlkZWQgdG8gcmVtb3ZlIGluZGVudGF0aW9uIGZyb20gc3RyaW5ncyB0aGF0IGhhdmUgdW53YW50ZWQgd2hpdGVzcGFjZQotdG8gdGhlIGxlZnQgb2YgdGhlIHRleHQgYW5kIHRvIGFkZCBhbiBhcmJpdHJhcnkgcHJlZml4IHRvIHNlbGVjdGVkIGxpbmVzCi1pbiBhIGJsb2NrIG9mIHRleHQuCisgICBDb2xsYXBzZSBhbmQgdHJ1bmNhdGUgdGhlIGdpdmVuIHRleHQgdG8gZml0IGluIHRoZSBnaXZlbiB3aWR0aC4KKworICAgVGhlIHRleHQgZmlyc3QgaGFzIGl0cyB3aGl0ZXNwYWNlIGNvbGxhcHNlZC4gIElmIGl0IHRoZW4gZml0cyBpbgorICAgdGhlICp3aWR0aCosIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZC4gIE90aGVyd2lzZSwgYXMgbWFueSB3b3JkcworICAgYXMgcG9zc2libGUgYXJlIGpvaW5lZCBhbmQgdGhlbiB0aGUgKnBsYWNlaG9sZGVyKiBpcyBhcHBlbmRlZDo6CisKKyAgICAgID4+PiB0ZXh0d3JhcC5zaG9ydGVuKCJIZWxsbyAgd29ybGQhIiwgd2lkdGg9MTIpCisgICAgICAnSGVsbG8gd29ybGQhJworICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMSkKKyAgICAgICdIZWxsbyBbLi4uXScKKyAgICAgID4+PiB0ZXh0d3JhcC5zaG9ydGVuKCJIZWxsbyB3b3JsZCIsIHdpZHRoPTEwLCBwbGFjZWhvbGRlcj0iLi4uIikKKyAgICAgICdIZWxsby4uLicKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogLi4gZnVuY3Rpb246OiBkZWRlbnQodGV4dCkKIApAQCAtMTAyLDYgKzEwNywxNiBAQAogICAgICAgKyB3b3JsZAogCiAKKzpmdW5jOmB3cmFwYCwgOmZ1bmM6YGZpbGxgIGFuZCA6ZnVuYzpgc2hvcnRlbmAgd29yayBieSBjcmVhdGluZyBhCis6Y2xhc3M6YFRleHRXcmFwcGVyYCBpbnN0YW5jZSBhbmQgY2FsbGluZyBhIHNpbmdsZSBtZXRob2Qgb24gaXQuICBUaGF0CitpbnN0YW5jZSBpcyBub3QgcmV1c2VkLCBzbyBmb3IgYXBwbGljYXRpb25zIHRoYXQgcHJvY2VzcyBtYW55IHRleHQKK3N0cmluZ3MsIGl0IG1heSBiZSBtb3JlIGVmZmljaWVudCB0byBjcmVhdGUgeW91ciBvd24KKzpjbGFzczpgVGV4dFdyYXBwZXJgIG9iamVjdC4KKworVGV4dCBpcyBwcmVmZXJhYmx5IHdyYXBwZWQgb24gd2hpdGVzcGFjZXMgYW5kIHJpZ2h0IGFmdGVyIHRoZSBoeXBoZW5zIGluCitoeXBoZW5hdGVkIHdvcmRzOyBvbmx5IHRoZW4gd2lsbCBsb25nIHdvcmRzIGJlIGJyb2tlbiBpZiBuZWNlc3NhcnksIHVubGVzcworOmF0dHI6YFRleHRXcmFwcGVyLmJyZWFrX2xvbmdfd29yZHNgIGlzIHNldCB0byBmYWxzZS4KKwogLi4gY2xhc3M6OiBUZXh0V3JhcHBlcigqKmt3YXJncykKIAogICAgVGhlIDpjbGFzczpgVGV4dFdyYXBwZXJgIGNvbnN0cnVjdG9yIGFjY2VwdHMgYSBudW1iZXIgb2Ygb3B0aW9uYWwga2V5d29yZApAQCAtMjM1LDcgKzI1MCwyMyBAQAogICAgICAgd2FzIHRvIGFsd2F5cyBhbGxvdyBicmVha2luZyBoeXBoZW5hdGVkIHdvcmRzLgogCiAKLSAgIDpjbGFzczpgVGV4dFdyYXBwZXJgIGFsc28gcHJvdmlkZXMgdHdvIHB1YmxpYyBtZXRob2RzLCBhbmFsb2dvdXMgdG8gdGhlCisgICAuLiBhdHRyaWJ1dGU6OiBtYXhfbGluZXMKKworICAgICAgKGRlZmF1bHQ6IGBgTm9uZWBgKSBJZiBub3QgYGBOb25lYGAsIHRoZW4gdGhlIHRleHQgYmUgd2lsbCB0cnVuY2F0ZWQgdG8KKyAgICAgICptYXhfbGluZXMqIGxpbmVzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisgICAuLiBhdHRyaWJ1dGU6OiBwbGFjZWhvbGRlcgorCisgICAgICAoZGVmYXVsdDogYGAnIFsuLi5dJ2BgKSBTdHJpbmcgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBsYXN0IGxpbmUgb2YKKyAgICAgIHRleHQgaWYgaXQgd2lsbCBiZSB0cnVuY2F0ZWQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKyAgIDpjbGFzczpgVGV4dFdyYXBwZXJgIGFsc28gcHJvdmlkZXMgc29tZSBwdWJsaWMgbWV0aG9kcywgYW5hbG9nb3VzIHRvIHRoZQogICAgbW9kdWxlLWxldmVsIGNvbnZlbmllbmNlIGZ1bmN0aW9uczoKIAogICAgLi4gbWV0aG9kOjogd3JhcCh0ZXh0KQpAQCAtMjUxLDQgKzI4MiwzIEBACiAKICAgICAgIFdyYXBzIHRoZSBzaW5nbGUgcGFyYWdyYXBoIGluICp0ZXh0KiwgYW5kIHJldHVybnMgYSBzaW5nbGUgc3RyaW5nCiAgICAgICBjb250YWluaW5nIHRoZSB3cmFwcGVkIHBhcmFncmFwaC4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdCBiL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKaW5kZXggN2MzMjZkMS4uNGEzYjNlYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CkBAIC01Nyw2ICs1NywxNSBAQAogICAgYW5kIHRocmVhZHMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBzdGFydGVkLgogCiAKKy4uIGZ1bmN0aW9uOjogbWFpbl90aHJlYWQoKQorCisgICBSZXR1cm4gdGhlIG1haW4gOmNsYXNzOmBUaHJlYWRgIG9iamVjdC4gIEluIG5vcm1hbCBjb25kaXRpb25zLCB0aGUKKyAgIG1haW4gdGhyZWFkIGlzIHRoZSB0aHJlYWQgZnJvbSB3aGljaCB0aGUgUHl0aG9uIGludGVycHJldGVyIHdhcworICAgc3RhcnRlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBzZXR0cmFjZShmdW5jKQogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogdHJhY2UgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QgYi9Eb2MvbGlicmFyeS90aW1laXQucnN0CmluZGV4IGE0ODc5MTcuLjBjYzE1ODYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGltZWl0LnJzdApAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgICAgICB0ID0gVGltZXIoLi4uKSAgICAgICAjIG91dHNpZGUgdGhlIHRyeS9leGNlcHQKICAgICAgICAgIHRyeToKICAgICAgICAgICAgICB0LnRpbWVpdCguLi4pICAgICMgb3IgdC5yZXBlYXQoLi4uKQotICAgICAgICAgZXhjZXB0OgorICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICB0LnByaW50X2V4YygpCiAKICAgICAgIFRoZSBhZHZhbnRhZ2Ugb3ZlciB0aGUgc3RhbmRhcmQgdHJhY2ViYWNrIGlzIHRoYXQgc291cmNlIGxpbmVzIGluIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QgYi9Eb2MvbGlicmFyeS90a2ludGVyLnJzdAppbmRleCBlZWIxZjgwLi5iOGY2NjA3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90a2ludGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS90a2ludGVyLnJzdApAQCAtNzQ3LDMyICs3NDcsNiBAQAogICAgZGlzcGxheWVkLiAgWW91IGNhbiB1c2UgdGhlc2UgOm1vZDpgdGtpbnRlcmAgZnVuY3Rpb25zIHRvIGFjY2VzcyB0aGVzZSBzcGVjaWFsCiAgICBwb2ludHMgaW4gdGV4dCB3aWRnZXRzOgogCi0uLiBmdW5jdGlvbjo6IEF0RW5kKCkKLSAgICAgIHJlZmVycyB0byB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgdGV4dAotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KLS4uIGZ1bmN0aW9uOjogQXRJbnNlcnQoKQotICAgICAgcmVmZXJzIHRvIHRoZSBwb2ludCB3aGVyZSB0aGUgdGV4dCBjdXJzb3IgaXMKLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCi0uLiBmdW5jdGlvbjo6IEF0U2VsRmlyc3QoKQotICAgICAgaW5kaWNhdGVzIHRoZSBiZWdpbm5pbmcgcG9pbnQgb2YgdGhlIHNlbGVjdGVkIHRleHQKLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCi0uLiBmdW5jdGlvbjo6IEF0U2VsTGFzdCgpCi0gICAgICBkZW5vdGVzIHRoZSBsYXN0IHBvaW50IG9mIHRoZSBzZWxlY3RlZCB0ZXh0IGFuZCBmaW5hbGx5Ci0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQotLi4gZnVuY3Rpb246OiBBdCh4WywgeV0pCi0gICAgICByZWZlcnMgdG8gdGhlIGNoYXJhY3RlciBhdCBwaXhlbCBsb2NhdGlvbiAqeCosICp5KiAod2l0aCAqeSogbm90IHVzZWQgaW4gdGhlCi0gICAgICBjYXNlIG9mIGEgdGV4dCBlbnRyeSB3aWRnZXQsIHdoaWNoIGNvbnRhaW5zIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCkuCi0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQogVGV4dCB3aWRnZXQgaW5kZXhlcwogICAgVGhlIGluZGV4IG5vdGF0aW9uIGZvciBUZXh0IHdpZGdldHMgaXMgdmVyeSByaWNoIGFuZCBpcyBiZXN0IGRlc2NyaWJlZCBpbiB0aGUgVGsKICAgIG1hbiBwYWdlcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QgYi9Eb2MvbGlicmFyeS90cmFjZWJhY2sucnN0CmluZGV4IDMyZTU3MzMuLmI2OGE4ZjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdApAQCAtMTI5LDYgKzEyOSwxMyBAQAogCiAgICBBIHNob3J0aGFuZCBmb3IgYGBmb3JtYXRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSlgYC4KIAorLi4gZnVuY3Rpb246OiBjbGVhcl9mcmFtZXModGIpCisKKyAgIENsZWFycyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIGFsbCB0aGUgc3RhY2sgZnJhbWVzIGluIGEgdHJhY2ViYWNrICp0YioKKyAgIGJ5IGNhbGxpbmcgdGhlIDptZXRoOmBjbGVhcmAgbWV0aG9kIG9mIGVhY2ggZnJhbWUgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiAuLiBfdHJhY2ViYWNrLWV4YW1wbGU6CiAKQEAgLTE0Niw3ICsxNTMsNyBAQAogICAgICAgIHNvdXJjZSA9IGlucHV0KCI+Pj4gIikKICAgICAgICB0cnk6CiAgICAgICAgICAgIGV4ZWMoc291cmNlLCBlbnZkaXIpCi0gICAgICAgZXhjZXB0OgorICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIHByaW50KCJFeGNlcHRpb24gaW4gdXNlciBjb2RlOiIpCiAgICAgICAgICAgIHByaW50KCItIio2MCkKICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRvdXQpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90cmFjZW1hbGxvYy5yc3QgYi9Eb2MvbGlicmFyeS90cmFjZW1hbGxvYy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5ZDRjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3RyYWNlbWFsbG9jLnJzdApAQCAtMCwwICsxLDYwNSBAQAorOm1vZDpgdHJhY2VtYWxsb2NgIC0tLSBUcmFjZSBtZW1vcnkgYWxsb2NhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHRyYWNlbWFsbG9jCisgICA6c3lub3BzaXM6IFRyYWNlIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK1RoZSB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgYSBkZWJ1ZyB0b29sIHRvIHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5CitQeXRob24uIEl0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisKKyogVHJhY2ViYWNrIHdoZXJlIGFuIG9iamVjdCB3YXMgYWxsb2NhdGVkCisqIFN0YXRpc3RpY3Mgb24gYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MgcGVyIGZpbGVuYW1lIGFuZCBwZXIgbGluZSBudW1iZXI6CisgIHRvdGFsIHNpemUsIG51bWJlciBhbmQgYXZlcmFnZSBzaXplIG9mIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzCisqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIHNuYXBzaG90cyB0byBkZXRlY3QgbWVtb3J5IGxlYWtzCisKK1RvIHRyYWNlIG1vc3QgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLCB0aGUgbW9kdWxlIHNob3VsZCBiZSBzdGFydGVkCithcyBlYXJseSBhcyBwb3NzaWJsZSBieSBzZXR0aW5nIHRoZSA6ZW52dmFyOmBQWVRIT05UUkFDRU1BTExPQ2AgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIHRvIGBgMWBgLCBvciBieSB1c2luZyA6b3B0aW9uOmAtWGAgYGB0cmFjZW1hbGxvY2BgIGNvbW1hbmQgbGluZQorb3B0aW9uLiBUaGUgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGF0IHJ1bnRpbWUgdG8KK3N0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworQnkgZGVmYXVsdCwgYSB0cmFjZSBvZiBhbiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrIG9ubHkgc3RvcmVzIHRoZSBtb3N0IHJlY2VudAorZnJhbWUgKDEgZnJhbWUpLiBUbyBzdG9yZSAyNSBmcmFtZXMgYXQgc3RhcnR1cDogc2V0IHRoZQorOmVudnZhcjpgUFlUSE9OVFJBQ0VNQUxMT0NgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGBgMjVgYCwgb3IgdXNlIHRoZQorOm9wdGlvbjpgLVhgIGBgdHJhY2VtYWxsb2M9MjVgYCBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisKK0V4YW1wbGVzCis9PT09PT09PQorCitEaXNwbGF5IHRoZSB0b3AgMTAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitEaXNwbGF5IHRoZSAxMCBmaWxlcyBhbGxvY2F0aW5nIHRoZSBtb3N0IG1lbW9yeTo6CisKKyAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKworICAgIHRyYWNlbWFsbG9jLnN0YXJ0KCkKKworICAgICMgLi4uIHJ1biB5b3VyIGFwcGxpY2F0aW9uIC4uLgorCisgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICB0b3Bfc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdsaW5lbm8nKQorCisgICAgcHJpbnQoIlsgVG9wIDEwIF0iKQorICAgIGZvciBzdGF0IGluIHRvcF9zdGF0c1s6MTBdOgorICAgICAgICBwcmludChzdGF0KQorCisKK0V4YW1wbGUgb2Ygb3V0cHV0IG9mIHRoZSBQeXRob24gdGVzdCBzdWl0ZTo6CisKKyAgICBbIFRvcCAxMCBdCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46NzE2OiBzaXplPTQ4NTUgS2lCLCBjb3VudD0zOTMyOCwgYXZlcmFnZT0xMjYgQgorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjI4NDogc2l6ZT01MjEgS2lCLCBjb3VudD0zMTk5LCBhdmVyYWdlPTE2NyBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2NvbGxlY3Rpb25zL19faW5pdF9fLnB5OjM2ODogc2l6ZT0yNDQgS2lCLCBjb3VudD0yMzE1LCBhdmVyYWdlPTEwOCBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3VuaXR0ZXN0L2Nhc2UucHk6MzgxOiBzaXplPTE4NSBLaUIsIGNvdW50PTc3OSwgYXZlcmFnZT0yNDMgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91bml0dGVzdC9jYXNlLnB5OjQwMjogc2l6ZT0xNTQgS2lCLCBjb3VudD0zNzgsIGF2ZXJhZ2U9NDE2IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvYWJjLnB5OjEzMzogc2l6ZT04OC43IEtpQiwgY291bnQ9MzQ3LCBhdmVyYWdlPTI2MiBCCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46MTQ0Njogc2l6ZT03MC40IEtpQiwgY291bnQ9OTExLCBhdmVyYWdlPTc5IEIKKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjoxNDU0OiBzaXplPTUyLjAgS2lCLCBjb3VudD0yNSwgYXZlcmFnZT0yMTMxIEIKKyAgICA8c3RyaW5nPjo1OiBzaXplPTQ5LjcgS2lCLCBjb3VudD0xNDgsIGF2ZXJhZ2U9MzQ0IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvc3lzY29uZmlnLnB5OjQxMTogc2l6ZT00OC4wIEtpQiwgY291bnQ9MSwgYXZlcmFnZT00OC4wIEtpQgorCitXZSBjYW4gc2VlIHRoYXQgUHl0aG9uIGxvYWRlZCBgYDQuOCBNaUJgYCBkYXRhIChieXRlY29kZSBhbmQgY29uc3RhbnRzKSBmcm9tCittb2R1bGVzIGFuZCB0aGF0IHRoZSA6bW9kOmBjb2xsZWN0aW9uc2AgbW9kdWxlIGFsbG9jYXRlZCBgYDI0NCBLaUJgYCB0byBidWlsZAorOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgdHlwZXMuCisKK1NlZSA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AgZm9yIG1vcmUgb3B0aW9ucy4KKworCitDb21wdXRlIGRpZmZlcmVuY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Rha2UgdHdvIHNuYXBzaG90cyBhbmQgZGlzcGxheSB0aGUgZGlmZmVyZW5jZXM6OgorCisgICAgaW1wb3J0IHRyYWNlbWFsbG9jCisgICAgdHJhY2VtYWxsb2Muc3RhcnQoKQorICAgICMgLi4uIHN0YXJ0IHlvdXIgYXBwbGljYXRpb24gLi4uCisKKyAgICBzbmFwc2hvdDEgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICAjIC4uLiBjYWxsIHRoZSBmdW5jdGlvbiBsZWFraW5nIG1lbW9yeSAuLi4KKyAgICBzbmFwc2hvdDIgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKworICAgIHRvcF9zdGF0cyA9IHNuYXBzaG90Mi5jb21wYXJlX3RvKHNuYXBzaG90MSwgJ2xpbmVubycpCisKKyAgICBwcmludCgiWyBUb3AgMTAgZGlmZmVyZW5jZXMgXSIpCisgICAgZm9yIHN0YXQgaW4gdG9wX3N0YXRzWzoxMF06CisgICAgICAgIHByaW50KHN0YXQpCisKK0V4YW1wbGUgb2Ygb3V0cHV0IGJlZm9yZS9hZnRlciBydW5uaW5nIHNvbWUgdGVzdHMgb2YgdGhlIFB5dGhvbiB0ZXN0IHN1aXRlOjoKKworICAgIFsgVG9wIDEwIGRpZmZlcmVuY2VzIF0KKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjo3MTY6IHNpemU9ODE3MyBLaUIgKCs0NDI4IEtpQiksIGNvdW50PTcxMzMyICgrMzkzNjkpLCBhdmVyYWdlPTExNyBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2xpbmVjYWNoZS5weToxMjc6IHNpemU9OTQwIEtpQiAoKzk0MCBLaUIpLCBjb3VudD04MTA2ICgrODEwNiksIGF2ZXJhZ2U9MTE5IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvdW5pdHRlc3QvY2FzZS5weTo1NzE6IHNpemU9Mjk4IEtpQiAoKzI5OCBLaUIpLCBjb3VudD01ODkgKCs1ODkpLCBhdmVyYWdlPTUxOSBCCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46Mjg0OiBzaXplPTEwMDUgS2lCICgrMTY2IEtpQiksIGNvdW50PTc0MjMgKCsxNTI2KSwgYXZlcmFnZT0xMzkgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9taW1ldHlwZXMucHk6MjE3OiBzaXplPTExMiBLaUIgKCsxMTIgS2lCKSwgY291bnQ9MTMzNCAoKzEzMzQpLCBhdmVyYWdlPTg2IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvaHR0cC9zZXJ2ZXIucHk6ODQ4OiBzaXplPTk2LjAgS2lCICgrOTYuMCBLaUIpLCBjb3VudD0xICgrMSksIGF2ZXJhZ2U9OTYuMCBLaUIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvaW5zcGVjdC5weToxNDY1OiBzaXplPTgzLjUgS2lCICgrODMuNSBLaUIpLCBjb3VudD0xMDkgKCsxMDkpLCBhdmVyYWdlPTc4NCBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3VuaXR0ZXN0L21vY2sucHk6NDkxOiBzaXplPTc3LjcgS2lCICgrNzcuNyBLaUIpLCBjb3VudD0xNDMgKCsxNDMpLCBhdmVyYWdlPTU1NyBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3VybGxpYi9wYXJzZS5weTo0NzY6IHNpemU9NzEuOCBLaUIgKCs3MS44IEtpQiksIGNvdW50PTk2OSAoKzk2OSksIGF2ZXJhZ2U9NzYgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9jb250ZXh0bGliLnB5OjM4OiBzaXplPTY3LjIgS2lCICgrNjcuMiBLaUIpLCBjb3VudD0xMjYgKCsxMjYpLCBhdmVyYWdlPTU0NiBCCisKK1dlIGNhbiBzZWUgdGhhdCBQeXRob24gaGFzIGxvYWRlZCBgYDguMiBNaUJgYCBvZiBtb2R1bGUgZGF0YSAoYnl0ZWNvZGUgYW5kCitjb25zdGFudHMpLCBhbmQgdGhhdCB0aGlzIGlzIGBgNC40IE1pQmBgIG1vcmUgdGhhbiBoYWQgYmVlbiBsb2FkZWQgYmVmb3JlIHRoZQordGVzdHMsIHdoZW4gdGhlIHByZXZpb3VzIHNuYXBzaG90IHdhcyB0YWtlbi4gU2ltaWxhcmx5LCB0aGUgOm1vZDpgbGluZWNhY2hlYAorbW9kdWxlIGhhcyBjYWNoZWQgYGA5NDAgS2lCYGAgb2YgUHl0aG9uIHNvdXJjZSBjb2RlIHRvIGZvcm1hdCB0cmFjZWJhY2tzLCBhbGwKK29mIGl0IHNpbmNlIHRoZSBwcmV2aW91cyBzbmFwc2hvdC4KKworSWYgdGhlIHN5c3RlbSBoYXMgbGl0dGxlIGZyZWUgbWVtb3J5LCBzbmFwc2hvdHMgY2FuIGJlIHdyaXR0ZW4gb24gZGlzayB1c2luZwordGhlIDptZXRoOmBTbmFwc2hvdC5kdW1wYCBtZXRob2QgdG8gYW5hbHl6ZSB0aGUgc25hcHNob3Qgb2ZmbGluZS4gVGhlbiB1c2UgdGhlCis6bWV0aDpgU25hcHNob3QubG9hZGAgbWV0aG9kIHJlbG9hZCB0aGUgc25hcHNob3QuCisKKworR2V0IHRoZSB0cmFjZWJhY2sgb2YgYSBtZW1vcnkgYmxvY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvZGUgdG8gZGlzcGxheSB0aGUgdHJhY2ViYWNrIG9mIHRoZSBiaWdnZXN0IG1lbW9yeSBibG9jazo6CisKKyAgICBpbXBvcnQgbGluZWNhY2hlCisgICAgaW1wb3J0IHRyYWNlbWFsbG9jCisKKyAgICAjIFN0b3JlIDI1IGZyYW1lcworICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDI1KQorCisgICAgIyAuLi4gcnVuIHlvdXIgYXBwbGljYXRpb24gLi4uCisKKyAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgIHRvcF9zdGF0cyA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ3RyYWNlYmFjaycpCisKKyAgICAjIHBpY2sgdGhlIGJpZ2dlc3QgbWVtb3J5IGJsb2NrCisgICAgc3RhdCA9IHRvcF9zdGF0c1swXQorICAgIHByaW50KCIlcyBtZW1vcnkgYmxvY2tzOiAlLjFmIEtpQiIgJSAoc3RhdC5jb3VudCwgc3RhdC5zaXplIC8gMTAyNCkpCisgICAgZm9yIGZyYW1lIGluIHN0YXQudHJhY2ViYWNrOgorICAgICAgICBwcmludCgnICBGaWxlICIlcyIsIGxpbmUgJXMnICUgKGZyYW1lLmZpbGVuYW1lLCBmcmFtZS5saW5lbm8pKQorICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZnJhbWUuZmlsZW5hbWUsIGZyYW1lLmxpbmVubykKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgcHJpbnQoJyAgICAnICsgbGluZSkKKworRXhhbXBsZSBvZiBvdXRwdXQgb2YgdGhlIFB5dGhvbiB0ZXN0IHN1aXRlICh0cmFjZWJhY2sgbGltaXRlZCB0byAyNSBmcmFtZXMpOjoKKworICAgIDkwMyBtZW1vcnkgYmxvY2tzOiA4NzAuMSBLaUIKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSA3MTYKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxMDM2CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgOTM0CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTA2OAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDYxOQorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDE1ODEKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxNjE0CisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvZG9jdGVzdC5weSIsIGxpbmUgMTAxCisgICAgICAgIGltcG9ydCBwZGIKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAyODQKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSA5MzgKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxMDY4CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgNjE5CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTU4MQorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDE2MTQKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkiLCBsaW5lIDE3MjgKKyAgICAgICAgaW1wb3J0IGRvY3Rlc3QKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkiLCBsaW5lIDIxCisgICAgICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QocGlja2xldG9vbHMpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9yZWdydGVzdC5weSIsIGxpbmUgMTI3NgorICAgICAgICB0ZXN0X3J1bm5lcigpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9yZWdydGVzdC5weSIsIGxpbmUgOTc2CisgICAgICAgIGRpc3BsYXlfZmFpbHVyZT1ub3QgdmVyYm9zZSkKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3JlZ3J0ZXN0LnB5IiwgbGluZSA3NjEKKyAgICAgICAgbWF0Y2hfdGVzdHM9bnMubWF0Y2hfdGVzdHMpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9yZWdydGVzdC5weSIsIGxpbmUgMTU2MworICAgICAgICBtYWluKCkKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L19fbWFpbl9fLnB5IiwgbGluZSAzCisgICAgICAgIHJlZ3J0ZXN0Lm1haW5faW5fdGVtcF9jd2QoKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3J1bnB5LnB5IiwgbGluZSA3MworICAgICAgICBleGVjKGNvZGUsIHJ1bl9nbG9iYWxzKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3J1bnB5LnB5IiwgbGluZSAxNjAKKyAgICAgICAgIl9fbWFpbl9fIiwgZm5hbWUsIGxvYWRlciwgcGtnX25hbWUpCisKK1dlIGNhbiBzZWUgdGhhdCB0aGUgbW9zdCBtZW1vcnkgd2FzIGFsbG9jYXRlZCBpbiB0aGUgOm1vZDpgaW1wb3J0bGliYCBtb2R1bGUgdG8KK2xvYWQgZGF0YSAoYnl0ZWNvZGUgYW5kIGNvbnN0YW50cykgZnJvbSBtb2R1bGVzOiBgYDg3MCBLaUJgYC4gVGhlIHRyYWNlYmFjayBpcword2hlcmUgdGhlIDptb2Q6YGltcG9ydGxpYmAgbG9hZGVkIGRhdGEgbW9zdCByZWNlbnRseTogb24gdGhlIGBgaW1wb3J0IHBkYmBgCitsaW5lIG9mIHRoZSA6bW9kOmBkb2N0ZXN0YCBtb2R1bGUuIFRoZSB0cmFjZWJhY2sgbWF5IGNoYW5nZSBpZiBhIG5ldyBtb2R1bGUgaXMKK2xvYWRlZC4KKworCitQcmV0dHkgdG9wCistLS0tLS0tLS0tCisKK0NvZGUgdG8gZGlzcGxheSB0aGUgMTAgbGluZXMgYWxsb2NhdGluZyB0aGUgbW9zdCBtZW1vcnkgd2l0aCBhIHByZXR0eSBvdXRwdXQsCitpZ25vcmluZyBgYDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+YGAgYW5kIGBgPHVua25vd24+YGAgZmlsZXM6OgorCisgICAgaW1wb3J0IG9zCisgICAgaW1wb3J0IHRyYWNlbWFsbG9jCisKKyAgICBkZWYgZGlzcGxheV90b3Aoc25hcHNob3QsIGdyb3VwX2J5PSdsaW5lbm8nLCBsaW1pdD0xMCk6CisgICAgICAgIHNuYXBzaG90ID0gc25hcHNob3QuZmlsdGVyX3RyYWNlcygoCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiPHVua25vd24+IiksCisgICAgICAgICkpCisgICAgICAgIHRvcF9zdGF0cyA9IHNuYXBzaG90LnN0YXRpc3RpY3MoZ3JvdXBfYnkpCisKKyAgICAgICAgcHJpbnQoIlRvcCAlcyBsaW5lcyIgJSBsaW1pdCkKKyAgICAgICAgZm9yIGluZGV4LCBzdGF0IGluIGVudW1lcmF0ZSh0b3Bfc3RhdHNbOmxpbWl0XSwgMSk6CisgICAgICAgICAgICBmcmFtZSA9IHN0YXQudHJhY2ViYWNrWzBdCisgICAgICAgICAgICAjIHJlcGxhY2UgIi9wYXRoL3RvL21vZHVsZS9maWxlLnB5IiB3aXRoICJtb2R1bGUvZmlsZS5weSIKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3Muc2VwLmpvaW4oZnJhbWUuZmlsZW5hbWUuc3BsaXQob3Muc2VwKVstMjpdKQorICAgICAgICAgICAgcHJpbnQoIiMlczogJXM6JXM6ICUuMWYgS2lCIgorICAgICAgICAgICAgICAgICAgJSAoaW5kZXgsIGZpbGVuYW1lLCBmcmFtZS5saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUgLyAxMDI0KSkKKworICAgICAgICBvdGhlciA9IHRvcF9zdGF0c1tsaW1pdDpdCisgICAgICAgIGlmIG90aGVyOgorICAgICAgICAgICAgc2l6ZSA9IHN1bShzdGF0LnNpemUgZm9yIHN0YXQgaW4gb3RoZXIpCisgICAgICAgICAgICBwcmludCgiJXMgb3RoZXI6ICUuMWYgS2lCIiAlIChsZW4ob3RoZXIpLCBzaXplIC8gMTAyNCkpCisgICAgICAgIHRvdGFsID0gc3VtKHN0YXQuc2l6ZSBmb3Igc3RhdCBpbiB0b3Bfc3RhdHMpCisgICAgICAgIHByaW50KCJUb3RhbCBhbGxvY2F0ZWQgc2l6ZTogJS4xZiBLaUIiICUgKHRvdGFsIC8gMTAyNCkpCisKKyAgICB0cmFjZW1hbGxvYy5zdGFydCgpCisKKyAgICAjIC4uLiBydW4geW91ciBhcHBsaWNhdGlvbiAuLi4KKworICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgZGlzcGxheV90b3Aoc25hcHNob3QsIDEwKQorCitFeGFtcGxlIG9mIG91dHB1dCBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGU6OgorCisgICAgMjAxMy0xMS0wOCAxNDoxNjo1OC4xNDkzMjA6IFRvcCAxMCBsaW5lcworICAgICMxOiBjb2xsZWN0aW9ucy9fX2luaXRfXy5weTozNjg6IDI5MS45IEtpQgorICAgICMyOiBMaWIvZG9jdGVzdC5weToxMjkxOiAyMDAuMiBLaUIKKyAgICAjMzogdW5pdHRlc3QvY2FzZS5weTo1NzE6IDE2MC4zIEtpQgorICAgICM0OiBMaWIvYWJjLnB5OjEzMzogOTkuOCBLaUIKKyAgICAjNTogdXJsbGliL3BhcnNlLnB5OjQ3NjogNzEuOCBLaUIKKyAgICAjNjogPHN0cmluZz46NTogNjIuNyBLaUIKKyAgICAjNzogTGliL2Jhc2U2NC5weToxNDA6IDU5LjggS2lCCisgICAgIzg6IExpYi9fd2Vha3JlZnNldC5weTozNzogNTEuOCBLaUIKKyAgICAjOTogY29sbGVjdGlvbnMvX19pbml0X18ucHk6MzYyOiA1MC42IEtpQgorICAgICMxMDogdGVzdC90ZXN0X3NpdGUucHk6NTY6IDQ4LjAgS2lCCisgICAgNzQ5NiBvdGhlcjogNDE2MS45IEtpQgorICAgIFRvdGFsIGFsbG9jYXRlZCBzaXplOiA1MjU4LjggS2lCCisKK1NlZSA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AgZm9yIG1vcmUgb3B0aW9ucy4KKworCitBUEkKKz09PQorCitGdW5jdGlvbnMKKy0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IGNsZWFyX3RyYWNlcygpCisKKyAgIENsZWFyIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uCisKKyAgIFNlZSBhbHNvIDpmdW5jOmBzdG9wYC4KKworCisuLiBmdW5jdGlvbjo6IGdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKworICAgR2V0IHRoZSB0cmFjZWJhY2sgd2hlcmUgdGhlIFB5dGhvbiBvYmplY3QgKm9iaiogd2FzIGFsbG9jYXRlZC4KKyAgIFJldHVybiBhIDpjbGFzczpgVHJhY2ViYWNrYCBpbnN0YW5jZSwgb3IgYGBOb25lYGAgaWYgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYAorICAgbW9kdWxlIGlzIG5vdCB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBkaWQgbm90IHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mCisgICB0aGUgb2JqZWN0LgorCisgICBTZWUgYWxzbyA6ZnVuYzpgZ2MuZ2V0X3JlZmVycmVyc2AgYW5kIDpmdW5jOmBzeXMuZ2V0c2l6ZW9mYCBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiBnZXRfdHJhY2ViYWNrX2xpbWl0KCkKKworICAgR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgc3RvcmVkIGluIHRoZSB0cmFjZWJhY2sgb2YgYSB0cmFjZS4KKworICAgVGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyB0bworICAgZ2V0IHRoZSBsaW1pdCwgb3RoZXJ3aXNlIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKyAgIFRoZSBsaW1pdCBpcyBzZXQgYnkgdGhlIDpmdW5jOmBzdGFydGAgZnVuY3Rpb24uCisKKworLi4gZnVuY3Rpb246OiBnZXRfdHJhY2VkX21lbW9yeSgpCisKKyAgIEdldCB0aGUgY3VycmVudCBzaXplIGFuZCBwZWFrIHNpemUgb2YgbWVtb3J5IGJsb2NrcyB0cmFjZWQgYnkgdGhlCisgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIGFzIGEgdHVwbGU6IGBgKGN1cnJlbnQ6IGludCwgcGVhazogaW50KWBgLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSgpCisKKyAgIEdldCB0aGUgbWVtb3J5IHVzYWdlIGluIGJ5dGVzIG9mIHRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIHVzZWQgdG8gc3RvcmUKKyAgIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzLgorICAgUmV0dXJuIGFuIDpjbGFzczpgaW50YC4KKworCisuLiBmdW5jdGlvbjo6IGlzX3RyYWNpbmcoKQorCisgICAgYGBUcnVlYGAgaWYgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgaXMgdHJhY2luZyBQeXRob24gbWVtb3J5CisgICAgYWxsb2NhdGlvbnMsIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKyAgICBTZWUgYWxzbyA6ZnVuYzpgc3RhcnRgIGFuZCA6ZnVuYzpgc3RvcGAgZnVuY3Rpb25zLgorCisKKy4uIGZ1bmN0aW9uOjogc3RhcnQobmZyYW1lOiBpbnQ9MSkKKworICAgU3RhcnQgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zOiBpbnN0YWxsIGhvb2tzIG9uIFB5dGhvbiBtZW1vcnkKKyAgIGFsbG9jYXRvcnMuIENvbGxlY3RlZCB0cmFjZWJhY2tzIG9mIHRyYWNlcyB3aWxsIGJlIGxpbWl0ZWQgdG8gKm5mcmFtZSoKKyAgIGZyYW1lcy4gQnkgZGVmYXVsdCwgYSB0cmFjZSBvZiBhIG1lbW9yeSBibG9jayBvbmx5IHN0b3JlcyB0aGUgbW9zdCByZWNlbnQKKyAgIGZyYW1lOiB0aGUgbGltaXQgaXMgYGAxYGAuICpuZnJhbWUqIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byBgYDFgYC4KKworICAgU3RvcmluZyBtb3JlIHRoYW4gYGAxYGAgZnJhbWUgaXMgb25seSB1c2VmdWwgdG8gY29tcHV0ZSBzdGF0aXN0aWNzIGdyb3VwZWQKKyAgIGJ5IGBgJ3RyYWNlYmFjaydgYCBvciB0byBjb21wdXRlIGN1bXVsYXRpdmUgc3RhdGlzdGljczogc2VlIHRoZQorICAgOm1ldGg6YFNuYXBzaG90LmNvbXBhcmVfdG9gIGFuZCA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AgbWV0aG9kcy4KKworICAgU3RvcmluZyBtb3JlIGZyYW1lcyBpbmNyZWFzZXMgdGhlIG1lbW9yeSBhbmQgQ1BVIG92ZXJoZWFkIG9mIHRoZQorICAgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZS4gVXNlIHRoZSA6ZnVuYzpgZ2V0X3RyYWNlbWFsbG9jX21lbW9yeWAgZnVuY3Rpb24KKyAgIHRvIG1lYXN1cmUgaG93IG11Y2ggbWVtb3J5IGlzIHVzZWQgYnkgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUuCisKKyAgIFRoZSA6ZW52dmFyOmBQWVRIT05UUkFDRU1BTExPQ2AgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIChgYFBZVEhPTlRSQUNFTUFMTE9DPU5GUkFNRWBgKSBhbmQgdGhlIDpvcHRpb246YC1YYCBgYHRyYWNlbWFsbG9jPU5GUkFNRWBgCisgICBjb21tYW5kIGxpbmUgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHN0YXJ0IHRyYWNpbmcgYXQgc3RhcnR1cC4KKworICAgU2VlIGFsc28gOmZ1bmM6YHN0b3BgLCA6ZnVuYzpgaXNfdHJhY2luZ2AgYW5kIDpmdW5jOmBnZXRfdHJhY2ViYWNrX2xpbWl0YAorICAgZnVuY3Rpb25zLgorCisKKy4uIGZ1bmN0aW9uOjogc3RvcCgpCisKKyAgIFN0b3AgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zOiB1bmluc3RhbGwgaG9va3Mgb24gUHl0aG9uIG1lbW9yeQorICAgYWxsb2NhdG9ycy4gQWxzbyBjbGVhcnMgYWxsIHByZXZpb3VzbHkgY29sbGVjdGVkIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzCisgICBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorCisgICBDYWxsIDpmdW5jOmB0YWtlX3NuYXBzaG90YCBmdW5jdGlvbiB0byB0YWtlIGEgc25hcHNob3Qgb2YgdHJhY2VzIGJlZm9yZQorICAgY2xlYXJpbmcgdGhlbS4KKworICAgU2VlIGFsc28gOmZ1bmM6YHN0YXJ0YCwgOmZ1bmM6YGlzX3RyYWNpbmdgIGFuZCA6ZnVuYzpgY2xlYXJfdHJhY2VzYAorICAgZnVuY3Rpb25zLgorCisKKy4uIGZ1bmN0aW9uOjogdGFrZV9zbmFwc2hvdCgpCisKKyAgIFRha2UgYSBzbmFwc2hvdCBvZiB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiBSZXR1cm4gYSBuZXcKKyAgIDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlLgorCisgICBUaGUgc25hcHNob3QgZG9lcyBub3QgaW5jbHVkZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBiZWZvcmUgdGhlCisgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIHN0YXJ0ZWQgdG8gdHJhY2UgbWVtb3J5IGFsbG9jYXRpb25zLgorCisgICBUcmFjZWJhY2tzIG9mIHRyYWNlcyBhcmUgbGltaXRlZCB0byA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgZnJhbWVzLiBVc2UKKyAgIHRoZSAqbmZyYW1lKiBwYXJhbWV0ZXIgb2YgdGhlIDpmdW5jOmBzdGFydGAgZnVuY3Rpb24gdG8gc3RvcmUgbW9yZSBmcmFtZXMuCisKKyAgIFRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgdG8gdGFrZSBhCisgICBzbmFwc2hvdCwgc2VlIHRoZSB0aGUgOmZ1bmM6YHN0YXJ0YCBmdW5jdGlvbi4KKworICAgU2VlIGFsc28gdGhlIDpmdW5jOmBnZXRfb2JqZWN0X3RyYWNlYmFja2AgZnVuY3Rpb24uCisKKworRmlsdGVyCistLS0tLS0KKworLi4gY2xhc3M6OiBGaWx0ZXIoaW5jbHVzaXZlOiBib29sLCBmaWxlbmFtZV9wYXR0ZXJuOiBzdHIsIGxpbmVubzogaW50PU5vbmUsIGFsbF9mcmFtZXM6IGJvb2w9RmFsc2UpCisKKyAgIEZpbHRlciBvbiB0cmFjZXMgb2YgbWVtb3J5IGJsb2Nrcy4KKworICAgU2VlIHRoZSA6ZnVuYzpgZm5tYXRjaC5mbm1hdGNoYCBmdW5jdGlvbiBmb3IgdGhlIHN5bnRheCBvZgorICAgKmZpbGVuYW1lX3BhdHRlcm4qLiBUaGUgYGAnLnB5YydgYCBhbmQgYGAnLnB5bydgYCBmaWxlIGV4dGVuc2lvbnMgYXJlCisgICByZXBsYWNlZCB3aXRoIGBgJy5weSdgYC4KKworICAgRXhhbXBsZXM6CisKKyAgICogYGBGaWx0ZXIoVHJ1ZSwgc3VicHJvY2Vzcy5fX2ZpbGVfXylgYCBvbmx5IGluY2x1ZGVzIHRyYWNlcyBvZiB0aGUKKyAgICAgOm1vZDpgc3VicHJvY2Vzc2AgbW9kdWxlCisgICAqIGBgRmlsdGVyKEZhbHNlLCB0cmFjZW1hbGxvYy5fX2ZpbGVfXylgYCBleGNsdWRlcyB0cmFjZXMgb2YgdGhlCisgICAgIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUKKyAgICogYGBGaWx0ZXIoRmFsc2UsICI8dW5rbm93bj4iKWBgIGV4Y2x1ZGVzIGVtcHR5IHRyYWNlYmFja3MKKworICAgLi4gYXR0cmlidXRlOjogaW5jbHVzaXZlCisKKyAgICAgIElmICppbmNsdXNpdmUqIGlzIGBgVHJ1ZWBgIChpbmNsdWRlKSwgb25seSB0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZAorICAgICAgaW4gYSBmaWxlIHdpdGggYSBuYW1lIG1hdGNoaW5nIDphdHRyOmBmaWxlbmFtZV9wYXR0ZXJuYCBhdCBsaW5lIG51bWJlcgorICAgICAgOmF0dHI6YGxpbmVub2AuCisKKyAgICAgIElmICppbmNsdXNpdmUqIGlzIGBgRmFsc2VgYCAoZXhjbHVkZSksIGlnbm9yZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBpbgorICAgICAgYSBmaWxlIHdpdGggYSBuYW1lIG1hdGNoaW5nIDphdHRyOmBmaWxlbmFtZV9wYXR0ZXJuYCBhdCBsaW5lIG51bWJlcgorICAgICAgOmF0dHI6YGxpbmVub2AuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxpbmVubworCisgICAgICBMaW5lIG51bWJlciAoYGBpbnRgYCkgb2YgdGhlIGZpbHRlci4gSWYgKmxpbmVubyogaXMgYGBOb25lYGAsIHRoZSBmaWx0ZXIKKyAgICAgIG1hdGNoZXMgYW55IGxpbmUgbnVtYmVyLgorCisgICAuLiBhdHRyaWJ1dGU6OiBmaWxlbmFtZV9wYXR0ZXJuCisKKyAgICAgIEZpbGVuYW1lIHBhdHRlcm4gb2YgdGhlIGZpbHRlciAoYGBzdHJgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGFsbF9mcmFtZXMKKworICAgICAgSWYgKmFsbF9mcmFtZXMqIGlzIGBgVHJ1ZWBgLCBhbGwgZnJhbWVzIG9mIHRoZSB0cmFjZWJhY2sgYXJlIGNoZWNrZWQuIElmCisgICAgICAqYWxsX2ZyYW1lcyogaXMgYGBGYWxzZWBgLCBvbmx5IHRoZSBtb3N0IHJlY2VudCBmcmFtZSBpcyBjaGVja2VkLgorCisgICAgICBUaGlzIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0IGlmIHRoZSB0cmFjZWJhY2sgbGltaXQgaXMgYGAxYGAuICBTZWUgdGhlCisgICAgICA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgZnVuY3Rpb24gYW5kIDphdHRyOmBTbmFwc2hvdC50cmFjZWJhY2tfbGltaXRgCisgICAgICBhdHRyaWJ1dGUuCisKKworRnJhbWUKKy0tLS0tCisKKy4uIGNsYXNzOjogRnJhbWUKKworICAgRnJhbWUgb2YgYSB0cmFjZWJhY2suCisKKyAgIFRoZSA6Y2xhc3M6YFRyYWNlYmFja2AgY2xhc3MgaXMgYSBzZXF1ZW5jZSBvZiA6Y2xhc3M6YEZyYW1lYCBpbnN0YW5jZXMuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZpbGVuYW1lCisKKyAgICAgIEZpbGVuYW1lIChgYHN0cmBgKS4KKworICAgLi4gYXR0cmlidXRlOjogbGluZW5vCisKKyAgICAgIExpbmUgbnVtYmVyIChgYGludGBgKS4KKworCitTbmFwc2hvdAorLS0tLS0tLS0KKworLi4gY2xhc3M6OiBTbmFwc2hvdAorCisgICBTbmFwc2hvdCBvZiB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorCisgICBUaGUgOmZ1bmM6YHRha2Vfc25hcHNob3RgIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzbmFwc2hvdCBpbnN0YW5jZS4KKworICAgLi4gbWV0aG9kOjogY29tcGFyZV90byhvbGRfc25hcHNob3Q6IFNuYXBzaG90LCBncm91cF9ieTogc3RyLCBjdW11bGF0aXZlOiBib29sPUZhbHNlKQorCisgICAgICBDb21wdXRlIHRoZSBkaWZmZXJlbmNlcyB3aXRoIGFuIG9sZCBzbmFwc2hvdC4gR2V0IHN0YXRpc3RpY3MgYXMgYSBzb3J0ZWQKKyAgICAgIGxpc3Qgb2YgOmNsYXNzOmBTdGF0aXN0aWNEaWZmYCBpbnN0YW5jZXMgZ3JvdXBlZCBieSAqZ3JvdXBfYnkqLgorCisgICAgICBTZWUgdGhlIDptZXRoOmBzdGF0aXN0aWNzYCBtZXRob2QgZm9yICpncm91cF9ieSogYW5kICpjdW11bGF0aXZlKgorICAgICAgcGFyYW1ldGVycy4KKworICAgICAgVGhlIHJlc3VsdCBpcyBzb3J0ZWQgZnJvbSB0aGUgYmlnZ2VzdCB0byB0aGUgc21hbGxlc3QgYnk6IGFic29sdXRlIHZhbHVlCisgICAgICBvZiA6YXR0cjpgU3RhdGlzdGljRGlmZi5zaXplX2RpZmZgLCA6YXR0cjpgU3RhdGlzdGljRGlmZi5zaXplYCwgYWJzb2x1dGUKKyAgICAgIHZhbHVlIG9mIDphdHRyOmBTdGF0aXN0aWNEaWZmLmNvdW50X2RpZmZgLCA6YXR0cjpgU3RhdGlzdGljLmNvdW50YCBhbmQKKyAgICAgIHRoZW4gYnkgOmF0dHI6YFN0YXRpc3RpY0RpZmYudHJhY2ViYWNrYC4KKworCisgICAuLiBtZXRob2Q6OiBkdW1wKGZpbGVuYW1lKQorCisgICAgICBXcml0ZSB0aGUgc25hcHNob3QgaW50byBhIGZpbGUuCisKKyAgICAgIFVzZSA6bWV0aDpgbG9hZGAgdG8gcmVsb2FkIHRoZSBzbmFwc2hvdC4KKworCisgICAuLiBtZXRob2Q6OiBmaWx0ZXJfdHJhY2VzKGZpbHRlcnMpCisKKyAgICAgIENyZWF0ZSBhIG5ldyA6Y2xhc3M6YFNuYXBzaG90YCBpbnN0YW5jZSB3aXRoIGEgZmlsdGVyZWQgOmF0dHI6YHRyYWNlc2AKKyAgICAgIHNlcXVlbmNlLCAqZmlsdGVycyogaXMgYSBsaXN0IG9mIDpjbGFzczpgRmlsdGVyYCBpbnN0YW5jZXMuICBJZiAqZmlsdGVycyoKKyAgICAgIGlzIGFuIGVtcHR5IGxpc3QsIHJldHVybiBhIG5ldyA6Y2xhc3M6YFNuYXBzaG90YCBpbnN0YW5jZSB3aXRoIGEgY29weSBvZgorICAgICAgdGhlIHRyYWNlcy4KKworICAgICAgQWxsIGluY2x1c2l2ZSBmaWx0ZXJzIGFyZSBhcHBsaWVkIGF0IG9uY2UsIGEgdHJhY2UgaXMgaWdub3JlZCBpZiBubworICAgICAgaW5jbHVzaXZlIGZpbHRlcnMgbWF0Y2ggaXQuIEEgdHJhY2UgaXMgaWdub3JlZCBpZiBhdCBsZWFzdCBvbmUgZXhjbHVzaXZlCisgICAgICBmaWx0ZXIgbWF0Y2hzIGl0LgorCisKKyAgIC4uIGNsYXNzbWV0aG9kOjogbG9hZChmaWxlbmFtZSkKKworICAgICAgTG9hZCBhIHNuYXBzaG90IGZyb20gYSBmaWxlLgorCisgICAgICBTZWUgYWxzbyA6bWV0aDpgZHVtcGAuCisKKworICAgLi4gbWV0aG9kOjogc3RhdGlzdGljcyhncm91cF9ieTogc3RyLCBjdW11bGF0aXZlOiBib29sPUZhbHNlKQorCisgICAgICBHZXQgc3RhdGlzdGljcyBhcyBhIHNvcnRlZCBsaXN0IG9mIDpjbGFzczpgU3RhdGlzdGljYCBpbnN0YW5jZXMgZ3JvdXBlZAorICAgICAgYnkgKmdyb3VwX2J5KjoKKworICAgICAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgIGdyb3VwX2J5ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24KKyAgICAgID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICBgYCdmaWxlbmFtZSdgYCAgICAgICAgIGZpbGVuYW1lCisgICAgICBgYCdsaW5lbm8nYGAgICAgICAgICAgIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlcgorICAgICAgYGAndHJhY2ViYWNrJ2BgICAgICAgICB0cmFjZWJhY2sKKyAgICAgID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgIElmICpjdW11bGF0aXZlKiBpcyBgYFRydWVgYCwgY3VtdWxhdGUgc2l6ZSBhbmQgY291bnQgb2YgbWVtb3J5IGJsb2NrcyBvZgorICAgICAgYWxsIGZyYW1lcyBvZiB0aGUgdHJhY2ViYWNrIG9mIGEgdHJhY2UsIG5vdCBvbmx5IHRoZSBtb3N0IHJlY2VudCBmcmFtZS4KKyAgICAgIFRoZSBjdW11bGF0aXZlIG1vZGUgY2FuIG9ubHkgYmUgdXNlZCB3aXRoICpncm91cF9ieSogZXF1YWxzIHRvCisgICAgICBgYCdmaWxlbmFtZSdgYCBhbmQgYGAnbGluZW5vJ2BgLgorCisgICAgICBUaGUgcmVzdWx0IGlzIHNvcnRlZCBmcm9tIHRoZSBiaWdnZXN0IHRvIHRoZSBzbWFsbGVzdCBieToKKyAgICAgIDphdHRyOmBTdGF0aXN0aWMuc2l6ZWAsIDphdHRyOmBTdGF0aXN0aWMuY291bnRgIGFuZCB0aGVuIGJ5CisgICAgICA6YXR0cjpgU3RhdGlzdGljLnRyYWNlYmFja2AuCisKKworICAgLi4gYXR0cmlidXRlOjogdHJhY2ViYWNrX2xpbWl0CisKKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBzdG9yZWQgaW4gdGhlIHRyYWNlYmFjayBvZiA6YXR0cjpgdHJhY2VzYDoKKyAgICAgIHJlc3VsdCBvZiB0aGUgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgIHdoZW4gdGhlIHNuYXBzaG90IHdhcyB0YWtlbi4KKworICAgLi4gYXR0cmlidXRlOjogdHJhY2VzCisKKyAgICAgIFRyYWNlcyBvZiBhbGwgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uOiBzZXF1ZW5jZSBvZgorICAgICAgOmNsYXNzOmBUcmFjZWAgaW5zdGFuY2VzLgorCisgICAgICBUaGUgc2VxdWVuY2UgaGFzIGFuIHVuZGVmaW5lZCBvcmRlci4gVXNlIHRoZSA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AKKyAgICAgIG1ldGhvZCB0byBnZXQgYSBzb3J0ZWQgbGlzdCBvZiBzdGF0aXN0aWNzLgorCisKK1N0YXRpc3RpYworLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogU3RhdGlzdGljCisKKyAgIFN0YXRpc3RpYyBvbiBtZW1vcnkgYWxsb2NhdGlvbnMuCisKKyAgIDpmdW5jOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCByZXR1cm5zIGEgbGlzdCBvZiA6Y2xhc3M6YFN0YXRpc3RpY2AgaW5zdGFuY2VzLgorCisgICBTZWUgYWxzbyB0aGUgOmNsYXNzOmBTdGF0aXN0aWNEaWZmYCBjbGFzcy4KKworICAgLi4gYXR0cmlidXRlOjogY291bnQKKworICAgICAgTnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgKGBgaW50YGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplCisKKyAgICAgIFRvdGFsIHNpemUgb2YgbWVtb3J5IGJsb2NrcyBpbiBieXRlcyAoYGBpbnRgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYWNlYmFjaworCisgICAgICBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9jayB3YXMgYWxsb2NhdGVkLCA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgICAgIGluc3RhbmNlLgorCisKK1N0YXRpc3RpY0RpZmYKKy0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBTdGF0aXN0aWNEaWZmCisKKyAgIFN0YXRpc3RpYyBkaWZmZXJlbmNlIG9uIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGFuIG9sZCBhbmQgYSBuZXcKKyAgIDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlLgorCisgICA6ZnVuYzpgU25hcHNob3QuY29tcGFyZV90b2AgcmV0dXJucyBhIGxpc3Qgb2YgOmNsYXNzOmBTdGF0aXN0aWNEaWZmYAorICAgaW5zdGFuY2VzLiBTZWUgYWxzbyB0aGUgOmNsYXNzOmBTdGF0aXN0aWNgIGNsYXNzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb3VudAorCisgICAgICBOdW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBpbiB0aGUgbmV3IHNuYXBzaG90IChgYGludGBgKTogYGAwYGAgaWYKKyAgICAgIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbiByZWxlYXNlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb3VudF9kaWZmCisKKyAgICAgIERpZmZlcmVuY2Ugb2YgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgYmV0d2VlbiB0aGUgb2xkIGFuZCB0aGUgbmV3CisgICAgICBzbmFwc2hvdHMgKGBgaW50YGApOiBgYDBgYCBpZiB0aGUgbWVtb3J5IGJsb2NrcyBoYXZlIGJlZW4gYWxsb2NhdGVkIGluCisgICAgICB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplCisKKyAgICAgIFRvdGFsIHNpemUgb2YgbWVtb3J5IGJsb2NrcyBpbiBieXRlcyBpbiB0aGUgbmV3IHNuYXBzaG90IChgYGludGBgKToKKyAgICAgIGBgMGBgIGlmIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbiByZWxlYXNlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplX2RpZmYKKworICAgICAgRGlmZmVyZW5jZSBvZiB0b3RhbCBzaXplIG9mIG1lbW9yeSBibG9ja3MgaW4gYnl0ZXMgYmV0d2VlbiB0aGUgb2xkIGFuZAorICAgICAgdGhlIG5ldyBzbmFwc2hvdHMgKGBgaW50YGApOiBgYDBgYCBpZiB0aGUgbWVtb3J5IGJsb2NrcyBoYXZlIGJlZW4KKyAgICAgIGFsbG9jYXRlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZWJhY2sKKworICAgICAgVHJhY2ViYWNrIHdoZXJlIHRoZSBtZW1vcnkgYmxvY2tzIHdlcmUgYWxsb2NhdGVkLCA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgICAgIGluc3RhbmNlLgorCisKK1RyYWNlCistLS0tLQorCisuLiBjbGFzczo6IFRyYWNlCisKKyAgIFRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrLgorCisgICBUaGUgOmF0dHI6YFNuYXBzaG90LnRyYWNlc2AgYXR0cmlidXRlIGlzIGEgc2VxdWVuY2Ugb2YgOmNsYXNzOmBUcmFjZWAKKyAgIGluc3RhbmNlcy4KKworICAgLi4gYXR0cmlidXRlOjogc2l6ZQorCisgICAgICBTaXplIG9mIHRoZSBtZW1vcnkgYmxvY2sgaW4gYnl0ZXMgKGBgaW50YGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZWJhY2sKKworICAgICAgVHJhY2ViYWNrIHdoZXJlIHRoZSBtZW1vcnkgYmxvY2sgd2FzIGFsbG9jYXRlZCwgOmNsYXNzOmBUcmFjZWJhY2tgCisgICAgICBpbnN0YW5jZS4KKworCitUcmFjZWJhY2sKKy0tLS0tLS0tLQorCisuLiBjbGFzczo6IFRyYWNlYmFjaworCisgICBTZXF1ZW5jZSBvZiA6Y2xhc3M6YEZyYW1lYCBpbnN0YW5jZXMgc29ydGVkIGZyb20gdGhlIG1vc3QgcmVjZW50IGZyYW1lIHRvCisgICB0aGUgb2xkZXN0IGZyYW1lLgorCisgICBBIHRyYWNlYmFjayBjb250YWlucyBhdCBsZWFzdCBgYDFgYCBmcmFtZS4gSWYgdGhlIGBgdHJhY2VtYWxsb2NgYCBtb2R1bGUKKyAgIGZhaWxlZCB0byBnZXQgYSBmcmFtZSwgdGhlIGZpbGVuYW1lIGBgIjx1bmtub3duPiJgYCBhdCBsaW5lIG51bWJlciBgYDBgYCBpcworICAgdXNlZC4KKworICAgV2hlbiBhIHNuYXBzaG90IGlzIHRha2VuLCB0cmFjZWJhY2tzIG9mIHRyYWNlcyBhcmUgbGltaXRlZCB0bworICAgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgIGZyYW1lcy4gU2VlIHRoZSA6ZnVuYzpgdGFrZV9zbmFwc2hvdGAgZnVuY3Rpb24uCisKKyAgIFRoZSA6YXR0cjpgVHJhY2UudHJhY2ViYWNrYCBhdHRyaWJ1dGUgaXMgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBUcmFjZWJhY2tgCisgICBpbnN0YW5jZS4KKworCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLmRpYSBiL0RvYy9saWJyYXJ5L3R1bGlwX2Nvcm8uZGlhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjY2Y0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLmRpYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLnBuZyBiL0RvYy9saWJyYXJ5L3R1bGlwX2Nvcm8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjY5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS90eXBlcy5yc3QKaW5kZXggNjk1NDgwZi4uYzRmNTdlNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3R5cGVzLnJzdApAQCAtMTA3LDkgKzEwNywzNSBAQAogICAgQyIuKQogCiAKLS4uIGRhdGE6OiBNb2R1bGVUeXBlCisuLiBjbGFzczo6IE1vZHVsZVR5cGUobmFtZSwgZG9jPU5vbmUpCiAKLSAgIFRoZSB0eXBlIG9mIG1vZHVsZXMuCisgICBUaGUgdHlwZSBvZiA6dGVybTpgbW9kdWxlcyA8bW9kdWxlPmAuIENvbnN0cnVjdG9yIHRha2VzIHRoZSBuYW1lIG9mIHRoZQorICAgbW9kdWxlIHRvIGJlIGNyZWF0ZWQgYW5kIG9wdGlvbmFsbHkgaXRzIDp0ZXJtOmBkb2NzdHJpbmdgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBfX2RvY19fCisKKyAgICAgIFRoZSA6dGVybTpgZG9jc3RyaW5nYCBvZiB0aGUgbW9kdWxlLiBEZWZhdWx0cyB0byBgYE5vbmVgYC4KKworICAgLi4gYXR0cmlidXRlOjogX19sb2FkZXJfXworCisgICAgICBUaGUgOnRlcm06YGxvYWRlcmAgd2hpY2ggbG9hZGVkIHRoZSBtb2R1bGUuIERlZmF1bHRzIHRvIGBgTm9uZWBgLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgRGVmYXVsdHMgdG8gYGBOb25lYGAuIFByZXZpb3VzbHkgdGhlIGF0dHJpYnV0ZSB3YXMgb3B0aW9uYWwuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fbmFtZV9fCisKKyAgICAgIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fcGFja2FnZV9fCisKKyAgICAgIFdoaWNoIDp0ZXJtOmBwYWNrYWdlYCBhIG1vZHVsZSBiZWxvbmdzIHRvLiBJZiB0aGUgbW9kdWxlIGlzIHRvcC1sZXZlbAorICAgICAgKGkuZS4gbm90IGEgcGFydCBvZiBhbnkgc3BlY2lmaWMgcGFja2FnZSkgdGhlbiB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQKKyAgICAgIHRvIGBgJydgYCwgZWxzZSBpdCBzaG91bGQgYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlICh3aGljaCBjYW4gYmUKKyAgICAgIDphdHRyOmBfX25hbWVfX2AgaWYgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UgaXRzZWxmKS4gRGVmYXVsdHMgdG8gYGBOb25lYGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBEZWZhdWx0cyB0byBgYE5vbmVgYC4gUHJldmlvdXNseSB0aGUgYXR0cmlidXRlIHdhcyBvcHRpb25hbC4KIAogCiAuLiBkYXRhOjogVHJhY2ViYWNrVHlwZQpAQCAtMjEyLDYgKzIzOCw4IEBACiAgICAgICAgICAgICAgICBrZXlzID0gc29ydGVkKHNlbGYuX19kaWN0X18pCiAgICAgICAgICAgICAgICBpdGVtcyA9ICgie309eyFyfSIuZm9ybWF0KGssIHNlbGYuX19kaWN0X19ba10pIGZvciBrIGluIGtleXMpCiAgICAgICAgICAgICAgICByZXR1cm4gInt9KHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sICIsICIuam9pbihpdGVtcykpCisgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KIAogICAgYGBTaW1wbGVOYW1lc3BhY2VgYCBtYXkgYmUgdXNlZnVsIGFzIGEgcmVwbGFjZW1lbnQgZm9yIGBgY2xhc3MgTlM6IHBhc3NgYC4KICAgIEhvd2V2ZXIsIGZvciBhIHN0cnVjdHVyZWQgcmVjb3JkIHR5cGUgdXNlIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdCBiL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdAppbmRleCBhZDcwZGQ5Li4zYjNkM2EwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CkBAIC0xNSw4ICsxNSw4IEBACiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgKFVDRCkgd2hpY2gKIGRlZmluZXMgY2hhcmFjdGVyIHByb3BlcnRpZXMgZm9yIGFsbCBVbmljb2RlIGNoYXJhY3RlcnMuIFRoZSBkYXRhIGNvbnRhaW5lZCBpbgotdGhpcyBkYXRhYmFzZSBpcyBjb21waWxlZCBmcm9tIHRoZSBgVUNEIHZlcnNpb24gNi4xLjAKLTxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjEuMC91Y2Q+YF8uCit0aGlzIGRhdGFiYXNlIGlzIGNvbXBpbGVkIGZyb20gdGhlIGBVQ0QgdmVyc2lvbiA2LjMuMAorPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZD5gXy4KIAogVGhlIG1vZHVsZSB1c2VzIHRoZSBzYW1lIG5hbWVzIGFuZCBzeW1ib2xzIGFzIGRlZmluZWQgYnkgVW5pY29kZQogU3RhbmRhcmQgQW5uZXggIzQ0LCBgIlVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIgpAQCAtMTY2LDYgKzE2Niw2IEBACiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCi0uLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4xLjAvdWNkL05hbWVBbGlhc2VzLnR4dAorLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZC9OYW1lQWxpYXNlcy50eHQKIAotLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMS4wL3VjZC9OYW1lZFNlcXVlbmNlcy50eHQKKy4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjMuMC91Y2QvTmFtZWRTZXF1ZW5jZXMudHh0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0CmluZGV4IDQ5NDA2ZDAuLjk4YmZjYzUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0CkBAIC0yNzcsNiArMjc3LDIwIEBACiAgICAgICAgLi4uCiAgICAgQXR0cmlidXRlRXJyb3I6IG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdvbGRfbWV0aG9kJwogCitVc2luZyBhIHNwZWNpZmljYXRpb24gYWxzbyBlbmFibGVzIGEgc21hcnRlciBtYXRjaGluZyBvZiBjYWxscyBtYWRlIHRvIHRoZQorbW9jaywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHNvbWUgcGFyYW1ldGVycyB3ZXJlIHBhc3NlZCBhcyBwb3NpdGlvbmFsIG9yCituYW1lZCBhcmd1bWVudHM6OgorCisgICA+Pj4gZGVmIGYoYSwgYiwgYyk6IHBhc3MKKyAgIC4uLgorICAgPj4+IG1vY2sgPSBNb2NrKHNwZWM9ZikKKyAgID4+PiBtb2NrKDEsIDIsIDMpCisgICA8TW9jayBuYW1lPSdtb2NrKCknIGlkPScxNDAxNjE1ODA0NTY1NzYnPgorICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yLCBjPTMpCisKK0lmIHlvdSB3YW50IHRoaXMgc21hcnRlciBtYXRjaGluZyB0byBhbHNvIHdvcmsgd2l0aCBtZXRob2QgY2FsbHMgb24gdGhlIG1vY2ssCit5b3UgY2FuIHVzZSA6cmVmOmBhdXRvLXNwZWNjaW5nIDxhdXRvLXNwZWNjaW5nPmAuCisKIElmIHlvdSB3YW50IGEgc3Ryb25nZXIgZm9ybSBvZiBzcGVjaWZpY2F0aW9uIHRoYXQgcHJldmVudHMgdGhlIHNldHRpbmcKIG9mIGFyYml0cmFyeSBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgdGhlIGdldHRpbmcgb2YgdGhlbSB0aGVuIHlvdSBjYW4gdXNlCiBgc3BlY19zZXRgIGluc3RlYWQgb2YgYHNwZWNgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay5yc3QgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdAppbmRleCA2Yjk4MDVjLi5iNWNmN2I1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdApAQCAtMjY0LDcgKzI2NCw2IEBACiAgICAgICAgICAgICA8TW9jayBuYW1lPSdtb2NrLm1ldGhvZCgpJyBpZD0nLi4uJz4KICAgICAgICAgICAgID4+PiBtb2NrLm1ldGhvZC5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMywgdGVzdD0nd293JykKIAotCiAgICAgLi4gbWV0aG9kOjogYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgICAgQXNzZXJ0IHRoYXQgdGhlIG1vY2sgd2FzIGNhbGxlZCBleGFjdGx5IG9uY2UgYW5kIHdpdGggdGhlIHNwZWNpZmllZApAQCAtNjg1LDYgKzY4NCwyNyBAQAogICAgICAgLi4uCiAgICAgS2V5RXJyb3IKIAorQSBjYWxsYWJsZSBtb2NrIHdoaWNoIHdhcyBjcmVhdGVkIHdpdGggYSAqc3BlYyogKG9yIGEgKnNwZWNfc2V0Kikgd2lsbAoraW50cm9zcGVjdCB0aGUgc3BlY2lmaWNhdGlvbiBvYmplY3QncyBzaWduYXR1cmUgd2hlbiBtYXRjaGluZyBjYWxscyB0bwordGhlIG1vY2suICBUaGVyZWZvcmUsIGl0IGNhbiBtYXRjaCB0aGUgYWN0dWFsIGNhbGwncyBhcmd1bWVudHMgcmVnYXJkbGVzcworb2Ygd2hldGhlciB0aGV5IHdlcmUgcGFzc2VkIHBvc2l0aW9uYWxseSBvciBieSBuYW1lOjoKKworICAgPj4+IGRlZiBmKGEsIGIsIGMpOiBwYXNzCisgICAuLi4KKyAgID4+PiBtb2NrID0gTW9jayhzcGVjPWYpCisgICA+Pj4gbW9jaygxLCAyLCBjPTMpCisgICA8TW9jayBuYW1lPSdtb2NrKCknIGlkPScxNDAxNjE1ODA0NTY1NzYnPgorICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMpCisgICA+Pj4gbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKworVGhpcyBhcHBsaWVzIHRvIDptZXRoOmB+TW9jay5hc3NlcnRfY2FsbGVkX3dpdGhgLAorOm1ldGg6YH5Nb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoYCwgOm1ldGg6YH5Nb2NrLmFzc2VydF9oYXNfY2FsbHNgIGFuZAorOm1ldGg6YH5Nb2NrLmFzc2VydF9hbnlfY2FsbGAuICBXaGVuIDpyZWY6YGF1dG8tc3BlY2NpbmdgLCBpdCB3aWxsIGFsc28KK2FwcGx5IHRvIG1ldGhvZCBjYWxscyBvbiB0aGUgbW9jayBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzaWduYXR1cmUgaW50cm9zcGVjdGlvbiBvbiBzcGVjY2VkIGFuZCBhdXRvc3BlY2NlZCBtb2NrIG9iamVjdHMuCisKIAogLi4gY2xhc3M6OiBQcm9wZXJ0eU1vY2soKmFyZ3MsICoqa3dhcmdzKQogCkBAIC0xOTY5LDggKzE5ODksMTMgQEAKICAgICBkZWZhdWx0KSB0aGVuIGEgYE1hZ2ljTW9ja2Agd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UsIHdpdGggdGhlIEFQSSBsaW1pdGVkCiAgICAgdG8gbWV0aG9kcyBvciBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBvbiBzdGFuZGFyZCBmaWxlIGhhbmRsZXMuCiAKLSAgICBgcmVhZF9kYXRhYCBpcyBhIHN0cmluZyBmb3IgdGhlIGB+aW8uSU9CYXNlLnJlYWRgIG1ldGhvZCBvZiB0aGUgZmlsZSBoYW5kbGUKLSAgICB0byByZXR1cm4uICBUaGlzIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LgorICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGAsCisgICAgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVgLCBhbmQgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVzYCBtZXRob2RzCisgICAgb2YgdGhlIGZpbGUgaGFuZGxlIHRvIHJldHVybi4gIENhbGxzIHRvIHRob3NlIG1ldGhvZHMgd2lsbCB0YWtlIGRhdGEgZnJvbQorICAgIGByZWFkX2RhdGFgIHVudGlsIGl0IGlzIGRlcGxldGVkLiAgVGhlIG1vY2sgb2YgdGhlc2UgbWV0aG9kcyBpcyBwcmV0dHkKKyAgICBzaW1wbGlzdGljLiAgSWYgeW91IG5lZWQgbW9yZSBjb250cm9sIG92ZXIgdGhlIGRhdGEgdGhhdCB5b3UgYXJlIGZlZWRpbmcgdG8KKyAgICB0aGUgdGVzdGVkIGNvZGUgeW91IHdpbGwgbmVlZCB0byBjdXN0b21pemUgdGhpcyBtb2NrIGZvciB5b3Vyc2VsZi4KKyAgICBgcmVhZF9kYXRhYCBpcyBhbiBlbXB0eSBzdHJpbmcgYnkgZGVmYXVsdC4KIAogVXNpbmcgYG9wZW5gIGFzIGEgY29udGV4dCBtYW5hZ2VyIGlzIGEgZ3JlYXQgd2F5IHRvIGVuc3VyZSB5b3VyIGZpbGUgaGFuZGxlcwogYXJlIGNsb3NlZCBwcm9wZXJseSBhbmQgaXMgYmVjb21pbmcgY29tbW9uOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdAppbmRleCBmNGU1NTRkLi42ZWMzNjA5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CkBAIC01NTksOCArNTU5LDcxIEBACiAgICBVc3VhbGx5IHlvdSBjYW4gdXNlIDptZXRoOmBUZXN0Q2FzZS5za2lwVGVzdGAgb3Igb25lIG9mIHRoZSBza2lwcGluZwogICAgZGVjb3JhdG9ycyBpbnN0ZWFkIG9mIHJhaXNpbmcgdGhpcyBkaXJlY3RseS4KIAotU2tpcHBlZCB0ZXN0cyB3aWxsIG5vdCBoYXZlIDptZXRoOmBzZXRVcGAgb3IgOm1ldGg6YHRlYXJEb3duYCBydW4gYXJvdW5kIHRoZW0uCi1Ta2lwcGVkIGNsYXNzZXMgd2lsbCBub3QgaGF2ZSA6bWV0aDpgc2V0VXBDbGFzc2Agb3IgOm1ldGg6YHRlYXJEb3duQ2xhc3NgIHJ1bi4KK1NraXBwZWQgdGVzdHMgd2lsbCBub3QgaGF2ZSA6bWV0aDpgflRlc3RDYXNlLnNldFVwYCBvciA6bWV0aDpgflRlc3RDYXNlLnRlYXJEb3duYCBydW4gYXJvdW5kIHRoZW0uCitTa2lwcGVkIGNsYXNzZXMgd2lsbCBub3QgaGF2ZSA6bWV0aDpgflRlc3RDYXNlLnNldFVwQ2xhc3NgIG9yIDptZXRoOmB+VGVzdENhc2UudGVhckRvd25DbGFzc2AgcnVuLgorU2tpcHBlZCBtb2R1bGVzIHdpbGwgbm90IGhhdmUgOmZ1bmM6YHNldFVwTW9kdWxlYCBvciA6ZnVuYzpgdGVhckRvd25Nb2R1bGVgIHJ1bi4KKworCisuLiBfc3VidGVzdHM6CisKK0Rpc3Rpbmd1aXNoaW5nIHRlc3QgaXRlcmF0aW9ucyB1c2luZyBzdWJ0ZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitXaGVuIHNvbWUgb2YgeW91ciB0ZXN0cyBkaWZmZXIgb25seSBieSBhIHNvbWUgdmVyeSBzbWFsbCBkaWZmZXJlbmNlcywgZm9yCitpbnN0YW5jZSBzb21lIHBhcmFtZXRlcnMsIHVuaXR0ZXN0IGFsbG93cyB5b3UgdG8gZGlzdGluZ3Vpc2ggdGhlbSBpbnNpZGUKK3RoZSBib2R5IG9mIGEgdGVzdCBtZXRob2QgdXNpbmcgdGhlIDptZXRoOmB+VGVzdENhc2Uuc3ViVGVzdGAgY29udGV4dCBtYW5hZ2VyLgorCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0ZXN0OjoKKworICAgY2xhc3MgTnVtYmVyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgZGVmIHRlc3RfZXZlbihzZWxmKToKKyAgICAgICAgICAgIiIiCisgICAgICAgICAgIFRlc3QgdGhhdCBudW1iZXJzIGJldHdlZW4gMCBhbmQgNSBhcmUgYWxsIGV2ZW4uCisgICAgICAgICAgICIiIgorICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCA2KToKKyAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9aSk6CisgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKword2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OjoKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRkFJTDogdGVzdF9ldmVuIChfX21haW5fXy5OdW1iZXJzVGVzdCkgKGk9MSkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAic3VidGVzdHMucHkiLCBsaW5lIDMyLCBpbiB0ZXN0X2V2ZW4KKyAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorICAgQXNzZXJ0aW9uRXJyb3I6IDEgIT0gMAorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGQUlMOiB0ZXN0X2V2ZW4gKF9fbWFpbl9fLk51bWJlcnNUZXN0KSAoaT0zKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICJzdWJ0ZXN0cy5weSIsIGxpbmUgMzIsIGluIHRlc3RfZXZlbgorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisgICBBc3NlcnRpb25FcnJvcjogMSAhPSAwCisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZBSUw6IHRlc3RfZXZlbiAoX19tYWluX18uTnVtYmVyc1Rlc3QpIChpPTUpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgInN1YnRlc3RzLnB5IiwgbGluZSAzMiwgaW4gdGVzdF9ldmVuCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKyAgIEFzc2VydGlvbkVycm9yOiAxICE9IDAKKworV2l0aG91dCB1c2luZyBhIHN1YnRlc3QsIGV4ZWN1dGlvbiB3b3VsZCBzdG9wIGFmdGVyIHRoZSBmaXJzdCBmYWlsdXJlLAorYW5kIHRoZSBlcnJvciB3b3VsZCBiZSBsZXNzIGVhc3kgdG8gZGlhZ25vc2UgYmVjYXVzZSB0aGUgdmFsdWUgb2YgYGBpYGAKK3dvdWxkbid0IGJlIGRpc3BsYXllZDo6CisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZBSUw6IHRlc3RfZXZlbiAoX19tYWluX18uTnVtYmVyc1Rlc3QpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgInN1YnRlc3RzLnB5IiwgbGluZSAzMiwgaW4gdGVzdF9ldmVuCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKyAgIEFzc2VydGlvbkVycm9yOiAxICE9IDAKIAogCiAuLiBfdW5pdHRlc3QtY29udGVudHM6CkBAIC02NzYsNiArNzM5LDIxIEBACiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCisgICAuLiBtZXRob2Q6OiBzdWJUZXN0KG1zZz1Ob25lLCAqKnBhcmFtcykKKworICAgICAgUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHdoaWNoIGV4ZWN1dGVzIHRoZSBlbmNsb3NlZCBjb2RlIGJsb2NrIGFzIGEKKyAgICAgIHN1YnRlc3QuICAqbXNnKiBhbmQgKnBhcmFtcyogYXJlIG9wdGlvbmFsLCBhcmJpdHJhcnkgdmFsdWVzIHdoaWNoIGFyZQorICAgICAgZGlzcGxheWVkIHdoZW5ldmVyIGEgc3VidGVzdCBmYWlscywgYWxsb3dpbmcgeW91IHRvIGlkZW50aWZ5IHRoZW0KKyAgICAgIGNsZWFybHkuCisKKyAgICAgIEEgdGVzdCBjYXNlIGNhbiBjb250YWluIGFueSBudW1iZXIgb2Ygc3VidGVzdCBkZWNsYXJhdGlvbnMsIGFuZAorICAgICAgdGhleSBjYW4gYmUgYXJiaXRyYXJpbHkgbmVzdGVkLgorCisgICAgICBTZWUgOnJlZjpgc3VidGVzdHNgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAgICAuLiBtZXRob2Q6OiBkZWJ1ZygpCiAKICAgICAgIFJ1biB0aGUgdGVzdCB3aXRob3V0IGNvbGxlY3RpbmcgdGhlIHJlc3VsdC4gIFRoaXMgYWxsb3dzIGV4Y2VwdGlvbnMgcmFpc2VkCkBAIC04MDYsOCArODg0LDggQEAKIAogCiAKLSAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hlY2sgdGhhdCBleGNlcHRpb25zIGFuZCB3YXJuaW5ncyBhcmUgcmFpc2VkIHVzaW5nCi0gICB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoZWNrIHRoZSBwcm9kdWN0aW9uIG9mIGV4Y2VwdGlvbnMsIHdhcm5pbmdzIGFuZAorICAgbG9nIG1lc3NhZ2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCiAgICB8IE1ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDaGVja3MgdGhhdCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOZXcgaW4gICAgIHwKQEAgLTgyNCw2ICs5MDIsOSBAQAogICAgfCA6bWV0aDpgYXNzZXJ0V2FybnNSZWdleCh3YXJuLCByLCBmdW4sICphcmdzLCAqKmt3ZHMpICAgIHwgYGBmdW4oKmFyZ3MsICoqa3dkcylgYCByYWlzZXMgKndhcm4qIHwgMy4yICAgICAgICB8CiAgICB8IDxUZXN0Q2FzZS5hc3NlcnRXYXJuc1JlZ2V4PmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbmQgdGhlIG1lc3NhZ2UgbWF0Y2hlcyByZWdleCAqciogICAgfCAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICAgfCA6bWV0aDpgYXNzZXJ0TG9ncyhsb2dnZXIsIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIGBgd2l0aGBgIGJsb2NrIGxvZ3Mgb24gKmxvZ2dlciogIHwgMy40ICAgICAgICB8CisgICB8IDxUZXN0Q2FzZS5hc3NlcnRMb2dzPmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aXRoIG1pbmltdW0gKmxldmVsKiAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogCiAgICAuLiBtZXRob2Q6OiBhc3NlcnRSYWlzZXMoZXhjZXB0aW9uLCBjYWxsYWJsZSwgKmFyZ3MsICoqa3dkcykKICAgICAgICAgICAgICAgIGFzc2VydFJhaXNlcyhleGNlcHRpb24sIG1zZz1Ob25lKQpAQCAtOTU0LDYgKzEwMzUsNDcgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgICBBZGRlZCB0aGUgKm1zZyoga2V5d29yZCBhcmd1bWVudCB3aGVuIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCiAKKyAgIC4uIG1ldGhvZDo6IGFzc2VydExvZ3MobG9nZ2VyPU5vbmUsIGxldmVsPU5vbmUpCisKKyAgICAgIEEgY29udGV4dCBtYW5hZ2VyIHRvIHRlc3QgdGhhdCBhdCBsZWFzdCBvbmUgbWVzc2FnZSBpcyBsb2dnZWQgb24KKyAgICAgIHRoZSAqbG9nZ2VyKiBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLCB3aXRoIGF0IGxlYXN0IHRoZSBnaXZlbgorICAgICAgKmxldmVsKi4KKworICAgICAgSWYgZ2l2ZW4sICpsb2dnZXIqIHNob3VsZCBiZSBhIDpjbGFzczpgbG9nZ2luZy5Mb2dnZXJgIG9iamVjdCBvciBhCisgICAgICA6Y2xhc3M6YHN0cmAgZ2l2aW5nIHRoZSBuYW1lIG9mIGEgbG9nZ2VyLiAgVGhlIGRlZmF1bHQgaXMgdGhlIHJvb3QKKyAgICAgIGxvZ2dlciwgd2hpY2ggd2lsbCBjYXRjaCBhbGwgbWVzc2FnZXMuCisKKyAgICAgIElmIGdpdmVuLCAqbGV2ZWwqIHNob3VsZCBiZSBlaXRoZXIgYSBudW1lcmljIGxvZ2dpbmcgbGV2ZWwgb3IKKyAgICAgIGl0cyBzdHJpbmcgZXF1aXZhbGVudCAoZm9yIGV4YW1wbGUgZWl0aGVyIGBgIkVSUk9SImBgIG9yCisgICAgICA6YXR0cjpgbG9nZ2luZy5FUlJPUmApLiAgVGhlIGRlZmF1bHQgaXMgOmF0dHI6YGxvZ2dpbmcuSU5GT2AuCisKKyAgICAgIFRoZSB0ZXN0IHBhc3NlcyBpZiBhdCBsZWFzdCBvbmUgbWVzc2FnZSBlbWl0dGVkIGluc2lkZSB0aGUgYGB3aXRoYGAKKyAgICAgIGJsb2NrIG1hdGNoZXMgdGhlICpsb2dnZXIqIGFuZCAqbGV2ZWwqIGNvbmRpdGlvbnMsIG90aGVyd2lzZSBpdCBmYWlscy4KKworICAgICAgVGhlIG9iamVjdCByZXR1cm5lZCBieSB0aGUgY29udGV4dCBtYW5hZ2VyIGlzIGEgcmVjb3JkaW5nIGhlbHBlcgorICAgICAgd2hpY2gga2VlcHMgdHJhY2tzIG9mIHRoZSBtYXRjaGluZyBsb2cgbWVzc2FnZXMuICBJdCBoYXMgdHdvCisgICAgICBhdHRyaWJ1dGVzOgorCisgICAgICAuLiBhdHRyaWJ1dGU6OiByZWNvcmRzCisKKyAgICAgICAgIEEgbGlzdCBvZiA6Y2xhc3M6YGxvZ2dpbmcuTG9nUmVjb3JkYCBvYmplY3RzIG9mIHRoZSBtYXRjaGluZworICAgICAgICAgbG9nIG1lc3NhZ2VzLgorCisgICAgICAuLiBhdHRyaWJ1dGU6OiBvdXRwdXQKKworICAgICAgICAgQSBsaXN0IG9mIDpjbGFzczpgc3RyYCBvYmplY3RzIHdpdGggdGhlIGZvcm1hdHRlZCBvdXRwdXQgb2YKKyAgICAgICAgIG1hdGNoaW5nIG1lc3NhZ2VzLgorCisgICAgICBFeGFtcGxlOjoKKworICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoJ2ZvbycsIGxldmVsPSdJTkZPJykgYXMgY206CisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vJykuaW5mbygnZmlyc3QgbWVzc2FnZScpCisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vLmJhcicpLmVycm9yKCdzZWNvbmQgbWVzc2FnZScpCisgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWydJTkZPOmZvbzpmaXJzdCBtZXNzYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VSUk9SOmZvby5iYXI6c2Vjb25kIG1lc3NhZ2UnXSkKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogICAgVGhlcmUgYXJlIGFsc28gb3RoZXIgbWV0aG9kcyB1c2VkIHRvIHBlcmZvcm0gbW9yZSBzcGVjaWZpYyBjaGVja3MsIHN1Y2ggYXM6CiAKQEAgLTEzOTMsMTUgKzE1MTUsMjQgQEAKIAogICAgICAgVGVzdHMgZ3JvdXBlZCBieSBhIDpjbGFzczpgVGVzdFN1aXRlYCBhcmUgYWx3YXlzIGFjY2Vzc2VkIGJ5IGl0ZXJhdGlvbi4KICAgICAgIFN1YmNsYXNzZXMgY2FuIGxhemlseSBwcm92aWRlIHRlc3RzIGJ5IG92ZXJyaWRpbmcgOm1ldGg6YF9faXRlcl9fYC4gTm90ZQotICAgICAgdGhhdCB0aGlzIG1ldGhvZCBtYXliZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBvbiBhIHNpbmdsZSBzdWl0ZQotICAgICAgKGZvciBleGFtcGxlIHdoZW4gY291bnRpbmcgdGVzdHMgb3IgY29tcGFyaW5nIGZvciBlcXVhbGl0eSkKLSAgICAgIHNvIHRoZSB0ZXN0cyByZXR1cm5lZCBtdXN0IGJlIHRoZSBzYW1lIGZvciByZXBlYXRlZCBpdGVyYXRpb25zLgorICAgICAgdGhhdCB0aGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgb24gYSBzaW5nbGUgc3VpdGUgKGZvcgorICAgICAgZXhhbXBsZSB3aGVuIGNvdW50aW5nIHRlc3RzIG9yIGNvbXBhcmluZyBmb3IgZXF1YWxpdHkpIHNvIHRoZSB0ZXN0cworICAgICAgcmV0dXJuZWQgYnkgcmVwZWF0ZWQgaXRlcmF0aW9ucyBiZWZvcmUgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gIG11c3QgYmUgdGhlCisgICAgICBzYW1lIGZvciBlYWNoIGNhbGwgaXRlcmF0aW9uLiBBZnRlciA6bWV0aDpgVGVzdFN1aXRlLnJ1bmAsIGNhbGxlcnMgc2hvdWxkCisgICAgICBub3QgcmVseSBvbiB0aGUgdGVzdHMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgdW5sZXNzIHRoZSBjYWxsZXIgdXNlcyBhCisgICAgICBzdWJjbGFzcyB0aGF0IG92ZXJyaWRlcyA6bWV0aDpgVGVzdFN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleGAgdG8gcHJlc2VydmUKKyAgICAgIHRlc3QgcmVmZXJlbmNlcy4KIAogICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICAgIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhlIDpjbGFzczpgVGVzdFN1aXRlYCBhY2Nlc3NlZCB0ZXN0cyBkaXJlY3RseSByYXRoZXIKICAgICAgICAgIHRoYW4gdGhyb3VnaCBpdGVyYXRpb24sIHNvIG92ZXJyaWRpbmcgOm1ldGg6YF9faXRlcl9fYCB3YXNuJ3Qgc3VmZmljaWVudAogICAgICAgICAgZm9yIHByb3ZpZGluZyB0ZXN0cy4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhlIDpjbGFzczpgVGVzdFN1aXRlYCBoZWxkIHJlZmVyZW5jZXMgdG8gZWFjaAorICAgICAgICAgOmNsYXNzOmBUZXN0Q2FzZWAgYWZ0ZXIgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gLiBTdWJjbGFzc2VzIGNhbiByZXN0b3JlCisgICAgICAgICB0aGF0IGJlaGF2aW9yIGJ5IG92ZXJyaWRpbmcgOm1ldGg6YFRlc3RTdWl0ZS5fcmVtb3ZlVGVzdEF0SW5kZXhgLgorCiAgICBJbiB0aGUgdHlwaWNhbCB1c2FnZSBvZiBhIDpjbGFzczpgVGVzdFN1aXRlYCBvYmplY3QsIHRoZSA6bWV0aDpgcnVuYCBtZXRob2QKICAgIGlzIGludm9rZWQgYnkgYSA6Y2xhc3M6YFRlc3RSdW5uZXJgIHJhdGhlciB0aGFuIGJ5IHRoZSBlbmQtdXNlciB0ZXN0IGhhcm5lc3MuCiAKQEAgLTE1MDAsNyArMTYzMSw5IEBACiAgICAgICBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseS4KIAogICAgICAgSWYgaW1wb3J0aW5nIGEgbW9kdWxlIGZhaWxzLCBmb3IgZXhhbXBsZSBkdWUgdG8gYSBzeW50YXggZXJyb3IsIHRoZW4gdGhpcwotICAgICAgd2lsbCBiZSByZWNvcmRlZCBhcyBhIHNpbmdsZSBlcnJvciBhbmQgZGlzY292ZXJ5IHdpbGwgY29udGludWUuCisgICAgICB3aWxsIGJlIHJlY29yZGVkIGFzIGEgc2luZ2xlIGVycm9yIGFuZCBkaXNjb3Zlcnkgd2lsbCBjb250aW51ZS4gIElmIHRoZQorICAgICAgaW1wb3J0IGZhaWx1cmUgaXMgZHVlIHRvIDpleGM6YFNraXBUZXN0YCBiZWluZyByYWlzZWQsIGl0IHdpbGwgYmUgcmVjb3JkZWQKKyAgICAgIGFzIGEgc2tpcCBpbnN0ZWFkIG9mIGFuIGVycm9yLgogCiAgICAgICBJZiBhIHRlc3QgcGFja2FnZSBuYW1lIChkaXJlY3Rvcnkgd2l0aCA6ZmlsZTpgX19pbml0X18ucHlgKSBtYXRjaGVzIHRoZQogICAgICAgcGF0dGVybiB0aGVuIHRoZSBwYWNrYWdlIHdpbGwgYmUgY2hlY2tlZCBmb3IgYSBgYGxvYWRfdGVzdHNgYApAQCAtMTUxOSw2ICsxNjUyLDE1IEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgTW9kdWxlcyB0aGF0IHJhaXNlIDpleGM6YFNraXBUZXN0YCBvbiBpbXBvcnQgYXJlIHJlY29yZGVkIGFzIHNraXBzLAorICAgICAgICAgbm90IGVycm9ycy4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFBhdGhzIGFyZSBzb3J0ZWQgYmVmb3JlIGJlaW5nIGltcG9ydGVkIHRvIGVuc3VyZSBleGVjdXRpb24gb3JkZXIgZm9yIGEKKyAgICAgICAgIGdpdmVuIHRlc3Qgc3VpdGUgaXMgdGhlIHNhbWUgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSdzIG9yZGVyaW5nCisgICAgICAgICBpcyBub3QgZGVwZW5kZW50IG9uIGZpbGUgbmFtZSBsaWtlIGluIGV4dDMvNC4KKwogCiAgICBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgb2YgYSA6Y2xhc3M6YFRlc3RMb2FkZXJgIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciBieQogICAgc3ViY2xhc3Npbmcgb3IgYXNzaWdubWVudCBvbiBhbiBpbnN0YW5jZToKQEAgLTE2MzAsNiArMTc3MiwxMCBAQAogICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIGFsbCB0ZXN0cyBydW4gc28gZmFyIGhhdmUgcGFzc2VkLCBvdGhlcndpc2UgcmV0dXJucwogICAgICAgYGBGYWxzZWBgLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgUmV0dXJucyBgYEZhbHNlYGAgaWYgdGhlcmUgd2VyZSBhbnkgOmF0dHI6YHVuZXhwZWN0ZWRTdWNjZXNzZXNgCisgICAgICAgICBmcm9tIHRlc3RzIG1hcmtlZCB3aXRoIHRoZSA6ZnVuYzpgZXhwZWN0ZWRGYWlsdXJlYCBkZWNvcmF0b3IuCisKIAogICAgLi4gbWV0aG9kOjogc3RvcCgpCiAKQEAgLTE3MjgsNiArMTg3NCwyMiBAQAogICAgICAgOmF0dHI6YHVuZXhwZWN0ZWRTdWNjZXNzZXNgIGF0dHJpYnV0ZS4KIAogCisgICAuLiBtZXRob2Q6OiBhZGRTdWJUZXN0KHRlc3QsIHN1YnRlc3QsIG91dGNvbWUpCisKKyAgICAgIENhbGxlZCB3aGVuIGEgc3VidGVzdCBmaW5pc2hlcy4gICp0ZXN0KiBpcyB0aGUgdGVzdCBjYXNlCisgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSB0ZXN0IG1ldGhvZC4gICpzdWJ0ZXN0KiBpcyBhIGN1c3RvbQorICAgICAgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgc3VidGVzdC4KKworICAgICAgSWYgKm91dGNvbWUqIGlzIDpjb25zdDpgTm9uZWAsIHRoZSBzdWJ0ZXN0IHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwKKyAgICAgIGl0IGZhaWxlZCB3aXRoIGFuIGV4Y2VwdGlvbiB3aGVyZSAqb3V0Y29tZSogaXMgYSB0dXBsZSBvZiB0aGUgZm9ybQorICAgICAgcmV0dXJuZWQgYnkgOmZ1bmM6YHN5cy5leGNfaW5mb2A6IGBgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spYGAuCisKKyAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZyB3aGVuIHRoZSBvdXRjb21lIGlzIGEKKyAgICAgIHN1Y2Nlc3MsIGFuZCByZWNvcmRzIHN1YnRlc3QgZmFpbHVyZXMgYXMgbm9ybWFsIGZhaWx1cmVzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjbGFzczo6IFRleHRUZXN0UmVzdWx0KHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkpCiAKICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOmNsYXNzOmBUZXN0UmVzdWx0YCB1c2VkIGJ5IHRoZQpAQCAtMTc4Myw2ICsxOTQ1LDE0IEBACiAKICAgICAgICAgc3RyZWFtLCBkZXNjcmlwdGlvbnMsIHZlcmJvc2l0eQogCisgICAuLiBtZXRob2Q6OiBydW4odGVzdCkKKworICAgICAgVGhpcyBtZXRob2QgaXMgdGhlIG1haW4gcHVibGljIGludGVyZmFjZSB0byB0aGUgYFRleHRUZXN0UnVubmVyYC4gVGhpcworICAgICAgbWV0aG9kIHRha2VzIGEgOmNsYXNzOmBUZXN0U3VpdGVgIG9yIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlLiBBCisgICAgICA6Y2xhc3M6YFRlc3RSZXN1bHRgIGlzIGNyZWF0ZWQgYnkgY2FsbGluZworICAgICAgOmZ1bmM6YF9tYWtlUmVzdWx0YCBhbmQgdGhlIHRlc3QocykgYXJlIHJ1biBhbmQgdGhlCisgICAgICByZXN1bHRzIHByaW50ZWQgdG8gc3Rkb3V0LgorCiAKIC4uIGZ1bmN0aW9uOjogbWFpbihtb2R1bGU9J19fbWFpbl9fJywgZGVmYXVsdFRlc3Q9Tm9uZSwgYXJndj1Ob25lLCB0ZXN0UnVubmVyPU5vbmUsIFwKICAgICAgICAgICAgICAgICAgICB0ZXN0TG9hZGVyPXVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLCBleGl0PVRydWUsIHZlcmJvc2l0eT0xLCBcCkBAIC0xODAyLDkgKzE5NzIsMTAgQEAKICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKIAotICAgVGhlICpkZWZhdWx0VGVzdCogYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIHRlc3QgdG8gcnVuIGlmIG5vIHRlc3QgbmFtZXMKLSAgIGFyZSBzcGVjaWZpZWQgdmlhICphcmd2Ki4gIElmIG5vdCBzcGVjaWZpZWQgb3IgYGBOb25lYGAgYW5kIG5vIHRlc3QgbmFtZXMgYXJlCi0gICBwcm92aWRlZCB2aWEgKmFyZ3YqLCBhbGwgdGVzdHMgZm91bmQgaW4gKm1vZHVsZSogYXJlIHJ1bi4KKyAgIFRoZSAqZGVmYXVsdFRlc3QqIGFyZ3VtZW50IGlzIGVpdGhlciB0aGUgbmFtZSBvZiBhIHNpbmdsZSB0ZXN0IG9yIGFuCisgICBpdGVyYWJsZSBvZiB0ZXN0IG5hbWVzIHRvIHJ1biBpZiBubyB0ZXN0IG5hbWVzIGFyZSBzcGVjaWZpZWQgdmlhICphcmd2Ki4gIElmCisgICBub3Qgc3BlY2lmaWVkIG9yIGBgTm9uZWBgIGFuZCBubyB0ZXN0IG5hbWVzIGFyZSBwcm92aWRlZCB2aWEgKmFyZ3YqLCBhbGwKKyAgIHRlc3RzIGZvdW5kIGluICptb2R1bGUqIGFyZSBydW4uCiAKICAgIFRoZSAqYXJndiogYXJndW1lbnQgY2FuIGJlIGEgbGlzdCBvZiBvcHRpb25zIHBhc3NlZCB0byB0aGUgcHJvZ3JhbSwgd2l0aCB0aGUKICAgIGZpcnN0IGVsZW1lbnQgYmVpbmcgdGhlIHByb2dyYW0gbmFtZS4gIElmIG5vdCBzcGVjaWZpZWQgb3IgYGBOb25lYGAsCkBAIC0xODQyLDYgKzIwMTMsMTAgQEAKICAgICAgIFRoZSAqdmVyYm9zaXR5KiwgKmZhaWxmYXN0KiwgKmNhdGNoYnJlYWsqLCAqYnVmZmVyKgogICAgICAgYW5kICp3YXJuaW5ncyogcGFyYW1ldGVycyB3ZXJlIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlICpkZWZhdWx0VGVzdCogcGFyYW1ldGVyIHdhcyBjaGFuZ2VkIHRvIGFsc28gYWNjZXB0IGFuIGl0ZXJhYmxlIG9mCisgICAgICB0ZXN0IG5hbWVzLgorCiAKIGxvYWRfdGVzdHMgUHJvdG9jb2wKICMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VybGxpYi5lcnJvci5yc3QgYi9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0CmluZGV4IDI1YzEzYmQuLjlmYjU4ZjUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VybGxpYi5lcnJvci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdApAQCAtNDYsNiArNDYsMTMgQEAKIAogICAgICAgVGhpcyBpcyB1c3VhbGx5IGEgc3RyaW5nIGV4cGxhaW5pbmcgdGhlIHJlYXNvbiBmb3IgdGhpcyBlcnJvci4KIAorICAgLi4gYXR0cmlidXRlOjogaGVhZGVycworCisgICAgICBUaGUgSFRUUCByZXNwb25zZSBoZWFkZXJzIGZvciB0aGUgSFRUUCByZXF1ZXN0IHRoYXQgY2F1c2UgdGhlCisgICAgICA6ZXhjOmBIVFRQRXJyb3JgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZXhjZXB0aW9uOjogQ29udGVudFRvb1Nob3J0RXJyb3IobXNnLCBjb250ZW50KQogCiAgICBUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiB0aGUgOmZ1bmM6YH51cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZWAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdAppbmRleCA2NDkzYTI5Li4yMDQ0OWQ5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0CkBAIC0yMjAsMTAgKzIyMCwxNSBAQAogICAgKm1ldGhvZCogc2hvdWxkIGJlIGEgc3RyaW5nIHRoYXQgaW5kaWNhdGVzIHRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIHRoYXQKICAgIHdpbGwgYmUgdXNlZCAoZS5nLiBgYCdIRUFEJ2BgKS4gIEl0cyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlCiAgICA6YXR0cjpgflJlcXVlc3QubWV0aG9kYCBhdHRyaWJ1dGUgYW5kIGlzIHVzZWQgYnkgOm1ldGg6YGdldF9tZXRob2QoKWAuCisgICBTdWJjbGFzc2VzIG1heSBpbmRpY2F0ZSBhIGRlZmF1bHQgbWV0aG9kIGJ5IHNldHRpbmcgdGhlCisgICA6YXR0cjpgflJlcXVlc3QubWV0aG9kYCBhdHRyaWJ1dGUgaW4gdGhlIGNsYXNzIGl0c2VsZi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIDphdHRyOmBSZXF1ZXN0Lm1ldGhvZGAgYXJndW1lbnQgaXMgYWRkZWQgdG8gdGhlIFJlcXVlc3QgY2xhc3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBEZWZhdWx0IDphdHRyOmBSZXF1ZXN0Lm1ldGhvZGAgbWF5IGJlIGluZGljYXRlZCBhdCB0aGUgY2xhc3MgbGV2ZWwuCisKIAogLi4gY2xhc3M6OiBPcGVuZXJEaXJlY3RvcigpCiAKQEAgLTM1Niw2ICszNjEsMTEgQEAKIAogICAgT3BlbiBsb2NhbCBmaWxlcy4KIAorLi4gY2xhc3M6OiBEYXRhSGFuZGxlcigpCisKKyAgIE9wZW4gZGF0YSBVUkxzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gY2xhc3M6OiBGVFBIYW5kbGVyKCkKIApAQCAtMzkxLDYgKzQwMSwxMiBAQAogCiAgICBUaGUgb3JpZ2luYWwgVVJMIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisKKyAgIFJlcXVlc3QuZnVsbF91cmwgaXMgYSBwcm9wZXJ0eSB3aXRoIHNldHRlciwgZ2V0dGVyIGFuZCBhIGRlbGV0ZXIuIEdldHRpbmcKKyAgIDphdHRyOmB+UmVxdWVzdC5mdWxsX3VybGAgcmV0dXJucyB0aGUgb3JpZ2luYWwgcmVxdWVzdCBVUkwgd2l0aCB0aGUKKyAgIGZyYWdtZW50LCBpZiBpdCB3YXMgcHJlc2VudC4KKwogLi4gYXR0cmlidXRlOjogUmVxdWVzdC50eXBlCiAKICAgIFRoZSBVUkkgc2NoZW1lLgpAQCAtNDEzLDYgKzQyOSwxMCBAQAogCiAgICBUaGUgZW50aXR5IGJvZHkgZm9yIHRoZSByZXF1ZXN0LCBvciBOb25lIGlmIG5vdCBzcGVjaWZpZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBDaGFuZ2luZyB2YWx1ZSBvZiA6YXR0cjpgUmVxdWVzdC5kYXRhYCBub3cgZGVsZXRlcyAiQ29udGVudC1MZW5ndGgiCisgICAgICBoZWFkZXIgaWYgaXQgd2FzIHByZXZpb3VzbHkgc2V0IG9yIGNhbGN1bGF0ZWQuCisKIC4uIGF0dHJpYnV0ZTo6IFJlcXVlc3QudW52ZXJpZmlhYmxlCiAKICAgIGJvb2xlYW4sIGluZGljYXRlcyB3aGV0aGVyIHRoZSByZXF1ZXN0IGlzIHVudmVyaWZpYWJsZSBhcyBkZWZpbmVkCkBAIC00NjEsMTAgKzQ4MSwyMiBAQAogICAgdW5yZWRpcmVjdGVkKS4KIAogCisuLiBtZXRob2Q6OiBSZXF1ZXN0LnJlbW92ZV9oZWFkZXIoaGVhZGVyKQorCisgICBSZW1vdmUgbmFtZWQgaGVhZGVyIGZyb20gdGhlIHJlcXVlc3QgaW5zdGFuY2UgKGJvdGggZnJvbSByZWd1bGFyIGFuZAorICAgdW5yZWRpcmVjdGVkIGhlYWRlcnMpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9mdWxsX3VybCgpCiAKICAgIFJldHVybiB0aGUgVVJMIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKworICAgUmV0dXJucyA6YXR0cjpgUmVxdWVzdC5mdWxsX3VybGAKKwogCiAuLiBtZXRob2Q6OiBSZXF1ZXN0LnNldF9wcm94eShob3N0LCB0eXBlKQogCkBAIC00NzMsNTQgKzUwNSw2IEBACiAgICBVUkwgZ2l2ZW4gaW4gdGhlIGNvbnN0cnVjdG9yLgogCiAKLS4uIG1ldGhvZDo6IFJlcXVlc3QuYWRkX2RhdGEoZGF0YSkKLQotICAgU2V0IHRoZSA6Y2xhc3M6YFJlcXVlc3RgIGRhdGEgdG8gKmRhdGEqLiAgVGhpcyBpcyBpZ25vcmVkIGJ5IGFsbCBoYW5kbGVycyBleGNlcHQKLSAgIEhUVFAgaGFuZGxlcnMgLS0tIGFuZCB0aGVyZSBpdCBzaG91bGQgYmUgYSBieXRlIHN0cmluZywgYW5kIHdpbGwgY2hhbmdlIHRoZQotICAgcmVxdWVzdCB0byBiZSBgYFBPU1RgYCByYXRoZXIgdGhhbiBgYEdFVGBgLiAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZQotICAgOmF0dHI6YFJlcXVlc3QuZGF0YWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0Lmhhc19kYXRhKCkKLQotICAgUmV0dXJuIHdoZXRoZXIgdGhlIGluc3RhbmNlIGhhcyBhIG5vbi1cIGBgTm9uZWBgIGRhdGEuIERlcHJlY2F0ZWQgaW4gMy4zLAotICAgdXNlIDphdHRyOmBSZXF1ZXN0LmRhdGFgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfZGF0YSgpCi0KLSAgIFJldHVybiB0aGUgaW5zdGFuY2UncyBkYXRhLiAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZSA6YXR0cjpgUmVxdWVzdC5kYXRhYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X3R5cGUoKQotCi0gICBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIFVSTCAtLS0gYWxzbyBrbm93biBhcyB0aGUgc2NoZW1lLiAgRGVwcmVjYXRlZCBpbiAzLjMsCi0gICB1c2UgOmF0dHI6YFJlcXVlc3QudHlwZWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9ob3N0KCkKLQotICAgUmV0dXJuIHRoZSBob3N0IHRvIHdoaWNoIGEgY29ubmVjdGlvbiB3aWxsIGJlIG1hZGUuIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UKLSAgIDphdHRyOmBSZXF1ZXN0Lmhvc3RgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfc2VsZWN0b3IoKQotCi0gICBSZXR1cm4gdGhlIHNlbGVjdG9yIC0tLSB0aGUgcGFydCBvZiB0aGUgVVJMIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyLgotICAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZSA6YXR0cjpgUmVxdWVzdC5zZWxlY3RvcmAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQogLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfaGVhZGVyKGhlYWRlcl9uYW1lLCBkZWZhdWx0PU5vbmUpCiAKICAgIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGhlYWRlci4gSWYgdGhlIGhlYWRlciBpcyBub3QgcHJlc2VudCwgcmV0dXJuCkBAIC01MzEsMjYgKzUxNSwxMCBAQAogCiAgICBSZXR1cm4gYSBsaXN0IG9mIHR1cGxlcyAoaGVhZGVyX25hbWUsIGhlYWRlcl92YWx1ZSkgb2YgdGhlIFJlcXVlc3QgaGVhZGVycy4KIAotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LnNldF9wcm94eShob3N0LCB0eXBlKQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9vcmlnaW5fcmVxX2hvc3QoKQotCi0gICBSZXR1cm4gdGhlIHJlcXVlc3QtaG9zdCBvZiB0aGUgb3JpZ2luIHRyYW5zYWN0aW9uLCBhcyBkZWZpbmVkIGJ5Ci0gICA6cmZjOmAyOTY1YC4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDpjbGFzczpgUmVxdWVzdGAgY29uc3RydWN0b3IuCi0gICBEZXByZWNhdGVkIGluIDMuMywgdXNlIDphdHRyOmBSZXF1ZXN0Lm9yaWdpbl9yZXFfaG9zdGAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmlzX3VudmVyaWZpYWJsZSgpCi0KLSAgIFJldHVybiB3aGV0aGVyIHRoZSByZXF1ZXN0IGlzIHVudmVyaWZpYWJsZSwgYXMgZGVmaW5lZCBieSBSRkMgMjk2NS4gU2VlIHRoZQotICAgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDpjbGFzczpgUmVxdWVzdGAgY29uc3RydWN0b3IuICBEZXByZWNhdGVkIGluIDMuMywgdXNlCi0gICA6YXR0cjpgUmVxdWVzdC51bnZlcmlmaWFibGVgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgIFJlcXVlc3QgbWV0aG9kcyBhZGRfZGF0YSwgaGFzX2RhdGEsIGdldF9kYXRhLCBnZXRfdHlwZSwgZ2V0X2hvc3QsCisgIGdldF9zZWxlY3RvciwgZ2V0X29yaWdpbl9yZXFfaG9zdCBhbmQgaXNfdW52ZXJpZmlhYmxlIGRlcHJlY2F0ZWQgc2luY2UgMy4zCisgIGhhdmUgYmVlbiByZW1vdmVkLgogCiAuLiBfb3BlbmVyLWRpcmVjdG9yLW9iamVjdHM6CiAKQEAgLTk4Myw2ICs5NTEsMjEgQEAKICAgICAgIGhvc3RuYW1lIGlzIGdpdmVuLCBhbiA6ZXhjOmB+dXJsbGliLmVycm9yLlVSTEVycm9yYCBpcyByYWlzZWQuCiAKIAorLi4gX2RhdGEtaGFuZGxlci1vYmplY3RzOgorCitEYXRhSGFuZGxlciBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IERhdGFIYW5kbGVyLmRhdGFfb3BlbihyZXEpCisKKyAgIFJlYWQgYSBkYXRhIFVSTC4gVGhpcyBraW5kIG9mIFVSTCBjb250YWlucyB0aGUgY29udGVudCBlbmNvZGVkIGluIHRoZSBVUkwKKyAgIGl0c2VsZi4gVGhlIGRhdGEgVVJMIHN5bnRheCBpcyBzcGVjaWZpZWQgaW4gOnJmYzpgMjM5N2AuIFRoaXMgaW1wbGVtZW50YXRpb24KKyAgIGlnbm9yZXMgd2hpdGUgc3BhY2VzIGluIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMcyBzbyB0aGUgVVJMIG1heSBiZSB3cmFwcGVkCisgICBpbiB3aGF0ZXZlciBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLiBCdXQgZXZlbiB0aG91Z2ggc29tZSBicm93c2VycyBkb24ndAorICAgbWluZCBhYm91dCBhIG1pc3NpbmcgcGFkZGluZyBhdCB0aGUgZW5kIG9mIGEgYmFzZTY0IGVuY29kZWQgZGF0YSBVUkwsIHRoaXMKKyAgIGltcGxlbWVudGF0aW9uIHdpbGwgcmFpc2UgYW4gOmV4YzpgVmFsdWVFcnJvcmAgaW4gdGhhdCBjYXNlLgorCisKIC4uIF9mdHAtaGFuZGxlci1vYmplY3RzOgogCiBGVFBIYW5kbGVyIE9iamVjdHMKQEAgLTEzOTgsNyArMTM4MSw5IEBACiAgICAgIHBhaXI6IEZUUDsgcHJvdG9jb2wKIAogKiBDdXJyZW50bHksIG9ubHkgdGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZDogSFRUUCAodmVyc2lvbnMgMC45IGFuZAotICAxLjApLCBGVFAsIGFuZCBsb2NhbCBmaWxlcy4KKyAgMS4wKSwgRlRQLCBsb2NhbCBmaWxlcywgYW5kIGRhdGEgVVJMcy4KKworICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNCBBZGRlZCBzdXBwb3J0IGZvciBkYXRhIFVSTHMuCiAKICogVGhlIGNhY2hpbmcgZmVhdHVyZSBvZiA6ZnVuYzpgdXJscmV0cmlldmVgIGhhcyBiZWVuIGRpc2FibGVkIHVudGlsIHNvbWVvbmUKICAgZmluZHMgdGhlIHRpbWUgdG8gaGFjayBwcm9wZXIgcHJvY2Vzc2luZyBvZiBFeHBpcmF0aW9uIHRpbWUgaGVhZGVycy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3ZlbnYucnN0IGIvRG9jL2xpYnJhcnkvdmVudi5yc3QKaW5kZXggOTZjYTJmNS4uZDI5YTk1NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdmVudi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdmVudi5yc3QKQEAgLTg1LDcgKzg1LDggQEAKIG1lY2hhbmlzbXMgZm9yIHRoaXJkLXBhcnR5IHZpcnR1YWwgZW52aXJvbm1lbnQgY3JlYXRvcnMgdG8gY3VzdG9taXplIGVudmlyb25tZW50CiBjcmVhdGlvbiBhY2NvcmRpbmcgdG8gdGhlaXIgbmVlZHMsIHRoZSA6Y2xhc3M6YEVudkJ1aWxkZXJgIGNsYXNzLgogCi0uLiBjbGFzczo6IEVudkJ1aWxkZXIoc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLCBzeW1saW5rcz1GYWxzZSwgdXBncmFkZT1GYWxzZSkKKy4uIGNsYXNzOjogRW52QnVpbGRlcihzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICBzeW1saW5rcz1GYWxzZSwgdXBncmFkZT1GYWxzZSwgd2l0aF9waXA9RmFsc2UpCiAKICAgICBUaGUgOmNsYXNzOmBFbnZCdWlsZGVyYCBjbGFzcyBhY2NlcHRzIHRoZSBmb2xsb3dpbmcga2V5d29yZCBhcmd1bWVudHMgb24KICAgICBpbnN0YW50aWF0aW9uOgpAQCAtOTMsOCArOTQsOCBAQAogICAgICogYGBzeXN0ZW1fc2l0ZV9wYWNrYWdlc2BgIC0tIGEgQm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHN5c3RlbSBQeXRob24KICAgICAgIHNpdGUtcGFja2FnZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSB0byB0aGUgZW52aXJvbm1lbnQgKGRlZmF1bHRzIHRvIGBgRmFsc2VgYCkuCiAKLSAgICAqIGBgY2xlYXJgYCAtLSBhIEJvb2xlYW4gdmFsdWUgd2hpY2gsIGlmIHRydWUsIHdpbGwgZGVsZXRlIGFueSBleGlzdGluZyB0YXJnZXQKLSAgICAgIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXhjZXB0aW9uIChkZWZhdWx0cyB0byBgYEZhbHNlYGApLgorICAgICogYGBjbGVhcmBgIC0tIGEgQm9vbGVhbiB2YWx1ZSB3aGljaCwgaWYgdHJ1ZSwgd2lsbCBkZWxldGUgdGhlIGNvbnRlbnRzIG9mCisgICAgICBhbnkgZXhpc3RpbmcgdGFyZ2V0IGRpcmVjdG9yeSwgYmVmb3JlIGNyZWF0aW5nIHRoZSBlbnZpcm9ubWVudC4KIAogICAgICogYGBzeW1saW5rc2BgIC0tIGEgQm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXR0ZW1wdCB0byBzeW1saW5rIHRoZQogICAgICAgUHl0aG9uIGJpbmFyeSAoYW5kIGFueSBuZWNlc3NhcnkgRExMcyBvciBvdGhlciBiaW5hcmllcywKQEAgLTEwNSw2ICsxMDYsMTIgQEAKICAgICAgIGVudmlyb25tZW50IHdpdGggdGhlIHJ1bm5pbmcgUHl0aG9uIC0gZm9yIHVzZSB3aGVuIHRoYXQgUHl0aG9uIGhhcyBiZWVuCiAgICAgICB1cGdyYWRlZCBpbi1wbGFjZSAoZGVmYXVsdHMgdG8gYGBGYWxzZWBgKS4KIAorICAgICogYGB3aXRoX3BpcGBgIC0tIGEgQm9vbGVhbiB2YWx1ZSB3aGljaCwgaWYgdHJ1ZSwgZW5zdXJlcyBwaXAgaXMKKyAgICAgIGluc3RhbGxlZCBpbiB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4gVGhpcyB1c2VzIDptb2Q6YGVuc3VyZXBpcGAgd2l0aAorICAgICAgdGhlIGBgLS1kZWZhdWx0LXBpcGBgIG9wdGlvbi4KKworICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgQWRkZWQgdGhlIGBgd2l0aF9waXBgYCBwYXJhbWV0ZXIKIAogCiAgICAgQ3JlYXRvcnMgb2YgdGhpcmQtcGFydHkgdmlydHVhbCBlbnZpcm9ubWVudCB0b29scyB3aWxsIGJlIGZyZWUgdG8gdXNlIHRoZQpAQCAtMTg4LDYgKzE5NSw5IEBACiAgICAgICAgICogYGBfX1ZFTlZfTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQgbmFtZSAoZmluYWwgcGF0aAogICAgICAgICAgIHNlZ21lbnQgb2YgZW52aXJvbm1lbnQgZGlyZWN0b3J5KS4KIAorICAgICAgICAqIGBgX19WRU5WX1BST01QVF9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcHJvbXB0ICh0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICBuYW1lIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMgYW5kIHdpdGggYSBmb2xsb3dpbmcgc3BhY2UpCisKICAgICAgICAgKiBgYF9fVkVOVl9CSU5fTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgYmluIGRpcmVjdG9yeQogICAgICAgICAgIChlaXRoZXIgYGBiaW5gYCBvciBgYFNjcmlwdHNgYCkuCiAKQEAgLTE5OSwxMSArMjA5LDE1IEBACiAKIFRoZXJlIGlzIGFsc28gYSBtb2R1bGUtbGV2ZWwgY29udmVuaWVuY2UgZnVuY3Rpb246CiAKLS4uIGZ1bmN0aW9uOjogY3JlYXRlKGVudl9kaXIsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgc3ltbGlua3M9RmFsc2UpCisuLiBmdW5jdGlvbjo6IGNyZWF0ZShlbnZfZGlyLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB3aXRoX3BpcD1GYWxzZSkKIAogICAgIENyZWF0ZSBhbiA6Y2xhc3M6YEVudkJ1aWxkZXJgIHdpdGggdGhlIGdpdmVuIGtleXdvcmQgYXJndW1lbnRzLCBhbmQgY2FsbCBpdHMKICAgICA6bWV0aDpgfkVudkJ1aWxkZXIuY3JlYXRlYCBtZXRob2Qgd2l0aCB0aGUgKmVudl9kaXIqIGFyZ3VtZW50LgogCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBBZGRlZCB0aGUgYGB3aXRoX3BpcGBgIHBhcmFtZXRlcgorCiBBbiBleGFtcGxlIG9mIGV4dGVuZGluZyBgYEVudkJ1aWxkZXJgYAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2F2ZS5yc3QgYi9Eb2MvbGlicmFyeS93YXZlLnJzdAppbmRleCBhZmFmYjQ1Li5jMzJlMWZjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93YXZlLnJzdAorKysgYi9Eb2MvbGlicmFyeS93YXZlLnJzdApAQCAtMTksMjYgKzE5LDMyIEBACiAuLiBmdW5jdGlvbjo6IG9wZW4oZmlsZSwgbW9kZT1Ob25lKQogCiAgICBJZiAqZmlsZSogaXMgYSBzdHJpbmcsIG9wZW4gdGhlIGZpbGUgYnkgdGhhdCBuYW1lLCBvdGhlcndpc2UgdHJlYXQgaXQgYXMgYQotICAgc2Vla2FibGUgZmlsZS1saWtlIG9iamVjdC4gICptb2RlKiBjYW4gYmUgYW55IG9mCisgICBmaWxlLWxpa2Ugb2JqZWN0LiAgKm1vZGUqIGNhbiBiZToKIAotICAgYGAncidgYCwgYGAncmInYGAKKyAgIGBgJ3JiJ2BgCiAgICAgICBSZWFkIG9ubHkgbW9kZS4KIAotICAgYGAndydgYCwgYGAnd2InYGAKKyAgIGBgJ3diJ2BgCiAgICAgICBXcml0ZSBvbmx5IG1vZGUuCiAKICAgIE5vdGUgdGhhdCBpdCBkb2VzIG5vdCBhbGxvdyByZWFkL3dyaXRlIFdBViBmaWxlcy4KIAotICAgQSAqbW9kZSogb2YgYGAncidgYCBvciBgYCdyYidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3JlYWRgIG9iamVjdCwgd2hpbGUgYQotICAgKm1vZGUqIG9mIGBgJ3cnYGAgb3IgYGAnd2InYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV93cml0ZWAgb2JqZWN0LiAgSWYKLSAgICptb2RlKiBpcyBvbWl0dGVkIGFuZCBhIGZpbGUtbGlrZSBvYmplY3QgaXMgcGFzc2VkIGFzICpmaWxlKiwgYGBmaWxlLm1vZGVgYAotICAgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgKm1vZGUqICh0aGUgYGAnYidgYCBmbGFnIGlzIHN0aWxsIGFkZGVkIGlmCi0gICBuZWNlc3NhcnkpLgorICAgQSAqbW9kZSogb2YgYGAncmInYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV9yZWFkYCBvYmplY3QsIHdoaWxlIGEgKm1vZGUqIG9mCisgICBgYCd3YidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3dyaXRlYCBvYmplY3QuICBJZiAqbW9kZSogaXMgb21pdHRlZCBhbmQgYQorICAgZmlsZS1saWtlIG9iamVjdCBpcyBwYXNzZWQgYXMgKmZpbGUqLCBgYGZpbGUubW9kZWBgIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQKKyAgIHZhbHVlIGZvciAqbW9kZSouCiAKICAgIElmIHlvdSBwYXNzIGluIGEgZmlsZS1saWtlIG9iamVjdCwgdGhlIHdhdmUgb2JqZWN0IHdpbGwgbm90IGNsb3NlIGl0IHdoZW4gaXRzCiAgICA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQ7IGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbG9zZQogICAgdGhlIGZpbGUgb2JqZWN0LgogCisgICBUaGUgOmZ1bmM6YC5vcGVuYCBmdW5jdGlvbiBtYXkgYmUgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuICBXaGVuCisgICB0aGUgOmtleXdvcmQ6YHdpdGhgIGJsb2NrIGNvbXBsZXRlcywgdGhlIDptZXRoOmBXYXZlX3JlYWQuY2xvc2UoKQorICAgPHdhdmUuV2F2ZV9yZWFkLmNsb3NlPmAgb3IgOm1ldGg6YFdhdmVfd3JpdGUuY2xvc2UoKQorICAgPHdhdmUuV2F2ZV93cml0ZS5jbG9zZSgpPmAgbWV0aG9kIGlzIGNhbGxlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHVuc2Vla2FibGUgZmlsZXMuCiAKIC4uIGZ1bmN0aW9uOjogb3BlbmZwKGZpbGUsIG1vZGUpCiAKQEAgLTk4LDggKzEwNCw5IEBACiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5nZXRwYXJhbXMoKQogCi0gICBSZXR1cm5zIGEgdHVwbGUgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsCi0gICBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlIDptZXRoOmBnZXRcKmAgbWV0aG9kcy4KKyAgIFJldHVybnMgYSA6ZnVuYzpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLAorICAgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZQorICAgOm1ldGg6YGdldFwqYCBtZXRob2RzLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5yZWFkZnJhbWVzKG4pCkBAIC0xNDksNyArMTU2LDggQEAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuY2xvc2UoKQogCiAgICBNYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QsIGFuZCBjbG9zZSB0aGUgZmlsZSBpZiBpdCB3YXMgb3BlbmVkIGJ5Ci0gICA6bW9kOmB3YXZlYC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIG9iamVjdCBjb2xsZWN0aW9uLgorICAgOm1vZDpgd2F2ZWAuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBvYmplY3QgY29sbGVjdGlvbi4gQ2FuIHJhaXNlIGFuCisgICBleGNlcHRpb24gaWYgKm5mcmFtZXMqIGlzIG5vdCBjb3JyZWN0IGFuZCBhIGZpbGUgaXMgbm90IHNlZWthYmxlLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuc2V0bmNoYW5uZWxzKG4pCkBAIC0yMDAsMTAgKzIwOCwxNyBAQAogCiAgICBXcml0ZSBhdWRpbyBmcmFtZXMsIHdpdGhvdXQgY29ycmVjdGluZyAqbmZyYW1lcyouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUud3JpdGVmcmFtZXMoZGF0YSkKIAotICAgV3JpdGUgYXVkaW8gZnJhbWVzIGFuZCBtYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QuCisgICBXcml0ZSBhdWRpbyBmcmFtZXMgYW5kIG1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdC4gQ2FuIHJhaXNlIGFuCisgICBleGNlcHRpb24gaWYgYSBmaWxlIGlzIG5vdCBzZWVrYWJsZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQuCiAKIAogTm90ZSB0aGF0IGl0IGlzIGludmFsaWQgdG8gc2V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyIGNhbGxpbmcgOm1ldGg6YHdyaXRlZnJhbWVzYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAppbmRleCAyMjRmNDQyLi45Y2E2MGE5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAorKysgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdApAQCAtNTEsMTAgKzUxLDE2IEBACiBidXQga2VlcHMgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBlbGVtZW50cywganVzdCBsaWtlIGEKIDpjbGFzczpgV2Vha0tleURpY3Rpb25hcnlgIGRvZXMuCiAKLU1vc3QgcHJvZ3JhbXMgc2hvdWxkIGZpbmQgdGhhdCB1c2luZyBvbmUgb2YgdGhlc2Ugd2VhayBjb250YWluZXIgdHlwZXMgaXMgYWxsCi10aGV5IG5lZWQgLS0gaXQncyBub3QgdXN1YWxseSBuZWNlc3NhcnkgdG8gY3JlYXRlIHlvdXIgb3duIHdlYWsgcmVmZXJlbmNlcwotZGlyZWN0bHkuICBUaGUgbG93LWxldmVsIG1hY2hpbmVyeSB1c2VkIGJ5IHRoZSB3ZWFrIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb25zCi1pcyBleHBvc2VkIGJ5IHRoZSA6bW9kOmB3ZWFrcmVmYCBtb2R1bGUgZm9yIHRoZSBiZW5lZml0IG9mIGFkdmFuY2VkIHVzZXMuCis6Y2xhc3M6YGZpbmFsaXplYCBwcm92aWRlcyBhIHN0cmFpZ2h0IGZvcndhcmQgd2F5IHRvIHJlZ2lzdGVyIGEKK2NsZWFudXAgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLgorVGhpcyBpcyBzaW1wbGVyIHRvIHVzZSB0aGFuIHNldHRpbmcgdXAgYSBjYWxsYmFjayBmdW5jdGlvbiBvbiBhIHJhdword2VhayByZWZlcmVuY2UsIHNpbmNlIHRoZSBtb2R1bGUgYXV0b21hdGljYWxseSBlbnN1cmVzIHRoYXQgdGhlIGZpbmFsaXplcgorcmVtYWlucyBhbGl2ZSB1bnRpbCB0aGUgb2JqZWN0IGlzIGNvbGxlY3RlZC4KKworTW9zdCBwcm9ncmFtcyBzaG91bGQgZmluZCB0aGF0IHVzaW5nIG9uZSBvZiB0aGVzZSB3ZWFrIGNvbnRhaW5lciB0eXBlcworb3IgOmNsYXNzOmBmaW5hbGl6ZWAgaXMgYWxsIHRoZXkgbmVlZCAtLSBpdCdzIG5vdCB1c3VhbGx5IG5lY2Vzc2FyeSB0bworY3JlYXRlIHlvdXIgb3duIHdlYWsgcmVmZXJlbmNlcyBkaXJlY3RseS4gIFRoZSBsb3ctbGV2ZWwgbWFjaGluZXJ5IGlzCitleHBvc2VkIGJ5IHRoZSA6bW9kOmB3ZWFrcmVmYCBtb2R1bGUgZm9yIHRoZSBiZW5lZml0IG9mIGFkdmFuY2VkIHVzZXMuCiAKIE5vdCBhbGwgb2JqZWN0cyBjYW4gYmUgd2Vha2x5IHJlZmVyZW5jZWQ7IHRob3NlIG9iamVjdHMgd2hpY2ggY2FuIGluY2x1ZGUgY2xhc3MKIGluc3RhbmNlcywgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uIChidXQgbm90IGluIEMpLCBpbnN0YW5jZSBtZXRob2RzLCBzZXRzLApAQCAtMTExLDYgKzExNywxNSBAQAogCiAgICBUaGlzIGlzIGEgc3ViY2xhc3NhYmxlIHR5cGUgcmF0aGVyIHRoYW4gYSBmYWN0b3J5IGZ1bmN0aW9uLgogCisgICAuLiBhdHRyaWJ1dGU6OiBfX2NhbGxiYWNrX18KKworICAgICAgVGhpcyByZWFkLW9ubHkgYXR0cmlidXRlIHJldHVybnMgdGhlIGNhbGxiYWNrIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRvIHRoZQorICAgICAgd2Vha3JlZi4gIElmIHRoZXJlIGlzIG5vIGNhbGxiYWNrIG9yIGlmIHRoZSByZWZlcmVudCBvZiB0aGUgd2Vha3JlZiBpcworICAgICAgbm8gbG9uZ2VyIGFsaXZlIHRoZW4gdGhpcyBhdHRyaWJ1dGUgd2lsbCBoYXZlIHZhbHVlIGBgTm9uZWBgLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlIDphdHRyOmBfX2NhbGxiYWNrX19gIGF0dHJpYnV0ZS4KKwogCiAuLiBmdW5jdGlvbjo6IHByb3h5KG9iamVjdFssIGNhbGxiYWNrXSkKIApAQCAtMTkyLDYgKzIwNyw5OCBAQAogICAgZGlzY2FyZGVkIHdoZW4gbm8gc3Ryb25nIHJlZmVyZW5jZSB0byBpdCBleGlzdHMgYW55IG1vcmUuCiAKIAorLi4gY2xhc3M6OiBXZWFrTWV0aG9kKG1ldGhvZCkKKworICAgQSBjdXN0b20gOmNsYXNzOmByZWZgIHN1YmNsYXNzIHdoaWNoIHNpbXVsYXRlcyBhIHdlYWsgcmVmZXJlbmNlIHRvIGEgYm91bmQKKyAgIG1ldGhvZCAoaS5lLiwgYSBtZXRob2QgZGVmaW5lZCBvbiBhIGNsYXNzIGFuZCBsb29rZWQgdXAgb24gYW4gaW5zdGFuY2UpLgorICAgU2luY2UgYSBib3VuZCBtZXRob2QgaXMgZXBoZW1lcmFsLCBhIHN0YW5kYXJkIHdlYWsgcmVmZXJlbmNlIGNhbm5vdCBrZWVwCisgICBob2xkIG9mIGl0LiAgOmNsYXNzOmBXZWFrTWV0aG9kYCBoYXMgc3BlY2lhbCBjb2RlIHRvIHJlY3JlYXRlIHRoZSBib3VuZAorICAgbWV0aG9kIHVudGlsIGVpdGhlciB0aGUgb2JqZWN0IG9yIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBkaWVzOjoKKworICAgICAgPj4+IGNsYXNzIEM6CisgICAgICAuLi4gICAgIGRlZiBtZXRob2Qoc2VsZik6CisgICAgICAuLi4gICAgICAgICBwcmludCgibWV0aG9kIGNhbGxlZCEiKQorICAgICAgLi4uCisgICAgICA+Pj4gYyA9IEMoKQorICAgICAgPj4+IHIgPSB3ZWFrcmVmLnJlZihjLm1ldGhvZCkKKyAgICAgID4+PiByKCkKKyAgICAgID4+PiByID0gd2Vha3JlZi5XZWFrTWV0aG9kKGMubWV0aG9kKQorICAgICAgPj4+IHIoKQorICAgICAgPGJvdW5kIG1ldGhvZCBDLm1ldGhvZCBvZiA8X19tYWluX18uQyBvYmplY3QgYXQgMHg3ZmM4NTk4MzAyMjA+PgorICAgICAgPj4+IHIoKSgpCisgICAgICBtZXRob2QgY2FsbGVkIQorICAgICAgPj4+IGRlbCBjCisgICAgICA+Pj4gZ2MuY29sbGVjdCgpCisgICAgICAwCisgICAgICA+Pj4gcigpCisgICAgICA+Pj4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGNsYXNzOjogZmluYWxpemUob2JqLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpCisKKyAgIFJldHVybiBhIGNhbGxhYmxlIGZpbmFsaXplciBvYmplY3Qgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiAqb2JqKgorICAgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuIFVubGlrZSBhbiBvcmRpbmFyeSB3ZWFrIHJlZmVyZW5jZSwgYSBmaW5hbGl6ZXIKKyAgIHdpbGwgYWx3YXlzIHN1cnZpdmUgdW50aWwgdGhlIHJlZmVyZW5jZSBvYmplY3QgaXMgY29sbGVjdGVkLCBncmVhdGx5CisgICBzaW1wbGlmeWluZyBsaWZlY3ljbGUgbWFuYWdlbWVudC4KKworICAgQSBmaW5hbGl6ZXIgaXMgY29uc2lkZXJlZCAqYWxpdmUqIHVudGlsIGl0IGlzIGNhbGxlZCAoZWl0aGVyIGV4cGxpY2l0bHkKKyAgIG9yIGF0IGdhcmJhZ2UgY29sbGVjdGlvbiksIGFuZCBhZnRlciB0aGF0IGl0IGlzICpkZWFkKi4gIENhbGxpbmcgYSBsaXZlCisgICBmaW5hbGl6ZXIgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgYGBmdW5jKCphcmcsICoqa3dhcmdzKWBgLAorICAgd2hlcmVhcyBjYWxsaW5nIGEgZGVhZCBmaW5hbGl6ZXIgcmV0dXJucyA6Y29uc3Q6YE5vbmVgLgorCisgICBFeGNlcHRpb25zIHJhaXNlZCBieSBmaW5hbGl6ZXIgY2FsbGJhY2tzIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgIHdpbGwgYmUgc2hvd24gb24gdGhlIHN0YW5kYXJkIGVycm9yIG91dHB1dCwgYnV0IGNhbm5vdCBiZQorICAgcHJvcGFnYXRlZC4gIFRoZXkgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGV4Y2VwdGlvbnMgcmFpc2VkCisgICBmcm9tIGFuIG9iamVjdCdzIDptZXRoOmBfX2RlbF9fYCBtZXRob2Qgb3IgYSB3ZWFrIHJlZmVyZW5jZSdzCisgICBjYWxsYmFjay4KKworICAgV2hlbiB0aGUgcHJvZ3JhbSBleGl0cywgZWFjaCByZW1haW5pbmcgbGl2ZSBmaW5hbGl6ZXIgaXMgY2FsbGVkCisgICB1bmxlc3MgaXRzIDphdHRyOmBhdGV4aXRgIGF0dHJpYnV0ZSBoYXMgYmVlbiBzZXQgdG8gZmFsc2UuICBUaGV5CisgICBhcmUgY2FsbGVkIGluIHJldmVyc2Ugb3JkZXIgb2YgY3JlYXRpb24uCisKKyAgIEEgZmluYWxpemVyIHdpbGwgbmV2ZXIgaW52b2tlIGl0cyBjYWxsYmFjayBkdXJpbmcgdGhlIGxhdGVyIHBhcnQgb2YKKyAgIHRoZSBpbnRlcnByZXRlciBzaHV0ZG93biB3aGVuIG1vZHVsZSBnbG9iYWxzIGFyZSBsaWFibGUgdG8gaGF2ZQorICAgYmVlbiByZXBsYWNlZCBieSA6Y29uc3Q6YE5vbmVgLgorCisgICAuLiBtZXRob2Q6OiBfX2NhbGxfXygpCisKKyAgICAgIElmICpzZWxmKiBpcyBhbGl2ZSB0aGVuIG1hcmsgaXQgYXMgZGVhZCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgIGNhbGxpbmcgYGBmdW5jKCphcmdzLCAqKmt3YXJncylgYC4gIElmICpzZWxmKiBpcyBkZWFkIHRoZW4gcmV0dXJuCisgICAgICA6Y29uc3Q6YE5vbmVgLgorCisgICAuLiBtZXRob2Q6OiBkZXRhY2goKQorCisgICAgICBJZiAqc2VsZiogaXMgYWxpdmUgdGhlbiBtYXJrIGl0IGFzIGRlYWQgYW5kIHJldHVybiB0aGUgdHVwbGUKKyAgICAgIGBgKG9iaiwgZnVuYywgYXJncywga3dhcmdzKWBgLiAgSWYgKnNlbGYqIGlzIGRlYWQgdGhlbiByZXR1cm4KKyAgICAgIDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIG1ldGhvZDo6IHBlZWsoKQorCisgICAgICBJZiAqc2VsZiogaXMgYWxpdmUgdGhlbiByZXR1cm4gdGhlIHR1cGxlIGBgKG9iaiwgZnVuYywgYXJncywKKyAgICAgIGt3YXJncylgYC4gIElmICpzZWxmKiBpcyBkZWFkIHRoZW4gcmV0dXJuIDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGFsaXZlCisKKyAgICAgIFByb3BlcnR5IHdoaWNoIGlzIHRydWUgaWYgdGhlIGZpbmFsaXplciBpcyBhbGl2ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorCisgICAuLiBhdHRyaWJ1dGU6OiBhdGV4aXQKKworICAgICAgQSB3cml0YWJsZSBib29sZWFuIHByb3BlcnR5IHdoaWNoIGJ5IGRlZmF1bHQgaXMgdHJ1ZS4gIFdoZW4gdGhlCisgICAgICBwcm9ncmFtIGV4aXRzLCBpdCBjYWxscyBhbGwgcmVtYWluaW5nIGxpdmUgZmluYWxpemVycyBmb3Igd2hpY2gKKyAgICAgIDphdHRyOmAuYXRleGl0YCBpcyB0cnVlLiAgVGhleSBhcmUgY2FsbGVkIGluIHJldmVyc2Ugb3JkZXIgb2YKKyAgICAgIGNyZWF0aW9uLgorCisgICAuLiBub3RlOjoKKworICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0ICpmdW5jKiwgKmFyZ3MqIGFuZCAqa3dhcmdzKiBkbworICAgICAgbm90IG93biBhbnkgcmVmZXJlbmNlcyB0byAqb2JqKiwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCisgICAgICBzaW5jZSBvdGhlcndpc2UgKm9iaiogd2lsbCBuZXZlciBiZSBnYXJiYWdlIGNvbGxlY3RlZC4gIEluCisgICAgICBwYXJ0aWN1bGFyLCAqZnVuYyogc2hvdWxkIG5vdCBiZSBhIGJvdW5kIG1ldGhvZCBvZiAqb2JqKi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZGF0YTo6IFJlZmVyZW5jZVR5cGUKIAogICAgVGhlIHR5cGUgb2JqZWN0IGZvciB3ZWFrIHJlZmVyZW5jZXMgb2JqZWN0cy4KQEAgLTIzMiw4ICszMzksOSBAQAogV2VhayBSZWZlcmVuY2UgT2JqZWN0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XZWFrIHJlZmVyZW5jZSBvYmplY3RzIGhhdmUgbm8gYXR0cmlidXRlcyBvciBtZXRob2RzLCBidXQgZG8gYWxsb3cgdGhlIHJlZmVyZW50Ci10byBiZSBvYnRhaW5lZCwgaWYgaXQgc3RpbGwgZXhpc3RzLCBieSBjYWxsaW5nIGl0OgorV2VhayByZWZlcmVuY2Ugb2JqZWN0cyBoYXZlIG5vIG1ldGhvZHMgYW5kIG5vIGF0dHJpYnV0ZXMgYmVzaWRlcworOmF0dHI6YHJlZi5fX2NhbGxiYWNrX19gLiBBIHdlYWsgcmVmZXJlbmNlIG9iamVjdCBhbGxvd3MgdGhlIHJlZmVyZW50IHRvIGJlCitvYnRhaW5lZCwgaWYgaXQgc3RpbGwgZXhpc3RzLCBieSBjYWxsaW5nIGl0OgogCiAgICA+Pj4gaW1wb3J0IHdlYWtyZWYKICAgID4+PiBjbGFzcyBPYmplY3Q6CkBAIC0zMjYsMyArNDM0LDE0MCBAQAogICAgZGVmIGlkMm9iaihvaWQpOgogICAgICAgIHJldHVybiBfaWQyb2JqX2RpY3Rbb2lkXQogCisKKy4uIF9maW5hbGl6ZS1leGFtcGxlczoKKworRmluYWxpemVyIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtYWluIGJlbmVmaXQgb2YgdXNpbmcgOmNsYXNzOmBmaW5hbGl6ZWAgaXMgdGhhdCBpdCBtYWtlcyBpdCBzaW1wbGUKK3RvIHJlZ2lzdGVyIGEgY2FsbGJhY2sgd2l0aG91dCBuZWVkaW5nIHRvIHByZXNlcnZlIHRoZSByZXR1cm5lZCBmaW5hbGl6ZXIKK29iamVjdC4gIEZvciBpbnN0YW5jZQorCisgICAgPj4+IGltcG9ydCB3ZWFrcmVmCisgICAgPj4+IGNsYXNzIE9iamVjdDoKKyAgICAuLi4gICAgIHBhc3MKKyAgICAuLi4KKyAgICA+Pj4ga2VubnkgPSBPYmplY3QoKQorICAgID4+PiB3ZWFrcmVmLmZpbmFsaXplKGtlbm55LCBwcmludCwgIllvdSBraWxsZWQgS2VubnkhIikgICNkb2N0ZXN0OitFTExJUFNJUworICAgIDxmaW5hbGl6ZSBvYmplY3QgYXQgLi4uOyBmb3IgJ09iamVjdCcgYXQgLi4uPgorICAgID4+PiBkZWwga2VubnkKKyAgICBZb3Uga2lsbGVkIEtlbm55IQorCitUaGUgZmluYWxpemVyIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgYXMgd2VsbC4gIEhvd2V2ZXIgdGhlIGZpbmFsaXplcgord2lsbCBpbnZva2UgdGhlIGNhbGxiYWNrIGF0IG1vc3Qgb25jZS4KKworICAgID4+PiBkZWYgY2FsbGJhY2soeCwgeSwgeik6CisgICAgLi4uICAgICBwcmludCgiQ0FMTEJBQ0siKQorICAgIC4uLiAgICAgcmV0dXJuIHggKyB5ICsgegorICAgIC4uLgorICAgID4+PiBvYmogPSBPYmplY3QoKQorICAgID4+PiBmID0gd2Vha3JlZi5maW5hbGl6ZShvYmosIGNhbGxiYWNrLCAxLCAyLCB6PTMpCisgICAgPj4+IGFzc2VydCBmLmFsaXZlCisgICAgPj4+IGFzc2VydCBmKCkgPT0gNgorICAgIENBTExCQUNLCisgICAgPj4+IGFzc2VydCBub3QgZi5hbGl2ZQorICAgID4+PiBmKCkgICAgICAgICAgICAgICAgICAgICAjIGNhbGxiYWNrIG5vdCBjYWxsZWQgYmVjYXVzZSBmaW5hbGl6ZXIgZGVhZAorICAgID4+PiBkZWwgb2JqICAgICAgICAgICAgICAgICAjIGNhbGxiYWNrIG5vdCBjYWxsZWQgYmVjYXVzZSBmaW5hbGl6ZXIgZGVhZAorCitZb3UgY2FuIHVucmVnaXN0ZXIgYSBmaW5hbGl6ZXIgdXNpbmcgaXRzIDptZXRoOmB+ZmluYWxpemUuZGV0YWNoYAorbWV0aG9kLiAgVGhpcyBraWxscyB0aGUgZmluYWxpemVyIGFuZCByZXR1cm5zIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvCit0aGUgY29uc3RydWN0b3Igd2hlbiBpdCB3YXMgY3JlYXRlZC4KKworICAgID4+PiBvYmogPSBPYmplY3QoKQorICAgID4+PiBmID0gd2Vha3JlZi5maW5hbGl6ZShvYmosIGNhbGxiYWNrLCAxLCAyLCB6PTMpCisgICAgPj4+IGYuZGV0YWNoKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RvY3Rlc3Q6K0VMTElQU0lTCisgICAgKDxfX21haW5fXy5PYmplY3Qgb2JqZWN0IC4uLj4sIDxmdW5jdGlvbiBjYWxsYmFjayAuLi4+LCAoMSwgMiksIHsneic6IDN9KQorICAgID4+PiBuZXdvYmosIGZ1bmMsIGFyZ3MsIGt3YXJncyA9IF8KKyAgICA+Pj4gYXNzZXJ0IG5vdCBmLmFsaXZlCisgICAgPj4+IGFzc2VydCBuZXdvYmogaXMgb2JqCisgICAgPj4+IGFzc2VydCBmdW5jKCphcmdzLCAqKmt3YXJncykgPT0gNgorICAgIENBTExCQUNLCisKK1VubGVzcyB5b3Ugc2V0IHRoZSA6YXR0cjpgfmZpbmFsaXplLmF0ZXhpdGAgYXR0cmlidXRlIHRvCis6Y29uc3Q6YEZhbHNlYCwgYSBmaW5hbGl6ZXIgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcHJvZ3JhbSBleGl0cyBpZiBpdAoraXMgc3RpbGwgYWxpdmUuICBGb3IgaW5zdGFuY2UKKworICAgID4+PiBvYmogPSBPYmplY3QoKQorICAgID4+PiB3ZWFrcmVmLmZpbmFsaXplKG9iaiwgcHJpbnQsICJvYmogZGVhZCBvciBleGl0aW5nIikgICNkb2N0ZXN0OitFTExJUFNJUworICAgIDxmaW5hbGl6ZSBvYmplY3QgYXQgLi4uOyBmb3IgJ09iamVjdCcgYXQgLi4uPgorICAgID4+PiBleGl0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkb2N0ZXN0OitTS0lQCisgICAgb2JqIGRlYWQgb3IgZXhpdGluZworCisKK0NvbXBhcmluZyBmaW5hbGl6ZXJzIHdpdGggOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9zZSB3ZSB3YW50IHRvIGNyZWF0ZSBhIGNsYXNzIHdob3NlIGluc3RhbmNlcyByZXByZXNlbnQgdGVtcG9yYXJ5CitkaXJlY3Rvcmllcy4gIFRoZSBkaXJlY3RvcmllcyBzaG91bGQgYmUgZGVsZXRlZCB3aXRoIHRoZWlyIGNvbnRlbnRzCit3aGVuIHRoZSBmaXJzdCBvZiB0aGUgZm9sbG93aW5nIGV2ZW50cyBvY2N1cnM6CisKKyogdGhlIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCwKKyogdGhlIG9iamVjdCdzIDptZXRoOmByZW1vdmVgIG1ldGhvZCBpcyBjYWxsZWQsIG9yCisqIHRoZSBwcm9ncmFtIGV4aXRzLgorCitXZSBtaWdodCB0cnkgdG8gaW1wbGVtZW50IHRoZSBjbGFzcyB1c2luZyBhIDptZXRoOmBfX2RlbF9fYCBtZXRob2QgYXMKK2ZvbGxvd3M6OgorCisgICAgY2xhc3MgVGVtcERpcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gdGVtcGZpbGUubWtkdGVtcCgpCisKKyAgICAgICAgZGVmIHJlbW92ZShzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYubmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYubmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSBOb25lCisKKyAgICAgICAgQHByb3BlcnR5CisgICAgICAgIGRlZiByZW1vdmVkKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZSBpcyBOb25lCisKKyAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBzZWxmLnJlbW92ZSgpCisKK1N0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMgbm8gbG9uZ2VyIHByZXZlbnQKK3JlZmVyZW5jZSBjeWNsZXMgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZCwgYW5kIG1vZHVsZSBnbG9iYWxzIGFyZQorbm8gbG9uZ2VyIGZvcmNlZCB0byA6Y29uc3Q6YE5vbmVgIGR1cmluZyBpbnRlcnByZXRlciBzaHV0ZG93bi4gU28gdGhpcworY29kZSBzaG91bGQgd29yayB3aXRob3V0IGFueSBpc3N1ZXMgb24gQ1B5dGhvbi4KKworSG93ZXZlciwgaGFuZGxpbmcgb2YgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMgaXMgbm90b3Jpb3VzbHkgaW1wbGVtZW50YXRpb24KK3NwZWNpZmljLCBzaW5jZSBpdCBkZXBlbmRzIG9uIGludGVybmFsIGRldGFpbHMgb2YgdGhlIGludGVycHJldGVyJ3MgZ2FyYmFnZQorY29sbGVjdG9yIGltcGxlbWVudGF0aW9uLgorCitBIG1vcmUgcm9idXN0IGFsdGVybmF0aXZlIGNhbiBiZSB0byBkZWZpbmUgYSBmaW5hbGl6ZXIgd2hpY2ggb25seSByZWZlcmVuY2VzCit0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBvYmplY3RzIHRoYXQgaXQgbmVlZHMsIHJhdGhlciB0aGFuIGhhdmluZyBhY2Nlc3MKK3RvIHRoZSBmdWxsIHN0YXRlIG9mIHRoZSBvYmplY3Q6OgorCisgICAgY2xhc3MgVGVtcERpcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgICAgICBzZWxmLl9maW5hbGl6ZXIgPSB3ZWFrcmVmLmZpbmFsaXplKHNlbGYsIHNodXRpbC5ybXRyZWUsIHNlbGYubmFtZSkKKworICAgICAgICBkZWYgcmVtb3ZlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fZmluYWxpemVyKCkKKworICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgZGVmIHJlbW92ZWQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gbm90IHNlbGYuX2ZpbmFsaXplci5hbGl2ZQorCitEZWZpbmVkIGxpa2UgdGhpcywgb3VyIGZpbmFsaXplciBvbmx5IHJlY2VpdmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXRhaWxzCitpdCBuZWVkcyB0byBjbGVhbiB1cCB0aGUgZGlyZWN0b3J5IGFwcHJvcHJpYXRlbHkuIElmIHRoZSBvYmplY3QgbmV2ZXIgZ2V0cworZ2FyYmFnZSBjb2xsZWN0ZWQgdGhlIGZpbmFsaXplciB3aWxsIHN0aWxsIGJlIGNhbGxlZCBhdCBleGl0LgorCitUaGUgb3RoZXIgYWR2YW50YWdlIG9mIHdlYWtyZWYgYmFzZWQgZmluYWxpemVycyBpcyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgdG8KK3JlZ2lzdGVyIGZpbmFsaXplcnMgZm9yIGNsYXNzZXMgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMgY29udHJvbGxlZCBieSBhCit0aGlyZCBwYXJ0eSwgc3VjaCBhcyBydW5uaW5nIGNvZGUgd2hlbiBhIG1vZHVsZSBpcyB1bmxvYWRlZDo6CisKKyAgICBpbXBvcnQgd2Vha3JlZiwgc3lzCisgICAgZGVmIHVubG9hZGluZ19tb2R1bGUoKToKKyAgICAgICAgIyBpbXBsaWNpdCByZWZlcmVuY2UgdG8gdGhlIG1vZHVsZSBnbG9iYWxzIGZyb20gdGhlIGZ1bmN0aW9uIGJvZHkKKyAgICB3ZWFrcmVmLmZpbmFsaXplKHN5cy5tb2R1bGVzW19fbmFtZV9fXSwgdW5sb2FkaW5nX21vZHVsZSkKKworCisuLiBub3RlOjoKKworICAgSWYgeW91IGNyZWF0ZSBhIGZpbmFsaXplciBvYmplY3QgaW4gYSBkYWVtb25pYyB0aHJlYWQganVzdCBhcyB0aGUKKyAgIHRoZSBwcm9ncmFtIGV4aXRzIHRoZW4gdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGZpbmFsaXplcgorICAgZG9lcyBub3QgZ2V0IGNhbGxlZCBhdCBleGl0LiAgSG93ZXZlciwgaW4gYSBkYWVtb25pYyB0aHJlYWQKKyAgIDpmdW5jOmBhdGV4aXQucmVnaXN0ZXJgLCBgYHRyeTogLi4uIGZpbmFsbHk6IC4uLmBgIGFuZCBgYHdpdGg6IC4uLmBgCisgICBkbyBub3QgZ3VhcmFudGVlIHRoYXQgY2xlYW51cCBvY2N1cnMgZWl0aGVyLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKaW5kZXggM2YyZGNiYi4uZGZhMmI3MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CkBAIC0xMDUsNiArMTA1LDQ2IEBACiAgICA+Pj4gcm9vdFswXVsxXS50ZXh0CiAgICAnMjAwOCcKIAorCisuLiBfZWxlbWVudHRyZWUtcHVsbC1wYXJzaW5nOgorCitQdWxsIEFQSSBmb3Igbm9uLWJsb2NraW5nIHBhcnNpbmcKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitNb3N0IHBhcnNpbmcgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlIHJlcXVpcmUgdGhlIHdob2xlIGRvY3VtZW50Cit0byBiZSByZWFkIGF0IG9uY2UgYmVmb3JlIHJldHVybmluZyBhbnkgcmVzdWx0LiAgSXQgaXMgcG9zc2libGUgdG8gdXNlIGFuCis6Y2xhc3M6YFhNTFBhcnNlcmAgYW5kIGZlZWQgZGF0YSBpbnRvIGl0IGluY3JlbWVudGFsbHksIGJ1dCBpdCBpcyBhIHB1c2ggQVBJIHRoYXQKK2NhbGxzIG1ldGhvZHMgb24gYSBjYWxsYmFjayB0YXJnZXQsIHdoaWNoIGlzIHRvbyBsb3ctbGV2ZWwgYW5kIGluY29udmVuaWVudCBmb3IKK21vc3QgbmVlZHMuICBTb21ldGltZXMgd2hhdCB0aGUgdXNlciByZWFsbHkgd2FudHMgaXMgdG8gYmUgYWJsZSB0byBwYXJzZSBYTUwKK2luY3JlbWVudGFsbHksIHdpdGhvdXQgYmxvY2tpbmcgb3BlcmF0aW9ucywgd2hpbGUgZW5qb3lpbmcgdGhlIGNvbnZlbmllbmNlIG9mCitmdWxseSBjb25zdHJ1Y3RlZCA6Y2xhc3M6YEVsZW1lbnRgIG9iamVjdHMuCisKK1RoZSBtb3N0IHBvd2VyZnVsIHRvb2wgZm9yIGRvaW5nIHRoaXMgaXMgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYC4gIEl0IGRvZXMgbm90CityZXF1aXJlIGEgYmxvY2tpbmcgcmVhZCB0byBvYnRhaW4gdGhlIFhNTCBkYXRhLCBhbmQgaXMgaW5zdGVhZCBmZWQgd2l0aCBkYXRhCitpbmNyZW1lbnRhbGx5IHdpdGggOm1ldGg6YFhNTFB1bGxQYXJzZXIuZmVlZGAgY2FsbHMuICBUbyBnZXQgdGhlIHBhcnNlZCBYTUwKK2VsZW1lbnRzLCBjYWxsIDptZXRoOmBYTUxQdWxsUGFyc2VyLnJlYWRfZXZlbnRzYC4gIEhlcmUgaXMgYW4gZXhhbXBsZTo6CisKKyAgID4+PiBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKFsnc3RhcnQnLCAnZW5kJ10pCisgICA+Pj4gcGFyc2VyLmZlZWQoJzxteXRhZz5zb21ldGV4dCcpCisgICA+Pj4gbGlzdChwYXJzZXIucmVhZF9ldmVudHMoKSkKKyAgIFsoJ3N0YXJ0JywgPEVsZW1lbnQgJ215dGFnJyBhdCAweDdmYTY2ZGIyYmU1OD4pXQorICAgPj4+IHBhcnNlci5mZWVkKCcgbW9yZSB0ZXh0PC9teXRhZz4nKQorICAgPj4+IGZvciBldmVudCwgZWxlbSBpbiBwYXJzZXIucmVhZF9ldmVudHMoKToKKyAgIC4uLiAgIHByaW50KGV2ZW50KQorICAgLi4uICAgcHJpbnQoZWxlbS50YWcsICd0ZXh0PScsIGVsZW0udGV4dCkKKyAgIC4uLgorICAgZW5kCisKK1RoZSBvYnZpb3VzIHVzZSBjYXNlIGlzIGFwcGxpY2F0aW9ucyB0aGF0IG9wZXJhdGUgaW4gYSBub24tYmxvY2tpbmcgZmFzaGlvbgord2hlcmUgdGhlIFhNTCBkYXRhIGlzIGJlaW5nIHJlY2VpdmVkIGZyb20gYSBzb2NrZXQgb3IgcmVhZCBpbmNyZW1lbnRhbGx5IGZyb20KK3NvbWUgc3RvcmFnZSBkZXZpY2UuICBJbiBzdWNoIGNhc2VzLCBibG9ja2luZyByZWFkcyBhcmUgdW5hY2NlcHRhYmxlLgorCitCZWNhdXNlIGl0J3Mgc28gZmxleGlibGUsIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAgY2FuIGJlIGluY29udmVuaWVudCB0byB1c2UgZm9yCitzaW1wbGVyIHVzZS1jYXNlcy4gIElmIHlvdSBkb24ndCBtaW5kIHlvdXIgYXBwbGljYXRpb24gYmxvY2tpbmcgb24gcmVhZGluZyBYTUwKK2RhdGEgYnV0IHdvdWxkIHN0aWxsIGxpa2UgdG8gaGF2ZSBpbmNyZW1lbnRhbCBwYXJzaW5nIGNhcGFiaWxpdGllcywgdGFrZSBhIGxvb2sKK2F0IDpmdW5jOmBpdGVycGFyc2VgLiAgSXQgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSdyZSByZWFkaW5nIGEgbGFyZ2UgWE1MIGRvY3VtZW50CithbmQgZG9uJ3Qgd2FudCB0byBob2xkIGl0IHdob2xseSBpbiBtZW1vcnkuCisKIEZpbmRpbmcgaW50ZXJlc3RpbmcgZWxlbWVudHMKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMzc5LDI1ICs0MTksMzIgQEAKIAogICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHksIGFuZCByZXBvcnRzIHdoYXQncwogICAgZ29pbmcgb24gdG8gdGhlIHVzZXIuICAqc291cmNlKiBpcyBhIGZpbGVuYW1lIG9yIDp0ZXJtOmBmaWxlIG9iamVjdGAKLSAgIGNvbnRhaW5pbmcgWE1MIGRhdGEuICAqZXZlbnRzKiBpcyBhIHR1cGxlIG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIFRoZQotICAgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgYGAic3RhcnQiYGAsIGBgImVuZCJgYCwgYGAic3RhcnQtbnMiYGAKLSAgIGFuZCBgYCJlbmQtbnMiYGAgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQgZGV0YWlsZWQgbmFtZXNwYWNlCisgICBjb250YWluaW5nIFhNTCBkYXRhLiAgKmV2ZW50cyogaXMgYSBzZXF1ZW5jZSBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBUaGUKKyAgIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzIGBgInN0YXJ0ImBgLCBgYCJlbmQiYGAsIGBgInN0YXJ0LW5zImBgIGFuZAorICAgYGAiZW5kLW5zImBgICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0IGRldGFpbGVkIG5hbWVzcGFjZQogICAgaW5mb3JtYXRpb24pLiAgSWYgKmV2ZW50cyogaXMgb21pdHRlZCwgb25seSBgYCJlbmQiYGAgZXZlbnRzIGFyZSByZXBvcnRlZC4KICAgICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlIHN0YW5kYXJkCi0gICA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICAqcGFyc2VyKiBjYW4gb25seSB1c2UgdGhlIGRlZmF1bHQKLSAgIDpjbGFzczpgVHJlZUJ1aWxkZXJgIGFzIGEgdGFyZ2V0LiAgUmV0dXJucyBhbiA6dGVybTpgaXRlcmF0b3JgIHByb3ZpZGluZwotICAgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMuCisgICA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICAqcGFyc2VyKiBtdXN0IGJlIGEgc3ViY2xhc3Mgb2YKKyAgIDpjbGFzczpgWE1MUGFyc2VyYCBhbmQgY2FuIG9ubHkgdXNlIHRoZSBkZWZhdWx0IDpjbGFzczpgVHJlZUJ1aWxkZXJgIGFzIGEKKyAgIHRhcmdldC4gIFJldHVybnMgYW4gOnRlcm06YGl0ZXJhdG9yYCBwcm92aWRpbmcgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMuCisKKyAgIE5vdGUgdGhhdCB3aGlsZSA6ZnVuYzpgaXRlcnBhcnNlYCBidWlsZHMgdGhlIHRyZWUgaW5jcmVtZW50YWxseSwgaXQgaXNzdWVzCisgICBibG9ja2luZyByZWFkcyBvbiAqc291cmNlKiAob3IgdGhlIGZpbGUgaXQgbmFtZXMpLiAgQXMgc3VjaCwgaXQncyB1bnN1aXRhYmxlCisgICBmb3IgYXBwbGljYXRpb25zIHdoZXJlIGJsb2NraW5nIHJlYWRzIGNhbid0IGJlIG1hZGUuICBGb3IgZnVsbHkgbm9uLWJsb2NraW5nCisgICBwYXJzaW5nLCBzZWUgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYC4KIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIDpmdW5jOmBpdGVycGFyc2VgIG9ubHkgZ3VhcmFudGVlcyB0aGF0IGl0IGhhcyBzZWVuIHRoZSAiPiIKLSAgICAgIGNoYXJhY3RlciBvZiBhIHN0YXJ0aW5nIHRhZyB3aGVuIGl0IGVtaXRzIGEgInN0YXJ0IiBldmVudCwgc28gdGhlCi0gICAgICBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLCBidXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMKLSAgICAgIGFyZSB1bmRlZmluZWQgYXQgdGhhdCBwb2ludC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgY2hpbGRyZW47Ci0gICAgICB0aGV5IG1heSBvciBtYXkgbm90IGJlIHByZXNlbnQuCisgICAgICA6ZnVuYzpgaXRlcnBhcnNlYCBvbmx5IGd1YXJhbnRlZXMgdGhhdCBpdCBoYXMgc2VlbiB0aGUgIj4iIGNoYXJhY3RlciBvZiBhCisgICAgICBzdGFydGluZyB0YWcgd2hlbiBpdCBlbWl0cyBhICJzdGFydCIgZXZlbnQsIHNvIHRoZSBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLAorICAgICAgYnV0IHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzIGFyZSB1bmRlZmluZWQgYXQgdGhhdAorICAgICAgcG9pbnQuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBlbGVtZW50IGNoaWxkcmVuOyB0aGV5IG1heSBvciBtYXkgbm90IGJlCisgICAgICBwcmVzZW50LgogCiAgICAgICBJZiB5b3UgbmVlZCBhIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50LCBsb29rIGZvciAiZW5kIiBldmVudHMgaW5zdGVhZC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVGhlICpwYXJzZXIqIGFyZ3VtZW50LgogCiAuLiBmdW5jdGlvbjo6IHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpCiAKQEAgLTQzOCwyOSArNDg1LDM5IEBACiAgICBhcmd1bWVudHMuICBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAKIAotLi4gZnVuY3Rpb246OiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIpCisuLiBmdW5jdGlvbjo6IHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIiwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQogCiAgICBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKICAgIHN1YmVsZW1lbnRzLiAgKmVsZW1lbnQqIGlzIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuICAqZW5jb2RpbmcqIFsxXV8gaXMKICAgIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLiAgVXNlIGBgZW5jb2Rpbmc9InVuaWNvZGUiYGAgdG8KICAgIGdlbmVyYXRlIGEgVW5pY29kZSBzdHJpbmcgKG90aGVyd2lzZSwgYSBieXRlc3RyaW5nIGlzIGdlbmVyYXRlZCkuICAqbWV0aG9kKgogICAgaXMgZWl0aGVyIGBgInhtbCJgYCwgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzIGBgInhtbCJgYCkuCisgICAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDptZXRoOmBFbGVtZW50VHJlZS53cml0ZWAuCiAgICBSZXR1cm5zIGFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIuCiAKLS4uIGZ1bmN0aW9uOjogdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIikKKworLi4gZnVuY3Rpb246OiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQogCiAgICBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKICAgIHN1YmVsZW1lbnRzLiAgKmVsZW1lbnQqIGlzIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuICAqZW5jb2RpbmcqIFsxXV8gaXMKICAgIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLiAgVXNlIGBgZW5jb2Rpbmc9InVuaWNvZGUiYGAgdG8KICAgIGdlbmVyYXRlIGEgVW5pY29kZSBzdHJpbmcgKG90aGVyd2lzZSwgYSBieXRlc3RyaW5nIGlzIGdlbmVyYXRlZCkuICAqbWV0aG9kKgogICAgaXMgZWl0aGVyIGBgInhtbCJgYCwgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzIGBgInhtbCJgYCkuCisgICAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDptZXRoOmBFbGVtZW50VHJlZS53cml0ZWAuCiAgICBSZXR1cm5zIGEgbGlzdCBvZiAob3B0aW9uYWxseSkgZW5jb2RlZCBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgogICAgSXQgZG9lcyBub3QgZ3VhcmFudGVlIGFueSBzcGVjaWZpYyBzZXF1ZW5jZSwgZXhjZXB0IHRoYXQKICAgIGBgYiIiLmpvaW4odG9zdHJpbmdsaXN0KGVsZW1lbnQpKSA9PSB0b3N0cmluZyhlbGVtZW50KWBgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIuCisKIAogLi4gZnVuY3Rpb246OiBYTUwodGV4dCwgcGFyc2VyPU5vbmUpCiAKQEAgLTc1Myw3ICs4MTAsOCBAQAogCiAKICAgIC4uIG1ldGhvZDo6IHdyaXRlKGZpbGUsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIHhtbF9kZWNsYXJhdGlvbj1Ob25lLCBcCi0gICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X25hbWVzcGFjZT1Ob25lLCBtZXRob2Q9InhtbCIpCisgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X25hbWVzcGFjZT1Ob25lLCBtZXRob2Q9InhtbCIsICosIFwKKyAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpCiAKICAgICAgIFdyaXRlcyB0aGUgZWxlbWVudCB0cmVlIHRvIGEgZmlsZSwgYXMgWE1MLiAgKmZpbGUqIGlzIGEgZmlsZSBuYW1lLCBvciBhCiAgICAgICA6dGVybTpgZmlsZSBvYmplY3RgIG9wZW5lZCBmb3Igd3JpdGluZy4gICplbmNvZGluZyogWzFdXyBpcyB0aGUgb3V0cHV0CkBAIC03NjQsNiArODIyLDEwIEBACiAgICAgICAqZGVmYXVsdF9uYW1lc3BhY2UqIHNldHMgdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSAoZm9yICJ4bWxucyIpLgogICAgICAgKm1ldGhvZCogaXMgZWl0aGVyIGBgInhtbCJgYCwgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzCiAgICAgICBgYCJ4bWwiYGApLgorICAgICAgVGhlIGtleXdvcmQtb25seSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIHBhcmFtZXRlciBjb250cm9scyB0aGUgZm9ybWF0dGluZworICAgICAgb2YgZWxlbWVudHMgdGhhdCBjb250YWluIG5vIGNvbnRlbnQuICBJZiAqVHJ1ZSogKHRoZSBkZWZhdWx0KSwgdGhleSBhcmUKKyAgICAgIGVtaXR0ZWQgYXMgYSBzaW5nbGUgc2VsZi1jbG9zZWQgdGFnLCBvdGhlcndpc2UgdGhleSBhcmUgZW1pdHRlZCBhcyBhIHBhaXIKKyAgICAgIG9mIHN0YXJ0L2VuZCB0YWdzLgogCiAgICAgICBUaGUgb3V0cHV0IGlzIGVpdGhlciBhIHN0cmluZyAoOmNsYXNzOmBzdHJgKSBvciBiaW5hcnkgKDpjbGFzczpgYnl0ZXNgKS4KICAgICAgIFRoaXMgaXMgY29udHJvbGxlZCBieSB0aGUgKmVuY29kaW5nKiBhcmd1bWVudC4gIElmICplbmNvZGluZyogaXMKQEAgLTc3Miw2ICs4MzQsOSBAQAogICAgICAgOnRlcm06YGZpbGUgb2JqZWN0YDsgbWFrZSBzdXJlIHlvdSBkbyBub3QgdHJ5IHRvIHdyaXRlIGEgc3RyaW5nIHRvIGEKICAgICAgIGJpbmFyeSBzdHJlYW0gYW5kIHZpY2UgdmVyc2EuCiAKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgICAgVGhlICpzaG9ydF9lbXB0eV9lbGVtZW50cyogcGFyYW1ldGVyLgorCiAKIFRoaXMgaXMgdGhlIFhNTCBmaWxlIHRoYXQgaXMgZ29pbmcgdG8gYmUgbWFuaXB1bGF0ZWQ6OgogCkBAIC04MTcsNiArODgyLDcgQEAKICAgIDpjbGFzczpgUU5hbWVgIGluc3RhbmNlcyBhcmUgb3BhcXVlLgogCiAKKwogLi4gX2VsZW1lbnR0cmVlLXRyZWVidWlsZGVyLW9iamVjdHM6CiAKIFRyZWVCdWlsZGVyIE9iamVjdHMKQEAgLTg3NiwxMyArOTQyLDE3IEBACiAKIC4uIGNsYXNzOjogWE1MUGFyc2VyKGh0bWw9MCwgdGFyZ2V0PU5vbmUsIGVuY29kaW5nPU5vbmUpCiAKLSAgIDpjbGFzczpgRWxlbWVudGAgc3RydWN0dXJlIGJ1aWxkZXIgZm9yIFhNTCBzb3VyY2UgZGF0YSwgYmFzZWQgb24gdGhlIGV4cGF0Ci0gICBwYXJzZXIuICAqaHRtbCogYXJlIHByZWRlZmluZWQgSFRNTCBlbnRpdGllcy4gIFRoaXMgZmxhZyBpcyBub3Qgc3VwcG9ydGVkIGJ5Ci0gICB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gICp0YXJnZXQqIGlzIHRoZSB0YXJnZXQgb2JqZWN0LiAgSWYgb21pdHRlZCwgdGhlCi0gICBidWlsZGVyIHVzZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIDpjbGFzczpgVHJlZUJ1aWxkZXJgIGNsYXNzLgotICAgKmVuY29kaW5nKiBbMV1fIGlzIG9wdGlvbmFsLiAgSWYgZ2l2ZW4sIHRoZSB2YWx1ZSBvdmVycmlkZXMgdGhlIGVuY29kaW5nCisgICBUaGlzIGNsYXNzIGlzIHRoZSBsb3ctbGV2ZWwgYnVpbGRpbmcgYmxvY2sgb2YgdGhlIG1vZHVsZS4gIEl0IHVzZXMKKyAgIDptb2Q6YHhtbC5wYXJzZXJzLmV4cGF0YCBmb3IgZWZmaWNpZW50LCBldmVudC1iYXNlZCBwYXJzaW5nIG9mIFhNTC4gIEl0IGNhbgorICAgYmUgZmVkIFhNTCBkYXRhIGluY3JlbWVudGFsbCB3aXRoIHRoZSA6bWV0aDpgZmVlZGAgbWV0aG9kLCBhbmQgcGFyc2luZyBldmVudHMKKyAgIGFyZSB0cmFuc2xhdGVkIHRvIGEgcHVzaCBBUEkgLSBieSBpbnZva2luZyBjYWxsYmFja3Mgb24gdGhlICp0YXJnZXQqIG9iamVjdC4KKyAgIElmICp0YXJnZXQqIGlzIG9taXR0ZWQsIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YFRyZWVCdWlsZGVyYCBpcyB1c2VkLiAgVGhlCisgICAqaHRtbCogYXJndW1lbnQgd2FzIGhpc3RvcmljYWxseSB1c2VkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgaXMgbm93CisgICBkZXByZWNhdGVkLiAgSWYgKmVuY29kaW5nKiBbMV1fIGlzIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZwogICAgc3BlY2lmaWVkIGluIHRoZSBYTUwgZmlsZS4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVGhlICpodG1sKiBhcmd1bWVudC4KIAogICAgLi4gbWV0aG9kOjogY2xvc2UoKQogCkBAIC05MDIsMTIgKzk3MiwxMiBAQAogCiAgICAgICBGZWVkcyBkYXRhIHRvIHRoZSBwYXJzZXIuICAqZGF0YSogaXMgZW5jb2RlZCBkYXRhLgogCi0gICA6bWV0aDpgWE1MUGFyc2VyLmZlZWRgIGNhbGxzICp0YXJnZXQqXCdzIGBgc3RhcnQoKWBgIG1ldGhvZAotICAgZm9yIGVhY2ggb3BlbmluZyB0YWcsIGl0cyBgYGVuZCgpYGAgbWV0aG9kIGZvciBlYWNoIGNsb3NpbmcgdGFnLAotICAgYW5kIGRhdGEgaXMgcHJvY2Vzc2VkIGJ5IG1ldGhvZCBgYGRhdGEoKWBgLiAgOm1ldGg6YFhNTFBhcnNlci5jbG9zZWAKLSAgIGNhbGxzICp0YXJnZXQqXCdzIG1ldGhvZCBgYGNsb3NlKClgYC4KLSAgIDpjbGFzczpgWE1MUGFyc2VyYCBjYW4gYmUgdXNlZCBub3Qgb25seSBmb3IgYnVpbGRpbmcgYSB0cmVlIHN0cnVjdHVyZS4KLSAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBjb3VudGluZyB0aGUgbWF4aW11bSBkZXB0aCBvZiBhbiBYTUwgZmlsZTo6CisgICA6bWV0aDpgWE1MUGFyc2VyLmZlZWRgIGNhbGxzICp0YXJnZXQqXCdzIGBgc3RhcnQodGFnLCBhdHRyc19kaWN0KWBgIG1ldGhvZAorICAgZm9yIGVhY2ggb3BlbmluZyB0YWcsIGl0cyBgYGVuZCh0YWcpYGAgbWV0aG9kIGZvciBlYWNoIGNsb3NpbmcgdGFnLCBhbmQgZGF0YQorICAgaXMgcHJvY2Vzc2VkIGJ5IG1ldGhvZCBgYGRhdGEoZGF0YSlgYC4gIDptZXRoOmBYTUxQYXJzZXIuY2xvc2VgIGNhbGxzCisgICAqdGFyZ2V0KlwncyBtZXRob2QgYGBjbG9zZSgpYGAuIDpjbGFzczpgWE1MUGFyc2VyYCBjYW4gYmUgdXNlZCBub3Qgb25seSBmb3IKKyAgIGJ1aWxkaW5nIGEgdHJlZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBjb3VudGluZyB0aGUgbWF4aW11bSBkZXB0aAorICAgb2YgYW4gWE1MIGZpbGU6OgogCiAgICAgPj4+IGZyb20geG1sLmV0cmVlLkVsZW1lbnRUcmVlIGltcG9ydCBYTUxQYXJzZXIKICAgICA+Pj4gY2xhc3MgTWF4RGVwdGg6ICAgICAgICAgICAgICAgICAgICAgIyBUaGUgdGFyZ2V0IG9iamVjdCBvZiB0aGUgcGFyc2VyCkBAIC05NDEsNiArMTAxMSw2MCBAQAogICAgID4+PiBwYXJzZXIuY2xvc2UoKQogICAgIDQKIAorCisuLiBfZWxlbWVudHRyZWUteG1scHVsbHBhcnNlci1vYmplY3RzOgorCitYTUxQdWxsUGFyc2VyIE9iamVjdHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IFhNTFB1bGxQYXJzZXIoZXZlbnRzPU5vbmUpCisKKyAgIEEgcHVsbCBwYXJzZXIgc3VpdGFibGUgZm9yIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMuICBJdHMgaW5wdXQtc2lkZSBBUEkgaXMKKyAgIHNpbWlsYXIgdG8gdGhhdCBvZiA6Y2xhc3M6YFhNTFBhcnNlcmAsIGJ1dCBpbnN0ZWFkIG9mIHB1c2hpbmcgY2FsbHMgdG8gYQorICAgY2FsbGJhY2sgdGFyZ2V0LCA6Y2xhc3M6YFhNTFB1bGxQYXJzZXJgIGNvbGxlY3RzIGFuIGludGVybmFsIGxpc3Qgb2YgcGFyc2luZworICAgZXZlbnRzIGFuZCBsZXRzIHRoZSB1c2VyIHJlYWQgZnJvbSBpdC4gKmV2ZW50cyogaXMgYSBzZXF1ZW5jZSBvZiBldmVudHMgdG8KKyAgIHJlcG9ydCBiYWNrLiAgVGhlIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzIGBgInN0YXJ0ImBgLCBgYCJlbmQiYGAsCisgICBgYCJzdGFydC1ucyJgYCBhbmQgYGAiZW5kLW5zImBgICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0IGRldGFpbGVkCisgICBuYW1lc3BhY2UgaW5mb3JtYXRpb24pLiAgSWYgKmV2ZW50cyogaXMgb21pdHRlZCwgb25seSBgYCJlbmQiYGAgZXZlbnRzIGFyZQorICAgcmVwb3J0ZWQuCisKKyAgIC4uIG1ldGhvZDo6IGZlZWQoZGF0YSkKKworICAgICAgRmVlZCB0aGUgZ2l2ZW4gYnl0ZXMgZGF0YSB0byB0aGUgcGFyc2VyLgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIFNpZ25hbCB0aGUgcGFyc2VyIHRoYXQgdGhlIGRhdGEgc3RyZWFtIGlzIHRlcm1pbmF0ZWQuIFVubGlrZQorICAgICAgOm1ldGg6YFhNTFBhcnNlci5jbG9zZWAsIHRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm5zIDpjb25zdDpgTm9uZWAuCisgICAgICBBbnkgZXZlbnRzIG5vdCB5ZXQgcmV0cmlldmVkIHdoZW4gdGhlIHBhcnNlciBpcyBjbG9zZWQgY2FuIHN0aWxsIGJlCisgICAgICByZWFkIHdpdGggOm1ldGg6YHJlYWRfZXZlbnRzYC4KKworICAgLi4gbWV0aG9kOjogcmVhZF9ldmVudHMoKQorCisgICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgZXZlbnRzIHdoaWNoIGhhdmUgYmVlbiBlbmNvdW50ZXJlZCBpbiB0aGUKKyAgICAgIGRhdGEgZmVkIHRvIHRoZQorICAgICAgcGFyc2VyLiAgVGhlIGl0ZXJhdG9yIHlpZWxkcyBgYChldmVudCwgZWxlbSlgYCBwYWlycywgd2hlcmUgKmV2ZW50KiBpcyBhCisgICAgICBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mIGV2ZW50IChlLmcuIGBgImVuZCJgYCkgYW5kICplbGVtKiBpcyB0aGUKKyAgICAgIGVuY291bnRlcmVkIDpjbGFzczpgRWxlbWVudGAgb2JqZWN0LgorCisgICAgICBFdmVudHMgcHJvdmlkZWQgaW4gYSBwcmV2aW91cyBjYWxsIHRvIDptZXRoOmByZWFkX2V2ZW50c2Agd2lsbCBub3QgYmUKKyAgICAgIHlpZWxkZWQgYWdhaW4uICBFdmVudHMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIGludGVybmFsIHF1ZXVlIG9ubHkgd2hlbgorICAgICAgdGhleSBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGl0ZXJhdG9yLCBzbyBtdWx0aXBsZSByZWFkZXJzIGl0ZXJhdGluZyBpbgorICAgICAgcGFyYWxsZWwgb3ZlciBpdGVyYXRvcnMgb2J0YWluZWQgZnJvbSA6bWV0aDpgcmVhZF9ldmVudHNgIHdpbGwgaGF2ZQorICAgICAgdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorCisgICAuLiBub3RlOjoKKworICAgICAgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYCBvbmx5IGd1YXJhbnRlZXMgdGhhdCBpdCBoYXMgc2VlbiB0aGUgIj4iCisgICAgICBjaGFyYWN0ZXIgb2YgYSBzdGFydGluZyB0YWcgd2hlbiBpdCBlbWl0cyBhICJzdGFydCIgZXZlbnQsIHNvIHRoZQorICAgICAgYXR0cmlidXRlcyBhcmUgZGVmaW5lZCwgYnV0IHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzCisgICAgICBhcmUgdW5kZWZpbmVkIGF0IHRoYXQgcG9pbnQuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBlbGVtZW50IGNoaWxkcmVuOworICAgICAgdGhleSBtYXkgb3IgbWF5IG5vdCBiZSBwcmVzZW50LgorCisgICAgICBJZiB5b3UgbmVlZCBhIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50LCBsb29rIGZvciAiZW5kIiBldmVudHMgaW5zdGVhZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIEV4Y2VwdGlvbnMKIF5eXl5eXl5eXl4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QgYi9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdAppbmRleCA3YTY0ODJiLi45NjlhNTM2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdApAQCAtMTMwLDcgKzEzMCw3IEBACiAtLS0tLS0tLS0tLS0tLS0KIAogCi0uLiBjbGFzczo6IFppcEZpbGUoZmlsZSwgbW9kZT0ncicsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9RmFsc2UpCisuLiBjbGFzczo6IFppcEZpbGUoZmlsZSwgbW9kZT0ncicsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9VHJ1ZSkKIAogICAgT3BlbiBhIFpJUCBmaWxlLCB3aGVyZSAqZmlsZSogY2FuIGJlIGVpdGhlciBhIHBhdGggdG8gYSBmaWxlIChhIHN0cmluZykgb3IgYQogICAgZmlsZS1saWtlIG9iamVjdC4gIFRoZSAqbW9kZSogcGFyYW1ldGVyIHNob3VsZCBiZSBgYCdyJ2BgIHRvIHJlYWQgYW4gZXhpc3RpbmcKQEAgLTE0NCwxNSArMTQ0LDEyIEBACiAgICBhbmQgc2hvdWxkIGJlIDpjb25zdDpgWklQX1NUT1JFRGAsIDpjb25zdDpgWklQX0RFRkxBVEVEYCwKICAgIDpjb25zdDpgWklQX0JaSVAyYCBvciA6Y29uc3Q6YFpJUF9MWk1BYDsgdW5yZWNvZ25pemVkCiAgICB2YWx1ZXMgd2lsbCBjYXVzZSA6ZXhjOmBSdW50aW1lRXJyb3JgIHRvIGJlIHJhaXNlZC4gIElmIDpjb25zdDpgWklQX0RFRkxBVEVEYCwKLSAgIDpjb25zdDpgWklQX0JaSVAyYCBvciA6Y29uc3Q6YFpJUF9MWk1BYCBpcyBzcGVjaWZpZWQgYnV0IHRoZSBjb3JyZXNwb25kZWQgbW9kdWxlCisgICA6Y29uc3Q6YFpJUF9CWklQMmAgb3IgOmNvbnN0OmBaSVBfTFpNQWAgaXMgc3BlY2lmaWVkIGJ1dCB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUKICAgICg6bW9kOmB6bGliYCwgOm1vZDpgYnoyYCBvciA6bW9kOmBsem1hYCkgaXMgbm90IGF2YWlsYWJsZSwgOmV4YzpgUnVudGltZUVycm9yYAogICAgaXMgYWxzbyByYWlzZWQuIFRoZSBkZWZhdWx0IGlzIDpjb25zdDpgWklQX1NUT1JFRGAuICBJZiAqYWxsb3daaXA2NCogaXMKLSAgIGBgVHJ1ZWBgIHppcGZpbGUgd2lsbCBjcmVhdGUgWklQIGZpbGVzIHRoYXQgdXNlIHRoZSBaSVA2NCBleHRlbnNpb25zIHdoZW4KLSAgIHRoZSB6aXBmaWxlIGlzIGxhcmdlciB0aGFuIDIgR2lCLiBJZiBpdCBpcyAgZmFsc2UgKHRoZSBkZWZhdWx0KSA6bW9kOmB6aXBmaWxlYAorICAgYGBUcnVlYGAgKHRoZSBkZWZhdWx0KSB6aXBmaWxlIHdpbGwgY3JlYXRlIFpJUCBmaWxlcyB0aGF0IHVzZSB0aGUgWklQNjQKKyAgIGV4dGVuc2lvbnMgd2hlbiB0aGUgemlwZmlsZSBpcyBsYXJnZXIgdGhhbiAyIEdpQi4gSWYgaXQgaXMgIGZhbHNlIDptb2Q6YHppcGZpbGVgCiAgICB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBaSVAgZmlsZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMuCi0gICBaSVA2NCBleHRlbnNpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhlIGRlZmF1bHQgOnByb2dyYW06YHppcGAKLSAgIGFuZCA6cHJvZ3JhbTpgdW56aXBgIGNvbW1hbmRzIG9uIFVuaXggKHRoZSBJbmZvWklQIHV0aWxpdGllcykgZG9uJ3Qgc3VwcG9ydAotICAgdGhlc2UgZXh0ZW5zaW9ucy4KIAogICAgSWYgdGhlIGZpbGUgaXMgY3JlYXRlZCB3aXRoIG1vZGUgYGAnYSdgYCBvciBgYCd3J2BgIGFuZCB0aGVuCiAgICA6bWV0aDpgY2xvc2VkIDxjbG9zZT5gIHdpdGhvdXQgYWRkaW5nIGFueSBmaWxlcyB0byB0aGUgYXJjaGl2ZSwgdGhlIGFwcHJvcHJpYXRlCkBAIC0xNzEsNiArMTY4LDkgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciA6bW9kOmBiemlwMiA8YnoyPmAgYW5kIDptb2Q6YGx6bWFgIGNvbXByZXNzaW9uLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgWklQNjQgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgorCiAKIC4uIG1ldGhvZDo6IFppcEZpbGUuY2xvc2UoKQogCkBAIC0yMzQsNiArMjM0LDkgQEAKICAgICAgIG9yIGEgOmNsYXNzOmBaaXBJbmZvYCBvYmplY3QuICBZb3Ugd2lsbCBhcHByZWNpYXRlIHRoaXMgd2hlbiB0cnlpbmcgdG8gcmVhZCBhCiAgICAgICBaSVAgZmlsZSB0aGF0IGNvbnRhaW5zIG1lbWJlcnMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuCiAKKyAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuNCAzLjYKKyAgICAgIFRoZSBgYCdVJ2BgIG9yICBgYCdyVSdgYCBtb2RlLiAgVXNlIDpjbGFzczpgaW8uVGV4dElPV3JhcHBlcmAgZm9yIHJlYWRpbmcKKyAgICAgIGNvbXByZXNzZWQgdGV4dCBmaWxlcyBpbiA6dGVybTpgdW5pdmVyc2FsIG5ld2xpbmVzYCBtb2RlLgogCiAuLiBtZXRob2Q6OiBaaXBGaWxlLmV4dHJhY3QobWVtYmVyLCBwYXRoPU5vbmUsIHB3ZD1Ob25lKQogCkBAIC0yNjYsMTAgKzI2OSw4IEBACiAgICAgICBOZXZlciBleHRyYWN0IGFyY2hpdmVzIGZyb20gdW50cnVzdGVkIHNvdXJjZXMgd2l0aG91dCBwcmlvciBpbnNwZWN0aW9uLgogICAgICAgSXQgaXMgcG9zc2libGUgdGhhdCBmaWxlcyBhcmUgY3JlYXRlZCBvdXRzaWRlIG9mICpwYXRoKiwgZS5nLiBtZW1iZXJzCiAgICAgICB0aGF0IGhhdmUgYWJzb2x1dGUgZmlsZW5hbWVzIHN0YXJ0aW5nIHdpdGggYGAiLyJgYCBvciBmaWxlbmFtZXMgd2l0aCB0d28KLSAgICAgIGRvdHMgYGAiLi4iYGAuCi0KLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zLjEKLSAgICAgIFRoZSB6aXBmaWxlIG1vZHVsZSBhdHRlbXB0cyB0byBwcmV2ZW50IHRoYXQuICBTZWUgOm1ldGg6YGV4dHJhY3RgIG5vdGUuCisgICAgICBkb3RzIGBgIi4uImBgLiAgVGhpcyBtb2R1bGUgYXR0ZW1wdHMgdG8gcHJldmVudCB0aGF0LgorICAgICAgU2VlIDptZXRoOmBleHRyYWN0YCBub3RlLgogCiAKIC4uIG1ldGhvZDo6IFppcEZpbGUucHJpbnRkaXIoKQpAQCAtMzc2LDE1ICszNzcsMTggQEAKIFRoZSA6Y2xhc3M6YFB5WmlwRmlsZWAgY29uc3RydWN0b3IgdGFrZXMgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUKIDpjbGFzczpgWmlwRmlsZWAgY29uc3RydWN0b3IsIGFuZCBvbmUgYWRkaXRpb25hbCBwYXJhbWV0ZXIsICpvcHRpbWl6ZSouCiAKLS4uIGNsYXNzOjogUHlaaXBGaWxlKGZpbGUsIG1vZGU9J3InLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlLCBcCisuLiBjbGFzczo6IFB5WmlwRmlsZShmaWxlLCBtb2RlPSdyJywgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1UcnVlLCBcCiAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZT0tMSkKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAgICAgICBUaGUgKm9wdGltaXplKiBwYXJhbWV0ZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBaSVA2NCBleHRlbnNpb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCisKICAgIEluc3RhbmNlcyBoYXZlIG9uZSBtZXRob2QgaW4gYWRkaXRpb24gdG8gdGhvc2Ugb2YgOmNsYXNzOmBaaXBGaWxlYCBvYmplY3RzOgogCi0gICAuLiBtZXRob2Q6OiBQeVppcEZpbGUud3JpdGVweShwYXRobmFtZSwgYmFzZW5hbWU9JycpCisgICAuLiBtZXRob2Q6OiBQeVppcEZpbGUud3JpdGVweShwYXRobmFtZSwgYmFzZW5hbWU9JycsIGZpbHRlcmZ1bmM9Tm9uZSkKIAogICAgICAgU2VhcmNoIGZvciBmaWxlcyA6ZmlsZTpgXCoucHlgIGFuZCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSB0byB0aGUKICAgICAgIGFyY2hpdmUuCkBAIC00MDYsNyArNDEwLDEwIEBACiAgICAgICBwYWNrYWdlIGRpcmVjdG9yeSwgdGhlbiBhbGwgOmZpbGU6YFwqLnB5W2NvXWAgYXJlIGFkZGVkIHVuZGVyIHRoZSBwYWNrYWdlCiAgICAgICBuYW1lIGFzIGEgZmlsZSBwYXRoLCBhbmQgaWYgYW55IHN1YmRpcmVjdG9yaWVzIGFyZSBwYWNrYWdlIGRpcmVjdG9yaWVzLAogICAgICAgYWxsIG9mIHRoZXNlIGFyZSBhZGRlZCByZWN1cnNpdmVseS4gICpiYXNlbmFtZSogaXMgaW50ZW5kZWQgZm9yIGludGVybmFsCi0gICAgICB1c2Ugb25seS4gIFRoZSA6bWV0aDpgd3JpdGVweWAgbWV0aG9kIG1ha2VzIGFyY2hpdmVzIHdpdGggZmlsZSBuYW1lcyBsaWtlCisgICAgICB1c2Ugb25seS4gIFdoZW4gKmZpbHRlcmZ1bmMocGF0aG5hbWUpKiBpcyBnaXZlbiwgaXQgd2lsbCBiZSBjYWxsZWQgZm9yIGV2ZXJ5CisgICAgICBpbnZvY2F0aW9uLiBXaGVuIGl0IHJldHVybnMgYSBmYWxzZSB2YWx1ZSwgdGhhdCBwYXRoIGFuZCBpdHMgc3VicGF0aHMgd2lsbAorICAgICAgYmUgaWdub3JlZC4KKyAgICAgIFRoZSA6bWV0aDpgd3JpdGVweWAgbWV0aG9kIG1ha2VzIGFyY2hpdmVzIHdpdGggZmlsZSBuYW1lcyBsaWtlCiAgICAgICB0aGlzOjoKIAogICAgICAgICAgc3RyaW5nLnB5YyAgICAgICAgICAgICAgICAgICAjIFRvcCBsZXZlbCBuYW1lCkBAIC00MTUsNiArNDIyLDkgQEAKICAgICAgICAgIHRlc3QvYm9ndXMvX19pbml0X18ucHljICAgICAgIyBTdWJwYWNrYWdlIGRpcmVjdG9yeQogICAgICAgICAgdGVzdC9ib2d1cy9teWZpbGUucHljICAgICAgICAjIFN1Ym1vZHVsZSB0ZXN0LmJvZ3VzLm15ZmlsZQogCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgICAgIFRoZSAqZmlsdGVyZnVuYyogcGFyYW1ldGVyLgorCiAKIC4uIF96aXBpbmZvLW9iamVjdHM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWNlbnNlLnJzdCBiL0RvYy9saWNlbnNlLnJzdAppbmRleCA0NDQwYzdiLi4wOGU1NDY0IDEwMDY0NAotLS0gYS9Eb2MvbGljZW5zZS5yc3QKKysrIGIvRG9jL2xpY2Vuc2UucnN0CkBAIC01OTAsNiArNTkwLDM1IEBACiAgIFNVQ0ggREFNQUdFLgogCiAKK1NpcEhhc2gyNAorLS0tLS0tLS0tCisKK1RoZSBmaWxlIDpmaWxlOmBQeXRob24vcHloYXNoLmNgIGNvbnRhaW5zIE1hcmVrIE1hamtvd3NraScgaW1wbGVtZW50YXRpb24gb2YKK0RhbiBCZXJuc3RlaW4ncyBTaXBIYXNoMjQgYWxnb3JpdGhtLiBUaGUgY29udGFpbnMgdGhlIGZvbGxvd2luZyBub3RlOjoKKworICA8TUlUIExpY2Vuc2U+CisgIENvcHlyaWdodCAoYykgMjAxMyAgTWFyZWsgTWFqa293c2tpIDxtYXJla0Bwb3Bjb3VudC5vcmc+CisKKyAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgIDwvTUlUIExpY2Vuc2U+CisKKyAgT3JpZ2luYWwgbG9jYXRpb246CisgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWplay9jc2lwaGFzaC8KKworICBTb2x1dGlvbiBpbnNwaXJlZCBieSBjb2RlIGZyb206CisgICAgIFNhbXVlbCBOZXZlcyAoc3VwZXJjb3AvY3J5cHRvX2F1dGgvc2lwaGFzaDI0L2xpdHRsZSkKKyAgICAgZGpiIChzdXBlcmNvcC9jcnlwdG9fYXV0aC9zaXBoYXNoMjQvbGl0dGxlMikKKyAgICAgSmVhbi1QaGlsaXBwZSBBdW1hc3NvbiAoaHR0cHM6Ly8xMzEwMDIubmV0L3NpcGhhc2gvc2lwaGFzaDI0LmMpCisKKwogc3RydG9kIGFuZCBkdG9hCiAtLS0tLS0tLS0tLS0tLS0KIApAQCAtODQ2LDYgKzg3NSw0NyBAQAogICBqbG91cEBnemlwLm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CiAKIAorY2Z1aGFzaAorLS0tLS0tLQorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGhhc2ggdGFibGUgdXNlZCBieSB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIGlzIGJhc2VkCitvbiB0aGUgY2Z1aGFzaCBwcm9qZWN0OjoKKworICAgQ29weXJpZ2h0IChjKSAyMDA1IERvbiBPd2VucworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBCU0QgbGljZW5zZToKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICAgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgICBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwogbGlibXBkZWMKIC0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9tYWtlLmJhdCBiL0RvYy9tYWtlLmJhdAppbmRleCBkNmY3MDc0Li4wYjViNTZlIDEwMDY0NAotLS0gYS9Eb2MvbWFrZS5iYXQKKysrIGIvRG9jL21ha2UuYmF0CkBAIC0xLDcgKzEsNiBAQAogQEBlY2hvIG9mZgogc2V0bG9jYWwKIAotc2V0IFNWTlJPT1Q9aHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzCiBpZiAiJVBZVEhPTiUiIEVRVSAiIiBzZXQgUFlUSE9OPXB5IC0yCiBpZiAiJUhUTUxIRUxQJSIgRVFVICIiIHNldCBIVE1MSEVMUD0lUHJvZ3JhbUZpbGVzJVxIVE1MIEhlbHAgV29ya3Nob3BcaGhjLmV4ZQogaWYgIiVESVNUVkVSU0lPTiUiIEVRVSAiIiBmb3IgL2YgInVzZWJhY2txIiAlJXYgaW4gKGAlUFlUSE9OJSB0b29scy9zcGhpbnhleHQvcGF0Y2hsZXZlbC5weWApIGRvIHNldCBESVNUVkVSU0lPTj0lJXYKQEAgLTE0LDE1ICsxMywxMSBAQAogaWYgIiUxIiBFUVUgInN1c3BpY2lvdXMiIGdvdG8gYnVpbGQKIGlmICIlMSIgRVFVICJsaW5rY2hlY2siIGdvdG8gYnVpbGQKIGlmICIlMSIgRVFVICJjaGFuZ2VzIiBnb3RvIGJ1aWxkCi1pZiAiJTEiIEVRVSAiY2hlY2tvdXQiIGdvdG8gY2hlY2tvdXQKLWlmICIlMSIgRVFVICJ1cGRhdGUiIGdvdG8gdXBkYXRlCiAKIDpoZWxwCiBzZXQgdGhpcz0lfm4wCiBlY2hvIEhFTFAKIGVjaG8uCi1lY2hvICV0aGlzJSBjaGVja291dAotZWNobyAldGhpcyUgdXBkYXRlCiBlY2hvICV0aGlzJSBodG1sCiBlY2hvICV0aGlzJSBodG1saGVscAogZWNobyAldGhpcyUgbGF0ZXgKQEAgLTMzLDIwICsyOCw2IEBACiBlY2hvLgogZ290byBlbmQKIAotOmNoZWNrb3V0Ci1zdm4gY28gJVNWTlJPT1QlL2V4dGVybmFsL1NwaGlueC0xLjIvc3BoaW54IHRvb2xzL3NwaGlueAotc3ZuIGNvICVTVk5ST09UJS9leHRlcm5hbC9kb2N1dGlscy0wLjExL2RvY3V0aWxzIHRvb2xzL2RvY3V0aWxzCi1zdm4gY28gJVNWTlJPT1QlL2V4dGVybmFsL0ppbmphLTIuMy4xL2ppbmphMiB0b29scy9qaW5qYTIKLXN2biBjbyAlU1ZOUk9PVCUvZXh0ZXJuYWwvUHlnbWVudHMtMS42L3B5Z21lbnRzIHRvb2xzL3B5Z21lbnRzCi1nb3RvIGVuZAotCi06dXBkYXRlCi1zdm4gdXBkYXRlIHRvb2xzL3NwaGlueAotc3ZuIHVwZGF0ZSB0b29scy9kb2N1dGlscwotc3ZuIHVwZGF0ZSB0b29scy9qaW5qYTIKLXN2biB1cGRhdGUgdG9vbHMvcHlnbWVudHMKLWdvdG8gZW5kCi0KIDpidWlsZAogaWYgbm90IGV4aXN0IGJ1aWxkIG1rZGlyIGJ1aWxkCiBpZiBub3QgZXhpc3QgYnVpbGRcJTEgbWtkaXIgYnVpbGRcJTEKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0IGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKaW5kZXggOGFmYzY5ZS4uZTM1YWE5ZiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKQEAgLTQ5MywxNCArNDkzLDE1IEBACiB2YWx1ZSwgYWxsIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiYGAqYGAiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdAogdmFsdWUgLS0tIHRoaXMgaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLgogCi0qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMKLWV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24KLWlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMKLWlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZQotb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0Ci0oZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuCi1UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgYGBOb25lYGAKLWFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46OgorKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGUgZnVuY3Rpb24KK2RlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuCit0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXMgdXNlZCBmb3IgZWFjaAorY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGEgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYQorbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTogaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZQorb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGEgbGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdAorbW9kaWZpZWQuICBUaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UKK2BgTm9uZWBgIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sCitlLmcuOjoKIAogICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOgogICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZToKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdCBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdAppbmRleCAyMmNhYzA3Li41OTdlMDRlIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CkBAIC05MzQsNiArOTM0LDIwIEBACiAgICAgICBmcmFtZSkuICBBIGRlYnVnZ2VyIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpCiAgICAgICBieSB3cml0aW5nIHRvIGZfbGluZW5vLgogCisgICAgICBGcmFtZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDoKKworICAgICAgLi4gbWV0aG9kOjogZnJhbWUuY2xlYXIoKQorCisgICAgICAgICBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzIGhlbGQgYnkgdGhlCisgICAgICAgICBmcmFtZS4gIEFsc28sIGlmIHRoZSBmcmFtZSBiZWxvbmdlZCB0byBhIGdlbmVyYXRvciwgdGhlIGdlbmVyYXRvcgorICAgICAgICAgaXMgZmluYWxpemVkLiAgVGhpcyBoZWxwcyBicmVhayByZWZlcmVuY2UgY3ljbGVzIGludm9sdmluZyBmcmFtZQorICAgICAgICAgb2JqZWN0cyAoZm9yIGV4YW1wbGUgd2hlbiBjYXRjaGluZyBhbiBleGNlcHRpb24gYW5kIHN0b3JpbmcgaXRzCisgICAgICAgICB0cmFjZWJhY2sgZm9yIGxhdGVyIHVzZSkuCisKKyAgICAgICAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLgorCisgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgVHJhY2ViYWNrIG9iamVjdHMKICAgICAgIC4uIGluZGV4OjoKICAgICAgICAgIG9iamVjdDogdHJhY2ViYWNrCkBAIC0xMTIxLDEyICsxMTM1LDEwIEBACiAgICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3Qgc2l0dWF0aW9uCiAgICAgICBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7IHRoZSBsYXR0ZXIgdHdvCiAgICAgICBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuCi0gICAgICBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGUKLSAgICAgIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0J3Mgb24gYnkgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkIHVwIGlmCi0gICAgICB0aGVyZSBhcmUgbm8gUHl0aG9uLSBsZXZlbCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOm1vZDpgZ2NgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cKLSAgICAgIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvciwgcGFydGljdWxhcmx5Ci0gICAgICB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZ2FyYmFnZWBgIHZhbHVlLgorICAgICAgQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmUgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgd2hlbgorICAgICAgdGhlIGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3RvciBpcyBlbmFibGVkIChpdCdzIG9uIGJ5IGRlZmF1bHQpLiBSZWZlciB0byB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6bW9kOmBnY2AgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMKKyAgICAgIHRvcGljLgogCiAgICAuLiB3YXJuaW5nOjoKIApAQCAtMTIxNCw2ICsxMjI2LDEwIEBACiAKICAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgX19mb3JtYXRfXyBtZXRob2Qgb2YgYGBvYmplY3RgYCBpdHNlbGYgcmFpc2VzIGEgOmV4YzpgVHlwZUVycm9yYAorICAgICAgaWYgcGFzc2VkIGFueSBub24tZW1wdHkgc3RyaW5nLgorCiAKIC4uIF9yaWNoY21wZnVuY3M6CiAuLiBtZXRob2Q6OiBvYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKQpAQCAtMTYzMSw2ICsxNjQ3LDggQEAKIHRoYXQgY3JpdGVyaW9uLCB0aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIHdpbGwgZmFpbCB3aXRoIGBgVHlwZUVycm9yYGAuCiAKIAorLi4gX3ByZXBhcmU6CisKIFByZXBhcmluZyB0aGUgY2xhc3MgbmFtZXNwYWNlCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0xODMwLDYgKzE4NDgsMTUgQEAKICAgIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuCiAKIAorLi4gbWV0aG9kOjogb2JqZWN0Ll9fbGVuZ3RoX2hpbnRfXyhzZWxmKQorCisgICBDYWxsZWQgdG8gaW1wbGVtZW50IDpmdW5jOmBvcGVyYXRvci5sZW5ndGhfaGludGAuIFNob3VsZCByZXR1cm4gYW4gZXN0aW1hdGVkCisgICBsZW5ndGggZm9yIHRoZSBvYmplY3QgKHdoaWNoIG1heSBiZSBncmVhdGVyIG9yIGxlc3MgdGhhbiB0aGUgYWN0dWFsIGxlbmd0aCkuCisgICBUaGUgbGVuZ3RoIG11c3QgYmUgYW4gaW50ZWdlciBgYD49YGAgMC4gVGhpcyBtZXRob2QgaXMgcHVyZWx5IGFuCisgICBvcHRpbWl6YXRpb24gYW5kIGlzIG5ldmVyIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIG5vdGU6OgogCiAgICBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBIGNhbGwgbGlrZSA6OgpAQCAtMjA1OSw5ICsyMDg2LDE3IEBACiAKIC4uIG1ldGhvZDo6IG9iamVjdC5fX2luZGV4X18oc2VsZikKIAotICAgQ2FsbGVkIHRvIGltcGxlbWVudCA6ZnVuYzpgb3BlcmF0b3IuaW5kZXhgLiAgQWxzbyBjYWxsZWQgd2hlbmV2ZXIgUHl0aG9uIG5lZWRzCi0gICBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGUgYnVpbHQtaW4gOmZ1bmM6YGJpbmAsCi0gICA6ZnVuYzpgaGV4YCBhbmQgOmZ1bmM6YG9jdGAgZnVuY3Rpb25zKS4gTXVzdCByZXR1cm4gYW4gaW50ZWdlci4KKyAgIENhbGxlZCB0byBpbXBsZW1lbnQgOmZ1bmM6YG9wZXJhdG9yLmluZGV4YCwgYW5kIHdoZW5ldmVyIFB5dGhvbiBuZWVkcyB0bworICAgbG9zc2xlc3NseSBjb252ZXJ0IHRoZSBudW1lcmljIG9iamVjdCB0byBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbgorICAgc2xpY2luZywgb3IgaW4gdGhlIGJ1aWx0LWluIDpmdW5jOmBiaW5gLCA6ZnVuYzpgaGV4YCBhbmQgOmZ1bmM6YG9jdGAKKyAgIGZ1bmN0aW9ucykuIFByZXNlbmNlIG9mIHRoaXMgbWV0aG9kIGluZGljYXRlcyB0aGF0IHRoZSBudW1lcmljIG9iamVjdCBpcworICAgYW4gaW50ZWdlciB0eXBlLiAgTXVzdCByZXR1cm4gYW4gaW50ZWdlci4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFdoZW4gOm1ldGg6YF9faW5kZXhfX2AgaXMgZGVmaW5lZCwgOm1ldGg6YF9faW50X19gIHNob3VsZCBhbHNvIGJlIGRlZmluZWQsCisgICAgICBhbmQgYm90aCBzaHVsZCByZXR1cm4gdGhlIHNhbWUgdmFsdWUsIGluIG9yZGVyIHRvIGhhdmUgYSBjb2hlcmVudCBpbnRlZ2VyCisgICAgICB0eXBlIGNsYXNzLgogCiAKIC4uIF9jb250ZXh0LW1hbmFnZXJzOgpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0IGIvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0CmluZGV4IGViNDk3YTEuLjFiMjhkMmMgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2ltcG9ydC5yc3QKQEAgLTIxMCw2ICsyMTAsNyBAQAogLi4gaW5kZXg6OgogICAgIHNpbmdsZTogZmluZGVyCiAgICAgc2luZ2xlOiBsb2FkZXIKKyAgICBzaW5nbGU6IG1vZHVsZSBzcGVjCiAKIElmIHRoZSBuYW1lZCBtb2R1bGUgaXMgbm90IGZvdW5kIGluIDpkYXRhOmBzeXMubW9kdWxlc2AsIHRoZW4gUHl0aG9uJ3MgaW1wb3J0CiBwcm90b2NvbCBpcyBpbnZva2VkIHRvIGZpbmQgYW5kIGxvYWQgdGhlIG1vZHVsZS4gIFRoaXMgcHJvdG9jb2wgY29uc2lzdHMgb2YKQEAgLTIzMCwxMyArMjMxLDE3IEBACiByYW5nZSBhbmQgc2NvcGUgb2YgbW9kdWxlIHNlYXJjaGluZy4KIAogRmluZGVycyBkbyBub3QgYWN0dWFsbHkgbG9hZCBtb2R1bGVzLiAgSWYgdGhleSBjYW4gZmluZCB0aGUgbmFtZWQgbW9kdWxlLCB0aGV5Ci1yZXR1cm4gYSA6dGVybTpgbG9hZGVyYCwgd2hpY2ggdGhlIGltcG9ydCBtYWNoaW5lcnkgdGhlbiBpbnZva2VzIHRvIGxvYWQgdGhlCi1tb2R1bGUgYW5kIGNyZWF0ZSB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUgb2JqZWN0LgorcmV0dXJuIGEgOmRmbjpgbW9kdWxlIHNwZWNgLCBhbiBlbmNhcHN1bGF0aW9uIG9mIHRoZSBtb2R1bGUncyBpbXBvcnQtcmVsYXRlZAoraW5mb3JtYXRpb24sIHdoaWNoIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHRoZW4gdXNlcyB3aGVuIGxvYWRpbmcgdGhlIG1vZHVsZS4KIAogVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSB0aGUgcHJvdG9jb2wgZm9yIGZpbmRlcnMgYW5kIGxvYWRlcnMgaW4gbW9yZQogZGV0YWlsLCBpbmNsdWRpbmcgaG93IHlvdSBjYW4gY3JlYXRlIGFuZCByZWdpc3RlciBuZXcgb25lcyB0byBleHRlbmQgdGhlCiBpbXBvcnQgbWFjaGluZXJ5LgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgUHl0aG9uLCBmaW5kZXJzIHJldHVybmVkIDp0ZXJtOmBsb2FkZXJzIDxsb2FkZXI+YAorICAgZGlyZWN0bHksIHdoZXJlYXMgbm93IHRoZXkgcmV0dXJuIG1vZHVsZSBzcGVjcyB3aGljaCAqY29udGFpbiogbG9hZGVycy4KKyAgIExvYWRlcnMgYXJlIHN0aWxsIHVzZWQgZHVyaW5nIGltcG9ydCBidXQgaGF2ZSBmZXdlciByZXNwb25zaWJpbGl0aWVzLgogCiBJbXBvcnQgaG9va3MKIC0tLS0tLS0tLS0tLQpAQCAtMjcwLDQxICsyNzUsNDMgQEAKIAogLi4gaW5kZXg6OgogICAgIHNpbmdsZTogc3lzLm1ldGFfcGF0aAotICAgIHBhaXI6IGZpbmRlcjsgZmluZF9tb2R1bGUKLSAgICBwYWlyOiBmaW5kZXI7IGZpbmRfbG9hZGVyCisgICAgcGFpcjogZmluZGVyOyBmaW5kX3NwZWMKIAogV2hlbiB0aGUgbmFtZWQgbW9kdWxlIGlzIG5vdCBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBQeXRob24gbmV4dAogc2VhcmNoZXMgOmRhdGE6YHN5cy5tZXRhX3BhdGhgLCB3aGljaCBjb250YWlucyBhIGxpc3Qgb2YgbWV0YSBwYXRoIGZpbmRlcgogb2JqZWN0cy4gIFRoZXNlIGZpbmRlcnMgYXJlIHF1ZXJpZWQgaW4gb3JkZXIgdG8gc2VlIGlmIHRoZXkga25vdyBob3cgdG8gaGFuZGxlCiB0aGUgbmFtZWQgbW9kdWxlLiAgTWV0YSBwYXRoIGZpbmRlcnMgbXVzdCBpbXBsZW1lbnQgYSBtZXRob2QgY2FsbGVkCi06bWV0aDpgZmluZF9tb2R1bGUoKWAgd2hpY2ggdGFrZXMgdHdvIGFyZ3VtZW50cywgYSBuYW1lIGFuZCBhbiBpbXBvcnQgcGF0aC4KLVRoZSBtZXRhIHBhdGggZmluZGVyIGNhbiB1c2UgYW55IHN0cmF0ZWd5IGl0IHdhbnRzIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGNhbgotaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUgb3Igbm90LgorOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlYygpYCB3aGljaCB0YWtlcyB0aHJlZSBhcmd1bWVudHM6CithIG5hbWUsIGFuIGltcG9ydCBwYXRoLCBhbmQgKG9wdGlvbmFsbHkpIGEgdGFyZ2V0IG1vZHVsZS4gIFRoZSBtZXRhIHBhdGgKK2ZpbmRlciBjYW4gdXNlIGFueSBzdHJhdGVneSBpdCB3YW50cyB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBjYW4gaGFuZGxlCit0aGUgbmFtZWQgbW9kdWxlIG9yIG5vdC4KIAogSWYgdGhlIG1ldGEgcGF0aCBmaW5kZXIga25vd3MgaG93IHRvIGhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlLCBpdCByZXR1cm5zIGEKLWxvYWRlciBvYmplY3QuICBJZiBpdCBjYW5ub3QgaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUsIGl0IHJldHVybnMgYGBOb25lYGAuICBJZgorc3BlYyBvYmplY3QuICBJZiBpdCBjYW5ub3QgaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUsIGl0IHJldHVybnMgYGBOb25lYGAuICBJZgogOmRhdGE6YHN5cy5tZXRhX3BhdGhgIHByb2Nlc3NpbmcgcmVhY2hlcyB0aGUgZW5kIG9mIGl0cyBsaXN0IHdpdGhvdXQgcmV0dXJuaW5nCi1hIGxvYWRlciwgdGhlbiBhbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLiAgQW55IG90aGVyIGV4Y2VwdGlvbnMgcmFpc2VkCithIHNwZWMsIHRoZW4gYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4gIEFueSBvdGhlciBleGNlcHRpb25zIHJhaXNlZAogYXJlIHNpbXBseSBwcm9wYWdhdGVkIHVwLCBhYm9ydGluZyB0aGUgaW1wb3J0IHByb2Nlc3MuCiAKLVRoZSA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIG9mIG1ldGEgcGF0aCBmaW5kZXJzIGlzIGNhbGxlZCB3aXRoIHR3bwotYXJndW1lbnRzLiAgVGhlIGZpcnN0IGlzIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nCi1pbXBvcnRlZCwgZm9yIGV4YW1wbGUgYGBmb28uYmFyLmJhemBgLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgcGF0aAotZW50cmllcyB0byB1c2UgZm9yIHRoZSBtb2R1bGUgc2VhcmNoLiAgRm9yIHRvcC1sZXZlbCBtb2R1bGVzLCB0aGUgc2Vjb25kCi1hcmd1bWVudCBpcyBgYE5vbmVgYCwgYnV0IGZvciBzdWJtb2R1bGVzIG9yIHN1YnBhY2thZ2VzLCB0aGUgc2Vjb25kCi1hcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHBhcmVudCBwYWNrYWdlJ3MgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZS4gSWYKLXRoZSBhcHByb3ByaWF0ZSBgYF9fcGF0aF9fYGAgYXR0cmlidXRlIGNhbm5vdCBiZSBhY2Nlc3NlZCwgYW4KLTpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCitUaGUgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlYygpYCBtZXRob2Qgb2YgbWV0YSBwYXRoCitmaW5kZXJzIGlzIGNhbGxlZCB3aXRoIHR3byBvciB0aHJlZSBhcmd1bWVudHMuICBUaGUgZmlyc3QgaXMgdGhlIGZ1bGx5CitxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkLCBmb3IgZXhhbXBsZSBgYGZvby5iYXIuYmF6YGAuCitUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBwYXRoIGVudHJpZXMgdG8gdXNlIGZvciB0aGUgbW9kdWxlIHNlYXJjaC4gIEZvcgordG9wLWxldmVsIG1vZHVsZXMsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYGBOb25lYGAsIGJ1dCBmb3Igc3VibW9kdWxlcyBvcgorc3VicGFja2FnZXMsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJlbnQgcGFja2FnZSdzCitgYF9fcGF0aF9fYGAgYXR0cmlidXRlLiBJZiB0aGUgYXBwcm9wcmlhdGUgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZSBjYW5ub3QKK2JlIGFjY2Vzc2VkLCBhbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLiAgVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuCitleGlzdGluZyBtb2R1bGUgb2JqZWN0IHRoYXQgd2lsbCBiZSB0aGUgdGFyZ2V0IG9mIGxvYWRpbmcgbGF0ZXIuICBUaGUKK2ltcG9ydCBzeXN0ZW0gcGFzc2VzIGluIGEgdGFyZ2V0IG1vZHVsZSBvbmx5IGR1cmluZyByZWxvYWQuCiAKIFRoZSBtZXRhIHBhdGggbWF5IGJlIHRyYXZlcnNlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBzaW5nbGUgaW1wb3J0IHJlcXVlc3QuCiBGb3IgZXhhbXBsZSwgYXNzdW1pbmcgbm9uZSBvZiB0aGUgbW9kdWxlcyBpbnZvbHZlZCBoYXMgYWxyZWFkeSBiZWVuIGNhY2hlZCwKIGltcG9ydGluZyBgYGZvby5iYXIuYmF6YGAgd2lsbCBmaXJzdCBwZXJmb3JtIGEgdG9wIGxldmVsIGltcG9ydCwgY2FsbGluZwotYGBtcGYuZmluZF9tb2R1bGUoImZvbyIsIE5vbmUpYGAgb24gZWFjaCBtZXRhIHBhdGggZmluZGVyIChgYG1wZmBgKS4gQWZ0ZXIKK2BgbXBmLmZpbmRfc3BlYygiZm9vIiwgTm9uZSwgTm9uZSlgYCBvbiBlYWNoIG1ldGEgcGF0aCBmaW5kZXIgKGBgbXBmYGApLiBBZnRlcgogYGBmb29gYCBoYXMgYmVlbiBpbXBvcnRlZCwgYGBmb28uYmFyYGAgd2lsbCBiZSBpbXBvcnRlZCBieSB0cmF2ZXJzaW5nIHRoZQogbWV0YSBwYXRoIGEgc2Vjb25kIHRpbWUsIGNhbGxpbmcKLWBgbXBmLmZpbmRfbW9kdWxlKCJmb28uYmFyIiwgZm9vLl9fcGF0aF9fKWBgLiBPbmNlIGBgZm9vLmJhcmBgIGhhcyBiZWVuCitgYG1wZi5maW5kX3NwZWMoImZvby5iYXIiLCBmb28uX19wYXRoX18sIE5vbmUpYGAuIE9uY2UgYGBmb28uYmFyYGAgaGFzIGJlZW4KIGltcG9ydGVkLCB0aGUgZmluYWwgdHJhdmVyc2FsIHdpbGwgY2FsbAotYGBtcGYuZmluZF9tb2R1bGUoImZvby5iYXIuYmF6IiwgZm9vLmJhci5fX3BhdGhfXylgYC4KK2BgbXBmLmZpbmRfc3BlYygiZm9vLmJhci5iYXoiLCBmb28uYmFyLl9fcGF0aF9fLCBOb25lKWBgLgogCiBTb21lIG1ldGEgcGF0aCBmaW5kZXJzIG9ubHkgc3VwcG9ydCB0b3AgbGV2ZWwgaW1wb3J0cy4gVGhlc2UgaW1wb3J0ZXJzIHdpbGwKIGFsd2F5cyByZXR1cm4gYGBOb25lYGAgd2hlbiBhbnl0aGluZyBvdGhlciB0aGFuIGBgTm9uZWBgIGlzIHBhc3NlZCBhcyB0aGUKQEAgLTMxNSwxMjkgKzMyMiwyMzYgQEAKIG1vZHVsZXMsIGFuZCBvbmUgdGhhdCBrbm93cyBob3cgdG8gaW1wb3J0IG1vZHVsZXMgZnJvbSBhbiA6dGVybTpgaW1wb3J0IHBhdGhgCiAoaS5lLiB0aGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCkuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlY2AgbWV0aG9kIG9mIG1ldGEgcGF0aAorICAgZmluZGVycyByZXBsYWNlZCA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9tb2R1bGVgLCB3aGljaAorICAgaXMgbm93IGRlcHJlY2F0ZWQuICBXaGlsZSBpdCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgd2l0aG91dCBjaGFuZ2UsIHRoZQorICAgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHRyeSBpdCBvbmx5IGlmIHRoZSBmaW5kZXIgZG9lcyBub3QgaW1wbGVtZW50CisgICBgYGZpbmRfc3BlYygpYGAuCiAKLUxvYWRlcnMKKworTG9hZGluZwogPT09PT09PQogCi1JZiBhbmQgd2hlbiBhIG1vZHVsZSBsb2FkZXIgaXMgZm91bmQgaXRzCi06bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYCBtZXRob2QgaXMgY2FsbGVkLCB3aXRoIGEgc2luZ2xlCi1hcmd1bWVudCwgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQuICBUaGlzIG1ldGhvZAotaGFzIHNldmVyYWwgcmVzcG9uc2liaWxpdGllcywgYW5kIHNob3VsZCByZXR1cm4gdGhlIG1vZHVsZSBvYmplY3QgaXQgaGFzCi1sb2FkZWQgWyNmbmxvXV8uICBJZiBpdCBjYW5ub3QgbG9hZCB0aGUgbW9kdWxlLCBpdCBzaG91bGQgcmFpc2UgYW4KLTpleGM6YEltcG9ydEVycm9yYCwgYWx0aG91Z2ggYW55IG90aGVyIGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nCi06bWV0aDpgbG9hZF9tb2R1bGUoKWAgd2lsbCBiZSBwcm9wYWdhdGVkLgorSWYgYW5kIHdoZW4gYSBtb2R1bGUgc3BlYyBpcyBmb3VuZCwgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbCB1c2UgaXQgKGFuZAordGhlIGxvYWRlciBpdCBjb250YWlucykgd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuICBIZXJlIGlzIGFuIGFwcHJveGltYXRpb24KK29mIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIGxvYWRpbmcgcG9ydGlvbiBvZiBpbXBvcnQ6OgogCi1JbiBtYW55IGNhc2VzLCB0aGUgZmluZGVyIGFuZCBsb2FkZXIgY2FuIGJlIHRoZSBzYW1lIG9iamVjdDsgaW4gc3VjaCBjYXNlcyB0aGUKLTptZXRoOmBmaW5kZXIuZmluZF9tb2R1bGUoKWAgd291bGQganVzdCByZXR1cm4gYGBzZWxmYGAuCisgICAgbW9kdWxlID0gTm9uZQorICAgIGlmIHNwZWMubG9hZGVyIGlzIG5vdCBOb25lIGFuZCBoYXNhdHRyKHNwZWMubG9hZGVyLCAnY3JlYXRlX21vZHVsZScpOgorICAgICAgICBtb2R1bGUgPSBzcGVjLmxvYWRlci5jcmVhdGVfbW9kdWxlKHNwZWMpCisgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgIG1vZHVsZSA9IE1vZHVsZVR5cGUoc3BlYy5uYW1lKQorICAgICMgVGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIGdldCBzZXQgaGVyZToKKyAgICBfaW5pdF9tb2R1bGVfYXR0cnMoc3BlYywgbW9kdWxlKQogCi1Mb2FkZXJzIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKyAgICBpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBuYW1lc3BhY2UgcGFja2FnZQorICAgICAgICAgICAgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXSA9IG1vZHVsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB1bnN1cHBvcnRlZAorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICBlbGlmIG5vdCBoYXNhdHRyKHNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgbW9kdWxlID0gc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUoc3BlYy5uYW1lKQorICAgICAgICAjIFNldCBfX2xvYWRlcl9fIGFuZCBfX3BhY2thZ2VfXyBpZiBtaXNzaW5nLgorICAgIGVsc2U6CisgICAgICAgIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0gPSBtb2R1bGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3BlYy5sb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJhaXNlCisgICAgcmV0dXJuIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0KKworTm90ZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6CiAKICAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG1vZHVsZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbgotICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IHVzZSB0aGF0IGV4aXN0aW5nIG1vZHVsZS4gIChPdGhlcndpc2UsCi0gICA6ZnVuYzpgaW1wLnJlbG9hZGAgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuKSAgSWYgdGhlIG5hbWVkIG1vZHVsZSBkb2VzCi0gICBub3QgZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IGNyZWF0ZSBhIG5ldyBtb2R1bGUKLSAgIG9iamVjdCBhbmQgYWRkIGl0IHRvIDpkYXRhOmBzeXMubW9kdWxlc2AuCisgICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBpbXBvcnQgd2lsbCBoYXZlIGFscmVhZHkgcmV0dXJuZWQgaXQuCiAKLSAgIE5vdGUgdGhhdCB0aGUgbW9kdWxlICptdXN0KiBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyCisgKiBUaGUgbW9kdWxlIHdpbGwgZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCBiZWZvcmUgdGhlIGxvYWRlcgogICAgZXhlY3V0ZXMgdGhlIG1vZHVsZSBjb2RlLiAgVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgdGhlIG1vZHVsZSBjb2RlIG1heQogICAgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGltcG9ydCBpdHNlbGY7IGFkZGluZyBpdCB0byA6ZGF0YTpgc3lzLm1vZHVsZXNgCiAgICBiZWZvcmVoYW5kIHByZXZlbnRzIHVuYm91bmRlZCByZWN1cnNpb24gaW4gdGhlIHdvcnN0IGNhc2UgYW5kIG11bHRpcGxlCiAgICBsb2FkaW5nIGluIHRoZSBiZXN0LgogCi0gICBJZiBsb2FkaW5nIGZhaWxzLCB0aGUgbG9hZGVyIG11c3QgcmVtb3ZlIGFueSBtb2R1bGVzIGl0IGhhcyBpbnNlcnRlZCBpbnRvCi0gICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBidXQgaXQgbXVzdCByZW1vdmUgKipvbmx5KiogdGhlIGZhaWxpbmcgbW9kdWxlLCBhbmQKLSAgIG9ubHkgaWYgdGhlIGxvYWRlciBpdHNlbGYgaGFzIGxvYWRlZCBpdCBleHBsaWNpdGx5LiAgQW55IG1vZHVsZSBhbHJlYWR5IGluCi0gICB0aGUgOmRhdGE6YHN5cy5tb2R1bGVzYCBjYWNoZSwgYW5kIGFueSBtb2R1bGUgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZAotICAgYXMgYSBzaWRlLWVmZmVjdCwgbXVzdCByZW1haW4gaW4gdGhlIGNhY2hlLgorICogSWYgbG9hZGluZyBmYWlscywgdGhlIGZhaWxpbmcgbW9kdWxlIC0tIGFuZCBvbmx5IHRoZSBmYWlsaW5nIG1vZHVsZSAtLQorICAgZ2V0cyByZW1vdmVkIGZyb20gOmRhdGE6YHN5cy5tb2R1bGVzYC4gIEFueSBtb2R1bGUgYWxyZWFkeSBpbiB0aGUKKyAgIDpkYXRhOmBzeXMubW9kdWxlc2AgY2FjaGUsIGFuZCBhbnkgbW9kdWxlIHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBsb2FkZWQKKyAgIGFzIGEgc2lkZS1lZmZlY3QsIG11c3QgcmVtYWluIGluIHRoZSBjYWNoZS4gIFRoaXMgY29udHJhc3RzIHdpdGgKKyAgIHJlbG9hZGluZyB3aGVyZSBldmVuIHRoZSBmYWlsaW5nIG1vZHVsZSBpcyBsZWZ0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AuCiAKLSAqIFRoZSBsb2FkZXIgbWF5IHNldCB0aGUgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgbW9kdWxlLiAgSWYgc2V0LCB0aGlzCi0gICBhdHRyaWJ1dGUncyB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nLiAgVGhlIGxvYWRlciBtYXkgb3B0IHRvIGxlYXZlCi0gICBgYF9fZmlsZV9fYGAgdW5zZXQgaWYgaXQgaGFzIG5vIHNlbWFudGljIG1lYW5pbmcgKGUuZy4gYSBtb2R1bGUgbG9hZGVkIGZyb20KLSAgIGEgZGF0YWJhc2UpLiBJZiBgYF9fZmlsZV9fYGAgaXMgc2V0LCBpdCBtYXkgYWxzbyBiZSBhcHByb3ByaWF0ZSB0byBzZXQgdGhlCi0gICBgYF9fY2FjaGVkX19gYCBhdHRyaWJ1dGUgd2hpY2ggaXMgdGhlIHBhdGggdG8gYW55IGNvbXBpbGVkIHZlcnNpb24gb2YgdGhlCi0gICBjb2RlIChlLmcuIGJ5dGUtY29tcGlsZWQgZmlsZSkuIFRoZSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3QgdG8gc2V0IHRoaXMKLSAgIGF0dHJpYnV0ZTsgdGhlIHBhdGggY2FuIHNpbXBseSBwb2ludCB0byB3aGV0aGVyIHRoZSBjb21waWxlZCBmaWxlIHdvdWxkCi0gICBleGlzdCAoc2VlIDpwZXA6YDMxNDdgKS4KKyAqIEFmdGVyIHRoZSBtb2R1bGUgaXMgY3JlYXRlZCBidXQgYmVmb3JlIGV4ZWN1dGlvbiwgdGhlIGltcG9ydCBtYWNoaW5lcnkKKyAgIHNldHMgdGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzICgiX2luaXRfbW9kdWxlX2F0dHJzIiBpbgorICAgdGhlIHBzZXVkby1jb2RlIGV4YW1wbGUgYWJvdmUpLCBhcyBzdW1tYXJpemVkIGluIGEKKyAgIDpyZWY6YGxhdGVyIHNlY3Rpb24gPGltcG9ydC1tb2QtYXR0cnM+YC4KIAotICogVGhlIGxvYWRlciBtYXkgc2V0IHRoZSBgYF9fbmFtZV9fYGAgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUuICBXaGlsZSBub3QKLSAgIHJlcXVpcmVkLCBzZXR0aW5nIHRoaXMgYXR0cmlidXRlIGlzIGhpZ2hseSByZWNvbW1lbmRlZCBzbyB0aGF0IHRoZQotICAgOm1ldGg6YHJlcHIoKWAgb2YgdGhlIG1vZHVsZSBpcyBtb3JlIGluZm9ybWF0aXZlLgorICogTW9kdWxlIGV4ZWN1dGlvbiBpcyB0aGUga2V5IG1vbWVudCBvZiBsb2FkaW5nIGluIHdoaWNoIHRoZSBtb2R1bGUncworICAgbmFtZXNwYWNlIGdldHMgcG9wdWxhdGVkLiAgRXhlY3V0aW9uIGlzIGVudGlyZWx5IGRlbGVnYXRlZCB0byB0aGUKKyAgIGxvYWRlciwgd2hpY2ggZ2V0cyB0byBkZWNpZGUgd2hhdCBnZXRzIHBvcHVsYXRlZCBhbmQgaG93LgogCi0gKiBJZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSAoZWl0aGVyIHJlZ3VsYXIgb3IgbmFtZXNwYWNlKSwgdGhlIGxvYWRlciBtdXN0Ci0gICBzZXQgdGhlIG1vZHVsZSBvYmplY3QncyBgYF9fcGF0aF9fYGAgYXR0cmlidXRlLiAgVGhlIHZhbHVlIG11c3QgYmUKLSAgIGl0ZXJhYmxlLCBidXQgbWF5IGJlIGVtcHR5IGlmIGBgX19wYXRoX19gYCBoYXMgbm8gZnVydGhlciBzaWduaWZpY2FuY2UKLSAgIHRvIHRoZSBsb2FkZXIuIElmIGBgX19wYXRoX19gYCBpcyBub3QgZW1wdHksIGl0IG11c3QgcHJvZHVjZSBzdHJpbmdzCi0gICB3aGVuIGl0ZXJhdGVkIG92ZXIuIE1vcmUgZGV0YWlscyBvbiB0aGUgc2VtYW50aWNzIG9mIGBgX19wYXRoX19gYCBhcmUKLSAgIGdpdmVuIDpyZWY6YGJlbG93IDxwYWNrYWdlLXBhdGgtcnVsZXM+YC4KKyAqIFRoZSBtb2R1bGUgY3JlYXRlZCBkdXJpbmcgbG9hZGluZyBhbmQgcGFzc2VkIHRvIGV4ZWNfbW9kdWxlKCkgbWF5CisgICBub3QgYmUgdGhlIG9uZSByZXR1cm5lZCBhdCB0aGUgZW5kIG9mIGltcG9ydCBbI2ZubG9dXy4KIAotICogVGhlIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbG9hZGVyIG9iamVjdCB0aGF0IGxvYWRlZAotICAgdGhlIG1vZHVsZS4gIFRoaXMgaXMgbW9zdGx5IGZvciBpbnRyb3NwZWN0aW9uIGFuZCByZWxvYWRpbmcsIGJ1dCBjYW4gYmUKLSAgIHVzZWQgZm9yIGFkZGl0aW9uYWwgbG9hZGVyLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGZvciBleGFtcGxlIGdldHRpbmcKLSAgIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbG9hZGVyLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBpbXBvcnQgc3lzdGVtIGhhcyB0YWtlbiBvdmVyIHRoZSBib2lsZXJwbGF0ZSByZXNwb25zaWJpbGl0aWVzIG9mCisgICBsb2FkZXJzLiAgVGhlc2Ugd2VyZSBwcmV2aW91c2x5IHBlcmZvcm1lZCBieSB0aGUKKyAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAgbWV0aG9kLgogCi0gKiBUaGUgbW9kdWxlJ3MgYGBfX3BhY2thZ2VfX2BgIGF0dHJpYnV0ZSBzaG91bGQgYmUgc2V0LiAgSXRzIHZhbHVlIG11c3QgYmUgYQotICAgc3RyaW5nLCBidXQgaXQgY2FuIGJlIHRoZSBzYW1lIHZhbHVlIGFzIGl0cyBgYF9fbmFtZV9fYGAuICBJZiB0aGUgYXR0cmlidXRlCi0gICBpcyBzZXQgdG8gYGBOb25lYGAgb3IgaXMgbWlzc2luZywgdGhlIGltcG9ydCBzeXN0ZW0gd2lsbCBmaWxsIGl0IGluIHdpdGggYQotICAgbW9yZSBhcHByb3ByaWF0ZSB2YWx1ZS4gIFdoZW4gdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIGl0cyBgYF9fcGFja2FnZV9fYGAKLSAgIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gaXRzIGBgX19uYW1lX19gYC4gIFdoZW4gdGhlIG1vZHVsZSBpcyBub3QgYSBwYWNrYWdlLAotICAgYGBfX3BhY2thZ2VfX2BgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3IgdG9wLWxldmVsIG1vZHVsZXMsIG9yCi0gICBmb3Igc3VibW9kdWxlcywgdG8gdGhlIHBhcmVudCBwYWNrYWdlJ3MgbmFtZS4gIFNlZSA6cGVwOmAzNjZgIGZvciBmdXJ0aGVyCi0gICBkZXRhaWxzLgorTG9hZGVycworLS0tLS0tLQogCi0gICBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGluc3RlYWQgb2YgYGBfX25hbWVfX2BgIHRvIGNhbGN1bGF0ZSBleHBsaWNpdAotICAgcmVsYXRpdmUgaW1wb3J0cyBmb3IgbWFpbiBtb2R1bGVzLCBhcyBkZWZpbmVkIGluIDpwZXA6YDM2NmAuCitNb2R1bGUgbG9hZGVycyBwcm92aWRlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBvZiBsb2FkaW5nOiBtb2R1bGUgZXhlY3V0aW9uLgorVGhlIGltcG9ydCBtYWNoaW5lcnkgY2FsbHMgdGhlIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5leGVjX21vZHVsZWAKK21ldGhvZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50LCB0aGUgbW9kdWxlIG9iamVjdCB0byBleGVjdXRlLiAgQW55IHZhbHVlCityZXR1cm5lZCBmcm9tIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIuZXhlY19tb2R1bGVgIGlzIGlnbm9yZWQuCisKK0xvYWRlcnMgbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzOgogCiAgKiBJZiB0aGUgbW9kdWxlIGlzIGEgUHl0aG9uIG1vZHVsZSAoYXMgb3Bwb3NlZCB0byBhIGJ1aWx0LWluIG1vZHVsZSBvciBhCiAgICBkeW5hbWljYWxseSBsb2FkZWQgZXh0ZW5zaW9uKSwgdGhlIGxvYWRlciBzaG91bGQgZXhlY3V0ZSB0aGUgbW9kdWxlJ3MgY29kZQogICAgaW4gdGhlIG1vZHVsZSdzIGdsb2JhbCBuYW1lIHNwYWNlIChgYG1vZHVsZS5fX2RpY3RfX2BgKS4KIAorICogSWYgdGhlIGxvYWRlciBjYW5ub3QgZXhlY3V0ZSB0aGUgbW9kdWxlLCBpdCBzaG91bGQgcmFpc2UgYW4KKyAgIDpleGM6YEltcG9ydEVycm9yYCwgYWx0aG91Z2ggYW55IG90aGVyIGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nCisgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLmV4ZWNfbW9kdWxlYCB3aWxsIGJlIHByb3BhZ2F0ZWQuCiAKLU1vZHVsZSByZXBycwotLS0tLS0tLS0tLS0tCitJbiBtYW55IGNhc2VzLCB0aGUgZmluZGVyIGFuZCBsb2FkZXIgY2FuIGJlIHRoZSBzYW1lIG9iamVjdDsgaW4gc3VjaCBjYXNlcyB0aGUKKzptZXRoOmB+aW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX3NwZWNgIG1ldGhvZCB3b3VsZCBqdXN0IHJldHVybiBhCitzcGVjIHdpdGggdGhlIGxvYWRlciBzZXQgdG8gYGBzZWxmYGAuCiAKLUJ5IGRlZmF1bHQsIGFsbCBtb2R1bGVzIGhhdmUgYSB1c2FibGUgcmVwciwgaG93ZXZlciBkZXBlbmRpbmcgb24gdGhlCi1hdHRyaWJ1dGVzIHNldCBhYm92ZSwgYW5kIGhvb2tzIGluIHRoZSBsb2FkZXIsIHlvdSBjYW4gbW9yZSBleHBsaWNpdGx5IGNvbnRyb2wKLXRoZSByZXByIG9mIG1vZHVsZSBvYmplY3RzLgorTW9kdWxlIGxvYWRlcnMgbWF5IG9wdCBpbiB0byBjcmVhdGluZyB0aGUgbW9kdWxlIG9iamVjdCBkdXJpbmcgbG9hZGluZworYnkgaW1wbGVtZW50aW5nIGEgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkxvYWRlci5jcmVhdGVfbW9kdWxlYCBtZXRob2QuCitJdCB0YWtlcyBvbmUgYXJndW1lbnQsIHRoZSBtb2R1bGUgc3BlYywgYW5kIHJldHVybnMgdGhlIG5ldyBtb2R1bGUgb2JqZWN0Cit0byB1c2UgZHVyaW5nIGxvYWRpbmcuICBgYGNyZWF0ZV9tb2R1bGUoKWBgIGRvZXMgbm90IG5lZWQgdG8gc2V0IGFueSBhdHRyaWJ1dGVzCitvbiB0aGUgbW9kdWxlIG9iamVjdC4gIElmIHRoZSBsb2FkZXIgZG9lcyBub3QgZGVmaW5lIGBgY3JlYXRlX21vZHVsZSgpYGAsIHRoZQoraW1wb3J0IG1hY2hpbmVyeSB3aWxsIGNyZWF0ZSB0aGUgbmV3IG1vZHVsZSBpdHNlbGYuCiAKLUxvYWRlcnMgbWF5IGltcGxlbWVudCBhIDptZXRoOmBtb2R1bGVfcmVwcigpYCBtZXRob2Qgd2hpY2ggdGFrZXMgYSBzaW5nbGUKLWFyZ3VtZW50LCB0aGUgbW9kdWxlIG9iamVjdC4gIFdoZW4gYGByZXByKG1vZHVsZSlgYCBpcyBjYWxsZWQgZm9yIGEgbW9kdWxlCi13aXRoIGEgbG9hZGVyIHN1cHBvcnRpbmcgdGhpcyBwcm90b2NvbCwgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgZnJvbQotYGBtb2R1bGUuX19sb2FkZXJfXy5tb2R1bGVfcmVwcihtb2R1bGUpYGAgaXMgcmV0dXJuZWQgYXMgdGhlIG1vZHVsZSdzIHJlcHIKLXdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLiAgVGhpcyByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZy4KKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgVGhlIGNyZWF0ZV9tb2R1bGUoKSBtZXRob2Qgb2YgbG9hZGVycy4KIAotSWYgdGhlIG1vZHVsZSBoYXMgbm8gYGBfX2xvYWRlcl9fYGAgYXR0cmlidXRlLCBvciB0aGUgbG9hZGVyIGhhcyBubwotOm1ldGg6YG1vZHVsZV9yZXByKClgIG1ldGhvZCwgdGhlbiB0aGUgbW9kdWxlIG9iamVjdCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYKLXdpbGwgY3JhZnQgYSBkZWZhdWx0IHJlcHIgdXNpbmcgd2hhdGV2ZXIgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLiAgSXQgd2lsbAotdHJ5IHRvIHVzZSB0aGUgYGBtb2R1bGUuX19uYW1lX19gYCwgYGBtb2R1bGUuX19maWxlX19gYCwgYW5kCi1gYG1vZHVsZS5fX2xvYWRlcl9fYGAgYXMgaW5wdXQgaW50byB0aGUgcmVwciwgd2l0aCBkZWZhdWx0cyBmb3Igd2hhdGV2ZXIKLWluZm9ybWF0aW9uIGlzIG1pc3NpbmcuCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIG1ldGhvZCB3YXMgcmVwbGFjZWQgYnkKKyAgIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIuZXhlY19tb2R1bGVgIGFuZCB0aGUgaW1wb3J0CisgICBtYWNoaW5lcnkgYXNzdW1lZCBhbGwgdGhlIGJvaWxlcnBsYXRlIHJlc3BvbnNpYmlsaXRpZXMgb2YgbG9hZGluZy4KIAotSGVyZSBhcmUgdGhlIGV4YWN0IHJ1bGVzIHVzZWQ6CisgICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGxvYWRlcnMsIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHdpbGwgdXNlCisgICB0aGUgYGBsb2FkX21vZHVsZSgpYGAgbWV0aG9kIG9mIGxvYWRlcnMgaWYgaXQgZXhpc3RzIGFuZCB0aGUgbG9hZGVyIGRvZXMKKyAgIG5vdCBhbHNvIGltcGxlbWVudCBgYGV4ZWNfbW9kdWxlKClgYC4gIEhvd2V2ZXIsIGBgbG9hZF9tb2R1bGUoKWBgIGhhcyBiZWVuCisgICBkZXByZWNhdGVkIGFuZCBsb2FkZXJzIHNob3VsZCBpbXBsZW1lbnQgYGBleGVjX21vZHVsZSgpYGAgaW5zdGVhZC4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fbG9hZGVyX19gYCBhbmQgdGhhdCBsb2FkZXIgaGFzIGEKLSAgIDptZXRoOmBtb2R1bGVfcmVwcigpYCBtZXRob2QsIGNhbGwgaXQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCwgd2hpY2ggaXMgdGhlCi0gICBtb2R1bGUgb2JqZWN0LiAgVGhlIHZhbHVlIHJldHVybmVkIGlzIHVzZWQgYXMgdGhlIG1vZHVsZSdzIHJlcHIuCisgICBUaGUgYGBsb2FkX21vZHVsZSgpYGAgbWV0aG9kIG11c3QgaW1wbGVtZW50IGFsbCB0aGUgYm9pbGVycGxhdGUgbG9hZGluZworICAgZnVuY3Rpb25hbGl0eSBkZXNjcmliZWQgYWJvdmUgaW4gYWRkaXRpb24gdG8gZXhlY3V0aW5nIHRoZSBtb2R1bGUuICBBbGwKKyAgIHRoZSBzYW1lIGNvbnN0cmFpbnRzIGFwcGx5LCB3aXRoIHNvbWUgYWRkaXRpb25hbCBjbGFyaWZpY2F0aW9uOgogCi0gKiBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIDptZXRoOmBtb2R1bGVfcmVwcigpYCwgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQKLSAgIGFuZCBkaXNjYXJkZWQsIGFuZCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIG1vZHVsZSdzIHJlcHIgY29udGludWVzIGFzIGlmCi0gICA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgZGlkIG5vdCBleGlzdC4KKyAgICAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG1vZHVsZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbgorICAgICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IHVzZSB0aGF0IGV4aXN0aW5nIG1vZHVsZS4KKyAgICAgIChPdGhlcndpc2UsIDpmdW5jOmBpbXBvcnRsaWIucmVsb2FkYCB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS4pICBJZiB0aGUKKyAgICAgIG5hbWVkIG1vZHVsZSBkb2VzIG5vdCBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGUgbG9hZGVyCisgICAgICBtdXN0IGNyZWF0ZSBhIG5ldyBtb2R1bGUgb2JqZWN0IGFuZCBhZGQgaXQgdG8gOmRhdGE6YHN5cy5tb2R1bGVzYC4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlLCB0aGlzIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUKLSAgIG1vZHVsZSdzIHJlcHIuCisgICAgKiBUaGUgbW9kdWxlICptdXN0KiBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyCisgICAgICBleGVjdXRlcyB0aGUgbW9kdWxlIGNvZGUsIHRvIHByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiBvciBtdWx0aXBsZQorICAgICAgbG9hZGluZy4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgbm8gYGBfX2ZpbGVfX2BgIGJ1dCBkb2VzIGhhdmUgYSBgYF9fbG9hZGVyX19gYCwgdGhlbiB0aGUKLSAgIGxvYWRlcidzIHJlcHIgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBtb2R1bGUncyByZXByLgorICAgICogSWYgbG9hZGluZyBmYWlscywgdGhlIGxvYWRlciBtdXN0IHJlbW92ZSBhbnkgbW9kdWxlcyBpdCBoYXMgaW5zZXJ0ZWQKKyAgICAgIGludG8gOmRhdGE6YHN5cy5tb2R1bGVzYCwgYnV0IGl0IG11c3QgcmVtb3ZlICoqb25seSoqIHRoZSBmYWlsaW5nCisgICAgICBtb2R1bGUsIGFuZCBvbmx5IGlmIHRoZSBsb2FkZXIgaXRzZWxmIGhhcyBsb2FkZWQgaXQgZXhwbGljaXRseS4KIAotICogT3RoZXJ3aXNlLCBqdXN0IHVzZSB0aGUgbW9kdWxlJ3MgYGBfX25hbWVfX2BgIGluIHRoZSByZXByLgorTW9kdWxlIHNwZWMKKy0tLS0tLS0tLS0tCiAKLVRoaXMgZXhhbXBsZSwgZnJvbSA6cGVwOmA0MjBgIHNob3dzIGhvdyBhIGxvYWRlciBjYW4gY3JhZnQgaXRzIG93biBtb2R1bGUKLXJlcHI6OgorVGhlIGltcG9ydCBtYWNoaW5lcnkgdXNlcyBhIHZhcmlldHkgb2YgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBtb2R1bGUKK2R1cmluZyBpbXBvcnQsIGVzcGVjaWFsbHkgYmVmb3JlIGxvYWRpbmcuICBNb3N0IG9mIHRoZSBpbmZvcm1hdGlvbiBpcworY29tbW9uIHRvIGFsbCBtb2R1bGVzLiAgVGhlIHB1cnBvc2Ugb2YgYSBtb2R1bGUncyBzcGVjIGlzIHRvIGVuY2Fwc3VsYXRlCit0aGlzIGltcG9ydC1yZWxhdGVkIGluZm9ybWF0aW9uIG9uIGEgcGVyLW1vZHVsZSBiYXNpcy4KIAotICAgIGNsYXNzIE5hbWVzcGFjZUxvYWRlcjoKLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgICAgICByZXR1cm4gIjxtb2R1bGUgJ3t9JyAobmFtZXNwYWNlKT4iLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCitVc2luZyBhIHNwZWMgZHVyaW5nIGltcG9ydCBhbGxvd3Mgc3RhdGUgdG8gYmUgdHJhbnNmZXJyZWQgYmV0d2VlbiBpbXBvcnQKK3N5c3RlbSBjb21wb25lbnRzLCBlLmcuIGJldHdlZW4gdGhlIGZpbmRlciB0aGF0IGNyZWF0ZXMgdGhlIG1vZHVsZSBzcGVjCithbmQgdGhlIGxvYWRlciB0aGF0IGV4ZWN1dGVzIGl0LiAgTW9zdCBpbXBvcnRhbnRseSwgaXQgYWxsb3dzIHRoZQoraW1wb3J0IG1hY2hpbmVyeSB0byBwZXJmb3JtIHRoZSBib2lsZXJwbGF0ZSBvcGVyYXRpb25zIG9mIGxvYWRpbmcsCit3aGVyZWFzIHdpdGhvdXQgYSBtb2R1bGUgc3BlYyB0aGUgbG9hZGVyIGhhZCB0aGF0IHJlc3BvbnNpYmlsaXR5LgogCitTZWUgOmNsYXNzOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5Nb2R1bGVTcGVjYCBmb3IgbW9yZSBzcGVjaWZpY3Mgb24gd2hhdAoraW5mb3JtYXRpb24gYSBtb2R1bGUncyBzcGVjIG1heSBob2xkLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gX2ltcG9ydC1tb2QtYXR0cnM6CisKK0ltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW1wb3J0IG1hY2hpbmVyeSBmaWxscyBpbiB0aGVzZSBhdHRyaWJ1dGVzIG9uIGVhY2ggbW9kdWxlIG9iamVjdAorZHVyaW5nIGxvYWRpbmcsIGJhc2VkIG9uIHRoZSBtb2R1bGUncyBzcGVjLCBiZWZvcmUgdGhlIGxvYWRlciBleGVjdXRlcwordGhlIG1vZHVsZS4KKworLi4gYXR0cmlidXRlOjogX19uYW1lX18KKworICAgVGhlIGBgX19uYW1lX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgdG8gdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mCisgICB0aGUgbW9kdWxlLiAgVGhpcyBuYW1lIGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIG1vZHVsZSBpbgorICAgdGhlIGltcG9ydCBzeXN0ZW0uCisKKy4uIGF0dHJpYnV0ZTo6IF9fbG9hZGVyX18KKworICAgVGhlIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbG9hZGVyIG9iamVjdCB0aGF0CisgICB0aGUgaW1wb3J0IG1hY2hpbmVyeSB1c2VkIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLiAgVGhpcyBpcyBtb3N0bHkKKyAgIGZvciBpbnRyb3NwZWN0aW9uLCBidXQgY2FuIGJlIHVzZWQgZm9yIGFkZGl0aW9uYWwgbG9hZGVyLXNwZWNpZmljCisgICBmdW5jdGlvbmFsaXR5LCBmb3IgZXhhbXBsZSBnZXR0aW5nIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbG9hZGVyLgorCisuLiBhdHRyaWJ1dGU6OiBfX3BhY2thZ2VfXworCisgICBUaGUgbW9kdWxlJ3MgYGBfX3BhY2thZ2VfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldC4gIEl0cyB2YWx1ZSBtdXN0CisgICBiZSBhIHN0cmluZywgYnV0IGl0IGNhbiBiZSB0aGUgc2FtZSB2YWx1ZSBhcyBpdHMgYGBfX25hbWVfX2BgLiAgV2hlbgorICAgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIGl0cyBgYF9fcGFja2FnZV9fYGAgdmFsdWUgc2hvdWxkIGJlIHNldCB0bworICAgaXRzIGBgX19uYW1lX19gYC4gIFdoZW4gdGhlIG1vZHVsZSBpcyBub3QgYSBwYWNrYWdlLCBgYF9fcGFja2FnZV9fYGAKKyAgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3IgdG9wLWxldmVsIG1vZHVsZXMsIG9yIGZvcgorICAgc3VibW9kdWxlcywgdG8gdGhlIHBhcmVudCBwYWNrYWdlJ3MgbmFtZS4gIFNlZSA6cGVwOmAzNjZgIGZvciBmdXJ0aGVyCisgICBkZXRhaWxzLgorCisgICBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGluc3RlYWQgb2YgYGBfX25hbWVfX2BgIHRvIGNhbGN1bGF0ZSBleHBsaWNpdAorICAgcmVsYXRpdmUgaW1wb3J0cyBmb3IgbWFpbiBtb2R1bGVzLCBhcyBkZWZpbmVkIGluIDpwZXA6YDM2NmAuCisKKy4uIGF0dHJpYnV0ZTo6IF9fc3BlY19fCisKKyAgIFRoZSBgYF9fc3BlY19fYGAgYXR0cmlidXRlIG11c3QgYmUgc2V0IHRvIHRoZSBtb2R1bGUgc3BlYyB0aGF0IHdhcworICAgdXNlZCB3aGVuIGltcG9ydGluZyB0aGUgbW9kdWxlLiAgVGhpcyBpcyB1c2VkIHByaW1hcmlseSBmb3IKKyAgIGludHJvc3BlY3Rpb24gYW5kIGR1cmluZyByZWxvYWRpbmcuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBhdHRyaWJ1dGU6OiBfX3BhdGhfXworCisgICBJZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSAoZWl0aGVyIHJlZ3VsYXIgb3IgbmFtZXNwYWNlKSwgdGhlIG1vZHVsZQorICAgb2JqZWN0J3MgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldC4gIFRoZSB2YWx1ZSBtdXN0IGJlCisgICBpdGVyYWJsZSwgYnV0IG1heSBiZSBlbXB0eSBpZiBgYF9fcGF0aF9fYGAgaGFzIG5vIGZ1cnRoZXIgc2lnbmlmaWNhbmNlLgorICAgSWYgYGBfX3BhdGhfX2BgIGlzIG5vdCBlbXB0eSwgaXQgbXVzdCBwcm9kdWNlIHN0cmluZ3Mgd2hlbiBpdGVyYXRlZAorICAgb3Zlci4gTW9yZSBkZXRhaWxzIG9uIHRoZSBzZW1hbnRpY3Mgb2YgYGBfX3BhdGhfX2BgIGFyZSBnaXZlbgorICAgOnJlZjpgYmVsb3cgPHBhY2thZ2UtcGF0aC1ydWxlcz5gLgorCisgICBOb24tcGFja2FnZSBtb2R1bGVzIHNob3VsZCBub3QgaGF2ZSBhIGBgX19wYXRoX19gYCBhdHRyaWJ1dGUuCisKKy4uIGF0dHJpYnV0ZTo6IF9fZmlsZV9fCisuLiBhdHRyaWJ1dGU6OiBfX2NhY2hlZF9fCisKKyAgIGBgX19maWxlX19gYCBpcyBvcHRpb25hbC4gSWYgc2V0LCB0aGlzIGF0dHJpYnV0ZSdzIHZhbHVlIG11c3QgYmUgYQorICAgc3RyaW5nLiAgVGhlIGltcG9ydCBzeXN0ZW0gbWF5IG9wdCB0byBsZWF2ZSBgYF9fZmlsZV9fYGAgdW5zZXQgaWYgaXQKKyAgIGhhcyBubyBzZW1hbnRpYyBtZWFuaW5nIChlLmcuIGEgbW9kdWxlIGxvYWRlZCBmcm9tIGEgZGF0YWJhc2UpLgorCisgICBJZiBgYF9fZmlsZV9fYGAgaXMgc2V0LCBpdCBtYXkgYWxzbyBiZSBhcHByb3ByaWF0ZSB0byBzZXQgdGhlCisgICBgYF9fY2FjaGVkX19gYCBhdHRyaWJ1dGUgd2hpY2ggaXMgdGhlIHBhdGggdG8gYW55IGNvbXBpbGVkIHZlcnNpb24gb2YKKyAgIHRoZSBjb2RlIChlLmcuIGJ5dGUtY29tcGlsZWQgZmlsZSkuIFRoZSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3QKKyAgIHRvIHNldCB0aGlzIGF0dHJpYnV0ZTsgdGhlIHBhdGggY2FuIHNpbXBseSBwb2ludCB0byB3aGVyZSB0aGUKKyAgIGNvbXBpbGVkIGZpbGUgd291bGQgZXhpc3QgKHNlZSA6cGVwOmAzMTQ3YCkuCisKKyAgIEl0IGlzIGFsc28gYXBwcm9wcmlhdGUgdG8gc2V0IGBgX19jYWNoZWRfX2BgIHdoZW4gYGBfX2ZpbGVfX2BgIGlzIG5vdAorICAgc2V0LiAgSG93ZXZlciwgdGhhdCBzY2VuYXJpbyBpcyBxdWl0ZSBhdHlwaWNhbC4gIFVsdGltYXRlbHksIHRoZQorICAgbG9hZGVyIGlzIHdoYXQgbWFrZXMgdXNlIG9mIGBgX19maWxlX19gYCBhbmQvb3IgYGBfX2NhY2hlZF9fYGAuICBTbworICAgaWYgYSBsb2FkZXIgY2FuIGxvYWQgZnJvbSBhIGNhY2hlZCBtb2R1bGUgYnV0IG90aGVyd2lzZSBkb2VzIG5vdCBsb2FkCisgICBmcm9tIGEgZmlsZSwgdGhhdCBhdHlwaWNhbCBzY2VuYXJpbyBtYXkgYmUgYXBwcm9wcmlhdGUuCiAKIC4uIF9wYWNrYWdlLXBhdGgtcnVsZXM6CiAKQEAgLTQ2Miw5ICs1NzYsNDcgQEAKIGF0dHJpYnV0ZSwgYW5kIHRoaXMgd2FzIHR5cGljYWxseSB0aGUgd2F5IG5hbWVzcGFjZSBwYWNrYWdlcyB3ZXJlIGltcGxlbWVudGVkCiBwcmlvciB0byA6cGVwOmA0MjBgLiAgV2l0aCB0aGUgYWRvcHRpb24gb2YgOnBlcDpgNDIwYCwgbmFtZXNwYWNlIHBhY2thZ2VzIG5vCiBsb25nZXIgbmVlZCB0byBzdXBwbHkgYGBfX2luaXRfXy5weWBgIGZpbGVzIGNvbnRhaW5pbmcgb25seSBgYF9fcGF0aF9fYGAKLW1hbmlwdWxhdGlvbiBjb2RlOyB0aGUgbmFtZXNwYWNlIGxvYWRlciBhdXRvbWF0aWNhbGx5IHNldHMgYGBfX3BhdGhfX2BgCittYW5pcHVsYXRpb24gY29kZTsgdGhlIGltcG9ydCBtYWNoaW5lcnkgYXV0b21hdGljYWxseSBzZXRzIGBgX19wYXRoX19gYAogY29ycmVjdGx5IGZvciB0aGUgbmFtZXNwYWNlIHBhY2thZ2UuCiAKK01vZHVsZSByZXBycworLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIGFsbCBtb2R1bGVzIGhhdmUgYSB1c2FibGUgcmVwciwgaG93ZXZlciBkZXBlbmRpbmcgb24gdGhlCithdHRyaWJ1dGVzIHNldCBhYm92ZSwgYW5kIGluIHRoZSBtb2R1bGUncyBzcGVjLCB5b3UgY2FuIG1vcmUgZXhwbGljaXRseQorY29udHJvbCB0aGUgcmVwciBvZiBtb2R1bGUgb2JqZWN0cy4KKworSWYgdGhlIG1vZHVsZSBoYXMgYSBzcGVjIChgYF9fc3BlY19fYGApLCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHRyeQordG8gZ2VuZXJhdGUgYSByZXByIGZyb20gaXQuICBJZiB0aGF0IGZhaWxzIG9yIHRoZXJlIGlzIG5vIHNwZWMsIHRoZSBpbXBvcnQKK3N5c3RlbSB3aWxsIGNyYWZ0IGEgZGVmYXVsdCByZXByIHVzaW5nIHdoYXRldmVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZQorb24gdGhlIG1vZHVsZS4gIEl0IHdpbGwgdHJ5IHRvIHVzZSB0aGUgYGBtb2R1bGUuX19uYW1lX19gYCwKK2BgbW9kdWxlLl9fZmlsZV9fYGAsIGFuZCBgYG1vZHVsZS5fX2xvYWRlcl9fYGAgYXMgaW5wdXQgaW50byB0aGUgcmVwciwKK3dpdGggZGVmYXVsdHMgZm9yIHdoYXRldmVyIGluZm9ybWF0aW9uIGlzIG1pc3NpbmcuCisKK0hlcmUgYXJlIHRoZSBleGFjdCBydWxlcyB1c2VkOgorCisgKiBJZiB0aGUgbW9kdWxlIGhhcyBhIGBgX19zcGVjX19gYCBhdHRyaWJ1dGUsIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgc3BlYworICAgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcmVwci4gIFRoZSAibmFtZSIsICJsb2FkZXIiLCAib3JpZ2luIiwgYW5kCisgICAiaGFzX2xvY2F0aW9uIiBhdHRyaWJ1dGVzIGFyZSBjb25zdWx0ZWQuCisKKyAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSwgdGhpcyBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlCisgICBtb2R1bGUncyByZXByLgorCisgKiBJZiB0aGUgbW9kdWxlIGhhcyBubyBgYF9fZmlsZV9fYGAgYnV0IGRvZXMgaGF2ZSBhIGBgX19sb2FkZXJfX2BgIHRoYXQgaXMgbm90CisgICBgYE5vbmVgYCwgdGhlbiB0aGUgbG9hZGVyJ3MgcmVwciBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIG1vZHVsZSdzIHJlcHIuCisKKyAqIE90aGVyd2lzZSwganVzdCB1c2UgdGhlIG1vZHVsZSdzIGBgX19uYW1lX19gYCBpbiB0aGUgcmVwci4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFVzZSBvZiA6bWV0aDpgbG9hZGVyLm1vZHVsZV9yZXByKCkgPGltcG9ydGxpYi5hYmMuTG9hZGVyLm1vZHVsZV9yZXByPmAKKyAgIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHRoZSBtb2R1bGUgc3BlYyBpcyBub3cgdXNlZCBieSB0aGUgaW1wb3J0CisgICBtYWNoaW5lcnkgdG8gZ2VuZXJhdGUgYSBtb2R1bGUgcmVwci4KKworICAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMy4zLCB0aGUgbW9kdWxlIHJlcHIgd2lsbCBiZQorICAgZ2VuZXJhdGVkIGJ5IGNhbGxpbmcgdGhlIGxvYWRlcidzCisgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLm1vZHVsZV9yZXByYCBtZXRob2QsIGlmIGRlZmluZWQsIGJlZm9yZQorICAgdHJ5aW5nIGVpdGhlciBhcHByb2FjaCBkZXNjcmliZWQgYWJvdmUuICBIb3dldmVyLCB0aGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuCisKIAogVGhlIFBhdGggQmFzZWQgRmluZGVyCiA9PT09PT09PT09PT09PT09PT09PT0KQEAgLTQ3Myw4ICs2MjUsOSBAQAogICAgIHNpbmdsZTogcGF0aCBiYXNlZCBmaW5kZXIKIAogQXMgbWVudGlvbmVkIHByZXZpb3VzbHksIFB5dGhvbiBjb21lcyB3aXRoIHNldmVyYWwgZGVmYXVsdCBtZXRhIHBhdGggZmluZGVycy4KLU9uZSBvZiB0aGVzZSwgY2FsbGVkIHRoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgLCBzZWFyY2hlcyBhbiA6dGVybTpgaW1wb3J0Ci1wYXRoYCwgd2hpY2ggY29udGFpbnMgYSBsaXN0IG9mIDp0ZXJtOmBwYXRoIGVudHJpZXMgPHBhdGggZW50cnk+YC4gIEVhY2ggcGF0aAorT25lIG9mIHRoZXNlLCBjYWxsZWQgdGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAKKyg6Y2xhc3M6YH5pbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXJgKSwgc2VhcmNoZXMgYW4gOnRlcm06YGltcG9ydCBwYXRoYCwKK3doaWNoIGNvbnRhaW5zIGEgbGlzdCBvZiA6dGVybTpgcGF0aCBlbnRyaWVzIDxwYXRoIGVudHJ5PmAuICBFYWNoIHBhdGgKIGVudHJ5IG5hbWVzIGEgbG9jYXRpb24gdG8gc2VhcmNoIGZvciBtb2R1bGVzLgogCiBUaGUgcGF0aCBiYXNlZCBmaW5kZXIgaXRzZWxmIGRvZXNuJ3Qga25vdyBob3cgdG8gaW1wb3J0IGFueXRoaW5nLiBJbnN0ZWFkLCBpdApAQCAtNTIzLDE1ICs2NzYsMTUgQEAKICAgICBzaW5nbGU6IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlCiAgICAgc2luZ2xlOiBQWVRIT05QQVRICiAKLVRoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIGFuZCBsb2FkaW5nIFB5dGhvbgotbW9kdWxlcyBhbmQgcGFja2FnZXMgd2hvc2UgbG9jYXRpb24gaXMgc3BlY2lmaWVkIHdpdGggYSBzdHJpbmcgOnRlcm06YHBhdGgKLWVudHJ5YC4gIE1vc3QgcGF0aCBlbnRyaWVzIG5hbWUgbG9jYXRpb25zIGluIHRoZSBmaWxlIHN5c3RlbSwgYnV0IHRoZXkgbmVlZAotbm90IGJlIGxpbWl0ZWQgdG8gdGhpcy4KK1RoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIGFuZCBsb2FkaW5nCitQeXRob24gbW9kdWxlcyBhbmQgcGFja2FnZXMgd2hvc2UgbG9jYXRpb24gaXMgc3BlY2lmaWVkIHdpdGggYSBzdHJpbmcKKzp0ZXJtOmBwYXRoIGVudHJ5YC4gIE1vc3QgcGF0aCBlbnRyaWVzIG5hbWUgbG9jYXRpb25zIGluIHRoZSBmaWxlIHN5c3RlbSwKK2J1dCB0aGV5IG5lZWQgbm90IGJlIGxpbWl0ZWQgdG8gdGhpcy4KIAogQXMgYSBtZXRhIHBhdGggZmluZGVyLCB0aGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCBpbXBsZW1lbnRzIHRoZQotOm1ldGg6YGZpbmRfbW9kdWxlKClgIHByb3RvY29sIHByZXZpb3VzbHkgZGVzY3JpYmVkLCBob3dldmVyIGl0IGV4cG9zZXMKLWFkZGl0aW9uYWwgaG9va3MgdGhhdCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgaG93IG1vZHVsZXMgYXJlIGZvdW5kIGFuZAotbG9hZGVkIGZyb20gdGhlIDp0ZXJtOmBpbXBvcnQgcGF0aGAuCis6bWV0aDpgfmltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9zcGVjYCBwcm90b2NvbCBwcmV2aW91c2x5CitkZXNjcmliZWQsIGhvd2V2ZXIgaXQgZXhwb3NlcyBhZGRpdGlvbmFsIGhvb2tzIHRoYXQgY2FuIGJlIHVzZWQgdG8KK2N1c3RvbWl6ZSBob3cgbW9kdWxlcyBhcmUgZm91bmQgYW5kIGxvYWRlZCBmcm9tIHRoZSA6dGVybTpgaW1wb3J0IHBhdGhgLgogCiBUaHJlZSB2YXJpYWJsZXMgYXJlIHVzZWQgYnkgdGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAsIDpkYXRhOmBzeXMucGF0aGAsCiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIGFuZCA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLiAgVGhlIGBgX19wYXRoX19gYApAQCAtNTUxLDE0ICs3MDQsMTYgQEAKIAogVGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAgaXMgYSA6dGVybTpgbWV0YSBwYXRoIGZpbmRlcmAsIHNvIHRoZSBpbXBvcnQKIG1hY2hpbmVyeSBiZWdpbnMgdGhlIDp0ZXJtOmBpbXBvcnQgcGF0aGAgc2VhcmNoIGJ5IGNhbGxpbmcgdGhlIHBhdGgKLWJhc2VkIGZpbmRlcidzIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2QgYXMgZGVzY3JpYmVkIHByZXZpb3VzbHkuICBXaGVuCi10aGUgYGBwYXRoYGAgYXJndW1lbnQgdG8gOm1ldGg6YGZpbmRfbW9kdWxlKClgIGlzIGdpdmVuLCBpdCB3aWxsIGJlIGEKK2Jhc2VkIGZpbmRlcidzIDptZXRoOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfc3BlY2AgbWV0aG9kIGFzCitkZXNjcmliZWQgcHJldmlvdXNseS4gIFdoZW4gdGhlIGBgcGF0aGBgIGFyZ3VtZW50IHRvCis6bWV0aDpgfmltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX3NwZWNgIGlzIGdpdmVuLCBpdCB3aWxsIGJlIGEKIGxpc3Qgb2Ygc3RyaW5nIHBhdGhzIHRvIHRyYXZlcnNlIC0gdHlwaWNhbGx5IGEgcGFja2FnZSdzIGBgX19wYXRoX19gYAotYXR0cmlidXRlIGZvciBhbiBpbXBvcnQgd2l0aGluIHRoYXQgcGFja2FnZS4gIElmIHRoZSBgYHBhdGhgYCBhcmd1bWVudAotaXMgYGBOb25lYGAsIHRoaXMgaW5kaWNhdGVzIGEgdG9wIGxldmVsIGltcG9ydCBhbmQgOmRhdGE6YHN5cy5wYXRoYCBpcyB1c2VkLgorYXR0cmlidXRlIGZvciBhbiBpbXBvcnQgd2l0aGluIHRoYXQgcGFja2FnZS4gIElmIHRoZSBgYHBhdGhgYCBhcmd1bWVudCBpcworYGBOb25lYGAsIHRoaXMgaW5kaWNhdGVzIGEgdG9wIGxldmVsIGltcG9ydCBhbmQgOmRhdGE6YHN5cy5wYXRoYCBpcyB1c2VkLgogCiBUaGUgcGF0aCBiYXNlZCBmaW5kZXIgaXRlcmF0ZXMgb3ZlciBldmVyeSBlbnRyeSBpbiB0aGUgc2VhcmNoIHBhdGgsIGFuZAotZm9yIGVhY2ggb2YgdGhlc2UsIGxvb2tzIGZvciBhbiBhcHByb3ByaWF0ZSA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgIGZvciB0aGUKK2ZvciBlYWNoIG9mIHRoZXNlLCBsb29rcyBmb3IgYW4gYXBwcm9wcmlhdGUgOnRlcm06YHBhdGggZW50cnkgZmluZGVyYAorKDpjbGFzczpgfmltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyYCkgZm9yIHRoZQogcGF0aCBlbnRyeS4gIEJlY2F1c2UgdGhpcyBjYW4gYmUgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiAoZS5nLiB0aGVyZSBtYXkgYmUKIGBzdGF0KClgIGNhbGwgb3ZlcmhlYWRzIGZvciB0aGlzIHNlYXJjaCksIHRoZSBwYXRoIGJhc2VkIGZpbmRlciBtYWludGFpbnMKIGEgY2FjaGUgbWFwcGluZyBwYXRoIGVudHJpZXMgdG8gcGF0aCBlbnRyeSBmaW5kZXJzLiAgVGhpcyBjYWNoZSBpcyBtYWludGFpbmVkCkBAIC01NzUsNTkgKzczMCw4MiBAQAogcGF0aCBlbnRyeSB0byBiZSBzZWFyY2hlZC4gIFRoaXMgY2FsbGFibGUgbWF5IGVpdGhlciByZXR1cm4gYSA6dGVybTpgcGF0aAogZW50cnkgZmluZGVyYCB0aGF0IGNhbiBoYW5kbGUgdGhlIHBhdGggZW50cnksIG9yIGl0IG1heSByYWlzZQogOmV4YzpgSW1wb3J0RXJyb3JgLiAgQW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHVzZWQgYnkgdGhlIHBhdGggYmFzZWQgZmluZGVyIHRvCi1zaWduYWwgdGhhdCB0aGUgaG9vayBjYW5ub3QgZmluZCBhIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAgZm9yIHRoYXQKLTp0ZXJtOmBwYXRoIGVudHJ5YC4gIFRoZSBleGNlcHRpb24gaXMgaWdub3JlZCBhbmQgOnRlcm06YGltcG9ydCBwYXRoYAotaXRlcmF0aW9uIGNvbnRpbnVlcy4gIFRoZSBob29rIHNob3VsZCBleHBlY3QgZWl0aGVyIGEgc3RyaW5nIG9yIGJ5dGVzIG9iamVjdDsKLXRoZSBlbmNvZGluZyBvZiBieXRlcyBvYmplY3RzIGlzIHVwIHRvIHRoZSBob29rIChlLmcuIGl0IG1heSBiZSBhIGZpbGUgc3lzdGVtCi1lbmNvZGluZywgVVRGLTgsIG9yIHNvbWV0aGluZyBlbHNlKSwgYW5kIGlmIHRoZSBob29rIGNhbm5vdCBkZWNvZGUgdGhlCi1hcmd1bWVudCwgaXQgc2hvdWxkIHJhaXNlIDpleGM6YEltcG9ydEVycm9yYC4KK3NpZ25hbCB0aGF0IHRoZSBob29rIGNhbm5vdCBmaW5kIGEgOnRlcm06YHBhdGggZW50cnkgZmluZGVyYC4KK2ZvciB0aGF0IDp0ZXJtOmBwYXRoIGVudHJ5YC4gIFRoZQorZXhjZXB0aW9uIGlzIGlnbm9yZWQgYW5kIDp0ZXJtOmBpbXBvcnQgcGF0aGAgaXRlcmF0aW9uIGNvbnRpbnVlcy4gIFRoZSBob29rCitzaG91bGQgZXhwZWN0IGVpdGhlciBhIHN0cmluZyBvciBieXRlcyBvYmplY3Q7IHRoZSBlbmNvZGluZyBvZiBieXRlcyBvYmplY3RzCitpcyB1cCB0byB0aGUgaG9vayAoZS5nLiBpdCBtYXkgYmUgYSBmaWxlIHN5c3RlbSBlbmNvZGluZywgVVRGLTgsIG9yIHNvbWV0aGluZworZWxzZSksIGFuZCBpZiB0aGUgaG9vayBjYW5ub3QgZGVjb2RlIHRoZSBhcmd1bWVudCwgaXQgc2hvdWxkIHJhaXNlCis6ZXhjOmBJbXBvcnRFcnJvcmAuCiAKIElmIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgaXRlcmF0aW9uIGVuZHMgd2l0aCBubyA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgCi1iZWluZyByZXR1cm5lZCwgdGhlbiB0aGUgcGF0aCBiYXNlZCBmaW5kZXIncyA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kCi13aWxsIHN0b3JlIGBgTm9uZWBgIGluIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgKHRvIGluZGljYXRlIHRoYXQKLXRoZXJlIGlzIG5vIGZpbmRlciBmb3IgdGhpcyBwYXRoIGVudHJ5KSBhbmQgcmV0dXJuIGBgTm9uZWBgLCBpbmRpY2F0aW5nIHRoYXQKLXRoaXMgOnRlcm06YG1ldGEgcGF0aCBmaW5kZXJgIGNvdWxkIG5vdCBmaW5kIHRoZSBtb2R1bGUuCitiZWluZyByZXR1cm5lZCwgdGhlbiB0aGUgcGF0aCBiYXNlZCBmaW5kZXIncworOm1ldGg6YH5pbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9zcGVjYCBtZXRob2Qgd2lsbCBzdG9yZSBgYE5vbmVgYAoraW4gOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCAodG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBubyBmaW5kZXIgZm9yCit0aGlzIHBhdGggZW50cnkpIGFuZCByZXR1cm4gYGBOb25lYGAsIGluZGljYXRpbmcgdGhhdCB0aGlzCis6dGVybTpgbWV0YSBwYXRoIGZpbmRlcmAgY291bGQgbm90IGZpbmQgdGhlIG1vZHVsZS4KIAogSWYgYSA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgICppcyogcmV0dXJuZWQgYnkgb25lIG9mIHRoZSA6dGVybTpgcGF0aCBlbnRyeQogaG9va2AgY2FsbGFibGVzIG9uIDpkYXRhOmBzeXMucGF0aF9ob29rc2AsIHRoZW4gdGhlIGZvbGxvd2luZyBwcm90b2NvbCBpcyB1c2VkCi10byBhc2sgdGhlIGZpbmRlciBmb3IgYSBtb2R1bGUgbG9hZGVyLCB3aGljaCBpcyB0aGVuIHVzZWQgdG8gbG9hZCB0aGUgbW9kdWxlLgotCit0byBhc2sgdGhlIGZpbmRlciBmb3IgYSBtb2R1bGUgc3BlYywgd2hpY2ggaXMgdGhlbiB1c2VkIHdoZW4gbG9hZGluZyB0aGUKK21vZHVsZS4KIAogUGF0aCBlbnRyeSBmaW5kZXIgcHJvdG9jb2wKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEluIG9yZGVyIHRvIHN1cHBvcnQgaW1wb3J0cyBvZiBtb2R1bGVzIGFuZCBpbml0aWFsaXplZCBwYWNrYWdlcyBhbmQgYWxzbyB0bwogY29udHJpYnV0ZSBwb3J0aW9ucyB0byBuYW1lc3BhY2UgcGFja2FnZXMsIHBhdGggZW50cnkgZmluZGVycyBtdXN0IGltcGxlbWVudAotdGhlIDptZXRoOmBmaW5kX2xvYWRlcigpYCBtZXRob2QuCit0aGUgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX3NwZWNgIG1ldGhvZC4KIAotOm1ldGg6YGZpbmRfbG9hZGVyKClgIHRha2VzIG9uZSBhcmd1bWVudCwgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZQotbW9kdWxlIGJlaW5nIGltcG9ydGVkLiAgOm1ldGg6YGZpbmRfbG9hZGVyKClgIHJldHVybnMgYSAyLXR1cGxlIHdoZXJlIHRoZQotZmlyc3QgaXRlbSBpcyB0aGUgbG9hZGVyIGFuZCB0aGUgc2Vjb25kIGl0ZW0gaXMgYSBuYW1lc3BhY2UgOnRlcm06YHBvcnRpb25gLgotV2hlbiB0aGUgZmlyc3QgaXRlbSAoaS5lLiB0aGUgbG9hZGVyKSBpcyBgYE5vbmVgYCwgdGhpcyBtZWFucyB0aGF0IHdoaWxlIHRoZQotcGF0aCBlbnRyeSBmaW5kZXIgZG9lcyBub3QgaGF2ZSBhIGxvYWRlciBmb3IgdGhlIG5hbWVkIG1vZHVsZSwgaXQga25vd3MgdGhhdCB0aGUKLXBhdGggZW50cnkgY29udHJpYnV0ZXMgdG8gYSBuYW1lc3BhY2UgcG9ydGlvbiBmb3IgdGhlIG5hbWVkIG1vZHVsZS4gIFRoaXMgd2lsbAotYWxtb3N0IGFsd2F5cyBiZSB0aGUgY2FzZSB3aGVyZSBQeXRob24gaXMgYXNrZWQgdG8gaW1wb3J0IGEgbmFtZXNwYWNlIHBhY2thZ2UKLXRoYXQgaGFzIG5vIHBoeXNpY2FsIHByZXNlbmNlIG9uIHRoZSBmaWxlIHN5c3RlbS4gIFdoZW4gYSBwYXRoIGVudHJ5IGZpbmRlcgotcmV0dXJucyBgYE5vbmVgYCBmb3IgdGhlIGxvYWRlciwgdGhlIHNlY29uZCBpdGVtIG9mIHRoZSAyLXR1cGxlIHJldHVybiB2YWx1ZQotbXVzdCBiZSBhIHNlcXVlbmNlLCBhbHRob3VnaCBpdCBjYW4gYmUgZW1wdHkuCis6bWV0aDpgfmltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfc3BlY2AgdGFrZXMgdHdvIGFyZ3VtZW50LCB0aGUKK2Z1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQsIGFuZCB0aGUgKG9wdGlvbmFsKSB0YXJnZXQKK21vZHVsZS4gIGBgZmluZF9zcGVjKClgYCByZXR1cm5zIGEgZnVsbHkgcG9wdWxhdGVkIHNwZWMgZm9yIHRoZSBtb2R1bGUuCitUaGlzIHNwZWMgd2lsbCBhbHdheXMgaGF2ZSAibG9hZGVyIiBzZXQgKHdpdGggb25lIGV4Y2VwdGlvbikuCiAKLUlmIDptZXRoOmBmaW5kX2xvYWRlcigpYCByZXR1cm5zIGEgbm9uLWBgTm9uZWBgIGxvYWRlciB2YWx1ZSwgdGhlIHBvcnRpb24gaXMKLWlnbm9yZWQgYW5kIHRoZSBsb2FkZXIgaXMgcmV0dXJuZWQgZnJvbSB0aGUgcGF0aCBiYXNlZCBmaW5kZXIsIHRlcm1pbmF0aW5nCi10aGUgc2VhcmNoIHRocm91Z2ggdGhlIHBhdGggZW50cmllcy4KK1RvIGluZGljYXRlIHRvIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHRoYXQgdGhlIHNwZWMgcmVwcmVzZW50cyBhIG5hbWVzcGFjZQorOnRlcm06YHBvcnRpb25gLiB0aGUgcGF0aCBlbnRyeSBmaW5kZXIgc2V0cyAibG9hZGVyIiBvbiB0aGUgc3BlYyB0bworYGBOb25lYGAgYW5kICJzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyIgdG8gYSBsaXN0IGNvbnRhaW5pbmcgdGhlCitwb3J0aW9uLgogCi1Gb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGltcG9ydAotcHJvdG9jb2wsIG1hbnkgcGF0aCBlbnRyeSBmaW5kZXJzIGFsc28gc3VwcG9ydCB0aGUgc2FtZSwKLXRyYWRpdGlvbmFsIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2QgdGhhdCBtZXRhIHBhdGggZmluZGVycyBzdXBwb3J0LgotSG93ZXZlciBwYXRoIGVudHJ5IGZpbmRlciA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kcyBhcmUgbmV2ZXIgY2FsbGVkCi13aXRoIGEgYGBwYXRoYGAgYXJndW1lbnQgKHRoZXkgYXJlIGV4cGVjdGVkIHRvIHJlY29yZCB0aGUgYXBwcm9wcmlhdGUKLXBhdGggaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5pdGlhbCBjYWxsIHRvIHRoZSBwYXRoIGhvb2spLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIDptZXRoOmB+aW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9zcGVjYCByZXBsYWNlZAorICAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX2xvYWRlcmAgYW5kCisgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfbW9kdWxlYCwgYm90aCBvZiB3aGljaAorICAgYXJlIG5vdyBkZXByZWNhdGVkLCBidXQgd2lsbCBiZSB1c2VkIGlmIGBgZmluZF9zcGVjKClgYCBpcyBub3QgZGVmaW5lZC4KIAotVGhlIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2Qgb24gcGF0aCBlbnRyeSBmaW5kZXJzIGlzIGRlcHJlY2F0ZWQsCi1hcyBpdCBkb2VzIG5vdCBhbGxvdyB0aGUgcGF0aCBlbnRyeSBmaW5kZXIgdG8gY29udHJpYnV0ZSBwb3J0aW9ucyB0bwotbmFtZXNwYWNlIHBhY2thZ2VzLiBJbnN0ZWFkIHBhdGggZW50cnkgZmluZGVycyBzaG91bGQgaW1wbGVtZW50IHRoZQotOm1ldGg6YGZpbmRfbG9hZGVyKClgIG1ldGhvZCBhcyBkZXNjcmliZWQgYWJvdmUuIElmIGl0IGV4aXN0cyBvbiB0aGUgcGF0aAotZW50cnkgZmluZGVyLCB0aGUgaW1wb3J0IHN5c3RlbSB3aWxsIGFsd2F5cyBjYWxsIDptZXRoOmBmaW5kX2xvYWRlcigpYAotaW4gcHJlZmVyZW5jZSB0byA6bWV0aDpgZmluZF9tb2R1bGUoKWAuCisgICBPbGRlciBwYXRoIGVudHJ5IGZpbmRlcnMgbWF5IGltcGxlbWVudCBvbmUgb2YgdGhlc2UgdHdvIGRlcHJlY2F0ZWQgbWV0aG9kcworICAgaW5zdGVhZCBvZiBgYGZpbmRfc3BlYygpYGAuICBUaGUgbWV0aG9kcyBhcmUgc3RpbGwgcmVzcGVjdGVkIGZvciB0aGUKKyAgIHNha2Ugb2YgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIEhvd2V2ZXZlciwgaWYgYGBmaW5kX3NwZWMoKWBgIGlzCisgICBpbXBsZW1lbnRlZCBvbiB0aGUgcGF0aCBlbnRyeSBmaW5kZXIsIHRoZSBsZWdhY3kgbWV0aG9kcyBhcmUgaWdub3JlZC4KKworICAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX2xvYWRlcmAgdGFrZXMgb25lIGFyZ3VtZW50LCB0aGUKKyAgIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQuICBgYGZpbmRfbG9hZGVyKClgYAorICAgcmV0dXJucyBhIDItdHVwbGUgd2hlcmUgdGhlIGZpcnN0IGl0ZW0gaXMgdGhlIGxvYWRlciBhbmQgdGhlIHNlY29uZCBpdGVtCisgICBpcyBhIG5hbWVzcGFjZSA6dGVybTpgcG9ydGlvbmAuICBXaGVuIHRoZSBmaXJzdCBpdGVtIChpLmUuIHRoZSBsb2FkZXIpIGlzCisgICBgYE5vbmVgYCwgdGhpcyBtZWFucyB0aGF0IHdoaWxlIHRoZSBwYXRoIGVudHJ5IGZpbmRlciBkb2VzIG5vdCBoYXZlIGEKKyAgIGxvYWRlciBmb3IgdGhlIG5hbWVkIG1vZHVsZSwgaXQga25vd3MgdGhhdCB0aGUgcGF0aCBlbnRyeSBjb250cmlidXRlcyB0bworICAgYSBuYW1lc3BhY2UgcG9ydGlvbiBmb3IgdGhlIG5hbWVkIG1vZHVsZS4gIFRoaXMgd2lsbCBhbG1vc3QgYWx3YXlzIGJlIHRoZQorICAgY2FzZSB3aGVyZSBQeXRob24gaXMgYXNrZWQgdG8gaW1wb3J0IGEgbmFtZXNwYWNlIHBhY2thZ2UgdGhhdCBoYXMgbm8KKyAgIHBoeXNpY2FsIHByZXNlbmNlIG9uIHRoZSBmaWxlIHN5c3RlbS4gIFdoZW4gYSBwYXRoIGVudHJ5IGZpbmRlciByZXR1cm5zCisgICBgYE5vbmVgYCBmb3IgdGhlIGxvYWRlciwgdGhlIHNlY29uZCBpdGVtIG9mIHRoZSAyLXR1cGxlIHJldHVybiB2YWx1ZSBtdXN0CisgICBiZSBhIHNlcXVlbmNlLCBhbHRob3VnaCBpdCBjYW4gYmUgZW1wdHkuCisKKyAgIElmIGBgZmluZF9sb2FkZXIoKWBgIHJldHVybnMgYSBub24tYGBOb25lYGAgbG9hZGVyIHZhbHVlLCB0aGUgcG9ydGlvbiBpcworICAgaWdub3JlZCBhbmQgdGhlIGxvYWRlciBpcyByZXR1cm5lZCBmcm9tIHRoZSBwYXRoIGJhc2VkIGZpbmRlciwgdGVybWluYXRpbmcKKyAgIHRoZSBzZWFyY2ggdGhyb3VnaCB0aGUgcGF0aCBlbnRyaWVzLgorCisgICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGltcG9ydAorICAgcHJvdG9jb2wsIG1hbnkgcGF0aCBlbnRyeSBmaW5kZXJzIGFsc28gc3VwcG9ydCB0aGUgc2FtZSwKKyAgIHRyYWRpdGlvbmFsIGBgZmluZF9tb2R1bGUoKWBgIG1ldGhvZCB0aGF0IG1ldGEgcGF0aCBmaW5kZXJzIHN1cHBvcnQuCisgICBIb3dldmVyIHBhdGggZW50cnkgZmluZGVyIGBgZmluZF9tb2R1bGUoKWBgIG1ldGhvZHMgYXJlIG5ldmVyIGNhbGxlZAorICAgd2l0aCBhIGBgcGF0aGBgIGFyZ3VtZW50ICh0aGV5IGFyZSBleHBlY3RlZCB0byByZWNvcmQgdGhlIGFwcHJvcHJpYXRlCisgICBwYXRoIGluZm9ybWF0aW9uIGZyb20gdGhlIGluaXRpYWwgY2FsbCB0byB0aGUgcGF0aCBob29rKS4KKworICAgVGhlIGBgZmluZF9tb2R1bGUoKWBgIG1ldGhvZCBvbiBwYXRoIGVudHJ5IGZpbmRlcnMgaXMgZGVwcmVjYXRlZCwKKyAgIGFzIGl0IGRvZXMgbm90IGFsbG93IHRoZSBwYXRoIGVudHJ5IGZpbmRlciB0byBjb250cmlidXRlIHBvcnRpb25zIHRvCisgICBuYW1lc3BhY2UgcGFja2FnZXMuICBJZiBib3RoIGBgZmluZF9sb2FkZXIoKWBgIGFuZCBgYGZpbmRfbW9kdWxlKClgYAorICAgZXhpc3Qgb24gYSBwYXRoIGVudHJ5IGZpbmRlciwgdGhlIGltcG9ydCBzeXN0ZW0gd2lsbCBhbHdheXMgY2FsbAorICAgYGBmaW5kX2xvYWRlcigpYGAgaW4gcHJlZmVyZW5jZSB0byBgYGZpbmRfbW9kdWxlKClgYC4KIAogCiBSZXBsYWNpbmcgdGhlIHN0YW5kYXJkIGltcG9ydCBzeXN0ZW0KQEAgLTY0Niw5ICs4MjQsOSBAQAogVG8gc2VsZWN0aXZlbHkgcHJldmVudCBpbXBvcnQgb2Ygc29tZSBtb2R1bGVzIGZyb20gYSBob29rIGVhcmx5IG9uIHRoZQogbWV0YSBwYXRoIChyYXRoZXIgdGhhbiBkaXNhYmxpbmcgdGhlIHN0YW5kYXJkIGltcG9ydCBzeXN0ZW0gZW50aXJlbHkpLAogaXQgaXMgc3VmZmljaWVudCB0byByYWlzZSA6ZXhjOmBJbXBvcnRFcnJvcmAgZGlyZWN0bHkgZnJvbQotOm1ldGg6YGZpbmRfbW9kdWxlYCBpbnN0ZWFkIG9mIHJldHVybmluZyBgYE5vbmVgYC4gVGhlIGxhdHRlciBpbmRpY2F0ZXMKLXRoYXQgdGhlIG1ldGEgcGF0aCBzZWFyY2ggc2hvdWxkIGNvbnRpbnVlLiB3aGlsZSByYWlzaW5nIGFuIGV4Y2VwdGlvbgotdGVybWluYXRlcyBpdCBpbW1lZGlhdGVseS4KKzptZXRoOmB+aW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX3NwZWNgIGluc3RlYWQgb2YgcmV0dXJuaW5nCitgYE5vbmVgYC4gVGhlIGxhdHRlciBpbmRpY2F0ZXMgdGhhdCB0aGUgbWV0YSBwYXRoIHNlYXJjaCBzaG91bGQgY29udGludWUsCit3aGlsZSByYWlzaW5nIGFuIGV4Y2VwdGlvbiB0ZXJtaW5hdGVzIGl0IGltbWVkaWF0ZWx5LgogCiAKIE9wZW4gaXNzdWVzCkBAIC02ODgsNiArODY2LDExIEBACiAKIDpwZXA6YDMzOGAgZGVmaW5lcyBleGVjdXRpbmcgbW9kdWxlcyBhcyBzY3JpcHRzLgogCis6cGVwOmA0NTFgIGFkZHMgdGhlIGVuY2Fwc3VsYXRpb24gb2YgcGVyLW1vZHVsZSBpbXBvcnQgc3RhdGUgaW4gc3BlYworb2JqZWN0cy4gIEl0IGFsc28gb2ZmLWxvYWRzIG1vc3Qgb2YgdGhlIGJvaWxlcnBsYXRlIHJlc3BvbnNpYmlsaXRpZXMgb2YKK2xvYWRlcnMgYmFjayBvbnRvIHRoZSBpbXBvcnQgbWFjaGluZXJ5LiAgVGhlc2UgY2hhbmdlcyBhbGxvdyB0aGUKK2RlcHJlY2F0aW9uIG9mIHNldmVyYWwgQVBJcyBpbiB0aGUgaW1wb3J0IHN5c3RlbSBhbmQgYWxzbyBhZGRpdGlvbiBvZiBuZXcKK21ldGhvZHMgdG8gZmluZGVycyBhbmQgbG9hZGVycy4KIAogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sCmluZGV4IGEwZWMzMmYuLmVkNWRhMGMgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbApAQCAtMyw3ICszLDcgQEAKIAkgICAgPGgzPkRvY3MgZm9yIG90aGVyIHZlcnNpb25zPC9oMz4KIAkgICAgPHVsPgogCSAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnLzIuNy8iPlB5dGhvbiAyLjcgKHN0YWJsZSk8L2E+PC9saT4KLQkgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvIj5QeXRob24gMy40IChpbiBkZXZlbG9wbWVudCk8L2E+PC9saT4KKwkgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjMvIj5QeXRob24gMy4zIChzdGFibGUpPC9hPjwvbGk+CiAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL3ZlcnNpb25zLyI+T2xkIHZlcnNpb25zPC9hPjwvbGk+CiAgICAgICAgICAgICA8L3VsPgogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkKaW5kZXggMzViYzA0MC4uZTM3ZWY4OSAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5CisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weQpAQCAtMTAsMTIgKzEwLDEzIEBACiAiIiIKIAogSVNTVUVfVVJJID0gJ2h0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUlcycKLVNPVVJDRV9VUkkgPSAnaHR0cDovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlLzMuMy8lcycKK1NPVVJDRV9VUkkgPSAnaHR0cDovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlL2RlZmF1bHQvJXMnCiAKIGZyb20gZG9jdXRpbHMgaW1wb3J0IG5vZGVzLCB1dGlscwogCiBpbXBvcnQgc3BoaW54CiBmcm9tIHNwaGlueC51dGlsLm5vZGVzIGltcG9ydCBzcGxpdF9leHBsaWNpdF90aXRsZQorZnJvbSBzcGhpbngudXRpbC5jb21wYXQgaW1wb3J0IERpcmVjdGl2ZQogZnJvbSBzcGhpbngud3JpdGVycy5odG1sIGltcG9ydCBIVE1MVHJhbnNsYXRvcgogZnJvbSBzcGhpbngud3JpdGVycy5sYXRleCBpbXBvcnQgTGFUZVhUcmFuc2xhdG9yCiBmcm9tIHNwaGlueC5sb2NhbGUgaW1wb3J0IHZlcnNpb25sYWJlbHMKQEAgLTI3LDcgKzI4LDkgQEAKICAgICBCb2R5LmVudW0uY29udmVydGVyc1snbG93ZXJyb21hbiddID0gXAogICAgIEJvZHkuZW51bS5jb252ZXJ0ZXJzWyd1cHBlcnJvbWFuJ10gPSBsYW1iZGEgeDogTm9uZQogCi1pZiBzcGhpbnguX192ZXJzaW9uX19bOjNdIDwgJzEuMic6CitTUEhJTlgxMSA9IHNwaGlueC5fX3ZlcnNpb25fX1s6M10gPCAnMS4yJworCitpZiBTUEhJTlgxMToKICAgICAjIG1vbmtleS1wYXRjaCBIVE1MIHRyYW5zbGF0b3IgdG8gZ2l2ZSB2ZXJzaW9ubW9kaWZpZWQgcGFyYWdyYXBocyBhIGNsYXNzCiAgICAgZGVmIG5ld192aXNpdF92ZXJzaW9ubW9kaWZpZWQoc2VsZiwgbm9kZSk6CiAgICAgICAgIHNlbGYuYm9keS5hcHBlbmQoc2VsZi5zdGFydHRhZyhub2RlLCAncCcsIENMQVNTPW5vZGVbJ3R5cGUnXSkpCkBAIC04OCw4ICs5MSw2IEBACiAKICMgU3VwcG9ydCBmb3IgbWFya2luZyB1cCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzCiAKLWZyb20gc3BoaW54LnV0aWwuY29tcGF0IGltcG9ydCBEaXJlY3RpdmUKLQogY2xhc3MgSW1wbGVtZW50YXRpb25EZXRhaWwoRGlyZWN0aXZlKToKIAogICAgIGhhc19jb250ZW50ID0gVHJ1ZQpAQCAtMTQyLDEwICsxNDMsNiBAQAogCiAjIFN1cHBvcnQgZm9yIGRvY3VtZW50aW5nIHZlcnNpb24gb2YgcmVtb3ZhbCBpbiBkZXByZWNhdGlvbnMKIAotZnJvbSBzcGhpbngubG9jYWxlIGltcG9ydCB2ZXJzaW9ubGFiZWxzCi1mcm9tIHNwaGlueC51dGlsLmNvbXBhdCBpbXBvcnQgRGlyZWN0aXZlCi0KLQogY2xhc3MgRGVwcmVjYXRlZFJlbW92ZWQoRGlyZWN0aXZlKToKICAgICBoYXNfY29udGVudCA9IFRydWUKICAgICByZXF1aXJlZF9hcmd1bWVudHMgPSAyCkBAIC0xNzEsMTYgKzE2OCwxNiBAQAogICAgICAgICAgICAgbWVzc2FnZXMgPSBbXQogICAgICAgICBpZiBzZWxmLmNvbnRlbnQ6CiAgICAgICAgICAgICBzZWxmLnN0YXRlLm5lc3RlZF9wYXJzZShzZWxmLmNvbnRlbnQsIHNlbGYuY29udGVudF9vZmZzZXQsIG5vZGUpCi0gICAgICAgIGlmIGxlbihub2RlKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZVswXSwgbm9kZXMucGFyYWdyYXBoKSBhbmQgbm9kZVswXS5yYXdzb3VyY2U6CiAgICAgICAgICAgICAgICAgY29udGVudCA9IG5vZGVzLmlubGluZShub2RlWzBdLnJhd3NvdXJjZSwgdHJhbnNsYXRhYmxlPVRydWUpCiAgICAgICAgICAgICAgICAgY29udGVudC5zb3VyY2UgPSBub2RlWzBdLnNvdXJjZQogICAgICAgICAgICAgICAgIGNvbnRlbnQubGluZSA9IG5vZGVbMF0ubGluZQogICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gbm9kZVswXS5jaGlsZHJlbgogICAgICAgICAgICAgICAgIG5vZGVbMF0ucmVwbGFjZV9zZWxmKG5vZGVzLnBhcmFncmFwaCgnJywgJycsIGNvbnRlbnQpKQotICAgICAgICAgICAgbm9kZVswXS5pbnNlcnQoMCwgbm9kZXMuaW5saW5lKCcnLCAnJXM6ICcgJSB0ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXM9Wyd2ZXJzaW9ubW9kaWZpZWQnXSkpCi0gICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgU1BISU5YMTE6CisgICAgICAgICAgICAgICAgbm9kZVswXS5pbnNlcnQoMCwgbm9kZXMuaW5saW5lKCcnLCAnJXM6ICcgJSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzPVsndmVyc2lvbm1vZGlmaWVkJ10pKQorICAgICAgICBlbGlmIG5vdCBTUEhJTlgxMToKICAgICAgICAgICAgIHBhcmEgPSBub2Rlcy5wYXJhZ3JhcGgoJycsICcnLAogICAgICAgICAgICAgICAgIG5vZGVzLmlubGluZSgnJywgJyVzLicgJSB0ZXh0LCBjbGFzc2VzPVsndmVyc2lvbm1vZGlmaWVkJ10pKQogICAgICAgICAgICAgbm9kZS5hcHBlbmQocGFyYSkKQEAgLTE4OCw2ICsxODUsOSBAQAogICAgICAgICBlbnYubm90ZV92ZXJzaW9uY2hhbmdlKCdkZXByZWNhdGVkJywgdmVyc2lvblswXSwgbm9kZSwgc2VsZi5saW5lbm8pCiAgICAgICAgIHJldHVybiBbbm9kZV0gKyBtZXNzYWdlcwogCisjIGZvciBTcGhpbnggPCAxLjIKK3ZlcnNpb25sYWJlbHNbJ2RlcHJlY2F0ZWQtcmVtb3ZlZCddID0gRGVwcmVjYXRlZFJlbW92ZWQuX2xhYmVsCisKIAogIyBTdXBwb3J0IGZvciBpbmNsdWRpbmcgTWlzYy9ORVdTCiAKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdiBiL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdgppbmRleCBhYmMzY2E4Li5mOWQ2YmJmIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2CkBAIC03OSw5ICs3OSw4IEBACiBob3d0by9sb2dnaW5nLCw6VGhpcyxERUJVRzpyb290OlRoaXMgbWVzc2FnZSBzaG91bGQgZ28gdG8gdGhlIGxvZyBmaWxlCiBob3d0by9sb2dnaW5nLCw6VGhpcyxERUJVRzpUaGlzIG1lc3NhZ2Ugc2hvdWxkIGFwcGVhciBvbiB0aGUgY29uc29sZQogaG93dG8vbG9nZ2luZywsOldhdGNoLFdBUk5JTkc6cm9vdDpXYXRjaCBvdXQhCi1ob3d0by9weXBvcnRpbmcsNzUsOjosIyBtYWtlIHN1cmUgdG8gdXNlIDo6IFB5dGhvbiAqYW5kKiA6OiBQeXRob24gOjogMyBzbwotaG93dG8vcHlwb3J0aW5nLDc1LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywiCi1ob3d0by9weXBvcnRpbmcsNzUsOjosJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzJworaG93dG8vcHlwb3J0aW5nLCw6OixQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMgoraG93dG8vcHlwb3J0aW5nLCw6OixQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMwogaG93dG8vcmVnZXgsLDo6LAogaG93dG8vcmVnZXgsLDpmb28sKD86Zm9vKQogaG93dG8vdXJsbGliMiwsOmV4YW1wbGUsImZvciBleGFtcGxlICIiam9lQHBhc3N3b3JkOmV4YW1wbGUuY29tIiIiCkBAIC0xNDEsMTUgKzE0MCw4IEBACiBsaWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMsLDpwb3J0LGhvc3Q6cG9ydAogbGlicmFyeS9tbWFwLCw6aTIsb2JqW2kxOmkyXQogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBBZGQgbW9yZSB0YXNrcyB1c2luZyBgcHV0KClgCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIEEgdGVzdCBmaWxlIGZvciB0aGUgYG11bHRpcHJvY2Vzc2luZ2AgcGFja2FnZQotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBBIHRlc3Qgb2YgYG11bHRpcHJvY2Vzc2luZy5Qb29sYCBjbGFzcwotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBgQmFzZU1hbmFnZXJgLgotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBpbiB0aGUgb3JpZ2luYWwgb3JkZXIgdGhlbiBjb25zaWRlciB1c2luZyBgUG9vbC5tYXAoKWAgb3IKIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoMjAsKSkgICAgICMgZXF1aXYgdG8gYGxbMjBdYCIKIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRzbGljZV9fJywgKDIsIDcpKSAgICMgZXF1aXYgdG8gYGxbMjo3XWAiCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gYHNvY2tldC5hY2NlcHQoKWAgbWV0aG9kIGJ5Ci1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIG9iamVjdC4gIChXZSBpbXBvcnQgYG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb25gIHRvIGVuYWJsZSB0aGlzIHBpY2tsaW5nLikKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgYFBvb2wuaW1hcCgpYCAod2hpY2ggd2lsbCBzYXZlIG9uIHRoZSBhbW91bnQgb2YgY29kZSBuZWVkZWQgYW55d2F5KS4KIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCw6cXVldWUsIj4+PiBRdWV1ZU1hbmFnZXIucmVnaXN0ZXIoJ2dldF9xdWV1ZScsIGNhbGxhYmxlPWxhbWJkYTpxdWV1ZSkiCiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIHJlZ2lzdGVyIHRoZSBGb28gY2xhc3M7IG1ha2UgYGYoKWAgYW5kIGBnKClgIGFjY2Vzc2libGUgdmlhIHByb3h5CiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIHJlZ2lzdGVyIHRoZSBGb28gY2xhc3M7IG1ha2UgYGcoKWAgYW5kIGBfaCgpYCBhY2Nlc3NpYmxlIHZpYSBwcm94eQpAQCAtMTU4LDIwICsxNTAsMTYgQEAKIGxpYnJhcnkvbm50cGxpYiwsOmxpbmVzLDpsaW5lcwogbGlicmFyeS9vcHRwYXJzZSwsOmxlbiwiZGVsIHBhcnNlci5yYXJnc1s6bGVuKHZhbHVlKV0iCiBsaWJyYXJ5L29zLnBhdGgsLDpmb28sYzpmb28KK2xpYnJhcnkvcGF0aGxpYiwsOmJhciwiPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovV2luZG93cycsICdkOmJhcicpIgorbGlicmFyeS9wYXRobGliLCw6YmFyLFB1cmVXaW5kb3dzUGF0aCgnZDpiYXInKQorbGlicmFyeS9wYXRobGliLCw6UHJvZ3JhbSw+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOlByb2dyYW0gRmlsZXMvJykucm9vdAorbGlicmFyeS9wYXRobGliLCw6UHJvZ3JhbSw+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOlByb2dyYW0gRmlsZXMvJykuYW5jaG9yCiBsaWJyYXJ5L3BkYiwsOmxpbmVubyxmaWxlbmFtZTpsaW5lbm8KIGxpYnJhcnkvcGlja2xlLCw6bWVtb3J5LCJjb25uID0gc3FsaXRlMy5jb25uZWN0KCIiOm1lbW9yeToiIikiCiBsaWJyYXJ5L3Bvc2l4LCxgLCJDRkxBR1M9IiJgZ2V0Y29uZiBMRlNfQ0ZMQUdTYCIiIE9QVD0iIi1nIC1PMiAkQ0ZMQUdTIiIiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidjbGFzc2lmaWVycyc6IFsnRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDQgLSBCZXRhJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInTmF0dXJhbCBMYW5ndWFnZSA6OiBFbmdsaXNoJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50JywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24nLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcyA6OiBQeXRob24gTW9kdWxlcyddLCIKK2xpYnJhcnkvcHByaW50LCw6OiwiJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyIDo6IE9ubHknXSwiCitsaWJyYXJ5L3BwcmludCwsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywiCitsaWJyYXJ5L3BwcmludCwsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywiCiBsaWJyYXJ5L3Byb2ZpbGUsLDpsaW5lbm8sZmlsZW5hbWU6bGluZW5vKGZ1bmN0aW9uKQogbGlicmFyeS9weWV4cGF0LCw6ZWxlbTEsPHB5OmVsZW0xIC8+CiBsaWJyYXJ5L3B5ZXhwYXQsLDpweSwieG1sbnM6cHkgPSAiImh0dHA6Ly93d3cucHl0aG9uLm9yZy9ucy8iIj4iCkBAIC0xODMsNiArMTcxLDcgQEAKIGxpYnJhcnkvc3FsaXRlMywsOmFnZSwiY3VyLmV4ZWN1dGUoIiJzZWxlY3QgKiBmcm9tIHBlb3BsZSB3aGVyZSBuYW1lX2xhc3Q9OndobyBhbmQgYWdlPTphZ2UiIiwgeyIid2hvIiI6IHdobywgIiJhZ2UiIjogYWdlfSkiCiBsaWJyYXJ5L3NxbGl0ZTMsLDptZW1vcnksCiBsaWJyYXJ5L3NxbGl0ZTMsLDp3aG8sImN1ci5leGVjdXRlKCIic2VsZWN0ICogZnJvbSBwZW9wbGUgd2hlcmUgbmFtZV9sYXN0PTp3aG8gYW5kIGFnZT06YWdlIiIsIHsiIndobyIiOiB3aG8sICIiYWdlIiI6IGFnZX0pIgorbGlicmFyeS9zcWxpdGUzLCw6cGF0aCwiZGIgPSBzcWxpdGUzLmNvbm5lY3QoJ2ZpbGU6cGF0aC90by9kYXRhYmFzZT9tb2RlPXJvJywgdXJpPVRydWUpIgogbGlicmFyeS9zc2wsLDpNeSwiT3JnYW5pemF0aW9uYWwgVW5pdCBOYW1lIChlZywgc2VjdGlvbikgW106TXkgR3JvdXAiCiBsaWJyYXJ5L3NzbCwsOk15LCJPcmdhbml6YXRpb24gTmFtZSAoZWcsIGNvbXBhbnkpIFtJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGRdOk15IE9yZ2FuaXphdGlvbiwgSW5jLiIKIGxpYnJhcnkvc3NsLCw6bXlzZXJ2ZXIsIkNvbW1vbiBOYW1lIChlZywgWU9VUiBuYW1lKSBbXTpteXNlcnZlci5teWdyb3VwLm15b3JnYW5pemF0aW9uLmNvbSIKQEAgLTIwNyw3ICsxOTYsMTIgQEAKIGxpYnJhcnkvdGFyZmlsZSwsOnh6LCd3Onh6JwogbGlicmFyeS90aW1lLCw6bW0sCiBsaWJyYXJ5L3RpbWUsLDpzcywKK2xpYnJhcnkvdHJhY2VtYWxsb2MsLDpsaW1pdCwiZm9yIGluZGV4LCBzdGF0IGluIGVudW1lcmF0ZSh0b3Bfc3RhdHNbOmxpbWl0XSwgMSk6IgogbGlicmFyeS90dXJ0bGUsLDo6LEV4YW1wbGU6OgorbGlicmFyeS91bml0dGVzdCwxNDEyLDpmb28sInNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbJ0lORk86Zm9vOmZpcnN0IG1lc3NhZ2UnLCIKK2xpYnJhcnkvdW5pdHRlc3QsMTQxMiw6Zmlyc3QsInNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbJ0lORk86Zm9vOmZpcnN0IG1lc3NhZ2UnLCIKK2xpYnJhcnkvdW5pdHRlc3QsMTQxMiw6Zm9vLCdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCitsaWJyYXJ5L3VuaXR0ZXN0LDE0MTIsOnNlY29uZCwnRVJST1I6Zm9vLmJhcjpzZWNvbmQgbWVzc2FnZSddKQogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOmNsb3NlLENvbm5lY3Rpb246Y2xvc2UKIGxpYnJhcnkvdXJsbGliLnJlcXVlc3QsLDpsYW5nLCJ4bWxucz0iImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIiB4bWw6bGFuZz0iImVuIiIgbGFuZz0iImVuIiI+XG5cbjxoZWFkPlxuIgogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOnBhc3N3b3JkLCIiImpvZTpwYXNzd29yZEBweXRob24ub3JnIiIiCkBAIC0yODMsNiArMjc3LDcgQEAKIHdoYXRzbmV3LzMuMiwsOmxvY2F0aW9uLHpvcGU5LWxvY2F0aW9uID0gJHt6b3BlOTpsb2NhdGlvbn0KIHdoYXRzbmV3LzMuMiwsOnByZWZpeCx6b3BlLWNvbmYgPSAke2N1c3RvbTpwcmVmaXh9L2V0Yy96b3BlLmNvbmYKIHdoYXRzbmV3L2NoYW5nZWxvZywsOnBsYXRmb3JtLDpwbGF0Zm9ybToKK3doYXRzbmV3L2NoYW5nZWxvZywsOmd6LCI6IFRhckZpbGUgb3BlbmVkIHdpdGggZXh0ZXJuYWwgZmlsZW9iaiBhbmQgIiJ3Omd6IiIgbW9kZSBkaWRuJ3QiCiB3aGF0c25ldy9jaGFuZ2Vsb2csLDpQeXRob25DbWQsIldpdGggVGsgPCA4LjUgX3RraW50ZXIuYzpQeXRob25DbWQoKSByYWlzZWQgVW5pY29kZURlY29kZUVycm9yLCBjYXVzZWQiCiB3aGF0c25ldy9jaGFuZ2Vsb2csLDo6LCI6IEZpeCBGVFAgdGVzdHMgZm9yIElQdjYsIGJpbmQgdG8gIiI6OjEiIiBpbnN0ZWFkIG9mICIibG9jYWxob3N0IiIuIgogd2hhdHNuZXcvY2hhbmdlbG9nLCw6OiwiOiBVc2UgIiIxMjcuMC4wLjEiIiBvciAiIjo6MSIiIGluc3RlYWQgb2YgIiJsb2NhbGhvc3QiIiBhcyBtdWNoIGFzIgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdCBiL0RvYy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5yc3QKaW5kZXggMzZhY2IwNi4uYWJmMzBmMCAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0CkBAIC03LDE0MCArNywyNyBAQAogU29tZSB2ZXJzaW9ucyBvZiB0aGUgUHl0aG9uIGludGVycHJldGVyIHN1cHBvcnQgZWRpdGluZyBvZiB0aGUgY3VycmVudCBpbnB1dAogbGluZSBhbmQgaGlzdG9yeSBzdWJzdGl0dXRpb24sIHNpbWlsYXIgdG8gZmFjaWxpdGllcyBmb3VuZCBpbiB0aGUgS29ybiBzaGVsbCBhbmQKIHRoZSBHTlUgQmFzaCBzaGVsbC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIGBHTlUgUmVhZGxpbmVgXyBsaWJyYXJ5LAotd2hpY2ggc3VwcG9ydHMgRW1hY3Mtc3R5bGUgYW5kIHZpLXN0eWxlIGVkaXRpbmcuICBUaGlzIGxpYnJhcnkgaGFzIGl0cyBvd24KLWRvY3VtZW50YXRpb24gd2hpY2ggSSB3b24ndCBkdXBsaWNhdGUgaGVyZTsgaG93ZXZlciwgdGhlIGJhc2ljcyBhcmUgZWFzaWx5Ci1leHBsYWluZWQuICBUaGUgaW50ZXJhY3RpdmUgZWRpdGluZyBhbmQgaGlzdG9yeSBkZXNjcmliZWQgaGVyZSBhcmUgb3B0aW9uYWxseQotYXZhaWxhYmxlIGluIHRoZSBVbml4IGFuZCBDeWd3aW4gdmVyc2lvbnMgb2YgdGhlIGludGVycHJldGVyLgotCi1UaGlzIGNoYXB0ZXIgZG9lcyAqbm90KiBkb2N1bWVudCB0aGUgZWRpdGluZyBmYWNpbGl0aWVzIG9mIE1hcmsgSGFtbW9uZCdzCi1QeXRob25XaW4gcGFja2FnZSBvciB0aGUgVGstYmFzZWQgZW52aXJvbm1lbnQsIElETEUsIGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uLgotVGhlIGNvbW1hbmQgbGluZSBoaXN0b3J5IHJlY2FsbCB3aGljaCBvcGVyYXRlcyB3aXRoaW4gRE9TIGJveGVzIG9uIE5UIGFuZCBzb21lCi1vdGhlciBET1MgYW5kIFdpbmRvd3MgZmxhdm9ycyAgaXMgeWV0IGFub3RoZXIgYmVhc3QuCi0KLQotLi4gX3R1dC1saW5lZWRpdGluZzoKLQotTGluZSBFZGl0aW5nCi09PT09PT09PT09PT0KLQotSWYgc3VwcG9ydGVkLCBpbnB1dCBsaW5lIGVkaXRpbmcgaXMgYWN0aXZlIHdoZW5ldmVyIHRoZSBpbnRlcnByZXRlciBwcmludHMgYQotcHJpbWFyeSBvciBzZWNvbmRhcnkgcHJvbXB0LiAgVGhlIGN1cnJlbnQgbGluZSBjYW4gYmUgZWRpdGVkIHVzaW5nIHRoZQotY29udmVudGlvbmFsIEVtYWNzIGNvbnRyb2wgY2hhcmFjdGVycy4gIFRoZSBtb3N0IGltcG9ydGFudCBvZiB0aGVzZSBhcmU6Ci06a2JkOmBDLUFgIChDb250cm9sLUEpIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSwgOmtiZDpgQy1FYAotdG8gdGhlIGVuZCwgOmtiZDpgQy1CYCBtb3ZlcyBpdCBvbmUgcG9zaXRpb24gdG8gdGhlIGxlZnQsIDprYmQ6YEMtRmAgdG8gdGhlCi1yaWdodC4gIEJhY2tzcGFjZSBlcmFzZXMgdGhlIGNoYXJhY3RlciB0byB0aGUgbGVmdCBvZiB0aGUgY3Vyc29yLCA6a2JkOmBDLURgIHRoZQotY2hhcmFjdGVyIHRvIGl0cyByaWdodC4gOmtiZDpgQy1LYCBraWxscyAoZXJhc2VzKSB0aGUgcmVzdCBvZiB0aGUgbGluZSB0byB0aGUKLXJpZ2h0IG9mIHRoZSBjdXJzb3IsIDprYmQ6YEMtWWAgeWFua3MgYmFjayB0aGUgbGFzdCBraWxsZWQgc3RyaW5nLgotOmtiZDpgQy11bmRlcnNjb3JlYCB1bmRvZXMgdGhlIGxhc3QgY2hhbmdlIHlvdSBtYWRlOyBpdCBjYW4gYmUgcmVwZWF0ZWQgZm9yCi1jdW11bGF0aXZlIGVmZmVjdC4KLQotCi0uLiBfdHV0LWhpc3Rvcnk6Ci0KLUhpc3RvcnkgU3Vic3RpdHV0aW9uCi09PT09PT09PT09PT09PT09PT09PQotCi1IaXN0b3J5IHN1YnN0aXR1dGlvbiB3b3JrcyBhcyBmb2xsb3dzLiAgQWxsIG5vbi1lbXB0eSBpbnB1dCBsaW5lcyBpc3N1ZWQgYXJlCi1zYXZlZCBpbiBhIGhpc3RvcnkgYnVmZmVyLCBhbmQgd2hlbiBhIG5ldyBwcm9tcHQgaXMgZ2l2ZW4geW91IGFyZSBwb3NpdGlvbmVkIG9uCi1hIG5ldyBsaW5lIGF0IHRoZSBib3R0b20gb2YgdGhpcyBidWZmZXIuIDprYmQ6YEMtUGAgbW92ZXMgb25lIGxpbmUgdXAgKGJhY2spIGluCi10aGUgaGlzdG9yeSBidWZmZXIsIDprYmQ6YEMtTmAgbW92ZXMgb25lIGRvd24uICBBbnkgbGluZSBpbiB0aGUgaGlzdG9yeSBidWZmZXIKLWNhbiBiZSBlZGl0ZWQ7IGFuIGFzdGVyaXNrIGFwcGVhcnMgaW4gZnJvbnQgb2YgdGhlIHByb21wdCB0byBtYXJrIGEgbGluZSBhcwotbW9kaWZpZWQuICBQcmVzc2luZyB0aGUgOmtiZDpgUmV0dXJuYCBrZXkgcGFzc2VzIHRoZSBjdXJyZW50IGxpbmUgdG8gdGhlCi1pbnRlcnByZXRlci4gIDprYmQ6YEMtUmAgc3RhcnRzIGFuIGluY3JlbWVudGFsIHJldmVyc2Ugc2VhcmNoOyA6a2JkOmBDLVNgIHN0YXJ0cwotYSBmb3J3YXJkIHNlYXJjaC4KK3doaWNoIHN1cHBvcnRzIHZhcmlvdXMgc3R5bGVzIG9mIGVkaXRpbmcuICBUaGlzIGxpYnJhcnkgaGFzIGl0cyBvd24KK2RvY3VtZW50YXRpb24gd2hpY2ggd2Ugd29uJ3QgZHVwbGljYXRlIGhlcmUuCiAKIAogLi4gX3R1dC1rZXliaW5kaW5nczoKIAotS2V5IEJpbmRpbmdzCi09PT09PT09PT09PT0KK1RhYiBDb21wbGV0aW9uIGFuZCBIaXN0b3J5IEVkaXRpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIGtleSBiaW5kaW5ncyBhbmQgc29tZSBvdGhlciBwYXJhbWV0ZXJzIG9mIHRoZSBSZWFkbGluZSBsaWJyYXJ5IGNhbiBiZQotY3VzdG9taXplZCBieSBwbGFjaW5nIGNvbW1hbmRzIGluIGFuIGluaXRpYWxpemF0aW9uIGZpbGUgY2FsbGVkCi06ZmlsZTpgfi8uaW5wdXRyY2AuICBLZXkgYmluZGluZ3MgaGF2ZSB0aGUgZm9ybSA6OgotCi0gICBrZXktbmFtZTogZnVuY3Rpb24tbmFtZQotCi1vciA6OgotCi0gICAic3RyaW5nIjogZnVuY3Rpb24tbmFtZQotCi1hbmQgb3B0aW9ucyBjYW4gYmUgc2V0IHdpdGggOjoKLQotICAgc2V0IG9wdGlvbi1uYW1lIHZhbHVlCi0KLUZvciBleGFtcGxlOjoKLQotICAgIyBJIHByZWZlciB2aS1zdHlsZSBlZGl0aW5nOgotICAgc2V0IGVkaXRpbmctbW9kZSB2aQotCi0gICAjIEVkaXQgdXNpbmcgYSBzaW5nbGUgbGluZToKLSAgIHNldCBob3Jpem9udGFsLXNjcm9sbC1tb2RlIE9uCi0KLSAgICMgUmViaW5kIHNvbWUga2V5czoKLSAgIE1ldGEtaDogYmFja3dhcmQta2lsbC13b3JkCi0gICAiXEMtdSI6IHVuaXZlcnNhbC1hcmd1bWVudAotICAgIlxDLXhcQy1yIjogcmUtcmVhZC1pbml0LWZpbGUKLQotTm90ZSB0aGF0IHRoZSBkZWZhdWx0IGJpbmRpbmcgZm9yIDprYmQ6YFRhYmAgaW4gUHl0aG9uIGlzIHRvIGluc2VydCBhIDprYmQ6YFRhYmAKLWNoYXJhY3RlciBpbnN0ZWFkIG9mIFJlYWRsaW5lJ3MgZGVmYXVsdCBmaWxlbmFtZSBjb21wbGV0aW9uIGZ1bmN0aW9uLiAgSWYgeW91Ci1pbnNpc3QsIHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBieSBwdXR0aW5nIDo6Ci0KLSAgIFRhYjogY29tcGxldGUKLQotaW4geW91ciA6ZmlsZTpgfi8uaW5wdXRyY2AuICAoT2YgY291cnNlLCB0aGlzIG1ha2VzIGl0IGhhcmRlciB0byB0eXBlIGluZGVudGVkCi1jb250aW51YXRpb24gbGluZXMgaWYgeW91J3JlIGFjY3VzdG9tZWQgdG8gdXNpbmcgOmtiZDpgVGFiYCBmb3IgdGhhdCBwdXJwb3NlLikKLQotLi4gaW5kZXg6OgotICAgbW9kdWxlOiBybGNvbXBsZXRlcgotICAgbW9kdWxlOiByZWFkbGluZQotCi1BdXRvbWF0aWMgY29tcGxldGlvbiBvZiB2YXJpYWJsZSBhbmQgbW9kdWxlIG5hbWVzIGlzIG9wdGlvbmFsbHkgYXZhaWxhYmxlLiAgVG8KLWVuYWJsZSBpdCBpbiB0aGUgaW50ZXJwcmV0ZXIncyBpbnRlcmFjdGl2ZSBtb2RlLCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyCi1zdGFydHVwIGZpbGU6IFsjXV8gIDo6Ci0KLSAgIGltcG9ydCBybGNvbXBsZXRlciwgcmVhZGxpbmUKLSAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCd0YWI6IGNvbXBsZXRlJykKLQotVGhpcyBiaW5kcyB0aGUgOmtiZDpgVGFiYCBrZXkgdG8gdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24sIHNvIGhpdHRpbmcgdGhlCi06a2JkOmBUYWJgIGtleSB0d2ljZSBzdWdnZXN0cyBjb21wbGV0aW9uczsgaXQgbG9va3MgYXQgUHl0aG9uIHN0YXRlbWVudCBuYW1lcywKLXRoZSBjdXJyZW50IGxvY2FsIHZhcmlhYmxlcywgYW5kIHRoZSBhdmFpbGFibGUgbW9kdWxlIG5hbWVzLiAgRm9yIGRvdHRlZAotZXhwcmVzc2lvbnMgc3VjaCBhcyBgYHN0cmluZy5hYGAsIGl0IHdpbGwgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gdXAgdG8gdGhlCi1maW5hbCBgYCcuJ2BgIGFuZCB0aGVuIHN1Z2dlc3QgY29tcGxldGlvbnMgZnJvbSB0aGUgYXR0cmlidXRlcyBvZiB0aGUgcmVzdWx0aW5nCi1vYmplY3QuICBOb3RlIHRoYXQgdGhpcyBtYXkgZXhlY3V0ZSBhcHBsaWNhdGlvbi1kZWZpbmVkIGNvZGUgaWYgYW4gb2JqZWN0IHdpdGggYQotOm1ldGg6YF9fZ2V0YXR0cl9fYCBtZXRob2QgaXMgcGFydCBvZiB0aGUgZXhwcmVzc2lvbi4KLQotQSBtb3JlIGNhcGFibGUgc3RhcnR1cCBmaWxlIG1pZ2h0IGxvb2sgbGlrZSB0aGlzIGV4YW1wbGUuICBOb3RlIHRoYXQgdGhpcwotZGVsZXRlcyB0aGUgbmFtZXMgaXQgY3JlYXRlcyBvbmNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQ7IHRoaXMgaXMgZG9uZSBzaW5jZQotdGhlIHN0YXJ0dXAgZmlsZSBpcyBleGVjdXRlZCBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXMgdGhlIGludGVyYWN0aXZlIGNvbW1hbmRzLAotYW5kIHJlbW92aW5nIHRoZSBuYW1lcyBhdm9pZHMgY3JlYXRpbmcgc2lkZSBlZmZlY3RzIGluIHRoZSBpbnRlcmFjdGl2ZQotZW52aXJvbm1lbnQuICBZb3UgbWF5IGZpbmQgaXQgY29udmVuaWVudCB0byBrZWVwIHNvbWUgb2YgdGhlIGltcG9ydGVkIG1vZHVsZXMsCi1zdWNoIGFzIDptb2Q6YG9zYCwgd2hpY2ggdHVybiBvdXQgdG8gYmUgbmVlZGVkIGluIG1vc3Qgc2Vzc2lvbnMgd2l0aCB0aGUKLWludGVycHJldGVyLiA6OgotCi0gICAjIEFkZCBhdXRvLWNvbXBsZXRpb24gYW5kIGEgc3RvcmVkIGhpc3RvcnkgZmlsZSBvZiBjb21tYW5kcyB0byB5b3VyIFB5dGhvbgotICAgIyBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlci4gUmVxdWlyZXMgUHl0aG9uIDIuMCssIHJlYWRsaW5lLiBBdXRvY29tcGxldGUgaXMKLSAgICMgYm91bmQgdG8gdGhlIEVzYyBrZXkgYnkgZGVmYXVsdCAoeW91IGNhbiBjaGFuZ2UgaXQgLSBzZWUgcmVhZGxpbmUgZG9jcykuCi0gICAjCi0gICAjIFN0b3JlIHRoZSBmaWxlIGluIH4vLnB5c3RhcnR1cCwgYW5kIHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwb2ludAotICAgIyB0byBpdDogICJleHBvcnQgUFlUSE9OU1RBUlRVUD1+Ly5weXN0YXJ0dXAiIGluIGJhc2guCi0KLSAgIGltcG9ydCBhdGV4aXQKLSAgIGltcG9ydCBvcwotICAgaW1wb3J0IHJlYWRsaW5lCi0gICBpbXBvcnQgcmxjb21wbGV0ZXIKLQotICAgaGlzdG9yeVBhdGggPSBvcy5wYXRoLmV4cGFuZHVzZXIoIn4vLnB5aGlzdG9yeSIpCi0KLSAgIGRlZiBzYXZlX2hpc3RvcnkoaGlzdG9yeVBhdGg9aGlzdG9yeVBhdGgpOgotICAgICAgIGltcG9ydCByZWFkbGluZQotICAgICAgIHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZShoaXN0b3J5UGF0aCkKLQotICAgaWYgb3MucGF0aC5leGlzdHMoaGlzdG9yeVBhdGgpOgotICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKGhpc3RvcnlQYXRoKQotCi0gICBhdGV4aXQucmVnaXN0ZXIoc2F2ZV9oaXN0b3J5KQotICAgZGVsIG9zLCBhdGV4aXQsIHJlYWRsaW5lLCBybGNvbXBsZXRlciwgc2F2ZV9oaXN0b3J5LCBoaXN0b3J5UGF0aAorQ29tcGxldGlvbiBvZiB2YXJpYWJsZSBhbmQgbW9kdWxlIG5hbWVzIGlzCis6cmVmOmBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgPHJsY29tcGxldGVyLWNvbmZpZz5gIGF0IGludGVycHJldGVyIHN0YXJ0dXAgc28KK3RoYXQgdGhlIDprYmQ6YFRhYmAga2V5IGludm9rZXMgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb247IGl0IGxvb2tzIGF0CitQeXRob24gc3RhdGVtZW50IG5hbWVzLCB0aGUgY3VycmVudCBsb2NhbCB2YXJpYWJsZXMsIGFuZCB0aGUgYXZhaWxhYmxlCittb2R1bGUgbmFtZXMuICBGb3IgZG90dGVkIGV4cHJlc3Npb25zIHN1Y2ggYXMgYGBzdHJpbmcuYWBgLCBpdCB3aWxsIGV2YWx1YXRlCit0aGUgZXhwcmVzc2lvbiB1cCB0byB0aGUgZmluYWwgYGAnLidgYCBhbmQgdGhlbiBzdWdnZXN0IGNvbXBsZXRpb25zIGZyb20KK3RoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZXN1bHRpbmcgb2JqZWN0LiAgTm90ZSB0aGF0IHRoaXMgbWF5IGV4ZWN1dGUKK2FwcGxpY2F0aW9uLWRlZmluZWQgY29kZSBpZiBhbiBvYmplY3Qgd2l0aCBhIDptZXRoOmBfX2dldGF0dHJfX2AgbWV0aG9kCitpcyBwYXJ0IG9mIHRoZSBleHByZXNzaW9uLiAgVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBhbHNvIHNhdmVzIHlvdXIKK2hpc3RvcnkgaW50byBhIGZpbGUgbmFtZWQgOmZpbGU6YC5weXRob25faGlzdG9yeWAgaW4geW91ciB1c2VyIGRpcmVjdG9yeS4KK1RoZSBoaXN0b3J5IHdpbGwgYmUgYXZhaWxhYmxlIGFnYWluIGR1cmluZyB0aGUgbmV4dCBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcgorc2Vzc2lvbi4KIAogCiAuLiBfdHV0LWNvbW1lbnRhcnk6CkBAIC0xNjIsMTQgKzQ5LDYgQEAKIGJweXRob25fLgogCiAKLS4uIHJ1YnJpYzo6IEZvb3Rub3RlcwotCi0uLiBbI10gUHl0aG9uIHdpbGwgZXhlY3V0ZSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGlkZW50aWZpZWQgYnkgdGhlCi0gICA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHlvdSBzdGFydCBhbiBpbnRlcmFjdGl2ZQotICAgaW50ZXJwcmV0ZXIuICBUbyBjdXN0b21pemUgUHl0aG9uIGV2ZW4gZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBzZWUKLSAgIDpyZWY6YHR1dC1jdXN0b21pemVgLgotCi0KIC4uIF9HTlUgUmVhZGxpbmU6IGh0dHA6Ly90aXN3d3cuY2FzZS5lZHUvcGhwL2NoZXQvcmVhZGxpbmUvcmx0b3AuaHRtbAogLi4gX0lQeXRob246IGh0dHA6Ly9pcHl0aG9uLnNjaXB5Lm9yZy8KIC4uIF9icHl0aG9uOiBodHRwOi8vd3d3LmJweXRob24taW50ZXJwcmV0ZXIub3JnLwpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdCBiL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKaW5kZXggY2RjMmJmMi4uYzE4MjUxMSAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CkBAIC0xMCwxMyArMTAsMTMgQEAKIEludm9raW5nIHRoZSBJbnRlcnByZXRlcgogPT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgdXN1YWxseSBpbnN0YWxsZWQgYXMgOmZpbGU6YC91c3IvbG9jYWwvYmluL3B5dGhvbjMuM2AKK1RoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgdXN1YWxseSBpbnN0YWxsZWQgYXMgOmZpbGU6YC91c3IvbG9jYWwvYmluL3B5dGhvbjMuNGAKIG9uIHRob3NlIG1hY2hpbmVzIHdoZXJlIGl0IGlzIGF2YWlsYWJsZTsgcHV0dGluZyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW5gIGluIHlvdXIKIFVuaXggc2hlbGwncyBzZWFyY2ggcGF0aCBtYWtlcyBpdCBwb3NzaWJsZSB0byBzdGFydCBpdCBieSB0eXBpbmcgdGhlIGNvbW1hbmQ6CiAKIC4uIGNvZGUtYmxvY2s6OiB0ZXh0CiAKLSAgIHB5dGhvbjMuMworICAgcHl0aG9uMy40CiAKIHRvIHRoZSBzaGVsbC4gWyNdXyBTaW5jZSB0aGUgY2hvaWNlIG9mIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGludGVycHJldGVyIGxpdmVzCiBpcyBhbiBpbnN0YWxsYXRpb24gb3B0aW9uLCBvdGhlciBwbGFjZXMgYXJlIHBvc3NpYmxlOyBjaGVjayB3aXRoIHlvdXIgbG9jYWwKQEAgLTI0LDExICsyNCwxMSBAQAogcG9wdWxhciBhbHRlcm5hdGl2ZSBsb2NhdGlvbi4pCiAKIE9uIFdpbmRvd3MgbWFjaGluZXMsIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uIGlzIHVzdWFsbHkgcGxhY2VkIGluCi06ZmlsZTpgQzpcXFB5dGhvbjMzYCwgdGhvdWdoIHlvdSBjYW4gY2hhbmdlIHRoaXMgd2hlbiB5b3UncmUgcnVubmluZyB0aGUKKzpmaWxlOmBDOlxcUHl0aG9uMzRgLCB0aG91Z2ggeW91IGNhbiBjaGFuZ2UgdGhpcyB3aGVuIHlvdSdyZSBydW5uaW5nIHRoZQogaW5zdGFsbGVyLiAgVG8gYWRkIHRoaXMgZGlyZWN0b3J5IHRvIHlvdXIgcGF0aCwgIHlvdSBjYW4gdHlwZSB0aGUgZm9sbG93aW5nCiBjb21tYW5kIGludG8gdGhlIGNvbW1hbmQgcHJvbXB0IGluIGEgRE9TIGJveDo6CiAKLSAgIHNldCBwYXRoPSVwYXRoJTtDOlxweXRob24zMworICAgc2V0IHBhdGg9JXBhdGglO0M6XHB5dGhvbjM0CiAKIFR5cGluZyBhbiBlbmQtb2YtZmlsZSBjaGFyYWN0ZXIgKDprYmQ6YENvbnRyb2wtRGAgb24gVW5peCwgOmtiZDpgQ29udHJvbC1aYCBvbgogV2luZG93cykgYXQgdGhlIHByaW1hcnkgcHJvbXB0IGNhdXNlcyB0aGUgaW50ZXJwcmV0ZXIgdG8gZXhpdCB3aXRoIGEgemVybyBleGl0CkBAIC05NSw4ICs5NSw4IEBACiBwcmludHMgYSB3ZWxjb21lIG1lc3NhZ2Ugc3RhdGluZyBpdHMgdmVyc2lvbiBudW1iZXIgYW5kIGEgY29weXJpZ2h0IG5vdGljZQogYmVmb3JlIHByaW50aW5nIHRoZSBmaXJzdCBwcm9tcHQ6OgogCi0gICAkIHB5dGhvbjMuMwotICAgUHl0aG9uIDMuMyAoZGVmYXVsdCwgU2VwIDI0IDIwMTIsIDA5OjI1OjA0KQorICAgJCBweXRob24zLjQKKyAgIFB5dGhvbiAzLjQgKGRlZmF1bHQsIFNlcCAyNCAyMDEyLCAwOToyNTowNCkKICAgIFtHQ0MgNC42LjNdIG9uIGxpbnV4MgogICAgVHlwZSAiaGVscCIsICJjb3B5cmlnaHQiLCAiY3JlZGl0cyIgb3IgImxpY2Vuc2UiIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgPj4+CkBAIC0xNDksNyArMTQ5LDcgQEAKIE9uIEJTRCdpc2ggVW5peCBzeXN0ZW1zLCBQeXRob24gc2NyaXB0cyBjYW4gYmUgbWFkZSBkaXJlY3RseSBleGVjdXRhYmxlLCBsaWtlCiBzaGVsbCBzY3JpcHRzLCBieSBwdXR0aW5nIHRoZSBsaW5lIDo6CiAKLSAgICMhIC91c3IvYmluL2VudiBweXRob24zLjMKKyAgICMhIC91c3IvYmluL2VudiBweXRob24zLjQKIAogKGFzc3VtaW5nIHRoYXQgdGhlIGludGVycHJldGVyIGlzIG9uIHRoZSB1c2VyJ3MgOmVudnZhcjpgUEFUSGApIGF0IHRoZSBiZWdpbm5pbmcKIG9mIHRoZSBzY3JpcHQgYW5kIGdpdmluZyB0aGUgZmlsZSBhbiBleGVjdXRhYmxlIG1vZGUuICBUaGUgYGAjIWBgIG11c3QgYmUgdGhlCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QgYi9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QKaW5kZXggMTkwMjk2NC4uZmQzNjFhZSAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0CisrKyBiL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdApAQCAtMTY1LDEwICsxNjUsMTYgQEAKIG5hbWVkIDpmaWxlOmBzcGFtLnB5YCBpbiBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgZ2l2ZW4gYnkgdGhlIHZhcmlhYmxlCiA6ZGF0YTpgc3lzLnBhdGhgLiAgOmRhdGE6YHN5cy5wYXRoYCBpcyBpbml0aWFsaXplZCBmcm9tIHRoZXNlIGxvY2F0aW9uczoKIAotKiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGlucHV0IHNjcmlwdCAob3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5KS4KKyogVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbnB1dCBzY3JpcHQgKG9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGVuIG5vCisgIGZpbGUgaXMgc3BlY2lmaWVkKS4KICogOmVudnZhcjpgUFlUSE9OUEFUSGAgKGEgbGlzdCBvZiBkaXJlY3RvcnkgbmFtZXMsIHdpdGggdGhlIHNhbWUgc3ludGF4IGFzIHRoZQogICBzaGVsbCB2YXJpYWJsZSA6ZW52dmFyOmBQQVRIYCkuCi0qIHRoZSBpbnN0YWxsYXRpb24tZGVwZW5kZW50IGRlZmF1bHQuCisqIFRoZSBpbnN0YWxsYXRpb24tZGVwZW5kZW50IGRlZmF1bHQuCisKKy4uIG5vdGU6OgorICAgT24gZmlsZSBzeXN0ZW1zIHdoaWNoIHN1cHBvcnQgc3ltbGlua3MsIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW5wdXQKKyAgIHNjcmlwdCBpcyBjYWxjdWxhdGVkIGFmdGVyIHRoZSBzeW1saW5rIGlzIGZvbGxvd2VkLiBJbiBvdGhlciB3b3JkcyB0aGUKKyAgIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzeW1saW5rIGlzICoqbm90KiogYWRkZWQgdG8gdGhlIG1vZHVsZSBzZWFyY2ggcGF0aC4KIAogQWZ0ZXIgaW5pdGlhbGl6YXRpb24sIFB5dGhvbiBwcm9ncmFtcyBjYW4gbW9kaWZ5IDpkYXRhOmBzeXMucGF0aGAuICBUaGUKIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzY3JpcHQgYmVpbmcgcnVuIGlzIHBsYWNlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQpAQCAtMjc4LDI0ICsyODQsMjMgQEAKICAgID4+PiBkaXIoZmlibykKICAgIFsnX19uYW1lX18nLCAnZmliJywgJ2ZpYjInXQogICAgPj4+IGRpcihzeXMpICAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQotICAgWydfX2Rpc3BsYXlob29rX18nLCAnX19kb2NfXycsICdfX2VnZ2luc2VydCcsICdfX2V4Y2VwdGhvb2tfXycsCi0gICAgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wbGVuJywgJ19fc3RkZXJyX18nLAotICAgICdfX3N0ZGluX18nLCAnX19zdGRvdXRfXycsICdfY2xlYXJfdHlwZV9jYWNoZScsICdfY3VycmVudF9mcmFtZXMnLAotICAgICdfZGVidWdtYWxsb2NzdGF0cycsICdfZ2V0ZnJhbWUnLCAnX2hvbWUnLCAnX21lcmN1cmlhbCcsICdfeG9wdGlvbnMnLAotICAgICdhYmlmbGFncycsICdhcGlfdmVyc2lvbicsICdhcmd2JywgJ2Jhc2VfZXhlY19wcmVmaXgnLCAnYmFzZV9wcmVmaXgnLAotICAgICdidWlsdGluX21vZHVsZV9uYW1lcycsICdieXRlb3JkZXInLCAnY2FsbF90cmFjaW5nJywgJ2NhbGxzdGF0cycsCi0gICAgJ2NvcHlyaWdodCcsICdkaXNwbGF5aG9vaycsICdkb250X3dyaXRlX2J5dGVjb2RlJywgJ2V4Y19pbmZvJywKLSAgICAnZXhjZXB0aG9vaycsICdleGVjX3ByZWZpeCcsICdleGVjdXRhYmxlJywgJ2V4aXQnLCAnZmxhZ3MnLCAnZmxvYXRfaW5mbycsCi0gICAgJ2Zsb2F0X3JlcHJfc3R5bGUnLCAnZ2V0Y2hlY2tpbnRlcnZhbCcsICdnZXRkZWZhdWx0ZW5jb2RpbmcnLAotICAgICdnZXRkbG9wZW5mbGFncycsICdnZXRmaWxlc3lzdGVtZW5jb2RpbmcnLCAnZ2V0b2JqZWN0cycsICdnZXRwcm9maWxlJywKLSAgICAnZ2V0cmVjdXJzaW9ubGltaXQnLCAnZ2V0cmVmY291bnQnLCAnZ2V0c2l6ZW9mJywgJ2dldHN3aXRjaGludGVydmFsJywKLSAgICAnZ2V0dG90YWxyZWZjb3VudCcsICdnZXR0cmFjZScsICdoYXNoX2luZm8nLCAnaGV4dmVyc2lvbicsCi0gICAgJ2ltcGxlbWVudGF0aW9uJywgJ2ludF9pbmZvJywgJ2ludGVybicsICdtYXhzaXplJywgJ21heHVuaWNvZGUnLAotICAgICdtZXRhX3BhdGgnLCAnbW9kdWxlcycsICdwYXRoJywgJ3BhdGhfaG9va3MnLCAncGF0aF9pbXBvcnRlcl9jYWNoZScsCi0gICAgJ3BsYXRmb3JtJywgJ3ByZWZpeCcsICdwczEnLCAnc2V0Y2hlY2tpbnRlcnZhbCcsICdzZXRkbG9wZW5mbGFncycsCi0gICAgJ3NldHByb2ZpbGUnLCAnc2V0cmVjdXJzaW9ubGltaXQnLCAnc2V0c3dpdGNoaW50ZXJ2YWwnLCAnc2V0dHJhY2UnLAotICAgICdzdGRlcnInLCAnc3RkaW4nLCAnc3Rkb3V0JywgJ3RocmVhZF9pbmZvJywgJ3ZlcnNpb24nLCAndmVyc2lvbl9pbmZvJywKLSAgICAnd2Fybm9wdGlvbnMnXQorICAgWydfX2Rpc3BsYXlob29rX18nLCAnX19kb2NfXycsICdfX2V4Y2VwdGhvb2tfXycsICdfX2xvYWRlcl9fJywgJ19fbmFtZV9fJywKKyAgICAnX19wYWNrYWdlX18nLCAnX19zdGRlcnJfXycsICdfX3N0ZGluX18nLCAnX19zdGRvdXRfXycsCisgICAgJ19jbGVhcl90eXBlX2NhY2hlJywgJ19jdXJyZW50X2ZyYW1lcycsICdfZGVidWdtYWxsb2NzdGF0cycsICdfZ2V0ZnJhbWUnLAorICAgICdfaG9tZScsICdfbWVyY3VyaWFsJywgJ194b3B0aW9ucycsICdhYmlmbGFncycsICdhcGlfdmVyc2lvbicsICdhcmd2JywKKyAgICAnYmFzZV9leGVjX3ByZWZpeCcsICdiYXNlX3ByZWZpeCcsICdidWlsdGluX21vZHVsZV9uYW1lcycsICdieXRlb3JkZXInLAorICAgICdjYWxsX3RyYWNpbmcnLCAnY2FsbHN0YXRzJywgJ2NvcHlyaWdodCcsICdkaXNwbGF5aG9vaycsCisgICAgJ2RvbnRfd3JpdGVfYnl0ZWNvZGUnLCAnZXhjX2luZm8nLCAnZXhjZXB0aG9vaycsICdleGVjX3ByZWZpeCcsCisgICAgJ2V4ZWN1dGFibGUnLCAnZXhpdCcsICdmbGFncycsICdmbG9hdF9pbmZvJywgJ2Zsb2F0X3JlcHJfc3R5bGUnLAorICAgICdnZXRjaGVja2ludGVydmFsJywgJ2dldGRlZmF1bHRlbmNvZGluZycsICdnZXRkbG9wZW5mbGFncycsCisgICAgJ2dldGZpbGVzeXN0ZW1lbmNvZGluZycsICdnZXRvYmplY3RzJywgJ2dldHByb2ZpbGUnLCAnZ2V0cmVjdXJzaW9ubGltaXQnLAorICAgICdnZXRyZWZjb3VudCcsICdnZXRzaXplb2YnLCAnZ2V0c3dpdGNoaW50ZXJ2YWwnLCAnZ2V0dG90YWxyZWZjb3VudCcsCisgICAgJ2dldHRyYWNlJywgJ2hhc2hfaW5mbycsICdoZXh2ZXJzaW9uJywgJ2ltcGxlbWVudGF0aW9uJywgJ2ludF9pbmZvJywKKyAgICAnaW50ZXJuJywgJ21heHNpemUnLCAnbWF4dW5pY29kZScsICdtZXRhX3BhdGgnLCAnbW9kdWxlcycsICdwYXRoJywKKyAgICAncGF0aF9ob29rcycsICdwYXRoX2ltcG9ydGVyX2NhY2hlJywgJ3BsYXRmb3JtJywgJ3ByZWZpeCcsICdwczEnLAorICAgICdzZXRjaGVja2ludGVydmFsJywgJ3NldGRsb3BlbmZsYWdzJywgJ3NldHByb2ZpbGUnLCAnc2V0cmVjdXJzaW9ubGltaXQnLAorICAgICdzZXRzd2l0Y2hpbnRlcnZhbCcsICdzZXR0cmFjZScsICdzdGRlcnInLCAnc3RkaW4nLCAnc3Rkb3V0JywKKyAgICAndGhyZWFkX2luZm8nLCAndmVyc2lvbicsICd2ZXJzaW9uX2luZm8nLCAnd2Fybm9wdGlvbnMnXQogCiBXaXRob3V0IGFyZ3VtZW50cywgOmZ1bmM6YGRpcmAgbGlzdHMgdGhlIG5hbWVzIHlvdSBoYXZlIGRlZmluZWQgY3VycmVudGx5OjoKIApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3N0ZGxpYi5yc3QgYi9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdAppbmRleCA3ZTdhMTU0Li4yZTNlZDE4IDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdApAQCAtMTUsNyArMTUsNyBAQAogCiAgICA+Pj4gaW1wb3J0IG9zCiAgICA+Pj4gb3MuZ2V0Y3dkKCkgICAgICAjIFJldHVybiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQotICAgJ0M6XFxQeXRob24zMycKKyAgICdDOlxcUHl0aG9uMzQnCiAgICA+Pj4gb3MuY2hkaXIoJy9zZXJ2ZXIvYWNjZXNzbG9ncycpICAgIyBDaGFuZ2UgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQogICAgPj4+IG9zLnN5c3RlbSgnbWtkaXIgdG9kYXknKSAgICMgUnVuIHRoZSBjb21tYW5kIG1rZGlyIGluIHRoZSBzeXN0ZW0gc2hlbGwKICAgIDAKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdCBiL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdAppbmRleCBjMWRkNjlhLi5jMDE5N2VhIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0CkBAIC0yNzcsNyArMjc3LDcgQEAKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KICAgICAgICBkWydwcmltYXJ5J10gICAgICAgICAgICAgICAgIyBlbnRyeSB3YXMgYXV0b21hdGljYWxseSByZW1vdmVkCi0gICAgIEZpbGUgIkM6L3B5dGhvbjMzL2xpYi93ZWFrcmVmLnB5IiwgbGluZSA0NiwgaW4gX19nZXRpdGVtX18KKyAgICAgRmlsZSAiQzovcHl0aG9uMzQvbGliL3dlYWtyZWYucHkiLCBsaW5lIDQ2LCBpbiBfX2dldGl0ZW1fXwogICAgICAgIG8gPSBzZWxmLmRhdGFba2V5XSgpCiAgICBLZXlFcnJvcjogJ3ByaW1hcnknCiAKZGlmZiAtLWdpdCBhL0RvYy91c2luZy9jbWRsaW5lLnJzdCBiL0RvYy91c2luZy9jbWRsaW5lLnJzdAppbmRleCA0ZTcxNjhmLi40ODA3YTM2IDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvY21kbGluZS5yc3QKKysrIGIvRG9jL3VzaW5nL2NtZGxpbmUucnN0CkBAIC0yNCw3ICsyNCw3IEBACiAKIFdoZW4gaW52b2tpbmcgUHl0aG9uLCB5b3UgbWF5IHNwZWNpZnkgYW55IG9mIHRoZXNlIG9wdGlvbnM6OgogCi0gICAgcHl0aG9uIFstYkJkRWhpT3FzU3V2Vld4P10gWy1jIGNvbW1hbmQgfCAtbSBtb2R1bGUtbmFtZSB8IHNjcmlwdCB8IC0gXSBbYXJnc10KKyAgICBweXRob24gWy1iQmRFaGlJT3FzU3V2Vld4P10gWy1jIGNvbW1hbmQgfCAtbSBtb2R1bGUtbmFtZSB8IHNjcmlwdCB8IC0gXSBbYXJnc10KIAogVGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlIGlzLCBvZiBjb3Vyc2UsIGEgc2ltcGxlIGludm9jYXRpb24gb2YgYSBzY3JpcHQ6OgogCkBAIC04MSw3ICs4MSw4IEBACiAgICB0aGUgaW1wbGVtZW50YXRpb24gbWF5IG5vdCBhbHdheXMgZW5mb3JjZSB0aGlzIChlLmcuIGl0IG1heSBhbGxvdyB5b3UgdG8KICAgIHVzZSBhIG5hbWUgdGhhdCBpbmNsdWRlcyBhIGh5cGhlbikuCiAKLSAgIFBhY2thZ2UgbmFtZXMgYXJlIGFsc28gcGVybWl0dGVkLiBXaGVuIGEgcGFja2FnZSBuYW1lIGlzIHN1cHBsaWVkIGluc3RlYWQKKyAgIFBhY2thZ2UgbmFtZXMgKGluY2x1ZGluZyBuYW1lc3BhY2UgcGFja2FnZXMpIGFyZSBhbHNvIHBlcm1pdHRlZC4gV2hlbiBhCisgICBwYWNrYWdlIG5hbWUgaXMgc3VwcGxpZWQgaW5zdGVhZAogICAgb2YgYSBub3JtYWwgbW9kdWxlLCB0aGUgaW50ZXJwcmV0ZXIgd2lsbCBleGVjdXRlIGBgPHBrZz4uX19tYWluX19gYCBhcwogICAgdGhlIG1haW4gbW9kdWxlLiBUaGlzIGJlaGF2aW91ciBpcyBkZWxpYmVyYXRlbHkgc2ltaWxhciB0byB0aGUgaGFuZGxpbmcKICAgIG9mIGRpcmVjdG9yaWVzIGFuZCB6aXBmaWxlcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIGludGVycHJldGVyIGFzIHRoZQpAQCAtMTE1LDYgKzExNiw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQogICAgICAgU3VwcGx5IHRoZSBwYWNrYWdlIG5hbWUgdG8gcnVuIGEgYGBfX21haW5fX2BgIHN1Ym1vZHVsZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIG5hbWVzcGFjZSBwYWNrYWdlcyBhcmUgYWxzbyBzdXBwb3J0ZWQKKwogCiAuLiBkZXNjcmliZTo6IC0KIApAQCAtMTQ3LDcgKzE1MSwxMiBAQAogCiBJZiBubyBpbnRlcmZhY2Ugb3B0aW9uIGlzIGdpdmVuLCA6b3B0aW9uOmAtaWAgaXMgaW1wbGllZCwgYGBzeXMuYXJndlswXWBgIGlzCiBhbiBlbXB0eSBzdHJpbmcgKGBgIiJgYCkgYW5kIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIGFkZGVkIHRvIHRoZQotc3RhcnQgb2YgOmRhdGE6YHN5cy5wYXRoYC4KK3N0YXJ0IG9mIDpkYXRhOmBzeXMucGF0aGAuICBBbHNvLCB0YWItY29tcGxldGlvbiBhbmQgaGlzdG9yeSBlZGl0aW5nIGlzCithdXRvbWF0aWNhbGx5IGVuYWJsZWQsIGlmIGF2YWlsYWJsZSBvbiB5b3VyIHBsYXRmb3JtIChzZWUKKzpyZWY6YHJsY29tcGxldGVyLWNvbmZpZ2ApLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgQXV0b21hdGljIGVuYWJsaW5nIG9mIHRhYi1jb21wbGV0aW9uIGFuZCBoaXN0b3J5IGVkaXRpbmcuCiAKIC4uIHNlZWFsc286OiAgOnJlZjpgdHV0LWludm9raW5nYAogCkBAIC0xNzAsNiArMTc5LDggQEAKICAgICAgICBQeXRob24gMy4wCiAKIAorLi4gX3VzaW5nLW9uLW1pc2Mtb3B0aW9uczoKKwogTWlzY2VsbGFuZW91cyBvcHRpb25zCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIApAQCAtMjA4LDYgKzIxOSwxNyBAQAogICAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gIFNlZSBhbHNvIDplbnZ2YXI6YFBZVEhPTklOU1BFQ1RgLgogCiAKKy4uIGNtZG9wdGlvbjo6IC1JCisKKyAgIFJ1biBQeXRob24gaW4gaXNvbGF0ZWQgbW9kZS4gVGhpcyBhbHNvIGltcGxpZXMgLUUgYW5kIC1zLgorICAgSW4gaXNvbGF0ZWQgbW9kZSA6ZGF0YTpgc3lzLnBhdGhgIGNvbnRhaW5zIG5laXRoZXIgdGhlIHNjcmlwdCdzIGRpcmVjdG9yeSBub3IKKyAgIHRoZSB1c2VyJ3Mgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkuIEFsbCA6ZW52dmFyOmBQWVRIT04qYCBlbnZpcm9ubWVudAorICAgdmFyaWFibGVzIGFyZSBpZ25vcmVkLCB0b28uIEZ1cnRoZXIgcmVzdHJpY3Rpb25zIG1heSBiZSBpbXBvc2VkIHRvIHByZXZlbnQKKyAgIHRoZSB1c2VyIGZyb20gaW5qZWN0aW5nIG1hbGljaW91cyBjb2RlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjbWRvcHRpb246OiAtTwogCiAgICBUdXJuIG9uIGJhc2ljIG9wdGltaXphdGlvbnMuICBUaGlzIGNoYW5nZXMgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiBmb3IKQEAgLTM1OCw5ICszODAsMTkgQEAKIC4uIGNtZG9wdGlvbjo6IC1YCiAKICAgIFJlc2VydmVkIGZvciB2YXJpb3VzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIG9wdGlvbnMuICBDUHl0aG9uIGN1cnJlbnRseQotICAgZGVmaW5lcyBqdXN0IG9uZSwgeW91IGNhbiB1c2UgYGAtWCBmYXVsdGhhbmRsZXJgYCB0byBlbmFibGUKLSAgIDptb2Q6YGZhdWx0aGFuZGxlcmAuIEl0IGFsc28gYWxsb3dzIHRvIHBhc3MgYXJiaXRyYXJ5IHZhbHVlcyBhbmQgcmV0cmlldmUKLSAgIHRoZW0gdGhyb3VnaCB0aGUgOmRhdGE6YHN5cy5feG9wdGlvbnNgIGRpY3Rpb25hcnkuCisgICBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgcG9zc2libGUgdmFsdWVzOgorCisgICAqIGBgLVggZmF1bHRoYW5kbGVyYGAgdG8gZW5hYmxlIDptb2Q6YGZhdWx0aGFuZGxlcmA7CisgICAqIGBgLVggc2hvd3JlZmNvdW50YGAgdG8gZW5hYmxlIHRoZSBvdXRwdXQgb2YgdGhlIHRvdGFsIHJlZmVyZW5jZSBjb3VudAorICAgICBhbmQgbWVtb3J5IGJsb2NrcyAob25seSB3b3JrcyBvbiBkZWJ1ZyBidWlsZHMpOworICAgKiBgYC1YIHRyYWNlbWFsbG9jYGAgdG8gc3RhcnQgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zIHVzaW5nIHRoZQorICAgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBCeSBkZWZhdWx0LCBvbmx5IHRoZSBtb3N0IHJlY2VudCBmcmFtZSBpcworICAgICBzdG9yZWQgaW4gYSB0cmFjZWJhY2sgb2YgYSB0cmFjZS4gVXNlIGBgLVggdHJhY2VtYWxsb2M9TkZSQU1FYGAgdG8gc3RhcnQKKyAgICAgdHJhY2luZyB3aXRoIGEgdHJhY2ViYWNrIGxpbWl0IG9mICpORlJBTUUqIGZyYW1lcy4gU2VlIHRoZQorICAgICA6ZnVuYzpgdHJhY2VtYWxsb2Muc3RhcnRgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICBJdCBhbHNvIGFsbG93cyB0byBwYXNzIGFyYml0cmFyeSB2YWx1ZXMgYW5kIHJldHJpZXZlIHRoZW0gdGhyb3VnaCB0aGUKKyAgIDpkYXRhOmBzeXMuX3hvcHRpb25zYCBkaWN0aW9uYXJ5LgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgSXQgaXMgbm93IGFsbG93ZWQgdG8gcGFzcyA6b3B0aW9uOmAtWGAgd2l0aCBDUHl0aG9uLgpAQCAtMzY4LDYgKzQwMCw5IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIFRoZSBgYC1YIGZhdWx0aGFuZGxlcmBgIG9wdGlvbi4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgYGAtWCBzaG93cmVmY291bnRgYCBhbmQgYGAtWCB0cmFjZW1hbGxvY2BgIG9wdGlvbnMuCisKIAogT3B0aW9ucyB5b3Ugc2hvdWxkbid0IHVzZQogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMzg1LDcgKzQyMCw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluZmx1ZW5jZSBQeXRob24ncyBiZWhhdmlvciwgdGhleSBhcmUgcHJvY2Vzc2VkCi1iZWZvcmUgdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdGhlciB0aGFuIC1FLiAgSXQgaXMgY3VzdG9tYXJ5IHRoYXQKK2JlZm9yZSB0aGUgY29tbWFuZC1saW5lIHN3aXRjaGVzIG90aGVyIHRoYW4gLUUgb3IgLUkuICBJdCBpcyBjdXN0b21hcnkgdGhhdAogY29tbWFuZC1saW5lIHN3aXRjaGVzIG92ZXJyaWRlIGVudmlyb25tZW50YWwgdmFyaWFibGVzIHdoZXJlIHRoZXJlIGlzIGEKIGNvbmZsaWN0LgogCkBAIC00MzAsNyArNDY1LDcgQEAKICAgIGlzIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG5hbWVzcGFjZSB3aGVyZSBpbnRlcmFjdGl2ZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgc28KICAgIHRoYXQgb2JqZWN0cyBkZWZpbmVkIG9yIGltcG9ydGVkIGluIGl0IGNhbiBiZSB1c2VkIHdpdGhvdXQgcXVhbGlmaWNhdGlvbiBpbgogICAgdGhlIGludGVyYWN0aXZlIHNlc3Npb24uICBZb3UgY2FuIGFsc28gY2hhbmdlIHRoZSBwcm9tcHRzIDpkYXRhOmBzeXMucHMxYCBhbmQKLSAgIDpkYXRhOmBzeXMucHMyYCBpbiB0aGlzIGZpbGUuCisgICA6ZGF0YTpgc3lzLnBzMmAgYW5kIHRoZSBob29rIDpkYXRhOmBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX2AgaW4gdGhpcyBmaWxlLgogCiAKIC4uIGVudnZhcjo6IFBZVEhPTlkySwpAQCAtNDg1LDkgKzUyMCw5IEBACiAKIC4uIGVudnZhcjo6IFBZVEhPTkRPTlRXUklURUJZVEVDT0RFCiAKLSAgIElmIHRoaXMgaXMgc2V0LCBQeXRob24gd29uJ3QgdHJ5IHRvIHdyaXRlIGBgLnB5Y2BgIG9yIGBgLnB5b2BgIGZpbGVzIG9uIHRoZQotICAgaW1wb3J0IG9mIHNvdXJjZSBtb2R1bGVzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgdGhlIDpvcHRpb246YC1CYAotICAgb3B0aW9uLgorICAgSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLCBQeXRob24gd29uJ3QgdHJ5IHRvIHdyaXRlIGBgLnB5Y2BgIG9yCisgICBgYC5weW9gYCBmaWxlcyBvbiB0aGUgaW1wb3J0IG9mIHNvdXJjZSBtb2R1bGVzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICBzcGVjaWZ5aW5nIHRoZSA6b3B0aW9uOmAtQmAgb3B0aW9uLgogCiAKIC4uIGVudnZhcjo6IFBZVEhPTkhBU0hTRUVECkBAIC01MTIsMTMgKzU0NywxNiBAQAogLi4gZW52dmFyOjogUFlUSE9OSU9FTkNPRElORwogCiAgICBJZiB0aGlzIGlzIHNldCBiZWZvcmUgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIsIGl0IG92ZXJyaWRlcyB0aGUgZW5jb2RpbmcgdXNlZAotICAgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIsIGluIHRoZSBzeW50YXggYGBlbmNvZGluZ25hbWU6ZXJyb3JoYW5kbGVyYGAuIFRoZQotICAgYGA6ZXJyb3JoYW5kbGVyYGAgcGFydCBpcyBvcHRpb25hbCBhbmQgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4KLSAgIDpmdW5jOmBzdHIuZW5jb2RlYC4KKyAgIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLCBpbiB0aGUgc3ludGF4IGBgZW5jb2RpbmduYW1lOmVycm9yaGFuZGxlcmBgLiAgQm90aAorICAgdGhlIGBgZW5jb2RpbmduYW1lYGAgYW5kIHRoZSBgYDplcnJvcmhhbmRsZXJgYCBwYXJ0cyBhcmUgb3B0aW9uYWwgYW5kIGhhdmUKKyAgIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOmZ1bmM6YHN0ci5lbmNvZGVgLgogCiAgICBGb3Igc3RkZXJyLCB0aGUgYGA6ZXJyb3JoYW5kbGVyYGAgcGFydCBpcyBpZ25vcmVkOyB0aGUgaGFuZGxlciB3aWxsIGFsd2F5cyBiZQogICAgYGAnYmFja3NsYXNocmVwbGFjZSdgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBgYGVuY29kaW5nbmFtZWBgIHBhcnQgaXMgbm93IG9wdGlvbmFsLgorCiAKIC4uIGVudnZhcjo6IFBZVEhPTk5PVVNFUlNJVEUKIApAQCAtNTU2LDE1ICs1OTQsMjYgQEAKIAogLi4gZW52dmFyOjogUFlUSE9ORkFVTFRIQU5ETEVSCiAKLSAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCA6ZnVuYzpgZmF1bHRoYW5kbGVyLmVuYWJsZWAgaXMgY2FsbGVkCi0gICBhdCBzdGFydHVwOiBpbnN0YWxsIGEgaGFuZGxlciBmb3IgOmNvbnN0OmBTSUdTRUdWYCwgOmNvbnN0OmBTSUdGUEVgLAotICAgOmNvbnN0OmBTSUdBQlJUYCwgOmNvbnN0OmBTSUdCVVNgIGFuZCA6Y29uc3Q6YFNJR0lMTGAgc2lnbmFscyB0byBkdW1wIHRoZQotICAgUHl0aG9uIHRyYWNlYmFjay4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byA6b3B0aW9uOmAtWGAgYGBmYXVsdGhhbmRsZXJgYAotICAgb3B0aW9uLgorICAgSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLAorICAgOmZ1bmM6YGZhdWx0aGFuZGxlci5lbmFibGVgIGlzIGNhbGxlZCBhdCBzdGFydHVwOiBpbnN0YWxsIGEgaGFuZGxlciBmb3IKKyAgIDpjb25zdDpgU0lHU0VHVmAsIDpjb25zdDpgU0lHRlBFYCwgOmNvbnN0OmBTSUdBQlJUYCwgOmNvbnN0OmBTSUdCVVNgIGFuZAorICAgOmNvbnN0OmBTSUdJTExgIHNpZ25hbHMgdG8gZHVtcCB0aGUgUHl0aG9uIHRyYWNlYmFjay4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgOm9wdGlvbjpgLVhgIGBgZmF1bHRoYW5kbGVyYGAgb3B0aW9uLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCisuLiBlbnZ2YXI6OiBQWVRIT05UUkFDRU1BTExPQworCisgICBJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcsIHN0YXJ0IHRyYWNpbmcKKyAgIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgdXNpbmcgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUuIFRoZSB2YWx1ZSBvZgorICAgdGhlIHZhcmlhYmxlIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgc3RvcmVkIGluIGEgdHJhY2ViYWNrIG9mIGEKKyAgIHRyYWNlLiBGb3IgZXhhbXBsZSwgYGBQWVRIT05UUkFDRU1BTExPQz0xYGAgc3RvcmVzIG9ubHkgdGhlIG1vc3QgcmVjZW50CisgICBmcmFtZS4gU2VlIHRoZSA6ZnVuYzpgdHJhY2VtYWxsb2Muc3RhcnRgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBEZWJ1Zy1tb2RlIHZhcmlhYmxlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn4KIApkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL21hYy5yc3QgYi9Eb2MvdXNpbmcvbWFjLnJzdAppbmRleCAzZTFiNzRkLi41YmU0MzlmIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvbWFjLnJzdAorKysgYi9Eb2MvdXNpbmcvbWFjLnJzdApAQCAtMjUsNyArMjUsNyBAQAogCiBXaGF0IHlvdSBnZXQgYWZ0ZXIgaW5zdGFsbGluZyBpcyBhIG51bWJlciBvZiB0aGluZ3M6CiAKLSogQSA6ZmlsZTpgTWFjUHl0aG9uIDMuM2AgZm9sZGVyIGluIHlvdXIgOmZpbGU6YEFwcGxpY2F0aW9uc2AgZm9sZGVyLiBJbiBoZXJlCisqIEEgOmZpbGU6YE1hY1B5dGhvbiAzLjRgIGZvbGRlciBpbiB5b3VyIDpmaWxlOmBBcHBsaWNhdGlvbnNgIGZvbGRlci4gSW4gaGVyZQogICB5b3UgZmluZCBJRExFLCB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgdGhhdCBpcyBhIHN0YW5kYXJkIHBhcnQgb2Ygb2ZmaWNpYWwKICAgUHl0aG9uIGRpc3RyaWJ1dGlvbnM7IFB5dGhvbkxhdW5jaGVyLCB3aGljaCBoYW5kbGVzIGRvdWJsZS1jbGlja2luZyBQeXRob24KICAgc2NyaXB0cyBmcm9tIHRoZSBGaW5kZXI7IGFuZCB0aGUgIkJ1aWxkIEFwcGxldCIgdG9vbCwgd2hpY2ggYWxsb3dzIHlvdSB0bwpAQCAtOTMsNyArOTMsNyBAQAogYW55dGhpbmcgdGhhdCBoYXMgYSBHVUkpIG5lZWQgdG8gYmUgcnVuIGluIGEgc3BlY2lhbCB3YXkuIFVzZSA6cHJvZ3JhbTpgcHl0aG9ud2AKIGluc3RlYWQgb2YgOnByb2dyYW06YHB5dGhvbmAgdG8gc3RhcnQgc3VjaCBzY3JpcHRzLgogCi1XaXRoIFB5dGhvbiAzLjMsIHlvdSBjYW4gdXNlIGVpdGhlciA6cHJvZ3JhbTpgcHl0aG9uYCBvciA6cHJvZ3JhbTpgcHl0aG9ud2AuCitXaXRoIFB5dGhvbiAzLjQsIHlvdSBjYW4gdXNlIGVpdGhlciA6cHJvZ3JhbTpgcHl0aG9uYCBvciA6cHJvZ3JhbTpgcHl0aG9ud2AuCiAKIAogQ29uZmlndXJhdGlvbgpAQCAtMTU4LDcgKzE1OCw3IEBACiBEaXN0cmlidXRpbmcgUHl0aG9uIEFwcGxpY2F0aW9ucyBvbiB0aGUgTWFjCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSAiQnVpbGQgQXBwbGV0IiB0b29sIHRoYXQgaXMgcGxhY2VkIGluIHRoZSBNYWNQeXRob24gMy4zIGZvbGRlciBpcyBmaW5lIGZvcgorVGhlICJCdWlsZCBBcHBsZXQiIHRvb2wgdGhhdCBpcyBwbGFjZWQgaW4gdGhlIE1hY1B5dGhvbiAzLjQgZm9sZGVyIGlzIGZpbmUgZm9yCiBwYWNrYWdpbmcgc21hbGwgUHl0aG9uIHNjcmlwdHMgb24geW91ciBvd24gbWFjaGluZSB0byBydW4gYXMgYSBzdGFuZGFyZCBNYWMKIGFwcGxpY2F0aW9uLiBUaGlzIHRvb2wsIGhvd2V2ZXIsIGlzIG5vdCByb2J1c3QgZW5vdWdoIHRvIGRpc3RyaWJ1dGUgUHl0aG9uCiBhcHBsaWNhdGlvbnMgdG8gb3RoZXIgdXNlcnMuCmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jIGIvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYwppbmRleCA1ZmRiYzliLi45OTdlMjRiIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jCisrKyBiL0RvYy91c2luZy92ZW52LWNyZWF0ZS5pbmMKQEAgLTI1LDcgKzI1LDcgQEAKIFRoZSBjb21tYW5kLCBpZiBydW4gd2l0aCBgYC1oYGAsIHdpbGwgc2hvdyB0aGUgYXZhaWxhYmxlIG9wdGlvbnM6OgogCiAgICAgdXNhZ2U6IHB5dmVudiBbLWhdIFstLXN5c3RlbS1zaXRlLXBhY2thZ2VzXSBbLS1zeW1saW5rc10gWy0tY2xlYXJdCi0gICAgICAgICAgICAgICAgICBbLS11cGdyYWRlXSBFTlZfRElSIFtFTlZfRElSIC4uLl0KKyAgICAgICAgICAgICAgICAgIFstLXVwZ3JhZGVdIFstLXdpdGhvdXQtcGlwXSBFTlZfRElSIFtFTlZfRElSIC4uLl0KIAogICAgIENyZWF0ZXMgdmlydHVhbCBQeXRob24gZW52aXJvbm1lbnRzIGluIG9uZSBvciBtb3JlIHRhcmdldCBkaXJlY3Rvcmllcy4KIApAQCAtNDMsNiArNDMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkLgogICAgICAgLS11cGdyYWRlICAgICAgICAgICAgICBVcGdyYWRlIHRoZSBlbnZpcm9ubWVudCBkaXJlY3RvcnkgdG8gdXNlIHRoaXMgdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBQeXRob24sIGFzc3VtaW5nIFB5dGhvbiBoYXMgYmVlbiB1cGdyYWRlZCBpbi1wbGFjZS4KKyAgICAgIC0td2l0aG91dC1waXAgICAgICAgICAgU2tpcHMgaW5zdGFsbGluZyBvciB1cGdyYWRpbmcgcGlwIGluIHRoZSB2aXJ0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IChwaXAgaXMgYm9vdHN0cmFwcGVkIGJ5IGRlZmF1bHQpCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBJbnN0YWxscyBwaXAgYnkgZGVmYXVsdCwgYWRkZWQgdGhlIGBgLS13aXRob3V0LXBpcGBgIG9wdGlvbgogCiBJZiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBhbiBlcnJvciB3aWxsIGJlIHJhaXNlZCwgdW5sZXNzCiB0aGUgYGAtLWNsZWFyYGAgb3IgYGAtLXVwZ3JhZGVgYCBvcHRpb24gd2FzIHByb3ZpZGVkLgpAQCAtNTEsMjUgKzU2LDI5IEBACiBgYGluY2x1ZGUtc3lzdGVtLXNpdGUtcGFja2FnZXNgYCBrZXksIHNldCB0byBgYHRydWVgYCBpZiBgYHZlbnZgYCBpcwogcnVuIHdpdGggdGhlIGBgLS1zeXN0ZW0tc2l0ZS1wYWNrYWdlc2BgIG9wdGlvbiwgYGBmYWxzZWBgIG90aGVyd2lzZS4KIAorVW5sZXNzIHRoZSBgYC0td2l0aG91dC1waXBgYCBvcHRpb24gaXMgZ2l2ZW4sIDptb2Q6YGVuc3VyZXBpcGAgd2lsbCBiZQoraW52b2tlZCB0byBib290c3RyYXAgYGBwaXBgYCBpbnRvIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50LgorCiBNdWx0aXBsZSBwYXRocyBjYW4gYmUgZ2l2ZW4gdG8gYGBweXZlbnZgYCwgaW4gd2hpY2ggY2FzZSBhbiBpZGVudGljYWwKIHZpcnR1YWxlbnYgd2lsbCBiZSBjcmVhdGVkLCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIG9wdGlvbnMsIGF0IGVhY2gKIHByb3ZpZGVkIHBhdGguCiAKIE9uY2UgYSB2ZW52IGhhcyBiZWVuIGNyZWF0ZWQsIGl0IGNhbiBiZSAiYWN0aXZhdGVkIiB1c2luZyBhIHNjcmlwdCBpbiB0aGUKLXZlbnYncyBiaW5hcnkgZGlyZWN0b3J5LiBUaGUgaW52b2NhdGlvbiBvZiB0aGUgc2NyaXB0IGlzIHBsYXRmb3JtLXNwZWNpZmljOiBvbgotYSBQb3NpeCBwbGF0Zm9ybSwgeW91IHdvdWxkIHR5cGljYWxseSBkbzo6Cit2ZW52J3MgYmluYXJ5IGRpcmVjdG9yeS4gVGhlIGludm9jYXRpb24gb2YgdGhlIHNjcmlwdCBpcyBwbGF0Zm9ybS1zcGVjaWZpYzoKIAotICAgICQgc291cmNlIDx2ZW52Pi9iaW4vYWN0aXZhdGUKLQotd2hlcmVhcyBvbiBXaW5kb3dzLCB5b3UgbWlnaHQgZG86OgotCi0gICAgQzpcPiA8dmVudj4vU2NyaXB0cy9hY3RpdmF0ZQotCi1pZiB5b3UgYXJlIHVzaW5nIHRoZSBgYGNtZC5leGVgYCBzaGVsbCwgb3IgcGVyaGFwczo6Ci0KLSAgICBQUyBDOlw+IDx2ZW52Pi9TY3JpcHRzL0FjdGl2YXRlLnBzMQotCi1pZiB5b3UgdXNlIFBvd2VyU2hlbGwuCisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUGxhdGZvcm0gICAgfCBTaGVsbCAgICAgICAgICAgfCBDb21tYW5kIHRvIGFjdGl2YXRlIHZpcnR1YWwgZW52aXJvbm1lbnQgfAorKz09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCit8IFBvc2l4ICAgICAgIHwgYmFzaC96c2ggICAgICAgIHwgJCBzb3VyY2UgPHZlbnY+L2Jpbi9hY3RpdmF0ZSAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICB8IGZpc2ggICAgICAgICAgICB8ICQgLiA8dmVudj4vYmluL2FjdGl2YXRlLmZpc2ggICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgfCBjc2gvdGNzaCAgICAgICAgfCAkIHNvdXJjZSA8dmVudj4vYmluL2FjdGl2YXRlLmNzaCAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFdpbmRvd3MgICAgIHwgY21kLmV4ZSAgICAgICAgIHwgQzpcPiA8dmVudj4vU2NyaXB0cy9hY3RpdmF0ZS5iYXQgICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICB8IFBvd2VyU2hlbGwgICAgICB8IFBTIEM6XD4gPHZlbnY+L1NjcmlwdHMvQWN0aXZhdGUucHMxICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogWW91IGRvbid0IHNwZWNpZmljYWxseSAqbmVlZCogdG8gYWN0aXZhdGUgYW4gZW52aXJvbm1lbnQ7IGFjdGl2YXRpb24ganVzdAogcHJlcGVuZHMgdGhlIHZlbnYncyBiaW5hcnkgZGlyZWN0b3J5IHRvIHlvdXIgcGF0aCwgc28gdGhhdCAicHl0aG9uIiBpbnZva2VzIHRoZQpAQCAtODMsMyArOTIsNSBAQAogYGBkZWFjdGl2YXRlLmJhdGBgIGFuZCBgYERlYWN0aXZhdGUucHMxYGAgd2hpY2ggYXJlIGluc3RhbGxlZCB3aGVuIHRoZSB2ZW52IGlzCiBjcmVhdGVkLgogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgIGBgZmlzaGBgIGFuZCBgYGNzaGBgIGFjdGl2YXRpb24gc2NyaXB0cy4KZGlmZiAtLWdpdCBhL0RvYy91c2luZy93aW5kb3dzLnJzdCBiL0RvYy91c2luZy93aW5kb3dzLnJzdAppbmRleCA2YzRkMTZlLi5iMWU3ODk4IDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvd2luZG93cy5yc3QKKysrIGIvRG9jL3VzaW5nL3dpbmRvd3MucnN0CkBAIC01NjAsMTIgKzU2MCw2IEBACiArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IERpcmVjdG9yeSAgICAgICAgICB8IE1TVkMgdmVyc2lvbiB8IFZpc3VhbCBTdHVkaW8gdmVyc2lvbiB8CiArPT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rCi18IDpmaWxlOmBQQy9WQzYvYCAgICB8IDYuMCAgICAgICAgICB8IDk3ICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpmaWxlOmBQQy9WUzcuMS9gICB8IDcuMSAgICAgICAgICB8IDIwMDMgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpmaWxlOmBQQy9WUzguMC9gICB8IDguMCAgICAgICAgICB8IDIwMDUgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDpmaWxlOmBQQy9WUzkuMC9gICB8IDkuMCAgICAgICAgICB8IDIwMDggICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDpmaWxlOmBQQ2J1aWxkL2AgICB8IDEwLjAgICAgICAgICB8IDIwMTAgICAgICAgICAgICAgICAgICB8CmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy40LnJzdCBiL0RvYy93aGF0c25ldy8zLjQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODg2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2Mvd2hhdHNuZXcvMy40LnJzdApAQCAtMCwwICsxLDE4MTUgQEAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgV2hhdCdzIE5ldyBJbiBQeXRob24gMy40CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy4uIDpBdXRob3I6IFNvbWVvbmUgPGVtYWlsPgorICAgKHVuY29tbWVudCBpZiB0aGVyZSBpcyBhIHByaW5jaXBhbCBhdXRob3IpCisKKy4uIFJ1bGVzIGZvciBtYWludGVuYW5jZToKKworICAgKiBBbnlvbmUgY2FuIGFkZCB0ZXh0IHRvIHRoaXMgZG9jdW1lbnQsIGJ1dCB0aGUgbWFpbnRhaW5lciByZXNlcnZlcyB0aGUKKyAgIHJpZ2h0IHRvIHJld3JpdGUgYW55IGFkZGl0aW9ucy4gSW4gcGFydGljdWxhciwgZm9yIG9ic2N1cmUgb3IgZXNvdGVyaWMKKyAgIGZlYXR1cmVzLCB0aGUgbWFpbnRhaW5lciBtYXkgcmVkdWNlIGFueSBhZGRpdGlvbiB0byBhIHNpbXBsZSByZWZlcmVuY2UgdG8KKyAgIHRoZSBuZXcgZG9jdW1lbnRhdGlvbiByYXRoZXIgdGhhbiBleHBsYWluaW5nIHRoZSBmZWF0dXJlIGlubGluZS4KKworICAgKiBXaGlsZSB0aGUgbWFpbnRhaW5lciB3aWxsIHBlcmlvZGljYWxseSBnbyB0aHJvdWdoIE1pc2MvTkVXUworICAgYW5kIGFkZCBjaGFuZ2VzLCBpdCdzIGJlc3Qgbm90IHRvIHJlbHkgb24gdGhpcy4gV2Uga25vdyBmcm9tIGV4cGVyaWVuY2UKKyAgIHRoYXQgYW55IGNoYW5nZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIFdoYXQncyBOZXcgZG9jdW1lbnRhdGlvbiBhcm91bmQgdGhlCisgICB0aW1lIG9mIHRoZSBvcmlnaW5hbCByZWxlYXNlIHdpbGwgcmVtYWluIGxhcmdlbHkgdW5rbm93biB0byB0aGUgY29tbXVuaXR5CisgICBmb3IgeWVhcnMsIGV2ZW4gaWYgdGhleSdyZSBhZGRlZCBsYXRlci4gV2UgYWxzbyBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0CisgICBvdGhlciBwcmlvcml0aWVzIGNhbiBhcmlzZSwgYW5kIHRoZSBtYWludGFpbmVyIHdpbGwgcnVuIG91dCBvZiB0aW1lIHRvIGRvCisgICB1cGRhdGVzIC0tIGluIHN1Y2ggY2FzZXMsIGVuZCB1c2VycyB3aWxsIGJlIG11Y2ggYmV0dGVyIHNlcnZlZCBieSBwYXJ0aWFsCisgICBub3RpZmljYXRpb25zIHRoYXQgYXQgbGVhc3QgZ2l2ZSBhIGhpbnQgYWJvdXQgbmV3IGZlYXR1cmVzIHRvCisgICBpbnZlc3RpZ2F0ZS4KKworICAgKiBUaGlzIGlzIG5vdCBhIGNvbXBsZXRlIGxpc3Qgb2YgZXZlcnkgc2luZ2xlIGNoYW5nZTsgY29tcGxldGVuZXNzCisgICBpcyB0aGUgcHVycG9zZSBvZiBNaXNjL05FV1MuIFRoZSBXaGF0J3MgTmV3IHNob3VsZCBmb2N1cyBvbiBjaGFuZ2VzIHRoYXQKKyAgIGFyZSB2aXNpYmxlIHRvIFB5dGhvbiAqdXNlcnMqIGFuZCB0aGF0ICpyZXF1aXJlKiBhIGZlYXR1cmUgcmVsZWFzZSAoaS5lLgorICAgbW9zdCBidWcgZml4ZXMgc2hvdWxkIG9ubHkgYmUgcmVjb3JkZWQgaW4gTWlzYy9ORVdTKQorCisgICAqIFBFUHMgc2hvdWxkIG5vdCBiZSBtYXJrZWQgRmluYWwgdW50aWwgdGhleSBoYXZlIGFuIGVudHJ5IGluIFdoYXQncyBOZXcuCisgICBBIHBsYWNlaG9sZGVyIGVudHJ5IHRoYXQgaXMganVzdCBhIHNlY3Rpb24gaGVhZGVyIGFuZCBhIGxpbmsgdG8gdGhlIFBFUAorICAgKGUuZyAiOnBlcDpgMzk3YCBoYXMgYmVlbiBpbXBsZW1lbnRlZCIpIGlzIGFjY2VwdGFibGUuIElmIGEgUEVQIGhhcyBiZWVuCisgICBpbXBsZW1lbnRlZCBhbmQgbm90ZWQgaW4gV2hhdCdzIE5ldywgZG9uJ3QgZm9yZ2V0IHRvIG1hcmsgaXQgYXMgRmluYWwhCisKKyAgICogSWYgeW91IHdhbnQgdG8gZHJhdyB5b3VyIG5ldyB0ZXh0IHRvIHRoZSBhdHRlbnRpb24gb2YgdGhlCisgICBtYWludGFpbmVyLCBhZGQgJ1hYWCcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFyYWdyYXBoIG9yCisgICBzZWN0aW9uLgorCisgICAqIEl0J3MgT0sgdG8gYWRkIGp1c3QgYSB2ZXJ5IGJyaWVmIG5vdGUgYWJvdXQgYSBjaGFuZ2UuICBGb3IKKyAgIGV4YW1wbGU6ICJUaGUgOnJlZjpgfnNvY2tldC50cmFuc21vZ3JpZnkoKWAgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIHRoZQorICAgOm1vZDpgc29ja2V0YCBtb2R1bGUuIiAgVGhlIG1haW50YWluZXIgd2lsbCByZXNlYXJjaCB0aGUgY2hhbmdlIGFuZAorICAgd3JpdGUgdGhlIG5lY2Vzc2FyeSB0ZXh0IChpZiBhcHByb3ByaWF0ZSkuIFRoZSBhZHZhbnRhZ2Ugb2YgZG9pbmcgdGhpcworICAgaXMgdGhhdCBldmVuIGlmIG5vIG1vcmUgZGVzY3JpcHRpdmUgdGV4dCBpcyBldmVyIGFkZGVkLCByZWFkZXJzIHdpbGwgYXQKKyAgIGxlYXN0IGhhdmUgYSBub3RpZmljYXRpb24gdGhhdCB0aGUgbmV3IGZlYXR1cmUgZXhpc3RzIGFuZCBhIGxpbmsgdG8gdGhlCisgICByZWxldmFudCBkb2N1bWVudGF0aW9uLgorCisgICAqIFlvdSBjYW4gY29tbWVudCBvdXQgeW91ciBhZGRpdGlvbnMgaWYgeW91IGxpa2UsIGJ1dCBpdCdzIG5vdAorICAgbmVjZXNzYXJ5IChlc3BlY2lhbGx5IHdoZW4gYSBmaW5hbCByZWxlYXNlIGlzIHNvbWUgbW9udGhzIGF3YXkpLgorCisgICAqIENyZWRpdCB0aGUgYXV0aG9yIG9mIGEgcGF0Y2ggb3IgYnVnZml4LiAgIEp1c3QgdGhlIG5hbWUgaXMKKyAgIHN1ZmZpY2llbnQ7IHRoZSBlLW1haWwgYWRkcmVzcyBpc24ndCBuZWNlc3NhcnkuCisKKyAgICogSXQncyBoZWxwZnVsIHRvIGFkZCB0aGUgYnVnL3BhdGNoIG51bWJlciBhcyBhIGNvbW1lbnQ6CisKKyAgIFRoZSA6cmVmOmB+c29ja2V0LnRyYW5zbW9ncmlmeSgpYCBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gdGhlCisgICA6bW9kOmBzb2NrZXRgIG1vZHVsZS4gKENvbnRyaWJ1dGVkIGJ5IFAuWS4gRGV2ZWxvcGVyIGluIDppc3N1ZTpgMTIzNDVgLikKKworICAgVGhpcyBzYXZlcyB0aGUgbWFpbnRhaW5lciB0aGUgZWZmb3J0IG9mIGdvaW5nIHRocm91Z2ggdGhlIE1lcmN1cmlhbCBsb2cKKyAgIHdoZW4gcmVzZWFyY2hpbmcgYSBjaGFuZ2UuCisKKyAgICogQ3Jvc3MgcmVmZXJlbmNpbmcgdGlwOiA6cmVmOmBtb2QuYXR0cmAgd2lsbCBkaXNwbGF5IGFzIGBgbW9kLmF0dHJgYCwKKyAgIHdoaWxlIDpyZWY6YH5tb2QuYXR0cmAgd2lsbCBkaXNwbGF5IGFzIGBgYXR0cmBgLgorCitUaGlzIGFydGljbGUgZXhwbGFpbnMgdGhlIG5ldyBmZWF0dXJlcyBpbiBQeXRob24gMy40LCBjb21wYXJlZCB0byAzLjMuCisKKy4uIFB5dGhvbiAzLjQgd2FzIHJlbGVhc2VkIG9uIFRCRC4KKworRm9yIGZ1bGwgZGV0YWlscywgc2VlIHRoZQorYGNoYW5nZWxvZyA8aHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvd2hhdHNuZXcvY2hhbmdlbG9nLmh0bWw+YF8uCisKKy4uIG5vdGU6OiBQcmVyZWxlYXNlIHVzZXJzIHNob3VsZCBiZSBhd2FyZSB0aGF0IHRoaXMgZG9jdW1lbnQgaXMgY3VycmVudGx5IGluCisgICBkcmFmdCBmb3JtLiBXaGlsZSBpdCBzaG91bGQgYmUgY2xvc2UgdG8gY29tcGxldGUgZm9yIHRoZSBQeXRob24gMy40CisgICByZWxlYXNlIGNhbmRpZGF0ZXMsIGFkanVzdG1lbnRzIGFuZCBhZGRpdGlvbnMgdG8gdGhlIGRvY3VtZW50IG1heSBiZSBtYWRlCisgICB1cCB1bnRpbCB0aGUgZmluYWwgcmVsZWFzZS4KKworCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDI5YCAtLSBQeXRob24gMy40IFJlbGVhc2UgU2NoZWR1bGUKKworCisKK1N1bW1hcnkgLS0gUmVsZWFzZSBIaWdobGlnaHRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBUaGlzIHNlY3Rpb24gc2luZ2xlcyBvdXQgdGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZXMgaW4gUHl0aG9uIDMuNC4KKyAgIEJyZXZpdHkgaXMga2V5LgorCitOZXcgc3ludGF4IGZlYXR1cmVzOgorCisqIE5vIG5ldyBzeW50YXggZmVhdHVyZXMgd2VyZSBhZGRlZCBpbiBQeXRob24gMy40LgorCitOZXcgZXhwZWN0ZWQgZmVhdHVyZXMgZm9yIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnM6CisKKyogOnJlZjpgcGlwIHNob3VsZCBhbHdheXMgYmUgImF2YWlsYWJsZSIgPHdoYXRzbmV3LXBlcC00NTM+YCAoOnBlcDpgNDUzYCkuCisqIDpyZWY6YE1ha2UgbmV3bHkgY3JlYXRlZCBmaWxlIGRlc2NyaXB0b3JzIG5vbi1pbmhlcml0YWJsZSA8d2hhdHNuZXctcGVwLTQ0Nj5gCisgICg6cGVwOmA0NDZgKS4KKyogY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgOnJlZjpgaXNvbGF0ZWQgbW9kZSA8dXNpbmctb24tbWlzYy1vcHRpb25zPmAsCisgICg6aXNzdWU6YDE2NDk5YCkuCisqIDpyZWY6YGltcHJvdmVtZW50cyBpbiB0aGUgaGFuZGxpbmcgb2YgY29kZWNzIDxjb2RlYy1oYW5kbGluZy1pbXByb3ZlbWVudHM+YAorICB0aGF0IGFyZSBub3QgdGV4dCBlbmNvZGluZ3MgKG11bHRpcGxlIGlzc3VlcykuCisqIDpyZWY6YEEgTW9kdWxlU3BlYyBUeXBlIDx3aGF0c25ldy1wZXAtNDUxPmAgZm9yIHRoZSBJbXBvcnQgU3lzdGVtCisgICg6cGVwOmA0NTFgKS4gIChBZmZlY3RzIGltcG9ydGVyIGF1dGhvcnMuKQorCitOZXcgbGlicmFyeSBtb2R1bGVzOgorCisqIDptb2Q6YGFzeW5jaW9gOiA6cmVmOmBOZXcgcHJvdmlzaW9uYWwgQVBJIGZvciBhc3luY2hyb25vdXMgSU8KKyAgPHdoYXRzbmV3LWFzeW5jaW8+YCAoOnBlcDpgMzE1NmApLgorKiA6bW9kOmBlbnN1cmVwaXBgOiA6cmVmOmBCb290c3RyYXBwaW5nIHRoZSBwaXAgaW5zdGFsbGVyIDx3aGF0c25ldy1lbnN1cmVwaXA+YAorICAoOnBlcDpgNDUzYCkuCisqIDptb2Q6YGVudW1gOiA6cmVmOmBTdXBwb3J0IGZvciBlbnVtZXJhdGlvbiB0eXBlcyA8d2hhdHNuZXctZW51bT5gCisgICg6cGVwOmA0MzVgKS4KKyogOm1vZDpgcGF0aGxpYmA6IDpyZWY6YE9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzIDx3aGF0c25ldy1wYXRobGliPmAKKyAgKDpwZXA6YDQyOGApLgorKiA6bW9kOmBzZWxlY3RvcnNgOiA6cmVmOmBIaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZworICA8d2hhdHNuZXctc2VsZWN0b3JzPmAsIGJ1aWx0IHVwb24gdGhlIDptb2Q6YHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMgKHBhcnQKKyAgb2YgOnBlcDpgMzE1NmApLgorKiA6bW9kOmBzdGF0aXN0aWNzYDogQSBiYXNpYyA6cmVmOmBudW1lcmljYWxseSBzdGFibGUgc3RhdGlzdGljcyBsaWJyYXJ5CisgIDx3aGF0c25ldy1zdGF0aXN0aWNzPmAgKDpwZXA6YDQ1MGApLgorKiA6bW9kOmB0cmFjZW1hbGxvY2A6IDpyZWY6YFRyYWNlIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMKKyAgPHdoYXRzbmV3LXRyYWNlbWFsbG9jPmAgKDpwZXA6YDQ1NGApLgorCitTaWduaWZpY2FudGx5IEltcHJvdmVkIExpYnJhcnkgTW9kdWxlczoKKworKiA6cmVmOmBTaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMgPHdoYXRzbmV3LXNpbmdsZWRpc3BhdGNoPmAgaW4KKyAgOm1vZDpgZnVuY3Rvb2xzYCAoOnBlcDpgNDQzYCkuCisqIE5ldyA6bW9kOmBwaWNrbGVgIDpyZWY6YHByb3RvY29sIDQgPHdoYXRzbmV3LXByb3RvY29sLTQ+YCAoOnBlcDpgMzE1NGApLgorKiA6cmVmOmBUTFN2MS4xIGFuZCBUTFN2MS4yIHN1cHBvcnQgPHdoYXRzbmV3LXRscy0xMS0xMj5gIGZvciA6bW9kOmBzc2xgCisgICg6aXNzdWU6YDE2NjkyYCkuCisqIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agbm93IGhhcyA6cmVmOmBhbiBvcHRpb24gdG8gYXZvaWQgdXNpbmcgb3MuZm9yaworICBvbiBVbml4IDx3aGF0c25ldy1tdWx0aXByb2Nlc3Npbmctbm8tZm9yaz5gICg6aXNzdWU6YDg3MTNgKS4KKyogOm1vZDpgZW1haWxgIGhhcyBhIG5ldyBzdWJtb2R1bGUsIDptb2Q6YH5lbWFpbC5jb250ZW50bWFuYWdlcmAsIGFuZAorICBhIG5ldyA6bW9kOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBzdWJjbGFzcworICAoOmNsYXNzOmB+ZW1haWwuY29udGVudG1hbmFnZXIuRW1haWxNZXNzYWdlYCkgdGhhdCA6cmVmOmBzaW1wbGlmeSBNSU1FCisgIGhhbmRsaW5nIDx3aGF0c25ld19lbWFpbF9jb250ZW50bWFuYWdlcj5gICg6aXNzdWU6YDE4ODkxYCkuCisqIFRoZSA6bW9kOmBpcGFkZHJlc3NgIG1vZHVsZSBBUEkgaGFzIGJlZW4gZGVjbGFyZWQgc3RhYmxlCisKKworQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBpbXByb3ZlbWVudHM6CisKKyogOnJlZjpgU2FmZSBvYmplY3QgZmluYWxpemF0aW9uIDx3aGF0c25ldy1wZXAtNDQyPmAgKDpwZXA6YDQ0MmApLgorKiBMZXZlcmFnaW5nIDpwZXA6YDQ0MmAsIDpyZWY6YG1vZHVsZSBnbG9iYWxzIGFyZSBubyBsb25nZXIgc2V0IHRvIE5vbmUKKyAgZHVyaW5nIGZpbmFsaXphdGlvbiA8d2hhdHNuZXctcGVwLTQ0Mj5gLCBpbiBtb3N0IGNhc2VzICg6aXNzdWU6YDE4MjE0YCkuCisqIDpyZWY6YENvbmZpZ3VyYWJsZSBtZW1vcnkgYWxsb2NhdG9ycyA8d2hhdHNuZXctcGVwLTQ0NT5gICg6cGVwOmA0NDVgKS4KKyogOnJlZjpgU2VjdXJlIGFuZCBpbnRlcmNoYW5nZWFibGUgaGFzaCBhbGdvcml0aG0gPHdoYXRzbmV3LXBlcC00NTY+YAorICAoOnBlcDpgNDU2YCkuCisqIDpyZWY6YEFyZ3VtZW50IENsaW5pYyA8d2hhdHNuZXctcGVwLTQzNj5gICg6cGVwOmA0MzZgKS4KKyogVGhlIDptb2Q6YG1hcnNoYWxgIGZvcm1hdCBoYXMgYmVlbiBtYWRlIDpyZWY6YG1vcmUgY29tcGFjdCBhbmQgZWZmaWNpZW50CisgIDx3aGF0c25ldy1tYXJzaGFsLTM+YCAoOmlzc3VlOmAxNjQ3NWApLgorCitQbGVhc2UgcmVhZCBvbiBmb3IgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdXNlci1mYWNpbmcgY2hhbmdlcywgaW5jbHVkaW5nIG1hbnkKK290aGVyIHNtYWxsZXIgaW1wcm92ZW1lbnRzLCBDUHl0aG9uIG9wdGltaXphdGlvbnMsIGRlcHJlY2F0aW9ucywgYW5kIHBvdGVudGlhbAorcG9ydGluZyBpc3N1ZXMuCisKKworCitOZXcgRXhwZWN0ZWQgRmVhdHVyZXMgZm9yIFB5dGhvbiBJbXBsZW1lbnRhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBfd2hhdHNuZXctcGVwLTQ1MzoKKworUEVQIDQ1MzogRXhwbGljaXQgQm9vdHN0cmFwcGluZyBvZiBQSVAgaW4gUHl0aG9uIEluc3RhbGxhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgZW5zdXJlcGlwYCBtb2R1bGUgKGRlZmluZWQgaW4gOnBlcDpgNDUzYCkgcHJvdmlkZXMgYSBzdGFuZGFyZAorY3Jvc3MtcGxhdGZvcm0gbWVjaGFuaXNtIHRvIGJvb3RzdHJhcCB0aGUgcGlwIGluc3RhbGxlciBpbnRvIFB5dGhvbgoraW5zdGFsbGF0aW9ucyBhbmQgdmlydHVhbCBlbnZpcm9ubWVudHMuCisKK0J5IGRlZmF1bHQsIHRoZSBzY3JpcHRzIGBgcGlwWGBgIGFuZCBgYHBpcFguWWBgIHdpbGwgYmUgaW5zdGFsbGVkICh3aGVyZQorWC5ZIHN0YW5kcyBmb3IgdGhlIHZlcnNpb24gb2YgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24pLCBhbG9uZyB3aXRoIHRoZQorYGBwaXBgYCBQeXRob24gcGFja2FnZSBhbmQgaXRzIGRlcGVuZGVuY2llcy4KKworVGhlIDptb2Q6YHZlbnZgIG1vZHVsZSBhbmQgdGhlIDpjb21tYW5kOmBweXZlbnZgIHV0aWxpdHkgbWFrZSB1c2Ugb2YgdGhpcworbW9kdWxlIHRvIG1ha2UgYGBwaXBgYCByZWFkaWx5IGF2YWlsYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4gV2hlbgordXNpbmcgdGhlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UsIGBgcGlwYGAgaXMgaW5zdGFsbGVkIGJ5IGRlZmF1bHQsIHdoaWxlCitmb3IgdGhlIG1vZHVsZSBBUEkgaW5zdGFsbGF0aW9uIG9mIGBgcGlwYGAgbXVzdCBiZSByZXF1ZXN0ZWQgZXhwbGljaXRseS4KKworRm9yIENQeXRob24gc291cmNlIGJ1aWxkcyBvbiBQT1NJWCBzeXN0ZW1zLCB0aGUgYGBtYWtlIGluc3RhbGxgYCBhbmQKK2BgbWFrZSBhbHRpbnN0YWxsYGAgY29tbWFuZHMgYm9vdHN0cmFwIGBgcGlwYGAgYnkgZGVmYXVsdC4gVGhpcyBiZWhhdmlvdXIKK2NhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggY29uZmlndXJlIG9wdGlvbnMsIGFuZCBvdmVycmlkZGVuIHRocm91Z2gKK01ha2VmaWxlIG9wdGlvbnMuCisKK09uIFdpbmRvd3MgYW5kIE1hYyBPUyBYLCB0aGUgQ1B5dGhvbiBpbnN0YWxsZXJzIG5vdyBvZmZlciB0aGUgb3B0aW9uIHRvCitpbnN0YWxsIGBgcGlwYGAgYWxvbmcgd2l0aCBDUHl0aG9uIGl0c2VsZi4KKworQXMgYGRpc2N1c3NlZCBpbiB0aGUgUEVQYF9fLCBwbGF0Zm9ybSBwYWNrYWdlcnMgbWF5IGNob29zZSBub3QgdG8gaW5zdGFsbAorYGBwaXBgYCBieSBkZWZhdWx0LCBhcyBsb25nIGFzIHRoZSBjb21tYW5kIGBgcGlwYGAsIHdoZW4gaW52b2tlZCwgcHJvdmlkZXMKK2NsZWFyIGFuZCBzaW1wbGUgZGlyZWN0aW9ucyBvbiBob3cgdG8gaW5zdGFsbCBgYHBpcGBgIG9uIHRoZSBwbGF0Zm9ybS4KKworX18gaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDUzLyNyZWNvbW1lbmRhdGlvbnMtZm9yLWRvd25zdHJlYW0tZGlzdHJpYnV0b3JzCisKKy4uIG5vdGU6OgorCisgICBUbyBhdm9pZCBjb25mbGljdHMgYmV0d2VlbiBwYXJhbGxlbCBQeXRob24gMiBhbmQgUHl0aG9uIDMgaW5zdGFsbGF0aW9ucywKKyAgIG9ubHkgdGhlIHZlcnNpb25lZCBgYHBpcDNgYCBhbmQgYGBwaXAzLjRgYCBjb21tYW5kcyBhcmUgYm9vdHN0cmFwcGVkIGJ5CisgICBkZWZhdWx0IHdoZW4gYGBlbnN1cmVwaXBgYCBpcyBpbnZva2VkIGRpcmVjdGx5IChpbmNsdWRpbmcgYnkgdGhlIENQeXRob24KKyAgIGluc3RhbGxlcnMpLiBgYHB5dmVudmBgIGVuc3VyZXMgdGhhdCB0aGUgdW5xdWFsaWZpZWQgYGBwaXBgYCBjb21tYW5kIGlzCisgICBtYWRlIGF2YWlsYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cywgYW5kIGBgcGlwYGAgY2FuIGFsd2F5cyBiZQorICAgaW52b2tlZCB2aWEgdGhlIGBgLW1gYCBzd2l0Y2ggcmF0aGVyIHRoYW4gZGlyZWN0bHkgdG8gYXZvaWQgYW1iaWd1aXR5IG9uCisgICBzeXN0ZW1zIHdpdGggbXVsdGlwbGUgUHl0aG9uIGluc3RhbGxhdGlvbnMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NTNgIC0tIEV4cGxpY2l0IGJvb3RzdHJhcHBpbmcgb2YgcGlwIGluIFB5dGhvbiBpbnN0YWxsYXRpb25zCisgICAgICBQRVAgd3JpdHRlbiBieSBEb25hbGQgU3R1ZmZ0IGFuZCBOaWNrIENvZ2hsYW4sIGltcGxlbWVudGVkIGJ5CisgICAgICBEb25hbGQgU3R1ZmZ0LCBOaWNrIENvZ2hsYW4sIE1hcnRpbiB2b24gTMO2d2lzIGFuZCBOZWQgRGVpbHkuCisKKworLi4gX3doYXRzbmV3LXBlcC00NDY6CisKK1BFUCA0NDY6IE1ha2UgTmV3bHkgQ3JlYXRlZCBGaWxlIERlc2NyaXB0b3JzIE5vbi1Jbmhlcml0YWJsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzpwZXA6YDQ0NmAgbWFrZXMgbmV3bHkgY3JlYXRlZCBmaWxlIGRlc2NyaXB0b3JzIDpyZWY6YG5vbi1pbmhlcml0YWJsZQorPGZkX2luaGVyaXRhbmNlPmAuICBOZXcgZnVuY3Rpb25zIGFuZCBtZXRob2RzOgorCisqIDpmdW5jOmBvcy5nZXRfaW5oZXJpdGFibGVgLCA6ZnVuYzpgb3Muc2V0X2luaGVyaXRhYmxlYAorKiA6ZnVuYzpgb3MuZ2V0X2hhbmRsZV9pbmhlcml0YWJsZWAsIDpmdW5jOmBvcy5zZXRfaGFuZGxlX2luaGVyaXRhYmxlYAorKiA6bWV0aDpgc29ja2V0LnNvY2tldC5nZXRfaW5oZXJpdGFibGVgLCA6bWV0aDpgc29ja2V0LnNvY2tldC5zZXRfaW5oZXJpdGFibGVgCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NDZgIC0tIE1ha2UgbmV3bHkgY3JlYXRlZCBmaWxlIGRlc2NyaXB0b3JzIG5vbi1pbmhlcml0YWJsZQorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpY3RvciBTdGlubmVyLgorCisKKy4uIF9jb2RlYy1oYW5kbGluZy1pbXByb3ZlbWVudHM6CisKK0ltcHJvdmVtZW50cyB0byBDb2RlYyBIYW5kbGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpbmNlIGl0IHdhcyBmaXJzdCBpbnRyb2R1Y2VkLCB0aGUgOm1vZDpgY29kZWNzYCBtb2R1bGUgaGFzIGFsd2F5cyBiZWVuCitpbnRlbmRlZCB0byBvcGVyYXRlIGFzIGEgdHlwZS1uZXV0cmFsIGR5bmFtaWMgZW5jb2RpbmcgYW5kIGRlY29kaW5nCitzeXN0ZW0uIEhvd2V2ZXIsIGl0cyBjbG9zZSBjb3VwbGluZyB3aXRoIHRoZSBQeXRob24gdGV4dCBtb2RlbCwgZXNwZWNpYWxseQordGhlIHR5cGUgcmVzdHJpY3RlZCBjb252ZW5pZW5jZSBtZXRob2RzIG9uIHRoZSBidWlsdGluIDpjbGFzczpgc3RyYCwKKzpjbGFzczpgYnl0ZXNgIGFuZCA6Y2xhc3M6YGJ5dGVhcnJheWAgdHlwZXMsIGhhcyBoaXN0b3JpY2FsbHkgb2JzY3VyZWQgdGhhdAorZmFjdC4KKworQXMgYSBrZXkgc3RlcCBpbiBjbGFyaWZ5aW5nIHRoZSBzaXR1YXRpb24sIHRoZSA6bWV0aDpgY29kZWNzLmVuY29kZWAgYW5kCis6bWV0aDpgY29kZWNzLmRlY29kZWAgY29udmVuaWVuY2UgZnVuY3Rpb25zIGFyZSBub3cgcHJvcGVybHkgZG9jdW1lbnRlZCBpbgorUHl0aG9uIDIuNywgMy4zIGFuZCAzLjQuIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGV4aXN0ZWQgaW4gdGhlIDptb2Q6YGNvZGVjc2AKK21vZHVsZSAoYW5kIGhhdmUgYmVlbiBjb3ZlcmVkIGJ5IHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUpIHNpbmNlIFB5dGhvbiAyLjQsCitidXQgd2VyZSBwcmV2aW91c2x5IG9ubHkgZGlzY292ZXJhYmxlIHRocm91Z2ggcnVudGltZSBpbnRyb3NwZWN0aW9uLgorCitVbmxpa2UgdGhlIGNvbnZlbmllbmNlIG1ldGhvZHMgb24gOmNsYXNzOmBzdHJgLCA6Y2xhc3M6YGJ5dGVzYCBhbmQKKzpjbGFzczpgYnl0ZWFycmF5YCwgdGhlc2UgY29udmVuaWVuY2UgZnVuY3Rpb25zIHN1cHBvcnQgYXJiaXRyYXJ5IGNvZGVjcworaW4gYm90aCBQeXRob24gMiBhbmQgUHl0aG9uIDMsIHJhdGhlciB0aGFuIGJlaW5nIGxpbWl0ZWQgdG8gVW5pY29kZSB0ZXh0CitlbmNvZGluZ3MgKGluIFB5dGhvbiAzKSBvciBgYGJhc2VzdHJpbmdgYCA8LT4gYGBiYXNlc3RyaW5nYGAgY29udmVyc2lvbnMKKyhpbiBQeXRob24gMikuCisKK0luIFB5dGhvbiAzLjQsIHRoZSBpbnRlcnByZXRlciBpcyBhYmxlIHRvIGlkZW50aWZ5IHRoZSBrbm93biBub24tdGV4dAorZW5jb2RpbmdzIHByb3ZpZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBkaXJlY3QgdXNlcnMgdG93YXJkcyB0aGVzZQorZ2VuZXJhbCBwdXJwb3NlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB3aGVuIGFwcHJvcHJpYXRlOjoKKworICAgID4+PiBiImFiY2RlZiIuZGVjb2RlKCJoZXgiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgTG9va3VwRXJyb3I6ICdoZXgnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7IHVzZSBjb2RlY3MuZGVjb2RlKCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MKKworICAgID4+PiAiaGVsbG8iLmVuY29kZSgicm90MTMiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgTG9va3VwRXJyb3I6ICdyb3QxMycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgdXNlIGNvZGVjcy5lbmNvZGUoKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcworCisgICAgPj4+IG9wZW4oImZvby50eHQiLCBlbmNvZGluZz0iaGV4IikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIExvb2t1cEVycm9yOiAnaGV4JyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyB1c2UgY29kZWNzLm9wZW4oKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcworCitJbiBhIHJlbGF0ZWQgY2hhbmdlLCB3aGVuZXZlciBpdCBpcyBmZWFzaWJsZSB3aXRob3V0IGJyZWFraW5nIGJhY2t3YXJkcworY29tcGF0aWJpbGl0eSwgZXhjZXB0aW9ucyByYWlzZWQgZHVyaW5nIGVuY29kaW5nIGFuZCBkZWNvZGluZyBvcGVyYXRpb25zCit3aWxsIGJlIHdyYXBwZWQgaW4gYSBjaGFpbmVkIGV4Y2VwdGlvbiBvZiB0aGUgc2FtZSB0eXBlIHRoYXQgbWVudGlvbnMgdGhlCituYW1lIG9mIHRoZSBjb2RlYyByZXNwb25zaWJsZSBmb3IgcHJvZHVjaW5nIHRoZSBlcnJvcjo6CisKKyAgICA+Pj4gaW1wb3J0IGNvZGVjcworCisgICAgPj4+IGNvZGVjcy5kZWNvZGUoYiJhYmNkZWZnaCIsICJoZXgiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9lbmNvZGluZ3MvaGV4X2NvZGVjLnB5IiwgbGluZSAyMCwgaW4gaGV4X2RlY29kZQorICAgICAgICByZXR1cm4gKGJpbmFzY2lpLmEyYl9oZXgoaW5wdXQpLCBsZW4oaW5wdXQpKQorICAgIGJpbmFzY2lpLkVycm9yOiBOb24taGV4YWRlY2ltYWwgZGlnaXQgZm91bmQKKworICAgIFRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246CisKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIGJpbmFzY2lpLkVycm9yOiBkZWNvZGluZyB3aXRoICdoZXgnIGNvZGVjIGZhaWxlZCAoRXJyb3I6IE5vbi1oZXhhZGVjaW1hbCBkaWdpdCBmb3VuZCkKKworICAgID4+PiBjb2RlY3MuZW5jb2RlKCJoZWxsbyIsICJiejIiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9lbmNvZGluZ3MvYnoyX2NvZGVjLnB5IiwgbGluZSAxNywgaW4gYnoyX2VuY29kZQorICAgICAgICByZXR1cm4gKGJ6Mi5jb21wcmVzcyhpbnB1dCksIGxlbihpbnB1dCkpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvYnoyLnB5IiwgbGluZSA0OTgsIGluIGNvbXByZXNzCisgICAgICAgIHJldHVybiBjb21wLmNvbXByZXNzKGRhdGEpICsgY29tcC5mbHVzaCgpCisgICAgVHlwZUVycm9yOiAnc3RyJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBidWZmZXIgaW50ZXJmYWNlCisKKyAgICBUaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOgorCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBUeXBlRXJyb3I6IGVuY29kaW5nIHdpdGggJ2J6MicgY29kZWMgZmFpbGVkIChUeXBlRXJyb3I6ICdzdHInIGRvZXMgbm90IHN1cHBvcnQgdGhlIGJ1ZmZlciBpbnRlcmZhY2UpCisKK0ZpbmFsbHksIGFzIHRoZSBleGFtcGxlcyBhYm92ZSBzaG93LCB0aGVzZSBpbXByb3ZlbWVudHMgaGF2ZSBwZXJtaXR0ZWQKK3RoZSByZXN0b3JhdGlvbiBvZiB0aGUgY29udmVuaWVuY2UgYWxpYXNlcyBmb3IgdGhlIG5vbi1Vbmljb2RlIGNvZGVjcyB0aGF0Cit3ZXJlIHRoZW1zZWx2ZXMgcmVzdG9yZWQgaW4gUHl0aG9uIDMuMi4gVGhpcyBtZWFucyB0aGF0IGVuY29kaW5nIGJpbmFyeSBkYXRhCit0byBhbmQgZnJvbSBpdHMgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gKGZvciBleGFtcGxlKSBjYW4gbm93IGJlIHdyaXR0ZW4KK2FzOjoKKworICAgID4+PiBmcm9tIGNvZGVjcyBpbXBvcnQgZW5jb2RlLCBkZWNvZGUKKyAgICA+Pj4gZW5jb2RlKGIiaGVsbG8iLCAiaGV4IikKKyAgICBiJzY4NjU2YzZjNmYnCisgICAgPj4+IGRlY29kZShiIjY4NjU2YzZjNmYiLCAiaGV4IikKKyAgICBiJ2hlbGxvJworCitUaGUgYmluYXJ5IGFuZCB0ZXh0IHRyYW5zZm9ybXMgcHJvdmlkZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgYXJlIGRldGFpbGVkCitpbiA6cmVmOmBiaW5hcnktdHJhbnNmb3Jtc2AgYW5kIDpyZWY6YHRleHQtdHJhbnNmb3Jtc2AuCisKKyhDb250cmlidXRlZCBieSBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmA3NDc1YCwgLCA6aXNzdWU6YDE3ODI3YCwKKzppc3N1ZTpgMTc4MjhgIGFuZCA6aXNzdWU6YDE5NjE5YCkKKworCisuLiBfd2hhdHNuZXctcGVwLTQ1MToKKworUEVQIDQ1MTogQSBNb2R1bGVTcGVjIFR5cGUgZm9yIHRoZSBJbXBvcnQgU3lzdGVtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDUxYCBwcm92aWRlcyBhbiBlbmNhcHN1bGF0aW9uIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIG1vZHVsZSB0aGF0IHRoZQoraW1wb3J0IG1hY2hpbmVyeSB3aWxsIHVzZSB0byBsb2FkIGl0ICh0aGF0IGlzLCBhIG1vZHVsZSBzcGVjaWZpY2F0aW9uKS4gIFRoaXMKK2hlbHBzIHNpbXBsaWZ5IGJvdGggdGhlIGltcG9ydCBpbXBsZW1lbnRhdGlvbiBhbmQgc2V2ZXJhbCBpbXBvcnQtcmVsYXRlZCBBUElzLgorVGhlIGNoYW5nZSBpcyBhbHNvIGEgc3RlcHBpbmcgc3RvbmUgZm9yIGBzZXZlcmFsIGZ1dHVyZSBpbXBvcnQtcmVsYXRlZAoraW1wcm92ZW1lbnRzYF9fLgorCitfXyBodHRwczovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDEzLU5vdmVtYmVyLzEzMDExMS5odG1sCisKK1RoZSBwdWJsaWMtZmFjaW5nIGNoYW5nZXMgZnJvbSB0aGUgUEVQIGFyZSBlbnRpcmVseSBiYWNrd2FyZC1jb21wYXRpYmxlLgorRnVydGhlcm1vcmUsIHRoZXkgc2hvdWxkIGJlIHRyYW5zcGFyZW50IHRvIGV2ZXJ5b25lIGJ1dCBpbXBvcnRlciBhdXRob3JzLiAgS2V5CitmaW5kZXIgYW5kIGxvYWRlciBtZXRob2RzIGhhdmUgYmVlbiBkZXByZWNhdGVkLCBidXQgdGhleSB3aWxsIGNvbnRpbnVlIHdvcmtpbmcuCitOZXcgaW1wb3J0ZXJzIHNob3VsZCB1c2UgdGhlIG5ldyBtZXRob2RzIGRlc2NyaWJlZCBpbiB0aGUgUEVQLiAgRXhpc3RpbmcKK2ltcG9ydGVycyBzaG91bGQgYmUgdXBkYXRlZCB0byBpbXBsZW1lbnQgdGhlIG5ldyBtZXRob2RzLgorCisKK090aGVyIExhbmd1YWdlIENoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU29tZSBzbWFsbGVyIGNoYW5nZXMgbWFkZSB0byB0aGUgY29yZSBQeXRob24gbGFuZ3VhZ2UgYXJlOgorCisqIFVuaWNvZGUgZGF0YWJhc2UgdXBkYXRlZCB0byBVQ0QgdmVyc2lvbiA2LjMuCisKKyogOmZ1bmM6YG1pbmAgYW5kIDpmdW5jOmBtYXhgIG5vdyBhY2NlcHQgYSAqZGVmYXVsdCogYXJndW1lbnQgdGhhdCBjYW4gYmUgdXNlZAorICB0byBzcGVjaWZ5IHRoZSB2YWx1ZSB0aGV5IHJldHVybiBpZiB0aGUgaXRlcmFibGUgdGhleSBhcmUgZXZhbHVhdGluZyBoYXMgbm8KKyAgZWxlbWVudHMuICBDb250cmlidXRlZCBieSBKdWxpYW4gQmVybWFuIGluIDppc3N1ZTpgMTgxMTFgLgorCisqIE1vZHVsZSBvYmplY3RzIGFyZSBub3cgOm1vZDpgd2Vha3JlZmAnYWJsZS4KKworKiBNb2R1bGUgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZXMgKGFuZCByZWxhdGVkIHZhbHVlcykgc2hvdWxkIG5vdyBhbHdheXMKKyAgY29udGFpbiBhYnNvbHV0ZSBwYXRocyBieSBkZWZhdWx0LCB3aXRoIHRoZSBzb2xlIGV4Y2VwdGlvbiBvZgorICBgYF9fbWFpbl9fLl9fZmlsZV9fYGAgd2hlbiBhIHNjcmlwdCBoYXMgYmVlbiBleGVjdXRlZCBkaXJlY3RseSB1c2luZworICBhIHJlbGF0aXZlIHBhdGggKENvbnRyaWJ1dGVkIGJ5IEJyZXR0IENhbm5vbiBpbiA6aXNzdWU6YDE4NDE2YCkuCisKKyogTm93IGFsbCB0aGUgVVRGLVwqIGNvZGVjcyAoZXhjZXB0IFVURi03KSByZWplY3Qgc3Vycm9nYXRlcyBkdXJpbmcgYm90aAorICBlbmNvZGluZyBhbmQgZGVjb2RpbmcgdW5sZXNzIHRoZSBgYHN1cnJvZ2F0ZXBhc3NgYCBlcnJvciBoYW5kbGVyIGlzIHVzZWQsCisgIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgVVRGLTE2IGRlY29kZXIgdGhhdCBhY2NlcHRzIHZhbGlkIHN1cnJvZ2F0ZSBwYWlycywKKyAgYW5kIHRoZSBVVEYtMTYgZW5jb2RlciB0aGF0IHByb2R1Y2VzIHRoZW0gd2hpbGUgZW5jb2Rpbmcgbm9uLUJNUCBjaGFyYWN0ZXJzLgorICBDb250cmlidXRlZCBieSBWaWN0b3IgU3Rpbm5lciwgS2FuZy1IYW8gKEtlbm55KSBMdSBhbmQgU2VyaGl5IFN0b3JjaGFrYSBpbgorICA6aXNzdWU6YDEyODkyYC4KKworKiA6Y2xhc3M6YGJ5dGVzYC5qb2luKCkgYW5kIDpjbGFzczpgYnl0ZWFycmF5YC5qb2luKCkgbm93IGFjY2VwdCBhcmJpdHJhcnkKKyAgYnVmZmVyIG9iamVjdHMgYXMgYXJndW1lbnRzLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluCisgIDppc3N1ZTpgMTU5NThgLikKKworKiBUaGUgOmNsYXNzOmBpbnRgIGNvbnN0cnVjdG9yIG5vdyBhY2NlcHRzIGFueSBvYmplY3QgdGhhdCBoYXMgYW4gYGBfX2luZGV4X19gYAorICBtZXRob2QgZm9yIGl0cyAqYmFzZSogYXJndW1lbnQuICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb24gaW4KKyAgOmlzc3VlOmAxNjc3MmAuKQorCisKK05ldyBNb2R1bGVzCis9PT09PT09PT09PQorCisKKy4uIF93aGF0c25ldy1hc3luY2lvOgorCithc3luY2lvCistLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgYXN5bmNpb2AgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDMxNTZgKSBwcm92aWRlcyBhIHN0YW5kYXJkCitwbHVnZ2FibGUgZXZlbnQgbG9vcCBtb2RlbCBmb3IgUHl0aG9uLCBwcm92aWRpbmcgc29saWQgYXN5bmNocm9ub3VzIElPCitzdXBwb3J0IGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LCBhbmQgbWFraW5nIGl0IGVhc2llciBmb3Igb3RoZXIgZXZlbnQgbG9vcAoraW1wbGVtZW50YXRpb25zIHRvIGludGVyb3BlcmF0ZSB3aXRoIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBlYWNoIG90aGVyLgorCitGb3IgUHl0aG9uIDMuNCwgdGhpcyBtb2R1bGUgaXMgY29uc2lkZXJlZCBhIDp0ZXJtOmBwcm92aXNpb25hbCBBUElgLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzE1NmAgLS0gQXN5bmNocm9ub3VzIElPIFN1cHBvcnQgUmVib290ZWQ6IHRoZSAiYXN5bmNpbyIgTW9kdWxlCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50YXRpb24gbGVkIGJ5IEd1aWRvIHZhbiBSb3NzdW0uCisKKworLi4gX3doYXRzbmV3LWVuc3VyZXBpcDoKKworZW5zdXJlcGlwCistLS0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBlbnN1cmVwaXBgIG1vZHVsZSBpcyB0aGUgcHJpbWFyeSBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlCis6cGVwOmA0NTNgIGltcGxlbWVudGF0aW9uLiAgSW4gdGhlIG5vcm1hbCBjb3Vyc2Ugb2YgZXZlbnRzIGVuZCB1c2VycyB3aWxsIG5vdAorbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRoaXMgbW9kdWxlLCBidXQgaXQgY2FuIGJlIHVzZWQgdG8gbWFudWFsbHkgYm9vdHN0cmFwCitgYHBpcGBgIGlmIHRoZSBhdXRvbWF0ZWQgYm9vdHN0cmFwcGluZyBpbnRvIGFuIGluc3RhbGxhdGlvbiBvciB2aXJ0dWFsCitlbnZpcm9ubWVudCB3YXMgZGVjbGluZWQuCisKKzptb2Q6YGVuc3VyZXBpcGAgaW5jbHVkZXMgYSBidW5kbGVkIGNvcHkgb2YgYGBwaXBgYCwgdXAtdG8tZGF0ZSBhcyBvZiB0aGUgZmlyc3QKK3JlbGVhc2UgY2FuZGlkYXRlIG9mIHRoZSByZWxlYXNlIG9mIENQeXRob24gd2l0aCB3aGljaCBpdCBzaGlwcyAodGhpcyBhcHBsaWVzCit0byBib3RoIG1haW50ZW5hbmNlIHJlbGVhc2VzIGFuZCBmZWF0dXJlIHJlbGVhc2VzKS4gIGBgZW5zdXJlcGlwYGAgZG9lcyBub3QKK2FjY2VzcyB0aGUgaW50ZXJuZXQuICAoSWYgdGhlIGluc3RhbGxhdGlvbiBoYXMgSW50ZXJuZXQgYWNjZXNzLCBpdCBpcyBvZiBjb3Vyc2UKK3Bvc3NpYmxlIHRvIHVwZ3JhZGUgYGBwaXBgYCB0byBhIHJlbGVhc2UgbW9yZSByZWNlbnQgdGhhbiB0aGUgYnVuZGxlZCBgYHBpcGBgCitieSB1c2luZyB0aGUgYnVuZGxlZCBgYHBpcGBgIGNvbW1hbmQgaXRzZWxmIG9uY2UgaXQgaXMgaW5zdGFsbGVkLikKKworVGhlIG1vZHVsZSBpcyBuYW1lZCAqZW5zdXJlKlwgcGlwIGJlY2F1c2UgaWYgY2FsbGVkIHdoZW4gYGBwaXBgYCBpcyBhbHJlYWR5CitpbnN0YWxsZWQsIGl0IGRvZXMgbm90aGluZy4gIEl0IGFsc28gaGFzIGFuIGBgLS11cGdyYWRlYGAgb3B0aW9uIHRoYXQgd2lsbAorY2F1c2UgaXQgdG8gaW5zdGFsbCB0aGUgYnVuZGxlZCBjb3B5IG9mIGBgcGlwYGAgaWYgdGhlIGV4aXN0aW5nIGluc3RhbGxlZAordmVyc2lvbiBvZiBgYHBpcGBgIGlzIG9sZGVyIHRoYW4gdGhlIGJ1bmRsZWQgY29weS4KKworCisuLiBfd2hhdHNuZXctZW51bToKKworZW51bQorLS0tLQorCitUaGUgbmV3IDptb2Q6YGVudW1gIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0MzVgKSBwcm92aWRlcyBhIHN0YW5kYXJkCitpbXBsZW1lbnRhdGlvbiBvZiBlbnVtZXJhdGlvbiB0eXBlcywgYWxsb3dpbmcgb3RoZXIgbW9kdWxlcyAoc3VjaCBhcworOm1vZDpgc29ja2V0YCkgdG8gcHJvdmlkZSBtb3JlIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2VzIGFuZCBiZXR0ZXIKK2RlYnVnZ2luZyBzdXBwb3J0IGJ5IHJlcGxhY2luZyBvcGFxdWUgaW50ZWdlciBjb25zdGFudHMgd2l0aCBiYWNrd2FyZHMKK2NvbXBhdGlibGUgZW51bWVyYXRpb24gdmFsdWVzLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDM1YCAtLSBBZGRpbmcgYW4gRW51bSB0eXBlIHRvIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeQorICAgICAgUEVQIHdyaXR0ZW4gYnkgQmFycnkgV2Fyc2F3LCBFbGkgQmVuZGVyc2t5IGFuZCBFdGhhbiBGdXJtYW4sCisgICAgICBpbXBsZW1lbnRlZCBieSBFdGhhbiBGdXJtYW4uCisKKworLi4gX3doYXRzbmV3LXBhdGhsaWI6CisKK3BhdGhsaWIKKy0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBwYXRobGliYCBtb2R1bGUgb2ZmZXJzIGNsYXNzZXMgcmVwcmVzZW50aW5nIGZpbGVzeXN0ZW0gcGF0aHMKK3dpdGggc2VtYW50aWNzIGFwcHJvcHJpYXRlIGZvciBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMuICBQYXRoIGNsYXNzZXMgYXJlCitkaXZpZGVkIGJldHdlZW4gKnB1cmUgcGF0aHMqLCB3aGljaCBwcm92aWRlIHB1cmVseSBjb21wdXRhdGlvbmFsIG9wZXJhdGlvbnMKK3dpdGhvdXQgSS9PLCBhbmQgKmNvbmNyZXRlIHBhdGhzKiwgd2hpY2ggaW5oZXJpdCBmcm9tIHB1cmUgcGF0aHMgYnV0IGFsc28KK3Byb3ZpZGUgSS9PIG9wZXJhdGlvbnMuCisKK0ZvciBQeXRob24gMy40LCB0aGlzIG1vZHVsZSBpcyBjb25zaWRlcmVkIGEgOnRlcm06YHByb3Zpc2lvbmFsIEFQSWAuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MjhgIC0tIFRoZSBwYXRobGliIG1vZHVsZSAtLSBvYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IEFudG9pbmUgUGl0cm91LgorCisKKy4uIF93aGF0c25ldy1zZWxlY3RvcnM6CisKK3NlbGVjdG9ycworLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgKGNyZWF0ZWQgYXMgcGFydCBvZiBpbXBsZW1lbnRpbmcgOnBlcDpgMzE1NmApCithbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTyBtdWx0aXBsZXhpbmcsIGJ1aWx0IHVwb24gdGhlCis6bW9kOmBzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLgorCisKKy4uIF93aGF0c25ldy1zdGF0aXN0aWNzOgorCitzdGF0aXN0aWNzCistLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgc3RhdGlzdGljc2AgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQ1MGApIG9mZmVycyBzb21lIGNvcmUKK3N0YXRpc3RpY3MgZnVuY3Rpb25hbGl0eSBkaXJlY3RseSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeS4gVGhpcyBtb2R1bGUKK3N1cHBvcnRzIGNhbGN1bGF0aW9uIG9mIHRoZSBtZWFuLCBtZWRpYW4sIG1vZGUsIHZhcmlhbmNlIGFuZCBzdGFuZGFyZAorZGV2aWF0aW9uIG9mIGEgZGF0YSBzZXJpZXMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NTBgIC0tIEFkZGluZyBBIFN0YXRpc3RpY3MgTW9kdWxlIFRvIFRoZSBTdGFuZGFyZCBMaWJyYXJ5CisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgU3RldmVuIEQnQXByYW5vCisKKy4uIF93aGF0c25ldy10cmFjZW1hbGxvYzoKKworCit0cmFjZW1hbGxvYworLS0tLS0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQ1NGApIGlzIGEgZGVidWcgdG9vbCB0bwordHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiBJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisqIFRyYWNlYmFjayB3aGVyZSBhbiBvYmplY3Qgd2FzIGFsbG9jYXRlZAorKiBTdGF0aXN0aWNzIG9uIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzIHBlciBmaWxlbmFtZSBhbmQgcGVyIGxpbmUgbnVtYmVyOgorICB0b3RhbCBzaXplLCBudW1iZXIgYW5kIGF2ZXJhZ2Ugc2l6ZSBvZiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcworKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBzbmFwc2hvdHMgdG8gZGV0ZWN0IG1lbW9yeSBsZWFrcworCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDU0YCAtLSBBZGQgYSBuZXcgdHJhY2VtYWxsb2MgbW9kdWxlIHRvIHRyYWNlIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBWaWN0b3IgU3Rpbm5lcgorCisKKworSW1wcm92ZWQgTW9kdWxlcworPT09PT09PT09PT09PT09PQorCisKK2FiYworLS0tCisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgYWJjLmdldF9jYWNoZV90b2tlbmAgY2FuIGJlIHVzZWQgdG8ga25vdyB3aGVuIHRvIGludmFsaWRhdGUKK2NhY2hlcyB0aGF0IGFyZSBhZmZlY3RlZCBieSBjaGFuZ2VzIGluIHRoZSBvYmplY3QgZ3JhcGguICAoQ29udHJpYnV0ZWQKK2J5IMWBdWthc3ogTGFuZ2EgaW4gOmlzc3VlOmAxNjgzMmAuKQorCitOZXcgY2xhc3MgOmNsYXNzOmB+YWJjLkFCQ2AgaGFzIDpjbGFzczpgfmFiYy5BQkNNZXRhYCBhcyBpdHMgbWV0YSBjbGFzcy4KK1VzaW5nIGBgQUJDYGAgYXMgYSBiYXNlIGNsYXNzIGhhcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBlZmZlY3QgYXMgc3BlY2lmeWluZworYGBtZXRhY2xhc3M9YWJjLkFCQ01ldGFgYCwgYnV0IGlzIHNpbXBsZXIgdG8gdHlwZSBhbmQgZWFzaWVyIHRvIHJlYWQuCisoQ29udHJpYnV0ZWQgYnkgQnJ1bm8gRHVwdWlzIGluIDppc3N1ZTpgMTYwNDlgLikKKworCithaWZjCistLS0tCisKK1RoZSA6bWV0aDpgfmFpZmMuZ2V0cGFyYW1zYCBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuIGEKK3BsYWluIHR1cGxlLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE3ODE4YC4pCisKKzpmdW5jOmBhaWZjLm9wZW5gIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sOiB3aGVuIHVzZWQgaW4gYQorOmtleXdvcmQ6YHdpdGhgIGJsb2NrLCB0aGUgOm1ldGg6YH5haWZjLmFpZmMuY2xvc2VgIG1ldGhvZCBvZiB0aGUgcmV0dXJuZWQKK29iamVjdCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLiAgKENvbnRyaWJ1dGVkIGJ5CitTZXJoaXkgU3RvcmNoYWNoYSBpbiA6aXNzdWU6YDE2NDg2YC4pCisKKworYXJncGFyc2UKKy0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YH5hcmdwYXJzZS5GaWxlVHlwZWAgY2xhc3Mgbm93IGFjY2VwdHMgKmVuY29kaW5nKiBhbmQKKyplcnJvcnMqIGFyZ3VtZW50cywgd2hpY2ggYXJlIHBhc3NlZCB0aHJvdWdoIHRvIDpmdW5jOmBvcGVuYC4gIChDb250cmlidXRlZAorYnkgTHVjYXMgTWF5c3RyZSBpbiA6aXNzdWU6YDExMTc1YC4pCisKKworYXVkaW9vcAorLS0tLS0tLQorCitBZGRlZCBzdXBwb3J0IGZvciAyNC1iaXQgc2FtcGxlcyAoOmlzc3VlOmAxMjg2NmApLgorCitBZGRlZCB0aGUgOmZ1bmM6YH5hdWRpb29wLmJ5dGVzd2FwYCBmdW5jdGlvbiB0byBjb252ZXJ0IGJpZy1lbmRpYW4gc2FtcGxlcwordG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYSAoOmlzc3VlOmAxOTY0MWApLgorCisKK2Jhc2U2NAorLS0tLS0tCisKK1RoZSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluIDptb2Q6YGJhc2U2NGAgbm93IGFjY2VwdCBhbnkKKzp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaW4gY2FzZXMgd2hlcmUgaXQgcHJldmlvdXNseSByZXF1aXJlZCBhCis6Y2xhc3M6YGJ5dGVzYCBvciA6Y2xhc3M6YGJ5dGVhcnJheWAgaW5zdGFuY2UgKDppc3N1ZTpgMTc4MzlgKS4KKworCitjb2xvcnN5cworLS0tLS0tLS0KKworVGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGNvZWZmaWNpZW50cyBmb3IgdGhlIFJHQiAtLS0gWUlRIGNvbnZlcnNpb25zIGhhdmUKK2JlZW4gZXhwYW5kZWQgc28gdGhhdCB0aGV5IG1hdGNoIHRoZSBGQ0MgTlRTQyB2ZXJzaW9ucy4gIFRoZSBjaGFuZ2UgaW4KK3Jlc3VsdHMgc2hvdWxkIGJlIGxlc3MgdGhhbiAxJSBhbmQgbWF5IGJldHRlciBtYXRjaCByZXN1bHRzIGZvdW5kIGVsc2V3aGVyZS4KKyhDb250cmlidXRlZCBieSBCcmlhbiBMYW5kZXJzIGFuZCBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTQzMjNgLikKKworCitjb250ZXh0bGliCistLS0tLS0tLS0tCisKK1RoZSBuZXcgOmNsYXNzOmBjb250ZXh0bGliLnN1cHByZXNzYCBjb250ZXh0IG1hbmFnZXIgaGVscHMgdG8gY2xhcmlmeSB0aGUKK2ludGVudCBvZiBjb2RlIHRoYXQgZGVsaWJlcmF0ZWx5IHN1cHByZXNzZXMgZXhjZXB0aW9ucyBmcm9tIGEgc2luZ2xlCitzdGF0ZW1lbnQuIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlciBpbiA6aXNzdWU6YDE1ODA2YCBhbmQKK1plcm8gUGlyYWV1cyBpbiA6aXNzdWU6YDE5MjY2YCkKKworVGhlIG5ldyA6ZnVuYzpgY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXRgIGNvbnRleHQgbWFuYWdlciBtYWtlcyBpdCBlYXNpZXIKK2ZvciB1dGlsaXR5IHNjcmlwdHMgdG8gaGFuZGxlIGluZmxleGlibGUgQVBJcyB0aGF0IGRvbid0IHByb3ZpZGUgYW55CitvcHRpb25zIHRvIHJldHJpZXZlIHRoZWlyIG91dHB1dCBhcyBhIHN0cmluZyBvciBkaXJlY3QgaXQgdG8gc29tZXdoZXJlCitvdGhlciB0aGFuIDpkYXRhOmBzeXMuc3Rkb3V0YC4gSW4gY29uanVuY3Rpb24gd2l0aCA6Y2xhc3M6YGlvLlN0cmluZ0lPYCwKK3RoaXMgY29udGV4dCBtYW5hZ2VyIGlzIGFsc28gdXNlZnVsIGZvciBjaGVja2luZyBleHBlY3RlZCBvdXRwdXQgZnJvbQorY29tbWFuZCBsaW5lIHV0aWxpdGllcy4gKENvbnRyaWJ1dGUgYnkgUmF5bW9uZCBIZXR0aW5nZXIgaW4gOmlzc3VlOmAxNTgwNWApCisKK1RoZSA6bW9kOmBjb250ZXh0bGliYCBkb2N1bWVudGF0aW9uIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byBpbmNsdWRlIGEKKzpyZWY6YGRpc2N1c3Npb24gPHNpbmdsZS11c2UtcmV1c2FibGUtYW5kLXJlZW50cmFudC1jbXM+YCBvZiB0aGUKK2RpZmZlcmVuY2VzIGJldHdlZW4gc2luZ2xlIHVzZSwgcmV1c2FibGUgYW5kIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzLgorCisKK2RpcworLS0tCisKK0Z1bmN0aW9ucyA6ZnVuYzpgfmRpcy5zaG93X2NvZGVgLCA6ZnVuYzpgfmRpcy5kaXNgLCA6ZnVuYzpgfmRpcy5kaXN0YmAsIGFuZAorOmZ1bmM6YH5kaXMuZGlzYXNzZW1ibGVgIG5vdyBhY2NlcHQgYSBrZXl3b3JkLW9ubHkgKmZpbGUqIGFyZ3VtZW50IHRoYXQKK2NvbnRyb2xzIHdoZXJlIHRoZXkgd3JpdGUgdGhlaXIgb3V0cHV0LgorCitUaGUgOm1vZDpgZGlzYCBtb2R1bGUgaXMgbm93IGJ1aWx0IGFyb3VuZCBhbiA6Y2xhc3M6YH5kaXMuSW5zdHJ1Y3Rpb25gIGNsYXNzCit0aGF0IHByb3ZpZGVzIG9iamVjdCBvcmllbnRlZCBhY2Nlc3MgdG8gdGhlIGRldGFpbHMgb2YgZWFjaCBpbmRpdmlkdWFsIGJ5dGVjb2RlCitvcGVyYXRpb24uCisKK0EgbmV3IG1ldGhvZCwgOmZ1bmM6YH5kaXMuZ2V0X2luc3RydWN0aW9uc2AsIHByb3ZpZGVzIGFuIGl0ZXJhdG9yIHRoYXQgZW1pdHMKK3RoZSBJbnN0cnVjdGlvbiBzdHJlYW0gZm9yIGEgZ2l2ZW4gcGllY2Ugb2YgUHl0aG9uIGNvZGUuICBUaHVzIGl0IGlzIG5vdworcG9zc2libGUgdG8gd3JpdGUgYSBwcm9ncmFtIHRoYXQgaW5zcGVjdHMgYW5kIG1hbmlwdWxhdGVzIGEgYnl0ZWNvZGUKK29iamVjdCBpbiB3YXlzIGRpZmZlcmVudCBmcm9tIHRob3NlIHByb3ZpZGVkIGJ5IHRoZSA6bW9kOmB+ZGlzYCBtb2R1bGUKK2l0c2VsZi4gIEZvciBleGFtcGxlOjoKKworICAgID4+PiBpbXBvcnQgZGlzCisgICAgPj4+IGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhsYW1iZGEgeDogeCArIDEpOgorICAgIC4uLiAgICAgcHJpbnQoaW5zdHIub3BuYW1lKQorICAgIExPQURfRkFTVAorICAgIExPQURfQ09OU1QKKyAgICBCSU5BUllfQURECisgICAgUkVUVVJOX1ZBTFVFCisKK1RoZSB2YXJpb3VzIGRpc3BsYXkgdG9vbHMgaW4gdGhlIDptb2Q6YGRpc2AgbW9kdWxlIGhhdmUgYmVlbiByZXdyaXR0ZW4gdG8gdXNlCit0aGVzZSBuZXcgY29tcG9uZW50cy4KKworSW4gYWRkaXRpb24sIGEgbmV3IGFwcGxpY2F0aW9uLWZyaWVuZGx5IGNsYXNzIDpjbGFzczpgfmRpcy5CeXRlY29kZWAgcHJvdmlkZXMKK2FuIG9iamVjdC1vcmllbnRlZCBBUEkgZm9yIGluc3BlY3RpbmcgYnl0ZWNvZGUgaW4gYm90aCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtCithbmQgZm9yIGl0ZXJhdGluZyBvdmVyIGluc3RydWN0aW9ucy4gIFRoZSA6Y2xhc3M6YH5kaXMuQnl0ZWNvZGVgIGNvbnN0cnVjdG9yCit0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdCA6ZnVuYzpgfmRpcy5nZXRfaW5zdHJ1Y3Rpb25gIGRvZXMgKHBsdXMgYW4KK29wdGlvbmFsICpjdXJyZW50X29mZnNldCopLCBhbmQgdGhlIHJlc3VsdGluZyBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIHRvIHByb2R1Y2UKKzpjbGFzczpgfmRpcy5JbnN0cnVjdGlvbmAgb2JqZWN0cy4gIEJ1dCBpdCBhbHNvIGhhcyBhIDptb2Q6YH5kaXMuQnl0ZWNvZGUuZGlzYAorbWV0aG9kLCBlcXVpdmFsZW50IHRvIGNhbGxpbmcgOm1vZDpgfmRpcy5kaXNgIG9uIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudCwgYnV0CityZXR1cm5lZCBhcyBhIG11bHRpLWxpbmUgc3RyaW5nOjoKKworICAgID4+PiBieXRlY29kZSA9IGRpcy5CeXRlY29kZShsYW1iZGEgeDogeCArMSwgY3VycmVudF9vZmZzZXQ9MykKKyAgICA+Pj4gZm9yIGluc3RyIGluIGJ5dGVjb2RlOgorICAgIC4uLiAgICAgcHJpbnQoJ3t9ICh7fSknLmZvcm1hdChpbnN0ci5vcG5hbWUsIGluc3RyLm9wY29kZSkpCisgICAgTE9BRF9GQVNUICgxMjQpCisgICAgTE9BRF9DT05TVCAoMTAwKQorICAgIEJJTkFSWV9BREQgKDIzKQorICAgIFJFVFVSTl9WQUxVRSAoODMpCisgICAgPj4+IGJ5dGVjb2RlLmRpcygpLnNwbGl0bGluZXMoKSAgICAgICAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIFsnICAxICAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAwICh4KScsCisgICAgICcgICAgICAtLT4gICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpJywKKyAgICAgJyAgICAgICAgICAgICAgNiBCSU5BUllfQUREJywKKyAgICAgJyAgICAgICAgICAgICAgNyBSRVRVUk5fVkFMVUUnXQorCis6Y2xhc3M6YH5kaXMuQnl0ZWNvZGVgIGFsc28gaGFzIGEgY2xhc3MgbWV0aG9kLAorOm1ldGg6YH5kaXMuQnl0ZWNvZGUuZnJvbV90cmFjZWJhY2tgLCB0aGF0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIG1hbmlwdWxhdGUgYQordHJhY2ViYWNrICh0aGF0IGlzLCBgYHByaW50KEJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKHRiKS5kaXMoKSlgYCBpcyBlcXVpdmFsZW50Cit0byBgYGRpc3RiKHRiKWBgKS4KKworKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiwgUnlhbiBLZWxseSBhbmQgVGhvbWFzIEtsdXl2ZXIgaW4gOmlzc3VlOmAxMTgxNmAKK2FuZCBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzkxNmApCisKKworZG9jdGVzdAorLS0tLS0tLQorCitBIG5ldyA6cmVmOmBvcHRpb24gZmxhZyA8ZG9jdGVzdC1vcHRpb25zPmAsIDpkYXRhOmB+ZG9jdGVzdC5GQUlMX0ZBU1RgLCBoYWx0cwordGVzdCBydW5uaW5nIGFzIHNvb24gYXMgdGhlIGZpcnN0IGZhaWx1cmUgaXMgZGV0ZWN0ZWQuICAoQ29udHJpYnV0ZWQgYnkgUi4KK0RhdmlkIE11cnJheSBhbmQgRGFuaWVsIFVyYmFuIGluIDppc3N1ZTpgMTY1MjJgLikKKworVGhlIDptb2Q6YGRvY3Rlc3RgIGNvbW1hbmQgbGluZSBpbnRlcmZhY2Ugbm93IHVzZXMgOm1vZDpgYXJncGFyc2VgLCBhbmQgaGFzIHR3bworbmV3IG9wdGlvbnMsIGBgLW9gYCBhbmQgYGAtZmBgLiAgYGAtb2BgIGFsbG93cyA6cmVmOmBkb2N0ZXN0IG9wdGlvbnMKKzxkb2N0ZXN0LW9wdGlvbnM+YCB0byBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIGBgLWZgYCBpcyBhCitzaG9ydGhhbmQgZm9yIGBgLW8gRkFJTF9GQVNUYGAgKHRvIHBhcmFsbGVsIHRoZSBzaW1pbGFyIG9wdGlvbiBzdXBwb3J0ZWQgYnkgdGhlCis6bW9kOmB1bml0dGVzdGAgQ0xJKS4gIChDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgaW4gOmlzc3VlOmAxMTM5MGAuKQorCisKK2VtYWlsCistLS0tLQorCis6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19zdHJpbmdgIG5vdyBhY2NlcHRzIGEgKnBvbGljeSogYXJndW1lbnQgdG8KK292ZXJyaWRlIHRoZSBkZWZhdWx0IHBvbGljeSBvZiB0aGUgbWVzc2FnZSB3aGVuIGdlbmVyYXRpbmcgYSBzdHJpbmcKK3JlcHJlc2VudGF0aW9uIG9mIGl0LiAgVGhpcyBtZWFucyB0aGF0IGBgYXNfc3RyaW5nYGAgY2FuIG5vdyBiZSB1c2VkIGluIG1vcmUKK2NpcmN1bXN0YW5jZXMsIGluc3RlYWQgb2YgaGF2aW5nIHRvIGNyZWF0ZSBhbmQgdXNlIGEgOm1vZDpgfmVtYWlsLmdlbmVyYXRvcmAgaW4KK29yZGVyIHRvIHBhc3MgZm9ybWF0dGluZyBwYXJhbWV0ZXJzIHRvIGl0cyBgYGZsYXR0ZW5gYCBtZXRob2QuCisKK05ldyBtZXRob2QgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfYnl0ZXNgIGFkZGVkIHRvIHByb2R1Y2UgYSBieXRlcworcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lc3NhZ2UgaW4gYSBmYXNoaW9uIHNpbWlsYXIgdG8gaG93IGBgYXNfc3RyaW5nYGAKK3Byb2R1Y2VzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAgSXQgZG9lcyBub3QgYWNjZXB0IHRoZSAqbWF4aGVhZGVybGVuKgorYXJndW1lbnQsIGJ1dCBkb2VzIGFjY2VwdCB0aGUgKnVuaXhmcm9tKiBhbmQgKnBvbGljeSogYXJndW1lbnRzLiBUaGUKKzpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19ieXRlc19fYCBtZXRob2QKK2NhbGxzIGl0LCBtZWFuaW5nIHRoYXQgYGBieXRlcyhteW1zZylgYCB3aWxsIG5vdyBwcm9kdWNlIHRoZSBpbnR1aXRpdmUKK3Jlc3VsdDogIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZ1bGx5IGZvcm1hdHRlZCBtZXNzYWdlLgorCisoQ29udHJpYnV0ZWQgYnkgUi4gRGF2aWQgTXVycmF5IGluIDppc3N1ZTpgMTg2MDBgLikKKworLi4gX3doYXRzbmV3X2VtYWlsX2NvbnRlbnRtYW5hZ2VyOgorCitBIHBhaXIgb2YgbmV3IHN1YmNsYXNzZXMgb2YgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBoYXZlIGJlZW4gYWRkZWQsCithbG9uZyB3aXRoIGEgbmV3IHN1Yi1tb2R1bGUsIDptb2Q6YH5lbWFpbC5jb250ZW50bWFuYWdlcmAuICBBbGwgZG9jdW1lbnRhdGlvbgoraXMgY3VycmVudGx5IGluIHRoZSBuZXcgbW9kdWxlLCB3aGljaCBpcyBiZWluZyBhZGRlZCBhcyBwYXJ0IG9mIHRoZSBuZXcKKzp0ZXJtOmBwcm92aXNpb25hbCA8cHJvdmlzaW9uYWwgcGFja2FnZT5gIGVtYWlsIEFQSS4gIFRoZXNlIGNsYXNzZXMgcHJvdmlkZSBhCitudW1iZXIgb2YgbmV3IG1ldGhvZHMgdGhhdCBtYWtlIGV4dHJhY3RpbmcgY29udGVudCBmcm9tIGFuZCBpbnNlcnRpbmcgY29udGVudAoraW50byBlbWFpbCBtZXNzYWdlcyBtdWNoIGVhc2llci4gIFNlZSB0aGUgOm1vZDpgfmVtYWlsLmNvbnRlbnRtYW5hZ2VyYAorZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworVGhlc2UgQVBJIGFkZGl0aW9ucyBjb21wbGV0ZSB0aGUgYnVsayBvZiB0aGUgd29yayB0aGF0IHdhcyBwbGFubmVkIGFzIHBhcnQgb2YKK3RoZSBlbWFpbDYgcHJvamVjdC4gIFRoZSBjdXJyZW50bHkgcHJvdmlzaW9uYWwgQVBJIGlzIHNjaGVkdWxlZCB0byBiZWNvbWUgZmluYWwKK2luIFB5dGhvbiAzLjUgKHBvc3NpYmx5IHdpdGggYSBmZXcgbWlub3IgYWRkaXRpb25zIGluIHRoZSBhcmVhIG9mIGVycm9yCitoYW5kbGluZykuCisKKyhDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgaW4gOmlzc3VlOmAxODg5MWAuKQorCisKK2ZpbGVjbXAKKy0tLS0tLS0KKworQSBuZXcgOmZ1bmM6YH5maWxlY21wLmNsZWFyX2NhY2hlYCBmdW5jdGlvbiBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBjbGVhciB0aGUKKzptb2Q6YGZpbGVjbXBgIGNvbXBhcmlzb24gY2FjaGUsIHdoaWNoIHVzZXMgOmZ1bmM6YG9zLnN0YXRgIGluZm9ybWF0aW9uIHRvCitkZXRlcm1pbmUgaWYgdGhlIGZpbGUgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY29tcGFyZS4gIFRoaXMgY2FuIGJlIHVzZWQsCitmb3IgZXhhbXBsZSwgaWYgdGhlIGZpbGUgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQgYW5kIHJlLWNoZWNrZWQgaW4gbGVzcyB0aW1lCit0aGFuIHRoZSByZXNvbHV0aW9uIG9mIGEgcGFydGljdWxhciBmaWxlc3lzdGVtJ3MgZmlsZSBtb2RpZmljYXRpb24gdGltZSBmaWVsZC4KKyhDb250cmlidXRlZCBieSBNYXJrIExldml0dCBpbiA6aXNzdWU6YDE4MTQ5YC4pCisKKworZnVuY3Rvb2xzCistLS0tLS0tLS0KKworVGhlIG5ldyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kYCBkZXNjcmlwdG9yIGJyaW5ncyBwYXJ0aWFsIGFyZ3VtZW50CithcHBsaWNhdGlvbiB0byBkZXNjcmlwdG9ycywganVzdCBhcyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsYCBwcm92aWRlcworZm9yIG5vcm1hbCBjYWxsYWJsZXMuIFRoZSBuZXcgZGVzY3JpcHRvciBhbHNvIG1ha2VzIGl0IGVhc2llciB0byBnZXQKK2FyYml0cmFyeSBjYWxsYWJsZXMgKGluY2x1ZGluZyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsYCBpbnN0YW5jZXMpCit0byBiZWhhdmUgbGlrZSBub3JtYWwgaW5zdGFuY2UgbWV0aG9kcyB3aGVuIGluY2x1ZGVkIGluIGEgY2xhc3MgZGVmaW5pdGlvbi4KKyhDb250cmlidXRlZCBieSBBbG9uIEhvcmV2IGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmA0MzMxYCkKKworLi4gX3doYXRzbmV3LXNpbmdsZWRpc3BhdGNoOgorCitUaGUgbmV3IDpmdW5jOmB+ZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoYCBkZWNvcmF0b3IgYnJpbmdzIHN1cHBvcnQgZm9yCitzaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMgdG8gdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5LiBXaGVyZQorb2JqZWN0IG9yaWVudGVkIHByb2dyYW1taW5nIGZvY3VzZXMgb24gZ3JvdXBpbmcgbXVsdGlwbGUgb3BlcmF0aW9ucyBvbiBhCitjb21tb24gc2V0IG9mIGRhdGEgaW50byBhIGNsYXNzLCBhIGdlbmVyaWMgZnVuY3Rpb24gZm9jdXNlcyBvbiBncm91cGluZworbXVsdGlwbGUgaW1wbGVtZW50YXRpb25zIG9mIGFuIG9wZXJhdGlvbiB0aGF0IGFsbG93cyBpdCB0byB3b3JrIHdpdGgKKypkaWZmZXJlbnQqIGtpbmRzIG9mIGRhdGEuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NDNgIC0tIFNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IMWBdWthc3ogTGFuZ2EuCisKK0EgcHVyZS1weXRob24gdmVyc2lvbiBvZiB0aGUgOmZ1bmM6YH5mdW5jdG9vbHMucGFydGlhbGAgZnVuY3Rpb24gaXMgbm93IGluIHRoZQorc3RkbGliOyBpbiBDUHl0aG9uIGl0IGlzIG92ZXJyaWRkZW4gYnkgdGhlIEMgYWNjZWxlcmF0ZWQgdmVyc2lvbiwgYnV0IGl0IGlzCithdmFpbGFibGUgZm9yIG90aGVyIGltcGxlbWVudGF0aW9ucyB0byB1c2UuICAoQ29udHJpYnV0ZWQgYnkgQnJpYW4gVGhvcm5lIGluCis6aXNzdWU6YDEyNDI4YC4pCisKKworZ2MKKy0tCisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgfmdjLmdldF9zdGF0c2AgcmV0dXJucyBhIGxpc3Qgb2YgdGhyZWUgcGVyLWdlbmVyYXRpb24KK2RpY3Rpb25hcmllcyBjb250YWluaW5nIHRoZSBjb2xsZWN0aW9ucyBzdGF0aXN0aWNzIHNpbmNlIGludGVycHJldGVyIHN0YXJ0dXAuCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxNjM1MWAuKQorCisKK2hhc2hsaWIKKy0tLS0tLS0KKworTmV3IDpmdW5jOmBoYXNobGliLnBia2RmMl9obWFjYCBmdW5jdGlvbi4KKyhDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTg1ODJgKQorCisKK2htYWMKKy0tLS0KKworOm1vZDpgaG1hY2Agbm93IGFjY2VwdHMgYGBieXRlYXJyYXlgYCBhcyB3ZWxsIGFzIGBgYnl0ZXNgYCBmb3IgdGhlICprZXkqCithcmd1bWVudCB0byB0aGUgOmZ1bmM6YH5obWFjLm5ld2AgZnVuY3Rpb24sIGFuZCB0aGUgKm1zZyogcGFyYW1ldGVyIHRvIGJvdGggdGhlCis6ZnVuYzpgfmhtYWMubmV3YCBmdW5jdGlvbiBhbmQgdGhlIDptZXRoOmB+aG1hYy5ITUFDLnVwZGF0ZWAgbWV0aG9kIG5vdworYWNjZXB0cyBhbnkgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIDptb2Q6YGhhc2hsaWJgIG1vZHVsZS4gIChDb250cmlidXRlZAorYnkgSm9uYXMgQm9yZ3N0csO2bSBpbiA6aXNzdWU6YDE4MjQwYC4pCisKKworaHRtbAorLS0tLQorCitBZGRlZCBhIG5ldyA6ZnVuYzpgaHRtbC51bmVzY2FwZWAgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBIVE1MNSBjaGFyYWN0ZXIKK3JlZmVyZW5jZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXJzLgorKENvbnRyaWJ1dGVkIGJ5IEV6aW8gTWVsb3R0aSBpbiA6aXNzdWU6YDI5MjdgKQorCitBZGRlZCBhIG5ldyAqY29udmVydF9jaGFycmVmcyoga2V5d29yZCBhcmd1bWVudCB0bworOmNsYXNzOmB+aHRtbC5wYXJzZXIuSFRNTFBhcnNlcmAgdGhhdCwgd2hlbiBgYFRydWVgYCwgYXV0b21hdGljYWxseSBjb252ZXJ0cworYWxsIGNoYXJhY3RlciByZWZlcmVuY2VzLiAgRm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHksIGl0cyB2YWx1ZSBkZWZhdWx0cwordG8gYGBGYWxzZWBgLCBidXQgaXQgd2lsbCBjaGFuZ2UgdG8gYGBUcnVlYGAgaW4gZnV0dXJlIHZlcnNpb25zLCBzbyB5b3UKK2FyZSBpbnZpdGVkIHRvIHNldCBpdCBleHBsaWNpdGx5IGFuZCB1cGRhdGUgeW91ciBjb2RlIHRvIHVzZSB0aGlzIG5ldyBmZWF0dXJlLgorKENvbnRyaWJ1dGVkIGJ5IEV6aW8gTWVsb3R0aSBpbiA6aXNzdWU6YDEzNjMzYCkKKworVGhlICpzdHJpY3QqIGFyZ3VtZW50IG9mIDpjbGFzczpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZXJgIGlzIG5vdyBkZXByZWNhdGVkLgorKENvbnRyaWJ1dGVkIGJ5IEV6aW8gTWVsb3R0aSBpbiA6aXNzdWU6YDE1MTE0YCkKKworCitodHRwCistLS0tCisKKzptZXRoOmB+aHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zZW5kX2Vycm9yYCBub3cgYWNjZXB0cyBhbgorb3B0aW9uYWwgYWRkaXRpb25hbCAqZXhwbGFpbiogcGFyYW1ldGVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYW4KK2V4dGVuZGVkIGVycm9yIGRlc2NyaXB0aW9uLCBvdmVycmlkaW5nIHRoZSBoYXJkY29kZWQgZGVmYXVsdCBpZiB0aGVyZSBpcyBvbmUuCitUaGlzIGV4dGVuZGVkIGVycm9yIGRlc2NyaXB0aW9uIHdpbGwgYmUgZm9ybWF0dGVkIHVzaW5nIHRoZQorOmF0dHI6YH5odHRwLnNlcnZlci5IVFRQLmVycm9yX21lc3NhZ2VfZm9ybWF0YCBhdHRyaWJ1dGUgYW5kIHNlbnQgYXMgdGhlIGJvZHkKK29mIHRoZSBlcnJvciByZXNwb25zZS4gIChDb250cmlidXRlZCBieSBLYXJsIENvdyBpbiA6aXNzdWU6YDEyOTIxYC4pCisKKworaW1wb3J0bGliCistLS0tLS0tLS0KKworVGhlIDpjbGFzczpgfmltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlcmAgQUJDIGRlZmluZXMgYSBuZXcgbWV0aG9kLAorOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuc291cmNlX3RvX2NvZGVgIHRoYXQgYWNjZXB0cyBzb3VyY2UKK2RhdGEgYW5kIGEgcGF0aCBhbmQgcmV0dXJucyBhIGNvZGUgb2JqZWN0LiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KK2lzIGVxdWl2YWxlbnQgdG8gYGBjb21waWxlKGRhdGEsIHBhdGgsICdleGVjJywgZG9udF9pbmhlcml0PVRydWUpYGAuCisoQ29udHJpYnV0ZWQgYnkgRXJpYyBTbm93IGFuZCBCcmV0dCBDYW5ub24gaW4gOmlzc3VlOmAxNTYyN2AuKQorCis6Y2xhc3M6YH5pbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXJgIGFsc28gbm93IGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KK2ZvciB0aGUgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X2NvZGVgIG1ldGhvZC4gIEhvd2V2ZXIsCitpdCB3aWxsIG5vcm1hbGx5IGJlIGRlc2lyYWJsZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICAoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTgwNzJgLikKKworVGhlIDpmdW5jOmB+aW1wb3J0bGliLnJlbG9hZGAgZnVuY3Rpb24gaGFzIGJlZW4gbW92ZWQgZnJvbSA6bW9kOmBpbXBgIHRvCis6bW9kOmBpbXBvcnRsaWJgIGFzIHBhcnQgb2YgdGhlIDptb2Q6YGltcGAgbW9kdWxlIGRlcHJlY2F0aW9uLiAgKENvbnRyaWJ1dGVkIGJ5CitCZXJrZXIgUGVrc2FnIGluIDppc3N1ZTpgMTgxOTNgLikKKworOm1vZDpgaW1wb3J0bGliLnV0aWxgIG5vdyBoYXMgYSA6ZGF0YTpgfmltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUmAgYXR0cmlidXRlCitwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBieXRlY29kZSB2ZXJzaW9uIG51bWJlci4gIFRoaXMgcmVwbGFjZXMgdGhlCis6ZnVuYzpgfmltcC5nZXRfbWFnaWNgIGZ1bmN0aW9uIGluIHRoZSBkZXByZWNhdGVkIDptb2Q6YGltcGAgbW9kdWxlLgorKENvbnRyaWJ1dGVkIGJ5IEJyZXR0IENhbm5vbiBpbiA6aXNzdWU6YDE4MTkyYC4pCisKK05ldyA6bW9kOmBpbXBvcnRsaWIudXRpbGAgZnVuY3Rpb25zIDpmdW5jOmB+aW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2VgCithbmQgOmZ1bmM6YH5pbXBvcnRsaWIudXRpbC5zb3VyY2VfZnJvbV9jYWNoZWAgcmVwbGFjZSB0aGUgc2FtZS1uYW1lZCBmdW5jdGlvbnMKK2luIHRoZSBkZXByZWNhdGVkIDptb2Q6YGltcGAgbW9kdWxlLiAgKENvbnRyaWJ1dGVkIGJ5IEJyZXR0IENhbm5vbiBpbgorOmlzc3VlOmAxODE5NGAuKQorCitUaGUgOm1vZDpgaW1wb3J0bGliYCBib290c3RyYXAgOmNsYXNzOmAuTmFtZXNwYWNlTG9hZGVyYCBub3cgY29uZm9ybXMgdG8KK3RoZSA6Y2xhc3M6YC5JbnNwZWN0TG9hZGVyYCBBQkMsIHdoaWNoIG1lYW5zIHRoYXQgYGBydW5weWBgIGFuZAorYGBweXRob24gLW1gYCBjYW4gbm93IGJlIHVzZWQgd2l0aCBuYW1lc3BhY2UgcGFja2FnZXMuICAoQ29udHJpYnV0ZWQKK2J5IEJyZXR0IENhbm5vbiBpbiA6aXNzdWU6YDE4MDU4YC4pCisKKzptb2Q6YGltcG9ydGxpYi51dGlsYCBoYXMgYSBuZXcgZnVuY3Rpb24gOmZ1bmM6YH5pbXBvcnRsaWIudXRpbC5kZWNvZGVfc291cmNlYAordGhhdCBkZWNvZGVzIHNvdXJjZSBmcm9tIGJ5dGVzIHVzaW5nIHVuaXZlcnNhbCBuZXdsaW5lIHByb2Nlc3NpbmcuICBUaGlzIGlzCit1c2VmdWwgZm9yIGltcGxlbWVudGluZyA6bWV0aDpgLkluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZWAgbWV0aG9kcy4KKworCitpbnNwZWN0CistLS0tLS0tCisKK1RoZSBpbnNwZWN0IG1vZHVsZSBub3cgb2ZmZXJzIGEgYmFzaWMgOnJlZjpgY29tbWFuZCBsaW5lIGludGVyZmFjZQorPGluc3BlY3QtbW9kdWxlLWNsaT5gIHRvIHF1aWNrbHkgZGlzcGxheSBzb3VyY2UgY29kZSBhbmQgb3RoZXIKK2luZm9ybWF0aW9uIGZvciBtb2R1bGVzLCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEKK2FuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxODYyNmApCisKKzpmdW5jOmB+aW5zcGVjdC51bndyYXBgIG1ha2VzIGl0IGVhc3kgdG8gdW5yYXZlbCB3cmFwcGVyIGZ1bmN0aW9uIGNoYWlucworY3JlYXRlZCBieSA6ZnVuYzpgZnVuY3Rvb2xzLndyYXBzYCAoYW5kIGFueSBvdGhlciBBUEkgdGhhdCBzZXRzIHRoZQorYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBvbiBhIHdyYXBwZXIgZnVuY3Rpb24pLiAoQ29udHJpYnV0ZWQgYnkKK0RhbmllbCBVcmJhbiwgQWFyb24gSWxlcyBhbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTMyNjZgKQorCitBcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3IDptb2Q6YGVudW1gIG1vZHVsZSwgdGhlCis6bW9kOmBpbnNwZWN0YCBtb2R1bGUgbm93IGhhcyBzdWJzdGFudGlhbGx5IGJldHRlciBzdXBwb3J0IGZvciBjdXN0b20KK2BgX19kaXJfX2BgIG1ldGhvZHMgYW5kIGR5bmFtaWMgY2xhc3MgYXR0cmlidXRlcyBwcm92aWRlZCB0aHJvdWdoCittZXRhY2xhc3NlcyAoQ29udHJpYnV0ZWQgYnkgRXRoYW4gRnVybWFuIGluIDppc3N1ZTpgMTg5MjlgIGFuZAorOmlzc3VlOmAxOTAzMGApCisKKzpmdW5jOmB+aW5zcGVjdC5nZXRmdWxsYXJnc3BlY2AgYW5kIDpmdW5jOmB+aW5zcGVjdC5nZXRhcmdzcGVjYAorbm93IHVzZSB0aGUgOmZ1bmM6YH5pbnNwZWN0LnNpZ25hdHVyZWAgQVBJLiBUaGlzIGFsbG93cyB0aGVtIHRvCitzdXBwb3J0IG11Y2ggYnJvYWRlciByYW5nZSBvZiBmdW5jdGlvbnMsIGluY2x1ZGluZyBzb21lIGJ1aWx0aW5zIGFuZAorY2FsbGFibGVzIHRoYXQgZm9sbG93IGBgX19zaWduYXR1cmVfX2BgIHByb3RvY29sLiBJdCBpcyBzdGlsbAorcmVjb21tZW5kZWQgdG8gdXBkYXRlIHlvdXIgY29kZSB0byB1c2UgOmZ1bmM6YH5pbnNwZWN0LnNpZ25hdHVyZWAKK2RpcmVjdGx5LiAoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YgaW4gOmlzc3VlOmAxNzQ4MWApCisKKzpmdW5jOmB+aW5zcGVjdC5zaWduYXR1cmVgIG5vdyBzdXBwb3J0cyBkdWNrIHR5cGVzIG9mIENQeXRob24gZnVuY3Rpb25zLAord2hpY2ggYWRkcyBzdXBwb3J0IGZvciBmdW5jdGlvbnMgY29tcGlsZWQgd2l0aCBDeXRob24uIChDb250cmlidXRlZAorYnkgU3RlZmFuIEJlaG5lbCBhbmQgWXVyeSBTZWxpdmFub3YgaW4gOmlzc3VlOmAxNzE1OWApCisKKworaXBhZGRyZXNzCistLS0tLS0tLS0KKworOm1vZDpgaXBhZGRyZXNzYCB3YXMgYWRkZWQgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW4gUHl0aG9uIDMuMyBhcyBhCis6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4gV2l0aCB0aGUgcmVsZWFzZSBvZiBQeXRob24gMy40LCB0aGlzIHF1YWxpZmljYXRpb24KK2hhcyBiZWVuIHJlbW92ZWQ6IDptb2Q6YGlwYWRkcmVzc2AgaXMgbm93IGNvbnNpZGVyZWQgYSBzdGFibGUgQVBJLCBjb3ZlcmVkCitieSB0aGUgbm9ybWFsIHN0YW5kYXJkIGxpYnJhcnkgcmVxdWlyZW1lbnRzIHRvIG1haW50YWluIGJhY2t3YXJkcworY29tcGF0aWJpbGl0eS4KKworCitsb2dnaW5nCistLS0tLS0tCisKK1RoZSA6Y2xhc3M6YH5sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcmAgaGFzIGEgbmV3ICphdFRpbWUqCitwYXJhbWV0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB0aW1lIG9mIGRheSB3aGVuIHJvbGxvdmVyIHNob3VsZAoraGFwcGVuLiAgKENvbnRyaWJ1dGVkIGJ5IFJvbmFsZCBPdXNzb3JlbiBpbiA6aXNzdWU6YDk1NTZgLikKKworCisuLiBfd2hhdHNuZXctbWFyc2hhbC0zOgorCittYXJzaGFsCistLS0tLS0tCisKK1RoZSBkZWZhdWx0IDptb2Q6YG1hcnNoYWxgIHZlcnNpb24gaGFzIGJlZW4gYnVtcGVkIHRvIDMuICBUaGUgY29kZSBpbXBsZW1lbnRpbmcKK3RoZSBuZXcgdmVyc2lvbiByZXN0b3JlcyB0aGUgUHl0aG9uMiBiZWhhdmlvciBvZiByZWNvcmRpbmcgb25seSBvbmUgY29weSBvZgoraW50ZXJuZWQgc3RyaW5ncyBhbmQgcHJlc2VydmluZyB0aGUgaW50ZXJuaW5nIG9uIGRlc2VyaWFsaXphdGlvbiwgYW5kIGV4dGVuZHMKK3RoaXMgIm9uZSBjb3B5IiBhYmlsaXR5IHRvIGFueSBvYmplY3QgdHlwZSAoaW5jbHVkaW5nIGhhbmRsaW5nIHJlY3Vyc2l2ZQorcmVmZXJlbmNlcykuICBUaGlzIHJlZHVjZXMgYm90aCB0aGUgc2l6ZSBvZiBgYC5weWNgYCBmaWxlcyBhbmQgdGhlIGFtb3VudCBvZgorbWVtb3J5IGEgbW9kdWxlIG9jY3VwaWVzIGluIG1lbW9yeSB3aGVuIGl0IGlzIGxvYWRlZCBmcm9tIGEgYGAucHljYGAgKG9yCitgYC5weW9gYCkgZmlsZS4gIChDb250cmlidXRlZCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb24gaW4gOmlzc3VlOmAxNjQ3NWAuKQorCisKK21tYXAKKy0tLS0KKworbW1hcCBvYmplY3RzIGNhbiBub3cgYmUgd2Vha3JlZidlZC4KKyhDb250cmlidXRlZCBieSBWYWxlcmllIExhbWJlcnQgaW4gOmlzc3VlOmA0ODg1YC4pCisKKworbW9jaworLS0tLQorCis6bW9kOmB+dW5pdHRlc3QubW9ja2Agb2JqZWN0cyBub3cgaW5zcGVjdCB0aGVpciBzcGVjaWZpY2F0aW9uIHNpZ25hdHVyZXMgd2hlbgorbWF0Y2hpbmcgY2FsbHMsIHdoaWNoIG1lYW5zIGFuIGFyZ3VtZW50IGNhbiBub3cgYmUgbWF0Y2hlZCBieSBlaXRoZXIgcG9zaXRpb24KK29yIG5hbWUsIGluc3RlYWQgb2Ygb25seSBieSBwb3NpdGlvbi4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbgorOmlzc3VlOmAxNzAxNWAuKQorCis6ZnVuYzpgfm1vY2subW9ja19vcGVuYCBvYmplY3RzIG5vdyBoYXZlIGBgcmVhZGxpbmVgYCBhbmQgYGByZWFkbGluZXNgYAorbWV0aG9kcy4gKENvbnRyaWJ1dGVkIGJ5IFRvc2hpbyBLdXJhdG9taSBpbiA6aXNzdWU6YDE3NDY3YC4pCisKKworbXVsdGlwcm9jZXNzaW5nCistLS0tLS0tLS0tLS0tLS0KKworLi4gX3doYXRzbmV3LW11bHRpcHJvY2Vzc2luZy1uby1mb3JrOgorCitPbiBVbml4LCB0d28gbmV3IDpyZWY6YHN0YXJ0IG1ldGhvZHMgPG11bHRpcHJvY2Vzc2luZy1zdGFydC1tZXRob2RzPmAKKyhgYHNwYXduYGAgYW5kIGBgZm9ya3NlcnZlcmBgKSBoYXZlIGJlZW4gYWRkZWQgZm9yIHN0YXJ0aW5nIHByb2Nlc3NlcyB1c2luZworOm1vZDpgbXVsdGlwcm9jZXNzaW5nYC4gIFRoZXNlIG1ha2UgdGhlIG1peGluZyBvZiBwcm9jZXNzZXMgd2l0aCB0aHJlYWRzIG1vcmUKK3JvYnVzdCwgYW5kIHRoZSBgYHNwYXduYGAgbWV0aG9kIG1hdGNoZXMgdGhlIHNlbWFudGljcyB0aGF0IG11bHRpcHJvY2Vzc2luZyBoYXMKK2Fsd2F5cyB1c2VkIG9uIFdpbmRvd3MuIChDb250cmlidXRlZCBieSBSaWNoYXJkIE91ZGtlcmsgaW4gOmlzc3VlOmA4NzEzYCkuCisKK0Fsc28sIGV4Y2VwdCB3aGVuIHVzaW5nIHRoZSBvbGQgKmZvcmsqIHN0YXJ0IG1ldGhvZCwgY2hpbGQgcHJvY2Vzc2VzCit3aWxsIG5vIGxvbmdlciBpbmhlcml0IHVubmVlZGVkIGhhbmRsZXMvZmlsZSBkZXNjcmlwdG9ycyBmcm9tIHRoZWlyIHBhcmVudHMKKyhwYXJ0IG9mIDppc3N1ZTpgODcxM2ApLgorCis6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG5vdyByZWxpZXMgb24gOm1vZDpgcnVucHlgICh3aGljaCBpbXBsZW1lbnRzIHRoZQorYGAtbWBgIHN3aXRjaCkgdG8gaW5pdGlhbGlzZSBgYF9fbWFpbl9fYGAgYXBwcm9wcmlhdGVseSBpbiBjaGlsZCBwcm9jZXNzZXMKK3doZW4gdXNpbmcgdGhlIGBgc3Bhd25gYCBvciBgYGZvcmtzZXJ2ZXJgYCBzdGFydCBtZXRob2RzLiBUaGlzIHJlc29sdmVzIHNvbWUKK2VkZ2UgY2FzZXMgd2hlcmUgY29tYmluaW5nIG11bHRpcHJvY2Vzc2luZywgdGhlIGBgLW1gYCBjb21tYW5kIGxpbmUgc3dpdGNoCithbmQgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cyBjb3VsZCBjYXVzZSBvYnNjdXJlIGZhaWx1cmVzIGluIGNoaWxkCitwcm9jZXNzZXMuIChDb250cmlidXRlZCBieSBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxOTk0NmApCisKKworb3BlcmF0b3IKKy0tLS0tLS0tCisKK1RoZXJlIGlzIG5vdyBhIHB1cmUtcHl0aG9uIHZlcnNpb24gb2YgdGhlIDptb2Q6YG9wZXJhdG9yYCBtb2R1bGUgYXZhaWxhYmxlIGZvcgorcmVmZXJlbmNlIGFuZCBmb3IgdXNlIGJ5IGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbnMgb2YgUHl0aG9uLiAgKENvbnRyaWJ1dGVkIGJ5CitaYWNoYXJ5IFdhcmUgaW4gOmlzc3VlOmAxNjY5NGAuKQorCisKK29zCistLQorCitOZXcgZnVuY3Rpb25zIHRvIGdldCBhbmQgc2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIGEgZmlsZQorZGVzY3JpcHRvcnMgb3IgYSBXaW5kb3dzIGhhbmRsZToKKworKiA6ZnVuYzpgb3MuZ2V0X2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9pbmhlcml0YWJsZWAKKyogOmZ1bmM6YG9zLmdldF9oYW5kbGVfaW5oZXJpdGFibGVgLCA6ZnVuYzpgb3Muc2V0X2hhbmRsZV9pbmhlcml0YWJsZWAKKworVGhlIDptb2Q6YG9zYCBtb2R1bGUgbm93IHByb3ZpZGVzIGEgOmZ1bmM6YH5vcy5jcHVfY291bnRgIGZ1bmN0aW9uLCBhbmFsb2dvdXMgdG8KK3RoZSA6ZnVuYzpgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudGAgZnVuY3Rpb24gKHdoaWNoIGlzIG5vdyBpbXBsZW1lbnRlZCBpbgordGVybXMgb2YgdGhlIG5ldyA6bW9kOmBvc2AgZnVuY3Rpb24pLiAgKENvbnRyaWJ1dGVkIGJ5IFRyZW50IE5lbHNvbiwgWW9nZXNoCitDaGF1ZGhhcmksIFZpY3RvciBTdGlubmVyLCBhbmQgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpIGluIDppc3N1ZTpgMTc5MTRgLikKKworOmZ1bmM6YG9zLnBhdGguc2FtZXN0YXRgIGlzIG5vdyBhdmFpbGFibGUgb24gdGhlIFdpbmRvd3MgcGxhdGZvcm0gKGFuZCB0aGUKKzpmdW5jOmBvcy5wYXRoLnNhbWVmaWxlYCBpbXBsZW1lbnRhdGlvbiBpcyBub3cgc2hhcmVkIGJldHdlZW4gVW5peCBhbmQKK1dpbmRvd3MpLiAgKENvbnRyaWJ1dGVkIGJ5IEJyaWFuIEN1cnRpbiBpbiA6aXNzdWU6YDExOTM5YC4pCisKKworcGRiCistLS0KKworVGhlIGBgcHJpbnRgYCBjb21tYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSA6bW9kOmBwZGJgLCByZXN0b3JpbmcgYWNjZXNzIHRvIHRoZQorYGBwcmludGBgIGZ1bmN0aW9uLgorCitSYXRpb25hbGU6IFB5dGhvbjIncyBgYHBkYmBgIGRpZCBub3QgaGF2ZSBhIGBgcHJpbnRgYCBjb21tYW5kOyBpbnN0ZWFkLAorZW50ZXJpbmcgYGBwcmludGBgIGV4ZWN1dGVkIHRoZSBgYHByaW50YGAgc3RhdGVtZW50LiAgSW4gUHl0aG9uMyBgYHByaW50YGAgd2FzCittaXN0YWtlbmx5IG1hZGUgYW4gYWxpYXMgZm9yIHRoZSBwZGIgOnBkYmNtZDpgcGAgY29tbWFuZC4gIGBgcGBgLCBob3dldmVyLAorcHJpbnRzIHRoZSBgYHJlcHJgYCBvZiBpdHMgYXJndW1lbnQsIG5vdCB0aGUgYGBzdHJgYCBsaWtlIHRoZSBQeXRob24yIGBgcHJpbnRgYAorY29tbWFuZCBkaWQuICBXb3JzZSwgdGhlIFB5dGhvbjMgYGBwZGIgcHJpbnRgYCBjb21tYW5kIHNoYWRvd2VkIHRoZSBQeXRob24zCitgYHByaW50YGAgZnVuY3Rpb24sIG1ha2luZyBpdCBpbmFjY2Vzc2libGUgYXQgdGhlIGBgcGRiYGAgcHJvbXB0LgorCisoQ29udHJpYnV0ZWQgYnkgQ29ubm9yIE9zYm9ybiBpbiA6aXNzdWU6YDE4NzY0YC4pCisKKworLi4gX3doYXRzbmV3LXByb3RvY29sLTQ6CisKK3BpY2tsZQorLS0tLS0tCisKKzptb2Q6YHBpY2tsZWAgbm93IHN1cHBvcnRzIChidXQgZG9lcyBub3QgdXNlIGJ5IGRlZmF1bHQpIGEgbmV3IHBpY2tsZSBwcm90b2NvbCwKK3Byb3RvY29sIDQuICBUaGlzIG5ldyBwcm90b2NvbCBhZGRyZXNzZXMgYSBudW1iZXIgb2YgaXNzdWVzIHRoYXQgd2VyZSBwcmVzZW50CitpbiBwcmV2aW91cyBwcm90b2NvbHMsIHN1Y2ggYXMgdGhlIHNlcmlhbGl6YXRpb24gb2YgbmVzdGVkIGNsYXNzZXMsIHZlcnkgbGFyZ2UKK3N0cmluZ3MgYW5kIGNvbnRhaW5lcnMsIG9yIGNsYXNzZXMgd2hvc2UgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB0YWtlcwora2V5d29yZC1vbmx5IGFyZ3VtZW50cy4gIEl0IGFsc28gcHJvdmlkZXMgc29tZSBlZmZpY2llbmN5IGltcHJvdmVtZW50cy4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDMxNTRgIC0tIFBpY2tsZSBwcm90b2NvbCA0CisgICAgICBQRVAgd3JpdHRlbiBieSBBbnRvaW5lIFBpdHJvdSBhbmQgaW1wbGVtZW50ZWQgYnkgQWxleGFuZHJlIFZhc3NhbG90dGkuCisKKworcGxpc3RsaWIKKy0tLS0tLS0tCisKKzptb2Q6YHBsaXN0bGliYCBub3cgc3VwcG9ydHMgYmluYXJ5IHBsaXN0IGZpbGVzLCBhbmQgb2ZmZXJzIHRoZSBjb21tb24KK2BgbG9hZGBgL2BgbG9hZHNgYC9gYGR1bXBgYC9gYGR1bXBzYGAgQVBJIHBhdHRlcm4gZm9yIHNlcmlhbGl6YXRpb24gZm9ybWF0cworKENvbnRyaWJ1dGVkIGJ5IFJvbmFsZCBPdXNzb3JlbiBhbmQgb3RoZXJzIGluIDppc3N1ZTpgMTQ0NTVgKS4KKworCitwb3BsaWIKKy0tLS0tLQorCitUd28gbmV3IG1ldGhvZHMgaGF2ZSBiZWVuIGFkZGVkIHRvIDptb2Q6YHBvcGxpYmA6IDptZXRoOmB+cG9wbGliLlBPUDMuY2FwYWAsCit3aGljaCByZXR1cm5zIHRoZSBsaXN0IG9mIGNhcGFiaWxpdGllcyBhZHZlcnRpc2VkIGJ5IHRoZSBQT1Agc2VydmVyLCBhbmQKKzptZXRoOmB+cG9wbGliLlBPUDMuc3Rsc2AsIHdoaWNoIHN3aXRjaGVzIGEgY2xlYXItdGV4dCBQT1AzIHNlc3Npb24gaW50byBhbgorZW5jcnlwdGVkIFBPUDMgc2Vzc2lvbiBpZiB0aGUgUE9QIHNlcnZlciBzdXBwb3J0cyBpdC4gIChDb250cmlidXRlZCBieSBMb3JlbnpvCitDYXR1Y2NpIGluIDppc3N1ZTpgNDQ3M2AuKQorCisKK3BwcmludAorLS0tLS0tCisKK1RoZSA6bW9kOmBwcHJpbnRgIG1vZHVsZSBub3cgc3VwcG9ydHMgKmNvbXBhY3QqIG1vZGUgZm9yIGZvcm1hdHRpbmcgbG9uZworc2VxdWVuY2VzICg6aXNzdWU6YDE5MTMyYCkuCisKK0xvbmcgc3RyaW5ncyBhcmUgbm93IHdyYXBwZWQgdXNpbmcgUHl0aG9uJ3Mgbm9ybWFsIGxpbmUgY29udGludWF0aW9uCitzeW50YXggKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTcxNTBgLikKKworCitwdHkKKy0tLQorCis6ZnVuYzpgcHR5LnNwYXduYCBub3cgcmV0dXJucyB0aGUgc3RhdHVzIHZhbHVlIGZyb20gOmZ1bmM6YG9zLndhaXRwaWRgIG9uCit0aGUgY2hpbGQgcHJvY2VzcywgaW5zdGVhZCBvZiBgYE5vbmVgYC4gIChDb250cmlidXRlZCBieSBHcmVnb3J5IFAuIFNtaXRoLikKKworCitweWRvYworLS0tLS0KKworV2hpbGUgc2lnbmlmaWNhbnQgY2hhbmdlcyBoYXZlIG5vdCBiZWVuIG1hZGUgdG8gOm1vZDpgcHlkb2NgIGRpcmVjdGx5LAoraXRzIGhhbmRsaW5nIG9mIGN1c3RvbSBgYF9fZGlyX19gYCBtZXRob2RzIGFuZCB2YXJpb3VzIGRlc2NyaXB0b3IKK2JlaGF2aW91cnMgaGFzIGJlZW4gaW1wcm92ZWQgc3Vic3RhbnRpYWxseSBieSB0aGUgdW5kZXJseWluZyBjaGFuZ2VzIGluCit0aGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlLgorCisKK3JlCistLQorCitBZGRlZCA6ZnVuYzpgcmUuZnVsbG1hdGNoYCBmdW5jdGlvbiBhbmQgOm1ldGg6YHJlZ2V4LmZ1bGxtYXRjaGAgbWV0aG9kLAord2hpY2ggYW5jaG9yIHRoZSBwYXR0ZXJuIGF0IGJvdGggZW5kcyBvZiB0aGUgc3RyaW5nIHRvIG1hdGNoLgorKENvbnRyaWJ1dGVkIGJ5IE1hdHRoZXcgQmFybmV0dCBpbiA6aXNzdWU6YDE2MjAzYC4pCisKK1RoZSByZXByIG9mIDpyZWY6YHJlZ2V4IG9iamVjdHMgPHJlLW9iamVjdHM+YCBub3cgaW5jbHVkZXMgdGhlIHBhdHRlcm4KK2FuZCB0aGUgZmxhZ3M7IHRoZSByZXByIG9mIDpyZWY6YG1hdGNoIG9iamVjdHMgPG1hdGNoLW9iamVjdHM+YCBub3cKK2luY2x1ZGVzIHRoZSBzdGFydCwgZW5kLCBhbmQgdGhlIHBhcnQgb2YgdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQuCisoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDEzNTkyYCBhbmQgOmlzc3VlOmAxNzA4N2AuKQorCisKK3Jlc291cmNlCistLS0tLS0tLQorCitOZXcgOmZ1bmM6YHJlc291cmNlLnBybGltaXRgIGZ1bmN0aW9uIGFuZCBMaW51eCBzcGVjaWZpYyBjb25zdGFudHMuCisoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDE2NTk1YCBhbmQgOmlzc3VlOmAxOTMyNGAuKQorCisKK3NlbGVjdAorLS0tLS0tCisKKzpjbGFzczpgfnNlbGVjdC5lcG9sbGAgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgorV2hlbiB1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwgdGhlIDptZXRoOmB+c2VsZWN0LmVwb2xsLmNsb3NlYAorbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suICAoQ29udHJpYnV0ZWQKK2J5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNjQ4OGAuKQorCisKK3NoZWx2ZQorLS0tLS0tCisKKzpjbGFzczpgfnNoZWx2ZS5TaGVsZmAgaW5zdGFuY2VzIG1heSBub3cgYmUgdXNlZCBpbiA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50cywKK2FuZCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xvc2VkIGF0IHRoZSBlbmQgb2YgdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jay4KKyhDb250cmlidXRlZCBieSBGaWxpcCBHcnVzemN6ecWEc2tpIGluIDppc3N1ZTpgMTM4OTZgLikKKworCitzbXRwZAorLS0tLS0KKworVGhlIDpjbGFzczpgfnNtdHBkLlNNVFBTZXJ2ZXJgIGFuZCA6Y2xhc3M6YH5zbXRwZC5TTVRQQ2hhbm5lbGAgY2xhc3NlcyBub3cKK2FjY2VwdCBhICptYXAqIGtleXdvcmQgYXJndW1lbnQsIHdoaWNoIGlmIHNwZWNpZmllZCBpcyBwYXNzZWQgaW4gdG8KKzpjbGFzczpgYXN5bmNoYXQuYXN5bmNfY2hhdGAgYXMgaXRzICptYXAqIGFyZ3VtZW50LiAgVGhpcyBhbGxvd3MgYW4gYXBwbGljYXRpb24KK3RvIGF2b2lkIGFmZmVjdGluZyB0aGUgZ2xvYmFsIHNvY2tldCBtYXAuICAoQ29udHJpYnV0ZWQgYnkgVmluYXkgU2FqaXAgaW4KKzppc3N1ZTpgMTE5NTlgLikKKworCitzbXRwbGliCistLS0tLS0tCisKKzpleGM6YH5zbXRwbGliLlNNVFBFeGNlcHRpb25gIGlzIG5vdyBhIHN1YmNsYXNzIG9mIDpleGM6YE9TRXJyb3JgLCB3aGljaCBhbGxvd3MKK2JvdGggc29ja2V0IGxldmVsIGVycm9ycyBhbmQgU01UUCBwcm90b2NvbCBsZXZlbCBlcnJvcnMgdG8gYmUgY2F1Z2h0IGluIG9uZQordHJ5L2V4Y2VwdCBzdGF0ZW1lbnQgYnkgY29kZSB0aGF0IG9ubHkgY2FyZXMgd2hldGhlciBvciBub3QgYW4gZXJyb3Igb2NjdXJyZWQuCisoOmlzc3VlOmAyMTE4YCkuCisKKworc29ja2V0CistLS0tLS0KKworVGhlIHNvY2tldCBtb2R1bGUgbm93IHN1cHBvcnRzIHRoZSA6ZGF0YTpgfnNvY2tldC5DQU5fQkNNYCBwcm90b2NvbCBvbgorcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBpdC4gIChDb250cmlidXRlZCBieSBCcmlhbiBUaG9ybmUgaW4gOmlzc3VlOmAxNTM1OWAuKQorCitTb2NrZXQgb2JqZWN0cyBoYXZlIG5ldyBtZXRob2RzIHRvIGdldCBvciBzZXQgdGhlaXIgOnJlZjpgaW5oZXJpdGFibGUgZmxhZworPGZkX2luaGVyaXRhbmNlPmAsIDptZXRoOmB+c29ja2V0LnNvY2tldC5nZXRfaW5oZXJpdGFibGVgIGFuZAorOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNldF9pbmhlcml0YWJsZWAuCisKK1RoZSBgYHNvY2tldC5BRl8qYGAgYW5kIGBgc29ja2V0LlNPQ0tfKmBgIGNvbnN0YW50cyBhcmUgbm93IGVudW1lcmF0aW9uIHZhbHVlcwordXNpbmcgdGhlIG5ldyA6bW9kOmBlbnVtYCBtb2R1bGUuICBUaGlzIGFsbG93cyBtZWFuaW5nZnVsIG5hbWVzIHRvIGJlIHByaW50ZWQKK2R1cmluZyBkZWJ1Z2dpbmcsIGluc3RlYWQgb2YgaW50ZWdlciAibWFnaWMgbnVtYmVycyIuCisKK1RoZSA6ZGF0YTpgfnNvY2tldC5BRl9MSU5LYCBjb25zdGFudCBpcyBub3cgYXZhaWxhYmxlIG9uIEJTRCBhbmQgT1NYLgorCisKK3NxbGl0ZTMKKy0tLS0tLS0KKworQSBuZXcgYm9vbGVhbiBwYXJhbWV0ZXIsICp1cmkqLCB0byB0aGUgOmZ1bmM6YH5zcWxpdGUzLmNvbm5lY3RgIGZ1bmN0aW9uIGNhbgorYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSAqZGF0YWJhc2UqIHBhcmFtZXRlciBpcyBhIGBgdXJpYGAgKHNlZQordGhlIGBTUUxpdGUgVVJJIGRvY3VtZW50YXRpb24gPGh0dHA6Ly93d3cuc3FsaXRlLm9yZy91cmkuaHRtbD5gXykuCisoQ29udHJpYnV0ZWQgYnkgcG9xIGluIDppc3N1ZTpgMTM3NzNgLikKKworCitzc2wKKy0tLQorCisuLiBfd2hhdHNuZXctdGxzLTExLTEyOgorCis6ZGF0YTpgfnNzbC5QUk9UT0NPTF9UTFN2MV8xYCBhbmQgOmRhdGE6YH5zc2wuUFJPVE9DT0xfVExTdjFfMmAgKFRMU3YxLjEgYW5kCitUTFN2MS4yIHN1cHBvcnQpIGhhdmUgYmVlbiBhZGRlZDsgc3VwcG9ydCBmb3IgdGhlc2UgcHJvdG9jb2xzIGlzIG9ubHkgYXZhaWxhYmxlIGlmCitQeXRob24gaXMgbGlua2VkIHdpdGggT3BlblNTTCAxLjAuMSBvciBsYXRlci4gIChDb250cmlidXRlZCBieSBNaWNoZWxlIE9ycsO5IGFuZAorQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxNjY5MmApCisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgfnNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNgIHJldHVybnMKK2EgbmFtZWQgdHVwbGUgb2YgdGhlIHBhdGhzIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB0aGUKKzptZXRoOmB+c3NsLlNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYCBtZXRob2QgdXNlcyB0byBzZXQKK09wZW5TU0wncyBkZWZhdWx0IGBgY2FmaWxlYGAgYW5kIGBgY2FwYXRoYGAuICBUaGlzIGNhbiBiZSBhbiBhaWQgaW4KK2RlYnVnZ2luZyBkZWZhdWx0IHZlcmlmaWNhdGlvbiBpc3N1ZXMuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcworaW4gOmlzc3VlOmAxODE0M2AuKQorCis6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAgaGFzIGEgbmV3IG1ldGhvZCwKKzptZXRoOmB+c3NsLlNTTENvbnRleHQuY2VydF9zdG9yZV9zdGF0c2AsIHRoYXQgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIGxvYWRlZAorYGBYLjUwOWBgIGNlcnRzLCBgYFguNTA5IENBYGAgY2VydHMsIGFuZCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzIChgYGNybGBgXAorcyksIGFzIHdlbGwgYXMgYSA6bWV0aDpgfnNzbC5TU0xDb250ZXh0LmdldF9jYV9jZXJ0c2AgbWV0aG9kIHRoYXQgcmV0dXJucyBhCitsaXN0IG9mIHRoZSBsb2FkZWQgYGBDQWBgIGNlcnRpZmljYXRlcy4gIChDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluCithbmQgOmlzc3VlOmAxODE0N2AuKQorCitUd28gbmV3IHdpbmRvd3Mtb25seSBmdW5jdGlvbnMsIDpmdW5jOmB+c3NsLmVudW1fY2VydGlmaWNhdGVzYCBhbmQKKzpmdW5jOmB+c3NsLmVudW1fY3Jsc2AgcHJvdmlkZSB0aGUgYWJpbGl0eSB0byByZXRyaWV2ZSBjZXJ0aWZpY2F0ZXMsCitjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiwgYW5kIENSTHMgZnJvbSB0aGUgV2luZG93cyBjZXJ0IHN0b3JlLiAgKENvbnRyaWJ1dGVkCitieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTcxMzRgLikKKworU3VwcG9ydCBmb3Igc2VydmVyLXNpZGUgU05JIHVzaW5nIHRoZSBuZXcKKzptZXRoOmBzc2wuU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFja2AgbWV0aG9kLgorKENvbnRyaWJ1dGVkIGJ5IERhbmllbCBCbGFjayBpbiA6aXNzdWU6YDgxMDlgLikKKworCitzdGF0CistLS0tCisKK1RoZSA6bW9kOmBzdGF0YCBtb2R1bGUgaXMgbm93IGJhY2tlZCBieSBhIEMgaW1wbGVtZW50YXRpb24gaW4gOm1vZDpgX3N0YXRgLiBBIEMKK2ltcGxlbWVudGF0aW9uIGlzIHJlcXVpcmVkIGFzIG1vc3Qgb2YgdGhlIHZhbHVlcyBhcmVuJ3Qgc3RhbmRhcmRpemVkIGFuZAorcGxhdGZvcm0tZGVwZW5kZW50LiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxMTAxNmAuKQorCitUaGUgbW9kdWxlIHN1cHBvcnRzIG5ldyBmaWxlIHR5cGVzOiBkb29yLCBldmVudCBwb3J0IGFuZCB3aGl0ZW91dC4KKworCitzdHJ1Y3QKKy0tLS0tLQorCis6bW9kOmBzdHJ1Y3RgIG5vdyBzdXBwb3J0cyB0aGUgc3RyZWFtZWQgdW5wYWNraW5nIG9mIGEgYnVmZmVyIGNvbnRhaW5pbmcKK3JlcGVhdGVkIGluc3RhbmNlcyBvZiBhIGdpdmVuIGZvcm1hdCBvZiBkYXRhLiAgQm90aCBhIG1vZHVsZSBsZXZlbAorOm1vZDpgfnN0cnVjdC5pdGVyX3VucGFja2AgZnVuY3Rpb24gYW5kIGEgOm1ldGg6YHN0cnVjdC5TdHJ1Y3QuaXRlcl91bnBhY2tgCittZXRob2Qgb24gY29tcGlsZWQgZm9ybWF0cyBoYXZlIGJlZW4gYWRkZWQuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4KKzppc3N1ZTpgMTc4MDRgLikKKworCitzdWJwcm9jZXNzCistLS0tLS0tLS0tCisKKzpmdW5jOmB+c3VicHJvY2Vzcy5jaGVja19vdXRwdXRgIG5vdyBhY2NlcHRzIGFuICppbnB1dCogYXJndW1lbnQgdGhhdCBjYW4KK2JlIHVzZWQgdG8gcHJvdmlkZSB0aGUgY29udGVudHMgb2YgYGBzdGRpbmBgIGZvciB0aGUgY29tbWFuZCB0aGF0IGlzIHJ1bi4KKyhDb250cmlidXRlZCBieSBaYWNrIFdlaW5iZXJnIGluIDppc3N1ZTpgMTY2MjRgLikKKworCitzdW5hdQorLS0tLS0KKworVGhlIDptZXRoOmB+c3VuYXUuZ2V0cGFyYW1zYCBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuIGEKK3BsYWluIHR1cGxlLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE4OTAxYC4pCisKKzptZXRoOmBzdW5hdS5vcGVuYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCAoOmlzc3VlOmAxODg3OGApLgorCisKK3N5cworLS0tCisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgc3lzLmdldGFsbG9jYXRlZGJsb2Nrc2AgcmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YKK2Jsb2NrcyBhbGxvY2F0ZWQgYnkgdGhlIGludGVycHJldGVyIChpbiBDUHl0aG9uIHdpdGggdGhlIGRlZmF1bHQKK2BgLS13aXRoLXB5bWFsbG9jYGAgc2V0dGluZywgdGhpcyBpcyBhbGxvY2F0aW9ucyBtYWRlIHRocm91Z2ggdGhlCis6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgIEFQSSkuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHRyYWNraW5nIG1lbW9yeSBsZWFrcywKK2VzcGVjaWFsbHkgaWYgYXV0b21hdGVkIHZpYSBhIHRlc3Qgc3VpdGUuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UKK2luIDppc3N1ZTpgMTMzOTBgLikKKworCit0cmFjZWJhY2sKKy0tLS0tLS0tLQorCitBIG5ldyA6ZnVuYzpgdHJhY2ViYWNrLmNsZWFyX2ZyYW1lc2AgZnVuY3Rpb24gdGFrZXMgYSB0cmFjZWJhY2sgb2JqZWN0CithbmQgY2xlYXJzIHRoZSBsb2NhbCB2YXJpYWJsZXMgaW4gYWxsIG9mIHRoZSBmcmFtZXMgaXQgcmVmZXJlbmNlcywKK3JlZHVjaW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5IGNvbnN1bWVkICg6aXNzdWU6YDE1NjU1MjVgKS4KKworCit1cmxsaWIKKy0tLS0tLQorCis6bW9kOmB1cmxsaWIucmVxdWVzdGAgbm93IHN1cHBvcnRzIGBgZGF0YTpgYCBVUkxzIHZpYSB0aGUKKzpjbGFzczpgfnVybGxpYi5yZXF1ZXN0LkRhdGFIYW5kbGVyYCBjbGFzcy4gIChDb250cmlidXRlZCBieSBNYXRoaWFzIFBhbnplbmLDtmNrCitpbiA6aXNzdWU6YDE2NDIzYC4pCisKKwordW5pdHRlc3QKKy0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YH51bml0dGVzdC5UZXN0Q2FzZWAgY2xhc3MgaGFzIGEgbmV3IG1ldGhvZCwKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2Uuc3ViVGVzdGAsIHRoYXQgcHJvZHVjZXMgYSBjb250ZXh0IG1hbmFnZXIgd2hvc2UKKzprZXl3b3JkOmB3aXRoYCBibG9jayBiZWNvbWVzIGEgInN1Yi10ZXN0Ii4gIFRoaXMgY29udGV4dCBtYW5hZ2VyIGFsbG93cyBhIHRlc3QKK21ldGhvZCB0byBkeW5hbWljYWxseSBnZW5lcmF0ZSBzdWJ0ZXN0cyAgYnksIHNheSwgY2FsbGluZyB0aGUgYGBzdWJUZXN0YGAKK2NvbnRleHQgbWFuYWdlciBpbnNpZGUgYSBsb29wLiAgQSBzaW5nbGUgdGVzdCBtZXRob2QgY2FuIHRoZXJlYnkgcHJvZHVjZSBhbgoraW5kZWZpbml0ZSBudW1iZXIgb2Ygc2VwYXJhdGVseS1pZGVudGlmaWVkIGFuZCBzZXBhcmF0ZWx5LWNvdW50ZWQgdGVzdHMsIGFsbCBvZgord2hpY2ggd2lsbCBydW4gZXZlbiBpZiBvbmUgb3IgbW9yZSBvZiB0aGVtIGZhaWwuICBGb3IgZXhhbXBsZTo6CisKKyAgICBjbGFzcyBOdW1iZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIGRlZiB0ZXN0X2V2ZW4oc2VsZik6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg2KToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPTEpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorCit3aWxsIHJlc3VsdCBpbiBzaXggc3VidGVzdHMsIGVhY2ggaWRlbnRpZmllZCBpbiB0aGUgdW5pdHRlc3QgdmVyYm9zZSBvdXRwdXQKK3dpdGggYSBsYWJlbCBjb25zaXN0aW5nIG9mIHRoZSB2YXJpYWJsZSBuYW1lIGBgaWBgIGFuZCBhIHBhcnRpY3VsYXIgdmFsdWUgZm9yCit0aGF0IHZhcmlhYmxlIChgYGk9MGBgLCBgYGk9MWBgLCBldGMpLiAgU2VlIDpyZWY6YHN1YnRlc3RzYCBmb3IgdGhlIGZ1bGwKK3ZlcnNpb24gb2YgdGhpcyBleGFtcGxlLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTY5OTdgLikKKworOmZ1bmM6YHVuaXR0ZXN0Lm1haW5gIG5vdyBhY2NlcHRzIGFuIGl0ZXJhYmxlIG9mIHRlc3QgbmFtZXMgZm9yCisqZGVmYXVsdFRlc3QqLCB3aGVyZSBwcmV2aW91c2x5IGl0IG9ubHkgYWNjZXB0ZWQgYSBzaW5nbGUgdGVzdCBuYW1lIGFzIGEKK3N0cmluZy4gIChDb250cmlidXRlZCBieSBKeXJraSBQdWxsaWFpbmVuIGluIDppc3N1ZTpgMTUxMzJgLikKKworSWYgOmNsYXNzOmB+dW5pdHRlc3QuU2tpcFRlc3RgIGlzIHJhaXNlZCBkdXJpbmcgdGVzdCBkaXNjb3ZlcnkgKHRoYXQgaXMsIGF0IHRoZQorbW9kdWxlIGxldmVsIGluIHRoZSB0ZXN0IGZpbGUpLCBpdCBpcyBub3cgcmVwb3J0ZWQgYXMgYSBza2lwIGluc3RlYWQgb2YgYW4KK2Vycm9yLiAgKENvbnRyaWJ1dGVkIGJ5IFphY2ggV2FyZSBpbiA6aXNzdWU6YDE2OTM1YC4pCisKKzptZXRoOmB+dW5pdHRlc3QuVGVzdExvYWRlci5kaXNjb3ZlcmAgbm93IHNvcnRzIHRoZSBkaXNjb3ZlcmVkIGZpbGVzIHRvIHByb3ZpZGUKK2NvbnNpc3RlbnQgdGVzdCBvcmRlcmluZy4gIChDb250cmlidXRlZCBieSBNYXJ0aW4gTWVsaW4gYW5kIEplZmYgUmFtbmFuaSBpbgorOmlzc3VlOmAxNjcwOWAuKQorCisKK3ZlbnYKKy0tLS0KKworOm1vZDpgdmVudmAgbm93IGluY2x1ZGVzIGFjdGl2YXRpb24gc2NyaXB0cyBmb3IgdGhlIGBgY3NoYGAgYW5kIGBgZmlzaGBgCitzaGVsbHMgKENvbnRyaWJ1dGVkIGJ5IEFuZHJldyBTdmV0bG92IGluIDppc3N1ZTpgMTU0MTdgLikKKworCit3YXZlCistLS0tCisKK1RoZSA6bWV0aDpgfndhdmUuZ2V0cGFyYW1zYCBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuIGEKK3BsYWluIHR1cGxlLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE3NDg3YC4pCisKKzptZXRoOmB3YXZlLm9wZW5gIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLiAgKENvbnRyaWJ1dGVkCitieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzYxNmAuKQorCisKK3dlYWtyZWYKKy0tLS0tLS0KKworTmV3IDpjbGFzczpgfndlYWtyZWYuV2Vha01ldGhvZGAgY2xhc3Mgc2ltdWxhdGVzIHdlYWsgcmVmZXJlbmNlcyB0byBib3VuZAorbWV0aG9kcy4gKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTQ2MzFgLikKKworTmV3IDpjbGFzczpgfndlYWtyZWYuZmluYWxpemVgIGNsYXNzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sKK3RvIGJlIGludm9rZWQgd2hlbiBhbiBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQsIHdpdGhvdXQgbmVlZGluZyB0bworY2FyZWZ1bGx5IG1hbmFnZSB0aGUgbGlmZWN5Y2xlIG9mIHRoZSB3ZWFrIHJlZmVyZW5jZSBpdHNlbGYuIChDb250cmlidXRlZCBieQorUmljaGFyZCBPdWRrZXJrIGluIDppc3N1ZTpgMTU1MjhgKQorCitUaGUgY2FsbGJhY2ssIGlmIGFueSwgYXNzb2NpYXRlZCB3aXRoIGEgOmNsYXNzOmB+d2Vha3JlZi5yZWZgIGlzIG5vdworZXhwb3NlZCB2aWEgdGhlIDphdHRyOmB+d2Vha3JlZi5yZWYuX19jYWxsYmFja19fYCBhdHRyaWJ1dGUuICAoQ29udHJpYnV0ZWQKK2J5IE1hcmsgRGlja2luc29uIGluIDppc3N1ZTpgMTc2NDNgLikKKworCit4bWwuZXRyZWUKKy0tLS0tLS0tLQorCitBIG5ldyBwYXJzZXIsIDpjbGFzczpgfnhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQdWxsUGFyc2VyYCwgYWxsb3dzIGEKK25vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMgdG8gcGFyc2UgWE1MIGRvY3VtZW50cy4gIEFuIGV4YW1wbGUgY2FuIGJlCitzZWVuIGF0IDpyZWY6YGVsZW1lbnR0cmVlLXB1bGwtcGFyc2luZ2AuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZQorUGl0cm91IGluIDppc3N1ZTpgMTc3NDFgLikKKworVGhlIDptb2Q6YHhtbC5ldHJlZS5FbGVtZW50VHJlZWAgOmZ1bmM6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdgIGFuZAorOmZ1bmM6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdsaXN0YCBmdW5jdGlvbnMsIGFuZCB0aGUKKzpjbGFzczpgfnhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZWAKKzptZXRoOmB+eG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLndyaXRlYCBtZXRob2QsIG5vdyBoYXZlIGEKKypzaG9ydF9lbXB0eV9lbGVtZW50cyogOnJlZjpga2V5d29yZC1vbmx5IHBhcmFtZXRlciA8a2V5d29yZC1vbmx5X3BhcmFtZXRlcj5gCitwcm92aWRpbmcgY29udHJvbCBvdmVyIHdoZXRoZXIgZWxlbWVudHMgd2l0aCBubyBjb250ZW50IGFyZSB3cml0dGVuIGluCithYmJyZXZpYXRlZCAoYGA8dGFnIC8+YGApIG9yIGV4cGFuZGVkIChgYDx0YWc+PC90YWc+YGApIGZvcm0uICAoQ29udHJpYnV0ZWQgYnkKK0FyaWVsIFBvbGlhayBhbmQgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE0Mzc3YC4pCisKKworemlwZmlsZS5QeVppcGZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZCBhIGZpbHRlciBmdW5jdGlvbiB0byBpZ25vcmUgc29tZSBwYWNrYWdlcyAodGVzdHMgZm9yIGluc3RhbmNlKSwKKzptZXRoOmB+emlwZmlsZS5QeVppcEZpbGUud3JpdGVweWAuCisoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIFRpc21lciBpbiA6aXNzdWU6YDE5Mjc0YC4pCisKKworCitDUHl0aG9uIEltcGxlbWVudGF0aW9uIENoYW5nZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKy4uIF93aGF0c25ldy1wZXAtNDQ1OgorCitQRVAgNDQ1OiBDdXN0b21pemF0aW9uIG9mIENQeXRob24gTWVtb3J5IEFsbG9jYXRvcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NDVgIGFkZHMgbmV3IEMgbGV2ZWwgaW50ZXJmYWNlcyB0byBjdXN0b21pemUgbWVtb3J5IGFsbG9jYXRpb24gaW4KK3RoZSBDUHl0aG9uIGludGVycHJldGVyLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQ1YCAtLSBBZGQgbmV3IEFQSXMgdG8gY3VzdG9taXplIFB5dGhvbiBtZW1vcnkgYWxsb2NhdG9ycworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpY3RvciBTdGlubmVyLgorCisKKy4uIF93aGF0c25ldy1wZXAtNDQyOgorCitQRVAgNDQyOiBTYWZlIE9iamVjdCBGaW5hbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NDJgIHJlbW92ZXMgdGhlIGN1cnJlbnQgbGltaXRhdGlvbnMgYW5kIHF1aXJrcyBvZiBvYmplY3QgZmluYWxpemF0aW9uCitpbiBDUHl0aG9uLiBXaXRoIGl0LCBvYmplY3RzIHdpdGggOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMsIGFzIHdlbGwgYXMKK2dlbmVyYXRvcnMgd2l0aCA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlcywgY2FuIGJlIGZpbmFsaXplZCB3aGVuIHRoZXkgYXJlCitwYXJ0IG9mIGEgcmVmZXJlbmNlIGN5Y2xlLgorCitBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCBtb2R1bGUgZ2xvYmFscyBhcmUgbm8gbG9uZ2VyIGZvcmNpYmx5IHNldCB0bworOmNvbnN0OmBOb25lYCBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24gaW4gbW9zdCBjYXNlcywgaW5zdGVhZCByZWx5aW5nCitvbiB0aGUgbm9ybWFsIG9wZXJhdGlvbiBvZiB0aGUgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yLiAgVGhpcyBhdm9pZHMgYQord2hvbGUgY2xhc3Mgb2YgaW50ZXJwcmV0ZXItc2h1dGRvd24tdGltZSBlcnJvcnMsIHVzdWFsbHkgaW52b2x2aW5nCitgYF9fZGVsX19gYCBtZXRob2RzLCB0aGF0IGhhdmUgcGxhZ3VlZCBQeXRob24gc2luY2UgdGhlIGN5Y2xpYyBHQword2FzIGZpcnN0IGludHJvZHVjZWQuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NDJgIC0tIFNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbgorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IEFudG9pbmUgUGl0cm91LgorCisKKy4uIF93aGF0c25ldy1wZXAtNDU2OgorCitQRVAgNDU2OiBTZWN1cmUgYW5kIEludGVyY2hhbmdlYWJsZSBIYXNoIEFsZ29yaXRobQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDU2YCBmb2xsb3dzIHVwIG9uIGVhcmxpZXIgc2VjdXJpdHkgZml4IHdvcmsgZG9uZSBvbiBQeXRob24ncyBoYXNoCithbGdvcml0aG0gdG8gYWRkcmVzcyBjZXJ0YWluIERPUyBhdHRhY2tzIHRvIHdoaWNoIHB1YmxpYyBmYWNpbmcgQVBJcyBiYWNrZWQgYnkKK2RpY3Rpb25hcnkgbG9va3VwcyBtYXkgYmUgc3ViamVjdC4gIChTZWUgOmlzc3VlOmAxNDYyMWAgZm9yIHRoZSBzdGFydCBvZiB0aGUKK2N1cnJlbnQgcm91bmQgb2YgaW1wcm92ZW1lbnRzLikgIFRoZSBQRVAgdW5pZmllcyBDUHl0aG9uJ3MgaGFzaCBjb2RlIHRvIG1ha2UgaXQKK2Vhc2llciBmb3IgYSBwYWNrYWdlciB0byBzdWJzdGl0dXRlIGEgZGlmZmVyZW50IGhhc2ggYWxnb3JpdGhtLCBhbmQgc3dpdGNoZXMKK1B5dGhvbidzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdG8gYSBTaXBIYXNoIGltcGxlbWVudGF0aW9uIG9uIHBsYXRmb3JtcyB0aGF0CitoYXZlIGEgNjQgYml0IGRhdGEgdHlwZS4gIEFueSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlcyBpbiBjb21wYXJpc29uIHdpdGggdGhlCitvbGRlciBGTlYgYWxnb3JpdGhtIGFyZSB0cml2aWFsLgorCitUaGUgUEVQIGFkZHMgYWRkaXRpb25hbCBmaWVsZHMgdG8gdGhlIDpmdW5jOmBzeXMuaGFzaF9pbmZvYCBzdHJ1Y3Qgc2VxdWVuY2UgdG8KK2Rlc2NyaWJlIHRoZSBoYXNoIGFsZ29yaXRobSBpbiB1c2UgYnkgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgYmluYXJ5LiAgT3RoZXJ3aXNlLAordGhlIFBFUCBkb2VzIG5vdCBhbHRlciBhbnkgZXhpc3RpbmcgQ1B5dGhvbiBBUElzLgorCisKKy4uIF93aGF0c25ldy1wZXAtNDM2OgorCitQRVAgNDM2OiBBcmd1bWVudCBDbGluaWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiQXJndW1lbnQgQ2xpbmljIiAoOnBlcDpgNDM2YCkgaXMgbm93IHBhcnQgb2YgdGhlIENQeXRob24gYnVpbGQgcHJvY2VzcworYW5kIGNhbiBiZSB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGRlZmluaW5nIGFuZCBtYWludGFpbmluZworYWNjdXJhdGUgc2lnbmF0dXJlcyBmb3IgYnVpbHRpbnMgYW5kIHN0YW5kYXJkIGxpYnJhcnkgZXh0ZW5zaW9uIG1vZHVsZXMKK2ltcGxlbWVudGVkIGluIEMuCisKK1NvbWUgc3RhbmRhcmQgbGlicmFyeSBleHRlbnNpb24gbW9kdWxlcyBoYXZlIGJlZW4gY29udmVydGVkIHRvIHVzZSBBcmd1bWVudAorQ2xpbmljIGluIFB5dGhvbiAzLjQsIGFuZCA6bW9kOmBpbnNwZWN0YCBoYXMgYmVlbiB1cGRhdGVkIGFjY29yZGluZ2x5LgorCisuLiBub3RlOjoKKyAgIFRoZSBBcmd1bWVudCBDbGluaWMgUEVQIGlzIG5vdCBmdWxseSB1cCB0byBkYXRlIHdpdGggdGhlIHN0YXRlIG9mIHRoZQorICAgaW1wbGVtZW50YXRpb24uIFRoaXMgaGFzIGJlZW4gZGVlbWVkIGFjY2VwdGFibGUgYnkgdGhlIHJlbGVhc2UgbWFuYWdlcgorICAgYW5kIGNvcmUgZGV2ZWxvcG1lbnQgdGVhbSBpbiB0aGlzIGNhc2UsIGFzIEFyZ3VtZW50IENsaW5pYyB3aWxsIG5vdAorICAgYmUgbWFkZSBhdmFpbGFibGUgYXMgYSBwdWJsaWMgQVBJIGZvciB0aGlyZCBwYXJ0eSB1c2UgaW4gUHl0aG9uIDMuNC4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQzNmAgLS0gVGhlIEFyZ3VtZW50IENsaW5pYyBEU0wKKyAgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgTGFycnkgSGFzdGluZ3MuCisKKworT3RoZXIgQnVpbGQgYW5kIEMgQVBJIENoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIG5ldyA6YzpmdW5jOmBQeVR5cGVfR2V0U2xvdGAgZnVuY3Rpb24gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHN0YWJsZSBBQkksCisgIGFsbG93aW5nIHJldHJpZXZhbCBvZiBmdW5jdGlvbiBwb2ludGVycyBmcm9tIG5hbWVkIHR5cGUgc2xvdHMgd2hlbiB1c2luZworICB0aGUgbGltaXRlZCBBUEkuIChDb250cmlidXRlZCBieSBNYXJ0aW4gdm9uIEzDtndpcyBpbiA6aXNzdWU6YDE3MTYyYCkKKworKiBUaGUgbmV3IDpjOmZ1bmM6YFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmdgIHByZS1pbml0aWFsaXphdGlvbiBBUEkKKyAgYWxsb3dzIGFwcGxpY2F0aW9ucyBlbWJlZGRpbmcgdGhlIENQeXRob24gaW50ZXJwcmV0ZXIgdG8gcmVsaWFibHkgZm9yY2UKKyAgYSBwYXJ0aWN1bGFyIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGVyIGZvciB0aGUgc3RhbmRhcmQgc3RyZWFtcworICAoQ29udHJpYnV0ZWQgYnkgQmFzdGllbiBNb250YWduZSBhbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTYxMjlgKQorCisqIE1vc3QgUHl0aG9uIEMgQVBJcyB0aGF0IGRvbid0IG11dGF0ZSBzdHJpbmcgYXJndW1lbnRzIGFyZSBub3cgY29ycmVjdGx5CisgIG1hcmtlZCBhcyBhY2NlcHRpbmcgYGBjb25zdCBjaGFyICpgYCByYXRoZXIgdGhhbiBgYGNoYXIgKmBgIChDb250cmlidXRlZAorICBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTc3MjY3M2ApLgorCisqIE5ldyBzaGVsbCB2ZXJzaW9uIG9mIGBgcHl0aG9uLWNvbmZpZ2BgOyBjYW4gYmUgdXNlZCBldmVuIHdoZW4gYSBweXRob24KKyAgaW50ZXJwcmV0ZXIgaXMgbm90IGF2YWlsYWJsZSAoZm9yIGV4YW1wbGUsIGluIGNyb3NzIGNvbXBpbGF0aW9uIHNjZW5hcmlvcykuCisKKyogOmM6ZnVuYzpgUHlVbmljb2RlX0Zyb21Gb3JtYXRgIG5vdyBzdXBwb3J0cyB3aWR0aCBhbmQgcHJlY2lzaW9uCisgIHNwZWNpZmljYXRpb25zIGZvciBgYCVzYGAsIGBgJUFgYCwgYGAlVWBgLCBgYCVWYGAsIGBgJVNgYCwgYW5kIGBgJVJgYC4KKyAgKENvbnRyaWJ1dGVkIGJ5IFlzaiBSYXkgYW5kIFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgNzMzMGAuKQorCisKKworT3RoZXIgSW1wcm92ZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUYWItY29tcGxldGlvbiBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlci4KKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGFuZCDDiXJpYyBBcmF1am8gaW4gOmlzc3VlOmA1ODQ1YC4pCisKKyogSW52b2tpbmcgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB3aXRoIGBgLS12ZXJzaW9uYGAgbm93IG91dHB1dHMgdGhlIHZlcnNpb24gdG8KKyAgc3RhbmRhcmQgb3V0cHV0IGluc3RlYWQgb2Ygc3RhbmRhcmQgZXJyb3IgKDppc3N1ZTpgMTgzMzhgKS4gU2ltaWxhciBjaGFuZ2VzCisgIHdlcmUgbWFkZSB0byA6bW9kOmBhcmdwYXJzZWAgKDppc3N1ZTpgMTg5MjBgKSBhbmQgb3RoZXIgbW9kdWxlcyB0aGF0IGhhdmUKKyAgc2NyaXB0LWxpa2UgaW52b2NhdGlvbiBjYXBhYmlsaXRpZXMgKDppc3N1ZTpgMTg5MjJgKS4KKworKiBUaGUgQ1B5dGhvbiBXaW5kb3dzIGluc3RhbGxlciBub3cgYWRkcyBgYC5weWBgIHRvIHRoZSA6ZW52dmFyOmBQQVRIRVhUYAorICB2YXJpYWJsZSB3aGVuIGV4dGVuc2lvbnMgYXJlIHJlZ2lzdGVyZWQsIGFsbG93aW5nIHVzZXJzIHRvIHJ1biBhIHB5dGhvbgorICBzY3JpcHQgYXQgdGhlIHdpbmRvd3MgY29tbWFuZCBwcm9tcHQgYnkganVzdCB0eXBpbmcgaXRzIG5hbWUgd2l0aG91dCB0aGUKKyAgYGAucHlgYCBleHRlbnNpb24uICAoQ29udHJpYnV0ZWQgYnkgUGF1bCBNb29yZSBpbiA6aXNzdWU6YDE4NTY5YC4pCisKKyogQSBuZXcgYGBtYWtlYGAgdGFyZ2V0IGBjb3ZlcmFnZS1yZXBvcnQKKyAgPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGUvY292ZXJhZ2UuaHRtbCNtZWFzdXJpbmctY292ZXJhZ2Utb2YtYy1jb2RlLXdpdGgtZ2Nvdi1hbmQtbGNvdj5gXworICB3aWxsIGJ1aWxkIHB5dGhvbiwgcnVuIHRoZSB0ZXN0IHN1aXRlLCBhbmQgZ2VuZXJhdGUgYW4gSFRNTCBjb3ZlcmFnZSByZXBvcnQKKyAgZm9yIHRoZSBDIGNvZGViYXNlIHVzaW5nIGBgZ2NvdmBgIGFuZCBgbGNvdgorICA8aHR0cDovL2x0cC5zb3VyY2Vmb3JnZS5uZXQvY292ZXJhZ2UvbGNvdi5waHA+YF8uCisKKyogVGhlIGBgLVJgYCBvcHRpb24gdG8gdGhlIDpyZWY6YHB5dGhvbiByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgPHJlZ3J0ZXN0PmAgbm93CisgIGFsc28gY2hlY2tzIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBsZWFrcywgdXNpbmcKKyAgOmZ1bmM6YHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKWAuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4KKyAgOmlzc3VlOmAxMzM5MGApLgorCisqIGBgcHl0aG9uIC1tYGAgbm93IHdvcmtzIHdpdGggbmFtZXNwYWNlIHBhY2thZ2VzLgorCisqIFRoZSA6bW9kOmBzdGF0YCBtb2R1bGUgaXMgbm93IGltcGxlbWVudGVkIGluIEMsIHdoaWNoIG1lYW5zIGl0IGdldHMgdGhlCisgIHZhbHVlcyBmb3IgaXRzIGNvbnN0YW50cyBmcm9tIHRoZSBDIGhlYWRlciBmaWxlcywgaW5zdGVhZCBvZiBoYXZpbmcgdGhlCisgIHZhbHVlcyBoYXJkLWNvZGVkIGluIHRoZSBweXRob24gbW9kdWxlIGFzIHdhcyBwcmV2aW91c2x5IHRoZSBjYXNlLgorCisqIExvYWRpbmcgbXVsdGlwbGUgcHl0aG9uIG1vZHVsZXMgZnJvbSBhIHNpbmdsZSBPUyBtb2R1bGUgKGBgLnNvYGAsIGBgLmRsbGBgKQorICBub3cgd29ya3MgY29ycmVjdGx5IChwcmV2aW91c2x5IGl0IHNpbGVudGx5IHJldHVybmVkIHRoZSBmaXJzdCBweXRob24KKyAgbW9kdWxlIGluIHRoZSBmaWxlKS4gIChDb250cmlidXRlZCBieSBWw6FjbGF2IMWgbWlsYXVlciBpbiA6aXNzdWU6YDE2NDIxYC4pCisKKyogQSBuZXcgb3Bjb2RlLCA6b3Bjb2RlOmBMT0FEX0NMQVNTREVSRUZgLCBoYXMgYmVlbiBhZGRlZCB0byBmaXggYSBidWcgaW4gdGhlCisgIGxvYWRpbmcgb2YgZnJlZSB2YXJpYWJsZXMgaW4gY2xhc3MgYm9kaWVzIHRoYXQgY291bGQgYmUgdHJpZ2dlcmVkIGJ5IGNlcnRhaW4KKyAgdXNlcyBvZiA6cmVmOmBfX3ByZXBhcmVfXyA8cHJlcGFyZT5gLiAgKENvbnRyaWJ1dGVkIGJ5IEJlbmphbWluIFBldGVyc29uIGluCisgIDppc3N1ZTpgMTc4NTNgLikKKworCitTaWduaWZpY2FudCBPcHRpbWl6YXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIFVURi0zMiBkZWNvZGVyIGlzIG5vdyAzeCB0byA0eCBmYXN0ZXIuICAoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYQorICBpbiA6aXNzdWU6YDE0NjI1YC4pCisKKyogVGhlIGNvc3Qgb2YgaGFzaCBjb2xsaXNpb25zIGZvciBzZXRzIGlzIG5vdyByZWR1Y2VkLiAgRWFjaCBoYXNoIHRhYmxlCisgIHByb2JlIG5vdyBjaGVja3MgYSBzZXJpZXMgb2YgY29uc2VjdXRpdmUsIGFkamFjZW50IGtleS9oYXNoIHBhaXJzIGJlZm9yZQorICBjb250aW51aW5nIHRvIG1ha2UgcmFuZG9tIHByb2JlcyB0aHJvdWdoIHRoZSBoYXNoIHRhYmxlLiAgVGhpcyBleHBsb2l0cworICBjYWNoZSBsb2NhbGl0eSB0byBtYWtlIGNvbGxpc2lvbiByZXNvbHV0aW9uIGxlc3MgZXhwZW5zaXZlLgorICBUaGUgY29sbGlzaW9uIHJlc29sdXRpb24gc2NoZW1lIGNhbiBiZSBkZXNjcmliZWQgYXMgYSBoeWJyaWQgb2YgbGluZWFyCisgIHByb2JpbmcgYW5kIG9wZW4gYWRkcmVzc2luZy4gIFRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBsaW5lYXIgcHJvYmVzCisgIGRlZmF1bHRzIHRvIG5pbmUuICBUaGlzIGNhbiBiZSBjaGFuZ2VkIGF0IGNvbXBpbGUtdGltZSBieSBkZWZpbmluZworICBMSU5FQVJfUFJPQkVTIHRvIGJlIGFueSB2YWx1ZS4gIFNldCBMSU5FQVJfUFJPQkVTPTAgdG8gdHVybi1vZmYKKyAgbGluZWFyIHByb2JpbmcgZW50aXJlbHkuICAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIgaW4KKyAgOmlzc3VlOmAxODc3MWAuKQorCisqIFRoZSBpbnRlcnByZXRlciBzdGFydHMgYWJvdXQgMzAlIGZhc3Rlci4gQSBjb3VwbGUgb2YgbWVhc3VyZXMgbGVhZCB0byB0aGUKKyAgc3BlZWR1cC4gVGhlIGludGVycHJldGVyIGxvYWRzIGZld2VyIG1vZHVsZXMgb24gc3RhcnR1cCwgZS5nLiB0aGUgOm1vZDpgcmVgLAorICA6bW9kOmBjb2xsZWN0aW9uc2AgYW5kIDptb2Q6YGxvY2FsZWAgbW9kdWxlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBubworICBsb25nZXIgaW1wb3J0ZWQgYnkgZGVmYXVsdC4gVGhlIG1hcnNoYWwgbW9kdWxlIGhhcyBiZWVuIGltcHJvdmVkIHRvIGxvYWQKKyAgY29tcGlsZWQgUHl0aG9uIGNvZGUgZmFzdGVyLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91LCBDaHJpc3RpYW4KKyAgSGVpbWVzIGFuZCBWaWN0b3IgU3Rpbm5lciBpbiA6aXNzdWU6YDE5MjE5YCwgOmlzc3VlOmAxOTIxOGAsIDppc3N1ZTpgMTkyMDlgLAorICA6aXNzdWU6YDE5MjA1YCBhbmQgOmlzc3VlOmA5NTQ4YCkKKworKiA6Y2xhc3M6YGJ6Mi5CWjJGaWxlYCBpcyBub3cgYXMgZmFzdCBvciBmYXN0ZXIgdGhhbiB0aGUgUHl0aG9uMiB2ZXJzaW9uIGZvcgorICBtb3N0IGNhc2VzLiAgOmNsYXNzOmBsem1hLkxaTUFGaWxlYCBoYXMgYWxzbyBiZWVuIG9wdGltaXplZC4gIChDb250cmlidXRlZCBieQorICBTZXJoaXkgU3RvcmNoYWthIGFuZCBOYWRlZW0gVmF3ZGEgaW4gOmlzc3VlOmAxNjAzNGAuKQorCisqIDpmdW5jOmByYW5kb20uZ2V0cmFuZGJpdHNgIGlzIDIwJS00MCUgZmFzdGVyIGZvciBzbWFsbCBpbnRlZ2VycyAodGhlIG1vc3QKKyAgY29tbW9uIHVzZSBjYXNlKS4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTY2NzRgKS4KKworKiBCeSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBuZXcgc3RvcmFnZSBmb3JtYXQgZm9yIHN0cmluZ3MsIHBpY2tsaW5nIG9mCisgIHN0cmluZ3MgaXMgbm93IHNpZ25pZmljYW50bHkgZmFzdGVyLiAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGFuZAorICBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE1NTk2YC4pCisKKyogQSBwZXJmb3JtYW5jZSBpc3N1ZSBpbiA6bWV0aDpgaW8uRmlsZUlPLnJlYWRhbGxgIGhhcyBiZWVuIHNvbHZlZC4gIFRoaXMKKyAgcGFydGljdWxhcmx5IGFmZmVjdHMgV2luZG93cywgYW5kIHNpZ25pZmljYW50bHkgc3BlZWRzIHVwIHRoZSBjYXNlIG9mIHBpcGluZworICBzaWduaWZpY2FudCBhbW91bnRzIG9mIGRhdGEgdGhyb3VnaCA6bW9kOmBzdWJwcm9jZXNzYC4gIChDb250cmlidXRlZAorICBieSBSaWNoYXJkIE91ZGtlcmsgaW4gOmlzc3VlOmAxNTc1OGAuKQorCisqIDpmdW5jOmBodG1sLmVzY2FwZWAgaXMgbm93IDEweCBmYXN0ZXIuICAoQ29udHJpYnV0ZWQgYnkgTWF0dCBCcnlhbnQgaW4KKyAgOmlzc3VlOmAxODAyMGAuKQorCisKK0RlcHJlY2F0ZWQKKz09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGNvdmVycyB2YXJpb3VzIEFQSXMgYW5kIG90aGVyIGZlYXR1cmVzIHRoYXQgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQKK2luIFB5dGhvbiAzLjQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNSBvciBsYXRlci4gIEluIG1vc3QgKGJ1dCBub3QKK2FsbCkgY2FzZXMsIHVzaW5nIHRoZSBkZXByZWNhdGVkIEFQSXMgd2lsbCBwcm9kdWNlIGEgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYAord2hlbiB0aGUgaW50ZXJwcmV0ZXIgaXMgcnVuIHdpdGggZGVwcmVjYXRpb24gd2FybmluZ3MgZW5hYmxlZCAoZm9yIGV4YW1wbGUsIGJ5Cit1c2luZyBgYC1XZGBgKS4KKworCitEZXByZWNhdGVkIFB5dGhvbiBNb2R1bGVzLCBGdW5jdGlvbnMgYW5kIE1ldGhvZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIDptZXRoOmBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5pc2JqdW5rYCBhbmQKKyAgOm1ldGg6YGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmlzYnBvcHVsYXJgIHdlcmUgcmVtb3ZlZDogdXNlIGBgeCBpbiBzbS5ianVua2BgIGFuZAorICBgYHggaW4gc20uYnBvcHVsYXJgYCwgd2hlcmUgKnNtKiBpcyBhIDpjbGFzczpgfmRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyYCBvYmplY3QuCisKKyogOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uLiBVc2luZworICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX3RvX2xvYWRgIGFuZAorICA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIuaW5pdF9tb2R1bGVfYXR0cnNgIGFsbG93cyBzdWJjbGFzc2VzIG9mIGEgbG9hZGVyCisgIHRvIG1vcmUgZWFzaWx5IGN1c3RvbWl6ZSBtb2R1bGUgbG9hZGluZy4KKworKiBUaGUgOm1vZDpgaW1wYCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbi4gVG8ga2VlcCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgUHl0aG9uIDIvMyBjb2RlIGJhc2VzLCB0aGUgbW9kdWxlJ3MgcmVtb3ZhbCBpcyBjdXJyZW50bHkgbm90IHNjaGVkdWxlZC4KKworKiBUaGUgOm1vZDpgZm9ybWF0dGVyYCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbiBhbmQgaXMgc2xhdGVkIGZvciByZW1vdmFsCisgIGluIFB5dGhvbiAzLjYuCisKKyogTUQ1IGFzIGRlZmF1bHQgZGlnZXN0bW9kIGZvciA6bW9kOmBobWFjYCBpcyBkZXByZWNhdGVkLiBQeXRob24gMy42IHdpbGwKKyAgcmVxdWlyZSBhbiBleHBsaWNpdCBkaWdlc3QgbmFtZSBvciBjb25zdHJ1Y3RvciBhcyAqZGlnZXN0bW9kKiBhcmd1bWVudC4KKworKiBUaGUgaW50ZXJuYWwgYGBOZXRyY2BgIGNsYXNzIGluIHRoZSA6bW9kOmBmdHBsaWJgIG1vZHVsZSBoYXMgYmVlbiBkb2N1bWVudGVkCisgIGFzIGRlcHJlY2F0ZWQgaW4gaXRzIGRvY3N0cmluZyBmb3IgcXVpdGUgc29tZSB0aW1lLiAgSXQgbm93IGVtaXRzIGEKKyAgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBhbmQgd2lsbCBiZSByZW1vdmVkIGNvbXBsZXRlbHkgaW4gUHl0aG9uIDMuNS4KKworKiBUaGUgdW5kb2N1bWVudGVkICplbmR0aW1lKiBhcmd1bWVudCB0byA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi53YWl0YCBzaG91bGQKKyAgbm90IGhhdmUgYmVlbiBleHBvc2VkIGFuZCBpcyBob3BlZnVsbHkgbm90IGluIHVzZTsgaXQgaXMgZGVwcmVjYXRlZCBhbmQKKyAgd2lsbCBtb3N0bHkgbGlrZWx5IGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNS4KKworCitEZXByZWNhdGVkIEZ1bmN0aW9ucyBhbmQgVHlwZXMgaW4gdGhlIEMgQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1hYWDogTm9uZSBzbyBmYXIKKworCitEZXByZWNhdGVkIEZlYXR1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogUnVubmluZyA6cmVmOmBpZGxlYCB3aXRoIHRoZSBgYC1uYGAgZmxhZyAobm8gc3VicHJvY2VzcykgaXMgZGVwcmVjYXRlZC4KKyAgSG93ZXZlciwgdGhlIGZlYXR1cmUgd2lsbCBub3QgYmUgcmVtb3ZlZCB1bnRpbCA6aXNzdWU6YDE4ODIzYCBpcyByZXNvbHZlZC4KKworKiBUaGUgc2l0ZSBtb2R1bGUgYWRkaW5nIGEgInNpdGUtcHl0aG9uIiBkaXJlY3RvcnkgdG8gc3lzLnBhdGgsIGlmIGl0CisgIGV4aXN0cywgaXMgZGVwcmVjYXRlZCAoOmlzc3VlOmAxOTM3NWApLgorCisKKworUmVtb3ZlZAorPT09PT09PQorCisKK09wZXJhdGluZyBTeXN0ZW1zIE5vIExvbmdlciBTdXBwb3J0ZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9ydCBmb3IgdGhlIGZvbGxvd2luZyBvcGVyYXRpbmcgc3lzdGVtcyBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNvdXJjZQorYW5kIGJ1aWxkIHRvb2xzOgorCisqIE9TLzIgKDppc3N1ZTpgMTYxMzVgKS4KKyogV2luZG93cyAyMDAwIChjaGFuZ2VzZXQgZTUyZGYwNWI0OTZhKS4KKyogV2luZG93cyBzeXN0ZW1zIHdoZXJlIGBgQ09NU1BFQ2BgIHBvaW50cyB0byBgYGNvbW1hbmQuY29tYGAgKDppc3N1ZTpgMTQ0NzBgKS4KKyogVk1TICg6aXNzdWU6YDE2MTM2YCkuCisKKworQVBJIGFuZCBGZWF0dXJlIFJlbW92YWxzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBvYnNvbGV0ZSBhbmQgcHJldmlvdXNseSBkZXByZWNhdGVkIEFQSXMgYW5kIGZlYXR1cmVzIGhhdmUgYmVlbgorcmVtb3ZlZDoKKworKiBUaGUgdW5tYWludGFpbmVkIGBgTWlzYy9UZXh0TWF0ZWBgIGFuZCBgYE1pc2MvdmltYGAgZGlyZWN0b3JpZXMgaGF2ZSBiZWVuCisgIHJlbW92ZWQgKHNlZSB0aGUgYGRldmd1aWRlIDxodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlPmBfCisgIGZvciBzdWdnZXN0aW9ucyBvbiB3aGF0IHRvIHVzZSBpbnN0ZWFkKS4KKworKiBUaGUgYGBTT2BgIG1ha2VmaWxlIG1hY3JvIGlzIHJlbW92ZWQgKGl0IHdhcyByZXBsYWNlZCBieSB0aGUKKyAgYGBTSExJQl9TVUZGSVhgYCBhbmQgYGBFWFRfU1VGRklYYGAgbWFjcm9zKSAoOmlzc3VlOmAxNjc1NGApLgorCisqIFRoZSBgYFB5VGhyZWFkU3RhdGUudGlja19jb3VudGVyYGAgZmllbGQgaGFzIGJlZW4gcmVtb3ZlZDsgaXRzIHZhbHVlIGhhcworICBiZWVuIG1lYW5pbmdsZXNzIHNpbmNlIFB5dGhvbiAzLjIsIHdoZW4gdGhlICJuZXcgR0lMIiB3YXMgaW50cm9kdWNlZC4KKworKiBgYFB5TG9hZGVyYGAgYW5kIGBgUHlQeWNMb2FkZXJgYCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIDptb2Q6YGltcG9ydGxpYmAuCisgIChDb250cmlidXRlZCBieSBUYXJhcyBMeWFwdW4gaW4gOmlzc3VlOmAxNTY0MWAuKQorCisqIFRoZSAqc3RyaWN0KiBhcmd1bWVudCB0byA6Y2xhc3M6YH5odHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbmAgYW5kCisgIDpjbGFzczpgfmh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbmAgaGFzIGJlZW4gcmVtb3ZlZC4gIEhUVFAgMC45LXN0eWxlCisgICJTaW1wbGUgUmVzcG9uc2VzIiBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKworKiBUaGUgZGVwcmVjYXRlZCA6bW9kOmB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0YCBnZXR0ZXIgYW5kIHNldHRlciBtZXRob2RzCisgIGBgYWRkX2RhdGFgYCwgYGBoYXNfZGF0YWBgLCBgYGdldF9kYXRhYGAsIGBgZ2V0X3R5cGVgYCwgYGBnZXRfaG9zdGBgLAorICBgYGdldF9zZWxlY3RvcmBgLCBgYHNldF9wcm94eWBgLCBgYGdldF9vcmlnaW5fcmVxX2hvc3RgYCwgYW5kCisgIGBgaXNfdW52ZXJpZmlhYmxlYGAgaGF2ZSBiZWVuIHJlbW92ZWQgKHVzZSBkaXJlY3QgYXR0cmlidXRlIGFjY2VzcyBpbnN0ZWFkKS4KKworKiBTdXBwb3J0IGZvciBsb2FkaW5nIHRoZSBkZXByZWNhdGVkIGBgVFlQRV9JTlQ2NGBgIGhhcyBiZWVuIHJlbW92ZWQgZnJvbQorICA6bW9kOmBtYXJzaGFsYC4gIChDb250cmlidXRlZCBieSBEYW4gUml0aSBpbiA6aXNzdWU6YDE1NDgwYC4pCisKKyogOmNsYXNzOmBpbnNwZWN0LlNpZ25hdHVyZWA6IHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzIGFyZSBub3cgcmVxdWlyZWQKKyAgdG8gaGF2ZSBhIHZhbGlkIG5hbWUuCisKKyogOm1ldGg6YG9iamVjdC5fX2Zvcm1hdF9fYCBubyBsb25nZXIgYWNjZXB0cyBub24tZW1wdHkgZm9ybWF0IHN0cmluZ3MsIGl0IG5vdworICByYWlzZXMgYSA6ZXhjOmBUeXBlRXJyb3JgIGluc3RlYWQuICBVc2luZyBhIG5vbi1lbXB0eSBzdHJpbmcgaGFzIGJlZW4KKyAgZGVwcmVjYXRlZCBzaW5jZSBQeXRob24gMy4yLiAgVGhpcyBjaGFuZ2UgaGFzIGJlZW4gbWFkZSB0byBwcmV2ZW50IGEKKyAgc2l0dWF0aW9uIHdoZXJlIHByZXZpb3VzbHkgd29ya2luZyAoYnV0IGluY29ycmVjdCkgY29kZSB3b3VsZCBzdGFydCBmYWlsaW5nCisgIGlmIGFuIG9iamVjdCBnYWluZWQgYSBfX2Zvcm1hdF9fIG1ldGhvZCwgd2hpY2ggbWVhbnMgdGhhdCB5b3VyIGNvZGUgbWF5IG5vdworICByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgaWYgeW91IGFyZSB1c2luZyBhbiBgYCdzJ2BgIGZvcm1hdCBjb2RlIHdpdGggb2JqZWN0cworICB0aGF0IGRvIG5vdCBoYXZlIGEgX19mb3JtYXRfXyBtZXRob2QgdGhhdCBoYW5kbGVzIGl0LiAgU2VlIDppc3N1ZTpgNzk5NGAgZm9yCisgIGJhY2tncm91bmQuCisKKworQ29kZSBDbGVhbnVwcworLS0tLS0tLS0tLS0tLQorCisqIFRoZSB1bnVzZWQgYW5kIHVuZG9jdW1lbnRlZCBpbnRlcm5hbCBgYFNjYW5uZXJgYCBjbGFzcyBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAgdGhlIDptb2Q6YHB5ZG9jYCBtb2R1bGUuCisKKyogVGhlIHByaXZhdGUgYW5kIGVmZmVjdGl2ZWx5IHVudXNlZCBgYF9nZXN0YWx0YGAgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQsCisgIGFsb25nIHdpdGggdGhlIHByaXZhdGUgOm1vZDpgcGxhdGZvcm1gIGZ1bmN0aW9ucyBgYF9tYWNfdmVyX2xvb2t1cGBgLAorICBgYF9tYWNfdmVyX2dzdGFsdGBgLCBhbmQgYGBfYmNkMnN0cmBgLCB3aGljaCB3b3VsZCBvbmx5IGhhdmUgZXZlciBiZWVuIGNhbGxlZAorICBvbiBiYWRseSBicm9rZW4gT1NYIHN5c3RlbXMgKHNlZSA6aXNzdWU6YDE4MzkzYCkuCisKKworCitQb3J0aW5nIHRvIFB5dGhvbiAzLjQKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gbGlzdHMgcHJldmlvdXNseSBkZXNjcmliZWQgY2hhbmdlcyBhbmQgb3RoZXIgYnVnZml4ZXMKK3RoYXQgbWF5IHJlcXVpcmUgY2hhbmdlcyB0byB5b3VyIGNvZGUuCisKKworQ2hhbmdlcyBpbiAncHl0aG9uJyBjb21tYW5kIGJlaGF2aW9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBJbiBhIHBvc2l4IHNoZWxsLCBzZXR0aW5nIHRoZSA6ZW52dmFyOmBQQVRIYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0bworICBhbiBlbXB0eSB2YWx1ZSBpcyBlcXVpdmFsZW50IHRvIG5vdCBzZXR0aW5nIGl0IGF0IGFsbC4gIEhvd2V2ZXIsIHNldHRpbmcKKyAgOmVudnZhcjpgUFlUSE9OUEFUSGAgdG8gYW4gZW1wdHkgdmFsdWUgd2FzICpub3QqIGVxdWl2YWxlbnQgdG8gbm90IHNldHRpbmcgaXQKKyAgYXQgYWxsOiBzZXR0aW5nIDplbnZ2YXI6YFBZVEhPTlBBVEhgIHRvIGFuIGVtcHR5IHZhbHVlIHdhcyBlcXVpdmFsZW50IHRvCisgIHNldHRpbmcgaXQgdG8gYGAuYGAsIHdoaWNoIGxlYWRzIHRvIGNvbmZ1c2lvbiB3aGVuIHJlYXNvbmluZyBieSBhbmFsb2d5IHRvCisgIGhvdyA6ZW52dmFyOmBQQVRIYCB3b3Jrcy4gIFRoZSBiZWhhdmlvciBub3cgY29uZm9ybXMgdG8gdGhlIHBvc2l4IGNvbnZlbnRpb24KKyAgZm9yIDplbnZ2YXI6YFBBVEhgLgorCisqIFRoZSBbWCByZWZzLCBZIGJsb2Nrc10gb3V0cHV0IG9mIGEgZGVidWcgKGBgLS13aXRoLXB5ZGVidWdgYCkgYnVpbGQgb2YgdGhlCisgIENQeXRob24gaW50ZXJwcmV0ZXIgaXMgbm93IG9mZiBieSBkZWZhdWx0LiAgSXQgY2FuIGJlIHJlLWVuYWJsZWQgdXNpbmcgdGhlCisgIGBgLVggc2hvd3JlZmNvdW50YGAgb3B0aW9uLiAoQ29udHJpYnV0ZWQgYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMTczMjNgLikKKworCitDaGFuZ2VzIGluIHRoZSBQeXRob24gQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIEFCQ3MgZGVmaW5lZCBpbiA6bW9kOmBpbXBvcnRsaWIuYWJjYCBub3cgZWl0aGVyIHJhaXNlIHRoZSBhcHByb3ByaWF0ZQorICBleGNlcHRpb24gb3IgcmV0dXJuIGEgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgYmxpbmRseS4gVGhpcyB3aWxsIG9ubHkgYWZmZWN0IGNvZGUgY2FsbGluZworICA6ZnVuYzpgc3VwZXJgIGFuZCBmYWxsaW5nIHRocm91Z2ggYWxsIHRoZSB3YXkgdG8gdGhlIEFCQ3MuIEZvciBjb21wYXRpYmlsaXR5LAorICBjYXRjaCBib3RoIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIG9yIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gYXMgbmVlZGVkLgorCisqIFRoZSBtb2R1bGUgdHlwZSBub3cgaW5pdGlhbGl6ZXMgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AgYW5kIDphdHRyOmBfX2xvYWRlcl9fYAorICBhdHRyaWJ1dGVzIHRvIGBgTm9uZWBgIGJ5IGRlZmF1bHQuIFRvIGRldGVybWluZSBpZiB0aGVzZSBhdHRyaWJ1dGVzIHdlcmUgc2V0CisgIGluIGEgYmFja3dhcmRzLWNvbXBhdGlibGUgZmFzaGlvbiwgdXNlIGUuZy4KKyAgYGBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBub3QgTm9uZWBgLiAgKDppc3N1ZTpgMTcxMTVgLikKKworKiA6bWV0aDpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgIG5vdyBzZXRzIGBgX19sb2FkZXJfX2BgIGFuZAorICBgYF9fcGFja2FnZV9fYGAgdW5jb25kaXRpb25hbGx5IHRvIHByb3Blcmx5IHN1cHBvcnQgcmVsb2FkaW5nLiBJZiB0aGlzIGlzIG5vdAorICBkZXNpcmVkIHRoZW4geW91IHdpbGwgbmVlZCB0byBzZXQgdGhlc2UgYXR0cmlidXRlcyBtYW51YWxseS4gWW91IGNhbiB1c2UKKyAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV90b19sb2FkYCBmb3IgbW9kdWxlIG1hbmFnZW1lbnQuCisKKyogSW1wb3J0IG5vdyByZXNldHMgcmVsZXZhbnQgYXR0cmlidXRlcyAoZS5nLiBgYF9fbmFtZV9fYGAsIGBgX19sb2FkZXJfX2BgLAorICBgYF9fcGFja2FnZV9fYGAsIGBgX19maWxlX19gYCwgYGBfX2NhY2hlZF9fYGApIHVuY29uZGl0aW9uYWxseSB3aGVuIHJlbG9hZGluZy4KKworKiBGcm96ZW4gcGFja2FnZXMgbm8gbG9uZ2VyIHNldCBgYF9fcGF0aF9fYGAgdG8gYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHBhY2thZ2UKKyAgbmFtZSBidXQgYW4gZW1wdHkgbGlzdCBpbnN0ZWFkLiBEZXRlcm1pbmcgaWYgYSBtb2R1bGUgaXMgYSBwYWNrYWdlIHNob3VsZCBiZQorICBkb25lIHVzaW5nIGBgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpYGAuCisKKyogOmZ1bmM6YHB5X2NvbXBpbGUuY29tcGlsZWAgbm93IHJhaXNlcyA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGlmIHRoZSBmaWxlIHBhdGgKKyAgaXQgd291bGQgd3JpdGUgdG8gaXMgYSBzeW1saW5rIG9yIGEgbm9uLXJlZ3VsYXIgZmlsZS4gVGhpcyBpcyB0byBhY3QgYXMgYQorICB3YXJuaW5nIHRoYXQgaW1wb3J0IHdpbGwgb3ZlcndyaXRlIHRob3NlIGZpbGVzIHdpdGggYSByZWd1bGFyIGZpbGUgcmVnYXJkbGVzcworICBvZiB3aGF0IHR5cGUgb2YgZmlsZSBwYXRoIHRoZXkgd2VyZSBvcmlnaW5hbGx5LgorCisqIDptZXRoOmBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5nZXRfc291cmNlYCBubyBsb25nZXIgcmFpc2VzCisgIDpleGM6YEltcG9ydEVycm9yYCB3aGVuIHRoZSBzb3VyY2UgY29kZSBiZWluZyBsb2FkZWQgdHJpZ2dlcnMgYQorICA6ZXhjOmBTeW50YXhFcnJvcmAgb3IgOmV4YzpgVW5pY29kZURlY29kZUVycm9yYC4gQXMgOmV4YzpgSW1wb3J0RXJyb3JgIGlzCisgIG1lYW50IHRvIGJlIHJhaXNlZCBvbmx5IHdoZW4gc291cmNlIGNvZGUgY2Fubm90IGJlIGZvdW5kIGJ1dCBpdCBzaG91bGQsIGl0IHdhcworICBmZWx0IHRvIGJlIG92ZXItcmVhY2hpbmcvb3ZlcmxvYWRpbmcgb2YgdGhhdCBtZWFuaW5nIHdoZW4gdGhlIHNvdXJjZSBjb2RlIGlzCisgIGZvdW5kIGJ1dCBpbXByb3Blcmx5IHN0cnVjdHVyZWQuIElmIHlvdSB3ZXJlIGNhdGNoaW5nIEltcG9ydEVycm9yIGJlZm9yZSBhbmQKKyAgd2lzaCB0byBjb250aW51ZSB0byBpZ25vcmUgc3ludGF4IG9yIGRlY29kaW5nIGlzc3VlcywgY2F0Y2ggYWxsIHRocmVlCisgIGV4Y2VwdGlvbnMgbm93LgorCisqIDpmdW5jOmBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXJgIGFuZCA6ZnVuYzpgZnVuY3Rvb2xzLndyYXBzYCBub3cgY29ycmVjdGx5CisgIHNldCB0aGUgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSB0byB0aGUgZnVuY3Rpb24gYmVpbmcgd3JhcHBlZCwgZXZlbiBpZgorICB0aGF0IGZ1bmN0aW9uIGFsc28gaGFkIGl0cyBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIHNldC4gVGhpcyBtZWFucworICBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlcyBub3cgY29ycmVjdGx5IGxpbmsgYSBzdGFjayBvZiBkZWNvcmF0ZWQKKyAgZnVuY3Rpb25zIHJhdGhlciB0aGFuIGV2ZXJ5IGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgaW4gdGhlIGNoYWluCisgIHJlZmVycmluZyB0byB0aGUgaW5uZXJtb3N0IGZ1bmN0aW9uLiBJbnRyb3NwZWN0aW9uIGxpYnJhcmllcyB0aGF0CisgIGFzc3VtZWQgdGhlIHByZXZpb3VzIGJlaGF2aW91ciB3YXMgaW50ZW50aW9uYWwgY2FuIHVzZQorICA6ZnVuYzpgaW5zcGVjdC51bndyYXBgIHRvIGFjY2VzcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gdGhlIGNoYWluIHRoYXQgaGFzCisgIG5vIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUuCisKKyogOmNsYXNzOmBpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXJgIG5vdyBwYXNzZXMgb24gdGhlIGN1cnJlbnQgd29ya2luZworICBkaXJlY3RvcnkgdG8gb2JqZWN0cyBpbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIGZvciB0aGUgZW1wdHkgc3RyaW5nLiBUaGlzCisgIHJlc3VsdHMgaW4gOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCBuZXZlciBjb250YWluaW5nIGBgJydgYCwgdGh1cworICBpdGVyYXRpbmcgdGhyb3VnaCA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIGJhc2VkIG9uIDpkYXRhOmBzeXMucGF0aGAKKyAgd2lsbCBub3QgZmluZCBhbGwga2V5cy4gQSBtb2R1bGUncyBgYF9fZmlsZV9fYGAgd2hlbiBpbXBvcnRlZCBpbiB0aGUgY3VycmVudAorICB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIGFsc28gbm93IGhhdmUgYW4gYWJzb2x1dGUgcGF0aCwgaW5jbHVkaW5nIHdoZW4gdXNpbmcKKyAgYGAtbWBgIHdpdGggdGhlIGludGVycHJldGVyICh0aGlzIGRvZXMgbm90IGluZmx1ZW5jZSB3aGVuIHRoZSBwYXRoIHRvIGEgZmlsZQorICBpcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZSkuCisKKyogVGhlIHJlbW92YWwgb2YgdGhlICpzdHJpY3QqIGFyZ3VtZW50IHRvIDpjbGFzczpgfmh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uYAorICBhbmQgOmNsYXNzOmB+aHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uYCBjaGFuZ2VzIHRoZSBtZWFuaW5nIG9mIHRoZQorICByZW1haW5pbmcgYXJndW1lbnRzIGlmIHlvdSBhcmUgc3BlY2lmeWluZyB0aGVtIHBvc2l0aW9uYWxseSByYXRoZXIgdGhhbiBieQorICBrZXl3b3JkLiAgSWYgeW91J3ZlIGJlZW4gcGF5aW5nIGF0dGVudGlvbiB0byBkZXByZWNhdGlvbiB3YXJuaW5ncyB5b3VyIGNvZGUKKyAgc2hvdWxkIGFscmVhZHkgYmUgc3BlY2lmeWluZyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgdmlhIGtleXdvcmRzLgorCisqIFN0cmluZ3MgYmV0d2VlbiBgYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgLi4uYGAgc3RhdGVtZW50cyBub3cgKmFsd2F5cyogcmFpc2UKKyAgYSA6ZXhjOmBTeW50YXhFcnJvcmAuICBQcmV2aW91c2x5IGlmIHRoZXJlIHdhcyBubyBsZWFkaW5nIGRvY3N0cmluZywgYW4KKyAgaW50ZXJzdGl0aWFsIHN0cmluZyB3b3VsZCBzb21ldGltZXMgYmUgaWdub3JlZC4gIFRoaXMgYnJpbmdzIENQeXRob24gaW50bworICBjb21wbGlhbmNlIHdpdGggdGhlIGxhbmd1YWdlIHNwZWM7IEp5dGhvbiBhbmQgUHlQeSBhbHJlYWR5IHdlcmUuCisgICg6aXNzdWU6YDE3NDM0YCkuCisKKyogOm1ldGg6YHNzbC5TU0xTb2NrZXQuZ2V0cGVlcmNlcnRgIGFuZCA6bWV0aDpgc3NsLlNTTFNvY2tldC5kb19oYW5kc2hha2VgCisgIG5vdyByYWlzZSBhbiA6ZXhjOmBPU0Vycm9yYCB3aXRoIGBgRU5PVENPTk5gYCB3aGVuIHRoZSBgYFNTTFNvY2tldGBgIGlzIG5vdAorICBjb25uZWN0ZWQsIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGJlaGF2aW9yIG9mIHJhaXNpbmcgYW4KKyAgOmV4YzpgQXR0cmlidXRFcnJvcmAuICBJbiBhZGRpdGlvbiwgOm1ldGg6YH5zc2wuU1NMU29ja2V0LmdldHBlZXJjZXJ0YAorICB3aWxsIHJhaXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAgaWYgdGhlIGhhbmRzaGFrZSBoYXMgbm90IHlldCBiZWVuIGRvbmUuCisKKyogOmZ1bmM6YGJhc2U2NC5iMzJkZWNvZGVgIG5vdyByYWlzZXMgYSA6ZXhjOmBiaW5hc2NpaS5FcnJvcmAgd2hlbiB0aGUKKyAgaW5wdXQgc3RyaW5nIGNvbnRhaW5zIG5vbi1iMzItYWxwaGFiZXQgY2hhcmFjdGVycywgaW5zdGVhZCBvZiBhCisgIDpleGM6YFR5cGVFcnJvcmAuICBUaGlzIHBhcnRpY3VsYXIgOmV4YzpgVHlwZUVycm9yYCB3YXMgbWlzc2VkIHdoZW4gdGhlIG90aGVyCisgIDpleGM6YFR5cGVFcnJvcmBcIHMgd2VyZSBjb252ZXJ0ZWQuICAoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbgorICA6aXNzdWU6YDE4MDExYC4pICBOb3RlOiB0aGlzIGNoYW5nZSB3YXMgYWxzbyBpbmFkdmVydGVudGx5IGFwcGxpZWQgaW4gUHl0aG9uCisgIDMuMy4zLgorCisqIFRoZSA6YXR0cjpgfmNnaS5GaWVsZFN0b3JhZ2UuZmlsZWAgYXR0cmlidXRlIGlzIG5vdyBhdXRvbWF0aWNhbGx5IGNsb3NlZCB3aGVuCisgIHRoZSBjcmVhdGluZyA6Y2xhc3M6YGNnaS5GaWVsZFN0b3JhZ2VgIGluc3RhbmNlIGlzIGdhcmJhZ2UgY29sbGVjdGVkLiBJZiB5b3UKKyAgd2VyZSBwdWxsaW5nIHRoZSBmaWxlIG9iamVjdCBvdXQgc2VwYXJhdGVseSBmcm9tIHRoZSA6Y2xhc3M6YGNnaS5GaWVsZFN0b3JhZ2VgCisgIGluc3RhbmNlIGFuZCBub3Qga2VlcGluZyB0aGUgaW5zdGFuY2UgYWxpdmUsIHRoZW4geW91IHNob3VsZCBlaXRoZXIgc3RvcmUgdGhlCisgIGVudGlyZSA6Y2xhc3M6YGNnaS5GaWVsZFN0b3JhZ2VgIGluc3RhbmNlIG9yIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlCisgIGJlZm9yZSB0aGUgOmNsYXNzOmBjZ2kuRmllbGRTdG9yYWdlYCBpbnN0YW5jZSBpcyBnYXJiYWdlIGNvbGxlY3RlZC4KKworKiBDYWxsaW5nIGBgcmVhZGBgIG9yIGBgd3JpdGVgYCBvbiBhIGNsb3NlZCBTU0wgc29ja2V0IG5vdyByYWlzZXMgYW4KKyAgaW5mb3JtYXRpdmUgOmV4YzpgVmFsdWVFcnJvcmAgcmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzIG1vcmUgbXlzdGVyaW91cworICA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAgKDppc3N1ZTpgOTE3N2ApLgorCisqIDptZXRoOmBzbGljZS5pbmRpY2VzYCBubyBsb25nZXIgcHJvZHVjZXMgYW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgZm9yIGh1Z2UKKyAgdmFsdWVzLiAgQXMgYSBjb25zZXF1ZW5jZSBvZiB0aGlzIGZpeCwgOm1ldGg6YHNsaWNlLmluZGljZXNgIG5vdyByYWlzZXMgYQorICA6ZXhjOmBWYWx1ZUVycm9yYCBpZiBnaXZlbiBhIG5lZ2F0aXZlIGxlbmd0aDsgcHJldmlvdXNseSBpdCByZXR1cm5lZCBub25zZW5zZQorICB2YWx1ZXMgKDppc3N1ZTpgMTQ3OTRgKS4KKworKiBUaGUgOmNsYXNzOmBjb21wbGV4YCBjb25zdHJ1Y3RvciwgdW5saWtlIHRoZSA6bW9kOmBjbWF0aGAgZnVuY3Rpb25zLCB3YXMKKyAgaW5jb3JyZWN0bHkgYWNjZXB0aW5nIDpjbGFzczpgZmxvYXRgIHZhbHVlcyBpZiBhbiBvYmplY3QncyBgYF9fY29tcGxleF9fYGAKKyAgc3BlY2lhbCBtZXRob2QgcmV0dXJuZWQgb25lLiAgVGhpcyBub3cgcmFpc2VzIGEgOmV4YzpgVHlwZUVycm9yYC4KKyAgKDppc3N1ZTpgMTYyOTBgLikKKworKiBUaGUgOmNsYXNzOmBpbnRgIGNvbnN0cnVjdG9yIGluIDMuMiBhbmQgMy4zIGVycm9uZW91c2x5IGFjY2VwdHMgOmNsYXNzOmBmbG9hdGAKKyAgdmFsdWVzIGZvciB0aGUgKmJhc2UqIHBhcmFtZXRlci4gIEl0IGlzIHVubGlrZWx5IGFueW9uZSB3YXMgZG9pbmcgdGhpcywgYnV0CisgIGlmIHNvLCBpdCB3aWxsIG5vdyByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgKDppc3N1ZTpgMTY3NzJgKS4KKworKiBEZWZhdWx0cyBmb3Iga2V5d29yZC1vbmx5IGFyZ3VtZW50cyBhcmUgbm93IGV2YWx1YXRlZCAqYWZ0ZXIqIGRlZmF1bHRzIGZvcgorICByZWd1bGFyIGtleXdvcmQgYXJndW1lbnRzLCBpbnN0ZWFkIG9mIGJlZm9yZS4gIEhvcGVmdWxseSBubyBvbmUgd3JvdGUgYW55CisgIGNvZGUgdGhhdCBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBidWdneSBiZWhhdmlvciAoOmlzc3VlOmAxNjk2N2ApLgorCisqIFN0YWxlIHRocmVhZCBzdGF0ZXMgYXJlIG5vdyBjbGVhcmVkIGFmdGVyIDpmdW5jOmB+b3MuZm9ya2AuICBUaGlzIG1heSBjYXVzZQorICBzb21lIHN5c3RlbSByZXNvdXJjZXMgdG8gYmUgcmVsZWFzZWQgdGhhdCBwcmV2aW91c2x5IHdlcmUgaW5jb3JyZWN0bHkga2VwdAorICBwZXJwZXR1YWxseSBhbGl2ZSAoZm9yIGV4YW1wbGUsIGRhdGFiYXNlIGNvbm5lY3Rpb25zIGtlcHQgaW4gdGhyZWFkLWxvY2FsCisgIHN0b3JhZ2UpLiAgKDppc3N1ZTpgMTcwOTRgLikKKworCitDaGFuZ2VzIGluIHRoZSBDIEFQSQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiA6YzpmdW5jOmBQeUV2YWxfRXZhbEZyYW1lRXhgLCA6YzpmdW5jOmBQeU9iamVjdF9SZXByYCwgYW5kCisgIDpjOmZ1bmM6YFB5T2JqZWN0X1N0cmAsIGFsb25nIHdpdGggc29tZSBvdGhlciBpbnRlcm5hbCBDIEFQSXMsIG5vdyBpbmNsdWRlCisgIGEgZGVidWdnaW5nIGFzc2VydGlvbiB0aGF0IGVuc3VyZXMgdGhleSBhcmUgbm90IHVzZWQgaW4gc2l0dWF0aW9ucyB3aGVyZQorICB0aGV5IG1heSBzaWxlbnRseSBkaXNjYXJkIGEgY3VycmVudGx5IGFjdGl2ZSBleGNlcHRpb24uIEluIGNhc2VzIHdoZXJlCisgIGRpc2NhcmRpbmcgdGhlIGFjdGl2ZSBleGNlcHRpb24gaXMgZXhwZWN0ZWQgYW5kIGRlc2lyZWQgKGZvciBleGFtcGxlLAorICBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQgbG9jYWxseSB3aXRoIDpjOmZ1bmM6YFB5RXJyX0ZldGNoYCBvcgorICBpcyBiZWluZyBkZWxpYmVyYXRlbHkgcmVwbGFjZWQgd2l0aCBhIGRpZmZlcmVudCBleGNlcHRpb24pLCBhbiBleHBsaWNpdAorICA6YzpmdW5jOmBQeUVycl9DbGVhcmAgY2FsbCB3aWxsIGJlIG5lZWRlZCB0byBhdm9pZCB0cmlnZ2VyaW5nIHRoZQorICBhc3NlcnRpb24gd2hlbiBpbnZva2luZyB0aGVzZSBvcGVyYXRpb25zIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQKKyAgcnVubmluZyBhZ2FpbnN0IGEgdmVyc2lvbiBvZiBQeXRob24gdGhhdCBpcyBjb21waWxlZCB3aXRoIGFzc2VydGlvbnMKKyAgZW5hYmxlZC4KKworKiA6YzpmdW5jOmBQeUVycl9TZXRJbXBvcnRFcnJvcmAgbm93IHNldHMgOmV4YzpgVHlwZUVycm9yYCB3aGVuIGl0cyAqKm1zZyoqCisgIGFyZ3VtZW50IGlzIG5vdCBzZXQuIFByZXZpb3VzbHkgb25seSBgYE5VTExgYCB3YXMgcmV0dXJuZWQgd2l0aCBubyBleGNlcHRpb24KKyAgc2V0LgorCisqIFRoZSByZXN1bHQgb2YgdGhlIDpjOmRhdGE6YFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXJgIGNhbGxiYWNrIG11c3QKKyAgbm93IGJlIGEgc3RyaW5nIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgIG9yCisgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLCBvciAqTlVMTCogaWYgYW4gZXJyb3Igb2NjdXJyZWQsIGluc3RlYWQgb2YgYQorICBzdHJpbmcgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX01hbGxvY2Agb3IgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AuCisKKyogOmM6ZnVuYzpgUHlUaHJlYWRfc2V0X2tleV92YWx1ZWAgbm93IGFsd2F5cyBzZXQgdGhlIHZhbHVlLiBJbiBQeXRob24KKyAgMy4zLCB0aGUgZnVuY3Rpb24gZGlkIG5vdGhpbmcgaWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cyAoaWYgdGhlIGN1cnJlbnQKKyAgdmFsdWUgaXMgYSBub24tTlVMTCBwb2ludGVyKS4KKworKiBUaGUgYGBmX3RzdGF0ZWBgICh0aHJlYWQgc3RhdGUpIGZpZWxkIG9mIHRoZSA6Yzp0eXBlOmBQeUZyYW1lT2JqZWN0YAorICBzdHJ1Y3R1cmUgaGFzIGJlZW4gcmVtb3ZlZCB0byBmaXggYSBidWc6IHNlZSA6aXNzdWU6YDE0NDMyYCBmb3IgdGhlCisgIHJhdGlvbmFsZS4KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QgYi9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CmluZGV4IGJjMTIwNmIuLjI5OTAyZTQgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QKKysrIGIvRG9jL3doYXRzbmV3L2luZGV4LnJzdApAQCAtMTEsNiArMTEsNyBAQAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDIKIAorICAgMy40LnJzdAogICAgMy4zLnJzdAogICAgMy4yLnJzdAogICAgMy4xLnJzdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24tYXN0LmggYi9JbmNsdWRlL1B5dGhvbi1hc3QuaAppbmRleCAwMGU5MmQwLi42N2Q2NzdiIDEwMDY0NAotLS0gYS9JbmNsdWRlL1B5dGhvbi1hc3QuaAorKysgYi9JbmNsdWRlL1B5dGhvbi1hc3QuaApAQCAtMTgyLDggKzE4Miw5IEBACiAgICAgICAgICAgICAgICAgICBTZXRDb21wX2tpbmQ9OSwgRGljdENvbXBfa2luZD0xMCwgR2VuZXJhdG9yRXhwX2tpbmQ9MTEsCiAgICAgICAgICAgICAgICAgICBZaWVsZF9raW5kPTEyLCBZaWVsZEZyb21fa2luZD0xMywgQ29tcGFyZV9raW5kPTE0LAogICAgICAgICAgICAgICAgICAgQ2FsbF9raW5kPTE1LCBOdW1fa2luZD0xNiwgU3RyX2tpbmQ9MTcsIEJ5dGVzX2tpbmQ9MTgsCi0gICAgICAgICAgICAgICAgICBFbGxpcHNpc19raW5kPTE5LCBBdHRyaWJ1dGVfa2luZD0yMCwgU3Vic2NyaXB0X2tpbmQ9MjEsCi0gICAgICAgICAgICAgICAgICBTdGFycmVkX2tpbmQ9MjIsIE5hbWVfa2luZD0yMywgTGlzdF9raW5kPTI0LCBUdXBsZV9raW5kPTI1fTsKKyAgICAgICAgICAgICAgICAgIE5hbWVDb25zdGFudF9raW5kPTE5LCBFbGxpcHNpc19raW5kPTIwLCBBdHRyaWJ1dGVfa2luZD0yMSwKKyAgICAgICAgICAgICAgICAgIFN1YnNjcmlwdF9raW5kPTIyLCBTdGFycmVkX2tpbmQ9MjMsIE5hbWVfa2luZD0yNCwKKyAgICAgICAgICAgICAgICAgIExpc3Rfa2luZD0yNSwgVHVwbGVfa2luZD0yNn07CiBzdHJ1Y3QgX2V4cHIgewogICAgIGVudW0gX2V4cHJfa2luZCBraW5kOwogICAgIHVuaW9uIHsKQEAgLTI3OSw2ICsyODAsMTAgQEAKICAgICAgICAgfSBCeXRlczsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzaW5nbGV0b24gdmFsdWU7CisgICAgICAgIH0gTmFtZUNvbnN0YW50OworICAgICAgICAKKyAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CiAgICAgICAgICAgICBpZGVudGlmaWVyIGF0dHI7CiAgICAgICAgICAgICBleHByX2NvbnRleHRfdHkgY3R4OwpAQCAtMzU5LDE4ICszNjQsMTggQEAKIAogc3RydWN0IF9hcmd1bWVudHMgewogICAgIGFzZGxfc2VxICphcmdzOwotICAgIGlkZW50aWZpZXIgdmFyYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbjsKKyAgICBhcmdfdHkgdmFyYXJnOwogICAgIGFzZGxfc2VxICprd29ubHlhcmdzOwotICAgIGlkZW50aWZpZXIga3dhcmc7Ci0gICAgZXhwcl90eSBrd2FyZ2Fubm90YXRpb247Ci0gICAgYXNkbF9zZXEgKmRlZmF1bHRzOwogICAgIGFzZGxfc2VxICprd19kZWZhdWx0czsKKyAgICBhcmdfdHkga3dhcmc7CisgICAgYXNkbF9zZXEgKmRlZmF1bHRzOwogfTsKIAogc3RydWN0IF9hcmcgewogICAgIGlkZW50aWZpZXIgYXJnOwogICAgIGV4cHJfdHkgYW5ub3RhdGlvbjsKKyAgICBpbnQgbGluZW5vOworICAgIGludCBjb2xfb2Zmc2V0OwogfTsKIAogc3RydWN0IF9rZXl3b3JkIHsKQEAgLTUwOSw2ICs1MTQsOSBAQAogZXhwcl90eSBfUHlfU3RyKHN0cmluZyBzLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBCeXRlcyhhMCwgYTEsIGEyLCBhMykgX1B5X0J5dGVzKGEwLCBhMSwgYTIsIGEzKQogZXhwcl90eSBfUHlfQnl0ZXMoYnl0ZXMgcywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKKyNkZWZpbmUgTmFtZUNvbnN0YW50KGEwLCBhMSwgYTIsIGEzKSBfUHlfTmFtZUNvbnN0YW50KGEwLCBhMSwgYTIsIGEzKQorZXhwcl90eSBfUHlfTmFtZUNvbnN0YW50KHNpbmdsZXRvbiB2YWx1ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAqYXJlbmEpOwogI2RlZmluZSBFbGxpcHNpcyhhMCwgYTEsIGEyKSBfUHlfRWxsaXBzaXMoYTAsIGExLCBhMikKIGV4cHJfdHkgX1B5X0VsbGlwc2lzKGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CiAjZGVmaW5lIEF0dHJpYnV0ZShhMCwgYTEsIGEyLCBhMywgYTQsIGE1KSBfUHlfQXR0cmlidXRlKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUpCkBAIC01NDIsMTEgKzU1MCwxMCBAQAogZXhjZXB0aGFuZGxlcl90eSBfUHlfRXhjZXB0SGFuZGxlcihleHByX3R5IHR5cGUsIGlkZW50aWZpZXIgbmFtZSwgYXNkbF9zZXEgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJlbmEpOwotI2RlZmluZSBhcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkgX1B5X2FyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KQotYXJndW1lbnRzX3R5IF9QeV9hcmd1bWVudHMoYXNkbF9zZXEgKiBhcmdzLCBpZGVudGlmaWVyIHZhcmFyZywgZXhwcl90eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiwgYXNkbF9zZXEgKiBrd29ubHlhcmdzLCBpZGVudGlmaWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZywgZXhwcl90eSBrd2FyZ2Fubm90YXRpb24sIGFzZGxfc2VxICogZGVmYXVsdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqIGt3X2RlZmF1bHRzLCBQeUFyZW5hICphcmVuYSk7CisjZGVmaW5lIGFyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikgX1B5X2FyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikKK2FyZ3VtZW50c190eSBfUHlfYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgYXJnX3R5IHZhcmFyZywgYXNkbF9zZXEgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncywgYXNkbF9zZXEgKiBrd19kZWZhdWx0cywgYXJnX3R5IGt3YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKiBkZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBhcmcoYTAsIGExLCBhMikgX1B5X2FyZyhhMCwgYTEsIGEyKQogYXJnX3R5IF9QeV9hcmcoaWRlbnRpZmllciBhcmcsIGV4cHJfdHkgYW5ub3RhdGlvbiwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBrZXl3b3JkKGEwLCBhMSwgYTIpIF9QeV9rZXl3b3JkKGEwLCBhMSwgYTIpCmRpZmYgLS1naXQgYS9JbmNsdWRlL1B5dGhvbi5oIGIvSW5jbHVkZS9QeXRob24uaAppbmRleCBhNzhhNzIxLi4yZGQ4MjkwIDEwMDY0NAotLS0gYS9JbmNsdWRlL1B5dGhvbi5oCisrKyBiL0luY2x1ZGUvUHl0aG9uLmgKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRlICJvYmppbXBsLmgiCiAjaW5jbHVkZSAidHlwZXNsb3RzLmgiCisjaW5jbHVkZSAicHloYXNoLmgiCiAKICNpbmNsdWRlICJweWRlYnVnLmgiCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYWJzdHJhY3QuaCBiL0luY2x1ZGUvYWJzdHJhY3QuaAppbmRleCBjOTYyNGYzLi40YmM5OTUyYSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hYnN0cmFjdC5oCisrKyBiL0luY2x1ZGUvYWJzdHJhY3QuaApAQCAtMTQ0LDcgKzE0NCw3IEBACiAKICAgICAgLyogSW1wbGVtZW50ZWQgZWxzZXdoZXJlOgogCi0gICAgIGludCBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUpOworICAgICBpbnQgUHlPYmplY3RfSGFzQXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lKTsKIAogICAgICBSZXR1cm5zIDEgaWYgbyBoYXMgdGhlIGF0dHJpYnV0ZSBhdHRyX25hbWUsIGFuZCAwIG90aGVyd2lzZS4KICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbjoKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAgICAgIC8qIEltcGxlbWVudGVkIGVsc2V3aGVyZToKIAotICAgICBQeU9iamVjdCogUHlPYmplY3RfR2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqYXR0cl9uYW1lKTsKKyAgICAgUHlPYmplY3QqIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSk7CiAKICAgICAgUmV0cmlldmUgYW4gYXR0cmlidXRlZCBuYW1lZCBhdHRyX25hbWUgZm9ybSBvYmplY3Qgby4KICAgICAgUmV0dXJucyB0aGUgYXR0cmlidXRlIHZhbHVlIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS4KQEAgLTE4OSw3ICsxODksNyBAQAogCiAgICAgIC8qIEltcGxlbWVudGVkIGVsc2V3aGVyZToKIAotICAgICBpbnQgUHlPYmplY3RfU2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqYXR0cl9uYW1lLCBQeU9iamVjdCAqdik7CisgICAgIGludCBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUsIFB5T2JqZWN0ICp2KTsKIAogICAgICBTZXQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZWQgYXR0cl9uYW1lLCBmb3Igb2JqZWN0IG8sCiAgICAgIHRvIHRoZSB2YWx1ZSwgdi4gUmV0dXJucyAtMSBvbiBmYWlsdXJlLiAgVGhpcyBpcwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKICAgICAgLyogaW1wbGVtZW50ZWQgYXMgYSBtYWNybzoKIAotICAgICBpbnQgUHlPYmplY3RfRGVsQXR0clN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqYXR0cl9uYW1lKTsKKyAgICAgaW50IFB5T2JqZWN0X0RlbEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSk7CiAKICAgICAgRGVsZXRlIGF0dHJpYnV0ZSBuYW1lZCBhdHRyX25hbWUsIGZvciBvYmplY3Qgby4gUmV0dXJucwogICAgICAtMSBvbiBmYWlsdXJlLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uCkBAIC0yODQsNyArMjg0LDcgQEAKICAgICAgICAqLwogCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5T2JqZWN0ICpjYWxsYWJsZV9vYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiAgICAgICAgLyoKICAgICAgQ2FsbCBhIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QsIGNhbGxhYmxlX29iamVjdCwgd2l0aCBhCkBAIC0yOTYsOCArMjk2LDkgQEAKICAgICAgICAqLwogCiAKLSAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjaGFyICptZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogICAgICAgIC8qCiAgICAgIENhbGwgdGhlIG1ldGhvZCBuYW1lZCBtIG9mIG9iamVjdCBvIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YKQEAgLTMwOCw4ICszMDksOSBAQAogICAgICBQeXRob24gZXhwcmVzc2lvbjogby5tZXRob2QoYXJncykuCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sIF9QeV9JZGVudGlmaWVyICptZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKFB5T2JqZWN0ICpvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X0lkZW50aWZpZXIgKm1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogICAgICAgIC8qCiAgICAgICAgICBMaWtlIFB5T2JqZWN0X0NhbGxNZXRob2QsIGJ1dCBleHBlY3QgYSBfUHlfSWRlbnRpZmllciogYXMgdGhlCkBAIC0zMTcsMTMgKzMxOSwxNiBAQAogICAgICAgICovCiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUKFB5T2JqZWN0ICpjYWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQoUHlPYmplY3QgKm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9JZGVudGlmaWVyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoUHlPYmplY3QgKmNhbGxhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKQEAgLTMzOSwxMSArMzQ0LDEwIEBACiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhQeU9iamVjdCAqbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWV0aG9kLCAuLi4pOwotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKFB5T2JqZWN0ICpvLAorICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKFB5T2JqZWN0ICpvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX1B5X0lkZW50aWZpZXIgKm1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKIAotCiAgICAgICAgLyoKICAgICAgQ2FsbCB0aGUgbWV0aG9kIG5hbWVkIG0gb2Ygb2JqZWN0IG8gd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZgogICAgICBDIGFyZ3VtZW50cy4gIFRoZSBDIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgYXMgUHlPYmplY3QgKgpAQCAtNDA0LDcgKzQwOCw4IEBACiAjZGVmaW5lIFB5T2JqZWN0X0xlbmd0aCBQeU9iamVjdF9TaXplCiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKLSAgICAgUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCk7CisgICAgIFB5QVBJX0ZVTkMoaW50KSBfUHlPYmplY3RfSGFzTGVuKFB5T2JqZWN0ICpvKTsKKyAgICAgUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90KTsKICNlbmRpZgogCiAgICAgICAgLyoKQEAgLTQyOSw3ICs0MzQsNyBAQAogICAgICBzdGF0ZW1lbnQ6IG9ba2V5XT12LgogICAgICAgICovCiAKLSAgICAgUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSk7CisgICAgIFB5QVBJX0ZVTkMoaW50KSBQeU9iamVjdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpOwogCiAgICAgICAgLyoKICAgICAgUmVtb3ZlIHRoZSBtYXBwaW5nIGZvciBvYmplY3QsIGtleSwgZnJvbSB0aGUgb2JqZWN0ICpvLgpAQCAtMTE1MSw3ICsxMTU2LDcgQEAKIAogICAgICAvKiBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvOgogCi0gICAgIGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KTsKKyAgICAgaW50IFB5TWFwcGluZ19EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpOwogCiAgICAgIFJlbW92ZSB0aGUgbWFwcGluZyBmb3Igb2JqZWN0LCBrZXksIGZyb20gdGhlIG9iamVjdCAqby4KICAgICAgUmV0dXJucyAtMSBvbiBmYWlsdXJlLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCkBAIC0xMTY5LDcgKzExNzQsNyBAQAogICAgICAgICovCiAjZGVmaW5lIFB5TWFwcGluZ19EZWxJdGVtKE8sSykgUHlPYmplY3RfRGVsSXRlbSgoTyksKEspKQogCi0gICAgIFB5QVBJX0ZVTkMoaW50KSBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBQeUFQSV9GVU5DKGludCkgUHlNYXBwaW5nX0hhc0tleVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KTsKIAogICAgICAgIC8qCiAgICAgIE9uIHN1Y2Nlc3MsIHJldHVybiAxIGlmIHRoZSBtYXBwaW5nIG9iamVjdCBoYXMgdGhlIGtleSwga2V5LApAQCAtMTIxMyw3ICsxMjE4LDggQEAKIAogICAgICAgICovCiAKLSAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KTsKKyAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXkpOwogCiAgICAgICAgLyoKICAgICAgUmV0dXJuIGVsZW1lbnQgb2YgbyBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QsIGtleSwgb3IgTlVMTApAQCAtMTIyMSw3ICsxMjI3LDcgQEAKICAgICAgb1trZXldLgogICAgICAgICovCiAKLSAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXksCisgICAgIFB5QVBJX0ZVTkMoaW50KSBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUpOwogCiAgICAgICAgLyoKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYXNkbC5oIGIvSW5jbHVkZS9hc2RsLmgKaW5kZXggNmJmNjE4Zi4uNDk1MTUzYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hc2RsLmgKKysrIGIvSW5jbHVkZS9hc2RsLmgKQEAgLTUsNiArNSw3IEBACiB0eXBlZGVmIFB5T2JqZWN0ICogc3RyaW5nOwogdHlwZWRlZiBQeU9iamVjdCAqIGJ5dGVzOwogdHlwZWRlZiBQeU9iamVjdCAqIG9iamVjdDsKK3R5cGVkZWYgUHlPYmplY3QgKiBzaW5nbGV0b247CiAKIC8qIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IGFzZGxfYy5weSB3YXMgY29tcGxldGVseQogICAgaW5kZXBlbmRlbnQgb2YgUHl0aG9uLCBidXQgaXQgaXMgYSBnb2FsIHRoZSByZXF1aXJlcyB0b28gbXVjaCB3b3JrCkBAIC0yNCwxNyArMjUsMTkgQEAKICAgICBpbnQgZWxlbWVudHNbMV07CiB9IGFzZGxfaW50X3NlcTsKIAotYXNkbF9zZXEgKmFzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKTsKLWFzZGxfaW50X3NlcSAqYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKTsKK2FzZGxfc2VxICpfUHlfYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOworYXNkbF9pbnRfc2VxICpfUHlfYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKTsKIAogI2RlZmluZSBhc2RsX3NlcV9HRVQoUywgSSkgKFMpLT5lbGVtZW50c1soSSldCiAjZGVmaW5lIGFzZGxfc2VxX0xFTihTKSAoKFMpID09IE5VTEwgPyAwIDogKFMpLT5zaXplKQogI2lmZGVmIFB5X0RFQlVHCi0jZGVmaW5lIGFzZGxfc2VxX1NFVChTLCBJLCBWKSB7IFwKLSAgICAgICAgaW50IF9hc2RsX2kgPSAoSSk7IFwKLSAgICAgICAgYXNzZXJ0KChTKSAmJiBfYXNkbF9pIDwgKFMpLT5zaXplKTsgXAorI2RlZmluZSBhc2RsX3NlcV9TRVQoUywgSSwgVikgXAorICAgIGRvIHsgXAorICAgICAgICBQeV9zc2l6ZV90IF9hc2RsX2kgPSAoSSk7IFwKKyAgICAgICAgYXNzZXJ0KChTKSAhPSBOVUxMKTsgXAorICAgICAgICBhc3NlcnQoX2FzZGxfaSA8IChTKS0+c2l6ZSk7IFwKICAgICAgICAgKFMpLT5lbGVtZW50c1tfYXNkbF9pXSA9IChWKTsgXAotfQorICAgIH0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBhc2RsX3NlcV9TRVQoUywgSSwgVikgKFMpLT5lbGVtZW50c1tJXSA9IChWKQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2FzdC5oIGIvSW5jbHVkZS9hc3QuaAppbmRleCAwNTVlOGRjLi42YThjODE2IDEwMDY0NAotLS0gYS9JbmNsdWRlL2FzdC5oCisrKyBiL0luY2x1ZGUvYXN0LmgKQEAgLTEwLDYgKzEwLDExIEBACiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgUHlBcmVuYSAqYXJlbmEpOworUHlBUElfRlVOQyhtb2RfdHkpIFB5QVNUX0Zyb21Ob2RlT2JqZWN0KAorICAgIGNvbnN0IG5vZGUgKm4sCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgUHlBcmVuYSAqYXJlbmEpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvYnl0ZWFycmF5b2JqZWN0LmggYi9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oCmluZGV4IGVjY2Q0NGMuLmE3NTdiODggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYnl0ZWFycmF5b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaApAQCAtMjIsMTAgKzIyLDExIEBACiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfVkFSX0hFQUQKKyAgICBQeV9zc2l6ZV90IG9iX2FsbG9jOyAvKiBIb3cgbWFueSBieXRlcyBhbGxvY2F0ZWQgaW4gb2JfYnl0ZXMgKi8KKyAgICBjaGFyICpvYl9ieXRlczsgICAgICAvKiBQaHlzaWNhbCBiYWNraW5nIGJ1ZmZlciAqLworICAgIGNoYXIgKm9iX3N0YXJ0OyAgICAgIC8qIExvZ2ljYWwgc3RhcnQgaW5zaWRlIG9iX2J5dGVzICovCiAgICAgLyogWFhYKG5ub3J3aXR6KTogc2hvdWxkIG9iX2V4cG9ydHMgYmUgUHlfc3NpemVfdD8gKi8KLSAgICBpbnQgb2JfZXhwb3J0czsgLyogaG93IG1hbnkgYnVmZmVyIGV4cG9ydHMgKi8KLSAgICBQeV9zc2l6ZV90IG9iX2FsbG9jOyAvKiBIb3cgbWFueSBieXRlcyBhbGxvY2F0ZWQgKi8KLSAgICBjaGFyICpvYl9ieXRlczsKKyAgICBpbnQgb2JfZXhwb3J0czsgICAgICAvKiBIb3cgbWFueSBidWZmZXIgZXhwb3J0cyAqLwogfSBQeUJ5dGVBcnJheU9iamVjdDsKICNlbmRpZgogCkBAIC00OSw4ICs1MCw4IEBACiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSBcCiAgICAgKGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSksIFwKLSAgICAgUHlfU0laRShzZWxmKSA/ICgoUHlCeXRlQXJyYXlPYmplY3QgKikoc2VsZikpLT5vYl9ieXRlcyA6IF9QeUJ5dGVBcnJheV9lbXB0eV9zdHJpbmcpCi0jZGVmaW5lIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpICAoYXNzZXJ0KFB5Qnl0ZUFycmF5X0NoZWNrKHNlbGYpKSxQeV9TSVpFKHNlbGYpKQorICAgICBQeV9TSVpFKHNlbGYpID8gKChQeUJ5dGVBcnJheU9iamVjdCAqKShzZWxmKSktPm9iX3N0YXJ0IDogX1B5Qnl0ZUFycmF5X2VtcHR5X3N0cmluZykKKyNkZWZpbmUgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikgKGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSksIFB5X1NJWkUoc2VsZikpCiAKIFB5QVBJX0RBVEEoY2hhcikgX1B5Qnl0ZUFycmF5X2VtcHR5X3N0cmluZ1tdOwogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2J5dGVzb2JqZWN0LmggYi9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKaW5kZXggZDdjN2ZmZC4uMGVlOGQzNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ieXRlc29iamVjdC5oCisrKyBiL0luY2x1ZGUvYnl0ZXNvYmplY3QuaApAQCAtODYsMTEgKzg2LDExIEBACiAgICAwLXRlcm1pbmF0ZWQgKHBhc3NpbmcgYSBzdHJpbmcgd2l0aCBlbWJlZGRlZCBOVUxMIGNoYXJhY3RlcnMgd2lsbAogICAgY2F1c2UgYW4gZXhjZXB0aW9uKS4gICovCiBQeUFQSV9GVU5DKGludCkgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9iaiwJLyogc3RyaW5nIG9yIFVuaWNvZGUgb2JqZWN0ICovCi0gICAgcmVnaXN0ZXIgY2hhciAqKnMsCQkvKiBwb2ludGVyIHRvIGJ1ZmZlciB2YXJpYWJsZSAqLwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgKmxlbgkvKiBwb2ludGVyIHRvIGxlbmd0aCB2YXJpYWJsZSBvciBOVUxMCi0JCQkJICAgKG9ubHkgcG9zc2libGUgZm9yIDAtdGVybWluYXRlZAotCQkJCSAgIHN0cmluZ3MpICovCisgICAgUHlPYmplY3QgKm9iaiwgICAgICAvKiBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QgKi8KKyAgICBjaGFyICoqcywgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYnVmZmVyIHZhcmlhYmxlICovCisgICAgUHlfc3NpemVfdCAqbGVuICAgICAvKiBwb2ludGVyIHRvIGxlbmd0aCB2YXJpYWJsZSBvciBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSBwb3NzaWJsZSBmb3IgMC10ZXJtaW5hdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzKSAqLwogICAgICk7CiAKIC8qIFVzaW5nIHRoZSBjdXJyZW50IGxvY2FsZSwgaW5zZXJ0IHRoZSB0aG91c2FuZHMgZ3JvdXBpbmcKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29kZWNzLmggYi9JbmNsdWRlL2NvZGVjcy5oCmluZGV4IDBkOWU5YjQuLjYxMTk2NGMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY29kZWNzLmgKKysrIGIvSW5jbHVkZS9jb2RlY3MuaApAQCAtOTQsNiArOTQsNTMgQEAKICAgICAgICBjb25zdCBjaGFyICplcnJvcnMKICAgICAgICApOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCisvKiBUZXh0IGNvZGVjIHNwZWNpZmljIGVuY29kaW5nIGFuZCBkZWNvZGluZyBBUEkuCisKKyAgIENoZWNrcyB0aGUgZW5jb2RpbmcgYWdhaW5zdCBhIGxpc3Qgb2YgY29kZWNzIHdoaWNoIGRvIG5vdAorICAgaW1wbGVtZW50IGEgc3RyPC0+Ynl0ZXMgZW5jb2RpbmcgYmVmb3JlIGF0dGVtcHRpbmcgdGhlCisgICBvcGVyYXRpb24uCisKKyAgIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQVBJcyBhcmUgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QKKyAgIGJlIHVzZWQgaW4gUHl0aG9uIEMgZXh0ZW5zaW9ucy4KKworICAgWFhYIChuY29naGxhbik6IHNob3VsZCB3ZSBtYWtlIHRoZXNlLCBvciBzb21ldGhpbmcgbGlrZSB0aGVtLCBwdWJsaWMKKyAgIGluIFB5dGhvbiAzLjUrPworCisgKi8KK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5Q29kZWNfTG9va3VwVGV4dEVuY29kaW5nKAorICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgIGNvbnN0IGNoYXIgKmFsdGVybmF0ZV9jb21tYW5kCisgICAgICAgKTsKKworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlDb2RlY19FbmNvZGVUZXh0KAorICAgICAgIFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgY29uc3QgY2hhciAqZXJyb3JzCisgICAgICAgKTsKKworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlDb2RlY19EZWNvZGVUZXh0KAorICAgICAgIFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgY29uc3QgY2hhciAqZXJyb3JzCisgICAgICAgKTsKKworLyogVGhlc2UgdHdvIGFyZW4ndCBhY3R1YWxseSB0ZXh0IGVuY29kaW5nIHNwZWNpZmljLCBidXQgX2lvLlRleHRJT1dyYXBwZXIKKyAqIGlzIHRoZSBvbmx5IGN1cnJlbnQgQVBJIGNvbnN1bWVyLgorICovCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUNvZGVjSW5mb19HZXRJbmNyZW1lbnRhbERlY29kZXIoCisgICAgICAgUHlPYmplY3QgKmNvZGVjX2luZm8sCisgICAgICAgY29uc3QgY2hhciAqZXJyb3JzCisgICAgICAgKTsKKworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlDb2RlY0luZm9fR2V0SW5jcmVtZW50YWxFbmNvZGVyKAorICAgICAgIFB5T2JqZWN0ICpjb2RlY19pbmZvLAorICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycworICAgICAgICk7CisjZW5kaWYKKworCisKIC8qIC0tLSBDb2RlYyBMb29rdXAgQVBJcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKIAogICAgQWxsIEFQSXMgcmV0dXJuIGEgY29kZWMgb2JqZWN0IHdpdGggaW5jcmVtZW50ZWQgcmVmY291bnQgYW5kIGFyZQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jb21waWxlLmggYi9JbmNsdWRlL2NvbXBpbGUuaAppbmRleCBhYzI2MzZkLi5jNjY1MGQ3IDEwMDY0NAotLS0gYS9JbmNsdWRlL2NvbXBpbGUuaAorKysgYi9JbmNsdWRlL2NvbXBpbGUuaApAQCAtMzYsMTEgKzM2LDI3IEBACiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBpbnQgb3B0aW1pemUsCiAgICAgUHlBcmVuYSAqYXJlbmEpOwotUHlBUElfRlVOQyhQeUZ1dHVyZUZlYXR1cmVzICopIFB5RnV0dXJlX0Zyb21BU1Qoc3RydWN0IF9tb2QgKiwgY29uc3QgY2hhciAqKTsKK1B5QVBJX0ZVTkMoUHlDb2RlT2JqZWN0ICopIFB5QVNUX0NvbXBpbGVPYmplY3QoCisgICAgc3RydWN0IF9tb2QgKm1vZCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBpbnQgb3B0aW1pemUsCisgICAgUHlBcmVuYSAqYXJlbmEpOworUHlBUElfRlVOQyhQeUZ1dHVyZUZlYXR1cmVzICopIFB5RnV0dXJlX0Zyb21BU1QoCisgICAgc3RydWN0IF9tb2QgKiBtb2QsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgICk7CitQeUFQSV9GVU5DKFB5RnV0dXJlRmVhdHVyZXMgKikgUHlGdXR1cmVfRnJvbUFTVE9iamVjdCgKKyAgICBzdHJ1Y3QgX21vZCAqIG1vZCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUKKyAgICApOwogCiAvKiBfUHlfTWFuZ2xlIGlzIGRlZmluZWQgaW4gY29tcGlsZS5jICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgX1B5X01hbmdsZShQeU9iamVjdCAqcCwgUHlPYmplY3QgKm5hbWUpOwogCisjZGVmaW5lIFBZX0lOVkFMSURfU1RBQ0tfRUZGRUNUIElOVF9NQVgKK1B5QVBJX0ZVTkMoaW50KSBQeUNvbXBpbGVfT3Bjb2RlU3RhY2tFZmZlY3QoaW50IG9wY29kZSwgaW50IG9wYXJnKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZGljdG9iamVjdC5oIGIvSW5jbHVkZS9kaWN0b2JqZWN0LmgKaW5kZXggZDg5YWFjOC4uZWYxMjJiZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9kaWN0b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9kaWN0b2JqZWN0LmgKQEAgLTUzLDYgKzUzLDEwIEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeURpY3RfR2V0SXRlbUlkV2l0aEVycm9yKFB5T2JqZWN0ICpkcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9QeV9JZGVudGlmaWVyICprZXkpOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfU2V0RGVmYXVsdCgKKyAgICBQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICpkZWZhdWx0b2JqKTsKKyNlbmRpZgogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9TZXRJdGVtKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKml0ZW0pOwogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9EZWxJdGVtKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RGljdF9DbGVhcihQeU9iamVjdCAqbXApOwpAQCAtMTA5LDkgKzExMywxMSBAQAogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpkcCwgY29uc3QgY2hhciAqa2V5KTsKIAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIF9QeURpY3RfRGVsSXRlbUlkKFB5T2JqZWN0ICptcCwgc3RydWN0IF9QeV9JZGVudGlmaWVyICprZXkpOworUHlBUElfRlVOQyh2b2lkKSBfUHlEaWN0X0RlYnVnTWFsbG9jU3RhdHMoRklMRSAqb3V0KTsKKwogaW50IF9QeU9iamVjdERpY3RfU2V0SXRlbShQeVR5cGVPYmplY3QgKnRwLCBQeU9iamVjdCAqKmRpY3RwdHIsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqdmFsdWUpOwogUHlPYmplY3QgKl9QeURpY3RfTG9hZEdsb2JhbChQeURpY3RPYmplY3QgKiwgUHlEaWN0T2JqZWN0ICosIFB5T2JqZWN0ICopOwotUHlBUElfRlVOQyh2b2lkKSBfUHlEaWN0X0RlYnVnTWFsbG9jU3RhdHMoRklMRSAqb3V0KTsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZmlsZW9iamVjdC5oIGIvSW5jbHVkZS9maWxlb2JqZWN0LmgKaW5kZXggYTk5Yzk0ZC4uMDkzOTc0NCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9maWxlb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9maWxlb2JqZWN0LmgKQEAgLTgsOCArOCw5IEBACiAKICNkZWZpbmUgUFlfU1RESU9URVhUTU9ERSAiYiIKIAotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUZpbGVfRnJvbUZkKGludCwgY2hhciAqLCBjaGFyICosIGludCwgY2hhciAqLCBjaGFyICosCi0JCQkJICAgICBjaGFyICosIGludCk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RmlsZV9Gcm9tRmQoaW50LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgaW50KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlGaWxlX0dldExpbmUoUHlPYmplY3QgKiwgaW50KTsKIFB5QVBJX0ZVTkMoaW50KSBQeUZpbGVfV3JpdGVPYmplY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgaW50KTsKIFB5QVBJX0ZVTkMoaW50KSBQeUZpbGVfV3JpdGVTdHJpbmcoY29uc3QgY2hhciAqLCBQeU9iamVjdCAqKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZmlsZXV0aWxzLmggYi9JbmNsdWRlL2ZpbGV1dGlscy5oCmluZGV4IDdjMThjZjIuLmU5YmFkODAgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZmlsZXV0aWxzLmgKKysrIGIvSW5jbHVkZS9maWxldXRpbHMuaApAQCAtMjcsMTEgKzI3LDIxIEBACiAgICAgc3RydWN0IHN0YXQgKnN0YXRidWYpOwogI2VuZGlmCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlfb3BlbigKKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICBpbnQgZmxhZ3MpOworI2VuZGlmCisKIFB5QVBJX0ZVTkMoRklMRSAqKSBfUHlfd2ZvcGVuKAogICAgIGNvbnN0IHdjaGFyX3QgKnBhdGgsCiAgICAgY29uc3Qgd2NoYXJfdCAqbW9kZSk7CiAKIFB5QVBJX0ZVTkMoRklMRSopIF9QeV9mb3BlbigKKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICBjb25zdCBjaGFyICptb2RlKTsKKworUHlBUElfRlVOQyhGSUxFKikgX1B5X2ZvcGVuX29iaigKICAgICBQeU9iamVjdCAqcGF0aCwKICAgICBjb25zdCBjaGFyICptb2RlKTsKIApAQCAtNTMsNiArNjMsMTUgQEAKICAgICB3Y2hhcl90ICpidWYsCiAgICAgc2l6ZV90IHNpemUpOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGludCkgX1B5X2dldF9pbmhlcml0YWJsZShpbnQgZmQpOworCitQeUFQSV9GVU5DKGludCkgX1B5X3NldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCBpbmhlcml0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MpOworCitQeUFQSV9GVU5DKGludCkgX1B5X2R1cChpbnQgZmQpOworI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZyYW1lb2JqZWN0LmggYi9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKaW5kZXggMzNmNzNhZi4uOTY2ZmYxZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9mcmFtZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvZnJhbWVvYmplY3QuaApAQCAtMzYsOCArMzYsOSBAQAogICAgICAgICAgICBub24tZ2VuZXJhdG9yIGZyYW1lcy4gU2VlIHRoZSBzYXZlX2V4Y19zdGF0ZSBhbmQgc3dhcF9leGNfc3RhdGUKICAgICAgICAgICAgZnVuY3Rpb25zIGluIGNldmFsLmMgZm9yIGRldGFpbHMgb2YgdGhlaXIgdXNlLiAqLwogICAgIFB5T2JqZWN0ICpmX2V4Y190eXBlLCAqZl9leGNfdmFsdWUsICpmX2V4Y190cmFjZWJhY2s7CisgICAgLyogQm9ycm93ZWQgcmVmZXJlbmNlIHRvIGEgZ2VuZXJhdG9yLCBvciBOVUxMICovCisgICAgUHlPYmplY3QgKmZfZ2VuOwogCi0gICAgUHlUaHJlYWRTdGF0ZSAqZl90c3RhdGU7CiAgICAgaW50IGZfbGFzdGk7ICAgICAgICAgICAgICAgIC8qIExhc3QgaW5zdHJ1Y3Rpb24gaWYgY2FsbGVkICovCiAgICAgLyogQ2FsbCBQeUZyYW1lX0dldExpbmVOdW1iZXIoKSBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhpcyBmaWVsZAogICAgICAgIGRpcmVjdGx5LiAgQXMgb2YgMi4zIGZfbGluZW5vIGlzIG9ubHkgdmFsaWQgd2hlbiB0cmFjaW5nIGlzCkBAIC00Niw2ICs0Nyw3IEBACiAgICAgICAgYnl0ZWNvZGUgaW5kZXguICovCiAgICAgaW50IGZfbGluZW5vOyAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgbGluZSBudW1iZXIgKi8KICAgICBpbnQgZl9pYmxvY2s7ICAgICAgICAgICAgICAgLyogaW5kZXggaW4gZl9ibG9ja3N0YWNrICovCisgICAgY2hhciBmX2V4ZWN1dGluZzsgICAgICAgICAgIC8qIHdoZXRoZXIgdGhlIGZyYW1lIGlzIHN0aWxsIGV4ZWN1dGluZyAqLwogICAgIFB5VHJ5QmxvY2sgZl9ibG9ja3N0YWNrW0NPX01BWEJMT0NLU107IC8qIGZvciB0cnkgYW5kIGxvb3AgYmxvY2tzICovCiAgICAgUHlPYmplY3QgKmZfbG9jYWxzcGx1c1sxXTsgIC8qIGxvY2FscytzdGFjaywgZHluYW1pY2FsbHkgc2l6ZWQgKi8KIH0gUHlGcmFtZU9iamVjdDsKQEAgLTc1LDYgKzc3LDggQEAKIC8qIENvbnZlcnNpb25zIGJldHdlZW4gImZhc3QgbG9jYWxzIiBhbmQgbG9jYWxzIGluIGRpY3Rpb25hcnkgKi8KIAogUHlBUElfRlVOQyh2b2lkKSBQeUZyYW1lX0xvY2Fsc1RvRmFzdChQeUZyYW1lT2JqZWN0ICosIGludCk7CisKK1B5QVBJX0ZVTkMoaW50KSBQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihQeUZyYW1lT2JqZWN0ICpmKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoUHlGcmFtZU9iamVjdCAqKTsKIAogUHlBUElfRlVOQyhpbnQpIFB5RnJhbWVfQ2xlYXJGcmVlTGlzdCh2b2lkKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZ2Vub2JqZWN0LmggYi9JbmNsdWRlL2dlbm9iamVjdC5oCmluZGV4IGVkNDUxYmEuLjY1ZjFlY2YgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZ2Vub2JqZWN0LmgKKysrIGIvSW5jbHVkZS9nZW5vYmplY3QuaApAQCAtMzYsNiArMzYsOCBAQAogUHlBUElfRlVOQyhpbnQpIFB5R2VuX05lZWRzRmluYWxpemluZyhQeUdlbk9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlHZW5fRmV0Y2hTdG9wSXRlcmF0aW9uVmFsdWUoUHlPYmplY3QgKiopOwogUHlPYmplY3QgKl9QeUdlbl9TZW5kKFB5R2VuT2JqZWN0ICosIFB5T2JqZWN0ICopOworUHlBUElfRlVOQyh2b2lkKSBfUHlHZW5fRmluYWxpemUoUHlPYmplY3QgKnNlbGYpOworCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ncmFtbWFyLmggYi9JbmNsdWRlL2dyYW1tYXIuaAppbmRleCA4NDI2ZGEzLi5iYTdkMTlkIDEwMDY0NAotLS0gYS9JbmNsdWRlL2dyYW1tYXIuaAorKysgYi9JbmNsdWRlL2dyYW1tYXIuaApAQCAtNjksMTQgKzY5LDE0IEBACiAvKiBGVU5DVElPTlMgKi8KIAogZ3JhbW1hciAqbmV3Z3JhbW1hcihpbnQgc3RhcnQpOwotZGZhICphZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNoYXIgKm5hbWUpOworZGZhICphZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IGFkZHN0YXRlKGRmYSAqZCk7CiB2b2lkIGFkZGFyYyhkZmEgKmQsIGludCBmcm9tLCBpbnQgdG8sIGludCBsYmwpOwogZGZhICpQeUdyYW1tYXJfRmluZERGQShncmFtbWFyICpnLCBpbnQgdHlwZSk7CiAKLWludCBhZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKTsKLWludCBmaW5kbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNoYXIgKnN0cik7Ci1jaGFyICpQeUdyYW1tYXJfTGFiZWxSZXByKGxhYmVsICpsYik7CitpbnQgYWRkbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cik7CitpbnQgZmluZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpOworY29uc3QgY2hhciAqUHlHcmFtbWFyX0xhYmVsUmVwcihsYWJlbCAqbGIpOwogdm9pZCB0cmFuc2xhdGVsYWJlbHMoZ3JhbW1hciAqZyk7CiAKIHZvaWQgYWRkZmlyc3RzZXRzKGdyYW1tYXIgKmcpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9pbXBvcnQuaCBiL0luY2x1ZGUvaW1wb3J0LmgKaW5kZXggNzNjODZlZS4uYWZkZmFjMiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9pbXBvcnQuaAorKysgYi9JbmNsdWRlL2ltcG9ydC5oCkBAIC0xMywxOSArMTMsMTkgQEAKIFB5QVBJX0ZVTkMobG9uZykgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIodm9pZCk7CiBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlJbXBvcnRfR2V0TWFnaWNUYWcodm9pZCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKAotICAgIGNoYXIgKm5hbWUsICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUsICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0ICpjbwogICAgICk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoCi0gICAgY2hhciAqbmFtZSwgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSwgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKmNvLAotICAgIGNoYXIgKnBhdGhuYW1lICAgICAgICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKAotICAgIGNoYXIgKm5hbWUsICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUsICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0ICpjbywKLSAgICBjaGFyICpwYXRobmFtZSwgICAgICAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCi0gICAgY2hhciAqY3BhdGhuYW1lICAgICAgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICpjcGF0aG5hbWUgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoCiAgICAgUHlPYmplY3QgKm5hbWUsCkBAIC03Miw3ICs3Miw3IEBACiAgICAgUHlPYmplY3QgKm5hbWUKICAgICApOwogUHlBUElfRlVOQyhpbnQpIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZSgKLSAgICBjaGFyICpuYW1lICAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICApOwogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCkBAIC05MiwxMiArOTIsMTIgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKGludCkgX1B5SW1wb3J0X0ZpeHVwQnVpbHRpbigKICAgICBQeU9iamVjdCAqbW9kLAotICAgIGNoYXIgKm5hbWUgICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgICk7CiBQeUFQSV9GVU5DKGludCkgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KFB5T2JqZWN0KiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiAKIHN0cnVjdCBfaW5pdHRhYiB7Ci0gICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QqICgqaW5pdGZ1bmMpKHZvaWQpOwogfTsKIFB5QVBJX0RBVEEoc3RydWN0IF9pbml0dGFiICopIFB5SW1wb3J0X0luaXR0YWI7CkBAIC0xMTMsMTUgKzExMywxNSBAQAogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBzdHJ1Y3QgX2Zyb3plbiB7Ci0gICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCi0gICAgdW5zaWduZWQgY2hhciAqY29kZTsKKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2RlOwogICAgIGludCBzaXplOwogfTsKIAogLyogRW1iZWRkaW5nIGFwcHMgbWF5IGNoYW5nZSB0aGlzIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlaXIgZmF2b3JpdGUKICAgIGNvbGxlY3Rpb24gb2YgZnJvemVuIG1vZHVsZXM6ICovCiAKLVB5QVBJX0RBVEEoc3RydWN0IF9mcm96ZW4gKikgUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKK1B5QVBJX0RBVEEoY29uc3Qgc3RydWN0IF9mcm96ZW4gKikgUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbG9uZ29iamVjdC5oIGIvSW5jbHVkZS9sb25nb2JqZWN0LmgKaW5kZXggMWMxYzVkZS4uZmY0MzMwOSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9sb25nb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9sb25nb2JqZWN0LmgKQEAgLTUyLDYgKzUyLDE5IEBACiAjZXJyb3IgInNpemVvZihwaWRfdCkgaXMgbmVpdGhlciBzaXplb2YoaW50KSwgc2l6ZW9mKGxvbmcpIG9yIHNpemVvZihsb25nIGxvbmcpIgogI2VuZGlmIC8qIFNJWkVPRl9QSURfVCAqLwogCisjaWYgU0laRU9GX1ZPSURfUCA9PSBTSVpFT0ZfSU5UCisjICBkZWZpbmUgX1B5X1BBUlNFX0lOVFBUUiAiaSIKKyMgIGRlZmluZSBfUHlfUEFSU0VfVUlOVFBUUiAiSSIKKyNlbGlmIFNJWkVPRl9WT0lEX1AgPT0gU0laRU9GX0xPTkcKKyMgIGRlZmluZSBfUHlfUEFSU0VfSU5UUFRSICJsIgorIyAgZGVmaW5lIF9QeV9QQVJTRV9VSU5UUFRSICJrIgorI2VsaWYgZGVmaW5lZChTSVpFT0ZfTE9OR19MT05HKSAmJiBTSVpFT0ZfVk9JRF9QID09IFNJWkVPRl9MT05HX0xPTkcKKyMgIGRlZmluZSBfUHlfUEFSU0VfSU5UUFRSICJMIgorIyAgZGVmaW5lIF9QeV9QQVJTRV9VSU5UUFRSICJLIgorI2Vsc2UKKyMgIGVycm9yICJ2b2lkKiBkaWZmZXJlbnQgaW4gc2l6ZSBmcm9tIGludCwgbG9uZyBhbmQgbG9uZyBsb25nIgorI2VuZGlmIC8qIFNJWkVPRl9WT0lEX1AgKi8KKwogLyogVXNlZCBieSBQeXRob24vbXlzdHJ0b3VsLmMuICovCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9EQVRBKHVuc2lnbmVkIGNoYXIpIF9QeUxvbmdfRGlnaXRWYWx1ZVsyNTZdOwpAQCAtODAsNyArOTMsNyBAQAogUHlBUElfRlVOQyhQWV9MT05HX0xPTkcpIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKiwgaW50ICopOwogI2VuZGlmIC8qIEhBVkVfTE9OR19MT05HICovCiAKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVN0cmluZyhjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tVW5pY29kZShQeV9VTklDT0RFKiwgUHlfc3NpemVfdCwgaW50KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21Vbmljb2RlT2JqZWN0KFB5T2JqZWN0ICp1LCBpbnQgYmFzZSk7CkBAIC0xODIsOCArMTk1LDggQEAKIC8qIFRoZXNlIGFyZW4ndCByZWFsbHkgcGFydCBvZiB0aGUgaW50IG9iamVjdCwgYnV0IHRoZXkncmUgaGFuZHkuIFRoZQogICAgZnVuY3Rpb25zIGFyZSBpbiBQeXRob24vbXlzdHJ0b3VsLmMuCiAgKi8KLVB5QVBJX0ZVTkModW5zaWduZWQgbG9uZykgUHlPU19zdHJ0b3VsKGNoYXIgKiwgY2hhciAqKiwgaW50KTsKLVB5QVBJX0ZVTkMobG9uZykgUHlPU19zdHJ0b2woY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyh1bnNpZ25lZCBsb25nKSBQeU9TX3N0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyhsb25nKSBQeU9TX3N0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tYXJzaGFsLmggYi9JbmNsdWRlL21hcnNoYWwuaAppbmRleCBlOTZkMDYyLi4wOWQ5MzM3IDEwMDY0NAotLS0gYS9JbmNsdWRlL21hcnNoYWwuaAorKysgYi9JbmNsdWRlL21hcnNoYWwuaApAQCAtNyw3ICs3LDcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNkZWZpbmUgUHlfTUFSU0hBTF9WRVJTSU9OIDIKKyNkZWZpbmUgUHlfTUFSU0hBTF9WRVJTSU9OIDQKIAogUHlBUElfRlVOQyh2b2lkKSBQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlKGxvbmcsIEZJTEUgKiwgaW50KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlKFB5T2JqZWN0ICosIEZJTEUgKiwgaW50KTsKQEAgLTE5LDcgKzE5LDggQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZShGSUxFICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZExhc3RPYmplY3RGcm9tRmlsZShGSUxFICopOwogI2VuZGlmCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjaGFyICosIFB5X3NzaXplX3QpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tb2RzdXBwb3J0LmggYi9JbmNsdWRlL21vZHN1cHBvcnQuaAppbmRleCBlY2YxZGNjLi41ZGUwNDU4IDEwMDY0NAotLS0gYS9JbmNsdWRlL21vZHN1cHBvcnQuaAorKysgYi9JbmNsdWRlL21vZHN1cHBvcnQuaApAQCAtMjYsNyArMjYsNyBAQAogLyogRHVlIHRvIGEgZ2xpdGNoIGluIDMuMiwgdGhlIF9TaXplVCB2ZXJzaW9ucyB3ZXJlbid0IGV4cG9ydGVkIGZyb20gdGhlIERMTC4gKi8KICNpZiAhZGVmaW5lZChQWV9TU0laRV9UX0NMRUFOKSB8fCAhZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkgfHwgUHlfTElNSVRFRF9BUEkrMCA+PSAweDAzMDMwMDAwCiBQeUFQSV9GVU5DKGludCkgUHlBcmdfUGFyc2UoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pIFB5X0ZPUk1BVF9QQVJTRVRVUExFKFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpOworUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNoYXIgKiosIC4uLik7CiBQeUFQSV9GVU5DKGludCkgUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzKFB5T2JqZWN0ICopOwpAQCAtMzYsNiArMzYsNyBAQAogI2VuZGlmCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKGludCkgX1B5QXJnX05vS2V5d29yZHMoY29uc3QgY2hhciAqZnVuY25hbWUsIFB5T2JqZWN0ICprdyk7CitQeUFQSV9GVU5DKGludCkgX1B5QXJnX05vUG9zaXRpb25hbChjb25zdCBjaGFyICpmdW5jbmFtZSwgUHlPYmplY3QgKmFyZ3MpOwogCiBQeUFQSV9GVU5DKGludCkgUHlBcmdfVmFQYXJzZShQeU9iamVjdCAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCmRpZmYgLS1naXQgYS9JbmNsdWRlL21vZHVsZW9iamVjdC5oIGIvSW5jbHVkZS9tb2R1bGVvYmplY3QuaAppbmRleCA4MDEzZGQ5Li5mMTE5MzY0IDEwMDY0NAotLS0gYS9JbmNsdWRlL21vZHVsZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvbW9kdWxlb2JqZWN0LmgKQEAgLTI1LDYgKzI1LDcgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QoUHlPYmplY3QgKik7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIF9QeU1vZHVsZV9DbGVhcihQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5TW9kdWxlX0NsZWFyRGljdChQeU9iamVjdCAqKTsKICNlbmRpZgogUHlBUElfRlVOQyhzdHJ1Y3QgUHlNb2R1bGVEZWYqKSBQeU1vZHVsZV9HZXREZWYoUHlPYmplY3QqKTsKIFB5QVBJX0ZVTkModm9pZCopIFB5TW9kdWxlX0dldFN0YXRlKFB5T2JqZWN0Kik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL29iamVjdC5oIGIvSW5jbHVkZS9vYmplY3QuaAppbmRleCBjZGViMDZjLi43NTg0ZDRjIDEwMDY0NAotLS0gYS9JbmNsdWRlL29iamVjdC5oCisrKyBiL0luY2x1ZGUvb2JqZWN0LmgKQEAgLTE0Myw3ICsxNDMsOCBAQAogICAgIFB5T2JqZWN0ICpvYmplY3Q7CiB9IF9QeV9JZGVudGlmaWVyOwogCi0jZGVmaW5lIF9QeV9zdGF0aWNfc3RyaW5nKHZhcm5hbWUsIHZhbHVlKSAgc3RhdGljIF9QeV9JZGVudGlmaWVyIHZhcm5hbWUgPSB7IDAsIHZhbHVlLCAwIH0KKyNkZWZpbmUgX1B5X3N0YXRpY19zdHJpbmdfaW5pdCh2YWx1ZSkgeyAwLCB2YWx1ZSwgMCB9CisjZGVmaW5lIF9QeV9zdGF0aWNfc3RyaW5nKHZhcm5hbWUsIHZhbHVlKSAgc3RhdGljIF9QeV9JZGVudGlmaWVyIHZhcm5hbWUgPSBfUHlfc3RhdGljX3N0cmluZ19pbml0KHZhbHVlKQogI2RlZmluZSBfUHlfSURFTlRJRklFUih2YXJuYW1lKSBfUHlfc3RhdGljX3N0cmluZyhQeUlkXyMjdmFybmFtZSwgI3Zhcm5hbWUpCiAKIC8qCkBAIC0zNjIsNyArMzYzLDcgQEAKICAgICBQeUJ1ZmZlclByb2NzICp0cF9hc19idWZmZXI7CiAKICAgICAvKiBGbGFncyB0byBkZWZpbmUgcHJlc2VuY2Ugb2Ygb3B0aW9uYWwvZXhwYW5kZWQgZmVhdHVyZXMgKi8KLSAgICBsb25nIHRwX2ZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgdHBfZmxhZ3M7CiAKICAgICBjb25zdCBjaGFyICp0cF9kb2M7IC8qIERvY3VtZW50YXRpb24gc3RyaW5nICovCiAKQEAgLTQwOCw2ICs0MDksOCBAQAogICAgIC8qIFR5cGUgYXR0cmlidXRlIGNhY2hlIHZlcnNpb24gdGFnLiBBZGRlZCBpbiB2ZXJzaW9uIDIuNiAqLwogICAgIHVuc2lnbmVkIGludCB0cF92ZXJzaW9uX3RhZzsKIAorICAgIGRlc3RydWN0b3IgdHBfZmluYWxpemU7CisKICNpZmRlZiBDT1VOVF9BTExPQ1MKICAgICAvKiB0aGVzZSBtdXN0IGJlIGxhc3QgYW5kIG5ldmVyIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKi8KICAgICBQeV9zc2l6ZV90IHRwX2FsbG9jczsKQEAgLTQyOCw3ICs0MzEsNyBAQAogICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICAgaW50IGJhc2ljc2l6ZTsKICAgICBpbnQgaXRlbXNpemU7Ci0gICAgaW50IGZsYWdzOworICAgIHVuc2lnbmVkIGludCBmbGFnczsKICAgICBQeVR5cGVfU2xvdCAqc2xvdHM7IC8qIHRlcm1pbmF0ZWQgYnkgc2xvdD09MC4gKi8KIH0gUHlUeXBlX1NwZWM7CiAKQEAgLTQzNiw2ICs0MzksOSBAQAogI2lmICFkZWZpbmVkKFB5X0xJTUlURURfQVBJKSB8fCBQeV9MSU1JVEVEX0FQSSswID49IDB4MDMwMzAwMDAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMoUHlUeXBlX1NwZWMqLCBQeU9iamVjdCopOwogI2VuZGlmCisjaWYgIWRlZmluZWQoUHlfTElNSVRFRF9BUEkpIHx8IFB5X0xJTUlURURfQVBJKzAgPj0gMHgwMzA0MDAwMAorUHlBUElfRlVOQyh2b2lkKikgUHlUeXBlX0dldFNsb3QoUHlUeXBlT2JqZWN0KiwgaW50KTsKKyNlbmRpZgogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAvKiBUaGUgKnJlYWwqIGxheW91dCBvZiBhIHR5cGUgb2JqZWN0IHdoZW4gYWxsb2NhdGVkIG9uIHRoZSBoZWFwICovCkBAIC00NzAsNyArNDc2LDcgQEAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUJhc2VPYmplY3RfVHlwZTsgLyogYnVpbHQtaW4gJ29iamVjdCcgKi8KIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVN1cGVyX1R5cGU7IC8qIGJ1aWx0LWluICdzdXBlcicgKi8KIAotUHlBUElfRlVOQyhsb25nKSBQeVR5cGVfR2V0RmxhZ3MoUHlUeXBlT2JqZWN0Kik7CitQeUFQSV9GVU5DKHVuc2lnbmVkIGxvbmcpIFB5VHlwZV9HZXRGbGFncyhQeVR5cGVPYmplY3QqKTsKIAogI2RlZmluZSBQeVR5cGVfQ2hlY2sob3ApIFwKICAgICBQeVR5cGVfRmFzdFN1YmNsYXNzKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MpCkBAIC00ODksNiArNDk1LDExIEBACiBQeUFQSV9GVU5DKHVuc2lnbmVkIGludCkgUHlUeXBlX0NsZWFyQ2FjaGUodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5VHlwZV9Nb2RpZmllZChQeVR5cGVPYmplY3QgKik7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5VHlwZV9HZXREb2NGcm9tSW50ZXJuYWxEb2MoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlUeXBlX0dldFRleHRTaWduYXR1cmVGcm9tSW50ZXJuYWxEb2MoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworI2VuZGlmCisKIC8qIEdlbmVyaWMgb3BlcmF0aW9ucyBvbiBvYmplY3RzICovCiBzdHJ1Y3QgX1B5X0lkZW50aWZpZXI7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCkBAIC01MzAsNiArNTQxLDEwIEBACiBQeUFQSV9GVU5DKGludCkgUHlDYWxsYWJsZV9DaGVjayhQeU9iamVjdCAqKTsKIAogUHlBUElfRlVOQyh2b2lkKSBQeU9iamVjdF9DbGVhcldlYWtSZWZzKFB5T2JqZWN0ICopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyh2b2lkKSBQeU9iamVjdF9DYWxsRmluYWxpemVyKFB5T2JqZWN0ICopOworUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhQeU9iamVjdCAqKTsKKyNlbmRpZgogCiAvKiBTYW1lIGFzIFB5T2JqZWN0X0dlbmVyaWN7R2V0LFNldH1BdHRyLCBidXQgcGFzc2luZyB0aGUgYXR0cmlidXRlcwogICAgZGljdCBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIuICovCkBAIC01NTcsMjMgKzU3Miw2IEBACiBQeUFQSV9GVU5DKGludCkgUHlfUmVwckVudGVyKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeV9SZXByTGVhdmUoUHlPYmplY3QgKik7CiAKLS8qIEhlbHBlcnMgZm9yIGhhc2ggZnVuY3Rpb25zICovCi0jaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hEb3VibGUoZG91YmxlKTsKLVB5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaFBvaW50ZXIodm9pZCopOwotUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoQnl0ZXModW5zaWduZWQgY2hhciosIFB5X3NzaXplX3QpOwotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeV9oYXNoX3QgcHJlZml4OwotICAgIFB5X2hhc2hfdCBzdWZmaXg7Ci19IF9QeV9IYXNoU2VjcmV0X3Q7Ci1QeUFQSV9EQVRBKF9QeV9IYXNoU2VjcmV0X3QpIF9QeV9IYXNoU2VjcmV0OwotCi0jaWZkZWYgUHlfREVCVUcKLVB5QVBJX0RBVEEoaW50KSBfUHlfSGFzaFNlY3JldF9Jbml0aWFsaXplZDsKLSNlbmRpZgotCiAvKiBIZWxwZXIgZm9yIHBhc3Npbmcgb2JqZWN0cyB0byBwcmludGYgYW5kIHRoZSBsaWtlICovCiAjZGVmaW5lIFB5T2JqZWN0X1JFUFIob2JqKSBfUHlVbmljb2RlX0FzU3RyaW5nKFB5T2JqZWN0X1JlcHIob2JqKSkKIApAQCAtNjA0LDUwICs2MDIsNTUgQEAKICovCiAKIC8qIFNldCBpZiB0aGUgdHlwZSBvYmplY3QgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEVBUFRZUEUgKDFMPDw5KQorI2RlZmluZSBQeV9UUEZMQUdTX0hFQVBUWVBFICgxVUwgPDwgOSkKIAogLyogU2V0IGlmIHRoZSB0eXBlIGFsbG93cyBzdWJjbGFzc2luZyAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VUWVBFICgxTDw8MTApCisjZGVmaW5lIFB5X1RQRkxBR1NfQkFTRVRZUEUgKDFVTCA8PCAxMCkKIAogLyogU2V0IGlmIHRoZSB0eXBlIGlzICdyZWFkeScgLS0gZnVsbHkgaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWSAoMUw8PDEyKQorI2RlZmluZSBQeV9UUEZMQUdTX1JFQURZICgxVUwgPDwgMTIpCiAKIC8qIFNldCB3aGlsZSB0aGUgdHlwZSBpcyBiZWluZyAncmVhZGllZCcsIHRvIHByZXZlbnQgcmVjdXJzaXZlIHJlYWR5IGNhbGxzICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfUkVBRFlJTkcgKDFMPDwxMykKKyNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWUlORyAoMVVMIDw8IDEzKQogCiAvKiBPYmplY3RzIHN1cHBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9uIChzZWUgb2JqaW1wLmgpICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9HQyAoMUw8PDE0KQorI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfR0MgKDFVTCA8PCAxNCkKIAogLyogVGhlc2UgdHdvIGJpdHMgYXJlIHByZXNlcnZlZCBmb3IgU3RhY2tsZXNzIFB5dGhvbiwgbmV4dCBhZnRlciB0aGlzIGlzIDE3ICovCiAjaWZkZWYgU1RBQ0tMRVNTCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OICgzTDw8MTUpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OICgzVUwgPDwgMTUpCiAjZWxzZQogI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfU1RBQ0tMRVNTX0VYVEVOU0lPTiAwCiAjZW5kaWYKIAogLyogT2JqZWN0cyBzdXBwb3J0IHR5cGUgYXR0cmlidXRlIGNhY2hlICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyAgICgxTDw8MTgpCi0jZGVmaW5lIFB5X1RQRkxBR1NfVkFMSURfVkVSU0lPTl9UQUcgICgxTDw8MTkpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyAgICgxVUwgPDwgMTgpCisjZGVmaW5lIFB5X1RQRkxBR1NfVkFMSURfVkVSU0lPTl9UQUcgICgxVUwgPDwgMTkpCiAKIC8qIFR5cGUgaXMgYWJzdHJhY3QgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19JU19BQlNUUkFDVCAoMUw8PDIwKQorI2RlZmluZSBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUICgxVUwgPDwgMjApCiAKIC8qIFRoZXNlIGZsYWdzIGFyZSB1c2VkIHRvIGRldGVybWluZSBpZiBhIHR5cGUgaXMgYSBzdWJjbGFzcy4gKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19JTlRfU1VCQ0xBU1MgICAgICAgICAoMUw8PDIzKQotI2RlZmluZSBQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1MgICAgICAgICgxTDw8MjQpCi0jZGVmaW5lIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUyAgICAgICAgKDFMPDwyNSkKLSNkZWZpbmUgUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTUyAgICAgICAoMUw8PDI2KQotI2RlZmluZSBQeV9UUEZMQUdTX0JZVEVTX1NVQkNMQVNTICAgICAgICgxTDw8MjcpCi0jZGVmaW5lIFB5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTUyAgICAgKDFMPDwyOCkKLSNkZWZpbmUgUHlfVFBGTEFHU19ESUNUX1NVQkNMQVNTICAgICAgICAoMUw8PDI5KQotI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VfRVhDX1NVQkNMQVNTICAgICgxTDw8MzApCi0jZGVmaW5lIFB5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUyAgICAgICAgKDFMPDwzMSkKKyNkZWZpbmUgUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTICAgICAgICAoMVVMIDw8IDI0KQorI2RlZmluZSBQeV9UUEZMQUdTX0xJU1RfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMjUpCisjZGVmaW5lIFB5X1RQRkxBR1NfVFVQTEVfU1VCQ0xBU1MgICAgICAgKDFVTCA8PCAyNikKKyNkZWZpbmUgUHlfVFBGTEFHU19CWVRFU19TVUJDTEFTUyAgICAgICAoMVVMIDw8IDI3KQorI2RlZmluZSBQeV9UUEZMQUdTX1VOSUNPREVfU1VCQ0xBU1MgICAgICgxVUwgPDwgMjgpCisjZGVmaW5lIFB5X1RQRkxBR1NfRElDVF9TVUJDTEFTUyAgICAgICAgKDFVTCA8PCAyOSkKKyNkZWZpbmUgUHlfVFBGTEFHU19CQVNFX0VYQ19TVUJDTEFTUyAgICAoMVVMIDw8IDMwKQorI2RlZmluZSBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMzEpCiAKICNkZWZpbmUgUHlfVFBGTEFHU19ERUZBVUxUICAoIFwKICAgICAgICAgICAgICAgICAgUHlfVFBGTEFHU19IQVZFX1NUQUNLTEVTU19FWFRFTlNJT04gfCBcCiAgICAgICAgICAgICAgICAgIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyB8IFwKICAgICAgICAgICAgICAgICAwKQogCisvKiBOT1RFOiBUaGUgZm9sbG93aW5nIGZsYWdzIHJldXNlIGxvd2VyIGJpdHMgKHJlbW92ZWQgYXMgcGFydCBvZiB0aGUKKyAqIFB5dGhvbiAzLjAgdHJhbnNpdGlvbikuICovCisKKy8qIFR5cGUgc3RydWN0dXJlIGhhcyB0cF9maW5hbGl6ZSBtZW1iZXIgKDMuNCkgKi8KKyNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFICgxVUwgPDwgMCkKKwogI2lmZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5VHlwZV9IYXNGZWF0dXJlKHQsZikgICgoUHlUeXBlX0dldEZsYWdzKHQpICYgKGYpKSAhPSAwKQogI2Vsc2UKQEAgLTY4MiwxMiArNjg1LDYgQEAKIGNvbXBsaWNhdGlvbnMgaW4gdGhlIGRlYWxsb2NhdGlvbiBmdW5jdGlvbi4gIChUaGlzIGlzIGFjdHVhbGx5IGEKIGRlY2lzaW9uIHRoYXQncyB1cCB0byB0aGUgaW1wbGVtZW50ZXIgb2YgZWFjaCBuZXcgdHlwZSBzbyBpZiB5b3Ugd2FudCwKIHlvdSBjYW4gY291bnQgc3VjaCByZWZlcmVuY2VzIHRvIHRoZSB0eXBlIG9iamVjdC4pCi0KLSoqKiBXQVJOSU5HKioqIFRoZSBQeV9ERUNSRUYgbWFjcm8gbXVzdCBoYXZlIGEgc2lkZS1lZmZlY3QtZnJlZSBhcmd1bWVudAotc2luY2UgaXQgbWF5IGV2YWx1YXRlIGl0cyBhcmd1bWVudCBtdWx0aXBsZSB0aW1lcy4gIChUaGUgYWx0ZXJuYXRpdmUKLXdvdWxkIGJlIHRvIG1hY2UgaXQgYSBwcm9wZXIgZnVuY3Rpb24gb3IgYXNzaWduIGl0IHRvIGEgZ2xvYmFsIHRlbXBvcmFyeQotdmFyaWFibGUgZmlyc3QsIGJvdGggb2Ygd2hpY2ggYXJlIHNsb3dlcjsgYW5kIGluIGEgbXVsdGktdGhyZWFkZWQKLWVudmlyb25tZW50IHRoZSBnbG9iYWwgdmFyaWFibGUgdHJpY2sgaXMgbm90IHNhZmUuKQogKi8KIAogLyogRmlyc3QgZGVmaW5lIGEgcGlsZSBvZiBzaW1wbGUgaGVscGVyIG1hY3Jvcywgb25lIHNldCBwZXIgc3BlY2lhbApAQCAtNzA0LDcgKzcwMSw2IEBACiBQeUFQSV9GVU5DKHZvaWQpIF9QeV9OZWdhdGl2ZVJlZmNvdW50KGNvbnN0IGNoYXIgKmZuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZW5vLCBQeU9iamVjdCAqb3ApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlEaWN0X0R1bW15KHZvaWQpOwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlTZXRfRHVtbXkodm9pZCk7CiBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeV9HZXRSZWZUb3RhbCh2b2lkKTsKICNkZWZpbmUgX1B5X0lOQ19SRUZUT1RBTCAgICAgICAgX1B5X1JlZlRvdGFsKysKICNkZWZpbmUgX1B5X0RFQ19SRUZUT1RBTCAgICAgICAgX1B5X1JlZlRvdGFsLS0KQEAgLTc2NiwxNSArNzYyLDE2IEBACiAKICNkZWZpbmUgUHlfSU5DUkVGKG9wKSAoICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBfUHlfSU5DX1JFRlRPVEFMICBfUHlfUkVGX0RFQlVHX0NPTU1BICAgICAgIFwKLSAgICAoKFB5T2JqZWN0Kikob3ApKS0+b2JfcmVmY250KyspCisgICAgKChQeU9iamVjdCAqKShvcCkpLT5vYl9yZWZjbnQrKykKIAogI2RlZmluZSBQeV9ERUNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKl9weV9kZWNyZWZfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgICAgXAogICAgICAgICBpZiAoX1B5X0RFQ19SRUZUT1RBTCAgX1B5X1JFRl9ERUJVR19DT01NQSAgICAgICBcCi0gICAgICAgIC0tKChQeU9iamVjdCopKG9wKSktPm9iX3JlZmNudCAhPSAwKSAgICAgICAgICAgIFwKLSAgICAgICAgICAgIF9QeV9DSEVDS19SRUZDTlQob3ApICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLShfcHlfZGVjcmVmX3RtcCktPm9iX3JlZmNudCAhPSAwKSAgICAgICAgICAgICBcCisgICAgICAgICAgICBfUHlfQ0hFQ0tfUkVGQ05UKF9weV9kZWNyZWZfdG1wKSAgICAgICAgICAgIFwKICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfUHlfRGVhbGxvYygoUHlPYmplY3QgKikob3ApKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9QeV9EZWFsbG9jKF9weV9kZWNyZWZfdG1wKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCiAvKiBTYWZlbHkgZGVjcmVmIGBvcGAgYW5kIHNldCBgb3BgIHRvIE5VTEwsIGVzcGVjaWFsbHkgdXNlZnVsIGluIHRwX2NsZWFyCkBAIC04MTMsMTYgKzgxMCwyNyBAQAogICovCiAjZGVmaW5lIFB5X0NMRUFSKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChvcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgXAorICAgICAgICBpZiAoX3B5X3RtcCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgKG9wKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgUHlfREVDUkVGKF9weV90bXApOyAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKIC8qIE1hY3JvcyB0byB1c2UgaW4gY2FzZSB0aGUgb2JqZWN0IHBvaW50ZXIgbWF5IGJlIE5VTEw6ICovCi0jZGVmaW5lIFB5X1hJTkNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0lOQ1JFRihvcCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFB5X1hERUNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0RFQ1JFRihvcCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFB5X1hJTkNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICpfcHlfeGluY3JlZl90bXAgPSAoUHlPYmplY3QgKikob3ApOyBcCisgICAgICAgIGlmIChfcHlfeGluY3JlZl90bXAgIT0gTlVMTCkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeV9JTkNSRUYoX3B5X3hpbmNyZWZfdG1wKTsgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBQeV9YREVDUkVGKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3hkZWNyZWZfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgXAorICAgICAgICBpZiAoX3B5X3hkZWNyZWZfdG1wICE9IE5VTEwpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlfREVDUkVGKF9weV94ZGVjcmVmX3RtcCk7ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKIC8qCiBUaGVzZSBhcmUgcHJvdmlkZWQgYXMgY29udmVuaWVuY2VzIHRvIFB5dGhvbiBydW50aW1lIGVtYmVkZGVycywgc28gdGhhdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vYmppbXBsLmggYi9JbmNsdWRlL29iamltcGwuaAppbmRleCBjNmI3ZGY0Li45YTI3ZWMzIDEwMDY0NAotLS0gYS9JbmNsdWRlL29iamltcGwuaAorKysgYi9JbmNsdWRlL29iamltcGwuaApAQCAtOTQsNTEgKzk0LDI3IEBACiAgICB0aGUgb2JqZWN0IGdldHMgaW5pdGlhbGl6ZWQgdmlhIFB5T2JqZWN0X3tJbml0LCBJbml0VmFyfSBhZnRlciBvYnRhaW5pbmcKICAgIHRoZSByYXcgbWVtb3J5LgogKi8KLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9NYWxsb2Moc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9SZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfRnJlZSh2b2lkICopOworUHlBUElfRlVOQyh2b2lkICopIFB5T2JqZWN0X01hbGxvYyhzaXplX3Qgc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0ZyZWUodm9pZCAqcHRyKTsKIAorLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MsIHJlZ2FyZGxlc3Mgb2Ygc2l6ZSAqLworUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKHZvaWQpOwogCiAvKiBNYWNyb3MgKi8KICNpZmRlZiBXSVRIX1BZTUFMTE9DCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYgLyogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSSAqLwotI2lmZGVmIFBZTUFMTE9DX0RFQlVHICAgLyogV0lUSF9QWU1BTExPQyAmJiBQWU1BTExPQ19ERUJVRyAqLwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdGcmVlKHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGFwaSwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU1lbV9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApOwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBfUHlPYmplY3RfRGVidWdNYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfTWFsbG9jICAgICAgICAgX1B5T2JqZWN0X0RlYnVnTWFsbG9jCi0jZGVmaW5lIFB5T2JqZWN0X1JFQUxMT0MgICAgICAgIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfUmVhbGxvYyAgICAgICAgX1B5T2JqZWN0X0RlYnVnUmVhbGxvYwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBfUHlPYmplY3RfRGVidWdGcmVlCi0jZGVmaW5lIFB5T2JqZWN0X0ZyZWUgICAgICAgICAgIF9QeU9iamVjdF9EZWJ1Z0ZyZWUKKyNlbmRpZgogCi0jZWxzZSAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgISBQWU1BTExPQ19ERUJVRyAqLworLyogTWFjcm9zICovCiAjZGVmaW5lIFB5T2JqZWN0X01BTExPQyAgICAgICAgIFB5T2JqZWN0X01hbGxvYwogI2RlZmluZSBQeU9iamVjdF9SRUFMTE9DICAgICAgICBQeU9iamVjdF9SZWFsbG9jCiAjZGVmaW5lIFB5T2JqZWN0X0ZSRUUgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNlbmRpZgotCi0jZWxzZSAgIC8qICEgV0lUSF9QWU1BTExPQyAqLwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBQeU1lbV9NQUxMT0MKLSNkZWZpbmUgUHlPYmplY3RfUkVBTExPQyAgICAgICAgUHlNZW1fUkVBTExPQwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBQeU1lbV9GUkVFCi0KLSNlbmRpZiAgLyogV0lUSF9QWU1BTExPQyAqLwotCiAjZGVmaW5lIFB5T2JqZWN0X0RlbCAgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNkZWZpbmUgUHlPYmplY3RfREVMICAgICAgICAgICAgUHlPYmplY3RfRlJFRQorI2RlZmluZSBQeU9iamVjdF9ERUwgICAgICAgICAgICBQeU9iamVjdF9GcmVlCisKIAogLyoKICAqIEdlbmVyaWMgb2JqZWN0IGFsbG9jYXRvciBpbnRlcmZhY2UKQEAgLTIyMiw2ICsxOTgsMjYgQEAKICAgIGNvbnN0cnVjdG9yIHlvdSB3b3VsZCBzdGFydCBkaXJlY3RseSB3aXRoIFB5T2JqZWN0X0luaXQvSW5pdFZhcgogKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZXIgY29udGV4dCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSAyIGZ1bmN0aW9ucyAqLworICAgIHZvaWQgKmN0eDsKKworICAgIC8qIGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgKi8KKyAgICB2b2lkKiAoKmFsbG9jKSAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiBmcmVlIGFuIGFyZW5hICovCisgICAgdm9pZCAoKmZyZWUpICh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworfSBQeU9iamVjdEFyZW5hQWxsb2NhdG9yOworCisvKiBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKworLyogU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcik7CisjZW5kaWYKKworCiAvKgogICogR2FyYmFnZSBDb2xsZWN0aW9uIFN1cHBvcnQKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMzAsNiArMjI2LDEwIEBACiAvKiBDIGVxdWl2YWxlbnQgb2YgZ2MuY29sbGVjdCgpLiAqLwogUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeUdDX0NvbGxlY3Qodm9pZCk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5R0NfQ29sbGVjdE5vRmFpbCh2b2lkKTsKKyNlbmRpZgorCiAvKiBUZXN0IGlmIGEgdHlwZSBoYXMgYSBHQyBoZWFkICovCiAjZGVmaW5lIFB5VHlwZV9JU19HQyh0KSBQeVR5cGVfSGFzRmVhdHVyZSgodCksIFB5X1RQRkxBR1NfSEFWRV9HQykKIApAQCAtMjQ5LDEzICsyNDksMzcgQEAKICAgICAgICAgdW5pb24gX2djX2hlYWQgKmdjX3ByZXY7CiAgICAgICAgIFB5X3NzaXplX3QgZ2NfcmVmczsKICAgICB9IGdjOwotICAgIGxvbmcgZG91YmxlIGR1bW15OyAgLyogZm9yY2Ugd29yc3QtY2FzZSBhbGlnbm1lbnQgKi8KKyAgICBkb3VibGUgZHVtbXk7ICAvKiBmb3JjZSB3b3JzdC1jYXNlIGFsaWdubWVudCAqLwogfSBQeUdDX0hlYWQ7CiAKIGV4dGVybiBQeUdDX0hlYWQgKl9QeUdDX2dlbmVyYXRpb24wOwogCiAjZGVmaW5lIF9QeV9BU19HQyhvKSAoKFB5R0NfSGVhZCAqKShvKS0xKQogCisvKiBCaXQgMCBpcyBzZXQgd2hlbiB0cF9maW5hbGl6ZSBpcyBjYWxsZWQgKi8KKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCAgKDEgPDwgMCkKKy8qIFRoZSAoTi0xKSBtb3N0IHNpZ25pZmljYW50IGJpdHMgY29udGFpbiB0aGUgZ2Mgc3RhdGUgLyByZWZjb3VudCAqLworI2RlZmluZSBfUHlHQ19SRUZTX1NISUZUICAgICAgICAgICAoMSkKKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLICAgICAgICAgICAgKCgoc2l6ZV90KSAtMSkgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfUkVGUyhnKSAoKGcpLT5nYy5nY19yZWZzID4+IF9QeUdDX1JFRlNfU0hJRlQpCisjZGVmaW5lIF9QeUdDSGVhZF9TRVRfUkVGUyhnLCB2KSBkbyB7IFwKKyAgICAoZyktPmdjLmdjX3JlZnMgPSAoKGcpLT5nYy5nY19yZWZzICYgfl9QeUdDX1JFRlNfTUFTSykgXAorICAgICAgICB8ICh2IDw8IF9QeUdDX1JFRlNfU0hJRlQpOyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX1B5R0NIZWFkX0RFQ1JFRihnKSAoKGcpLT5nYy5nY19yZWZzIC09IDEgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfRklOQUxJWkVEKGcpICgoKGcpLT5nYy5nY19yZWZzICYgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgIT0gMCkKKyNkZWZpbmUgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoZywgdikgZG8geyAgXAorICAgIChnKS0+Z2MuZ2NfcmVmcyA9ICgoZyktPmdjLmdjX3JlZnMgJiB+X1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgXAorICAgICAgICB8ICh2ICE9IDApOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfUHlHQ19GSU5BTElaRUQobykgX1B5R0NIZWFkX0ZJTkFMSVpFRChfUHlfQVNfR0MobykpCisjZGVmaW5lIF9QeUdDX1NFVF9GSU5BTElaRUQobywgdikgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoX1B5X0FTX0dDKG8pLCB2KQorCisjZGVmaW5lIF9QeUdDX1JFRlMobykgX1B5R0NIZWFkX1JFRlMoX1B5X0FTX0dDKG8pKQorCiAjZGVmaW5lIF9QeUdDX1JFRlNfVU5UUkFDS0VEICAgICAgICAgICAgICAgICAgICAoLTIpCiAjZGVmaW5lIF9QeUdDX1JFRlNfUkVBQ0hBQkxFICAgICAgICAgICAgICAgICAgICAoLTMpCiAjZGVmaW5lIF9QeUdDX1JFRlNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUgICAgICAoLTQpCkBAIC0yNjQsOSArMjg4LDkgQEAKICAqIGNvbGxlY3RvciBpdCBtdXN0IGJlIHNhZmUgdG8gY2FsbCB0aGUgb2JfdHJhdmVyc2UgbWV0aG9kLiAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVFJBQ0sobykgZG8geyBcCiAgICAgUHlHQ19IZWFkICpnID0gX1B5X0FTX0dDKG8pOyBcCi0gICAgaWYgKGctPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKKyAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKICAgICAgICAgUHlfRmF0YWxFcnJvcigiR0Mgb2JqZWN0IGFscmVhZHkgdHJhY2tlZCIpOyBcCi0gICAgZy0+Z2MuZ2NfcmVmcyA9IF9QeUdDX1JFRlNfUkVBQ0hBQkxFOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfUkVBQ0hBQkxFKTsgXAogICAgIGctPmdjLmdjX25leHQgPSBfUHlHQ19nZW5lcmF0aW9uMDsgXAogICAgIGctPmdjLmdjX3ByZXYgPSBfUHlHQ19nZW5lcmF0aW9uMC0+Z2MuZ2NfcHJldjsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnOyBcCkBAIC0yNzksOCArMzAzLDggQEAKICAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVU5UUkFDSyhvKSBkbyB7IFwKICAgICBQeUdDX0hlYWQgKmcgPSBfUHlfQVNfR0Mobyk7IFwKLSAgICBhc3NlcnQoZy0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7IFwKLSAgICBnLT5nYy5nY19yZWZzID0gX1B5R0NfUkVGU19VTlRSQUNLRUQ7IFwKKyAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnLT5nYy5nY19uZXh0OyBcCiAgICAgZy0+Z2MuZ2NfbmV4dC0+Z2MuZ2NfcHJldiA9IGctPmdjLmdjX3ByZXY7IFwKICAgICBnLT5nYy5nY19uZXh0ID0gTlVMTDsgXApAQCAtMjg4LDcgKzMxMiw3IEBACiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBpcyBjdXJyZW50bHkgdHJhY2tlZCBieSB0aGUgR0MuICovCiAjZGVmaW5lIF9QeU9iamVjdF9HQ19JU19UUkFDS0VEKG8pIFwKLSAgICAoKF9QeV9BU19HQyhvKSktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCisgICAgKF9QeUdDX1JFRlMobykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBtYXkgYmUgdHJhY2tlZCBieSB0aGUgR0MgaW4gdGhlIGZ1dHVyZSwgb3IgYWxyZWFkeSBpcy4KICAgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBpbXBsZW1lbnQgc29tZSBvcHRpbWl6YXRpb25zLiAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vcGNvZGUuaCBiL0luY2x1ZGUvb3Bjb2RlLmgKaW5kZXggYTkwMTg0ZC4uMDkzNmYyZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vcGNvZGUuaAorKysgYi9JbmNsdWRlL29wY29kZS5oCkBAIC00OSw3ICs0OSw2IEBACiAjZGVmaW5lIEJJTkFSWV9PUiAgICAgICA2NgogI2RlZmluZSBJTlBMQUNFX1BPV0VSICAgNjcKICNkZWZpbmUgR0VUX0lURVIgICAgICAgIDY4Ci0jZGVmaW5lIFNUT1JFX0xPQ0FMUyAgICA2OQogI2RlZmluZSBQUklOVF9FWFBSICAgICAgNzAKICNkZWZpbmUgTE9BRF9CVUlMRF9DTEFTUyA3MQogI2RlZmluZSBZSUVMRF9GUk9NICAgICAgNzIKQEAgLTE0MCw2ICsxMzksNyBAQAogI2RlZmluZSBTRVRfQUREICAgICAgICAgMTQ2CiAjZGVmaW5lIE1BUF9BREQgICAgICAgICAxNDcKIAorI2RlZmluZSBMT0FEX0NMQVNTREVSRUYgICAxNDgKIAogLyogRVhDRVBUX0hBTkRMRVIgaXMgYSBzcGVjaWFsLCBpbXBsaWNpdCBibG9jayB0eXBlIHdoaWNoIGlzIGNyZWF0ZWQgd2hlbgogICAgZW50ZXJpbmcgYW4gZXhjZXB0IGhhbmRsZXIuIEl0IGlzIG5vdCBhbiBvcGNvZGUgYnV0IHdlIGRlZmluZSBpdCBoZXJlCmRpZmYgLS1naXQgYS9JbmNsdWRlL29zZGVmcy5oIGIvSW5jbHVkZS9vc2RlZnMuaAppbmRleCAwNWMwYzhlLi4wYzJlMzRiIDEwMDY0NAotLS0gYS9JbmNsdWRlL29zZGVmcy5oCisrKyBiL0luY2x1ZGUvb3NkZWZzLmgKQEAgLTksMTYgKzksMTAgQEAKIAogLyogTW9kIGJ5IGNocmlzaDogUU5YIGhhcyBXQVRDT00sIGJ1dCBpc24ndCBET1MgKi8KICNpZiAhZGVmaW5lZChfX1FOWF9fKQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pIHx8IGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKFBZT1NfT1MyKQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIE1BWFBBVEhMRU4gMjYwCi0jZGVmaW5lIFNFUCBMJy8nCi0jZGVmaW5lIEFMVFNFUCBMJ1xcJwotI2Vsc2UKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fREpHUFBfXykKICNkZWZpbmUgU0VQIEwnXFwnCiAjZGVmaW5lIEFMVFNFUCBMJy8nCiAjZGVmaW5lIE1BWFBBVEhMRU4gMjU2Ci0jZW5kaWYKICNkZWZpbmUgREVMSU0gTCc7JwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGFyc2V0b2suaCBiL0luY2x1ZGUvcGFyc2V0b2suaAppbmRleCA5MTFkZmMxLi4yYWNiODU0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3BhcnNldG9rLmgKKysrIGIvSW5jbHVkZS9wYXJzZXRvay5oCkBAIC0zOCwyOSArMzgsNDkgQEAKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZyhjb25zdCBjaGFyICosIGdyYW1tYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKik7CiBQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlIChGSUxFICosIGNvbnN0IGNoYXIgKiwgZ3JhbW1hciAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiwgcGVycmRldGFpbCAqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqKTsKIAogUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqLCBncmFtbWFyICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7Ci1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoRklMRSAqLCBjb25zdCBjaGFyICosCi0JCQkJCSAgIGNvbnN0IGNoYXIqLCBncmFtbWFyICosCi0JCQkJCQkgaW50LCBjaGFyICosIGNoYXIgKiwKLQkJCQkJCSBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoCisgICAgRklMRSAqZnAsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKmVuYywKKyAgICBncmFtbWFyICpnLAorICAgIGludCBzdGFydCwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBjb25zdCBjaGFyICplbmMsCiAgICAgZ3JhbW1hciAqZywKICAgICBpbnQgc3RhcnQsCi0gICAgY2hhciAqcHMxLAotICAgIGNoYXIgKnBzMiwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBjb25zdCBjaGFyICplbmMsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgY29uc3QgY2hhciAqcHMxLAorICAgIGNvbnN0IGNoYXIgKnBzMiwKICAgICBwZXJyZGV0YWlsICplcnJfcmV0LAogICAgIGludCAqZmxhZ3MpOwogCi1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKGNvbnN0IGNoYXIgKiwKLQkJCQkJICAgICAgY29uc3QgY2hhciAqLAotCQkJCQkgICAgICBncmFtbWFyICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKAorICAgIGNvbnN0IGNoYXIgKnMsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGdyYW1tYXIgKmcsCisgICAgaW50IHN0YXJ0LAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeCgKICAgICBjb25zdCBjaGFyICpzLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTY4LDYgKzg4LDEzIEBACiAgICAgaW50IHN0YXJ0LAogICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCiAgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqcywKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgcGVycmRldGFpbCAqZXJyX3JldCwKKyAgICBpbnQgKmZsYWdzKTsKIAogLyogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHB5dGhvbnJ1bi5jLAogICAgbm90IGluIHBhcnNldG9rLmMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGF0Y2hsZXZlbC5oIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKaW5kZXggNDE5NmM0NC4uNGU0MjY1YyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9wYXRjaGxldmVsLmgKKysrIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKQEAgLTE3LDEzICsxNywxMyBAQAogLyogVmVyc2lvbiBwYXJzZWQgb3V0IGludG8gbnVtZXJpYyB2YWx1ZXMgKi8KIC8qLS1zdGFydCBjb25zdGFudHMtLSovCiAjZGVmaW5lIFBZX01BSk9SX1ZFUlNJT04JMwotI2RlZmluZSBQWV9NSU5PUl9WRVJTSU9OCTMKLSNkZWZpbmUgUFlfTUlDUk9fVkVSU0lPTgk0Ci0jZGVmaW5lIFBZX1JFTEVBU0VfTEVWRUwJUFlfUkVMRUFTRV9MRVZFTF9GSU5BTAotI2RlZmluZSBQWV9SRUxFQVNFX1NFUklBTAkwCisjZGVmaW5lIFBZX01JTk9SX1ZFUlNJT04JNAorI2RlZmluZSBQWV9NSUNST19WRVJTSU9OCTAKKyNkZWZpbmUgUFlfUkVMRUFTRV9MRVZFTAlQWV9SRUxFQVNFX0xFVkVMX0dBTU1BCisjZGVmaW5lIFBZX1JFTEVBU0VfU0VSSUFMCTEKIAogLyogVmVyc2lvbiBhcyBhIHN0cmluZyAqLwotI2RlZmluZSBQWV9WRVJTSU9OICAgICAgCSIzLjMuNCsiCisjZGVmaW5lIFBZX1ZFUlNJT04gICAgICAJIjMuNC4wcmMxKyIKIC8qLS1lbmQgY29uc3RhbnRzLS0qLwogCiAvKiBWZXJzaW9uIGFzIGEgc2luZ2xlIDQtYnl0ZSBoZXggbnVtYmVyLCBlLmcuIDB4MDEwNTAyQjIgPT0gMS41LjJiMi4KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlkZWJ1Zy5oIGIvSW5jbHVkZS9weWRlYnVnLmgKaW5kZXggOTdjMmY4Yy4uOGZlOTgxOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWRlYnVnLmgKKysrIGIvSW5jbHVkZS9weWRlYnVnLmgKQEAgLTIwLDYgKzIwLDcgQEAKIFB5QVBJX0RBVEEoaW50KSBQeV9Ob1VzZXJTaXRlRGlyZWN0b3J5OwogUHlBUElfREFUQShpbnQpIFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWc7CiBQeUFQSV9EQVRBKGludCkgUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnOworUHlBUElfREFUQShpbnQpIFB5X0lzb2xhdGVkRmxhZzsKIAogLyogdGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGdldGVudigpIHRoYXQgcGF5cyBhdHRlbnRpb24gdG8KICAgIFB5X0lnbm9yZUVudmlyb25tZW50RmxhZy4gIEl0IHNob3VsZCBiZSB1c2VkIGZvciBnZXR0aW5nIHZhcmlhYmxlcyBsaWtlCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5ZXJyb3JzLmggYi9JbmNsdWRlL3B5ZXJyb3JzLmgKaW5kZXggZTM4NTEyMy4uZTQ0ZmI1ZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWVycm9ycy5oCisrKyBiL0luY2x1ZGUvcHllcnJvcnMuaApAQCAtNTMsNiArNTMsNyBAQAogICAgIFB5T2JqZWN0ICpteWVycm5vOwogICAgIFB5T2JqZWN0ICpzdHJlcnJvcjsKICAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lMjsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlPYmplY3QgKndpbmVycm9yOwogI2VuZGlmCkBAIC03NSw2ICs3Niw5IEBACiAKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfU2V0Tm9uZShQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfU2V0T2JqZWN0KFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyh2b2lkKSBfUHlFcnJfU2V0S2V5RXJyb3IoUHlPYmplY3QgKik7CisjZW5kaWYKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfU2V0U3RyaW5nKAogICAgIFB5T2JqZWN0ICpleGNlcHRpb24sCiAgICAgY29uc3QgY2hhciAqc3RyaW5nICAgLyogZGVjb2RlZCBmcm9tIHV0Zi04ICovCkBAIC0xOTgsOSArMjAyLDYgQEAKICNpZmRlZiBNU19XSU5ET1dTCiBQeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX1dpbmRvd3NFcnJvcjsKICNlbmRpZgotI2lmZGVmIF9fVk1TCi1QeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX1ZNU0Vycm9yOwotI2VuZGlmCiAKIFB5QVBJX0RBVEEoUHlPYmplY3QgKikgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0OwogCkBAIC0yMjUsNiArMjI2LDggQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbUVycm5vKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoCiAgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoCisgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZSgKICAgICBQeU9iamVjdCAqZXhjLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCkBAIC0yNTMsNiArMjU2LDggQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoaW50KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCiAgICAgUHlPYmplY3QgKixpbnQsIFB5T2JqZWN0ICopOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoCisgICAgUHlPYmplY3QgKixpbnQsIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZSgKICAgICBQeU9iamVjdCAqZXhjLAogICAgIGludCBpZXJyLApAQCAtMjg0LDYgKzI4OSwyOCBAQAogICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRvYywgUHlPYmplY3QgKmJhc2UsIFB5T2JqZWN0ICpkaWN0KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKFB5T2JqZWN0ICopOwogCisvKiBJbiBleGNlcHRpb25zLmMgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKy8qIEhlbHBlciB0aGF0IGF0dGVtcHRzIHRvIHJlcGxhY2UgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIHdpdGggb25lIG9mIHRoZQorICogc2FtZSB0eXBlIGJ1dCB3aXRoIGEgcHJlZml4IGFkZGVkIHRvIHRoZSBleGNlcHRpb24gdGV4dC4gVGhlIHJlc3VsdGluZworICogZXhjZXB0aW9uIGRlc2NyaXB0aW9uIGxvb2tzIGxpa2U6CisgKgorICogICAgIHByZWZpeCAoZXhjX3R5cGU6IG9yaWdpbmFsX2V4Y19zdHIpCisgKgorICogT25seSBzb21lIGV4Y2VwdGlvbnMgY2FuIGJlIHNhZmVseSByZXBsYWNlZC4gSWYgdGhlIGZ1bmN0aW9uIGRldGVybWluZXMKKyAqIGl0IGlzbid0IHNhZmUgdG8gcGVyZm9ybSB0aGUgcmVwbGFjZW1lbnQsIGl0IHdpbGwgbGVhdmUgdGhlIG9yaWdpbmFsCisgKiB1bm1vZGlmaWVkIGV4Y2VwdGlvbiBpbiBwbGFjZS4KKyAqCisgKiBSZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIHRoZSBuZXcgZXhjZXB0aW9uIChpZiBhbnkpLCBOVUxMIGlmIHRoZQorICogZXhpc3RpbmcgZXhjZXB0aW9uIHdhcyBsZWZ0IGluIHBsYWNlLgorICovCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUVycl9UcnlTZXRGcm9tQ2F1c2UoCisgICAgY29uc3QgY2hhciAqcHJlZml4X2Zvcm1hdCwgICAvKiBBU0NJSS1lbmNvZGVkIHN0cmluZyAgKi8KKyAgICAuLi4KKyAgICApOworI2VuZGlmCisKKwogLyogSW4gc2lnY2hlY2suYyBvciBzaWduYWxtb2R1bGUuYyAqLwogUHlBUElfRlVOQyhpbnQpIFB5RXJyX0NoZWNrU2lnbmFscyh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfU2V0SW50ZXJydXB0KHZvaWQpOwpAQCAtMzAxLDkgKzMyOCwyMCBAQAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBpbnQgbGluZW5vLAogICAgIGludCBjb2xfb2Zmc2V0KTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkModm9pZCkgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGludCBsaW5lbm8sCisgICAgaW50IGNvbF9vZmZzZXQpOworI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1Byb2dyYW1UZXh0KAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBpbnQgbGluZW5vKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfUHJvZ3JhbVRleHRPYmplY3QoCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGludCBsaW5lbm8pOworI2VuZGlmCiAKIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgbW9kaWZ5IHVuaWNvZGUKICAgIGV4Y2VwdGlvbnMgZnJvbSBDICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5aGFzaC5oIGIvSW5jbHVkZS9weWhhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2NhOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9weWhhc2guaApAQCAtMCwwICsxLDE0OSBAQAorI2lmbmRlZiBQeV9IQVNIX0gKKworI2RlZmluZSBQeV9IQVNIX0gKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogSGVscGVycyBmb3IgaGFzaCBmdW5jdGlvbnMgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaERvdWJsZShkb3VibGUpOworUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoUG9pbnRlcih2b2lkKik7CitQeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hCeXRlcyhjb25zdCB2b2lkKiwgUHlfc3NpemVfdCk7CisjZW5kaWYKKworLyogUHJpbWUgbXVsdGlwbGllciB1c2VkIGluIHN0cmluZyBhbmQgdmFyaW91cyBvdGhlciBoYXNoZXMuICovCisjZGVmaW5lIF9QeUhBU0hfTVVMVElQTElFUiAxMDAwMDAzVUwgIC8qIDB4ZjQyNDMgKi8KKworLyogUGFyYW1ldGVycyB1c2VkIGZvciB0aGUgbnVtZXJpYyBoYXNoIGltcGxlbWVudGF0aW9uLiAgU2VlIG5vdGVzIGZvcgorICAgX1B5X0hhc2hEb3VibGUgaW4gT2JqZWN0cy9vYmplY3QuYy4gIE51bWVyaWMgaGFzaGVzIGFyZSBiYXNlZCBvbgorICAgcmVkdWN0aW9uIG1vZHVsbyB0aGUgcHJpbWUgMioqX1B5SEFTSF9CSVRTIC0gMS4gKi8KKworI2lmIFNJWkVPRl9WT0lEX1AgPj0gOAorIyAgZGVmaW5lIF9QeUhBU0hfQklUUyA2MQorI2Vsc2UKKyMgIGRlZmluZSBfUHlIQVNIX0JJVFMgMzEKKyNlbmRpZgorCisjZGVmaW5lIF9QeUhBU0hfTU9EVUxVUyAoKChzaXplX3QpMSA8PCBfUHlIQVNIX0JJVFMpIC0gMSkKKyNkZWZpbmUgX1B5SEFTSF9JTkYgMzE0MTU5CisjZGVmaW5lIF9QeUhBU0hfTkFOIDAKKyNkZWZpbmUgX1B5SEFTSF9JTUFHIF9QeUhBU0hfTVVMVElQTElFUgorCisKKy8qIGhhc2ggc2VjcmV0CisgKgorICogbWVtb3J5IGxheW91dCBvbiA2NCBiaXQgc3lzdGVtcworICogICBjY2NjY2NjYyBjY2NjY2NjYyBjY2NjY2NjYyAgdWMgLS0gdW5zaWduZWQgY2hhclsyNF0KKyAqICAgcHBwcHBwcHAgc3Nzc3Nzc3MgLi4uLi4uLi4gIGZudiAtLSB0d28gUHlfaGFzaF90CisgKiAgIGswazBrMGswIGsxazFrMWsxIC4uLi4uLi4uICBzaXBoYXNoIC0tIHR3byBQWV9VSU5UNjRfVAorICogICAuLi4uLi4uLiAuLi4uLi4uLiBzc3Nzc3NzcyAgZGpieDMzYSAtLSAxNiBieXRlcyBwYWRkaW5nICsgb25lIFB5X2hhc2hfdAorICogICAuLi4uLi4uLiAuLi4uLi4uLiBlZWVlZWVlZSAgcHlleHBhdCBYTUwgaGFzaCBzYWx0CisgKgorICogbWVtb3J5IGxheW91dCBvbiAzMiBiaXQgc3lzdGVtcworICogICBjY2NjY2NjYyBjY2NjY2NjYyBjY2NjY2NjYyAgdWMKKyAqICAgcHBwcHNzc3MgLi4uLi4uLi4gLi4uLi4uLi4gIGZudiAtLSB0d28gUHlfaGFzaF90CisgKiAgIGswazBrMGswIGsxazFrMWsxIC4uLi4uLi4uICBzaXBoYXNoIC0tIHR3byBQWV9VSU5UNjRfVCAoKikKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gc3Nzcy4uLi4gIGRqYngzM2EgLS0gMTYgYnl0ZXMgcGFkZGluZyArIG9uZSBQeV9oYXNoX3QKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gZWVlZS4uLi4gIHB5ZXhwYXQgWE1MIGhhc2ggc2FsdAorICoKKyAqICgqKSBUaGUgc2lwaGFzaCBtZW1iZXIgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gMzIgYml0IHBsYXRmb3JtcyB3aXRob3V0CisgKiAgICAgYW4gdW5zaWduZWQgaW50NjQgZGF0YSB0eXBlLgorICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCit0eXBlZGVmIHVuaW9uIHsKKyAgICAvKiBlbnN1cmUgMjQgYnl0ZXMgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHVjWzI0XTsKKyAgICAvKiB0d28gUHlfaGFzaF90IGZvciBGTlYgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICBQeV9oYXNoX3QgcHJlZml4OworICAgICAgICBQeV9oYXNoX3Qgc3VmZml4OworICAgIH0gZm52OworI2lmZGVmIFBZX1VJTlQ2NF9UCisgICAgLyogdHdvIHVpbnQ2NCBmb3IgU2lwSGFzaDI0ICovCisgICAgc3RydWN0IHsKKyAgICAgICAgUFlfVUlOVDY0X1QgazA7CisgICAgICAgIFBZX1VJTlQ2NF9UIGsxOworICAgIH0gc2lwaGFzaDsKKyNlbmRpZgorICAgIC8qIGEgZGlmZmVyZW50ICghKSBQeV9oYXNoX3QgZm9yIHNtYWxsIHN0cmluZyBvcHRpbWl6YXRpb24gKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHBhZGRpbmdbMTZdOworICAgICAgICBQeV9oYXNoX3Qgc3VmZml4OworICAgIH0gZGpieDMzYTsKKyAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHBhZGRpbmdbMTZdOworICAgICAgICBQeV9oYXNoX3QgaGFzaHNhbHQ7CisgICAgfSBleHBhdDsKK30gX1B5X0hhc2hTZWNyZXRfdDsKK1B5QVBJX0RBVEEoX1B5X0hhc2hTZWNyZXRfdCkgX1B5X0hhc2hTZWNyZXQ7CisjZW5kaWYKKworI2lmZGVmIFB5X0RFQlVHCitQeUFQSV9EQVRBKGludCkgX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQ7CisjZW5kaWYKKworCisvKiBoYXNoIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeV9oYXNoX3QgKCpjb25zdCBoYXNoKShjb25zdCB2b2lkICosIFB5X3NzaXplX3QpOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgY29uc3QgaW50IGhhc2hfYml0czsKKyAgICBjb25zdCBpbnQgc2VlZF9iaXRzOworfSBQeUhhc2hfRnVuY0RlZjsKKworUHlBUElfRlVOQyhQeUhhc2hfRnVuY0RlZiopIFB5SGFzaF9HZXRGdW5jRGVmKHZvaWQpOworI2VuZGlmCisKKworLyogY3V0b2ZmIGZvciBzbWFsbCBzdHJpbmcgREpCWDMzQSBvcHRpbWl6YXRpb24gaW4gcmFuZ2UgWzEsIGN1dG9mZikuCisgKgorICogQWJvdXQgNTAlIG9mIHRoZSBzdHJpbmdzIGluIGEgdHlwaWNhbCBQeXRob24gYXBwbGljYXRpb24gYXJlIHNtYWxsZXIgdGhhbgorICogNiB0byA3IGNoYXJzLiBIb3dldmVyIERKQlgzM0EgaXMgdnVsbmVyYWJsZSB0byBoYXNoIGNvbGxpc2lvbiBhdHRhY2tzLgorICogTkVWRVIgdXNlIERKQlgzM0EgZm9yIGxvbmcgc3RyaW5ncyEKKyAqCisgKiBBIFB5X0hBU0hfQ1VUT0ZGIG9mIDAgZGlzYWJsZXMgc21hbGwgc3RyaW5nIG9wdGltaXphdGlvbi4gMzIgYml0IHBsYXRmb3JtcworICogc2hvdWxkIHVzZSBhIHNtYWxsZXIgY3V0b2ZmIGJlY2F1c2UgaXQgaXMgZWFzaWVyIHRvIGNyZWF0ZSBjb2xsaWRpbmcKKyAqIHN0cmluZ3MuIEEgY3V0b2ZmIG9mIDcgb24gNjRiaXQgcGxhdGZvcm1zIGFuZCA1IG9uIDMyYml0IHBsYXRmb3JtcyBzaG91bGQKKyAqIHByb3ZpZGUgYSBkZWNlbnQgc2FmZXR5IG1hcmdpbi4KKyAqLworI2lmbmRlZiBQeV9IQVNIX0NVVE9GRgorIyAgZGVmaW5lIFB5X0hBU0hfQ1VUT0ZGIDAKKyNlbGlmIChQeV9IQVNIX0NVVE9GRiA+IDcgfHwgUHlfSEFTSF9DVVRPRkYgPCAwKQorIyAgZXJyb3IgUHlfSEFTSF9DVVRPRkYgbXVzdCBpbiByYW5nZSAwLi4uNy4KKyNlbmRpZiAvKiBQeV9IQVNIX0NVVE9GRiAqLworCisKKy8qIGhhc2ggYWxnb3JpdGhtIHNlbGVjdGlvbgorICoKKyAqIFRoZSB2YWx1ZXMgZm9yIFB5X0hBU0hfU0lQSEFTSDI0IGFuZCBQeV9IQVNIX0ZOViBhcmUgaGFyZC1jb2RlZCBpbiB0aGUKKyAqIGNvbmZpZ3VyZSBzY3JpcHQuCisgKgorICogLSBGTlYgaXMgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgYW5kIGFyY2hpdGVjdHVyZXMuCisgKiAtIFNJUEhBU0gyNCBvbmx5IHdvcmtzIG9uIHBsYWZvcm1zIHRoYXQgcHJvdmlkZSBQWV9VSU5UNjRfVCBhbmQgZG9lc24ndAorICogICByZXF1aXJlIGFsaWduZWQgbWVtb3J5IGZvciBpbnRlZ2Vycy4KKyAqIC0gV2l0aCBFWFRFUk5BTCBlbWJlZGRlcnMgY2FuIHByb3ZpZGUgYW4gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24gd2l0aDo6CisgKgorICogICAgIFB5SGFzaF9GdW5jRGVmIFB5SGFzaF9GdW5jID0gey4uLn07CisgKgorICogWFhYOiBGaWd1cmUgb3V0IF9fZGVjbHNwZWMoKSBmb3IgZXh0ZXJuIFB5SGFzaF9GdW5jRGVmLgorICovCisjZGVmaW5lIFB5X0hBU0hfRVhURVJOQUwgMAorI2RlZmluZSBQeV9IQVNIX1NJUEhBU0gyNCAxCisjZGVmaW5lIFB5X0hBU0hfRk5WIDIKKworI2lmbmRlZiBQeV9IQVNIX0FMR09SSVRITQorIyAgaWYgKGRlZmluZWQoUFlfVUlOVDY0X1QpICYmIGRlZmluZWQoUFlfVUlOVDMyX1QpIFwKKyAgICAgICAmJiAhZGVmaW5lZChIQVZFX0FMSUdORURfUkVRVUlSRUQpKQorIyAgICBkZWZpbmUgUHlfSEFTSF9BTEdPUklUSE0gUHlfSEFTSF9TSVBIQVNIMjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFB5X0hBU0hfQUxHT1JJVEhNIFB5X0hBU0hfRk5WCisjICBlbmRpZiAvKiB1aW50NjRfdCAmJiB1aW50MzJfdCAmJiBhbGlnbmVkICovCisjZW5kaWYgLyogUHlfSEFTSF9BTEdPUklUSE0gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qICFQeV9IQVNIX0ggKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHltYWNyby5oIGIvSW5jbHVkZS9weW1hY3JvLmgKaW5kZXggNzkzZjY3ZC4uNzk5N2M1NSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1hY3JvLmgKKysrIGIvSW5jbHVkZS9weW1hY3JvLmgKQEAgLTY5LDQgKzY5LDEwIEBACiAvKiBDaGVjayBpZiBwb2ludGVyICJwIiBpcyBhbGlnbmVkIHRvICJhIi1ieXRlcyBib3VuZGFyeS4gKi8KICNkZWZpbmUgX1B5X0lTX0FMSUdORUQocCwgYSkgKCEoKFB5X3VpbnRwdHJfdCkocCkgJiAoUHlfdWludHB0cl90KSgoYSkgLSAxKSkpCiAKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBQeV9VTlVTRUQobmFtZSkgX3VudXNlZF8gIyMgbmFtZSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorI2Vsc2UKKyNkZWZpbmUgUHlfVU5VU0VEKG5hbWUpIF91bnVzZWRfICMjIG5hbWUKKyNlbmRpZgorCiAjZW5kaWYgLyogUHlfUFlNQUNST19IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWVtLmggYi9JbmNsdWRlL3B5bWVtLmgKaW5kZXggMTBiNWJlYS4uMjM3MmI4NiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1lbS5oCisrKyBiL0luY2x1ZGUvcHltZW0uaApAQCAtMTEsNiArMTEsMTMgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cik7CisjZW5kaWYKKworCiAvKiBCRVdBUkU6CiAKICAgIEVhY2ggaW50ZXJmYWNlIGV4cG9ydHMgYm90aCBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4gIEV4dGVuc2lvbiBtb2R1bGVzIHNob3VsZApAQCAtNDksMjEgKzU2LDE2IEBACiAgICBwZXJmb3JtZWQgb24gZmFpbHVyZSAobm8gZXhjZXB0aW9uIGlzIHNldCwgbm8gd2FybmluZyBpcyBwcmludGVkLCBldGMpLgogKi8KIAotUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX01hbGxvYyhzaXplX3QpOwotUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1JlYWxsb2Modm9pZCAqLCBzaXplX3QpOwotUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9GcmVlKHZvaWQgKik7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlNZW1fTWFsbG9jKHNpemVfdCBzaXplKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fRnJlZSh2b2lkICpwdHIpOwogCi0vKiBTdGFydGluZyBmcm9tIFB5dGhvbiAxLjYsIHRoZSB3cmFwcGVycyBQeV97TWFsbG9jLFJlYWxsb2MsRnJlZX0gYXJlCi0gICBubyBsb25nZXIgc3VwcG9ydGVkLiBUaGV5IHVzZWQgdG8gY2FsbCBQeUVycl9Ob01lbW9yeSgpIG9uIGZhaWx1cmUuICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGNoYXIgKikgX1B5TWVtX1Jhd1N0cmR1cChjb25zdCBjaGFyICpzdHIpOworUHlBUElfRlVOQyhjaGFyICopIF9QeU1lbV9TdHJkdXAoY29uc3QgY2hhciAqc3RyKTsKKyNlbmRpZgogCiAvKiBNYWNyb3MuICovCi0jaWZkZWYgUFlNQUxMT0NfREVCVUcKLS8qIFJlZGlyZWN0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyB0byBQeXRob24ncyBkZWJ1Z2dpbmcgYWxsb2NhdG9yLiAqLwotI2RlZmluZSBQeU1lbV9NQUxMT0MJCV9QeU1lbV9EZWJ1Z01hbGxvYwotI2RlZmluZSBQeU1lbV9SRUFMTE9DCQlfUHlNZW1fRGVidWdSZWFsbG9jCi0jZGVmaW5lIFB5TWVtX0ZSRUUJCV9QeU1lbV9EZWJ1Z0ZyZWUKLQotI2Vsc2UJLyogISBQWU1BTExPQ19ERUJVRyAqLwogCiAvKiBQeU1lbV9NQUxMT0MoMCkgbWVhbnMgbWFsbG9jKDEpLiBTb21lIHN5c3RlbXMgd291bGQgcmV0dXJuIE5VTEwKICAgIGZvciBtYWxsb2MoMCksIHdoaWNoIHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuIFNvbWUgcGxhdGZvcm1zCkBAIC03MSwxMyArNzMsOSBAQAogICAgcHltYWxsb2MuIFRvIHNvbHZlIHRoZXNlIHByb2JsZW1zLCBhbGxvY2F0ZSBhbiBleHRyYSBieXRlLiAqLwogLyogUmV0dXJucyBOVUxMIHRvIGluZGljYXRlIGVycm9yIGlmIGEgbmVnYXRpdmUgc2l6ZSBvciBzaXplIGxhcmdlciB0aGFuCiAgICBQeV9zc2l6ZV90IGNhbiByZXByZXNlbnQgaXMgc3VwcGxpZWQuICBIZWxwcyBwcmV2ZW50cyBzZWN1cml0eSBob2xlcy4gKi8KLSNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pCQkoKHNpemVfdCkobikgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYID8gTlVMTCBcCi0JCQkJOiBtYWxsb2MoKG4pID8gKG4pIDogMSkpCi0jZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikJKChzaXplX3QpKG4pID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAgPyBOVUxMIFwKLQkJCQk6IHJlYWxsb2MoKHApLCAobikgPyAobikgOiAxKSkKLSNkZWZpbmUgUHlNZW1fRlJFRQkJZnJlZQotCi0jZW5kaWYJLyogUFlNQUxMT0NfREVCVUcgKi8KKyNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pICAgICAgICAgUHlNZW1fTWFsbG9jKG4pCisjZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikgICAgIFB5TWVtX1JlYWxsb2MocCwgbikKKyNkZWZpbmUgUHlNZW1fRlJFRShwKSAgICAgICAgICAgUHlNZW1fRnJlZShwKQogCiAvKgogICogVHlwZS1vcmllbnRlZCBtZW1vcnkgaW50ZXJmYWNlCkBAIC0xMTUsNiArMTEzLDY5IEBACiAjZGVmaW5lIFB5TWVtX0RlbAkJUHlNZW1fRnJlZQogI2RlZmluZSBQeU1lbV9ERUwJCVB5TWVtX0ZSRUUKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBlbnVtIHsKKyAgICAvKiBQeU1lbV9SYXdNYWxsb2MoKSwgUHlNZW1fUmF3UmVhbGxvYygpIGFuZCBQeU1lbV9SYXdGcmVlKCkgKi8KKyAgICBQWU1FTV9ET01BSU5fUkFXLAorCisgICAgLyogUHlNZW1fTWFsbG9jKCksIFB5TWVtX1JlYWxsb2MoKSBhbmQgUHlNZW1fRnJlZSgpICovCisgICAgUFlNRU1fRE9NQUlOX01FTSwKKworICAgIC8qIFB5T2JqZWN0X01hbGxvYygpLCBQeU9iamVjdF9SZWFsbG9jKCkgYW5kIFB5T2JqZWN0X0ZyZWUoKSAqLworICAgIFBZTUVNX0RPTUFJTl9PQkoKK30gUHlNZW1BbGxvY2F0b3JEb21haW47CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgMyBmdW5jdGlvbnMgKi8KKyAgICB2b2lkICpjdHg7CisKKyAgICAvKiBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQqICgqbWFsbG9jKSAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiBhbGxvY2F0ZSBvciByZXNpemUgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkKiAoKnJlYWxsb2MpICh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKTsKKworICAgIC8qIHJlbGVhc2UgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkICgqZnJlZSkgKHZvaWQgKmN0eCwgdm9pZCAqcHRyKTsKK30gUHlNZW1BbGxvY2F0b3I7CisKKy8qIEdldCB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciBvZiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fR2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpOworCisvKiBTZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKyAgIFRoZSBuZXcgYWxsb2NhdG9yIG11c3QgcmV0dXJuIGEgZGlzdGluY3Qgbm9uLU5VTEwgcG9pbnRlciB3aGVuIHJlcXVlc3RpbmcKKyAgIHplcm8gYnl0ZXMuCisKKyAgIEZvciB0aGUgUFlNRU1fRE9NQUlOX1JBVyBkb21haW4sIHRoZSBhbGxvY2F0b3IgbXVzdCBiZSB0aHJlYWQtc2FmZTogdGhlIEdJTAorICAgaXMgbm90IGhlbGQgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNhbGxlZC4KKworICAgSWYgdGhlIG5ldyBhbGxvY2F0b3IgaXMgbm90IGEgaG9vayAoZG9uJ3QgY2FsbCB0aGUgcHJldmlvdXMgYWxsb2NhdG9yKSwgdGhlCisgICBQeU1lbV9TZXR1cERlYnVnSG9va3MoKSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byByZWluc3RhbGwgdGhlIGRlYnVnIGhvb2tzCisgICBvbiB0b3Agb24gdGhlIG5ldyBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5TWVtX1NldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKworLyogU2V0dXAgaG9va3MgdG8gZGV0ZWN0IGJ1Z3MgaW4gdGhlIGZvbGxvd2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRvcgorICAgZnVuY3Rpb25zOgorCisgICAtIFB5TWVtX1Jhd01hbGxvYygpLCBQeU1lbV9SYXdSZWFsbG9jKCksIFB5TWVtX1Jhd0ZyZWUoKQorICAgLSBQeU1lbV9NYWxsb2MoKSwgUHlNZW1fUmVhbGxvYygpLCBQeU1lbV9GcmVlKCkKKyAgIC0gUHlPYmplY3RfTWFsbG9jKCksIFB5T2JqZWN0X1JlYWxsb2MoKSBhbmQgUHlPYmplY3RfRnJlZSgpCisKKyAgIE5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZmlsbGVkIHdpdGggdGhlIGJ5dGUgMHhDQiwgZnJlZWQgbWVtb3J5IGlzIGZpbGxlZAorICAgd2l0aCB0aGUgYnl0ZSAweERCLiBBZGRpdGlvbm5hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogUHlPYmplY3RfRnJlZSgpIGNhbGxlZCBvbiBhIGJ1ZmZlciBhbGxvY2F0ZWQKKyAgICAgYnkgUHlNZW1fTWFsbG9jKCkKKyAgIC0gZGV0ZWN0IHdyaXRlIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoYnVmZmVyIHVuZGVyZmxvdykKKyAgIC0gZGV0ZWN0IHdyaXRlIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAoYnVmZmVyIG92ZXJmbG93KQorCisgICBUaGUgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGlmIFB5dGhvbiBpcyBub3QgY29tcGlsZWQgaXMgZGVidWcgbW9kZS4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpOworI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5cG9ydC5oIGIvSW5jbHVkZS9weXBvcnQuaAppbmRleCBhNWVkZWE5Li5jNzA2MjEzIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5cG9ydC5oCisrKyBiL0luY2x1ZGUvcHlwb3J0LmgKQEAgLTE0NCwyMyArMTQ0LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLS8qIFByaW1lIG11bHRpcGxpZXIgdXNlZCBpbiBzdHJpbmcgYW5kIHZhcmlvdXMgb3RoZXIgaGFzaGVzLiAqLwotI2RlZmluZSBfUHlIQVNIX01VTFRJUExJRVIgMTAwMDAwM1VMICAvKiAweGY0MjQzICovCi0KLS8qIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIG51bWVyaWMgaGFzaCBpbXBsZW1lbnRhdGlvbi4gIFNlZSBub3RlcyBmb3IKLSAgIF9QeV9IYXNoRG91YmxlIGluIE9iamVjdHMvb2JqZWN0LmMuICBOdW1lcmljIGhhc2hlcyBhcmUgYmFzZWQgb24KLSAgIHJlZHVjdGlvbiBtb2R1bG8gdGhlIHByaW1lIDIqKl9QeUhBU0hfQklUUyAtIDEuICovCi0KLSNpZiBTSVpFT0ZfVk9JRF9QID49IDgKLSNkZWZpbmUgX1B5SEFTSF9CSVRTIDYxCi0jZWxzZQotI2RlZmluZSBfUHlIQVNIX0JJVFMgMzEKLSNlbmRpZgotI2RlZmluZSBfUHlIQVNIX01PRFVMVVMgKCgoc2l6ZV90KTEgPDwgX1B5SEFTSF9CSVRTKSAtIDEpCi0jZGVmaW5lIF9QeUhBU0hfSU5GIDMxNDE1OQotI2RlZmluZSBfUHlIQVNIX05BTiAwCi0jZGVmaW5lIF9QeUhBU0hfSU1BRyBfUHlIQVNIX01VTFRJUExJRVIKLQogLyogdWludHB0cl90IGlzIHRoZSBDOVggbmFtZSBmb3IgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSBzdWNoIHRoYXQgYQogICogbGVnaXRpbWF0ZSB2b2lkKiBjYW4gYmUgY2FzdCB0byB1aW50cHRyX3QgYW5kIHRoZW4gYmFjayB0byB2b2lkKiBhZ2FpbgogICogd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9uLiAgU2ltaWxhcmx5IGZvciBpbnRwdHJfdCwgd3J0IGEgc2lnbmVkCkBAIC0xOTksMTAgKzE4MiwxOSBAQAogI2VuZGlmCiAKIC8qIFB5X2hhc2hfdCBpcyB0aGUgc2FtZSBzaXplIGFzIGEgcG9pbnRlci4gKi8KKyNkZWZpbmUgU0laRU9GX1BZX0hBU0hfVCBTSVpFT0ZfU0laRV9UCiB0eXBlZGVmIFB5X3NzaXplX3QgUHlfaGFzaF90OwogLyogUHlfdWhhc2hfdCBpcyB0aGUgdW5zaWduZWQgZXF1aXZhbGVudCBuZWVkZWQgdG8gY2FsY3VsYXRlIG51bWVyaWMgaGFzaC4gKi8KKyNkZWZpbmUgU0laRU9GX1BZX1VIQVNIX1QgU0laRU9GX1NJWkVfVAogdHlwZWRlZiBzaXplX3QgUHlfdWhhc2hfdDsKIAorLyogT25seSB1c2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggY29kZSB0aGF0IG1heSBub3QgYmUgUFlfU1NJWkVfVF9DTEVBTi4gKi8KKyNpZmRlZiBQWV9TU0laRV9UX0NMRUFOCit0eXBlZGVmIFB5X3NzaXplX3QgUHlfc3NpemVfY2xlYW5fdDsKKyNlbHNlCit0eXBlZGVmIGludCBQeV9zc2l6ZV9jbGVhbl90OworI2VuZGlmCisKIC8qIExhcmdlc3QgcG9zc2libGUgdmFsdWUgb2Ygc2l6ZV90LgogICAgU0laRV9NQVggaXMgcGFydCBvZiBDOTksIHNvIGl0IG1pZ2h0IGJlIGRlZmluZWQgb24gc29tZQogICAgcGxhdGZvcm1zLiBJZiBpdCBpcyBub3QgZGVmaW5lZCwgKHNpemVfdCktMSBpcyBhIHBvcnRhYmxlCkBAIC0yMTksMTAgKzIxMSw2IEBACiAvKiBTbWFsbGVzdCBuZWdhdGl2ZSB2YWx1ZSBvZiB0eXBlIFB5X3NzaXplX3QuICovCiAjZGVmaW5lIFBZX1NTSVpFX1RfTUlOICgtUFlfU1NJWkVfVF9NQVgtMSkKIAotI2lmIFNJWkVPRl9QSURfVCA+IFNJWkVPRl9MT05HCi0jICAgZXJyb3IgIlB5dGhvbiBkb2Vzbid0IHN1cHBvcnQgc2l6ZW9mKHBpZF90KSA+IHNpemVvZihsb25nKSIKLSNlbmRpZgotCiAvKiBQWV9GT1JNQVRfU0laRV9UIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgbW9kaWZpZXIgZm9yIHVzZSBpbiBhIHByaW50ZgogICogZm9ybWF0IHRvIGNvbnZlcnQgYW4gYXJndW1lbnQgd2l0aCB0aGUgd2lkdGggb2YgYSBzaXplX3Qgb3IgUHlfc3NpemVfdC4KICAqIEM5OSBpbnRyb2R1Y2VkICJ6IiBmb3IgdGhpcyBwdXJwb3NlLCBidXQgbm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCB0aGF0OwpAQCAtMjY3LDcgKzI1NSw3IEBACiAgKi8KICNpZmRlZiBIQVZFX0xPTkdfTE9ORwogIyAgIGlmbmRlZiBQWV9GT1JNQVRfTE9OR19MT05HCi0jICAgICAgIGlmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyMgICAgICAgaWZkZWYgTVNfV0lORE9XUwogIyAgICAgICAgICAgZGVmaW5lIFBZX0ZPUk1BVF9MT05HX0xPTkcgIkk2NCIKICMgICAgICAgZWxzZQogIyAgICAgICAgICAgZXJyb3IgIlRoaXMgcGxhdGZvcm0ncyBweWNvbmZpZy5oIG5lZWRzIHRvIGRlZmluZSBQWV9GT1JNQVRfTE9OR19MT05HIgpAQCAtMzkyLDE3ICszODAsMjAgQEAKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjZWxpZiBkZWZpbmVkKEhBVkVfU1RBVF9IKQogI2luY2x1ZGUgPHN0YXQuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKQorI2lmbmRlZiBTX0lGTVQKIC8qIFZpc3VhbEFnZSBDL0MrKyBGYWlsZWQgdG8gRGVmaW5lIE1vdW50VHlwZSBGaWVsZCBpbiBzeXMvc3RhdC5oICovCi0jZGVmaW5lIFNfSUZNVCAoU19JRkRJUnxTX0lGQ0hSfFNfSUZSRUcpCisjZGVmaW5lIFNfSUZNVCAwMTcwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGTE5LCisvKiBXaW5kb3dzIGRvZXNuJ3QgZGVmaW5lIFNfSUZMTksgYnV0IHBvc2l4bW9kdWxlLmMgbWFwcworICogSU9fUkVQQVJTRV9UQUdfU1lNTElOSyB0byBTX0lGTE5LICovCisjICBkZWZpbmUgU19JRkxOSyAwMTIwMDAwCiAjZW5kaWYKIAogI2lmbmRlZiBTX0lTUkVHCkBAIC00MTMsNiArNDA0LDkgQEAKICNkZWZpbmUgU19JU0RJUih4KSAoKCh4KSAmIFNfSUZNVCkgPT0gU19JRkRJUikKICNlbmRpZgogCisjaWZuZGVmIFNfSVNDSFIKKyNkZWZpbmUgU19JU0NIUih4KSAoKCh4KSAmIFNfSUZNVCkgPT0gU19JRkNIUikKKyNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIC8qIE1vdmUgdGhpcyBkb3duIGhlcmUgc2luY2Ugc29tZSBDKysgI2luY2x1ZGUncyBkb24ndCBsaWtlIHRvIGJlIGluY2x1ZGVkCkBAIC04MzUsMTUgKzgyOSw2IEBACiAjZW5kaWYKIAogLyoKLSAqIEFkZCBQeUFyZ19QYXJzZVR1cGxlIGZvcm1hdCB3aGVyZSBhdmFpbGFibGUuCi0gKi8KLSNpZmRlZiBIQVZFX0FUVFJJQlVURV9GT1JNQVRfUEFSU0VUVVBMRQotI2RlZmluZSBQeV9GT1JNQVRfUEFSU0VUVVBMRShmdW5jLHAxLHAyKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoZnVuYyxwMSxwMikpKQotI2Vsc2UKLSNkZWZpbmUgUHlfRk9STUFUX1BBUlNFVFVQTEUoZnVuYyxwMSxwMikKLSNlbmRpZgotCi0vKgogICogU3BlY2lmeSBhbGlnbm1lbnQgb24gY29tcGlsZXJzIHRoYXQgc3VwcG9ydCBpdC4KICAqLwogI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDMKQEAgLTg4MSw0ICs4NjYsMTggQEAKICNlbmRpZgogI2VuZGlmCiAKKy8qCisgKiBDb252ZW5pZW50IG1hY3JvcyB0byBkZWFsIHdpdGggZW5kaWFubmVzcyBvZiB0aGUgcGxhdGZvcm0uIFdPUkRTX0JJR0VORElBTiBpcworICogZGV0ZWN0ZWQgYnkgY29uZmlndXJlIGFuZCBkZWZpbmVkIGluIHB5Y29uZmlnLmguIFRoZSBjb2RlIGluIHB5Y29uZmlnLmgKKyAqIGFsc28gdGFrZXMgY2FyZSBvZiBBcHBsZSdzIHVuaXZlcnNhbCBidWlsZHMuCisgKi8KKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBQWV9CSUdfRU5ESUFOIDEKKyNkZWZpbmUgUFlfTElUVExFX0VORElBTiAwCisjZWxzZQorI2RlZmluZSBQWV9CSUdfRU5ESUFOIDAKKyNkZWZpbmUgUFlfTElUVExFX0VORElBTiAxCisjZW5kaWYKKwogI2VuZGlmIC8qIFB5X1BZUE9SVF9IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5c3RhdGUuaCBiL0luY2x1ZGUvcHlzdGF0ZS5oCmluZGV4IDIwMTdiMDIuLjQ5OTJjMjIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlzdGF0ZS5oCisrKyBiL0luY2x1ZGUvcHlzdGF0ZS5oCkBAIC0zMyw3ICszMyw2IEBACiAgICAgaW50IGNvZGVjc19pbml0aWFsaXplZDsKICAgICBpbnQgZnNjb2RlY19pbml0aWFsaXplZDsKIAotCiAjaWZkZWYgSEFWRV9ETE9QRU4KICAgICBpbnQgZGxvcGVuZmxhZ3M7CiAjZW5kaWYKQEAgLTQxLDYgKzQwLDcgQEAKICAgICBpbnQgdHNjZHVtcDsKICNlbmRpZgogCisgICAgUHlPYmplY3QgKmJ1aWx0aW5zX2NvcHk7CiB9IFB5SW50ZXJwcmV0ZXJTdGF0ZTsKICNlbmRpZgogCkBAIC02OSw2ICs2OSw3IEBACiB0eXBlZGVmIHN0cnVjdCBfdHMgewogICAgIC8qIFNlZSBQeXRob24vY2V2YWwuYyBmb3IgY29tbWVudHMgZXhwbGFpbmluZyBtb3N0IGZpZWxkcyAqLwogCisgICAgc3RydWN0IF90cyAqcHJldjsKICAgICBzdHJ1Y3QgX3RzICpuZXh0OwogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwogCkBAIC05OSwxNiArMTAwLDYgQEAKIAogICAgIFB5T2JqZWN0ICpkaWN0OyAgLyogU3RvcmVzIHBlci10aHJlYWQgc3RhdGUgKi8KIAotICAgIC8qIFhYWCBkb2Vzbid0IG1lYW4gYW55dGhpbmcgYW55bW9yZSAodGhlIGNvbW1lbnQgYmVsb3cgaXMgb2Jzb2xldGUpCi0gICAgICAgPT4gZGVwcmVjYXRlIG9yIHJlbW92ZT8gKi8KLSAgICAvKiB0aWNrX2NvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIGNoZWNrX2ludGVydmFsIHRpY2tlcgotICAgICAqIHJlYWNoZXMgemVyby4gVGhlIHB1cnBvc2UgaXMgdG8gZ2l2ZSBhIHVzZWZ1bCBtZWFzdXJlIG9mIHRoZSBudW1iZXIKLSAgICAgKiBvZiBpbnRlcnByZXRlZCBieXRlY29kZSBpbnN0cnVjdGlvbnMgaW4gYSBnaXZlbiB0aHJlYWQuICBUaGlzCi0gICAgICogZXh0cmVtZWx5IGxpZ2h0d2VpZ2h0IHN0YXRpc3RpYyBjb2xsZWN0b3IgbWF5IGJlIG9mIGludGVyZXN0IHRvCi0gICAgICogcHJvZmlsZXJzIChsaWtlIHBzeWNvLmppdCgpKSwgYWx0aG91Z2ggbm90aGluZyBpbiB0aGUgY29yZSB1c2VzIGl0LgotICAgICAqLwotICAgIGludCB0aWNrX2NvdW50ZXI7Ci0KICAgICBpbnQgZ2lsc3RhdGVfY291bnRlcjsKIAogICAgIFB5T2JqZWN0ICphc3luY19leGM7IC8qIEFzeW5jaHJvbm91cyBleGNlcHRpb24gdG8gcmFpc2UgKi8KQEAgLTExNyw2ICsxMDgsMzIgQEAKICAgICBpbnQgdHJhc2hfZGVsZXRlX25lc3Rpbmc7CiAgICAgUHlPYmplY3QgKnRyYXNoX2RlbGV0ZV9sYXRlcjsKIAorICAgIC8qIENhbGxlZCB3aGVuIGEgdGhyZWFkIHN0YXRlIGlzIGRlbGV0ZWQgbm9ybWFsbHksIGJ1dCBub3Qgd2hlbiBpdAorICAgICAqIGlzIGRlc3Ryb3llZCBhZnRlciBmb3JrKCkuCisgICAgICogUGFpbjogIHRvIHByZXZlbnQgcmFyZSBidXQgZmF0YWwgc2h1dGRvd24gZXJyb3JzIChpc3N1ZSAxODgwOCksCisgICAgICogVGhyZWFkLmpvaW4oKSBtdXN0IHdhaXQgZm9yIHRoZSBqb2luJ2VkIHRocmVhZCdzIHRzdGF0ZSB0byBiZSB1bmxpbmtlZAorICAgICAqIGZyb20gdGhlIHRzdGF0ZSBjaGFpbi4gIFRoYXQgaGFwcGVucyBhdCB0aGUgZW5kIG9mIGEgdGhyZWFkJ3MgbGlmZSwKKyAgICAgKiBpbiBweXN0YXRlLmMuCisgICAgICogVGhlIG9idmlvdXMgd2F5IGRvZXNuJ3QgcXVpdGUgd29yazogIGNyZWF0ZSBhIGxvY2sgd2hpY2ggdGhlIHRzdGF0ZQorICAgICAqIHVubGlua2luZyBjb2RlIHJlbGVhc2VzLCBhbmQgaGF2ZSBUaHJlYWQuam9pbigpIHdhaXQgdG8gYWNxdWlyZSB0aGF0CisgICAgICogbG9jay4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgX2FyZV8gYXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZToKKyAgICAgKiBpZiB0aGUgdGhyZWFkIGhvbGRzIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgbG9jaywgZGVjcmVmJ2luZyB0aGUKKyAgICAgKiBsb2NrIHdpbGwgZGVsZXRlIHRoZSBsb2NrLCBhbmQgdGhhdCBtYXkgdHJpZ2dlciBhcmJpdHJhcnkgUHl0aG9uIGNvZGUKKyAgICAgKiBpZiB0aGVyZSdzIGEgd2Vha3JlZiwgd2l0aCBhIGNhbGxiYWNrLCB0byB0aGUgbG9jay4gIEJ1dCBieSB0aGlzIHRpbWUKKyAgICAgKiBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50IGlzIGFscmVhZHkgTlVMTCwgc28gb25seSB0aGUgc2ltcGxlc3Qgb2YgQyBjb2RlCisgICAgICogY2FuIGJlIGFsbG93ZWQgdG8gcnVuIChpbiBwYXJ0aWN1bGFyIGl0IG11c3Qgbm90IGJlIHBvc3NpYmxlIHRvCisgICAgICogcmVsZWFzZSB0aGUgR0lMKS4KKyAgICAgKiBTbyBpbnN0ZWFkIG9mIGhvbGRpbmcgdGhlIGxvY2sgZGlyZWN0bHksIHRoZSB0c3RhdGUgaG9sZHMgYSB3ZWFrcmVmIHRvCisgICAgICogdGhlIGxvY2s6ICB0aGF0J3MgdGhlIHZhbHVlIG9mIG9uX2RlbGV0ZV9kYXRhIGJlbG93LiAgRGVjcmVmJ2luZyBhCisgICAgICogd2Vha3JlZiBpcyBoYXJtbGVzcy4KKyAgICAgKiBvbl9kZWxldGUgcG9pbnRzIHRvIF90aHJlYWRtb2R1bGUuYydzIHN0YXRpYyByZWxlYXNlX3NlbnRpbmVsKCkgZnVuY3Rpb24uCisgICAgICogQWZ0ZXIgdGhlIHRzdGF0ZSBpcyB1bmxpbmtlZCwgcmVsZWFzZV9zZW50aW5lbCBpcyBjYWxsZWQgd2l0aCB0aGUKKyAgICAgKiB3ZWFrcmVmLXRvLWxvY2sgKG9uX2RlbGV0ZV9kYXRhKSBhcmd1bWVudCwgYW5kIHJlbGVhc2Vfc2VudGluZWwgcmVsZWFzZXMKKyAgICAgKiB0aGUgaW5kaXJlY3RseSBoZWxkIGxvY2suCisgICAgICovCisgICAgdm9pZCAoKm9uX2RlbGV0ZSkodm9pZCAqKTsKKyAgICB2b2lkICpvbl9kZWxldGVfZGF0YTsKKwogICAgIC8qIFhYWCBzaWduYWwgaGFuZGxlcnMgc2hvdWxkIGFsc28gYmUgaGVyZSAqLwogCiB9IFB5VGhyZWFkU3RhdGU7CkBAIC0xMzMsMTIgKzE1MCwxNiBAQAogUHlBUElfRlVOQyhpbnQpIFB5U3RhdGVfUmVtb3ZlTW9kdWxlKHN0cnVjdCBQeU1vZHVsZURlZiopOwogI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlTdGF0ZV9GaW5kTW9kdWxlKHN0cnVjdCBQeU1vZHVsZURlZiopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyh2b2lkKSBfUHlTdGF0ZV9DbGVhck1vZHVsZXModm9pZCk7CisjZW5kaWYKIAogUHlBUElfRlVOQyhQeVRocmVhZFN0YXRlICopIFB5VGhyZWFkU3RhdGVfTmV3KFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKTsKIFB5QVBJX0ZVTkMoUHlUaHJlYWRTdGF0ZSAqKSBfUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYyhQeUludGVycHJldGVyU3RhdGUgKik7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeVRocmVhZFN0YXRlX0luaXQoUHlUaHJlYWRTdGF0ZSAqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRTdGF0ZV9DbGVhcihQeVRocmVhZFN0YXRlICopOwogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZFN0YXRlX0RlbGV0ZShQeVRocmVhZFN0YXRlICopOworUHlBUElfRlVOQyh2b2lkKSBfUHlUaHJlYWRTdGF0ZV9EZWxldGVFeGNlcHQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeUdJTFN0YXRlX1JlaW5pdCh2b2lkKTsKQEAgLTIxMiw2ICsyMzMsMTMgQEAKICovCiBQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUodm9pZCk7CiAKKy8qIEhlbHBlci9kaWFnbm9zdGljIGZ1bmN0aW9uIC0gcmV0dXJuIDEgaWYgdGhlIGN1cnJlbnQgdGhyZWFkCisgKiBjdXJyZW50bHkgaG9sZHMgdGhlIEdJTCwgMCBvdGhlcndpc2UKKyAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIFB5R0lMU3RhdGVfQ2hlY2sodm9pZCk7CisjZW5kaWYKKwogI2VuZGlmICAgLyogI2lmZGVmIFdJVEhfVEhSRUFEICovCiAKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkgIFJldHVybnMgYSBkaWN0IG1hcHBpbmcKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHl0aG9ucnVuLmggYi9JbmNsdWRlL3B5dGhvbnJ1bi5oCmluZGV4IGU4YTU4MmQuLjJmYzU1NzggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrIGIvSW5jbHVkZS9weXRob25ydW4uaApAQCAtMjgsNiArMjgsMTQgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICopOwogUHlBUElfRlVOQyh3Y2hhcl90ICopIFB5X0dldFB5dGhvbkhvbWUodm9pZCk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKy8qIE9ubHkgdXNlZCBieSBhcHBsaWNhdGlvbnMgdGhhdCBlbWJlZCB0aGUgaW50ZXJwcmV0ZXIgYW5kIG5lZWQgdG8KKyAqIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBlbmNvZGluZyBkZXRlcm1pbmF0aW9uIG1lY2hhbmlzbQorICovCitQeUFQSV9GVU5DKGludCkgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisjZW5kaWYKKwogUHlBUElfRlVOQyh2b2lkKSBQeV9Jbml0aWFsaXplKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeV9Jbml0aWFsaXplRXgoaW50KTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKQEAgLTU1LDYgKzYzLDEwIEBACiAgICAgRklMRSAqZnAsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpOworUHlBUElfRlVOQyhpbnQpIFB5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKTsKIFB5QVBJX0ZVTkMoaW50KSBQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncygKICAgICBGSUxFICpmcCwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCkBAIC02Niw2ICs3OCwxMiBAQAogICAgIGludCBzdGFydCwKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMoc3RydWN0IF9tb2QgKikgUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdCgKKyAgICBjb25zdCBjaGFyICpzLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgc3RhcnQsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBQeUFyZW5hICphcmVuYSk7CiBQeUFQSV9GVU5DKHN0cnVjdCBfbW9kICopIFB5UGFyc2VyX0FTVEZyb21GaWxlKAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTc2LDYgKzk0LDE2IEBACiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBpbnQgKmVycmNvZGUsCiAgICAgUHlBcmVuYSAqYXJlbmEpOworUHlBUElfRlVOQyhzdHJ1Y3QgX21vZCAqKSBQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdCgKKyAgICBGSUxFICpmcCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgY29uc3QgY2hhciogZW5jLAorICAgIGludCBzdGFydCwKKyAgICBjaGFyICpwczEsCisgICAgY2hhciAqcHMyLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50ICplcnJjb2RlLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKICNlbmRpZgogCiAjaWZuZGVmIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nCkBAIC0xMTcsMTEgKzE0NSwyMiBAQAogICAgIGludCBzdGFydCwKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIGludCBvcHRpbWl6ZSk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5X0NvbXBpbGVTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqc3RyLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0LAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50IG9wdGltaXplKTsKICNlbmRpZgogUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlfU3ltdGFibGVTdHJpbmcoCiAgICAgY29uc3QgY2hhciAqc3RyLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBpbnQgc3RhcnQpOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlfU3ltdGFibGVTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqc3RyLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgc3RhcnQpOworI2VuZGlmCiAKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfUHJpbnQodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1ByaW50RXgoaW50KTsKQEAgLTE5Nyw3ICsyMzYsNyBAQAogUHlBUElfRlVOQyh2b2lkKSBfUHlFeGNfSW5pdChQeU9iamVjdCAqIGJsdGlubW9kKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5SW1wb3J0SG9va3NfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlGcmFtZV9Jbml0KHZvaWQpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlGbG9hdF9Jbml0KHZvaWQpOworUHlBUElfRlVOQyhpbnQpIF9QeUZsb2F0X0luaXQodm9pZCk7CiBQeUFQSV9GVU5DKGludCkgUHlCeXRlQXJyYXlfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5UmFuZG9tX0luaXQodm9pZCk7CiAjZW5kaWYKQEAgLTIxNywxOSArMjU2LDIxIEBACiBQeUFQSV9GVU5DKHZvaWQpIFB5Qnl0ZUFycmF5X0Zpbmkodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RmxvYXRfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlPU19GaW5pSW50ZXJydXB0cyh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5R0NfRHVtcFNodXRkb3duU3RhdHModm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeUdDX0Zpbmkodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5U2xpY2VfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5VHlwZV9GaW5pKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlSYW5kb21fRmluaSh2b2lkKTsKIAogUHlBUElfREFUQShQeVRocmVhZFN0YXRlICopIF9QeV9GaW5hbGl6aW5nOwogI2VuZGlmCiAKIC8qIFN0dWZmIHdpdGggbm8gcHJvcGVyIGhvbWUgKHlldCkgKi8KICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKLVB5QVBJX0ZVTkMoY2hhciAqKSBQeU9TX1JlYWRsaW5lKEZJTEUgKiwgRklMRSAqLCBjaGFyICopOworUHlBUElfRlVOQyhjaGFyICopIFB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CiAjZW5kaWYKIFB5QVBJX0RBVEEoaW50KSAoKlB5T1NfSW5wdXRIb29rKSh2b2lkKTsKLVB5QVBJX0RBVEEoY2hhcikgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitQeUFQSV9EQVRBKGNoYXIpICooKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfREFUQShQeVRocmVhZFN0YXRlKikgX1B5T1NfUmVhZGxpbmVUU3RhdGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc2V0b2JqZWN0LmggYi9JbmNsdWRlL3NldG9iamVjdC5oCmluZGV4IGExNDg3NGIuLmFlM2Y1NTYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc2V0b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9zZXRvYmplY3QuaApAQCAtMjMsOCArMjMsOCBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgLyogQ2FjaGVkIGhhc2ggY29kZSBvZiB0aGUga2V5LiAqLwotICAgIFB5X2hhc2hfdCBoYXNoOwogICAgIFB5T2JqZWN0ICprZXk7CisgICAgUHlfaGFzaF90IGhhc2g7CiB9IHNldGVudHJ5OwogCiAKQEAgLTUxLDkgKzUxLDkgQEAKICAgICAgKi8KICAgICBzZXRlbnRyeSAqdGFibGU7CiAgICAgc2V0ZW50cnkgKigqbG9va3VwKShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKTsKKyAgICBQeV9oYXNoX3QgaGFzaDsgICAgICAgICAgICAgLyogb25seSB1c2VkIGJ5IGZyb3plbnNldCBvYmplY3RzICovCiAgICAgc2V0ZW50cnkgc21hbGx0YWJsZVtQeVNldF9NSU5TSVpFXTsKIAotICAgIFB5X2hhc2hfdCBoYXNoOyAgICAgICAgICAgICAgICAgIC8qIG9ubHkgdXNlZCBieSBmcm96ZW5zZXQgb2JqZWN0cyAqLwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsgICAgICAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwogfTsKICNlbmRpZiAvKiBQeV9MSU1JVEVEX0FQSSAqLwpAQCAtNjEsNiArNjEsMTAgQEAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVNldF9UeXBlOwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5RnJvemVuU2V0X1R5cGU7CiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlTZXRJdGVyX1R5cGU7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9EQVRBKFB5T2JqZWN0ICopIF9QeVNldF9EdW1teTsKKyNlbmRpZgorCiAKIC8qIEludmFyaWFudHMgZm9yIGZyb3plbnNldHM6CiAgKiAgICAgZGF0YSBpcyBpbW11dGFibGUuCkBAIC0xMDEsNyArMTA1LDYgQEAKIFB5QVBJX0ZVTkMoaW50KSBfUHlTZXRfVXBkYXRlKFB5T2JqZWN0ICpzZXQsIFB5T2JqZWN0ICppdGVyYWJsZSk7CiAKIFB5QVBJX0ZVTkMoaW50KSBQeVNldF9DbGVhckZyZWVMaXN0KHZvaWQpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlTZXRfRGVidWdNYWxsb2NTdGF0cyhGSUxFICpvdXQpOwogI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zbGljZW9iamVjdC5oIGIvSW5jbHVkZS9zbGljZW9iamVjdC5oCmluZGV4IDhiZWMxNzkuLmY3ZWU5MGMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc2xpY2VvYmplY3QuaAorKysgYi9JbmNsdWRlL3NsaWNlb2JqZWN0LmgKQEAgLTM0LDYgKzM0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogc3RlcCk7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVNsaWNlX0Zyb21JbmRpY2VzKFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3Qgc3RvcCk7CitQeUFQSV9GVU5DKGludCkgX1B5U2xpY2VfR2V0TG9uZ0luZGljZXMoUHlTbGljZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqc3RhcnRfcHRyLCBQeU9iamVjdCAqKnN0b3BfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGVwX3B0cik7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeVNsaWNlX0dldEluZGljZXMoUHlPYmplY3QgKnIsIFB5X3NzaXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKnN0YXJ0LCBQeV9zc2l6ZV90ICpzdG9wLCBQeV9zc2l6ZV90ICpzdGVwKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc3RydWN0c2VxLmggYi9JbmNsdWRlL3N0cnVjdHNlcS5oCmluZGV4IDMwYzUyYWMuLmFmMjI3MTYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc3RydWN0c2VxLmgKKysrIGIvSW5jbHVkZS9zdHJ1Y3RzZXEuaApAQCAtMjQsNiArMjQsOCBAQAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyh2b2lkKSBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKFB5VHlwZU9iamVjdCAqdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpOworUHlBUElfRlVOQyhpbnQpIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKFB5VHlwZU9iamVjdCAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpOwogI2VuZGlmCiBQeUFQSV9GVU5DKFB5VHlwZU9iamVjdCopIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZShQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpOwogCmRpZmYgLS1naXQgYS9JbmNsdWRlL3N5bXRhYmxlLmggYi9JbmNsdWRlL3N5bXRhYmxlLmgKaW5kZXggNmVkM2EyYi4uMWNmZDg4NCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zeW10YWJsZS5oCisrKyBiL0luY2x1ZGUvc3ltdGFibGUuaApAQCAtMTYsNyArMTYsNyBAQAogc3RydWN0IF9zeW10YWJsZV9lbnRyeTsKIAogc3RydWN0IHN5bXRhYmxlIHsKLSAgICBjb25zdCBjaGFyICpzdF9maWxlbmFtZTsgICAgICAgIC8qIG5hbWUgb2YgZmlsZSBiZWluZyBjb21waWxlZCwKKyAgICBQeU9iamVjdCAqc3RfZmlsZW5hbWU7ICAgICAgICAgIC8qIG5hbWUgb2YgZmlsZSBiZWluZyBjb21waWxlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIHN0cnVjdCBfc3ltdGFibGVfZW50cnkgKnN0X2N1cjsgLyogY3VycmVudCBzeW1ib2wgdGFibGUgZW50cnkgKi8KICAgICBzdHJ1Y3QgX3N5bXRhYmxlX2VudHJ5ICpzdF90b3A7IC8qIHN5bWJvbCB0YWJsZSBlbnRyeSBmb3IgbW9kdWxlICovCkBAIC00MSw2ICs0MSw3IEBACiAgICAgUHlPYmplY3QgKnN0ZV9uYW1lOyAgICAgIC8qIHN0cmluZzogbmFtZSBvZiBjdXJyZW50IGJsb2NrICovCiAgICAgUHlPYmplY3QgKnN0ZV92YXJuYW1lczsgIC8qIGxpc3Qgb2YgZnVuY3Rpb24gcGFyYW1ldGVycyAqLwogICAgIFB5T2JqZWN0ICpzdGVfY2hpbGRyZW47ICAvKiBsaXN0IG9mIGNoaWxkIGJsb2NrcyAqLworICAgIFB5T2JqZWN0ICpzdGVfZGlyZWN0aXZlczsvKiBsb2NhdGlvbnMgb2YgZ2xvYmFsIGFuZCBub25sb2NhbCBzdGF0ZW1lbnRzICovCiAgICAgX1B5X2Jsb2NrX3R5IHN0ZV90eXBlOyAgIC8qIG1vZHVsZSwgY2xhc3MsIG9yIGZ1bmN0aW9uICovCiAgICAgaW50IHN0ZV91bm9wdGltaXplZDsgICAgIC8qIGZhbHNlIGlmIG5hbWVzcGFjZSBpcyBvcHRpbWl6ZWQgKi8KICAgICBpbnQgc3RlX25lc3RlZDsgICAgICAvKiB0cnVlIGlmIGJsb2NrIGlzIG5lc3RlZCAqLwpAQCAtNTIsNiArNTMsOSBAQAogICAgIHVuc2lnbmVkIHN0ZV92YXJrZXl3b3JkcyA6IDE7IC8qIHRydWUgaWYgYmxvY2sgaGFzIHZhcmtleXdvcmRzICovCiAgICAgdW5zaWduZWQgc3RlX3JldHVybnNfdmFsdWUgOiAxOyAgLyogdHJ1ZSBpZiBuYW1lc3BhY2UgdXNlcyByZXR1cm4gd2l0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGFyZ3VtZW50ICovCisgICAgdW5zaWduZWQgc3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUgOiAxOyAvKiBmb3IgY2xhc3Mgc2NvcGVzLCB0cnVlIGlmIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3N1cmUgb3ZlciBfX2NsYXNzX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBjcmVhdGVkICovCiAgICAgaW50IHN0ZV9saW5lbm87ICAgICAgICAgIC8qIGZpcnN0IGxpbmUgb2YgYmxvY2sgKi8KICAgICBpbnQgc3RlX2NvbF9vZmZzZXQ7ICAgICAgLyogb2Zmc2V0IG9mIGZpcnN0IGxpbmUgb2YgYmxvY2sgKi8KICAgICBpbnQgc3RlX29wdF9saW5lbm87ICAgICAgLyogbGluZW5vIG9mIGxhc3QgZXhlYyBvciBpbXBvcnQgKiAqLwpAQCAtNzAsNiArNzQsMTAgQEAKICAgICBtb2RfdHkgbW9kLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpOworUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlTeW10YWJsZV9CdWlsZE9iamVjdCgKKyAgICBtb2RfdHkgbW9kLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpOwogUHlBUElfRlVOQyhQeVNURW50cnlPYmplY3QgKikgUHlTeW10YWJsZV9Mb29rdXAoc3RydWN0IHN5bXRhYmxlICosIHZvaWQgKik7CiAKIFB5QVBJX0ZVTkModm9pZCkgUHlTeW10YWJsZV9GcmVlKHN0cnVjdCBzeW10YWJsZSAqKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc3lzbW9kdWxlLmggYi9JbmNsdWRlL3N5c21vZHVsZS5oCmluZGV4IDBjYWJmNmYuLjc5ZTUyYTMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc3lzbW9kdWxlLmgKKysrIGIvSW5jbHVkZS9zeXNtb2R1bGUuaApAQCAtOCw3ICs4LDEyIEBACiAjZW5kaWYKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVN5c19HZXRPYmplY3QoY29uc3QgY2hhciAqKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5U3lzX0dldE9iamVjdElkKF9QeV9JZGVudGlmaWVyICprZXkpOworI2VuZGlmCiBQeUFQSV9GVU5DKGludCkgUHlTeXNfU2V0T2JqZWN0KGNvbnN0IGNoYXIgKiwgUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKGludCkgX1B5U3lzX1NldE9iamVjdElkKF9QeV9JZGVudGlmaWVyICprZXksIFB5T2JqZWN0ICopOworCiBQeUFQSV9GVU5DKHZvaWQpIFB5U3lzX1NldEFyZ3YoaW50LCB3Y2hhcl90ICoqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfU2V0QXJndkV4KGludCwgd2NoYXJfdCAqKiwgaW50KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfU2V0UGF0aChjb25zdCB3Y2hhcl90ICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS90b2tlbi5oIGIvSW5jbHVkZS90b2tlbi5oCmluZGV4IGY3ZjY1MDQuLjkwNTAyMmIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdG9rZW4uaAorKysgYi9JbmNsdWRlL3Rva2VuLmgKQEAgLTc1LDcgKzc1LDcgQEAKICNkZWZpbmUgSVNFT0YoeCkJCSgoeCkgPT0gRU5ETUFSS0VSKQogCiAKLVB5QVBJX0RBVEEoY2hhciAqKSBfUHlQYXJzZXJfVG9rZW5OYW1lc1tdOyAvKiBUb2tlbiBuYW1lcyAqLworUHlBUElfREFUQShjb25zdCBjaGFyICopIF9QeVBhcnNlcl9Ub2tlbk5hbWVzW107IC8qIFRva2VuIG5hbWVzICovCiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9PbmVDaGFyKGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9Ud29DaGFycyhpbnQsIGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9UaHJlZUNoYXJzKGludCwgaW50LCBpbnQpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmggYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAppbmRleCBhOGY1YjVkLi5jMDg4YTBmIDEwMDY0NAotLS0gYS9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAorKysgYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaApAQCAtMTgwLDkgKzE4MCw5IEBACiAgICAgfSB3aGlsZSAoMCkKIAogLyogbWFjcm9zIHRvIHdvcmsgd2l0aCBzdXJyb2dhdGVzICovCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IGNoICYmIGNoIDw9IDB4REZGRikKLSNkZWZpbmUgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURShjaCkgKDB4RDgwMCA8PSBjaCAmJiBjaCA8PSAweERCRkYpCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNfTE9XX1NVUlJPR0FURShjaCkgKDB4REMwMCA8PSBjaCAmJiBjaCA8PSAweERGRkYpCisjZGVmaW5lIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IChjaCkgJiYgKGNoKSA8PSAweERGRkYpCisjZGVmaW5lIFB5X1VOSUNPREVfSVNfSElHSF9TVVJST0dBVEUoY2gpICgweEQ4MDAgPD0gKGNoKSAmJiAoY2gpIDw9IDB4REJGRikKKyNkZWZpbmUgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFKGNoKSAoMHhEQzAwIDw9IChjaCkgJiYgKGNoKSA8PSAweERGRkYpCiAvKiBKb2luIHR3byBzdXJyb2dhdGUgY2hhcmFjdGVycyBhbmQgcmV0dXJuIGEgc2luZ2xlIFB5X1VDUzQgdmFsdWUuICovCiAjZGVmaW5lIFB5X1VOSUNPREVfSk9JTl9TVVJST0dBVEVTKGhpZ2gsIGxvdykgIFwKICAgICAoKCgoKFB5X1VDUzQpKGhpZ2gpICYgMHgwM0ZGKSA8PCAxMCkgfCAgICAgIFwKQEAgLTg1OSw3ICs4NTksNyBAQAogKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCgKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqLCAgICAgLyogT2JqZWN0ICovCisgICAgUHlPYmplY3QgKm9iaiwgICAgICAgICAgICAgIC8qIE9iamVjdCAqLwogICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCAgICAgICAvKiBlbmNvZGluZyAqLwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLwogICAgICk7CkBAIC04NzgsNyArODc4LDcgQEAKICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRnJvbU9iamVjdCgKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqICAgICAgLyogT2JqZWN0ICovCisgICAgUHlPYmplY3QgKm9iaiAgICAgIC8qIE9iamVjdCAqLwogICAgICk7CiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKApAQCAtODk4LDIyICs4OTgsMjggQEAKICAgICBQeV9VQ1M0IG1heGNoYXI7CiAgICAgUHlfc3NpemVfdCBzaXplOwogICAgIFB5X3NzaXplX3QgcG9zOwotICAgIC8qIG1pbmltdW0gbGVuZ3RoIG9mIHRoZSBidWZmZXIgd2hlbiBvdmVyYWxsb2NhdGlvbiBpcyBlbmFibGVkLAotICAgICAgIHNlZSBfUHlVbmljb2RlV3JpdGVyX0luaXQoKSAqLworCisgICAgLyogbWluaW11bSBudW1iZXIgb2YgYWxsb2NhdGVkIGNoYXJhY3RlcnMgKGRlZmF1bHQ6IDApICovCiAgICAgUHlfc3NpemVfdCBtaW5fbGVuZ3RoOworCisgICAgLyogbWluaW11bSBjaGFyYWN0ZXIgKGRlZmF1bHQ6IDEyNywgQVNDSUkpICovCisgICAgUHlfVUNTNCBtaW5fY2hhcjsKKworICAgIC8qIElmIG5vbi16ZXJvLCBvdmVyYWxsb2NhdGUgdGhlIGJ1ZmZlciBieSAyNSUgKGRlZmF1bHQ6IDApLiAqLwogICAgIHVuc2lnbmVkIGNoYXIgb3ZlcmFsbG9jYXRlOworCiAgICAgLyogSWYgcmVhZG9ubHkgaXMgMSwgYnVmZmVyIGlzIGEgc2hhcmVkIHN0cmluZyAoY2Fubm90IGJlIG1vZGlmaWVkKQogICAgICAgIGFuZCBzaXplIGlzIHNldCB0byAwLiAqLwogICAgIHVuc2lnbmVkIGNoYXIgcmVhZG9ubHk7CiB9IF9QeVVuaWNvZGVXcml0ZXIgOwogCiAvKiBJbml0aWFsaXplIGEgVW5pY29kZSB3cml0ZXIuCi0KLSAgIElmIG1pbl9sZW5ndGggaXMgZ3JlYXRlciB0aGFuIHplcm8sIF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgpCi0gICBvdmVyYWxsb2NhdGVzIHRoZSBidWZmZXIgYW5kIG1pbl9sZW5ndGggaXMgdGhlIG1pbmltdW0gbGVuZ3RoIGluIGNoYXJhY3RlcnMKLSAgIG9mIHRoZSBidWZmZXIuICovCisgKgorICogQnkgZGVmYXVsdCwgdGhlIG1pbmltdW0gYnVmZmVyIHNpemUgaXMgMCBjaGFyYWN0ZXIgYW5kIG92ZXJhbGxvY2F0aW9uIGlzCisgKiBkaXNhYmxlZC4gU2V0IG1pbl9sZW5ndGgsIG1pbl9jaGFyIGFuZCBvdmVyYWxsb2NhdGUgYXR0cmlidXRlcyB0byBjb250cm9sCisgKiB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYnVmZmVyLiAqLwogUHlBUElfRlVOQyh2b2lkKQotX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfc3NpemVfdCBtaW5fbGVuZ3RoKTsKK19QeVVuaWNvZGVXcml0ZXJfSW5pdChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpOwogCiAvKiBQcmVwYXJlIHRoZSBidWZmZXIgdG8gd3JpdGUgJ2xlbmd0aCcgY2hhcmFjdGVycwogICAgd2l0aCB0aGUgc3BlY2lmaWVkIG1heGltdW0gY2hhcmFjdGVyLgpAQCAtOTMzLDEyICs5MzksNTIgQEAKIF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZUludGVybmFsKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuZ3RoLCBQeV9VQ1M0IG1heGNoYXIpOwogCisvKiBBcHBlbmQgYSBVbmljb2RlIGNoYXJhY3Rlci4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLwogUHlBUElfRlVOQyhpbnQpCi1fUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlPYmplY3QgKnN0cik7CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlfVUNTNCBjaAorICAgICk7CiAKKy8qIEFwcGVuZCBhIFVuaWNvZGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgIFB5T2JqZWN0ICpzdHIgICAgICAgICAgICAgICAvKiBVbmljb2RlIHN0cmluZyAqLworICAgICk7CisKKy8qIEFwcGVuZCBhIHN1YnN0cmluZyBvZiBhIFVuaWNvZGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdWJzdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgIFB5T2JqZWN0ICpzdHIsICAgICAgICAgICAgICAvKiBVbmljb2RlIHN0cmluZyAqLworICAgIFB5X3NzaXplX3Qgc3RhcnQsCisgICAgUHlfc3NpemVfdCBlbmQKKyAgICApOworCisvKiBBcHBlbmQgYSBBU0NJSS1lbmNvZGVkIGJ5dGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgY29uc3QgY2hhciAqc3RyLCAgICAgICAgICAgLyogQVNDSUktZW5jb2RlZCBieXRlIHN0cmluZyAqLworICAgIFB5X3NzaXplX3QgbGVuICAgICAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcywgb3IgLTEgaWYgdW5rbm93biAqLworICAgICk7CisKKy8qIEFwcGVuZCBhIGxhdGluMS1lbmNvZGVkIGJ5dGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVMYXRpbjFTdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgIGNvbnN0IGNoYXIgKnN0ciwgICAgICAgICAgIC8qIGxhdGluMS1lbmNvZGVkIGJ5dGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBsZW4gICAgICAgICAgICAgLyogbGVuZ3RoIGluIGJ5dGVzICovCisgICAgKTsKKworLyogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgd3JpdGVyIGFzIGFuIFVuaWNvZGUgc3RyaW5nLiBDbGVhciB0aGUKKyAgIGJ1ZmZlciBvZiB0aGUgd3JpdGVyLiBSYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiBOVUxMCisgICBvbiBlcnJvci4gKi8KIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikKIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAKKy8qIERlYWxsb2NhdGUgbWVtb3J5IG9mIGEgd3JpdGVyIChjbGVhciBpdHMgaW50ZXJuYWwgYnVmZmVyKS4gKi8KIFB5QVBJX0ZVTkModm9pZCkKIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpOwogI2VuZGlmCkBAIC05NzcsNyArMTAyMyw3IEBACiAgICBUaGUgYnVmZmVyIGlzIGNvcGllZCBpbnRvIHRoZSBuZXcgb2JqZWN0LiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcigKLSAgICByZWdpc3RlciBjb25zdCB3Y2hhcl90ICp3LCAgLyogd2NoYXJfdCBidWZmZXIgKi8KKyAgICBjb25zdCB3Y2hhcl90ICp3LCAgICAgICAgICAgLyogd2NoYXJfdCBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IHNpemUgICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgKi8KICAgICApOwogCkBAIC05OTUsNyArMTA0MSw3IEBACiAKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlVbmljb2RlX0FzV2lkZUNoYXIoCiAgICAgUHlPYmplY3QgKnVuaWNvZGUsICAgICAgICAgIC8qIFVuaWNvZGUgb2JqZWN0ICovCi0gICAgcmVnaXN0ZXIgd2NoYXJfdCAqdywgICAgICAgIC8qIHdjaGFyX3QgYnVmZmVyICovCisgICAgd2NoYXJfdCAqdywgICAgICAgICAgICAgICAgIC8qIHdjaGFyX3QgYnVmZmVyICovCiAgICAgUHlfc3NpemVfdCBzaXplICAgICAgICAgICAgIC8qIHNpemUgb2YgYnVmZmVyICovCiAgICAgKTsKIApAQCAtMTcyNiw3ICsxNzcyLDcgQEAKIC8qIEVuY29kZSBhIFVuaWNvZGUgb2JqZWN0IHRvIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZy4gVGhlIGVuY29kZXIgaXMKICAgIHN0cmljdCBpcyAqc3Vycm9nYXRlZXNjYXBlKiBpcyBlcXVhbCB0byB6ZXJvLCBvdGhlcndpc2UgdGhlCiAgICAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyIGlzIHVzZWQuIFJldHVybiBhIGJ5dGVzIG9iamVjdC4gVGhlIHN0cmluZwotICAgY2Fubm90IGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBjaGFyYWN0ZXJzLi4gKi8KKyAgIGNhbm5vdCBjb250YWluIGVtYmVkZGVkIG51bGwgY2hhcmFjdGVycy4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9FbmNvZGVMb2NhbGUoCiAgICAgUHlPYmplY3QgKnVuaWNvZGUsCkBAIC0xOTUwLDEzICsxOTk2LDIxIEBACiAgICAgKTsKIAogLyogQ29tcGFyZSB0d28gc3RyaW5ncyBhbmQgcmV0dXJuIC0xLCAwLCAxIGZvciBsZXNzIHRoYW4sIGVxdWFsLAotICAgZ3JlYXRlciB0aGFuIHJlc3AuICovCisgICBncmVhdGVyIHRoYW4gcmVzcC4KKyAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLwogCiBQeUFQSV9GVU5DKGludCkgUHlVbmljb2RlX0NvbXBhcmUoCiAgICAgUHlPYmplY3QgKmxlZnQsICAgICAgICAgICAgIC8qIExlZnQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKnJpZ2h0ICAgICAgICAgICAgIC8qIFJpZ2h0IHN0cmluZyAqLwogICAgICk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQoCisgICAgUHlPYmplY3QgKmxlZnQsICAgICAgICAgICAgIC8qIExlZnQgc3RyaW5nICovCisgICAgX1B5X0lkZW50aWZpZXIgKnJpZ2h0ICAgICAgIC8qIFJpZ2h0IGlkZW50aWZpZXIgKi8KKyAgICApOworI2VuZGlmCisKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZygKICAgICBQeU9iamVjdCAqbGVmdCwKICAgICBjb25zdCBjaGFyICpyaWdodCAgICAgICAgICAgLyogQVNDSUktZW5jb2RlZCBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvd2FybmluZ3MuaCBiL0luY2x1ZGUvd2FybmluZ3MuaAppbmRleCBiN2RiNjgxLi5lZmZiOWZhZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS93YXJuaW5ncy5oCisrKyBiL0luY2x1ZGUvd2FybmluZ3MuaApAQCAtMTcsNiArMTcsMTUgQEAKICAgICBQeV9zc2l6ZV90IHN0YWNrX2xldmVsLAogICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgICAgICAgICAvKiBBU0NJSS1lbmNvZGVkIHN0cmluZyAgKi8KICAgICAuLi4pOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdCgKKyAgICBQeU9iamVjdCAqY2F0ZWdvcnksCisgICAgUHlPYmplY3QgKm1lc3NhZ2UsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGludCBsaW5lbm8sCisgICAgUHlPYmplY3QgKm1vZHVsZSwKKyAgICBQeU9iamVjdCAqcmVnaXN0cnkpOworI2VuZGlmCiBQeUFQSV9GVU5DKGludCkgUHlFcnJfV2FybkV4cGxpY2l0KAogICAgIFB5T2JqZWN0ICpjYXRlZ29yeSwKICAgICBjb25zdCBjaGFyICptZXNzYWdlLCAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KQEAgLTI1LDYgKzM0LDE0IEBACiAgICAgY29uc3QgY2hhciAqbW9kdWxlLCAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKnJlZ2lzdHJ5KTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpCitQeUVycl9XYXJuRXhwbGljaXRGb3JtYXQoUHlPYmplY3QgKmNhdGVnb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKyNlbmRpZgorCiAvKiBERVBSRUNBVEVEOiBVc2UgUHlFcnJfV2FybkV4KCkgaW5zdGVhZC4gKi8KICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUHlFcnJfV2FybihjYXRlZ29yeSwgbXNnKSBQeUVycl9XYXJuRXgoY2F0ZWdvcnksIG1zZywgMSkKZGlmZiAtLWdpdCBhL0xpYi9fYm9vdGxvY2FsZS5weSBiL0xpYi9fYm9vdGxvY2FsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmNjYWMxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL19ib290bG9jYWxlLnB5CkBAIC0wLDAgKzEsMzQgQEAKKyIiIkEgbWluaW1hbCBzdWJzZXQgb2YgdGhlIGxvY2FsZSBtb2R1bGUgdXNlZCBhdCBpbnRlcnByZXRlciBzdGFydHVwCisoaW1wb3J0ZWQgYnkgdGhlIF9pbyBtb2R1bGUpLCBpbiBvcmRlciB0byByZWR1Y2Ugc3RhcnR1cCB0aW1lLgorCitEb24ndCBpbXBvcnQgZGlyZWN0bHkgZnJvbSB0aGlyZC1wYXJ0eSBjb2RlOyB1c2UgdGhlIGBsb2NhbGVgIG1vZHVsZSBpbnN0ZWFkIQorIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBfbG9jYWxlCisKK2lmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKToKKyAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlPVRydWUpOgorICAgICAgICByZXR1cm4gX2xvY2FsZS5fZ2V0ZGVmYXVsdGxvY2FsZSgpWzFdCitlbHNlOgorICAgIHRyeToKKyAgICAgICAgX2xvY2FsZS5DT0RFU0VUCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlPVRydWUpOgorICAgICAgICAgICAgIyBUaGlzIHBhdGggZm9yIGxlZ2FjeSBzeXN0ZW1zIG5lZWRzIHRoZSBtb3JlIGNvbXBsZXgKKyAgICAgICAgICAgICMgZ2V0ZGVmYXVsdGxvY2FsZSgpIGZ1bmN0aW9uLCBpbXBvcnQgdGhlIGZ1bGwgbG9jYWxlIG1vZHVsZS4KKyAgICAgICAgICAgIGltcG9ydCBsb2NhbGUKKyAgICAgICAgICAgIHJldHVybiBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGU9VHJ1ZSk6CisgICAgICAgICAgICBhc3NlcnQgbm90IGRvX3NldGxvY2FsZQorICAgICAgICAgICAgcmVzdWx0ID0gX2xvY2FsZS5ubF9sYW5naW5mbyhfbG9jYWxlLkNPREVTRVQpCisgICAgICAgICAgICBpZiBub3QgcmVzdWx0IGFuZCBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAgICAgIyBubF9sYW5naW5mbyBjYW4gcmV0dXJuIGFuIGVtcHR5IHN0cmluZworICAgICAgICAgICAgICAgICMgd2hlbiB0aGUgc2V0dGluZyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAjIERlZmF1bHQgdG8gVVRGLTggaW4gdGhhdCBjYXNlIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAjIFVURi04IGlzIHRoZSBkZWZhdWx0IGNoYXJzZXQgb24gT1NYIGFuZAorICAgICAgICAgICAgICAgICMgcmV0dXJuaW5nIG5vdGhpbmcgd2lsbCBjcmFzaCB0aGUKKyAgICAgICAgICAgICAgICAjIGludGVycHJldGVyLgorICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdVVEYtOCcKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL0xpYi9fY29sbGVjdGlvbnNfYWJjLnB5IGIvTGliL19jb2xsZWN0aW9uc19hYmMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFhMWZmMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9fY29sbGVjdGlvbnNfYWJjLnB5CkBAIC0wLDAgKzEsNzM0IEBACisjIENvcHlyaWdodCAyMDA3IEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisKKyIiIkFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgZm9yIGNvbGxlY3Rpb25zLCBhY2NvcmRpbmcgdG8gUEVQIDMxMTkuCisKK1VuaXQgdGVzdHMgYXJlIGluIHRlc3RfY29sbGVjdGlvbnMuCisiIiIKKworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitpbXBvcnQgc3lzCisKK19fYWxsX18gPSBbIkhhc2hhYmxlIiwgIkl0ZXJhYmxlIiwgIkl0ZXJhdG9yIiwKKyAgICAgICAgICAgIlNpemVkIiwgIkNvbnRhaW5lciIsICJDYWxsYWJsZSIsCisgICAgICAgICAgICJTZXQiLCAiTXV0YWJsZVNldCIsCisgICAgICAgICAgICJNYXBwaW5nIiwgIk11dGFibGVNYXBwaW5nIiwKKyAgICAgICAgICAgIk1hcHBpbmdWaWV3IiwgIktleXNWaWV3IiwgIkl0ZW1zVmlldyIsICJWYWx1ZXNWaWV3IiwKKyAgICAgICAgICAgIlNlcXVlbmNlIiwgIk11dGFibGVTZXF1ZW5jZSIsCisgICAgICAgICAgICJCeXRlU3RyaW5nIiwKKyAgICAgICAgICAgXQorCisjIFRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbmFtZWQgZnJvbSBjb2xsZWN0aW9ucy5hYmMgdG8gX2NvbGxlY3Rpb25zX2FiYyB0bworIyBzcGVlZCB1cCBpbnRlcnByZXRlciBzdGFydHVwLiBTb21lIG9mIHRoZSB0eXBlcyBzdWNoIGFzIE11dGFibGVNYXBwaW5nIGFyZQorIyByZXF1aXJlZCBlYXJseSBidXQgY29sbGVjdGlvbnMgbW9kdWxlIGltcG9ydHMgYSBsb3Qgb2Ygb3RoZXIgbW9kdWxlcy4KKyMgU2VlIGlzc3VlICMxOTIxOAorX19uYW1lX18gPSAiY29sbGVjdGlvbnMuYWJjIgorCisjIFByaXZhdGUgbGlzdCBvZiB0eXBlcyB0aGF0IHdlIHdhbnQgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgdmFyaW91cyBBQkNzCisjIHNvIHRoYXQgdGhleSB3aWxsIHBhc3MgdGVzdHMgbGlrZToKKyMgICAgICAgaXQgPSBpdGVyKHNvbWVieXRlYXJyYXkpCisjICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGl0LCBJdGVyYWJsZSkKKyMgTm90ZTogIGluIG90aGVyIGltcGxlbWVudGF0aW9ucywgdGhlc2UgdHlwZXMgbWFueSBub3QgYmUgZGlzdGluY3QKKyMgYW5kIHRoZXkgbWFrZSBoYXZlIHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyB0eXBlcyB0aGF0CisjIGFyZSBub3QgaW5jbHVkZWQgb24gdGhpcyBsaXN0LgorYnl0ZXNfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoYicnKSkKK2J5dGVhcnJheV9pdGVyYXRvciA9IHR5cGUoaXRlcihieXRlYXJyYXkoKSkpCisjY2FsbGFibGVfaXRlcmF0b3IgPSA/Pz8KK2RpY3Rfa2V5aXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30ua2V5cygpKSkKK2RpY3RfdmFsdWVpdGVyYXRvciA9IHR5cGUoaXRlcih7fS52YWx1ZXMoKSkpCitkaWN0X2l0ZW1pdGVyYXRvciA9IHR5cGUoaXRlcih7fS5pdGVtcygpKSkKK2xpc3RfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoW10pKQorbGlzdF9yZXZlcnNlaXRlcmF0b3IgPSB0eXBlKGl0ZXIocmV2ZXJzZWQoW10pKSkKK3JhbmdlX2l0ZXJhdG9yID0gdHlwZShpdGVyKHJhbmdlKDApKSkKK3NldF9pdGVyYXRvciA9IHR5cGUoaXRlcihzZXQoKSkpCitzdHJfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoIiIpKQordHVwbGVfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoKCkpKQoremlwX2l0ZXJhdG9yID0gdHlwZShpdGVyKHppcCgpKSkKKyMjIHZpZXdzICMjCitkaWN0X2tleXMgPSB0eXBlKHt9LmtleXMoKSkKK2RpY3RfdmFsdWVzID0gdHlwZSh7fS52YWx1ZXMoKSkKK2RpY3RfaXRlbXMgPSB0eXBlKHt9Lml0ZW1zKCkpCisjIyBtaXNjICMjCittYXBwaW5ncHJveHkgPSB0eXBlKHR5cGUuX19kaWN0X18pCisKKworIyMjIE9ORS1UUklDSyBQT05JRVMgIyMjCisKK2NsYXNzIEhhc2hhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiAwCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgSGFzaGFibGU6CisgICAgICAgICAgICBmb3IgQiBpbiBDLl9fbXJvX186CisgICAgICAgICAgICAgICAgaWYgIl9faGFzaF9fIiBpbiBCLl9fZGljdF9fOgorICAgICAgICAgICAgICAgICAgICBpZiBCLl9fZGljdF9fWyJfX2hhc2hfXyJdOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgSXRlcmFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgd2hpbGUgRmFsc2U6CisgICAgICAgICAgICB5aWVsZCBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgSXRlcmFibGU6CisgICAgICAgICAgICBpZiBhbnkoIl9faXRlcl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgSXRlcmF0b3IoSXRlcmFibGUpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgJ1JldHVybiB0aGUgbmV4dCBpdGVtIGZyb20gdGhlIGl0ZXJhdG9yLiBXaGVuIGV4aGF1c3RlZCwgcmFpc2UgU3RvcEl0ZXJhdGlvbicKKyAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIEl0ZXJhdG9yOgorICAgICAgICAgICAgaWYgKGFueSgiX19uZXh0X18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKSBhbmQKKyAgICAgICAgICAgICAgICBhbnkoIl9faXRlcl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCitJdGVyYXRvci5yZWdpc3RlcihieXRlc19pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGJ5dGVhcnJheV9pdGVyYXRvcikKKyNJdGVyYXRvci5yZWdpc3RlcihjYWxsYWJsZV9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGRpY3Rfa2V5aXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihkaWN0X3ZhbHVlaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihkaWN0X2l0ZW1pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGxpc3RfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihsaXN0X3JldmVyc2VpdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHJhbmdlX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoc2V0X2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoc3RyX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIodHVwbGVfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3Rlcih6aXBfaXRlcmF0b3IpCisKK2NsYXNzIFNpemVkKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBTaXplZDoKKyAgICAgICAgICAgIGlmIGFueSgiX19sZW5fXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIENvbnRhaW5lcihtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB4KToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgQ29udGFpbmVyOgorICAgICAgICAgICAgaWYgYW55KCJfX2NvbnRhaW5zX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBDYWxsYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBDYWxsYWJsZToKKyAgICAgICAgICAgIGlmIGFueSgiX19jYWxsX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCisjIyMgU0VUUyAjIyMKKworCitjbGFzcyBTZXQoU2l6ZWQsIEl0ZXJhYmxlLCBDb250YWluZXIpOgorCisgICAgIiIiQSBzZXQgaXMgYSBmaW5pdGUsIGl0ZXJhYmxlIGNvbnRhaW5lci4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCisgICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fY29udGFpbnNfXywgX19pdGVyX18gYW5kIF9fbGVuX18uCisKKyAgICBUbyBvdmVycmlkZSB0aGUgY29tcGFyaXNvbnMgKHByZXN1bWFibHkgZm9yIHNwZWVkLCBhcyB0aGUKKyAgICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHJlZGVmaW5lIF9fbGVfXyBhbmQKKyAgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgaWYgbGVuKHNlbGYpID4gbGVuKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgZWxlbSBpbiBzZWxmOgorICAgICAgICAgICAgaWYgZWxlbSBub3QgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmKSA8IGxlbihvdGhlcikgYW5kIHNlbGYuX19sZV9fKG90aGVyKQorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBvdGhlci5fX2x0X18oc2VsZikKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gb3RoZXIuX19sZV9fKHNlbGYpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmKSA9PSBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fbGVfXyhvdGhlcikKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IChzZWxmID09IG90aGVyKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX2l0ZXJhYmxlKGNscywgaXQpOgorICAgICAgICAnJydDb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGZyb20gYW55IGl0ZXJhYmxlIGlucHV0LgorCisgICAgICAgIE11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhlIGNsYXNzIGNvbnN0cnVjdG9yIHNpZ25hdHVyZQorICAgICAgICBkb2VzIG5vdCBhY2NlcHQgYW4gaXRlcmFibGUgZm9yIGFuIGlucHV0LgorICAgICAgICAnJycKKyAgICAgICAgcmV0dXJuIGNscyhpdCkKKworICAgIGRlZiBfX2FuZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZSh2YWx1ZSBmb3IgdmFsdWUgaW4gb3RoZXIgaWYgdmFsdWUgaW4gc2VsZikKKworICAgIGRlZiBpc2Rpc2pvaW50KHNlbGYsIG90aGVyKToKKyAgICAgICAgJ1JldHVybiBUcnVlIGlmIHR3byBzZXRzIGhhdmUgYSBudWxsIGludGVyc2VjdGlvbi4nCisgICAgICAgIGZvciB2YWx1ZSBpbiBvdGhlcjoKKyAgICAgICAgICAgIGlmIHZhbHVlIGluIHNlbGY6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19vcl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBjaGFpbiA9IChlIGZvciBzIGluIChzZWxmLCBvdGhlcikgZm9yIGUgaW4gcykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUoY2hhaW4pCisKKyAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgIG90aGVyID0gc2VsZi5fZnJvbV9pdGVyYWJsZShvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIHNlbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgbm90IGluIG90aGVyKQorCisgICAgZGVmIF9feG9yX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCisgICAgICAgIHJldHVybiAoc2VsZiAtIG90aGVyKSB8IChvdGhlciAtIHNlbGYpCisKKyAgICBkZWYgX2hhc2goc2VsZik6CisgICAgICAgICIiIkNvbXB1dGUgdGhlIGhhc2ggdmFsdWUgb2YgYSBzZXQuCisKKyAgICAgICAgTm90ZSB0aGF0IHdlIGRvbid0IGRlZmluZSBfX2hhc2hfXzogbm90IGFsbCBzZXRzIGFyZSBoYXNoYWJsZS4KKyAgICAgICAgQnV0IGlmIHlvdSBkZWZpbmUgYSBoYXNoYWJsZSBzZXQgdHlwZSwgaXRzIF9faGFzaF9fIHNob3VsZAorICAgICAgICBjYWxsIHRoaXMgZnVuY3Rpb24uCisKKyAgICAgICAgVGhpcyBtdXN0IGJlIGNvbXBhdGlibGUgX19lcV9fLgorCisgICAgICAgIEFsbCBzZXRzIG91Z2h0IHRvIGNvbXBhcmUgZXF1YWwgaWYgdGhleSBjb250YWluIHRoZSBzYW1lCisgICAgICAgIGVsZW1lbnRzLCByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCwgYW5kCisgICAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50czsgc28gdGhlcmUncyBub3QgbXVjaAorICAgICAgICBmcmVlZG9tIGZvciBfX2VxX18gb3IgX19oYXNoX18uICBXZSBtYXRjaCB0aGUgYWxnb3JpdGhtIHVzZWQKKyAgICAgICAgYnkgdGhlIGJ1aWx0LWluIGZyb3plbnNldCB0eXBlLgorICAgICAgICAiIiIKKyAgICAgICAgTUFYID0gc3lzLm1heHNpemUKKyAgICAgICAgTUFTSyA9IDIgKiBNQVggKyAxCisgICAgICAgIG4gPSBsZW4oc2VsZikKKyAgICAgICAgaCA9IDE5Mjc4NjgyMzcgKiAobiArIDEpCisgICAgICAgIGggJj0gTUFTSworICAgICAgICBmb3IgeCBpbiBzZWxmOgorICAgICAgICAgICAgaHggPSBoYXNoKHgpCisgICAgICAgICAgICBoIF49IChoeCBeIChoeCA8PCAxNikgXiA4OTg2OTc0NykgICogMzY0NDc5ODE2NworICAgICAgICAgICAgaCAmPSBNQVNLCisgICAgICAgIGggPSBoICogNjkwNjkgKyA5MDcxMzM5MjMKKyAgICAgICAgaCAmPSBNQVNLCisgICAgICAgIGlmIGggPiBNQVg6CisgICAgICAgICAgICBoIC09IE1BU0sgKyAxCisgICAgICAgIGlmIGggPT0gLTE6CisgICAgICAgICAgICBoID0gNTkwOTIzNzEzCisgICAgICAgIHJldHVybiBoCisKK1NldC5yZWdpc3Rlcihmcm96ZW5zZXQpCisKKworY2xhc3MgTXV0YWJsZVNldChTZXQpOgorICAgICIiIkEgbXV0YWJsZSBzZXQgaXMgYSBmaW5pdGUsIGl0ZXJhYmxlIGNvbnRhaW5lci4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCisgICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fY29udGFpbnNfXywgX19pdGVyX18sIF9fbGVuX18sCisgICAgYWRkKCksIGFuZCBkaXNjYXJkKCkuCisKKyAgICBUbyBvdmVycmlkZSB0aGUgY29tcGFyaXNvbnMgKHByZXN1bWFibHkgZm9yIHNwZWVkLCBhcyB0aGUKKyAgICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHJlZGVmaW5lIF9fbGVfXyBhbmQKKyAgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgYWRkKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiQWRkIGFuIGVsZW1lbnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBkaXNjYXJkKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiUmVtb3ZlIGFuIGVsZW1lbnQuICBEbyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGFic2VudC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlbW92ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiBJZiBub3QgYSBtZW1iZXIsIHJhaXNlIGEgS2V5RXJyb3IuIiIiCisgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IodmFsdWUpCisgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKworICAgIGRlZiBwb3Aoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcG9wcGVkIHZhbHVlLiAgUmFpc2UgS2V5RXJyb3IgaWYgZW1wdHkuIiIiCisgICAgICAgIGl0ID0gaXRlcihzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IG5leHQoaXQpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgIiIiVGhpcyBpcyBzbG93IChjcmVhdGVzIE4gbmV3IGl0ZXJhdG9ycyEpIGJ1dCBlZmZlY3RpdmUuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5wb3AoKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX19pb3JfXyhzZWxmLCBpdCk6CisgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKKyAgICAgICAgICAgIHNlbGYuYWRkKHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faWFuZF9fKHNlbGYsIGl0KToKKyAgICAgICAgZm9yIHZhbHVlIGluIChzZWxmIC0gaXQpOgorICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faXhvcl9fKHNlbGYsIGl0KToKKyAgICAgICAgaWYgaXQgaXMgc2VsZjoKKyAgICAgICAgICAgIHNlbGYuY2xlYXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaXQsIFNldCk6CisgICAgICAgICAgICAgICAgaXQgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKGl0KQorICAgICAgICAgICAgZm9yIHZhbHVlIGluIGl0OgorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGluIHNlbGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2lzdWJfXyhzZWxmLCBpdCk6CisgICAgICAgIGlmIGl0IGlzIHNlbGY6CisgICAgICAgICAgICBzZWxmLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKKyAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmCisKK011dGFibGVTZXQucmVnaXN0ZXIoc2V0KQorCisKKyMjIyBNQVBQSU5HUyAjIyMKKworCitjbGFzcyBNYXBwaW5nKFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICAiIiJBIE1hcHBpbmcgaXMgYSBnZW5lcmljIGNvbnRhaW5lciBmb3IgYXNzb2NpYXRpbmcga2V5L3ZhbHVlCisgICAgcGFpcnMuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAorICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2dldGl0ZW1fXywgX19pdGVyX18sIGFuZCBfX2xlbl9fLgorCisgICAgIiIiCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAnRC5nZXQoa1ssZF0pIC0+IERba10gaWYgayBpbiBELCBlbHNlIGQuICBkIGRlZmF1bHRzIHRvIE5vbmUuJworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgIkQua2V5cygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGtleXMiCisgICAgICAgIHJldHVybiBLZXlzVmlldyhzZWxmKQorCisgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICAiRC5pdGVtcygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGl0ZW1zIgorICAgICAgICByZXR1cm4gSXRlbXNWaWV3KHNlbGYpCisKKyAgICBkZWYgdmFsdWVzKHNlbGYpOgorICAgICAgICAiRC52YWx1ZXMoKSAtPiBhbiBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgdmFsdWVzIgorICAgICAgICByZXR1cm4gVmFsdWVzVmlldyhzZWxmKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gZGljdChzZWxmLml0ZW1zKCkpID09IGRpY3Qob3RoZXIuaXRlbXMoKSkKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IChzZWxmID09IG90aGVyKQorCitNYXBwaW5nLnJlZ2lzdGVyKG1hcHBpbmdwcm94eSkKKworCitjbGFzcyBNYXBwaW5nVmlldyhTaXplZCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFwcGluZyk6CisgICAgICAgIHNlbGYuX21hcHBpbmcgPSBtYXBwaW5nCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9tYXBwaW5nKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3swLl9fY2xhc3NfXy5fX25hbWVfX30oezAuX21hcHBpbmchcn0pJy5mb3JtYXQoc2VsZikKKworCitjbGFzcyBLZXlzVmlldyhNYXBwaW5nVmlldywgU2V0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZnJvbV9pdGVyYWJsZShzZWxmLCBpdCk6CisgICAgICAgIHJldHVybiBzZXQoaXQpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5fbWFwcGluZworCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX21hcHBpbmcKKworS2V5c1ZpZXcucmVnaXN0ZXIoZGljdF9rZXlzKQorCisKK2NsYXNzIEl0ZW1zVmlldyhNYXBwaW5nVmlldywgU2V0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZnJvbV9pdGVyYWJsZShzZWxmLCBpdCk6CisgICAgICAgIHJldHVybiBzZXQoaXQpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0pOgorICAgICAgICBrZXksIHZhbHVlID0gaXRlbQorICAgICAgICB0cnk6CisgICAgICAgICAgICB2ID0gc2VsZi5fbWFwcGluZ1trZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHYgPT0gdmFsdWUKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgorICAgICAgICAgICAgeWllbGQgKGtleSwgc2VsZi5fbWFwcGluZ1trZXldKQorCitJdGVtc1ZpZXcucmVnaXN0ZXIoZGljdF9pdGVtcykKKworCitjbGFzcyBWYWx1ZXNWaWV3KE1hcHBpbmdWaWV3KToKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmFsdWUpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6CisgICAgICAgICAgICBpZiB2YWx1ZSA9PSBzZWxmLl9tYXBwaW5nW2tleV06CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX21hcHBpbmdba2V5XQorCitWYWx1ZXNWaWV3LnJlZ2lzdGVyKGRpY3RfdmFsdWVzKQorCisKK2NsYXNzIE11dGFibGVNYXBwaW5nKE1hcHBpbmcpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgICIiIkEgTXV0YWJsZU1hcHBpbmcgaXMgYSBnZW5lcmljIGNvbnRhaW5lciBmb3IgYXNzb2NpYXRpbmcKKyAgICBrZXkvdmFsdWUgcGFpcnMuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAorICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2dldGl0ZW1fXywgX19zZXRpdGVtX18sIF9fZGVsaXRlbV9fLAorICAgIF9faXRlcl9fLCBhbmQgX19sZW5fXy4KKworICAgICIiIgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICByYWlzZSBLZXlFcnJvcgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHJhaXNlIEtleUVycm9yCisKKyAgICBfX21hcmtlciA9IG9iamVjdCgpCisKKyAgICBkZWYgcG9wKHNlbGYsIGtleSwgZGVmYXVsdD1fX21hcmtlcik6CisgICAgICAgICcnJ0QucG9wKGtbLGRdKSAtPiB2LCByZW1vdmUgc3BlY2lmaWVkIGtleSBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlLgorICAgICAgICAgIElmIGtleSBpcyBub3QgZm91bmQsIGQgaXMgcmV0dXJuZWQgaWYgZ2l2ZW4sIG90aGVyd2lzZSBLZXlFcnJvciBpcyByYWlzZWQuCisgICAgICAgICcnJworICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpZiBkZWZhdWx0IGlzIHNlbGYuX19tYXJrZXI6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWwgc2VsZltrZXldCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBwb3BpdGVtKHNlbGYpOgorICAgICAgICAnJydELnBvcGl0ZW0oKSAtPiAoaywgdiksIHJlbW92ZSBhbmQgcmV0dXJuIHNvbWUgKGtleSwgdmFsdWUpIHBhaXIKKyAgICAgICAgICAgYXMgYSAyLXR1cGxlOyBidXQgcmFpc2UgS2V5RXJyb3IgaWYgRCBpcyBlbXB0eS4KKyAgICAgICAgJycnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IG5leHQoaXRlcihzZWxmKSkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorICAgICAgICB2YWx1ZSA9IHNlbGZba2V5XQorICAgICAgICBkZWwgc2VsZltrZXldCisgICAgICAgIHJldHVybiBrZXksIHZhbHVlCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICdELmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBELicKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBzZWxmLnBvcGl0ZW0oKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdXBkYXRlKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAnJycgRC51cGRhdGUoW0UsIF0qKkYpIC0+IE5vbmUuICBVcGRhdGUgRCBmcm9tIG1hcHBpbmcvaXRlcmFibGUgRSBhbmQgRi4KKyAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgaGFzIGEgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgayBpbiBFOiBEW2tdID0gRVtrXQorICAgICAgICAgICAgSWYgRSBwcmVzZW50IGFuZCBsYWNrcyAua2V5cygpIG1ldGhvZCwgZG9lczogICAgIGZvciAoaywgdikgaW4gRTogRFtrXSA9IHYKKyAgICAgICAgICAgIEluIGVpdGhlciBjYXNlLCB0aGlzIGlzIGZvbGxvd2VkIGJ5OiBmb3IgaywgdiBpbiBGLml0ZW1zKCk6IERba10gPSB2CisgICAgICAgICcnJworICAgICAgICBpZiBsZW4oYXJncykgPiAyOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1cGRhdGUoKSB0YWtlcyBhdCBtb3N0IDIgcG9zaXRpb25hbCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50cyAoe30gZ2l2ZW4pIi5mb3JtYXQobGVuKGFyZ3MpKSkKKyAgICAgICAgZWxpZiBub3QgYXJnczoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbGVhc3QgMSBhcmd1bWVudCAoMCBnaXZlbikiKQorICAgICAgICBzZWxmID0gYXJnc1swXQorICAgICAgICBvdGhlciA9IGFyZ3NbMV0gaWYgbGVuKGFyZ3MpID49IDIgZWxzZSAoKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIE1hcHBpbmcpOgorICAgICAgICAgICAgZm9yIGtleSBpbiBvdGhlcjoKKyAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCisgICAgICAgIGVsaWYgaGFzYXR0cihvdGhlciwgImtleXMiKToKKyAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXIua2V5cygpOgorICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IG90aGVyW2tleV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIG90aGVyOgorICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3ZHMuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCisKKyAgICBkZWYgc2V0ZGVmYXVsdChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICdELnNldGRlZmF1bHQoa1ssZF0pIC0+IEQuZ2V0KGssZCksIGFsc28gc2V0IERba109ZCBpZiBrIG5vdCBpbiBEJworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IGRlZmF1bHQKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworTXV0YWJsZU1hcHBpbmcucmVnaXN0ZXIoZGljdCkKKworCisjIyMgU0VRVUVOQ0VTICMjIworCisKK2NsYXNzIFNlcXVlbmNlKFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKKworICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtb25seSBzZXF1ZW5jZS4KKworICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBvdmVycmlkZSBfX25ld19fIG9yIF9faW5pdF9fLAorICAgIF9fZ2V0aXRlbV9fLCBhbmQgX19sZW5fXy4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGkgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdiA9IHNlbGZbaV0KKyAgICAgICAgICAgICAgICB5aWVsZCB2CisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgZm9yIHYgaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIHYgPT0gdmFsdWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX19yZXZlcnNlZF9fKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShsZW4oc2VsZikpKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGZbaV0KKworICAgIGRlZiBpbmRleChzZWxmLCB2YWx1ZSk6CisgICAgICAgICcnJ1MuaW5kZXgodmFsdWUpIC0+IGludGVnZXIgLS0gcmV0dXJuIGZpcnN0IGluZGV4IG9mIHZhbHVlLgorICAgICAgICAgICBSYWlzZXMgVmFsdWVFcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnQuCisgICAgICAgICcnJworICAgICAgICBmb3IgaSwgdiBpbiBlbnVtZXJhdGUoc2VsZik6CisgICAgICAgICAgICBpZiB2ID09IHZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKworICAgIGRlZiBjb3VudChzZWxmLCB2YWx1ZSk6CisgICAgICAgICdTLmNvdW50KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdmFsdWUnCisgICAgICAgIHJldHVybiBzdW0oMSBmb3IgdiBpbiBzZWxmIGlmIHYgPT0gdmFsdWUpCisKK1NlcXVlbmNlLnJlZ2lzdGVyKHR1cGxlKQorU2VxdWVuY2UucmVnaXN0ZXIoc3RyKQorU2VxdWVuY2UucmVnaXN0ZXIocmFuZ2UpCitTZXF1ZW5jZS5yZWdpc3RlcihtZW1vcnl2aWV3KQorCisKK2NsYXNzIEJ5dGVTdHJpbmcoU2VxdWVuY2UpOgorCisgICAgIiIiVGhpcyB1bmlmaWVzIGJ5dGVzIGFuZCBieXRlYXJyYXkuCisKKyAgICBYWFggU2hvdWxkIGFkZCBhbGwgdGhlaXIgbWV0aG9kcy4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKK0J5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZXMpCitCeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVhcnJheSkKKworCitjbGFzcyBNdXRhYmxlU2VxdWVuY2UoU2VxdWVuY2UpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtd3JpdGUgc2VxdWVuY2UuCisKKyAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3QgcHJvdmlkZSBfX25ld19fIG9yIF9faW5pdF9fLAorICAgIF9fZ2V0aXRlbV9fLCBfX3NldGl0ZW1fXywgX19kZWxpdGVtX18sIF9fbGVuX18sIGFuZCBpbnNlcnQoKS4KKworICAgICIiIgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGluZGV4LCB2YWx1ZSk6CisgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsIHZhbHVlKToKKyAgICAgICAgJ1MuaW5zZXJ0KGluZGV4LCB2YWx1ZSkgLS0gaW5zZXJ0IHZhbHVlIGJlZm9yZSBpbmRleCcKKyAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisgICAgZGVmIGFwcGVuZChzZWxmLCB2YWx1ZSk6CisgICAgICAgICdTLmFwcGVuZCh2YWx1ZSkgLS0gYXBwZW5kIHZhbHVlIHRvIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlJworICAgICAgICBzZWxmLmluc2VydChsZW4oc2VsZiksIHZhbHVlKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAnUy5jbGVhcigpIC0+IE5vbmUgLS0gcmVtb3ZlIGFsbCBpdGVtcyBmcm9tIFMnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5wb3AoKQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiByZXZlcnNlKHNlbGYpOgorICAgICAgICAnUy5yZXZlcnNlKCkgLS0gcmV2ZXJzZSAqSU4gUExBQ0UqJworICAgICAgICBuID0gbGVuKHNlbGYpCisgICAgICAgIGZvciBpIGluIHJhbmdlKG4vLzIpOgorICAgICAgICAgICAgc2VsZltpXSwgc2VsZltuLWktMV0gPSBzZWxmW24taS0xXSwgc2VsZltpXQorCisgICAgZGVmIGV4dGVuZChzZWxmLCB2YWx1ZXMpOgorICAgICAgICAnUy5leHRlbmQoaXRlcmFibGUpIC0tIGV4dGVuZCBzZXF1ZW5jZSBieSBhcHBlbmRpbmcgZWxlbWVudHMgZnJvbSB0aGUgaXRlcmFibGUnCisgICAgICAgIGZvciB2IGluIHZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kKHYpCisKKyAgICBkZWYgcG9wKHNlbGYsIGluZGV4PS0xKToKKyAgICAgICAgJycnUy5wb3AoW2luZGV4XSkgLT4gaXRlbSAtLSByZW1vdmUgYW5kIHJldHVybiBpdGVtIGF0IGluZGV4IChkZWZhdWx0IGxhc3QpLgorICAgICAgICAgICBSYWlzZSBJbmRleEVycm9yIGlmIGxpc3QgaXMgZW1wdHkgb3IgaW5kZXggaXMgb3V0IG9mIHJhbmdlLgorICAgICAgICAnJycKKyAgICAgICAgdiA9IHNlbGZbaW5kZXhdCisgICAgICAgIGRlbCBzZWxmW2luZGV4XQorICAgICAgICByZXR1cm4gdgorCisgICAgZGVmIHJlbW92ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICcnJ1MucmVtb3ZlKHZhbHVlKSAtLSByZW1vdmUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB2YWx1ZS4KKyAgICAgICAgICAgUmFpc2UgVmFsdWVFcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnQuCisgICAgICAgICcnJworICAgICAgICBkZWwgc2VsZltzZWxmLmluZGV4KHZhbHVlKV0KKworICAgIGRlZiBfX2lhZGRfXyhzZWxmLCB2YWx1ZXMpOgorICAgICAgICBzZWxmLmV4dGVuZCh2YWx1ZXMpCisgICAgICAgIHJldHVybiBzZWxmCisKK011dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihsaXN0KQorTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKGJ5dGVhcnJheSkgICMgTXVsdGlwbHkgaW5oZXJpdGluZywgc2VlIEJ5dGVTdHJpbmcKZGlmZiAtLWdpdCBhL0xpYi9fZHVtbXlfdGhyZWFkLnB5IGIvTGliL19kdW1teV90aHJlYWQucHkKaW5kZXggMTNiMWYyNi4uYjY3Y2ZiOSAxMDA2NDQKLS0tIGEvTGliL19kdW1teV90aHJlYWQucHkKKysrIGIvTGliL19kdW1teV90aHJlYWQucHkKQEAgLTgxLDYgKzgxLDEwIEBACiAgICAgICAgIHJhaXNlIGVycm9yKCJzZXR0aW5nIHRocmVhZCBzdGFjayBzaXplIG5vdCBzdXBwb3J0ZWQiKQogICAgIHJldHVybiAwCiAKK2RlZiBfc2V0X3NlbnRpbmVsKCk6CisgICAgIiIiRHVtbXkgaW1wbGVtZW50YXRpb24gb2YgX3RocmVhZC5fc2V0X3NlbnRpbmVsKCkuIiIiCisgICAgcmV0dXJuIExvY2tUeXBlKCkKKwogY2xhc3MgTG9ja1R5cGUob2JqZWN0KToKICAgICAiIiJDbGFzcyBpbXBsZW1lbnRpbmcgZHVtbXkgaW1wbGVtZW50YXRpb24gb2YgX3RocmVhZC5Mb2NrVHlwZS4KIApkaWZmIC0tZ2l0IGEvTGliL19vc3hfc3VwcG9ydC5weSBiL0xpYi9fb3N4X3N1cHBvcnQucHkKaW5kZXggNTBiMmQxNy4uNDBmYzc4YiAxMDA2NDQKLS0tIGEvTGliL19vc3hfc3VwcG9ydC5weQorKysgYi9MaWIvX29zeF9zdXBwb3J0LnB5CkBAIC0zOCw3ICszOCw3IEBACiAgICAgcGF0aHMgPSBwYXRoLnNwbGl0KG9zLnBhdGhzZXApCiAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChleGVjdXRhYmxlKQogCi0gICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIG9zLm5hbWUgPT0gJ29zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CisgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSBhbmQgKGV4dCAhPSAnLmV4ZScpOgogICAgICAgICBleGVjdXRhYmxlID0gZXhlY3V0YWJsZSArICcuZXhlJwogCiAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGV4ZWN1dGFibGUpOgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICBfU1lTVEVNX1ZFUlNJT04gPSAnJwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbignL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0JykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBXZSdyZSBvbiBhIHBsYWluIGRhcndpbiBib3gsIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdAogICAgICAgICAgICAgIyBiZWhhdmlvdXIuCiAgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvX3B5aW8ucHkgYi9MaWIvX3B5aW8ucHkKaW5kZXggOWEyYTFhYS4uYjA0ZDIzYSAxMDA2NDQKLS0tIGEvTGliL19weWlvLnB5CisrKyBiL0xpYi9fcHlpby5weQpAQCAtMzQsNyArMzQsNyBAQAogZGVmIG9wZW4oZmlsZSwgbW9kZT0iciIsIGJ1ZmZlcmluZz0tMSwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsCiAgICAgICAgICBuZXdsaW5lPU5vbmUsIGNsb3NlZmQ9VHJ1ZSwgb3BlbmVyPU5vbmUpOgogCi0gICAgciIiIk9wZW4gZmlsZSBhbmQgcmV0dXJuIGEgc3RyZWFtLiAgUmFpc2UgSU9FcnJvciB1cG9uIGZhaWx1cmUuCisgICAgciIiIk9wZW4gZmlsZSBhbmQgcmV0dXJuIGEgc3RyZWFtLiAgUmFpc2UgT1NFcnJvciB1cG9uIGZhaWx1cmUuCiAKICAgICBmaWxlIGlzIGVpdGhlciBhIHRleHQgb3IgYnl0ZSBzdHJpbmcgZ2l2aW5nIHRoZSBuYW1lIChhbmQgdGhlIHBhdGgKICAgICBpZiB0aGUgZmlsZSBpc24ndCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkgb2YgdGhlIGZpbGUgdG8KQEAgLTYyLDggKzYyLDcgQEAKICAgICAnYicgICAgICAgYmluYXJ5IG1vZGUKICAgICAndCcgICAgICAgdGV4dCBtb2RlIChkZWZhdWx0KQogICAgICcrJyAgICAgICBvcGVuIGEgZGlzayBmaWxlIGZvciB1cGRhdGluZyAocmVhZGluZyBhbmQgd3JpdGluZykKLSAgICAnVScgICAgICAgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSAoZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OyB1bm5lZWRlZAotICAgICAgICAgICAgICBmb3IgbmV3IGNvZGUpCisgICAgJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGRlcHJlY2F0ZWQpCiAgICAgPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAgVGhlIGRlZmF1bHQgbW9kZSBpcyAncnQnIChvcGVuIGZvciByZWFkaW5nIHRleHQpLiBGb3IgYmluYXJ5IHJhbmRvbQpAQCAtNzksNiArNzgsMTAgQEAKICAgICByZXR1cm5lZCBhcyBzdHJpbmdzLCB0aGUgYnl0ZXMgaGF2aW5nIGJlZW4gZmlyc3QgZGVjb2RlZCB1c2luZyBhCiAgICAgcGxhdGZvcm0tZGVwZW5kZW50IGVuY29kaW5nIG9yIHVzaW5nIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgaWYgZ2l2ZW4uCiAKKyAgICAnVScgbW9kZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbiBmdXR1cmUgdmVyc2lvbnMKKyAgICBvZiBQeXRob24uICBJdCBoYXMgbm8gZWZmZWN0IGluIFB5dGhvbiAzLiAgVXNlIG5ld2xpbmUgdG8gY29udHJvbAorICAgIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlLgorCiAgICAgYnVmZmVyaW5nIGlzIGFuIG9wdGlvbmFsIGludGVnZXIgdXNlZCB0byBzZXQgdGhlIGJ1ZmZlcmluZyBwb2xpY3kuCiAgICAgUGFzcyAwIHRvIHN3aXRjaCBidWZmZXJpbmcgb2ZmIChvbmx5IGFsbG93ZWQgaW4gYmluYXJ5IG1vZGUpLCAxIHRvIHNlbGVjdAogICAgIGxpbmUgYnVmZmVyaW5nIChvbmx5IHVzYWJsZSBpbiB0ZXh0IG1vZGUpLCBhbmQgYW4gaW50ZWdlciA+IDEgdG8gaW5kaWNhdGUKQEAgLTEyOSw2ICsxMzIsOCBAQAogICAgIGJlIGtlcHQgb3BlbiB3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZC4gVGhpcyBkb2VzIG5vdCB3b3JrIHdoZW4gYSBmaWxlIG5hbWUgaXMKICAgICBnaXZlbiBhbmQgbXVzdCBiZSBUcnVlIGluIHRoYXQgY2FzZS4KIAorICAgIFRoZSBuZXdseSBjcmVhdGVkIGZpbGUgaXMgbm9uLWluaGVyaXRhYmxlLgorCiAgICAgQSBjdXN0b20gb3BlbmVyIGNhbiBiZSB1c2VkIGJ5IHBhc3NpbmcgYSBjYWxsYWJsZSBhcyAqb3BlbmVyKi4gVGhlCiAgICAgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBmaWxlIG9iamVjdCBpcyB0aGVuIG9idGFpbmVkIGJ5IGNhbGxpbmcKICAgICAqb3BlbmVyKiB3aXRoICgqZmlsZSosICpmbGFncyopLiAqb3BlbmVyKiBtdXN0IHJldHVybiBhbiBvcGVuIGZpbGUKQEAgLTE3Miw2ICsxNzcsOSBAQAogICAgIGlmICJVIiBpbiBtb2RlczoKICAgICAgICAgaWYgY3JlYXRpbmcgb3Igd3JpdGluZyBvciBhcHBlbmRpbmc6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCB1c2UgVSBhbmQgd3JpdGluZyBtb2RlIGF0IG9uY2UiKQorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgd2FybmluZ3Mud2FybigiJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICByZWFkaW5nID0gVHJ1ZQogICAgIGlmIHRleHQgYW5kIGJpbmFyeToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgaGF2ZSB0ZXh0IGFuZCBiaW5hcnkgbW9kZSBhdCBvbmNlIikKQEAgLTIwMCw3ICsyMDgsNyBAQAogICAgICAgICBidWZmZXJpbmcgPSBERUZBVUxUX0JVRkZFUl9TSVpFCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGJzID0gb3MuZnN0YXQocmF3LmZpbGVubygpKS5zdF9ibGtzaXplCi0gICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBicyA+IDE6CkBAIC0yNTQsNyArMjYyLDcgQEAKIHRyeToKICAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCiBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRpb24oVmFsdWVFcnJvciwgSU9FcnJvcik6CisgICAgY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRpb24oVmFsdWVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgIHBhc3MKIAogCkBAIC0yNzgsNyArMjg2LDcgQEAKICAgICByZWFkaW50bykgbmVlZGVkLiBUZXh0IEkvTyBjbGFzc2VzIHdvcmsgd2l0aCBzdHIgZGF0YS4KIAogICAgIE5vdGUgdGhhdCBjYWxsaW5nIGFueSBtZXRob2QgKGV2ZW4gaW5xdWlyaWVzKSBvbiBhIGNsb3NlZCBzdHJlYW0gaXMKLSAgICB1bmRlZmluZWQuIEltcGxlbWVudGF0aW9ucyBtYXkgcmFpc2UgSU9FcnJvciBpbiB0aGlzIGNhc2UuCisgICAgdW5kZWZpbmVkLiBJbXBsZW1lbnRhdGlvbnMgbWF5IHJhaXNlIE9TRXJyb3IgaW4gdGhpcyBjYXNlLgogCiAgICAgSU9CYXNlIChhbmQgaXRzIHN1YmNsYXNzZXMpIHN1cHBvcnQgdGhlIGl0ZXJhdG9yIHByb3RvY29sLCBtZWFuaW5nCiAgICAgdGhhdCBhbiBJT0Jhc2Ugb2JqZWN0IGNhbiBiZSBpdGVyYXRlZCBvdmVyIHlpZWxkaW5nIHRoZSBsaW5lcyBpbiBhCkBAIC0yOTQsNyArMzAyLDcgQEAKICAgICAjIyMgSW50ZXJuYWwgIyMjCiAKICAgICBkZWYgX3Vuc3VwcG9ydGVkKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gSU9FcnJvciBleGNlcHRpb24gZm9yIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMuIiIiCisgICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBPU0Vycm9yIGV4Y2VwdGlvbiBmb3IgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucy4iIiIKICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRPcGVyYXRpb24oIiVzLiVzKCkgbm90IHN1cHBvcnRlZCIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIG5hbWUpKQogCkBAIC00NDEsNyArNDQ5LDcgQEAKICAgICBkZWYgZmlsZW5vKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIChhbiBpbnQpIGlmIG9uZSBleGlzdHMuCiAKLSAgICAgICAgQW4gSU9FcnJvciBpcyByYWlzZWQgaWYgdGhlIElPIG9iamVjdCBkb2VzIG5vdCB1c2UgYSBmaWxlIGRlc2NyaXB0b3IuCisgICAgICAgIEFuIE9TRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBJTyBvYmplY3QgZG9lcyBub3QgdXNlIGEgZmlsZSBkZXNjcmlwdG9yLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoImZpbGVubyIpCiAKQEAgLTQ1NSwxMSArNDYzLDExIEBACiAKICAgICAjIyMgUmVhZGxpbmVbc10gYW5kIHdyaXRlbGluZXMgIyMjCiAKLSAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGltaXQ9LTEpOgorICAgIGRlZiByZWFkbGluZShzZWxmLCBzaXplPS0xKToKICAgICAgICAgciIiIlJlYWQgYW5kIHJldHVybiBhIGxpbmUgb2YgYnl0ZXMgZnJvbSB0aGUgc3RyZWFtLgogCi0gICAgICAgIElmIGxpbWl0IGlzIHNwZWNpZmllZCwgYXQgbW9zdCBsaW1pdCBieXRlcyB3aWxsIGJlIHJlYWQuCi0gICAgICAgIExpbWl0IHNob3VsZCBiZSBhbiBpbnQuCisgICAgICAgIElmIHNpemUgaXMgc3BlY2lmaWVkLCBhdCBtb3N0IHNpemUgYnl0ZXMgd2lsbCBiZSByZWFkLgorICAgICAgICBTaXplIHNob3VsZCBiZSBhbiBpbnQuCiAKICAgICAgICAgVGhlIGxpbmUgdGVybWluYXRvciBpcyBhbHdheXMgYidcbicgZm9yIGJpbmFyeSBmaWxlczsgZm9yIHRleHQKICAgICAgICAgZmlsZXMsIHRoZSBuZXdsaW5lcyBhcmd1bWVudCB0byBvcGVuIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbGluZQpAQCAtNDcyLDE4ICs0ODAsMTggQEAKICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZGFoZWFkOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQogICAgICAgICAgICAgICAgIG4gPSAocmVhZGFoZWFkLmZpbmQoYiJcbiIpICsgMSkgb3IgbGVuKHJlYWRhaGVhZCkKLSAgICAgICAgICAgICAgICBpZiBsaW1pdCA+PSAwOgotICAgICAgICAgICAgICAgICAgICBuID0gbWluKG4sIGxpbWl0KQorICAgICAgICAgICAgICAgIGlmIHNpemUgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgbiA9IG1pbihuLCBzaXplKQogICAgICAgICAgICAgICAgIHJldHVybiBuCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBkZWYgbnJlYWRhaGVhZCgpOgogICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGlmIGxpbWl0IGlzIE5vbmU6Ci0gICAgICAgICAgICBsaW1pdCA9IC0xCi0gICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UobGltaXQsIGludCk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciIpCisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHNpemUsIGludCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhbiBpbnRlZ2VyIikKICAgICAgICAgcmVzID0gYnl0ZWFycmF5KCkKLSAgICAgICAgd2hpbGUgbGltaXQgPCAwIG9yIGxlbihyZXMpIDwgbGltaXQ6CisgICAgICAgIHdoaWxlIHNpemUgPCAwIG9yIGxlbihyZXMpIDwgc2l6ZToKICAgICAgICAgICAgIGIgPSBzZWxmLnJlYWQobnJlYWRhaGVhZCgpKQogICAgICAgICAgICAgaWYgbm90IGI6CiAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTU0MiwxNyArNTUwLDE3IEBACiAgICAgIyBwcmltaXRpdmUgb3BlcmF0aW9uLCBidXQgdGhhdCB3b3VsZCBsZWFkIHRvIG5hc3R5IHJlY3Vyc2lvbiBpbiBjYXNlCiAgICAgIyBhIHN1YmNsYXNzIGRvZXNuJ3QgaW1wbGVtZW50IGVpdGhlci4pCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKLSAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMsIHdoZXJlIG4gaXMgYW4gaW50LgorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9LTEpOgorICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gc2l6ZSBieXRlcywgd2hlcmUgc2l6ZSBpcyBhbiBpbnQuCiAKICAgICAgICAgUmV0dXJucyBhbiBlbXB0eSBieXRlcyBvYmplY3Qgb24gRU9GLCBvciBOb25lIGlmIHRoZSBvYmplY3QgaXMKICAgICAgICAgc2V0IG5vdCB0byBibG9jayBhbmQgaGFzIG5vIGRhdGEgdG8gcmVhZC4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQotICAgICAgICBpZiBuIDwgMDoKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVhZGFsbCgpCi0gICAgICAgIGIgPSBieXRlYXJyYXkobi5fX2luZGV4X18oKSkKKyAgICAgICAgYiA9IGJ5dGVhcnJheShzaXplLl9faW5kZXhfXygpKQogICAgICAgICBuID0gc2VsZi5yZWFkaW50byhiKQogICAgICAgICBpZiBuIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQpAQCAtNjEwLDggKzYxOCw4IEBACiAgICAgaW1wbGVtZW50YXRpb24sIGJ1dCB3cmFwIG9uZS4KICAgICAiIiIKIAotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBuIGJ5dGVzLCB3aGVyZSBuIGlzIGFuIGludC4KKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gc2l6ZSBieXRlcywgd2hlcmUgc2l6ZSBpcyBhbiBpbnQuCiAKICAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIE5vbmUsIG9yIG5lZ2F0aXZlLCByZWFkcyBhbmQKICAgICAgICAgcmV0dXJucyBhbGwgZGF0YSB1bnRpbCBFT0YuCkBAIC02MzAsOSArNjM4LDkgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJyZWFkIikKIAotICAgIGRlZiByZWFkMShzZWxmLCBuPU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVwIHRvIG4gYnl0ZXMgd2l0aCBhdCBtb3N0IG9uZSByZWFkKCkgc3lzdGVtIGNhbGwsCi0gICAgICAgIHdoZXJlIG4gaXMgYW4gaW50LgorICAgIGRlZiByZWFkMShzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICAiIiJSZWFkIHVwIHRvIHNpemUgYnl0ZXMgd2l0aCBhdCBtb3N0IG9uZSByZWFkKCkgc3lzdGVtIGNhbGwsCisgICAgICAgIHdoZXJlIHNpemUgaXMgYW4gaW50LgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWQxIikKIApAQCAtNjk5LDEzICs3MDcsMTMgQEAKICAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZT0wKToKICAgICAgICAgbmV3X3Bvc2l0aW9uID0gc2VsZi5yYXcuc2Vlayhwb3MsIHdoZW5jZSkKICAgICAgICAgaWYgbmV3X3Bvc2l0aW9uIDwgMDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInNlZWsoKSByZXR1cm5lZCBhbiBpbnZhbGlkIHBvc2l0aW9uIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInNlZWsoKSByZXR1cm5lZCBhbiBpbnZhbGlkIHBvc2l0aW9uIikKICAgICAgICAgcmV0dXJuIG5ld19wb3NpdGlvbgogCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHBvcyA9IHNlbGYucmF3LnRlbGwoKQogICAgICAgICBpZiBwb3MgPCAwOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigidGVsbCgpIHJldHVybmVkIGFuIGludmFsaWQgcG9zaXRpb24iKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigidGVsbCgpIHJldHVybmVkIGFuIGludmFsaWQgcG9zaXRpb24iKQogICAgICAgICByZXR1cm4gcG9zCiAKICAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zPU5vbmUpOgpAQCAtODIwLDI0ICs4MjgsMjQgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBtZW1vcnl2aWV3KHNlbGYuX2J1ZmZlcikKIAotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWFkIGZyb20gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgaWYgbiA8IDA6Ci0gICAgICAgICAgICBuID0gbGVuKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIGlmIHNpemUgPCAwOgorICAgICAgICAgICAgc2l6ZSA9IGxlbihzZWxmLl9idWZmZXIpCiAgICAgICAgIGlmIGxlbihzZWxmLl9idWZmZXIpIDw9IHNlbGYuX3BvczoKICAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgbmV3cG9zID0gbWluKGxlbihzZWxmLl9idWZmZXIpLCBzZWxmLl9wb3MgKyBuKQorICAgICAgICBuZXdwb3MgPSBtaW4obGVuKHNlbGYuX2J1ZmZlciksIHNlbGYuX3BvcyArIHNpemUpCiAgICAgICAgIGIgPSBzZWxmLl9idWZmZXJbc2VsZi5fcG9zIDogbmV3cG9zXQogICAgICAgICBzZWxmLl9wb3MgPSBuZXdwb3MKICAgICAgICAgcmV0dXJuIGJ5dGVzKGIpCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6CisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemUpOgogICAgICAgICAiIiJUaGlzIGlzIHRoZSBzYW1lIGFzIHJlYWQuCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkKG4pCisgICAgICAgIHJldHVybiBzZWxmLnJlYWQoc2l6ZSkKIAogICAgIGRlZiB3cml0ZShzZWxmLCBiKToKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CkBAIC05MjcsNyArOTM1LDcgQEAKICAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGJ1ZmZlcmVkIHJlYWRlciB1c2luZyB0aGUgZ2l2ZW4gcmVhZGFibGUgcmF3IElPIG9iamVjdC4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCByYXcucmVhZGFibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJyYXciIGFyZ3VtZW50IG11c3QgYmUgcmVhZGFibGUuJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJyJyYXciIGFyZ3VtZW50IG11c3QgYmUgcmVhZGFibGUuJykKIAogICAgICAgICBfQnVmZmVyZWRJT01peGluLl9faW5pdF9fKHNlbGYsIHJhdykKICAgICAgICAgaWYgYnVmZmVyX3NpemUgPD0gMDoKQEAgLTk0MCwxOCArOTQ4LDE4IEBACiAgICAgICAgIHNlbGYuX3JlYWRfYnVmID0gYiIiCiAgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgIiIiUmVhZCBuIGJ5dGVzLgorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICIiIlJlYWQgc2l6ZSBieXRlcy4KIAotICAgICAgICBSZXR1cm5zIGV4YWN0bHkgbiBieXRlcyBvZiBkYXRhIHVubGVzcyB0aGUgdW5kZXJseWluZyByYXcgSU8KKyAgICAgICAgUmV0dXJucyBleGFjdGx5IHNpemUgYnl0ZXMgb2YgZGF0YSB1bmxlc3MgdGhlIHVuZGVybHlpbmcgcmF3IElPCiAgICAgICAgIHN0cmVhbSByZWFjaGVzIEVPRiBvciBpZiB0aGUgY2FsbCB3b3VsZCBibG9jayBpbiBub24tYmxvY2tpbmcKLSAgICAgICAgbW9kZS4gSWYgbiBpcyBuZWdhdGl2ZSwgcmVhZCB1bnRpbCBFT0Ygb3IgdW50aWwgcmVhZCgpIHdvdWxkCisgICAgICAgIG1vZGUuIElmIHNpemUgaXMgbmVnYXRpdmUsIHJlYWQgdW50aWwgRU9GIG9yIHVudGlsIHJlYWQoKSB3b3VsZAogICAgICAgICBibG9jay4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIG4gaXMgbm90IE5vbmUgYW5kIG4gPCAtMToKKyAgICAgICAgaWYgc2l6ZSBpcyBub3QgTm9uZSBhbmQgc2l6ZSA8IC0xOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCIpCiAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW5sb2NrZWQobikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VubG9ja2VkKHNpemUpCiAKICAgICBkZWYgX3JlYWRfdW5sb2NrZWQoc2VsZiwgbj1Ob25lKToKICAgICAgICAgbm9kYXRhX3ZhbCA9IGIiIgpAQCAtMTAxMSw3ICsxMDE5LDcgQEAKICAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCiAgICAgICAgIHJldHVybiBvdXRbOm5dIGlmIG91dCBlbHNlIG5vZGF0YV92YWwKIAotICAgIGRlZiBwZWVrKHNlbGYsIG49MCk6CisgICAgZGVmIHBlZWsoc2VsZiwgc2l6ZT0wKToKICAgICAgICAgIiIiUmV0dXJucyBidWZmZXJlZCBieXRlcyB3aXRob3V0IGFkdmFuY2luZyB0aGUgcG9zaXRpb24uCiAKICAgICAgICAgVGhlIGFyZ3VtZW50IGluZGljYXRlcyBhIGRlc2lyZWQgbWluaW1hbCBudW1iZXIgb2YgYnl0ZXM7IHdlCkBAIC0xMDE5LDcgKzEwMjcsNyBAQAogICAgICAgICB0aGFuIHNlbGYuYnVmZmVyX3NpemUuCiAgICAgICAgICIiIgogICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wZWVrX3VubG9ja2VkKG4pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGVla191bmxvY2tlZChzaXplKQogCiAgICAgZGVmIF9wZWVrX3VubG9ja2VkKHNlbGYsIG49MCk6CiAgICAgICAgIHdhbnQgPSBtaW4obiwgc2VsZi5idWZmZXJfc2l6ZSkKQEAgLTEwMzcsMTggKzEwNDUsMTggQEAKICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfYnVmW3NlbGYuX3JlYWRfcG9zOl0KIAotICAgIGRlZiByZWFkMShzZWxmLCBuKToKLSAgICAgICAgIiIiUmVhZHMgdXAgdG8gbiBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSByZWFkKCkgc3lzdGVtIGNhbGwuIiIiCi0gICAgICAgICMgUmV0dXJucyB1cCB0byBuIGJ5dGVzLiAgSWYgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgYnVmZmVyZWQsIHdlCisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemUpOgorICAgICAgICAiIiJSZWFkcyB1cCB0byBzaXplIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbC4iIiIKKyAgICAgICAgIyBSZXR1cm5zIHVwIHRvIHNpemUgYnl0ZXMuICBJZiBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgd2UKICAgICAgICAgIyBvbmx5IHJldHVybiBidWZmZXJlZCBieXRlcy4gIE90aGVyd2lzZSwgd2UgZG8gb25lIHJhdyByZWFkLgotICAgICAgICBpZiBuIDwgMDoKKyAgICAgICAgaWYgc2l6ZSA8IDA6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBtdXN0IGJlIHBvc2l0aXZlIikKLSAgICAgICAgaWYgbiA9PSAwOgorICAgICAgICBpZiBzaXplID09IDA6CiAgICAgICAgICAgICByZXR1cm4gYiIiCiAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgogICAgICAgICAgICAgc2VsZi5fcGVla191bmxvY2tlZCgxKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW5sb2NrZWQoCi0gICAgICAgICAgICAgICAgbWluKG4sIGxlbihzZWxmLl9yZWFkX2J1ZikgLSBzZWxmLl9yZWFkX3BvcykpCisgICAgICAgICAgICAgICAgbWluKHNpemUsIGxlbihzZWxmLl9yZWFkX2J1ZikgLSBzZWxmLl9yZWFkX3BvcykpCiAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgcmV0dXJuIF9CdWZmZXJlZElPTWl4aW4udGVsbChzZWxmKSAtIGxlbihzZWxmLl9yZWFkX2J1ZikgKyBzZWxmLl9yZWFkX3BvcwpAQCAtMTA3NCw3ICsxMDgyLDcgQEAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXcsIGJ1ZmZlcl9zaXplPURFRkFVTFRfQlVGRkVSX1NJWkUpOgogICAgICAgICBpZiBub3QgcmF3LndyaXRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcicmF3IiBhcmd1bWVudCBtdXN0IGJlIHdyaXRhYmxlLicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCcicmF3IiBhcmd1bWVudCBtdXN0IGJlIHdyaXRhYmxlLicpCiAKICAgICAgICAgX0J1ZmZlcmVkSU9NaXhpbi5fX2luaXRfXyhzZWxmLCByYXcpCiAgICAgICAgIGlmIGJ1ZmZlcl9zaXplIDw9IDA6CkBAIC0xMTM4LDcgKzExNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICBlcnJuby5FQUdBSU4sCiAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSBjb3VsZCBub3QgY29tcGxldGUgd2l0aG91dCBibG9ja2luZyIsIDApCiAgICAgICAgICAgICBpZiBuID4gbGVuKHNlbGYuX3dyaXRlX2J1Zikgb3IgbiA8IDA6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigid3JpdGUoKSByZXR1cm5lZCBpbmNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJ3cml0ZSgpIHJldHVybmVkIGluY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMiKQogICAgICAgICAgICAgZGVsIHNlbGYuX3dyaXRlX2J1Zls6bl0KIAogICAgIGRlZiB0ZWxsKHNlbGYpOgpAQCAtMTE3NCwxOCArMTE4MiwxOCBAQAogICAgICAgICBUaGUgYXJndW1lbnRzIGFyZSB0d28gUmF3SU8gaW5zdGFuY2VzLgogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IHJlYWRlci5yZWFkYWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignInJlYWRlciIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignInJlYWRlciIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQogCiAgICAgICAgIGlmIG5vdCB3cml0ZXIud3JpdGFibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJ3cml0ZXIiIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJyJ3cml0ZXIiIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKIAogICAgICAgICBzZWxmLnJlYWRlciA9IEJ1ZmZlcmVkUmVhZGVyKHJlYWRlciwgYnVmZmVyX3NpemUpCiAgICAgICAgIHNlbGYud3JpdGVyID0gQnVmZmVyZWRXcml0ZXIod3JpdGVyLCBidWZmZXJfc2l6ZSkKIAotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQotICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZChuKQorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQorICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZChzaXplKQogCiAgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgogICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZGludG8oYikKQEAgLTExOTMsMTEgKzEyMDEsMTEgQEAKICAgICBkZWYgd3JpdGUoc2VsZiwgYik6CiAgICAgICAgIHJldHVybiBzZWxmLndyaXRlci53cml0ZShiKQogCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnBlZWsobikKKyAgICBkZWYgcGVlayhzZWxmLCBzaXplPTApOgorICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucGVlayhzaXplKQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZDEobikKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkMShzaXplKQogCiAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZGFibGUoKQpAQCAtMTI0OCw3ICsxMjU2LDcgQEAKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9yZXNldF9yZWFkX2J1ZigpCiAgICAgICAgIGlmIHBvcyA8IDA6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgaW52YWxpZCBwb3NpdGlvbiIpCiAgICAgICAgIHJldHVybiBwb3MKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgpAQCAtMTI2MywyMyArMTI3MSwyMyBAQAogICAgICAgICAjIFVzZSBzZWVrIHRvIGZsdXNoIHRoZSByZWFkIGJ1ZmZlci4KICAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkV3JpdGVyLnRydW5jYXRlKHNlbGYsIHBvcykKIAotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQogICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQoc2VsZiwgbikKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQoc2VsZiwgc2l6ZSkKIAogICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKICAgICAgICAgc2VsZi5mbHVzaCgpCiAgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkaW50byhzZWxmLCBiKQogCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKKyAgICBkZWYgcGVlayhzZWxmLCBzaXplPTApOgogICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnBlZWsoc2VsZiwgbikKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnBlZWsoc2VsZiwgc2l6ZSkKIAotICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZDEoc2VsZiwgbikKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQxKHNlbGYsIHNpemUpCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYik6CiAgICAgICAgIGlmIHNlbGYuX3JlYWRfYnVmOgpAQCAtMTI5OSwxMSArMTMwNywxMSBAQAogICAgIGFyZSBpbW11dGFibGUuIFRoZXJlIGlzIG5vIHB1YmxpYyBjb25zdHJ1Y3Rvci4KICAgICAiIiIKIAotICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgotICAgICAgICAiIiJSZWFkIGF0IG1vc3QgbiBjaGFyYWN0ZXJzIGZyb20gc3RyZWFtLCB3aGVyZSBuIGlzIGFuIGludC4KKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKKyAgICAgICAgIiIiUmVhZCBhdCBtb3N0IHNpemUgY2hhcmFjdGVycyBmcm9tIHN0cmVhbSwgd2hlcmUgc2l6ZSBpcyBhbiBpbnQuCiAKLSAgICAgICAgUmVhZCBmcm9tIHVuZGVybHlpbmcgYnVmZmVyIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIG9yIHdlIGhpdCBFT0YuCi0gICAgICAgIElmIG4gaXMgbmVnYXRpdmUgb3Igb21pdHRlZCwgcmVhZCB1bnRpbCBFT0YuCisgICAgICAgIFJlYWQgZnJvbSB1bmRlcmx5aW5nIGJ1ZmZlciB1bnRpbCB3ZSBoYXZlIHNpemUgY2hhcmFjdGVycyBvciB3ZSBoaXQgRU9GLgorICAgICAgICBJZiBzaXplIGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GLgogCiAgICAgICAgIFJldHVybnMgYSBzdHJpbmcuCiAgICAgICAgICIiIgpAQCAtMTQ5NSw2ICsxNTAzLDExIEBACiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGVuY29kaW5nLCBzdHIpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBlbmNvZGluZzogJXIiICUgZW5jb2RpbmcpCiAKKyAgICAgICAgaWYgbm90IGNvZGVjcy5sb29rdXAoZW5jb2RpbmcpLl9pc190ZXh0X2VuY29kaW5nOgorICAgICAgICAgICAgbXNnID0gKCIlciBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCisgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3Mub3BlbigpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKKyAgICAgICAgICAgIHJhaXNlIExvb2t1cEVycm9yKG1zZyAlIGVuY29kaW5nKQorCiAgICAgICAgIGlmIGVycm9ycyBpcyBOb25lOgogICAgICAgICAgICAgZXJyb3JzID0gInN0cmljdCIKICAgICAgICAgZWxzZToKQEAgLTE3MjcsNyArMTc0MCw3IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLl9zZWVrYWJsZToKICAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uKCJ1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUiKQogICAgICAgICBpZiBub3Qgc2VsZi5fdGVsbGluZzoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigidGVsbGluZyBwb3NpdGlvbiBkaXNhYmxlZCBieSBuZXh0KCkgY2FsbCIpCiAgICAgICAgIHNlbGYuZmx1c2goKQogICAgICAgICBwb3NpdGlvbiA9IHNlbGYuYnVmZmVyLnRlbGwoKQogICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlcgpAQCAtMTgxNCw3ICsxODI3LDcgQEAKICAgICAgICAgICAgICAgICBjaGFyc19kZWNvZGVkICs9IGxlbihkZWNvZGVyLmRlY29kZShiJycsIGZpbmFsPVRydWUpKQogICAgICAgICAgICAgICAgIG5lZWRfZW9mID0gMQogICAgICAgICAgICAgICAgIGlmIGNoYXJzX2RlY29kZWQgPCBjaGFyc190b19za2lwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCByZWNvbnN0cnVjdCBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW4ndCByZWNvbnN0cnVjdCBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQogCiAgICAgICAgICAgICAjIFRoZSByZXR1cm5lZCBjb29raWUgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3Qgc2FmZSBzdGFydCBwb2ludC4KICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYWNrX2Nvb2tpZSgKQEAgLTE4OTEsNyArMTkwNCw3IEBACiAKICAgICAgICAgICAgICMgU2tpcCBjaGFyc190b19za2lwIG9mIHRoZSBkZWNvZGVkIGNoYXJhY3RlcnMuCiAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fZGVjb2RlZF9jaGFycykgPCBjaGFyc190b19za2lwOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbid0IHJlc3RvcmUgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW4ndCByZXN0b3JlIGxvZ2ljYWwgZmlsZSBwb3NpdGlvbiIpCiAgICAgICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQgPSBjaGFyc190b19za2lwCiAKICAgICAgICAgIyBGaW5hbGx5LCByZXNldCB0aGUgZW5jb2RlciAobWVyZWx5IHVzZWZ1bCBmb3IgcHJvcGVyIEJPTSBoYW5kbGluZykKQEAgLTE5MDcsMTYgKzE5MjAsMTYgQEAKICAgICAgICAgICAgICAgICBlbmNvZGVyLnJlc2V0KCkKICAgICAgICAgcmV0dXJuIGNvb2tpZQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgogICAgICAgICBzZWxmLl9jaGVja1JlYWRhYmxlKCkKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQogICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlciBvciBzZWxmLl9nZXRfZGVjb2RlcigpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG4uX19pbmRleF9fCisgICAgICAgICAgICBzaXplLl9faW5kZXhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikgZnJvbSBlcnIKLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgIyBSZWFkIGV2ZXJ5dGhpbmcuCiAgICAgICAgICAgICByZXN1bHQgPSAoc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKSArCiAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5kZWNvZGUoc2VsZi5idWZmZXIucmVhZCgpLCBmaW5hbD1UcnVlKSkKQEAgLTE5MjQsMTIgKzE5MzcsMTIgQEAKICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBLZWVwIHJlYWRpbmcgY2h1bmtzIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIHRvIHJldHVybi4KKyAgICAgICAgICAgICMgS2VlcCByZWFkaW5nIGNodW5rcyB1bnRpbCB3ZSBoYXZlIHNpemUgY2hhcmFjdGVycyB0byByZXR1cm4uCiAgICAgICAgICAgICBlb2YgPSBGYWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMobikKLSAgICAgICAgICAgIHdoaWxlIGxlbihyZXN1bHQpIDwgbiBhbmQgbm90IGVvZjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUpCisgICAgICAgICAgICB3aGlsZSBsZW4ocmVzdWx0KSA8IHNpemUgYW5kIG5vdCBlb2Y6CiAgICAgICAgICAgICAgICAgZW9mID0gbm90IHNlbGYuX3JlYWRfY2h1bmsoKQotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhuIC0gbGVuKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUgLSBsZW4ocmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKQEAgLTE5NDEsMTMgKzE5NTQsMTMgQEAKICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KICAgICAgICAgcmV0dXJuIGxpbmUKIAotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD1Ob25lKToKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT1Ob25lKToKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWFkIGZyb20gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICAgICAgbGltaXQgPSAtMQotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCBpbnQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIiKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShzaXplLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYW4gaW50ZWdlciIpCiAKICAgICAgICAgIyBHcmFiIGFsbCB0aGUgZGVjb2RlZCB0ZXh0ICh3ZSB3aWxsIHJld2luZCBhbnkgZXh0cmEgYml0cyBsYXRlcikuCiAgICAgICAgIGxpbmUgPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycygpCkBAIC0yMDA2LDggKzIwMTksOCBAQAogICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBwb3MgKyBsZW4oc2VsZi5fcmVhZG5sKQogICAgICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgICAgICBpZiBsaW1pdCA+PSAwIGFuZCBsZW4obGluZSkgPj0gbGltaXQ6Ci0gICAgICAgICAgICAgICAgZW5kcG9zID0gbGltaXQgICMgcmVhY2hlZCBsZW5ndGggbGltaXQKKyAgICAgICAgICAgIGlmIHNpemUgPj0gMCBhbmQgbGVuKGxpbmUpID49IHNpemU6CisgICAgICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyByZWFjaGVkIGxlbmd0aCBzaXplCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgIyBObyBsaW5lIGVuZGluZyBzZWVuIHlldCAtIGdldCBtb3JlIGRhdGEnCkBAIC0yMDIyLDggKzIwMzUsOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCiAKLSAgICAgICAgaWYgbGltaXQgPj0gMCBhbmQgZW5kcG9zID4gbGltaXQ6Ci0gICAgICAgICAgICBlbmRwb3MgPSBsaW1pdCAgIyBkb24ndCBleGNlZWQgbGltaXQKKyAgICAgICAgaWYgc2l6ZSA+PSAwIGFuZCBlbmRwb3MgPiBzaXplOgorICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyBkb24ndCBleGNlZWQgc2l6ZQogCiAgICAgICAgICMgUmV3aW5kIF9kZWNvZGVkX2NoYXJzIHRvIGp1c3QgYWZ0ZXIgdGhlIGxpbmUgZW5kaW5nIHdlIGZvdW5kLgogICAgICAgICBzZWxmLl9yZXdpbmRfZGVjb2RlZF9jaGFycyhsZW4obGluZSkgLSBlbmRwb3MpCkBAIC0yMDU0LDcgKzIwNjcsNiBAQAogICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaW5pdGlhbF92YWx1ZSwgc3RyKToKICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluaXRpYWxfdmFsdWUgbXVzdCBiZSBzdHIgb3IgTm9uZSwgbm90IHswfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0eXBlKGluaXRpYWxfdmFsdWUpLl9fbmFtZV9fKSkKLSAgICAgICAgICAgICAgICBpbml0aWFsX3ZhbHVlID0gc3RyKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLndyaXRlKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLnNlZWsoMCkKIApkaWZmIC0tZ2l0IGEvTGliL19zaXRlYnVpbHRpbnMucHkgYi9MaWIvX3NpdGVidWlsdGlucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjIxMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL19zaXRlYnVpbHRpbnMucHkKQEAgLTAsMCArMSw5OSBAQAorIiIiCitUaGUgb2JqZWN0cyB1c2VkIGJ5IHRoZSBzaXRlIG1vZHVsZSB0byBhZGQgY3VzdG9tIGJ1aWx0aW5zLgorIiIiCisKKyMgVGhvc2Ugb2JqZWN0cyBhcmUgYWxtb3N0IGltbW9ydGFsIGFuZCB0aGV5IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlaXIgbW9kdWxlCisjIGdsb2JhbHMuICBEZWZpbmluZyB0aGVtIGluIHRoZSBzaXRlIG1vZHVsZSB3b3VsZCBrZWVwIHRvbyBtYW55IHJlZmVyZW5jZXMKKyMgYWxpdmUuCisjIE5vdGUgdGhpcyBtZWFucyB0aGlzIG1vZHVsZSBzaG91bGQgYWxzbyBhdm9pZCBrZWVwIHRoaW5ncyBhbGl2ZSBpbiBpdHMKKyMgZ2xvYmFscy4KKworaW1wb3J0IHN5cworCitjbGFzcyBRdWl0dGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGVvZik6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5lb2YgPSBlb2YKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnVXNlICVzKCkgb3IgJXMgdG8gZXhpdCcgJSAoc2VsZi5uYW1lLCBzZWxmLmVvZikKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgY29kZT1Ob25lKToKKyAgICAgICAgIyBTaGVsbHMgbGlrZSBJRExFIGNhdGNoIHRoZSBTeXN0ZW1FeGl0LCBidXQgbGlzdGVuIHdoZW4gdGhlaXIKKyAgICAgICAgIyBzdGRpbiB3cmFwcGVyIGlzIGNsb3NlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KGNvZGUpCisKKworY2xhc3MgX1ByaW50ZXIob2JqZWN0KToKKyAgICAiIiJpbnRlcmFjdGl2ZSBwcm9tcHQgb2JqZWN0cyBmb3IgcHJpbnRpbmcgdGhlIGxpY2Vuc2UgdGV4dCwgYSBsaXN0IG9mCisgICAgY29udHJpYnV0b3JzIGFuZCB0aGUgY29weXJpZ2h0IG5vdGljZS4iIiIKKworICAgIE1BWExJTkVTID0gMjMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkYXRhLCBmaWxlcz0oKSwgZGlycz0oKSk6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fX2RhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuX19saW5lcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fX2ZpbGVuYW1lcyA9IFtvcy5wYXRoLmpvaW4oZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXNdCisKKyAgICBkZWYgX19zZXR1cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fX2xpbmVzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLl9fZmlsZW5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInIiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX19kYXRhCisgICAgICAgIHNlbGYuX19saW5lcyA9IGRhdGEuc3BsaXQoJ1xuJykKKyAgICAgICAgc2VsZi5fX2xpbmVjbnQgPSBsZW4oc2VsZi5fX2xpbmVzKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9fc2V0dXAoKQorICAgICAgICBpZiBsZW4oc2VsZi5fX2xpbmVzKSA8PSBzZWxmLk1BWExJTkVTOgorICAgICAgICAgICAgcmV0dXJuICJcbiIuam9pbihzZWxmLl9fbGluZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIlR5cGUgJXMoKSB0byBzZWUgdGhlIGZ1bGwgJXMgdGV4dCIgJSAoKHNlbGYuX19uYW1lLCkqMikKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fX3NldHVwKCkKKyAgICAgICAgcHJvbXB0ID0gJ0hpdCBSZXR1cm4gZm9yIG1vcmUsIG9yIHEgKGFuZCBSZXR1cm4pIHRvIHF1aXQ6ICcKKyAgICAgICAgbGluZW5vID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxpbmVubywgbGluZW5vICsgc2VsZi5NQVhMSU5FUyk6CisgICAgICAgICAgICAgICAgICAgIHByaW50KHNlbGYuX19saW5lc1tpXSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmVubyArPSBzZWxmLk1BWExJTkVTCisgICAgICAgICAgICAgICAga2V5ID0gTm9uZQorICAgICAgICAgICAgICAgIHdoaWxlIGtleSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBpbnB1dChwcm9tcHQpCisgICAgICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gKCcnLCAncScpOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAncSc6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKworY2xhc3MgX0hlbHBlcihvYmplY3QpOgorICAgICIiIkRlZmluZSB0aGUgYnVpbHRpbiAnaGVscCcuCisgICAgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHB5ZG9jLmhlbHAgKHdpdGggYSB0d2lzdCkuCisKKyAgICAiIiIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJUeXBlIGhlbHAoKSBmb3IgaW50ZXJhY3RpdmUgaGVscCwgIiBcCisgICAgICAgICAgICAgICAib3IgaGVscChvYmplY3QpIGZvciBoZWxwIGFib3V0IG9iamVjdC4iCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICBpbXBvcnQgcHlkb2MKKyAgICAgICAgcmV0dXJuIHB5ZG9jLmhlbHAoKmFyZ3MsICoqa3dkcykKZGlmZiAtLWdpdCBhL0xpYi9fc3RycHRpbWUucHkgYi9MaWIvX3N0cnB0aW1lLnB5CmluZGV4IDkwNThhNjkuLmQxMDFjNmQgMTAwNjQ0Ci0tLSBhL0xpYi9fc3RycHRpbWUucHkKKysrIGIvTGliL19zdHJwdGltZS5weQpAQCAtMjEsNyArMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lIGFzIGRhdGV0aW1lX3RpbWV6b25lKQogdHJ5OgogICAgIGZyb20gX3RocmVhZCBpbXBvcnQgYWxsb2NhdGVfbG9jayBhcyBfdGhyZWFkX2FsbG9jYXRlX2xvY2sKLWV4Y2VwdDoKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBmcm9tIF9kdW1teV90aHJlYWQgaW1wb3J0IGFsbG9jYXRlX2xvY2sgYXMgX3RocmVhZF9hbGxvY2F0ZV9sb2NrCiAKIF9fYWxsX18gPSBbXQpkaWZmIC0tZ2l0IGEvTGliL2FiYy5weSBiL0xpYi9hYmMucHkKaW5kZXggMDk3NzhlOC4uMDM1OGE0NiAxMDA2NDQKLS0tIGEvTGliL2FiYy5weQorKysgYi9MaWIvYWJjLnB5CkBAIC01LDYgKzUsNyBAQAogCiBmcm9tIF93ZWFrcmVmc2V0IGltcG9ydCBXZWFrU2V0CiAKKwogZGVmIGFic3RyYWN0bWV0aG9kKGZ1bmNvYmopOgogICAgICIiIkEgZGVjb3JhdG9yIGluZGljYXRpbmcgYWJzdHJhY3QgbWV0aG9kcy4KIApAQCAtMTI0LDYgKzEyNSw4IEBACiAgICAgIyBBIGdsb2JhbCBjb3VudGVyIHRoYXQgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGEgY2xhc3MgaXMKICAgICAjIHJlZ2lzdGVyZWQgYXMgYSB2aXJ0dWFsIHN1YmNsYXNzIG9mIGFueXRoaW5nLiAgSXQgZm9yY2VzIHRoZQogICAgICMgbmVnYXRpdmUgY2FjaGUgdG8gYmUgY2xlYXJlZCBiZWZvcmUgaXRzIG5leHQgdXNlLgorICAgICMgTm90ZTogdGhpcyBjb3VudGVyIGlzIHByaXZhdGUuIFVzZSBgYWJjLmdldF9jYWNoZV90b2tlbigpYCBmb3IKKyAgICAjICAgICAgIGV4dGVybmFsIGNvZGUuCiAgICAgX2FiY19pbnZhbGlkYXRpb25fY291bnRlciA9IDAKIAogICAgIGRlZiBfX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpOgpAQCAtMjI2LDMgKzIyOSwyMCBAQAogICAgICAgICAjIE5vIGRpY2U7IHVwZGF0ZSBuZWdhdGl2ZSBjYWNoZQogICAgICAgICBjbHMuX2FiY19uZWdhdGl2ZV9jYWNoZS5hZGQoc3ViY2xhc3MpCiAgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIEFCQyhtZXRhY2xhc3M9QUJDTWV0YSk6CisgICAgIiIiSGVscGVyIGNsYXNzIHRoYXQgcHJvdmlkZXMgYSBzdGFuZGFyZCB3YXkgdG8gY3JlYXRlIGFuIEFCQyB1c2luZworICAgIGluaGVyaXRhbmNlLgorICAgICIiIgorICAgIHBhc3MKKworCitkZWYgZ2V0X2NhY2hlX3Rva2VuKCk6CisgICAgIiIiUmV0dXJucyB0aGUgY3VycmVudCBBQkMgY2FjaGUgdG9rZW4uCisKKyAgICBUaGUgdG9rZW4gaXMgYW4gb3BhcXVlIG9iamVjdCAoc3VwcG9ydGluZyBlcXVhbGl0eSB0ZXN0aW5nKSBpZGVudGlmeWluZyB0aGUKKyAgICBjdXJyZW50IHZlcnNpb24gb2YgdGhlIEFCQyBjYWNoZSBmb3IgdmlydHVhbCBzdWJjbGFzc2VzLiBUaGUgdG9rZW4gY2hhbmdlcworICAgIHdpdGggZXZlcnkgY2FsbCB0byBgYHJlZ2lzdGVyKClgYCBvbiBhbnkgQUJDLgorICAgICIiIgorICAgIHJldHVybiBBQkNNZXRhLl9hYmNfaW52YWxpZGF0aW9uX2NvdW50ZXIKZGlmZiAtLWdpdCBhL0xpYi9haWZjLnB5IGIvTGliL2FpZmMucHkKaW5kZXggZGIwOTI0YS4uOWU2NGRlOSAxMDA2NDQKLS0tIGEvTGliL2FpZmMucHkKKysrIGIvTGliL2FpZmMucHkKQEAgLTY5LDcgKzY5LDcgQEAKICAgZ2V0Y29tcHR5cGUoKSAgIC0tIHJldHVybnMgY29tcHJlc3Npb24gdHlwZSAoJ05PTkUnIGZvciBBSUZGIGZpbGVzKQogICBnZXRjb21wbmFtZSgpICAgLS0gcmV0dXJucyBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mCiAgICAgICAgICAgICAgY29tcHJlc3Npb24gdHlwZSAoJ25vdCBjb21wcmVzc2VkJyBmb3IgQUlGRiBmaWxlcykKLSAgZ2V0cGFyYW1zKCkgLS0gcmV0dXJucyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQorICBnZXRwYXJhbXMoKSAtLSByZXR1cm5zIGEgbmFtZWR0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgYWJvdmUgb3JkZXIKICAgZ2V0bWFya2VycygpICAgIC0tIGdldCB0aGUgbGlzdCBvZiBtYXJrcyBpbiB0aGUgYXVkaW8gZmlsZSBvciBOb25lCiAgICAgICAgICAgICAgaWYgdGhlcmUgYXJlIG5vIG1hcmtzCkBAIC0yNTIsNiArMjUyLDExIEBACiAgICAgX3dyaXRlX3Vsb25nKGYsIGxvbWFudCkKIAogZnJvbSBjaHVuayBpbXBvcnQgQ2h1bmsKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKKworX2FpZmNfcGFyYW1zID0gbmFtZWR0dXBsZSgnX2FpZmNfcGFyYW1zJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQorCiAKIGNsYXNzIEFpZmNfcmVhZDoKICAgICAjIFZhcmlhYmxlcyB1c2VkIGluIHRoaXMgY2xhc3M6CkBAIC0zMzQsNiArMzM5LDEyIEBACiAgICAgICAgICMgZWxzZSwgYXNzdW1lIGl0IGlzIGFuIG9wZW4gZmlsZSBvYmplY3QgYWxyZWFkeQogICAgICAgICBzZWxmLmluaXRmcChmKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtMzcyLDkgKzM4Myw5IEBACiAjIyAgICAgIHJldHVybiBzZWxmLl92ZXJzaW9uCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgaWYgbGVuKHNlbGYuX21hcmtlcnMpID09IDA6CkBAIC01NTEsNiArNTYyLDEyIEBACiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuY2xvc2UoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtNjQ0LDggKzY2MSw4IEBACiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX25jaGFubmVscyBvciBub3Qgc2VsZi5fc2FtcHdpZHRoIG9yIG5vdCBzZWxmLl9mcmFtZXJhdGU6CiAgICAgICAgICAgICByYWlzZSBFcnJvcignbm90IGFsbCBwYXJhbWV0ZXJzIHNldCcpCi0gICAgICAgIHJldHVybiBzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLCBcCi0gICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMsIHNlbGYuX2NvbXB0eXBlLCBzZWxmLl9jb21wbmFtZQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuX25jaGFubmVscywgc2VsZi5fc2FtcHdpZHRoLCBzZWxmLl9mcmFtZXJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmZyYW1lcywgc2VsZi5fY29tcHR5cGUsIHNlbGYuX2NvbXBuYW1lKQogCiAgICAgZGVmIHNldG1hcmsoc2VsZiwgaWQsIHBvcywgbmFtZSk6CiAgICAgICAgIGlmIGlkIDw9IDA6CkBAIC02NzUsNiArNjkyLDggQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX25mcmFtZXN3cml0dGVuCiAKICAgICBkZWYgd3JpdGVmcmFtZXNyYXcoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhkYXRhKS5jYXN0KCdCJykKICAgICAgICAgc2VsZi5fZW5zdXJlX2hlYWRlcl93cml0dGVuKGxlbihkYXRhKSkKICAgICAgICAgbmZyYW1lcyA9IGxlbihkYXRhKSAvLyAoc2VsZi5fc2FtcHdpZHRoICogc2VsZi5fbmNoYW5uZWxzKQogICAgICAgICBpZiBzZWxmLl9jb252ZXJ0OgpAQCAtODc4LDggKzg5Nyw3IEBACiAgICAgaWYgbm90IHN5cy5hcmd2WzE6XToKICAgICAgICAgc3lzLmFyZ3YuYXBwZW5kKCcvdXNyL2RlbW9zL2RhdGEvYXVkaW8vYmFjaC5haWZmJykKICAgICBmbiA9IHN5cy5hcmd2WzFdCi0gICAgZiA9IG9wZW4oZm4sICdyJykKLSAgICB0cnk6CisgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CiAgICAgICAgIHByaW50KCJSZWFkaW5nIiwgZm4pCiAgICAgICAgIHByaW50KCJuY2hhbm5lbHMgPSIsIGYuZ2V0bmNoYW5uZWxzKCkpCiAgICAgICAgIHByaW50KCJuZnJhbWVzICAgPSIsIGYuZ2V0bmZyYW1lcygpKQpAQCAtODkwLDE2ICs5MDgsMTEgQEAKICAgICAgICAgaWYgc3lzLmFyZ3ZbMjpdOgogICAgICAgICAgICAgZ24gPSBzeXMuYXJndlsyXQogICAgICAgICAgICAgcHJpbnQoIldyaXRpbmciLCBnbikKLSAgICAgICAgICAgIGcgPSBvcGVuKGduLCAndycpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZ24sICd3JykgYXMgZzoKICAgICAgICAgICAgICAgICBnLnNldHBhcmFtcyhmLmdldHBhcmFtcygpKQogICAgICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWRmcmFtZXMoMTAyNCkKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICBnLndyaXRlZnJhbWVzKGRhdGEpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGcuY2xvc2UoKQogICAgICAgICAgICAgcHJpbnQoIkRvbmUuIikKLSAgICBmaW5hbGx5OgotICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9hcmdwYXJzZS5weSBiL0xpYi9hcmdwYXJzZS5weQppbmRleCBiYzJiYTEzLi41YWQ3ZTEzIDEwMDY0NAotLS0gYS9MaWIvYXJncGFyc2UucHkKKysrIGIvTGliL2FyZ3BhcnNlLnB5CkBAIC02MDgsOCArNjA4LDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX2luZGVudCgpCi0gICAgICAgICAgICBmb3Igc3ViYWN0aW9uIGluIGdldF9zdWJhY3Rpb25zKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3ViYWN0aW9uCisgICAgICAgICAgICB5aWVsZCBmcm9tIGdldF9zdWJhY3Rpb25zKCkKICAgICAgICAgICAgIHNlbGYuX2RlZGVudCgpCiAKICAgICBkZWYgX3NwbGl0X2xpbmVzKHNlbGYsIHRleHQsIHdpZHRoKToKQEAgLTEwNDAsNyArMTAzOSw4IEBACiAgICAgICAgICAgICB2ZXJzaW9uID0gcGFyc2VyLnZlcnNpb24KICAgICAgICAgZm9ybWF0dGVyID0gcGFyc2VyLl9nZXRfZm9ybWF0dGVyKCkKICAgICAgICAgZm9ybWF0dGVyLmFkZF90ZXh0KHZlcnNpb24pCi0gICAgICAgIHBhcnNlci5leGl0KG1lc3NhZ2U9Zm9ybWF0dGVyLmZvcm1hdF9oZWxwKCkpCisgICAgICAgIHBhcnNlci5fcHJpbnRfbWVzc2FnZShmb3JtYXR0ZXIuZm9ybWF0X2hlbHAoKSwgX3N5cy5zdGRvdXQpCisgICAgICAgIHBhcnNlci5leGl0KCkKIAogCiBjbGFzcyBfU3ViUGFyc2Vyc0FjdGlvbihBY3Rpb24pOgpAQCAtMTE0MywxMSArMTE0MywxNyBAQAogICAgICAgICAgICAgc2FtZSB2YWx1ZXMgYXMgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgogICAgICAgICAtIGJ1ZnNpemUgLS0gVGhlIGZpbGUncyBkZXNpcmVkIGJ1ZmZlciBzaXplLiBBY2NlcHRzIHRoZSBzYW1lIHZhbHVlcyBhcwogICAgICAgICAgICAgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgorICAgICAgICAtIGVuY29kaW5nIC0tIFRoZSBmaWxlJ3MgZW5jb2RpbmcuIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZQorICAgICAgICAgICAgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCisgICAgICAgIC0gZXJyb3JzIC0tIEEgc3RyaW5nIGluZGljYXRpbmcgaG93IGVuY29kaW5nIGFuZCBkZWNvZGluZyBlcnJvcnMgYXJlIHRvCisgICAgICAgICAgICBiZSBoYW5kbGVkLiBBY2NlcHRzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBidWlsdGluIG9wZW4oKSBmdW5jdGlvbi4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlPSdyJywgYnVmc2l6ZT0tMSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGU9J3InLCBidWZzaXplPS0xLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSk6CiAgICAgICAgIHNlbGYuX21vZGUgPSBtb2RlCiAgICAgICAgIHNlbGYuX2J1ZnNpemUgPSBidWZzaXplCisgICAgICAgIHNlbGYuX2VuY29kaW5nID0gZW5jb2RpbmcKKyAgICAgICAgc2VsZi5fZXJyb3JzID0gZXJyb3JzCiAKICAgICBkZWYgX19jYWxsX18oc2VsZiwgc3RyaW5nKToKICAgICAgICAgIyB0aGUgc3BlY2lhbCBhcmd1bWVudCAiLSIgbWVhbnMgc3lzLnN0ZHtpbixvdXR9CkBAIC0xMTYyLDE0ICsxMTY4LDE4IEBACiAKICAgICAgICAgIyBhbGwgb3RoZXIgYXJndW1lbnRzIGFyZSB1c2VkIGFzIGZpbGUgbmFtZXMKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIG9wZW4oc3RyaW5nLCBzZWxmLl9tb2RlLCBzZWxmLl9idWZzaXplKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIG9wZW4oc3RyaW5nLCBzZWxmLl9tb2RlLCBzZWxmLl9idWZzaXplLCBzZWxmLl9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9ycykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIG1lc3NhZ2UgPSBfKCJjYW4ndCBvcGVuICclcyc6ICVzIikKICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50VHlwZUVycm9yKG1lc3NhZ2UgJSAoc3RyaW5nLCBlKSkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgYXJncyA9IHNlbGYuX21vZGUsIHNlbGYuX2J1ZnNpemUKLSAgICAgICAgYXJnc19zdHIgPSAnLCAnLmpvaW4ocmVwcihhcmcpIGZvciBhcmcgaW4gYXJncyBpZiBhcmcgIT0gLTEpCisgICAgICAgIGt3YXJncyA9IFsoJ2VuY29kaW5nJywgc2VsZi5fZW5jb2RpbmcpLCAoJ2Vycm9ycycsIHNlbGYuX2Vycm9ycyldCisgICAgICAgIGFyZ3Nfc3RyID0gJywgJy5qb2luKFtyZXByKGFyZykgZm9yIGFyZyBpbiBhcmdzIGlmIGFyZyAhPSAtMV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyVzPSVyJyAlIChrdywgYXJnKSBmb3Iga3csIGFyZyBpbiBrd2FyZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFyZyBpcyBub3QgTm9uZV0pCiAgICAgICAgIHJldHVybiAnJXMoJXMpJyAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBhcmdzX3N0cikKIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIwMDMsMTcgKzIwMTMsMTQgQEAKICAgICAgICAgICAgICMgcmVwbGFjZSBhcmd1bWVudHMgcmVmZXJlbmNpbmcgZmlsZXMgd2l0aCB0aGUgZmlsZSBjb250ZW50CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgYXJnc19maWxlID0gb3Blbihhcmdfc3RyaW5nWzE6XSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oYXJnX3N0cmluZ1sxOl0pIGFzIGFyZ3NfZmlsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gW10KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmdfbGluZSBpbiBhcmdzX2ZpbGUucmVhZCgpLnNwbGl0bGluZXMoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIHNlbGYuY29udmVydF9hcmdfbGluZV90b19hcmdzKGFyZ19saW5lKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3N0cmluZ3MuYXBwZW5kKGFyZykKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gc2VsZi5fcmVhZF9hcmdzX2Zyb21fZmlsZXMoYXJnX3N0cmluZ3MpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJnX3N0cmluZ3MuZXh0ZW5kKGFyZ19zdHJpbmdzKQotICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICAgICAgYXJnc19maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgZXJyID0gX3N5cy5leGNfaW5mbygpWzFdCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3Ioc3RyKGVycikpCiAKZGlmZiAtLWdpdCBhL0xpYi9hc3QucHkgYi9MaWIvYXN0LnB5CmluZGV4IDEzZjU5ZjkuLjAyYzNiMjggMTAwNjQ0Ci0tLSBhL0xpYi9hc3QucHkKKysrIGIvTGliL2FzdC5weQpAQCAtNDIsNyArNDIsNiBAQAogICAgIFB5dGhvbiBsaXRlcmFsIHN0cnVjdHVyZXM6IHN0cmluZ3MsIGJ5dGVzLCBudW1iZXJzLCB0dXBsZXMsIGxpc3RzLCBkaWN0cywKICAgICBzZXRzLCBib29sZWFucywgYW5kIE5vbmUuCiAgICAgIiIiCi0gICAgX3NhZmVfbmFtZXMgPSB7J05vbmUnOiBOb25lLCAnVHJ1ZSc6IFRydWUsICdGYWxzZSc6IEZhbHNlfQogICAgIGlmIGlzaW5zdGFuY2Uobm9kZV9vcl9zdHJpbmcsIHN0cik6CiAgICAgICAgIG5vZGVfb3Jfc3RyaW5nID0gcGFyc2Uobm9kZV9vcl9zdHJpbmcsIG1vZGU9J2V2YWwnKQogICAgIGlmIGlzaW5zdGFuY2Uobm9kZV9vcl9zdHJpbmcsIEV4cHJlc3Npb24pOgpAQCAtNjEsOSArNjAsOCBAQAogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgRGljdCk6CiAgICAgICAgICAgICByZXR1cm4gZGljdCgoX2NvbnZlcnQoayksIF9jb252ZXJ0KHYpKSBmb3IgaywgdgogICAgICAgICAgICAgICAgICAgICAgICAgaW4gemlwKG5vZGUua2V5cywgbm9kZS52YWx1ZXMpKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgTmFtZSk6Ci0gICAgICAgICAgICBpZiBub2RlLmlkIGluIF9zYWZlX25hbWVzOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2FmZV9uYW1lc1tub2RlLmlkXQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgTmFtZUNvbnN0YW50KToKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZhbHVlCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBVbmFyeU9wKSBhbmQgXAogICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5vcCwgKFVBZGQsIFVTdWIpKSBhbmQgXAogICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5vcGVyYW5kLCAoTnVtLCBVbmFyeU9wLCBCaW5PcCkpOgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaGF0LnB5IGIvTGliL2FzeW5jaGF0LnB5CmluZGV4IGVlYTM0MTguLjAzNzhmYTcgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY2hhdC5weQorKysgYi9MaWIvYXN5bmNoYXQucHkKQEAgLTU2LDggKzU2LDggQEAKIAogICAgICMgdGhlc2UgYXJlIG92ZXJyaWRhYmxlIGRlZmF1bHRzCiAKLSAgICBhY19pbl9idWZmZXJfc2l6ZSAgICAgICA9IDQwOTYKLSAgICBhY19vdXRfYnVmZmVyX3NpemUgICAgICA9IDQwOTYKKyAgICBhY19pbl9idWZmZXJfc2l6ZSAgICAgICA9IDY1NTM2CisgICAgYWNfb3V0X2J1ZmZlcl9zaXplICAgICAgPSA2NTUzNgogCiAgICAgIyB3ZSBkb24ndCB3YW50IHRvIGVuYWJsZSB0aGUgdXNlIG9mIGVuY29kaW5nIGJ5IGRlZmF1bHQsIGJlY2F1c2UgdGhhdCBpcyBhCiAgICAgIyBzaWduIG9mIGFuIGFwcGxpY2F0aW9uIGJ1ZyB0aGF0IHdlIGRvbid0IHdhbnQgdG8gcGFzcyBzaWxlbnRseQpAQCAtMTExLDcgKzExMSw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVjdiAoc2VsZi5hY19pbl9idWZmZXJfc2l6ZSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKCkKICAgICAgICAgICAgIHJldHVybgogCkBAIC0yNDAsNyArMjQwLDcgQEAKICAgICAgICAgICAgICMgc2VuZCB0aGUgZGF0YQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG51bV9zZW50ID0gc2VsZi5zZW5kKGRhdGEpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3IoKQogICAgICAgICAgICAgICAgIHJldHVybgogCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9fX2luaXRfXy5weSBiL0xpYi9hc3luY2lvL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjJmODAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQ1IEBACisiIiJUaGUgYXN5bmNpbyBwYWNrYWdlLCB0cmFja2luZyBQRVAgMzE1Ni4iIiIKKworaW1wb3J0IHN5cworCisjIFRoZSBzZWxlY3RvcnMgbW9kdWxlIGlzIGluIHRoZSBzdGRsaWIgaW4gUHl0aG9uIDMuNCBidXQgbm90IGluIDMuMy4KKyMgRG8gdGhpcyBmaXJzdCwgc28gdGhlIG90aGVyIHN1Ym1vZHVsZXMgY2FuIHVzZSAiZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMiLgorIyBQcmVmZXIgYXN5bmNpby9zZWxlY3RvcnMucHkgb3ZlciB0aGUgc3RkbGliIG9uZSwgYXMgb3VycyBtYXkgYmUgbmV3ZXIuCit0cnk6CisgICAgZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgc2VsZWN0b3JzICAjIFdpbGwgYWxzbyBiZSBleHBvcnRlZC4KKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgIyBTaW1pbGFyIHRoaW5nIGZvciBfb3ZlcmxhcHBlZC4KKyAgICB0cnk6CisgICAgICAgIGZyb20gLiBpbXBvcnQgX292ZXJsYXBwZWQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGltcG9ydCBfb3ZlcmxhcHBlZCAgIyBXaWxsIGFsc28gYmUgZXhwb3J0ZWQuCisKKyMgVGhpcyByZWxpZXMgb24gZWFjaCBvZiB0aGUgc3VibW9kdWxlcyBoYXZpbmcgYW4gX19hbGxfXyB2YXJpYWJsZS4KK2Zyb20gLmV2ZW50cyBpbXBvcnQgKgorZnJvbSAuZnV0dXJlcyBpbXBvcnQgKgorZnJvbSAubG9ja3MgaW1wb3J0ICoKK2Zyb20gLnByb3RvY29scyBpbXBvcnQgKgorZnJvbSAucXVldWVzIGltcG9ydCAqCitmcm9tIC5zdHJlYW1zIGltcG9ydCAqCitmcm9tIC5zdWJwcm9jZXNzIGltcG9ydCAqCitmcm9tIC50YXNrcyBpbXBvcnQgKgorZnJvbSAudHJhbnNwb3J0cyBpbXBvcnQgKgorCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIGZyb20gLndpbmRvd3NfZXZlbnRzIGltcG9ydCAqCitlbHNlOgorICAgIGZyb20gLnVuaXhfZXZlbnRzIGltcG9ydCAqICAjIHByYWdtYTogbm8gY292ZXIKKworCitfX2FsbF9fID0gKGV2ZW50cy5fX2FsbF9fICsKKyAgICAgICAgICAgZnV0dXJlcy5fX2FsbF9fICsKKyAgICAgICAgICAgbG9ja3MuX19hbGxfXyArCisgICAgICAgICAgIHByb3RvY29scy5fX2FsbF9fICsKKyAgICAgICAgICAgcXVldWVzLl9fYWxsX18gKworICAgICAgICAgICBzdHJlYW1zLl9fYWxsX18gKworICAgICAgICAgICBzdWJwcm9jZXNzLl9fYWxsX18gKworICAgICAgICAgICB0YXNrcy5fX2FsbF9fICsKKyAgICAgICAgICAgdHJhbnNwb3J0cy5fX2FsbF9fKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vYmFzZV9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9iYXNlX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmJmNmI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vYmFzZV9ldmVudHMucHkKQEAgLTAsMCArMSw2OTcgQEAKKyIiIkJhc2UgaW1wbGVtZW50YXRpb24gb2YgZXZlbnQgbG9vcC4KKworVGhlIGV2ZW50IGxvb3AgY2FuIGJlIGJyb2tlbiB1cCBpbnRvIGEgbXVsdGlwbGV4ZXIgKHRoZSBwYXJ0CityZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIHVzIG9mIElPIGV2ZW50cykgYW5kIHRoZSBldmVudCBsb29wIHByb3BlciwKK3doaWNoIHdyYXBzIGEgbXVsdGlwbGV4ZXIgd2l0aCBmdW5jdGlvbmFsaXR5IGZvciBzY2hlZHVsaW5nIGNhbGxiYWNrcywKK2ltbWVkaWF0ZWx5IG9yIGF0IGEgZ2l2ZW4gdGltZSBpbiB0aGUgZnV0dXJlLgorCitXaGVuZXZlciBhIHB1YmxpYyBBUEkgdGFrZXMgYSBjYWxsYmFjaywgc3Vic2VxdWVudCBwb3NpdGlvbmFsCithcmd1bWVudHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGlmL3doZW4gaXQgaXMgY2FsbGVkLiAgVGhpcworYXZvaWRzIHRoZSBwcm9saWZlcmF0aW9uIG9mIHRyaXZpYWwgbGFtYmRhcyBpbXBsZW1lbnRpbmcgY2xvc3VyZXMuCitLZXl3b3JkIGFyZ3VtZW50cyBmb3IgdGhlIGNhbGxiYWNrIGFyZSBub3Qgc3VwcG9ydGVkOyB0aGlzIGlzIGEKK2NvbnNjaW91cyBkZXNpZ24gZGVjaXNpb24sIGxlYXZpbmcgdGhlIGRvb3Igb3BlbiBmb3Iga2V5d29yZCBhcmd1bWVudHMKK3RvIG1vZGlmeSB0aGUgbWVhbmluZyBvZiB0aGUgQVBJIGNhbGwgaXRzZWxmLgorIiIiCisKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgaGVhcHEKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK19fYWxsX18gPSBbJ0Jhc2VFdmVudExvb3AnLCAnU2VydmVyJ10KKworCisjIEFyZ3VtZW50IGZvciBkZWZhdWx0IHRocmVhZCBwb29sIGV4ZWN1dG9yIGNyZWF0aW9uLgorX01BWF9XT1JLRVJTID0gNQorCisKK2NsYXNzIF9TdG9wRXJyb3IoQmFzZUV4Y2VwdGlvbik6CisgICAgIiIiUmFpc2VkIHRvIHN0b3AgdGhlIGV2ZW50IGxvb3AuIiIiCisKKworZGVmIF9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNvY2ssIGFkZHJlc3MpOgorICAgICMgRW5zdXJlIHRoYXQgdGhlIGFkZHJlc3MgaXMgYWxyZWFkeSByZXNvbHZlZCB0byBhdm9pZCB0aGUgdHJhcCBvZiBoYW5naW5nCisgICAgIyB0aGUgZW50aXJlIGV2ZW50IGxvb3Agd2hlbiB0aGUgYWRkcmVzcyByZXF1aXJlcyBkb2luZyBhIEROUyBsb29rdXAuCisgICAgZmFtaWx5ID0gc29jay5mYW1pbHkKKyAgICBpZiBmYW1pbHkgbm90IGluIChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LkFGX0lORVQ2KToKKyAgICAgICAgcmV0dXJuCisKKyAgICBob3N0LCBwb3J0ID0gYWRkcmVzcworICAgIHR5cGVfbWFzayA9IDAKKyAgICBpZiBoYXNhdHRyKHNvY2tldCwgJ1NPQ0tfTk9OQkxPQ0snKToKKyAgICAgICAgdHlwZV9tYXNrIHw9IHNvY2tldC5TT0NLX05PTkJMT0NLCisgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX0NMT0VYRUMnKToKKyAgICAgICAgdHlwZV9tYXNrIHw9IHNvY2tldC5TT0NLX0NMT0VYRUMKKyAgICAjIFVzZSBnZXRhZGRyaW5mbyhBSV9OVU1FUklDSE9TVCkgdG8gZW5zdXJlIHRoYXQgdGhlIGFkZHJlc3MgaXMKKyAgICAjIGFscmVhZHkgcmVzb2x2ZWQuCisgICAgdHJ5OgorICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1mYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPShzb2NrLnR5cGUgJiB+dHlwZV9tYXNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvPXNvY2sucHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncz1zb2NrZXQuQUlfTlVNRVJJQ0hPU1QpCisgICAgZXhjZXB0IHNvY2tldC5nYWllcnJvciBhcyBlcnI6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImFkZHJlc3MgbXVzdCBiZSByZXNvbHZlZCAoSVAgYWRkcmVzcyksIGdvdCAlcjogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoYWRkcmVzcywgZXJyKSkKKworZGVmIF9yYWlzZV9zdG9wX2Vycm9yKCphcmdzKToKKyAgICByYWlzZSBfU3RvcEVycm9yCisKKworY2xhc3MgU2VydmVyKGV2ZW50cy5BYnN0cmFjdFNlcnZlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29ja2V0cyk6CisgICAgICAgIHNlbGYubG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5zb2NrZXRzID0gc29ja2V0cworICAgICAgICBzZWxmLmFjdGl2ZV9jb3VudCA9IDAKKyAgICAgICAgc2VsZi53YWl0ZXJzID0gW10KKworICAgIGRlZiBhdHRhY2goc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc29ja2V0cyBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLmFjdGl2ZV9jb3VudCArPSAxCisKKyAgICBkZWYgZGV0YWNoKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIGFzc2VydCBzZWxmLmFjdGl2ZV9jb3VudCA+IDAKKyAgICAgICAgc2VsZi5hY3RpdmVfY291bnQgLT0gMQorICAgICAgICBpZiBzZWxmLmFjdGl2ZV9jb3VudCA9PSAwIGFuZCBzZWxmLnNvY2tldHMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dha2V1cCgpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNvY2tldHMgPSBzZWxmLnNvY2tldHMKKyAgICAgICAgaWYgc29ja2V0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc29ja2V0cyA9IE5vbmUKKyAgICAgICAgICAgIGZvciBzb2NrIGluIHNvY2tldHM6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLl9zdG9wX3NlcnZpbmcoc29jaykKKyAgICAgICAgICAgIGlmIHNlbGYuYWN0aXZlX2NvdW50ID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FrZXVwKCkKKworICAgIGRlZiBfd2FrZXVwKHNlbGYpOgorICAgICAgICB3YWl0ZXJzID0gc2VsZi53YWl0ZXJzCisgICAgICAgIHNlbGYud2FpdGVycyA9IE5vbmUKKyAgICAgICAgZm9yIHdhaXRlciBpbiB3YWl0ZXJzOgorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQod2FpdGVyKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiB3YWl0X2Nsb3NlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zb2NrZXRzIGlzIE5vbmUgb3Igc2VsZi53YWl0ZXJzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYud2FpdGVycy5hcHBlbmQod2FpdGVyKQorICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorCisKK2NsYXNzIEJhc2VFdmVudExvb3AoZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fcmVhZHkgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX3NjaGVkdWxlZCA9IFtdCisgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBOb25lCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyA9IDAKKyAgICAgICAgc2VsZi5fcnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuX2Nsb2NrX3Jlc29sdXRpb24gPSB0aW1lLmdldF9jbG9ja19pbmZvKCdtb25vdG9uaWMnKS5yZXNvbHV0aW9uCisKKyAgICBkZWYgX21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgc29ja2V0IHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3NzbF90cmFuc3BvcnQoc2VsZiwgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgU1NMIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX2RhdGFncmFtX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBkYXRhZ3JhbSB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIHJlYWQgcGlwZSB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV93cml0ZV9waXBlX3RyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgd3JpdGUgcGlwZSB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIHN1YnByb2Nlc3MgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX3JlYWRfZnJvbV9zZWxmKHNlbGYpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF93cml0ZV90b19zZWxmKHNlbGYpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgIiIiUHJvY2VzcyBzZWxlY3RvciBldmVudHMuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBydW5fZm9yZXZlcihzZWxmKToKKyAgICAgICAgIiIiUnVuIHVudGlsIHN0b3AoKSBpcyBjYWxsZWQuIiIiCisgICAgICAgIGlmIHNlbGYuX3J1bm5pbmc6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0V2ZW50IGxvb3AgaXMgcnVubmluZy4nKQorICAgICAgICBzZWxmLl9ydW5uaW5nID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnVuX29uY2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBfU3RvcEVycm9yOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcnVubmluZyA9IEZhbHNlCisKKyAgICBkZWYgcnVuX3VudGlsX2NvbXBsZXRlKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgICIiIlJ1biB1bnRpbCB0aGUgRnV0dXJlIGlzIGRvbmUuCisKKyAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgY29yb3V0aW5lLCBpdCBpcyB3cmFwcGVkIGluIGEgVGFzay4KKworICAgICAgICBYWFggVEJEOiBJdCB3b3VsZCBiZSBkaXNhc3Ryb3VzIHRvIGNhbGwgcnVuX3VudGlsX2NvbXBsZXRlKCkKKyAgICAgICAgd2l0aCB0aGUgc2FtZSBjb3JvdXRpbmUgdHdpY2UgLS0gaXQgd291bGQgd3JhcCBpdCBpbiB0d28KKyAgICAgICAgZGlmZmVyZW50IFRhc2tzIGFuZCB0aGF0IGNhbid0IGJlIGdvb2QuCisKKyAgICAgICAgUmV0dXJuIHRoZSBGdXR1cmUncyByZXN1bHQsIG9yIHJhaXNlIGl0cyBleGNlcHRpb24uCisgICAgICAgICIiIgorICAgICAgICBmdXR1cmUgPSB0YXNrcy5hc3luYyhmdXR1cmUsIGxvb3A9c2VsZikKKyAgICAgICAgZnV0dXJlLmFkZF9kb25lX2NhbGxiYWNrKF9yYWlzZV9zdG9wX2Vycm9yKQorICAgICAgICBzZWxmLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgZnV0dXJlLnJlbW92ZV9kb25lX2NhbGxiYWNrKF9yYWlzZV9zdG9wX2Vycm9yKQorICAgICAgICBpZiBub3QgZnV0dXJlLmRvbmUoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXZlbnQgbG9vcCBzdG9wcGVkIGJlZm9yZSBGdXR1cmUgY29tcGxldGVkLicpCisKKyAgICAgICAgcmV0dXJuIGZ1dHVyZS5yZXN1bHQoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3AgcnVubmluZyB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBFdmVyeSBjYWxsYmFjayBzY2hlZHVsZWQgYmVmb3JlIHN0b3AoKSBpcyBjYWxsZWQgd2lsbCBydW4uCisgICAgICAgIENhbGxiYWNrIHNjaGVkdWxlZCBhZnRlciBzdG9wKCkgaXMgY2FsbGVkIHdvbid0LiAgSG93ZXZlciwKKyAgICAgICAgdGhvc2UgY2FsbGJhY2tzIHdpbGwgcnVuIGlmIHJ1bigpIGlzIGNhbGxlZCBhZ2FpbiBsYXRlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuY2FsbF9zb29uKF9yYWlzZV9zdG9wX2Vycm9yKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBUaGlzIGNsZWFycyB0aGUgcXVldWVzIGFuZCBzaHV0cyBkb3duIHRoZSBleGVjdXRvciwKKyAgICAgICAgYnV0IGRvZXMgbm90IHdhaXQgZm9yIHRoZSBleGVjdXRvciB0byBmaW5pc2guCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9yZWFkeS5jbGVhcigpCisgICAgICAgIHNlbGYuX3NjaGVkdWxlZC5jbGVhcigpCisgICAgICAgIGV4ZWN1dG9yID0gc2VsZi5fZGVmYXVsdF9leGVjdXRvcgorICAgICAgICBpZiBleGVjdXRvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBOb25lCisgICAgICAgICAgICBleGVjdXRvci5zaHV0ZG93bih3YWl0PUZhbHNlKQorCisgICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgcnVubmluZyBzdGF0dXMgb2YgZXZlbnQgbG9vcC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bm5pbmcKKworICAgIGRlZiB0aW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUgYWNjb3JkaW5nIHRvIHRoZSBldmVudCBsb29wJ3MgY2xvY2suIiIiCisgICAgICAgIHJldHVybiB0aW1lLm1vbm90b25pYygpCisKKyAgICBkZWYgY2FsbF9sYXRlcihzZWxmLCBkZWxheSwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQXJyYW5nZSBmb3IgYSBjYWxsYmFjayB0byBiZSBjYWxsZWQgYXQgYSBnaXZlbiB0aW1lLgorCisgICAgICAgIFJldHVybiBhIEhhbmRsZTogYW4gb3BhcXVlIG9iamVjdCB3aXRoIGEgY2FuY2VsKCkgbWV0aG9kIHRoYXQKKyAgICAgICAgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSBjYWxsLgorCisgICAgICAgIFRoZSBkZWxheSBjYW4gYmUgYW4gaW50IG9yIGZsb2F0LCBleHByZXNzZWQgaW4gc2Vjb25kcy4gIEl0IGlzCisgICAgICAgIGFsd2F5cyBhIHJlbGF0aXZlIHRpbWUuCisKKyAgICAgICAgRWFjaCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UuICBJZiB0d28gY2FsbGJhY2tzCisgICAgICAgIGFyZSBzY2hlZHVsZWQgZm9yIGV4YWN0bHkgdGhlIHNhbWUgdGltZSwgaXQgdW5kZWZpbmVkIHdoaWNoCisgICAgICAgIHdpbGwgYmUgY2FsbGVkIGZpcnN0LgorCisgICAgICAgIEFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2lsbCBiZSBwYXNzZWQgdG8KKyAgICAgICAgdGhlIGNhbGxiYWNrIHdoZW4gaXQgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FsbF9hdChzZWxmLnRpbWUoKSArIGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpCisKKyAgICBkZWYgY2FsbF9hdChzZWxmLCB3aGVuLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJMaWtlIGNhbGxfbGF0ZXIoKSwgYnV0IHVzZXMgYW4gYWJzb2x1dGUgdGltZS4iIiIKKyAgICAgICAgaWYgdGFza3MuaXNjb3JvdXRpbmVmdW5jdGlvbihjYWxsYmFjayk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImNvcm91dGluZXMgY2Fubm90IGJlIHVzZWQgd2l0aCBjYWxsX2F0KCkiKQorICAgICAgICB0aW1lciA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgYXJncykKKyAgICAgICAgaGVhcHEuaGVhcHB1c2goc2VsZi5fc2NoZWR1bGVkLCB0aW1lcikKKyAgICAgICAgcmV0dXJuIHRpbWVyCisKKyAgICBkZWYgY2FsbF9zb29uKHNlbGYsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFycmFuZ2UgZm9yIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFzIHNvb24gYXMgcG9zc2libGUuCisKKyAgICAgICAgVGhpcyBvcGVyYXRlcyBhcyBhIEZJRk8gcXVldWUsIGNhbGxiYWNrcyBhcmUgY2FsbGVkIGluIHRoZQorICAgICAgICBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSByZWdpc3RlcmVkLiAgRWFjaCBjYWxsYmFjayB3aWxsIGJlCisgICAgICAgIGNhbGxlZCBleGFjdGx5IG9uY2UuCisKKyAgICAgICAgQW55IHBvc2l0aW9uYWwgYXJndW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0bworICAgICAgICB0aGUgY2FsbGJhY2sgd2hlbiBpdCBpcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiB0YXNrcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGNhbGxiYWNrKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCB3aXRoIGNhbGxfc29vbigpIikKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgc2VsZi5fcmVhZHkuYXBwZW5kKGhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgZGVmIGNhbGxfc29vbl90aHJlYWRzYWZlKHNlbGYsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICBoYW5kbGUgPSBzZWxmLmNhbGxfc29vbihjYWxsYmFjaywgKmFyZ3MpCisgICAgICAgIHNlbGYuX3dyaXRlX3RvX3NlbGYoKQorICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICBkZWYgcnVuX2luX2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBpZiB0YXNrcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGNhbGxiYWNrKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCB3aXRoIHJ1bl9pbl9leGVjdXRvcigpIikKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjYWxsYmFjaywgZXZlbnRzLkhhbmRsZSk6CisgICAgICAgICAgICBhc3NlcnQgbm90IGFyZ3MKKyAgICAgICAgICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShjYWxsYmFjaywgZXZlbnRzLlRpbWVySGFuZGxlKQorICAgICAgICAgICAgaWYgY2FsbGJhY2suX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgICAgICBjYWxsYmFjaywgYXJncyA9IGNhbGxiYWNrLl9jYWxsYmFjaywgY2FsbGJhY2suX2FyZ3MKKyAgICAgICAgaWYgZXhlY3V0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIGV4ZWN1dG9yID0gc2VsZi5fZGVmYXVsdF9leGVjdXRvcgorICAgICAgICAgICAgaWYgZXhlY3V0b3IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBleGVjdXRvciA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoX01BWF9XT1JLRVJTKQorICAgICAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBleGVjdXRvcgorICAgICAgICByZXR1cm4gZnV0dXJlcy53cmFwX2Z1dHVyZShleGVjdXRvci5zdWJtaXQoY2FsbGJhY2ssICphcmdzKSwgbG9vcD1zZWxmKQorCisgICAgZGVmIHNldF9kZWZhdWx0X2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yKToKKyAgICAgICAgc2VsZi5fZGVmYXVsdF9leGVjdXRvciA9IGV4ZWN1dG9yCisKKyAgICBkZWYgZ2V0YWRkcmluZm8oc2VsZiwgaG9zdCwgcG9ydCwgKiwKKyAgICAgICAgICAgICAgICAgICAgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzb2NrZXQuZ2V0YWRkcmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBmYW1pbHksIHR5cGUsIHByb3RvLCBmbGFncykKKworICAgIGRlZiBnZXRuYW1laW5mbyhzZWxmLCBzb2NrYWRkciwgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzb2NrZXQuZ2V0bmFtZWluZm8sIHNvY2thZGRyLCBmbGFncykKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1Ob25lLCBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCwgc29jaz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyPU5vbmUsIHNlcnZlcl9ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBpcyBub3QgTm9uZSBhbmQgbm90IHNzbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NlcnZlcl9ob3N0bmFtZSBpcyBvbmx5IG1lYW5pbmdmdWwgd2l0aCBzc2wnKQorCisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBpcyBOb25lIGFuZCBzc2w6CisgICAgICAgICAgICAjIFVzZSBob3N0IGFzIGRlZmF1bHQgZm9yIHNlcnZlcl9ob3N0bmFtZS4gIEl0IGlzIGFuIGVycm9yCisgICAgICAgICAgICAjIGlmIGhvc3QgaXMgZW1wdHkgb3Igbm90IHNldCwgZS5nLiB3aGVuIGFuCisgICAgICAgICAgICAjIGFscmVhZHktY29ubmVjdGVkIHNvY2tldCB3YXMgcGFzc2VkIG9yIHdoZW4gb25seSBhIHBvcnQKKyAgICAgICAgICAgICMgaXMgZ2l2ZW4uICBUbyBhdm9pZCB0aGlzIGVycm9yLCB5b3UgY2FuIHBhc3MKKyAgICAgICAgICAgICMgc2VydmVyX2hvc3RuYW1lPScnIC0tIHRoaXMgd2lsbCBieXBhc3MgdGhlIGhvc3RuYW1lCisgICAgICAgICAgICAjIGNoZWNrLiAgKFRoaXMgYWxzbyBtZWFucyB0aGF0IGlmIGhvc3QgaXMgYSBudW1lcmljCisgICAgICAgICAgICAjIElQL0lQdjYgYWRkcmVzcywgd2Ugd2lsbCBhdHRlbXB0IHRvIHZlcmlmeSB0aGF0IGV4YWN0CisgICAgICAgICAgICAjIGFkZHJlc3M7IHRoaXMgd2lsbCBwcm9iYWJseSBmYWlsLCBidXQgaXQgaXMgcG9zc2libGUgdG8KKyAgICAgICAgICAgICMgY3JlYXRlIGEgY2VydGlmaWNhdGUgZm9yIGEgc3BlY2lmaWMgSVAgYWRkcmVzcywgc28gd2UKKyAgICAgICAgICAgICMgZG9uJ3QganVkZ2UgaXQgaGVyZS4pCisgICAgICAgICAgICBpZiBub3QgaG9zdDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdZb3UgbXVzdCBzZXQgc2VydmVyX2hvc3RuYW1lICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGVuIHVzaW5nIHNzbCB3aXRob3V0IGEgaG9zdCcpCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBob3N0CisKKyAgICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZSBvciBwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnaG9zdC9wb3J0IGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUnKQorCisgICAgICAgICAgICBmMSA9IHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgZnMgPSBbZjFdCisgICAgICAgICAgICBpZiBsb2NhbF9hZGRyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGYyID0gc2VsZi5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICAgICAgKmxvY2FsX2FkZHIsIGZhbWlseT1mYW1pbHksCisgICAgICAgICAgICAgICAgICAgIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz1wcm90bywgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICAgICAgZnMuYXBwZW5kKGYyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmMiA9IE5vbmUKKworICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy53YWl0KGZzLCBsb29wPXNlbGYpCisKKyAgICAgICAgICAgIGluZm9zID0gZjEucmVzdWx0KCkKKyAgICAgICAgICAgIGlmIG5vdCBpbmZvczoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnZXRhZGRyaW5mbygpIHJldHVybmVkIGVtcHR5IGxpc3QnKQorICAgICAgICAgICAgaWYgZjIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGFkZHJfaW5mb3MgPSBmMi5yZXN1bHQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKKworICAgICAgICAgICAgZXhjZXB0aW9ucyA9IFtdCisgICAgICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBwcm90bywgY25hbWUsIGFkZHJlc3MgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHk9ZmFtaWx5LCB0eXBlPXR5cGUsIHByb3RvPXByb3RvKQorICAgICAgICAgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBmMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBfLCBfLCBfLCBfLCBsYWRkciBpbiBsYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChsYWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YyA9IE9TRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMuZXJybm8sICdlcnJvciB3aGlsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0ZW1wdGluZyB0byBiaW5kIG9uIGFkZHJlc3MgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn06IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFkZHIsIGV4Yy5zdHJlcnJvci5sb3dlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoZXhjKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5zb2NrX2Nvbm5lY3Qoc29jaywgYWRkcmVzcykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoZXhjKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGxlbihleGNlcHRpb25zKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zWzBdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGV5IGFsbCBoYXZlIHRoZSBzYW1lIHN0cigpLCByYWlzZSBvbmUuCisgICAgICAgICAgICAgICAgICAgIG1vZGVsID0gc3RyKGV4Y2VwdGlvbnNbMF0pCisgICAgICAgICAgICAgICAgICAgIGlmIGFsbChzdHIoZXhjKSA9PSBtb2RlbCBmb3IgZXhjIGluIGV4Y2VwdGlvbnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uc1swXQorICAgICAgICAgICAgICAgICAgICAjIFJhaXNlIGEgY29tYmluZWQgZXhjZXB0aW9uIHNvIHRoZSB1c2VyIGNhbiBzZWUgYWxsCisgICAgICAgICAgICAgICAgICAgICMgdGhlIHZhcmlvdXMgZXJyb3IgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ011bHRpcGxlIGV4Y2VwdGlvbnM6IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAnLCAnLmpvaW4oc3RyKGV4YykgZm9yIGV4YyBpbiBleGNlcHRpb25zKSkpCisKKyAgICAgICAgZWxpZiBzb2NrIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICdob3N0IGFuZCBwb3J0IHdhcyBub3Qgc3BlY2lmaWVkIGFuZCBubyBzb2NrIHNwZWNpZmllZCcpCisKKyAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKworICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIGlmIHNzbDoKKyAgICAgICAgICAgIHNzbGNvbnRleHQgPSBOb25lIGlmIGlzaW5zdGFuY2Uoc3NsLCBib29sKSBlbHNlIHNzbAorICAgICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9zc2xfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgIHNvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoc29jaywgcHJvdG9jb2wsIHdhaXRlcikKKworICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBjcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHI9Tm9uZSwgcmVtb3RlX2FkZHI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wKToKKyAgICAgICAgIiIiQ3JlYXRlIGRhdGFncmFtIGNvbm5lY3Rpb24uIiIiCisgICAgICAgIGlmIG5vdCAobG9jYWxfYWRkciBvciByZW1vdGVfYWRkcik6CisgICAgICAgICAgICBpZiBmYW1pbHkgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmV4cGVjdGVkIGFkZHJlc3MgZmFtaWx5JykKKyAgICAgICAgICAgIGFkZHJfcGFpcnNfaW5mbyA9ICgoKGZhbWlseSwgcHJvdG8pLCAoTm9uZSwgTm9uZSkpLCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgam9pbiBhZGRyZXNzcyBieSAoZmFtaWx5LCBwcm90b2NvbCkKKyAgICAgICAgICAgIGFkZHJfaW5mb3MgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgICAgICBmb3IgaWR4LCBhZGRyIGluICgoMCwgbG9jYWxfYWRkciksICgxLCByZW1vdGVfYWRkcikpOgorICAgICAgICAgICAgICAgIGlmIGFkZHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGFkZHIsIHR1cGxlKSBhbmQgbGVuKGFkZHIpID09IDIsICgKKyAgICAgICAgICAgICAgICAgICAgICAgICcyLXR1cGxlIGlzIGV4cGVjdGVkJykKKworICAgICAgICAgICAgICAgICAgICBpbmZvcyA9IHlpZWxkIGZyb20gc2VsZi5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgICphZGRyLCBmYW1pbHk9ZmFtaWx5LCB0eXBlPXNvY2tldC5TT0NLX0RHUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaW5mb3M6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnZXRhZGRyaW5mbygpIHJldHVybmVkIGVtcHR5IGxpc3QnKQorCisgICAgICAgICAgICAgICAgICAgIGZvciBmYW0sIF8sIHBybywgXywgYWRkcmVzcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IChmYW0sIHBybykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2luZm9zW2tleV0gPSBbTm9uZSwgTm9uZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfaW5mb3Nba2V5XVtpZHhdID0gYWRkcmVzcworCisgICAgICAgICAgICAjIGVhY2ggYWRkciBoYXMgdG8gaGF2ZSBpbmZvIGZvciBlYWNoIChmYW1pbHksIHByb3RvKSBwYWlyCisgICAgICAgICAgICBhZGRyX3BhaXJzX2luZm8gPSBbCisgICAgICAgICAgICAgICAgKGtleSwgYWRkcl9wYWlyKSBmb3Iga2V5LCBhZGRyX3BhaXIgaW4gYWRkcl9pbmZvcy5pdGVtcygpCisgICAgICAgICAgICAgICAgaWYgbm90ICgobG9jYWxfYWRkciBhbmQgYWRkcl9wYWlyWzBdIGlzIE5vbmUpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAocmVtb3RlX2FkZHIgYW5kIGFkZHJfcGFpclsxXSBpcyBOb25lKSldCisKKyAgICAgICAgICAgIGlmIG5vdCBhZGRyX3BhaXJzX2luZm86CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY2FuIG5vdCBnZXQgYWRkcmVzcyBpbmZvcm1hdGlvbicpCisKKyAgICAgICAgZXhjZXB0aW9ucyA9IFtdCisKKyAgICAgICAgZm9yICgoZmFtaWx5LCBwcm90byksCisgICAgICAgICAgICAgKGxvY2FsX2FkZHJlc3MsIHJlbW90ZV9hZGRyZXNzKSkgaW4gYWRkcl9wYWlyc19pbmZvOgorICAgICAgICAgICAgc29jayA9IE5vbmUKKyAgICAgICAgICAgIHJfYWRkciA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgKKyAgICAgICAgICAgICAgICAgICAgZmFtaWx5PWZhbWlseSwgdHlwZT1zb2NrZXQuU09DS19ER1JBTSwgcHJvdG89cHJvdG8pCisgICAgICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisKKyAgICAgICAgICAgICAgICBpZiBsb2NhbF9hZGRyOgorICAgICAgICAgICAgICAgICAgICBzb2NrLmJpbmQobG9jYWxfYWRkcmVzcykKKyAgICAgICAgICAgICAgICBpZiByZW1vdGVfYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLnNvY2tfY29ubmVjdChzb2NrLCByZW1vdGVfYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgcl9hZGRyID0gcmVtb3RlX2FkZHJlc3MKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zWzBdCisKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoc29jaywgcHJvdG9jb2wsIHJfYWRkcikKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAqLAorICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1zb2NrZXQuQUZfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPXNvY2tldC5BSV9QQVNTSVZFLAorICAgICAgICAgICAgICAgICAgICAgIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBiYWNrbG9nPTEwMCwKKyAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICByZXVzZV9hZGRyZXNzPU5vbmUpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzc2wsIGJvb2wpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzc2wgYXJndW1lbnQgbXVzdCBiZSBhbiBTU0xDb250ZXh0IG9yIE5vbmUnKQorICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lIG9yIHBvcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdob3N0L3BvcnQgYW5kIHNvY2sgY2FuIG5vdCBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZScpCisKKyAgICAgICAgICAgIEFGX0lORVQ2ID0gZ2V0YXR0cihzb2NrZXQsICdBRl9JTkVUNicsIDApCisgICAgICAgICAgICBpZiByZXVzZV9hZGRyZXNzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV1c2VfYWRkcmVzcyA9IG9zLm5hbWUgPT0gJ3Bvc2l4JyBhbmQgc3lzLnBsYXRmb3JtICE9ICdjeWd3aW4nCisgICAgICAgICAgICBzb2NrZXRzID0gW10KKyAgICAgICAgICAgIGlmIGhvc3QgPT0gJyc6CisgICAgICAgICAgICAgICAgaG9zdCA9IE5vbmUKKworICAgICAgICAgICAgaW5mb3MgPSB5aWVsZCBmcm9tIHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89MCwgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICBpZiBub3QgaW5mb3M6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKKworICAgICAgICAgICAgY29tcGxldGVkID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgcmVzIGluIGluZm9zOgorICAgICAgICAgICAgICAgICAgICBhZiwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNhID0gcmVzCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGFmLCBzb2NrdHlwZSwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEFzc3VtZSBpdCdzIGEgYmFkIGZhbWlseS90eXBlL3Byb3RvY29sIGNvbWJpbmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0cy5hcHBlbmQoc29jaykKKyAgICAgICAgICAgICAgICAgICAgaWYgcmV1c2VfYWRkcmVzczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKQorICAgICAgICAgICAgICAgICAgICAjIERpc2FibGUgSVB2NC9JUHY2IGR1YWwgc3RhY2sgc3VwcG9ydCAoZW5hYmxlZCBieQorICAgICAgICAgICAgICAgICAgICAjIGRlZmF1bHQgb24gTGludXgpIHdoaWNoIG1ha2VzIGEgc2luZ2xlIHNvY2tldAorICAgICAgICAgICAgICAgICAgICAjIGxpc3RlbiBvbiBib3RoIGFkZHJlc3MgZmFtaWxpZXMuCisgICAgICAgICAgICAgICAgICAgIGlmIGFmID09IEFGX0lORVQ2IGFuZCBoYXNhdHRyKHNvY2tldCwgJ0lQUFJPVE9fSVBWNicpOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQVjZfVjZPTkxZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChzYSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIuZXJybm8sICdlcnJvciB3aGlsZSBhdHRlbXB0aW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGJpbmQgb24gYWRkcmVzcyAlcjogJXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNhLCBlcnIuc3RyZXJyb3IubG93ZXIoKSkpCisgICAgICAgICAgICAgICAgY29tcGxldGVkID0gVHJ1ZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpZiBub3QgY29tcGxldGVkOgorICAgICAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzb2NrZXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzb2NrIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ2hvc3QgYW5kIHBvcnQgd2FzIG5vdCBzcGVjaWZpZWQgYW5kIG5vIHNvY2sgc3BlY2lmaWVkJykKKyAgICAgICAgICAgIHNvY2tldHMgPSBbc29ja10KKworICAgICAgICBzZXJ2ZXIgPSBTZXJ2ZXIoc2VsZiwgc29ja2V0cykKKyAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgIHNvY2subGlzdGVuKGJhY2tsb2cpCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmluZyhwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2wsIHNlcnZlcikKKyAgICAgICAgcmV0dXJuIHNlcnZlcgorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBjb25uZWN0X3JlYWRfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsIHdhaXRlcikKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY29ubmVjdF93cml0ZV9waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBpcGUpOgorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfd3JpdGVfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsIHdhaXRlcikKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgc3VicHJvY2Vzc19zaGVsbChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBjbWQsICosIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgc2hlbGw9VHJ1ZSwgYnVmc2l6ZT0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY21kLCAoYnl0ZXMsIHN0cikpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY21kIG11c3QgYmUgYSBzdHJpbmciKQorICAgICAgICBpZiB1bml2ZXJzYWxfbmV3bGluZXM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bml2ZXJzYWxfbmV3bGluZXMgbXVzdCBiZSBGYWxzZSIpCisgICAgICAgIGlmIG5vdCBzaGVsbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNoZWxsIG11c3QgYmUgVHJ1ZSIpCisgICAgICAgIGlmIGJ1ZnNpemUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJ1ZnNpemUgbXVzdCBiZSAwIikKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgdHJhbnNwb3J0ID0geWllbGQgZnJvbSBzZWxmLl9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KAorICAgICAgICAgICAgcHJvdG9jb2wsIGNtZCwgVHJ1ZSwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncykKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgc3VicHJvY2Vzc19leGVjKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHByb2dyYW0sICphcmdzLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCBzaGVsbD1GYWxzZSwgYnVmc2l6ZT0wLAorICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICBpZiB1bml2ZXJzYWxfbmV3bGluZXM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bml2ZXJzYWxfbmV3bGluZXMgbXVzdCBiZSBGYWxzZSIpCisgICAgICAgIGlmIHNoZWxsOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2hlbGwgbXVzdCBiZSBGYWxzZSIpCisgICAgICAgIGlmIGJ1ZnNpemUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJ1ZnNpemUgbXVzdCBiZSAwIikKKyAgICAgICAgcG9wZW5fYXJncyA9IChwcm9ncmFtLCkgKyBhcmdzCisgICAgICAgIGZvciBhcmcgaW4gcG9wZW5fYXJnczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZywgKHN0ciwgYnl0ZXMpKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInByb2dyYW0gYXJndW1lbnRzIG11c3QgYmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSBieXRlcyBvciB0ZXh0IHN0cmluZywgbm90ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHR5cGUoYXJnKS5fX25hbWVfXykKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgdHJhbnNwb3J0ID0geWllbGQgZnJvbSBzZWxmLl9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KAorICAgICAgICAgICAgcHJvdG9jb2wsIHBvcGVuX2FyZ3MsIEZhbHNlLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgZGVmIF9hZGRfY2FsbGJhY2soc2VsZiwgaGFuZGxlKToKKyAgICAgICAgIiIiQWRkIGEgSGFuZGxlIHRvIHJlYWR5IG9yIHNjaGVkdWxlZC4iIiIKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaGFuZGxlLCBldmVudHMuSGFuZGxlKSwgJ0EgSGFuZGxlIGlzIHJlcXVpcmVkIGhlcmUnCisgICAgICAgIGlmIGhhbmRsZS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoaGFuZGxlLCBldmVudHMuVGltZXJIYW5kbGUpOgorICAgICAgICAgICAgaGVhcHEuaGVhcHB1c2goc2VsZi5fc2NoZWR1bGVkLCBoYW5kbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9yZWFkeS5hcHBlbmQoaGFuZGxlKQorCisgICAgZGVmIF9hZGRfY2FsbGJhY2tfc2lnbmFsc2FmZShzZWxmLCBoYW5kbGUpOgorICAgICAgICAiIiJMaWtlIF9hZGRfY2FsbGJhY2soKSBidXQgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlci4iIiIKKyAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrKGhhbmRsZSkKKyAgICAgICAgc2VsZi5fd3JpdGVfdG9fc2VsZigpCisKKyAgICBkZWYgX3J1bl9vbmNlKHNlbGYpOgorICAgICAgICAiIiJSdW4gb25lIGZ1bGwgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wLgorCisgICAgICAgIFRoaXMgY2FsbHMgYWxsIGN1cnJlbnRseSByZWFkeSBjYWxsYmFja3MsIHBvbGxzIGZvciBJL08sCisgICAgICAgIHNjaGVkdWxlcyB0aGUgcmVzdWx0aW5nIGNhbGxiYWNrcywgYW5kIGZpbmFsbHkgc2NoZWR1bGVzCisgICAgICAgICdjYWxsX2xhdGVyJyBjYWxsYmFja3MuCisgICAgICAgICIiIgorICAgICAgICAjIFJlbW92ZSBkZWxheWVkIGNhbGxzIHRoYXQgd2VyZSBjYW5jZWxsZWQgZnJvbSBoZWFkIG9mIHF1ZXVlLgorICAgICAgICB3aGlsZSBzZWxmLl9zY2hlZHVsZWQgYW5kIHNlbGYuX3NjaGVkdWxlZFswXS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgaGVhcHEuaGVhcHBvcChzZWxmLl9zY2hlZHVsZWQpCisKKyAgICAgICAgdGltZW91dCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcmVhZHk6CisgICAgICAgICAgICB0aW1lb3V0ID0gMAorICAgICAgICBlbGlmIHNlbGYuX3NjaGVkdWxlZDoKKyAgICAgICAgICAgICMgQ29tcHV0ZSB0aGUgZGVzaXJlZCB0aW1lb3V0LgorICAgICAgICAgICAgd2hlbiA9IHNlbGYuX3NjaGVkdWxlZFswXS5fd2hlbgorICAgICAgICAgICAgZGVhZGxpbmUgPSBtYXgoMCwgd2hlbiAtIHNlbGYudGltZSgpKQorICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbWluKHRpbWVvdXQsIGRlYWRsaW5lKQorCisgICAgICAgICMgVE9ETzogSW5zdHJ1bWVudGF0aW9uIG9ubHkgaW4gZGVidWcgbW9kZT8KKyAgICAgICAgaWYgbG9nZ2VyLmlzRW5hYmxlZEZvcihsb2dnaW5nLklORk8pOgorICAgICAgICAgICAgdDAgPSBzZWxmLnRpbWUoKQorICAgICAgICAgICAgZXZlbnRfbGlzdCA9IHNlbGYuX3NlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICAgICAgdDEgPSBzZWxmLnRpbWUoKQorICAgICAgICAgICAgaWYgdDEtdDAgPj0gMToKKyAgICAgICAgICAgICAgICBsZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhsZXZlbCwgJ3BvbGwgJS4zZiB0b29rICUuM2Ygc2Vjb25kcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LCB0MS10MCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhsZXZlbCwgJ3BvbGwgdG9vayAlLjNmIHNlY29uZHMnLCB0MS10MCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV2ZW50X2xpc3QgPSBzZWxmLl9zZWxlY3Rvci5zZWxlY3QodGltZW91dCkKKyAgICAgICAgc2VsZi5fcHJvY2Vzc19ldmVudHMoZXZlbnRfbGlzdCkKKworICAgICAgICAjIEhhbmRsZSAnbGF0ZXInIGNhbGxiYWNrcyB0aGF0IGFyZSByZWFkeS4KKyAgICAgICAgZW5kX3RpbWUgPSBzZWxmLnRpbWUoKSArIHNlbGYuX2Nsb2NrX3Jlc29sdXRpb24KKyAgICAgICAgd2hpbGUgc2VsZi5fc2NoZWR1bGVkOgorICAgICAgICAgICAgaGFuZGxlID0gc2VsZi5fc2NoZWR1bGVkWzBdCisgICAgICAgICAgICBpZiBoYW5kbGUuX3doZW4gPj0gZW5kX3RpbWU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGhhbmRsZSA9IGhlYXBxLmhlYXBwb3Aoc2VsZi5fc2NoZWR1bGVkKQorICAgICAgICAgICAgc2VsZi5fcmVhZHkuYXBwZW5kKGhhbmRsZSkKKworICAgICAgICAjIFRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2hlcmUgY2FsbGJhY2tzIGFyZSBhY3R1YWxseSAqY2FsbGVkKi4KKyAgICAgICAgIyBBbGwgb3RoZXIgcGxhY2VzIGp1c3QgYWRkIHRoZW0gdG8gcmVhZHkuCisgICAgICAgICMgTm90ZTogV2UgcnVuIGFsbCBjdXJyZW50bHkgc2NoZWR1bGVkIGNhbGxiYWNrcywgYnV0IG5vdCBhbnkKKyAgICAgICAgIyBjYWxsYmFja3Mgc2NoZWR1bGVkIGJ5IGNhbGxiYWNrcyBydW4gdGhpcyB0aW1lIGFyb3VuZCAtLQorICAgICAgICAjIHRoZXkgd2lsbCBiZSBydW4gdGhlIG5leHQgdGltZSAoYWZ0ZXIgYW5vdGhlciBJL08gcG9sbCkuCisgICAgICAgICMgVXNlIGFuIGlkaW9tIHRoYXQgaXMgdGhyZWFkc2FmZSB3aXRob3V0IHVzaW5nIGxvY2tzLgorICAgICAgICBudG9kbyA9IGxlbihzZWxmLl9yZWFkeSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnRvZG8pOgorICAgICAgICAgICAgaGFuZGxlID0gc2VsZi5fcmVhZHkucG9wbGVmdCgpCisgICAgICAgICAgICBpZiBub3QgaGFuZGxlLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgaGFuZGxlLl9ydW4oKQorICAgICAgICBoYW5kbGUgPSBOb25lICAjIE5lZWRlZCB0byBicmVhayBjeWNsZXMgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5IGIvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OGY4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9iYXNlX3N1YnByb2Nlc3MucHkKQEAgLTAsMCArMSwxNTkgQEAKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSAuIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworCisKK2NsYXNzIEJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0KHRyYW5zcG9ydHMuU3VicHJvY2Vzc1RyYW5zcG9ydCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorCisgICAgICAgIHNlbGYuX3BpcGVzID0ge30KKyAgICAgICAgaWYgc3RkaW4gPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICAgICAgc2VsZi5fcGlwZXNbMF0gPSBOb25lCisgICAgICAgIGlmIHN0ZG91dCA9PSBzdWJwcm9jZXNzLlBJUEU6CisgICAgICAgICAgICBzZWxmLl9waXBlc1sxXSA9IE5vbmUKKyAgICAgICAgaWYgc3RkZXJyID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgIHNlbGYuX3BpcGVzWzJdID0gTm9uZQorICAgICAgICBzZWxmLl9wZW5kaW5nX2NhbGxzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl9maW5pc2hlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3JldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuX3N0YXJ0KGFyZ3M9YXJncywgc2hlbGw9c2hlbGwsIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3RkZXJyLCBidWZzaXplPWJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9leHRyYVsnc3VicHJvY2VzcyddID0gc2VsZi5fcHJvYworCisgICAgZGVmIF9zdGFydChzZWxmLCBhcmdzLCBzaGVsbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV93cml0ZV9zdWJwcm9jZXNzX3BpcGVfcHJvdG8oc2VsZiwgZmQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2VfcmVhZF9zdWJwcm9jZXNzX3BpcGVfcHJvdG8oc2VsZiwgZmQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGZvciBwcm90byBpbiBzZWxmLl9waXBlcy52YWx1ZXMoKToKKyAgICAgICAgICAgIHByb3RvLnBpcGUuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLl9yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnRlcm1pbmF0ZSgpCisKKyAgICBkZWYgZ2V0X3BpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucGlkCisKKyAgICBkZWYgZ2V0X3JldHVybmNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZXR1cm5jb2RlCisKKyAgICBkZWYgZ2V0X3BpcGVfdHJhbnNwb3J0KHNlbGYsIGZkKToKKyAgICAgICAgaWYgZmQgaW4gc2VsZi5fcGlwZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGlwZXNbZmRdLnBpcGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnbmFsKToKKyAgICAgICAgc2VsZi5fcHJvYy5zZW5kX3NpZ25hbChzaWduYWwpCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9wcm9jLnRlcm1pbmF0ZSgpCisKKyAgICBkZWYga2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5fcHJvYy5raWxsKCkKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgX3Bvc3RfaW5pdChzZWxmKToKKyAgICAgICAgcHJvYyA9IHNlbGYuX3Byb2MKKyAgICAgICAgbG9vcCA9IHNlbGYuX2xvb3AKKyAgICAgICAgaWYgcHJvYy5zdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF8sIHBpcGUgPSB5aWVsZCBmcm9tIGxvb3AuY29ubmVjdF93cml0ZV9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogV3JpdGVTdWJwcm9jZXNzUGlwZVByb3RvKHNlbGYsIDApLAorICAgICAgICAgICAgICAgIHByb2Muc3RkaW4pCisgICAgICAgICAgICBzZWxmLl9waXBlc1swXSA9IHBpcGUKKyAgICAgICAgaWYgcHJvYy5zdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfLCBwaXBlID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3RfcmVhZF9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oc2VsZiwgMSksCisgICAgICAgICAgICAgICAgcHJvYy5zdGRvdXQpCisgICAgICAgICAgICBzZWxmLl9waXBlc1sxXSA9IHBpcGUKKyAgICAgICAgaWYgcHJvYy5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfLCBwaXBlID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3RfcmVhZF9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oc2VsZiwgMiksCisgICAgICAgICAgICAgICAgcHJvYy5zdGRlcnIpCisgICAgICAgICAgICBzZWxmLl9waXBlc1syXSA9IHBpcGUKKworICAgICAgICBhc3NlcnQgc2VsZi5fcGVuZGluZ19jYWxscyBpcyBub3QgTm9uZQorCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgZm9yIGNhbGxiYWNrLCBkYXRhIGluIHNlbGYuX3BlbmRpbmdfY2FsbHM6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihjYWxsYmFjaywgKmRhdGEpCisgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMgPSBOb25lCisKKyAgICBkZWYgX2NhbGwoc2VsZiwgY2IsICpkYXRhKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19jYWxscyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMuYXBwZW5kKChjYiwgZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihjYiwgKmRhdGEpCisKKyAgICBkZWYgX3BpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX3Byb3RvY29sLnBpcGVfY29ubmVjdGlvbl9sb3N0LCBmZCwgZXhjKQorICAgICAgICBzZWxmLl90cnlfZmluaXNoKCkKKworICAgIGRlZiBfcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgc2VsZi5fY2FsbChzZWxmLl9wcm90b2NvbC5waXBlX2RhdGFfcmVjZWl2ZWQsIGZkLCBkYXRhKQorCisgICAgZGVmIF9wcm9jZXNzX2V4aXRlZChzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgYXNzZXJ0IHJldHVybmNvZGUgaXMgbm90IE5vbmUsIHJldHVybmNvZGUKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZSwgc2VsZi5fcmV0dXJuY29kZQorICAgICAgICBzZWxmLl9yZXR1cm5jb2RlID0gcmV0dXJuY29kZQorICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX3Byb3RvY29sLnByb2Nlc3NfZXhpdGVkKQorICAgICAgICBzZWxmLl90cnlfZmluaXNoKCkKKworICAgIGRlZiBfdHJ5X2ZpbmlzaChzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9maW5pc2hlZAorICAgICAgICBpZiBzZWxmLl9yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgYWxsKHAgaXMgbm90IE5vbmUgYW5kIHAuZGlzY29ubmVjdGVkCisgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLl9waXBlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBzZWxmLl9maW5pc2hlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKworCitjbGFzcyBXcml0ZVN1YnByb2Nlc3NQaXBlUHJvdG8ocHJvdG9jb2xzLkJhc2VQcm90b2NvbCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYywgZmQpOgorICAgICAgICBzZWxmLnByb2MgPSBwcm9jCisgICAgICAgIHNlbGYuZmQgPSBmZAorICAgICAgICBzZWxmLnBpcGUgPSBOb25lCisgICAgICAgIHNlbGYuZGlzY29ubmVjdGVkID0gRmFsc2UKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi5waXBlID0gdHJhbnNwb3J0CisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHNlbGYuZGlzY29ubmVjdGVkID0gVHJ1ZQorICAgICAgICBzZWxmLnByb2MuX3BpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYuZmQsIGV4YykKKworICAgIGRlZiBwYXVzZV93cml0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLnByb2MuX3Byb3RvY29sLnBhdXNlX3dyaXRpbmcoKQorCisgICAgZGVmIHJlc3VtZV93cml0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLnByb2MuX3Byb3RvY29sLnJlc3VtZV93cml0aW5nKCkKKworCitjbGFzcyBSZWFkU3VicHJvY2Vzc1BpcGVQcm90byhXcml0ZVN1YnByb2Nlc3NQaXBlUHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbHMuUHJvdG9jb2wpOgorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYucHJvYy5fcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYuZmQsIGRhdGEpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9jb25zdGFudHMucHkgYi9MaWIvYXN5bmNpby9jb25zdGFudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllMTIzMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2NvbnN0YW50cy5weQpAQCAtMCwwICsxLDcgQEAKKyIiIkNvbnN0YW50cy4iIiIKKworIyBBZnRlciB0aGUgY29ubmVjdGlvbiBpcyBsb3N0LCBsb2cgd2FybmluZ3MgYWZ0ZXIgdGhpcyBtYW55IHdyaXRlKClzLgorTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTID0gNQorCisjIFNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgYWNjZXB0KCkuCitBQ0NFUFRfUkVUUllfREVMQVkgPSAxCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5ZTNmYgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2V2ZW50cy5weQpAQCAtMCwwICsxLDQzNyBAQAorIiIiRXZlbnQgbG9vcCBhbmQgZXZlbnQgbG9vcCBwb2xpY3kuIiIiCisKK19fYWxsX18gPSBbJ0Fic3RyYWN0RXZlbnRMb29wUG9saWN5JywKKyAgICAgICAgICAgJ0Fic3RyYWN0RXZlbnRMb29wJywgJ0Fic3RyYWN0U2VydmVyJywKKyAgICAgICAgICAgJ0hhbmRsZScsICdUaW1lckhhbmRsZScsCisgICAgICAgICAgICdnZXRfZXZlbnRfbG9vcF9wb2xpY3knLCAnc2V0X2V2ZW50X2xvb3BfcG9saWN5JywKKyAgICAgICAgICAgJ2dldF9ldmVudF9sb29wJywgJ3NldF9ldmVudF9sb29wJywgJ25ld19ldmVudF9sb29wJywKKyAgICAgICAgICAgJ2dldF9jaGlsZF93YXRjaGVyJywgJ3NldF9jaGlsZF93YXRjaGVyJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHNvY2tldAorCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK2NsYXNzIEhhbmRsZToKKyAgICAiIiJPYmplY3QgcmV0dXJuZWQgYnkgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIiIiCisKKyAgICBfX3Nsb3RzX18gPSBbJ19jYWxsYmFjaycsICdfYXJncycsICdfY2FuY2VsbGVkJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWxsYmFjaywgYXJncyk6CisgICAgICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShjYWxsYmFjaywgSGFuZGxlKSwgJ0EgSGFuZGxlIGlzIG5vdCBhIGNhbGxiYWNrJworICAgICAgICBzZWxmLl9jYWxsYmFjayA9IGNhbGxiYWNrCisgICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IEZhbHNlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9ICdIYW5kbGUoe30sIHt9KScuZm9ybWF0KHNlbGYuX2NhbGxiYWNrLCBzZWxmLl9hcmdzKQorICAgICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICByZXMgKz0gJzxjYW5jZWxsZWQ+JworICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBUcnVlCisKKyAgICBkZWYgX3J1bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2soKnNlbGYuX2FyZ3MpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdFeGNlcHRpb24gaW4gY2FsbGJhY2sgJXMgJXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsYmFjaywgc2VsZi5fYXJncykKKyAgICAgICAgc2VsZiA9IE5vbmUgICMgTmVlZGVkIHRvIGJyZWFrIGN5Y2xlcyB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCisKKworY2xhc3MgVGltZXJIYW5kbGUoSGFuZGxlKToKKyAgICAiIiJPYmplY3QgcmV0dXJuZWQgYnkgdGltZWQgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIiIiCisKKyAgICBfX3Nsb3RzX18gPSBbJ193aGVuJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aGVuLCBjYWxsYmFjaywgYXJncyk6CisgICAgICAgIGFzc2VydCB3aGVuIGlzIG5vdCBOb25lCisgICAgICAgIHN1cGVyKCkuX19pbml0X18oY2FsbGJhY2ssIGFyZ3MpCisKKyAgICAgICAgc2VsZi5fd2hlbiA9IHdoZW4KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gJ1RpbWVySGFuZGxlKHt9LCB7fSwge30pJy5mb3JtYXQoc2VsZi5fd2hlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MpCisgICAgICAgIGlmIHNlbGYuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIHJlcyArPSAnPGNhbmNlbGxlZD4nCisKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl93aGVuKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl93aGVuIDwgb3RoZXIuX3doZW4KKworICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLl93aGVuIDwgb3RoZXIuX3doZW46CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3doZW4gPiBvdGhlci5fd2hlbgorCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3doZW4gPiBvdGhlci5fd2hlbjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLl9fZXFfXyhvdGhlcikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBUaW1lckhhbmRsZSk6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYuX3doZW4gPT0gb3RoZXIuX3doZW4gYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrID09IG90aGVyLl9jYWxsYmFjayBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9PSBvdGhlci5fYXJncyBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FuY2VsbGVkID09IG90aGVyLl9jYW5jZWxsZWQpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGVxdWFsID0gc2VsZi5fX2VxX18ob3RoZXIpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZCBpZiBlcXVhbCBpcyBOb3RJbXBsZW1lbnRlZCBlbHNlIG5vdCBlcXVhbAorCisKK2NsYXNzIEFic3RyYWN0U2VydmVyOgorICAgICIiIkFic3RyYWN0IHNlcnZlciByZXR1cm5lZCBieSBjcmVhdGVfc2VydmVyKCkuIiIiCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIlN0b3Agc2VydmluZy4gIFRoaXMgbGVhdmVzIGV4aXN0aW5nIGNvbm5lY3Rpb25zIG9wZW4uIiIiCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIHdhaXRfY2xvc2VkKHNlbGYpOgorICAgICAgICAiIiJDb3JvdXRpbmUgdG8gd2FpdCB1bnRpbCBzZXJ2aWNlIGlzIGNsb3NlZC4iIiIKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQWJzdHJhY3RFdmVudExvb3A6CisgICAgIiIiQWJzdHJhY3QgZXZlbnQgbG9vcC4iIiIKKworICAgICMgUnVubmluZyBhbmQgc3RvcHBpbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICBkZWYgcnVuX2ZvcmV2ZXIoc2VsZik6CisgICAgICAgICIiIlJ1biB0aGUgZXZlbnQgbG9vcCB1bnRpbCBzdG9wKCkgaXMgY2FsbGVkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX3VudGlsX2NvbXBsZXRlKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgICIiIlJ1biB0aGUgZXZlbnQgbG9vcCB1bnRpbCBhIEZ1dHVyZSBpcyBkb25lLgorCisgICAgICAgIFJldHVybiB0aGUgRnV0dXJlJ3MgcmVzdWx0LCBvciByYWlzZSBpdHMgZXhjZXB0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3AgdGhlIGV2ZW50IGxvb3AgYXMgc29vbiBhcyByZWFzb25hYmxlLgorCisgICAgICAgIEV4YWN0bHkgaG93IHNvb24gdGhhdCBpcyBtYXkgZGVwZW5kIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgYnV0CisgICAgICAgIG5vIG1vcmUgSS9PIGNhbGxiYWNrcyBzaG91bGQgYmUgc2NoZWR1bGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSBldmVudCBsb29wIGlzIGN1cnJlbnRseSBydW5uaW5nLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSBsb29wLgorCisgICAgICAgIFRoZSBsb29wIHNob3VsZCBub3QgYmUgcnVubmluZy4KKworICAgICAgICBUaGlzIGlzIGlkZW1wb3RlbnQgYW5kIGlycmV2ZXJzaWJsZS4KKworICAgICAgICBObyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBvbmUuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE1ldGhvZHMgc2NoZWR1bGluZyBjYWxsYmFja3MuICBBbGwgdGhlc2UgcmV0dXJuIEhhbmRsZXMuCisKKyAgICBkZWYgY2FsbF9zb29uKHNlbGYsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmNhbGxfbGF0ZXIoMCwgY2FsbGJhY2ssICphcmdzKQorCisgICAgZGVmIGNhbGxfbGF0ZXIoc2VsZiwgZGVsYXksIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYWxsX2F0KHNlbGYsIHdoZW4sIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB0aW1lKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhyZWFkcy4KKworICAgIGRlZiBjYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX2luX2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE5ldHdvcmsgSS9PIG1ldGhvZHMgcmV0dXJuaW5nIEZ1dHVyZXMuCisKKyAgICBkZWYgZ2V0YWRkcmluZm8oc2VsZiwgaG9zdCwgcG9ydCwgKiwgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRuYW1laW5mbyhzZWxmLCBzb2NrYWRkciwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjcmVhdGVfY29ubmVjdGlvbihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wLCBzb2NrPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHI9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY3JlYXRlX3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9c29ja2V0LkFGX1VOU1BFQywgZmxhZ3M9c29ja2V0LkFJX1BBU1NJVkUsCisgICAgICAgICAgICAgICAgICAgICAgc29jaz1Ob25lLCBiYWNrbG9nPTEwMCwgc3NsPU5vbmUsIHJldXNlX2FkZHJlc3M9Tm9uZSk6CisgICAgICAgICIiIkEgY29yb3V0aW5lIHdoaWNoIGNyZWF0ZXMgYSBUQ1Agc2VydmVyIGJvdW5kIHRvIGhvc3QgYW5kIHBvcnQuCisKKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIFNlcnZlciBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3RvcAorICAgICAgICB0aGUgc2VydmljZS4KKworICAgICAgICBJZiBob3N0IGlzIGFuIGVtcHR5IHN0cmluZyBvciBOb25lIGFsbCBpbnRlcmZhY2VzIGFyZSBhc3N1bWVkCisgICAgICAgIGFuZCBhIGxpc3Qgb2YgbXVsdGlwbGUgc29ja2V0cyB3aWxsIGJlIHJldHVybmVkIChtb3N0IGxpa2VseQorICAgICAgICBvbmUgZm9yIElQdjQgYW5kIGFub3RoZXIgb25lIGZvciBJUHY2KS4KKworICAgICAgICBmYW1pbHkgY2FuIGJlIHNldCB0byBlaXRoZXIgQUZfSU5FVCBvciBBRl9JTkVUNiB0byBmb3JjZSB0aGUKKyAgICAgICAgc29ja2V0IHRvIHVzZSBJUHY0IG9yIElQdjYuIElmIG5vdCBzZXQgaXQgd2lsbCBiZSBkZXRlcm1pbmVkCisgICAgICAgIGZyb20gaG9zdCAoZGVmYXVsdHMgdG8gQUZfVU5TUEVDKS4KKworICAgICAgICBmbGFncyBpcyBhIGJpdG1hc2sgZm9yIGdldGFkZHJpbmZvKCkuCisKKyAgICAgICAgc29jayBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8gdXNlIGEgcHJlZXhpc3RpbmcKKyAgICAgICAgc29ja2V0IG9iamVjdC4KKworICAgICAgICBiYWNrbG9nIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29ubmVjdGlvbnMgcGFzc2VkIHRvCisgICAgICAgIGxpc3RlbigpIChkZWZhdWx0cyB0byAxMDApLgorCisgICAgICAgIHNzbCBjYW4gYmUgc2V0IHRvIGFuIFNTTENvbnRleHQgdG8gZW5hYmxlIFNTTCBvdmVyIHRoZQorICAgICAgICBhY2NlcHRlZCBjb25uZWN0aW9ucy4KKworICAgICAgICByZXVzZV9hZGRyZXNzIHRlbGxzIHRoZSBrZXJuZWwgdG8gcmV1c2UgYSBsb2NhbCBzb2NrZXQgaW4KKyAgICAgICAgVElNRV9XQUlUIHN0YXRlLCB3aXRob3V0IHdhaXRpbmcgZm9yIGl0cyBuYXR1cmFsIHRpbWVvdXQgdG8KKyAgICAgICAgZXhwaXJlLiBJZiBub3Qgc3BlY2lmaWVkIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgdG8gVHJ1ZSBvbgorICAgICAgICBVTklYLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkcj1Ob25lLCByZW1vdGVfYWRkcj1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTApOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIFBpcGVzIGFuZCBzdWJwcm9jZXNzZXMuCisKKyAgICBkZWYgY29ubmVjdF9yZWFkX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGlwZSk6CisgICAgICAgICIiIlJlZ2lzdGVyIHJlYWQgcGlwZSBpbiBldmVudGxvb3AuCisKKyAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggUHJvdG9jb2wgaW50ZXJmYWNlLgorICAgICAgICBwaXBlIGlzIGZpbGUtbGlrZSBvYmplY3QgYWxyZWFkeSBzd2l0Y2hlZCB0byBub25ibG9ja2luZy4KKyAgICAgICAgUmV0dXJuIHBhaXIgKHRyYW5zcG9ydCwgcHJvdG9jb2wpLCB3aGVyZSB0cmFuc3BvcnQgc3VwcG9ydAorICAgICAgICBSZWFkVHJhbnNwb3J0IGludGVyZmFjZS4iIiIKKyAgICAgICAgIyBUaGUgcmVhc29uIHRvIGFjY2VwdCBmaWxlLWxpa2Ugb2JqZWN0IGluc3RlYWQgb2YganVzdCBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgIyBpczogd2UgbmVlZCB0byBvd24gcGlwZSBhbmQgY2xvc2UgaXQgYXQgdHJhbnNwb3J0IGZpbmlzaGluZworICAgICAgICAjIENhbiBnb3QgY29tcGxpY2F0ZWQgZXJyb3JzIGlmIHBhc3MgZi5maWxlbm8oKSwKKyAgICAgICAgIyBjbG9zZSBmZCBpbiBwaXBlIHRyYW5zcG9ydCB0aGVuIGNsb3NlIGYgYW5kIHZpc2UgdmVyc2EuCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjb25uZWN0X3dyaXRlX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGlwZSk6CisgICAgICAgICIiIlJlZ2lzdGVyIHdyaXRlIHBpcGUgaW4gZXZlbnRsb29wLgorCisgICAgICAgIHByb3RvY29sX2ZhY3Rvcnkgc2hvdWxkIGluc3RhbnRpYXRlIG9iamVjdCB3aXRoIEJhc2VQcm90b2NvbCBpbnRlcmZhY2UuCisgICAgICAgIFBpcGUgaXMgZmlsZS1saWtlIG9iamVjdCBhbHJlYWR5IHN3aXRjaGVkIHRvIG5vbmJsb2NraW5nLgorICAgICAgICBSZXR1cm4gcGFpciAodHJhbnNwb3J0LCBwcm90b2NvbCksIHdoZXJlIHRyYW5zcG9ydCBzdXBwb3J0CisgICAgICAgIFdyaXRlVHJhbnNwb3J0IGludGVyZmFjZS4iIiIKKyAgICAgICAgIyBUaGUgcmVhc29uIHRvIGFjY2VwdCBmaWxlLWxpa2Ugb2JqZWN0IGluc3RlYWQgb2YganVzdCBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgIyBpczogd2UgbmVlZCB0byBvd24gcGlwZSBhbmQgY2xvc2UgaXQgYXQgdHJhbnNwb3J0IGZpbmlzaGluZworICAgICAgICAjIENhbiBnb3QgY29tcGxpY2F0ZWQgZXJyb3JzIGlmIHBhc3MgZi5maWxlbm8oKSwKKyAgICAgICAgIyBjbG9zZSBmZCBpbiBwaXBlIHRyYW5zcG9ydCB0aGVuIGNsb3NlIGYgYW5kIHZpc2UgdmVyc2EuCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzdWJwcm9jZXNzX3NoZWxsKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGNtZCwgKiwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc3VicHJvY2Vzc19leGVjKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksICphcmdzLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIFJlYWR5LWJhc2VkIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBtZXRob2RzLgorICAgICMgVGhlIGFkZF8qKCkgbWV0aG9kcyByZXR1cm4gTm9uZS4KKyAgICAjIFRoZSByZW1vdmVfKigpIG1ldGhvZHMgcmV0dXJuIFRydWUgaWYgc29tZXRoaW5nIHdhcyByZW1vdmVkLAorICAgICMgRmFsc2UgaWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gZGVsZXRlLgorCisgICAgZGVmIGFkZF9yZWFkZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmVfcmVhZGVyKHNlbGYsIGZkKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGFkZF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmVfd3JpdGVyKHNlbGYsIGZkKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBDb21wbGV0aW9uIGJhc2VkIEkvTyBtZXRob2RzIHJldHVybmluZyBGdXR1cmVzLgorCisgICAgZGVmIHNvY2tfcmVjdihzZWxmLCBzb2NrLCBuYnl0ZXMpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc29ja19zZW5kYWxsKHNlbGYsIHNvY2ssIGRhdGEpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc29ja19jb25uZWN0KHNlbGYsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc29ja19hY2NlcHQoc2VsZiwgc29jayk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgU2lnbmFsIGhhbmRsaW5nLgorCisgICAgZGVmIGFkZF9zaWduYWxfaGFuZGxlcihzZWxmLCBzaWcsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIEFic3RyYWN0RXZlbnRMb29wUG9saWN5OgorICAgICIiIkFic3RyYWN0IHBvbGljeSBmb3IgYWNjZXNzaW5nIHRoZSBldmVudCBsb29wLiIiIgorCisgICAgZGVmIGdldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNldF9ldmVudF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIG5ld19ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBDaGlsZCBwcm9jZXNzZXMgaGFuZGxpbmcgKFVuaXggb25seSkuCisKKyAgICBkZWYgZ2V0X2NoaWxkX3dhdGNoZXIoc2VsZik6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2V0X2NoaWxkX3dhdGNoZXIoc2VsZiwgd2F0Y2hlcik6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgQmFzZURlZmF1bHRFdmVudExvb3BQb2xpY3koQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpOgorICAgICIiIkRlZmF1bHQgcG9saWN5IGltcGxlbWVudGF0aW9uIGZvciBhY2Nlc3NpbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICBJbiB0aGlzIHBvbGljeSwgZWFjaCB0aHJlYWQgaGFzIGl0cyBvd24gZXZlbnQgbG9vcC4gIEhvd2V2ZXIsIHdlCisgICAgb25seSBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhbiBldmVudCBsb29wIGJ5IGRlZmF1bHQgZm9yIHRoZSBtYWluCisgICAgdGhyZWFkOyBvdGhlciB0aHJlYWRzIGJ5IGRlZmF1bHQgaGF2ZSBubyBldmVudCBsb29wLgorCisgICAgT3RoZXIgcG9saWNpZXMgbWF5IGhhdmUgZGlmZmVyZW50IHJ1bGVzIChlLmcuIGEgc2luZ2xlIGdsb2JhbAorICAgIGV2ZW50IGxvb3AsIG9yIGF1dG9tYXRpY2FsbHkgY3JlYXRpbmcgYW4gZXZlbnQgbG9vcCBwZXIgdGhyZWFkLCBvcgorICAgIHVzaW5nIHNvbWUgb3RoZXIgbm90aW9uIG9mIGNvbnRleHQgdG8gd2hpY2ggYW4gZXZlbnQgbG9vcCBpcworICAgIGFzc29jaWF0ZWQpLgorICAgICIiIgorCisgICAgX2xvb3BfZmFjdG9yeSA9IE5vbmUKKworICAgIGNsYXNzIF9Mb2NhbCh0aHJlYWRpbmcubG9jYWwpOgorICAgICAgICBfbG9vcCA9IE5vbmUKKyAgICAgICAgX3NldF9jYWxsZWQgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NhbCA9IHNlbGYuX0xvY2FsKCkKKworICAgIGRlZiBnZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSBldmVudCBsb29wLgorCisgICAgICAgIFRoaXMgbWF5IGJlIE5vbmUgb3IgYW4gaW5zdGFuY2Ugb2YgRXZlbnRMb29wLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgKHNlbGYuX2xvY2FsLl9sb29wIGlzIE5vbmUgYW5kCisgICAgICAgICAgICBub3Qgc2VsZi5fbG9jYWwuX3NldF9jYWxsZWQgYW5kCisgICAgICAgICAgICBpc2luc3RhbmNlKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCB0aHJlYWRpbmcuX01haW5UaHJlYWQpKToKKyAgICAgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5uZXdfZXZlbnRfbG9vcCgpKQorICAgICAgICBhc3NlcnQgc2VsZi5fbG9jYWwuX2xvb3AgaXMgbm90IE5vbmUsIFwKKyAgICAgICAgICAgICAgICgnVGhlcmUgaXMgbm8gY3VycmVudCBldmVudCBsb29wIGluIHRocmVhZCAlci4nICUKKyAgICAgICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fbG9jYWwuX2xvb3AKKworICAgIGRlZiBzZXRfZXZlbnRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiU2V0IHRoZSBldmVudCBsb29wLiIiIgorICAgICAgICBzZWxmLl9sb2NhbC5fc2V0X2NhbGxlZCA9IFRydWUKKyAgICAgICAgYXNzZXJ0IGxvb3AgaXMgTm9uZSBvciBpc2luc3RhbmNlKGxvb3AsIEFic3RyYWN0RXZlbnRMb29wKQorICAgICAgICBzZWxmLl9sb2NhbC5fbG9vcCA9IGxvb3AKKworICAgIGRlZiBuZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGV2ZW50IGxvb3AuCisKKyAgICAgICAgWW91IG11c3QgY2FsbCBzZXRfZXZlbnRfbG9vcCgpIHRvIG1ha2UgdGhpcyB0aGUgY3VycmVudCBldmVudAorICAgICAgICBsb29wLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvb3BfZmFjdG9yeSgpCisKKworIyBFdmVudCBsb29wIHBvbGljeS4gIFRoZSBwb2xpY3kgaXRzZWxmIGlzIGFsd2F5cyBnbG9iYWwsIGV2ZW4gaWYgdGhlCisjIHBvbGljeSdzIHJ1bGVzIHNheSB0aGF0IHRoZXJlIGlzIGFuIGV2ZW50IGxvb3AgcGVyIHRocmVhZCAob3Igb3RoZXIKKyMgbm90aW9uIG9mIGNvbnRleHQpLiAgVGhlIGRlZmF1bHQgcG9saWN5IGlzIGluc3RhbGxlZCBieSB0aGUgZmlyc3QKKyMgY2FsbCB0byBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS4KK19ldmVudF9sb29wX3BvbGljeSA9IE5vbmUKKworIyBMb2NrIGZvciBwcm90ZWN0aW5nIHRoZSBvbi10aGUtZmx5IGNyZWF0aW9uIG9mIHRoZSBldmVudCBsb29wIHBvbGljeS4KK19sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisKK2RlZiBfaW5pdF9ldmVudF9sb29wX3BvbGljeSgpOgorICAgIGdsb2JhbCBfZXZlbnRfbG9vcF9wb2xpY3kKKyAgICB3aXRoIF9sb2NrOgorICAgICAgICBpZiBfZXZlbnRfbG9vcF9wb2xpY3kgaXMgTm9uZTogICMgcHJhZ21hOiBubyBicmFuY2gKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgRGVmYXVsdEV2ZW50TG9vcFBvbGljeQorICAgICAgICAgICAgX2V2ZW50X2xvb3BfcG9saWN5ID0gRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisKKworZGVmIGdldF9ldmVudF9sb29wX3BvbGljeSgpOgorICAgICIiIlhYWCIiIgorICAgIGlmIF9ldmVudF9sb29wX3BvbGljeSBpcyBOb25lOgorICAgICAgICBfaW5pdF9ldmVudF9sb29wX3BvbGljeSgpCisgICAgcmV0dXJuIF9ldmVudF9sb29wX3BvbGljeQorCisKK2RlZiBzZXRfZXZlbnRfbG9vcF9wb2xpY3kocG9saWN5KToKKyAgICAiIiJYWFgiIiIKKyAgICBnbG9iYWwgX2V2ZW50X2xvb3BfcG9saWN5CisgICAgYXNzZXJ0IHBvbGljeSBpcyBOb25lIG9yIGlzaW5zdGFuY2UocG9saWN5LCBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeSkKKyAgICBfZXZlbnRfbG9vcF9wb2xpY3kgPSBwb2xpY3kKKworCitkZWYgZ2V0X2V2ZW50X2xvb3AoKToKKyAgICAiIiJYWFgiIiIKKyAgICByZXR1cm4gZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuZ2V0X2V2ZW50X2xvb3AoKQorCisKK2RlZiBzZXRfZXZlbnRfbG9vcChsb29wKToKKyAgICAiIiJYWFgiIiIKKyAgICBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5zZXRfZXZlbnRfbG9vcChsb29wKQorCisKK2RlZiBuZXdfZXZlbnRfbG9vcCgpOgorICAgICIiIlhYWCIiIgorICAgIHJldHVybiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5uZXdfZXZlbnRfbG9vcCgpCisKKworZGVmIGdldF9jaGlsZF93YXRjaGVyKCk6CisgICAgIiIiWFhYIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLmdldF9jaGlsZF93YXRjaGVyKCkKKworCitkZWYgc2V0X2NoaWxkX3dhdGNoZXIod2F0Y2hlcik6CisgICAgIiIiWFhYIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLnNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9mdXR1cmVzLnB5IGIvTGliL2FzeW5jaW8vZnV0dXJlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDlmNDIzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vZnV0dXJlcy5weQpAQCAtMCwwICsxLDM2NCBAQAorIiIiQSBGdXR1cmUgY2xhc3Mgc2ltaWxhciB0byB0aGUgb25lIGluIFBFUCAzMTQ4LiIiIgorCitfX2FsbF9fID0gWydDYW5jZWxsZWRFcnJvcicsICdUaW1lb3V0RXJyb3InLAorICAgICAgICAgICAnSW52YWxpZFN0YXRlRXJyb3InLAorICAgICAgICAgICAnRnV0dXJlJywgJ3dyYXBfZnV0dXJlJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzLl9iYXNlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjaworCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworIyBTdGF0ZXMgZm9yIEZ1dHVyZS4KK19QRU5ESU5HID0gJ1BFTkRJTkcnCitfQ0FOQ0VMTEVEID0gJ0NBTkNFTExFRCcKK19GSU5JU0hFRCA9ICdGSU5JU0hFRCcKKworX1BZMzQgPSBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA0KQorCisjIFRPRE86IERvIHdlIHJlYWxseSB3YW50IHRvIGRlcGVuZCBvbiBjb25jdXJyZW50LmZ1dHVyZXMgaW50ZXJuYWxzPworRXJyb3IgPSBjb25jdXJyZW50LmZ1dHVyZXMuX2Jhc2UuRXJyb3IKK0NhbmNlbGxlZEVycm9yID0gY29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yCitUaW1lb3V0RXJyb3IgPSBjb25jdXJyZW50LmZ1dHVyZXMuVGltZW91dEVycm9yCisKK1NUQUNLX0RFQlVHID0gbG9nZ2luZy5ERUJVRyAtIDEgICMgaGVhdnktZHV0eSBkZWJ1Z2dpbmcKKworCitjbGFzcyBJbnZhbGlkU3RhdGVFcnJvcihFcnJvcik6CisgICAgIiIiVGhlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHN0YXRlLiIiIgorICAgICMgVE9ETzogU2hvdyB0aGUgZnV0dXJlLCBpdHMgc3RhdGUsIHRoZSBtZXRob2QsIGFuZCB0aGUgcmVxdWlyZWQgc3RhdGUuCisKKworY2xhc3MgX1RyYWNlYmFja0xvZ2dlcjoKKyAgICAiIiJIZWxwZXIgdG8gbG9nIGEgdHJhY2ViYWNrIHVwb24gZGVzdHJ1Y3Rpb24gaWYgbm90IGNsZWFyZWQuCisKKyAgICBUaGlzIHNvbHZlcyBhIG5hc3R5IHByb2JsZW0gd2l0aCBGdXR1cmVzIGFuZCBUYXNrcyB0aGF0IGhhdmUgYW4KKyAgICBleGNlcHRpb24gc2V0OiBpZiBub2JvZHkgYXNrcyBmb3IgdGhlIGV4Y2VwdGlvbiwgdGhlIGV4Y2VwdGlvbiBpcworICAgIG5ldmVyIGxvZ2dlZC4gIFRoaXMgdmlvbGF0ZXMgdGhlIFplbiBvZiBQeXRob246ICdFcnJvcnMgc2hvdWxkCisgICAgbmV2ZXIgcGFzcyBzaWxlbnRseS4gIFVubGVzcyBleHBsaWNpdGx5IHNpbGVuY2VkLicKKworICAgIEhvd2V2ZXIsIHdlIGRvbid0IHdhbnQgdG8gbG9nIHRoZSBleGNlcHRpb24gYXMgc29vbiBhcworICAgIHNldF9leGNlcHRpb24oKSBpcyBjYWxsZWQ6IGlmIHRoZSBjYWxsaW5nIGNvZGUgaXMgd3JpdHRlbgorICAgIHByb3Blcmx5LCBpdCB3aWxsIGdldCB0aGUgZXhjZXB0aW9uIGFuZCBoYW5kbGUgaXQgcHJvcGVybHkuICBCdXQKKyAgICB3ZSAqZG8qIHdhbnQgdG8gbG9nIGl0IGlmIHJlc3VsdCgpIG9yIGV4Y2VwdGlvbigpIHdhcyBuZXZlciBjYWxsZWQKKyAgICAtLSBvdGhlcndpc2UgZGV2ZWxvcGVycyB3YXN0ZSBhIGxvdCBvZiB0aW1lIHdvbmRlcmluZyB3aHkgdGhlaXIKKyAgICBidWdneSBjb2RlIGZhaWxzIHNpbGVudGx5LgorCisgICAgQW4gZWFybGllciBhdHRlbXB0IGFkZGVkIGEgX19kZWxfXygpIG1ldGhvZCB0byB0aGUgRnV0dXJlIGNsYXNzCisgICAgaXRzZWxmLCBidXQgdGhpcyBiYWNrZmlyZWQgYmVjYXVzZSB0aGUgcHJlc2VuY2Ugb2YgX19kZWxfXygpCisgICAgcHJldmVudHMgZ2FyYmFnZSBjb2xsZWN0aW9uIGZyb20gYnJlYWtpbmcgY3ljbGVzLiAgQSB3YXkgb3V0IG9mCisgICAgdGhpcyBjYXRjaC0yMiBpcyB0byBhdm9pZCBoYXZpbmcgYSBfX2RlbF9fKCkgbWV0aG9kIG9uIHRoZSBGdXR1cmUKKyAgICBjbGFzcyBpdHNlbGYsIGJ1dCBpbnN0ZWFkIHRvIGhhdmUgYSByZWZlcmVuY2UgdG8gYSBoZWxwZXIgb2JqZWN0CisgICAgd2l0aCBhIF9fZGVsX18oKSBtZXRob2QgdGhhdCBsb2dzIHRoZSB0cmFjZWJhY2ssIHdoZXJlIHdlIGVuc3VyZQorICAgIHRoYXQgdGhlIGhlbHBlciBvYmplY3QgZG9lc24ndCBwYXJ0aWNpcGF0ZSBpbiBjeWNsZXMsIGFuZCBvbmx5IHRoZQorICAgIEZ1dHVyZSBoYXMgYSByZWZlcmVuY2UgdG8gaXQuCisKKyAgICBUaGUgaGVscGVyIG9iamVjdCBpcyBhZGRlZCB3aGVuIHNldF9leGNlcHRpb24oKSBpcyBjYWxsZWQuICBXaGVuCisgICAgdGhlIEZ1dHVyZSBpcyBjb2xsZWN0ZWQsIGFuZCB0aGUgaGVscGVyIGlzIHByZXNlbnQsIHRoZSBoZWxwZXIKKyAgICBvYmplY3QgaXMgYWxzbyBjb2xsZWN0ZWQsIGFuZCBpdHMgX19kZWxfXygpIG1ldGhvZCB3aWxsIGxvZyB0aGUKKyAgICB0cmFjZWJhY2suICBXaGVuIHRoZSBGdXR1cmUncyByZXN1bHQoKSBvciBleGNlcHRpb24oKSBtZXRob2QgaXMKKyAgICBjYWxsZWQgKGFuZCBhIGhlbHBlciBvYmplY3QgaXMgcHJlc2VudCksIGl0IHJlbW92ZXMgdGhlIHRoZSBoZWxwZXIKKyAgICBvYmplY3QsIGFmdGVyIGNhbGxpbmcgaXRzIGNsZWFyKCkgbWV0aG9kIHRvIHByZXZlbnQgaXQgZnJvbQorICAgIGxvZ2dpbmcuCisKKyAgICBPbmUgZG93bnNpZGUgaXMgdGhhdCB3ZSBkbyBhIGZhaXIgYW1vdW50IG9mIHdvcmsgdG8gZXh0cmFjdCB0aGUKKyAgICB0cmFjZWJhY2sgZnJvbSB0aGUgZXhjZXB0aW9uLCBldmVuIHdoZW4gaXQgaXMgbmV2ZXIgbG9nZ2VkLiAgSXQKKyAgICB3b3VsZCBzZWVtIGNoZWFwZXIgdG8ganVzdCBzdG9yZSB0aGUgZXhjZXB0aW9uIG9iamVjdCwgYnV0IHRoYXQKKyAgICByZWZlcmVuY2VzIHRoZSB0cmFjZWJhY2ssIHdoaWNoIHJlZmVyZW5jZXMgc3RhY2sgZnJhbWVzLCB3aGljaCBtYXkKKyAgICByZWZlcmVuY2UgdGhlIEZ1dHVyZSwgd2hpY2ggcmVmZXJlbmNlcyB0aGUgX1RyYWNlYmFja0xvZ2dlciwgYW5kCisgICAgdGhlbiB0aGUgX1RyYWNlYmFja0xvZ2dlciB3b3VsZCBiZSBpbmNsdWRlZCBpbiBhIGN5Y2xlLCB3aGljaCBpcworICAgIHdoYXQgd2UncmUgdHJ5aW5nIHRvIGF2b2lkISAgQXMgYW4gb3B0aW1pemF0aW9uLCB3ZSBkb24ndAorICAgIGltbWVkaWF0ZWx5IGZvcm1hdCB0aGUgZXhjZXB0aW9uOyB3ZSBvbmx5IGRvIHRoZSB3b3JrIHdoZW4KKyAgICBhY3RpdmF0ZSgpIGlzIGNhbGxlZCwgd2hpY2ggY2FsbCBpcyBkZWxheWVkIHVudGlsIGFmdGVyIGFsbCB0aGUKKyAgICBGdXR1cmUncyBjYWxsYmFja3MgaGF2ZSBydW4uICBTaW5jZSB1c3VhbGx5IGEgRnV0dXJlIGhhcyBhdCBsZWFzdAorICAgIG9uZSBjYWxsYmFjayAodHlwaWNhbGx5IHNldCBieSAneWllbGQgZnJvbScpIGFuZCB1c3VhbGx5IHRoYXQKKyAgICBjYWxsYmFjayBleHRyYWN0cyB0aGUgY2FsbGJhY2ssIHRoZXJlYnkgcmVtb3ZpbmcgdGhlIG5lZWQgdG8KKyAgICBmb3JtYXQgdGhlIGV4Y2VwdGlvbi4KKworICAgIFBTLiBJIGRvbid0IGNsYWltIGNyZWRpdCBmb3IgdGhpcyBzb2x1dGlvbi4gIEkgZmlyc3QgaGVhcmQgb2YgaXQKKyAgICBpbiBhIGRpc2N1c3Npb24gYWJvdXQgY2xvc2luZyBmaWxlcyB3aGVuIHRoZXkgYXJlIGNvbGxlY3RlZC4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9IFsnZXhjJywgJ3RiJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGMpOgorICAgICAgICBzZWxmLmV4YyA9IGV4YworICAgICAgICBzZWxmLnRiID0gTm9uZQorCisgICAgZGVmIGFjdGl2YXRlKHNlbGYpOgorICAgICAgICBleGMgPSBzZWxmLmV4YworICAgICAgICBpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmV4YyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYudGIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGMuX19jbGFzc19fLCBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLl9fdHJhY2ViYWNrX18pCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuZXhjID0gTm9uZQorICAgICAgICBzZWxmLnRiID0gTm9uZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYudGI6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Z1dHVyZS9UYXNrIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkOlxuJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4oc2VsZi50YikpCisKKworY2xhc3MgRnV0dXJlOgorICAgICIiIlRoaXMgY2xhc3MgaXMgKmFsbW9zdCogY29tcGF0aWJsZSB3aXRoIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuCisKKyAgICBEaWZmZXJlbmNlczoKKworICAgIC0gcmVzdWx0KCkgYW5kIGV4Y2VwdGlvbigpIGRvIG5vdCB0YWtlIGEgdGltZW91dCBhcmd1bWVudCBhbmQKKyAgICAgIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBmdXR1cmUgaXNuJ3QgZG9uZSB5ZXQuCisKKyAgICAtIENhbGxiYWNrcyByZWdpc3RlcmVkIHdpdGggYWRkX2RvbmVfY2FsbGJhY2soKSBhcmUgYWx3YXlzIGNhbGxlZAorICAgICAgdmlhIHRoZSBldmVudCBsb29wJ3MgY2FsbF9zb29uX3RocmVhZHNhZmUoKS4KKworICAgIC0gVGhpcyBjbGFzcyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSB3YWl0KCkgYW5kIGFzX2NvbXBsZXRlZCgpCisgICAgICBtZXRob2RzIGluIHRoZSBjb25jdXJyZW50LmZ1dHVyZXMgcGFja2FnZS4KKworICAgIChJbiBQeXRob24gMy40IG9yIGxhdGVyIHdlIG1heSBiZSBhYmxlIHRvIHVuaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbnMuKQorICAgICIiIgorCisgICAgIyBDbGFzcyB2YXJpYWJsZXMgc2VydmluZyBhcyBkZWZhdWx0cyBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLgorICAgIF9zdGF0ZSA9IF9QRU5ESU5HCisgICAgX3Jlc3VsdCA9IE5vbmUKKyAgICBfZXhjZXB0aW9uID0gTm9uZQorICAgIF9sb29wID0gTm9uZQorCisgICAgX2Jsb2NraW5nID0gRmFsc2UgICMgcHJvcGVyIHVzZSBvZiBmdXR1cmUgKHlpZWxkIHZzIHlpZWxkIGZyb20pCisKKyAgICBfbG9nX3RyYWNlYmFjayA9IEZhbHNlICAgIyBVc2VkIGZvciBQeXRob24gMy40IGFuZCBsYXRlcgorICAgIF90Yl9sb2dnZXIgPSBOb25lICAgICAgICAjIFVzZWQgZm9yIFB5dGhvbiAzLjMgb25seQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGxvb3A9Tm9uZSk6CisgICAgICAgICIiIkluaXRpYWxpemUgdGhlIGZ1dHVyZS4KKworICAgICAgICBUaGUgb3B0aW9uYWwgZXZlbnRfbG9vcCBhcmd1bWVudCBhbGxvd3MgdG8gZXhwbGljaXRseSBzZXQgdGhlIGV2ZW50CisgICAgICAgIGxvb3Agb2JqZWN0IHVzZWQgYnkgdGhlIGZ1dHVyZS4gSWYgaXQncyBub3QgcHJvdmlkZWQsIHRoZSBmdXR1cmUgdXNlcworICAgICAgICB0aGUgZGVmYXVsdCBldmVudCBsb29wLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9jYWxsYmFja3MgPSBbXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfRklOSVNIRUQ6CisgICAgICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzICs9ICc8ZXhjZXB0aW9uPXshcn0+Jy5mb3JtYXQoc2VsZi5fZXhjZXB0aW9uKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMgKz0gJzxyZXN1bHQ9eyFyfT4nLmZvcm1hdChzZWxmLl9yZXN1bHQpCisgICAgICAgIGVsaWYgc2VsZi5fY2FsbGJhY2tzOgorICAgICAgICAgICAgc2l6ZSA9IGxlbihzZWxmLl9jYWxsYmFja3MpCisgICAgICAgICAgICBpZiBzaXplID4gMjoKKyAgICAgICAgICAgICAgICByZXMgKz0gJzx7fSwgW3t9LCA8e30gbW9yZT4sIHt9XT4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhdGUsIHNlbGYuX2NhbGxiYWNrc1swXSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZS0yLCBzZWxmLl9jYWxsYmFja3NbLTFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMgKz0gJzx7fSwge30+Jy5mb3JtYXQoc2VsZi5fc3RhdGUsIHNlbGYuX2NhbGxiYWNrcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcyArPSAnPHt9PicuZm9ybWF0KHNlbGYuX3N0YXRlKQorICAgICAgICByZXR1cm4gcmVzCisKKyAgICBpZiBfUFkzNDoKKyAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbG9nX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAjIHNldF9leGNlcHRpb24oKSB3YXMgbm90IGNhbGxlZCwgb3IgcmVzdWx0KCkgb3IgZXhjZXB0aW9uKCkKKyAgICAgICAgICAgICAgICAjIGhhcyBjb25zdW1lZCB0aGUgZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGMgPSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRnV0dXJlL1Rhc2sgZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWQ6JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBleGNfaW5mbz0oZXhjLl9fY2xhc3NfXywgZXhjLCBleGMuX190cmFjZWJhY2tfXykpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJDYW5jZWwgdGhlIGZ1dHVyZSBhbmQgc2NoZWR1bGUgY2FsbGJhY2tzLgorCisgICAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIG9yIGNhbmNlbGxlZCwgcmV0dXJuIEZhbHNlLiAgT3RoZXJ3aXNlLAorICAgICAgICBjaGFuZ2UgdGhlIGZ1dHVyZSdzIHN0YXRlIHRvIGNhbmNlbGxlZCwgc2NoZWR1bGUgdGhlIGNhbGxiYWNrcyBhbmQKKyAgICAgICAgcmV0dXJuIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLl9zdGF0ZSA9IF9DQU5DRUxMRUQKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVfY2FsbGJhY2tzKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfc2NoZWR1bGVfY2FsbGJhY2tzKHNlbGYpOgorICAgICAgICAiIiJJbnRlcm5hbDogQXNrIHRoZSBldmVudCBsb29wIHRvIGNhbGwgYWxsIGNhbGxiYWNrcy4KKworICAgICAgICBUaGUgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgdG8gYmUgY2FsbGVkIGFzIHNvb24gYXMgcG9zc2libGUuIEFsc28KKyAgICAgICAgY2xlYXJzIHRoZSBjYWxsYmFjayBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgY2FsbGJhY2tzID0gc2VsZi5fY2FsbGJhY2tzWzpdCisgICAgICAgIGlmIG5vdCBjYWxsYmFja3M6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9jYWxsYmFja3NbOl0gPSBbXQorICAgICAgICBmb3IgY2FsbGJhY2sgaW4gY2FsbGJhY2tzOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssIHNlbGYpCisKKyAgICBkZWYgY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgZnV0dXJlIHdhcyBjYW5jZWxsZWQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSA9PSBfQ0FOQ0VMTEVECisKKyAgICAjIERvbid0IGltcGxlbWVudCBydW5uaW5nKCk7IHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTg2OTkKKworICAgIGRlZiBkb25lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgZnV0dXJlIGlzIGRvbmUuCisKKyAgICAgICAgRG9uZSBtZWFucyBlaXRoZXIgdGhhdCBhIHJlc3VsdCAvIGV4Y2VwdGlvbiBhcmUgYXZhaWxhYmxlLCBvciB0aGF0IHRoZQorICAgICAgICBmdXR1cmUgd2FzIGNhbmNlbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORworCisgICAgZGVmIHJlc3VsdChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZXN1bHQgdGhpcyBmdXR1cmUgcmVwcmVzZW50cy4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmFpc2VzIENhbmNlbGxlZEVycm9yLiAgSWYgdGhlCisgICAgICAgIGZ1dHVyZSdzIHJlc3VsdCBpc24ndCB5ZXQgYXZhaWxhYmxlLCByYWlzZXMgSW52YWxpZFN0YXRlRXJyb3IuICBJZgorICAgICAgICB0aGUgZnV0dXJlIGlzIGRvbmUgYW5kIGhhcyBhbiBleGNlcHRpb24gc2V0LCB0aGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfQ0FOQ0VMTEVEOgorICAgICAgICAgICAgcmFpc2UgQ2FuY2VsbGVkRXJyb3IKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX0ZJTklTSEVEOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZFN0YXRlRXJyb3IoJ1Jlc3VsdCBpcyBub3QgcmVhZHkuJykKKyAgICAgICAgc2VsZi5fbG9nX3RyYWNlYmFjayA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX3RiX2xvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4Y2VwdGlvbgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0CisKKyAgICBkZWYgZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGV4Y2VwdGlvbiB0aGF0IHdhcyBzZXQgb24gdGhpcyBmdXR1cmUuCisKKyAgICAgICAgVGhlIGV4Y2VwdGlvbiAob3IgTm9uZSBpZiBubyBleGNlcHRpb24gd2FzIHNldCkgaXMgcmV0dXJuZWQgb25seSBpZgorICAgICAgICB0aGUgZnV0dXJlIGlzIGRvbmUuICBJZiB0aGUgZnV0dXJlIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmFpc2VzCisgICAgICAgIENhbmNlbGxlZEVycm9yLiAgSWYgdGhlIGZ1dHVyZSBpc24ndCBkb25lIHlldCwgcmFpc2VzCisgICAgICAgIEludmFsaWRTdGF0ZUVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJhaXNlIENhbmNlbGxlZEVycm9yCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9GSU5JU0hFRDoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCdFeGNlcHRpb24gaXMgbm90IHNldC4nKQorICAgICAgICBzZWxmLl9sb2dfdHJhY2ViYWNrID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fdGJfbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fdGJfbG9nZ2VyLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlciA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgZGVmIGFkZF9kb25lX2NhbGxiYWNrKHNlbGYsIGZuKToKKyAgICAgICAgIiIiQWRkIGEgY2FsbGJhY2sgdG8gYmUgcnVuIHdoZW4gdGhlIGZ1dHVyZSBiZWNvbWVzIGRvbmUuCisKKyAgICAgICAgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IC0gdGhlIGZ1dHVyZSBvYmplY3QuIElmCisgICAgICAgIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBpcyBjYWxsZWQsIHRoZSBjYWxsYmFjayBpcworICAgICAgICBzY2hlZHVsZWQgd2l0aCBjYWxsX3Nvb24uCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORzoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGZuLCBzZWxmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2tzLmFwcGVuZChmbikKKworICAgICMgTmV3IG1ldGhvZCBub3QgaW4gUEVQIDMxNDguCisKKyAgICBkZWYgcmVtb3ZlX2RvbmVfY2FsbGJhY2soc2VsZiwgZm4pOgorICAgICAgICAiIiJSZW1vdmUgYWxsIGluc3RhbmNlcyBvZiBhIGNhbGxiYWNrIGZyb20gdGhlICJjYWxsIHdoZW4gZG9uZSIgbGlzdC4KKworICAgICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2FsbGJhY2tzIHJlbW92ZWQuCisgICAgICAgICIiIgorICAgICAgICBmaWx0ZXJlZF9jYWxsYmFja3MgPSBbZiBmb3IgZiBpbiBzZWxmLl9jYWxsYmFja3MgaWYgZiAhPSBmbl0KKyAgICAgICAgcmVtb3ZlZF9jb3VudCA9IGxlbihzZWxmLl9jYWxsYmFja3MpIC0gbGVuKGZpbHRlcmVkX2NhbGxiYWNrcykKKyAgICAgICAgaWYgcmVtb3ZlZF9jb3VudDoKKyAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrc1s6XSA9IGZpbHRlcmVkX2NhbGxiYWNrcworICAgICAgICByZXR1cm4gcmVtb3ZlZF9jb3VudAorCisgICAgIyBTby1jYWxsZWQgaW50ZXJuYWwgbWV0aG9kcyAobm90ZTogbm8gc2V0X3J1bm5pbmdfb3Jfbm90aWZ5X2NhbmNlbCgpKS4KKworICAgIGRlZiBzZXRfcmVzdWx0KHNlbGYsIHJlc3VsdCk6CisgICAgICAgICIiIk1hcmsgdGhlIGZ1dHVyZSBkb25lIGFuZCBzZXQgaXRzIHJlc3VsdC4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgcmFpc2VzCisgICAgICAgIEludmFsaWRTdGF0ZUVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkU3RhdGVFcnJvcigne306IHshcn0nLmZvcm1hdChzZWxmLl9zdGF0ZSwgc2VsZikpCisgICAgICAgIHNlbGYuX3Jlc3VsdCA9IHJlc3VsdAorICAgICAgICBzZWxmLl9zdGF0ZSA9IF9GSU5JU0hFRAorICAgICAgICBzZWxmLl9zY2hlZHVsZV9jYWxsYmFja3MoKQorCisgICAgZGVmIHNldF9leGNlcHRpb24oc2VsZiwgZXhjZXB0aW9uKToKKyAgICAgICAgIiIiTWFyayB0aGUgZnV0dXJlIGRvbmUgYW5kIHNldCBhbiBleGNlcHRpb24uCisKKyAgICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHJhaXNlcworICAgICAgICBJbnZhbGlkU3RhdGVFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9QRU5ESU5HOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZFN0YXRlRXJyb3IoJ3t9OiB7IXJ9Jy5mb3JtYXQoc2VsZi5fc3RhdGUsIHNlbGYpKQorICAgICAgICBpZiBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgdHlwZSk6CisgICAgICAgICAgICBleGNlcHRpb24gPSBleGNlcHRpb24oKQorICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBleGNlcHRpb24KKyAgICAgICAgc2VsZi5fc3RhdGUgPSBfRklOSVNIRUQKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVfY2FsbGJhY2tzKCkKKyAgICAgICAgaWYgX1BZMzQ6CisgICAgICAgICAgICBzZWxmLl9sb2dfdHJhY2ViYWNrID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fdGJfbG9nZ2VyID0gX1RyYWNlYmFja0xvZ2dlcihleGNlcHRpb24pCisgICAgICAgICAgICAjIEFycmFuZ2UgZm9yIHRoZSBsb2dnZXIgdG8gYmUgYWN0aXZhdGVkIGFmdGVyIGFsbCBjYWxsYmFja3MKKyAgICAgICAgICAgICMgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gY2FsbCByZXN1bHQoKSBvciBleGNlcHRpb24oKS4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3RiX2xvZ2dlci5hY3RpdmF0ZSkKKworICAgICMgVHJ1bHkgaW50ZXJuYWwgbWV0aG9kcy4KKworICAgIGRlZiBfY29weV9zdGF0ZShzZWxmLCBvdGhlcik6CisgICAgICAgICIiIkludGVybmFsIGhlbHBlciB0byBjb3B5IHN0YXRlIGZyb20gYW5vdGhlciBGdXR1cmUuCisKKyAgICAgICAgVGhlIG90aGVyIEZ1dHVyZSBtYXkgYmUgYSBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IG90aGVyLmRvbmUoKQorICAgICAgICBpZiBzZWxmLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5kb25lKCkKKyAgICAgICAgaWYgb3RoZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICBzZWxmLmNhbmNlbCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGNlcHRpb24gPSBvdGhlci5leGNlcHRpb24oKQorICAgICAgICAgICAgaWYgZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X2V4Y2VwdGlvbihleGNlcHRpb24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG90aGVyLnJlc3VsdCgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfcmVzdWx0KHJlc3VsdCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fYmxvY2tpbmcgPSBUcnVlCisgICAgICAgICAgICB5aWVsZCBzZWxmICAjIFRoaXMgdGVsbHMgVGFzayB0byB3YWl0IGZvciBjb21wbGV0aW9uLgorICAgICAgICBhc3NlcnQgc2VsZi5kb25lKCksICJ5aWVsZCBmcm9tIHdhc24ndCB1c2VkIHdpdGggZnV0dXJlIgorICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQoKSAgIyBNYXkgcmFpc2UgdG9vLgorCisKK2RlZiB3cmFwX2Z1dHVyZShmdXQsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV3JhcCBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlIG9iamVjdC4iIiIKKyAgICBpZiBpc2luc3RhbmNlKGZ1dCwgRnV0dXJlKToKKyAgICAgICAgcmV0dXJuIGZ1dAorICAgIGFzc2VydCBpc2luc3RhbmNlKGZ1dCwgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSksIFwKKyAgICAgICAgJ2NvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUgaXMgZXhwZWN0ZWQsIGdvdCB7IXJ9Jy5mb3JtYXQoZnV0KQorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgbmV3X2Z1dHVyZSA9IEZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgX2NoZWNrX2NhbmNlbF9vdGhlcihmKToKKyAgICAgICAgaWYgZi5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIGZ1dC5jYW5jZWwoKQorCisgICAgbmV3X2Z1dHVyZS5hZGRfZG9uZV9jYWxsYmFjayhfY2hlY2tfY2FuY2VsX290aGVyKQorICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjaygKKyAgICAgICAgbGFtYmRhIGZ1dHVyZTogbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZSgKKyAgICAgICAgICAgIG5ld19mdXR1cmUuX2NvcHlfc3RhdGUsIGZ1dCkpCisgICAgcmV0dXJuIG5ld19mdXR1cmUKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2xvY2tzLnB5IGIvTGliL2FzeW5jaW8vbG9ja3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljNDQzNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2xvY2tzLnB5CkBAIC0wLDAgKzEsNDY2IEBACisiIiJTeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4iIiIKKworX19hbGxfXyA9IFsnTG9jaycsICdFdmVudCcsICdDb25kaXRpb24nLCAnU2VtYXBob3JlJywgJ0JvdW5kZWRTZW1hcGhvcmUnXQorCitpbXBvcnQgY29sbGVjdGlvbnMKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCB0YXNrcworCisKK2NsYXNzIF9Db250ZXh0TWFuYWdlcjoKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIuCisKKyAgICBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBpZGlvbSBmb3IgYWNxdWlyaW5nIGFuZCByZWxlYXNpbmcgYQorICAgIGxvY2sgYXJvdW5kIGEgYmxvY2s6CisKKyAgICAgICAgd2l0aCAoeWllbGQgZnJvbSBsb2NrKToKKyAgICAgICAgICAgIDxibG9jaz4KKworICAgIHdoaWxlIGZhaWxpbmcgbG91ZGx5IHdoZW4gYWNjaWRlbnRhbGx5IHVzaW5nOgorCisgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgIDxibG9jaz4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrKToKKyAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICMgV2UgaGF2ZSBubyB1c2UgZm9yIHRoZSAiYXMgLi4uIiAgY2xhdXNlIGluIHRoZSB3aXRoCisgICAgICAgICMgc3RhdGVtZW50IGZvciBsb2Nrcy4KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2xvY2sucmVsZWFzZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9sb2NrID0gTm9uZSAgIyBDcnVkZWx5IHByZXZlbnQgcmV1c2UuCisKKworY2xhc3MgTG9jazoKKyAgICAiIiJQcmltaXRpdmUgbG9jayBvYmplY3RzLgorCisgICAgQSBwcmltaXRpdmUgbG9jayBpcyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgdGhhdCBpcyBub3Qgb3duZWQKKyAgICBieSBhIHBhcnRpY3VsYXIgY29yb3V0aW5lIHdoZW4gbG9ja2VkLiAgQSBwcmltaXRpdmUgbG9jayBpcyBpbiBvbmUKKyAgICBvZiB0d28gc3RhdGVzLCAnbG9ja2VkJyBvciAndW5sb2NrZWQnLgorCisgICAgSXQgaXMgY3JlYXRlZCBpbiB0aGUgdW5sb2NrZWQgc3RhdGUuICBJdCBoYXMgdHdvIGJhc2ljIG1ldGhvZHMsCisgICAgYWNxdWlyZSgpIGFuZCByZWxlYXNlKCkuICBXaGVuIHRoZSBzdGF0ZSBpcyB1bmxvY2tlZCwgYWNxdWlyZSgpCisgICAgY2hhbmdlcyB0aGUgc3RhdGUgdG8gbG9ja2VkIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgV2hlbiB0aGUKKyAgICBzdGF0ZSBpcyBsb2NrZWQsIGFjcXVpcmUoKSBibG9ja3MgdW50aWwgYSBjYWxsIHRvIHJlbGVhc2UoKSBpbgorICAgIGFub3RoZXIgY29yb3V0aW5lIGNoYW5nZXMgaXQgdG8gdW5sb2NrZWQsIHRoZW4gdGhlIGFjcXVpcmUoKSBjYWxsCisgICAgcmVzZXRzIGl0IHRvIGxvY2tlZCBhbmQgcmV0dXJucy4gIFRoZSByZWxlYXNlKCkgbWV0aG9kIHNob3VsZCBvbmx5CisgICAgYmUgY2FsbGVkIGluIHRoZSBsb2NrZWQgc3RhdGU7IGl0IGNoYW5nZXMgdGhlIHN0YXRlIHRvIHVubG9ja2VkCisgICAgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuICBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVsZWFzZSBhbgorICAgIHVubG9ja2VkIGxvY2ssIGEgUnVudGltZUVycm9yIHdpbGwgYmUgcmFpc2VkLgorCisgICAgV2hlbiBtb3JlIHRoYW4gb25lIGNvcm91dGluZSBpcyBibG9ja2VkIGluIGFjcXVpcmUoKSB3YWl0aW5nIGZvcgorICAgIHRoZSBzdGF0ZSB0byB0dXJuIHRvIHVubG9ja2VkLCBvbmx5IG9uZSBjb3JvdXRpbmUgcHJvY2VlZHMgd2hlbiBhCisgICAgcmVsZWFzZSgpIGNhbGwgcmVzZXRzIHRoZSBzdGF0ZSB0byB1bmxvY2tlZDsgZmlyc3QgY29yb3V0aW5lIHdoaWNoCisgICAgaXMgYmxvY2tlZCBpbiBhY3F1aXJlKCkgaXMgYmVpbmcgcHJvY2Vzc2VkLgorCisgICAgYWNxdWlyZSgpIGlzIGEgY29yb3V0aW5lIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggJ3lpZWxkIGZyb20nLgorCisgICAgTG9ja3MgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuICAnKHlpZWxkIGZyb20gbG9jayknCisgICAgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24uCisKKyAgICBVc2FnZToKKworICAgICAgICBsb2NrID0gTG9jaygpCisgICAgICAgIC4uLgorICAgICAgICB5aWVsZCBmcm9tIGxvY2sKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgLi4uCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICAgQ29udGV4dCBtYW5hZ2VyIHVzYWdlOgorCisgICAgICAgIGxvY2sgPSBMb2NrKCkKKyAgICAgICAgLi4uCisgICAgICAgIHdpdGggKHlpZWxkIGZyb20gbG9jayk6CisgICAgICAgICAgICAgLi4uCisKKyAgICBMb2NrIG9iamVjdHMgY2FuIGJlIHRlc3RlZCBmb3IgbG9ja2luZyBzdGF0ZToKKworICAgICAgICBpZiBub3QgbG9jay5sb2NrZWQoKToKKyAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICMgbG9jayBpcyBhY3F1aXJlZAorICAgICAgICAgICAuLi4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX2xvY2tlZCA9IEZhbHNlCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdsb2NrZWQnIGlmIHNlbGYuX2xvY2tlZCBlbHNlICd1bmxvY2tlZCcKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBkZWYgbG9ja2VkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBsb2NrIGlzIGFjcXVpcmVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbG9ja2VkCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIGFjcXVpcmUoc2VsZik6CisgICAgICAgICIiIkFjcXVpcmUgYSBsb2NrLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgbG9jayBpcyB1bmxvY2tlZCwgdGhlbiBzZXRzIGl0IHRvCisgICAgICAgIGxvY2tlZCBhbmQgcmV0dXJucyBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3dhaXRlcnMgYW5kIG5vdCBzZWxmLl9sb2NrZWQ6CisgICAgICAgICAgICBzZWxmLl9sb2NrZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKGZ1dCkKKworICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICAiIiJSZWxlYXNlIGEgbG9jay4KKworICAgICAgICBXaGVuIHRoZSBsb2NrIGlzIGxvY2tlZCwgcmVzZXQgaXQgdG8gdW5sb2NrZWQsIGFuZCByZXR1cm4uCisgICAgICAgIElmIGFueSBvdGhlciBjb3JvdXRpbmVzIGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIGJlY29tZQorICAgICAgICB1bmxvY2tlZCwgYWxsb3cgZXhhY3RseSBvbmUgb2YgdGhlbSB0byBwcm9jZWVkLgorCisgICAgICAgIFdoZW4gaW52b2tlZCBvbiBhbiB1bmxvY2tlZCBsb2NrLCBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisKKyAgICAgICAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gRmFsc2UKKyAgICAgICAgICAgICMgV2FrZSB1cCB0aGUgZmlyc3Qgd2FpdGVyIHdobyBpc24ndCBjYW5jZWxsZWQuCisgICAgICAgICAgICBmb3IgZnV0IGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0xvY2sgaXMgbm90IGFjcXVpcmVkLicpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAnInlpZWxkIGZyb20iIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uJykKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICMgVGhpcyBtdXN0IGV4aXN0IGJlY2F1c2UgX19lbnRlcl9fIGV4aXN0cywgZXZlbiB0aG91Z2ggdGhhdAorICAgICAgICAjIGFsd2F5cyByYWlzZXM7IHRoYXQncyBob3cgdGhlIHdpdGgtc3RhdGVtZW50IHdvcmtzLgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBub3QgYSBjb3JvdXRpbmUuICBJdCBpcyBtZWFudCB0byBlbmFibGUgdGhlIGlkaW9tOgorICAgICAgICAjCisgICAgICAgICMgICAgIHdpdGggKHlpZWxkIGZyb20gbG9jayk6CisgICAgICAgICMgICAgICAgICA8YmxvY2s+CisgICAgICAgICMKKyAgICAgICAgIyBhcyBhbiBhbHRlcm5hdGl2ZSB0bzoKKyAgICAgICAgIworICAgICAgICAjICAgICB5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpCisgICAgICAgICMgICAgIHRyeToKKyAgICAgICAgIyAgICAgICAgIDxibG9jaz4KKyAgICAgICAgIyAgICAgZmluYWxseToKKyAgICAgICAgIyAgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKyAgICAgICAgcmV0dXJuIF9Db250ZXh0TWFuYWdlcihzZWxmKQorCisKK2NsYXNzIEV2ZW50OgorICAgICIiIkFzeW5jaHJvbm91cyBlcXVpdmFsZW50IHRvIHRocmVhZGluZy5FdmVudC4KKworICAgIENsYXNzIGltcGxlbWVudGluZyBldmVudCBvYmplY3RzLiBBbiBldmVudCBtYW5hZ2VzIGEgZmxhZyB0aGF0IGNhbiBiZSBzZXQKKyAgICB0byB0cnVlIHdpdGggdGhlIHNldCgpIG1ldGhvZCBhbmQgcmVzZXQgdG8gZmFsc2Ugd2l0aCB0aGUgY2xlYXIoKSBtZXRob2QuCisgICAgVGhlIHdhaXQoKSBtZXRob2QgYmxvY2tzIHVudGlsIHRoZSBmbGFnIGlzIHRydWUuIFRoZSBmbGFnIGlzIGluaXRpYWxseQorICAgIGZhbHNlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX3ZhbHVlID0gRmFsc2UKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gc3VwZXIoKS5fX3JlcHJfXygpCisgICAgICAgIGV4dHJhID0gJ3NldCcgaWYgc2VsZi5fdmFsdWUgZWxzZSAndW5zZXQnCisgICAgICAgIGlmIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICBleHRyYSA9ICd7fSx3YWl0ZXJzOnt9Jy5mb3JtYXQoZXh0cmEsIGxlbihzZWxmLl93YWl0ZXJzKSkKKyAgICAgICAgcmV0dXJuICc8e30gW3t9XT4nLmZvcm1hdChyZXNbMTotMV0sIGV4dHJhKQorCisgICAgZGVmIGlzX3NldChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlCisKKyAgICBkZWYgc2V0KHNlbGYpOgorICAgICAgICAiIiJTZXQgdGhlIGludGVybmFsIGZsYWcgdG8gdHJ1ZS4gQWxsIGNvcm91dGluZXMgd2FpdGluZyBmb3IgaXQgdG8KKyAgICAgICAgYmVjb21lIHRydWUgYXJlIGF3YWtlbmVkLiBDb3JvdXRpbmUgdGhhdCBjYWxsIHdhaXQoKSBvbmNlIHRoZSBmbGFnIGlzCisgICAgICAgIHRydWUgd2lsbCBub3QgYmxvY2sgYXQgYWxsLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3ZhbHVlOgorICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBUcnVlCisKKyAgICAgICAgICAgIGZvciBmdXQgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgICAgICBpZiBub3QgZnV0LmRvbmUoKToKKyAgICAgICAgICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoVHJ1ZSkKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgIiIiUmVzZXQgdGhlIGludGVybmFsIGZsYWcgdG8gZmFsc2UuIFN1YnNlcXVlbnRseSwgY29yb3V0aW5lcyBjYWxsaW5nCisgICAgICAgIHdhaXQoKSB3aWxsIGJsb2NrIHVudGlsIHNldCgpIGlzIGNhbGxlZCB0byBzZXQgdGhlIGludGVybmFsIGZsYWcKKyAgICAgICAgdG8gdHJ1ZSBhZ2Fpbi4iIiIKKyAgICAgICAgc2VsZi5fdmFsdWUgPSBGYWxzZQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICAiIiJCbG9jayB1bnRpbCB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlLgorCisgICAgICAgIElmIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUgb24gZW50cnksIHJldHVybiBUcnVlCisgICAgICAgIGltbWVkaWF0ZWx5LiAgT3RoZXJ3aXNlLCBibG9jayB1bnRpbCBhbm90aGVyIGNvcm91dGluZSBjYWxscworICAgICAgICBzZXQoKSB0byBzZXQgdGhlIGZsYWcgdG8gdHJ1ZSwgdGhlbiByZXR1cm4gVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3ZhbHVlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKGZ1dCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZShmdXQpCisKKworY2xhc3MgQ29uZGl0aW9uOgorICAgICIiIkFzeW5jaHJvbm91cyBlcXVpdmFsZW50IHRvIHRocmVhZGluZy5Db25kaXRpb24uCisKKyAgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgY29uZGl0aW9uIHZhcmlhYmxlIG9iamVjdHMuIEEgY29uZGl0aW9uIHZhcmlhYmxlCisgICAgYWxsb3dzIG9uZSBvciBtb3JlIGNvcm91dGluZXMgdG8gd2FpdCB1bnRpbCB0aGV5IGFyZSBub3RpZmllZCBieSBhbm90aGVyCisgICAgY29yb3V0aW5lLgorCisgICAgQSBuZXcgTG9jayBvYmplY3QgaXMgY3JlYXRlZCBhbmQgdXNlZCBhcyB0aGUgdW5kZXJseWluZyBsb2NrLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgIyBMb2NrIGFzIGFuIGF0dHJpYnV0ZSBhcyBpbiB0aHJlYWRpbmcuQ29uZGl0aW9uLgorICAgICAgICBsb2NrID0gTG9jayhsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX2xvY2sgPSBsb2NrCisgICAgICAgICMgRXhwb3J0IHRoZSBsb2NrJ3MgbG9ja2VkKCksIGFjcXVpcmUoKSBhbmQgcmVsZWFzZSgpIG1ldGhvZHMuCisgICAgICAgIHNlbGYubG9ja2VkID0gbG9jay5sb2NrZWQKKyAgICAgICAgc2VsZi5hY3F1aXJlID0gbG9jay5hY3F1aXJlCisgICAgICAgIHNlbGYucmVsZWFzZSA9IGxvY2sucmVsZWFzZQorCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdsb2NrZWQnIGlmIHNlbGYubG9ja2VkKCkgZWxzZSAndW5sb2NrZWQnCisgICAgICAgIGlmIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICBleHRyYSA9ICd7fSx3YWl0ZXJzOnt9Jy5mb3JtYXQoZXh0cmEsIGxlbihzZWxmLl93YWl0ZXJzKSkKKyAgICAgICAgcmV0dXJuICc8e30gW3t9XT4nLmZvcm1hdChyZXNbMTotMV0sIGV4dHJhKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICAiIiJXYWl0IHVudGlsIG5vdGlmaWVkLgorCisgICAgICAgIElmIHRoZSBjYWxsaW5nIGNvcm91dGluZSBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcworICAgICAgICBtZXRob2QgaXMgY2FsbGVkLCBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisKKyAgICAgICAgVGhpcyBtZXRob2QgcmVsZWFzZXMgdGhlIHVuZGVybHlpbmcgbG9jaywgYW5kIHRoZW4gYmxvY2tzCisgICAgICAgIHVudGlsIGl0IGlzIGF3YWtlbmVkIGJ5IGEgbm90aWZ5KCkgb3Igbm90aWZ5X2FsbCgpIGNhbGwgZm9yCisgICAgICAgIHRoZSBzYW1lIGNvbmRpdGlvbiB2YXJpYWJsZSBpbiBhbm90aGVyIGNvcm91dGluZS4gIE9uY2UKKyAgICAgICAgYXdha2VuZWQsIGl0IHJlLWFjcXVpcmVzIHRoZSBsb2NrIGFuZCByZXR1cm5zIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5sb2NrZWQoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IHdhaXQgb24gdW4tYWNxdWlyZWQgbG9jaycpCisKKyAgICAgICAgc2VsZi5yZWxlYXNlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5yZW1vdmUoZnV0KQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuYWNxdWlyZSgpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHdhaXRfZm9yKHNlbGYsIHByZWRpY2F0ZSk6CisgICAgICAgICIiIldhaXQgdW50aWwgYSBwcmVkaWNhdGUgYmVjb21lcyB0cnVlLgorCisgICAgICAgIFRoZSBwcmVkaWNhdGUgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2ggcmVzdWx0IHdpbGwgYmUKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBib29sZWFuIHZhbHVlLiAgVGhlIGZpbmFsIHByZWRpY2F0ZSB2YWx1ZSBpcworICAgICAgICB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKCkKKyAgICAgICAgd2hpbGUgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi53YWl0KCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZWRpY2F0ZSgpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBub3RpZnkoc2VsZiwgbj0xKToKKyAgICAgICAgIiIiQnkgZGVmYXVsdCwgd2FrZSB1cCBvbmUgY29yb3V0aW5lIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24sIGlmIGFueS4KKyAgICAgICAgSWYgdGhlIGNhbGxpbmcgY29yb3V0aW5lIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzIG1ldGhvZAorICAgICAgICBpcyBjYWxsZWQsIGEgUnVudGltZUVycm9yIGlzIHJhaXNlZC4KKworICAgICAgICBUaGlzIG1ldGhvZCB3YWtlcyB1cCBhdCBtb3N0IG4gb2YgdGhlIGNvcm91dGluZXMgd2FpdGluZyBmb3IgdGhlCisgICAgICAgIGNvbmRpdGlvbiB2YXJpYWJsZTsgaXQgaXMgYSBuby1vcCBpZiBubyBjb3JvdXRpbmVzIGFyZSB3YWl0aW5nLgorCisgICAgICAgIE5vdGU6IGFuIGF3YWtlbmVkIGNvcm91dGluZSBkb2VzIG5vdCBhY3R1YWxseSByZXR1cm4gZnJvbSBpdHMKKyAgICAgICAgd2FpdCgpIGNhbGwgdW50aWwgaXQgY2FuIHJlYWNxdWlyZSB0aGUgbG9jay4gU2luY2Ugbm90aWZ5KCkgZG9lcworICAgICAgICBub3QgcmVsZWFzZSB0aGUgbG9jaywgaXRzIGNhbGxlciBzaG91bGQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5sb2NrZWQoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IG5vdGlmeSBvbiB1bi1hY3F1aXJlZCBsb2NrJykKKworICAgICAgICBpZHggPSAwCisgICAgICAgIGZvciBmdXQgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGlmIGlkeCA+PSBuOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG5vdCBmdXQuZG9uZSgpOgorICAgICAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoRmFsc2UpCisKKyAgICBkZWYgbm90aWZ5X2FsbChzZWxmKToKKyAgICAgICAgIiIiV2FrZSB1cCBhbGwgdGhyZWFkcyB3YWl0aW5nIG9uIHRoaXMgY29uZGl0aW9uLiBUaGlzIG1ldGhvZCBhY3RzCisgICAgICAgIGxpa2Ugbm90aWZ5KCksIGJ1dCB3YWtlcyB1cCBhbGwgd2FpdGluZyB0aHJlYWRzIGluc3RlYWQgb2Ygb25lLiBJZiB0aGUKKyAgICAgICAgY2FsbGluZyB0aHJlYWQgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwKKyAgICAgICAgYSBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ub3RpZnkobGVuKHNlbGYuX3dhaXRlcnMpKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgJyJ5aWVsZCBmcm9tIiBzaG91bGQgYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIgZXhwcmVzc2lvbicpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICMgU2VlIGNvbW1lbnQgaW4gTG9jay5fX2l0ZXJfXygpLgorICAgICAgICB5aWVsZCBmcm9tIHNlbGYuYWNxdWlyZSgpCisgICAgICAgIHJldHVybiBfQ29udGV4dE1hbmFnZXIoc2VsZikKKworCitjbGFzcyBTZW1hcGhvcmU6CisgICAgIiIiQSBTZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uCisKKyAgICBBIHNlbWFwaG9yZSBtYW5hZ2VzIGFuIGludGVybmFsIGNvdW50ZXIgd2hpY2ggaXMgZGVjcmVtZW50ZWQgYnkgZWFjaAorICAgIGFjcXVpcmUoKSBjYWxsIGFuZCBpbmNyZW1lbnRlZCBieSBlYWNoIHJlbGVhc2UoKSBjYWxsLiBUaGUgY291bnRlcgorICAgIGNhbiBuZXZlciBnbyBiZWxvdyB6ZXJvOyB3aGVuIGFjcXVpcmUoKSBmaW5kcyB0aGF0IGl0IGlzIHplcm8sIGl0IGJsb2NrcywKKyAgICB3YWl0aW5nIHVudGlsIHNvbWUgb3RoZXIgdGhyZWFkIGNhbGxzIHJlbGVhc2UoKS4KKworICAgIFNlbWFwaG9yZXMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCisKKyAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgZ2l2ZXMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBpbnRlcm5hbAorICAgIGNvdW50ZXI7IGl0IGRlZmF1bHRzIHRvIDEuIElmIHRoZSB2YWx1ZSBnaXZlbiBpcyBsZXNzIHRoYW4gMCwKKyAgICBWYWx1ZUVycm9yIGlzIHJhaXNlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0xLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBpZiB2YWx1ZSA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJTZW1hcGhvcmUgaW5pdGlhbCB2YWx1ZSBtdXN0IGJlID49IDAiKQorICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdsb2NrZWQnIGlmIHNlbGYubG9ja2VkKCkgZWxzZSAndW5sb2NrZWQsdmFsdWU6e30nLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlKQorICAgICAgICBpZiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgZXh0cmEgPSAne30sd2FpdGVyczp7fScuZm9ybWF0KGV4dHJhLCBsZW4oc2VsZi5fd2FpdGVycykpCisgICAgICAgIHJldHVybiAnPHt9IFt7fV0+Jy5mb3JtYXQocmVzWzE6LTFdLCBleHRyYSkKKworICAgIGRlZiBsb2NrZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiBzZW1hcGhvcmUgY2FuIG5vdCBiZSBhY3F1aXJlZCBpbW1lZGlhdGVseS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlID09IDAKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgYWNxdWlyZShzZWxmKToKKyAgICAgICAgIiIiQWNxdWlyZSBhIHNlbWFwaG9yZS4KKworICAgICAgICBJZiB0aGUgaW50ZXJuYWwgY291bnRlciBpcyBsYXJnZXIgdGhhbiB6ZXJvIG9uIGVudHJ5LAorICAgICAgICBkZWNyZW1lbnQgaXQgYnkgb25lIGFuZCByZXR1cm4gVHJ1ZSBpbW1lZGlhdGVseS4gIElmIGl0IGlzCisgICAgICAgIHplcm8gb24gZW50cnksIGJsb2NrLCB3YWl0aW5nIHVudGlsIHNvbWUgb3RoZXIgY29yb3V0aW5lIGhhcworICAgICAgICBjYWxsZWQgcmVsZWFzZSgpIHRvIG1ha2UgaXQgbGFyZ2VyIHRoYW4gMCwgYW5kIHRoZW4gcmV0dXJuCisgICAgICAgIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fd2FpdGVycyBhbmQgc2VsZi5fdmFsdWUgPiAwOgorICAgICAgICAgICAgc2VsZi5fdmFsdWUgLT0gMQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKGZ1dCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlIC09IDEKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZShmdXQpCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgIiIiUmVsZWFzZSBhIHNlbWFwaG9yZSwgaW5jcmVtZW50aW5nIHRoZSBpbnRlcm5hbCBjb3VudGVyIGJ5IG9uZS4KKyAgICAgICAgV2hlbiBpdCB3YXMgemVybyBvbiBlbnRyeSBhbmQgYW5vdGhlciBjb3JvdXRpbmUgaXMgd2FpdGluZyBmb3IgaXQgdG8KKyAgICAgICAgYmVjb21lIGxhcmdlciB0aGFuIHplcm8gYWdhaW4sIHdha2UgdXAgdGhhdCBjb3JvdXRpbmUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl92YWx1ZSArPSAxCisgICAgICAgIGZvciB3YWl0ZXIgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAjIFNlZSBjb21tZW50IGluIExvY2suX19pdGVyX18oKS4KKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorICAgICAgICByZXR1cm4gX0NvbnRleHRNYW5hZ2VyKHNlbGYpCisKKworY2xhc3MgQm91bmRlZFNlbWFwaG9yZShTZW1hcGhvcmUpOgorICAgICIiIkEgYm91bmRlZCBzZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uCisKKyAgICBUaGlzIHJhaXNlcyBWYWx1ZUVycm9yIGluIHJlbGVhc2UoKSBpZiBpdCB3b3VsZCBpbmNyZWFzZSB0aGUgdmFsdWUKKyAgICBhYm92ZSB0aGUgaW5pdGlhbCB2YWx1ZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0xLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLl9ib3VuZF92YWx1ZSA9IHZhbHVlCisgICAgICAgIHN1cGVyKCkuX19pbml0X18odmFsdWUsIGxvb3A9bG9vcCkKKworICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl92YWx1ZSA+PSBzZWxmLl9ib3VuZF92YWx1ZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0JvdW5kZWRTZW1hcGhvcmUgcmVsZWFzZWQgdG9vIG1hbnkgdGltZXMnKQorICAgICAgICBzdXBlcigpLnJlbGVhc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vbG9nLnB5IGIvTGliL2FzeW5jaW8vbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYTcwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9sb2cucHkKQEAgLTAsMCArMSw3IEBACisiIiJMb2dnaW5nIGNvbmZpZ3VyYXRpb24uIiIiCisKK2ltcG9ydCBsb2dnaW5nCisKKworIyBOYW1lIHRoZSBsb2dnZXIgYWZ0ZXIgdGhlIHBhY2thZ2UuCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX3BhY2thZ2VfXykKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3Byb2FjdG9yX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3Byb2FjdG9yX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGU0ZDNkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vcHJvYWN0b3JfZXZlbnRzLnB5CkBAIC0wLDAgKzEsNDg3IEBACisiIiJFdmVudCBsb29wIHVzaW5nIGEgcHJvYWN0b3IgYW5kIHJlbGF0ZWQgY2xhc3Nlcy4KKworQSBwcm9hY3RvciBpcyBhICJub3RpZnktb24tY29tcGxldGlvbiIgbXVsdGlwbGV4ZXIuICBDdXJyZW50bHkgYQorcHJvYWN0b3IgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBXaW5kb3dzIHdpdGggSU9DUC4KKyIiIgorCitfX2FsbF9fID0gWydCYXNlUHJvYWN0b3JFdmVudExvb3AnXQorCitpbXBvcnQgc29ja2V0CisKK2Zyb20gLiBpbXBvcnQgYmFzZV9ldmVudHMKK2Zyb20gLiBpbXBvcnQgY29uc3RhbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitjbGFzcyBfUHJvYWN0b3JCYXNlUGlwZVRyYW5zcG9ydCh0cmFuc3BvcnRzLkJhc2VUcmFuc3BvcnQpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIHBpcGUgYW5kIHNvY2tldCB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9zZXRfZXh0cmEoc29jaykKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fc29jayA9IHNvY2sKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBzZXJ2ZXIKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZSAgIyBOb25lIG9yIGJ5dGVhcnJheS4KKyAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGVuZGluZ193cml0ZSA9IDAKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ID0gMAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UgICMgU2V0IHdoZW4gY2xvc2UoKSBjYWxsZWQuCisgICAgICAgIHNlbGYuX2VvZl93cml0dGVuID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcHJvdG9jb2xfcGF1c2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5zZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpCisgICAgICAgIGlmIHNlbGYuX3NlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlci5hdHRhY2goc2VsZikKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbih3YWl0ZXIuc2V0X3Jlc3VsdCwgTm9uZSkKKworICAgIGRlZiBfc2V0X2V4dHJhKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLl9leHRyYVsncGlwZSddID0gc29jaworCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXIgYW5kIHNlbGYuX3dyaXRlX2Z1dCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisgICAgICAgIGlmIHNlbGYuX3JlYWRfZnV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQuY2FuY2VsKCkKKworICAgIGRlZiBfZmF0YWxfZXJyb3Ioc2VsZiwgZXhjKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCAoQnJva2VuUGlwZUVycm9yLCBDb25uZWN0aW9uUmVzZXRFcnJvcikpOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmF0YWwgZXJyb3IgZm9yICVzJywgc2VsZikKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorCisgICAgZGVmIF9mb3JjZV9jbG9zZShzZWxmLCBleGMpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgIGlmIHNlbGYuX3dyaXRlX2Z1dDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dC5jYW5jZWwoKQorICAgICAgICBpZiBzZWxmLl9yZWFkX2Z1dDoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICBzZWxmLl9wZW5kaW5nX3dyaXRlID0gMAorICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBleGMpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIFhYWCBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgb3ZlcmxhcHBlZCByZWFkIG9uIHRoZSBvdGhlcgorICAgICAgICAgICAgIyBlbmQgdGhlbiBpdCBtYXkgZmFpbCB3aXRoIEVSUk9SX05FVE5BTUVfREVMRVRFRCBpZiB3ZQorICAgICAgICAgICAgIyBqdXN0IGNsb3NlIG91ciBlbmQuICBGaXJzdCBjYWxsaW5nIHNodXRkb3duKCkgc2VlbXMgdG8KKyAgICAgICAgICAgICMgY3VyZSBpdCwgYnV0IG1heWJlIHVzaW5nIERpc2Nvbm5lY3RFeCgpIHdvdWxkIGJlIGJldHRlci4KKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fc29jaywgJ3NodXRkb3duJyk6CisgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQorICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9zZXJ2ZXIKKyAgICAgICAgICAgIGlmIHNlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZXJ2ZXIuZGV0YWNoKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVyID0gTm9uZQorCisgICAgIyBYWFggVGhlIG5leHQgZm91ciBtZXRob2RzIGFyZSBuZWFybHkgaWRlbnRpY2FsIHRvIGNvcnJlc3BvbmRpbmcKKyAgICAjIG9uZXMgaW4gX1NlbGVjdG9yVHJhbnNwb3J0LiAgTWF5YmUgcmVmYWN0b3IgYnVmZmVyIG1hbmFnZW1lbnQgdG8KKyAgICAjIHNoYXJlIHRoZSBpbXBsZW1lbnRhdGlvbnM/ICAoQWxzbyB0aGVzZSBhcmUgcmVhbGx5IG9ubHkgbmVlZGVkCisgICAgIyBieSBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQgYnV0IHNpbmNlIF9idWZmZXIgaXMgZGVmaW5lZCBvbgorICAgICMgdGhlIGJhc2UgY2xhc3MgSSBhbSBwdXR0aW5nIGl0IGhlcmUgZm9yIG5vdy4pCisKKyAgICBkZWYgX21heWJlX3BhdXNlX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBzaXplID0gc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKQorICAgICAgICBpZiBzaXplIDw9IHNlbGYuX2hpZ2hfd2F0ZXI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IHNlbGYuX3Byb3RvY29sX3BhdXNlZDoKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sX3BhdXNlZCA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5wYXVzZV93cml0aW5nKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbigncGF1c2Vfd3JpdGluZygpIGZhaWxlZCcpCisKKyAgICBkZWYgX21heWJlX3Jlc3VtZV9wcm90b2NvbChzZWxmKToKKyAgICAgICAgaWYgKHNlbGYuX3Byb3RvY29sX3BhdXNlZCBhbmQKKyAgICAgICAgICAgIHNlbGYuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkgPD0gc2VsZi5fbG93X3dhdGVyKToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sX3BhdXNlZCA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wucmVzdW1lX3dyaXRpbmcoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdyZXN1bWVfd3JpdGluZygpIGZhaWxlZCcpCisKKyAgICBkZWYgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoc2VsZiwgaGlnaD1Ob25lLCBsb3c9Tm9uZSk6CisgICAgICAgIGlmIGhpZ2ggaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGxvdyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGhpZ2ggPSA2NCoxMDI0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGhpZ2ggPSA0KmxvdworICAgICAgICBpZiBsb3cgaXMgTm9uZToKKyAgICAgICAgICAgIGxvdyA9IGhpZ2ggLy8gNAorICAgICAgICBpZiBub3QgaGlnaCA+PSBsb3cgPj0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2hpZ2ggKCVyKSBtdXN0IGJlID49IGxvdyAoJXIpIG11c3QgYmUgPj0gMCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlnaCwgbG93KSkKKyAgICAgICAgc2VsZi5faGlnaF93YXRlciA9IGhpZ2gKKyAgICAgICAgc2VsZi5fbG93X3dhdGVyID0gbG93CisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICBzaXplID0gc2VsZi5fcGVuZGluZ193cml0ZQorICAgICAgICBpZiBzZWxmLl9idWZmZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzaXplICs9IGxlbihzZWxmLl9idWZmZXIpCisgICAgICAgIHJldHVybiBzaXplCisKKworY2xhc3MgX1Byb2FjdG9yUmVhZFBpcGVUcmFuc3BvcnQoX1Byb2FjdG9yQmFzZVBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlJlYWRUcmFuc3BvcnQpOgorICAgICIiIlRyYW5zcG9ydCBmb3IgcmVhZCBwaXBlcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSwgc2VydmVyKQorICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fbG9vcF9yZWFkaW5nKQorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Nhbm5vdCBwYXVzZV9yZWFkaW5nKCkgd2hlbiBjbG9zaW5nJykKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdBbHJlYWR5IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm90IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fbG9vcF9yZWFkaW5nLCBzZWxmLl9yZWFkX2Z1dCkKKworICAgIGRlZiBfbG9vcF9yZWFkaW5nKHNlbGYsIGZ1dD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRhdGEgPSBOb25lCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZnV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLl9yZWFkX2Z1dCBpcyBmdXQgb3IgKHNlbGYuX3JlYWRfZnV0IGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2luZykKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IE5vbmUKKyAgICAgICAgICAgICAgICBkYXRhID0gZnV0LnJlc3VsdCgpICAjIGRlbGl2ZXIgZGF0YSBsYXRlciBpbiAiZmluYWxseSIgY2xhdXNlCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgIyBzaW5jZSBjbG9zZSgpIGhhcyBiZWVuIGNhbGxlZCB3ZSBpZ25vcmUgYW55IHJlYWQgZGF0YQorICAgICAgICAgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGRhdGEgPT0gYicnOgorICAgICAgICAgICAgICAgICMgd2UgZ290IGVuZC1vZi1maWxlIHNvIG5vIG5lZWQgdG8gcmVzY2hlZHVsZSBhIG5ldyByZWFkCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICMgcmVzY2hlZHVsZSBhIG5ldyByZWFkCisgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLnJlY3Yoc2VsZi5fc29jaywgNDA5NikKKyAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25BYm9ydGVkRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICBleGNlcHQgQ29ubmVjdGlvblJlc2V0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX2xvb3BfcmVhZGluZykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGtlZXBfb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKworY2xhc3MgX1Byb2FjdG9yQmFzZVdyaXRlUGlwZVRyYW5zcG9ydChfUHJvYWN0b3JCYXNlUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5Xcml0ZVRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciB3cml0ZSBwaXBlcy4iIiIKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGJ5dGUtaXNoICglciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZGF0YSkpCisgICAgICAgIGlmIHNlbGYuX2VvZl93cml0dGVuOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd3cml0ZV9lb2YoKSBhbHJlYWR5IGNhbGxlZCcpCisKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Q6CisgICAgICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgPj0gY29uc3RhbnRzLkxPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBPYnNlcnZhYmxlIHN0YXRlczoKKyAgICAgICAgIyAxLiBJRExFOiBfd3JpdGVfZnV0IGFuZCBfYnVmZmVyIGJvdGggTm9uZQorICAgICAgICAjIDIuIFdSSVRJTkc6IF93cml0ZV9mdXQgc2V0OyBfYnVmZmVyIE5vbmUKKyAgICAgICAgIyAzLiBCQUNLRUQgVVA6IF93cml0ZV9mdXQgc2V0OyBfYnVmZmVyIGEgYnl0ZWFycmF5CisgICAgICAgICMgV2UgYWx3YXlzIGNvcHkgdGhlIGRhdGEsIHNvIHRoZSBjYWxsZXIgY2FuJ3QgbW9kaWZ5IGl0CisgICAgICAgICMgd2hpbGUgd2UncmUgc3RpbGwgd2FpdGluZyBmb3IgdGhlIEkvTyB0byBoYXBwZW4uCisgICAgICAgIGlmIHNlbGYuX3dyaXRlX2Z1dCBpcyBOb25lOiAgIyBJRExFIC0+IFdSSVRJTkcKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLl9idWZmZXIgaXMgTm9uZQorICAgICAgICAgICAgIyBQYXNzIGEgY29weSwgZXhjZXB0IGlmIGl0J3MgYWxyZWFkeSBpbW11dGFibGUuCisgICAgICAgICAgICBzZWxmLl9sb29wX3dyaXRpbmcoZGF0YT1ieXRlcyhkYXRhKSkKKyAgICAgICAgICAgICMgWFhYIFNob3VsZCB3ZSBwYXVzZSB0aGUgcHJvdG9jb2wgYXQgdGhpcyBwb2ludAorICAgICAgICAgICAgIyBpZiBsZW4oZGF0YSkgPiBzZWxmLl9oaWdoX3dhdGVyPyAgKFRoYXQgd291bGQKKyAgICAgICAgICAgICMgcmVxdWlyZSBrZWVwaW5nIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGFzc2VkCisgICAgICAgICAgICAjIHRvIGEgc2VuZCgpIHRoYXQgaGFzbid0IGZpbmlzaGVkIHlldC4pCisgICAgICAgIGVsaWYgbm90IHNlbGYuX2J1ZmZlcjogICMgV1JJVElORyAtPiBCQUNLRUQgVVAKKyAgICAgICAgICAgICMgTWFrZSBhIG11dGFibGUgY29weSB3aGljaCB3ZSBjYW4gZXh0ZW5kLgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYnl0ZWFycmF5KGRhdGEpCisgICAgICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisgICAgICAgIGVsc2U6ICAjIEJBQ0tFRCBVUAorICAgICAgICAgICAgIyBBcHBlbmQgdG8gYnVmZmVyIChhbHNvIGNvcGllcykuCisgICAgICAgICAgICBzZWxmLl9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgX2xvb3Bfd3JpdGluZyhzZWxmLCBmPU5vbmUsIGRhdGE9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzc2VydCBmIGlzIHNlbGYuX3dyaXRlX2Z1dAorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcGVuZGluZ193cml0ZSA9IDAKKyAgICAgICAgICAgIGlmIGY6CisgICAgICAgICAgICAgICAgZi5yZXN1bHQoKQorICAgICAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXIKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgICAgICAgICAjIE5vdyB0aGF0IHdlJ3ZlIHJlZHVjZWQgdGhlIGJ1ZmZlciBzaXplLCB0ZWxsIHRoZQorICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgdG8gcmVzdW1lIHdyaXRpbmcgaWYgaXQgd2FzIHBhdXNlZC4gIE5vdGUgdGhhdAorICAgICAgICAgICAgICAgICMgd2UgZG8gdGhpcyBsYXN0IHNpbmNlIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICAjIGFuZCBpdCBtYXkgYWRkIG1vcmUgZGF0YSB0byB0aGUgYnVmZmVyIChldmVuIGNhdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCB0byBiZSBwYXVzZWQgYWdhaW4pLgorICAgICAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLnNlbmQoc2VsZi5fc29jaywgZGF0YSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fd3JpdGVfZnV0LmRvbmUoKToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX3BlbmRpbmdfd3JpdGUgPT0gMAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9wZW5kaW5nX3dyaXRlID0gbGVuKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dC5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9sb29wX3dyaXRpbmcpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9mdXQuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbG9vcF93cml0aW5nKQorICAgICAgICBleGNlcHQgQ29ubmVjdGlvblJlc2V0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShOb25lKQorCisKK2NsYXNzIF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydChfUHJvYWN0b3JCYXNlV3JpdGVQaXBlVHJhbnNwb3J0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3KQorICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLnJlY3Yoc2VsZi5fc29jaywgMTYpCisgICAgICAgIHNlbGYuX3JlYWRfZnV0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX3BpcGVfY2xvc2VkKQorCisgICAgZGVmIF9waXBlX2Nsb3NlZChzZWxmLCBmdXQpOgorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAjIHRoZSB0cmFuc3BvcnQgaGFzIGJlZW4gY2xvc2VkCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYXNzZXJ0IGZ1dC5yZXN1bHQoKSA9PSBiJycKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLl9yZWFkX2Z1dCBpcyBOb25lCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYXNzZXJ0IGZ1dCBpcyBzZWxmLl9yZWFkX2Z1dCwgKGZ1dCwgc2VsZi5fcmVhZF9mdXQpCisgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl93cml0ZV9mdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworCitjbGFzcyBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0KF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJvYWN0b3JCYXNlV3JpdGVQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciBkdXBsZXggcGlwZXMuIiIiCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qcm9hY3RvckJhc2VXcml0ZVBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5UcmFuc3BvcnQpOgorICAgICIiIlRyYW5zcG9ydCBmb3IgY29ubmVjdGVkIHNvY2tldHMuIiIiCisKKyAgICBkZWYgX3NldF9leHRyYShzZWxmLCBzb2NrKToKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3NvY2tldCddID0gc29jaworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9leHRyYVsnc29ja25hbWUnXSA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiAncGVlcm5hbWUnIG5vdCBpbiBzZWxmLl9leHRyYToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9leHRyYVsncGVlcm5hbWUnXSA9IHNvY2suZ2V0cGVlcm5hbWUoKQorICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmcgb3Igc2VsZi5fZW9mX3dyaXR0ZW46CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fZW9mX3dyaXR0ZW4gPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX3dyaXRlX2Z1dCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKworCitjbGFzcyBCYXNlUHJvYWN0b3JFdmVudExvb3AoYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYWN0b3IpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBwcm9hY3RvcjogJXMnLCBwcm9hY3Rvci5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHNlbGYuX3Byb2FjdG9yID0gcHJvYWN0b3IKKyAgICAgICAgc2VsZi5fc2VsZWN0b3IgPSBwcm9hY3RvciAgICMgY29udmVuaWVudCBhbGlhcworICAgICAgICBzZWxmLl9zZWxmX3JlYWRpbmdfZnV0dXJlID0gTm9uZQorICAgICAgICBzZWxmLl9hY2NlcHRfZnV0dXJlcyA9IHt9ICAgIyBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yID0+IEZ1dHVyZQorICAgICAgICBwcm9hY3Rvci5zZXRfbG9vcChzZWxmKQorICAgICAgICBzZWxmLl9tYWtlX3NlbGZfcGlwZSgpCisKKyAgICBkZWYgX21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICByZXR1cm4gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEsIHNlcnZlcikKKworICAgIGRlZiBfbWFrZV9kdXBsZXhfcGlwZV90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0KHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIF9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICByZXR1cm4gX1Byb2FjdG9yUmVhZFBpcGVUcmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEpCisKKyAgICBkZWYgX21ha2Vfd3JpdGVfcGlwZV90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgIyBXZSB3YW50IGNvbm5lY3Rpb25fbG9zdCgpIHRvIGJlIGNhbGxlZCB3aGVuIG90aGVyIGVuZCBjbG9zZXMKKyAgICAgICAgcmV0dXJuIF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9hY3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgICAgICBzZWxmLl9wcm9hY3Rvci5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9wcm9hY3RvciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gTm9uZQorICAgICAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisgICAgICAgIHNlbGYuX2FjY2VwdF9mdXR1cmVzLmNsZWFyKCkKKworICAgIGRlZiBzb2NrX3JlY3Yoc2VsZiwgc29jaywgbik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5yZWN2KHNvY2ssIG4pCisKKyAgICBkZWYgc29ja19zZW5kYWxsKHNlbGYsIHNvY2ssIGRhdGEpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3Iuc2VuZChzb2NrLCBkYXRhKQorCisgICAgZGVmIHNvY2tfY29ubmVjdChzZWxmLCBzb2NrLCBhZGRyZXNzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc29jaywgYWRkcmVzcykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXJyKQorICAgICAgICAgICAgcmV0dXJuIGZ1dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2FjdG9yLmNvbm5lY3Qoc29jaywgYWRkcmVzcykKKworICAgIGRlZiBzb2NrX2FjY2VwdChzZWxmLCBzb2NrKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2FjdG9yLmFjY2VwdChzb2NrKQorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2Nsb3NlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fc2VsZl9yZWFkaW5nX2Z1dHVyZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NlbGZfcmVhZGluZ19mdXR1cmUuY2FuY2VsKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbGZfcmVhZGluZ19mdXR1cmUgPSBOb25lCisgICAgICAgIHNlbGYuX3Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fc3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fY3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyAtPSAxCisKKyAgICBkZWYgX21ha2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICAjIEEgc2VsZi1zb2NrZXQsIHJlYWxseS4gOi0pCisgICAgICAgIHNlbGYuX3Nzb2NrLCBzZWxmLl9jc29jayA9IHNlbGYuX3NvY2tldHBhaXIoKQorICAgICAgICBzZWxmLl9zc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5fY3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyArPSAxCisgICAgICAgIHNlbGYuY2FsbF9zb29uKHNlbGYuX2xvb3Bfc2VsZl9yZWFkaW5nKQorCisgICAgZGVmIF9sb29wX3NlbGZfcmVhZGluZyhzZWxmLCBmPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGYucmVzdWx0KCkgICMgbWF5IHJhaXNlCisgICAgICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IucmVjdihzZWxmLl9zc29jaywgNDA5NikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc2VsZl9yZWFkaW5nX2Z1dHVyZSA9IGYKKyAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHNlbGYuX2Nzb2NrLnNlbmQoYid4JykKKworICAgIGRlZiBfc3RhcnRfc2VydmluZyhzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2w9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBpZiBzc2w6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJb2NwRXZlbnRMb29wIGlzIGluY29tcGF0aWJsZSB3aXRoIFNTTC4nKQorCisgICAgICAgIGRlZiBsb29wKGY9Tm9uZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29ubiwgYWRkciA9IGYucmVzdWx0KCkKKyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgICAgICAgICAgY29ubiwgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT17J3BlZXJuYW1lJzogYWRkcn0sIHNlcnZlcj1zZXJ2ZXIpCisgICAgICAgICAgICAgICAgZiA9IHNlbGYuX3Byb2FjdG9yLmFjY2VwdChzb2NrKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgc29jay5maWxlbm8oKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignQWNjZXB0IGZhaWxlZCcpCisgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2FjY2VwdF9mdXR1cmVzW3NvY2suZmlsZW5vKCldID0gZgorICAgICAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2sobG9vcCkKKworICAgICAgICBzZWxmLmNhbGxfc29vbihsb29wKQorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgcGFzcyAgICAjIFhYWCBoYXJkIHdvcmsgY3VycmVudGx5IGRvbmUgaW4gcG9sbAorCisgICAgZGVmIF9zdG9wX3NlcnZpbmcoc2VsZiwgc29jayk6CisgICAgICAgIGZvciBmdXR1cmUgaW4gc2VsZi5fYWNjZXB0X2Z1dHVyZXMudmFsdWVzKCk6CisgICAgICAgICAgICBmdXR1cmUuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fcHJvYWN0b3IuX3N0b3Bfc2VydmluZyhzb2NrKQorICAgICAgICBzb2NrLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3Byb3RvY29scy5weSBiL0xpYi9hc3luY2lvL3Byb3RvY29scy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzRmM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vcHJvdG9jb2xzLnB5CkBAIC0wLDAgKzEsMTI5IEBACisiIiJBYnN0cmFjdCBQcm90b2NvbCBjbGFzcy4iIiIKKworX19hbGxfXyA9IFsnQmFzZVByb3RvY29sJywgJ1Byb3RvY29sJywgJ0RhdGFncmFtUHJvdG9jb2wnLAorICAgICAgICAgICAnU3VicHJvY2Vzc1Byb3RvY29sJ10KKworCitjbGFzcyBCYXNlUHJvdG9jb2w6CisgICAgIiIiQ29tbW9uIGJhc2UgY2xhc3MgZm9yIHByb3RvY29sIGludGVyZmFjZXMuCisKKyAgICBVc3VhbGx5IHVzZXIgaW1wbGVtZW50cyBwcm90b2NvbHMgdGhhdCBkZXJpdmVkIGZyb20gQmFzZVByb3RvY29sCisgICAgbGlrZSBQcm90b2NvbCBvciBQcm9jZXNzUHJvdG9jb2wuCisKKyAgICBUaGUgb25seSBjYXNlIHdoZW4gQmFzZVByb3RvY29sIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBkaXJlY3RseSBpcworICAgIHdyaXRlLW9ubHkgdHJhbnNwb3J0IGxpa2Ugd3JpdGUgcGlwZQorICAgICIiIgorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIGNvbm5lY3Rpb24gaXMgbWFkZS4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgdGhlIHRyYW5zcG9ydCByZXByZXNlbnRpbmcgdGhlIHBpcGUgY29ubmVjdGlvbi4KKyAgICAgICAgVG8gcmVjZWl2ZSBkYXRhLCB3YWl0IGZvciBkYXRhX3JlY2VpdmVkKCkgY2FsbHMuCisgICAgICAgIFdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLCBjb25uZWN0aW9uX2xvc3QoKSBpcyBjYWxsZWQuCisgICAgICAgICIiIgorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBsb3N0IG9yIGNsb3NlZC4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgYW4gZXhjZXB0aW9uIG9iamVjdCBvciBOb25lICh0aGUgbGF0dGVyCisgICAgICAgIG1lYW5pbmcgYSByZWd1bGFyIEVPRiBpcyByZWNlaXZlZCBvciB0aGUgY29ubmVjdGlvbiB3YXMKKyAgICAgICAgYWJvcnRlZCBvciBjbG9zZWQpLgorICAgICAgICAiIiIKKworICAgIGRlZiBwYXVzZV93cml0aW5nKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGdvZXMgb3ZlciB0aGUgaGlnaC13YXRlciBtYXJrLgorCisgICAgICAgIFBhdXNlIGFuZCByZXN1bWUgY2FsbHMgYXJlIHBhaXJlZCAtLSBwYXVzZV93cml0aW5nKCkgaXMgY2FsbGVkCisgICAgICAgIG9uY2Ugd2hlbiB0aGUgYnVmZmVyIGdvZXMgc3RyaWN0bHkgb3ZlciB0aGUgaGlnaC13YXRlciBtYXJrCisgICAgICAgIChldmVuIGlmIHN1YnNlcXVlbnQgd3JpdGVzIGluY3JlYXNlcyB0aGUgYnVmZmVyIHNpemUgZXZlbgorICAgICAgICBtb3JlKSwgYW5kIGV2ZW50dWFsbHkgcmVzdW1lX3dyaXRpbmcoKSBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZQorICAgICAgICBidWZmZXIgc2l6ZSByZWFjaGVzIHRoZSBsb3ctd2F0ZXIgbWFyay4KKworICAgICAgICBOb3RlIHRoYXQgaWYgdGhlIGJ1ZmZlciBzaXplIGVxdWFscyB0aGUgaGlnaC13YXRlciBtYXJrLAorICAgICAgICBwYXVzZV93cml0aW5nKCkgaXMgbm90IGNhbGxlZCAtLSBpdCBtdXN0IGdvIHN0cmljdGx5IG92ZXIuCisgICAgICAgIENvbnZlcnNlbHksIHJlc3VtZV93cml0aW5nKCkgaXMgY2FsbGVkIHdoZW4gdGhlIGJ1ZmZlciBzaXplIGlzCisgICAgICAgIGVxdWFsIG9yIGxvd2VyIHRoYW4gdGhlIGxvdy13YXRlciBtYXJrLiAgVGhlc2UgZW5kIGNvbmRpdGlvbnMKKyAgICAgICAgYXJlIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB0aGluZ3MgZ28gYXMgZXhwZWN0ZWQgd2hlbiBlaXRoZXIKKyAgICAgICAgbWFyayBpcyB6ZXJvLgorCisgICAgICAgIE5PVEU6IFRoaXMgaXMgdGhlIG9ubHkgUHJvdG9jb2wgY2FsbGJhY2sgdGhhdCBpcyBub3QgY2FsbGVkCisgICAgICAgIHRocm91Z2ggRXZlbnRMb29wLmNhbGxfc29vbigpIC0tIGlmIGl0IHdlcmUsIGl0IHdvdWxkIGhhdmUgbm8KKyAgICAgICAgZWZmZWN0IHdoZW4gaXQncyBtb3N0IG5lZWRlZCAod2hlbiB0aGUgYXBwIGtlZXBzIHdyaXRpbmcKKyAgICAgICAgd2l0aG91dCB5aWVsZGluZyB1bnRpbCBwYXVzZV93cml0aW5nKCkgaXMgY2FsbGVkKS4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgcmVzdW1lX3dyaXRpbmcoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSB0cmFuc3BvcnQncyBidWZmZXIgZHJhaW5zIGJlbG93IHRoZSBsb3ctd2F0ZXIgbWFyay4KKworICAgICAgICBTZWUgcGF1c2Vfd3JpdGluZygpIGZvciBkZXRhaWxzLgorICAgICAgICAiIiIKKworCitjbGFzcyBQcm90b2NvbChCYXNlUHJvdG9jb2wpOgorICAgICIiIkludGVyZmFjZSBmb3Igc3RyZWFtIHByb3RvY29sLgorCisgICAgVGhlIHVzZXIgc2hvdWxkIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gIFRoZXkgY2FuIGluaGVyaXQgZnJvbQorICAgIHRoaXMgY2xhc3MgYnV0IGRvbid0IG5lZWQgdG8uICBUaGUgaW1wbGVtZW50YXRpb25zIGhlcmUgZG8KKyAgICBub3RoaW5nICh0aGV5IGRvbid0IHJhaXNlIGV4Y2VwdGlvbnMpLgorCisgICAgV2hlbiB0aGUgdXNlciB3YW50cyB0byByZXF1ZXN0cyBhIHRyYW5zcG9ydCwgdGhleSBwYXNzIGEgcHJvdG9jb2wKKyAgICBmYWN0b3J5IHRvIGEgdXRpbGl0eSBmdW5jdGlvbiAoZS5nLiwgRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uKCkpLgorCisgICAgV2hlbiB0aGUgY29ubmVjdGlvbiBpcyBtYWRlIHN1Y2Nlc3NmdWxseSwgY29ubmVjdGlvbl9tYWRlKCkgaXMKKyAgICBjYWxsZWQgd2l0aCBhIHN1aXRhYmxlIHRyYW5zcG9ydCBvYmplY3QuICBUaGVuIGRhdGFfcmVjZWl2ZWQoKQorICAgIHdpbGwgYmUgY2FsbGVkIDAgb3IgbW9yZSB0aW1lcyB3aXRoIGRhdGEgKGJ5dGVzKSByZWNlaXZlZCBmcm9tIHRoZQorICAgIHRyYW5zcG9ydDsgZmluYWxseSwgY29ubmVjdGlvbl9sb3N0KCkgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlCisgICAgd2l0aCBlaXRoZXIgYW4gZXhjZXB0aW9uIG9iamVjdCBvciBOb25lIGFzIGFuIGFyZ3VtZW50LgorCisgICAgU3RhdGUgbWFjaGluZSBvZiBjYWxsczoKKworICAgICAgc3RhcnQgLT4gQ00gWy0+IERSKl0gWy0+IEVSP10gLT4gQ0wgLT4gZW5kCisgICAgIiIiCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gc29tZSBkYXRhIGlzIHJlY2VpdmVkLgorCisgICAgICAgIFRoZSBhcmd1bWVudCBpcyBhIGJ5dGVzIG9iamVjdC4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgb3RoZXIgZW5kIGNhbGxzIHdyaXRlX2VvZigpIG9yIGVxdWl2YWxlbnQuCisKKyAgICAgICAgSWYgdGhpcyByZXR1cm5zIGEgZmFsc2UgdmFsdWUgKGluY2x1ZGluZyBOb25lKSwgdGhlIHRyYW5zcG9ydAorICAgICAgICB3aWxsIGNsb3NlIGl0c2VsZi4gIElmIGl0IHJldHVybnMgYSB0cnVlIHZhbHVlLCBjbG9zaW5nIHRoZQorICAgICAgICB0cmFuc3BvcnQgaXMgdXAgdG8gdGhlIHByb3RvY29sLgorICAgICAgICAiIiIKKworCitjbGFzcyBEYXRhZ3JhbVByb3RvY29sKEJhc2VQcm90b2NvbCk6CisgICAgIiIiSW50ZXJmYWNlIGZvciBkYXRhZ3JhbSBwcm90b2NvbC4iIiIKKworICAgIGRlZiBkYXRhZ3JhbV9yZWNlaXZlZChzZWxmLCBkYXRhLCBhZGRyKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gc29tZSBkYXRhZ3JhbSBpcyByZWNlaXZlZC4iIiIKKworICAgIGRlZiBlcnJvcl9yZWNlaXZlZChzZWxmLCBleGMpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIHNlbmQgb3IgcmVjZWl2ZSBvcGVyYXRpb24gcmFpc2VzIGFuIE9TRXJyb3IuCisKKyAgICAgICAgKE90aGVyIHRoYW4gQmxvY2tpbmdJT0Vycm9yIG9yIEludGVycnVwdGVkRXJyb3IuKQorICAgICAgICAiIiIKKworCitjbGFzcyBTdWJwcm9jZXNzUHJvdG9jb2woQmFzZVByb3RvY29sKToKKyAgICAiIiJJbnRlcmZhY2UgZm9yIHByb3RvY29sIGZvciBzdWJwcm9jZXNzIGNhbGxzLiIiIgorCisgICAgZGVmIHBpcGVfZGF0YV9yZWNlaXZlZChzZWxmLCBmZCwgZGF0YSk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBzdWJwcm9jZXNzIHdyaXRlcyBkYXRhIGludG8gc3Rkb3V0L3N0ZGVyciBwaXBlLgorCisgICAgICAgIGZkIGlzIGludCBmaWxlIGRhc2NyaXB0b3IuCisgICAgICAgIGRhdGEgaXMgYnl0ZXMgb2JqZWN0LgorICAgICAgICAiIiIKKworICAgIGRlZiBwaXBlX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBmZCwgZXhjKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGlsZCBwcm9jZXNzIGlzCisgICAgICAgIGNsb3NlZC4KKworICAgICAgICBmZCBpcyB0aGUgaW50IGZpbGUgZGVzY3JpcHRvciB0aGF0IHdhcyBjbG9zZWQuCisgICAgICAgICIiIgorCisgICAgZGVmIHByb2Nlc3NfZXhpdGVkKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBzdWJwcm9jZXNzIGhhcyBleGl0ZWQuIiIiCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9xdWV1ZXMucHkgYi9MaWIvYXN5bmNpby9xdWV1ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4M2RiMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3F1ZXVlcy5weQpAQCAtMCwwICsxLDI4OCBAQAorIiIiUXVldWVzIiIiCisKK19fYWxsX18gPSBbJ1F1ZXVlJywgJ1ByaW9yaXR5UXVldWUnLCAnTGlmb1F1ZXVlJywgJ0pvaW5hYmxlUXVldWUnLAorICAgICAgICAgICAnUXVldWVGdWxsJywgJ1F1ZXVlRW1wdHknXQorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBoZWFwcQorCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IGxvY2tzCitmcm9tIC50YXNrcyBpbXBvcnQgY29yb3V0aW5lCisKKworY2xhc3MgUXVldWVFbXB0eShFeGNlcHRpb24pOgorICAgICdFeGNlcHRpb24gcmFpc2VkIGJ5IFF1ZXVlLmdldChibG9jaz0wKS9nZXRfbm93YWl0KCkuJworICAgIHBhc3MKKworCitjbGFzcyBRdWV1ZUZ1bGwoRXhjZXB0aW9uKToKKyAgICAnRXhjZXB0aW9uIHJhaXNlZCBieSBRdWV1ZS5wdXQoYmxvY2s9MCkvcHV0X25vd2FpdCgpLicKKyAgICBwYXNzCisKKworY2xhc3MgUXVldWU6CisgICAgIiIiQSBxdWV1ZSwgdXNlZnVsIGZvciBjb29yZGluYXRpbmcgcHJvZHVjZXIgYW5kIGNvbnN1bWVyIGNvcm91dGluZXMuCisKKyAgICBJZiBtYXhzaXplIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCB0aGUgcXVldWUgc2l6ZSBpcyBpbmZpbml0ZS4gSWYgaXQKKyAgICBpcyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiAwLCB0aGVuICJ5aWVsZCBmcm9tIHB1dCgpIiB3aWxsIGJsb2NrIHdoZW4gdGhlCisgICAgcXVldWUgcmVhY2hlcyBtYXhzaXplLCB1bnRpbCBhbiBpdGVtIGlzIHJlbW92ZWQgYnkgZ2V0KCkuCisKKyAgICBVbmxpa2UgdGhlIHN0YW5kYXJkIGxpYnJhcnkgUXVldWUsIHlvdSBjYW4gcmVsaWFibHkga25vdyB0aGlzIFF1ZXVlJ3Mgc2l6ZQorICAgIHdpdGggcXNpemUoKSwgc2luY2UgeW91ciBzaW5nbGUtdGhyZWFkZWQgYXN5bmNpbyBhcHBsaWNhdGlvbiB3b24ndCBiZQorICAgIGludGVycnVwdGVkIGJldHdlZW4gY2FsbGluZyBxc2l6ZSgpIGFuZCBkb2luZyBhbiBvcGVyYXRpb24gb24gdGhlIFF1ZXVlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9tYXhzaXplID0gbWF4c2l6ZQorCisgICAgICAgICMgRnV0dXJlcy4KKyAgICAgICAgc2VsZi5fZ2V0dGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgIyBQYWlycyBvZiAoaXRlbSwgRnV0dXJlKS4KKyAgICAgICAgc2VsZi5fcHV0dGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5faW5pdChtYXhzaXplKQorCisgICAgZGVmIF9pbml0KHNlbGYsIG1heHNpemUpOgorICAgICAgICBzZWxmLl9xdWV1ZSA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKworICAgIGRlZiBfZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcXVldWUucG9wbGVmdCgpCisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtKToKKyAgICAgICAgc2VsZi5fcXVldWUuYXBwZW5kKGl0ZW0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPHt9IGF0IHs6I3h9IHt9PicuZm9ybWF0KAorICAgICAgICAgICAgdHlwZShzZWxmKS5fX25hbWVfXywgaWQoc2VsZiksIHNlbGYuX2Zvcm1hdCgpKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPHt9IHt9PicuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sIHNlbGYuX2Zvcm1hdCgpKQorCisgICAgZGVmIF9mb3JtYXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9ICdtYXhzaXplPXshcn0nLmZvcm1hdChzZWxmLl9tYXhzaXplKQorICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfcXVldWUnLCBOb25lKToKKyAgICAgICAgICAgIHJlc3VsdCArPSAnIF9xdWV1ZT17IXJ9Jy5mb3JtYXQobGlzdChzZWxmLl9xdWV1ZSkpCisgICAgICAgIGlmIHNlbGYuX2dldHRlcnM6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfZ2V0dGVyc1t7fV0nLmZvcm1hdChsZW4oc2VsZi5fZ2V0dGVycykpCisgICAgICAgIGlmIHNlbGYuX3B1dHRlcnM6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfcHV0dGVyc1t7fV0nLmZvcm1hdChsZW4oc2VsZi5fcHV0dGVycykpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfY29uc3VtZV9kb25lX2dldHRlcnMoc2VsZik6CisgICAgICAgICMgRGVsZXRlIHdhaXRlcnMgYXQgdGhlIGhlYWQgb2YgdGhlIGdldCgpIHF1ZXVlIHdobyd2ZSB0aW1lZCBvdXQuCisgICAgICAgIHdoaWxlIHNlbGYuX2dldHRlcnMgYW5kIHNlbGYuX2dldHRlcnNbMF0uZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fZ2V0dGVycy5wb3BsZWZ0KCkKKworICAgIGRlZiBfY29uc3VtZV9kb25lX3B1dHRlcnMoc2VsZik6CisgICAgICAgICMgRGVsZXRlIHdhaXRlcnMgYXQgdGhlIGhlYWQgb2YgdGhlIHB1dCgpIHF1ZXVlIHdobyd2ZSB0aW1lZCBvdXQuCisgICAgICAgIHdoaWxlIHNlbGYuX3B1dHRlcnMgYW5kIHNlbGYuX3B1dHRlcnNbMF1bMV0uZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fcHV0dGVycy5wb3BsZWZ0KCkKKworICAgIGRlZiBxc2l6ZShzZWxmKToKKyAgICAgICAgIiIiTnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBxdWV1ZS4iIiIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9xdWV1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtYXhzaXplKHNlbGYpOgorICAgICAgICAiIiJOdW1iZXIgb2YgaXRlbXMgYWxsb3dlZCBpbiB0aGUgcXVldWUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tYXhzaXplCisKKyAgICBkZWYgZW1wdHkoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX3F1ZXVlCisKKyAgICBkZWYgZnVsbChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlcmUgYXJlIG1heHNpemUgaXRlbXMgaW4gdGhlIHF1ZXVlLgorCisgICAgICAgIE5vdGU6IGlmIHRoZSBRdWV1ZSB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBtYXhzaXplPTAgKHRoZSBkZWZhdWx0KSwKKyAgICAgICAgdGhlbiBmdWxsKCkgaXMgbmV2ZXIgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX21heHNpemUgPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucXNpemUoKSA9PSBzZWxmLl9tYXhzaXplCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHB1dChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUuCisKKyAgICAgICAgSWYgeW91IHlpZWxkIGZyb20gcHV0KCksIHdhaXQgdW50aWwgYSBmcmVlIHNsb3QgaXMgYXZhaWxhYmxlCisgICAgICAgIGJlZm9yZSBhZGRpbmcgaXRlbS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NvbnN1bWVfZG9uZV9nZXR0ZXJzKCkKKyAgICAgICAgaWYgc2VsZi5fZ2V0dGVyczoKKyAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcXVldWUsICgKKyAgICAgICAgICAgICAgICAncXVldWUgbm9uLWVtcHR5LCB3aHkgYXJlIGdldHRlcnMgd2FpdGluZz8nKQorCisgICAgICAgICAgICBnZXR0ZXIgPSBzZWxmLl9nZXR0ZXJzLnBvcGxlZnQoKQorCisgICAgICAgICAgICAjIFVzZSBfcHV0IGFuZCBfZ2V0IGluc3RlYWQgb2YgcGFzc2luZyBpdGVtIHN0cmFpZ2h0IHRvIGdldHRlciwgaW4KKyAgICAgICAgICAgICMgY2FzZSBhIHN1YmNsYXNzIGhhcyBsb2dpYyB0aGF0IG11c3QgcnVuIChlLmcuIEpvaW5hYmxlUXVldWUpLgorICAgICAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisgICAgICAgICAgICBnZXR0ZXIuc2V0X3Jlc3VsdChzZWxmLl9nZXQoKSkKKworICAgICAgICBlbGlmIHNlbGYuX21heHNpemUgPiAwIGFuZCBzZWxmLl9tYXhzaXplID09IHNlbGYucXNpemUoKToKKyAgICAgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKworICAgICAgICAgICAgc2VsZi5fcHV0dGVycy5hcHBlbmQoKGl0ZW0sIHdhaXRlcikpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKworICAgIGRlZiBwdXRfbm93YWl0KHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiJQdXQgYW4gaXRlbSBpbnRvIHRoZSBxdWV1ZSB3aXRob3V0IGJsb2NraW5nLgorCisgICAgICAgIElmIG5vIGZyZWUgc2xvdCBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIHJhaXNlIFF1ZXVlRnVsbC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NvbnN1bWVfZG9uZV9nZXR0ZXJzKCkKKyAgICAgICAgaWYgc2VsZi5fZ2V0dGVyczoKKyAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcXVldWUsICgKKyAgICAgICAgICAgICAgICAncXVldWUgbm9uLWVtcHR5LCB3aHkgYXJlIGdldHRlcnMgd2FpdGluZz8nKQorCisgICAgICAgICAgICBnZXR0ZXIgPSBzZWxmLl9nZXR0ZXJzLnBvcGxlZnQoKQorCisgICAgICAgICAgICAjIFVzZSBfcHV0IGFuZCBfZ2V0IGluc3RlYWQgb2YgcGFzc2luZyBpdGVtIHN0cmFpZ2h0IHRvIGdldHRlciwgaW4KKyAgICAgICAgICAgICMgY2FzZSBhIHN1YmNsYXNzIGhhcyBsb2dpYyB0aGF0IG11c3QgcnVuIChlLmcuIEpvaW5hYmxlUXVldWUpLgorICAgICAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisgICAgICAgICAgICBnZXR0ZXIuc2V0X3Jlc3VsdChzZWxmLl9nZXQoKSkKKworICAgICAgICBlbGlmIHNlbGYuX21heHNpemUgPiAwIGFuZCBzZWxmLl9tYXhzaXplID09IHNlbGYucXNpemUoKToKKyAgICAgICAgICAgIHJhaXNlIFF1ZXVlRnVsbAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgIiIiUmVtb3ZlIGFuZCByZXR1cm4gYW4gaXRlbSBmcm9tIHRoZSBxdWV1ZS4KKworICAgICAgICBJZiB5b3UgeWllbGQgZnJvbSBnZXQoKSwgd2FpdCB1bnRpbCBhIGl0ZW0gaXMgYXZhaWxhYmxlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY29uc3VtZV9kb25lX3B1dHRlcnMoKQorICAgICAgICBpZiBzZWxmLl9wdXR0ZXJzOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuZnVsbCgpLCAncXVldWUgbm90IGZ1bGwsIHdoeSBhcmUgcHV0dGVycyB3YWl0aW5nPycKKyAgICAgICAgICAgIGl0ZW0sIHB1dHRlciA9IHNlbGYuX3B1dHRlcnMucG9wbGVmdCgpCisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKworICAgICAgICAgICAgIyBXaGVuIGEgZ2V0dGVyIHJ1bnMgYW5kIGZyZWVzIHVwIGEgc2xvdCBzbyB0aGlzIHB1dHRlciBjYW4KKyAgICAgICAgICAgICMgcnVuLCB3ZSBuZWVkIHRvIGRlZmVyIHRoZSBwdXQgZm9yIGEgdGljayB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgIyBnZXR0ZXJzIGFuZCBwdXR0ZXJzIGFsdGVybmF0ZSBwZXJmZWN0bHkuIFNlZQorICAgICAgICAgICAgIyBDaGFubmVsVGVzdC50ZXN0X3dhaXQuCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihwdXR0ZXIuc2V0X3Jlc3VsdCwgTm9uZSkKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldCgpCisKKyAgICAgICAgZWxpZiBzZWxmLnFzaXplKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKworICAgICAgICAgICAgc2VsZi5fZ2V0dGVycy5hcHBlbmQod2FpdGVyKQorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHdhaXRlcikKKworICAgIGRlZiBnZXRfbm93YWl0KHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLgorCisgICAgICAgIFJldHVybiBhbiBpdGVtIGlmIG9uZSBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIGVsc2UgcmFpc2UgUXVldWVFbXB0eS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NvbnN1bWVfZG9uZV9wdXR0ZXJzKCkKKyAgICAgICAgaWYgc2VsZi5fcHV0dGVyczoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmZ1bGwoKSwgJ3F1ZXVlIG5vdCBmdWxsLCB3aHkgYXJlIHB1dHRlcnMgd2FpdGluZz8nCisgICAgICAgICAgICBpdGVtLCBwdXR0ZXIgPSBzZWxmLl9wdXR0ZXJzLnBvcGxlZnQoKQorICAgICAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisgICAgICAgICAgICAjIFdha2UgcHV0dGVyIG9uIG5leHQgdGljay4KKyAgICAgICAgICAgIHB1dHRlci5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXQoKQorCisgICAgICAgIGVsaWYgc2VsZi5xc2l6ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBRdWV1ZUVtcHR5CisKKworY2xhc3MgUHJpb3JpdHlRdWV1ZShRdWV1ZSk6CisgICAgIiIiQSBzdWJjbGFzcyBvZiBRdWV1ZTsgcmV0cmlldmVzIGVudHJpZXMgaW4gcHJpb3JpdHkgb3JkZXIgKGxvd2VzdCBmaXJzdCkuCisKKyAgICBFbnRyaWVzIGFyZSB0eXBpY2FsbHkgdHVwbGVzIG9mIHRoZSBmb3JtOiAocHJpb3JpdHkgbnVtYmVyLCBkYXRhKS4KKyAgICAiIiIKKworICAgIGRlZiBfaW5pdChzZWxmLCBtYXhzaXplKToKKyAgICAgICAgc2VsZi5fcXVldWUgPSBbXQorCisgICAgZGVmIF9wdXQoc2VsZiwgaXRlbSwgaGVhcHB1c2g9aGVhcHEuaGVhcHB1c2gpOgorICAgICAgICBoZWFwcHVzaChzZWxmLl9xdWV1ZSwgaXRlbSkKKworICAgIGRlZiBfZ2V0KHNlbGYsIGhlYXBwb3A9aGVhcHEuaGVhcHBvcCk6CisgICAgICAgIHJldHVybiBoZWFwcG9wKHNlbGYuX3F1ZXVlKQorCisKK2NsYXNzIExpZm9RdWV1ZShRdWV1ZSk6CisgICAgIiIiQSBzdWJjbGFzcyBvZiBRdWV1ZSB0aGF0IHJldHJpZXZlcyBtb3N0IHJlY2VudGx5IGFkZGVkIGVudHJpZXMgZmlyc3QuIiIiCisKKyAgICBkZWYgX2luaXQoc2VsZiwgbWF4c2l6ZSk6CisgICAgICAgIHNlbGYuX3F1ZXVlID0gW10KKworICAgIGRlZiBfcHV0KHNlbGYsIGl0ZW0pOgorICAgICAgICBzZWxmLl9xdWV1ZS5hcHBlbmQoaXRlbSkKKworICAgIGRlZiBfZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcXVldWUucG9wKCkKKworCitjbGFzcyBKb2luYWJsZVF1ZXVlKFF1ZXVlKToKKyAgICAiIiJBIHN1YmNsYXNzIG9mIFF1ZXVlIHdpdGggdGFza19kb25lKCkgYW5kIGpvaW4oKSBtZXRob2RzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhtYXhzaXplPW1heHNpemUsIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9IDAKKyAgICAgICAgc2VsZi5fZmluaXNoZWQgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX2ZpbmlzaGVkLnNldCgpCisKKyAgICBkZWYgX2Zvcm1hdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gUXVldWUuX2Zvcm1hdChzZWxmKQorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgdGFza3M9e30nLmZvcm1hdChzZWxmLl91bmZpbmlzaGVkX3Rhc2tzKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtKToKKyAgICAgICAgc3VwZXIoKS5fcHV0KGl0ZW0pCisgICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgKz0gMQorICAgICAgICBzZWxmLl9maW5pc2hlZC5jbGVhcigpCisKKyAgICBkZWYgdGFza19kb25lKHNlbGYpOgorICAgICAgICAiIiJJbmRpY2F0ZSB0aGF0IGEgZm9ybWVybHkgZW5xdWV1ZWQgdGFzayBpcyBjb21wbGV0ZS4KKworICAgICAgICBVc2VkIGJ5IHF1ZXVlIGNvbnN1bWVycy4gRm9yIGVhY2ggZ2V0KCkgdXNlZCB0byBmZXRjaCBhIHRhc2ssCisgICAgICAgIGEgc3Vic2VxdWVudCBjYWxsIHRvIHRhc2tfZG9uZSgpIHRlbGxzIHRoZSBxdWV1ZSB0aGF0IHRoZSBwcm9jZXNzaW5nCisgICAgICAgIG9uIHRoZSB0YXNrIGlzIGNvbXBsZXRlLgorCisgICAgICAgIElmIGEgam9pbigpIGlzIGN1cnJlbnRseSBibG9ja2luZywgaXQgd2lsbCByZXN1bWUgd2hlbiBhbGwgaXRlbXMgaGF2ZQorICAgICAgICBiZWVuIHByb2Nlc3NlZCAobWVhbmluZyB0aGF0IGEgdGFza19kb25lKCkgY2FsbCB3YXMgcmVjZWl2ZWQgZm9yIGV2ZXJ5CisgICAgICAgIGl0ZW0gdGhhdCBoYWQgYmVlbiBwdXQoKSBpbnRvIHRoZSBxdWV1ZSkuCisKKyAgICAgICAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgY2FsbGVkIG1vcmUgdGltZXMgdGhhbiB0aGVyZSB3ZXJlIGl0ZW1zIHBsYWNlZCBpbgorICAgICAgICB0aGUgcXVldWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzIDw9IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0YXNrX2RvbmUoKSBjYWxsZWQgdG9vIG1hbnkgdGltZXMnKQorICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzIC09IDEKKyAgICAgICAgaWYgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9PSAwOgorICAgICAgICAgICAgc2VsZi5fZmluaXNoZWQuc2V0KCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgam9pbihzZWxmKToKKyAgICAgICAgIiIiQmxvY2sgdW50aWwgYWxsIGl0ZW1zIGluIHRoZSBxdWV1ZSBoYXZlIGJlZW4gZ290dGVuIGFuZCBwcm9jZXNzZWQuCisKKyAgICAgICAgVGhlIGNvdW50IG9mIHVuZmluaXNoZWQgdGFza3MgZ29lcyB1cCB3aGVuZXZlciBhbiBpdGVtIGlzIGFkZGVkIHRvIHRoZQorICAgICAgICBxdWV1ZS4gVGhlIGNvdW50IGdvZXMgZG93biB3aGVuZXZlciBhIGNvbnN1bWVyIHRocmVhZCBjYWxscyB0YXNrX2RvbmUoKQorICAgICAgICB0byBpbmRpY2F0ZSB0aGF0IHRoZSBpdGVtIHdhcyByZXRyaWV2ZWQgYW5kIGFsbCB3b3JrIG9uIGl0IGlzIGNvbXBsZXRlLgorICAgICAgICBXaGVuIHRoZSBjb3VudCBvZiB1bmZpbmlzaGVkIHRhc2tzIGRyb3BzIHRvIHplcm8sIGpvaW4oKSB1bmJsb2Nrcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPiAwOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5pc2hlZC53YWl0KCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3NlbGVjdG9yX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3NlbGVjdG9yX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGIwMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vc2VsZWN0b3JfZXZlbnRzLnB5CkBAIC0wLDAgKzEsODg3IEBACisiIiJFdmVudCBsb29wIHVzaW5nIGEgc2VsZWN0b3IgYW5kIHJlbGF0ZWQgY2xhc3Nlcy4KKworQSBzZWxlY3RvciBpcyBhICJub3RpZnktd2hlbi1yZWFkeSIgbXVsdGlwbGV4ZXIuICBGb3IgYSBzdWJjbGFzcyB3aGljaAorYWxzbyBpbmNsdWRlcyBzdXBwb3J0IGZvciBzaWduYWwgaGFuZGxpbmcsIHNlZSB0aGUgdW5peF9ldmVudHMgc3ViLW1vZHVsZS4KKyIiIgorCitfX2FsbF9fID0gWydCYXNlU2VsZWN0b3JFdmVudExvb3AnXQorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBlcnJubworaW1wb3J0IHNvY2tldAordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIHNzbCA9IE5vbmUKKworZnJvbSAuIGltcG9ydCBiYXNlX2V2ZW50cworZnJvbSAuIGltcG9ydCBjb25zdGFudHMKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgc2VsZWN0b3JzCitmcm9tIC4gaW1wb3J0IHRyYW5zcG9ydHMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworY2xhc3MgQmFzZVNlbGVjdG9yRXZlbnRMb29wKGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3ApOgorICAgICIiIlNlbGVjdG9yIGV2ZW50IGxvb3AuCisKKyAgICBTZWUgZXZlbnRzLkV2ZW50TG9vcCBmb3IgQVBJIHNwZWNpZmljYXRpb24uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VsZWN0b3I9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorCisgICAgICAgIGlmIHNlbGVjdG9yIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IoKQorICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIHNlbGVjdG9yOiAlcycsIHNlbGVjdG9yLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgc2VsZi5fc2VsZWN0b3IgPSBzZWxlY3RvcgorICAgICAgICBzZWxmLl9tYWtlX3NlbGZfcGlwZSgpCisKKyAgICBkZWYgX21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICByZXR1cm4gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEsIHNlcnZlcikKKworICAgIGRlZiBfbWFrZV9zc2xfdHJhbnNwb3J0KHNlbGYsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9TZWxlY3RvclNzbFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICBzZXJ2ZXJfc2lkZSwgc2VydmVyX2hvc3RuYW1lLCBleHRyYSwgc2VydmVyKQorCisgICAgZGVmIF9tYWtlX2RhdGFncmFtX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgYWRkcmVzcywgZXh0cmEpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3NlbGVjdG9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY2xvc2Vfc2VsZl9waXBlKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gTm9uZQorICAgICAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoc2VsZi5fc3NvY2suZmlsZW5vKCkpCisgICAgICAgIHNlbGYuX3Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fc3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fY3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyAtPSAxCisKKyAgICBkZWYgX21ha2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICAjIEEgc2VsZi1zb2NrZXQsIHJlYWxseS4gOi0pCisgICAgICAgIHNlbGYuX3Nzb2NrLCBzZWxmLl9jc29jayA9IHNlbGYuX3NvY2tldHBhaXIoKQorICAgICAgICBzZWxmLl9zc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5fY3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyArPSAxCisgICAgICAgIHNlbGYuYWRkX3JlYWRlcihzZWxmLl9zc29jay5maWxlbm8oKSwgc2VsZi5fcmVhZF9mcm9tX3NlbGYpCisKKyAgICBkZWYgX3JlYWRfZnJvbV9zZWxmKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zc29jay5yZWN2KDEpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fY3NvY2suc2VuZChiJ3gnKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX3N0YXJ0X3NlcnZpbmcoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dD1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuYWRkX3JlYWRlcihzb2NrLmZpbGVubygpLCBzZWxmLl9hY2NlcHRfY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssIHNzbGNvbnRleHQsIHNlcnZlcikKKworICAgIGRlZiBfYWNjZXB0X2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQ9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQorICAgICAgICAgICAgY29ubi5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IsIENvbm5lY3Rpb25BYm9ydGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcyAgIyBGYWxzZSBhbGFybS4KKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgIyBUaGVyZSdzIG5vd2hlcmUgdG8gc2VuZCB0aGUgZXJyb3IsIHNvIGp1c3QgbG9nIGl0LgorICAgICAgICAgICAgIyBUT0RPOiBTb21lb25lIHdpbGwgd2FudCBhbiBlcnJvciBoYW5kbGVyIGZvciB0aGlzLgorICAgICAgICAgICAgaWYgZXhjLmVycm5vIGluIChlcnJuby5FTUZJTEUsIGVycm5vLkVORklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PQlVGUywgZXJybm8uRU5PTUVNKToKKyAgICAgICAgICAgICAgICAjIFNvbWUgcGxhdGZvcm1zIChlLmcuIExpbnV4IGtlZXAgcmVwb3J0aW5nIHRoZSBGRCBhcworICAgICAgICAgICAgICAgICMgcmVhZHksIHNvIHdlIHJlbW92ZSB0aGUgcmVhZCBoYW5kbGVyIHRlbXBvcmFyaWx5LgorICAgICAgICAgICAgICAgICMgV2UnbGwgdHJ5IGFnYWluIGluIGEgd2hpbGUuCisgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignQWNjZXB0IG91dCBvZiBzeXN0ZW0gcmVzb3VyY2UgKCVzKScsIGV4YykKKyAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoc29jay5maWxlbm8oKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxfbGF0ZXIoY29uc3RhbnRzLkFDQ0VQVF9SRVRSWV9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywgc3NsY29udGV4dCwgc2VydmVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSAgIyBUaGUgZXZlbnQgbG9vcCB3aWxsIGNhdGNoLCBsb2cgYW5kIGlnbm9yZSBpdC4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNzbGNvbnRleHQ6CisgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9zc2xfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgICAgICBjb25uLCBwcm90b2NvbF9mYWN0b3J5KCksIHNzbGNvbnRleHQsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUsIGV4dHJhPXsncGVlcm5hbWUnOiBhZGRyfSwgc2VydmVyPXNlcnZlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgICAgICBjb25uLCBwcm90b2NvbF9mYWN0b3J5KCksIGV4dHJhPXsncGVlcm5hbWUnOiBhZGRyfSwKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyPXNlcnZlcikKKyAgICAgICAgIyBJdCdzIG5vdyB1cCB0byB0aGUgcHJvdG9jb2wgdG8gaGFuZGxlIHRoZSBjb25uZWN0aW9uLgorCisgICAgZGVmIGFkZF9yZWFkZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFkZCBhIHJlYWRlciBjYWxsYmFjay4iIiIKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IucmVnaXN0ZXIoZmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZSwgTm9uZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLm1vZGlmeShmZCwgbWFzayB8IHNlbGVjdG9ycy5FVkVOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGUsIHdyaXRlcikpCisgICAgICAgICAgICBpZiByZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgICIiIlJlbW92ZSBhIHJlYWRlciBjYWxsYmFjay4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgIG1hc2sgJj0gfnNlbGVjdG9ycy5FVkVOVF9SRUFECisgICAgICAgICAgICBpZiBub3QgbWFzazoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci51bnJlZ2lzdGVyKGZkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2ssIChOb25lLCB3cml0ZXIpKQorCisgICAgICAgICAgICBpZiByZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYWRkX3dyaXRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQWRkIGEgd3JpdGVyIGNhbGxiYWNrLi4iIiIKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IucmVnaXN0ZXIoZmQsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCBoYW5kbGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFzaywgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5ldmVudHMsIGtleS5kYXRhCisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2sgfCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWRlciwgaGFuZGxlKSkKKyAgICAgICAgICAgIGlmIHdyaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB3cml0ZXIuY2FuY2VsKCkKKworICAgIGRlZiByZW1vdmVfd3JpdGVyKHNlbGYsIGZkKToKKyAgICAgICAgIiIiUmVtb3ZlIGEgd3JpdGVyIGNhbGxiYWNrLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9zZWxlY3Rvci5nZXRfa2V5KGZkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hc2ssIChyZWFkZXIsIHdyaXRlcikgPSBrZXkuZXZlbnRzLCBrZXkuZGF0YQorICAgICAgICAgICAgIyBSZW1vdmUgYm90aCB3cml0ZXIgYW5kIGNvbm5lY3Rvci4KKyAgICAgICAgICAgIG1hc2sgJj0gfnNlbGVjdG9ycy5FVkVOVF9XUklURQorICAgICAgICAgICAgaWYgbm90IG1hc2s6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IudW5yZWdpc3RlcihmZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IubW9kaWZ5KGZkLCBtYXNrLCAocmVhZGVyLCBOb25lKSkKKworICAgICAgICAgICAgaWYgd3JpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHdyaXRlci5jYW5jZWwoKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHNvY2tfcmVjdihzZWxmLCBzb2NrLCBuKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgc2VsZi5fc29ja19yZWN2KGZ1dCwgRmFsc2UsIHNvY2ssIG4pCisgICAgICAgIHJldHVybiBmdXQKKworICAgIGRlZiBfc29ja19yZWN2KHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jaywgbik6CisgICAgICAgICMgX3NvY2tfcmVjdigpIGNhbiBhZGQgaXRzZWxmIGFzIGFuIEkvTyBjYWxsYmFjayBpZiB0aGUgb3BlcmF0aW9uIGNhbid0CisgICAgICAgICMgYmUgZG9uZSBpbW1lZGlhdGx5LiBEb24ndCB1c2UgaXQgZGlyZWN0bHksIGNhbGwgc29ja19yZWN2KCkuCisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICBpZiByZWdpc3RlcmVkOgorICAgICAgICAgICAgIyBSZW1vdmUgdGhlIGNhbGxiYWNrIGVhcmx5LiAgSXQgc2hvdWxkIGJlIHJhcmUgdGhhdCB0aGUKKyAgICAgICAgICAgICMgc2VsZWN0b3Igc2F5cyB0aGUgZmQgaXMgcmVhZHkgYnV0IHRoZSBjYWxsIHN0aWxsIHJldHVybnMKKyAgICAgICAgICAgICMgRUFHQUlOLCBhbmQgSSBhbSB3aWxsaW5nIHRvIHRha2UgYSBoaXQgaW4gdGhhdCBjYXNlIGluCisgICAgICAgICAgICAjIG9yZGVyIHRvIHNpbXBsaWZ5IHRoZSBjb21tb24gY2FzZS4KKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihmZCkKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzb2NrLnJlY3YobikKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hZGRfcmVhZGVyKGZkLCBzZWxmLl9zb2NrX3JlY3YsIGZ1dCwgVHJ1ZSwgc29jaywgbikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChkYXRhKQorCisgICAgZGVmIHNvY2tfc2VuZGFsbChzZWxmLCBzb2NrLCBkYXRhKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIHNlbGYuX3NvY2tfc2VuZGFsbChmdXQsIEZhbHNlLCBzb2NrLCBkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF9zb2NrX3NlbmRhbGwoc2VsZiwgZnV0LCByZWdpc3RlcmVkLCBzb2NrLCBkYXRhKToKKyAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisKKyAgICAgICAgaWYgcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcihmZCkKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbiA9IHNvY2suc2VuZChkYXRhKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBuID0gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG4gPT0gbGVuKGRhdGEpOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG46CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisgICAgICAgICAgICBzZWxmLmFkZF93cml0ZXIoZmQsIHNlbGYuX3NvY2tfc2VuZGFsbCwgZnV0LCBUcnVlLCBzb2NrLCBkYXRhKQorCisgICAgZGVmIHNvY2tfY29ubmVjdChzZWxmLCBzb2NrLCBhZGRyZXNzKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc29jaywgYWRkcmVzcykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc29ja19jb25uZWN0KGZ1dCwgRmFsc2UsIHNvY2ssIGFkZHJlc3MpCisgICAgICAgIHJldHVybiBmdXQKKworICAgIGRlZiBfc29ja19jb25uZWN0KHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jaywgYWRkcmVzcyk6CisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICBpZiByZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICAgICAgIyBGaXJzdCB0aW1lIGFyb3VuZC4KKyAgICAgICAgICAgICAgICBzb2NrLmNvbm5lY3QoYWRkcmVzcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyID0gc29jay5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fRVJST1IpCisgICAgICAgICAgICAgICAgaWYgZXJyICE9IDA6CisgICAgICAgICAgICAgICAgICAgICMgSnVtcCB0byB0aGUgZXhjZXB0IGNsYXVzZSBiZWxvdy4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIsICdDb25uZWN0IGNhbGwgZmFpbGVkICVzJyAlIChhZGRyZXNzLCkpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYWRkX3dyaXRlcihmZCwgc2VsZi5fc29ja19jb25uZWN0LCBmdXQsIFRydWUsIHNvY2ssIGFkZHJlc3MpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoTm9uZSkKKworICAgIGRlZiBzb2NrX2FjY2VwdChzZWxmLCBzb2NrKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgc2VsZi5fc29ja19hY2NlcHQoZnV0LCBGYWxzZSwgc29jaykKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF9zb2NrX2FjY2VwdChzZWxmLCBmdXQsIHJlZ2lzdGVyZWQsIHNvY2spOgorICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgaWYgcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihmZCkKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbm4sIGFkZHJlc3MgPSBzb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBjb25uLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFkZF9yZWFkZXIoZmQsIHNlbGYuX3NvY2tfYWNjZXB0LCBmdXQsIFRydWUsIHNvY2spCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoKGNvbm4sIGFkZHJlc3MpKQorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgZm9yIGtleSwgbWFzayBpbiBldmVudF9saXN0OgorICAgICAgICAgICAgZmlsZW9iaiwgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5maWxlb2JqLCBrZXkuZGF0YQorICAgICAgICAgICAgaWYgbWFzayAmIHNlbGVjdG9ycy5FVkVOVF9SRUFEIGFuZCByZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgcmVhZGVyLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihmaWxlb2JqKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFjayhyZWFkZXIpCisgICAgICAgICAgICBpZiBtYXNrICYgc2VsZWN0b3JzLkVWRU5UX1dSSVRFIGFuZCB3cml0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgd3JpdGVyLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcihmaWxlb2JqKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFjayh3cml0ZXIpCisKKyAgICBkZWYgX3N0b3Bfc2VydmluZyhzZWxmLCBzb2NrKToKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKHNvY2suZmlsZW5vKCkpCisgICAgICAgIHNvY2suY2xvc2UoKQorCisKK2NsYXNzIF9GbG93Q29udHJvbE1peGluKHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKyAgICAiIiJBbGwgdGhlIGxvZ2ljIGZvciAod3JpdGUpIGZsb3cgY29udHJvbCBpbiBhIG1peC1pbiBiYXNlIGNsYXNzLgorCisgICAgVGhlIHN1YmNsYXNzIG11c3QgaW1wbGVtZW50IGdldF93cml0ZV9idWZmZXJfc2l6ZSgpLiAgSXQgbXVzdCBjYWxsCisgICAgX21heWJlX3BhdXNlX3Byb3RvY29sKCkgd2hlbmV2ZXIgdGhlIHdyaXRlIGJ1ZmZlciBzaXplIGluY3JlYXNlcywKKyAgICBhbmQgX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpIHdoZW5ldmVyIGl0IGRlY3JlYXNlcy4gIEl0IG1heSBhbHNvCisgICAgb3ZlcnJpZGUgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoKSAoZS5nLiB0byBzcGVjaWZ5IGRpZmZlcmVudAorICAgIGRlZmF1bHRzKS4KKworICAgIFRoZSBzdWJjbGFzcyBjb25zdHJ1Y3RvciBtdXN0IGNhbGwgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkuICBUaGlzCisgICAgd2lsbCBjYWxsIHNldF93cml0ZV9idWZmZXJfbGltaXRzKCkuCisKKyAgICBUaGUgdXNlciBtYXkgY2FsbCBzZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpIGFuZAorICAgIGdldF93cml0ZV9idWZmZXJfc2l6ZSgpLCBhbmQgdGhlaXIgcHJvdG9jb2wncyBwYXVzZV93cml0aW5nKCkgYW5kCisgICAgcmVzdW1lX3dyaXRpbmcoKSBtYXkgYmUgY2FsbGVkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4dHJhPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9wcm90b2NvbF9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnNldF93cml0ZV9idWZmZXJfbGltaXRzKCkKKworICAgIGRlZiBfbWF5YmVfcGF1c2VfcHJvdG9jb2woc2VsZik6CisgICAgICAgIHNpemUgPSBzZWxmLmdldF93cml0ZV9idWZmZXJfc2l6ZSgpCisgICAgICAgIGlmIHNpemUgPD0gc2VsZi5faGlnaF93YXRlcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3Qgc2VsZi5fcHJvdG9jb2xfcGF1c2VkOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2xfcGF1c2VkID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLnBhdXNlX3dyaXRpbmcoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdwYXVzZV93cml0aW5nKCkgZmFpbGVkJykKKworICAgIGRlZiBfbWF5YmVfcmVzdW1lX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBpZiAoc2VsZi5fcHJvdG9jb2xfcGF1c2VkIGFuZAorICAgICAgICAgICAgc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKSA8PSBzZWxmLl9sb3dfd2F0ZXIpOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2xfcGF1c2VkID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5yZXN1bWVfd3JpdGluZygpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ3Jlc3VtZV93cml0aW5nKCkgZmFpbGVkJykKKworICAgIGRlZiBzZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhzZWxmLCBoaWdoPU5vbmUsIGxvdz1Ob25lKToKKyAgICAgICAgaWYgaGlnaCBpcyBOb25lOgorICAgICAgICAgICAgaWYgbG93IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaGlnaCA9IDY0KjEwMjQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaGlnaCA9IDQqbG93CisgICAgICAgIGlmIGxvdyBpcyBOb25lOgorICAgICAgICAgICAgbG93ID0gaGlnaCAvLyA0CisgICAgICAgIGlmIG5vdCBoaWdoID49IGxvdyA+PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaGlnaCAoJXIpIG11c3QgYmUgPj0gbG93ICglcikgbXVzdCBiZSA+PSAwJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWdoLCBsb3cpKQorICAgICAgICBzZWxmLl9oaWdoX3dhdGVyID0gaGlnaAorICAgICAgICBzZWxmLl9sb3dfd2F0ZXIgPSBsb3cKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBfU2VsZWN0b3JUcmFuc3BvcnQoX0Zsb3dDb250cm9sTWl4aW4sIHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKworICAgIG1heF9zaXplID0gMjU2ICogMTAyNCAgIyBCdWZmZXIgc2l6ZSBwYXNzZWQgdG8gcmVjdigpLgorCisgICAgX2J1ZmZlcl9mYWN0b3J5ID0gYnl0ZWFycmF5ICAjIENvbnN0cnVjdHMgaW5pdGlhbCB2YWx1ZSBmb3Igc2VsZi5fYnVmZmVyLgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCBleHRyYSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9leHRyYVsnc29ja2V0J10gPSBzb2NrCisgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrbmFtZSddID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIGlmICdwZWVybmFtZScgbm90IGluIHNlbGYuX2V4dHJhOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhWydwZWVybmFtZSddID0gc29jay5nZXRwZWVybmFtZSgpCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhWydwZWVybmFtZSddID0gTm9uZQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9zb2NrID0gc29jaworICAgICAgICBzZWxmLl9zb2NrX2ZkID0gc29jay5maWxlbm8oKQorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX3NlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJfZmFjdG9yeSgpCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCA9IDAgICMgU2V0IHdoZW4gY2FsbCB0byBjb25uZWN0aW9uX2xvc3Qgc2NoZWR1bGVkLgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UgICMgU2V0IHdoZW4gY2xvc2UoKSBjYWxsZWQuCisgICAgICAgIGlmIHNlbGYuX3NlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlci5hdHRhY2goc2VsZikKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKworICAgIGRlZiBfZmF0YWxfZXJyb3Ioc2VsZiwgZXhjKToKKyAgICAgICAgIyBTaG91bGQgYmUgY2FsbGVkIGZyb20gZXhjZXB0aW9uIGhhbmRsZXIgb25seS4KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCAoQnJva2VuUGlwZUVycm9yLCBDb25uZWN0aW9uUmVzZXRFcnJvcikpOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmF0YWwgZXJyb3IgZm9yICVzJywgc2VsZikKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorCisgICAgZGVmIF9mb3JjZV9jbG9zZShzZWxmLCBleGMpOgorICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Q6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICBpZiBub3Qgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIGV4YykKKworICAgIGRlZiBfY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KGV4YykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fc29jayA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKyAgICAgICAgICAgIHNlcnZlciA9IHNlbGYuX3NlcnZlcgorICAgICAgICAgICAgaWYgc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlcnZlci5kZXRhY2goc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBOb25lCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2J1ZmZlcikKKworCitjbGFzcyBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoX1NlbGVjdG9yVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wLCBzb2NrLCBwcm90b2NvbCwgZXh0cmEsIHNlcnZlcikKKyAgICAgICAgc2VsZi5fZW9mID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKworICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbih3YWl0ZXIuc2V0X3Jlc3VsdCwgTm9uZSkKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDYW5ub3QgcGF1c2VfcmVhZGluZygpIHdoZW4gY2xvc2luZycpCisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQWxyZWFkeSBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdOb3QgcGF1c2VkJykKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3NvY2sucmVjdihzZWxmLm1heF9zaXplKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhX3JlY2VpdmVkKGRhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgaWYga2VlcF9vcGVuOgorICAgICAgICAgICAgICAgICAgICAjIFdlJ3JlIGtlZXBpbmcgdGhlIGNvbm5lY3Rpb24gb3BlbiBzbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBjYW4gd3JpdGUgbW9yZSwgYnV0IHdlIHN0aWxsIGNhbid0CisgICAgICAgICAgICAgICAgICAgICMgcmVjZWl2ZSBtb3JlLCBzbyByZW1vdmUgdGhlIHJlYWRlciBjYWxsYmFjay4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2RhdGEgYXJndW1lbnQgbXVzdCBiZSBieXRlLWlzaCAoJXIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGRhdGEpKQorICAgICAgICBpZiBzZWxmLl9lb2Y6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Nhbm5vdCBjYWxsIHdyaXRlKCkgYWZ0ZXIgd3JpdGVfZW9mKCknKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgIyBPcHRpbWl6YXRpb246IHRyeSB0byBzZW5kIG5vdy4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuID0gc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVtuOl0KKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAjIE5vdCBhbGwgd2FzIHdyaXR0ZW47IHJlZ2lzdGVyIHdyaXRlIGhhbmRsZXIuCisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgIyBBZGQgaXQgdG8gdGhlIGJ1ZmZlci4KKyAgICAgICAgc2VsZi5fYnVmZmVyLmV4dGVuZChkYXRhKQorICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgX3dyaXRlX3JlYWR5KHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5fYnVmZmVyLCAnRGF0YSBzaG91bGQgbm90IGJlIGVtcHR5JworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG4gPSBzZWxmLl9zb2NrLnNlbmQoc2VsZi5fYnVmZmVyKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbjoKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzpuXQorICAgICAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkgICMgTWF5IGFwcGVuZCB0byBidWZmZXIuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9lb2Y6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9lb2Y6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fZW9mID0gVHJ1ZQorICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIF9TZWxlY3RvclNzbFRyYW5zcG9ydChfU2VsZWN0b3JUcmFuc3BvcnQpOgorCisgICAgX2J1ZmZlcl9mYWN0b3J5ID0gYnl0ZWFycmF5CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgaWYgc3NsIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3N0ZGxpYiBzc2wgbW9kdWxlIG5vdCBhdmFpbGFibGUnKQorCisgICAgICAgIGlmIHNlcnZlcl9zaWRlOgorICAgICAgICAgICAgaWYgbm90IHNzbGNvbnRleHQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU2VydmVyIHNpZGUgc3NsIG5lZWRzIGEgdmFsaWQgU1NMQ29udGV4dCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3Qgc3NsY29udGV4dDoKKyAgICAgICAgICAgICAgICAjIENsaWVudCBzaWRlIG1heSBwYXNzIHNzbD1UcnVlIHRvIHVzZSBhIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAjIGNvbnRleHQ7IGluIHRoYXQgY2FzZSB0aGUgc3NsY29udGV4dCBwYXNzZWQgaXMgTm9uZS4KKyAgICAgICAgICAgICAgICAjIFRoZSBkZWZhdWx0IGlzIHRoZSBzYW1lIGFzIHVzZWQgYnkgdXJsbGliIHdpdGgKKyAgICAgICAgICAgICAgICAjIGNhZGVmYXVsdD1UcnVlLgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnX2NyZWF0ZV9zdGRsaWJfY29udGV4dCcpOgorICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZT1ib29sKHNlcnZlcl9ob3N0bmFtZSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBGYWxsYmFjayBmb3IgUHl0aG9uIDMuMy4KKyAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKworICAgICAgICB3cmFwX2t3YXJncyA9IHsKKyAgICAgICAgICAgICdzZXJ2ZXJfc2lkZSc6IHNlcnZlcl9zaWRlLAorICAgICAgICAgICAgJ2RvX2hhbmRzaGFrZV9vbl9jb25uZWN0JzogRmFsc2UsCisgICAgICAgIH0KKyAgICAgICAgaWYgc2VydmVyX2hvc3RuYW1lIGFuZCBub3Qgc2VydmVyX3NpZGUgYW5kIHNzbC5IQVNfU05JOgorICAgICAgICAgICAgd3JhcF9rd2FyZ3NbJ3NlcnZlcl9ob3N0bmFtZSddID0gc2VydmVyX2hvc3RuYW1lCisgICAgICAgIHNzbHNvY2sgPSBzc2xjb250ZXh0LndyYXBfc29ja2V0KHJhd3NvY2ssICoqd3JhcF9rd2FyZ3MpCisKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wLCBzc2xzb2NrLCBwcm90b2NvbCwgZXh0cmEsIHNlcnZlcikKKworICAgICAgICBzZWxmLl9zZXJ2ZXJfaG9zdG5hbWUgPSBzZXJ2ZXJfaG9zdG5hbWUKKyAgICAgICAgc2VsZi5fd2FpdGVyID0gd2FpdGVyCisgICAgICAgIHNlbGYuX3Jhd3NvY2sgPSByYXdzb2NrCisgICAgICAgIHNlbGYuX3NzbGNvbnRleHQgPSBzc2xjb250ZXh0CisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisKKyAgICAgICAgIyBTU0wtc3BlY2lmaWMgZXh0cmEgaW5mby4gIChwZWVyY2VydCBpcyBzZXQgbGF0ZXIpCisgICAgICAgIHNlbGYuX2V4dHJhLnVwZGF0ZShzc2xjb250ZXh0PXNzbGNvbnRleHQpCisKKyAgICAgICAgc2VsZi5fb25faGFuZHNoYWtlKCkKKworICAgIGRlZiBfb25faGFuZHNoYWtlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zb2NrLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIGV4Y2VwdCBzc2wuU1NMV2FudFJlYWRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9vbl9oYW5kc2hha2UpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50V3JpdGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9vbl9oYW5kc2hha2UpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICBpZiBzZWxmLl93YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKworICAgICAgICBwZWVyY2VydCA9IHNlbGYuX3NvY2suZ2V0cGVlcmNlcnQoKQorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLl9zc2xjb250ZXh0LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgICMgVmVyaWZ5IGhvc3RuYW1lIGlmIHJlcXVlc3RlZCwgUHl0aG9uIDMuNCsgdXNlcyBjaGVja19ob3N0bmFtZQorICAgICAgICAgICAgIyBhbmQgY2hlY2tzIHRoZSBob3N0bmFtZSBpbiBkb19oYW5kc2hha2UoKQorICAgICAgICAgICAgaWYgKHNlbGYuX3NlcnZlcl9ob3N0bmFtZSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9zc2xjb250ZXh0LnZlcmlmeV9tb2RlICE9IHNzbC5DRVJUX05PTkUpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3NsLm1hdGNoX2hvc3RuYW1lKHBlZXJjZXJ0LCBzZWxmLl9zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl93YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQWRkIGV4dHJhIGluZm8gdGhhdCBiZWNvbWVzIGF2YWlsYWJsZSBhZnRlciBoYW5kc2hha2UuCisgICAgICAgIHNlbGYuX2V4dHJhLnVwZGF0ZShwZWVyY2VydD1wZWVyY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcj1zZWxmLl9zb2NrLmNpcGhlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb249c2VsZi5fc29jay5jb21wcmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuX3JlYWRfd2FudHNfd3JpdGUgPSBGYWxzZQorICAgICAgICBzZWxmLl93cml0ZV93YW50c19yZWFkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fd2FpdGVyLnNldF9yZXN1bHQsIE5vbmUpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIyBYWFggVGhpcyBpcyBhIGJpdCBpY2t5LCBnaXZlbiB0aGUgY29tbWVudCBhdCB0aGUgdG9wIG9mCisgICAgICAgICMgX3JlYWRfcmVhZHkoKS4gIElzIGl0IHBvc3NpYmxlIHRvIGV2b2tlIGEgZGVhZGxvY2s/ICBJIGRvbid0CisgICAgICAgICMga25vdywgYWx0aG91Z2ggaXQgZG9lc24ndCBsb29rIGxpa2UgaXQ7IHdyaXRlKCkgd2lsbCBzdGlsbAorICAgICAgICAjIGFjY2VwdCBtb3JlIGRhdGEgZm9yIHRoZSBidWZmZXIgYW5kIGV2ZW50dWFsbHkgdGhlIGFwcCB3aWxsCisgICAgICAgICMgY2FsbCByZXN1bWVfcmVhZGluZygpIGFnYWluLCBhbmQgdGhpbmdzIHdpbGwgZmxvdyBhZ2Fpbi4KKworICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDYW5ub3QgcGF1c2VfcmVhZGluZygpIHdoZW4gY2xvc2luZycpCisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQWxyZWFkeSBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmFpc2UgKCdOb3QgcGF1c2VkJykKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfd2FudHNfcmVhZDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3dhbnRzX3JlYWQgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfcmVhZHkoKQorCisgICAgICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3dyaXRlX3JlYWR5KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zb2NrLnJlY3Yoc2VsZi5tYXhfc2l6ZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IsIHNzbC5TU0xXYW50UmVhZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50V3JpdGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfd2FudHNfd3JpdGUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl93cml0ZV9yZWFkeSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBrZWVwX29wZW4gPSBzZWxmLl9wcm90b2NvbC5lb2ZfcmVjZWl2ZWQoKQorICAgICAgICAgICAgICAgICAgICBpZiBrZWVwX29wZW46CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygncmV0dXJuaW5nIHRydWUgZnJvbSBlb2ZfcmVjZWl2ZWQoKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFzIG5vIGVmZmVjdCB3aGVuIHVzaW5nIHNzbCcpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgX3dyaXRlX3JlYWR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlOgorICAgICAgICAgICAgc2VsZi5fcmVhZF93YW50c193cml0ZSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl9yZWFkX3JlYWR5KCkKKworICAgICAgICAgICAgaWYgbm90IChzZWxmLl9wYXVzZWQgb3Igc2VsZi5fY2xvc2luZyk6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG4gPSBzZWxmLl9zb2NrLnNlbmQoc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xXYW50V3JpdGVFcnJvcik6CisgICAgICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMV2FudFJlYWRFcnJvcjoKKyAgICAgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3dhbnRzX3JlYWQgPSBUcnVlCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgaWYgbjoKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzpuXQorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGJ5dGUtaXNoICglciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZGF0YSkpCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgIyBBZGQgaXQgdG8gdGhlIGJ1ZmZlci4KKyAgICAgICAgc2VsZi5fYnVmZmVyLmV4dGVuZChkYXRhKQorICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoX1NlbGVjdG9yVHJhbnNwb3J0KToKKworICAgIF9idWZmZXJfZmFjdG9yeSA9IGNvbGxlY3Rpb25zLmRlcXVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29jaywgcHJvdG9jb2wsIGFkZHJlc3M9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcCwgc29jaywgcHJvdG9jb2wsIGV4dHJhKQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gYWRkcmVzcworICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorCisgICAgZGVmIGdldF93cml0ZV9idWZmZXJfc2l6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHN1bShsZW4oZGF0YSkgZm9yIGRhdGEsIF8gaW4gc2VsZi5fYnVmZmVyKQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhLCBhZGRyID0gc2VsZi5fc29jay5yZWN2ZnJvbShzZWxmLm1heF9zaXplKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmVycm9yX3JlY2VpdmVkKGV4YykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhZ3JhbV9yZWNlaXZlZChkYXRhLCBhZGRyKQorCisgICAgZGVmIHNlbmR0byhzZWxmLCBkYXRhLCBhZGRyPU5vbmUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlldykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdkYXRhIGFyZ3VtZW50IG11c3QgYmUgYnl0ZS1pc2ggKCVyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShkYXRhKSkKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGFuZCBhZGRyIG5vdCBpbiAoTm9uZSwgc2VsZi5fYWRkcmVzcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGFkZHJlc3M6IG11c3QgYmUgTm9uZSBvciAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fYWRkcmVzcywpKQorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCBhbmQgc2VsZi5fYWRkcmVzczoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgIyBBdHRlbXB0IHRvIHNlbmQgaXQgcmlnaHQgYXdheSBmaXJzdC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9hZGRyZXNzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNlbmQoZGF0YSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNlbmR0byhkYXRhLCBhZGRyKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9zZW5kdG9fcmVhZHkpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQoZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgRW5zdXJlIHRoYXQgd2hhdCB3ZSBidWZmZXIgaXMgaW1tdXRhYmxlLgorICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKChieXRlcyhkYXRhKSwgYWRkcikpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBfc2VuZHRvX3JlYWR5KHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBkYXRhLCBhZGRyID0gc2VsZi5fYnVmZmVyLnBvcGxlZnQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZChkYXRhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZHRvKGRhdGEsIGFkZHIpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZGxlZnQoKGRhdGEsIGFkZHIpKSAgIyBUcnkgYWdhaW4gbGF0ZXIuCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5lcnJvcl9yZWNlaXZlZChleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkgICMgTWF5IGFwcGVuZCB0byBidWZmZXIuCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3N0cmVhbXMucHkgYi9MaWIvYXN5bmNpby9zdHJlYW1zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYzIxNDcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9zdHJlYW1zLnB5CkBAIC0wLDAgKzEsNDI5IEBACisiIiJTdHJlYW0tcmVsYXRlZCB0aGluZ3MuIiIiCisKK19fYWxsX18gPSBbJ1N0cmVhbVJlYWRlcicsICdTdHJlYW1Xcml0ZXInLCAnU3RyZWFtUmVhZGVyUHJvdG9jb2wnLAorICAgICAgICAgICAnb3Blbl9jb25uZWN0aW9uJywgJ3N0YXJ0X3NlcnZlcicsICdJbmNvbXBsZXRlUmVhZEVycm9yJywKKyAgICAgICAgICAgXQorCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHByb3RvY29scworZnJvbSAuIGltcG9ydCB0YXNrcworCisKK19ERUZBVUxUX0xJTUlUID0gMioqMTYKKworCitjbGFzcyBJbmNvbXBsZXRlUmVhZEVycm9yKEVPRkVycm9yKToKKyAgICAiIiIKKyAgICBJbmNvbXBsZXRlIHJlYWQgZXJyb3IuIEF0dHJpYnV0ZXM6CisKKyAgICAtIHBhcnRpYWw6IHJlYWQgYnl0ZXMgc3RyaW5nIGJlZm9yZSB0aGUgZW5kIG9mIHN0cmVhbSB3YXMgcmVhY2hlZAorICAgIC0gZXhwZWN0ZWQ6IHRvdGFsIG51bWJlciBvZiBleHBlY3RlZCBieXRlcworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJ0aWFsLCBleHBlY3RlZCk6CisgICAgICAgIEVPRkVycm9yLl9faW5pdF9fKHNlbGYsICIlcyBieXRlcyByZWFkIG9uIGEgdG90YWwgb2YgJXMgZXhwZWN0ZWQgYnl0ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGxlbihwYXJ0aWFsKSwgZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLnBhcnRpYWwgPSBwYXJ0aWFsCisgICAgICAgIHNlbGYuZXhwZWN0ZWQgPSBleHBlY3RlZAorCisKK0B0YXNrcy5jb3JvdXRpbmUKK2RlZiBvcGVuX2Nvbm5lY3Rpb24oaG9zdD1Ob25lLCBwb3J0PU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgbGltaXQ9X0RFRkFVTFRfTElNSVQsICoqa3dkcyk6CisgICAgIiIiQSB3cmFwcGVyIGZvciBjcmVhdGVfY29ubmVjdGlvbigpIHJldHVybmluZyBhIChyZWFkZXIsIHdyaXRlcikgcGFpci4KKworICAgIFRoZSByZWFkZXIgcmV0dXJuZWQgaXMgYSBTdHJlYW1SZWFkZXIgaW5zdGFuY2U7IHRoZSB3cml0ZXIgaXMgYQorICAgIFN0cmVhbVdyaXRlciBpbnN0YW5jZS4KKworICAgIFRoZSBhcmd1bWVudHMgYXJlIGFsbCB0aGUgdXN1YWwgYXJndW1lbnRzIHRvIGNyZWF0ZV9jb25uZWN0aW9uKCkKKyAgICBleGNlcHQgcHJvdG9jb2xfZmFjdG9yeTsgbW9zdCBjb21tb24gYXJlIHBvc2l0aW9uYWwgaG9zdCBhbmQgcG9ydCwKKyAgICB3aXRoIHZhcmlvdXMgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgZm9sbG93aW5nLgorCisgICAgQWRkaXRpb25hbCBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgbG9vcCAodG8gc2V0IHRoZSBldmVudCBsb29wCisgICAgaW5zdGFuY2UgdG8gdXNlKSBhbmQgbGltaXQgKHRvIHNldCB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgICBTdHJlYW1SZWFkZXIpLgorCisgICAgKElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSB0aGUgU3RyZWFtUmVhZGVyIGFuZC9vcgorICAgIFN0cmVhbVJlYWRlclByb3RvY29sIGNsYXNzZXMsIGp1c3QgY29weSB0aGUgY29kZSAtLSB0aGVyZSdzCisgICAgcmVhbGx5IG5vdGhpbmcgc3BlY2lhbCBoZXJlIGV4Y2VwdCBzb21lIGNvbnZlbmllbmNlLikKKyAgICAiIiIKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIHJlYWRlciA9IFN0cmVhbVJlYWRlcihsaW1pdD1saW1pdCwgbG9vcD1sb29wKQorICAgIHByb3RvY29sID0gU3RyZWFtUmVhZGVyUHJvdG9jb2wocmVhZGVyLCBsb29wPWxvb3ApCisgICAgdHJhbnNwb3J0LCBfID0geWllbGQgZnJvbSBsb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICBsYW1iZGE6IHByb3RvY29sLCBob3N0LCBwb3J0LCAqKmt3ZHMpCisgICAgd3JpdGVyID0gU3RyZWFtV3JpdGVyKHRyYW5zcG9ydCwgcHJvdG9jb2wsIHJlYWRlciwgbG9vcCkKKyAgICByZXR1cm4gcmVhZGVyLCB3cml0ZXIKKworCitAdGFza3MuY29yb3V0aW5lCitkZWYgc3RhcnRfc2VydmVyKGNsaWVudF9jb25uZWN0ZWRfY2IsIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBsb29wPU5vbmUsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCAqKmt3ZHMpOgorICAgICIiIlN0YXJ0IGEgc29ja2V0IHNlcnZlciwgY2FsbCBiYWNrIGZvciBlYWNoIGNsaWVudCBjb25uZWN0ZWQuCisKKyAgICBUaGUgZmlyc3QgcGFyYW1ldGVyLCBgY2xpZW50X2Nvbm5lY3RlZF9jYmAsIHRha2VzIHR3byBwYXJhbWV0ZXJzOgorICAgIGNsaWVudF9yZWFkZXIsIGNsaWVudF93cml0ZXIuICBjbGllbnRfcmVhZGVyIGlzIGEgU3RyZWFtUmVhZGVyCisgICAgb2JqZWN0LCB3aGlsZSBjbGllbnRfd3JpdGVyIGlzIGEgU3RyZWFtV3JpdGVyIG9iamVjdC4gIFRoaXMKKyAgICBwYXJhbWV0ZXIgY2FuIGVpdGhlciBiZSBhIHBsYWluIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGEgY29yb3V0aW5lOworICAgIGlmIGl0IGlzIGEgY29yb3V0aW5lLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIGludG8gYQorICAgIFRhc2suCisKKyAgICBUaGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIGFyZSBhbGwgdGhlIHVzdWFsIGFyZ3VtZW50cyB0bworICAgIGxvb3AuY3JlYXRlX3NlcnZlcigpIGV4Y2VwdCBwcm90b2NvbF9mYWN0b3J5OyBtb3N0IGNvbW1vbiBhcmUKKyAgICBwb3NpdGlvbmFsIGhvc3QgYW5kIHBvcnQsIHdpdGggdmFyaW91cyBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cworICAgIGZvbGxvd2luZy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgbG9vcC5jcmVhdGVfc2VydmVyKCkuCisKKyAgICBBZGRpdGlvbmFsIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBsb29wICh0byBzZXQgdGhlIGV2ZW50IGxvb3AKKyAgICBpbnN0YW5jZSB0byB1c2UpIGFuZCBsaW1pdCAodG8gc2V0IHRoZSBidWZmZXIgbGltaXQgcGFzc2VkIHRvIHRoZQorICAgIFN0cmVhbVJlYWRlcikuCisKKyAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGxvb3AuY3JlYXRlX3NlcnZlcigpLCBpLmUuIGEKKyAgICBTZXJ2ZXIgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgdGhlIHNlcnZpY2UuCisgICAgIiIiCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgIHJlYWRlciA9IFN0cmVhbVJlYWRlcihsaW1pdD1saW1pdCwgbG9vcD1sb29wKQorICAgICAgICBwcm90b2NvbCA9IFN0cmVhbVJlYWRlclByb3RvY29sKHJlYWRlciwgY2xpZW50X2Nvbm5lY3RlZF9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisgICAgICAgIHJldHVybiBwcm90b2NvbAorCisgICAgcmV0dXJuICh5aWVsZCBmcm9tIGxvb3AuY3JlYXRlX3NlcnZlcihmYWN0b3J5LCBob3N0LCBwb3J0LCAqKmt3ZHMpKQorCisKK2NsYXNzIEZsb3dDb250cm9sTWl4aW4ocHJvdG9jb2xzLlByb3RvY29sKToKKyAgICAiIiJSZXVzYWJsZSBmbG93IGNvbnRyb2wgbG9naWMgZm9yIFN0cmVhbVdyaXRlci5kcmFpbigpLgorCisgICAgVGhpcyBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBtZXRob2RzIHBhdXNlX3dyaXRpbmcoKSwKKyAgICByZXN1bWVfcmVhZGluZygpIGFuZCBjb25uZWN0aW9uX2xvc3QoKS4gIElmIHRoZSBzdWJjbGFzcyBvdmVycmlkZXMKKyAgICB0aGVzZSBpdCBtdXN0IGNhbGwgdGhlIHN1cGVyIG1ldGhvZHMuCisKKyAgICBTdHJlYW1Xcml0ZXIuZHJhaW4oKSBtdXN0IGNoZWNrIGZvciBlcnJvciBjb25kaXRpb25zIGFuZCB0aGVuIGNhbGwKKyAgICBfbWFrZV9kcmFpbl93YWl0ZXIoKSwgd2hpY2ggd2lsbCByZXR1cm4gZWl0aGVyICgpIG9yIGEgRnV0dXJlCisgICAgZGVwZW5kaW5nIG9uIHRoZSBwYXVzZWQgc3RhdGUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AgICMgTWF5IGJlIE5vbmU7IHdlIG1heSBuZXZlciBuZWVkIGl0LgorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXVzZWQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorCisgICAgZGVmIHJlc3VtZV93cml0aW5nKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5fcGF1c2VkCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIHdhaXRlciA9IHNlbGYuX2RyYWluX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICAjIFdha2UgdXAgdGhlIHdyaXRlciBpZiBjdXJyZW50bHkgcGF1c2VkLgorICAgICAgICBpZiBub3Qgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdhaXRlciA9IHNlbGYuX2RyYWluX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgIGlmIHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgZGVmIF9tYWtlX2RyYWluX3dhaXRlcihzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJldHVybiAoKQorICAgICAgICB3YWl0ZXIgPSBzZWxmLl9kcmFpbl93YWl0ZXIKKyAgICAgICAgYXNzZXJ0IHdhaXRlciBpcyBOb25lIG9yIHdhaXRlci5jYW5jZWxsZWQoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX2RyYWluX3dhaXRlciA9IHdhaXRlcgorICAgICAgICByZXR1cm4gd2FpdGVyCisKKworY2xhc3MgU3RyZWFtUmVhZGVyUHJvdG9jb2woRmxvd0NvbnRyb2xNaXhpbiwgcHJvdG9jb2xzLlByb3RvY29sKToKKyAgICAiIiJIZWxwZXIgY2xhc3MgdG8gYWRhcHQgYmV0d2VlbiBQcm90b2NvbCBhbmQgU3RyZWFtUmVhZGVyLgorCisgICAgKFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgaW5zdGVhZCBvZiBtYWtpbmcgU3RyZWFtUmVhZGVyIGl0c2VsZiBhCisgICAgUHJvdG9jb2wgc3ViY2xhc3MsIGJlY2F1c2UgdGhlIFN0cmVhbVJlYWRlciBoYXMgb3RoZXIgcG90ZW50aWFsCisgICAgdXNlcywgYW5kIHRvIHByZXZlbnQgdGhlIHVzZXIgb2YgdGhlIFN0cmVhbVJlYWRlciB0byBhY2NpZGVudGFsbHkKKyAgICBjYWxsIGluYXBwcm9wcmlhdGUgbWV0aG9kcyBvZiB0aGUgcHJvdG9jb2wuKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbV9yZWFkZXIsIGNsaWVudF9jb25uZWN0ZWRfY2I9Tm9uZSwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIgPSBzdHJlYW1fcmVhZGVyCisgICAgICAgIHNlbGYuX3N0cmVhbV93cml0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2NsaWVudF9jb25uZWN0ZWRfY2IgPSBjbGllbnRfY29ubmVjdGVkX2NiCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuc2V0X3RyYW5zcG9ydCh0cmFuc3BvcnQpCisgICAgICAgIGlmIHNlbGYuX2NsaWVudF9jb25uZWN0ZWRfY2IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fd3JpdGVyID0gU3RyZWFtV3JpdGVyKHRyYW5zcG9ydCwgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHJlcyA9IHNlbGYuX2NsaWVudF9jb25uZWN0ZWRfY2Ioc2VsZi5fc3RyZWFtX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3dyaXRlcikKKyAgICAgICAgICAgIGlmIHRhc2tzLmlzY29yb3V0aW5lKHJlcyk6CisgICAgICAgICAgICAgICAgdGFza3MuVGFzayhyZXMsIGxvb3A9c2VsZi5fbG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLmZlZWRfZW9mKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHN1cGVyKCkuY29ubmVjdGlvbl9sb3N0KGV4YykKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLmZlZWRfZGF0YShkYXRhKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5mZWVkX2VvZigpCisKKworY2xhc3MgU3RyZWFtV3JpdGVyOgorICAgICIiIldyYXBzIGEgVHJhbnNwb3J0LgorCisgICAgVGhpcyBleHBvc2VzIHdyaXRlKCksIHdyaXRlbGluZXMoKSwgW2Nhbl9dd3JpdGVfZW9mKCksCisgICAgZ2V0X2V4dHJhX2luZm8oKSBhbmQgY2xvc2UoKS4gIEl0IGFkZHMgZHJhaW4oKSB3aGljaCByZXR1cm5zIGFuCisgICAgb3B0aW9uYWwgRnV0dXJlIG9uIHdoaWNoIHlvdSBjYW4gd2FpdCBmb3IgZmxvdyBjb250cm9sLiAgSXQgYWxzbworICAgIGFkZHMgYSB0cmFuc3BvcnQgcHJvcGVydHkgd2hpY2ggcmVmZXJlbmNlcyB0aGUgVHJhbnNwb3J0CisgICAgZGlyZWN0bHkuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhbnNwb3J0LCBwcm90b2NvbCwgcmVhZGVyLCBsb29wKToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fcmVhZGVyID0gcmVhZGVyCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0CisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgZGVmIHdyaXRlbGluZXMoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydC53cml0ZWxpbmVzKGRhdGEpCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LndyaXRlX2VvZigpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydC5jYW5fd3JpdGVfZW9mKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydC5jbG9zZSgpCisKKyAgICBkZWYgZ2V0X2V4dHJhX2luZm8oc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbyhuYW1lLCBkZWZhdWx0KQorCisgICAgZGVmIGRyYWluKHNlbGYpOgorICAgICAgICAiIiJUaGlzIG1ldGhvZCBoYXMgYW4gdW51c3VhbCByZXR1cm4gdmFsdWUuCisKKyAgICAgICAgVGhlIGludGVuZGVkIHVzZSBpcyB0byB3cml0ZQorCisgICAgICAgICAgdy53cml0ZShkYXRhKQorICAgICAgICAgIHlpZWxkIGZyb20gdy5kcmFpbigpCisKKyAgICAgICAgV2hlbiB0aGVyZSdzIG5vdGhpbmcgdG8gd2FpdCBmb3IsIGRyYWluKCkgcmV0dXJucyAoKSwgYW5kIHRoZQorICAgICAgICB5aWVsZC1mcm9tIGNvbnRpbnVlcyBpbW1lZGlhdGVseS4gIFdoZW4gdGhlIHRyYW5zcG9ydCBidWZmZXIKKyAgICAgICAgaXMgZnVsbCAodGhlIHByb3RvY29sIGlzIHBhdXNlZCksIGRyYWluKCkgY3JlYXRlcyBhbmQgcmV0dXJucworICAgICAgICBhIEZ1dHVyZSBhbmQgdGhlIHlpZWxkLWZyb20gd2lsbCBibG9jayB1bnRpbCB0aGF0IEZ1dHVyZSBpcworICAgICAgICBjb21wbGV0ZWQsIHdoaWNoIHdpbGwgaGFwcGVuIHdoZW4gdGhlIGJ1ZmZlciBpcyAocGFydGlhbGx5KQorICAgICAgICBkcmFpbmVkIGFuZCB0aGUgcHJvdG9jb2wgaXMgcmVzdW1lZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3JlYWRlciBpcyBub3QgTm9uZSBhbmQgc2VsZi5fcmVhZGVyLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9yZWFkZXIuX2V4Y2VwdGlvbgorICAgICAgICBpZiBzZWxmLl90cmFuc3BvcnQuX2Nvbm5fbG9zdDogICMgVXNlcyBwcml2YXRlIHZhcmlhYmxlLgorICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvblJlc2V0RXJyb3IoJ0Nvbm5lY3Rpb24gbG9zdCcpCisgICAgICAgIHJldHVybiBzZWxmLl9wcm90b2NvbC5fbWFrZV9kcmFpbl93YWl0ZXIoKQorCisKK2NsYXNzIFN0cmVhbVJlYWRlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgbG9vcD1Ob25lKToKKyAgICAgICAgIyBUaGUgbGluZSBsZW5ndGggbGltaXQgaXMgIGEgc2VjdXJpdHkgZmVhdHVyZTsKKyAgICAgICAgIyBpdCBhbHNvIGRvdWJsZXMgYXMgaGFsZiB0aGUgYnVmZmVyIGxpbWl0LgorICAgICAgICBzZWxmLl9saW1pdCA9IGxpbWl0CisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9idWZmZXIgPSBieXRlYXJyYXkoKQorICAgICAgICBzZWxmLl9lb2YgPSBGYWxzZSAgIyBXaGV0aGVyIHdlJ3JlIGRvbmUuCisgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUgICMgQSBmdXR1cmUuCisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gTm9uZQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorCisgICAgZGVmIGV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgZGVmIHNldF9leGNlcHRpb24oc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjCisKKyAgICAgICAgd2FpdGVyID0gc2VsZi5fd2FpdGVyCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgZGVmIHNldF90cmFuc3BvcnQoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3RyYW5zcG9ydCBpcyBOb25lLCAnVHJhbnNwb3J0IGFscmVhZHkgc2V0JworICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQKKworICAgIGRlZiBfbWF5YmVfcmVzdW1lX3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkIGFuZCBsZW4oc2VsZi5fYnVmZmVyKSA8PSBzZWxmLl9saW1pdDoKKyAgICAgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQucmVzdW1lX3JlYWRpbmcoKQorCisgICAgZGVmIGZlZWRfZW9mKHNlbGYpOgorICAgICAgICBzZWxmLl9lb2YgPSBUcnVlCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KFRydWUpCisKKyAgICBkZWYgYXRfZW9mKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5IGFuZCAnZmVlZF9lb2YnIHdhcyBjYWxsZWQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9lb2YgYW5kIG5vdCBzZWxmLl9idWZmZXIKKworICAgIGRlZiBmZWVkX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fZW9mLCAnZmVlZF9kYXRhIGFmdGVyIGZlZWRfZW9mJworCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fYnVmZmVyLmV4dGVuZChkYXRhKQorCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KEZhbHNlKQorCisgICAgICAgIGlmIChzZWxmLl90cmFuc3BvcnQgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICBub3Qgc2VsZi5fcGF1c2VkIGFuZAorICAgICAgICAgICAgbGVuKHNlbGYuX2J1ZmZlcikgPiAyKnNlbGYuX2xpbWl0KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQucGF1c2VfcmVhZGluZygpCisgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoZSB0cmFuc3BvcnQgY2FuJ3QgYmUgcGF1c2VkLgorICAgICAgICAgICAgICAgICMgV2UnbGwganVzdCBoYXZlIHRvIGJ1ZmZlciBhbGwgZGF0YS4KKyAgICAgICAgICAgICAgICAjIEZvcmdldCB0aGUgdHJhbnNwb3J0IHNvIHdlIGRvbid0IGtlZXAgdHJ5aW5nLgorICAgICAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorCisgICAgZGVmIF9jcmVhdGVfd2FpdGVyKHNlbGYsIGZ1bmNfbmFtZSk6CisgICAgICAgICMgU3RyZWFtUmVhZGVyIHVzZXMgYSBmdXR1cmUgdG8gbGluayB0aGUgcHJvdG9jb2wgZmVlZF9kYXRhKCkgbWV0aG9kCisgICAgICAgICMgdG8gYSByZWFkIGNvcm91dGluZS4gUnVubmluZyB0d28gcmVhZCBjb3JvdXRpbmVzIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgICAgIyB3b3VsZCBoYXZlIGFuIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLiBJdCB3b3VsZCBub3QgcG9zc2libGUgdG8ga25vdworICAgICAgICAjIHdoaWNoIGNvcm91dGluZSB3b3VsZCBnZXQgdGhlIG5leHQgZGF0YS4KKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCclcygpIGNhbGxlZCB3aGlsZSBhbm90aGVyIGNvcm91dGluZSBpcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FscmVhZHkgd2FpdGluZyBmb3IgaW5jb21pbmcgZGF0YScgJSBmdW5jX25hbWUpCisgICAgICAgIHJldHVybiBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKworICAgICAgICBsaW5lID0gYnl0ZWFycmF5KCkKKyAgICAgICAgbm90X2Vub3VnaCA9IFRydWUKKworICAgICAgICB3aGlsZSBub3RfZW5vdWdoOgorICAgICAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyIGFuZCBub3RfZW5vdWdoOgorICAgICAgICAgICAgICAgIGljaGFyID0gc2VsZi5fYnVmZmVyLmZpbmQoYidcbicpCisgICAgICAgICAgICAgICAgaWYgaWNoYXIgPCAwOgorICAgICAgICAgICAgICAgICAgICBsaW5lLmV4dGVuZChzZWxmLl9idWZmZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWNoYXIgKz0gMQorICAgICAgICAgICAgICAgICAgICBsaW5lLmV4dGVuZChzZWxmLl9idWZmZXJbOmljaGFyXSkKKyAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6aWNoYXJdCisgICAgICAgICAgICAgICAgICAgIG5vdF9lbm91Z2ggPSBGYWxzZQorCisgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gc2VsZi5fbGltaXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdMaW5lIGlzIHRvbyBsb25nJykKKworICAgICAgICAgICAgaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG5vdF9lbm91Z2g6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gc2VsZi5fY3JlYXRlX3dhaXRlcigncmVhZGxpbmUnKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl93YWl0ZXIKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisKKyAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3RyYW5zcG9ydCgpCisgICAgICAgIHJldHVybiBieXRlcyhsaW5lKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKworICAgICAgICBpZiBub3QgbjoKKyAgICAgICAgICAgIHJldHVybiBiJycKKworICAgICAgICBpZiBuIDwgMDoKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9lb2Y6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gc2VsZi5fY3JlYXRlX3dhaXRlcigncmVhZCcpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3dhaXRlcgorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXIgYW5kIG5vdCBzZWxmLl9lb2Y6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gc2VsZi5fY3JlYXRlX3dhaXRlcigncmVhZCcpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3dhaXRlcgorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKworICAgICAgICBpZiBuIDwgMCBvciBsZW4oc2VsZi5fYnVmZmVyKSA8PSBuOgorICAgICAgICAgICAgZGF0YSA9IGJ5dGVzKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIG4gPiAwIGFuZCBsZW4oc2VsZi5fYnVmZmVyKSA+IG4KKyAgICAgICAgICAgIGRhdGEgPSBieXRlcyhzZWxmLl9idWZmZXJbOm5dKQorICAgICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6bl0KKworICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfdHJhbnNwb3J0KCkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgcmVhZGV4YWN0bHkoc2VsZiwgbik6CisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgICAgICMgVGhlcmUgdXNlZCB0byBiZSAib3B0aW1pemVkIiBjb2RlIGhlcmUuICBJdCBjcmVhdGVkIGl0cyBvd24KKyAgICAgICAgIyBGdXR1cmUgYW5kIHdhaXRlZCB1bnRpbCBzZWxmLl9idWZmZXIgaGFkIGF0IGxlYXN0IHRoZSBuCisgICAgICAgICMgYnl0ZXMsIHRoZW4gY2FsbGVkIHJlYWQobikuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGNvdWxkIHBhdXNlCisgICAgICAgICMgdGhlIHRyYW5zcG9ydCBpZiB0aGUgYXJndW1lbnQgd2FzIGxhcmdlciB0aGFuIHRoZSBwYXVzZQorICAgICAgICAjIGxpbWl0ICh3aGljaCBpcyB0d2ljZSBzZWxmLl9saW1pdCkuICBTbyBub3cgd2UganVzdCByZWFkKCkKKyAgICAgICAgIyBpbnRvIGEgbG9jYWwgYnVmZmVyLgorCisgICAgICAgIGJsb2NrcyA9IFtdCisgICAgICAgIHdoaWxlIG4gPiAwOgorICAgICAgICAgICAgYmxvY2sgPSB5aWVsZCBmcm9tIHNlbGYucmVhZChuKQorICAgICAgICAgICAgaWYgbm90IGJsb2NrOgorICAgICAgICAgICAgICAgIHBhcnRpYWwgPSBiJycuam9pbihibG9ja3MpCisgICAgICAgICAgICAgICAgcmFpc2UgSW5jb21wbGV0ZVJlYWRFcnJvcihwYXJ0aWFsLCBsZW4ocGFydGlhbCkgKyBuKQorICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChibG9jaykKKyAgICAgICAgICAgIG4gLT0gbGVuKGJsb2NrKQorCisgICAgICAgIHJldHVybiBiJycuam9pbihibG9ja3MpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9zdWJwcm9jZXNzLnB5IGIvTGliL2FzeW5jaW8vc3VicHJvY2Vzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDFhNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vc3VicHJvY2Vzcy5weQpAQCAtMCwwICsxLDE5NSBAQAorX19hbGxfXyA9IFsnY3JlYXRlX3N1YnByb2Nlc3NfZXhlYycsICdjcmVhdGVfc3VicHJvY2Vzc19zaGVsbCddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gLiBpbXBvcnQgc3RyZWFtcworZnJvbSAuIGltcG9ydCB0YXNrcworCisKK1BJUEUgPSBzdWJwcm9jZXNzLlBJUEUKK1NURE9VVCA9IHN1YnByb2Nlc3MuU1RET1VUCitERVZOVUxMID0gc3VicHJvY2Vzcy5ERVZOVUxMCisKKworY2xhc3MgU3VicHJvY2Vzc1N0cmVhbVByb3RvY29sKHN0cmVhbXMuRmxvd0NvbnRyb2xNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbHMuU3VicHJvY2Vzc1Byb3RvY29sKToKKyAgICAiIiJMaWtlIFN0cmVhbVJlYWRlclByb3RvY29sLCBidXQgZm9yIGEgc3VicHJvY2Vzcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW1pdCwgbG9vcCk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBzZWxmLl9saW1pdCA9IGxpbWl0CisgICAgICAgIHNlbGYuc3RkaW4gPSBzZWxmLnN0ZG91dCA9IHNlbGYuc3RkZXJyID0gTm9uZQorICAgICAgICBzZWxmLndhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5fd2FpdGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gTm9uZQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgaWYgdHJhbnNwb3J0LmdldF9waXBlX3RyYW5zcG9ydCgxKToKKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobGltaXQ9c2VsZi5fbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgaWYgdHJhbnNwb3J0LmdldF9waXBlX3RyYW5zcG9ydCgyKToKKyAgICAgICAgICAgIHNlbGYuc3RkZXJyID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobGltaXQ9c2VsZi5fbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc3RkaW4gPSB0cmFuc3BvcnQuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIGlmIHN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGRpbiA9IHN0cmVhbXMuU3RyZWFtV3JpdGVyKHN0ZGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sPXNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLndhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgaWYgZmQgPT0gMToKKyAgICAgICAgICAgIHJlYWRlciA9IHNlbGYuc3Rkb3V0CisgICAgICAgIGVsaWYgZmQgPT0gMjoKKyAgICAgICAgICAgIHJlYWRlciA9IHNlbGYuc3RkZXJyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWFkZXIgPSBOb25lCisgICAgICAgIGlmIHJlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlYWRlci5mZWVkX2RhdGEoZGF0YSkKKworICAgIGRlZiBwaXBlX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBmZCwgZXhjKToKKyAgICAgICAgaWYgZmQgPT0gMDoKKyAgICAgICAgICAgIHBpcGUgPSBzZWxmLnN0ZGluCisgICAgICAgICAgICBpZiBwaXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGZkID09IDE6CisgICAgICAgICAgICByZWFkZXIgPSBzZWxmLnN0ZG91dAorICAgICAgICBlbGlmIGZkID09IDI6CisgICAgICAgICAgICByZWFkZXIgPSBzZWxmLnN0ZGVycgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhZGVyID0gTm9uZQorICAgICAgICBpZiByZWFkZXIgIT0gTm9uZToKKyAgICAgICAgICAgIGlmIGV4YyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJlYWRlci5mZWVkX2VvZigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlYWRlci5zZXRfZXhjZXB0aW9uKGV4YykKKworICAgIGRlZiBwcm9jZXNzX2V4aXRlZChzZWxmKToKKyAgICAgICAgIyB3YWtlIHVwIGZ1dHVyZXMgd2FpdGluZyBmb3Igd2FpdCgpCisgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLl90cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUoKQorICAgICAgICB3aGlsZSBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgd2FpdGVyID0gc2VsZi5fd2FpdGVycy5wb3BsZWZ0KCkKKyAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KHJldHVybmNvZGUpCisKKworY2xhc3MgUHJvY2VzczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhbnNwb3J0LCBwcm90b2NvbCwgbG9vcCk6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuc3RkaW4gPSBwcm90b2NvbC5zdGRpbgorICAgICAgICBzZWxmLnN0ZG91dCA9IHByb3RvY29sLnN0ZG91dAorICAgICAgICBzZWxmLnN0ZGVyciA9IHByb3RvY29sLnN0ZGVycgorICAgICAgICBzZWxmLnBpZCA9IHRyYW5zcG9ydC5nZXRfcGlkKCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LmdldF9yZXR1cm5jb2RlKCkKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgIiIiV2FpdCB1bnRpbCB0aGUgcHJvY2VzcyBleGl0IGFuZCByZXR1cm4gdGhlIHByb2Nlc3MgcmV0dXJuIGNvZGUuIiIiCisgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLl90cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUoKQorICAgICAgICBpZiByZXR1cm5jb2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHJldHVybmNvZGUKKworICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX3Byb3RvY29sLl93YWl0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgIHJldHVybiB3YWl0ZXIucmVzdWx0KCkKKworICAgIGRlZiBfY2hlY2tfYWxpdmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3RyYW5zcG9ydC5nZXRfcmV0dXJuY29kZSgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgUHJvY2Vzc0xvb2t1cEVycm9yKCkKKworICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWduYWwpOgorICAgICAgICBzZWxmLl9jaGVja19hbGl2ZSgpCisgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5zZW5kX3NpZ25hbChzaWduYWwpCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19hbGl2ZSgpCisgICAgICAgIHNlbGYuX3RyYW5zcG9ydC50ZXJtaW5hdGUoKQorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2FsaXZlKCkKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0LmtpbGwoKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBfZmVlZF9zdGRpbihzZWxmLCBpbnB1dCk6CisgICAgICAgIHNlbGYuc3RkaW4ud3JpdGUoaW5wdXQpCisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5zdGRpbi5kcmFpbigpCisgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBfbm9vcChzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgX3JlYWRfc3RyZWFtKHNlbGYsIGZkKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fdHJhbnNwb3J0LmdldF9waXBlX3RyYW5zcG9ydChmZCkKKyAgICAgICAgaWYgZmQgPT0gMjoKKyAgICAgICAgICAgIHN0cmVhbSA9IHNlbGYuc3RkZXJyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgZmQgPT0gMQorICAgICAgICAgICAgc3RyZWFtID0gc2VsZi5zdGRvdXQKKyAgICAgICAgb3V0cHV0ID0geWllbGQgZnJvbSBzdHJlYW0ucmVhZCgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY29tbXVuaWNhdGUoc2VsZiwgaW5wdXQ9Tm9uZSk6CisgICAgICAgIGxvb3AgPSBzZWxmLl90cmFuc3BvcnQuX2xvb3AKKyAgICAgICAgaWYgaW5wdXQ6CisgICAgICAgICAgICBzdGRpbiA9IHNlbGYuX2ZlZWRfc3RkaW4oaW5wdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRpbiA9IHNlbGYuX25vb3AoKQorICAgICAgICBpZiBzZWxmLnN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX3JlYWRfc3RyZWFtKDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl9ub29wKCkKKyAgICAgICAgaWYgc2VsZi5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGRlcnIgPSBzZWxmLl9yZWFkX3N0cmVhbSgyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fbm9vcCgpCisgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciA9IHlpZWxkIGZyb20gdGFza3MuZ2F0aGVyKHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgICAgICB5aWVsZCBmcm9tIHNlbGYud2FpdCgpCisgICAgICAgIHJldHVybiAoc3Rkb3V0LCBzdGRlcnIpCisKKworQHRhc2tzLmNvcm91dGluZQorZGVmIGNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsKGNtZCwgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgbGltaXQ9c3RyZWFtcy5fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIHByb3RvY29sX2ZhY3RvcnkgPSBsYW1iZGE6IFN1YnByb2Nlc3NTdHJlYW1Qcm90b2NvbChsaW1pdD1saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSB5aWVsZCBmcm9tIGxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVyciwgKiprd2RzKQorICAgIHlpZWxkIGZyb20gcHJvdG9jb2wud2FpdGVyCisgICAgcmV0dXJuIFByb2Nlc3ModHJhbnNwb3J0LCBwcm90b2NvbCwgbG9vcCkKKworQHRhc2tzLmNvcm91dGluZQorZGVmIGNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMocHJvZ3JhbSwgKmFyZ3MsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgbGltaXQ9c3RyZWFtcy5fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIHByb3RvY29sX2ZhY3RvcnkgPSBsYW1iZGE6IFN1YnByb2Nlc3NTdHJlYW1Qcm90b2NvbChsaW1pdD1saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSB5aWVsZCBmcm9tIGxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbF9mYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLCAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3RkaW4sIHN0ZG91dD1zdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdGRlcnIsICoqa3dkcykKKyAgICB5aWVsZCBmcm9tIHByb3RvY29sLndhaXRlcgorICAgIHJldHVybiBQcm9jZXNzKHRyYW5zcG9ydCwgcHJvdG9jb2wsIGxvb3ApCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby90YXNrcy5weSBiL0xpYi9hc3luY2lvL3Rhc2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZWU3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby90YXNrcy5weQpAQCAtMCwwICsxLDY4MSBAQAorIiIiU3VwcG9ydCBmb3IgdGFza3MsIGNvcm91dGluZXMgYW5kIHRoZSBzY2hlZHVsZXIuIiIiCisKK19fYWxsX18gPSBbJ2Nvcm91dGluZScsICdUYXNrJywKKyAgICAgICAgICAgJ2lzY29yb3V0aW5lZnVuY3Rpb24nLCAnaXNjb3JvdXRpbmUnLAorICAgICAgICAgICAnRklSU1RfQ09NUExFVEVEJywgJ0ZJUlNUX0VYQ0VQVElPTicsICdBTExfQ09NUExFVEVEJywKKyAgICAgICAgICAgJ3dhaXQnLCAnd2FpdF9mb3InLCAnYXNfY29tcGxldGVkJywgJ3NsZWVwJywgJ2FzeW5jJywKKyAgICAgICAgICAgJ2dhdGhlcicsICdzaGllbGQnLAorICAgICAgICAgICBdCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKyMgSWYgeW91IHNldCBfREVCVUcgdG8gdHJ1ZSwgQGNvcm91dGluZSB3aWxsIHdyYXAgdGhlIHJlc3VsdGluZworIyBnZW5lcmF0b3Igb2JqZWN0cyBpbiBhIENvcm9XcmFwcGVyIGluc3RhbmNlIChkZWZpbmVkIGJlbG93KS4gIFRoYXQKKyMgaW5zdGFuY2Ugd2lsbCBsb2cgYSBtZXNzYWdlIHdoZW4gdGhlIGdlbmVyYXRvciBpcyBuZXZlciBpdGVyYXRlZAorIyBvdmVyLCB3aGljaCBtYXkgaGFwcGVuIHdoZW4geW91IGZvcmdldCB0byB1c2UgInlpZWxkIGZyb20iIHdpdGggYQorIyBjb3JvdXRpbmUgY2FsbC4gIE5vdGUgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIF9ERUJVRyBmbGFnIGlzIHRha2VuCisjIHdoZW4gdGhlIGRlY29yYXRvciBpcyB1c2VkLCBzbyB0byBiZSBvZiBhbnkgdXNlIGl0IG11c3QgYmUgc2V0CisjIGJlZm9yZSB5b3UgZGVmaW5lIHlvdXIgY29yb3V0aW5lcy4gIEEgZG93bnNpZGUgb2YgdXNpbmcgdGhpcyBmZWF0dXJlCisjIGlzIHRoYXQgdHJhY2ViYWNrcyBzaG93IGVudHJpZXMgZm9yIHRoZSBDb3JvV3JhcHBlci5fX25leHRfXyBtZXRob2QKKyMgd2hlbiBfREVCVUcgaXMgdHJ1ZS4KK19ERUJVRyA9IEZhbHNlCisKKworY2xhc3MgQ29yb1dyYXBwZXI6CisgICAgIyBXcmFwcGVyIGZvciBjb3JvdXRpbmUgaW4gX0RFQlVHIG1vZGUuCisKKyAgICBfX3Nsb3RzX18gPSBbJ2dlbicsICdmdW5jJywgJ19fbmFtZV9fJywgJ19fZG9jX18nXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdlbiwgZnVuYyk6CisgICAgICAgIGFzc2VydCBpbnNwZWN0LmlzZ2VuZXJhdG9yKGdlbiksIGdlbgorICAgICAgICBzZWxmLmdlbiA9IGdlbgorICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgIHJldHVybiBuZXh0KHNlbGYuZ2VuKQorCisgICAgZGVmIHNlbmQoc2VsZiwgdmFsdWUpOgorICAgICAgICByZXR1cm4gc2VsZi5nZW4uc2VuZCh2YWx1ZSkKKworICAgIGRlZiB0aHJvdyhzZWxmLCBleGMpOgorICAgICAgICByZXR1cm4gc2VsZi5nZW4udGhyb3coZXhjKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5nZW4uY2xvc2UoKQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIGZyYW1lID0gc2VsZi5nZW4uZ2lfZnJhbWUKKyAgICAgICAgaWYgZnJhbWUgaXMgbm90IE5vbmUgYW5kIGZyYW1lLmZfbGFzdGkgPT0gLTE6CisgICAgICAgICAgICBmdW5jID0gc2VsZi5mdW5jCisgICAgICAgICAgICBjb2RlID0gZnVuYy5fX2NvZGVfXworICAgICAgICAgICAgZmlsZW5hbWUgPSBjb2RlLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICBsaW5lbm8gPSBjb2RlLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoCisgICAgICAgICAgICAgICAgJ0Nvcm91dGluZSAlciBkZWZpbmVkIGF0ICVzOiVzIHdhcyBuZXZlciB5aWVsZGVkIGZyb20nLAorICAgICAgICAgICAgICAgIGZ1bmMuX19uYW1lX18sIGZpbGVuYW1lLCBsaW5lbm8pCisKKworZGVmIGNvcm91dGluZShmdW5jKToKKyAgICAiIiJEZWNvcmF0b3IgdG8gbWFyayBjb3JvdXRpbmVzLgorCisgICAgSWYgdGhlIGNvcm91dGluZSBpcyBub3QgeWllbGRlZCBmcm9tIGJlZm9yZSBpdCBpcyBkZXN0cm95ZWQsCisgICAgYW4gZXJyb3IgbWVzc2FnZSBpcyBsb2dnZWQuCisgICAgIiIiCisgICAgaWYgaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9uKGZ1bmMpOgorICAgICAgICBjb3JvID0gZnVuYworICAgIGVsc2U6CisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICAgICAgZGVmIGNvcm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmVzID0gZnVuYygqYXJncywgKiprdykKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzLCBmdXR1cmVzLkZ1dHVyZSkgb3IgaW5zcGVjdC5pc2dlbmVyYXRvcihyZXMpOgorICAgICAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gcmVzCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICBpZiBub3QgX0RFQlVHOgorICAgICAgICB3cmFwcGVyID0gY29ybworICAgIGVsc2U6CisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICAgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICB3ID0gQ29yb1dyYXBwZXIoY29ybygqYXJncywgKiprd2RzKSwgZnVuYykKKyAgICAgICAgICAgIHcuX19uYW1lX18gPSBjb3JvLl9fbmFtZV9fCisgICAgICAgICAgICB3Ll9fZG9jX18gPSBjb3JvLl9fZG9jX18KKyAgICAgICAgICAgIHJldHVybiB3CisKKyAgICB3cmFwcGVyLl9pc19jb3JvdXRpbmUgPSBUcnVlICAjIEZvciBpc2Nvcm91dGluZWZ1bmN0aW9uKCkuCisgICAgcmV0dXJuIHdyYXBwZXIKKworCitkZWYgaXNjb3JvdXRpbmVmdW5jdGlvbihmdW5jKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBmdW5jIGlzIGEgZGVjb3JhdGVkIGNvcm91dGluZSBmdW5jdGlvbi4iIiIKKyAgICByZXR1cm4gZ2V0YXR0cihmdW5jLCAnX2lzX2Nvcm91dGluZScsIEZhbHNlKQorCisKK2RlZiBpc2Nvcm91dGluZShvYmopOgorICAgICIiIlJldHVybiBUcnVlIGlmIG9iaiBpcyBhIGNvcm91dGluZSBvYmplY3QuIiIiCisgICAgcmV0dXJuIGlzaW5zdGFuY2Uob2JqLCBDb3JvV3JhcHBlcikgb3IgaW5zcGVjdC5pc2dlbmVyYXRvcihvYmopCisKKworY2xhc3MgVGFzayhmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiQSBjb3JvdXRpbmUgd3JhcHBlZCBpbiBhIEZ1dHVyZS4iIiIKKworICAgICMgQW4gaW1wb3J0YW50IGludmFyaWFudCBtYWludGFpbmVkIHdoaWxlIGEgVGFzayBub3QgZG9uZToKKyAgICAjCisgICAgIyAtIEVpdGhlciBfZnV0X3dhaXRlciBpcyBOb25lLCBhbmQgX3N0ZXAoKSBpcyBzY2hlZHVsZWQ7CisgICAgIyAtIG9yIF9mdXRfd2FpdGVyIGlzIHNvbWUgRnV0dXJlLCBhbmQgX3N0ZXAoKSBpcyAqbm90KiBzY2hlZHVsZWQuCisgICAgIworICAgICMgVGhlIG9ubHkgdHJhbnNpdGlvbiBmcm9tIHRoZSBsYXR0ZXIgdG8gdGhlIGZvcm1lciBpcyB0aHJvdWdoCisgICAgIyBfd2FrZXVwKCkuICBXaGVuIF9mdXRfd2FpdGVyIGlzIG5vdCBOb25lLCBvbmUgb2YgaXRzIGNhbGxiYWNrcworICAgICMgbXVzdCBiZSBfd2FrZXVwKCkuCisKKyAgICAjIFdlYWsgc2V0IGNvbnRhaW5pbmcgYWxsIHRhc2tzIGFsaXZlLgorICAgIF9hbGxfdGFza3MgPSB3ZWFrcmVmLldlYWtTZXQoKQorCisgICAgIyBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGFza3MgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBpbgorICAgICMgYWxsIHJ1bm5pbmcgZXZlbnQgbG9vcHMuICB7RXZlbnRMb29wOiBUYXNrfQorICAgIF9jdXJyZW50X3Rhc2tzID0ge30KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjdXJyZW50X3Rhc2soY2xzLCBsb29wPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2sgaW4gYW4gZXZlbnQgbG9vcCBvciBOb25lLgorCisgICAgICAgIEJ5IGRlZmF1bHQgdGhlIGN1cnJlbnQgdGFzayBmb3IgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBpcyByZXR1cm5lZC4KKworICAgICAgICBOb25lIGlzIHJldHVybmVkIHdoZW4gY2FsbGVkIG5vdCBpbiB0aGUgY29udGV4dCBvZiBhIFRhc2suCisgICAgICAgICIiIgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgcmV0dXJuIGNscy5fY3VycmVudF90YXNrcy5nZXQobG9vcCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBhbGxfdGFza3MoY2xzLCBsb29wPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gYSBzZXQgb2YgYWxsIHRhc2tzIGZvciBhbiBldmVudCBsb29wLgorCisgICAgICAgIEJ5IGRlZmF1bHQgYWxsIHRhc2tzIGZvciB0aGUgY3VycmVudCBldmVudCBsb29wIGFyZSByZXR1cm5lZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICByZXR1cm4ge3QgZm9yIHQgaW4gY2xzLl9hbGxfdGFza3MgaWYgdC5fbG9vcCBpcyBsb29wfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvcm8sICosIGxvb3A9Tm9uZSk6CisgICAgICAgIGFzc2VydCBpc2Nvcm91dGluZShjb3JvKSwgcmVwcihjb3JvKSAgIyBOb3QgYSBjb3JvdXRpbmUgZnVuY3Rpb24hCisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBzZWxmLl9jb3JvID0gaXRlcihjb3JvKSAgIyBVc2UgdGhlIGl0ZXJhdG9yIGp1c3QgaW4gY2FzZS4KKyAgICAgICAgc2VsZi5fZnV0X3dhaXRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbXVzdF9jYW5jZWwgPSBGYWxzZQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9zdGVwKQorICAgICAgICBzZWxmLl9fY2xhc3NfXy5fYWxsX3Rhc2tzLmFkZChzZWxmKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgaWYgKHNlbGYuX211c3RfY2FuY2VsIGFuZAorICAgICAgICAgICAgc2VsZi5fc3RhdGUgPT0gZnV0dXJlcy5fUEVORElORyBhbmQKKyAgICAgICAgICAgICc8UEVORElORycgaW4gcmVzKToKKyAgICAgICAgICAgIHJlcyA9IHJlcy5yZXBsYWNlKCc8UEVORElORycsICc8Q0FOQ0VMTElORycsIDEpCisgICAgICAgIGkgPSByZXMuZmluZCgnPCcpCisgICAgICAgIGlmIGkgPCAwOgorICAgICAgICAgICAgaSA9IGxlbihyZXMpCisgICAgICAgIHJlcyA9IHJlc1s6aV0gKyAnKDx7fT4pJy5mb3JtYXQoc2VsZi5fY29yby5fX25hbWVfXykgKyByZXNbaTpdCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBnZXRfc3RhY2soc2VsZiwgKiwgbGltaXQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiBzdGFjayBmcmFtZXMgZm9yIHRoaXMgdGFzaydzIGNvcm91dGluZS4KKworICAgICAgICBJZiB0aGUgY29yb3V0aW5lIGlzIGFjdGl2ZSwgdGhpcyByZXR1cm5zIHRoZSBzdGFjayB3aGVyZSBpdCBpcworICAgICAgICBzdXNwZW5kZWQuICBJZiB0aGUgY29yb3V0aW5lIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IG9yIHdhcworICAgICAgICBjYW5jZWxsZWQsIHRoaXMgcmV0dXJucyBhbiBlbXB0eSBsaXN0LiAgSWYgdGhlIGNvcm91dGluZSB3YXMKKyAgICAgICAgdGVybWluYXRlZCBieSBhbiBleGNlcHRpb24sIHRoaXMgcmV0dXJucyB0aGUgbGlzdCBvZiB0cmFjZWJhY2sKKyAgICAgICAgZnJhbWVzLgorCisgICAgICAgIFRoZSBmcmFtZXMgYXJlIGFsd2F5cyBvcmRlcmVkIGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KKworICAgICAgICBUaGUgb3B0aW9uYWwgbGltaXQgZ2l2ZXMgdGhlIG1heGltdW0gbnVtbWJlciBvZiBmcmFtZXMgdG8KKyAgICAgICAgcmV0dXJuOyBieSBkZWZhdWx0IGFsbCBhdmFpbGFibGUgZnJhbWVzIGFyZSByZXR1cm5lZC4gIEl0cworICAgICAgICBtZWFuaW5nIGRpZmZlcnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBzdGFjayBvciBhIHRyYWNlYmFjayBpcworICAgICAgICByZXR1cm5lZDogdGhlIG5ld2VzdCBmcmFtZXMgb2YgYSBzdGFjayBhcmUgcmV0dXJuZWQsIGJ1dCB0aGUKKyAgICAgICAgb2xkZXN0IGZyYW1lcyBvZiBhIHRyYWNlYmFjayBhcmUgcmV0dXJuZWQuICAoVGhpcyBtYXRjaGVzIHRoZQorICAgICAgICBiZWhhdmlvciBvZiB0aGUgdHJhY2ViYWNrIG1vZHVsZS4pCisKKyAgICAgICAgRm9yIHJlYXNvbnMgYmV5b25kIG91ciBjb250cm9sLCBvbmx5IG9uZSBzdGFjayBmcmFtZSBpcworICAgICAgICByZXR1cm5lZCBmb3IgYSBzdXNwZW5kZWQgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgZnJhbWVzID0gW10KKyAgICAgICAgZiA9IHNlbGYuX2Nvcm8uZ2lfZnJhbWUKKyAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdoaWxlIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0IDw9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBsaW1pdCAtPSAxCisgICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmKQorICAgICAgICAgICAgICAgIGYgPSBmLmZfYmFjaworICAgICAgICAgICAgZnJhbWVzLnJldmVyc2UoKQorICAgICAgICBlbGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRiID0gc2VsZi5fZXhjZXB0aW9uLl9fdHJhY2ViYWNrX18KKyAgICAgICAgICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIGxpbWl0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdCA8PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgbGltaXQgLT0gMQorICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQodGIudGJfZnJhbWUpCisgICAgICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisgICAgICAgIHJldHVybiBmcmFtZXMKKworICAgIGRlZiBwcmludF9zdGFjayhzZWxmLCAqLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUpOgorICAgICAgICAiIiJQcmludCB0aGUgc3RhY2sgb3IgdHJhY2ViYWNrIGZvciB0aGlzIHRhc2sncyBjb3JvdXRpbmUuCisKKyAgICAgICAgVGhpcyBwcm9kdWNlcyBvdXRwdXQgc2ltaWxhciB0byB0aGF0IG9mIHRoZSB0cmFjZWJhY2sgbW9kdWxlLAorICAgICAgICBmb3IgdGhlIGZyYW1lcyByZXRyaWV2ZWQgYnkgZ2V0X3N0YWNrKCkuICBUaGUgbGltaXQgYXJndW1lbnQKKyAgICAgICAgaXMgcGFzc2VkIHRvIGdldF9zdGFjaygpLiAgVGhlIGZpbGUgYXJndW1lbnQgaXMgYW4gSS9PIHN0cmVhbQorICAgICAgICB0byB3aGljaCB0aGUgb3V0cHV0IGdvZXM7IGJ5IGRlZmF1bHQgaXQgZ29lcyB0byBzeXMuc3RkZXJyLgorICAgICAgICAiIiIKKyAgICAgICAgZXh0cmFjdGVkX2xpc3QgPSBbXQorICAgICAgICBjaGVja2VkID0gc2V0KCkKKyAgICAgICAgZm9yIGYgaW4gc2VsZi5nZXRfc3RhY2sobGltaXQ9bGltaXQpOgorICAgICAgICAgICAgbGluZW5vID0gZi5mX2xpbmVubworICAgICAgICAgICAgY28gPSBmLmZfY29kZQorICAgICAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQorICAgICAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIG5vdCBpbiBjaGVja2VkOgorICAgICAgICAgICAgICAgIGNoZWNrZWQuYWRkKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQorICAgICAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQorICAgICAgICAgICAgZXh0cmFjdGVkX2xpc3QuYXBwZW5kKChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKSkKKyAgICAgICAgZXhjID0gc2VsZi5fZXhjZXB0aW9uCisgICAgICAgIGlmIG5vdCBleHRyYWN0ZWRfbGlzdDoKKyAgICAgICAgICAgIHByaW50KCdObyBzdGFjayBmb3IgJXInICUgc2VsZiwgZmlsZT1maWxlKQorICAgICAgICBlbGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByaW50KCdUcmFjZWJhY2sgZm9yICVyIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOicgJSBzZWxmLAorICAgICAgICAgICAgICAgICAgZmlsZT1maWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoJ1N0YWNrIGZvciAlciAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonICUgc2VsZiwKKyAgICAgICAgICAgICAgICAgIGZpbGU9ZmlsZSkKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2xpc3QoZXh0cmFjdGVkX2xpc3QsIGZpbGU9ZmlsZSkKKyAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShleGMuX19jbGFzc19fLCBleGMpOgorICAgICAgICAgICAgICAgIHByaW50KGxpbmUsIGZpbGU9ZmlsZSwgZW5kPScnKQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kb25lKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fZnV0X3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX2Z1dF93YWl0ZXIuY2FuY2VsKCk6CisgICAgICAgICAgICAgICAgIyBMZWF2ZSBzZWxmLl9mdXRfd2FpdGVyOyBpdCBtYXkgYmUgYSBUYXNrIHRoYXQKKyAgICAgICAgICAgICAgICAjIGNhdGNoZXMgYW5kIGlnbm9yZXMgdGhlIGNhbmNlbGxhdGlvbiBzbyB3ZSBtYXkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gY2FuY2VsIGl0IGFnYWluIGxhdGVyLgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICMgSXQgbXVzdCBiZSB0aGUgY2FzZSB0aGF0IHNlbGYuX3N0ZXAgaXMgYWxyZWFkeSBzY2hlZHVsZWQuCisgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9zdGVwKHNlbGYsIHZhbHVlPU5vbmUsIGV4Yz1Ob25lKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmRvbmUoKSwgXAorICAgICAgICAgICAgJ19zdGVwKCk6IGFscmVhZHkgZG9uZTogeyFyfSwgeyFyfSwgeyFyfScuZm9ybWF0KHNlbGYsIHZhbHVlLCBleGMpCisgICAgICAgIGlmIHNlbGYuX211c3RfY2FuY2VsOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgICAgICBleGMgPSBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKCkKKyAgICAgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gRmFsc2UKKyAgICAgICAgY29ybyA9IHNlbGYuX2Nvcm8KKyAgICAgICAgc2VsZi5fZnV0X3dhaXRlciA9IE5vbmUKKworICAgICAgICBzZWxmLl9fY2xhc3NfXy5fY3VycmVudF90YXNrc1tzZWxmLl9sb29wXSA9IHNlbGYKKyAgICAgICAgIyBDYWxsIGVpdGhlciBjb3JvLnRocm93KGV4Yykgb3IgY29yby5zZW5kKHZhbHVlKS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcm8udGhyb3coZXhjKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JvLnNlbmQodmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5leHQoY29ybykKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5zZXRfcmVzdWx0KGV4Yy52YWx1ZSkKKyAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc3VwZXIoKS5jYW5jZWwoKSAgIyBJLmUuLCBGdXR1cmUuY2FuY2VsKHNlbGYpLgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIGZ1dHVyZXMuRnV0dXJlKToKKyAgICAgICAgICAgICAgICAjIFlpZWxkZWQgRnV0dXJlIG11c3QgY29tZSBmcm9tIEZ1dHVyZS5fX2l0ZXJfXygpLgorICAgICAgICAgICAgICAgIGlmIHJlc3VsdC5fYmxvY2tpbmc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5fYmxvY2tpbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fd2FrZXVwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9mdXRfd2FpdGVyID0gcmVzdWx0CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX211c3RfY2FuY2VsOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZnV0X3dhaXRlci5jYW5jZWwoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tdXN0X2NhbmNlbCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGVwLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5aWVsZCB3YXMgdXNlZCBpbnN0ZWFkIG9mIHlpZWxkIGZyb20gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0YXNrIHshcn0gd2l0aCB7IXJ9Jy5mb3JtYXQoc2VsZiwgcmVzdWx0KSkpCisgICAgICAgICAgICBlbGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgQmFyZSB5aWVsZCByZWxpbnF1aXNoZXMgY29udHJvbCBmb3Igb25lIGV2ZW50IGxvb3AgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3N0ZXApCisgICAgICAgICAgICBlbGlmIGluc3BlY3QuaXNnZW5lcmF0b3IocmVzdWx0KToKKyAgICAgICAgICAgICAgICAjIFlpZWxkaW5nIGEgZ2VuZXJhdG9yIGlzIGp1c3Qgd3JvbmcuCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZXAsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICd5aWVsZCB3YXMgdXNlZCBpbnN0ZWFkIG9mIHlpZWxkIGZyb20gZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdnZW5lcmF0b3IgaW4gdGFzayB7IXJ9IHdpdGgge30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCByZXN1bHQpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBZaWVsZGluZyBzb21ldGhpbmcgZWxzZSBpcyBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbigKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RlcCwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgJ1Rhc2sgZ290IGJhZCB5aWVsZDogeyFyfScuZm9ybWF0KHJlc3VsdCkpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX2N1cnJlbnRfdGFza3MucG9wKHNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYgPSBOb25lCisKKyAgICBkZWYgX3dha2V1cChzZWxmLCBmdXR1cmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IGZ1dHVyZS5yZXN1bHQoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICMgVGhpcyBtYXkgYWxzbyBiZSBhIGNhbmNlbGxhdGlvbi4KKyAgICAgICAgICAgIHNlbGYuX3N0ZXAoTm9uZSwgZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc3RlcCh2YWx1ZSwgTm9uZSkKKyAgICAgICAgc2VsZiA9IE5vbmUgICMgTmVlZGVkIHRvIGJyZWFrIGN5Y2xlcyB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCisKKworIyB3YWl0KCkgYW5kIGFzX2NvbXBsZXRlZCgpIHNpbWlsYXIgdG8gdGhvc2UgaW4gUEVQIDMxNDguCisKK0ZJUlNUX0NPTVBMRVRFRCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5GSVJTVF9DT01QTEVURUQKK0ZJUlNUX0VYQ0VQVElPTiA9IGNvbmN1cnJlbnQuZnV0dXJlcy5GSVJTVF9FWENFUFRJT04KK0FMTF9DT01QTEVURUQgPSBjb25jdXJyZW50LmZ1dHVyZXMuQUxMX0NPTVBMRVRFRAorCisKK0Bjb3JvdXRpbmUKK2RlZiB3YWl0KGZzLCAqLCBsb29wPU5vbmUsIHRpbWVvdXQ9Tm9uZSwgcmV0dXJuX3doZW49QUxMX0NPTVBMRVRFRCk6CisgICAgIiIiV2FpdCBmb3IgdGhlIEZ1dHVyZXMgYW5kIGNvcm91dGluZXMgZ2l2ZW4gYnkgZnMgdG8gY29tcGxldGUuCisKKyAgICBDb3JvdXRpbmVzIHdpbGwgYmUgd3JhcHBlZCBpbiBUYXNrcy4KKworICAgIFJldHVybnMgdHdvIHNldHMgb2YgRnV0dXJlOiAoZG9uZSwgcGVuZGluZykuCisKKyAgICBVc2FnZToKKworICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSBhc3luY2lvLndhaXQoZnMpCisKKyAgICBOb3RlOiBUaGlzIGRvZXMgbm90IHJhaXNlIFRpbWVvdXRFcnJvciEgRnV0dXJlcyB0aGF0IGFyZW4ndCBkb25lCisgICAgd2hlbiB0aGUgdGltZW91dCBvY2N1cnMgYXJlIHJldHVybmVkIGluIHRoZSBzZWNvbmQgc2V0LgorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoZnMsIGZ1dHVyZXMuRnV0dXJlKSBvciBpc2Nvcm91dGluZShmcyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0IGEgbGlzdCBvZiBmdXR1cmVzLCBub3QgJXMiICUgdHlwZShmcykuX19uYW1lX18pCisgICAgaWYgbm90IGZzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXQgb2YgY29yb3V0aW5lcy9GdXR1cmVzIGlzIGVtcHR5LicpCisKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZnMgPSB7YXN5bmMoZiwgbG9vcD1sb29wKSBmb3IgZiBpbiBzZXQoZnMpfQorCisgICAgaWYgcmV0dXJuX3doZW4gbm90IGluIChGSVJTVF9DT01QTEVURUQsIEZJUlNUX0VYQ0VQVElPTiwgQUxMX0NPTVBMRVRFRCk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgcmV0dXJuX3doZW4gdmFsdWU6IHt9Jy5mb3JtYXQocmV0dXJuX3doZW4pKQorICAgIHJldHVybiAoeWllbGQgZnJvbSBfd2FpdChmcywgdGltZW91dCwgcmV0dXJuX3doZW4sIGxvb3ApKQorCisKK2RlZiBfcmVsZWFzZV93YWl0ZXIod2FpdGVyLCB2YWx1ZT1UcnVlLCAqYXJncyk6CisgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KHZhbHVlKQorCisKK0Bjb3JvdXRpbmUKK2RlZiB3YWl0X2ZvcihmdXQsIHRpbWVvdXQsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV2FpdCBmb3IgdGhlIHNpbmdsZSBGdXR1cmUgb3IgY29yb3V0aW5lIHRvIGNvbXBsZXRlLCB3aXRoIHRpbWVvdXQuCisKKyAgICBDb3JvdXRpbmUgd2lsbCBiZSB3cmFwcGVkIGluIFRhc2suCisKKyAgICBSZXR1cm5zIHJlc3VsdCBvZiB0aGUgRnV0dXJlIG9yIGNvcm91dGluZS4gIFdoZW4gYSB0aW1lb3V0IG9jY3VycywKKyAgICBpdCBjYW5jZWxzIHRoZSB0YXNrIGFuZCByYWlzZXMgVGltZW91dEVycm9yLiAgVG8gYXZvaWQgdGhlIHRhc2sKKyAgICBjYW5jZWxsYXRpb24sIHdyYXAgaXQgaW4gc2hpZWxkKCkuCisKKyAgICBVc2FnZToKKworICAgICAgICByZXN1bHQgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdF9mb3IoZnV0LCAxMC4wKQorCisgICAgIiIiCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dCkKKworICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICB0aW1lb3V0X2hhbmRsZSA9IGxvb3AuY2FsbF9sYXRlcih0aW1lb3V0LCBfcmVsZWFzZV93YWl0ZXIsIHdhaXRlciwgRmFsc2UpCisgICAgY2IgPSBmdW5jdG9vbHMucGFydGlhbChfcmVsZWFzZV93YWl0ZXIsIHdhaXRlciwgVHJ1ZSkKKworICAgIGZ1dCA9IGFzeW5jKGZ1dCwgbG9vcD1sb29wKQorICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhjYikKKworICAgIHRyeToKKyAgICAgICAgaWYgKHlpZWxkIGZyb20gd2FpdGVyKToKKyAgICAgICAgICAgIHJldHVybiBmdXQucmVzdWx0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYikKKyAgICAgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICAgICAgcmFpc2UgZnV0dXJlcy5UaW1lb3V0RXJyb3IoKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbWVvdXRfaGFuZGxlLmNhbmNlbCgpCisKKworQGNvcm91dGluZQorZGVmIF93YWl0KGZzLCB0aW1lb3V0LCByZXR1cm5fd2hlbiwgbG9vcCk6CisgICAgIiIiSW50ZXJuYWwgaGVscGVyIGZvciB3YWl0KCkgYW5kIF93YWl0X2ZvcigpLgorCisgICAgVGhlIGZzIGFyZ3VtZW50IG11c3QgYmUgYSBjb2xsZWN0aW9uIG9mIEZ1dHVyZXMuCisgICAgIiIiCisgICAgYXNzZXJ0IGZzLCAnU2V0IG9mIEZ1dHVyZXMgaXMgZW1wdHkuJworICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICB0aW1lb3V0X2hhbmRsZSA9IE5vbmUKKyAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICB0aW1lb3V0X2hhbmRsZSA9IGxvb3AuY2FsbF9sYXRlcih0aW1lb3V0LCBfcmVsZWFzZV93YWl0ZXIsIHdhaXRlcikKKyAgICBjb3VudGVyID0gbGVuKGZzKQorCisgICAgZGVmIF9vbl9jb21wbGV0aW9uKGYpOgorICAgICAgICBub25sb2NhbCBjb3VudGVyCisgICAgICAgIGNvdW50ZXIgLT0gMQorICAgICAgICBpZiAoY291bnRlciA8PSAwIG9yCisgICAgICAgICAgICByZXR1cm5fd2hlbiA9PSBGSVJTVF9DT01QTEVURUQgb3IKKyAgICAgICAgICAgIHJldHVybl93aGVuID09IEZJUlNUX0VYQ0VQVElPTiBhbmQgKG5vdCBmLmNhbmNlbGxlZCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5leGNlcHRpb24oKSBpcyBub3QgTm9uZSkpOgorICAgICAgICAgICAgaWYgdGltZW91dF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dF9oYW5kbGUuY2FuY2VsKCkKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KEZhbHNlKQorCisgICAgZm9yIGYgaW4gZnM6CisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soX29uX2NvbXBsZXRpb24pCisKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgZmluYWxseToKKyAgICAgICAgaWYgdGltZW91dF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0aW1lb3V0X2hhbmRsZS5jYW5jZWwoKQorCisgICAgZG9uZSwgcGVuZGluZyA9IHNldCgpLCBzZXQoKQorICAgIGZvciBmIGluIGZzOgorICAgICAgICBmLnJlbW92ZV9kb25lX2NhbGxiYWNrKF9vbl9jb21wbGV0aW9uKQorICAgICAgICBpZiBmLmRvbmUoKToKKyAgICAgICAgICAgIGRvbmUuYWRkKGYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwZW5kaW5nLmFkZChmKQorICAgIHJldHVybiBkb25lLCBwZW5kaW5nCisKKworIyBUaGlzIGlzICpub3QqIGEgQGNvcm91dGluZSEgIEl0IGlzIGp1c3QgYW4gaXRlcmF0b3IgKHlpZWxkaW5nIEZ1dHVyZXMpLgorZGVmIGFzX2NvbXBsZXRlZChmcywgKiwgbG9vcD1Ob25lLCB0aW1lb3V0PU5vbmUpOgorICAgICIiIlJldHVybiBhbiBpdGVyYXRvciB3aG9zZSB2YWx1ZXMgYXJlIGNvcm91dGluZXMuCisKKyAgICBXaGVuIHdhaXRpbmcgZm9yIHRoZSB5aWVsZGVkIGNvcm91dGluZXMgeW91J2xsIGdldCB0aGUgcmVzdWx0cyAob3IKKyAgICBleGNlcHRpb25zISkgb2YgdGhlIG9yaWdpbmFsIEZ1dHVyZXMgKG9yIGNvcm91dGluZXMpLCBpbiB0aGUgb3JkZXIKKyAgICBpbiB3aGljaCBhbmQgYXMgc29vbiBhcyB0aGV5IGNvbXBsZXRlLgorCisgICAgVGhpcyBkaWZmZXJzIGZyb20gUEVQIDMxNDg7IHRoZSBwcm9wZXIgd2F5IHRvIHVzZSB0aGlzIGlzOgorCisgICAgICAgIGZvciBmIGluIGFzX2NvbXBsZXRlZChmcyk6CisgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCBmcm9tIGYgICMgVGhlICd5aWVsZCBmcm9tJyBtYXkgcmFpc2UuCisgICAgICAgICAgICAjIFVzZSByZXN1bHQuCisKKyAgICBJZiBhIHRpbWVvdXQgaXMgc3BlY2lmaWVkLCB0aGUgJ3lpZWxkIGZyb20nIHdpbGwgcmFpc2UKKyAgICBUaW1lb3V0RXJyb3Igd2hlbiB0aGUgdGltZW91dCBvY2N1cnMgYmVmb3JlIGFsbCBGdXR1cmVzIGFyZSBkb25lLgorCisgICAgTm90ZTogVGhlIGZ1dHVyZXMgJ2YnIGFyZSBub3QgbmVjZXNzYXJpbHkgbWVtYmVycyBvZiBmcy4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGZzLCBmdXR1cmVzLkZ1dHVyZSkgb3IgaXNjb3JvdXRpbmUoZnMpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdCBhIGxpc3Qgb2YgZnV0dXJlcywgbm90ICVzIiAlIHR5cGUoZnMpLl9fbmFtZV9fKQorICAgIGxvb3AgPSBsb29wIGlmIGxvb3AgaXMgbm90IE5vbmUgZWxzZSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIGRlYWRsaW5lID0gTm9uZSBpZiB0aW1lb3V0IGlzIE5vbmUgZWxzZSBsb29wLnRpbWUoKSArIHRpbWVvdXQKKyAgICB0b2RvID0ge2FzeW5jKGYsIGxvb3A9bG9vcCkgZm9yIGYgaW4gc2V0KGZzKX0KKyAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFF1ZXVlICAjIEltcG9ydCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGltcG9ydCBwcm9ibGVtLgorICAgIGRvbmUgPSBRdWV1ZShsb29wPWxvb3ApCisgICAgdGltZW91dF9oYW5kbGUgPSBOb25lCisKKyAgICBkZWYgX29uX3RpbWVvdXQoKToKKyAgICAgICAgZm9yIGYgaW4gdG9kbzoKKyAgICAgICAgICAgIGYucmVtb3ZlX2RvbmVfY2FsbGJhY2soX29uX2NvbXBsZXRpb24pCisgICAgICAgICAgICBkb25lLnB1dF9ub3dhaXQoTm9uZSkgICMgUXVldWUgYSBkdW1teSB2YWx1ZSBmb3IgX3dhaXRfZm9yX29uZSgpLgorICAgICAgICB0b2RvLmNsZWFyKCkgICMgQ2FuJ3QgZG8gdG9kby5yZW1vdmUoZikgaW4gdGhlIGxvb3AuCisKKyAgICBkZWYgX29uX2NvbXBsZXRpb24oZik6CisgICAgICAgIGlmIG5vdCB0b2RvOgorICAgICAgICAgICAgcmV0dXJuICAjIF9vbl90aW1lb3V0KCkgd2FzIGhlcmUgZmlyc3QuCisgICAgICAgIHRvZG8ucmVtb3ZlKGYpCisgICAgICAgIGRvbmUucHV0X25vd2FpdChmKQorICAgICAgICBpZiBub3QgdG9kbyBhbmQgdGltZW91dF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0aW1lb3V0X2hhbmRsZS5jYW5jZWwoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfd2FpdF9mb3Jfb25lKCk6CisgICAgICAgIGYgPSB5aWVsZCBmcm9tIGRvbmUuZ2V0KCkKKyAgICAgICAgaWYgZiBpcyBOb25lOgorICAgICAgICAgICAgIyBEdW1teSB2YWx1ZSBmcm9tIF9vbl90aW1lb3V0KCkuCisgICAgICAgICAgICByYWlzZSBmdXR1cmVzLlRpbWVvdXRFcnJvcgorICAgICAgICByZXR1cm4gZi5yZXN1bHQoKSAgIyBNYXkgcmFpc2UgZi5leGNlcHRpb24oKS4KKworICAgIGZvciBmIGluIHRvZG86CisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soX29uX2NvbXBsZXRpb24pCisgICAgaWYgdG9kbyBhbmQgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgdGltZW91dF9oYW5kbGUgPSBsb29wLmNhbGxfbGF0ZXIodGltZW91dCwgX29uX3RpbWVvdXQpCisgICAgZm9yIF8gaW4gcmFuZ2UobGVuKHRvZG8pKToKKyAgICAgICAgeWllbGQgX3dhaXRfZm9yX29uZSgpCisKKworQGNvcm91dGluZQorZGVmIHNsZWVwKGRlbGF5LCByZXN1bHQ9Tm9uZSwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJDb3JvdXRpbmUgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgYSBnaXZlbiB0aW1lIChpbiBzZWNvbmRzKS4iIiIKKyAgICBmdXR1cmUgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgaCA9IGZ1dHVyZS5fbG9vcC5jYWxsX2xhdGVyKGRlbGF5LCBmdXR1cmUuc2V0X3Jlc3VsdCwgcmVzdWx0KQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dHVyZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBoLmNhbmNlbCgpCisKKworZGVmIGFzeW5jKGNvcm9fb3JfZnV0dXJlLCAqLCBsb29wPU5vbmUpOgorICAgICIiIldyYXAgYSBjb3JvdXRpbmUgaW4gYSBmdXR1cmUuCisKKyAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBGdXR1cmUsIGl0IGlzIHJldHVybmVkIGRpcmVjdGx5LgorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoY29yb19vcl9mdXR1cmUsIGZ1dHVyZXMuRnV0dXJlKToKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZSBhbmQgbG9vcCBpcyBub3QgY29yb19vcl9mdXR1cmUuX2xvb3A6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdsb29wIGFyZ3VtZW50IG11c3QgYWdyZWUgd2l0aCBGdXR1cmUnKQorICAgICAgICByZXR1cm4gY29yb19vcl9mdXR1cmUKKyAgICBlbGlmIGlzY29yb3V0aW5lKGNvcm9fb3JfZnV0dXJlKToKKyAgICAgICAgcmV0dXJuIFRhc2soY29yb19vcl9mdXR1cmUsIGxvb3A9bG9vcCkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0EgRnV0dXJlIG9yIGNvcm91dGluZSBpcyByZXF1aXJlZCcpCisKKworY2xhc3MgX0dhdGhlcmluZ0Z1dHVyZShmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiSGVscGVyIGZvciBnYXRoZXIoKS4KKworICAgIFRoaXMgb3ZlcnJpZGVzIGNhbmNlbCgpIHRvIGNhbmNlbCBhbGwgdGhlIGNoaWxkcmVuIGFuZCBhY3QgbW9yZQorICAgIGxpa2UgVGFzay5jYW5jZWwoKSwgd2hpY2ggZG9lc24ndCBpbW1lZGlhdGVseSBtYXJrIGl0c2VsZiBhcworICAgIGNhbmNlbGxlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGlsZHJlbiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX2NoaWxkcmVuID0gY2hpbGRyZW4KKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZG9uZSgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLl9jaGlsZHJlbjoKKyAgICAgICAgICAgIGNoaWxkLmNhbmNlbCgpCisgICAgICAgIHJldHVybiBUcnVlCisKKworZGVmIGdhdGhlcigqY29yb3Nfb3JfZnV0dXJlcywgbG9vcD1Ob25lLCByZXR1cm5fZXhjZXB0aW9ucz1GYWxzZSk6CisgICAgIiIiUmV0dXJuIGEgZnV0dXJlIGFnZ3JlZ2F0aW5nIHJlc3VsdHMgZnJvbSB0aGUgZ2l2ZW4gY29yb3V0aW5lcworICAgIG9yIGZ1dHVyZXMuCisKKyAgICBBbGwgZnV0dXJlcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGV2ZW50IGxvb3AuICBJZiBhbGwgdGhlIHRhc2tzIGFyZQorICAgIGRvbmUgc3VjY2Vzc2Z1bGx5LCB0aGUgcmV0dXJuZWQgZnV0dXJlJ3MgcmVzdWx0IGlzIHRoZSBsaXN0IG9mCisgICAgcmVzdWx0cyAoaW4gdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSwgbm90IG5lY2Vzc2FyaWx5CisgICAgdGhlIG9yZGVyIG9mIHJlc3VsdHMgYXJyaXZhbCkuICBJZiAqcmV0dXJuX2V4Y2VwdGlvbnMqIGlzIFRydWUsCisgICAgZXhjZXB0aW9ucyBpbiB0aGUgdGFza3MgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgc3VjY2Vzc2Z1bAorICAgIHJlc3VsdHMsIGFuZCBnYXRoZXJlZCBpbiB0aGUgcmVzdWx0IGxpc3Q7IG90aGVyd2lzZSwgdGhlIGZpcnN0CisgICAgcmFpc2VkIGV4Y2VwdGlvbiB3aWxsIGJlIGltbWVkaWF0ZWx5IHByb3BhZ2F0ZWQgdG8gdGhlIHJldHVybmVkCisgICAgZnV0dXJlLgorCisgICAgQ2FuY2VsbGF0aW9uOiBpZiB0aGUgb3V0ZXIgRnV0dXJlIGlzIGNhbmNlbGxlZCwgYWxsIGNoaWxkcmVuICh0aGF0CisgICAgaGF2ZSBub3QgY29tcGxldGVkIHlldCkgYXJlIGFsc28gY2FuY2VsbGVkLiAgSWYgYW55IGNoaWxkIGlzCisgICAgY2FuY2VsbGVkLCB0aGlzIGlzIHRyZWF0ZWQgYXMgaWYgaXQgcmFpc2VkIENhbmNlbGxlZEVycm9yIC0tCisgICAgdGhlIG91dGVyIEZ1dHVyZSBpcyAqbm90KiBjYW5jZWxsZWQgaW4gdGhpcyBjYXNlLiAgKFRoaXMgaXMgdG8KKyAgICBwcmV2ZW50IHRoZSBjYW5jZWxsYXRpb24gb2Ygb25lIGNoaWxkIHRvIGNhdXNlIG90aGVyIGNoaWxkcmVuIHRvCisgICAgYmUgY2FuY2VsbGVkLikKKyAgICAiIiIKKyAgICBhcmdfdG9fZnV0ID0ge2FyZzogYXN5bmMoYXJnLCBsb29wPWxvb3ApIGZvciBhcmcgaW4gc2V0KGNvcm9zX29yX2Z1dHVyZXMpfQorICAgIGNoaWxkcmVuID0gW2FyZ190b19mdXRbYXJnXSBmb3IgYXJnIGluIGNvcm9zX29yX2Z1dHVyZXNdCisgICAgbiA9IGxlbihjaGlsZHJlbikKKyAgICBpZiBuID09IDA6CisgICAgICAgIG91dGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBvdXRlci5zZXRfcmVzdWx0KFtdKQorICAgICAgICByZXR1cm4gb3V0ZXIKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBjaGlsZHJlblswXS5fbG9vcAorICAgIGZvciBmdXQgaW4gY2hpbGRyZW46CisgICAgICAgIGlmIGZ1dC5fbG9vcCBpcyBub3QgbG9vcDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZ1dHVyZXMgYXJlIHRpZWQgdG8gZGlmZmVyZW50IGV2ZW50IGxvb3BzIikKKyAgICBvdXRlciA9IF9HYXRoZXJpbmdGdXR1cmUoY2hpbGRyZW4sIGxvb3A9bG9vcCkKKyAgICBuZmluaXNoZWQgPSAwCisgICAgcmVzdWx0cyA9IFtOb25lXSAqIG4KKworICAgIGRlZiBfZG9uZV9jYWxsYmFjayhpLCBmdXQpOgorICAgICAgICBub25sb2NhbCBuZmluaXNoZWQKKyAgICAgICAgaWYgb3V0ZXIuX3N0YXRlICE9IGZ1dHVyZXMuX1BFTkRJTkc6CisgICAgICAgICAgICBpZiBmdXQuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIE1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4KKyAgICAgICAgICAgICAgICBmdXQuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBmdXQuX3N0YXRlID09IGZ1dHVyZXMuX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJlcyA9IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IoKQorICAgICAgICAgICAgaWYgbm90IHJldHVybl9leGNlcHRpb25zOgorICAgICAgICAgICAgICAgIG91dGVyLnNldF9leGNlcHRpb24ocmVzKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbGlmIGZ1dC5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzID0gZnV0LmV4Y2VwdGlvbigpICAjIE1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4KKyAgICAgICAgICAgIGlmIG5vdCByZXR1cm5fZXhjZXB0aW9uczoKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKHJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcyA9IGZ1dC5fcmVzdWx0CisgICAgICAgIHJlc3VsdHNbaV0gPSByZXMKKyAgICAgICAgbmZpbmlzaGVkICs9IDEKKyAgICAgICAgaWYgbmZpbmlzaGVkID09IG46CisgICAgICAgICAgICBvdXRlci5zZXRfcmVzdWx0KHJlc3VsdHMpCisKKyAgICBmb3IgaSwgZnV0IGluIGVudW1lcmF0ZShjaGlsZHJlbik6CisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhmdW5jdG9vbHMucGFydGlhbChfZG9uZV9jYWxsYmFjaywgaSkpCisgICAgcmV0dXJuIG91dGVyCisKKworZGVmIHNoaWVsZChhcmcsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV2FpdCBmb3IgYSBmdXR1cmUsIHNoaWVsZGluZyBpdCBmcm9tIGNhbmNlbGxhdGlvbi4KKworICAgIFRoZSBzdGF0ZW1lbnQKKworICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKworICAgIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byB0aGUgc3RhdGVtZW50CisKKyAgICAgICAgcmVzID0geWllbGQgZnJvbSBzb21ldGhpbmcoKQorCisgICAgKmV4Y2VwdCogdGhhdCBpZiB0aGUgY29yb3V0aW5lIGNvbnRhaW5pbmcgaXQgaXMgY2FuY2VsbGVkLCB0aGUKKyAgICB0YXNrIHJ1bm5pbmcgaW4gc29tZXRoaW5nKCkgaXMgbm90IGNhbmNlbGxlZC4gIEZyb20gdGhlIFBPViBvZgorICAgIHNvbWV0aGluZygpLCB0aGUgY2FuY2VsbGF0aW9uIGRpZCBub3QgaGFwcGVuLiAgQnV0IGl0cyBjYWxsZXIgaXMKKyAgICBzdGlsbCBjYW5jZWxsZWQsIHNvIHRoZSB5aWVsZC1mcm9tIGV4cHJlc3Npb24gc3RpbGwgcmFpc2VzCisgICAgQ2FuY2VsbGVkRXJyb3IuICBOb3RlOiBJZiBzb21ldGhpbmcoKSBpcyBjYW5jZWxsZWQgYnkgb3RoZXIgbWVhbnMKKyAgICB0aGlzIHdpbGwgc3RpbGwgY2FuY2VsIHNoaWVsZCgpLgorCisgICAgSWYgeW91IHdhbnQgdG8gY29tcGxldGVseSBpZ25vcmUgY2FuY2VsbGF0aW9uIChub3QgcmVjb21tZW5kZWQpCisgICAgeW91IGNhbiBjb21iaW5lIHNoaWVsZCgpIHdpdGggYSB0cnkvZXhjZXB0IGNsYXVzZSwgYXMgZm9sbG93czoKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKyAgICAgICAgZXhjZXB0IENhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICIiIgorICAgIGlubmVyID0gYXN5bmMoYXJnLCBsb29wPWxvb3ApCisgICAgaWYgaW5uZXIuZG9uZSgpOgorICAgICAgICAjIFNob3J0Y3V0LgorICAgICAgICByZXR1cm4gaW5uZXIKKyAgICBsb29wID0gaW5uZXIuX2xvb3AKKyAgICBvdXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBfZG9uZV9jYWxsYmFjayhpbm5lcik6CisgICAgICAgIGlmIG91dGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgIyBNYXJrIGlubmVyJ3MgcmVzdWx0IGFzIHJldHJpZXZlZC4KKyAgICAgICAgICAgIGlubmVyLmNhbmNlbGxlZCgpIG9yIGlubmVyLmV4Y2VwdGlvbigpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgaW5uZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICBvdXRlci5jYW5jZWwoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhjID0gaW5uZXIuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0ZXIuc2V0X3Jlc3VsdChpbm5lci5yZXN1bHQoKSkKKworICAgIGlubmVyLmFkZF9kb25lX2NhbGxiYWNrKF9kb25lX2NhbGxiYWNrKQorICAgIHJldHVybiBvdXRlcgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdGVzdF91dGlscy5weSBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhYjdjMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKQEAgLTAsMCArMSwyNzkgQEAKKyIiIlV0aWxpdGllcyBzaGFyZWQgYnkgdGVzdHMuIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworZnJvbSB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIgaW1wb3J0IG1ha2Vfc2VydmVyLCBXU0dJUmVxdWVzdEhhbmRsZXIsIFdTR0lTZXJ2ZXIKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICBzc2wgPSBOb25lCisKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLiBpbXBvcnQgYmFzZV9ldmVudHMKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9ycworCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgZnJvbSAud2luZG93c191dGlscyBpbXBvcnQgc29ja2V0cGFpcgorZWxzZToKKyAgICBmcm9tIHNvY2tldCBpbXBvcnQgc29ja2V0cGFpciAgIyBwcmFnbWE6IG5vIGNvdmVyCisKKworZGVmIGR1bW15X3NzbF9jb250ZXh0KCk6CisgICAgaWYgc3NsIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisKKworZGVmIHJ1bl9icmllZmx5KGxvb3ApOgorICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgb25jZSgpOgorICAgICAgICBwYXNzCisgICAgZ2VuID0gb25jZSgpCisgICAgdCA9IHRhc2tzLlRhc2soZ2VuLCBsb29wPWxvb3ApCisgICAgdHJ5OgorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgIGZpbmFsbHk6CisgICAgICAgIGdlbi5jbG9zZSgpCisKKworZGVmIHJ1bl91bnRpbChsb29wLCBwcmVkLCB0aW1lb3V0PU5vbmUpOgorICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CisgICAgd2hpbGUgbm90IHByZWQoKToKKyAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICBpZiB0aW1lb3V0IDw9IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5zbGVlcCh0aW1lb3V0LCBsb29wPWxvb3ApKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcnVuX2JyaWVmbHkobG9vcCkKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBydW5fb25jZShsb29wKToKKyAgICAiIiJsb29wLnN0b3AoKSBzY2hlZHVsZXMgX3JhaXNlX3N0b3BfZXJyb3IoKQorICAgIGFuZCBydW5fZm9yZXZlcigpIHJ1bnMgdW50aWwgX3JhaXNlX3N0b3BfZXJyb3IoKSBjYWxsYmFjay4KKyAgICB0aGlzIHdvbnQgd29yayBpZiB0ZXN0IHdhaXRzIGZvciBzb21lIElPIGV2ZW50cywgYmVjYXVzZQorICAgIF9yYWlzZV9zdG9wX2Vycm9yKCkgcnVucyBiZWZvcmUgYW55IG9mIGlvIGV2ZW50cyBjYWxsYmFja3MuCisgICAgIiIiCisgICAgbG9vcC5zdG9wKCkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHJ1bl90ZXN0X3NlcnZlcigqLCBob3N0PScxMjcuMC4wLjEnLCBwb3J0PTAsIHVzZV9zc2w9RmFsc2UpOgorCisgICAgY2xhc3MgU2lsZW50V1NHSVJlcXVlc3RIYW5kbGVyKFdTR0lSZXF1ZXN0SGFuZGxlcik6CisgICAgICAgIGRlZiBnZXRfc3RkZXJyKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIGlvLlN0cmluZ0lPKCkKKworICAgICAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBjbGFzcyBTaWxlbnRXU0dJU2VydmVyKFdTR0lTZXJ2ZXIpOgorICAgICAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGNsYXNzIFNTTFdTR0lTZXJ2ZXIoU2lsZW50V1NHSVNlcnZlcik6CisgICAgICAgIGRlZiBmaW5pc2hfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgICAgICAjIFRoZSByZWxhdGl2ZSBsb2NhdGlvbiBvZiBvdXIgdGVzdCBkaXJlY3RvcnkgKHdoaWNoCisgICAgICAgICAgICAjIGNvbnRhaW5zIHRoZSBzc2wga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmaWxlcykgZGlmZmVycworICAgICAgICAgICAgIyBiZXR3ZWVuIHRoZSBzdGRsaWIgYW5kIHN0YW5kLWFsb25lIGFzeW5jaW8uCisgICAgICAgICAgICAjIFByZWZlciBvdXIgb3duIGlmIHdlIGNhbiBmaW5kIGl0LgorICAgICAgICAgICAgaGVyZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nLCAndGVzdHMnKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaGVyZSk6CisgICAgICAgICAgICAgICAgaGVyZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MuX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QnLCAndGVzdF9hc3luY2lvJykKKyAgICAgICAgICAgIGtleWZpbGUgPSBvcy5wYXRoLmpvaW4oaGVyZSwgJ3NzbF9rZXkucGVtJykKKyAgICAgICAgICAgIGNlcnRmaWxlID0gb3MucGF0aC5qb2luKGhlcmUsICdzc2xfY2VydC5wZW0nKQorICAgICAgICAgICAgc3NvY2sgPSBzc2wud3JhcF9zb2NrZXQocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9VHJ1ZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLlJlcXVlc3RIYW5kbGVyQ2xhc3Moc3NvY2ssIGNsaWVudF9hZGRyZXNzLCBzZWxmKQorICAgICAgICAgICAgICAgIHNzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgbWF5YmUgc29ja2V0IGhhcyBiZWVuIGNsb3NlZCBieSBwZWVyCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGFwcChlbnZpcm9uLCBzdGFydF9yZXNwb25zZSk6CisgICAgICAgIHN0YXR1cyA9ICcyMDAgT0snCisgICAgICAgIGhlYWRlcnMgPSBbKCdDb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbicpXQorICAgICAgICBzdGFydF9yZXNwb25zZShzdGF0dXMsIGhlYWRlcnMpCisgICAgICAgIHJldHVybiBbYidUZXN0IG1lc3NhZ2UnXQorCisgICAgIyBSdW4gdGhlIHRlc3QgV1NHSSBzZXJ2ZXIgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgaW4gb3JkZXIgbm90IHRvCisgICAgIyBpbnRlcmZlcmUgd2l0aCBldmVudCBoYW5kbGluZyBpbiB0aGUgbWFpbiB0aHJlYWQKKyAgICBzZXJ2ZXJfY2xhc3MgPSBTU0xXU0dJU2VydmVyIGlmIHVzZV9zc2wgZWxzZSBTaWxlbnRXU0dJU2VydmVyCisgICAgaHR0cGQgPSBtYWtlX3NlcnZlcihob3N0LCBwb3J0LCBhcHAsCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfY2xhc3MsIFNpbGVudFdTR0lSZXF1ZXN0SGFuZGxlcikKKyAgICBodHRwZC5hZGRyZXNzID0gaHR0cGQuc2VydmVyX2FkZHJlc3MKKyAgICBzZXJ2ZXJfdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9aHR0cGQuc2VydmVfZm9yZXZlcikKKyAgICBzZXJ2ZXJfdGhyZWFkLnN0YXJ0KCkKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIGh0dHBkCisgICAgZmluYWxseToKKyAgICAgICAgaHR0cGQuc2h1dGRvd24oKQorICAgICAgICBodHRwZC5zZXJ2ZXJfY2xvc2UoKQorICAgICAgICBzZXJ2ZXJfdGhyZWFkLmpvaW4oKQorCisKK2RlZiBtYWtlX3Rlc3RfcHJvdG9jb2woYmFzZSk6CisgICAgZGN0ID0ge30KKyAgICBmb3IgbmFtZSBpbiBkaXIoYmFzZSk6CisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnX18nKSBhbmQgbmFtZS5lbmRzd2l0aCgnX18nKToKKyAgICAgICAgICAgICMgc2tpcCBtYWdpYyBuYW1lcworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZGN0W25hbWVdID0gTW9ja0NhbGxiYWNrKHJldHVybl92YWx1ZT1Ob25lKQorICAgIHJldHVybiB0eXBlKCdUZXN0UHJvdG9jb2wnLCAoYmFzZSwpICsgYmFzZS5fX2Jhc2VzX18sIGRjdCkoKQorCisKK2NsYXNzIFRlc3RTZWxlY3RvcihzZWxlY3RvcnMuQmFzZVNlbGVjdG9yKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5rZXlzID0ge30KKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgIGtleSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleShmaWxlb2JqLCAwLCBldmVudHMsIGRhdGEpCisgICAgICAgIHNlbGYua2V5c1tmaWxlb2JqXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2V5cy5wb3AoZmlsZW9iaikKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dCk6CisgICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIGdldF9tYXAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmtleXMKKworCitjbGFzcyBUZXN0TG9vcChiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKToKKyAgICAiIiJMb29wIGZvciB1bml0dGVzdHMuCisKKyAgICBJdCBtYW5hZ2VzIHNlbGYgdGltZSBkaXJlY3RseS4KKyAgICBJZiBzb21ldGhpbmcgc2NoZWR1bGVkIHRvIGJlIGV4ZWN1dGVkIGxhdGVyIHRoZW4KKyAgICBvbiBuZXh0IGxvb3AgaXRlcmF0aW9uIGFmdGVyIGFsbCByZWFkeSBoYW5kbGVycyBkb25lCisgICAgZ2VuZXJhdG9yIHBhc3NlZCB0byBfX2luaXRfXyBpcyBjYWxsaW5nLgorCisgICAgR2VuZXJhdG9yIHNob3VsZCBiZSBsaWtlIHRoaXM6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICB3aGVuID0geWllbGQgLi4uCisgICAgICAgICAgICAuLi4gPSB5aWVsZCB0aW1lX2FkdmFuY2UKKworICAgIFZhbHVlIHJldHVuZWQgYnkgeWllbGQgaXMgYWJzb2x1dGUgdGltZSBvZiBuZXh0IHNjaGVkdWxlZCBoYW5kbGVyLgorICAgIFZhbHVlIHBhc3NlZCB0byB5aWVsZCBpcyB0aW1lIGFkdmFuY2UgdG8gbW92ZSBsb29wJ3MgdGltZSBmb3J3YXJkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdlbj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisKKyAgICAgICAgaWYgZ2VuIGlzIE5vbmU6CisgICAgICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX29uX2Nsb3NlID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX29uX2Nsb3NlID0gVHJ1ZQorCisgICAgICAgIHNlbGYuX2dlbiA9IGdlbigpCisgICAgICAgIG5leHQoc2VsZi5fZ2VuKQorICAgICAgICBzZWxmLl90aW1lID0gMAorICAgICAgICBzZWxmLl9jbG9ja19yZXNvbHV0aW9uID0gMWUtOQorICAgICAgICBzZWxmLl90aW1lcnMgPSBbXQorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IFRlc3RTZWxlY3RvcigpCisKKyAgICAgICAgc2VsZi5yZWFkZXJzID0ge30KKyAgICAgICAgc2VsZi53cml0ZXJzID0ge30KKyAgICAgICAgc2VsZi5yZXNldF9jb3VudGVycygpCisKKyAgICBkZWYgdGltZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWUKKworICAgIGRlZiBhZHZhbmNlX3RpbWUoc2VsZiwgYWR2YW5jZSk6CisgICAgICAgICIiIk1vdmUgdGVzdCB0aW1lIGZvcndhcmQuIiIiCisgICAgICAgIGlmIGFkdmFuY2U6CisgICAgICAgICAgICBzZWxmLl90aW1lICs9IGFkdmFuY2UKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2hlY2tfb25fY2xvc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZ2VuLnNlbmQoMCkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVGltZSBnZW5lcmF0b3IgaXMgbm90IGZpbmlzaGVkIikKKworICAgIGRlZiBhZGRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLnJlYWRlcnNbZmRdID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncykKKworICAgIGRlZiByZW1vdmVfcmVhZGVyKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyX2NvdW50W2ZkXSArPSAxCisgICAgICAgIGlmIGZkIGluIHNlbGYucmVhZGVyczoKKyAgICAgICAgICAgIGRlbCBzZWxmLnJlYWRlcnNbZmRdCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYXNzZXJ0X3JlYWRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgYXNzZXJ0IGZkIGluIHNlbGYucmVhZGVycywgJ2ZkIHt9IGlzIG5vdCByZWdpc3RlcmVkJy5mb3JtYXQoZmQpCisgICAgICAgIGhhbmRsZSA9IHNlbGYucmVhZGVyc1tmZF0KKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fY2FsbGJhY2sgPT0gY2FsbGJhY2ssICd7IXJ9ICE9IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgIGhhbmRsZS5fY2FsbGJhY2ssIGNhbGxiYWNrKQorICAgICAgICBhc3NlcnQgaGFuZGxlLl9hcmdzID09IGFyZ3MsICd7IXJ9ICE9IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgIGhhbmRsZS5fYXJncywgYXJncykKKworICAgIGRlZiBhZGRfd3JpdGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLndyaXRlcnNbZmRdID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncykKKworICAgIGRlZiByZW1vdmVfd3JpdGVyKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyX2NvdW50W2ZkXSArPSAxCisgICAgICAgIGlmIGZkIGluIHNlbGYud3JpdGVyczoKKyAgICAgICAgICAgIGRlbCBzZWxmLndyaXRlcnNbZmRdCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYXNzZXJ0X3dyaXRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgYXNzZXJ0IGZkIGluIHNlbGYud3JpdGVycywgJ2ZkIHt9IGlzIG5vdCByZWdpc3RlcmVkJy5mb3JtYXQoZmQpCisgICAgICAgIGhhbmRsZSA9IHNlbGYud3JpdGVyc1tmZF0KKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fY2FsbGJhY2sgPT0gY2FsbGJhY2ssICd7IXJ9ICE9IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgIGhhbmRsZS5fY2FsbGJhY2ssIGNhbGxiYWNrKQorICAgICAgICBhc3NlcnQgaGFuZGxlLl9hcmdzID09IGFyZ3MsICd7IXJ9ICE9IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgIGhhbmRsZS5fYXJncywgYXJncykKKworICAgIGRlZiByZXNldF9jb3VudGVycyhzZWxmKToKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyX2NvdW50ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoaW50KQorICAgICAgICBzZWxmLnJlbW92ZV93cml0ZXJfY291bnQgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChpbnQpCisKKyAgICBkZWYgX3J1bl9vbmNlKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9ydW5fb25jZSgpCisgICAgICAgIGZvciB3aGVuIGluIHNlbGYuX3RpbWVyczoKKyAgICAgICAgICAgIGFkdmFuY2UgPSBzZWxmLl9nZW4uc2VuZCh3aGVuKQorICAgICAgICAgICAgc2VsZi5hZHZhbmNlX3RpbWUoYWR2YW5jZSkKKyAgICAgICAgc2VsZi5fdGltZXJzID0gW10KKworICAgIGRlZiBjYWxsX2F0KHNlbGYsIHdoZW4sIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHNlbGYuX3RpbWVycy5hcHBlbmQod2hlbikKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuY2FsbF9hdCh3aGVuLCBjYWxsYmFjaywgKmFyZ3MpCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgcGFzcworCitkZWYgTW9ja0NhbGxiYWNrKCoqa3dhcmdzKToKKyAgICByZXR1cm4gdW5pdHRlc3QubW9jay5Nb2NrKHNwZWM9WydfX2NhbGxfXyddLCAqKmt3YXJncykKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3RyYW5zcG9ydHMucHkgYi9MaWIvYXN5bmNpby90cmFuc3BvcnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YWU3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby90cmFuc3BvcnRzLnB5CkBAIC0wLDAgKzEsMjIxIEBACisiIiJBYnN0cmFjdCBUcmFuc3BvcnQgY2xhc3MuIiIiCisKK2ltcG9ydCBzeXMKKworX1BZMzQgPSBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA0KQorCitfX2FsbF9fID0gWydCYXNlVHJhbnNwb3J0JywgJ1JlYWRUcmFuc3BvcnQnLCAnV3JpdGVUcmFuc3BvcnQnLAorICAgICAgICAgICAnVHJhbnNwb3J0JywgJ0RhdGFncmFtVHJhbnNwb3J0JywgJ1N1YnByb2Nlc3NUcmFuc3BvcnQnLAorICAgICAgICAgICBdCisKKworY2xhc3MgQmFzZVRyYW5zcG9ydDoKKyAgICAiIiJCYXNlIGNsYXNzIGZvciB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4dHJhPU5vbmUpOgorICAgICAgICBpZiBleHRyYSBpcyBOb25lOgorICAgICAgICAgICAgZXh0cmEgPSB7fQorICAgICAgICBzZWxmLl9leHRyYSA9IGV4dHJhCisKKyAgICBkZWYgZ2V0X2V4dHJhX2luZm8oc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiR2V0IG9wdGlvbmFsIHRyYW5zcG9ydCBpbmZvcm1hdGlvbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4dHJhLmdldChuYW1lLCBkZWZhdWx0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIEJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBmbHVzaGVkIGFzeW5jaHJvbm91c2x5LiAgTm8gbW9yZSBkYXRhCisgICAgICAgIHdpbGwgYmUgcmVjZWl2ZWQuICBBZnRlciBhbGwgYnVmZmVyZWQgZGF0YSBpcyBmbHVzaGVkLCB0aGUKKyAgICAgICAgcHJvdG9jb2wncyBjb25uZWN0aW9uX2xvc3QoKSBtZXRob2Qgd2lsbCAoZXZlbnR1YWxseSkgY2FsbGVkCisgICAgICAgIHdpdGggTm9uZSBhcyBpdHMgYXJndW1lbnQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgUmVhZFRyYW5zcG9ydChCYXNlVHJhbnNwb3J0KToKKyAgICAiIiJJbnRlcmZhY2UgZm9yIHJlYWQtb25seSB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgICIiIlBhdXNlIHRoZSByZWNlaXZpbmcgZW5kLgorCisgICAgICAgIE5vIGRhdGEgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHByb3RvY29sJ3MgZGF0YV9yZWNlaXZlZCgpCisgICAgICAgIG1ldGhvZCB1bnRpbCByZXN1bWVfcmVhZGluZygpIGlzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIiIiUmVzdW1lIHRoZSByZWNlaXZpbmcgZW5kLgorCisgICAgICAgIERhdGEgcmVjZWl2ZWQgd2lsbCBvbmNlIGFnYWluIGJlIHBhc3NlZCB0byB0aGUgcHJvdG9jb2wncworICAgICAgICBkYXRhX3JlY2VpdmVkKCkgbWV0aG9kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFdyaXRlVHJhbnNwb3J0KEJhc2VUcmFuc3BvcnQpOgorICAgICIiIkludGVyZmFjZSBmb3Igd3JpdGUtb25seSB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIHNldF93cml0ZV9idWZmZXJfbGltaXRzKHNlbGYsIGhpZ2g9Tm9uZSwgbG93PU5vbmUpOgorICAgICAgICAiIiJTZXQgdGhlIGhpZ2gtIGFuZCBsb3ctd2F0ZXIgbGltaXRzIGZvciB3cml0ZSBmbG93IGNvbnRyb2wuCisKKyAgICAgICAgVGhlc2UgdHdvIHZhbHVlcyBjb250cm9sIHdoZW4gdG8gY2FsbCB0aGUgcHJvdG9jb2wncworICAgICAgICBwYXVzZV93cml0aW5nKCkgYW5kIHJlc3VtZV93cml0aW5nKCkgbWV0aG9kcy4gIElmIHNwZWNpZmllZCwKKyAgICAgICAgdGhlIGxvdy13YXRlciBsaW1pdCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgICAgaGlnaC13YXRlciBsaW1pdC4gIE5laXRoZXIgdmFsdWUgY2FuIGJlIG5lZ2F0aXZlLgorCisgICAgICAgIFRoZSBkZWZhdWx0cyBhcmUgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuICBJZiBvbmx5IHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0IGlzIGdpdmVuLCB0aGUgbG93LXdhdGVyIGxpbWl0IGRlZmF1bHRzIHRvIGEKKyAgICAgICAgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgU2V0dGluZyBoaWdoIHRvIHplcm8gZm9yY2VzIGxvdyB0byB6ZXJvIGFzCisgICAgICAgIHdlbGwsIGFuZCBjYXVzZXMgcGF1c2Vfd3JpdGluZygpIHRvIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUKKyAgICAgICAgYnVmZmVyIGJlY29tZXMgbm9uLWVtcHR5LiAgU2V0dGluZyBsb3cgdG8gemVybyBjYXVzZXMKKyAgICAgICAgcmVzdW1lX3dyaXRpbmcoKSB0byBiZSBjYWxsZWQgb25seSBvbmNlIHRoZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICAgIFVzZSBvZiB6ZXJvIGZvciBlaXRoZXIgbGltaXQgaXMgZ2VuZXJhbGx5IHN1Yi1vcHRpbWFsIGFzIGl0CisgICAgICAgIHJlZHVjZXMgb3Bwb3J0dW5pdGllcyBmb3IgZG9pbmcgSS9PIGFuZCBjb21wdXRhdGlvbgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgd3JpdGUgYnVmZmVyLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIldyaXRlIHNvbWUgZGF0YSBieXRlcyB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIFRoaXMgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGxpc3Rfb2ZfZGF0YSk6CisgICAgICAgICIiIldyaXRlIGEgbGlzdCAob3IgYW55IGl0ZXJhYmxlKSBvZiBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gY29uY2F0ZW5hdGVzIHRoZSBhcmd1bWVudHMgYW5kCisgICAgICAgIGNhbGxzIHdyaXRlKCkgb24gdGhlIHJlc3VsdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBfUFkzNDoKKyAgICAgICAgICAgICMgSW4gUHl0aG9uIDMuMywgYnl0ZXMuam9pbigpIGRvZXNuJ3QgaGFuZGxlIG1lbW9yeXZpZXcuCisgICAgICAgICAgICBsaXN0X29mX2RhdGEgPSAoCisgICAgICAgICAgICAgICAgYnl0ZXMoZGF0YSkgaWYgaXNpbnN0YW5jZShkYXRhLCBtZW1vcnl2aWV3KSBlbHNlIGRhdGEKKyAgICAgICAgICAgICAgICBmb3IgZGF0YSBpbiBsaXN0X29mX2RhdGEpCisgICAgICAgIHNlbGYud3JpdGUoYicnLmpvaW4obGlzdF9vZl9kYXRhKSkKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB3cml0ZSBlbmQgYWZ0ZXIgZmx1c2hpbmcgYnVmZmVyZWQgZGF0YS4KKworICAgICAgICAoVGhpcyBpcyBsaWtlIHR5cGluZyBeRCBpbnRvIGEgVU5JWCBwcm9ncmFtIHJlYWRpbmcgZnJvbSBzdGRpbi4pCisKKyAgICAgICAgRGF0YSBtYXkgc3RpbGwgYmUgcmVjZWl2ZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhpcyB0cmFuc3BvcnQgc3VwcG9ydHMgd3JpdGVfZW9mKCksIEZhbHNlIGlmIG5vdC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LgorCisgICAgICAgIEJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBsb3N0LiAgTm8gbW9yZSBkYXRhIHdpbGwgYmUgcmVjZWl2ZWQuCisgICAgICAgIFRoZSBwcm90b2NvbCdzIGNvbm5lY3Rpb25fbG9zdCgpIG1ldGhvZCB3aWxsIChldmVudHVhbGx5KSBiZQorICAgICAgICBjYWxsZWQgd2l0aCBOb25lIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBUcmFuc3BvcnQoUmVhZFRyYW5zcG9ydCwgV3JpdGVUcmFuc3BvcnQpOgorICAgICIiIkludGVyZmFjZSByZXByZXNlbnRpbmcgYSBiaWRpcmVjdGlvbmFsIHRyYW5zcG9ydC4KKworICAgIFRoZXJlIG1heSBiZSBzZXZlcmFsIGltcGxlbWVudGF0aW9ucywgYnV0IHR5cGljYWxseSwgdGhlIHVzZXIgZG9lcworICAgIG5vdCBpbXBsZW1lbnQgbmV3IHRyYW5zcG9ydHM7IHJhdGhlciwgdGhlIHBsYXRmb3JtIHByb3ZpZGVzIHNvbWUKKyAgICB1c2VmdWwgdHJhbnNwb3J0cyB0aGF0IGFyZSBpbXBsZW1lbnRlZCB1c2luZyB0aGUgcGxhdGZvcm0ncyBiZXN0CisgICAgcHJhY3RpY2VzLgorCisgICAgVGhlIHVzZXIgbmV2ZXIgaW5zdGFudGlhdGVzIGEgdHJhbnNwb3J0IGRpcmVjdGx5OyB0aGV5IGNhbGwgYQorICAgIHV0aWxpdHkgZnVuY3Rpb24sIHBhc3NpbmcgaXQgYSBwcm90b2NvbCBmYWN0b3J5IGFuZCBvdGhlcgorICAgIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byBjcmVhdGUgdGhlIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wuICAoRS5nLgorICAgIEV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbigpIG9yIEV2ZW50TG9vcC5jcmVhdGVfc2VydmVyKCkuKQorCisgICAgVGhlIHV0aWxpdHkgZnVuY3Rpb24gd2lsbCBhc3luY2hyb25vdXNseSBjcmVhdGUgYSB0cmFuc3BvcnQgYW5kIGEKKyAgICBwcm90b2NvbCBhbmQgaG9vayB0aGVtIHVwIGJ5IGNhbGxpbmcgdGhlIHByb3RvY29sJ3MKKyAgICBjb25uZWN0aW9uX21hZGUoKSBtZXRob2QsIHBhc3NpbmcgaXQgdGhlIHRyYW5zcG9ydC4KKworICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlIHJhaXNlcyBOb3RJbXBsZW1lbnRlZCBmb3IgZXZlcnkgbWV0aG9kCisgICAgZXhjZXB0IHdyaXRlbGluZXMoKSwgd2hpY2ggY2FsbHMgd3JpdGUoKSBpbiBhIGxvb3AuCisgICAgIiIiCisKKworY2xhc3MgRGF0YWdyYW1UcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisgICAgIiIiSW50ZXJmYWNlIGZvciBkYXRhZ3JhbSAoVURQKSB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIHNlbmR0byhzZWxmLCBkYXRhLCBhZGRyPU5vbmUpOgorICAgICAgICAiIiJTZW5kIGRhdGEgdG8gdGhlIHRyYW5zcG9ydC4KKworICAgICAgICBUaGlzIGRvZXMgbm90IGJsb2NrOyBpdCBidWZmZXJzIHRoZSBkYXRhIGFuZCBhcnJhbmdlcyBmb3IgaXQKKyAgICAgICAgdG8gYmUgc2VudCBvdXQgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIGFkZHIgaXMgdGFyZ2V0IHNvY2tldCBhZGRyZXNzLgorICAgICAgICBJZiBhZGRyIGlzIE5vbmUgdXNlIHRhcmdldCBhZGRyZXNzIHBvaW50ZWQgb24gdHJhbnNwb3J0IGNyZWF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LgorCisgICAgICAgIEJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBsb3N0LiAgTm8gbW9yZSBkYXRhIHdpbGwgYmUgcmVjZWl2ZWQuCisgICAgICAgIFRoZSBwcm90b2NvbCdzIGNvbm5lY3Rpb25fbG9zdCgpIG1ldGhvZCB3aWxsIChldmVudHVhbGx5KSBiZQorICAgICAgICBjYWxsZWQgd2l0aCBOb25lIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBTdWJwcm9jZXNzVHJhbnNwb3J0KEJhc2VUcmFuc3BvcnQpOgorCisgICAgZGVmIGdldF9waWQoc2VsZik6CisgICAgICAgICIiIkdldCBzdWJwcm9jZXNzIGlkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZ2V0X3JldHVybmNvZGUoc2VsZik6CisgICAgICAgICIiIkdldCBzdWJwcm9jZXNzIHJldHVybmNvZGUuCisKKyAgICAgICAgU2VlIGFsc28KKyAgICAgICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2VzcyNzdWJwcm9jZXNzLlBvcGVuLnJldHVybmNvZGUKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRfcGlwZV90cmFuc3BvcnQoc2VsZiwgZmQpOgorICAgICAgICAiIiJHZXQgdHJhbnNwb3J0IGZvciBwaXBlIHdpdGggbnVtYmVyIGZkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnbmFsKToKKyAgICAgICAgIiIiU2VuZCBzaWduYWwgdG8gc3VicHJvY2Vzcy4KKworICAgICAgICBTZWUgYWxzbzoKKyAgICAgICAgZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4uc2VuZF9zaWduYWwKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgICIiIlN0b3AgdGhlIHN1YnByb2Nlc3MuCisKKyAgICAgICAgQWxpYXMgZm9yIGNsb3NlKCkgbWV0aG9kLgorCisgICAgICAgIE9uIFBvc2l4IE9TcyB0aGUgbWV0aG9kIHNlbmRzIFNJR1RFUk0gdG8gdGhlIHN1YnByb2Nlc3MuCisgICAgICAgIE9uIFdpbmRvd3MgdGhlIFdpbjMyIEFQSSBmdW5jdGlvbiBUZXJtaW5hdGVQcm9jZXNzKCkKKyAgICAgICAgIGlzIGNhbGxlZCB0byBzdG9wIHRoZSBzdWJwcm9jZXNzLgorCisgICAgICAgIFNlZSBhbHNvOgorICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4udGVybWluYXRlCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYga2lsbChzZWxmKToKKyAgICAgICAgIiIiS2lsbCB0aGUgc3VicHJvY2Vzcy4KKworICAgICAgICBPbiBQb3NpeCBPU3MgdGhlIGZ1bmN0aW9uIHNlbmRzIFNJR0tJTEwgdG8gdGhlIHN1YnByb2Nlc3MuCisgICAgICAgIE9uIFdpbmRvd3Mga2lsbCgpIGlzIGFuIGFsaWFzIGZvciB0ZXJtaW5hdGUoKS4KKworICAgICAgICBTZWUgYWxzbzoKKyAgICAgICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2VzcyNzdWJwcm9jZXNzLlBvcGVuLmtpbGwKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3VuaXhfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vdW5peF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE3OWQzMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3VuaXhfZXZlbnRzLnB5CkBAIC0wLDAgKzEsNzUyIEBACisiIiJTZWxlY3RvciBldmVudGxvb3AgZm9yIFVuaXggd2l0aCBzaWduYWwgaGFuZGxpbmcuIiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IGZjbnRsCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCisKK2Zyb20gLiBpbXBvcnQgYmFzZV9zdWJwcm9jZXNzCitmcm9tIC4gaW1wb3J0IGNvbnN0YW50cworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9yX2V2ZW50cworZnJvbSAuIGltcG9ydCB0YXNrcworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK19fYWxsX18gPSBbJ1NlbGVjdG9yRXZlbnRMb29wJywKKyAgICAgICAgICAgJ0Fic3RyYWN0Q2hpbGRXYXRjaGVyJywgJ1NhZmVDaGlsZFdhdGNoZXInLAorICAgICAgICAgICAnRmFzdENoaWxkV2F0Y2hlcicsICdEZWZhdWx0RXZlbnRMb29wUG9saWN5JywKKyAgICAgICAgICAgXQorCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIHJhaXNlIEltcG9ydEVycm9yKCdTaWduYWxzIGFyZSBub3QgcmVhbGx5IHN1cHBvcnRlZCBvbiBXaW5kb3dzJykKKworCitjbGFzcyBfVW5peFNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9yX2V2ZW50cy5CYXNlU2VsZWN0b3JFdmVudExvb3ApOgorICAgICIiIlVuaXggZXZlbnQgbG9vcAorCisgICAgQWRkcyBzaWduYWwgaGFuZGxpbmcgdG8gU2VsZWN0b3JFdmVudExvb3AKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3Rvcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzZWxlY3RvcikKKyAgICAgICAgc2VsZi5fc2lnbmFsX2hhbmRsZXJzID0ge30KKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNvY2tldC5zb2NrZXRwYWlyKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgZm9yIHNpZyBpbiBsaXN0KHNlbGYuX3NpZ25hbF9oYW5kbGVycyk6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWcpCisgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisgICAgZGVmIGFkZF9zaWduYWxfaGFuZGxlcihzZWxmLCBzaWcsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFkZCBhIGhhbmRsZXIgZm9yIGEgc2lnbmFsLiAgVU5JWCBvbmx5LgorCisgICAgICAgIFJhaXNlIFZhbHVlRXJyb3IgaWYgdGhlIHNpZ25hbCBudW1iZXIgaXMgaW52YWxpZCBvciB1bmNhdGNoYWJsZS4KKyAgICAgICAgUmFpc2UgUnVudGltZUVycm9yIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBzZXR0aW5nIHVwIHRoZSBoYW5kbGVyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfc2lnbmFsKHNpZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBzZXRfd2FrZXVwX2ZkKCkgcmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhpcyBpcyBub3QgdGhlCisgICAgICAgICAgICAjIG1haW4gdGhyZWFkLiAgQnkgY2FsbGluZyBpdCBlYXJseSB3ZSBlbnN1cmUgdGhhdCBhbgorICAgICAgICAgICAgIyBldmVudCBsb29wIHJ1bm5pbmcgaW4gYW5vdGhlciB0aHJlYWQgY2Fubm90IGFkZCBhIHNpZ25hbAorICAgICAgICAgICAgIyBoYW5kbGVyLgorICAgICAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQoc2VsZi5fY3NvY2suZmlsZW5vKCkpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihzdHIoZXhjKSkKKworICAgICAgICBoYW5kbGUgPSBldmVudHMuSGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorICAgICAgICBzZWxmLl9zaWduYWxfaGFuZGxlcnNbc2lnXSA9IGhhbmRsZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnLCBzZWxmLl9oYW5kbGVfc2lnbmFsKQorICAgICAgICAgICAgIyBTZXQgU0FfUkVTVEFSVCB0byBsaW1pdCBFSU5UUiBvY2N1cnJlbmNlcy4KKyAgICAgICAgICAgIHNpZ25hbC5zaWdpbnRlcnJ1cHQoc2lnLCBGYWxzZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgZGVsIHNlbGYuX3NpZ25hbF9oYW5kbGVyc1tzaWddCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fc2lnbmFsX2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQoLTEpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgbmV4YzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3NldF93YWtldXBfZmQoLTEpIGZhaWxlZDogJXMnLCBuZXhjKQorCisgICAgICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRUlOVkFMOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2lnIHt9IGNhbm5vdCBiZSBjYXVnaHQnLmZvcm1hdChzaWcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIF9oYW5kbGVfc2lnbmFsKHNlbGYsIHNpZywgYXJnKToKKyAgICAgICAgIiIiSW50ZXJuYWwgaGVscGVyIHRoYXQgaXMgdGhlIGFjdHVhbCBzaWduYWwgaGFuZGxlci4iIiIKKyAgICAgICAgaGFuZGxlID0gc2VsZi5fc2lnbmFsX2hhbmRsZXJzLmdldChzaWcpCisgICAgICAgIGlmIGhhbmRsZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICAjIEFzc3VtZSBpdCdzIHNvbWUgcmFjZSBjb25kaXRpb24uCisgICAgICAgIGlmIGhhbmRsZS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnKSAgIyBSZW1vdmUgaXQgcHJvcGVybHkuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9hZGRfY2FsbGJhY2tfc2lnbmFsc2FmZShoYW5kbGUpCisKKyAgICBkZWYgcmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNlbGYsIHNpZyk6CisgICAgICAgICIiIlJlbW92ZSBhIGhhbmRsZXIgZm9yIGEgc2lnbmFsLiAgVU5JWCBvbmx5LgorCisgICAgICAgIFJldHVybiBUcnVlIGlmIGEgc2lnbmFsIGhhbmRsZXIgd2FzIHJlbW92ZWQsIEZhbHNlIGlmIG5vdC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX3NpZ25hbChzaWcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9zaWduYWxfaGFuZGxlcnNbc2lnXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBzaWcgPT0gc2lnbmFsLlNJR0lOVDoKKyAgICAgICAgICAgIGhhbmRsZXIgPSBzaWduYWwuZGVmYXVsdF9pbnRfaGFuZGxlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGFuZGxlciA9IHNpZ25hbC5TSUdfREZMCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWcsIGhhbmRsZXIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FSU5WQUw6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzaWcge30gY2Fubm90IGJlIGNhdWdodCcuZm9ybWF0KHNpZykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgaWYgbm90IHNlbGYuX3NpZ25hbF9oYW5kbGVyczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZCgtMSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnc2V0X3dha2V1cF9mZCgtMSkgZmFpbGVkOiAlcycsIGV4YykKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9jaGVja19zaWduYWwoc2VsZiwgc2lnKToKKyAgICAgICAgIiIiSW50ZXJuYWwgaGVscGVyIHRvIHZhbGlkYXRlIGEgc2lnbmFsLgorCisgICAgICAgIFJhaXNlIFZhbHVlRXJyb3IgaWYgdGhlIHNpZ25hbCBudW1iZXIgaXMgaW52YWxpZCBvciB1bmNhdGNoYWJsZS4KKyAgICAgICAgUmFpc2UgUnVudGltZUVycm9yIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBzZXR0aW5nIHVwIHRoZSBoYW5kbGVyLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2lnLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzaWcgbXVzdCBiZSBhbiBpbnQsIG5vdCB7IXJ9Jy5mb3JtYXQoc2lnKSkKKworICAgICAgICBpZiBub3QgKDEgPD0gc2lnIDwgc2lnbmFsLk5TSUcpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAnc2lnIHt9IG91dCBvZiByYW5nZSgxLCB7fSknLmZvcm1hdChzaWcsIHNpZ25hbC5OU0lHKSkKKworICAgIGRlZiBfbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEpCisKKyAgICBkZWYgX21ha2Vfd3JpdGVfcGlwZV90cmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBfbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydChzZWxmLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICB3aXRoIGV2ZW50cy5nZXRfY2hpbGRfd2F0Y2hlcigpIGFzIHdhdGNoZXI6CisgICAgICAgICAgICB0cmFuc3AgPSBfVW5peFN1YnByb2Nlc3NUcmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1leHRyYSwgKiprd2FyZ3MpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRyYW5zcC5fcG9zdF9pbml0KCkKKyAgICAgICAgICAgIHdhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIodHJhbnNwLmdldF9waWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hpbGRfd2F0Y2hlcl9jYWxsYmFjaywgdHJhbnNwKQorCisgICAgICAgIHJldHVybiB0cmFuc3AKKworICAgIGRlZiBfY2hpbGRfd2F0Y2hlcl9jYWxsYmFjayhzZWxmLCBwaWQsIHJldHVybmNvZGUsIHRyYW5zcCk6CisgICAgICAgIHNlbGYuY2FsbF9zb29uX3RocmVhZHNhZmUodHJhbnNwLl9wcm9jZXNzX2V4aXRlZCwgcmV0dXJuY29kZSkKKworCitkZWYgX3NldF9ub25ibG9ja2luZyhmZCk6CisgICAgZmxhZ3MgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKKyAgICBmbGFncyA9IGZsYWdzIHwgb3MuT19OT05CTE9DSworICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbGFncykKKworCitjbGFzcyBfVW5peFJlYWRQaXBlVHJhbnNwb3J0KHRyYW5zcG9ydHMuUmVhZFRyYW5zcG9ydCk6CisKKyAgICBtYXhfc2l6ZSA9IDI1NiAqIDEwMjQgICMgbWF4IGJ5dGVzIHdlIHJlYWQgaW4gb25lIGV2ZW50bG9vcCBpdGVyYXRpb24KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9leHRyYVsncGlwZSddID0gcGlwZQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9waXBlID0gcGlwZQorICAgICAgICBzZWxmLl9maWxlbm8gPSBwaXBlLmZpbGVubygpCisgICAgICAgIG1vZGUgPSBvcy5mc3RhdChzZWxmLl9maWxlbm8pLnN0X21vZGUKKyAgICAgICAgaWYgbm90IChzdGF0LlNfSVNGSUZPKG1vZGUpIG9yCisgICAgICAgICAgICAgICAgc3RhdC5TX0lTU09DSyhtb2RlKSBvcgorICAgICAgICAgICAgICAgIHN0YXQuU19JU0NIUihtb2RlKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQaXBlIHRyYW5zcG9ydCBpcyBmb3IgcGlwZXMvc29ja2V0cyBvbmx5LiIpCisgICAgICAgIF9zZXRfbm9uYmxvY2tpbmcoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fZmlsZW5vLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHdhaXRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLl9maWxlbm8sIHNlbGYubWF4X3NpemUpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhX3JlY2VpdmVkKGRhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5lb2ZfcmVjZWl2ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBzZWxmLl9jbG9zZShOb25lKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMpOgorICAgICAgICAjIHNob3VsZCBiZSBjYWxsZWQgYnkgZXhjZXB0aW9uIGhhbmRsZXIgb25seQorICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2UoZXhjLCBPU0Vycm9yKSBhbmQgZXhjLmVycm5vID09IGVycm5vLkVJTyk6CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYXRhbCBlcnJvciBmb3IgJXMnLCBzZWxmKQorICAgICAgICBzZWxmLl9jbG9zZShleGMpCisKKyAgICBkZWYgX2Nsb3NlKHNlbGYsIGV4Yyk6CisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBleGMpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9waXBlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3BpcGUgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisKKworY2xhc3MgX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoc2VsZWN0b3JfZXZlbnRzLl9GbG93Q29udHJvbE1peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5Xcml0ZVRyYW5zcG9ydCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3BpcGUnXSA9IHBpcGUKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fcGlwZSA9IHBpcGUKKyAgICAgICAgc2VsZi5fZmlsZW5vID0gcGlwZS5maWxlbm8oKQorICAgICAgICBtb2RlID0gb3MuZnN0YXQoc2VsZi5fZmlsZW5vKS5zdF9tb2RlCisgICAgICAgIGlzX3NvY2tldCA9IHN0YXQuU19JU1NPQ0sobW9kZSkKKyAgICAgICAgaWYgbm90IChpc19zb2NrZXQgb3IKKyAgICAgICAgICAgICAgICBzdGF0LlNfSVNGSUZPKG1vZGUpIG9yCisgICAgICAgICAgICAgICAgc3RhdC5TX0lTQ0hSKG1vZGUpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlBpcGUgdHJhbnNwb3J0IGlzIG9ubHkgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpcGVzLCBzb2NrZXRzIGFuZCBjaGFyYWN0ZXIgZGV2aWNlcyIpCisgICAgICAgIF9zZXRfbm9uYmxvY2tpbmcoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCA9IDAKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IEZhbHNlICAjIFNldCB3aGVuIGNsb3NlKCkgb3Igd3JpdGVfZW9mKCkgY2FsbGVkLgorCisgICAgICAgICMgT24gQUlYLCB0aGUgcmVhZGVyIHRyaWNrIG9ubHkgd29ya3MgZm9yIHNvY2tldHMuCisgICAgICAgICMgT24gb3RoZXIgcGxhdGZvcm1zIGl0IHdvcmtzIGZvciBwaXBlcyBhbmQgc29ja2V0cy4KKyAgICAgICAgIyAoRXhjZXB0aW9uOiBPUyBYIDEwLjQ/ICBJc3N1ZSAjMTkyOTQuKQorICAgICAgICBpZiBpc19zb2NrZXQgb3Igbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJhaXgiKToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9maWxlbm8sIHNlbGYuX3JlYWRfcmVhZHkpCisKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbih3YWl0ZXIuc2V0X3Jlc3VsdCwgTm9uZSkKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzdW0obGVuKGRhdGEpIGZvciBkYXRhIGluIHNlbGYuX2J1ZmZlcikKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgIyBQaXBlIHdhcyBjbG9zZWQgYnkgcGVlci4KKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fY2xvc2UoQnJva2VuUGlwZUVycm9yKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jbG9zZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSksIHJlcHIoZGF0YSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBieXRlYXJyYXkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Qgb3Igc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdwaXBlIGNsb3NlZCBieSBwZWVyIG9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3Mud3JpdGUocGlwZSwgZGF0YSkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAjIEF0dGVtcHQgdG8gc2VuZCBpdCByaWdodCBhd2F5IGZpcnN0LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG4gPSBvcy53cml0ZShzZWxmLl9maWxlbm8sIGRhdGEpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbiA9PSBsZW4oZGF0YSk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIG4gPiAwOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX2ZpbGVubywgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgX3dyaXRlX3JlYWR5KHNlbGYpOgorICAgICAgICBkYXRhID0gYicnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBhc3NlcnQgZGF0YSwgJ0RhdGEgc2hvdWxkIG5vdCBiZSBlbXB0eScKKworICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gb3Mud3JpdGUoc2VsZi5fZmlsZW5vLCBkYXRhKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgICMgUmVtb3ZlIHdyaXRlciBoZXJlLCBfZmF0YWxfZXJyb3IoKSBkb2Vzbid0IGl0CisgICAgICAgICAgICAjIGJlY2F1c2UgX2J1ZmZlciBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBuID09IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXIgYW5kIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIG4gPiAwOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorCisgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpICAjIFRyeSBhZ2FpbiBsYXRlci4KKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBUT0RPOiBNYWtlIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gd3JpdGVfZW9mKCksIGNsb3NlKCksCisgICAgIyBhYm9ydCgpLCBfZmF0YWxfZXJyb3IoKSBhbmQgX2Nsb3NlKCkgbW9yZSBzdHJhaWdodGZvcndhcmQuCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBzZWxmLl9waXBlCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgIyB3cml0ZV9lb2YgaXMgYWxsIHdoYXQgd2UgbmVlZGVkIHRvIGNsb3NlIHRoZSB3cml0ZSBwaXBlCisgICAgICAgICAgICBzZWxmLndyaXRlX2VvZigpCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgIHNlbGYuX2Nsb3NlKE5vbmUpCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4Yyk6CisgICAgICAgICMgc2hvdWxkIGJlIGNhbGxlZCBieSBleGNlcHRpb24gaGFuZGxlciBvbmx5CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgKEJyb2tlblBpcGVFcnJvciwgQ29ubmVjdGlvblJlc2V0RXJyb3IpKToKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhdGFsIGVycm9yIGZvciAlcycsIHNlbGYpCisgICAgICAgIHNlbGYuX2Nsb3NlKGV4YykKKworICAgIGRlZiBfY2xvc2Uoc2VsZiwgZXhjPU5vbmUpOgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorCisKK2NsYXNzIF9Vbml4U3VicHJvY2Vzc1RyYW5zcG9ydChiYXNlX3N1YnByb2Nlc3MuQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQpOgorCisgICAgZGVmIF9zdGFydChzZWxmLCBhcmdzLCBzaGVsbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncyk6CisgICAgICAgIHN0ZGluX3cgPSBOb25lCisgICAgICAgIGlmIHN0ZGluID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgICMgVXNlIGEgc29ja2V0IHBhaXIgZm9yIHN0ZGluLCBzaW5jZSBub3QgYWxsIHBsYXRmb3JtcworICAgICAgICAgICAgIyBzdXBwb3J0IHNlbGVjdGluZyByZWFkIGV2ZW50cyBvbiB0aGUgd3JpdGUgZW5kIG9mIGEKKyAgICAgICAgICAgICMgc29ja2V0ICh3aGljaCB3ZSB1c2UgaW4gb3JkZXIgdG8gZGV0ZWN0IGNsb3Npbmcgb2YgdGhlCisgICAgICAgICAgICAjIG90aGVyIGVuZCkuICBOb3RhYmx5IHRoaXMgaXMgbmVlZGVkIG9uIEFJWCwgYW5kIHdvcmtzCisgICAgICAgICAgICAjIGp1c3QgZmluZSBvbiBvdGhlciBwbGF0Zm9ybXMuCisgICAgICAgICAgICBzdGRpbiwgc3RkaW5fdyA9IHNlbGYuX2xvb3AuX3NvY2tldHBhaXIoKQorICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIGFyZ3MsIHNoZWxsPXNoZWxsLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwKKyAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgYnVmc2l6ZT1idWZzaXplLCAqKmt3YXJncykKKyAgICAgICAgaWYgc3RkaW5fdyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBvcGVuKHN0ZGluX3cuZGV0YWNoKCksICdyYicsIGJ1ZmZlcmluZz1idWZzaXplKQorCisKK2NsYXNzIEFic3RyYWN0Q2hpbGRXYXRjaGVyOgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIG1vbml0b3JpbmcgY2hpbGQgcHJvY2Vzc2VzLgorCisgICAgT2JqZWN0cyBkZXJpdmVkIGZyb20gdGhpcyBjbGFzcyBtb25pdG9yIGEgY29sbGVjdGlvbiBvZiBzdWJwcm9jZXNzZXMgYW5kCisgICAgcmVwb3J0IHRoZWlyIHRlcm1pbmF0aW9uIG9yIGludGVycnVwdGlvbiBieSBhIHNpZ25hbC4KKworICAgIE5ldyBjYWxsYmFja3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCAuYWRkX2NoaWxkX2hhbmRsZXIoKS4gU3RhcnRpbmcgYSBuZXcKKyAgICBwcm9jZXNzIG11c3QgYmUgZG9uZSB3aXRoaW4gYSAnd2l0aCcgYmxvY2sgdG8gYWxsb3cgdGhlIHdhdGNoZXIgdG8gc3VzcGVuZAorICAgIGl0cyBhY3Rpdml0eSB1bnRpbCB0aGUgbmV3IHByb2Nlc3MgaWYgZnVsbHkgcmVnaXN0ZXJlZCAodGhpcyBpcyBuZWVkZWQgdG8KKyAgICBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMpLgorCisgICAgRXhhbXBsZToKKyAgICAgICAgd2l0aCB3YXRjaGVyOgorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oInNsZWVwIDEiKQorICAgICAgICAgICAgd2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcihwcm9jLnBpZCwgY2FsbGJhY2spCisKKyAgICBOb3RlczoKKyAgICAgICAgSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgY2xhc3MgbXVzdCBiZSB0aHJlYWQtc2FmZS4KKworICAgICAgICBTaW5jZSBjaGlsZCB3YXRjaGVyIG9iamVjdHMgbWF5IGNhdGNoIHRoZSBTSUdDSExEIHNpZ25hbCBhbmQgY2FsbAorICAgICAgICB3YWl0cGlkKC0xKSwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGFjdGl2ZSBvYmplY3QgcGVyIHByb2Nlc3MuCisgICAgIiIiCisKKyAgICBkZWYgYWRkX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJSZWdpc3RlciBhIG5ldyBjaGlsZCBoYW5kbGVyLgorCisgICAgICAgIEFycmFuZ2UgZm9yIGNhbGxiYWNrKHBpZCwgcmV0dXJuY29kZSwgKmFyZ3MpIHRvIGJlIGNhbGxlZCB3aGVuCisgICAgICAgIHByb2Nlc3MgJ3BpZCcgdGVybWluYXRlcy4gU3BlY2lmeWluZyBhbm90aGVyIGNhbGxiYWNrIGZvciB0aGUgc2FtZQorICAgICAgICBwcm9jZXNzIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBoYW5kbGVyLgorCisgICAgICAgIE5vdGU6IGNhbGxiYWNrKCkgbXVzdCBiZSB0aHJlYWQtc2FmZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgcmVtb3ZlX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkKToKKyAgICAgICAgIiIiUmVtb3ZlcyB0aGUgaGFuZGxlciBmb3IgcHJvY2VzcyAncGlkJy4KKworICAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBUcnVlIGlmIHRoZSBoYW5kbGVyIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCwKKyAgICAgICAgRmFsc2UgaWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gcmVtb3ZlLiIiIgorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGF0dGFjaF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICAiIiJBdHRhY2ggdGhlIHdhdGNoZXIgdG8gYW4gZXZlbnQgbG9vcC4KKworICAgICAgICBJZiB0aGUgd2F0Y2hlciB3YXMgcHJldmlvdXNseSBhdHRhY2hlZCB0byBhbiBldmVudCBsb29wLCB0aGVuIGl0IGlzCisgICAgICAgIGZpcnN0IGRldGFjaGVkIGJlZm9yZSBhdHRhY2hpbmcgdG8gdGhlIG5ldyBsb29wLgorCisgICAgICAgIE5vdGU6IGxvb3AgbWF5IGJlIE5vbmUuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHdhdGNoZXIuCisKKyAgICAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdW5kZXJseWluZyByZXNvdXJjZSBpcyBmcmVlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgIiIiRW50ZXIgdGhlIHdhdGNoZXIncyBjb250ZXh0IGFuZCBhbGxvdyBzdGFydGluZyBuZXcgcHJvY2Vzc2VzCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiBzZWxmIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICAiIiJFeGl0IHRoZSB3YXRjaGVyJ3MgY29udGV4dCIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworCitjbGFzcyBCYXNlQ2hpbGRXYXRjaGVyKEFic3RyYWN0Q2hpbGRXYXRjaGVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5hdHRhY2hfbG9vcChOb25lKQorCisgICAgZGVmIF9kb193YWl0cGlkKHNlbGYsIGV4cGVjdGVkX3BpZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIF9kb193YWl0cGlkX2FsbChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgYXR0YWNoX2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgIGFzc2VydCBsb29wIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShsb29wLCBldmVudHMuQWJzdHJhY3RFdmVudExvb3ApCisKKyAgICAgICAgaWYgc2VsZi5fbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdDSExEKQorCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQ0hMRCwgc2VsZi5fc2lnX2NobGQpCisKKyAgICAgICAgICAgICMgUHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGluIGNhc2UgYSBjaGlsZCB0ZXJtaW5hdGVkCisgICAgICAgICAgICAjIGR1cmluZyB0aGUgc3dpdGNoLgorICAgICAgICAgICAgc2VsZi5fZG9fd2FpdHBpZF9hbGwoKQorCisgICAgZGVmIF9zaWdfY2hsZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZG9fd2FpdHBpZF9hbGwoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignVW5rbm93biBleGNlcHRpb24gaW4gU0lHQ0hMRCBoYW5kbGVyJykKKworICAgIGRlZiBfY29tcHV0ZV9yZXR1cm5jb2RlKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0YXR1cyk6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIGRpZWQgYmVjYXVzZSBvZiBhIHNpZ25hbC4KKyAgICAgICAgICAgIHJldHVybiAtb3MuV1RFUk1TSUcoc3RhdHVzKQorICAgICAgICBlbGlmIG9zLldJRkVYSVRFRChzdGF0dXMpOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBleGl0ZWQgKGUuZyBzeXMuZXhpdCgpKS4KKyAgICAgICAgICAgIHJldHVybiBvcy5XRVhJVFNUQVRVUyhzdGF0dXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBleGl0ZWQsIGJ1dCB3ZSBkb24ndCB1bmRlcnN0YW5kIGl0cyBzdGF0dXMuCisgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMsIGxldCdzIGp1c3QKKyAgICAgICAgICAgICMgcmV0dXJuIHRoYXQgc3RhdHVzOyBwZXJoYXBzIHRoYXQgaGVscHMgZGVidWcgaXQuCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisKKworY2xhc3MgU2FmZUNoaWxkV2F0Y2hlcihCYXNlQ2hpbGRXYXRjaGVyKToKKyAgICAiIiInU2FmZScgY2hpbGQgd2F0Y2hlciBpbXBsZW1lbnRhdGlvbi4KKworICAgIFRoaXMgaW1wbGVtZW50YXRpb24gYXZvaWRzIGRpc3J1cHRpbmcgb3RoZXIgY29kZSBzcGF3bmluZyBwcm9jZXNzZXMgYnkKKyAgICBwb2xsaW5nIGV4cGxpY2l0bHkgZWFjaCBwcm9jZXNzIGluIHRoZSBTSUdDSExEIGhhbmRsZXIgaW5zdGVhZCBvZiBjYWxsaW5nCisgICAgb3Mud2FpdHBpZCgtMSkuCisKKyAgICBUaGlzIGlzIGEgc2FmZSBzb2x1dGlvbiBidXQgaXQgaGFzIGEgc2lnbmlmaWNhbnQgb3ZlcmhlYWQgd2hlbiBoYW5kbGluZyBhCisgICAgYmlnIG51bWJlciBvZiBjaGlsZHJlbiAoTyhuKSBlYWNoIHRpbWUgU0lHQ0hMRCBpcyByYWlzZWQpCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9jYWxsYmFja3MgPSB7fQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9jYWxsYmFja3MuY2xlYXIoKQorICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgYSwgYiwgYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2NhbGxiYWNrc1twaWRdID0gY2FsbGJhY2ssIGFyZ3MKKworICAgICAgICAjIFByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBpbiBjYXNlIHRoZSBjaGlsZCBpcyBhbHJlYWR5IHRlcm1pbmF0ZWQuCisgICAgICAgIHNlbGYuX2RvX3dhaXRwaWQocGlkKQorCisgICAgZGVmIHJlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9jYWxsYmFja3NbcGlkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2RvX3dhaXRwaWRfYWxsKHNlbGYpOgorCisgICAgICAgIGZvciBwaWQgaW4gbGlzdChzZWxmLl9jYWxsYmFja3MpOgorICAgICAgICAgICAgc2VsZi5fZG9fd2FpdHBpZChwaWQpCisKKyAgICBkZWYgX2RvX3dhaXRwaWQoc2VsZiwgZXhwZWN0ZWRfcGlkKToKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGVkX3BpZCA+IDAKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoZXhwZWN0ZWRfcGlkLCBvcy5XTk9IQU5HKQorICAgICAgICBleGNlcHQgQ2hpbGRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIGlzIGFscmVhZHkgcmVhcGVkCisgICAgICAgICAgICAjIChtYXkgaGFwcGVuIGlmIHdhaXRwaWQoKSBpcyBjYWxsZWQgZWxzZXdoZXJlKS4KKyAgICAgICAgICAgIHBpZCA9IGV4cGVjdGVkX3BpZAorICAgICAgICAgICAgcmV0dXJuY29kZSA9IDI1NQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAgICAgIlVua25vd24gY2hpbGQgcHJvY2VzcyBwaWQgJWQsIHdpbGwgcmVwb3J0IHJldHVybmNvZGUgMjU1IiwKKyAgICAgICAgICAgICAgICBwaWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlLgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5fY29tcHV0ZV9yZXR1cm5jb2RlKHN0YXR1cykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWxsYmFjaywgYXJncyA9IHNlbGYuX2NhbGxiYWNrcy5wb3AocGlkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgICMgTWF5IGhhcHBlbiBpZiAucmVtb3ZlX2NoaWxkX2hhbmRsZXIoKSBpcyBjYWxsZWQKKyAgICAgICAgICAgICMgYWZ0ZXIgb3Mud2FpdHBpZCgpIHJldHVybnMuCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKQorCisKK2NsYXNzIEZhc3RDaGlsZFdhdGNoZXIoQmFzZUNoaWxkV2F0Y2hlcik6CisgICAgIiIiJ0Zhc3QnIGNoaWxkIHdhdGNoZXIgaW1wbGVtZW50YXRpb24uCisKKyAgICBUaGlzIGltcGxlbWVudGF0aW9uIHJlYXBzIGV2ZXJ5IHRlcm1pbmF0ZWQgcHJvY2Vzc2VzIGJ5IGNhbGxpbmcKKyAgICBvcy53YWl0cGlkKC0xKSBkaXJlY3RseSwgcG9zc2libHkgYnJlYWtpbmcgb3RoZXIgY29kZSBzcGF3bmluZyBwcm9jZXNzZXMKKyAgICBhbmQgd2FpdGluZyBmb3IgdGhlaXIgdGVybWluYXRpb24uCisKKyAgICBUaGVyZSBpcyBubyBub3RpY2VhYmxlIG92ZXJoZWFkIHdoZW4gaGFuZGxpbmcgYSBiaWcgbnVtYmVyIG9mIGNoaWxkcmVuCisgICAgKE8oMSkgZWFjaCB0aW1lIGEgY2hpbGQgdGVybWluYXRlcykuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzID0ge30KKyAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5fem9tYmllcyA9IHt9CisgICAgICAgIHNlbGYuX2ZvcmtzID0gMAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9jYWxsYmFja3MuY2xlYXIoKQorICAgICAgICBzZWxmLl96b21iaWVzLmNsZWFyKCkKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9mb3JrcyArPSAxCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgYSwgYiwgYyk6CisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIHNlbGYuX2ZvcmtzIC09IDEKKworICAgICAgICAgICAgaWYgc2VsZi5fZm9ya3Mgb3Igbm90IHNlbGYuX3pvbWJpZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGNvbGxhdGVyYWxfdmljdGltcyA9IHN0cihzZWxmLl96b21iaWVzKQorICAgICAgICAgICAgc2VsZi5fem9tYmllcy5jbGVhcigpCisKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAiQ2F1Z2h0IHN1YnByb2Nlc3NlcyB0ZXJtaW5hdGlvbiBmcm9tIHVua25vd24gcGlkczogJXMiLAorICAgICAgICAgICAgY29sbGF0ZXJhbF92aWN0aW1zKQorCisgICAgZGVmIGFkZF9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2ZvcmtzLCAiTXVzdCB1c2UgdGhlIGNvbnRleHQgbWFuYWdlciIKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLl96b21iaWVzLnBvcChwaWQpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgIyBUaGUgY2hpbGQgaXMgcnVubmluZy4KKyAgICAgICAgICAgICAgICBzZWxmLl9jYWxsYmFja3NbcGlkXSA9IGNhbGxiYWNrLCBhcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBUaGUgY2hpbGQgaXMgZGVhZCBhbHJlYWR5LiBXZSBjYW4gZmlyZSB0aGUgY2FsbGJhY2suCisgICAgICAgIGNhbGxiYWNrKHBpZCwgcmV0dXJuY29kZSwgKmFyZ3MpCisKKyAgICBkZWYgcmVtb3ZlX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuX2NhbGxiYWNrc1twaWRdCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfZG9fd2FpdHBpZF9hbGwoc2VsZik6CisgICAgICAgICMgQmVjYXVzZSBvZiBzaWduYWwgY29hbGVzY2luZywgd2UgbXVzdCBrZWVwIGNhbGxpbmcgd2FpdHBpZCgpIGFzCisgICAgICAgICMgbG9uZyBhcyB3ZSdyZSBhYmxlIHRvIHJlYXAgYSBjaGlsZC4KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoLTEsIG9zLldOT0hBTkcpCisgICAgICAgICAgICBleGNlcHQgQ2hpbGRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAgICAgIyBObyBtb3JlIGNoaWxkIHByb2Nlc3NlcyBleGlzdC4KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAgICAgICAgICMgQSBjaGlsZCBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLl9jb21wdXRlX3JldHVybmNvZGUoc3RhdHVzKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywgYXJncyA9IHNlbGYuX2NhbGxiYWNrcy5wb3AocGlkKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyB1bmtub3duIGNoaWxkCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2ZvcmtzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBJdCBtYXkgbm90IGJlIHJlZ2lzdGVyZWQgeWV0LgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fem9tYmllc1twaWRdID0gcmV0dXJuY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBOb25lCisKKyAgICAgICAgICAgIGlmIGNhbGxiYWNrIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICJDYXVnaHQgc3VicHJvY2VzcyB0ZXJtaW5hdGlvbiBmcm9tIHVua25vd24gcGlkOiAiCisgICAgICAgICAgICAgICAgICAgICIlZCAtPiAlZCIsIHBpZCwgcmV0dXJuY29kZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY2FsbGJhY2socGlkLCByZXR1cm5jb2RlLCAqYXJncykKKworCitjbGFzcyBfVW5peERlZmF1bHRFdmVudExvb3BQb2xpY3koZXZlbnRzLkJhc2VEZWZhdWx0RXZlbnRMb29wUG9saWN5KToKKyAgICAiIiJYWFgiIiIKKyAgICBfbG9vcF9mYWN0b3J5ID0gX1VuaXhTZWxlY3RvckV2ZW50TG9vcAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fd2F0Y2hlciA9IE5vbmUKKworICAgIGRlZiBfaW5pdF93YXRjaGVyKHNlbGYpOgorICAgICAgICB3aXRoIGV2ZW50cy5fbG9jazoKKyAgICAgICAgICAgIGlmIHNlbGYuX3dhdGNoZXIgaXMgTm9uZTogICMgcHJhZ21hOiBubyBicmFuY2gKKyAgICAgICAgICAgICAgICBzZWxmLl93YXRjaGVyID0gU2FmZUNoaWxkV2F0Y2hlcigpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5fTWFpblRocmVhZCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5fbG9jYWwuX2xvb3ApCisKKyAgICBkZWYgc2V0X2V2ZW50X2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgICIiIlNldCB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBBcyBhIHNpZGUgZWZmZWN0LCBpZiBhIGNoaWxkIHdhdGNoZXIgd2FzIHNldCBiZWZvcmUsIHRoZW4gY2FsbGluZworICAgICAgICAuc2V0X2V2ZW50X2xvb3AoKSBmcm9tIHRoZSBtYWluIHRocmVhZCB3aWxsIGNhbGwgLmF0dGFjaF9sb29wKGxvb3ApIG9uCisgICAgICAgIHRoZSBjaGlsZCB3YXRjaGVyLgorICAgICAgICAiIiIKKworICAgICAgICBzdXBlcigpLnNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBub3QgTm9uZSBhbmQgXAorICAgICAgICAgICAgaXNpbnN0YW5jZSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwgdGhyZWFkaW5nLl9NYWluVGhyZWFkKToKKyAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuYXR0YWNoX2xvb3AobG9vcCkKKworICAgIGRlZiBnZXRfY2hpbGRfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSBjaGlsZCB3YXRjaGVyCisKKyAgICAgICAgSWYgbm90IHlldCBzZXQsIGEgU2FmZUNoaWxkV2F0Y2hlciBvYmplY3QgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5faW5pdF93YXRjaGVyKCkKKworICAgICAgICByZXR1cm4gc2VsZi5fd2F0Y2hlcgorCisgICAgZGVmIHNldF9jaGlsZF93YXRjaGVyKHNlbGYsIHdhdGNoZXIpOgorICAgICAgICAiIiJTZXQgdGhlIGNoaWxkIHdhdGNoZXIiIiIKKworICAgICAgICBhc3NlcnQgd2F0Y2hlciBpcyBOb25lIG9yIGlzaW5zdGFuY2Uod2F0Y2hlciwgQWJzdHJhY3RDaGlsZFdhdGNoZXIpCisKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuX3dhdGNoZXIgPSB3YXRjaGVyCisKK1NlbGVjdG9yRXZlbnRMb29wID0gX1VuaXhTZWxlY3RvckV2ZW50TG9vcAorRGVmYXVsdEV2ZW50TG9vcFBvbGljeSA9IF9Vbml4RGVmYXVsdEV2ZW50TG9vcFBvbGljeQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vd2luZG93c19ldmVudHMucHkgYi9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTJkOTgxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vd2luZG93c19ldmVudHMucHkKQEAgLTAsMCArMSw0ODYgQEAKKyIiIlNlbGVjdG9yIGFuZCBwcm9hY3RvciBldmVudGxvb3BzIGZvciBXaW5kb3dzLiIiIgorCitpbXBvcnQgX3dpbmFwaQoraW1wb3J0IGVycm5vCitpbXBvcnQgbWF0aAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGJhc2Vfc3VicHJvY2VzcworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHByb2FjdG9yX2V2ZW50cworZnJvbSAuIGltcG9ydCBzZWxlY3Rvcl9ldmVudHMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLiBpbXBvcnQgd2luZG93c191dGlscworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKK2Zyb20gLiBpbXBvcnQgX292ZXJsYXBwZWQKKworCitfX2FsbF9fID0gWydTZWxlY3RvckV2ZW50TG9vcCcsICdQcm9hY3RvckV2ZW50TG9vcCcsICdJb2NwUHJvYWN0b3InLAorICAgICAgICAgICAnRGVmYXVsdEV2ZW50TG9vcFBvbGljeScsCisgICAgICAgICAgIF0KKworCitOVUxMID0gMAorSU5GSU5JVEUgPSAweGZmZmZmZmZmCitFUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQgPSAxMjI1CitFUlJPUl9DT05ORUNUSU9OX0FCT1JURUQgPSAxMjM2CisKKworY2xhc3MgX092ZXJsYXBwZWRGdXR1cmUoZnV0dXJlcy5GdXR1cmUpOgorICAgICIiIlN1YmNsYXNzIG9mIEZ1dHVyZSB3aGljaCByZXByZXNlbnRzIGFuIG92ZXJsYXBwZWQgb3BlcmF0aW9uLgorCisgICAgQ2FuY2VsbGluZyBpdCB3aWxsIGltbWVkaWF0ZWx5IGNhbmNlbCB0aGUgb3ZlcmxhcHBlZCBvcGVyYXRpb24uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3YsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBzZWxmLm92ID0gb3YKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYub3YuY2FuY2VsKCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBzdXBlcigpLmNhbmNlbCgpCisKKworY2xhc3MgX1dhaXRIYW5kbGVGdXR1cmUoZnV0dXJlcy5GdXR1cmUpOgorICAgICIiIlN1YmNsYXNzIG9mIEZ1dHVyZSB3aGljaCByZXByZXNlbnRzIGEgd2FpdCBoYW5kbGUuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2FpdF9oYW5kbGUsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBzZWxmLl93YWl0X2hhbmRsZSA9IHdhaXRfaGFuZGxlCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzdXBlcigpLmNhbmNlbCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9vdmVybGFwcGVkLlVucmVnaXN0ZXJXYWl0KHNlbGYuX3dhaXRfaGFuZGxlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS53aW5lcnJvciAhPSBfb3ZlcmxhcHBlZC5FUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKworY2xhc3MgUGlwZVNlcnZlcihvYmplY3QpOgorICAgICIiIkNsYXNzIHJlcHJlc2VudGluZyBhIHBpcGUgc2VydmVyLgorCisgICAgVGhpcyBpcyBtdWNoIGxpa2UgYSBib3VuZCwgbGlzdGVuaW5nIHNvY2tldC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBhZGRyZXNzCisgICAgICAgIHNlbGYuX2ZyZWVfaW5zdGFuY2VzID0gd2Vha3JlZi5XZWFrU2V0KCkKKyAgICAgICAgc2VsZi5fcGlwZSA9IHNlbGYuX3NlcnZlcl9waXBlX2hhbmRsZShUcnVlKQorCisgICAgZGVmIF9nZXRfdW5jb25uZWN0ZWRfcGlwZShzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgbmV3IGluc3RhbmNlIGFuZCByZXR1cm4gcHJldmlvdXMgb25lLiAgVGhpcyBlbnN1cmVzCisgICAgICAgICMgdGhhdCAodW50aWwgdGhlIHNlcnZlciBpcyBjbG9zZWQpIHRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdAorICAgICAgICAjIG9uZSBwaXBlIGhhbmRsZSBmb3IgYWRkcmVzcy4gIFRoZXJlZm9yZSBpZiBhIGNsaWVudCBhdHRlbXB0CisgICAgICAgICMgdG8gY29ubmVjdCBpdCB3aWxsIG5vdCBmYWlsIHdpdGggRmlsZU5vdEZvdW5kRXJyb3IuCisgICAgICAgIHRtcCwgc2VsZi5fcGlwZSA9IHNlbGYuX3BpcGUsIHNlbGYuX3NlcnZlcl9waXBlX2hhbmRsZShGYWxzZSkKKyAgICAgICAgcmV0dXJuIHRtcAorCisgICAgZGVmIF9zZXJ2ZXJfcGlwZV9oYW5kbGUoc2VsZiwgZmlyc3QpOgorICAgICAgICAjIFJldHVybiBhIHdyYXBwZXIgZm9yIGEgbmV3IHBpcGUgaGFuZGxlLgorICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBmbGFncyA9IF93aW5hcGkuUElQRV9BQ0NFU1NfRFVQTEVYIHwgX3dpbmFwaS5GSUxFX0ZMQUdfT1ZFUkxBUFBFRAorICAgICAgICBpZiBmaXJzdDoKKyAgICAgICAgICAgIGZsYWdzIHw9IF93aW5hcGkuRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UKKyAgICAgICAgaCA9IF93aW5hcGkuQ3JlYXRlTmFtZWRQaXBlKAorICAgICAgICAgICAgc2VsZi5fYWRkcmVzcywgZmxhZ3MsCisgICAgICAgICAgICBfd2luYXBpLlBJUEVfVFlQRV9NRVNTQUdFIHwgX3dpbmFwaS5QSVBFX1JFQURNT0RFX01FU1NBR0UgfAorICAgICAgICAgICAgX3dpbmFwaS5QSVBFX1dBSVQsCisgICAgICAgICAgICBfd2luYXBpLlBJUEVfVU5MSU1JVEVEX0lOU1RBTkNFUywKKyAgICAgICAgICAgIHdpbmRvd3NfdXRpbHMuQlVGU0laRSwgd2luZG93c191dGlscy5CVUZTSVpFLAorICAgICAgICAgICAgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwgX3dpbmFwaS5OVUxMKQorICAgICAgICBwaXBlID0gd2luZG93c191dGlscy5QaXBlSGFuZGxlKGgpCisgICAgICAgIHNlbGYuX2ZyZWVfaW5zdGFuY2VzLmFkZChwaXBlKQorICAgICAgICByZXR1cm4gcGlwZQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAjIENsb3NlIGFsbCBpbnN0YW5jZXMgd2hpY2ggaGF2ZSBub3QgYmVlbiBjb25uZWN0ZWQgdG8gYnkgYSBjbGllbnQuCisgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgcGlwZSBpbiBzZWxmLl9mcmVlX2luc3RhbmNlczoKKyAgICAgICAgICAgICAgICBwaXBlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3BpcGUgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fZnJlZV9pbnN0YW5jZXMuY2xlYXIoKQorCisgICAgX19kZWxfXyA9IGNsb3NlCisKKworY2xhc3MgX1dpbmRvd3NTZWxlY3RvckV2ZW50TG9vcChzZWxlY3Rvcl9ldmVudHMuQmFzZVNlbGVjdG9yRXZlbnRMb29wKToKKyAgICAiIiJXaW5kb3dzIHZlcnNpb24gb2Ygc2VsZWN0b3IgZXZlbnQgbG9vcC4iIiIKKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpcigpCisKKworY2xhc3MgUHJvYWN0b3JFdmVudExvb3AocHJvYWN0b3JfZXZlbnRzLkJhc2VQcm9hY3RvckV2ZW50TG9vcCk6CisgICAgIiIiV2luZG93cyB2ZXJzaW9uIG9mIHByb2FjdG9yIGV2ZW50IGxvb3AgdXNpbmcgSU9DUC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9hY3Rvcj1Ob25lKToKKyAgICAgICAgaWYgcHJvYWN0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIHByb2FjdG9yID0gSW9jcFByb2FjdG9yKCkKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwcm9hY3RvcikKKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpcigpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV9waXBlX2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgYWRkcmVzcyk6CisgICAgICAgIGYgPSBzZWxmLl9wcm9hY3Rvci5jb25uZWN0X3BpcGUoYWRkcmVzcykKKyAgICAgICAgcGlwZSA9IHlpZWxkIGZyb20gZgorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB0cmFucyA9IHNlbGYuX21ha2VfZHVwbGV4X3BpcGVfdHJhbnNwb3J0KHBpcGUsIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPXsnYWRkcic6IGFkZHJlc3N9KQorICAgICAgICByZXR1cm4gdHJhbnMsIHByb3RvY29sCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHN0YXJ0X3NlcnZpbmdfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBhZGRyZXNzKToKKyAgICAgICAgc2VydmVyID0gUGlwZVNlcnZlcihhZGRyZXNzKQorCisgICAgICAgIGRlZiBsb29wKGY9Tm9uZSk6CisgICAgICAgICAgICBwaXBlID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGY6CisgICAgICAgICAgICAgICAgICAgIHBpcGUgPSBmLnJlc3VsdCgpCisgICAgICAgICAgICAgICAgICAgIHNlcnZlci5fZnJlZV9pbnN0YW5jZXMuZGlzY2FyZChwaXBlKQorICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX2R1cGxleF9waXBlX3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUsIHByb3RvY29sLCBleHRyYT17J2FkZHInOiBhZGRyZXNzfSkKKyAgICAgICAgICAgICAgICBwaXBlID0gc2VydmVyLl9nZXRfdW5jb25uZWN0ZWRfcGlwZSgpCisgICAgICAgICAgICAgICAgaWYgcGlwZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IuYWNjZXB0X3BpcGUocGlwZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHBpcGUgYW5kIHBpcGUuZmlsZW5vKCkgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ1BpcGUgYWNjZXB0IGZhaWxlZCcpCisgICAgICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgcGlwZToKKyAgICAgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2sobG9vcCkKKworICAgICAgICBzZWxmLmNhbGxfc29vbihsb29wKQorICAgICAgICByZXR1cm4gW3NlcnZlcl0KKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgdHJhbnNwID0gX1dpbmRvd3NTdWJwcm9jZXNzVHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPWV4dHJhLCAqKmt3YXJncykKKyAgICAgICAgeWllbGQgZnJvbSB0cmFuc3AuX3Bvc3RfaW5pdCgpCisgICAgICAgIHJldHVybiB0cmFuc3AKKworCitjbGFzcyBJb2NwUHJvYWN0b3I6CisgICAgIiIiUHJvYWN0b3IgaW1wbGVtZW50YXRpb24gdXNpbmcgSU9DUC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25jdXJyZW5jeT0weGZmZmZmZmZmKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2lvY3AgPSBfb3ZlcmxhcHBlZC5DcmVhdGVJb0NvbXBsZXRpb25Qb3J0KAorICAgICAgICAgICAgX292ZXJsYXBwZWQuSU5WQUxJRF9IQU5ETEVfVkFMVUUsIE5VTEwsIDAsIGNvbmN1cnJlbmN5KQorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQgPSB3ZWFrcmVmLldlYWtTZXQoKQorICAgICAgICBzZWxmLl9zdG9wcGVkX3NlcnZpbmcgPSB3ZWFrcmVmLldlYWtTZXQoKQorCisgICAgZGVmIHNldF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcmVzdWx0czoKKyAgICAgICAgICAgIHNlbGYuX3BvbGwodGltZW91dCkKKyAgICAgICAgdG1wID0gc2VsZi5fcmVzdWx0cworICAgICAgICBzZWxmLl9yZXN1bHRzID0gW10KKyAgICAgICAgcmV0dXJuIHRtcAorCisgICAgZGVmIHJlY3Yoc2VsZiwgY29ubiwgbmJ5dGVzLCBmbGFncz0wKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGNvbm4pCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNvY2tldC5zb2NrZXQpOgorICAgICAgICAgICAgb3YuV1NBUmVjdihjb25uLmZpbGVubygpLCBuYnl0ZXMsIGZsYWdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3YuUmVhZEZpbGUoY29ubi5maWxlbm8oKSwgbmJ5dGVzKQorCisgICAgICAgIGRlZiBmaW5pc2godHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIGV4Yy53aW5lcnJvciA9PSBfb3ZlcmxhcHBlZC5FUlJPUl9ORVROQU1FX0RFTEVURUQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25SZXNldEVycm9yKCpleGMuYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoKQorCisgICAgZGVmIHNlbmQoc2VsZiwgY29ubiwgYnVmLCBmbGFncz0wKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGNvbm4pCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNvY2tldC5zb2NrZXQpOgorICAgICAgICAgICAgb3YuV1NBU2VuZChjb25uLmZpbGVubygpLCBidWYsIGZsYWdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3YuV3JpdGVGaWxlKGNvbm4uZmlsZW5vKCksIGJ1ZikKKworICAgICAgICBkZWYgZmluaXNoKHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBleGMud2luZXJyb3IgPT0gX292ZXJsYXBwZWQuRVJST1JfTkVUTkFNRV9ERUxFVEVEOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVzZXRFcnJvcigqZXhjLmFyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIGNvbm4sIGZpbmlzaCkKKworICAgIGRlZiBhY2NlcHQoc2VsZiwgbGlzdGVuZXIpOgorICAgICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX2lvY3AobGlzdGVuZXIpCisgICAgICAgIGNvbm4gPSBzZWxmLl9nZXRfYWNjZXB0X3NvY2tldChsaXN0ZW5lci5mYW1pbHkpCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBvdi5BY2NlcHRFeChsaXN0ZW5lci5maWxlbm8oKSwgY29ubi5maWxlbm8oKSkKKworICAgICAgICBkZWYgZmluaXNoX2FjY2VwdCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgIyBVc2UgU09fVVBEQVRFX0FDQ0VQVF9DT05URVhUIHNvIGdldHNvY2tuYW1lKCkgZXRjIHdvcmsuCisgICAgICAgICAgICBidWYgPSBzdHJ1Y3QucGFjaygnQFAnLCBsaXN0ZW5lci5maWxlbm8oKSkKKyAgICAgICAgICAgIGNvbm4uc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3ZlcmxhcHBlZC5TT19VUERBVEVfQUNDRVBUX0NPTlRFWFQsIGJ1ZikKKyAgICAgICAgICAgIGNvbm4uc2V0dGltZW91dChsaXN0ZW5lci5nZXR0aW1lb3V0KCkpCisgICAgICAgICAgICByZXR1cm4gY29ubiwgY29ubi5nZXRwZWVybmFtZSgpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYWNjZXB0X2Nvcm8oZnV0dXJlLCBjb25uKToKKyAgICAgICAgICAgICMgQ29yb3V0aW5lIGNsb3NpbmcgdGhlIGFjY2VwdCBzb2NrZXQgaWYgdGhlIGZ1dHVyZSBpcyBjYW5jZWxsZWQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dHVyZQorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBmdXR1cmUgPSBzZWxmLl9yZWdpc3RlcihvdiwgbGlzdGVuZXIsIGZpbmlzaF9hY2NlcHQpCisgICAgICAgIGNvcm8gPSBhY2NlcHRfY29ybyhmdXR1cmUsIGNvbm4pCisgICAgICAgIHRhc2tzLmFzeW5jKGNvcm8sIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgcmV0dXJuIGZ1dHVyZQorCisgICAgZGVmIGNvbm5lY3Qoc2VsZiwgY29ubiwgYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChjb25uKQorICAgICAgICAjIFRoZSBzb2NrZXQgbmVlZHMgdG8gYmUgbG9jYWxseSBib3VuZCBiZWZvcmUgd2UgY2FsbCBDb25uZWN0RXgoKS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX292ZXJsYXBwZWQuQmluZExvY2FsKGNvbm4uZmlsZW5vKCksIGNvbm4uZmFtaWx5KQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS53aW5lcnJvciAhPSBlcnJuby5XU0FFSU5WQUw6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUHJvYmFibHkgYWxyZWFkeSBsb2NhbGx5IGJvdW5kOyBjaGVjayB1c2luZyBnZXRzb2NrbmFtZSgpLgorICAgICAgICAgICAgaWYgY29ubi5nZXRzb2NrbmFtZSgpWzFdID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIG92LkNvbm5lY3RFeChjb25uLmZpbGVubygpLCBhZGRyZXNzKQorCisgICAgICAgIGRlZiBmaW5pc2hfY29ubmVjdCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgIyBVc2UgU09fVVBEQVRFX0NPTk5FQ1RfQ09OVEVYVCBzbyBnZXRzb2NrbmFtZSgpIGV0YyB3b3JrLgorICAgICAgICAgICAgY29ubi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vdmVybGFwcGVkLlNPX1VQREFURV9DT05ORUNUX0NPTlRFWFQsIDApCisgICAgICAgICAgICByZXR1cm4gY29ubgorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoX2Nvbm5lY3QpCisKKyAgICBkZWYgYWNjZXB0X3BpcGUoc2VsZiwgcGlwZSk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChwaXBlKQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgb3YuQ29ubmVjdE5hbWVkUGlwZShwaXBlLmZpbGVubygpKQorCisgICAgICAgIGRlZiBmaW5pc2godHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgIHJldHVybiBwaXBlCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlZ2lzdGVyKG92LCBwaXBlLCBmaW5pc2gpCisKKyAgICBkZWYgY29ubmVjdF9waXBlKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgb3YuV2FpdE5hbWVkUGlwZUFuZENvbm5lY3QoYWRkcmVzcywgc2VsZi5faW9jcCwgb3YuYWRkcmVzcykKKworICAgICAgICBkZWYgZmluaXNoKGVyciwgaGFuZGxlLCBvdik6CisgICAgICAgICAgICAjIGVyciwgaGFuZGxlIHdlcmUgYXJndW1lbnRzIHBhc3NlZCB0byBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cygpCisgICAgICAgICAgICAjIGluIGEgZnVuY3Rpb24gcnVuIGluIGEgdGhyZWFkIHBvb2wuCisgICAgICAgICAgICBpZiBlcnIgPT0gX292ZXJsYXBwZWQuRVJST1JfU0VNX1RJTUVPVVQ6CisgICAgICAgICAgICAgICAgIyBDb25uZWN0aW9uIGRpZCBub3Qgc3VjY2VlZCB3aXRoaW4gdGltZSBsaW1pdC4KKyAgICAgICAgICAgICAgICBtc2cgPSBfb3ZlcmxhcHBlZC5Gb3JtYXRNZXNzYWdlKGVycikKKyAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVmdXNlZEVycm9yKDAsIG1zZywgTm9uZSwgZXJyKQorICAgICAgICAgICAgZWxpZiBlcnIgIT0gMDoKKyAgICAgICAgICAgICAgICBtc2cgPSBfb3ZlcmxhcHBlZC5Gb3JtYXRNZXNzYWdlKGVycikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKDAsIG1zZywgTm9uZSwgZXJyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93c191dGlscy5QaXBlSGFuZGxlKGhhbmRsZSkKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIE5vbmUsIGZpbmlzaCwgd2FpdF9mb3JfcG9zdD1UcnVlKQorCisgICAgZGVmIHdhaXRfZm9yX2hhbmRsZShzZWxmLCBoYW5kbGUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgIG1zID0gX3dpbmFwaS5JTkZJTklURQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoKSBoYXMgYSByZXNvbHV0aW9uIG9mIDEgbWlsbGlzZWNvbmQsCisgICAgICAgICAgICAjIHJvdW5kIGF3YXkgZnJvbSB6ZXJvIHRvIHdhaXQgKmF0IGxlYXN0KiB0aW1lb3V0IHNlY29uZHMuCisgICAgICAgICAgICBtcyA9IG1hdGguY2VpbCh0aW1lb3V0ICogMWUzKQorCisgICAgICAgICMgV2Ugb25seSBjcmVhdGUgb3Ygc28gd2UgY2FuIHVzZSBvdi5hZGRyZXNzIGFzIGEga2V5IGZvciB0aGUgY2FjaGUuCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICB3aCA9IF9vdmVybGFwcGVkLlJlZ2lzdGVyV2FpdFdpdGhRdWV1ZSgKKyAgICAgICAgICAgIGhhbmRsZSwgc2VsZi5faW9jcCwgb3YuYWRkcmVzcywgbXMpCisgICAgICAgIGYgPSBfV2FpdEhhbmRsZUZ1dHVyZSh3aCwgbG9vcD1zZWxmLl9sb29wKQorCisgICAgICAgIGRlZiBmaW5pc2godHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgaWYgbm90IGYuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfb3ZlcmxhcHBlZC5VbnJlZ2lzdGVyV2FpdCh3aCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yICE9IF9vdmVybGFwcGVkLkVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBzZWNvbmQgd2FpdCBtZWFucyB0aGF0IHdlIHNob3VsZCBvbmx5IHVzZQorICAgICAgICAgICAgIyB0aGlzIHdpdGggaGFuZGxlcyB0eXBlcyB3aGVyZSBhIHN1Y2Nlc3NmdWwgd2FpdCBoYXMgbm8KKyAgICAgICAgICAgICMgZWZmZWN0LiAgU28gZXZlbnRzIG9yIHByb2Nlc3NlcyBhcmUgYWxsIHJpZ2h0LCBidXQgbG9ja3MKKyAgICAgICAgICAgICMgb3Igc2VtYXBob3JlcyBhcmUgbm90LiAgQWxzbyBub3RlIGlmIHRoZSBoYW5kbGUgaXMKKyAgICAgICAgICAgICMgc2lnbmFsbGVkIGFuZCB0aGVuIHF1aWNrbHkgcmVzZXQsIHRoZW4gd2UgbWF5IHJldHVybgorICAgICAgICAgICAgIyBGYWxzZSBldmVuIHRob3VnaCB3ZSBoYXZlIG5vdCB0aW1lZCBvdXQuCisgICAgICAgICAgICByZXR1cm4gKF93aW5hcGkuV2FpdEZvclNpbmdsZU9iamVjdChoYW5kbGUsIDApID09CisgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKworICAgICAgICBzZWxmLl9jYWNoZVtvdi5hZGRyZXNzXSA9IChmLCBvdiwgTm9uZSwgZmluaXNoKQorICAgICAgICByZXR1cm4gZgorCisgICAgZGVmIF9yZWdpc3Rlcl93aXRoX2lvY3Aoc2VsZiwgb2JqKToKKyAgICAgICAgIyBUbyBnZXQgbm90aWZpY2F0aW9ucyBvZiBmaW5pc2hlZCBvcHMgb24gdGhpcyBvYmplY3RzIHNlbnQgdG8gdGhlCisgICAgICAgICMgY29tcGxldGlvbiBwb3J0LCB3ZXJlIG11c3QgcmVnaXN0ZXIgdGhlIGhhbmRsZS4KKyAgICAgICAgaWYgb2JqIG5vdCBpbiBzZWxmLl9yZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5fcmVnaXN0ZXJlZC5hZGQob2JqKQorICAgICAgICAgICAgX292ZXJsYXBwZWQuQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChvYmouZmlsZW5vKCksIHNlbGYuX2lvY3AsIDAsIDApCisgICAgICAgICAgICAjIFhYWCBXZSBjb3VsZCBhbHNvIHVzZSBTZXRGaWxlQ29tcGxldGlvbk5vdGlmaWNhdGlvbk1vZGVzKCkKKyAgICAgICAgICAgICMgdG8gYXZvaWQgc2VuZGluZyBub3RpZmljYXRpb25zIHRvIGNvbXBsZXRpb24gcG9ydCBvZiBvcHMKKyAgICAgICAgICAgICMgdGhhdCBzdWNjZWVkIGltbWVkaWF0ZWx5LgorCisgICAgZGVmIF9yZWdpc3RlcihzZWxmLCBvdiwgb2JqLCBjYWxsYmFjaywgd2FpdF9mb3JfcG9zdD1GYWxzZSk6CisgICAgICAgICMgUmV0dXJuIGEgZnV0dXJlIHdoaWNoIHdpbGwgYmUgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKyAgICAgICAgIyBvcGVyYXRpb24gd2hlbiBpdCBjb21wbGV0ZXMuICBUaGUgZnV0dXJlJ3MgdmFsdWUgaXMgYWN0dWFsbHkKKyAgICAgICAgIyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY2FsbGJhY2soKS4KKyAgICAgICAgZiA9IF9PdmVybGFwcGVkRnV0dXJlKG92LCBsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIGlmIG92LnBlbmRpbmcgb3Igd2FpdF9mb3JfcG9zdDoKKyAgICAgICAgICAgICMgUmVnaXN0ZXIgdGhlIG92ZXJsYXBwZWQgb3BlcmF0aW9uIGZvciBsYXRlci4gIE5vdGUgdGhhdAorICAgICAgICAgICAgIyB3ZSBvbmx5IHN0b3JlIG9iaiB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZ2FyYmFnZQorICAgICAgICAgICAgIyBjb2xsZWN0ZWQgdG9vIGVhcmx5LgorICAgICAgICAgICAgc2VsZi5fY2FjaGVbb3YuYWRkcmVzc10gPSAoZiwgb3YsIG9iaiwgY2FsbGJhY2spCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCwgc28gbm8gbmVlZCB0byBwb3N0cG9uZSB0aGUKKyAgICAgICAgICAgICMgd29yay4gIFdlIGNhbm5vdCB0YWtlIHRoaXMgc2hvcnQgY3V0IGlmIHdlIG5lZWQgdGhlCisgICAgICAgICAgICAjIE51bWJlck9mQnl0ZXMsIENvbXBsZXRpb25LZXkgdmFsdWVzIHJldHVybmVkIGJ5CisgICAgICAgICAgICAjIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayhOb25lLCBOb25lLCBvdikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGYKKworICAgIGRlZiBfZ2V0X2FjY2VwdF9zb2NrZXQoc2VsZiwgZmFtaWx5KToKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoZmFtaWx5KQorICAgICAgICBzLnNldHRpbWVvdXQoMCkKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBfcG9sbChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICBtcyA9IElORklOSVRFCisgICAgICAgIGVsaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuZWdhdGl2ZSB0aW1lb3V0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cygpIGhhcyBhIHJlc29sdXRpb24gb2YgMSBtaWxsaXNlY29uZCwKKyAgICAgICAgICAgICMgcm91bmQgYXdheSBmcm9tIHplcm8gdG8gd2FpdCAqYXQgbGVhc3QqIHRpbWVvdXQgc2Vjb25kcy4KKyAgICAgICAgICAgIG1zID0gbWF0aC5jZWlsKHRpbWVvdXQgKiAxZTMpCisgICAgICAgICAgICBpZiBtcyA+PSBJTkZJTklURToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0aW1lb3V0IHRvbyBiaWciKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc3RhdHVzID0gX292ZXJsYXBwZWQuR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyhzZWxmLl9pb2NwLCBtcykKKyAgICAgICAgICAgIGlmIHN0YXR1cyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXJyLCB0cmFuc2ZlcnJlZCwga2V5LCBhZGRyZXNzID0gc3RhdHVzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiwgb3YsIG9iaiwgY2FsbGJhY2sgPSBzZWxmLl9jYWNoZS5wb3AoYWRkcmVzcykKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAjIGtleSBpcyBlaXRoZXIgemVybywgb3IgaXQgaXMgdXNlZCB0byByZXR1cm4gYSBwaXBlCisgICAgICAgICAgICAgICAgIyBoYW5kbGUgd2hpY2ggc2hvdWxkIGJlIGNsb3NlZCB0byBhdm9pZCBhIGxlYWsuCisgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiAoMCwgX292ZXJsYXBwZWQuSU5WQUxJRF9IQU5ETEVfVkFMVUUpOgorICAgICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGtleSkKKyAgICAgICAgICAgICAgICBtcyA9IDAKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgb2JqIGluIHNlbGYuX3N0b3BwZWRfc2VydmluZzoKKyAgICAgICAgICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgICAgICBlbGlmIG5vdCBmLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayh0cmFuc2ZlcnJlZCwga2V5LCBvdikKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBmLnNldF9leGNlcHRpb24oZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVzdWx0cy5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmLnNldF9yZXN1bHQodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3VsdHMuYXBwZW5kKGYpCisgICAgICAgICAgICBtcyA9IDAKKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIG9iaik6CisgICAgICAgICMgb2JqIGlzIGEgc29ja2V0IG9yIHBpcGUgaGFuZGxlLiAgSXQgd2lsbCBiZSBjbG9zZWQgaW4KKyAgICAgICAgIyBCYXNlUHJvYWN0b3JFdmVudExvb3AuX3N0b3Bfc2VydmluZygpIHdoaWNoIHdpbGwgbWFrZSBhbnkKKyAgICAgICAgIyBwZW5kaW5nIG9wZXJhdGlvbnMgZmFpbCBxdWlja2x5LgorICAgICAgICBzZWxmLl9zdG9wcGVkX3NlcnZpbmcuYWRkKG9iaikKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIyBDYW5jZWwgcmVtYWluaW5nIHJlZ2lzdGVyZWQgb3BlcmF0aW9ucy4KKyAgICAgICAgZm9yIGFkZHJlc3MsIChmLCBvdiwgb2JqLCBjYWxsYmFjaykgaW4gbGlzdChzZWxmLl9jYWNoZS5pdGVtcygpKToKKyAgICAgICAgICAgIGlmIG9iaiBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgVGhlIG9wZXJhdGlvbiB3YXMgc3RhcnRlZCB3aXRoIGNvbm5lY3RfcGlwZSgpIHdoaWNoCisgICAgICAgICAgICAgICAgIyBxdWV1ZXMgYSB0YXNrIHRvIFdpbmRvd3MnIHRocmVhZCBwb29sLiAgVGhpcyBjYW5ub3QKKyAgICAgICAgICAgICAgICAjIGJlIGNhbmNlbGxlZCwgc28ganVzdCBmb3JnZXQgaXQuCisgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2NhY2hlW2FkZHJlc3NdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3YuY2FuY2VsKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdoaWxlIHNlbGYuX2NhY2hlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX3BvbGwoMSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCd0YWtpbmcgbG9uZyB0aW1lIHRvIGNsb3NlIHByb2FjdG9yJykKKworICAgICAgICBzZWxmLl9yZXN1bHRzID0gW10KKyAgICAgICAgaWYgc2VsZi5faW9jcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoc2VsZi5faW9jcCkKKyAgICAgICAgICAgIHNlbGYuX2lvY3AgPSBOb25lCisKKworY2xhc3MgX1dpbmRvd3NTdWJwcm9jZXNzVHJhbnNwb3J0KGJhc2Vfc3VicHJvY2Vzcy5CYXNlU3VicHJvY2Vzc1RyYW5zcG9ydCk6CisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIGFyZ3MsIHNoZWxsLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fcHJvYyA9IHdpbmRvd3NfdXRpbHMuUG9wZW4oCisgICAgICAgICAgICBhcmdzLCBzaGVsbD1zaGVsbCwgc3RkaW49c3RkaW4sIHN0ZG91dD1zdGRvdXQsIHN0ZGVycj1zdGRlcnIsCisgICAgICAgICAgICBidWZzaXplPWJ1ZnNpemUsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBjYWxsYmFjayhmKToKKyAgICAgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLl9wcm9jLnBvbGwoKQorICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19leGl0ZWQocmV0dXJuY29kZSkKKworICAgICAgICBmID0gc2VsZi5fbG9vcC5fcHJvYWN0b3Iud2FpdF9mb3JfaGFuZGxlKGludChzZWxmLl9wcm9jLl9oYW5kbGUpKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGNhbGxiYWNrKQorCisKK1NlbGVjdG9yRXZlbnRMb29wID0gX1dpbmRvd3NTZWxlY3RvckV2ZW50TG9vcAorCisKK2NsYXNzIF9XaW5kb3dzRGVmYXVsdEV2ZW50TG9vcFBvbGljeShldmVudHMuQmFzZURlZmF1bHRFdmVudExvb3BQb2xpY3kpOgorICAgIF9sb29wX2ZhY3RvcnkgPSBTZWxlY3RvckV2ZW50TG9vcAorCisKK0RlZmF1bHRFdmVudExvb3BQb2xpY3kgPSBfV2luZG93c0RlZmF1bHRFdmVudExvb3BQb2xpY3kKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3dpbmRvd3NfdXRpbHMucHkgYi9MaWIvYXN5bmNpby93aW5kb3dzX3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMWMwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby93aW5kb3dzX3V0aWxzLnB5CkBAIC0wLDAgKzEsMTkyIEBACisiIiIKK1ZhcmlvdXMgV2luZG93cyBzcGVjaWZpYyBiaXRzIGFuZCBwaWVjZXMKKyIiIgorCitpbXBvcnQgc3lzCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3dpbjMyIG9ubHknKQorCitpbXBvcnQgc29ja2V0CitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbXN2Y3J0CitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBfd2luYXBpCisKKworX19hbGxfXyA9IFsnc29ja2V0cGFpcicsICdwaXBlJywgJ1BvcGVuJywgJ1BJUEUnLCAnUGlwZUhhbmRsZSddCisKKworIyBDb25zdGFudHMvZ2xvYmFscworCisKK0JVRlNJWkUgPSA4MTkyCitQSVBFID0gc3VicHJvY2Vzcy5QSVBFCitTVERPVVQgPSBzdWJwcm9jZXNzLlNURE9VVAorX21tYXBfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgpCisKKworIyBSZXBsYWNlbWVudCBmb3Igc29ja2V0LnNvY2tldHBhaXIoKQorCisKK2RlZiBzb2NrZXRwYWlyKGZhbWlseT1zb2NrZXQuQUZfSU5FVCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPTApOgorICAgICIiIkEgc29ja2V0IHBhaXIgdXNhYmxlIGFzIGEgc2VsZi1waXBlLCBmb3IgV2luZG93cy4KKworICAgIE9yaWdpbjogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vNDMyNTc4MywgYnkgR2VlcnQgSmFuc2VuLiAgUHVibGljIGRvbWFpbi4KKyAgICAiIiIKKyAgICAjIFdlIGNyZWF0ZSBhIGNvbm5lY3RlZCBUQ1Agc29ja2V0LiBOb3RlIHRoZSB0cmljayB3aXRoIHNldGJsb2NraW5nKDApCisgICAgIyB0aGF0IHByZXZlbnRzIHVzIGZyb20gaGF2aW5nIHRvIGNyZWF0ZSBhIHRocmVhZC4KKyAgICBsc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bykKKyAgICBsc29jay5iaW5kKCgnbG9jYWxob3N0JywgMCkpCisgICAgbHNvY2subGlzdGVuKDEpCisgICAgYWRkciwgcG9ydCA9IGxzb2NrLmdldHNvY2tuYW1lKCkKKyAgICBjc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bykKKyAgICBjc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICB0cnk6CisgICAgICAgIGNzb2NrLmNvbm5lY3QoKGFkZHIsIHBvcnQpKQorICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgcGFzcworICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGxzb2NrLmNsb3NlKCkKKyAgICAgICAgY3NvY2suY2xvc2UoKQorICAgICAgICByYWlzZQorICAgIHNzb2NrLCBfID0gbHNvY2suYWNjZXB0KCkKKyAgICBjc29jay5zZXRibG9ja2luZyhUcnVlKQorICAgIGxzb2NrLmNsb3NlKCkKKyAgICByZXR1cm4gKHNzb2NrLCBjc29jaykKKworCisjIFJlcGxhY2VtZW50IGZvciBvcy5waXBlKCkgdXNpbmcgaGFuZGxlcyBpbnN0ZWFkIG9mIGZkcworCisKK2RlZiBwaXBlKCosIGR1cGxleD1GYWxzZSwgb3ZlcmxhcHBlZD0oVHJ1ZSwgVHJ1ZSksIGJ1ZnNpemU9QlVGU0laRSk6CisgICAgIiIiTGlrZSBvcy5waXBlKCkgYnV0IHdpdGggb3ZlcmxhcHBlZCBzdXBwb3J0IGFuZCB1c2luZyBoYW5kbGVzIG5vdCBmZHMuIiIiCisgICAgYWRkcmVzcyA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9cidcXC5ccGlwZVxweXRob24tcGlwZS0lZC0lZC0nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcy5nZXRwaWQoKSwgbmV4dChfbW1hcF9jb3VudGVyKSkpCisKKyAgICBpZiBkdXBsZXg6CisgICAgICAgIG9wZW5tb2RlID0gX3dpbmFwaS5QSVBFX0FDQ0VTU19EVVBMRVgKKyAgICAgICAgYWNjZXNzID0gX3dpbmFwaS5HRU5FUklDX1JFQUQgfCBfd2luYXBpLkdFTkVSSUNfV1JJVEUKKyAgICAgICAgb2JzaXplLCBpYnNpemUgPSBidWZzaXplLCBidWZzaXplCisgICAgZWxzZToKKyAgICAgICAgb3Blbm1vZGUgPSBfd2luYXBpLlBJUEVfQUNDRVNTX0lOQk9VTkQKKyAgICAgICAgYWNjZXNzID0gX3dpbmFwaS5HRU5FUklDX1dSSVRFCisgICAgICAgIG9ic2l6ZSwgaWJzaXplID0gMCwgYnVmc2l6ZQorCisgICAgb3Blbm1vZGUgfD0gX3dpbmFwaS5GSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRQorCisgICAgaWYgb3ZlcmxhcHBlZFswXToKKyAgICAgICAgb3Blbm1vZGUgfD0gX3dpbmFwaS5GSUxFX0ZMQUdfT1ZFUkxBUFBFRAorCisgICAgaWYgb3ZlcmxhcHBlZFsxXToKKyAgICAgICAgZmxhZ3NfYW5kX2F0dHJpYnMgPSBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVECisgICAgZWxzZToKKyAgICAgICAgZmxhZ3NfYW5kX2F0dHJpYnMgPSAwCisKKyAgICBoMSA9IGgyID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgaDEgPSBfd2luYXBpLkNyZWF0ZU5hbWVkUGlwZSgKKyAgICAgICAgICAgIGFkZHJlc3MsIG9wZW5tb2RlLCBfd2luYXBpLlBJUEVfV0FJVCwKKyAgICAgICAgICAgIDEsIG9ic2l6ZSwgaWJzaXplLCBfd2luYXBpLk5NUFdBSVRfV0FJVF9GT1JFVkVSLCBfd2luYXBpLk5VTEwpCisKKyAgICAgICAgaDIgPSBfd2luYXBpLkNyZWF0ZUZpbGUoCisgICAgICAgICAgICBhZGRyZXNzLCBhY2Nlc3MsIDAsIF93aW5hcGkuTlVMTCwgX3dpbmFwaS5PUEVOX0VYSVNUSU5HLAorICAgICAgICAgICAgZmxhZ3NfYW5kX2F0dHJpYnMsIF93aW5hcGkuTlVMTCkKKworICAgICAgICBvdiA9IF93aW5hcGkuQ29ubmVjdE5hbWVkUGlwZShoMSwgb3ZlcmxhcHBlZD1UcnVlKQorICAgICAgICBvdi5HZXRPdmVybGFwcGVkUmVzdWx0KFRydWUpCisgICAgICAgIHJldHVybiBoMSwgaDIKKyAgICBleGNlcHQ6CisgICAgICAgIGlmIGgxIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoMSkKKyAgICAgICAgaWYgaDIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgyKQorICAgICAgICByYWlzZQorCisKKyMgV3JhcHBlciBmb3IgYSBwaXBlIGhhbmRsZQorCisKK2NsYXNzIFBpcGVIYW5kbGU6CisgICAgIiIiV3JhcHBlciBmb3IgYW4gb3ZlcmxhcHBlZCBwaXBlIGhhbmRsZSB3aGljaCBpcyB2YWd1ZWx5IGZpbGUtb2JqZWN0IGxpa2UuCisKKyAgICBUaGUgSU9DUCBldmVudCBsb29wIGNhbiB1c2UgdGhlc2UgaW5zdGVhZCBvZiBzb2NrZXQgb2JqZWN0cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlKToKKyAgICAgICAgc2VsZi5faGFuZGxlID0gaGFuZGxlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaGFuZGxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlCisKKyAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlCisKKyAgICBkZWYgY2xvc2Uoc2VsZiwgKiwgQ2xvc2VIYW5kbGU9X3dpbmFwaS5DbG9zZUhhbmRsZSk6CisgICAgICAgIGlmIHNlbGYuX2hhbmRsZSAhPSAtMToKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHNlbGYuX2hhbmRsZSkKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZSA9IC0xCisKKyAgICBfX2RlbF9fID0gY2xvc2UKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworCisjIFJlcGxhY2VtZW50IGZvciBzdWJwcm9jZXNzLlBvcGVuIHVzaW5nIG92ZXJsYXBwZWQgcGlwZSBoYW5kbGVzCisKKworY2xhc3MgUG9wZW4oc3VicHJvY2Vzcy5Qb3Blbik6CisgICAgIiIiUmVwbGFjZW1lbnQgZm9yIHN1YnByb2Nlc3MuUG9wZW4gdXNpbmcgb3ZlcmxhcHBlZCBwaXBlIGhhbmRsZXMuCisKKyAgICBUaGUgc3RkaW4sIHN0ZG91dCwgc3RkZXJyIGFyZSBOb25lIG9yIGluc3RhbmNlcyBvZiBQaXBlSGFuZGxlLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsICoqa3dkcyk6CisgICAgICAgIGFzc2VydCBub3Qga3dkcy5nZXQoJ3VuaXZlcnNhbF9uZXdsaW5lcycpCisgICAgICAgIGFzc2VydCBrd2RzLmdldCgnYnVmc2l6ZScsIDApID09IDAKKyAgICAgICAgc3RkaW5fcmZkID0gc3Rkb3V0X3dmZCA9IHN0ZGVycl93ZmQgPSBOb25lCisgICAgICAgIHN0ZGluX3doID0gc3Rkb3V0X3JoID0gc3RkZXJyX3JoID0gTm9uZQorICAgICAgICBpZiBzdGRpbiA9PSBQSVBFOgorICAgICAgICAgICAgc3RkaW5fcmgsIHN0ZGluX3doID0gcGlwZShvdmVybGFwcGVkPShGYWxzZSwgVHJ1ZSksIGR1cGxleD1UcnVlKQorICAgICAgICAgICAgc3RkaW5fcmZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHN0ZGluX3JoLCBvcy5PX1JET05MWSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ZGluX3JmZCA9IHN0ZGluCisgICAgICAgIGlmIHN0ZG91dCA9PSBQSVBFOgorICAgICAgICAgICAgc3Rkb3V0X3JoLCBzdGRvdXRfd2ggPSBwaXBlKG92ZXJsYXBwZWQ9KFRydWUsIEZhbHNlKSkKKyAgICAgICAgICAgIHN0ZG91dF93ZmQgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUoc3Rkb3V0X3doLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3Rkb3V0X3dmZCA9IHN0ZG91dAorICAgICAgICBpZiBzdGRlcnIgPT0gUElQRToKKyAgICAgICAgICAgIHN0ZGVycl9yaCwgc3RkZXJyX3doID0gcGlwZShvdmVybGFwcGVkPShUcnVlLCBGYWxzZSkpCisgICAgICAgICAgICBzdGRlcnJfd2ZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHN0ZGVycl93aCwgMCkKKyAgICAgICAgZWxpZiBzdGRlcnIgPT0gU1RET1VUOgorICAgICAgICAgICAgc3RkZXJyX3dmZCA9IHN0ZG91dF93ZmQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ZGVycl93ZmQgPSBzdGRlcnIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhhcmdzLCBzdGRpbj1zdGRpbl9yZmQsIHN0ZG91dD1zdGRvdXRfd2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3RkZXJyX3dmZCwgKiprd2RzKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBmb3IgaCBpbiAoc3RkaW5fd2gsIHN0ZG91dF9yaCwgc3RkZXJyX3JoKToKKyAgICAgICAgICAgICAgICBpZiBoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3RkaW5fd2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zdGRpbiA9IFBpcGVIYW5kbGUoc3RkaW5fd2gpCisgICAgICAgICAgICBpZiBzdGRvdXRfcmggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zdGRvdXQgPSBQaXBlSGFuZGxlKHN0ZG91dF9yaCkKKyAgICAgICAgICAgIGlmIHN0ZGVycl9yaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZGVyciA9IFBpcGVIYW5kbGUoc3RkZXJyX3JoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgc3RkaW4gPT0gUElQRToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzdGRpbl9yZmQpCisgICAgICAgICAgICBpZiBzdGRvdXQgPT0gUElQRToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzdGRvdXRfd2ZkKQorICAgICAgICAgICAgaWYgc3RkZXJyID09IFBJUEU6CisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc3RkZXJyX3dmZCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY29yZS5weSBiL0xpYi9hc3luY29yZS5weQppbmRleCA5MDlkOWY2Li43NTQ4MWRkIDEwMDY0NAotLS0gYS9MaWIvYXN5bmNvcmUucHkKKysrIGIvTGliL2FzeW5jb3JlLnB5CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgICAgIG9iai5oYW5kbGVfZXhwdF9ldmVudCgpCiAgICAgICAgIGlmIGZsYWdzICYgKHNlbGVjdC5QT0xMSFVQIHwgc2VsZWN0LlBPTExFUlIgfCBzZWxlY3QuUE9MTE5WQUwpOgogICAgICAgICAgICAgb2JqLmhhbmRsZV9jbG9zZSgpCi0gICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgIGlmIGUuYXJnc1swXSBub3QgaW4gX0RJU0NPTk5FQ1RFRDoKICAgICAgICAgICAgIG9iai5oYW5kbGVfZXJyb3IoKQogICAgICAgICBlbHNlOgpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICAgICAgICAjIHBhc3NlZCBiZSBjb25uZWN0ZWQuCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5hZGRyID0gc29jay5nZXRwZWVybmFtZSgpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoRU5PVENPTk4sIEVJTlZBTCk6CiAgICAgICAgICAgICAgICAgICAgICMgVG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGdvdCBhbiB1bmNvbm5lY3RlZAogICAgICAgICAgICAgICAgICAgICAjIHNvY2tldC4KQEAgLTMwNCw3ICszMDQsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09fUkVVU0VBRERSKSB8IDEKICAgICAgICAgICAgICAgICApCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzQ1LDcgKzM0NSw3IEBACiAgICAgICAgICAgICBzZWxmLmFkZHIgPSBhZGRyZXNzCiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jb25uZWN0X2V2ZW50KCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnIsIGVycm9yY29kZVtlcnJdKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIsIGVycm9yY29kZVtlcnJdKQogCiAgICAgZGVmIGFjY2VwdChzZWxmKToKICAgICAgICAgIyBYWFggY2FuIHJldHVybiBlaXRoZXIgYW4gYWRkcmVzcyBwYWlyIG9yIE5vbmUKQEAgLTM1Myw3ICszNTMsNyBAQAogICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gaW4gKEVXT1VMREJMT0NLLCBFQ09OTkFCT1JURUQsIEVBR0FJTik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGVsc2U6CkBAIC0zNjUsNyArMzY1LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5zb2NrZXQuc2VuZChkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gPT0gRVdPVUxEQkxPQ0s6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgICAgIGVsaWYgd2h5LmFyZ3NbMF0gaW4gX0RJU0NPTk5FQ1RFRDoKQEAgLTM4NCw3ICszODQsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBiJycKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgICMgd2luc29jayBzb21ldGltZXMgcmFpc2VzIEVOT1RDT05OCiAgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBpbiBfRElTQ09OTkVDVEVEOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nsb3NlKCkKQEAgLTM5NywxMSArMzk3LDEyIEBACiAgICAgICAgIHNlbGYuYWNjZXB0aW5nID0gRmFsc2UKICAgICAgICAgc2VsZi5jb25uZWN0aW5nID0gRmFsc2UKICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6Ci0gICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBub3QgaW4gKEVOT1RDT05OLCBFQkFERik6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgaWYgc2VsZi5zb2NrZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIG5vdCBpbiAoRU5PVENPTk4sIEVCQURGKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgICMgY2hlYXAgaW5oZXJpdGFuY2UsIHVzZWQgdG8gcGFzcyBhbGwgb3RoZXIgYXR0cmlidXRlCiAgICAgIyByZWZlcmVuY2VzIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCkBAIC00NDMsNyArNDQ0LDcgQEAKICAgICBkZWYgaGFuZGxlX2Nvbm5lY3RfZXZlbnQoc2VsZik6CiAgICAgICAgIGVyciA9IHNlbGYuc29ja2V0LmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19FUlJPUikKICAgICAgICAgaWYgZXJyICE9IDA6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJyLCBfc3RyZXJyb3IoZXJyKSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyLCBfc3RyZXJyb3IoZXJyKSkKICAgICAgICAgc2VsZi5oYW5kbGVfY29ubmVjdCgpCiAgICAgICAgIHNlbGYuY29ubmVjdGVkID0gVHJ1ZQogICAgICAgICBzZWxmLmNvbm5lY3RpbmcgPSBGYWxzZQpAQCAtNTMyLDcgKzUzMyw3IEBACiAKICAgICBkZWYgaW5pdGlhdGVfc2VuZChzZWxmKToKICAgICAgICAgbnVtX3NlbnQgPSAwCi0gICAgICAgIG51bV9zZW50ID0gZGlzcGF0Y2hlci5zZW5kKHNlbGYsIHNlbGYub3V0X2J1ZmZlcls6NTEyXSkKKyAgICAgICAgbnVtX3NlbnQgPSBkaXNwYXRjaGVyLnNlbmQoc2VsZiwgc2VsZi5vdXRfYnVmZmVyWzo2NTUzNl0pCiAgICAgICAgIHNlbGYub3V0X2J1ZmZlciA9IHNlbGYub3V0X2J1ZmZlcltudW1fc2VudDpdCiAKICAgICBkZWYgaGFuZGxlX3dyaXRlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2Jhc2U2NC5weSBiL0xpYi9iYXNlNjQucHkKaW5kZXggYjZlODJiNi4uNTczZjc2ZCAxMDA3NTUKLS0tIGEvTGliL2Jhc2U2NC5weQorKysgYi9MaWIvYmFzZTY0LnB5CkBAIC0xLDYgKzEsNiBAQAogIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAotIiIiUkZDIDM1NDg6IEJhc2UxNiwgQmFzZTMyLCBCYXNlNjQgRGF0YSBFbmNvZGluZ3MiIiIKKyIiIkJhc2UxNiwgQmFzZTMyLCBCYXNlNjQgKFJGQyAzNTQ4KSwgQmFzZTg1IGFuZCBBc2NpaTg1IGRhdGEgZW5jb2RpbmdzIiIiCiAKICMgTW9kaWZpZWQgMDQtT2N0LTE5OTUgYnkgSmFjayBKYW5zZW4gdG8gdXNlIGJpbmFzY2lpIG1vZHVsZQogIyBNb2RpZmllZCAzMC1EZWMtMjAwMyBieSBCYXJyeSBXYXJzYXcgdG8gYWRkIGZ1bGwgUkZDIDM1NDggc3VwcG9ydApAQCAtOSw2ICs5LDcgQEAKIGltcG9ydCByZQogaW1wb3J0IHN0cnVjdAogaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgaXRlcnRvb2xzCiAKIAogX19hbGxfXyA9IFsKQEAgLTE3LDYgKzE4LDggQEAKICAgICAjIEdlbmVyYWxpemVkIGludGVyZmFjZSBmb3Igb3RoZXIgZW5jb2RpbmdzCiAgICAgJ2I2NGVuY29kZScsICdiNjRkZWNvZGUnLCAnYjMyZW5jb2RlJywgJ2IzMmRlY29kZScsCiAgICAgJ2IxNmVuY29kZScsICdiMTZkZWNvZGUnLAorICAgICMgQmFzZTg1IGFuZCBBc2NpaTg1IGVuY29kaW5ncworICAgICdiODVlbmNvZGUnLCAnYjg1ZGVjb2RlJywgJ2E4NWVuY29kZScsICdhODVkZWNvZGUnLAogICAgICMgU3RhbmRhcmQgQmFzZTY0IGVuY29kaW5nCiAgICAgJ3N0YW5kYXJkX2I2NGVuY29kZScsICdzdGFuZGFyZF9iNjRkZWNvZGUnLAogICAgICMgU29tZSBjb21tb24gQmFzZTY0IGFsdGVybmF0aXZlcy4gIEFzIHJlZmVyZW5jZWQgYnkgUkZDIDM0NTgsIHNlZSB0aHJlYWQKQEAgLTM1LDExICszOCwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCdhc2NpaScpCiAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdHJpbmcgYXJndW1lbnQgc2hvdWxkIGNvbnRhaW4gb25seSBBU0NJSSBjaGFyYWN0ZXJzJykKLSAgICBlbGlmIGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgorICAgIGlmIGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgogICAgICAgICByZXR1cm4gcwotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGJ5dGVzIG9yIEFTQ0lJIHN0cmluZywgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKQotCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gbWVtb3J5dmlldyhzKS50b2J5dGVzKCkKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIGJ5dGVzLWxpa2Ugb2JqZWN0IG9yIEFTQ0lJICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcsIG5vdCAlciIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykgZnJvbSBOb25lCiAKIAogIyBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdXNlcyBiaW5hc2NpaQpAQCAtNTQsMTQgKzU5LDkgQEAKIAogICAgIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgogICAgICIiIgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKQogICAgICMgU3RyaXAgb2ZmIHRoZSB0cmFpbGluZyBuZXdsaW5lCiAgICAgZW5jb2RlZCA9IGJpbmFzY2lpLmIyYV9iYXNlNjQocylbOi0xXQogICAgIGlmIGFsdGNoYXJzIGlzIG5vdCBOb25lOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhbHRjaGFycywgYnl0ZXNfdHlwZXMpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgbm90ICVzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgYWx0Y2hhcnMuX19jbGFzc19fLl9fbmFtZV9fKQogICAgICAgICBhc3NlcnQgbGVuKGFsdGNoYXJzKSA9PSAyLCByZXByKGFsdGNoYXJzKQogICAgICAgICByZXR1cm4gZW5jb2RlZC50cmFuc2xhdGUoYnl0ZXMubWFrZXRyYW5zKGInKy8nLCBhbHRjaGFycykpCiAgICAgcmV0dXJuIGVuY29kZWQKQEAgLTEzOCwyMSArMTM4LDEwIEBACiAKIAogIyBCYXNlMzIgZW5jb2RpbmcvZGVjb2RpbmcgbXVzdCBiZSBkb25lIGluIFB5dGhvbgotX2IzMmFscGhhYmV0ID0gewotICAgIDA6IGInQScsICA5OiBiJ0onLCAxODogYidTJywgMjc6IGInMycsCi0gICAgMTogYidCJywgMTA6IGInSycsIDE5OiBiJ1QnLCAyODogYic0JywKLSAgICAyOiBiJ0MnLCAxMTogYidMJywgMjA6IGInVScsIDI5OiBiJzUnLAotICAgIDM6IGInRCcsIDEyOiBiJ00nLCAyMTogYidWJywgMzA6IGInNicsCi0gICAgNDogYidFJywgMTM6IGInTicsIDIyOiBiJ1cnLCAzMTogYic3JywKLSAgICA1OiBiJ0YnLCAxNDogYidPJywgMjM6IGInWCcsCi0gICAgNjogYidHJywgMTU6IGInUCcsIDI0OiBiJ1knLAotICAgIDc6IGInSCcsIDE2OiBiJ1EnLCAyNTogYidaJywKLSAgICA4OiBiJ0knLCAxNzogYidSJywgMjY6IGInMicsCi0gICAgfQotCi1fYjMydGFiID0gW3ZbMF0gZm9yIGssIHYgaW4gc29ydGVkKF9iMzJhbHBoYWJldC5pdGVtcygpKV0KLV9iMzJyZXYgPSBkaWN0KFsodlswXSwgaykgZm9yIGssIHYgaW4gX2IzMmFscGhhYmV0Lml0ZW1zKCldKQotCitfYjMyYWxwaGFiZXQgPSBiJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMjM0NTY3JworX2IzMnRhYiA9IFtieXRlcyhbaV0pIGZvciBpIGluIF9iMzJhbHBoYWJldF0KK19iMzJ0YWIyID0gW2EgKyBiIGZvciBhIGluIF9iMzJ0YWIgZm9yIGIgaW4gX2IzMnRhYl0KK19iMzJyZXYgPSB7djogayBmb3IgaywgdiBpbiBlbnVtZXJhdGUoX2IzMmFscGhhYmV0KX0KIAogZGVmIGIzMmVuY29kZShzKToKICAgICAiIiJFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBCYXNlMzIuCkBAIC0xNjAsMzEgKzE0OSwyMSBAQAogICAgIHMgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGVuY29kZS4gIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgogICAgICIiIgogICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKQotICAgIHF1YW50YSwgbGVmdG92ZXIgPSBkaXZtb2QobGVuKHMpLCA1KQorICAgICAgICBzID0gbWVtb3J5dmlldyhzKS50b2J5dGVzKCkKKyAgICBsZWZ0b3ZlciA9IGxlbihzKSAlIDUKICAgICAjIFBhZCB0aGUgbGFzdCBxdWFudHVtIHdpdGggemVybyBiaXRzIGlmIG5lY2Vzc2FyeQogICAgIGlmIGxlZnRvdmVyOgogICAgICAgICBzID0gcyArIGJ5dGVzKDUgLSBsZWZ0b3ZlcikgICMgRG9uJ3QgdXNlICs9ICEKLSAgICAgICAgcXVhbnRhICs9IDEKICAgICBlbmNvZGVkID0gYnl0ZWFycmF5KCkKLSAgICBmb3IgaSBpbiByYW5nZShxdWFudGEpOgotICAgICAgICAjIGMxIGFuZCBjMiBhcmUgMTYgYml0cyB3aWRlLCBjMyBpcyA4IGJpdHMgd2lkZS4gIFRoZSBpbnRlbnQgb2YgdGhpcwotICAgICAgICAjIGNvZGUgaXMgdG8gcHJvY2VzcyB0aGUgNDAgYml0cyBpbiB1bml0cyBvZiA1IGJpdHMuICBTbyB3ZSB0YWtlIHRoZSAxCi0gICAgICAgICMgbGVmdG92ZXIgYml0IG9mIGMxIGFuZCB0YWNrIGl0IG9udG8gYzIuICBUaGVuIHdlIHRha2UgdGhlIDIgbGVmdG92ZXIKLSAgICAgICAgIyBiaXRzIG9mIGMyIGFuZCB0YWNrIHRoZW0gb250byBjMy4gIFRoZSBzaGlmdHMgYW5kIG1hc2tzIGFyZSBpbnRlbmRlZAotICAgICAgICAjIHRvIGdpdmUgdXMgdmFsdWVzIG9mIGV4YWN0bHkgNSBiaXRzIGluIHdpZHRoLgotICAgICAgICBjMSwgYzIsIGMzID0gc3RydWN0LnVucGFjaygnIUhIQicsIHNbaSo1OihpKzEpKjVdKQotICAgICAgICBjMiArPSAoYzEgJiAxKSA8PCAxNiAjIDE3IGJpdHMgd2lkZQotICAgICAgICBjMyArPSAoYzIgJiAzKSA8PCA4ICAjIDEwIGJpdHMgd2lkZQotICAgICAgICBlbmNvZGVkICs9IGJ5dGVzKFtfYjMydGFiW2MxID4+IDExXSwgICAgICAgICAjIGJpdHMgMSAtIDUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYlsoYzEgPj4gNikgJiAweDFmXSwgIyBiaXRzIDYgLSAxMAotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMSA+PiAxKSAmIDB4MWZdLCAjIGJpdHMgMTEgLSAxNQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiW2MyID4+IDEyXSwgICAgICAgICAjIGJpdHMgMTYgLSAyMCAoMSAtIDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbKGMyID4+IDcpICYgMHgxZl0sICMgYml0cyAyMSAtIDI1ICg2IC0gMTApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbKGMyID4+IDIpICYgMHgxZl0sICMgYml0cyAyNiAtIDMwICgxMSAtIDE1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiW2MzID4+IDVdLCAgICAgICAgICAjIGJpdHMgMzEgLSAzNSAoMSAtIDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbYzMgJiAweDFmXSwgICAgICAgICMgYml0cyAzNiAtIDQwICgxIC0gNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICBmcm9tX2J5dGVzID0gaW50LmZyb21fYnl0ZXMKKyAgICBiMzJ0YWIyID0gX2IzMnRhYjIKKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIDUpOgorICAgICAgICBjID0gZnJvbV9ieXRlcyhzW2k6IGkgKyA1XSwgJ2JpZycpCisgICAgICAgIGVuY29kZWQgKz0gKGIzMnRhYjJbYyA+PiAzMF0gKyAgICAgICAgICAgIyBiaXRzIDEgLSAxMAorICAgICAgICAgICAgICAgICAgICBiMzJ0YWIyWyhjID4+IDIwKSAmIDB4M2ZmXSArICMgYml0cyAxMSAtIDIwCisgICAgICAgICAgICAgICAgICAgIGIzMnRhYjJbKGMgPj4gMTApICYgMHgzZmZdICsgIyBiaXRzIDIxIC0gMzAKKyAgICAgICAgICAgICAgICAgICAgYjMydGFiMltjICYgMHgzZmZdICAgICAgICAgICAjIGJpdHMgMzEgLSA0MAorICAgICAgICAgICAgICAgICAgICkKICAgICAjIEFkanVzdCBmb3IgYW55IGxlZnRvdmVyIHBhcnRpYWwgcXVhbnRhCiAgICAgaWYgbGVmdG92ZXIgPT0gMToKICAgICAgICAgZW5jb2RlZFstNjpdID0gYic9PT09PT0nCkBAIC0xOTYsNyArMTc1LDYgQEAKICAgICAgICAgZW5jb2RlZFstMTpdID0gYic9JwogICAgIHJldHVybiBieXRlcyhlbmNvZGVkKQogCi0KIGRlZiBiMzJkZWNvZGUocywgY2FzZWZvbGQ9RmFsc2UsIG1hcDAxPU5vbmUpOgogICAgICIiIkRlY29kZSBhIEJhc2UzMiBlbmNvZGVkIGJ5dGUgc3RyaW5nLgogCkBAIC0yMTcsOCArMTk1LDcgQEAKICAgICBjaGFyYWN0ZXJzIHByZXNlbnQgaW4gdGhlIGlucHV0LgogICAgICIiIgogICAgIHMgPSBfYnl0ZXNfZnJvbV9kZWNvZGVfZGF0YShzKQotICAgIHF1YW50YSwgbGVmdG92ZXIgPSBkaXZtb2QobGVuKHMpLCA4KQotICAgIGlmIGxlZnRvdmVyOgorICAgIGlmIGxlbihzKSAlIDg6CiAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdJbmNvcnJlY3QgcGFkZGluZycpCiAgICAgIyBIYW5kbGUgc2VjdGlvbiAyLjQgemVybyBhbmQgb25lIG1hcHBpbmcuICBUaGUgZmxhZyBtYXAwMSB3aWxsIGJlIGVpdGhlcgogICAgICMgRmFsc2UsIG9yIHRoZSBjaGFyYWN0ZXIgdG8gbWFwIHRoZSBkaWdpdCAxIChvbmUpIHRvLiAgSXQgc2hvdWxkIGJlCkBAIC0yMzIsNDIgKzIwOSwzNiBAQAogICAgICMgU3RyaXAgb2ZmIHBhZCBjaGFyYWN0ZXJzIGZyb20gdGhlIHJpZ2h0LiAgV2UgbmVlZCB0byBjb3VudCB0aGUgcGFkCiAgICAgIyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhpcyB3aWxsIHRlbGwgdXMgaG93IG1hbnkgbnVsbCBieXRlcyB0byByZW1vdmUgZnJvbQogICAgICMgdGhlIGVuZCBvZiB0aGUgZGVjb2RlZCBzdHJpbmcuCi0gICAgcGFkY2hhcnMgPSAwCi0gICAgbW8gPSByZS5zZWFyY2goYicoP1A8cGFkPls9XSopJCcsIHMpCi0gICAgaWYgbW86Ci0gICAgICAgIHBhZGNoYXJzID0gbGVuKG1vLmdyb3VwKCdwYWQnKSkKLSAgICAgICAgaWYgcGFkY2hhcnMgPiAwOgotICAgICAgICAgICAgcyA9IHNbOi1wYWRjaGFyc10KKyAgICBsID0gbGVuKHMpCisgICAgcyA9IHMucnN0cmlwKGInPScpCisgICAgcGFkY2hhcnMgPSBsIC0gbGVuKHMpCiAgICAgIyBOb3cgZGVjb2RlIHRoZSBmdWxsIHF1YW50YQotICAgIHBhcnRzID0gW10KLSAgICBhY2MgPSAwCi0gICAgc2hpZnQgPSAzNQotICAgIGZvciBjIGluIHM6Ci0gICAgICAgIHZhbCA9IF9iMzJyZXYuZ2V0KGMpCi0gICAgICAgIGlmIHZhbCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ05vbi1iYXNlMzIgZGlnaXQgZm91bmQnKQotICAgICAgICBhY2MgKz0gX2IzMnJldltjXSA8PCBzaGlmdAotICAgICAgICBzaGlmdCAtPSA1Ci0gICAgICAgIGlmIHNoaWZ0IDwgMDoKLSAgICAgICAgICAgIHBhcnRzLmFwcGVuZChiaW5hc2NpaS51bmhleGxpZnkoYnl0ZXMoJyUwMTB4JyAlIGFjYywgImFzY2lpIikpKQotICAgICAgICAgICAgYWNjID0gMAotICAgICAgICAgICAgc2hpZnQgPSAzNQorICAgIGRlY29kZWQgPSBieXRlYXJyYXkoKQorICAgIGIzMnJldiA9IF9iMzJyZXYKKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIDgpOgorICAgICAgICBxdWFudGEgPSBzW2k6IGkgKyA4XQorICAgICAgICBhY2MgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBjIGluIHF1YW50YToKKyAgICAgICAgICAgICAgICBhY2MgPSAoYWNjIDw8IDUpICsgYjMycmV2W2NdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdOb24tYmFzZTMyIGRpZ2l0IGZvdW5kJykgZnJvbSBOb25lCisgICAgICAgIGRlY29kZWQgKz0gYWNjLnRvX2J5dGVzKDUsICdiaWcnKQogICAgICMgUHJvY2VzcyB0aGUgbGFzdCwgcGFydGlhbCBxdWFudGEKLSAgICBsYXN0ID0gYmluYXNjaWkudW5oZXhsaWZ5KGJ5dGVzKCclMDEweCcgJSBhY2MsICJhc2NpaSIpKQotICAgIGlmIHBhZGNoYXJzID09IDA6Ci0gICAgICAgIGxhc3QgPSBiJycgICAgICAgICAgICAgICAgICAgICAgIyBObyBjaGFyYWN0ZXJzCi0gICAgZWxpZiBwYWRjaGFycyA9PSAxOgotICAgICAgICBsYXN0ID0gbGFzdFs6LTFdCi0gICAgZWxpZiBwYWRjaGFycyA9PSAzOgotICAgICAgICBsYXN0ID0gbGFzdFs6LTJdCi0gICAgZWxpZiBwYWRjaGFycyA9PSA0OgotICAgICAgICBsYXN0ID0gbGFzdFs6LTNdCi0gICAgZWxpZiBwYWRjaGFycyA9PSA2OgotICAgICAgICBsYXN0ID0gbGFzdFs6LTRdCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ0luY29ycmVjdCBwYWRkaW5nJykKLSAgICBwYXJ0cy5hcHBlbmQobGFzdCkKLSAgICByZXR1cm4gYicnLmpvaW4ocGFydHMpCisgICAgaWYgcGFkY2hhcnM6CisgICAgICAgIGFjYyA8PD0gNSAqIHBhZGNoYXJzCisgICAgICAgIGxhc3QgPSBhY2MudG9fYnl0ZXMoNSwgJ2JpZycpCisgICAgICAgIGlmIHBhZGNoYXJzID09IDE6CisgICAgICAgICAgICBkZWNvZGVkWy01Ol0gPSBsYXN0WzotMV0KKyAgICAgICAgZWxpZiBwYWRjaGFycyA9PSAzOgorICAgICAgICAgICAgZGVjb2RlZFstNTpdID0gbGFzdFs6LTJdCisgICAgICAgIGVsaWYgcGFkY2hhcnMgPT0gNDoKKyAgICAgICAgICAgIGRlY29kZWRbLTU6XSA9IGxhc3RbOi0zXQorICAgICAgICBlbGlmIHBhZGNoYXJzID09IDY6CisgICAgICAgICAgICBkZWNvZGVkWy01Ol0gPSBsYXN0WzotNF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdJbmNvcnJlY3QgcGFkZGluZycpCisgICAgcmV0dXJuIGJ5dGVzKGRlY29kZWQpCiAKIAogCkBAIC0yNzksOCArMjUwLDYgQEAKIAogICAgIHMgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGVuY29kZS4gIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgogICAgICIiIgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKQogICAgIHJldHVybiBiaW5hc2NpaS5oZXhsaWZ5KHMpLnVwcGVyKCkKIAogCkBAIC0zMDIsNyArMjcxLDE5MyBAQAogICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignTm9uLWJhc2UxNiBkaWdpdCBmb3VuZCcpCiAgICAgcmV0dXJuIGJpbmFzY2lpLnVuaGV4bGlmeShzKQogCisjCisjIEFzY2lpODUgZW5jb2RpbmcvZGVjb2RpbmcKKyMKIAorZGVmIF84NWVuY29kZShiLCBjaGFycywgY2hhcnMyLCBwYWQ9RmFsc2UsIGZvbGRudWxzPUZhbHNlLCBmb2xkc3BhY2VzPUZhbHNlKToKKyAgICAjIEhlbHBlciBmdW5jdGlvbiBmb3IgYTg1ZW5jb2RlIGFuZCBiODVlbmNvZGUKKyAgICBpZiBub3QgaXNpbnN0YW5jZShiLCBieXRlc190eXBlcyk6CisgICAgICAgIGIgPSBtZW1vcnl2aWV3KGIpLnRvYnl0ZXMoKQorCisgICAgcGFkZGluZyA9ICgtbGVuKGIpKSAlIDQKKyAgICBpZiBwYWRkaW5nOgorICAgICAgICBiID0gYiArIGInXDAnICogcGFkZGluZworICAgIHdvcmRzID0gc3RydWN0LlN0cnVjdCgnISVkSScgJSAobGVuKGIpIC8vIDQpKS51bnBhY2soYikKKworICAgIGE4NWNoYXJzMiA9IF9hODVjaGFyczIKKyAgICBhODVjaGFycyA9IF9hODVjaGFycworICAgIGNodW5rcyA9IFtiJ3onIGlmIGZvbGRudWxzIGFuZCBub3Qgd29yZCBlbHNlCisgICAgICAgICAgICAgIGIneScgaWYgZm9sZHNwYWNlcyBhbmQgd29yZCA9PSAweDIwMjAyMDIwIGVsc2UKKyAgICAgICAgICAgICAgKGNoYXJzMlt3b3JkIC8vIDYxNDEyNV0gKworICAgICAgICAgICAgICAgY2hhcnMyW3dvcmQgLy8gODUgJSA3MjI1XSArCisgICAgICAgICAgICAgICBjaGFyc1t3b3JkICUgODVdKQorICAgICAgICAgICAgICBmb3Igd29yZCBpbiB3b3Jkc10KKworICAgIGlmIHBhZGRpbmcgYW5kIG5vdCBwYWQ6CisgICAgICAgIGlmIGNodW5rc1stMV0gPT0gYid6JzoKKyAgICAgICAgICAgIGNodW5rc1stMV0gPSBjaGFyc1swXSAqIDUKKyAgICAgICAgY2h1bmtzWy0xXSA9IGNodW5rc1stMV1bOi1wYWRkaW5nXQorCisgICAgcmV0dXJuIGInJy5qb2luKGNodW5rcykKKworX0E4NVNUQVJUID0gYiI8fiIKK19BODVFTkQgPSBiIn4+IgorX2E4NWNoYXJzID0gW2J5dGVzKFtpXSkgZm9yIGkgaW4gcmFuZ2UoMzMsIDExOCldCitfYTg1Y2hhcnMyID0gWyhhICsgYikgZm9yIGEgaW4gX2E4NWNoYXJzIGZvciBiIGluIF9hODVjaGFyc10KKworZGVmIGE4NWVuY29kZShiLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCB3cmFwY29sPTAsIHBhZD1GYWxzZSwgYWRvYmU9RmFsc2UpOgorICAgICIiIkVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIEFzY2lpODUuCisKKyAgICBiIGlzIHRoZSBieXRlIHN0cmluZyB0byBlbmNvZGUuIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgorCisgICAgZm9sZHNwYWNlcyBpcyBhbiBvcHRpb25hbCBmbGFnIHRoYXQgdXNlcyB0aGUgc3BlY2lhbCBzaG9ydCBzZXF1ZW5jZSAneScKKyAgICBpbnN0ZWFkIG9mIDQgY29uc2VjdXRpdmUgc3BhY2VzIChBU0NJSSAweDIwKSBhcyBzdXBwb3J0ZWQgYnkgJ2J0b2EnLiBUaGlzCisgICAgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAic3RhbmRhcmQiIEFkb2JlIGVuY29kaW5nLgorCisgICAgd3JhcGNvbCBjb250cm9scyB3aGV0aGVyIHRoZSBvdXRwdXQgc2hvdWxkIGhhdmUgbmV3bGluZSAoJ1xuJykgY2hhcmFjdGVycworICAgIGFkZGVkIHRvIGl0LiBJZiB0aGlzIGlzIG5vbi16ZXJvLCBlYWNoIG91dHB1dCBsaW5lIHdpbGwgYmUgYXQgbW9zdCB0aGlzCisgICAgbWFueSBjaGFyYWN0ZXJzIGxvbmcuCisKKyAgICBwYWQgY29udHJvbHMgd2hldGhlciB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhZGRlZCB0byBhIG11bHRpcGxlIG9mIDQgYmVmb3JlCisgICAgZW5jb2RpbmcuIE5vdGUgdGhhdCB0aGUgYnRvYSBpbXBsZW1lbnRhdGlvbiBhbHdheXMgcGFkcy4KKworICAgIGFkb2JlIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGVuY29kZWQgYnl0ZSBzZXF1ZW5jZSBpcyBmcmFtZWQgd2l0aCA8fiBhbmQgfj4sCisgICAgd2hpY2ggaXMgdXNlZCBieSB0aGUgQWRvYmUgaW1wbGVtZW50YXRpb24uCisgICAgIiIiCisgICAgcmVzdWx0ID0gXzg1ZW5jb2RlKGIsIF9hODVjaGFycywgX2E4NWNoYXJzMiwgcGFkLCBUcnVlLCBmb2xkc3BhY2VzKQorCisgICAgaWYgYWRvYmU6CisgICAgICAgIHJlc3VsdCA9IF9BODVTVEFSVCArIHJlc3VsdAorICAgIGlmIHdyYXBjb2w6CisgICAgICAgIHdyYXBjb2wgPSBtYXgoMiBpZiBhZG9iZSBlbHNlIDEsIHdyYXBjb2wpCisgICAgICAgIGNodW5rcyA9IFtyZXN1bHRbaTogaSArIHdyYXBjb2xdCisgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocmVzdWx0KSwgd3JhcGNvbCldCisgICAgICAgIGlmIGFkb2JlOgorICAgICAgICAgICAgaWYgbGVuKGNodW5rc1stMV0pICsgMiA+IHdyYXBjb2w6CisgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChiJycpCisgICAgICAgIHJlc3VsdCA9IGInXG4nLmpvaW4oY2h1bmtzKQorICAgIGlmIGFkb2JlOgorICAgICAgICByZXN1bHQgKz0gX0E4NUVORAorCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgYTg1ZGVjb2RlKGIsICosIGZvbGRzcGFjZXM9RmFsc2UsIGFkb2JlPUZhbHNlLCBpZ25vcmVjaGFycz1iJyBcdFxuXHJcdicpOgorICAgICIiIkRlY29kZSBhbiBBc2NpaTg1IGVuY29kZWQgYnl0ZSBzdHJpbmcuCisKKyAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBkZWNvZGUuCisKKyAgICBmb2xkc3BhY2VzIGlzIGEgZmxhZyB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSAneScgc2hvcnQgc2VxdWVuY2Ugc2hvdWxkIGJlCisgICAgYWNjZXB0ZWQgYXMgc2hvcnRoYW5kIGZvciA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkuIFRoaXMgZmVhdHVyZSBpcworICAgIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICJzdGFuZGFyZCIgQWRvYmUgZW5jb2RpbmcuCisKKyAgICBhZG9iZSBjb250cm9scyB3aGV0aGVyIHRoZSBpbnB1dCBzZXF1ZW5jZSBpcyBpbiBBZG9iZSBBc2NpaTg1IGZvcm1hdCAoaS5lLgorICAgIGlzIGZyYW1lZCB3aXRoIDx+IGFuZCB+PikuCisKKyAgICBpZ25vcmVjaGFycyBzaG91bGQgYmUgYSBieXRlIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gaWdub3JlIGZyb20gdGhlCisgICAgaW5wdXQuIFRoaXMgc2hvdWxkIG9ubHkgY29udGFpbiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIGFuZCBieSBkZWZhdWx0CisgICAgY29udGFpbnMgYWxsIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiBBU0NJSS4KKyAgICAiIiIKKyAgICBiID0gX2J5dGVzX2Zyb21fZGVjb2RlX2RhdGEoYikKKyAgICBpZiBhZG9iZToKKyAgICAgICAgaWYgbm90IChiLnN0YXJ0c3dpdGgoX0E4NVNUQVJUKSBhbmQgYi5lbmRzd2l0aChfQTg1RU5EKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJBc2NpaTg1IGVuY29kZWQgYnl0ZSBzZXF1ZW5jZXMgbXVzdCBiZSBicmFja2V0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgeyFyfSBhbmQgeyFyfSIuZm9ybWF0KF9BODVTVEFSVCwgX0E4NUVORCkpCisgICAgICAgIGIgPSBiWzI6LTJdICMgU3RyaXAgb2ZmIHN0YXJ0L2VuZCBtYXJrZXJzCisgICAgIworICAgICMgV2UgaGF2ZSB0byBnbyB0aHJvdWdoIHRoaXMgc3RlcHdpc2UsIHNvIGFzIHRvIGlnbm9yZSBzcGFjZXMgYW5kIGhhbmRsZQorICAgICMgc3BlY2lhbCBzaG9ydCBzZXF1ZW5jZXMKKyAgICAjCisgICAgcGFja0kgPSBzdHJ1Y3QuU3RydWN0KCchSScpLnBhY2sKKyAgICBkZWNvZGVkID0gW10KKyAgICBkZWNvZGVkX2FwcGVuZCA9IGRlY29kZWQuYXBwZW5kCisgICAgY3VyciA9IFtdCisgICAgY3Vycl9hcHBlbmQgPSBjdXJyLmFwcGVuZAorICAgIGN1cnJfY2xlYXIgPSBjdXJyLmNsZWFyCisgICAgZm9yIHggaW4gYiArIGIndScgKiA0OgorICAgICAgICBpZiBiJyEnWzBdIDw9IHggPD0gYid1J1swXToKKyAgICAgICAgICAgIGN1cnJfYXBwZW5kKHgpCisgICAgICAgICAgICBpZiBsZW4oY3VycikgPT0gNToKKyAgICAgICAgICAgICAgICBhY2MgPSAwCisgICAgICAgICAgICAgICAgZm9yIHggaW4gY3VycjoKKyAgICAgICAgICAgICAgICAgICAgYWNjID0gODUgKiBhY2MgKyAoeCAtIDMzKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQocGFja0koYWNjKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBc2NpaTg1IG92ZXJmbG93JykgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgY3Vycl9jbGVhcigpCisgICAgICAgIGVsaWYgeCA9PSBiJ3onWzBdOgorICAgICAgICAgICAgaWYgY3VycjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd6IGluc2lkZSBBc2NpaTg1IDUtdHVwbGUnKQorICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQoYidcMFwwXDBcMCcpCisgICAgICAgIGVsaWYgZm9sZHNwYWNlcyBhbmQgeCA9PSBiJ3knWzBdOgorICAgICAgICAgICAgaWYgY3VycjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd5IGluc2lkZSBBc2NpaTg1IDUtdHVwbGUnKQorICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQoYidceDIwXHgyMFx4MjBceDIwJykKKyAgICAgICAgZWxpZiB4IGluIGlnbm9yZWNoYXJzOgorICAgICAgICAgICAgIyBTa2lwIHdoaXRlc3BhY2UKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdOb24tQXNjaWk4NSBkaWdpdCBmb3VuZDogJWMnICUgeCkKKworICAgIHJlc3VsdCA9IGInJy5qb2luKGRlY29kZWQpCisgICAgcGFkZGluZyA9IDQgLSBsZW4oY3VycikKKyAgICBpZiBwYWRkaW5nOgorICAgICAgICAjIFRocm93IGF3YXkgdGhlIGV4dHJhIHBhZGRpbmcKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotcGFkZGluZ10KKyAgICByZXR1cm4gcmVzdWx0CisKKyMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIG9yaWdpbmFsbHkgdGFrZW4gKHdpdGggcGVybWlzc2lvbikgZnJvbSBNZXJjdXJpYWwKKworX2I4NWNoYXJzID0gYiIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiIFwKKyAgICAgICAgICAgIGIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXohIyQlJigpKistOzw9Pj9AXl9ge3x9fiIKK19iODVjaGFycyA9IFtieXRlcyhbaV0pIGZvciBpIGluIF9iODVjaGFyc10KK19iODVjaGFyczIgPSBbKGEgKyBiKSBmb3IgYSBpbiBfYjg1Y2hhcnMgZm9yIGIgaW4gX2I4NWNoYXJzXQorX2I4NWRlYyA9IE5vbmUKKworZGVmIGI4NWVuY29kZShiLCBwYWQ9RmFsc2UpOgorICAgICIiIkVuY29kZSBhbiBBU0NJSS1lbmNvZGVkIGJ5dGUgYXJyYXkgaW4gYmFzZTg1IGZvcm1hdC4KKworICAgIElmIHBhZCBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgcGFkZGVkIHdpdGggIlwwIiBzbyBpdHMgbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YKKyAgICA0IGNoYXJhY3RlcnMgYmVmb3JlIGVuY29kaW5nLgorICAgICIiIgorICAgIHJldHVybiBfODVlbmNvZGUoYiwgX2I4NWNoYXJzLCBfYjg1Y2hhcnMyLCBwYWQpCisKK2RlZiBiODVkZWNvZGUoYik6CisgICAgIiIiRGVjb2RlIGJhc2U4NS1lbmNvZGVkIGJ5dGUgYXJyYXkiIiIKKyAgICBiID0gX2J5dGVzX2Zyb21fZGVjb2RlX2RhdGEoYikKKyAgICBnbG9iYWwgX2I4NWRlYworICAgIGlmIF9iODVkZWMgaXMgTm9uZToKKyAgICAgICAgX2I4NWRlYyA9IFtOb25lXSAqIDI1NgorICAgICAgICBmb3IgaSwgYyBpbiBlbnVtZXJhdGUoX2I4NWNoYXJzKToKKyAgICAgICAgICAgIF9iODVkZWNbY1swXV0gPSBpCisKKyAgICBwYWRkaW5nID0gKC1sZW4oYikpICUgNQorICAgIGIgPSBiICsgYid+JyAqIHBhZGRpbmcKKyAgICBvdXQgPSBbXQorICAgIHBhY2tJID0gc3RydWN0LlN0cnVjdCgnIUknKS5wYWNrCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGIpLCA1KToKKyAgICAgICAgY2h1bmsgPSBiW2k6aSArIDVdCisgICAgICAgIGFjYyA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGMgaW4gY2h1bms6CisgICAgICAgICAgICAgICAgYWNjID0gYWNjICogODUgKyBfYjg1ZGVjW2NdCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBmb3IgaiwgYyBpbiBlbnVtZXJhdGUoY2h1bmspOgorICAgICAgICAgICAgICAgIGlmIF9iODVkZWNbY10gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYmFkIGJhc2U4NSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gJWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChpICsgaikpIGZyb20gTm9uZQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0LmFwcGVuZChwYWNrSShhY2MpKQorICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYmFzZTg1IG92ZXJmbG93IGluIGh1bmsgc3RhcnRpbmcgYXQgYnl0ZSAlZCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpKSBmcm9tIE5vbmUKKworICAgIHJlc3VsdCA9IGInJy5qb2luKG91dCkKKyAgICBpZiBwYWRkaW5nOgorICAgICAgICByZXN1bHQgPSByZXN1bHRbOi1wYWRkaW5nXQorICAgIHJldHVybiByZXN1bHQKIAogIyBMZWdhY3kgaW50ZXJmYWNlLiAgVGhpcyBjb2RlIGNvdWxkIGJlIGNsZWFuZWQgdXAgc2luY2UgSSBkb24ndCBiZWxpZXZlCiAjIGJpbmFzY2lpIGhhcyBhbnkgbGluZSBsZW5ndGggbGltaXRhdGlvbnMuICBJdCBqdXN0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBpdApAQCAtMzM1LDEyICs0OTAsMjYgQEAKICAgICAgICAgcyA9IGJpbmFzY2lpLmEyYl9iYXNlNjQobGluZSkKICAgICAgICAgb3V0cHV0LndyaXRlKHMpCiAKK2RlZiBfaW5wdXRfdHlwZV9jaGVjayhzKToKKyAgICB0cnk6CisgICAgICAgIG0gPSBtZW1vcnl2aWV3KHMpCisgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlcnI6CisgICAgICAgIG1zZyA9ICJleHBlY3RlZCBieXRlcy1saWtlIG9iamVjdCwgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpIGZyb20gZXJyCisgICAgaWYgbS5mb3JtYXQgbm90IGluICgnYycsICdiJywgJ0InKToKKyAgICAgICAgbXNnID0gKCJleHBlY3RlZCBzaW5nbGUgYnl0ZSBlbGVtZW50cywgbm90ICVyIGZyb20gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtLmZvcm1hdCwgcy5fX2NsYXNzX18uX19uYW1lX18pKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgIGlmIG0ubmRpbSAhPSAxOgorICAgICAgICBtc2cgPSAoImV4cGVjdGVkIDEtRCBkYXRhLCBub3QgJWQtRCBkYXRhIGZyb20gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtLm5kaW0sIHMuX19jbGFzc19fLl9fbmFtZV9fKSkKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKwogCiBkZWYgZW5jb2RlYnl0ZXMocyk6CiAgICAgIiIiRW5jb2RlIGEgYnl0ZXN0cmluZyBpbnRvIGEgYnl0ZXN0cmluZyBjb250YWluaW5nIG11bHRpcGxlIGxpbmVzCiAgICAgb2YgYmFzZS02NCBkYXRhLiIiIgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKQorICAgIF9pbnB1dF90eXBlX2NoZWNrKHMpCiAgICAgcGllY2VzID0gW10KICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIE1BWEJJTlNJWkUpOgogICAgICAgICBjaHVuayA9IHNbaSA6IGkgKyBNQVhCSU5TSVpFXQpAQCAtMzU3LDggKzUyNiw3IEBACiAKIGRlZiBkZWNvZGVieXRlcyhzKToKICAgICAiIiJEZWNvZGUgYSBieXRlc3RyaW5nIG9mIGJhc2UtNjQgZGF0YSBpbnRvIGEgYnl0ZXN0cmluZy4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICBfaW5wdXRfdHlwZV9jaGVjayhzKQogICAgIHJldHVybiBiaW5hc2NpaS5hMmJfYmFzZTY0KHMpCiAKIGRlZiBkZWNvZGVzdHJpbmcocyk6CmRpZmYgLS1naXQgYS9MaWIvYmRiLnB5IGIvTGliL2JkYi5weQppbmRleCBkZDFmNDI4Li42N2EwODQ2IDEwMDY0NAotLS0gYS9MaWIvYmRiLnB5CisrKyBiL0xpYi9iZGIucHkKQEAgLTMsNiArMyw3IEBACiBpbXBvcnQgZm5tYXRjaAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCitmcm9tIGluc3BlY3QgaW1wb3J0IENPX0dFTkVSQVRPUgogCiBfX2FsbF9fID0gWyJCZGJRdWl0IiwgIkJkYiIsICJCcmVha3BvaW50Il0KIApAQCAtNzUsMjQgKzc2LDQ4IEBACiAgICAgICAgIGlmIG5vdCAoc2VsZi5zdG9wX2hlcmUoZnJhbWUpIG9yIHNlbGYuYnJlYWtfYW55d2hlcmUoZnJhbWUpKToKICAgICAgICAgICAgICMgTm8gbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uCiAgICAgICAgICAgICByZXR1cm4gIyBOb25lCisgICAgICAgICMgSWdub3JlIGNhbGwgZXZlbnRzIGluIGdlbmVyYXRvciBleGNlcHQgd2hlbiBzdGVwcGluZy4KKyAgICAgICAgaWYgc2VsZi5zdG9wZnJhbWUgYW5kIGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRyYWNlX2Rpc3BhdGNoCiAgICAgICAgIHNlbGYudXNlcl9jYWxsKGZyYW1lLCBhcmcpCiAgICAgICAgIGlmIHNlbGYucXVpdHRpbmc6IHJhaXNlIEJkYlF1aXQKICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2VfZGlzcGF0Y2gKIAogICAgIGRlZiBkaXNwYXRjaF9yZXR1cm4oc2VsZiwgZnJhbWUsIGFyZyk6CiAgICAgICAgIGlmIHNlbGYuc3RvcF9oZXJlKGZyYW1lKSBvciBmcmFtZSA9PSBzZWxmLnJldHVybmZyYW1lOgorICAgICAgICAgICAgIyBJZ25vcmUgcmV0dXJuIGV2ZW50cyBpbiBnZW5lcmF0b3IgZXhjZXB0IHdoZW4gc3RlcHBpbmcuCisgICAgICAgICAgICBpZiBzZWxmLnN0b3BmcmFtZSBhbmQgZnJhbWUuZl9jb2RlLmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnRyYWNlX2Rpc3BhdGNoCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5mcmFtZV9yZXR1cm5pbmcgPSBmcmFtZQogICAgICAgICAgICAgICAgIHNlbGYudXNlcl9yZXR1cm4oZnJhbWUsIGFyZykKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5mcmFtZV9yZXR1cm5pbmcgPSBOb25lCiAgICAgICAgICAgICBpZiBzZWxmLnF1aXR0aW5nOiByYWlzZSBCZGJRdWl0CisgICAgICAgICAgICAjIFRoZSB1c2VyIGlzc3VlZCBhICduZXh0JyBvciAndW50aWwnIGNvbW1hbmQuCisgICAgICAgICAgICBpZiBzZWxmLnN0b3BmcmFtZSBpcyBmcmFtZSBhbmQgc2VsZi5zdG9wbGluZW5vICE9IC0xOgorICAgICAgICAgICAgICAgIHNlbGYuX3NldF9zdG9waW5mbyhOb25lLCBOb25lKQogICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogCiAgICAgZGVmIGRpc3BhdGNoX2V4Y2VwdGlvbihzZWxmLCBmcmFtZSwgYXJnKToKICAgICAgICAgaWYgc2VsZi5zdG9wX2hlcmUoZnJhbWUpOgorICAgICAgICAgICAgIyBXaGVuIHN0ZXBwaW5nIHdpdGggbmV4dC91bnRpbC9yZXR1cm4gaW4gYSBnZW5lcmF0b3IgZnJhbWUsIHNraXAKKyAgICAgICAgICAgICMgdGhlIGludGVybmFsIFN0b3BJdGVyYXRpb24gZXhjZXB0aW9uICh3aXRoIG5vIHRyYWNlYmFjaykKKyAgICAgICAgICAgICMgdHJpZ2dlcmVkIGJ5IGEgc3ViaXRlcmF0b3IgcnVuIHdpdGggdGhlICd5aWVsZCBmcm9tJyBzdGF0ZW1lbnQuCisgICAgICAgICAgICBpZiBub3QgKGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUgorICAgICAgICAgICAgICAgICAgICBhbmQgYXJnWzBdIGlzIFN0b3BJdGVyYXRpb24gYW5kIGFyZ1syXSBpcyBOb25lKToKKyAgICAgICAgICAgICAgICBzZWxmLnVzZXJfZXhjZXB0aW9uKGZyYW1lLCBhcmcpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5xdWl0dGluZzogcmFpc2UgQmRiUXVpdAorICAgICAgICAjIFN0b3AgYXQgdGhlIFN0b3BJdGVyYXRpb24gb3IgR2VuZXJhdG9yRXhpdCBleGNlcHRpb24gd2hlbiB0aGUgdXNlcgorICAgICAgICAjIGhhcyBzZXQgc3RvcGZyYW1lIGluIGEgZ2VuZXJhdG9yIGJ5IGlzc3VpbmcgYSByZXR1cm4gY29tbWFuZCwgb3IgYQorICAgICAgICAjIG5leHQvdW50aWwgY29tbWFuZCBhdCB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4gdGhlIGdlbmVyYXRvciBiZWZvcmUgdGhlCisgICAgICAgICMgZXhjZXB0aW9uLgorICAgICAgICBlbGlmIChzZWxmLnN0b3BmcmFtZSBhbmQgZnJhbWUgaXMgbm90IHNlbGYuc3RvcGZyYW1lCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuc3RvcGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUgorICAgICAgICAgICAgICAgIGFuZCBhcmdbMF0gaW4gKFN0b3BJdGVyYXRpb24sIEdlbmVyYXRvckV4aXQpKToKICAgICAgICAgICAgIHNlbGYudXNlcl9leGNlcHRpb24oZnJhbWUsIGFyZykKICAgICAgICAgICAgIGlmIHNlbGYucXVpdHRpbmc6IHJhaXNlIEJkYlF1aXQKKwogICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogCiAgICAgIyBOb3JtYWxseSBkZXJpdmVkIGNsYXNzZXMgZG9uJ3Qgb3ZlcnJpZGUgdGhlIGZvbGxvd2luZwpAQCAtMTE1LDEwICsxNDAsOCBAQAogICAgICAgICAgICAgaWYgc2VsZi5zdG9wbGluZW5vID09IC0xOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIGZyYW1lLmZfbGluZW5vID49IHNlbGYuc3RvcGxpbmVubwotICAgICAgICB3aGlsZSBmcmFtZSBpcyBub3QgTm9uZSBhbmQgZnJhbWUgaXMgbm90IHNlbGYuc3RvcGZyYW1lOgotICAgICAgICAgICAgaWYgZnJhbWUgaXMgc2VsZi5ib3RmcmFtZToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKKyAgICAgICAgaWYgbm90IHNlbGYuc3RvcGZyYW1lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgYnJlYWtfaGVyZShzZWxmLCBmcmFtZSk6CkBAIC0yMDcsNyArMjMwLDEwIEBACiAKICAgICBkZWYgc2V0X3JldHVybihzZWxmLCBmcmFtZSk6CiAgICAgICAgICIiIlN0b3Agd2hlbiByZXR1cm5pbmcgZnJvbSB0aGUgZ2l2ZW4gZnJhbWUuIiIiCi0gICAgICAgIHNlbGYuX3NldF9zdG9waW5mbyhmcmFtZS5mX2JhY2ssIGZyYW1lKQorICAgICAgICBpZiBmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1I6CisgICAgICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oZnJhbWUsIE5vbmUsIC0xKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc2V0X3N0b3BpbmZvKGZyYW1lLmZfYmFjaywgZnJhbWUpCiAKICAgICBkZWYgc2V0X3RyYWNlKHNlbGYsIGZyYW1lPU5vbmUpOgogICAgICAgICAiIiJTdGFydCBkZWJ1Z2dpbmcgZnJvbSBgZnJhbWVgLgpkaWZmIC0tZ2l0IGEvTGliL2J6Mi5weSBiL0xpYi9iejIucHkKaW5kZXggMWRlOGYzYy4uNmY0N2JmYSAxMDA2NDQKLS0tIGEvTGliL2J6Mi5weQorKysgYi9MaWIvYnoyLnB5CkBAIC05LDcgKzksNiBAQAogCiBfX2F1dGhvcl9fID0gIk5hZGVlbSBWYXdkYSA8bmFkZWVtLnZhd2RhQGdtYWlsLmNvbT4iCiAKLWltcG9ydCBidWlsdGlucwogaW1wb3J0IGlvCiBpbXBvcnQgd2FybmluZ3MKIApAQCAtMjgsNiArMjcsOCBAQAogCiBfQlVGRkVSX1NJWkUgPSA4MTkyCiAKK19idWlsdGluX29wZW4gPSBvcGVuCisKIAogY2xhc3MgQloyRmlsZShpby5CdWZmZXJlZElPQmFzZSk6CiAKQEAgLTQzLDE2ICs0NCwxNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbW9kZT0iciIsIGJ1ZmZlcmluZz1Ob25lLCBjb21wcmVzc2xldmVsPTkpOgogICAgICAgICAiIiJPcGVuIGEgYnppcDItY29tcHJlc3NlZCBmaWxlLgogCi0gICAgICAgIElmIGZpbGVuYW1lIGlzIGEgc3RyIG9yIGJ5dGVzIG9iamVjdCwgaXMgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8KLSAgICAgICAgYmUgb3BlbmVkLiBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGZpbGUgb2JqZWN0LCB3aGljaCB3aWxsIGJlIHVzZWQgdG8KLSAgICAgICAgcmVhZCBvciB3cml0ZSB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgICAgICBJZiBmaWxlbmFtZSBpcyBhIHN0ciBvciBieXRlcyBvYmplY3QsIGl0IGdpdmVzIHRoZSBuYW1lCisgICAgICAgIG9mIHRoZSBmaWxlIHRvIGJlIG9wZW5lZC4gT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBmaWxlIG9iamVjdCwKKyAgICAgICAgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAotICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsIG9yICdhJyBmb3IKLSAgICAgICAgYXBwZW5kaW5nLiBUaGVzZSBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsIGFuZCAnYWInLgorICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsCisgICAgICAgICd4JyBmb3IgY3JlYXRpbmcgZXhjbHVzaXZlbHksIG9yICdhJyBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4KKyAgICAgICAgZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsICd4YicsIGFuZCAnYWInLgogCiAgICAgICAgIGJ1ZmZlcmluZyBpcyBpZ25vcmVkLiBJdHMgdXNlIGlzIGRlcHJlY2F0ZWQuCiAKLSAgICAgICAgSWYgbW9kZSBpcyAndycgb3IgJ2EnLCBjb21wcmVzc2xldmVsIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDEKKyAgICAgICAgSWYgbW9kZSBpcyAndycsICd4JyBvciAnYScsIGNvbXByZXNzbGV2ZWwgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMQogICAgICAgICBhbmQgOSBzcGVjaWZ5aW5nIHRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbjogMSBwcm9kdWNlcyB0aGUgbGVhc3QKICAgICAgICAgY29tcHJlc3Npb24sIGFuZCA5IChkZWZhdWx0KSBwcm9kdWNlcyB0aGUgbW9zdCBjb21wcmVzc2lvbi4KIApAQCAtODUsMTUgKzg3LDE5IEBACiAgICAgICAgICAgICBtb2RlID0gIndiIgogICAgICAgICAgICAgbW9kZV9jb2RlID0gX01PREVfV1JJVEUKICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBCWjJDb21wcmVzc29yKGNvbXByZXNzbGV2ZWwpCisgICAgICAgIGVsaWYgbW9kZSBpbiAoIngiLCAieGIiKToKKyAgICAgICAgICAgIG1vZGUgPSAieGIiCisgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQorICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NvciA9IEJaMkNvbXByZXNzb3IoY29tcHJlc3NsZXZlbCkKICAgICAgICAgZWxpZiBtb2RlIGluICgiYSIsICJhYiIpOgogICAgICAgICAgICAgbW9kZSA9ICJhYiIKICAgICAgICAgICAgIG1vZGVfY29kZSA9IF9NT0RFX1dSSVRFCiAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtb2RlOiB7IXJ9Ii5mb3JtYXQobW9kZSkpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1vZGU6ICVyIiAlIChtb2RlLCkpCiAKICAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgKHN0ciwgYnl0ZXMpKToKLSAgICAgICAgICAgIHNlbGYuX2ZwID0gYnVpbHRpbnMub3BlbihmaWxlbmFtZSwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuX2ZwID0gX2J1aWx0aW5fb3BlbihmaWxlbmFtZSwgbW9kZSkKICAgICAgICAgICAgIHNlbGYuX2Nsb3NlZnAgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9tb2RlID0gbW9kZV9jb2RlCiAgICAgICAgIGVsaWYgaGFzYXR0cihmaWxlbmFtZSwgInJlYWQiKSBvciBoYXNhdHRyKGZpbGVuYW1lLCAid3JpdGUiKToKQEAgLTE4OSwxNSArMTk1LDE3IEBACiAKICAgICAgICAgICAgIGlmIG5vdCByYXdibG9jazoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICAgICAjIEVuZC1vZi1zdHJlYW0gbWFya2VyIGFuZCBlbmQgb2YgZmlsZS4gV2UncmUgZ29vZC4KICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX1JFQURfRU9GCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NpemUgPSBzZWxmLl9wb3MKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBQcm9ibGVtIC0gd2Ugd2VyZSBleHBlY3RpbmcgbW9yZSBjb21wcmVzc2VkIGRhdGEuCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJDb21wcmVzc2VkIGZpbGUgZW5kZWQgYmVmb3JlIHRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCiAKLSAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gQloyRGVjb21wcmVzc29yKCkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKHJhd2Jsb2NrKQpAQCAtNDE5LDcgKzQyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfYWxsKHJldHVybl9kYXRhPUZhbHNlKQogICAgICAgICAgICAgICAgIG9mZnNldCA9IHNlbGYuX3NpemUgKyBvZmZzZXQKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3Igd2hlbmNlOiB7fSIuZm9ybWF0KHdoZW5jZSkpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3Igd2hlbmNlOiAlcyIgJSAod2hlbmNlLCkpCiAKICAgICAgICAgICAgICMgTWFrZSBpdCBzbyB0aGF0IG9mZnNldCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgZm9yd2FyZC4KICAgICAgICAgICAgIGlmIG9mZnNldCA8IHNlbGYuX3BvczoKQEAgLTQ0MywyMCArNDUxLDIwIEBACiAgICAgICAgICBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKToKICAgICAiIiJPcGVuIGEgYnppcDItY29tcHJlc3NlZCBmaWxlIGluIGJpbmFyeSBvciB0ZXh0IG1vZGUuCiAKLSAgICBUaGUgZmlsZW5hbWUgYXJndW1lbnQgY2FuIGJlIGFuIGFjdHVhbCBmaWxlbmFtZSAoYSBzdHIgb3IgYnl0ZXMgb2JqZWN0KSwgb3IKLSAgICBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCisgICAgVGhlIGZpbGVuYW1lIGFyZ3VtZW50IGNhbiBiZSBhbiBhY3R1YWwgZmlsZW5hbWUgKGEgc3RyIG9yIGJ5dGVzCisgICAgb2JqZWN0KSwgb3IgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiwgInciLCAid2IiLCAiYSIgb3IgImFiIiBmb3IgYmluYXJ5IG1vZGUsCi0gICAgb3IgInJ0IiwgInd0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IG1vZGUgaXMgInJiIiwgYW5kIHRoZQotICAgIGRlZmF1bHQgY29tcHJlc3NsZXZlbCBpcyA5LgorICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgIngiLCAieGIiLCAiYSIgb3IKKyAgICAiYWIiIGZvciBiaW5hcnkgbW9kZSwgb3IgInJ0IiwgInd0IiwgInh0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuCisgICAgVGhlIGRlZmF1bHQgbW9kZSBpcyAicmIiLCBhbmQgdGhlIGRlZmF1bHQgY29tcHJlc3NsZXZlbCBpcyA5LgogCi0gICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEJaMkZpbGUgY29uc3RydWN0b3I6Ci0gICAgQloyRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMKLSAgICBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCisgICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEJaMkZpbGUKKyAgICBjb25zdHJ1Y3RvcjogQloyRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwKKyAgICB0aGUgZW5jb2RpbmcsIGVycm9ycyBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCiAKICAgICBGb3IgdGV4dCBtb2RlLCBhIEJaMkZpbGUgb2JqZWN0IGlzIGNyZWF0ZWQsIGFuZCB3cmFwcGVkIGluIGFuCi0gICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yIGhhbmRsaW5nCi0gICAgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KKyAgICBpby5UZXh0SU9XcmFwcGVyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBlbmNvZGluZywgZXJyb3IKKyAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCiAgICAgIiIiCiAgICAgaWYgInQiIGluIG1vZGU6CmRpZmYgLS1naXQgYS9MaWIvY1Byb2ZpbGUucHkgYi9MaWIvY1Byb2ZpbGUucHkKaW5kZXggYzI0ZDQ1Yi4uMTE4NDM4NSAxMDA3NTUKLS0tIGEvTGliL2NQcm9maWxlLnB5CisrKyBiL0xpYi9jUHJvZmlsZS5weQpAQCAtNyw1NCArNywyMCBAQAogX19hbGxfXyA9IFsicnVuIiwgInJ1bmN0eCIsICJQcm9maWxlIl0KIAogaW1wb3J0IF9sc3Byb2YKK2ltcG9ydCBwcm9maWxlIGFzIF9weXByb2ZpbGUKIAogIyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KICMgU2ltcGxlIGludGVyZmFjZQogCiBkZWYgcnVuKHN0YXRlbWVudCwgZmlsZW5hbWU9Tm9uZSwgc29ydD0tMSk6Ci0gICAgIiIiUnVuIHN0YXRlbWVudCB1bmRlciBwcm9maWxlciBvcHRpb25hbGx5IHNhdmluZyByZXN1bHRzIGluIGZpbGVuYW1lCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUKLSAgICAiZXhlYyIgc3RhdGVtZW50LCBhbmQgYW4gb3B0aW9uYWwgZmlsZSBuYW1lLiAgSW4gYWxsIGNhc2VzIHRoaXMKLSAgICByb3V0aW5lIGF0dGVtcHRzIHRvICJleGVjIiBpdHMgZmlyc3QgYXJndW1lbnQgYW5kIGdhdGhlciBwcm9maWxpbmcKLSAgICBzdGF0aXN0aWNzIGZyb20gdGhlIGV4ZWN1dGlvbi4gSWYgbm8gZmlsZSBuYW1lIGlzIHByZXNlbnQsIHRoZW4gdGhpcwotICAgIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgcHJpbnRzIGEgc2ltcGxlIHByb2ZpbGluZyByZXBvcnQsIHNvcnRlZCBieSB0aGUKLSAgICBzdGFuZGFyZCBuYW1lIHN0cmluZyAoZmlsZS9saW5lL2Z1bmN0aW9uLW5hbWUpIHRoYXQgaXMgcHJlc2VudGVkIGluCi0gICAgZWFjaCBsaW5lLgotICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICByZXN1bHQgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcm9mID0gcHJvZi5ydW4oc3RhdGVtZW50KQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgICAgIHBhc3MKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHByb2YucHJpbnRfc3RhdHMoc29ydCkKLSAgICByZXR1cm4gcmVzdWx0CisgICAgcmV0dXJuIF9weXByb2ZpbGUuX1V0aWxzKFByb2ZpbGUpLnJ1bihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KQogCiBkZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKLSAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyLCBzdXBwbHlpbmcgeW91ciBvd24gZ2xvYmFscyBhbmQgbG9jYWxzLAotICAgIG9wdGlvbmFsbHkgc2F2aW5nIHJlc3VsdHMgaW4gZmlsZW5hbWUuCisgICAgcmV0dXJuIF9weXByb2ZpbGUuX1V0aWxzKFByb2ZpbGUpLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBzb3J0KQogCi0gICAgc3RhdGVtZW50IGFuZCBmaWxlbmFtZSBoYXZlIHRoZSBzYW1lIHNlbWFudGljcyBhcyBwcm9maWxlLnJ1bgotICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICByZXN1bHQgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcm9mID0gcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgotICAgICAgICAgICAgcGFzcwotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gcHJvZi5wcmludF9zdGF0cyhzb3J0KQotICAgIHJldHVybiByZXN1bHQKK3J1bi5fX2RvY19fID0gX3B5cHJvZmlsZS5ydW4uX19kb2NfXworcnVuY3R4Ll9fZG9jX18gPSBfcHlwcm9maWxlLnJ1bmN0eC5fX2RvY19fCiAKICMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAKQEAgLTc3LDEwICs0Myw5IEBACiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlKToKICAgICAgICAgaW1wb3J0IG1hcnNoYWwKLSAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3diJykKLSAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQotICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCiAKICAgICBkZWYgY3JlYXRlX3N0YXRzKHNlbGYpOgogICAgICAgICBzZWxmLmRpc2FibGUoKQpkaWZmIC0tZ2l0IGEvTGliL2NnaS5weSBiL0xpYi9jZ2kucHkKaW5kZXggMGY1MGQwZS4uYTkxOTc0MiAxMDA3NTUKLS0tIGEvTGliL2NnaS5weQorKysgYi9MaWIvY2dpLnB5CkBAIC04Miw3ICs4Miw3IEBACiAgICAgaWYgbG9nZmlsZSBhbmQgbm90IGxvZ2ZwOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsb2dmcCA9IG9wZW4obG9nZmlsZSwgImEiKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgaWYgbm90IGxvZ2ZwOgogICAgICAgICBsb2cgPSBub2xvZwpAQCAtNTYwLDYgKzU2MCwxMiBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5yZWFkX3NpbmdsZSgpCiAKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBwcmludGFibGUgcmVwcmVzZW50YXRpb24uIiIiCiAgICAgICAgIHJldHVybiAiRmllbGRTdG9yYWdlKCVyLCAlciwgJXIpIiAlICgKQEAgLTY4MCw3ICs2ODYsNiBAQAogICAgICAgICAgICAgICAgIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcsIGVycm9ycz1zZWxmLmVycm9ycykKICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHF1ZXJ5OgogICAgICAgICAgICAgICAgIHNlbGYubGlzdC5hcHBlbmQoTWluaUZpZWxkU3RvcmFnZShrZXksIHZhbHVlKSkKLSAgICAgICAgICAgIEZpZWxkU3RvcmFnZUNsYXNzID0gTm9uZQogCiAgICAgICAgIGtsYXNzID0gc2VsZi5GaWVsZFN0b3JhZ2VDbGFzcyBvciBzZWxmLl9fY2xhc3NfXwogICAgICAgICBmaXJzdF9saW5lID0gc2VsZi5mcC5yZWFkbGluZSgpICMgYnl0ZXMKQEAgLTk2OCw4ICs5NzMsOCBAQAogICAgIHByaW50KCI8SDM+Q3VycmVudCBXb3JraW5nIERpcmVjdG9yeTo8L0gzPiIpCiAgICAgdHJ5OgogICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHByaW50KCJvcy5lcnJvcjoiLCBodG1sLmVzY2FwZShzdHIobXNnKSkpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgorICAgICAgICBwcmludCgiT1NFcnJvcjoiLCBodG1sLmVzY2FwZShzdHIobXNnKSkpCiAgICAgZWxzZToKICAgICAgICAgcHJpbnQoaHRtbC5lc2NhcGUocHdkKSkKICAgICBwcmludCgpCmRpZmYgLS1naXQgYS9MaWIvY2h1bmsucHkgYi9MaWIvY2h1bmsucHkKaW5kZXggNTg2M2VkMC4uZGM5MGE3NSAxMDA2NDQKLS0tIGEvTGliL2NodW5rLnB5CisrKyBiL0xpYi9jaHVuay5weQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICBzZWxmLnNpemVfcmVhZCA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5vZmZzZXQgPSBzZWxmLmZpbGUudGVsbCgpCi0gICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIElPRXJyb3IpOgorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuc2Vla2FibGUgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5zZWVrYWJsZSA9IFRydWUKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogICAgICAgICBpZiBub3Qgc2VsZi5zZWVrYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbm5vdCBzZWVrIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNhbm5vdCBzZWVrIikKICAgICAgICAgaWYgd2hlbmNlID09IDE6CiAgICAgICAgICAgICBwb3MgPSBwb3MgKyBzZWxmLnNpemVfcmVhZAogICAgICAgICBlbGlmIHdoZW5jZSA9PSAyOgpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5maWxlLnNlZWsobiwgMSkKICAgICAgICAgICAgICAgICBzZWxmLnNpemVfcmVhZCA9IHNlbGYuc2l6ZV9yZWFkICsgbgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHdoaWxlIHNlbGYuc2l6ZV9yZWFkIDwgc2VsZi5jaHVua3NpemU6CiAgICAgICAgICAgICBuID0gbWluKDgxOTIsIHNlbGYuY2h1bmtzaXplIC0gc2VsZi5zaXplX3JlYWQpCmRpZmYgLS1naXQgYS9MaWIvY29kZS5weSBiL0xpYi9jb2RlLnB5CmluZGV4IDkwMjBhYWIuLmY4MTg0YjYgMTAwNjQ0Ci0tLSBhL0xpYi9jb2RlLnB5CisrKyBiL0xpYi9jb2RlLnB5CkBAIC0yMTYsNyArMjE2LDcgQEAKICAgICAgICAgICAgIHNlbGYud3JpdGUoIlB5dGhvbiAlcyBvbiAlc1xuJXNcbiglcylcbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAoc3lzLnZlcnNpb24sIHN5cy5wbGF0Zm9ybSwgY3BydCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKSkKLSAgICAgICAgZWxzZToKKyAgICAgICAgZWxpZiBiYW5uZXI6CiAgICAgICAgICAgICBzZWxmLndyaXRlKCIlc1xuIiAlIHN0cihiYW5uZXIpKQogICAgICAgICBtb3JlID0gMAogICAgICAgICB3aGlsZSAxOgpkaWZmIC0tZ2l0IGEvTGliL2NvZGVjcy5weSBiL0xpYi9jb2RlY3MucHkKaW5kZXggMDFhZTBmMy4uYzIwNjVkYSAxMDA2NDQKLS0tIGEvTGliL2NvZGVjcy5weQorKysgYi9MaWIvY29kZWNzLnB5CkBAIC03Myw5ICs3MywxOSBAQAogIyMjIENvZGVjIGJhc2UgY2xhc3NlcyAoZGVmaW5pbmcgdGhlIEFQSSkKIAogY2xhc3MgQ29kZWNJbmZvKHR1cGxlKToKKyAgICAiIiJDb2RlYyBkZXRhaWxzIHdoZW4gbG9va2luZyB1cCB0aGUgY29kZWMgcmVnaXN0cnkiIiIKKworICAgICMgUHJpdmF0ZSBBUEkgdG8gYWxsb3cgUHl0aG9uIDMuNCB0byBibGFja2xpc3QgdGhlIGtub3duIG5vbi1Vbmljb2RlCisgICAgIyBjb2RlY3MgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuIEEgbW9yZSBnZW5lcmFsIG1lY2hhbmlzbSB0bworICAgICMgcmVsaWFibHkgZGlzdGluZ3Vpc2ggdGVzdCBlbmNvZGluZ3MgZnJvbSBvdGhlciBjb2RlY3Mgd2lsbCBob3BlZnVsbHkKKyAgICAjIGJlIGRlZmluZWQgZm9yIFB5dGhvbiAzLjUKKyAgICAjCisgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NjE5CisgICAgX2lzX3RleHRfZW5jb2RpbmcgPSBUcnVlICMgQXNzdW1lIGNvZGVjcyBhcmUgdGV4dCBlbmNvZGluZ3MgYnkgZGVmYXVsdAogCiAgICAgZGVmIF9fbmV3X18oY2xzLCBlbmNvZGUsIGRlY29kZSwgc3RyZWFtcmVhZGVyPU5vbmUsIHN0cmVhbXdyaXRlcj1Ob25lLAotICAgICAgICBpbmNyZW1lbnRhbGVuY29kZXI9Tm9uZSwgaW5jcmVtZW50YWxkZWNvZGVyPU5vbmUsIG5hbWU9Tm9uZSk6CisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1Ob25lLCBpbmNyZW1lbnRhbGRlY29kZXI9Tm9uZSwgbmFtZT1Ob25lLAorICAgICAgICAqLCBfaXNfdGV4dF9lbmNvZGluZz1Ob25lKToKICAgICAgICAgc2VsZiA9IHR1cGxlLl9fbmV3X18oY2xzLCAoZW5jb2RlLCBkZWNvZGUsIHN0cmVhbXJlYWRlciwgc3RyZWFtd3JpdGVyKSkKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLmVuY29kZSA9IGVuY29kZQpAQCAtODQsNiArOTQsOCBAQAogICAgICAgICBzZWxmLmluY3JlbWVudGFsZGVjb2RlciA9IGluY3JlbWVudGFsZGVjb2RlcgogICAgICAgICBzZWxmLnN0cmVhbXdyaXRlciA9IHN0cmVhbXdyaXRlcgogICAgICAgICBzZWxmLnN0cmVhbXJlYWRlciA9IHN0cmVhbXJlYWRlcgorICAgICAgICBpZiBfaXNfdGV4dF9lbmNvZGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2lzX3RleHRfZW5jb2RpbmcgPSBfaXNfdGV4dF9lbmNvZGluZwogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5IGIvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5CmluZGV4IGQ3MzcyOTUuLjAyYmRjNTcgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy9fX2luaXRfXy5weQorKysgYi9MaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHkKQEAgLTMsMTYgKzMsMTYgQEAKIAogIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGNvbnRpbnVlIHRvIG1ha2UgdGhlIGNvbGxlY3Rpb25zIEFCQ3MKICMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGNvbGxlY3Rpb25zIG1vZHVsZS4KLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCAqCi1pbXBvcnQgY29sbGVjdGlvbnMuYWJjCi1fX2FsbF9fICs9IGNvbGxlY3Rpb25zLmFiYy5fX2FsbF9fCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0ICoKK2ltcG9ydCBfY29sbGVjdGlvbnNfYWJjCitfX2FsbF9fICs9IF9jb2xsZWN0aW9uc19hYmMuX19hbGxfXwogCiBmcm9tIF9jb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUsIGRlZmF1bHRkaWN0CiBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyIGFzIF9pdGVtZ2V0dGVyLCBlcSBhcyBfZXEKIGZyb20ga2V5d29yZCBpbXBvcnQgaXNrZXl3b3JkIGFzIF9pc2tleXdvcmQKIGltcG9ydCBzeXMgYXMgX3N5cwogaW1wb3J0IGhlYXBxIGFzIF9oZWFwcQotZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eSBhcyBfcHJveHkKK2Zyb20gX3dlYWtyZWYgaW1wb3J0IHByb3h5IGFzIF9wcm94eQogZnJvbSBpdGVydG9vbHMgaW1wb3J0IHJlcGVhdCBhcyBfcmVwZWF0LCBjaGFpbiBhcyBfY2hhaW4sIHN0YXJtYXAgYXMgX3N0YXJtYXAKIGZyb20gcmVwcmxpYiBpbXBvcnQgcmVjdXJzaXZlX3JlcHIgYXMgX3JlY3Vyc2l2ZV9yZXByCiAKQEAgLTE5OSwxMyArMTk5LDEwIEBACiAKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgICAgJ1JldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmcnCi0gICAgICAgIGl0ZW1zID0gW1trLCBzZWxmW2tdXSBmb3IgayBpbiBzZWxmXQogICAgICAgICBpbnN0X2RpY3QgPSB2YXJzKHNlbGYpLmNvcHkoKQogICAgICAgICBmb3IgayBpbiB2YXJzKE9yZGVyZWREaWN0KCkpOgogICAgICAgICAgICAgaW5zdF9kaWN0LnBvcChrLCBOb25lKQotICAgICAgICBpZiBpbnN0X2RpY3Q6Ci0gICAgICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCAoaXRlbXMsKSwgaW5zdF9kaWN0KQotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChpdGVtcywpCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKCksIGluc3RfZGljdCBvciBOb25lLCBOb25lLCBpdGVyKHNlbGYuaXRlbXMoKSkKIAogICAgIGRlZiBjb3B5KHNlbGYpOgogICAgICAgICAnb2QuY29weSgpIC0+IGEgc2hhbGxvdyBjb3B5IG9mIG9kJwpAQCAtODIyLDkgKzgxOSwxNCBAQAogCiAgICAgX19jb3B5X18gPSBjb3B5CiAKLSAgICBkZWYgbmV3X2NoaWxkKHNlbGYpOiAgICAgICAgICAgICAgICAgICAgICAgICMgbGlrZSBEamFuZ28ncyBDb250ZXh0LnB1c2goKQotICAgICAgICAnTmV3IENoYWluTWFwIHdpdGggYSBuZXcgZGljdCBmb2xsb3dlZCBieSBhbGwgcHJldmlvdXMgbWFwcy4nCi0gICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyh7fSwgKnNlbGYubWFwcykKKyAgICBkZWYgbmV3X2NoaWxkKHNlbGYsIG09Tm9uZSk6ICAgICAgICAgICAgICAgICMgbGlrZSBEamFuZ28ncyBDb250ZXh0LnB1c2goKQorICAgICAgICAnJycKKyAgICAgICAgTmV3IENoYWluTWFwIHdpdGggYSBuZXcgbWFwIGZvbGxvd2VkIGJ5IGFsbCBwcmV2aW91cyBtYXBzLiBJZiBubworICAgICAgICBtYXAgaXMgcHJvdmlkZWQsIGFuIGVtcHR5IGRpY3QgaXMgdXNlZC4KKyAgICAgICAgJycnCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIG0gPSB7fQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18obSwgKnNlbGYubWFwcykKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBwYXJlbnRzKHNlbGYpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsaWtlIERqYW5nbydzIENvbnRleHQucG9wKCkKZGlmZiAtLWdpdCBhL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkgYi9MaWIvY29sbGVjdGlvbnMvYWJjLnB5CmluZGV4IDc5MzkyNjguLjg5MTYwMGQgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkKKysrIGIvTGliL2NvbGxlY3Rpb25zL2FiYy5weQpAQCAtMSw3MjggKzEsMiBAQAotIyBDb3B5cmlnaHQgMjAwNyBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotCi0iIiJBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGZvciBjb2xsZWN0aW9ucywgYWNjb3JkaW5nIHRvIFBFUCAzMTE5LgotCi1Vbml0IHRlc3RzIGFyZSBpbiB0ZXN0X2NvbGxlY3Rpb25zLgotIiIiCi0KLWZyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAotaW1wb3J0IHN5cwotCi1fX2FsbF9fID0gWyJIYXNoYWJsZSIsICJJdGVyYWJsZSIsICJJdGVyYXRvciIsCi0gICAgICAgICAgICJTaXplZCIsICJDb250YWluZXIiLCAiQ2FsbGFibGUiLAotICAgICAgICAgICAiU2V0IiwgIk11dGFibGVTZXQiLAotICAgICAgICAgICAiTWFwcGluZyIsICJNdXRhYmxlTWFwcGluZyIsCi0gICAgICAgICAgICJNYXBwaW5nVmlldyIsICJLZXlzVmlldyIsICJJdGVtc1ZpZXciLCAiVmFsdWVzVmlldyIsCi0gICAgICAgICAgICJTZXF1ZW5jZSIsICJNdXRhYmxlU2VxdWVuY2UiLAotICAgICAgICAgICAiQnl0ZVN0cmluZyIsCi0gICAgICAgICAgIF0KLQotIyBQcml2YXRlIGxpc3Qgb2YgdHlwZXMgdGhhdCB3ZSB3YW50IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHZhcmlvdXMgQUJDcwotIyBzbyB0aGF0IHRoZXkgd2lsbCBwYXNzIHRlc3RzIGxpa2U6Ci0jICAgICAgIGl0ID0gaXRlcihzb21lYnl0ZWFycmF5KQotIyAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpdCwgSXRlcmFibGUpCi0jIE5vdGU6ICBpbiBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIHRoZXNlIHR5cGVzIG1hbnkgbm90IGJlIGRpc3RpbmN0Ci0jIGFuZCB0aGV5IG1ha2UgaGF2ZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdHlwZXMgdGhhdAotIyBhcmUgbm90IGluY2x1ZGVkIG9uIHRoaXMgbGlzdC4KLWJ5dGVzX2l0ZXJhdG9yID0gdHlwZShpdGVyKGInJykpCi1ieXRlYXJyYXlfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoYnl0ZWFycmF5KCkpKQotI2NhbGxhYmxlX2l0ZXJhdG9yID0gPz8/Ci1kaWN0X2tleWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LmtleXMoKSkpCi1kaWN0X3ZhbHVlaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30udmFsdWVzKCkpKQotZGljdF9pdGVtaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30uaXRlbXMoKSkpCi1saXN0X2l0ZXJhdG9yID0gdHlwZShpdGVyKFtdKSkKLWxpc3RfcmV2ZXJzZWl0ZXJhdG9yID0gdHlwZShpdGVyKHJldmVyc2VkKFtdKSkpCi1yYW5nZV9pdGVyYXRvciA9IHR5cGUoaXRlcihyYW5nZSgwKSkpCi1zZXRfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoc2V0KCkpKQotc3RyX2l0ZXJhdG9yID0gdHlwZShpdGVyKCIiKSkKLXR1cGxlX2l0ZXJhdG9yID0gdHlwZShpdGVyKCgpKSkKLXppcF9pdGVyYXRvciA9IHR5cGUoaXRlcih6aXAoKSkpCi0jIyB2aWV3cyAjIwotZGljdF9rZXlzID0gdHlwZSh7fS5rZXlzKCkpCi1kaWN0X3ZhbHVlcyA9IHR5cGUoe30udmFsdWVzKCkpCi1kaWN0X2l0ZW1zID0gdHlwZSh7fS5pdGVtcygpKQotIyMgbWlzYyAjIwotbWFwcGluZ3Byb3h5ID0gdHlwZSh0eXBlLl9fZGljdF9fKQotCi0KLSMjIyBPTkUtVFJJQ0sgUE9OSUVTICMjIwotCi1jbGFzcyBIYXNoYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gMAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEhhc2hhYmxlOgotICAgICAgICAgICAgZm9yIEIgaW4gQy5fX21yb19fOgotICAgICAgICAgICAgICAgIGlmICJfX2hhc2hfXyIgaW4gQi5fX2RpY3RfXzoKLSAgICAgICAgICAgICAgICAgICAgaWYgQi5fX2RpY3RfX1siX19oYXNoX18iXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIEl0ZXJhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHdoaWxlIEZhbHNlOgotICAgICAgICAgICAgeWllbGQgTm9uZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEl0ZXJhYmxlOgotICAgICAgICAgICAgaWYgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIEl0ZXJhdG9yKEl0ZXJhYmxlKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgICdSZXR1cm4gdGhlIG5leHQgaXRlbSBmcm9tIHRoZSBpdGVyYXRvci4gV2hlbiBleGhhdXN0ZWQsIHJhaXNlIFN0b3BJdGVyYXRpb24nCi0gICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBJdGVyYXRvcjoKLSAgICAgICAgICAgIGlmIChhbnkoIl9fbmV4dF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykgYW5kCi0gICAgICAgICAgICAgICAgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZXNfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihieXRlYXJyYXlfaXRlcmF0b3IpCi0jSXRlcmF0b3IucmVnaXN0ZXIoY2FsbGFibGVfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihkaWN0X2tleWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoZGljdF92YWx1ZWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9pdGVtaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihsaXN0X2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9yZXZlcnNlaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihyYW5nZV9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHNldF9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHN0cl9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHR1cGxlX2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoemlwX2l0ZXJhdG9yKQotCi1jbGFzcyBTaXplZChtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAwCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgU2l6ZWQ6Ci0gICAgICAgICAgICBpZiBhbnkoIl9fbGVuX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotCi1jbGFzcyBDb250YWluZXIobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIENvbnRhaW5lcjoKLSAgICAgICAgICAgIGlmIGFueSgiX19jb250YWluc19fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotY2xhc3MgQ2FsbGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgQ2FsbGFibGU6Ci0gICAgICAgICAgICBpZiBhbnkoIl9fY2FsbF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotIyMjIFNFVFMgIyMjCi0KLQotY2xhc3MgU2V0KFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKLQotICAgICIiIkEgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fIGFuZCBfX2xlbl9fLgotCi0gICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCi0gICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIGlmIGxlbihzZWxmKSA+IGxlbihvdGhlcik6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZm9yIGVsZW0gaW4gc2VsZjoKLSAgICAgICAgICAgIGlmIGVsZW0gbm90IGluIG90aGVyOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fbGVfXyhvdGhlcikKLQotICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gb3RoZXIuX19sdF9fKHNlbGYpCi0KLSAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIG90aGVyLl9fbGVfXyhzZWxmKQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBsZW4oc2VsZikgPT0gbGVuKG90aGVyKSBhbmQgc2VsZi5fX2xlX18ob3RoZXIpCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfZnJvbV9pdGVyYWJsZShjbHMsIGl0KToKLSAgICAgICAgJycnQ29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBmcm9tIGFueSBpdGVyYWJsZSBpbnB1dC4KLQotICAgICAgICBNdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBzaWduYXR1cmUKLSAgICAgICAgZG9lcyBub3QgYWNjZXB0IGFuIGl0ZXJhYmxlIGZvciBhbiBpbnB1dC4KLSAgICAgICAgJycnCi0gICAgICAgIHJldHVybiBjbHMoaXQpCi0KLSAgICBkZWYgX19hbmRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIG90aGVyIGlmIHZhbHVlIGluIHNlbGYpCi0KLSAgICBkZWYgaXNkaXNqb2ludChzZWxmLCBvdGhlcik6Ci0gICAgICAgICdSZXR1cm4gVHJ1ZSBpZiB0d28gc2V0cyBoYXZlIGEgbnVsbCBpbnRlcnNlY3Rpb24uJwotICAgICAgICBmb3IgdmFsdWUgaW4gb3RoZXI6Ci0gICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9fb3JfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgY2hhaW4gPSAoZSBmb3IgcyBpbiAoc2VsZiwgb3RoZXIpIGZvciBlIGluIHMpCi0gICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKGNoYWluKQotCi0gICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCi0gICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBvdGhlcikKLQotICAgIGRlZiBfX3hvcl9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgotICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQotICAgICAgICByZXR1cm4gKHNlbGYgLSBvdGhlcikgfCAob3RoZXIgLSBzZWxmKQotCi0gICAgZGVmIF9oYXNoKHNlbGYpOgotICAgICAgICAiIiJDb21wdXRlIHRoZSBoYXNoIHZhbHVlIG9mIGEgc2V0LgotCi0gICAgICAgIE5vdGUgdGhhdCB3ZSBkb24ndCBkZWZpbmUgX19oYXNoX186IG5vdCBhbGwgc2V0cyBhcmUgaGFzaGFibGUuCi0gICAgICAgIEJ1dCBpZiB5b3UgZGVmaW5lIGEgaGFzaGFibGUgc2V0IHR5cGUsIGl0cyBfX2hhc2hfXyBzaG91bGQKLSAgICAgICAgY2FsbCB0aGlzIGZ1bmN0aW9uLgotCi0gICAgICAgIFRoaXMgbXVzdCBiZSBjb21wYXRpYmxlIF9fZXFfXy4KLQotICAgICAgICBBbGwgc2V0cyBvdWdodCB0byBjb21wYXJlIGVxdWFsIGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZQotICAgICAgICBlbGVtZW50cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQsIGFuZAotICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHM7IHNvIHRoZXJlJ3Mgbm90IG11Y2gKLSAgICAgICAgZnJlZWRvbSBmb3IgX19lcV9fIG9yIF9faGFzaF9fLiAgV2UgbWF0Y2ggdGhlIGFsZ29yaXRobSB1c2VkCi0gICAgICAgIGJ5IHRoZSBidWlsdC1pbiBmcm96ZW5zZXQgdHlwZS4KLSAgICAgICAgIiIiCi0gICAgICAgIE1BWCA9IHN5cy5tYXhzaXplCi0gICAgICAgIE1BU0sgPSAyICogTUFYICsgMQotICAgICAgICBuID0gbGVuKHNlbGYpCi0gICAgICAgIGggPSAxOTI3ODY4MjM3ICogKG4gKyAxKQotICAgICAgICBoICY9IE1BU0sKLSAgICAgICAgZm9yIHggaW4gc2VsZjoKLSAgICAgICAgICAgIGh4ID0gaGFzaCh4KQotICAgICAgICAgICAgaCBePSAoaHggXiAoaHggPDwgMTYpIF4gODk4Njk3NDcpICAqIDM2NDQ3OTgxNjcKLSAgICAgICAgICAgIGggJj0gTUFTSwotICAgICAgICBoID0gaCAqIDY5MDY5ICsgOTA3MTMzOTIzCi0gICAgICAgIGggJj0gTUFTSwotICAgICAgICBpZiBoID4gTUFYOgotICAgICAgICAgICAgaCAtPSBNQVNLICsgMQotICAgICAgICBpZiBoID09IC0xOgotICAgICAgICAgICAgaCA9IDU5MDkyMzcxMwotICAgICAgICByZXR1cm4gaAotCi1TZXQucmVnaXN0ZXIoZnJvemVuc2V0KQotCi0KLWNsYXNzIE11dGFibGVTZXQoU2V0KToKLSAgICAiIiJBIG11dGFibGUgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fLCBfX2xlbl9fLAotICAgIGFkZCgpLCBhbmQgZGlzY2FyZCgpLgotCi0gICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCi0gICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGFkZChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIkFkZCBhbiBlbGVtZW50LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgZGlzY2FyZChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiAgRG8gbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBhYnNlbnQuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgotICAgICAgICAiIiJSZW1vdmUgYW4gZWxlbWVudC4gSWYgbm90IGEgbWVtYmVyLCByYWlzZSBhIEtleUVycm9yLiIiIgotICAgICAgICBpZiB2YWx1ZSBub3QgaW4gc2VsZjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKHZhbHVlKQotICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0KLSAgICBkZWYgcG9wKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHBvcHBlZCB2YWx1ZS4gIFJhaXNlIEtleUVycm9yIGlmIGVtcHR5LiIiIgotICAgICAgICBpdCA9IGl0ZXIoc2VsZikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBuZXh0KGl0KQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICIiIlRoaXMgaXMgc2xvdyAoY3JlYXRlcyBOIG5ldyBpdGVyYXRvcnMhKSBidXQgZWZmZWN0aXZlLiIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIF9faW9yX18oc2VsZiwgaXQpOgotICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2lhbmRfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGZvciB2YWx1ZSBpbiAoc2VsZiAtIGl0KToKLSAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2l4b3JfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGlmIGl0IGlzIHNlbGY6Ci0gICAgICAgICAgICBzZWxmLmNsZWFyKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0LCBTZXQpOgotICAgICAgICAgICAgICAgIGl0ID0gc2VsZi5fZnJvbV9pdGVyYWJsZShpdCkKLSAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKLSAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19pc3ViX18oc2VsZiwgaXQpOgotICAgICAgICBpZiBpdCBpcyBzZWxmOgotICAgICAgICAgICAgc2VsZi5jbGVhcigpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQotICAgICAgICByZXR1cm4gc2VsZgotCi1NdXRhYmxlU2V0LnJlZ2lzdGVyKHNldCkKLQotCi0jIyMgTUFQUElOR1MgIyMjCi0KLQotY2xhc3MgTWFwcGluZyhTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgIiIiQSBNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nIGtleS92YWx1ZQotICAgIHBhaXJzLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9faXRlcl9fLCBhbmQgX19sZW5fXy4KLQotICAgICIiIgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0KLSAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKLSAgICAgICAgJ0QuZ2V0KGtbLGRdKSAtPiBEW2tdIGlmIGsgaW4gRCwgZWxzZSBkLiAgZCBkZWZhdWx0cyB0byBOb25lLicKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIGtleXMoc2VsZik6Ci0gICAgICAgICJELmtleXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBrZXlzIgotICAgICAgICByZXR1cm4gS2V5c1ZpZXcoc2VsZikKLQotICAgIGRlZiBpdGVtcyhzZWxmKToKLSAgICAgICAgIkQuaXRlbXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBpdGVtcyIKLSAgICAgICAgcmV0dXJuIEl0ZW1zVmlldyhzZWxmKQotCi0gICAgZGVmIHZhbHVlcyhzZWxmKToKLSAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIKLSAgICAgICAgcmV0dXJuIFZhbHVlc1ZpZXcoc2VsZikKLQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIGRpY3Qoc2VsZi5pdGVtcygpKSA9PSBkaWN0KG90aGVyLml0ZW1zKCkpCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQotTWFwcGluZy5yZWdpc3RlcihtYXBwaW5ncHJveHkpCi0KLQotY2xhc3MgTWFwcGluZ1ZpZXcoU2l6ZWQpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmcpOgotICAgICAgICBzZWxmLl9tYXBwaW5nID0gbWFwcGluZwotCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBsZW4oc2VsZi5fbWFwcGluZykKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICd7MC5fX2NsYXNzX18uX19uYW1lX199KHswLl9tYXBwaW5nIXJ9KScuZm9ybWF0KHNlbGYpCi0KLQotY2xhc3MgS2V5c1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgotICAgICAgICByZXR1cm4gc2V0KGl0KQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX21hcHBpbmcKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgeWllbGQga2V5Ci0KLUtleXNWaWV3LnJlZ2lzdGVyKGRpY3Rfa2V5cykKLQotCi1jbGFzcyBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgotICAgICAgICByZXR1cm4gc2V0KGl0KQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKLSAgICAgICAga2V5LCB2YWx1ZSA9IGl0ZW0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdiA9IHNlbGYuX21hcHBpbmdba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiB2ID09IHZhbHVlCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKLSAgICAgICAgICAgIHlpZWxkIChrZXksIHNlbGYuX21hcHBpbmdba2V5XSkKLQotSXRlbXNWaWV3LnJlZ2lzdGVyKGRpY3RfaXRlbXMpCi0KLQotY2xhc3MgVmFsdWVzVmlldyhNYXBwaW5nVmlldyk6Ci0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgaWYgdmFsdWUgPT0gc2VsZi5fbWFwcGluZ1trZXldOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6Ci0gICAgICAgICAgICB5aWVsZCBzZWxmLl9tYXBwaW5nW2tleV0KLQotVmFsdWVzVmlldy5yZWdpc3RlcihkaWN0X3ZhbHVlcykKLQotCi1jbGFzcyBNdXRhYmxlTWFwcGluZyhNYXBwaW5nKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICAiIiJBIE11dGFibGVNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nCi0gICAga2V5L3ZhbHVlIHBhaXJzLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywKLSAgICBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCi0KLSAgICAiIiIKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByYWlzZSBLZXlFcnJvcgotCi0gICAgX19tYXJrZXIgPSBvYmplY3QoKQotCi0gICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9X19tYXJrZXIpOgotICAgICAgICAnJydELnBvcChrWyxkXSkgLT4gdiwgcmVtb3ZlIHNwZWNpZmllZCBrZXkgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS4KLSAgICAgICAgICBJZiBrZXkgaXMgbm90IGZvdW5kLCBkIGlzIHJldHVybmVkIGlmIGdpdmVuLCBvdGhlcndpc2UgS2V5RXJyb3IgaXMgcmFpc2VkLgotICAgICAgICAnJycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBzZWxmLl9fbWFya2VyOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVsIHNlbGZba2V5XQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgcG9waXRlbShzZWxmKToKLSAgICAgICAgJycnRC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZW1vdmUgYW5kIHJldHVybiBzb21lIChrZXksIHZhbHVlKSBwYWlyCi0gICAgICAgICAgIGFzIGEgMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuCi0gICAgICAgICcnJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBrZXkgPSBuZXh0KGl0ZXIoc2VsZikpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKLSAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KLSAgICAgICAgZGVsIHNlbGZba2V5XQotICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQotCi0gICAgZGVmIGNsZWFyKHNlbGYpOgotICAgICAgICAnRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4nCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5wb3BpdGVtKCkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2RzKToKLSAgICAgICAgJycnIEQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBtYXBwaW5nL2l0ZXJhYmxlIEUgYW5kIEYuCi0gICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba10KLSAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2Ci0gICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGssIHYgaW4gRi5pdGVtcygpOiBEW2tdID0gdgotICAgICAgICAnJycKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMjoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbW9zdCAyIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKHt9IGdpdmVuKSIuZm9ybWF0KGxlbihhcmdzKSkpCi0gICAgICAgIGVsaWYgbm90IGFyZ3M6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pIikKLSAgICAgICAgc2VsZiA9IGFyZ3NbMF0KLSAgICAgICAgb3RoZXIgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgKCkKLQotICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKLSAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXI6Ci0gICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQotICAgICAgICBlbGlmIGhhc2F0dHIob3RoZXIsICJrZXlzIik6Ci0gICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyLmtleXMoKToKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlcjoKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2RzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQotCi0gICAgZGVmIHNldGRlZmF1bHQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgotICAgICAgICAnRC5zZXRkZWZhdWx0KGtbLGRdKSAtPiBELmdldChrLGQpLCBhbHNvIHNldCBEW2tdPWQgaWYgayBub3QgaW4gRCcKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSBkZWZhdWx0Ci0gICAgICAgIHJldHVybiBkZWZhdWx0Ci0KLU11dGFibGVNYXBwaW5nLnJlZ2lzdGVyKGRpY3QpCi0KLQotIyMjIFNFUVVFTkNFUyAjIyMKLQotCi1jbGFzcyBTZXF1ZW5jZShTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6Ci0KLSAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLW9ubHkgc2VxdWVuY2UuCi0KLSAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgX19uZXdfXyBvciBfX2luaXRfXywKLSAgICBfX2dldGl0ZW1fXywgYW5kIF9fbGVuX18uCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBpID0gMAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHYgPSBzZWxmW2ldCi0gICAgICAgICAgICAgICAgeWllbGQgdgotICAgICAgICAgICAgICAgIGkgKz0gMQotICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGZvciB2IGluIHNlbGY6Ci0gICAgICAgICAgICBpZiB2ID09IHZhbHVlOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmKToKLSAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobGVuKHNlbGYpKSk6Ci0gICAgICAgICAgICB5aWVsZCBzZWxmW2ldCi0KLSAgICBkZWYgaW5kZXgoc2VsZiwgdmFsdWUpOgotICAgICAgICAnJydTLmluZGV4KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBmaXJzdCBpbmRleCBvZiB2YWx1ZS4KLSAgICAgICAgICAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgotICAgICAgICAnJycKLSAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHNlbGYpOgotICAgICAgICAgICAgaWYgdiA9PSB2YWx1ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaQotICAgICAgICByYWlzZSBWYWx1ZUVycm9yCi0KLSAgICBkZWYgY291bnQoc2VsZiwgdmFsdWUpOgotICAgICAgICAnUy5jb3VudCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHZhbHVlJwotICAgICAgICByZXR1cm4gc3VtKDEgZm9yIHYgaW4gc2VsZiBpZiB2ID09IHZhbHVlKQotCi1TZXF1ZW5jZS5yZWdpc3Rlcih0dXBsZSkKLVNlcXVlbmNlLnJlZ2lzdGVyKHN0cikKLVNlcXVlbmNlLnJlZ2lzdGVyKHJhbmdlKQotCi0KLWNsYXNzIEJ5dGVTdHJpbmcoU2VxdWVuY2UpOgotCi0gICAgIiIiVGhpcyB1bmlmaWVzIGJ5dGVzIGFuZCBieXRlYXJyYXkuCi0KLSAgICBYWFggU2hvdWxkIGFkZCBhbGwgdGhlaXIgbWV0aG9kcy4KLSAgICAiIiIKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLUJ5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZXMpCi1CeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVhcnJheSkKLQotCi1jbGFzcyBNdXRhYmxlU2VxdWVuY2UoU2VxdWVuY2UpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtb25seSBzZXF1ZW5jZS4KLQotICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBwcm92aWRlIF9fbmV3X18gb3IgX19pbml0X18sCi0gICAgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywgX19sZW5fXywgYW5kIGluc2VydCgpLgotCi0gICAgIiIiCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgdmFsdWUpOgotICAgICAgICAnUy5pbnNlcnQoaW5kZXgsIHZhbHVlKSAtLSBpbnNlcnQgdmFsdWUgYmVmb3JlIGluZGV4JwotICAgICAgICByYWlzZSBJbmRleEVycm9yCi0KLSAgICBkZWYgYXBwZW5kKHNlbGYsIHZhbHVlKToKLSAgICAgICAgJ1MuYXBwZW5kKHZhbHVlKSAtLSBhcHBlbmQgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UnCi0gICAgICAgIHNlbGYuaW5zZXJ0KGxlbihzZWxmKSwgdmFsdWUpCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICdTLmNsZWFyKCkgLT4gTm9uZSAtLSByZW1vdmUgYWxsIGl0ZW1zIGZyb20gUycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBzZWxmLnBvcCgpCi0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHJldmVyc2Uoc2VsZik6Ci0gICAgICAgICdTLnJldmVyc2UoKSAtLSByZXZlcnNlICpJTiBQTEFDRSonCi0gICAgICAgIG4gPSBsZW4oc2VsZikKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobi8vMik6Ci0gICAgICAgICAgICBzZWxmW2ldLCBzZWxmW24taS0xXSA9IHNlbGZbbi1pLTFdLCBzZWxmW2ldCi0KLSAgICBkZWYgZXh0ZW5kKHNlbGYsIHZhbHVlcyk6Ci0gICAgICAgICdTLmV4dGVuZChpdGVyYWJsZSkgLS0gZXh0ZW5kIHNlcXVlbmNlIGJ5IGFwcGVuZGluZyBlbGVtZW50cyBmcm9tIHRoZSBpdGVyYWJsZScKLSAgICAgICAgZm9yIHYgaW4gdmFsdWVzOgotICAgICAgICAgICAgc2VsZi5hcHBlbmQodikKLQotICAgIGRlZiBwb3Aoc2VsZiwgaW5kZXg9LTEpOgotICAgICAgICAnJydTLnBvcChbaW5kZXhdKSAtPiBpdGVtIC0tIHJlbW92ZSBhbmQgcmV0dXJuIGl0ZW0gYXQgaW5kZXggKGRlZmF1bHQgbGFzdCkuCi0gICAgICAgICAgIFJhaXNlIEluZGV4RXJyb3IgaWYgbGlzdCBpcyBlbXB0eSBvciBpbmRleCBpcyBvdXQgb2YgcmFuZ2UuCi0gICAgICAgICcnJwotICAgICAgICB2ID0gc2VsZltpbmRleF0KLSAgICAgICAgZGVsIHNlbGZbaW5kZXhdCi0gICAgICAgIHJldHVybiB2Ci0KLSAgICBkZWYgcmVtb3ZlKHNlbGYsIHZhbHVlKToKLSAgICAgICAgJycnUy5yZW1vdmUodmFsdWUpIC0tIHJlbW92ZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHZhbHVlLgotICAgICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4KLSAgICAgICAgJycnCi0gICAgICAgIGRlbCBzZWxmW3NlbGYuaW5kZXgodmFsdWUpXQotCi0gICAgZGVmIF9faWFkZF9fKHNlbGYsIHZhbHVlcyk6Ci0gICAgICAgIHNlbGYuZXh0ZW5kKHZhbHVlcykKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKGxpc3QpCi1NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoYnl0ZWFycmF5KSAgIyBNdWx0aXBseSBpbmhlcml0aW5nLCBzZWUgQnl0ZVN0cmluZworZnJvbSBfY29sbGVjdGlvbnNfYWJjIGltcG9ydCAqCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IF9fYWxsX18KZGlmZiAtLWdpdCBhL0xpYi9jb2xvcnN5cy5weSBiL0xpYi9jb2xvcnN5cy5weQppbmRleCBhNmMwY2Y2Li5iOTNlMzg0IDEwMDY0NAotLS0gYS9MaWIvY29sb3JzeXMucHkKKysrIGIvTGliL2NvbG9yc3lzLnB5CkBAIC0zMywxNyArMzMsMjUgQEAKICMgWUlROiB1c2VkIGJ5IGNvbXBvc2l0ZSB2aWRlbyBzaWduYWxzIChsaW5lYXIgY29tYmluYXRpb25zIG9mIFJHQikKICMgWTogcGVyY2VpdmVkIGdyZXkgbGV2ZWwgKDAuMCA9PSBibGFjaywgMS4wID09IHdoaXRlKQogIyBJLCBROiBjb2xvciBjb21wb25lbnRzCisjCisjIFRoZXJlIGFyZSBhIGdyZWF0IG1hbnkgdmVyc2lvbnMgb2YgdGhlIGNvbnN0YW50cyB1c2VkIGluIHRoZXNlIGZvcm11bGFlLgorIyBUaGUgb25lcyBpbiB0aGlzIGxpYnJhcnkgdXNlcyBjb25zdGFudHMgZnJvbSB0aGUgRkNDIHZlcnNpb24gb2YgTlRTQy4KIAogZGVmIHJnYl90b195aXEociwgZywgYik6CiAgICAgeSA9IDAuMzAqciArIDAuNTkqZyArIDAuMTEqYgotICAgIGkgPSAwLjYwKnIgLSAwLjI4KmcgLSAwLjMyKmIKLSAgICBxID0gMC4yMSpyIC0gMC41MipnICsgMC4zMSpiCisgICAgaSA9IDAuNzQqKHIteSkgLSAwLjI3KihiLXkpCisgICAgcSA9IDAuNDgqKHIteSkgKyAwLjQxKihiLXkpCiAgICAgcmV0dXJuICh5LCBpLCBxKQogCiBkZWYgeWlxX3RvX3JnYih5LCBpLCBxKToKLSAgICByID0geSArIDAuOTQ4MjYyKmkgKyAwLjYyNDAxMypxCi0gICAgZyA9IHkgLSAwLjI3NjA2NippIC0gMC42Mzk4MTAqcQotICAgIGIgPSB5IC0gMS4xMDU0NTAqaSArIDEuNzI5ODYwKnEKKyAgICAjIHIgPSB5ICsgKDAuMjcqcSArIDAuNDEqaSkgLyAoMC43NCowLjQxICsgMC4yNyowLjQ4KQorICAgICMgYiA9IHkgKyAoMC43NCpxIC0gMC40OCppKSAvICgwLjc0KjAuNDEgKyAwLjI3KjAuNDgpCisgICAgIyBnID0geSAtICgwLjMwKihyLXkpICsgMC4xMSooYi15KSkgLyAwLjU5CisKKyAgICByID0geSArIDAuOTQ2ODgyMjE3MDkwMDY5MyppICsgMC42MjM1NTY1ODE5ODYxNDMzKnEKKyAgICBnID0geSAtIDAuMjc0Nzg3NjQ2Mjk4OTc4MzQqaSAtIDAuNjM1NjkxMDc5MTg3MzgwMSpxCisgICAgYiA9IHkgLSAxLjEwODU0NTAzNDY0MjAzMjIqaSArIDEuNzA5MDA2OTI4NDA2NDY2NipxCisKICAgICBpZiByIDwgMC4wOgogICAgICAgICByID0gMC4wCiAgICAgaWYgZyA8IDAuMDoKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlYWxsLnB5IGIvTGliL2NvbXBpbGVhbGwucHkKaW5kZXggNjkzZWRhOS4uMDdmNTBhYSAxMDA2NDQKLS0tIGEvTGliL2NvbXBpbGVhbGwucHkKKysrIGIvTGliL2NvbXBpbGVhbGwucHkKQEAgLTEzLDcgKzEzLDcgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IGVycm5vCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc3RydWN0CiAKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcHJpbnQoJ0xpc3RpbmcgeyFyfS4uLicuZm9ybWF0KGRpcikpCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcHJpbnQoIkNhbid0IGxpc3QgeyFyfSIuZm9ybWF0KGRpcikpCiAgICAgICAgIG5hbWVzID0gW10KICAgICBuYW1lcy5zb3J0KCkKQEAgLTkxLDIyICs5MSwyMyBAQAogICAgICAgICAgICAgY2ZpbGUgPSBmdWxsbmFtZSArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWUsIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZnVsbG5hbWUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSkKICAgICAgICAgICAgIGNhY2hlX2RpciA9IG9zLnBhdGguZGlybmFtZShjZmlsZSkKICAgICAgICAgaGVhZCwgdGFpbCA9IG5hbWVbOi0zXSwgbmFtZVstMzpdCiAgICAgICAgIGlmIHRhaWwgPT0gJy5weSc6CiAgICAgICAgICAgICBpZiBub3QgZm9yY2U6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBtdGltZSA9IGludChvcy5zdGF0KGZ1bGxuYW1lKS5zdF9tdGltZSkKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ID0gc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIG10aW1lKQorICAgICAgICAgICAgICAgICAgICBleHBlY3QgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWUpCiAgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihjZmlsZSwgJ3JiJykgYXMgY2hhbmRsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IGNoYW5kbGUucmVhZCg4KQogICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3QgPT0gYWN0dWFsOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICAgICAgICAgIHByaW50KCdDb21waWxpbmcgeyFyfS4uLicuZm9ybWF0KGZ1bGxuYW1lKSkKQEAgLTEyNCw3ICsxMjUsNyBAQAogICAgICAgICAgICAgICAgIG1zZyA9IG1zZy5kZWNvZGUoc3lzLnN0ZG91dC5lbmNvZGluZykKICAgICAgICAgICAgICAgICBwcmludChtc2cpCiAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKLSAgICAgICAgICAgIGV4Y2VwdCAoU3ludGF4RXJyb3IsIFVuaWNvZGVFcnJvciwgSU9FcnJvcikgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCAoU3ludGF4RXJyb3IsIFVuaWNvZGVFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICAgICBpZiBxdWlldDoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBFcnJvciBjb21waWxpbmcgeyFyfS4uLicuZm9ybWF0KGZ1bGxuYW1lKSkKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMjA5LDcgKzIxMCw3IEBACiAgICAgICAgICAgICB3aXRoIChzeXMuc3RkaW4gaWYgYXJncy5mbGlzdD09Jy0nIGVsc2Ugb3BlbihhcmdzLmZsaXN0KSkgYXMgZjoKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICBjb21waWxlX2Rlc3RzLmFwcGVuZChsaW5lLnN0cmlwKCkpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJFcnJvciByZWFkaW5nIGZpbGUgbGlzdCB7fSIuZm9ybWF0KGFyZ3MuZmxpc3QpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKZGlmZiAtLWdpdCBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5CmluZGV4IGQ0NWE0MDQuLmFjZDA1ZDAgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkKKysrIGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fYmFzZS5weQpAQCAtMjAwLDggKzIwMCw3IEBACiAgICAgICAgIHdhaXRlciA9IF9jcmVhdGVfYW5kX2luc3RhbGxfd2FpdGVycyhmcywgX0FTX0NPTVBMRVRFRCkKIAogICAgIHRyeToKLSAgICAgICAgZm9yIGZ1dHVyZSBpbiBmaW5pc2hlZDoKLSAgICAgICAgICAgIHlpZWxkIGZ1dHVyZQorICAgICAgICB5aWVsZCBmcm9tIGZpbmlzaGVkCiAKICAgICAgICAgd2hpbGUgcGVuZGluZzoKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKQEAgLTIyNiw3ICsyMjUsOCBAQAogCiAgICAgZmluYWxseToKICAgICAgICAgZm9yIGYgaW4gZnM6Ci0gICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCisgICAgICAgICAgICB3aXRoIGYuX2NvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCiAKIERvbmVBbmROb3REb25lRnV0dXJlcyA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoCiAgICAgICAgICdEb25lQW5kTm90RG9uZUZ1dHVyZXMnLCAnZG9uZSBub3RfZG9uZScpCkBAIC0yNzMsNyArMjczLDggQEAKIAogICAgIHdhaXRlci5ldmVudC53YWl0KHRpbWVvdXQpCiAgICAgZm9yIGYgaW4gZnM6Ci0gICAgICAgIGYuX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKKyAgICAgICAgd2l0aCBmLl9jb25kaXRpb246CisgICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCiAKICAgICBkb25lLnVwZGF0ZSh3YWl0ZXIuZmluaXNoZWRfZnV0dXJlcykKICAgICByZXR1cm4gRG9uZUFuZE5vdERvbmVGdXR1cmVzKGRvbmUsIHNldChmcykgLSBkb25lKQpkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5IGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5CmluZGV4IGFkZjJhYjQuLjA3YjUyMjUgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3Byb2Nlc3MucHkKQEAgLTQwLDcgKzQwLDcgQEAKIAogUHJvY2VzcyAjMS4ubjoKIC0gcmVhZHMgX0NhbGxJdGVtcyBmcm9tICJDYWxsIFEiLCBleGVjdXRlcyB0aGUgY2FsbHMsIGFuZCBwdXRzIHRoZSByZXN1bHRpbmcKLSAgX1Jlc3VsdEl0ZW1zIGluICJSZXF1ZXN0IFEiCisgIF9SZXN1bHRJdGVtcyBpbiAiUmVzdWx0IFEiCiAiIiIKIAogX19hdXRob3JfXyA9ICdCcmlhbiBRdWlubGFuIChicmlhbkBzd2VldGFwcC5jb20pJwpAQCAtNDksOCArNDksOSBAQAogaW1wb3J0IG9zCiBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgX2Jhc2UKIGltcG9ydCBxdWV1ZQorZnJvbSBxdWV1ZSBpbXBvcnQgRnVsbAogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZSwgRnVsbAorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNpbXBsZVF1ZXVlCiBmcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCB3YWl0CiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgd2Vha3JlZgpAQCAtMjQwLDYgKzI0MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAidGVybWluYXRlZCBhYnJ1cHRseSB3aGlsZSB0aGUgZnV0dXJlIHdhcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicnVubmluZyBvciBwZW5kaW5nLiIKICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICBwZW5kaW5nX3dvcmtfaXRlbXMuY2xlYXIoKQogICAgICAgICAgICAgIyBUZXJtaW5hdGUgcmVtYWluaW5nIHdvcmtlcnMgZm9yY2libHk6IHRoZSBxdWV1ZXMgb3IgdGhlaXIKICAgICAgICAgICAgICMgbG9ja3MgbWF5IGJlIGluIGEgZGlydHkgc3RhdGUgYW5kIGJsb2NrIGZvcmV2ZXIuCkBAIC0yNjQsNiArMjY3LDggQEAKICAgICAgICAgICAgICAgICAgICAgd29ya19pdGVtLmZ1dHVyZS5zZXRfZXhjZXB0aW9uKHJlc3VsdF9pdGVtLmV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0uZnV0dXJlLnNldF9yZXN1bHQocmVzdWx0X2l0ZW0ucmVzdWx0KQorICAgICAgICAgICAgICAgICMgRGVsZXRlIHJlZmVyZW5jZXMgdG8gb2JqZWN0LiBTZWUgaXNzdWUxNjI4NAorICAgICAgICAgICAgICAgIGRlbCB3b3JrX2l0ZW0KICAgICAgICAgIyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBzdGFydCBzaHV0dGluZyBkb3duLgogICAgICAgICBleGVjdXRvciA9IGV4ZWN1dG9yX3JlZmVyZW5jZSgpCiAgICAgICAgICMgTm8gbW9yZSB3b3JrIGl0ZW1zIGNhbiBiZSBhZGRlZCBpZjoKQEAgLTMyNyw3ICszMzIsNyBAQAogICAgICAgICBfY2hlY2tfc3lzdGVtX2xpbWl0cygpCiAKICAgICAgICAgaWYgbWF4X3dvcmtlcnMgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisgICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG9zLmNwdV9jb3VudCgpIG9yIDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbWF4X3dvcmtlcnMKIApkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQppbmRleCA5NWJiNjgyLi5mOWJlYjBmIDEwMDY0NAotLS0gYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQpAQCAtNjMsNiArNjMsOCBAQAogICAgICAgICAgICAgd29ya19pdGVtID0gd29ya19xdWV1ZS5nZXQoYmxvY2s9VHJ1ZSkKICAgICAgICAgICAgIGlmIHdvcmtfaXRlbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0ucnVuKCkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGV4ZWN1dG9yID0gZXhlY3V0b3JfcmVmZXJlbmNlKCkKICAgICAgICAgICAgICMgRXhpdCBpZjoKZGlmZiAtLWdpdCBhL0xpYi9jb25maWdwYXJzZXIucHkgYi9MaWIvY29uZmlncGFyc2VyLnB5CmluZGV4IGFlYmY4YTAuLjRlZTgzMDcgMTAwNjQ0Ci0tLSBhL0xpYi9jb25maWdwYXJzZXIucHkKKysrIGIvTGliL2NvbmZpZ3BhcnNlci5weQpAQCAtNjcwLDcgKzY3MCw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQoZnAsIGZpbGVuYW1lKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcmVhZF9vay5hcHBlbmQoZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiByZWFkX29rCmRpZmYgLS1naXQgYS9MaWIvY29udGV4dGxpYi5weSBiL0xpYi9jb250ZXh0bGliLnB5CmluZGV4IGIwM2Y4MjguLjgyZWU5NTUgMTAwNjQ0Ci0tLSBhL0xpYi9jb250ZXh0bGliLnB5CisrKyBiL0xpYi9jb250ZXh0bGliLnB5CkBAIC00LDcgKzQsOCBAQAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKIGZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwogCi1fX2FsbF9fID0gWyJjb250ZXh0bWFuYWdlciIsICJjbG9zaW5nIiwgIkNvbnRleHREZWNvcmF0b3IiLCAiRXhpdFN0YWNrIl0KK19fYWxsX18gPSBbImNvbnRleHRtYW5hZ2VyIiwgImNsb3NpbmciLCAiQ29udGV4dERlY29yYXRvciIsICJFeGl0U3RhY2siLAorICAgICAgICAgICAicmVkaXJlY3Rfc3Rkb3V0IiwgInN1cHByZXNzIl0KIAogCiBjbGFzcyBDb250ZXh0RGVjb3JhdG9yKG9iamVjdCk6CkBAIC0zNiw2ICszNywxNiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCAqYXJncywgKiprd2RzKToKICAgICAgICAgc2VsZi5nZW4gPSBmdW5jKCphcmdzLCAqKmt3ZHMpCiAgICAgICAgIHNlbGYuZnVuYywgc2VsZi5hcmdzLCBzZWxmLmt3ZHMgPSBmdW5jLCBhcmdzLCBrd2RzCisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGRvYyA9IGdldGF0dHIoZnVuYywgIl9fZG9jX18iLCBOb25lKQorICAgICAgICBpZiBkb2MgaXMgTm9uZToKKyAgICAgICAgICAgIGRvYyA9IHR5cGUoc2VsZikuX19kb2NfXworICAgICAgICBzZWxmLl9fZG9jX18gPSBkb2MKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCB0aGlzIHN0aWxsIGRvZXNuJ3QgcHJvdmlkZSBnb29kIGhlbHAgb3V0cHV0IHdoZW4KKyAgICAgICAgIyBpbnNwZWN0aW5nIHRoZSBjcmVhdGVkIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMsIHNpbmNlIHB5ZG9jCisgICAgICAgICMgY3VycmVudGx5IGJ5cGFzc2VzIHRoZSBpbnN0YW5jZSBkb2NzdHJpbmcgYW5kIHNob3dzIHRoZSBkb2NzdHJpbmcKKyAgICAgICAgIyBmb3IgdGhlIGNsYXNzIGluc3RlYWQuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTQwNCBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICAgZGVmIF9yZWNyZWF0ZV9jbShzZWxmKToKICAgICAgICAgIyBfR0NNIGluc3RhbmNlcyBhcmUgb25lLXNob3QgY29udGV4dCBtYW5hZ2Vycywgc28gdGhlCkBAIC00Nyw3ICs1OCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBuZXh0KHNlbGYuZ2VuKQogICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiZ2VuZXJhdG9yIGRpZG4ndCB5aWVsZCIpCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImdlbmVyYXRvciBkaWRuJ3QgeWllbGQiKSBmcm9tIE5vbmUKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKICAgICAgICAgaWYgdHlwZSBpcyBOb25lOgpAQCAtMTQwLDYgKzE1MSw2MiBAQAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgogICAgICAgICBzZWxmLnRoaW5nLmNsb3NlKCkKIAorY2xhc3MgcmVkaXJlY3Rfc3Rkb3V0OgorICAgICIiIkNvbnRleHQgbWFuYWdlciBmb3IgdGVtcG9yYXJpbHkgcmVkaXJlY3Rpbmcgc3Rkb3V0IHRvIGFub3RoZXIgZmlsZQorCisgICAgICAgICMgSG93IHRvIHNlbmQgaGVscCgpIHRvIHN0ZGVycgorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChzeXMuc3RkZXJyKToKKyAgICAgICAgICAgIGhlbHAoZGlyKQorCisgICAgICAgICMgSG93IHRvIHdyaXRlIGhlbHAoKSB0byBhIGZpbGUKKyAgICAgICAgd2l0aCBvcGVuKCdoZWxwLnR4dCcsICd3JykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpOgorICAgICAgICAgICAgICAgIGhlbHAocG93KQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5ld190YXJnZXQpOgorICAgICAgICBzZWxmLl9uZXdfdGFyZ2V0ID0gbmV3X3RhcmdldAorICAgICAgICAjIFdlIHVzZSBhIGxpc3Qgb2Ygb2xkIHRhcmdldHMgdG8gbWFrZSB0aGlzIENNIHJlLWVudHJhbnQKKyAgICAgICAgc2VsZi5fb2xkX3RhcmdldHMgPSBbXQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fb2xkX3RhcmdldHMuYXBwZW5kKHN5cy5zdGRvdXQpCisgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9uZXdfdGFyZ2V0CisgICAgICAgIHJldHVybiBzZWxmLl9uZXdfdGFyZ2V0CisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjdHlwZSwgZXhjaW5zdCwgZXhjdGIpOgorICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5fb2xkX3RhcmdldHMucG9wKCkKKworCitjbGFzcyBzdXBwcmVzczoKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gc3VwcHJlc3Mgc3BlY2lmaWVkIGV4Y2VwdGlvbnMKKworICAgIEFmdGVyIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgZXhlY3V0aW9uIHByb2NlZWRzIHdpdGggdGhlIG5leHQKKyAgICBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSB3aXRoIHN0YXRlbWVudC4KKworICAgICAgICAgd2l0aCBzdXBwcmVzcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICAgb3MucmVtb3ZlKHNvbWVmaWxlKQorICAgICAgICAgIyBFeGVjdXRpb24gc3RpbGwgcmVzdW1lcyBoZXJlIGlmIHRoZSBmaWxlIHdhcyBhbHJlYWR5IHJlbW92ZWQKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqZXhjZXB0aW9ucyk6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbnMgPSBleGNlcHRpb25zCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjdHlwZSwgZXhjaW5zdCwgZXhjdGIpOgorICAgICAgICAjIFVubGlrZSBpc2luc3RhbmNlIGFuZCBpc3N1YmNsYXNzLCBDUHl0aG9uIGV4Y2VwdGlvbiBoYW5kbGluZworICAgICAgICAjIGN1cnJlbnRseSBvbmx5IGxvb2tzIGF0IHRoZSBjb25jcmV0ZSB0eXBlIGhpZXJhcmNoeSAoaWdub3JpbmcKKyAgICAgICAgIyB0aGUgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNraW5nIGhvb2tzKS4gV2hpbGUgR3VpZG8gY29uc2lkZXJzCisgICAgICAgICMgdGhhdCBhIGJ1ZyByYXRoZXIgdGhhbiBhIGZlYXR1cmUsIGl0J3MgYSBmYWlybHkgaGFyZCBvbmUgdG8gZml4CisgICAgICAgICMgZHVlIHRvIHZhcmlvdXMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gc3VwcHJlc3MgcHJvdmlkZXMKKyAgICAgICAgIyB0aGUgc2ltcGxlciBpc3N1YmNsYXNzIGJhc2VkIHNlbWFudGljcywgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisgICAgICAgICMgZXhhY3RseSByZXByb2R1Y2UgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBDUHl0aG9uIGludGVycHJldGVyLgorICAgICAgICAjCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMjAyOSBmb3IgbW9yZSBkZXRhaWxzCisgICAgICAgIHJldHVybiBleGN0eXBlIGlzIG5vdCBOb25lIGFuZCBpc3N1YmNsYXNzKGV4Y3R5cGUsIHNlbGYuX2V4Y2VwdGlvbnMpCisKIAogIyBJbnNwaXJlZCBieSBkaXNjdXNzaW9ucyBvbiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTM1ODUKIGNsYXNzIEV4aXRTdGFjayhvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL2NvcHlyZWcucHkgYi9MaWIvY29weXJlZy5weQppbmRleCA2NmMwZjhhLi42N2Y1YmIwIDEwMDY0NAotLS0gYS9MaWIvY29weXJlZy5weQorKysgYi9MaWIvY29weXJlZy5weQpAQCAtODcsNiArODcsMTIgQEAKIGRlZiBfX25ld29ial9fKGNscywgKmFyZ3MpOgogICAgIHJldHVybiBjbHMuX19uZXdfXyhjbHMsICphcmdzKQogCitkZWYgX19uZXdvYmpfZXhfXyhjbHMsIGFyZ3MsIGt3YXJncyk6CisgICAgIiIiVXNlZCBieSBwaWNrbGUgcHJvdG9jb2wgNCwgaW5zdGVhZCBvZiBfX25ld29ial9fIHRvIGFsbG93IGNsYXNzZXMgd2l0aAorICAgIGtleXdvcmQtb25seSBhcmd1bWVudHMgdG8gYmUgcGlja2xlZCBjb3JyZWN0bHkuCisgICAgIiIiCisgICAgcmV0dXJuIGNscy5fX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKQorCiBkZWYgX3Nsb3RuYW1lcyhjbHMpOgogICAgICIiIlJldHVybiBhIGxpc3Qgb2Ygc2xvdCBuYW1lcyBmb3IgYSBnaXZlbiBjbGFzcy4KIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy9fX2luaXRfXy5weSBiL0xpYi9jdHlwZXMvX19pbml0X18ucHkKaW5kZXggYzkyZTEzMC4uZTM0YzY0NiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL19faW5pdF9fLnB5CkBAIC0zNCwxNyArMzQsMTUgQEAKICAgICAgRlVOQ0ZMQUdfVVNFX0VSUk5PIGFzIF9GVU5DRkxBR19VU0VfRVJSTk8sIFwKICAgICAgRlVOQ0ZMQUdfVVNFX0xBU1RFUlJPUiBhcyBfRlVOQ0ZMQUdfVVNFX0xBU1RFUlJPUgogCi0iIiIKLVdJTk9MRUFQSSAtPiBIUkVTVUxUCi1XSU5PTEVBUElfKHR5cGUpCi0KLVNURE1FVEhPRENBTExUWVBFCi0KLVNURE1FVEhPRChuYW1lKQotU1RETUVUSE9EXyh0eXBlLCBuYW1lKQotCi1TVERBUElDQUxMVFlQRQotIiIiCisjIFdJTk9MRUFQSSAtPiBIUkVTVUxUCisjIFdJTk9MRUFQSV8odHlwZSkKKyMKKyMgU1RETUVUSE9EQ0FMTFRZUEUKKyMKKyMgU1RETUVUSE9EKG5hbWUpCisjIFNURE1FVEhPRF8odHlwZSwgbmFtZSkKKyMKKyMgU1REQVBJQ0FMTFRZUEUKIAogZGVmIGNyZWF0ZV9zdHJpbmdfYnVmZmVyKGluaXQsIHNpemU9Tm9uZSk6CiAgICAgIiIiY3JlYXRlX3N0cmluZ19idWZmZXIoYUJ5dGVzKSAtPiBjaGFyYWN0ZXIgYXJyYXkKQEAgLTM5NSw3ICszOTMsNyBAQAogICAgICAgICBfdHlwZV8gPSAibCIKICAgICAgICAgIyBfY2hlY2tfcmV0dmFsXyBpcyBjYWxsZWQgd2l0aCB0aGUgZnVuY3Rpb24ncyByZXN1bHQgd2hlbiBpdAogICAgICAgICAjIGlzIHVzZWQgYXMgcmVzdHlwZS4gIEl0IGNoZWNrcyBmb3IgdGhlIEZBSUxFRCBiaXQsIGFuZAotICAgICAgICAjIHJhaXNlcyBhIFdpbmRvd3NFcnJvciBpZiBpdCBpcyBzZXQuCisgICAgICAgICMgcmFpc2VzIGFuIE9TRXJyb3IgaWYgaXQgaXMgc2V0LgogICAgICAgICAjCiAgICAgICAgICMgVGhlIF9jaGVja19yZXR2YWxfIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBpbiBDLCBzbyB0aGF0IHRoZQogICAgICAgICAjIG1ldGhvZCBkZWZpbml0aW9uIGl0c2VsZiBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHRyYWNlYmFjawpAQCAtNDA3LDcgKzQwNSw3IEBACiAgICAgY2xhc3MgT2xlRExMKENETEwpOgogICAgICAgICAiIiJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBkbGwgZXhwb3J0aW5nIGZ1bmN0aW9ucyB1c2luZyB0aGUKICAgICAgICAgV2luZG93cyBzdGRjYWxsIGNhbGxpbmcgY29udmVudGlvbiwgYW5kIHJldHVybmluZyBIUkVTVUxULgotICAgICAgICBIUkVTVUxUIGVycm9yIHZhbHVlcyBhcmUgYXV0b21hdGljYWxseSByYWlzZWQgYXMgV2luZG93c0Vycm9yCisgICAgICAgIEhSRVNVTFQgZXJyb3IgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IHJhaXNlZCBhcyBPU0Vycm9yCiAgICAgICAgIGV4Y2VwdGlvbnMuCiAgICAgICAgICIiIgogICAgICAgICBfZnVuY19mbGFnc18gPSBfRlVOQ0ZMQUdfU1REQ0FMTApAQCAtNDU2LDcgKzQ1NCw3IEBACiAgICAgICAgICAgICBjb2RlID0gR2V0TGFzdEVycm9yKCkKICAgICAgICAgaWYgZGVzY3IgaXMgTm9uZToKICAgICAgICAgICAgIGRlc2NyID0gRm9ybWF0RXJyb3IoY29kZSkuc3RyaXAoKQotICAgICAgICByZXR1cm4gV2luZG93c0Vycm9yKE5vbmUsIGRlc2NyLCBOb25lLCBjb2RlKQorICAgICAgICByZXR1cm4gT1NFcnJvcihOb25lLCBkZXNjciwgTm9uZSwgY29kZSkKIAogaWYgc2l6ZW9mKGNfdWludCkgPT0gc2l6ZW9mKGNfdm9pZF9wKToKICAgICBjX3NpemVfdCA9IGNfdWludApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5IGIvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5CmluZGV4IGNjNWZlMDIuLjdjNzIyMTAgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKQEAgLTM3LDcgKzM3LDcgQEAKIAogZGVmIGZpbmRfcGFja2FnZV9tb2R1bGVzKHBhY2thZ2UsIG1hc2spOgogICAgIGltcG9ydCBmbm1hdGNoCi0gICAgaWYgKGhhc2F0dHIocGFja2FnZSwgIl9fbG9hZGVyX18iKSBhbmQKKyAgICBpZiAocGFja2FnZS5fX2xvYWRlcl9fIGlzIG5vdCBOb25lIGFuZAogICAgICAgICAgICAgaGFzYXR0cihwYWNrYWdlLl9fbG9hZGVyX18sICdfZmlsZXMnKSk6CiAgICAgICAgIHBhdGggPSBwYWNrYWdlLl9fbmFtZV9fLnJlcGxhY2UoIi4iLCBvcy5wYXRoLnNlcCkKICAgICAgICAgbWFzayA9IG9zLnBhdGguam9pbihwYXRoLCBtYXNrKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQppbmRleCAwMWNjYzU3Li4xOWJiODEzIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICBwYXNzCiAgICAgZWxzZToKICAgICAgICAgZGVmIHRlc3Rfb2xlZGxsKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGVkbGwub2xlYXV0MzIuQ3JlYXRlVHlwZUxpYjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTm9uZSwgTm9uZSkKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5CmluZGV4IGNiZjJlMDUuLjI3MWUzZjUgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKQEAgLTUsMTcgKzUsMTQgQEAKIAogIyBYWFggVGhpcyB0ZXN0IG11c3QgYmUgcmV2aWV3ZWQgZm9yIGNvcnJlY3RuZXNzISEhCiAKLSIiIgotY3R5cGVzJyB0eXBlcyBhcmUgY29udGFpbmVyIHR5cGVzLgotCi1UaGV5IGhhdmUgYW4gaW50ZXJuYWwgbWVtb3J5IGJsb2NrLCB3aGljaCBvbmx5IGNvbnNpc3RzIG9mIHNvbWUgYnl0ZXMsCi1idXQgaXQgaGFzIHRvIGtlZXAgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGFzIHdlbGwuIFRoaXMgaXMgbm90Ci1yZWFsbHkgbmVlZGVkIGZvciB0cml2aWFsIEMgdHlwZXMgbGlrZSBpbnQgb3IgY2hhciwgYnV0IGl0IGlzIGltcG9ydGFudAotZm9yIGFnZ3JlZ2F0ZSB0eXBlcyBsaWtlIHN0cmluZ3Mgb3IgcG9pbnRlcnMgaW4gcGFydGljdWxhci4KLQotV2hhdCBhYm91dCBwb2ludGVycz8KLQotIiIiCisjIGN0eXBlcycgdHlwZXMgYXJlIGNvbnRhaW5lciB0eXBlcy4KKyMKKyMgVGhleSBoYXZlIGFuIGludGVybmFsIG1lbW9yeSBibG9jaywgd2hpY2ggb25seSBjb25zaXN0cyBvZiBzb21lIGJ5dGVzLAorIyBidXQgaXQgaGFzIHRvIGtlZXAgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGFzIHdlbGwuIFRoaXMgaXMgbm90CisjIHJlYWxseSBuZWVkZWQgZm9yIHRyaXZpYWwgQyB0eXBlcyBsaWtlIGludCBvciBjaGFyLCBidXQgaXQgaXMgaW1wb3J0YW50CisjIGZvciBhZ2dyZWdhdGUgdHlwZXMgbGlrZSBzdHJpbmdzIG9yIHBvaW50ZXJzIGluIHBhcnRpY3VsYXIuCisjCisjIFdoYXQgYWJvdXQgcG9pbnRlcnM/CiAKIGNsYXNzIE9iamVjdHNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGFzc2VydFNhbWUoc2VsZiwgYSwgYik6CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5CmluZGV4IGVkYTg0NmQuLmZkMjY4MzcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5CkBAIC0zLDM1ICszLDMzIEBACiBpbXBvcnQgdW5pdHRlc3QKIAogIyBCb2IgSXBwb2xpdG86Ci0iIiIKLU9rLi4gdGhlIGNvZGUgdG8gZmluZCB0aGUgZmlsZW5hbWUgZm9yIF9fZ2V0YXR0cl9fIHNob3VsZCBsb29rCi1zb21ldGhpbmcgbGlrZToKLQotaW1wb3J0IG9zCi1mcm9tIG1hY2hvbGliLmR5bGQgaW1wb3J0IGR5bGRfZmluZAotCi1kZWYgZmluZF9saWIobmFtZSk6Ci0gICAgIHBvc3NpYmxlID0gWydsaWInK25hbWUrJy5keWxpYicsIG5hbWUrJy5keWxpYicsCi0gICAgIG5hbWUrJy5mcmFtZXdvcmsvJytuYW1lXQotICAgICBmb3IgZHlsaWIgaW4gcG9zc2libGU6Ci0gICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgoZHlsZF9maW5kKGR5bGliKSkKLSAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgIHBhc3MKLSAgICAgcmFpc2UgVmFsdWVFcnJvciwgIiVzIG5vdCBmb3VuZCIgJSAobmFtZSwpCi0KLUl0J2xsIGhhdmUgb3V0cHV0IGxpa2UgdGhpczoKLQotID4+PiBmaW5kX2xpYigncHRocmVhZCcpCi0nL3Vzci9saWIvbGliU3lzdGVtLkIuZHlsaWInCi0gPj4+IGZpbmRfbGliKCd6JykKLScvdXNyL2xpYi9saWJ6LjEuZHlsaWInCi0gPj4+IGZpbmRfbGliKCdJT0tpdCcpCi0nL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSU9LaXQnCi0KLS1ib2IKLQotIiIiCisjCisjIE9rLi4gdGhlIGNvZGUgdG8gZmluZCB0aGUgZmlsZW5hbWUgZm9yIF9fZ2V0YXR0cl9fIHNob3VsZCBsb29rCisjIHNvbWV0aGluZyBsaWtlOgorIworIyBpbXBvcnQgb3MKKyMgZnJvbSBtYWNob2xpYi5keWxkIGltcG9ydCBkeWxkX2ZpbmQKKyMKKyMgZGVmIGZpbmRfbGliKG5hbWUpOgorIyAgICAgIHBvc3NpYmxlID0gWydsaWInK25hbWUrJy5keWxpYicsIG5hbWUrJy5keWxpYicsCisjICAgICAgbmFtZSsnLmZyYW1ld29yay8nK25hbWVdCisjICAgICAgZm9yIGR5bGliIGluIHBvc3NpYmxlOgorIyAgICAgICAgICB0cnk6CisjICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5yZWFscGF0aChkeWxkX2ZpbmQoZHlsaWIpKQorIyAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyMgICAgICAgICAgICAgIHBhc3MKKyMgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiJXMgbm90IGZvdW5kIiAlIChuYW1lLCkKKyMKKyMgSXQnbGwgaGF2ZSBvdXRwdXQgbGlrZSB0aGlzOgorIworIyAgPj4+IGZpbmRfbGliKCdwdGhyZWFkJykKKyMgJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJworIyAgPj4+IGZpbmRfbGliKCd6JykKKyMgJy91c3IvbGliL2xpYnouMS5keWxpYicKKyMgID4+PiBmaW5kX2xpYignSU9LaXQnKQorIyAnL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSU9LaXQnCisjCisjIC1ib2IKIAogZnJvbSBjdHlwZXMubWFjaG9saWIuZHlsZCBpbXBvcnQgZHlsZF9maW5kCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKaW5kZXggZGEyMTMzNi4uOTFhZDMxNCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgICAgICAjIENhbGwgZnVuY3Rpb25zIHdpdGggaW52YWxpZCBhcmd1bWVudHMsIGFuZCBtYWtlIHN1cmUKICAgICAgICAgICAgICAgICAjIHRoYXQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIHRyYXBwZWQgYW5kIHJhaXNlIGFuCiAgICAgICAgICAgICAgICAgIyBleGNlcHRpb24uCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlQSwgMzIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEsIDMyKQogCiAgICAgICAgIGRlZiB0ZXN0X25vYXJncyhzZWxmKToKICAgICAgICAgICAgICMgVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBvbiB3aW4zMiB4NjQKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdXRpbC5weSBiL0xpYi9jdHlwZXMvdXRpbC5weQppbmRleCAwNTRjNTExLi4wY2YyMDc2IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3V0aWwucHkKKysrIGIvTGliL2N0eXBlcy91dGlsLnB5CkBAIC0xMDIsOSArMTAyLDggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoY2NvdXQpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgcnYgPT0gMTA6CiAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnY2Mgb3IgY2MgY29tbWFuZCBub3QgZm91bmQnKQogICAgICAgICByZXMgPSByZS5zZWFyY2goZXhwciwgdHJhY2UpCkBAIC0xMzMsOCArMTMyLDEwIEBACiAgICAgICAgICAgICBjbWQgPSAnaWYgISB0eXBlIG9iamR1bXAgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIGV4aXQgMTA7IGZpOycgXAogICAgICAgICAgICAgICAgICAgIm9iamR1bXAgLXAgLWogLmR5bmFtaWMgMj4vZGV2L251bGwgIiArIGYKICAgICAgICAgICAgIGYgPSBvcy5wb3BlbihjbWQpCi0gICAgICAgICAgICBkdW1wID0gZi5yZWFkKCkKLSAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZHVtcCA9IGYucmVhZCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCiAgICAgICAgICAgICBpZiBydiA9PSAxMDoKICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdvYmpkdW1wIGNvbW1hbmQgbm90IGZvdW5kJykKICAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChyJ1xzU09OQU1FXHMrKFteXHNdKyknLCBkdW1wKQpAQCAtMTc3LDEwICsxNzgsMTEgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgY21kID0gJ2VudiBMQ19BTEw9QyAvdXNyL2Jpbi9jcmxlIDI+L2Rldi9udWxsJwogCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBvcy5wb3BlbihjbWQpLnJlYWRsaW5lcygpOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RlZmF1bHQgTGlicmFyeSBQYXRoIChFTEYpOicpOgotICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGxpbmUuc3BsaXQoKVs0XQorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3Npbmcob3MucG9wZW4oY21kKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnRGVmYXVsdCBMaWJyYXJ5IFBhdGggKEVMRik6Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGxpbmUuc3BsaXQoKVs0XQogCiAgICAgICAgICAgICBpZiBub3QgcGF0aHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9kYXRldGltZS5weSBiL0xpYi9kYXRldGltZS5weQppbmRleCBkMWYzNTNiLi4xNzg5NzE0IDEwMDY0NAotLS0gYS9MaWIvZGF0ZXRpbWUucHkKKysrIGIvTGliL2RhdGV0aW1lLnB5CkBAIC0yMyw5ICsyMywxMCBAQAogIyBmb3IgYWxsIGNvbXB1dGF0aW9ucy4gIFNlZSB0aGUgYm9vayBmb3IgYWxnb3JpdGhtcyBmb3IgY29udmVydGluZyBiZXR3ZWVuCiAjIHByb2xlcHRpYyBHcmVnb3JpYW4gb3JkaW5hbHMgYW5kIG1hbnkgb3RoZXIgY2FsZW5kYXIgc3lzdGVtcy4KIAotX0RBWVNfSU5fTU9OVEggPSBbTm9uZSwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0KKyMgLTEgaXMgYSBwbGFjZWhvbGRlciBmb3IgaW5kZXhpbmcgcHVycG9zZXMuCitfREFZU19JTl9NT05USCA9IFstMSwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0KIAotX0RBWVNfQkVGT1JFX01PTlRIID0gW05vbmVdCitfREFZU19CRUZPUkVfTU9OVEggPSBbLTFdICMgLTEgaXMgYSBwbGFjZWhvbGRlciBmb3IgaW5kZXhpbmcgcHVycG9zZXMuCiBkYm0gPSAwCiBmb3IgZGltIGluIF9EQVlTX0lOX01PTlRIWzE6XToKICAgICBfREFZU19CRUZPUkVfTU9OVEguYXBwZW5kKGRibSkKQEAgLTE5MTcsMjAzICsxOTE4LDIwMyBAQAogdGltZXpvbmUubWluID0gdGltZXpvbmUuX2NyZWF0ZSh0aW1lem9uZS5fbWlub2Zmc2V0KQogdGltZXpvbmUubWF4ID0gdGltZXpvbmUuX2NyZWF0ZSh0aW1lem9uZS5fbWF4b2Zmc2V0KQogX0VQT0NIID0gZGF0ZXRpbWUoMTk3MCwgMSwgMSwgdHppbmZvPXRpbWV6b25lLnV0YykKLSIiIgotU29tZSB0aW1lIHpvbmUgYWxnZWJyYS4gIEZvciBhIGRhdGV0aW1lIHgsIGxldAotICAgIHgubiA9IHggc3RyaXBwZWQgb2YgaXRzIHRpbWV6b25lIC0tIGl0cyBuYWl2ZSB0aW1lLgotICAgIHgubyA9IHgudXRjb2Zmc2V0KCksIGFuZCBhc3N1bWluZyB0aGF0IGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIG9yCi0gICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICB4LmQgPSB4LmRzdCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgotICAgICAgICAgIHJldHVybiBOb25lCi0gICAgeC5zID0geCdzIHN0YW5kYXJkIG9mZnNldCwgeC5vIC0geC5kCiAKLU5vdyBzb21lIGRlcml2ZWQgcnVsZXMsIHdoZXJlIGsgaXMgYSBkdXJhdGlvbiAodGltZWRlbHRhKS4KKyMgU29tZSB0aW1lIHpvbmUgYWxnZWJyYS4gIEZvciBhIGRhdGV0aW1lIHgsIGxldAorIyAgICAgeC5uID0geCBzdHJpcHBlZCBvZiBpdHMgdGltZXpvbmUgLS0gaXRzIG5haXZlIHRpbWUuCisjICAgICB4Lm8gPSB4LnV0Y29mZnNldCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgorIyAgICAgICAgICAgcmV0dXJuIE5vbmUKKyMgICAgIHguZCA9IHguZHN0KCksIGFuZCBhc3N1bWluZyB0aGF0IGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIG9yCisjICAgICAgICAgICByZXR1cm4gTm9uZQorIyAgICAgeC5zID0geCdzIHN0YW5kYXJkIG9mZnNldCwgeC5vIC0geC5kCisjCisjIE5vdyBzb21lIGRlcml2ZWQgcnVsZXMsIHdoZXJlIGsgaXMgYSBkdXJhdGlvbiAodGltZWRlbHRhKS4KKyMKKyMgMS4geC5vID0geC5zICsgeC5kCisjICAgIFRoaXMgZm9sbG93cyBmcm9tIHRoZSBkZWZpbml0aW9uIG9mIHgucy4KKyMKKyMgMi4gSWYgeCBhbmQgeSBoYXZlIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIsIHgucyA9IHkucy4KKyMgICAgVGhpcyBpcyBhY3R1YWxseSBhIHJlcXVpcmVtZW50LCBhbiBhc3N1bXB0aW9uIHdlIG5lZWQgdG8gbWFrZSBhYm91dAorIyAgICBzYW5lIHR6aW5mbyBjbGFzc2VzLgorIworIyAzLiBUaGUgbmFpdmUgVVRDIHRpbWUgY29ycmVzcG9uZGluZyB0byB4IGlzIHgubiAtIHguby4KKyMgICAgVGhpcyBpcyBhZ2FpbiBhIHJlcXVpcmVtZW50IGZvciBhIHNhbmUgdHppbmZvIGNsYXNzLgorIworIyA0LiAoeCtrKS5zID0geC5zCisjICAgIFRoaXMgZm9sbG93cyBmcm9tICMyLCBhbmQgdGhhdCBkYXRpbWV0aW1ldHordGltZWRlbHRhIHByZXNlcnZlcyB0emluZm8uCisjCisjIDUuICh4K2spLm4gPSB4Lm4gKyBrCisjICAgIEFnYWluIGZvbGxvd3MgZnJvbSBob3cgYXJpdGhtZXRpYyBpcyBkZWZpbmVkLgorIworIyBOb3cgd2UgY2FuIGV4cGxhaW4gdHouZnJvbXV0Yyh4KS4gIExldCdzIGFzc3VtZSBpdCdzIGFuIGludGVyZXN0aW5nIGNhc2UKKyMgKG1lYW5pbmcgdGhhdCB0aGUgdmFyaW91cyB0emluZm8gbWV0aG9kcyBleGlzdCwgYW5kIGRvbid0IGJsb3cgdXAgb3IgcmV0dXJuCisjIE5vbmUgd2hlbiBjYWxsZWQpLgorIworIyBUaGUgZnVuY3Rpb24gd2FudHMgdG8gcmV0dXJuIGEgZGF0ZXRpbWUgeSB3aXRoIHRpbWV6b25lIHR6LCBlcXVpdmFsZW50IHRvIHguCisjIHggaXMgYWxyZWFkeSBpbiBVVEMuCisjCisjIEJ5ICMzLCB3ZSB3YW50CisjCisjICAgICB5Lm4gLSB5Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXQorIworIyBUaGUgYWxnb3JpdGhtIHN0YXJ0cyBieSBhdHRhY2hpbmcgdHogdG8geC5uLCBhbmQgY2FsbGluZyB0aGF0IHkuICBTbworIyB4Lm4gPSB5Lm4gYXQgdGhlIHN0YXJ0LiAgVGhlbiBpdCB3YW50cyB0byBhZGQgYSBkdXJhdGlvbiBrIHRvIHksIHNvIHRoYXQgWzFdCisjIGJlY29tZXMgdHJ1ZTsgaW4gZWZmZWN0LCB3ZSB3YW50IHRvIHNvbHZlIFsyXSBmb3IgazoKKyMKKyMgICAgKHkraykubiAtICh5K2spLm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgWzJdCisjCisjIEJ5ICMxLCB0aGlzIGlzIHRoZSBzYW1lIGFzCisjCisjICAgICh5K2spLm4gLSAoKHkraykucyArICh5K2spLmQpID0geC5uICAgICAgICAgIFszXQorIworIyBCeSAjNSwgKHkraykubiA9IHkubiArIGssIHdoaWNoIGVxdWFscyB4Lm4gKyBrIGJlY2F1c2UgeC5uPXkubiBhdCB0aGUgc3RhcnQuCisjIFN1YnN0aXR1dGluZyB0aGF0IGludG8gWzNdLAorIworIyAgICB4Lm4gKyBrIC0gKHkraykucyAtICh5K2spLmQgPSB4Lm47IHRoZSB4Lm4gdGVybXMgY2FuY2VsLCBsZWF2aW5nCisjICAgIGsgLSAoeStrKS5zIC0gKHkraykuZCA9IDA7IHJlYXJyYW5naW5nLAorIyAgICBrID0gKHkraykucyAtICh5K2spLmQ7IGJ5ICM0LCAoeStrKS5zID09IHkucywgc28KKyMgICAgayA9IHkucyAtICh5K2spLmQKKyMKKyMgT24gdGhlIFJIUywgKHkraykuZCBjYW4ndCBiZSBjb21wdXRlZCBkaXJlY3RseSwgYnV0IHkucyBjYW4gYmUsIGFuZCB3ZQorIyBhcHByb3hpbWF0ZSBrIGJ5IGlnbm9yaW5nIHRoZSAoeStrKS5kIHRlcm0gYXQgZmlyc3QuICBOb3RlIHRoYXQgayBjYW4ndCBiZQorIyB2ZXJ5IGxhcmdlLCBzaW5jZSBhbGwgb2Zmc2V0LXJldHVybmluZyBtZXRob2RzIHJldHVybiBhIGR1cmF0aW9uIG9mIG1hZ25pdHVkZQorIyBsZXNzIHRoYW4gMjQgaG91cnMuICBGb3IgdGhhdCByZWFzb24sIGlmIHkgaXMgZmlybWx5IGluIHN0ZCB0aW1lLCAoeStrKS5kIG11c3QKKyMgYmUgMCwgc28gaWdub3JpbmcgaXQgaGFzIG5vIGNvbnNlcXVlbmNlIHRoZW4uCisjCisjIEluIGFueSBjYXNlLCB0aGUgbmV3IHZhbHVlIGlzCisjCisjICAgICB6ID0geSArIHkucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0XQorIworIyBJdCdzIGhlbHBmdWwgdG8gc3RlcCBiYWNrIGF0IGxvb2sgYXQgWzRdIGZyb20gYSBoaWdoZXIgbGV2ZWw6ICBpdCdzIHNpbXBseQorIyBtYXBwaW5nIGZyb20gVVRDIHRvIHR6J3Mgc3RhbmRhcmQgdGltZS4KKyMKKyMgQXQgdGhpcyBwb2ludCwgaWYKKyMKKyMgICAgIHoubiAtIHoubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzVdCisjCisjIHdlIGhhdmUgYW4gZXF1aXZhbGVudCB0aW1lLCBhbmQgYXJlIGFsbW9zdCBkb25lLiAgVGhlIGluc2VjdXJpdHkgaGVyZSBpcworIyBhdCB0aGUgc3RhcnQgb2YgZGF5bGlnaHQgdGltZS4gIFBpY3R1cmUgVVMgRWFzdGVybiBmb3IgY29uY3JldGVuZXNzLiAgVGhlIHdhbGwKKyMgdGltZSBqdW1wcyBmcm9tIDE6NTkgdG8gMzowMCwgYW5kIHdhbGwgaG91cnMgb2YgdGhlIGZvcm0gMjpNTSBkb24ndCBtYWtlIGdvb2QKKyMgc2Vuc2UgdGhlbi4gIFRoZSBkb2NzIGFzayB0aGF0IGFuIEVhc3Rlcm4gdHppbmZvIGNsYXNzIGNvbnNpZGVyIHN1Y2ggYSB0aW1lIHRvCisjIGJlIEVEVCAoYmVjYXVzZSBpdCdzICJhZnRlciAyIiksIHdoaWNoIGlzIGEgcmVkdW5kYW50IHNwZWxsaW5nIG9mIDE6TU0gRVNUCisjIG9uIHRoZSBkYXkgRFNUIHN0YXJ0cy4gIFdlIHdhbnQgdG8gcmV0dXJuIHRoZSAxOk1NIEVTVCBzcGVsbGluZyBiZWNhdXNlIHRoYXQncworIyB0aGUgb25seSBzcGVsbGluZyB0aGF0IG1ha2VzIHNlbnNlIG9uIHRoZSBsb2NhbCB3YWxsIGNsb2NrLgorIworIyBJbiBmYWN0LCBpZiBbNV0gaG9sZHMgYXQgdGhpcyBwb2ludCwgd2UgZG8gaGF2ZSB0aGUgc3RhbmRhcmQtdGltZSBzcGVsbGluZywKKyMgYnV0IHRoYXQgdGFrZXMgYSBiaXQgb2YgcHJvb2YuICBXZSBmaXJzdCBwcm92ZSBhIHN0cm9uZ2VyIHJlc3VsdC4gIFdoYXQncyB0aGUKKyMgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBMSFMgYW5kIFJIUyBvZiBbNV0/ICBMZXQKKyMKKyMgICAgIGRpZmYgPSB4Lm4gLSAoei5uIC0gei5vKSAgICAgICAgICAgICAgICAgICAgWzZdCisjCisjIE5vdworIyAgICAgei5uID0gICAgICAgICAgICAgICAgICAgICAgIGJ5IFs0XQorIyAgICAgKHkgKyB5LnMpLm4gPSAgICAgICAgICAgICAgIGJ5ICM1CisjICAgICB5Lm4gKyB5LnMgPSAgICAgICAgICAgICAgICAgc2luY2UgeS5uID0geC5uCisjICAgICB4Lm4gKyB5LnMgPSAgICAgICAgICAgICAgICAgc2luY2UgeiBhbmQgeSBhcmUgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LnMgPSB6LnMgYnkgIzIKKyMgICAgIHgubiArIHoucworIworIyBQbHVnZ2luZyB0aGF0IGJhY2sgaW50byBbNl0gZ2l2ZXMKKyMKKyMgICAgIGRpZmYgPQorIyAgICAgeC5uIC0gKCh4Lm4gKyB6LnMpIC0gei5vKSA9ICAgICBleHBhbmRpbmcKKyMgICAgIHgubiAtIHgubiAtIHoucyArIHoubyA9ICAgICAgICAgY2FuY2VsbGluZworIyAgICAgLSB6LnMgKyB6Lm8gPSAgICAgICAgICAgICAgICAgICBieSAjMgorIyAgICAgei5kCisjCisjIFNvIGRpZmYgPSB6LmQuCisjCisjIElmIFs1XSBpcyB0cnVlIG5vdywgZGlmZiA9IDAsIHNvIHouZCA9IDAgdG9vLCBhbmQgd2UgaGF2ZSB0aGUgc3RhbmRhcmQtdGltZQorIyBzcGVsbGluZyB3ZSB3YW50ZWQgaW4gdGhlIGVuZGNhc2UgZGVzY3JpYmVkIGFib3ZlLiAgV2UncmUgZG9uZS4gIENvbnRyYXJpbHksCisjIGlmIHouZCA9IDAsIHRoZW4gd2UgaGF2ZSBhIFVUQyBlcXVpdmFsZW50LCBhbmQgYXJlIGFsc28gZG9uZS4KKyMKKyMgSWYgWzVdIGlzIG5vdCB0cnVlIG5vdywgZGlmZiA9IHouZCAhPSAwLCBhbmQgei5kIGlzIHRoZSBvZmZzZXQgd2UgbmVlZCB0bworIyBhZGQgdG8geiAoaW4gZWZmZWN0LCB6IGlzIGluIHR6J3Mgc3RhbmRhcmQgdGltZSwgYW5kIHdlIG5lZWQgdG8gc2hpZnQgdGhlCisjIGxvY2FsIGNsb2NrIGludG8gdHoncyBkYXlsaWdodCB0aW1lKS4KKyMKKyMgTGV0CisjCisjICAgICB6JyA9IHogKyB6LmQgPSB6ICsgZGlmZiAgICAgICAgICAgICAgICAgICAgIFs3XQorIworIyBhbmQgd2UgY2FuIGFnYWluIGFzayB3aGV0aGVyCisjCisjICAgICB6Jy5uIC0geicubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgIFs4XQorIworIyBJZiBzbywgd2UncmUgZG9uZS4gIElmIG5vdCwgdGhlIHR6aW5mbyBjbGFzcyBpcyBpbnNhbmUsIGFjY29yZGluZyB0byB0aGUKKyMgYXNzdW1wdGlvbnMgd2UndmUgbWFkZS4gIFRoaXMgYWxzbyByZXF1aXJlcyBhIGJpdCBvZiBwcm9vZi4gIEFzIGJlZm9yZSwgbGV0J3MKKyMgY29tcHV0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBMSFMgYW5kIFJIUyBvZiBbOF0gKGFuZCBza2lwcGluZyBzb21lIG9mCisjIHRoZSBqdXN0aWZpY2F0aW9ucyBmb3IgdGhlIGtpbmRzIG9mIHN1YnN0aXR1dGlvbnMgd2UndmUgZG9uZSBzZXZlcmFsIHRpbWVzCisjIGFscmVhZHkpOgorIworIyAgICAgZGlmZicgPSB4Lm4gLSAoeicubiAtIHonLm8pID0gICAgICAgICAgIHJlcGxhY2luZyB6Jy5uIHZpYSBbN10KKyMgICAgICAgICAgICAgeC5uICAtICh6Lm4gKyBkaWZmIC0geicubykgPSAgICByZXBsYWNpbmcgZGlmZiB2aWEgWzZdCisjICAgICAgICAgICAgIHgubiAtICh6Lm4gKyB4Lm4gLSAoei5uIC0gei5vKSAtIHonLm8pID0KKyMgICAgICAgICAgICAgeC5uIC0gei5uIC0geC5uICsgei5uIC0gei5vICsgeicubyA9ICAgIGNhbmNlbCB4Lm4KKyMgICAgICAgICAgICAgLSB6Lm4gKyB6Lm4gLSB6Lm8gKyB6Jy5vID0gICAgICAgICAgICAgIGNhbmNlbCB6Lm4KKyMgICAgICAgICAgICAgLSB6Lm8gKyB6Jy5vID0gICAgICAgICAgICAgICAgICAgICAgIzEgdHdpY2UKKyMgICAgICAgICAgICAgLXoucyAtIHouZCArIHonLnMgKyB6Jy5kID0gICAgICAgICAgeiBhbmQgeicgaGF2ZSBzYW1lIHR6aW5mbworIyAgICAgICAgICAgICB6Jy5kIC0gei5kCisjCisjIFNvIHonIGlzIFVUQy1lcXVpdmFsZW50IHRvIHggaWZmIHonLmQgPSB6LmQgYXQgdGhpcyBwb2ludC4gIElmIHRoZXkgYXJlIGVxdWFsLAorIyB3ZSd2ZSBmb3VuZCB0aGUgVVRDLWVxdWl2YWxlbnQgc28gYXJlIGRvbmUuICBJbiBmYWN0LCB3ZSBzdG9wIHdpdGggWzddIGFuZAorIyByZXR1cm4geicsIG5vdCBib3RoZXJpbmcgdG8gY29tcHV0ZSB6Jy5kLgorIworIyBIb3cgY291bGQgei5kIGFuZCB6J2QgZGlmZmVyPyAgeicgPSB6ICsgei5kIFs3XSwgc28gbWVyZWx5IG1vdmluZyB6JyBieQorIyBhIGRzdCgpIG9mZnNldCwgYW5kIHN0YXJ0aW5nICpmcm9tKiBhIHRpbWUgYWxyZWFkeSBpbiBEU1QgKHdlIGtub3cgei5kICE9IDApLAorIyB3b3VsZCBoYXZlIHRvIGNoYW5nZSB0aGUgcmVzdWx0IGRzdCgpIHJldHVybnM6ICB3ZSBzdGFydCBpbiBEU1QsIGFuZCBtb3ZpbmcKKyMgYSBsaXR0bGUgZnVydGhlciBpbnRvIGl0IHRha2VzIHVzIG91dCBvZiBEU1QuCisjCisjIFRoZXJlIGlzbid0IGEgc2FuZSBjYXNlIHdoZXJlIHRoaXMgY2FuIGhhcHBlbi4gIFRoZSBjbG9zZXN0IGl0IGdldHMgaXMgYXQKKyMgdGhlIGVuZCBvZiBEU1QsIHdoZXJlIHRoZXJlJ3MgYW4gaG91ciBpbiBVVEMgd2l0aCBubyBzcGVsbGluZyBpbiBhIGh5YnJpZAorIyB0emluZm8gY2xhc3MuICBJbiBVUyBFYXN0ZXJuLCB0aGF0J3MgNTpNTSBVVEMgPSAwOk1NIEVTVCA9IDE6TU0gRURULiAgRHVyaW5nCisjIHRoYXQgaG91ciwgb24gYW4gRWFzdGVybiBjbG9jayAxOk1NIGlzIHRha2VuIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgKDY6TU0KKyMgVVRDKSBiZWNhdXNlIHRoZSBkb2NzIGluc2lzdCBvbiB0aGF0LCBidXQgMDpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBkYXlsaWdodAorIyB0aW1lICg0Ok1NIFVUQykuICBUaGVyZSBpcyBubyBsb2NhbCB0aW1lIG1hcHBpbmcgdG8gNTpNTSBVVEMuICBUaGUgbG9jYWwKKyMgY2xvY2sganVtcHMgZnJvbSAxOjU5IGJhY2sgdG8gMTowMCBhZ2FpbiwgYW5kIHJlcGVhdHMgdGhlIDE6TU0gaG91ciBpbgorIyBzdGFuZGFyZCB0aW1lLiAgU2luY2UgdGhhdCdzIHdoYXQgdGhlIGxvY2FsIGNsb2NrICpkb2VzKiwgd2Ugd2FudCB0byBtYXAgYm90aAorIyBVVEMgaG91cnMgNTpNTSBhbmQgNjpNTSB0byAxOk1NIEVhc3Rlcm4uICBUaGUgcmVzdWx0IGlzIGFtYmlndW91cworIyBpbiBsb2NhbCB0aW1lLCBidXQgc28gaXQgZ29lcyAtLSBpdCdzIHRoZSB3YXkgdGhlIGxvY2FsIGNsb2NrIHdvcmtzLgorIworIyBXaGVuIHggPSA1Ok1NIFVUQyBpcyB0aGUgaW5wdXQgdG8gdGhpcyBhbGdvcml0aG0sIHgubz0wLCB5Lm89LTUgYW5kIHkuZD0wLAorIyBzbyB6PTA6TU0uICB6LmQ9NjAgKG1pbnV0ZXMpIHRoZW4sIHNvIFs1XSBkb2Vzbid0IGhvbGQgYW5kIHdlIGtlZXAgZ29pbmcuCisjIHonID0geiArIHouZCA9IDE6TU0gdGhlbiwgYW5kIHonLmQ9MCwgYW5kIHonLmQgLSB6LmQgPSAtNjAgIT0gMCBzbyBbOF0KKyMgKGNvcnJlY3RseSkgY29uY2x1ZGVzIHRoYXQgeicgaXMgbm90IFVUQy1lcXVpdmFsZW50IHRvIHguCisjCisjIEJlY2F1c2Ugd2Uga25vdyB6LmQgc2FpZCB6IHdhcyBpbiBkYXlsaWdodCB0aW1lIChlbHNlIFs1XSB3b3VsZCBoYXZlIGhlbGQgYW5kCisjIHdlIHdvdWxkIGhhdmUgc3RvcHBlZCB0aGVuKSwgYW5kIHdlIGtub3cgei5kICE9IHonLmQgKGVsc2UgWzhdIHdvdWxkIGhhdmUgaGVsZAorIyBhbmQgd2UgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgdGhlcmUgYXJlIG9ubHkgMiBwb3NzaWJsZSB2YWx1ZXMgZHN0KCkgY2FuCisjIHJldHVybiBpbiBFYXN0ZXJuLCBpdCBmb2xsb3dzIHRoYXQgeicuZCBtdXN0IGJlIDAgKHdoaWNoIGl0IGlzIGluIHRoZSBleGFtcGxlLAorIyBidXQgdGhlIHJlYXNvbmluZyBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgZXhhbXBsZSAtLSBpdCBkZXBlbmRzIG9uIHRoZXJlIGJlaW5nCisjIHR3byBwb3NzaWJsZSBkc3QoKSBvdXRjb21lcywgb25lIHplcm8gYW5kIHRoZSBvdGhlciBub24temVybykuICBUaGVyZWZvcmUKKyMgeicgbXVzdCBiZSBpbiBzdGFuZGFyZCB0aW1lLCBhbmQgaXMgdGhlIHNwZWxsaW5nIHdlIHdhbnQgaW4gdGhpcyBjYXNlLgorIworIyBOb3RlIGFnYWluIHRoYXQgeicgaXMgbm90IFVUQy1lcXVpdmFsZW50IGFzIGZhciBhcyB0aGUgaHlicmlkIHR6aW5mbyBjbGFzcyBpcworIyBjb25jZXJuZWQgKGJlY2F1c2UgaXQgdGFrZXMgeicgYXMgYmVpbmcgaW4gc3RhbmRhcmQgdGltZSByYXRoZXIgdGhhbiB0aGUKKyMgZGF5bGlnaHQgdGltZSB3ZSBpbnRlbmQgaGVyZSksIGJ1dCByZXR1cm5pbmcgaXQgZ2l2ZXMgdGhlIHJlYWwtbGlmZSAibG9jYWwKKyMgY2xvY2sgcmVwZWF0cyBhbiBob3VyIiBiZWhhdmlvciB3aGVuIG1hcHBpbmcgdGhlICJ1bnNwZWxsYWJsZSIgVVRDIGhvdXIgaW50bworIyB0ei4KKyMKKyMgV2hlbiB0aGUgaW5wdXQgaXMgNjpNTSwgej0xOk1NIGFuZCB6LmQ9MCwgYW5kIHdlIHN0b3AgYXQgb25jZSwgYWdhaW4gd2l0aAorIyB0aGUgMTpNTSBzdGFuZGFyZCB0aW1lIHNwZWxsaW5nIHdlIHdhbnQuCisjCisjIFNvIGhvdyBjYW4gdGhpcyBicmVhaz8gIE9uZSBvZiB0aGUgYXNzdW1wdGlvbnMgbXVzdCBiZSB2aW9sYXRlZC4gIFR3bworIyBwb3NzaWJpbGl0aWVzOgorIworIyAxKSBbMl0gZWZmZWN0aXZlbHkgc2F5cyB0aGF0IHkucyBpcyBpbnZhcmlhbnQgYWNyb3NzIGFsbCB5IGJlbG9uZyB0byBhIGdpdmVuCisjICAgIHRpbWUgem9uZS4gIFRoaXMgaXNuJ3QgdHJ1ZSBpZiwgZm9yIHBvbGl0aWNhbCByZWFzb25zIG9yIGNvbnRpbmVudGFsIGRyaWZ0LAorIyAgICBhIHJlZ2lvbiBkZWNpZGVzIHRvIGNoYW5nZSBpdHMgYmFzZSBvZmZzZXQgZnJvbSBVVEMuCisjCisjIDIpIFRoZXJlIG1heSBiZSB2ZXJzaW9ucyBvZiAiZG91YmxlIGRheWxpZ2h0IiB0aW1lIHdoZXJlIHRoZSB0YWlsIGVuZCBvZgorIyAgICB0aGUgYW5hbHlzaXMgZ2l2ZXMgdXAgYSBzdGVwIHRvbyBlYXJseS4gIEkgaGF2ZW4ndCB0aG91Z2h0IGFib3V0IHRoYXQKKyMgICAgZW5vdWdoIHRvIHNheS4KKyMKKyMgSW4gYW55IGNhc2UsIGl0J3MgY2xlYXIgdGhhdCB0aGUgZGVmYXVsdCBmcm9tdXRjKCkgaXMgc3Ryb25nIGVub3VnaCB0byBoYW5kbGUKKyMgImFsbW9zdCBhbGwiIHRpbWUgem9uZXM6ICBzbyBsb25nIGFzIHRoZSBzdGFuZGFyZCBvZmZzZXQgaXMgaW52YXJpYW50LCBpdAorIyBkb2Vzbid0IG1hdHRlciBpZiBkYXlsaWdodCB0aW1lIHRyYW5zaXRpb24gcG9pbnRzIGNoYW5nZSBmcm9tIHllYXIgdG8geWVhciwgb3IKKyMgaWYgZGF5bGlnaHQgdGltZSBpcyBza2lwcGVkIGluIHNvbWUgeWVhcnM7IGl0IGRvZXNuJ3QgbWF0dGVyIGhvdyBsYXJnZSBvcgorIyBzbWFsbCBkc3QoKSBtYXkgZ2V0IHdpdGhpbiBpdHMgYm91bmRzOyBhbmQgaXQgZG9lc24ndCBldmVuIG1hdHRlciBpZiBzb21lCisjIHBlcnZlcnNlIHRpbWUgem9uZSByZXR1cm5zIGEgbmVnYXRpdmUgZHN0KCkpLiAgU28gYSBicmVha2luZyBjYXNlIG11c3QgYmUKKyMgcHJldHR5IGJpemFycmUsIGFuZCBhIHR6aW5mbyBzdWJjbGFzcyBjYW4gb3ZlcnJpZGUgZnJvbXV0YygpIGlmIGl0IGlzLgogCi0xLiB4Lm8gPSB4LnMgKyB4LmQKLSAgIFRoaXMgZm9sbG93cyBmcm9tIHRoZSBkZWZpbml0aW9uIG9mIHgucy4KLQotMi4gSWYgeCBhbmQgeSBoYXZlIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIsIHgucyA9IHkucy4KLSAgIFRoaXMgaXMgYWN0dWFsbHkgYSByZXF1aXJlbWVudCwgYW4gYXNzdW1wdGlvbiB3ZSBuZWVkIHRvIG1ha2UgYWJvdXQKLSAgIHNhbmUgdHppbmZvIGNsYXNzZXMuCi0KLTMuIFRoZSBuYWl2ZSBVVEMgdGltZSBjb3JyZXNwb25kaW5nIHRvIHggaXMgeC5uIC0geC5vLgotICAgVGhpcyBpcyBhZ2FpbiBhIHJlcXVpcmVtZW50IGZvciBhIHNhbmUgdHppbmZvIGNsYXNzLgotCi00LiAoeCtrKS5zID0geC5zCi0gICBUaGlzIGZvbGxvd3MgZnJvbSAjMiwgYW5kIHRoYXQgZGF0aW1ldGltZXR6K3RpbWVkZWx0YSBwcmVzZXJ2ZXMgdHppbmZvLgotCi01LiAoeCtrKS5uID0geC5uICsgawotICAgQWdhaW4gZm9sbG93cyBmcm9tIGhvdyBhcml0aG1ldGljIGlzIGRlZmluZWQuCi0KLU5vdyB3ZSBjYW4gZXhwbGFpbiB0ei5mcm9tdXRjKHgpLiAgTGV0J3MgYXNzdW1lIGl0J3MgYW4gaW50ZXJlc3RpbmcgY2FzZQotKG1lYW5pbmcgdGhhdCB0aGUgdmFyaW91cyB0emluZm8gbWV0aG9kcyBleGlzdCwgYW5kIGRvbid0IGJsb3cgdXAgb3IgcmV0dXJuCi1Ob25lIHdoZW4gY2FsbGVkKS4KLQotVGhlIGZ1bmN0aW9uIHdhbnRzIHRvIHJldHVybiBhIGRhdGV0aW1lIHkgd2l0aCB0aW1lem9uZSB0eiwgZXF1aXZhbGVudCB0byB4LgoteCBpcyBhbHJlYWR5IGluIFVUQy4KLQotQnkgIzMsIHdlIHdhbnQKLQotICAgIHkubiAtIHkubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdCi0KLVRoZSBhbGdvcml0aG0gc3RhcnRzIGJ5IGF0dGFjaGluZyB0eiB0byB4Lm4sIGFuZCBjYWxsaW5nIHRoYXQgeS4gIFNvCi14Lm4gPSB5Lm4gYXQgdGhlIHN0YXJ0LiAgVGhlbiBpdCB3YW50cyB0byBhZGQgYSBkdXJhdGlvbiBrIHRvIHksIHNvIHRoYXQgWzFdCi1iZWNvbWVzIHRydWU7IGluIGVmZmVjdCwgd2Ugd2FudCB0byBzb2x2ZSBbMl0gZm9yIGs6Ci0KLSAgICh5K2spLm4gLSAoeStrKS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgIFsyXQotCi1CeSAjMSwgdGhpcyBpcyB0aGUgc2FtZSBhcwotCi0gICAoeStrKS5uIC0gKCh5K2spLnMgKyAoeStrKS5kKSA9IHgubiAgICAgICAgICBbM10KLQotQnkgIzUsICh5K2spLm4gPSB5Lm4gKyBrLCB3aGljaCBlcXVhbHMgeC5uICsgayBiZWNhdXNlIHgubj15Lm4gYXQgdGhlIHN0YXJ0LgotU3Vic3RpdHV0aW5nIHRoYXQgaW50byBbM10sCi0KLSAgIHgubiArIGsgLSAoeStrKS5zIC0gKHkraykuZCA9IHgubjsgdGhlIHgubiB0ZXJtcyBjYW5jZWwsIGxlYXZpbmcKLSAgIGsgLSAoeStrKS5zIC0gKHkraykuZCA9IDA7IHJlYXJyYW5naW5nLAotICAgayA9ICh5K2spLnMgLSAoeStrKS5kOyBieSAjNCwgKHkraykucyA9PSB5LnMsIHNvCi0gICBrID0geS5zIC0gKHkraykuZAotCi1PbiB0aGUgUkhTLCAoeStrKS5kIGNhbid0IGJlIGNvbXB1dGVkIGRpcmVjdGx5LCBidXQgeS5zIGNhbiBiZSwgYW5kIHdlCi1hcHByb3hpbWF0ZSBrIGJ5IGlnbm9yaW5nIHRoZSAoeStrKS5kIHRlcm0gYXQgZmlyc3QuICBOb3RlIHRoYXQgayBjYW4ndCBiZQotdmVyeSBsYXJnZSwgc2luY2UgYWxsIG9mZnNldC1yZXR1cm5pbmcgbWV0aG9kcyByZXR1cm4gYSBkdXJhdGlvbiBvZiBtYWduaXR1ZGUKLWxlc3MgdGhhbiAyNCBob3Vycy4gIEZvciB0aGF0IHJlYXNvbiwgaWYgeSBpcyBmaXJtbHkgaW4gc3RkIHRpbWUsICh5K2spLmQgbXVzdAotYmUgMCwgc28gaWdub3JpbmcgaXQgaGFzIG5vIGNvbnNlcXVlbmNlIHRoZW4uCi0KLUluIGFueSBjYXNlLCB0aGUgbmV3IHZhbHVlIGlzCi0KLSAgICB6ID0geSArIHkucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0XQotCi1JdCdzIGhlbHBmdWwgdG8gc3RlcCBiYWNrIGF0IGxvb2sgYXQgWzRdIGZyb20gYSBoaWdoZXIgbGV2ZWw6ICBpdCdzIHNpbXBseQotbWFwcGluZyBmcm9tIFVUQyB0byB0eidzIHN0YW5kYXJkIHRpbWUuCi0KLUF0IHRoaXMgcG9pbnQsIGlmCi0KLSAgICB6Lm4gLSB6Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs1XQotCi13ZSBoYXZlIGFuIGVxdWl2YWxlbnQgdGltZSwgYW5kIGFyZSBhbG1vc3QgZG9uZS4gIFRoZSBpbnNlY3VyaXR5IGhlcmUgaXMKLWF0IHRoZSBzdGFydCBvZiBkYXlsaWdodCB0aW1lLiAgUGljdHVyZSBVUyBFYXN0ZXJuIGZvciBjb25jcmV0ZW5lc3MuICBUaGUgd2FsbAotdGltZSBqdW1wcyBmcm9tIDE6NTkgdG8gMzowMCwgYW5kIHdhbGwgaG91cnMgb2YgdGhlIGZvcm0gMjpNTSBkb24ndCBtYWtlIGdvb2QKLXNlbnNlIHRoZW4uICBUaGUgZG9jcyBhc2sgdGhhdCBhbiBFYXN0ZXJuIHR6aW5mbyBjbGFzcyBjb25zaWRlciBzdWNoIGEgdGltZSB0bwotYmUgRURUIChiZWNhdXNlIGl0J3MgImFmdGVyIDIiKSwgd2hpY2ggaXMgYSByZWR1bmRhbnQgc3BlbGxpbmcgb2YgMTpNTSBFU1QKLW9uIHRoZSBkYXkgRFNUIHN0YXJ0cy4gIFdlIHdhbnQgdG8gcmV0dXJuIHRoZSAxOk1NIEVTVCBzcGVsbGluZyBiZWNhdXNlIHRoYXQncwotdGhlIG9ubHkgc3BlbGxpbmcgdGhhdCBtYWtlcyBzZW5zZSBvbiB0aGUgbG9jYWwgd2FsbCBjbG9jay4KLQotSW4gZmFjdCwgaWYgWzVdIGhvbGRzIGF0IHRoaXMgcG9pbnQsIHdlIGRvIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUgc3BlbGxpbmcsCi1idXQgdGhhdCB0YWtlcyBhIGJpdCBvZiBwcm9vZi4gIFdlIGZpcnN0IHByb3ZlIGEgc3Ryb25nZXIgcmVzdWx0LiAgV2hhdCdzIHRoZQotZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBMSFMgYW5kIFJIUyBvZiBbNV0/ICBMZXQKLQotICAgIGRpZmYgPSB4Lm4gLSAoei5uIC0gei5vKSAgICAgICAgICAgICAgICAgICAgWzZdCi0KLU5vdwotICAgIHoubiA9ICAgICAgICAgICAgICAgICAgICAgICBieSBbNF0KLSAgICAoeSArIHkucykubiA9ICAgICAgICAgICAgICAgYnkgIzUKLSAgICB5Lm4gKyB5LnMgPSAgICAgICAgICAgICAgICAgc2luY2UgeS5uID0geC5uCi0gICAgeC5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHogYW5kIHkgYXJlIGhhdmUgdGhlIHNhbWUgdHppbmZvIG1lbWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkucyA9IHoucyBieSAjMgotICAgIHgubiArIHoucwotCi1QbHVnZ2luZyB0aGF0IGJhY2sgaW50byBbNl0gZ2l2ZXMKLQotICAgIGRpZmYgPQotICAgIHgubiAtICgoeC5uICsgei5zKSAtIHoubykgPSAgICAgZXhwYW5kaW5nCi0gICAgeC5uIC0geC5uIC0gei5zICsgei5vID0gICAgICAgICBjYW5jZWxsaW5nCi0gICAgLSB6LnMgKyB6Lm8gPSAgICAgICAgICAgICAgICAgICBieSAjMgotICAgIHouZAotCi1TbyBkaWZmID0gei5kLgotCi1JZiBbNV0gaXMgdHJ1ZSBub3csIGRpZmYgPSAwLCBzbyB6LmQgPSAwIHRvbywgYW5kIHdlIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUKLXNwZWxsaW5nIHdlIHdhbnRlZCBpbiB0aGUgZW5kY2FzZSBkZXNjcmliZWQgYWJvdmUuICBXZSdyZSBkb25lLiAgQ29udHJhcmlseSwKLWlmIHouZCA9IDAsIHRoZW4gd2UgaGF2ZSBhIFVUQyBlcXVpdmFsZW50LCBhbmQgYXJlIGFsc28gZG9uZS4KLQotSWYgWzVdIGlzIG5vdCB0cnVlIG5vdywgZGlmZiA9IHouZCAhPSAwLCBhbmQgei5kIGlzIHRoZSBvZmZzZXQgd2UgbmVlZCB0bwotYWRkIHRvIHogKGluIGVmZmVjdCwgeiBpcyBpbiB0eidzIHN0YW5kYXJkIHRpbWUsIGFuZCB3ZSBuZWVkIHRvIHNoaWZ0IHRoZQotbG9jYWwgY2xvY2sgaW50byB0eidzIGRheWxpZ2h0IHRpbWUpLgotCi1MZXQKLQotICAgIHonID0geiArIHouZCA9IHogKyBkaWZmICAgICAgICAgICAgICAgICAgICAgWzddCi0KLWFuZCB3ZSBjYW4gYWdhaW4gYXNrIHdoZXRoZXIKLQotICAgIHonLm4gLSB6Jy5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgWzhdCi0KLUlmIHNvLCB3ZSdyZSBkb25lLiAgSWYgbm90LCB0aGUgdHppbmZvIGNsYXNzIGlzIGluc2FuZSwgYWNjb3JkaW5nIHRvIHRoZQotYXNzdW1wdGlvbnMgd2UndmUgbWFkZS4gIFRoaXMgYWxzbyByZXF1aXJlcyBhIGJpdCBvZiBwcm9vZi4gIEFzIGJlZm9yZSwgbGV0J3MKLWNvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzhdIChhbmQgc2tpcHBpbmcgc29tZSBvZgotdGhlIGp1c3RpZmljYXRpb25zIGZvciB0aGUga2luZHMgb2Ygc3Vic3RpdHV0aW9ucyB3ZSd2ZSBkb25lIHNldmVyYWwgdGltZXMKLWFscmVhZHkpOgotCi0gICAgZGlmZicgPSB4Lm4gLSAoeicubiAtIHonLm8pID0gICAgICAgICAgIHJlcGxhY2luZyB6Jy5uIHZpYSBbN10KLSAgICAgICAgICAgIHgubiAgLSAoei5uICsgZGlmZiAtIHonLm8pID0gICAgcmVwbGFjaW5nIGRpZmYgdmlhIFs2XQotICAgICAgICAgICAgeC5uIC0gKHoubiArIHgubiAtICh6Lm4gLSB6Lm8pIC0geicubykgPQotICAgICAgICAgICAgeC5uIC0gei5uIC0geC5uICsgei5uIC0gei5vICsgeicubyA9ICAgIGNhbmNlbCB4Lm4KLSAgICAgICAgICAgIC0gei5uICsgei5uIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICBjYW5jZWwgei5uCi0gICAgICAgICAgICAtIHoubyArIHonLm8gPSAgICAgICAgICAgICAgICAgICAgICAjMSB0d2ljZQotICAgICAgICAgICAgLXoucyAtIHouZCArIHonLnMgKyB6Jy5kID0gICAgICAgICAgeiBhbmQgeicgaGF2ZSBzYW1lIHR6aW5mbwotICAgICAgICAgICAgeicuZCAtIHouZAotCi1TbyB6JyBpcyBVVEMtZXF1aXZhbGVudCB0byB4IGlmZiB6Jy5kID0gei5kIGF0IHRoaXMgcG9pbnQuICBJZiB0aGV5IGFyZSBlcXVhbCwKLXdlJ3ZlIGZvdW5kIHRoZSBVVEMtZXF1aXZhbGVudCBzbyBhcmUgZG9uZS4gIEluIGZhY3QsIHdlIHN0b3Agd2l0aCBbN10gYW5kCi1yZXR1cm4geicsIG5vdCBib3RoZXJpbmcgdG8gY29tcHV0ZSB6Jy5kLgotCi1Ib3cgY291bGQgei5kIGFuZCB6J2QgZGlmZmVyPyAgeicgPSB6ICsgei5kIFs3XSwgc28gbWVyZWx5IG1vdmluZyB6JyBieQotYSBkc3QoKSBvZmZzZXQsIGFuZCBzdGFydGluZyAqZnJvbSogYSB0aW1lIGFscmVhZHkgaW4gRFNUICh3ZSBrbm93IHouZCAhPSAwKSwKLXdvdWxkIGhhdmUgdG8gY2hhbmdlIHRoZSByZXN1bHQgZHN0KCkgcmV0dXJuczogIHdlIHN0YXJ0IGluIERTVCwgYW5kIG1vdmluZwotYSBsaXR0bGUgZnVydGhlciBpbnRvIGl0IHRha2VzIHVzIG91dCBvZiBEU1QuCi0KLVRoZXJlIGlzbid0IGEgc2FuZSBjYXNlIHdoZXJlIHRoaXMgY2FuIGhhcHBlbi4gIFRoZSBjbG9zZXN0IGl0IGdldHMgaXMgYXQKLXRoZSBlbmQgb2YgRFNULCB3aGVyZSB0aGVyZSdzIGFuIGhvdXIgaW4gVVRDIHdpdGggbm8gc3BlbGxpbmcgaW4gYSBoeWJyaWQKLXR6aW5mbyBjbGFzcy4gIEluIFVTIEVhc3Rlcm4sIHRoYXQncyA1Ok1NIFVUQyA9IDA6TU0gRVNUID0gMTpNTSBFRFQuICBEdXJpbmcKLXRoYXQgaG91ciwgb24gYW4gRWFzdGVybiBjbG9jayAxOk1NIGlzIHRha2VuIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgKDY6TU0KLVVUQykgYmVjYXVzZSB0aGUgZG9jcyBpbnNpc3Qgb24gdGhhdCwgYnV0IDA6TU0gaXMgdGFrZW4gYXMgYmVpbmcgaW4gZGF5bGlnaHQKLXRpbWUgKDQ6TU0gVVRDKS4gIFRoZXJlIGlzIG5vIGxvY2FsIHRpbWUgbWFwcGluZyB0byA1Ok1NIFVUQy4gIFRoZSBsb2NhbAotY2xvY2sganVtcHMgZnJvbSAxOjU5IGJhY2sgdG8gMTowMCBhZ2FpbiwgYW5kIHJlcGVhdHMgdGhlIDE6TU0gaG91ciBpbgotc3RhbmRhcmQgdGltZS4gIFNpbmNlIHRoYXQncyB3aGF0IHRoZSBsb2NhbCBjbG9jayAqZG9lcyosIHdlIHdhbnQgdG8gbWFwIGJvdGgKLVVUQyBob3VycyA1Ok1NIGFuZCA2Ok1NIHRvIDE6TU0gRWFzdGVybi4gIFRoZSByZXN1bHQgaXMgYW1iaWd1b3VzCi1pbiBsb2NhbCB0aW1lLCBidXQgc28gaXQgZ29lcyAtLSBpdCdzIHRoZSB3YXkgdGhlIGxvY2FsIGNsb2NrIHdvcmtzLgotCi1XaGVuIHggPSA1Ok1NIFVUQyBpcyB0aGUgaW5wdXQgdG8gdGhpcyBhbGdvcml0aG0sIHgubz0wLCB5Lm89LTUgYW5kIHkuZD0wLAotc28gej0wOk1NLiAgei5kPTYwIChtaW51dGVzKSB0aGVuLCBzbyBbNV0gZG9lc24ndCBob2xkIGFuZCB3ZSBrZWVwIGdvaW5nLgoteicgPSB6ICsgei5kID0gMTpNTSB0aGVuLCBhbmQgeicuZD0wLCBhbmQgeicuZCAtIHouZCA9IC02MCAhPSAwIHNvIFs4XQotKGNvcnJlY3RseSkgY29uY2x1ZGVzIHRoYXQgeicgaXMgbm90IFVUQy1lcXVpdmFsZW50IHRvIHguCi0KLUJlY2F1c2Ugd2Uga25vdyB6LmQgc2FpZCB6IHdhcyBpbiBkYXlsaWdodCB0aW1lIChlbHNlIFs1XSB3b3VsZCBoYXZlIGhlbGQgYW5kCi13ZSB3b3VsZCBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB3ZSBrbm93IHouZCAhPSB6Jy5kIChlbHNlIFs4XSB3b3VsZCBoYXZlIGhlbGQKLWFuZCB3ZSBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB0aGVyZSBhcmUgb25seSAyIHBvc3NpYmxlIHZhbHVlcyBkc3QoKSBjYW4KLXJldHVybiBpbiBFYXN0ZXJuLCBpdCBmb2xsb3dzIHRoYXQgeicuZCBtdXN0IGJlIDAgKHdoaWNoIGl0IGlzIGluIHRoZSBleGFtcGxlLAotYnV0IHRoZSByZWFzb25pbmcgZG9lc24ndCBkZXBlbmQgb24gdGhlIGV4YW1wbGUgLS0gaXQgZGVwZW5kcyBvbiB0aGVyZSBiZWluZwotdHdvIHBvc3NpYmxlIGRzdCgpIG91dGNvbWVzLCBvbmUgemVybyBhbmQgdGhlIG90aGVyIG5vbi16ZXJvKS4gIFRoZXJlZm9yZQoteicgbXVzdCBiZSBpbiBzdGFuZGFyZCB0aW1lLCBhbmQgaXMgdGhlIHNwZWxsaW5nIHdlIHdhbnQgaW4gdGhpcyBjYXNlLgotCi1Ob3RlIGFnYWluIHRoYXQgeicgaXMgbm90IFVUQy1lcXVpdmFsZW50IGFzIGZhciBhcyB0aGUgaHlicmlkIHR6aW5mbyBjbGFzcyBpcwotY29uY2VybmVkIChiZWNhdXNlIGl0IHRha2VzIHonIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgcmF0aGVyIHRoYW4gdGhlCi1kYXlsaWdodCB0aW1lIHdlIGludGVuZCBoZXJlKSwgYnV0IHJldHVybmluZyBpdCBnaXZlcyB0aGUgcmVhbC1saWZlICJsb2NhbAotY2xvY2sgcmVwZWF0cyBhbiBob3VyIiBiZWhhdmlvciB3aGVuIG1hcHBpbmcgdGhlICJ1bnNwZWxsYWJsZSIgVVRDIGhvdXIgaW50bwotdHouCi0KLVdoZW4gdGhlIGlucHV0IGlzIDY6TU0sIHo9MTpNTSBhbmQgei5kPTAsIGFuZCB3ZSBzdG9wIGF0IG9uY2UsIGFnYWluIHdpdGgKLXRoZSAxOk1NIHN0YW5kYXJkIHRpbWUgc3BlbGxpbmcgd2Ugd2FudC4KLQotU28gaG93IGNhbiB0aGlzIGJyZWFrPyAgT25lIG9mIHRoZSBhc3N1bXB0aW9ucyBtdXN0IGJlIHZpb2xhdGVkLiAgVHdvCi1wb3NzaWJpbGl0aWVzOgotCi0xKSBbMl0gZWZmZWN0aXZlbHkgc2F5cyB0aGF0IHkucyBpcyBpbnZhcmlhbnQgYWNyb3NzIGFsbCB5IGJlbG9uZyB0byBhIGdpdmVuCi0gICB0aW1lIHpvbmUuICBUaGlzIGlzbid0IHRydWUgaWYsIGZvciBwb2xpdGljYWwgcmVhc29ucyBvciBjb250aW5lbnRhbCBkcmlmdCwKLSAgIGEgcmVnaW9uIGRlY2lkZXMgdG8gY2hhbmdlIGl0cyBiYXNlIG9mZnNldCBmcm9tIFVUQy4KLQotMikgVGhlcmUgbWF5IGJlIHZlcnNpb25zIG9mICJkb3VibGUgZGF5bGlnaHQiIHRpbWUgd2hlcmUgdGhlIHRhaWwgZW5kIG9mCi0gICB0aGUgYW5hbHlzaXMgZ2l2ZXMgdXAgYSBzdGVwIHRvbyBlYXJseS4gIEkgaGF2ZW4ndCB0aG91Z2h0IGFib3V0IHRoYXQKLSAgIGVub3VnaCB0byBzYXkuCi0KLUluIGFueSBjYXNlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGRlZmF1bHQgZnJvbXV0YygpIGlzIHN0cm9uZyBlbm91Z2ggdG8gaGFuZGxlCi0iYWxtb3N0IGFsbCIgdGltZSB6b25lczogIHNvIGxvbmcgYXMgdGhlIHN0YW5kYXJkIG9mZnNldCBpcyBpbnZhcmlhbnQsIGl0Ci1kb2Vzbid0IG1hdHRlciBpZiBkYXlsaWdodCB0aW1lIHRyYW5zaXRpb24gcG9pbnRzIGNoYW5nZSBmcm9tIHllYXIgdG8geWVhciwgb3IKLWlmIGRheWxpZ2h0IHRpbWUgaXMgc2tpcHBlZCBpbiBzb21lIHllYXJzOyBpdCBkb2Vzbid0IG1hdHRlciBob3cgbGFyZ2Ugb3IKLXNtYWxsIGRzdCgpIG1heSBnZXQgd2l0aGluIGl0cyBib3VuZHM7IGFuZCBpdCBkb2Vzbid0IGV2ZW4gbWF0dGVyIGlmIHNvbWUKLXBlcnZlcnNlIHRpbWUgem9uZSByZXR1cm5zIGEgbmVnYXRpdmUgZHN0KCkpLiAgU28gYSBicmVha2luZyBjYXNlIG11c3QgYmUKLXByZXR0eSBiaXphcnJlLCBhbmQgYSB0emluZm8gc3ViY2xhc3MgY2FuIG92ZXJyaWRlIGZyb211dGMoKSBpZiBpdCBpcy4KLSIiIgogdHJ5OgogICAgIGZyb20gX2RhdGV0aW1lIGltcG9ydCAqCiBleGNlcHQgSW1wb3J0RXJyb3I6CmRpZmYgLS1naXQgYS9MaWIvZGJtL19faW5pdF9fLnB5IGIvTGliL2RibS9fX2luaXRfXy5weQppbmRleCBhNzgzZmRlLi41ZjQ2NjRhIDEwMDY0NAotLS0gYS9MaWIvZGJtL19faW5pdF9fLnB5CisrKyBiL0xpYi9kYm0vX19pbml0X18ucHkKQEAgLTQyLDcgKzQyLDcgQEAKIF9kZWZhdWx0bW9kID0gTm9uZQogX21vZHVsZXMgPSB7fQogCi1lcnJvciA9IChlcnJvciwgSU9FcnJvcikKK2Vycm9yID0gKGVycm9yLCBPU0Vycm9yKQogCiB0cnk6CiAgICAgZnJvbSBkYm0gaW1wb3J0IG5kYm0KQEAgLTExMSwxMiArMTExLDEwIEBACiAgICAgdHJ5OgogICAgICAgICBmID0gaW8ub3BlbihmaWxlbmFtZSArICIucGFnIiwgInJiIikKICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICMgZGJtIGxpbmtlZCB3aXRoIGdkYm0gb24gT1MvMiBkb2Vzbid0IGhhdmUgLmRpciBmaWxlCi0gICAgICAgIGlmIG5vdCAobmRibS5saWJyYXJ5ID09ICJHTlUgZ2RibSIgYW5kIHN5cy5wbGF0Zm9ybSA9PSAib3MyZW14Iik6Ci0gICAgICAgICAgICBmID0gaW8ub3BlbihmaWxlbmFtZSArICIuZGlyIiwgInJiIikKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gaW8ub3BlbihmaWxlbmFtZSArICIuZGlyIiwgInJiIikKKyAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHJldHVybiAiZGJtLm5kYm0iCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgc29tZSBkYm0gZW11bGF0aW9ucyBiYXNlZCBvbiBCZXJrZWxleSBEQiBnZW5lcmF0ZSBhIC5kYiBmaWxlCiAgICAgICAgICMgc29tZSBkbyBub3QsIGJ1dCB0aGV5IHNob3VsZCBiZSBjYXVnaHQgYnkgdGhlIGJzZCBjaGVja3MKICAgICAgICAgdHJ5OgpAQCAtMTI5LDcgKzEyNyw3IEBACiAgICAgICAgICAgICAgICAgZCA9IG5kYm0ub3BlbihmaWxlbmFtZSkKICAgICAgICAgICAgICAgICBkLmNsb3NlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gImRibS5uZGJtIgotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAjIENoZWNrIGZvciBkdW1iZGJtIG5leHQgLS0gdGhpcyBoYXMgYSAuZGlyIGFuZCBhIC5kYXQgZmlsZQpAQCAtMTQ2LDEzICsxNDQsMTMgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gImRibS5kdW1iIgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogCiAgICAgIyBTZWUgaWYgdGhlIGZpbGUgZXhpc3RzLCByZXR1cm4gTm9uZSBpZiBub3QKICAgICB0cnk6CiAgICAgICAgIGYgPSBpby5vcGVuKGZpbGVuYW1lLCAicmIiKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgIyBSZWFkIHRoZSBzdGFydCBvZiB0aGUgZmlsZSAtLSB0aGUgbWFnaWMgbnVtYmVyCmRpZmYgLS1naXQgYS9MaWIvZGJtL2R1bWIucHkgYi9MaWIvZGJtL2R1bWIucHkKaW5kZXggY2ZiOTEyMy4uYmE2YTIwZCAxMDA2NDQKLS0tIGEvTGliL2RibS9kdW1iLnB5CisrKyBiL0xpYi9kYm0vZHVtYi5weQpAQCAtMjksNyArMjksNyBAQAogCiBfQkxPQ0tTSVpFID0gNTEyCiAKLWVycm9yID0gSU9FcnJvcgorZXJyb3IgPSBPU0Vycm9yCiAKIGNsYXNzIF9EYXRhYmFzZShjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CiAKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgIyBNb2QgYnkgSmFjazogY3JlYXRlIGRhdGEgZmlsZSBpZiBuZWVkZWQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyJywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBmID0gX2lvLm9wZW4oc2VsZi5fZGF0ZmlsZSwgJ3cnLCBlbmNvZGluZz0iTGF0aW4tMSIpCiAgICAgICAgICAgICBzZWxmLl9jaG1vZChzZWxmLl9kYXRmaWxlKQogICAgICAgICBmLmNsb3NlKCkKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgc2VsZi5faW5kZXggPSB7fQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gX2lvLm9wZW4oc2VsZi5fZGlyZmlsZSwgJ3InLCBlbmNvZGluZz0iTGF0aW4tMSIpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CkBAIC0xMDAsMTIgKzEwMCwxMiBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX29zLnVubGluayhzZWxmLl9iYWtmaWxlKQotICAgICAgICBleGNlcHQgc2VsZi5fb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX29zLnJlbmFtZShzZWxmLl9kaXJmaWxlLCBzZWxmLl9iYWtmaWxlKQotICAgICAgICBleGNlcHQgc2VsZi5fb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGYgPSBzZWxmLl9pby5vcGVuKHNlbGYuX2RpcmZpbGUsICd3JywgZW5jb2Rpbmc9IkxhdGluLTEiKQpAQCAtMjM2LDYgKzIzNiwxMiBAQAogICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX29zLCAnY2htb2QnKToKICAgICAgICAgICAgIHNlbGYuX29zLmNobW9kKGZpbGUsIHNlbGYuX21vZGUpCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKIAogZGVmIG9wZW4oZmlsZSwgZmxhZz1Ob25lLCBtb2RlPTBvNjY2KToKICAgICAiIiJPcGVuIHRoZSBkYXRhYmFzZSBmaWxlLCBmaWxlbmFtZSwgYW5kIHJldHVybiBjb3JyZXNwb25kaW5nIG9iamVjdC4KZGlmZiAtLWdpdCBhL0xpYi9kZWNpbWFsLnB5IGIvTGliL2RlY2ltYWwucHkKaW5kZXggOWYzN2U0Zi4uN2JjMWM5NCAxMDA2NDQKLS0tIGEvTGliL2RlY2ltYWwucHkKKysrIGIvTGliL2RlY2ltYWwucHkKQEAgLTcwNCw4ICs3MDQsNyBAQAogCiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgJXIgdG8gRGVjaW1hbCIgJSB2YWx1ZSkKIAotICAgICMgQGNsYXNzbWV0aG9kLCBidXQgQGRlY29yYXRvciBpcyBub3QgdmFsaWQgUHl0aG9uIDIuMyBzeW50YXgsIHNvCi0gICAgIyBkb24ndCB1c2UgaXQgKHNlZSBub3RlcyBvbiBQeTIuMyBjb21wYXRpYmlsaXR5IGF0IHRvcCBvZiBmaWxlKQorICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9tX2Zsb2F0KGNscywgZik6CiAgICAgICAgICIiIkNvbnZlcnRzIGEgZmxvYXQgdG8gYSBkZWNpbWFsIG51bWJlciwgZXhhY3RseS4KIApAQCAtNzQ0LDcgKzc0Myw2IEBACiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gY2xzKHJlc3VsdCkKLSAgICBmcm9tX2Zsb2F0ID0gY2xhc3NtZXRob2QoZnJvbV9mbG9hdCkKIAogICAgIGRlZiBfaXNuYW4oc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgbnVtYmVyIGlzIG5vdCBhY3R1YWxseSBvbmUuCmRpZmYgLS1naXQgYS9MaWIvZGlmZmxpYi5weSBiL0xpYi9kaWZmbGliLnB5CmluZGV4IGYwYmZjYzUuLmU4YTM2MjEgMTAwNjQ0Ci0tLSBhL0xpYi9kaWZmbGliLnB5CisrKyBiL0xpYi9kaWZmbGliLnB5CkBAIC0zMzQsMjAgKzMzNCw2IEBACiAgICAgICAgICAgICBmb3IgZWx0IGluIHBvcHVsYXI6ICMgZGl0dG87IGFzIGZhc3QgZm9yIDElIGRlbGV0aW9uCiAgICAgICAgICAgICAgICAgZGVsIGIyaltlbHRdCiAKLSAgICBkZWYgaXNianVuayhzZWxmLCBpdGVtKToKLSAgICAgICAgIkRlcHJlY2F0ZWQ7IHVzZSAnaXRlbSBpbiBTZXF1ZW5jZU1hdGNoZXIoKS5ianVuaycuIgotICAgICAgICB3YXJuaW5ncy53YXJuKCInU2VxdWVuY2VNYXRjaGVyKCkuaXNianVuayhpdGVtKScgaXMgZGVwcmVjYXRlZDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAidXNlICdpdGVtIGluIFNNaW5zdGFuY2UuYmp1bmsnIGluc3RlYWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCi0gICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuYmp1bmsKLQotICAgIGRlZiBpc2Jwb3B1bGFyKHNlbGYsIGl0ZW0pOgotICAgICAgICAiRGVwcmVjYXRlZDsgdXNlICdpdGVtIGluIFNlcXVlbmNlTWF0Y2hlcigpLmJwb3B1bGFyJy4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4oIidTZXF1ZW5jZU1hdGNoZXIoKS5pc2Jwb3B1bGFyKGl0ZW0pJyBpcyBkZXByZWNhdGVkO1xuIgotICAgICAgICAgICAgICAgICAgICAgICJ1c2UgJ2l0ZW0gaW4gU01pbnN0YW5jZS5icG9wdWxhcicgaW5zdGVhZC4iLAotICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICAgICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5icG9wdWxhcgotCiAgICAgZGVmIGZpbmRfbG9uZ2VzdF9tYXRjaChzZWxmLCBhbG8sIGFoaSwgYmxvLCBiaGkpOgogICAgICAgICAiIiJGaW5kIGxvbmdlc3QgbWF0Y2hpbmcgYmxvY2sgaW4gYVthbG86YWhpXSBhbmQgYltibG86YmhpXS4KIApAQCAtOTIwLDggKzkwNiw3IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vua25vd24gdGFnICVyJyAlICh0YWcsKSkKIAotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZzoKLSAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICB5aWVsZCBmcm9tIGcKIAogICAgIGRlZiBfZHVtcChzZWxmLCB0YWcsIHgsIGxvLCBoaSk6CiAgICAgICAgICIiIkdlbmVyYXRlIGNvbXBhcmlzb24gcmVzdWx0cyBmb3IgYSBzYW1lLXRhZ2dlZCByYW5nZS4iIiIKQEAgLTk0MCw4ICs5MjUsNyBAQAogICAgICAgICAgICAgc2Vjb25kID0gc2VsZi5fZHVtcCgnKycsIGIsIGJsbywgYmhpKQogCiAgICAgICAgIGZvciBnIGluIGZpcnN0LCBzZWNvbmQ6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBnOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZwogCiAgICAgZGVmIF9mYW5jeV9yZXBsYWNlKHNlbGYsIGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSk6CiAgICAgICAgIHIiIiIKQEAgLTk5NSw4ICs5NzksNyBAQAogICAgICAgICAgICAgIyBubyBub24taWRlbnRpY2FsICJwcmV0dHkgY2xvc2UiIHBhaXIKICAgICAgICAgICAgIGlmIGVxaSBpcyBOb25lOgogICAgICAgICAgICAgICAgICMgbm8gaWRlbnRpY2FsIHBhaXIgZWl0aGVyIC0tIHRyZWF0IGl0IGFzIGEgc3RyYWlnaHQgcmVwbGFjZQotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX3BsYWluX3JlcGxhY2UoYSwgYWxvLCBhaGksIGIsIGJsbywgYmhpKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fcGxhaW5fcmVwbGFjZShhLCBhbG8sIGFoaSwgYiwgYmxvLCBiaGkpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAjIG5vIGNsb3NlIHBhaXIsIGJ1dCBhbiBpZGVudGljYWwgcGFpciAtLSBzeW5jaCB1cCBvbiB0aGF0CiAgICAgICAgICAgICBiZXN0X2ksIGJlc3RfaiwgYmVzdF9yYXRpbyA9IGVxaSwgZXFqLCAxLjAKQEAgLTEwMDgsOCArOTkxLDcgQEAKICAgICAgICAgIyBpZGVudGljYWwKIAogICAgICAgICAjIHB1bXAgb3V0IGRpZmZzIGZyb20gYmVmb3JlIHRoZSBzeW5jaCBwb2ludAotICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYWxvLCBiZXN0X2ksIGIsIGJsbywgYmVzdF9qKToKLSAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYWxvLCBiZXN0X2ksIGIsIGJsbywgYmVzdF9qKQogCiAgICAgICAgICMgZG8gaW50cmFsaW5lIG1hcmtpbmcgb24gdGhlIHN5bmNoIHBhaXIKICAgICAgICAgYWVsdCwgYmVsdCA9IGFbYmVzdF9pXSwgYltiZXN0X2pdCkBAIC0xMDMxLDE1ICsxMDEzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGJ0YWdzICs9ICcgJyAqIGxiCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5rbm93biB0YWcgJXInICUgKHRhZywpKQotICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fcWZvcm1hdChhZWx0LCBiZWx0LCBhdGFncywgYnRhZ3MpOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fcWZvcm1hdChhZWx0LCBiZWx0LCBhdGFncywgYnRhZ3MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIHRoZSBzeW5jaCBwYWlyIGlzIGlkZW50aWNhbAogICAgICAgICAgICAgeWllbGQgJyAgJyArIGFlbHQKIAogICAgICAgICAjIHB1bXAgb3V0IGRpZmZzIGZyb20gYWZ0ZXIgdGhlIHN5bmNoIHBvaW50Ci0gICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2ZhbmN5X2hlbHBlcihhLCBiZXN0X2krMSwgYWhpLCBiLCBiZXN0X2orMSwgYmhpKToKLSAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYmVzdF9pKzEsIGFoaSwgYiwgYmVzdF9qKzEsIGJoaSkKIAogICAgIGRlZiBfZmFuY3lfaGVscGVyKHNlbGYsIGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSk6CiAgICAgICAgIGcgPSBbXQpAQCAtMTA1MSw4ICsxMDMxLDcgQEAKICAgICAgICAgZWxpZiBibG8gPCBiaGk6CiAgICAgICAgICAgICBnID0gc2VsZi5fZHVtcCgnKycsIGIsIGJsbywgYmhpKQogCi0gICAgICAgIGZvciBsaW5lIGluIGc6Ci0gICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIHlpZWxkIGZyb20gZwogCiAgICAgZGVmIF9xZm9ybWF0KHNlbGYsIGFsaW5lLCBibGluZSwgYXRhZ3MsIGJ0YWdzKToKICAgICAgICAgciIiIgpkaWZmIC0tZ2l0IGEvTGliL2Rpcy5weSBiL0xpYi9kaXMucHkKaW5kZXggNTQzZmRjNy4uODFjYmU3ZiAxMDA2NDQKLS0tIGEvTGliL2Rpcy5weQorKysgYi9MaWIvZGlzLnB5CkBAIC0yLDEyICsyLDE1IEBACiAKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW8KIAogZnJvbSBvcGNvZGUgaW1wb3J0ICoKIGZyb20gb3Bjb2RlIGltcG9ydCBfX2FsbF9fIGFzIF9vcGNvZGVzX2FsbAogCiBfX2FsbF9fID0gWyJjb2RlX2luZm8iLCAiZGlzIiwgImRpc2Fzc2VtYmxlIiwgImRpc3RiIiwgImRpc2NvIiwKLSAgICAgICAgICAgImZpbmRsaW5lc3RhcnRzIiwgImZpbmRsYWJlbHMiLCAic2hvd19jb2RlIl0gKyBfb3Bjb2Rlc19hbGwKKyAgICAgICAgICAgImZpbmRsaW5lc3RhcnRzIiwgImZpbmRsYWJlbHMiLCAic2hvd19jb2RlIiwKKyAgICAgICAgICAgImdldF9pbnN0cnVjdGlvbnMiLCAiSW5zdHJ1Y3Rpb24iLCAiQnl0ZWNvZGUiXSArIF9vcGNvZGVzX2FsbAogZGVsIF9vcGNvZGVzX2FsbAogCiBfaGF2ZV9jb2RlID0gKHR5cGVzLk1ldGhvZFR5cGUsIHR5cGVzLkZ1bmN0aW9uVHlwZSwgdHlwZXMuQ29kZVR5cGUsIHR5cGUpCkBAIC0yNSwxNCArMjgsMTQgQEAKICAgICAgICAgYyA9IGNvbXBpbGUoc291cmNlLCBuYW1lLCAnZXhlYycpCiAgICAgcmV0dXJuIGMKIAotZGVmIGRpcyh4PU5vbmUpOgorZGVmIGRpcyh4PU5vbmUsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiRGlzYXNzZW1ibGUgY2xhc3NlcywgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLgogCiAgICAgV2l0aCBubyBhcmd1bWVudCwgZGlzYXNzZW1ibGUgdGhlIGxhc3QgdHJhY2ViYWNrLgogCiAgICAgIiIiCiAgICAgaWYgeCBpcyBOb25lOgotICAgICAgICBkaXN0YigpCisgICAgICAgIGRpc3RiKGZpbGU9ZmlsZSkKICAgICAgICAgcmV0dXJuCiAgICAgaWYgaGFzYXR0cih4LCAnX19mdW5jX18nKTogICMgTWV0aG9kCiAgICAgICAgIHggPSB4Ll9fZnVuY19fCkBAIC00MiwyMyArNDUsMjMgQEAKICAgICAgICAgaXRlbXMgPSBzb3J0ZWQoeC5fX2RpY3RfXy5pdGVtcygpKQogICAgICAgICBmb3IgbmFtZSwgeDEgaW4gaXRlbXM6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHgxLCBfaGF2ZV9jb2RlKToKLSAgICAgICAgICAgICAgICBwcmludCgiRGlzYXNzZW1ibHkgb2YgJXM6IiAlIG5hbWUpCisgICAgICAgICAgICAgICAgcHJpbnQoIkRpc2Fzc2VtYmx5IG9mICVzOiIgJSBuYW1lLCBmaWxlPWZpbGUpCiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBkaXMoeDEpCisgICAgICAgICAgICAgICAgICAgIGRpcyh4MSwgZmlsZT1maWxlKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgICAgICBwcmludCgiU29ycnk6IiwgbXNnKQotICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlNvcnJ5OiIsIG1zZywgZmlsZT1maWxlKQorICAgICAgICAgICAgICAgIHByaW50KGZpbGU9ZmlsZSkKICAgICBlbGlmIGhhc2F0dHIoeCwgJ2NvX2NvZGUnKTogIyBDb2RlIG9iamVjdAotICAgICAgICBkaXNhc3NlbWJsZSh4KQorICAgICAgICBkaXNhc3NlbWJsZSh4LCBmaWxlPWZpbGUpCiAgICAgZWxpZiBpc2luc3RhbmNlKHgsIChieXRlcywgYnl0ZWFycmF5KSk6ICMgUmF3IGJ5dGVjb2RlCi0gICAgICAgIF9kaXNhc3NlbWJsZV9ieXRlcyh4KQorICAgICAgICBfZGlzYXNzZW1ibGVfYnl0ZXMoeCwgZmlsZT1maWxlKQogICAgIGVsaWYgaXNpbnN0YW5jZSh4LCBzdHIpOiAgICAjIFNvdXJjZSBjb2RlCi0gICAgICAgIF9kaXNhc3NlbWJsZV9zdHIoeCkKKyAgICAgICAgX2Rpc2Fzc2VtYmxlX3N0cih4LCBmaWxlPWZpbGUpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBkaXNhc3NlbWJsZSAlcyBvYmplY3RzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHgpLl9fbmFtZV9fKQogCi1kZWYgZGlzdGIodGI9Tm9uZSk6CitkZWYgZGlzdGIodGI9Tm9uZSwgKiwgZmlsZT1Ob25lKToKICAgICAiIiJEaXNhc3NlbWJsZSBhIHRyYWNlYmFjayAoZGVmYXVsdDogbGFzdCB0cmFjZWJhY2spLiIiIgogICAgIGlmIHRiIGlzIE5vbmU6CiAgICAgICAgIHRyeToKQEAgLTY2LDcgKzY5LDcgQEAKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJubyBsYXN0IHRyYWNlYmFjayB0byBkaXNhc3NlbWJsZSIpCiAgICAgICAgIHdoaWxlIHRiLnRiX25leHQ6IHRiID0gdGIudGJfbmV4dAotICAgIGRpc2Fzc2VtYmxlKHRiLnRiX2ZyYW1lLmZfY29kZSwgdGIudGJfbGFzdGkpCisgICAgZGlzYXNzZW1ibGUodGIudGJfZnJhbWUuZl9jb2RlLCB0Yi50Yl9sYXN0aSwgZmlsZT1maWxlKQogCiAjIFRoZSBpbnNwZWN0IG1vZHVsZSBpbnRlcnJvZ2F0ZXMgdGhpcyBkaWN0aW9uYXJ5IHRvIGJ1aWxkIGl0cwogIyBsaXN0IG9mIENPXyogY29uc3RhbnRzLiBJdCBpcyBhbHNvIHVzZWQgYnkgcHJldHR5X2ZsYWdzIHRvCkBAIC05NSwxOSArOTgsMjIgQEAKICAgICAgICAgbmFtZXMuYXBwZW5kKGhleChmbGFncykpCiAgICAgcmV0dXJuICIsICIuam9pbihuYW1lcykKIAotZGVmIGNvZGVfaW5mbyh4KToKLSAgICAiIiJGb3JtYXR0ZWQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUuIiIiCitkZWYgX2dldF9jb2RlX29iamVjdCh4KToKKyAgICAiIiJIZWxwZXIgdG8gaGFuZGxlIG1ldGhvZHMsIGZ1bmN0aW9ucywgc3RyaW5ncyBhbmQgcmF3IGNvZGUgb2JqZWN0cyIiIgogICAgIGlmIGhhc2F0dHIoeCwgJ19fZnVuY19fJyk6ICMgTWV0aG9kCiAgICAgICAgIHggPSB4Ll9fZnVuY19fCiAgICAgaWYgaGFzYXR0cih4LCAnX19jb2RlX18nKTogIyBGdW5jdGlvbgogICAgICAgICB4ID0geC5fX2NvZGVfXwogICAgIGlmIGlzaW5zdGFuY2UoeCwgc3RyKTogICAgICMgU291cmNlIGNvZGUKLSAgICAgICAgeCA9IF90cnlfY29tcGlsZSh4LCAiPGNvZGVfaW5mbz4iKQorICAgICAgICB4ID0gX3RyeV9jb21waWxlKHgsICI8ZGlzYXNzZW1ibHk+IikKICAgICBpZiBoYXNhdHRyKHgsICdjb19jb2RlJyk6ICAjIENvZGUgb2JqZWN0Ci0gICAgICAgIHJldHVybiBfZm9ybWF0X2NvZGVfaW5mbyh4KQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJXMgb2JqZWN0cyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXykKKyAgICAgICAgcmV0dXJuIHgKKyAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGRpc2Fzc2VtYmxlICVzIG9iamVjdHMiICUKKyAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXykKKworZGVmIGNvZGVfaW5mbyh4KToKKyAgICAiIiJGb3JtYXR0ZWQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUuIiIiCisgICAgcmV0dXJuIF9mb3JtYXRfY29kZV9pbmZvKF9nZXRfY29kZV9vYmplY3QoeCkpCiAKIGRlZiBfZm9ybWF0X2NvZGVfaW5mbyhjbyk6CiAgICAgbGluZXMgPSBbXQpAQCAtMTQwLDEwNiArMTQ2LDIwNiBAQAogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIlNGQ6ICVzIiAlIGlfbikKICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQogCi1kZWYgc2hvd19jb2RlKGNvKToKLSAgICAiIiJQcmludCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZSB0byBzdGRvdXQuIiIiCi0gICAgcHJpbnQoY29kZV9pbmZvKGNvKSkKK2RlZiBzaG93X2NvZGUoY28sICosIGZpbGU9Tm9uZSk6CisgICAgIiIiUHJpbnQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUgdG8gKmZpbGUqLgogCi1kZWYgZGlzYXNzZW1ibGUoY28sIGxhc3RpPS0xKToKLSAgICAiIiJEaXNhc3NlbWJsZSBhIGNvZGUgb2JqZWN0LiIiIgotICAgIGNvZGUgPSBjby5jb19jb2RlCi0gICAgbGFiZWxzID0gZmluZGxhYmVscyhjb2RlKQorICAgIElmICpmaWxlKiBpcyBub3QgcHJvdmlkZWQsIHRoZSBvdXRwdXQgaXMgcHJpbnRlZCBvbiBzdGRvdXQuCisgICAgIiIiCisgICAgcHJpbnQoY29kZV9pbmZvKGNvKSwgZmlsZT1maWxlKQorCitfSW5zdHJ1Y3Rpb24gPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCJfSW5zdHJ1Y3Rpb24iLAorICAgICAib3BuYW1lIG9wY29kZSBhcmcgYXJndmFsIGFyZ3JlcHIgb2Zmc2V0IHN0YXJ0c19saW5lIGlzX2p1bXBfdGFyZ2V0IikKKworY2xhc3MgSW5zdHJ1Y3Rpb24oX0luc3RydWN0aW9uKToKKyAgICAiIiJEZXRhaWxzIGZvciBhIGJ5dGVjb2RlIG9wZXJhdGlvbgorCisgICAgICAgRGVmaW5lZCBmaWVsZHM6CisgICAgICAgICBvcG5hbWUgLSBodW1hbiByZWFkYWJsZSBuYW1lIGZvciBvcGVyYXRpb24KKyAgICAgICAgIG9wY29kZSAtIG51bWVyaWMgY29kZSBmb3Igb3BlcmF0aW9uCisgICAgICAgICBhcmcgLSBudW1lcmljIGFyZ3VtZW50IHRvIG9wZXJhdGlvbiAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKyAgICAgICAgIGFyZ3ZhbCAtIHJlc29sdmVkIGFyZyB2YWx1ZSAoaWYga25vd24pLCBvdGhlcndpc2Ugc2FtZSBhcyBhcmcKKyAgICAgICAgIGFyZ3JlcHIgLSBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiBvcGVyYXRpb24gYXJndW1lbnQKKyAgICAgICAgIG9mZnNldCAtIHN0YXJ0IGluZGV4IG9mIG9wZXJhdGlvbiB3aXRoaW4gYnl0ZWNvZGUgc2VxdWVuY2UKKyAgICAgICAgIHN0YXJ0c19saW5lIC0gbGluZSBzdGFydGVkIGJ5IHRoaXMgb3Bjb2RlIChpZiBhbnkpLCBvdGhlcndpc2UgTm9uZQorICAgICAgICAgaXNfanVtcF90YXJnZXQgLSBUcnVlIGlmIG90aGVyIGNvZGUganVtcHMgdG8gaGVyZSwgb3RoZXJ3aXNlIEZhbHNlCisgICAgIiIiCisKKyAgICBkZWYgX2Rpc2Fzc2VtYmxlKHNlbGYsIGxpbmVub193aWR0aD0zLCBtYXJrX2FzX2N1cnJlbnQ9RmFsc2UpOgorICAgICAgICAiIiJGb3JtYXQgaW5zdHJ1Y3Rpb24gZGV0YWlscyBmb3IgaW5jbHVzaW9uIGluIGRpc2Fzc2VtYmx5IG91dHB1dAorCisgICAgICAgICpsaW5lbm9fd2lkdGgqIHNldHMgdGhlIHdpZHRoIG9mIHRoZSBsaW5lIG51bWJlciBmaWVsZCAoMCBvbWl0cyBpdCkKKyAgICAgICAgKm1hcmtfYXNfY3VycmVudCogaW5zZXJ0cyBhICctLT4nIG1hcmtlciBhcnJvdyBhcyBwYXJ0IG9mIHRoZSBsaW5lCisgICAgICAgICIiIgorICAgICAgICBmaWVsZHMgPSBbXQorICAgICAgICAjIENvbHVtbjogU291cmNlIGNvZGUgbGluZSBudW1iZXIKKyAgICAgICAgaWYgbGluZW5vX3dpZHRoOgorICAgICAgICAgICAgaWYgc2VsZi5zdGFydHNfbGluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsaW5lbm9fZm10ID0gIiUlJWRkIiAlIGxpbmVub193aWR0aAorICAgICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQobGluZW5vX2ZtdCAlIHNlbGYuc3RhcnRzX2xpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyAnICogbGluZW5vX3dpZHRoKQorICAgICAgICAjIENvbHVtbjogQ3VycmVudCBpbnN0cnVjdGlvbiBpbmRpY2F0b3IKKyAgICAgICAgaWYgbWFya19hc19jdXJyZW50OgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgnLS0+JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyAgICcpCisgICAgICAgICMgQ29sdW1uOiBKdW1wIHRhcmdldCBtYXJrZXIKKyAgICAgICAgaWYgc2VsZi5pc19qdW1wX3RhcmdldDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJz4+JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJyAgJykKKyAgICAgICAgIyBDb2x1bW46IEluc3RydWN0aW9uIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGNvZGUgc2VxdWVuY2UKKyAgICAgICAgZmllbGRzLmFwcGVuZChyZXByKHNlbGYub2Zmc2V0KS5yanVzdCg0KSkKKyAgICAgICAgIyBDb2x1bW46IE9wY29kZSBuYW1lCisgICAgICAgIGZpZWxkcy5hcHBlbmQoc2VsZi5vcG5hbWUubGp1c3QoMjApKQorICAgICAgICAjIENvbHVtbjogT3Bjb2RlIGFyZ3VtZW50CisgICAgICAgIGlmIHNlbGYuYXJnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChyZXByKHNlbGYuYXJnKS5yanVzdCg1KSkKKyAgICAgICAgICAgICMgQ29sdW1uOiBPcGNvZGUgYXJndW1lbnQgZGV0YWlscworICAgICAgICAgICAgaWYgc2VsZi5hcmdyZXByOgorICAgICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJygnICsgc2VsZi5hcmdyZXByICsgJyknKQorICAgICAgICByZXR1cm4gJyAnLmpvaW4oZmllbGRzKS5yc3RyaXAoKQorCisKK2RlZiBnZXRfaW5zdHJ1Y3Rpb25zKHgsICosIGZpcnN0X2xpbmU9Tm9uZSk6CisgICAgIiIiSXRlcmF0b3IgZm9yIHRoZSBvcGNvZGVzIGluIG1ldGhvZHMsIGZ1bmN0aW9ucyBvciBjb2RlCisKKyAgICBHZW5lcmF0ZXMgYSBzZXJpZXMgb2YgSW5zdHJ1Y3Rpb24gbmFtZWQgdHVwbGVzIGdpdmluZyB0aGUgZGV0YWlscyBvZgorICAgIGVhY2ggb3BlcmF0aW9ucyBpbiB0aGUgc3VwcGxpZWQgY29kZS4KKworICAgIElmICpmaXJzdF9saW5lKiBpcyBub3QgTm9uZSwgaXQgaW5kaWNhdGVzIHRoZSBsaW5lIG51bWJlciB0aGF0IHNob3VsZAorICAgIGJlIHJlcG9ydGVkIGZvciB0aGUgZmlyc3Qgc291cmNlIGxpbmUgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLgorICAgIE90aGVyd2lzZSwgdGhlIHNvdXJjZSBsaW5lIGluZm9ybWF0aW9uIChpZiBhbnkpIGlzIHRha2VuIGRpcmVjdGx5IGZyb20KKyAgICB0aGUgZGlzYXNzZW1ibGVkIGNvZGUgb2JqZWN0LgorICAgICIiIgorICAgIGNvID0gX2dldF9jb2RlX29iamVjdCh4KQorICAgIGNlbGxfbmFtZXMgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCiAgICAgbGluZXN0YXJ0cyA9IGRpY3QoZmluZGxpbmVzdGFydHMoY28pKQorICAgIGlmIGZpcnN0X2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgIGxpbmVfb2Zmc2V0ID0gZmlyc3RfbGluZSAtIGNvLmNvX2ZpcnN0bGluZW5vCisgICAgZWxzZToKKyAgICAgICAgbGluZV9vZmZzZXQgPSAwCisgICAgcmV0dXJuIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvLmNvX2NvZGUsIGNvLmNvX3Zhcm5hbWVzLCBjby5jb19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29uc3RzLCBjZWxsX25hbWVzLCBsaW5lc3RhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldCkKKworZGVmIF9nZXRfY29uc3RfaW5mbyhjb25zdF9pbmRleCwgY29uc3RfbGlzdCk6CisgICAgIiIiSGVscGVyIHRvIGdldCBvcHRpb25hbCBkZXRhaWxzIGFib3V0IGNvbnN0IHJlZmVyZW5jZXMKKworICAgICAgIFJldHVybnMgdGhlIGRlcmVmZXJlbmNlZCBjb25zdGFudCBhbmQgaXRzIHJlcHIgaWYgdGhlIGNvbnN0YW50CisgICAgICAgbGlzdCBpcyBkZWZpbmVkLgorICAgICAgIE90aGVyd2lzZSByZXR1cm5zIHRoZSBjb25zdGFudCBpbmRleCBhbmQgaXRzIHJlcHIoKS4KKyAgICAiIiIKKyAgICBhcmd2YWwgPSBjb25zdF9pbmRleAorICAgIGlmIGNvbnN0X2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgIGFyZ3ZhbCA9IGNvbnN0X2xpc3RbY29uc3RfaW5kZXhdCisgICAgcmV0dXJuIGFyZ3ZhbCwgcmVwcihhcmd2YWwpCisKK2RlZiBfZ2V0X25hbWVfaW5mbyhuYW1lX2luZGV4LCBuYW1lX2xpc3QpOgorICAgICIiIkhlbHBlciB0byBnZXQgb3B0aW9uYWwgZGV0YWlscyBhYm91dCBuYW1lZCByZWZlcmVuY2VzCisKKyAgICAgICBSZXR1cm5zIHRoZSBkZXJlZmVyZW5jZWQgbmFtZSBhcyBib3RoIHZhbHVlIGFuZCByZXByIGlmIHRoZSBuYW1lCisgICAgICAgbGlzdCBpcyBkZWZpbmVkLgorICAgICAgIE90aGVyd2lzZSByZXR1cm5zIHRoZSBuYW1lIGluZGV4IGFuZCBpdHMgcmVwcigpLgorICAgICIiIgorICAgIGFyZ3ZhbCA9IG5hbWVfaW5kZXgKKyAgICBpZiBuYW1lX2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgIGFyZ3ZhbCA9IG5hbWVfbGlzdFtuYW1lX2luZGV4XQorICAgICAgICBhcmdyZXByID0gYXJndmFsCisgICAgZWxzZToKKyAgICAgICAgYXJncmVwciA9IHJlcHIoYXJndmFsKQorICAgIHJldHVybiBhcmd2YWwsIGFyZ3JlcHIKKworCitkZWYgX2dldF9pbnN0cnVjdGlvbnNfYnl0ZXMoY29kZSwgdmFybmFtZXM9Tm9uZSwgbmFtZXM9Tm9uZSwgY29uc3RhbnRzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgY2VsbHM9Tm9uZSwgbGluZXN0YXJ0cz1Ob25lLCBsaW5lX29mZnNldD0wKToKKyAgICAiIiJJdGVyYXRlIG92ZXIgdGhlIGluc3RydWN0aW9ucyBpbiBhIGJ5dGVjb2RlIHN0cmluZy4KKworICAgIEdlbmVyYXRlcyBhIHNlcXVlbmNlIG9mIEluc3RydWN0aW9uIG5hbWVkdHVwbGVzIGdpdmluZyB0aGUgZGV0YWlscyBvZiBlYWNoCisgICAgb3Bjb2RlLiAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29kZSdzIHJ1bnRpbWUgZW52aXJvbm1lbnQKKyAgICAoZS5nLiB2YXJpYWJsZSBuYW1lcywgY29uc3RhbnRzKSBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIG9wdGlvbmFsCisgICAgYXJndW1lbnRzLgorCisgICAgIiIiCisgICAgbGFiZWxzID0gZmluZGxhYmVscyhjb2RlKQorICAgIGV4dGVuZGVkX2FyZyA9IDAKKyAgICBzdGFydHNfbGluZSA9IE5vbmUKKyAgICBmcmVlID0gTm9uZQorICAgICMgZW51bWVyYXRlKCkgaXMgbm90IGFuIG9wdGlvbiwgc2luY2Ugd2Ugc29tZXRpbWVzIHByb2Nlc3MKKyAgICAjIG11bHRpcGxlIGVsZW1lbnRzIG9uIGEgc2luZ2xlIHBhc3MgdGhyb3VnaCB0aGUgbG9vcAogICAgIG4gPSBsZW4oY29kZSkKICAgICBpID0gMAotICAgIGV4dGVuZGVkX2FyZyA9IDAKLSAgICBmcmVlID0gTm9uZQogICAgIHdoaWxlIGkgPCBuOgogICAgICAgICBvcCA9IGNvZGVbaV0KLSAgICAgICAgaWYgaSBpbiBsaW5lc3RhcnRzOgotICAgICAgICAgICAgaWYgaSA+IDA6Ci0gICAgICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgcHJpbnQoIiUzZCIgJSBsaW5lc3RhcnRzW2ldLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoJyAgICcsIGVuZD0nICcpCi0KLSAgICAgICAgaWYgaSA9PSBsYXN0aTogcHJpbnQoJy0tPicsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KCcgICAnLCBlbmQ9JyAnKQotICAgICAgICBpZiBpIGluIGxhYmVsczogcHJpbnQoJz4+JywgZW5kPScgJykKLSAgICAgICAgZWxzZTogcHJpbnQoJyAgJywgZW5kPScgJykKLSAgICAgICAgcHJpbnQocmVwcihpKS5yanVzdCg0KSwgZW5kPScgJykKLSAgICAgICAgcHJpbnQob3BuYW1lW29wXS5sanVzdCgyMCksIGVuZD0nICcpCisgICAgICAgIG9mZnNldCA9IGkKKyAgICAgICAgaWYgbGluZXN0YXJ0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0YXJ0c19saW5lID0gbGluZXN0YXJ0cy5nZXQoaSwgTm9uZSkKKyAgICAgICAgICAgIGlmIHN0YXJ0c19saW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN0YXJ0c19saW5lICs9IGxpbmVfb2Zmc2V0CisgICAgICAgIGlzX2p1bXBfdGFyZ2V0ID0gaSBpbiBsYWJlbHMKICAgICAgICAgaSA9IGkrMQorICAgICAgICBhcmcgPSBOb25lCisgICAgICAgIGFyZ3ZhbCA9IE5vbmUKKyAgICAgICAgYXJncmVwciA9ICcnCiAgICAgICAgIGlmIG9wID49IEhBVkVfQVJHVU1FTlQ6Ci0gICAgICAgICAgICBvcGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2ICsgZXh0ZW5kZWRfYXJnCisgICAgICAgICAgICBhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NiArIGV4dGVuZGVkX2FyZwogICAgICAgICAgICAgZXh0ZW5kZWRfYXJnID0gMAogICAgICAgICAgICAgaSA9IGkrMgogICAgICAgICAgICAgaWYgb3AgPT0gRVhURU5ERURfQVJHOgotICAgICAgICAgICAgICAgIGV4dGVuZGVkX2FyZyA9IG9wYXJnKjY1NTM2Ci0gICAgICAgICAgICBwcmludChyZXByKG9wYXJnKS5yanVzdCg1KSwgZW5kPScgJykKKyAgICAgICAgICAgICAgICBleHRlbmRlZF9hcmcgPSBhcmcqNjU1MzYKKyAgICAgICAgICAgICMgIFNldCBhcmd2YWwgdG8gdGhlIGRlcmVmZXJlbmNlZCB2YWx1ZSBvZiB0aGUgYXJndW1lbnQgd2hlbgorICAgICAgICAgICAgIyAgYXZhaWxhYmUsIGFuZCBhcmdyZXByIHRvIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYXJndmFsLgorICAgICAgICAgICAgIyAgICBfZGlzYXNzZW1ibGVfYnl0ZXMgbmVlZHMgdGhlIHN0cmluZyByZXByIG9mIHRoZQorICAgICAgICAgICAgIyAgICByYXcgbmFtZSBpbmRleCBmb3IgTE9BRF9HTE9CQUwsIExPQURfQ09OU1QsIGV0Yy4KKyAgICAgICAgICAgIGFyZ3ZhbCA9IGFyZwogICAgICAgICAgICAgaWYgb3AgaW4gaGFzY29uc3Q6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgcmVwcihjby5jb19jb25zdHNbb3BhcmddKSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X2NvbnN0X2luZm8oYXJnLCBjb25zdGFudHMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hbWU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgY28uY29fbmFtZXNbb3BhcmddICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgbmFtZXMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2pyZWw6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJyh0byAnICsgcmVwcihpICsgb3BhcmcpICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCA9IGkgKyBhcmcKKyAgICAgICAgICAgICAgICBhcmdyZXByID0gInRvICIgKyByZXByKGFyZ3ZhbCkKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbG9jYWw6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgY28uY29fdmFybmFtZXNbb3BhcmddICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgdmFybmFtZXMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2NvbXBhcmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgY21wX29wW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwgPSBjbXBfb3BbYXJnXQorICAgICAgICAgICAgICAgIGFyZ3JlcHIgPSBhcmd2YWwKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzZnJlZToKLSAgICAgICAgICAgICAgICBpZiBmcmVlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCi0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgZnJlZVtvcGFyZ10gKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsLCBhcmdyZXByID0gX2dldF9uYW1lX2luZm8oYXJnLCBjZWxscykKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbmFyZ3M6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJyglZCBwb3NpdGlvbmFsLCAlZCBrZXl3b3JkIHBhaXIpJwotICAgICAgICAgICAgICAgICAgICAgICUgKGNvZGVbaS0yXSwgY29kZVtpLTFdKSwgZW5kPScgJykKLSAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgICAgIGFyZ3JlcHIgPSAiJWQgcG9zaXRpb25hbCwgJWQga2V5d29yZCBwYWlyIiAlIChjb2RlW2ktMl0sIGNvZGVbaS0xXSkKKyAgICAgICAgeWllbGQgSW5zdHJ1Y3Rpb24ob3BuYW1lW29wXSwgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZywgYXJndmFsLCBhcmdyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIHN0YXJ0c19saW5lLCBpc19qdW1wX3RhcmdldCkKKworZGVmIGRpc2Fzc2VtYmxlKGNvLCBsYXN0aT0tMSwgKiwgZmlsZT1Ob25lKToKKyAgICAiIiJEaXNhc3NlbWJsZSBhIGNvZGUgb2JqZWN0LiIiIgorICAgIGNlbGxfbmFtZXMgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCisgICAgbGluZXN0YXJ0cyA9IGRpY3QoZmluZGxpbmVzdGFydHMoY28pKQorICAgIF9kaXNhc3NlbWJsZV9ieXRlcyhjby5jb19jb2RlLCBsYXN0aSwgY28uY29fdmFybmFtZXMsIGNvLmNvX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICBjby5jb19jb25zdHMsIGNlbGxfbmFtZXMsIGxpbmVzdGFydHMsIGZpbGU9ZmlsZSkKIAogZGVmIF9kaXNhc3NlbWJsZV9ieXRlcyhjb2RlLCBsYXN0aT0tMSwgdmFybmFtZXM9Tm9uZSwgbmFtZXM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRzPU5vbmUpOgotICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKLSAgICBuID0gbGVuKGNvZGUpCi0gICAgaSA9IDAKLSAgICB3aGlsZSBpIDwgbjoKLSAgICAgICAgb3AgPSBjb2RlW2ldCi0gICAgICAgIGlmIGkgPT0gbGFzdGk6IHByaW50KCctLT4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAgJywgZW5kPScgJykKLSAgICAgICAgaWYgaSBpbiBsYWJlbHM6IHByaW50KCc+PicsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KCcgICcsIGVuZD0nICcpCi0gICAgICAgIHByaW50KHJlcHIoaSkucmp1c3QoNCksIGVuZD0nICcpCi0gICAgICAgIHByaW50KG9wbmFtZVtvcF0ubGp1c3QoMTUpLCBlbmQ9JyAnKQotICAgICAgICBpID0gaSsxCi0gICAgICAgIGlmIG9wID49IEhBVkVfQVJHVU1FTlQ6Ci0gICAgICAgICAgICBvcGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2Ci0gICAgICAgICAgICBpID0gaSsyCi0gICAgICAgICAgICBwcmludChyZXByKG9wYXJnKS5yanVzdCg1KSwgZW5kPScgJykKLSAgICAgICAgICAgIGlmIG9wIGluIGhhc2NvbnN0OgotICAgICAgICAgICAgICAgIGlmIGNvbnN0YW50czoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJygnICsgcmVwcihjb25zdGFudHNbb3BhcmddKSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCVkKSclb3BhcmcsIGVuZD0nICcpCi0gICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hbWU6Ci0gICAgICAgICAgICAgICAgaWYgbmFtZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJyArIG5hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCVkKSclb3BhcmcsIGVuZD0nICcpCi0gICAgICAgICAgICBlbGlmIG9wIGluIGhhc2pyZWw6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJyh0byAnICsgcmVwcihpICsgb3BhcmcpICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNsb2NhbDoKLSAgICAgICAgICAgICAgICBpZiB2YXJuYW1lczoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJygnICsgdmFybmFtZXNbb3BhcmddICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJWQpJyAlIG9wYXJnLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNjb21wYXJlOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNtcF9vcFtvcGFyZ10gKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hcmdzOgotICAgICAgICAgICAgICAgIHByaW50KCcoJWQgcG9zaXRpb25hbCwgJWQga2V5d29yZCBwYWlyKScKLSAgICAgICAgICAgICAgICAgICAgICAlIChjb2RlW2ktMl0sIGNvZGVbaS0xXSksIGVuZD0nICcpCi0gICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRzPU5vbmUsIGNlbGxzPU5vbmUsIGxpbmVzdGFydHM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKiwgZmlsZT1Ob25lLCBsaW5lX29mZnNldD0wKToKKyAgICAjIE9taXQgdGhlIGxpbmUgbnVtYmVyIGNvbHVtbiBlbnRpcmVseSBpZiB3ZSBoYXZlIG5vIGxpbmUgbnVtYmVyIGluZm8KKyAgICBzaG93X2xpbmVubyA9IGxpbmVzdGFydHMgaXMgbm90IE5vbmUKKyAgICAjIFRPRE8/OiBBZGp1c3Qgd2lkdGggdXB3YXJkcyBpZiBtYXgobGluZXN0YXJ0cy52YWx1ZXMoKSkgPj0gMTAwMD8KKyAgICBsaW5lbm9fd2lkdGggPSAzIGlmIHNob3dfbGluZW5vIGVsc2UgMAorICAgIGZvciBpbnN0ciBpbiBfZ2V0X2luc3RydWN0aW9uc19ieXRlcyhjb2RlLCB2YXJuYW1lcywgbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cywgY2VsbHMsIGxpbmVzdGFydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfb2Zmc2V0PWxpbmVfb2Zmc2V0KToKKyAgICAgICAgbmV3X3NvdXJjZV9saW5lID0gKHNob3dfbGluZW5vIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHIuc3RhcnRzX2xpbmUgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ci5vZmZzZXQgPiAwKQorICAgICAgICBpZiBuZXdfc291cmNlX2xpbmU6CisgICAgICAgICAgICBwcmludChmaWxlPWZpbGUpCisgICAgICAgIGlzX2N1cnJlbnRfaW5zdHIgPSBpbnN0ci5vZmZzZXQgPT0gbGFzdGkKKyAgICAgICAgcHJpbnQoaW5zdHIuX2Rpc2Fzc2VtYmxlKGxpbmVub193aWR0aCwgaXNfY3VycmVudF9pbnN0ciksIGZpbGU9ZmlsZSkKIAotZGVmIF9kaXNhc3NlbWJsZV9zdHIoc291cmNlKToKK2RlZiBfZGlzYXNzZW1ibGVfc3RyKHNvdXJjZSwgKiwgZmlsZT1Ob25lKToKICAgICAiIiJDb21waWxlIHRoZSBzb3VyY2Ugc3RyaW5nLCB0aGVuIGRpc2Fzc2VtYmxlIHRoZSBjb2RlIG9iamVjdC4iIiIKLSAgICBkaXNhc3NlbWJsZShfdHJ5X2NvbXBpbGUoc291cmNlLCAnPGRpcz4nKSkKKyAgICBkaXNhc3NlbWJsZShfdHJ5X2NvbXBpbGUoc291cmNlLCAnPGRpcz4nKSwgZmlsZT1maWxlKQogCiBkaXNjbyA9IGRpc2Fzc2VtYmxlICAgICAgICAgICAgICAgICAgICAgIyBYWFggRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAKQEAgLTI1MCwxOSArMzU2LDIxIEBACiAKICAgICAiIiIKICAgICBsYWJlbHMgPSBbXQorICAgICMgZW51bWVyYXRlKCkgaXMgbm90IGFuIG9wdGlvbiwgc2luY2Ugd2Ugc29tZXRpbWVzIHByb2Nlc3MKKyAgICAjIG11bHRpcGxlIGVsZW1lbnRzIG9uIGEgc2luZ2xlIHBhc3MgdGhyb3VnaCB0aGUgbG9vcAogICAgIG4gPSBsZW4oY29kZSkKICAgICBpID0gMAogICAgIHdoaWxlIGkgPCBuOgogICAgICAgICBvcCA9IGNvZGVbaV0KICAgICAgICAgaSA9IGkrMQogICAgICAgICBpZiBvcCA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgb3BhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NgorICAgICAgICAgICAgYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYKICAgICAgICAgICAgIGkgPSBpKzIKICAgICAgICAgICAgIGxhYmVsID0gLTEKICAgICAgICAgICAgIGlmIG9wIGluIGhhc2pyZWw6Ci0gICAgICAgICAgICAgICAgbGFiZWwgPSBpK29wYXJnCisgICAgICAgICAgICAgICAgbGFiZWwgPSBpK2FyZwogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqYWJzOgotICAgICAgICAgICAgICAgIGxhYmVsID0gb3BhcmcKKyAgICAgICAgICAgICAgICBsYWJlbCA9IGFyZwogICAgICAgICAgICAgaWYgbGFiZWwgPj0gMDoKICAgICAgICAgICAgICAgICBpZiBsYWJlbCBub3QgaW4gbGFiZWxzOgogICAgICAgICAgICAgICAgICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsKQpAQCAtMjkwLDI3ICszOTgsNzcgQEAKICAgICBpZiBsaW5lbm8gIT0gbGFzdGxpbmVubzoKICAgICAgICAgeWllbGQgKGFkZHIsIGxpbmVubykKIAorY2xhc3MgQnl0ZWNvZGU6CisgICAgIiIiVGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMgb2YgYSBwaWVjZSBvZiBjb2RlCisKKyAgICBJbnN0YW50aWF0ZSB0aGlzIHdpdGggYSBmdW5jdGlvbiwgbWV0aG9kLCBzdHJpbmcgb2YgY29kZSwgb3IgYSBjb2RlIG9iamVjdAorICAgIChhcyByZXR1cm5lZCBieSBjb21waWxlKCkpLgorCisgICAgSXRlcmF0aW5nIG92ZXIgdGhpcyB5aWVsZHMgdGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMgYXMgSW5zdHJ1Y3Rpb24gaW5zdGFuY2VzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCAqLCBmaXJzdF9saW5lPU5vbmUsIGN1cnJlbnRfb2Zmc2V0PU5vbmUpOgorICAgICAgICBzZWxmLmNvZGVvYmogPSBjbyA9IF9nZXRfY29kZV9vYmplY3QoeCkKKyAgICAgICAgaWYgZmlyc3RfbGluZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5maXJzdF9saW5lID0gY28uY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgIHNlbGYuX2xpbmVfb2Zmc2V0ID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5maXJzdF9saW5lID0gZmlyc3RfbGluZQorICAgICAgICAgICAgc2VsZi5fbGluZV9vZmZzZXQgPSBmaXJzdF9saW5lIC0gY28uY29fZmlyc3RsaW5lbm8KKyAgICAgICAgc2VsZi5fY2VsbF9uYW1lcyA9IGNvLmNvX2NlbGx2YXJzICsgY28uY29fZnJlZXZhcnMKKyAgICAgICAgc2VsZi5fbGluZXN0YXJ0cyA9IGRpY3QoZmluZGxpbmVzdGFydHMoY28pKQorICAgICAgICBzZWxmLl9vcmlnaW5hbF9vYmplY3QgPSB4CisgICAgICAgIHNlbGYuY3VycmVudF9vZmZzZXQgPSBjdXJyZW50X29mZnNldAorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBjbyA9IHNlbGYuY29kZW9iagorICAgICAgICByZXR1cm4gX2dldF9pbnN0cnVjdGlvbnNfYnl0ZXMoY28uY29fY29kZSwgY28uY29fdmFybmFtZXMsIGNvLmNvX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29uc3RzLCBzZWxmLl9jZWxsX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGluZXN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfb2Zmc2V0PXNlbGYuX2xpbmVfb2Zmc2V0KQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gInt9KHshcn0pIi5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9vYmplY3QpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV90cmFjZWJhY2soY2xzLCB0Yik6CisgICAgICAgICIiIiBDb25zdHJ1Y3QgYSBCeXRlY29kZSBmcm9tIHRoZSBnaXZlbiB0cmFjZWJhY2sgIiIiCisgICAgICAgIHdoaWxlIHRiLnRiX25leHQ6CisgICAgICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICAgICAgcmV0dXJuIGNscyh0Yi50Yl9mcmFtZS5mX2NvZGUsIGN1cnJlbnRfb2Zmc2V0PXRiLnRiX2xhc3RpKQorCisgICAgZGVmIGluZm8oc2VsZik6CisgICAgICAgICIiIlJldHVybiBmb3JtYXR0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvZGUgb2JqZWN0LiIiIgorICAgICAgICByZXR1cm4gX2Zvcm1hdF9jb2RlX2luZm8oc2VsZi5jb2Rlb2JqKQorCisgICAgZGVmIGRpcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgZm9ybWF0dGVkIHZpZXcgb2YgdGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMuIiIiCisgICAgICAgIGNvID0gc2VsZi5jb2Rlb2JqCisgICAgICAgIGlmIHNlbGYuY3VycmVudF9vZmZzZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvZmZzZXQgPSBzZWxmLmN1cnJlbnRfb2Zmc2V0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvZmZzZXQgPSAtMQorICAgICAgICB3aXRoIGlvLlN0cmluZ0lPKCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzKGNvLmNvX2NvZGUsIHZhcm5hbWVzPWNvLmNvX3Zhcm5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzPWNvLmNvX25hbWVzLCBjb25zdGFudHM9Y28uY29fY29uc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxzPXNlbGYuX2NlbGxfbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXN0YXJ0cz1zZWxmLl9saW5lc3RhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfb2Zmc2V0PXNlbGYuX2xpbmVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9b3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RpPW9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0dmFsdWUoKQorCisKIGRlZiBfdGVzdCgpOgogICAgICIiIlNpbXBsZSB0ZXN0IHByb2dyYW0gdG8gZGlzYXNzZW1ibGUgYSBmaWxlLiIiIgotICAgIGlmIHN5cy5hcmd2WzE6XToKLSAgICAgICAgaWYgc3lzLmFyZ3ZbMjpdOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgidXNhZ2U6IHB5dGhvbiBkaXMucHkgWy18ZmlsZV1cbiIpCi0gICAgICAgICAgICBzeXMuZXhpdCgyKQotICAgICAgICBmbiA9IHN5cy5hcmd2WzFdCi0gICAgICAgIGlmIG5vdCBmbiBvciBmbiA9PSAiLSI6Ci0gICAgICAgICAgICBmbiA9IE5vbmUKLSAgICBlbHNlOgotICAgICAgICBmbiA9IE5vbmUKLSAgICBpZiBmbiBpcyBOb25lOgotICAgICAgICBmID0gc3lzLnN0ZGluCi0gICAgZWxzZToKLSAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgc291cmNlID0gZi5yZWFkKCkKLSAgICBpZiBmbiBpcyBub3QgTm9uZToKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgZWxzZToKLSAgICAgICAgZm4gPSAiPHN0ZGluPiIKLSAgICBjb2RlID0gY29tcGlsZShzb3VyY2UsIGZuLCAiZXhlYyIpCisgICAgaW1wb3J0IGFyZ3BhcnNlCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnaW5maWxlJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgpLCBuYXJncz0nPycsIGRlZmF1bHQ9Jy0nKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgd2l0aCBhcmdzLmluZmlsZSBhcyBpbmZpbGU6CisgICAgICAgIHNvdXJjZSA9IGluZmlsZS5yZWFkKCkKKyAgICBjb2RlID0gY29tcGlsZShzb3VyY2UsIGFyZ3MuaW5maWxlLm5hbWUsICJleGVjIikKICAgICBkaXMoY29kZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkgYi9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5CmluZGV4IGRlNTU2MGIuLjRjNzE2ZTIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9fX2luaXRfXy5weQpAQCAtMTMsNSArMTMsNSBAQAogIyBVcGRhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFB5dGhvbiByZWxlYXNlIHByb2Nlc3MuCiAjCiAjLS1zdGFydCBjb25zdGFudHMtLQotX192ZXJzaW9uX18gPSAiMy4zLjQiCitfX3ZlcnNpb25fXyA9ICIzLjQuMHJjMSIKICMtLWVuZCBjb25zdGFudHMtLQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9hcmNoaXZlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQppbmRleCBmY2RhMDhlLi40NDcwYmIwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQpAQCAtMTgsMTUgKzE4LDU1IEBACiBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgbWtwYXRoCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKLWRlZiBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCBiYXNlX2RpciwgY29tcHJlc3M9Imd6aXAiLCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6Cit0cnk6CisgICAgZnJvbSBwd2QgaW1wb3J0IGdldHB3bmFtCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ2V0cHduYW0gPSBOb25lCisKK3RyeToKKyAgICBmcm9tIGdycCBpbXBvcnQgZ2V0Z3JuYW0KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRncm5hbSA9IE5vbmUKKworZGVmIF9nZXRfZ2lkKG5hbWUpOgorICAgICIiIlJldHVybnMgYSBnaWQsIGdpdmVuIGEgZ3JvdXAgbmFtZS4iIiIKKyAgICBpZiBnZXRncm5hbSBpcyBOb25lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IGdldGdybmFtKG5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0WzJdCisgICAgcmV0dXJuIE5vbmUKKworZGVmIF9nZXRfdWlkKG5hbWUpOgorICAgICIiIlJldHVybnMgYW4gdWlkLCBnaXZlbiBhIHVzZXIgbmFtZS4iIiIKKyAgICBpZiBnZXRwd25hbSBpcyBOb25lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IGdldHB3bmFtKG5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0WzJdCisgICAgcmV0dXJuIE5vbmUKKworZGVmIG1ha2VfdGFyYmFsbChiYXNlX25hbWUsIGJhc2VfZGlyLCBjb21wcmVzcz0iZ3ppcCIsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wLAorICAgICAgICAgICAgICAgICBvd25lcj1Ob25lLCBncm91cD1Ob25lKToKICAgICAiIiJDcmVhdGUgYSAocG9zc2libHkgY29tcHJlc3NlZCkgdGFyIGZpbGUgZnJvbSBhbGwgdGhlIGZpbGVzIHVuZGVyCiAgICAgJ2Jhc2VfZGlyJy4KIAogICAgICdjb21wcmVzcycgbXVzdCBiZSAiZ3ppcCIgKHRoZSBkZWZhdWx0KSwgImNvbXByZXNzIiwgImJ6aXAyIiwgb3IgTm9uZS4KLSAgICBCb3RoICJ0YXIiIGFuZCB0aGUgY29tcHJlc3Npb24gdXRpbGl0eSBuYW1lZCBieSAnY29tcHJlc3MnIG11c3QgYmUgb24KLSAgICB0aGUgZGVmYXVsdCBwcm9ncmFtIHNlYXJjaCBwYXRoLCBzbyB0aGlzIGlzIHByb2JhYmx5IFVuaXgtc3BlY2lmaWMuCisgICAgKGNvbXByZXNzIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yKQorCisgICAgJ293bmVyJyBhbmQgJ2dyb3VwJyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYW4gb3duZXIgYW5kIGEgZ3JvdXAgZm9yIHRoZQorICAgIGFyY2hpdmUgdGhhdCBpcyBiZWluZyBidWlsdC4gSWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudCBvd25lciBhbmQgZ3JvdXAKKyAgICB3aWxsIGJlIHVzZWQuCisKICAgICBUaGUgb3V0cHV0IHRhciBmaWxlIHdpbGwgYmUgbmFtZWQgJ2Jhc2VfZGlyJyArICAiLnRhciIsIHBvc3NpYmx5IHBsdXMKICAgICB0aGUgYXBwcm9wcmlhdGUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICgiLmd6IiwgIi5iejIiIG9yICIuWiIpLgorCiAgICAgUmV0dXJucyB0aGUgb3V0cHV0IGZpbGVuYW1lLgogICAgICIiIgogICAgIHRhcl9jb21wcmVzc2lvbiA9IHsnZ3ppcCc6ICdneicsICdiemlwMic6ICdiejInLCBOb25lOiAnJywgJ2NvbXByZXNzJzogJyd9CkBAIC00OCwxMCArODgsMjMgQEAKICAgICBpbXBvcnQgdGFyZmlsZSAgIyBsYXRlIGltcG9ydCBzbyBQeXRob24gYnVpbGQgaXRzZWxmIGRvZXNuJ3QgYnJlYWsKIAogICAgIGxvZy5pbmZvKCdDcmVhdGluZyB0YXIgYXJjaGl2ZScpCisKKyAgICB1aWQgPSBfZ2V0X3VpZChvd25lcikKKyAgICBnaWQgPSBfZ2V0X2dpZChncm91cCkKKworICAgIGRlZiBfc2V0X3VpZF9naWQodGFyaW5mbyk6CisgICAgICAgIGlmIGdpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRhcmluZm8uZ2lkID0gZ2lkCisgICAgICAgICAgICB0YXJpbmZvLmduYW1lID0gZ3JvdXAKKyAgICAgICAgaWYgdWlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyaW5mby51aWQgPSB1aWQKKyAgICAgICAgICAgIHRhcmluZm8udW5hbWUgPSBvd25lcgorICAgICAgICByZXR1cm4gdGFyaW5mbworCiAgICAgaWYgbm90IGRyeV9ydW46CiAgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUsICd3fCVzJyAlIHRhcl9jb21wcmVzc2lvbltjb21wcmVzc10pCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHRhci5hZGQoYmFzZV9kaXIpCisgICAgICAgICAgICB0YXIuYWRkKGJhc2VfZGlyLCBmaWx0ZXI9X3NldF91aWRfZ2lkKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdGFyLmNsb3NlKCkKIApAQCAtMTQwLDcgKzE5Myw3IEBACiAgICAgcmV0dXJuIE5vbmUKIAogZGVmIG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXI9Tm9uZSwgYmFzZV9kaXI9Tm9uZSwgdmVyYm9zZT0wLAotICAgICAgICAgICAgICAgICBkcnlfcnVuPTApOgorICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUpOgogICAgICIiIkNyZWF0ZSBhbiBhcmNoaXZlIGZpbGUgKGVnLiB6aXAgb3IgdGFyKS4KIAogICAgICdiYXNlX25hbWUnIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZSwgbWludXMgYW55IGZvcm1hdC1zcGVjaWZpYwpAQCAtMTUzLDYgKzIwNiw5IEBACiAgICAgaWUuICdiYXNlX2Rpcicgd2lsbCBiZSB0aGUgY29tbW9uIHByZWZpeCBvZiBhbGwgZmlsZXMgYW5kCiAgICAgZGlyZWN0b3JpZXMgaW4gdGhlIGFyY2hpdmUuICAncm9vdF9kaXInIGFuZCAnYmFzZV9kaXInIGJvdGggZGVmYXVsdAogICAgIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdmUgZmlsZS4KKworICAgICdvd25lcicgYW5kICdncm91cCcgYXJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBhcmNoaXZlLiBCeSBkZWZhdWx0LAorICAgIHVzZXMgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwLgogICAgICIiIgogICAgIHNhdmVfY3dkID0gb3MuZ2V0Y3dkKCkKICAgICBpZiByb290X2RpciBpcyBub3QgTm9uZToKQEAgLTE3NCw2ICsyMzAsMTEgQEAKICAgICBmdW5jID0gZm9ybWF0X2luZm9bMF0KICAgICBmb3IgYXJnLCB2YWwgaW4gZm9ybWF0X2luZm9bMV06CiAgICAgICAgIGt3YXJnc1thcmddID0gdmFsCisKKyAgICBpZiBmb3JtYXQgIT0gJ3ppcCc6CisgICAgICAgIGt3YXJnc1snb3duZXInXSA9IG93bmVyCisgICAgICAgIGt3YXJnc1snZ3JvdXAnXSA9IGdyb3VwCisKICAgICB0cnk6CiAgICAgICAgIGZpbGVuYW1lID0gZnVuYyhiYXNlX25hbWUsIGJhc2VfZGlyLCAqKmt3YXJncykKICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQppbmRleCBjNzk1Yzk1Li45MTFlODRkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQpAQCAtMzUxLDcgKzM1MSw3IEBACiAgICAgICAgIHJldHVybiBtYWNyb3MsIG9iamVjdHMsIGV4dHJhLCBwcF9vcHRzLCBidWlsZAogCiAgICAgZGVmIF9nZXRfY2NfYXJncyhzZWxmLCBwcF9vcHRzLCBkZWJ1ZywgYmVmb3JlKToKLSAgICAgICAgIyB3b3JrcyBmb3IgdW5peGNjb21waWxlciwgZW14Y2NvbXBpbGVyLCBjeWd3aW5jY29tcGlsZXIKKyAgICAgICAgIyB3b3JrcyBmb3IgdW5peGNjb21waWxlciwgY3lnd2luY2NvbXBpbGVyCiAgICAgICAgIGNjX2FyZ3MgPSBwcF9vcHRzICsgWyctYyddCiAgICAgICAgIGlmIGRlYnVnOgogICAgICAgICAgICAgY2NfYXJnc1s6MF0gPSBbJy1nJ10KQEAgLTkyNiw3ICs5MjYsNiBAQAogICAgICMgb24gYSBjeWd3aW4gYnVpbHQgcHl0aG9uIHdlIGNhbiB1c2UgZ2NjIGxpa2UgYW4gb3JkaW5hcnkgVU5JWGlzaAogICAgICMgY29tcGlsZXIKICAgICAoJ2N5Z3dpbi4qJywgJ3VuaXgnKSwKLSAgICAoJ29zMmVteCcsICdlbXgnKSwKIAogICAgICMgT1MgbmFtZSBtYXBwaW5ncwogICAgICgncG9zaXgnLCAndW5peCcpLApAQCAtOTY4LDggKzk2Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pbmd3MzIgcG9ydCBvZiBHTlUgQyBDb21waWxlciBmb3IgV2luMzIiKSwKICAgICAgICAgICAgICAgICAgICAnYmNwcCc6ICAgICgnYmNwcGNvbXBpbGVyJywgJ0JDUFBDb21waWxlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJvcmxhbmQgQysrIENvbXBpbGVyIiksCi0gICAgICAgICAgICAgICAgICAgJ2VteCc6ICAgICAoJ2VteGNjb21waWxlcicsICdFTVhDQ29tcGlsZXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTVggcG9ydCBvZiBHTlUgQyBDb21waWxlciBmb3IgT1MvMiIpLAogICAgICAgICAgICAgICAgICB9CiAKIGRlZiBzaG93X2NvbXBpbGVycygpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jbWQucHkgYi9MaWIvZGlzdHV0aWxzL2NtZC5weQppbmRleCAzZWEwODEwLi5jODlkNWVmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NtZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NtZC5weQpAQCAtMzY1LDkgKzM2NSwxMSBAQAogICAgICAgICBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24KICAgICAgICAgc3Bhd24oY21kLCBzZWFyY2hfcGF0aCwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCiAKLSAgICBkZWYgbWFrZV9hcmNoaXZlKHNlbGYsIGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lKToKKyAgICBkZWYgbWFrZV9hcmNoaXZlKHNlbGYsIGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgb3duZXI9Tm9uZSwgZ3JvdXA9Tm9uZSk6CiAgICAgICAgIHJldHVybiBhcmNoaXZlX3V0aWwubWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2RpciwgYmFzZV9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeV9ydW49c2VsZi5kcnlfcnVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnlfcnVuPXNlbGYuZHJ5X3J1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQogCiAgICAgZGVmIG1ha2VfZmlsZShzZWxmLCBpbmZpbGVzLCBvdXRmaWxlLCBmdW5jLCBhcmdzLAogICAgICAgICAgICAgICAgICAgZXhlY19tc2c9Tm9uZSwgc2tpcF9tc2c9Tm9uZSwgbGV2ZWw9MSk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkKaW5kZXggYzUxODhlYi4uNjgxNGExYyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weQpAQCAtMzcsNiArMzcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICJbZGVmYXVsdDogZGlzdF0iKSwKICAgICAgICAgICAgICAgICAgICAgKCdza2lwLWJ1aWxkJywgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICJza2lwIHJlYnVpbGRpbmcgZXZlcnl0aGluZyAoZm9yIHRlc3RpbmcvZGVidWdnaW5nKSIpLAorICAgICAgICAgICAgICAgICAgICAoJ293bmVyPScsICd1JywKKyAgICAgICAgICAgICAgICAgICAgICJPd25lciBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAgICAgICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICAgICAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCBncm91cF0iKSwKICAgICAgICAgICAgICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ3NraXAtYnVpbGQnXQpAQCAtNTIsOCArNTgsNyBAQAogICAgICMgVGhpcyB3b24ndCBkbyBpbiByZWFsaXR5OiB3aWxsIG5lZWQgdG8gZGlzdGluZ3Vpc2ggUlBNLWlzaCBMaW51eCwKICAgICAjIERlYmlhbi1pc2ggTGludXgsIFNvbGFyaXMsIEZyZWVCU0QsIC4uLiwgV2luZG93cywgTWFjIE9TLgogICAgIGRlZmF1bHRfZm9ybWF0ID0geydwb3NpeCc6ICdnenRhcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ29zMic6ICd6aXAnfQorICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnfQogCiAgICAgIyBFc3RhYmxpc2ggdGhlIHByZWZlcnJlZCBvcmRlciAoZm9yIHRoZSAtLWhlbHAtZm9ybWF0cyBvcHRpb24pLgogICAgIGZvcm1hdF9jb21tYW5kcyA9IFsncnBtJywgJ2d6dGFyJywgJ2J6dGFyJywgJ3p0YXInLCAndGFyJywKQEAgLTc4LDYgKzgzLDggQEAKICAgICAgICAgc2VsZi5mb3JtYXRzID0gTm9uZQogICAgICAgICBzZWxmLmRpc3RfZGlyID0gTm9uZQogICAgICAgICBzZWxmLnNraXBfYnVpbGQgPSAwCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBoYXZlIHRvIGZpbmFsaXplICdwbGF0X25hbWUnIGJlZm9yZSAnYmRpc3RfYmFzZScKQEAgLTEyMyw2ICsxMzAsMTEgQEAKICAgICAgICAgICAgIGlmIGNtZF9uYW1lIG5vdCBpbiBzZWxmLm5vX2Zvcm1hdF9vcHRpb246CiAgICAgICAgICAgICAgICAgc3ViX2NtZC5mb3JtYXQgPSBzZWxmLmZvcm1hdHNbaV0KIAorICAgICAgICAgICAgIyBwYXNzaW5nIHRoZSBvd25lciBhbmQgZ3JvdXAgbmFtZXMgZm9yIHRhciBhcmNoaXZpbmcKKyAgICAgICAgICAgIGlmIGNtZF9uYW1lID09ICdiZGlzdF9kdW1iJzoKKyAgICAgICAgICAgICAgICBzdWJfY21kLm93bmVyID0gc2VsZi5vd25lcgorICAgICAgICAgICAgICAgIHN1Yl9jbWQuZ3JvdXAgPSBzZWxmLmdyb3VwCisKICAgICAgICAgICAgICMgSWYgd2UncmUgZ29pbmcgdG8gbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGFnYWluLCB0ZWxsIGl0IHRvCiAgICAgICAgICAgICAjIGtlZXAgaXRzIHRlbXBvcmFyeSBmaWxlcyBhcm91bmQgc28gc3Vic2VxdWVudCBydW5zIGdvIGZhc3Rlci4KICAgICAgICAgICAgIGlmIGNtZF9uYW1lIGluIGNvbW1hbmRzW2krMTpdOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQppbmRleCAxYWIwOWQxLi40NDA1ZDEyIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQpAQCAtMzMsMTMgKzMzLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICgncmVsYXRpdmUnLCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgImJ1aWxkIHRoZSBhcmNoaXZlIHVzaW5nIHJlbGF0aXZlIHBhdGhzIgogICAgICAgICAgICAgICAgICAgICAgIihkZWZhdWx0OiBmYWxzZSkiKSwKKyAgICAgICAgICAgICAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAgICAgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgdXNlcl0iKSwKKyAgICAgICAgICAgICAgICAgICAgKCdncm91cD0nLCAnZycsCisgICAgICAgICAgICAgICAgICAgICAiR3JvdXAgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgZ3JvdXBdIiksCiAgICAgICAgICAgICAgICAgICAgXQogCiAgICAgYm9vbGVhbl9vcHRpb25zID0gWydrZWVwLXRlbXAnLCAnc2tpcC1idWlsZCcsICdyZWxhdGl2ZSddCiAKICAgICBkZWZhdWx0X2Zvcm1hdCA9IHsgJ3Bvc2l4JzogJ2d6dGFyJywKLSAgICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICdvczInOiAnemlwJyB9CisgICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnIH0KIAogICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuYmRpc3RfZGlyID0gTm9uZQpAQCAtNDksNiArNTQsOCBAQAogICAgICAgICBzZWxmLmRpc3RfZGlyID0gTm9uZQogICAgICAgICBzZWxmLnNraXBfYnVpbGQgPSBOb25lCiAgICAgICAgIHNlbGYucmVsYXRpdmUgPSAwCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5iZGlzdF9kaXIgaXMgTm9uZToKQEAgLTg1LDExICs5Miw2IEBACiAgICAgICAgIGFyY2hpdmVfYmFzZW5hbWUgPSAiJXMuJXMiICUgKHNlbGYuZGlzdHJpYnV0aW9uLmdldF9mdWxsbmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBsYXRfbmFtZSkKIAotICAgICAgICAjIE9TLzIgb2JqZWN0cyB0byBhbnkgIjoiIGNoYXJhY3RlcnMgaW4gYSBmaWxlbmFtZSAoc3VjaCBhcyB3aGVuCi0gICAgICAgICMgYSB0aW1lc3RhbXAgaXMgdXNlZCBpbiBhIHZlcnNpb24pIHNvIGNoYW5nZSB0aGVtIHRvIGh5cGhlbnMuCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgICAgICBhcmNoaXZlX2Jhc2VuYW1lID0gYXJjaGl2ZV9iYXNlbmFtZS5yZXBsYWNlKCI6IiwgIi0iKQotCiAgICAgICAgIHBzZXVkb2luc3RhbGxfcm9vdCA9IG9zLnBhdGguam9pbihzZWxmLmRpc3RfZGlyLCBhcmNoaXZlX2Jhc2VuYW1lKQogICAgICAgICBpZiBub3Qgc2VsZi5yZWxhdGl2ZToKICAgICAgICAgICAgIGFyY2hpdmVfcm9vdCA9IHNlbGYuYmRpc3RfZGlyCkBAIC0xMDcsNyArMTA5LDggQEAKIAogICAgICAgICAjIE1ha2UgdGhlIGFyY2hpdmUKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm1ha2VfYXJjaGl2ZShwc2V1ZG9pbnN0YWxsX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXQsIHJvb3RfZGlyPWFyY2hpdmVfcm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdCwgcm9vdF9kaXI9YXJjaGl2ZV9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPXNlbGYub3duZXIsIGdyb3VwPXNlbGYuZ3JvdXApCiAgICAgICAgIGlmIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19leHRfbW9kdWxlcygpOgogICAgICAgICAgICAgcHl2ZXJzaW9uID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CmluZGV4IGJjNmEyM2YuLjgwNjg5YjYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQpAQCAtMjMwLDExICsyMzAsNiBAQAogICAgICAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUEMnLCAnVkM2JykpCiAKLSAgICAgICAgIyBPUy8yIChFTVgpIGRvZXNuJ3Qgc3VwcG9ydCBEZWJ1ZyB2cyBSZWxlYXNlIGJ1aWxkcywgYnV0IGhhcyB0aGUKLSAgICAgICAgIyBpbXBvcnQgbGlicmFyaWVzIGluIGl0cyAiQ29uZmlnIiBzdWJkaXJlY3RvcnkKLSAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAnQ29uZmlnJykpCi0KICAgICAgICAgIyBmb3IgZXh0ZW5zaW9ucyB1bmRlciBDeWd3aW4gYW5kIEF0aGVPUyBQeXRob24ncyBsaWJyYXJ5IGRpcmVjdG9yeSBtdXN0IGJlCiAgICAgICAgICMgYXBwZW5kZWQgdG8gbGlicmFyeV9kaXJzCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gJ2N5Z3dpbicgb3Igc3lzLnBsYXRmb3JtWzo2XSA9PSAnYXRoZW9zJzoKQEAgLTYxOSw5ICs2MTQsNiBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJzd2lnLmV4ZSIKLSAgICAgICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICAgICAgIyBhc3N1bWUgc3dpZyBhdmFpbGFibGUgaW4gdGhlIFBBVEguCi0gICAgICAgICAgICByZXR1cm4gInN3aWcuZXhlIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKICAgICAgICAgICAgICAgICAgICJJIGRvbid0IGtub3cgaG93IHRvIGZpbmQgKG11Y2ggbGVzcyBydW4pIFNXSUcgIgpAQCAtNjcyLDkgKzY2NCw2IEBACiAgICAgICAgICIiIgogICAgICAgICBmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9jb25maWdfdmFyCiAgICAgICAgIGV4dF9wYXRoID0gZXh0X25hbWUuc3BsaXQoJy4nKQotICAgICAgICAjIE9TLzIgaGFzIGFuIDggY2hhcmFjdGVyIG1vZHVsZSAoZXh0ZW5zaW9uKSBsaW1pdCA6LSgKLSAgICAgICAgaWYgb3MubmFtZSA9PSAib3MyIjoKLSAgICAgICAgICAgIGV4dF9wYXRoW2xlbihleHRfcGF0aCkgLSAxXSA9IGV4dF9wYXRoW2xlbihleHRfcGF0aCkgLSAxXVs6OF0KICAgICAgICAgIyBleHRlbnNpb25zIGluIGRlYnVnX21vZGUgYXJlIG5hbWVkICdtb2R1bGVfZC5weWQnIHVuZGVyIHdpbmRvd3MKICAgICAgICAgZXh0X3N1ZmZpeCA9IGdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykKICAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnIGFuZCBzZWxmLmRlYnVnOgpAQCAtNjk1LDcgKzY4NCw3IEBACiAgICAgZGVmIGdldF9saWJyYXJpZXMoc2VsZiwgZXh0KToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGxpYnJhcmllcyB0byBsaW5rIGFnYWluc3Qgd2hlbiBidWlsZGluZyBhCiAgICAgICAgIHNoYXJlZCBleHRlbnNpb24uICBPbiBtb3N0IHBsYXRmb3JtcywgdGhpcyBpcyBqdXN0ICdleHQubGlicmFyaWVzJzsKLSAgICAgICAgb24gV2luZG93cyBhbmQgT1MvMiwgd2UgYWRkIHRoZSBQeXRob24gbGlicmFyeSAoZWcuIHB5dGhvbjIwLmRsbCkuCisgICAgICAgIG9uIFdpbmRvd3MsIHdlIGFkZCB0aGUgUHl0aG9uIGxpYnJhcnkgKGVnLiBweXRob24yMC5kbGwpLgogICAgICAgICAiIiIKICAgICAgICAgIyBUaGUgcHl0aG9uIGxpYnJhcnkgaXMgYWx3YXlzIG5lZWRlZCBvbiBXaW5kb3dzLiAgRm9yIE1TVkMsIHRoaXMKICAgICAgICAgIyBpcyByZWR1bmRhbnQsIHNpbmNlIHRoZSBsaWJyYXJ5IGlzIG1lbnRpb25lZCBpbiBhIHByYWdtYSBpbgpAQCAtNzE1LDE5ICs3MDQsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzICsgW3B5dGhvbmxpYl0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dC5saWJyYXJpZXMKLSAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gIm9zMmVteCI6Ci0gICAgICAgICAgICAjIEVNWC9HQ0MgcmVxdWlyZXMgdGhlIHB5dGhvbiBsaWJyYXJ5IGV4cGxpY2l0bHksIGFuZCBJCi0gICAgICAgICAgICAjIGJlbGlldmUgVkFDUFAgZG9lcyBhcyB3ZWxsICh0aG91Z2ggbm90IGNvbmZpcm1lZCkgLSBBSU0gQXByMDEKLSAgICAgICAgICAgIHRlbXBsYXRlID0gInB5dGhvbiVkJWQiCi0gICAgICAgICAgICAjIGRlYnVnIHZlcnNpb25zIG9mIHRoZSBtYWluIERMTCBhcmVuJ3Qgc3VwcG9ydGVkLCBhdCBsZWFzdAotICAgICAgICAgICAgIyBub3QgYXQgdGhpcyB0aW1lIC0gQUlNIEFwcjAxCi0gICAgICAgICAgICAjaWYgc2VsZi5kZWJ1ZzoKLSAgICAgICAgICAgICMgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZSArICdfZCcKLSAgICAgICAgICAgIHB5dGhvbmxpYiA9ICh0ZW1wbGF0ZSAlCi0gICAgICAgICAgICAgICAgICAgKHN5cy5oZXh2ZXJzaW9uID4+IDI0LCAoc3lzLmhleHZlcnNpb24gPj4gMTYpICYgMHhmZikpCi0gICAgICAgICAgICAjIGRvbid0IGV4dGVuZCBleHQubGlicmFyaWVzLCBpdCBtYXkgYmUgc2hhcmVkIHdpdGggb3RoZXIKLSAgICAgICAgICAgICMgZXh0ZW5zaW9ucywgaXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIGxpc3QKLSAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzICsgW3B5dGhvbmxpYl0KICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm1bOjZdID09ICJjeWd3aW4iOgogICAgICAgICAgICAgdGVtcGxhdGUgPSAicHl0aG9uJWQuJWQiCiAgICAgICAgICAgICBweXRob25saWIgPSAodGVtcGxhdGUgJQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5CmluZGV4IGQ0OGViNjkuLjkxMDBiOTYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkKQEAgLTMsNyArMyw3IEBACiBJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ2J1aWxkX3B5JyBjb21tYW5kLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN5cwogZnJvbSBnbG9iIGltcG9ydCBnbG9iCiAKQEAgLTMxMywxMSArMzEzLDExIEBACiAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChmaWxlbmFtZSkKICAgICAgICAgICAgIGlmIGluY2x1ZGVfYnl0ZWNvZGU6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlOgotICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5vcHRpbWl6ZSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZGVidWdfb3ZlcnJpZGU9RmFsc2UpKQogCiAgICAgICAgIG91dHB1dHMgKz0gWwogICAgICAgICAgICAgb3MucGF0aC5qb2luKGJ1aWxkX2RpciwgZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CmluZGV4IDRiNWIyMmUuLjkwYTgzODAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICAjIHNjcmlwdC4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmID0gb3BlbihzY3JpcHQsICJyYiIpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRyeV9ydW46CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgZiA9IE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKaW5kZXggM2M2NzVkMS4uNDU2NTExYyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKQEAgLTU4LDEzICs1OCw2IEBACiAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKICAgICAgICAgfSwKICAgICAnbnQnOiBXSU5ET1dTX1NDSEVNRSwKLSAgICAnb3MyJzogewotICAgICAgICAncHVyZWxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdwbGF0bGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvSW5jbHVkZS8kZGlzdF9uYW1lJywKLSAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvU2NyaXB0cycsCi0gICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKLSAgICAgICAgfSwKICAgICB9CiAKICMgdXNlciBzaXRlIHNjaGVtZXMKQEAgLTg2LDE0ICs3OSw2IEBACiAgICAgICAgICdkYXRhJyAgIDogJyR1c2VyYmFzZScsCiAgICAgICAgIH0KIAotICAgIElOU1RBTExfU0NIRU1FU1snb3MyX2hvbWUnXSA9IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJHVzZXJzaXRlJywKLSAgICAgICAgJ3BsYXRsaWInOiAnJHVzZXJzaXRlJywKLSAgICAgICAgJ2hlYWRlcnMnOiAnJHVzZXJiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyR1c2VyYmFzZS9iaW4nLAotICAgICAgICAnZGF0YScgICA6ICckdXNlcmJhc2UnLAotICAgICAgICB9Ci0KICMgVGhlIGtleXMgdG8gYW4gaW5zdGFsbGF0aW9uIHNjaGVtZTsgaWYgYW55IG5ldyB0eXBlcyBvZiBmaWxlcyBhcmUgdG8gYmUKICMgaW5zdGFsbGVkLCBiZSBzdXJlIHRvIGFkZCBhbiBlbnRyeSB0byBldmVyeSBpbnN0YWxsYXRpb24gc2NoZW1lIGFib3ZlLAogIyBhbmQgdG8gU0NIRU1FX0tFWVMgaGVyZS4KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weQppbmRleCAxNWMwOGYxLi4yMTU4MTNiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5CkBAIC00LDcgKzQsNyBAQAogKGluc3RhbGwgYWxsIFB5dGhvbiBtb2R1bGVzKS4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZApAQCAtMTY1LDEwICsxNjUsMTAgQEAKICAgICAgICAgICAgIGlmIGV4dCAhPSBQWVRIT05fU09VUkNFX0VYVEVOU0lPTjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlOgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgICAgICAgICBweV9maWxlLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKICAgICAgICAgICAgIGlmIHNlbGYub3B0aW1pemUgPiAwOgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgICAgICAgICBweV9maWxlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCiAKICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlX2ZpbGVzCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkKaW5kZXggMTE2ZjY3ZS4uN2VhM2Q1ZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weQpAQCAtNzQsNiArNzQsMTAgQEAKICAgICAgICAgKCdtZXRhZGF0YS1jaGVjaycsIE5vbmUsCiAgICAgICAgICAiRW5zdXJlIHRoYXQgYWxsIHJlcXVpcmVkIGVsZW1lbnRzIG9mIG1ldGEtZGF0YSAiCiAgICAgICAgICAiYXJlIHN1cHBsaWVkLiBXYXJuIGlmIGFueSBtaXNzaW5nLiBbZGVmYXVsdF0iKSwKKyAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIFtkZWZhdWx0OiBjdXJyZW50IGdyb3VwXSIpLAogICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ3VzZS1kZWZhdWx0cycsICdwcnVuZScsCkBAIC0xMTMsNiArMTE3LDggQEAKIAogICAgICAgICBzZWxmLmFyY2hpdmVfZmlsZXMgPSBOb25lCiAgICAgICAgIHNlbGYubWV0YWRhdGFfY2hlY2sgPSAxCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5tYW5pZmVzdCBpcyBOb25lOgpAQCAtNDQ0LDcgKzQ1MCw4IEBACiAgICAgICAgICAgICBzZWxmLmZvcm1hdHMuYXBwZW5kKHNlbGYuZm9ybWF0cy5wb3Aoc2VsZi5mb3JtYXRzLmluZGV4KCd0YXInKSkpCiAKICAgICAgICAgZm9yIGZtdCBpbiBzZWxmLmZvcm1hdHM6Ci0gICAgICAgICAgICBmaWxlID0gc2VsZi5tYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmbXQsIGJhc2VfZGlyPWJhc2VfZGlyKQorICAgICAgICAgICAgZmlsZSA9IHNlbGYubWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm10LCBiYXNlX2Rpcj1iYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1zZWxmLm93bmVyLCBncm91cD1zZWxmLmdyb3VwKQogICAgICAgICAgICAgYXJjaGl2ZV9maWxlcy5hcHBlbmQoZmlsZSkKICAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLmRpc3RfZmlsZXMuYXBwZW5kKCgnc2Rpc3QnLCAnJywgZmlsZSkpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CmluZGV4IGUzMGMxODkuLmQ2NzYyZTQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQpAQCAtMTgyLDcgKzE4Miw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSB1cmxvcGVuKHJlcXVlc3QpCiAgICAgICAgICAgICBzdGF0dXMgPSByZXN1bHQuZ2V0Y29kZSgpCiAgICAgICAgICAgICByZWFzb24gPSByZXN1bHQubXNnCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2Uoc3RyKGUpLCBsb2cuRVJST1IpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZXhjZXB0IEhUVFBFcnJvciBhcyBlOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQppbmRleCAxMDZlMTQ2Li4zODJhY2E4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weQpAQCAtODMsNiArODMsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2tleV0gPSBjb25maWcuZ2V0KHNlcnZlciwga2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2tleV0gPSBkZWZhdWx0CisKKyAgICAgICAgICAgICAgICAgICAgIyB3b3JrIGFyb3VuZCBwZW9wbGUgaGF2aW5nICJyZXBvc2l0b3J5IiBmb3IgdGhlICJweXBpIgorICAgICAgICAgICAgICAgICAgICAjIHNlY3Rpb24gb2YgdGhlaXIgY29uZmlnIHNldCB0byB0aGUgSFRUUCAocmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgIyBIVFRQUykgVVJMCisgICAgICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXIgPT0gJ3B5cGknIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSBpbiAoc2VsZi5ERUZBVUxUX1JFUE9TSVRPUlksICdweXBpJykpOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFsncmVwb3NpdG9yeSddID0gc2VsZi5ERUZBVUxUX1JFUE9TSVRPUlkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50CisKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRbJ3NlcnZlciddID09IHJlcG9zaXRvcnkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbJ3JlcG9zaXRvcnknXSA9PSByZXBvc2l0b3J5KToKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvcmUucHkgYi9MaWIvZGlzdHV0aWxzL2NvcmUucHkKaW5kZXggMjYwMzMyYS4uYzgxMWQ1YiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb3JlLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29yZS5weQpAQCAtMTI4LDggKzEyOCw5IEBACiAgICAgaWYgX3NldHVwX3N0b3BfYWZ0ZXIgPT0gImNvbmZpZyI6CiAgICAgICAgIHJldHVybiBkaXN0CiAKLSAgICAjIFBhcnNlIHRoZSBjb21tYW5kIGxpbmU7IGFueSBjb21tYW5kLWxpbmUgZXJyb3JzIGFyZSB0aGUgZW5kIHVzZXIncwotICAgICMgZmF1bHQsIHNvIHR1cm4gdGhlbSBpbnRvIFN5c3RlbUV4aXQgdG8gc3VwcHJlc3MgdHJhY2ViYWNrcy4KKyAgICAjIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYW5kIG92ZXJyaWRlIGNvbmZpZyBmaWxlczsgYW55CisgICAgIyBjb21tYW5kLWxpbmUgZXJyb3JzIGFyZSB0aGUgZW5kIHVzZXIncyBmYXVsdCwgc28gdHVybiB0aGVtIGludG8KKyAgICAjIFN5c3RlbUV4aXQgdG8gc3VwcHJlc3MgdHJhY2ViYWNrcy4KICAgICB0cnk6CiAgICAgICAgIG9rID0gZGlzdC5wYXJzZV9jb21tYW5kX2xpbmUoKQogICAgIGV4Y2VwdCBEaXN0dXRpbHNBcmdFcnJvciBhcyBtc2c6CkBAIC0xNDgsNyArMTQ5LDcgQEAKICAgICAgICAgICAgIGRpc3QucnVuX2NvbW1hbmRzKCkKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgiaW50ZXJydXB0ZWQiKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIG9zLmVycm9yKSBhcyBleGM6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKICAgICAgICAgICAgIGVycm9yID0gZ3Jva19lbnZpcm9ubWVudF9lcnJvcihleGMpCiAKICAgICAgICAgICAgIGlmIERFQlVHOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQppbmRleCBlMDA3NGExLi5kMjhiMWIzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQpAQCAtNTQsNyArNTQsOCBAQAogZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBnZW5fcHJlcHJvY2Vzc19vcHRpb25zLCBnZW5fbGliX29wdGlvbnMKIGZyb20gZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIgaW1wb3J0IFVuaXhDQ29tcGlsZXIKIGZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgd3JpdGVfZmlsZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IsIENvbXBpbGVFcnJvciwgVW5rbm93bkZpbGVFcnJvcgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoRGlzdHV0aWxzRXhlY0Vycm9yLCBDQ29tcGlsZXJFcnJvciwKKyAgICAgICAgQ29tcGlsZUVycm9yLCBVbmtub3duRmlsZUVycm9yKQogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCkBAIC0yOTQsMTggKzI5NSwxNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZW50cnlfcG9pbnQgPSAnJwogCi0gICAgICAgIGlmIHNlbGYuZ2NjX3ZlcnNpb24gPCAnNCcgb3IgaXNfY3lnd2luZ2NjKCk6Ci0gICAgICAgICAgICBub19jeWd3aW4gPSAnIC1tbm8tY3lnd2luJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm9fY3lnd2luID0gJycKKyAgICAgICAgaWYgaXNfY3lnd2luZ2NjKCk6CisgICAgICAgICAgICByYWlzZSBDQ29tcGlsZXJFcnJvcigKKyAgICAgICAgICAgICAgICAnQ3lnd2luIGdjYyBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tY29tcGlsZXI9bWluZ3czMicpCiAKLSAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyVzIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfc289J2djYyVzIC1tZGxsIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKyslcyAtTyAtV2FsbCcgJSBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9leGU9J2djYyVzJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX3NvPSclcyVzICVzICVzJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5saW5rZXJfZGxsLCBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfb3B0aW9uLCBlbnRyeV9wb2ludCkpCisgICAgICAgIHNlbGYuc2V0X2V4ZWN1dGFibGVzKGNvbXBpbGVyPSdnY2MgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9zbz0nZ2NjIC1tZGxsIC1PIC1XYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKysgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfZXhlPSdnY2MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289JyVzICVzICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYubGlua2VyX2RsbCwgc2hhcmVkX29wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9wb2ludCkpCiAgICAgICAgICMgTWF5YmUgd2Ugc2hvdWxkIGFsc28gYXBwZW5kIC1tdGhyZWFkcywgYnV0IHRoZW4gdGhlIGZpbmlzaGVkCiAgICAgICAgICMgZGxscyBuZWVkIGFub3RoZXIgZGxsIChtaW5nd20xMC5kbGwgc2VlIE1pbmd3MzIgZG9jcykKICAgICAgICAgIyAoLW10aHJlYWRzOiBTdXBwb3J0IHRocmVhZC1zYWZlIGV4Y2VwdGlvbiBoYW5kbGluZyBvbiBgTWluZ3czMicpCkBAIC0zNjQsNyArMzY0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gQ09ORklHX0hfTk9UT0ssICInJXMnIGRvZXMgbm90IG1lbnRpb24gJ19fR05VQ19fJyIgJSBmbgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgY29uZmlnX2guY2xvc2UoKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgIHJldHVybiAoQ09ORklHX0hfVU5DRVJUQUlOLAogICAgICAgICAgICAgICAgICJjb3VsZG4ndCByZWFkICclcyc6ICVzIiAlIChmbiwgZXhjLnN0cmVycm9yKSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkKaW5kZXggMjgyNmZmOC4uMmIzNWFhMyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICAgICAgImNhbm5vdCBjb3B5IHRyZWUgJyVzJzogbm90IGEgZGlyZWN0b3J5IiAlIHNyYykKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzcmMpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgKGVycm5vLCBlcnJzdHIpID0gZQogICAgICAgICBpZiBkcnlfcnVuOgogICAgICAgICAgICAgbmFtZXMgPSBbXQpAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAgICAgICAgICBhYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoKGNtZFsxXSkKICAgICAgICAgICAgIGlmIGFic3BhdGggaW4gX3BhdGhfY3JlYXRlZDoKICAgICAgICAgICAgICAgICBkZWwgX3BhdGhfY3JlYXRlZFthYnNwYXRoXQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgbG9nLndhcm4oZ3Jva19lbnZpcm9ubWVudF9lcnJvcigKICAgICAgICAgICAgICAgICAgICAgZXhjLCAiZXJyb3IgcmVtb3ZpbmcgJXM6ICIgJSBkaXJlY3RvcnkpKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKaW5kZXggMTFhMjEwMi4uN2ViMDRiYyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9kaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZGlzdC5weQpAQCAtNTIsNyArNTIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICgncXVpZXQnLCAncScsICJydW4gcXVpZXRseSAodHVybnMgdmVyYm9zaXR5IG9mZikiKSwKICAgICAgICAgICAgICAgICAgICAgICAoJ2RyeS1ydW4nLCAnbicsICJkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyIpLAogICAgICAgICAgICAgICAgICAgICAgICgnaGVscCcsICdoJywgInNob3cgZGV0YWlsZWQgaGVscCBtZXNzYWdlIiksCi0gICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgKCduby11c2VyLWNmZycsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICdpZ25vcmUgcHlkaXN0dXRpbHMuY2ZnIGluIHlvdXIgaG9tZSBkaXJlY3RvcnknKSwKKyAgICBdCiAKICAgICAjICdjb21tb25fdXNhZ2UnIGlzIGEgc2hvcnQgKDItMyBsaW5lKSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY29tbW9uCiAgICAgIyB1c2FnZSBvZiB0aGUgc2V0dXAgc2NyaXB0LgpAQCAtMjU5LDYgKzI2MSwyMiBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShtc2cgKyAiXG4iKQogCisgICAgICAgICMgbm8tdXNlci1jZmcgaXMgaGFuZGxlZCBiZWZvcmUgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3MKKyAgICAgICAgIyBiZWNhdXNlIG90aGVyIGFyZ3Mgb3ZlcnJpZGUgdGhlIGNvbmZpZyBmaWxlcywgYW5kIHRoaXMKKyAgICAgICAgIyBvbmUgaXMgbmVlZGVkIGJlZm9yZSB3ZSBjYW4gbG9hZCB0aGUgY29uZmlnIGZpbGVzLgorICAgICAgICAjIElmIGF0dHJzWydzY3JpcHRfYXJncyddIHdhc24ndCBwYXNzZWQsIGFzc3VtZSBmYWxzZS4KKyAgICAgICAgIworICAgICAgICAjIFRoaXMgYWxzbyBtYWtlIHN1cmUgd2UganVzdCBsb29rIGF0IHRoZSBnbG9iYWwgb3B0aW9ucworICAgICAgICBzZWxmLndhbnRfdXNlcl9jZmcgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5zY3JpcHRfYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBhcmcgaW4gc2VsZi5zY3JpcHRfYXJnczoKKyAgICAgICAgICAgICAgICBpZiBub3QgYXJnLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBhcmcgPT0gJy0tbm8tdXNlci1jZmcnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndhbnRfdXNlcl9jZmcgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCiAgICAgICAgIHNlbGYuZmluYWxpemVfb3B0aW9ucygpCiAKICAgICBkZWYgZ2V0X29wdGlvbl9kaWN0KHNlbGYsIGNvbW1hbmQpOgpAQCAtMzEwLDcgKzMyOCwxMCBAQAogICAgICAgICBEaXN0dXRpbHMgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSAoaWUuIHdoZXJlIHRoZSB0b3AtbGV2ZWwKICAgICAgICAgRGlzdHV0aWxzIF9faW5zdF9fLnB5IGZpbGUgbGl2ZXMpLCBhIGZpbGUgaW4gdGhlIHVzZXIncyBob21lCiAgICAgICAgIGRpcmVjdG9yeSBuYW1lZCAucHlkaXN0dXRpbHMuY2ZnIG9uIFVuaXggYW5kIHB5ZGlzdHV0aWxzLmNmZwotICAgICAgICBvbiBXaW5kb3dzL01hYywgYW5kIHNldHVwLmNmZyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgIG9uIFdpbmRvd3MvTWFjOyBhbmQgc2V0dXAuY2ZnIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworICAgICAgICBUaGUgZmlsZSBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZQorICAgICAgICAtLW5vLXVzZXItY2ZnIG9wdGlvbi4KICAgICAgICAgIiIiCiAgICAgICAgIGZpbGVzID0gW10KICAgICAgICAgY2hlY2tfZW52aXJvbigpCkBAIC0zMzAsMTUgKzM1MSwxOSBAQAogICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9ICJweWRpc3R1dGlscy5jZmciCiAKICAgICAgICAgIyBBbmQgbG9vayBmb3IgdGhlIHVzZXIgY29uZmlnIGZpbGUKLSAgICAgICAgdXNlcl9maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcignficpLCB1c2VyX2ZpbGVuYW1lKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh1c2VyX2ZpbGUpOgotICAgICAgICAgICAgZmlsZXMuYXBwZW5kKHVzZXJfZmlsZSkKKyAgICAgICAgaWYgc2VsZi53YW50X3VzZXJfY2ZnOgorICAgICAgICAgICAgdXNlcl9maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcignficpLCB1c2VyX2ZpbGVuYW1lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodXNlcl9maWxlKToKKyAgICAgICAgICAgICAgICBmaWxlcy5hcHBlbmQodXNlcl9maWxlKQogCiAgICAgICAgICMgQWxsIHBsYXRmb3JtcyBzdXBwb3J0IGxvY2FsIHNldHVwLmNmZwogICAgICAgICBsb2NhbF9maWxlID0gInNldHVwLmNmZyIKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUobG9jYWxfZmlsZSk6CiAgICAgICAgICAgICBmaWxlcy5hcHBlbmQobG9jYWxfZmlsZSkKIAorICAgICAgICBpZiBERUJVRzoKKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoInVzaW5nIGNvbmZpZyBmaWxlczogJXMiICUgJywgJy5qb2luKGZpbGVzKSkKKwogICAgICAgICByZXR1cm4gZmlsZXMKIAogICAgIGRlZiBwYXJzZV9jb25maWdfZmlsZXMoc2VsZiwgZmlsZW5hbWVzPU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9lbXhjY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3NWY4ZC4uMDAwMDAwMAotLS0gYS9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDMxNSArMCwwIEBACi0iIiJkaXN0dXRpbHMuZW14Y2NvbXBpbGVyCi0KLVByb3ZpZGVzIHRoZSBFTVhDQ29tcGlsZXIgY2xhc3MsIGEgc3ViY2xhc3Mgb2YgVW5peENDb21waWxlciB0aGF0Ci1oYW5kbGVzIHRoZSBFTVggcG9ydCBvZiB0aGUgR05VIEMgY29tcGlsZXIgdG8gT1MvMi4KLSIiIgotCi0jIGlzc3VlczoKLSMKLSMgKiBPUy8yIGluc2lzdHMgdGhhdCBETExzIGNhbiBoYXZlIG5hbWVzIG5vIGxvbmdlciB0aGFuIDggY2hhcmFjdGVycwotIyAgIFdlIHB1dCBleHBvcnRfc3ltYm9scyBpbiBhIGRlZi1maWxlLCBhcyB0aG91Z2ggdGhlIERMTCBjYW4gaGF2ZQotIyAgIGFuIGFyYml0cmFyeSBsZW5ndGggbmFtZSwgYnV0IHRydW5jYXRlIHRoZSBvdXRwdXQgZmlsZW5hbWUuCi0jCi0jICogb25seSB1c2UgT01GIG9iamVjdHMgYW5kIHVzZSBMSU5LMzg2IGFzIHRoZSBsaW5rZXIgKC1ab21mKQotIwotIyAqIGFsd2F5cyBidWlsZCBmb3IgbXVsdGl0aHJlYWRpbmcgKC1abXQpIGFzIHRoZSBhY2NvbXBhbnlpbmcgT1MvMiBwb3J0Ci0jICAgb2YgUHl0aG9uIGlzIG9ubHkgZGlzdHJpYnV0ZWQgd2l0aCB0aHJlYWRzIGVuYWJsZWQuCi0jCi0jIHRlc3RlZCBjb25maWd1cmF0aW9uczoKLSMKLSMgKiBFTVggZ2NjIDIuODEvRU1YIDAuOWQgZml4MDMKLQotaW1wb3J0IG9zLHN5cyxjb3B5Ci1mcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IGdlbl9wcmVwcm9jZXNzX29wdGlvbnMsIGdlbl9saWJfb3B0aW9ucwotZnJvbSBkaXN0dXRpbHMudW5peGNjb21waWxlciBpbXBvcnQgVW5peENDb21waWxlcgotZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCB3cml0ZV9maWxlCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvciwgQ29tcGlsZUVycm9yLCBVbmtub3duRmlsZUVycm9yCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCi0KLWNsYXNzIEVNWENDb21waWxlciAoVW5peENDb21waWxlcik6Ci0KLSAgICBjb21waWxlcl90eXBlID0gJ2VteCcKLSAgICBvYmpfZXh0ZW5zaW9uID0gIi5vYmoiCi0gICAgc3RhdGljX2xpYl9leHRlbnNpb24gPSAiLmxpYiIKLSAgICBzaGFyZWRfbGliX2V4dGVuc2lvbiA9ICIuZGxsIgotICAgIHN0YXRpY19saWJfZm9ybWF0ID0gIiVzJXMiCi0gICAgc2hhcmVkX2xpYl9mb3JtYXQgPSAiJXMlcyIKLSAgICByZXNfZXh0ZW5zaW9uID0gIi5yZXMiICAgICAgIyBjb21waWxlZCByZXNvdXJjZSBmaWxlCi0gICAgZXhlX2V4dGVuc2lvbiA9ICIuZXhlIgotCi0gICAgZGVmIF9faW5pdF9fIChzZWxmLAotICAgICAgICAgICAgICAgICAgdmVyYm9zZT0wLAotICAgICAgICAgICAgICAgICAgZHJ5X3J1bj0wLAotICAgICAgICAgICAgICAgICAgZm9yY2U9MCk6Ci0KLSAgICAgICAgVW5peENDb21waWxlci5fX2luaXRfXyAoc2VsZiwgdmVyYm9zZSwgZHJ5X3J1biwgZm9yY2UpCi0KLSAgICAgICAgKHN0YXR1cywgZGV0YWlscykgPSBjaGVja19jb25maWdfaCgpCi0gICAgICAgIHNlbGYuZGVidWdfcHJpbnQoIlB5dGhvbidzIEdDQyBzdGF0dXM6ICVzIChkZXRhaWxzOiAlcykiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdHVzLCBkZXRhaWxzKSkKLSAgICAgICAgaWYgc3RhdHVzIGlzIG5vdCBDT05GSUdfSF9PSzoKLSAgICAgICAgICAgIHNlbGYud2FybigKLSAgICAgICAgICAgICAgICAiUHl0aG9uJ3MgcHljb25maWcuaCBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCB5b3VyIGNvbXBpbGVyLiAgIiArCi0gICAgICAgICAgICAgICAgKCJSZWFzb246ICVzLiIgJSBkZXRhaWxzKSArCi0gICAgICAgICAgICAgICAgIkNvbXBpbGluZyBtYXkgZmFpbCBiZWNhdXNlIG9mIHVuZGVmaW5lZCBwcmVwcm9jZXNzb3IgbWFjcm9zLiIpCi0KLSAgICAgICAgKHNlbGYuZ2NjX3ZlcnNpb24sIHNlbGYubGRfdmVyc2lvbikgPSBcCi0gICAgICAgICAgICBnZXRfdmVyc2lvbnMoKQotICAgICAgICBzZWxmLmRlYnVnX3ByaW50KHNlbGYuY29tcGlsZXJfdHlwZSArICI6IGdjYyAlcywgbGQgJXNcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmdjY192ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxkX3ZlcnNpb24pICkKLQotICAgICAgICAjIEhhcmQtY29kZSBHQ0MgYmVjYXVzZSB0aGF0J3Mgd2hhdCB0aGlzIGlzIGFsbCBhYm91dC4KLSAgICAgICAgIyBYWFggb3B0aW1pemF0aW9uLCB3YXJuaW5ncyBldGMuIHNob3VsZCBiZSBjdXN0b21pemFibGUuCi0gICAgICAgIHNlbGYuc2V0X2V4ZWN1dGFibGVzKGNvbXBpbGVyPSdnY2MgLVpvbWYgLVptdCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1wcm9iZSAtV2FsbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyX3NvPSdnY2MgLVpvbWYgLVptdCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1wcm9iZSAtV2FsbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9leGU9J2djYyAtWm9tZiAtWm10IC1aY3J0ZGxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX3NvPSdnY2MgLVpvbWYgLVptdCAtWmNydGRsbCAtWmRsbCcpCi0KLSAgICAgICAgIyB3YW50IHRoZSBnY2MgbGlicmFyeSBzdGF0aWNhbGx5IGxpbmtlZCAoc28gdGhhdCB3ZSBkb24ndCBoYXZlCi0gICAgICAgICMgdG8gZGlzdHJpYnV0ZSBhIHZlcnNpb24gZGVwZW5kZW50IG9uIHRoZSBjb21waWxlciB3ZSBoYXZlKQotICAgICAgICBzZWxmLmRsbF9saWJyYXJpZXM9WyJnY2MiXQotCi0gICAgIyBfX2luaXRfXyAoKQotCi0gICAgZGVmIF9jb21waWxlKHNlbGYsIG9iaiwgc3JjLCBleHQsIGNjX2FyZ3MsIGV4dHJhX3Bvc3RhcmdzLCBwcF9vcHRzKToKLSAgICAgICAgaWYgZXh0ID09ICcucmMnOgotICAgICAgICAgICAgIyBnY2MgcmVxdWlyZXMgJy5yYycgY29tcGlsZWQgdG8gYmluYXJ5ICgnLnJlcycpIGZpbGVzICEhIQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oWyJyYyIsICItciIsIHNyY10pCi0gICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICByYWlzZSBDb21waWxlRXJyb3IobXNnKQotICAgICAgICBlbHNlOiAjIGZvciBvdGhlciBmaWxlcyB1c2UgdGhlIEMtY29tcGlsZXIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnNwYXduKHNlbGYuY29tcGlsZXJfc28gKyBjY19hcmdzICsgW3NyYywgJy1vJywgb2JqXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvcihtc2cpCi0KLSAgICBkZWYgbGluayAoc2VsZiwKLSAgICAgICAgICAgICAgdGFyZ2V0X2Rlc2MsCi0gICAgICAgICAgICAgIG9iamVjdHMsCi0gICAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgb3V0cHV0X2Rpcj1Ob25lLAotICAgICAgICAgICAgICBsaWJyYXJpZXM9Tm9uZSwKLSAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgIGV4cG9ydF9zeW1ib2xzPU5vbmUsCi0gICAgICAgICAgICAgIGRlYnVnPTAsCi0gICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgZXh0cmFfcG9zdGFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgYnVpbGRfdGVtcD1Ob25lLAotICAgICAgICAgICAgICB0YXJnZXRfbGFuZz1Ob25lKToKLQotICAgICAgICAjIHVzZSBzZXBhcmF0ZSBjb3BpZXMsIHNvIHdlIGNhbiBtb2RpZnkgdGhlIGxpc3RzCi0gICAgICAgIGV4dHJhX3ByZWFyZ3MgPSBjb3B5LmNvcHkoZXh0cmFfcHJlYXJncyBvciBbXSkKLSAgICAgICAgbGlicmFyaWVzID0gY29weS5jb3B5KGxpYnJhcmllcyBvciBbXSkKLSAgICAgICAgb2JqZWN0cyA9IGNvcHkuY29weShvYmplY3RzIG9yIFtdKQotCi0gICAgICAgICMgQWRkaXRpb25hbCBsaWJyYXJpZXMKLSAgICAgICAgbGlicmFyaWVzLmV4dGVuZChzZWxmLmRsbF9saWJyYXJpZXMpCi0KLSAgICAgICAgIyBoYW5kbGUgZXhwb3J0IHN5bWJvbHMgYnkgY3JlYXRpbmcgYSBkZWYtZmlsZQotICAgICAgICAjIHdpdGggZXhlY3V0YWJsZXMgdGhpcyBvbmx5IHdvcmtzIHdpdGggZ2NjL2xkIGFzIGxpbmtlcgotICAgICAgICBpZiAoKGV4cG9ydF9zeW1ib2xzIGlzIG5vdCBOb25lKSBhbmQKLSAgICAgICAgICAgICh0YXJnZXRfZGVzYyAhPSBzZWxmLkVYRUNVVEFCTEUpKToKLSAgICAgICAgICAgICMgKFRoZSBsaW5rZXIgZG9lc24ndCBkbyBhbnl0aGluZyBpZiBvdXRwdXQgaXMgdXAtdG8tZGF0ZS4KLSAgICAgICAgICAgICMgU28gaXQgd291bGQgcHJvYmFibHkgYmV0dGVyIHRvIGNoZWNrIGlmIHdlIHJlYWxseSBuZWVkIHRoaXMsCi0gICAgICAgICAgICAjIGJ1dCBmb3IgdGhpcyB3ZSBoYWQgdG8gaW5zZXJ0IHNvbWUgdW5jaGFuZ2VkIHBhcnRzIG9mCi0gICAgICAgICAgICAjIFVuaXhDQ29tcGlsZXIsIGFuZCB0aGlzIGlzIG5vdCB3aGF0IHdlIHdhbnQuKQotCi0gICAgICAgICAgICAjIHdlIHdhbnQgdG8gcHV0IHNvbWUgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZQotICAgICAgICAgICAgIyBvYmplY3QgZmlsZXMgYXJlLCBidWlsZF90ZW1wIGRvZXNuJ3QgaGVscCBtdWNoCi0gICAgICAgICAgICAjIHdoZXJlIGFyZSB0aGUgb2JqZWN0IGZpbGVzCi0gICAgICAgICAgICB0ZW1wX2RpciA9IG9zLnBhdGguZGlybmFtZShvYmplY3RzWzBdKQotICAgICAgICAgICAgIyBuYW1lIG9mIGRsbCB0byBnaXZlIHRoZSBoZWxwZXIgZmlsZXMgdGhlIHNhbWUgYmFzZSBuYW1lCi0gICAgICAgICAgICAoZGxsX25hbWUsIGRsbF9leHRlbnNpb24pID0gb3MucGF0aC5zcGxpdGV4dCgKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKG91dHB1dF9maWxlbmFtZSkpCi0KLSAgICAgICAgICAgICMgZ2VuZXJhdGUgdGhlIGZpbGVuYW1lcyBmb3IgdGhlc2UgZmlsZXMKLSAgICAgICAgICAgIGRlZl9maWxlID0gb3MucGF0aC5qb2luKHRlbXBfZGlyLCBkbGxfbmFtZSArICIuZGVmIikKLQotICAgICAgICAgICAgIyBHZW5lcmF0ZSAuZGVmIGZpbGUKLSAgICAgICAgICAgIGNvbnRlbnRzID0gWwotICAgICAgICAgICAgICAgICJMSUJSQVJZICVzIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiICUgXAotICAgICAgICAgICAgICAgIG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShvdXRwdXRfZmlsZW5hbWUpKVswXSwKLSAgICAgICAgICAgICAgICAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiLAotICAgICAgICAgICAgICAgICJFWFBPUlRTIl0KLSAgICAgICAgICAgIGZvciBzeW0gaW4gZXhwb3J0X3N5bWJvbHM6Ci0gICAgICAgICAgICAgICAgY29udGVudHMuYXBwZW5kKCcgICIlcyInICUgc3ltKQotICAgICAgICAgICAgc2VsZi5leGVjdXRlKHdyaXRlX2ZpbGUsIChkZWZfZmlsZSwgY29udGVudHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0aW5nICVzIiAlIGRlZl9maWxlKQotCi0gICAgICAgICAgICAjIG5leHQgYWRkIG9wdGlvbnMgZm9yIGRlZi1maWxlIGFuZCB0byBjcmVhdGluZyBpbXBvcnQgbGlicmFyaWVzCi0gICAgICAgICAgICAjIGZvciBnY2MvbGQgdGhlIGRlZi1maWxlIGlzIHNwZWNpZmllZCBhcyBhbnkgb3RoZXIgb2JqZWN0IGZpbGVzCi0gICAgICAgICAgICBvYmplY3RzLmFwcGVuZChkZWZfZmlsZSkKLQotICAgICAgICAjZW5kOiBpZiAoKGV4cG9ydF9zeW1ib2xzIGlzIG5vdCBOb25lKSBhbmQKLSAgICAgICAgIyAgICAgICAgKHRhcmdldF9kZXNjICE9IHNlbGYuRVhFQ1VUQUJMRSBvciBzZWxmLmxpbmtlcl9kbGwgPT0gImdjYyIpKToKLQotICAgICAgICAjIHdobyB3YW50cyBzeW1ib2xzIGFuZCBhIG1hbnkgdGltZXMgbGFyZ2VyIG91dHB1dCBmaWxlCi0gICAgICAgICMgc2hvdWxkIGV4cGxpY2l0bHkgc3dpdGNoIHRoZSBkZWJ1ZyBtb2RlIG9uCi0gICAgICAgICMgb3RoZXJ3aXNlIHdlIGxldCBkbGx3cmFwL2xkIHN0cmlwIHRoZSBvdXRwdXQgZmlsZQotICAgICAgICAjIChPbiBteSBtYWNoaW5lOiAxMEtCIDwgc3RyaXBwZWRfZmlsZSA8ID8/MTAwS0IKLSAgICAgICAgIyAgIHVuc3RyaXBwZWRfZmlsZSA9IHN0cmlwcGVkX2ZpbGUgKyBYWFggS0IKLSAgICAgICAgIyAgKCBYWFg9MjU0IGZvciBhIHR5cGljYWwgcHl0aG9uIGV4dGVuc2lvbikpCi0gICAgICAgIGlmIG5vdCBkZWJ1ZzoKLSAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3MuYXBwZW5kKCItcyIpCi0KLSAgICAgICAgVW5peENDb21waWxlci5saW5rKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCAjIGV4cG9ydF9zeW1ib2xzLCB3ZSBkbyB0aGlzIGluIG91ciBkZWYtZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wcmVhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfcG9zdGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF90ZW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2xhbmcpCi0KLSAgICAjIGxpbmsgKCkKLQotICAgICMgLS0gTWlzY2VsbGFuZW91cyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAjIG92ZXJyaWRlIHRoZSBvYmplY3RfZmlsZW5hbWVzIG1ldGhvZCBmcm9tIENDb21waWxlciB0bwotICAgICMgc3VwcG9ydCByYyBhbmQgcmVzLWZpbGVzCi0gICAgZGVmIG9iamVjdF9maWxlbmFtZXMgKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9maWxlbmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwX2Rpcj0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyPScnKToKLSAgICAgICAgaWYgb3V0cHV0X2RpciBpcyBOb25lOiBvdXRwdXRfZGlyID0gJycKLSAgICAgICAgb2JqX25hbWVzID0gW10KLSAgICAgICAgZm9yIHNyY19uYW1lIGluIHNvdXJjZV9maWxlbmFtZXM6Ci0gICAgICAgICAgICAjIHVzZSBub3JtY2FzZSB0byBtYWtlIHN1cmUgJy5yYycgaXMgcmVhbGx5ICcucmMnIGFuZCBub3QgJy5SQycKLSAgICAgICAgICAgIChiYXNlLCBleHQpID0gb3MucGF0aC5zcGxpdGV4dCAob3MucGF0aC5ub3JtY2FzZShzcmNfbmFtZSkpCi0gICAgICAgICAgICBpZiBleHQgbm90IGluIChzZWxmLnNyY19leHRlbnNpb25zICsgWycucmMnXSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVW5rbm93bkZpbGVFcnJvcigidW5rbm93biBmaWxlIHR5cGUgJyVzJyAoZnJvbSAnJXMnKSIgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgKGV4dCwgc3JjX25hbWUpKQotICAgICAgICAgICAgaWYgc3RyaXBfZGlyOgotICAgICAgICAgICAgICAgIGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lIChiYXNlKQotICAgICAgICAgICAgaWYgZXh0ID09ICcucmMnOgotICAgICAgICAgICAgICAgICMgdGhlc2UgbmVlZCB0byBiZSBjb21waWxlZCB0byBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgICAgICBvYmpfbmFtZXMuYXBwZW5kIChvcy5wYXRoLmpvaW4gKG91dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgKyBzZWxmLnJlc19leHRlbnNpb24pKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvYmpfbmFtZXMuYXBwZW5kIChvcy5wYXRoLmpvaW4gKG91dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgKyBzZWxmLm9ial9leHRlbnNpb24pKQotICAgICAgICByZXR1cm4gb2JqX25hbWVzCi0KLSAgICAjIG9iamVjdF9maWxlbmFtZXMgKCkKLQotICAgICMgb3ZlcnJpZGUgdGhlIGZpbmRfbGlicmFyeV9maWxlIG1ldGhvZCBmcm9tIFVuaXhDQ29tcGlsZXIKLSAgICAjIHRvIGRlYWwgd2l0aCBmaWxlIG5hbWluZy9zZWFyY2hpbmcgZGlmZmVyZW5jZXMKLSAgICBkZWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgZGlycywgbGliLCBkZWJ1Zz0wKToKLSAgICAgICAgc2hvcnRsaWIgPSAnJXMubGliJyAlIGxpYgotICAgICAgICBsb25nbGliID0gJ2xpYiVzLmxpYicgJSBsaWIgICAgIyB0aGlzIGZvcm0gdmVyeSByYXJlCi0KLSAgICAgICAgIyBnZXQgRU1YJ3MgZGVmYXVsdCBsaWJyYXJ5IGRpcmVjdG9yeSBzZWFyY2ggcGF0aAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBlbXhfZGlycyA9IG9zLmVudmlyb25bJ0xJQlJBUllfUEFUSCddLnNwbGl0KCc7JykKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgZW14X2RpcnMgPSBbXQotCi0gICAgICAgIGZvciBkaXIgaW4gZGlycyArIGVteF9kaXJzOgotICAgICAgICAgICAgc2hvcnRsaWJwID0gb3MucGF0aC5qb2luKGRpciwgc2hvcnRsaWIpCi0gICAgICAgICAgICBsb25nbGlicCA9IG9zLnBhdGguam9pbihkaXIsIGxvbmdsaWIpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzaG9ydGxpYnApOgotICAgICAgICAgICAgICAgIHJldHVybiBzaG9ydGxpYnAKLSAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMobG9uZ2xpYnApOgotICAgICAgICAgICAgICAgIHJldHVybiBsb25nbGlicAotCi0gICAgICAgICMgT29wcywgZGlkbid0IGZpbmQgaXQgaW4gKmFueSogb2YgJ2RpcnMnCi0gICAgICAgIHJldHVybiBOb25lCi0KLSMgY2xhc3MgRU1YQ0NvbXBpbGVyCi0KLQotIyBCZWNhdXNlIHRoZXNlIGNvbXBpbGVycyBhcmVuJ3QgY29uZmlndXJlZCBpbiBQeXRob24ncyBweWNvbmZpZy5oIGZpbGUgYnkKLSMgZGVmYXVsdCwgd2Ugc2hvdWxkIGF0IGxlYXN0IHdhcm4gdGhlIHVzZXIgaWYgaGUgaXMgdXNpbmcgYSB1bm1vZGlmaWVkCi0jIHZlcnNpb24uCi0KLUNPTkZJR19IX09LID0gIm9rIgotQ09ORklHX0hfTk9UT0sgPSAibm90IG9rIgotQ09ORklHX0hfVU5DRVJUQUlOID0gInVuY2VydGFpbiIKLQotZGVmIGNoZWNrX2NvbmZpZ19oKCk6Ci0KLSAgICAiIiJDaGVjayBpZiB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uIChzcGVjaWZpY2FsbHksIHB5Y29uZmlnLmgpCi0gICAgYXBwZWFycyBhbWVuYWJsZSB0byBidWlsZGluZyBleHRlbnNpb25zIHdpdGggR0NDLiAgUmV0dXJucyBhIHR1cGxlCi0gICAgKHN0YXR1cywgZGV0YWlscyksIHdoZXJlICdzdGF0dXMnIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKLSAgICAgIENPTkZJR19IX09LCi0gICAgICAgIGFsbCBpcyB3ZWxsLCBnbyBhaGVhZCBhbmQgY29tcGlsZQotICAgICAgQ09ORklHX0hfTk9UT0sKLSAgICAgICAgZG9lc24ndCBsb29rIGdvb2QKLSAgICAgIENPTkZJR19IX1VOQ0VSVEFJTgotICAgICAgICBub3Qgc3VyZSAtLSB1bmFibGUgdG8gcmVhZCBweWNvbmZpZy5oCi0gICAgJ2RldGFpbHMnIGlzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGV4cGxhaW5pbmcgdGhlIHNpdHVhdGlvbi4KLQotICAgIE5vdGUgdGhlcmUgYXJlIHR3byB3YXlzIHRvIGNvbmNsdWRlICJPSyI6IGVpdGhlciAnc3lzLnZlcnNpb24nIGNvbnRhaW5zCi0gICAgdGhlIHN0cmluZyAiR0NDIiAoaW1wbHlpbmcgdGhhdCB0aGlzIFB5dGhvbiB3YXMgYnVpbHQgd2l0aCBHQ0MpLCBvciB0aGUKLSAgICBpbnN0YWxsZWQgInB5Y29uZmlnLmgiIGNvbnRhaW5zIHRoZSBzdHJpbmcgIl9fR05VQ19fIi4KLSAgICAiIiIKLQotICAgICMgWFhYIHNpbmNlIHRoaXMgZnVuY3Rpb24gYWxzbyBjaGVja3Mgc3lzLnZlcnNpb24sIGl0J3Mgbm90IHN0cmljdGx5IGEKLSAgICAjICJweWNvbmZpZy5oIiBjaGVjayAtLSBzaG91bGQgcHJvYmFibHkgYmUgcmVuYW1lZC4uLgotCi0gICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwotICAgICMgaWYgc3lzLnZlcnNpb24gY29udGFpbnMgR0NDIHRoZW4gcHl0aG9uIHdhcyBjb21waWxlZCB3aXRoCi0gICAgIyBHQ0MsIGFuZCB0aGUgcHljb25maWcuaCBmaWxlIHNob3VsZCBiZSBPSwotICAgIGlmIHN5cy52ZXJzaW9uLmZpbmQoIkdDQyIpID49IDA6Ci0gICAgICAgIHJldHVybiAoQ09ORklHX0hfT0ssICJzeXMudmVyc2lvbiBtZW50aW9ucyAnR0NDJyIpCi0KLSAgICBmbiA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX2hfZmlsZW5hbWUoKQotICAgIHRyeToKLSAgICAgICAgIyBJdCB3b3VsZCBwcm9iYWJseSBiZXR0ZXIgdG8gcmVhZCBzaW5nbGUgbGluZXMgdG8gc2VhcmNoLgotICAgICAgICAjIEJ1dCB3ZSBkbyB0aGlzIG9ubHkgb25jZSwgYW5kIGl0IGlzIGZhc3QgZW5vdWdoCi0gICAgICAgIGYgPSBvcGVuKGZuKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzID0gZi5yZWFkKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjOgotICAgICAgICAjIGlmIHdlIGNhbid0IHJlYWQgdGhpcyBmaWxlLCB3ZSBjYW5ub3Qgc2F5IGl0IGlzIHdyb25nCi0gICAgICAgICMgdGhlIGNvbXBpbGVyIHdpbGwgY29tcGxhaW4gbGF0ZXIgYWJvdXQgdGhpcyBmaWxlIGFzIG1pc3NpbmcKLSAgICAgICAgcmV0dXJuIChDT05GSUdfSF9VTkNFUlRBSU4sCi0gICAgICAgICAgICAgICAgImNvdWxkbid0IHJlYWQgJyVzJzogJXMiICUgKGZuLCBleGMuc3RyZXJyb3IpKQotCi0gICAgZWxzZToKLSAgICAgICAgIyAicHljb25maWcuaCIgY29udGFpbnMgYW4gIiNpZmRlZiBfX0dOVUNfXyIgb3Igc29tZXRoaW5nIHNpbWlsYXIKLSAgICAgICAgaWYgcy5maW5kKCJfX0dOVUNfXyIpID49IDA6Ci0gICAgICAgICAgICByZXR1cm4gKENPTkZJR19IX09LLCAiJyVzJyBtZW50aW9ucyAnX19HTlVDX18nIiAlIGZuKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIChDT05GSUdfSF9OT1RPSywgIiclcycgZG9lcyBub3QgbWVudGlvbiAnX19HTlVDX18nIiAlIGZuKQotCi0KLWRlZiBnZXRfdmVyc2lvbnMoKToKLSAgICAiIiIgVHJ5IHRvIGZpbmQgb3V0IHRoZSB2ZXJzaW9ucyBvZiBnY2MgYW5kIGxkLgotICAgICAgICBJZiBub3QgcG9zc2libGUgaXQgcmV0dXJucyBOb25lIGZvciBpdC4KLSAgICAiIiIKLSAgICBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBTdHJpY3RWZXJzaW9uCi0gICAgZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZQotICAgIGltcG9ydCByZQotCi0gICAgZ2NjX2V4ZSA9IGZpbmRfZXhlY3V0YWJsZSgnZ2NjJykKLSAgICBpZiBnY2NfZXhlOgotICAgICAgICBvdXQgPSBvcy5wb3BlbihnY2NfZXhlICsgJyAtZHVtcHZlcnNpb24nLCdyJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0X3N0cmluZyA9IG91dC5yZWFkKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG91dC5jbG9zZSgpCi0gICAgICAgIHJlc3VsdCA9IHJlLnNlYXJjaCgnKFxkK1wuXGQrXC5cZCspJywgb3V0X3N0cmluZywgcmUuQVNDSUkpCi0gICAgICAgIGlmIHJlc3VsdDoKLSAgICAgICAgICAgIGdjY192ZXJzaW9uID0gU3RyaWN0VmVyc2lvbihyZXN1bHQuZ3JvdXAoMSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBnY2NfdmVyc2lvbiA9IE5vbmUKLSAgICBlbHNlOgotICAgICAgICBnY2NfdmVyc2lvbiA9IE5vbmUKLSAgICAjIEVNWCBsZCBoYXMgbm8gd2F5IG9mIHJlcG9ydGluZyB2ZXJzaW9uIG51bWJlciwgYW5kIHdlIHVzZSBHQ0MKLSAgICAjIGFueXdheSAtIHNvIHdlIGNhbiBsaW5rIE9NRiBETExzCi0gICAgbGRfdmVyc2lvbiA9IE5vbmUKLSAgICByZXR1cm4gKGdjY192ZXJzaW9uLCBsZF92ZXJzaW9uKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9lcnJvcnMucHkgYi9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weQppbmRleCBlYjEzYzk4Li44YjkzMDU5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weQpAQCAtMzUsOCArMzUsOCBAQAogCiBjbGFzcyBEaXN0dXRpbHNGaWxlRXJyb3IgKERpc3R1dGlsc0Vycm9yKToKICAgICAiIiJBbnkgcHJvYmxlbXMgaW4gdGhlIGZpbGVzeXN0ZW06IGV4cGVjdGVkIGZpbGUgbm90IGZvdW5kLCBldGMuCi0gICAgVHlwaWNhbGx5IHRoaXMgaXMgZm9yIHByb2JsZW1zIHRoYXQgd2UgZGV0ZWN0IGJlZm9yZSBJT0Vycm9yIG9yCi0gICAgT1NFcnJvciBjb3VsZCBiZSByYWlzZWQuIiIiCisgICAgVHlwaWNhbGx5IHRoaXMgaXMgZm9yIHByb2JsZW1zIHRoYXQgd2UgZGV0ZWN0IGJlZm9yZSBPU0Vycm9yCisgICAgY291bGQgYmUgcmFpc2VkLiIiIgogICAgIHBhc3MKIAogY2xhc3MgRGlzdHV0aWxzT3B0aW9uRXJyb3IgKERpc3R1dGlsc0Vycm9yKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZmlsZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKaW5kZXggOWJkZDE0ZS4uZjZlZDI5MCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKQEAgLTI3LDI2ICsyNywyNiBAQAogICAgIHRyeToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnNyYyA9IG9wZW4oc3JjLCAncmInKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigiY291bGQgbm90IG9wZW4gJyVzJzogJXMiICUgKHNyYywgZS5zdHJlcnJvcikpCiAKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZHN0KToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZHN0KQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGRlbGV0ZSAnJXMnOiAlcyIgJSAoZHN0LCBlLnN0cmVycm9yKSkKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmZHN0ID0gb3Blbihkc3QsICd3YicpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgJyVzJzogJXMiICUgKGRzdCwgZS5zdHJlcnJvcikpCiAKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBidWYgPSBmc3JjLnJlYWQoYnVmZmVyX3NpemUpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgcmVhZCBmcm9tICclcyc6ICVzIiAlIChzcmMsIGUuc3RyZXJyb3IpKQogCkBAIC01NSw3ICs1NSw3IEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZHN0LndyaXRlKGJ1ZikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnOiAlcyIgJSAoZHN0LCBlLnN0cmVycm9yKSkKICAgICBmaW5hbGx5OgpAQCAtMTkzLDcgKzE5Myw3IEBACiAgICAgY29weV9pdCA9IEZhbHNlCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoc3JjLCBkc3QpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgKG51bSwgbXNnKSA9IGUKICAgICAgICAgaWYgbnVtID09IGVycm5vLkVYREVWOgogICAgICAgICAgICAgY29weV9pdCA9IFRydWUKQEAgLTIwNSwxMSArMjA1LDExIEBACiAgICAgICAgIGNvcHlfZmlsZShzcmMsIGRzdCwgdmVyYm9zZT12ZXJib3NlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc3JjKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIChudW0sIG1zZykgPSBlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGRzdCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBtb3ZlICclcycgdG8gJyVzJyBieSBjb3B5L2RlbGV0ZTogIgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5CmluZGV4IGIzZjZjZTEuLjk2ODhmMjAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkKQEAgLTcyOSw3ICs3MjksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBtYW5pZmVzdF9maWxlCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIG1hbmlmZXN0X2YuY2xvc2UoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAjIC0tIE1pc2NlbGxhbmVvdXMgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zcGF3bi5weSBiL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKaW5kZXggZjU4YzU1Zi4uYjFjNWE0NCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9zcGF3bi5weQorKysgYi9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CkBAIC0zMiw4ICszMiw2IEBACiAgICAgICAgIF9zcGF3bl9wb3NpeChjbWQsIHNlYXJjaF9wYXRoLCBkcnlfcnVuPWRyeV9ydW4pCiAgICAgZWxpZiBvcy5uYW1lID09ICdudCc6CiAgICAgICAgIF9zcGF3bl9udChjbWQsIHNlYXJjaF9wYXRoLCBkcnlfcnVuPWRyeV9ydW4pCi0gICAgZWxpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICBfc3Bhd25fb3MyKGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49ZHJ5X3J1bikKICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKAogICAgICAgICAgICAgICAiZG9uJ3Qga25vdyBob3cgdG8gc3Bhd24gcHJvZ3JhbXMgb24gcGxhdGZvcm0gJyVzJyIgJSBvcy5uYW1lKQpAQCAtNzQsMjYgKzcyLDYgQEAKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0V4ZWNFcnJvcigKICAgICAgICAgICAgICAgICAgICJjb21tYW5kICclcycgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgKGNtZFswXSwgcmMpKQogCi1kZWYgX3NwYXduX29zMihjbWQsIHNlYXJjaF9wYXRoPTEsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKLSAgICBleGVjdXRhYmxlID0gY21kWzBdCi0gICAgaWYgc2VhcmNoX3BhdGg6Ci0gICAgICAgICMgZWl0aGVyIHdlIGZpbmQgb25lIG9yIGl0IHN0YXlzIHRoZSBzYW1lCi0gICAgICAgIGV4ZWN1dGFibGUgPSBmaW5kX2V4ZWN1dGFibGUoZXhlY3V0YWJsZSkgb3IgZXhlY3V0YWJsZQotICAgIGxvZy5pbmZvKCcgJy5qb2luKFtleGVjdXRhYmxlXSArIGNtZFsxOl0pKQotICAgIGlmIG5vdCBkcnlfcnVuOgotICAgICAgICAjIHNwYXdudiBmb3IgT1MvMiBFTVggcmVxdWlyZXMgYSBmdWxsIHBhdGggdG8gdGhlIC5leGUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmMgPSBvcy5zcGF3bnYob3MuUF9XQUlULCBleGVjdXRhYmxlLCBjbWQpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICMgdGhpcyBzZWVtcyB0byBoYXBwZW4gd2hlbiB0aGUgY29tbWFuZCBpc24ndCBmb3VuZAotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKAotICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJyVzJyBmYWlsZWQ6ICVzIiAlIChjbWRbMF0sIGV4Yy5hcmdzWy0xXSkpCi0gICAgICAgIGlmIHJjICE9IDA6Ci0gICAgICAgICAgICAjIGFuZCB0aGlzIHJlZmxlY3RzIHRoZSBjb21tYW5kIHJ1bm5pbmcgYnV0IGZhaWxpbmcKLSAgICAgICAgICAgIGxvZy5kZWJ1ZygiY29tbWFuZCAnJXMnIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzICVkIiAlIChjbWRbMF0sIHJjKSkKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0V4ZWNFcnJvcigKLSAgICAgICAgICAgICAgICAgICJjb21tYW5kICclcycgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgKGNtZFswXSwgcmMpKQotCiBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwogICAgIF9jZmdfdGFyZ2V0ID0gTm9uZQpAQCAtMTgwLDcgKzE1OCw3IEBACiAgICAgcGF0aHMgPSBwYXRoLnNwbGl0KG9zLnBhdGhzZXApCiAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChleGVjdXRhYmxlKQogCi0gICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIG9zLm5hbWUgPT0gJ29zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CisgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSBhbmQgKGV4dCAhPSAnLmV4ZScpOgogICAgICAgICBleGVjdXRhYmxlID0gZXhlY3V0YWJsZSArICcuZXhlJwogCiAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGV4ZWN1dGFibGUpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQppbmRleCBiOTQ3OTg4Li43NTUzN2RiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQpAQCAtMTE0LDggKzExNCw2IEBACiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiaW5jbHVkZSIsIHB5dGhvbl9kaXIpCiAgICAgZWxpZiBvcy5uYW1lID09ICJudCI6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiaW5jbHVkZSIpCi0gICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkluY2x1ZGUiKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAiSSBkb24ndCBrbm93IHdoZXJlIFB5dGhvbiBpbnN0YWxscyBpdHMgQyBoZWFkZXIgZmlsZXMgIgpAQCAtMTU3LDExICsxNTUsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXgKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpCi0gICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICBpZiBzdGFuZGFyZF9saWI6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikKICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKAogICAgICAgICAgICAgIkkgZG9uJ3Qga25vdyB3aGVyZSBQeXRob24gaW5zdGFsbHMgaXRzIGxpYnJhcnkgIgpAQCAtNDQyLDcgKzQzNSw3IEBACiAgICAgdHJ5OgogICAgICAgICBmaWxlbmFtZSA9IGdldF9tYWtlZmlsZV9maWxlbmFtZSgpCiAgICAgICAgIHBhcnNlX21ha2VmaWxlKGZpbGVuYW1lLCBnKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIG15X21zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGZpbGVuYW1lCiAgICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG15X21zZyA9IG15X21zZyArICIgKCVzKSIgJSBtc2cuc3RyZXJyb3IKQEAgLTQ1NCw3ICs0NDcsNyBAQAogICAgICAgICBmaWxlbmFtZSA9IGdldF9jb25maWdfaF9maWxlbmFtZSgpCiAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZmlsZToKICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19oKGZpbGUsIGcpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKICAgICAgICAgaWYgaGFzYXR0cihtc2csICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXlfbXNnID0gbXlfbXNnICsgIiAoJXMpIiAlIG1zZy5zdHJlcnJvcgpAQCAtNDkyLDcgKzQ4NSw2IEBACiAgICAgIyBYWFggaG1tbS4uIGEgbm9ybWFsIGluc3RhbGwgcHV0cyBpbmNsdWRlIGZpbGVzIGhlcmUKICAgICBnWydJTkNMVURFUFknXSA9IGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MCkKIAotICAgIGdbJ1NPJ10gPSAnLnB5ZCcKICAgICBnWydFWFRfU1VGRklYJ10gPSAnLnB5ZCcKICAgICBnWydFWEUnXSA9ICIuZXhlIgogICAgIGdbJ1ZFUlNJT04nXSA9IGdldF9weXRob25fdmVyc2lvbigpLnJlcGxhY2UoIi4iLCAiIikKQEAgLTUwMiwyNCArNDk0LDYgQEAKICAgICBfY29uZmlnX3ZhcnMgPSBnCiAKIAotZGVmIF9pbml0X29zMigpOgotICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgT1MvMiIiIgotICAgIGcgPSB7fQotICAgICMgc2V0IGJhc2ljIGluc3RhbGwgZGlyZWN0b3JpZXMKLSAgICBnWydMSUJERVNUJ10gPSBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW5kYXJkX2xpYj0xKQotICAgIGdbJ0JJTkxJQkRFU1QnXSA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MSwgc3RhbmRhcmRfbGliPTEpCi0KLSAgICAjIFhYWCBobW1tLi4gYSBub3JtYWwgaW5zdGFsbCBwdXRzIGluY2x1ZGUgZmlsZXMgaGVyZQotICAgIGdbJ0lOQ0xVREVQWSddID0gZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wKQotCi0gICAgZ1snU08nXSA9ICcucHlkJwotICAgIGdbJ0VYVF9TVUZGSVgnXSA9ICcucHlkJwotICAgIGdbJ0VYRSddID0gIi5leGUiCi0KLSAgICBnbG9iYWwgX2NvbmZpZ192YXJzCi0gICAgX2NvbmZpZ192YXJzID0gZwotCi0KIGRlZiBnZXRfY29uZmlnX3ZhcnMoKmFyZ3MpOgogICAgICIiIldpdGggbm8gYXJndW1lbnRzLCByZXR1cm4gYSBkaWN0aW9uYXJ5IG9mIGFsbCBjb25maWd1cmF0aW9uCiAgICAgdmFyaWFibGVzIHJlbGV2YW50IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4gIEdlbmVyYWxseSB0aGlzIGluY2x1ZGVzCkBAIC01NDQsNiArNTE4LDExIEBACiAgICAgICAgIF9jb25maWdfdmFyc1sncHJlZml4J10gPSBQUkVGSVgKICAgICAgICAgX2NvbmZpZ192YXJzWydleGVjX3ByZWZpeCddID0gRVhFQ19QUkVGSVgKIAorICAgICAgICAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBzZWUgaXNzdWUxOTU1NQorICAgICAgICBTTyA9IF9jb25maWdfdmFycy5nZXQoJ0VYVF9TVUZGSVgnKQorICAgICAgICBpZiBTTyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9jb25maWdfdmFyc1snU08nXSA9IFNPCisKICAgICAgICAgIyBBbHdheXMgY29udmVydCBzcmNkaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAogICAgICAgICBzcmNkaXIgPSBfY29uZmlnX3ZhcnMuZ2V0KCdzcmNkaXInLCBwcm9qZWN0X2Jhc2UpCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKQEAgLTU5NCw0ICs1NzMsNyBAQAogICAgIHJldHVybmVkIGJ5ICdnZXRfY29uZmlnX3ZhcnMoKScuICBFcXVpdmFsZW50IHRvCiAgICAgZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCiAgICAgIiIiCisgICAgaWYgbmFtZSA9PSAnU08nOgorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgd2FybmluZ3Mud2FybignU08gaXMgZGVwcmVjYXRlZCwgdXNlIEVYVF9TVUZGSVgnLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgcmV0dXJuIGdldF9jb25maWdfdmFycygpLmdldChuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9hcmNoaXZlX3V0aWwucHkKaW5kZXggZDNmYjI0YS4uMmQ3MmFmNCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5CkBAIC0xNiw2ICsxNiwxMyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QsIHBhdGNoCiAKIHRyeToKKyAgICBpbXBvcnQgZ3JwCisgICAgaW1wb3J0IHB3ZAorICAgIFVJRF9HSURfU1VQUE9SVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBGYWxzZQorCit0cnk6CiAgICAgaW1wb3J0IHppcGZpbGUKICAgICBaSVBfU1VQUE9SVCA9IFRydWUKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTc3LDcgKzg0LDcgQEAKIAogICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKICAgICAgICAgdW5pdHRlc3Quc2tpcFVubGVzcyhzcGxpdGRyaXZlKHRtcGRpcilbMF0gPT0gc3BsaXRkcml2ZSh0bXBkaXIyKVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU291cmNlIGFuZCB0YXJnZXQgc2hvdWxkIGJlIG9uIHNhbWUgZHJpdmUiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UgYW5kIHRhcmdldCBzaG91bGQgYmUgb24gc2FtZSBkcml2ZSIpCiAKICAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsIHRhcmdldF9uYW1lKQogCkBAIC0yNzUsNiArMjgyLDU4IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkZWwgQVJDSElWRV9GT1JNQVRTWyd4eHgnXQogCisgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlX293bmVyX2dyb3VwKHNlbGYpOgorICAgICAgICAjIHRlc3RpbmcgbWFrZV9hcmNoaXZlIHdpdGggb3duZXIgYW5kIGdyb3VwLCB3aXRoIHZhcmlvdXMgY29tYmluYXRpb25zCisgICAgICAgICMgdGhpcyB3b3JrcyBldmVuIGlmIHRoZXJlJ3Mgbm90IGdpZC91aWQgc3VwcG9ydAorICAgICAgICBpZiBVSURfR0lEX1NVUFBPUlQ6CisgICAgICAgICAgICBncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQorICAgICAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdyb3VwID0gb3duZXIgPSAncm9vdCcKKworICAgICAgICBiYXNlX2Rpciwgcm9vdF9kaXIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCkgLCAnYXJjaGl2ZScpCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIsIG93bmVyPW93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9Z3JvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj0na2poa2poa2pnJywgZ3JvdXA9J29paG9ob2gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFpMSUJfU1VQUE9SVCwgIlJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFVJRF9HSURfU1VQUE9SVCwgIlJlcXVpcmVzIGdycCBhbmQgcHdkIHN1cHBvcnQiKQorICAgIGRlZiB0ZXN0X3RhcmZpbGVfcm9vdF9vd25lcihzZWxmKToKKyAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KKyAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXJjaGl2ZV9uYW1lID0gbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX25hbWUpKQorCisgICAgICAgICMgbm93IGNoZWNrcyB0aGUgcmlnaHRzCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci5naWQsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEFyY2hpdmVVdGlsVGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKaW5kZXggMGFkMzJkNC4uYzhjY2RjMiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKQEAgLTEsNyArMSw2IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfZHVtYi4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCiBpbXBvcnQgc3lzCiBpbXBvcnQgemlwZmlsZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC03NSw4ICs3NCw2IEBACiAgICAgICAgICMgc2VlIHdoYXQgd2UgaGF2ZQogICAgICAgICBkaXN0X2NyZWF0ZWQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZGlzdCcpKQogICAgICAgICBiYXNlID0gIiVzLiVzLnppcCIgJSAoZGlzdC5nZXRfZnVsbG5hbWUoKSwgY21kLnBsYXRfbmFtZSkKLSAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgIGJhc2UgPSBiYXNlLnJlcGxhY2UoJzonLCAnLScpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0X2NyZWF0ZWQsIFtiYXNlXSkKIApAQCAtOTAsNyArODcsNyBAQAogICAgICAgICBjb250ZW50cyA9IHNvcnRlZChvcy5wYXRoLmJhc2VuYW1lKGZuKSBmb3IgZm4gaW4gY29udGVudHMpCiAgICAgICAgIHdhbnRlZCA9IFsnZm9vLTAuMS1weSVzLiVzLmVnZy1pbmZvJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLCAnZm9vLnB5J10KICAgICAgICAgaWYgbm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgotICAgICAgICAgICAgd2FudGVkLmFwcGVuZCgnZm9vLiVzLnB5YycgJSBpbXAuZ2V0X3RhZygpKQorICAgICAgICAgICAgd2FudGVkLmFwcGVuZCgnZm9vLiVzLnB5YycgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBzb3J0ZWQod2FudGVkKSkKIAogZGVmIHRlc3Rfc3VpdGUoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQppbmRleCAyY2U5ZDQ0Li5jOGY2Yjg5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5CkBAIC0yLDcgKzIsNiBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBpbXAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5IGltcG9ydCBidWlsZF9weQpAQCAtNjMsNyArNjIsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhweWNhY2hlX2RpcikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBweWNfZmlsZXMgPSBvcy5saXN0ZGlyKHB5Y2FjaGVfZGlyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiX19pbml0X18uJXMucHljIiAlIGltcC5nZXRfdGFnKCksIHB5Y19maWxlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9faW5pdF9fLiVzLnB5YyIgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBweWNfZmlsZXMpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9wYWNrYWdlX2RpcihzZWxmKToKICAgICAgICAgIyBTZWUgYnVncyAjMTY2ODU5Ni8jMTcyMDg5NwpAQCAtMTAyLDcgKzEwMiw4IEBACiAgICAgICAgIGZvdW5kID0gb3MubGlzdGRpcihjbWQuYnVpbGRfbGliKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnX19weWNhY2hlX18nLCAnYm9pbGVkZWdncy5weSddKQogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGNtZC5idWlsZF9saWIsICdfX3B5Y2FjaGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBbJ2JvaWxlZGVnZ3MuJXMucHljJyAlIGltcC5nZXRfdGFnKCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnYm9pbGVkZWdncy4lcy5weWMnICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ10pCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAnYnl0ZS1jb21waWxlIGRpc2FibGVkJykKICAgICBkZWYgdGVzdF9ieXRlX2NvbXBpbGVfb3B0aW1pemVkKHNlbGYpOgpAQCAtMTE5LDcgKzEyMCw4IEBACiAgICAgICAgIGZvdW5kID0gb3MubGlzdGRpcihjbWQuYnVpbGRfbGliKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnX19weWNhY2hlX18nLCAnYm9pbGVkZWdncy5weSddKQogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGNtZC5idWlsZF9saWIsICdfX3B5Y2FjaGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnYm9pbGVkZWdncy4lcy5weW8nICUgaW1wLmdldF90YWcoKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZvdW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2JvaWxlZGVnZ3MuJXMucHlvJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWddKQogCiAgICAgZGVmIHRlc3RfZGlyX2luX3BhY2thZ2VfZGF0YShzZWxmKToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXN0LnB5CmluZGV4IDYxYWM1N2QuLmI3ZmQzZmIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXN0LnB5CkBAIC0zOSw2ICszOSw3IEBACiAKIAogY2xhc3MgRGlzdHJpYnV0aW9uVGVzdENhc2Uoc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTIxMyw2ICsyMTQsMzQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGlzdC5hbm5vdW5jZSwgYXJncywga3dhcmdzKQogCiAKKyAgICBkZWYgdGVzdF9maW5kX2NvbmZpZ19maWxlc19kaXNhYmxlKHNlbGYpOgorICAgICAgICAjIFRpY2tldCAjMTE4MDogQWxsb3cgdXNlciB0byBkaXNhYmxlIHRoZWlyIGhvbWUgY29uZmlnIGZpbGUuCisgICAgICAgIHRlbXBfaG9tZSA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgIHVzZXJfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4odGVtcF9ob21lLCAiLnB5ZGlzdHV0aWxzLmNmZyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRlbXBfaG9tZSwgInB5ZGlzdHV0aWxzLmNmZyIpCisKKyAgICAgICAgd2l0aCBvcGVuKHVzZXJfZmlsZW5hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1tkaXN0dXRpbHNdXG4nKQorCisgICAgICAgIGRlZiBfZXhwYW5kZXIocGF0aCk6CisgICAgICAgICAgICByZXR1cm4gdGVtcF9ob21lCisKKyAgICAgICAgb2xkX2V4cGFuZGVyID0gb3MucGF0aC5leHBhbmR1c2VyCisgICAgICAgIG9zLnBhdGguZXhwYW5kdXNlciA9IF9leHBhbmRlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkID0gRGlzdHJpYnV0aW9uKCkKKyAgICAgICAgICAgIGFsbF9maWxlcyA9IGQuZmluZF9jb25maWdfZmlsZXMoKQorCisgICAgICAgICAgICBkID0gRGlzdHJpYnV0aW9uKGF0dHJzPXsnc2NyaXB0X2FyZ3MnOiBbJy0tbm8tdXNlci1jZmcnXX0pCisgICAgICAgICAgICBmaWxlcyA9IGQuZmluZF9jb25maWdfZmlsZXMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucGF0aC5leHBhbmR1c2VyID0gb2xkX2V4cGFuZGVyCisKKyAgICAgICAgIyBtYWtlIHN1cmUgLS1uby11c2VyLWNmZyBkaXNhYmxlcyB0aGUgdXNlciBjZmcgZmlsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhbGxfZmlsZXMpLTEsIGxlbihmaWxlcykpCisKIGNsYXNzIE1ldGFkYXRhVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weQppbmRleCBlZGU4OGU1Li4xOGUxZTU3IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weQpAQCAtMSw3ICsxLDYgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHNpdGUKQEAgLTk0LDcgKzkzLDcgQEAKIAogICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCkKIAotICAgICAgICBmb3Iga2V5IGluICgnbnRfdXNlcicsICd1bml4X3VzZXInLCAnb3MyX2hvbWUnKToKKyAgICAgICAgZm9yIGtleSBpbiAoJ250X3VzZXInLCAndW5peF91c2VyJyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgSU5TVEFMTF9TQ0hFTUVTKQogCiAgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ3h4J30pCkBAIC0xOTMsNyArMTkyLDggQEAKICAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgICAgIGZvdW5kID0gW29zLnBhdGguYmFzZW5hbWUobGluZSkgZm9yIGxpbmUgaW4gY29udGVudC5zcGxpdGxpbmVzKCldCi0gICAgICAgIGV4cGVjdGVkID0gWydoZWxsby5weScsICdoZWxsby4lcy5weWMnICUgaW1wLmdldF90YWcoKSwgJ3NheWhpJywKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ2hlbGxvLnB5JywgJ2hlbGxvLiVzLnB5YycgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLAorICAgICAgICAgICAgICAgICAgICAnc2F5aGknLAogICAgICAgICAgICAgICAgICAgICAnVU5LTk9XTi0wLjAuMC1weSVzLiVzLmVnZy1pbmZvJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBleHBlY3RlZCkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CmluZGV4IGQwZGZjYTAuLjQwZGQxYTkgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkKQEAgLTEsNyArMSw3IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9kYXRhLiIiIgogaW1wb3J0IHN5cwogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfbGliIGltcG9ydCBpbnN0YWxsX2xpYgpAQCAtNDQsOCArNDQsMTAgQEAKICAgICAgICAgZiA9IG9zLnBhdGguam9pbihwcm9qZWN0X2RpciwgJ2Zvby5weScpCiAgICAgICAgIHNlbGYud3JpdGVfZmlsZShmLCAnIyBweXRob24gZmlsZScpCiAgICAgICAgIGNtZC5ieXRlX2NvbXBpbGUoW2ZdKQotICAgICAgICBweWNfZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkKLSAgICAgICAgcHlvX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsIGRlYnVnX292ZXJyaWRlPUZhbHNlKQorICAgICAgICBweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCdmb28ucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPVRydWUpCisgICAgICAgIHB5b19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhweWNfZmlsZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhweW9fZmlsZSkpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQppbmRleCBjOTUyNDA2Li41YTA0ZTBkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CkBAIC0xNCw2ICsxNCwxMiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIFpMSUJfU1VQUE9SVCA9IEZhbHNlCiAKK3RyeToKKyAgICBpbXBvcnQgZ3JwCisgICAgaW1wb3J0IHB3ZAorICAgIFVJRF9HSURfU1VQUE9SVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBGYWxzZQogCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLnNkaXN0IGltcG9ydCBzZGlzdCwgc2hvd19mb3JtYXRzCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KQEAgLTQyMyw2ICs0MjksNTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZmlsZW5hbWVzKSwgWydmYWtlLTEuMCcsICdmYWtlLTEuMC9QS0ctSU5GTycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFrZS0xLjAvUkVBRE1FLm1hbnVhbCddKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoWkxJQl9TVVBQT1JULCAicmVxdWlyZXMgemxpYiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoVUlEX0dJRF9TVVBQT1JULCAiUmVxdWlyZXMgZ3JwIGFuZCBwd2Qgc3VwcG9ydCIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihmaW5kX2V4ZWN1dGFibGUoJ3RhcicpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAiVGhlIHRhciBjb21tYW5kIGlzIG5vdCBmb3VuZCIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihmaW5kX2V4ZWN1dGFibGUoJ2d6aXAnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBnemlwIGNvbW1hbmQgaXMgbm90IGZvdW5kIikKKyAgICBkZWYgdGVzdF9tYWtlX2Rpc3RyaWJ1dGlvbl9vd25lcl9ncm91cChzZWxmKToKKyAgICAgICAgIyBub3cgYnVpbGRpbmcgYSBzZGlzdAorICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQorCisgICAgICAgICMgY3JlYXRpbmcgYSBnenRhciBhbmQgc3BlY2lmeWluZyB0aGUgb3duZXIrZ3JvdXAKKyAgICAgICAgY21kLmZvcm1hdHMgPSBbJ2d6dGFyJ10KKyAgICAgICAgY21kLm93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIGNtZC5ncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgbWFraW5nIHN1cmUgd2UgaGF2ZSB0aGUgZ29vZCByaWdodHMKKyAgICAgICAgYXJjaGl2ZV9uYW1lID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JywgJ2Zha2UtMS4wLnRhci5neicpCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci5naWQsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKworICAgICAgICAjIGJ1aWxkaW5nIGEgc2Rpc3QgYWdhaW4KKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKKworICAgICAgICAjIGNyZWF0aW5nIGEgZ3p0YXIKKyAgICAgICAgY21kLmZvcm1hdHMgPSBbJ2d6dGFyJ10KKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICAjIG1ha2luZyBzdXJlIHdlIGhhdmUgdGhlIGdvb2QgcmlnaHRzCisgICAgICAgIGFyY2hpdmVfbmFtZSA9IGpvaW4oc2VsZi50bXBfZGlyLCAnZGlzdCcsICdmYWtlLTEuMC50YXIuZ3onKQorICAgICAgICBhcmNoaXZlID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSkKKworICAgICAgICAjIG5vdGUgdGhhdCB3ZSBhcmUgbm90IHRlc3RpbmcgdGhlIGdyb3VwIG93bmVyc2hpcCBoZXJlCisgICAgICAgICMgYmVjYXVzZSwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybXMgYW5kIHRoZSBjb250YWluZXIKKyAgICAgICAgIyByaWdodHMgKHNlZSAjNzQwOCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBhcmNoaXZlLmdldG1lbWJlcnMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci51aWQsIG9zLmdldHVpZCgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXJjaGl2ZS5jbG9zZSgpCisKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShTRGlzdFRlc3RDYXNlKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weQppbmRleCBhMWNiNDdkLi45NWZhOWRjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKQEAgLTEsMTYgKzEsMTQgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuc3lzY29uZmlnLiIiIgogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCi1pbXBvcnQgdGVzdAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKIGZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgZ2V0X2RlZmF1bHRfY29tcGlsZXIKIGZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgY2hlY2tfd2FybmluZ3MKIAotY2xhc3MgU3lzY29uZmlnVGVzdENhc2Uoc3VwcG9ydC5FbnZpcm9uR3VhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTeXNjb25maWdUZXN0Q2FzZShzdXBwb3J0LkVudmlyb25HdWFyZCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIoU3lzY29uZmlnVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKICAgICAgICAgc2VsZi5tYWtlZmlsZSA9IE5vbmUKQEAgLTMyLDcgKzMwLDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNvbmZpZ19oKSwgY29uZmlnX2gpCiAKICAgICBkZWYgdGVzdF9nZXRfcHl0aG9uX2xpYihzZWxmKToKLSAgICAgICAgbGliX2RpciA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigpCiAgICAgICAgICMgWFhYIGRvZXNuJ3Qgd29yayBvbiBMaW51eCB3aGVuIFB5dGhvbiB3YXMgbmV2ZXIgaW5zdGFsbGVkIGJlZm9yZQogICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIobGliX2RpciksIGxpYl9kaXIpCiAgICAgICAgICMgdGVzdCBmb3IgcHl0aG9ueHgubGliPwpAQCAtNjcsOCArNjQsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKFB5dGhvbl9oKSwgUHl0aG9uX2gpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3lzY29uZmlnLl9pc19weXRob25fc291cmNlX2RpcihzcmNkaXIpKQogICAgICAgICBlbGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5kaXJuYW1lKHN5c2NvbmZpZy5nZXRfbWFrZWZpbGVfZmlsZW5hbWUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShzeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAgICAgIHNyY2RpcikKIAogICAgIGRlZiB0ZXN0X3NyY2Rpcl9pbmRlcGVuZGVudF9vZl9jd2Qoc2VsZik6CiAgICAgICAgICMgc3JjZGlyIHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQpAQCAtMTI2LDEwICsxMjQsMTMgQEAKIAogICAgIGRlZiB0ZXN0X3N5c2NvbmZpZ19tb2R1bGUoc2VsZik6CiAgICAgICAgIGltcG9ydCBzeXNjb25maWcgYXMgZ2xvYmFsX3N5c2NvbmZpZwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpLCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMREZMQUdTJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDRkxBR1MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMREZMQUdTJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMREZMQUdTJykpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ1VTVE9NSVpFRF9PU1hfQ09NUElMRVInKSwnY29tcGlsZXIgZmxhZ3MgY3VzdG9taXplZCcpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NVU1RPTUlaRURfT1NYX0NPTVBJTEVSJyksCisgICAgICAgICAgICAgICAgICAgICAnY29tcGlsZXIgZmxhZ3MgY3VzdG9taXplZCcpCiAgICAgZGVmIHRlc3Rfc3lzY29uZmlnX2NvbXBpbGVyX3ZhcnMoc2VsZik6CiAgICAgICAgICMgT24gT1MgWCwgYmluYXJ5IGluc3RhbGxlcnMgc3VwcG9ydCBleHRlbnNpb24gbW9kdWxlIGJ1aWxkaW5nIG9uCiAgICAgICAgICMgdmFyaW91cyBsZXZlbHMgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2l0aCBkaWZmZXJpbmcgWGNvZGUKQEAgLTE0OCw5ICsxNDksMzAgQEAKICAgICAgICAgaW1wb3J0IHN5c2NvbmZpZyBhcyBnbG9iYWxfc3lzY29uZmlnCiAgICAgICAgIGlmIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ1VTVE9NSVpFRF9PU1hfQ09NUElMRVInKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2NvbXBpbGVyIGZsYWdzIGN1c3RvbWl6ZWQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xEU0hBUkVEJyksIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDQycpLCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NDJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xEU0hBUkVEJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NDJykpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT19kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyLCAnU08nKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09fdmFsdWUoc2VsZik6CisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX2luX3ZhcnMoc2VsZik6CisgICAgICAgIHZhcnMgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodmFyc1snU08nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzWydTTyddLCB2YXJzWydFWFRfU1VGRklYJ10pCiAKIAogZGVmIHRlc3Rfc3VpdGUoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CmluZGV4IDg1MzIzNjkuLmY1M2ViMjYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQpAQCAtMTI0LDExICsxMjQsMTIgQEAKICAgICAgICAgIyB3aGF0IGRpZCB3ZSBzZW5kID8KICAgICAgICAgaGVhZGVycyA9IGRpY3Qoc2VsZi5sYXN0X29wZW4ucmVxLmhlYWRlcnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVhZGVyc1snQ29udGVudC1sZW5ndGgnXSwgJzIwODcnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGVhZGVyc1snQ29udGVudC10eXBlJ10uc3RhcnRzd2l0aCgnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKQorICAgICAgICBjb250ZW50X3R5cGUgPSBoZWFkZXJzWydDb250ZW50LXR5cGUnXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29udGVudF90eXBlLnN0YXJ0c3dpdGgoJ211bHRpcGFydC9mb3JtLWRhdGEnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X21ldGhvZCgpLCAnUE9TVCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9mdWxsX3VybCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3h4eCcsIHNlbGYubGFzdF9vcGVuLnJlcS5kYXRhKQorICAgICAgICBleHBlY3RlZF91cmwgPSAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X2Z1bGxfdXJsKCksIGV4cGVjdGVkX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIneHh4JyBpbiBzZWxmLmxhc3Rfb3Blbi5yZXEuZGF0YSkKIAogICAgICAgICAjIFRoZSBQeVBJIHJlc3BvbnNlIGJvZHkgd2FzIGVjaG9lZAogICAgICAgICByZXN1bHRzID0gc2VsZi5nZXRfbG9ncyhJTkZPKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQppbmRleCAwMDIxOWNmLi41NDg4NjVjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQpAQCAtMjM2LDcgKzIzNiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9yb290LCAnYzpcXHJvb3QnLCAnaXRzXFxoZXJlJykKIAotICAgICAgICAjIFhYWCBwbGF0Zm9ybXMgdG8gYmUgY292ZXJlZDogb3MyLCBtYWMKKyAgICAgICAgIyBYWFggcGxhdGZvcm1zIHRvIGJlIGNvdmVyZWQ6IG1hYwogCiAgICAgZGVmIHRlc3RfY2hlY2tfZW52aXJvbihzZWxmKToKICAgICAgICAgdXRpbC5fZW52aXJvbl9jaGVja2VkID0gMApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy91dGlsLnB5CmluZGV4IDY3ZDgxNjYuLmVmYjM4MzQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3V0aWwucHkKQEAgLTYsNyArNiw3IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHJlCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCBzdHJpbmcKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgpAQCAtMTU0LDEyICsxNTQsNiBAQAogICAgICAgICAgICAgcGF0aCA9IHBhdGhbMTpdCiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGgpCiAKLSAgICBlbGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgIChkcml2ZSwgcGF0aCkgPSBvcy5wYXRoLnNwbGl0ZHJpdmUocGF0aG5hbWUpCi0gICAgICAgIGlmIHBhdGhbMF0gPT0gb3Muc2VwOgotICAgICAgICAgICAgcGF0aCA9IHBhdGhbMTpdCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGgpCi0KICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKCJub3RoaW5nIGtub3duIGFib3V0IHBsYXRmb3JtICclcyciICUgb3MubmFtZSkKIApAQCAtMjEzLDggKzIwNyw4IEBACiAKIAogZGVmIGdyb2tfZW52aXJvbm1lbnRfZXJyb3IgKGV4YywgcHJlZml4PSJlcnJvcjogIik6Ci0gICAgIiIiR2VuZXJhdGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZSBmcm9tIGFuIEVudmlyb25tZW50RXJyb3IgKElPRXJyb3Igb3IKLSAgICBPU0Vycm9yKSBleGNlcHRpb24gb2JqZWN0LiAgSGFuZGxlcyBQeXRob24gMS41LjEgYW5kIDEuNS4yIHN0eWxlcywgYW5kCisgICAgIiIiR2VuZXJhdGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZSBmcm9tIGFuIE9TRXJyb3IKKyAgICBleGNlcHRpb24gb2JqZWN0LiAgSGFuZGxlcyBQeXRob24gMS41LjEgYW5kIDEuNS4yIHN0eWxlcywgYW5kCiAgICAgZG9lcyB3aGF0IGl0IGNhbiB0byBkZWFsIHdpdGggZXhjZXB0aW9uIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIGEKICAgICBmaWxlbmFtZSAod2hpY2ggaGFwcGVucyB3aGVuIHRoZSBlcnJvciBpcyBkdWUgdG8gYSB0d28tZmlsZSBvcGVyYXRpb24sCiAgICAgc3VjaCBhcyAncmVuYW1lKCknIG9yICdsaW5rKCknLiAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBhcyBhIHN0cmluZwpAQCAtNDU5LDkgKzQ1MywxMCBAQAogICAgICAgICAgICAgIyAgIGNmaWxlIC0gYnl0ZS1jb21waWxlZCBmaWxlCiAgICAgICAgICAgICAjICAgZGZpbGUgLSBwdXJwb3J0ZWQgc291cmNlIGZpbGVuYW1lIChzYW1lIGFzICdmaWxlJyBieSBkZWZhdWx0KQogICAgICAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgZmlsZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQorICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKICAgICAgICAgICAgIGRmaWxlID0gZmlsZQogICAgICAgICAgICAgaWYgcHJlZml4OgogICAgICAgICAgICAgICAgIGlmIGZpbGVbOmxlbihwcmVmaXgpXSAhPSBwcmVmaXg6CmRpZmYgLS1naXQgYS9MaWIvZG9jdGVzdC5weSBiL0xpYi9kb2N0ZXN0LnB5CmluZGV4IDNmMGQ5ZDkuLmQyMTJhZDYgMTAwNjQ0Ci0tLSBhL0xpYi9kb2N0ZXN0LnB5CisrKyBiL0xpYi9kb2N0ZXN0LnB5CkBAIC02Miw2ICs2Miw3IEBACiAgICAgJ1JFUE9SVF9ORElGRicsCiAgICAgJ1JFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUnLAogICAgICdSRVBPUlRJTkdfRkxBR1MnLAorICAgICdGQUlMX0ZBU1QnLAogICAgICMgMS4gVXRpbGl0eSBGdW5jdGlvbnMKICAgICAjIDIuIEV4YW1wbGUgJiBEb2NUZXN0CiAgICAgJ0V4YW1wbGUnLApAQCAtOTIsNiArOTMsNyBAQAogXQogCiBpbXBvcnQgX19mdXR1cmVfXworaW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBsaW5lY2FjaGUKQEAgLTE1MCwxMSArMTUyLDEzIEBACiBSRVBPUlRfQ0RJRkYgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdSRVBPUlRfQ0RJRkYnKQogUkVQT1JUX05ESUZGID0gcmVnaXN0ZXJfb3B0aW9uZmxhZygnUkVQT1JUX05ESUZGJykKIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFJykKK0ZBSUxfRkFTVCA9IHJlZ2lzdGVyX29wdGlvbmZsYWcoJ0ZBSUxfRkFTVCcpCiAKIFJFUE9SVElOR19GTEFHUyA9IChSRVBPUlRfVURJRkYgfAogICAgICAgICAgICAgICAgICAgIFJFUE9SVF9DRElGRiB8CiAgICAgICAgICAgICAgICAgICAgUkVQT1JUX05ESUZGIHwKLSAgICAgICAgICAgICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFKQorICAgICAgICAgICAgICAgICAgIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgfAorICAgICAgICAgICAgICAgICAgIEZBSUxfRkFTVCkKIAogIyBTcGVjaWFsIHN0cmluZyBtYXJrZXJzIGZvciB1c2UgaW4gYHdhbnRgIHN0cmluZ3M6CiBCTEFOS0xJTkVfTUFSS0VSID0gJzxCTEFOS0xJTkU+JwpAQCAtMjEyLDcgKzIxNiw3IEBACiAgICAgaWYgbW9kdWxlX3JlbGF0aXZlOgogICAgICAgICBwYWNrYWdlID0gX25vcm1hbGl6ZV9tb2R1bGUocGFja2FnZSwgMykKICAgICAgICAgZmlsZW5hbWUgPSBfbW9kdWxlX3JlbGF0aXZlX3BhdGgocGFja2FnZSwgZmlsZW5hbWUpCi0gICAgICAgIGlmIGhhc2F0dHIocGFja2FnZSwgJ19fbG9hZGVyX18nKToKKyAgICAgICAgaWYgZ2V0YXR0cihwYWNrYWdlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgaGFzYXR0cihwYWNrYWdlLl9fbG9hZGVyX18sICdnZXRfZGF0YScpOgogICAgICAgICAgICAgICAgIGZpbGVfY29udGVudHMgPSBwYWNrYWdlLl9fbG9hZGVyX18uZ2V0X2RhdGEoZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgZmlsZV9jb250ZW50cyA9IGZpbGVfY29udGVudHMuZGVjb2RlKGVuY29kaW5nKQpAQCAtOTQwLDYgKzk0NCwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIG1vZHVsZSBpcyBpbnNwZWN0LmdldG1vZHVsZShvYmplY3QpCiAgICAgICAgIGVsaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLl9fZGljdF9fIGlzIG9iamVjdC5fX2dsb2JhbHNfXworICAgICAgICBlbGlmIGluc3BlY3QuaXNtZXRob2RkZXNjcmlwdG9yKG9iamVjdCk6CisgICAgICAgICAgICBpZiBoYXNhdHRyKG9iamVjdCwgJ19fb2JqY2xhc3NfXycpOgorICAgICAgICAgICAgICAgIG9ial9tb2QgPSBvYmplY3QuX19vYmpjbGFzc19fLl9fbW9kdWxlX18KKyAgICAgICAgICAgIGVsaWYgaGFzYXR0cihvYmplY3QsICdfX21vZHVsZV9fJyk6CisgICAgICAgICAgICAgICAgb2JqX21vZCA9IG9iamVjdC5fX21vZHVsZV9fCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlICMgW1hYXSBubyBlYXN5IHdheSB0byB0ZWxsIG90aGVyd2lzZQorICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5fX25hbWVfXyA9PSBvYmpfbW9kCiAgICAgICAgIGVsaWYgaW5zcGVjdC5pc2NsYXNzKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLl9fbmFtZV9fID09IG9iamVjdC5fX21vZHVsZV9fCiAgICAgICAgIGVsaWYgaGFzYXR0cihvYmplY3QsICdfX21vZHVsZV9fJyk6CkBAIC05NzIsNyArOTg0LDcgQEAKICAgICAgICAgICAgIGZvciB2YWxuYW1lLCB2YWwgaW4gb2JqLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgdmFsbmFtZSA9ICclcy4lcycgJSAobmFtZSwgdmFsbmFtZSkKICAgICAgICAgICAgICAgICAjIFJlY3Vyc2UgdG8gZnVuY3Rpb25zICYgY2xhc3Nlcy4KLSAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNmdW5jdGlvbih2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpKSBhbmQKKyAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNyb3V0aW5lKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkpIGFuZAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9mcm9tX21vZHVsZShtb2R1bGUsIHZhbCkpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maW5kKHRlc3RzLCB2YWwsIHZhbG5hbWUsIG1vZHVsZSwgc291cmNlX2xpbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JzLCBzZWVuKQpAQCAtOTg0LDkgKzk5Niw4IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkRvY1Rlc3RGaW5kZXIuZmluZDogX190ZXN0X18ga2V5cyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc3RyaW5nczogJXIiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZSh2YWxuYW1lKSwpKQotICAgICAgICAgICAgICAgIGlmIG5vdCAoaW5zcGVjdC5pc2Z1bmN0aW9uKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuaXNtZXRob2QodmFsKSBvciBpbnNwZWN0LmlzbW9kdWxlKHZhbCkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UodmFsLCBzdHIpKToKKyAgICAgICAgICAgICAgICBpZiBub3QgKGluc3BlY3QuaXNyb3V0aW5lKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuaXNtb2R1bGUodmFsKSBvciBpc2luc3RhbmNlKHZhbCwgc3RyKSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkRvY1Rlc3RGaW5kZXIuZmluZDogX190ZXN0X18gdmFsdWVzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzdHJpbmdzLCBmdW5jdGlvbnMsIG1ldGhvZHMsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3Nlcywgb3IgbW9kdWxlczogJXIiICUKQEAgLTEwMDUsNyArMTAxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGdldGF0dHIob2JqLCB2YWxuYW1lKS5fX2Z1bmNfXwogCiAgICAgICAgICAgICAgICAgIyBSZWN1cnNlIHRvIG1ldGhvZHMsIHByb3BlcnRpZXMsIGFuZCBuZXN0ZWQgY2xhc3Nlcy4KLSAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNmdW5jdGlvbih2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpIG9yCisgICAgICAgICAgICAgICAgaWYgKChpbnNwZWN0Lmlzcm91dGluZSh2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpIG9yCiAgICAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZSh2YWwsIHByb3BlcnR5KSkgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnJvbV9tb2R1bGUobW9kdWxlLCB2YWwpKToKICAgICAgICAgICAgICAgICAgICAgdmFsbmFtZSA9ICclcy4lcycgJSAobmFtZSwgdmFsbmFtZSkKQEAgLTEzNjcsNiArMTM3OCw5IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgKCJ1bmtub3duIG91dGNvbWUiLCBvdXRjb21lKQogCisgICAgICAgICAgICBpZiBmYWlsdXJlcyBhbmQgc2VsZi5vcHRpb25mbGFncyAmIEZBSUxfRkFTVDoKKyAgICAgICAgICAgICAgICBicmVhaworCiAgICAgICAgICMgUmVzdG9yZSB0aGUgb3B0aW9uIGZsYWdzIChpbiBjYXNlIHRoZXkgd2VyZSBtb2RpZmllZCkKICAgICAgICAgc2VsZi5vcHRpb25mbGFncyA9IG9yaWdpbmFsX29wdGlvbmZsYWdzCiAKQEAgLTIzMDgsNiArMjMyMiwxMiBAQAogICAgIF9fc3RyX18gPSBzaG9ydERlc2NyaXB0aW9uCiAKIAorY2xhc3MgX0RvY1Rlc3RTdWl0ZSh1bml0dGVzdC5UZXN0U3VpdGUpOgorCisgICAgZGVmIF9yZW1vdmVUZXN0QXRJbmRleChzZWxmLCBpbmRleCk6CisgICAgICAgIHBhc3MKKworCiBkZWYgRG9jVGVzdFN1aXRlKG1vZHVsZT1Ob25lLCBnbG9icz1Ob25lLCBleHRyYWdsb2JzPU5vbmUsIHRlc3RfZmluZGVyPU5vbmUsCiAgICAgICAgICAgICAgICAgICoqb3B0aW9ucyk6CiAgICAgIiIiCkBAIC0yMzUzLDcgKzIzNzMsNyBAQAogCiAgICAgaWYgbm90IHRlc3RzIGFuZCBzeXMuZmxhZ3Mub3B0aW1pemUgPj0yOgogICAgICAgICAjIFNraXAgZG9jdGVzdHMgd2hlbiBydW5uaW5nIHdpdGggLU8yCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKICAgICAgICAgc3VpdGUuYWRkVGVzdChTa2lwRG9jVGVzdENhc2UobW9kdWxlKSkKICAgICAgICAgcmV0dXJuIHN1aXRlCiAgICAgZWxpZiBub3QgdGVzdHM6CkBAIC0yMzY3LDcgKzIzODcsNyBAQAogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1vZHVsZSwgImhhcyBubyBkb2NzdHJpbmdzIikKIAogICAgIHRlc3RzLnNvcnQoKQotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZSA9IF9Eb2NUZXN0U3VpdGUoKQogCiAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CiAgICAgICAgIGlmIGxlbih0ZXN0LmV4YW1wbGVzKSA9PSAwOgpAQCAtMjQ3Nyw3ICsyNDk3LDcgQEAKICAgICBlbmNvZGluZwogICAgICAgQW4gZW5jb2RpbmcgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY29udmVydCB0aGUgZmlsZXMgdG8gdW5pY29kZS4KICAgICAiIiIKLSAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKIAogICAgICMgV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQgX25vcm1hbGl6ZV9tb2R1bGUgaXMgY2FsbGVkIGF0IHRoZSByaWdodAogICAgICMgbGV2ZWwuICBJZiBpdCB3ZXJlIGNhbGxlZCBpbiBEb2NGaWxlVGVzdCwgdGhlbiB0aGlzIGZ1bmN0aW9uCkBAIC0yNzI3LDEzICsyNzQ3LDMwIEBACiAKIAogZGVmIF90ZXN0KCk6Ci0gICAgdGVzdGZpbGVzID0gW2FyZyBmb3IgYXJnIGluIHN5cy5hcmd2WzE6XSBpZiBhcmcgYW5kIGFyZ1swXSAhPSAnLSddCi0gICAgaWYgbm90IHRlc3RmaWxlczoKLSAgICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCi0gICAgICAgIGlmICdfX2xvYWRlcl9fJyBpbiBnbG9iYWxzKCk6ICAgICAgICAgICMgcHl0aG9uIC1tCi0gICAgICAgICAgICBuYW1lLCBfID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKQotICAgICAgICBwcmludCgidXNhZ2U6IHswfSBbLXZdIGZpbGUgLi4uIi5mb3JtYXQobmFtZSkpCi0gICAgICAgIHJldHVybiAyCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ImRvY3Rlc3QgcnVubmVyIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgdmVyeSB2ZXJib3NlIG91dHB1dCBmb3IgYWxsIHRlc3RzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW9wdGlvbicsIGFjdGlvbj0nYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9T1BUSU9ORkxBR1NfQllfTkFNRS5rZXlzKCksIGRlZmF1bHQ9W10sCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnc3BlY2lmeSBhIGRvY3Rlc3Qgb3B0aW9uIGZsYWcgdG8gYXBwbHknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHRvIHRoZSB0ZXN0IHJ1bjsgbWF5IGJlIHNwZWNpZmllZCBtb3JlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyB0aGFuIG9uY2UgdG8gYXBwbHkgbXVsdGlwbGUgb3B0aW9ucycpKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmFpbC1mYXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdzdG9wIHJ1bm5pbmcgdGVzdHMgYWZ0ZXIgZmlyc3QgZmFpbHVyZSAodGhpcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaXMgYSBzaG9ydGhhbmQgZm9yIC1vIEZBSUxfRkFTVCwgYW5kIGlzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgLW8gb3B0aW9ucyknKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmaWxlJywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZmlsZSBjb250YWluaW5nIHRoZSB0ZXN0cyB0byBydW4nKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgdGVzdGZpbGVzID0gYXJncy5maWxlCisgICAgIyBWZXJib3NlIHVzZWQgdG8gYmUgaGFuZGxlZCBieSB0aGUgImluc3BlY3QgYXJndiIgbWFnaWMgaW4gRG9jVGVzdFJ1bm5lciwKKyAgICAjIGJ1dCBzaW5jZSB3ZSBhcmUgdXNpbmcgYXJncGFyc2Ugd2UgYXJlIHBhc3NpbmcgaXQgbWFudWFsbHkgbm93LgorICAgIHZlcmJvc2UgPSBhcmdzLnZlcmJvc2UKKyAgICBvcHRpb25zID0gMAorICAgIGZvciBvcHRpb24gaW4gYXJncy5vcHRpb246CisgICAgICAgIG9wdGlvbnMgfD0gT1BUSU9ORkxBR1NfQllfTkFNRVtvcHRpb25dCisgICAgaWYgYXJncy5mYWlsX2Zhc3Q6CisgICAgICAgIG9wdGlvbnMgfD0gRkFJTF9GQVNUCiAgICAgZm9yIGZpbGVuYW1lIGluIHRlc3RmaWxlczoKICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5weSIpOgogICAgICAgICAgICAgIyBJdCBpcyBhIG1vZHVsZSAtLSBpbnNlcnQgaXRzIGRpciBpbnRvIHN5cy5wYXRoIGFuZCB0cnkgdG8KQEAgLTI3NDMsOSArMjc4MCwxMCBAQAogICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGRpcm5hbWUpCiAgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhmaWxlbmFtZVs6LTNdKQogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCi0gICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3Rtb2QobSkKKyAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdG1vZChtLCB2ZXJib3NlPXZlcmJvc2UsIG9wdGlvbmZsYWdzPW9wdGlvbnMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UpCisgICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT12ZXJib3NlLCBvcHRpb25mbGFncz1vcHRpb25zKQogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgcmV0dXJuIDAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weSBiL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQppbmRleCAwMzY5ZTAxLi4wNGFiODRjIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKKysrIGIvTGliL2VtYWlsL19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CkBAIC0zNjgsOCArMzY4LDcgQEAKICAgICAgICAgICAgICAgICB5aWVsZCAoaW5kZW50ICsgJyAgICAhISBpbnZhbGlkIGVsZW1lbnQgaW4gdG9rZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaXN0OiB7IXJ9Jy5mb3JtYXQodG9rZW4pKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB0b2tlbi5fcHAoaW5kZW50KycgICAgJyk6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHRva2VuLl9wcChpbmRlbnQrJyAgICAnKQogICAgICAgICBpZiBzZWxmLmRlZmVjdHM6CiAgICAgICAgICAgICBleHRyYSA9ICcgRGVmZWN0czoge30nLmZvcm1hdChzZWxmLmRlZmVjdHMpCiAgICAgICAgIGVsc2U6CkBAIC0xMzE1LDI0ICsxMzE0LDIyIEBACiAjIFBhcnNlcgogIwogCi0iIiJQYXJzZSBzdHJpbmdzIGFjY29yZGluZyB0byBSRkM4MjIvMjA0Ny8yODIyLzUzMjIgcnVsZXMuCi0KLVRoaXMgaXMgYSBzdGF0ZWxlc3MgcGFyc2VyLiAgRWFjaCBnZXRfWFhYIGZ1bmN0aW9uIGFjY2VwdHMgYSBzdHJpbmcgYW5kCi1yZXR1cm5zIGVpdGhlciBhIFRlcm1pbmFsIG9yIGEgVG9rZW5MaXN0IHJlcHJlc2VudGluZyB0aGUgUkZDIG9iamVjdCBuYW1lZAotYnkgdGhlIG1ldGhvZCBhbmQgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIHVucGFyc2VkIGNoYXJhY3RlcnMKLWZyb20gdGhlIGlucHV0LiAgVGh1cyBhIHBhcnNlciBtZXRob2QgY29uc3VtZXMgdGhlIG5leHQgc3ludGFjdGljIGNvbnN0cnVjdAotb2YgYSBnaXZlbiB0eXBlIGFuZCByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjb25zdHJ1Y3QgcGx1cyB0aGUKLXVucGFyc2VkIHJlbWFpbmRlciBvZiB0aGUgaW5wdXQgc3RyaW5nLgotCi1Gb3IgZXhhbXBsZSwgaWYgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBzdHJ1Y3R1cmVkIGhlYWRlciBpcyBhICdwaHJhc2UnLAotdGhlbjoKLQotICAgIHBocmFzZSwgdmFsdWUgPSBnZXRfcGhyYXNlKHZhbHVlKQotCi1yZXR1cm5zIHRoZSBjb21wbGV0ZSBwaHJhc2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyB2YWx1ZSwgcGx1cyBhbnkKLWNoYXJhY3RlcnMgbGVmdCBpbiB0aGUgc3RyaW5nIGFmdGVyIHRoZSBwaHJhc2UgaXMgcmVtb3ZlZC4KLQotIiIiCisjIFBhcnNlIHN0cmluZ3MgYWNjb3JkaW5nIHRvIFJGQzgyMi8yMDQ3LzI4MjIvNTMyMiBydWxlcy4KKyMKKyMgVGhpcyBpcyBhIHN0YXRlbGVzcyBwYXJzZXIuICBFYWNoIGdldF9YWFggZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBhbmQKKyMgcmV0dXJucyBlaXRoZXIgYSBUZXJtaW5hbCBvciBhIFRva2VuTGlzdCByZXByZXNlbnRpbmcgdGhlIFJGQyBvYmplY3QgbmFtZWQKKyMgYnkgdGhlIG1ldGhvZCBhbmQgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIHVucGFyc2VkIGNoYXJhY3RlcnMKKyMgZnJvbSB0aGUgaW5wdXQuICBUaHVzIGEgcGFyc2VyIG1ldGhvZCBjb25zdW1lcyB0aGUgbmV4dCBzeW50YWN0aWMgY29uc3RydWN0CisjIG9mIGEgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgY29uc3RydWN0IHBsdXMgdGhlCisjIHVucGFyc2VkIHJlbWFpbmRlciBvZiB0aGUgaW5wdXQgc3RyaW5nLgorIworIyBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBzdHJ1Y3R1cmVkIGhlYWRlciBpcyBhICdwaHJhc2UnLAorIyB0aGVuOgorIworIyAgICAgcGhyYXNlLCB2YWx1ZSA9IGdldF9waHJhc2UodmFsdWUpCisjCisjIHJldHVybnMgdGhlIGNvbXBsZXRlIHBocmFzZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIHZhbHVlLCBwbHVzIGFueQorIyBjaGFyYWN0ZXJzIGxlZnQgaW4gdGhlIHN0cmluZyBhZnRlciB0aGUgcGhyYXNlIGlzIHJlbW92ZWQuCiAKIF93c3Bfc3BsaXR0ZXIgPSByZS5jb21waWxlKHInKFt7fV0rKScuZm9ybWF0KCcnLmpvaW4oV1NQKSkpLnNwbGl0CiBfbm9uX2F0b21fZW5kX21hdGNoZXIgPSByZS5jb21waWxlKHIiW157fV0rIi5mb3JtYXQoCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvY29udGVudG1hbmFnZXIucHkgYi9MaWIvZW1haWwvY29udGVudG1hbmFnZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2MzY1MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbWFpbC9jb250ZW50bWFuYWdlci5weQpAQCAtMCwwICsxLDI0OSBAQAoraW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgZW1haWwuY2hhcnNldAoraW1wb3J0IGVtYWlsLm1lc3NhZ2UKK2ltcG9ydCBlbWFpbC5lcnJvcnMKK2Zyb20gZW1haWwgaW1wb3J0IHF1b3ByaW1pbWUKKworY2xhc3MgQ29udGVudE1hbmFnZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X2hhbmRsZXJzID0ge30KKyAgICAgICAgc2VsZi5zZXRfaGFuZGxlcnMgPSB7fQorCisgICAgZGVmIGFkZF9nZXRfaGFuZGxlcihzZWxmLCBrZXksIGhhbmRsZXIpOgorICAgICAgICBzZWxmLmdldF9oYW5kbGVyc1trZXldID0gaGFuZGxlcgorCisgICAgZGVmIGdldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICBjb250ZW50X3R5cGUgPSBtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpCisgICAgICAgIGlmIGNvbnRlbnRfdHlwZSBpbiBzZWxmLmdldF9oYW5kbGVyczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9oYW5kbGVyc1tjb250ZW50X3R5cGVdKG1zZywgKmFyZ3MsICoqa3cpCisgICAgICAgIG1haW50eXBlID0gbXNnLmdldF9jb250ZW50X21haW50eXBlKCkKKyAgICAgICAgaWYgbWFpbnR5cGUgaW4gc2VsZi5nZXRfaGFuZGxlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfaGFuZGxlcnNbbWFpbnR5cGVdKG1zZywgKmFyZ3MsICoqa3cpCisgICAgICAgIGlmICcnIGluIHNlbGYuZ2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2hhbmRsZXJzWycnXShtc2csICphcmdzLCAqKmt3KQorICAgICAgICByYWlzZSBLZXlFcnJvcihjb250ZW50X3R5cGUpCisKKyAgICBkZWYgYWRkX3NldF9oYW5kbGVyKHNlbGYsIHR5cGVrZXksIGhhbmRsZXIpOgorICAgICAgICBzZWxmLnNldF9oYW5kbGVyc1t0eXBla2V5XSA9IGhhbmRsZXIKKworICAgIGRlZiBzZXRfY29udGVudChzZWxmLCBtc2csIG9iaiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBpZiBtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgICMgWFhYOiBpcyB0aGlzIGVycm9yIGEgZ29vZCBpZGVhIG9yIG5vdD8gIFdlIGNhbiByZW1vdmUgaXQgbGF0ZXIsCisgICAgICAgICAgICAjIGJ1dCB3ZSBjYW4ndCBhZGQgaXQgbGF0ZXIsIHNvIGRvIGl0IGZvciBub3cuCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNldF9jb250ZW50IG5vdCB2YWxpZCBvbiBtdWx0aXBhcnQiKQorICAgICAgICBoYW5kbGVyID0gc2VsZi5fZmluZF9zZXRfaGFuZGxlcihtc2csIG9iaikKKyAgICAgICAgbXNnLmNsZWFyX2NvbnRlbnQoKQorICAgICAgICBoYW5kbGVyKG1zZywgb2JqLCAqYXJncywgKiprdykKKworICAgIGRlZiBfZmluZF9zZXRfaGFuZGxlcihzZWxmLCBtc2csIG9iaik6CisgICAgICAgIGZ1bGxfcGF0aF9mb3JfZXJyb3IgPSBOb25lCisgICAgICAgIGZvciB0eXAgaW4gdHlwZShvYmopLl9fbXJvX186CisgICAgICAgICAgICBpZiB0eXAgaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW3R5cF0KKyAgICAgICAgICAgIHFuYW1lID0gdHlwLl9fcXVhbG5hbWVfXworICAgICAgICAgICAgbW9kbmFtZSA9IGdldGF0dHIodHlwLCAnX19tb2R1bGVfXycsICcnKQorICAgICAgICAgICAgZnVsbF9wYXRoID0gJy4nLmpvaW4oKG1vZG5hbWUsIHFuYW1lKSkgaWYgbW9kbmFtZSBlbHNlIHFuYW1lCisgICAgICAgICAgICBpZiBmdWxsX3BhdGhfZm9yX2Vycm9yIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZnVsbF9wYXRoX2Zvcl9lcnJvciA9IGZ1bGxfcGF0aAorICAgICAgICAgICAgaWYgZnVsbF9wYXRoIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1tmdWxsX3BhdGhdCisgICAgICAgICAgICBpZiBxbmFtZSBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbcW5hbWVdCisgICAgICAgICAgICBuYW1lID0gdHlwLl9fbmFtZV9fCisgICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1tuYW1lXQorICAgICAgICBpZiBOb25lIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW05vbmVdCisgICAgICAgIHJhaXNlIEtleUVycm9yKGZ1bGxfcGF0aF9mb3JfZXJyb3IpCisKKworcmF3X2RhdGFfbWFuYWdlciA9IENvbnRlbnRNYW5hZ2VyKCkKKworCitkZWYgZ2V0X3RleHRfY29udGVudChtc2csIGVycm9ycz0ncmVwbGFjZScpOgorICAgIGNvbnRlbnQgPSBtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpCisgICAgY2hhcnNldCA9IG1zZy5nZXRfcGFyYW0oJ2NoYXJzZXQnLCAnQVNDSUknKQorICAgIHJldHVybiBjb250ZW50LmRlY29kZShjaGFyc2V0LCBlcnJvcnM9ZXJyb3JzKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIoJ3RleHQnLCBnZXRfdGV4dF9jb250ZW50KQorCisKK2RlZiBnZXRfbm9uX3RleHRfY29udGVudChtc2cpOgorICAgIHJldHVybiBtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpCitmb3IgbWFpbnR5cGUgaW4gJ2F1ZGlvIGltYWdlIHZpZGVvIGFwcGxpY2F0aW9uJy5zcGxpdCgpOgorICAgIHJhd19kYXRhX21hbmFnZXIuYWRkX2dldF9oYW5kbGVyKG1haW50eXBlLCBnZXRfbm9uX3RleHRfY29udGVudCkKKworCitkZWYgZ2V0X21lc3NhZ2VfY29udGVudChtc2cpOgorICAgIHJldHVybiBtc2cuZ2V0X3BheWxvYWQoMCkKK2ZvciBzdWJ0eXBlIGluICdyZmM4MjIgZXh0ZXJuYWwtYm9keScuc3BsaXQoKToKKyAgICByYXdfZGF0YV9tYW5hZ2VyLmFkZF9nZXRfaGFuZGxlcignbWVzc2FnZS8nK3N1YnR5cGUsIGdldF9tZXNzYWdlX2NvbnRlbnQpCisKKworZGVmIGdldF9hbmRfZml4dXBfdW5rbm93bl9tZXNzYWdlX2NvbnRlbnQobXNnKToKKyAgICAjIElmIHdlIGRvbid0IHVuZGVyc3RhbmQgYSBtZXNzYWdlIHN1YnR5cGUsIHdlIGFyZSBzdXBwb3NlZCB0byB0cmVhdCBpdCBhcworICAgICMgaWYgaXQgd2VyZSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0sIHBlcgorICAgICMgdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ2I3NlY3Rpb24tNS4yLjQuICBGZWVkcGFyc2VyIGRvZXNuJ3QgZG8gdGhhdCwKKyAgICAjIHNvIGRvIG91ciBiZXN0IHRvIGZpeCB0aGluZ3MgdXAuICBOb3RlIHRoYXQgaXQgaXMgKm5vdCogYXBwcm9wcmlhdGUgdG8KKyAgICAjIG1vZGVsIG1lc3NhZ2UvcGFydGlhbCBjb250ZW50IGFzIE1lc3NhZ2Ugb2JqZWN0cywgc28gdGhleSBhcmUgaGFuZGxlZAorICAgICMgaGVyZSBhcyB3ZWxsLiAgKEhvdyB0byByZWFzc2VtYmxlIHRoZW0gaXMgb3V0IG9mIHNjb3BlIGZvciB0aGlzIGNvbW1lbnQgOikKKyAgICByZXR1cm4gYnl0ZXMobXNnLmdldF9wYXlsb2FkKDApKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIoJ21lc3NhZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2FuZF9maXh1cF91bmtub3duX21lc3NhZ2VfY29udGVudCkKKworCitkZWYgX3ByZXBhcmVfc2V0KG1zZywgbWFpbnR5cGUsIHN1YnR5cGUsIGhlYWRlcnMpOgorICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAnLycuam9pbigobWFpbnR5cGUsIHN1YnR5cGUpKQorICAgIGlmIGhlYWRlcnM6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGhlYWRlcnNbMF0sICduYW1lJyk6CisgICAgICAgICAgICBtcCA9IG1zZy5wb2xpY3kKKyAgICAgICAgICAgIGhlYWRlcnMgPSBbbXAuaGVhZGVyX2ZhY3RvcnkoKm1wLmhlYWRlcl9zb3VyY2VfcGFyc2UoW2hlYWRlcl0pKQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgaGVhZGVyIGluIGhlYWRlcnNdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBoZWFkZXIgaW4gaGVhZGVyczoKKyAgICAgICAgICAgICAgICBpZiBoZWFkZXIuZGVmZWN0czoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgaGVhZGVyLmRlZmVjdHNbMF0KKyAgICAgICAgICAgICAgICBtc2dbaGVhZGVyLm5hbWVdID0gaGVhZGVyCisgICAgICAgIGV4Y2VwdCBlbWFpbC5lcnJvcnMuSGVhZGVyRGVmZWN0IGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgaGVhZGVyOiB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZm9sZChwb2xpY3k9bXNnLnBvbGljeSkpKSBmcm9tIGV4YworCisKK2RlZiBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcyk6CisgICAgaWYgZGlzcG9zaXRpb24gaXMgTm9uZSBhbmQgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIGRpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnCisgICAgaWYgZGlzcG9zaXRpb24gaXMgbm90IE5vbmU6CisgICAgICAgIG1zZ1snQ29udGVudC1EaXNwb3NpdGlvbiddID0gZGlzcG9zaXRpb24KKyAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgbXNnLnNldF9wYXJhbSgnZmlsZW5hbWUnLAorICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0nQ29udGVudC1EaXNwb3NpdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZT1UcnVlKQorICAgIGlmIGNpZCBpcyBub3QgTm9uZToKKyAgICAgICAgbXNnWydDb250ZW50LUlEJ10gPSBjaWQKKyAgICBpZiBwYXJhbXMgaXMgbm90IE5vbmU6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHBhcmFtcy5pdGVtcygpOgorICAgICAgICAgICAgbXNnLnNldF9wYXJhbShrZXksIHZhbHVlKQorCisKKyMgWFhYOiBUaGlzIGlzIGEgY2xlYW5lZC11cCB2ZXJzaW9uIG9mIGJhc2U2NG1pbWUuYm9keV9lbmNvZGUuICBJdCB3b3VsZAorIyBiZSBuaWNlIHRvIGRyb3AgYm90aCB0aGlzIGFuZCBxdW9wcmltaW1lLmJvZHlfZW5jb2RlIGluIGZhdm9yIG9mCisjIGVuaGFuY2VkIGJpbmFzY2lpIHJvdXRpbmVzIHRoYXQgYWNjZXB0ZWQgYSBtYXhfbGluZV9sZW5ndGggcGFyYW1ldGVyLgorZGVmIF9lbmNvZGVfYmFzZTY0KGRhdGEsIG1heF9saW5lX2xlbmd0aCk6CisgICAgZW5jb2RlZF9saW5lcyA9IFtdCisgICAgdW5lbmNvZGVkX2J5dGVzX3Blcl9saW5lID0gbWF4X2xpbmVfbGVuZ3RoICogMyAvLyA0CisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCB1bmVuY29kZWRfYnl0ZXNfcGVyX2xpbmUpOgorICAgICAgICB0aGlzbGluZSA9IGRhdGFbaTppK3VuZW5jb2RlZF9ieXRlc19wZXJfbGluZV0KKyAgICAgICAgZW5jb2RlZF9saW5lcy5hcHBlbmQoYmluYXNjaWkuYjJhX2Jhc2U2NCh0aGlzbGluZSkuZGVjb2RlKCdhc2NpaScpKQorICAgIHJldHVybiAnJy5qb2luKGVuY29kZWRfbGluZXMpCisKKworZGVmIF9lbmNvZGVfdGV4dChzdHJpbmcsIGNoYXJzZXQsIGN0ZSwgcG9saWN5KToKKyAgICBsaW5lcyA9IHN0cmluZy5lbmNvZGUoY2hhcnNldCkuc3BsaXRsaW5lcygpCisgICAgbGluZXNlcCA9IHBvbGljeS5saW5lc2VwLmVuY29kZSgnYXNjaWknKQorICAgIGRlZiBlbWJlZGVkX2JvZHkobGluZXMpOiByZXR1cm4gbGluZXNlcC5qb2luKGxpbmVzKSArIGxpbmVzZXAKKyAgICBkZWYgbm9ybWFsX2JvZHkobGluZXMpOiByZXR1cm4gYidcbicuam9pbihsaW5lcykgKyBiJ1xuJworICAgIGlmIGN0ZT09Tm9uZToKKyAgICAgICAgIyBVc2UgaGV1cmlzdGljcyB0byBkZWNpZGUgb24gdGhlICJiZXN0IiBlbmNvZGluZy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuICc3Yml0Jywgbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiAocG9saWN5LmN0ZV90eXBlID09ICc4Yml0JyBhbmQKKyAgICAgICAgICAgICAgICBtYXgobGVuKHgpIGZvciB4IGluIGxpbmVzKSA8PSBwb2xpY3kubWF4X2xpbmVfbGVuZ3RoKToKKyAgICAgICAgICAgIHJldHVybiAnOGJpdCcsIG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgIHNuaWZmID0gZW1iZWRlZF9ib2R5KGxpbmVzWzoxMF0pCisgICAgICAgIHNuaWZmX3FwID0gcXVvcHJpbWltZS5ib2R5X2VuY29kZShzbmlmZi5kZWNvZGUoJ2xhdGluLTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgICAgIHNuaWZmX2Jhc2U2NCA9IGJpbmFzY2lpLmIyYV9iYXNlNjQoc25pZmYpCisgICAgICAgICMgVGhpcyBpcyBhIGxpdHRsZSB1bmZhaXIgdG8gcXA7IGl0IGluY2x1ZGVzIGxpbmVzZXBzLCBiYXNlNjQgZG9lc24ndC4KKyAgICAgICAgaWYgbGVuKHNuaWZmX3FwKSA+IGxlbihzbmlmZl9iYXNlNjQpOgorICAgICAgICAgICAgY3RlID0gJ2Jhc2U2NCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGN0ZSA9ICdxdW90ZWQtcHJpbnRhYmxlJworICAgICAgICAgICAgaWYgbGVuKGxpbmVzKSA8PSAxMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3RlLCBzbmlmZl9xcAorICAgIGlmIGN0ZSA9PSAnN2JpdCc6CisgICAgICAgIGRhdGEgPSBub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgPT0gJzhiaXQnOgorICAgICAgICBkYXRhID0gbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICBlbGlmIGN0ZSA9PSAncXVvdGVkLXByaW50YWJsZSc6CisgICAgICAgIGRhdGEgPSBxdW9wcmltaW1lLmJvZHlfZW5jb2RlKG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2xhdGluLTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICBlbGlmIGN0ZSA9PSAnYmFzZTY0JzoKKyAgICAgICAgZGF0YSA9IF9lbmNvZGVfYmFzZTY0KGVtYmVkZWRfYm9keShsaW5lcyksIHBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBjb250ZW50IHRyYW5zZmVyIGVuY29kaW5nIHt9Ii5mb3JtYXQoY3RlKSkKKyAgICByZXR1cm4gY3RlLCBkYXRhCisKKworZGVmIHNldF90ZXh0X2NvbnRlbnQobXNnLCBzdHJpbmcsIHN1YnR5cGU9InBsYWluIiwgY2hhcnNldD0ndXRmLTgnLCBjdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgX3ByZXBhcmVfc2V0KG1zZywgJ3RleHQnLCBzdWJ0eXBlLCBoZWFkZXJzKQorICAgIGN0ZSwgcGF5bG9hZCA9IF9lbmNvZGVfdGV4dChzdHJpbmcsIGNoYXJzZXQsIGN0ZSwgbXNnLnBvbGljeSkKKyAgICBtc2cuc2V0X3BheWxvYWQocGF5bG9hZCkKKyAgICBtc2cuc2V0X3BhcmFtKCdjaGFyc2V0JywKKyAgICAgICAgICAgICAgICAgIGVtYWlsLmNoYXJzZXQuQUxJQVNFUy5nZXQoY2hhcnNldCwgY2hhcnNldCksCisgICAgICAgICAgICAgICAgICByZXBsYWNlPVRydWUpCisgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSBjdGUKKyAgICBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcykKK3Jhd19kYXRhX21hbmFnZXIuYWRkX3NldF9oYW5kbGVyKHN0ciwgc2V0X3RleHRfY29udGVudCkKKworCitkZWYgc2V0X21lc3NhZ2VfY29udGVudChtc2csIG1lc3NhZ2UsIHN1YnR5cGU9InJmYzgyMiIsIGN0ZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgaWYgc3VidHlwZSA9PSAncGFydGlhbCc6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1lc3NhZ2UvcGFydGlhbCBpcyBub3Qgc3VwcG9ydGVkIGZvciBNZXNzYWdlIG9iamVjdHMiKQorICAgIGlmIHN1YnR5cGUgPT0gJ3JmYzgyMic6CisgICAgICAgIGlmIGN0ZSBub3QgaW4gKE5vbmUsICc3Yml0JywgJzhiaXQnLCAnYmluYXJ5Jyk6CisgICAgICAgICAgICAjIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuMSBtYW5kYXRlLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAibWVzc2FnZS9yZmM4MjIgcGFydHMgZG8gbm90IHN1cHBvcnQgY3RlPXt9Ii5mb3JtYXQoY3RlKSkKKyAgICAgICAgIyA4Yml0IHdpbGwgZ2V0IGNvZXJjZWQgb24gc2VyaWFsaXphdGlvbiBpZiBwb2xpY3kuY3RlX3R5cGU9JzdiaXQnLiAgV2UKKyAgICAgICAgIyBtYXkgZW5kIHVwIGNsYWltaW5nIDhiaXQgd2hlbiBpdCBpc24ndCBuZWVkZWQsIGJ1dCB0aGUgb25seSBuZWdhdGl2ZQorICAgICAgICAjIHJlc3VsdCBvZiB0aGF0IHNob3VsZCBiZSBhIGdhdGV3YXkgdGhhdCBuZWVkcyB0byBjb2VyY2UgdG8gN2JpdAorICAgICAgICAjIGhhdmluZyB0byBsb29rIHRocm91Z2ggdGhlIHdob2xlIGVtYmVkZGVkIG1lc3NhZ2UgdG8gZGlzY292ZXIgd2hldGhlcgorICAgICAgICAjIG9yIG5vdCBpdCBhY3R1YWxseSBoYXMgdG8gZG8gYW55dGhpbmcuCisgICAgICAgIGN0ZSA9ICc4Yml0JyBpZiBjdGUgaXMgTm9uZSBlbHNlIGN0ZQorICAgIGVsaWYgc3VidHlwZSA9PSAnZXh0ZXJuYWwtYm9keSc6CisgICAgICAgIGlmIGN0ZSBub3QgaW4gKE5vbmUsICc3Yml0Jyk6CisgICAgICAgICAgICAjIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuMyBtYW5kYXRlLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAibWVzc2FnZS9leHRlcm5hbC1ib2R5IHBhcnRzIGRvIG5vdCBzdXBwb3J0IGN0ZT17fSIuZm9ybWF0KGN0ZSkpCisgICAgICAgIGN0ZSA9ICc3Yml0JworICAgIGVsaWYgY3RlIGlzIE5vbmU6CisgICAgICAgICMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NiNzZWN0aW9uLTUuMi40IHNheXMgYWxsIGZ1dHVyZQorICAgICAgICAjIHN1YnR5cGVzIHNob3VsZCBiZSByZXN0cmljdGVkIHRvIDdiaXQsIHNvIGFzc3VtZSB0aGF0LgorICAgICAgICBjdGUgPSAnN2JpdCcKKyAgICBfcHJlcGFyZV9zZXQobXNnLCAnbWVzc2FnZScsIHN1YnR5cGUsIGhlYWRlcnMpCisgICAgbXNnLnNldF9wYXlsb2FkKFttZXNzYWdlXSkKKyAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9IGN0ZQorICAgIF9maW5hbGl6ZV9zZXQobXNnLCBkaXNwb3NpdGlvbiwgZmlsZW5hbWUsIGNpZCwgcGFyYW1zKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfc2V0X2hhbmRsZXIoZW1haWwubWVzc2FnZS5NZXNzYWdlLCBzZXRfbWVzc2FnZV9jb250ZW50KQorCisKK2RlZiBzZXRfYnl0ZXNfY29udGVudChtc2csIGRhdGEsIG1haW50eXBlLCBzdWJ0eXBlLCBjdGU9J2Jhc2U2NCcsCisgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgIF9wcmVwYXJlX3NldChtc2csIG1haW50eXBlLCBzdWJ0eXBlLCBoZWFkZXJzKQorICAgIGlmIGN0ZSA9PSAnYmFzZTY0JzoKKyAgICAgICAgZGF0YSA9IF9lbmNvZGVfYmFzZTY0KGRhdGEsIG1heF9saW5lX2xlbmd0aD1tc2cucG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICBlbGlmIGN0ZSA9PSAncXVvdGVkLXByaW50YWJsZSc6CisgICAgICAgICMgWFhYOiBxdW9wcmltaW1lLmJvZHlfZW5jb2RlIHdvbid0IGVuY29kZSBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gZGF0YSwKKyAgICAgICAgIyBzbyB3ZSBjYW4ndCB1c2UgaXQuICBUaGlzIG1lYW5zIG1heF9saW5lX2xlbmd0aCBpcyBpZ25vcmVkLiAgQW5vdGhlcgorICAgICAgICAjIGJ1ZyB0byBmaXggbGF0ZXIuICAoTm90ZTogZW5jb2RlcnMucXVvcHJpIGlzIGJyb2tlbiBvbiBsaW5lIGVuZHMuKQorICAgICAgICBkYXRhID0gYmluYXNjaWkuYjJhX3FwKGRhdGEsIGlzdGV4dD1GYWxzZSwgaGVhZGVyPUZhbHNlLCBxdW90ZXRhYnM9VHJ1ZSkKKyAgICAgICAgZGF0YSA9IGRhdGEuZGVjb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgPT0gJzdiaXQnOgorICAgICAgICAjIE1ha2Ugc3VyZSBpdCByZWFsbHkgaXMgb25seSBBU0NJSS4gIFRoZSBlYXJseSB3YXJuaW5nIGhlcmUgc2VlbXMKKyAgICAgICAgIyB3b3J0aCB0aGUgb3ZlcmhlYWQuLi5pZiB5b3UgY2FyZSB3cml0ZSB5b3VyIG93biBjb250ZW50IG1hbmFnZXIgOikuCisgICAgICAgIGRhdGEuZW5jb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgaW4gKCc4Yml0JywgJ2JpbmFyeScpOgorICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgbXNnLnNldF9wYXlsb2FkKGRhdGEpCisgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSBjdGUKKyAgICBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcykKK2ZvciB0eXAgaW4gKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpOgorICAgIHJhd19kYXRhX21hbmFnZXIuYWRkX3NldF9oYW5kbGVyKHR5cCwgc2V0X2J5dGVzX2NvbnRlbnQpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvZW5jb2RlcnMucHkgYi9MaWIvZW1haWwvZW5jb2RlcnMucHkKaW5kZXggZjk2NTdmMC4uMGE2NmFjYiAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2VuY29kZXJzLnB5CisrKyBiL0xpYi9lbWFpbC9lbmNvZGVycy5weQpAQCAtNTQsMjEgKzU0LDEyIEBACiAgICAgICAgICMgVGhlcmUncyBubyBwYXlsb2FkLiAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHVzZSA3Yml0CiAgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzdiaXQnCiAgICAgICAgIHJldHVybgotICAgICMgV2UgcGxheSBhIHRyaWNrIHRvIG1ha2UgdGhpcyBnbyBmYXN0LiAgSWYgZW5jb2RpbmcvZGVjb2RlIHRvIEFTQ0lJCi0gICAgIyBzdWNjZWVkcywgd2Uga25vdyB0aGUgZGF0YSBtdXN0IGJlIDdiaXQsIG90aGVyd2lzZSB0cmVhdCBpdCBhcyA4Yml0LgorICAgICMgV2UgcGxheSBhIHRyaWNrIHRvIG1ha2UgdGhpcyBnbyBmYXN0LiAgSWYgZGVjb2RpbmcgZnJvbSBBU0NJSSBzdWNjZWVkcywKKyAgICAjIHdlIGtub3cgdGhlIGRhdGEgbXVzdCBiZSA3Yml0LCBvdGhlcndpc2UgdHJlYXQgaXQgYXMgOGJpdC4KICAgICB0cnk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uob3JpZywgc3RyKToKLSAgICAgICAgICAgIG9yaWcuZW5jb2RlKCdhc2NpaScpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvcmlnLmRlY29kZSgnYXNjaWknKQorICAgICAgICBvcmlnLmRlY29kZSgnYXNjaWknKQogICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6Ci0gICAgICAgIGNoYXJzZXQgPSBtc2cuZ2V0X2NoYXJzZXQoKQotICAgICAgICBvdXRwdXRfY3NldCA9IGNoYXJzZXQgYW5kIGNoYXJzZXQub3V0cHV0X2NoYXJzZXQKLSAgICAgICAgIyBpc28tMjAyMi0qIGlzIG5vbi1BU0NJSSBidXQgZW5jb2RlcyB0byBhIDctYml0IHJlcHJlc2VudGF0aW9uCi0gICAgICAgIGlmIG91dHB1dF9jc2V0IGFuZCBvdXRwdXRfY3NldC5sb3dlcigpLnN0YXJ0c3dpdGgoJ2lzby0yMDIyLScpOgotICAgICAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAnN2JpdCcKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzhiaXQnCisgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzhiaXQnCiAgICAgZWxzZToKICAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAnN2JpdCcKIApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2ZlZWRwYXJzZXIucHkgYi9MaWIvZW1haWwvZmVlZHBhcnNlci5weQppbmRleCBlYTQxZTk1Li42Y2Y5YjkxIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvZmVlZHBhcnNlci5weQorKysgYi9MaWIvZW1haWwvZmVlZHBhcnNlci5weQpAQCAtOTgsMjQgKzk4LDE1IEBACiAgICAgICAgICIiIlB1c2ggc29tZSBuZXcgZGF0YSBpbnRvIHRoaXMgb2JqZWN0LiIiIgogICAgICAgICAjIEhhbmRsZSBhbnkgcHJldmlvdXMgbGVmdG92ZXJzCiAgICAgICAgIGRhdGEsIHNlbGYuX3BhcnRpYWwgPSBzZWxmLl9wYXJ0aWFsICsgZGF0YSwgJycKLSAgICAgICAgIyBDcmFjayBpbnRvIGxpbmVzLCBidXQgcHJlc2VydmUgdGhlIG5ld2xpbmVzIG9uIHRoZSBlbmQgb2YgZWFjaAotICAgICAgICBwYXJ0cyA9IE5MQ1JFX2NyYWNrLnNwbGl0KGRhdGEpCi0gICAgICAgICMgVGhlICphaGVtKiBpbnRlcmVzdGluZyBiZWhhdmlvdXIgb2YgcmUuc3BsaXQgd2hlbiBzdXBwbGllZCBncm91cGluZwotICAgICAgICAjIHBhcmVudGhlc2VzIGlzIHRoYXQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcmVzdWx0aW5nIGxpc3QgaXMgdGhlCi0gICAgICAgICMgZGF0YSBhZnRlciB0aGUgZmluYWwgUkUuICBJbiB0aGUgY2FzZSBvZiBhIE5ML0NSIHRlcm1pbmF0ZWQgc3RyaW5nLAotICAgICAgICAjIHRoaXMgaXMgdGhlIGVtcHR5IHN0cmluZy4KLSAgICAgICAgc2VsZi5fcGFydGlhbCA9IHBhcnRzLnBvcCgpCi0gICAgICAgICNHQU4gMjlNYXIwOSAgYnVncyAxNTU1NTcwLCAxNzIxODYyICBDb25mdXNpb24gYXQgOEsgYm91bmRhcnkgZW5kaW5nIHdpdGggXHI6Ci0gICAgICAgICMgaXMgdGhlcmUgYSBcbiB0byBmb2xsb3cgbGF0ZXI/Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9wYXJ0aWFsIGFuZCBwYXJ0cyBhbmQgcGFydHNbLTFdLmVuZHN3aXRoKCdccicpOgotICAgICAgICAgICAgc2VsZi5fcGFydGlhbCA9IHBhcnRzLnBvcCgtMikrcGFydHMucG9wKCkKLSAgICAgICAgIyBwYXJ0cyBpcyBhIGxpc3Qgb2Ygc3RyaW5ncywgYWx0ZXJuYXRpbmcgYmV0d2VlbiB0aGUgbGluZSBjb250ZW50cwotICAgICAgICAjIGFuZCB0aGUgZW9sIGNoYXJhY3RlcihzKS4gIEdhdGhlciB1cCBhIGxpc3Qgb2YgbGluZXMgYWZ0ZXIKLSAgICAgICAgIyByZS1hdHRhY2hpbmcgdGhlIG5ld2xpbmVzLgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihwYXJ0cykgLy8gMik6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQocGFydHNbaSoyXSArIHBhcnRzW2kqMisxXSkKLSAgICAgICAgc2VsZi5wdXNobGluZXMobGluZXMpCisgICAgICAgICMgQ3JhY2sgaW50byBsaW5lcywgYnV0IHByZXNlcnZlIHRoZSBsaW5lc2VwIGNoYXJhY3RlcnMgb24gdGhlIGVuZCBvZiBlYWNoCisgICAgICAgIHBhcnRzID0gZGF0YS5zcGxpdGxpbmVzKFRydWUpCisgICAgICAgICMgSWYgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgbGlzdCBkb2VzIG5vdCBlbmQgaW4gYSBuZXdsaW5lLCB0aGVuIHRyZWF0CisgICAgICAgICMgaXQgYXMgYSBwYXJ0aWFsIGxpbmUuICBXZSBvbmx5IGNoZWNrIGZvciAnXG4nIGhlcmUgYmVjYXVzZSBhIGxpbmUKKyAgICAgICAgIyBlbmRpbmcgd2l0aCAnXHInIG1pZ2h0IGJlIGEgbGluZSB0aGF0IHdhcyBzcGxpdCBpbiB0aGUgbWlkZGxlIG9mIGEKKyAgICAgICAgIyAnXHJcbicgc2VxdWVuY2UgKHNlZSBidWdzIDE1NTU1NzAgYW5kIDE3MjE4NjIpLgorICAgICAgICBpZiBwYXJ0cyBhbmQgbm90IHBhcnRzWy0xXS5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgIHNlbGYuX3BhcnRpYWwgPSBwYXJ0cy5wb3AoKQorICAgICAgICBzZWxmLnB1c2hsaW5lcyhwYXJ0cykKIAogICAgIGRlZiBwdXNobGluZXMoc2VsZiwgbGluZXMpOgogICAgICAgICAjIFJldmVyc2UgYW5kIGluc2VydCBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpbmVzLgpAQCAtMTM1LDcgKzEyNiw3IEBACiBjbGFzcyBGZWVkUGFyc2VyOgogICAgICIiIkEgZmVlZC1zdHlsZSBwYXJzZXIgb2YgZW1haWwuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgX2ZhY3Rvcnk9bWVzc2FnZS5NZXNzYWdlLCAqLCBwb2xpY3k9Y29tcGF0MzIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfZmFjdG9yeT1Ob25lLCAqLCBwb2xpY3k9Y29tcGF0MzIpOgogICAgICAgICAiIiJfZmFjdG9yeSBpcyBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMgdG8gY3JlYXRlIGEgbmV3IG1lc3NhZ2Ugb2JqCiAKICAgICAgICAgVGhlIHBvbGljeSBrZXl3b3JkIHNwZWNpZmllcyBhIHBvbGljeSBvYmplY3QgdGhhdCBjb250cm9scyBhIG51bWJlciBvZgpAQCAtMTQzLDE0ICsxMzQsMjMgQEAKICAgICAgICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KIAogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fZmFjdG9yeSA9IF9mYWN0b3J5CiAgICAgICAgIHNlbGYucG9saWN5ID0gcG9saWN5Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9mYWN0b3J5KHBvbGljeT1zZWxmLnBvbGljeSkKLSAgICAgICAgICAgIHNlbGYuX2ZhY3Rvcnlfa3dkcyA9IGxhbWJkYTogeydwb2xpY3knOiBzZWxmLnBvbGljeX0KLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICMgQXNzdW1lIHRoaXMgaXMgYW4gb2xkLXN0eWxlIGZhY3RvcnkKLSAgICAgICAgICAgIHNlbGYuX2ZhY3Rvcnlfa3dkcyA9IGxhbWJkYToge30KKyAgICAgICAgc2VsZi5fZmFjdG9yeV9rd2RzID0gbGFtYmRhOiB7J3BvbGljeSc6IHNlbGYucG9saWN5fQorICAgICAgICBpZiBfZmFjdG9yeSBpcyBOb25lOgorICAgICAgICAgICAgIyBXaGF0IHRoaXMgc2hvdWxkIGJlOgorICAgICAgICAgICAgI3NlbGYuX2ZhY3RvcnkgPSBwb2xpY3kuZGVmYXVsdF9tZXNzYWdlX2ZhY3RvcnkKKyAgICAgICAgICAgICMgYnV0LCBiZWNhdXNlIHdlIGFyZSBwb3N0IDMuNCBmZWF0dXJlIGZyZWV6ZSwgZml4IHdpdGggdGVtcCBoYWNrOgorICAgICAgICAgICAgaWYgc2VsZi5wb2xpY3kgaXMgY29tcGF0MzI6CisgICAgICAgICAgICAgICAgc2VsZi5fZmFjdG9yeSA9IG1lc3NhZ2UuTWVzc2FnZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9mYWN0b3J5ID0gbWVzc2FnZS5FbWFpbE1lc3NhZ2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2ZhY3RvcnkgPSBfZmFjdG9yeQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9mYWN0b3J5KHBvbGljeT1zZWxmLnBvbGljeSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBBc3N1bWUgdGhpcyBpcyBhbiBvbGQtc3R5bGUgZmFjdG9yeQorICAgICAgICAgICAgICAgIHNlbGYuX2ZhY3Rvcnlfa3dkcyA9IGxhbWJkYToge30KICAgICAgICAgc2VsZi5faW5wdXQgPSBCdWZmZXJlZFN1YkZpbGUoKQogICAgICAgICBzZWxmLl9tc2dzdGFjayA9IFtdCiAgICAgICAgIHNlbGYuX3BhcnNlID0gc2VsZi5fcGFyc2VnZW4oKS5fX25leHRfXwpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2l0ZXJhdG9ycy5weSBiL0xpYi9lbWFpbC9pdGVyYXRvcnMucHkKaW5kZXggM2FkYzRhMC4uYjU1MDJlZSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2l0ZXJhdG9ycy5weQorKysgYi9MaWIvZW1haWwvaXRlcmF0b3JzLnB5CkBAIC0yNiw4ICsyNiw3IEBACiAgICAgeWllbGQgc2VsZgogICAgIGlmIHNlbGYuaXNfbXVsdGlwYXJ0KCk6CiAgICAgICAgIGZvciBzdWJwYXJ0IGluIHNlbGYuZ2V0X3BheWxvYWQoKToKLSAgICAgICAgICAgIGZvciBzdWJzdWJwYXJ0IGluIHN1YnBhcnQud2FsaygpOgotICAgICAgICAgICAgICAgIHlpZWxkIHN1YnN1YnBhcnQKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3VicGFydC53YWxrKCkKIAogCiAMCkBAIC00MCw4ICszOSw3IEBACiAgICAgZm9yIHN1YnBhcnQgaW4gbXNnLndhbGsoKToKICAgICAgICAgcGF5bG9hZCA9IHN1YnBhcnQuZ2V0X3BheWxvYWQoZGVjb2RlPWRlY29kZSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXlsb2FkLCBzdHIpOgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gU3RyaW5nSU8ocGF5bG9hZCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgeWllbGQgZnJvbSBTdHJpbmdJTyhwYXlsb2FkKQogCiAKIGRlZiB0eXBlZF9zdWJwYXJ0X2l0ZXJhdG9yKG1zZywgbWFpbnR5cGU9J3RleHQnLCBzdWJ0eXBlPU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL21lc3NhZ2UucHkgYi9MaWIvZW1haWwvbWVzc2FnZS5weQppbmRleCBhZmUzNTBjLi44OGI1ZmEzIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvbWVzc2FnZS5weQorKysgYi9MaWIvZW1haWwvbWVzc2FnZS5weQpAQCAtOCw4ICs4LDYgQEAKIAogaW1wb3J0IHJlCiBpbXBvcnQgdXUKLWltcG9ydCBiYXNlNjQKLWltcG9ydCBiaW5hc2NpaQogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8KIAogIyBJbnRyYXBhY2thZ2UgaW1wb3J0cwpAQCAtMTMyLDIyICsxMzAsNTAgQEAKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBmb3JtYXR0ZWQgbWVzc2FnZSBhcyBhIHN0cmluZy4KLSAgICAgICAgVGhpcyBpbmNsdWRlcyB0aGUgaGVhZGVycywgYm9keSwgYW5kIGVudmVsb3BlIGhlYWRlci4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmFzX3N0cmluZygpCiAKLSAgICBkZWYgYXNfc3RyaW5nKHNlbGYsIHVuaXhmcm9tPUZhbHNlLCBtYXhoZWFkZXJsZW49MCk6CisgICAgZGVmIGFzX3N0cmluZyhzZWxmLCB1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTAsIHBvbGljeT1Ob25lKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBzdHJpbmcuCi0gICAgICAgIE9wdGlvbmFsIGB1bml4ZnJvbScgd2hlbiBUcnVlLCBtZWFucyBpbmNsdWRlIHRoZSBVbml4IEZyb21fIGVudmVsb3BlCi0gICAgICAgIGhlYWRlci4KIAotICAgICAgICBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIGFuZCBtYXkgbm90IGdlbmVyYXRlIHRoZSBtZXNzYWdlIGV4YWN0bHkKLSAgICAgICAgYXMgeW91IGludGVuZC4gIEZvciBtb3JlIGZsZXhpYmlsaXR5LCB1c2UgdGhlIGZsYXR0ZW4oKSBtZXRob2Qgb2YgYQotICAgICAgICBHZW5lcmF0b3IgaW5zdGFuY2UuCisgICAgICAgIE9wdGlvbmFsICd1bml4ZnJvbScsIHdoZW4gdHJ1ZSwgbWVhbnMgaW5jbHVkZSB0aGUgVW5peCBGcm9tXyBlbnZlbG9wZQorICAgICAgICBoZWFkZXIuICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zLCBpZiBtYXhoZWFkZXJsZW4gaXMKKyAgICAgICAgbm90IHNwZWNpZmllZCBpdCBkZWZhdWx0cyB0byAwLCBzbyB5b3UgbXVzdCBvdmVycmlkZSBpdCBleHBsaWNpdGx5CisgICAgICAgIGlmIHlvdSB3YW50IGEgZGlmZmVyZW50IG1heGhlYWRlcmxlbi4gICdwb2xpY3knIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgICAgR2VuZXJhdG9yIGluc3RhbmNlIHVzZWQgdG8gc2VyaWFsaXplIHRoZSBtZXNhc2dlOyBpZiBpdCBpcyBub3QKKyAgICAgICAgc3BlY2lmaWVkIHRoZSBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlIGluc3RhbmNlIGlzIHVzZWQuCisKKyAgICAgICAgSWYgdGhlIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5zIGJpbmFyeSBkYXRhIHRoYXQgaXMgbm90IGVuY29kZWQKKyAgICAgICAgYWNjb3JkaW5nIHRvIFJGQyBzdGFuZGFyZHMsIHRoZSBub24tY29tcGxpYW50IGRhdGEgd2lsbCBiZSByZXBsYWNlZCBieQorICAgICAgICB1bmljb2RlICJ1bmtub3duIGNoYXJhY3RlciIgY29kZSBwb2ludHMuCiAgICAgICAgICIiIgogICAgICAgICBmcm9tIGVtYWlsLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCisgICAgICAgIHBvbGljeSA9IHNlbGYucG9saWN5IGlmIHBvbGljeSBpcyBOb25lIGVsc2UgcG9saWN5CiAgICAgICAgIGZwID0gU3RyaW5nSU8oKQotICAgICAgICBnID0gR2VuZXJhdG9yKGZwLCBtYW5nbGVfZnJvbV89RmFsc2UsIG1heGhlYWRlcmxlbj1tYXhoZWFkZXJsZW4pCisgICAgICAgIGcgPSBHZW5lcmF0b3IoZnAsCisgICAgICAgICAgICAgICAgICAgICAgbWFuZ2xlX2Zyb21fPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIG1heGhlYWRlcmxlbj1tYXhoZWFkZXJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeSkKKyAgICAgICAgZy5mbGF0dGVuKHNlbGYsIHVuaXhmcm9tPXVuaXhmcm9tKQorICAgICAgICByZXR1cm4gZnAuZ2V0dmFsdWUoKQorCisgICAgZGVmIF9fYnl0ZXNfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBieXRlcyBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5hc19ieXRlcygpCisKKyAgICBkZWYgYXNfYnl0ZXMoc2VsZiwgdW5peGZyb209RmFsc2UsIHBvbGljeT1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBieXRlcyBvYmplY3QuCisKKyAgICAgICAgT3B0aW9uYWwgJ3VuaXhmcm9tJywgd2hlbiB0cnVlLCBtZWFucyBpbmNsdWRlIHRoZSBVbml4IEZyb21fIGVudmVsb3BlCisgICAgICAgIGhlYWRlci4gICdwb2xpY3knIGlzIHBhc3NlZCB0byB0aGUgQnl0ZXNHZW5lcmF0b3IgaW5zdGFuY2UgdXNlZCB0bworICAgICAgICBzZXJpYWxpemUgdGhlIG1lc3NhZ2U7IGlmIG5vdCBzcGVjaWZpZWQgdGhlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgdGhlIG1lc3NhZ2UgaW5zdGFuY2UgaXMgdXNlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZyb20gZW1haWwuZ2VuZXJhdG9yIGltcG9ydCBCeXRlc0dlbmVyYXRvcgorICAgICAgICBwb2xpY3kgPSBzZWxmLnBvbGljeSBpZiBwb2xpY3kgaXMgTm9uZSBlbHNlIHBvbGljeQorICAgICAgICBmcCA9IEJ5dGVzSU8oKQorICAgICAgICBnID0gQnl0ZXNHZW5lcmF0b3IoZnAsIG1hbmdsZV9mcm9tXz1GYWxzZSwgcG9saWN5PXBvbGljeSkKICAgICAgICAgZy5mbGF0dGVuKHNlbGYsIHVuaXhmcm9tPXVuaXhmcm9tKQogICAgICAgICByZXR1cm4gZnAuZ2V0dmFsdWUoKQogCkBAIC02NjgsNyArNjk0LDcgQEAKICAgICAgICAgcmV0dXJuIGZhaWxvYmoKIAogICAgIGRlZiBzZXRfcGFyYW0oc2VsZiwgcGFyYW0sIHZhbHVlLCBoZWFkZXI9J0NvbnRlbnQtVHlwZScsIHJlcXVvdGU9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9Tm9uZSwgbGFuZ3VhZ2U9JycpOgorICAgICAgICAgICAgICAgICAgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJywgcmVwbGFjZT1GYWxzZSk6CiAgICAgICAgICIiIlNldCBhIHBhcmFtZXRlciBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4KIAogICAgICAgICBJZiB0aGUgcGFyYW1ldGVyIGFscmVhZHkgZXhpc3RzIGluIHRoZSBoZWFkZXIsIGl0cyB2YWx1ZSB3aWxsIGJlCkBAIC03MTIsOCArNzM4LDExIEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY3R5cGUgPSBTRU1JU1BBQ0Uuam9pbihbY3R5cGUsIGFwcGVuZF9wYXJhbV0pCiAgICAgICAgIGlmIGN0eXBlICE9IHNlbGYuZ2V0KGhlYWRlcik6Ci0gICAgICAgICAgICBkZWwgc2VsZltoZWFkZXJdCi0gICAgICAgICAgICBzZWxmW2hlYWRlcl0gPSBjdHlwZQorICAgICAgICAgICAgaWYgcmVwbGFjZToKKyAgICAgICAgICAgICAgICBzZWxmLnJlcGxhY2VfaGVhZGVyKGhlYWRlciwgY3R5cGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmW2hlYWRlcl0KKyAgICAgICAgICAgICAgICBzZWxmW2hlYWRlcl0gPSBjdHlwZQogCiAgICAgZGVmIGRlbF9wYXJhbShzZWxmLCBwYXJhbSwgaGVhZGVyPSdjb250ZW50LXR5cGUnLCByZXF1b3RlPVRydWUpOgogICAgICAgICAiIiJSZW1vdmUgdGhlIGdpdmVuIHBhcmFtZXRlciBjb21wbGV0ZWx5IGZyb20gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuCkBAIC04OTQsMyArOTIzLDIwOCBAQAogCiAgICAgIyBJLmUuIGRlZiB3YWxrKHNlbGYpOiAuLi4KICAgICBmcm9tIGVtYWlsLml0ZXJhdG9ycyBpbXBvcnQgd2FsaworCisKK2NsYXNzIE1JTUVQYXJ0KE1lc3NhZ2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvbGljeT1Ob25lKToKKyAgICAgICAgaWYgcG9saWN5IGlzIE5vbmU6CisgICAgICAgICAgICBmcm9tIGVtYWlsLnBvbGljeSBpbXBvcnQgZGVmYXVsdAorICAgICAgICAgICAgcG9saWN5ID0gZGVmYXVsdAorICAgICAgICBNZXNzYWdlLl9faW5pdF9fKHNlbGYsIHBvbGljeSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19hdHRhY2htZW50KHNlbGYpOgorICAgICAgICBjX2QgPSBzZWxmLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpCisgICAgICAgIGlmIGNfZCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBjX2QubG93ZXIoKSA9PSAnYXR0YWNobWVudCcKKworICAgIGRlZiBfZmluZF9ib2R5KHNlbGYsIHBhcnQsIHByZWZlcmVuY2VsaXN0KToKKyAgICAgICAgaWYgcGFydC5pc19hdHRhY2htZW50OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gcGFydC5nZXRfY29udGVudF90eXBlKCkuc3BsaXQoJy8nKQorICAgICAgICBpZiBtYWludHlwZSA9PSAndGV4dCc6CisgICAgICAgICAgICBpZiBzdWJ0eXBlIGluIHByZWZlcmVuY2VsaXN0OgorICAgICAgICAgICAgICAgIHlpZWxkIChwcmVmZXJlbmNlbGlzdC5pbmRleChzdWJ0eXBlKSwgcGFydCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYWludHlwZSAhPSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzdWJ0eXBlICE9ICdyZWxhdGVkJzoKKyAgICAgICAgICAgIGZvciBzdWJwYXJ0IGluIHBhcnQuaXRlcl9wYXJ0cygpOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluZF9ib2R5KHN1YnBhcnQsIHByZWZlcmVuY2VsaXN0KQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmICdyZWxhdGVkJyBpbiBwcmVmZXJlbmNlbGlzdDoKKyAgICAgICAgICAgIHlpZWxkIChwcmVmZXJlbmNlbGlzdC5pbmRleCgncmVsYXRlZCcpLCBwYXJ0KQorICAgICAgICBjYW5kaWRhdGUgPSBOb25lCisgICAgICAgIHN0YXJ0ID0gcGFydC5nZXRfcGFyYW0oJ3N0YXJ0JykKKyAgICAgICAgaWYgc3RhcnQ6CisgICAgICAgICAgICBmb3Igc3VicGFydCBpbiBwYXJ0Lml0ZXJfcGFydHMoKToKKyAgICAgICAgICAgICAgICBpZiBzdWJwYXJ0Wydjb250ZW50LWlkJ10gPT0gc3RhcnQ6CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHN1YnBhcnQKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgY2FuZGlkYXRlIGlzIE5vbmU6CisgICAgICAgICAgICBzdWJwYXJ0cyA9IHBhcnQuZ2V0X3BheWxvYWQoKQorICAgICAgICAgICAgY2FuZGlkYXRlID0gc3VicGFydHNbMF0gaWYgc3VicGFydHMgZWxzZSBOb25lCisgICAgICAgIGlmIGNhbmRpZGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluZF9ib2R5KGNhbmRpZGF0ZSwgcHJlZmVyZW5jZWxpc3QpCisKKyAgICBkZWYgZ2V0X2JvZHkoc2VsZiwgcHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKSk6CisgICAgICAgICIiIlJldHVybiBiZXN0IGNhbmRpZGF0ZSBtaW1lIHBhcnQgZm9yIGRpc3BsYXkgYXMgJ2JvZHknIG9mIG1lc3NhZ2UuCisKKyAgICAgICAgRG8gYSBkZXB0aCBmaXJzdCBzZWFyY2gsIHN0YXJ0aW5nIHdpdGggc2VsZiwgbG9va2luZyBmb3IgdGhlIGZpcnN0IHBhcnQKKyAgICAgICAgbWF0Y2hpbmcgZWFjaCBvZiB0aGUgaXRlbXMgaW4gcHJlZmVyZW5jZWxpc3QsIGFuZCByZXR1cm4gdGhlIHBhcnQKKyAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgaXRlbSB0aGF0IGhhcyBhIG1hdGNoLCBvciBOb25lIGlmIG5vIGl0ZW1zCisgICAgICAgIGhhdmUgYSBtYXRjaC4gIElmICdyZWxhdGVkJyBpcyBub3QgaW5jbHVkZWQgaW4gcHJlZmVyZW5jZWxpc3QsIGNvbnNpZGVyCisgICAgICAgIHRoZSByb290IHBhcnQgb2YgYW55IG11bHRpcGFydC9yZWxhdGVkIGVuY291bnRlcmVkIGFzIGEgY2FuZGlkYXRlCisgICAgICAgIG1hdGNoLiAgSWdub3JlIHBhcnRzIHdpdGggJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQnLgorICAgICAgICAiIiIKKyAgICAgICAgYmVzdF9wcmlvID0gbGVuKHByZWZlcmVuY2VsaXN0KQorICAgICAgICBib2R5ID0gTm9uZQorICAgICAgICBmb3IgcHJpbywgcGFydCBpbiBzZWxmLl9maW5kX2JvZHkoc2VsZiwgcHJlZmVyZW5jZWxpc3QpOgorICAgICAgICAgICAgaWYgcHJpbyA8IGJlc3RfcHJpbzoKKyAgICAgICAgICAgICAgICBiZXN0X3ByaW8gPSBwcmlvCisgICAgICAgICAgICAgICAgYm9keSA9IHBhcnQKKyAgICAgICAgICAgICAgICBpZiBwcmlvID09IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBib2R5CisKKyAgICBfYm9keV90eXBlcyA9IHsoJ3RleHQnLCAncGxhaW4nKSwKKyAgICAgICAgICAgICAgICAgICAoJ3RleHQnLCAnaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICgnbXVsdGlwYXJ0JywgJ3JlbGF0ZWQnKSwKKyAgICAgICAgICAgICAgICAgICAoJ211bHRpcGFydCcsICdhbHRlcm5hdGl2ZScpfQorICAgIGRlZiBpdGVyX2F0dGFjaG1lbnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgbm9uLW1haW4gcGFydHMgb2YgYSBtdWx0aXBhcnQuCisKKyAgICAgICAgU2tpcCB0aGUgZmlyc3Qgb2YgZWFjaCBvY2N1cnJlbmNlIG9mIHRleHQvcGxhaW4sIHRleHQvaHRtbCwKKyAgICAgICAgbXVsdGlwYXJ0L3JlbGF0ZWQsIG9yIG11bHRpcGFydC9hbHRlcm5hdGl2ZSBpbiB0aGUgbXVsdGlwYXJ0ICh1bmxlc3MKKyAgICAgICAgdGhleSBoYXZlIGEgJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQnIGhlYWRlcikgYW5kIGluY2x1ZGUgYWxsCisgICAgICAgIHJlbWFpbmluZyBzdWJwYXJ0cyBpbiB0aGUgcmV0dXJuZWQgaXRlcmF0b3IuICBXaGVuIGFwcGxpZWQgdG8gYQorICAgICAgICBtdWx0aXBhcnQvcmVsYXRlZCwgcmV0dXJuIGFsbCBwYXJ0cyBleGNlcHQgdGhlIHJvb3QgcGFydC4gIFJldHVybiBhbgorICAgICAgICBlbXB0eSBpdGVyYXRvciB3aGVuIGFwcGxpZWQgdG8gYSBtdWx0aXBhcnQvYWx0ZXJuYXRpdmUgb3IgYQorICAgICAgICBub24tbXVsdGlwYXJ0LgorICAgICAgICAiIiIKKyAgICAgICAgbWFpbnR5cGUsIHN1YnR5cGUgPSBzZWxmLmdldF9jb250ZW50X3R5cGUoKS5zcGxpdCgnLycpCisgICAgICAgIGlmIG1haW50eXBlICE9ICdtdWx0aXBhcnQnIG9yIHN1YnR5cGUgPT0gJ2FsdGVybmF0aXZlJzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwYXJ0cyA9IHNlbGYuZ2V0X3BheWxvYWQoKQorICAgICAgICBpZiBtYWludHlwZSA9PSAnbXVsdGlwYXJ0JyBhbmQgc3VidHlwZSA9PSAncmVsYXRlZCc6CisgICAgICAgICAgICAjIEZvciByZWxhdGVkLCB3ZSB0cmVhdCBldmVyeXRoaW5nIGJ1dCB0aGUgcm9vdCBhcyBhbiBhdHRhY2htZW50LgorICAgICAgICAgICAgIyBUaGUgcm9vdCBtYXkgYmUgaW5kaWNhdGVkIGJ5ICdzdGFydCc7IGlmIHRoZXJlJ3Mgbm8gc3RhcnQgb3Igd2UKKyAgICAgICAgICAgICMgY2FuJ3QgZmluZCB0aGUgbmFtZWQgc3RhcnQsIHRyZWF0IHRoZSBmaXJzdCBzdWJwYXJ0IGFzIHRoZSByb290LgorICAgICAgICAgICAgc3RhcnQgPSBzZWxmLmdldF9wYXJhbSgnc3RhcnQnKQorICAgICAgICAgICAgaWYgc3RhcnQ6CisgICAgICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFydC5nZXQoJ2NvbnRlbnQtaWQnKSA9PSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuYXBwZW5kKHBhcnQpCisgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gYXR0YWNobWVudHMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwYXJ0cy5wb3AoMCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcGFydHMKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIE90aGVyd2lzZSB3ZSBtb3JlIG9yIGxlc3MgaW52ZXJ0IHRoZSByZW1haW5pbmcgbG9naWMgaW4gZ2V0X2JvZHkuCisgICAgICAgICMgVGhpcyBvbmx5IHJlYWxseSB3b3JrcyBpbiBlZGdlIGNhc2VzIChleDogbm9uLXRleHQgcmVsYXRlZHMgb3IKKyAgICAgICAgIyBhbHRlcm5hdGl2ZXMpIGlmIHRoZSBzZW5kaW5nIGFnZW50IHNldHMgY29udGVudC1kaXNwb3NpdGlvbi4KKyAgICAgICAgc2VlbiA9IFtdICAgIyBPbmx5IHNraXAgdGhlIGZpcnN0IGV4YW1wbGUgb2YgZWFjaCBjYW5kaWRhdGUgdHlwZS4KKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IHBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLnNwbGl0KCcvJykKKyAgICAgICAgICAgIGlmICgobWFpbnR5cGUsIHN1YnR5cGUpIGluIHNlbGYuX2JvZHlfdHlwZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCBwYXJ0LmlzX2F0dGFjaG1lbnQgYW5kIHN1YnR5cGUgbm90IGluIHNlZW4pOgorICAgICAgICAgICAgICAgIHNlZW4uYXBwZW5kKHN1YnR5cGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHlpZWxkIHBhcnQKKworICAgIGRlZiBpdGVyX3BhcnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBhbGwgaW1tZWRpYXRlIHN1YnBhcnRzIG9mIGEgbXVsdGlwYXJ0LgorCisgICAgICAgIFJldHVybiBhbiBlbXB0eSBpdGVyYXRvciBmb3IgYSBub24tbXVsdGlwYXJ0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5nZXRfY29udGVudF9tYWludHlwZSgpID09ICdtdWx0aXBhcnQnOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmdldF9wYXlsb2FkKCkKKworICAgIGRlZiBnZXRfY29udGVudChzZWxmLCAqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpOgorICAgICAgICBpZiBjb250ZW50X21hbmFnZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRlbnRfbWFuYWdlciA9IHNlbGYucG9saWN5LmNvbnRlbnRfbWFuYWdlcgorICAgICAgICByZXR1cm4gY29udGVudF9tYW5hZ2VyLmdldF9jb250ZW50KHNlbGYsICphcmdzLCAqKmt3KQorCisgICAgZGVmIHNldF9jb250ZW50KHNlbGYsICphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdyk6CisgICAgICAgIGlmIGNvbnRlbnRfbWFuYWdlciBpcyBOb25lOgorICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyID0gc2VsZi5wb2xpY3kuY29udGVudF9tYW5hZ2VyCisgICAgICAgIGNvbnRlbnRfbWFuYWdlci5zZXRfY29udGVudChzZWxmLCAqYXJncywgKiprdykKKworICAgIGRlZiBfbWFrZV9tdWx0aXBhcnQoc2VsZiwgc3VidHlwZSwgZGlzYWxsb3dlZF9zdWJ0eXBlcywgYm91bmRhcnkpOgorICAgICAgICBpZiBzZWxmLmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCc6CisgICAgICAgICAgICBleGlzdGluZ19zdWJ0eXBlID0gc2VsZi5nZXRfY29udGVudF9zdWJ0eXBlKCkKKyAgICAgICAgICAgIGRpc2FsbG93ZWRfc3VidHlwZXMgPSBkaXNhbGxvd2VkX3N1YnR5cGVzICsgKHN1YnR5cGUsKQorICAgICAgICAgICAgaWYgZXhpc3Rpbmdfc3VidHlwZSBpbiBkaXNhbGxvd2VkX3N1YnR5cGVzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHt9IHRvIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nX3N1YnR5cGUsIHN1YnR5cGUpKQorICAgICAgICBrZWVwX2hlYWRlcnMgPSBbXQorICAgICAgICBwYXJ0X2hlYWRlcnMgPSBbXQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc2VsZi5faGVhZGVyczoKKyAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHBhcnRfaGVhZGVycy5hcHBlbmQoKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAga2VlcF9oZWFkZXJzLmFwcGVuZCgobmFtZSwgdmFsdWUpKQorICAgICAgICBpZiBwYXJ0X2hlYWRlcnM6CisgICAgICAgICAgICAjIFRoZXJlIGlzIGV4aXN0aW5nIGNvbnRlbnQsIG1vdmUgaXQgdG8gdGhlIGZpcnN0IHN1YnBhcnQuCisgICAgICAgICAgICBwYXJ0ID0gdHlwZShzZWxmKShwb2xpY3k9c2VsZi5wb2xpY3kpCisgICAgICAgICAgICBwYXJ0Ll9oZWFkZXJzID0gcGFydF9oZWFkZXJzCisgICAgICAgICAgICBwYXJ0Ll9wYXlsb2FkID0gc2VsZi5fcGF5bG9hZAorICAgICAgICAgICAgc2VsZi5fcGF5bG9hZCA9IFtwYXJ0XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcGF5bG9hZCA9IFtdCisgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBrZWVwX2hlYWRlcnMKKyAgICAgICAgc2VsZlsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0LycgKyBzdWJ0eXBlCisgICAgICAgIGlmIGJvdW5kYXJ5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zZXRfcGFyYW0oJ2JvdW5kYXJ5JywgYm91bmRhcnkpCisKKyAgICBkZWYgbWFrZV9yZWxhdGVkKHNlbGYsIGJvdW5kYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLl9tYWtlX211bHRpcGFydCgncmVsYXRlZCcsICgnYWx0ZXJuYXRpdmUnLCAnbWl4ZWQnKSwgYm91bmRhcnkpCisKKyAgICBkZWYgbWFrZV9hbHRlcm5hdGl2ZShzZWxmLCBib3VuZGFyeT1Ob25lKToKKyAgICAgICAgc2VsZi5fbWFrZV9tdWx0aXBhcnQoJ2FsdGVybmF0aXZlJywgKCdtaXhlZCcsKSwgYm91bmRhcnkpCisKKyAgICBkZWYgbWFrZV9taXhlZChzZWxmLCBib3VuZGFyeT1Ob25lKToKKyAgICAgICAgc2VsZi5fbWFrZV9tdWx0aXBhcnQoJ21peGVkJywgKCksIGJvdW5kYXJ5KQorCisgICAgZGVmIF9hZGRfbXVsdGlwYXJ0KHNlbGYsIF9zdWJ0eXBlLCAqYXJncywgX2Rpc3A9Tm9uZSwgKiprdyk6CisgICAgICAgIGlmIChzZWxmLmdldF9jb250ZW50X21haW50eXBlKCkgIT0gJ211bHRpcGFydCcgb3IKKyAgICAgICAgICAgICAgICBzZWxmLmdldF9jb250ZW50X3N1YnR5cGUoKSAhPSBfc3VidHlwZSk6CisgICAgICAgICAgICBnZXRhdHRyKHNlbGYsICdtYWtlXycgKyBfc3VidHlwZSkoKQorICAgICAgICBwYXJ0ID0gdHlwZShzZWxmKShwb2xpY3k9c2VsZi5wb2xpY3kpCisgICAgICAgIHBhcnQuc2V0X2NvbnRlbnQoKmFyZ3MsICoqa3cpCisgICAgICAgIGlmIF9kaXNwIGFuZCAnY29udGVudC1kaXNwb3NpdGlvbicgbm90IGluIHBhcnQ6CisgICAgICAgICAgICBwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSBfZGlzcAorICAgICAgICBzZWxmLmF0dGFjaChwYXJ0KQorCisgICAgZGVmIGFkZF9yZWxhdGVkKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5fYWRkX211bHRpcGFydCgncmVsYXRlZCcsICphcmdzLCBfZGlzcD0naW5saW5lJywgKiprdykKKworICAgIGRlZiBhZGRfYWx0ZXJuYXRpdmUoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9hZGRfbXVsdGlwYXJ0KCdhbHRlcm5hdGl2ZScsICphcmdzLCAqKmt3KQorCisgICAgZGVmIGFkZF9hdHRhY2htZW50KHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5fYWRkX211bHRpcGFydCgnbWl4ZWQnLCAqYXJncywgX2Rpc3A9J2F0dGFjaG1lbnQnLCAqKmt3KQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLl9oZWFkZXJzID0gW10KKyAgICAgICAgc2VsZi5fcGF5bG9hZCA9IE5vbmUKKworICAgIGRlZiBjbGVhcl9jb250ZW50KHNlbGYpOgorICAgICAgICBzZWxmLl9oZWFkZXJzID0gWyhuLCB2KSBmb3IgbiwgdiBpbiBzZWxmLl9oZWFkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG4ubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpXQorICAgICAgICBzZWxmLl9wYXlsb2FkID0gTm9uZQorCisKK2NsYXNzIEVtYWlsTWVzc2FnZShNSU1FUGFydCk6CisKKyAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzdXBlcigpLnNldF9jb250ZW50KCphcmdzLCAqKmt3KQorICAgICAgICBpZiAnTUlNRS1WZXJzaW9uJyBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgIHNlbGZbJ01JTUUtVmVyc2lvbiddID0gJzEuMCcKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9wYXJzZXIucHkgYi9MaWIvZW1haWwvcGFyc2VyLnB5CmluZGV4IDc1MmJmMzUuLmVkNTEyYjEgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9wYXJzZXIucHkKKysrIGIvTGliL2VtYWlsL3BhcnNlci5weQpAQCAtNCw3ICs0LDggQEAKIAogIiIiQSBwYXJzZXIgb2YgUkZDIDI4MjIgYW5kIE1JTUUgZW1haWwgbWVzc2FnZXMuIiIiCiAKLV9fYWxsX18gPSBbJ1BhcnNlcicsICdIZWFkZXJQYXJzZXInLCAnQnl0ZXNQYXJzZXInLCAnQnl0ZXNIZWFkZXJQYXJzZXInXQorX19hbGxfXyA9IFsnUGFyc2VyJywgJ0hlYWRlclBhcnNlcicsICdCeXRlc1BhcnNlcicsICdCeXRlc0hlYWRlclBhcnNlcicsCisgICAgICAgICAgICdGZWVkUGFyc2VyJywgJ0J5dGVzRmVlZFBhcnNlciddCiAKIGltcG9ydCB3YXJuaW5ncwogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8sIFRleHRJT1dyYXBwZXIKQEAgLTE2LDcgKzE3LDcgQEAKIAogDAogY2xhc3MgUGFyc2VyOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfY2xhc3M9TWVzc2FnZSwgKiwgcG9saWN5PWNvbXBhdDMyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgX2NsYXNzPU5vbmUsICosIHBvbGljeT1jb21wYXQzMik6CiAgICAgICAgICIiIlBhcnNlciBvZiBSRkMgMjgyMiBhbmQgTUlNRSBlbWFpbCBtZXNzYWdlcy4KIAogICAgICAgICBDcmVhdGVzIGFuIGluLW1lbW9yeSBvYmplY3QgdHJlZSByZXByZXNlbnRpbmcgdGhlIGVtYWlsIG1lc3NhZ2UsIHdoaWNoCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvcG9saWN5LnB5IGIvTGliL2VtYWlsL3BvbGljeS5weQppbmRleCAzOGU4OGFmLi5mMGIyMGY0IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvcG9saWN5LnB5CisrKyBiL0xpYi9lbWFpbC9wb2xpY3kucHkKQEAgLTUsNiArNSw3IEBACiBmcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBQb2xpY3ksIENvbXBhdDMyLCBjb21wYXQzMiwgX2V4dGVuZF9kb2NzdHJpbmdzCiBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBfaGFzX3N1cnJvZ2F0ZXMKIGZyb20gZW1haWwuaGVhZGVycmVnaXN0cnkgaW1wb3J0IEhlYWRlclJlZ2lzdHJ5IGFzIEhlYWRlclJlZ2lzdHJ5Citmcm9tIGVtYWlsLmNvbnRlbnRtYW5hZ2VyIGltcG9ydCByYXdfZGF0YV9tYW5hZ2VyCiAKIF9fYWxsX18gPSBbCiAgICAgJ0NvbXBhdDMyJywKQEAgLTU4LDEwICs1OSwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCB0cmVhdG1lbnQsIHdoaWxlIGFsbCBvdGhlciBmaWVsZHMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVhdGVkIGFzIHVuc3RydWN0dXJlZC4gIFRoaXMgbGlzdCB3aWxsIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgYmVmb3JlIHRoZSBleHRlbnNpb24gaXMgbWFya2VkIHN0YWJsZS4pCisKKyAgICBjb250ZW50X21hbmFnZXIgICAgIC0tIGFuIG9iamVjdCB3aXRoIGF0IGxlYXN0IHR3byBtZXRob2RzOiBnZXRfY29udGVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNldF9jb250ZW50LiAgV2hlbiB0aGUgZ2V0X2NvbnRlbnQgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9jb250ZW50IG1ldGhvZCBvZiBhIE1lc3NhZ2Ugb2JqZWN0IGlzIGNhbGxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGNhbGxzIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZCBvZiB0aGlzIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgaXQgdGhlIG1lc3NhZ2Ugb2JqZWN0IGFzIGl0cyBmaXJzdCBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbnkgYXJndW1lbnRzIG9yIGtleXdvcmRzIHRoYXQgd2VyZSBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfbWFuYWdlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGE6YH5lbWFpbC5jb250ZW50bWFuYWdlci5yYXdfZGF0YV9tYW5hZ2VyYC4KKwogICAgICIiIgogCiAgICAgcmVmb2xkX3NvdXJjZSA9ICdsb25nJwogICAgIGhlYWRlcl9mYWN0b3J5ID0gSGVhZGVyUmVnaXN0cnkoKQorICAgIGNvbnRlbnRfbWFuYWdlciA9IHJhd19kYXRhX21hbmFnZXIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3KToKICAgICAgICAgIyBFbnN1cmUgdGhhdCBlYWNoIG5ldyBpbnN0YW5jZSBnZXRzIGEgdW5pcXVlIGhlYWRlciBmYWN0b3J5CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvdXRpbHMucHkgYi9MaWIvZW1haWwvdXRpbHMucHkKaW5kZXggZjc2YzIxZS4uOTU4NTVkOCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3V0aWxzLnB5CisrKyBiL0xpYi9lbWFpbC91dGlscy5weQpAQCAtNTQsMTcgKzU0LDI3IEBACiBzcGVjaWFsc3JlID0gcmUuY29tcGlsZShyJ1tdW1xcKCk8PkAsOjsiLl0nKQogZXNjYXBlc3JlID0gcmUuY29tcGlsZShyJ1tcXCJdJykKIAotIyBIb3cgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBzdHJpbmdzIHRoYXQgY29tZSBmcm9tIGEgYnl0ZQotIyBzb3VyY2Ugd2l0aCB1bmRlY29kYWJsZSBjaGFyYWN0ZXJzLgotX2hhc19zdXJyb2dhdGVzID0gcmUuY29tcGlsZSgKLSAgICAnKFteXHVkODAwLVx1ZGJmZl18XEEpW1x1ZGMwMC1cdWRmZmZdKFteXHVkYzAwLVx1ZGZmZl18XFopJykuc2VhcmNoCitkZWYgX2hhc19zdXJyb2dhdGVzKHMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIHMgY29udGFpbnMgc3Vycm9nYXRlLWVzY2FwZWQgYmluYXJ5IGRhdGEuIiIiCisgICAgIyBUaGlzIGNoZWNrIGlzIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgdW5sZXNzIHRoZXJlIGFyZSBzdXJyb2dhdGVzLCB1dGY4CisgICAgIyAoUHl0aG9uJ3MgZGVmYXVsdCBlbmNvZGluZykgY2FuIGVuY29kZSBhbnkgc3RyaW5nLiAgVGhpcyBpcyB0aGUgZmFzdGVzdAorICAgICMgd2F5IHRvIGNoZWNrIGZvciBzdXJyb2dhdGVzLCBzZWUgaXNzdWUgMTE0NTQgZm9yIHRpbWluZ3MuCisgICAgdHJ5OgorICAgICAgICBzLmVuY29kZSgpCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgIHJldHVybiBUcnVlCiAKICMgSG93IHRvIGRlYWwgd2l0aCBhIHN0cmluZyBjb250YWluaW5nIGJ5dGVzIGJlZm9yZSBoYW5kaW5nIGl0IHRvIHRoZQogIyBhcHBsaWNhdGlvbiB0aHJvdWdoIHRoZSAnbm9ybWFsJyBpbnRlcmZhY2UuCiBkZWYgX3Nhbml0aXplKHN0cmluZyk6Ci0gICAgIyBUdXJuIGFueSBlc2NhcGVkIGJ5dGVzIGludG8gdW5pY29kZSAndW5rbm93bicgY2hhci4KLSAgICBvcmlnaW5hbF9ieXRlcyA9IHN0cmluZy5lbmNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCi0gICAgcmV0dXJuIG9yaWdpbmFsX2J5dGVzLmRlY29kZSgnYXNjaWknLCAncmVwbGFjZScpCisgICAgIyBUdXJuIGFueSBlc2NhcGVkIGJ5dGVzIGludG8gdW5pY29kZSAndW5rbm93bicgY2hhci4gIElmIHRoZSBlc2NhcGVkCisgICAgIyBieXRlcyBoYXBwZW4gdG8gYmUgdXRmLTggdGhleSB3aWxsIGluc3RlYWQgZ2V0IGRlY29kZWQsIGV2ZW4gaWYgdGhleQorICAgICMgd2VyZSBpbnZhbGlkIGluIHRoZSBjaGFyc2V0IHRoZSBzb3VyY2Ugd2FzIHN1cHBvc2VkIHRvIGJlIGluLiAgVGhpcworICAgICMgc2VlbXMgbGlrZSBpdCBpcyBub3QgYSBiYWQgdGhpbmc7IGEgZGVmZWN0IHdhcyBzdGlsbCByZWdpc3RlcmVkLgorICAgIG9yaWdpbmFsX2J5dGVzID0gc3RyaW5nLmVuY29kZSgndXRmLTgnLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICByZXR1cm4gb3JpZ2luYWxfYnl0ZXMuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJykKKwogCiAKICMgSGVscGVycwpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5IGIvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5CmluZGV4IDIzNWRlYjUuLjU0NjFhYTAgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weQorKysgYi9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkKQEAgLTMzLDkgKzMzLDkgQEAKICAgICAndXMnICAgICAgICAgICAgICAgICA6ICdhc2NpaScsCiAgICAgJ3VzX2FzY2lpJyAgICAgICAgICAgOiAnYXNjaWknLAogCi0gICAgIyMgYmFzZTY0X2NvZGVjIGNvZGVjCi0gICAgIydiYXNlNjQnICAgICAgICAgICAgIDogJ2Jhc2U2NF9jb2RlYycsCi0gICAgIydiYXNlXzY0JyAgICAgICAgICAgIDogJ2Jhc2U2NF9jb2RlYycsCisgICAgIyBiYXNlNjRfY29kZWMgY29kZWMKKyAgICAnYmFzZTY0JyAgICAgICAgICAgICA6ICdiYXNlNjRfY29kZWMnLAorICAgICdiYXNlXzY0JyAgICAgICAgICAgIDogJ2Jhc2U2NF9jb2RlYycsCiAKICAgICAjIGJpZzUgY29kZWMKICAgICAnYmlnNV90dycgICAgICAgICAgICA6ICdiaWc1JywKQEAgLTQ1LDggKzQ1LDggQEAKICAgICAnYmlnNV9oa3NjcycgICAgICAgICA6ICdiaWc1aGtzY3MnLAogICAgICdoa3NjcycgICAgICAgICAgICAgIDogJ2JpZzVoa3NjcycsCiAKLSAgICAjIyBiejJfY29kZWMgY29kZWMKLSAgICAjJ2J6MicgICAgICAgICAgICAgICAgOiAnYnoyX2NvZGVjJywKKyAgICAjIGJ6Ml9jb2RlYyBjb2RlYworICAgICdiejInICAgICAgICAgICAgICAgIDogJ2J6Ml9jb2RlYycsCiAKICAgICAjIGNwMDM3IGNvZGVjCiAgICAgJzAzNycgICAgICAgICAgICAgICAgOiAnY3AwMzcnLApAQCAtNjMsNiArNjMsMTIgQEAKICAgICAnY3NpYm0xMDI2JyAgICAgICAgICA6ICdjcDEwMjYnLAogICAgICdpYm0xMDI2JyAgICAgICAgICAgIDogJ2NwMTAyNicsCiAKKyAgICAjIGNwMTEyNSBjb2RlYworICAgICcxMTI1JyAgICAgICAgICAgICAgICA6ICdjcDExMjUnLAorICAgICdpYm0xMTI1JyAgICAgICAgICAgICA6ICdjcDExMjUnLAorICAgICdjcDg2NnUnICAgICAgICAgICAgICA6ICdjcDExMjUnLAorICAgICdydXNjaWknICAgICAgICAgICAgICA6ICdjcDExMjUnLAorCiAgICAgIyBjcDExNDAgY29kZWMKICAgICAnMTE0MCcgICAgICAgICAgICAgICA6ICdjcDExNDAnLAogICAgICdpYm0xMTQwJyAgICAgICAgICAgIDogJ2NwMTE0MCcsCkBAIC0yNDgsOCArMjU0LDggQEAKICAgICAnY3A5MzYnICAgICAgICAgICAgICA6ICdnYmsnLAogICAgICdtczkzNicgICAgICAgICAgICAgIDogJ2diaycsCiAKLSAgICAjIyBoZXhfY29kZWMgY29kZWMKLSAgICAjJ2hleCcgICAgICAgICAgICAgICAgOiAnaGV4X2NvZGVjJywKKyAgICAjIGhleF9jb2RlYyBjb2RlYworICAgICdoZXgnICAgICAgICAgICAgICAgIDogJ2hleF9jb2RlYycsCiAKICAgICAjIGhwX3JvbWFuOCBjb2RlYwogICAgICdyb21hbjgnICAgICAgICAgICAgIDogJ2hwX3JvbWFuOCcsCkBAIC00NTAsMTMgKzQ1NiwxMyBAQAogICAgICdjcDE1NCcgICAgICAgICAgICAgIDogJ3B0Y3AxNTQnLAogICAgICdjeXJpbGxpY19hc2lhbicgICAgIDogJ3B0Y3AxNTQnLAogCi0gICAgIyMgcXVvcHJpX2NvZGVjIGNvZGVjCi0gICAgIydxdW9wcmknICAgICAgICAgICAgIDogJ3F1b3ByaV9jb2RlYycsCi0gICAgIydxdW90ZWRfcHJpbnRhYmxlJyAgIDogJ3F1b3ByaV9jb2RlYycsCi0gICAgIydxdW90ZWRwcmludGFibGUnICAgIDogJ3F1b3ByaV9jb2RlYycsCisgICAgIyBxdW9wcmlfY29kZWMgY29kZWMKKyAgICAncXVvcHJpJyAgICAgICAgICAgICA6ICdxdW9wcmlfY29kZWMnLAorICAgICdxdW90ZWRfcHJpbnRhYmxlJyAgIDogJ3F1b3ByaV9jb2RlYycsCisgICAgJ3F1b3RlZHByaW50YWJsZScgICAgOiAncXVvcHJpX2NvZGVjJywKIAotICAgICMjIHJvdF8xMyBjb2RlYwotICAgICMncm90MTMnICAgICAgICAgICAgICA6ICdyb3RfMTMnLAorICAgICMgcm90XzEzIGNvZGVjCisgICAgJ3JvdDEzJyAgICAgICAgICAgICAgOiAncm90XzEzJywKIAogICAgICMgc2hpZnRfamlzIGNvZGVjCiAgICAgJ2Nzc2hpZnRqaXMnICAgICAgICAgOiAnc2hpZnRfamlzJywKQEAgLTUxOCwxMiArNTI0LDEyIEBACiAgICAgJ3V0ZjhfdWNzMicgICAgICAgICAgOiAndXRmXzgnLAogICAgICd1dGY4X3VjczQnICAgICAgICAgIDogJ3V0Zl84JywKIAotICAgICMjIHV1X2NvZGVjIGNvZGVjCi0gICAgIyd1dScgICAgICAgICAgICAgICAgIDogJ3V1X2NvZGVjJywKKyAgICAjIHV1X2NvZGVjIGNvZGVjCisgICAgJ3V1JyAgICAgICAgICAgICAgICAgOiAndXVfY29kZWMnLAogCi0gICAgIyMgemxpYl9jb2RlYyBjb2RlYwotICAgICMnemlwJyAgICAgICAgICAgICAgICA6ICd6bGliX2NvZGVjJywKLSAgICAjJ3psaWInICAgICAgICAgICAgICAgOiAnemxpYl9jb2RlYycsCisgICAgIyB6bGliX2NvZGVjIGNvZGVjCisgICAgJ3ppcCcgICAgICAgICAgICAgICAgOiAnemxpYl9jb2RlYycsCisgICAgJ3psaWInICAgICAgICAgICAgICAgOiAnemxpYl9jb2RlYycsCiAKICAgICAjIHRlbXBvcmFyeSBtYWMgQ0pLIGFsaWFzZXMsIHdpbGwgYmUgcmVwbGFjZWQgYnkgcHJvcGVyIGNvZGVjcyBpbiAzLjEKICAgICAneF9tYWNfamFwYW5lc2UnICAgICAgOiAnc2hpZnRfamlzJywKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvYmFzZTY0X2NvZGVjLnB5IGIvTGliL2VuY29kaW5ncy9iYXNlNjRfY29kZWMucHkKaW5kZXggMzIxYTk2MS4uODgxZDFiYSAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9iYXNlNjRfY29kZWMucHkKKysrIGIvTGliL2VuY29kaW5ncy9iYXNlNjRfY29kZWMucHkKQEAgLTUyLDQgKzUyLDUgQEAKICAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKICAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKICAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgX2lzX3RleHRfZW5jb2Rpbmc9RmFsc2UsCiAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9iejJfY29kZWMucHkgYi9MaWIvZW5jb2RpbmdzL2J6Ml9jb2RlYy5weQppbmRleCBlNjVkMjI2Li5mZDk0OTVlIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2J6Ml9jb2RlYy5weQorKysgYi9MaWIvZW5jb2RpbmdzL2J6Ml9jb2RlYy5weQpAQCAtNzQsNCArNzQsNSBAQAogICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAogICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAogICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBfaXNfdGV4dF9lbmNvZGluZz1GYWxzZSwKICAgICApCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2NwMDM3LnB5IGIvTGliL2VuY29kaW5ncy9jcDAzNy5weQppbmRleCBiZmUyYzFlLi40ZWRkNzA4IDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2NwMDM3LnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvY3AwMzcucHkKQEAgLTMwMSw3ICszMDEsNiBAQAogICAgICdceGQ5JyAgICAgIyAgMHhGRCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKICAgICAnXHhkYScgICAgICMgIDB4RkUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCiAgICAgJ1x4OWYnICAgICAjICAweEZGIC0+IENPTlRST0wKLSAgICAnXHVmZmZlJyAgICMjIFdpZGVuIHRvIFVDUzIgZm9yIG9wdGltaXphdGlvbgogKQogCiAjIyMgRW5jb2RpbmcgdGFibGUKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3AxMTI1LnB5IGIvTGliL2VuY29kaW5ncy9jcDExMjUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmZDY5ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbmNvZGluZ3MvY3AxMTI1LnB5CkBAIC0wLDAgKzEsNjk4IEBACisiIiIgUHl0aG9uIENoYXJhY3RlciBNYXBwaW5nIENvZGVjIGZvciBDUDExMjUKKworIiIiIyIKKworaW1wb3J0IGNvZGVjcworCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorCisgICAgZGVmIGVuY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsZXJyb3JzLGVuY29kaW5nX21hcCkKKworICAgIGRlZiBkZWNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LGVycm9ycyxkZWNvZGluZ190YWJsZSkKKworY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgorICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxzZWxmLmVycm9ycyxlbmNvZGluZ19tYXApWzBdCisKK2NsYXNzIEluY3JlbWVudGFsRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZGVjb2RpbmdfdGFibGUpWzBdCisKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYyxjb2RlY3MuU3RyZWFtV3JpdGVyKToKKyAgICBwYXNzCisKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYyxjb2RlY3MuU3RyZWFtUmVhZGVyKToKKyAgICBwYXNzCisKKyMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQorCitkZWYgZ2V0cmVnZW50cnkoKToKKyAgICByZXR1cm4gY29kZWNzLkNvZGVjSW5mbygKKyAgICAgICAgbmFtZT0nY3AxMTI1JywKKyAgICAgICAgZW5jb2RlPUNvZGVjKCkuZW5jb2RlLAorICAgICAgICBkZWNvZGU9Q29kZWMoKS5kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgKQorCisjIyMgRGVjb2RpbmcgTWFwCisKK2RlY29kaW5nX21hcCA9IGNvZGVjcy5tYWtlX2lkZW50aXR5X2RpY3QocmFuZ2UoMjU2KSkKK2RlY29kaW5nX21hcC51cGRhdGUoeworICAgIDB4MDA4MDogMHgwNDEwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQQorICAgIDB4MDA4MTogMHgwNDExLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkUKKyAgICAweDAwODI6IDB4MDQxMiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFZFCisgICAgMHgwMDgzOiAweDA0MTMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUKKyAgICAweDAwODQ6IDB4MDQxNCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIERFCisgICAgMHgwMDg1OiAweDA0MTUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRQorICAgIDB4MDA4NjogMHgwNDE2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkhFCisgICAgMHgwMDg3OiAweDA0MTcsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaRQorICAgIDB4MDA4ODogMHgwNDE4LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSQorICAgIDB4MDA4OTogMHgwNDE5LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hPUlQgSQorICAgIDB4MDA4YTogMHgwNDFhLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0EKKyAgICAweDAwOGI6IDB4MDQxYiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVMCisgICAgMHgwMDhjOiAweDA0MWMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTQorICAgIDB4MDA4ZDogMHgwNDFkLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU4KKyAgICAweDAwOGU6IDB4MDQxZSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIE8KKyAgICAweDAwOGY6IDB4MDQxZiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFBFCisgICAgMHgwMDkwOiAweDA0MjAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUgorICAgIDB4MDA5MTogMHgwNDIxLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVMKKyAgICAweDAwOTI6IDB4MDQyMiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFRFCisgICAgMHgwMDkzOiAweDA0MjMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVCisgICAgMHgwMDk0OiAweDA0MjQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFRgorICAgIDB4MDA5NTogMHgwNDI1LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEEKKyAgICAweDAwOTY6IDB4MDQyNiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFRTRQorICAgIDB4MDA5NzogMHgwNDI3LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFCisgICAgMHgwMDk4OiAweDA0MjgsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSEEKKyAgICAweDAwOTk6IDB4MDQyOSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQ0hBCisgICAgMHgwMDlhOiAweDA0MmEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQVJEIFNJR04KKyAgICAweDAwOWI6IDB4MDQyYiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlFUlUKKyAgICAweDAwOWM6IDB4MDQyYywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNPRlQgU0lHTgorICAgIDB4MDA5ZDogMHgwNDJkLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRQorICAgIDB4MDA5ZTogMHgwNDJlLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWVUKKyAgICAweDAwOWY6IDB4MDQyZiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlBCisgICAgMHgwMGEwOiAweDA0MzAsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQQorICAgIDB4MDBhMTogMHgwNDMxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJFCisgICAgMHgwMGEyOiAweDA0MzIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVkUKKyAgICAweDAwYTM6IDB4MDQzMywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUKKyAgICAweDAwYTQ6IDB4MDQzNCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBERQorICAgIDB4MDBhNTogMHgwNDM1LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElFCisgICAgMHgwMGE2OiAweDA0MzYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFCisgICAgMHgwMGE3OiAweDA0MzcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUKKyAgICAweDAwYTg6IDB4MDQzOCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJCisgICAgMHgwMGE5OiAweDA0MzksICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hPUlQgSQorICAgIDB4MDBhYTogMHgwNDNhLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBCisgICAgMHgwMGFiOiAweDA0M2IsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUwKKyAgICAweDAwYWM6IDB4MDQzYywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTQorICAgIDB4MDBhZDogMHgwNDNkLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVOCisgICAgMHgwMGFlOiAweDA0M2UsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgTworICAgIDB4MDBhZjogMHgwNDNmLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFBFCisgICAgMHgwMGIwOiAweDI1OTEsICAgICAjICBMSUdIVCBTSEFERQorICAgIDB4MDBiMTogMHgyNTkyLCAgICAgIyAgTUVESVVNIFNIQURFCisgICAgMHgwMGIyOiAweDI1OTMsICAgICAjICBEQVJLIFNIQURFCisgICAgMHgwMGIzOiAweDI1MDIsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwKKyAgICAweDAwYjQ6IDB4MjUyNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MDBiNTogMHgyNTYxLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDAwYjY6IDB4MjU2MiwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgwMGI3OiAweDI1NTYsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgwMGI4OiAweDI1NTUsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgwMGI5OiAweDI1NjMsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgwMGJhOiAweDI1NTEsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMCisgICAgMHgwMGJiOiAweDI1NTcsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIExFRlQKKyAgICAweDAwYmM6IDB4MjU1ZCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKKyAgICAweDAwYmQ6IDB4MjU1YywgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgwMGJlOiAweDI1NWIsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MDBiZjogMHgyNTEwLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQKKyAgICAweDAwYzA6IDB4MjUxNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgUklHSFQKKyAgICAweDAwYzE6IDB4MjUzNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjMjogMHgyNTJjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDAwYzM6IDB4MjUxYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDAwYzQ6IDB4MjUwMCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMCisgICAgMHgwMGM1OiAweDI1M2MsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDAwYzY6IDB4MjU1ZSwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MDBjNzogMHgyNTVmLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgwMGM4OiAweDI1NWEsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBSSUdIVAorICAgIDB4MDBjOTogMHgyNTU0LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBSSUdIVAorICAgIDB4MDBjYTogMHgyNTY5LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjYjogMHgyNTY2LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGNjOiAweDI1NjAsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIDB4MDBjZDogMHgyNTUwLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBIT1JJWk9OVEFMCisgICAgMHgwMGNlOiAweDI1NmMsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGNmOiAweDI1NjcsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MDBkMDogMHgyNTY4LCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDAwZDE6IDB4MjU2NCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDAwZDI6IDB4MjU2NSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDAwZDM6IDB4MjU1OSwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MDBkNDogMHgyNTU4LCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgwMGQ1OiAweDI1NTIsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MDBkNjogMHgyNTUzLCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDAwZDc6IDB4MjU2YiwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgwMGQ4OiAweDI1NmEsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MDBkOTogMHgyNTE4LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBMRUZUCisgICAgMHgwMGRhOiAweDI1MGMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKyAgICAweDAwZGI6IDB4MjU4OCwgICAgICMgIEZVTEwgQkxPQ0sKKyAgICAweDAwZGM6IDB4MjU4NCwgICAgICMgIExPV0VSIEhBTEYgQkxPQ0sKKyAgICAweDAwZGQ6IDB4MjU4YywgICAgICMgIExFRlQgSEFMRiBCTE9DSworICAgIDB4MDBkZTogMHgyNTkwLCAgICAgIyAgUklHSFQgSEFMRiBCTE9DSworICAgIDB4MDBkZjogMHgyNTgwLCAgICAgIyAgVVBQRVIgSEFMRiBCTE9DSworICAgIDB4MDBlMDogMHgwNDQwLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVSCisgICAgMHgwMGUxOiAweDA0NDEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVMKKyAgICAweDAwZTI6IDB4MDQ0MiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBURQorICAgIDB4MDBlMzogMHgwNDQzLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFUKKyAgICAweDAwZTQ6IDB4MDQ0NCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFRgorICAgIDB4MDBlNTogMHgwNDQ1LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBCisgICAgMHgwMGU2OiAweDA0NDYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVFNFCisgICAgMHgwMGU3OiAweDA0NDcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFCisgICAgMHgwMGU4OiAweDA0NDgsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hBCisgICAgMHgwMGU5OiAweDA0NDksICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hDSEEKKyAgICAweDAwZWE6IDB4MDQ0YSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBIQVJEIFNJR04KKyAgICAweDAwZWI6IDB4MDQ0YiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZRVJVCisgICAgMHgwMGVjOiAweDA0NGMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU09GVCBTSUdOCisgICAgMHgwMGVkOiAweDA0NGQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRQorICAgIDB4MDBlZTogMHgwNDRlLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCisgICAgMHgwMGVmOiAweDA0NGYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUEKKyAgICAweDAwZjA6IDB4MDQwMSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIElPCisgICAgMHgwMGYxOiAweDA0NTEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSU8KKyAgICAweDAwZjI6IDB4MDQ5MCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgIDB4MDBmMzogMHgwNDkxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgIDB4MDBmNDogMHgwNDA0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgMHgwMGY1OiAweDA0NTQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgMHgwMGY2OiAweDA0MDYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAweDAwZjc6IDB4MDQ1NiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAweDAwZjg6IDB4MDQwNywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlJCisgICAgMHgwMGY5OiAweDA0NTcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUkKKyAgICAweDAwZmE6IDB4MDBiNywgICAgICMgIE1JRERMRSBET1QKKyAgICAweDAwZmI6IDB4MjIxYSwgICAgICMgIFNRVUFSRSBST09UCisgICAgMHgwMGZjOiAweDIxMTYsICAgICAjICBOVU1FUk8gU0lHTgorICAgIDB4MDBmZDogMHgwMGE0LCAgICAgIyAgQ1VSUkVOQ1kgU0lHTgorICAgIDB4MDBmZTogMHgyNWEwLCAgICAgIyAgQkxBQ0sgU1FVQVJFCisgICAgMHgwMGZmOiAweDAwYTAsICAgICAjICBOTy1CUkVBSyBTUEFDRQorfSkKKworIyMjIERlY29kaW5nIFRhYmxlCisKK2RlY29kaW5nX3RhYmxlID0gKAorICAgICdceDAwJyAgICAgIyAgMHgwMDAwIC0+IE5VTEwKKyAgICAnXHgwMScgICAgICMgIDB4MDAwMSAtPiBTVEFSVCBPRiBIRUFESU5HCisgICAgJ1x4MDInICAgICAjICAweDAwMDIgLT4gU1RBUlQgT0YgVEVYVAorICAgICdceDAzJyAgICAgIyAgMHgwMDAzIC0+IEVORCBPRiBURVhUCisgICAgJ1x4MDQnICAgICAjICAweDAwMDQgLT4gRU5EIE9GIFRSQU5TTUlTU0lPTgorICAgICdceDA1JyAgICAgIyAgMHgwMDA1IC0+IEVOUVVJUlkKKyAgICAnXHgwNicgICAgICMgIDB4MDAwNiAtPiBBQ0tOT1dMRURHRQorICAgICdceDA3JyAgICAgIyAgMHgwMDA3IC0+IEJFTEwKKyAgICAnXHgwOCcgICAgICMgIDB4MDAwOCAtPiBCQUNLU1BBQ0UKKyAgICAnXHQnICAgICAgICMgIDB4MDAwOSAtPiBIT1JJWk9OVEFMIFRBQlVMQVRJT04KKyAgICAnXG4nICAgICAgICMgIDB4MDAwYSAtPiBMSU5FIEZFRUQKKyAgICAnXHgwYicgICAgICMgIDB4MDAwYiAtPiBWRVJUSUNBTCBUQUJVTEFUSU9OCisgICAgJ1x4MGMnICAgICAjICAweDAwMGMgLT4gRk9STSBGRUVECisgICAgJ1xyJyAgICAgICAjICAweDAwMGQgLT4gQ0FSUklBR0UgUkVUVVJOCisgICAgJ1x4MGUnICAgICAjICAweDAwMGUgLT4gU0hJRlQgT1VUCisgICAgJ1x4MGYnICAgICAjICAweDAwMGYgLT4gU0hJRlQgSU4KKyAgICAnXHgxMCcgICAgICMgIDB4MDAxMCAtPiBEQVRBIExJTksgRVNDQVBFCisgICAgJ1x4MTEnICAgICAjICAweDAwMTEgLT4gREVWSUNFIENPTlRST0wgT05FCisgICAgJ1x4MTInICAgICAjICAweDAwMTIgLT4gREVWSUNFIENPTlRST0wgVFdPCisgICAgJ1x4MTMnICAgICAjICAweDAwMTMgLT4gREVWSUNFIENPTlRST0wgVEhSRUUKKyAgICAnXHgxNCcgICAgICMgIDB4MDAxNCAtPiBERVZJQ0UgQ09OVFJPTCBGT1VSCisgICAgJ1x4MTUnICAgICAjICAweDAwMTUgLT4gTkVHQVRJVkUgQUNLTk9XTEVER0UKKyAgICAnXHgxNicgICAgICMgIDB4MDAxNiAtPiBTWU5DSFJPTk9VUyBJRExFCisgICAgJ1x4MTcnICAgICAjICAweDAwMTcgLT4gRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSworICAgICdceDE4JyAgICAgIyAgMHgwMDE4IC0+IENBTkNFTAorICAgICdceDE5JyAgICAgIyAgMHgwMDE5IC0+IEVORCBPRiBNRURJVU0KKyAgICAnXHgxYScgICAgICMgIDB4MDAxYSAtPiBTVUJTVElUVVRFCisgICAgJ1x4MWInICAgICAjICAweDAwMWIgLT4gRVNDQVBFCisgICAgJ1x4MWMnICAgICAjICAweDAwMWMgLT4gRklMRSBTRVBBUkFUT1IKKyAgICAnXHgxZCcgICAgICMgIDB4MDAxZCAtPiBHUk9VUCBTRVBBUkFUT1IKKyAgICAnXHgxZScgICAgICMgIDB4MDAxZSAtPiBSRUNPUkQgU0VQQVJBVE9SCisgICAgJ1x4MWYnICAgICAjICAweDAwMWYgLT4gVU5JVCBTRVBBUkFUT1IKKyAgICAnICcgICAgICAgICMgIDB4MDAyMCAtPiBTUEFDRQorICAgICchJyAgICAgICAgIyAgMHgwMDIxIC0+IEVYQ0xBTUFUSU9OIE1BUksKKyAgICAnIicgICAgICAgICMgIDB4MDAyMiAtPiBRVU9UQVRJT04gTUFSSworICAgICcjJyAgICAgICAgIyAgMHgwMDIzIC0+IE5VTUJFUiBTSUdOCisgICAgJyQnICAgICAgICAjICAweDAwMjQgLT4gRE9MTEFSIFNJR04KKyAgICAnJScgICAgICAgICMgIDB4MDAyNSAtPiBQRVJDRU5UIFNJR04KKyAgICAnJicgICAgICAgICMgIDB4MDAyNiAtPiBBTVBFUlNBTkQKKyAgICAiJyIgICAgICAgICMgIDB4MDAyNyAtPiBBUE9TVFJPUEhFCisgICAgJygnICAgICAgICAjICAweDAwMjggLT4gTEVGVCBQQVJFTlRIRVNJUworICAgICcpJyAgICAgICAgIyAgMHgwMDI5IC0+IFJJR0hUIFBBUkVOVEhFU0lTCisgICAgJyonICAgICAgICAjICAweDAwMmEgLT4gQVNURVJJU0sKKyAgICAnKycgICAgICAgICMgIDB4MDAyYiAtPiBQTFVTIFNJR04KKyAgICAnLCcgICAgICAgICMgIDB4MDAyYyAtPiBDT01NQQorICAgICctJyAgICAgICAgIyAgMHgwMDJkIC0+IEhZUEhFTi1NSU5VUworICAgICcuJyAgICAgICAgIyAgMHgwMDJlIC0+IEZVTEwgU1RPUAorICAgICcvJyAgICAgICAgIyAgMHgwMDJmIC0+IFNPTElEVVMKKyAgICAnMCcgICAgICAgICMgIDB4MDAzMCAtPiBESUdJVCBaRVJPCisgICAgJzEnICAgICAgICAjICAweDAwMzEgLT4gRElHSVQgT05FCisgICAgJzInICAgICAgICAjICAweDAwMzIgLT4gRElHSVQgVFdPCisgICAgJzMnICAgICAgICAjICAweDAwMzMgLT4gRElHSVQgVEhSRUUKKyAgICAnNCcgICAgICAgICMgIDB4MDAzNCAtPiBESUdJVCBGT1VSCisgICAgJzUnICAgICAgICAjICAweDAwMzUgLT4gRElHSVQgRklWRQorICAgICc2JyAgICAgICAgIyAgMHgwMDM2IC0+IERJR0lUIFNJWAorICAgICc3JyAgICAgICAgIyAgMHgwMDM3IC0+IERJR0lUIFNFVkVOCisgICAgJzgnICAgICAgICAjICAweDAwMzggLT4gRElHSVQgRUlHSFQKKyAgICAnOScgICAgICAgICMgIDB4MDAzOSAtPiBESUdJVCBOSU5FCisgICAgJzonICAgICAgICAjICAweDAwM2EgLT4gQ09MT04KKyAgICAnOycgICAgICAgICMgIDB4MDAzYiAtPiBTRU1JQ09MT04KKyAgICAnPCcgICAgICAgICMgIDB4MDAzYyAtPiBMRVNTLVRIQU4gU0lHTgorICAgICc9JyAgICAgICAgIyAgMHgwMDNkIC0+IEVRVUFMUyBTSUdOCisgICAgJz4nICAgICAgICAjICAweDAwM2UgLT4gR1JFQVRFUi1USEFOIFNJR04KKyAgICAnPycgICAgICAgICMgIDB4MDAzZiAtPiBRVUVTVElPTiBNQVJLCisgICAgJ0AnICAgICAgICAjICAweDAwNDAgLT4gQ09NTUVSQ0lBTCBBVAorICAgICdBJyAgICAgICAgIyAgMHgwMDQxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEKKyAgICAnQicgICAgICAgICMgIDB4MDA0MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisgICAgJ0MnICAgICAgICAjICAweDAwNDMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworICAgICdEJyAgICAgICAgIyAgMHgwMDQ0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEQKKyAgICAnRScgICAgICAgICMgIDB4MDA0NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisgICAgJ0YnICAgICAgICAjICAweDAwNDYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorICAgICdHJyAgICAgICAgIyAgMHgwMDQ3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEcKKyAgICAnSCcgICAgICAgICMgIDB4MDA0OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBICisgICAgJ0knICAgICAgICAjICAweDAwNDkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorICAgICdKJyAgICAgICAgIyAgMHgwMDRhIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEoKKyAgICAnSycgICAgICAgICMgIDB4MDA0YiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisgICAgJ0wnICAgICAgICAjICAweDAwNGMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorICAgICdNJyAgICAgICAgIyAgMHgwMDRkIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE0KKyAgICAnTicgICAgICAgICMgIDB4MDA0ZSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisgICAgJ08nICAgICAgICAjICAweDAwNGYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworICAgICdQJyAgICAgICAgIyAgMHgwMDUwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFAKKyAgICAnUScgICAgICAgICMgIDB4MDA1MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisgICAgJ1InICAgICAgICAjICAweDAwNTIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorICAgICdTJyAgICAgICAgIyAgMHgwMDUzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFMKKyAgICAnVCcgICAgICAgICMgIDB4MDA1NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisgICAgJ1UnICAgICAgICAjICAweDAwNTUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorICAgICdWJyAgICAgICAgIyAgMHgwMDU2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFYKKyAgICAnVycgICAgICAgICMgIDB4MDA1NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisgICAgJ1gnICAgICAgICAjICAweDAwNTggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorICAgICdZJyAgICAgICAgIyAgMHgwMDU5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFkKKyAgICAnWicgICAgICAgICMgIDB4MDA1YSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisgICAgJ1snICAgICAgICAjICAweDAwNWIgLT4gTEVGVCBTUVVBUkUgQlJBQ0tFVAorICAgICdcXCcgICAgICAgIyAgMHgwMDVjIC0+IFJFVkVSU0UgU09MSURVUworICAgICddJyAgICAgICAgIyAgMHgwMDVkIC0+IFJJR0hUIFNRVUFSRSBCUkFDS0VUCisgICAgJ14nICAgICAgICAjICAweDAwNWUgLT4gQ0lSQ1VNRkxFWCBBQ0NFTlQKKyAgICAnXycgICAgICAgICMgIDB4MDA1ZiAtPiBMT1cgTElORQorICAgICdgJyAgICAgICAgIyAgMHgwMDYwIC0+IEdSQVZFIEFDQ0VOVAorICAgICdhJyAgICAgICAgIyAgMHgwMDYxIC0+IExBVElOIFNNQUxMIExFVFRFUiBBCisgICAgJ2InICAgICAgICAjICAweDAwNjIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEIKKyAgICAnYycgICAgICAgICMgIDB4MDA2MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQworICAgICdkJyAgICAgICAgIyAgMHgwMDY0IC0+IExBVElOIFNNQUxMIExFVFRFUiBECisgICAgJ2UnICAgICAgICAjICAweDAwNjUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUKKyAgICAnZicgICAgICAgICMgIDB4MDA2NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRgorICAgICdnJyAgICAgICAgIyAgMHgwMDY3IC0+IExBVElOIFNNQUxMIExFVFRFUiBHCisgICAgJ2gnICAgICAgICAjICAweDAwNjggLT4gTEFUSU4gU01BTEwgTEVUVEVSIEgKKyAgICAnaScgICAgICAgICMgIDB4MDA2OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSQorICAgICdqJyAgICAgICAgIyAgMHgwMDZhIC0+IExBVElOIFNNQUxMIExFVFRFUiBKCisgICAgJ2snICAgICAgICAjICAweDAwNmIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEsKKyAgICAnbCcgICAgICAgICMgIDB4MDA2YyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTAorICAgICdtJyAgICAgICAgIyAgMHgwMDZkIC0+IExBVElOIFNNQUxMIExFVFRFUiBNCisgICAgJ24nICAgICAgICAjICAweDAwNmUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE4KKyAgICAnbycgICAgICAgICMgIDB4MDA2ZiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTworICAgICdwJyAgICAgICAgIyAgMHgwMDcwIC0+IExBVElOIFNNQUxMIExFVFRFUiBQCisgICAgJ3EnICAgICAgICAjICAweDAwNzEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFEKKyAgICAncicgICAgICAgICMgIDB4MDA3MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUgorICAgICdzJyAgICAgICAgIyAgMHgwMDczIC0+IExBVElOIFNNQUxMIExFVFRFUiBTCisgICAgJ3QnICAgICAgICAjICAweDAwNzQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFQKKyAgICAndScgICAgICAgICMgIDB4MDA3NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVQorICAgICd2JyAgICAgICAgIyAgMHgwMDc2IC0+IExBVElOIFNNQUxMIExFVFRFUiBWCisgICAgJ3cnICAgICAgICAjICAweDAwNzcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFcKKyAgICAneCcgICAgICAgICMgIDB4MDA3OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWAorICAgICd5JyAgICAgICAgIyAgMHgwMDc5IC0+IExBVElOIFNNQUxMIExFVFRFUiBZCisgICAgJ3onICAgICAgICAjICAweDAwN2EgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFoKKyAgICAneycgICAgICAgICMgIDB4MDA3YiAtPiBMRUZUIENVUkxZIEJSQUNLRVQKKyAgICAnfCcgICAgICAgICMgIDB4MDA3YyAtPiBWRVJUSUNBTCBMSU5FCisgICAgJ30nICAgICAgICAjICAweDAwN2QgLT4gUklHSFQgQ1VSTFkgQlJBQ0tFVAorICAgICd+JyAgICAgICAgIyAgMHgwMDdlIC0+IFRJTERFCisgICAgJ1x4N2YnICAgICAjICAweDAwN2YgLT4gREVMRVRFCisgICAgJ1x1MDQxMCcgICAjICAweDAwODAgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQQorICAgICdcdTA0MTEnICAgIyAgMHgwMDgxIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEJFCisgICAgJ1x1MDQxMicgICAjICAweDAwODIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVkUKKyAgICAnXHUwNDEzJyAgICMgIDB4MDA4MyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUKKyAgICAnXHUwNDE0JyAgICMgIDB4MDA4NCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERQorICAgICdcdTA0MTUnICAgIyAgMHgwMDg1IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIElFCisgICAgJ1x1MDQxNicgICAjICAweDAwODYgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkhFCisgICAgJ1x1MDQxNycgICAjICAweDAwODcgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUKKyAgICAnXHUwNDE4JyAgICMgIDB4MDA4OCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJCisgICAgJ1x1MDQxOScgICAjICAweDAwODkgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hPUlQgSQorICAgICdcdTA0MWEnICAgIyAgMHgwMDhhIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBCisgICAgJ1x1MDQxYicgICAjICAweDAwOGIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUwKKyAgICAnXHUwNDFjJyAgICMgIDB4MDA4YyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTQorICAgICdcdTA0MWQnICAgIyAgMHgwMDhkIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVOCisgICAgJ1x1MDQxZScgICAjICAweDAwOGUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTworICAgICdcdTA0MWYnICAgIyAgMHgwMDhmIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFBFCisgICAgJ1x1MDQyMCcgICAjICAweDAwOTAgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIKKyAgICAnXHUwNDIxJyAgICMgIDB4MDA5MSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUworICAgICdcdTA0MjInICAgIyAgMHgwMDkyIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFRFCisgICAgJ1x1MDQyMycgICAjICAweDAwOTMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorICAgICdcdTA0MjQnICAgIyAgMHgwMDk0IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVGCisgICAgJ1x1MDQyNScgICAjICAweDAwOTUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEEKKyAgICAnXHUwNDI2JyAgICMgIDB4MDA5NiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0UKKyAgICAnXHUwNDI3JyAgICMgIDB4MDA5NyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBDSEUKKyAgICAnXHUwNDI4JyAgICMgIDB4MDA5OCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSEEKKyAgICAnXHUwNDI5JyAgICMgIDB4MDA5OSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSENIQQorICAgICdcdTA0MmEnICAgIyAgMHgwMDlhIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBUkQgU0lHTgorICAgICdcdTA0MmInICAgIyAgMHgwMDliIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFlFUlUKKyAgICAnXHUwNDJjJyAgICMgIDB4MDA5YyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAnXHUwNDJkJyAgICMgIDB4MDA5ZCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFCisgICAgJ1x1MDQyZScgICAjICAweDAwOWUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWVUKKyAgICAnXHUwNDJmJyAgICMgIDB4MDA5ZiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQQorICAgICdcdTA0MzAnICAgIyAgMHgwMGEwIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBBCisgICAgJ1x1MDQzMScgICAjICAweDAwYTEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJFCisgICAgJ1x1MDQzMicgICAjICAweDAwYTIgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFZFCisgICAgJ1x1MDQzMycgICAjICAweDAwYTMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRQorICAgICdcdTA0MzQnICAgIyAgMHgwMGE0IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBERQorICAgICdcdTA0MzUnICAgIyAgMHgwMGE1IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBJRQorICAgICdcdTA0MzYnICAgIyAgMHgwMGE2IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBaSEUKKyAgICAnXHUwNDM3JyAgICMgIDB4MDBhNyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUKKyAgICAnXHUwNDM4JyAgICMgIDB4MDBhOCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSQorICAgICdcdTA0MzknICAgIyAgMHgwMGE5IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTSE9SVCBJCisgICAgJ1x1MDQzYScgICAjICAweDAwYWEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBCisgICAgJ1x1MDQzYicgICAjICAweDAwYWIgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVMCisgICAgJ1x1MDQzYycgICAjICAweDAwYWMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVNCisgICAgJ1x1MDQzZCcgICAjICAweDAwYWQgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVOCisgICAgJ1x1MDQzZScgICAjICAweDAwYWUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE8KKyAgICAnXHUwNDNmJyAgICMgIDB4MDBhZiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgUEUKKyAgICAnXHUyNTkxJyAgICMgIDB4MDBiMCAtPiBMSUdIVCBTSEFERQorICAgICdcdTI1OTInICAgIyAgMHgwMGIxIC0+IE1FRElVTSBTSEFERQorICAgICdcdTI1OTMnICAgIyAgMHgwMGIyIC0+IERBUksgU0hBREUKKyAgICAnXHUyNTAyJyAgICMgIDB4MDBiMyAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwKKyAgICAnXHUyNTI0JyAgICMgIDB4MDBiNCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIExFRlQKKyAgICAnXHUyNTYxJyAgICMgIDB4MDBiNSAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgICdcdTI1NjInICAgIyAgMHgwMGI2IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgJ1x1MjU1NicgICAjICAweDAwYjcgLT4gQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgICdcdTI1NTUnICAgIyAgMHgwMGI4IC0+IEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAnXHUyNTYzJyAgICMgIDB4MDBiOSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgJ1x1MjU1MScgICAjICAweDAwYmEgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTAorICAgICdcdTI1NTcnICAgIyAgMHgwMGJiIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorICAgICdcdTI1NWQnICAgIyAgMHgwMGJjIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKKyAgICAnXHUyNTVjJyAgICMgIDB4MDBiZCAtPiBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgICdcdTI1NWInICAgIyAgMHgwMGJlIC0+IEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgJ1x1MjUxMCcgICAjICAweDAwYmYgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQKKyAgICAnXHUyNTE0JyAgICMgIDB4MDBjMCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgJ1x1MjUzNCcgICAjICAweDAwYzEgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjUyYycgICAjICAweDAwYzIgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTFjJyAgICMgIDB4MDBjMyAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgJ1x1MjUwMCcgICAjICAweDAwYzQgLT4gQk9YIERSQVdJTkdTIExJR0hUIEhPUklaT05UQUwKKyAgICAnXHUyNTNjJyAgICMgIDB4MDBjNSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTVlJyAgICMgIDB4MDBjNiAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAnXHUyNTVmJyAgICMgIDB4MDBjNyAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAnXHUyNTVhJyAgICMgIDB4MDBjOCAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBSSUdIVAorICAgICdcdTI1NTQnICAgIyAgMHgwMGM5IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFQKKyAgICAnXHUyNTY5JyAgICMgIDB4MDBjYSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjU2NicgICAjICAweDAwY2IgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjU2MCcgICAjICAweDAwY2MgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAnXHUyNTUwJyAgICMgIDB4MDBjZCAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIEhPUklaT05UQUwKKyAgICAnXHUyNTZjJyAgICMgIDB4MDBjZSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjU2NycgICAjICAweDAwY2YgLT4gQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAnXHUyNTY4JyAgICMgIDB4MDBkMCAtPiBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgICdcdTI1NjQnICAgIyAgMHgwMGQxIC0+IEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAnXHUyNTY1JyAgICMgIDB4MDBkMiAtPiBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgJ1x1MjU1OScgICAjICAweDAwZDMgLT4gQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgJ1x1MjU1OCcgICAjICAweDAwZDQgLT4gQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgJ1x1MjU1MicgICAjICAweDAwZDUgLT4gQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAnXHUyNTUzJyAgICMgIDB4MDBkNiAtPiBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgICdcdTI1NmInICAgIyAgMHgwMGQ3IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgJ1x1MjU2YScgICAjICAweDAwZDggLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAnXHUyNTE4JyAgICMgIDB4MDBkOSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKKyAgICAnXHUyNTBjJyAgICMgIDB4MDBkYSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKyAgICAnXHUyNTg4JyAgICMgIDB4MDBkYiAtPiBGVUxMIEJMT0NLCisgICAgJ1x1MjU4NCcgICAjICAweDAwZGMgLT4gTE9XRVIgSEFMRiBCTE9DSworICAgICdcdTI1OGMnICAgIyAgMHgwMGRkIC0+IExFRlQgSEFMRiBCTE9DSworICAgICdcdTI1OTAnICAgIyAgMHgwMGRlIC0+IFJJR0hUIEhBTEYgQkxPQ0sKKyAgICAnXHUyNTgwJyAgICMgIDB4MDBkZiAtPiBVUFBFUiBIQUxGIEJMT0NLCisgICAgJ1x1MDQ0MCcgICAjICAweDAwZTAgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVSCisgICAgJ1x1MDQ0MScgICAjICAweDAwZTEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVTCisgICAgJ1x1MDQ0MicgICAjICAweDAwZTIgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRFCisgICAgJ1x1MDQ0MycgICAjICAweDAwZTMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFUKKyAgICAnXHUwNDQ0JyAgICMgIDB4MDBlNCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUYKKyAgICAnXHUwNDQ1JyAgICMgIDB4MDBlNSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEEKKyAgICAnXHUwNDQ2JyAgICMgIDB4MDBlNiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVFNFCisgICAgJ1x1MDQ0NycgICAjICAweDAwZTcgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIENIRQorICAgICdcdTA0NDgnICAgIyAgMHgwMGU4IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTSEEKKyAgICAnXHUwNDQ5JyAgICMgIDB4MDBlOSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hDSEEKKyAgICAnXHUwNDRhJyAgICMgIDB4MDBlYSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEFSRCBTSUdOCisgICAgJ1x1MDQ0YicgICAjICAweDAwZWIgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlFUlUKKyAgICAnXHUwNDRjJyAgICMgIDB4MDBlYyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgU09GVCBTSUdOCisgICAgJ1x1MDQ0ZCcgICAjICAweDAwZWQgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEUKKyAgICAnXHUwNDRlJyAgICMgIDB4MDBlZSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWVUKKyAgICAnXHUwNDRmJyAgICMgIDB4MDBlZiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUEKKyAgICAnXHUwNDAxJyAgICMgIDB4MDBmMCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJTworICAgICdcdTA0NTEnICAgIyAgMHgwMGYxIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBJTworICAgICdcdTA0OTAnICAgIyAgMHgwMGYyIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgICdcdTA0OTEnICAgIyAgMHgwMGYzIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAnXHUwNDA0JyAgICMgIDB4MDBmNCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAnXHUwNDU0JyAgICMgIDB4MDBmNSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgJ1x1MDQwNicgICAjICAweDAwZjYgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgJ1x1MDQ1NicgICAjICAweDAwZjcgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgICdcdTA0MDcnICAgIyAgMHgwMGY4IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFlJCisgICAgJ1x1MDQ1NycgICAjICAweDAwZjkgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlJCisgICAgJ1x4YjcnICAgICAjICAweDAwZmEgLT4gTUlERExFIERPVAorICAgICdcdTIyMWEnICAgIyAgMHgwMGZiIC0+IFNRVUFSRSBST09UCisgICAgJ1x1MjExNicgICAjICAweDAwZmMgLT4gTlVNRVJPIFNJR04KKyAgICAnXHhhNCcgICAgICMgIDB4MDBmZCAtPiBDVVJSRU5DWSBTSUdOCisgICAgJ1x1MjVhMCcgICAjICAweDAwZmUgLT4gQkxBQ0sgU1FVQVJFCisgICAgJ1x4YTAnICAgICAjICAweDAwZmYgLT4gTk8tQlJFQUsgU1BBQ0UKKykKKworIyMjIEVuY29kaW5nIE1hcAorCitlbmNvZGluZ19tYXAgPSB7CisgICAgMHgwMDAwOiAweDAwMDAsICAgICAjICBOVUxMCisgICAgMHgwMDAxOiAweDAwMDEsICAgICAjICBTVEFSVCBPRiBIRUFESU5HCisgICAgMHgwMDAyOiAweDAwMDIsICAgICAjICBTVEFSVCBPRiBURVhUCisgICAgMHgwMDAzOiAweDAwMDMsICAgICAjICBFTkQgT0YgVEVYVAorICAgIDB4MDAwNDogMHgwMDA0LCAgICAgIyAgRU5EIE9GIFRSQU5TTUlTU0lPTgorICAgIDB4MDAwNTogMHgwMDA1LCAgICAgIyAgRU5RVUlSWQorICAgIDB4MDAwNjogMHgwMDA2LCAgICAgIyAgQUNLTk9XTEVER0UKKyAgICAweDAwMDc6IDB4MDAwNywgICAgICMgIEJFTEwKKyAgICAweDAwMDg6IDB4MDAwOCwgICAgICMgIEJBQ0tTUEFDRQorICAgIDB4MDAwOTogMHgwMDA5LCAgICAgIyAgSE9SSVpPTlRBTCBUQUJVTEFUSU9OCisgICAgMHgwMDBhOiAweDAwMGEsICAgICAjICBMSU5FIEZFRUQKKyAgICAweDAwMGI6IDB4MDAwYiwgICAgICMgIFZFUlRJQ0FMIFRBQlVMQVRJT04KKyAgICAweDAwMGM6IDB4MDAwYywgICAgICMgIEZPUk0gRkVFRAorICAgIDB4MDAwZDogMHgwMDBkLCAgICAgIyAgQ0FSUklBR0UgUkVUVVJOCisgICAgMHgwMDBlOiAweDAwMGUsICAgICAjICBTSElGVCBPVVQKKyAgICAweDAwMGY6IDB4MDAwZiwgICAgICMgIFNISUZUIElOCisgICAgMHgwMDEwOiAweDAwMTAsICAgICAjICBEQVRBIExJTksgRVNDQVBFCisgICAgMHgwMDExOiAweDAwMTEsICAgICAjICBERVZJQ0UgQ09OVFJPTCBPTkUKKyAgICAweDAwMTI6IDB4MDAxMiwgICAgICMgIERFVklDRSBDT05UUk9MIFRXTworICAgIDB4MDAxMzogMHgwMDEzLCAgICAgIyAgREVWSUNFIENPTlRST0wgVEhSRUUKKyAgICAweDAwMTQ6IDB4MDAxNCwgICAgICMgIERFVklDRSBDT05UUk9MIEZPVVIKKyAgICAweDAwMTU6IDB4MDAxNSwgICAgICMgIE5FR0FUSVZFIEFDS05PV0xFREdFCisgICAgMHgwMDE2OiAweDAwMTYsICAgICAjICBTWU5DSFJPTk9VUyBJRExFCisgICAgMHgwMDE3OiAweDAwMTcsICAgICAjICBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLCisgICAgMHgwMDE4OiAweDAwMTgsICAgICAjICBDQU5DRUwKKyAgICAweDAwMTk6IDB4MDAxOSwgICAgICMgIEVORCBPRiBNRURJVU0KKyAgICAweDAwMWE6IDB4MDAxYSwgICAgICMgIFNVQlNUSVRVVEUKKyAgICAweDAwMWI6IDB4MDAxYiwgICAgICMgIEVTQ0FQRQorICAgIDB4MDAxYzogMHgwMDFjLCAgICAgIyAgRklMRSBTRVBBUkFUT1IKKyAgICAweDAwMWQ6IDB4MDAxZCwgICAgICMgIEdST1VQIFNFUEFSQVRPUgorICAgIDB4MDAxZTogMHgwMDFlLCAgICAgIyAgUkVDT1JEIFNFUEFSQVRPUgorICAgIDB4MDAxZjogMHgwMDFmLCAgICAgIyAgVU5JVCBTRVBBUkFUT1IKKyAgICAweDAwMjA6IDB4MDAyMCwgICAgICMgIFNQQUNFCisgICAgMHgwMDIxOiAweDAwMjEsICAgICAjICBFWENMQU1BVElPTiBNQVJLCisgICAgMHgwMDIyOiAweDAwMjIsICAgICAjICBRVU9UQVRJT04gTUFSSworICAgIDB4MDAyMzogMHgwMDIzLCAgICAgIyAgTlVNQkVSIFNJR04KKyAgICAweDAwMjQ6IDB4MDAyNCwgICAgICMgIERPTExBUiBTSUdOCisgICAgMHgwMDI1OiAweDAwMjUsICAgICAjICBQRVJDRU5UIFNJR04KKyAgICAweDAwMjY6IDB4MDAyNiwgICAgICMgIEFNUEVSU0FORAorICAgIDB4MDAyNzogMHgwMDI3LCAgICAgIyAgQVBPU1RST1BIRQorICAgIDB4MDAyODogMHgwMDI4LCAgICAgIyAgTEVGVCBQQVJFTlRIRVNJUworICAgIDB4MDAyOTogMHgwMDI5LCAgICAgIyAgUklHSFQgUEFSRU5USEVTSVMKKyAgICAweDAwMmE6IDB4MDAyYSwgICAgICMgIEFTVEVSSVNLCisgICAgMHgwMDJiOiAweDAwMmIsICAgICAjICBQTFVTIFNJR04KKyAgICAweDAwMmM6IDB4MDAyYywgICAgICMgIENPTU1BCisgICAgMHgwMDJkOiAweDAwMmQsICAgICAjICBIWVBIRU4tTUlOVVMKKyAgICAweDAwMmU6IDB4MDAyZSwgICAgICMgIEZVTEwgU1RPUAorICAgIDB4MDAyZjogMHgwMDJmLCAgICAgIyAgU09MSURVUworICAgIDB4MDAzMDogMHgwMDMwLCAgICAgIyAgRElHSVQgWkVSTworICAgIDB4MDAzMTogMHgwMDMxLCAgICAgIyAgRElHSVQgT05FCisgICAgMHgwMDMyOiAweDAwMzIsICAgICAjICBESUdJVCBUV08KKyAgICAweDAwMzM6IDB4MDAzMywgICAgICMgIERJR0lUIFRIUkVFCisgICAgMHgwMDM0OiAweDAwMzQsICAgICAjICBESUdJVCBGT1VSCisgICAgMHgwMDM1OiAweDAwMzUsICAgICAjICBESUdJVCBGSVZFCisgICAgMHgwMDM2OiAweDAwMzYsICAgICAjICBESUdJVCBTSVgKKyAgICAweDAwMzc6IDB4MDAzNywgICAgICMgIERJR0lUIFNFVkVOCisgICAgMHgwMDM4OiAweDAwMzgsICAgICAjICBESUdJVCBFSUdIVAorICAgIDB4MDAzOTogMHgwMDM5LCAgICAgIyAgRElHSVQgTklORQorICAgIDB4MDAzYTogMHgwMDNhLCAgICAgIyAgQ09MT04KKyAgICAweDAwM2I6IDB4MDAzYiwgICAgICMgIFNFTUlDT0xPTgorICAgIDB4MDAzYzogMHgwMDNjLCAgICAgIyAgTEVTUy1USEFOIFNJR04KKyAgICAweDAwM2Q6IDB4MDAzZCwgICAgICMgIEVRVUFMUyBTSUdOCisgICAgMHgwMDNlOiAweDAwM2UsICAgICAjICBHUkVBVEVSLVRIQU4gU0lHTgorICAgIDB4MDAzZjogMHgwMDNmLCAgICAgIyAgUVVFU1RJT04gTUFSSworICAgIDB4MDA0MDogMHgwMDQwLCAgICAgIyAgQ09NTUVSQ0lBTCBBVAorICAgIDB4MDA0MTogMHgwMDQxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQQorICAgIDB4MDA0MjogMHgwMDQyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorICAgIDB4MDA0MzogMHgwMDQzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworICAgIDB4MDA0NDogMHgwMDQ0LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRAorICAgIDB4MDA0NTogMHgwMDQ1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorICAgIDB4MDA0NjogMHgwMDQ2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorICAgIDB4MDA0NzogMHgwMDQ3LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRworICAgIDB4MDA0ODogMHgwMDQ4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorICAgIDB4MDA0OTogMHgwMDQ5LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorICAgIDB4MDA0YTogMHgwMDRhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorICAgIDB4MDA0YjogMHgwMDRiLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSworICAgIDB4MDA0YzogMHgwMDRjLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorICAgIDB4MDA0ZDogMHgwMDRkLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQorICAgIDB4MDA0ZTogMHgwMDRlLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTgorICAgIDB4MDA0ZjogMHgwMDRmLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworICAgIDB4MDA1MDogMHgwMDUwLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUAorICAgIDB4MDA1MTogMHgwMDUxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUQorICAgIDB4MDA1MjogMHgwMDUyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorICAgIDB4MDA1MzogMHgwMDUzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUworICAgIDB4MDA1NDogMHgwMDU0LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorICAgIDB4MDA1NTogMHgwMDU1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorICAgIDB4MDA1NjogMHgwMDU2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVgorICAgIDB4MDA1NzogMHgwMDU3LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworICAgIDB4MDA1ODogMHgwMDU4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorICAgIDB4MDA1OTogMHgwMDU5LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWQorICAgIDB4MDA1YTogMHgwMDVhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorICAgIDB4MDA1YjogMHgwMDViLCAgICAgIyAgTEVGVCBTUVVBUkUgQlJBQ0tFVAorICAgIDB4MDA1YzogMHgwMDVjLCAgICAgIyAgUkVWRVJTRSBTT0xJRFVTCisgICAgMHgwMDVkOiAweDAwNWQsICAgICAjICBSSUdIVCBTUVVBUkUgQlJBQ0tFVAorICAgIDB4MDA1ZTogMHgwMDVlLCAgICAgIyAgQ0lSQ1VNRkxFWCBBQ0NFTlQKKyAgICAweDAwNWY6IDB4MDA1ZiwgICAgICMgIExPVyBMSU5FCisgICAgMHgwMDYwOiAweDAwNjAsICAgICAjICBHUkFWRSBBQ0NFTlQKKyAgICAweDAwNjE6IDB4MDA2MSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBCisgICAgMHgwMDYyOiAweDAwNjIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQgorICAgIDB4MDA2MzogMHgwMDYzLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEMKKyAgICAweDAwNjQ6IDB4MDA2NCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBECisgICAgMHgwMDY1OiAweDAwNjUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRQorICAgIDB4MDA2NjogMHgwMDY2LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEYKKyAgICAweDAwNjc6IDB4MDA2NywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBHCisgICAgMHgwMDY4OiAweDAwNjgsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSAorICAgIDB4MDA2OTogMHgwMDY5LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkKKyAgICAweDAwNmE6IDB4MDA2YSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBKCisgICAgMHgwMDZiOiAweDAwNmIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSworICAgIDB4MDA2YzogMHgwMDZjLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEwKKyAgICAweDAwNmQ6IDB4MDA2ZCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBNCisgICAgMHgwMDZlOiAweDAwNmUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTgorICAgIDB4MDA2ZjogMHgwMDZmLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8KKyAgICAweDAwNzA6IDB4MDA3MCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBQCisgICAgMHgwMDcxOiAweDAwNzEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgUQorICAgIDB4MDA3MjogMHgwMDcyLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFIKKyAgICAweDAwNzM6IDB4MDA3MywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBTCisgICAgMHgwMDc0OiAweDAwNzQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVAorICAgIDB4MDA3NTogMHgwMDc1LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFUKKyAgICAweDAwNzY6IDB4MDA3NiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBWCisgICAgMHgwMDc3OiAweDAwNzcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVworICAgIDB4MDA3ODogMHgwMDc4LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFgKKyAgICAweDAwNzk6IDB4MDA3OSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBZCisgICAgMHgwMDdhOiAweDAwN2EsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWgorICAgIDB4MDA3YjogMHgwMDdiLCAgICAgIyAgTEVGVCBDVVJMWSBCUkFDS0VUCisgICAgMHgwMDdjOiAweDAwN2MsICAgICAjICBWRVJUSUNBTCBMSU5FCisgICAgMHgwMDdkOiAweDAwN2QsICAgICAjICBSSUdIVCBDVVJMWSBCUkFDS0VUCisgICAgMHgwMDdlOiAweDAwN2UsICAgICAjICBUSUxERQorICAgIDB4MDA3ZjogMHgwMDdmLCAgICAgIyAgREVMRVRFCisgICAgMHgwMGEwOiAweDAwZmYsICAgICAjICBOTy1CUkVBSyBTUEFDRQorICAgIDB4MDBhNDogMHgwMGZkLCAgICAgIyAgQ1VSUkVOQ1kgU0lHTgorICAgIDB4MDBiNzogMHgwMGZhLCAgICAgIyAgTUlERExFIERPVAorICAgIDB4MDQwMTogMHgwMGYwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSU8KKyAgICAweDA0MDQ6IDB4MDBmNCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgIDB4MDQwNjogMHgwMGY2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgMHgwNDA3OiAweDAwZjgsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZSQorICAgIDB4MDQxMDogMHgwMDgwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQQorICAgIDB4MDQxMTogMHgwMDgxLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkUKKyAgICAweDA0MTI6IDB4MDA4MiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFZFCisgICAgMHgwNDEzOiAweDAwODMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUKKyAgICAweDA0MTQ6IDB4MDA4NCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIERFCisgICAgMHgwNDE1OiAweDAwODUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRQorICAgIDB4MDQxNjogMHgwMDg2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkhFCisgICAgMHgwNDE3OiAweDAwODcsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaRQorICAgIDB4MDQxODogMHgwMDg4LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSQorICAgIDB4MDQxOTogMHgwMDg5LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hPUlQgSQorICAgIDB4MDQxYTogMHgwMDhhLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0EKKyAgICAweDA0MWI6IDB4MDA4YiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVMCisgICAgMHgwNDFjOiAweDAwOGMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTQorICAgIDB4MDQxZDogMHgwMDhkLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU4KKyAgICAweDA0MWU6IDB4MDA4ZSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIE8KKyAgICAweDA0MWY6IDB4MDA4ZiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFBFCisgICAgMHgwNDIwOiAweDAwOTAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUgorICAgIDB4MDQyMTogMHgwMDkxLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVMKKyAgICAweDA0MjI6IDB4MDA5MiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFRFCisgICAgMHgwNDIzOiAweDAwOTMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVCisgICAgMHgwNDI0OiAweDAwOTQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFRgorICAgIDB4MDQyNTogMHgwMDk1LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEEKKyAgICAweDA0MjY6IDB4MDA5NiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFRTRQorICAgIDB4MDQyNzogMHgwMDk3LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFCisgICAgMHgwNDI4OiAweDAwOTgsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSEEKKyAgICAweDA0Mjk6IDB4MDA5OSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQ0hBCisgICAgMHgwNDJhOiAweDAwOWEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQVJEIFNJR04KKyAgICAweDA0MmI6IDB4MDA5YiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlFUlUKKyAgICAweDA0MmM6IDB4MDA5YywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNPRlQgU0lHTgorICAgIDB4MDQyZDogMHgwMDlkLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRQorICAgIDB4MDQyZTogMHgwMDllLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWVUKKyAgICAweDA0MmY6IDB4MDA5ZiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlBCisgICAgMHgwNDMwOiAweDAwYTAsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQQorICAgIDB4MDQzMTogMHgwMGExLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJFCisgICAgMHgwNDMyOiAweDAwYTIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVkUKKyAgICAweDA0MzM6IDB4MDBhMywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUKKyAgICAweDA0MzQ6IDB4MDBhNCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBERQorICAgIDB4MDQzNTogMHgwMGE1LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElFCisgICAgMHgwNDM2OiAweDAwYTYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFCisgICAgMHgwNDM3OiAweDAwYTcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUKKyAgICAweDA0Mzg6IDB4MDBhOCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJCisgICAgMHgwNDM5OiAweDAwYTksICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hPUlQgSQorICAgIDB4MDQzYTogMHgwMGFhLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBCisgICAgMHgwNDNiOiAweDAwYWIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUwKKyAgICAweDA0M2M6IDB4MDBhYywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTQorICAgIDB4MDQzZDogMHgwMGFkLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVOCisgICAgMHgwNDNlOiAweDAwYWUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgTworICAgIDB4MDQzZjogMHgwMGFmLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFBFCisgICAgMHgwNDQwOiAweDAwZTAsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVIKKyAgICAweDA0NDE6IDB4MDBlMSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFUworICAgIDB4MDQ0MjogMHgwMGUyLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRFCisgICAgMHgwNDQzOiAweDAwZTMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVQorICAgIDB4MDQ0NDogMHgwMGU0LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVGCisgICAgMHgwNDQ1OiAweDAwZTUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEEKKyAgICAweDA0NDY6IDB4MDBlNiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBUU0UKKyAgICAweDA0NDc6IDB4MDBlNywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBDSEUKKyAgICAweDA0NDg6IDB4MDBlOCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSEEKKyAgICAweDA0NDk6IDB4MDBlOSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSENIQQorICAgIDB4MDQ0YTogMHgwMGVhLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBUkQgU0lHTgorICAgIDB4MDQ0YjogMHgwMGViLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlFUlUKKyAgICAweDA0NGM6IDB4MDBlYywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAweDA0NGQ6IDB4MDBlZCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFCisgICAgMHgwNDRlOiAweDAwZWUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWVUKKyAgICAweDA0NGY6IDB4MDBlZiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZQQorICAgIDB4MDQ1MTogMHgwMGYxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElPCisgICAgMHgwNDU0OiAweDAwZjUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgMHgwNDU2OiAweDAwZjcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgMHgwNDU3OiAweDAwZjksICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUkKKyAgICAweDA0OTA6IDB4MDBmMiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgIDB4MDQ5MTogMHgwMGYzLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgIDB4MjExNjogMHgwMGZjLCAgICAgIyAgTlVNRVJPIFNJR04KKyAgICAweDIyMWE6IDB4MDBmYiwgICAgICMgIFNRVUFSRSBST09UCisgICAgMHgyNTAwOiAweDAwYzQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgSE9SSVpPTlRBTAorICAgIDB4MjUwMjogMHgwMGIzLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMCisgICAgMHgyNTBjOiAweDAwZGEsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKyAgICAweDI1MTA6IDB4MDBiZiwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBMRUZUCisgICAgMHgyNTE0OiAweDAwYzAsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgMHgyNTE4OiAweDAwZDksICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKKyAgICAweDI1MWM6IDB4MDBjMywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDI1MjQ6IDB4MDBiNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MjUyYzogMHgwMGMyLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDI1MzQ6IDB4MDBjMSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjUzYzogMHgwMGM1LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTUwOiAweDAwY2QsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIEhPUklaT05UQUwKKyAgICAweDI1NTE6IDB4MDBiYSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwKKyAgICAweDI1NTI6IDB4MDBkNSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgyNTUzOiAweDAwZDYsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MjU1NDogMHgwMGM5LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBSSUdIVAorICAgIDB4MjU1NTogMHgwMGI4LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MjU1NjogMHgwMGI3LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MjU1NzogMHgwMGJiLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUCisgICAgMHgyNTU4OiAweDAwZDQsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDI1NTk6IDB4MDBkMywgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MjU1YTogMHgwMGM4LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKKyAgICAweDI1NWI6IDB4MDBiZSwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgyNTVjOiAweDAwYmQsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MjU1ZDogMHgwMGJjLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgTEVGVAorICAgIDB4MjU1ZTogMHgwMGM2LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgyNTVmOiAweDAwYzcsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDI1NjA6IDB4MDBjYywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgyNTYxOiAweDAwYjUsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MjU2MjogMHgwMGI2LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDI1NjM6IDB4MDBiOSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlQKKyAgICAweDI1NjQ6IDB4MDBkMSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDI1NjU6IDB4MDBkMiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDI1NjY6IDB4MDBjYiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjU2NzogMHgwMGNmLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDI1Njg6IDB4MDBkMCwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgyNTY5OiAweDAwY2EsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTZhOiAweDAwZDgsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MjU2YjogMHgwMGQ3LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDI1NmM6IDB4MDBjZSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDI1ODA6IDB4MDBkZiwgICAgICMgIFVQUEVSIEhBTEYgQkxPQ0sKKyAgICAweDI1ODQ6IDB4MDBkYywgICAgICMgIExPV0VSIEhBTEYgQkxPQ0sKKyAgICAweDI1ODg6IDB4MDBkYiwgICAgICMgIEZVTEwgQkxPQ0sKKyAgICAweDI1OGM6IDB4MDBkZCwgICAgICMgIExFRlQgSEFMRiBCTE9DSworICAgIDB4MjU5MDogMHgwMGRlLCAgICAgIyAgUklHSFQgSEFMRiBCTE9DSworICAgIDB4MjU5MTogMHgwMGIwLCAgICAgIyAgTElHSFQgU0hBREUKKyAgICAweDI1OTI6IDB4MDBiMSwgICAgICMgIE1FRElVTSBTSEFERQorICAgIDB4MjU5MzogMHgwMGIyLCAgICAgIyAgREFSSyBTSEFERQorICAgIDB4MjVhMDogMHgwMGZlLCAgICAgIyAgQkxBQ0sgU1FVQVJFCit9CmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2NwMjczLnB5IGIvTGliL2VuY29kaW5ncy9jcDI3My5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWM2ZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9jcDI3My5weQpAQCAtMCwwICsxLDMwNyBAQAorIiIiIFB5dGhvbiBDaGFyYWN0ZXIgTWFwcGluZyBDb2RlYyBjcDI3MyBnZW5lcmF0ZWQgZnJvbSAncHl0aG9uLW1hcHBpbmdzL0NQMjczLlRYVCcgd2l0aCBnZW5jb2RlYy5weS4KKworIiIiIyIKKworaW1wb3J0IGNvZGVjcworCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorCisgICAgZGVmIGVuY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsZXJyb3JzLGVuY29kaW5nX3RhYmxlKQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsZXJyb3JzLGRlY29kaW5nX3RhYmxlKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LHNlbGYuZXJyb3JzLGVuY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CisgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LHNlbGYuZXJyb3JzLGRlY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgcGFzcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgcGFzcworCisjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKKworZGVmIGdldHJlZ2VudHJ5KCk6CisgICAgcmV0dXJuIGNvZGVjcy5Db2RlY0luZm8oCisgICAgICAgIG5hbWU9J2NwMjczJywKKyAgICAgICAgZW5jb2RlPUNvZGVjKCkuZW5jb2RlLAorICAgICAgICBkZWNvZGU9Q29kZWMoKS5kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgKQorCisKKyMjIyBEZWNvZGluZyBUYWJsZQorCitkZWNvZGluZ190YWJsZSA9ICgKKyAgICAnXHgwMCcgICAgICAjICAweDAwIC0+IE5VTEwgKE5VTCkKKyAgICAnXHgwMScgICAgICAjICAweDAxIC0+IFNUQVJUIE9GIEhFQURJTkcgKFNPSCkKKyAgICAnXHgwMicgICAgICAjICAweDAyIC0+IFNUQVJUIE9GIFRFWFQgKFNUWCkKKyAgICAnXHgwMycgICAgICAjICAweDAzIC0+IEVORCBPRiBURVhUIChFVFgpCisgICAgJ1x4OWMnICAgICAgIyAgMHgwNCAtPiBTVFJJTkcgVEVSTUlOQVRPUiAoU1QpCisgICAgJ1x0JyAgICAgICAgIyAgMHgwNSAtPiBDSEFSQUNURVIgVEFCVUxBVElPTiAoSFQpCisgICAgJ1x4ODYnICAgICAgIyAgMHgwNiAtPiBTVEFSVCBPRiBTRUxFQ1RFRCBBUkVBIChTU0EpCisgICAgJ1x4N2YnICAgICAgIyAgMHgwNyAtPiBERUxFVEUgKERFTCkKKyAgICAnXHg5NycgICAgICAjICAweDA4IC0+IEVORCBPRiBHVUFSREVEIEFSRUEgKEVQQSkKKyAgICAnXHg4ZCcgICAgICAjICAweDA5IC0+IFJFVkVSU0UgTElORSBGRUVEIChSSSkKKyAgICAnXHg4ZScgICAgICAjICAweDBBIC0+IFNJTkdMRS1TSElGVCBUV08gKFNTMikKKyAgICAnXHgwYicgICAgICAjICAweDBCIC0+IExJTkUgVEFCVUxBVElPTiAoVlQpCisgICAgJ1x4MGMnICAgICAgIyAgMHgwQyAtPiBGT1JNIEZFRUQgKEZGKQorICAgICdccicgICAgICAgICMgIDB4MEQgLT4gQ0FSUklBR0UgUkVUVVJOIChDUikKKyAgICAnXHgwZScgICAgICAjICAweDBFIC0+IFNISUZUIE9VVCAoU08pCisgICAgJ1x4MGYnICAgICAgIyAgMHgwRiAtPiBTSElGVCBJTiAoU0kpCisgICAgJ1x4MTAnICAgICAgIyAgMHgxMCAtPiBEQVRBTElOSyBFU0NBUEUgKERMRSkKKyAgICAnXHgxMScgICAgICAjICAweDExIC0+IERFVklDRSBDT05UUk9MIE9ORSAoREMxKQorICAgICdceDEyJyAgICAgICMgIDB4MTIgLT4gREVWSUNFIENPTlRST0wgVFdPIChEQzIpCisgICAgJ1x4MTMnICAgICAgIyAgMHgxMyAtPiBERVZJQ0UgQ09OVFJPTCBUSFJFRSAoREMzKQorICAgICdceDlkJyAgICAgICMgIDB4MTQgLT4gT1BFUkFUSU5HIFNZU1RFTSBDT01NQU5EIChPU0MpCisgICAgJ1x4ODUnICAgICAgIyAgMHgxNSAtPiBORVhUIExJTkUgKE5FTCkKKyAgICAnXHgwOCcgICAgICAjICAweDE2IC0+IEJBQ0tTUEFDRSAoQlMpCisgICAgJ1x4ODcnICAgICAgIyAgMHgxNyAtPiBFTkQgT0YgU0VMRUNURUQgQVJFQSAoRVNBKQorICAgICdceDE4JyAgICAgICMgIDB4MTggLT4gQ0FOQ0VMIChDQU4pCisgICAgJ1x4MTknICAgICAgIyAgMHgxOSAtPiBFTkQgT0YgTUVESVVNIChFTSkKKyAgICAnXHg5MicgICAgICAjICAweDFBIC0+IFBSSVZBVEUgVVNFIFRXTyAoUFUyKQorICAgICdceDhmJyAgICAgICMgIDB4MUIgLT4gU0lOR0xFLVNISUZUIFRIUkVFIChTUzMpCisgICAgJ1x4MWMnICAgICAgIyAgMHgxQyAtPiBGSUxFIFNFUEFSQVRPUiAoSVM0KQorICAgICdceDFkJyAgICAgICMgIDB4MUQgLT4gR1JPVVAgU0VQQVJBVE9SIChJUzMpCisgICAgJ1x4MWUnICAgICAgIyAgMHgxRSAtPiBSRUNPUkQgU0VQQVJBVE9SIChJUzIpCisgICAgJ1x4MWYnICAgICAgIyAgMHgxRiAtPiBVTklUIFNFUEFSQVRPUiAoSVMxKQorICAgICdceDgwJyAgICAgICMgIDB4MjAgLT4gUEFERElORyBDSEFSQUNURVIgKFBBRCkKKyAgICAnXHg4MScgICAgICAjICAweDIxIC0+IEhJR0ggT0NURVQgUFJFU0VUIChIT1ApCisgICAgJ1x4ODInICAgICAgIyAgMHgyMiAtPiBCUkVBSyBQRVJNSVRURUQgSEVSRSAoQlBIKQorICAgICdceDgzJyAgICAgICMgIDB4MjMgLT4gTk8gQlJFQUsgSEVSRSAoTkJIKQorICAgICdceDg0JyAgICAgICMgIDB4MjQgLT4gSU5ERVggKElORCkKKyAgICAnXG4nICAgICAgICAjICAweDI1IC0+IExJTkUgRkVFRCAoTEYpCisgICAgJ1x4MTcnICAgICAgIyAgMHgyNiAtPiBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLIChFVEIpCisgICAgJ1x4MWInICAgICAgIyAgMHgyNyAtPiBFU0NBUEUgKEVTQykKKyAgICAnXHg4OCcgICAgICAjICAweDI4IC0+IENIQVJBQ1RFUiBUQUJVTEFUSU9OIFNFVCAoSFRTKQorICAgICdceDg5JyAgICAgICMgIDB4MjkgLT4gQ0hBUkFDVEVSIFRBQlVMQVRJT04gV0lUSCBKVVNUSUZJQ0FUSU9OIChIVEopCisgICAgJ1x4OGEnICAgICAgIyAgMHgyQSAtPiBMSU5FIFRBQlVMQVRJT04gU0VUIChWVFMpCisgICAgJ1x4OGInICAgICAgIyAgMHgyQiAtPiBQQVJUSUFMIExJTkUgRk9SV0FSRCAoUExEKQorICAgICdceDhjJyAgICAgICMgIDB4MkMgLT4gUEFSVElBTCBMSU5FIEJBQ0tXQVJEIChQTFUpCisgICAgJ1x4MDUnICAgICAgIyAgMHgyRCAtPiBFTlFVSVJZIChFTlEpCisgICAgJ1x4MDYnICAgICAgIyAgMHgyRSAtPiBBQ0tOT1dMRURHRSAoQUNLKQorICAgICdceDA3JyAgICAgICMgIDB4MkYgLT4gQkVMTCAoQkVMKQorICAgICdceDkwJyAgICAgICMgIDB4MzAgLT4gREVWSUNFIENPTlRST0wgU1RSSU5HIChEQ1MpCisgICAgJ1x4OTEnICAgICAgIyAgMHgzMSAtPiBQUklWQVRFIFVTRSBPTkUgKFBVMSkKKyAgICAnXHgxNicgICAgICAjICAweDMyIC0+IFNZTkNIUk9OT1VTIElETEUgKFNZTikKKyAgICAnXHg5MycgICAgICAjICAweDMzIC0+IFNFVCBUUkFOU01JVCBTVEFURSAoU1RTKQorICAgICdceDk0JyAgICAgICMgIDB4MzQgLT4gQ0FOQ0VMIENIQVJBQ1RFUiAoQ0NIKQorICAgICdceDk1JyAgICAgICMgIDB4MzUgLT4gTUVTU0FHRSBXQUlUSU5HIChNVykKKyAgICAnXHg5NicgICAgICAjICAweDM2IC0+IFNUQVJUIE9GIEdVQVJERUQgQVJFQSAoU1BBKQorICAgICdceDA0JyAgICAgICMgIDB4MzcgLT4gRU5EIE9GIFRSQU5TTUlTU0lPTiAoRU9UKQorICAgICdceDk4JyAgICAgICMgIDB4MzggLT4gU1RBUlQgT0YgU1RSSU5HIChTT1MpCisgICAgJ1x4OTknICAgICAgIyAgMHgzOSAtPiBTSU5HTEUgR1JBUEhJQyBDSEFSQUNURVIgSU5UUk9EVUNFUiAoU0dDSSkKKyAgICAnXHg5YScgICAgICAjICAweDNBIC0+IFNJTkdMRSBDSEFSQUNURVIgSU5UUk9EVUNFUiAoU0NJKQorICAgICdceDliJyAgICAgICMgIDB4M0IgLT4gQ09OVFJPTCBTRVFVRU5DRSBJTlRST0RVQ0VSIChDU0kpCisgICAgJ1x4MTQnICAgICAgIyAgMHgzQyAtPiBERVZJQ0UgQ09OVFJPTCBGT1VSIChEQzQpCisgICAgJ1x4MTUnICAgICAgIyAgMHgzRCAtPiBORUdBVElWRSBBQ0tOT1dMRURHRSAoTkFLKQorICAgICdceDllJyAgICAgICMgIDB4M0UgLT4gUFJJVkFDWSBNRVNTQUdFIChQTSkKKyAgICAnXHgxYScgICAgICAjICAweDNGIC0+IFNVQlNUSVRVVEUgKFNVQikKKyAgICAnICcgICAgICAgICAjICAweDQwIC0+IFNQQUNFCisgICAgJ1x4YTAnICAgICAgIyAgMHg0MSAtPiBOTy1CUkVBSyBTUEFDRQorICAgICdceGUyJyAgICAgICMgIDB4NDIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisgICAgJ3snICAgICAgICAgIyAgMHg0MyAtPiBMRUZUIENVUkxZIEJSQUNLRVQKKyAgICAnXHhlMCcgICAgICAjICAweDQ0IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICAnXHhlMScgICAgICAjICAweDQ1IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUKKyAgICAnXHhlMycgICAgICAjICAweDQ2IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREUKKyAgICAnXHhlNScgICAgICAjICAweDQ3IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorICAgICdceGU3JyAgICAgICMgIDB4NDggLT4gTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisgICAgJ1x4ZjEnICAgICAgIyAgMHg0OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFCisgICAgJ1x4YzQnICAgICAgIyAgMHg0QSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgJy4nICAgICAgICAgIyAgMHg0QiAtPiBGVUxMIFNUT1AKKyAgICAnPCcgICAgICAgICAjICAweDRDIC0+IExFU1MtVEhBTiBTSUdOCisgICAgJygnICAgICAgICAgIyAgMHg0RCAtPiBMRUZUIFBBUkVOVEhFU0lTCisgICAgJysnICAgICAgICAgIyAgMHg0RSAtPiBQTFVTIFNJR04KKyAgICAnIScgICAgICAgICAjICAweDRGIC0+IEVYQ0xBTUFUSU9OIE1BUksKKyAgICAnJicgICAgICAgICAjICAweDUwIC0+IEFNUEVSU0FORAorICAgICdceGU5JyAgICAgICMgIDB4NTEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgICdceGVhJyAgICAgICMgIDB4NTIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4ZWInICAgICAgIyAgMHg1MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworICAgICdceGU4JyAgICAgICMgIDB4NTQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRQorICAgICdceGVkJyAgICAgICMgIDB4NTUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURQorICAgICdceGVlJyAgICAgICMgIDB4NTYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4ZWYnICAgICAgIyAgMHg1NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworICAgICdceGVjJyAgICAgICMgIDB4NTggLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRQorICAgICd+JyAgICAgICAgICMgIDB4NTkgLT4gVElMREUKKyAgICAnXHhkYycgICAgICAjICAweDVBIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKyAgICAnJCcgICAgICAgICAjICAweDVCIC0+IERPTExBUiBTSUdOCisgICAgJyonICAgICAgICAgIyAgMHg1QyAtPiBBU1RFUklTSworICAgICcpJyAgICAgICAgICMgIDB4NUQgLT4gUklHSFQgUEFSRU5USEVTSVMKKyAgICAnOycgICAgICAgICAjICAweDVFIC0+IFNFTUlDT0xPTgorICAgICdeJyAgICAgICAgICMgIDB4NUYgLT4gQ0lSQ1VNRkxFWCBBQ0NFTlQKKyAgICAnLScgICAgICAgICAjICAweDYwIC0+IEhZUEhFTi1NSU5VUworICAgICcvJyAgICAgICAgICMgIDB4NjEgLT4gU09MSURVUworICAgICdceGMyJyAgICAgICMgIDB4NjIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICAnWycgICAgICAgICAjICAweDYzIC0+IExFRlQgU1FVQVJFIEJSQUNLRVQKKyAgICAnXHhjMCcgICAgICAjICAweDY0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRQorICAgICdceGMxJyAgICAgICMgIDB4NjUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgJ1x4YzMnICAgICAgIyAgMHg2NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREUKKyAgICAnXHhjNScgICAgICAjICAweDY3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisgICAgJ1x4YzcnICAgICAgIyAgMHg2OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorICAgICdceGQxJyAgICAgICMgIDB4NjkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFCisgICAgJ1x4ZjYnICAgICAgIyAgMHg2QSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworICAgICcsJyAgICAgICAgICMgIDB4NkIgLT4gQ09NTUEKKyAgICAnJScgICAgICAgICAjICAweDZDIC0+IFBFUkNFTlQgU0lHTgorICAgICdfJyAgICAgICAgICMgIDB4NkQgLT4gTE9XIExJTkUKKyAgICAnPicgICAgICAgICAjICAweDZFIC0+IEdSRUFURVItVEhBTiBTSUdOCisgICAgJz8nICAgICAgICAgIyAgMHg2RiAtPiBRVUVTVElPTiBNQVJLCisgICAgJ1x4ZjgnICAgICAgIyAgMHg3MCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorICAgICdceGM5JyAgICAgICMgIDB4NzEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFCisgICAgJ1x4Y2EnICAgICAgIyAgMHg3MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGNiJyAgICAgICMgIDB4NzMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworICAgICdceGM4JyAgICAgICMgIDB4NzQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFCisgICAgJ1x4Y2QnICAgICAgIyAgMHg3NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEUKKyAgICAnXHhjZScgICAgICAjICAweDc2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4Y2YnICAgICAgIyAgMHg3NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgJ1x4Y2MnICAgICAgIyAgMHg3OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKyAgICAnYCcgICAgICAgICAjICAweDc5IC0+IEdSQVZFIEFDQ0VOVAorICAgICc6JyAgICAgICAgICMgIDB4N0EgLT4gQ09MT04KKyAgICAnIycgICAgICAgICAjICAweDdCIC0+IE5VTUJFUiBTSUdOCisgICAgJ1x4YTcnICAgICAgIyAgMHg3QyAtPiBTRUNUSU9OIFNJR04KKyAgICAiJyIgICAgICAgICAjICAweDdEIC0+IEFQT1NUUk9QSEUKKyAgICAnPScgICAgICAgICAjICAweDdFIC0+IEVRVUFMUyBTSUdOCisgICAgJyInICAgICAgICAgIyAgMHg3RiAtPiBRVU9UQVRJT04gTUFSSworICAgICdceGQ4JyAgICAgICMgIDB4ODAgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorICAgICdhJyAgICAgICAgICMgIDB4ODEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICAnYicgICAgICAgICAjICAweDgyIC0+IExBVElOIFNNQUxMIExFVFRFUiBCCisgICAgJ2MnICAgICAgICAgIyAgMHg4MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQworICAgICdkJyAgICAgICAgICMgIDB4ODQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICAnZScgICAgICAgICAjICAweDg1IC0+IExBVElOIFNNQUxMIExFVFRFUiBFCisgICAgJ2YnICAgICAgICAgIyAgMHg4NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRgorICAgICdnJyAgICAgICAgICMgIDB4ODcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICAnaCcgICAgICAgICAjICAweDg4IC0+IExBVElOIFNNQUxMIExFVFRFUiBICisgICAgJ2knICAgICAgICAgIyAgMHg4OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSQorICAgICdceGFiJyAgICAgICMgIDB4OEEgLT4gTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAnXHhiYicgICAgICAjICAweDhCIC0+IFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgICdceGYwJyAgICAgICMgIDB4OEMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEVUSCAoSWNlbGFuZGljKQorICAgICdceGZkJyAgICAgICMgIDB4OEQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQorICAgICdceGZlJyAgICAgICMgIDB4OEUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOIChJY2VsYW5kaWMpCisgICAgJ1x4YjEnICAgICAgIyAgMHg4RiAtPiBQTFVTLU1JTlVTIFNJR04KKyAgICAnXHhiMCcgICAgICAjICAweDkwIC0+IERFR1JFRSBTSUdOCisgICAgJ2onICAgICAgICAgIyAgMHg5MSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSgorICAgICdrJyAgICAgICAgICMgIDB4OTIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEsKKyAgICAnbCcgICAgICAgICAjICAweDkzIC0+IExBVElOIFNNQUxMIExFVFRFUiBMCisgICAgJ20nICAgICAgICAgIyAgMHg5NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTQorICAgICduJyAgICAgICAgICMgIDB4OTUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE4KKyAgICAnbycgICAgICAgICAjICAweDk2IC0+IExBVElOIFNNQUxMIExFVFRFUiBPCisgICAgJ3AnICAgICAgICAgIyAgMHg5NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUAorICAgICdxJyAgICAgICAgICMgIDB4OTggLT4gTEFUSU4gU01BTEwgTEVUVEVSIFEKKyAgICAncicgICAgICAgICAjICAweDk5IC0+IExBVElOIFNNQUxMIExFVFRFUiBSCisgICAgJ1x4YWEnICAgICAgIyAgMHg5QSAtPiBGRU1JTklORSBPUkRJTkFMIElORElDQVRPUgorICAgICdceGJhJyAgICAgICMgIDB4OUIgLT4gTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SCisgICAgJ1x4ZTYnICAgICAgIyAgMHg5QyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQUUKKyAgICAnXHhiOCcgICAgICAjICAweDlEIC0+IENFRElMTEEKKyAgICAnXHhjNicgICAgICAjICAweDlFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEFFCisgICAgJ1x4YTQnICAgICAgIyAgMHg5RiAtPiBDVVJSRU5DWSBTSUdOCisgICAgJ1x4YjUnICAgICAgIyAgMHhBMCAtPiBNSUNSTyBTSUdOCisgICAgJ1x4ZGYnICAgICAgIyAgMHhBMSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgUyAoR2VybWFuKQorICAgICdzJyAgICAgICAgICMgIDB4QTIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICAndCcgICAgICAgICAjICAweEEzIC0+IExBVElOIFNNQUxMIExFVFRFUiBUCisgICAgJ3UnICAgICAgICAgIyAgMHhBNCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVQorICAgICd2JyAgICAgICAgICMgIDB4QTUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICAndycgICAgICAgICAjICAweEE2IC0+IExBVElOIFNNQUxMIExFVFRFUiBXCisgICAgJ3gnICAgICAgICAgIyAgMHhBNyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWAorICAgICd5JyAgICAgICAgICMgIDB4QTggLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICAneicgICAgICAgICAjICAweEE5IC0+IExBVElOIFNNQUxMIExFVFRFUiBaCisgICAgJ1x4YTEnICAgICAgIyAgMHhBQSAtPiBJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLCisgICAgJ1x4YmYnICAgICAgIyAgMHhBQiAtPiBJTlZFUlRFRCBRVUVTVElPTiBNQVJLCisgICAgJ1x4ZDAnICAgICAgIyAgMHhBQyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEggKEljZWxhbmRpYykKKyAgICAnXHhkZCcgICAgICAjICAweEFEIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURQorICAgICdceGRlJyAgICAgICMgIDB4QUUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKKyAgICAnXHhhZScgICAgICAjICAweEFGIC0+IFJFR0lTVEVSRUQgU0lHTgorICAgICdceGEyJyAgICAgICMgIDB4QjAgLT4gQ0VOVCBTSUdOCisgICAgJ1x4YTMnICAgICAgIyAgMHhCMSAtPiBQT1VORCBTSUdOCisgICAgJ1x4YTUnICAgICAgIyAgMHhCMiAtPiBZRU4gU0lHTgorICAgICdceGI3JyAgICAgICMgIDB4QjMgLT4gTUlERExFIERPVAorICAgICdceGE5JyAgICAgICMgIDB4QjQgLT4gQ09QWVJJR0hUIFNJR04KKyAgICAnQCcgICAgICAgICAjICAweEI1IC0+IENPTU1FUkNJQUwgQVQKKyAgICAnXHhiNicgICAgICAjICAweEI2IC0+IFBJTENST1cgU0lHTgorICAgICdceGJjJyAgICAgICMgIDB4QjcgLT4gVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSCisgICAgJ1x4YmQnICAgICAgIyAgMHhCOCAtPiBWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEYKKyAgICAnXHhiZScgICAgICAjICAweEI5IC0+IFZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSUworICAgICdceGFjJyAgICAgICMgIDB4QkEgLT4gTk9UIFNJR04KKyAgICAnfCcgICAgICAgICAjICAweEJCIC0+IFZFUlRJQ0FMIExJTkUKKyAgICAnXHUyMDNlJyAgICAjICAweEJDIC0+IE9WRVJMSU5FCisgICAgJ1x4YTgnICAgICAgIyAgMHhCRCAtPiBESUFFUkVTSVMKKyAgICAnXHhiNCcgICAgICAjICAweEJFIC0+IEFDVVRFIEFDQ0VOVAorICAgICdceGQ3JyAgICAgICMgIDB4QkYgLT4gTVVMVElQTElDQVRJT04gU0lHTgorICAgICdceGU0JyAgICAgICMgIDB4QzAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKyAgICAnQScgICAgICAgICAjICAweEMxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEKKyAgICAnQicgICAgICAgICAjICAweEMyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEIKKyAgICAnQycgICAgICAgICAjICAweEMzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEMKKyAgICAnRCcgICAgICAgICAjICAweEM0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEQKKyAgICAnRScgICAgICAgICAjICAweEM1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUKKyAgICAnRicgICAgICAgICAjICAweEM2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEYKKyAgICAnRycgICAgICAgICAjICAweEM3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEcKKyAgICAnSCcgICAgICAgICAjICAweEM4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEgKKyAgICAnSScgICAgICAgICAjICAweEM5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkKKyAgICAnXHhhZCcgICAgICAjICAweENBIC0+IFNPRlQgSFlQSEVOCisgICAgJ1x4ZjQnICAgICAgIyAgMHhDQiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhhNicgICAgICAjICAweENDIC0+IEJST0tFTiBCQVIKKyAgICAnXHhmMicgICAgICAjICAweENEIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkUKKyAgICAnXHhmMycgICAgICAjICAweENFIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICAnXHhmNScgICAgICAjICAweENGIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUKKyAgICAnXHhmYycgICAgICAjICAweEQwIC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgJ0onICAgICAgICAgIyAgMHhEMSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisgICAgJ0snICAgICAgICAgIyAgMHhEMiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisgICAgJ0wnICAgICAgICAgIyAgMHhEMyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgJ00nICAgICAgICAgIyAgMHhENCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisgICAgJ04nICAgICAgICAgIyAgMHhENSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisgICAgJ08nICAgICAgICAgIyAgMHhENiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgJ1AnICAgICAgICAgIyAgMHhENyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisgICAgJ1EnICAgICAgICAgIyAgMHhEOCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisgICAgJ1InICAgICAgICAgIyAgMHhEOSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgJ1x4YjknICAgICAgIyAgMHhEQSAtPiBTVVBFUlNDUklQVCBPTkUKKyAgICAnXHhmYicgICAgICAjICAweERCIC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgICd9JyAgICAgICAgICMgIDB4REMgLT4gUklHSFQgQ1VSTFkgQlJBQ0tFVAorICAgICdceGY5JyAgICAgICMgIDB4REQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRQorICAgICdceGZhJyAgICAgICMgIDB4REUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURQorICAgICdceGZmJyAgICAgICMgIDB4REYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhkNicgICAgICAjICAweEUwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKyAgICAnXHhmNycgICAgICAjICAweEUxIC0+IERJVklTSU9OIFNJR04KKyAgICAnUycgICAgICAgICAjICAweEUyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFMKKyAgICAnVCcgICAgICAgICAjICAweEUzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFQKKyAgICAnVScgICAgICAgICAjICAweEU0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUKKyAgICAnVicgICAgICAgICAjICAweEU1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFYKKyAgICAnVycgICAgICAgICAjICAweEU2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFcKKyAgICAnWCcgICAgICAgICAjICAweEU3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFgKKyAgICAnWScgICAgICAgICAjICAweEU4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFkKKyAgICAnWicgICAgICAgICAjICAweEU5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFoKKyAgICAnXHhiMicgICAgICAjICAweEVBIC0+IFNVUEVSU0NSSVBUIFRXTworICAgICdceGQ0JyAgICAgICMgIDB4RUIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKyAgICAnXFwnICAgICAgICAjICAweEVDIC0+IFJFVkVSU0UgU09MSURVUworICAgICdceGQyJyAgICAgICMgIDB4RUQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFCisgICAgJ1x4ZDMnICAgICAgIyAgMHhFRSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICAnXHhkNScgICAgICAjICAweEVGIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERQorICAgICcwJyAgICAgICAgICMgIDB4RjAgLT4gRElHSVQgWkVSTworICAgICcxJyAgICAgICAgICMgIDB4RjEgLT4gRElHSVQgT05FCisgICAgJzInICAgICAgICAgIyAgMHhGMiAtPiBESUdJVCBUV08KKyAgICAnMycgICAgICAgICAjICAweEYzIC0+IERJR0lUIFRIUkVFCisgICAgJzQnICAgICAgICAgIyAgMHhGNCAtPiBESUdJVCBGT1VSCisgICAgJzUnICAgICAgICAgIyAgMHhGNSAtPiBESUdJVCBGSVZFCisgICAgJzYnICAgICAgICAgIyAgMHhGNiAtPiBESUdJVCBTSVgKKyAgICAnNycgICAgICAgICAjICAweEY3IC0+IERJR0lUIFNFVkVOCisgICAgJzgnICAgICAgICAgIyAgMHhGOCAtPiBESUdJVCBFSUdIVAorICAgICc5JyAgICAgICAgICMgIDB4RjkgLT4gRElHSVQgTklORQorICAgICdceGIzJyAgICAgICMgIDB4RkEgLT4gU1VQRVJTQ1JJUFQgVEhSRUUKKyAgICAnXHhkYicgICAgICAjICAweEZCIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCisgICAgJ10nICAgICAgICAgIyAgMHhGQyAtPiBSSUdIVCBTUVVBUkUgQlJBQ0tFVAorICAgICdceGQ5JyAgICAgICMgIDB4RkQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCisgICAgJ1x4ZGEnICAgICAgIyAgMHhGRSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEUKKyAgICAnXHg5ZicgICAgICAjICAweEZGIC0+IEFQUExJQ0FUSU9OIFBST0dSQU0gQ09NTUFORCAoQVBDKQorKQorCisjIyMgRW5jb2RpbmcgdGFibGUKK2VuY29kaW5nX3RhYmxlPWNvZGVjcy5jaGFybWFwX2J1aWxkKGRlY29kaW5nX3RhYmxlKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDUwMC5weSBiL0xpYi9lbmNvZGluZ3MvY3A1MDAucHkKaW5kZXggYTk3NWJlNy4uNWY2MTUzNSAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9jcDUwMC5weQorKysgYi9MaWIvZW5jb2RpbmdzL2NwNTAwLnB5CkBAIC0zMDEsNyArMzAxLDYgQEAKICAgICAnXHhkOScgICAgICMgIDB4RkQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCiAgICAgJ1x4ZGEnICAgICAjICAweEZFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQogICAgICdceDlmJyAgICAgIyAgMHhGRiAtPiBDT05UUk9MCi0gICAgJ1x1ZmZmZScgICAjIyBXaWRlbiB0byBVQ1MyIGZvciBvcHRpbWl6YXRpb24KICkKIAogIyMjIEVuY29kaW5nIHRhYmxlCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2hleF9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvaGV4X2NvZGVjLnB5CmluZGV4IGUwMDNmYzMuLmYyZWQwYTcgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvaGV4X2NvZGVjLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvaGV4X2NvZGVjLnB5CkBAIC01Miw0ICs1Miw1IEBACiAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCiAgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCiAgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIF9pc190ZXh0X2VuY29kaW5nPUZhbHNlLAogICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5IGIvTGliL2VuY29kaW5ncy9pc284ODU5XzEucHkKaW5kZXggZDljYzUxNi4uOGNmYzAxZiAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9pc284ODU5XzEucHkKKysrIGIvTGliL2VuY29kaW5ncy9pc284ODU5XzEucHkKQEAgLTMwMSw3ICszMDEsNiBAQAogICAgICdceGZkJyAgICAgIyAgMHhGRCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCiAgICAgJ1x4ZmUnICAgICAjICAweEZFIC0+IExBVElOIFNNQUxMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQogICAgICdceGZmJyAgICAgIyAgMHhGRiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUwotICAgICdcdWZmZmUnICAgIyMgV2lkZW4gdG8gVUNTMiBmb3Igb3B0aW1pemF0aW9uCiApCiAKICMjIyBFbmNvZGluZyB0YWJsZQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9xdW9wcmlfY29kZWMucHkgYi9MaWIvZW5jb2RpbmdzL3F1b3ByaV9jb2RlYy5weQppbmRleCA5MjQzZmM0Li43MGY3MDgzIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL3F1b3ByaV9jb2RlYy5weQorKysgYi9MaWIvZW5jb2RpbmdzL3F1b3ByaV9jb2RlYy5weQpAQCAtNTMsNCArNTMsNSBAQAogICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAogICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAogICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBfaXNfdGV4dF9lbmNvZGluZz1GYWxzZSwKICAgICApCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3JvdF8xMy5weSBiL0xpYi9lbmNvZGluZ3Mvcm90XzEzLnB5CmluZGV4IDMxNDBjMTQuLmZmZjkxNTMgMTAwNzU1Ci0tLSBhL0xpYi9lbmNvZGluZ3Mvcm90XzEzLnB5CisrKyBiL0xpYi9lbmNvZGluZ3Mvcm90XzEzLnB5CkBAIC00Myw2ICs0Myw3IEBACiAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCiAgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCiAgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIF9pc190ZXh0X2VuY29kaW5nPUZhbHNlLAogICAgICkKIAogIyMjIE1hcApkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvdXVfY29kZWMucHkKaW5kZXggNjljNmYxNy4uZTMyNjllNCAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weQorKysgYi9MaWIvZW5jb2RpbmdzL3V1X2NvZGVjLnB5CkBAIC05Niw0ICs5Niw1IEBACiAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCiAgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCiAgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgICAgIF9pc190ZXh0X2VuY29kaW5nPUZhbHNlLAogICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvemxpYl9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvemxpYl9jb2RlYy5weQppbmRleCBlMGI5Y2RhLi40YzgxY2ExIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL3psaWJfY29kZWMucHkKKysrIGIvTGliL2VuY29kaW5ncy96bGliX2NvZGVjLnB5CkBAIC03NCw0ICs3NCw1IEBACiAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCiAgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCiAgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgICAgIF9pc190ZXh0X2VuY29kaW5nPUZhbHNlLAogICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX19pbml0X18ucHkgYi9MaWIvZW5zdXJlcGlwL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNGU0NDkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMjA5IEBACitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcGtndXRpbAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCisKKworX19hbGxfXyA9IFsidmVyc2lvbiIsICJib290c3RyYXAiXQorCisKK19TRVRVUFRPT0xTX1ZFUlNJT04gPSAiMi4xIgorCitfUElQX1ZFUlNJT04gPSAiMS41LjIiCisKKyMgcGlwIGN1cnJlbnRseSByZXF1aXJlcyBzc2wgc3VwcG9ydCwgc28gd2UgdHJ5IHRvIHByb3ZpZGUgYSBuaWNlcgorIyBlcnJvciBtZXNzYWdlIHdoZW4gdGhhdCBpcyBtaXNzaW5nIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3NDQpCitfTUlTU0lOR19TU0xfTUVTU0FHRSA9ICgicGlwIHt9IHJlcXVpcmVzIFNTTC9UTFMiLmZvcm1hdChfUElQX1ZFUlNJT04pKQordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisgICAgZGVmIF9yZXF1aXJlX3NzbF9mb3JfcGlwKCk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihfTUlTU0lOR19TU0xfTUVTU0FHRSkKK2Vsc2U6CisgICAgZGVmIF9yZXF1aXJlX3NzbF9mb3JfcGlwKCk6CisgICAgICAgIHBhc3MKKworX1BST0pFQ1RTID0gWworICAgICgic2V0dXB0b29scyIsIF9TRVRVUFRPT0xTX1ZFUlNJT04pLAorICAgICgicGlwIiwgX1BJUF9WRVJTSU9OKSwKK10KKworCitkZWYgX3J1bl9waXAoYXJncywgYWRkaXRpb25hbF9wYXRocz1Ob25lKToKKyAgICAjIEFkZCBvdXIgYnVuZGxlZCBzb2Z0d2FyZSB0byB0aGUgc3lzLnBhdGggc28gd2UgY2FuIGltcG9ydCBpdAorICAgIGlmIGFkZGl0aW9uYWxfcGF0aHMgaXMgbm90IE5vbmU6CisgICAgICAgIHN5cy5wYXRoID0gYWRkaXRpb25hbF9wYXRocyArIHN5cy5wYXRoCisKKyAgICAjIEluc3RhbGwgdGhlIGJ1bmRsZWQgc29mdHdhcmUKKyAgICBpbXBvcnQgcGlwCisgICAgcGlwLm1haW4oYXJncykKKworCitkZWYgdmVyc2lvbigpOgorICAgICIiIgorICAgIFJldHVybnMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgYnVuZGxlZCB2ZXJzaW9uIG9mIHBpcC4KKyAgICAiIiIKKyAgICByZXR1cm4gX1BJUF9WRVJTSU9OCisKK2RlZiBfZGlzYWJsZV9waXBfY29uZmlndXJhdGlvbl9zZXR0aW5ncygpOgorICAgICMgV2UgZGVsaWJlcmF0ZWx5IGlnbm9yZSBhbGwgcGlwIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICMgd2hlbiBpbnZva2luZyBwaXAKKyAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3MzQgZm9yIGRldGFpbHMKKyAgICBrZXlzX3RvX3JlbW92ZSA9IFtrIGZvciBrIGluIG9zLmVudmlyb24gaWYgay5zdGFydHN3aXRoKCJQSVBfIildCisgICAgZm9yIGsgaW4ga2V5c190b19yZW1vdmU6CisgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tdCisgICAgIyBXZSBhbHNvIGlnbm9yZSB0aGUgc2V0dGluZ3MgaW4gdGhlIGRlZmF1bHQgcGlwIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDA1MyBmb3IgZGV0YWlscworICAgIG9zLmVudmlyb25bJ1BJUF9DT05GSUdfRklMRSddID0gb3MuZGV2bnVsbAorCisKK2RlZiBib290c3RyYXAoKiwgcm9vdD1Ob25lLCB1cGdyYWRlPUZhbHNlLCB1c2VyPUZhbHNlLAorICAgICAgICAgICAgICBhbHRpbnN0YWxsPUZhbHNlLCBkZWZhdWx0X3BpcD1GYWxzZSwKKyAgICAgICAgICAgICAgdmVyYm9zaXR5PTApOgorICAgICIiIgorICAgIEJvb3RzdHJhcCBwaXAgaW50byB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uIChvciB0aGUgZ2l2ZW4gcm9vdAorICAgIGRpcmVjdG9yeSkuCisKKyAgICBOb3RlIHRoYXQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgYm90aCBzeXMucGF0aCBhbmQgb3MuZW52aXJvbi4KKyAgICAiIiIKKyAgICBpZiBhbHRpbnN0YWxsIGFuZCBkZWZhdWx0X3BpcDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IHVzZSBhbHRpbnN0YWxsIGFuZCBkZWZhdWx0X3BpcCB0b2dldGhlciIpCisKKyAgICBfcmVxdWlyZV9zc2xfZm9yX3BpcCgpCisgICAgX2Rpc2FibGVfcGlwX2NvbmZpZ3VyYXRpb25fc2V0dGluZ3MoKQorCisgICAgIyBCeSBkZWZhdWx0LCBpbnN0YWxsaW5nIHBpcCBhbmQgc2V0dXB0b29scyBpbnN0YWxscyBhbGwgb2YgdGhlCisgICAgIyBmb2xsb3dpbmcgc2NyaXB0cyAoWC5ZID09IHJ1bm5pbmcgUHl0aG9uIHZlcnNpb24pOgorICAgICMKKyAgICAjICAgcGlwLCBwaXBYLCBwaXBYLlksIGVhc3lfaW5zdGFsbCwgZWFzeV9pbnN0YWxsLVguWQorICAgICMKKyAgICAjIHBpcCAxLjUrIGFsbG93cyBlbnN1cmVwaXAgdG8gcmVxdWVzdCB0aGF0IHNvbWUgb2YgdGhvc2UgYmUgbGVmdCBvdXQKKyAgICBpZiBhbHRpbnN0YWxsOgorICAgICAgICAjIG9taXQgcGlwLCBwaXBYIGFuZCBlYXN5X2luc3RhbGwKKyAgICAgICAgb3MuZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSA9ICJhbHRpbnN0YWxsIgorICAgIGVsaWYgbm90IGRlZmF1bHRfcGlwOgorICAgICAgICAjIG9taXQgcGlwIGFuZCBlYXN5X2luc3RhbGwKKyAgICAgICAgb3MuZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSA9ICJpbnN0YWxsIgorCisgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0bXBkaXI6CisgICAgICAgICMgUHV0IG91ciBidW5kbGVkIHdoZWVscyBpbnRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgY29uc3RydWN0IHRoZQorICAgICAgICAjIGFkZGl0aW9uYWwgcGF0aHMgdGhhdCBuZWVkIGFkZGVkIHRvIHN5cy5wYXRoCisgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMgPSBbXQorICAgICAgICBmb3IgcHJvamVjdCwgdmVyc2lvbiBpbiBfUFJPSkVDVFM6CisgICAgICAgICAgICB3aGVlbF9uYW1lID0gInt9LXt9LXB5Mi5weTMtbm9uZS1hbnkud2hsIi5mb3JtYXQocHJvamVjdCwgdmVyc2lvbikKKyAgICAgICAgICAgIHdobCA9IHBrZ3V0aWwuZ2V0X2RhdGEoCisgICAgICAgICAgICAgICAgImVuc3VyZXBpcCIsCisgICAgICAgICAgICAgICAgIl9idW5kbGVkL3t9Ii5mb3JtYXQod2hlZWxfbmFtZSksCisgICAgICAgICAgICApCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRtcGRpciwgd2hlZWxfbmFtZSksICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKHdobCkKKworICAgICAgICAgICAgYWRkaXRpb25hbF9wYXRocy5hcHBlbmQob3MucGF0aC5qb2luKHRtcGRpciwgd2hlZWxfbmFtZSkpCisKKyAgICAgICAgIyBDb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIHBpcCBjb21tYW5kCisgICAgICAgIGFyZ3MgPSBbImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLCB0bXBkaXJdCisgICAgICAgIGlmIHJvb3Q6CisgICAgICAgICAgICBhcmdzICs9IFsiLS1yb290Iiwgcm9vdF0KKyAgICAgICAgaWYgdXBncmFkZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItLXVwZ3JhZGUiXQorICAgICAgICBpZiB1c2VyOgorICAgICAgICAgICAgYXJncyArPSBbIi0tdXNlciJdCisgICAgICAgIGlmIHZlcmJvc2l0eToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItIiArICJ2IiAqIHZlcmJvc2l0eV0KKworICAgICAgICBfcnVuX3BpcChhcmdzICsgW3BbMF0gZm9yIHAgaW4gX1BST0pFQ1RTXSwgYWRkaXRpb25hbF9wYXRocykKKworZGVmIF91bmluc3RhbGxfaGVscGVyKCosIHZlcmJvc2l0eT0wKToKKyAgICAiIiJIZWxwZXIgdG8gc3VwcG9ydCBhIGNsZWFuIGRlZmF1bHQgdW5pbnN0YWxsIHByb2Nlc3Mgb24gV2luZG93cworCisgICAgTm90ZSB0aGF0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBtYXkgYWx0ZXIgb3MuZW52aXJvbi4KKyAgICAiIiIKKyAgICAjIE5vdGhpbmcgdG8gZG8gaWYgcGlwIHdhcyBuZXZlciBpbnN0YWxsZWQsIG9yIGhhcyBiZWVuIHJlbW92ZWQKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBwaXAKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHJldHVybgorCisgICAgIyBJZiB0aGUgcGlwIHZlcnNpb24gZG9lc24ndCBtYXRjaCB0aGUgYnVuZGxlZCBvbmUsIGxlYXZlIGl0IGFsb25lCisgICAgaWYgcGlwLl9fdmVyc2lvbl9fICE9IF9QSVBfVkVSU0lPTjoKKyAgICAgICAgbXNnID0gKCJlbnN1cmVwaXAgd2lsbCBvbmx5IHVuaW5zdGFsbCBhIG1hdGNoaW5nIHBpcCAiCisgICAgICAgICAgICAgICAiKHshcn0gaW5zdGFsbGVkLCB7IXJ9IGJ1bmRsZWQpIikKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKG1zZy5mb3JtYXQocGlwLl9fdmVyc2lvbl9fLCBfUElQX1ZFUlNJT04pKQorCisgICAgX3JlcXVpcmVfc3NsX2Zvcl9waXAoKQorICAgIF9kaXNhYmxlX3BpcF9jb25maWd1cmF0aW9uX3NldHRpbmdzKCkKKworICAgICMgQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBwaXAgY29tbWFuZAorICAgIGFyZ3MgPSBbInVuaW5zdGFsbCIsICIteSJdCisgICAgaWYgdmVyYm9zaXR5OgorICAgICAgICBhcmdzICs9IFsiLSIgKyAidiIgKiB2ZXJib3NpdHldCisKKyAgICBfcnVuX3BpcChhcmdzICsgW3BbMF0gZm9yIHAgaW4gcmV2ZXJzZWQoX1BST0pFQ1RTKV0pCisKKworZGVmIF9tYWluKGFyZ3Y9Tm9uZSk6CisgICAgaWYgc3NsIGlzIE5vbmU6CisgICAgICAgIHByaW50KCJJZ25vcmluZyBlbnN1cmVwaXAgZmFpbHVyZToge30iLmZvcm1hdChfTUlTU0lOR19TU0xfTUVTU0FHRSksCisgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSJweXRob24gLW0gZW5zdXJlcGlwIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS12ZXJzaW9uIiwKKyAgICAgICAgYWN0aW9uPSJ2ZXJzaW9uIiwKKyAgICAgICAgdmVyc2lvbj0icGlwIHt9Ii5mb3JtYXQodmVyc2lvbigpKSwKKyAgICAgICAgaGVscD0iU2hvdyB0aGUgdmVyc2lvbiBvZiBwaXAgdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBQeXRob24uIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi12IiwgIi0tdmVyYm9zZSIsCisgICAgICAgIGFjdGlvbj0iY291bnQiLAorICAgICAgICBkZWZhdWx0PTAsCisgICAgICAgIGRlc3Q9InZlcmJvc2l0eSIsCisgICAgICAgIGhlbHA9KCJHaXZlIG1vcmUgb3V0cHV0LiBPcHRpb24gaXMgYWRkaXRpdmUsIGFuZCBjYW4gYmUgdXNlZCB1cCB0byAzICIKKyAgICAgICAgICAgICAgInRpbWVzLiIpLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLVUiLCAiLS11cGdyYWRlIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0iVXBncmFkZSBwaXAgYW5kIGRlcGVuZGVuY2llcywgZXZlbiBpZiBhbHJlYWR5IGluc3RhbGxlZC4iLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS11c2VyIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0iSW5zdGFsbCB1c2luZyB0aGUgdXNlciBzY2hlbWUuIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tcm9vdCIsCisgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgaGVscD0iSW5zdGFsbCBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRoaXMgYWx0ZXJuYXRlIHJvb3QgZGlyZWN0b3J5LiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLWFsdGluc3RhbGwiLAorICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgiTWFrZSBhbiBhbHRlcm5hdGUgaW5zdGFsbCwgaW5zdGFsbGluZyBvbmx5IHRoZSBYLlkgdmVyc2lvbmVkIgorICAgICAgICAgICAgICAic2NyaXB0cyAoRGVmYXVsdDogcGlwWCwgcGlwWC5ZLCBlYXN5X2luc3RhbGwtWC5ZKSIpLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS1kZWZhdWx0LXBpcCIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9KCJNYWtlIGEgZGVmYXVsdCBwaXAgaW5zdGFsbCwgaW5zdGFsbGluZyB0aGUgdW5xdWFsaWZpZWQgcGlwICIKKyAgICAgICAgICAgICAgImFuZCBlYXN5X2luc3RhbGwgaW4gYWRkaXRpb24gdG8gdGhlIHZlcnNpb25lZCBzY3JpcHRzIiksCisgICAgKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCisKKyAgICBib290c3RyYXAoCisgICAgICAgIHJvb3Q9YXJncy5yb290LAorICAgICAgICB1cGdyYWRlPWFyZ3MudXBncmFkZSwKKyAgICAgICAgdXNlcj1hcmdzLnVzZXIsCisgICAgICAgIHZlcmJvc2l0eT1hcmdzLnZlcmJvc2l0eSwKKyAgICAgICAgYWx0aW5zdGFsbD1hcmdzLmFsdGluc3RhbGwsCisgICAgICAgIGRlZmF1bHRfcGlwPWFyZ3MuZGVmYXVsdF9waXAsCisgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2Vuc3VyZXBpcC9fX21haW5fXy5weSBiL0xpYi9lbnN1cmVwaXAvX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1MjdkNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitpbXBvcnQgZW5zdXJlcGlwCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgZW5zdXJlcGlwLl9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvcGlwLTEuNS4yLXB5Mi5weTMtbm9uZS1hbnkud2hsIGIvTGliL2Vuc3VyZXBpcC9fYnVuZGxlZC9waXAtMS41LjItcHkyLnB5My1ub25lLWFueS53aGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEzM2VlZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvcGlwLTEuNS4yLXB5Mi5weTMtbm9uZS1hbnkud2hsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvc2V0dXB0b29scy0yLjEtcHkyLnB5My1ub25lLWFueS53aGwgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3NldHVwdG9vbHMtMi4xLXB5Mi5weTMtbm9uZS1hbnkud2hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNzdiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3NldHVwdG9vbHMtMi4xLXB5Mi5weTMtbm9uZS1hbnkud2hsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX3VuaW5zdGFsbC5weSBiL0xpYi9lbnN1cmVwaXAvX3VuaW5zdGFsbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTAzNjVlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Vuc3VyZXBpcC9fdW5pbnN0YWxsLnB5CkBAIC0wLDAgKzEsMzAgQEAKKyIiIkJhc2ljIHBpcCB1bmluc3RhbGxhdGlvbiBzdXBwb3J0LCBoZWxwZXIgZm9yIHRoZSBXaW5kb3dzIHVuaW5zdGFsbGVyIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGVuc3VyZXBpcAorCisKK2RlZiBfbWFpbihhcmd2PU5vbmUpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9InB5dGhvbiAtbSBlbnN1cmVwaXAuX3VuaW5zdGFsbCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tdmVyc2lvbiIsCisgICAgICAgIGFjdGlvbj0idmVyc2lvbiIsCisgICAgICAgIHZlcnNpb249InBpcCB7fSIuZm9ybWF0KGVuc3VyZXBpcC52ZXJzaW9uKCkpLAorICAgICAgICBoZWxwPSJTaG93IHRoZSB2ZXJzaW9uIG9mIHBpcCB0aGlzIHdpbGwgYXR0ZW1wdCB0byB1bmluc3RhbGwuIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi12IiwgIi0tdmVyYm9zZSIsCisgICAgICAgIGFjdGlvbj0iY291bnQiLAorICAgICAgICBkZWZhdWx0PTAsCisgICAgICAgIGRlc3Q9InZlcmJvc2l0eSIsCisgICAgICAgIGhlbHA9KCJHaXZlIG1vcmUgb3V0cHV0LiBPcHRpb24gaXMgYWRkaXRpdmUsIGFuZCBjYW4gYmUgdXNlZCB1cCB0byAzICIKKyAgICAgICAgICAgICAgInRpbWVzLiIpLAorICAgICkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQorCisgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKHZlcmJvc2l0eT1hcmdzLnZlcmJvc2l0eSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9lbnVtLnB5IGIvTGliL2VudW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0ZjY4ZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnVtLnB5CkBAIC0wLDAgKzEsNTEwIEBACitpbXBvcnQgc3lzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorZnJvbSB0eXBlcyBpbXBvcnQgTWFwcGluZ1Byb3h5VHlwZSwgRHluYW1pY0NsYXNzQXR0cmlidXRlCisKK19fYWxsX18gPSBbJ0VudW0nLCAnSW50RW51bScsICd1bmlxdWUnXQorCisKK2RlZiBfaXNfZGVzY3JpcHRvcihvYmopOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBvYmogaXMgYSBkZXNjcmlwdG9yLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuICgKKyAgICAgICAgICAgIGhhc2F0dHIob2JqLCAnX19nZXRfXycpIG9yCisgICAgICAgICAgICBoYXNhdHRyKG9iaiwgJ19fc2V0X18nKSBvcgorICAgICAgICAgICAgaGFzYXR0cihvYmosICdfX2RlbGV0ZV9fJykpCisKKworZGVmIF9pc19kdW5kZXIobmFtZSk6CisgICAgIiIiUmV0dXJucyBUcnVlIGlmIGEgX19kdW5kZXJfXyBuYW1lLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuIChuYW1lWzoyXSA9PSBuYW1lWy0yOl0gPT0gJ19fJyBhbmQKKyAgICAgICAgICAgIG5hbWVbMjozXSAhPSAnXycgYW5kCisgICAgICAgICAgICBuYW1lWy0zOi0yXSAhPSAnXycgYW5kCisgICAgICAgICAgICBsZW4obmFtZSkgPiA0KQorCisKK2RlZiBfaXNfc3VuZGVyKG5hbWUpOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBhIF9zdW5kZXJfIG5hbWUsIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICByZXR1cm4gKG5hbWVbMF0gPT0gbmFtZVstMV0gPT0gJ18nIGFuZAorICAgICAgICAgICAgbmFtZVsxOjJdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIG5hbWVbLTI6LTFdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIGxlbihuYW1lKSA+IDIpCisKKworZGVmIF9tYWtlX2NsYXNzX3VucGlja2xhYmxlKGNscyk6CisgICAgIiIiTWFrZSB0aGUgZ2l2ZW4gY2xhc3MgdW4tcGlja2xhYmxlLiIiIgorICAgIGRlZiBfYnJlYWtfb25fY2FsbF9yZWR1Y2Uoc2VsZiwgcHJvdG8pOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVyIGNhbm5vdCBiZSBwaWNrbGVkJyAlIHNlbGYpCisgICAgY2xzLl9fcmVkdWNlX2V4X18gPSBfYnJlYWtfb25fY2FsbF9yZWR1Y2UKKyAgICBjbHMuX19tb2R1bGVfXyA9ICc8dW5rbm93bj4nCisKKworY2xhc3MgX0VudW1EaWN0KGRpY3QpOgorICAgICIiIlRyYWNrIGVudW0gbWVtYmVyIG9yZGVyIGFuZCBlbnN1cmUgbWVtYmVyIG5hbWVzIGFyZSBub3QgcmV1c2VkLgorCisgICAgRW51bU1ldGEgd2lsbCB1c2UgdGhlIG5hbWVzIGZvdW5kIGluIHNlbGYuX21lbWJlcl9uYW1lcyBhcyB0aGUKKyAgICBlbnVtZXJhdGlvbiBtZW1iZXIgbmFtZXMuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9tZW1iZXJfbmFtZXMgPSBbXQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAiIiJDaGFuZ2VzIGFueXRoaW5nIG5vdCBkdW5kZXJlZCBvciBub3QgYSBkZXNjcmlwdG9yLgorCisgICAgICAgIElmIGFuIGVudW0gbWVtYmVyIG5hbWUgaXMgdXNlZCB0d2ljZSwgYW4gZXJyb3IgaXMgcmFpc2VkOyBkdXBsaWNhdGUKKyAgICAgICAgdmFsdWVzIGFyZSBub3QgY2hlY2tlZCBmb3IuCisKKyAgICAgICAgU2luZ2xlIHVuZGVyc2NvcmUgKHN1bmRlcikgbmFtZXMgYXJlIHJlc2VydmVkLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBfaXNfc3VuZGVyKGtleSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdfbmFtZXNfIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIEVudW0gdXNlJykKKyAgICAgICAgZWxpZiBfaXNfZHVuZGVyKGtleSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsaWYga2V5IGluIHNlbGYuX21lbWJlcl9uYW1lczoKKyAgICAgICAgICAgICMgZGVzY3JpcHRvciBvdmVyd3JpdGluZyBhbiBlbnVtPworICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdBdHRlbXB0ZWQgdG8gcmV1c2Uga2V5OiAlcicgJSBrZXkpCisgICAgICAgIGVsaWYgbm90IF9pc19kZXNjcmlwdG9yKHZhbHVlKToKKyAgICAgICAgICAgIGlmIGtleSBpbiBzZWxmOgorICAgICAgICAgICAgICAgICMgZW51bSBvdmVyd3JpdGluZyBhIGRlc2NyaXB0b3I/CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdLZXkgYWxyZWFkeSBkZWZpbmVkIGFzOiAlcicgJSBzZWxmW2tleV0pCisgICAgICAgICAgICBzZWxmLl9tZW1iZXJfbmFtZXMuYXBwZW5kKGtleSkKKyAgICAgICAgc3VwZXIoKS5fX3NldGl0ZW1fXyhrZXksIHZhbHVlKQorCisKKworIyBEdW1teSB2YWx1ZSBmb3IgRW51bSBhcyBFbnVtTWV0YSBleHBsaWNpdGx5IGNoZWNrcyBmb3IgaXQsIGJ1dCBvZiBjb3Vyc2UKKyMgdW50aWwgRW51bU1ldGEgZmluaXNoZXMgcnVubmluZyB0aGUgZmlyc3QgdGltZSB0aGUgRW51bSBjbGFzcyBkb2Vzbid0IGV4aXN0LgorIyBUaGlzIGlzIGFsc28gd2h5IHRoZXJlIGFyZSBjaGVja3MgaW4gRW51bU1ldGEgbGlrZSBgaWYgRW51bSBpcyBub3QgTm9uZWAKK0VudW0gPSBOb25lCisKKworY2xhc3MgRW51bU1ldGEodHlwZSk6CisgICAgIiIiTWV0YWNsYXNzIGZvciBFbnVtIiIiCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fcHJlcGFyZV9fKG1ldGFjbHMsIGNscywgYmFzZXMpOgorICAgICAgICByZXR1cm4gX0VudW1EaWN0KCkKKworICAgIGRlZiBfX25ld19fKG1ldGFjbHMsIGNscywgYmFzZXMsIGNsYXNzZGljdCk6CisgICAgICAgICMgYW4gRW51bSBjbGFzcyBpcyBmaW5hbCBvbmNlIGVudW1lcmF0aW9uIGl0ZW1zIGhhdmUgYmVlbiBkZWZpbmVkOyBpdAorICAgICAgICAjIGNhbm5vdCBiZSBtaXhlZCB3aXRoIG90aGVyIHR5cGVzIChpbnQsIGZsb2F0LCBldGMuKSBpZiBpdCBoYXMgYW4KKyAgICAgICAgIyBpbmhlcml0ZWQgX19uZXdfXyB1bmxlc3MgYSBuZXcgX19uZXdfXyBpcyBkZWZpbmVkIChvciB0aGUgcmVzdWx0aW5nCisgICAgICAgICMgY2xhc3Mgd2lsbCBmYWlsKS4KKyAgICAgICAgbWVtYmVyX3R5cGUsIGZpcnN0X2VudW0gPSBtZXRhY2xzLl9nZXRfbWl4aW5zXyhiYXNlcykKKyAgICAgICAgX19uZXdfXywgc2F2ZV9uZXcsIHVzZV9hcmdzID0gbWV0YWNscy5fZmluZF9uZXdfKGNsYXNzZGljdCwgbWVtYmVyX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2VudW0pCisKKyAgICAgICAgIyBzYXZlIGVudW0gaXRlbXMgaW50byBzZXBhcmF0ZSBtYXBwaW5nIHNvIHRoZXkgZG9uJ3QgZ2V0IGJha2VkIGludG8KKyAgICAgICAgIyB0aGUgbmV3IGNsYXNzCisgICAgICAgIG1lbWJlcnMgPSB7azogY2xhc3NkaWN0W2tdIGZvciBrIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzfQorICAgICAgICBmb3IgbmFtZSBpbiBjbGFzc2RpY3QuX21lbWJlcl9uYW1lczoKKyAgICAgICAgICAgIGRlbCBjbGFzc2RpY3RbbmFtZV0KKworICAgICAgICAjIGNoZWNrIGZvciBpbGxlZ2FsIGVudW0gbmFtZXMgKGFueSBvdGhlcnM/KQorICAgICAgICBpbnZhbGlkX25hbWVzID0gc2V0KG1lbWJlcnMpICYgeydtcm8nLCB9CisgICAgICAgIGlmIGludmFsaWRfbmFtZXM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGVudW0gbWVtYmVyIG5hbWU6IHswfScuZm9ybWF0KAorICAgICAgICAgICAgICAgICcsJy5qb2luKGludmFsaWRfbmFtZXMpKSkKKworICAgICAgICAjIGNyZWF0ZSBvdXIgbmV3IEVudW0gdHlwZQorICAgICAgICBlbnVtX2NsYXNzID0gc3VwZXIoKS5fX25ld19fKG1ldGFjbHMsIGNscywgYmFzZXMsIGNsYXNzZGljdCkKKyAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX25hbWVzXyA9IFtdICAgICAgICAgICAgICAgIyBuYW1lcyBpbiBkZWZpbml0aW9uIG9yZGVyCisgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9tYXBfID0gT3JkZXJlZERpY3QoKSAgICAgICMgbmFtZS0+dmFsdWUgbWFwCisgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl90eXBlXyA9IG1lbWJlcl90eXBlCisKKyAgICAgICAgIyBSZXZlcnNlIHZhbHVlLT5uYW1lIG1hcCBmb3IgaGFzaGFibGUgdmFsdWVzLgorICAgICAgICBlbnVtX2NsYXNzLl92YWx1ZTJtZW1iZXJfbWFwXyA9IHt9CisKKyAgICAgICAgIyBjaGVjayBmb3IgYSBzdXBwb3J0ZWQgcGlja2xlIHByb3RvY29scywgYW5kIGlmIG5vdCBwcmVzZW50IHNhYm90YWdlCisgICAgICAgICMgcGlja2xpbmcsIHNpbmNlIGl0IHdvbid0IHdvcmsgYW55d2F5CisgICAgICAgIGlmIG1lbWJlcl90eXBlIGlzIG5vdCBvYmplY3Q6CisgICAgICAgICAgICBtZXRob2RzID0gKCdfX2dldG5ld2FyZ3NfZXhfXycsICdfX2dldG5ld2FyZ3NfXycsCisgICAgICAgICAgICAgICAgICAgICdfX3JlZHVjZV9leF9fJywgJ19fcmVkdWNlX18nKQorICAgICAgICAgICAgaWYgbm90IGFueShtYXAobWVtYmVyX3R5cGUuX19kaWN0X18uZ2V0LCBtZXRob2RzKSk6CisgICAgICAgICAgICAgICAgX21ha2VfY2xhc3NfdW5waWNrbGFibGUoZW51bV9jbGFzcykKKworICAgICAgICAjIGluc3RhbnRpYXRlIHRoZW0sIGNoZWNraW5nIGZvciBkdXBsaWNhdGVzIGFzIHdlIGdvCisgICAgICAgICMgd2UgaW5zdGFudGlhdGUgZmlyc3QgaW5zdGVhZCBvZiBjaGVja2luZyBmb3IgZHVwbGljYXRlcyBmaXJzdCBpbiBjYXNlCisgICAgICAgICMgYSBjdXN0b20gX19uZXdfXyBpcyBkb2luZyBzb21ldGhpbmcgZnVua3kgd2l0aCB0aGUgdmFsdWVzIC0tIHN1Y2ggYXMKKyAgICAgICAgIyBhdXRvLW51bWJlcmluZyA7KQorICAgICAgICBmb3IgbWVtYmVyX25hbWUgaW4gY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXM6CisgICAgICAgICAgICB2YWx1ZSA9IG1lbWJlcnNbbWVtYmVyX25hbWVdCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgdHVwbGUpOgorICAgICAgICAgICAgICAgIGFyZ3MgPSAodmFsdWUsICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXJncyA9IHZhbHVlCisgICAgICAgICAgICBpZiBtZW1iZXJfdHlwZSBpcyB0dXBsZTogICAjIHNwZWNpYWwgY2FzZSBmb3IgdHVwbGUgZW51bXMKKyAgICAgICAgICAgICAgICBhcmdzID0gKGFyZ3MsICkgICAgICMgd3JhcCBpdCBvbmUgbW9yZSB0aW1lCisgICAgICAgICAgICBpZiBub3QgdXNlX2FyZ3M6CisgICAgICAgICAgICAgICAgZW51bV9tZW1iZXIgPSBfX25ld19fKGVudW1fY2xhc3MpCisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZW51bV9tZW1iZXIsICdfdmFsdWVfJyk6CisgICAgICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbnVtX21lbWJlciA9IF9fbmV3X18oZW51bV9jbGFzcywgKmFyZ3MpCisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZW51bV9tZW1iZXIsICdfdmFsdWVfJyk6CisgICAgICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyLl92YWx1ZV8gPSBtZW1iZXJfdHlwZSgqYXJncykKKyAgICAgICAgICAgIHZhbHVlID0gZW51bV9tZW1iZXIuX3ZhbHVlXworICAgICAgICAgICAgZW51bV9tZW1iZXIuX25hbWVfID0gbWVtYmVyX25hbWUKKyAgICAgICAgICAgIGVudW1fbWVtYmVyLl9fb2JqY2xhc3NfXyA9IGVudW1fY2xhc3MKKyAgICAgICAgICAgIGVudW1fbWVtYmVyLl9faW5pdF9fKCphcmdzKQorICAgICAgICAgICAgIyBJZiBhbm90aGVyIG1lbWJlciB3aXRoIHRoZSBzYW1lIHZhbHVlIHdhcyBhbHJlYWR5IGRlZmluZWQsIHRoZQorICAgICAgICAgICAgIyBuZXcgbWVtYmVyIGJlY29tZXMgYW4gYWxpYXMgdG8gdGhlIGV4aXN0aW5nIG9uZS4KKyAgICAgICAgICAgIGZvciBuYW1lLCBjYW5vbmljYWxfbWVtYmVyIGluIGVudW1fY2xhc3MuX21lbWJlcl9tYXBfLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgY2Fub25pY2FsX21lbWJlci52YWx1ZSA9PSBlbnVtX21lbWJlci5fdmFsdWVfOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlciA9IGNhbm9uaWNhbF9tZW1iZXIKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBBbGlhc2VzIGRvbid0IGFwcGVhciBpbiBtZW1iZXIgbmFtZXMgKG9ubHkgaW4gX19tZW1iZXJzX18pLgorICAgICAgICAgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9uYW1lc18uYXBwZW5kKG1lbWJlcl9uYW1lKQorICAgICAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX21hcF9bbWVtYmVyX25hbWVdID0gZW51bV9tZW1iZXIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IGZhaWwgaWYgdmFsdWUgaXMgbm90IGhhc2hhYmxlLiBXZSBjYW4ndCBhZGQgdGhlIHZhbHVlCisgICAgICAgICAgICAgICAgIyB0byB0aGUgbWFwLCBhbmQgYnktdmFsdWUgbG9va3VwcyBmb3IgdGhpcyB2YWx1ZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgIyBsaW5lYXIuCisgICAgICAgICAgICAgICAgZW51bV9jbGFzcy5fdmFsdWUybWVtYmVyX21hcF9bdmFsdWVdID0gZW51bV9tZW1iZXIKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgZG91YmxlIGNoZWNrIHRoYXQgcmVwciBhbmQgZnJpZW5kcyBhcmUgbm90IHRoZSBtaXhpbidzIG9yIHZhcmlvdXMKKyAgICAgICAgIyB0aGluZ3MgYnJlYWsgKHN1Y2ggYXMgcGlja2xlKQorICAgICAgICBmb3IgbmFtZSBpbiAoJ19fcmVwcl9fJywgJ19fc3RyX18nLCAnX19mb3JtYXRfXycsICdfX2dldG5ld2FyZ3NfXycsICdfX3JlZHVjZV9leF9fJyk6CisgICAgICAgICAgICBjbGFzc19tZXRob2QgPSBnZXRhdHRyKGVudW1fY2xhc3MsIG5hbWUpCisgICAgICAgICAgICBvYmpfbWV0aG9kID0gZ2V0YXR0cihtZW1iZXJfdHlwZSwgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGVudW1fbWV0aG9kID0gZ2V0YXR0cihmaXJzdF9lbnVtLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgaWYgb2JqX21ldGhvZCBpcyBub3QgTm9uZSBhbmQgb2JqX21ldGhvZCBpcyBjbGFzc19tZXRob2Q6CisgICAgICAgICAgICAgICAgc2V0YXR0cihlbnVtX2NsYXNzLCBuYW1lLCBlbnVtX21ldGhvZCkKKworICAgICAgICAjIHJlcGxhY2UgYW55IG90aGVyIF9fbmV3X18gd2l0aCBvdXIgb3duIChhcyBsb25nIGFzIEVudW0gaXMgbm90IE5vbmUsCisgICAgICAgICMgYW55d2F5KSAtLSBhZ2FpbiwgdGhpcyBpcyB0byBzdXBwb3J0IHBpY2tsZQorICAgICAgICBpZiBFbnVtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBpZiB0aGUgdXNlciBkZWZpbmVkIHRoZWlyIG93biBfX25ld19fLCBzYXZlIGl0IGJlZm9yZSBpdCBnZXRzCisgICAgICAgICAgICAjIGNsb2JiZXJlZCBpbiBjYXNlIHRoZXkgc3ViY2xhc3MgbGF0ZXIKKyAgICAgICAgICAgIGlmIHNhdmVfbmV3OgorICAgICAgICAgICAgICAgIGVudW1fY2xhc3MuX19uZXdfbWVtYmVyX18gPSBfX25ld19fCisgICAgICAgICAgICBlbnVtX2NsYXNzLl9fbmV3X18gPSBFbnVtLl9fbmV3X18KKyAgICAgICAgcmV0dXJuIGVudW1fY2xhc3MKKworICAgIGRlZiBfX2NhbGxfXyhjbHMsIHZhbHVlLCBuYW1lcz1Ob25lLCAqLCBtb2R1bGU9Tm9uZSwgcXVhbG5hbWU9Tm9uZSwgdHlwZT1Ob25lKToKKyAgICAgICAgIiIiRWl0aGVyIHJldHVybnMgYW4gZXhpc3RpbmcgbWVtYmVyLCBvciBjcmVhdGVzIGEgbmV3IGVudW0gY2xhc3MuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCBib3RoIHdoZW4gYW4gZW51bSBjbGFzcyBpcyBnaXZlbiBhIHZhbHVlIHRvIG1hdGNoCisgICAgICAgIHRvIGFuIGVudW1lcmF0aW9uIG1lbWJlciAoaS5lLiBDb2xvcigzKSkgYW5kIGZvciB0aGUgZnVuY3Rpb25hbCBBUEkKKyAgICAgICAgKGkuZS4gQ29sb3IgPSBFbnVtKCdDb2xvcicsIG5hbWVzPSdyZWQgZ3JlZW4gYmx1ZScpKS4KKworICAgICAgICBXaGVuIHVzZWQgZm9yIHRoZSBmdW5jdGlvbmFsIEFQSTogYG1vZHVsZWAsIGlmIHNldCwgd2lsbCBiZSBzdG9yZWQgaW4KKyAgICAgICAgdGhlIG5ldyBjbGFzcycgX19tb2R1bGVfXyBhdHRyaWJ1dGU7IGB0eXBlYCwgaWYgc2V0LCB3aWxsIGJlIG1peGVkIGluCisgICAgICAgIGFzIHRoZSBmaXJzdCBiYXNlIGNsYXNzLgorCisgICAgICAgIE5vdGU6IGlmIGBtb2R1bGVgIGlzIG5vdCBzZXQgdGhpcyByb3V0aW5lIHdpbGwgYXR0ZW1wdCB0byBkaXNjb3ZlciB0aGUKKyAgICAgICAgY2FsbGluZyBtb2R1bGUgYnkgd2Fsa2luZyB0aGUgZnJhbWUgc3RhY2s7IGlmIHRoaXMgaXMgdW5zdWNjZXNzZnVsCisgICAgICAgIHRoZSByZXN1bHRpbmcgY2xhc3Mgd2lsbCBub3QgYmUgcGlja2xlYWJsZS4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbmFtZXMgaXMgTm9uZTogICMgc2ltcGxlIHZhbHVlIGxvb2t1cAorICAgICAgICAgICAgcmV0dXJuIGNscy5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICMgb3RoZXJ3aXNlLCBmdW5jdGlvbmFsIEFQSTogd2UncmUgY3JlYXRpbmcgYSBuZXcgRW51bSB0eXBlCisgICAgICAgIHJldHVybiBjbHMuX2NyZWF0ZV8odmFsdWUsIG5hbWVzLCBtb2R1bGU9bW9kdWxlLCBxdWFsbmFtZT1xdWFsbmFtZSwgdHlwZT10eXBlKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhjbHMsIG1lbWJlcik6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKG1lbWJlciwgY2xzKSBhbmQgbWVtYmVyLm5hbWUgaW4gY2xzLl9tZW1iZXJfbWFwXworCisgICAgZGVmIF9fZGVsYXR0cl9fKGNscywgYXR0cik6CisgICAgICAgICMgbmljZXIgZXJyb3IgbWVzc2FnZSB3aGVuIHNvbWVvbmUgdHJpZXMgdG8gZGVsZXRlIGFuIGF0dHJpYnV0ZQorICAgICAgICAjIChzZWUgaXNzdWUxOTAyNSkuCisgICAgICAgIGlmIGF0dHIgaW4gY2xzLl9tZW1iZXJfbWFwXzoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAiJXM6IGNhbm5vdCBkZWxldGUgRW51bSBtZW1iZXIuIiAlIGNscy5fX25hbWVfXykKKyAgICAgICAgc3VwZXIoKS5fX2RlbGF0dHJfXyhhdHRyKQorCisgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgIHJldHVybiAoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21lbWJlcnNfXycsICdfX21vZHVsZV9fJ10gKworICAgICAgICAgICAgICAgIHNlbGYuX21lbWJlcl9uYW1lc18pCisKKyAgICBkZWYgX19nZXRhdHRyX18oY2xzLCBuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnVtIG1lbWJlciBtYXRjaGluZyBgbmFtZWAKKworICAgICAgICBXZSB1c2UgX19nZXRhdHRyX18gaW5zdGVhZCBvZiBkZXNjcmlwdG9ycyBvciBpbnNlcnRpbmcgaW50byB0aGUgZW51bQorICAgICAgICBjbGFzcycgX19kaWN0X18gaW4gb3JkZXIgdG8gc3VwcG9ydCBgbmFtZWAgYW5kIGB2YWx1ZWAgYmVpbmcgYm90aAorICAgICAgICBwcm9wZXJ0aWVzIGZvciBlbnVtIG1lbWJlcnMgKHdoaWNoIGxpdmUgaW4gdGhlIGNsYXNzJyBfX2RpY3RfXykgYW5kCisgICAgICAgIGVudW0gbWVtYmVycyB0aGVtc2VsdmVzLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBfaXNfZHVuZGVyKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGNscy5fbWVtYmVyX21hcF9bbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkgZnJvbSBOb25lCisKKyAgICBkZWYgX19nZXRpdGVtX18oY2xzLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIGNscy5fbWVtYmVyX21hcF9bbmFtZV0KKworICAgIGRlZiBfX2l0ZXJfXyhjbHMpOgorICAgICAgICByZXR1cm4gKGNscy5fbWVtYmVyX21hcF9bbmFtZV0gZm9yIG5hbWUgaW4gY2xzLl9tZW1iZXJfbmFtZXNfKQorCisgICAgZGVmIF9fbGVuX18oY2xzKToKKyAgICAgICAgcmV0dXJuIGxlbihjbHMuX21lbWJlcl9uYW1lc18pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX19tZW1iZXJzX18oY2xzKToKKyAgICAgICAgIiIiUmV0dXJucyBhIG1hcHBpbmcgb2YgbWVtYmVyIG5hbWUtPnZhbHVlLgorCisgICAgICAgIFRoaXMgbWFwcGluZyBsaXN0cyBhbGwgZW51bSBtZW1iZXJzLCBpbmNsdWRpbmcgYWxpYXNlcy4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgaXMgYSByZWFkLW9ubHkgdmlldyBvZiB0aGUgaW50ZXJuYWwgbWFwcGluZy4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIE1hcHBpbmdQcm94eVR5cGUoY2xzLl9tZW1iZXJfbWFwXykKKworICAgIGRlZiBfX3JlcHJfXyhjbHMpOgorICAgICAgICByZXR1cm4gIjxlbnVtICVyPiIgJSBjbHMuX19uYW1lX18KKworICAgIGRlZiBfX3JldmVyc2VkX18oY2xzKToKKyAgICAgICAgcmV0dXJuIChjbHMuX21lbWJlcl9tYXBfW25hbWVdIGZvciBuYW1lIGluIHJldmVyc2VkKGNscy5fbWVtYmVyX25hbWVzXykpCisKKyAgICBkZWYgX19zZXRhdHRyX18oY2xzLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgICIiIkJsb2NrIGF0dGVtcHRzIHRvIHJlYXNzaWduIEVudW0gbWVtYmVycy4KKworICAgICAgICBBIHNpbXBsZSBhc3NpZ25tZW50IHRvIHRoZSBjbGFzcyBuYW1lc3BhY2Ugb25seSBjaGFuZ2VzIG9uZSBvZiB0aGUKKyAgICAgICAgc2V2ZXJhbCBwb3NzaWJsZSB3YXlzIHRvIGdldCBhbiBFbnVtIG1lbWJlciBmcm9tIHRoZSBFbnVtIGNsYXNzLAorICAgICAgICByZXN1bHRpbmcgaW4gYW4gaW5jb25zaXN0ZW50IEVudW1lcmF0aW9uLgorCisgICAgICAgICIiIgorICAgICAgICBtZW1iZXJfbWFwID0gY2xzLl9fZGljdF9fLmdldCgnX21lbWJlcl9tYXBfJywge30pCisgICAgICAgIGlmIG5hbWUgaW4gbWVtYmVyX21hcDoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdDYW5ub3QgcmVhc3NpZ24gbWVtYmVycy4nKQorICAgICAgICBzdXBlcigpLl9fc2V0YXR0cl9fKG5hbWUsIHZhbHVlKQorCisgICAgZGVmIF9jcmVhdGVfKGNscywgY2xhc3NfbmFtZSwgbmFtZXM9Tm9uZSwgKiwgbW9kdWxlPU5vbmUsIHF1YWxuYW1lPU5vbmUsIHR5cGU9Tm9uZSk6CisgICAgICAgICIiIkNvbnZlbmllbmNlIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgRW51bSBjbGFzcy4KKworICAgICAgICBgbmFtZXNgIGNhbiBiZToKKworICAgICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgbWVtYmVyIG5hbWVzLCBzZXBhcmF0ZWQgZWl0aGVyIHdpdGggc3BhY2VzIG9yCisgICAgICAgICAgY29tbWFzLiAgVmFsdWVzIGFyZSBhdXRvLW51bWJlcmVkIGZyb20gMS4KKyAgICAgICAgKiBBbiBpdGVyYWJsZSBvZiBtZW1iZXIgbmFtZXMuICBWYWx1ZXMgYXJlIGF1dG8tbnVtYmVyZWQgZnJvbSAxLgorICAgICAgICAqIEFuIGl0ZXJhYmxlIG9mIChtZW1iZXIgbmFtZSwgdmFsdWUpIHBhaXJzLgorICAgICAgICAqIEEgbWFwcGluZyBvZiBtZW1iZXIgbmFtZSAtPiB2YWx1ZS4KKworICAgICAgICAiIiIKKyAgICAgICAgbWV0YWNscyA9IGNscy5fX2NsYXNzX18KKyAgICAgICAgYmFzZXMgPSAoY2xzLCApIGlmIHR5cGUgaXMgTm9uZSBlbHNlICh0eXBlLCBjbHMpCisgICAgICAgIGNsYXNzZGljdCA9IG1ldGFjbHMuX19wcmVwYXJlX18oY2xhc3NfbmFtZSwgYmFzZXMpCisKKyAgICAgICAgIyBzcGVjaWFsIHByb2Nlc3NpbmcgbmVlZGVkIGZvciBuYW1lcz8KKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lcywgc3RyKToKKyAgICAgICAgICAgIG5hbWVzID0gbmFtZXMucmVwbGFjZSgnLCcsICcgJykuc3BsaXQoKQorICAgICAgICBpZiBpc2luc3RhbmNlKG5hbWVzLCAodHVwbGUsIGxpc3QpKSBhbmQgaXNpbnN0YW5jZShuYW1lc1swXSwgc3RyKToKKyAgICAgICAgICAgIG5hbWVzID0gWyhlLCBpKSBmb3IgKGksIGUpIGluIGVudW1lcmF0ZShuYW1lcywgMSldCisKKyAgICAgICAgIyBIZXJlLCBuYW1lcyBpcyBlaXRoZXIgYW4gaXRlcmFibGUgb2YgKG5hbWUsIHZhbHVlKSBvciBhIG1hcHBpbmcuCisgICAgICAgIGZvciBpdGVtIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCBzdHIpOgorICAgICAgICAgICAgICAgIG1lbWJlcl9uYW1lLCBtZW1iZXJfdmFsdWUgPSBpdGVtLCBuYW1lc1tpdGVtXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1iZXJfbmFtZSwgbWVtYmVyX3ZhbHVlID0gaXRlbQorICAgICAgICAgICAgY2xhc3NkaWN0W21lbWJlcl9uYW1lXSA9IG1lbWJlcl92YWx1ZQorICAgICAgICBlbnVtX2NsYXNzID0gbWV0YWNscy5fX25ld19fKG1ldGFjbHMsIGNsYXNzX25hbWUsIGJhc2VzLCBjbGFzc2RpY3QpCisKKyAgICAgICAgIyBUT0RPOiByZXBsYWNlIHRoZSBmcmFtZSBoYWNrIGlmIGEgYmxlc3NlZCB3YXkgdG8ga25vdyB0aGUgY2FsbGluZworICAgICAgICAjIG1vZHVsZSBpcyBldmVyIGRldmVsb3BlZAorICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzeXMuX2dldGZyYW1lKDIpLmZfZ2xvYmFsc1snX19uYW1lX18nXQorICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvcikgYXMgZXhjOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBfbWFrZV9jbGFzc191bnBpY2tsYWJsZShlbnVtX2NsYXNzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW51bV9jbGFzcy5fX21vZHVsZV9fID0gbW9kdWxlCisgICAgICAgIGlmIHF1YWxuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZW51bV9jbGFzcy5fX3F1YWxuYW1lX18gPSBxdWFsbmFtZQorCisgICAgICAgIHJldHVybiBlbnVtX2NsYXNzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfbWl4aW5zXyhiYXNlcyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHR5cGUgZm9yIGNyZWF0aW5nIGVudW0gbWVtYmVycywgYW5kIHRoZSBmaXJzdCBpbmhlcml0ZWQKKyAgICAgICAgZW51bSBjbGFzcy4KKworICAgICAgICBiYXNlczogdGhlIHR1cGxlIG9mIGJhc2VzIHRoYXQgd2FzIGdpdmVuIHRvIF9fbmV3X18KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGJhc2VzOgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdCwgRW51bQorCisgICAgICAgICMgZG91YmxlIGNoZWNrIHRoYXQgd2UgYXJlIG5vdCBzdWJjbGFzc2luZyBhIGNsYXNzIHdpdGggZXhpc3RpbmcKKyAgICAgICAgIyBlbnVtZXJhdGlvbiBtZW1iZXJzOyB3aGlsZSB3ZSdyZSBhdCBpdCwgc2VlIGlmIGFueSBvdGhlciBkYXRhCisgICAgICAgICMgdHlwZSBoYXMgYmVlbiBtaXhlZCBpbiBzbyB3ZSBjYW4gdXNlIHRoZSBjb3JyZWN0IF9fbmV3X18KKyAgICAgICAgbWVtYmVyX3R5cGUgPSBmaXJzdF9lbnVtID0gTm9uZQorICAgICAgICBmb3IgYmFzZSBpbiBiYXNlczoKKyAgICAgICAgICAgIGlmICAoYmFzZSBpcyBub3QgRW51bSBhbmQKKyAgICAgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgYmFzZS5fbWVtYmVyX25hbWVzXyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgZXh0ZW5kIGVudW1lcmF0aW9ucyIpCisgICAgICAgICMgYmFzZSBpcyBub3cgdGhlIGxhc3QgYmFzZSBpbiBiYXNlcworICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmV3IGVudW1lcmF0aW9ucyBtdXN0IGJlIGNyZWF0ZWQgYXMgIgorICAgICAgICAgICAgICAgICAgICAiYENsYXNzTmFtZShbbWl4aW5fdHlwZSxdIGVudW1fdHlwZSlgIikKKworICAgICAgICAjIGdldCBjb3JyZWN0IG1peC1pbiB0eXBlIChlaXRoZXIgbWl4LWluIHR5cGUgb2YgRW51bSBzdWJjbGFzcywgb3IKKyAgICAgICAgIyBmaXJzdCBiYXNlIGlmIGxhc3QgYmFzZSBpcyBFbnVtKQorICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhiYXNlc1swXSwgRW51bSk6CisgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IGJhc2VzWzBdICAgICAjIGZpcnN0IGRhdGEgdHlwZQorICAgICAgICAgICAgZmlyc3RfZW51bSA9IGJhc2VzWy0xXSAgIyBlbnVtIHR5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBiYXNlIGluIGJhc2VzWzBdLl9fbXJvX186CisgICAgICAgICAgICAgICAgIyBtb3N0IGNvbW1vbjogKEludEVudW0sIGludCwgRW51bSwgb2JqZWN0KQorICAgICAgICAgICAgICAgICMgcG9zc2libGU6ICAgICg8RW51bSAnQXV0b0ludEVudW0nPiwgPEVudW0gJ0ludEVudW0nPiwKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgPGNsYXNzICdpbnQnPiwgPEVudW0gJ0VudW0nPiwKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgPGNsYXNzICdvYmplY3QnPikKKyAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGJhc2UsIEVudW0pOgorICAgICAgICAgICAgICAgICAgICBpZiBmaXJzdF9lbnVtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9lbnVtID0gYmFzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG1lbWJlcl90eXBlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IGJhc2UKKworICAgICAgICByZXR1cm4gbWVtYmVyX3R5cGUsIGZpcnN0X2VudW0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2ZpbmRfbmV3XyhjbGFzc2RpY3QsIG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgX19uZXdfXyB0byBiZSB1c2VkIGZvciBjcmVhdGluZyB0aGUgZW51bSBtZW1iZXJzLgorCisgICAgICAgIGNsYXNzZGljdDogdGhlIGNsYXNzIGRpY3Rpb25hcnkgZ2l2ZW4gdG8gX19uZXdfXworICAgICAgICBtZW1iZXJfdHlwZTogdGhlIGRhdGEgdHlwZSB3aG9zZSBfX25ld19fIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0CisgICAgICAgIGZpcnN0X2VudW06IGVudW1lcmF0aW9uIHRvIGNoZWNrIGZvciBhbiBvdmVycmlkaW5nIF9fbmV3X18KKworICAgICAgICAiIiIKKyAgICAgICAgIyBub3cgZmluZCB0aGUgY29ycmVjdCBfX25ld19fLCBjaGVja2luZyB0byBzZWUgb2Ygb25lIHdhcyBkZWZpbmVkCisgICAgICAgICMgYnkgdGhlIHVzZXI7IGFsc28gY2hlY2sgZWFybGllciBlbnVtIGNsYXNzZXMgaW4gY2FzZSBhIF9fbmV3X18gd2FzCisgICAgICAgICMgc2F2ZWQgYXMgX19uZXdfbWVtYmVyX18KKyAgICAgICAgX19uZXdfXyA9IGNsYXNzZGljdC5nZXQoJ19fbmV3X18nLCBOb25lKQorCisgICAgICAgICMgc2hvdWxkIF9fbmV3X18gYmUgc2F2ZWQgYXMgX19uZXdfbWVtYmVyX18gbGF0ZXI/CisgICAgICAgIHNhdmVfbmV3ID0gX19uZXdfXyBpcyBub3QgTm9uZQorCisgICAgICAgIGlmIF9fbmV3X18gaXMgTm9uZToKKyAgICAgICAgICAgICMgY2hlY2sgYWxsIHBvc3NpYmxlcyBmb3IgX19uZXdfbWVtYmVyX18gYmVmb3JlIGZhbGxpbmcgYmFjayB0bworICAgICAgICAgICAgIyBfX25ld19fCisgICAgICAgICAgICBmb3IgbWV0aG9kIGluICgnX19uZXdfbWVtYmVyX18nLCAnX19uZXdfXycpOgorICAgICAgICAgICAgICAgIGZvciBwb3NzaWJsZSBpbiAobWVtYmVyX3R5cGUsIGZpcnN0X2VudW0pOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBnZXRhdHRyKHBvc3NpYmxlLCBtZXRob2QsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldCBub3QgaW4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZS5fX25ld19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fX25ld19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW0uX19uZXdfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OgorICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfXyA9IHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBfX25ld19fIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfX25ld19fID0gb2JqZWN0Ll9fbmV3X18KKworICAgICAgICAjIGlmIGEgbm9uLW9iamVjdC5fX25ld19fIGlzIHVzZWQgdGhlbiB3aGF0ZXZlciB2YWx1ZS90dXBsZSB3YXMKKyAgICAgICAgIyBhc3NpZ25lZCB0byB0aGUgZW51bSBtZW1iZXIgbmFtZSB3aWxsIGJlIHBhc3NlZCB0byBfX25ld19fIGFuZCB0byB0aGUKKyAgICAgICAgIyBuZXcgZW51bSBtZW1iZXIncyBfX2luaXRfXworICAgICAgICBpZiBfX25ld19fIGlzIG9iamVjdC5fX25ld19fOgorICAgICAgICAgICAgdXNlX2FyZ3MgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlX2FyZ3MgPSBUcnVlCisKKyAgICAgICAgcmV0dXJuIF9fbmV3X18sIHNhdmVfbmV3LCB1c2VfYXJncworCisKK2NsYXNzIEVudW0obWV0YWNsYXNzPUVudW1NZXRhKToKKyAgICAiIiJHZW5lcmljIGVudW1lcmF0aW9uLgorCisgICAgRGVyaXZlIGZyb20gdGhpcyBjbGFzcyB0byBkZWZpbmUgbmV3IGVudW1lcmF0aW9ucy4KKworICAgICIiIgorICAgIGRlZiBfX25ld19fKGNscywgdmFsdWUpOgorICAgICAgICAjIGFsbCBlbnVtIGluc3RhbmNlcyBhcmUgYWN0dWFsbHkgY3JlYXRlZCBkdXJpbmcgY2xhc3MgY29uc3RydWN0aW9uCisgICAgICAgICMgd2l0aG91dCBjYWxsaW5nIHRoaXMgbWV0aG9kOyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIG1ldGFjbGFzcycKKyAgICAgICAgIyBfX2NhbGxfXyAoaS5lLiBDb2xvcigzKSApLCBhbmQgYnkgcGlja2xlCisgICAgICAgIGlmIHR5cGUodmFsdWUpIGlzIGNsczoKKyAgICAgICAgICAgICMgRm9yIGxvb2t1cHMgbGlrZSBDb2xvcihDb2xvci5yZWQpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgIyBieS12YWx1ZSBzZWFyY2ggZm9yIGEgbWF0Y2hpbmcgZW51bSBtZW1iZXIKKyAgICAgICAgIyBzZWUgaWYgaXQncyBpbiB0aGUgcmV2ZXJzZSBtYXBwaW5nIChmb3IgaGFzaGFibGUgdmFsdWVzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpbiBjbHMuX3ZhbHVlMm1lbWJlcl9tYXBfOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3ZhbHVlMm1lbWJlcl9tYXBfW3ZhbHVlXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBub3QgdGhlcmUsIG5vdyBkbyBsb25nIHNlYXJjaCAtLSBPKG4pIGJlaGF2aW9yCisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGNscy5fbWVtYmVyX21hcF8udmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYgbWVtYmVyLnZhbHVlID09IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtYmVyCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIGlzIG5vdCBhIHZhbGlkICVzIiAlICh2YWx1ZSwgY2xzLl9fbmFtZV9fKSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMuJXM6ICVyPiIgJSAoCisgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfLCBzZWxmLl92YWx1ZV8pCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfKQorCisgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgIGFkZGVkX2JlaGF2aW9yID0gW20gZm9yIG0gaW4gc2VsZi5fX2NsYXNzX18uX19kaWN0X18gaWYgbVswXSAhPSAnXyddCisgICAgICAgIHJldHVybiAoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnXSArCisgICAgICAgICAgICAgICAgYWRkZWRfYmVoYXZpb3IpCisKKyAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICMgbWl4ZWQtaW4gRW51bXMgc2hvdWxkIHVzZSB0aGUgbWl4ZWQtaW4gdHlwZSdzIF9fZm9ybWF0X18sIG90aGVyd2lzZQorICAgICAgICAjIHdlIGNhbiBnZXQgc3RyYW5nZSByZXN1bHRzIHdpdGggdGhlIEVudW0gbmFtZSBzaG93aW5nIHVwIGluc3RlYWQgb2YKKyAgICAgICAgIyB0aGUgdmFsdWUKKworICAgICAgICAjIHB1cmUgRW51bSBicmFuY2gKKyAgICAgICAgaWYgc2VsZi5fbWVtYmVyX3R5cGVfIGlzIG9iamVjdDoKKyAgICAgICAgICAgIGNscyA9IHN0cgorICAgICAgICAgICAgdmFsID0gc3RyKHNlbGYpCisgICAgICAgICMgbWl4LWluIGJyYW5jaAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xzID0gc2VsZi5fbWVtYmVyX3R5cGVfCisgICAgICAgICAgICB2YWwgPSBzZWxmLnZhbHVlCisgICAgICAgIHJldHVybiBjbHMuX19mb3JtYXRfXyh2YWwsIGZvcm1hdF9zcGVjKQorCisgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX3ZhbHVlXywgKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9uYW1lXykKKworICAgIGRlZiBfX3JlZHVjZV9leF9fKHNlbGYsIHByb3RvKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCBzZWxmLl9fZ2V0bmV3YXJnc19fKCkKKworICAgICMgRHluYW1pY0NsYXNzQXR0cmlidXRlIGlzIHVzZWQgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGBuYW1lYCBhbmQKKyAgICAjIGB2YWx1ZWAgcHJvcGVydGllcyBvZiBlbnVtIG1lbWJlcnMgd2hpbGUga2VlcGluZyBzb21lIG1lYXN1cmUgb2YKKyAgICAjIHByb3RlY3Rpb24gZnJvbSBtb2RpZmljYXRpb24sIHdoaWxlIHN0aWxsIGFsbG93aW5nIGZvciBhbiBlbnVtZXJhdGlvbgorICAgICMgdG8gaGF2ZSBtZW1iZXJzIG5hbWVkIGBuYW1lYCBhbmQgYHZhbHVlYC4gIFRoaXMgd29ya3MgYmVjYXVzZSBlbnVtZXJhdGlvbgorICAgICMgbWVtYmVycyBhcmUgbm90IHNldCBkaXJlY3RseSBvbiB0aGUgZW51bSBjbGFzcyAtLSBfX2dldGF0dHJfXyBpcworICAgICMgdXNlZCB0byBsb29rIHRoZW0gdXAuCisKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgICIiIlRoZSBuYW1lIG9mIHRoZSBFbnVtIG1lbWJlci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWVfCisKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgZGVmIHZhbHVlKHNlbGYpOgorICAgICAgICAiIiJUaGUgdmFsdWUgb2YgdGhlIEVudW0gbWVtYmVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfCisKKworY2xhc3MgSW50RW51bShpbnQsIEVudW0pOgorICAgICIiIkVudW0gd2hlcmUgbWVtYmVycyBhcmUgYWxzbyAoYW5kIG11c3QgYmUpIGludHMiIiIKKworCitkZWYgdW5pcXVlKGVudW1lcmF0aW9uKToKKyAgICAiIiJDbGFzcyBkZWNvcmF0b3IgZm9yIGVudW1lcmF0aW9ucyBlbnN1cmluZyB1bmlxdWUgbWVtYmVyIHZhbHVlcy4iIiIKKyAgICBkdXBsaWNhdGVzID0gW10KKyAgICBmb3IgbmFtZSwgbWVtYmVyIGluIGVudW1lcmF0aW9uLl9fbWVtYmVyc19fLml0ZW1zKCk6CisgICAgICAgIGlmIG5hbWUgIT0gbWVtYmVyLm5hbWU6CisgICAgICAgICAgICBkdXBsaWNhdGVzLmFwcGVuZCgobmFtZSwgbWVtYmVyLm5hbWUpKQorICAgIGlmIGR1cGxpY2F0ZXM6CisgICAgICAgIGFsaWFzX2RldGFpbHMgPSAnLCAnLmpvaW4oCisgICAgICAgICAgICAgICAgWyIlcyAtPiAlcyIgJSAoYWxpYXMsIG5hbWUpIGZvciAoYWxpYXMsIG5hbWUpIGluIGR1cGxpY2F0ZXNdKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdkdXBsaWNhdGUgdmFsdWVzIGZvdW5kIGluICVyOiAlcycgJQorICAgICAgICAgICAgICAgIChlbnVtZXJhdGlvbiwgYWxpYXNfZGV0YWlscykpCisgICAgcmV0dXJuIGVudW1lcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvZmlsZWNtcC5weSBiL0xpYi9maWxlY21wLnB5CmluZGV4IGY1Y2VhMWQuLmRkNWEyYWYgMTAwNjQ0Ci0tLSBhL0xpYi9maWxlY21wLnB5CisrKyBiL0xpYi9maWxlY21wLnB5CkBAIC02LDYgKzYsNyBAQAogRnVuY3Rpb25zOgogICAgIGNtcChmMSwgZjIsIHNoYWxsb3c9VHJ1ZSkgLT4gaW50CiAgICAgY21wZmlsZXMoYSwgYiwgY29tbW9uKSAtPiAoW10sIFtdLCBbXSkKKyAgICBjbGVhcl9jYWNoZSgpCiAKICIiIgogCkBAIC0xMywxMSArMTQsMTggQEAKIGltcG9ydCBzdGF0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgZmlsdGVyZmFsc2UKIAotX19hbGxfXyA9IFsiY21wIiwgImRpcmNtcCIsICJjbXBmaWxlcyJdCitfX2FsbF9fID0gWydjbGVhcl9jYWNoZScsICdjbXAnLCAnZGlyY21wJywgJ2NtcGZpbGVzJywgJ0RFRkFVTFRfSUdOT1JFUyddCiAKIF9jYWNoZSA9IHt9CiBCVUZTSVpFID0gOCoxMDI0CiAKK0RFRkFVTFRfSUdOT1JFUyA9IFsKKyAgICAnUkNTJywgJ0NWUycsICd0YWdzJywgJy5naXQnLCAnLmhnJywgJy5ienInLCAnX2RhcmNzJywgJ19fcHljYWNoZV9fJ10KKworZGVmIGNsZWFyX2NhY2hlKCk6CisgICAgIiIiQ2xlYXIgdGhlIGZpbGVjbXAgY2FjaGUuIiIiCisgICAgX2NhY2hlLmNsZWFyKCkKKwogZGVmIGNtcChmMSwgZjIsIHNoYWxsb3c9VHJ1ZSk6CiAgICAgIiIiQ29tcGFyZSB0d28gZmlsZXMuCiAKQEAgLTM1LDcgKzQzLDggQEAKICAgICBUcnVlIGlmIHRoZSBmaWxlcyBhcmUgdGhlIHNhbWUsIEZhbHNlIG90aGVyd2lzZS4KIAogICAgIFRoaXMgZnVuY3Rpb24gdXNlcyBhIGNhY2hlIGZvciBwYXN0IGNvbXBhcmlzb25zIGFuZCB0aGUgcmVzdWx0cywKLSAgICB3aXRoIGEgY2FjaGUgaW52YWxpZGF0aW9uIG1lY2hhbmlzbSByZWx5aW5nIG9uIHN0YWxlIHNpZ25hdHVyZXMuCisgICAgd2l0aCBjYWNoZSBlbnRyaWVzIGludmFsaWRhdGVkIGlmIHRoZWlyIHN0YXQgaW5mb3JtYXRpb24KKyAgICBjaGFuZ2VzLiAgVGhlIGNhY2hlIG1heSBiZSBjbGVhcmVkIGJ5IGNhbGxpbmcgY2xlYXJfY2FjaGUoKS4KIAogICAgICIiIgogCkBAIC01Miw3ICs2MSw3IEBACiAgICAgaWYgb3V0Y29tZSBpcyBOb25lOgogICAgICAgICBvdXRjb21lID0gX2RvX2NtcChmMSwgZjIpCiAgICAgICAgIGlmIGxlbihfY2FjaGUpID4gMTAwOiAgICAgICMgbGltaXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgY2FjaGUKLSAgICAgICAgICAgIF9jYWNoZS5jbGVhcigpCisgICAgICAgICAgICBjbGVhcl9jYWNoZSgpCiAgICAgICAgIF9jYWNoZVtmMSwgZjIsIHMxLCBzMl0gPSBvdXRjb21lCiAgICAgcmV0dXJuIG91dGNvbWUKIApAQCAtODAsNyArODksNyBAQAogICAgIGRpcmNtcChhLCBiLCBpZ25vcmU9Tm9uZSwgaGlkZT1Ob25lKQogICAgICAgQSBhbmQgQiBhcmUgZGlyZWN0b3JpZXMuCiAgICAgICBJR05PUkUgaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGlnbm9yZSwKLSAgICAgICAgZGVmYXVsdHMgdG8gWydSQ1MnLCAnQ1ZTJywgJ3RhZ3MnXS4KKyAgICAgICAgZGVmYXVsdHMgdG8gREVGQVVMVF9JR05PUkVTLgogICAgICAgSElERSBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaGlkZSwKICAgICAgICAgZGVmYXVsdHMgdG8gW29zLmN1cmRpciwgb3MucGFyZGlyXS4KIApAQCAtMTE2LDcgKzEyNSw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmhpZGUgPSBoaWRlCiAgICAgICAgIGlmIGlnbm9yZSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBbJ1JDUycsICdDVlMnLCAndGFncyddICMgTmFtZXMgaWdub3JlZCBpbiBjb21wYXJpc29uCisgICAgICAgICAgICBzZWxmLmlnbm9yZSA9IERFRkFVTFRfSUdOT1JFUwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBpZ25vcmUKIApAQCAtMTQ3LDEyICsxNTYsMTIgQEAKICAgICAgICAgICAgIG9rID0gMQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGFfc3RhdCA9IG9zLnN0YXQoYV9wYXRoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIHdoeToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgICAgICAjIHByaW50KCdDYW5cJ3Qgc3RhdCcsIGFfcGF0aCwgJzonLCB3aHkuYXJnc1sxXSkKICAgICAgICAgICAgICAgICBvayA9IDAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBiX3N0YXQgPSBvcy5zdGF0KGJfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgIyBwcmludCgnQ2FuXCd0IHN0YXQnLCBiX3BhdGgsICc6Jywgd2h5LmFyZ3NbMV0pCiAgICAgICAgICAgICAgICAgb2sgPSAwCiAKQEAgLTI2OCw3ICsyNzcsNyBAQAogZGVmIF9jbXAoYSwgYiwgc2gsIGFicz1hYnMsIGNtcD1jbXApOgogICAgIHRyeToKICAgICAgICAgcmV0dXJuIG5vdCBhYnMoY21wKGEsIGIsIHNoKSkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiAyCiAKIApkaWZmIC0tZ2l0IGEvTGliL2ZpbGVpbnB1dC5weSBiL0xpYi9maWxlaW5wdXQucHkKaW5kZXggODc5YTBmZC4uZGUyOTUxOCAxMDA2NDQKLS0tIGEvTGliL2ZpbGVpbnB1dC5weQorKysgYi9MaWIvZmlsZWlucHV0LnB5CkBAIC0zMCw3ICszMCw3IEBACiAKIEFsbCBmaWxlcyBhcmUgb3BlbmVkIGluIHRleHQgbW9kZSBieSBkZWZhdWx0LCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkKIHNldHRpbmcgdGhlIG1vZGUgcGFyYW1ldGVyIHRvIGlucHV0KCkgb3IgRmlsZUlucHV0Ll9faW5pdF9fKCkuCi1JZiBhbiBJL08gZXJyb3Igb2NjdXJzIGR1cmluZyBvcGVuaW5nIG9yIHJlYWRpbmcgYSBmaWxlLCB0aGUgSU9FcnJvcgorSWYgYW4gSS9PIGVycm9yIG9jY3VycyBkdXJpbmcgb3BlbmluZyBvciByZWFkaW5nIGEgZmlsZSwgdGhlIE9TRXJyb3IKIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKIElmIHN5cy5zdGRpbiBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlLCB0aGUgc2Vjb25kIGFuZCBmdXJ0aGVyIHVzZSB3aWxsCkBAIC0yMjIsNiArMjIyLDEwIEBACiAgICAgICAgIGlmIG1vZGUgbm90IGluICgncicsICdyVScsICdVJywgJ3JiJyk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJGaWxlSW5wdXQgb3BlbmluZyBtb2RlIG11c3QgYmUgb25lIG9mICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidyJywgJ3JVJywgJ1UnIGFuZCAncmInIikKKyAgICAgICAgaWYgJ1UnIGluIG1vZGU6CisgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHNlbGYuX21vZGUgPSBtb2RlCiAgICAgICAgIGlmIG9wZW5ob29rOgogICAgICAgICAgICAgaWYgaW5wbGFjZToKQEAgLTMyMiw5ICszMjYsMTEgQEAKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbnBsYWNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9iYWNrdXBmaWxlbmFtZSA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVuYW1lICsgKHNlbGYuX2JhY2t1cCBvciAiLmJhayIpKQotICAgICAgICAgICAgICAgICAgICB0cnk6IG9zLnVubGluayhzZWxmLl9iYWNrdXBmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOiBwYXNzCi0gICAgICAgICAgICAgICAgICAgICMgVGhlIG5leHQgZmV3IGxpbmVzIG1heSByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9iYWNrdXBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICMgVGhlIG5leHQgZmV3IGxpbmVzIG1heSByYWlzZSBPU0Vycm9yCiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzZWxmLl9maWxlbmFtZSwgc2VsZi5fYmFja3VwZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBvcGVuKHNlbGYuX2JhY2t1cGZpbGVuYW1lLCBzZWxmLl9tb2RlKQogICAgICAgICAgICAgICAgICAgICB0cnk6CkBAIC0zNDYsNyArMzUyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2F2ZXN0ZG91dCA9IHN5cy5zdGRvdXQKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX291dHB1dAogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhpcyBtYXkgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IHJhaXNlIE9TRXJyb3IKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3Blbmhvb2s6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gc2VsZi5fb3Blbmhvb2soc2VsZi5fZmlsZW5hbWUsIHNlbGYuX21vZGUpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvZm9ybWF0dGVyLnB5IGIvTGliL2Zvcm1hdHRlci5weQppbmRleCA2MGU2MGYxLi5kOGNjYTUyIDEwMDY0NAotLS0gYS9MaWIvZm9ybWF0dGVyLnB5CisrKyBiL0xpYi9mb3JtYXR0ZXIucHkKQEAgLTE5LDYgKzE5LDkgQEAKICIiIgogCiBpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK3dhcm5pbmdzLndhcm4oJ3RoZSBmb3JtYXR0ZXIgbW9kdWxlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnCisgICAgICAgICAgICAgICdQeXRob24gMy42JywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKIAogCiBBU19JUyA9IE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9mcmFjdGlvbnMucHkgYi9MaWIvZnJhY3Rpb25zLnB5CmluZGV4IDhiZTUyZDIuLjc5ZTgzZmYgMTAwNjQ0Ci0tLSBhL0xpYi9mcmFjdGlvbnMucHkKKysrIGIvTGliL2ZyYWN0aW9ucy5weQpAQCAtMTgyLDggKzE4MiwxMCBAQAogICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGYsIGZsb2F0KToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJXMuZnJvbV9mbG9hdCgpIG9ubHkgdGFrZXMgZmxvYXRzLCBub3QgJXIgKCVzKSIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbHMuX19uYW1lX18sIGYsIHR5cGUoZikuX19uYW1lX18pKQotICAgICAgICBpZiBtYXRoLmlzbmFuKGYpIG9yIG1hdGguaXNpbmYoZik6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKKyAgICAgICAgaWYgbWF0aC5pc25hbihmKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKKyAgICAgICAgaWYgbWF0aC5pc2luZihmKToKKyAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKICAgICAgICAgcmV0dXJuIGNscygqZi5hc19pbnRlZ2VyX3JhdGlvKCkpCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTE5Niw5ICsxOTgsMTEgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICAgICAgICAiJXMuZnJvbV9kZWNpbWFsKCkgb25seSB0YWtlcyBEZWNpbWFscywgbm90ICVyICglcykiICUKICAgICAgICAgICAgICAgICAoY2xzLl9fbmFtZV9fLCBkZWMsIHR5cGUoZGVjKS5fX25hbWVfXykpCi0gICAgICAgIGlmIG5vdCBkZWMuaXNfZmluaXRlKCk6Ci0gICAgICAgICAgICAjIENhdGNoZXMgaW5maW5pdGllcyBhbmQgbmFucy4KLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgJXMgdG8gJXMuIiAlIChkZWMsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIGRlYy5pc19pbmZpbml0ZSgpOgorICAgICAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcigKKyAgICAgICAgICAgICAgICAiQ2Fubm90IGNvbnZlcnQgJXMgdG8gJXMuIiAlIChkZWMsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIGRlYy5pc19uYW4oKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQogICAgICAgICBzaWduLCBkaWdpdHMsIGV4cCA9IGRlYy5hc190dXBsZSgpCiAgICAgICAgIGRpZ2l0cyA9IGludCgnJy5qb2luKG1hcChzdHIsIGRpZ2l0cykpKQogICAgICAgICBpZiBzaWduOgpkaWZmIC0tZ2l0IGEvTGliL2Z0cGxpYi5weSBiL0xpYi9mdHBsaWIucHkKaW5kZXggNWU3NWU2ZC4uMmNjNDcwMiAxMDA2NDQKLS0tIGEvTGliL2Z0cGxpYi5weQorKysgYi9MaWIvZnRwbGliLnB5CkBAIC0zOSw5ICszOSwxMCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgc29ja2V0CitpbXBvcnQgd2FybmluZ3MKIGZyb20gc29ja2V0IGltcG9ydCBfR0xPQkFMX0RFRkFVTFRfVElNRU9VVAogCi1fX2FsbF9fID0gWyJGVFAiLCJOZXRyYyJdCitfX2FsbF9fID0gWyJGVFAiLCAiTmV0cmMiXQogCiAjIE1hZ2ljIG51bWJlciBmcm9tIDxzb2NrZXQuaD4KIE1TR19PT0IgPSAweDEgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFByb2Nlc3MgZGF0YSBvdXQgb2YgYmFuZApAQCAtNjMsNyArNjQsNyBAQAogCiAjIEFsbCBleGNlcHRpb25zIChob3BlZnVsbHkpIHRoYXQgbWF5IGJlIHJhaXNlZCBoZXJlIGFuZCB0aGF0IGFyZW4ndAogIyAoYWx3YXlzKSBwcm9ncmFtbWluZyBlcnJvcnMgb24gb3VyIHNpZGUKLWFsbF9lcnJvcnMgPSAoRXJyb3IsIElPRXJyb3IsIEVPRkVycm9yKQorYWxsX2Vycm9ycyA9IChFcnJvciwgT1NFcnJvciwgRU9GRXJyb3IpCiAKIAogIyBMaW5lIHRlcm1pbmF0b3JzICh3ZSBhbHdheXMgb3V0cHV0IENSTEYsIGJ1dCBhY2NlcHQgYW55IG9mIENSTEYsIENSLCBMRikKQEAgLTEyNiw3ICsxMjcsNyBAQAogICAgICAgICBpZiBzZWxmLnNvY2sgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5xdWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuc29jayBpcyBub3QgTm9uZToKQEAgLTEzNiw2ICsxMzcsNyBAQAogICAgICAgICAnJydDb25uZWN0IHRvIGhvc3QuICBBcmd1bWVudHMgYXJlOgogICAgICAgICAgLSBob3N0OiBob3N0bmFtZSB0byBjb25uZWN0IHRvIChzdHJpbmcsIGRlZmF1bHQgcHJldmlvdXMgaG9zdCkKICAgICAgICAgIC0gcG9ydDogcG9ydCB0byBjb25uZWN0IHRvIChpbnRlZ2VyLCBkZWZhdWx0IHByZXZpb3VzIHBvcnQpCisgICAgICAgICAtIHRpbWVvdXQ6IHRoZSB0aW1lb3V0IHRvIHNldCBhZ2FpbnN0IHRoZSBmdHAgc29ja2V0KHMpCiAgICAgICAgICAtIHNvdXJjZV9hZGRyZXNzOiBhIDItdHVwbGUgKGhvc3QsIHBvcnQpIGZvciB0aGUgc29ja2V0IHRvIGJpbmQKICAgICAgICAgICAgdG8gYXMgaXRzIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0aW5nLgogICAgICAgICAnJycKQEAgLTE4Niw3ICsxODgsOCBAQAogICAgICMgSW50ZXJuYWw6IHNlbmQgb25lIGxpbmUgdG8gdGhlIHNlcnZlciwgYXBwZW5kaW5nIENSTEYKICAgICBkZWYgcHV0bGluZShzZWxmLCBsaW5lKToKICAgICAgICAgbGluZSA9IGxpbmUgKyBDUkxGCi0gICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMTogcHJpbnQoJypwdXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgorICAgICAgICAgICAgcHJpbnQoJypwdXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwobGluZS5lbmNvZGUoc2VsZi5lbmNvZGluZykpCiAKICAgICAjIEludGVybmFsOiBzZW5kIG9uZSBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIgKHRocm91Z2ggcHV0bGluZSgpKQpAQCAtMjAyLDkgKzIwNSwxMiBAQAogICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQogICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6CiAgICAgICAgICAgICBwcmludCgnKmdldConLCBzZWxmLnNhbml0aXplKGxpbmUpKQotICAgICAgICBpZiBub3QgbGluZTogcmFpc2UgRU9GRXJyb3IKLSAgICAgICAgaWYgbGluZVstMjpdID09IENSTEY6IGxpbmUgPSBsaW5lWzotMl0KLSAgICAgICAgZWxpZiBsaW5lWy0xOl0gaW4gQ1JMRjogbGluZSA9IGxpbmVbOi0xXQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCisgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQorICAgICAgICBlbGlmIGxpbmVbLTE6XSBpbiBDUkxGOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQogICAgICAgICByZXR1cm4gbGluZQogCiAgICAgIyBJbnRlcm5hbDogZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLCB3aGljaCBtYXkgcG9zc2libHkKQEAgLTIyNyw3ICsyMzMsOCBAQAogICAgICMgUmFpc2UgdmFyaW91cyBlcnJvcnMgaWYgdGhlIHJlc3BvbnNlIGluZGljYXRlcyBhbiBlcnJvcgogICAgIGRlZiBnZXRyZXNwKHNlbGYpOgogICAgICAgICByZXNwID0gc2VsZi5nZXRtdWx0aWxpbmUoKQotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzogcHJpbnQoJypyZXNwKicsIHNlbGYuc2FuaXRpemUocmVzcCkpCisgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nOgorICAgICAgICAgICAgcHJpbnQoJypyZXNwKicsIHNlbGYuc2FuaXRpemUocmVzcCkpCiAgICAgICAgIHNlbGYubGFzdHJlc3AgPSByZXNwWzozXQogICAgICAgICBjID0gcmVzcFs6MV0KICAgICAgICAgaWYgYyBpbiB7JzEnLCAnMicsICczJ306CkBAIC0yNTEsNyArMjU4LDggQEAKICAgICAgICAgSVAgYW5kIFN5bmNoOyB0aGF0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHdpdGggdGhlIHNlcnZlcnMgSSd2ZQogICAgICAgICB0cmllZC4gIEluc3RlYWQsIGp1c3Qgc2VuZCB0aGUgQUJPUiBjb21tYW5kIGFzIE9PQiBkYXRhLicnJwogICAgICAgICBsaW5lID0gYidBQk9SJyArIEJfQ1JMRgotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6IHByaW50KCcqcHV0IHVyZ2VudConLCBzZWxmLnNhbml0aXplKGxpbmUpKQorICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6CisgICAgICAgICAgICBwcmludCgnKnB1dCB1cmdlbnQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwobGluZSwgTVNHX09PQikKICAgICAgICAgcmVzcCA9IHNlbGYuZ2V0bXVsdGlsaW5lKCkKICAgICAgICAgaWYgcmVzcFs6M10gbm90IGluIHsnNDI2JywgJzIyNScsICcyMjYnfToKQEAgLTMwMCw3ICszMDgsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGFmLCBzb2NrdHlwZSwgcHJvdG8pCiAgICAgICAgICAgICAgICAgc29jay5iaW5kKHNhKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBfOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgXzoKICAgICAgICAgICAgICAgICBlcnIgPSBfCiAgICAgICAgICAgICAgICAgaWYgc29jazoKICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCkBAIC0zMTEsOCArMzE5LDggQEAKICAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBlcnIKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKCJnZXRhZGRyaW5mbyByZXR1cm5zIGFuIGVtcHR5IGxpc3QiKQotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKG1zZykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJnZXRhZGRyaW5mbyByZXR1cm5zIGFuIGVtcHR5IGxpc3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihtc2cpCiAgICAgICAgIHNvY2subGlzdGVuKDEpCiAgICAgICAgIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0gIyBHZXQgcHJvcGVyIHBvcnQKICAgICAgICAgaG9zdCA9IHNlbGYuc29jay5nZXRzb2NrbmFtZSgpWzBdICMgR2V0IHByb3BlciBob3N0CkBAIC0zOTIsOSArNDAwLDEyIEBACiAKICAgICBkZWYgbG9naW4oc2VsZiwgdXNlciA9ICcnLCBwYXNzd2QgPSAnJywgYWNjdCA9ICcnKToKICAgICAgICAgJycnTG9naW4sIGRlZmF1bHQgYW5vbnltb3VzLicnJwotICAgICAgICBpZiBub3QgdXNlcjogdXNlciA9ICdhbm9ueW1vdXMnCi0gICAgICAgIGlmIG5vdCBwYXNzd2Q6IHBhc3N3ZCA9ICcnCi0gICAgICAgIGlmIG5vdCBhY2N0OiBhY2N0ID0gJycKKyAgICAgICAgaWYgbm90IHVzZXI6CisgICAgICAgICAgICB1c2VyID0gJ2Fub255bW91cycKKyAgICAgICAgaWYgbm90IHBhc3N3ZDoKKyAgICAgICAgICAgIHBhc3N3ZCA9ICcnCisgICAgICAgIGlmIG5vdCBhY2N0OgorICAgICAgICAgICAgYWNjdCA9ICcnCiAgICAgICAgIGlmIHVzZXIgPT0gJ2Fub255bW91cycgYW5kIHBhc3N3ZCBpbiB7JycsICctJ306CiAgICAgICAgICAgICAjIElmIHRoZXJlIGlzIG5vIGFub255bW91cyBmdHAgcGFzc3dvcmQgc3BlY2lmaWVkCiAgICAgICAgICAgICAjIHRoZW4gd2UnbGwganVzdCB1c2UgYW5vbnltb3VzQApAQCAtNDA1LDggKzQxNiwxMCBAQAogICAgICAgICAgICAgIyAgIGhvc3Qgb3IgY291bnRyeS4KICAgICAgICAgICAgIHBhc3N3ZCA9IHBhc3N3ZCArICdhbm9ueW1vdXNAJwogICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdVU0VSICcgKyB1c2VyKQotICAgICAgICBpZiByZXNwWzBdID09ICczJzogcmVzcCA9IHNlbGYuc2VuZGNtZCgnUEFTUyAnICsgcGFzc3dkKQotICAgICAgICBpZiByZXNwWzBdID09ICczJzogcmVzcCA9IHNlbGYuc2VuZGNtZCgnQUNDVCAnICsgYWNjdCkKKyAgICAgICAgaWYgcmVzcFswXSA9PSAnMyc6CisgICAgICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdQQVNTICcgKyBwYXNzd2QpCisgICAgICAgIGlmIHJlc3BbMF0gPT0gJzMnOgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnQUNDVCAnICsgYWNjdCkKICAgICAgICAgaWYgcmVzcFswXSAhPSAnMic6CiAgICAgICAgICAgICByYWlzZSBlcnJvcl9yZXBseShyZXNwKQogICAgICAgICByZXR1cm4gcmVzcApAQCAtNDMyLDYgKzQ0NSw5IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSkKKyAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICBpZiBfU1NMU29ja2V0IGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGNvbm4sIF9TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIHJldHJsaW5lcyhzZWxmLCBjbWQsIGNhbGxiYWNrID0gTm9uZSk6CkBAIC00NDYsNyArNDYyLDggQEAKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICBUaGUgcmVzcG9uc2UgY29kZS4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIGNhbGxiYWNrIGlzIE5vbmU6IGNhbGxiYWNrID0gcHJpbnRfbGluZQorICAgICAgICBpZiBjYWxsYmFjayBpcyBOb25lOgorICAgICAgICAgICAgY2FsbGJhY2sgPSBwcmludF9saW5lCiAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1RZUEUgQScpCiAgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQpIGFzIGNvbm4sIFwKICAgICAgICAgICAgICAgICAgY29ubi5tYWtlZmlsZSgncicsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpIGFzIGZwOgpAQCAtNDU0LDcgKzQ3MSw4IEBACiAgICAgICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKHNlbGYubWF4bGluZSArIDEpCiAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gc2VsZi5tYXhsaW5lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFcnJvcigiZ290IG1vcmUgdGhhbiAlZCBieXRlcyIgJSBzZWxmLm1heGxpbmUpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAyOiBwcmludCgnKnJldHIqJywgcmVwcihsaW5lKSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDI6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCcqcmV0cionLCByZXByKGxpbmUpKQogICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgpAQCAtNDYyLDYgKzQ4MCw5IEBACiAgICAgICAgICAgICAgICAgZWxpZiBsaW5lWy0xOl0gPT0gJ1xuJzoKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQogICAgICAgICAgICAgICAgIGNhbGxiYWNrKGxpbmUpCisgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgaWYgX1NTTFNvY2tldCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShjb25uLCBfU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCiAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKIAogICAgIGRlZiBzdG9yYmluYXJ5KHNlbGYsIGNtZCwgZnAsIGJsb2Nrc2l6ZT04MTkyLCBjYWxsYmFjaz1Ob25lLCByZXN0PU5vbmUpOgpAQCAtNDgzLDkgKzUwNCwxNCBAQAogICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KSBhcyBjb25uOgogICAgICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkKGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhaworICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOgorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhidWYpCisgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgaWYgX1NTTFNvY2tldCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShjb25uLCBfU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCiAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKIAogICAgIGRlZiBzdG9ybGluZXMoc2VsZiwgY21kLCBmcCwgY2FsbGJhY2s9Tm9uZSk6CkBAIC01MDYsMTIgKzUzMiwxNyBAQAogICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWRsaW5lKHNlbGYubWF4bGluZSArIDEpCiAgICAgICAgICAgICAgICAgaWYgbGVuKGJ1ZikgPiBzZWxmLm1heGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKLSAgICAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhaworICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgaWYgYnVmWy0yOl0gIT0gQl9DUkxGOgogICAgICAgICAgICAgICAgICAgICBpZiBidWZbLTFdIGluIEJfQ1JMRjogYnVmID0gYnVmWzotMV0KICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmICsgQl9DUkxGCiAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOgorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhidWYpCisgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgaWYgX1NTTFNvY2tldCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShjb25uLCBfU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCiAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKIAogICAgIGRlZiBhY2N0KHNlbGYsIHBhc3N3b3JkKToKQEAgLTY0Niw4ICs2NzcsMTAgQEAKIHRyeToKICAgICBpbXBvcnQgc3NsCiBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcworICAgIF9TU0xTb2NrZXQgPSBOb25lCiBlbHNlOgorICAgIF9TU0xTb2NrZXQgPSBzc2wuU1NMU29ja2V0CisKICAgICBjbGFzcyBGVFBfVExTKEZUUCk6CiAgICAgICAgICcnJ0EgRlRQIHN1YmNsYXNzIHdoaWNoIGFkZHMgVExTIHN1cHBvcnQgdG8gRlRQIGFzIGRlc2NyaWJlZAogICAgICAgICBpbiBSRkMtNDIxNy4KQEAgLTY5NCw2ICs3MjcsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNsdXNpdmUiKQogICAgICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHNlbGYuc3NsX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUpCiAgICAgICAgICAgICBzZWxmLmNvbnRleHQgPSBjb250ZXh0CiAgICAgICAgICAgICBzZWxmLl9wcm90X3AgPSBGYWxzZQogICAgICAgICAgICAgRlRQLl9faW5pdF9fKHNlbGYsIGhvc3QsIHVzZXIsIHBhc3N3ZCwgYWNjdCwgdGltZW91dCwgc291cmNlX2FkZHJlc3MpCkBAIC03MTEsMTIgKzc0OCw5IEBACiAgICAgICAgICAgICAgICAgcmVzcCA9IHNlbGYudm9pZGNtZCgnQVVUSCBUTFMnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXNwID0gc2VsZi52b2lkY21kKCdBVVRIIFNTTCcpCi0gICAgICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29jaywgc2VsZi5rZXlmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zZWxmLnNzbF92ZXJzaW9uKQorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gc2VsZi5ob3N0IGlmIHNzbC5IQVNfU05JIGVsc2UgTm9uZQorICAgICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQogICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKG1vZGU9J3InLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQogICAgICAgICAgICAgcmV0dXJuIHJlc3AKIApAQCAtNzU1LDgwICs3ODksMTEgQEAKICAgICAgICAgZGVmIG50cmFuc2ZlcmNtZChzZWxmLCBjbWQsIHJlc3Q9Tm9uZSk6CiAgICAgICAgICAgICBjb25uLCBzaXplID0gRlRQLm50cmFuc2ZlcmNtZChzZWxmLCBjbWQsIHJlc3QpCiAgICAgICAgICAgICBpZiBzZWxmLl9wcm90X3A6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBjb25uID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KGNvbm4pCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgY29ubiA9IHNzbC53cmFwX3NvY2tldChjb25uLCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zc2xfdmVyc2lvbikKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgICAgICAgICAgY29ubiA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKICAgICAgICAgICAgIHJldHVybiBjb25uLCBzaXplCiAKLSAgICAgICAgZGVmIHJldHJiaW5hcnkoc2VsZiwgY21kLCBjYWxsYmFjaywgYmxvY2tzaXplPTgxOTIsIHJlc3Q9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1RZUEUgSScpCi0gICAgICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KSBhcyBjb25uOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjb25uLnJlY3YoYmxvY2tzaXplKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpCi0gICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgotICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCi0KLSAgICAgICAgZGVmIHJldHJsaW5lcyhzZWxmLCBjbWQsIGNhbGxiYWNrID0gTm9uZSk6Ci0gICAgICAgICAgICBpZiBjYWxsYmFjayBpcyBOb25lOiBjYWxsYmFjayA9IHByaW50X2xpbmUKLSAgICAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1RZUEUgQScpCi0gICAgICAgICAgICBjb25uID0gc2VsZi50cmFuc2ZlcmNtZChjbWQpCi0gICAgICAgICAgICBmcCA9IGNvbm4ubWFrZWZpbGUoJ3InLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQotICAgICAgICAgICAgd2l0aCBmcCwgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gc2VsZi5tYXhsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDI6IHByaW50KCcqcmV0cionLCByZXByKGxpbmUpKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQotICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmVbLTE6XSA9PSAnXG4nOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhsaW5lKQotICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKLSAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQotCi0gICAgICAgIGRlZiBzdG9yYmluYXJ5KHNlbGYsIGNtZCwgZnAsIGJsb2Nrc2l6ZT04MTkyLCBjYWxsYmFjaz1Ob25lLCByZXN0PU5vbmUpOgotICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQotICAgICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkgYXMgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkKGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQotICAgICAgICBkZWYgc3RvcmxpbmVzKHNlbGYsIGNtZCwgZnAsIGNhbGxiYWNrPU5vbmUpOgotICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEEnKQotICAgICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCkgYXMgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYnVmKSA+IHNlbGYubWF4bGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0yOl0gIT0gQl9DUkxGOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0xXSBpbiBCX0NSTEY6IGJ1ZiA9IGJ1Zls6LTFdCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYgKyBCX0NSTEYKLSAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQogICAgICAgICBkZWYgYWJvcnQoc2VsZik6CiAgICAgICAgICAgICAjIG92ZXJyaWRkZW4gYXMgd2UgY2FuJ3QgcGFzcyBNU0dfT09CIGZsYWcgdG8gc2VuZGFsbCgpCiAgICAgICAgICAgICBsaW5lID0gYidBQk9SJyArIEJfQ1JMRgpAQCAtODM5LDcgKzgwNCw3IEBACiAgICAgICAgICAgICByZXR1cm4gcmVzcAogCiAgICAgX19hbGxfXy5hcHBlbmQoJ0ZUUF9UTFMnKQotICAgIGFsbF9lcnJvcnMgPSAoRXJyb3IsIElPRXJyb3IsIEVPRkVycm9yLCBzc2wuU1NMRXJyb3IpCisgICAgYWxsX2Vycm9ycyA9IChFcnJvciwgT1NFcnJvciwgRU9GRXJyb3IsIHNzbC5TU0xFcnJvcikKIAogCiBfMTUwX3JlID0gTm9uZQpAQCAtOTM2LDcgKzkwMSw4IEBACiAKIGRlZiBmdHBjcChzb3VyY2UsIHNvdXJjZW5hbWUsIHRhcmdldCwgdGFyZ2V0bmFtZSA9ICcnLCB0eXBlID0gJ0knKToKICAgICAnJydDb3B5IGZpbGUgZnJvbSBvbmUgRlRQLWluc3RhbmNlIHRvIGFub3RoZXIuJycnCi0gICAgaWYgbm90IHRhcmdldG5hbWU6IHRhcmdldG5hbWUgPSBzb3VyY2VuYW1lCisgICAgaWYgbm90IHRhcmdldG5hbWU6CisgICAgICAgIHRhcmdldG5hbWUgPSBzb3VyY2VuYW1lCiAgICAgdHlwZSA9ICdUWVBFICcgKyB0eXBlCiAgICAgc291cmNlLnZvaWRjbWQodHlwZSkKICAgICB0YXJnZXQudm9pZGNtZCh0eXBlKQpAQCAtOTQ2LDkgKzkxMiwxMSBAQAogICAgICMgdHJhbnNmZXIgcmVxdWVzdC4KICAgICAjIFNvOiBTVE9SIGJlZm9yZSBSRVRSLCBiZWNhdXNlIGhlcmUgdGhlIHRhcmdldCBpcyBhICJ1c2VyIi4KICAgICB0cmVwbHkgPSB0YXJnZXQuc2VuZGNtZCgnU1RPUiAnICsgdGFyZ2V0bmFtZSkKLSAgICBpZiB0cmVwbHlbOjNdIG5vdCBpbiB7JzEyNScsICcxNTAnfTogcmFpc2UgZXJyb3JfcHJvdG8gICMgUkZDIDk1OQorICAgIGlmIHRyZXBseVs6M10gbm90IGluIHsnMTI1JywgJzE1MCd9OgorICAgICAgICByYWlzZSBlcnJvcl9wcm90byAgIyBSRkMgOTU5CiAgICAgc3JlcGx5ID0gc291cmNlLnNlbmRjbWQoJ1JFVFIgJyArIHNvdXJjZW5hbWUpCi0gICAgaWYgc3JlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306IHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKKyAgICBpZiBzcmVwbHlbOjNdIG5vdCBpbiB7JzEyNScsICcxNTAnfToKKyAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8gICMgUkZDIDk1OQogICAgIHNvdXJjZS52b2lkcmVzcCgpCiAgICAgdGFyZ2V0LnZvaWRyZXNwKCkKIApAQCAtOTY2LDE5ICs5MzQsMjIgQEAKICAgICBfX2RlZmFjY3QgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWU9Tm9uZSk6CisgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZCwgdXNlIHRoZSBuZXRyYyBtb2R1bGUgaW5zdGVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBpZiBmaWxlbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgaWYgIkhPTUUiIGluIG9zLmVudmlyb246CiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsiSE9NRSJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIubmV0cmMiKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJzcGVjaWZ5IGZpbGUgdG8gbG9hZCBvciBzZXQgJEhPTUUiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInNwZWNpZnkgZmlsZSB0byBsb2FkIG9yIHNldCAkSE9NRSIpCiAgICAgICAgIHNlbGYuX19ob3N0cyA9IHt9CiAgICAgICAgIHNlbGYuX19tYWNyb3MgPSB7fQogICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICJyIikKICAgICAgICAgaW5fbWFjcm8gPSAwCiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6IGJyZWFrCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgaWYgaW5fbWFjcm8gYW5kIGxpbmUuc3RyaXAoKToKICAgICAgICAgICAgICAgICBtYWNyb19saW5lcy5hcHBlbmQobGluZSkKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtMTA4Nyw3ICsxMDU4LDcgQEAKICAgICB1c2VyaWQgPSBwYXNzd2QgPSBhY2N0ID0gJycKICAgICB0cnk6CiAgICAgICAgIG5ldHJjID0gTmV0cmMocmNmaWxlKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiByY2ZpbGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDb3VsZCBub3Qgb3BlbiBhY2NvdW50IGZpbGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLS0gdXNpbmcgYW5vbnltb3VzIGxvZ2luLiIpCmRpZmYgLS1naXQgYS9MaWIvZnVuY3Rvb2xzLnB5IGIvTGliL2Z1bmN0b29scy5weQppbmRleCAwNTNlNDRlLi4yYjc3Zjc4IDEwMDY0NAotLS0gYS9MaWIvZnVuY3Rvb2xzLnB5CisrKyBiL0xpYi9mdW5jdG9vbHMucHkKQEAgLTMsMTYgKzMsMjQgQEAKICMgUHl0aG9uIG1vZHVsZSB3cmFwcGVyIGZvciBfZnVuY3Rvb2xzIEMgbW9kdWxlCiAjIHRvIGFsbG93IHV0aWxpdGllcyB3cml0dGVuIGluIFB5dGhvbiB0byBiZSBhZGRlZAogIyB0byB0aGUgZnVuY3Rvb2xzIG1vZHVsZS4KLSMgV3JpdHRlbiBieSBOaWNrIENvZ2hsYW4gPG5jb2dobGFuIGF0IGdtYWlsLmNvbT4KLSMgYW5kIFJheW1vbmQgSGV0dGluZ2VyIDxweXRob24gYXQgcmNuLmNvbT4KLSMgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KKyMgV3JpdHRlbiBieSBOaWNrIENvZ2hsYW4gPG5jb2dobGFuIGF0IGdtYWlsLmNvbT4sCisjIFJheW1vbmQgSGV0dGluZ2VyIDxweXRob24gYXQgcmNuLmNvbT4sCisjIGFuZCDFgXVrYXN6IExhbmdhIDxsdWthc3ogYXQgbGFuZ2EucGw+LgorIyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogIyBTZWUgQyBzb3VyY2UgY29kZSBmb3IgX2Z1bmN0b29scyBjcmVkaXRzL2NvcHlyaWdodAogCiBfX2FsbF9fID0gWyd1cGRhdGVfd3JhcHBlcicsICd3cmFwcycsICdXUkFQUEVSX0FTU0lHTk1FTlRTJywgJ1dSQVBQRVJfVVBEQVRFUycsCi0gICAgICAgICAgICd0b3RhbF9vcmRlcmluZycsICdjbXBfdG9fa2V5JywgJ2xydV9jYWNoZScsICdyZWR1Y2UnLCAncGFydGlhbCddCisgICAgICAgICAgICd0b3RhbF9vcmRlcmluZycsICdjbXBfdG9fa2V5JywgJ2xydV9jYWNoZScsICdyZWR1Y2UnLCAncGFydGlhbCcsCisgICAgICAgICAgICdwYXJ0aWFsbWV0aG9kJywgJ3NpbmdsZWRpc3BhdGNoJ10KIAotZnJvbSBfZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsLCByZWR1Y2UKK3RyeToKKyAgICBmcm9tIF9mdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2Zyb20gYWJjIGltcG9ydCBnZXRfY2FjaGVfdG9rZW4KIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKK2Zyb20gdHlwZXMgaW1wb3J0IE1hcHBpbmdQcm94eVR5cGUsIE1ldGhvZFR5cGUKK2Zyb20gd2Vha3JlZiBpbXBvcnQgV2Vha0tleURpY3Rpb25hcnkKIHRyeToKICAgICBmcm9tIF90aHJlYWQgaW1wb3J0IFJMb2NrCiBleGNlcHQ6CkBAIC00Nyw3ICs1NSw2IEBACiAgICAgICAgYXJlIHVwZGF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgZnJvbSB0aGUgd3JhcHBlZAogICAgICAgIGZ1bmN0aW9uIChkZWZhdWx0cyB0byBmdW5jdG9vbHMuV1JBUFBFUl9VUERBVEVTKQogICAgICIiIgotICAgIHdyYXBwZXIuX193cmFwcGVkX18gPSB3cmFwcGVkCiAgICAgZm9yIGF0dHIgaW4gYXNzaWduZWQ6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cih3cmFwcGVkLCBhdHRyKQpAQCAtNTcsNiArNjQsOSBAQAogICAgICAgICAgICAgc2V0YXR0cih3cmFwcGVyLCBhdHRyLCB2YWx1ZSkKICAgICBmb3IgYXR0ciBpbiB1cGRhdGVkOgogICAgICAgICBnZXRhdHRyKHdyYXBwZXIsIGF0dHIpLnVwZGF0ZShnZXRhdHRyKHdyYXBwZWQsIGF0dHIsIHt9KSkKKyAgICAjIElzc3VlICMxNzQ4Mjogc2V0IF9fd3JhcHBlZF9fIGxhc3Qgc28gd2UgZG9uJ3QgaW5hZHZlcnRlbnRseSBjb3B5IGl0CisgICAgIyBmcm9tIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHdoZW4gdXBkYXRpbmcgX19kaWN0X18KKyAgICB3cmFwcGVyLl9fd3JhcHBlZF9fID0gd3JhcHBlZAogICAgICMgUmV0dXJuIHRoZSB3cmFwcGVyIHNvIHRoaXMgY2FuIGJlIHVzZWQgYXMgYSBkZWNvcmF0b3IgdmlhIHBhcnRpYWwoKQogICAgIHJldHVybiB3cmFwcGVyCiAKQEAgLTc5LDIxICs4OSw5MSBAQAogIyMjIHRvdGFsX29yZGVyaW5nIGNsYXNzIGRlY29yYXRvcgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAorIyBUaGUgY29ycmVjdCB3YXkgdG8gaW5kaWNhdGUgdGhhdCBhIGNvbXBhcmlzb24gb3BlcmF0aW9uIGRvZXNuJ3QKKyMgcmVjb2duaXNlIHRoZSBvdGhlciB0eXBlIGlzIHRvIHJldHVybiBOb3RJbXBsZW1lbnRlZCBhbmQgbGV0IHRoZQorIyBpbnRlcnByZXRlciBoYW5kbGUgcmFpc2luZyBUeXBlRXJyb3IgaWYgYm90aCBvcGVyYW5kcyByZXR1cm4KKyMgTm90SW1wbGVtZW50ZWQgZnJvbSB0aGVpciByZXNwZWN0aXZlIGNvbXBhcmlzb24gbWV0aG9kcworIworIyBUaGlzIG1ha2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0b3RhbF9vcmRlcmluZyBtb3JlIGNvbXBsaWNhdGVkLCBzaW5jZQorIyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIHRyaWdnZXIgaW5maW5pdGUgcmVjdXJzaW9uIHdoZW4gdHdvCisjIGRpZmZlcmVudCB0eXBlcyB0aGF0IGJvdGggdXNlIHRoaXMgZGVjb3JhdG9yIGVuY291bnRlciBlYWNoIG90aGVyLgorIworIyBGb3IgZXhhbXBsZSwgaWYgYSB0eXBlIGltcGxlbWVudHMgX19sdF9fLCBpdCdzIG5hdHVyYWwgdG8gZGVmaW5lCisjIF9fZ3RfXyBhcyBzb21ldGhpbmcgbGlrZToKKyMKKyMgICAgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA8IG90aGVyIGFuZCBub3Qgc2VsZiA9PSBvdGhlcgorIworIyBIb3dldmVyLCB1c2luZyB0aGUgb3BlcmF0b3Igc3ludGF4IGxpa2UgdGhhdCBlbmRzIHVwIGludm9raW5nIHRoZSBmdWxsCisjIHR5cGUgY2hlY2tpbmcgbWFjaGluZXJ5IGFnYWluIGFuZCBtZWFucyB3ZSBjYW4gZW5kIHVwIGJvdW5jaW5nIGJhY2sgYW5kCisjIGZvcnRoIGJldHdlZW4gdGhlIHR3byBvcGVyYW5kcyB1bnRpbCB3ZSBydW4gb3V0IG9mIHN0YWNrIHNwYWNlLgorIworIyBUaGUgc29sdXRpb24gaXMgdG8gZGVmaW5lIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBpbnZva2UgdGhlIGFwcHJvcHJpYXRlCisjIG1hZ2ljIG1ldGhvZHMgZGlyZWN0bHksIGVuc3VyaW5nIHdlIG9ubHkgdHJ5IGVhY2ggb3BlcmFuZCBvbmNlLCBhbmQKKyMgcmV0dXJuIE5vdEltcGxlbWVudGVkIGltbWVkaWF0ZWx5IGlmIGl0IGlzIHJldHVybmVkIGZyb20gdGhlCisjIHVuZGVybHlpbmcgdXNlciBwcm92aWRlZCBtZXRob2QuIFVzaW5nIHRoaXMgc2NoZW1lLCB0aGUgX19ndF9fIGRlcml2ZWQKKyMgZnJvbSBhIHVzZXIgcHJvdmlkZWQgX19sdF9fIGJlY29tZXM6CisjCisjICAgIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcF9hbmRfbm90X2VxKHNlbGYuX19sdF9fLCBzZWxmLCBvdGhlcikpCisKK2RlZiBfbm90X29wKG9wLCBvdGhlcik6CisgICAgIyAibm90IGEgPCBiIiBoYW5kbGVzICJhID49IGIiCisgICAgIyAibm90IGEgPD0gYiIgaGFuZGxlcyAiYSA+IGIiCisgICAgIyAibm90IGEgPj0gYiIgaGFuZGxlcyAiYSA8IGIiCisgICAgIyAibm90IGEgPiBiIiBoYW5kbGVzICJhIDw9IGIiCisgICAgb3BfcmVzdWx0ID0gb3Aob3RoZXIpCisgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICByZXR1cm4gbm90IG9wX3Jlc3VsdAorCitkZWYgX29wX29yX2VxKG9wLCBzZWxmLCBvdGhlcik6CisgICAgIyAiYSA8IGIgb3IgYSA9PSBiIiBoYW5kbGVzICJhIDw9IGIiCisgICAgIyAiYSA+IGIgb3IgYSA9PSBiIiBoYW5kbGVzICJhID49IGIiCisgICAgb3BfcmVzdWx0ID0gb3Aob3RoZXIpCisgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICByZXR1cm4gb3BfcmVzdWx0IG9yIHNlbGYgPT0gb3RoZXIKKworZGVmIF9ub3Rfb3BfYW5kX25vdF9lcShvcCwgc2VsZiwgb3RoZXIpOgorICAgICMgIm5vdCAoYSA8IGIgb3IgYSA9PSBiKSIgaGFuZGxlcyAiYSA+IGIiCisgICAgIyAibm90IGEgPCBiIGFuZCBhICE9IGIiIGlzIGVxdWl2YWxlbnQKKyAgICAjICJub3QgKGEgPiBiIG9yIGEgPT0gYikiIGhhbmRsZXMgImEgPCBiIgorICAgICMgIm5vdCBhID4gYiBhbmQgYSAhPSBiIiBpcyBlcXVpdmFsZW50CisgICAgb3BfcmVzdWx0ID0gb3Aob3RoZXIpCisgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICByZXR1cm4gbm90IG9wX3Jlc3VsdCBhbmQgc2VsZiAhPSBvdGhlcgorCitkZWYgX25vdF9vcF9vcl9lcShvcCwgc2VsZiwgb3RoZXIpOgorICAgICMgIm5vdCBhIDw9IGIgb3IgYSA9PSBiIiBoYW5kbGVzICJhID49IGIiCisgICAgIyAibm90IGEgPj0gYiBvciBhID09IGIiIGhhbmRsZXMgImEgPD0gYiIKKyAgICBvcF9yZXN1bHQgPSBvcChvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0IG9yIHNlbGYgPT0gb3RoZXIKKworZGVmIF9vcF9hbmRfbm90X2VxKG9wLCBzZWxmLCBvdGhlcik6CisgICAgIyAiYSA8PSBiIGFuZCBub3QgYSA9PSBiIiBoYW5kbGVzICJhIDwgYiIKKyAgICAjICJhID49IGIgYW5kIG5vdCBhID09IGIiIGhhbmRsZXMgImEgPiBiIgorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG9wX3Jlc3VsdCBhbmQgc2VsZiAhPSBvdGhlcgorCiBkZWYgdG90YWxfb3JkZXJpbmcoY2xzKToKICAgICAiIiJDbGFzcyBkZWNvcmF0b3IgdGhhdCBmaWxscyBpbiBtaXNzaW5nIG9yZGVyaW5nIG1ldGhvZHMiIiIKICAgICBjb252ZXJ0ID0gewotICAgICAgICAnX19sdF9fJzogWygnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3QgKHNlbGYgPCBvdGhlciBvciBzZWxmID09IG90aGVyKSksCi0gICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IHNlbGYgPCBvdGhlciBvciBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPCBvdGhlcildLAotICAgICAgICAnX19sZV9fJzogWygnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA8PSBvdGhlciBvciBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogc2VsZiA8PSBvdGhlciBhbmQgbm90IHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA8PSBvdGhlcildLAotICAgICAgICAnX19ndF9fJzogWygnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3QgKHNlbGYgPiBvdGhlciBvciBzZWxmID09IG90aGVyKSksCi0gICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IHNlbGYgPiBvdGhlciBvciBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPiBvdGhlcildLAotICAgICAgICAnX19nZV9fJzogWygnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiAobm90IHNlbGYgPj0gb3RoZXIpIG9yIHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmID49IG90aGVyIGFuZCBub3Qgc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmID49IG90aGVyKV0KKyAgICAgICAgJ19fbHRfXyc6IFsoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcF9hbmRfbm90X2VxKHNlbGYuX19sdF9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfb3Bfb3JfZXEoc2VsZi5fX2x0X18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Aoc2VsZi5fX2x0X18sIG90aGVyKSldLAorICAgICAgICAnX19sZV9fJzogWygnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wX29yX2VxKHNlbGYuX19sZV9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfb3BfYW5kX25vdF9lcShzZWxmLl9fbGVfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcChzZWxmLl9fbGVfXywgb3RoZXIpKV0sCisgICAgICAgICdfX2d0X18nOiBbKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3BfYW5kX25vdF9lcShzZWxmLl9fZ3RfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX29wX29yX2VxKHNlbGYuX19ndF9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wKHNlbGYuX19ndF9fLCBvdGhlcikpXSwKKyAgICAgICAgJ19fZ2VfXyc6IFsoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcF9vcl9lcShzZWxmLl9fZ2VfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX29wX2FuZF9ub3RfZXEoc2VsZi5fX2dlX18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Aoc2VsZi5fX2dlX18sIG90aGVyKSldCiAgICAgfQogICAgICMgRmluZCB1c2VyLWRlZmluZWQgY29tcGFyaXNvbnMgKG5vdCB0aG9zZSBpbmhlcml0ZWQgZnJvbSBvYmplY3QpLgogICAgIHJvb3RzID0gW29wIGZvciBvcCBpbiBjb252ZXJ0IGlmIGdldGF0dHIoY2xzLCBvcCwgTm9uZSkgaXMgbm90IGdldGF0dHIob2JqZWN0LCBvcCwgTm9uZSldCkBAIC0xNDAsNiArMjIwLDEwNCBAQAogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgcGFydGlhbCgpIGFyZ3VtZW50IGFwcGxpY2F0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFB1cmVseSBmdW5jdGlvbmFsLCBubyBkZXNjcmlwdG9yIGJlaGF2aW91cgorZGVmIHBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgorICAgICIiIk5ldyBmdW5jdGlvbiB3aXRoIHBhcnRpYWwgYXBwbGljYXRpb24gb2YgdGhlIGdpdmVuIGFyZ3VtZW50cworICAgIGFuZCBrZXl3b3Jkcy4KKyAgICAiIiIKKyAgICBkZWYgbmV3ZnVuYygqZmFyZ3MsICoqZmtleXdvcmRzKToKKyAgICAgICAgbmV3a2V5d29yZHMgPSBrZXl3b3Jkcy5jb3B5KCkKKyAgICAgICAgbmV3a2V5d29yZHMudXBkYXRlKGZrZXl3b3JkcykKKyAgICAgICAgcmV0dXJuIGZ1bmMoKihhcmdzICsgZmFyZ3MpLCAqKm5ld2tleXdvcmRzKQorICAgIG5ld2Z1bmMuZnVuYyA9IGZ1bmMKKyAgICBuZXdmdW5jLmFyZ3MgPSBhcmdzCisgICAgbmV3ZnVuYy5rZXl3b3JkcyA9IGtleXdvcmRzCisgICAgcmV0dXJuIG5ld2Z1bmMKKwordHJ5OgorICAgIGZyb20gX2Z1bmN0b29scyBpbXBvcnQgcGFydGlhbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKworIyBEZXNjcmlwdG9yIHZlcnNpb24KK2NsYXNzIHBhcnRpYWxtZXRob2Qob2JqZWN0KToKKyAgICAiIiJNZXRob2QgZGVzY3JpcHRvciB3aXRoIHBhcnRpYWwgYXBwbGljYXRpb24gb2YgdGhlIGdpdmVuIGFyZ3VtZW50cworICAgIGFuZCBrZXl3b3Jkcy4KKworICAgIFN1cHBvcnRzIHdyYXBwaW5nIGV4aXN0aW5nIGRlc2NyaXB0b3JzIGFuZCBoYW5kbGVzIG5vbi1kZXNjcmlwdG9yCisgICAgY2FsbGFibGVzIGFzIGluc3RhbmNlIG1ldGhvZHMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgorICAgICAgICBpZiBub3QgY2FsbGFibGUoZnVuYykgYW5kIG5vdCBoYXNhdHRyKGZ1bmMsICJfX2dldF9fIik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInshcn0gaXMgbm90IGNhbGxhYmxlIG9yIGEgZGVzY3JpcHRvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoZnVuYykpCisKKyAgICAgICAgIyBmdW5jIGNvdWxkIGJlIGEgZGVzY3JpcHRvciBsaWtlIGNsYXNzbWV0aG9kIHdoaWNoIGlzbid0IGNhbGxhYmxlLAorICAgICAgICAjIHNvIHdlIGNhbid0IGluaGVyaXQgZnJvbSBwYXJ0aWFsIChpdCB2ZXJpZmllcyBmdW5jIGlzIGNhbGxhYmxlKQorICAgICAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHBhcnRpYWxtZXRob2QpOgorICAgICAgICAgICAgIyBmbGF0dGVuaW5nIGlzIG1hbmRhdG9yeSBpbiBvcmRlciB0byBwbGFjZSBjbHMvc2VsZiBiZWZvcmUgYWxsCisgICAgICAgICAgICAjIG90aGVyIGFyZ3VtZW50cworICAgICAgICAgICAgIyBpdCdzIGFsc28gbW9yZSBlZmZpY2llbnQgc2luY2Ugb25seSBvbmUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQKKyAgICAgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMuZnVuYworICAgICAgICAgICAgc2VsZi5hcmdzID0gZnVuYy5hcmdzICsgYXJncworICAgICAgICAgICAgc2VsZi5rZXl3b3JkcyA9IGZ1bmMua2V5d29yZHMuY29weSgpCisgICAgICAgICAgICBzZWxmLmtleXdvcmRzLnVwZGF0ZShrZXl3b3JkcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgICAgIHNlbGYua2V5d29yZHMgPSBrZXl3b3JkcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBhcmdzID0gIiwgIi5qb2luKG1hcChyZXByLCBzZWxmLmFyZ3MpKQorICAgICAgICBrZXl3b3JkcyA9ICIsICIuam9pbigie309eyFyfSIuZm9ybWF0KGssIHYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmtleXdvcmRzLml0ZW1zKCkpCisgICAgICAgIGZvcm1hdF9zdHJpbmcgPSAie21vZHVsZX0ue2Nsc30oe2Z1bmN9LCB7YXJnc30sIHtrZXl3b3Jkc30pIgorICAgICAgICByZXR1cm4gZm9ybWF0X3N0cmluZy5mb3JtYXQobW9kdWxlPXNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM9c2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jPXNlbGYuZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9YXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzPWtleXdvcmRzKQorCisgICAgZGVmIF9tYWtlX3VuYm91bmRfbWV0aG9kKHNlbGYpOgorICAgICAgICBkZWYgX21ldGhvZCgqYXJncywgKiprZXl3b3Jkcyk6CisgICAgICAgICAgICBjYWxsX2tleXdvcmRzID0gc2VsZi5rZXl3b3Jkcy5jb3B5KCkKKyAgICAgICAgICAgIGNhbGxfa2V5d29yZHMudXBkYXRlKGtleXdvcmRzKQorICAgICAgICAgICAgY2xzX29yX3NlbGYsICpyZXN0ID0gYXJncworICAgICAgICAgICAgY2FsbF9hcmdzID0gKGNsc19vcl9zZWxmLCkgKyBzZWxmLmFyZ3MgKyB0dXBsZShyZXN0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnVuYygqY2FsbF9hcmdzLCAqKmNhbGxfa2V5d29yZHMpCisgICAgICAgIF9tZXRob2QuX19pc2Fic3RyYWN0bWV0aG9kX18gPSBzZWxmLl9faXNhYnN0cmFjdG1ldGhvZF9fCisgICAgICAgIF9tZXRob2QuX3BhcnRpYWxtZXRob2QgPSBzZWxmCisgICAgICAgIHJldHVybiBfbWV0aG9kCisKKyAgICBkZWYgX19nZXRfXyhzZWxmLCBvYmosIGNscyk6CisgICAgICAgIGdldCA9IGdldGF0dHIoc2VsZi5mdW5jLCAiX19nZXRfXyIsIE5vbmUpCisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgaWYgZ2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbmV3X2Z1bmMgPSBnZXQob2JqLCBjbHMpCisgICAgICAgICAgICBpZiBuZXdfZnVuYyBpcyBub3Qgc2VsZi5mdW5jOgorICAgICAgICAgICAgICAgICMgQXNzdW1lIF9fZ2V0X18gcmV0dXJuaW5nIHNvbWV0aGluZyBuZXcgaW5kaWNhdGVzIHRoZQorICAgICAgICAgICAgICAgICMgY3JlYXRpb24gb2YgYW4gYXBwcm9wcmlhdGUgY2FsbGFibGUKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJ0aWFsKG5ld19mdW5jLCAqc2VsZi5hcmdzLCAqKnNlbGYua2V5d29yZHMpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuX19zZWxmX18gPSBuZXdfZnVuYy5fX3NlbGZfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgICMgSWYgdGhlIHVuZGVybHlpbmcgZGVzY3JpcHRvciBkaWRuJ3QgZG8gYW55dGhpbmcsIHRyZWF0IHRoaXMKKyAgICAgICAgICAgICMgbGlrZSBhbiBpbnN0YW5jZSBtZXRob2QKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX21ha2VfdW5ib3VuZF9tZXRob2QoKS5fX2dldF9fKG9iaiwgY2xzKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX19pc2Fic3RyYWN0bWV0aG9kX18oc2VsZik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuZnVuYywgIl9faXNhYnN0cmFjdG1ldGhvZF9fIiwgRmFsc2UpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBMUlUgQ2FjaGUgZnVuY3Rpb24gZGVjb3JhdG9yCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0yMjAsNyArMzk4LDYgQEAKICAgICBQUkVWLCBORVhULCBLRVksIFJFU1VMVCA9IDAsIDEsIDIsIDMgICAjIG5hbWVzIGZvciB0aGUgbGluayBmaWVsZHMKIAogICAgIGRlZiBkZWNvcmF0aW5nX2Z1bmN0aW9uKHVzZXJfZnVuY3Rpb24pOgotCiAgICAgICAgIGNhY2hlID0ge30KICAgICAgICAgaGl0cyA9IG1pc3NlcyA9IDAKICAgICAgICAgZnVsbCA9IEZhbHNlCkBAIC0zMjksMyArNTA2LDIxMCBAQAogICAgICAgICByZXR1cm4gdXBkYXRlX3dyYXBwZXIod3JhcHBlciwgdXNlcl9mdW5jdGlvbikKIAogICAgIHJldHVybiBkZWNvcmF0aW5nX2Z1bmN0aW9uCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBzaW5nbGVkaXNwYXRjaCgpIC0gc2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb24gZGVjb3JhdG9yCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgX2MzX21lcmdlKHNlcXVlbmNlcyk6CisgICAgIiIiTWVyZ2VzIE1ST3MgaW4gKnNlcXVlbmNlcyogdG8gYSBzaW5nbGUgTVJPIHVzaW5nIHRoZSBDMyBhbGdvcml0aG0uCisKKyAgICBBZGFwdGVkIGZyb20gaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLgorCisgICAgIiIiCisgICAgcmVzdWx0ID0gW10KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBzZXF1ZW5jZXMgPSBbcyBmb3IgcyBpbiBzZXF1ZW5jZXMgaWYgc10gICAjIHB1cmdlIGVtcHR5IHNlcXVlbmNlcworICAgICAgICBpZiBub3Qgc2VxdWVuY2VzOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBmb3IgczEgaW4gc2VxdWVuY2VzOiAgICMgZmluZCBtZXJnZSBjYW5kaWRhdGVzIGFtb25nIHNlcSBoZWFkcworICAgICAgICAgICAgY2FuZGlkYXRlID0gczFbMF0KKyAgICAgICAgICAgIGZvciBzMiBpbiBzZXF1ZW5jZXM6CisgICAgICAgICAgICAgICAgaWYgY2FuZGlkYXRlIGluIHMyWzE6XToKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBicmVhayAgICAgICMgcmVqZWN0IHRoZSBjdXJyZW50IGhlYWQsIGl0IGFwcGVhcnMgbGF0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGNhbmRpZGF0ZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiSW5jb25zaXN0ZW50IGhpZXJhcmNoeSIpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoY2FuZGlkYXRlKQorICAgICAgICAjIHJlbW92ZSB0aGUgY2hvc2VuIGNhbmRpZGF0ZQorICAgICAgICBmb3Igc2VxIGluIHNlcXVlbmNlczoKKyAgICAgICAgICAgIGlmIHNlcVswXSA9PSBjYW5kaWRhdGU6CisgICAgICAgICAgICAgICAgZGVsIHNlcVswXQorCitkZWYgX2MzX21ybyhjbHMsIGFiY3M9Tm9uZSk6CisgICAgIiIiQ29tcHV0ZXMgdGhlIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyIHVzaW5nIGV4dGVuZGVkIEMzIGxpbmVhcml6YXRpb24uCisKKyAgICBJZiBubyAqYWJjcyogYXJlIGdpdmVuLCB0aGUgYWxnb3JpdGhtIHdvcmtzIGV4YWN0bHkgbGlrZSB0aGUgYnVpbHQtaW4gQzMKKyAgICBsaW5lYXJpemF0aW9uIHVzZWQgZm9yIG1ldGhvZCByZXNvbHV0aW9uLgorCisgICAgSWYgZ2l2ZW4sICphYmNzKiBpcyBhIGxpc3Qgb2YgYWJzdHJhY3QgYmFzZSBjbGFzc2VzIHRoYXQgc2hvdWxkIGJlIGluc2VydGVkCisgICAgaW50byB0aGUgcmVzdWx0aW5nIE1STy4gVW5yZWxhdGVkIEFCQ3MgYXJlIGlnbm9yZWQgYW5kIGRvbid0IGVuZCB1cCBpbiB0aGUKKyAgICByZXN1bHQuIFRoZSBhbGdvcml0aG0gaW5zZXJ0cyBBQkNzIHdoZXJlIHRoZWlyIGZ1bmN0aW9uYWxpdHkgaXMgaW50cm9kdWNlZCwKKyAgICBpLmUuIGlzc3ViY2xhc3MoY2xzLCBhYmMpIHJldHVybnMgVHJ1ZSBmb3IgdGhlIGNsYXNzIGl0c2VsZiBidXQgcmV0dXJucworICAgIEZhbHNlIGZvciBhbGwgaXRzIGRpcmVjdCBiYXNlIGNsYXNzZXMuIEltcGxpY2l0IEFCQ3MgZm9yIGEgZ2l2ZW4gY2xhc3MKKyAgICAoZWl0aGVyIHJlZ2lzdGVyZWQgb3IgaW5mZXJyZWQgZnJvbSB0aGUgcHJlc2VuY2Ugb2YgYSBzcGVjaWFsIG1ldGhvZCBsaWtlCisgICAgX19sZW5fXykgYXJlIGluc2VydGVkIGRpcmVjdGx5IGFmdGVyIHRoZSBsYXN0IEFCQyBleHBsaWNpdGx5IGxpc3RlZCBpbiB0aGUKKyAgICBNUk8gb2Ygc2FpZCBjbGFzcy4gSWYgdHdvIGltcGxpY2l0IEFCQ3MgZW5kIHVwIG5leHQgdG8gZWFjaCBvdGhlciBpbiB0aGUKKyAgICByZXN1bHRpbmcgTVJPLCB0aGVpciBvcmRlcmluZyBkZXBlbmRzIG9uIHRoZSBvcmRlciBvZiB0eXBlcyBpbiAqYWJjcyouCisKKyAgICAiIiIKKyAgICBmb3IgaSwgYmFzZSBpbiBlbnVtZXJhdGUocmV2ZXJzZWQoY2xzLl9fYmFzZXNfXykpOgorICAgICAgICBpZiBoYXNhdHRyKGJhc2UsICdfX2Fic3RyYWN0bWV0aG9kc19fJyk6CisgICAgICAgICAgICBib3VuZGFyeSA9IGxlbihjbHMuX19iYXNlc19fKSAtIGkKKyAgICAgICAgICAgIGJyZWFrICAgIyBCYXNlcyB1cCB0byB0aGUgbGFzdCBleHBsaWNpdCBBQkMgYXJlIGNvbnNpZGVyZWQgZmlyc3QuCisgICAgZWxzZToKKyAgICAgICAgYm91bmRhcnkgPSAwCisgICAgYWJjcyA9IGxpc3QoYWJjcykgaWYgYWJjcyBlbHNlIFtdCisgICAgZXhwbGljaXRfYmFzZXMgPSBsaXN0KGNscy5fX2Jhc2VzX19bOmJvdW5kYXJ5XSkKKyAgICBhYnN0cmFjdF9iYXNlcyA9IFtdCisgICAgb3RoZXJfYmFzZXMgPSBsaXN0KGNscy5fX2Jhc2VzX19bYm91bmRhcnk6XSkKKyAgICBmb3IgYmFzZSBpbiBhYmNzOgorICAgICAgICBpZiBpc3N1YmNsYXNzKGNscywgYmFzZSkgYW5kIG5vdCBhbnkoCisgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhiLCBiYXNlKSBmb3IgYiBpbiBjbHMuX19iYXNlc19fCisgICAgICAgICAgICApOgorICAgICAgICAgICAgIyBJZiAqY2xzKiBpcyB0aGUgY2xhc3MgdGhhdCBpbnRyb2R1Y2VzIGJlaGF2aW91ciBkZXNjcmliZWQgYnkKKyAgICAgICAgICAgICMgYW4gQUJDICpiYXNlKiwgaW5zZXJ0IHNhaWQgQUJDIHRvIGl0cyBNUk8uCisgICAgICAgICAgICBhYnN0cmFjdF9iYXNlcy5hcHBlbmQoYmFzZSkKKyAgICBmb3IgYmFzZSBpbiBhYnN0cmFjdF9iYXNlczoKKyAgICAgICAgYWJjcy5yZW1vdmUoYmFzZSkKKyAgICBleHBsaWNpdF9jM19tcm9zID0gW19jM19tcm8oYmFzZSwgYWJjcz1hYmNzKSBmb3IgYmFzZSBpbiBleHBsaWNpdF9iYXNlc10KKyAgICBhYnN0cmFjdF9jM19tcm9zID0gW19jM19tcm8oYmFzZSwgYWJjcz1hYmNzKSBmb3IgYmFzZSBpbiBhYnN0cmFjdF9iYXNlc10KKyAgICBvdGhlcl9jM19tcm9zID0gW19jM19tcm8oYmFzZSwgYWJjcz1hYmNzKSBmb3IgYmFzZSBpbiBvdGhlcl9iYXNlc10KKyAgICByZXR1cm4gX2MzX21lcmdlKAorICAgICAgICBbW2Nsc11dICsKKyAgICAgICAgZXhwbGljaXRfYzNfbXJvcyArIGFic3RyYWN0X2MzX21yb3MgKyBvdGhlcl9jM19tcm9zICsKKyAgICAgICAgW2V4cGxpY2l0X2Jhc2VzXSArIFthYnN0cmFjdF9iYXNlc10gKyBbb3RoZXJfYmFzZXNdCisgICAgKQorCitkZWYgX2NvbXBvc2VfbXJvKGNscywgdHlwZXMpOgorICAgICIiIkNhbGN1bGF0ZXMgdGhlIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyIGZvciBhIGdpdmVuIGNsYXNzICpjbHMqLgorCisgICAgSW5jbHVkZXMgcmVsZXZhbnQgYWJzdHJhY3QgYmFzZSBjbGFzc2VzICh3aXRoIHRoZWlyIHJlc3BlY3RpdmUgYmFzZXMpIGZyb20KKyAgICB0aGUgKnR5cGVzKiBpdGVyYWJsZS4gVXNlcyBhIG1vZGlmaWVkIEMzIGxpbmVhcml6YXRpb24gYWxnb3JpdGhtLgorCisgICAgIiIiCisgICAgYmFzZXMgPSBzZXQoY2xzLl9fbXJvX18pCisgICAgIyBSZW1vdmUgZW50cmllcyB3aGljaCBhcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBfX21yb19fIG9yIHVucmVsYXRlZC4KKyAgICBkZWYgaXNfcmVsYXRlZCh0eXApOgorICAgICAgICByZXR1cm4gKHR5cCBub3QgaW4gYmFzZXMgYW5kIGhhc2F0dHIodHlwLCAnX19tcm9fXycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaXNzdWJjbGFzcyhjbHMsIHR5cCkpCisgICAgdHlwZXMgPSBbbiBmb3IgbiBpbiB0eXBlcyBpZiBpc19yZWxhdGVkKG4pXQorICAgICMgUmVtb3ZlIGVudHJpZXMgd2hpY2ggYXJlIHN0cmljdCBiYXNlcyBvZiBvdGhlciBlbnRyaWVzICh0aGV5IHdpbGwgZW5kIHVwCisgICAgIyBpbiB0aGUgTVJPIGFueXdheS4KKyAgICBkZWYgaXNfc3RyaWN0X2Jhc2UodHlwKToKKyAgICAgICAgZm9yIG90aGVyIGluIHR5cGVzOgorICAgICAgICAgICAgaWYgdHlwICE9IG90aGVyIGFuZCB0eXAgaW4gb3RoZXIuX19tcm9fXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICB0eXBlcyA9IFtuIGZvciBuIGluIHR5cGVzIGlmIG5vdCBpc19zdHJpY3RfYmFzZShuKV0KKyAgICAjIFN1YmNsYXNzZXMgb2YgdGhlIEFCQ3MgaW4gKnR5cGVzKiB3aGljaCBhcmUgYWxzbyBpbXBsZW1lbnRlZCBieQorICAgICMgKmNscyogY2FuIGJlIHVzZWQgdG8gc3RhYmlsaXplIEFCQyBvcmRlcmluZy4KKyAgICB0eXBlX3NldCA9IHNldCh0eXBlcykKKyAgICBtcm8gPSBbXQorICAgIGZvciB0eXAgaW4gdHlwZXM6CisgICAgICAgIGZvdW5kID0gW10KKyAgICAgICAgZm9yIHN1YiBpbiB0eXAuX19zdWJjbGFzc2VzX18oKToKKyAgICAgICAgICAgIGlmIHN1YiBub3QgaW4gYmFzZXMgYW5kIGlzc3ViY2xhc3MoY2xzLCBzdWIpOgorICAgICAgICAgICAgICAgIGZvdW5kLmFwcGVuZChbcyBmb3IgcyBpbiBzdWIuX19tcm9fXyBpZiBzIGluIHR5cGVfc2V0XSkKKyAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgbXJvLmFwcGVuZCh0eXApCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIEZhdm9yIHN1YmNsYXNzZXMgd2l0aCB0aGUgYmlnZ2VzdCBudW1iZXIgb2YgdXNlZnVsIGJhc2VzCisgICAgICAgIGZvdW5kLnNvcnQoa2V5PWxlbiwgcmV2ZXJzZT1UcnVlKQorICAgICAgICBmb3Igc3ViIGluIGZvdW5kOgorICAgICAgICAgICAgZm9yIHN1YmNscyBpbiBzdWI6CisgICAgICAgICAgICAgICAgaWYgc3ViY2xzIG5vdCBpbiBtcm86CisgICAgICAgICAgICAgICAgICAgIG1yby5hcHBlbmQoc3ViY2xzKQorICAgIHJldHVybiBfYzNfbXJvKGNscywgYWJjcz1tcm8pCisKK2RlZiBfZmluZF9pbXBsKGNscywgcmVnaXN0cnkpOgorICAgICIiIlJldHVybnMgdGhlIGJlc3QgbWF0Y2hpbmcgaW1wbGVtZW50YXRpb24gZnJvbSAqcmVnaXN0cnkqIGZvciB0eXBlICpjbHMqLgorCisgICAgV2hlcmUgdGhlcmUgaXMgbm8gcmVnaXN0ZXJlZCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBzcGVjaWZpYyB0eXBlLCBpdHMgbWV0aG9kCisgICAgcmVzb2x1dGlvbiBvcmRlciBpcyB1c2VkIHRvIGZpbmQgYSBtb3JlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uCisKKyAgICBOb3RlOiBpZiAqcmVnaXN0cnkqIGRvZXMgbm90IGNvbnRhaW4gYW4gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBiYXNlCisgICAgKm9iamVjdCogdHlwZSwgdGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIE5vbmUuCisKKyAgICAiIiIKKyAgICBtcm8gPSBfY29tcG9zZV9tcm8oY2xzLCByZWdpc3RyeS5rZXlzKCkpCisgICAgbWF0Y2ggPSBOb25lCisgICAgZm9yIHQgaW4gbXJvOgorICAgICAgICBpZiBtYXRjaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgSWYgKm1hdGNoKiBpcyBhbiBpbXBsaWNpdCBBQkMgYnV0IHRoZXJlIGlzIGFub3RoZXIgdW5yZWxhdGVkLAorICAgICAgICAgICAgIyBlcXVhbGx5IG1hdGNoaW5nIGltcGxpY2l0IEFCQywgcmVmdXNlIHRoZSB0ZW1wdGF0aW9uIHRvIGd1ZXNzLgorICAgICAgICAgICAgaWYgKHQgaW4gcmVnaXN0cnkgYW5kIHQgbm90IGluIGNscy5fX21yb19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWF0Y2ggbm90IGluIGNscy5fX21yb19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGlzc3ViY2xhc3MobWF0Y2gsIHQpKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkFtYmlndW91cyBkaXNwYXRjaDoge30gb3Ige30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2gsIHQpKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgdCBpbiByZWdpc3RyeToKKyAgICAgICAgICAgIG1hdGNoID0gdAorICAgIHJldHVybiByZWdpc3RyeS5nZXQobWF0Y2gpCisKK2RlZiBzaW5nbGVkaXNwYXRjaChmdW5jKToKKyAgICAiIiJTaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbiBkZWNvcmF0b3IuCisKKyAgICBUcmFuc2Zvcm1zIGEgZnVuY3Rpb24gaW50byBhIGdlbmVyaWMgZnVuY3Rpb24sIHdoaWNoIGNhbiBoYXZlIGRpZmZlcmVudAorICAgIGJlaGF2aW91cnMgZGVwZW5kaW5nIHVwb24gdGhlIHR5cGUgb2YgaXRzIGZpcnN0IGFyZ3VtZW50LiBUaGUgZGVjb3JhdGVkCisgICAgZnVuY3Rpb24gYWN0cyBhcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgYW5kIGFkZGl0aW9uYWwKKyAgICBpbXBsZW1lbnRhdGlvbnMgY2FuIGJlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIHJlZ2lzdGVyKCkgYXR0cmlidXRlIG9mIHRoZQorICAgIGdlbmVyaWMgZnVuY3Rpb24uCisKKyAgICAiIiIKKyAgICByZWdpc3RyeSA9IHt9CisgICAgZGlzcGF0Y2hfY2FjaGUgPSBXZWFrS2V5RGljdGlvbmFyeSgpCisgICAgY2FjaGVfdG9rZW4gPSBOb25lCisKKyAgICBkZWYgZGlzcGF0Y2goY2xzKToKKyAgICAgICAgIiIiZ2VuZXJpY19mdW5jLmRpc3BhdGNoKGNscykgLT4gPGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uPgorCisgICAgICAgIFJ1bnMgdGhlIGRpc3BhdGNoIGFsZ29yaXRobSB0byByZXR1cm4gdGhlIGJlc3QgYXZhaWxhYmxlIGltcGxlbWVudGF0aW9uCisgICAgICAgIGZvciB0aGUgZ2l2ZW4gKmNscyogcmVnaXN0ZXJlZCBvbiAqZ2VuZXJpY19mdW5jKi4KKworICAgICAgICAiIiIKKyAgICAgICAgbm9ubG9jYWwgY2FjaGVfdG9rZW4KKyAgICAgICAgaWYgY2FjaGVfdG9rZW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjdXJyZW50X3Rva2VuID0gZ2V0X2NhY2hlX3Rva2VuKCkKKyAgICAgICAgICAgIGlmIGNhY2hlX3Rva2VuICE9IGN1cnJlbnRfdG9rZW46CisgICAgICAgICAgICAgICAgZGlzcGF0Y2hfY2FjaGUuY2xlYXIoKQorICAgICAgICAgICAgICAgIGNhY2hlX3Rva2VuID0gY3VycmVudF90b2tlbgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBsID0gZGlzcGF0Y2hfY2FjaGVbY2xzXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wbCA9IHJlZ2lzdHJ5W2Nsc10KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBpbXBsID0gX2ZpbmRfaW1wbChjbHMsIHJlZ2lzdHJ5KQorICAgICAgICAgICAgZGlzcGF0Y2hfY2FjaGVbY2xzXSA9IGltcGwKKyAgICAgICAgcmV0dXJuIGltcGwKKworICAgIGRlZiByZWdpc3RlcihjbHMsIGZ1bmM9Tm9uZSk6CisgICAgICAgICIiImdlbmVyaWNfZnVuYy5yZWdpc3RlcihjbHMsIGZ1bmMpIC0+IGZ1bmMKKworICAgICAgICBSZWdpc3RlcnMgYSBuZXcgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBnaXZlbiAqY2xzKiBvbiBhICpnZW5lcmljX2Z1bmMqLgorCisgICAgICAgICIiIgorICAgICAgICBub25sb2NhbCBjYWNoZV90b2tlbgorICAgICAgICBpZiBmdW5jIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gbGFtYmRhIGY6IHJlZ2lzdGVyKGNscywgZikKKyAgICAgICAgcmVnaXN0cnlbY2xzXSA9IGZ1bmMKKyAgICAgICAgaWYgY2FjaGVfdG9rZW4gaXMgTm9uZSBhbmQgaGFzYXR0cihjbHMsICdfX2Fic3RyYWN0bWV0aG9kc19fJyk6CisgICAgICAgICAgICBjYWNoZV90b2tlbiA9IGdldF9jYWNoZV90b2tlbigpCisgICAgICAgIGRpc3BhdGNoX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgcmV0dXJuIGZ1bmMKKworICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3KToKKyAgICAgICAgcmV0dXJuIGRpc3BhdGNoKGFyZ3NbMF0uX19jbGFzc19fKSgqYXJncywgKiprdykKKworICAgIHJlZ2lzdHJ5W29iamVjdF0gPSBmdW5jCisgICAgd3JhcHBlci5yZWdpc3RlciA9IHJlZ2lzdGVyCisgICAgd3JhcHBlci5kaXNwYXRjaCA9IGRpc3BhdGNoCisgICAgd3JhcHBlci5yZWdpc3RyeSA9IE1hcHBpbmdQcm94eVR5cGUocmVnaXN0cnkpCisgICAgd3JhcHBlci5fY2xlYXJfY2FjaGUgPSBkaXNwYXRjaF9jYWNoZS5jbGVhcgorICAgIHVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIGZ1bmMpCisgICAgcmV0dXJuIHdyYXBwZXIKZGlmZiAtLWdpdCBhL0xpYi9nZW5lcmljcGF0aC5weSBiL0xpYi9nZW5lcmljcGF0aC5weQppbmRleCAzNDBjMDA0Li5jYTRhNTEwIDEwMDY0NAotLS0gYS9MaWIvZ2VuZXJpY3BhdGgucHkKKysrIGIvTGliL2dlbmVyaWNwYXRoLnB5CkBAIC03LDcgKzcsOCBAQAogaW1wb3J0IHN0YXQKIAogX19hbGxfXyA9IFsnY29tbW9ucHJlZml4JywgJ2V4aXN0cycsICdnZXRhdGltZScsICdnZXRjdGltZScsICdnZXRtdGltZScsCi0gICAgICAgICAgICdnZXRzaXplJywgJ2lzZGlyJywgJ2lzZmlsZSddCisgICAgICAgICAgICdnZXRzaXplJywgJ2lzZGlyJywgJ2lzZmlsZScsICdzYW1lZmlsZScsICdzYW1lb3BlbmZpbGUnLAorICAgICAgICAgICAnc2FtZXN0YXQnXQogCiAKICMgRG9lcyBhIHBhdGggZXhpc3Q/CkBAIC0xNiw3ICsxNyw3IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIEZhbHNlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKICAgICB0cnk6CiAgICAgICAgIG9zLnN0YXQocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCiAKQEAgLTI3LDcgKzI4LDcgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgcmVndWxhciBmaWxlIiIiCiAgICAgdHJ5OgogICAgICAgICBzdCA9IG9zLnN0YXQocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBzdGF0LlNfSVNSRUcoc3Quc3RfbW9kZSkKIApAQCAtMzksNyArNDAsNyBAQAogICAgICIiIlJldHVybiB0cnVlIGlmIHRoZSBwYXRobmFtZSByZWZlcnMgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LiIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5zdGF0KHMpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gc3RhdC5TX0lTRElSKHN0LnN0X21vZGUpCiAKQEAgLTc1LDYgKzc2LDMxIEBACiAgICAgICAgICAgICByZXR1cm4gczFbOmldCiAgICAgcmV0dXJuIHMxCiAKKyMgQXJlIHR3byBzdGF0IGJ1ZmZlcnMgKG9idGFpbmVkIGZyb20gc3RhdCwgZnN0YXQgb3IgbHN0YXQpCisjIGRlc2NyaWJpbmcgdGhlIHNhbWUgZmlsZT8KK2RlZiBzYW1lc3RhdChzMSwgczIpOgorICAgICIiIlRlc3Qgd2hldGhlciB0d28gc3RhdCBidWZmZXJzIHJlZmVyZW5jZSB0aGUgc2FtZSBmaWxlIiIiCisgICAgcmV0dXJuIChzMS5zdF9pbm8gPT0gczIuc3RfaW5vIGFuZAorICAgICAgICAgICAgczEuc3RfZGV2ID09IHMyLnN0X2RldikKKworCisjIEFyZSB0d28gZmlsZW5hbWVzIHJlYWxseSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlPworZGVmIHNhbWVmaWxlKGYxLCBmMik6CisgICAgIiIiVGVzdCB3aGV0aGVyIHR3byBwYXRobmFtZXMgcmVmZXJlbmNlIHRoZSBzYW1lIGFjdHVhbCBmaWxlIiIiCisgICAgczEgPSBvcy5zdGF0KGYxKQorICAgIHMyID0gb3Muc3RhdChmMikKKyAgICByZXR1cm4gc2FtZXN0YXQoczEsIHMyKQorCisKKyMgQXJlIHR3byBvcGVuIGZpbGVzIHJlYWxseSByZWZlcmVuY2luZyB0aGUgc2FtZSBmaWxlPworIyAoTm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGZpbGUgZGVzY3JpcHRvciEpCitkZWYgc2FtZW9wZW5maWxlKGZwMSwgZnAyKToKKyAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIG9wZW4gZmlsZSBvYmplY3RzIHJlZmVyZW5jZSB0aGUgc2FtZSBmaWxlIiIiCisgICAgczEgPSBvcy5mc3RhdChmcDEpCisgICAgczIgPSBvcy5mc3RhdChmcDIpCisgICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKKworCiAjIFNwbGl0IGEgcGF0aCBpbiByb290IGFuZCBleHRlbnNpb24uCiAjIFRoZSBleHRlbnNpb24gaXMgZXZlcnl0aGluZyBzdGFydGluZyBhdCB0aGUgbGFzdCBkb3QgaW4gdGhlIGxhc3QKICMgcGF0aG5hbWUgY29tcG9uZW50OyB0aGUgcm9vdCBpcyBldmVyeXRoaW5nIGJlZm9yZSB0aGF0LgpkaWZmIC0tZ2l0IGEvTGliL2dldHRleHQucHkgYi9MaWIvZ2V0dGV4dC5weQppbmRleCBlNDNmMDQ0Li4wNWQ5YzFlIDEwMDY0NAotLS0gYS9MaWIvZ2V0dGV4dC5weQorKysgYi9MaWIvZ2V0dGV4dC5weQpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgICAgICAgICAgICB2ZXJzaW9uLCBtc2djb3VudCwgbWFzdGVyaWR4LCB0cmFuc2lkeCA9IHVucGFjaygnPjRJJywgYnVmWzQ6MjBdKQogICAgICAgICAgICAgaWkgPSAnPklJJwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQogICAgICAgICAjIE5vdyBwdXQgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIC5tbyBmaWxlIGJ1ZmZlciBpbnRvIHRoZSBjYXRhbG9nCiAgICAgICAgICMgZGljdGlvbmFyeS4KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbXNnY291bnQpOgpAQCAtMjU2LDcgKzI1Niw3IEBACiAgICAgICAgICAgICAgICAgbXNnID0gYnVmW21vZmY6bWVuZF0KICAgICAgICAgICAgICAgICB0bXNnID0gYnVmW3RvZmY6dGVuZF0KICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnRmlsZSBpcyBjb3JydXB0JywgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnRmlsZSBpcyBjb3JydXB0JywgZmlsZW5hbWUpCiAgICAgICAgICAgICAjIFNlZSBpZiB3ZSdyZSBsb29raW5nIGF0IEdOVSAubW8gY29udmVudGlvbnMgZm9yIG1ldGFkYXRhCiAgICAgICAgICAgICBpZiBtbGVuID09IDA6CiAgICAgICAgICAgICAgICAgIyBDYXRhbG9nIGRlc2NyaXB0aW9uCkBAIC0zOTgsNyArMzk4LDcgQEAKICAgICBpZiBub3QgbW9maWxlczoKICAgICAgICAgaWYgZmFsbGJhY2s6CiAgICAgICAgICAgICByZXR1cm4gTnVsbFRyYW5zbGF0aW9ucygpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoRU5PRU5ULCAnTm8gdHJhbnNsYXRpb24gZmlsZSBmb3VuZCBmb3IgZG9tYWluJywgZG9tYWluKQorICAgICAgICByYWlzZSBPU0Vycm9yKEVOT0VOVCwgJ05vIHRyYW5zbGF0aW9uIGZpbGUgZm91bmQgZm9yIGRvbWFpbicsIGRvbWFpbikKICAgICAjIEF2b2lkIG9wZW5pbmcsIHJlYWRpbmcsIGFuZCBwYXJzaW5nIHRoZSAubW8gZmlsZSBhZnRlciBpdCdzIGJlZW4gZG9uZQogICAgICMgb25jZS4KICAgICByZXN1bHQgPSBOb25lCkBAIC00NjAsNyArNDYwLDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQuZ2V0dGV4dChtZXNzYWdlKQogCkBAIC00NjgsNyArNDY4LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQubGdldHRleHQobWVzc2FnZSkKIApAQCAtNDc2LDcgKzQ3Niw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiBuID09IDE6CiAgICAgICAgICAgICByZXR1cm4gbXNnaWQxCiAgICAgICAgIGVsc2U6CkBAIC00ODcsNyArNDg3LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGlmIG4gPT0gMToKICAgICAgICAgICAgIHJldHVybiBtc2dpZDEKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9nbG9iLnB5IGIvTGliL2dsb2IucHkKaW5kZXggMWY2MDI2NS4uZTM4OGI1ZiAxMDA2NDQKLS0tIGEvTGliL2dsb2IucHkKKysrIGIvTGliL2dsb2IucHkKQEAgLTMyLDggKzMyLDcgQEAKICAgICAgICAgcmV0dXJuCiAgICAgZGlybmFtZSwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KHBhdGhuYW1lKQogICAgIGlmIG5vdCBkaXJuYW1lOgotICAgICAgICBmb3IgbmFtZSBpbiBnbG9iMShOb25lLCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICB5aWVsZCBuYW1lCisgICAgICAgIHlpZWxkIGZyb20gZ2xvYjEoTm9uZSwgYmFzZW5hbWUpCiAgICAgICAgIHJldHVybgogICAgICMgYG9zLnBhdGguc3BsaXQoKWAgcmV0dXJucyB0aGUgYXJndW1lbnQgaXRzZWxmIGFzIGEgZGlybmFtZSBpZiBpdCBpcyBhCiAgICAgIyBkcml2ZSBvciBVTkMgcGF0aC4gIFByZXZlbnQgYW4gaW5maW5pdGUgcmVjdXJzaW9uIGlmIGEgZHJpdmUgb3IgVU5DIHBhdGgKQEAgLTYyLDcgKzYxLDcgQEAKICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCiAgICAgaWYgbm90IF9pc2hpZGRlbihwYXR0ZXJuKToKICAgICAgICAgbmFtZXMgPSBbeCBmb3IgeCBpbiBuYW1lcyBpZiBub3QgX2lzaGlkZGVuKHgpXQpAQCAtODAsOCArNzksOCBAQAogICAgIHJldHVybiBbXQogCiAKLW1hZ2ljX2NoZWNrID0gcmUuY29tcGlsZSgnWyo/W10nKQotbWFnaWNfY2hlY2tfYnl0ZXMgPSByZS5jb21waWxlKGInWyo/W10nKQorbWFnaWNfY2hlY2sgPSByZS5jb21waWxlKCcoWyo/W10pJykKK21hZ2ljX2NoZWNrX2J5dGVzID0gcmUuY29tcGlsZShiJyhbKj9bXSknKQogCiBkZWYgaGFzX21hZ2ljKHMpOgogICAgIGlmIGlzaW5zdGFuY2UocywgYnl0ZXMpOgpAQCAtOTIsMyArOTEsMTUgQEAKIAogZGVmIF9pc2hpZGRlbihwYXRoKToKICAgICByZXR1cm4gcGF0aFswXSBpbiAoJy4nLCBiJy4nWzBdKQorCitkZWYgZXNjYXBlKHBhdGhuYW1lKToKKyAgICAiIiJFc2NhcGUgYWxsIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgICAiIiIKKyAgICAjIEVzY2FwaW5nIGlzIGRvbmUgYnkgd3JhcHBpbmcgYW55IG9mICIqP1siIGJldHdlZW4gc3F1YXJlIGJyYWNrZXRzLgorICAgICMgTWV0YWNoYXJhY3RlcnMgZG8gbm90IHdvcmsgaW4gdGhlIGRyaXZlIHBhcnQgYW5kIHNob3VsZG4ndCBiZSBlc2NhcGVkLgorICAgIGRyaXZlLCBwYXRobmFtZSA9IG9zLnBhdGguc3BsaXRkcml2ZShwYXRobmFtZSkKKyAgICBpZiBpc2luc3RhbmNlKHBhdGhuYW1lLCBieXRlcyk6CisgICAgICAgIHBhdGhuYW1lID0gbWFnaWNfY2hlY2tfYnl0ZXMuc3ViKGJyJ1tcMV0nLCBwYXRobmFtZSkKKyAgICBlbHNlOgorICAgICAgICBwYXRobmFtZSA9IG1hZ2ljX2NoZWNrLnN1YihyJ1tcMV0nLCBwYXRobmFtZSkKKyAgICByZXR1cm4gZHJpdmUgKyBwYXRobmFtZQpkaWZmIC0tZ2l0IGEvTGliL2d6aXAucHkgYi9MaWIvZ3ppcC5weQppbmRleCAyZmQwM2ZhLi44ZDIxZmU0IDEwMDY0NAotLS0gYS9MaWIvZ3ppcC5weQorKysgYi9MaWIvZ3ppcC5weQpAQCAtMjMsOSArMjMsOSBAQAogICAgIFRoZSBmaWxlbmFtZSBhcmd1bWVudCBjYW4gYmUgYW4gYWN0dWFsIGZpbGVuYW1lIChhIHN0ciBvciBieXRlcyBvYmplY3QpLCBvcgogICAgIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAotICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgImEiIG9yICJhYiIgZm9yIGJpbmFyeSBtb2RlLAotICAgIG9yICJydCIsICJ3dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzICJyYiIsIGFuZCB0aGUKLSAgICBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KKyAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiLCAidyIsICJ3YiIsICJ4IiwgInhiIiwgImEiIG9yICJhYiIgZm9yCisgICAgYmluYXJ5IG1vZGUsIG9yICJydCIsICJ3dCIsICJ4dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzCisgICAgInJiIiwgYW5kIHRoZSBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KIAogICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBHemlwRmlsZSBjb25zdHJ1Y3RvcjoKICAgICBHemlwRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMKQEAgLTY1LDkgKzY1LDYgQEAKICAgICAjIG9yIHVuc2lnbmVkLgogICAgIG91dHB1dC53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCB2YWx1ZSkpCiAKLWRlZiByZWFkMzIoaW5wdXQpOgotICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCI8SSIsIGlucHV0LnJlYWQoNCkpWzBdCi0KIGNsYXNzIF9QYWRkZWRGaWxlOgogICAgICIiIk1pbmltYWwgcmVhZC1vbmx5IGZpbGUgb2JqZWN0IHRoYXQgcHJlcGVuZHMgYSBzdHJpbmcgdG8gdGhlIGNvbnRlbnRzCiAgICAgb2YgYW4gYWN0dWFsIGZpbGUuIFNob3VsZG4ndCBiZSB1c2VkIG91dHNpZGUgb2YgZ3ppcC5weSwgYXMgaXQgbGFja3MKQEAgLTE1NCwxMSArMTUxLDExIEBACiAgICAgICAgIGZpbGVvYmosIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIGl0IGRlZmF1bHRzIHRvIHRoZSBlbXB0eSBzdHJpbmcsCiAgICAgICAgIGFuZCBpbiB0aGlzIGNhc2UgdGhlIG9yaWdpbmFsIGZpbGVuYW1lIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgaGVhZGVyLgogCi0gICAgICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgJ3InLCAncmInLCAnYScsICdhYicsICd3Jywgb3IgJ3diJywKLSAgICAgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgZGVmYXVsdAorICAgICAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgYW55IG9mICdyJywgJ3JiJywgJ2EnLCAnYWInLCAndycsICd3YicsICd4Jywgb3IKKyAgICAgICAgJ3hiJyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBkZWZhdWx0CiAgICAgICAgIGlzIHRoZSBtb2RlIG9mIGZpbGVvYmogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgJ3JiJy4KICAgICAgICAgQSBtb2RlIG9mICdyJyBpcyBlcXVpdmFsZW50IHRvIG9uZSBvZiAncmInLCBhbmQgc2ltaWxhcmx5IGZvciAndycgYW5kCi0gICAgICAgICd3YicsIGFuZCAnYScgYW5kICdhYicuCisgICAgICAgICd3YicsICdhJyBhbmQgJ2FiJywgYW5kICd4JyBhbmQgJ3hiJy4KIAogICAgICAgICBUaGUgY29tcHJlc3NsZXZlbCBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZyb20gMCB0byA5IGNvbnRyb2xsaW5nIHRoZQogICAgICAgICBsZXZlbCBvZiBjb21wcmVzc2lvbjsgMSBpcyBmYXN0ZXN0IGFuZCBwcm9kdWNlcyB0aGUgbGVhc3QgY29tcHJlc3Npb24sCkBAIC0yMDQsNyArMjAxLDcgQEAKICAgICAgICAgICAgIHNlbGYubWluX3JlYWRzaXplID0gMTAwCiAgICAgICAgICAgICBmaWxlb2JqID0gX1BhZGRlZEZpbGUoZmlsZW9iaikKIAotICAgICAgICBlbGlmIG1vZGUuc3RhcnRzd2l0aCgoJ3cnLCAnYScpKToKKyAgICAgICAgZWxpZiBtb2RlLnN0YXJ0c3dpdGgoKCd3JywgJ2EnLCAneCcpKToKICAgICAgICAgICAgIHNlbGYubW9kZSA9IFdSSVRFCiAgICAgICAgICAgICBzZWxmLl9pbml0X3dyaXRlKGZpbGVuYW1lKQogICAgICAgICAgICAgc2VsZi5jb21wcmVzcyA9IHpsaWIuY29tcHJlc3NvYmooY29tcHJlc3NsZXZlbCwKQEAgLTI4MSwyOCArMjc4LDMyIEBACiAgICAgICAgIHNlbGYuY3JjID0gemxpYi5jcmMzMihiIiIpICYgMHhmZmZmZmZmZgogICAgICAgICBzZWxmLnNpemUgPSAwCiAKKyAgICBkZWYgX3JlYWRfZXhhY3Qoc2VsZiwgbik6CisgICAgICAgIGRhdGEgPSBzZWxmLmZpbGVvYmoucmVhZChuKQorICAgICAgICB3aGlsZSBsZW4oZGF0YSkgPCBuOgorICAgICAgICAgICAgYiA9IHNlbGYuZmlsZW9iai5yZWFkKG4gLSBsZW4oZGF0YSkpCisgICAgICAgICAgICBpZiBub3QgYjoKKyAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiQ29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCisgICAgICAgICAgICBkYXRhICs9IGIKKyAgICAgICAgcmV0dXJuIGRhdGEKKwogICAgIGRlZiBfcmVhZF9nemlwX2hlYWRlcihzZWxmKToKICAgICAgICAgbWFnaWMgPSBzZWxmLmZpbGVvYmoucmVhZCgyKQogICAgICAgICBpZiBtYWdpYyA9PSBiJyc6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgbWFnaWMgIT0gYidcMDM3XDIxMyc6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdOb3QgYSBnemlwcGVkIGZpbGUnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTm90IGEgZ3ppcHBlZCBmaWxlJykKIAotICAgICAgICBtZXRob2QgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKKyAgICAgICAgbWV0aG9kLCBmbGFnLCBzZWxmLm10aW1lID0gc3RydWN0LnVucGFjaygiPEJCSXh4Iiwgc2VsZi5fcmVhZF9leGFjdCg4KSkKICAgICAgICAgaWYgbWV0aG9kICE9IDg6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCi0gICAgICAgIGZsYWcgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKLSAgICAgICAgc2VsZi5tdGltZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopCi0gICAgICAgICMgZXh0cmFmbGFnID0gc2VsZi5maWxlb2JqLnJlYWQoMSkKLSAgICAgICAgIyBvcyA9IHNlbGYuZmlsZW9iai5yZWFkKDEpCi0gICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKDIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCiAKICAgICAgICAgaWYgZmxhZyAmIEZFWFRSQToKICAgICAgICAgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIGV4dHJhIGZpZWxkLCBpZiBwcmVzZW50Ci0gICAgICAgICAgICB4bGVuID0gb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgeGxlbiA9IHhsZW4gKyAyNTYqb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoeGxlbikKKyAgICAgICAgICAgIGV4dHJhX2xlbiwgPSBzdHJ1Y3QudW5wYWNrKCI8SCIsIHNlbGYuX3JlYWRfZXhhY3QoMikpCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KGV4dHJhX2xlbikKICAgICAgICAgaWYgZmxhZyAmIEZOQU1FOgogICAgICAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBmaWxlbmFtZQogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKQEAgLTMxNiwxOCArMzE3LDE5IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHMgb3Igcz09YidcMDAwJzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgZmxhZyAmIEZIQ1JDOgotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoMikgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIDE2LWJpdCBoZWFkZXIgQ1JDCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KDIpICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSAxNi1iaXQgaGVhZGVyIENSQwogCiAgICAgICAgIHVudXNlZCA9IHNlbGYuZmlsZW9iai51bnVzZWQoKQogICAgICAgICBpZiB1bnVzZWQ6CiAgICAgICAgICAgICB1bmNvbXByZXNzID0gc2VsZi5kZWNvbXByZXNzLmRlY29tcHJlc3ModW51c2VkKQogICAgICAgICAgICAgc2VsZi5fYWRkX3JlYWRfZGF0YSh1bmNvbXByZXNzKQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHdyaXRlKHNlbGYsZGF0YSk6CiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBXUklURToKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgIndyaXRlKCkgb24gcmVhZC1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAid3JpdGUoKSBvbiByZWFkLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlKCkgb24gY2xvc2VkIEd6aXBGaWxlIG9iamVjdCIpCkBAIC0zNDgsMjcgKzM1MCwyMyBAQAogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gUkVBRDoKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgInJlYWQoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZCgpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA8PSAwIGFuZCBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBiJycKIAogICAgICAgICByZWFkc2l6ZSA9IDEwMjQKICAgICAgICAgaWYgc2l6ZSA8IDA6ICAgICAgICAjIGdldCB0aGUgd2hvbGUgdGhpbmcKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKHJlYWRzaXplKQotICAgICAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCi0gICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzZWxmLl9yZWFkKHJlYWRzaXplKToKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCisgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAjIGp1c3QgZ2V0IHNvbWUgbW9yZSBvZiBpdAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdoaWxlIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZChyZWFkc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgIGlmIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlYWQocmVhZHNpemUpOgorICAgICAgICAgICAgICAgICAgICBpZiBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCiAKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgY2h1bmsgPSBzZWxmLmV4dHJhYnVmW29mZnNldDogb2Zmc2V0ICsgc2l6ZV0KQEAgLTM4MSwxNyArMzc5LDE0IEBACiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgogICAgICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgaWYgc2VsZi5leHRyYXNpemUgPD0gMCBhbmQgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gYicnCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGb3IgY2VydGFpbiBpbnB1dCBkYXRhLCBhIHNpbmdsZSBjYWxsIHRvIF9yZWFkKCkgbWF5IG5vdCByZXR1cm4KLSAgICAgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCi0gICAgICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA8PSAwOgotICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQoKQotICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICMgRm9yIGNlcnRhaW4gaW5wdXQgZGF0YSwgYSBzaW5nbGUgY2FsbCB0byBfcmVhZCgpIG1heSBub3QgcmV0dXJuCisgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCisgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplIDw9IDAgYW5kIHNlbGYuX3JlYWQoKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgc2l6ZSA8IDAgb3Igc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgogICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCkBAIC00MDUsNyArNDAwLDcgQEAKICAgICBkZWYgcGVlayhzZWxmLCBuKToKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRUJBREYsICJwZWVrKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgInBlZWsoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgIyBEbyBub3QgcmV0dXJuIHJpZGljdWxvdXNseSBzbWFsbCBidWZmZXJzLCBmb3Igb25lIGNvbW1vbiBpZGlvbQogICAgICAgICAjIGlzIHRvIGNhbGwgcGVlaygxKSBhbmQgZXhwZWN0IG1vcmUgYnl0ZXMgaW4gcmV0dXJuLgpAQCAtNDE0LDEyICs0MDksOSBAQAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA9PSAwOgogICAgICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgRW5zdXJlIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGIiIiBpZiB3ZSBoYXZlbid0IHJlYWNoZWQgRU9GLgotICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgMTAyNCBpcyB0aGUgc2FtZSBidWZmZXJpbmcgaGV1cmlzdGljIHVzZWQgaW4gcmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQobWF4KG4sIDEwMjQpKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBkb24ndCByZXR1cm4gYiIiIGlmIHdlIGhhdmVuJ3QgcmVhY2hlZCBFT0YuCisgICAgICAgICAgICAjIDEwMjQgaXMgdGhlIHNhbWUgYnVmZmVyaW5nIGhldXJpc3RpYyB1c2VkIGluIHJlYWQoKQorICAgICAgICAgICAgd2hpbGUgc2VsZi5leHRyYXNpemUgPT0gMCBhbmQgc2VsZi5fcmVhZChtYXgobiwgMTAyNCkpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgcmVtYWluaW5nID0gc2VsZi5leHRyYXNpemUKQEAgLTQzMiwxMyArNDI0LDE0IEBACiAKICAgICBkZWYgX3JlYWQoc2VsZiwgc2l6ZT0xMDI0KToKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgc2VsZi5fbmV3X21lbWJlcjoKICAgICAgICAgICAgICMgSWYgdGhlIF9uZXdfbWVtYmVyIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAjIGp1bXAgdG8gdGhlIG5leHQgbWVtYmVyLCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgICAgICAgICBzZWxmLl9pbml0X3JlYWQoKQotICAgICAgICAgICAgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgc2VsZi5kZWNvbXByZXNzID0gemxpYi5kZWNvbXByZXNzb2JqKC16bGliLk1BWF9XQklUUykKICAgICAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBGYWxzZQogCkBAIC00NTUsNyArNDQ4LDcgQEAKICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5wcmVwZW5kKHNlbGYuZGVjb21wcmVzcy51bnVzZWRfZGF0YSwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuX3JlYWRfZW9mKCkKICAgICAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ1JlYWNoZWQgRU9GJykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIHVuY29tcHJlc3MgPSBzZWxmLmRlY29tcHJlc3MuZGVjb21wcmVzcyhidWYpCiAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQpAQCAtNDcxLDYgKzQ2NCw3IEBACiAgICAgICAgICAgICAjIGEgbmV3IG1lbWJlciBvbiB0aGUgbmV4dCBjYWxsCiAgICAgICAgICAgICBzZWxmLl9yZWFkX2VvZigpCiAgICAgICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIF9hZGRfcmVhZF9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoZGF0YSwgc2VsZi5jcmMpICYgMHhmZmZmZmZmZgpAQCAtNDg1LDEzICs0NzksMTIgQEAKICAgICAgICAgIyBXZSBjaGVjayB0aGUgdGhhdCB0aGUgY29tcHV0ZWQgQ1JDIGFuZCBzaXplIG9mIHRoZQogICAgICAgICAjIHVuY29tcHJlc3NlZCBkYXRhIG1hdGNoZXMgdGhlIHN0b3JlZCB2YWx1ZXMuICBOb3RlIHRoYXQgdGhlIHNpemUKICAgICAgICAgIyBzdG9yZWQgaXMgdGhlIHRydWUgZmlsZSBzaXplIG1vZCAyKiozMi4KLSAgICAgICAgY3JjMzIgPSByZWFkMzIoc2VsZi5maWxlb2JqKQotICAgICAgICBpc2l6ZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopICAjIG1heSBleGNlZWQgMkdCCisgICAgICAgIGNyYzMyLCBpc2l6ZSA9IHN0cnVjdC51bnBhY2soIjxJSSIsIHNlbGYuX3JlYWRfZXhhY3QoOCkpCiAgICAgICAgIGlmIGNyYzMyICE9IHNlbGYuY3JjOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ1JDIGNoZWNrIGZhaWxlZCAlcyAhPSAlcyIgJSAoaGV4KGNyYzMyKSwKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNSQyBjaGVjayBmYWlsZWQgJXMgIT0gJXMiICUgKGhleChjcmMzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXgoc2VsZi5jcmMpKSkKICAgICAgICAgZWxpZiBpc2l6ZSAhPSAoc2VsZi5zaXplICYgMHhmZmZmZmZmZik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJJbmNvcnJlY3QgbGVuZ3RoIG9mIGRhdGEgcHJvZHVjZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiSW5jb3JyZWN0IGxlbmd0aCBvZiBkYXRhIHByb2R1Y2VkIikKIAogICAgICAgICAjIEd6aXAgZmlsZXMgY2FuIGJlIHBhZGRlZCB3aXRoIHplcm9lcyBhbmQgc3RpbGwgaGF2ZSBhcmNoaXZlcy4KICAgICAgICAgIyBDb25zdW1lIGFsbCB6ZXJvIGJ5dGVzIGFuZCBzZXQgdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0CkBAIC01NDAsNyArNTMzLDcgQEAKICAgICAgICAgJycnUmV0dXJuIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtIGZpbGUgcG9zaXRpb24gaW5kaWNhdG9yIHRvIHRoZQogICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIGZpbGUnJycKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDYW4ndCByZXdpbmQgaW4gd3JpdGUgbW9kZSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDYW4ndCByZXdpbmQgaW4gd3JpdGUgbW9kZSIpCiAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKDApCiAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBUcnVlCiAgICAgICAgIHNlbGYuZXh0cmFidWYgPSBiIiIKQEAgLTU2NSw3ICs1NTgsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlZWsgZnJvbSBlbmQgbm90IHN1cHBvcnRlZCcpCiAgICAgICAgIGlmIHNlbGYubW9kZSA9PSBXUklURToKICAgICAgICAgICAgIGlmIG9mZnNldCA8IHNlbGYub2Zmc2V0OgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ05lZ2F0aXZlIHNlZWsgaW4gd3JpdGUgbW9kZScpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTmVnYXRpdmUgc2VlayBpbiB3cml0ZSBtb2RlJykKICAgICAgICAgICAgIGNvdW50ID0gb2Zmc2V0IC0gc2VsZi5vZmZzZXQKICAgICAgICAgICAgIGNodW5rID0gYnl0ZXMoMTAyNCkKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGNvdW50IC8vIDEwMjQpOgpkaWZmIC0tZ2l0IGEvTGliL2hhc2hsaWIucHkgYi9MaWIvaGFzaGxpYi5weQppbmRleCAyMTQ1NGM3Li5lNjUyZmM2IDEwMDY0NAotLS0gYS9MaWIvaGFzaGxpYi5weQorKysgYi9MaWIvaGFzaGxpYi5weQpAQCAtMSw0ICsxLDQgQEAKLSMgIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICAgR3JlZ29yeSBQLiBTbWl0aCAoZ3JlZ0BrcnlwdG8ub3JnKQorIy4gIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICAgR3JlZ29yeSBQLiBTbWl0aCAoZ3JlZ0BrcnlwdG8ub3JnKQogIyAgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCkBAIC02MCwzNCArNjAsMzggQEAKIGFsZ29yaXRobXNfYXZhaWxhYmxlID0gc2V0KF9fYWx3YXlzX3N1cHBvcnRlZCkKIAogX19hbGxfXyA9IF9fYWx3YXlzX3N1cHBvcnRlZCArICgnbmV3JywgJ2FsZ29yaXRobXNfZ3VhcmFudGVlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGdvcml0aG1zX2F2YWlsYWJsZScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGdvcml0aG1zX2F2YWlsYWJsZScsICdwYmtkZjJfaG1hYycpCiAKIAorX19idWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlID0ge30KKwogZGVmIF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IobmFtZSk6CisgICAgY2FjaGUgPSBfX2J1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUKKyAgICBjb25zdHJ1Y3RvciA9IGNhY2hlLmdldChuYW1lKQorICAgIGlmIGNvbnN0cnVjdG9yIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gY29uc3RydWN0b3IKICAgICB0cnk6CiAgICAgICAgIGlmIG5hbWUgaW4gKCdTSEExJywgJ3NoYTEnKToKICAgICAgICAgICAgIGltcG9ydCBfc2hhMQotICAgICAgICAgICAgcmV0dXJuIF9zaGExLnNoYTEKKyAgICAgICAgICAgIGNhY2hlWydTSEExJ10gPSBjYWNoZVsnc2hhMSddID0gX3NoYTEuc2hhMQogICAgICAgICBlbGlmIG5hbWUgaW4gKCdNRDUnLCAnbWQ1Jyk6CiAgICAgICAgICAgICBpbXBvcnQgX21kNQotICAgICAgICAgICAgcmV0dXJuIF9tZDUubWQ1CisgICAgICAgICAgICBjYWNoZVsnTUQ1J10gPSBjYWNoZVsnbWQ1J10gPSBfbWQ1Lm1kNQogICAgICAgICBlbGlmIG5hbWUgaW4gKCdTSEEyNTYnLCAnc2hhMjU2JywgJ1NIQTIyNCcsICdzaGEyMjQnKToKICAgICAgICAgICAgIGltcG9ydCBfc2hhMjU2Ci0gICAgICAgICAgICBicyA9IG5hbWVbMzpdCi0gICAgICAgICAgICBpZiBicyA9PSAnMjU2JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NoYTI1Ni5zaGEyNTYKLSAgICAgICAgICAgIGVsaWYgYnMgPT0gJzIyNCc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zaGEyNTYuc2hhMjI0CisgICAgICAgICAgICBjYWNoZVsnU0hBMjI0J10gPSBjYWNoZVsnc2hhMjI0J10gPSBfc2hhMjU2LnNoYTIyNAorICAgICAgICAgICAgY2FjaGVbJ1NIQTI1NiddID0gY2FjaGVbJ3NoYTI1NiddID0gX3NoYTI1Ni5zaGEyNTYKICAgICAgICAgZWxpZiBuYW1lIGluICgnU0hBNTEyJywgJ3NoYTUxMicsICdTSEEzODQnLCAnc2hhMzg0Jyk6CiAgICAgICAgICAgICBpbXBvcnQgX3NoYTUxMgotICAgICAgICAgICAgYnMgPSBuYW1lWzM6XQotICAgICAgICAgICAgaWYgYnMgPT0gJzUxMic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zaGE1MTIuc2hhNTEyCi0gICAgICAgICAgICBlbGlmIGJzID09ICczODQnOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2hhNTEyLnNoYTM4NAorICAgICAgICAgICAgY2FjaGVbJ1NIQTM4NCddID0gY2FjaGVbJ3NoYTM4NCddID0gX3NoYTUxMi5zaGEzODQKKyAgICAgICAgICAgIGNhY2hlWydTSEE1MTInXSA9IGNhY2hlWydzaGE1MTInXSA9IF9zaGE1MTIuc2hhNTEyCiAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICBwYXNzICAjIG5vIGV4dGVuc2lvbiBtb2R1bGUsIHRoaXMgaGFzaCBpcyB1bnN1cHBvcnRlZC4KIAorICAgIGNvbnN0cnVjdG9yID0gY2FjaGUuZ2V0KG5hbWUpCisgICAgaWYgY29uc3RydWN0b3IgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcgorCiAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5zdXBwb3J0ZWQgaGFzaCB0eXBlICcgKyBuYW1lKQogCiAKQEAgLTEzNCw2ICsxMzgsNzEgQEAKICAgICBuZXcgPSBfX3B5X25ldwogICAgIF9fZ2V0X2hhc2ggPSBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yCiAKK3RyeToKKyAgICAjIE9wZW5TU0wncyBQS0NTNV9QQktERjJfSE1BQyByZXF1aXJlcyBPcGVuU1NMIDEuMCsgd2l0aCBITUFDIGFuZCBTSEEKKyAgICBmcm9tIF9oYXNobGliIGltcG9ydCBwYmtkZjJfaG1hYworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF90cmFuc181QyA9IGJ5dGVzKCh4IF4gMHg1QykgZm9yIHggaW4gcmFuZ2UoMjU2KSkKKyAgICBfdHJhbnNfMzYgPSBieXRlcygoeCBeIDB4MzYpIGZvciB4IGluIHJhbmdlKDI1NikpCisKKyAgICBkZWYgcGJrZGYyX2htYWMoaGFzaF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywgZGtsZW49Tm9uZSk6CisgICAgICAgICIiIlBhc3N3b3JkIGJhc2VkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIDIgKFBLQ1MgIzUgdjIuMCkKKworICAgICAgICBUaGlzIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMgYmFzZWQgb24gdGhlIGhtYWMgbW9kdWxlIGFib3V0IGFzIGZhc3QKKyAgICAgICAgYXMgT3BlblNTTCdzIFBLQ1M1X1BCS0RGMl9ITUFDIGZvciBzaG9ydCBwYXNzd29yZHMgYW5kIG11Y2ggZmFzdGVyCisgICAgICAgIGZvciBsb25nIHBhc3N3b3Jkcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGhhc2hfbmFtZSwgc3RyKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihoYXNoX25hbWUpCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocGFzc3dvcmQsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBwYXNzd29yZCA9IGJ5dGVzKG1lbW9yeXZpZXcocGFzc3dvcmQpKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzYWx0LCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgc2FsdCA9IGJ5dGVzKG1lbW9yeXZpZXcoc2FsdCkpCisKKyAgICAgICAgIyBGYXN0IGlubGluZSBITUFDIGltcGxlbWVudGF0aW9uCisgICAgICAgIGlubmVyID0gbmV3KGhhc2hfbmFtZSkKKyAgICAgICAgb3V0ZXIgPSBuZXcoaGFzaF9uYW1lKQorICAgICAgICBibG9ja3NpemUgPSBnZXRhdHRyKGlubmVyLCAnYmxvY2tfc2l6ZScsIDY0KQorICAgICAgICBpZiBsZW4ocGFzc3dvcmQpID4gYmxvY2tzaXplOgorICAgICAgICAgICAgcGFzc3dvcmQgPSBuZXcoaGFzaF9uYW1lLCBwYXNzd29yZCkuZGlnZXN0KCkKKyAgICAgICAgcGFzc3dvcmQgPSBwYXNzd29yZCArIGInXHgwMCcgKiAoYmxvY2tzaXplIC0gbGVuKHBhc3N3b3JkKSkKKyAgICAgICAgaW5uZXIudXBkYXRlKHBhc3N3b3JkLnRyYW5zbGF0ZShfdHJhbnNfMzYpKQorICAgICAgICBvdXRlci51cGRhdGUocGFzc3dvcmQudHJhbnNsYXRlKF90cmFuc181QykpCisKKyAgICAgICAgZGVmIHByZihtc2csIGlubmVyPWlubmVyLCBvdXRlcj1vdXRlcik6CisgICAgICAgICAgICAjIFBCS0RGMl9ITUFDIHVzZXMgdGhlIHBhc3N3b3JkIGFzIGtleS4gV2UgY2FuIHJlLXVzZSB0aGUgc2FtZQorICAgICAgICAgICAgIyBkaWdlc3Qgb2JqZWN0cyBhbmQgYW5kIGp1c3QgdXBkYXRlIGNvcGllcyB0byBza2lwIGluaXRpYWxpemF0aW9uLgorICAgICAgICAgICAgaWNweSA9IGlubmVyLmNvcHkoKQorICAgICAgICAgICAgb2NweSA9IG91dGVyLmNvcHkoKQorICAgICAgICAgICAgaWNweS51cGRhdGUobXNnKQorICAgICAgICAgICAgb2NweS51cGRhdGUoaWNweS5kaWdlc3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvY3B5LmRpZ2VzdCgpCisKKyAgICAgICAgaWYgaXRlcmF0aW9ucyA8IDE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGl0ZXJhdGlvbnMpCisgICAgICAgIGlmIGRrbGVuIGlzIE5vbmU6CisgICAgICAgICAgICBka2xlbiA9IG91dGVyLmRpZ2VzdF9zaXplCisgICAgICAgIGlmIGRrbGVuIDwgMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZGtsZW4pCisKKyAgICAgICAgZGtleSA9IGInJworICAgICAgICBsb29wID0gMQorICAgICAgICBmcm9tX2J5dGVzID0gaW50LmZyb21fYnl0ZXMKKyAgICAgICAgd2hpbGUgbGVuKGRrZXkpIDwgZGtsZW46CisgICAgICAgICAgICBwcmV2ID0gcHJmKHNhbHQgKyBsb29wLnRvX2J5dGVzKDQsICdiaWcnKSkKKyAgICAgICAgICAgICMgZW5kaWFuZXNzIGRvZXNuJ3QgbWF0dGVyIGhlcmUgYXMgbG9uZyB0byAvIGZyb20gdXNlIHRoZSBzYW1lCisgICAgICAgICAgICBya2V5ID0gaW50LmZyb21fYnl0ZXMocHJldiwgJ2JpZycpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zIC0gMSk6CisgICAgICAgICAgICAgICAgcHJldiA9IHByZihwcmV2KQorICAgICAgICAgICAgICAgICMgcmtleSA9IHJrZXkgXiBwcmV2CisgICAgICAgICAgICAgICAgcmtleSBePSBmcm9tX2J5dGVzKHByZXYsICdiaWcnKQorICAgICAgICAgICAgbG9vcCArPSAxCisgICAgICAgICAgICBka2V5ICs9IHJrZXkudG9fYnl0ZXMoaW5uZXIuZGlnZXN0X3NpemUsICdiaWcnKQorCisgICAgICAgIHJldHVybiBka2V5Wzpka2xlbl0KKworCiBmb3IgX19mdW5jX25hbWUgaW4gX19hbHdheXNfc3VwcG9ydGVkOgogICAgICMgdHJ5IHRoZW0gYWxsLCBzb21lIG1heSBub3Qgd29yayBkdWUgdG8gdGhlIE9wZW5TU0wKICAgICAjIHZlcnNpb24gbm90IHN1cHBvcnRpbmcgdGhhdCBhbGdvcml0aG0uCmRpZmYgLS1naXQgYS9MaWIvaG1hYy5weSBiL0xpYi9obWFjLnB5CmluZGV4IDQyOTdhNzEuLjc3Nzg1YTIgMTAwNjQ0Ci0tLSBhL0xpYi9obWFjLnB5CisrKyBiL0xpYi9obWFjLnB5CkBAIC00LDcgKzQsOCBAQAogIiIiCiAKIGltcG9ydCB3YXJuaW5ncyBhcyBfd2FybmluZ3MKLWZyb20gb3BlcmF0b3IgaW1wb3J0IF9jb21wYXJlX2RpZ2VzdCBhcyBjb21wYXJlX2RpZ2VzdAorZnJvbSBfb3BlcmF0b3IgaW1wb3J0IF9jb21wYXJlX2RpZ2VzdCBhcyBjb21wYXJlX2RpZ2VzdAoraW1wb3J0IGhhc2hsaWIgYXMgX2hhc2hsaWIKIAogdHJhbnNfNUMgPSBieXRlcygoeCBeIDB4NUMpIGZvciB4IGluIHJhbmdlKDI1NikpCiB0cmFuc18zNiA9IGJ5dGVzKCh4IF4gMHgzNikgZm9yIHggaW4gcmFuZ2UoMjU2KSkKQEAgLTI4LDIxICsyOSwyNyBAQAogICAgICAgICBrZXk6ICAgICAgIGtleSBmb3IgdGhlIGtleWVkIGhhc2ggb2JqZWN0LgogICAgICAgICBtc2c6ICAgICAgIEluaXRpYWwgaW5wdXQgZm9yIHRoZSBoYXNoLCBpZiBwcm92aWRlZC4KICAgICAgICAgZGlnZXN0bW9kOiBBIG1vZHVsZSBzdXBwb3J0aW5nIFBFUCAyNDcuICAqT1IqCi0gICAgICAgICAgICAgICAgICAgQSBoYXNobGliIGNvbnN0cnVjdG9yIHJldHVybmluZyBhIG5ldyBoYXNoIG9iamVjdC4KKyAgICAgICAgICAgICAgICAgICBBIGhhc2hsaWIgY29uc3RydWN0b3IgcmV0dXJuaW5nIGEgbmV3IGhhc2ggb2JqZWN0LiAqT1IqCisgICAgICAgICAgICAgICAgICAgQSBoYXNoIG5hbWUgc3VpdGFibGUgZm9yIGhhc2hsaWIubmV3KCkuCiAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gaGFzaGxpYi5tZDUuCisgICAgICAgICAgICAgICAgICAgSW1wbGljaXQgZGVmYXVsdCB0byBoYXNobGliLm1kNSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBpbiBQeXRob24gMy42LgogCi0gICAgICAgIE5vdGU6IGtleSBhbmQgbXNnIG11c3QgYmUgYnl0ZXMgb2JqZWN0cy4KKyAgICAgICAgTm90ZToga2V5IGFuZCBtc2cgbXVzdCBiZSBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3RzLgogICAgICAgICAiIiIKIAotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIGJ5dGVzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5OiBleHBlY3RlZCBieXRlcywgYnV0IGdvdCAlciIgJSB0eXBlKGtleSkuX19uYW1lX18pCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5OiBleHBlY3RlZCBieXRlcyBvciBieXRlYXJyYXksIGJ1dCBnb3QgJXIiICUgdHlwZShrZXkpLl9fbmFtZV9fKQogCiAgICAgICAgIGlmIGRpZ2VzdG1vZCBpcyBOb25lOgotICAgICAgICAgICAgaW1wb3J0IGhhc2hsaWIKLSAgICAgICAgICAgIGRpZ2VzdG1vZCA9IGhhc2hsaWIubWQ1CisgICAgICAgICAgICBfd2FybmluZ3Mud2FybigiSE1BQygpIHdpdGhvdXQgYW4gZXhwbGljaXQgZGlnZXN0bW9kIGFyZ3VtZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcyBkZXByZWNhdGVkLiIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgICAgICBkaWdlc3Rtb2QgPSBfaGFzaGxpYi5tZDUKIAogICAgICAgICBpZiBjYWxsYWJsZShkaWdlc3Rtb2QpOgogICAgICAgICAgICAgc2VsZi5kaWdlc3RfY29ucyA9IGRpZ2VzdG1vZAorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGlnZXN0bW9kLCBzdHIpOgorICAgICAgICAgICAgc2VsZi5kaWdlc3RfY29ucyA9IGxhbWJkYSBkPWInJzogX2hhc2hsaWIubmV3KGRpZ2VzdG1vZCwgZCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZGlnZXN0X2NvbnMgPSBsYW1iZGEgZD1iJyc6IGRpZ2VzdG1vZC5uZXcoZCkKIApAQCAtNjMsNiArNzAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nLCAyKQogICAgICAgICAgICAgYmxvY2tzaXplID0gc2VsZi5ibG9ja3NpemUKIAorICAgICAgICAjIHNlbGYuYmxvY2tzaXplIGlzIHRoZSBkZWZhdWx0IGJsb2Nrc2l6ZS4gc2VsZi5ibG9ja19zaXplIGlzCisgICAgICAgICMgZWZmZWN0aXZlIGJsb2NrIHNpemUgYXMgd2VsbCBhcyB0aGUgcHVibGljIEFQSSBhdHRyaWJ1dGUuCisgICAgICAgIHNlbGYuYmxvY2tfc2l6ZSA9IGJsb2Nrc2l6ZQorCiAgICAgICAgIGlmIGxlbihrZXkpID4gYmxvY2tzaXplOgogICAgICAgICAgICAga2V5ID0gc2VsZi5kaWdlc3RfY29ucyhrZXkpLmRpZ2VzdCgpCiAKQEAgLTcyLDExICs4MywxMyBAQAogICAgICAgICBpZiBtc2cgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLnVwZGF0ZShtc2cpCiAKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJobWFjLSIgKyBzZWxmLmlubmVyLm5hbWUKKwogICAgIGRlZiB1cGRhdGUoc2VsZiwgbXNnKToKICAgICAgICAgIiIiVXBkYXRlIHRoaXMgaGFzaGluZyBvYmplY3Qgd2l0aCB0aGUgc3RyaW5nIG1zZy4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG1zZywgYnl0ZXMpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgYnV0IGdvdCAlciIgJSB0eXBlKG1zZykuX19uYW1lX18pCiAgICAgICAgIHNlbGYuaW5uZXIudXBkYXRlKG1zZykKIAogICAgIGRlZiBjb3B5KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2h0bWwvX19pbml0X18ucHkgYi9MaWIvaHRtbC9fX2luaXRfXy5weQppbmRleCAwMjY1MmVmLi5kYTBhMGEzIDEwMDY0NAotLS0gYS9MaWIvaHRtbC9fX2luaXRfXy5weQorKysgYi9MaWIvaHRtbC9fX2luaXRfXy5weQpAQCAtMiwxMiArMiwxMiBAQAogR2VuZXJhbCBmdW5jdGlvbnMgZm9yIEhUTUwgbWFuaXB1bGF0aW9uLgogIiIiCiAKK2ltcG9ydCByZSBhcyBfcmUKK2Zyb20gaHRtbC5lbnRpdGllcyBpbXBvcnQgaHRtbDUgYXMgX2h0bWw1CiAKLV9lc2NhcGVfbWFwID0ge29yZCgnJicpOiAnJmFtcDsnLCBvcmQoJzwnKTogJyZsdDsnLCBvcmQoJz4nKTogJyZndDsnfQotX2VzY2FwZV9tYXBfZnVsbCA9IHtvcmQoJyYnKTogJyZhbXA7Jywgb3JkKCc8Jyk6ICcmbHQ7Jywgb3JkKCc+Jyk6ICcmZ3Q7JywKLSAgICAgICAgICAgICAgICAgICAgb3JkKCciJyk6ICcmcXVvdDsnLCBvcmQoJ1wnJyk6ICcmI3gyNzsnfQogCi0jIE5COiB0aGlzIGlzIGEgY2FuZGlkYXRlIGZvciBhIGJ5dGVzL3N0cmluZyBwb2x5bW9ycGhpYyBpbnRlcmZhY2UKK19fYWxsX18gPSBbJ2VzY2FwZScsICd1bmVzY2FwZSddCisKIAogZGVmIGVzY2FwZShzLCBxdW90ZT1UcnVlKToKICAgICAiIiIKQEAgLTE2LDYgKzE2LDExNyBAQAogICAgIGNoYXJhY3RlcnMsIGJvdGggZG91YmxlIHF1b3RlICgiKSBhbmQgc2luZ2xlIHF1b3RlICgnKSBjaGFyYWN0ZXJzIGFyZSBhbHNvCiAgICAgdHJhbnNsYXRlZC4KICAgICAiIiIKKyAgICBzID0gcy5yZXBsYWNlKCImIiwgIiZhbXA7IikgIyBNdXN0IGJlIGRvbmUgZmlyc3QhCisgICAgcyA9IHMucmVwbGFjZSgiPCIsICImbHQ7IikKKyAgICBzID0gcy5yZXBsYWNlKCI+IiwgIiZndDsiKQogICAgIGlmIHF1b3RlOgotICAgICAgICByZXR1cm4gcy50cmFuc2xhdGUoX2VzY2FwZV9tYXBfZnVsbCkKLSAgICByZXR1cm4gcy50cmFuc2xhdGUoX2VzY2FwZV9tYXApCisgICAgICAgIHMgPSBzLnJlcGxhY2UoJyInLCAiJnF1b3Q7IikKKyAgICAgICAgcyA9IHMucmVwbGFjZSgnXCcnLCAiJiN4Mjc7IikKKyAgICByZXR1cm4gcworCisKKyMgc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI3Rva2VuaXppbmctY2hhcmFjdGVyLXJlZmVyZW5jZXMKKworX2ludmFsaWRfY2hhcnJlZnMgPSB7CisgICAgMHgwMDogJ1x1ZmZmZCcsICAjIFJFUExBQ0VNRU5UIENIQVJBQ1RFUgorICAgIDB4MGQ6ICdccicsICAgICAgIyBDQVJSSUFHRSBSRVRVUk4KKyAgICAweDgwOiAnXHUyMGFjJywgICMgRVVSTyBTSUdOCisgICAgMHg4MTogJ1x4ODEnLCAgICAjIDxjb250cm9sPgorICAgIDB4ODI6ICdcdTIwMWEnLCAgIyBTSU5HTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksKKyAgICAweDgzOiAnXHUwMTkyJywgICMgTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LCisgICAgMHg4NDogJ1x1MjAxZScsICAjIERPVUJMRSBMT1ctOSBRVU9UQVRJT04gTUFSSworICAgIDB4ODU6ICdcdTIwMjYnLCAgIyBIT1JJWk9OVEFMIEVMTElQU0lTCisgICAgMHg4NjogJ1x1MjAyMCcsICAjIERBR0dFUgorICAgIDB4ODc6ICdcdTIwMjEnLCAgIyBET1VCTEUgREFHR0VSCisgICAgMHg4ODogJ1x1MDJjNicsICAjIE1PRElGSUVSIExFVFRFUiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgIDB4ODk6ICdcdTIwMzAnLCAgIyBQRVIgTUlMTEUgU0lHTgorICAgIDB4OGE6ICdcdTAxNjAnLCAgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0FST04KKyAgICAweDhiOiAnXHUyMDM5JywgICMgU0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDhjOiAnXHUwMTUyJywgICMgTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBPRQorICAgIDB4OGQ6ICdceDhkJywgICAgIyA8Y29udHJvbD4KKyAgICAweDhlOiAnXHUwMTdkJywgICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIENBUk9OCisgICAgMHg4ZjogJ1x4OGYnLCAgICAjIDxjb250cm9sPgorICAgIDB4OTA6ICdceDkwJywgICAgIyA8Y29udHJvbD4KKyAgICAweDkxOiAnXHUyMDE4JywgICMgTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDkyOiAnXHUyMDE5JywgICMgUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5MzogJ1x1MjAxYycsICAjIExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5NDogJ1x1MjAxZCcsICAjIFJJR0hUIERPVUJMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OTU6ICdcdTIwMjInLCAgIyBCVUxMRVQKKyAgICAweDk2OiAnXHUyMDEzJywgICMgRU4gREFTSAorICAgIDB4OTc6ICdcdTIwMTQnLCAgIyBFTSBEQVNICisgICAgMHg5ODogJ1x1MDJkYycsICAjIFNNQUxMIFRJTERFCisgICAgMHg5OTogJ1x1MjEyMicsICAjIFRSQURFIE1BUksgU0lHTgorICAgIDB4OWE6ICdcdTAxNjEnLCAgIyBMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENBUk9OCisgICAgMHg5YjogJ1x1MjAzYScsICAjIFNJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OWM6ICdcdTAxNTMnLCAgIyBMQVRJTiBTTUFMTCBMSUdBVFVSRSBPRQorICAgIDB4OWQ6ICdceDlkJywgICAgIyA8Y29udHJvbD4KKyAgICAweDllOiAnXHUwMTdlJywgICMgTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDQVJPTgorICAgIDB4OWY6ICdcdTAxNzgnLCAgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCit9CisKK19pbnZhbGlkX2NvZGVwb2ludHMgPSB7CisgICAgIyAweDAwMDEgdG8gMHgwMDA4CisgICAgMHgxLCAweDIsIDB4MywgMHg0LCAweDUsIDB4NiwgMHg3LCAweDgsCisgICAgIyAweDAwMEUgdG8gMHgwMDFGCisgICAgMHhlLCAweGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksCisgICAgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKKyAgICAjIDB4MDA3RiB0byAweDAwOUYKKyAgICAweDdmLCAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhhLAorICAgIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsIDB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsCisgICAgMHg5NywgMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwKKyAgICAjIDB4RkREMCB0byAweEZERUYKKyAgICAweGZkZDAsIDB4ZmRkMSwgMHhmZGQyLCAweGZkZDMsIDB4ZmRkNCwgMHhmZGQ1LCAweGZkZDYsIDB4ZmRkNywgMHhmZGQ4LAorICAgIDB4ZmRkOSwgMHhmZGRhLCAweGZkZGIsIDB4ZmRkYywgMHhmZGRkLCAweGZkZGUsIDB4ZmRkZiwgMHhmZGUwLCAweGZkZTEsCisgICAgMHhmZGUyLCAweGZkZTMsIDB4ZmRlNCwgMHhmZGU1LCAweGZkZTYsIDB4ZmRlNywgMHhmZGU4LCAweGZkZTksIDB4ZmRlYSwKKyAgICAweGZkZWIsIDB4ZmRlYywgMHhmZGVkLCAweGZkZWUsIDB4ZmRlZiwKKyAgICAjIG90aGVycworICAgIDB4YiwgMHhmZmZlLCAweGZmZmYsIDB4MWZmZmUsIDB4MWZmZmYsIDB4MmZmZmUsIDB4MmZmZmYsIDB4M2ZmZmUsIDB4M2ZmZmYsCisgICAgMHg0ZmZmZSwgMHg0ZmZmZiwgMHg1ZmZmZSwgMHg1ZmZmZiwgMHg2ZmZmZSwgMHg2ZmZmZiwgMHg3ZmZmZSwgMHg3ZmZmZiwKKyAgICAweDhmZmZlLCAweDhmZmZmLCAweDlmZmZlLCAweDlmZmZmLCAweGFmZmZlLCAweGFmZmZmLCAweGJmZmZlLCAweGJmZmZmLAorICAgIDB4Y2ZmZmUsIDB4Y2ZmZmYsIDB4ZGZmZmUsIDB4ZGZmZmYsIDB4ZWZmZmUsIDB4ZWZmZmYsIDB4ZmZmZmUsIDB4ZmZmZmYsCisgICAgMHgxMGZmZmUsIDB4MTBmZmZmCit9CisKKworZGVmIF9yZXBsYWNlX2NoYXJyZWYocyk6CisgICAgcyA9IHMuZ3JvdXAoMSkKKyAgICBpZiBzWzBdID09ICcjJzoKKyAgICAgICAgIyBudW1lcmljIGNoYXJyZWYKKyAgICAgICAgaWYgc1sxXSBpbiAneFgnOgorICAgICAgICAgICAgbnVtID0gaW50KHNbMjpdLnJzdHJpcCgnOycpLCAxNikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG51bSA9IGludChzWzE6XS5yc3RyaXAoJzsnKSkKKyAgICAgICAgaWYgbnVtIGluIF9pbnZhbGlkX2NoYXJyZWZzOgorICAgICAgICAgICAgcmV0dXJuIF9pbnZhbGlkX2NoYXJyZWZzW251bV0KKyAgICAgICAgaWYgMHhEODAwIDw9IG51bSA8PSAweERGRkYgb3IgbnVtID4gMHgxMEZGRkY6CisgICAgICAgICAgICByZXR1cm4gJ1x1RkZGRCcKKyAgICAgICAgaWYgbnVtIGluIF9pbnZhbGlkX2NvZGVwb2ludHM6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgcmV0dXJuIGNocihudW0pCisgICAgZWxzZToKKyAgICAgICAgIyBuYW1lZCBjaGFycmVmCisgICAgICAgIGlmIHMgaW4gX2h0bWw1OgorICAgICAgICAgICAgcmV0dXJuIF9odG1sNVtzXQorICAgICAgICAjIGZpbmQgdGhlIGxvbmdlc3QgbWF0Y2hpbmcgbmFtZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQpCisgICAgICAgIGZvciB4IGluIHJhbmdlKGxlbihzKS0xLCAxLCAtMSk6CisgICAgICAgICAgICBpZiBzWzp4XSBpbiBfaHRtbDU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9odG1sNVtzWzp4XV0gKyBzW3g6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICcmJyArIHMKKworCitfY2hhcnJlZiA9IF9yZS5jb21waWxlKHInJigjWzAtOV0rOz8nCisgICAgICAgICAgICAgICAgICAgICAgIHInfCNbeFhdWzAtOWEtZkEtRl0rOz8nCisgICAgICAgICAgICAgICAgICAgICAgIHInfFteXHRcblxmIDwmIztdezEsMzJ9Oz8pJykKKworZGVmIHVuZXNjYXBlKHMpOgorICAgICIiIgorICAgIENvbnZlcnQgYWxsIG5hbWVkIGFuZCBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzIChlLmcuICZndDssICYjNjI7LAorICAgICZ4M2U7KSBpbiB0aGUgc3RyaW5nIHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdW5pY29kZSBjaGFyYWN0ZXJzLgorICAgIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgcnVsZXMgZGVmaW5lZCBieSB0aGUgSFRNTCA1IHN0YW5kYXJkCisgICAgZm9yIGJvdGggdmFsaWQgYW5kIGludmFsaWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMsIGFuZCB0aGUgbGlzdCBvZgorICAgIEhUTUwgNSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBkZWZpbmVkIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCisgICAgIiIiCisgICAgaWYgJyYnIG5vdCBpbiBzOgorICAgICAgICByZXR1cm4gcworICAgIHJldHVybiBfY2hhcnJlZi5zdWIoX3JlcGxhY2VfY2hhcnJlZiwgcykKZGlmZiAtLWdpdCBhL0xpYi9odG1sL3BhcnNlci5weSBiL0xpYi9odG1sL3BhcnNlci5weQppbmRleCA2M2ZlNzc0Li5hNjUwZDVlIDEwMDY0NAotLS0gYS9MaWIvaHRtbC9wYXJzZXIucHkKKysrIGIvTGliL2h0bWwvcGFyc2VyLnB5CkBAIC04LDkgKzgsMTQgQEAKICMgYW5kIENEQVRBIChjaGFyYWN0ZXIgZGF0YSAtLSBvbmx5IGVuZCB0YWdzIGFyZSBzcGVjaWFsKS4KIAogCi1pbXBvcnQgX21hcmt1cGJhc2UKIGltcG9ydCByZQogaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgX21hcmt1cGJhc2UKKworZnJvbSBodG1sIGltcG9ydCB1bmVzY2FwZQorCisKK19fYWxsX18gPSBbJ0hUTUxQYXJzZXInXQogCiAjIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdXNlZCBmb3IgcGFyc2luZwogCkBAIC05Miw2ICs5Nyw4IEBACiAgICAgICAgIHJldHVybiByZXN1bHQKIAogCitfZGVmYXVsdF9zZW50aW5lbCA9IG9iamVjdCgpCisKIGNsYXNzIEhUTUxQYXJzZXIoX21hcmt1cGJhc2UuUGFyc2VyQmFzZSk6CiAgICAgIiIiRmluZCB0YWdzIGFuZCBvdGhlciBtYXJrdXAgYW5kIGNhbGwgaGFuZGxlciBmdW5jdGlvbnMuCiAKQEAgLTEwNSwyNiArMTEyLDM5IEBACiAgICAgc2VsZi5oYW5kbGVfc3RhcnRlbmR0YWcoKTsgZW5kIHRhZ3MgYnkgc2VsZi5oYW5kbGVfZW5kdGFnKCkuICBUaGUKICAgICBkYXRhIGJldHdlZW4gdGFncyBpcyBwYXNzZWQgZnJvbSB0aGUgcGFyc2VyIHRvIHRoZSBkZXJpdmVkIGNsYXNzCiAgICAgYnkgY2FsbGluZyBzZWxmLmhhbmRsZV9kYXRhKCkgd2l0aCB0aGUgZGF0YSBhcyBhcmd1bWVudCAodGhlIGRhdGEKLSAgICBtYXkgYmUgc3BsaXQgdXAgaW4gYXJiaXRyYXJ5IGNodW5rcykuICBFbnRpdHkgcmVmZXJlbmNlcyBhcmUKLSAgICBwYXNzZWQgYnkgY2FsbGluZyBzZWxmLmhhbmRsZV9lbnRpdHlyZWYoKSB3aXRoIHRoZSBlbnRpdHkKLSAgICByZWZlcmVuY2UgYXMgdGhlIGFyZ3VtZW50LiAgTnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBhcmUKLSAgICBwYXNzZWQgdG8gc2VsZi5oYW5kbGVfY2hhcnJlZigpIHdpdGggdGhlIHN0cmluZyBjb250YWluaW5nIHRoZQotICAgIHJlZmVyZW5jZSBhcyB0aGUgYXJndW1lbnQuCisgICAgbWF5IGJlIHNwbGl0IHVwIGluIGFyYml0cmFyeSBjaHVua3MpLiAgSWYgY29udmVydF9jaGFycmVmcyBpcworICAgIFRydWUgdGhlIGNoYXJhY3RlciByZWZlcmVuY2VzIGFyZSBjb252ZXJ0ZWQgYXV0b21hdGljYWxseSB0byB0aGUKKyAgICBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVyIChhbmQgc2VsZi5oYW5kbGVfZGF0YSgpIGlzIG5vCisgICAgbG9uZ2VyIHNwbGl0IGluIGNodW5rcyksIG90aGVyd2lzZSB0aGV5IGFyZSBwYXNzZWQgYnkgY2FsbGluZworICAgIHNlbGYuaGFuZGxlX2VudGl0eXJlZigpIG9yIHNlbGYuaGFuZGxlX2NoYXJyZWYoKSB3aXRoIHRoZSBzdHJpbmcKKyAgICBjb250YWluaW5nIHJlc3BlY3RpdmVseSB0aGUgbmFtZWQgb3IgbnVtZXJpYyByZWZlcmVuY2UgYXMgdGhlCisgICAgYXJndW1lbnQuCiAgICAgIiIiCiAKICAgICBDREFUQV9DT05URU5UX0VMRU1FTlRTID0gKCJzY3JpcHQiLCAic3R5bGUiKQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmljdD1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmljdD1fZGVmYXVsdF9zZW50aW5lbCwgKiwKKyAgICAgICAgICAgICAgICAgY29udmVydF9jaGFycmVmcz1fZGVmYXVsdF9zZW50aW5lbCk6CiAgICAgICAgICIiIkluaXRpYWxpemUgYW5kIHJlc2V0IHRoaXMgaW5zdGFuY2UuCiAKKyAgICAgICAgSWYgY29udmVydF9jaGFycmVmcyBpcyBUcnVlIChkZWZhdWx0OiBGYWxzZSksIGFsbCBjaGFyYWN0ZXIgcmVmZXJlbmNlcworICAgICAgICBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXJzLgogICAgICAgICBJZiBzdHJpY3QgaXMgc2V0IHRvIEZhbHNlICh0aGUgZGVmYXVsdCkgdGhlIHBhcnNlciB3aWxsIHBhcnNlIGludmFsaWQKICAgICAgICAgbWFya3VwLCBvdGhlcndpc2UgaXQgd2lsbCByYWlzZSBhbiBlcnJvci4gIE5vdGUgdGhhdCB0aGUgc3RyaWN0IG1vZGUKLSAgICAgICAgaXMgZGVwcmVjYXRlZC4KKyAgICAgICAgYW5kIGFyZ3VtZW50IGFyZSBkZXByZWNhdGVkLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgc3RyaWN0OgotICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIHN0cmljdCBtb2RlIGlzIGRlcHJlY2F0ZWQuIiwKKyAgICAgICAgaWYgc3RyaWN0IGlzIG5vdCBfZGVmYXVsdF9zZW50aW5lbDoKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoZSBzdHJpY3QgYXJndW1lbnQgYW5kIG1vZGUgYXJlIGRlcHJlY2F0ZWQuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdHJpY3QgPSBGYWxzZSAgIyBkZWZhdWx0CiAgICAgICAgIHNlbGYuc3RyaWN0ID0gc3RyaWN0CisgICAgICAgIGlmIGNvbnZlcnRfY2hhcnJlZnMgaXMgX2RlZmF1bHRfc2VudGluZWw6CisgICAgICAgICAgICBjb252ZXJ0X2NoYXJyZWZzID0gRmFsc2UgICMgZGVmYXVsdAorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIHZhbHVlIG9mIGNvbnZlcnRfY2hhcnJlZnMgd2lsbCBiZWNvbWUgVHJ1ZSBpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIzLjUuIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBzZXQgdGhlIHZhbHVlIGV4cGxpY2l0bHkuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgIHNlbGYuY29udmVydF9jaGFycmVmcyA9IGNvbnZlcnRfY2hhcnJlZnMKICAgICAgICAgc2VsZi5yZXNldCgpCiAKICAgICBkZWYgcmVzZXQoc2VsZik6CkBAIC0xNDksNiArMTY5LDggQEAKICAgICAgICAgc2VsZi5nb2FoZWFkKDEpCiAKICAgICBkZWYgZXJyb3Ioc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoZSAnZXJyb3InIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCiAgICAgICAgIHJhaXNlIEhUTUxQYXJzZUVycm9yKG1lc3NhZ2UsIHNlbGYuZ2V0cG9zKCkpCiAKICAgICBfX3N0YXJ0dGFnX3RleHQgPSBOb25lCkBAIC0xNzMsMTQgKzE5NSwyNSBAQAogICAgICAgICBpID0gMAogICAgICAgICBuID0gbGVuKHJhd2RhdGEpCiAgICAgICAgIHdoaWxlIGkgPCBuOgotICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLmludGVyZXN0aW5nLnNlYXJjaChyYXdkYXRhLCBpKSAjIDwgb3IgJgotICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgaiA9IG1hdGNoLnN0YXJ0KCkKKyAgICAgICAgICAgIGlmIHNlbGYuY29udmVydF9jaGFycmVmcyBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICBqID0gcmF3ZGF0YS5maW5kKCc8JywgaSkKKyAgICAgICAgICAgICAgICBpZiBqIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGVuZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICAjIHdhaXQgdGlsbCB3ZSBnZXQgYWxsIHRoZSB0ZXh0CisgICAgICAgICAgICAgICAgICAgIGogPSBuCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY2RhdGFfZWxlbToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBqID0gbgotICAgICAgICAgICAgaWYgaSA8IGo6IHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmpdKQorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5pbnRlcmVzdGluZy5zZWFyY2gocmF3ZGF0YSwgaSkgICMgPCBvciAmCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGogPSBtYXRjaC5zdGFydCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaiA9IG4KKyAgICAgICAgICAgIGlmIGkgPCBqOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udmVydF9jaGFycmVmcyBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh1bmVzY2FwZShyYXdkYXRhW2k6al0pKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmpdKQogICAgICAgICAgICAgaSA9IHNlbGYudXBkYXRlcG9zKGksIGopCiAgICAgICAgICAgICBpZiBpID09IG46IGJyZWFrCiAgICAgICAgICAgICBzdGFydHN3aXRoID0gcmF3ZGF0YS5zdGFydHN3aXRoCkBAIC0yMTUsNyArMjQ4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGkgKyAxCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IDEKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6a10pCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udmVydF9jaGFycmVmcyBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodW5lc2NhcGUocmF3ZGF0YVtpOmtdKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmtdKQogICAgICAgICAgICAgICAgIGkgPSBzZWxmLnVwZGF0ZXBvcyhpLCBrKQogICAgICAgICAgICAgZWxpZiBzdGFydHN3aXRoKCImIyIsIGkpOgogICAgICAgICAgICAgICAgIG1hdGNoID0gY2hhcnJlZi5tYXRjaChyYXdkYXRhLCBpKQpAQCAtMjY2LDcgKzMwMiwxMCBAQAogICAgICAgICAgICAgICAgIGFzc2VydCAwLCAiaW50ZXJlc3Rpbmcuc2VhcmNoKCkgbGllZCIKICAgICAgICAgIyBlbmQgd2hpbGUKICAgICAgICAgaWYgZW5kIGFuZCBpIDwgbiBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKLSAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOm5dKQorICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0X2NoYXJyZWZzIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodW5lc2NhcGUocmF3ZGF0YVtpOm5dKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6bl0pCiAgICAgICAgICAgICBpID0gc2VsZi51cGRhdGVwb3MoaSwgbikKICAgICAgICAgc2VsZi5yYXdkYXRhID0gcmF3ZGF0YVtpOl0KIApAQCAtMzQ5LDcgKzM4OCw3IEBACiAgICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZVs6MV0gPT0gJyInID09IGF0dHJ2YWx1ZVstMTpdOgogICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IGF0dHJ2YWx1ZVsxOi0xXQogICAgICAgICAgICAgaWYgYXR0cnZhbHVlOgotICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHNlbGYudW5lc2NhcGUoYXR0cnZhbHVlKQorICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHVuZXNjYXBlKGF0dHJ2YWx1ZSkKICAgICAgICAgICAgIGF0dHJzLmFwcGVuZCgoYXR0cm5hbWUubG93ZXIoKSwgYXR0cnZhbHVlKSkKICAgICAgICAgICAgIGsgPSBtLmVuZCgpCiAKQEAgLTUwNSwzMSArNTQ0LDcgQEAKIAogICAgICMgSW50ZXJuYWwgLS0gaGVscGVyIHRvIHJlbW92ZSBzcGVjaWFsIGNoYXJhY3RlciBxdW90aW5nCiAgICAgZGVmIHVuZXNjYXBlKHNlbGYsIHMpOgotICAgICAgICBpZiAnJicgbm90IGluIHM6Ci0gICAgICAgICAgICByZXR1cm4gcwotICAgICAgICBkZWYgcmVwbGFjZUVudGl0aWVzKHMpOgotICAgICAgICAgICAgcyA9IHMuZ3JvdXBzKClbMF0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBzWzBdID09ICIjIjoKLSAgICAgICAgICAgICAgICAgICAgcyA9IHNbMTpdCi0gICAgICAgICAgICAgICAgICAgIGlmIHNbMF0gaW4gWyd4JywnWCddOgotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGludChzWzE6XS5yc3RyaXAoJzsnKSwgMTYpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gaW50KHMucnN0cmlwKCc7JykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHIoYykKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIHJldHVybiAnJiMnICsgcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmcm9tIGh0bWwuZW50aXRpZXMgaW1wb3J0IGh0bWw1Ci0gICAgICAgICAgICAgICAgaWYgcyBpbiBodG1sNToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw1W3NdCi0gICAgICAgICAgICAgICAgZWxpZiBzLmVuZHN3aXRoKCc7Jyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJicgKyBzCi0gICAgICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoMiwgbGVuKHMpKToKLSAgICAgICAgICAgICAgICAgICAgaWYgc1s6eF0gaW4gaHRtbDU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDVbc1s6eF1dICsgc1t4Ol0KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYnICsgcwotCi0gICAgICAgIHJldHVybiByZS5zdWIociImKCM/W3hYXT8oPzpbMC05YS1mQS1GXSs7fFx3ezEsMzJ9Oz8pKSIsCi0gICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUVudGl0aWVzLCBzLCBmbGFncz1yZS5BU0NJSSkKKyAgICAgICAgd2FybmluZ3Mud2FybignVGhlIHVuZXNjYXBlIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgJworICAgICAgICAgICAgICAgICAgICAgICdpbiAzLjUsIHVzZSBodG1sLnVuZXNjYXBlKCkgaW5zdGVhZC4nLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICByZXR1cm4gdW5lc2NhcGUocykKZGlmZiAtLWdpdCBhL0xpYi9odHRwL2NsaWVudC5weSBiL0xpYi9odHRwL2NsaWVudC5weQppbmRleCBlMDVjODRkLi43NjNhOTAzIDEwMDY0NAotLS0gYS9MaWIvaHR0cC9jbGllbnQucHkKKysrIGIvTGliL2h0dHAvY2xpZW50LnB5CkBAIC0yNzEsOCArMjcxLDYgQEAKICAgICByZXR1cm4gZW1haWwucGFyc2VyLlBhcnNlcihfY2xhc3M9X2NsYXNzKS5wYXJzZXN0cihoc3RyaW5nKQogCiAKLV9zdHJpY3Rfc2VudGluZWwgPSBvYmplY3QoKQotCiBjbGFzcyBIVFRQUmVzcG9uc2UoaW8uUmF3SU9CYXNlKToKIAogICAgICMgU2VlIFJGQyAyNjE2IHNlYyAxOS42IGFuZCBSRkMgMTk0NSBzZWMgNiBmb3IgZGV0YWlscy4KQEAgLTI4Miw3ICsyODAsNyBAQAogICAgICMgdGV4dCBmb2xsb3dpbmcgUkZDIDIwNDcuICBUaGUgYmFzaWMgc3RhdHVzIGxpbmUgcGFyc2luZyBvbmx5CiAgICAgIyBhY2NlcHRzIGlzby04ODU5LTEuCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc29jaywgZGVidWdsZXZlbD0wLCBzdHJpY3Q9X3N0cmljdF9zZW50aW5lbCwgbWV0aG9kPU5vbmUsIHVybD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29jaywgZGVidWdsZXZlbD0wLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpOgogICAgICAgICAjIElmIHRoZSByZXNwb25zZSBpbmNsdWRlcyBhIGNvbnRlbnQtbGVuZ3RoIGhlYWRlciwgd2UgbmVlZCB0bwogICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IHRoZSBjbGllbnQgZG9lc24ndCByZWFkIG1vcmUgdGhhbiB0aGUKICAgICAgICAgIyBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzLiAgSWYgaXQgZG9lcywgaXQgd2lsbCBibG9jayB1bnRpbApAQCAtMjkyLDEwICsyOTAsNiBAQAogICAgICAgICAjIGNsaWVudHMgdW5sZXNzIHRoZXkga25vdyB3aGF0IHRoZXkgYXJlIGRvaW5nLgogICAgICAgICBzZWxmLmZwID0gc29jay5tYWtlZmlsZSgicmIiKQogICAgICAgICBzZWxmLmRlYnVnbGV2ZWwgPSBkZWJ1Z2xldmVsCi0gICAgICAgIGlmIHN0cmljdCBpcyBub3QgX3N0cmljdF9zZW50aW5lbDoKLSAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oInRoZSAnc3RyaWN0JyBhcmd1bWVudCBpc24ndCBzdXBwb3J0ZWQgYW55bW9yZTsgIgotICAgICAgICAgICAgICAgICJodHRwLmNsaWVudCBub3cgYWx3YXlzIGFzc3VtZXMgSFRUUC8xLnggY29tcGxpYW50IHNlcnZlcnMuIiwKLSAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHNlbGYuX21ldGhvZCA9IG1ldGhvZAogCiAgICAgICAgICMgVGhlIEhUVFBSZXNwb25zZSBvYmplY3QgaXMgcmV0dXJuZWQgdmlhIHVybGxpYi4gIFRoZSBjbGllbnRzCkBAIC03MzIsMTMgKzcyNiwxNyBAQAogICAgIGRlZmF1bHRfcG9ydCA9IEhUVFBfUE9SVAogICAgIGF1dG9fb3BlbiA9IDEKICAgICBkZWJ1Z2xldmVsID0gMAorICAgICMgVENQIE1heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGlzIGRldGVybWluZWQgYnkgdGhlIFRDUCBzdGFjayBvbgorICAgICMgYSBwZXItY29ubmVjdGlvbiBiYXNpcy4gIFRoZXJlIGlzIG5vIHNpbXBsZSBhbmQgZWZmaWNpZW50CisgICAgIyBwbGF0Zm9ybSBpbmRlcGVuZGVudCBtZWNoYW5pc20gZm9yIGRldGVybWluaW5nIHRoZSBNU1MsIHNvCisgICAgIyBpbnN0ZWFkIGEgcmVhc29uYWJsZSBlc3RpbWF0ZSBpcyBjaG9zZW4uICBUaGUgZ2V0c29ja29wdCgpCisgICAgIyBpbnRlcmZhY2UgdXNpbmcgdGhlIFRDUF9NQVhTRUcgcGFyYW1ldGVyIG1heSBiZSBhIHN1aXRhYmxlCisgICAgIyBhcHByb2FjaCBvbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zLiBBIHZhbHVlIG9mIDE2S2lCIGlzIGNob3NlbgorICAgICMgYXMgYSByZWFzb25hYmxlIGVzdGltYXRlIG9mIHRoZSBtYXhpbXVtIE1TUy4KKyAgICBtc3MgPSAxNjM4NAogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgc3RyaWN0PV9zdHJpY3Rfc2VudGluZWwsCi0gICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULCBzb3VyY2VfYWRkcmVzcz1Ob25lKToKLSAgICAgICAgaWYgc3RyaWN0IGlzIG5vdCBfc3RyaWN0X3NlbnRpbmVsOgotICAgICAgICAgICAgd2FybmluZ3Mud2FybigidGhlICdzdHJpY3QnIGFyZ3VtZW50IGlzbid0IHN1cHBvcnRlZCBhbnltb3JlOyAiCi0gICAgICAgICAgICAgICAgImh0dHAuY2xpZW50IG5vdyBhbHdheXMgYXNzdW1lcyBIVFRQLzEueCBjb21wbGlhbnQgc2VydmVycy4iLAotICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSk6CiAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKICAgICAgICAgc2VsZi5zb3VyY2VfYWRkcmVzcyA9IHNvdXJjZV9hZGRyZXNzCiAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKQEAgLTgwNCw4ICs4MDIsOCBAQAogCiAgICAgICAgIGlmIGNvZGUgIT0gMjAwOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoIlR1bm5lbCBjb25uZWN0aW9uIGZhaWxlZDogJWQgJXMiICUgKGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RyaXAoKSkpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJUdW5uZWwgY29ubmVjdGlvbiBmYWlsZWQ6ICVkICVzIiAlIChjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdHJpcCgpKSkKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGxpbmUgPSByZXNwb25zZS5mcC5yZWFkbGluZShfTUFYTElORSArIDEpCiAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBfTUFYTElORToKQEAgLTg5OSw4ICs4OTcsMTEgQEAKICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6XQogICAgICAgICAjIElmIG1zZyBhbmQgbWVzc2FnZV9ib2R5IGFyZSBzZW50IGluIGEgc2luZ2xlIHNlbmQoKSBjYWxsLAogICAgICAgICAjIGl0IHdpbGwgYXZvaWQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgY2F1c2VkIGJ5IHRoZSBpbnRlcmFjdGlvbgotICAgICAgICAjIGJldHdlZW4gZGVsYXllZCBhY2sgYW5kIHRoZSBOYWdsZSBhbGdvcml0aG0uCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZV9ib2R5LCBieXRlcyk6CisgICAgICAgICMgYmV0d2VlbiBkZWxheWVkIGFjayBhbmQgdGhlIE5hZ2xlIGFsZ29yaXRobS4gSG93ZXZlciwKKyAgICAgICAgIyB0aGVyZSBpcyBubyBwZXJmb3JtYW5jZSBnYWluIGlmIHRoZSBtZXNzYWdlIGlzIGxhcmdlcgorICAgICAgICAjIHRoYW4gTVNTIChhbmQgdGhlcmUgaXMgYSBtZW1vcnkgcGVuYWx0eSBmb3IgdGhlIG1lc3NhZ2UKKyAgICAgICAgIyBjb3B5KS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlX2JvZHksIGJ5dGVzKSBhbmQgbGVuKG1lc3NhZ2VfYm9keSkgPCBzZWxmLm1zczoKICAgICAgICAgICAgIG1zZyArPSBtZXNzYWdlX2JvZHkKICAgICAgICAgICAgIG1lc3NhZ2VfYm9keSA9IE5vbmUKICAgICAgICAgc2VsZi5zZW5kKG1zZykKQEAgLTExNzAsMTYgKzExNzEsMTUgQEAKICAgICAgICAgIyBYWFggU2hvdWxkIGtleV9maWxlIGFuZCBjZXJ0X2ZpbGUgYmUgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgY29udGV4dD8KIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBrZXlfZmlsZT1Ob25lLCBjZXJ0X2ZpbGU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLCB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwKLSAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUsICosIGNvbnRleHQ9Tm9uZSwgY2hlY2tfaG9zdG5hbWU9Tm9uZSk6Ci0gICAgICAgICAgICBzdXBlcihIVFRQU0Nvbm5lY3Rpb24sIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnQsIHN0cmljdCwgdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSwgKiwgY29udGV4dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgICAgICBzdXBlcihIVFRQU0Nvbm5lY3Rpb24sIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnQsIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzKQogICAgICAgICAgICAgc2VsZi5rZXlfZmlsZSA9IGtleV9maWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRfZmlsZSA9IGNlcnRfZmlsZQogICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgICAgICMgU29tZSByZWFzb25hYmxlIGRlZmF1bHRzCi0gICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCi0gICAgICAgICAgICAgICAgY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCiAgICAgICAgICAgICB3aWxsX3ZlcmlmeSA9IGNvbnRleHQudmVyaWZ5X21vZGUgIT0gc3NsLkNFUlRfTk9ORQogICAgICAgICAgICAgaWYgY2hlY2tfaG9zdG5hbWUgaXMgTm9uZToKICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZSA9IHdpbGxfdmVyaWZ5CkBAIC0xMjA0LDEzICsxMjA0LDEzIEBACiAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCiAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzZWxmLl9jb250ZXh0LndyYXBfc29ja2V0KHNvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fY2hlY2tfaG9zdG5hbWU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29udGV4dC5jaGVja19ob3N0bmFtZSBhbmQgc2VsZi5fY2hlY2tfaG9zdG5hbWU6CisgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzc2wubWF0Y2hfaG9zdG5hbWUoc2VsZi5zb2NrLmdldHBlZXJjZXJ0KCksIHNlbGYuaG9zdCkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCi0gICAgICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgX19hbGxfXy5hcHBlbmQoIkhUVFBTQ29ubmVjdGlvbiIpCiAKZGlmZiAtLWdpdCBhL0xpYi9odHRwL2Nvb2tpZWphci5weSBiL0xpYi9odHRwL2Nvb2tpZWphci5weQppbmRleCA5ZmNkNGM2Li40ZGM0NjhiIDEwMDY0NAotLS0gYS9MaWIvaHR0cC9jb29raWVqYXIucHkKKysrIGIvTGliL2h0dHAvY29va2llamFyLnB5CkBAIC0xMTkzLDggKzExOTMsNyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbWFwcGluZyA9IFRydWUKLSAgICAgICAgICAgIGZvciBzdWJvYmogaW4gZGVlcHZhbHVlcyhvYmopOgotICAgICAgICAgICAgICAgIHlpZWxkIHN1Ym9iagorICAgICAgICAgICAgeWllbGQgZnJvbSBkZWVwdmFsdWVzKG9iaikKICAgICAgICAgaWYgbm90IG1hcHBpbmc6CiAgICAgICAgICAgICB5aWVsZCBvYmoKIApAQCAtMTczMSw4ICsxNzMwLDggQEAKICAgICAgICAgcmV0dXJuICI8JXNbJXNdPiIgJSAoc2VsZi5fX2NsYXNzX18sICIsICIuam9pbihyKSkKIAogCi0jIGRlcml2ZXMgZnJvbSBJT0Vycm9yIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjQuMAotY2xhc3MgTG9hZEVycm9yKElPRXJyb3IpOiBwYXNzCisjIGRlcml2ZXMgZnJvbSBPU0Vycm9yIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjQuMAorY2xhc3MgTG9hZEVycm9yKE9TRXJyb3IpOiBwYXNzCiAKIGNsYXNzIEZpbGVDb29raWVKYXIoQ29va2llSmFyKToKICAgICAiIiJDb29raWVKYXIgdGhhdCBjYW4gYmUgbG9hZGVkIGZyb20gYW5kIHNhdmVkIHRvIGEgZmlsZS4iIiIKQEAgLTE3NjIsMTcgKzE3NjEsMTQgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZW5hbWUgaXMgbm90IE5vbmU6IGZpbGVuYW1lID0gc2VsZi5maWxlbmFtZQogICAgICAgICAgICAgZWxzZTogcmFpc2UgVmFsdWVFcnJvcihNSVNTSU5HX0ZJTEVOQU1FX1RFWFQpCiAKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5fcmVhbGx5X2xvYWQoZiwgZmlsZW5hbWUsIGlnbm9yZV9kaXNjYXJkLCBpZ25vcmVfZXhwaXJlcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIHJldmVydChzZWxmLCBmaWxlbmFtZT1Ob25lLAogICAgICAgICAgICAgICAgaWdub3JlX2Rpc2NhcmQ9RmFsc2UsIGlnbm9yZV9leHBpcmVzPUZhbHNlKToKICAgICAgICAgIiIiQ2xlYXIgYWxsIGNvb2tpZXMgYW5kIHJlbG9hZCBjb29raWVzIGZyb20gYSBzYXZlZCBmaWxlLgogCi0gICAgICAgIFJhaXNlcyBMb2FkRXJyb3IgKG9yIElPRXJyb3IpIGlmIHJldmVyc2lvbiBpcyBub3Qgc3VjY2Vzc2Z1bDsgdGhlCisgICAgICAgIFJhaXNlcyBMb2FkRXJyb3IgKG9yIE9TRXJyb3IpIGlmIHJldmVyc2lvbiBpcyBub3Qgc3VjY2Vzc2Z1bDsgdGhlCiAgICAgICAgIG9iamVjdCdzIHN0YXRlIHdpbGwgbm90IGJlIGFsdGVyZWQgaWYgdGhpcyBoYXBwZW5zLgogCiAgICAgICAgICIiIgpAQCAtMTc4Nyw3ICsxNzgzLDcgQEAKICAgICAgICAgICAgIHNlbGYuX2Nvb2tpZXMgPSB7fQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYubG9hZChmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKQotICAgICAgICAgICAgZXhjZXB0IChMb2FkRXJyb3IsIElPRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5fY29va2llcyA9IG9sZF9zdGF0ZQogICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTE4NTcsMTUgKzE4NTMsMTIgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZW5hbWUgaXMgbm90IE5vbmU6IGZpbGVuYW1lID0gc2VsZi5maWxlbmFtZQogICAgICAgICAgICAgZWxzZTogcmFpc2UgVmFsdWVFcnJvcihNSVNTSU5HX0ZJTEVOQU1FX1RFWFQpCiAKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgICMgVGhlcmUgcmVhbGx5IGlzbid0IGFuIExXUCBDb29raWVzIDIuMCBmb3JtYXQsIGJ1dCB0aGlzIGluZGljYXRlcwogICAgICAgICAgICAgIyB0aGF0IHRoZXJlIGlzIGV4dHJhIGluZm9ybWF0aW9uIGluIGhlcmUgKGRvbWFpbl9kb3QgYW5kCiAgICAgICAgICAgICAjIHBvcnRfc3BlYykgd2hpbGUgc3RpbGwgYmVpbmcgY29tcGF0aWJsZSB3aXRoIGxpYnd3dy1wZXJsLCBJIGhvcGUuCiAgICAgICAgICAgICBmLndyaXRlKCIjTFdQLUNvb2tpZXMtMi4wXG4iKQogICAgICAgICAgICAgZi53cml0ZShzZWxmLmFzX2x3cF9zdHIoaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIF9yZWFsbHlfbG9hZChzZWxmLCBmLCBmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKToKICAgICAgICAgbWFnaWMgPSBmLnJlYWRsaW5lKCkKQEAgLTE5MzgsOCArMTkzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpZ25vcmVfZXhwaXJlcyBhbmQgYy5pc19leHBpcmVkKG5vdyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNldF9jb29raWUoYykKLQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgX3dhcm5fdW5oYW5kbGVkX2V4Y2VwdGlvbigpCkBAIC0yMDQ1LDcgKzIwMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIHNlbGYuc2V0X2Nvb2tpZShjKQogCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBfd2Fybl91bmhhbmRsZWRfZXhjZXB0aW9uKCkKQEAgLTIwNTcsOCArMjA0OSw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLmZpbGVuYW1lIGlzIG5vdCBOb25lOiBmaWxlbmFtZSA9IHNlbGYuZmlsZW5hbWUKICAgICAgICAgICAgIGVsc2U6IHJhaXNlIFZhbHVlRXJyb3IoTUlTU0lOR19GSUxFTkFNRV9URVhUKQogCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAidyIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHNlbGYuaGVhZGVyKQogICAgICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKICAgICAgICAgICAgIGZvciBjb29raWUgaW4gc2VsZjoKQEAgLTIwODcsNSArMjA3OCwzIEBACiAgICAgICAgICAgICAgICAgICAgICJcdCIuam9pbihbY29va2llLmRvbWFpbiwgaW5pdGlhbF9kb3QsIGNvb2tpZS5wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZSwgZXhwaXJlcywgbmFtZSwgdmFsdWVdKSsKICAgICAgICAgICAgICAgICAgICAgIlxuIikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2h0dHAvc2VydmVyLnB5IGIvTGliL2h0dHAvc2VydmVyLnB5CmluZGV4IGRhYjFlYjYuLmYwMTliZDkgMTAwNjQ0Ci0tLSBhL0xpYi9odHRwL3NlcnZlci5weQorKysgYi9MaWIvaHR0cC9zZXJ2ZXIucHkKQEAgLTQwMSwxMiArNDAxLDE3IEBACiAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmNsb3NlX2Nvbm5lY3Rpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9vbmVfcmVxdWVzdCgpCiAKLSAgICBkZWYgc2VuZF9lcnJvcihzZWxmLCBjb2RlLCBtZXNzYWdlPU5vbmUpOgorICAgIGRlZiBzZW5kX2Vycm9yKHNlbGYsIGNvZGUsIG1lc3NhZ2U9Tm9uZSwgZXhwbGFpbj1Ob25lKToKICAgICAgICAgIiIiU2VuZCBhbmQgbG9nIGFuIGVycm9yIHJlcGx5LgogCi0gICAgICAgIEFyZ3VtZW50cyBhcmUgdGhlIGVycm9yIGNvZGUsIGFuZCBhIGRldGFpbGVkIG1lc3NhZ2UuCi0gICAgICAgIFRoZSBkZXRhaWxlZCBtZXNzYWdlIGRlZmF1bHRzIHRvIHRoZSBzaG9ydCBlbnRyeSBtYXRjaGluZyB0aGUKLSAgICAgICAgcmVzcG9uc2UgY29kZS4KKyAgICAgICAgQXJndW1lbnRzIGFyZQorICAgICAgICAqIGNvZGU6ICAgIGFuIEhUVFAgZXJyb3IgY29kZQorICAgICAgICAgICAgICAgICAgIDMgZGlnaXRzCisgICAgICAgICogbWVzc2FnZTogYSBzaW1wbGUgb3B0aW9uYWwgMSBsaW5lIHJlYXNvbiBwaHJhc2UuCisgICAgICAgICAgICAgICAgICAgKiggSFRBQiAvIFNQIC8gVkNIQVIgLyAleDgwLUZGICkKKyAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byBzaG9ydCBlbnRyeSBtYXRjaGluZyB0aGUgcmVzcG9uc2UgY29kZQorICAgICAgICAqIGV4cGxhaW46IGEgZGV0YWlsZWQgbWVzc2FnZSBkZWZhdWx0cyB0byB0aGUgbG9uZyBlbnRyeQorICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nIHRoZSByZXNwb25zZSBjb2RlLgogCiAgICAgICAgIFRoaXMgc2VuZHMgYW4gZXJyb3IgcmVzcG9uc2UgKHNvIGl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkKICAgICAgICAgb3V0cHV0IGhhcyBiZWVuIGdlbmVyYXRlZCksIGxvZ3MgdGhlIGVycm9yLCBhbmQgZmluYWxseSBzZW5kcwpAQCAtNDIwLDE3ICs0MjUsMjAgQEAKICAgICAgICAgICAgIHNob3J0bXNnLCBsb25nbXNnID0gJz8/PycsICc/Pz8nCiAgICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKICAgICAgICAgICAgIG1lc3NhZ2UgPSBzaG9ydG1zZwotICAgICAgICBleHBsYWluID0gbG9uZ21zZworICAgICAgICBpZiBleHBsYWluIGlzIE5vbmU6CisgICAgICAgICAgICBleHBsYWluID0gbG9uZ21zZwogICAgICAgICBzZWxmLmxvZ19lcnJvcigiY29kZSAlZCwgbWVzc2FnZSAlcyIsIGNvZGUsIG1lc3NhZ2UpCiAgICAgICAgICMgdXNpbmcgX3F1b3RlX2h0bWwgdG8gcHJldmVudCBDcm9zcyBTaXRlIFNjcmlwdGluZyBhdHRhY2tzIChzZWUgYnVnICMxMTAwMjAxKQogICAgICAgICBjb250ZW50ID0gKHNlbGYuZXJyb3JfbWVzc2FnZV9mb3JtYXQgJQotICAgICAgICAgICAgICAgICAgIHsnY29kZSc6IGNvZGUsICdtZXNzYWdlJzogX3F1b3RlX2h0bWwobWVzc2FnZSksICdleHBsYWluJzogZXhwbGFpbn0pCisgICAgICAgICAgICAgICAgICAgeydjb2RlJzogY29kZSwgJ21lc3NhZ2UnOiBfcXVvdGVfaHRtbChtZXNzYWdlKSwgJ2V4cGxhaW4nOiBfcXVvdGVfaHRtbChleHBsYWluKX0pCisgICAgICAgIGJvZHkgPSBjb250ZW50LmVuY29kZSgnVVRGLTgnLCAncmVwbGFjZScpCiAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShjb2RlLCBtZXNzYWdlKQogICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCBzZWxmLmVycm9yX2NvbnRlbnRfdHlwZSkKICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgaW50KGxlbihib2R5KSkpCiAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogICAgICAgICBpZiBzZWxmLmNvbW1hbmQgIT0gJ0hFQUQnIGFuZCBjb2RlID49IDIwMCBhbmQgY29kZSBub3QgaW4gKDIwNCwgMzA0KToKLSAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoY29udGVudC5lbmNvZGUoJ1VURi04JywgJ3JlcGxhY2UnKSkKKyAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoYm9keSkKIAogICAgIGRlZiBzZW5kX3Jlc3BvbnNlKHNlbGYsIGNvZGUsIG1lc3NhZ2U9Tm9uZSk6CiAgICAgICAgICIiIkFkZCB0aGUgcmVzcG9uc2UgaGVhZGVyIHRvIHRoZSBoZWFkZXJzIGJ1ZmZlciBhbmQgbG9nIHRoZQpAQCAtNzExLDcgKzcxOSw3IEBACiAgICAgICAgIGN0eXBlID0gc2VsZi5ndWVzc190eXBlKHBhdGgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICJGaWxlIG5vdCBmb3VuZCIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICB0cnk6CkBAIC03MzYsNyArNzQ0LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxpc3QgPSBvcy5saXN0ZGlyKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0LCAiTm8gcGVybWlzc2lvbiB0byBsaXN0IGRpcmVjdG9yeSIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBsaXN0LnNvcnQoa2V5PWxhbWJkYSBhOiBhLmxvd2VyKCkpCkBAIC0xMTMwLDcgKzExMzgsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Muc2V0dWlkKG5vYm9keSkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBvcy5kdXAyKHNlbGYucmZpbGUuZmlsZW5vKCksIDApCiAgICAgICAgICAgICAgICAgb3MuZHVwMihzZWxmLndmaWxlLmZpbGVubygpLCAxKQpAQCAtMTE4MywxNSArMTE5MSwxNSBAQAogICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNHSSBzY3JpcHQgZXhpdGVkIE9LIikKIAogCi1kZWYgdGVzdChIYW5kbGVyQ2xhc3MgPSBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLAotICAgICAgICAgU2VydmVyQ2xhc3MgPSBIVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDApOgorZGVmIHRlc3QoSGFuZGxlckNsYXNzPUJhc2VIVFRQUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICBTZXJ2ZXJDbGFzcz1IVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDAsIGJpbmQ9IiIpOgogICAgICIiIlRlc3QgdGhlIEhUVFAgcmVxdWVzdCBoYW5kbGVyIGNsYXNzLgogCiAgICAgVGhpcyBydW5zIGFuIEhUVFAgc2VydmVyIG9uIHBvcnQgODAwMCAob3IgdGhlIGZpcnN0IGNvbW1hbmQgbGluZQogICAgIGFyZ3VtZW50KS4KIAogICAgICIiIgotICAgIHNlcnZlcl9hZGRyZXNzID0gKCcnLCBwb3J0KQorICAgIHNlcnZlcl9hZGRyZXNzID0gKGJpbmQsIHBvcnQpCiAKICAgICBIYW5kbGVyQ2xhc3MucHJvdG9jb2xfdmVyc2lvbiA9IHByb3RvY29sCiAgICAgaHR0cGQgPSBTZXJ2ZXJDbGFzcyhzZXJ2ZXJfYWRkcmVzcywgSGFuZGxlckNsYXNzKQpAQCAtMTIwOSwxMiArMTIxNywxNiBAQAogICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNnaScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBhcyBDR0kgU2VydmVyJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJpbmQnLCAnLWInLCBkZWZhdWx0PScnLCBtZXRhdmFyPSdBRERSRVNTJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NwZWNpZnkgYWx0ZXJuYXRlIGJpbmQgYWRkcmVzcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbZGVmYXVsdDogYWxsIGludGVyZmFjZXNdJykKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdwb3J0JywgYWN0aW9uPSdzdG9yZScsCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTgwMDAsIHR5cGU9aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9Jz8nLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lmeSBhbHRlcm5hdGUgcG9ydCBbZGVmYXVsdDogODAwMF0nKQogICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICAgaWYgYXJncy5jZ2k6Ci0gICAgICAgIHRlc3QoSGFuZGxlckNsYXNzPUNHSUhUVFBSZXF1ZXN0SGFuZGxlciwgcG9ydD1hcmdzLnBvcnQpCisgICAgICAgIGhhbmRsZXJfY2xhc3MgPSBDR0lIVFRQUmVxdWVzdEhhbmRsZXIKICAgICBlbHNlOgotICAgICAgICB0ZXN0KEhhbmRsZXJDbGFzcz1TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIsIHBvcnQ9YXJncy5wb3J0KQorICAgICAgICBoYW5kbGVyX2NsYXNzID0gU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCisgICAgdGVzdChIYW5kbGVyQ2xhc3M9aGFuZGxlcl9jbGFzcywgcG9ydD1hcmdzLnBvcnQsIGJpbmQ9YXJncy5iaW5kKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5IGIvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CmluZGV4IDRiZjExMTEuLmQxODMwNTcgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQorKysgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgaW1wb3J0bGliLmFiYworaW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKIGZyb20gcGxhdGZvcm0gaW1wb3J0IHB5dGhvbl92ZXJzaW9uCiBpbXBvcnQgcmUKQEAgLTU0OSw3ICs1NTAsNyBAQAogICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShzZWxmLmhlbHBfdXJsKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyB3aHk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcih0aXRsZT0nRG9jdW1lbnQgU3RhcnQgRmFpbHVyZScsCiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9c3RyKHdoeSksIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgIGVsc2U6CkBAIC02NjAsMjAgKzY2MSwyMCBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICMgWFhYIE91Z2h0IHRvIGluc2VydCBjdXJyZW50IGZpbGUncyBkaXJlY3RvcnkgaW4gZnJvbnQgb2YgcGF0aAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMobmFtZSkKICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBJbXBvcnRFcnJvcikgYXMgbXNnOgogICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiSW1wb3J0IGVycm9yIiwgc3RyKG1zZyksIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoIkltcG9ydCBlcnJvciIsICJtb2R1bGUgbm90IGZvdW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShsb2FkZXIsIGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc3BlYy5sb2FkZXIsIGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyKToKICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoIkltcG9ydCBlcnJvciIsICJub3QgYSBzb3VyY2UtYmFzZWQgbW9kdWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmaWxlX3BhdGggPSBsb2FkZXIuZ2V0X2ZpbGVuYW1lKG5hbWUpCisgICAgICAgICAgICBmaWxlX3BhdGggPSBzcGVjLmxvYWRlci5nZXRfZmlsZW5hbWUobmFtZSkKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiSW1wb3J0IGVycm9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvYWRlciBkb2VzIG5vdCBzdXBwb3J0IGdldF9maWxlbmFtZSIsCkBAIC04NzIsNyArODczLDcgQEAKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUoaGVscGZpbGUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyB3aHk6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdEb2N1bWVudCBTdGFydCBGYWlsdXJlJywKICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9c3RyKHdoeSksIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkgYi9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQppbmRleCAzN2EzMzdlLi5hOTk4OWE4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQorKysgYi9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZpbGVuYW1lKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwd2QsIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weSBiL0xpYi9pZGxlbGliL0dyZXBEaWFsb2cucHkKaW5kZXggMmUwNzMxMi4uYzAwNzRlMiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weQorKysgYi9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5CkBAIC0xMjUsNCArMTI1LDMgQEAKICAgICAjIEhlbmNlIElkbGUgbXVzdCBiZSByZXN0YXJ0ZWQgYWZ0ZXIgZWRpdGluZyB0aGlzIGZpbGUgZm9yIGEgbGl2ZSB0ZXN0LgogICAgIGltcG9ydCB1bml0dGVzdAogICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfZ3JlcCcsIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQotCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkgYi9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKaW5kZXggZjAwOGI0Ni4uM2NkN2E0YyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CisrKyBiL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQpAQCAtNTA2LDcgKzUwNiw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHB3ZCA9ICIiCiAgICAgICAgICAgICByZXR1cm4gcHdkLCAiIgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9NdWx0aUNhbGwucHkgYi9MaWIvaWRsZWxpYi9NdWx0aUNhbGwucHkKaW5kZXggNjQ3MjllYS4uMjUxMDVkYyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvTXVsdGlDYWxsLnB5CisrKyBiL0xpYi9pZGxlbGliL011bHRpQ2FsbC5weQpAQCAtNTcsNiArNTcsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbnVtYmVyIGluIHJhbmdlKGxlbihfbW9kaWZpZXJzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBfbW9kaWZpZXJzW251bWJlcl1dKQogCisjIEluIDMuNCwgaWYgbm8gc2hlbGwgd2luZG93IGlzIGV2ZXIgb3BlbiwgdGhlIHVuZGVybHlpbmcgVGsgd2lkZ2V0IGlzCisjIGRlc3Ryb3llZCBiZWZvcmUgLl9fZGVsX18gbWV0aG9kcyBoZXJlIGFyZSBjYWxsZWQuICBUaGUgZm9sbG93aW5nCisjIGlzIHVzZWQgdG8gc2VsZWN0aXZlbHkgaWdub3JlIHNodXRkb3duIGV4Y2VwdGlvbnMgdG8gYXZvaWQKKyMgJ0V4Y2VwdGlvbiBpZ25vcmVkJyBtZXNzYWdlcy4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjAxNjcKK0FQUExJQ0FUSU9OX0dPTkUgPSAnJydcCitjYW4ndCBpbnZva2UgImJpbmQiIGNvbW1hbmQ6ICBhcHBsaWNhdGlvbiBoYXMgYmVlbiBkZXN0cm95ZWQnJycKKwogIyBBIGJpbmRlciBpcyBhIGNsYXNzIHdoaWNoIGJpbmRzIGZ1bmN0aW9ucyB0byBvbmUgdHlwZSBvZiBldmVudC4gSXQgaGFzIHR3bwogIyBtZXRob2RzOiBiaW5kIGFuZCB1bmJpbmQsIHdoaWNoIGdldCBhIGZ1bmN0aW9uIGFuZCBhIHBhcnNlZCBzZXF1ZW5jZSwgYXMKICMgcmV0dXJuZWQgYnkgX3BhcnNlX3NlcXVlbmNlKCkuIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgYmluZGVyczoKQEAgLTk4LDcgKzEwNSwxNCBAQAogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIGlmIHNlbGYuaGFuZGxlcmlkOgotICAgICAgICAgICAgc2VsZi53aWRnZXQudW5iaW5kKHNlbGYud2lkZ2V0aW5zdCwgc2VsZi5zZXF1ZW5jZSwgc2VsZi5oYW5kbGVyaWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi53aWRnZXQudW5iaW5kKHNlbGYud2lkZ2V0aW5zdCwgc2VsZi5zZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlcmlkKQorICAgICAgICAgICAgZXhjZXB0IHRraW50ZXIuVGNsRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmFyZ3NbMF0gPT0gQVBQTElDQVRJT05fR09ORToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICMgQW4gaW50IGluIHJhbmdlKDEgPDwgbGVuKF9tb2RpZmllcnMpKSByZXByZXNlbnRzIGEgY29tYmluYXRpb24gb2YgbW9kaWZpZXJzCiAjIChpZiB0aGUgbGVhc3Qgc2lnbmlmaWNlbnQgYml0IGlzIG9uLCBfbW9kaWZpZXJzWzBdIGlzIG9uLCBhbmQgc28gb24pLgpAQCAtMjI3LDcgKzI0MSwxMyBAQAogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIGZvciBzZXEsIGlkIGluIHNlbGYuaGFuZGxlcmlkczoKLSAgICAgICAgICAgIHNlbGYud2lkZ2V0LnVuYmluZChzZWxmLndpZGdldGluc3QsIHNlcSwgaWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi53aWRnZXQudW5iaW5kKHNlbGYud2lkZ2V0aW5zdCwgc2VxLCBpZCkKKyAgICAgICAgICAgIGV4Y2VwdCB0a2ludGVyLlRjbEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IEFQUExJQ0FUSU9OX0dPTkU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogIyBkZWZpbmUgdGhlIGxpc3Qgb2YgZXZlbnQgdHlwZXMgdG8gYmUgaGFuZGxlZCBieSBNdWx0aUV2ZW50LiB0aGUgb3JkZXIgaXMKICMgY29tcGF0aWJsZSB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIGV2ZW50IHR5cGUgY29uc3RhbnRzLgpAQCAtMzkwLDggKzQxMCwxMyBAQAogICAgICAgICAgICAgICAgIGZ1bmMsIHRyaXBsZXRzID0gc2VsZi5fX2V2ZW50aW5mb1t2aXJ0dWFsXQogICAgICAgICAgICAgICAgIGlmIGZ1bmM6CiAgICAgICAgICAgICAgICAgICAgIGZvciB0cmlwbGV0IGluIHRyaXBsZXRzOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2JpbmRlcnNbdHJpcGxldFsxXV0udW5iaW5kKHRyaXBsZXQsIGZ1bmMpCi0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fYmluZGVyc1t0cmlwbGV0WzFdXS51bmJpbmQodHJpcGxldCwgZnVuYykKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCB0a2ludGVyLlRjbEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IEFQUExJQ0FUSU9OX0dPTkU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgIF9tdWx0aWNhbGxfZGljdFt3aWRnZXRdID0gTXVsdGlDYWxsCiAgICAgcmV0dXJuIE11bHRpQ2FsbApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvTkVXUy50eHQgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dAppbmRleCA2Mzg4ZDBkLi45NTNhMzhkIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ORVdTLnR4dAorKysgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dApAQCAtMSw3NCArMSwxMCBAQAotV2hhdCdzIE5ldyBpbiBJRExFIDMuMy40PwotPT09PT09PT09PT09PT09PT09PT09PT09PQotCi0tIElzc3VlICMxNzM5MDogQWRkIFB5dGhvbiB2ZXJzaW9uIHRvIElkbGUgZWRpdG9yIHdpbmRvdyB0aXRsZSBiYXIuCi0gIE9yaWdpbmFsIHBhdGNoZXMgYnkgRWRtb25kIEJ1cm5ldHQgYW5kIEtlbnQgSm9obnNvbi4KLQotLSBJc3N1ZSAjMTg5NjA6IElETEUgbm93IGlnbm9yZXMgdGhlIHNvdXJjZSBlbmNvZGluZyBkZWNsYXJhdGlvbiBvbiB0aGUgc2Vjb25kCi0gIGxpbmUgaWYgdGhlIGZpcnN0IGxpbmUgY29udGFpbnMgYW55dGhpbmcgZXhjZXB0IGEgY29tbWVudC4KLQotLSBJc3N1ZSAjMjAwNTg6IHN5cy5zdGRpbi5yZWFkbGluZSgpIGluIElETEUgbm93IGFsd2F5cyByZXR1cm5zIG9ubHkgb25lIGxpbmUuCi0KLS0gSXNzdWUgIzE5NDgxOiBwcmludCgpIG9mIHN0cmluZyBzdWJjbGFzcyBpbnN0YW5jZSBpbiBJRExFIG5vIGxvbmdlciBoYW5ncy4KLQotLSBJc3N1ZSAjMTgyNzA6IFByZXZlbnQgcG9zc2libGUgSURMRSBBdHRyaWJ1dGVFcnJvciBvbiBPUyBYIHdoZW4gbm8gaW5pdGlhbAotICBzaGVsbCB3aW5kb3cgaXMgcHJlc2VudC4KLQotCi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjM/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS0gSXNzdWUgIzE4ODczOiBJRExFIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQKLSAgbGluZXMuCi0KLS0gSXNzdWUgIzE4OTg4OiBUaGUgIlRhYiIga2V5IG5vdyB3b3JrcyB3aGVuIGEgd29yZCBpcyBhbHJlYWR5IGF1dG9jb21wbGV0ZWQuCi0KLS0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgotCi0tIElzc3VlICMxODQyOTogRm9ybWF0IC8gRm9ybWF0IFBhcmFncmFwaCwgbm93IHdvcmtzIHdoZW4gY29tbWVudCBibG9ja3MKLSAgYXJlIHNlbGVjdGVkLiBBcyB3aXRoIHRleHQgYmxvY2tzLCB0aGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgc2VsZWN0aW9uCi0gIG9ubHkgaW5jbHVkZXMgY29tcGxldGUgbGluZXMuCi0KLS0gSXNzdWUgIzE4MjI2OiBBZGQgZG9jc3RyaW5ncyBhbmQgdW5pdHRlc3RzIGZvciBGb3JtYXRQYXJhZ3JhcGgucHkuCi0gIE9yaWdpbmFsIHBhdGNoZXMgYnkgVG9kZCBSb3ZpdG8gYW5kIFBoaWwgV2Vic3Rlci4KLQotLSBJc3N1ZSAjMTgyNzk6IEZvcm1hdCAtIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2Ugbm8gbG9uZ2VyIG1hcmtzIGEgZmlsZSBhcwotICBjaGFuZ2VkIHdoZW4gaXQgaGFzIG5vdCBiZWVuIGNoYW5nZWQuIFRoaXMgZml4IGZvbGxvd2VkIHRoZSBhZGRpdGlvbiBvZiBhCi0gIHRlc3QgZmlsZSBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGhpbCBXZWJzdGVyICh0aGUgaXNzdWUncyBtYWluIGdvYWwpLgotCi0tIElzc3VlICM3MTM2OiBJbiB0aGUgSWRsZSBGaWxlIG1lbnUsICJOZXcgV2luZG93IiBpcyByZW5hbWVkICJOZXcgRmlsZSIuCi0gIFBhdGNoIGJ5IFRhbCBFaW5hdCwgUm9nZXQgU2Vyd3ksIGFuZCBUb2RkIFJvdml0by4KLQotLSBSZW1vdmUgZGVhZCBpbXBvcnRzIG9mIGltcC4KLQotLSBJc3N1ZSAjMTgxOTY6IEF2b2lkIGRpc3BsYXlpbmcgc3B1cmlvdXMgU3lzdGVtRXhpdCB0cmFjZWJhY2tzLgotCi0tIElzc3VlICM1NDkyOiBBdm9pZCB0cmFjZWJhY2sgd2hlbiBleGl0aW5nIElETEUgY2F1c2VkIGJ5IGEgcmFjZSBjb25kaXRpb24uCi0KLS0gSXNzdWUgIzE3NTExOiBLZWVwIElETEUgZmluZCBkaWFsb2cgb3BlbiBhZnRlciBjbGlja2luZyAiRmluZCBOZXh0Ii4KLSAgT3JpZ2luYWwgcGF0Y2ggYnkgU2FyYWggSy4KLQotLSBJc3N1ZSAjMTgwNTU6IE1vdmUgSURMRSBvZmYgb2YgaW1wIGFuZCBvbiB0byBpbXBvcnRsaWIuCi0KLS0gSXNzdWUgIzE1MzkyOiBDcmVhdGUgYSB1bml0dGVzdCBmcmFtZXdvcmsgZm9yIElETEUuCi0gIEluaXRpYWwgcGF0Y2ggYnkgUmFqYWdvcGFsYXNhcm1hIEpheWFrcmlzaG5hbi4KLSAgU2VlIExpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0IGZvciBob3cgdG8gcnVuIElkbGUgdGVzdHMuCi0KLS0gSXNzdWUgIzE0MTQ2OiBIaWdobGlnaHQgc291cmNlIGxpbmUgd2hpbGUgZGVidWdnaW5nIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE3NTMyOiBBbHdheXMgaW5jbHVkZSBPcHRpb25zIG1lbnUgZm9yIElETEUgb24gT1MgWC4KLSAgUGF0Y2ggYnkgR3VpbGhlcm1lIFNpbcO1ZXMuCi0KLQotV2hhdCdzIE5ldyBpbiBJRExFIDMuMy4yPworV2hhdCdzIE5ldyBpbiBJRExFIDMuNC4wPwogPT09PT09PT09PT09PT09PT09PT09PT09PQogCiAtIElzc3VlICMxNzM5MDogRGlzcGxheSBQeXRob24gdmVyc2lvbiBvbiBJZGxlIHRpdGxlIGJhci4KICAgSW5pdGlhbCBwYXRjaCBieSBFZG1vbmQgQnVybmV0dC4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICM1MDY2OiBVcGRhdGUgSURMRSBkb2NzLiBQYXRjaCBieSBUb2RkIFJvdml0by4KIAogLSBJc3N1ZSAjMTc2MjU6IENsb3NlIHRoZSByZXBsYWNlIGRpYWxvZyBhZnRlciBpdCBpcyB1c2VkLgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QYXRoQnJvd3Nlci5weSBiL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CmluZGV4IGJhNDA3MTkuLjVlNWM2YmUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CkBAIC00NCw3ICs0NCw3IEBACiAgICAgZGVmIEdldFN1Ykxpc3Qoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzZWxmLmRpciBvciBvcy5jdXJkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgcGFja2FnZXMgPSBbXQogICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1B5U2hlbGwucHkgYi9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CmluZGV4IDJlNWViYjIuLmU4ODkwZDEgMTAwNzU1Ci0tLSBhL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKKysrIGIvTGliL2lkbGVsaWIvUHlTaGVsbC5weQpAQCAtNDE5LDcgKzQxOSw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5ycGNjbHQgPSBNeVJQQ0NsaWVudChhZGRyKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmRpc3BsYXlfcG9ydF9iaW5kaW5nX2Vycm9yKCkKQEAgLTEwMzQsNyArMTAzNCwxMCBAQAogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm9zdWIgPSAiPT09PSBObyBTdWJwcm9jZXNzID09PT0iCisgICAgICAgICAgICBub3N1YiA9ICgiPT09PSBObyBTdWJwcm9jZXNzID09PT1cblxuIiArCisgICAgICAgICAgICAgICAgICAgICJXQVJOSU5HOiBSdW5uaW5nIElETEUgd2l0aG91dCBhIFN1YnByb2Nlc3MgaXMgZGVwcmVjYXRlZFxuIiArCisgICAgICAgICAgICAgICAgICAgICJhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgbGF0ZXIgdmVyc2lvbi4gU2VlIEhlbHAvSURMRSBIZWxwXG4iICsKKyAgICAgICAgICAgICAgICAgICAgImZvciBkZXRhaWxzLlxuXG4iKQogICAgICAgICAgICAgc3lzLmRpc3BsYXlob29rID0gcnBjLmRpc3BsYXlob29rCiAKICAgICAgICAgc2VsZi53cml0ZSgiUHl0aG9uICVzIG9uICVzXG4lc1xuJXMiICUKQEAgLTEzOTgsNyArMTQwMSw4IEBACiAgICAgICAgaWRsZSAgWy1kbnNdIFstdCB0aXRsZV0gLSBbYXJnXSoKIAogICAtaCAgICAgICAgIHByaW50IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0gIC1uICAgICAgICAgcnVuIElETEUgd2l0aG91dCBhIHN1YnByb2Nlc3MgKHNlZSBIZWxwL0lETEUgSGVscCBmb3IgZGV0YWlscykKKyAgLW4gICAgICAgICBydW4gSURMRSB3aXRob3V0IGEgc3VicHJvY2VzcyAoREVQUkVDQVRFRCwKKyAgICAgICAgICAgICBzZWUgSGVscC9JRExFIEhlbHAgZm9yIGRldGFpbHMpCiAKIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyB3aWxsIG92ZXJyaWRlIHRoZSBJRExFICdzZXR0aW5ncycgY29uZmlndXJhdGlvbjoKIApAQCAtMTQ3Niw2ICsxNDgwLDggQEAKICAgICAgICAgaWYgbyA9PSAnLWknOgogICAgICAgICAgICAgZW5hYmxlX3NoZWxsID0gVHJ1ZQogICAgICAgICBpZiBvID09ICctbic6CisgICAgICAgICAgICBwcmludCgiIFdhcm5pbmc6IHJ1bm5pbmcgSURMRSB3aXRob3V0IGEgc3VicHJvY2VzcyBpcyBkZXByZWNhdGVkLiIsCisgICAgICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICB1c2Vfc3VicHJvY2VzcyA9IEZhbHNlCiAgICAgICAgIGlmIG8gPT0gJy1yJzoKICAgICAgICAgICAgIHNjcmlwdCA9IGEKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkgYi9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5CmluZGV4IDI1YmFlNDguLjFmNDg1NGQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkKKysrIGIvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weQpAQCAtMzgxLDcgKzM4MSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJlbmFtZShzZWxmLnBhdGgsIG5ld3BhdGgpCiAgICAgICAgICAgICBzZWxmLnBhdGggPSBuZXdwYXRoCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgR2V0SWNvbk5hbWUoc2VsZik6CkBAIC0zOTQsNyArMzk0LDcgQEAKICAgICBkZWYgR2V0U3ViTGlzdChzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNlbGYucGF0aCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICBuYW1lcy5zb3J0KGtleSA9IG9zLnBhdGgubm9ybWNhc2UpCiAgICAgICAgIHN1Ymxpc3QgPSBbXQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weSBiL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKaW5kZXggYTk3NGQ1NC4uZWEyMDEwZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weQorKysgYi9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CkBAIC0yNzEsOCArMjcxLDEwIEBACiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBkZWZhdWx0CisKICAgICBkZWYgU2V0T3B0aW9uKHNlbGYsIGNvbmZpZ1R5cGUsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpOgogICAgICAgICAiIiJJbiB1c2VyJ3MgY29uZmlnIGZpbGUsIHNldCBzZWN0aW9uJ3Mgb3B0aW9uIHRvIHZhbHVlLgorCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uU2V0T3B0aW9uKHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpCiAKQEAgLTYzOCw4ICs2NDAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBrZXlCaW5kaW5ncworCiAgICAgZGVmIEdldEV4dHJhSGVscFNvdXJjZUxpc3Qoc2VsZixjb25maWdTZXQpOgogICAgICAgICAiIiJGZXRjaCBsaXN0IG9mIGV4dHJhIGhlbHAgc291cmNlcyBmcm9tIGEgZ2l2ZW4gY29uZmlnU2V0LgorCiAgICAgICAgIFZhbGlkIGNvbmZpZ1NldHMgYXJlICd1c2VyJyBvciAnZGVmYXVsdCcuICBSZXR1cm4gYSBsaXN0IG9mIHR1cGxlcyBvZgogICAgICAgICB0aGUgZm9ybSAobWVudV9pdGVtICwgcGF0aF90b19oZWxwX2ZpbGUgLCBvcHRpb24pLCBvciByZXR1cm4gdGhlIGVtcHR5CiAgICAgICAgIGxpc3QuICAnb3B0aW9uJyBpcyB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBoZWxwIHJlc291cmNlLiAgJ29wdGlvbicKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2hlbHAudHh0IGIvTGliL2lkbGVsaWIvaGVscC50eHQKaW5kZXggZmY3ODZjNS4uNjM3OGEyZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaGVscC50eHQKKysrIGIvTGliL2lkbGVsaWIvaGVscC50eHQKQEAgLTEsMTQyICsxLDE4NSBAQAogW1NlZSB0aGUgZW5kIG9mIHRoaXMgZmlsZSBmb3IgKiogVElQUyAqKiBvbiB1c2luZyBJRExFICEhXQogCi1DbGljayBvbiB0aGUgZG90dGVkIGxpbmUgYXQgdGhlIHRvcCBvZiBhIG1lbnUgdG8gInRlYXIgaXQgb2ZmIjogYQotc2VwYXJhdGUgd2luZG93IGNvbnRhaW5pbmcgdGhlIG1lbnUgaXMgY3JlYXRlZC4KK0lETEUgaXMgdGhlIFB5dGhvbiBJREUgYnVpbHQgd2l0aCB0aGUgdGtpbnRlciBHVUkgdG9vbGtpdC4KIAotRmlsZSBNZW51OgorSURMRSBoYXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKKy1jb2RlZCBpbiAxMDAlIHB1cmUgUHl0aG9uLCB1c2luZyB0aGUgdGtpbnRlciBHVUkgdG9vbGtpdAorLWNyb3NzLXBsYXRmb3JtOiB3b3JrcyBvbiBXaW5kb3dzLCBVbml4LCBhbmQgT1MgWAorLW11bHRpLXdpbmRvdyB0ZXh0IGVkaXRvciB3aXRoIG11bHRpcGxlIHVuZG8sIFB5dGhvbiBjb2xvcml6aW5nLCBzbWFydCBpbmRlbnQsCitjYWxsIHRpcHMsIGFuZCBtYW55IG90aGVyIGZlYXR1cmVzCistUHl0aG9uIHNoZWxsIHdpbmRvdyAoYS5rLmEgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIpCistZGVidWdnZXIgKG5vdCBjb21wbGV0ZSwgYnV0IHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzLCB2aWV3IGFuZCBzdGVwKQogCi0JTmV3IEZpbGUgICAgICAgICAtLSBDcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdwotCU9wZW4uLi4gICAgICAgICAgLS0gT3BlbiBhbiBleGlzdGluZyBmaWxlCi0JUmVjZW50IEZpbGVzLi4uICAtLSBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMKLQlPcGVuIE1vZHVsZS4uLiAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKLQlDbGFzcyBCcm93c2VyICAgIC0tIFNob3cgY2xhc3NlcyBhbmQgbWV0aG9kcyBpbiBjdXJyZW50IGZpbGUKLQlQYXRoIEJyb3dzZXIgICAgIC0tIFNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMKK01lbnVzOgorCitJRExFIGhhcyB0d28gd2luZG93IHR5cGVzIHRoZSBTaGVsbCB3aW5kb3cgYW5kIHRoZSBFZGl0b3Igd2luZG93LiBJdCBpcworcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBlZGl0b3Igd2luZG93cyBzaW11bHRhbmVvdXNseS4gSURMRSdzCittZW51cyBkeW5hbWljYWxseSBjaGFuZ2UgYmFzZWQgb24gd2hpY2ggd2luZG93IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gRWFjaCBtZW51Citkb2N1bWVudGVkIGJlbG93IGluZGljYXRlcyB3aGljaCB3aW5kb3cgdHlwZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGguIENsaWNrIG9uCit0aGUgZG90dGVkIGxpbmUgYXQgdGhlIHRvcCBvZiBhIG1lbnUgdG8gInRlYXIgaXQgb2ZmIjogYSBzZXBhcmF0ZSB3aW5kb3cKK2NvbnRhaW5pbmcgdGhlIG1lbnUgaXMgY3JlYXRlZCAoZm9yIFVuaXggYW5kIFdpbmRvd3Mgb25seSkuCisKK0ZpbGUgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CisKKyAgICAgICAgTmV3IEZpbGUgICAgICAgICAtLSBDcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdworICAgICAgICBPcGVuLi4uICAgICAgICAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgZmlsZQorICAgICAgICBPcGVuIE1vZHVsZS4uLiAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKKyAgICAgICAgUmVjZW50IEZpbGVzLi4uICAtLSBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMKKyAgICAgICAgQ2xhc3MgQnJvd3NlciAgICAtLSBTaG93IGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gY3VycmVudCBmaWxlCisgICAgICAgIFBhdGggQnJvd3NlciAgICAgLS0gU2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWV0aG9kcwotCS0tLQotCVNhdmUgICAgICAgICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgYXNzb2NpYXRlZCBmaWxlICh1bnNhdmVkCi0JCSAgICAgICAgICAgIHdpbmRvd3MgaGF2ZSBhICogYmVmb3JlIGFuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlKQorICAgICAgICAtLS0KKyAgICAgICAgU2F2ZSAgICAgICAgICAgICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBhc3NvY2lhdGVkIGZpbGUgKHVuc2F2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dzIGhhdmUgYSAqIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZSkKIAotCVNhdmUgQXMuLi4gICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcwotCQkgICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBmaWxlCi0JU2F2ZSBDb3B5IEFzLi4uICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlCi0JCSAgICAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQotCS0tLQotCVByaW50IFdpbmRvdyAgICAgLS0gUHJpbnQgdGhlIGN1cnJlbnQgd2luZG93Ci0JLS0tCi0JQ2xvc2UgICAgICAgICAgICAtLSBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCi0JRXhpdCAgICAgICAgICAgICAtLSBDbG9zZSBhbGwgd2luZG93cywgcXVpdCAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICAgICAgIFNhdmUgQXMuLi4gICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgICAgICAgU2F2ZSBDb3B5IEFzLi4uICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICAgICAgIC0tLQorICAgICAgICBQcmludCBXaW5kb3cgICAgIC0tIFByaW50IHRoZSBjdXJyZW50IHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgQ2xvc2UgICAgICAgICAgICAtLSBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICAgICAgIEV4aXQgICAgICAgICAgICAgLS0gQ2xvc2UgYWxsIHdpbmRvd3MsIHF1aXQgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQogCi1FZGl0IE1lbnU6CitFZGl0IE1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpOgogCi0JVW5kbyAgICAgICAgICAgICAtLSBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEEgbWF4aW11bSBvZiAxMDAwIGNoYW5nZXMgbWF5IGJlIHVuZG9uZSkKLQlSZWRvICAgICAgICAgICAgIC0tIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93Ci0JLS0tCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBVbmRvICAgICAgICAgICAgIC0tIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkgYmUgdW5kb25lKQorICAgICAgICBSZWRvICAgICAgICAgICAgIC0tIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93CisgICAgICAgIC0tLQorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQlTZWxlY3QgQWxsICAgICAgIC0tIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBlZGl0IGJ1ZmZlcgotCS0tLQotCUZpbmQuLi4gICAgICAgICAgLS0gT3BlbiBhIHNlYXJjaCBkaWFsb2cgYm94IHdpdGggbWFueSBvcHRpb25zCi0JRmluZCBBZ2FpbiAgICAgICAtLSBSZXBlYXQgbGFzdCBzZWFyY2gKLQlGaW5kIFNlbGVjdGlvbiAgIC0tIFNlYXJjaCBmb3IgdGhlIHN0cmluZyBpbiB0aGUgc2VsZWN0aW9uCi0JRmluZCBpbiBGaWxlcy4uLiAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggZm9yIHNlYXJjaGluZyBmaWxlcwotCVJlcGxhY2UuLi4gICAgICAgLS0gT3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cgYm94Ci0JR28gdG8gTGluZSAgICAgICAtLSBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCi0JU2hvdyBDYWxsdGlwICAgICAtLSBPcGVuIGEgc21hbGwgd2luZG93IHdpdGggZnVuY3Rpb24gcGFyYW0gaGludHMKLQlTaG93IENvbXBsZXRpb25zIC0tIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcwotCQkJICAgIGFuZCBhdHRyaWJ1dGVzLiAoc2VlICcqVElQUyonLCBiZWxvdykKLQlTaG93IFBhcmVucwkgLS0gSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcwotCUV4cGFuZCBXb3JkICAgICAgLS0gRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIKLQkJICAgICAgICAgICAgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdCB0byBnZXQgYQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICBTZWxlY3QgQWxsICAgICAgIC0tIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBlZGl0IGJ1ZmZlcgorICAgICAgICAtLS0KKyAgICAgICAgRmluZC4uLiAgICAgICAgICAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggd2l0aCBtYW55IG9wdGlvbnMKKyAgICAgICAgRmluZCBBZ2FpbiAgICAgICAtLSBSZXBlYXQgbGFzdCBzZWFyY2gKKyAgICAgICAgRmluZCBTZWxlY3Rpb24gICAtLSBTZWFyY2ggZm9yIHRoZSBzdHJpbmcgaW4gdGhlIHNlbGVjdGlvbgorICAgICAgICBGaW5kIGluIEZpbGVzLi4uIC0tIE9wZW4gYSBzZWFyY2ggZGlhbG9nIGJveCBmb3Igc2VhcmNoaW5nIGZpbGVzCisgICAgICAgIFJlcGxhY2UuLi4gICAgICAgLS0gT3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cgYm94CisgICAgICAgIEdvIHRvIExpbmUgICAgICAgLS0gQXNrIGZvciBhIGxpbmUgbnVtYmVyIGFuZCBzaG93IHRoYXQgbGluZQorICAgICAgICBFeHBhbmQgV29yZCAgICAgIC0tIEV4cGFuZCB0aGUgd29yZCB5b3UgaGF2ZSB0eXBlZCB0byBtYXRjaCBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdCB0byBnZXQgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBleHBhbnNpb24KKyAgICAgICAgU2hvdyBDYWxsdGlwICAgICAtLSBBZnRlciBhbiB1bmNsb3NlZCBwYXJlbnRoZXNpcyBmb3IgYSBmdW5jdGlvbiwgb3BlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc21hbGwgd2luZG93IHdpdGggZnVuY3Rpb24gcGFyYW1ldGVyIGhpbnRzCisgICAgICAgIFNob3cgUGFyZW5zICAgICAgLS0gSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcworICAgICAgICBTaG93IENvbXBsZXRpb25zIC0tIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhdHRyaWJ1dGVzLiAoc2VlICcqVElQUyonLCBiZWxvdykKIAotRm9ybWF0IE1lbnUgKG9ubHkgaW4gRWRpdCB3aW5kb3cpOgorRm9ybWF0IE1lbnUgKEVkaXRvciB3aW5kb3cgb25seSk6CiAKLQlJbmRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IDQgc3BhY2VzCi0JRGVkZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IDQgc3BhY2VzCi0JQ29tbWVudCBPdXQgUmVnaW9uICAtLSBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKLQlVbmNvbW1lbnQgUmVnaW9uICAgIC0tIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcwotCVRhYmlmeSBSZWdpb24gICAgICAgLS0gVHVybnMgKmxlYWRpbmcqIHN0cmV0Y2hlcyBvZiBzcGFjZXMgaW50byB0YWJzCi0JCShOb3RlOiBXZSByZWNvbW1lbmQgdXNpbmcgNCBzcGFjZSBibG9ja3MgdG8gaW5kZW50IFB5dGhvbiBjb2RlLikKLQlVbnRhYmlmeSBSZWdpb24gICAgIC0tIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSByaWdodCBudW1iZXIgb2Ygc3BhY2VzCi0JTmV3IEluZGVudCBXaWR0aC4uLiAtLSBPcGVuIGRpYWxvZyB0byBjaGFuZ2UgaW5kZW50IHdpZHRoCi0JRm9ybWF0IFBhcmFncmFwaCAgICAtLSBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaAorICAgICAgICBJbmRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IGJ5IHRoZSBpbmRlbnQgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA0IHNwYWNlcykKKyAgICAgICAgRGVkZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IGJ5IHRoZSBpbmRlbnQgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA0IHNwYWNlcykKKyAgICAgICAgQ29tbWVudCBPdXQgUmVnaW9uICAtLSBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKKyAgICAgICAgVW5jb21tZW50IFJlZ2lvbiAgICAtLSBSZW1vdmUgbGVhZGluZyAjIG9yICMjIGZyb20gc2VsZWN0ZWQgbGluZXMKKyAgICAgICAgVGFiaWZ5IFJlZ2lvbiAgICAgICAtLSBUdXJucyAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMuCisgICAgICAgICAgICAgICAgKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZyA0IHNwYWNlIGJsb2NrcyB0byBpbmRlbnQgUHl0aG9uIGNvZGUuKQorICAgICAgICBVbnRhYmlmeSBSZWdpb24gICAgIC0tIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSBjb3JyZW50IG51bWJlciBvZiBzcGFjZXMKKyAgICAgICAgVG9nZ2xlIHRhYnMgICAgICAgICAtLSBPcGVuIGEgZGlhbG9nIHRvIHN3aXRjaCBiZXR3ZWVuIGluZGVudGluZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VzIGFuZCB0YWJzLgorICAgICAgICBOZXcgSW5kZW50IFdpZHRoLi4uIC0tIE9wZW4gYSBkaWFsb2cgdG8gY2hhbmdlIGluZGVudCB3aWR0aC4gIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIGRlZmF1bHQgYnkgdGhlIFB5dGhvbiBjb21tdW5pdHkgaXMgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcy4KKyAgICAgICAgRm9ybWF0IFBhcmFncmFwaCAgICAtLSBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaC4gQWxsIGxpbmVzIGluIHRoZSBwYXJhZ3JhcGggd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZCB0byBsZXNzIHRoYW4gODAgY29sdW1ucy4KKyAgICAgICAgLS0tCisgICAgICAgIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgLS0gUmVtb3ZlZCBhbnkgc3BhY2UgY2hhcmFjdGVycyBhZnRlciB0aGUgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGxhc3Qgbm9uLXNwYWNlIGNoYXJhY3RlcgogCi1SdW4gTWVudSAob25seSBpbiBFZGl0IHdpbmRvdyk6CitSdW4gTWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KToKIAotCVB5dGhvbiBTaGVsbCAtLSBPcGVuIG9yIHdha2UgdXAgdGhlIFB5dGhvbiBzaGVsbCB3aW5kb3cKLQktLS0KLQlDaGVjayBNb2R1bGUgLS0gUnVuIGEgc3ludGF4IGNoZWNrIG9uIHRoZSBtb2R1bGUKLQlSdW4gTW9kdWxlICAgLS0gRXhlY3V0ZSB0aGUgY3VycmVudCBmaWxlIGluIHRoZSBfX21haW5fXyBuYW1lc3BhY2UKKyAgICAgICAgUHl0aG9uIFNoZWxsIC0tIE9wZW4gb3Igd2FrZSB1cCB0aGUgUHl0aG9uIHNoZWxsIHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgQ2hlY2sgTW9kdWxlIC0tIENoZWNrIHRoZSBzeW50YXggb2YgdGhlIG1vZHVsZSBjdXJyZW50bHkgb3BlbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvciB3aW5kb3cuICBJZiB0aGUgbW9kdWxlIGhhcyBub3QgYmVlbiBzYXZlZCBJRExFCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHByb21wdCB0aGUgdXNlciB0byBzYXZlIHRoZSBjb2RlLgorICAgICAgICBSdW4gTW9kdWxlICAgLS0gUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50LCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlIHRoZSBjdXJyZW50bHkgb3BlbiBtb2R1bGUuIElmIHRoZSBtb2R1bGUgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVlbiBzYXZlZCBJRExFIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIHNhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLgogCi1TaGVsbCBNZW51IChvbmx5IGluIFNoZWxsIHdpbmRvdyk6CitTaGVsbCBNZW51IChTaGVsbCB3aW5kb3cgb25seSk6CiAKLQlWaWV3IExhc3QgUmVzdGFydCAtLSBTY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCByZXN0YXJ0Ci0JUmVzdGFydCBTaGVsbCAgICAgLS0gUmVzdGFydCB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBhIGZyZXNoIGVudmlyb25tZW50CisgICAgICAgIFZpZXcgTGFzdCBSZXN0YXJ0IC0tIFNjcm9sbCB0aGUgc2hlbGwgd2luZG93IHRvIHRoZSBsYXN0IFNoZWxsIHJlc3RhcnQKKyAgICAgICAgUmVzdGFydCBTaGVsbCAgICAgLS0gUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50CiAKLURlYnVnIE1lbnUgKG9ubHkgaW4gU2hlbGwgd2luZG93KToKK0RlYnVnIE1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KToKIAotCUdvIHRvIEZpbGUvTGluZSAgIC0tIGxvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUKLQkJICAgICAgICAgICAgIGFuZCBsaW5lIG51bWJlciwgb3BlbiB0aGUgZmlsZSwgYW5kIHNob3cgdGhlIGxpbmUKLQlEZWJ1Z2dlciAodG9nZ2xlKSAtLSBSdW4gY29tbWFuZHMgaW4gdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlcgotCVN0YWNrIFZpZXdlciAgICAgIC0tIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24KLQlBdXRvLW9wZW4gU3RhY2sgVmlld2VyICh0b2dnbGUpIC0tIE9wZW4gc3RhY2sgdmlld2VyIG9uIHRyYWNlYmFjaworICAgICAgICBHbyB0byBGaWxlL0xpbmUgICAtLSBMb29rIGFyb3VuZCB0aGUgaW5zZXJ0IHBvaW50IGZvciBhIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsaW5lIG51bWJlciwgb3BlbiB0aGUgZmlsZSwgYW5kIHNob3cgdGhlIGxpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCB0byB2aWV3IHRoZSBzb3VyY2UgbGluZXMgcmVmZXJlbmNlZCBpbiBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24gdHJhY2ViYWNrLiAgQXZhaWxhYmxlIGluIHRoZSBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgb2YgdGhlIFNoZWxsIHdpbmRvdy4KKyAgICAgICAgRGVidWdnZXIgKHRvZ2dsZSkgLS0gVGhpcyBmZWF0dXJlIGlzIG5vdCBjb21wbGV0ZSBhbmQgY29uc2lkZXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlcmltZW50YWwuIFJ1biBjb21tYW5kcyBpbiB0aGUgc2hlbGwgdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyLgorICAgICAgICBTdGFjayBWaWV3ZXIgICAgICAtLSBTaG93IHRoZSBzdGFjayB0cmFjZWJhY2sgb2YgdGhlIGxhc3QgZXhjZXB0aW9uCisgICAgICAgIEF1dG8tb3BlbiBTdGFjayBWaWV3ZXIgKHRvZ2dsZSkgLS0gVG9nZ2xlIGF1dG9tYXRpY2FsbHkgb3BlbmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjayB2aWV3ZXIgb24gdW5oYW5kbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uCiAKLU9wdGlvbnMgTWVudToKK09wdGlvbnMgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CiAKLQlDb25maWd1cmUgSURMRSAtLSBPcGVuIGEgY29uZmlndXJhdGlvbiBkaWFsb2cuICBGb250cywgaW5kZW50YXRpb24sCisgICAgICAgIENvbmZpZ3VyZSBJRExFIC0tIE9wZW4gYSBjb25maWd1cmF0aW9uIGRpYWxvZy4gIEZvbnRzLCBpbmRlbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5YmluZGluZ3MsIGFuZCBjb2xvciB0aGVtZXMgbWF5IGJlIGFsdGVyZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIEFkZGl0aW9uYWwgSGVscAotICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQuCi0JCQkgIAotCQkJICBPbiBPUyBYIHRoaXMgbWVudSBpcyBub3QgcHJlc2VudCwgdXNlCi0JCQkgIG1lbnUgJ0lETEUgLT4gUHJlZmVyZW5jZXMuLi4nIGluc3RlYWQuCi0JLS0tCi0JQ29kZSBDb250ZXh0IC0tCSAgT3BlbiBhIHBhbmUgYXQgdGhlIHRvcCBvZiB0aGUgZWRpdCB3aW5kb3cgd2hpY2gKLQkJCSAgc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQgb2YgdGhlIHNlY3Rpb24gb2YgY29kZQotCQkJICB3aGljaCBpcyBzY3JvbGxpbmcgb2ZmIHRoZSB0b3Agb3IgdGhlIHdpbmRvdy4KLQkJCSAgKE5vdCBwcmVzZW50IGluIFNoZWxsIHdpbmRvdy4pCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIGFkZGl0aW9uYWwgSGVscAorICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQuCiAKLVdpbmRvd3MgTWVudToKKyAgICAgICAgLS0tCisgICAgICAgIENvZGUgQ29udGV4dCAodG9nZ2xlKSAtLSBPcGVuIGEgcGFuZSBhdCB0aGUgdG9wIG9mIHRoZSBlZGl0IHdpbmRvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQgb2YgdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGNvZGUgd2hpY2ggaXMgc2Nyb2xsaW5nIG9mZiB0aGUgdG9wIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiBUaGlzIGlzIG5vdCBwcmVzZW50IGluIHRoZSBTaGVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93IG9ubHkgdGhlIEVkaXRvciB3aW5kb3cuCiAKLQlab29tIEhlaWdodCAtLSB0b2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBjb25maWd1cmVkIHNpemUKLQlhbmQgbWF4aW11bSBoZWlnaHQuCi0JLS0tCi0JVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOwotCXNlbGVjdCBvbmUgdG8gYnJpbmcgaXQgdG8gdGhlIGZvcmVncm91bmQgKGRlaWNvbmlmeWluZyBpdCBpZgotCW5lY2Vzc2FyeSkuCitXaW5kb3dzIE1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpOgorCisgICAgICAgIFpvb20gSGVpZ2h0IC0tIFRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIG5vcm1hbCBzaXplICg0MHg4MCBpbml0aWFsCisgICAgICAgIHNldHRpbmcpIGFuZCBtYXhpbXVtIGhlaWdodC4gIFRoZSBpbml0aWFsIHNpemUgaXMgaW4gdGhlIENvbmZpZ3VyZQorICAgICAgICBJRExFIGRpYWxvZyB1bmRlciB0aGUgZ2VuZXJhbCB0YWIuCisgICAgICAgIC0tLQorICAgICAgICBUaGUgcmVzdCBvZiB0aGlzIG1lbnUgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBvcGVuIHdpbmRvd3M7CisgICAgICAgIHNlbGVjdCBvbmUgdG8gYnJpbmcgaXQgdG8gdGhlIGZvcmVncm91bmQgKGRlaWNvbmlmeWluZyBpdCBpZgorICAgICAgICBuZWNlc3NhcnkpLgogCiBIZWxwIE1lbnU6CiAKLQlBYm91dCBJRExFICAtLSBWZXJzaW9uLCBjb3B5cmlnaHQsIGxpY2Vuc2UsIGNyZWRpdHMKLQlJRExFIFJlYWRtZSAtLSBCYWNrZ3JvdW5kIGRpc2N1c3Npb24gYW5kIGNoYW5nZSBkZXRhaWxzCi0JLS0tCi0JSURMRSBIZWxwICAgLS0gRGlzcGxheSB0aGlzIGZpbGUKLQlQeXRob24gRG9jcyAtLSBBY2Nlc3MgbG9jYWwgUHl0aG9uIGRvY3VtZW50YXRpb24sIGlmCi0JCSAgICAgICBpbnN0YWxsZWQuICBPdGhlcndpc2UsIGFjY2VzcyB3d3cucHl0aG9uLm9yZy4KLQktLS0KLQkoQWRkaXRpb25hbCBIZWxwIFNvdXJjZXMgbWF5IGJlIGFkZGVkIGhlcmUpCisgICAgICAgIEFib3V0IElETEUgIC0tIFZlcnNpb24sIGNvcHlyaWdodCwgbGljZW5zZSwgY3JlZGl0cworICAgICAgICAtLS0KKyAgICAgICAgSURMRSBIZWxwICAgLS0gRGlzcGxheSB0aGlzIGZpbGUgd2hpY2ggaXMgYSBoZWxwIGZpbGUgZm9yIElETEUKKyAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsaW5nIHRoZSBtZW51IG9wdGlvbnMsIGJhc2ljIGVkaXRpbmcgYW5kIG5hdmlnYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvdGhlciB0aXBzLgorICAgICAgICBQeXRob24gRG9jcyAtLSBBY2Nlc3MgbG9jYWwgUHl0aG9uIGRvY3VtZW50YXRpb24sIGlmCisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZC4gIE9yIHdpbGwgc3RhcnQgYSB3ZWIgYnJvd3NlciBhbmQgb3BlbgorICAgICAgICAgICAgICAgICAgICAgICBkb2NzLnB5dGhvbi5vcmcgc2hvd2luZyB0aGUgbGF0ZXN0IFB5dGhvbiBkb2N1bWVudGF0aW9uLgorICAgICAgICAtLS0KKyAgICAgICAgQWRkaXRpb25hbCBoZWxwIHNvdXJjZXMgbWF5IGJlIGFkZGVkIGhlcmUgd2l0aCB0aGUgQ29uZmlndXJlIElETEUKKyAgICAgICAgZGlhbG9nIHVuZGVyIHRoZSBHZW5lcmFsIHRhYi4KIAotRWRpdCBjb250ZXh0IG1lbnUgKFJpZ2h0LWNsaWNrIC8gQ29udHJvbC1jbGljayBvbiBPUyBYIGluIEVkaXQgd2luZG93KToKK0VkaXRvciBjb250ZXh0IG1lbnUgKFJpZ2h0LWNsaWNrIC8gQ29udHJvbC1jbGljayBvbiBPUyBYIGluIEVkaXQgd2luZG93KToKIAotCUN1dCAgICAgICAgICAgICAgLS0gQ29weSBhIHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZCwKKyAgICAgICAgQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gZGVsZXRlIHRoZSBzZWxlY3Rpb24KLQlDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCi0JUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93Ci0JU2V0IEJyZWFrcG9pbnQgICAtLSBTZXRzIGEgYnJlYWtwb2ludCAod2hlbiBkZWJ1Z2dlciBvcGVuKQotCUNsZWFyIEJyZWFrcG9pbnQgLS0gQ2xlYXJzIHRoZSBicmVha3BvaW50IG9uIHRoYXQgbGluZQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICBTZXQgQnJlYWtwb2ludCAgIC0tIFNldHMgYSBicmVha3BvaW50LiBCcmVha3BvaW50cyBhcmUgb25seSBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgZGVidWdnZXIgaXMgb3Blbi4KKyAgICAgICAgQ2xlYXIgQnJlYWtwb2ludCAtLSBDbGVhcnMgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lCiAKIFNoZWxsIGNvbnRleHQgbWVudSAoUmlnaHQtY2xpY2sgLyBDb250cm9sLWNsaWNrIG9uIE9TIFggaW4gU2hlbGwgd2luZG93KToKIAotCUN1dCAgICAgICAgICAgICAgLS0gQ29weSBhIHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZCwKKyAgICAgICAgQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gZGVsZXRlIHRoZSBzZWxlY3Rpb24KLQlDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCi0JUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93Ci0JLS0tCi0JR28gdG8gZmlsZS9saW5lICAtLSBTYW1lIGFzIGluIERlYnVnIG1lbnUKKyAgICAgICAgQ29weSAgICAgICAgICAgICAtLSBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAorICAgICAgICBQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKKyAgICAgICAgLS0tCisgICAgICAgIEdvIHRvIGZpbGUvbGluZSAgLS0gU2FtZSBhcyBpbiBEZWJ1ZyBtZW51CiAKIAogKiogVElQUyAqKgpAQCAtMTQ0LDE1OSArMTg3LDE4MiBAQAogCiBBZGRpdGlvbmFsIEhlbHAgU291cmNlczoKIAotCVdpbmRvd3MgdXNlcnMgY2FuIEdvb2dsZSBvbiB6b3Blc2hlbGYuY2htIHRvIGFjY2VzcyBab3BlIGhlbHAgZmlsZXMgaW4KLQl0aGUgV2luZG93cyBoZWxwIGZvcm1hdC4gIFRoZSBBZGRpdGlvbmFsIEhlbHAgU291cmNlcyBmZWF0dXJlIG9mIHRoZQotCWNvbmZpZ3VyYXRpb24gR1VJIHN1cHBvcnRzIC5jaG0sIGFsb25nIHdpdGggYW55IG90aGVyIGZpbGV0eXBlcwotCXN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuICBTdXBwbHkgYSBNZW51IEl0ZW0gdGl0bGUsIGFuZCBlbnRlciB0aGUKLQlsb2NhdGlvbiBpbiB0aGUgSGVscCBGaWxlIFBhdGggc2xvdCBvZiB0aGUgTmV3IEhlbHAgU291cmNlIGRpYWxvZy4gIFVzZQotCWh0dHA6Ly8gYW5kL29yIHd3dy4gdG8gaWRlbnRpZnkgZXh0ZXJuYWwgVVJMcywgb3IgZG93bmxvYWQgdGhlIGZpbGUgYW5kCi0JYnJvd3NlIGZvciBpdHMgcGF0aCBvbiB5b3VyIG1hY2hpbmUgdXNpbmcgdGhlIEJyb3dzZSBidXR0b24uCisgICAgICAgIFdpbmRvd3MgdXNlcnMgY2FuIEdvb2dsZSBvbiB6b3Blc2hlbGYuY2htIHRvIGFjY2VzcyBab3BlIGhlbHAgZmlsZXMgaW4KKyAgICAgICAgdGhlIFdpbmRvd3MgaGVscCBmb3JtYXQuICBUaGUgQWRkaXRpb25hbCBIZWxwIFNvdXJjZXMgZmVhdHVyZSBvZiB0aGUKKyAgICAgICAgY29uZmlndXJhdGlvbiBHVUkgc3VwcG9ydHMgLmNobSwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXR5cGVzCisgICAgICAgIHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuICBTdXBwbHkgYSBNZW51IEl0ZW0gdGl0bGUsIGFuZCBlbnRlciB0aGUKKyAgICAgICAgbG9jYXRpb24gaW4gdGhlIEhlbHAgRmlsZSBQYXRoIHNsb3Qgb2YgdGhlIE5ldyBIZWxwIFNvdXJjZSBkaWFsb2cuICBVc2UKKyAgICAgICAgaHR0cDovLyBhbmQvb3Igd3d3LiB0byBpZGVudGlmeSBleHRlcm5hbCBVUkxzLCBvciBkb3dubG9hZCB0aGUgZmlsZSBhbmQKKyAgICAgICAgYnJvd3NlIGZvciBpdHMgcGF0aCBvbiB5b3VyIG1hY2hpbmUgdXNpbmcgdGhlIEJyb3dzZSBidXR0b24uCiAKLQlBbGwgdXNlcnMgY2FuIGFjY2VzcyB0aGUgZXh0ZW5zaXZlIHNvdXJjZXMgb2YgaGVscCwgaW5jbHVkaW5nCi0JdHV0b3JpYWxzLCBhdmFpbGFibGUgYXQgd3d3LnB5dGhvbi5vcmcvZG9jLiAgU2VsZWN0ZWQgVVJMcyBjYW4gYmUgYWRkZWQKLQlvciByZW1vdmVkIGZyb20gdGhlIEhlbHAgbWVudSBhdCBhbnkgdGltZSB1c2luZyBDb25maWd1cmUgSURMRS4KKyAgICAgICAgQWxsIHVzZXJzIGNhbiBhY2Nlc3MgdGhlIGV4dGVuc2l2ZSBzb3VyY2VzIG9mIGhlbHAsIGluY2x1ZGluZworICAgICAgICB0dXRvcmlhbHMsIGF2YWlsYWJsZSBhdCBkb2NzLnB5dGhvbi5vcmcuICBTZWxlY3RlZCBVUkxzIGNhbiBiZSBhZGRlZAorICAgICAgICBvciByZW1vdmVkIGZyb20gdGhlIEhlbHAgbWVudSBhdCBhbnkgdGltZSB1c2luZyBDb25maWd1cmUgSURMRS4KIAogQmFzaWMgZWRpdGluZyBhbmQgbmF2aWdhdGlvbjoKIAotCUJhY2tzcGFjZSBkZWxldGVzIGNoYXIgdG8gdGhlIGxlZnQ7IERFTCBkZWxldGVzIGNoYXIgdG8gdGhlIHJpZ2h0LgotCUNvbnRyb2wtYmFja3NwYWNlIGRlbGV0ZXMgd29yZCBsZWZ0LCBDb250cm9sLURFTCBkZWxldGVzIHdvcmQgcmlnaHQuCi0JQXJyb3cga2V5cyBhbmQgUGFnZSBVcC9Eb3duIG1vdmUgYXJvdW5kLgotCUNvbnRyb2wtbGVmdC9yaWdodCBBcnJvdyBtb3ZlcyBieSB3b3JkcyBpbiBhIHN0cmFuZ2UgYnV0IHVzZWZ1bCB3YXkuCi0JSG9tZS9FbmQgZ28gdG8gYmVnaW4vZW5kIG9mIGxpbmUuCi0JQ29udHJvbC1Ib21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgZmlsZS4KLQlTb21lIHVzZWZ1bCBFbWFjcyBiaW5kaW5ncyBhcmUgaW5oZXJpdGVkIGZyb20gVGNsL1RrOgotCQlDb250cm9sLWEgICAgIGJlZ2lubmluZyBvZiBsaW5lCi0JCUNvbnRyb2wtZSAgICAgZW5kIG9mIGxpbmUKLQkJQ29udHJvbC1rICAgICBraWxsIGxpbmUgKGJ1dCBkb2Vzbid0IHB1dCBpdCBpbiBjbGlwYm9hcmQpCi0JCUNvbnRyb2wtbCAgICAgY2VudGVyIHdpbmRvdyBhcm91bmQgdGhlIGluc2VydGlvbiBwb2ludAotCVN0YW5kYXJkIFdpbmRvd3MgYmluZGluZ3MgbWF5IHdvcmsgb24gdGhhdCBwbGF0Zm9ybS4KLQlLZXliaW5kaW5ncyBhcmUgc2VsZWN0ZWQgaW4gdGhlIFNldHRpbmdzIERpYWxvZywgbG9vayB0aGVyZS4KKyAgICAgICAgQmFja3NwYWNlIGRlbGV0ZXMgY2hhciB0byB0aGUgbGVmdDsgREVMIGRlbGV0ZXMgY2hhciB0byB0aGUgcmlnaHQuCisgICAgICAgIENvbnRyb2wtYmFja3NwYWNlIGRlbGV0ZXMgd29yZCBsZWZ0LCBDb250cm9sLURFTCBkZWxldGVzIHdvcmQgcmlnaHQuCisgICAgICAgIEFycm93IGtleXMgYW5kIFBhZ2UgVXAvRG93biBtb3ZlIGFyb3VuZC4KKyAgICAgICAgQ29udHJvbC1sZWZ0L3JpZ2h0IEFycm93IG1vdmVzIGJ5IHdvcmRzIGluIGEgc3RyYW5nZSBidXQgdXNlZnVsIHdheS4KKyAgICAgICAgSG9tZS9FbmQgZ28gdG8gYmVnaW4vZW5kIG9mIGxpbmUuCisgICAgICAgIENvbnRyb2wtSG9tZS9FbmQgZ28gdG8gYmVnaW4vZW5kIG9mIGZpbGUuCisgICAgICAgIFNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6CisgICAgICAgICAgICAgICAgQ29udHJvbC1hICAgICBiZWdpbm5pbmcgb2YgbGluZQorICAgICAgICAgICAgICAgIENvbnRyb2wtZSAgICAgZW5kIG9mIGxpbmUKKyAgICAgICAgICAgICAgICBDb250cm9sLWsgICAgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKKyAgICAgICAgICAgICAgICBDb250cm9sLWwgICAgIGNlbnRlciB3aW5kb3cgYXJvdW5kIHRoZSBpbnNlcnRpb24gcG9pbnQKKyAgICAgICAgU3RhbmRhcmQga2V5YmluZGluZ3MgKGxpa2UgQ29udHJvbC1jIHRvIGNvcHkgYW5kIENvbnRyb2wtdiB0bworICAgICAgICBwYXN0ZSkgbWF5IHdvcmsuICBLZXliaW5kaW5ncyBhcmUgc2VsZWN0ZWQgaW4gdGhlIENvbmZpZ3VyZSBJRExFCisgICAgICAgIGRpYWxvZy4KIAogQXV0b21hdGljIGluZGVudGF0aW9uOgogCi0JQWZ0ZXIgYSBibG9jay1vcGVuaW5nIHN0YXRlbWVudCwgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCBieSA0IHNwYWNlcwotCShpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBieSBvbmUgdGFiKS4gIEFmdGVyIGNlcnRhaW4ga2V5d29yZHMKLQkoYnJlYWssIHJldHVybiBldGMuKSB0aGUgbmV4dCBsaW5lIGlzIGRlZGVudGVkLiAgSW4gbGVhZGluZwotCWluZGVudGF0aW9uLCBCYWNrc3BhY2UgZGVsZXRlcyB1cCB0byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gIFRhYgotCWluc2VydHMgc3BhY2VzIChpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBvbmUgdGFiKSwgbnVtYmVyIGRlcGVuZHMgb24KLQlJbmRlbnQgV2lkdGguICAoTi5CLiBDdXJyZW50bHkgdGFicyBhcmUgcmVzdHJpY3RlZCB0byBmb3VyIHNwYWNlcyBkdWUKLQl0byBUY2wvVGsgaXNzdWVzLikKKyAgICAgICAgQWZ0ZXIgYSBibG9jay1vcGVuaW5nIHN0YXRlbWVudCwgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCBieSA0IHNwYWNlcworICAgICAgICAoaW4gdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cgYnkgb25lIHRhYikuICBBZnRlciBjZXJ0YWluIGtleXdvcmRzCisgICAgICAgIChicmVhaywgcmV0dXJuIGV0Yy4pIHRoZSBuZXh0IGxpbmUgaXMgZGVkZW50ZWQuICBJbiBsZWFkaW5nCisgICAgICAgIGluZGVudGF0aW9uLCBCYWNrc3BhY2UgZGVsZXRlcyB1cCB0byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gIFRhYgorICAgICAgICBpbnNlcnRzIHNwYWNlcyAoaW4gdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cgb25lIHRhYiksIG51bWJlciBkZXBlbmRzIG9uCisgICAgICAgIEluZGVudCBXaWR0aC4gQ3VycmVudGx5IHRhYnMgYXJlIHJlc3RyaWN0ZWQgdG8gZm91ciBzcGFjZXMgZHVlCisgICAgICAgIHRvIFRjbC9UayBsaW1pdGF0aW9ucy4KIAogICAgICAgICBTZWUgYWxzbyB0aGUgaW5kZW50L2RlZGVudCByZWdpb24gY29tbWFuZHMgaW4gdGhlIGVkaXQgbWVudS4KIAogQ29tcGxldGlvbnM6CiAKLQlDb21wbGV0aW9ucyBhcmUgc3VwcGxpZWQgZm9yIGZ1bmN0aW9ucywgY2xhc3NlcywgYW5kIGF0dHJpYnV0ZXMgb2YKLQljbGFzc2VzLCBib3RoIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQuICBDb21wbGV0aW9ucyBhcmUgYWxzbyBwcm92aWRlZAotCWZvciBmaWxlbmFtZXMuCisgICAgICAgIENvbXBsZXRpb25zIGFyZSBzdXBwbGllZCBmb3IgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgYXR0cmlidXRlcyBvZgorICAgICAgICBjbGFzc2VzLCBib3RoIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQuICBDb21wbGV0aW9ucyBhcmUgYWxzbyBwcm92aWRlZAorICAgICAgICBmb3IgZmlsZW5hbWVzLgogCi0JVGhlIEF1dG9Db21wbGV0ZVdpbmRvdyAoQUNXKSB3aWxsIG9wZW4gYWZ0ZXIgYSBwcmVkZWZpbmVkIGRlbGF5Ci0JKGRlZmF1bHQgaXMgdHdvIHNlY29uZHMpIGFmdGVyIGEgJy4nIG9yIChpbiBhIHN0cmluZykgYW4gb3Muc2VwIGlzCi0JdHlwZWQuICBJZiBhZnRlciBvbmUgb2YgdGhvc2UgY2hhcmFjdGVycyAocGx1cyB6ZXJvIG9yIG1vcmUgb3RoZXIKLQljaGFyYWN0ZXJzKSB5b3UgdHlwZSBhIFRhYiB0aGUgQUNXIHdpbGwgb3BlbiBpbW1lZGlhdGVseSBpZiBhIHBvc3NpYmxlCi0JY29udGludWF0aW9uIGlzIGZvdW5kLgorICAgICAgICBUaGUgQXV0b0NvbXBsZXRlV2luZG93IChBQ1cpIHdpbGwgb3BlbiBhZnRlciBhIHByZWRlZmluZWQgZGVsYXkKKyAgICAgICAgKGRlZmF1bHQgaXMgdHdvIHNlY29uZHMpIGFmdGVyIGEgJy4nIG9yIChpbiBhIHN0cmluZykgYW4gb3Muc2VwIGlzCisgICAgICAgIHR5cGVkLiAgSWYgYWZ0ZXIgb25lIG9mIHRob3NlIGNoYXJhY3RlcnMgKHBsdXMgemVybyBvciBtb3JlIG90aGVyCisgICAgICAgIGNoYXJhY3RlcnMpIGEgdGFiIGlzIHR5cGVkIHRoZSBBQ1cgd2lsbCBvcGVuIGltbWVkaWF0ZWx5IGlmIGEgcG9zc2libGUKKyAgICAgICAgY29udGludWF0aW9uIGlzIGZvdW5kLgogCi0JSWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29tcGxldGlvbiBmb3IgdGhlIGNoYXJhY3RlcnMgZW50ZXJlZCwgYQotCVRhYiB3aWxsIHN1cHBseSB0aGF0IGNvbXBsZXRpb24gd2l0aG91dCBvcGVuaW5nIHRoZSBBQ1cuCisgICAgICAgIElmIHRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIGNvbXBsZXRpb24gZm9yIHRoZSBjaGFyYWN0ZXJzIGVudGVyZWQsIGEKKyAgICAgICAgdGFiIHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy4KIAotCSdTaG93IENvbXBsZXRpb25zJyB3aWxsIGZvcmNlIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3cuICBJbiBhbiBlbXB0eQotCXN0cmluZywgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9uIGEKLQlibGFuayBsaW5lLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIGFuZAotCWNsYXNzZXMgaW4gdGhlIGN1cnJlbnQgbmFtZSBzcGFjZXMsIHBsdXMgYW55IG1vZHVsZXMgaW1wb3J0ZWQuICBJZiBzb21lCi0JY2hhcmFjdGVycyBoYXZlIGJlZW4gZW50ZXJlZCwgdGhlIEFDVyB3aWxsIGF0dGVtcHQgdG8gYmUgbW9yZSBzcGVjaWZpYy4KKyAgICAgICAgJ1Nob3cgQ29tcGxldGlvbnMnIHdpbGwgZm9yY2Ugb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdywgYnkgZGVmYXVsdCB0aGUKKyAgICAgICAgQ29udHJvbC1zcGFjZSBrZXlzIHdpbGwgb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gIEluIGFuIGVtcHR5CisgICAgICAgIHN0cmluZywgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9uIGEKKyAgICAgICAgYmxhbmsgbGluZSwgaXQgd2lsbCBjb250YWluIHRoZSBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQKKyAgICAgICAgY2xhc3NlcyBpbiB0aGUgY3VycmVudCBuYW1lIHNwYWNlcywgcGx1cyBhbnkgbW9kdWxlcyBpbXBvcnRlZC4gIElmIHNvbWUKKyAgICAgICAgY2hhcmFjdGVycyBoYXZlIGJlZW4gZW50ZXJlZCwgdGhlIEFDVyB3aWxsIGF0dGVtcHQgdG8gYmUgbW9yZSBzcGVjaWZpYy4KIAotCUlmIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGlzIHR5cGVkLCB0aGUgQUNXIHNlbGVjdGlvbiB3aWxsIGp1bXAgdG8gdGhlCi0JZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuIEVudGVyaW5nIGEgVGFiIHdpbGwgY2F1c2UKLQl0aGUgbG9uZ2VzdCBub24tYW1iaWd1b3VzIG1hdGNoIHRvIGJlIGVudGVyZWQgaW4gdGhlIEVkaXQgd2luZG93IG9yCi0JU2hlbGwuICBUd28gVGFicyBpbiBhIHJvdyB3aWxsIHN1cHBseSB0aGUgY3VycmVudCBBQ1cgc2VsZWN0aW9uLCBhcwotCXdpbGwgUmV0dXJuIG9yIGEgZG91YmxlIGNsaWNrLiAgQ3Vyc29yIGtleXMsIFBhZ2UgVXAvRG93biwgbW91c2UKLQlzZWxlY3Rpb24sIGFuZCB0aGUgc2Nyb2xsd2hlZWwgYWxsIG9wZXJhdGUgb24gdGhlIEFDVy4KKyAgICAgICAgSWYgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaXMgdHlwZWQsIHRoZSBBQ1cgc2VsZWN0aW9uIHdpbGwganVtcCB0byB0aGUKKyAgICAgICAgZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuIEVudGVyaW5nIGEgdGFiIHdpbGwgY2F1c2UKKyAgICAgICAgdGhlIGxvbmdlc3Qgbm9uLWFtYmlndW91cyBtYXRjaCB0byBiZSBlbnRlcmVkIGluIHRoZSBFZGl0IHdpbmRvdyBvcgorICAgICAgICBTaGVsbC4gIFR3byB0YWJzIGluIGEgcm93IHdpbGwgc3VwcGx5IHRoZSBjdXJyZW50IEFDVyBzZWxlY3Rpb24sIGFzCisgICAgICAgIHdpbGwgcmV0dXJuIG9yIGEgZG91YmxlIGNsaWNrLiAgQ3Vyc29yIGtleXMsIFBhZ2UgVXAvRG93biwgbW91c2UKKyAgICAgICAgc2VsZWN0aW9uLCBhbmQgdGhlIHNjcm9sbCB3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLgogCi0JJ0hpZGRlbicgYXR0cmlidXRlcyBjYW4gYmUgYWNjZXNzZWQgYnkgdHlwaW5nIHRoZSBiZWdpbm5pbmcgb2YgaGlkZGVuCi0JbmFtZSBhZnRlciBhICcuJy4gIGUuZy4gJ18nLiAgVGhpcyBhbGxvd3MgYWNjZXNzIHRvIG1vZHVsZXMgd2l0aAotCSdfX2FsbF9fJyBzZXQsIG9yIHRvIGNsYXNzLXByaXZhdGUgYXR0cmlidXRlcy4KKyAgICAgICAgIkhpZGRlbiIgYXR0cmlidXRlcyBjYW4gYmUgYWNjZXNzZWQgYnkgdHlwaW5nIHRoZSBiZWdpbm5pbmcgb2YgaGlkZGVuCisgICAgICAgIG5hbWUgYWZ0ZXIgYSAnLicsICBlLmcuICdfJy4gIFRoaXMgYWxsb3dzIGFjY2VzcyB0byBtb2R1bGVzIHdpdGgKKyAgICAgICAgJ19fYWxsX18nIHNldCwgb3IgdG8gY2xhc3MtcHJpdmF0ZSBhdHRyaWJ1dGVzLgogCi0JQ29tcGxldGlvbnMgYW5kIHRoZSAnRXhwYW5kIFdvcmQnIGZhY2lsaXR5IGNhbiBzYXZlIGEgbG90IG9mIHR5cGluZyEKKyAgICAgICAgQ29tcGxldGlvbnMgYW5kIHRoZSAnRXhwYW5kIFdvcmQnIGZhY2lsaXR5IGNhbiBzYXZlIGEgbG90IG9mIHR5cGluZyEKIAotCUNvbXBsZXRpb25zIGFyZSBjdXJyZW50bHkgbGltaXRlZCB0byB0aG9zZSBpbiB0aGUgbmFtZXNwYWNlcy4gIE5hbWVzIGluCi0JYW4gRWRpdCB3aW5kb3cgd2hpY2ggYXJlIG5vdCB2aWEgX19tYWluX18gb3Igc3lzLm1vZHVsZXMgd2lsbCBub3QgYmUKLQlmb3VuZC4gIFJ1biB0aGUgbW9kdWxlIG9uY2Ugd2l0aCB5b3VyIGltcG9ydHMgdG8gY29ycmVjdCB0aGlzCi0Jc2l0dWF0aW9uLiAgTm90ZSB0aGF0IElETEUgaXRzZWxmIHBsYWNlcyBxdWl0ZSBhIGZldyBtb2R1bGVzIGluCi0Jc3lzLm1vZHVsZXMsIHNvIG11Y2ggY2FuIGJlIGZvdW5kIGJ5IGRlZmF1bHQsIGUuZy4gdGhlIHJlIG1vZHVsZS4KKyAgICAgICAgQ29tcGxldGlvbnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRob3NlIGluIHRoZSBuYW1lc3BhY2VzLiAgTmFtZXMgaW4KKyAgICAgICAgYW4gRWRpdG9yIHdpbmRvdyB3aGljaCBhcmUgbm90IHZpYSBfX21haW5fXyBvciBzeXMubW9kdWxlcyB3aWxsIG5vdCBiZQorICAgICAgICBmb3VuZC4gIFJ1biB0aGUgbW9kdWxlIG9uY2Ugd2l0aCB5b3VyIGltcG9ydHMgdG8gY29ycmVjdCB0aGlzCisgICAgICAgIHNpdHVhdGlvbi4gIE5vdGUgdGhhdCBJRExFIGl0c2VsZiBwbGFjZXMgcXVpdGUgYSBmZXcgbW9kdWxlcyBpbgorICAgICAgICBzeXMubW9kdWxlcywgc28gbXVjaCBjYW4gYmUgZm91bmQgYnkgZGVmYXVsdCwgZS5nLiB0aGUgcmUgbW9kdWxlLgogCi0JSWYgeW91IGRvbid0IGxpa2UgdGhlIEFDVyBwb3BwaW5nIHVwIHVuYmlkZGVuLCBzaW1wbHkgbWFrZSB0aGUgZGVsYXkKLQlsb25nZXIgb3IgZGlzYWJsZSB0aGUgZXh0ZW5zaW9uLiAgT1RPSCwgeW91IGNvdWxkIG1ha2UgdGhlIGRlbGF5IHplcm8uCi0KLQlZb3UgY291bGQgYWxzbyBzd2l0Y2ggb2ZmIHRoZSBDYWxsVGlwcyBleHRlbnNpb24uICAoV2Ugd2lsbCBiZSBhZGRpbmcKLQlhIGRlbGF5IHRvIHRoZSBjYWxsIHRpcCB3aW5kb3cuKQorICAgICAgICBJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQorICAgICAgICBsb25nZXIgb3IgZGlzYWJsZSB0aGUgZXh0ZW5zaW9uLiAgT3IgYW5vdGhlciBvcHRpb24gaXMgdGhlIGRlbGF5IGNvdWxkCisgICAgICAgIGJlIHNldCB0byB6ZXJvLiBBbm90aGVyIGFsdGVybmF0aXZlIHRvIHByZXZlbnRpbmcgQUNXIHBvcHVwcyBpcyB0bworICAgICAgICBkaXNhYmxlIHRoZSBjYWxsIHRpcHMgZXh0ZW5zaW9uLgogCiBQeXRob24gU2hlbGwgd2luZG93OgogCi0JQ29udHJvbC1jIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQuCi0JQ29udHJvbC1kIHNlbmRzIGVuZC1vZi1maWxlOyBjbG9zZXMgd2luZG93IGlmIHR5cGVkIGF0ID4+PiBwcm9tcHQuCisgICAgICAgIENvbnRyb2wtYyBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kLgorICAgICAgICBDb250cm9sLWQgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgPj4+IHByb21wdC4KKyAgICAgICAgQWx0LS8gZXhwYW5kIHdvcmQgaXMgYWxzbyB1c2VmdWwgdG8gcmVkdWNlIHR5cGluZy4KIAogICAgIENvbW1hbmQgaGlzdG9yeToKIAotCUFsdC1wIHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQuCi0JQWx0LW4gcmV0cmlldmVzIG5leHQuCi0JICAgICAgKFRoZXNlIGFyZSBDb250cm9sLXAsIENvbnRyb2wtbiBvbiBPUyBYKQotCVJldHVybiB3aGlsZSBjdXJzb3IgaXMgb24gYSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQuCi0JRXhwYW5kIHdvcmQgaXMgYWxzbyB1c2VmdWwgdG8gcmVkdWNlIHR5cGluZy4KKyAgICAgICAgQWx0LXAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZC4gT24gT1MgWAorICAgICAgICB1c2UgQ29udHJvbC1wLgorICAgICAgICBBbHQtbiByZXRyaWV2ZXMgbmV4dC4gT24gT1MgWCB1c2UgQ29udHJvbC1uLgorICAgICAgICBSZXR1cm4gd2hpbGUgY3Vyc29yIGlzIG9uIGEgcHJldmlvdXMgY29tbWFuZCByZXRyaWV2ZXMgdGhhdCBjb21tYW5kLgogCiAgICAgU3ludGF4IGNvbG9yczoKIAotCVRoZSBjb2xvcmluZyBpcyBhcHBsaWVkIGluIGEgYmFja2dyb3VuZCAidGhyZWFkIiwgc28geW91IG1heQotCW9jY2FzaW9uYWxseSBzZWUgdW5jb2xvcml6ZWQgdGV4dC4gIFRvIGNoYW5nZSB0aGUgY29sb3IKLQlzY2hlbWUsIHVzZSB0aGUgQ29uZmlndXJlIElETEUgLyBIaWdobGlnaHRpbmcgZGlhbG9nLgorICAgICAgICBUaGUgY29sb3JpbmcgaXMgYXBwbGllZCBpbiBhIGJhY2tncm91bmQgInRocmVhZCIsIHNvIHlvdSBtYXkKKyAgICAgICAgb2NjYXNpb25hbGx5IHNlZSB1bmNvbG9yaXplZCB0ZXh0LiAgVG8gY2hhbmdlIHRoZSBjb2xvcgorICAgICAgICBzY2hlbWUsIHVzZSB0aGUgQ29uZmlndXJlIElETEUgLyBIaWdobGlnaHRpbmcgZGlhbG9nLgogCiAgICAgUHl0aG9uIGRlZmF1bHQgc3ludGF4IGNvbG9yczoKIAotCUtleXdvcmRzCW9yYW5nZQotCUJ1aWx0aW5zCXJveWFsIHB1cnBsZQotCVN0cmluZ3MJCWdyZWVuCi0JQ29tbWVudHMJcmVkCi0JRGVmaW5pdGlvbnMJYmx1ZQorICAgICAgICBLZXl3b3JkcyAgICAgICAgb3JhbmdlCisgICAgICAgIEJ1aWx0aW5zICAgICAgICByb3lhbCBwdXJwbGUKKyAgICAgICAgU3RyaW5ncyAgICAgICAgIGdyZWVuCisgICAgICAgIENvbW1lbnRzICAgICAgICByZWQKKyAgICAgICAgRGVmaW5pdGlvbnMgICAgIGJsdWUKIAogICAgIFNoZWxsIGRlZmF1bHQgY29sb3JzOgogCi0JQ29uc29sZSBvdXRwdXQJYnJvd24KLQlzdGRvdXQJCWJsdWUKLQlzdGRlcnIJCXJlZAotCXN0ZGluCQlibGFjaworICAgICAgICBDb25zb2xlIG91dHB1dCAgYnJvd24KKyAgICAgICAgc3Rkb3V0ICAgICAgICAgIGJsdWUKKyAgICAgICAgc3RkZXJyICAgICAgICAgIHJlZAorICAgICAgICBzdGRpbiAgICAgICAgICAgYmxhY2sKIAogT3RoZXIgcHJlZmVyZW5jZXM6CiAKLQlUaGUgZm9udCBwcmVmZXJlbmNlcywga2V5YmluZGluZywgYW5kIHN0YXJ0dXAgcHJlZmVyZW5jZXMgY2FuCi0JYmUgY2hhbmdlZCB1c2luZyB0aGUgU2V0dGluZ3MgZGlhbG9nLgorICAgICAgICBUaGUgZm9udCBwcmVmZXJlbmNlcywgaGlnaGxpZ2h0aW5nLCBrZXlzLCBhbmQgZ2VuZXJhbCBwcmVmZXJlbmNlcyBjYW4KKyAgICAgICAgYmUgY2hhbmdlZCB2aWEgdGhlIENvbmZpZ3VyZSBJRExFIG1lbnUgb3B0aW9uLiAgQmUgc3VyZSB0byBub3RlIHRoYXQKKyAgICAgICAga2V5cyBjYW4gYmUgdXNlciBkZWZpbmVkLCBJRExFIHNoaXBzIHdpdGggZm91ciBidWlsdCBpbiBrZXkgc2V0cy4gSW4KKyAgICAgICAgYWRkaXRpb24gYSB1c2VyIGNhbiBjcmVhdGUgYSBjdXN0b20ga2V5IHNldCBpbiB0aGUgQ29uZmlndXJlIElETEUKKyAgICAgICAgZGlhbG9nIHVuZGVyIHRoZSBrZXlzIHRhYi4KIAogQ29tbWFuZCBsaW5lIHVzYWdlOgogCi0JRW50ZXIgaWRsZSAtaCBhdCB0aGUgY29tbWFuZCBwcm9tcHQgdG8gZ2V0IGEgdXNhZ2UgbWVzc2FnZS4KKyAgICAgICAgRW50ZXIgaWRsZSAtaCBhdCB0aGUgY29tbWFuZCBwcm9tcHQgdG8gZ2V0IGEgdXNhZ2UgbWVzc2FnZS4KIAotUnVubmluZyB3aXRob3V0IGEgc3VicHJvY2VzczoKKyAgICAgICAgaWRsZS5weSBbLWMgY29tbWFuZF0gWy1kXSBbLWVdIFstc10gWy10IHRpdGxlXSBbYXJnXSAuLi4KIAotCUlmIElETEUgaXMgc3RhcnRlZCB3aXRoIHRoZSAtbiBjb21tYW5kIGxpbmUgc3dpdGNoIGl0IHdpbGwgcnVuIGluIGEKLQlzaW5nbGUgcHJvY2VzcyBhbmQgd2lsbCBub3QgY3JlYXRlIHRoZSBzdWJwcm9jZXNzIHdoaWNoIHJ1bnMgdGhlIFJQQwotCVB5dGhvbiBleGVjdXRpb24gc2VydmVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIFB5dGhvbiBjYW5ub3QgY3JlYXRlCi0JdGhlIHN1YnByb2Nlc3Mgb3IgdGhlIFJQQyBzb2NrZXQgaW50ZXJmYWNlIG9uIHlvdXIgcGxhdGZvcm0uICBIb3dldmVyLAotCWluIHRoaXMgbW9kZSB1c2VyIGNvZGUgaXMgbm90IGlzb2xhdGVkIGZyb20gSURMRSBpdHNlbGYuICBBbHNvLCB0aGUKLQllbnZpcm9ubWVudCBpcyBub3QgcmVzdGFydGVkIHdoZW4gUnVuL1J1biBNb2R1bGUgKEY1KSBpcyBzZWxlY3RlZC4gIElmCi0JeW91ciBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkLCB5b3UgbXVzdCByZWxvYWQoKSB0aGUgYWZmZWN0ZWQgbW9kdWxlcyBhbmQKLQlyZS1pbXBvcnQgYW55IHNwZWNpZmljIGl0ZW1zIChlLmcuIGZyb20gZm9vIGltcG9ydCBiYXopIGlmIHRoZSBjaGFuZ2VzCi0JYXJlIHRvIHRha2UgZWZmZWN0LiAgRm9yIHRoZXNlIHJlYXNvbnMsIGl0IGlzIHByZWZlcmFibGUgdG8gcnVuIElETEUKLQl3aXRoIHRoZSBkZWZhdWx0IHN1YnByb2Nlc3MgaWYgYXQgYWxsIHBvc3NpYmxlLgorICAgICAgICAtYyBjb21tYW5kICBydW4gdGhpcyBjb21tYW5kCisgICAgICAgIC1kICAgICAgICAgIGVuYWJsZSBkZWJ1Z2dlcgorICAgICAgICAtZSAgICAgICAgICBlZGl0IG1vZGU7IGFyZ3VtZW50cyBhcmUgZmlsZXMgdG8gYmUgZWRpdGVkCisgICAgICAgIC1zICAgICAgICAgIHJ1biAkSURMRVNUQVJUVVAgb3IgJFBZVEhPTlNUQVJUVVAgZmlyc3QKKyAgICAgICAgLXQgdGl0bGUgICAgc2V0IHRpdGxlIG9mIHNoZWxsIHdpbmRvdworCisgICAgICAgIElmIHRoZXJlIGFyZSBhcmd1bWVudHM6CisgICAgICAgIDEuIElmIC1lIGlzIHVzZWQsIGFyZ3VtZW50cyBhcmUgZmlsZXMgb3BlbmVkIGZvciBlZGl0aW5nIGFuZCBzeXMuYXJndgorICAgICAgICAgICByZWZsZWN0cyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBJRExFIGl0c2VsZi4KKyAgICAgICAgMi4gT3RoZXJ3aXNlLCBpZiAtYyBpcyB1c2VkLCBhbGwgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4KKyAgICAgICAgICAgc3lzLmFyZ3ZbMTouLi5dLCB3aXRoIHN5cy5hcmd2WzBdIHNldCB0byAtYy4KKyAgICAgICAgMy4gT3RoZXJ3aXNlLCBpZiBuZWl0aGVyIC1lIG5vciAtYyBpcyB1c2VkLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYQorICAgICAgICAgICBzY3JpcHQgd2hpY2ggaXMgZXhlY3V0ZWQgd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyBpbgorICAgICAgICAgICBzeXMuYXJndlsxOi4uLl0gIGFuZCBzeXMuYXJndlswXSBzZXQgdG8gdGhlIHNjcmlwdCBuYW1lLiAgSWYgdGhlCisgICAgICAgICAgIHNjcmlwdCBuYW1lIGlzIC0sIG5vIHNjcmlwdCBpcyBleGVjdXRlZCBidXQgYW4gaW50ZXJhY3RpdmUgUHl0aG9uCisgICAgICAgICAgIHNlc3Npb24gaXMgc3RhcnRlZDsgdGhlIGFyZ3VtZW50cyBhcmUgc3RpbGwgYXZhaWxhYmxlIGluIHN5cy5hcmd2LgorCitSdW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzOiAoREVQUkVDQVRFRCBpbiBQeXRob24gMy40IHNlZSBJc3N1ZSAxNjEyMykKKworICAgICAgICBJZiBJRExFIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgLW4gY29tbWFuZCBsaW5lIHN3aXRjaCBpdCB3aWxsIHJ1biBpbiBhCisgICAgICAgIHNpbmdsZSBwcm9jZXNzIGFuZCB3aWxsIG5vdCBjcmVhdGUgdGhlIHN1YnByb2Nlc3Mgd2hpY2ggcnVucyB0aGUgUlBDCisgICAgICAgIFB5dGhvbiBleGVjdXRpb24gc2VydmVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIFB5dGhvbiBjYW5ub3QgY3JlYXRlCisgICAgICAgIHRoZSBzdWJwcm9jZXNzIG9yIHRoZSBSUEMgc29ja2V0IGludGVyZmFjZSBvbiB5b3VyIHBsYXRmb3JtLiAgSG93ZXZlciwKKyAgICAgICAgaW4gdGhpcyBtb2RlIHVzZXIgY29kZSBpcyBub3QgaXNvbGF0ZWQgZnJvbSBJRExFIGl0c2VsZi4gIEFsc28sIHRoZQorICAgICAgICBlbnZpcm9ubWVudCBpcyBub3QgcmVzdGFydGVkIHdoZW4gUnVuL1J1biBNb2R1bGUgKEY1KSBpcyBzZWxlY3RlZC4gIElmCisgICAgICAgIHlvdXIgY29kZSBoYXMgYmVlbiBtb2RpZmllZCwgeW91IG11c3QgcmVsb2FkKCkgdGhlIGFmZmVjdGVkIG1vZHVsZXMgYW5kCisgICAgICAgIHJlLWltcG9ydCBhbnkgc3BlY2lmaWMgaXRlbXMgKGUuZy4gZnJvbSBmb28gaW1wb3J0IGJheikgaWYgdGhlIGNoYW5nZXMKKyAgICAgICAgYXJlIHRvIHRha2UgZWZmZWN0LiAgRm9yIHRoZXNlIHJlYXNvbnMsIGl0IGlzIHByZWZlcmFibGUgdG8gcnVuIElETEUKKyAgICAgICAgd2l0aCB0aGUgZGVmYXVsdCBzdWJwcm9jZXNzIGlmIGF0IGFsbCBwb3NzaWJsZS4KIAogRXh0ZW5zaW9uczoKIAotCUlETEUgY29udGFpbnMgYW4gZXh0ZW5zaW9uIGZhY2lsaXR5LiAgU2VlIHRoZSBiZWdpbm5pbmcgb2YKLQljb25maWctZXh0ZW5zaW9ucy5kZWYgaW4gdGhlIGlkbGVsaWIgZGlyZWN0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgotCVRoZSBkZWZhdWx0IGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseToKKyAgICAgICAgSURMRSBjb250YWlucyBhbiBleHRlbnNpb24gZmFjaWxpdHkuICBTZWUgdGhlIGJlZ2lubmluZyBvZgorICAgICAgICBjb25maWctZXh0ZW5zaW9ucy5kZWYgaW4gdGhlIGlkbGVsaWIgZGlyZWN0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorICAgICAgICBUaGUgZGVmYXVsdCBleHRlbnNpb25zIGFyZSBjdXJyZW50bHk6CiAKLQkJRm9ybWF0UGFyYWdyYXBoCi0JCUF1dG9FeHBhbmQKLQkJWm9vbUhlaWdodAotCQlTY3JpcHRCaW5kaW5nCi0JCUNhbGxUaXBzCi0JCVBhcmVuTWF0Y2gKLQkJQXV0b0NvbXBsZXRlCi0JCUNvZGVDb250ZXh0CisgICAgICAgICAgICAgICAgRm9ybWF0UGFyYWdyYXBoCisgICAgICAgICAgICAgICAgQXV0b0V4cGFuZAorICAgICAgICAgICAgICAgIFpvb21IZWlnaHQKKyAgICAgICAgICAgICAgICBTY3JpcHRCaW5kaW5nCisgICAgICAgICAgICAgICAgQ2FsbFRpcHMKKyAgICAgICAgICAgICAgICBQYXJlbk1hdGNoCisgICAgICAgICAgICAgICAgQXV0b0NvbXBsZXRlCisgICAgICAgICAgICAgICAgQ29kZUNvbnRleHQKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2NhbGx0aXBzLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY2FsbHRpcHMucHkKaW5kZXggZjM2Mzc2NC4uNGVlMTVhZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY2FsbHRpcHMucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY2FsbHRpcHMucHkKQEAgLTU0LDkgKzU0LDkgQEAKIAogICAgICAgICBndGVzdChMaXN0LCBMaXN0Ll9fZG9jX18pCiAgICAgICAgIGd0ZXN0KGxpc3QuX19uZXdfXywKLSAgICAgICAgICAgICAgICdULl9fbmV3X18oUywgLi4uKSAtPiBhIG5ldyBvYmplY3Qgd2l0aCB0eXBlIFMsIGEgc3VidHlwZSBvZiBUJykKKyAgICAgICAgICAgICAgICdDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBvYmplY3QuICBTZWUgaGVscCh0eXBlKSBmb3IgYWNjdXJhdGUgc2lnbmF0dXJlLicpCiAgICAgICAgIGd0ZXN0KGxpc3QuX19pbml0X18sCi0gICAgICAgICAgICAgICAneC5fX2luaXRfXyguLi4pIGluaXRpYWxpemVzIHg7IHNlZSBoZWxwKHR5cGUoeCkpIGZvciBzaWduYXR1cmUnKQorICAgICAgICAgICAgICAgJ0luaXRpYWxpemUgc2VsZi4gIFNlZSBoZWxwKHR5cGUoc2VsZikpIGZvciBhY2N1cmF0ZSBzaWduYXR1cmUuJykKICAgICAgICAgYXBwZW5kX2RvYyA9ICAiTC5hcHBlbmQob2JqZWN0KSAtPiBOb25lIC0tIGFwcGVuZCBvYmplY3QgdG8gZW5kIgogICAgICAgICBndGVzdChsaXN0LmFwcGVuZCwgYXBwZW5kX2RvYykKICAgICAgICAgZ3Rlc3QoW10uYXBwZW5kLCBhcHBlbmRfZG9jKQpAQCAtNjksNyArNjksOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZSh0ZXh0d3JhcC5UZXh0V3JhcHBlciksICcnJ1wKICh3aWR0aD03MCwgaW5pdGlhbF9pbmRlbnQ9JycsIHN1YnNlcXVlbnRfaW5kZW50PScnLCBleHBhbmRfdGFicz1UcnVlLAogICAgIHJlcGxhY2Vfd2hpdGVzcGFjZT1UcnVlLCBmaXhfc2VudGVuY2VfZW5kaW5ncz1GYWxzZSwgYnJlYWtfbG9uZ193b3Jkcz1UcnVlLAotICAgIGRyb3Bfd2hpdGVzcGFjZT1UcnVlLCBicmVha19vbl9oeXBoZW5zPVRydWUsIHRhYnNpemU9OCknJycpCisgICAgZHJvcF93aGl0ZXNwYWNlPVRydWUsIGJyZWFrX29uX2h5cGhlbnM9VHJ1ZSwgdGFic2l6ZT04LCAqLCBtYXhfbGluZXM9Tm9uZSwKKyAgICBwbGFjZWhvbGRlcj0nIFsuLi5dJyknJycpCiAKICAgICBkZWYgdGVzdF9kb2NsaW5lX3RydW5jYXRpb24oc2VsZik6CiAgICAgICAgIGRlZiBmKCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkgYi9MaWIvaWRsZWxpYi9pZGxldmVyLnB5CmluZGV4IGU5ZTg4ZWYuLjg2NDZiYWEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZXZlci5weQpAQCAtMSArMSBAQAotSURMRV9WRVJTSU9OID0gIjMuMy40IgorSURMRV9WRVJTSU9OID0gIjMuNC4wcmMxIgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvcnBjLnB5IGIvTGliL2lkbGVsaWIvcnBjLnB5CmluZGV4IGRkY2U2ZTkuLjljNTFiOGYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3JwYy5weQorKysgYi9MaWIvaWRsZWxpYi9ycGMucHkKQEAgLTE5OSw3ICsxOTksNyBAQAogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICAgICAgcmV0dXJuICgiQ0FMTEVYQyIsIGV4KQpAQCAtMzQwLDcgKzM0MCw3IEBACiAgICAgICAgICAgICAgICAgbiA9IHNlbGYuc29jay5zZW5kKHNbOkJVRlNJWkVdKQogICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKToKICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzb2NrZXQgbm8gbG9uZ2VyIGV4aXN0cyIpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcyA9IHNbbjpdCkBAIC0zNTcsNyArMzU3LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHMgPSBzZWxmLnNvY2sucmVjdihCVUZTSVpFKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCiAgICAgICAgICAgICBpZiBsZW4ocykgPT0gMDoKICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgpAQCAtNTM3LDcgKzUzNyw3IEBACiAgICAgICAgICAgICBTb2NrZXRJTy5fX2luaXRfXyhzZWxmLCB3b3JraW5nX3NvY2spCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcmludCgiKiogSW52YWxpZCBob3N0OiAiLCBhZGRyZXNzLCBmaWxlPXN5cy5fX3N0ZGVycl9fKQotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAKICAgICBkZWYgZ2V0X3JlbW90ZV9wcm94eShzZWxmLCBvaWQpOgogICAgICAgICByZXR1cm4gUlBDUHJveHkoc2VsZiwgb2lkKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvcnVuLnB5IGIvTGliL2lkbGVsaWIvcnVuLnB5CmluZGV4IGMxODU5YjYuLjEzY2VjNjIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3J1bi5weQorKysgYi9MaWIvaWRsZWxpYi9ydW4ucHkKQEAgLTE1MCw4ICsxNTAsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZXJ2ZXIgPSBNeVJQQ1NlcnZlcihhZGRyZXNzLCBNeUhhbmRsZXIpCiAgICAgICAgICAgICBicmVhawotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIHByaW50KCJJRExFIFN1YnByb2Nlc3M6IHNvY2tldCBlcnJvcjogIiArIGVyci5hcmdzWzFdICsKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcHJpbnQoIklETEUgU3VicHJvY2VzczogT1NFcnJvcjogIiArIGVyci5hcmdzWzFdICsKICAgICAgICAgICAgICAgICAgICIsIHJldHJ5aW5nLi4uLiIsIGZpbGU9c3lzLl9fc3RkZXJyX18pCiAgICAgICAgICAgICBzb2NrZXRfZXJyb3IgPSBlcnIKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2ltYXBsaWIucHkgYi9MaWIvaW1hcGxpYi5weQppbmRleCBhZDVmNGU5Li5hZDEwNGZlIDEwMDY0NAotLS0gYS9MaWIvaW1hcGxpYi5weQorKysgYi9MaWIvaW1hcGxpYi5weQpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zaHV0ZG93bigpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmFpc2UKIApAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIFRoZSBzZXJ2ZXIgbWlnaHQgYWxyZWFkeSBoYXZlIGNsb3NlZCB0aGUgY29ubmVjdGlvbgogICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKICAgICAgICAgICAgICAgICByYWlzZQpAQCAtNTU0LDcgKzU1NCw3IEBACiAgICAgICAgIGltcG9ydCBobWFjCiAgICAgICAgIHB3ZCA9IChzZWxmLnBhc3N3b3JkLmVuY29kZSgnQVNDSUknKSBpZiBpc2luc3RhbmNlKHNlbGYucGFzc3dvcmQsIHN0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5wYXNzd29yZCkKLSAgICAgICAgcmV0dXJuIHNlbGYudXNlciArICIgIiArIGhtYWMuSE1BQyhwd2QsIGNoYWxsZW5nZSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYudXNlciArICIgIiArIGhtYWMuSE1BQyhwd2QsIGNoYWxsZW5nZSwgJ21kNScpLmhleGRpZ2VzdCgpCiAKIAogICAgIGRlZiBsb2dvdXQoc2VsZik6CkBAIC03NDIsMTIgKzc0MiwxMiBAQAogICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnVExTIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyJykKICAgICAgICAgIyBHZW5lcmF0ZSBhIGRlZmF1bHQgU1NMIGNvbnRleHQgaWYgbm9uZSB3YXMgcGFzc2VkLgogICAgICAgICBpZiBzc2xfY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgc3NsX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICAgICAgIyBTU0x2MiBjb25zaWRlcmVkIGhhcm1mdWwuCi0gICAgICAgICAgICBzc2xfY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICAgICAgc3NsX2NvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCiAgICAgICAgIHR5cCwgZGF0ID0gc2VsZi5fc2ltcGxlX2NvbW1hbmQobmFtZSkKICAgICAgICAgaWYgdHlwID09ICdPSyc6Ci0gICAgICAgICAgICBzZWxmLnNvY2sgPSBzc2xfY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgICAgICBzZWxmLnNvY2sgPSBzc2xfY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQogICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCdyYicpCiAgICAgICAgICAgICBzZWxmLl90bHNfZXN0YWJsaXNoZWQgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9nZXRfY2FwYWJpbGl0aWVzKCkKQEAgLTkxNSw3ICs5MTUsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc2VuZChkYXRhICsgQ1JMRikKLSAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIE9TRXJyb3IpIGFzIHZhbDoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgdmFsOgogICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnc29ja2V0IGVycm9yOiAlcycgJSB2YWwpCiAKICAgICAgICAgaWYgbGl0ZXJhbCBpcyBOb25lOgpAQCAtOTQwLDcgKzk0MCw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kKGxpdGVyYWwpCiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kKENSTEYpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgT1NFcnJvcikgYXMgdmFsOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgdmFsOgogICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ3NvY2tldCBlcnJvcjogJXMnICUgdmFsKQogCiAgICAgICAgICAgICBpZiBub3QgbGl0ZXJhdG9yOgpAQCAtMTA5MCw3ICsxMDkwLDcgQEAKIAogICAgICAgICAjIFByb3RvY29sIG1hbmRhdGVzIGFsbCBsaW5lcyB0ZXJtaW5hdGVkIGJ5IENSTEYKICAgICAgICAgaWYgbm90IGxpbmUuZW5kc3dpdGgoYidcclxuJyk6Ci0gICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6IHVudGVybWluYXRlZCBsaW5lJykKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ3NvY2tldCBlcnJvcjogdW50ZXJtaW5hdGVkIGxpbmU6ICVyJyAlIGxpbmUpCiAKICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQogICAgICAgICBpZiBfX2RlYnVnX186CkBAIC0xMjE1LDE1ICsxMjE1LDE3IEBACiAKICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQorICAgICAgICAgICAgaWYgc3NsX2NvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzc2xfY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlKQogICAgICAgICAgICAgc2VsZi5zc2xfY29udGV4dCA9IHNzbF9jb250ZXh0CiAgICAgICAgICAgICBJTUFQNC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0KQogCiAgICAgICAgIGRlZiBfY3JlYXRlX3NvY2tldChzZWxmKToKICAgICAgICAgICAgIHNvY2sgPSBJTUFQNC5fY3JlYXRlX3NvY2tldChzZWxmKQotICAgICAgICAgICAgaWYgc2VsZi5zc2xfY29udGV4dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zc2xfY29udGV4dC53cmFwX3NvY2tldChzb2NrKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3NsLndyYXBfc29ja2V0KHNvY2ssIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSkKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IHNlbGYuaG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNzbF9jb250ZXh0LndyYXBfc29ja2V0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQogCiAgICAgICAgIGRlZiBvcGVuKHNlbGYsIGhvc3Q9JycsIHBvcnQ9SU1BUDRfU1NMX1BPUlQpOgogICAgICAgICAgICAgIiIiU2V0dXAgY29ubmVjdGlvbiB0byByZW1vdGUgc2VydmVyIG9uICJob3N0OnBvcnQiLgpkaWZmIC0tZ2l0IGEvTGliL2ltZ2hkci5weSBiL0xpYi9pbWdoZHIucHkKaW5kZXggYmRkNDdlZS4uYWRkMmVhOCAxMDA2NDQKLS0tIGEvTGliL2ltZ2hkci5weQorKysgYi9MaWIvaW1naGRyLnB5CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHByaW50KHdoYXQoZmlsZW5hbWUpKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwcmludCgnKioqIG5vdCBmb3VuZCAqKionKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL2ltcC5weSBiL0xpYi9pbXAucHkKaW5kZXggNDA4ODM4My4uYzg0NDljNiAxMDA2NDQKLS0tIGEvTGliL2ltcC5weQorKysgYi9MaWIvaW1wLnB5CkBAIC0xNiwxOCArMTYsMjAgQEAKICAgICAjIFBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBkeW5hbWljIGxvYWRpbmcuCiAgICAgbG9hZF9keW5hbWljID0gTm9uZQogCi0jIERpcmVjdGx5IGV4cG9zZWQgYnkgdGhpcyBtb2R1bGUKLWZyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IG5ld19tb2R1bGUKLWZyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlLCBzb3VyY2VfZnJvbV9jYWNoZQorZnJvbSBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBpbXBvcnQgU291cmNlbGVzc0ZpbGVMb2FkZXIsIF9FUlJfTVNHLCBfU3BlY01ldGhvZHMKIAotCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAogZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHV0aWwKK2ltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHRva2VuaXplCitpbXBvcnQgdHlwZXMKIGltcG9ydCB3YXJuaW5ncwogCit3YXJuaW5ncy53YXJuKCJ0aGUgaW1wIG1vZHVsZSBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBpbXBvcnRsaWI7ICIKKyAgICAgICAgICAgICAgInNlZSB0aGUgbW9kdWxlJ3MgZG9jdW1lbnRhdGlvbiBmb3IgYWx0ZXJuYXRpdmUgdXNlcyIsCisgICAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCiAKICMgREVQUkVDQVRFRAogU0VBUkNIX0VSUk9SID0gMApAQCAtNDIsOSArNDQsMjMgQEAKIElNUF9IT09LID0gOQogCiAKK2RlZiBuZXdfbW9kdWxlKG5hbWUpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBDcmVhdGUgYSBuZXcgbW9kdWxlLgorCisgICAgVGhlIG1vZHVsZSBpcyBub3QgZW50ZXJlZCBpbnRvIHN5cy5tb2R1bGVzLgorCisgICAgIiIiCisgICAgcmV0dXJuIHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKworCiBkZWYgZ2V0X21hZ2ljKCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBtYWdpYyBudW1iZXIgZm9yIC5weWMgb3IgLnB5byBmaWxlcy4iIiIKLSAgICByZXR1cm4gX2Jvb3RzdHJhcC5fTUFHSUNfQllURVMKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgUmV0dXJuIHRoZSBtYWdpYyBudW1iZXIgZm9yIC5weWMgb3IgLnB5byBmaWxlcy4KKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5NQUdJQ19OVU1CRVIKIAogCiBkZWYgZ2V0X3RhZygpOgpAQCAtNTIsMTIgKzY4LDQyIEBACiAgICAgcmV0dXJuIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKIAogCitkZWYgY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGU9Tm9uZSk6CisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgLnB5Yy8ucHlvIGZpbGUuCisKKyAgICBUaGUgLnB5IGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdDsgdGhpcyBzaW1wbHkgcmV0dXJucyB0aGUgcGF0aCB0byB0aGUKKyAgICAucHljLy5weW8gZmlsZSBjYWxjdWxhdGVkIGFzIGlmIHRoZSAucHkgZmlsZSB3ZXJlIGltcG9ydGVkLiAgVGhlIGV4dGVuc2lvbgorICAgIHdpbGwgYmUgLnB5YyB1bmxlc3Mgc3lzLmZsYWdzLm9wdGltaXplIGlzIG5vbi16ZXJvLCB0aGVuIGl0IHdpbGwgYmUgLnB5by4KKworICAgIElmIGRlYnVnX292ZXJyaWRlIGlzIG5vdCBOb25lLCB0aGVuIGl0IG11c3QgYmUgYSBib29sZWFuIGFuZCBpcyB1c2VkIGluCisgICAgcGxhY2Ugb2Ygc3lzLmZsYWdzLm9wdGltaXplLgorCisgICAgSWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lIHRoZW4gTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuCisKKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBkZWJ1Z19vdmVycmlkZSkKKworCitkZWYgc291cmNlX2Zyb21fY2FjaGUocGF0aCk6CisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5Yy4vLnB5byBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weSBmaWxlLgorCisgICAgVGhlIC5weWMvLnB5byBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Q7IHRoaXMgc2ltcGx5IHJldHVybnMgdGhlIHBhdGggdG8KKyAgICB0aGUgLnB5IGZpbGUgY2FsY3VsYXRlZCB0byBjb3JyZXNwb25kIHRvIHRoZSAucHljLy5weW8gZmlsZS4gIElmIHBhdGggZG9lcworICAgIG5vdCBjb25mb3JtIHRvIFBFUCAzMTQ3IGZvcm1hdCwgVmFsdWVFcnJvciB3aWxsIGJlIHJhaXNlZC4gSWYKKyAgICBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUgdGhlbiBOb3RJbXBsZW1lbnRlZEVycm9yIGlzIHJhaXNlZC4KKworICAgICIiIgorICAgIHJldHVybiB1dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKwogZGVmIGdldF9zdWZmaXhlcygpOgotICAgIHdhcm5pbmdzLndhcm4oJ2ltcC5nZXRfc3VmZml4ZXMoKSBpcyBkZXByZWNhdGVkOyB1c2UgdGhlIGNvbnN0YW50cyAnCi0gICAgICAgICAgICAgICAgICAnZGVmaW5lZCBvbiBpbXBvcnRsaWIubWFjaGluZXJ5IGluc3RlYWQnLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCiAgICAgZXh0ZW5zaW9ucyA9IFsocywgJ3JiJywgQ19FWFRFTlNJT04pIGZvciBzIGluIG1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVNdCi0gICAgc291cmNlID0gWyhzLCAnVScsIFBZX1NPVVJDRSkgZm9yIHMgaW4gbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFU10KKyAgICBzb3VyY2UgPSBbKHMsICdyJywgUFlfU09VUkNFKSBmb3IgcyBpbiBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTXQogICAgIGJ5dGVjb2RlID0gWyhzLCAncmInLCBQWV9DT01QSUxFRCkgZm9yIHMgaW4gbWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTXQogCiAgICAgcmV0dXJuIGV4dGVuc2lvbnMgKyBzb3VyY2UgKyBieXRlY29kZQpAQCAtNjUsNyArMTExLDExIEBACiAKIGNsYXNzIE51bGxJbXBvcnRlcjoKIAotICAgICIiIk51bGwgaW1wb3J0IG9iamVjdC4iIiIKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgTnVsbCBpbXBvcnQgb2JqZWN0LgorCisgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CiAgICAgICAgIGlmIHBhdGggPT0gJyc6CkBAIC0xMDYsNDggKzE1Niw0OSBAQAogICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKIAogCi1jbGFzcyBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkoX0hhY2tlZEdldERhdGEsIF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcik6CitjbGFzcyBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkoX0hhY2tlZEdldERhdGEsIG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKToKIAogICAgICIiIkNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgaW1wbGVtZW50aW5nIGxvYWRfc291cmNlKCkuIiIiCiAKIAogZGVmIGxvYWRfc291cmNlKG5hbWUsIHBhdGhuYW1lLCBmaWxlPU5vbmUpOgotICAgIG1zZyA9ICgnaW1wLmxvYWRfc291cmNlKCkgaXMgZGVwcmVjYXRlZDsgdXNlICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkubG9hZF9tb2R1bGUoKScKLSAgICAgICAgICAgJyBpbnN0ZWFkJykKLSAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgIF9Mb2FkU291cmNlQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkubG9hZF9tb2R1bGUobmFtZSkKLSAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgIGxvYWRlciA9IF9Mb2FkU291cmNlQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkKKyAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRobmFtZSwgbG9hZGVyPWxvYWRlcikKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgaWYgbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgbW9kdWxlID0gbWV0aG9kcy5leGVjKHN5cy5tb2R1bGVzW25hbWVdKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMubG9hZCgpCiAgICAgIyBUbyBhbGxvdyByZWxvYWRpbmcgdG8gcG90ZW50aWFsbHkgd29yaywgdXNlIGEgbm9uLWhhY2tlZCBsb2FkZXIgd2hpY2gKICAgICAjIHdvbid0IHJlbHkgb24gYSBub3ctY2xvc2VkIGZpbGUgb2JqZWN0LgotICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCisgICAgbW9kdWxlLl9fc3BlY19fLmxvYWRlciA9IG1vZHVsZS5fX2xvYWRlcl9fCiAgICAgcmV0dXJuIG1vZHVsZQogCiAKLWNsYXNzIF9Mb2FkQ29tcGlsZWRDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLAotICAgICAgICBfYm9vdHN0cmFwLlNvdXJjZWxlc3NGaWxlTG9hZGVyKToKK2NsYXNzIF9Mb2FkQ29tcGlsZWRDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBTb3VyY2VsZXNzRmlsZUxvYWRlcik6CiAKICAgICAiIiJDb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIGltcGxlbWVudGluZyBsb2FkX2NvbXBpbGVkKCkuIiIiCiAKIAogZGVmIGxvYWRfY29tcGlsZWQobmFtZSwgcGF0aG5hbWUsIGZpbGU9Tm9uZSk6Ci0gICAgbXNnID0gKCdpbXAubG9hZF9jb21waWxlZCgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnCi0gICAgICAgICAgICdpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKS4nCi0gICAgICAgICAgICdsb2FkX21vZHVsZSgpIGluc3RlYWQgJykKLSAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgIF9Mb2FkQ29tcGlsZWRDb21wYXRpYmlsaXR5KG5hbWUsIHBhdGhuYW1lLCBmaWxlKS5sb2FkX21vZHVsZShuYW1lKQotICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgIiIiKipERVBSRUNBVEVEKioiIiIKKyAgICBsb2FkZXIgPSBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkKKyAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRobmFtZSwgbG9hZGVyPWxvYWRlcikKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgaWYgbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgbW9kdWxlID0gbWV0aG9kcy5leGVjKHN5cy5tb2R1bGVzW25hbWVdKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMubG9hZCgpCiAgICAgIyBUbyBhbGxvdyByZWxvYWRpbmcgdG8gcG90ZW50aWFsbHkgd29yaywgdXNlIGEgbm9uLWhhY2tlZCBsb2FkZXIgd2hpY2gKICAgICAjIHdvbid0IHJlbHkgb24gYSBub3ctY2xvc2VkIGZpbGUgb2JqZWN0LgotICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gX2Jvb3RzdHJhcC5Tb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBtb2R1bGUuX19sb2FkZXJfXyA9IFNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgIG1vZHVsZS5fX3NwZWNfXy5sb2FkZXIgPSBtb2R1bGUuX19sb2FkZXJfXwogICAgIHJldHVybiBtb2R1bGUKIAogCiBkZWYgbG9hZF9wYWNrYWdlKG5hbWUsIHBhdGgpOgotICAgIG1zZyA9ICgnaW1wLmxvYWRfcGFja2FnZSgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSBlaXRoZXIgJwotICAgICAgICAgICAnaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCkgb3IgJwotICAgICAgICAgICAnaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcigpIGluc3RlYWQnKQotICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgIiIiKipERVBSRUNBVEVEKioiIiIKICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgICBleHRlbnNpb25zID0gKG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVNbOl0gKwogICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFU1s6XSkKQEAgLTE1Nyw3ICsyMDgsMTMgQEAKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigneyFyfSBpcyBub3QgYSBwYWNrYWdlJy5mb3JtYXQocGF0aCkpCi0gICAgcmV0dXJuIF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRoKS5sb2FkX21vZHVsZShuYW1lKQorICAgIHNwZWMgPSB1dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9W10pCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIHJldHVybiBtZXRob2RzLmV4ZWMoc3lzLm1vZHVsZXNbbmFtZV0pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG1ldGhvZHMubG9hZCgpCiAKIAogZGVmIGxvYWRfbW9kdWxlKG5hbWUsIGZpbGUsIGZpbGVuYW1lLCBkZXRhaWxzKToKQEAgLTE2OSwzMiArMjI2LDMwIEBACiAKICAgICAiIiIKICAgICBzdWZmaXgsIG1vZGUsIHR5cGVfID0gZGV0YWlscwotICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKLSAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQotICAgICAgICBpZiBtb2RlIGFuZCAobm90IG1vZGUuc3RhcnRzd2l0aCgoJ3InLCAnVScpKSBvciAnKycgaW4gbW9kZSk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgb3BlbiBtb2RlIHshcn0nLmZvcm1hdChtb2RlKSkKLSAgICAgICAgZWxpZiBmaWxlIGlzIE5vbmUgYW5kIHR5cGVfIGluIHtQWV9TT1VSQ0UsIFBZX0NPTVBJTEVEfToKLSAgICAgICAgICAgIG1zZyA9ICdmaWxlIG9iamVjdCByZXF1aXJlZCBmb3IgaW1wb3J0ICh0eXBlIGNvZGUge30pJy5mb3JtYXQodHlwZV8pCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBQWV9TT1VSQ0U6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZF9zb3VyY2UobmFtZSwgZmlsZW5hbWUsIGZpbGUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfQ09NUElMRUQ6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZF9jb21waWxlZChuYW1lLCBmaWxlbmFtZSwgZmlsZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBDX0VYVEVOU0lPTiBhbmQgbG9hZF9keW5hbWljIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgb3BlbmVkX2ZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkX2R5bmFtaWMobmFtZSwgZmlsZW5hbWUsIG9wZW5lZF9maWxlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQotICAgICAgICBlbGlmIHR5cGVfID09IFBLR19ESVJFQ1RPUlk6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlKG5hbWUsIGZpbGVuYW1lKQotICAgICAgICBlbGlmIHR5cGVfID09IENfQlVJTFRJTjoKLSAgICAgICAgICAgIHJldHVybiBpbml0X2J1aWx0aW4obmFtZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBQWV9GUk9aRU46Ci0gICAgICAgICAgICByZXR1cm4gaW5pdF9mcm96ZW4obmFtZSkKKyAgICBpZiBtb2RlIGFuZCAobm90IG1vZGUuc3RhcnRzd2l0aCgoJ3InLCAnVScpKSBvciAnKycgaW4gbW9kZSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgZmlsZSBvcGVuIG1vZGUgeyFyfScuZm9ybWF0KG1vZGUpKQorICAgIGVsaWYgZmlsZSBpcyBOb25lIGFuZCB0eXBlXyBpbiB7UFlfU09VUkNFLCBQWV9DT01QSUxFRH06CisgICAgICAgIG1zZyA9ICdmaWxlIG9iamVjdCByZXF1aXJlZCBmb3IgaW1wb3J0ICh0eXBlIGNvZGUge30pJy5mb3JtYXQodHlwZV8pCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKQorICAgIGVsaWYgdHlwZV8gPT0gUFlfU09VUkNFOgorICAgICAgICByZXR1cm4gbG9hZF9zb3VyY2UobmFtZSwgZmlsZW5hbWUsIGZpbGUpCisgICAgZWxpZiB0eXBlXyA9PSBQWV9DT01QSUxFRDoKKyAgICAgICAgcmV0dXJuIGxvYWRfY29tcGlsZWQobmFtZSwgZmlsZW5hbWUsIGZpbGUpCisgICAgZWxpZiB0eXBlXyA9PSBDX0VYVEVOU0lPTiBhbmQgbG9hZF9keW5hbWljIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicpIGFzIG9wZW5lZF9maWxlOgorICAgICAgICAgICAgICAgIHJldHVybiBsb2FkX2R5bmFtaWMobmFtZSwgZmlsZW5hbWUsIG9wZW5lZF9maWxlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbXNnID0gICJEb24ndCBrbm93IGhvdyB0byBpbXBvcnQge30gKHR5cGUgY29kZSB7fSkiLmZvcm1hdChuYW1lLCB0eXBlXykKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1uYW1lKQorICAgICAgICAgICAgcmV0dXJuIGxvYWRfZHluYW1pYyhuYW1lLCBmaWxlbmFtZSwgZmlsZSkKKyAgICBlbGlmIHR5cGVfID09IFBLR19ESVJFQ1RPUlk6CisgICAgICAgIHJldHVybiBsb2FkX3BhY2thZ2UobmFtZSwgZmlsZW5hbWUpCisgICAgZWxpZiB0eXBlXyA9PSBDX0JVSUxUSU46CisgICAgICAgIHJldHVybiBpbml0X2J1aWx0aW4obmFtZSkKKyAgICBlbGlmIHR5cGVfID09IFBZX0ZST1pFTjoKKyAgICAgICAgcmV0dXJuIGluaXRfZnJvemVuKG5hbWUpCisgICAgZWxzZToKKyAgICAgICAgbXNnID0gICJEb24ndCBrbm93IGhvdyB0byBpbXBvcnQge30gKHR5cGUgY29kZSB7fSkiLmZvcm1hdChuYW1lLCB0eXBlXykKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLCBuYW1lPW5hbWUpCiAKIAogZGVmIGZpbmRfbW9kdWxlKG5hbWUsIHBhdGg9Tm9uZSk6CkBAIC0yMzAsNTQgKzI4NSwzMSBAQAogICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHBhY2thZ2VfZGlyZWN0b3J5LCBwYWNrYWdlX2ZpbGVfbmFtZSkKICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIHBhY2thZ2VfZGlyZWN0b3J5LCAoJycsICcnLCBQS0dfRElSRUNUT1JZKQotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScpCi0gICAgICAgICAgICBmb3Igc3VmZml4LCBtb2RlLCB0eXBlXyBpbiBnZXRfc3VmZml4ZXMoKToKLSAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBuYW1lICsgc3VmZml4Ci0gICAgICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGVudHJ5LCBmaWxlX25hbWUpCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZV9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGJyZWFrICAjIEJyZWFrIG91dCBvZiBvdXRlciBsb29wIHdoZW4gYnJlYWtpbmcgb3V0IG9mIGlubmVyIGxvb3AuCisgICAgICAgIGZvciBzdWZmaXgsIG1vZGUsIHR5cGVfIGluIGdldF9zdWZmaXhlcygpOgorICAgICAgICAgICAgZmlsZV9uYW1lID0gbmFtZSArIHN1ZmZpeAorICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGVudHJ5LCBmaWxlX25hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlX3BhdGgpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBicmVhayAgIyBCcmVhayBvdXQgb2Ygb3V0ZXIgbG9vcCB3aGVuIGJyZWFraW5nIG91dCBvZiBpbm5lciBsb29wLgogICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9ib290c3RyYXAuX0VSUl9NU0cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQogCiAgICAgZW5jb2RpbmcgPSBOb25lCi0gICAgaWYgbW9kZSA9PSAnVSc6CisgICAgaWYgJ2InIG5vdCBpbiBtb2RlOgogICAgICAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAncmInKSBhcyBmaWxlOgogICAgICAgICAgICAgZW5jb2RpbmcgPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmcoZmlsZS5yZWFkbGluZSlbMF0KICAgICBmaWxlID0gb3BlbihmaWxlX3BhdGgsIG1vZGUsIGVuY29kaW5nPWVuY29kaW5nKQogICAgIHJldHVybiBmaWxlLCBmaWxlX3BhdGgsIChzdWZmaXgsIG1vZGUsIHR5cGVfKQogCiAKLV9SRUxPQURJTkcgPSB7fQotCiBkZWYgcmVsb2FkKG1vZHVsZSk6Ci0gICAgIiIiUmVsb2FkIHRoZSBtb2R1bGUgYW5kIHJldHVybiBpdC4KKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgUmVsb2FkIHRoZSBtb2R1bGUgYW5kIHJldHVybiBpdC4KIAogICAgIFRoZSBtb2R1bGUgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGltcG9ydGVkIGJlZm9yZS4KIAogICAgICIiIgotICAgIGlmIG5vdCBtb2R1bGUgb3IgdHlwZShtb2R1bGUpICE9IHR5cGUoc3lzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJyZWxvYWQoKSBhcmd1bWVudCBtdXN0IGJlIG1vZHVsZSIpCi0gICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXwotICAgIGlmIG5hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICBtc2cgPSAibW9kdWxlIHt9IG5vdCBpbiBzeXMubW9kdWxlcyIKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQotICAgIGlmIG5hbWUgaW4gX1JFTE9BRElORzoKLSAgICAgICAgcmV0dXJuIF9SRUxPQURJTkdbbmFtZV0KLSAgICBfUkVMT0FESU5HW25hbWVdID0gbW9kdWxlCi0gICAgdHJ5OgotICAgICAgICBwYXJlbnRfbmFtZSA9IG5hbWUucnBhcnRpdGlvbignLicpWzBdCi0gICAgICAgIGlmIHBhcmVudF9uYW1lIGFuZCBwYXJlbnRfbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBtc2cgPSAicGFyZW50IHshcn0gbm90IGluIHN5cy5tb2R1bGVzIgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChwYXJlbnRfbmFtZSksIG5hbWU9cGFyZW50X25hbWUpCi0gICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICMgVGhlIG1vZHVsZSBtYXkgaGF2ZSByZXBsYWNlZCBpdHNlbGYgaW4gc3lzLm1vZHVsZXMhCi0gICAgICAgIHJldHVybiBzeXMubW9kdWxlc1ttb2R1bGUuX19uYW1lX19dCi0gICAgZmluYWxseToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVsIF9SRUxPQURJTkdbbmFtZV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcworICAgIHJldHVybiBpbXBvcnRsaWIucmVsb2FkKG1vZHVsZSkKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkgYi9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5CmluZGV4IDIyYzkwZjIuLmY2YWRjNWMgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKKysrIGIvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQpAQCAtMSw1ICsxLDUgQEAKICIiIkEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgaW1wb3J0LiIiIgotX19hbGxfXyA9IFsnX19pbXBvcnRfXycsICdpbXBvcnRfbW9kdWxlJywgJ2ludmFsaWRhdGVfY2FjaGVzJ10KK19fYWxsX18gPSBbJ19faW1wb3J0X18nLCAnaW1wb3J0X21vZHVsZScsICdpbnZhbGlkYXRlX2NhY2hlcycsICdyZWxvYWQnXQogCiAjIEJvb3RzdHJhcCBoZWxwICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTMyLDYgKzMyLDEwIEBACiAjIEZ1bGx5IGJvb3RzdHJhcHBlZCBhdCB0aGlzIHBvaW50LCBpbXBvcnQgd2hhdGV2ZXIgeW91IGxpa2UsIGNpcmN1bGFyCiAjIGRlcGVuZGVuY2llcyBhbmQgc3RhcnR1cCBvdmVyaGVhZCBtaW5pbWlzYXRpb24gcGVybWl0dGluZyA6KQogCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB3YXJuaW5ncworCisKICMgUHVibGljIEFQSSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgX19pbXBvcnRfXwpAQCAtNDYsMjAgKzUwLDE1IEBACiAKIAogZGVmIGZpbmRfbG9hZGVyKG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgIiIiRmluZCB0aGUgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZS4KKyAgICAiIiJSZXR1cm4gdGhlIGxvYWRlciBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUuCiAKLSAgICBGaXJzdCwgc3lzLm1vZHVsZXMgaXMgY2hlY2tlZCB0byBzZWUgaWYgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeSBpbXBvcnRlZC4gSWYKLSAgICBzbywgdGhlbiBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fIGlzIHJldHVybmVkLiBJZiB0aGF0IGhhcHBlbnMgdG8gYmUKLSAgICBzZXQgdG8gTm9uZSwgdGhlbiBWYWx1ZUVycm9yIGlzIHJhaXNlZC4gSWYgdGhlIG1vZHVsZSBpcyBub3QgaW4KLSAgICBzeXMubW9kdWxlcywgdGhlbiBzeXMubWV0YV9wYXRoIGlzIHNlYXJjaGVkIGZvciBhIHN1aXRhYmxlIGxvYWRlciB3aXRoIHRoZQotICAgIHZhbHVlIG9mICdwYXRoJyBnaXZlbiB0byB0aGUgZmluZGVycy4gTm9uZSBpcyByZXR1cm5lZCBpZiBubyBsb2FkZXIgY291bGQKLSAgICBiZSBmb3VuZC4KKyAgICBUaGlzIGlzIGEgYmFja3dhcmQtY29tcGF0aWJsZSB3cmFwcGVyIGFyb3VuZCBmaW5kX3NwZWMoKS4KIAotICAgIERvdHRlZCBuYW1lcyBkbyBub3QgaGF2ZSB0aGVpciBwYXJlbnQgcGFja2FnZXMgaW1wbGljaXRseSBpbXBvcnRlZC4gWW91IHdpbGwKLSAgICBtb3N0IGxpa2VseSBuZWVkIHRvIGV4cGxpY2l0bHkgaW1wb3J0IGFsbCBwYXJlbnQgcGFja2FnZXMgaW4gdGhlIHByb3BlcgotICAgIG9yZGVyIGZvciBhIHN1Ym1vZHVsZSB0byBnZXQgdGhlIGNvcnJlY3QgbG9hZGVyLgorICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMoKS4KIAogICAgICIiIgorICAgIHdhcm5pbmdzLndhcm4oJ1VzZSBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMoKSBpbnN0ZWFkLicsCisgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKICAgICB0cnk6CiAgICAgICAgIGxvYWRlciA9IHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX18KICAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CkBAIC02OCw3ICs2NywyMCBAQAogICAgICAgICAgICAgcmV0dXJuIGxvYWRlcgogICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgcGFzcwotICAgIHJldHVybiBfYm9vdHN0cmFwLl9maW5kX21vZHVsZShuYW1lLCBwYXRoKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19sb2FkZXJfXyBpcyBub3Qgc2V0Jy5mb3JtYXQobmFtZSkpCisKKyAgICBzcGVjID0gX2Jvb3RzdHJhcC5fZmluZF9zcGVjKG5hbWUsIHBhdGgpCisgICAgIyBXZSB3b24ndCB3b3JyeSBhYm91dCBtYWxmb3JtZWQgc3BlY3MgKG1pc3NpbmcgYXR0cmlidXRlcykuCisgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGlmIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdzcGVjIGZvciB7fSBtaXNzaW5nIGxvYWRlcicuZm9ybWF0KG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lKQorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbmFtZXNwYWNlIHBhY2thZ2VzIGRvIG5vdCBoYXZlIGxvYWRlcnMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUpCisgICAgcmV0dXJuIHNwZWMubG9hZGVyCiAKIAogZGVmIGltcG9ydF9tb2R1bGUobmFtZSwgcGFja2FnZT1Ob25lKToKQEAgLTgyLDkgKzk0LDU4IEBACiAgICAgbGV2ZWwgPSAwCiAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCcuJyk6CiAgICAgICAgIGlmIG5vdCBwYWNrYWdlOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJyZWxhdGl2ZSBpbXBvcnRzIHJlcXVpcmUgdGhlICdwYWNrYWdlJyBhcmd1bWVudCIpCisgICAgICAgICAgICBtc2cgPSAoInRoZSAncGFja2FnZScgYXJndW1lbnQgaXMgcmVxdWlyZWQgdG8gcGVyZm9ybSBhIHJlbGF0aXZlICIKKyAgICAgICAgICAgICAgICAgICAiaW1wb3J0IGZvciB7IXJ9IikKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cuZm9ybWF0KG5hbWUpKQogICAgICAgICBmb3IgY2hhcmFjdGVyIGluIG5hbWU6CiAgICAgICAgICAgICBpZiBjaGFyYWN0ZXIgIT0gJy4nOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBsZXZlbCArPSAxCiAgICAgcmV0dXJuIF9ib290c3RyYXAuX2djZF9pbXBvcnQobmFtZVtsZXZlbDpdLCBwYWNrYWdlLCBsZXZlbCkKKworCitfUkVMT0FESU5HID0ge30KKworCitkZWYgcmVsb2FkKG1vZHVsZSk6CisgICAgIiIiUmVsb2FkIHRoZSBtb2R1bGUgYW5kIHJldHVybiBpdC4KKworICAgIFRoZSBtb2R1bGUgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGltcG9ydGVkIGJlZm9yZS4KKworICAgICIiIgorICAgIGlmIG5vdCBtb2R1bGUgb3Igbm90IGlzaW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJyZWxvYWQoKSBhcmd1bWVudCBtdXN0IGJlIG1vZHVsZSIpCisgICAgdHJ5OgorICAgICAgICBuYW1lID0gbW9kdWxlLl9fc3BlY19fLm5hbWUKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KKworICAgIGlmIHN5cy5tb2R1bGVzLmdldChuYW1lKSBpcyBub3QgbW9kdWxlOgorICAgICAgICBtc2cgPSAibW9kdWxlIHt9IG5vdCBpbiBzeXMubW9kdWxlcyIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQorICAgIGlmIG5hbWUgaW4gX1JFTE9BRElORzoKKyAgICAgICAgcmV0dXJuIF9SRUxPQURJTkdbbmFtZV0KKyAgICBfUkVMT0FESU5HW25hbWVdID0gbW9kdWxlCisgICAgdHJ5OgorICAgICAgICBwYXJlbnRfbmFtZSA9IG5hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIGlmIHBhcmVudF9uYW1lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhcmVudCA9IHN5cy5tb2R1bGVzW3BhcmVudF9uYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIG1zZyA9ICJwYXJlbnQgeyFyfSBub3QgaW4gc3lzLm1vZHVsZXMiCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChwYXJlbnRfbmFtZSksIG5hbWU9cGFyZW50X25hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ3BhdGggPSBwYXJlbnQuX19wYXRoX18KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBrZ3BhdGggPSBOb25lCisgICAgICAgIHRhcmdldCA9IG1vZHVsZQorICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fID0gX2Jvb3RzdHJhcC5fZmluZF9zcGVjKG5hbWUsIHBrZ3BhdGgsIHRhcmdldCkKKyAgICAgICAgbWV0aG9kcyA9IF9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpCisgICAgICAgIG1ldGhvZHMuZXhlYyhtb2R1bGUpCisgICAgICAgICMgVGhlIG1vZHVsZSBtYXkgaGF2ZSByZXBsYWNlZCBpdHNlbGYgaW4gc3lzLm1vZHVsZXMhCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQorICAgIGZpbmFsbHk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBfUkVMT0FESU5HW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weSBiL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQppbmRleCBlNDBlYzkyLi44YTBjYzM0IDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKKysrIGIvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CkBAIC05LDcgKzksNyBAQAogIwogIyBJTVBPUlRBTlQ6IFdoZW5ldmVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoaXMgbW9kdWxlLCBiZSBzdXJlIHRvIHJ1bgogIyBhIHRvcC1sZXZlbCBtYWtlIGluIG9yZGVyIHRvIGdldCB0aGUgZnJvemVuIHZlcnNpb24gb2YgdGhlIG1vZHVsZQotIyB1cGRhdGUuIE5vdCBkb2luZyBzbywgd2lsbCByZXN1bHQgaW4gdGhlIE1ha2VmaWxlIHRvIGZhaWwgZm9yCisjIHVwZGF0ZS4gTm90IGRvaW5nIHNvIHdpbGwgcmVzdWx0IGluIHRoZSBNYWtlZmlsZSB0byBmYWlsIGZvcgogIyBhbGwgb3RoZXJzIHdobyBkb24ndCBoYXZlIGEgLi9weXRob24gYXJvdW5kIHRvIGZyZWV6ZSB0aGUgbW9kdWxlCiAjIGluIHRoZSBlYXJseSBzdGFnZXMgb2YgY29tcGlsYXRpb24uCiAjCkBAIC0yMCwxMCArMjAsNiBAQAogIyByZWZlcmVuY2UgYW55IGluamVjdGVkIG9iamVjdHMhIFRoaXMgaW5jbHVkZXMgbm90IG9ubHkgZ2xvYmFsIGNvZGUgYnV0IGFsc28KICMgYW55dGhpbmcgc3BlY2lmaWVkIGF0IHRoZSBjbGFzcyBsZXZlbC4KIAotIyBYWFggTWFrZSBzdXJlIGFsbCBwdWJsaWMgbmFtZXMgaGF2ZSBubyBzaW5nbGUgbGVhZGluZyB1bmRlcnNjb3JlIGFuZCBhbGwKLSMgICAgIG90aGVycyBkby4KLQotCiAjIEJvb3RzdHJhcC1yZWxhdGVkIGNvZGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIF9DQVNFX0lOU0VOU0lUSVZFX1BMQVRGT1JNUyA9ICd3aW4nLCAnY3lnd2luJywgJ2RhcndpbicKQEAgLTQxLDc2ICszNyw1OCBAQAogICAgIHJldHVybiBfcmVsYXhfY2FzZQogCiAKLSMgVE9ETzogRXhwb3NlIGZyb20gbWFyc2hhbAogZGVmIF93X2xvbmcoeCk6Ci0gICAgIiIiQ29udmVydCBhIDMyLWJpdCBpbnRlZ2VyIHRvIGxpdHRsZS1lbmRpYW4uCi0KLSAgICBYWFggVGVtcG9yYXJ5IHVudGlsIG1hcnNoYWwncyBsb25nIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZC4KLQotICAgICIiIgotICAgIHggPSBpbnQoeCkKLSAgICBpbnRfYnl0ZXMgPSBbXQotICAgIGludF9ieXRlcy5hcHBlbmQoeCAmIDB4RkYpCi0gICAgaW50X2J5dGVzLmFwcGVuZCgoeCA+PiA4KSAmIDB4RkYpCi0gICAgaW50X2J5dGVzLmFwcGVuZCgoeCA+PiAxNikgJiAweEZGKQotICAgIGludF9ieXRlcy5hcHBlbmQoKHggPj4gMjQpICYgMHhGRikKLSAgICByZXR1cm4gYnl0ZWFycmF5KGludF9ieXRlcykKKyAgICAiIiJDb252ZXJ0IGEgMzItYml0IGludGVnZXIgdG8gbGl0dGxlLWVuZGlhbi4iIiIKKyAgICByZXR1cm4gKGludCh4KSAmIDB4RkZGRkZGRkYpLnRvX2J5dGVzKDQsICdsaXR0bGUnKQogCiAKLSMgVE9ETzogRXhwb3NlIGZyb20gbWFyc2hhbAogZGVmIF9yX2xvbmcoaW50X2J5dGVzKToKLSAgICAiIiJDb252ZXJ0IDQgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiB0byBhbiBpbnRlZ2VyLgotCi0gICAgWFhYIFRlbXBvcmFyeSB1bnRpbCBtYXJzaGFsJ3MgbG9uZyBmdW5jdGlvbiBhcmUgZXhwb3NlZC4KLQotICAgICIiIgotICAgIHggPSBpbnRfYnl0ZXNbMF0KLSAgICB4IHw9IGludF9ieXRlc1sxXSA8PCA4Ci0gICAgeCB8PSBpbnRfYnl0ZXNbMl0gPDwgMTYKLSAgICB4IHw9IGludF9ieXRlc1szXSA8PCAyNAotICAgIHJldHVybiB4CisgICAgIiIiQ29udmVydCA0IGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gdG8gYW4gaW50ZWdlci4iIiIKKyAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoaW50X2J5dGVzLCAnbGl0dGxlJykKIAogCiBkZWYgX3BhdGhfam9pbigqcGF0aF9wYXJ0cyk6CiAgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguam9pbigpLiIiIgotICAgIG5ld19wYXJ0cyA9IFtdCi0gICAgZm9yIHBhcnQgaW4gcGF0aF9wYXJ0czoKLSAgICAgICAgaWYgbm90IHBhcnQ6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBuZXdfcGFydHMuYXBwZW5kKHBhcnQpCi0gICAgICAgIGlmIHBhcnRbLTFdIG5vdCBpbiBwYXRoX3NlcGFyYXRvcnM6Ci0gICAgICAgICAgICBuZXdfcGFydHMuYXBwZW5kKHBhdGhfc2VwKQotICAgIHJldHVybiAnJy5qb2luKG5ld19wYXJ0c1s6LTFdKSAgIyBEcm9wIHN1cGVyZmx1b3VzIHBhdGggc2VwYXJhdG9yLgorICAgIHJldHVybiBwYXRoX3NlcC5qb2luKFtwYXJ0LnJzdHJpcChwYXRoX3NlcGFyYXRvcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJ0IGluIHBhdGhfcGFydHMgaWYgcGFydF0pCiAKIAogZGVmIF9wYXRoX3NwbGl0KHBhdGgpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLnNwbGl0KCkuIiIiCisgICAgaWYgbGVuKHBhdGhfc2VwYXJhdG9ycykgPT0gMToKKyAgICAgICAgZnJvbnQsIF8sIHRhaWwgPSBwYXRoLnJwYXJ0aXRpb24ocGF0aF9zZXApCisgICAgICAgIHJldHVybiBmcm9udCwgdGFpbAogICAgIGZvciB4IGluIHJldmVyc2VkKHBhdGgpOgogICAgICAgICBpZiB4IGluIHBhdGhfc2VwYXJhdG9yczoKLSAgICAgICAgICAgIHNlcCA9IHgKLSAgICAgICAgICAgIGJyZWFrCi0gICAgZWxzZToKLSAgICAgICAgc2VwID0gcGF0aF9zZXAKLSAgICBmcm9udCwgXywgdGFpbCA9IHBhdGgucnBhcnRpdGlvbihzZXApCi0gICAgcmV0dXJuIGZyb250LCB0YWlsCisgICAgICAgICAgICBmcm9udCwgdGFpbCA9IHBhdGgucnNwbGl0KHgsIG1heHNwbGl0PTEpCisgICAgICAgICAgICByZXR1cm4gZnJvbnQsIHRhaWwKKyAgICByZXR1cm4gJycsIHBhdGgKKworCitkZWYgX3BhdGhfc3RhdChwYXRoKToKKyAgICAiIiJTdGF0IHRoZSBwYXRoLgorCisgICAgTWFkZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIG1ha2UgaXQgZWFzaWVyIHRvIG92ZXJyaWRlIGluIGV4cGVyaW1lbnRzCisgICAgKGUuZy4gY2FjaGUgc3RhdCByZXN1bHRzKS4KKworICAgICIiIgorICAgIHJldHVybiBfb3Muc3RhdChwYXRoKQogCiAKIGRlZiBfcGF0aF9pc19tb2RlX3R5cGUocGF0aCwgbW9kZSk6CiAgICAgIiIiVGVzdCB3aGV0aGVyIHRoZSBwYXRoIGlzIHRoZSBzcGVjaWZpZWQgbW9kZSB0eXBlLiIiIgogICAgIHRyeToKLSAgICAgICAgc3RhdF9pbmZvID0gX29zLnN0YXQocGF0aCkKKyAgICAgICAgc3RhdF9pbmZvID0gX3BhdGhfc3RhdChwYXRoKQogICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gKHN0YXRfaW5mby5zdF9tb2RlICYgMG8xNzAwMDApID09IG1vZGUKIAogCi0jIFhYWCBDb3VsZCBhbHNvIGV4cG9zZSBNb2R1bGVzL2dldHBhdGguYzppc2ZpbGUoKQogZGVmIF9wYXRoX2lzZmlsZShwYXRoKToKICAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5pc2ZpbGUuIiIiCiAgICAgcmV0dXJuIF9wYXRoX2lzX21vZGVfdHlwZShwYXRoLCAwbzEwMDAwMCkKIAogCi0jIFhYWCBDb3VsZCBhbHNvIGV4cG9zZSBNb2R1bGVzL2dldHBhdGguYzppc2RpcigpCiBkZWYgX3BhdGhfaXNkaXIocGF0aCk6CiAgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguaXNkaXIuIiIiCiAgICAgaWYgbm90IHBhdGg6CkBAIC0xNDgsMTcgKzEyNiwzMCBAQAogICAgIG5ldy5fX2RpY3RfXy51cGRhdGUob2xkLl9fZGljdF9fKQogCiAKK2RlZiBfbmV3X21vZHVsZShuYW1lKToKKyAgICByZXR1cm4gdHlwZShzeXMpKG5hbWUpCisKKwogX2NvZGVfdHlwZSA9IHR5cGUoX3dyYXAuX19jb2RlX18pCiAKIAotZGVmIG5ld19tb2R1bGUobmFtZSk6Ci0gICAgIiIiQ3JlYXRlIGEgbmV3IG1vZHVsZS4KIAotICAgIFRoZSBtb2R1bGUgaXMgbm90IGVudGVyZWQgaW50byBzeXMubW9kdWxlcy4KK2NsYXNzIF9NYW5hZ2VSZWxvYWQ6CiAKLSAgICAiIiIKLSAgICByZXR1cm4gdHlwZShfaW8pKG5hbWUpCisgICAgIiIiTWFuYWdlcyB0aGUgcG9zc2libGUgY2xlYW4tdXAgb2Ygc3lzLm1vZHVsZXMgZm9yIGxvYWRfbW9kdWxlKCkuIiIiCiAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9pc19yZWxvYWQgPSBzZWxmLl9uYW1lIGluIHN5cy5tb2R1bGVzCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBpZiBhbnkoYXJnIGlzIG5vdCBOb25lIGZvciBhcmcgaW4gYXJncykgYW5kIG5vdCBzZWxmLl9pc19yZWxvYWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3NlbGYuX25hbWVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogCiAjIE1vZHVsZS1sZXZlbCBsb2NraW5nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTIxNCw3ICsyMDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCArPSAxCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmhhc19kZWFkbG9jaygpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgX0RlYWRsb2NrRXJyb3IoImRlYWRsb2NrIGRldGVjdGVkIGJ5ICVyIiAlIHNlbGYpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBfRGVhZGxvY2tFcnJvcignZGVhZGxvY2sgZGV0ZWN0ZWQgYnkgJXInICUgc2VsZikKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi53YWtldXAuYWNxdWlyZShGYWxzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndhaXRlcnMgKz0gMQogICAgICAgICAgICAgICAgICMgV2FpdCBmb3IgYSByZWxlYXNlKCkgY2FsbApAQCAtMjI3LDcgKzIxOCw3IEBACiAgICAgICAgIHRpZCA9IF90aHJlYWQuZ2V0X2lkZW50KCkKICAgICAgICAgd2l0aCBzZWxmLmxvY2s6CiAgICAgICAgICAgICBpZiBzZWxmLm93bmVyICE9IHRpZDoKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCByZWxlYXNlIHVuLWFjcXVpcmVkIGxvY2siKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IHJlbGVhc2UgdW4tYWNxdWlyZWQgbG9jaycpCiAgICAgICAgICAgICBhc3NlcnQgc2VsZi5jb3VudCA+IDAKICAgICAgICAgICAgIHNlbGYuY291bnQgLT0gMQogICAgICAgICAgICAgaWYgc2VsZi5jb3VudCA9PSAwOgpAQCAtMjM3LDcgKzIyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYud2FrZXVwLnJlbGVhc2UoKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIl9Nb2R1bGVMb2NrKCVyKSBhdCAlZCIgJSAoc2VsZi5uYW1lLCBpZChzZWxmKSkKKyAgICAgICAgcmV0dXJuICdfTW9kdWxlTG9jayh7IXJ9KSBhdCB7fScuZm9ybWF0KHNlbGYubmFtZSwgaWQoc2VsZikpCiAKIAogY2xhc3MgX0R1bW15TW9kdWxlTG9jazoKQEAgLTI1NCwxMSArMjQ1LDI4IEBACiAKICAgICBkZWYgcmVsZWFzZShzZWxmKToKICAgICAgICAgaWYgc2VsZi5jb3VudCA9PSAwOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrIikKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IHJlbGVhc2UgdW4tYWNxdWlyZWQgbG9jaycpCiAgICAgICAgIHNlbGYuY291bnQgLT0gMQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIl9EdW1teU1vZHVsZUxvY2soJXIpIGF0ICVkIiAlIChzZWxmLm5hbWUsIGlkKHNlbGYpKQorICAgICAgICByZXR1cm4gJ19EdW1teU1vZHVsZUxvY2soeyFyfSkgYXQge30nLmZvcm1hdChzZWxmLm5hbWUsIGlkKHNlbGYpKQorCisKK2NsYXNzIF9Nb2R1bGVMb2NrTWFuYWdlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fbG9jayA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2xvY2sgPSBfZ2V0X21vZHVsZV9sb2NrKHNlbGYuX25hbWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfaW1wLnJlbGVhc2VfbG9jaygpCisgICAgICAgIHNlbGYuX2xvY2suYWNxdWlyZSgpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fbG9jay5yZWxlYXNlKCkKIAogCiAjIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgZm9yIGNvbnN1bXB0aW9uIGJ5IFB5dGhvbi9pbXBvcnQuYy4KQEAgLTMxNSw5NSArMzIzLDEwOCBAQAogCiAjIEZpbmRlci9sb2FkZXIgdXRpbGl0eSBjb2RlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLSIiIk1hZ2ljIHdvcmQgdG8gcmVqZWN0IC5weWMgZmlsZXMgZ2VuZXJhdGVkIGJ5IG90aGVyIFB5dGhvbiB2ZXJzaW9ucy4KLUl0IHNob3VsZCBjaGFuZ2UgZm9yIGVhY2ggaW5jb21wYXRpYmxlIGNoYW5nZSB0byB0aGUgYnl0ZWNvZGUuCisjIE1hZ2ljIHdvcmQgdG8gcmVqZWN0IC5weWMgZmlsZXMgZ2VuZXJhdGVkIGJ5IG90aGVyIFB5dGhvbiB2ZXJzaW9ucy4KKyMgSXQgc2hvdWxkIGNoYW5nZSBmb3IgZWFjaCBpbmNvbXBhdGlibGUgY2hhbmdlIHRvIHRoZSBieXRlY29kZS4KKyMKKyMgVGhlIHZhbHVlIG9mIENSIGFuZCBMRiBpcyBpbmNvcnBvcmF0ZWQgc28gaWYgeW91IGV2ZXIgcmVhZCBvciB3cml0ZQorIyBhIC5weWMgZmlsZSBpbiB0ZXh0IG1vZGUgdGhlIG1hZ2ljIG51bWJlciB3aWxsIGJlIHdyb25nOyBhbHNvLCB0aGUKKyMgQXBwbGUgTVBXIGNvbXBpbGVyIHN3YXBzIHRoZWlyIHZhbHVlcywgYm90Y2hpbmcgc3RyaW5nIGNvbnN0YW50cy4KKyMKKyMgVGhlIG1hZ2ljIG51bWJlcnMgbXVzdCBiZSBzcGFjZWQgYXBhcnQgYXQgbGVhc3QgMiB2YWx1ZXMsIGFzIHRoZQorIyAtVSBpbnRlcnBldGVyIGZsYWcgd2lsbCBjYXVzZSBNQUdJQysxIGJlaW5nIHVzZWQuIFRoZXkgaGF2ZSBiZWVuCisjIG9kZCBudW1iZXJzIGZvciBzb21lIHRpbWUgbm93LgorIworIyBUaGVyZSB3ZXJlIGEgdmFyaWV0eSBvZiBvbGQgc2NoZW1lcyBmb3Igc2V0dGluZyB0aGUgbWFnaWMgbnVtYmVyLgorIyBUaGUgY3VycmVudCB3b3JraW5nIHNjaGVtZSBpcyB0byBpbmNyZW1lbnQgdGhlIHByZXZpb3VzIHZhbHVlIGJ5CisjIDEwLgorIworIyBTdGFydGluZyB3aXRoIHRoZSBhZG9wdGlvbiBvZiBQRVAgMzE0NyBpbiBQeXRob24gMy4yLCBldmVyeSBidW1wIGluIG1hZ2ljCisjIG51bWJlciBhbHNvIGluY2x1ZGVzIGEgbmV3ICJtYWdpYyB0YWciLCBpLmUuIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHVzZWQKKyMgdG8gcmVwcmVzZW50IHRoZSBtYWdpYyBudW1iZXIgaW4gX19weWNhY2hlX18gZGlyZWN0b3JpZXMuICBXaGVuIHlvdSBjaGFuZ2UKKyMgdGhlIG1hZ2ljIG51bWJlciwgeW91IG11c3QgYWxzbyBzZXQgYSBuZXcgdW5pcXVlIG1hZ2ljIHRhZy4gIEdlbmVyYWxseSB0aGlzCisjIGNhbiBiZSBuYW1lZCBhZnRlciB0aGUgUHl0aG9uIG1ham9yIHZlcnNpb24gb2YgdGhlIG1hZ2ljIG51bWJlciBidW1wLCBidXQKKyMgaXQgY2FuIHJlYWxseSBiZSBhbnl0aGluZywgYXMgbG9uZyBhcyBpdCdzIGRpZmZlcmVudCB0aGFuIGFueXRoaW5nIGVsc2UKKyMgdGhhdCdzIGNvbWUgYmVmb3JlLiAgVGhlIHRhZ3MgYXJlIGluY2x1ZGVkIGluIHRoZSBmb2xsb3dpbmcgdGFibGUsIHN0YXJ0aW5nCisjIHdpdGggUHl0aG9uIDMuMmEwLgorIworIyBLbm93biB2YWx1ZXM6CisjICBQeXRob24gMS41OiAgIDIwMTIxCisjICBQeXRob24gMS41LjE6IDIwMTIxCisjICAgICBQeXRob24gMS41LjI6IDIwMTIxCisjICAgICBQeXRob24gMS42OiAgIDUwNDI4CisjICAgICBQeXRob24gMi4wOiAgIDUwODIzCisjICAgICBQeXRob24gMi4wLjE6IDUwODIzCisjICAgICBQeXRob24gMi4xOiAgIDYwMjAyCisjICAgICBQeXRob24gMi4xLjE6IDYwMjAyCisjICAgICBQeXRob24gMi4xLjI6IDYwMjAyCisjICAgICBQeXRob24gMi4yOiAgIDYwNzE3CisjICAgICBQeXRob24gMi4zYTA6IDYyMDExCisjICAgICBQeXRob24gMi4zYTA6IDYyMDIxCisjICAgICBQeXRob24gMi4zYTA6IDYyMDExICghKQorIyAgICAgUHl0aG9uIDIuNGEwOiA2MjA0MQorIyAgICAgUHl0aG9uIDIuNGEzOiA2MjA1MQorIyAgICAgUHl0aG9uIDIuNGIxOiA2MjA2MQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA3MQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA4MSAoYXN0LWJyYW5jaCkKKyMgICAgIFB5dGhvbiAyLjVhMDogNjIwOTEgKHdpdGgpCisjICAgICBQeXRob24gMi41YTA6IDYyMDkyIChjaGFuZ2VkIFdJVEhfQ0xFQU5VUCBvcGNvZGUpCisjICAgICBQeXRob24gMi41YjM6IDYyMTAxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLikKKyMgICAgIFB5dGhvbiAyLjViMzogNjIxMTEgKGZpeCB3cm9uZyBjb2RlOiB4ICs9IHlpZWxkKQorIyAgICAgUHl0aG9uIDIuNWMxOiA2MjEyMSAoZml4IHdyb25nIGxub3RhYiB3aXRoIGZvciBsb29wcyBhbmQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JpbmcgY29uc3RhbnRzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkKQorIyAgICAgUHl0aG9uIDIuNWMyOiA2MjEzMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4gaW4gbGlzdGNvbXAvZ2VuZXhwKQorIyAgICAgUHl0aG9uIDIuNmEwOiA2MjE1MSAocGVlcGhvbGUgb3B0aW1pemF0aW9ucyBhbmQgU1RPUkVfTUFQIG9wY29kZSkKKyMgICAgIFB5dGhvbiAyLjZhMTogNjIxNjEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pCisjICAgICBQeXRob24gMi43YTA6IDYyMTcxIChvcHRpbWl6ZSBsaXN0IGNvbXByZWhlbnNpb25zL2NoYW5nZSBMSVNUX0FQUEVORCkKKyMgICAgIFB5dGhvbiAyLjdhMDogNjIxODEgKG9wdGltaXplIGNvbmRpdGlvbmFsIGJyYW5jaGVzOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQorIyAgICAgUHl0aG9uIDIuN2EwICA2MjE5MSAoaW50cm9kdWNlIFNFVFVQX1dJVEgpCisjICAgICBQeXRob24gMi43YTAgIDYyMjAxIChpbnRyb2R1Y2UgQlVJTERfU0VUKQorIyAgICAgUHl0aG9uIDIuN2EwICA2MjIxMSAoaW50cm9kdWNlIE1BUF9BREQgYW5kIFNFVF9BREQpCisjICAgICBQeXRob24gMzAwMDogICAzMDAwCisjICAgICAgICAgICAgICAgICAgICAzMDEwIChyZW1vdmVkIFVOQVJZX0NPTlZFUlQpCisjICAgICAgICAgICAgICAgICAgICAzMDIwIChhZGRlZCBCVUlMRF9TRVQpCisjICAgICAgICAgICAgICAgICAgICAzMDMwIChhZGRlZCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycykKKyMgICAgICAgICAgICAgICAgICAgIDMwNDAgKGFkZGVkIHNpZ25hdHVyZSBhbm5vdGF0aW9ucykKKyMgICAgICAgICAgICAgICAgICAgIDMwNTAgKHByaW50IGJlY29tZXMgYSBmdW5jdGlvbikKKyMgICAgICAgICAgICAgICAgICAgIDMwNjAgKFBFUCAzMTE1IG1ldGFjbGFzcyBzeW50YXgpCisjICAgICAgICAgICAgICAgICAgICAzMDYxIChzdHJpbmcgbGl0ZXJhbHMgYmVjb21lIHVuaWNvZGUpCisjICAgICAgICAgICAgICAgICAgICAzMDcxIChQRVAgMzEwOSByYWlzZSBjaGFuZ2VzKQorIyAgICAgICAgICAgICAgICAgICAgMzA4MSAoUEVQIDMxMzcgbWFrZSBfX2ZpbGVfXyBhbmQgX19uYW1lX18gdW5pY29kZSkKKyMgICAgICAgICAgICAgICAgICAgIDMwOTEgKGtpbGwgc3RyOCBpbnRlcm5pbmcpCisjICAgICAgICAgICAgICAgICAgICAzMTAxIChtZXJnZSBmcm9tIDIuNmEwLCBzZWUgNjIxNTEpCisjICAgICAgICAgICAgICAgICAgICAzMTAzIChfX2ZpbGVfXyBwb2ludHMgdG8gc291cmNlIGZpbGUpCisjICAgICBQeXRob24gMy4wYTQ6IDMxMTEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pLgorIyAgICAgUHl0aG9uIDMuMGE1OiAzMTMxIChsZXhpY2FsIGV4Y2VwdGlvbiBzdGFja2luZywgaW5jbHVkaW5nIFBPUF9FWENFUFQpCisjICAgICBQeXRob24gMy4xYTA6IDMxNDEgKG9wdGltaXplIGxpc3QsIHNldCBhbmQgZGljdCBjb21wcmVoZW5zaW9uczoKKyMgICAgICAgICAgICAgY2hhbmdlIExJU1RfQVBQRU5EIGFuZCBTRVRfQURELCBhZGQgTUFQX0FERCkKKyMgICAgIFB5dGhvbiAzLjFhMDogMzE1MSAob3B0aW1pemUgY29uZGl0aW9uYWwgYnJhbmNoZXM6CisjICAgICAgICAgICAgIGludHJvZHVjZSBQT1BfSlVNUF9JRl9GQUxTRSBhbmQgUE9QX0pVTVBfSUZfVFJVRSkKKyMgICAgIFB5dGhvbiAzLjJhMDogMzE2MCAoYWRkIFNFVFVQX1dJVEgpCisjICAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgorIyAgICAgUHl0aG9uIDMuMmExOiAzMTcwIChhZGQgRFVQX1RPUF9UV08sIHJlbW92ZSBEVVBfVE9QWCBhbmQgUk9UX0ZPVVIpCisjICAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgorIyAgICAgUHl0aG9uIDMuMmEyICAzMTgwIChhZGQgREVMRVRFX0RFUkVGKQorIyAgICAgUHl0aG9uIDMuM2EwICAzMTkwIF9fY2xhc3NfXyBzdXBlciBjbG9zdXJlIGNoYW5nZWQKKyMgICAgIFB5dGhvbiAzLjNhMCAgMzIwMCAoX19xdWFsbmFtZV9fIGFkZGVkKQorIyAgICAgICAgICAgICAgICAgICAgICAzMjEwIChhZGRlZCBzaXplIG1vZHVsbyAyKiozMiB0byB0aGUgcHljIGhlYWRlcikKKyMgICAgIFB5dGhvbiAzLjNhMSAgMzIyMCAoY2hhbmdlZCBQRVAgMzgwIGltcGxlbWVudGF0aW9uKQorIyAgICAgUHl0aG9uIDMuM2E0ICAzMjMwIChyZXZlcnQgY2hhbmdlcyB0byBpbXBsaWNpdCBfX2NsYXNzX18gY2xvc3VyZSkKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI1MCAoZXZhbHVhdGUgcG9zaXRpb25hbCBkZWZhdWx0IGFyZ3VtZW50cyBiZWZvcmUKKyMgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkLW9ubHkgZGVmYXVsdHMpCisjICAgICBQeXRob24gMy40YTEgIDMyNjAgKGFkZCBMT0FEX0NMQVNTREVSRUY7IGFsbG93IGxvY2FscyBvZiBjbGFzcyB0byBvdmVycmlkZQorIyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgdmFycykKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI3MCAodmFyaW91cyB0d2Vha3MgdG8gdGhlIF9fY2xhc3NfXyBjbG9zdXJlKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjgwIChyZW1vdmUgaW1wbGljaXQgY2xhc3MgYXJndW1lbnQpCisjICAgICBQeXRob24gMy40YTQgIDMyOTAgKGNoYW5nZXMgdG8gX19xdWFsbmFtZV9fIGNvbXB1dGF0aW9uKQorIyAgICAgUHl0aG9uIDMuNGE0ICAzMzAwIChtb3JlIGNoYW5nZXMgdG8gX19xdWFsbmFtZV9fIGNvbXB1dGF0aW9uKQorIworIyBNQUdJQyBtdXN0IGNoYW5nZSB3aGVuZXZlciB0aGUgYnl0ZWNvZGUgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIgbWF5IG5vCisjIGxvbmdlciBiZSB1bmRlcnN0b29kIGJ5IG9sZGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZXZhbCBsb29wICh1c3VhbGx5CisjIGR1ZSB0byB0aGUgYWRkaXRpb24gb2YgbmV3IG9wY29kZXMpLgogCi1UaGUgdmFsdWUgb2YgQ1IgYW5kIExGIGlzIGluY29ycG9yYXRlZCBzbyBpZiB5b3UgZXZlciByZWFkIG9yIHdyaXRlCi1hIC5weWMgZmlsZSBpbiB0ZXh0IG1vZGUgdGhlIG1hZ2ljIG51bWJlciB3aWxsIGJlIHdyb25nOyBhbHNvLCB0aGUKLUFwcGxlIE1QVyBjb21waWxlciBzd2FwcyB0aGVpciB2YWx1ZXMsIGJvdGNoaW5nIHN0cmluZyBjb25zdGFudHMuCi0KLVRoZSBtYWdpYyBudW1iZXJzIG11c3QgYmUgc3BhY2VkIGFwYXJ0IGF0IGxlYXN0IDIgdmFsdWVzLCBhcyB0aGUKLS1VIGludGVycGV0ZXIgZmxhZyB3aWxsIGNhdXNlIE1BR0lDKzEgYmVpbmcgdXNlZC4gVGhleSBoYXZlIGJlZW4KLW9kZCBudW1iZXJzIGZvciBzb21lIHRpbWUgbm93LgotCi1UaGVyZSB3ZXJlIGEgdmFyaWV0eSBvZiBvbGQgc2NoZW1lcyBmb3Igc2V0dGluZyB0aGUgbWFnaWMgbnVtYmVyLgotVGhlIGN1cnJlbnQgd29ya2luZyBzY2hlbWUgaXMgdG8gaW5jcmVtZW50IHRoZSBwcmV2aW91cyB2YWx1ZSBieQotMTAuCi0KLVN0YXJ0aW5nIHdpdGggdGhlIGFkb3B0aW9uIG9mIFBFUCAzMTQ3IGluIFB5dGhvbiAzLjIsIGV2ZXJ5IGJ1bXAgaW4gbWFnaWMKLW51bWJlciBhbHNvIGluY2x1ZGVzIGEgbmV3ICJtYWdpYyB0YWciLCBpLmUuIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHVzZWQKLXRvIHJlcHJlc2VudCB0aGUgbWFnaWMgbnVtYmVyIGluIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLiAgV2hlbiB5b3UgY2hhbmdlCi10aGUgbWFnaWMgbnVtYmVyLCB5b3UgbXVzdCBhbHNvIHNldCBhIG5ldyB1bmlxdWUgbWFnaWMgdGFnLiAgR2VuZXJhbGx5IHRoaXMKLWNhbiBiZSBuYW1lZCBhZnRlciB0aGUgUHl0aG9uIG1ham9yIHZlcnNpb24gb2YgdGhlIG1hZ2ljIG51bWJlciBidW1wLCBidXQKLWl0IGNhbiByZWFsbHkgYmUgYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBkaWZmZXJlbnQgdGhhbiBhbnl0aGluZyBlbHNlCi10aGF0J3MgY29tZSBiZWZvcmUuICBUaGUgdGFncyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgc3RhcnRpbmcKLXdpdGggUHl0aG9uIDMuMmEwLgotCi1Lbm93biB2YWx1ZXM6Ci0gUHl0aG9uIDEuNTogICAyMDEyMQotIFB5dGhvbiAxLjUuMTogMjAxMjEKLSAgICBQeXRob24gMS41LjI6IDIwMTIxCi0gICAgUHl0aG9uIDEuNjogICA1MDQyOAotICAgIFB5dGhvbiAyLjA6ICAgNTA4MjMKLSAgICBQeXRob24gMi4wLjE6IDUwODIzCi0gICAgUHl0aG9uIDIuMTogICA2MDIwMgotICAgIFB5dGhvbiAyLjEuMTogNjAyMDIKLSAgICBQeXRob24gMi4xLjI6IDYwMjAyCi0gICAgUHl0aG9uIDIuMjogICA2MDcxNwotICAgIFB5dGhvbiAyLjNhMDogNjIwMTEKLSAgICBQeXRob24gMi4zYTA6IDYyMDIxCi0gICAgUHl0aG9uIDIuM2EwOiA2MjAxMSAoISkKLSAgICBQeXRob24gMi40YTA6IDYyMDQxCi0gICAgUHl0aG9uIDIuNGEzOiA2MjA1MQotICAgIFB5dGhvbiAyLjRiMTogNjIwNjEKLSAgICBQeXRob24gMi41YTA6IDYyMDcxCi0gICAgUHl0aG9uIDIuNWEwOiA2MjA4MSAoYXN0LWJyYW5jaCkKLSAgICBQeXRob24gMi41YTA6IDYyMDkxICh3aXRoKQotICAgIFB5dGhvbiAyLjVhMDogNjIwOTIgKGNoYW5nZWQgV0lUSF9DTEVBTlVQIG9wY29kZSkKLSAgICBQeXRob24gMi41YjM6IDYyMTAxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLikKLSAgICBQeXRob24gMi41YjM6IDYyMTExIChmaXggd3JvbmcgY29kZTogeCArPSB5aWVsZCkKLSAgICBQeXRob24gMi41YzE6IDYyMTIxIChmaXggd3JvbmcgbG5vdGFiIHdpdGggZm9yIGxvb3BzIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JpbmcgY29uc3RhbnRzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkKQotICAgIFB5dGhvbiAyLjVjMjogNjIxMzEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uIGluIGxpc3Rjb21wL2dlbmV4cCkKLSAgICBQeXRob24gMi42YTA6IDYyMTUxIChwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGFuZCBTVE9SRV9NQVAgb3Bjb2RlKQotICAgIFB5dGhvbiAyLjZhMTogNjIxNjEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pCi0gICAgUHl0aG9uIDMwMDA6ICAgMzAwMAotICAgICAgICAgICAgICAgICAgIDMwMTAgKHJlbW92ZWQgVU5BUllfQ09OVkVSVCkKLSAgICAgICAgICAgICAgICAgICAzMDIwIChhZGRlZCBCVUlMRF9TRVQpCi0gICAgICAgICAgICAgICAgICAgMzAzMCAoYWRkZWQga2V5d29yZC1vbmx5IHBhcmFtZXRlcnMpCi0gICAgICAgICAgICAgICAgICAgMzA0MCAoYWRkZWQgc2lnbmF0dXJlIGFubm90YXRpb25zKQotICAgICAgICAgICAgICAgICAgIDMwNTAgKHByaW50IGJlY29tZXMgYSBmdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAzMDYwIChQRVAgMzExNSBtZXRhY2xhc3Mgc3ludGF4KQotICAgICAgICAgICAgICAgICAgIDMwNjEgKHN0cmluZyBsaXRlcmFscyBiZWNvbWUgdW5pY29kZSkKLSAgICAgICAgICAgICAgICAgICAzMDcxIChQRVAgMzEwOSByYWlzZSBjaGFuZ2VzKQotICAgICAgICAgICAgICAgICAgIDMwODEgKFBFUCAzMTM3IG1ha2UgX19maWxlX18gYW5kIF9fbmFtZV9fIHVuaWNvZGUpCi0gICAgICAgICAgICAgICAgICAgMzA5MSAoa2lsbCBzdHI4IGludGVybmluZykKLSAgICAgICAgICAgICAgICAgICAzMTAxIChtZXJnZSBmcm9tIDIuNmEwLCBzZWUgNjIxNTEpCi0gICAgICAgICAgICAgICAgICAgMzEwMyAoX19maWxlX18gcG9pbnRzIHRvIHNvdXJjZSBmaWxlKQotICAgIFB5dGhvbiAzLjBhNDogMzExMSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikuCi0gICAgUHl0aG9uIDMuMGE1OiAzMTMxIChsZXhpY2FsIGV4Y2VwdGlvbiBzdGFja2luZywgaW5jbHVkaW5nIFBPUF9FWENFUFQpCi0gICAgUHl0aG9uIDMuMWEwOiAzMTQxIChvcHRpbWl6ZSBsaXN0LCBzZXQgYW5kIGRpY3QgY29tcHJlaGVuc2lvbnM6Ci0gICAgICAgICAgICBjaGFuZ2UgTElTVF9BUFBFTkQgYW5kIFNFVF9BREQsIGFkZCBNQVBfQUREKQotICAgIFB5dGhvbiAzLjFhMDogMzE1MSAob3B0aW1pemUgY29uZGl0aW9uYWwgYnJhbmNoZXM6Ci0gICAgICAgICAgICBpbnRyb2R1Y2UgUE9QX0pVTVBfSUZfRkFMU0UgYW5kIFBPUF9KVU1QX0lGX1RSVUUpCi0gICAgUHl0aG9uIDMuMmEwOiAzMTYwIChhZGQgU0VUVVBfV0lUSCkKLSAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgotICAgIFB5dGhvbiAzLjJhMTogMzE3MCAoYWRkIERVUF9UT1BfVFdPLCByZW1vdmUgRFVQX1RPUFggYW5kIFJPVF9GT1VSKQotICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCi0gICAgUHl0aG9uIDMuMmEyICAzMTgwIChhZGQgREVMRVRFX0RFUkVGKQotICAgIFB5dGhvbiAzLjNhMCAgMzE5MCBfX2NsYXNzX18gc3VwZXIgY2xvc3VyZSBjaGFuZ2VkCi0gICAgUHl0aG9uIDMuM2EwICAzMjAwIChfX3F1YWxuYW1lX18gYWRkZWQpCi0gICAgICAgICAgICAgICAgICAgICAzMjEwIChhZGRlZCBzaXplIG1vZHVsbyAyKiozMiB0byB0aGUgcHljIGhlYWRlcikKLSAgICBQeXRob24gMy4zYTEgIDMyMjAgKGNoYW5nZWQgUEVQIDM4MCBpbXBsZW1lbnRhdGlvbikKLSAgICBQeXRob24gMy4zYTQgIDMyMzAgKHJldmVydCBjaGFuZ2VzIHRvIGltcGxpY2l0IF9fY2xhc3NfXyBjbG9zdXJlKQotCi1NQUdJQyBtdXN0IGNoYW5nZSB3aGVuZXZlciB0aGUgYnl0ZWNvZGUgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIgbWF5IG5vCi1sb25nZXIgYmUgdW5kZXJzdG9vZCBieSBvbGRlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGV2YWwgbG9vcCAodXN1YWxseQotZHVlIHRvIHRoZSBhZGRpdGlvbiBvZiBuZXcgb3Bjb2RlcykuCi0KLSIiIgotX1JBV19NQUdJQ19OVU1CRVIgPSAzMjMwIHwgb3JkKCdccicpIDw8IDE2IHwgb3JkKCdcbicpIDw8IDI0Ci1fTUFHSUNfQllURVMgPSBieXRlcyhfUkFXX01BR0lDX05VTUJFUiA+PiBuICYgMHhmZiBmb3IgbiBpbiByYW5nZSgwLCAyNSwgOCkpCitNQUdJQ19OVU1CRVIgPSAoMzMwMCkudG9fYnl0ZXMoMiwgJ2xpdHRsZScpICsgYidcclxuJworX1JBV19NQUdJQ19OVU1CRVIgPSBpbnQuZnJvbV9ieXRlcyhNQUdJQ19OVU1CRVIsICdsaXR0bGUnKSAgIyBGb3IgaW1wb3J0LmMKIAogX1BZQ0FDSEUgPSAnX19weWNhY2hlX18nCiAKQEAgLTQ4MSw2ICs1MDIsMTggQEAKICAgICByZXR1cm4gc291cmNlX3BhdGggaWYgX3BhdGhfaXNmaWxlKHNvdXJjZV9wYXRoKSBlbHNlIGJ5dGVjb2RlX3BhdGgKIAogCitkZWYgX2NhbGNfbW9kZShwYXRoKToKKyAgICAiIiJDYWxjdWxhdGUgdGhlIG1vZGUgcGVybWlzc2lvbnMgZm9yIGEgYnl0ZWNvZGUgZmlsZS4iIiIKKyAgICB0cnk6CisgICAgICAgIG1vZGUgPSBfcGF0aF9zdGF0KHBhdGgpLnN0X21vZGUKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgbW9kZSA9IDBvNjY2CisgICAgIyBXZSBhbHdheXMgZW5zdXJlIHdyaXRlIGFjY2VzcyBzbyB3ZSBjYW4gdXBkYXRlIGNhY2hlZCBmaWxlcworICAgICMgbGF0ZXIgZXZlbiB3aGVuIHRoZSBzb3VyY2UgZmlsZXMgYXJlIHJlYWQtb25seSBvbiBXaW5kb3dzICgjNjA3NCkKKyAgICBtb2RlIHw9IDBvMjAwCisgICAgcmV0dXJuIG1vZGUKKworCiBkZWYgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlLCAqYXJncywgdmVyYm9zaXR5PTEpOgogICAgICIiIlByaW50IHRoZSBtZXNzYWdlIHRvIHN0ZGVyciBpZiAtdi9QWVRIT05WRVJCT1NFIGlzIHR1cm5lZCBvbi4iIiIKICAgICBpZiBzeXMuZmxhZ3MudmVyYm9zZSA+PSB2ZXJib3NpdHk6CkBAIC00ODksODUgKzUyMiw2IEBACiAgICAgICAgIHByaW50KG1lc3NhZ2UuZm9ybWF0KCphcmdzKSwgZmlsZT1zeXMuc3RkZXJyKQogCiAKLWRlZiBzZXRfcGFja2FnZShmeG4pOgotICAgICIiIlNldCBfX3BhY2thZ2VfXyBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLiIiIgotICAgIGRlZiBzZXRfcGFja2FnZV93cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIG1vZHVsZSA9IGZ4bigqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgotICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fbmFtZV9fCi0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgotICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgcmV0dXJuIG1vZHVsZQotICAgIF93cmFwKHNldF9wYWNrYWdlX3dyYXBwZXIsIGZ4bikKLSAgICByZXR1cm4gc2V0X3BhY2thZ2Vfd3JhcHBlcgotCi0KLWRlZiBzZXRfbG9hZGVyKGZ4bik6Ci0gICAgIiIiU2V0IF9fbG9hZGVyX18gb24gdGhlIHJldHVybmVkIG1vZHVsZS4iIiIKLSAgICBkZWYgc2V0X2xvYWRlcl93cmFwcGVyKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIG1vZHVsZSA9IGZ4bihzZWxmLCAqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKToKLSAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgotICAgICAgICByZXR1cm4gbW9kdWxlCi0gICAgX3dyYXAoc2V0X2xvYWRlcl93cmFwcGVyLCBmeG4pCi0gICAgcmV0dXJuIHNldF9sb2FkZXJfd3JhcHBlcgotCi0KLWRlZiBtb2R1bGVfZm9yX2xvYWRlcihmeG4pOgotICAgICIiIkRlY29yYXRvciB0byBoYW5kbGUgc2VsZWN0aW5nIHRoZSBwcm9wZXIgbW9kdWxlIGZvciBsb2FkZXJzLgotCi0gICAgVGhlIGRlY29yYXRlZCBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIG1vZHVsZSB0byB1c2UgaW5zdGVhZCBvZiB0aGUgbW9kdWxlCi0gICAgbmFtZS4gVGhlIG1vZHVsZSBwYXNzZWQgaW4gdG8gdGhlIGZ1bmN0aW9uIGlzIGVpdGhlciBmcm9tIHN5cy5tb2R1bGVzIGlmCi0gICAgaXQgYWxyZWFkeSBleGlzdHMgb3IgaXMgYSBuZXcgbW9kdWxlLiBJZiB0aGUgbW9kdWxlIGlzIG5ldywgdGhlbiBfX25hbWVfXwotICAgIGlzIHNldCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIG1ldGhvZCwgX19sb2FkZXJfXyBpcyBzZXQgdG8gc2VsZiwgYW5kCi0gICAgX19wYWNrYWdlX18gaXMgc2V0IGFjY29yZGluZ2x5IChpZiBzZWxmLmlzX3BhY2thZ2UoKSBpcyBkZWZpbmVkKSB3aWxsIGJlIHNldAotICAgIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG8gdGhlIGRlY29yYXRlZCBmdW5jdGlvbiAoaWYgc2VsZi5pc19wYWNrYWdlKCkgZG9lcwotICAgIG5vdCB3b3JrIGZvciB0aGUgbW9kdWxlIGl0IHdpbGwgYmUgc2V0IHBvc3QtbG9hZCkuCi0KLSAgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGFuZCB0aGUgZGVjb3JhdG9yIGNyZWF0ZWQgdGhlIG1vZHVsZSBpdCBpcwotICAgIHN1YnNlcXVlbnRseSByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMuCi0KLSAgICBUaGUgZGVjb3JhdG9yIGFzc3VtZXMgdGhhdCB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIHRha2VzIHRoZSBtb2R1bGUgbmFtZSBhcwotICAgIHRoZSBzZWNvbmQgYXJndW1lbnQuCi0KLSAgICAiIiIKLSAgICBkZWYgbW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlcihzZWxmLCBmdWxsbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXMuZ2V0KGZ1bGxuYW1lKQotICAgICAgICBpc19yZWxvYWQgPSBtb2R1bGUgaXMgbm90IE5vbmUKLSAgICAgICAgaWYgbm90IGlzX3JlbG9hZDoKLSAgICAgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIG9wZW4oKSBpcyBjYWxsZWQgYXMgdGhlICdpbycgbW9kdWxlCi0gICAgICAgICAgICAjIGltcGxpY2l0bHkgaW1wb3J0cyAnbG9jYWxlJyBhbmQgd291bGQgb3RoZXJ3aXNlIHRyaWdnZXIgYW4KLSAgICAgICAgICAgICMgaW5maW5pdGUgbG9vcC4KLSAgICAgICAgICAgIG1vZHVsZSA9IG5ld19tb2R1bGUoZnVsbG5hbWUpCi0gICAgICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBwdXR0aW5nIHRoZSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgICAgICMgKG90aGVyd2lzZSBhbiBvcHRpbWl6YXRpb24gc2hvcnRjdXQgaW4gaW1wb3J0LmMgYmVjb21lcyB3cm9uZykKLSAgICAgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gVHJ1ZQotICAgICAgICAgICAgc3lzLm1vZHVsZXNbZnVsbG5hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKQotICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgaXNfcGFja2FnZToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gZnVsbG5hbWUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gVHJ1ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIElmIF9fcGFja2FnZV9fIHdhcyBub3Qgc2V0IGFib3ZlLCBfX2ltcG9ydF9fKCkgd2lsbCBkbyBpdCBsYXRlci4KLSAgICAgICAgICAgIHJldHVybiBmeG4oc2VsZiwgbW9kdWxlLCAqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQ6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gRmFsc2UKLSAgICBfd3JhcChtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyLCBmeG4pCi0gICAgcmV0dXJuIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIKLQotCiBkZWYgX2NoZWNrX25hbWUobWV0aG9kKToKICAgICAiIiJEZWNvcmF0b3IgdG8gdmVyaWZ5IHRoYXQgdGhlIG1vZHVsZSBiZWluZyByZXF1ZXN0ZWQgbWF0Y2hlcyB0aGUgb25lIHRoZQogICAgIGxvYWRlciBjYW4gaGFuZGxlLgpAQCAtNTgwLDcgKzUzNCw3IEBACiAgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKICAgICAgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKICAgICAgICAgZWxpZiBzZWxmLm5hbWUgIT0gbmFtZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJsb2FkZXIgY2Fubm90IGhhbmRsZSAlcyIgJSBuYW1lLCBuYW1lPW5hbWUpCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbG9hZGVyIGNhbm5vdCBoYW5kbGUgJXMnICUgbmFtZSwgbmFtZT1uYW1lKQogICAgICAgICByZXR1cm4gbWV0aG9kKHNlbGYsIG5hbWUsICphcmdzLCAqKmt3YXJncykKICAgICBfd3JhcChfY2hlY2tfbmFtZV93cmFwcGVyLCBtZXRob2QpCiAgICAgcmV0dXJuIF9jaGVja19uYW1lX3dyYXBwZXIKQEAgLTU5MCw3ICs1NDQsNyBAQAogICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhlIG5hbWVkIG1vZHVsZSBpcyBidWlsdC1pbi4iIiIKICAgICBkZWYgX3JlcXVpcmVzX2J1aWx0aW5fd3JhcHBlcihzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIGlmIGZ1bGxuYW1lIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigie30gaXMgbm90IGEgYnVpbHQtaW4gbW9kdWxlIi5mb3JtYXQoZnVsbG5hbWUpLAorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3shcn0gaXMgbm90IGEgYnVpbHQtaW4gbW9kdWxlJy5mb3JtYXQoZnVsbG5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkKICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBmdWxsbmFtZSkKICAgICBfd3JhcChfcmVxdWlyZXNfYnVpbHRpbl93cmFwcGVyLCBmeG4pCkBAIC02MDEsNyArNTU1LDcgQEAKICAgICAiIiJEZWNvcmF0b3IgdG8gdmVyaWZ5IHRoZSBuYW1lZCBtb2R1bGUgaXMgZnJvemVuLiIiIgogICAgIGRlZiBfcmVxdWlyZXNfZnJvemVuX3dyYXBwZXIoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICBpZiBub3QgX2ltcC5pc19mcm96ZW4oZnVsbG5hbWUpOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoInt9IGlzIG5vdCBhIGZyb3plbiBtb2R1bGUiLmZvcm1hdChmdWxsbmFtZSksCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigneyFyfSBpcyBub3QgYSBmcm96ZW4gbW9kdWxlJy5mb3JtYXQoZnVsbG5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkKICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBmdWxsbmFtZSkKICAgICBfd3JhcChfcmVxdWlyZXNfZnJvemVuX3dyYXBwZXIsIGZ4bikKQEAgLTYxMCwxNyArNTY0LDY1OSBAQAogCiBkZWYgX2ZpbmRfbW9kdWxlX3NoaW0oc2VsZiwgZnVsbG5hbWUpOgogICAgICIiIlRyeSB0byBmaW5kIGEgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZSBieSBkZWxlZ2F0aW5nIHRvCi0gICAgc2VsZi5maW5kX2xvYWRlcigpLiIiIgorICAgIHNlbGYuZmluZF9sb2FkZXIoKS4KKworICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgZmluZGVyLmZpbmRfc3BlYygpLgorCisgICAgIiIiCiAgICAgIyBDYWxsIGZpbmRfbG9hZGVyKCkuIElmIGl0IHJldHVybnMgYSBzdHJpbmcgKGluZGljYXRpbmcgdGhpcwogICAgICMgaXMgYSBuYW1lc3BhY2UgcGFja2FnZSBwb3J0aW9uKSwgZ2VuZXJhdGUgYSB3YXJuaW5nIGFuZAogICAgICMgcmV0dXJuIE5vbmUuCiAgICAgbG9hZGVyLCBwb3J0aW9ucyA9IHNlbGYuZmluZF9sb2FkZXIoZnVsbG5hbWUpCiAgICAgaWYgbG9hZGVyIGlzIE5vbmUgYW5kIGxlbihwb3J0aW9ucyk6Ci0gICAgICAgIG1zZyA9ICJOb3QgaW1wb3J0aW5nIGRpcmVjdG9yeSB7fTogbWlzc2luZyBfX2luaXRfXyIKKyAgICAgICAgbXNnID0gJ05vdCBpbXBvcnRpbmcgZGlyZWN0b3J5IHt9OiBtaXNzaW5nIF9faW5pdF9fJwogICAgICAgICBfd2FybmluZ3Mud2Fybihtc2cuZm9ybWF0KHBvcnRpb25zWzBdKSwgSW1wb3J0V2FybmluZykKICAgICByZXR1cm4gbG9hZGVyCiAKIAorZGVmIF9sb2FkX21vZHVsZV9zaGltKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAiIiJMb2FkIHRoZSBzcGVjaWZpZWQgbW9kdWxlIGludG8gc3lzLm1vZHVsZXMgYW5kIHJldHVybiBpdC4KKworICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgbG9hZGVyLmV4ZWNfbW9kdWxlIGluc3RlYWQuCisKKyAgICAiIiIKKyAgICBzcGVjID0gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgc2VsZikKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgaWYgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQorICAgICAgICBtZXRob2RzLmV4ZWMobW9kdWxlKQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbZnVsbG5hbWVdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIG1ldGhvZHMubG9hZCgpCisKKworZGVmIF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoZGF0YSwgc291cmNlX3N0YXRzPU5vbmUsIG5hbWU9Tm9uZSwgcGF0aD1Ob25lKToKKyAgICAiIiJWYWxpZGF0ZSB0aGUgaGVhZGVyIG9mIHRoZSBwYXNzZWQtaW4gYnl0ZWNvZGUgYWdhaW5zdCBzb3VyY2Vfc3RhdHMgKGlmCisgICAgZ2l2ZW4pIGFuZCByZXR1cm5pbmcgdGhlIGJ5dGVjb2RlIHRoYXQgY2FuIGJlIGNvbXBpbGVkIGJ5IGNvbXBpbGUoKS4KKworICAgIEFsbCBvdGhlciBhcmd1bWVudHMgYXJlIHVzZWQgdG8gZW5oYW5jZSBlcnJvciByZXBvcnRpbmcuCisKKyAgICBJbXBvcnRFcnJvciBpcyByYWlzZWQgd2hlbiB0aGUgbWFnaWMgbnVtYmVyIGlzIGluY29ycmVjdCBvciB0aGUgYnl0ZWNvZGUgaXMKKyAgICBmb3VuZCB0byBiZSBzdGFsZS4gRU9GRXJyb3IgaXMgcmFpc2VkIHdoZW4gdGhlIGRhdGEgaXMgZm91bmQgdG8gYmUKKyAgICB0cnVuY2F0ZWQuCisKKyAgICAiIiIKKyAgICBleGNfZGV0YWlscyA9IHt9CisgICAgaWYgbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgZXhjX2RldGFpbHNbJ25hbWUnXSA9IG5hbWUKKyAgICBlbHNlOgorICAgICAgICAjIFRvIHByZXZlbnQgaGF2aW5nIHRvIG1ha2UgYWxsIG1lc3NhZ2VzIGhhdmUgYSBjb25kaXRpb25hbCBuYW1lLgorICAgICAgICBuYW1lID0gJzxieXRlY29kZT4nCisgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgZXhjX2RldGFpbHNbJ3BhdGgnXSA9IHBhdGgKKyAgICBtYWdpYyA9IGRhdGFbOjRdCisgICAgcmF3X3RpbWVzdGFtcCA9IGRhdGFbNDo4XQorICAgIHJhd19zaXplID0gZGF0YVs4OjEyXQorICAgIGlmIG1hZ2ljICE9IE1BR0lDX05VTUJFUjoKKyAgICAgICAgbWVzc2FnZSA9ICdiYWQgbWFnaWMgbnVtYmVyIGluIHshcn06IHshcn0nLmZvcm1hdChuYW1lLCBtYWdpYykKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCAqKmV4Y19kZXRhaWxzKQorICAgIGVsaWYgbGVuKHJhd190aW1lc3RhbXApICE9IDQ6CisgICAgICAgIG1lc3NhZ2UgPSAncmVhY2hlZCBFT0Ygd2hpbGUgcmVhZGluZyB0aW1lc3RhbXAgaW4geyFyfScuZm9ybWF0KG5hbWUpCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgcmFpc2UgRU9GRXJyb3IobWVzc2FnZSkKKyAgICBlbGlmIGxlbihyYXdfc2l6ZSkgIT0gNDoKKyAgICAgICAgbWVzc2FnZSA9ICdyZWFjaGVkIEVPRiB3aGlsZSByZWFkaW5nIHNpemUgb2Ygc291cmNlIGluIHshcn0nLmZvcm1hdChuYW1lKQorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCisgICAgaWYgc291cmNlX3N0YXRzIGlzIG5vdCBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc291cmNlX3N0YXRzWydtdGltZSddKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBfcl9sb25nKHJhd190aW1lc3RhbXApICE9IHNvdXJjZV9tdGltZToKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gJ2J5dGVjb2RlIGlzIHN0YWxlIGZvciB7IXJ9Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgKipleGNfZGV0YWlscykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc291cmNlX3NpemUgPSBzb3VyY2Vfc3RhdHNbJ3NpemUnXSAmIDB4RkZGRkZGRkYKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgX3JfbG9uZyhyYXdfc2l6ZSkgIT0gc291cmNlX3NpemU6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ2J5dGVjb2RlIGlzIHN0YWxlIGZvciB7IXJ9Jy5mb3JtYXQobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipleGNfZGV0YWlscykKKyAgICByZXR1cm4gZGF0YVsxMjpdCisKKworZGVmIF9jb21waWxlX2J5dGVjb2RlKGRhdGEsIG5hbWU9Tm9uZSwgYnl0ZWNvZGVfcGF0aD1Ob25lLCBzb3VyY2VfcGF0aD1Ob25lKToKKyAgICAiIiJDb21waWxlIGJ5dGVjb2RlIGFzIHJldHVybmVkIGJ5IF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoKS4iIiIKKyAgICBjb2RlID0gbWFyc2hhbC5sb2FkcyhkYXRhKQorICAgIGlmIGlzaW5zdGFuY2UoY29kZSwgX2NvZGVfdHlwZSk6CisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvZGUgb2JqZWN0IGZyb20geyFyfScsIGJ5dGVjb2RlX3BhdGgpCisgICAgICAgIGlmIHNvdXJjZV9wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX2ltcC5fZml4X2NvX2ZpbGVuYW1lKGNvZGUsIHNvdXJjZV9wYXRoKQorICAgICAgICByZXR1cm4gY29kZQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdOb24tY29kZSBvYmplY3QgaW4geyFyfScuZm9ybWF0KGJ5dGVjb2RlX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUsIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKKworZGVmIF9jb2RlX3RvX2J5dGVjb2RlKGNvZGUsIG10aW1lPTAsIHNvdXJjZV9zaXplPTApOgorICAgICIiIkNvbXBpbGUgYSBjb2RlIG9iamVjdCBpbnRvIGJ5dGVjb2RlIGZvciB3cml0aW5nIG91dCB0byBhIGJ5dGUtY29tcGlsZWQKKyAgICBmaWxlLiIiIgorICAgIGRhdGEgPSBieXRlYXJyYXkoTUFHSUNfTlVNQkVSKQorICAgIGRhdGEuZXh0ZW5kKF93X2xvbmcobXRpbWUpKQorICAgIGRhdGEuZXh0ZW5kKF93X2xvbmcoc291cmNlX3NpemUpKQorICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZSkpCisgICAgcmV0dXJuIGRhdGEKKworCitkZWYgZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpOgorICAgICIiIkRlY29kZSBieXRlcyByZXByZXNlbnRpbmcgc291cmNlIGNvZGUgYW5kIHJldHVybiB0aGUgc3RyaW5nLgorCisgICAgVW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydCBpcyB1c2VkIGluIHRoZSBkZWNvZGluZy4KKyAgICAiIiIKKyAgICBpbXBvcnQgdG9rZW5pemUgICMgVG8gYXZvaWQgYm9vdHN0cmFwIGlzc3Vlcy4KKyAgICBzb3VyY2VfYnl0ZXNfcmVhZGxpbmUgPSBfaW8uQnl0ZXNJTyhzb3VyY2VfYnl0ZXMpLnJlYWRsaW5lCisgICAgZW5jb2RpbmcgPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2Rpbmcoc291cmNlX2J5dGVzX3JlYWRsaW5lKQorICAgIG5ld2xpbmVfZGVjb2RlciA9IF9pby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIFRydWUpCisgICAgcmV0dXJuIG5ld2xpbmVfZGVjb2Rlci5kZWNvZGUoc291cmNlX2J5dGVzLmRlY29kZShlbmNvZGluZ1swXSkpCisKKworIyBNb2R1bGUgc3BlY2lmaWNhdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgX21vZHVsZV9yZXByKG1vZHVsZSk6CisgICAgIyBUaGUgaW1wbGVtZW50YXRpb24gb2YgTW9kdWxlVHlwZV9fcmVwcl9fKCkuCisgICAgbG9hZGVyID0gZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkKKyAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ21vZHVsZV9yZXByJyk6CisgICAgICAgICMgQXMgc29vbiBhcyBCdWlsdGluSW1wb3J0ZXIsIEZyb3plbkltcG9ydGVyLCBhbmQgTmFtZXNwYWNlTG9hZGVyCisgICAgICAgICMgZHJvcCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgZm9yIG1vZHVsZV9yZXByLiB3ZSBjYW4gYWRkIGEKKyAgICAgICAgIyBkZXByZWNhdGlvbiB3YXJuaW5nIGhlcmUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBsb2FkZXIubW9kdWxlX3JlcHIobW9kdWxlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgIHRyeToKKyAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gX1NwZWNNZXRob2RzKHNwZWMpLm1vZHVsZV9yZXByKCkKKworICAgICMgV2UgY291bGQgdXNlIG1vZHVsZS5fX2NsYXNzX18uX19uYW1lX18gaW5zdGVhZCBvZiAnbW9kdWxlJyBpbiB0aGUKKyAgICAjIHZhcmlvdXMgcmVwciBwZXJtdXRhdGlvbnMuCisgICAgdHJ5OgorICAgICAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBuYW1lID0gJz8nCisgICAgdHJ5OgorICAgICAgICBmaWxlbmFtZSA9IG1vZHVsZS5fX2ZpbGVfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfT4nLmZvcm1hdChuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHshcn0pPicuZm9ybWF0KG5hbWUsIGxvYWRlcikKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSBmcm9tIHshcn0+Jy5mb3JtYXQobmFtZSwgZmlsZW5hbWUpCisKKworY2xhc3MgX2luc3RhbGxlZF9zYWZlbHk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kdWxlKToKKyAgICAgICAgc2VsZi5fbW9kdWxlID0gbW9kdWxlCisgICAgICAgIHNlbGYuX3NwZWMgPSBtb2R1bGUuX19zcGVjX18KKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHB1dHRpbmcgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcworICAgICAgICAjIChvdGhlcndpc2UgYW4gb3B0aW1pemF0aW9uIHNob3J0Y3V0IGluIGltcG9ydC5jIGJlY29tZXMKKyAgICAgICAgIyB3cm9uZykKKyAgICAgICAgc2VsZi5fc3BlYy5faW5pdGlhbGl6aW5nID0gVHJ1ZQorICAgICAgICBzeXMubW9kdWxlc1tzZWxmLl9zcGVjLm5hbWVdID0gc2VsZi5fbW9kdWxlCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGVjID0gc2VsZi5fc3BlYworICAgICAgICAgICAgaWYgYW55KGFyZyBpcyBub3QgTm9uZSBmb3IgYXJnIGluIGFyZ3MpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0KKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnaW1wb3J0IHshcn0gIyB7IXJ9Jywgc3BlYy5uYW1lLCBzcGVjLmxvYWRlcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3NwZWMuX2luaXRpYWxpemluZyA9IEZhbHNlCisKKworY2xhc3MgTW9kdWxlU3BlYzoKKyAgICAiIiJUaGUgc3BlY2lmaWNhdGlvbiBmb3IgYSBtb2R1bGUsIHVzZWQgZm9yIGxvYWRpbmcuCisKKyAgICBBIG1vZHVsZSdzIHNwZWMgaXMgdGhlIHNvdXJjZSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZHVsZS4gIEZvcgorICAgIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBtb2R1bGUsIGluY2x1ZGluZyBzb3VyY2UsIHVzZSB0aGUgc3BlYydzCisgICAgbG9hZGVyLgorCisgICAgYG5hbWVgIGlzIHRoZSBhYnNvbHV0ZSBuYW1lIG9mIHRoZSBtb2R1bGUuICBgbG9hZGVyYCBpcyB0aGUgbG9hZGVyCisgICAgdG8gdXNlIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLiAgYHBhcmVudGAgaXMgdGhlIG5hbWUgb2YgdGhlCisgICAgcGFja2FnZSB0aGUgbW9kdWxlIGlzIGluLiAgVGhlIHBhcmVudCBpcyBkZXJpdmVkIGZyb20gdGhlIG5hbWUuCisKKyAgICBgaXNfcGFja2FnZWAgZGV0ZXJtaW5lcyBpZiB0aGUgbW9kdWxlIGlzIGNvbnNpZGVyZWQgYSBwYWNrYWdlIG9yCisgICAgbm90LiAgT24gbW9kdWxlcyB0aGlzIGlzIHJlZmxlY3RlZCBieSB0aGUgYF9fcGF0aF9fYCBhdHRyaWJ1dGUuCisKKyAgICBgb3JpZ2luYCBpcyB0aGUgc3BlY2lmaWMgbG9jYXRpb24gdXNlZCBieSB0aGUgbG9hZGVyIGZyb20gd2hpY2ggdG8KKyAgICBsb2FkIHRoZSBtb2R1bGUsIGlmIHRoYXQgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLiAgV2hlbiBmaWxlbmFtZSBpcworICAgIHNldCwgb3JpZ2luIHdpbGwgbWF0Y2guCisKKyAgICBgaGFzX2xvY2F0aW9uYCBpbmRpY2F0ZXMgdGhhdCBhIHNwZWMncyAib3JpZ2luIiByZWZsZWN0cyBhIGxvY2F0aW9uLgorICAgIFdoZW4gdGhpcyBpcyBUcnVlLCBgX19maWxlX19gIGF0dHJpYnV0ZSBvZiB0aGUgbW9kdWxlIGlzIHNldC4KKworICAgIGBjYWNoZWRgIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FjaGVkIGJ5dGVjb2RlIGZpbGUsIGlmIGFueS4gIEl0CisgICAgY29ycmVzcG9uZHMgdG8gdGhlIGBfX2NhY2hlZF9fYCBhdHRyaWJ1dGUuCisKKyAgICBgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnNgIGlzIHRoZSBzZXF1ZW5jZSBvZiBwYXRoIGVudHJpZXMgdG8KKyAgICBzZWFyY2ggd2hlbiBpbXBvcnRpbmcgc3VibW9kdWxlcy4gIElmIHNldCwgaXNfcGFja2FnZSBzaG91bGQgYmUKKyAgICBUcnVlLS1hbmQgRmFsc2Ugb3RoZXJ3aXNlLgorCisgICAgUGFja2FnZXMgYXJlIHNpbXBseSBtb2R1bGVzIHRoYXQgKG1heSkgaGF2ZSBzdWJtb2R1bGVzLiAgSWYgYSBzcGVjCisgICAgaGFzIGEgbm9uLU5vbmUgdmFsdWUgaW4gYHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zYCwgdGhlIGltcG9ydAorICAgIHN5c3RlbSB3aWxsIGNvbnNpZGVyIG1vZHVsZXMgbG9hZGVkIGZyb20gdGhlIHNwZWMgYXMgcGFja2FnZXMuCisKKyAgICBPbmx5IGZpbmRlcnMgKHNlZSBpbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyIGFuZAorICAgIGltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyKSBzaG91bGQgbW9kaWZ5IE1vZHVsZVNwZWMgaW5zdGFuY2VzLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbG9hZGVyLCAqLCBvcmlnaW49Tm9uZSwgbG9hZGVyX3N0YXRlPU5vbmUsCisgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9Tm9uZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBsb2FkZXIKKyAgICAgICAgc2VsZi5vcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgc2VsZi5sb2FkZXJfc3RhdGUgPSBsb2FkZXJfc3RhdGUKKyAgICAgICAgc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFtdIGlmIGlzX3BhY2thZ2UgZWxzZSBOb25lCisKKyAgICAgICAgIyBmaWxlLWxvY2F0aW9uIGF0dHJpYnV0ZXMKKyAgICAgICAgc2VsZi5fc2V0X2ZpbGVhdHRyID0gRmFsc2UKKyAgICAgICAgc2VsZi5fY2FjaGVkID0gTm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBhcmdzID0gWyduYW1lPXshcn0nLmZvcm1hdChzZWxmLm5hbWUpLAorICAgICAgICAgICAgICAgICdsb2FkZXI9eyFyfScuZm9ybWF0KHNlbGYubG9hZGVyKV0KKyAgICAgICAgaWYgc2VsZi5vcmlnaW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnb3JpZ2luPXshcn0nLmZvcm1hdChzZWxmLm9yaWdpbikpCisgICAgICAgIGlmIHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9e30nCisgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMpKQorICAgICAgICByZXR1cm4gJ3t9KHt9KScuZm9ybWF0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAnLCAnLmpvaW4oYXJncykpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgc21zbCA9IHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLm5hbWUgPT0gb3RoZXIubmFtZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkZXIgPT0gb3RoZXIubG9hZGVyIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLm9yaWdpbiA9PSBvdGhlci5vcmlnaW4gYW5kCisgICAgICAgICAgICAgICAgICAgIHNtc2wgPT0gb3RoZXIuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FjaGVkID09IG90aGVyLmNhY2hlZCBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYXNfbG9jYXRpb24gPT0gb3RoZXIuaGFzX2xvY2F0aW9uKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjYWNoZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2NhY2hlZCBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5vcmlnaW4gaXMgbm90IE5vbmUgYW5kIHNlbGYuX3NldF9maWxlYXR0cjoKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYub3JpZ2luCisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgodHVwbGUoU09VUkNFX1NVRkZJWEVTKSk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlZCA9IGNhY2hlX2Zyb21fc291cmNlKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbGlmIGZpbGVuYW1lLmVuZHN3aXRoKHR1cGxlKEJZVEVDT0RFX1NVRkZJWEVTKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlZCA9IGZpbGVuYW1lCisgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWQKKworICAgIEBjYWNoZWQuc2V0dGVyCisgICAgZGVmIGNhY2hlZChzZWxmLCBjYWNoZWQpOgorICAgICAgICBzZWxmLl9jYWNoZWQgPSBjYWNoZWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJlbnQoc2VsZik6CisgICAgICAgICIiIlRoZSBuYW1lIG9mIHRoZSBtb2R1bGUncyBwYXJlbnQuIiIiCisgICAgICAgIGlmIHNlbGYuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaGFzX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2V0X2ZpbGVhdHRyCisKKyAgICBAaGFzX2xvY2F0aW9uLnNldHRlcgorICAgIGRlZiBoYXNfbG9jYXRpb24oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9zZXRfZmlsZWF0dHIgPSBib29sKHZhbHVlKQorCisKK2RlZiBzcGVjX2Zyb21fbG9hZGVyKG5hbWUsIGxvYWRlciwgKiwgb3JpZ2luPU5vbmUsIGlzX3BhY2thZ2U9Tm9uZSk6CisgICAgIiIiUmV0dXJuIGEgbW9kdWxlIHNwZWMgYmFzZWQgb24gdmFyaW91cyBsb2FkZXIgbWV0aG9kcy4iIiIKKyAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ2dldF9maWxlbmFtZScpOgorICAgICAgICBpZiBpc19wYWNrYWdlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9hZGVyPWxvYWRlcikKKyAgICAgICAgc2VhcmNoID0gW10gaWYgaXNfcGFja2FnZSBlbHNlIE5vbmUKKyAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIGxvYWRlcj1sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1zZWFyY2gpCisKKyAgICBpZiBpc19wYWNrYWdlIGlzIE5vbmU6CisgICAgICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnaXNfcGFja2FnZScpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBsb2FkZXIuaXNfcGFja2FnZShuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBOb25lICAjIGFrYSwgdW5kZWZpbmVkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRoZSBkZWZhdWx0CisgICAgICAgICAgICBpc19wYWNrYWdlID0gRmFsc2UKKworICAgIHJldHVybiBNb2R1bGVTcGVjKG5hbWUsIGxvYWRlciwgb3JpZ2luPW9yaWdpbiwgaXNfcGFja2FnZT1pc19wYWNrYWdlKQorCisKK19QT1BVTEFURSA9IG9iamVjdCgpCisKKworZGVmIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIGxvY2F0aW9uPU5vbmUsICosIGxvYWRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPV9QT1BVTEFURSk6CisgICAgIiIiUmV0dXJuIGEgbW9kdWxlIHNwZWMgYmFzZWQgb24gYSBmaWxlIGxvY2F0aW9uLgorCisgICAgVG8gaW5kaWNhdGUgdGhhdCB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSwgc2V0CisgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgdG8gYSBsaXN0IG9mIGRpcmVjdG9yeSBwYXRocy4gIEFuCisgICAgZW1wdHkgbGlzdCBpcyBzdWZmaWNpZW50LCB0aG91Z2ggaXRzIG5vdCBvdGhlcndpc2UgdXNlZnVsIHRvIHRoZQorICAgIGltcG9ydCBzeXN0ZW0uCisKKyAgICBUaGUgbG9hZGVyIG11c3QgdGFrZSBhIHNwZWMgYXMgaXRzIG9ubHkgX19pbml0X18oKSBhcmcuCisKKyAgICAiIiIKKyAgICBpZiBsb2NhdGlvbiBpcyBOb25lOgorICAgICAgICAjIFRoZSBjYWxsZXIgbWF5IHNpbXBseSB3YW50IGEgcGFydGlhbGx5IHBvcHVsYXRlZCBsb2NhdGlvbi0KKyAgICAgICAgIyBvcmllbnRlZCBzcGVjLiAgU28gd2Ugc2V0IHRoZSBsb2NhdGlvbiB0byBhIGJvZ3VzIHZhbHVlIGFuZAorICAgICAgICAjIGZpbGwgaW4gYXMgbXVjaCBhcyB3ZSBjYW4uCisgICAgICAgIGxvY2F0aW9uID0gJzx1bmtub3duPicKKyAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdnZXRfZmlsZW5hbWUnKToKKyAgICAgICAgICAgICMgRXhlY3V0aW9uTG9hZGVyCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBsb2FkZXIuZ2V0X2ZpbGVuYW1lKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBJZiB0aGUgbG9jYXRpb24gaXMgb24gdGhlIGZpbGVzeXN0ZW0sIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0LAorICAgICMgd2UgY291bGQgcmV0dXJuIE5vbmUgaGVyZSwgaW5kaWNhdGluZyB0aGF0IHRoZSBsb2NhdGlvbiBpcyBub3QKKyAgICAjIHZhbGlkLiAgSG93ZXZlciwgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IG9mIHRlc3Rpbmcgc2luY2UgYW4KKyAgICAjIGluZGlyZWN0IGxvY2F0aW9uIChlLmcuIGEgemlwIGZpbGUgb3IgVVJMKSB3aWxsIGxvb2sgbGlrZSBhCisgICAgIyBub24tZXhpc3RlbnQgZmlsZSByZWxhdGl2ZSB0byB0aGUgZmlsZXN5c3RlbS4KKworICAgIHNwZWMgPSBNb2R1bGVTcGVjKG5hbWUsIGxvYWRlciwgb3JpZ2luPWxvY2F0aW9uKQorICAgIHNwZWMuX3NldF9maWxlYXR0ciA9IFRydWUKKworICAgICMgUGljayBhIGxvYWRlciBpZiBvbmUgd2Fzbid0IHByb3ZpZGVkLgorICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICBmb3IgbG9hZGVyX2NsYXNzLCBzdWZmaXhlcyBpbiBfZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKToKKyAgICAgICAgICAgIGlmIGxvY2F0aW9uLmVuZHN3aXRoKHR1cGxlKHN1ZmZpeGVzKSk6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gbG9hZGVyX2NsYXNzKG5hbWUsIGxvY2F0aW9uKQorICAgICAgICAgICAgICAgIHNwZWMubG9hZGVyID0gbG9hZGVyCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIFNldCBzdWJtb2R1bGVfc2VhcmNoX3BhdGhzIGFwcHJvcHJpYXRlbHkuCisgICAgaWYgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgX1BPUFVMQVRFOgorICAgICAgICAjIENoZWNrIHRoZSBsb2FkZXIuCisgICAgICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnaXNfcGFja2FnZScpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBsb2FkZXIuaXNfcGFja2FnZShuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNfcGFja2FnZToKKyAgICAgICAgICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFtdCisgICAgZWxzZToKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9PSBbXToKKyAgICAgICAgaWYgbG9jYXRpb246CisgICAgICAgICAgICBkaXJuYW1lID0gX3BhdGhfc3BsaXQobG9jYXRpb24pWzBdCisgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLmFwcGVuZChkaXJuYW1lKQorCisgICAgcmV0dXJuIHNwZWMKKworCitkZWYgX3NwZWNfZnJvbV9tb2R1bGUobW9kdWxlLCBsb2FkZXI9Tm9uZSwgb3JpZ2luPU5vbmUpOgorICAgICMgVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgdXNlIGluIF9zZXR1cCgpLgorICAgIHRyeToKKyAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXworICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIgPSBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIGxvYWRlciB3aWxsIHN0YXkgTm9uZS4KKyAgICAgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIGxvY2F0aW9uID0gbW9kdWxlLl9fZmlsZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBsb2NhdGlvbiA9IE5vbmUKKyAgICBpZiBvcmlnaW4gaXMgTm9uZToKKyAgICAgICAgaWYgbG9jYXRpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcmlnaW4gPSBsb2FkZXIuX09SSUdJTgorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIG9yaWdpbiA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9yaWdpbiA9IGxvY2F0aW9uCisgICAgdHJ5OgorICAgICAgICBjYWNoZWQgPSBtb2R1bGUuX19jYWNoZWRfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgY2FjaGVkID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBsaXN0KG1vZHVsZS5fX3BhdGhfXykKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gTm9uZQorCisgICAgc3BlYyA9IE1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCBvcmlnaW49b3JpZ2luKQorICAgIHNwZWMuX3NldF9maWxlYXR0ciA9IEZhbHNlIGlmIGxvY2F0aW9uIGlzIE5vbmUgZWxzZSBUcnVlCisgICAgc3BlYy5jYWNoZWQgPSBjYWNoZWQKKyAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICByZXR1cm4gc3BlYworCisKK2NsYXNzIF9TcGVjTWV0aG9kczoKKworICAgICIiIkNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHNwZWMgb2JqZWN0cyB0byBwcm92aWRlIHNwZWMtc3BlY2lmaWMKKyAgICBtZXRob2RzLiIiIgorCisgICAgIyBUaGUgdmFyaW91cyBzcGVjX2Zyb21fKiBmdW5jdGlvbnMgY291bGQgYmUgbWFkZSBmYWN0b3J5IG1ldGhvZHMgaGVyZS4KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcGVjKToKKyAgICAgICAgc2VsZi5zcGVjID0gc3BlYworCisgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHJlcHIgdG8gdXNlIGZvciB0aGUgbW9kdWxlLiIiIgorICAgICAgICAjIFdlIG1vc3RseSByZXBsaWNhdGUgX21vZHVsZV9yZXByKCkgdXNpbmcgdGhlIHNwZWMgYXR0cmlidXRlcy4KKyAgICAgICAgc3BlYyA9IHNlbGYuc3BlYworICAgICAgICBuYW1lID0gJz8nIGlmIHNwZWMubmFtZSBpcyBOb25lIGVsc2Ugc3BlYy5uYW1lCisgICAgICAgIGlmIHNwZWMub3JpZ2luIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9ICh7IXJ9KT4nLmZvcm1hdChuYW1lLCBzcGVjLmxvYWRlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNwZWMuaGFzX2xvY2F0aW9uOgorICAgICAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdChuYW1lLCBzcGVjLm9yaWdpbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHt9KT4nLmZvcm1hdChzcGVjLm5hbWUsIHNwZWMub3JpZ2luKQorCisgICAgZGVmIGluaXRfbW9kdWxlX2F0dHJzKHNlbGYsIG1vZHVsZSwgKiwgX292ZXJyaWRlPUZhbHNlLCBfZm9yY2VfbmFtZT1UcnVlKToKKyAgICAgICAgIiIiU2V0IHRoZSBtb2R1bGUncyBhdHRyaWJ1dGVzLgorCisgICAgICAgIEFsbCBtaXNzaW5nIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIHdpbGwgYmUgc2V0LiAgSGVyZQorICAgICAgICBpcyBob3cgdGhlIHNwZWMgYXR0cmlidXRlcyBtYXAgb250byB0aGUgbW9kdWxlOgorCisgICAgICAgIHNwZWMubmFtZSAtPiBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgc3BlYy5sb2FkZXIgLT4gbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgc3BlYy5wYXJlbnQgLT4gbW9kdWxlLl9fcGFja2FnZV9fCisgICAgICAgIHNwZWMgLT4gbW9kdWxlLl9fc3BlY19fCisKKyAgICAgICAgT3B0aW9uYWw6CisgICAgICAgIHNwZWMub3JpZ2luIC0+IG1vZHVsZS5fX2ZpbGVfXyAoaWYgc3BlYy5zZXRfZmlsZWF0dHIgaXMgdHJ1ZSkKKyAgICAgICAgc3BlYy5jYWNoZWQgLT4gbW9kdWxlLl9fY2FjaGVkX18gKGlmIF9fZmlsZV9fIGFsc28gc2V0KQorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIC0+IG1vZHVsZS5fX3BhdGhfXyAoaWYgc2V0KQorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisKKyAgICAgICAgIyBUaGUgcGFzc2VkIGluIG1vZHVsZSBtYXkgYmUgbm90IHN1cHBvcnQgYXR0cmlidXRlIGFzc2lnbm1lbnQsCisgICAgICAgICMgaW4gd2hpY2ggY2FzZSB3ZSBzaW1wbHkgZG9uJ3Qgc2V0IHRoZSBhdHRyaWJ1dGVzLgorCisgICAgICAgICMgX19uYW1lX18KKyAgICAgICAgaWYgKF9vdmVycmlkZSBvciBfZm9yY2VfbmFtZSBvcgorICAgICAgICAgICAgZ2V0YXR0cihtb2R1bGUsICdfX25hbWVfXycsIE5vbmUpIGlzIE5vbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX25hbWVfXyA9IHNwZWMubmFtZQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIF9fbG9hZGVyX18KKyAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgorICAgICAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBBIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaGFjay4KKyAgICAgICAgICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBfTmFtZXNwYWNlTG9hZGVyLl9fbmV3X18oX05hbWVzcGFjZUxvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyLl9wYXRoID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgX19wYWNrYWdlX18KKyAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNwZWMucGFyZW50CisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgX19zcGVjX18KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBfX3BhdGhfXworICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX3BhdGhfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHNwZWMuaGFzX2xvY2F0aW9uOgorICAgICAgICAgICAgIyBfX2ZpbGVfXworICAgICAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19maWxlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gc3BlYy5vcmlnaW4KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBfX2NhY2hlZF9fCisgICAgICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBzcGVjLmNhY2hlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBzcGVjLmNhY2hlZAorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgbW9kdWxlIHRvIGJlIGxvYWRlZC4KKworICAgICAgICBUaGUgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgYXJlIGFsc28gc2V0IHdpdGggdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIHZhbHVlcyBmcm9tIHRoZSBzcGVjLgorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisgICAgICAgICMgVHlwaWNhbGx5IGxvYWRlcnMgd2lsbCBub3QgaW1wbGVtZW50IGNyZWF0ZV9tb2R1bGUoKS4KKyAgICAgICAgaWYgaGFzYXR0cihzcGVjLmxvYWRlciwgJ2NyZWF0ZV9tb2R1bGUnKToKKyAgICAgICAgICAgICMgSWYgY3JlYXRlX21vZHVsZSgpIHJldHVybnMgYE5vbmVgIGl0IG1lYW5zIHRoZSBkZWZhdWx0CisgICAgICAgICAgICAjIG1vZHVsZSBjcmVhdGlvbiBzaG91bGQgYmUgdXNlZC4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNwZWMubG9hZGVyLmNyZWF0ZV9tb2R1bGUoc3BlYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZHVsZSA9IE5vbmUKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBvcGVuKCkgaXMgZXZlciBjYWxsZWQgYXMgdGhlICdpbycKKyAgICAgICAgICAgICMgbW9kdWxlIGltcGxpY2l0bHkgaW1wb3J0cyAnbG9jYWxlJyBhbmQgd291bGQgb3RoZXJ3aXNlCisgICAgICAgICAgICAjIHRyaWdnZXIgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAgICAgICAgIG1vZHVsZSA9IF9uZXdfbW9kdWxlKHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisgICAgICAgIHJldHVybiBtb2R1bGUKKworICAgIGRlZiBfZXhlYyhzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJEbyBldmVyeXRoaW5nIG5lY2Vzc2FyeSB0byBleGVjdXRlIHRoZSBtb2R1bGUuCisKKyAgICAgICAgVGhlIG5hbWVzcGFjZSBvZiBgbW9kdWxlYCBpcyB1c2VkIGFzIHRoZSB0YXJnZXQgb2YgZXhlY3V0aW9uLgorICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIHRoZSBsb2FkZXIncyBgZXhlY19tb2R1bGUoKWAgbWV0aG9kLgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKworICAgICMgVXNlZCBieSBpbXBvcnRsaWIucmVsb2FkKCkgYW5kIF9sb2FkX21vZHVsZV9zaGltKCkuCisgICAgZGVmIGV4ZWMoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgc3BlYyBpbiBhbiBleGlzdGluZyBtb2R1bGUncyBuYW1lc3BhY2UuIiIiCisgICAgICAgIG5hbWUgPSBzZWxmLnNwZWMubmFtZQorICAgICAgICBfaW1wLmFjcXVpcmVfbG9jaygpCisgICAgICAgIHdpdGggX01vZHVsZUxvY2tNYW5hZ2VyKG5hbWUpOgorICAgICAgICAgICAgaWYgc3lzLm1vZHVsZXMuZ2V0KG5hbWUpIGlzIG5vdCBtb2R1bGU6CisgICAgICAgICAgICAgICAgbXNnID0gJ21vZHVsZSB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcycuZm9ybWF0KG5hbWUpCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLCBuYW1lPW5hbWUpCisgICAgICAgICAgICBpZiBzZWxmLnNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdtaXNzaW5nIGxvYWRlcicsIG5hbWU9c2VsZi5zcGVjLm5hbWUpCisgICAgICAgICAgICAgICAgIyBuYW1lc3BhY2UgcGFja2FnZQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlLCBfb3ZlcnJpZGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgICAgICBzZWxmLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSwgX292ZXJyaWRlPVRydWUpCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLnNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgICAgICAgICAjIChpc3N1ZTE5NzEzKSBPbmNlIEJ1aWx0aW5JbXBvcnRlciBhbmQgRXh0ZW5zaW9uRmlsZUxvYWRlcgorICAgICAgICAgICAgICAgICMgaGF2ZSBleGVjX21vZHVsZSgpIGltcGxlbWVudGVkLCB3ZSBjYW4gYWRkIGEgZGVwcmVjYXRpb24KKyAgICAgICAgICAgICAgICAjIHdhcm5pbmcgaGVyZS4KKyAgICAgICAgICAgICAgICBzZWxmLnNwZWMubG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWMobW9kdWxlKQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KKworICAgIGRlZiBfbG9hZF9iYWNrd2FyZF9jb21wYXRpYmxlKHNlbGYpOgorICAgICAgICAjIChpc3N1ZTE5NzEzKSBPbmNlIEJ1aWx0aW5JbXBvcnRlciBhbmQgRXh0ZW5zaW9uRmlsZUxvYWRlcgorICAgICAgICAjIGhhdmUgZXhlY19tb2R1bGUoKSBpbXBsZW1lbnRlZCwgd2UgY2FuIGFkZCBhIGRlcHJlY2F0aW9uCisgICAgICAgICMgd2FybmluZyBoZXJlLgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisgICAgICAgIHNwZWMubG9hZGVyLmxvYWRfbW9kdWxlKHNwZWMubmFtZSkKKyAgICAgICAgIyBUaGUgbW9kdWxlIG11c3QgYmUgaW4gc3lzLm1vZHVsZXMgYXQgdGhpcyBwb2ludCEKKyAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc3BlYy5sb2FkZXIKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgU2luY2UgbW9kdWxlLl9fcGF0aF9fIG1heSBub3QgbGluZSB1cCB3aXRoCisgICAgICAgICAgICAgICAgIyBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfcGF0aHMsIHdlIGNhbid0IG5lY2Vzc2FyaWx5IHJlbHkKKyAgICAgICAgICAgICAgICAjIG9uIHNwZWMucGFyZW50IGhlcmUuCisgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gc3BlYy5uYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3NwZWNfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgZGVmIF9sb2FkX3VubG9ja2VkKHNlbGYpOgorICAgICAgICAjIEEgaGVscGVyIGZvciBkaXJlY3QgdXNlIGJ5IHRoZSBpbXBvcnQgc3lzdGVtLgorICAgICAgICBpZiBzZWxmLnNwZWMubG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBub3QgYSBuYW1lc3BhY2UgcGFja2FnZQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5zcGVjLmxvYWRlciwgJ2V4ZWNfbW9kdWxlJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xvYWRfYmFja3dhcmRfY29tcGF0aWJsZSgpCisKKyAgICAgICAgbW9kdWxlID0gc2VsZi5jcmVhdGUoKQorICAgICAgICB3aXRoIF9pbnN0YWxsZWRfc2FmZWx5KG1vZHVsZSk6CisgICAgICAgICAgICBpZiBzZWxmLnNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdtaXNzaW5nIGxvYWRlcicsIG5hbWU9c2VsZi5zcGVjLm5hbWUpCisgICAgICAgICAgICAgICAgIyBBIG5hbWVzcGFjZSBwYWNrYWdlIHNvIGRvIG5vdGhpbmcuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWMobW9kdWxlKQorCisgICAgICAgICMgV2UgZG9uJ3QgZW5zdXJlIHRoYXQgdGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIGdldAorICAgICAgICAjIHNldCBpbiB0aGUgc3lzLm1vZHVsZXMgcmVwbGFjZW1lbnQgY2FzZS4gIFN1Y2ggbW9kdWxlcyBhcmUgb24KKyAgICAgICAgIyB0aGVpciBvd24uCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICMgQSBtZXRob2QgdXNlZCBkdXJpbmcgdGVzdGluZyBvZiBfbG9hZF91bmxvY2tlZCgpIGFuZCBieQorICAgICMgX2xvYWRfbW9kdWxlX3NoaW0oKS4KKyAgICBkZWYgbG9hZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IG1vZHVsZSBvYmplY3QsIGxvYWRlZCBieSB0aGUgc3BlYydzIGxvYWRlci4KKworICAgICAgICBUaGUgbW9kdWxlIGlzIG5vdCBhZGRlZCB0byBpdHMgcGFyZW50LgorCisgICAgICAgIElmIGEgbW9kdWxlIGlzIGFscmVhZHkgaW4gc3lzLm1vZHVsZXMsIHRoYXQgZXhpc3RpbmcgbW9kdWxlIGdldHMKKyAgICAgICAgY2xvYmJlcmVkLgorCisgICAgICAgICIiIgorICAgICAgICBfaW1wLmFjcXVpcmVfbG9jaygpCisgICAgICAgIHdpdGggX01vZHVsZUxvY2tNYW5hZ2VyKHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9sb2FkX3VubG9ja2VkKCkKIAogCiAjIExvYWRlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC02MzQsOSArMTIzMCwyMyBAQAogCiAgICAgIiIiCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1vZHVsZV9yZXByKG1vZHVsZSk6CisgICAgICAgICIiIlJldHVybiByZXByIGZvciB0aGUgbW9kdWxlLgorCisgICAgICAgIFRoZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvZXMgdGhlIGpvYiBpdHNlbGYuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IChidWlsdC1pbik+Jy5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1vZHVsZV9yZXByKGNscywgbW9kdWxlKToKLSAgICAgICAgcmV0dXJuICI8bW9kdWxlICd7fScgKGJ1aWx0LWluKT4iLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIF9pbXAuaXNfYnVpbHRpbihmdWxsbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgY2xzLCBvcmlnaW49J2J1aWx0LWluJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKQEAgLTY0NCwyNCArMTI1NCwyMyBAQAogCiAgICAgICAgIElmICdwYXRoJyBpcyBldmVyIHNwZWNpZmllZCB0aGVuIHRoZSBzZWFyY2ggaXMgY29uc2lkZXJlZCBhIGZhaWx1cmUuCiAKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBmaW5kX3NwZWMoKSBpbnN0ZWFkLgorCiAgICAgICAgICIiIgotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIGNscyBpZiBfaW1wLmlzX2J1aWx0aW4oZnVsbG5hbWUpIGVsc2UgTm9uZQorICAgICAgICBzcGVjID0gY2xzLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyIGlmIHNwZWMgaXMgbm90IE5vbmUgZWxzZSBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBAc2V0X3BhY2thZ2UKLSAgICBAc2V0X2xvYWRlcgogICAgIEBfcmVxdWlyZXNfYnVpbHRpbgogICAgIGRlZiBsb2FkX21vZHVsZShjbHMsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhIGJ1aWx0LWluIG1vZHVsZS4iIiIKLSAgICAgICAgaXNfcmVsb2FkID0gZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2J1aWx0aW4sIGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQorICAgICAgICAjIE9uY2UgYW4gZXhlY19tb2R1bGUoKSBpbXBsZW1lbnRhdGlvbiBpcyBhZGRlZCB3ZSBjYW4gYWxzbworICAgICAgICAjIGFkZCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgaGVyZS4KKyAgICAgICAgd2l0aCBfTWFuYWdlUmVsb2FkKGZ1bGxuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2J1aWx0aW4sIGZ1bGxuYW1lKQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGNscworICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSAnJworICAgICAgICByZXR1cm4gbW9kdWxlCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBAX3JlcXVpcmVzX2J1aWx0aW4KQEAgLTY5MSwzMSArMTMwMCw0OCBAQAogCiAgICAgIiIiCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1vZHVsZV9yZXByKG0pOgorICAgICAgICAiIiJSZXR1cm4gcmVwciBmb3IgdGhlIG1vZHVsZS4KKworICAgICAgICBUaGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBUaGUgaW1wb3J0IG1hY2hpbmVyeSBkb2VzIHRoZSBqb2IgaXRzZWxmLgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoZnJvemVuKT4nLmZvcm1hdChtLl9fbmFtZV9fKQorCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1vZHVsZV9yZXByKGNscywgbSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChmcm96ZW4pPiIuZm9ybWF0KG0uX19uYW1lX18pCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgaWYgX2ltcC5pc19mcm96ZW4oZnVsbG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGNscywgb3JpZ2luPSdmcm96ZW4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICAiIiJGaW5kIGEgZnJvemVuIG1vZHVsZS4iIiIKKyAgICAgICAgIiIiRmluZCBhIGZyb3plbiBtb2R1bGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBmaW5kX3NwZWMoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gY2xzIGlmIF9pbXAuaXNfZnJvemVuKGZ1bGxuYW1lKSBlbHNlIE5vbmUKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhlY19tb2R1bGUobW9kdWxlKToKKyAgICAgICAgbmFtZSA9IG1vZHVsZS5fX3NwZWNfXy5uYW1lCisgICAgICAgIGlmIG5vdCBfaW1wLmlzX2Zyb3plbihuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCd7IXJ9IGlzIG5vdCBhIGZyb3plbiBtb2R1bGUnLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSkKKyAgICAgICAgY29kZSA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5nZXRfZnJvemVuX29iamVjdCwgbmFtZSkKKyAgICAgICAgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pCisKICAgICBAY2xhc3NtZXRob2QKLSAgICBAc2V0X3BhY2thZ2UKLSAgICBAc2V0X2xvYWRlcgotICAgIEBfcmVxdWlyZXNfZnJvemVuCiAgICAgZGVmIGxvYWRfbW9kdWxlKGNscywgZnVsbG5hbWUpOgotICAgICAgICAiIiJMb2FkIGEgZnJvemVuIG1vZHVsZS4iIiIKLSAgICAgICAgaXNfcmVsb2FkID0gZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbSA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2Zyb3plbiwgZnVsbG5hbWUpCi0gICAgICAgICAgICAjIExldCBvdXIgb3duIG1vZHVsZV9yZXByKCkgbWV0aG9kIHByb2R1Y2UgYSBzdWl0YWJsZSByZXByLgotICAgICAgICAgICAgZGVsIG0uX19maWxlX18KLSAgICAgICAgICAgIHJldHVybiBtCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQgYW5kIGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgICIiIkxvYWQgYSBmcm96ZW4gbW9kdWxlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZXhlY19tb2R1bGUoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2xvYWRfbW9kdWxlX3NoaW0oY2xzLCBmdWxsbmFtZSkKIAogICAgIEBjbGFzc21ldGhvZAogICAgIEBfcmVxdWlyZXNfZnJvemVuCkBAIC03MzgsMjIgKzEzNjQsMjEgQEAKIAogY2xhc3MgV2luZG93c1JlZ2lzdHJ5RmluZGVyOgogCi0gICAgIiIiTWV0YSBwYXRoIGZpbmRlciBmb3IgbW9kdWxlcyBkZWNsYXJlZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4KLSAgICAiIiIKKyAgICAiIiJNZXRhIHBhdGggZmluZGVyIGZvciBtb2R1bGVzIGRlY2xhcmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LiIiIgogCiAgICAgUkVHSVNUUllfS0VZID0gKAotICAgICAgICAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufSIKLSAgICAgICAgIlxcTW9kdWxlc1xce2Z1bGxuYW1lfSIpCisgICAgICAgICdTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259JworICAgICAgICAnXFxNb2R1bGVzXFx7ZnVsbG5hbWV9JykKICAgICBSRUdJU1RSWV9LRVlfREVCVUcgPSAoCi0gICAgICAgICJTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259IgotICAgICAgICAiXFxNb2R1bGVzXFx7ZnVsbG5hbWV9XFxEZWJ1ZyIpCisgICAgICAgICdTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259JworICAgICAgICAnXFxNb2R1bGVzXFx7ZnVsbG5hbWV9XFxEZWJ1ZycpCiAgICAgREVCVUdfQlVJTEQgPSBGYWxzZSAgIyBDaGFuZ2VkIGluIF9zZXR1cCgpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgX29wZW5fcmVnaXN0cnkoY2xzLCBrZXkpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsIGtleSkKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9MT0NBTF9NQUNISU5FLCBrZXkpCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTc2NiwyNCArMTM5MSwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c192ZXJzaW9uPXN5cy52ZXJzaW9uWzozXSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBjbHMuX29wZW5fcmVnaXN0cnkoa2V5KSBhcyBoa2V5OgotICAgICAgICAgICAgICAgIGZpbGVwYXRoID0gX3dpbnJlZy5RdWVyeVZhbHVlKGhrZXksICIiKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgICAgIGZpbGVwYXRoID0gX3dpbnJlZy5RdWVyeVZhbHVlKGhrZXksICcnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiBmaWxlcGF0aAogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICIiIkZpbmQgbW9kdWxlIG5hbWVkIGluIHRoZSByZWdpc3RyeS4iIiIKKyAgICBkZWYgZmluZF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgogICAgICAgICBmaWxlcGF0aCA9IGNscy5fc2VhcmNoX3JlZ2lzdHJ5KGZ1bGxuYW1lKQogICAgICAgICBpZiBmaWxlcGF0aCBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgX29zLnN0YXQoZmlsZXBhdGgpCisgICAgICAgICAgICBfcGF0aF9zdGF0KGZpbGVwYXRoKQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGZvciBsb2FkZXIsIHN1ZmZpeGVzIGluIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpOgogICAgICAgICAgICAgaWYgZmlsZXBhdGguZW5kc3dpdGgodHVwbGUoc3VmZml4ZXMpKToKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyKGZ1bGxuYW1lLCBmaWxlcGF0aCkKKyAgICAgICAgICAgICAgICBzcGVjID0gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgbG9hZGVyKGZ1bGxuYW1lLCBmaWxlcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPWZpbGVwYXRoKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgIiIiRmluZCBtb2R1bGUgbmFtZWQgaW4gdGhlIHJlZ2lzdHJ5LgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZXhlY19tb2R1bGUoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gY2xzLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjLmxvYWRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogCiBjbGFzcyBfTG9hZGVyQmFzaWNzOgpAQCAtNzk5LDc0ICsxNDM4LDE1IEBACiAgICAgICAgIHRhaWxfbmFtZSA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQogICAgICAgICByZXR1cm4gZmlsZW5hbWVfYmFzZSA9PSAnX19pbml0X18nIGFuZCB0YWlsX25hbWUgIT0gJ19faW5pdF9fJwogCi0gICAgZGVmIF9ieXRlc19mcm9tX2J5dGVjb2RlKHNlbGYsIGZ1bGxuYW1lLCBkYXRhLCBieXRlY29kZV9wYXRoLCBzb3VyY2Vfc3RhdHMpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG1hcnNoYWxsZWQgYnl0ZXMgZnJvbSBieXRlY29kZSwgdmVyaWZ5aW5nIHRoZSBtYWdpYwotICAgICAgICBudW1iZXIsIHRpbWVzdGFtcCBhbmQgc291cmNlIHNpemUgYWxvbmcgdGhlIHdheS4KKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgbW9kdWxlLiIiIgorICAgICAgICBjb2RlID0gc2VsZi5nZXRfY29kZShtb2R1bGUuX19uYW1lX18pCisgICAgICAgIGlmIGNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdjYW5ub3QgbG9hZCBtb2R1bGUgeyFyfSB3aGVuIGdldF9jb2RlKCkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybnMgTm9uZScuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykpCisgICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZSwgbW9kdWxlLl9fZGljdF9fKQogCi0gICAgICAgIElmIHNvdXJjZV9zdGF0cyBpcyBOb25lIHRoZW4gc2tpcCB0aGUgdGltZXN0YW1wIGNoZWNrLgotCi0gICAgICAgICIiIgotICAgICAgICBtYWdpYyA9IGRhdGFbOjRdCi0gICAgICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KLSAgICAgICAgcmF3X3NpemUgPSBkYXRhWzg6MTJdCi0gICAgICAgIGlmIG1hZ2ljICE9IF9NQUdJQ19CWVRFUzoKLSAgICAgICAgICAgIG1zZyA9ICdiYWQgbWFnaWMgbnVtYmVyIGluIHshcn06IHshcn0nLmZvcm1hdChmdWxsbmFtZSwgbWFnaWMpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1zZykKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICBlbGlmIGxlbihyYXdfdGltZXN0YW1wKSAhPSA0OgotICAgICAgICAgICAgbWVzc2FnZSA9ICdiYWQgdGltZXN0YW1wIGluIHt9Jy5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQotICAgICAgICBlbGlmIGxlbihyYXdfc2l6ZSkgIT0gNDoKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAnYmFkIHNpemUgaW4ge30nLmZvcm1hdChmdWxsbmFtZSkKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCi0gICAgICAgIGlmIHNvdXJjZV9zdGF0cyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc291cmNlX3N0YXRzWydtdGltZSddKQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgX3JfbG9uZyhyYXdfdGltZXN0YW1wKSAhPSBzb3VyY2VfbXRpbWU6Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHt9Jy5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgbmFtZT1mdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvdXJjZV9zaXplID0gc291cmNlX3N0YXRzWydzaXplJ10gJiAweEZGRkZGRkZGCi0gICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBfcl9sb25nKHJhd19zaXplKSAhPSBzb3VyY2Vfc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHt9Ii5mb3JtYXQoZnVsbG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAjIENhbid0IHJldHVybiB0aGUgY29kZSBvYmplY3QgYXMgZXJyb3JzIGZyb20gbWFyc2hhbCBsb2FkaW5nIG5lZWQgdG8KLSAgICAgICAgIyBwcm9wYWdhdGUgZXZlbiB3aGVuIHNvdXJjZSBpcyBhdmFpbGFibGUuCi0gICAgICAgIHJldHVybiBkYXRhWzEyOl0KLQotICAgIEBtb2R1bGVfZm9yX2xvYWRlcgotICAgIGRlZiBfbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlLCAqLCBzb3VyY2VsZXNzPUZhbHNlKToKLSAgICAgICAgIiIiSGVscGVyIGZvciBsb2FkX21vZHVsZSBhYmxlIHRvIGhhbmRsZSBlaXRoZXIgc291cmNlIG9yIHNvdXJjZWxlc3MKLSAgICAgICAgbG9hZGluZy4iIiIKLSAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXwotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuZ2V0X2NvZGUobmFtZSkKLSAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gc2VsZi5nZXRfZmlsZW5hbWUobmFtZSkKLSAgICAgICAgaWYgbm90IHNvdXJjZWxlc3M6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBjYWNoZV9mcm9tX3NvdXJjZShtb2R1bGUuX19maWxlX18pCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IG1vZHVsZS5fX2ZpbGVfXwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBtb2R1bGUuX19maWxlX18KLSAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbmFtZQotICAgICAgICBpZiBzZWxmLmlzX3BhY2thZ2UobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQobW9kdWxlLl9fZmlsZV9fKVswXV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKLSAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgIGxvYWRfbW9kdWxlID0gX2xvYWRfbW9kdWxlX3NoaW0KIAogCiBjbGFzcyBTb3VyY2VMb2FkZXIoX0xvYWRlckJhc2ljcyk6CkBAIC04NzQsOCArMTQ1NCwxMCBAQAogICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBtb2RpZmljYXRpb24gdGltZSAoYW4gaW50KSBmb3IgdGhlCiAgICAgICAgIHNwZWNpZmllZCBwYXRoLCB3aGVyZSBwYXRoIGlzIGEgc3RyLgorCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIHdoZW4gdGhlIHBhdGggY2Fubm90IGJlIGhhbmRsZWQuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHJhaXNlIElPRXJyb3IKIAogICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgcmV0dXJuaW5nIGEgbWV0YWRhdGEgZGljdCBmb3IgdGhlIHNwZWNpZmllZCBwYXRoCkBAIC04ODYsNiArMTQ2OCw3IEBACiAgICAgICAgIC0gJ3NpemUnIChvcHRpb25hbCkgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBjb2RlLgogCiAgICAgICAgIEltcGxlbWVudGluZyB0aGlzIG1ldGhvZCBhbGxvd3MgdGhlIGxvYWRlciB0byByZWFkIGJ5dGVjb2RlIGZpbGVzLgorICAgICAgICBSYWlzZXMgSU9FcnJvciB3aGVuIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnBhdGhfbXRpbWUocGF0aCl9CiAKQEAgLTkwMywzMiArMTQ4NiwyNiBAQAogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2Qgd2hpY2ggd3JpdGVzIGRhdGEgKGJ5dGVzKSB0byBhIGZpbGUgcGF0aCAoYSBzdHIpLgogCiAgICAgICAgIEltcGxlbWVudGluZyB0aGlzIG1ldGhvZCBhbGxvd3MgZm9yIHRoZSB3cml0aW5nIG9mIGJ5dGVjb2RlIGZpbGVzLgotCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgSW5zcGVjdExvYWRlci5nZXRfc291cmNlLiIiIgotICAgICAgICBpbXBvcnQgdG9rZW5pemUKICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJzb3VyY2Ugbm90IGF2YWlsYWJsZSB0aHJvdWdoIGdldF9kYXRhKCkiLAorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc291cmNlIG5vdCBhdmFpbGFibGUgdGhyb3VnaCBnZXRfZGF0YSgpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpIGZyb20gZXhjCi0gICAgICAgIHJlYWRzb3VyY2UgPSBfaW8uQnl0ZXNJTyhzb3VyY2VfYnl0ZXMpLnJlYWRsaW5lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKHJlYWRzb3VyY2UpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRldGVjdCBlbmNvZGluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YwotICAgICAgICBuZXdsaW5lX2RlY29kZXIgPSBfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihOb25lLCBUcnVlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gbmV3bGluZV9kZWNvZGVyLmRlY29kZShzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKSkKLSAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRlY29kZSBzb3VyY2UgZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YworICAgICAgICByZXR1cm4gZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpCisKKyAgICBkZWYgc291cmNlX3RvX2NvZGUoc2VsZiwgZGF0YSwgcGF0aCwgKiwgX29wdGltaXplPS0xKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjb2RlIG9iamVjdCBjb21waWxlZCBmcm9tIHNvdXJjZS4KKworICAgICAgICBUaGUgJ2RhdGEnIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2JqZWN0IHR5cGUgdGhhdCBjb21waWxlKCkgc3VwcG9ydHMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLCBkYXRhLCBwYXRoLCAnZXhlYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUsIG9wdGltaXplPV9vcHRpbWl6ZSkKIAogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X2NvZGUuCkBAIC05NDYsNDUgKzE1MjMsMzQgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdCA9IHNlbGYucGF0aF9zdGF0cyhzb3VyY2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc3RbJ210aW1lJ10pCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfZGF0YSA9IHNlbGYuX2J5dGVzX2Zyb21fYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlc19kYXRhID0gX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Vfc3RhdHM9c3QsIG5hbWU9ZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgne30gbWF0Y2hlcyB7fScsIGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcnNoYWwubG9hZHMoYnl0ZXNfZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm91bmQsIF9jb2RlX3R5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbXAuX2ZpeF9jb19maWxlbmFtZShmb3VuZCwgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJOb24tY29kZSBvYmplY3QgaW4ge30iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChieXRlY29kZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbXBpbGVfYnl0ZWNvZGUoYnl0ZXNfZGF0YSwgbmFtZT1mdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoPWJ5dGVjb2RlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGg9c291cmNlX3BhdGgpCiAgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNlbGYuZ2V0X2RhdGEoc291cmNlX3BhdGgpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMsIHNvdXJjZV9wYXRoLCAnZXhlYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlX2J5dGVzLCBzb3VyY2VfcGF0aCkKICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsIHNvdXJjZV9wYXRoKQogICAgICAgICBpZiAobm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGFuZCBieXRlY29kZV9wYXRoIGlzIG5vdCBOb25lIGFuZAotICAgICAgICAgICAgc291cmNlX210aW1lIGlzIG5vdCBOb25lKToKLSAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoX01BR0lDX0JZVEVTKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhzb3VyY2VfbXRpbWUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhsZW4oc291cmNlX2J5dGVzKSkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKKyAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgZGF0YSA9IF9jb2RlX3RvX2J5dGVjb2RlKGNvZGVfb2JqZWN0LCBzb3VyY2VfbXRpbWUsCisgICAgICAgICAgICAgICAgICAgIGxlbihzb3VyY2VfYnl0ZXMpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX2J5dGVjb2RlKHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKQogICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3dyb3RlIHshcn0nLCBieXRlY29kZV9wYXRoKQpAQCAtOTkyLDE2ICsxNTU4LDYgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAogCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgTG9hZGVyLmxvYWRfbW9kdWxlLgotCi0gICAgICAgIFJlcXVpcmVzIEV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWUgYW5kIFJlc291cmNlTG9hZGVyLmdldF9kYXRhIHRvIGJlCi0gICAgICAgIGltcGxlbWVudGVkIHRvIGxvYWQgc291cmNlIGNvZGUuIFVzZSBvZiBieXRlY29kZSBpcyBkaWN0YXRlZCBieSB3aGV0aGVyCi0gICAgICAgIGdldF9jb2RlIHVzZXMvd3JpdGVzIGJ5dGVjb2RlLgotCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUoZnVsbG5hbWUpCi0KIAogY2xhc3MgRmlsZUxvYWRlcjoKIApAQCAtMTAxNCwxMCArMTU3MCwyMiBAQAogICAgICAgICBzZWxmLm5hbWUgPSBmdWxsbmFtZQogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXyA9PSBvdGhlci5fX2NsYXNzX18gYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5uYW1lKSBeIGhhc2goc2VsZi5wYXRoKQorCiAgICAgQF9jaGVja19uYW1lCiAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiTG9hZCBhIG1vZHVsZSBmcm9tIGEgZmlsZS4iIiIKLSAgICAgICAgIyBJc3N1ZSAjMTQ4NTc6IEF2b2lkIHRoZSB6ZXJvLWFyZ3VtZW50IGZvcm0gc28gdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAgICIiIkxvYWQgYSBtb2R1bGUgZnJvbSBhIGZpbGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBleGVjX21vZHVsZSgpIGluc3RlYWQuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgVGhlIG9ubHkgcmVhc29uIGZvciB0aGlzIG1ldGhvZCBpcyBmb3IgdGhlIG5hbWUgY2hlY2suCisgICAgICAgICMgSXNzdWUgIzE0ODU3OiBBdm9pZCB0aGUgemVyby1hcmd1bWVudCBmb3JtIG9mIHN1cGVyIHNvIHRoZSBpbXBsZW1lbnRhdGlvbgogICAgICAgICAjIG9mIHRoYXQgZm9ybSBjYW4gYmUgdXBkYXRlZCB3aXRob3V0IGJyZWFraW5nIHRoZSBmcm96ZW4gbW9kdWxlCiAgICAgICAgIHJldHVybiBzdXBlcihGaWxlTG9hZGVyLCBzZWxmKS5sb2FkX21vZHVsZShmdWxsbmFtZSkKIApAQCAtMTAzOCwxOCArMTYwNiwxMiBAQAogCiAgICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgbWV0YWRhdGEgZm9yIHRoZSBwYXRoLiIiIgotICAgICAgICBzdCA9IF9vcy5zdGF0KHBhdGgpCisgICAgICAgIHN0ID0gX3BhdGhfc3RhdChwYXRoKQogICAgICAgICByZXR1cm4geydtdGltZSc6IHN0LnN0X210aW1lLCAnc2l6ZSc6IHN0LnN0X3NpemV9CiAKICAgICBkZWYgX2NhY2hlX2J5dGVjb2RlKHNlbGYsIHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKToKICAgICAgICAgIyBBZGFwdCBiZXR3ZWVuIHRoZSB0d28gQVBJcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2RlID0gX29zLnN0YXQoc291cmNlX3BhdGgpLnN0X21vZGUKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBtb2RlID0gMG82NjYKLSAgICAgICAgIyBXZSBhbHdheXMgZW5zdXJlIHdyaXRlIGFjY2VzcyBzbyB3ZSBjYW4gdXBkYXRlIGNhY2hlZCBmaWxlcwotICAgICAgICAjIGxhdGVyIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZSByZWFkLW9ubHkgb24gV2luZG93cyAoIzYwNzQpCi0gICAgICAgIG1vZGUgfD0gMG8yMDAKKyAgICAgICAgbW9kZSA9IF9jYWxjX21vZGUoc291cmNlX3BhdGgpCiAgICAgICAgIHJldHVybiBzZWxmLnNldF9kYXRhKGJ5dGVjb2RlX3BhdGgsIGRhdGEsIF9tb2RlPW1vZGUpCiAKICAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSwgKiwgX21vZGU9MG82NjYpOgpAQCAtMTA4NSwyMCArMTY0NywxMSBAQAogCiAgICAgIiIiTG9hZGVyIHdoaWNoIGhhbmRsZXMgc291cmNlbGVzcyBmaWxlIGltcG9ydHMuIiIiCiAKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUoZnVsbG5hbWUsIHNvdXJjZWxlc3M9VHJ1ZSkKLQogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIHBhdGggPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgYnl0ZXNfZGF0YSA9IHNlbGYuX2J5dGVzX2Zyb21fYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEsIHBhdGgsIE5vbmUpCi0gICAgICAgIGZvdW5kID0gbWFyc2hhbC5sb2FkcyhieXRlc19kYXRhKQotICAgICAgICBpZiBpc2luc3RhbmNlKGZvdW5kLCBfY29kZV90eXBlKToKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvZGUgb2JqZWN0IGZyb20geyFyfScsIHBhdGgpCi0gICAgICAgICAgICByZXR1cm4gZm91bmQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJOb24tY29kZSBvYmplY3QgaW4ge30iLmZvcm1hdChwYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUsIHBhdGg9cGF0aCkKKyAgICAgICAgYnl0ZXNfZGF0YSA9IF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoZGF0YSwgbmFtZT1mdWxsbmFtZSwgcGF0aD1wYXRoKQorICAgICAgICByZXR1cm4gX2NvbXBpbGVfYnl0ZWNvZGUoYnl0ZXNfZGF0YSwgbmFtZT1mdWxsbmFtZSwgYnl0ZWNvZGVfcGF0aD1wYXRoKQogCiAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJSZXR1cm4gTm9uZSBhcyB0aGVyZSBpcyBubyBzb3VyY2UgY29kZS4iIiIKQEAgLTExMjEsMjMgKzE2NzQsMzAgQEAKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXyA9PSBvdGhlci5fX2NsYXNzX18gYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5uYW1lKSBeIGhhc2goc2VsZi5wYXRoKQorCiAgICAgQF9jaGVja19uYW1lCi0gICAgQHNldF9wYWNrYWdlCi0gICAgQHNldF9sb2FkZXIKICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJMb2FkIGFuIGV4dGVuc2lvbiBtb2R1bGUuIiIiCi0gICAgICAgIGlzX3JlbG9hZCA9IGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzCi0gICAgICAgIHRyeToKKyAgICAgICAgIyBPbmNlIGFuIGV4ZWNfbW9kdWxlKCkgaW1wbGVtZW50YXRpb24gaXMgYWRkZWQgd2UgY2FuIGFsc28KKyAgICAgICAgIyBhZGQgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGhlcmUuCisgICAgICAgIHdpdGggX01hbmFnZVJlbG9hZChmdWxsbmFtZSk6CiAgICAgICAgICAgICBtb2R1bGUgPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAubG9hZF9keW5hbWljLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSwgc2VsZi5wYXRoKQotICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnZXh0ZW5zaW9uIG1vZHVsZSBsb2FkZWQgZnJvbSB7IXJ9Jywgc2VsZi5wYXRoKQotICAgICAgICAgICAgaWYgc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKSBhbmQgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQoc2VsZi5wYXRoKVswXV0KLSAgICAgICAgICAgIHJldHVybiBtb2R1bGUKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZCBhbmQgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnZXh0ZW5zaW9uIG1vZHVsZSBsb2FkZWQgZnJvbSB7IXJ9Jywgc2VsZi5wYXRoKQorICAgICAgICBpc19wYWNrYWdlID0gc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKQorICAgICAgICBpZiBpc19wYWNrYWdlIGFuZCBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW19wYXRoX3NwbGl0KHNlbGYucGF0aClbMF1dCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgaWYgbm90IGlzX3BhY2thZ2U6CisgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIHJldHVybiBtb2R1bGUKIAogICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaXMgYSBwYWNrYWdlLiIiIgpAQCAtMTE1Myw2ICsxNzEzLDExIEBACiAgICAgICAgICIiIlJldHVybiBOb25lIGFzIGV4dGVuc2lvbiBtb2R1bGVzIGhhdmUgbm8gc291cmNlIGNvZGUuIiIiCiAgICAgICAgIHJldHVybiBOb25lCiAKKyAgICBAX2NoZWNrX25hbWUKKyAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZSBhcyBmb3VuZCBieSB0aGUgZmluZGVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKIAogY2xhc3MgX05hbWVzcGFjZVBhdGg6CiAgICAgIiIiUmVwcmVzZW50cyBhIG5hbWVzcGFjZSBwYWNrYWdlJ3MgcGF0aC4gIEl0IHVzZXMgdGhlIG1vZHVsZSBuYW1lCkBAIC0xMTg1LDExICsxNzUwLDEyIEBACiAgICAgICAgICMgSWYgdGhlIHBhcmVudCdzIHBhdGggaGFzIGNoYW5nZWQsIHJlY2FsY3VsYXRlIF9wYXRoCiAgICAgICAgIHBhcmVudF9wYXRoID0gdHVwbGUoc2VsZi5fZ2V0X3BhcmVudF9wYXRoKCkpICMgTWFrZSBhIGNvcHkKICAgICAgICAgaWYgcGFyZW50X3BhdGggIT0gc2VsZi5fbGFzdF9wYXJlbnRfcGF0aDoKLSAgICAgICAgICAgIGxvYWRlciwgbmV3X3BhdGggPSBzZWxmLl9wYXRoX2ZpbmRlcihzZWxmLl9uYW1lLCBwYXJlbnRfcGF0aCkKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLl9wYXRoX2ZpbmRlcihzZWxmLl9uYW1lLCBwYXJlbnRfcGF0aCkKICAgICAgICAgICAgICMgTm90ZSB0aGF0IG5vIGNoYW5nZXMgYXJlIG1hZGUgaWYgYSBsb2FkZXIgaXMgcmV0dXJuZWQsIGJ1dCB3ZQogICAgICAgICAgICAgIyAgZG8gcmVtZW1iZXIgdGhlIG5ldyBwYXJlbnQgcGF0aAotICAgICAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcGF0aCA9IG5ld19wYXRoCisgICAgICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lIGFuZCBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCiAgICAgICAgICAgICBzZWxmLl9sYXN0X3BhcmVudF9wYXRoID0gcGFyZW50X3BhdGggICAgICMgU2F2ZSB0aGUgY29weQogICAgICAgICByZXR1cm4gc2VsZi5fcGF0aAogCkBAIC0xMjAwLDcgKzE3NjYsNyBAQAogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3JlY2FsY3VsYXRlKCkpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX05hbWVzcGFjZVBhdGgoeyFyfSkiLmZvcm1hdChzZWxmLl9wYXRoKQorICAgICAgICByZXR1cm4gJ19OYW1lc3BhY2VQYXRoKHshcn0pJy5mb3JtYXQoc2VsZi5fcGF0aCkKIAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgaXRlbSk6CiAgICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuX3JlY2FsY3VsYXRlKCkKQEAgLTEyMDksMjAgKzE3NzUsNDEgQEAKICAgICAgICAgc2VsZi5fcGF0aC5hcHBlbmQoaXRlbSkKIAogCi1jbGFzcyBOYW1lc3BhY2VMb2FkZXI6CisjIFdlIHVzZSB0aGlzIGV4Y2x1c2l2ZWx5IGluIGluaXRfbW9kdWxlX2F0dHJzKCkgZm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkuCitjbGFzcyBfTmFtZXNwYWNlTG9hZGVyOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcik6CiAgICAgICAgIHNlbGYuX3BhdGggPSBfTmFtZXNwYWNlUGF0aChuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcikKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChuYW1lc3BhY2UpPiIuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKyAgICAgICAgIiIiUmV0dXJuIHJlcHIgZm9yIHRoZSBtb2R1bGUuCiAKLSAgICBAbW9kdWxlX2Zvcl9sb2FkZXIKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgIiIiTG9hZCBhIG5hbWVzcGFjZSBtb2R1bGUuIiIiCisgICAgICAgIFRoZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvZXMgdGhlIGpvYiBpdHNlbGYuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IChuYW1lc3BhY2UpPicuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKworICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gY29tcGlsZSgnJywgJzxzdHJpbmc+JywgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSkKKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJMb2FkIGEgbmFtZXNwYWNlIG1vZHVsZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGV4ZWNfbW9kdWxlKCkgaW5zdGVhZC4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBUaGUgaW1wb3J0IHN5c3RlbSBuZXZlciBjYWxscyB0aGlzIG1ldGhvZC4KICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnbmFtZXNwYWNlIG1vZHVsZSBsb2FkZWQgd2l0aCBwYXRoIHshcn0nLCBzZWxmLl9wYXRoKQotICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBzZWxmLl9wYXRoCi0gICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgcmV0dXJuIF9sb2FkX21vZHVsZV9zaGltKHNlbGYsIGZ1bGxuYW1lKQogCiAKICMgRmluZGVycyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTEyNjUsNyArMTg1Miw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHBhdGggPT0gJyc6Ci0gICAgICAgICAgICBwYXRoID0gJy4nCisgICAgICAgICAgICBwYXRoID0gX29zLmdldGN3ZCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZpbmRlciA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhdCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKQEAgLTEyNzQsNyArMTg2MSwyMiBAQAogICAgICAgICByZXR1cm4gZmluZGVyCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2dldF9sb2FkZXIoY2xzLCBmdWxsbmFtZSwgcGF0aCk6CisgICAgZGVmIF9sZWdhY3lfZ2V0X3NwZWMoY2xzLCBmdWxsbmFtZSwgZmluZGVyKToKKyAgICAgICAgIyBUaGlzIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSBmb3IgYSBEZXByZWNhdGlvbldhcm5pbmcgaWYKKyAgICAgICAgIyB3ZSBlbmRlZCB1cCBnb2luZyB0aGF0IHJvdXRlLgorICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6CisgICAgICAgICAgICBsb2FkZXIsIHBvcnRpb25zID0gZmluZGVyLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQorICAgICAgICAgICAgcG9ydGlvbnMgPSBOb25lCisgICAgICAgIGlmIGxvYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBsb2FkZXIpCisgICAgICAgIHNwZWMgPSBNb2R1bGVTcGVjKGZ1bGxuYW1lLCBOb25lKQorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gcG9ydGlvbnMKKyAgICAgICAgcmV0dXJuIHNwZWMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZ2V0X3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aCwgdGFyZ2V0PU5vbmUpOgogICAgICAgICAiIiJGaW5kIHRoZSBsb2FkZXIgb3IgbmFtZXNwYWNlX3BhdGggZm9yIHRoaXMgbW9kdWxlL3BhY2thZ2UgbmFtZS4iIiIKICAgICAgICAgIyBJZiB0aGlzIGVuZHMgdXAgYmVpbmcgYSBuYW1lc3BhY2UgcGFja2FnZSwgbmFtZXNwYWNlX3BhdGggaXMKICAgICAgICAgIyAgdGhlIGxpc3Qgb2YgcGF0aHMgdGhhdCB3aWxsIGJlY29tZSBpdHMgX19wYXRoX18KQEAgLTEyODQsMzggKzE4ODYsNjEgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZmluZGVyID0gY2xzLl9wYXRoX2ltcG9ydGVyX2NhY2hlKGVudHJ5KQogICAgICAgICAgICAgaWYgZmluZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9sb2FkZXInKToKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVyLCBwb3J0aW9ucyA9IGZpbmRlci5maW5kX2xvYWRlcihmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfc3BlYycpOgorICAgICAgICAgICAgICAgICAgICBzcGVjID0gZmluZGVyLmZpbmRfc3BlYyhmdWxsbmFtZSwgdGFyZ2V0KQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IGZpbmRlci5maW5kX21vZHVsZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgcG9ydGlvbnMgPSBbXQotICAgICAgICAgICAgICAgIGlmIGxvYWRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgIyBXZSBmb3VuZCBhIGxvYWRlcjogcmV0dXJuIGl0IGltbWVkaWF0ZWx5LgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyLCBuYW1lc3BhY2VfcGF0aAorICAgICAgICAgICAgICAgICAgICBzcGVjID0gY2xzLl9sZWdhY3lfZ2V0X3NwZWMoZnVsbG5hbWUsIGZpbmRlcikKKyAgICAgICAgICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgc3BlYy5sb2FkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisgICAgICAgICAgICAgICAgcG9ydGlvbnMgPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICAgICAgaWYgcG9ydGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3NwZWMgbWlzc2luZyBsb2FkZXInKQogICAgICAgICAgICAgICAgICMgVGhpcyBpcyBwb3NzaWJseSBwYXJ0IG9mIGEgbmFtZXNwYWNlIHBhY2thZ2UuCiAgICAgICAgICAgICAgICAgIyAgUmVtZW1iZXIgdGhlc2UgcGF0aCBlbnRyaWVzIChpZiBhbnkpIGZvciB3aGVuIHdlCiAgICAgICAgICAgICAgICAgIyAgY3JlYXRlIGEgbmFtZXNwYWNlIHBhY2thZ2UsIGFuZCBjb250aW51ZSBpdGVyYXRpbmcKICAgICAgICAgICAgICAgICAjICBvbiBwYXRoLgogICAgICAgICAgICAgICAgIG5hbWVzcGFjZV9wYXRoLmV4dGVuZChwb3J0aW9ucykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBOb25lLCBuYW1lc3BhY2VfcGF0aAorICAgICAgICAgICAgc3BlYyA9IE1vZHVsZVNwZWMoZnVsbG5hbWUsIE5vbmUpCisgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gbmFtZXNwYWNlX3BhdGgKKyAgICAgICAgICAgIHJldHVybiBzcGVjCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgIiIiRmluZCB0aGUgbW9kdWxlIG9uIHN5cy5wYXRoIG9yICdwYXRoJyBiYXNlZCBvbiBzeXMucGF0aF9ob29rcyBhbmQKKyAgICBkZWYgZmluZF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAiIiJmaW5kIHRoZSBtb2R1bGUgb24gc3lzLnBhdGggb3IgJ3BhdGgnIGJhc2VkIG9uIHN5cy5wYXRoX2hvb2tzIGFuZAogICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS4iIiIKICAgICAgICAgaWYgcGF0aCBpcyBOb25lOgogICAgICAgICAgICAgcGF0aCA9IHN5cy5wYXRoCi0gICAgICAgIGxvYWRlciwgbmFtZXNwYWNlX3BhdGggPSBjbHMuX2dldF9sb2FkZXIoZnVsbG5hbWUsIHBhdGgpCi0gICAgICAgIGlmIGxvYWRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBsb2FkZXIKLSAgICAgICAgZWxzZToKKyAgICAgICAgc3BlYyA9IGNscy5fZ2V0X3NwZWMoZnVsbG5hbWUsIHBhdGgsIHRhcmdldCkKKyAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgbmFtZXNwYWNlX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCiAgICAgICAgICAgICBpZiBuYW1lc3BhY2VfcGF0aDoKICAgICAgICAgICAgICAgICAjIFdlIGZvdW5kIGF0IGxlYXN0IG9uZSBuYW1lc3BhY2UgcGF0aC4gIFJldHVybiBhCi0gICAgICAgICAgICAgICAgIyAgbG9hZGVyIHdoaWNoIGNhbiBjcmVhdGUgdGhlIG5hbWVzcGFjZSBwYWNrYWdlLgotICAgICAgICAgICAgICAgIHJldHVybiBOYW1lc3BhY2VMb2FkZXIoZnVsbG5hbWUsIG5hbWVzcGFjZV9wYXRoLCBjbHMuX2dldF9sb2FkZXIpCisgICAgICAgICAgICAgICAgIyAgc3BlYyB3aGljaCBjYW4gY3JlYXRlIHRoZSBuYW1lc3BhY2UgcGFja2FnZS4KKyAgICAgICAgICAgICAgICBzcGVjLm9yaWdpbiA9ICduYW1lc3BhY2UnCisgICAgICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IF9OYW1lc3BhY2VQYXRoKGZ1bGxuYW1lLCBuYW1lc3BhY2VfcGF0aCwgY2xzLl9nZXRfc3BlYykKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICAiIiJmaW5kIHRoZSBtb2R1bGUgb24gc3lzLnBhdGggb3IgJ3BhdGgnIGJhc2VkIG9uIHN5cy5wYXRoX2hvb2tzIGFuZAorICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGZpbmRfc3BlYygpIGluc3RlYWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNwZWMgPSBjbHMuZmluZF9zcGVjKGZ1bGxuYW1lLCBwYXRoKQorICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIKIAogCiBjbGFzcyBGaWxlRmluZGVyOgpAQCAtMTM0OSwxMSArMTk3NCwyOCBAQAogCiAgICAgZGVmIGZpbmRfbG9hZGVyKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLCBvciB0aGUgbmFtZXNwYWNlCisgICAgICAgIHBhY2thZ2UgcG9ydGlvbnMuIFJldHVybnMgKGxvYWRlciwgbGlzdC1vZi1wb3J0aW9ucykuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBmaW5kX3NwZWMoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gc2VsZi5maW5kX3NwZWMoZnVsbG5hbWUpCisgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBbXQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIsIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgb3IgW10KKworICAgIGRlZiBfZ2V0X3NwZWMoc2VsZiwgbG9hZGVyX2NsYXNzLCBmdWxsbmFtZSwgcGF0aCwgc21zbCwgdGFyZ2V0KToKKyAgICAgICAgbG9hZGVyID0gbG9hZGVyX2NsYXNzKGZ1bGxuYW1lLCBwYXRoKQorICAgICAgICByZXR1cm4gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oZnVsbG5hbWUsIHBhdGgsIGxvYWRlcj1sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1zbXNsKQorCisgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAiIiJUcnkgdG8gZmluZCBhIGxvYWRlciBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUsIG9yIHRoZSBuYW1lc3BhY2UKICAgICAgICAgcGFja2FnZSBwb3J0aW9ucy4gUmV0dXJucyAobG9hZGVyLCBsaXN0LW9mLXBvcnRpb25zKS4iIiIKICAgICAgICAgaXNfbmFtZXNwYWNlID0gRmFsc2UKICAgICAgICAgdGFpbF9tb2R1bGUgPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMl0KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbXRpbWUgPSBfb3Muc3RhdChzZWxmLnBhdGgpLnN0X210aW1lCisgICAgICAgICAgICBtdGltZSA9IF9wYXRoX3N0YXQoc2VsZi5wYXRoIG9yIF9vcy5nZXRjd2QoKSkuc3RfbXRpbWUKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBtdGltZSA9IC0xCiAgICAgICAgIGlmIG10aW1lICE9IHNlbGYuX3BhdGhfbXRpbWU6CkBAIC0xMzY5LDMzICsyMDExLDM0IEBACiAgICAgICAgICMgQ2hlY2sgaWYgdGhlIG1vZHVsZSBpcyB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSAoYW5kIHRodXMgYSBwYWNrYWdlKS4KICAgICAgICAgaWYgY2FjaGVfbW9kdWxlIGluIGNhY2hlOgogICAgICAgICAgICAgYmFzZV9wYXRoID0gX3BhdGhfam9pbihzZWxmLnBhdGgsIHRhaWxfbW9kdWxlKQotICAgICAgICAgICAgaWYgX3BhdGhfaXNkaXIoYmFzZV9wYXRoKToKLSAgICAgICAgICAgICAgICBmb3Igc3VmZml4LCBsb2FkZXIgaW4gc2VsZi5fbG9hZGVyczoKLSAgICAgICAgICAgICAgICAgICAgaW5pdF9maWxlbmFtZSA9ICdfX2luaXRfXycgKyBzdWZmaXgKLSAgICAgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gX3BhdGhfam9pbihiYXNlX3BhdGgsIGluaXRfZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGlmIF9wYXRoX2lzZmlsZShmdWxsX3BhdGgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChsb2FkZXIoZnVsbG5hbWUsIGZ1bGxfcGF0aCksIFtiYXNlX3BhdGhdKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgQSBuYW1lc3BhY2UgcGFja2FnZSwgcmV0dXJuIHRoZSBwYXRoIGlmIHdlIGRvbid0IGFsc28KLSAgICAgICAgICAgICAgICAgICAgIyAgZmluZCBhIG1vZHVsZSBpbiB0aGUgbmV4dCBzZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICBpc19uYW1lc3BhY2UgPSBUcnVlCisgICAgICAgICAgICBmb3Igc3VmZml4LCBsb2FkZXJfY2xhc3MgaW4gc2VsZi5fbG9hZGVyczoKKyAgICAgICAgICAgICAgICBpbml0X2ZpbGVuYW1lID0gJ19faW5pdF9fJyArIHN1ZmZpeAorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IF9wYXRoX2pvaW4oYmFzZV9wYXRoLCBpbml0X2ZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGlmIF9wYXRoX2lzZmlsZShmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3NwZWMobG9hZGVyX2NsYXNzLCBmdWxsbmFtZSwgZnVsbF9wYXRoLCBbYmFzZV9wYXRoXSwgdGFyZ2V0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIElmIGEgbmFtZXNwYWNlIHBhY2thZ2UsIHJldHVybiB0aGUgcGF0aCBpZiB3ZSBkb24ndAorICAgICAgICAgICAgICAgICMgIGZpbmQgYSBtb2R1bGUgaW4gdGhlIG5leHQgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBpc19uYW1lc3BhY2UgPSBfcGF0aF9pc2RpcihiYXNlX3BhdGgpCiAgICAgICAgICMgQ2hlY2sgZm9yIGEgZmlsZSB3LyBhIHByb3BlciBzdWZmaXggZXhpc3RzLgotICAgICAgICBmb3Igc3VmZml4LCBsb2FkZXIgaW4gc2VsZi5fbG9hZGVyczoKKyAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyX2NsYXNzIGluIHNlbGYuX2xvYWRlcnM6CiAgICAgICAgICAgICBmdWxsX3BhdGggPSBfcGF0aF9qb2luKHNlbGYucGF0aCwgdGFpbF9tb2R1bGUgKyBzdWZmaXgpCiAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCd0cnlpbmcge30nLmZvcm1hdChmdWxsX3BhdGgpLCB2ZXJib3NpdHk9MikKICAgICAgICAgICAgIGlmIGNhY2hlX21vZHVsZSArIHN1ZmZpeCBpbiBjYWNoZToKICAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChsb2FkZXIoZnVsbG5hbWUsIGZ1bGxfcGF0aCksIFtdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X3NwZWMobG9hZGVyX2NsYXNzLCBmdWxsbmFtZSwgZnVsbF9wYXRoLCBOb25lLCB0YXJnZXQpCiAgICAgICAgIGlmIGlzX25hbWVzcGFjZToKICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3Bvc3NpYmxlIG5hbWVzcGFjZSBmb3Ige30nLmZvcm1hdChiYXNlX3BhdGgpKQotICAgICAgICAgICAgcmV0dXJuIChOb25lLCBbYmFzZV9wYXRoXSkKLSAgICAgICAgcmV0dXJuIChOb25lLCBbXSkKKyAgICAgICAgICAgIHNwZWMgPSBNb2R1bGVTcGVjKGZ1bGxuYW1lLCBOb25lKQorICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFtiYXNlX3BhdGhdCisgICAgICAgICAgICByZXR1cm4gc3BlYworICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIF9maWxsX2NhY2hlKHNlbGYpOgogICAgICAgICAiIiJGaWxsIHRoZSBjYWNoZSBvZiBwb3RlbnRpYWwgbW9kdWxlcyBhbmQgcGFja2FnZXMgZm9yIHRoaXMgZGlyZWN0b3J5LiIiIgogICAgICAgICBwYXRoID0gc2VsZi5wYXRoCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbnRlbnRzID0gX29zLmxpc3RkaXIocGF0aCkKKyAgICAgICAgICAgIGNvbnRlbnRzID0gX29zLmxpc3RkaXIocGF0aCBvciBfb3MuZ2V0Y3dkKCkpCiAgICAgICAgIGV4Y2VwdCAoRmlsZU5vdEZvdW5kRXJyb3IsIFBlcm1pc3Npb25FcnJvciwgTm90QURpcmVjdG9yeUVycm9yKToKICAgICAgICAgICAgICMgRGlyZWN0b3J5IGhhcyBlaXRoZXIgYmVlbiByZW1vdmVkLCB0dXJuZWQgaW50byBhIGZpbGUsIG9yIG1hZGUKICAgICAgICAgICAgICMgdW5yZWFkYWJsZS4KQEAgLTE0MjAsNyArMjA2Myw3IEBACiAgICAgICAgICAgICAgICAgbG93ZXJfc3VmZml4X2NvbnRlbnRzLmFkZChuZXdfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX3BhdGhfY2FjaGUgPSBsb3dlcl9zdWZmaXhfY29udGVudHMKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoX0NBU0VfSU5TRU5TSVRJVkVfUExBVEZPUk1TKToKLSAgICAgICAgICAgIHNlbGYuX3JlbGF4ZWRfcGF0aF9jYWNoZSA9IHNldChmbi5sb3dlcigpIGZvciBmbiBpbiBjb250ZW50cykKKyAgICAgICAgICAgIHNlbGYuX3JlbGF4ZWRfcGF0aF9jYWNoZSA9IHtmbi5sb3dlcigpIGZvciBmbiBpbiBjb250ZW50c30KIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBwYXRoX2hvb2soY2xzLCAqbG9hZGVyX2RldGFpbHMpOgpAQCAtMTQzNSwxMyArMjA3OCwxMyBAQAogICAgICAgICBkZWYgcGF0aF9ob29rX2Zvcl9GaWxlRmluZGVyKHBhdGgpOgogICAgICAgICAgICAgIiIiUGF0aCBob29rIGZvciBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIuIiIiCiAgICAgICAgICAgICBpZiBub3QgX3BhdGhfaXNkaXIocGF0aCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm9ubHkgZGlyZWN0b3JpZXMgYXJlIHN1cHBvcnRlZCIsIHBhdGg9cGF0aCkKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignb25seSBkaXJlY3RvcmllcyBhcmUgc3VwcG9ydGVkJywgcGF0aD1wYXRoKQogICAgICAgICAgICAgcmV0dXJuIGNscyhwYXRoLCAqbG9hZGVyX2RldGFpbHMpCiAKICAgICAgICAgcmV0dXJuIHBhdGhfaG9va19mb3JfRmlsZUZpbmRlcgogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIkZpbGVGaW5kZXIoJXIpIiAlIChzZWxmLnBhdGgsKQorICAgICAgICByZXR1cm4gJ0ZpbGVGaW5kZXIoeyFyfSknLmZvcm1hdChzZWxmLnBhdGgpCiAKIAogIyBJbXBvcnQgaXRzZWxmICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMTQ2OCwxOSArMjExMSw1MSBAQAogICAgIHJldHVybiAne30ue30nLmZvcm1hdChiYXNlLCBuYW1lKSBpZiBuYW1lIGVsc2UgYmFzZQogCiAKLWRlZiBfZmluZF9tb2R1bGUobmFtZSwgcGF0aCk6CitkZWYgX2ZpbmRfc3BlY19sZWdhY3koZmluZGVyLCBuYW1lLCBwYXRoKToKKyAgICAjIFRoaXMgd291bGQgYmUgYSBnb29kIHBsYWNlIGZvciBhIERlcHJlY2F0aW9uV2FybmluZyBpZgorICAgICMgd2UgZW5kZWQgdXAgZ29pbmcgdGhhdCByb3V0ZS4KKyAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKKyAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXR1cm4gc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIpCisKKworZGVmIF9maW5kX3NwZWMobmFtZSwgcGF0aCwgdGFyZ2V0PU5vbmUpOgogICAgICIiIkZpbmQgYSBtb2R1bGUncyBsb2FkZXIuIiIiCiAgICAgaWYgbm90IHN5cy5tZXRhX3BhdGg6CiAgICAgICAgIF93YXJuaW5ncy53YXJuKCdzeXMubWV0YV9wYXRoIGlzIGVtcHR5JywgSW1wb3J0V2FybmluZykKKyAgICAjIFdlIGNoZWNrIHN5cy5tb2R1bGVzIGhlcmUgZm9yIHRoZSByZWxvYWQgY2FzZS4gIFdoaWxlIGEgcGFzc2VkLWluCisgICAgIyB0YXJnZXQgd2lsbCB1c3VhbGx5IGluZGljYXRlIGEgcmVsb2FkIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSwgd2hlcmVhcworICAgICMgc3lzLm1vZHVsZXMgcHJvdmlkZXMgb25lLgorICAgIGlzX3JlbG9hZCA9IG5hbWUgaW4gc3lzLm1vZHVsZXMKICAgICBmb3IgZmluZGVyIGluIHN5cy5tZXRhX3BhdGg6CiAgICAgICAgIHdpdGggX0ltcG9ydExvY2tDb250ZXh0KCk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKLSAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgIyBUaGUgcGFyZW50IGltcG9ydCBtYXkgaGF2ZSBhbHJlYWR5IGltcG9ydGVkIHRoaXMgbW9kdWxlLgotICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlcgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpbmRfc3BlYyA9IGZpbmRlci5maW5kX3NwZWMKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBzcGVjID0gX2ZpbmRfc3BlY19sZWdhY3koZmluZGVyLCBuYW1lLCBwYXRoKQorICAgICAgICAgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX18KKyAgICAgICAgICAgICAgICBzcGVjID0gZmluZF9zcGVjKG5hbWUsIHBhdGgsIHRhcmdldCkKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgVGhlIHBhcmVudCBpbXBvcnQgbWF5IGhhdmUgYWxyZWFkeSBpbXBvcnRlZCB0aGlzIG1vZHVsZS4KKyAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQgYW5kIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIF9fc3BlY19fID0gbW9kdWxlLl9fc3BlY19fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIFdlIHVzZSB0aGUgZm91bmQgc3BlYyBzaW5jZSB0aGF0IGlzIHRoZSBvbmUgdGhhdAorICAgICAgICAgICAgICAgICAgICAjIHdlIHdvdWxkIGhhdmUgdXNlZCBpZiB0aGUgcGFyZW50IG1vZHVsZSBoYWRuJ3QKKyAgICAgICAgICAgICAgICAgICAgIyBiZWF0ZW4gdXMgdG8gdGhlIHB1bmNoLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIF9fc3BlY19fIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fc3BlY19fCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuIE5vbmUKIApAQCAtMTQ4OCwyMSArMjE2MywyMiBAQAogZGVmIF9zYW5pdHlfY2hlY2sobmFtZSwgcGFja2FnZSwgbGV2ZWwpOgogICAgICIiIlZlcmlmeSBhcmd1bWVudHMgYXJlICJzYW5lIi4iIiIKICAgICBpZiBub3QgaXNpbnN0YW5jZShuYW1lLCBzdHIpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm1vZHVsZSBuYW1lIG11c3QgYmUgc3RyLCBub3Qge30iLmZvcm1hdCh0eXBlKG5hbWUpKSkKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdtb2R1bGUgbmFtZSBtdXN0IGJlIHN0ciwgbm90IHt9Jy5mb3JtYXQodHlwZShuYW1lKSkpCiAgICAgaWYgbGV2ZWwgPCAwOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdsZXZlbCBtdXN0IGJlID49IDAnKQogICAgIGlmIHBhY2thZ2U6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhY2thZ2UsIHN0cik6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIl9fcGFja2FnZV9fIG5vdCBzZXQgdG8gYSBzdHJpbmciKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdfX3BhY2thZ2VfXyBub3Qgc2V0IHRvIGEgc3RyaW5nJykKICAgICAgICAgZWxpZiBwYWNrYWdlIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgIG1zZyA9ICgiUGFyZW50IG1vZHVsZSB7IXJ9IG5vdCBsb2FkZWQsIGNhbm5vdCBwZXJmb3JtIHJlbGF0aXZlICIKLSAgICAgICAgICAgICAgICAgICAiaW1wb3J0IikKKyAgICAgICAgICAgIG1zZyA9ICgnUGFyZW50IG1vZHVsZSB7IXJ9IG5vdCBsb2FkZWQsIGNhbm5vdCBwZXJmb3JtIHJlbGF0aXZlICcKKyAgICAgICAgICAgICAgICAgICAnaW1wb3J0JykKICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUVycm9yKG1zZy5mb3JtYXQocGFja2FnZSkpCiAgICAgaWYgbm90IG5hbWUgYW5kIGxldmVsID09IDA6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkVtcHR5IG1vZHVsZSBuYW1lIikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRW1wdHkgbW9kdWxlIG5hbWUnKQogCiAKLV9FUlJfTVNHID0gJ05vIG1vZHVsZSBuYW1lZCB7IXJ9JworX0VSUl9NU0dfUFJFRklYID0gJ05vIG1vZHVsZSBuYW1lZCAnCitfRVJSX01TRyA9IF9FUlJfTVNHX1BSRUZJWCArICd7IXJ9JwogCiBkZWYgX2ZpbmRfYW5kX2xvYWRfdW5sb2NrZWQobmFtZSwgaW1wb3J0Xyk6CiAgICAgcGF0aCA9IE5vbmUKQEAgLTE1MTMsNTggKzIxODksMjggQEAKICAgICAgICAgIyBDcmF6eSBzaWRlLWVmZmVjdHMhCiAgICAgICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KLSAgICAgICAgIyBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eTsgYmUgbmljZXIgdG8gc2tpcCB0aGUgZGljdCBsb29rdXAuCiAgICAgICAgIHBhcmVudF9tb2R1bGUgPSBzeXMubW9kdWxlc1twYXJlbnRdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHBhdGggPSBwYXJlbnRfbW9kdWxlLl9fcGF0aF9fCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIG1zZyA9IChfRVJSX01TRyArICc7IHt9IGlzIG5vdCBhIHBhY2thZ2UnKS5mb3JtYXQobmFtZSwgcGFyZW50KQorICAgICAgICAgICAgbXNnID0gKF9FUlJfTVNHICsgJzsgeyFyfSBpcyBub3QgYSBwYWNrYWdlJykuZm9ybWF0KG5hbWUsIHBhcmVudCkKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1uYW1lKQotICAgIGxvYWRlciA9IF9maW5kX21vZHVsZShuYW1lLCBwYXRoKQotICAgIGlmIGxvYWRlciBpcyBOb25lOgotICAgICAgICBleGMgPSBJbXBvcnRFcnJvcihfRVJSX01TRy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKLSAgICAgICAgIyBUT0RPKGJyZXR0KTogc3dpdGNoIHRvIGEgcHJvcGVyIE1vZHVsZU5vdEZvdW5kIGV4Y2VwdGlvbiBpbiBQeXRob24KLSAgICAgICAgIyAzLjQuCi0gICAgICAgIGV4Yy5fbm90X2ZvdW5kID0gVHJ1ZQotICAgICAgICByYWlzZSBleGMKLSAgICBlbGlmIG5hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAjIFRoZSBwYXJlbnQgaW1wb3J0IG1heSBoYXZlIGFscmVhZHkgaW1wb3J0ZWQgdGhpcyBtb2R1bGUuCi0gICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdpbXBvcnQgeyFyfSAjIHshcn0nLCBuYW1lLCBsb2FkZXIpCi0gICAgIyBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eTsgYmUgbmljZXIgdG8gc2tpcCB0aGUgZGljdCBsb29rdXAuCi0gICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBzcGVjID0gX2ZpbmRfc3BlYyhuYW1lLCBwYXRoKQorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoX0VSUl9NU0cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCisgICAgZWxzZToKKyAgICAgICAgbW9kdWxlID0gX1NwZWNNZXRob2RzKHNwZWMpLl9sb2FkX3VubG9ja2VkKCkKICAgICBpZiBwYXJlbnQ6CiAgICAgICAgICMgU2V0IHRoZSBtb2R1bGUgYXMgYW4gYXR0cmlidXRlIG9uIGl0cyBwYXJlbnQuCiAgICAgICAgIHBhcmVudF9tb2R1bGUgPSBzeXMubW9kdWxlc1twYXJlbnRdCiAgICAgICAgIHNldGF0dHIocGFyZW50X21vZHVsZSwgbmFtZS5ycGFydGl0aW9uKCcuJylbMl0sIG1vZHVsZSkKLSAgICAjIFNldCBfX3BhY2thZ2VfXyBpZiB0aGUgbG9hZGVyIGRpZCBub3QuCi0gICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX25hbWVfXwotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAjIFNldCBsb2FkZXIgaWYgbmVlZCBiZS4KLSAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKICAgICByZXR1cm4gbW9kdWxlCiAKIAogZGVmIF9maW5kX2FuZF9sb2FkKG5hbWUsIGltcG9ydF8pOgogICAgICIiIkZpbmQgYW5kIGxvYWQgdGhlIG1vZHVsZSwgYW5kIHJlbGVhc2UgdGhlIGltcG9ydCBsb2NrLiIiIgotICAgIHRyeToKLSAgICAgICAgbG9jayA9IF9nZXRfbW9kdWxlX2xvY2sobmFtZSkKLSAgICBmaW5hbGx5OgotICAgICAgICBfaW1wLnJlbGVhc2VfbG9jaygpCi0gICAgbG9jay5hY3F1aXJlKCkKLSAgICB0cnk6CisgICAgd2l0aCBfTW9kdWxlTG9ja01hbmFnZXIobmFtZSk6CiAgICAgICAgIHJldHVybiBfZmluZF9hbmRfbG9hZF91bmxvY2tlZChuYW1lLCBpbXBvcnRfKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGxvY2sucmVsZWFzZSgpCiAKIAogZGVmIF9nY2RfaW1wb3J0KG5hbWUsIHBhY2thZ2U9Tm9uZSwgbGV2ZWw9MCk6CkBAIC0xNTg1LDggKzIyMzEsOCBAQAogICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCiAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CiAgICAgICAgIF9pbXAucmVsZWFzZV9sb2NrKCkKLSAgICAgICAgbWVzc2FnZSA9ICgiaW1wb3J0IG9mIHt9IGhhbHRlZDsgIgotICAgICAgICAgICAgICAgICAgICAiTm9uZSBpbiBzeXMubW9kdWxlcyIuZm9ybWF0KG5hbWUpKQorICAgICAgICBtZXNzYWdlID0gKCdpbXBvcnQgb2Yge30gaGFsdGVkOyAnCisgICAgICAgICAgICAgICAgICAgJ05vbmUgaW4gc3lzLm1vZHVsZXMnLmZvcm1hdChuYW1lKSkKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgbmFtZT1uYW1lKQogICAgIF9sb2NrX3VubG9ja19tb2R1bGUobmFtZSkKICAgICByZXR1cm4gbW9kdWxlCkBAIC0xNjE2LDkgKzIyNjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAjIEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGRpY3RhdGVzIHdlIGlnbm9yZSBmYWlsZWQKICAgICAgICAgICAgICAgICAgICAgIyBpbXBvcnRzIHRyaWdnZXJlZCBieSBmcm9tbGlzdCBmb3IgbW9kdWxlcyB0aGF0IGRvbid0CiAgICAgICAgICAgICAgICAgICAgICMgZXhpc3QuCi0gICAgICAgICAgICAgICAgICAgICMgVE9ETyhicmV0dCk6IEluIFB5dGhvbiAzLjQsIGhhdmUgaW1wb3J0IHJhaXNlCi0gICAgICAgICAgICAgICAgICAgICMgICBNb2R1bGVOb3RGb3VuZCBhbmQgY2F0Y2ggdGhhdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cihleGMsICdfbm90X2ZvdW5kJywgRmFsc2UpOgorICAgICAgICAgICAgICAgICAgICBpZiBzdHIoZXhjKS5zdGFydHN3aXRoKF9FUlJfTVNHX1BSRUZJWCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBleGMubmFtZSA9PSBmcm9tX25hbWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTE2ODYsNiArMjMzMCwxMyBAQAogICAgICAgICByZXR1cm4gX2hhbmRsZV9mcm9tbGlzdChtb2R1bGUsIGZyb21saXN0LCBfZ2NkX2ltcG9ydCkKIAogCitkZWYgX2J1aWx0aW5fZnJvbV9uYW1lKG5hbWUpOgorICAgIHNwZWMgPSBCdWlsdGluSW1wb3J0ZXIuZmluZF9zcGVjKG5hbWUpCisgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbm8gYnVpbHQtaW4gbW9kdWxlIG5hbWVkICcgKyBuYW1lKQorICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKKyAgICByZXR1cm4gbWV0aG9kcy5fbG9hZF91bmxvY2tlZCgpCisKIAogZGVmIF9zZXR1cChzeXNfbW9kdWxlLCBfaW1wX21vZHVsZSk6CiAgICAgIiIiU2V0dXAgaW1wb3J0bGliIGJ5IGltcG9ydGluZyBuZWVkZWQgYnVpbHQtaW4gbW9kdWxlcyBhbmQgaW5qZWN0aW5nIHRoZW0KQEAgLTE3MDQsMjQgKzIzNTUsMzEgQEAKICAgICBlbHNlOgogICAgICAgICBCWVRFQ09ERV9TVUZGSVhFUyA9IERFQlVHX0JZVEVDT0RFX1NVRkZJWEVTCiAKKyAgICAjIFNldCB1cCB0aGUgc3BlYyBmb3IgZXhpc3RpbmcgYnVpbHRpbi9mcm96ZW4gbW9kdWxlcy4KICAgICBtb2R1bGVfdHlwZSA9IHR5cGUoc3lzKQogICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIG1vZHVsZV90eXBlKToKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKToKLSAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBCdWlsdGluSW1wb3J0ZXIKLSAgICAgICAgICAgICAgICBlbGlmIF9pbXAuaXNfZnJvemVuKG5hbWUpOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IEZyb3plbkltcG9ydGVyCisgICAgICAgICAgICBpZiBuYW1lIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBCdWlsdGluSW1wb3J0ZXIKKyAgICAgICAgICAgIGVsaWYgX2ltcC5pc19mcm96ZW4obmFtZSk6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gRnJvemVuSW1wb3J0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNwZWMgPSBfc3BlY19mcm9tX21vZHVsZShtb2R1bGUsIGxvYWRlcikKKyAgICAgICAgICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKKyAgICAgICAgICAgIG1ldGhvZHMuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQogCisgICAgIyBEaXJlY3RseSBsb2FkIGJ1aWx0LWluIG1vZHVsZXMgbmVlZGVkIGR1cmluZyBib290c3RyYXAuCiAgICAgc2VsZl9tb2R1bGUgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KICAgICBmb3IgYnVpbHRpbl9uYW1lIGluICgnX2lvJywgJ193YXJuaW5ncycsICdidWlsdGlucycsICdtYXJzaGFsJyk6CiAgICAgICAgIGlmIGJ1aWx0aW5fbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBidWlsdGluX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZShidWlsdGluX25hbWUpCisgICAgICAgICAgICBidWlsdGluX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZShidWlsdGluX25hbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBidWlsdGluX21vZHVsZSA9IHN5cy5tb2R1bGVzW2J1aWx0aW5fbmFtZV0KICAgICAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgYnVpbHRpbl9uYW1lLCBidWlsdGluX21vZHVsZSkKIAotICAgIG9zX2RldGFpbHMgPSAoJ3Bvc2l4JywgWycvJ10pLCAoJ250JywgWydcXCcsICcvJ10pLCAoJ29zMicsIFsnXFwnLCAnLyddKQorICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgb3MgbW9kdWxlIChuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcCkuCisgICAgb3NfZGV0YWlscyA9ICgncG9zaXgnLCBbJy8nXSksICgnbnQnLCBbJ1xcJywgJy8nXSkKICAgICBmb3IgYnVpbHRpbl9vcywgcGF0aF9zZXBhcmF0b3JzIGluIG9zX2RldGFpbHM6CiAgICAgICAgICMgQXNzdW1wdGlvbiBtYWRlIGluIF9wYXRoX2pvaW4oKQogICAgICAgICBhc3NlcnQgYWxsKGxlbihzZXApID09IDEgZm9yIHNlcCBpbiBwYXRoX3NlcGFyYXRvcnMpCkBAIC0xNzMxLDMyICsyMzg5LDMzIEBACiAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZShidWlsdGluX29zKQotICAgICAgICAgICAgICAgICMgVE9ETzogcmlwIG91dCBvczIgY29kZSBhZnRlciAzLjMgaXMgcmVsZWFzZWQgYXMgcGVyIFBFUCAxMQotICAgICAgICAgICAgICAgIGlmIGJ1aWx0aW5fb3MgPT0gJ29zMicgYW5kICdFTVggR0NDJyBpbiBzeXMudmVyc2lvbjoKLSAgICAgICAgICAgICAgICAgICAgcGF0aF9zZXAgPSBwYXRoX3NlcGFyYXRvcnNbMV0KKyAgICAgICAgICAgICAgICBvc19tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoYnVpbHRpbl9vcykKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ2ltcG9ydGxpYiByZXF1aXJlcyBwb3NpeCBvciBudCcpCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ19vcycsIG9zX21vZHVsZSkKKyAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAncGF0aF9zZXAnLCBwYXRoX3NlcCkKKyAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAncGF0aF9zZXBhcmF0b3JzJywgJycuam9pbihwYXRoX3NlcGFyYXRvcnMpKQogCisgICAgIyBEaXJlY3RseSBsb2FkIHRoZSBfdGhyZWFkIG1vZHVsZSAobmVlZGVkIGR1cmluZyBib290c3RyYXApLgogICAgIHRyeToKLSAgICAgICAgdGhyZWFkX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX3RocmVhZCcpCisgICAgICAgIHRocmVhZF9tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoJ190aHJlYWQnKQogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgIyBQeXRob24gd2FzIGJ1aWx0IHdpdGhvdXQgdGhyZWFkcwogICAgICAgICB0aHJlYWRfbW9kdWxlID0gTm9uZQotICAgIHdlYWtyZWZfbW9kdWxlID0gQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfd2Vha3JlZicpCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ190aHJlYWQnLCB0aHJlYWRfbW9kdWxlKQogCisgICAgIyBEaXJlY3RseSBsb2FkIHRoZSBfd2Vha3JlZiBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KKyAgICB3ZWFrcmVmX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZSgnX3dlYWtyZWYnKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfd2Vha3JlZicsIHdlYWtyZWZfbW9kdWxlKQorCisgICAgIyBEaXJlY3RseSBsb2FkIHRoZSB3aW5yZWcgbW9kdWxlIChuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcCkuCiAgICAgaWYgYnVpbHRpbl9vcyA9PSAnbnQnOgotICAgICAgICB3aW5yZWdfbW9kdWxlID0gQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKCd3aW5yZWcnKQorICAgICAgICB3aW5yZWdfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKCd3aW5yZWcnKQogICAgICAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3dpbnJlZycsIHdpbnJlZ19tb2R1bGUpCiAKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX29zJywgb3NfbW9kdWxlKQotICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfdGhyZWFkJywgdGhyZWFkX21vZHVsZSkKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3dlYWtyZWYnLCB3ZWFrcmVmX21vZHVsZSkKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAncGF0aF9zZXAnLCBwYXRoX3NlcCkKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAncGF0aF9zZXBhcmF0b3JzJywgc2V0KHBhdGhfc2VwYXJhdG9ycykpCiAgICAgIyBDb25zdGFudHMKICAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3JlbGF4X2Nhc2UnLCBfbWFrZV9yZWxheF9jYXNlKCkpCiAgICAgRVhURU5TSU9OX1NVRkZJWEVTLmV4dGVuZChfaW1wLmV4dGVuc2lvbl9zdWZmaXhlcygpKQpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi9hYmMucHkgYi9MaWIvaW1wb3J0bGliL2FiYy5weQppbmRleCAzODc1NjdhLi41NThhYmQzIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL2FiYy5weQorKysgYi9MaWIvaW1wb3J0bGliL2FiYy5weQpAQCAtOCwxMSArOCw2IEBACiAgICAgICAgIHJhaXNlCiAgICAgX2Zyb3plbl9pbXBvcnRsaWIgPSBOb25lCiBpbXBvcnQgYWJjCi1pbXBvcnQgaW1wCi1pbXBvcnQgbWFyc2hhbAotaW1wb3J0IHN5cwotaW1wb3J0IHRva2VuaXplCi1pbXBvcnQgd2FybmluZ3MKIAogCiBkZWYgX3JlZ2lzdGVyKGFic3RyYWN0X2NscywgKmNsYXNzZXMpOgpAQCAtMzcsMjggKzMyLDM3IEBACiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgogICAgICAgICAiIiJBbiBhYnN0cmFjdCBtZXRob2QgdGhhdCBzaG91bGQgZmluZCBhIG1vZHVsZS4KICAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyIGFuZCB0aGUgb3B0aW9uYWwgcGF0aCBpcyBhIHN0ciBvciBOb25lLgotICAgICAgICBSZXR1cm5zIGEgTG9hZGVyIG9iamVjdC4KKyAgICAgICAgUmV0dXJucyBhIExvYWRlciBvYmplY3Qgb3IgTm9uZS4KICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogCiBjbGFzcyBNZXRhUGF0aEZpbmRlcihGaW5kZXIpOgogCiAgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgaW1wb3J0IGZpbmRlcnMgb24gc3lzLm1ldGFfcGF0aC4iIiIKIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAjIFdlIGRvbid0IGRlZmluZSBmaW5kX3NwZWMoKSBoZXJlIHNpbmNlIHRoYXQgd291bGQgYnJlYWsKKyAgICAjIGhhc2F0dHIgY2hlY2tzIHdlIGRvIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKwogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aCk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCwgd2hlbiBpbXBsZW1lbnRlZCwgc2hvdWxkIGZpbmQgYSBtb2R1bGUuCi0gICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ciBhbmQgdGhlIHBhdGggaXMgYSBzdHIgb3IgTm9uZS4KLSAgICAgICAgUmV0dXJucyBhIExvYWRlciBvYmplY3QuCisgICAgICAgICIiIlJldHVybiBhIGxvYWRlciBmb3IgdGhlIG1vZHVsZS4KKworICAgICAgICBJZiBubyBtb2R1bGUgaXMgZm91bmQsIHJldHVybiBOb25lLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyIGFuZAorICAgICAgICB0aGUgcGF0aCBpcyBhIGxpc3Qgb2Ygc3RyaW5ncyBvciBOb25lLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgZmluZGVyLmZpbmRfc3BlYygpLiBJZiBmaW5kX3NwZWMoKQorICAgICAgICBleGlzdHMgdGhlbiBiYWNrd2FyZHMtY29tcGF0aWJsZSBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkIGZvciB0aGlzCisgICAgICAgIG1ldGhvZC4KKwogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnZmluZF9zcGVjJyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBmb3VuZCA9IHNlbGYuZmluZF9zcGVjKGZ1bGxuYW1lLCBwYXRoKQorICAgICAgICByZXR1cm4gZm91bmQubG9hZGVyIGlmIGZvdW5kIGlzIG5vdCBOb25lIGVsc2UgTm9uZQogCiAgICAgZGVmIGludmFsaWRhdGVfY2FjaGVzKHNlbGYpOgogICAgICAgICAiIiJBbiBvcHRpb25hbCBtZXRob2QgZm9yIGNsZWFyaW5nIHRoZSBmaW5kZXIncyBjYWNoZSwgaWYgYW55LgogICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKIF9yZWdpc3RlcihNZXRhUGF0aEZpbmRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAogICAgICAgICAgIG1hY2hpbmVyeS5QYXRoRmluZGVyLCBtYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyKQpAQCAtNjgsMTUgKzcyLDM1IEBACiAKICAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBwYXRoIGVudHJ5IGZpbmRlcnMgdXNlZCBieSBQYXRoRmluZGVyLiIiIgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICMgV2UgZG9uJ3QgZGVmaW5lIGZpbmRfc3BlYygpIGhlcmUgc2luY2UgdGhhdCB3b3VsZCBicmVhaworICAgICMgaGFzYXR0ciBjaGVja3Mgd2UgZG8gdG8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCiAgICAgZGVmIGZpbmRfbG9hZGVyKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoLCB3aGVuIGltcGxlbWVudGVkLCByZXR1cm5zIGEgbW9kdWxlIGxvYWRlci4KLSAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIDItdHVwbGUgb2YgKExvYWRlciwgcG9ydGlvbikgd2hlcmUKLSAgICAgICAgcG9ydGlvbiBpcyBhIHNlcXVlbmNlIG9mIGZpbGUgc3lzdGVtIGxvY2F0aW9ucyBjb250cmlidXRpbmcgdG8gcGFydCBvZgotICAgICAgICBhIG5hbWVzcGFjZSBwYWNrYWdlLiAgVGhlIHNlcXVlbmNlIG1heSBiZSBlbXB0eSBhbmQgdGhlIGxvYWRlciBtYXkgYmUKLSAgICAgICAgTm9uZS4KKyAgICAgICAgIiIiUmV0dXJuIChsb2FkZXIsIG5hbWVzcGFjZSBwb3J0aW9uKSBmb3IgdGhlIHBhdGggZW50cnkuCisKKyAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgVGhlIG5hbWVzcGFjZSBwb3J0aW9uIGlzIGEgc2VxdWVuY2Ugb2YKKyAgICAgICAgcGF0aCBlbnRyaWVzIGNvbnRyaWJ1dGluZyB0byBwYXJ0IG9mIGEgbmFtZXNwYWNlIHBhY2thZ2UuIFRoZQorICAgICAgICBzZXF1ZW5jZSBtYXkgYmUgZW1wdHkuICBJZiBsb2FkZXIgaXMgbm90IE5vbmUsIHRoZSBwb3J0aW9uIHdpbGwKKyAgICAgICAgYmUgaWdub3JlZC4KKworICAgICAgICBUaGUgcG9ydGlvbiB3aWxsIGJlIGRpc2NhcmRlZCBpZiBhbm90aGVyIHBhdGggZW50cnkgZmluZGVyCisgICAgICAgIGxvY2F0ZXMgdGhlIG1vZHVsZSBhcyBhIG5vcm1hbCBtb2R1bGUgb3IgcGFja2FnZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGZpbmRlci5maW5kX3NwZWMoKS4gSWYgZmluZF9zcGVjKCkKKyAgICAgICAgaXMgcHJvdmlkZWQgdGhhbiBiYWNrd2FyZHMtY29tcGF0aWJsZSBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkLgorCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdmaW5kX3NwZWMnKToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBbXQorICAgICAgICBmb3VuZCA9IHNlbGYuZmluZF9zcGVjKGZ1bGxuYW1lKQorICAgICAgICBpZiBmb3VuZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCBmb3VuZC5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9uczoKKyAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IFtdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBvcnRpb25zID0gZm91bmQuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICAgICAgICAgIHJldHVybiBmb3VuZC5sb2FkZXIsIHBvcnRpb25zCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgW10KIAogICAgIGZpbmRfbW9kdWxlID0gX2Jvb3RzdHJhcC5fZmluZF9tb2R1bGVfc2hpbQogCkBAIC04NCw3ICsxMDgsNiBAQAogICAgICAgICAiIiJBbiBvcHRpb25hbCBtZXRob2QgZm9yIGNsZWFyaW5nIHRoZSBmaW5kZXIncyBjYWNoZSwgaWYgYW55LgogICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IFBhdGhGaW5kZXIuaW52YWxpZGF0ZV9jYWNoZXMoKS4KICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogCiBfcmVnaXN0ZXIoUGF0aEVudHJ5RmluZGVyLCBtYWNoaW5lcnkuRmlsZUZpbmRlcikKIApAQCAtOTMsMTYgKzExNiw0OSBAQAogCiAgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgaW1wb3J0IGxvYWRlcnMuIiIiCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIGxvYWQgYSBtb2R1bGUuCi0gICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgorICAgICAgICAiIiJSZXR1cm4gYSBtb2R1bGUgdG8gaW5pdGlhbGl6ZSBhbmQgaW50byB3aGljaCB0byBsb2FkLgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IgaWYgYW55dGhpbmcgcHJldmVudHMgaXQKKyAgICAgICAgZnJvbSBjcmVhdGluZyBhIG5ldyBtb2R1bGUuICBJdCBtYXkgcmV0dXJuIE5vbmUgdG8gaW5kaWNhdGUKKyAgICAgICAgdGhhdCB0aGUgc3BlYyBzaG91bGQgY3JlYXRlIHRoZSBuZXcgbW9kdWxlLgorCisgICAgICAgIGNyZWF0ZV9tb2R1bGUoKSBpcyBvcHRpb25hbC4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBCeSBkZWZhdWx0LCBkZWZlciB0byBfU3BlY01ldGhvZHMuY3JlYXRlKCkgZm9yIHRoZSBuZXcgbW9kdWxlLgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBXZSBkb24ndCBkZWZpbmUgZXhlY19tb2R1bGUoKSBoZXJlIHNpbmNlIHRoYXQgd291bGQgYnJlYWsKKyAgICAjIGhhc2F0dHIgY2hlY2tzIHdlIGRvIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgbG9hZGVkIG1vZHVsZS4KKworICAgICAgICBUaGUgbW9kdWxlIG11c3QgYmUgYWRkZWQgdG8gc3lzLm1vZHVsZXMgYW5kIGhhdmUgaW1wb3J0LXJlbGF0ZWQKKyAgICAgICAgYXR0cmlidXRlcyBzZXQgcHJvcGVybHkuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuCisKKyAgICAgICAgSW1wb3J0RXJyb3IgaXMgcmFpc2VkIG9uIGZhaWx1cmUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBsb2FkZXIuZXhlY19tb2R1bGUoKS4gSWYKKyAgICAgICAgZXhlY19tb2R1bGUoKSBleGlzdHMgdGhlbiBpdCBpcyB1c2VkIHRvIHByb3ZpZGUgYSBiYWNrd2FyZHMtY29tcGF0aWJsZQorICAgICAgICBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIG1ldGhvZC4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2V4ZWNfbW9kdWxlJyk6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICByZXR1cm4gX2Jvb3RzdHJhcC5fbG9hZF9tb2R1bGVfc2hpbShzZWxmLCBmdWxsbmFtZSkKKwogICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZQotICAgICAgICBnaXZlbiBtb2R1bGUncyByZXByLiIiIgorICAgICAgICAiIiJSZXR1cm4gYSBtb2R1bGUncyByZXByLgorCisgICAgICAgIFVzZWQgYnkgdGhlIG1vZHVsZSB0eXBlIHdoZW4gdGhlIG1ldGhvZCBkb2VzIG5vdCByYWlzZQorICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgVGhlIGV4Y2VwdGlvbiB3aWxsIGNhdXNlIE1vZHVsZVR5cGUuX19yZXByX18gdG8gaWdub3JlIHRoaXMgbWV0aG9kLgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIApAQCAtMTE5LDcgKzE3NSw3IEBACiAgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHRoZSBieXRlcyBmb3IKICAgICAgICAgdGhlIHNwZWNpZmllZCBwYXRoLiAgVGhlIHBhdGggbXVzdCBiZSBhIHN0ci4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICByYWlzZSBJT0Vycm9yCiAKIAogY2xhc3MgSW5zcGVjdExvYWRlcihMb2FkZXIpOgpAQCAtMTMxLDI2ICsxODcsNDcgQEAKIAogICAgICIiIgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIHJldHVybiB3aGV0aGVyIHRoZQotICAgICAgICBtb2R1bGUgaXMgYSBwYWNrYWdlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIGJvb2wuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgIiIiT3B0aW9uYWwgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIHJldHVybiB3aGV0aGVyIHRoZQorICAgICAgICBtb2R1bGUgaXMgYSBwYWNrYWdlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIGJvb2wuCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgICAgIFJhaXNlcyBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHRoZSBjb2RlIG9iamVjdAotICAgICAgICBmb3IgdGhlIG1vZHVsZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSB0eXBlcy5Db2RlVHlwZS4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAiIiJNZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgY29kZSBvYmplY3QgZm9yIHRoZSBtb2R1bGUuCisKKyAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIHR5cGVzLkNvZGVUeXBlIGlmIHBvc3NpYmxlLCBlbHNlCisgICAgICAgIHJldHVybnMgTm9uZSBpZiBhIGNvZGUgb2JqZWN0IGRvZXMgbm90IG1ha2Ugc2Vuc2UKKyAgICAgICAgKGUuZy4gYnVpbHQtaW4gbW9kdWxlKS4gUmFpc2VzIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlCisgICAgICAgIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgc291cmNlID0gc2VsZi5nZXRfc291cmNlKGZ1bGxuYW1lKQorICAgICAgICBpZiBzb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZV90b19jb2RlKHNvdXJjZSkKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCBzaG91bGQgcmV0dXJuIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlCi0gICAgICAgIG1vZHVsZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSBzdHIuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgbW9kdWxlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIHN0ci4KIAotX3JlZ2lzdGVyKEluc3BlY3RMb2FkZXIsIG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKLSAgICAgICAgICAgIG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKQorICAgICAgICBSYWlzZXMgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorCisgICAgZGVmIHNvdXJjZV90b19jb2RlKHNlbGYsIGRhdGEsIHBhdGg9JzxzdHJpbmc+Jyk6CisgICAgICAgICIiIkNvbXBpbGUgJ2RhdGEnIGludG8gYSBjb2RlIG9iamVjdC4KKworICAgICAgICBUaGUgJ2RhdGEnIGFyZ3VtZW50IGNhbiBiZSBhbnl0aGluZyB0aGF0IGNvbXBpbGUoKSBjYW4gaGFuZGxlLiBUaGUncGF0aCcKKyAgICAgICAgYXJndW1lbnQgc2hvdWxkIGJlIHdoZXJlIHRoZSBkYXRhIHdhcyByZXRyaWV2ZWQgKHdoZW4gYXBwbGljYWJsZSkuIiIiCisgICAgICAgIHJldHVybiBjb21waWxlKGRhdGEsIHBhdGgsICdleGVjJywgZG9udF9pbmhlcml0PVRydWUpCisKKyAgICBleGVjX21vZHVsZSA9IF9ib290c3RyYXAuX0xvYWRlckJhc2ljcy5leGVjX21vZHVsZQorICAgIGxvYWRfbW9kdWxlID0gX2Jvb3RzdHJhcC5fTG9hZGVyQmFzaWNzLmxvYWRfbW9kdWxlCisKK19yZWdpc3RlcihJbnNwZWN0TG9hZGVyLCBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIpCiAKIAogY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluc3BlY3RMb2FkZXIpOgpAQCAtMTY1LDggKzI0MiwyOSBAQAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHNob3VsZCByZXR1cm4gdGhlIHZhbHVlIHRoYXQgX19maWxlX18gaXMgdG8gYmUKLSAgICAgICAgc2V0IHRvLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHNldCB0by4KKworICAgICAgICBSYWlzZXMgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorCisgICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiTWV0aG9kIHRvIHJldHVybiB0aGUgY29kZSBvYmplY3QgZm9yIGZ1bGxuYW1lLgorCisgICAgICAgIFNob3VsZCByZXR1cm4gTm9uZSBpZiBub3QgYXBwbGljYWJsZSAoZS5nLiBidWlsdC1pbiBtb2R1bGUpLgorICAgICAgICBSYWlzZSBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNvdXJjZSA9IHNlbGYuZ2V0X3NvdXJjZShmdWxsbmFtZSkKKyAgICAgICAgaWYgc291cmNlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRoID0gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZV90b19jb2RlKHNvdXJjZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZV90b19jb2RlKHNvdXJjZSwgcGF0aCkKKworX3JlZ2lzdGVyKEV4ZWN1dGlvbkxvYWRlciwgbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIpCiAKIAogY2xhc3MgRmlsZUxvYWRlcihfYm9vdHN0cmFwLkZpbGVMb2FkZXIsIFJlc291cmNlTG9hZGVyLCBFeGVjdXRpb25Mb2FkZXIpOgpAQCAtMTk4LDcgKzI5Niw3IEBACiAgICAgZGVmIHBhdGhfbXRpbWUoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgKGludCkgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZSBwYXRoIChzdHIpLiIiIgogICAgICAgICBpZiBzZWxmLnBhdGhfc3RhdHMuX19mdW5jX18gaXMgU291cmNlTG9hZGVyLnBhdGhfc3RhdHM6Ci0gICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICAgICByYWlzZSBJT0Vycm9yCiAgICAgICAgIHJldHVybiBpbnQoc2VsZi5wYXRoX3N0YXRzKHBhdGgpWydtdGltZSddKQogCiAgICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6CkBAIC0yMDksNyArMzA3LDcgQEAKICAgICAgICAgLSAnc2l6ZScgKG9wdGlvbmFsKSBpcyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgc291cmNlIGNvZGUuCiAgICAgICAgICIiIgogICAgICAgICBpZiBzZWxmLnBhdGhfbXRpbWUuX19mdW5jX18gaXMgU291cmNlTG9hZGVyLnBhdGhfbXRpbWU6Ci0gICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICAgICByYWlzZSBJT0Vycm9yCiAgICAgICAgIHJldHVybiB7J210aW1lJzogc2VsZi5wYXRoX210aW1lKHBhdGgpfQogCiAgICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEpOgpAQCAtMjIwLDE4NSArMzE4LDYgQEAKICAgICAgICAgQW55IG5lZWRlZCBpbnRlcm1lZGlhcnkgZGlyZWN0b3JpZXMgYXJlIHRvIGJlIGNyZWF0ZWQuIElmIGZvciBzb21lCiAgICAgICAgIHJlYXNvbiB0aGUgZmlsZSBjYW5ub3QgYmUgd3JpdHRlbiBiZWNhdXNlIG9mIHBlcm1pc3Npb25zLCBmYWlsCiAgICAgICAgIHNpbGVudGx5LgotCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIF9yZWdpc3RlcihTb3VyY2VMb2FkZXIsIG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKQotCi1jbGFzcyBQeUxvYWRlcihTb3VyY2VMb2FkZXIpOgotCi0gICAgIiIiSW1wbGVtZW50IHRoZSBkZXByZWNhdGVkIFB5TG9hZGVyIEFCQyBpbiB0ZXJtcyBvZiBTb3VyY2VMb2FkZXIuCi0KLSAgICBUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQhIEl0IGlzIHNsYXRlZCBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy40LgotICAgIElmIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMy4xIGlzIG5vdCBuZWVkZWQgdGhlbiBpbXBsZW1lbnQgdGhlCi0gICAgU291cmNlTG9hZGVyIEFCQyBpbnN0ZWFkIG9mIHRoaXMgY2xhc3MuIElmIFB5dGhvbiAzLjEgY29tcGF0aWJpbGl0eSBpcwotICAgIG5lZWRlZCwgdGhlbiB1c2UgdGhlIGZvbGxvd2luZyBpZGlvbSB0byBoYXZlIGEgc2luZ2xlIGNsYXNzIHRoYXQgaXMKLSAgICBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMuMSBvbndhcmRzOjoKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcm9tIGltcG9ydGxpYi5hYmMgaW1wb3J0IFNvdXJjZUxvYWRlcgotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBmcm9tIGltcG9ydGxpYi5hYmMgaW1wb3J0IFB5TG9hZGVyIGFzIFNvdXJjZUxvYWRlcgotCi0KLSAgICAgICAgY2xhc3MgQ3VzdG9tTG9hZGVyKFNvdXJjZUxvYWRlcik6Ci0gICAgICAgICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICAjIEltcGxlbWVudCAuLi4KLQotICAgICAgICAgICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICAnJydJbXBsZW1lbnQgc291cmNlX3BhdGggaW4gdGVybXMgb2YgZ2V0X2ZpbGVuYW1lLicnJwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdID09ICdfX2luaXRfXycKLQotICAgICIiIgotCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZC4gIEFjY2VwdHMgYSBzdHIgbW9kdWxlIG5hbWUgYW5kIHJldHVybnMgdGhlIHBhdGggdG8KLSAgICAgICAgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgbW9kdWxlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiSW1wbGVtZW50IGdldF9maWxlbmFtZSBpbiB0ZXJtcyBvZiBzb3VyY2VfcGF0aC4KLQotICAgICAgICBBcyBnZXRfZmlsZW5hbWUgc2hvdWxkIG9ubHkgcmV0dXJuIGEgc291cmNlIGZpbGUgcGF0aCB0aGVyZSBpcyBubwotICAgICAgICBjaGFuY2Ugb2YgdGhlIHBhdGggbm90IGV4aXN0aW5nIGJ1dCBsb2FkaW5nIHN0aWxsIGJlaW5nIHBvc3NpYmxlLCBzbwotICAgICAgICBJbXBvcnRFcnJvciBzaG91bGQgcHJvcGFnYXRlIGluc3RlYWQgb2YgYmVpbmcgdHVybmVkIGludG8gcmV0dXJuaW5nCi0gICAgICAgIE5vbmUuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHdhcm5pbmdzLndhcm4oImltcG9ydGxpYi5hYmMuUHlMb2FkZXIgaXMgZGVwcmVjYXRlZCBhbmQgaXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGF0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNDsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgU291cmNlTG9hZGVyIGluc3RlYWQuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VlIHRoZSBpbXBvcnRsaWIgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gYmUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMuMSBvbndhcmRzLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgIHBhdGggPSBzZWxmLnNvdXJjZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBwYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihuYW1lPWZ1bGxuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLQotCi1jbGFzcyBQeVB5Y0xvYWRlcihQeUxvYWRlcik6Ci0KLSAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIHRvIGFzc2lzdCBpbiBsb2FkaW5nIHNvdXJjZSBhbmQgYnl0ZWNvZGUgYnkKLSAgICByZXF1aXJpbmcgb25seSBiYWNrLWVuZCBzdG9yYWdlIG1ldGhvZHMgdG8gYmUgaW1wbGVtZW50ZWQuCi0KLSAgICBUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQhIFJlbW92YWwgaXMgc2xhdGVkIGZvciBQeXRob24gMy40LiBJbXBsZW1lbnQKLSAgICB0aGUgU291cmNlTG9hZGVyIEFCQyBpbnN0ZWFkLiBJZiBQeXRob24gMy4xIGNvbXBhdGliaWxpdHkgaXMgbmVlZGVkLCBzZWUKLSAgICBQeUxvYWRlci4KLQotICAgIFRoZSBtZXRob2RzIGdldF9jb2RlLCBnZXRfc291cmNlLCBhbmQgbG9hZF9tb2R1bGUgYXJlIGltcGxlbWVudGVkIGZvciB0aGUKLSAgICB1c2VyLgotCi0gICAgIiIiCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBzb3VyY2Ugb3IgYnl0ZWNvZGUgZmlsZSBwYXRoLiIiIgotICAgICAgICBwYXRoID0gc2VsZi5zb3VyY2VfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBwYXRoCi0gICAgICAgIHBhdGggPSBzZWxmLmJ5dGVjb2RlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aAotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigibm8gc291cmNlIG9yIGJ5dGVjb2RlIHBhdGggYXZhaWxhYmxlIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInswIXJ9Ii5mb3JtYXQoZnVsbG5hbWUpLCBuYW1lPWZ1bGxuYW1lKQotCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiR2V0IGEgY29kZSBvYmplY3QgZnJvbSBzb3VyY2Ugb3IgYnl0ZWNvZGUuIiIiCi0gICAgICAgIHdhcm5pbmdzLndhcm4oImltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXIgaXMgZGVwcmVjYXRlZCBhbmQgc2xhdGVkIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92YWwgaW4gUHl0aG9uIDMuNDsgdXNlIFNvdXJjZUxvYWRlciBpbnN0ZWFkLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIklmIFB5dGhvbiAzLjEgY29tcGF0aWJpbGl0eSBpcyByZXF1aXJlZCwgc2VlIHRoZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhdGVzdCBkb2N1bWVudGF0aW9uIGZvciBQeUxvYWRlci4iLAotICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICBzb3VyY2VfdGltZXN0YW1wID0gc2VsZi5zb3VyY2VfbXRpbWUoZnVsbG5hbWUpCi0gICAgICAgICMgVHJ5IHRvIHVzZSBieXRlY29kZSBpZiBpdCBpcyBhdmFpbGFibGUuCi0gICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLmJ5dGVjb2RlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIGJ5dGVjb2RlX3BhdGg6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG1hZ2ljID0gZGF0YVs6NF0KLSAgICAgICAgICAgICAgICBpZiBsZW4obWFnaWMpIDwgNDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiYmFkIG1hZ2ljIG51bWJlciBpbiB7fSIuZm9ybWF0KGZ1bGxuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUsIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgICAgICByYXdfdGltZXN0YW1wID0gZGF0YVs0OjhdCi0gICAgICAgICAgICAgICAgaWYgbGVuKHJhd190aW1lc3RhbXApIDwgNDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoImJhZCB0aW1lc3RhbXAgaW4ge30iLmZvcm1hdChmdWxsbmFtZSkpCi0gICAgICAgICAgICAgICAgcHljX3RpbWVzdGFtcCA9IF9ib290c3RyYXAuX3JfbG9uZyhyYXdfdGltZXN0YW1wKQotICAgICAgICAgICAgICAgIHJhd19zb3VyY2Vfc2l6ZSA9IGRhdGFbODoxMl0KLSAgICAgICAgICAgICAgICBpZiBsZW4ocmF3X3NvdXJjZV9zaXplKSAhPSA0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiYmFkIGZpbGUgc2l6ZSBpbiB7fSIuZm9ybWF0KGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICAjIFNvdXJjZSBzaXplIGlzIHVudXNlZCBhcyB0aGUgQUJDIGRvZXMgbm90IHByb3ZpZGUgYSB3YXkgdG8KLSAgICAgICAgICAgICAgICAjIGdldCB0aGUgc2l6ZSBvZiB0aGUgc291cmNlIGFoZWFkIG9mIHJlYWRpbmcgaXQuCi0gICAgICAgICAgICAgICAgYnl0ZWNvZGUgPSBkYXRhWzEyOl0KLSAgICAgICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBtYWdpYyBudW1iZXIgaXMgdmFsaWQuCi0gICAgICAgICAgICAgICAgaWYgaW1wLmdldF9tYWdpYygpICE9IG1hZ2ljOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgbWFnaWMgbnVtYmVyIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIGJ5dGVjb2RlIGlzIG5vdCBzdGFsZSAob25seSBtYXR0ZXJzIHdoZW4KLSAgICAgICAgICAgICAgICAjIHRoZXJlIGlzIHNvdXJjZSB0byBmYWxsIGJhY2sgb24uCi0gICAgICAgICAgICAgICAgaWYgc291cmNlX3RpbWVzdGFtcDoKLSAgICAgICAgICAgICAgICAgICAgaWYgcHljX3RpbWVzdGFtcCA8IHNvdXJjZV90aW1lc3RhbXA6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiYnl0ZWNvZGUgaXMgc3RhbGUiLCBuYW1lPWZ1bGxuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgRU9GRXJyb3IpOgotICAgICAgICAgICAgICAgICMgSWYgc291cmNlIGlzIGF2YWlsYWJsZSBnaXZlIGl0IGEgc2hvdC4KLSAgICAgICAgICAgICAgICBpZiBzb3VyY2VfdGltZXN0YW1wIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBCeXRlY29kZSBzZWVtcyBmaW5lLCBzbyB0cnkgdG8gdXNlIGl0LgotICAgICAgICAgICAgICAgIHJldHVybiBtYXJzaGFsLmxvYWRzKGJ5dGVjb2RlKQotICAgICAgICBlbGlmIHNvdXJjZV90aW1lc3RhbXAgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJubyBzb3VyY2Ugb3IgYnl0ZWNvZGUgYXZhaWxhYmxlIHRvIGNyZWF0ZSBjb2RlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgZm9yIHswIXJ9Ii5mb3JtYXQoZnVsbG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkKLSAgICAgICAgIyBVc2UgdGhlIHNvdXJjZS4KLSAgICAgICAgc291cmNlX3BhdGggPSBzZWxmLnNvdXJjZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBzb3VyY2VfcGF0aCBpcyBOb25lOgotICAgICAgICAgICAgbWVzc2FnZSA9ICJhIHNvdXJjZSBwYXRoIG11c3QgZXhpc3QgdG8gbG9hZCB7MH0iLmZvcm1hdChmdWxsbmFtZSkKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsIG5hbWU9ZnVsbG5hbWUpCi0gICAgICAgIHNvdXJjZSA9IHNlbGYuZ2V0X2RhdGEoc291cmNlX3BhdGgpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gY29tcGlsZShzb3VyY2UsIHNvdXJjZV9wYXRoLCAnZXhlYycsIGRvbnRfaW5oZXJpdD1UcnVlKQotICAgICAgICAjIEdlbmVyYXRlIGJ5dGVjb2RlIGFuZCB3cml0ZSBpdCBvdXQuCi0gICAgICAgIGlmIG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKLSAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoaW1wLmdldF9tYWdpYygpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX2Jvb3RzdHJhcC5fd19sb25nKHNvdXJjZV90aW1lc3RhbXApKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX2Jvb3RzdHJhcC5fd19sb25nKGxlbihzb3VyY2UpICYgMHhGRkZGRkZGRikpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKLSAgICAgICAgICAgIHNlbGYud3JpdGVfYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEpCi0gICAgICAgIHJldHVybiBjb2RlX29iamVjdAotCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBzb3VyY2VfbXRpbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2QuIEFjY2VwdHMgYSBzdHIgZmlsZW5hbWUgYW5kIHJldHVybnMgYW4gaW50Ci0gICAgICAgIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUgc291cmNlIG9mIHRoZSBtb2R1bGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZC4gQWNjZXB0cyBhIHN0ciBmaWxlbmFtZSBhbmQgcmV0dXJucyB0aGUgc3RyIHBhdGhuYW1lCi0gICAgICAgIHRvIHRoZSBieXRlY29kZSBmb3IgdGhlIG1vZHVsZS4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBmdWxsbmFtZSwgYnl0ZWNvZGUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2QuICBBY2NlcHRzIGEgc3RyIGZpbGVuYW1lIGFuZCBieXRlcyBvYmplY3QKLSAgICAgICAgcmVwcmVzZW50aW5nIHRoZSBieXRlY29kZSBmb3IgdGhlIG1vZHVsZS4gIFJldHVybnMgYSBib29sZWFuCi0gICAgICAgIHJlcHJlc2VudGluZyB3aGV0aGVyIHRoZSBieXRlY29kZSB3YXMgd3JpdHRlbiBvciBub3QuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5IGIvTGliL2ltcG9ydGxpYi9tYWNoaW5lcnkucHkKaW5kZXggZmY4MjZlNC4uMmUxYjJkNyAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9tYWNoaW5lcnkucHkKKysrIGIvTGliL2ltcG9ydGxpYi9tYWNoaW5lcnkucHkKQEAgLTUsNiArNSw3IEBACiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCAoU09VUkNFX1NVRkZJWEVTLCBERUJVR19CWVRFQ09ERV9TVUZGSVhFUywKICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJTUlaRURfQllURUNPREVfU1VGRklYRVMsIEJZVEVDT0RFX1NVRkZJWEVTLAogICAgICAgICAgICAgICAgICAgICAgICAgIEVYVEVOU0lPTl9TVUZGSVhFUykKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IE1vZHVsZVNwZWMKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IEJ1aWx0aW5JbXBvcnRlcgogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgRnJvemVuSW1wb3J0ZXIKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IFdpbmRvd3NSZWdpc3RyeUZpbmRlcgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi91dGlsLnB5IGIvTGliL2ltcG9ydGxpYi91dGlsLnB5CmluZGV4IDEzMTY0MzcuLjZkNzNiMWQgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdXRpbC5weQorKysgYi9MaWIvaW1wb3J0bGliL3V0aWwucHkKQEAgLTEsOSArMSwxOCBAQAogIiIiVXRpbGl0eSBjb2RlIGZvciBjb25zdHJ1Y3RpbmcgaW1wb3J0ZXJzLCBldGMuIiIiCiAKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IG1vZHVsZV9mb3JfbG9hZGVyCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzZXRfbG9hZGVyCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzZXRfcGFja2FnZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgTUFHSUNfTlVNQkVSCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgZGVjb2RlX3NvdXJjZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc291cmNlX2Zyb21fY2FjaGUKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IHNwZWNfZnJvbV9sb2FkZXIKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBfcmVzb2x2ZV9uYW1lCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBfZmluZF9zcGVjCisKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncwogCiAKIGRlZiByZXNvbHZlX25hbWUobmFtZSwgcGFja2FnZSk6CkBAIC0xOSwzICsyOCwxNzUgQEAKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGxldmVsICs9IDEKICAgICByZXR1cm4gX3Jlc29sdmVfbmFtZShuYW1lW2xldmVsOl0sIHBhY2thZ2UsIGxldmVsKQorCisKK2RlZiBfZmluZF9zcGVjX2Zyb21fcGF0aChuYW1lLCBwYXRoPU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgc3BlYyBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUuCisKKyAgICBGaXJzdCwgc3lzLm1vZHVsZXMgaXMgY2hlY2tlZCB0byBzZWUgaWYgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeSBpbXBvcnRlZC4gSWYKKyAgICBzbywgdGhlbiBzeXMubW9kdWxlc1tuYW1lXS5fX3NwZWNfXyBpcyByZXR1cm5lZC4gSWYgdGhhdCBoYXBwZW5zIHRvIGJlCisgICAgc2V0IHRvIE5vbmUsIHRoZW4gVmFsdWVFcnJvciBpcyByYWlzZWQuIElmIHRoZSBtb2R1bGUgaXMgbm90IGluCisgICAgc3lzLm1vZHVsZXMsIHRoZW4gc3lzLm1ldGFfcGF0aCBpcyBzZWFyY2hlZCBmb3IgYSBzdWl0YWJsZSBzcGVjIHdpdGggdGhlCisgICAgdmFsdWUgb2YgJ3BhdGgnIGdpdmVuIHRvIHRoZSBmaW5kZXJzLiBOb25lIGlzIHJldHVybmVkIGlmIG5vIHNwZWMgY291bGQKKyAgICBiZSBmb3VuZC4KKworICAgIERvdHRlZCBuYW1lcyBkbyBub3QgaGF2ZSB0aGVpciBwYXJlbnQgcGFja2FnZXMgaW1wbGljaXRseSBpbXBvcnRlZC4gWW91IHdpbGwKKyAgICBtb3N0IGxpa2VseSBuZWVkIHRvIGV4cGxpY2l0bHkgaW1wb3J0IGFsbCBwYXJlbnQgcGFja2FnZXMgaW4gdGhlIHByb3BlcgorICAgIG9yZGVyIGZvciBhIHN1Ym1vZHVsZSB0byBnZXQgdGhlIGNvcnJlY3Qgc3BlYy4KKworICAgICIiIgorICAgIGlmIG5hbWUgbm90IGluIHN5cy5tb2R1bGVzOgorICAgICAgICByZXR1cm4gX2ZpbmRfc3BlYyhuYW1lLCBwYXRoKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX3NwZWNfXyBpcyBub3Qgc2V0Jy5mb3JtYXQobmFtZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgTm9uZScuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworCitkZWYgZmluZF9zcGVjKG5hbWUsIHBhY2thZ2U9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBzcGVjIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZS4KKworICAgIEZpcnN0LCBzeXMubW9kdWxlcyBpcyBjaGVja2VkIHRvIHNlZSBpZiB0aGUgbW9kdWxlIHdhcyBhbHJlYWR5IGltcG9ydGVkLiBJZgorICAgIHNvLCB0aGVuIHN5cy5tb2R1bGVzW25hbWVdLl9fc3BlY19fIGlzIHJldHVybmVkLiBJZiB0aGF0IGhhcHBlbnMgdG8gYmUKKyAgICBzZXQgdG8gTm9uZSwgdGhlbiBWYWx1ZUVycm9yIGlzIHJhaXNlZC4gSWYgdGhlIG1vZHVsZSBpcyBub3QgaW4KKyAgICBzeXMubW9kdWxlcywgdGhlbiBzeXMubWV0YV9wYXRoIGlzIHNlYXJjaGVkIGZvciBhIHN1aXRhYmxlIHNwZWMgd2l0aCB0aGUKKyAgICB2YWx1ZSBvZiAncGF0aCcgZ2l2ZW4gdG8gdGhlIGZpbmRlcnMuIE5vbmUgaXMgcmV0dXJuZWQgaWYgbm8gc3BlYyBjb3VsZAorICAgIGJlIGZvdW5kLgorCisgICAgSWYgdGhlIG5hbWUgaXMgZm9yIHN1Ym1vZHVsZSAoY29udGFpbnMgYSBkb3QpLCB0aGUgcGFyZW50IG1vZHVsZSBpcworICAgIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQuCisKKyAgICBUaGUgbmFtZSBhbmQgcGFja2FnZSBhcmd1bWVudHMgd29yayB0aGUgc2FtZSBhcyBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpLgorICAgIEluIG90aGVyIHdvcmRzLCByZWxhdGl2ZSBtb2R1bGUgbmFtZXMgKHdpdGggbGVhZGluZyBkb3RzKSB3b3JrLgorCisgICAgIiIiCisgICAgZnVsbG5hbWUgPSByZXNvbHZlX25hbWUobmFtZSwgcGFja2FnZSkgaWYgbmFtZS5zdGFydHN3aXRoKCcuJykgZWxzZSBuYW1lCisgICAgaWYgZnVsbG5hbWUgbm90IGluIHN5cy5tb2R1bGVzOgorICAgICAgICBwYXJlbnRfbmFtZSA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICBpZiBwYXJlbnRfbmFtZToKKyAgICAgICAgICAgICMgVXNlIGJ1aWx0aW5zLl9faW1wb3J0X18oKSBpbiBjYXNlIHNvbWVvbmUgcmVwbGFjZWQgaXQuCisgICAgICAgICAgICBwYXJlbnQgPSBfX2ltcG9ydF9fKHBhcmVudF9uYW1lLCBmcm9tbGlzdD1bJ19fcGF0aF9fJ10pCisgICAgICAgICAgICByZXR1cm4gX2ZpbmRfc3BlYyhmdWxsbmFtZSwgcGFyZW50Ll9fcGF0aF9fKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIF9maW5kX3NwZWMoZnVsbG5hbWUsIE5vbmUpCisgICAgZWxzZToKKyAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbZnVsbG5hbWVdCisgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX3NwZWNfXyBpcyBub3Qgc2V0Jy5mb3JtYXQobmFtZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgTm9uZScuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworCitAY29udGV4dG1hbmFnZXIKK2RlZiBfbW9kdWxlX3RvX2xvYWQobmFtZSk6CisgICAgaXNfcmVsb2FkID0gbmFtZSBpbiBzeXMubW9kdWxlcworCisgICAgbW9kdWxlID0gc3lzLm1vZHVsZXMuZ2V0KG5hbWUpCisgICAgaWYgbm90IGlzX3JlbG9hZDoKKyAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgb3BlbigpIGlzIGNhbGxlZCBhcyB0aGUgJ2lvJyBtb2R1bGUKKyAgICAgICAgIyBpbXBsaWNpdGx5IGltcG9ydHMgJ2xvY2FsZScgYW5kIHdvdWxkIG90aGVyd2lzZSB0cmlnZ2VyIGFuCisgICAgICAgICMgaW5maW5pdGUgbG9vcC4KKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKG5hbWUpCisgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHB1dHRpbmcgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcworICAgICAgICAjIChvdGhlcndpc2UgYW4gb3B0aW1pemF0aW9uIHNob3J0Y3V0IGluIGltcG9ydC5jIGJlY29tZXMgd3JvbmcpCisgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gVHJ1ZQorICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgIHRyeToKKyAgICAgICAgeWllbGQgbW9kdWxlCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgaWYgbm90IGlzX3JlbG9hZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBGYWxzZQorCisKK2RlZiBzZXRfcGFja2FnZShmeG4pOgorICAgICIiIlNldCBfX3BhY2thZ2VfXyBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLgorCisgICAgIiIiCisgICAgQGZ1bmN0b29scy53cmFwcyhmeG4pCisgICAgZGVmIHNldF9wYWNrYWdlX3dyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2FybmluZ3Mud2FybignVGhlIGltcG9ydCBzeXN0ZW0gbm93IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LicsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgIG1vZHVsZSA9IGZ4bigqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fbmFtZV9fCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgIHJldHVybiBzZXRfcGFja2FnZV93cmFwcGVyCisKKworZGVmIHNldF9sb2FkZXIoZnhuKToKKyAgICAiIiJTZXQgX19sb2FkZXJfXyBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLgorCisgICAgIiIiCisgICAgQGZ1bmN0b29scy53cmFwcyhmeG4pCisgICAgZGVmIHNldF9sb2FkZXJfd3JhcHBlcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCdUaGUgaW1wb3J0IHN5c3RlbSBub3cgdGFrZXMgY2FyZSBvZiB0aGlzIGF1dG9tYXRpY2FsbHkuJywKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgbW9kdWxlID0gZnhuKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgcmV0dXJuIHNldF9sb2FkZXJfd3JhcHBlcgorCisKK2RlZiBtb2R1bGVfZm9yX2xvYWRlcihmeG4pOgorICAgICIiIkRlY29yYXRvciB0byBoYW5kbGUgc2VsZWN0aW5nIHRoZSBwcm9wZXIgbW9kdWxlIGZvciBsb2FkZXJzLgorCisgICAgVGhlIGRlY29yYXRlZCBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIG1vZHVsZSB0byB1c2UgaW5zdGVhZCBvZiB0aGUgbW9kdWxlCisgICAgbmFtZS4gVGhlIG1vZHVsZSBwYXNzZWQgaW4gdG8gdGhlIGZ1bmN0aW9uIGlzIGVpdGhlciBmcm9tIHN5cy5tb2R1bGVzIGlmCisgICAgaXQgYWxyZWFkeSBleGlzdHMgb3IgaXMgYSBuZXcgbW9kdWxlLiBJZiB0aGUgbW9kdWxlIGlzIG5ldywgdGhlbiBfX25hbWVfXworICAgIGlzIHNldCB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIG1ldGhvZCwgX19sb2FkZXJfXyBpcyBzZXQgdG8gc2VsZiwgYW5kCisgICAgX19wYWNrYWdlX18gaXMgc2V0IGFjY29yZGluZ2x5IChpZiBzZWxmLmlzX3BhY2thZ2UoKSBpcyBkZWZpbmVkKSB3aWxsIGJlIHNldAorICAgIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG8gdGhlIGRlY29yYXRlZCBmdW5jdGlvbiAoaWYgc2VsZi5pc19wYWNrYWdlKCkgZG9lcworICAgIG5vdCB3b3JrIGZvciB0aGUgbW9kdWxlIGl0IHdpbGwgYmUgc2V0IHBvc3QtbG9hZCkuCisKKyAgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGFuZCB0aGUgZGVjb3JhdG9yIGNyZWF0ZWQgdGhlIG1vZHVsZSBpdCBpcworICAgIHN1YnNlcXVlbnRseSByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMuCisKKyAgICBUaGUgZGVjb3JhdG9yIGFzc3VtZXMgdGhhdCB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIHRha2VzIHRoZSBtb2R1bGUgbmFtZSBhcworICAgIHRoZSBzZWNvbmQgYXJndW1lbnQuCisKKyAgICAiIiIKKyAgICB3YXJuaW5ncy53YXJuKCdUaGUgaW1wb3J0IHN5c3RlbSBub3cgdGFrZXMgY2FyZSBvZiB0aGlzIGF1dG9tYXRpY2FsbHkuJywKKyAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgIEBmdW5jdG9vbHMud3JhcHMoZnhuKQorICAgIGRlZiBtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyKHNlbGYsIGZ1bGxuYW1lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB3aXRoIF9tb2R1bGVfdG9fbG9hZChmdWxsbmFtZSkgYXMgbW9kdWxlOgorICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IHNlbGYuaXNfcGFja2FnZShmdWxsbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGlzX3BhY2thZ2U6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IGZ1bGxuYW1lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgICAgICAjIElmIF9fcGFja2FnZV9fIHdhcyBub3Qgc2V0IGFib3ZlLCBfX2ltcG9ydF9fKCkgd2lsbCBkbyBpdCBsYXRlci4KKyAgICAgICAgICAgIHJldHVybiBmeG4oc2VsZiwgbW9kdWxlLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICByZXR1cm4gbW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlcgpkaWZmIC0tZ2l0IGEvTGliL2luc3BlY3QucHkgYi9MaWIvaW5zcGVjdC5weQppbmRleCA2ODA2MjNkLi4wMTdhN2U4IDEwMDY0NAotLS0gYS9MaWIvaW5zcGVjdC5weQorKysgYi9MaWIvaW5zcGVjdC5weQpAQCAtMzEsNyArMzEsNyBAQAogX19hdXRob3JfXyA9ICgnS2EtUGluZyBZZWUgPHBpbmdAbGZ3Lm9yZz4nLAogICAgICAgICAgICAgICAnWXVyeSBTZWxpdmFub3YgPHlzZWxpdmFub3ZAc3ByeW1peC5jb20+JykKIAotaW1wb3J0IGltcAoraW1wb3J0IGFzdAogaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKIGltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBsaW5lY2FjaGUKQEAgLTM5LDYgKzM5LDcgQEAKIGltcG9ydCByZQogaW1wb3J0IHN5cwogaW1wb3J0IHRva2VuaXplCitpbXBvcnQgdG9rZW4KIGltcG9ydCB0eXBlcwogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgZnVuY3Rvb2xzCkBAIC0yNjgsMjEgKzI2OSw0MCBAQAogICAgIGVsc2U6CiAgICAgICAgIG1ybyA9ICgpCiAgICAgcmVzdWx0cyA9IFtdCi0gICAgZm9yIGtleSBpbiBkaXIob2JqZWN0KToKLSAgICAgICAgIyBGaXJzdCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSB2aWEgX19kaWN0X18uIFNvbWUgZGVzY3JpcHRvcnMgZG9uJ3QKLSAgICAgICAgIyBsaWtlIGNhbGxpbmcgdGhlaXIgX19nZXRfXyAoc2VlIGJ1ZyAjMTc4NSkuCi0gICAgICAgIGZvciBiYXNlIGluIG1ybzoKLSAgICAgICAgICAgIGlmIGtleSBpbiBiYXNlLl9fZGljdF9fOgotICAgICAgICAgICAgICAgIHZhbHVlID0gYmFzZS5fX2RpY3RfX1trZXldCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob2JqZWN0LCBrZXkpCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgcHJvY2Vzc2VkID0gc2V0KCkKKyAgICBuYW1lcyA9IGRpcihvYmplY3QpCisgICAgIyA6ZGQgYW55IER5bmFtaWNDbGFzc0F0dHJpYnV0ZXMgdG8gdGhlIGxpc3Qgb2YgbmFtZXMgaWYgb2JqZWN0IGlzIGEgY2xhc3M7CisgICAgIyB0aGlzIG1heSByZXN1bHQgaW4gZHVwbGljYXRlIGVudHJpZXMgaWYsIGZvciBleGFtcGxlLCBhIHZpcnR1YWwKKyAgICAjIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgZXhpc3RzCisgICAgdHJ5OgorICAgICAgICBmb3IgYmFzZSBpbiBvYmplY3QuX19iYXNlc19fOgorICAgICAgICAgICAgZm9yIGssIHYgaW4gYmFzZS5fX2RpY3RfXy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGspCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZm9yIGtleSBpbiBuYW1lczoKKyAgICAgICAgIyBGaXJzdCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSB2aWEgZ2V0YXR0ci4gIFNvbWUgZGVzY3JpcHRvcnMgZG9uJ3QKKyAgICAgICAgIyBsaWtlIGNhbGxpbmcgdGhlaXIgX19nZXRfXyAoc2VlIGJ1ZyAjMTc4NSksIHNvIGZhbGwgYmFjayB0bworICAgICAgICAjIGxvb2tpbmcgaW4gdGhlIF9fZGljdF9fLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob2JqZWN0LCBrZXkpCisgICAgICAgICAgICAjIGhhbmRsZSB0aGUgZHVwbGljYXRlIGtleQorICAgICAgICAgICAgaWYga2V5IGluIHByb2Nlc3NlZDoKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBmb3IgYmFzZSBpbiBtcm86CisgICAgICAgICAgICAgICAgaWYga2V5IGluIGJhc2UuX19kaWN0X186CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYmFzZS5fX2RpY3RfX1trZXldCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgY291bGQgYmUgYSAoY3VycmVudGx5KSBtaXNzaW5nIHNsb3QgbWVtYmVyLCBvciBhIGJ1Z2d5CisgICAgICAgICAgICAgICAgIyBfX2Rpcl9fOyBkaXNjYXJkIGFuZCBtb3ZlIG9uCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgbm90IHByZWRpY2F0ZSBvciBwcmVkaWNhdGUodmFsdWUpOgogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKGtleSwgdmFsdWUpKQotICAgIHJlc3VsdHMuc29ydCgpCisgICAgICAgIHByb2Nlc3NlZC5hZGQoa2V5KQorICAgIHJlc3VsdHMuc29ydChrZXk9bGFtYmRhIHBhaXI6IHBhaXJbMF0pCiAgICAgcmV0dXJuIHJlc3VsdHMKIAogQXR0cmlidXRlID0gbmFtZWR0dXBsZSgnQXR0cmlidXRlJywgJ25hbWUga2luZCBkZWZpbmluZ19jbGFzcyBvYmplY3QnKQpAQCAtMjk5LDYwICszMTksMTA2IEBACiAgICAgICAgICAgICAgICAnY2xhc3MgbWV0aG9kJyAgICBjcmVhdGVkIHZpYSBjbGFzc21ldGhvZCgpCiAgICAgICAgICAgICAgICAnc3RhdGljIG1ldGhvZCcgICBjcmVhdGVkIHZpYSBzdGF0aWNtZXRob2QoKQogICAgICAgICAgICAgICAgJ3Byb3BlcnR5JyAgICAgICAgY3JlYXRlZCB2aWEgcHJvcGVydHkoKQotICAgICAgICAgICAgICAgJ21ldGhvZCcgICAgICAgICAgYW55IG90aGVyIGZsYXZvciBvZiBtZXRob2QKKyAgICAgICAgICAgICAgICdtZXRob2QnICAgICAgICAgIGFueSBvdGhlciBmbGF2b3Igb2YgbWV0aG9kIG9yIGRlc2NyaXB0b3IKICAgICAgICAgICAgICAgICdkYXRhJyAgICAgICAgICAgIG5vdCBhIG1ldGhvZAogCiAgICAgICAgIDIuIFRoZSBjbGFzcyB3aGljaCBkZWZpbmVkIHRoaXMgYXR0cmlidXRlIChhIGNsYXNzKS4KIAotICAgICAgICAzLiBUaGUgb2JqZWN0IGFzIG9idGFpbmVkIGRpcmVjdGx5IGZyb20gdGhlIGRlZmluaW5nIGNsYXNzJ3MKLSAgICAgICAgICAgX19kaWN0X18sIG5vdCB2aWEgZ2V0YXR0ci4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yCi0gICAgICAgICAgIGRhdGEgYXR0cmlidXRlczogIEMuZGF0YSBpcyBqdXN0IGEgZGF0YSBvYmplY3QsIGJ1dAotICAgICAgICAgICBDLl9fZGljdF9fWydkYXRhJ10gbWF5IGJlIGEgZGF0YSBkZXNjcmlwdG9yIHdpdGggYWRkaXRpb25hbAotICAgICAgICAgICBpbmZvLCBsaWtlIGEgX19kb2NfXyBzdHJpbmcuCisgICAgICAgIDMuIFRoZSBvYmplY3QgYXMgb2J0YWluZWQgYnkgY2FsbGluZyBnZXRhdHRyOyBpZiB0aGlzIGZhaWxzLCBvciBpZiB0aGUKKyAgICAgICAgICAgcmVzdWx0aW5nIG9iamVjdCBkb2VzIG5vdCBsaXZlIGFueXdoZXJlIGluIHRoZSBjbGFzcycgbXJvIChpbmNsdWRpbmcKKyAgICAgICAgICAgbWV0YWNsYXNzZXMpIHRoZW4gdGhlIG9iamVjdCBpcyBsb29rZWQgdXAgaW4gdGhlIGRlZmluaW5nIGNsYXNzJ3MKKyAgICAgICAgICAgZGljdCAoZm91bmQgYnkgd2Fsa2luZyB0aGUgbXJvKS4KKworICAgIElmIG9uZSBvZiB0aGUgaXRlbXMgaW4gZGlyKGNscykgaXMgc3RvcmVkIGluIHRoZSBtZXRhY2xhc3MgaXQgd2lsbCBub3cKKyAgICBiZSBkaXNjb3ZlcmVkIGFuZCBub3QgaGF2ZSBOb25lIGJlIGxpc3RlZCBhcyB0aGUgY2xhc3MgaW4gd2hpY2ggaXQgd2FzCisgICAgZGVmaW5lZC4gIEFueSBpdGVtcyB3aG9zZSBob21lIGNsYXNzIGNhbm5vdCBiZSBkaXNjb3ZlcmVkIGFyZSBza2lwcGVkLgogICAgICIiIgogCiAgICAgbXJvID0gZ2V0bXJvKGNscykKKyAgICBtZXRhbXJvID0gZ2V0bXJvKHR5cGUoY2xzKSkgIyBmb3IgYXR0cmlidXRlcyBzdG9yZWQgaW4gdGhlIG1ldGFjbGFzcworICAgIG1ldGFtcm8gPSB0dXBsZShbY2xzIGZvciBjbHMgaW4gbWV0YW1ybyBpZiBjbHMgbm90IGluICh0eXBlLCBvYmplY3QpXSkKKyAgICBjbGFzc19iYXNlcyA9IChjbHMsKSArIG1ybworICAgIGFsbF9iYXNlcyA9IGNsYXNzX2Jhc2VzICsgbWV0YW1ybwogICAgIG5hbWVzID0gZGlyKGNscykKKyAgICAjIDpkZCBhbnkgRHluYW1pY0NsYXNzQXR0cmlidXRlcyB0byB0aGUgbGlzdCBvZiBuYW1lczsKKyAgICAjIHRoaXMgbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGUgZW50cmllcyBpZiwgZm9yIGV4YW1wbGUsIGEgdmlydHVhbAorICAgICMgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBleGlzdHMuCisgICAgZm9yIGJhc2UgaW4gbXJvOgorICAgICAgICBmb3IgaywgdiBpbiBiYXNlLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYsIHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGspCiAgICAgcmVzdWx0ID0gW10KKyAgICBwcm9jZXNzZWQgPSBzZXQoKQorCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgICMgR2V0IHRoZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBuYW1lLCBhbmQgd2hlcmUgaXQgd2FzIGRlZmluZWQuCisgICAgICAgICMgTm9ybWFsIG9iamVjdHMgd2lsbCBiZSBsb29rZWQgdXAgd2l0aCBib3RoIGdldGF0dHIgYW5kIGRpcmVjdGx5IGluCisgICAgICAgICMgaXRzIGNsYXNzJyBkaWN0IChpbiBjYXNlIGdldGF0dHIgZmFpbHMgW2J1ZyAjMTc4NV0sIGFuZCBhbHNvIHRvIGxvb2sKKyAgICAgICAgIyBmb3IgYSBkb2NzdHJpbmcpLgorICAgICAgICAjIEZvciBEeW5hbWljQ2xhc3NBdHRyaWJ1dGVzIG9uIHRoZSBzZWNvbmQgcGFzcyB3ZSBvbmx5IGxvb2sgaW4gdGhlCisgICAgICAgICMgY2xhc3MncyBkaWN0LgorICAgICAgICAjCiAgICAgICAgICMgR2V0dGluZyBhbiBvYmogZnJvbSB0aGUgX19kaWN0X18gc29tZXRpbWVzIHJldmVhbHMgbW9yZSB0aGFuCiAgICAgICAgICMgdXNpbmcgZ2V0YXR0ci4gIFN0YXRpYyBhbmQgY2xhc3MgbWV0aG9kcyBhcmUgZHJhbWF0aWMgZXhhbXBsZXMuCi0gICAgICAgICMgRnVydGhlcm1vcmUsIHNvbWUgb2JqZWN0cyBtYXkgcmFpc2UgYW4gRXhjZXB0aW9uIHdoZW4gZmV0Y2hlZCB3aXRoCi0gICAgICAgICMgZ2V0YXR0cigpLiBUaGlzIGlzIHRoZSBjYXNlIHdpdGggc29tZSBkZXNjcmlwdG9ycyAoYnVnICMxNzg1KS4KLSAgICAgICAgIyBUaHVzLCB3ZSBvbmx5IHVzZSBnZXRhdHRyKCkgYXMgYSBsYXN0IHJlc29ydC4KICAgICAgICAgaG9tZWNscyA9IE5vbmUKLSAgICAgICAgZm9yIGJhc2UgaW4gKGNscywpICsgbXJvOgotICAgICAgICAgICAgaWYgbmFtZSBpbiBiYXNlLl9fZGljdF9fOgotICAgICAgICAgICAgICAgIG9iaiA9IGJhc2UuX19kaWN0X19bbmFtZV0KLSAgICAgICAgICAgICAgICBob21lY2xzID0gYmFzZQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvYmogPSBnZXRhdHRyKGNscywgbmFtZSkKLSAgICAgICAgICAgIGhvbWVjbHMgPSBnZXRhdHRyKG9iaiwgIl9fb2JqY2xhc3NfXyIsIGhvbWVjbHMpCi0KLSAgICAgICAgIyBDbGFzc2lmeSB0aGUgb2JqZWN0LgotICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgc3RhdGljbWV0aG9kKToKLSAgICAgICAgICAgIGtpbmQgPSAic3RhdGljIG1ldGhvZCIKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgY2xhc3NtZXRob2QpOgotICAgICAgICAgICAga2luZCA9ICJjbGFzcyBtZXRob2QiCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIHByb3BlcnR5KToKLSAgICAgICAgICAgIGtpbmQgPSAicHJvcGVydHkiCi0gICAgICAgIGVsaWYgaXNtZXRob2RkZXNjcmlwdG9yKG9iaik6Ci0gICAgICAgICAgICBraW5kID0gIm1ldGhvZCIKLSAgICAgICAgZWxpZiBpc2RhdGFkZXNjcmlwdG9yKG9iaik6Ci0gICAgICAgICAgICBraW5kID0gImRhdGEiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvYmpfdmlhX2dldGF0dHIgPSBnZXRhdHRyKGNscywgbmFtZSkKLSAgICAgICAgICAgIGlmIChpc2Z1bmN0aW9uKG9ial92aWFfZ2V0YXR0cikgb3IKLSAgICAgICAgICAgICAgICBpc21ldGhvZGRlc2NyaXB0b3Iob2JqX3ZpYV9nZXRhdHRyKSk6Ci0gICAgICAgICAgICAgICAga2luZCA9ICJtZXRob2QiCisgICAgICAgIGdldF9vYmogPSBOb25lCisgICAgICAgIGRpY3Rfb2JqID0gTm9uZQorICAgICAgICBpZiBuYW1lIG5vdCBpbiBwcm9jZXNzZWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnX19kaWN0X18nOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIl9fZGljdF9fIGlzIHNwZWNpYWwsIGRvbid0IHdhbnQgdGhlIHByb3h5IikKKyAgICAgICAgICAgICAgICBnZXRfb2JqID0gZ2V0YXR0cihjbHMsIG5hbWUpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGtpbmQgPSAiZGF0YSIKLSAgICAgICAgICAgIG9iaiA9IG9ial92aWFfZ2V0YXR0cgotCisgICAgICAgICAgICAgICAgaG9tZWNscyA9IGdldGF0dHIoZ2V0X29iaiwgIl9fb2JqY2xhc3NfXyIsIGhvbWVjbHMpCisgICAgICAgICAgICAgICAgaWYgaG9tZWNscyBub3QgaW4gY2xhc3NfYmFzZXM6CisgICAgICAgICAgICAgICAgICAgICMgaWYgdGhlIHJlc3VsdGluZyBvYmplY3QgZG9lcyBub3QgbGl2ZSBzb21ld2hlcmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICMgbXJvLCBkcm9wIGl0IGFuZCBzZWFyY2ggdGhlIG1ybyBtYW51YWxseQorICAgICAgICAgICAgICAgICAgICBob21lY2xzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBsYXN0X2NscyA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBsb29rIGluIHRoZSBjbGFzc2VzCisgICAgICAgICAgICAgICAgICAgIGZvciBzcmNoX2NscyBpbiBjbGFzc19iYXNlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY2hfb2JqID0gZ2V0YXR0cihzcmNoX2NscywgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNyY2hfb2JqID09IGdldF9vYmo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jbHMgPSBzcmNoX2NscworICAgICAgICAgICAgICAgICAgICAjIHRoZW4gY2hlY2sgdGhlIG1ldGFjbGFzc2VzCisgICAgICAgICAgICAgICAgICAgIGZvciBzcmNoX2NscyBpbiBtZXRhbXJvOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2hfb2JqID0gc3JjaF9jbHMuX19nZXRhdHRyX18oY2xzLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcmNoX29iaiA9PSBnZXRfb2JqOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfY2xzID0gc3JjaF9jbHMKKyAgICAgICAgICAgICAgICAgICAgaWYgbGFzdF9jbHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBob21lY2xzID0gbGFzdF9jbHMKKyAgICAgICAgZm9yIGJhc2UgaW4gYWxsX2Jhc2VzOgorICAgICAgICAgICAgaWYgbmFtZSBpbiBiYXNlLl9fZGljdF9fOgorICAgICAgICAgICAgICAgIGRpY3Rfb2JqID0gYmFzZS5fX2RpY3RfX1tuYW1lXQorICAgICAgICAgICAgICAgIGlmIGhvbWVjbHMgbm90IGluIG1ldGFtcm86CisgICAgICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBiYXNlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgaG9tZWNscyBpcyBOb25lOgorICAgICAgICAgICAgIyB1bmFibGUgdG8gbG9jYXRlIHRoZSBhdHRyaWJ1dGUgYW55d2hlcmUsIG1vc3QgbGlrZWx5IGR1ZSB0bworICAgICAgICAgICAgIyBidWdneSBjdXN0b20gX19kaXJfXzsgZGlzY2FyZCBhbmQgbW92ZSBvbgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgb2JqID0gZ2V0X29iaiBvciBkaWN0X29iagorICAgICAgICAjIENsYXNzaWZ5IHRoZSBvYmplY3Qgb3IgaXRzIGRlc2NyaXB0b3IuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGljdF9vYmosIHN0YXRpY21ldGhvZCk6CisgICAgICAgICAgICBraW5kID0gInN0YXRpYyBtZXRob2QiCisgICAgICAgICAgICBvYmogPSBkaWN0X29iagorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGljdF9vYmosIGNsYXNzbWV0aG9kKToKKyAgICAgICAgICAgIGtpbmQgPSAiY2xhc3MgbWV0aG9kIgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRpY3Rfb2JqLCBwcm9wZXJ0eSk6CisgICAgICAgICAgICBraW5kID0gInByb3BlcnR5IgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc3JvdXRpbmUob2JqKToKKyAgICAgICAgICAgIGtpbmQgPSAibWV0aG9kIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAga2luZCA9ICJkYXRhIgogICAgICAgICByZXN1bHQuYXBwZW5kKEF0dHJpYnV0ZShuYW1lLCBraW5kLCBob21lY2xzLCBvYmopKQotCisgICAgICAgIHByb2Nlc3NlZC5hZGQobmFtZSkKICAgICByZXR1cm4gcmVzdWx0CiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2xhc3MgaGVscGVycwpAQCAtMzYxLDYgKzQyNyw0MCBAQAogICAgICJSZXR1cm4gdHVwbGUgb2YgYmFzZSBjbGFzc2VzIChpbmNsdWRpbmcgY2xzKSBpbiBtZXRob2QgcmVzb2x1dGlvbiBvcmRlci4iCiAgICAgcmV0dXJuIGNscy5fX21yb19fCiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZnVuY3Rpb24gaGVscGVycworCitkZWYgdW53cmFwKGZ1bmMsICosIHN0b3A9Tm9uZSk6CisgICAgIiIiR2V0IHRoZSBvYmplY3Qgd3JhcHBlZCBieSAqZnVuYyouCisKKyAgIEZvbGxvd3MgdGhlIGNoYWluIG9mIDphdHRyOmBfX3dyYXBwZWRfX2AgYXR0cmlidXRlcyByZXR1cm5pbmcgdGhlIGxhc3QKKyAgIG9iamVjdCBpbiB0aGUgY2hhaW4uCisKKyAgICpzdG9wKiBpcyBhbiBvcHRpb25hbCBjYWxsYmFjayBhY2NlcHRpbmcgYW4gb2JqZWN0IGluIHRoZSB3cmFwcGVyIGNoYWluCisgICBhcyBpdHMgc29sZSBhcmd1bWVudCB0aGF0IGFsbG93cyB0aGUgdW53cmFwcGluZyB0byBiZSB0ZXJtaW5hdGVkIGVhcmx5IGlmCisgICB0aGUgY2FsbGJhY2sgcmV0dXJucyBhIHRydWUgdmFsdWUuIElmIHRoZSBjYWxsYmFjayBuZXZlciByZXR1cm5zIGEgdHJ1ZQorICAgdmFsdWUsIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgY2hhaW4gaXMgcmV0dXJuZWQgYXMgdXN1YWwuIEZvciBleGFtcGxlLAorICAgOmZ1bmM6YHNpZ25hdHVyZWAgdXNlcyB0aGlzIHRvIHN0b3AgdW53cmFwcGluZyBpZiBhbnkgb2JqZWN0IGluIHRoZQorICAgY2hhaW4gaGFzIGEgYGBfX3NpZ25hdHVyZV9fYGAgYXR0cmlidXRlIGRlZmluZWQuCisKKyAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZiBhIGN5Y2xlIGlzIGVuY291bnRlcmVkLgorCisgICAgIiIiCisgICAgaWYgc3RvcCBpcyBOb25lOgorICAgICAgICBkZWYgX2lzX3dyYXBwZXIoZik6CisgICAgICAgICAgICByZXR1cm4gaGFzYXR0cihmLCAnX193cmFwcGVkX18nKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBfaXNfd3JhcHBlcihmKToKKyAgICAgICAgICAgIHJldHVybiBoYXNhdHRyKGYsICdfX3dyYXBwZWRfXycpIGFuZCBub3Qgc3RvcChmKQorICAgIGYgPSBmdW5jICAjIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCBmdW5jIGZvciBlcnJvciByZXBvcnRpbmcKKyAgICBtZW1vID0ge2lkKGYpfSAjIE1lbW9pc2UgYnkgaWQgdG8gdG9sZXJhdGUgbm9uLWhhc2hhYmxlIG9iamVjdHMKKyAgICB3aGlsZSBfaXNfd3JhcHBlcihmdW5jKToKKyAgICAgICAgZnVuYyA9IGZ1bmMuX193cmFwcGVkX18KKyAgICAgICAgaWRfZnVuYyA9IGlkKGZ1bmMpCisgICAgICAgIGlmIGlkX2Z1bmMgaW4gbWVtbzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3dyYXBwZXIgbG9vcCB3aGVuIHVud3JhcHBpbmcgeyFyfScuZm9ybWF0KGYpKQorICAgICAgICBtZW1vLmFkZChpZF9mdW5jKQorICAgIHJldHVybiBmdW5jCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc291cmNlIGNvZGUgZXh0cmFjdGlvbgogZGVmIGluZGVudHNpemUobGluZSk6CiAgICAgIiIiUmV0dXJuIHRoZSBpbmRlbnQgc2l6ZSwgaW4gc3BhY2VzLCBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIG9mIHRleHQuIiIiCkBAIC00MTcsOSArNTE3LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZmlsZV9fCiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBhIGJ1aWx0LWluIG1vZHVsZScuZm9ybWF0KG9iamVjdCkpCiAgICAgaWYgaXNjbGFzcyhvYmplY3QpOgotICAgICAgICBvYmplY3QgPSBzeXMubW9kdWxlcy5nZXQob2JqZWN0Ll9fbW9kdWxlX18pCi0gICAgICAgIGlmIGhhc2F0dHIob2JqZWN0LCAnX19maWxlX18nKToKLSAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19maWxlX18KKyAgICAgICAgaWYgaGFzYXR0cihvYmplY3QsICdfX21vZHVsZV9fJyk6CisgICAgICAgICAgICBvYmplY3QgPSBzeXMubW9kdWxlcy5nZXQob2JqZWN0Ll9fbW9kdWxlX18pCisgICAgICAgICAgICBpZiBoYXNhdHRyKG9iamVjdCwgJ19fZmlsZV9fJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2ZpbGVfXwogICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3shcn0gaXMgYSBidWlsdC1pbiBjbGFzcycuZm9ybWF0KG9iamVjdCkpCiAgICAgaWYgaXNtZXRob2Qob2JqZWN0KToKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fZnVuY19fCkBAIC00NDAsNiArNTQxLDkgQEAKICAgICAiIiJHZXQgdGhlIG1vZHVsZSBuYW1lLCBzdWZmaXgsIG1vZGUsIGFuZCBtb2R1bGUgdHlwZSBmb3IgYSBnaXZlbiBmaWxlLiIiIgogICAgIHdhcm5pbmdzLndhcm4oJ2luc3BlY3QuZ2V0bW9kdWxlaW5mbygpIGlzIGRlcHJlY2F0ZWQnLCBEZXByZWNhdGlvbldhcm5pbmcsCiAgICAgICAgICAgICAgICAgICAyKQorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBpbXBvcnQgaW1wCiAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCiAgICAgc3VmZml4ZXMgPSBbKC1sZW4oc3VmZml4KSwgc3VmZml4LCBtb2RlLCBtdHlwZSkKICAgICAgICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbW9kZSwgbXR5cGUgaW4gaW1wLmdldF9zdWZmaXhlcygpXQpAQCAtNDc2LDcgKzU4MCw3IEBACiAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgogICAgICAgICByZXR1cm4gZmlsZW5hbWUKICAgICAjIG9ubHkgcmV0dXJuIGEgbm9uLWV4aXN0ZW50IGZpbGVuYW1lIGlmIHRoZSBtb2R1bGUgaGFzIGEgUEVQIDMwMiBsb2FkZXIKLSAgICBpZiBoYXNhdHRyKGdldG1vZHVsZShvYmplY3QsIGZpbGVuYW1lKSwgJ19fbG9hZGVyX18nKToKKyAgICBpZiBnZXRhdHRyKGdldG1vZHVsZShvYmplY3QsIGZpbGVuYW1lKSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBub3QgTm9uZToKICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCiAgICAgIyBvciBpdCBpcyBpbiB0aGUgbGluZWNhY2hlCiAgICAgaWYgZmlsZW5hbWUgaW4gbGluZWNhY2hlLmNhY2hlOgpAQCAtNTQ1LDEzICs2NDksMTMgQEAKIAogICAgIFRoZSBhcmd1bWVudCBtYXkgYmUgYSBtb2R1bGUsIGNsYXNzLCBtZXRob2QsIGZ1bmN0aW9uLCB0cmFjZWJhY2ssIGZyYW1lLAogICAgIG9yIGNvZGUgb2JqZWN0LiAgVGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgbGlzdCBvZiBhbGwgdGhlIGxpbmVzCi0gICAgaW4gdGhlIGZpbGUgYW5kIHRoZSBsaW5lIG51bWJlciBpbmRleGVzIGEgbGluZSBpbiB0aGF0IGxpc3QuICBBbiBJT0Vycm9yCisgICAgaW4gdGhlIGZpbGUgYW5kIHRoZSBsaW5lIG51bWJlciBpbmRleGVzIGEgbGluZSBpbiB0aGF0IGxpc3QuICBBbiBPU0Vycm9yCiAgICAgaXMgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgogCiAgICAgZmlsZSA9IGdldGZpbGUob2JqZWN0KQogICAgIHNvdXJjZWZpbGUgPSBnZXRzb3VyY2VmaWxlKG9iamVjdCkKICAgICBpZiBub3Qgc291cmNlZmlsZSBhbmQgZmlsZVs6MV0gKyBmaWxlWy0xOl0gIT0gJzw+JzoKLSAgICAgICAgcmFpc2UgSU9FcnJvcignc291cmNlIGNvZGUgbm90IGF2YWlsYWJsZScpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3NvdXJjZSBjb2RlIG5vdCBhdmFpbGFibGUnKQogICAgIGZpbGUgPSBzb3VyY2VmaWxlIGlmIHNvdXJjZWZpbGUgZWxzZSBmaWxlCiAKICAgICBtb2R1bGUgPSBnZXRtb2R1bGUob2JqZWN0LCBmaWxlKQpAQCAtNTYwLDcgKzY2NCw3IEBACiAgICAgZWxzZToKICAgICAgICAgbGluZXMgPSBsaW5lY2FjaGUuZ2V0bGluZXMoZmlsZSkKICAgICBpZiBub3QgbGluZXM6Ci0gICAgICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBnZXQgc291cmNlIGNvZGUnKQorICAgICAgICByYWlzZSBPU0Vycm9yKCdjb3VsZCBub3QgZ2V0IHNvdXJjZSBjb2RlJykKIAogICAgIGlmIGlzbW9kdWxlKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBsaW5lcywgMApAQCAtNTg2LDcgKzY5MCw3IEBACiAgICAgICAgICAgICBjYW5kaWRhdGVzLnNvcnQoKQogICAgICAgICAgICAgcmV0dXJuIGxpbmVzLCBjYW5kaWRhdGVzWzBdWzFdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdjb3VsZCBub3QgZmluZCBjbGFzcyBkZWZpbml0aW9uJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGNsYXNzIGRlZmluaXRpb24nKQogCiAgICAgaWYgaXNtZXRob2Qob2JqZWN0KToKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fZnVuY19fCkBAIC01OTgsMTQgKzcwMiwxNCBAQAogICAgICAgICBvYmplY3QgPSBvYmplY3QuZl9jb2RlCiAgICAgaWYgaXNjb2RlKG9iamVjdCk6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9iamVjdCwgJ2NvX2ZpcnN0bGluZW5vJyk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdjb3VsZCBub3QgZmluZCBmdW5jdGlvbiBkZWZpbml0aW9uJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uIGRlZmluaXRpb24nKQogICAgICAgICBsbnVtID0gb2JqZWN0LmNvX2ZpcnN0bGluZW5vIC0gMQogICAgICAgICBwYXQgPSByZS5jb21waWxlKHInXihccypkZWZccyl8KC4qKD88IVx3KWxhbWJkYSg6fFxzKSl8XihccypAKScpCiAgICAgICAgIHdoaWxlIGxudW0gPiAwOgogICAgICAgICAgICAgaWYgcGF0Lm1hdGNoKGxpbmVzW2xudW1dKTogYnJlYWsKICAgICAgICAgICAgIGxudW0gPSBsbnVtIC0gMQogICAgICAgICByZXR1cm4gbGluZXMsIGxudW0KLSAgICByYWlzZSBJT0Vycm9yKCdjb3VsZCBub3QgZmluZCBjb2RlIG9iamVjdCcpCisgICAgcmFpc2UgT1NFcnJvcignY291bGQgbm90IGZpbmQgY29kZSBvYmplY3QnKQogCiBkZWYgZ2V0Y29tbWVudHMob2JqZWN0KToKICAgICAiIiJHZXQgbGluZXMgb2YgY29tbWVudHMgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGFuIG9iamVjdCdzIHNvdXJjZSBjb2RlLgpAQCAtNjE0LDcgKzcxOCw3IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBsaW5lcywgbG51bSA9IGZpbmRzb3VyY2Uob2JqZWN0KQotICAgIGV4Y2VwdCAoSU9FcnJvciwgVHlwZUVycm9yKToKKyAgICBleGNlcHQgKE9TRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBpZiBpc21vZHVsZShvYmplY3QpOgpAQCAtNzEwLDcgKzgxNCw3IEBACiAgICAgVGhlIGFyZ3VtZW50IG1heSBiZSBhIG1vZHVsZSwgY2xhc3MsIG1ldGhvZCwgZnVuY3Rpb24sIHRyYWNlYmFjaywgZnJhbWUsCiAgICAgb3IgY29kZSBvYmplY3QuICBUaGUgc291cmNlIGNvZGUgaXMgcmV0dXJuZWQgYXMgYSBsaXN0IG9mIHRoZSBsaW5lcwogICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCBhbmQgdGhlIGxpbmUgbnVtYmVyIGluZGljYXRlcyB3aGVyZSBpbiB0aGUKLSAgICBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGUgZmlyc3QgbGluZSBvZiBjb2RlIHdhcyBmb3VuZC4gIEFuIElPRXJyb3IgaXMKKyAgICBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGUgZmlyc3QgbGluZSBvZiBjb2RlIHdhcyBmb3VuZC4gIEFuIE9TRXJyb3IgaXMKICAgICByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCiAgICAgbGluZXMsIGxudW0gPSBmaW5kc291cmNlKG9iamVjdCkKIApAQCAtNzIyLDcgKzgyNiw3IEBACiAKICAgICBUaGUgYXJndW1lbnQgbWF5IGJlIGEgbW9kdWxlLCBjbGFzcywgbWV0aG9kLCBmdW5jdGlvbiwgdHJhY2ViYWNrLCBmcmFtZSwKICAgICBvciBjb2RlIG9iamVjdC4gIFRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIHNpbmdsZSBzdHJpbmcuICBBbgotICAgIElPRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgorICAgIE9TRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgogICAgIGxpbmVzLCBsbnVtID0gZ2V0c291cmNlbGluZXMob2JqZWN0KQogICAgIHJldHVybiAnJy5qb2luKGxpbmVzKQogCkBAIC04MzEsNyArOTM1LDcgQEAKICAgICAnYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHlhcmdzLCBrd29ubHlkZWZhdWx0cywgYW5ub3RhdGlvbnMnKQogCiBkZWYgZ2V0ZnVsbGFyZ3NwZWMoZnVuYyk6Ci0gICAgIiIiR2V0IHRoZSBuYW1lcyBhbmQgZGVmYXVsdCB2YWx1ZXMgb2YgYSBmdW5jdGlvbidzIGFyZ3VtZW50cy4KKyAgICAiIiJHZXQgdGhlIG5hbWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBvZiBhIGNhbGxhYmxlIG9iamVjdCdzIGFyZ3VtZW50cy4KIAogICAgIEEgdHVwbGUgb2Ygc2V2ZW4gdGhpbmdzIGlzIHJldHVybmVkOgogICAgIChhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seWFyZ3MsIGt3b25seWRlZmF1bHRzIGFubm90YXRpb25zKS4KQEAgLTg0NSwxMyArOTQ5LDkwIEBACiAgICAgVGhlIGZpcnN0IGZvdXIgaXRlbXMgaW4gdGhlIHR1cGxlIGNvcnJlc3BvbmQgdG8gZ2V0YXJnc3BlYygpLgogICAgICIiIgogCisgICAgYnVpbHRpbl9tZXRob2RfcGFyYW0gPSBOb25lCisKICAgICBpZiBpc21ldGhvZChmdW5jKToKKyAgICAgICAgIyBUaGVyZSBpcyBhIG5vdGFibGUgZGlmZmVyZW5jZSBpbiBiZWhhdmlvdXIgYmV0d2VlbiBnZXRmdWxsYXJnc3BlYworICAgICAgICAjIGFuZCBTaWduYXR1cmU6IHRoZSBmb3JtZXIgYWx3YXlzIHJldHVybnMgJ3NlbGYnIHBhcmFtZXRlciBmb3IgYm91bmQKKyAgICAgICAgIyBtZXRob2RzLCB3aGVyZWFzIHRoZSBTaWduYXR1cmUgYWx3YXlzIHNob3dzIHRoZSBhY3R1YWwgY2FsbGluZworICAgICAgICAjIHNpZ25hdHVyZSBvZiB0aGUgcGFzc2VkIG9iamVjdC4KKyAgICAgICAgIworICAgICAgICAjIFRvIHNpbXVsYXRlIHRoaXMgYmVoYXZpb3VyLCB3ZSAidW5iaW5kIiBib3VuZCBtZXRob2RzLCB0byB0cmljaworICAgICAgICAjIGluc3BlY3Quc2lnbmF0dXJlIHRvIGFsd2F5cyByZXR1cm4gdGhlaXIgZmlyc3QgcGFyYW1ldGVyICgic2VsZiIsCisgICAgICAgICMgdXN1YWxseSkKICAgICAgICAgZnVuYyA9IGZ1bmMuX19mdW5jX18KLSAgICBpZiBub3QgaXNmdW5jdGlvbihmdW5jKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIG5vdCBhIFB5dGhvbiBmdW5jdGlvbicuZm9ybWF0KGZ1bmMpKQotICAgIGFyZ3MsIHZhcmFyZ3MsIGt3b25seWFyZ3MsIHZhcmt3ID0gX2dldGZ1bGxhcmdzKGZ1bmMuX19jb2RlX18pCi0gICAgcmV0dXJuIEZ1bGxBcmdTcGVjKGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBmdW5jLl9fZGVmYXVsdHNfXywKLSAgICAgICAgICAgIGt3b25seWFyZ3MsIGZ1bmMuX19rd2RlZmF1bHRzX18sIGZ1bmMuX19hbm5vdGF0aW9uc19fKQorCisgICAgZWxpZiBpc2J1aWx0aW4oZnVuYyk6CisgICAgICAgICMgV2UgaGF2ZSBhIGJ1aWx0aW4gZnVuY3Rpb24gb3IgbWV0aG9kLiBGb3IgdGhhdCwgd2UgY2hlY2sgdGhlCisgICAgICAgICMgc3BlY2lhbCAnX190ZXh0X3NpZ25hdHVyZV9fJyBhdHRyaWJ1dGUsIHByb3ZpZGVkIGJ5IHRoZQorICAgICAgICAjIEFyZ3VtZW50IENsaW5pYy4gSWYgaXQncyBhIG1ldGhvZCwgd2UnbGwgbmVlZCB0byBtYWtlIHN1cmUKKyAgICAgICAgIyB0aGF0IGl0cyBmaXJzdCBwYXJhbWV0ZXIgKHVzdWFsbHkgInNlbGYiKSBpcyBhbHdheXMgcmV0dXJuZWQKKyAgICAgICAgIyAoc2VlIHRoZSBwcmV2aW91cyBjb21tZW50KS4KKyAgICAgICAgdGV4dF9zaWduYXR1cmUgPSBnZXRhdHRyKGZ1bmMsICdfX3RleHRfc2lnbmF0dXJlX18nLCBOb25lKQorICAgICAgICBpZiB0ZXh0X3NpZ25hdHVyZSBhbmQgdGV4dF9zaWduYXR1cmUuc3RhcnRzd2l0aCgnKCQnKToKKyAgICAgICAgICAgIGJ1aWx0aW5fbWV0aG9kX3BhcmFtID0gX3NpZ25hdHVyZV9nZXRfYm91bmRfcGFyYW0odGV4dF9zaWduYXR1cmUpCisKKyAgICB0cnk6CisgICAgICAgIHNpZyA9IHNpZ25hdHVyZShmdW5jKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CisgICAgICAgICMgTW9zdCBvZiB0aGUgdGltZXMgJ3NpZ25hdHVyZScgd2lsbCByYWlzZSBWYWx1ZUVycm9yLgorICAgICAgICAjIEJ1dCwgaXQgY2FuIGFsc28gcmFpc2UgQXR0cmlidXRlRXJyb3IsIGFuZCwgbWF5YmUgc29tZXRoaW5nCisgICAgICAgICMgZWxzZS4gU28gdG8gYmUgZnVsbHkgYmFja3dhcmRzIGNvbXBhdGlibGUsIHdlIGNhdGNoIGFsbAorICAgICAgICAjIHBvc3NpYmxlIGV4Y2VwdGlvbnMgaGVyZSwgYW5kIHJlcmFpc2UgYSBUeXBlRXJyb3IuCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigndW5zdXBwb3J0ZWQgY2FsbGFibGUnKSBmcm9tIGV4CisKKyAgICBhcmdzID0gW10KKyAgICB2YXJhcmdzID0gTm9uZQorICAgIHZhcmt3ID0gTm9uZQorICAgIGt3b25seWFyZ3MgPSBbXQorICAgIGRlZmF1bHRzID0gKCkKKyAgICBhbm5vdGF0aW9ucyA9IHt9CisgICAgZGVmYXVsdHMgPSAoKQorICAgIGt3ZGVmYXVsdHMgPSB7fQorCisgICAgaWYgc2lnLnJldHVybl9hbm5vdGF0aW9uIGlzIG5vdCBzaWcuZW1wdHk6CisgICAgICAgIGFubm90YXRpb25zWydyZXR1cm4nXSA9IHNpZy5yZXR1cm5fYW5ub3RhdGlvbgorCisgICAgZm9yIHBhcmFtIGluIHNpZy5wYXJhbWV0ZXJzLnZhbHVlcygpOgorICAgICAgICBraW5kID0gcGFyYW0ua2luZAorICAgICAgICBuYW1lID0gcGFyYW0ubmFtZQorCisgICAgICAgIGlmIGtpbmQgaXMgX1BPU0lUSU9OQUxfT05MWToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG5hbWUpCisgICAgICAgIGVsaWYga2luZCBpcyBfUE9TSVRJT05BTF9PUl9LRVlXT1JEOgorICAgICAgICAgICAgYXJncy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGlmIHBhcmFtLmRlZmF1bHQgaXMgbm90IHBhcmFtLmVtcHR5OgorICAgICAgICAgICAgICAgIGRlZmF1bHRzICs9IChwYXJhbS5kZWZhdWx0LCkKKyAgICAgICAgZWxpZiBraW5kIGlzIF9WQVJfUE9TSVRJT05BTDoKKyAgICAgICAgICAgIHZhcmFyZ3MgPSBuYW1lCisgICAgICAgIGVsaWYga2luZCBpcyBfS0VZV09SRF9PTkxZOgorICAgICAgICAgICAga3dvbmx5YXJncy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIGlmIHBhcmFtLmRlZmF1bHQgaXMgbm90IHBhcmFtLmVtcHR5OgorICAgICAgICAgICAgICAgIGt3ZGVmYXVsdHNbbmFtZV0gPSBwYXJhbS5kZWZhdWx0CisgICAgICAgIGVsaWYga2luZCBpcyBfVkFSX0tFWVdPUkQ6CisgICAgICAgICAgICB2YXJrdyA9IG5hbWUKKworICAgICAgICBpZiBwYXJhbS5hbm5vdGF0aW9uIGlzIG5vdCBwYXJhbS5lbXB0eToKKyAgICAgICAgICAgIGFubm90YXRpb25zW25hbWVdID0gcGFyYW0uYW5ub3RhdGlvbgorCisgICAgaWYgbm90IGt3ZGVmYXVsdHM6CisgICAgICAgICMgY29tcGF0aWJpbGl0eSB3aXRoICdmdW5jLl9fa3dkZWZhdWx0c19fJworICAgICAgICBrd2RlZmF1bHRzID0gTm9uZQorCisgICAgaWYgbm90IGRlZmF1bHRzOgorICAgICAgICAjIGNvbXBhdGliaWxpdHkgd2l0aCAnZnVuYy5fX2RlZmF1bHRzX18nCisgICAgICAgIGRlZmF1bHRzID0gTm9uZQorCisgICAgaWYgYnVpbHRpbl9tZXRob2RfcGFyYW0gYW5kIChub3QgYXJncyBvciBhcmdzWzBdICE9IGJ1aWx0aW5fbWV0aG9kX3BhcmFtKToKKyAgICAgICAgIyBgZnVuY2AgaXMgYSBtZXRob2QsIGFuZCB3ZSBhbHdheXMgbmVlZCB0byByZXR1cm4gaXRzCisgICAgICAgICMgZmlyc3QgcGFyYW1ldGVyIC0tIHVzdWFsbHkgInNlbGYiICh0byBiZSBiYWNrd2FyZHMKKyAgICAgICAgIyBjb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgICMgZ2V0ZnVsbGFyZ3NwZWMpCisgICAgICAgIGFyZ3MuaW5zZXJ0KDAsIGJ1aWx0aW5fbWV0aG9kX3BhcmFtKQorCisgICAgcmV0dXJuIEZ1bGxBcmdTcGVjKGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncywga3dkZWZhdWx0cywgYW5ub3RhdGlvbnMpCisKIAogQXJnSW5mbyA9IG5hbWVkdHVwbGUoJ0FyZ0luZm8nLCAnYXJncyB2YXJhcmdzIGtleXdvcmRzIGxvY2FscycpCiAKQEAgLTExMjUsNyArMTMwNiw3IEBACiAgICAgICAgIHN0YXJ0ID0gbGluZW5vIC0gMSAtIGNvbnRleHQvLzIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGluZXMsIGxudW0gPSBmaW5kc291cmNlKGZyYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBsaW5lcyA9IGluZGV4ID0gTm9uZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3RhcnQgPSBtYXgoc3RhcnQsIDEpCkBAIC0xMzE3LDEzICsxNDk4LDE1IEBACiAKIF9XcmFwcGVyRGVzY3JpcHRvciA9IHR5cGUodHlwZS5fX2NhbGxfXykKIF9NZXRob2RXcmFwcGVyID0gdHlwZShhbGwuX19jYWxsX18pCitfQ2xhc3NNZXRob2RXcmFwcGVyID0gdHlwZShpbnQuX19kaWN0X19bJ2Zyb21fYnl0ZXMnXSkKIAogX05vblVzZXJEZWZpbmVkQ2FsbGFibGVzID0gKF9XcmFwcGVyRGVzY3JpcHRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTWV0aG9kV3JhcHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ2xhc3NNZXRob2RXcmFwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGUpCiAKIAotZGVmIF9nZXRfdXNlcl9kZWZpbmVkX21ldGhvZChjbHMsIG1ldGhvZF9uYW1lKToKK2RlZiBfc2lnbmF0dXJlX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKGNscywgbWV0aG9kX25hbWUpOgogICAgIHRyeToKICAgICAgICAgbWV0aCA9IGdldGF0dHIoY2xzLCBtZXRob2RfbmFtZSkKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CkBAIC0xMzM1LDYgKzE1MTgsMzM5IEBACiAgICAgICAgICAgICByZXR1cm4gbWV0aAogCiAKK2RlZiBfc2lnbmF0dXJlX2dldF9wYXJ0aWFsKHdyYXBwZWRfc2lnLCBwYXJ0aWFsLCBleHRyYV9hcmdzPSgpKToKKyAgICAjIEludGVybmFsIGhlbHBlciB0byBjYWxjdWxhdGUgaG93ICd3cmFwcGVkX3NpZycgc2lnbmF0dXJlIHdpbGwKKyAgICAjIGxvb2sgbGlrZSBhZnRlciBhcHBseWluZyBhICdmdW5jdG9vbHMucGFydGlhbCcgb2JqZWN0IChvciBhbGlrZSkKKyAgICAjIG9uIGl0LgorCisgICAgbmV3X3BhcmFtcyA9IE9yZGVyZWREaWN0KHdyYXBwZWRfc2lnLnBhcmFtZXRlcnMuaXRlbXMoKSkKKworICAgIHBhcnRpYWxfYXJncyA9IHBhcnRpYWwuYXJncyBvciAoKQorICAgIHBhcnRpYWxfa2V5d29yZHMgPSBwYXJ0aWFsLmtleXdvcmRzIG9yIHt9CisKKyAgICBpZiBleHRyYV9hcmdzOgorICAgICAgICBwYXJ0aWFsX2FyZ3MgPSBleHRyYV9hcmdzICsgcGFydGlhbF9hcmdzCisKKyAgICB0cnk6CisgICAgICAgIGJhID0gd3JhcHBlZF9zaWcuYmluZF9wYXJ0aWFsKCpwYXJ0aWFsX2FyZ3MsICoqcGFydGlhbF9rZXl3b3JkcykKKyAgICBleGNlcHQgVHlwZUVycm9yIGFzIGV4OgorICAgICAgICBtc2cgPSAncGFydGlhbCBvYmplY3QgeyFyfSBoYXMgaW5jb3JyZWN0IGFyZ3VtZW50cycuZm9ybWF0KHBhcnRpYWwpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKSBmcm9tIGV4CisKKyAgICBmb3IgYXJnX25hbWUsIGFyZ192YWx1ZSBpbiBiYS5hcmd1bWVudHMuaXRlbXMoKToKKyAgICAgICAgcGFyYW0gPSBuZXdfcGFyYW1zW2FyZ19uYW1lXQorICAgICAgICBpZiBhcmdfbmFtZSBpbiBwYXJ0aWFsX2tleXdvcmRzOgorICAgICAgICAgICAgIyBXZSBzZXQgYSBuZXcgZGVmYXVsdCB2YWx1ZSwgYmVjYXVzZSB0aGUgZm9sbG93aW5nIGNvZGUKKyAgICAgICAgICAgICMgaXMgY29ycmVjdDoKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgICA+Pj4gZGVmIGZvbyhhKTogcHJpbnQoYSkKKyAgICAgICAgICAgICMgICA+Pj4gcHJpbnQocGFydGlhbChwYXJ0aWFsKGZvbywgYT0xMCksIGE9MjApKCkpCisgICAgICAgICAgICAjICAgMjAKKyAgICAgICAgICAgICMgICA+Pj4gcHJpbnQocGFydGlhbChwYXJ0aWFsKGZvbywgYT0xMCksIGE9MjApKGE9MzApKQorICAgICAgICAgICAgIyAgIDMwCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFNvLCB3aXRoICdwYXJ0aWFsJyBvYmplY3RzLCBwYXNzaW5nIGEga2V5d29yZCBhcmd1bWVudCBpcworICAgICAgICAgICAgIyBsaWtlIHNldHRpbmcgYSBuZXcgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICMgcGFyYW1ldGVyCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFdlIGFsc28gbWFyayB0aGlzIHBhcmFtZXRlciB3aXRoICdfcGFydGlhbF9rd2FyZycKKyAgICAgICAgICAgICMgZmxhZy4gIExhdGVyLCBpbiAnX2JpbmQnLCB0aGUgJ2RlZmF1bHQnIHZhbHVlIG9mIHRoaXMKKyAgICAgICAgICAgICMgcGFyYW1ldGVyIHdpbGwgYmUgYWRkZWQgdG8gJ2t3YXJncycsIHRvIHNpbXVsYXRlCisgICAgICAgICAgICAjIHRoZSAnZnVuY3Rvb2xzLnBhcnRpYWwnIHJlYWwgY2FsbC4KKyAgICAgICAgICAgIG5ld19wYXJhbXNbYXJnX25hbWVdID0gcGFyYW0ucmVwbGFjZShkZWZhdWx0PWFyZ192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcGFydGlhbF9rd2FyZz1UcnVlKQorCisgICAgICAgIGVsaWYgKHBhcmFtLmtpbmQgbm90IGluIChfVkFSX0tFWVdPUkQsIF9WQVJfUE9TSVRJT05BTCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgcGFyYW0uX3BhcnRpYWxfa3dhcmcpOgorICAgICAgICAgICAgbmV3X3BhcmFtcy5wb3AoYXJnX25hbWUpCisKKyAgICByZXR1cm4gd3JhcHBlZF9zaWcucmVwbGFjZShwYXJhbWV0ZXJzPW5ld19wYXJhbXMudmFsdWVzKCkpCisKKworZGVmIF9zaWduYXR1cmVfYm91bmRfbWV0aG9kKHNpZyk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gdHJhbnNmb3JtIHNpZ25hdHVyZXMgZm9yIHVuYm91bmQKKyAgICAjIGZ1bmN0aW9ucyB0byBib3VuZCBtZXRob2RzCisKKyAgICBwYXJhbXMgPSB0dXBsZShzaWcucGFyYW1ldGVycy52YWx1ZXMoKSkKKworICAgIGlmIG5vdCBwYXJhbXMgb3IgcGFyYW1zWzBdLmtpbmQgaW4gKF9WQVJfS0VZV09SRCwgX0tFWVdPUkRfT05MWSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgbWV0aG9kIHNpZ25hdHVyZScpCisKKyAgICBraW5kID0gcGFyYW1zWzBdLmtpbmQKKyAgICBpZiBraW5kIGluIChfUE9TSVRJT05BTF9PUl9LRVlXT1JELCBfUE9TSVRJT05BTF9PTkxZKToKKyAgICAgICAgIyBEcm9wIGZpcnN0IHBhcmFtZXRlcjoKKyAgICAgICAgIyAnKHAxLCBwMlssIC4uLl0pJyAtPiAnKHAyWywgLi4uXSknCisgICAgICAgIHBhcmFtcyA9IHBhcmFtc1sxOl0KKyAgICBlbHNlOgorICAgICAgICBpZiBraW5kIGlzIG5vdCBfVkFSX1BPU0lUSU9OQUw6CisgICAgICAgICAgICAjIFVubGVzcyB3ZSBhZGQgYSBuZXcgcGFyYW1ldGVyIHR5cGUgd2UgbmV2ZXIKKyAgICAgICAgICAgICMgZ2V0IGhlcmUKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgYXJndW1lbnQgdHlwZScpCisgICAgICAgICMgSXQncyBhIHZhci1wb3NpdGlvbmFsIHBhcmFtZXRlci4KKyAgICAgICAgIyBEbyBub3RoaW5nLiAnKCphcmdzWywgLi4uXSknIC0+ICcoKmFyZ3NbLCAuLi5dKScKKworICAgIHJldHVybiBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPXBhcmFtcykKKworCitkZWYgX3NpZ25hdHVyZV9pc19idWlsdGluKG9iaik6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gdGVzdCBpZiBgb2JqYCBpcyBhIGNhbGxhYmxlIHRoYXQgbWlnaHQKKyAgICAjIHN1cHBvcnQgQXJndW1lbnQgQ2xpbmljJ3MgX190ZXh0X3NpZ25hdHVyZV9fIHByb3RvY29sLgorICAgIHJldHVybiAoaXNidWlsdGluKG9iaikgb3IKKyAgICAgICAgICAgIGlzbWV0aG9kZGVzY3JpcHRvcihvYmopIG9yCisgICAgICAgICAgICBpc2luc3RhbmNlKG9iaiwgX05vblVzZXJEZWZpbmVkQ2FsbGFibGVzKSBvcgorICAgICAgICAgICAgIyBDYW4ndCB0ZXN0ICdpc2luc3RhbmNlKHR5cGUpJyBoZXJlLCBhcyBpdCB3b3VsZAorICAgICAgICAgICAgIyBhbHNvIGJlIFRydWUgZm9yIHJlZ3VsYXIgcHl0aG9uIGNsYXNzZXMKKyAgICAgICAgICAgIG9iaiBpbiAodHlwZSwgb2JqZWN0KSkKKworCitkZWYgX3NpZ25hdHVyZV9pc19mdW5jdGlvbmxpa2Uob2JqKToKKyAgICAjIEludGVybmFsIGhlbHBlciB0byB0ZXN0IGlmIGBvYmpgIGlzIGEgZHVjayB0eXBlIG9mIEZ1bmN0aW9uVHlwZS4KKyAgICAjIEEgZ29vZCBleGFtcGxlIG9mIHN1Y2ggb2JqZWN0cyBhcmUgZnVuY3Rpb25zIGNvbXBpbGVkIHdpdGgKKyAgICAjIEN5dGhvbiwgd2hpY2ggaGF2ZSBhbGwgYXR0cmlidXRlcyB0aGF0IGEgcHVyZSBQeXRob24gZnVuY3Rpb24KKyAgICAjIHdvdWxkIGhhdmUsIGJ1dCBoYXZlIHRoZWlyIGNvZGUgc3RhdGljYWxseSBjb21waWxlZC4KKworICAgIGlmIG5vdCBjYWxsYWJsZShvYmopIG9yIGlzY2xhc3Mob2JqKToKKyAgICAgICAgIyBBbGwgZnVuY3Rpb24tbGlrZSBvYmplY3RzIGFyZSBvYnZpb3VzbHkgY2FsbGFibGVzLAorICAgICAgICAjIGFuZCBub3QgY2xhc3Nlcy4KKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBuYW1lID0gZ2V0YXR0cihvYmosICdfX25hbWVfXycsIE5vbmUpCisgICAgY29kZSA9IGdldGF0dHIob2JqLCAnX19jb2RlX18nLCBOb25lKQorICAgIGRlZmF1bHRzID0gZ2V0YXR0cihvYmosICdfX2RlZmF1bHRzX18nLCBfdm9pZCkgIyBJbXBvcnRhbnQgdG8gdXNlIF92b2lkIC4uLgorICAgIGt3ZGVmYXVsdHMgPSBnZXRhdHRyKG9iaiwgJ19fa3dkZWZhdWx0c19fJywgX3ZvaWQpICMgLi4uIGFuZCBub3QgTm9uZSBoZXJlCisgICAgYW5ub3RhdGlvbnMgPSBnZXRhdHRyKG9iaiwgJ19fYW5ub3RhdGlvbnNfXycsIE5vbmUpCisKKyAgICByZXR1cm4gKGlzaW5zdGFuY2UoY29kZSwgdHlwZXMuQ29kZVR5cGUpIGFuZAorICAgICAgICAgICAgaXNpbnN0YW5jZShuYW1lLCBzdHIpIGFuZAorICAgICAgICAgICAgKGRlZmF1bHRzIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShkZWZhdWx0cywgdHVwbGUpKSBhbmQKKyAgICAgICAgICAgIChrd2RlZmF1bHRzIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShrd2RlZmF1bHRzLCBkaWN0KSkgYW5kCisgICAgICAgICAgICBpc2luc3RhbmNlKGFubm90YXRpb25zLCBkaWN0KSkKKworCitkZWYgX3NpZ25hdHVyZV9nZXRfYm91bmRfcGFyYW0oc3BlYyk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2V0IGZpcnN0IHBhcmFtZXRlciBuYW1lIGZyb20gYQorICAgICMgX190ZXh0X3NpZ25hdHVyZV9fIG9mIGEgYnVpbHRpbiBtZXRob2QsIHdoaWNoIHNob3VsZAorICAgICMgYmUgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6ICcoJHBhcmFtMSwgLi4uKScuCisgICAgIyBBc3N1bXB0aW9ucyBhcmUgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgd29uJ3QgaGF2ZQorICAgICMgYSBkZWZhdWx0IHZhbHVlIG9yIGFuIGFubm90YXRpb24uCisKKyAgICBhc3NlcnQgc3BlYy5zdGFydHN3aXRoKCcoJCcpCisKKyAgICBwb3MgPSBzcGVjLmZpbmQoJywnKQorICAgIGlmIHBvcyA9PSAtMToKKyAgICAgICAgcG9zID0gc3BlYy5maW5kKCcpJykKKworICAgIGNwb3MgPSBzcGVjLmZpbmQoJzonKQorICAgIGFzc2VydCBjcG9zID09IC0xIG9yIGNwb3MgPiBwb3MKKworICAgIGNwb3MgPSBzcGVjLmZpbmQoJz0nKQorICAgIGFzc2VydCBjcG9zID09IC0xIG9yIGNwb3MgPiBwb3MKKworICAgIHJldHVybiBzcGVjWzI6cG9zXQorCisKK2RlZiBfc2lnbmF0dXJlX3N0cmlwX25vbl9weXRob25fc3ludGF4KHNpZ25hdHVyZSk6CisgICAgIiIiCisgICAgVGFrZXMgYSBzaWduYXR1cmUgaW4gQXJndW1lbnQgQ2xpbmljJ3MgZXh0ZW5kZWQgc2lnbmF0dXJlIGZvcm1hdC4KKyAgICBSZXR1cm5zIGEgdHVwbGUgb2YgdGhyZWUgdGhpbmdzOgorICAgICAgKiB0aGF0IHNpZ25hdHVyZSByZS1yZW5kZXJlZCBpbiBzdGFuZGFyZCBQeXRob24gc3ludGF4LAorICAgICAgKiB0aGUgaW5kZXggb2YgdGhlICJzZWxmIiBwYXJhbWV0ZXIgKGdlbmVyYWxseSAwKSwgb3IgTm9uZSBpZgorICAgICAgICB0aGUgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhICJzZWxmIiBwYXJhbWV0ZXIsIGFuZAorICAgICAgKiB0aGUgaW5kZXggb2YgdGhlIGxhc3QgInBvc2l0aW9uYWwgb25seSIgcGFyYW1ldGVyLAorICAgICAgICBvciBOb25lIGlmIHRoZSBzaWduYXR1cmUgaGFzIG5vIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLgorICAgICIiIgorCisgICAgaWYgbm90IHNpZ25hdHVyZToKKyAgICAgICAgcmV0dXJuIHNpZ25hdHVyZSwgTm9uZSwgTm9uZQorCisgICAgc2VsZl9wYXJhbWV0ZXIgPSBOb25lCisgICAgbGFzdF9wb3NpdGlvbmFsX29ubHkgPSBOb25lCisKKyAgICBsaW5lcyA9IFtsLmVuY29kZSgnYXNjaWknKSBmb3IgbCBpbiBzaWduYXR1cmUuc3BsaXQoJ1xuJyldCisgICAgZ2VuZXJhdG9yID0gaXRlcihsaW5lcykuX19uZXh0X18KKyAgICB0b2tlbl9zdHJlYW0gPSB0b2tlbml6ZS50b2tlbml6ZShnZW5lcmF0b3IpCisKKyAgICBkZWxheWVkX2NvbW1hID0gRmFsc2UKKyAgICBza2lwX25leHRfY29tbWEgPSBGYWxzZQorICAgIHRleHQgPSBbXQorICAgIGFkZCA9IHRleHQuYXBwZW5kCisKKyAgICBjdXJyZW50X3BhcmFtZXRlciA9IDAKKyAgICBPUCA9IHRva2VuLk9QCisgICAgRVJST1JUT0tFTiA9IHRva2VuLkVSUk9SVE9LRU4KKworICAgICMgdG9rZW4gc3RyZWFtIGFsd2F5cyBzdGFydHMgd2l0aCBFTkNPRElORyB0b2tlbiwgc2tpcCBpdAorICAgIHQgPSBuZXh0KHRva2VuX3N0cmVhbSkKKyAgICBhc3NlcnQgdC50eXBlID09IHRva2VuaXplLkVOQ09ESU5HCisKKyAgICBmb3IgdCBpbiB0b2tlbl9zdHJlYW06CisgICAgICAgIHR5cGUsIHN0cmluZyA9IHQudHlwZSwgdC5zdHJpbmcKKworICAgICAgICBpZiB0eXBlID09IE9QOgorICAgICAgICAgICAgaWYgc3RyaW5nID09ICcsJzoKKyAgICAgICAgICAgICAgICBpZiBza2lwX25leHRfY29tbWE6CisgICAgICAgICAgICAgICAgICAgIHNraXBfbmV4dF9jb21tYSA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBkZWxheWVkX2NvbW1hCisgICAgICAgICAgICAgICAgICAgIGRlbGF5ZWRfY29tbWEgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFyYW1ldGVyICs9IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBzdHJpbmcgPT0gJy8nOgorICAgICAgICAgICAgICAgIGFzc2VydCBub3Qgc2tpcF9uZXh0X2NvbW1hCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxhc3RfcG9zaXRpb25hbF9vbmx5IGlzIE5vbmUKKyAgICAgICAgICAgICAgICBza2lwX25leHRfY29tbWEgPSBUcnVlCisgICAgICAgICAgICAgICAgbGFzdF9wb3NpdGlvbmFsX29ubHkgPSBjdXJyZW50X3BhcmFtZXRlciAtIDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmICh0eXBlID09IEVSUk9SVE9LRU4pIGFuZCAoc3RyaW5nID09ICckJyk6CisgICAgICAgICAgICBhc3NlcnQgc2VsZl9wYXJhbWV0ZXIgaXMgTm9uZQorICAgICAgICAgICAgc2VsZl9wYXJhbWV0ZXIgPSBjdXJyZW50X3BhcmFtZXRlcgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBkZWxheWVkX2NvbW1hOgorICAgICAgICAgICAgZGVsYXllZF9jb21tYSA9IEZhbHNlCisgICAgICAgICAgICBpZiBub3QgKCh0eXBlID09IE9QKSBhbmQgKHN0cmluZyA9PSAnKScpKToKKyAgICAgICAgICAgICAgICBhZGQoJywgJykKKyAgICAgICAgYWRkKHN0cmluZykKKyAgICAgICAgaWYgKHN0cmluZyA9PSAnLCcpOgorICAgICAgICAgICAgYWRkKCcgJykKKyAgICBjbGVhbl9zaWduYXR1cmUgPSAnJy5qb2luKHRleHQpCisgICAgcmV0dXJuIGNsZWFuX3NpZ25hdHVyZSwgc2VsZl9wYXJhbWV0ZXIsIGxhc3RfcG9zaXRpb25hbF9vbmx5CisKKworZGVmIF9zaWduYXR1cmVfZnJvbXN0cihjbHMsIG9iaiwgcyk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gcGFyc2UgY29udGVudCBvZiAnX190ZXh0X3NpZ25hdHVyZV9fJworICAgICMgYW5kIHJldHVybiBhIFNpZ25hdHVyZSBiYXNlZCBvbiBpdAorICAgIFBhcmFtZXRlciA9IGNscy5fcGFyYW1ldGVyX2NscworCisgICAgY2xlYW5fc2lnbmF0dXJlLCBzZWxmX3BhcmFtZXRlciwgbGFzdF9wb3NpdGlvbmFsX29ubHkgPSBcCisgICAgICAgIF9zaWduYXR1cmVfc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgocykKKworICAgIHByb2dyYW0gPSAiZGVmIGZvbyIgKyBjbGVhbl9zaWduYXR1cmUgKyAiOiBwYXNzIgorCisgICAgdHJ5OgorICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UocHJvZ3JhbSkKKyAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgIG1vZHVsZSA9IE5vbmUKKworICAgIGlmIG5vdCBpc2luc3RhbmNlKG1vZHVsZSwgYXN0Lk1vZHVsZSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInshcn0gYnVpbHRpbiBoYXMgaW52YWxpZCBzaWduYXR1cmUiLmZvcm1hdChvYmopKQorCisgICAgZiA9IG1vZHVsZS5ib2R5WzBdCisKKyAgICBwYXJhbWV0ZXJzID0gW10KKyAgICBlbXB0eSA9IFBhcmFtZXRlci5lbXB0eQorICAgIGludmFsaWQgPSBvYmplY3QoKQorCisgICAgbW9kdWxlID0gTm9uZQorICAgIG1vZHVsZV9kaWN0ID0ge30KKyAgICBtb2R1bGVfbmFtZSA9IGdldGF0dHIob2JqLCAnX19tb2R1bGVfXycsIE5vbmUpCisgICAgaWYgbW9kdWxlX25hbWU6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzLmdldChtb2R1bGVfbmFtZSwgTm9uZSkKKyAgICAgICAgaWYgbW9kdWxlOgorICAgICAgICAgICAgbW9kdWxlX2RpY3QgPSBtb2R1bGUuX19kaWN0X18KKyAgICBzeXNfbW9kdWxlX2RpY3QgPSBzeXMubW9kdWxlcworCisgICAgZGVmIHBhcnNlX25hbWUobm9kZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG5vZGUsIGFzdC5hcmcpCisgICAgICAgIGlmIG5vZGUuYW5ub3RhdGlvbiAhPSBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQW5ub3RhdGlvbnMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIikKKyAgICAgICAgcmV0dXJuIG5vZGUuYXJnCisKKyAgICBkZWYgd3JhcF92YWx1ZShzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBldmFsKHMsIG1vZHVsZV9kaWN0KQorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gZXZhbChzLCBzeXNfbW9kdWxlX2RpY3QpCisgICAgICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgIHJldHVybiBhc3QuU3RyKHZhbHVlKQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBmbG9hdCkpOgorICAgICAgICAgICAgcmV0dXJuIGFzdC5OdW0odmFsdWUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVzKToKKyAgICAgICAgICAgIHJldHVybiBhc3QuQnl0ZXModmFsdWUpCisgICAgICAgIGlmIHZhbHVlIGluIChUcnVlLCBGYWxzZSwgTm9uZSk6CisgICAgICAgICAgICByZXR1cm4gYXN0Lk5hbWVDb25zdGFudCh2YWx1ZSkKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKworICAgIGNsYXNzIFJld3JpdGVTeW1ib2xpY3MoYXN0Lk5vZGVUcmFuc2Zvcm1lcik6CisgICAgICAgIGRlZiB2aXNpdF9BdHRyaWJ1dGUoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICBhID0gW10KKyAgICAgICAgICAgIG4gPSBub2RlCisgICAgICAgICAgICB3aGlsZSBpc2luc3RhbmNlKG4sIGFzdC5BdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgIGEuYXBwZW5kKG4uYXR0cikKKyAgICAgICAgICAgICAgICBuID0gbi52YWx1ZQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobiwgYXN0Lk5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisgICAgICAgICAgICBhLmFwcGVuZChuLmlkKQorICAgICAgICAgICAgdmFsdWUgPSAiLiIuam9pbihyZXZlcnNlZChhKSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwX3ZhbHVlKHZhbHVlKQorCisgICAgICAgIGRlZiB2aXNpdF9OYW1lKHNlbGYsIG5vZGUpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZS5jdHgsIGFzdC5Mb2FkKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKyAgICAgICAgICAgIHJldHVybiB3cmFwX3ZhbHVlKG5vZGUuaWQpCisKKyAgICBkZWYgcChuYW1lX25vZGUsIGRlZmF1bHRfbm9kZSwgZGVmYXVsdD1lbXB0eSk6CisgICAgICAgIG5hbWUgPSBwYXJzZV9uYW1lKG5hbWVfbm9kZSkKKyAgICAgICAgaWYgbmFtZSBpcyBpbnZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgZGVmYXVsdF9ub2RlIGFuZCBkZWZhdWx0X25vZGUgaXMgbm90IF9lbXB0eToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWZhdWx0X25vZGUgPSBSZXdyaXRlU3ltYm9saWNzKCkudmlzaXQoZGVmYXVsdF9ub2RlKQorICAgICAgICAgICAgICAgIG8gPSBhc3QubGl0ZXJhbF9ldmFsKGRlZmF1bHRfbm9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIG8gPSBpbnZhbGlkCisgICAgICAgICAgICBpZiBvIGlzIGludmFsaWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGRlZmF1bHQgPSBvIGlmIG8gaXMgbm90IGludmFsaWQgZWxzZSBkZWZhdWx0CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBraW5kLCBkZWZhdWx0PWRlZmF1bHQsIGFubm90YXRpb249ZW1wdHkpKQorCisgICAgIyBub24ta2V5d29yZC1vbmx5IHBhcmFtZXRlcnMKKyAgICBhcmdzID0gcmV2ZXJzZWQoZi5hcmdzLmFyZ3MpCisgICAgZGVmYXVsdHMgPSByZXZlcnNlZChmLmFyZ3MuZGVmYXVsdHMpCisgICAgaXRlciA9IGl0ZXJ0b29scy56aXBfbG9uZ2VzdChhcmdzLCBkZWZhdWx0cywgZmlsbHZhbHVlPU5vbmUpCisgICAgaWYgbGFzdF9wb3NpdGlvbmFsX29ubHkgaXMgbm90IE5vbmU6CisgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisgICAgZWxzZToKKyAgICAgICAga2luZCA9IFBhcmFtZXRlci5QT1NJVElPTkFMX09SX0tFWVdPUkQKKyAgICBmb3IgaSwgKG5hbWUsIGRlZmF1bHQpIGluIGVudW1lcmF0ZShyZXZlcnNlZChsaXN0KGl0ZXIpKSk6CisgICAgICAgIHAobmFtZSwgZGVmYXVsdCkKKyAgICAgICAgaWYgaSA9PSBsYXN0X3Bvc2l0aW9uYWxfb25seToKKyAgICAgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JECisKKyAgICAjICphcmdzCisgICAgaWYgZi5hcmdzLnZhcmFyZzoKKyAgICAgICAga2luZCA9IFBhcmFtZXRlci5WQVJfUE9TSVRJT05BTAorICAgICAgICBwKGYuYXJncy52YXJhcmcsIGVtcHR5KQorCisgICAgIyBrZXl3b3JkLW9ubHkgYXJndW1lbnRzCisgICAga2luZCA9IFBhcmFtZXRlci5LRVlXT1JEX09OTFkKKyAgICBmb3IgbmFtZSwgZGVmYXVsdCBpbiB6aXAoZi5hcmdzLmt3b25seWFyZ3MsIGYuYXJncy5rd19kZWZhdWx0cyk6CisgICAgICAgIHAobmFtZSwgZGVmYXVsdCkKKworICAgICMgKiprd2FyZ3MKKyAgICBpZiBmLmFyZ3Mua3dhcmc6CisgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuVkFSX0tFWVdPUkQKKyAgICAgICAgcChmLmFyZ3Mua3dhcmcsIGVtcHR5KQorCisgICAgaWYgc2VsZl9wYXJhbWV0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgIGFzc2VydCBwYXJhbWV0ZXJzCisgICAgICAgIGlmIGdldGF0dHIob2JqLCAnX19zZWxmX18nLCBOb25lKToKKyAgICAgICAgICAgICMgc3RyaXAgb2ZmIHNlbGYsIGl0J3MgYWxyZWFkeSBiZWVuIGJvdW5kCisgICAgICAgICAgICBwYXJhbWV0ZXJzLnBvcCgwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBmb3IgYnVpbHRpbnMsIHNlbGYgcGFyYW1ldGVyIGlzIGFsd2F5cyBwb3NpdGlvbmFsLW9ubHkhCisgICAgICAgICAgICBwID0gcGFyYW1ldGVyc1swXS5yZXBsYWNlKGtpbmQ9UGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgICAgIHBhcmFtZXRlcnNbMF0gPSBwCisKKyAgICByZXR1cm4gY2xzKHBhcmFtZXRlcnMsIHJldHVybl9hbm5vdGF0aW9uPWNscy5lbXB0eSkKKworCiBkZWYgc2lnbmF0dXJlKG9iaik6CiAgICAgJycnR2V0IGEgc2lnbmF0dXJlIG9iamVjdCBmb3IgdGhlIHBhc3NlZCBjYWxsYWJsZS4nJycKIApAQCAtMTM0NSw3ICsxODYxLDEwIEBACiAgICAgICAgICMgSW4gdGhpcyBjYXNlIHdlIHNraXAgdGhlIGZpcnN0IHBhcmFtZXRlciBvZiB0aGUgdW5kZXJseWluZwogICAgICAgICAjIGZ1bmN0aW9uICh1c3VhbGx5IGBzZWxmYCBvciBgY2xzYCkuCiAgICAgICAgIHNpZyA9IHNpZ25hdHVyZShvYmouX19mdW5jX18pCi0gICAgICAgIHJldHVybiBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPXR1cGxlKHNpZy5wYXJhbWV0ZXJzLnZhbHVlcygpKVsxOl0pCisgICAgICAgIHJldHVybiBfc2lnbmF0dXJlX2JvdW5kX21ldGhvZChzaWcpCisKKyAgICAjIFdhcyB0aGlzIGZ1bmN0aW9uIHdyYXBwZWQgYnkgYSBkZWNvcmF0b3I/CisgICAgb2JqID0gdW53cmFwKG9iaiwgc3RvcD0obGFtYmRhIGY6IGhhc2F0dHIoZiwgIl9fc2lnbmF0dXJlX18iKSkpCiAKICAgICB0cnk6CiAgICAgICAgIHNpZyA9IG9iai5fX3NpZ25hdHVyZV9fCkBAIC0xMzU2LDU3ICsxODc1LDM3IEBACiAgICAgICAgICAgICByZXR1cm4gc2lnCiAKICAgICB0cnk6Ci0gICAgICAgICMgV2FzIHRoaXMgZnVuY3Rpb24gd3JhcHBlZCBieSBhIGRlY29yYXRvcj8KLSAgICAgICAgd3JhcHBlZCA9IG9iai5fX3dyYXBwZWRfXworICAgICAgICBwYXJ0aWFsbWV0aG9kID0gb2JqLl9wYXJ0aWFsbWV0aG9kCiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICBwYXNzCiAgICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHNpZ25hdHVyZSh3cmFwcGVkKQorICAgICAgICBpZiBpc2luc3RhbmNlKHBhcnRpYWxtZXRob2QsIGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKToKKyAgICAgICAgICAgICMgVW5ib3VuZCBwYXJ0aWFsbWV0aG9kIChzZWUgZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QpCisgICAgICAgICAgICAjIFRoaXMgbWVhbnMsIHRoYXQgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHNpZ25hdHVyZQorICAgICAgICAgICAgIyBhcyBpZiBpdCdzIGEgcmVndWxhciBwYXJ0aWFsIG9iamVjdCwgYnV0IHRha2luZyBpbnRvCisgICAgICAgICAgICAjIGFjY291bnQgdGhhdCB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudAorICAgICAgICAgICAgIyAodXN1YWxseSBgc2VsZmAsIG9yIGBjbHNgKSB3aWxsIG5vdCBiZSBwYXNzZWQKKyAgICAgICAgICAgICMgYXV0b21hdGljYWxseSAoYXMgZm9yIGJvdW5kbWV0aG9kcykKIAotICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0eXBlcy5GdW5jdGlvblR5cGUpOgorICAgICAgICAgICAgd3JhcHBlZF9zaWcgPSBzaWduYXR1cmUocGFydGlhbG1ldGhvZC5mdW5jKQorICAgICAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9nZXRfcGFydGlhbCh3cmFwcGVkX3NpZywgcGFydGlhbG1ldGhvZCwgKE5vbmUsKSkKKworICAgICAgICAgICAgZmlyc3Rfd3JhcHBlZF9wYXJhbSA9IHR1cGxlKHdyYXBwZWRfc2lnLnBhcmFtZXRlcnMudmFsdWVzKCkpWzBdCisgICAgICAgICAgICBuZXdfcGFyYW1zID0gKGZpcnN0X3dyYXBwZWRfcGFyYW0sKSArIHR1cGxlKHNpZy5wYXJhbWV0ZXJzLnZhbHVlcygpKQorCisgICAgICAgICAgICByZXR1cm4gc2lnLnJlcGxhY2UocGFyYW1ldGVycz1uZXdfcGFyYW1zKQorCisgICAgaWYgX3NpZ25hdHVyZV9pc19idWlsdGluKG9iaik6CisgICAgICAgIHJldHVybiBTaWduYXR1cmUuZnJvbV9idWlsdGluKG9iaikKKworICAgIGlmIGlzZnVuY3Rpb24ob2JqKSBvciBfc2lnbmF0dXJlX2lzX2Z1bmN0aW9ubGlrZShvYmopOgorICAgICAgICAjIElmIGl0J3MgYSBwdXJlIFB5dGhvbiBmdW5jdGlvbiwgb3IgYW4gb2JqZWN0IHRoYXQgaXMgZHVjayB0eXBlCisgICAgICAgICMgb2YgYSBQeXRob24gZnVuY3Rpb24gKEN5dGhvbiBmdW5jdGlvbnMsIGZvciBpbnN0YW5jZSksIHRoZW46CiAgICAgICAgIHJldHVybiBTaWduYXR1cmUuZnJvbV9mdW5jdGlvbihvYmopCiAKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgZnVuY3Rvb2xzLnBhcnRpYWwpOgotICAgICAgICBzaWcgPSBzaWduYXR1cmUob2JqLmZ1bmMpCi0KLSAgICAgICAgbmV3X3BhcmFtcyA9IE9yZGVyZWREaWN0KHNpZy5wYXJhbWV0ZXJzLml0ZW1zKCkpCi0KLSAgICAgICAgcGFydGlhbF9hcmdzID0gb2JqLmFyZ3Mgb3IgKCkKLSAgICAgICAgcGFydGlhbF9rZXl3b3JkcyA9IG9iai5rZXl3b3JkcyBvciB7fQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBiYSA9IHNpZy5iaW5kX3BhcnRpYWwoKnBhcnRpYWxfYXJncywgKipwYXJ0aWFsX2tleXdvcmRzKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGV4OgotICAgICAgICAgICAgbXNnID0gJ3BhcnRpYWwgb2JqZWN0IHshcn0gaGFzIGluY29ycmVjdCBhcmd1bWVudHMnLmZvcm1hdChvYmopCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykgZnJvbSBleAotCi0gICAgICAgIGZvciBhcmdfbmFtZSwgYXJnX3ZhbHVlIGluIGJhLmFyZ3VtZW50cy5pdGVtcygpOgotICAgICAgICAgICAgcGFyYW0gPSBuZXdfcGFyYW1zW2FyZ19uYW1lXQotICAgICAgICAgICAgaWYgYXJnX25hbWUgaW4gcGFydGlhbF9rZXl3b3JkczoKLSAgICAgICAgICAgICAgICAjIFdlIHNldCBhIG5ldyBkZWZhdWx0IHZhbHVlLCBiZWNhdXNlIHRoZSBmb2xsb3dpbmcgY29kZQotICAgICAgICAgICAgICAgICMgaXMgY29ycmVjdDoKLSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyAgID4+PiBkZWYgZm9vKGEpOiBwcmludChhKQotICAgICAgICAgICAgICAgICMgICA+Pj4gcHJpbnQocGFydGlhbChwYXJ0aWFsKGZvbywgYT0xMCksIGE9MjApKCkpCi0gICAgICAgICAgICAgICAgIyAgIDIwCi0gICAgICAgICAgICAgICAgIyAgID4+PiBwcmludChwYXJ0aWFsKHBhcnRpYWwoZm9vLCBhPTEwKSwgYT0yMCkoYT0zMCkpCi0gICAgICAgICAgICAgICAgIyAgIDMwCi0gICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICMgU28sIHdpdGggJ3BhcnRpYWwnIG9iamVjdHMsIHBhc3NpbmcgYSBrZXl3b3JkIGFyZ3VtZW50IGlzCi0gICAgICAgICAgICAgICAgIyBsaWtlIHNldHRpbmcgYSBuZXcgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAgICAgICAjIHBhcmFtZXRlcgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjIFdlIGFsc28gbWFyayB0aGlzIHBhcmFtZXRlciB3aXRoICdfcGFydGlhbF9rd2FyZycKLSAgICAgICAgICAgICAgICAjIGZsYWcuICBMYXRlciwgaW4gJ19iaW5kJywgdGhlICdkZWZhdWx0JyB2YWx1ZSBvZiB0aGlzCi0gICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXIgd2lsbCBiZSBhZGRlZCB0byAna3dhcmdzJywgdG8gc2ltdWxhdGUKLSAgICAgICAgICAgICAgICAjIHRoZSAnZnVuY3Rvb2xzLnBhcnRpYWwnIHJlYWwgY2FsbC4KLSAgICAgICAgICAgICAgICBuZXdfcGFyYW1zW2FyZ19uYW1lXSA9IHBhcmFtLnJlcGxhY2UoZGVmYXVsdD1hcmdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wYXJ0aWFsX2t3YXJnPVRydWUpCi0KLSAgICAgICAgICAgIGVsaWYgKHBhcmFtLmtpbmQgbm90IGluIChfVkFSX0tFWVdPUkQsIF9WQVJfUE9TSVRJT05BTCkgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBhcmFtLl9wYXJ0aWFsX2t3YXJnKToKLSAgICAgICAgICAgICAgICBuZXdfcGFyYW1zLnBvcChhcmdfbmFtZSkKLQotICAgICAgICByZXR1cm4gc2lnLnJlcGxhY2UocGFyYW1ldGVycz1uZXdfcGFyYW1zLnZhbHVlcygpKQorICAgICAgICB3cmFwcGVkX3NpZyA9IHNpZ25hdHVyZShvYmouZnVuYykKKyAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZ2V0X3BhcnRpYWwod3JhcHBlZF9zaWcsIG9iaikKIAogICAgIHNpZyA9IE5vbmUKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSk6CkBAIC0xNDE0LDMyICsxOTEzLDY5IEBACiAKICAgICAgICAgIyBGaXJzdCwgbGV0J3Mgc2VlIGlmIGl0IGhhcyBhbiBvdmVybG9hZGVkIF9fY2FsbF9fIGRlZmluZWQKICAgICAgICAgIyBpbiBpdHMgbWV0YWNsYXNzCi0gICAgICAgIGNhbGwgPSBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2QodHlwZShvYmopLCAnX19jYWxsX18nKQorICAgICAgICBjYWxsID0gX3NpZ25hdHVyZV9nZXRfdXNlcl9kZWZpbmVkX21ldGhvZCh0eXBlKG9iaiksICdfX2NhbGxfXycpCiAgICAgICAgIGlmIGNhbGwgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzaWcgPSBzaWduYXR1cmUoY2FsbCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgTm93IHdlIGNoZWNrIGlmIHRoZSAnb2JqJyBjbGFzcyBoYXMgYSAnX19uZXdfXycgbWV0aG9kCi0gICAgICAgICAgICBuZXcgPSBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2Qob2JqLCAnX19uZXdfXycpCisgICAgICAgICAgICBuZXcgPSBfc2lnbmF0dXJlX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKG9iaiwgJ19fbmV3X18nKQogICAgICAgICAgICAgaWYgbmV3IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHNpZyA9IHNpZ25hdHVyZShuZXcpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgRmluYWxseSwgd2Ugc2hvdWxkIGhhdmUgYXQgbGVhc3QgX19pbml0X18gaW1wbGVtZW50ZWQKLSAgICAgICAgICAgICAgICBpbml0ID0gX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKG9iaiwgJ19faW5pdF9fJykKKyAgICAgICAgICAgICAgICBpbml0ID0gX3NpZ25hdHVyZV9nZXRfdXNlcl9kZWZpbmVkX21ldGhvZChvYmosICdfX2luaXRfXycpCiAgICAgICAgICAgICAgICAgaWYgaW5pdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc2lnID0gc2lnbmF0dXJlKGluaXQpCisKKyAgICAgICAgaWYgc2lnIGlzIE5vbmU6CisgICAgICAgICAgICAjIEF0IHRoaXMgcG9pbnQgd2Uga25vdywgdGhhdCBgb2JqYCBpcyBhIGNsYXNzLCB3aXRoIG5vIHVzZXItCisgICAgICAgICAgICAjIGRlZmluZWQgJ19faW5pdF9fJywgJ19fbmV3X18nLCBvciBjbGFzcy1sZXZlbCAnX19jYWxsX18nCisKKyAgICAgICAgICAgIGZvciBiYXNlIGluIG9iai5fX21yb19fWzotMV06CisgICAgICAgICAgICAgICAgIyBTaW5jZSAnX190ZXh0X3NpZ25hdHVyZV9fJyBpcyBpbXBsZW1lbnRlZCBhcyBhCisgICAgICAgICAgICAgICAgIyBkZXNjcmlwdG9yIHRoYXQgZXh0cmFjdHMgdGV4dCBzaWduYXR1cmUgZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAjIGNsYXNzIGRvY3N0cmluZywgaWYgJ29iaicgaXMgZGVyaXZlZCBmcm9tIGEgYnVpbHRpbgorICAgICAgICAgICAgICAgICMgY2xhc3MsIGl0cyBvd24gJ19fdGV4dF9zaWduYXR1cmVfXycgbWF5IGJlICdOb25lJy4KKyAgICAgICAgICAgICAgICAjIFRoZXJlZm9yZSwgd2UgZ28gdGhyb3VnaCB0aGUgTVJPIChleGNlcHQgdGhlIGxhc3QKKyAgICAgICAgICAgICAgICAjIGNsYXNzIGluIHRoZXJlLCB3aGljaCBpcyAnb2JqZWN0JykgdG8gZmluZCB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAjIGNsYXNzIHdpdGggbm9uLWVtcHR5IHRleHQgc2lnbmF0dXJlLgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdGV4dF9zaWcgPSBiYXNlLl9fdGV4dF9zaWduYXR1cmVfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHRleHRfc2lnOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiAnb2JqJyBjbGFzcyBoYXMgYSBfX3RleHRfc2lnbmF0dXJlX18gYXR0cmlidXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm4gYSBzaWduYXR1cmUgYmFzZWQgb24gaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfc2lnbmF0dXJlX2Zyb21zdHIoU2lnbmF0dXJlLCBvYmosIHRleHRfc2lnKQorCisgICAgICAgICAgICAjIE5vICdfX3RleHRfc2lnbmF0dXJlX18nIHdhcyBmb3VuZCBmb3IgdGhlICdvYmonIGNsYXNzLgorICAgICAgICAgICAgIyBMYXN0IG9wdGlvbiBpcyB0byBjaGVjayBpZiBpdHMgJ19faW5pdF9fJyBpcworICAgICAgICAgICAgIyBvYmplY3QuX19pbml0X18gb3IgdHlwZS5fX2luaXRfXy4KKyAgICAgICAgICAgIGlmIHR5cGUgbm90IGluIG9iai5fX21yb19fOgorICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhIGNsYXNzIChub3QgbWV0YWNsYXNzKSwgYnV0IG5vIHVzZXItZGVmaW5lZAorICAgICAgICAgICAgICAgICMgX19pbml0X18gb3IgX19uZXdfXyBmb3IgaXQKKyAgICAgICAgICAgICAgICBpZiBvYmouX19pbml0X18gaXMgb2JqZWN0Ll9faW5pdF9fOgorICAgICAgICAgICAgICAgICAgICAjIFJldHVybiBhIHNpZ25hdHVyZSBvZiAnb2JqZWN0JyBidWlsdGluLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmF0dXJlKG9iamVjdCkKKwogICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uob2JqLCBfTm9uVXNlckRlZmluZWRDYWxsYWJsZXMpOgogICAgICAgICAjIEFuIG9iamVjdCB3aXRoIF9fY2FsbF9fCiAgICAgICAgICMgV2UgYWxzbyBjaGVjayB0aGF0IHRoZSAnb2JqJyBpcyBub3QgYW4gaW5zdGFuY2Ugb2YKICAgICAgICAgIyBfV3JhcHBlckRlc2NyaXB0b3Igb3IgX01ldGhvZFdyYXBwZXIgdG8gYXZvaWQKICAgICAgICAgIyBpbmZpbml0ZSByZWN1cnNpb24gKGFuZCBldmVuIHBvdGVudGlhbCBzZWdmYXVsdCkKLSAgICAgICAgY2FsbCA9IF9nZXRfdXNlcl9kZWZpbmVkX21ldGhvZCh0eXBlKG9iaiksICdfX2NhbGxfXycpCisgICAgICAgIGNhbGwgPSBfc2lnbmF0dXJlX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKHR5cGUob2JqKSwgJ19fY2FsbF9fJykKICAgICAgICAgaWYgY2FsbCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNpZyA9IHNpZ25hdHVyZShjYWxsKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNpZyA9IHNpZ25hdHVyZShjYWxsKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXg6CisgICAgICAgICAgICAgICAgbXNnID0gJ25vIHNpZ25hdHVyZSBmb3VuZCBmb3IgeyFyfScuZm9ybWF0KG9iaikKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykgZnJvbSBleAogCiAgICAgaWYgc2lnIGlzIG5vdCBOb25lOgogICAgICAgICAjIEZvciBjbGFzc2VzIGFuZCBvYmplY3RzIHdlIHNraXAgdGhlIGZpcnN0IHBhcmFtZXRlciBvZiB0aGVpcgogICAgICAgICAjIF9fY2FsbF9fLCBfX25ld19fLCBvciBfX2luaXRfXyBtZXRob2RzCi0gICAgICAgIHJldHVybiBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPXR1cGxlKHNpZy5wYXJhbWV0ZXJzLnZhbHVlcygpKVsxOl0pCisgICAgICAgIHJldHVybiBfc2lnbmF0dXJlX2JvdW5kX21ldGhvZChzaWcpCiAKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZXMuQnVpbHRpbkZ1bmN0aW9uVHlwZSk6CiAgICAgICAgICMgUmFpc2UgYSBuaWNlciBlcnJvciBtZXNzYWdlIGZvciBidWlsdGlucwpAQCAtMTQ4NiwxMCArMjAyMiwxMiBAQAogICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGFzIGEgc3RyaW5nLgogICAgICogZGVmYXVsdCA6IG9iamVjdAogICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciBpZiBzcGVjaWZpZWQuICBJZiB0aGUKLSAgICAgICAgcGFyYW1ldGVyIGhhcyBubyBkZWZhdWx0IHZhbHVlLCB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LgorICAgICAgICBwYXJhbWV0ZXIgaGFzIG5vIGRlZmF1bHQgdmFsdWUsIHRoaXMgYXR0cmlidXRlIGlzIHNldCB0bworICAgICAgICBgUGFyYW1ldGVyLmVtcHR5YC4KICAgICAqIGFubm90YXRpb24KICAgICAgICAgVGhlIGFubm90YXRpb24gZm9yIHRoZSBwYXJhbWV0ZXIgaWYgc3BlY2lmaWVkLiAgSWYgdGhlCi0gICAgICAgIHBhcmFtZXRlciBoYXMgbm8gYW5ub3RhdGlvbiwgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldC4KKyAgICAgICAgcGFyYW1ldGVyIGhhcyBubyBhbm5vdGF0aW9uLCB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQgdG8KKyAgICAgICAgYFBhcmFtZXRlci5lbXB0eWAuCiAgICAgKiBraW5kIDogc3RyCiAgICAgICAgIERlc2NyaWJlcyBob3cgYXJndW1lbnQgdmFsdWVzIGFyZSBib3VuZCB0byB0aGUgcGFyYW1ldGVyLgogICAgICAgICBQb3NzaWJsZSB2YWx1ZXM6IGBQYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZYCwKQEAgLTE1MjIsMTcgKzIwNjAsMTYgQEAKICAgICAgICAgc2VsZi5fZGVmYXVsdCA9IGRlZmF1bHQKICAgICAgICAgc2VsZi5fYW5ub3RhdGlvbiA9IGFubm90YXRpb24KIAotICAgICAgICBpZiBuYW1lIGlzIE5vbmU6Ci0gICAgICAgICAgICBpZiBraW5kICE9IF9QT1NJVElPTkFMX09OTFk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm9uZSBpcyBub3QgYSB2YWxpZCBuYW1lIGZvciBhICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub24tcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlciIpCi0gICAgICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbmFtZSA9IHN0cihuYW1lKQotICAgICAgICAgICAgaWYga2luZCAhPSBfUE9TSVRJT05BTF9PTkxZIGFuZCBub3QgbmFtZS5pc2lkZW50aWZpZXIoKToKLSAgICAgICAgICAgICAgICBtc2cgPSAneyFyfSBpcyBub3QgYSB2YWxpZCBwYXJhbWV0ZXIgbmFtZScuZm9ybWF0KG5hbWUpCi0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCi0gICAgICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBpZiBuYW1lIGlzIF9lbXB0eToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ25hbWUgaXMgYSByZXF1aXJlZCBhdHRyaWJ1dGUgZm9yIFBhcmFtZXRlcicpCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBtdXN0IGJlIGEgc3RyLCBub3QgYSB7IXJ9Ii5mb3JtYXQobmFtZSkpCisKKyAgICAgICAgaWYgbm90IG5hbWUuaXNpZGVudGlmaWVyKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7IXJ9IGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lJy5mb3JtYXQobmFtZSkpCisKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKIAogICAgICAgICBzZWxmLl9wYXJ0aWFsX2t3YXJnID0gX3BhcnRpYWxfa3dhcmcKIApAQCAtMTU3NiwxMiArMjExMyw3IEBACiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAga2luZCA9IHNlbGYua2luZAotCiAgICAgICAgIGZvcm1hdHRlZCA9IHNlbGYuX25hbWUKLSAgICAgICAgaWYga2luZCA9PSBfUE9TSVRJT05BTF9PTkxZOgotICAgICAgICAgICAgaWYgZm9ybWF0dGVkIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZm9ybWF0dGVkID0gJycKLSAgICAgICAgICAgIGZvcm1hdHRlZCA9ICc8e30+Jy5mb3JtYXQoZm9ybWF0dGVkKQogCiAgICAgICAgICMgQWRkIGFubm90YXRpb24gYW5kIGRlZmF1bHQgdmFsdWUKICAgICAgICAgaWYgc2VsZi5fYW5ub3RhdGlvbiBpcyBub3QgX2VtcHR5OgpAQCAtMTYwMyw2ICsyMTM1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc2VsZiksIHNlbGYubmFtZSkKIAogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAjIE5COiBXZSBkZWxpYmVyYXRlbHkgZG8gbm90IGNvbXBhcmUgJ19wYXJ0aWFsX2t3YXJnJyBhdHRyaWJ1dGVzCisgICAgICAgICMgaGVyZS4gSW1hZ2luZSB3ZSBoYXZlIGEgZm9sbG93aW5nIHNpdHVhdGlvbjoKKyAgICAgICAgIworICAgICAgICAjICAgIGRlZiBmb28oYSwgYj0xKTogcGFzcworICAgICAgICAjICAgIGRlZiBiYXIoYSwgYik6IHBhc3MKKyAgICAgICAgIyAgICBiYXIyID0gZnVuY3Rvb2xzLnBhcnRpYWwoYmFyLCBiPTEpCisgICAgICAgICMKKyAgICAgICAgIyBGb3IgdGhlIGFib3ZlIHNjZW5hcmlvLCBzaWduYXR1cmVzIGZvciBgZm9vYCBhbmQgYGJhcjJgIHNob3VsZAorICAgICAgICAjIGJlIGVxdWFsLiAgJ19wYXJ0aWFsX2t3YXJnJyBhdHRyaWJ1dGUgaXMgYW4gaW50ZXJuYWwgZmxhZywgdG8KKyAgICAgICAgIyBkaXN0aW5ndWlzaCBiZXR3ZWVuIGtleXdvcmQgcGFyYW1ldGVycyB3aXRoIGRlZmF1bHRzIGFuZAorICAgICAgICAjIGtleXdvcmQgcGFyYW1ldGVycyB3aGljaCBnb3QgdGhlaXIgZGVmYXVsdHMgZnJvbSBmdW5jdG9vbHMucGFydGlhbAogICAgICAgICByZXR1cm4gKGlzc3ViY2xhc3Mob3RoZXIuX19jbGFzc19fLCBQYXJhbWV0ZXIpIGFuZAogICAgICAgICAgICAgICAgIHNlbGYuX25hbWUgPT0gb3RoZXIuX25hbWUgYW5kCiAgICAgICAgICAgICAgICAgc2VsZi5fa2luZCA9PSBvdGhlci5fa2luZCBhbmQKQEAgLTE3MjAsNyArMjI2Myw3IEBACiAgICAgKiByZXR1cm5fYW5ub3RhdGlvbiA6IG9iamVjdAogICAgICAgICBUaGUgYW5ub3RhdGlvbiBmb3IgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbiBpZiBzcGVjaWZpZWQuCiAgICAgICAgIElmIHRoZSBmdW5jdGlvbiBoYXMgbm8gYW5ub3RhdGlvbiBmb3IgaXRzIHJldHVybiB0eXBlLCB0aGlzCi0gICAgICAgIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LgorICAgICAgICBhdHRyaWJ1dGUgaXMgc2V0IHRvIGBTaWduYXR1cmUuZW1wdHlgLgogICAgICogYmluZCgqYXJncywgKiprd2FyZ3MpIC0+IEJvdW5kQXJndW1lbnRzCiAgICAgICAgIENyZWF0ZXMgYSBtYXBwaW5nIGZyb20gcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMgdG8KICAgICAgICAgcGFyYW1ldGVycy4KQEAgLTE3NDgsMjQgKzIyOTEsNDEgQEAKICAgICAgICAgICAgIGlmIF9fdmFsaWRhdGVfcGFyYW1ldGVyc19fOgogICAgICAgICAgICAgICAgIHBhcmFtcyA9IE9yZGVyZWREaWN0KCkKICAgICAgICAgICAgICAgICB0b3Bfa2luZCA9IF9QT1NJVElPTkFMX09OTFkKKyAgICAgICAgICAgICAgICBraW5kX2RlZmF1bHRzID0gRmFsc2UKIAogICAgICAgICAgICAgICAgIGZvciBpZHgsIHBhcmFtIGluIGVudW1lcmF0ZShwYXJhbWV0ZXJzKToKICAgICAgICAgICAgICAgICAgICAga2luZCA9IHBhcmFtLmtpbmQKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBhcmFtLm5hbWUKKwogICAgICAgICAgICAgICAgICAgICBpZiBraW5kIDwgdG9wX2tpbmQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAnd3JvbmcgcGFyYW1ldGVyIG9yZGVyOiB7fSBiZWZvcmUge30nCi0gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBtc2cuZm9ybWF0KHRvcF9raW5kLCBwYXJhbS5raW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gbXNnLmZvcm1hdCh0b3Bfa2luZCwga2luZCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBlbGlmIGtpbmQgPiB0b3Bfa2luZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRfZGVmYXVsdHMgPSBGYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgdG9wX2tpbmQgPSBraW5kCiAKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBhcmFtLm5hbWUKLSAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHN0cihpZHgpCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbSA9IHBhcmFtLnJlcGxhY2UobmFtZT1uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCBpbiAoX1BPU0lUSU9OQUxfT05MWSwgX1BPU0lUSU9OQUxfT1JfS0VZV09SRCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwYXJhbS5fcGFydGlhbF9rd2FyZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHdlIGhhdmUgYSBwb3NpdGlvbmFsLW9ubHkgb3IgcG9zaXRpb25hbC1vci1rZXl3b3JkCisgICAgICAgICAgICAgICAgICAgICAgICAjIHBhcmFtZXRlciwgdGhhdCBkb2VzIG5vdCBoYXZlIGl0cyBkZWZhdWx0IHZhbHVlIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgIyBieSAnZnVuY3Rvb2xzLnBhcnRpYWwnIG9yIG90aGVyICJwYXJ0aWFsIiBzaWduYXR1cmU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXJhbS5kZWZhdWx0IGlzIF9lbXB0eToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBraW5kX2RlZmF1bHRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vIGRlZmF1bHQgZm9yIHRoaXMgcGFyYW1ldGVyLCBidXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJldmlvdXMgcGFyYW1ldGVyIG9mIHRoZSBzYW1lIGtpbmQgaGFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICdub24tZGVmYXVsdCBhcmd1bWVudCBmb2xsb3dzIGRlZmF1bHQgJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmd1bWVudCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlcmUgaXMgYSBkZWZhdWx0IGZvciB0aGlzIHBhcmFtZXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kX2RlZmF1bHRzID0gVHJ1ZQogCiAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gcGFyYW1zOgogICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gJ2R1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZTogeyFyfScuZm9ybWF0KG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKwogICAgICAgICAgICAgICAgICAgICBwYXJhbXNbbmFtZV0gPSBwYXJhbQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwYXJhbXMgPSBPcmRlcmVkRGljdCgoKHBhcmFtLm5hbWUsIHBhcmFtKQpAQCAtMTc3OCw4ICsyMzM4LDE0IEBACiAgICAgZGVmIGZyb21fZnVuY3Rpb24oY2xzLCBmdW5jKToKICAgICAgICAgJycnQ29uc3RydWN0cyBTaWduYXR1cmUgZm9yIHRoZSBnaXZlbiBweXRob24gZnVuY3Rpb24nJycKIAotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmdW5jLCB0eXBlcy5GdW5jdGlvblR5cGUpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIG5vdCBhIFB5dGhvbiBmdW5jdGlvbicuZm9ybWF0KGZ1bmMpKQorICAgICAgICBpc19kdWNrX2Z1bmN0aW9uID0gRmFsc2UKKyAgICAgICAgaWYgbm90IGlzZnVuY3Rpb24oZnVuYyk6CisgICAgICAgICAgICBpZiBfc2lnbmF0dXJlX2lzX2Z1bmN0aW9ubGlrZShmdW5jKToKKyAgICAgICAgICAgICAgICBpc19kdWNrX2Z1bmN0aW9uID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIElmIGl0J3Mgbm90IGEgcHVyZSBQeXRob24gZnVuY3Rpb24sIGFuZCBub3QgYSBkdWNrIHR5cGUKKyAgICAgICAgICAgICAgICAjIG9mIHB1cmUgZnVuY3Rpb246CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIG5vdCBhIFB5dGhvbiBmdW5jdGlvbicuZm9ybWF0KGZ1bmMpKQogCiAgICAgICAgIFBhcmFtZXRlciA9IGNscy5fcGFyYW1ldGVyX2NscwogCkBAIC0xODE2LDcgKzIzODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdHNbb2Zmc2V0XSkpCiAKICAgICAgICAgIyAqYXJncwotICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiAweDA0OgorICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiBDT19WQVJBUkdTOgogICAgICAgICAgICAgbmFtZSA9IGFyZ19uYW1lc1twb3NfY291bnQgKyBrZXl3b3JkX29ubHlfY291bnRdCiAgICAgICAgICAgICBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnMuZ2V0KG5hbWUsIF9lbXB0eSkKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBhbm5vdGF0aW9uPWFubm90YXRpb24sCkBAIC0xODMzLDkgKzIzOTksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9X0tFWVdPUkRfT05MWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHQpKQogICAgICAgICAjICoqa3dhcmdzCi0gICAgICAgIGlmIGZ1bmNfY29kZS5jb19mbGFncyAmIDB4MDg6CisgICAgICAgIGlmIGZ1bmNfY29kZS5jb19mbGFncyAmIENPX1ZBUktFWVdPUkRTOgogICAgICAgICAgICAgaW5kZXggPSBwb3NfY291bnQgKyBrZXl3b3JkX29ubHlfY291bnQKLSAgICAgICAgICAgIGlmIGZ1bmNfY29kZS5jb19mbGFncyAmIDB4MDQ6CisgICAgICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiBDT19WQVJBUkdTOgogICAgICAgICAgICAgICAgIGluZGV4ICs9IDEKIAogICAgICAgICAgICAgbmFtZSA9IGFyZ19uYW1lc1tpbmRleF0KQEAgLTE4NDMsOSArMjQwOSwyMyBAQAogICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoUGFyYW1ldGVyKG5hbWUsIGFubm90YXRpb249YW5ub3RhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kPV9WQVJfS0VZV09SRCkpCiAKKyAgICAgICAgIyBJcyAnZnVuYycgaXMgYSBwdXJlIFB5dGhvbiBmdW5jdGlvbiAtIGRvbid0IHZhbGlkYXRlIHRoZQorICAgICAgICAjIHBhcmFtZXRlcnMgbGlzdCAoZm9yIGNvcnJlY3Qgb3JkZXIgYW5kIGRlZmF1bHRzKSwgaXQgc2hvdWxkIGJlIE9LLgogICAgICAgICByZXR1cm4gY2xzKHBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2Fubm90YXRpb249YW5ub3RhdGlvbnMuZ2V0KCdyZXR1cm4nLCBfZW1wdHkpLAotICAgICAgICAgICAgICAgICAgIF9fdmFsaWRhdGVfcGFyYW1ldGVyc19fPUZhbHNlKQorICAgICAgICAgICAgICAgICAgIF9fdmFsaWRhdGVfcGFyYW1ldGVyc19fPWlzX2R1Y2tfZnVuY3Rpb24pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9idWlsdGluKGNscywgZnVuYyk6CisgICAgICAgIGlmIG5vdCBfc2lnbmF0dXJlX2lzX2J1aWx0aW4oZnVuYyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInshcn0gaXMgbm90IGEgUHl0aG9uIGJ1aWx0aW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiIuZm9ybWF0KGZ1bmMpKQorCisgICAgICAgIHMgPSBnZXRhdHRyKGZ1bmMsICJfX3RleHRfc2lnbmF0dXJlX18iLCBOb25lKQorICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vIHNpZ25hdHVyZSBmb3VuZCBmb3IgYnVpbHRpbiB7IXJ9Ii5mb3JtYXQoZnVuYykpCisKKyAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZnJvbXN0cihjbHMsIGZ1bmMsIHMpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgcGFyYW1ldGVycyhzZWxmKToKQEAgLTE5NTUsNiArMjUzNSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzX2V4ID0gKHBhcmFtLCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE5vIGRlZmF1bHQsIG5vdCBWQVJfS0VZV09SRCwgbm90IFZBUl9QT1NJVElPTkFMLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBub3QgaW4gYGt3YXJnc2AKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhcnRpYWw6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc19leCA9IChwYXJhbSwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTE5OTMsMTkgKzI1NzUsMTcgQEAKICAgICAgICAgIyBrZXl3b3JkIGFyZ3VtZW50cwogICAgICAgICBrd2FyZ3NfcGFyYW0gPSBOb25lCiAgICAgICAgIGZvciBwYXJhbSBpbiBpdGVydG9vbHMuY2hhaW4ocGFyYW1ldGVyc19leCwgcGFyYW1ldGVycyk6Ci0gICAgICAgICAgICBpZiBwYXJhbS5raW5kID09IF9QT1NJVElPTkFMX09OTFk6Ci0gICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gY2FzZSBvZiBhIHByb3Blcmx5IGJ1aWx0Ci0gICAgICAgICAgICAgICAgIyBTaWduYXR1cmUgb2JqZWN0IChidXQgbGV0J3MgaGF2ZSB0aGlzIGNoZWNrIGhlcmUKLSAgICAgICAgICAgICAgICAjIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW91ciBqdXN0IGluIGNhc2UpCi0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7YXJnIXJ9IHBhcmFtZXRlciBpcyBwb3NpdGlvbmFsIG9ubHksICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1dCB3YXMgcGFzc2VkIGFzIGEga2V5d29yZCcuIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KGFyZz1wYXJhbS5uYW1lKSkKLQogICAgICAgICAgICAgaWYgcGFyYW0ua2luZCA9PSBfVkFSX0tFWVdPUkQ6CiAgICAgICAgICAgICAgICAgIyBNZW1vcml6ZSB0aGF0IHdlIGhhdmUgYSAnKiprd2FyZ3MnLWxpa2UgcGFyYW1ldGVyCiAgICAgICAgICAgICAgICAga3dhcmdzX3BhcmFtID0gcGFyYW0KICAgICAgICAgICAgICAgICBjb250aW51ZQogCisgICAgICAgICAgICBpZiBwYXJhbS5raW5kID09IF9WQVJfUE9TSVRJT05BTDoKKyAgICAgICAgICAgICAgICAjIE5hbWVkIGFyZ3VtZW50cyBkb24ndCByZWZlciB0byAnKmFyZ3MnLWxpa2UgcGFyYW1ldGVycy4KKyAgICAgICAgICAgICAgICAjIFdlIG9ubHkgYXJyaXZlIGhlcmUgaWYgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGVuZGVkCisgICAgICAgICAgICAgICAgIyBiZWZvcmUgcmVhY2hpbmcgdGhlIGxhc3QgcGFyYW1ldGVyIGJlZm9yZSAqYXJncy4KKyAgICAgICAgICAgICAgICBjb250aW51ZQorCiAgICAgICAgICAgICBwYXJhbV9uYW1lID0gcGFyYW0ubmFtZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGFyZ192YWwgPSBrd2FyZ3MucG9wKHBhcmFtX25hbWUpCkBAIC0yMDIwLDYgKzI2MDAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChhcmc9cGFyYW1fbmFtZSkpIGZyb20gTm9uZQogCiAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgPT0gX1BPU0lUSU9OQUxfT05MWToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gY2FzZSBvZiBhIHByb3Blcmx5IGJ1aWx0CisgICAgICAgICAgICAgICAgICAgICMgU2lnbmF0dXJlIG9iamVjdCAoYnV0IGxldCdzIGhhdmUgdGhpcyBjaGVjayBoZXJlCisgICAgICAgICAgICAgICAgICAgICMgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3VyIGp1c3QgaW4gY2FzZSkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7YXJnIXJ9IHBhcmFtZXRlciBpcyBwb3NpdGlvbmFsIG9ubHksICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidXQgd2FzIHBhc3NlZCBhcyBhIGtleXdvcmQnLiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoYXJnPXBhcmFtLm5hbWUpKQorCiAgICAgICAgICAgICAgICAgYXJndW1lbnRzW3BhcmFtX25hbWVdID0gYXJnX3ZhbAogCiAgICAgICAgIGlmIGt3YXJnczoKQEAgLTIwMzEsMjcgKzI2MTksMzcgQEAKIAogICAgICAgICByZXR1cm4gc2VsZi5fYm91bmRfYXJndW1lbnRzX2NscyhzZWxmLCBhcmd1bWVudHMpCiAKLSAgICBkZWYgYmluZChfX2JpbmRfc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICBkZWYgYmluZCgqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAnJydHZXQgYSBCb3VuZEFyZ3VtZW50cyBvYmplY3QsIHRoYXQgbWFwcyB0aGUgcGFzc2VkIGBhcmdzYAogICAgICAgICBhbmQgYGt3YXJnc2AgdG8gdGhlIGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlLiAgUmFpc2VzIGBUeXBlRXJyb3JgCiAgICAgICAgIGlmIHRoZSBwYXNzZWQgYXJndW1lbnRzIGNhbiBub3QgYmUgYm91bmQuCiAgICAgICAgICcnJwotICAgICAgICByZXR1cm4gX19iaW5kX3NlbGYuX2JpbmQoYXJncywga3dhcmdzKQorICAgICAgICByZXR1cm4gYXJnc1swXS5fYmluZChhcmdzWzE6XSwga3dhcmdzKQogCi0gICAgZGVmIGJpbmRfcGFydGlhbChfX2JpbmRfc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICBkZWYgYmluZF9wYXJ0aWFsKCphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICcnJ0dldCBhIEJvdW5kQXJndW1lbnRzIG9iamVjdCwgdGhhdCBwYXJ0aWFsbHkgbWFwcyB0aGUKICAgICAgICAgcGFzc2VkIGBhcmdzYCBhbmQgYGt3YXJnc2AgdG8gdGhlIGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlLgogICAgICAgICBSYWlzZXMgYFR5cGVFcnJvcmAgaWYgdGhlIHBhc3NlZCBhcmd1bWVudHMgY2FuIG5vdCBiZSBib3VuZC4KICAgICAgICAgJycnCi0gICAgICAgIHJldHVybiBfX2JpbmRfc2VsZi5fYmluZChhcmdzLCBrd2FyZ3MsIHBhcnRpYWw9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGFyZ3NbMF0uX2JpbmQoYXJnc1sxOl0sIGt3YXJncywgcGFydGlhbD1UcnVlKQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIHJlbmRlcl9wb3Nfb25seV9zZXBhcmF0b3IgPSBGYWxzZQogICAgICAgICByZW5kZXJfa3dfb25seV9zZXBhcmF0b3IgPSBUcnVlCi0gICAgICAgIGZvciBpZHgsIHBhcmFtIGluIGVudW1lcmF0ZShzZWxmLnBhcmFtZXRlcnMudmFsdWVzKCkpOgorICAgICAgICBmb3IgcGFyYW0gaW4gc2VsZi5wYXJhbWV0ZXJzLnZhbHVlcygpOgogICAgICAgICAgICAgZm9ybWF0dGVkID0gc3RyKHBhcmFtKQogCiAgICAgICAgICAgICBraW5kID0gcGFyYW0ua2luZAorCisgICAgICAgICAgICBpZiBraW5kID09IF9QT1NJVElPTkFMX09OTFk6CisgICAgICAgICAgICAgICAgcmVuZGVyX3Bvc19vbmx5X3NlcGFyYXRvciA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgcmVuZGVyX3Bvc19vbmx5X3NlcGFyYXRvcjoKKyAgICAgICAgICAgICAgICAjIEl0J3Mgbm90IGEgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlciwgYW5kIHRoZSBmbGFnCisgICAgICAgICAgICAgICAgIyBpcyBzZXQgdG8gJ1RydWUnICh0aGVyZSB3ZXJlIHBvcy1vbmx5IHBhcmFtcyBiZWZvcmUuKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKQorICAgICAgICAgICAgICAgIHJlbmRlcl9wb3Nfb25seV9zZXBhcmF0b3IgPSBGYWxzZQorCiAgICAgICAgICAgICBpZiBraW5kID09IF9WQVJfUE9TSVRJT05BTDoKICAgICAgICAgICAgICAgICAjIE9LLCB3ZSBoYXZlIGFuICcqYXJncyctbGlrZSBwYXJhbWV0ZXIsIHNvIHdlIHdvbid0IG5lZWQKICAgICAgICAgICAgICAgICAjIGEgJyonIHRvIHNlcGFyYXRlIGtleXdvcmQtb25seSBhcmd1bWVudHMKQEAgLTIwNjcsNiArMjY2NSwxMSBAQAogCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGZvcm1hdHRlZCkKIAorICAgICAgICBpZiByZW5kZXJfcG9zX29ubHlfc2VwYXJhdG9yOgorICAgICAgICAgICAgIyBUaGVyZSB3ZXJlIG9ubHkgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMsIGhlbmNlIHRoZQorICAgICAgICAgICAgIyBmbGFnIHdhcyBub3QgcmVzZXQgdG8gJ0ZhbHNlJworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpCisKICAgICAgICAgcmVuZGVyZWQgPSAnKHt9KScuZm9ybWF0KCcsICcuam9pbihyZXN1bHQpKQogCiAgICAgICAgIGlmIHNlbGYucmV0dXJuX2Fubm90YXRpb24gaXMgbm90IF9lbXB0eToKQEAgLTIwNzQsMyArMjY3Nyw2NCBAQAogICAgICAgICAgICAgcmVuZGVyZWQgKz0gJyAtPiB7fScuZm9ybWF0KGFubm8pCiAKICAgICAgICAgcmV0dXJuIHJlbmRlcmVkCisKK2RlZiBfbWFpbigpOgorICAgICIiIiBMb2dpYyBmb3IgaW5zcGVjdGluZyBhbiBvYmplY3QgZ2l2ZW4gYXQgY29tbWFuZCBsaW5lICIiIgorICAgIGltcG9ydCBhcmdwYXJzZQorICAgIGltcG9ydCBpbXBvcnRsaWIKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAnb2JqZWN0JywKKyAgICAgICAgIGhlbHA9IlRoZSBvYmplY3QgdG8gYmUgYW5hbHlzZWQuICIKKyAgICAgICAgICAgICAgIkl0IHN1cHBvcnRzIHRoZSAnbW9kdWxlOnF1YWxuYW1lJyBzeW50YXgiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICctZCcsICctLWRldGFpbHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICBoZWxwPSdEaXNwbGF5IGluZm8gYWJvdXQgdGhlIG1vZHVsZSByYXRoZXIgdGhhbiBpdHMgc291cmNlIGNvZGUnKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIHRhcmdldCA9IGFyZ3Mub2JqZWN0CisgICAgbW9kX25hbWUsIGhhc19hdHRycywgYXR0cnMgPSB0YXJnZXQucGFydGl0aW9uKCI6IikKKyAgICB0cnk6CisgICAgICAgIG9iaiA9IG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG1vZF9uYW1lKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICBtc2cgPSAiRmFpbGVkIHRvIGltcG9ydCB7fSAoe306IHt9KSIuZm9ybWF0KG1vZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZXhjKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMpCisgICAgICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBleGl0KDIpCisKKyAgICBpZiBoYXNfYXR0cnM6CisgICAgICAgIHBhcnRzID0gYXR0cnMuc3BsaXQoIi4iKQorICAgICAgICBvYmogPSBtb2R1bGUKKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgcGFydCkKKworICAgIGlmIG1vZHVsZS5fX25hbWVfXyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgIHByaW50KCJDYW4ndCBnZXQgaW5mbyBmb3IgYnVpbHRpbiBtb2R1bGVzLiIsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgZXhpdCgxKQorCisgICAgaWYgYXJncy5kZXRhaWxzOgorICAgICAgICBwcmludCgnVGFyZ2V0OiB7fScuZm9ybWF0KHRhcmdldCkpCisgICAgICAgIHByaW50KCdPcmlnaW46IHt9Jy5mb3JtYXQoZ2V0c291cmNlZmlsZShtb2R1bGUpKSkKKyAgICAgICAgcHJpbnQoJ0NhY2hlZDoge30nLmZvcm1hdChtb2R1bGUuX19jYWNoZWRfXykpCisgICAgICAgIGlmIG9iaiBpcyBtb2R1bGU6CisgICAgICAgICAgICBwcmludCgnTG9hZGVyOiB7fScuZm9ybWF0KHJlcHIobW9kdWxlLl9fbG9hZGVyX18pKSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgICAgICBwcmludCgnU3VibW9kdWxlIHNlYXJjaCBwYXRoOiB7fScuZm9ybWF0KG1vZHVsZS5fX3BhdGhfXykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX18sIGxpbmVubyA9IGZpbmRzb3VyY2Uob2JqKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50KCdMaW5lOiB7fScuZm9ybWF0KGxpbmVubykpCisKKyAgICAgICAgcHJpbnQoJ1xuJykKKyAgICBlbHNlOgorICAgICAgICBwcmludChnZXRzb3VyY2Uob2JqKSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9pby5weSBiL0xpYi9pby5weQppbmRleCBiZGE0ZGVmLi4zOTg3OGI4IDEwMDY0NAotLS0gYS9MaWIvaW8ucHkKKysrIGIvTGliL2lvLnB5CkBAIC00LDcgKzQsNyBAQAogQXQgdGhlIHRvcCBvZiB0aGUgSS9PIGhpZXJhcmNoeSBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBJT0Jhc2UuIEl0CiBkZWZpbmVzIHRoZSBiYXNpYyBpbnRlcmZhY2UgdG8gYSBzdHJlYW0uIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlcmUgaXMgbm8KIHNlcGFyYXRpb24gYmV0d2VlbiByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHN0cmVhbXM7IGltcGxlbWVudGF0aW9ucyBhcmUKLWFsbG93ZWQgdG8gcmFpc2UgYW4gSU9FcnJvciBpZiB0aGV5IGRvIG5vdCBzdXBwb3J0IGEgZ2l2ZW4gb3BlcmF0aW9uLgorYWxsb3dlZCB0byByYWlzZSBhbiBPU0Vycm9yIGlmIHRoZXkgZG8gbm90IHN1cHBvcnQgYSBnaXZlbiBvcGVyYXRpb24uCiAKIEV4dGVuZGluZyBJT0Jhc2UgaXMgUmF3SU9CYXNlIHdoaWNoIGRlYWxzIHNpbXBseSB3aXRoIHRoZSByZWFkaW5nIGFuZAogd3JpdGluZyBvZiByYXcgYnl0ZXMgdG8gYSBzdHJlYW0uIEZpbGVJTyBzdWJjbGFzc2VzIFJhd0lPQmFzZSB0byBwcm92aWRlCmRpZmYgLS1naXQgYS9MaWIvaXBhZGRyZXNzLnB5IGIvTGliL2lwYWRkcmVzcy5weQppbmRleCBlY2YzZjQ0Li5kZDcxMzQ3IDEwMDY0NAotLS0gYS9MaWIvaXBhZGRyZXNzLnB5CisrKyBiL0xpYi9pcGFkZHJlc3MucHkKQEAgLTEwMzAsMTMgKzEwMzAsMjUgQEAKICAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwcml2YXRlIG5ldHdvcmtzLgogCiAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyIFJGQyA0MTkzLgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkgb3IgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkuCiAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiAoc2VsZi5uZXR3b3JrX2FkZHJlc3MuaXNfcHJpdmF0ZSBhbmQKICAgICAgICAgICAgICAgICBzZWxmLmJyb2FkY2FzdF9hZGRyZXNzLmlzX3ByaXZhdGUpCiAKICAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZ2xvYmFsKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHB1YmxpYyBuZXR3b3Jrcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5IG9yIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuaXNfcHJpdmF0ZQorCisgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX3Vuc3BlY2lmaWVkKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoZSBhZGRyZXNzIGlzIHVuc3BlY2lmaWVkLgogCkBAIC0xMjc2LDE5ICsxMjg4LDMwIEBACiAgICAgICAgIHJldHVybiBzZWxmIGluIHJlc2VydmVkX25ldHdvcmsKIAogICAgIEBwcm9wZXJ0eQorICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKICAgICBkZWYgaXNfcHJpdmF0ZShzZWxmKToKICAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwcml2YXRlIG5ldHdvcmtzLgogCiAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyIFJGQyAxOTE4LgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHByaXZhdGVfMTAgPSBJUHY0TmV0d29yaygnMTAuMC4wLjAvOCcpCi0gICAgICAgIHByaXZhdGVfMTcyID0gSVB2NE5ldHdvcmsoJzE3Mi4xNi4wLjAvMTInKQotICAgICAgICBwcml2YXRlXzE5MiA9IElQdjROZXR3b3JrKCcxOTIuMTY4LjAuMC8xNicpCi0gICAgICAgIHJldHVybiAoc2VsZiBpbiBwcml2YXRlXzEwIG9yCi0gICAgICAgICAgICAgICAgc2VsZiBpbiBwcml2YXRlXzE3MiBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gcHJpdmF0ZV8xOTIpCisgICAgICAgIHJldHVybiAoc2VsZiBpbiBJUHY0TmV0d29yaygnMC4wLjAuMC84Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxMC4wLjAuMC84Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxMjcuMC4wLjAvOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTY5LjI1NC4wLjAvMTYnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE3Mi4xNi4wLjAvMTInKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5Mi4wLjAuMC8yOScpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjAuMC4xNzAvMzEnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5Mi4wLjIuMC8yNCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjE2OC4wLjAvMTYnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5OC4xOC4wLjAvMTUnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5OC41MS4xMDAuMC8yNCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMjAzLjAuMTEzLjAvMjQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzI0MC4wLjAuMC80Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcyNTUuMjU1LjI1NS4yNTUvMzInKSkKKwogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX211bHRpY2FzdChzZWxmKToKQEAgLTE1MDQsNiArMTUyNywyMSBAQAogICAgICAgICBpZiBzZWxmLl9wcmVmaXhsZW4gPT0gKHNlbGYuX21heF9wcmVmaXhsZW4gLSAxKToKICAgICAgICAgICAgIHNlbGYuaG9zdHMgPSBzZWxmLl9faXRlcl9fCiAKKyAgICBAcHJvcGVydHkKKyAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCisgICAgZGVmIGlzX2dsb2JhbChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwdWJsaWMgbmV0d29ya3MuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyBub3QgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIChub3QgKHNlbGYubmV0d29ya19hZGRyZXNzIGluIElQdjROZXR3b3JrKCcxMDAuNjQuMC4wLzEwJykgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MgaW4gSVB2NE5ldHdvcmsoJzEwMC42NC4wLjAvMTAnKSkgYW5kCisgICAgICAgICAgICAgICAgbm90IHNlbGYuaXNfcHJpdmF0ZSkKKworCiAKIGNsYXNzIF9CYXNlVjY6CiAKQEAgLTE4NjAsMTUgKzE4OTgsMzYgQEAKICAgICAgICAgcmV0dXJuIHNlbGYgaW4gc2l0ZWxvY2FsX25ldHdvcmsKIAogICAgIEBwcm9wZXJ0eQorICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKICAgICBkZWYgaXNfcHJpdmF0ZShzZWxmKToKICAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwcml2YXRlIG5ldHdvcmtzLgogCiAgICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyIFJGQyA0MTkzLgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHByaXZhdGVfbmV0d29yayA9IElQdjZOZXR3b3JrKCdmYzAwOjovNycpCi0gICAgICAgIHJldHVybiBzZWxmIGluIHByaXZhdGVfbmV0d29yaworICAgICAgICByZXR1cm4gKHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzo6MS8xMjgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzo6LzEyOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnOjpmZmZmOjA6MC85NicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMTAwOjovNjQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzIwMDE6Oi8yMycpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMToyOjovNDgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzIwMDE6ZGI4OjovMzInKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzIwMDE6MTA6Oi8yOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnZmMwMDo6LzcnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJ2ZlODA6Oi8xMCcpKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2dsb2JhbChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwdWJsaWMgbmV0d29ya3MuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgYm9vbGVhbiwgdHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyBub3QgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzX3ByaXZhdGUKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc191bnNwZWNpZmllZChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9qc29uL19faW5pdF9fLnB5IGIvTGliL2pzb24vX19pbml0X18ucHkKaW5kZXggNmQ5YjMwZC4uOTRmN2Q4YyAxMDA2NDQKLS0tIGEvTGliL2pzb24vX19pbml0X18ucHkKKysrIGIvTGliL2pzb24vX19pbml0X18ucHkKQEAgLTM2LDggKzM2LDcgQEAKIFByZXR0eSBwcmludGluZzo6CiAKICAgICA+Pj4gaW1wb3J0IGpzb24KLSAgICA+Pj4gcHJpbnQoanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwKLSAgICAuLi4gICAgICAgICAgICAgICAgICBpbmRlbnQ9NCwgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSkpCisgICAgPj4+IHByaW50KGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsIGluZGVudD00KSkKICAgICB7CiAgICAgICAgICI0IjogNSwKICAgICAgICAgIjYiOiA3CkBAIC0xNDMsMTMgKzE0MiwxMiBAQAogICAgIElmIGBgaW5kZW50YGAgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5IGVsZW1lbnRzIGFuZAogICAgIG9iamVjdCBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0IGluZGVudCBsZXZlbC4gQW4gaW5kZW50CiAgICAgbGV2ZWwgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiBgYE5vbmVgYCBpcyB0aGUgbW9zdCBjb21wYWN0Ci0gICAgcmVwcmVzZW50YXRpb24uICBTaW5jZSB0aGUgZGVmYXVsdCBpdGVtIHNlcGFyYXRvciBpcyBgYCcsICdgYCwgIHRoZQotICAgIG91dHB1dCBtaWdodCBpbmNsdWRlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2hlbiBgYGluZGVudGBgIGlzIHNwZWNpZmllZC4KLSAgICBZb3UgY2FuIHVzZSBgYHNlcGFyYXRvcnM9KCcsJywgJzogJylgYCB0byBhdm9pZCB0aGlzLgorICAgIHJlcHJlc2VudGF0aW9uLgogCi0gICAgSWYgYGBzZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlCi0gICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCi0gICAgYGAoJywnLCAnOicpYGAgaXMgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorICAgIElmIHNwZWNpZmllZCwgYGBzZXBhcmF0b3JzYGAgc2hvdWxkIGJlIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKWBgCisgICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KIAogICAgIGBgZGVmYXVsdChvYmopYGAgaXMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCByZXR1cm4gYSBzZXJpYWxpemFibGUgdmVyc2lvbgogICAgIG9mIG9iaiBvciByYWlzZSBUeXBlRXJyb3IuIFRoZSBkZWZhdWx0IHNpbXBseSByYWlzZXMgVHlwZUVycm9yLgpAQCAtMjA2LDEzICsyMDQsMTIgQEAKICAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQKICAgICBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudAogICAgIGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdAotICAgIHJlcHJlc2VudGF0aW9uLiAgU2luY2UgdGhlIGRlZmF1bHQgaXRlbSBzZXBhcmF0b3IgaXMgYGAnLCAnYGAsICB0aGUKLSAgICBvdXRwdXQgbWlnaHQgaW5jbHVkZSB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gYGBpbmRlbnRgYCBpcyBzcGVjaWZpZWQuCi0gICAgWW91IGNhbiB1c2UgYGBzZXBhcmF0b3JzPSgnLCcsICc6ICcpYGAgdG8gYXZvaWQgdGhpcy4KKyAgICByZXByZXNlbnRhdGlvbi4KIAotICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZQotICAgIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLgotICAgIGBgKCcsJywgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgICBJZiBzcGVjaWZpZWQsIGBgc2VwYXJhdG9yc2BgIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAorICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgICBgYCgnLCcsICc6ICcpYGAgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgICB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCiAKICAgICBgYGRlZmF1bHQob2JqKWBgIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24KICAgICBvZiBvYmogb3IgcmFpc2UgVHlwZUVycm9yLiBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIFR5cGVFcnJvci4KQEAgLTMxMCw2ICszMDcsMTEgQEAKICAgICBUaGUgYGBlbmNvZGluZ2BgIGFyZ3VtZW50IGlzIGlnbm9yZWQgYW5kIGRlcHJlY2F0ZWQuCiAKICAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBzdHIpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3RoZSBKU09OIG9iamVjdCBtdXN0IGJlIHN0ciwgbm90IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLl9fY2xhc3NfXy5fX25hbWVfXykpCisgICAgaWYgcy5zdGFydHN3aXRoKHUnXHVmZWZmJyk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuZXhwZWN0ZWQgVVRGLTggQk9NIChkZWNvZGUgdXNpbmcgdXRmLTgtc2lnKSIpCiAgICAgaWYgKGNscyBpcyBOb25lIGFuZCBvYmplY3RfaG9vayBpcyBOb25lIGFuZAogICAgICAgICAgICAgcGFyc2VfaW50IGlzIE5vbmUgYW5kIHBhcnNlX2Zsb2F0IGlzIE5vbmUgYW5kCiAgICAgICAgICAgICBwYXJzZV9jb25zdGFudCBpcyBOb25lIGFuZCBvYmplY3RfcGFpcnNfaG9vayBpcyBOb25lIGFuZCBub3Qga3cpOgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vZGVjb2Rlci5weSBiL0xpYi9qc29uL2RlY29kZXIucHkKaW5kZXggODBkMzQyMC4uNTllNWY0MSAxMDA2NDQKLS0tIGEvTGliL2pzb24vZGVjb2Rlci5weQorKysgYi9MaWIvanNvbi9kZWNvZGVyLnB5CkBAIC0xLDkgKzEsNiBAQAogIiIiSW1wbGVtZW50YXRpb24gb2YgSlNPTkRlY29kZXIKICIiIgotaW1wb3J0IGJpbmFzY2lpCiBpbXBvcnQgcmUKLWltcG9ydCBzeXMKLWltcG9ydCBzdHJ1Y3QKIAogZnJvbSBqc29uIGltcG9ydCBzY2FubmVyCiB0cnk6CkBAIC0xNSwxNCArMTIsOSBAQAogCiBGTEFHUyA9IHJlLlZFUkJPU0UgfCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwKIAotZGVmIF9mbG9hdGNvbnN0YW50cygpOgotICAgIF9CWVRFUyA9IGJpbmFzY2lpLnVuaGV4bGlmeShiJzdGRjgwMDAwMDAwMDAwMDA3RkYwMDAwMDAwMDAwMDAwJykKLSAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBfQllURVMgPSBfQllURVNbOjhdWzo6LTFdICsgX0JZVEVTWzg6XVs6Oi0xXQotICAgIG5hbiwgaW5mID0gc3RydWN0LnVucGFjaygnZGQnLCBfQllURVMpCi0gICAgcmV0dXJuIG5hbiwgaW5mLCAtaW5mCi0KLU5hTiwgUG9zSW5mLCBOZWdJbmYgPSBfZmxvYXRjb25zdGFudHMoKQorTmFOID0gZmxvYXQoJ25hbicpCitQb3NJbmYgPSBmbG9hdCgnaW5mJykKK05lZ0luZiA9IGZsb2F0KCctaW5mJykKIAogCiBkZWYgbGluZWNvbChkb2MsIHBvcyk6CkBAIC0xOTUsOCArMTg3LDggQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSwgZW5kID0gc2Nhbl9vbmNlKHMsIGVuZCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHMsIGVuZCkpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBzLCBlcnIudmFsdWUpKSBmcm9tIE5vbmUKICAgICAgICAgcGFpcnNfYXBwZW5kKChrZXksIHZhbHVlKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KQEAgLTIzOSw4ICsyMzEsOCBAQAogICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBzY2FuX29uY2UocywgZW5kKQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKSkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHMsIGVyci52YWx1ZSkpIGZyb20gTm9uZQogICAgICAgICBfYXBwZW5kKHZhbHVlKQogICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCiAgICAgICAgIGlmIG5leHRjaGFyIGluIF93czoKQEAgLTI1MCw3ICsyNDIsNyBAQAogICAgICAgICBpZiBuZXh0Y2hhciA9PSAnXSc6CiAgICAgICAgICAgICBicmVhawogICAgICAgICBlbGlmIG5leHRjaGFyICE9ICcsJzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIHMsIGVuZCkpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBzLCBlbmQgLSAxKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKICAgICAgICAgICAgICAgICBlbmQgKz0gMQpAQCAtMzY1LDYgKzM1Nyw2IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvYmosIGVuZCA9IHNlbGYuc2Nhbl9vbmNlKHMsIGlkeCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBKU09OIG9iamVjdCBjb3VsZCBiZSBkZWNvZGVkIikKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHMsIGVyci52YWx1ZSkpIGZyb20gTm9uZQogICAgICAgICByZXR1cm4gb2JqLCBlbmQKZGlmZiAtLWdpdCBhL0xpYi9qc29uL2VuY29kZXIucHkgYi9MaWIvanNvbi9lbmNvZGVyLnB5CmluZGV4IDFkOGIyMGMuLjA1MTM4MzggMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL2VuY29kZXIucHkKKysrIGIvTGliL2pzb24vZW5jb2Rlci5weQpAQCAtMTI1LDE0ICsxMjUsMTIgQEAKICAgICAgICAgSWYgaW5kZW50IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheQogICAgICAgICBlbGVtZW50cyBhbmQgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQKICAgICAgICAgaW5kZW50IGxldmVsLiAgQW4gaW5kZW50IGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4KLSAgICAgICAgTm9uZSBpcyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLiAgU2luY2UgdGhlIGRlZmF1bHQKLSAgICAgICAgaXRlbSBzZXBhcmF0b3IgaXMgJywgJywgIHRoZSBvdXRwdXQgbWlnaHQgaW5jbHVkZSB0cmFpbGluZwotICAgICAgICB3aGl0ZXNwYWNlIHdoZW4gaW5kZW50IGlzIHNwZWNpZmllZC4gIFlvdSBjYW4gdXNlCi0gICAgICAgIHNlcGFyYXRvcnM9KCcsJywgJzogJykgdG8gYXZvaWQgdGhpcy4KKyAgICAgICAgTm9uZSBpcyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLgogCi0gICAgICAgIElmIHNwZWNpZmllZCwgc2VwYXJhdG9ycyBzaG91bGQgYmUgYSAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpCi0gICAgICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTgotICAgICAgICByZXByZXNlbnRhdGlvbiB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKyAgICAgICAgSWYgc3BlY2lmaWVkLCBzZXBhcmF0b3JzIHNob3VsZCBiZSBhbiAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpCisgICAgICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgICAgICAoJywnLCAnOiAnKSBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgICAgICB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KIAogICAgICAgICBJZiBzcGVjaWZpZWQsIGRlZmF1bHQgaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBvYmplY3RzCiAgICAgICAgIHRoYXQgY2FuJ3Qgb3RoZXJ3aXNlIGJlIHNlcmlhbGl6ZWQuICBJdCBzaG91bGQgcmV0dXJuIGEgSlNPTiBlbmNvZGFibGUKQEAgLTE0OCw2ICsxNDYsOCBAQAogICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAogICAgICAgICBpZiBzZXBhcmF0b3JzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5pdGVtX3NlcGFyYXRvciwgc2VsZi5rZXlfc2VwYXJhdG9yID0gc2VwYXJhdG9ycworICAgICAgICBlbGlmIGluZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaXRlbV9zZXBhcmF0b3IgPSAnLCcKICAgICAgICAgaWYgZGVmYXVsdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuZGVmYXVsdCA9IGRlZmF1bHQKIApAQCAtMTc1LDYgKzE3NSw3IEBACiAgICAgZGVmIGVuY29kZShzZWxmLCBvKToKICAgICAgICAgIiIiUmV0dXJuIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gZGF0YSBzdHJ1Y3R1cmUuCiAKKyAgICAgICAgPj4+IGZyb20ganNvbi5lbmNvZGVyIGltcG9ydCBKU09ORW5jb2RlcgogICAgICAgICA+Pj4gSlNPTkVuY29kZXIoKS5lbmNvZGUoeyJmb28iOiBbImJhciIsICJiYXoiXX0pCiAgICAgICAgICd7ImZvbyI6IFsiYmFyIiwgImJheiJdfScKIApAQCAtMjk4LDkgKzI5OSwxMyBAQAogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyAnZmFsc2UnCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsgc3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgU3ViY2xhc3NlcyBvZiBpbnQvZmxvYXQgbWF5IG92ZXJyaWRlIF9fc3RyX18sIGJ1dCB3ZSBzdGlsbAorICAgICAgICAgICAgICAgICMgd2FudCB0byBlbmNvZGUgdGhlbSBhcyBpbnRlZ2Vycy9mbG9hdHMgaW4gSlNPTi4gT25lIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAjIHdpdGhpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBpcyBJbnRFbnVtLgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIHN0cihpbnQodmFsdWUpKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsgX2Zsb2F0c3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdmUgZm9yIGludAorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIF9mbG9hdHN0cihmbG9hdCh2YWx1ZSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgpAQCAtMzA5LDggKzMxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2RpY3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZSh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBjaHVua3MKICAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQogICAgICAgICAgICAgeWllbGQgJ1xuJyArIF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwKQEAgLTM0Nyw3ICszNTEsOCBAQAogICAgICAgICAgICAgIyBKYXZhU2NyaXB0IGlzIHdlYWtseSB0eXBlZCBmb3IgdGhlc2UsIHNvIGl0IG1ha2VzIHNlbnNlIHRvCiAgICAgICAgICAgICAjIGFsc28gYWxsb3cgdGhlbS4gIE1hbnkgZW5jb2RlcnMgc2VlbSB0byBkbyBzb21ldGhpbmcgbGlrZSB0aGlzLgogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgZmxvYXQpOgotICAgICAgICAgICAgICAgIGtleSA9IF9mbG9hdHN0cihrZXkpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICBrZXkgPSBfZmxvYXRzdHIoZmxvYXQoa2V5KSkKICAgICAgICAgICAgIGVsaWYga2V5IGlzIFRydWU6CiAgICAgICAgICAgICAgICAga2V5ID0gJ3RydWUnCiAgICAgICAgICAgICBlbGlmIGtleSBpcyBGYWxzZToKQEAgLTM1NSw3ICszNjAsOCBAQAogICAgICAgICAgICAgZWxpZiBrZXkgaXMgTm9uZToKICAgICAgICAgICAgICAgICBrZXkgPSAnbnVsbCcKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIGludCk6Ci0gICAgICAgICAgICAgICAga2V5ID0gc3RyKGtleSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgICAgIGtleSA9IHN0cihpbnQoa2V5KSkKICAgICAgICAgICAgIGVsaWYgX3NraXBrZXlzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzc1LDkgKzM4MSwxMSBAQAogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICAgICAgeWllbGQgc3RyKGludCh2YWx1ZSkpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSAgICAgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIodmFsdWUpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIoZmxvYXQodmFsdWUpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfbGlzdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQpAQCAtMzg1LDggKzM5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2RpY3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZSh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBjaHVua3MKICAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQogICAgICAgICAgICAgeWllbGQgJ1xuJyArIF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwKQEAgLTQwNCwxNSArNDExLDE1IEBACiAgICAgICAgIGVsaWYgbyBpcyBGYWxzZToKICAgICAgICAgICAgIHlpZWxkICdmYWxzZScKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGludCk6Ci0gICAgICAgICAgICB5aWVsZCBzdHIobykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICB5aWVsZCBzdHIoaW50KG8pKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZmxvYXQpOgotICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKG8pCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKGZsb2F0KG8pKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgKGxpc3QsIHR1cGxlKSk6Ci0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGVfbGlzdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9pdGVyZW5jb2RlX2xpc3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZGljdCk6Ci0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGVfZGljdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9pdGVyZW5jb2RlX2RpY3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBtYXJrZXJpZCA9IGlkKG8pCkBAIC00MjAsOCArNDI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIikKICAgICAgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IG8KICAgICAgICAgICAgIG8gPSBfZGVmYXVsdChvKQotICAgICAgICAgICAgZm9yIGNodW5rIGluIF9pdGVyZW5jb2RlKG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgIHlpZWxkIGZyb20gX2l0ZXJlbmNvZGUobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KICAgICByZXR1cm4gX2l0ZXJlbmNvZGUKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3NjYW5uZXIucHkgYi9MaWIvanNvbi9zY2FubmVyLnB5CmluZGV4IDIzZWVmNjEuLjg2NDI2Y2QgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3NjYW5uZXIucHkKKysrIGIvTGliL2pzb24vc2Nhbm5lci5weQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuZXh0Y2hhciA9IHN0cmluZ1tpZHhdCiAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbihpZHgpCiAKICAgICAgICAgaWYgbmV4dGNoYXIgPT0gJyInOgogICAgICAgICAgICAgcmV0dXJuIHBhcnNlX3N0cmluZyhzdHJpbmcsIGlkeCArIDEsIHN0cmljdCkKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnLScgYW5kIHN0cmluZ1tpZHg6aWR4ICsgOV0gPT0gJy1JbmZpbml0eSc6CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJy1JbmZpbml0eScpLCBpZHggKyA5CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKGlkeCkKIAogICAgIGRlZiBzY2FuX29uY2Uoc3RyaW5nLCBpZHgpOgogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvanNvbi90b29sLnB5IGIvTGliL2pzb24vdG9vbC5weQppbmRleCBlY2Y5YzQ3Li43ZGI0NTI4IDEwMDY0NAotLS0gYS9MaWIvanNvbi90b29sLnB5CisrKyBiL0xpYi9qc29uL3Rvb2wucHkKQEAgLTMxLDggKzMxLDcgQEAKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoZSkKICAgICB3aXRoIG91dGZpbGU6Ci0gICAgICAgIGpzb24uZHVtcChvYmosIG91dGZpbGUsIHNvcnRfa2V5cz1UcnVlLAotICAgICAgICAgICAgICAgICAgaW5kZW50PTQsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpCisgICAgICAgIGpzb24uZHVtcChvYmosIG91dGZpbGUsIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkKICAgICAgICAgb3V0ZmlsZS53cml0ZSgnXG4nKQogCiAKZGlmZiAtLWdpdCBhL0xpYi9rZXl3b3JkLnB5IGIvTGliL2tleXdvcmQucHkKaW5kZXggZGFkMzljYy4uNmUxZTg4MiAxMDA3NTUKLS0tIGEvTGliL2tleXdvcmQucHkKKysrIGIvTGliL2tleXdvcmQucHkKQEAgLTYwLDYgKzYwLDEyIEBACiAgICAgaWYgbGVuKGFyZ3MpID4gMTogb3B0ZmlsZSA9IGFyZ3NbMV0KICAgICBlbHNlOiBvcHRmaWxlID0gIkxpYi9rZXl3b3JkLnB5IgogCisgICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0LCB0YWtpbmcgY2FyZSB0byBwcmVzZXJ2ZSBpdHMKKyAgICAjIG5ld2xpbmUgY29udmVudGlvbi4KKyAgICB3aXRoIG9wZW4ob3B0ZmlsZSwgbmV3bGluZT0nJykgYXMgZnA6CisgICAgICAgIGZvcm1hdCA9IGZwLnJlYWRsaW5lcygpCisgICAgbmwgPSBmb3JtYXRbMF1bbGVuKGZvcm1hdFswXS5zdHJpcCgpKTpdIGlmIGZvcm1hdCBlbHNlICdcbicKKwogICAgICMgc2NhbiB0aGUgc291cmNlIGZpbGUgZm9yIGtleXdvcmRzCiAgICAgd2l0aCBvcGVuKGlwdGZpbGUpIGFzIGZwOgogICAgICAgICBzdHJwcm9nID0gcmUuY29tcGlsZSgnIihbXiJdKykiJykKQEAgLTY4LDI2ICs3NCwyMSBAQAogICAgICAgICAgICAgaWYgJ3sxLCAiJyBpbiBsaW5lOgogICAgICAgICAgICAgICAgIG1hdGNoID0gc3RycHJvZy5zZWFyY2gobGluZSkKICAgICAgICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgICAgICciICsgbWF0Y2guZ3JvdXAoMSkgKyAiJyxcbiIpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICAgICAnIiArIG1hdGNoLmdyb3VwKDEpICsgIicsIiArIG5sKQogICAgIGxpbmVzLnNvcnQoKQogCi0gICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0Ci0gICAgd2l0aCBvcGVuKG9wdGZpbGUpIGFzIGZwOgotICAgICAgICBmb3JtYXQgPSBmcC5yZWFkbGluZXMoKQotCi0gICAgIyBpbnNlcnQgdGhlIGxpbmVzIG9mIGtleXdvcmRzCisgICAgIyBpbnNlcnQgdGhlIGxpbmVzIG9mIGtleXdvcmRzIGludG8gdGhlIHNrZWxldG9uCiAgICAgdHJ5OgotICAgICAgICBzdGFydCA9IGZvcm1hdC5pbmRleCgiIy0tc3RhcnQga2V5d29yZHMtLVxuIikgKyAxCi0gICAgICAgIGVuZCA9IGZvcm1hdC5pbmRleCgiIy0tZW5kIGtleXdvcmRzLS1cbiIpCisgICAgICAgIHN0YXJ0ID0gZm9ybWF0LmluZGV4KCIjLS1zdGFydCBrZXl3b3Jkcy0tIiArIG5sKSArIDEKKyAgICAgICAgZW5kID0gZm9ybWF0LmluZGV4KCIjLS1lbmQga2V5d29yZHMtLSIgKyBubCkKICAgICAgICAgZm9ybWF0W3N0YXJ0OmVuZF0gPSBsaW5lcwogICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ0YXJnZXQgZG9lcyBub3QgY29udGFpbiBmb3JtYXQgbWFya2Vyc1xuIikKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICMgd3JpdGUgdGhlIG91dHB1dCBmaWxlCi0gICAgZnAgPSBvcGVuKG9wdGZpbGUsICd3JykKLSAgICBmcC53cml0ZSgnJy5qb2luKGZvcm1hdCkpCi0gICAgZnAuY2xvc2UoKQorICAgIHdpdGggb3BlbihvcHRmaWxlLCAndycsIG5ld2xpbmU9JycpIGFzIGZwOgorICAgICAgICBmcC53cml0ZWxpbmVzKGZvcm1hdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2J0bV91dGlscy5weSBiL0xpYi9saWIydG8zL2J0bV91dGlscy5weQppbmRleCAyMjc2ZGM5Li4zMzk3NTBlIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkKKysrIGIvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5CkBAIC05Niw4ICs5Niw3IEBACiAgICAgZGVmIGxlYXZlcyhzZWxmKToKICAgICAgICAgIkdlbmVyYXRvciB0aGF0IHJldHVybnMgdGhlIGxlYXZlcyBvZiB0aGUgdHJlZSIKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3IgeCBpbiBjaGlsZC5sZWF2ZXMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNoaWxkLmxlYXZlcygpCiAgICAgICAgIGlmIG5vdCBzZWxmLmNoaWxkcmVuOgogICAgICAgICAgICAgeWllbGQgc2VsZgogCkBAIC0yNzcsNyArMjc2LDYgQEAKICAgICBzdWItaXRlcmFibGVzIiIiCiAgICAgZm9yIHggaW4gc2VxdWVuY2U6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoeCwgKGxpc3QsIHR1cGxlKSk6Ci0gICAgICAgICAgICBmb3IgeSBpbiByZWNfdGVzdCh4LCB0ZXN0X2Z1bmMpOgotICAgICAgICAgICAgICAgIHlpZWxkIHkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcmVjX3Rlc3QoeCwgdGVzdF9mdW5jKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgeWllbGQgdGVzdF9mdW5jKHgpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weQppbmRleCA2MGQyMTlmLi42ZTI1OWM1IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkKQEAgLTEyOSw2ICsxMjksMjkgQEAKICAgICBpbXAgPSBOb2RlKHN5bXMuaW1wb3J0X2Zyb20sIGNoaWxkcmVuKQogICAgIHJldHVybiBpbXAKIAorZGVmIEltcG9ydEFuZENhbGwobm9kZSwgcmVzdWx0cywgbmFtZXMpOgorICAgICIiIlJldHVybnMgYW4gaW1wb3J0IHN0YXRlbWVudCBhbmQgY2FsbHMgYSBtZXRob2QKKyAgICBvZiB0aGUgbW9kdWxlOgorCisgICAgaW1wb3J0IG1vZHVsZQorICAgIG1vZHVsZS5uYW1lKCkiIiIKKyAgICBvYmogPSByZXN1bHRzWyJvYmoiXS5jbG9uZSgpCisgICAgaWYgb2JqLnR5cGUgPT0gc3ltcy5hcmdsaXN0OgorICAgICAgICBuZXdhcmdsaXN0ID0gb2JqLmNsb25lKCkKKyAgICBlbHNlOgorICAgICAgICBuZXdhcmdsaXN0ID0gTm9kZShzeW1zLmFyZ2xpc3QsIFtvYmouY2xvbmUoKV0pCisgICAgYWZ0ZXIgPSByZXN1bHRzWyJhZnRlciJdCisgICAgaWYgYWZ0ZXI6CisgICAgICAgIGFmdGVyID0gW24uY2xvbmUoKSBmb3IgbiBpbiBhZnRlcl0KKyAgICBuZXcgPSBOb2RlKHN5bXMucG93ZXIsCisgICAgICAgICAgICAgICBBdHRyKE5hbWUobmFtZXNbMF0pLCBOYW1lKG5hbWVzWzFdKSkgKworICAgICAgICAgICAgICAgW05vZGUoc3ltcy50cmFpbGVyLAorICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdHNbImxwYXIiXS5jbG9uZSgpLAorICAgICAgICAgICAgICAgICAgICAgIG5ld2FyZ2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1sicnBhciJdLmNsb25lKCldKV0gKyBhZnRlcikKKyAgICBuZXcucHJlZml4ID0gbm9kZS5wcmVmaXgKKyAgICByZXR1cm4gbmV3CisKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBEZXRlcm1pbmUgd2hldGhlciBhIG5vZGUgcmVwcmVzZW50cyBhIGdpdmVuIGxpdGVyYWwKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9hc3NlcnRzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Fzc2VydHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjZWM4OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9hc3NlcnRzLnB5CkBAIC0wLDAgKzEsMzQgQEAKKyIiIkZpeGVyIHRoYXQgcmVwbGFjZXMgZGVwcmVjYXRlZCB1bml0dGVzdCBtZXRob2QgbmFtZXMuIiIiCisKKyMgQXV0aG9yOiBFemlvIE1lbG90dGkKKworZnJvbSAuLmZpeGVyX2Jhc2UgaW1wb3J0IEJhc2VGaXgKK2Zyb20gLi5maXhlcl91dGlsIGltcG9ydCBOYW1lCisKK05BTUVTID0gZGljdCgKKyAgICBhc3NlcnRfPSJhc3NlcnRUcnVlIiwKKyAgICBhc3NlcnRFcXVhbHM9ImFzc2VydEVxdWFsIiwKKyAgICBhc3NlcnROb3RFcXVhbHM9ImFzc2VydE5vdEVxdWFsIiwKKyAgICBhc3NlcnRBbG1vc3RFcXVhbHM9ImFzc2VydEFsbW9zdEVxdWFsIiwKKyAgICBhc3NlcnROb3RBbG1vc3RFcXVhbHM9ImFzc2VydE5vdEFsbW9zdEVxdWFsIiwKKyAgICBhc3NlcnRSZWdleHBNYXRjaGVzPSJhc3NlcnRSZWdleCIsCisgICAgYXNzZXJ0UmFpc2VzUmVnZXhwPSJhc3NlcnRSYWlzZXNSZWdleCIsCisgICAgZmFpbFVubGVzc0VxdWFsPSJhc3NlcnRFcXVhbCIsCisgICAgZmFpbElmRXF1YWw9ImFzc2VydE5vdEVxdWFsIiwKKyAgICBmYWlsVW5sZXNzQWxtb3N0RXF1YWw9ImFzc2VydEFsbW9zdEVxdWFsIiwKKyAgICBmYWlsSWZBbG1vc3RFcXVhbD0iYXNzZXJ0Tm90QWxtb3N0RXF1YWwiLAorICAgIGZhaWxVbmxlc3M9ImFzc2VydFRydWUiLAorICAgIGZhaWxVbmxlc3NSYWlzZXM9ImFzc2VydFJhaXNlcyIsCisgICAgZmFpbElmPSJhc3NlcnRGYWxzZSIsCispCisKKworY2xhc3MgRml4QXNzZXJ0cyhCYXNlRml4KToKKworICAgIFBBVFRFUk4gPSAiIiIKKyAgICAgICAgICAgICAgcG93ZXI8IGFueSsgdHJhaWxlcjwgJy4nIG1ldGg9KCVzKT4gYW55KiA+CisgICAgICAgICAgICAgICIiIiAlICd8Jy5qb2luKG1hcChyZXByLCBOQU1FUykpCisKKyAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgorICAgICAgICBuYW1lID0gcmVzdWx0c1sibWV0aCJdWzBdCisgICAgICAgIG5hbWUucmVwbGFjZShOYW1lKE5BTUVTW3N0cihuYW1lKV0sIHByZWZpeD1uYW1lLnByZWZpeCkpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weQppbmRleCA2YmUxMWNkLi5mYjI5NzNjIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnRlcm4ucHkKQEAgLTYsOSArNiw4IEBACiBpbnRlcm4ocykgLT4gc3lzLmludGVybihzKSIiIgogCiAjIExvY2FsIGltcG9ydHMKLWZyb20gLi4gaW1wb3J0IHB5dHJlZQogZnJvbSAuLiBpbXBvcnQgZml4ZXJfYmFzZQotZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUsIEF0dHIsIHRvdWNoX2ltcG9ydAorZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IEltcG9ydEFuZENhbGwsIHRvdWNoX2ltcG9ydAogCiAKIGNsYXNzIEZpeEludGVybihmaXhlcl9iYXNlLkJhc2VGaXgpOgpAQCAtMjYsMjEgKzI1LDcgQEAKICAgICAiIiIKIAogICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6Ci0gICAgICAgIHN5bXMgPSBzZWxmLnN5bXMKLSAgICAgICAgb2JqID0gcmVzdWx0c1sib2JqIl0uY2xvbmUoKQotICAgICAgICBpZiBvYmoudHlwZSA9PSBzeW1zLmFyZ2xpc3Q6Ci0gICAgICAgICAgICBuZXdhcmdsaXN0ID0gb2JqLmNsb25lKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5ld2FyZ2xpc3QgPSBweXRyZWUuTm9kZShzeW1zLmFyZ2xpc3QsIFtvYmouY2xvbmUoKV0pCi0gICAgICAgIGFmdGVyID0gcmVzdWx0c1siYWZ0ZXIiXQotICAgICAgICBpZiBhZnRlcjoKLSAgICAgICAgICAgIGFmdGVyID0gW24uY2xvbmUoKSBmb3IgbiBpbiBhZnRlcl0KLSAgICAgICAgbmV3ID0gcHl0cmVlLk5vZGUoc3ltcy5wb3dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cihOYW1lKCJzeXMiKSwgTmFtZSgiaW50ZXJuIikpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgW3B5dHJlZS5Ob2RlKHN5bXMudHJhaWxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHRzWyJscGFyIl0uY2xvbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdhcmdsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbInJwYXIiXS5jbG9uZSgpXSldICsgYWZ0ZXIpCi0gICAgICAgIG5ldy5wcmVmaXggPSBub2RlLnByZWZpeAorICAgICAgICBuYW1lcyA9ICgnc3lzJywgJ2ludGVybicpCisgICAgICAgIG5ldyA9IEltcG9ydEFuZENhbGwobm9kZSwgcmVzdWx0cywgbmFtZXMpCiAgICAgICAgIHRvdWNoX2ltcG9ydChOb25lLCAnc3lzJywgbm9kZSkKICAgICAgICAgcmV0dXJuIG5ldwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlbG9hZC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWxvYWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg1NTM1NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWxvYWQucHkKQEAgLTAsMCArMSwyOCBAQAorIiIiRml4ZXIgZm9yIHJlbG9hZCgpLgorCityZWxvYWQocykgLT4gaW1wLnJlbG9hZChzKSIiIgorCisjIExvY2FsIGltcG9ydHMKK2Zyb20gLi4gaW1wb3J0IGZpeGVyX2Jhc2UKK2Zyb20gLi5maXhlcl91dGlsIGltcG9ydCBJbXBvcnRBbmRDYWxsLCB0b3VjaF9pbXBvcnQKKworCitjbGFzcyBGaXhSZWxvYWQoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQorICAgIG9yZGVyID0gInByZSIKKworICAgIFBBVFRFUk4gPSAiIiIKKyAgICBwb3dlcjwgJ3JlbG9hZCcKKyAgICAgICAgICAgdHJhaWxlcjwgbHBhcj0nKCcKKyAgICAgICAgICAgICAgICAgICAgKCBub3QoYXJnbGlzdCB8IGFyZ3VtZW50PGFueSAnPScgYW55Pikgb2JqPWFueQorICAgICAgICAgICAgICAgICAgICAgIHwgb2JqPWFyZ2xpc3Q8KG5vdCBhcmd1bWVudDxhbnkgJz0nIGFueT4pIGFueSAnLCc+ICkKKyAgICAgICAgICAgICAgICAgICAgcnBhcj0nKScgPgorICAgICAgICAgICBhZnRlcj1hbnkqCisgICAgPgorICAgICIiIgorCisgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKKyAgICAgICAgbmFtZXMgPSAoJ2ltcCcsICdyZWxvYWQnKQorICAgICAgICBuZXcgPSBJbXBvcnRBbmRDYWxsKG5vZGUsIHJlc3VsdHMsIG5hbWVzKQorICAgICAgICB0b3VjaF9pbXBvcnQoTm9uZSwgJ2ltcCcsIG5vZGUpCisgICAgICAgIHJldHVybiBuZXcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL21haW4ucHkgYi9MaWIvbGliMnRvMy9tYWluLnB5CmluZGV4IGY5Y2MxOGIuLjkzYmFlOTAgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL21haW4ucHkKKysrIGIvTGliL2xpYjJ0bzMvbWFpbi5weQpAQCAtOTAsMTEgKzkwLDExIEBACiAgICAgICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMoYmFja3VwKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShiYWNrdXApCi0gICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNhbid0IHJlbW92ZSBiYWNrdXAgJXMiLCBiYWNrdXApCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNhbid0IHJlbmFtZSAlcyB0byAlcyIsIGZpbGVuYW1lLCBiYWNrdXApCiAgICAgICAgICMgQWN0dWFsbHkgd3JpdGUgdGhlIG5ldyBmaWxlCiAgICAgICAgIHdyaXRlID0gc3VwZXIoU3Rkb3V0UmVmYWN0b3JpbmdUb29sLCBzZWxmKS53cml0ZV9maWxlCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi9jb252LnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weQppbmRleCBiZjQ5NzYyLi5lZDBjYWM1IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9wZ2VuMi9jb252LnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL2NvbnYucHkKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCBvcGVuICVzOiAlcyIgJSAoZmlsZW5hbWUsIGVycikpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgc2VsZi5zeW1ib2wybnVtYmVyID0ge30KQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcHJpbnQoIkNhbid0IG9wZW4gJXM6ICVzIiAlIChmaWxlbmFtZSwgZXJyKSkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAjIFRoZSBjb2RlIGJlbG93IGVzc2VudGlhbGx5IHVzZXMgZidzIGl0ZXJhdG9yLW5lc3MhCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkgYi9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkKaW5kZXggNGM2MTFjNi4uM2NjYzY5ZCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL2RyaXZlci5weQpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiV3JpdGluZyBncmFtbWFyIHRhYmxlcyB0byAlcyIsIGdwKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGcuZHVtcChncCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJXcml0aW5nIGZhaWxlZDoiK3N0cihlKSkKICAgICBlbHNlOgogICAgICAgICBnID0gZ3JhbW1hci5HcmFtbWFyKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3BnZW4yL2dyYW1tYXIucHkgYi9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5CmluZGV4IDE0YzVmNzAuLjdmMWM1NjQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL2dyYW1tYXIucHkKKysrIGIvTGliL2xpYjJ0bzMvcGdlbjIvZ3JhbW1hci5weQpAQCAtODYsMTUgKzg2LDEzIEBACiAKICAgICBkZWYgZHVtcChzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIkR1bXAgdGhlIGdyYW1tYXIgdGFibGVzIHRvIGEgcGlja2xlIGZpbGUuIiIiCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAid2IiKQotICAgICAgICBwaWNrbGUuZHVtcChzZWxmLl9fZGljdF9fLCBmLCAyKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5fX2RpY3RfXywgZiwgMikKIAogICAgIGRlZiBsb2FkKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiTG9hZCB0aGUgZ3JhbW1hciB0YWJsZXMgZnJvbSBhIHBpY2tsZSBmaWxlLiIiIgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgZCA9IHBpY2tsZS5sb2FkKGYpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBkID0gcGlja2xlLmxvYWQoZikKICAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoZCkKIAogICAgIGRlZiBjb3B5KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcHl0cmVlLnB5IGIvTGliL2xpYjJ0bzMvcHl0cmVlLnB5CmluZGV4IDE3Y2JmMGEuLmM0YTFiZTMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3B5dHJlZS5weQorKysgYi9MaWIvbGliMnRvMy9weXRyZWUucHkKQEAgLTE5NCw4ICsxOTQsNyBAQAogCiAgICAgZGVmIGxlYXZlcyhzZWxmKToKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3IgeCBpbiBjaGlsZC5sZWF2ZXMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNoaWxkLmxlYXZlcygpCiAKICAgICBkZWYgZGVwdGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYucGFyZW50IGlzIE5vbmU6CkBAIC0yNzQsMTYgKzI3MywxNCBAQAogICAgIGRlZiBwb3N0X29yZGVyKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBwb3N0LW9yZGVyIGl0ZXJhdG9yIGZvciB0aGUgdHJlZS4iIiIKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3Igbm9kZSBpbiBjaGlsZC5wb3N0X29yZGVyKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgbm9kZQorICAgICAgICAgICAgeWllbGQgZnJvbSBjaGlsZC5wb3N0X29yZGVyKCkKICAgICAgICAgeWllbGQgc2VsZgogCiAgICAgZGVmIHByZV9vcmRlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcHJlLW9yZGVyIGl0ZXJhdG9yIGZvciB0aGUgdHJlZS4iIiIKICAgICAgICAgeWllbGQgc2VsZgogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKLSAgICAgICAgICAgIGZvciBub2RlIGluIGNoaWxkLnByZV9vcmRlcigpOgotICAgICAgICAgICAgICAgIHlpZWxkIG5vZGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY2hpbGQucHJlX29yZGVyKCkKIAogICAgIGRlZiBfcHJlZml4X2dldHRlcihzZWxmKToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9yZWZhY3Rvci5weSBiL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CmluZGV4IDIwMWUxOTMuLjgxMDAzMTcgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CisrKyBiL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CkBAIC0zMjYsNyArMzI2LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAicmIiKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJDYW4ndCBvcGVuICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogICAgICAgICB0cnk6CkBAIC01MzQsMTIgKzUzNCwxMiBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IF9vcGVuX3dpdGhfZW5jb2RpbmcoZmlsZW5hbWUsICJ3IiwgZW5jb2Rpbmc9ZW5jb2RpbmcpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJDYW4ndCBjcmVhdGUgJXM6ICVzIiwgZmlsZW5hbWUsIGVycikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmLndyaXRlKF90b19zeXN0ZW1fbmV3bGluZXMobmV3X3RleHQpKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3Qgd3JpdGUgJXM6ICVzIiwgZmlsZW5hbWUsIGVycikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CmluZGV4IGEwMmJiZmUuLjczMWM0MDMgMTAwNzU1Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKQEAgLTUzLDcgKzUzLDcgQEAKICAgICBmb3IgZGlyIGluIHN5cy5wYXRoOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgcHJpbnQoIlNjYW5uaW5nIiwgZGlyLCAiLi4uIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9maXhlcnMucHkKaW5kZXggMmYwOGY5My4uMDZiMDAzMyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9maXhlcnMucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9maXhlcnMucHkKQEAgLTI4Miw2ICsyODIsNjUgQEAKICAgICAgICAgYiA9ICIiImYoKmFyZ3MsICoqa3dkcykiIiIKICAgICAgICAgc2VsZi5jaGVjayhhLCBiKQogCitjbGFzcyBUZXN0X3JlbG9hZChGaXhlclRlc3RDYXNlKToKKyAgICBmaXhlciA9ICJyZWxvYWQiCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgYiA9ICIiInJlbG9hZChhKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZChhKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF9jb21tZW50KHNlbGYpOgorICAgICAgICBiID0gIiIicmVsb2FkKCBhICkgIyBjb21tZW50IiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKCBhICkgIyBjb21tZW50IiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgICAgICAjIFBFUCA4IGNvbW1lbnRzCisgICAgICAgIGIgPSAiIiJyZWxvYWQoIGEgKSAgIyBjb21tZW50IiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKCBhICkgICMgY29tbWVudCIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF9zcGFjZShzZWxmKToKKyAgICAgICAgYiA9ICIiInJlbG9hZCggYSApIiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKCBhICkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAiIiJyZWxvYWQoIGEpIiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKCBhKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgYiA9ICIiInJlbG9hZChhICkiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoYSApIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X3VuY2hhbmdlZChzZWxmKToKKyAgICAgICAgcyA9ICIiInJlbG9hZChhPTEpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZChmLCBnKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgKmgpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZChmLCAqaCwgKippKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgKippKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoKmgsICoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCpoKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoKippKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCiBjbGFzcyBUZXN0X2ludGVybihGaXhlclRlc3RDYXNlKToKICAgICBmaXhlciA9ICJpbnRlcm4iCiAKQEAgLTQ1NzYsMyArNDYzNSw1MyBAQAogICAgIGRlZiB0ZXN0X3VuY2hhbmdlZChzZWxmKToKICAgICAgICAgcyA9ICIiImYoc3lzLmV4aXRmdW5jKSIiIgogICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisKK2NsYXNzIFRlc3RfYXNzZXJ0cyhGaXhlclRlc3RDYXNlKToKKworICAgIGZpeGVyID0gImFzc2VydHMiCisKKyAgICBkZWYgdGVzdF9kZXByZWNhdGVkX25hbWVzKHNlbGYpOgorICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnRfKFRydWUpJywgJ3NlbGYuYXNzZXJ0VHJ1ZShUcnVlKScpLAorICAgICAgICAgICAgKCdzZWxmLmFzc2VydEVxdWFscygyLCAyKScsICdzZWxmLmFzc2VydEVxdWFsKDIsIDIpJyksCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0Tm90RXF1YWxzKDIsIDMpJywgJ3NlbGYuYXNzZXJ0Tm90RXF1YWwoMiwgMyknKSwKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnRBbG1vc3RFcXVhbHMoMiwgMyknLCAnc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgyLCAzKScpLAorICAgICAgICAgICAgKCdzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFscygyLCA4KScsICdzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsKDIsIDgpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbFVubGVzc0VxdWFsKDIsIDIpJywgJ3NlbGYuYXNzZXJ0RXF1YWwoMiwgMiknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsSWZFcXVhbCgyLCAzKScsICdzZWxmLmFzc2VydE5vdEVxdWFsKDIsIDMpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsKDIsIDMpJywgJ3NlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMiwgMyknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsSWZBbG1vc3RFcXVhbCgyLCA4KScsICdzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsKDIsIDgpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbFVubGVzcyhUcnVlKScsICdzZWxmLmFzc2VydFRydWUoVHJ1ZSknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsVW5sZXNzUmFpc2VzKGZvbyknLCAnc2VsZi5hc3NlcnRSYWlzZXMoZm9vKScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxJZihGYWxzZSknLCAnc2VsZi5hc3NlcnRGYWxzZShGYWxzZSknKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgYiwgYSBpbiB0ZXN0czoKKyAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X3ZhcmlhbnRzKHNlbGYpOgorICAgICAgICBiID0gJ2VxID0gc2VsZi5hc3NlcnRFcXVhbHMnCisgICAgICAgIGEgPSAnZXEgPSBzZWxmLmFzc2VydEVxdWFsJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnc2VsZi5hc3NlcnRFcXVhbHMoMiwgMywgbXNnPSJmYWlsIiknCisgICAgICAgIGEgPSAnc2VsZi5hc3NlcnRFcXVhbCgyLCAzLCBtc2c9ImZhaWwiKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3NlbGYuYXNzZXJ0RXF1YWxzKDIsIDMsIG1zZz0iZmFpbCIpICMgZm9vJworICAgICAgICBhID0gJ3NlbGYuYXNzZXJ0RXF1YWwoMiwgMywgbXNnPSJmYWlsIikgIyBmb28nCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICdzZWxmLmFzc2VydEVxdWFscyAoMiwgMyknCisgICAgICAgIGEgPSAnc2VsZi5hc3NlcnRFcXVhbCAoMiwgMyknCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICcgIHNlbGYuYXNzZXJ0RXF1YWxzICgyLCAzKScKKyAgICAgICAgYSA9ICcgIHNlbGYuYXNzZXJ0RXF1YWwgKDIsIDMpJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnd2l0aCBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoRXhwbG9zaW9uKTogZXhwbG9kZSgpJworICAgICAgICBhID0gJ3dpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhwbG9zaW9uKTogZXhwbG9kZSgpJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnd2l0aCBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoRXhwbG9zaW9uKSBhcyBjbTogZXhwbG9kZSgpJworICAgICAgICBhID0gJ3dpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhwbG9zaW9uKSBhcyBjbTogZXhwbG9kZSgpJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6CisgICAgICAgIHNlbGYudW5jaGFuZ2VkKCdzZWxmLmFzc2VydEVxdWFsc09uU2F0dXJkYXknKQorICAgICAgICBzZWxmLnVuY2hhbmdlZCgnc2VsZi5hc3NlcnRFcXVhbHNPblNhdHVyZGF5KDMsIDUpJykKZGlmZiAtLWdpdCBhL0xpYi9saW5lY2FjaGUucHkgYi9MaWIvbGluZWNhY2hlLnB5CmluZGV4IGMzZjJjM2YuLjAyYTllYjUgMTAwNjQ0Ci0tLSBhL0xpYi9saW5lY2FjaGUucHkKKysrIGIvTGliL2xpbmVjYWNoZS5weQpAQCAtNTksNyArNTksNyBAQAogICAgICAgICAgICAgY29udGludWUgICAjIG5vLW9wIGZvciBmaWxlcyBsb2FkZWQgdmlhIGEgX19sb2FkZXJfXwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdGF0ID0gb3Muc3RhdChmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGRlbCBjYWNoZVtmaWxlbmFtZV0KICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIHNpemUgIT0gc3RhdC5zdF9zaXplIG9yIG10aW1lICE9IHN0YXQuc3RfbXRpbWU6CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICBpZiBuYW1lIGFuZCBnZXRfc291cmNlOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGdldF9zb3VyY2UobmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKQEAgLTExOCwxNCArMTE4LDE0IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3RhdCA9IG9zLnN0YXQoZnVsbG5hbWUpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBbXQogICAgIHRyeToKICAgICAgICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZ1bGxuYW1lKSBhcyBmcDoKICAgICAgICAgICAgIGxpbmVzID0gZnAucmVhZGxpbmVzKCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCiAgICAgaWYgbGluZXMgYW5kIG5vdCBsaW5lc1stMV0uZW5kc3dpdGgoJ1xuJyk6CiAgICAgICAgIGxpbmVzWy0xXSArPSAnXG4nCmRpZmYgLS1naXQgYS9MaWIvbG9jYWxlLnB5IGIvTGliL2xvY2FsZS5weQppbmRleCA3Y2ZlYTYxLi5mYTI0ODI5IDEwMDY0NAotLS0gYS9MaWIvbG9jYWxlLnB5CisrKyBiL0xpYi9sb2NhbGUucHkKQEAgLTM0NCwxNCArMzQ0LDMyIEBACiAgICAgIyBDb252ZXJ0IHRoZSBlbmNvZGluZyB0byBhIEMgbGliIGNvbXBhdGlibGUgZW5jb2Rpbmcgc3RyaW5nCiAgICAgbm9ybV9lbmNvZGluZyA9IGVuY29kaW5ncy5ub3JtYWxpemVfZW5jb2RpbmcoZW5jb2RpbmcpCiAgICAgI3ByaW50KCdub3JtIGVuY29kaW5nOiAlcicgJSBub3JtX2VuY29kaW5nKQotICAgIG5vcm1fZW5jb2RpbmcgPSBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzLmdldChub3JtX2VuY29kaW5nLAorICAgIG5vcm1fZW5jb2RpbmcgPSBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzLmdldChub3JtX2VuY29kaW5nLmxvd2VyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1fZW5jb2RpbmcpCiAgICAgI3ByaW50KCdhbGlhc2VkIGVuY29kaW5nOiAlcicgJSBub3JtX2VuY29kaW5nKQotICAgIGVuY29kaW5nID0gbG9jYWxlX2VuY29kaW5nX2FsaWFzLmdldChub3JtX2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtX2VuY29kaW5nKQorICAgIGVuY29kaW5nID0gbm9ybV9lbmNvZGluZworICAgIG5vcm1fZW5jb2RpbmcgPSBub3JtX2VuY29kaW5nLmxvd2VyKCkKKyAgICBpZiBub3JtX2VuY29kaW5nIGluIGxvY2FsZV9lbmNvZGluZ19hbGlhczoKKyAgICAgICAgZW5jb2RpbmcgPSBsb2NhbGVfZW5jb2RpbmdfYWxpYXNbbm9ybV9lbmNvZGluZ10KKyAgICBlbHNlOgorICAgICAgICBub3JtX2VuY29kaW5nID0gbm9ybV9lbmNvZGluZy5yZXBsYWNlKCdfJywgJycpCisgICAgICAgIG5vcm1fZW5jb2RpbmcgPSBub3JtX2VuY29kaW5nLnJlcGxhY2UoJy0nLCAnJykKKyAgICAgICAgaWYgbm9ybV9lbmNvZGluZyBpbiBsb2NhbGVfZW5jb2RpbmdfYWxpYXM6CisgICAgICAgICAgICBlbmNvZGluZyA9IGxvY2FsZV9lbmNvZGluZ19hbGlhc1tub3JtX2VuY29kaW5nXQogICAgICNwcmludCgnZm91bmQgZW5jb2RpbmcgJXInICUgZW5jb2RpbmcpCiAgICAgcmV0dXJuIGxhbmduYW1lICsgJy4nICsgZW5jb2RpbmcKIAorZGVmIF9hcHBlbmRfbW9kaWZpZXIoY29kZSwgbW9kaWZpZXIpOgorICAgIGlmIG1vZGlmaWVyID09ICdldXJvJzoKKyAgICAgICAgaWYgJy4nIG5vdCBpbiBjb2RlOgorICAgICAgICAgICAgcmV0dXJuIGNvZGUgKyAnLklTTzg4NTktMTUnCisgICAgICAgIF8sIF8sIGVuY29kaW5nID0gY29kZS5wYXJ0aXRpb24oJy4nKQorICAgICAgICBpZiBlbmNvZGluZyBpbiAoJ0lTTzg4NTktMTUnLCAnVVRGLTgnKToKKyAgICAgICAgICAgIHJldHVybiBjb2RlCisgICAgICAgIGlmIGVuY29kaW5nID09ICdJU084ODU5LTEnOgorICAgICAgICAgICAgcmV0dXJuIF9yZXBsYWNlX2VuY29kaW5nKGNvZGUsICdJU084ODU5LTE1JykKKyAgICByZXR1cm4gY29kZSArICdAJyArIG1vZGlmaWVyCisKIGRlZiBub3JtYWxpemUobG9jYWxlbmFtZSk6CiAKICAgICAiIiIgUmV0dXJucyBhIG5vcm1hbGl6ZWQgbG9jYWxlIGNvZGUgZm9yIHRoZSBnaXZlbiBsb2NhbGUKQEAgLTQwMyw3ICs0MjEsNyBAQAogICAgICAgICBpZiBjb2RlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgI3ByaW50KCdsb29rdXAgd2l0aG91dCBtb2RpZmllciBzdWNjZWVkZWQnKQogICAgICAgICAgICAgaWYgJ0AnIG5vdCBpbiBjb2RlOgotICAgICAgICAgICAgICAgIHJldHVybiBjb2RlICsgJ0AnICsgbW9kaWZpZXIKKyAgICAgICAgICAgICAgICByZXR1cm4gX2FwcGVuZF9tb2RpZmllcihjb2RlLCBtb2RpZmllcikKICAgICAgICAgICAgIGlmIGNvZGUuc3BsaXQoJ0AnLCAxKVsxXS5sb3dlcigpID09IG1vZGlmaWVyOgogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlCiAgICAgICAgICNwcmludCgnc2Vjb25kIGxvb2t1cCBmYWlsZWQnKQpAQCAtNDI3LDcgKzQ0NSw4IEBACiAgICAgICAgICAgICBpZiBjb2RlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICNwcmludCgnbG9va3VwIHdpdGhvdXQgbW9kaWZpZXIgYW5kIGVuY29kaW5nIHN1Y2NlZWRlZCcpCiAgICAgICAgICAgICAgICAgaWYgJ0AnIG5vdCBpbiBjb2RlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlcGxhY2VfZW5jb2RpbmcoY29kZSwgZW5jb2RpbmcpICsgJ0AnICsgbW9kaWZpZXIKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IF9yZXBsYWNlX2VuY29kaW5nKGNvZGUsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2FwcGVuZF9tb2RpZmllcihjb2RlLCBtb2RpZmllcikKICAgICAgICAgICAgICAgICBjb2RlLCBkZWZtb2QgPSBjb2RlLnNwbGl0KCdAJywgMSkKICAgICAgICAgICAgICAgICBpZiBkZWZtb2QubG93ZXIoKSA9PSBtb2RpZmllcjoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXBsYWNlX2VuY29kaW5nKGNvZGUsIGVuY29kaW5nKSArICdAJyArIGRlZm1vZApAQCAtNTg2LDggKzYwNSw4IEBACiAgICAgIyBPbiBXaW4zMiwgdGhpcyB3aWxsIHJldHVybiB0aGUgQU5TSSBjb2RlIHBhZ2UKICAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlID0gVHJ1ZSk6CiAgICAgICAgICIiIlJldHVybiB0aGUgY2hhcnNldCB0aGF0IHRoZSB1c2VyIGlzIGxpa2VseSB1c2luZy4iIiIKLSAgICAgICAgaW1wb3J0IF9sb2NhbGUKLSAgICAgICAgcmV0dXJuIF9sb2NhbGUuX2dldGRlZmF1bHRsb2NhbGUoKVsxXQorICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUKKyAgICAgICAgcmV0dXJuIF9ib290bG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKQogZWxzZToKICAgICAjIE9uIFVuaXgsIGlmIENPREVTRVQgaXMgYXZhaWxhYmxlLCB1c2UgdGhhdC4KICAgICB0cnk6CkBAIC02MDYsMjcgKzYyNSwxNiBAQAogICAgICAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlID0gVHJ1ZSk6CiAgICAgICAgICAgICAiIiJSZXR1cm4gdGhlIGNoYXJzZXQgdGhhdCB0aGUgdXNlciBpcyBsaWtlbHkgdXNpbmcsCiAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLiIiIgorICAgICAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlCiAgICAgICAgICAgICBpZiBkb19zZXRsb2NhbGU6CiAgICAgICAgICAgICAgICAgb2xkbG9jID0gc2V0bG9jYWxlKExDX0NUWVBFKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX0NUWVBFLCAiIikKICAgICAgICAgICAgICAgICBleGNlcHQgRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBubF9sYW5naW5mbyhDT0RFU0VUKQotICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgICAgICAgICAgIyBubF9sYW5naW5mbyBjYW4gcmV0dXJuIGFuIGVtcHR5IHN0cmluZwotICAgICAgICAgICAgICAgICAgICAjIHdoZW4gdGhlIHNldHRpbmcgaGFzIGFuIGludmFsaWQgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgICMgRGVmYXVsdCB0byBVVEYtOCBpbiB0aGF0IGNhc2UgYmVjYXVzZQotICAgICAgICAgICAgICAgICAgICAjIFVURi04IGlzIHRoZSBkZWZhdWx0IGNoYXJzZXQgb24gT1NYIGFuZAotICAgICAgICAgICAgICAgICAgICAjIHJldHVybmluZyBub3RoaW5nIHdpbGwgY3Jhc2ggdGhlCi0gICAgICAgICAgICAgICAgICAgICMgaW50ZXJwcmV0ZXIuCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdVVEYtOCcKKyAgICAgICAgICAgIHJlc3VsdCA9IF9ib290bG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKQorICAgICAgICAgICAgaWYgZG9fc2V0bG9jYWxlOgogICAgICAgICAgICAgICAgIHNldGxvY2FsZShMQ19DVFlQRSwgb2xkbG9jKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBubF9sYW5naW5mbyhDT0RFU0VUKQotICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgICAgICAgICAgIyBTZWUgYWJvdmUgZm9yIGV4cGxhbmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdVVEYtOCcKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogCkBAIC02NTQsNiArNjYyLDE0IEBACiAgICAgJ2ppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnSklTNycsCiAgICAgJ2ppczcnOiAgICAgICAgICAgICAgICAgICAgICAgICAnSklTNycsCiAgICAgJ2FqZWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZXVjSlAnLAorICAgICdrb2k4Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgJ0tPSTgtQycsCisgICAgJ21pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAnQ1AxMjUxJywKKyAgICAnbWljcm9zb2Z0Y3AxMjU1JzogICAgICAgICAgICAgICdDUDEyNTUnLAorICAgICdtaWNyb3NvZnRjcDEyNTYnOiAgICAgICAgICAgICAgJ0NQMTI1NicsCisgICAgJzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xJywKKyAgICAnODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgICdJU084ODU5LTInLAorICAgICc4ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAgJ0lTTzg4NTktNScsCisgICAgJzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xNScsCiAKICAgICAjIE1hcHBpbmdzIGZyb20gUHl0aG9uIGNvZGVjIG5hbWVzIHRvIEMgbGliIGVuY29kaW5nIG5hbWVzCiAgICAgJ2FzY2lpJzogICAgICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xJywKQEAgLTY4MSwxMCArNjk3LDE4IEBACiAgICAgJ3V0Zl84JzogICAgICAgICAgICAgICAgICAgICAgICAnVVRGLTgnLAogICAgICdrb2k4X3InOiAgICAgICAgICAgICAgICAgICAgICAgJ0tPSTgtUicsCiAgICAgJ2tvaThfdSc6ICAgICAgICAgICAgICAgICAgICAgICAnS09JOC1VJywKKyAgICAnY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICdDUDEyNTEnLAorICAgICdjcDEyNTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ0NQMTI1NScsCisgICAgJ2NwMTI1Nic6ICAgICAgICAgICAgICAgICAgICAgICAnQ1AxMjU2JywKKwogICAgICMgWFhYIFRoaXMgbGlzdCBpcyBzdGlsbCBpbmNvbXBsZXRlLiBJZiB5b3Uga25vdyBtb3JlCiAgICAgIyBtYXBwaW5ncywgcGxlYXNlIGZpbGUgYSBidWcgcmVwb3J0LiBUaGFua3MuCiB9CiAKK2ZvciBrLCB2IGluIHNvcnRlZChsb2NhbGVfZW5jb2RpbmdfYWxpYXMuaXRlbXMoKSk6CisgICAgayA9IGsucmVwbGFjZSgnXycsICcnKQorICAgIGxvY2FsZV9lbmNvZGluZ19hbGlhcy5zZXRkZWZhdWx0KGssIHYpCisKICMKICMgVGhlIGxvY2FsZV9hbGlhcyB0YWJsZSBtYXBzIGxvd2VyY2FzZSBhbGlhcyBuYW1lcyB0byBDIGxvY2FsZSBuYW1lcwogIyAoY2FzZS1zZW5zaXRpdmUpLiBFbmNvZGluZ3MgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgZnJvbSB0aGUgbG9jYWxlCkBAIC03OTcsNTUgKzgyMSwzMyBAQAogbG9jYWxlX2FsaWFzID0gewogICAgICdhMyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXpfQVouS09JOC1DJywKICAgICAnYTNfYXonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F6X0FaLktPSTgtQycsCi0gICAgJ2EzX2F6LmtvaThjJzogICAgICAgICAgICAgICAgICAgICAgICAgICdhel9BWi5LT0k4LUMnLAogICAgICdhM19hei5rb2ljJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnYXpfQVouS09JOC1DJywKICAgICAnYWYnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FmX1pBLklTTzg4NTktMScsCiAgICAgJ2FmX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZl9aQS5JU084ODU5LTEnLAotICAgICdhZl96YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnYWZfWkEuSVNPODg1OS0xJywKICAgICAnYW0nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FtX0VULlVURi04JywKICAgICAnYW1fZXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FtX0VULlVURi04JywKICAgICAnYW1lcmljYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCi0gICAgJ2FtZXJpY2FuLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAogICAgICdhcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfQUEuSVNPODg1OS02JywKICAgICAnYXJfYWEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0FBLklTTzg4NTktNicsCi0gICAgJ2FyX2FhLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9BQS5JU084ODU5LTYnLAogICAgICdhcl9hZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfQUUuSVNPODg1OS02JywKLSAgICAnYXJfYWUuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0FFLklTTzg4NTktNicsCiAgICAgJ2FyX2JoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9CSC5JU084ODU5LTYnLAotICAgICdhcl9iaC5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfQkguSVNPODg1OS02JywKICAgICAnYXJfZHonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0RaLklTTzg4NTktNicsCi0gICAgJ2FyX2R6Lmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9EWi5JU084ODU5LTYnLAogICAgICdhcl9lZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfRUcuSVNPODg1OS02JywKLSAgICAnYXJfZWcuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0VHLklTTzg4NTktNicsCiAgICAgJ2FyX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9JTi5VVEYtOCcsCiAgICAgJ2FyX2lxJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9JUS5JU084ODU5LTYnLAotICAgICdhcl9pcS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfSVEuSVNPODg1OS02JywKICAgICAnYXJfam8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0pPLklTTzg4NTktNicsCi0gICAgJ2FyX2pvLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9KTy5JU084ODU5LTYnLAogICAgICdhcl9rdyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfS1cuSVNPODg1OS02JywKLSAgICAnYXJfa3cuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0tXLklTTzg4NTktNicsCiAgICAgJ2FyX2xiJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9MQi5JU084ODU5LTYnLAotICAgICdhcl9sYi5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfTEIuSVNPODg1OS02JywKICAgICAnYXJfbHknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0xZLklTTzg4NTktNicsCi0gICAgJ2FyX2x5Lmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9MWS5JU084ODU5LTYnLAogICAgICdhcl9tYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfTUEuSVNPODg1OS02JywKLSAgICAnYXJfbWEuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX01BLklTTzg4NTktNicsCiAgICAgJ2FyX29tJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9PTS5JU084ODU5LTYnLAotICAgICdhcl9vbS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfT00uSVNPODg1OS02JywKICAgICAnYXJfcWEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1FBLklTTzg4NTktNicsCi0gICAgJ2FyX3FhLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9RQS5JU084ODU5LTYnLAogICAgICdhcl9zYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfU0EuSVNPODg1OS02JywKLSAgICAnYXJfc2EuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1NBLklTTzg4NTktNicsCiAgICAgJ2FyX3NkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9TRC5JU084ODU5LTYnLAotICAgICdhcl9zZC5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfU0QuSVNPODg1OS02JywKICAgICAnYXJfc3knOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1NZLklTTzg4NTktNicsCi0gICAgJ2FyX3N5Lmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9TWS5JU084ODU5LTYnLAogICAgICdhcl90bic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfVE4uSVNPODg1OS02JywKLSAgICAnYXJfdG4uaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1ROLklTTzg4NTktNicsCiAgICAgJ2FyX3llJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9ZRS5JU084ODU5LTYnLAotICAgICdhcl95ZS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfWUUuSVNPODg1OS02JywKICAgICAnYXJhYmljJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0FBLklTTzg4NTktNicsCi0gICAgJ2FyYWJpYy5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICdhcl9BQS5JU084ODU5LTYnLAogICAgICdhcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNfSU4uVVRGLTgnLAogICAgICdhc19pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNfSU4uVVRGLTgnLAogICAgICdheic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXpfQVouSVNPODg1OS05RScsCkBAIC04NTQsMzUgKzg1NiwyMCBAQAogICAgICdiZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuQ1AxMjUxJywKICAgICAnYmVAbGF0aW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlX0JZLlVURi04QGxhdGluJywKICAgICAnYmVfYnknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlX0JZLkNQMTI1MScsCi0gICAgJ2JlX2J5LmNwMTI1MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5DUDEyNTEnLAotICAgICdiZV9ieS5taWNyb3NvZnRjcDEyNTEnOiAgICAgICAgICAgICAgICAnYmVfQlkuQ1AxMjUxJywKLSAgICAnYmVfYnkudXRmOEBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgJ2JlX0JZLlVURi04QGxhdGluJywKICAgICAnYmVfYnlAbGF0aW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlX0JZLlVURi04QGxhdGluJywKICAgICAnYmcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLkNQMTI1MScsCiAgICAgJ2JnX2JnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZ19CRy5DUDEyNTEnLAotICAgICdiZ19iZy5jcDEyNTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuQ1AxMjUxJywKLSAgICAnYmdfYmcuaXNvODg1OTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLklTTzg4NTktNScsCi0gICAgJ2JnX2JnLmtvaThyJzogICAgICAgICAgICAgICAgICAgICAgICAgICdiZ19CRy5LT0k4LVInLAotICAgICdiZ19iZy5taWNyb3NvZnRjcDEyNTEnOiAgICAgICAgICAgICAgICAnYmdfQkcuQ1AxMjUxJywKICAgICAnYm5faW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JuX0lOLlVURi04JywKICAgICAnYm9faW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvX0lOLlVURi04JywKICAgICAnYm9rbWFsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMScsCiAgICAgJ2Jva21ceGU1bCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYl9OTy5JU084ODU5LTEnLAogICAgICdicic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuSVNPODg1OS0xJywKICAgICAnYnJfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JyX0ZSLklTTzg4NTktMScsCi0gICAgJ2JyX2ZyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdicl9GUi5JU084ODU5LTEnLAotICAgICdicl9mci5pc284ODU5MTQnOiAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuSVNPODg1OS0xNCcsCi0gICAgJ2JyX2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdicl9GUi5JU084ODU5LTE1JywKLSAgICAnYnJfZnIuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2JyX0ZSLklTTzg4NTktMTUnLAotICAgICdicl9mci51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuVVRGLTgnLAotICAgICdicl9mckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuSVNPODg1OS0xNScsCiAgICAgJ2JzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdic19CQS5JU084ODU5LTInLAogICAgICdic19iYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnNfQkEuSVNPODg1OS0yJywKLSAgICAnYnNfYmEuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2JzX0JBLklTTzg4NTktMicsCiAgICAgJ2J1bGdhcmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZ19CRy5DUDEyNTEnLAogICAgICdjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ2MtZnJlbmNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9DQS5JU084ODU5LTEnLAotICAgICdjLWZyZW5jaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAnZnJfQ0EuSVNPODg1OS0xJywKICAgICAnYy5hc2NpaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0MnLAogICAgICdjLmVuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ2MuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLApAQCAtODkwLDM0MyArODc3LDEzMSBAQAogICAgICdjX2MuYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ2NhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTEnLAogICAgICdjYV9hZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xJywKLSAgICAnY2FfYWQuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0FELklTTzg4NTktMScsCi0gICAgJ2NhX2FkLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTE1JywKLSAgICAnY2FfYWQuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2NhX0FELklTTzg4NTktMTUnLAotICAgICdjYV9hZC51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnY2FfQUQuVVRGLTgnLAotICAgICdjYV9hZEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xNScsCiAgICAgJ2NhX2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTEnLAotICAgICdjYV9lcy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xJywKLSAgICAnY2FfZXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMTUnLAotICAgICdjYV9lcy5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xNScsCi0gICAgJ2NhX2VzLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5VVEYtOCcsCi0gICAgJ2NhX2VzQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTE1JywKICAgICAnY2FfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMScsCi0gICAgJ2NhX2ZyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdjYV9GUi5JU084ODU5LTEnLAotICAgICdjYV9mci5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuSVNPODg1OS0xNScsCi0gICAgJ2NhX2ZyLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdjYV9GUi5JU084ODU5LTE1JywKLSAgICAnY2FfZnIudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLlVURi04JywKLSAgICAnY2FfZnJAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMTUnLAogICAgICdjYV9pdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xJywKLSAgICAnY2FfaXQuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0lULklTTzg4NTktMScsCi0gICAgJ2NhX2l0Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5JU084ODU5LTE1JywKLSAgICAnY2FfaXQuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2NhX0lULklTTzg4NTktMTUnLAotICAgICdjYV9pdC51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuVVRGLTgnLAotICAgICdjYV9pdEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xNScsCiAgICAgJ2NhdGFsYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTEnLAogICAgICdjZXh0ZW5kJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnY2V4dGVuZC5lbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCiAgICAgJ2NoaW5lc2Utcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5ldWNDTicsCiAgICAgJ2NoaW5lc2UtdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9UVy5ldWNUVycsCiAgICAgJ2Nyb2F0aWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdocl9IUi5JU084ODU5LTInLAogICAgICdjcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKICAgICAnY3NfY3MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCi0gICAgJ2NzX2NzLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAogICAgICdjc19jeic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKLSAgICAnY3NfY3ouaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCiAgICAgJ2N5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjeV9HQi5JU084ODU5LTEnLAogICAgICdjeV9nYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3lfR0IuSVNPODg1OS0xJywKLSAgICAnY3lfZ2IuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2N5X0dCLklTTzg4NTktMScsCi0gICAgJ2N5X2diLmlzbzg4NTkxNCc6ICAgICAgICAgICAgICAgICAgICAgICdjeV9HQi5JU084ODU5LTE0JywKLSAgICAnY3lfZ2IuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2N5X0dCLklTTzg4NTktMTUnLAotICAgICdjeV9nYkBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY3lfR0IuSVNPODg1OS0xNScsCiAgICAgJ2N6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAogICAgICdjel9jeic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKICAgICAnY3plY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCiAgICAgJ2RhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAotICAgICdkYS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xNScsCiAgICAgJ2RhX2RrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAotICAgICdkYV9kay44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKLSAgICAnZGFfZGsuODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMTUnLAotICAgICdkYV9kay5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKLSAgICAnZGFfZGsuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMTUnLAotICAgICdkYV9ka0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xNScsCiAgICAgJ2RhbmlzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAotICAgICdkYW5pc2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKICAgICAnZGFuc2snOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCiAgICAgJ2RlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAotICAgICdkZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xNScsCiAgICAgJ2RlX2F0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9BVC5JU084ODU5LTEnLAotICAgICdkZV9hdC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZGVfQVQuSVNPODg1OS0xJywKLSAgICAnZGVfYXQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULklTTzg4NTktMTUnLAotICAgICdkZV9hdC5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZGVfQVQuSVNPODg1OS0xNScsCi0gICAgJ2RlX2F0LnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9BVC5VVEYtOCcsCi0gICAgJ2RlX2F0QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9BVC5JU084ODU5LTE1JywKICAgICAnZGVfYmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0JFLklTTzg4NTktMScsCi0gICAgJ2RlX2JlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkZV9CRS5JU084ODU5LTEnLAotICAgICdkZV9iZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGVfQkUuSVNPODg1OS0xNScsCi0gICAgJ2RlX2JlLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdkZV9CRS5JU084ODU5LTE1JywKLSAgICAnZGVfYmUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0JFLlVURi04JywKLSAgICAnZGVfYmVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0JFLklTTzg4NTktMTUnLAogICAgICdkZV9jaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfQ0guSVNPODg1OS0xJywKLSAgICAnZGVfY2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0NILklTTzg4NTktMScsCi0gICAgJ2RlX2NoLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9DSC5JU084ODU5LTE1JywKLSAgICAnZGVfY2hAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0NILklTTzg4NTktMTUnLAogICAgICdkZV9kZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKLSAgICAnZGVfZGUuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCi0gICAgJ2RlX2RlLjg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTE1JywKLSAgICAnZGVfZGUuODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMTUnLAotICAgICdkZV9kZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKLSAgICAnZGVfZGUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMTUnLAotICAgICdkZV9kZS5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xNScsCi0gICAgJ2RlX2RlLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5VVEYtOCcsCi0gICAgJ2RlX2RlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTE1JywKICAgICAnZGVfbHUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0xVLklTTzg4NTktMScsCi0gICAgJ2RlX2x1Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkZV9MVS5JU084ODU5LTEnLAotICAgICdkZV9sdS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGVfTFUuSVNPODg1OS0xNScsCi0gICAgJ2RlX2x1Lmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdkZV9MVS5JU084ODU5LTE1JywKLSAgICAnZGVfbHUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0xVLlVURi04JywKLSAgICAnZGVfbHVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0xVLklTTzg4NTktMTUnLAogICAgICdkZXV0c2NoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKICAgICAnZHV0Y2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMScsCiAgICAgJ2R1dGNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTEnLAogICAgICdlZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWVfRUUuSVNPODg1OS00JywKICAgICAnZWVfZWUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VlX0VFLklTTzg4NTktNCcsCi0gICAgJ2VlX2VlLmlzbzg4NTk0JzogICAgICAgICAgICAgICAgICAgICAgICdlZV9FRS5JU084ODU5LTQnLAogICAgICdlZXN0aSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS0xJywKICAgICAnZWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsX0dSLklTTzg4NTktNycsCiAgICAgJ2VsX2dyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbF9HUi5JU084ODU5LTcnLAotICAgICdlbF9nci5pc284ODU5Nyc6ICAgICAgICAgICAgICAgICAgICAgICAnZWxfR1IuSVNPODg1OS03JywKICAgICAnZWxfZ3JAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsX0dSLklTTzg4NTktMTUnLAogICAgICdlbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnZW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCiAgICAgJ2VuX2F1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9BVS5JU084ODU5LTEnLAotICAgICdlbl9hdS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fQVUuSVNPODg1OS0xJywKICAgICAnZW5fYmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0JFLklTTzg4NTktMScsCi0gICAgJ2VuX2JlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9CRS5JU084ODU5LTE1JywKICAgICAnZW5fYncnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0JXLklTTzg4NTktMScsCi0gICAgJ2VuX2J3Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9CVy5JU084ODU5LTEnLAogICAgICdlbl9jYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fQ0EuSVNPODg1OS0xJywKLSAgICAnZW5fY2EuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0NBLklTTzg4NTktMScsCiAgICAgJ2VuX2diJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9HQi5JU084ODU5LTEnLAotICAgICdlbl9nYi44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fR0IuSVNPODg1OS0xJywKLSAgICAnZW5fZ2IuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCi0gICAgJ2VuX2diLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlbl9HQi5JU084ODU5LTE1JywKLSAgICAnZW5fZ2JAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMTUnLAogICAgICdlbl9oayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fSEsuSVNPODg1OS0xJywKLSAgICAnZW5faGsuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0hLLklTTzg4NTktMScsCiAgICAgJ2VuX2llJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9JRS5JU084ODU5LTEnLAotICAgICdlbl9pZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fSUUuSVNPODg1OS0xJywKLSAgICAnZW5faWUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VuX0lFLklTTzg4NTktMTUnLAotICAgICdlbl9pZS5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZW5fSUUuSVNPODg1OS0xNScsCi0gICAgJ2VuX2llLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdlbl9JRS5VVEYtOCcsCi0gICAgJ2VuX2llQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9JRS5JU084ODU5LTE1JywKICAgICAnZW5faW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0lOLklTTzg4NTktMScsCiAgICAgJ2VuX256JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9OWi5JU084ODU5LTEnLAotICAgICdlbl9uei5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fTlouSVNPODg1OS0xJywKICAgICAnZW5fcGgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1BILklTTzg4NTktMScsCi0gICAgJ2VuX3BoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9QSC5JU084ODU5LTEnLAogICAgICdlbl9zZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fU0cuSVNPODg1OS0xJywKLSAgICAnZW5fc2cuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1NHLklTTzg4NTktMScsCiAgICAgJ2VuX3VrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9HQi5JU084ODU5LTEnLAogICAgICdlbl91cyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnZW5fdXMuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCi0gICAgJ2VuX3VzLjg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTE1JywKLSAgICAnZW5fdXMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCi0gICAgJ2VuX3VzLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTE1JywKLSAgICAnZW5fdXMuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAotICAgICdlbl91c0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xNScsCiAgICAgJ2VuX3VzQGV1cm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTE1JywKICAgICAnZW5femEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1pBLklTTzg4NTktMScsCi0gICAgJ2VuX3phLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9aQS5JU084ODU5LTEnLAotICAgICdlbl96YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fWkEuSVNPODg1OS0xJywKLSAgICAnZW5femEuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VuX1pBLklTTzg4NTktMTUnLAotICAgICdlbl96YUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fWkEuSVNPODg1OS0xNScsCiAgICAgJ2VuX3p3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9aVy5JU084ODU5LTEnLAotICAgICdlbl96dy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fWlcuSVNPODg1OS0xJywKICAgICAnZW5nX2diJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCi0gICAgJ2VuZ19nYi44ODU5JzogICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9HQi5JU084ODU5LTEnLAogICAgICdlbmdsaXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fRU4uSVNPODg1OS0xJywKLSAgICAnZW5nbGlzaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgJ2VuX0VOLklTTzg4NTktMScsCiAgICAgJ2VuZ2xpc2hfdWsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9HQi5JU084ODU5LTEnLAotICAgICdlbmdsaXNoX3VrLjg4NTknOiAgICAgICAgICAgICAgICAgICAgICAnZW5fR0IuSVNPODg1OS0xJywKICAgICAnZW5nbGlzaF91bml0ZWQtc3RhdGVzJzogICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCiAgICAgJ2VuZ2xpc2hfdW5pdGVkLXN0YXRlcy40MzcnOiAgICAgICAgICAgICdDJywKICAgICAnZW5nbGlzaF91cyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCi0gICAgJ2VuZ2xpc2hfdXMuODg1OSc6ICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAotICAgICdlbmdsaXNoX3VzLmFzY2lpJzogICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKICAgICAnZW8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VvX1hYLklTTzg4NTktMycsCiAgICAgJ2VvX2VvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlb19FTy5JU084ODU5LTMnLAotICAgICdlb19lby5pc284ODU5Myc6ICAgICAgICAgICAgICAgICAgICAgICAnZW9fRU8uSVNPODg1OS0zJywKICAgICAnZW9feHgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VvX1hYLklTTzg4NTktMycsCi0gICAgJ2VvX3h4Lmlzbzg4NTkzJzogICAgICAgICAgICAgICAgICAgICAgICdlb19YWC5JU084ODU5LTMnLAogICAgICdlcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xJywKICAgICAnZXNfYXInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0FSLklTTzg4NTktMScsCi0gICAgJ2VzX2FyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19BUi5JU084ODU5LTEnLAogICAgICdlc19ibyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfQk8uSVNPODg1OS0xJywKLSAgICAnZXNfYm8uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0JPLklTTzg4NTktMScsCiAgICAgJ2VzX2NsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19DTC5JU084ODU5LTEnLAotICAgICdlc19jbC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfQ0wuSVNPODg1OS0xJywKICAgICAnZXNfY28nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0NPLklTTzg4NTktMScsCi0gICAgJ2VzX2NvLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19DTy5JU084ODU5LTEnLAogICAgICdlc19jcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfQ1IuSVNPODg1OS0xJywKLSAgICAnZXNfY3IuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0NSLklTTzg4NTktMScsCiAgICAgJ2VzX2RvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19ETy5JU084ODU5LTEnLAotICAgICdlc19kby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfRE8uSVNPODg1OS0xJywKICAgICAnZXNfZWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VDLklTTzg4NTktMScsCi0gICAgJ2VzX2VjLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19FQy5JU084ODU5LTEnLAogICAgICdlc19lcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xJywKLSAgICAnZXNfZXMuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMScsCi0gICAgJ2VzX2VzLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAotICAgICdlc19lcy5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xNScsCi0gICAgJ2VzX2VzLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTE1JywKLSAgICAnZXNfZXMudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2VzX0VTLlVURi04JywKLSAgICAnZXNfZXNAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMTUnLAogICAgICdlc19ndCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfR1QuSVNPODg1OS0xJywKLSAgICAnZXNfZ3QuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0dULklTTzg4NTktMScsCiAgICAgJ2VzX2huJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19ITi5JU084ODU5LTEnLAotICAgICdlc19obi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfSE4uSVNPODg1OS0xJywKICAgICAnZXNfbXgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX01YLklTTzg4NTktMScsCi0gICAgJ2VzX214Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19NWC5JU084ODU5LTEnLAogICAgICdlc19uaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfTkkuSVNPODg1OS0xJywKLSAgICAnZXNfbmkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX05JLklTTzg4NTktMScsCiAgICAgJ2VzX3BhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19QQS5JU084ODU5LTEnLAotICAgICdlc19wYS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfUEEuSVNPODg1OS0xJywKLSAgICAnZXNfcGEuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VzX1BBLklTTzg4NTktMTUnLAotICAgICdlc19wYUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfUEEuSVNPODg1OS0xNScsCiAgICAgJ2VzX3BlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19QRS5JU084ODU5LTEnLAotICAgICdlc19wZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfUEUuSVNPODg1OS0xJywKLSAgICAnZXNfcGUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VzX1BFLklTTzg4NTktMTUnLAotICAgICdlc19wZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfUEUuSVNPODg1OS0xNScsCiAgICAgJ2VzX3ByJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19QUi5JU084ODU5LTEnLAotICAgICdlc19wci5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfUFIuSVNPODg1OS0xJywKICAgICAnZXNfcHknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BZLklTTzg4NTktMScsCi0gICAgJ2VzX3B5Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19QWS5JU084ODU5LTEnLAotICAgICdlc19weS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXNfUFkuSVNPODg1OS0xNScsCi0gICAgJ2VzX3B5QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19QWS5JU084ODU5LTE1JywKICAgICAnZXNfc3YnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1NWLklTTzg4NTktMScsCi0gICAgJ2VzX3N2Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19TVi5JU084ODU5LTEnLAotICAgICdlc19zdi5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXNfU1YuSVNPODg1OS0xNScsCi0gICAgJ2VzX3N2QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19TVi5JU084ODU5LTE1JywKICAgICAnZXNfdXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1VTLklTTzg4NTktMScsCi0gICAgJ2VzX3VzLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19VUy5JU084ODU5LTEnLAogICAgICdlc191eSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfVVkuSVNPODg1OS0xJywKLSAgICAnZXNfdXkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1VZLklTTzg4NTktMScsCi0gICAgJ2VzX3V5Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlc19VWS5JU084ODU5LTE1JywKLSAgICAnZXNfdXlAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1VZLklTTzg4NTktMTUnLAogICAgICdlc192ZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfVkUuSVNPODg1OS0xJywKLSAgICAnZXNfdmUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1ZFLklTTzg4NTktMScsCi0gICAgJ2VzX3ZlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlc19WRS5JU084ODU5LTE1JywKLSAgICAnZXNfdmVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1ZFLklTTzg4NTktMTUnLAogICAgICdlc3Rvbmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS0xJywKICAgICAnZXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V0X0VFLklTTzg4NTktMTUnLAogICAgICdldF9lZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS0xNScsCi0gICAgJ2V0X2VlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTEnLAotICAgICdldF9lZS5pc284ODU5MTMnOiAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS0xMycsCi0gICAgJ2V0X2VlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTE1JywKLSAgICAnZXRfZWUuaXNvODg1OTQnOiAgICAgICAgICAgICAgICAgICAgICAgJ2V0X0VFLklTTzg4NTktNCcsCi0gICAgJ2V0X2VlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTE1JywKICAgICAnZXUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V1X0VTLklTTzg4NTktMScsCiAgICAgJ2V1X2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldV9FUy5JU084ODU5LTEnLAotICAgICdldV9lcy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXVfRVMuSVNPODg1OS0xJywKLSAgICAnZXVfZXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2V1X0VTLklTTzg4NTktMTUnLAotICAgICdldV9lcy5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZXVfRVMuSVNPODg1OS0xNScsCi0gICAgJ2V1X2VzLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdldV9FUy5VVEYtOCcsCi0gICAgJ2V1X2VzQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdldV9FUy5JU084ODU5LTE1JywKICAgICAnZmEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhX0lSLlVURi04JywKICAgICAnZmFfaXInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhX0lSLlVURi04JywKICAgICAnZmFfaXIuaXNpcmkzMzQyJzogICAgICAgICAgICAgICAgICAgICAgJ2ZhX0lSLklTSVJJLTMzNDInLAogICAgICdmaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xNScsCi0gICAgJ2ZpLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTE1JywKICAgICAnZmlfZmknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMTUnLAotICAgICdmaV9maS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xJywKLSAgICAnZmlfZmkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMScsCi0gICAgJ2ZpX2ZpLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTE1JywKLSAgICAnZmlfZmkuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMTUnLAotICAgICdmaV9maS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuVVRGLTgnLAotICAgICdmaV9maUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xNScsCiAgICAgJ2Zpbm5pc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTEnLAotICAgICdmaW5uaXNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xJywKICAgICAnZm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvX0ZPLklTTzg4NTktMScsCiAgICAgJ2ZvX2ZvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb19GTy5JU084ODU5LTEnLAotICAgICdmb19mby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZm9fRk8uSVNPODg1OS0xJywKLSAgICAnZm9fZm8uaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2ZvX0ZPLklTTzg4NTktMTUnLAotICAgICdmb19mb0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9fRk8uSVNPODg1OS0xNScsCiAgICAgJ2ZyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAotICAgICdmci5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xNScsCiAgICAgJ2ZyX2JlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9CRS5JU084ODU5LTEnLAotICAgICdmcl9iZS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQkUuSVNPODg1OS0xJywKLSAgICAnZnJfYmUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLklTTzg4NTktMScsCi0gICAgJ2ZyX2JlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmcl9CRS5JU084ODU5LTE1JywKLSAgICAnZnJfYmUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2ZyX0JFLklTTzg4NTktMTUnLAotICAgICdmcl9iZS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZnJfQkUuVVRGLTgnLAotICAgICdmcl9iZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQkUuSVNPODg1OS0xNScsCiAgICAgJ2ZyX2NhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9DQS5JU084ODU5LTEnLAotICAgICdmcl9jYS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0EuSVNPODg1OS0xJywKLSAgICAnZnJfY2EuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NBLklTTzg4NTktMScsCi0gICAgJ2ZyX2NhLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmcl9DQS5JU084ODU5LTE1JywKLSAgICAnZnJfY2FAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NBLklTTzg4NTktMTUnLAogICAgICdmcl9jaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0guSVNPODg1OS0xJywKLSAgICAnZnJfY2guODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NILklTTzg4NTktMScsCi0gICAgJ2ZyX2NoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdmcl9DSC5JU084ODU5LTEnLAotICAgICdmcl9jaC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0guSVNPODg1OS0xNScsCi0gICAgJ2ZyX2NoQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9DSC5JU084ODU5LTE1JywKICAgICAnZnJfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCi0gICAgJ2ZyX2ZyLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAotICAgICdmcl9mci5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKLSAgICAnZnJfZnIuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMTUnLAotICAgICdmcl9mci5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xNScsCi0gICAgJ2ZyX2ZyLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5VVEYtOCcsCi0gICAgJ2ZyX2ZyQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTE1JywKICAgICAnZnJfbHUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0xVLklTTzg4NTktMScsCi0gICAgJ2ZyX2x1Ljg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9MVS5JU084ODU5LTEnLAotICAgICdmcl9sdS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZnJfTFUuSVNPODg1OS0xJywKLSAgICAnZnJfbHUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2ZyX0xVLklTTzg4NTktMTUnLAotICAgICdmcl9sdS5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZnJfTFUuSVNPODg1OS0xNScsCi0gICAgJ2ZyX2x1LnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdmcl9MVS5VVEYtOCcsCi0gICAgJ2ZyX2x1QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9MVS5JU084ODU5LTE1JywKICAgICAnZnJhblx4ZTdhaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCiAgICAgJ2ZyZV9mcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAotICAgICdmcmVfZnIuODg1OSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKICAgICAnZnJlbmNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCiAgICAgJ2ZyZW5jaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICdmcl9DSC5JU084ODU5LTEnLAogICAgICdmcmVuY2hfZnJhbmNlJzogICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKLSAgICAnZnJlbmNoX2ZyYW5jZS44ODU5JzogICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCiAgICAgJ2dhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnYV9JRS5JU084ODU5LTEnLAogICAgICdnYV9pZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2FfSUUuSVNPODg1OS0xJywKLSAgICAnZ2FfaWUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLklTTzg4NTktMScsCi0gICAgJ2dhX2llLmlzbzg4NTkxNCc6ICAgICAgICAgICAgICAgICAgICAgICdnYV9JRS5JU084ODU5LTE0JywKLSAgICAnZ2FfaWUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLklTTzg4NTktMTUnLAotICAgICdnYV9pZS5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZ2FfSUUuSVNPODg1OS0xNScsCi0gICAgJ2dhX2llLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdnYV9JRS5VVEYtOCcsCi0gICAgJ2dhX2llQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdnYV9JRS5JU084ODU5LTE1JywKICAgICAnZ2FsZWdvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMScsCiAgICAgJ2dhbGljaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbF9FUy5JU084ODU5LTEnLAogICAgICdnZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2RfR0IuSVNPODg1OS0xJywKICAgICAnZ2RfZ2InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dkX0dCLklTTzg4NTktMScsCi0gICAgJ2dkX2diLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdnZF9HQi5JU084ODU5LTEnLAotICAgICdnZF9nYi5pc284ODU5MTQnOiAgICAgICAgICAgICAgICAgICAgICAnZ2RfR0IuSVNPODg1OS0xNCcsCi0gICAgJ2dkX2diLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdnZF9HQi5JU084ODU5LTE1JywKLSAgICAnZ2RfZ2JAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dkX0dCLklTTzg4NTktMTUnLAogICAgICdnZXJfZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKLSAgICAnZ2VyX2RlLjg4NTknOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCiAgICAgJ2dlcm1hbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAogICAgICdnZXJtYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAnZGVfQ0guSVNPODg1OS0xJywKICAgICAnZ2VybWFuX2dlcm1hbnknOiAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCi0gICAgJ2dlcm1hbl9nZXJtYW55Ljg4NTknOiAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAogICAgICdnbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xfRVMuSVNPODg1OS0xJywKICAgICAnZ2xfZXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMScsCi0gICAgJ2dsX2VzLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdnbF9FUy5JU084ODU5LTEnLAotICAgICdnbF9lcy5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZ2xfRVMuSVNPODg1OS0xNScsCi0gICAgJ2dsX2VzLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdnbF9FUy5JU084ODU5LTE1JywKLSAgICAnZ2xfZXMudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLlVURi04JywKLSAgICAnZ2xfZXNAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMTUnLAogICAgICdncmVlayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWxfR1IuSVNPODg1OS03JywKLSAgICAnZ3JlZWsuaXNvODg1OTcnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VsX0dSLklTTzg4NTktNycsCiAgICAgJ2d1X2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdndV9JTi5VVEYtOCcsCiAgICAgJ2d2JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdndl9HQi5JU084ODU5LTEnLAogICAgICdndl9nYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3ZfR0IuSVNPODg1OS0xJywKLSAgICAnZ3ZfZ2IuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2d2X0dCLklTTzg4NTktMScsCi0gICAgJ2d2X2diLmlzbzg4NTkxNCc6ICAgICAgICAgICAgICAgICAgICAgICdndl9HQi5JU084ODU5LTE0JywKLSAgICAnZ3ZfZ2IuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2d2X0dCLklTTzg4NTktMTUnLAotICAgICdndl9nYkBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3ZfR0IuSVNPODg1OS0xNScsCiAgICAgJ2hlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5JU084ODU5LTgnLAogICAgICdoZV9pbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKLSAgICAnaGVfaWwuY3AxMjU1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2hlX0lMLkNQMTI1NScsCi0gICAgJ2hlX2lsLmlzbzg4NTk4JzogICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5JU084ODU5LTgnLAotICAgICdoZV9pbC5taWNyb3NvZnRjcDEyNTUnOiAgICAgICAgICAgICAgICAnaGVfSUwuQ1AxMjU1JywKICAgICAnaGVicmV3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlX0lMLklTTzg4NTktOCcsCi0gICAgJ2hlYnJldy5pc284ODU5OCc6ICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5JU084ODU5LTgnLAogICAgICdoaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGlfSU4uSVNDSUktREVWJywKICAgICAnaGlfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hpX0lOLklTQ0lJLURFVicsCiAgICAgJ2hpX2luLmlzY2lpZGV2JzogICAgICAgICAgICAgICAgICAgICAgICdoaV9JTi5JU0NJSS1ERVYnLApAQCAtMTIzNCwyMyArMTAwOSwxNyBAQAogICAgICdobmVfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG5lX0lOLlVURi04JywKICAgICAnaHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCiAgICAgJ2hyX2hyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdocl9IUi5JU084ODU5LTInLAotICAgICdocl9oci5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnaHJfSFIuSVNPODg1OS0yJywKICAgICAnaHJ2YXRza2knOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCiAgICAgJ2h1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodV9IVS5JU084ODU5LTInLAogICAgICdodV9odSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHVfSFUuSVNPODg1OS0yJywKLSAgICAnaHVfaHUuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2h1X0hVLklTTzg4NTktMicsCiAgICAgJ2h1bmdhcmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodV9IVS5JU084ODU5LTInLAogICAgICdpY2VsYW5kaWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfSVMuSVNPODg1OS0xJywKLSAgICAnaWNlbGFuZGljLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgJ2lzX0lTLklTTzg4NTktMScsCiAgICAgJ2lkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZF9JRC5JU084ODU5LTEnLAogICAgICdpZF9pZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRfSUQuSVNPODg1OS0xJywKICAgICAnaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkX0lELklTTzg4NTktMScsCiAgICAgJ2luX2lkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZF9JRC5JU084ODU5LTEnLAogICAgICdpcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfSVMuSVNPODg1OS0xJywKICAgICAnaXNfaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX0lTLklTTzg4NTktMScsCi0gICAgJ2lzX2lzLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdpc19JUy5JU084ODU5LTEnLAotICAgICdpc19pcy5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnaXNfSVMuSVNPODg1OS0xNScsCi0gICAgJ2lzX2lzQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19JUy5JU084ODU5LTE1JywKICAgICAnaXNvLTg4NTktMSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCiAgICAgJ2lzby04ODU5LTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTE1JywKICAgICAnaXNvODg1OS0xJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCkBAIC0xMjU4LDQ2ICsxMDI3LDIzIEBACiAgICAgJ2lzb184ODU5XzEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAogICAgICdpc29fODg1OV8xNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xNScsCiAgICAgJ2l0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTEnLAotICAgICdpdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xNScsCiAgICAgJ2l0X2NoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdF9DSC5JU084ODU5LTEnLAotICAgICdpdF9jaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnaXRfQ0guSVNPODg1OS0xJywKLSAgICAnaXRfY2guaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2l0X0NILklTTzg4NTktMTUnLAotICAgICdpdF9jaEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfQ0guSVNPODg1OS0xNScsCiAgICAgJ2l0X2l0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTEnLAotICAgICdpdF9pdC44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xJywKLSAgICAnaXRfaXQuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMScsCi0gICAgJ2l0X2l0Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTE1JywKLSAgICAnaXRfaXQuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMTUnLAotICAgICdpdF9pdC51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuVVRGLTgnLAotICAgICdpdF9pdEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xNScsCiAgICAgJ2l0YWxpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTEnLAotICAgICdpdGFsaWFuLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xJywKICAgICAnaXUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l1X0NBLk5VTkFDT00tOCcsCiAgICAgJ2l1X2NhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdV9DQS5OVU5BQ09NLTgnLAogICAgICdpdV9jYS5udW5hY29tOCc6ICAgICAgICAgICAgICAgICAgICAgICAnaXVfQ0EuTlVOQUNPTS04JywKICAgICAnaXcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlX0lMLklTTzg4NTktOCcsCiAgICAgJ2l3X2lsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5JU084ODU5LTgnLAotICAgICdpd19pbC5pc284ODU5OCc6ICAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKICAgICAnamEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKLSAgICAnamEuamlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLkpJUzcnLAotICAgICdqYS5zamlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuU0pJUycsCiAgICAgJ2phX2pwJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCi0gICAgJ2phX2pwLmFqZWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCiAgICAgJ2phX2pwLmV1Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCi0gICAgJ2phX2pwLmV1Y2pwJzogICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCi0gICAgJ2phX2pwLmlzby0yMDIyLWpwJzogICAgICAgICAgICAgICAgICAgICdqYV9KUC5KSVM3JywKLSAgICAnamFfanAuaXNvMjAyMmpwJzogICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLkpJUzcnLAotICAgICdqYV9qcC5qaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuSklTNycsCi0gICAgJ2phX2pwLmppczcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5KSVM3JywKICAgICAnamFfanAubXNjb2RlJzogICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLlNKSVMnLAogICAgICdqYV9qcC5wY2snOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuU0pJUycsCi0gICAgJ2phX2pwLnNqaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5TSklTJywKLSAgICAnamFfanAudWppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKICAgICAnamFwYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKICAgICAnamFwYW5lc2UnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKICAgICAnamFwYW5lc2UtZXVjJzogICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKICAgICAnamFwYW5lc2UuZXVjJzogICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKLSAgICAnamFwYW5lc2Uuc2ppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLlNKSVMnLAogICAgICdqcF9qcCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAogICAgICdrYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2FfR0UuR0VPUkdJQU4tQUNBREVNWScsCiAgICAgJ2thX2dlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrYV9HRS5HRU9SR0lBTi1BQ0FERU1ZJywKQEAgLTEzMDYsMjcgKzEwNTIsMTggQEAKICAgICAna2FfZ2UuZ2VvcmdpYW5ycyc6ICAgICAgICAgICAgICAgICAgICAgJ2thX0dFLkdFT1JHSUFOLUFDQURFTVknLAogICAgICdrbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2xfR0wuSVNPODg1OS0xJywKICAgICAna2xfZ2wnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tsX0dMLklTTzg4NTktMScsCi0gICAgJ2tsX2dsLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdrbF9HTC5JU084ODU5LTEnLAotICAgICdrbF9nbC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAna2xfR0wuSVNPODg1OS0xNScsCi0gICAgJ2tsX2dsQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbF9HTC5JU084ODU5LTE1JywKICAgICAna21fa2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ttX0tILlVURi04JywKICAgICAna24nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tuX0lOLlVURi04JywKICAgICAna25faW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tuX0lOLlVURi04JywKICAgICAna28nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvX0tSLmV1Y0tSJywKICAgICAna29fa3InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvX0tSLmV1Y0tSJywKICAgICAna29fa3IuZXVjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvX0tSLmV1Y0tSJywKLSAgICAna29fa3IuZXVja3InOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvX0tSLmV1Y0tSJywKICAgICAna29yZWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvX0tSLmV1Y0tSJywKICAgICAna29yZWFuLmV1Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvX0tSLmV1Y0tSJywKICAgICAna3MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tzX0lOLlVURi04JywKICAgICAna3NfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tzX0lOLlVURi04JywKLSAgICAna3NfaW5AZGV2YW5hZ2FyaSc6ICAgICAgICAgICAgICAgICAgICAgJ2tzX0lOLlVURi04QGRldmFuYWdhcmknLAogICAgICdrdyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dfR0IuSVNPODg1OS0xJywKICAgICAna3dfZ2InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t3X0dCLklTTzg4NTktMScsCi0gICAgJ2t3X2diLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdrd19HQi5JU084ODU5LTEnLAotICAgICdrd19nYi5pc284ODU5MTQnOiAgICAgICAgICAgICAgICAgICAgICAna3dfR0IuSVNPODg1OS0xNCcsCi0gICAgJ2t3X2diLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdrd19HQi5JU084ODU5LTE1JywKLSAgICAna3dfZ2JAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t3X0dCLklTTzg4NTktMTUnLAogICAgICdreSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3lfS0cuVVRGLTgnLAogICAgICdreV9rZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3lfS0cuVVRGLTgnLAogICAgICdsaXRodWFuaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbHRfTFQuSVNPODg1OS0xMycsCkBAIC0xMzM3LDE1NyArMTA3NCw3OCBAQAogICAgICdsb19sYS5tdWxlbGFvMSc6ICAgICAgICAgICAgICAgICAgICAgICAnbG9fTEEuTVVMRUxBTy0xJywKICAgICAnbHQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2x0X0xULklTTzg4NTktMTMnLAogICAgICdsdF9sdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbHRfTFQuSVNPODg1OS0xMycsCi0gICAgJ2x0X2x0Lmlzbzg4NTkxMyc6ICAgICAgICAgICAgICAgICAgICAgICdsdF9MVC5JU084ODU5LTEzJywKLSAgICAnbHRfbHQuaXNvODg1OTQnOiAgICAgICAgICAgICAgICAgICAgICAgJ2x0X0xULklTTzg4NTktNCcsCiAgICAgJ2x2JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsdl9MVi5JU084ODU5LTEzJywKICAgICAnbHZfbHYnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2x2X0xWLklTTzg4NTktMTMnLAotICAgICdsdl9sdi5pc284ODU5MTMnOiAgICAgICAgICAgICAgICAgICAgICAnbHZfTFYuSVNPODg1OS0xMycsCi0gICAgJ2x2X2x2Lmlzbzg4NTk0JzogICAgICAgICAgICAgICAgICAgICAgICdsdl9MVi5JU084ODU5LTQnLAogICAgICdtYWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFpX0lOLlVURi04JywKICAgICAnbWFpX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21haV9JTi5VVEYtOCcsCiAgICAgJ21pJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaV9OWi5JU084ODU5LTEnLAogICAgICdtaV9ueic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWlfTlouSVNPODg1OS0xJywKLSAgICAnbWlfbnouaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ21pX05aLklTTzg4NTktMScsCiAgICAgJ21rJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdta19NSy5JU084ODU5LTUnLAogICAgICdta19tayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWtfTUsuSVNPODg1OS01JywKLSAgICAnbWtfbWsuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ21rX01LLkNQMTI1MScsCi0gICAgJ21rX21rLmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICdta19NSy5JU084ODU5LTUnLAotICAgICdta19tay5taWNyb3NvZnRjcDEyNTEnOiAgICAgICAgICAgICAgICAnbWtfTUsuQ1AxMjUxJywKICAgICAnbWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21sX0lOLlVURi04JywKICAgICAnbWxfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21sX0lOLlVURi04JywKICAgICAnbXInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21yX0lOLlVURi04JywKICAgICAnbXJfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21yX0lOLlVURi04JywKICAgICAnbXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zX01ZLklTTzg4NTktMScsCiAgICAgJ21zX215JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc19NWS5JU084ODU5LTEnLAotICAgICdtc19teS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbXNfTVkuSVNPODg1OS0xJywKICAgICAnbXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ210X01ULklTTzg4NTktMycsCiAgICAgJ210X210JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdF9NVC5JU084ODU5LTMnLAotICAgICdtdF9tdC5pc284ODU5Myc6ICAgICAgICAgICAgICAgICAgICAgICAnbXRfTVQuSVNPODg1OS0zJywKICAgICAnbmInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMScsCiAgICAgJ25iX25vJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYl9OTy5JU084ODU5LTEnLAotICAgICduYl9uby44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xJywKLSAgICAnbmJfbm8uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMScsCi0gICAgJ25iX25vLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICduYl9OTy5JU084ODU5LTE1JywKLSAgICAnbmJfbm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMTUnLAogICAgICduZV9ucCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmVfTlAuVVRGLTgnLAogICAgICdubCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xJywKLSAgICAnbmwuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMTUnLAogICAgICdubF9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfQkUuSVNPODg1OS0xJywKLSAgICAnbmxfYmUuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMScsCi0gICAgJ25sX2JlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTEnLAotICAgICdubF9iZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnbmxfQkUuSVNPODg1OS0xNScsCi0gICAgJ25sX2JlLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTE1JywKLSAgICAnbmxfYmUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLlVURi04JywKLSAgICAnbmxfYmVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMTUnLAogICAgICdubF9ubCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xJywKLSAgICAnbmxfbmwuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMScsCi0gICAgJ25sX25sLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTEnLAotICAgICdubF9ubC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xNScsCi0gICAgJ25sX25sLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTE1JywKLSAgICAnbmxfbmwudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ25sX05MLlVURi04JywKLSAgICAnbmxfbmxAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMTUnLAogICAgICdubic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm5fTk8uSVNPODg1OS0xJywKICAgICAnbm5fbm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25uX05PLklTTzg4NTktMScsCi0gICAgJ25uX25vLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdubl9OTy5JU084ODU5LTEnLAotICAgICdubl9uby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbm5fTk8uSVNPODg1OS0xJywKLSAgICAnbm5fbm8uaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ25uX05PLklTTzg4NTktMTUnLAotICAgICdubl9ub0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbm5fTk8uSVNPODg1OS0xNScsCiAgICAgJ25vJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAogICAgICdub0BueW5vcnNrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbnlfTk8uSVNPODg1OS0xJywKICAgICAnbm9fbm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCi0gICAgJ25vX25vLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAotICAgICdub19uby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKLSAgICAnbm9fbm8uaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMTUnLAogICAgICdub19uby5pc284ODU5MUBib2ttYWwnOiAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKICAgICAnbm9fbm8uaXNvODg1OTFAbnlub3Jzayc6ICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCi0gICAgJ25vX25vQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTE1JywKICAgICAnbm9yd2VnaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCi0gICAgJ25vcndlZ2lhbi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAogICAgICducic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnJfWkEuSVNPODg1OS0xJywKICAgICAnbnJfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25yX1pBLklTTzg4NTktMScsCi0gICAgJ25yX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICducl9aQS5JU084ODU5LTEnLAogICAgICduc28nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnNvX1pBLklTTzg4NTktMTUnLAogICAgICduc29femEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnNvX1pBLklTTzg4NTktMTUnLAotICAgICduc29femEuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAnbnNvX1pBLklTTzg4NTktMTUnLAogICAgICdueSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnlfTk8uSVNPODg1OS0xJywKICAgICAnbnlfbm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ255X05PLklTTzg4NTktMScsCi0gICAgJ255X25vLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdueV9OTy5JU084ODU5LTEnLAotICAgICdueV9uby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbnlfTk8uSVNPODg1OS0xJywKLSAgICAnbnlfbm8uaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ255X05PLklTTzg4NTktMTUnLAotICAgICdueV9ub0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbnlfTk8uSVNPODg1OS0xNScsCiAgICAgJ255bm9yc2snOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubl9OTy5JU084ODU5LTEnLAogICAgICdvYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2NfRlIuSVNPODg1OS0xJywKICAgICAnb2NfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29jX0ZSLklTTzg4NTktMScsCi0gICAgJ29jX2ZyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdvY19GUi5JU084ODU5LTEnLAotICAgICdvY19mci5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnb2NfRlIuSVNPODg1OS0xNScsCi0gICAgJ29jX2ZyQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdvY19GUi5JU084ODU5LTE1JywKICAgICAnb3InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yX0lOLlVURi04JywKICAgICAnb3JfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yX0lOLlVURi04JywKICAgICAncGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhX0lOLlVURi04JywKICAgICAncGFfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhX0lOLlVURi04JywKICAgICAncGQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BkX1VTLklTTzg4NTktMScsCiAgICAgJ3BkX2RlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZF9ERS5JU084ODU5LTEnLAotICAgICdwZF9kZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncGRfREUuSVNPODg1OS0xJywKLSAgICAncGRfZGUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3BkX0RFLklTTzg4NTktMTUnLAotICAgICdwZF9kZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAncGRfREUuSVNPODg1OS0xNScsCiAgICAgJ3BkX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZF9VUy5JU084ODU5LTEnLAotICAgICdwZF91cy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncGRfVVMuSVNPODg1OS0xJywKLSAgICAncGRfdXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3BkX1VTLklTTzg4NTktMTUnLAotICAgICdwZF91c0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAncGRfVVMuSVNPODg1OS0xNScsCiAgICAgJ3BoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaF9QSC5JU084ODU5LTEnLAogICAgICdwaF9waCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGhfUEguSVNPODg1OS0xJywKLSAgICAncGhfcGguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3BoX1BILklTTzg4NTktMScsCiAgICAgJ3BsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbF9QTC5JU084ODU5LTInLAogICAgICdwbF9wbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxfUEwuSVNPODg1OS0yJywKLSAgICAncGxfcGwuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3BsX1BMLklTTzg4NTktMicsCiAgICAgJ3BvbGlzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbF9QTC5JU084ODU5LTInLAogICAgICdwb3J0dWd1ZXNlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xJywKLSAgICAncG9ydHVndWVzZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMScsCiAgICAgJ3BvcnR1Z3Vlc2VfYnJhemlsJzogICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTEnLAotICAgICdwb3J0dWd1ZXNlX2JyYXppbC44ODU5JzogICAgICAgICAgICAgICAncHRfQlIuSVNPODg1OS0xJywKICAgICAncG9zaXgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0MnLAogICAgICdwb3NpeC11dGYyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ3BwJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcF9BTi5JU084ODU5LTEnLAogICAgICdwcF9hbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHBfQU4uSVNPODg1OS0xJywKLSAgICAncHBfYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3BwX0FOLklTTzg4NTktMScsCiAgICAgJ3B0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTEnLAotICAgICdwdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xNScsCiAgICAgJ3B0X2JyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTEnLAotICAgICdwdF9ici44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfQlIuSVNPODg1OS0xJywKLSAgICAncHRfYnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMScsCi0gICAgJ3B0X2JyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTE1JywKLSAgICAncHRfYnJAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMTUnLAogICAgICdwdF9wdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xJywKLSAgICAncHRfcHQuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMScsCi0gICAgJ3B0X3B0Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTEnLAotICAgICdwdF9wdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xNScsCi0gICAgJ3B0X3B0Lmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTE1JywKLSAgICAncHRfcHQudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULlVURi04JywKLSAgICAncHRfcHRAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMTUnLAogICAgICdybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9fUk8uSVNPODg1OS0yJywKICAgICAncm9fcm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvX1JPLklTTzg4NTktMicsCi0gICAgJ3JvX3JvLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdyb19STy5JU084ODU5LTInLAogICAgICdyb21hbmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9fUk8uSVNPODg1OS0yJywKICAgICAncnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLlVURi04JywKLSAgICAncnUua29pOHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLktPSTgtUicsCiAgICAgJ3J1X3J1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5VVEYtOCcsCi0gICAgJ3J1X3J1LmNwMTI1MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5DUDEyNTEnLAotICAgICdydV9ydS5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuSVNPODg1OS01JywKLSAgICAncnVfcnUua29pOHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLktPSTgtUicsCi0gICAgJ3J1X3J1Lm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdydV9SVS5DUDEyNTEnLAogICAgICdydV91YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfVUEuS09JOC1VJywKLSAgICAncnVfdWEuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1VBLkNQMTI1MScsCi0gICAgJ3J1X3VhLmtvaTh1JzogICAgICAgICAgICAgICAgICAgICAgICAgICdydV9VQS5LT0k4LVUnLAotICAgICdydV91YS5taWNyb3NvZnRjcDEyNTEnOiAgICAgICAgICAgICAgICAncnVfVUEuQ1AxMjUxJywKICAgICAncnVtYW5pYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvX1JPLklTTzg4NTktMicsCiAgICAgJ3J1c3NpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5JU084ODU5LTUnLAogICAgICdydyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncndfUlcuSVNPODg1OS0xJywKICAgICAncndfcncnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J3X1JXLklTTzg4NTktMScsCi0gICAgJ3J3X3J3Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdyd19SVy5JU084ODU5LTEnLAogICAgICdzZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2RfSU4uVVRGLTgnLAotICAgICdzZEBkZXZhbmFnYXJpJzogICAgICAgICAgICAgICAgICAgICAgICAnc2RfSU4uVVRGLThAZGV2YW5hZ2FyaScsCiAgICAgJ3NkX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZF9JTi5VVEYtOCcsCi0gICAgJ3NkX2luQGRldmFuYWdhcmknOiAgICAgICAgICAgICAgICAgICAgICdzZF9JTi5VVEYtOEBkZXZhbmFnYXJpJywKICAgICAnc2Vfbm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlX05PLlVURi04JywKICAgICAnc2VyYm9jcm9hdGlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKICAgICAnc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKQEAgLTE1MDEsMzcgKzExNTksMjYgQEAKICAgICAnc2luaGFsYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpX0xLLlVURi04JywKICAgICAnc2snOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NrX1NLLklTTzg4NTktMicsCiAgICAgJ3NrX3NrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdza19TSy5JU084ODU5LTInLAotICAgICdza19zay5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnc2tfU0suSVNPODg1OS0yJywKICAgICAnc2wnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NsX1NJLklTTzg4NTktMicsCiAgICAgJ3NsX2NzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzbF9DUy5JU084ODU5LTInLAogICAgICdzbF9zaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2xfU0kuSVNPODg1OS0yJywKLSAgICAnc2xfc2kuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3NsX1NJLklTTzg4NTktMicsCiAgICAgJ3Nsb3Zhayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdza19TSy5JU084ODU5LTInLAogICAgICdzbG92ZW5lJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2xfU0kuSVNPODg1OS0yJywKICAgICAnc2xvdmVuaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NsX1NJLklTTzg4NTktMicsCiAgICAgJ3NwJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAogICAgICdzcF95dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKICAgICAnc3BhbmlzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMScsCi0gICAgJ3NwYW5pc2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAogICAgICdzcGFuaXNoX3NwYWluJzogICAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xJywKLSAgICAnc3BhbmlzaF9zcGFpbi44ODU5JzogICAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMScsCiAgICAgJ3NxJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcV9BTC5JU084ODU5LTInLAogICAgICdzcV9hbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3FfQUwuSVNPODg1OS0yJywKLSAgICAnc3FfYWwuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3NxX0FMLklTTzg4NTktMicsCiAgICAgJ3NyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOCcsCiAgICAgJ3NyQGN5cmlsbGljJzogICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOCcsCi0gICAgJ3NyQGxhdGluJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCiAgICAgJ3NyQGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5VVEYtOEBsYXRpbicsCiAgICAgJ3NyX2NzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5VVEYtOCcsCi0gICAgJ3NyX2NzLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAogICAgICdzcl9jcy5pc284ODU5MkBsYXRuJzogICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKLSAgICAnc3JfY3MuaXNvODg1OTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCi0gICAgJ3NyX2NzLnV0ZjhAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5VVEYtOEBsYXRpbicsCiAgICAgJ3NyX2NzQGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5VVEYtOEBsYXRpbicsCiAgICAgJ3NyX21lJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9NRS5VVEYtOCcsCiAgICAgJ3NyX3JzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOCcsCi0gICAgJ3NyX3JzLnV0ZjhAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCi0gICAgJ3NyX3JzQGxhdGluJzogICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCiAgICAgJ3NyX3JzQGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCiAgICAgJ3NyX3NwJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAogICAgICdzcl95dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLApAQCAtMTU0MCwyOSArMTE4NywxNSBAQAogICAgICdzcl95dS5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKICAgICAnc3JfeXUuaXNvODg1OTVAY3lyaWxsaWMnOiAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCiAgICAgJ3NyX3l1Lm1pY3Jvc29mdGNwMTI1MUBjeXJpbGxpYyc6ICAgICAgICdzcl9DUy5DUDEyNTEnLAotICAgICdzcl95dS51dGY4QGN5cmlsbGljJzogICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAogICAgICdzcl95dUBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAogICAgICdzcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NfWkEuSVNPODg1OS0xJywKICAgICAnc3NfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzX1pBLklTTzg4NTktMScsCi0gICAgJ3NzX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdzc19aQS5JU084ODU5LTEnLAogICAgICdzdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RfWkEuSVNPODg1OS0xJywKICAgICAnc3RfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0X1pBLklTTzg4NTktMScsCi0gICAgJ3N0X3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdzdF9aQS5JU084ODU5LTEnLAogICAgICdzdic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xJywKLSAgICAnc3YuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMTUnLAogICAgICdzdl9maSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfRkkuSVNPODg1OS0xJywKLSAgICAnc3ZfZmkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3N2X0ZJLklTTzg4NTktMScsCi0gICAgJ3N2X2ZpLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdzdl9GSS5JU084ODU5LTE1JywKLSAgICAnc3ZfZmkuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ3N2X0ZJLklTTzg4NTktMTUnLAotICAgICdzdl9maS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnc3ZfRkkuVVRGLTgnLAotICAgICdzdl9maUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfRkkuSVNPODg1OS0xNScsCiAgICAgJ3N2X3NlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTEnLAotICAgICdzdl9zZS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xJywKLSAgICAnc3Zfc2UuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMScsCi0gICAgJ3N2X3NlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTE1JywKLSAgICAnc3Zfc2VAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMTUnLAogICAgICdzd2VkaXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xJywKLSAgICAnc3dlZGlzaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMScsCiAgICAgJ3RhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YV9JTi5UU0NJSS0wJywKICAgICAndGFfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhX0lOLlRTQ0lJLTAnLAogICAgICd0YV9pbi50c2NpaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAndGFfSU4uVFNDSUktMCcsCkBAIC0xNTcwLDQ5ICsxMjAzLDMzIEBACiAgICAgJ3RlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZV9JTi5VVEYtOCcsCiAgICAgJ3RnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0Z19USi5LT0k4LUMnLAogICAgICd0Z190aic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGdfVEouS09JOC1DJywKLSAgICAndGdfdGoua29pOGMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RnX1RKLktPSTgtQycsCiAgICAgJ3RoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aF9USC5JU084ODU5LTExJywKICAgICAndGhfdGgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoX1RILklTTzg4NTktMTEnLAotICAgICd0aF90aC5pc284ODU5MTEnOiAgICAgICAgICAgICAgICAgICAgICAndGhfVEguSVNPODg1OS0xMScsCiAgICAgJ3RoX3RoLnRhY3Rpcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICd0aF9USC5USVM2MjAnLAogICAgICd0aF90aC50aXM2MjAnOiAgICAgICAgICAgICAgICAgICAgICAgICAndGhfVEguVElTNjIwJywKICAgICAndGhhaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoX1RILklTTzg4NTktMTEnLAogICAgICd0bCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGxfUEguSVNPODg1OS0xJywKICAgICAndGxfcGgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RsX1BILklTTzg4NTktMScsCi0gICAgJ3RsX3BoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICd0bF9QSC5JU084ODU5LTEnLAogICAgICd0bic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG5fWkEuSVNPODg1OS0xNScsCiAgICAgJ3RuX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0bl9aQS5JU084ODU5LTE1JywKLSAgICAndG5femEuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3RuX1pBLklTTzg4NTktMTUnLAogICAgICd0cic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJfVFIuSVNPODg1OS05JywKICAgICAndHJfdHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyX1RSLklTTzg4NTktOScsCi0gICAgJ3RyX3RyLmlzbzg4NTk5JzogICAgICAgICAgICAgICAgICAgICAgICd0cl9UUi5JU084ODU5LTknLAogICAgICd0cyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHNfWkEuSVNPODg1OS0xJywKICAgICAndHNfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RzX1pBLklTTzg4NTktMScsCi0gICAgJ3RzX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICd0c19aQS5JU084ODU5LTEnLAogICAgICd0dCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHRfUlUuVEFUQVItQ1lSJywKICAgICAndHRfcnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R0X1JVLlRBVEFSLUNZUicsCi0gICAgJ3R0X3J1LmtvaThjJzogICAgICAgICAgICAgICAgICAgICAgICAgICd0dF9SVS5LT0k4LUMnLAogICAgICd0dF9ydS50YXRhcmN5cic6ICAgICAgICAgICAgICAgICAgICAgICAndHRfUlUuVEFUQVItQ1lSJywKICAgICAndHVya2lzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyX1RSLklTTzg4NTktOScsCi0gICAgJ3R1cmtpc2guaXNvODg1OTknOiAgICAgICAgICAgICAgICAgICAgICd0cl9UUi5JU084ODU5LTknLAogICAgICd1ayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndWtfVUEuS09JOC1VJywKICAgICAndWtfdWEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VrX1VBLktPSTgtVScsCi0gICAgJ3VrX3VhLmNwMTI1MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICd1a19VQS5DUDEyNTEnLAotICAgICd1a191YS5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAndWtfVUEuSVNPODg1OS01JywKLSAgICAndWtfdWEua29pOHUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VrX1VBLktPSTgtVScsCi0gICAgJ3VrX3VhLm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICd1a19VQS5DUDEyNTEnLAogICAgICd1bml2JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMudXRmJywKICAgICAndW5pdmVyc2FsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLnV0ZicsCiAgICAgJ3VuaXZlcnNhbC51dGY4QHVjczQnOiAgICAgICAgICAgICAgICAgICdlbl9VUy5VVEYtOCcsCiAgICAgJ3VyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cl9QSy5DUDEyNTYnLAogICAgICd1cl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJfSU4uVVRGLTgnLAogICAgICd1cl9wayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJfUEsuQ1AxMjU2JywKLSAgICAndXJfcGsuY3AxMjU2JzogICAgICAgICAgICAgICAgICAgICAgICAgJ3VyX1BLLkNQMTI1NicsCi0gICAgJ3VyX3BrLm1pY3Jvc29mdGNwMTI1Nic6ICAgICAgICAgICAgICAgICd1cl9QSy5DUDEyNTYnLAogICAgICd1eic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXpfVVouVVRGLTgnLAogICAgICd1el91eic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXpfVVouVVRGLTgnLAotICAgICd1el91ei5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAndXpfVVouSVNPODg1OS0xJywKLSAgICAndXpfdXoudXRmOEBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgJ3V6X1VaLlVURi04JywKICAgICAndXpfdXpAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICAgICAgJ3V6X1VaLlVURi04JywKICAgICAndmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlX1pBLlVURi04JywKICAgICAndmVfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlX1pBLlVURi04JywKQEAgLTE2MjQsMzUgKzEyNDEsMjEgQEAKICAgICAndmlfdm4udmlzY2lpMTExJzogICAgICAgICAgICAgICAgICAgICAgJ3ZpX1ZOLlZJU0NJSScsCiAgICAgJ3dhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YV9CRS5JU084ODU5LTEnLAogICAgICd3YV9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FfQkUuSVNPODg1OS0xJywKLSAgICAnd2FfYmUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3dhX0JFLklTTzg4NTktMScsCi0gICAgJ3dhX2JlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICd3YV9CRS5JU084ODU5LTE1JywKLSAgICAnd2FfYmUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ3dhX0JFLklTTzg4NTktMTUnLAotICAgICd3YV9iZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FfQkUuSVNPODg1OS0xNScsCiAgICAgJ3hoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4aF9aQS5JU084ODU5LTEnLAogICAgICd4aF96YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneGhfWkEuSVNPODg1OS0xJywKLSAgICAneGhfemEuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3hoX1pBLklTTzg4NTktMScsCiAgICAgJ3lpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5aV9VUy5DUDEyNTUnLAogICAgICd5aV91cyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneWlfVVMuQ1AxMjU1JywKLSAgICAneWlfdXMuY3AxMjU1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ3lpX1VTLkNQMTI1NScsCi0gICAgJ3lpX3VzLm1pY3Jvc29mdGNwMTI1NSc6ICAgICAgICAgICAgICAgICd5aV9VUy5DUDEyNTUnLAogICAgICd6aCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZXVjQ04nLAogICAgICd6aF9jbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZ2IyMzEyJywKICAgICAnemhfY24uYmlnNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1RXLmJpZzUnLAogICAgICd6aF9jbi5ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZXVjQ04nLAotICAgICd6aF9jbi5nYjE4MDMwJzogICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZ2IxODAzMCcsCi0gICAgJ3poX2NuLmdiMjMxMic6ICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5nYjIzMTInLAotICAgICd6aF9jbi5nYmsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZ2JrJywKICAgICAnemhfaGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzVoa3NjcycsCi0gICAgJ3poX2hrLmJpZzUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9ISy5iaWc1JywKICAgICAnemhfaGsuYmlnNWhrJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzVoa3NjcycsCi0gICAgJ3poX2hrLmJpZzVoa3Njcyc6ICAgICAgICAgICAgICAgICAgICAgICd6aF9ISy5iaWc1aGtzY3MnLAogICAgICd6aF90dyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfVFcuYmlnNScsCi0gICAgJ3poX3R3LmJpZzUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9UVy5iaWc1JywKICAgICAnemhfdHcuZXVjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1RXLmV1Y1RXJywKICAgICAnemhfdHcuZXVjdHcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1RXLmV1Y1RXJywKICAgICAnenUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3p1X1pBLklTTzg4NTktMScsCiAgICAgJ3p1X3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6dV9aQS5JU084ODU5LTEnLAotICAgICd6dV96YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnenVfWkEuSVNPODg1OS0xJywKIH0KIAogIwpkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvX19pbml0X18ucHkgYi9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQppbmRleCA5ZjQzNmYzLi5iZDliOTk0IDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQorKysgYi9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAiIiJSZXR1cm4gdGhlIGZyYW1lIG9iamVjdCBmb3IgdGhlIGNhbGxlcidzIHN0YWNrIGZyYW1lLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgcmV0dXJuIHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawogCiAjIF9zcmNmaWxlIGlzIG9ubHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHN5cy5fZ2V0ZnJhbWUoKS4KQEAgLTEyMywyMCArMTIzLDIyIEBACiBERUJVRyA9IDEwCiBOT1RTRVQgPSAwCiAKLV9sZXZlbE5hbWVzID0gewotICAgIENSSVRJQ0FMIDogJ0NSSVRJQ0FMJywKLSAgICBFUlJPUiA6ICdFUlJPUicsCi0gICAgV0FSTklORyA6ICdXQVJOSU5HJywKLSAgICBJTkZPIDogJ0lORk8nLAotICAgIERFQlVHIDogJ0RFQlVHJywKLSAgICBOT1RTRVQgOiAnTk9UU0VUJywKLSAgICAnQ1JJVElDQUwnIDogQ1JJVElDQUwsCi0gICAgJ0VSUk9SJyA6IEVSUk9SLAotICAgICdXQVJOJyA6IFdBUk5JTkcsCi0gICAgJ1dBUk5JTkcnIDogV0FSTklORywKLSAgICAnSU5GTycgOiBJTkZPLAotICAgICdERUJVRycgOiBERUJVRywKLSAgICAnTk9UU0VUJyA6IE5PVFNFVCwKK19sZXZlbFRvTmFtZSA9IHsKKyAgICBDUklUSUNBTDogJ0NSSVRJQ0FMJywKKyAgICBFUlJPUjogJ0VSUk9SJywKKyAgICBXQVJOSU5HOiAnV0FSTklORycsCisgICAgSU5GTzogJ0lORk8nLAorICAgIERFQlVHOiAnREVCVUcnLAorICAgIE5PVFNFVDogJ05PVFNFVCcsCit9CitfbmFtZVRvTGV2ZWwgPSB7CisgICAgJ0NSSVRJQ0FMJzogQ1JJVElDQUwsCisgICAgJ0VSUk9SJzogRVJST1IsCisgICAgJ1dBUk4nOiBXQVJOSU5HLAorICAgICdXQVJOSU5HJzogV0FSTklORywKKyAgICAnSU5GTyc6IElORk8sCisgICAgJ0RFQlVHJzogREVCVUcsCisgICAgJ05PVFNFVCc6IE5PVFNFVCwKIH0KIAogZGVmIGdldExldmVsTmFtZShsZXZlbCk6CkBAIC0xNTMsNyArMTU1LDcgQEAKIAogICAgIE90aGVyd2lzZSwgdGhlIHN0cmluZyAiTGV2ZWwgJXMiICUgbGV2ZWwgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgcmV0dXJuIF9sZXZlbE5hbWVzLmdldChsZXZlbCwgKCJMZXZlbCAlcyIgJSBsZXZlbCkpCisgICAgcmV0dXJuIF9sZXZlbFRvTmFtZS5nZXQobGV2ZWwsICgiTGV2ZWwgJXMiICUgbGV2ZWwpKQogCiBkZWYgYWRkTGV2ZWxOYW1lKGxldmVsLCBsZXZlbE5hbWUpOgogICAgICIiIgpAQCAtMTYzLDggKzE2NSw4IEBACiAgICAgIiIiCiAgICAgX2FjcXVpcmVMb2NrKCkKICAgICB0cnk6ICAgICN1bmxpa2VseSB0byBjYXVzZSBhbiBleGNlcHRpb24sIGJ1dCB5b3UgbmV2ZXIga25vdy4uLgotICAgICAgICBfbGV2ZWxOYW1lc1tsZXZlbF0gPSBsZXZlbE5hbWUKLSAgICAgICAgX2xldmVsTmFtZXNbbGV2ZWxOYW1lXSA9IGxldmVsCisgICAgICAgIF9sZXZlbFRvTmFtZVtsZXZlbF0gPSBsZXZlbE5hbWUKKyAgICAgICAgX25hbWVUb0xldmVsW2xldmVsTmFtZV0gPSBsZXZlbAogICAgIGZpbmFsbHk6CiAgICAgICAgIF9yZWxlYXNlTG9jaygpCiAKQEAgLTE3Miw5ICsxNzQsOSBAQAogICAgIGlmIGlzaW5zdGFuY2UobGV2ZWwsIGludCk6CiAgICAgICAgIHJ2ID0gbGV2ZWwKICAgICBlbGlmIHN0cihsZXZlbCkgPT0gbGV2ZWw6Ci0gICAgICAgIGlmIGxldmVsIG5vdCBpbiBfbGV2ZWxOYW1lczoKKyAgICAgICAgaWYgbGV2ZWwgbm90IGluIF9uYW1lVG9MZXZlbDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gbGV2ZWw6ICVyIiAlIGxldmVsKQotICAgICAgICBydiA9IF9sZXZlbE5hbWVzW2xldmVsXQorICAgICAgICBydiA9IF9uYW1lVG9MZXZlbFtsZXZlbF0KICAgICBlbHNlOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkxldmVsIG5vdCBhbiBpbnRlZ2VyIG9yIGEgdmFsaWQgc3RyaW5nOiAlciIgJSBsZXZlbCkKICAgICByZXR1cm4gcnYKQEAgLTg4MiwxNiArODg0LDMwIEBACiAgICAgICAgIFRoZSByZWNvcmQgd2hpY2ggd2FzIGJlaW5nIHByb2Nlc3NlZCBpcyBwYXNzZWQgaW4gdG8gdGhpcyBtZXRob2QuCiAgICAgICAgICIiIgogICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnMgYW5kIHN5cy5zdGRlcnI6ICAjIHNlZSBpc3N1ZSAxMzgwNwotICAgICAgICAgICAgZWkgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgdCwgdiwgdGIgPSBzeXMuZXhjX2luZm8oKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGNlcHRpb24oZWlbMF0sIGVpWzFdLCBlaVsyXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIHN5cy5zdGRlcnIpCi0gICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnTG9nZ2VkIGZyb20gZmlsZSAlcywgbGluZSAlc1xuJyAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5maWxlbmFtZSwgcmVjb3JkLmxpbmVubykpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjogI3ByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCctLS0gTG9nZ2luZyBlcnJvciAtLS1cbicpCisgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbih0LCB2LCB0YiwgTm9uZSwgc3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdDYWxsIHN0YWNrOlxuJykKKyAgICAgICAgICAgICAgICAjIFdhbGsgdGhlIHN0YWNrIGZyYW1lIHVwIHVudGlsIHdlJ3JlIG91dCBvZiBsb2dnaW5nLAorICAgICAgICAgICAgICAgICMgc28gYXMgdG8gcHJpbnQgdGhlIGNhbGxpbmcgY29udGV4dC4KKyAgICAgICAgICAgICAgICBmcmFtZSA9IHRiLnRiX2ZyYW1lCisgICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lIGFuZCBvcy5wYXRoLmRpcm5hbWUoZnJhbWUuZl9jb2RlLmNvX2ZpbGVuYW1lKSA9PQorICAgICAgICAgICAgICAgICAgICAgICBfX3BhdGhfX1swXSk6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lID0gZnJhbWUuZl9iYWNrCisgICAgICAgICAgICAgICAgaWYgZnJhbWU6CisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhmcmFtZSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgY291bGRuJ3QgZmluZCB0aGUgcmlnaHQgc3RhY2sgZnJhbWUsIGZvciBzb21lIHJlYXNvbgorICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdMb2dnZWQgZnJvbSBmaWxlICVzLCBsaW5lICVzXG4nICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5maWxlbmFtZSwgcmVjb3JkLmxpbmVubykpCisgICAgICAgICAgICAgICAgIyBJc3N1ZSAxODY3MTogb3V0cHV0IGxvZ2dpbmcgbWVzc2FnZSBhbmQgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnTWVzc2FnZTogJXJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBcmd1bWVudHM6ICVzXG4nICUgKHJlY29yZC5tc2csIHJlY29yZC5hcmdzKSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgogICAgICAgICAgICAgICAgIHBhc3MgICAgIyBzZWUgaXNzdWUgNTk3MQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBkZWwgZWkKKyAgICAgICAgICAgICAgICBkZWwgdCwgdiwgdGIKIAogY2xhc3MgU3RyZWFtSGFuZGxlcihIYW5kbGVyKToKICAgICAiIiIKQEAgLTk0MSw5ICs5NTcsNyBAQAogICAgICAgICAgICAgc3RyZWFtLndyaXRlKG1zZykKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShzZWxmLnRlcm1pbmF0b3IpCiAgICAgICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogY2xhc3MgRmlsZUhhbmRsZXIoU3RyZWFtSGFuZGxlcik6CkBAIC0xODM2LDcgKzE4NTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBoLmFjcXVpcmUoKQogICAgICAgICAgICAgICAgICAgICBoLmZsdXNoKCkKICAgICAgICAgICAgICAgICAgICAgaC5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBlcnJvcnMgd2hpY2ggbWlnaHQgYmUgY2F1c2VkCiAgICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBoYW5kbGVycyBoYXZlIGJlZW4gY2xvc2VkIGJ1dAogICAgICAgICAgICAgICAgICAgICAjIHJlZmVyZW5jZXMgdG8gdGhlbSBhcmUgc3RpbGwgYXJvdW5kIGF0CkBAIC0xODQ0LDcgKzE4NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgaC5yZWxlYXNlKCkKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQ6ICMgaWdub3JlIGV2ZXJ5dGhpbmcsIGFzIHdlJ3JlIHNodXR0aW5nIGRvd24KICAgICAgICAgICAgIGlmIHJhaXNlRXhjZXB0aW9uczoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgI2Vsc2UsIHN3YWxsb3cKZGlmZiAtLWdpdCBhL0xpYi9sb2dnaW5nL2NvbmZpZy5weSBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQppbmRleCAxODgwNjE0Li5iODgyYTYyIDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9jb25maWcucHkKKysrIGIvTGliL2xvZ2dpbmcvY29uZmlnLnB5CkBAIC02MSwxMSArNjEsMTQgQEAKICAgICAiIiIKICAgICBpbXBvcnQgY29uZmlncGFyc2VyCiAKLSAgICBjcCA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoZGVmYXVsdHMpCi0gICAgaWYgaGFzYXR0cihmbmFtZSwgJ3JlYWRsaW5lJyk6Ci0gICAgICAgIGNwLnJlYWRfZmlsZShmbmFtZSkKKyAgICBpZiBpc2luc3RhbmNlKGZuYW1lLCBjb25maWdwYXJzZXIuUmF3Q29uZmlnUGFyc2VyKToKKyAgICAgICAgY3AgPSBmbmFtZQogICAgIGVsc2U6Ci0gICAgICAgIGNwLnJlYWQoZm5hbWUpCisgICAgICAgIGNwID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcihkZWZhdWx0cykKKyAgICAgICAgaWYgaGFzYXR0cihmbmFtZSwgJ3JlYWRsaW5lJyk6CisgICAgICAgICAgICBjcC5yZWFkX2ZpbGUoZm5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjcC5yZWFkKGZuYW1lKQogCiAgICAgZm9ybWF0dGVycyA9IF9jcmVhdGVfZm9ybWF0dGVycyhjcCkKIApAQCAtMTQxLDcgKzE0NCw3IEBACiAgICAgICAgIGggPSBrbGFzcygqYXJncykKICAgICAgICAgaWYgImxldmVsIiBpbiBzZWN0aW9uOgogICAgICAgICAgICAgbGV2ZWwgPSBzZWN0aW9uWyJsZXZlbCJdCi0gICAgICAgICAgICBoLnNldExldmVsKGxvZ2dpbmcuX2xldmVsTmFtZXNbbGV2ZWxdKQorICAgICAgICAgICAgaC5zZXRMZXZlbChsZXZlbCkKICAgICAgICAgaWYgbGVuKGZtdCk6CiAgICAgICAgICAgICBoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXJzW2ZtdF0pCiAgICAgICAgIGlmIGlzc3ViY2xhc3Moa2xhc3MsIGxvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlcik6CkBAIC0xODgsNyArMTkxLDcgQEAKICAgICBsb2cgPSByb290CiAgICAgaWYgImxldmVsIiBpbiBzZWN0aW9uOgogICAgICAgICBsZXZlbCA9IHNlY3Rpb25bImxldmVsIl0KLSAgICAgICAgbG9nLnNldExldmVsKGxvZ2dpbmcuX2xldmVsTmFtZXNbbGV2ZWxdKQorICAgICAgICBsb2cuc2V0TGV2ZWwobGV2ZWwpCiAgICAgZm9yIGggaW4gcm9vdC5oYW5kbGVyc1s6XToKICAgICAgICAgcm9vdC5yZW1vdmVIYW5kbGVyKGgpCiAgICAgaGxpc3QgPSBzZWN0aW9uWyJoYW5kbGVycyJdCkBAIC0yMzQsNyArMjM3LDcgQEAKICAgICAgICAgICAgIGV4aXN0aW5nLnJlbW92ZShxbikKICAgICAgICAgaWYgImxldmVsIiBpbiBzZWN0aW9uOgogICAgICAgICAgICAgbGV2ZWwgPSBzZWN0aW9uWyJsZXZlbCJdCi0gICAgICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5fbGV2ZWxOYW1lc1tsZXZlbF0pCisgICAgICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgIGZvciBoIGluIGxvZ2dlci5oYW5kbGVyc1s6XToKICAgICAgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCiAgICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBwcm9wYWdhdGUKQEAgLTcyOSw2ICs3MzIsNyBAQAogICAgICAgICAgICAgICAgICdhZGRyZXNzJyBpbiBjb25maWc6CiAgICAgICAgICAgICAgICAgY29uZmlnWydhZGRyZXNzJ10gPSBzZWxmLmFzX3R1cGxlKGNvbmZpZ1snYWRkcmVzcyddKQogICAgICAgICAgICAgZmFjdG9yeSA9IGtsYXNzCisgICAgICAgIHByb3BzID0gY29uZmlnLnBvcCgnLicsIE5vbmUpCiAgICAgICAgIGt3YXJncyA9IGRpY3QoWyhrLCBjb25maWdba10pIGZvciBrIGluIGNvbmZpZyBpZiB2YWxpZF9pZGVudChrKV0pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IGZhY3RvcnkoKiprd2FyZ3MpCkBAIC03NDcsNiArNzUxLDkgQEAKICAgICAgICAgICAgIHJlc3VsdC5zZXRMZXZlbChsb2dnaW5nLl9jaGVja0xldmVsKGxldmVsKSkKICAgICAgICAgaWYgZmlsdGVyczoKICAgICAgICAgICAgIHNlbGYuYWRkX2ZpbHRlcnMocmVzdWx0LCBmaWx0ZXJzKQorICAgICAgICBpZiBwcm9wczoKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBwcm9wcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIocmVzdWx0LCBuYW1lLCB2YWx1ZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIGFkZF9oYW5kbGVycyhzZWxmLCBsb2dnZXIsIGhhbmRsZXJzKToKQEAgLTc5NSw3ICs4MDIsNyBAQAogICAgIGRpY3RDb25maWdDbGFzcyhjb25maWcpLmNvbmZpZ3VyZSgpCiAKIAotZGVmIGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCk6CitkZWYgbGlzdGVuKHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JULCB2ZXJpZnk9Tm9uZSk6CiAgICAgIiIiCiAgICAgU3RhcnQgdXAgYSBzb2NrZXQgc2VydmVyIG9uIHRoZSBzcGVjaWZpZWQgcG9ydCwgYW5kIGxpc3RlbiBmb3IgbmV3CiAgICAgY29uZmlndXJhdGlvbnMuCkBAIC04MDQsNiArODExLDE1IEBACiAgICAgUmV0dXJucyBhIFRocmVhZCBvYmplY3Qgb24gd2hpY2ggeW91IGNhbiBjYWxsIHN0YXJ0KCkgdG8gc3RhcnQgdGhlIHNlcnZlciwKICAgICBhbmQgd2hpY2ggeW91IGNhbiBqb2luKCkgd2hlbiBhcHByb3ByaWF0ZS4gVG8gc3RvcCB0aGUgc2VydmVyLCBjYWxsCiAgICAgc3RvcExpc3RlbmluZygpLgorCisgICAgVXNlIHRoZSBgYHZlcmlmeWBgIGFyZ3VtZW50IHRvIHZlcmlmeSBhbnkgYnl0ZXMgcmVjZWl2ZWQgYWNyb3NzIHRoZSB3aXJlCisgICAgZnJvbSBhIGNsaWVudC4gSWYgc3BlY2lmaWVkLCBpdCBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaCByZWNlaXZlcyBhCisgICAgc2luZ2xlIGFyZ3VtZW50IC0gdGhlIGJ5dGVzIG9mIGNvbmZpZ3VyYXRpb24gZGF0YSByZWNlaXZlZCBhY3Jvc3MgdGhlCisgICAgbmV0d29yayAtIGFuZCBpdCBzaG91bGQgcmV0dXJuIGVpdGhlciBgYE5vbmVgYCwgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAgICBwYXNzZWQgaW4gYnl0ZXMgY291bGQgbm90IGJlIHZlcmlmaWVkIGFuZCBzaG91bGQgYmUgZGlzY2FyZGVkLCBvciBhCisgICAgYnl0ZSBzdHJpbmcgd2hpY2ggaXMgdGhlbiBwYXNzZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gbWFjaGluZXJ5IGFzCisgICAgbm9ybWFsLiBOb3RlIHRoYXQgeW91IGNhbiByZXR1cm4gdHJhbnNmb3JtZWQgYnl0ZXMsIGUuZy4gYnkgZGVjcnlwdGluZworICAgIHRoZSBieXRlcyBwYXNzZWQgaW4uCiAgICAgIiIiCiAgICAgaWYgbm90IHRocmVhZDogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigibGlzdGVuKCkgbmVlZHMgdGhyZWFkaW5nIHRvIHdvcmsiKQpAQCAtODMxLDI1ICs4NDcsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLmNvbm5lY3Rpb24ucmVjdihzbGVuKQogICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZW4oY2h1bmspIDwgc2xlbjoKICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsgKyBjb25uLnJlY3Yoc2xlbiAtIGxlbihjaHVuaykpCi0gICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZGVjb2RlKCJ1dGYtOCIpCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBqc29uCi0gICAgICAgICAgICAgICAgICAgICAgICBkID1qc29uLmxvYWRzKGNodW5rKQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZCwgZGljdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpY3RDb25maWcoZCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgI0FwcGx5IG5ldyBjb25maWd1cmF0aW9uLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gaW8uU3RyaW5nSU8oY2h1bmspCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyLnZlcmlmeSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5zZXJ2ZXIudmVyaWZ5KGNodW5rKQorICAgICAgICAgICAgICAgICAgICBpZiBjaHVuayBpcyBub3QgTm9uZTogICAjIHZlcmlmaWVkLCBjYW4gcHJvY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5kZWNvZGUoInV0Zi04IikKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlQ29uZmlnKGZpbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBqc29uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9anNvbi5sb2FkcyhjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkLCBkaWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3RDb25maWcoZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0FwcGx5IG5ldyBjb25maWd1cmF0aW9uLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKGNodW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNvbmZpZyhmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5yZWFkeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnJlYWR5LnNldCgpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUuYXJncywgdHVwbGUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC04NjUsMTMgKzg4MiwxNCBAQAogICAgICAgICBhbGxvd19yZXVzZV9hZGRyZXNzID0gMQogCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0PSdsb2NhbGhvc3QnLCBwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwKLSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI9Tm9uZSwgcmVhZHk9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyPU5vbmUsIHJlYWR5PU5vbmUsIHZlcmlmeT1Ob25lKToKICAgICAgICAgICAgIFRocmVhZGluZ1RDUFNlcnZlci5fX2luaXRfXyhzZWxmLCAoaG9zdCwgcG9ydCksIGhhbmRsZXIpCiAgICAgICAgICAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCiAgICAgICAgICAgICBzZWxmLmFib3J0ID0gMAogICAgICAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQogICAgICAgICAgICAgc2VsZi50aW1lb3V0ID0gMQogICAgICAgICAgICAgc2VsZi5yZWFkeSA9IHJlYWR5CisgICAgICAgICAgICBzZWxmLnZlcmlmeSA9IHZlcmlmeQogCiAgICAgICAgIGRlZiBzZXJ2ZV91bnRpbF9zdG9wcGVkKHNlbGYpOgogICAgICAgICAgICAgaW1wb3J0IHNlbGVjdApAQCAtODg5LDE2ICs5MDcsMTggQEAKIAogICAgIGNsYXNzIFNlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKIAotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmN2ciwgaGRsciwgcG9ydCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByY3ZyLCBoZGxyLCBwb3J0LCB2ZXJpZnkpOgogICAgICAgICAgICAgc3VwZXIoU2VydmVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgICAgICBzZWxmLnJjdnIgPSByY3ZyCiAgICAgICAgICAgICBzZWxmLmhkbHIgPSBoZGxyCiAgICAgICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgICAgICBzZWxmLnZlcmlmeSA9IHZlcmlmeQogICAgICAgICAgICAgc2VsZi5yZWFkeSA9IHRocmVhZGluZy5FdmVudCgpCiAKICAgICAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgICAgIHNlcnZlciA9IHNlbGYucmN2cihwb3J0PXNlbGYucG9ydCwgaGFuZGxlcj1zZWxmLmhkbHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHk9c2VsZi5yZWFkeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeT1zZWxmLnJlYWR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmeT1zZWxmLnZlcmlmeSkKICAgICAgICAgICAgIGlmIHNlbGYucG9ydCA9PSAwOgogICAgICAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlcnZlci5zZXJ2ZXJfYWRkcmVzc1sxXQogICAgICAgICAgICAgc2VsZi5yZWFkeS5zZXQoKQpAQCAtOTA4LDcgKzkyOCw3IEBACiAgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCiAgICAgICAgICAgICBzZXJ2ZXIuc2VydmVfdW50aWxfc3RvcHBlZCgpCiAKLSAgICByZXR1cm4gU2VydmVyKENvbmZpZ1NvY2tldFJlY2VpdmVyLCBDb25maWdTdHJlYW1IYW5kbGVyLCBwb3J0KQorICAgIHJldHVybiBTZXJ2ZXIoQ29uZmlnU29ja2V0UmVjZWl2ZXIsIENvbmZpZ1N0cmVhbUhhbmRsZXIsIHBvcnQsIHZlcmlmeSkKIAogZGVmIHN0b3BMaXN0ZW5pbmcoKToKICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5IGIvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkKaW5kZXggZGRlYzdkZC4uYjJlN2Q0NCAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkKKysrIGIvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkKQEAgLTcyLDkgKzcyLDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxkUm9sbG92ZXIocmVjb3JkKToKICAgICAgICAgICAgICAgICBzZWxmLmRvUm9sbG92ZXIoKQogICAgICAgICAgICAgbG9nZ2luZy5GaWxlSGFuZGxlci5lbWl0KHNlbGYsIHJlY29yZCkKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogICAgIGRlZiByb3RhdGlvbl9maWxlbmFtZShzZWxmLCBkZWZhdWx0X25hbWUpOgpAQCAtMjAxLDExICsxOTksMTIgQEAKICAgICBJZiBiYWNrdXBDb3VudCBpcyA+IDAsIHdoZW4gcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cENvdW50CiAgICAgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQuCiAgICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSwgYXRUaW1lPU5vbmUpOgogICAgICAgICBCYXNlUm90YXRpbmdIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCAnYScsIGVuY29kaW5nLCBkZWxheSkKICAgICAgICAgc2VsZi53aGVuID0gd2hlbi51cHBlcigpCiAgICAgICAgIHNlbGYuYmFja3VwQ291bnQgPSBiYWNrdXBDb3VudAogICAgICAgICBzZWxmLnV0YyA9IHV0YworICAgICAgICBzZWxmLmF0VGltZSA9IGF0VGltZQogICAgICAgICAjIENhbGN1bGF0ZSB0aGUgcmVhbCByb2xsb3ZlciBpbnRlcnZhbCwgd2hpY2ggaXMganVzdCB0aGUgbnVtYmVyIG9mCiAgICAgICAgICMgc2Vjb25kcyBiZXR3ZWVuIHJvbGxvdmVycy4gIEFsc28gc2V0IHRoZSBmaWxlbmFtZSBzdWZmaXggdXNlZCB3aGVuCiAgICAgICAgICMgYSByb2xsb3ZlciBvY2N1cnMuICBDdXJyZW50ICd3aGVuJyBldmVudHMgc3VwcG9ydGVkOgpAQCAtMjc1LDkgKzI3NCwyMiBAQAogICAgICAgICAgICAgY3VycmVudEhvdXIgPSB0WzNdCiAgICAgICAgICAgICBjdXJyZW50TWludXRlID0gdFs0XQogICAgICAgICAgICAgY3VycmVudFNlY29uZCA9IHRbNV0KLSAgICAgICAgICAgICMgciBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgbGVmdCBiZXR3ZWVuIG5vdyBhbmQgbWlkbmlnaHQKLSAgICAgICAgICAgIHIgPSBfTUlETklHSFQgLSAoKGN1cnJlbnRIb3VyICogNjAgKyBjdXJyZW50TWludXRlKSAqIDYwICsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlY29uZCkKKyAgICAgICAgICAgIGN1cnJlbnREYXkgPSB0WzZdCisgICAgICAgICAgICAjIHIgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGxlZnQgYmV0d2VlbiBub3cgYW5kIHRoZSBuZXh0IHJvdGF0aW9uCisgICAgICAgICAgICBpZiBzZWxmLmF0VGltZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJvdGF0ZV90cyA9IF9NSUROSUdIVAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByb3RhdGVfdHMgPSAoKHNlbGYuYXRUaW1lLmhvdXIgKiA2MCArIHNlbGYuYXRUaW1lLm1pbnV0ZSkqNjAgKworICAgICAgICAgICAgICAgICAgICBzZWxmLmF0VGltZS5zZWNvbmQpCisKKyAgICAgICAgICAgIHIgPSByb3RhdGVfdHMgLSAoKGN1cnJlbnRIb3VyICogNjAgKyBjdXJyZW50TWludXRlKSAqIDYwICsKKyAgICAgICAgICAgICAgICBjdXJyZW50U2Vjb25kKQorICAgICAgICAgICAgaWYgciA8IDA6CisgICAgICAgICAgICAgICAgIyBSb3RhdGUgdGltZSBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZSAoZm9yIGV4YW1wbGUgd2hlbgorICAgICAgICAgICAgICAgICMgc2VsZi5yb3RhdGVBdCBpcyAxMzo0NSBhbmQgaXQgbm93IDE0OjE1KSwgcm90YXRpb24gaXMKKyAgICAgICAgICAgICAgICAjIHRvbW9ycm93LgorICAgICAgICAgICAgICAgIHIgKz0gX01JRE5JR0hUCisgICAgICAgICAgICAgICAgY3VycmVudERheSA9IChjdXJyZW50RGF5ICsgMSkgJSA3CiAgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50VGltZSArIHIKICAgICAgICAgICAgICMgSWYgd2UgYXJlIHJvbGxpbmcgb3ZlciBvbiBhIGNlcnRhaW4gZGF5LCBhZGQgaW4gdGhlIG51bWJlciBvZiBkYXlzIHVudGlsCiAgICAgICAgICAgICAjIHRoZSBuZXh0IHJvbGxvdmVyLCBidXQgb2Zmc2V0IGJ5IDEgc2luY2Ugd2UganVzdCBjYWxjdWxhdGVkIHRoZSB0aW1lCkBAIC0yOTUsNyArMzA3LDcgQEAKICAgICAgICAgICAgICMgVGhpcyBpcyBiZWNhdXNlIHRoZSBhYm92ZSB0aW1lIGNhbGN1bGF0aW9uIHRha2VzIHVzIHRvIG1pZG5pZ2h0IG9uIHRoaXMKICAgICAgICAgICAgICMgZGF5LCBpLmUuIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBkYXkuCiAgICAgICAgICAgICBpZiBzZWxmLndoZW4uc3RhcnRzd2l0aCgnVycpOgotICAgICAgICAgICAgICAgIGRheSA9IHRbNl0gIyAwIGlzIE1vbmRheQorICAgICAgICAgICAgICAgIGRheSA9IGN1cnJlbnREYXkgIyAwIGlzIE1vbmRheQogICAgICAgICAgICAgICAgIGlmIGRheSAhPSBzZWxmLmRheU9mV2VlazoKICAgICAgICAgICAgICAgICAgICAgaWYgZGF5IDwgc2VsZi5kYXlPZldlZWs6CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXlzVG9XYWl0ID0gc2VsZi5kYXlPZldlZWsgLSBkYXkKQEAgLTQ0NCwxMSArNDU2LDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBzdGF0IHRoZSBmaWxlIGJ5IHBhdGgsIGNoZWNraW5nIGZvciBleGlzdGVuY2UKICAgICAgICAgICAgIHNyZXMgPSBvcy5zdGF0KHNlbGYuYmFzZUZpbGVuYW1lKQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICBpZiBlcnIuZXJybm8gPT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgIHNyZXMgPSBOb25lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgIHNyZXMgPSBOb25lCiAgICAgICAgICMgY29tcGFyZSBmaWxlIHN5c3RlbSBzdGF0IHdpdGggdGhhdCBvZiBvdXIgc3RyZWFtIGZpbGUgaGFuZGxlCiAgICAgICAgIGlmIG5vdCBzcmVzIG9yIHNyZXNbU1RfREVWXSAhPSBzZWxmLmRldiBvciBzcmVzW1NUX0lOT10gIT0gc2VsZi5pbm86CiAgICAgICAgICAgICBpZiBzZWxmLnN0cmVhbSBpcyBub3QgTm9uZToKQEAgLTQ4NSw2ICs0OTQsMTAgQEAKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCiAgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBpZiBwb3J0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSBob3N0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSAoaG9zdCwgcG9ydCkKICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQogICAgICAgICBzZWxmLmNsb3NlT25FcnJvciA9IEZhbHNlCiAgICAgICAgIHNlbGYucmV0cnlUaW1lID0gTm9uZQpAQCAtNTAwLDE1ICs1MTMsMTcgQEAKICAgICAgICAgQSBmYWN0b3J5IG1ldGhvZCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NlcyB0byBkZWZpbmUgdGhlIHByZWNpc2UKICAgICAgICAgdHlwZSBvZiBzb2NrZXQgdGhleSB3YW50LgogICAgICAgICAiIiIKLSAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgaWYgaGFzYXR0cihzLCAnc2V0dGltZW91dCcpOgotICAgICAgICAgICAgcy5zZXR0aW1lb3V0KHRpbWVvdXQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHMuY29ubmVjdCgoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQotICAgICAgICAgICAgcmV0dXJuIHMKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKLSAgICAgICAgICAgIHMuY2xvc2UoKQotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgaWYgc2VsZi5wb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzdWx0ID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKHNlbGYuYWRkcmVzcywgdGltZW91dD10aW1lb3V0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgcmVzdWx0LnNldHRpbWVvdXQodGltZW91dCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQuY29ubmVjdChzZWxmLmFkZHJlc3MpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByZXN1bHQuY2xvc2UoKSAgIyBJc3N1ZSAxOTE4MgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBjcmVhdGVTb2NrZXQoc2VsZik6CiAgICAgICAgICIiIgpAQCAtNTI4LDcgKzU0Myw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5tYWtlU29ja2V0KCkKICAgICAgICAgICAgICAgICBzZWxmLnJldHJ5VGltZSA9IE5vbmUgIyBuZXh0IHRpbWUsIG5vIGRlbGF5IGJlZm9yZSB0cnlpbmcKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjQ3JlYXRpb24gZmFpbGVkLCBzbyBzZXQgdGhlIHJldHJ5IHRpbWUgYW5kIHJldHVybi4KICAgICAgICAgICAgICAgICBpZiBzZWxmLnJldHJ5VGltZSBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHJ5UGVyaW9kID0gc2VsZi5yZXRyeVN0YXJ0CkBAIC01NTIsMTYgKzU2Nyw4IEBACiAgICAgICAgICNidXQgYXJlIHN0aWxsIHVuYWJsZSB0byBjb25uZWN0LgogICAgICAgICBpZiBzZWxmLnNvY2s6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLnNvY2ssICJzZW5kYWxsIik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCi0gICAgICAgICAgICAgICAgZWxzZTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgICAgICAgICAgc2VudHNvZmFyID0gMAotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVuKHMpCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIGxlZnQgPiAwOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VudCA9IHNlbGYuc29jay5zZW5kKHNbc2VudHNvZmFyOl0pCi0gICAgICAgICAgICAgICAgICAgICAgICBzZW50c29mYXIgPSBzZW50c29mYXIgKyBzZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCAtIHNlbnQKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6ICNwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwocykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgogICAgICAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gTm9uZSAgIyBzbyB3ZSBjYW4gY2FsbCBjcmVhdGVTb2NrZXQgbmV4dCB0aW1lCiAKQEAgLTYxMSw5ICs2MTgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzID0gc2VsZi5tYWtlUGlja2xlKHJlY29yZCkKICAgICAgICAgICAgIHNlbGYuc2VuZChzKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgpAQCAtNjUyLDcgKzY1NywxMSBAQAogICAgICAgICBUaGUgZmFjdG9yeSBtZXRob2Qgb2YgU29ja2V0SGFuZGxlciBpcyBoZXJlIG92ZXJyaWRkZW4gdG8gY3JlYXRlCiAgICAgICAgIGEgVURQIHNvY2tldCAoU09DS19ER1JBTSkuCiAgICAgICAgICIiIgotICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgICAgIGlmIHNlbGYucG9ydCBpcyBOb25lOgorICAgICAgICAgICAgZmFtaWx5ID0gc29ja2V0LkFGX1VOSVgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZhbWlseSA9IHNvY2tldC5BRl9JTkVUCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgc29ja2V0LlNPQ0tfREdSQU0pCiAgICAgICAgIHJldHVybiBzCiAKICAgICBkZWYgc2VuZChzZWxmLCBzKToKQEAgLTY2NSw3ICs2NzQsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLmNyZWF0ZVNvY2tldCgpCi0gICAgICAgIHNlbGYuc29jay5zZW5kdG8ocywgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0byhzLCBzZWxmLmFkZHJlc3MpCiAKIGNsYXNzIFN5c0xvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICAiIiIKQEAgLTc3Nyw3ICs3ODYsMTEgQEAKIAogICAgICAgICBJZiBhZGRyZXNzIGlzIHNwZWNpZmllZCBhcyBhIHN0cmluZywgYSBVTklYIHNvY2tldCBpcyB1c2VkLiBUbyBsb2cgdG8gYQogICAgICAgICBsb2NhbCBzeXNsb2dkLCAiU3lzTG9nSGFuZGxlcihhZGRyZXNzPSIvZGV2L2xvZyIpIiBjYW4gYmUgdXNlZC4KLSAgICAgICAgSWYgZmFjaWxpdHkgaXMgbm90IHNwZWNpZmllZCwgTE9HX1VTRVIgaXMgdXNlZC4KKyAgICAgICAgSWYgZmFjaWxpdHkgaXMgbm90IHNwZWNpZmllZCwgTE9HX1VTRVIgaXMgdXNlZC4gSWYgc29ja3R5cGUgaXMKKyAgICAgICAgc3BlY2lmaWVkIGFzIHNvY2tldC5TT0NLX0RHUkFNIG9yIHNvY2tldC5TT0NLX1NUUkVBTSwgdGhhdCBzcGVjaWZpYworICAgICAgICBzb2NrZXQgdHlwZSB3aWxsIGJlIHVzZWQuIEZvciBVbml4IHNvY2tldHMsIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEKKyAgICAgICAgc29ja3R5cGUgb2YgTm9uZSwgaW4gd2hpY2ggY2FzZSBzb2NrZXQuU09DS19ER1JBTSB3aWxsIGJlIHVzZWQsIGZhbGxpbmcKKyAgICAgICAgYmFjayB0byBzb2NrZXQuU09DS19TVFJFQU0uCiAgICAgICAgICIiIgogICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKIApAQCAtODA3LDcgKzgyMCw3IEBACiAgICAgICAgICAgICBzZWxmLnNvY2tldC5jb25uZWN0KGFkZHJlc3MpCiAgICAgICAgICAgICAjIGl0IHdvcmtlZCwgc28gc2V0IHNlbGYuc29ja3R5cGUgdG8gdGhlIHVzZWQgdHlwZQogICAgICAgICAgICAgc2VsZi5zb2NrdHlwZSA9IHVzZV9zb2NrdHlwZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKICAgICAgICAgICAgIGlmIHNlbGYuc29ja3R5cGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgIyB1c2VyIGRpZG4ndCBzcGVjaWZ5IGZhbGxpbmcgYmFjaywgc28gZmFpbApAQCAtODE4LDcgKzgzMSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY29ubmVjdChhZGRyZXNzKQogICAgICAgICAgICAgICAgICMgaXQgd29ya2VkLCBzbyBzZXQgc2VsZi5zb2NrdHlwZSB0byB0aGUgdXNlZCB0eXBlCiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrdHlwZSA9IHVzZV9zb2NrdHlwZQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC04NzEsMTAgKzg4NCw5IEBACiAgICAgICAgICAgICBtc2cgPSBzZWxmLmlkZW50ICsgbXNnCiAgICAgICAgIGlmIHNlbGYuYXBwZW5kX251bDoKICAgICAgICAgICAgIG1zZyArPSAnXDAwMCcKLSAgICAgICAgIiIiCi0gICAgICAgIFdlIG5lZWQgdG8gY29udmVydCByZWNvcmQgbGV2ZWwgdG8gbG93ZXJjYXNlLCBtYXliZSB0aGlzIHdpbGwKLSAgICAgICAgY2hhbmdlIGluIHRoZSBmdXR1cmUuCi0gICAgICAgICIiIgorCisgICAgICAgICMgV2UgbmVlZCB0byBjb252ZXJ0IHJlY29yZCBsZXZlbCB0byBsb3dlcmNhc2UsIG1heWJlIHRoaXMgd2lsbAorICAgICAgICAjIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgogICAgICAgICBwcmlvID0gJzwlZD4nICUgc2VsZi5lbmNvZGVQcmlvcml0eShzZWxmLmZhY2lsaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcFByaW9yaXR5KHJlY29yZC5sZXZlbG5hbWUpKQogICAgICAgICBwcmlvID0gcHJpby5lbmNvZGUoJ3V0Zi04JykKQEAgLTg4NSw3ICs4OTcsNyBAQAogICAgICAgICAgICAgaWYgc2VsZi51bml4c29ja2V0OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChtc2cpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0X3VuaXhzb2NrZXQoc2VsZi5hZGRyZXNzKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kKG1zZykKQEAgLTg5Myw5ICs5MDUsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmR0byhtc2csIHNlbGYuYWRkcmVzcykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZGFsbChtc2cpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIFNNVFBIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC05NzMsOSArOTgzLDcgQEAKICAgICAgICAgICAgICAgICBzbXRwLmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQpCiAgICAgICAgICAgICBzbXRwLnNlbmRtYWlsKHNlbGYuZnJvbWFkZHIsIHNlbGYudG9hZGRycywgbXNnKQogICAgICAgICAgICAgc210cC5xdWl0KCkKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogY2xhc3MgTlRFdmVudExvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKQEAgLTEwNjAsOSArMTA2OCw3IEBACiAgICAgICAgICAgICAgICAgdHlwZSA9IHNlbGYuZ2V0RXZlbnRUeXBlKHJlY29yZCkKICAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLmZvcm1hdChyZWNvcmQpCiAgICAgICAgICAgICAgICAgc2VsZi5fd2VsdS5SZXBvcnRFdmVudChzZWxmLmFwcG5hbWUsIGlkLCBjYXQsIHR5cGUsIFttc2ddKQotICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CkBAIC0xMTQ3LDkgKzExNTMsNyBAQAogICAgICAgICAgICAgaWYgc2VsZi5tZXRob2QgPT0gIlBPU1QiOgogICAgICAgICAgICAgICAgIGguc2VuZChkYXRhLmVuY29kZSgndXRmLTgnKSkKICAgICAgICAgICAgIGguZ2V0cmVzcG9uc2UoKSAgICAjY2FuJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0Ci0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIEJ1ZmZlcmluZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKQEAgLTEzMjksOSArMTMzMyw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmVucXVldWUoc2VsZi5wcmVwYXJlKHJlY29yZCkpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGlmIHRocmVhZGluZzoKZGlmZiAtLWdpdCBhL0xpYi9sem1hLnB5IGIvTGliL2x6bWEucHkKaW5kZXggMWE4OTg4Ny4uZjFkMzk1OCAxMDA2NDQKLS0tIGEvTGliL2x6bWEucHkKKysrIGIvTGliL2x6bWEucHkKQEAgLTU0LDkgKzU0LDkgQEAKICAgICAgICAgYnl0ZXMgb2JqZWN0KSwgaW4gd2hpY2ggY2FzZSB0aGUgbmFtZWQgZmlsZSBpcyBvcGVuZWQsIG9yIGl0IGNhbgogICAgICAgICBiZSBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKLSAgICAgICAgbW9kZSBjYW4gYmUgInIiIGZvciByZWFkaW5nIChkZWZhdWx0KSwgInciIGZvciAob3Zlcil3cml0aW5nLCBvcgotICAgICAgICAiYSIgZm9yIGFwcGVuZGluZy4gVGhlc2UgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcyAicmIiLCAid2IiLAotICAgICAgICBhbmQgImFiIiByZXNwZWN0aXZlbHkuCisgICAgICAgIG1vZGUgY2FuIGJlICJyIiBmb3IgcmVhZGluZyAoZGVmYXVsdCksICJ3IiBmb3IgKG92ZXIpd3JpdGluZywKKyAgICAgICAgIngiIGZvciBjcmVhdGluZyBleGNsdXNpdmVseSwgb3IgImEiIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbgorICAgICAgICBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgInJiIiwgIndiIiwgInhiIiBhbmQgImFiIiByZXNwZWN0aXZlbHkuCiAKICAgICAgICAgZm9ybWF0IHNwZWNpZmllcyB0aGUgY29udGFpbmVyIGZvcm1hdCB0byB1c2UgZm9yIHRoZSBmaWxlLgogICAgICAgICBJZiBtb2RlIGlzICJyIiwgdGhpcyBkZWZhdWx0cyB0byBGT1JNQVRfQVVUTy4gT3RoZXJ3aXNlLCB0aGUKQEAgLTExMCw4ICsxMTAsOSBAQAogICAgICAgICAgICAgIyBzdHJlYW0gd2lsbCBuZWVkIGEgc2VwYXJhdGUgZGVjb21wcmVzc29yIG9iamVjdC4KICAgICAgICAgICAgIHNlbGYuX2luaXRfYXJncyA9IHsiZm9ybWF0Ijpmb3JtYXQsICJmaWx0ZXJzIjpmaWx0ZXJzfQogICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTFpNQURlY29tcHJlc3NvcigqKnNlbGYuX2luaXRfYXJncykKLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKLSAgICAgICAgZWxpZiBtb2RlIGluICgidyIsICJ3YiIsICJhIiwgImFiIik6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisgICAgICAgIGVsaWYgbW9kZSBpbiAoInciLCAid2IiLCAiYSIsICJhYiIsICJ4IiwgInhiIik6CiAgICAgICAgICAgICBpZiBmb3JtYXQgaXMgTm9uZToKICAgICAgICAgICAgICAgICBmb3JtYXQgPSBGT1JNQVRfWFoKICAgICAgICAgICAgIG1vZGVfY29kZSA9IF9NT0RFX1dSSVRFCkBAIC0xNDMsNyArMTQ0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi5fbW9kZSBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpOgogICAgICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCiAgICAgICAgICAgICBlbGlmIHNlbGYuX21vZGUgPT0gX01PREVfV1JJVEU6CiAgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc2VsZi5fY29tcHJlc3Nvci5mbHVzaCgpKQogICAgICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBOb25lCkBAIC0xODcsMTUgKzE4OCwxOCBAQAogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZSIpCiAKICAgICBkZWYgX2NoZWNrX2Nhbl9yZWFkKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5yZWFkYWJsZSgpOgorICAgICAgICBpZiBzZWxmLl9tb2RlIG5vdCBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCiAgICAgICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbigiRmlsZSBub3Qgb3BlbiBmb3IgcmVhZGluZyIpCiAKICAgICBkZWYgX2NoZWNrX2Nhbl93cml0ZShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYud3JpdGFibGUoKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSAhPSBfTU9ERV9XUklURToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIkZpbGUgbm90IG9wZW4gZm9yIHdyaXRpbmciKQogCiAgICAgZGVmIF9jaGVja19jYW5fc2VlayhzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSBub3QgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIlNlZWtpbmcgaXMgb25seSBzdXBwb3J0ZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIGZpbGVzIG9wZW4gZm9yIHJlYWRpbmciKQogICAgICAgICBpZiBub3Qgc2VsZi5fZnAuc2Vla2FibGUoKToKQEAgLTIwNCwxNiArMjA4LDEzIEBACiAKICAgICAjIEZpbGwgdGhlIHJlYWRhaGVhZCBidWZmZXIgaWYgaXQgaXMgZW1wdHkuIFJldHVybnMgRmFsc2Ugb24gRU9GLgogICAgIGRlZiBfZmlsbF9idWZmZXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRF9FT0Y6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBEZXBlbmRpbmcgb24gdGhlIGlucHV0IGRhdGEsIG91ciBjYWxsIHRvIHRoZSBkZWNvbXByZXNzb3IgbWF5IG5vdAogICAgICAgICAjIHJldHVybiBhbnkgZGF0YS4gSW4gdGhpcyBjYXNlLCB0cnkgYWdhaW4gYWZ0ZXIgcmVhZGluZyBhbm90aGVyIGJsb2NrLgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YToKLSAgICAgICAgICAgICAgICByYXdibG9jayA9IHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYXdibG9jayA9IHNlbGYuX2ZwLnJlYWQoX0JVRkZFUl9TSVpFKQorICAgICAgICB3aGlsZSBzZWxmLl9idWZmZXJfb2Zmc2V0ID09IGxlbihzZWxmLl9idWZmZXIpOgorICAgICAgICAgICAgcmF3YmxvY2sgPSAoc2VsZi5fZGVjb21wcmVzc29yLnVudXNlZF9kYXRhIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mcC5yZWFkKF9CVUZGRVJfU0laRSkpCiAKICAgICAgICAgICAgIGlmIG5vdCByYXdibG9jazoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgpAQCAtMjM2LDMwICsyMzcsNDggQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKHJhd2Jsb2NrKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICMgUmVhZCBkYXRhIHVudGlsIEVPRi4KICAgICAjIElmIHJldHVybl9kYXRhIGlzIGZhbHNlLCBjb25zdW1lIHRoZSBkYXRhIHdpdGhvdXQgcmV0dXJuaW5nIGl0LgogICAgIGRlZiBfcmVhZF9hbGwoc2VsZiwgcmV0dXJuX2RhdGE9VHJ1ZSk6CisgICAgICAgICMgVGhlIGxvb3AgYXNzdW1lcyB0aGF0IF9idWZmZXJfb2Zmc2V0IGlzIDAuIEVuc3VyZSB0aGF0IHRoaXMgaXMgdHJ1ZS4KKyAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQorICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAorCiAgICAgICAgIGJsb2NrcyA9IFtdCiAgICAgICAgIHdoaWxlIHNlbGYuX2ZpbGxfYnVmZmVyKCk6CiAgICAgICAgICAgICBpZiByZXR1cm5fZGF0YToKICAgICAgICAgICAgICAgICBibG9ja3MuYXBwZW5kKHNlbGYuX2J1ZmZlcikKICAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oc2VsZi5fYnVmZmVyKQotICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCiAgICAgICAgIGlmIHJldHVybl9kYXRhOgogICAgICAgICAgICAgcmV0dXJuIGIiIi5qb2luKGJsb2NrcykKIAogICAgICMgUmVhZCBhIGJsb2NrIG9mIHVwIHRvIG4gYnl0ZXMuCiAgICAgIyBJZiByZXR1cm5fZGF0YSBpcyBmYWxzZSwgY29uc3VtZSB0aGUgZGF0YSB3aXRob3V0IHJldHVybmluZyBpdC4KICAgICBkZWYgX3JlYWRfYmxvY2soc2VsZiwgbiwgcmV0dXJuX2RhdGE9VHJ1ZSk6CisgICAgICAgICMgSWYgd2UgaGF2ZSBlbm91Z2ggZGF0YSBidWZmZXJlZCwgcmV0dXJuIGltbWVkaWF0ZWx5LgorICAgICAgICBlbmQgPSBzZWxmLl9idWZmZXJfb2Zmc2V0ICsgbgorICAgICAgICBpZiBlbmQgPD0gbGVuKHNlbGYuX2J1ZmZlcik6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQgOiBlbmRdCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gZW5kCisgICAgICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKGRhdGEpCisgICAgICAgICAgICByZXR1cm4gZGF0YSBpZiByZXR1cm5fZGF0YSBlbHNlIE5vbmUKKworICAgICAgICAjIFRoZSBsb29wIGFzc3VtZXMgdGhhdCBfYnVmZmVyX29mZnNldCBpcyAwLiBFbnN1cmUgdGhhdCB0aGlzIGlzIHRydWUuCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KKyAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKKwogICAgICAgICBibG9ja3MgPSBbXQogICAgICAgICB3aGlsZSBuID4gMCBhbmQgc2VsZi5fZmlsbF9idWZmZXIoKToKICAgICAgICAgICAgIGlmIG4gPCBsZW4oc2VsZi5fYnVmZmVyKToKICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyWzpuXQotICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcltuOl0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gbgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgogICAgICAgICAgICAgaWYgcmV0dXJuX2RhdGE6CiAgICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChkYXRhKQogICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQpAQCAtMjc0LDkgKzI5Myw5IEBACiAgICAgICAgIFRoZSBleGFjdCBudW1iZXIgb2YgYnl0ZXMgcmV0dXJuZWQgaXMgdW5zcGVjaWZpZWQuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCi0gICAgICAgIGlmIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRF9FT0Ygb3Igbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpOgogICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyCisgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCiAKICAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKICAgICAgICAgIiIiUmVhZCB1cCB0byBzaXplIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBmaWxlLgpAQCAtMjg1LDcgKzMwNCw3IEBACiAgICAgICAgIFJldHVybnMgYiIiIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgYXQgRU9GLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQotICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GIG9yIHNpemUgPT0gMDoKKyAgICAgICAgaWYgc2l6ZSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIGIiIgogICAgICAgICBlbGlmIHNpemUgPCAwOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfYWxsKCkKQEAgLTMwMiwxOCArMzIxLDQwIEBACiAgICAgICAgICMgdGhpcyBkb2VzIG5vdCBnaXZlIGVub3VnaCBkYXRhIGZvciB0aGUgZGVjb21wcmVzc29yIHRvIG1ha2UgcHJvZ3Jlc3MuCiAgICAgICAgICMgSW4gdGhpcyBjYXNlIHdlIG1ha2UgbXVsdGlwbGUgcmVhZHMsIHRvIGF2b2lkIHJldHVybmluZyBiIiIuCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgaWYgKHNpemUgPT0gMCBvciBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GIG9yCi0gICAgICAgICAgICBub3Qgc2VsZi5fZmlsbF9idWZmZXIoKSk6CisgICAgICAgIGlmIChzaXplID09IDAgb3IKKyAgICAgICAgICAgICMgT25seSBjYWxsIF9maWxsX2J1ZmZlcigpIGlmIHRoZSBidWZmZXIgaXMgYWN0dWFsbHkgZW1wdHkuCisgICAgICAgICAgICAjIFRoaXMgZ2l2ZXMgYSBzaWduaWZpY2FudCBzcGVlZHVwIGlmICpzaXplKiBpcyBzbWFsbC4KKyAgICAgICAgICAgIChzZWxmLl9idWZmZXJfb2Zmc2V0ID09IGxlbihzZWxmLl9idWZmZXIpIGFuZCBub3Qgc2VsZi5fZmlsbF9idWZmZXIoKSkpOgogICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICBpZiAwIDwgc2l6ZSA8IGxlbihzZWxmLl9idWZmZXIpOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcls6c2l6ZV0KLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcltzaXplOl0KKyAgICAgICAgaWYgc2l6ZSA+IDA6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ICsgc2l6ZV0KKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgKz0gbGVuKGRhdGEpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAogICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKGRhdGEpCiAgICAgICAgIHJldHVybiBkYXRhCiAKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICIiIlJlYWQgYSBsaW5lIG9mIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBmaWxlLgorCisgICAgICAgIFRoZSB0ZXJtaW5hdGluZyBuZXdsaW5lIChpZiBwcmVzZW50KSBpcyByZXRhaW5lZC4gSWYgc2l6ZSBpcworICAgICAgICBub24tbmVnYXRpdmUsIG5vIG1vcmUgdGhhbiBzaXplIGJ5dGVzIHdpbGwgYmUgcmVhZCAoaW4gd2hpY2gKKyAgICAgICAgY2FzZSB0aGUgbGluZSBtYXkgYmUgaW5jb21wbGV0ZSkuIFJldHVybnMgYicnIGlmIGFscmVhZHkgYXQgRU9GLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQorICAgICAgICAjIFNob3J0Y3V0IGZvciB0aGUgY29tbW9uIGNhc2UgLSB0aGUgd2hvbGUgbGluZSBpcyBpbiB0aGUgYnVmZmVyLgorICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgIGVuZCA9IHNlbGYuX2J1ZmZlci5maW5kKGIiXG4iLCBzZWxmLl9idWZmZXJfb2Zmc2V0KSArIDEKKyAgICAgICAgICAgIGlmIGVuZCA+IDA6CisgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDogZW5kXQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSBlbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKGxpbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgcmV0dXJuIGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWRsaW5lKHNlbGYsIHNpemUpCisKICAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CiAgICAgICAgICIiIldyaXRlIGEgYnl0ZXMgb2JqZWN0IHRvIHRoZSBmaWxlLgogCkBAIC0zMzMsNyArMzc0LDggQEAKICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX1JFQUQKICAgICAgICAgc2VsZi5fcG9zID0gMAogICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBMWk1BRGVjb21wcmVzc29yKCoqc2VsZi5faW5pdF9hcmdzKQotICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgorICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAogCiAgICAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0LCB3aGVuY2U9MCk6CiAgICAgICAgICIiIkNoYW5nZSB0aGUgZmlsZSBwb3NpdGlvbi4KQEAgLTM3Miw4ICs0MTQsNyBAQAogICAgICAgICAgICAgb2Zmc2V0IC09IHNlbGYuX3BvcwogCiAgICAgICAgICMgUmVhZCBhbmQgZGlzY2FyZCBkYXRhIHVudGlsIHdlIHJlYWNoIHRoZSBkZXNpcmVkIHBvc2l0aW9uLgotICAgICAgICBpZiBzZWxmLl9tb2RlICE9IF9NT0RFX1JFQURfRU9GOgotICAgICAgICAgICAgc2VsZi5fcmVhZF9ibG9jayhvZmZzZXQsIHJldHVybl9kYXRhPUZhbHNlKQorICAgICAgICBzZWxmLl9yZWFkX2Jsb2NrKG9mZnNldCwgcmV0dXJuX2RhdGE9RmFsc2UpCiAKICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcwogCkBAIC0zODgsMjMgKzQyOSwyNSBAQAogICAgICAgICAgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSk6CiAgICAgIiIiT3BlbiBhbiBMWk1BLWNvbXByZXNzZWQgZmlsZSBpbiBiaW5hcnkgb3IgdGV4dCBtb2RlLgogCi0gICAgZmlsZW5hbWUgY2FuIGJlIGVpdGhlciBhbiBhY3R1YWwgZmlsZSBuYW1lIChnaXZlbiBhcyBhIHN0ciBvciBieXRlcyBvYmplY3QpLAotICAgIGluIHdoaWNoIGNhc2UgdGhlIG5hbWVkIGZpbGUgaXMgb3BlbmVkLCBvciBpdCBjYW4gYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QKLSAgICB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCisgICAgZmlsZW5hbWUgY2FuIGJlIGVpdGhlciBhbiBhY3R1YWwgZmlsZSBuYW1lIChnaXZlbiBhcyBhIHN0ciBvciBieXRlcworICAgIG9iamVjdCksIGluIHdoaWNoIGNhc2UgdGhlIG5hbWVkIGZpbGUgaXMgb3BlbmVkLCBvciBpdCBjYW4gYmUgYW4KKyAgICBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKLSAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiIChkZWZhdWx0KSwgInciLCAid2IiLCAiYSIsIG9yICJhYiIgZm9yCi0gICAgYmluYXJ5IG1vZGUsIG9yICJydCIsICJ3dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLgorICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIgKGRlZmF1bHQpLCAidyIsICJ3YiIsICJ4IiwgInhiIiwKKyAgICAiYSIsIG9yICJhYiIgZm9yIGJpbmFyeSBtb2RlLCBvciAicnQiLCAid3QiLCAieHQiLCBvciAiYXQiIGZvciB0ZXh0CisgICAgbW9kZS4KIAotICAgIFRoZSBmb3JtYXQsIGNoZWNrLCBwcmVzZXQgYW5kIGZpbHRlcnMgYXJndW1lbnRzIHNwZWNpZnkgdGhlIGNvbXByZXNzaW9uCi0gICAgc2V0dGluZ3MsIGFzIGZvciBMWk1BQ29tcHJlc3NvciwgTFpNQURlY29tcHJlc3NvciBhbmQgTFpNQUZpbGUuCisgICAgVGhlIGZvcm1hdCwgY2hlY2ssIHByZXNldCBhbmQgZmlsdGVycyBhcmd1bWVudHMgc3BlY2lmeSB0aGUKKyAgICBjb21wcmVzc2lvbiBzZXR0aW5ncywgYXMgZm9yIExaTUFDb21wcmVzc29yLCBMWk1BRGVjb21wcmVzc29yIGFuZAorICAgIExaTUFGaWxlLgogCi0gICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIExaTUFGaWxlIGNvbnN0cnVjdG9yOgotICAgIExaTUFGaWxlKGZpbGVuYW1lLCBtb2RlLCAuLi4pLiBJbiB0aGlzIGNhc2UsIHRoZSBlbmNvZGluZywgZXJyb3JzIGFuZAotICAgIG5ld2xpbmUgYXJndW1lbnRzIG11c3Qgbm90IGJlIHByb3ZpZGVkLgorICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBMWk1BRmlsZQorICAgIGNvbnN0cnVjdG9yOiBMWk1BRmlsZShmaWxlbmFtZSwgbW9kZSwgLi4uKS4gSW4gdGhpcyBjYXNlLCB0aGUKKyAgICBlbmNvZGluZywgZXJyb3JzIGFuZCBuZXdsaW5lIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBwcm92aWRlZC4KIAogICAgIEZvciB0ZXh0IG1vZGUsIGEgTFpNQUZpbGUgb2JqZWN0IGlzIGNyZWF0ZWQsIGFuZCB3cmFwcGVkIGluIGFuCi0gICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yIGhhbmRsaW5nCi0gICAgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KKyAgICBpby5UZXh0SU9XcmFwcGVyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBlbmNvZGluZywgZXJyb3IKKyAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCiAgICAgIiIiCiAgICAgaWYgInQiIGluIG1vZGU6CkBAIC00MzQsNyArNDc3LDcgQEAKICAgICBSZWZlciB0byBMWk1BQ29tcHJlc3NvcidzIGRvY3N0cmluZyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUKICAgICBvcHRpb25hbCBhcmd1bWVudHMgKmZvcm1hdCosICpjaGVjayosICpwcmVzZXQqIGFuZCAqZmlsdGVycyouCiAKLSAgICBGb3IgaW5jcmVtZW50YWwgY29tcHJlc3Npb24sIHVzZSBhbiBMWk1BQ29tcHJlc3NvciBvYmplY3QgaW5zdGVhZC4KKyAgICBGb3IgaW5jcmVtZW50YWwgY29tcHJlc3Npb24sIHVzZSBhbiBMWk1BQ29tcHJlc3NvciBpbnN0ZWFkLgogICAgICIiIgogICAgIGNvbXAgPSBMWk1BQ29tcHJlc3Nvcihmb3JtYXQsIGNoZWNrLCBwcmVzZXQsIGZpbHRlcnMpCiAgICAgcmV0dXJuIGNvbXAuY29tcHJlc3MoZGF0YSkgKyBjb21wLmZsdXNoKCkKQEAgLTQ0Niw3ICs0ODksNyBAQAogICAgIFJlZmVyIHRvIExaTUFEZWNvbXByZXNzb3IncyBkb2NzdHJpbmcgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCiAgICAgb3B0aW9uYWwgYXJndW1lbnRzICpmb3JtYXQqLCAqY2hlY2sqIGFuZCAqZmlsdGVycyouCiAKLSAgICBGb3IgaW5jcmVtZW50YWwgZGVjb21wcmVzc2lvbiwgdXNlIGEgTFpNQURlY29tcHJlc3NvciBvYmplY3QgaW5zdGVhZC4KKyAgICBGb3IgaW5jcmVtZW50YWwgZGVjb21wcmVzc2lvbiwgdXNlIGFuIExaTUFEZWNvbXByZXNzb3IgaW5zdGVhZC4KICAgICAiIiIKICAgICByZXN1bHRzID0gW10KICAgICB3aGlsZSBUcnVlOgpkaWZmIC0tZ2l0IGEvTGliL21hY3BhdGgucHkgYi9MaWIvbWFjcGF0aC5weQppbmRleCAxNjE1ZDkxLi5kMzRmOWU5NCAxMDA2NDQKLS0tIGEvTGliL21hY3BhdGgucHkKKysrIGIvTGliL21hY3BhdGgucHkKQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICBzdCA9IG9zLmxzdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCmRpZmYgLS1naXQgYS9MaWIvbWFpbGJveC5weSBiL0xpYi9tYWlsYm94LnB5CmluZGV4IDNiNjRjMmUuLmRkZTU5N2MgMTAwNjQ0Ci0tLSBhL0xpYi9tYWlsYm94LnB5CisrKyBiL0xpYi9tYWlsYm94LnB5CkBAIC0yMCw5ICsyMCw2IEBACiBpbXBvcnQgaW8KIGltcG9ydCBjb250ZXh0bGliCiB0cnk6Ci0gICAgaWYgc3lzLnBsYXRmb3JtID09ICdvczJlbXgnOgotICAgICAgICAjIE9TLzIgRU1YIGZjbnRsKCkgbm90IGFkZXF1YXRlCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yCiAgICAgaW1wb3J0IGZjbnRsCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZmNudGwgPSBOb25lCkBAIC0zMzksMTEgKzMzNiw4IEBACiAgICAgICAgICMgVGhpcyBvdmVycmlkZXMgYW4gaW5hcHBsaWNhYmxlIGltcGxlbWVudGF0aW9uIGluIHRoZSBzdXBlcmNsYXNzLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnJlbW92ZShrZXkpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgZXhjZXB0IChLZXlFcnJvciwgRmlsZU5vdEZvdW5kRXJyb3IpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UKIAogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIG1lc3NhZ2UpOgogICAgICAgICAiIiJSZXBsYWNlIHRoZSBrZXllZCBtZXNzYWdlOyByYWlzZSBLZXlFcnJvciBpZiBpdCBkb2Vzbid0IGV4aXN0LiIiIgpAQCAtMzc1LDE0ICszNjksMTEgQEAKICAgICBkZWYgZ2V0X21lc3NhZ2Uoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgTWVzc2FnZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICBzdWJwYXRoID0gc2VsZi5fbG9va3VwKGtleSkKLSAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN1YnBhdGgpLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3VicGF0aCksICdyYicpIGFzIGY6CiAgICAgICAgICAgICBpZiBzZWxmLl9mYWN0b3J5OgogICAgICAgICAgICAgICAgIG1zZyA9IHNlbGYuX2ZhY3RvcnkoZikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbXNnID0gTWFpbGRpck1lc3NhZ2UoZikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzdWJkaXIsIG5hbWUgPSBvcy5wYXRoLnNwbGl0KHN1YnBhdGgpCiAgICAgICAgIG1zZy5zZXRfc3ViZGlyKHN1YmRpcikKICAgICAgICAgaWYgc2VsZi5jb2xvbiBpbiBuYW1lOgpAQCAtMzkyLDExICszODMsOCBAQAogCiAgICAgZGVmIGdldF9ieXRlcyhzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBieXRlcyByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgotICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc2VsZi5fbG9va3VwKGtleSkpLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc2VsZi5fbG9va3VwKGtleSkpLCAncmInKSBhcyBmOgogICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpLnJlcGxhY2UobGluZXNlcCwgYidcbicpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiBnZXRfZmlsZShzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBmaWxlLWxpa2UgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKQEAgLTUwOCwxNiArNDk2LDEyIEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ3RtcCcsIHVuaXEpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnN0YXQocGF0aCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgIE1haWxkaXIuX2NvdW50ICs9IDEKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlX2NhcmVmdWxseShwYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgTWFpbGRpci5fY291bnQgKz0gMQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlX2NhcmVmdWxseShwYXRoKQorICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgIyBGYWxsIHRocm91Z2ggdG8gaGVyZSBpZiBzdGF0IHN1Y2NlZWRlZCBvciBvcGVuIHJhaXNlZCBFRVhJU1QuCiAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignTmFtZSBjbGFzaCBwcmV2ZW50ZWQgZmlsZSBjcmVhdGlvbjogJXMnICUKQEAgLTU5NCw3ICs1NzgsNyBAQAogICAgICAgICBNYWlsYm94Ll9faW5pdF9fKHNlbGYsIHBhdGgsIGZhY3RvcnksIGNyZWF0ZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICBpZiBjcmVhdGU6CiAgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuX3BhdGgsICd3YisnKQpAQCAtNjM3LDggKzYyMSw3IEBACiAgICAgZGVmIGl0ZXJrZXlzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBrZXlzLiIiIgogICAgICAgICBzZWxmLl9sb29rdXAoKQotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX3RvYy5rZXlzKCk6Ci0gICAgICAgICAgICB5aWVsZCBrZXkKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl90b2Mua2V5cygpCiAKICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBrZXllZCBtZXNzYWdlIGV4aXN0cywgRmFsc2Ugb3RoZXJ3aXNlLiIiIgpAQCAtNzE2LDEzICs2OTksOSBAQAogICAgICAgICBvcy5jaG1vZChuZXdfZmlsZS5uYW1lLCBtb2RlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUobmV3X2ZpbGUubmFtZSwgc2VsZi5fcGF0aCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUVYSVNUIG9yIFwKLSAgICAgICAgICAgICAgKG9zLm5hbWUgPT0gJ29zMicgYW5kIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTKToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5fcGF0aCkKLSAgICAgICAgICAgICAgICBvcy5yZW5hbWUobmV3X2ZpbGUubmFtZSwgc2VsZi5fcGF0aCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLl9wYXRoKQorICAgICAgICAgICAgb3MucmVuYW1lKG5ld19maWxlLm5hbWUsIHNlbGYuX3BhdGgpCiAgICAgICAgIHNlbGYuX2ZpbGUgPSBvcGVuKHNlbGYuX3BhdGgsICdyYisnKQogICAgICAgICBzZWxmLl90b2MgPSBuZXdfdG9jCiAgICAgICAgIHNlbGYuX3BlbmRpbmcgPSBGYWxzZQpAQCAtOTk5LDcgKzk3OCw3IEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMDEzLDcgKzk5Miw3IEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMDM5LDEyICsxMDE4LDEyIEBACiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiKycpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggZjoKICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICBfbG9ja19maWxlKGYpCiAgICAgICAgICAgICB0cnk6CkBAIC0xMDUyLDggKzEwMzEsNiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgICAgIF91bmxvY2tfZmlsZShmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGZvciBuYW1lLCBrZXlfbGlzdCBpbiBzZWxmLmdldF9zZXF1ZW5jZXMoKS5pdGVtcygpOgogICAgICAgICAgICAgaWYga2V5IGluIGtleV9saXN0OgogICAgICAgICAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UobmFtZSkKQEAgLTEwNjYsMTIgKzEwNDMsMTIgQEAKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmIrJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdObyBtZXNzYWdlIHdpdGgga2V5OiAlcycgJSBrZXkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBmOgogICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgIF9sb2NrX2ZpbGUoZikKICAgICAgICAgICAgIHRyeToKQEAgLTEwNzksMTQgKzEwNTYsMTIgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgICAgICBfdW5sb2NrX2ZpbGUoZikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIGdldF9maWxlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGZpbGUtbGlrZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmInKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0yMDc5LDcgKzIwNTQsNyBAQAogICAgICAgICBpZiBmY250bDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX0VYIHwgZmNudGwuTE9DS19OQikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBR0FJTiwgZXJybm8uRUFDQ0VTLCBlcnJuby5FUk9GUyk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignbG9ja2Y6IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm5hbWUpCkBAIC0yMDg5LDcgKzIwNjQsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHByZV9sb2NrID0gX2NyZWF0ZV90ZW1wb3JhcnkoZi5uYW1lICsgJy5sb2NrJykKICAgICAgICAgICAgICAgICBwcmVfbG9jay5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAjIFdpdGhvdXQgd3JpdGUgYWNjZXNzLCBqdXN0IHNraXAgZG90bG9ja2luZy4KICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMjEwMiwxNCArMjA3NywxMCBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShwcmVfbG9jay5uYW1lLCBmLm5hbWUgKyAnLmxvY2snKQogICAgICAgICAgICAgICAgICAgICBkb3Rsb2NrX2RvbmUgPSBUcnVlCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUVYSVNUIG9yIFwKLSAgICAgICAgICAgICAgICAgIChvcy5uYW1lID09ICdvczInIGFuZCBlLmVycm5vID09IGVycm5vLkVBQ0NFUyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwcmVfbG9jay5uYW1lKQotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeHRlcm5hbENsYXNoRXJyb3IoJ2RvdCBsb2NrIHVuYXZhaWxhYmxlOiAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5uYW1lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwcmVfbG9jay5uYW1lKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignZG90IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYubmFtZSkKICAgICBleGNlcHQ6CiAgICAgICAgIGlmIGZjbnRsOgogICAgICAgICAgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19VTikKZGlmZiAtLWdpdCBhL0xpYi9tYWlsY2FwLnB5IGIvTGliL21haWxjYXAucHkKaW5kZXggMGMwYjE5Yy4uOTdlMzAzNSAxMDA2NDQKLS0tIGEvTGliL21haWxjYXAucHkKKysrIGIvTGliL21haWxjYXAucHkKQEAgLTIwLDcgKzIwLDcgQEAKICAgICBmb3IgbWFpbGNhcCBpbiBsaXN0bWFpbGNhcGZpbGVzKCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZwID0gb3BlbihtYWlsY2FwLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICBtb3JlY2FwcyA9IHJlYWRtYWlsY2FwZmlsZShmcCkKZGlmZiAtLWdpdCBhL0xpYi9taW1ldHlwZXMucHkgYi9MaWIvbWltZXR5cGVzLnB5CmluZGV4IGNkZWJmN2EuLmI5OGM4NzQgMTAwNjQ0Ci0tLSBhL0xpYi9taW1ldHlwZXMucHkKKysrIGIvTGliL21pbWV0eXBlcy5weQpAQCAtMzYxLDcgKzM2MSw3IEBACiBkZWYgcmVhZF9taW1lX3R5cGVzKGZpbGUpOgogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICB3aXRoIGY6CiAgICAgICAgIGRiID0gTWltZVR5cGVzKCkKZGlmZiAtLWdpdCBhL0xpYi9tb2R1bGVmaW5kZXIucHkgYi9MaWIvbW9kdWxlZmluZGVyLnB5CmluZGV4IDgyYzdhZWQuLmIxOTk0MWUgMTAwNjQ0Ci0tLSBhL0xpYi9tb2R1bGVmaW5kZXIucHkKKysrIGIvTGliL21vZHVsZWZpbmRlci5weQpAQCAtMSwxMyArMSwxNiBAQAogIiIiRmluZCBtb2R1bGVzIHVzZWQgYnkgYSBzY3JpcHQsIHVzaW5nIGludHJvc3BlY3Rpb24uIiIiCiAKIGltcG9ydCBkaXMKLWltcG9ydCBpbXAKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgbWFyc2hhbAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKIGltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB3YXJuaW5ncword2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICBpbXBvcnQgaW1wCiAKICMgWFhYIENsZWFuIHVwIG9uY2Ugc3RyOCdzIGNzdG9yIG1hdGNoZXMgYnl0ZXMuCiBMT0FEX0NPTlNUID0gYnl0ZXMoW2Rpcy5vcG5hbWUuaW5kZXgoJ0xPQURfQ09OU1QnKV0pCkBAIC0yMjksNyArMjMyLDcgQEAKICAgICAgICAgZm9yIGRpciBpbiBtLl9fcGF0aF9fOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLm1zZygyLCAiY2FuJ3QgbGlzdCBkaXJlY3RvcnkiLCBkaXIpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKaW5kZXggMWYzZTY3Yy4uODZkZjYzOCAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CkBAIC04LDI2MCArOCwzMSBAQAogIyBzdWJwYWNrYWdlICdtdWx0aXByb2Nlc3NpbmcuZHVtbXknIGhhcyB0aGUgc2FtZSBBUEkgYnV0IGlzIGEgc2ltcGxlCiAjIHdyYXBwZXIgZm9yICd0aHJlYWRpbmcnLgogIwotIyBUcnkgY2FsbGluZyBgbXVsdGlwcm9jZXNzaW5nLmRvYy5tYWluKClgIHRvIHJlYWQgdGhlIGh0bWwKLSMgZG9jdW1lbnRhdGlvbiBpbiBhIHdlYmJyb3dzZXIuCi0jCi0jCiAjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCi1fX3ZlcnNpb25fXyA9ICcwLjcwYTEnCi0KLV9fYWxsX18gPSBbCi0gICAgJ1Byb2Nlc3MnLCAnY3VycmVudF9wcm9jZXNzJywgJ2FjdGl2ZV9jaGlsZHJlbicsICdmcmVlemVfc3VwcG9ydCcsCi0gICAgJ01hbmFnZXInLCAnUGlwZScsICdjcHVfY291bnQnLCAnbG9nX3RvX3N0ZGVycicsICdnZXRfbG9nZ2VyJywKLSAgICAnYWxsb3dfY29ubmVjdGlvbl9waWNrbGluZycsICdCdWZmZXJUb29TaG9ydCcsICdUaW1lb3V0RXJyb3InLAotICAgICdMb2NrJywgJ1JMb2NrJywgJ1NlbWFwaG9yZScsICdCb3VuZGVkU2VtYXBob3JlJywgJ0NvbmRpdGlvbicsCi0gICAgJ0V2ZW50JywgJ0JhcnJpZXInLCAnUXVldWUnLCAnU2ltcGxlUXVldWUnLCAnSm9pbmFibGVRdWV1ZScsICdQb29sJywKLSAgICAnVmFsdWUnLCAnQXJyYXknLCAnUmF3VmFsdWUnLCAnUmF3QXJyYXknLCAnU1VCREVCVUcnLCAnU1VCV0FSTklORycsCi0gICAgXQotCi1fX2F1dGhvcl9fID0gJ1IuIE91ZGtlcmsgKHIubS5vdWRrZXJrQGdtYWlsLmNvbSknCi0KLSMKLSMgSW1wb3J0cwotIwotCi1pbXBvcnQgb3MKIGltcG9ydCBzeXMKLQotZnJvbSBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcyBpbXBvcnQgUHJvY2VzcywgY3VycmVudF9wcm9jZXNzLCBhY3RpdmVfY2hpbGRyZW4KLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IFNVQkRFQlVHLCBTVUJXQVJOSU5HCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKIAogIwotIyBFeGNlcHRpb25zCisjIENvcHkgc3R1ZmYgZnJvbSBkZWZhdWx0IGNvbnRleHQKICMKIAotY2xhc3MgUHJvY2Vzc0Vycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi1jbGFzcyBCdWZmZXJUb29TaG9ydChQcm9jZXNzRXJyb3IpOgotICAgIHBhc3MKLQotY2xhc3MgVGltZW91dEVycm9yKFByb2Nlc3NFcnJvcik6Ci0gICAgcGFzcwotCi1jbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yKFByb2Nlc3NFcnJvcik6Ci0gICAgcGFzcwotCi1pbXBvcnQgX211bHRpcHJvY2Vzc2luZworZ2xvYmFscygpLnVwZGF0ZSgobmFtZSwgZ2V0YXR0cihjb250ZXh0Ll9kZWZhdWx0X2NvbnRleHQsIG5hbWUpKQorICAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBjb250ZXh0Ll9kZWZhdWx0X2NvbnRleHQuX19hbGxfXykKK19fYWxsX18gPSBjb250ZXh0Ll9kZWZhdWx0X2NvbnRleHQuX19hbGxfXwogCiAjCi0jIERlZmluaXRpb25zIG5vdCBkZXBlbmRpbmcgb24gbmF0aXZlIHNlbWFwaG9yZXMKKyMgWFhYIFRoZXNlIHNob3VsZCBub3QgcmVhbGx5IGJlIGRvY3VtZW50ZWQgb3IgcHVibGljLgogIwogCi1kZWYgTWFuYWdlcigpOgotICAgICcnJwotICAgIFJldHVybnMgYSBtYW5hZ2VyIGFzc29jaWF0ZWQgd2l0aCBhIHJ1bm5pbmcgc2VydmVyIHByb2Nlc3MKLQotICAgIFRoZSBtYW5hZ2VycyBtZXRob2RzIHN1Y2ggYXMgYExvY2soKWAsIGBDb25kaXRpb24oKWAgYW5kIGBRdWV1ZSgpYAotICAgIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBzaGFyZWQgb2JqZWN0cy4KLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5tYW5hZ2VycyBpbXBvcnQgU3luY01hbmFnZXIKLSAgICBtID0gU3luY01hbmFnZXIoKQotICAgIG0uc3RhcnQoKQotICAgIHJldHVybiBtCi0KLWRlZiBQaXBlKGR1cGxleD1UcnVlKToKLSAgICAnJycKLSAgICBSZXR1cm5zIHR3byBjb25uZWN0aW9uIG9iamVjdCBjb25uZWN0ZWQgYnkgYSBwaXBlCi0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQotICAgIHJldHVybiBQaXBlKGR1cGxleCkKLQotZGVmIGNwdV9jb3VudCgpOgotICAgICcnJwotICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0KLSAgICAnJycKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbnVtID0gaW50KG9zLmVudmlyb25bJ05VTUJFUl9PRl9QUk9DRVNTT1JTJ10pCi0gICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgS2V5RXJyb3IpOgotICAgICAgICAgICAgbnVtID0gMAotICAgIGVsaWYgJ2JzZCcgaW4gc3lzLnBsYXRmb3JtIG9yIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgY29tbSA9ICcvc2Jpbi9zeXNjdGwgLW4gaHcubmNwdScKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgY29tbSA9ICcvdXNyJyArIGNvbW0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBvcy5wb3Blbihjb21tKSBhcyBwOgotICAgICAgICAgICAgICAgIG51bSA9IGludChwLnJlYWQoKSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBudW0gPSAwCi0gICAgZWxzZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbnVtID0gb3Muc3lzY29uZignU0NfTlBST0NFU1NPUlNfT05MTicpCi0gICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICAgICAgbnVtID0gMAotCi0gICAgaWYgbnVtID49IDE6Ci0gICAgICAgIHJldHVybiBudW0KLSAgICBlbHNlOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdjYW5ub3QgZGV0ZXJtaW5lIG51bWJlciBvZiBjcHVzJykKLQotZGVmIGZyZWV6ZV9zdXBwb3J0KCk6Ci0gICAgJycnCi0gICAgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgZmFrZSBmb3JrZWQgcHJvY2VzcyBpbiBhIGZyb3plbiBleGVjdXRhYmxlLgotICAgIElmIHNvIHRoZW4gcnVuIGNvZGUgc3BlY2lmaWVkIGJ5IGNvbW1hbmRsaW5lIGFuZCBleGl0LgotICAgICcnJwotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKToKLSAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgZnJlZXplX3N1cHBvcnQKLSAgICAgICAgZnJlZXplX3N1cHBvcnQoKQotCi1kZWYgZ2V0X2xvZ2dlcigpOgotICAgICcnJwotICAgIFJldHVybiBwYWNrYWdlIGxvZ2dlciAtLSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IHRoZW4gaXQgaXMgY3JlYXRlZAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGdldF9sb2dnZXIKLSAgICByZXR1cm4gZ2V0X2xvZ2dlcigpCi0KLWRlZiBsb2dfdG9fc3RkZXJyKGxldmVsPU5vbmUpOgotICAgICcnJwotICAgIFR1cm4gb24gbG9nZ2luZyBhbmQgYWRkIGEgaGFuZGxlciB3aGljaCBwcmludHMgdG8gc3RkZXJyCi0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgbG9nX3RvX3N0ZGVycgotICAgIHJldHVybiBsb2dfdG9fc3RkZXJyKGxldmVsKQotCi1kZWYgYWxsb3dfY29ubmVjdGlvbl9waWNrbGluZygpOgotICAgICcnJwotICAgIEluc3RhbGwgc3VwcG9ydCBmb3Igc2VuZGluZyBjb25uZWN0aW9ucyBhbmQgc29ja2V0cyBiZXR3ZWVuIHByb2Nlc3NlcwotICAgICcnJwotICAgICMgVGhpcyBpcyB1bmRvY3VtZW50ZWQuICBJbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBtdWx0aXByb2Nlc3NpbmcKLSAgICAjIGl0cyBvbmx5IGVmZmVjdCB3YXMgdG8gbWFrZSBzb2NrZXQgb2JqZWN0cyBpbmhlcml0YWJsZSBvbiBXaW5kb3dzLgotICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbgorU1VCREVCVUcgPSA1CitTVUJXQVJOSU5HID0gMjUKIAogIwotIyBEZWZpbml0aW9ucyBkZXBlbmRpbmcgb24gbmF0aXZlIHNlbWFwaG9yZXMKKyMgQWxpYXMgZm9yIG1haW4gbW9kdWxlIC0tIHdpbGwgYmUgcmVzZXQgYnkgYm9vdHN0cmFwcGluZyBjaGlsZCBwcm9jZXNzZXMKICMKIAotZGVmIExvY2soKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgbm9uLXJlY3Vyc2l2ZSBsb2NrIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBMb2NrCi0gICAgcmV0dXJuIExvY2soKQotCi1kZWYgUkxvY2soKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgcmVjdXJzaXZlIGxvY2sgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IFJMb2NrCi0gICAgcmV0dXJuIFJMb2NrKCkKLQotZGVmIENvbmRpdGlvbihsb2NrPU5vbmUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBjb25kaXRpb24gb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IENvbmRpdGlvbgotICAgIHJldHVybiBDb25kaXRpb24obG9jaykKLQotZGVmIFNlbWFwaG9yZSh2YWx1ZT0xKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc2VtYXBob3JlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBTZW1hcGhvcmUKLSAgICByZXR1cm4gU2VtYXBob3JlKHZhbHVlKQotCi1kZWYgQm91bmRlZFNlbWFwaG9yZSh2YWx1ZT0xKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgYm91bmRlZCBzZW1hcGhvcmUgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IEJvdW5kZWRTZW1hcGhvcmUKLSAgICByZXR1cm4gQm91bmRlZFNlbWFwaG9yZSh2YWx1ZSkKLQotZGVmIEV2ZW50KCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhbiBldmVudCBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgRXZlbnQKLSAgICByZXR1cm4gRXZlbnQoKQotCi1kZWYgQmFycmllcihwYXJ0aWVzLCBhY3Rpb249Tm9uZSwgdGltZW91dD1Ob25lKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgYmFycmllciBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgQmFycmllcgotICAgIHJldHVybiBCYXJyaWVyKHBhcnRpZXMsIGFjdGlvbiwgdGltZW91dCkKLQotZGVmIFF1ZXVlKG1heHNpemU9MCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHF1ZXVlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnF1ZXVlcyBpbXBvcnQgUXVldWUKLSAgICByZXR1cm4gUXVldWUobWF4c2l6ZSkKLQotZGVmIEpvaW5hYmxlUXVldWUobWF4c2l6ZT0wKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgcXVldWUgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBKb2luYWJsZVF1ZXVlCi0gICAgcmV0dXJuIEpvaW5hYmxlUXVldWUobWF4c2l6ZSkKLQotZGVmIFNpbXBsZVF1ZXVlKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHF1ZXVlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnF1ZXVlcyBpbXBvcnQgU2ltcGxlUXVldWUKLSAgICByZXR1cm4gU2ltcGxlUXVldWUoKQotCi1kZWYgUG9vbChwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCksIG1heHRhc2tzcGVyY2hpbGQ9Tm9uZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHByb2Nlc3MgcG9vbCBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5wb29sIGltcG9ydCBQb29sCi0gICAgcmV0dXJuIFBvb2wocHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MsIG1heHRhc2tzcGVyY2hpbGQpCi0KLWRlZiBSYXdWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncyk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHNoYXJlZCBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd1ZhbHVlCi0gICAgcmV0dXJuIFJhd1ZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzKQotCi1kZWYgUmF3QXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplcik6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHNoYXJlZCBhcnJheQotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcyBpbXBvcnQgUmF3QXJyYXkKLSAgICByZXR1cm4gUmF3QXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplcikKLQotZGVmIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPVRydWUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzeW5jaHJvbml6ZWQgc2hhcmVkIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcyBpbXBvcnQgVmFsdWUKLSAgICByZXR1cm4gVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9bG9jaykKLQotZGVmIEFycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsICosIGxvY2s9VHJ1ZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHN5bmNocm9uaXplZCBzaGFyZWQgYXJyYXkKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IEFycmF5Ci0gICAgcmV0dXJuIEFycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsIGxvY2s9bG9jaykKLQotIwotIwotIwotCi1pZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLQotICAgIGRlZiBzZXRfZXhlY3V0YWJsZShleGVjdXRhYmxlKToKLSAgICAgICAgJycnCi0gICAgICAgIFNldHMgdGhlIHBhdGggdG8gYSBweXRob24uZXhlIG9yIHB5dGhvbncuZXhlIGJpbmFyeSB1c2VkIHRvIHJ1bgotICAgICAgICBjaGlsZCBwcm9jZXNzZXMgb24gV2luZG93cyBpbnN0ZWFkIG9mIHN5cy5leGVjdXRhYmxlLgotICAgICAgICBVc2VmdWwgZm9yIHBlb3BsZSBlbWJlZGRpbmcgUHl0aG9uLgotICAgICAgICAnJycKLSAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgc2V0X2V4ZWN1dGFibGUKLSAgICAgICAgc2V0X2V4ZWN1dGFibGUoZXhlY3V0YWJsZSkKLQotICAgIF9fYWxsX18gKz0gWydzZXRfZXhlY3V0YWJsZSddCitpZiAnX19tYWluX18nIGluIHN5cy5tb2R1bGVzOgorICAgIHN5cy5tb2R1bGVzWydfX21wX21haW5fXyddID0gc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10KZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQppbmRleCAyMjU4OWQwLi4wOWVjNGZjIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CkBAIC0xMiw4ICsxMiw2IEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IHBpY2tsZQotaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IGVycm5vCkBAIC0yMiw5ICsyMCwxMyBAQAogaW1wb3J0IGl0ZXJ0b29scwogCiBpbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IGN1cnJlbnRfcHJvY2VzcywgQXV0aGVudGljYXRpb25FcnJvciwgQnVmZmVyVG9vU2hvcnQKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGdldF90ZW1wX2RpciwgRmluYWxpemUsIHN1Yl9kZWJ1ZywgZGVidWcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IEZvcmtpbmdQaWNrbGVyCisKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKKworZnJvbSAuIGltcG9ydCBBdXRoZW50aWNhdGlvbkVycm9yLCBCdWZmZXJUb29TaG9ydAorZnJvbSAucmVkdWN0aW9uIGltcG9ydCBGb3JraW5nUGlja2xlcgorCiB0cnk6CiAgICAgaW1wb3J0IF93aW5hcGkKICAgICBmcm9tIF93aW5hcGkgaW1wb3J0IFdBSVRfT0JKRUNUXzAsIFdBSVRfVElNRU9VVCwgSU5GSU5JVEUKQEAgLTcyLDcgKzc0LDcgQEAKICAgICBpZiBmYW1pbHkgPT0gJ0FGX0lORVQnOgogICAgICAgICByZXR1cm4gKCdsb2NhbGhvc3QnLCAwKQogICAgIGVsaWYgZmFtaWx5ID09ICdBRl9VTklYJzoKLSAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J2xpc3RlbmVyLScsIGRpcj1nZXRfdGVtcF9kaXIoKSkKKyAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J2xpc3RlbmVyLScsIGRpcj11dGlsLmdldF90ZW1wX2RpcigpKQogICAgIGVsaWYgZmFtaWx5ID09ICdBRl9QSVBFJzoKICAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9cidcXC5ccGlwZVxweWMtJWQtJWQtJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9zLmdldHBpZCgpLCBuZXh0KF9tbWFwX2NvdW50ZXIpKSkKQEAgLTEzMiwyMiArMTM0LDIyIEBACiAKICAgICBkZWYgX2NoZWNrX2Nsb3NlZChzZWxmKToKICAgICAgICAgaWYgc2VsZi5faGFuZGxlIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJoYW5kbGUgaXMgY2xvc2VkIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImhhbmRsZSBpcyBjbG9zZWQiKQogCiAgICAgZGVmIF9jaGVja19yZWFkYWJsZShzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX3JlYWRhYmxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY29ubmVjdGlvbiBpcyB3cml0ZS1vbmx5IikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNvbm5lY3Rpb24gaXMgd3JpdGUtb25seSIpCiAKICAgICBkZWYgX2NoZWNrX3dyaXRhYmxlKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5fd3JpdGFibGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjb25uZWN0aW9uIGlzIHJlYWQtb25seSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjb25uZWN0aW9uIGlzIHJlYWQtb25seSIpCiAKICAgICBkZWYgX2JhZF9tZXNzYWdlX2xlbmd0aChzZWxmKToKICAgICAgICAgaWYgc2VsZi5fd3JpdGFibGU6CiAgICAgICAgICAgICBzZWxmLl9yZWFkYWJsZSA9IEZhbHNlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgcmFpc2UgSU9FcnJvcigiYmFkIG1lc3NhZ2UgbGVuZ3RoIikKKyAgICAgICAgcmFpc2UgT1NFcnJvcigiYmFkIG1lc3NhZ2UgbGVuZ3RoIikKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBjbG9zZWQoc2VsZik6CkBAIC0yMDIsOSArMjA0LDcgQEAKICAgICAgICAgIiIiU2VuZCBhIChwaWNrbGFibGUpIG9iamVjdCIiIgogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBzZWxmLl9jaGVja193cml0YWJsZSgpCi0gICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQotICAgICAgICBGb3JraW5nUGlja2xlcihidWYsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKS5kdW1wKG9iaikKLSAgICAgICAgc2VsZi5fc2VuZF9ieXRlcyhidWYuZ2V0YnVmZmVyKCkpCisgICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMoRm9ya2luZ1BpY2tsZXIuZHVtcHMob2JqKSkKIAogICAgIGRlZiByZWN2X2J5dGVzKHNlbGYsIG1heGxlbmd0aD1Ob25lKToKICAgICAgICAgIiIiCkBAIC0yNDksNyArMjQ5LDcgQEAKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgc2VsZi5fY2hlY2tfcmVhZGFibGUoKQogICAgICAgICBidWYgPSBzZWxmLl9yZWN2X2J5dGVzKCkKLSAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhidWYuZ2V0YnVmZmVyKCkpCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhidWYuZ2V0YnVmZmVyKCkpCiAKICAgICBkZWYgcG9sbChzZWxmLCB0aW1lb3V0PTAuMCk6CiAgICAgICAgICIiIldoZXRoZXIgdGhlcmUgaXMgYW55IGlucHV0IGF2YWlsYWJsZSB0byBiZSByZWFkIiIiCkBAIC0zMTcsNyArMzE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZgogICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBlcnIgPT0gX3dpbmFwaS5FUlJPUl9NT1JFX0RBVEE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9tb3JlX2RhdGEob3YsIG1heHNpemUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yID09IF93aW5hcGkuRVJST1JfQlJPS0VOX1BJUEU6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMzg5LDcgKzM4OSw3IEBACiAgICAgICAgICAgICAgICAgaWYgcmVtYWluaW5nID09IHNpemU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiZ290IGVuZCBvZiBmaWxlIGR1cmluZyBtZXNzYWdlIikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZ290IGVuZCBvZiBmaWxlIGR1cmluZyBtZXNzYWdlIikKICAgICAgICAgICAgIGJ1Zi53cml0ZShjaHVuaykKICAgICAgICAgICAgIHJlbWFpbmluZyAtPSBuCiAgICAgICAgIHJldHVybiBidWYKQEAgLTQ1OSw3ICs0NTksNyBAQAogICAgICAgICBSZXR1cm5zIGEgYENvbm5lY3Rpb25gIG9iamVjdC4KICAgICAgICAgJycnCiAgICAgICAgIGlmIHNlbGYuX2xpc3RlbmVyIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdsaXN0ZW5lciBpcyBjbG9zZWQnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignbGlzdGVuZXIgaXMgY2xvc2VkJykKICAgICAgICAgYyA9IHNlbGYuX2xpc3RlbmVyLmFjY2VwdCgpCiAgICAgICAgIGlmIHNlbGYuX2F1dGhrZXk6CiAgICAgICAgICAgICBkZWxpdmVyX2NoYWxsZW5nZShjLCBzZWxmLl9hdXRoa2V5KQpAQCAtNTQ1LDcgKzU0NSw5IEBACiAgICAgICAgICAgICBfd2luYXBpLkZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFLAogICAgICAgICAgICAgX3dpbmFwaS5QSVBFX1RZUEVfTUVTU0FHRSB8IF93aW5hcGkuUElQRV9SRUFETU9ERV9NRVNTQUdFIHwKICAgICAgICAgICAgIF93aW5hcGkuUElQRV9XQUlULAotICAgICAgICAgICAgMSwgb2JzaXplLCBpYnNpemUsIF93aW5hcGkuTk1QV0FJVF9XQUlUX0ZPUkVWRVIsIF93aW5hcGkuTlVMTAorICAgICAgICAgICAgMSwgb2JzaXplLCBpYnNpemUsIF93aW5hcGkuTk1QV0FJVF9XQUlUX0ZPUkVWRVIsCisgICAgICAgICAgICAjIGRlZmF1bHQgc2VjdXJpdHkgZGVzY3JpcHRvcjogdGhlIGhhbmRsZSBjYW5ub3QgYmUgaW5oZXJpdGVkCisgICAgICAgICAgICBfd2luYXBpLk5VTEwKICAgICAgICAgICAgICkKICAgICAgICAgaDIgPSBfd2luYXBpLkNyZWF0ZUZpbGUoCiAgICAgICAgICAgICBhZGRyZXNzLCBhY2Nlc3MsIDAsIF93aW5hcGkuTlVMTCwgX3dpbmFwaS5PUEVOX0VYSVNUSU5HLApAQCAtNTkwLDcgKzU5Miw3IEBACiAgICAgICAgIHNlbGYuX2xhc3RfYWNjZXB0ZWQgPSBOb25lCiAKICAgICAgICAgaWYgZmFtaWx5ID09ICdBRl9VTklYJzoKLSAgICAgICAgICAgIHNlbGYuX3VubGluayA9IEZpbmFsaXplKAorICAgICAgICAgICAgc2VsZi5fdW5saW5rID0gdXRpbC5GaW5hbGl6ZSgKICAgICAgICAgICAgICAgICBzZWxmLCBvcy51bmxpbmssIGFyZ3M9KGFkZHJlc3MsKSwgZXhpdHByaW9yaXR5PTAKICAgICAgICAgICAgICAgICApCiAgICAgICAgIGVsc2U6CkBAIC02MzgsOCArNjQwLDggQEAKICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9xdWV1ZSA9IFtzZWxmLl9uZXdfaGFuZGxlKGZpcnN0PVRydWUpXQogCiAgICAgICAgICAgICBzZWxmLl9sYXN0X2FjY2VwdGVkID0gTm9uZQotICAgICAgICAgICAgc3ViX2RlYnVnKCdsaXN0ZW5lciBjcmVhdGVkIHdpdGggYWRkcmVzcz0lcicsIHNlbGYuX2FkZHJlc3MpCi0gICAgICAgICAgICBzZWxmLmNsb3NlID0gRmluYWxpemUoCisgICAgICAgICAgICB1dGlsLnN1Yl9kZWJ1ZygnbGlzdGVuZXIgY3JlYXRlZCB3aXRoIGFkZHJlc3M9JXInLCBzZWxmLl9hZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5jbG9zZSA9IHV0aWwuRmluYWxpemUoCiAgICAgICAgICAgICAgICAgc2VsZiwgUGlwZUxpc3RlbmVyLl9maW5hbGl6ZV9waXBlX2xpc3RlbmVyLAogICAgICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX2hhbmRsZV9xdWV1ZSwgc2VsZi5fYWRkcmVzcyksIGV4aXRwcmlvcml0eT0wCiAgICAgICAgICAgICAgICAgKQpAQCAtNjgxLDcgKzY4Myw3IEBACiAKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgX2ZpbmFsaXplX3BpcGVfbGlzdGVuZXIocXVldWUsIGFkZHJlc3MpOgotICAgICAgICAgICAgc3ViX2RlYnVnKCdjbG9zaW5nIGxpc3RlbmVyIHdpdGggYWRkcmVzcz0lcicsIGFkZHJlc3MpCisgICAgICAgICAgICB1dGlsLnN1Yl9kZWJ1ZygnY2xvc2luZyBsaXN0ZW5lciB3aXRoIGFkZHJlc3M9JXInLCBhZGRyZXNzKQogICAgICAgICAgICAgZm9yIGhhbmRsZSBpbiBxdWV1ZToKICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGhhbmRsZSkKIApAQCAtNjk4LDcgKzcwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDAsIF93aW5hcGkuTlVMTCwgX3dpbmFwaS5PUEVOX0VYSVNUSU5HLAogICAgICAgICAgICAgICAgICAgICBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVELCBfd2luYXBpLk5VTEwKICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yIG5vdCBpbiAoX3dpbmFwaS5FUlJPUl9TRU1fVElNRU9VVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5FUlJPUl9QSVBFX0JVU1kpIG9yIF9jaGVja190aW1lb3V0KHQpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQpAQCAtNzI3LDcgKzcyOSw3IEBACiAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYXV0aGtleSwgYnl0ZXMpCiAgICAgbWVzc2FnZSA9IG9zLnVyYW5kb20oTUVTU0FHRV9MRU5HVEgpCiAgICAgY29ubmVjdGlvbi5zZW5kX2J5dGVzKENIQUxMRU5HRSArIG1lc3NhZ2UpCi0gICAgZGlnZXN0ID0gaG1hYy5uZXcoYXV0aGtleSwgbWVzc2FnZSkuZGlnZXN0KCkKKyAgICBkaWdlc3QgPSBobWFjLm5ldyhhdXRoa2V5LCBtZXNzYWdlLCAnbWQ1JykuZGlnZXN0KCkKICAgICByZXNwb25zZSA9IGNvbm5lY3Rpb24ucmVjdl9ieXRlcygyNTYpICAgICAgICAjIHJlamVjdCBsYXJnZSBtZXNzYWdlCiAgICAgaWYgcmVzcG9uc2UgPT0gZGlnZXN0OgogICAgICAgICBjb25uZWN0aW9uLnNlbmRfYnl0ZXMoV0VMQ09NRSkKQEAgLTc0MSw3ICs3NDMsNyBAQAogICAgIG1lc3NhZ2UgPSBjb25uZWN0aW9uLnJlY3ZfYnl0ZXMoMjU2KSAgICAgICAgICMgcmVqZWN0IGxhcmdlIG1lc3NhZ2UKICAgICBhc3NlcnQgbWVzc2FnZVs6bGVuKENIQUxMRU5HRSldID09IENIQUxMRU5HRSwgJ21lc3NhZ2UgPSAlcicgJSBtZXNzYWdlCiAgICAgbWVzc2FnZSA9IG1lc3NhZ2VbbGVuKENIQUxMRU5HRSk6XQotICAgIGRpZ2VzdCA9IGhtYWMubmV3KGF1dGhrZXksIG1lc3NhZ2UpLmRpZ2VzdCgpCisgICAgZGlnZXN0ID0gaG1hYy5uZXcoYXV0aGtleSwgbWVzc2FnZSwgJ21kNScpLmRpZ2VzdCgpCiAgICAgY29ubmVjdGlvbi5zZW5kX2J5dGVzKGRpZ2VzdCkKICAgICByZXNwb25zZSA9IGNvbm5lY3Rpb24ucmVjdl9ieXRlcygyNTYpICAgICAgICAjIHJlamVjdCBsYXJnZSBtZXNzYWdlCiAgICAgaWYgcmVzcG9uc2UgIT0gV0VMQ09NRToKQEAgLTg4NCwyOCArODg2LDE1IEBACiAKIGVsc2U6CiAKLSAgICBpZiBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKToKLSAgICAgICAgZGVmIF9wb2xsKGZkcywgdGltZW91dCk6Ci0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBpbnQodGltZW91dCAqIDEwMDApICAjIHRpbWVvdXQgaXMgaW4gbWlsbGlzZWNvbmRzCi0gICAgICAgICAgICBmZF9tYXAgPSB7fQotICAgICAgICAgICAgcG9sbHN0ZXIgPSBzZWxlY3QucG9sbCgpCi0gICAgICAgICAgICBmb3IgZmQgaW4gZmRzOgotICAgICAgICAgICAgICAgIHBvbGxzdGVyLnJlZ2lzdGVyKGZkLCBzZWxlY3QuUE9MTElOKQotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZmQsICdmaWxlbm8nKToKLSAgICAgICAgICAgICAgICAgICAgZmRfbWFwW2ZkLmZpbGVubygpXSA9IGZkCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZmRfbWFwW2ZkXSA9IGZkCi0gICAgICAgICAgICBscyA9IFtdCi0gICAgICAgICAgICBmb3IgZmQsIGV2ZW50IGluIHBvbGxzdGVyLnBvbGwodGltZW91dCk6Ci0gICAgICAgICAgICAgICAgaWYgZXZlbnQgJiBzZWxlY3QuUE9MTE5WQUw6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgZmlsZSBkZXNjcmlwdG9yICVpJyAlIGZkKQotICAgICAgICAgICAgICAgIGxzLmFwcGVuZChmZF9tYXBbZmRdKQotICAgICAgICAgICAgcmV0dXJuIGxzCi0gICAgZWxzZToKLSAgICAgICAgZGVmIF9wb2xsKGZkcywgdGltZW91dCk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZWN0LnNlbGVjdChmZHMsIFtdLCBbXSwgdGltZW91dClbMF0KKyAgICBpbXBvcnQgc2VsZWN0b3JzCiAKKyAgICAjIHBvbGwvc2VsZWN0IGhhdmUgdGhlIGFkdmFudGFnZSBvZiBub3QgcmVxdWlyaW5nIGFueSBleHRyYSBmaWxlCisgICAgIyBkZXNjcmlwdG9yLCBjb250cmFyaWx5IHRvIGVwb2xsL2txdWV1ZSAoYWxzbywgdGhleSByZXF1aXJlIGEgc2luZ2xlCisgICAgIyBzeXNjYWxsKS4KKyAgICBpZiBoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpOgorICAgICAgICBfV2FpdFNlbGVjdG9yID0gc2VsZWN0b3JzLlBvbGxTZWxlY3RvcgorICAgIGVsc2U6CisgICAgICAgIF9XYWl0U2VsZWN0b3IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IKIAogICAgIGRlZiB3YWl0KG9iamVjdF9saXN0LCB0aW1lb3V0PU5vbmUpOgogICAgICAgICAnJycKQEAgLTkxMywzNCArOTAyLDU0IEBACiAKICAgICAgICAgUmV0dXJucyBsaXN0IG9mIHRob3NlIG9iamVjdHMgaW4gb2JqZWN0X2xpc3Qgd2hpY2ggYXJlIHJlYWR5L3JlYWRhYmxlLgogICAgICAgICAnJycKLSAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGlmIHRpbWVvdXQgPD0gMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3BvbGwob2JqZWN0X2xpc3QsIDApCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0Ci0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9wb2xsKG9iamVjdF9saXN0LCB0aW1lb3V0KQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICB3aXRoIF9XYWl0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgIGZvciBvYmogaW4gb2JqZWN0X2xpc3Q6CisgICAgICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIob2JqLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKwogICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CisKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcmVhZHkgPSBzZWxlY3Rvci5zZWxlY3QodGltZW91dCkKKyAgICAgICAgICAgICAgICBpZiByZWFkeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtrZXkuZmlsZW9iaiBmb3IgKGtleSwgZXZlbnRzKSBpbiByZWFkeV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkeQogCiAjCiAjIE1ha2UgY29ubmVjdGlvbiBhbmQgc29ja2V0IG9iamVjdHMgc2hhcmFibGUgaWYgcG9zc2libGUKICMKIAogaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KLSAgICBGb3JraW5nUGlja2xlci5yZWdpc3Rlcihzb2NrZXQuc29ja2V0LCByZWR1Y3Rpb24ucmVkdWNlX3NvY2tldCkKLSAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihDb25uZWN0aW9uLCByZWR1Y3Rpb24ucmVkdWNlX2Nvbm5lY3Rpb24pCi0gICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoUGlwZUNvbm5lY3Rpb24sIHJlZHVjdGlvbi5yZWR1Y2VfcGlwZV9jb25uZWN0aW9uKQorICAgIGRlZiByZWR1Y2VfY29ubmVjdGlvbihjb25uKToKKyAgICAgICAgaGFuZGxlID0gY29ubi5maWxlbm8oKQorICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoaGFuZGxlLCBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgorICAgICAgICAgICAgZnJvbSAuIGltcG9ydCByZXNvdXJjZV9zaGFyZXIKKyAgICAgICAgICAgIGRzID0gcmVzb3VyY2Vfc2hhcmVyLkR1cFNvY2tldChzKQorICAgICAgICAgICAgcmV0dXJuIHJlYnVpbGRfY29ubmVjdGlvbiwgKGRzLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQorICAgIGRlZiByZWJ1aWxkX2Nvbm5lY3Rpb24oZHMsIHJlYWRhYmxlLCB3cml0YWJsZSk6CisgICAgICAgIHNvY2sgPSBkcy5kZXRhY2goKQorICAgICAgICByZXR1cm4gQ29ubmVjdGlvbihzb2NrLmRldGFjaCgpLCByZWFkYWJsZSwgd3JpdGFibGUpCisgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjZV9jb25uZWN0aW9uKQorCisgICAgZGVmIHJlZHVjZV9waXBlX2Nvbm5lY3Rpb24oY29ubik6CisgICAgICAgIGFjY2VzcyA9ICgoX3dpbmFwaS5GSUxFX0dFTkVSSUNfUkVBRCBpZiBjb25uLnJlYWRhYmxlIGVsc2UgMCkgfAorICAgICAgICAgICAgICAgICAgKF93aW5hcGkuRklMRV9HRU5FUklDX1dSSVRFIGlmIGNvbm4ud3JpdGFibGUgZWxzZSAwKSkKKyAgICAgICAgZGggPSByZWR1Y3Rpb24uRHVwSGFuZGxlKGNvbm4uZmlsZW5vKCksIGFjY2VzcykKKyAgICAgICAgcmV0dXJuIHJlYnVpbGRfcGlwZV9jb25uZWN0aW9uLCAoZGgsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCisgICAgZGVmIHJlYnVpbGRfcGlwZV9jb25uZWN0aW9uKGRoLCByZWFkYWJsZSwgd3JpdGFibGUpOgorICAgICAgICBoYW5kbGUgPSBkaC5kZXRhY2goKQorICAgICAgICByZXR1cm4gUGlwZUNvbm5lY3Rpb24oaGFuZGxlLCByZWFkYWJsZSwgd3JpdGFibGUpCisgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKFBpcGVDb25uZWN0aW9uLCByZWR1Y2VfcGlwZV9jb25uZWN0aW9uKQorCiBlbHNlOgotICAgIHRyeToKLSAgICAgICAgZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICBGb3JraW5nUGlja2xlci5yZWdpc3Rlcihzb2NrZXQuc29ja2V0LCByZWR1Y3Rpb24ucmVkdWNlX3NvY2tldCkKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoQ29ubmVjdGlvbiwgcmVkdWN0aW9uLnJlZHVjZV9jb25uZWN0aW9uKQorICAgIGRlZiByZWR1Y2VfY29ubmVjdGlvbihjb25uKToKKyAgICAgICAgZGYgPSByZWR1Y3Rpb24uRHVwRmQoY29ubi5maWxlbm8oKSkKKyAgICAgICAgcmV0dXJuIHJlYnVpbGRfY29ubmVjdGlvbiwgKGRmLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQorICAgIGRlZiByZWJ1aWxkX2Nvbm5lY3Rpb24oZGYsIHJlYWRhYmxlLCB3cml0YWJsZSk6CisgICAgICAgIGZkID0gZGYuZGV0YWNoKCkKKyAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oZmQsIHJlYWRhYmxlLCB3cml0YWJsZSkKKyAgICByZWR1Y3Rpb24ucmVnaXN0ZXIoQ29ubmVjdGlvbiwgcmVkdWNlX2Nvbm5lY3Rpb24pCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2NvbnRleHQucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2NvbnRleHQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM4NDlmOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29udGV4dC5weQpAQCAtMCwwICsxLDM0OCBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCisKK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworCitfX2FsbF9fID0gW10gICAgICAgICAgICAjIHRoaW5ncyBhcmUgY29waWVkIGZyb20gaGVyZSB0byBfX2luaXRfXy5weQorCisjCisjIEV4Y2VwdGlvbnMKKyMKKworY2xhc3MgUHJvY2Vzc0Vycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBCdWZmZXJUb29TaG9ydChQcm9jZXNzRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgVGltZW91dEVycm9yKFByb2Nlc3NFcnJvcik6CisgICAgcGFzcworCitjbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yKFByb2Nlc3NFcnJvcik6CisgICAgcGFzcworCisjCisjIEJhc2UgdHlwZSBmb3IgY29udGV4dHMKKyMKKworY2xhc3MgQmFzZUNvbnRleHQob2JqZWN0KToKKworICAgIFByb2Nlc3NFcnJvciA9IFByb2Nlc3NFcnJvcgorICAgIEJ1ZmZlclRvb1Nob3J0ID0gQnVmZmVyVG9vU2hvcnQKKyAgICBUaW1lb3V0RXJyb3IgPSBUaW1lb3V0RXJyb3IKKyAgICBBdXRoZW50aWNhdGlvbkVycm9yID0gQXV0aGVudGljYXRpb25FcnJvcgorCisgICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKQorICAgIGFjdGl2ZV9jaGlsZHJlbiA9IHN0YXRpY21ldGhvZChwcm9jZXNzLmFjdGl2ZV9jaGlsZHJlbikKKworICAgIGRlZiBjcHVfY291bnQoc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0nJycKKyAgICAgICAgbnVtID0gb3MuY3B1X2NvdW50KCkKKyAgICAgICAgaWYgbnVtIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdjYW5ub3QgZGV0ZXJtaW5lIG51bWJlciBvZiBjcHVzJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBudW0KKworICAgIGRlZiBNYW5hZ2VyKHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGEgbWFuYWdlciBhc3NvY2lhdGVkIHdpdGggYSBydW5uaW5nIHNlcnZlciBwcm9jZXNzCisKKyAgICAgICAgVGhlIG1hbmFnZXJzIG1ldGhvZHMgc3VjaCBhcyBgTG9jaygpYCwgYENvbmRpdGlvbigpYCBhbmQgYFF1ZXVlKClgCisgICAgICAgIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBzaGFyZWQgb2JqZWN0cy4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLm1hbmFnZXJzIGltcG9ydCBTeW5jTWFuYWdlcgorICAgICAgICBtID0gU3luY01hbmFnZXIoY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKyAgICAgICAgbS5zdGFydCgpCisgICAgICAgIHJldHVybiBtCisKKyAgICBkZWYgUGlwZShzZWxmLCBkdXBsZXg9VHJ1ZSk6CisgICAgICAgICcnJ1JldHVybnMgdHdvIGNvbm5lY3Rpb24gb2JqZWN0IGNvbm5lY3RlZCBieSBhIHBpcGUnJycKKyAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQorICAgICAgICByZXR1cm4gUGlwZShkdXBsZXgpCisKKyAgICBkZWYgTG9jayhzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhIG5vbi1yZWN1cnNpdmUgbG9jayBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IExvY2sKKyAgICAgICAgcmV0dXJuIExvY2soY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBSTG9jayhzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhIHJlY3Vyc2l2ZSBsb2NrIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgUkxvY2sKKyAgICAgICAgcmV0dXJuIFJMb2NrKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQ29uZGl0aW9uKHNlbGYsIGxvY2s9Tm9uZSk6CisgICAgICAgICcnJ1JldHVybnMgYSBjb25kaXRpb24gb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBDb25kaXRpb24KKyAgICAgICAgcmV0dXJuIENvbmRpdGlvbihsb2NrLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFNlbWFwaG9yZShzZWxmLCB2YWx1ZT0xKToKKyAgICAgICAgJycnUmV0dXJucyBhIHNlbWFwaG9yZSBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IFNlbWFwaG9yZQorICAgICAgICByZXR1cm4gU2VtYXBob3JlKHZhbHVlLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEJvdW5kZWRTZW1hcGhvcmUoc2VsZiwgdmFsdWU9MSk6CisgICAgICAgICcnJ1JldHVybnMgYSBib3VuZGVkIHNlbWFwaG9yZSBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IEJvdW5kZWRTZW1hcGhvcmUKKyAgICAgICAgcmV0dXJuIEJvdW5kZWRTZW1hcGhvcmUodmFsdWUsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgRXZlbnQoc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYW4gZXZlbnQgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBFdmVudAorICAgICAgICByZXR1cm4gRXZlbnQoY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBCYXJyaWVyKHNlbGYsIHBhcnRpZXMsIGFjdGlvbj1Ob25lLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAnJydSZXR1cm5zIGEgYmFycmllciBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IEJhcnJpZXIKKyAgICAgICAgcmV0dXJuIEJhcnJpZXIocGFydGllcywgYWN0aW9uLCB0aW1lb3V0LCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFF1ZXVlKHNlbGYsIG1heHNpemU9MCk6CisgICAgICAgICcnJ1JldHVybnMgYSBxdWV1ZSBvYmplY3QnJycKKyAgICAgICAgZnJvbSAucXVldWVzIGltcG9ydCBRdWV1ZQorICAgICAgICByZXR1cm4gUXVldWUobWF4c2l6ZSwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBKb2luYWJsZVF1ZXVlKHNlbGYsIG1heHNpemU9MCk6CisgICAgICAgICcnJ1JldHVybnMgYSBxdWV1ZSBvYmplY3QnJycKKyAgICAgICAgZnJvbSAucXVldWVzIGltcG9ydCBKb2luYWJsZVF1ZXVlCisgICAgICAgIHJldHVybiBKb2luYWJsZVF1ZXVlKG1heHNpemUsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgU2ltcGxlUXVldWUoc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSBxdWV1ZSBvYmplY3QnJycKKyAgICAgICAgZnJvbSAucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZQorICAgICAgICByZXR1cm4gU2ltcGxlUXVldWUoY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBQb29sKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwKKyAgICAgICAgICAgICBtYXh0YXNrc3BlcmNoaWxkPU5vbmUpOgorICAgICAgICAnJydSZXR1cm5zIGEgcHJvY2VzcyBwb29sIG9iamVjdCcnJworICAgICAgICBmcm9tIC5wb29sIGltcG9ydCBQb29sCisgICAgICAgIHJldHVybiBQb29sKHByb2Nlc3NlcywgaW5pdGlhbGl6ZXIsIGluaXRhcmdzLCBtYXh0YXNrc3BlcmNoaWxkLAorICAgICAgICAgICAgICAgICAgICBjb250ZXh0PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBSYXdWYWx1ZShzZWxmLCB0eXBlY29kZV9vcl90eXBlLCAqYXJncyk6CisgICAgICAgICcnJ1JldHVybnMgYSBzaGFyZWQgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnNoYXJlZGN0eXBlcyBpbXBvcnQgUmF3VmFsdWUKKyAgICAgICAgcmV0dXJuIFJhd1ZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzKQorCisgICAgZGVmIFJhd0FycmF5KHNlbGYsIHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpOgorICAgICAgICAnJydSZXR1cm5zIGEgc2hhcmVkIGFycmF5JycnCisgICAgICAgIGZyb20gLnNoYXJlZGN0eXBlcyBpbXBvcnQgUmF3QXJyYXkKKyAgICAgICAgcmV0dXJuIFJhd0FycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpCisKKyAgICBkZWYgVmFsdWUoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSk6CisgICAgICAgICcnJ1JldHVybnMgYSBzeW5jaHJvbml6ZWQgc2hhcmVkIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zaGFyZWRjdHlwZXMgaW1wb3J0IFZhbHVlCisgICAgICAgIHJldHVybiBWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1sb2NrLAorICAgICAgICAgICAgICAgICAgICAgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBBcnJheShzZWxmLCB0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUpOgorICAgICAgICAnJydSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBhcnJheScnJworICAgICAgICBmcm9tIC5zaGFyZWRjdHlwZXMgaW1wb3J0IEFycmF5CisgICAgICAgIHJldHVybiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCBsb2NrPWxvY2ssCisgICAgICAgICAgICAgICAgICAgICBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIGZyZWV6ZV9zdXBwb3J0KHNlbGYpOgorICAgICAgICAnJydDaGVjayB3aGV0aGVyIHRoaXMgaXMgYSBmYWtlIGZvcmtlZCBwcm9jZXNzIGluIGEgZnJvemVuIGV4ZWN1dGFibGUuCisgICAgICAgIElmIHNvIHRoZW4gcnVuIGNvZGUgc3BlY2lmaWVkIGJ5IGNvbW1hbmRsaW5lIGFuZCBleGl0LgorICAgICAgICAnJycKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpOgorICAgICAgICAgICAgZnJvbSAuc3Bhd24gaW1wb3J0IGZyZWV6ZV9zdXBwb3J0CisgICAgICAgICAgICBmcmVlemVfc3VwcG9ydCgpCisKKyAgICBkZWYgZ2V0X2xvZ2dlcihzZWxmKToKKyAgICAgICAgJycnUmV0dXJuIHBhY2thZ2UgbG9nZ2VyIC0tIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QgdGhlbgorICAgICAgICBpdCBpcyBjcmVhdGVkLgorICAgICAgICAnJycKKyAgICAgICAgZnJvbSAudXRpbCBpbXBvcnQgZ2V0X2xvZ2dlcgorICAgICAgICByZXR1cm4gZ2V0X2xvZ2dlcigpCisKKyAgICBkZWYgbG9nX3RvX3N0ZGVycihzZWxmLCBsZXZlbD1Ob25lKToKKyAgICAgICAgJycnVHVybiBvbiBsb2dnaW5nIGFuZCBhZGQgYSBoYW5kbGVyIHdoaWNoIHByaW50cyB0byBzdGRlcnInJycKKyAgICAgICAgZnJvbSAudXRpbCBpbXBvcnQgbG9nX3RvX3N0ZGVycgorICAgICAgICByZXR1cm4gbG9nX3RvX3N0ZGVycihsZXZlbCkKKworICAgIGRlZiBhbGxvd19jb25uZWN0aW9uX3BpY2tsaW5nKHNlbGYpOgorICAgICAgICAnJydJbnN0YWxsIHN1cHBvcnQgZm9yIHNlbmRpbmcgY29ubmVjdGlvbnMgYW5kIHNvY2tldHMKKyAgICAgICAgYmV0d2VlbiBwcm9jZXNzZXMKKyAgICAgICAgJycnCisgICAgICAgICMgVGhpcyBpcyB1bmRvY3VtZW50ZWQuICBJbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBtdWx0aXByb2Nlc3NpbmcKKyAgICAgICAgIyBpdHMgb25seSBlZmZlY3Qgd2FzIHRvIG1ha2Ugc29ja2V0IG9iamVjdHMgaW5oZXJpdGFibGUgb24gV2luZG93cy4KKyAgICAgICAgZnJvbSAuIGltcG9ydCBjb25uZWN0aW9uCisKKyAgICBkZWYgc2V0X2V4ZWN1dGFibGUoc2VsZiwgZXhlY3V0YWJsZSk6CisgICAgICAgICcnJ1NldHMgdGhlIHBhdGggdG8gYSBweXRob24uZXhlIG9yIHB5dGhvbncuZXhlIGJpbmFyeSB1c2VkIHRvIHJ1bgorICAgICAgICBjaGlsZCBwcm9jZXNzZXMgaW5zdGVhZCBvZiBzeXMuZXhlY3V0YWJsZSB3aGVuIHVzaW5nIHRoZSAnc3Bhd24nCisgICAgICAgIHN0YXJ0IG1ldGhvZC4gIFVzZWZ1bCBmb3IgcGVvcGxlIGVtYmVkZGluZyBQeXRob24uCisgICAgICAgICcnJworICAgICAgICBmcm9tIC5zcGF3biBpbXBvcnQgc2V0X2V4ZWN1dGFibGUKKyAgICAgICAgc2V0X2V4ZWN1dGFibGUoZXhlY3V0YWJsZSkKKworICAgIGRlZiBzZXRfZm9ya3NlcnZlcl9wcmVsb2FkKHNlbGYsIG1vZHVsZV9uYW1lcyk6CisgICAgICAgICcnJ1NldCBsaXN0IG9mIG1vZHVsZSBuYW1lcyB0byB0cnkgdG8gbG9hZCBpbiBmb3Jrc2VydmVyIHByb2Nlc3MuCisgICAgICAgIFRoaXMgaXMgcmVhbGx5IGp1c3QgYSBoaW50LgorICAgICAgICAnJycKKyAgICAgICAgZnJvbSAuZm9ya3NlcnZlciBpbXBvcnQgc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZAorICAgICAgICBzZXRfZm9ya3NlcnZlcl9wcmVsb2FkKG1vZHVsZV9uYW1lcykKKworICAgIGRlZiBnZXRfY29udGV4dChzZWxmLCBtZXRob2Q9Tm9uZSk6CisgICAgICAgIGlmIG1ldGhvZCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3R4ID0gX2NvbmNyZXRlX2NvbnRleHRzW21ldGhvZF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY2Fubm90IGZpbmQgY29udGV4dCBmb3IgJXInICUgbWV0aG9kKQorICAgICAgICBjdHguX2NoZWNrX2F2YWlsYWJsZSgpCisgICAgICAgIHJldHVybiBjdHgKKworICAgIGRlZiBnZXRfc3RhcnRfbWV0aG9kKHNlbGYsIGFsbG93X25vbmU9RmFsc2UpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHNldF9zdGFydF9tZXRob2Qoc2VsZiwgbWV0aG9kPU5vbmUpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjYW5ub3Qgc2V0IHN0YXJ0IG1ldGhvZCBvZiBjb25jcmV0ZSBjb250ZXh0JykKKworICAgIGRlZiBfY2hlY2tfYXZhaWxhYmxlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyMKKyMgVHlwZSBvZiBkZWZhdWx0IGNvbnRleHQgLS0gdW5kZXJseWluZyBjb250ZXh0IGNhbiBiZSBzZXQgYXQgbW9zdCBvbmNlCisjCisKK2NsYXNzIFByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgX3N0YXJ0X21ldGhvZCA9IE5vbmUKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgIHJldHVybiBfZGVmYXVsdF9jb250ZXh0LmdldF9jb250ZXh0KCkuUHJvY2Vzcy5fUG9wZW4ocHJvY2Vzc19vYmopCisKK2NsYXNzIERlZmF1bHRDb250ZXh0KEJhc2VDb250ZXh0KToKKyAgICBQcm9jZXNzID0gUHJvY2VzcworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRleHQpOgorICAgICAgICBzZWxmLl9kZWZhdWx0X2NvbnRleHQgPSBjb250ZXh0CisgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gTm9uZQorCisgICAgZGVmIGdldF9jb250ZXh0KHNlbGYsIG1ldGhvZD1Ob25lKToKKyAgICAgICAgaWYgbWV0aG9kIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9hY3R1YWxfY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gc2VsZi5fZGVmYXVsdF9jb250ZXh0CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWN0dWFsX2NvbnRleHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9jb250ZXh0KG1ldGhvZCkKKworICAgIGRlZiBzZXRfc3RhcnRfbWV0aG9kKHNlbGYsIG1ldGhvZCwgZm9yY2U9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLl9hY3R1YWxfY29udGV4dCBpcyBub3QgTm9uZSBhbmQgbm90IGZvcmNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gc2V0JykKKyAgICAgICAgaWYgbWV0aG9kIGlzIE5vbmUgYW5kIGZvcmNlOgorICAgICAgICAgICAgc2VsZi5fYWN0dWFsX2NvbnRleHQgPSBOb25lCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fYWN0dWFsX2NvbnRleHQgPSBzZWxmLmdldF9jb250ZXh0KG1ldGhvZCkKKworICAgIGRlZiBnZXRfc3RhcnRfbWV0aG9kKHNlbGYsIGFsbG93X25vbmU9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLl9hY3R1YWxfY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgaWYgYWxsb3dfbm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgc2VsZi5fYWN0dWFsX2NvbnRleHQgPSBzZWxmLl9kZWZhdWx0X2NvbnRleHQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FjdHVhbF9jb250ZXh0Ll9uYW1lCisKKyAgICBkZWYgZ2V0X2FsbF9zdGFydF9tZXRob2RzKHNlbGYpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHJldHVybiBbJ3NwYXduJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCisgICAgICAgICAgICBpZiByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydmb3JrJywgJ3NwYXduJywgJ2ZvcmtzZXJ2ZXInXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydmb3JrJywgJ3NwYXduJ10KKworRGVmYXVsdENvbnRleHQuX19hbGxfXyA9IGxpc3QoeCBmb3IgeCBpbiBkaXIoRGVmYXVsdENvbnRleHQpIGlmIHhbMF0gIT0gJ18nKQorCisjCisjIENvbnRleHQgdHlwZXMgZm9yIGZpeGVkIHN0YXJ0IG1ldGhvZAorIworCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKworICAgIGNsYXNzIEZvcmtQcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgICAgICBfc3RhcnRfbWV0aG9kID0gJ2ZvcmsnCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgICAgICBmcm9tIC5wb3Blbl9mb3JrIGltcG9ydCBQb3BlbgorICAgICAgICAgICAgcmV0dXJuIFBvcGVuKHByb2Nlc3Nfb2JqKQorCisgICAgY2xhc3MgU3Bhd25Qcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgICAgICBfc3RhcnRfbWV0aG9kID0gJ3NwYXduJworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICAgICAgZnJvbSAucG9wZW5fc3Bhd25fcG9zaXggaW1wb3J0IFBvcGVuCisgICAgICAgICAgICByZXR1cm4gUG9wZW4ocHJvY2Vzc19vYmopCisKKyAgICBjbGFzcyBGb3JrU2VydmVyUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICAgICAgX3N0YXJ0X21ldGhvZCA9ICdmb3Jrc2VydmVyJworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICAgICAgZnJvbSAucG9wZW5fZm9ya3NlcnZlciBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIEZvcmtDb250ZXh0KEJhc2VDb250ZXh0KToKKyAgICAgICAgX25hbWUgPSAnZm9yaycKKyAgICAgICAgUHJvY2VzcyA9IEZvcmtQcm9jZXNzCisKKyAgICBjbGFzcyBTcGF3bkNvbnRleHQoQmFzZUNvbnRleHQpOgorICAgICAgICBfbmFtZSA9ICdzcGF3bicKKyAgICAgICAgUHJvY2VzcyA9IFNwYXduUHJvY2VzcworCisgICAgY2xhc3MgRm9ya1NlcnZlckNvbnRleHQoQmFzZUNvbnRleHQpOgorICAgICAgICBfbmFtZSA9ICdmb3Jrc2VydmVyJworICAgICAgICBQcm9jZXNzID0gRm9ya1NlcnZlclByb2Nlc3MKKyAgICAgICAgZGVmIF9jaGVja19hdmFpbGFibGUoc2VsZik6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorICAgICAgICAgICAgaWYgbm90IHJlZHVjdGlvbi5IQVZFX1NFTkRfSEFORExFOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ZvcmtzZXJ2ZXIgc3RhcnQgbWV0aG9kIG5vdCBhdmFpbGFibGUnKQorCisgICAgX2NvbmNyZXRlX2NvbnRleHRzID0geworICAgICAgICAnZm9yayc6IEZvcmtDb250ZXh0KCksCisgICAgICAgICdzcGF3bic6IFNwYXduQ29udGV4dCgpLAorICAgICAgICAnZm9ya3NlcnZlcic6IEZvcmtTZXJ2ZXJDb250ZXh0KCksCisgICAgfQorICAgIF9kZWZhdWx0X2NvbnRleHQgPSBEZWZhdWx0Q29udGV4dChfY29uY3JldGVfY29udGV4dHNbJ2ZvcmsnXSkKKworZWxzZToKKworICAgIGNsYXNzIFNwYXduUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICAgICAgX3N0YXJ0X21ldGhvZCA9ICdzcGF3bicKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX3NwYXduX3dpbjMyIGltcG9ydCBQb3BlbgorICAgICAgICAgICAgcmV0dXJuIFBvcGVuKHByb2Nlc3Nfb2JqKQorCisgICAgY2xhc3MgU3Bhd25Db250ZXh0KEJhc2VDb250ZXh0KToKKyAgICAgICAgX25hbWUgPSAnc3Bhd24nCisgICAgICAgIFByb2Nlc3MgPSBTcGF3blByb2Nlc3MKKworICAgIF9jb25jcmV0ZV9jb250ZXh0cyA9IHsKKyAgICAgICAgJ3NwYXduJzogU3Bhd25Db250ZXh0KCksCisgICAgfQorICAgIF9kZWZhdWx0X2NvbnRleHQgPSBEZWZhdWx0Q29udGV4dChfY29uY3JldGVfY29udGV4dHNbJ3NwYXduJ10pCisKKyMKKyMgRm9yY2UgdGhlIHN0YXJ0IG1ldGhvZAorIworCitkZWYgX2ZvcmNlX3N0YXJ0X21ldGhvZChtZXRob2QpOgorICAgIF9kZWZhdWx0X2NvbnRleHQuX2FjdHVhbF9jb250ZXh0ID0gX2NvbmNyZXRlX2NvbnRleHRzW21ldGhvZF0KKworIworIyBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHRocmVhZCBpcyBzcGF3bmluZyBhIGNoaWxkIHByb2Nlc3MKKyMKKworX3RscyA9IHRocmVhZGluZy5sb2NhbCgpCisKK2RlZiBnZXRfc3Bhd25pbmdfcG9wZW4oKToKKyAgICByZXR1cm4gZ2V0YXR0cihfdGxzLCAnc3Bhd25pbmdfcG9wZW4nLCBOb25lKQorCitkZWYgc2V0X3NwYXduaW5nX3BvcGVuKHBvcGVuKToKKyAgICBfdGxzLnNwYXduaW5nX3BvcGVuID0gcG9wZW4KKworZGVmIGFzc2VydF9zcGF3bmluZyhvYmopOgorICAgIGlmIGdldF9zcGF3bmluZ19wb3BlbigpIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICclcyBvYmplY3RzIHNob3VsZCBvbmx5IGJlIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcycKKyAgICAgICAgICAgICcgdGhyb3VnaCBpbmhlcml0YW5jZScgJSB0eXBlKG9iaikuX19uYW1lX18KKyAgICAgICAgICAgICkKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CmluZGV4IGUzMWZjNjEuLjk3ZjdhZjcgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQpAQCAtNCwzMiArNCw3IEBACiAjIG11bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQogIwogIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKLSMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0jIFNVQ0ggREFNQUdFLgorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKIF9fYWxsX18gPSBbCkBAIC00Nyw3ICsyMiw3IEBACiBpbXBvcnQgd2Vha3JlZgogaW1wb3J0IGFycmF5CiAKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmR1bW15LmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKK2Zyb20gLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKIGZyb20gdGhyZWFkaW5nIGltcG9ydCBMb2NrLCBSTG9jaywgU2VtYXBob3JlLCBCb3VuZGVkU2VtYXBob3JlCiBmcm9tIHRocmVhZGluZyBpbXBvcnQgRXZlbnQsIENvbmRpdGlvbiwgQmFycmllcgogZnJvbSBxdWV1ZSBpbXBvcnQgUXVldWUKQEAgLTEzOCw3ICsxMTMsNyBAQAogICAgIHBhc3MKIAogZGVmIFBvb2wocHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpKToKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5wb29sIGltcG9ydCBUaHJlYWRQb29sCisgICAgZnJvbSAuLnBvb2wgaW1wb3J0IFRocmVhZFBvb2wKICAgICByZXR1cm4gVGhyZWFkUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncykKIAogSm9pbmFibGVRdWV1ZSA9IFF1ZXVlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKaW5kZXggODc0ZWM4ZS4uNjk0ZWY5NiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQpAQCAtNCwzMiArNCw3IEBACiAjIG11bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CiAjCiAjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIwotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQotIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0jIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0jIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0jIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0jIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSMgU1VDSCBEQU1BR0UuCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAogX19hbGxfXyA9IFsgJ0NsaWVudCcsICdMaXN0ZW5lcicsICdQaXBlJyBdCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3OTMyMzcuLjAwMDAwMDAKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDc0ICswLDAgQEAKLSMKLSMgTW9kdWxlIGZvciBzdGFydGluZyBhIHByb2Nlc3Mgb2JqZWN0IHVzaW5nIG9zLmZvcmsoKSBvciBDcmVhdGVQcm9jZXNzKCkKLSMKLSMgbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCi0jCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHNpZ25hbAotaW1wb3J0IGVycm5vCi0KLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCB1dGlsLCBwcm9jZXNzCi0KLV9fYWxsX18gPSBbJ1BvcGVuJywgJ2Fzc2VydF9zcGF3bmluZycsICdkdXBsaWNhdGUnLCAnY2xvc2UnLCAnRm9ya2luZ1BpY2tsZXInXQotCi0jCi0jIENoZWNrIHRoYXQgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcwotIwotCi1kZWYgYXNzZXJ0X3NwYXduaW5nKHNlbGYpOgotICAgIGlmIG5vdCBQb3Blbi50aHJlYWRfaXNfc3Bhd25pbmcoKToKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgJyVzIG9iamVjdHMgc2hvdWxkIG9ubHkgYmUgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzJwotICAgICAgICAgICAgJyB0aHJvdWdoIGluaGVyaXRhbmNlJyAlIHR5cGUoc2VsZikuX19uYW1lX18KLSAgICAgICAgICAgICkKLQotIwotIyBUcnkgbWFraW5nIHNvbWUgY2FsbGFibGUgdHlwZXMgcGlja2xhYmxlCi0jCi0KLWZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVyCi1mcm9tIGNvcHlyZWcgaW1wb3J0IGRpc3BhdGNoX3RhYmxlCi0KLWNsYXNzIEZvcmtpbmdQaWNrbGVyKFBpY2tsZXIpOgotICAgIF9leHRyYV9yZWR1Y2VycyA9IHt9Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgUGlja2xlci5fX2luaXRfXyhzZWxmLCAqYXJncykKLSAgICAgICAgc2VsZi5kaXNwYXRjaF90YWJsZSA9IGRpc3BhdGNoX3RhYmxlLmNvcHkoKQotICAgICAgICBzZWxmLmRpc3BhdGNoX3RhYmxlLnVwZGF0ZShzZWxmLl9leHRyYV9yZWR1Y2VycykKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcmVnaXN0ZXIoY2xzLCB0eXBlLCByZWR1Y2UpOgotICAgICAgICBjbHMuX2V4dHJhX3JlZHVjZXJzW3R5cGVdID0gcmVkdWNlCi0KLWRlZiBfcmVkdWNlX21ldGhvZChtKToKLSAgICBpZiBtLl9fc2VsZl9fIGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX2NsYXNzX18sIG0uX19mdW5jX18uX19uYW1lX18pCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fc2VsZl9fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQotY2xhc3MgX0M6Ci0gICAgZGVmIGYoc2VsZik6Ci0gICAgICAgIHBhc3MKLUZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHR5cGUoX0MoKS5mKSwgX3JlZHVjZV9tZXRob2QpCi0KLQotZGVmIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IobSk6Ci0gICAgcmV0dXJuIGdldGF0dHIsIChtLl9fb2JqY2xhc3NfXywgbS5fX25hbWVfXykKLUZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHR5cGUobGlzdC5hcHBlbmQpLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQotRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIodHlwZShpbnQuX19hZGRfXyksIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IpCi0KLXRyeToKLSAgICBmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgZGVmIF9yZWR1Y2VfcGFydGlhbChwKToKLSAgICAgICAgcmV0dXJuIF9yZWJ1aWxkX3BhcnRpYWwsIChwLmZ1bmMsIHAuYXJncywgcC5rZXl3b3JkcyBvciB7fSkKLSAgICBkZWYgX3JlYnVpbGRfcGFydGlhbChmdW5jLCBhcmdzLCBrZXl3b3Jkcyk6Ci0gICAgICAgIHJldHVybiBwYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKQotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHBhcnRpYWwsIF9yZWR1Y2VfcGFydGlhbCkKLQotIwotIyBVbml4Ci0jCi0KLWlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgotICAgIGR1cGxpY2F0ZSA9IG9zLmR1cAotICAgIGNsb3NlID0gb3MuY2xvc2UKLQotICAgICMKLSAgICAjIFdlIGRlZmluZSBhIFBvcGVuIGNsYXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBmcm9tIHN1YnByb2Nlc3MsIGJ1dAotICAgICMgd2hvc2UgY29uc3RydWN0b3IgdGFrZXMgYSBwcm9jZXNzIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuCi0gICAgIwotCi0gICAgY2xhc3MgUG9wZW4ob2JqZWN0KToKLQotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IE5vbmUKLQotICAgICAgICAgICAgciwgdyA9IG9zLnBpcGUoKQotICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IHIKLQotICAgICAgICAgICAgc2VsZi5waWQgPSBvcy5mb3JrKCkKLSAgICAgICAgICAgIGlmIHNlbGYucGlkID09IDA6Ci0gICAgICAgICAgICAgICAgb3MuY2xvc2UocikKLSAgICAgICAgICAgICAgICBpZiAncmFuZG9tJyBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHJhbmRvbQotICAgICAgICAgICAgICAgICAgICByYW5kb20uc2VlZCgpCi0gICAgICAgICAgICAgICAgY29kZSA9IHByb2Nlc3Nfb2JqLl9ib290c3RyYXAoKQotICAgICAgICAgICAgICAgIG9zLl9leGl0KGNvZGUpCi0KLSAgICAgICAgICAgICMgYHdgIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIGNoaWxkIGV4aXRzLCBhdCB3aGljaCBwb2ludCBgcmAKLSAgICAgICAgICAgICMgd2lsbCBiZWNvbWUgcmVhZHkgZm9yIHJlYWRpbmcgKHVzaW5nIGUuZy4gc2VsZWN0KCkpLgotICAgICAgICAgICAgb3MuY2xvc2UodykKLSAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChyLCkpCi0KLSAgICAgICAgZGVmIHBvbGwoc2VsZiwgZmxhZz1vcy5XTk9IQU5HKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgc3RzID0gb3Mud2FpdHBpZChzZWxmLnBpZCwgZmxhZykKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgbm90IHlldCBjcmVhdGVkLiBTZWUgIzE3MzE3MTcKLSAgICAgICAgICAgICAgICAgICAgICAgICMgZS5lcnJubyA9PSBlcnJuby5FQ0hJTEQgPT0gMTAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKLSAgICAgICAgICAgICAgICAgICAgaWYgb3MuV0lGU0lHTkFMRUQoc3RzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IC1vcy5XVEVSTVNJRyhzdHMpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MuV0lGRVhJVEVEKHN0cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IG9zLldFWElUU1RBVFVTKHN0cykKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKLQotICAgICAgICBkZWYgd2FpdChzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgd2FpdAotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgd2FpdChbc2VsZi5zZW50aW5lbF0sIHRpbWVvdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGJsb2NrIGlmIHdhaXQoKSByZXR1cm5lZCBzdWNjZXNzZnVsbHkuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucG9sbChvcy5XTk9IQU5HIGlmIHRpbWVvdXQgPT0gMC4wIGVsc2UgMCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKLQotICAgICAgICBkZWYgdGVybWluYXRlKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBvcy5raWxsKHNlbGYucGlkLCBzaWduYWwuU0lHVEVSTSkKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi53YWl0KHRpbWVvdXQ9MC4xKSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiB0aHJlYWRfaXNfc3Bhd25pbmcoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0jCi0jIFdpbmRvd3MKLSMKLQotZWxzZToKLSAgICBpbXBvcnQgX3RocmVhZAotICAgIGltcG9ydCBtc3ZjcnQKLSAgICBpbXBvcnQgX3dpbmFwaQotCi0gICAgZnJvbSBwaWNrbGUgaW1wb3J0IGxvYWQsIEhJR0hFU1RfUFJPVE9DT0wKLQotICAgIGRlZiBkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSk6Ci0gICAgICAgIEZvcmtpbmdQaWNrbGVyKGZpbGUsIHByb3RvY29sKS5kdW1wKG9iaikKLQotICAgICMKLSAgICAjCi0gICAgIwotCi0gICAgVEVSTUlOQVRFID0gMHgxMDAwMAotICAgIFdJTkVYRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSkpCi0gICAgV0lOU0VSVklDRSA9IHN5cy5leGVjdXRhYmxlLmxvd2VyKCkuZW5kc3dpdGgoInB5dGhvbnNlcnZpY2UuZXhlIikKLQotICAgIGNsb3NlID0gX3dpbmFwaS5DbG9zZUhhbmRsZQotCi0gICAgIwotICAgICMgX3B5dGhvbl9leGUgaXMgdGhlIGFzc3VtZWQgcGF0aCB0byB0aGUgcHl0aG9uIGV4ZWN1dGFibGUuCi0gICAgIyBQZW9wbGUgZW1iZWRkaW5nIFB5dGhvbiB3YW50IHRvIG1vZGlmeSBpdC4KLSAgICAjCi0KLSAgICBpZiBXSU5TRVJWSUNFOgotICAgICAgICBfcHl0aG9uX2V4ZSA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdweXRob24uZXhlJykKLSAgICBlbHNlOgotICAgICAgICBfcHl0aG9uX2V4ZSA9IHN5cy5leGVjdXRhYmxlCi0KLSAgICBkZWYgc2V0X2V4ZWN1dGFibGUoZXhlKToKLSAgICAgICAgZ2xvYmFsIF9weXRob25fZXhlCi0gICAgICAgIF9weXRob25fZXhlID0gZXhlCi0KLSAgICAjCi0gICAgIwotICAgICMKLQotICAgIGRlZiBkdXBsaWNhdGUoaGFuZGxlLCB0YXJnZXRfcHJvY2Vzcz1Ob25lLCBpbmhlcml0YWJsZT1GYWxzZSk6Ci0gICAgICAgIGlmIHRhcmdldF9wcm9jZXNzIGlzIE5vbmU6Ci0gICAgICAgICAgICB0YXJnZXRfcHJvY2VzcyA9IF93aW5hcGkuR2V0Q3VycmVudFByb2Nlc3MoKQotICAgICAgICByZXR1cm4gX3dpbmFwaS5EdXBsaWNhdGVIYW5kbGUoCi0gICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3MsCi0gICAgICAgICAgICAwLCBpbmhlcml0YWJsZSwgX3dpbmFwaS5EVVBMSUNBVEVfU0FNRV9BQ0NFU1MKLSAgICAgICAgICAgICkKLQotICAgICMKLSAgICAjIFdlIGRlZmluZSBhIFBvcGVuIGNsYXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBmcm9tIHN1YnByb2Nlc3MsIGJ1dAotICAgICMgd2hvc2UgY29uc3RydWN0b3IgdGFrZXMgYSBwcm9jZXNzIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuCi0gICAgIwotCi0gICAgY2xhc3MgUG9wZW4ob2JqZWN0KToKLSAgICAgICAgJycnCi0gICAgICAgIFN0YXJ0IGEgc3VicHJvY2VzcyB0byBydW4gdGhlIGNvZGUgb2YgYSBwcm9jZXNzIG9iamVjdAotICAgICAgICAnJycKLSAgICAgICAgX3RscyA9IF90aHJlYWQuX2xvY2FsKCkKLQotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgotICAgICAgICAgICAgY21kID0gJyAnLmpvaW4oJyIlcyInICUgeCBmb3IgeCBpbiBnZXRfY29tbWFuZF9saW5lKCkpCi0gICAgICAgICAgICBwcmVwX2RhdGEgPSBnZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKLQotICAgICAgICAgICAgIyBjcmVhdGUgcGlwZSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGNoaWxkCi0gICAgICAgICAgICByZmQsIHdmZCA9IG9zLnBpcGUoKQotCi0gICAgICAgICAgICAjIGdldCBoYW5kbGUgZm9yIHJlYWQgZW5kIG9mIHRoZSBwaXBlIGFuZCBtYWtlIGl0IGluaGVyaXRhYmxlCi0gICAgICAgICAgICByaGFuZGxlID0gZHVwbGljYXRlKG1zdmNydC5nZXRfb3NmaGFuZGxlKHJmZCksIGluaGVyaXRhYmxlPVRydWUpCi0gICAgICAgICAgICBvcy5jbG9zZShyZmQpCi0KLSAgICAgICAgICAgIHdpdGggb3Blbih3ZmQsICd3YicsIGNsb3NlZmQ9VHJ1ZSkgYXMgdG9fY2hpbGQ6Ci0gICAgICAgICAgICAgICAgIyBzdGFydCBwcm9jZXNzCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBocCwgaHQsIHBpZCwgdGlkID0gX3dpbmFwaS5DcmVhdGVQcm9jZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgX3B5dGhvbl9leGUsIGNtZCArICgnICVzJyAlIHJoYW5kbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgMSwgMCwgTm9uZSwgTm9uZSwgTm9uZQotICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGh0KQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIGNsb3NlKHJoYW5kbGUpCi0KLSAgICAgICAgICAgICAgICAjIHNldCBhdHRyaWJ1dGVzIG9mIHNlbGYKLSAgICAgICAgICAgICAgICBzZWxmLnBpZCA9IHBpZAotICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGUgPSBocAotICAgICAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBpbnQoaHApCi0gICAgICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBfd2luYXBpLkNsb3NlSGFuZGxlLCAoc2VsZi5zZW50aW5lbCwpKQotCi0gICAgICAgICAgICAgICAgIyBzZW5kIGluZm9ybWF0aW9uIHRvIGNoaWxkCi0gICAgICAgICAgICAgICAgUG9wZW4uX3Rscy5wcm9jZXNzX2hhbmRsZSA9IGludChocCkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGR1bXAocHJlcF9kYXRhLCB0b19jaGlsZCwgSElHSEVTVF9QUk9UT0NPTCkKLSAgICAgICAgICAgICAgICAgICAgZHVtcChwcm9jZXNzX29iaiwgdG9fY2hpbGQsIEhJR0hFU1RfUFJPVE9DT0wpCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgZGVsIFBvcGVuLl90bHMucHJvY2Vzc19oYW5kbGUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiB0aHJlYWRfaXNfc3Bhd25pbmcoKToKLSAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKFBvcGVuLl90bHMsICdwcm9jZXNzX2hhbmRsZScsIE5vbmUpIGlzIG5vdCBOb25lCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZHVwbGljYXRlX2Zvcl9jaGlsZChoYW5kbGUpOgotICAgICAgICAgICAgcmV0dXJuIGR1cGxpY2F0ZShoYW5kbGUsIFBvcGVuLl90bHMucHJvY2Vzc19oYW5kbGUpCi0KLSAgICAgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgbXNlY3MgPSBfd2luYXBpLklORklOSVRFCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbXNlY3MgPSBtYXgoMCwgaW50KHRpbWVvdXQgKiAxMDAwICsgMC41KSkKLQotICAgICAgICAgICAgICAgIHJlcyA9IF93aW5hcGkuV2FpdEZvclNpbmdsZU9iamVjdChpbnQoc2VsZi5faGFuZGxlKSwgbXNlY3MpCi0gICAgICAgICAgICAgICAgaWYgcmVzID09IF93aW5hcGkuV0FJVF9PQkpFQ1RfMDoKLSAgICAgICAgICAgICAgICAgICAgY29kZSA9IF93aW5hcGkuR2V0RXhpdENvZGVQcm9jZXNzKHNlbGYuX2hhbmRsZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgY29kZSA9PSBURVJNSU5BVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gLXNpZ25hbC5TSUdURVJNCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IGNvZGUKLQotICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQotCi0gICAgICAgIGRlZiBwb2xsKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYud2FpdCh0aW1lb3V0PTApCi0KLSAgICAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5UZXJtaW5hdGVQcm9jZXNzKGludChzZWxmLl9oYW5kbGUpLCBURVJNSU5BVEUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTEuMCkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAjCi0gICAgIwotICAgICMKLQotICAgIGRlZiBpc19mb3JraW5nKGFyZ3YpOgotICAgICAgICAnJycKLSAgICAgICAgUmV0dXJuIHdoZXRoZXIgY29tbWFuZGxpbmUgaW5kaWNhdGVzIHdlIGFyZSBmb3JraW5nCi0gICAgICAgICcnJwotICAgICAgICBpZiBsZW4oYXJndikgPj0gMiBhbmQgYXJndlsxXSA9PSAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayc6Ci0gICAgICAgICAgICBhc3NlcnQgbGVuKGFyZ3YpID09IDMKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotCi0gICAgZGVmIGZyZWV6ZV9zdXBwb3J0KCk6Ci0gICAgICAgICcnJwotICAgICAgICBSdW4gY29kZSBmb3IgcHJvY2VzcyBvYmplY3QgaWYgdGhpcyBpbiBub3QgdGhlIG1haW4gcHJvY2VzcwotICAgICAgICAnJycKLSAgICAgICAgaWYgaXNfZm9ya2luZyhzeXMuYXJndik6Ci0gICAgICAgICAgICBtYWluKCkKLSAgICAgICAgICAgIHN5cy5leGl0KCkKLQotCi0gICAgZGVmIGdldF9jb21tYW5kX2xpbmUoKToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybnMgcHJlZml4IG9mIGNvbW1hbmQgbGluZSB1c2VkIGZvciBzcGF3bmluZyBhIGNoaWxkIHByb2Nlc3MKLSAgICAgICAgJycnCi0gICAgICAgIGlmIGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCcnJwotICAgICAgICAgICAgQXR0ZW1wdCB0byBzdGFydCBhIG5ldyBwcm9jZXNzIGJlZm9yZSB0aGUgY3VycmVudCBwcm9jZXNzCi0gICAgICAgICAgICBoYXMgZmluaXNoZWQgaXRzIGJvb3RzdHJhcHBpbmcgcGhhc2UuCi0KLSAgICAgICAgICAgIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB5b3UgYXJlIG9uIFdpbmRvd3MgYW5kIHlvdSBoYXZlCi0gICAgICAgICAgICBmb3Jnb3R0ZW4gdG8gdXNlIHRoZSBwcm9wZXIgaWRpb20gaW4gdGhlIG1haW4gbW9kdWxlOgotCi0gICAgICAgICAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAgICAgICAgICAgICAgICAgZnJlZXplX3N1cHBvcnQoKQotICAgICAgICAgICAgICAgICAgICAuLi4KLQotICAgICAgICAgICAgVGhlICJmcmVlemVfc3VwcG9ydCgpIiBsaW5lIGNhbiBiZSBvbWl0dGVkIGlmIHRoZSBwcm9ncmFtCi0gICAgICAgICAgICBpcyBub3QgZ29pbmcgdG8gYmUgZnJvemVuIHRvIHByb2R1Y2UgYSBXaW5kb3dzIGV4ZWN1dGFibGUuJycnKQotCi0gICAgICAgIGlmIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpOgotICAgICAgICAgICAgcmV0dXJuIFtzeXMuZXhlY3V0YWJsZSwgJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJvZyA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBtYWluOyBtYWluKCknCi0gICAgICAgICAgICBvcHRzID0gdXRpbC5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKLSAgICAgICAgICAgIHJldHVybiBbX3B5dGhvbl9leGVdICsgb3B0cyArIFsnLWMnLCBwcm9nLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCi0KLQotICAgIGRlZiBtYWluKCk6Ci0gICAgICAgICcnJwotICAgICAgICBSdW4gY29kZSBzcGVjaWZpZWQgYnkgZGF0YSByZWNlaXZlZCBvdmVyIHBpcGUKLSAgICAgICAgJycnCi0gICAgICAgIGFzc2VydCBpc19mb3JraW5nKHN5cy5hcmd2KQotCi0gICAgICAgIGhhbmRsZSA9IGludChzeXMuYXJndlstMV0pCi0gICAgICAgIGZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKGhhbmRsZSwgb3MuT19SRE9OTFkpCi0gICAgICAgIGZyb21fcGFyZW50ID0gb3MuZmRvcGVuKGZkLCAncmInKQotCi0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcgPSBUcnVlCi0gICAgICAgIHByZXBhcmF0aW9uX2RhdGEgPSBsb2FkKGZyb21fcGFyZW50KQotICAgICAgICBwcmVwYXJlKHByZXBhcmF0aW9uX2RhdGEpCi0gICAgICAgIHNlbGYgPSBsb2FkKGZyb21fcGFyZW50KQotICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nID0gRmFsc2UKLQotICAgICAgICBmcm9tX3BhcmVudC5jbG9zZSgpCi0KLSAgICAgICAgZXhpdGNvZGUgPSBzZWxmLl9ib290c3RyYXAoKQotICAgICAgICBzeXMuZXhpdChleGl0Y29kZSkKLQotCi0gICAgZGVmIGdldF9wcmVwYXJhdGlvbl9kYXRhKG5hbWUpOgotICAgICAgICAnJycKLSAgICAgICAgUmV0dXJuIGluZm8gYWJvdXQgcGFyZW50IG5lZWRlZCBieSBjaGlsZCB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAotICAgICAgICAnJycKLSAgICAgICAgZnJvbSAudXRpbCBpbXBvcnQgX2xvZ2dlciwgX2xvZ190b19zdGRlcnIKLQotICAgICAgICBkID0gZGljdCgKLSAgICAgICAgICAgIG5hbWU9bmFtZSwKLSAgICAgICAgICAgIHN5c19wYXRoPXN5cy5wYXRoLAotICAgICAgICAgICAgc3lzX2FyZ3Y9c3lzLmFyZ3YsCi0gICAgICAgICAgICBsb2dfdG9fc3RkZXJyPV9sb2dfdG9fc3RkZXJyLAotICAgICAgICAgICAgb3JpZ19kaXI9cHJvY2Vzcy5PUklHSU5BTF9ESVIsCi0gICAgICAgICAgICBhdXRoa2V5PXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSwKLSAgICAgICAgICAgICkKLQotICAgICAgICBpZiBfbG9nZ2VyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZFsnbG9nX2xldmVsJ10gPSBfbG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkKLQotICAgICAgICBpZiBub3QgV0lORVhFIGFuZCBub3QgV0lOU0VSVklDRToKLSAgICAgICAgICAgIG1haW5fcGF0aCA9IGdldGF0dHIoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10sICdfX2ZpbGVfXycsIE5vbmUpCi0gICAgICAgICAgICBpZiBub3QgbWFpbl9wYXRoIGFuZCBzeXMuYXJndlswXSBub3QgaW4gKCcnLCAnLWMnKToKLSAgICAgICAgICAgICAgICBtYWluX3BhdGggPSBzeXMuYXJndlswXQotICAgICAgICAgICAgaWYgbWFpbl9wYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKG1haW5fcGF0aCkgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuT1JJR0lOQUxfRElSIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBtYWluX3BhdGggPSBvcy5wYXRoLmpvaW4ocHJvY2Vzcy5PUklHSU5BTF9ESVIsIG1haW5fcGF0aCkKLSAgICAgICAgICAgICAgICBkWydtYWluX3BhdGgnXSA9IG9zLnBhdGgubm9ybXBhdGgobWFpbl9wYXRoKQotCi0gICAgICAgIHJldHVybiBkCi0KLSMKLSMgUHJlcGFyZSBjdXJyZW50IHByb2Nlc3MKLSMKLQotb2xkX21haW5fbW9kdWxlcyA9IFtdCi0KLWRlZiBwcmVwYXJlKGRhdGEpOgotICAgICcnJwotICAgIFRyeSB0byBnZXQgY3VycmVudCBwcm9jZXNzIHJlYWR5IHRvIHVucGlja2xlIHByb2Nlc3Mgb2JqZWN0Ci0gICAgJycnCi0gICAgb2xkX21haW5fbW9kdWxlcy5hcHBlbmQoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10pCi0KLSAgICBpZiAnbmFtZScgaW4gZGF0YToKLSAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lID0gZGF0YVsnbmFtZSddCi0KLSAgICBpZiAnYXV0aGtleScgaW4gZGF0YToKLSAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fYXV0aGtleSA9IGRhdGFbJ2F1dGhrZXknXQotCi0gICAgaWYgJ2xvZ190b19zdGRlcnInIGluIGRhdGEgYW5kIGRhdGFbJ2xvZ190b19zdGRlcnInXToKLSAgICAgICAgdXRpbC5sb2dfdG9fc3RkZXJyKCkKLQotICAgIGlmICdsb2dfbGV2ZWwnIGluIGRhdGE6Ci0gICAgICAgIHV0aWwuZ2V0X2xvZ2dlcigpLnNldExldmVsKGRhdGFbJ2xvZ19sZXZlbCddKQotCi0gICAgaWYgJ3N5c19wYXRoJyBpbiBkYXRhOgotICAgICAgICBzeXMucGF0aCA9IGRhdGFbJ3N5c19wYXRoJ10KLQotICAgIGlmICdzeXNfYXJndicgaW4gZGF0YToKLSAgICAgICAgc3lzLmFyZ3YgPSBkYXRhWydzeXNfYXJndiddCi0KLSAgICBpZiAnZGlyJyBpbiBkYXRhOgotICAgICAgICBvcy5jaGRpcihkYXRhWydkaXInXSkKLQotICAgIGlmICdvcmlnX2RpcicgaW4gZGF0YToKLSAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgPSBkYXRhWydvcmlnX2RpciddCi0KLSAgICBpZiAnbWFpbl9wYXRoJyBpbiBkYXRhOgotICAgICAgICAjIFhYWCAobmNvZ2hsYW4pOiBUaGUgZm9sbG93aW5nIGNvZGUgbWFrZXMgc2V2ZXJhbCBib2d1cwotICAgICAgICAjIGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gX19maWxlX18KLSAgICAgICAgIyBhbmQgYSBtb2R1bGUncyByZWFsIG5hbWUuIFNlZSBQRVAgMzAyIGFuZCBpc3N1ZSAjMTA4NDUKLSAgICAgICAgbWFpbl9wYXRoID0gZGF0YVsnbWFpbl9wYXRoJ10KLSAgICAgICAgbWFpbl9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG1haW5fcGF0aCkpWzBdCi0gICAgICAgIGlmIG1haW5fbmFtZSA9PSAnX19pbml0X18nOgotICAgICAgICAgICAgbWFpbl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKSkKLQotICAgICAgICBpZiBtYWluX25hbWUgPT0gJ19fbWFpbl9fJzoKLSAgICAgICAgICAgIG1haW5fbW9kdWxlID0gc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10KLSAgICAgICAgICAgIG1haW5fbW9kdWxlLl9fZmlsZV9fID0gbWFpbl9wYXRoCi0gICAgICAgIGVsaWYgbWFpbl9uYW1lICE9ICdpcHl0aG9uJzoKLSAgICAgICAgICAgICMgTWFpbiBtb2R1bGVzIG5vdCBhY3R1YWxseSBjYWxsZWQgX19tYWluX18ucHkgbWF5Ci0gICAgICAgICAgICAjIGNvbnRhaW4gYWRkaXRpb25hbCBjb2RlIHRoYXQgc2hvdWxkIHN0aWxsIGJlIGV4ZWN1dGVkCi0gICAgICAgICAgICBpbXBvcnQgaW1wCi0KLSAgICAgICAgICAgIGlmIG1haW5fcGF0aCBpcyBOb25lOgotICAgICAgICAgICAgICAgIGRpcnMgPSBOb25lCi0gICAgICAgICAgICBlbGlmIG9zLnBhdGguYmFzZW5hbWUobWFpbl9wYXRoKS5zdGFydHN3aXRoKCdfX2luaXRfXy5weScpOgotICAgICAgICAgICAgICAgIGRpcnMgPSBbb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShtYWluX3BhdGgpKV0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGlycyA9IFtvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKV0KLQotICAgICAgICAgICAgYXNzZXJ0IG1haW5fbmFtZSBub3QgaW4gc3lzLm1vZHVsZXMsIG1haW5fbmFtZQotICAgICAgICAgICAgZmlsZSwgcGF0aF9uYW1lLCBldGMgPSBpbXAuZmluZF9tb2R1bGUobWFpbl9uYW1lLCBkaXJzKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgV2Ugd291bGQgbGlrZSB0byBkbyAiaW1wLmxvYWRfbW9kdWxlKCdfX21haW5fXycsIC4uLikiCi0gICAgICAgICAgICAgICAgIyBoZXJlLiAgSG93ZXZlciwgdGhhdCB3b3VsZCBjYXVzZSAnaWYgX19uYW1lX18gPT0KLSAgICAgICAgICAgICAgICAjICJfX21haW5fXyInIGNsYXVzZXMgdG8gYmUgZXhlY3V0ZWQuCi0gICAgICAgICAgICAgICAgbWFpbl9tb2R1bGUgPSBpbXAubG9hZF9tb2R1bGUoCi0gICAgICAgICAgICAgICAgICAgICdfX3BhcmVudHNfbWFpbl9fJywgZmlsZSwgcGF0aF9uYW1lLCBldGMKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBpZiBmaWxlOgotICAgICAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKLQotICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10gPSBtYWluX21vZHVsZQotICAgICAgICAgICAgbWFpbl9tb2R1bGUuX19uYW1lX18gPSAnX19tYWluX18nCi0KLSAgICAgICAgICAgICMgVHJ5IHRvIG1ha2UgdGhlIHBvdGVudGlhbGx5IHBpY2tsYWJsZSBvYmplY3RzIGluCi0gICAgICAgICAgICAjIHN5cy5tb2R1bGVzWydfX21haW5fXyddIHJlYWxpemUgdGhleSBhcmUgaW4gdGhlIG1haW4KLSAgICAgICAgICAgICMgbW9kdWxlIC0tIHNvbWV3aGF0IHVnbHkuCi0gICAgICAgICAgICBmb3Igb2JqIGluIGxpc3QobWFpbl9tb2R1bGUuX19kaWN0X18udmFsdWVzKCkpOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaWYgb2JqLl9fbW9kdWxlX18gPT0gJ19fcGFyZW50c19tYWluX18nOgotICAgICAgICAgICAgICAgICAgICAgICAgb2JqLl9fbW9kdWxlX18gPSAnX19tYWluX18nCi0gICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9mb3Jrc2VydmVyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3Jrc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NzUxN2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtzZXJ2ZXIucHkKQEAgLTAsMCArMSwyNjcgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc2VsZWN0b3JzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCisKK2Zyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCBzZW1hcGhvcmVfdHJhY2tlcgorZnJvbSAuIGltcG9ydCBzcGF3bgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ2Vuc3VyZV9ydW5uaW5nJywgJ2dldF9pbmhlcml0ZWRfZmRzJywgJ2Nvbm5lY3RfdG9fbmV3X3Byb2Nlc3MnLAorICAgICAgICAgICAnc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZCddCisKKyMKKyMKKyMKKworTUFYRkRTX1RPX1NFTkQgPSAyNTYKK1VOU0lHTkVEX1NUUlVDVCA9IHN0cnVjdC5TdHJ1Y3QoJ1EnKSAgICAgIyBsYXJnZSBlbm91Z2ggZm9yIHBpZF90CisKKyMKKyMgRm9ya3NlcnZlciBjbGFzcworIworCitjbGFzcyBGb3JrU2VydmVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fZm9ya3NlcnZlcl9hbGl2ZV9mZCA9IE5vbmUKKyAgICAgICAgc2VsZi5faW5oZXJpdGVkX2ZkcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5fcHJlbG9hZF9tb2R1bGVzID0gWydfX21haW5fXyddCisKKyAgICBkZWYgc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChzZWxmLCBtb2R1bGVzX25hbWVzKToKKyAgICAgICAgJycnU2V0IGxpc3Qgb2YgbW9kdWxlIG5hbWVzIHRvIHRyeSB0byBsb2FkIGluIGZvcmtzZXJ2ZXIgcHJvY2Vzcy4nJycKKyAgICAgICAgaWYgbm90IGFsbCh0eXBlKG1vZCkgaXMgc3RyIGZvciBtb2QgaW4gc2VsZi5fcHJlbG9hZF9tb2R1bGVzKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignbW9kdWxlX25hbWVzIG11c3QgYmUgYSBsaXN0IG9mIHN0cmluZ3MnKQorICAgICAgICBzZWxmLl9wcmVsb2FkX21vZHVsZXMgPSBtb2R1bGVzX25hbWVzCisKKyAgICBkZWYgZ2V0X2luaGVyaXRlZF9mZHMoc2VsZik6CisgICAgICAgICcnJ1JldHVybiBsaXN0IG9mIGZkcyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgcHJvY2Vzcy4KKworICAgICAgICBUaGlzIHJldHVybnMgTm9uZSBpZiB0aGUgY3VycmVudCBwcm9jZXNzIHdhcyBub3Qgc3RhcnRlZCBieSBmb3JrCisgICAgICAgIHNlcnZlci4KKyAgICAgICAgJycnCisgICAgICAgIHJldHVybiBzZWxmLl9pbmhlcml0ZWRfZmRzCisKKyAgICBkZWYgY29ubmVjdF90b19uZXdfcHJvY2VzcyhzZWxmLCBmZHMpOgorICAgICAgICAnJydSZXF1ZXN0IGZvcmtzZXJ2ZXIgdG8gY3JlYXRlIGEgY2hpbGQgcHJvY2Vzcy4KKworICAgICAgICBSZXR1cm5zIGEgcGFpciBvZiBmZHMgKHN0YXR1c19yLCBkYXRhX3cpLiAgVGhlIGNhbGxpbmcgcHJvY2VzcyBjYW4gcmVhZAorICAgICAgICB0aGUgY2hpbGQgcHJvY2VzcydzIHBpZCBhbmQgKGV2ZW50dWFsbHkpIGl0cyByZXR1cm5jb2RlIGZyb20gc3RhdHVzX3IuCisgICAgICAgIFRoZSBjYWxsaW5nIHByb2Nlc3Mgc2hvdWxkIHdyaXRlIHRvIGRhdGFfdyB0aGUgcGlja2xlZCBwcmVwYXJhdGlvbiBhbmQKKyAgICAgICAgcHJvY2VzcyBkYXRhLgorICAgICAgICAnJycKKyAgICAgICAgc2VsZi5lbnN1cmVfcnVubmluZygpCisgICAgICAgIGlmIGxlbihmZHMpICsgNCA+PSBNQVhGRFNfVE9fU0VORDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3RvbyBtYW55IGZkcycpCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCkgYXMgY2xpZW50OgorICAgICAgICAgICAgY2xpZW50LmNvbm5lY3Qoc2VsZi5fZm9ya3NlcnZlcl9hZGRyZXNzKQorICAgICAgICAgICAgcGFyZW50X3IsIGNoaWxkX3cgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIGNoaWxkX3IsIHBhcmVudF93ID0gb3MucGlwZSgpCisgICAgICAgICAgICBhbGxmZHMgPSBbY2hpbGRfciwgY2hpbGRfdywgc2VsZi5fZm9ya3NlcnZlcl9hbGl2ZV9mZCwKKyAgICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVfdHJhY2tlci5nZXRmZCgpXQorICAgICAgICAgICAgYWxsZmRzICs9IGZkcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5zZW5kZmRzKGNsaWVudCwgYWxsZmRzKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnRfciwgcGFyZW50X3cKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShwYXJlbnRfcikKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShwYXJlbnRfdykKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShjaGlsZF9yKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGNoaWxkX3cpCisKKyAgICBkZWYgZW5zdXJlX3J1bm5pbmcoc2VsZik6CisgICAgICAgICcnJ01ha2Ugc3VyZSB0aGF0IGEgZm9yayBzZXJ2ZXIgaXMgcnVubmluZy4KKworICAgICAgICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgcHJvY2Vzcy4gIE5vdGUgdGhhdCB1c3VhbGx5IGEgY2hpbGQKKyAgICAgICAgcHJvY2VzcyB3aWxsIGp1c3QgcmV1c2UgdGhlIGZvcmtzZXJ2ZXIgc3RhcnRlZCBieSBpdHMgcGFyZW50LCBzbworICAgICAgICBlbnN1cmVfcnVubmluZygpIHdpbGwgZG8gbm90aGluZy4KKyAgICAgICAgJycnCisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIHNlbWFwaG9yZV90cmFja2VyLmVuc3VyZV9ydW5uaW5nKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGNtZCA9ICgnZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya3NlcnZlciBpbXBvcnQgbWFpbjsgJyArCisgICAgICAgICAgICAgICAgICAgJ21haW4oJWQsICVkLCAlciwgKiolciknKQorCisgICAgICAgICAgICBpZiBzZWxmLl9wcmVsb2FkX21vZHVsZXM6CisgICAgICAgICAgICAgICAgZGVzaXJlZF9rZXlzID0geydtYWluX3BhdGgnLCAnc3lzX3BhdGgnfQorICAgICAgICAgICAgICAgIGRhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YSgnaWdub3JlJykKKyAgICAgICAgICAgICAgICBkYXRhID0gZGljdCgoeCx5KSBmb3IgKHgseSkgaW4gZGF0YS5pdGVtcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeCBpbiBkZXNpcmVkX2tleXMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEgPSB7fQorCisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpIGFzIGxpc3RlbmVyOgorICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBjb25uZWN0aW9uLmFyYml0cmFyeV9hZGRyZXNzKCdBRl9VTklYJykKKyAgICAgICAgICAgICAgICBsaXN0ZW5lci5iaW5kKGFkZHJlc3MpCisgICAgICAgICAgICAgICAgb3MuY2htb2QoYWRkcmVzcywgMG82MDApCisgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuKDEwMCkKKworICAgICAgICAgICAgICAgICMgYWxsIGNsaWVudCBwcm9jZXNzZXMgb3duIHRoZSB3cml0ZSBlbmQgb2YgdGhlICJhbGl2ZSIgcGlwZTsKKyAgICAgICAgICAgICAgICAjIHdoZW4gdGhleSBhbGwgdGVybWluYXRlIHRoZSByZWFkIGVuZCBiZWNvbWVzIHJlYWR5LgorICAgICAgICAgICAgICAgIGFsaXZlX3IsIGFsaXZlX3cgPSBvcy5waXBlKCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZkc190b19wYXNzID0gW2xpc3RlbmVyLmZpbGVubygpLCBhbGl2ZV9yXQorICAgICAgICAgICAgICAgICAgICBjbWQgJT0gKGxpc3RlbmVyLmZpbGVubygpLCBhbGl2ZV9yLCBzZWxmLl9wcmVsb2FkX21vZHVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgZXhlID0gc3Bhd24uZ2V0X2V4ZWN1dGFibGUoKQorICAgICAgICAgICAgICAgICAgICBhcmdzID0gW2V4ZV0gKyB1dGlsLl9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQorICAgICAgICAgICAgICAgICAgICBhcmdzICs9IFsnLWMnLCBjbWRdCisgICAgICAgICAgICAgICAgICAgIHBpZCA9IHV0aWwuc3Bhd252X3Bhc3NmZHMoZXhlLCBhcmdzLCBmZHNfdG9fcGFzcykKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGFsaXZlX3cpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoYWxpdmVfcikKKyAgICAgICAgICAgICAgICBzZWxmLl9mb3Jrc2VydmVyX2FkZHJlc3MgPSBhZGRyZXNzCisgICAgICAgICAgICAgICAgc2VsZi5fZm9ya3NlcnZlcl9hbGl2ZV9mZCA9IGFsaXZlX3cKKworIworIworIworCitkZWYgbWFpbihsaXN0ZW5lcl9mZCwgYWxpdmVfciwgcHJlbG9hZCwgbWFpbl9wYXRoPU5vbmUsIHN5c19wYXRoPU5vbmUpOgorICAgICcnJ1J1biBmb3Jrc2VydmVyLicnJworICAgIGlmIHByZWxvYWQ6CisgICAgICAgIGlmICdfX21haW5fXycgaW4gcHJlbG9hZCBhbmQgbWFpbl9wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzcGF3bi5pbXBvcnRfbWFpbl9wYXRoKG1haW5fcGF0aCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZGVsIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcKKyAgICAgICAgZm9yIG1vZG5hbWUgaW4gcHJlbG9hZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBjbG9zZSBzeXMuc3RkaW4KKyAgICBpZiBzeXMuc3RkaW4gaXMgbm90IE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICBzeXMuc3RkaW4gPSBvcGVuKG9zLmRldm51bGwpCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAjIGlnbm9yaW5nIFNJR0NITEQgbWVhbnMgbm8gbmVlZCB0byByZWFwIHpvbWJpZSBwcm9jZXNzZXMKKyAgICBoYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQ0hMRCwgc2lnbmFsLlNJR19JR04pCisgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBmaWxlbm89bGlzdGVuZXJfZmQpIGFzIGxpc3RlbmVyLCBcCisgICAgICAgICBzZWxlY3RvcnMuRGVmYXVsdFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgIF9mb3Jrc2VydmVyLl9mb3Jrc2VydmVyX2FkZHJlc3MgPSBsaXN0ZW5lci5nZXRzb2NrbmFtZSgpCisKKyAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIobGlzdGVuZXIsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihhbGl2ZV9yLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHJmZHMgPSBba2V5LmZpbGVvYmogZm9yIChrZXksIGV2ZW50cykgaW4gc2VsZWN0b3Iuc2VsZWN0KCldCisgICAgICAgICAgICAgICAgICAgIGlmIHJmZHM6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgaWYgYWxpdmVfciBpbiByZmRzOgorICAgICAgICAgICAgICAgICAgICAjIEVPRiBiZWNhdXNlIG5vIG1vcmUgY2xpZW50IHByb2Nlc3NlcyBsZWZ0CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBvcy5yZWFkKGFsaXZlX3IsIDEpID09IGInJworICAgICAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGlzdGVuZXIgaW4gcmZkcworICAgICAgICAgICAgICAgIHdpdGggbGlzdGVuZXIuYWNjZXB0KClbMF0gYXMgczoKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IDEKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MuZm9yaygpID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlcnZlX29uZShzLCBsaXN0ZW5lciwgYWxpdmVfciwgaGFuZGxlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5fZXhpdChjb2RlKQorCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUNPTk5BQk9SVEVEOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCitkZWYgX3NlcnZlX29uZShzLCBsaXN0ZW5lciwgYWxpdmVfciwgaGFuZGxlcik6CisgICAgIyBjbG9zZSB1bm5lY2Vzc2FyeSBzdHVmZiBhbmQgcmVzZXQgU0lHQ0hMRCBoYW5kbGVyCisgICAgbGlzdGVuZXIuY2xvc2UoKQorICAgIG9zLmNsb3NlKGFsaXZlX3IpCisgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQ0hMRCwgaGFuZGxlcikKKworICAgICMgcmVjZWl2ZSBmZHMgZnJvbSBwYXJlbnQgcHJvY2VzcworICAgIGZkcyA9IHJlZHVjdGlvbi5yZWN2ZmRzKHMsIE1BWEZEU19UT19TRU5EICsgMSkKKyAgICBzLmNsb3NlKCkKKyAgICBhc3NlcnQgbGVuKGZkcykgPD0gTUFYRkRTX1RPX1NFTkQKKyAgICAoY2hpbGRfciwgY2hpbGRfdywgX2ZvcmtzZXJ2ZXIuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQsCisgICAgIHN0ZmQsICpfZm9ya3NlcnZlci5faW5oZXJpdGVkX2ZkcykgPSBmZHMKKyAgICBzZW1hcGhvcmVfdHJhY2tlci5fc2VtYXBob3JlX3RyYWNrZXIuX2ZkID0gc3RmZAorCisgICAgIyBzZW5kIHBpZCB0byBjbGllbnQgcHJvY2Vzc2VzCisgICAgd3JpdGVfdW5zaWduZWQoY2hpbGRfdywgb3MuZ2V0cGlkKCkpCisKKyAgICAjIHJlc2VlZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgIGlmICdyYW5kb20nIGluIHN5cy5tb2R1bGVzOgorICAgICAgICBpbXBvcnQgcmFuZG9tCisgICAgICAgIHJhbmRvbS5zZWVkKCkKKworICAgICMgcnVuIHByb2Nlc3Mgb2JqZWN0IHJlY2VpdmVkIG92ZXIgcGlwZQorICAgIGNvZGUgPSBzcGF3bi5fbWFpbihjaGlsZF9yKQorCisgICAgIyB3cml0ZSB0aGUgZXhpdCBjb2RlIHRvIHRoZSBwaXBlCisgICAgd3JpdGVfdW5zaWduZWQoY2hpbGRfdywgY29kZSkKKworIworIyBSZWFkIGFuZCB3cml0ZSB1bnNpZ25lZCBudW1iZXJzCisjCisKK2RlZiByZWFkX3Vuc2lnbmVkKGZkKToKKyAgICBkYXRhID0gYicnCisgICAgbGVuZ3RoID0gVU5TSUdORURfU1RSVUNULnNpemUKKyAgICB3aGlsZSBsZW4oZGF0YSkgPCBsZW5ndGg6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IG9zLnJlYWQoZmQsIGxlbmd0aCAtIGxlbihkYXRhKSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigndW5leHBlY3RlZCBFT0YnKQorICAgICAgICBkYXRhICs9IHMKKyAgICByZXR1cm4gVU5TSUdORURfU1RSVUNULnVucGFjayhkYXRhKVswXQorCitkZWYgd3JpdGVfdW5zaWduZWQoZmQsIG4pOgorICAgIG1zZyA9IFVOU0lHTkVEX1NUUlVDVC5wYWNrKG4pCisgICAgd2hpbGUgbXNnOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5ieXRlcyA9IG9zLndyaXRlKGZkLCBtc2cpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5ieXRlcyA9PSAwOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzaG91bGQgbm90IGdldCBoZXJlJykKKyAgICAgICAgbXNnID0gbXNnW25ieXRlczpdCisKKyMKKyMKKyMKKworX2ZvcmtzZXJ2ZXIgPSBGb3JrU2VydmVyKCkKK2Vuc3VyZV9ydW5uaW5nID0gX2ZvcmtzZXJ2ZXIuZW5zdXJlX3J1bm5pbmcKK2dldF9pbmhlcml0ZWRfZmRzID0gX2ZvcmtzZXJ2ZXIuZ2V0X2luaGVyaXRlZF9mZHMKK2Nvbm5lY3RfdG9fbmV3X3Byb2Nlc3MgPSBfZm9ya3NlcnZlci5jb25uZWN0X3RvX25ld19wcm9jZXNzCitzZXRfZm9ya3NlcnZlcl9wcmVsb2FkID0gX2ZvcmtzZXJ2ZXIuc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZApkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5CmluZGV4IGU2M2ZkYjguLjk4YmZkYzggMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkKQEAgLTgsMTUgKzgsMTcgQEAKICMKIAogaW1wb3J0IGJpc2VjdAoraW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IG1tYXAKIGltcG9ydCBvcwogaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgaXRlcnRvb2xzCi0KIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBGaW5hbGl6ZSwgaW5mbwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgYXNzZXJ0X3NwYXduaW5nCisKK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAogCiBfX2FsbF9fID0gWydCdWZmZXJXcmFwcGVyJ10KIApAQCAtMzAsMTcgKzMyLDI1IEBACiAKICAgICBjbGFzcyBBcmVuYShvYmplY3QpOgogCi0gICAgICAgIF9jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KCkKKyAgICAgICAgX3JhbmQgPSB0ZW1wZmlsZS5fUmFuZG9tTmFtZVNlcXVlbmNlKCkKIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2l6ZSk6CiAgICAgICAgICAgICBzZWxmLnNpemUgPSBzaXplCi0gICAgICAgICAgICBzZWxmLm5hbWUgPSAncHltLSVkLSVkJyAlIChvcy5nZXRwaWQoKSwgbmV4dChBcmVuYS5fY291bnRlcikpCi0gICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG1tYXAubW1hcCgtMSwgc2VsZi5zaXplLCB0YWduYW1lPXNlbGYubmFtZSkKLSAgICAgICAgICAgIGFzc2VydCBfd2luYXBpLkdldExhc3RFcnJvcigpID09IDAsICd0YWduYW1lIGFscmVhZHkgaW4gdXNlJworICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgICAgICBuYW1lID0gJ3B5bS0lZC0lcycgJSAob3MuZ2V0cGlkKCksIG5leHQoc2VsZi5fcmFuZCkpCisgICAgICAgICAgICAgICAgYnVmID0gbW1hcC5tbWFwKC0xLCBzaXplLCB0YWduYW1lPW5hbWUpCisgICAgICAgICAgICAgICAgaWYgX3dpbmFwaS5HZXRMYXN0RXJyb3IoKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICMgV2UgaGF2ZSByZW9wZW5lZCBhIHByZWV4aXN0aW5nIG1tYXAuCisgICAgICAgICAgICAgICAgYnVmLmNsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRmlsZUV4aXN0c0Vycm9yKCdDYW5ub3QgZmluZCBuYW1lIGZvciBuZXcgbW1hcCcpCisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IGJ1ZgogICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSAoc2VsZi5zaXplLCBzZWxmLm5hbWUpCiAKICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZQogCiAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgpAQCAtNTIsMTAgKzYyLDI4IEBACiAKICAgICBjbGFzcyBBcmVuYShvYmplY3QpOgogCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplKToKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gbW1hcC5tbWFwKC0xLCBzaXplKQorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2l6ZSwgZmQ9LTEpOgogICAgICAgICAgICAgc2VsZi5zaXplID0gc2l6ZQotICAgICAgICAgICAgc2VsZi5uYW1lID0gTm9uZQorICAgICAgICAgICAgc2VsZi5mZCA9IGZkCisgICAgICAgICAgICBpZiBmZCA9PSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLmZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgKKyAgICAgICAgICAgICAgICAgICAgIHByZWZpeD0ncHltLSVkLSclb3MuZ2V0cGlkKCksIGRpcj11dGlsLmdldF90ZW1wX2RpcigpKQorICAgICAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorICAgICAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChzZWxmLmZkLCkpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmQsICd3YicsIGNsb3NlZmQ9RmFsc2UpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoYidcMCcqc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gbW1hcC5tbWFwKHNlbGYuZmQsIHNlbGYuc2l6ZSkKKworICAgIGRlZiByZWR1Y2VfYXJlbmEoYSk6CisgICAgICAgIGlmIGEuZmQgPT0gLTE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBcmVuYSBpcyB1bnBpY2tsYWJsZSBiZWNhdXNlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvcmtpbmcgd2FzIGVuYWJsZWQgd2hlbiBpdCB3YXMgY3JlYXRlZCcpCisgICAgICAgIHJldHVybiByZWJ1aWxkX2FyZW5hLCAoYS5zaXplLCByZWR1Y3Rpb24uRHVwRmQoYS5mZCkpCisKKyAgICBkZWYgcmVidWlsZF9hcmVuYShzaXplLCBkdXBmZCk6CisgICAgICAgIHJldHVybiBBcmVuYShzaXplLCBkdXBmZC5kZXRhY2goKSkKKworICAgIHJlZHVjdGlvbi5yZWdpc3RlcihBcmVuYSwgcmVkdWNlX2FyZW5hKQogCiAjCiAjIENsYXNzIGFsbG93aW5nIGFsbG9jYXRpb24gb2YgY2h1bmtzIG9mIG1lbW9yeSBmcm9tIGFyZW5hcwpAQCAtOTAsNyArMTE4LDcgQEAKICAgICAgICAgaWYgaSA9PSBsZW4oc2VsZi5fbGVuZ3Rocyk6CiAgICAgICAgICAgICBsZW5ndGggPSBzZWxmLl9yb3VuZHVwKG1heChzZWxmLl9zaXplLCBzaXplKSwgbW1hcC5QQUdFU0laRSkKICAgICAgICAgICAgIHNlbGYuX3NpemUgKj0gMgotICAgICAgICAgICAgaW5mbygnYWxsb2NhdGluZyBhIG5ldyBtbWFwIG9mIGxlbmd0aCAlZCcsIGxlbmd0aCkKKyAgICAgICAgICAgIHV0aWwuaW5mbygnYWxsb2NhdGluZyBhIG5ldyBtbWFwIG9mIGxlbmd0aCAlZCcsIGxlbmd0aCkKICAgICAgICAgICAgIGFyZW5hID0gQXJlbmEobGVuZ3RoKQogICAgICAgICAgICAgc2VsZi5fYXJlbmFzLmFwcGVuZChhcmVuYSkKICAgICAgICAgICAgIHJldHVybiAoYXJlbmEsIDAsIGxlbmd0aCkKQEAgLTIxNiw3ICsyNDQsNyBAQAogICAgICAgICBhc3NlcnQgMCA8PSBzaXplIDwgc3lzLm1heHNpemUKICAgICAgICAgYmxvY2sgPSBCdWZmZXJXcmFwcGVyLl9oZWFwLm1hbGxvYyhzaXplKQogICAgICAgICBzZWxmLl9zdGF0ZSA9IChibG9jaywgc2l6ZSkKLSAgICAgICAgRmluYWxpemUoc2VsZiwgQnVmZmVyV3JhcHBlci5faGVhcC5mcmVlLCBhcmdzPShibG9jaywpKQorICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIEJ1ZmZlcldyYXBwZXIuX2hlYXAuZnJlZSwgYXJncz0oYmxvY2ssKSkKIAogICAgIGRlZiBjcmVhdGVfbWVtb3J5dmlldyhzZWxmKToKICAgICAgICAgKGFyZW5hLCBzdGFydCwgc3RvcCksIHNpemUgPSBzZWxmLl9zdGF0ZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKaW5kZXggOTYwNTZiMC4uY2M4N2QzNiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CkBAIC0xOSwxMSArMTksMTYgQEAKIGltcG9ydCBhcnJheQogaW1wb3J0IHF1ZXVlCiAKLWZyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgY3VycmVudF9wcm9jZXNzLCBhY3RpdmVfY2hpbGRyZW4sIFBvb2wsIHV0aWwsIGNvbm5lY3Rpb24KLWZyb20gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MgaW1wb3J0IEF1dGhlbnRpY2F0aW9uU3RyaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBQb3BlbiwgRm9ya2luZ1BpY2tsZXIKIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyBfdGltZQorZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGMKKworZnJvbSAuIGltcG9ydCBjb25uZWN0aW9uCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgcG9vbAorZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IGdldF9jb250ZXh0CiAKICMKICMgUmVnaXN0ZXIgc29tZSB0aGluZ3MgZm9yIHBpY2tsaW5nCkBAIC0zMSwxNiArMzYsMTQgQEAKIAogZGVmIHJlZHVjZV9hcnJheShhKToKICAgICByZXR1cm4gYXJyYXkuYXJyYXksIChhLnR5cGVjb2RlLCBhLnRvYnl0ZXMoKSkKLUZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKGFycmF5LmFycmF5LCByZWR1Y2VfYXJyYXkpCityZWR1Y3Rpb24ucmVnaXN0ZXIoYXJyYXkuYXJyYXksIHJlZHVjZV9hcnJheSkKIAogdmlld190eXBlcyA9IFt0eXBlKGdldGF0dHIoe30sIG5hbWUpKCkpIGZvciBuYW1lIGluICgnaXRlbXMnLCdrZXlzJywndmFsdWVzJyldCiBpZiB2aWV3X3R5cGVzWzBdIGlzIG5vdCBsaXN0OiAgICAgICAjIG9ubHkgbmVlZGVkIGluIFB5My4wCiAgICAgZGVmIHJlYnVpbGRfYXNfbGlzdChvYmopOgogICAgICAgICByZXR1cm4gbGlzdCwgKGxpc3Qob2JqKSwpCiAgICAgZm9yIHZpZXdfdHlwZSBpbiB2aWV3X3R5cGVzOgotICAgICAgICBGb3JraW5nUGlja2xlci5yZWdpc3Rlcih2aWV3X3R5cGUsIHJlYnVpbGRfYXNfbGlzdCkKLSAgICAgICAgaW1wb3J0IGNvcHlyZWcKLSAgICAgICAgY29weXJlZy5waWNrbGUodmlld190eXBlLCByZWJ1aWxkX2FzX2xpc3QpCisgICAgICAgIHJlZHVjdGlvbi5yZWdpc3Rlcih2aWV3X3R5cGUsIHJlYnVpbGRfYXNfbGlzdCkKIAogIwogIyBUeXBlIGZvciBpZGVudGlmeWluZyBzaGFyZWQgb2JqZWN0cwpAQCAtMTMwLDcgKzEzMyw3IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlZ2lzdHJ5LCBhZGRyZXNzLCBhdXRoa2V5LCBzZXJpYWxpemVyKToKICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYXV0aGtleSwgYnl0ZXMpCiAgICAgICAgIHNlbGYucmVnaXN0cnkgPSByZWdpc3RyeQotICAgICAgICBzZWxmLmF1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQorICAgICAgICBzZWxmLmF1dGhrZXkgPSBwcm9jZXNzLkF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCiAgICAgICAgIExpc3RlbmVyLCBDbGllbnQgPSBsaXN0ZW5lcl9jbGllbnRbc2VyaWFsaXplcl0KIAogICAgICAgICAjIGRvIGF1dGhlbnRpY2F0aW9uIGxhdGVyCkBAIC0xNDYsNyArMTQ5LDcgQEAKICAgICAgICAgUnVuIHRoZSBzZXJ2ZXIgZm9yZXZlcgogICAgICAgICAnJycKICAgICAgICAgc2VsZi5zdG9wX2V2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKLSAgICAgICAgY3VycmVudF9wcm9jZXNzKCkuX21hbmFnZXJfc2VydmVyID0gc2VsZgorICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9tYW5hZ2VyX3NlcnZlciA9IHNlbGYKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYWNjZXB0ZXIgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLmFjY2VwdGVyKQogICAgICAgICAgICAgYWNjZXB0ZXIuZGFlbW9uID0gVHJ1ZQpAQCAtMTY3LDcgKzE3MCw3IEBACiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYyA9IHNlbGYubGlzdGVuZXIuYWNjZXB0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuaGFuZGxlX3JlcXVlc3QsIGFyZ3M9KGMsKSkKICAgICAgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQpAQCAtNDM2LDE1ICs0MzksMTcgQEAKICAgICBfcmVnaXN0cnkgPSB7fQogICAgIF9TZXJ2ZXIgPSBTZXJ2ZXIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzPU5vbmUsIGF1dGhrZXk9Tm9uZSwgc2VyaWFsaXplcj0ncGlja2xlJyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3M9Tm9uZSwgYXV0aGtleT1Ob25lLCBzZXJpYWxpemVyPSdwaWNrbGUnLAorICAgICAgICAgICAgICAgICBjdHg9Tm9uZSk6CiAgICAgICAgIGlmIGF1dGhrZXkgaXMgTm9uZToKLSAgICAgICAgICAgIGF1dGhrZXkgPSBjdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CisgICAgICAgICAgICBhdXRoa2V5ID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CiAgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBhZGRyZXNzICAgICAjIFhYWCBub3QgZmluYWwgYWRkcmVzcyBpZiBlZyAoJycsIDApCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQorICAgICAgICBzZWxmLl9hdXRoa2V5ID0gcHJvY2Vzcy5BdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQogICAgICAgICBzZWxmLl9zdGF0ZSA9IFN0YXRlKCkKICAgICAgICAgc2VsZi5fc3RhdGUudmFsdWUgPSBTdGF0ZS5JTklUSUFMCiAgICAgICAgIHNlbGYuX3NlcmlhbGl6ZXIgPSBzZXJpYWxpemVyCiAgICAgICAgIHNlbGYuX0xpc3RlbmVyLCBzZWxmLl9DbGllbnQgPSBsaXN0ZW5lcl9jbGllbnRbc2VyaWFsaXplcl0KKyAgICAgICAgc2VsZi5fY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KCkKIAogICAgIGRlZiBnZXRfc2VydmVyKHNlbGYpOgogICAgICAgICAnJycKQEAgLTQ3Niw3ICs0ODEsNyBAQAogICAgICAgICByZWFkZXIsIHdyaXRlciA9IGNvbm5lY3Rpb24uUGlwZShkdXBsZXg9RmFsc2UpCiAKICAgICAgICAgIyBzcGF3biBwcm9jZXNzIHdoaWNoIHJ1bnMgYSBzZXJ2ZXIKLSAgICAgICAgc2VsZi5fcHJvY2VzcyA9IFByb2Nlc3MoCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9jdHguUHJvY2VzcygKICAgICAgICAgICAgIHRhcmdldD10eXBlKHNlbGYpLl9ydW5fc2VydmVyLAogICAgICAgICAgICAgYXJncz0oc2VsZi5fcmVnaXN0cnksIHNlbGYuX2FkZHJlc3MsIHNlbGYuX2F1dGhrZXksCiAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXJpYWxpemVyLCB3cml0ZXIsIGluaXRpYWxpemVyLCBpbml0YXJncyksCkBAIC02OTEsMTEgKzY5NiwxMSBAQAogICAgICAgICBzZWxmLl9DbGllbnQgPSBsaXN0ZW5lcl9jbGllbnRbc2VyaWFsaXplcl1bMV0KIAogICAgICAgICBpZiBhdXRoa2V5IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCisgICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gcHJvY2Vzcy5BdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQogICAgICAgICBlbGlmIHNlbGYuX21hbmFnZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gc2VsZi5fbWFuYWdlci5fYXV0aGtleQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IGN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKKyAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKIAogICAgICAgICBpZiBpbmNyZWY6CiAgICAgICAgICAgICBzZWxmLl9pbmNyZWYoKQpAQCAtNzA0LDcgKzcwOSw3IEBACiAKICAgICBkZWYgX2Nvbm5lY3Qoc2VsZik6CiAgICAgICAgIHV0aWwuZGVidWcoJ21ha2luZyBjb25uZWN0aW9uIHRvIG1hbmFnZXInKQotICAgICAgICBuYW1lID0gY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICBuYW1lID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lCiAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUgIT0gJ01haW5UaHJlYWQnOgogICAgICAgICAgICAgbmFtZSArPSAnfCcgKyB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lCiAgICAgICAgIGNvbm4gPSBzZWxmLl9DbGllbnQoc2VsZi5fdG9rZW4uYWRkcmVzcywgYXV0aGtleT1zZWxmLl9hdXRoa2V5KQpAQCAtNzk4LDcgKzgwMyw3IEBACiAKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgICAga3dkcyA9IHt9Ci0gICAgICAgIGlmIFBvcGVuLnRocmVhZF9pc19zcGF3bmluZygpOgorICAgICAgICBpZiBjb250ZXh0LmdldF9zcGF3bmluZ19wb3BlbigpIGlzIG5vdCBOb25lOgogICAgICAgICAgICAga3dkc1snYXV0aGtleSddID0gc2VsZi5fYXV0aGtleQogCiAgICAgICAgIGlmIGdldGF0dHIoc2VsZiwgJ19pc2F1dG8nLCBGYWxzZSk6CkBAIC04MzUsMTQgKzg0MCwxNCBAQAogCiAgICAgSWYgcG9zc2libGUgdGhlIHNoYXJlZCBvYmplY3QgaXMgcmV0dXJuZWQsIG9yIG90aGVyd2lzZSBhIHByb3h5IGZvciBpdC4KICAgICAnJycKLSAgICBzZXJ2ZXIgPSBnZXRhdHRyKGN1cnJlbnRfcHJvY2VzcygpLCAnX21hbmFnZXJfc2VydmVyJywgTm9uZSkKKyAgICBzZXJ2ZXIgPSBnZXRhdHRyKHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCksICdfbWFuYWdlcl9zZXJ2ZXInLCBOb25lKQogCiAgICAgaWYgc2VydmVyIGFuZCBzZXJ2ZXIuYWRkcmVzcyA9PSB0b2tlbi5hZGRyZXNzOgogICAgICAgICByZXR1cm4gc2VydmVyLmlkX3RvX29ialt0b2tlbi5pZF1bMF0KICAgICBlbHNlOgogICAgICAgICBpbmNyZWYgPSAoCiAgICAgICAgICAgICBrd2RzLnBvcCgnaW5jcmVmJywgVHJ1ZSkgYW5kCi0gICAgICAgICAgICBub3QgZ2V0YXR0cihjdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpCisgICAgICAgICAgICBub3QgZ2V0YXR0cihwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLCAnX2luaGVyaXRpbmcnLCBGYWxzZSkKICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIGZ1bmModG9rZW4sIHNlcmlhbGl6ZXIsIGluY3JlZj1pbmNyZWYsICoqa3dkcykKIApAQCAtODg5LDcgKzg5NCw3IEBACiAgICAgaWYgYXV0aGtleSBpcyBOb25lIGFuZCBtYW5hZ2VyIGlzIG5vdCBOb25lOgogICAgICAgICBhdXRoa2V5ID0gbWFuYWdlci5fYXV0aGtleQogICAgIGlmIGF1dGhrZXkgaXMgTm9uZToKLSAgICAgICAgYXV0aGtleSA9IGN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKKyAgICAgICAgYXV0aGtleSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQogCiAgICAgUHJveHlUeXBlID0gTWFrZVByb3h5VHlwZSgnQXV0b1Byb3h5WyVzXScgJSB0b2tlbi50eXBlaWQsIGV4cG9zZWQpCiAgICAgcHJveHkgPSBQcm94eVR5cGUodG9rZW4sIHNlcmlhbGl6ZXIsIG1hbmFnZXI9bWFuYWdlciwgYXV0aGtleT1hdXRoa2V5LApAQCAtMTEwOSw3ICsxMTE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIEFjcXVpcmVyUHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignQ29uZGl0aW9uJywgdGhyZWFkaW5nLkNvbmRpdGlvbiwgQ29uZGl0aW9uUHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignQmFycmllcicsIHRocmVhZGluZy5CYXJyaWVyLCBCYXJyaWVyUHJveHkpCi1TeW5jTWFuYWdlci5yZWdpc3RlcignUG9vbCcsIFBvb2wsIFBvb2xQcm94eSkKK1N5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdQb29sJywgcG9vbC5Qb29sLCBQb29sUHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignbGlzdCcsIGxpc3QsIExpc3RQcm94eSkKIFN5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdkaWN0JywgZGljdCwgRGljdFByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ1ZhbHVlJywgVmFsdWUsIFZhbHVlUHJveHkpCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKaW5kZXggMGYyZGFiNC4uMWNiMmQ5NSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQpAQCAtNyw3ICs3LDcgQEAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCi1fX2FsbF9fID0gWydQb29sJ10KK19fYWxsX18gPSBbJ1Bvb2wnLCAnVGhyZWFkUG9vbCddCiAKICMKICMgSW1wb3J0cwpAQCAtMTcsMTAgKzE3LDE0IEBACiBpbXBvcnQgcXVldWUKIGltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IG9zCiBpbXBvcnQgdGltZQoraW1wb3J0IHRyYWNlYmFjawogCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgY3B1X2NvdW50LCBUaW1lb3V0RXJyb3IKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IEZpbmFsaXplLCBkZWJ1ZworIyBJZiB0aHJlYWRpbmcgaXMgYXZhaWxhYmxlIHRoZW4gVGhyZWFkUG9vbCBzaG91bGQgYmUgcHJvdmlkZWQuICBUaGVyZWZvcmUKKyMgd2UgYXZvaWQgdG9wLWxldmVsIGltcG9ydHMgd2hpY2ggYXJlIGxpYWJsZSB0byBmYWlsIG9uIHNvbWUgc3lzdGVtcy4KK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCBnZXRfY29udGV4dCwgY3B1X2NvdW50LCBUaW1lb3V0RXJyb3IKIAogIwogIyBDb25zdGFudHMgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiBhIHBvb2wKQEAgLTQzLDYgKzQ3LDI5IEBACiAgICAgcmV0dXJuIGxpc3QoaXRlcnRvb2xzLnN0YXJtYXAoYXJnc1swXSwgYXJnc1sxXSkpCiAKICMKKyMgSGFjayB0byBlbWJlZCBzdHJpbmdpZmljYXRpb24gb2YgcmVtb3RlIHRyYWNlYmFjayBpbiBsb2NhbCB0cmFjZWJhY2sKKyMKKworY2xhc3MgUmVtb3RlVHJhY2ViYWNrKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRiKToKKyAgICAgICAgc2VsZi50YiA9IHRiCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRiCisKK2NsYXNzIEV4Y2VwdGlvbldpdGhUcmFjZWJhY2s6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4YywgdGIpOgorICAgICAgICB0YiA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKHR5cGUoZXhjKSwgZXhjLCB0YikKKyAgICAgICAgdGIgPSAnJy5qb2luKHRiKQorICAgICAgICBzZWxmLmV4YyA9IGV4YworICAgICAgICBzZWxmLnRiID0gJ1xuIiIiXG4lcyIiIicgJSB0YgorICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gcmVidWlsZF9leGMsIChzZWxmLmV4Yywgc2VsZi50YikKKworZGVmIHJlYnVpbGRfZXhjKGV4YywgdGIpOgorICAgIGV4Yy5fX2NhdXNlX18gPSBSZW1vdGVUcmFjZWJhY2sodGIpCisgICAgcmV0dXJuIGV4YworCisjCiAjIENvZGUgcnVuIGJ5IHdvcmtlciBwcm9jZXNzZXMKICMKIApAQCAtNzgsMjggKzEwNSwyOSBAQAogICAgIHdoaWxlIG1heHRhc2tzIGlzIE5vbmUgb3IgKG1heHRhc2tzIGFuZCBjb21wbGV0ZWQgPCBtYXh0YXNrcyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRhc2sgPSBnZXQoKQotICAgICAgICBleGNlcHQgKEVPRkVycm9yLCBJT0Vycm9yKToKLSAgICAgICAgICAgIGRlYnVnKCd3b3JrZXIgZ290IEVPRkVycm9yIG9yIElPRXJyb3IgLS0gZXhpdGluZycpCisgICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgdXRpbC5kZWJ1Zygnd29ya2VyIGdvdCBFT0ZFcnJvciBvciBPU0Vycm9yIC0tIGV4aXRpbmcnKQogICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICBpZiB0YXNrIGlzIE5vbmU6Ci0gICAgICAgICAgICBkZWJ1Zygnd29ya2VyIGdvdCBzZW50aW5lbCAtLSBleGl0aW5nJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3dvcmtlciBnb3Qgc2VudGluZWwgLS0gZXhpdGluZycpCiAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIGpvYiwgaSwgZnVuYywgYXJncywga3dkcyA9IHRhc2sKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVzdWx0ID0gKFRydWUsIGZ1bmMoKmFyZ3MsICoqa3dkcykpCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGUgPSBFeGNlcHRpb25XaXRoVHJhY2ViYWNrKGUsIGUuX190cmFjZWJhY2tfXykKICAgICAgICAgICAgIHJlc3VsdCA9IChGYWxzZSwgZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcHV0KChqb2IsIGksIHJlc3VsdCkpCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHdyYXBwZWQgPSBNYXliZUVuY29kaW5nRXJyb3IoZSwgcmVzdWx0WzFdKQotICAgICAgICAgICAgZGVidWcoIlBvc3NpYmxlIGVuY29kaW5nIGVycm9yIHdoaWxlIHNlbmRpbmcgcmVzdWx0OiAlcyIgJSAoCisgICAgICAgICAgICB1dGlsLmRlYnVnKCJQb3NzaWJsZSBlbmNvZGluZyBlcnJvciB3aGlsZSBzZW5kaW5nIHJlc3VsdDogJXMiICUgKAogICAgICAgICAgICAgICAgIHdyYXBwZWQpKQogICAgICAgICAgICAgcHV0KChqb2IsIGksIChGYWxzZSwgd3JhcHBlZCkpKQogICAgICAgICBjb21wbGV0ZWQgKz0gMQotICAgIGRlYnVnKCd3b3JrZXIgZXhpdGluZyBhZnRlciAlZCB0YXNrcycgJSBjb21wbGV0ZWQpCisgICAgdXRpbC5kZWJ1Zygnd29ya2VyIGV4aXRpbmcgYWZ0ZXIgJWQgdGFza3MnICUgY29tcGxldGVkKQogCiAjCiAjIENsYXNzIHJlcHJlc2VudGluZyBhIHByb2Nlc3MgcG9vbApAQCAtMTA5LDEwICsxMzcsMTIgQEAKICAgICAnJycKICAgICBDbGFzcyB3aGljaCBzdXBwb3J0cyBhbiBhc3luYyB2ZXJzaW9uIG9mIGFwcGx5aW5nIGZ1bmN0aW9ucyB0byBhcmd1bWVudHMuCiAgICAgJycnCi0gICAgUHJvY2VzcyA9IFByb2Nlc3MKKyAgICBkZWYgUHJvY2VzcyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2N0eC5Qcm9jZXNzKCphcmdzLCAqKmt3ZHMpCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLAotICAgICAgICAgICAgICAgICBtYXh0YXNrc3BlcmNoaWxkPU5vbmUpOgorICAgICAgICAgICAgICAgICBtYXh0YXNrc3BlcmNoaWxkPU5vbmUsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgIHNlbGYuX2N0eCA9IGNvbnRleHQgb3IgZ2V0X2NvbnRleHQoKQogICAgICAgICBzZWxmLl9zZXR1cF9xdWV1ZXMoKQogICAgICAgICBzZWxmLl90YXNrcXVldWUgPSBxdWV1ZS5RdWV1ZSgpCiAgICAgICAgIHNlbGYuX2NhY2hlID0ge30KQEAgLTEyMiwxMCArMTUyLDcgQEAKICAgICAgICAgc2VsZi5faW5pdGFyZ3MgPSBpbml0YXJncwogCiAgICAgICAgIGlmIHByb2Nlc3NlcyBpcyBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHByb2Nlc3NlcyA9IGNwdV9jb3VudCgpCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBwcm9jZXNzZXMgPSAxCisgICAgICAgICAgICBwcm9jZXNzZXMgPSBvcy5jcHVfY291bnQoKSBvciAxCiAgICAgICAgIGlmIHByb2Nlc3NlcyA8IDE6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJOdW1iZXIgb2YgcHJvY2Vzc2VzIG11c3QgYmUgYXQgbGVhc3QgMSIpCiAKQEAgLTE2Miw3ICsxODksNyBAQAogICAgICAgICBzZWxmLl9yZXN1bHRfaGFuZGxlci5fc3RhdGUgPSBSVU4KICAgICAgICAgc2VsZi5fcmVzdWx0X2hhbmRsZXIuc3RhcnQoKQogCi0gICAgICAgIHNlbGYuX3Rlcm1pbmF0ZSA9IEZpbmFsaXplKAorICAgICAgICBzZWxmLl90ZXJtaW5hdGUgPSB1dGlsLkZpbmFsaXplKAogICAgICAgICAgICAgc2VsZiwgc2VsZi5fdGVybWluYXRlX3Bvb2wsCiAgICAgICAgICAgICBhcmdzPShzZWxmLl90YXNrcXVldWUsIHNlbGYuX2lucXVldWUsIHNlbGYuX291dHF1ZXVlLCBzZWxmLl9wb29sLAogICAgICAgICAgICAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIsIHNlbGYuX3Rhc2tfaGFuZGxlciwKQEAgLTE3OSw3ICsyMDYsNyBAQAogICAgICAgICAgICAgd29ya2VyID0gc2VsZi5fcG9vbFtpXQogICAgICAgICAgICAgaWYgd29ya2VyLmV4aXRjb2RlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICMgd29ya2VyIGV4aXRlZAotICAgICAgICAgICAgICAgIGRlYnVnKCdjbGVhbmluZyB1cCB3b3JrZXIgJWQnICUgaSkKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdjbGVhbmluZyB1cCB3b3JrZXIgJWQnICUgaSkKICAgICAgICAgICAgICAgICB3b3JrZXIuam9pbigpCiAgICAgICAgICAgICAgICAgY2xlYW5lZCA9IFRydWUKICAgICAgICAgICAgICAgICBkZWwgc2VsZi5fcG9vbFtpXQpAQCAtMTk5LDcgKzIyNiw3IEBACiAgICAgICAgICAgICB3Lm5hbWUgPSB3Lm5hbWUucmVwbGFjZSgnUHJvY2VzcycsICdQb29sV29ya2VyJykKICAgICAgICAgICAgIHcuZGFlbW9uID0gVHJ1ZQogICAgICAgICAgICAgdy5zdGFydCgpCi0gICAgICAgICAgICBkZWJ1ZygnYWRkZWQgd29ya2VyJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ2FkZGVkIHdvcmtlcicpCiAKICAgICBkZWYgX21haW50YWluX3Bvb2woc2VsZik6CiAgICAgICAgICIiIkNsZWFuIHVwIGFueSBleGl0ZWQgd29ya2VycyBhbmQgc3RhcnQgcmVwbGFjZW1lbnRzIGZvciB0aGVtLgpAQCAtMjA4LDkgKzIzNSw4IEBACiAgICAgICAgICAgICBzZWxmLl9yZXBvcHVsYXRlX3Bvb2woKQogCiAgICAgZGVmIF9zZXR1cF9xdWV1ZXMoc2VsZik6Ci0gICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgU2ltcGxlUXVldWUKLSAgICAgICAgc2VsZi5faW5xdWV1ZSA9IFNpbXBsZVF1ZXVlKCkKLSAgICAgICAgc2VsZi5fb3V0cXVldWUgPSBTaW1wbGVRdWV1ZSgpCisgICAgICAgIHNlbGYuX2lucXVldWUgPSBzZWxmLl9jdHguU2ltcGxlUXVldWUoKQorICAgICAgICBzZWxmLl9vdXRxdWV1ZSA9IHNlbGYuX2N0eC5TaW1wbGVRdWV1ZSgpCiAgICAgICAgIHNlbGYuX3F1aWNrX3B1dCA9IHNlbGYuX2lucXVldWUuX3dyaXRlci5zZW5kCiAgICAgICAgIHNlbGYuX3F1aWNrX2dldCA9IHNlbGYuX291dHF1ZXVlLl9yZWFkZXIucmVjdgogCkBAIC0zMzYsNyArMzYyLDcgQEAKICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgICAgICAjIHNlbmQgc2VudGluZWwgdG8gc3RvcCB3b3JrZXJzCiAgICAgICAgIHBvb2wuX3Rhc2txdWV1ZS5wdXQoTm9uZSkKLSAgICAgICAgZGVidWcoJ3dvcmtlciBoYW5kbGVyIGV4aXRpbmcnKQorICAgICAgICB1dGlsLmRlYnVnKCd3b3JrZXIgaGFuZGxlciBleGl0aW5nJykKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2hhbmRsZV90YXNrcyh0YXNrcXVldWUsIHB1dCwgb3V0cXVldWUsIHBvb2wsIGNhY2hlKToKQEAgLTM0Niw3ICszNzIsNyBAQAogICAgICAgICAgICAgaSA9IC0xCiAgICAgICAgICAgICBmb3IgaSwgdGFzayBpbiBlbnVtZXJhdGUodGFza3NlcSk6CiAgICAgICAgICAgICAgICAgaWYgdGhyZWFkLl9zdGF0ZToKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoJ3Rhc2sgaGFuZGxlciBmb3VuZCB0aHJlYWQuX3N0YXRlICE9IFJVTicpCisgICAgICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBmb3VuZCB0aHJlYWQuX3N0YXRlICE9IFJVTicpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBwdXQodGFzaykKQEAgLTM1OCwyNyArMzg0LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGlmIHNldF9sZW5ndGg6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCdkb2luZyBzZXRfbGVuZ3RoKCknKQorICAgICAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdkb2luZyBzZXRfbGVuZ3RoKCknKQogICAgICAgICAgICAgICAgICAgICBzZXRfbGVuZ3RoKGkrMSkKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZ290IHNlbnRpbmVsJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBnb3Qgc2VudGluZWwnKQogCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyB0ZWxsIHJlc3VsdCBoYW5kbGVyIHRvIGZpbmlzaCB3aGVuIGNhY2hlIGlzIGVtcHR5Ci0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIHNlbmRpbmcgc2VudGluZWwgdG8gcmVzdWx0IGhhbmRsZXInKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIHNlbmRpbmcgc2VudGluZWwgdG8gcmVzdWx0IGhhbmRsZXInKQogICAgICAgICAgICAgb3V0cXVldWUucHV0KE5vbmUpCiAKICAgICAgICAgICAgICMgdGVsbCB3b3JrZXJzIHRoZXJlIGlzIG5vIG1vcmUgd29yawotICAgICAgICAgICAgZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHdvcmtlcnMnKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIHNlbmRpbmcgc2VudGluZWwgdG8gd29ya2VycycpCiAgICAgICAgICAgICBmb3IgcCBpbiBwb29sOgogICAgICAgICAgICAgICAgIHB1dChOb25lKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZ290IElPRXJyb3Igd2hlbiBzZW5kaW5nIHNlbnRpbmVscycpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBPU0Vycm9yIHdoZW4gc2VuZGluZyBzZW50aW5lbHMnKQogCi0gICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZXhpdGluZycpCisgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBleGl0aW5nJykKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2hhbmRsZV9yZXN1bHRzKG91dHF1ZXVlLCBnZXQsIGNhY2hlKToKQEAgLTM4NywxNyArNDEzLDE3IEBACiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFzayA9IGdldCgpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL0lPRXJyb3IgLS0gZXhpdGluZycpCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3QgRU9GRXJyb3IvT1NFcnJvciAtLSBleGl0aW5nJykKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAgICAgaWYgdGhyZWFkLl9zdGF0ZToKICAgICAgICAgICAgICAgICBhc3NlcnQgdGhyZWFkLl9zdGF0ZSA9PSBURVJNSU5BVEUKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZT1URVJNSU5BVEUnKQorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGZvdW5kIHRocmVhZC5fc3RhdGU9VEVSTUlOQVRFJykKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICBpZiB0YXNrIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IHNlbnRpbmVsJykKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICBqb2IsIGksIG9iaiA9IHRhc2sKQEAgLTQwOSwxMiArNDM1LDEyIEBACiAgICAgICAgIHdoaWxlIGNhY2hlIGFuZCB0aHJlYWQuX3N0YXRlICE9IFRFUk1JTkFURToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0YXNrID0gZ2V0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3QgRU9GRXJyb3IvSU9FcnJvciAtLSBleGl0aW5nJykKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBFT0ZFcnJvci9PU0Vycm9yIC0tIGV4aXRpbmcnKQogICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICAgICBpZiB0YXNrIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGlnbm9yaW5nIGV4dHJhIHNlbnRpbmVsJykKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBpZ25vcmluZyBleHRyYSBzZW50aW5lbCcpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGpvYiwgaSwgb2JqID0gdGFzawogICAgICAgICAgICAgdHJ5OgpAQCAtNDIzLDcgKzQ0OSw3IEBACiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGlmIGhhc2F0dHIob3V0cXVldWUsICdfcmVhZGVyJyk6Ci0gICAgICAgICAgICBkZWJ1ZygnZW5zdXJpbmcgdGhhdCBvdXRxdWV1ZSBpcyBub3QgZnVsbCcpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCdlbnN1cmluZyB0aGF0IG91dHF1ZXVlIGlzIG5vdCBmdWxsJykKICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgbWFrZSByb29tIGF2YWlsYWJsZSBpbiBvdXRxdWV1ZSB0aGVuCiAgICAgICAgICAgICAjIGF0dGVtcHRzIHRvIGFkZCB0aGUgc2VudGluZWwgKE5vbmUpIHRvIG91dHF1ZXVlIG1heQogICAgICAgICAgICAgIyBibG9jay4gIFRoZXJlIGlzIGd1YXJhbnRlZWQgdG8gYmUgbm8gbW9yZSB0aGFuIDIgc2VudGluZWxzLgpAQCAtNDMyLDEwICs0NTgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG91dHF1ZXVlLl9yZWFkZXIucG9sbCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgZ2V0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBleGl0aW5nOiBsZW4oY2FjaGUpPSVzLCB0aHJlYWQuX3N0YXRlPSVzJywKKyAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZXhpdGluZzogbGVuKGNhY2hlKT0lcywgdGhyZWFkLl9zdGF0ZT0lcycsCiAgICAgICAgICAgICAgIGxlbihjYWNoZSksIHRocmVhZC5fc3RhdGUpCiAKICAgICBAc3RhdGljbWV0aG9kCkBAIC00NTMsMTkgKzQ3OSwxOSBAQAogICAgICAgICAgICAgICApCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGRlYnVnKCdjbG9zaW5nIHBvb2wnKQorICAgICAgICB1dGlsLmRlYnVnKCdjbG9zaW5nIHBvb2wnKQogICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBSVU46CiAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IENMT1NFCiAgICAgICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBDTE9TRQogCiAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgZGVidWcoJ3Rlcm1pbmF0aW5nIHBvb2wnKQorICAgICAgICB1dGlsLmRlYnVnKCd0ZXJtaW5hdGluZyBwb29sJykKICAgICAgICAgc2VsZi5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHNlbGYuX3Rlcm1pbmF0ZSgpCiAKICAgICBkZWYgam9pbihzZWxmKToKLSAgICAgICAgZGVidWcoJ2pvaW5pbmcgcG9vbCcpCisgICAgICAgIHV0aWwuZGVidWcoJ2pvaW5pbmcgcG9vbCcpCiAgICAgICAgIGFzc2VydCBzZWxmLl9zdGF0ZSBpbiAoQ0xPU0UsIFRFUk1JTkFURSkKICAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuam9pbigpCiAgICAgICAgIHNlbGYuX3Rhc2tfaGFuZGxlci5qb2luKCkKQEAgLTQ3Niw3ICs1MDIsNyBAQAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2hlbHBfc3R1ZmZfZmluaXNoKGlucXVldWUsIHRhc2tfaGFuZGxlciwgc2l6ZSk6CiAgICAgICAgICMgdGFza19oYW5kbGVyIG1heSBiZSBibG9ja2VkIHRyeWluZyB0byBwdXQgaXRlbXMgb24gaW5xdWV1ZQotICAgICAgICBkZWJ1ZygncmVtb3ZpbmcgdGFza3MgZnJvbSBpbnF1ZXVlIHVudGlsIHRhc2sgaGFuZGxlciBmaW5pc2hlZCcpCisgICAgICAgIHV0aWwuZGVidWcoJ3JlbW92aW5nIHRhc2tzIGZyb20gaW5xdWV1ZSB1bnRpbCB0YXNrIGhhbmRsZXIgZmluaXNoZWQnKQogICAgICAgICBpbnF1ZXVlLl9ybG9jay5hY3F1aXJlKCkKICAgICAgICAgd2hpbGUgdGFza19oYW5kbGVyLmlzX2FsaXZlKCkgYW5kIGlucXVldWUuX3JlYWRlci5wb2xsKCk6CiAgICAgICAgICAgICBpbnF1ZXVlLl9yZWFkZXIucmVjdigpCkBAIC00ODYsMTIgKzUxMiwxMiBAQAogICAgIGRlZiBfdGVybWluYXRlX3Bvb2woY2xzLCB0YXNrcXVldWUsIGlucXVldWUsIG91dHF1ZXVlLCBwb29sLAogICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2hhbmRsZXIsIHRhc2tfaGFuZGxlciwgcmVzdWx0X2hhbmRsZXIsIGNhY2hlKToKICAgICAgICAgIyB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gb25seSBiZSBjYWxsZWQgb25jZQotICAgICAgICBkZWJ1ZygnZmluYWxpemluZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1ZygnZmluYWxpemluZyBwb29sJykKIAogICAgICAgICB3b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgdGFza19oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogCi0gICAgICAgIGRlYnVnKCdoZWxwaW5nIHRhc2sgaGFuZGxlci93b3JrZXJzIHRvIGZpbmlzaCcpCisgICAgICAgIHV0aWwuZGVidWcoJ2hlbHBpbmcgdGFzayBoYW5kbGVyL3dvcmtlcnMgdG8gZmluaXNoJykKICAgICAgICAgY2xzLl9oZWxwX3N0dWZmX2ZpbmlzaChpbnF1ZXVlLCB0YXNrX2hhbmRsZXIsIGxlbihwb29sKSkKIAogICAgICAgICBhc3NlcnQgcmVzdWx0X2hhbmRsZXIuaXNfYWxpdmUoKSBvciBsZW4oY2FjaGUpID09IDAKQEAgLTUwMSwzMSArNTI3LDMxIEBACiAKICAgICAgICAgIyBXZSBtdXN0IHdhaXQgZm9yIHRoZSB3b3JrZXIgaGFuZGxlciB0byBleGl0IGJlZm9yZSB0ZXJtaW5hdGluZwogICAgICAgICAjIHdvcmtlcnMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHdvcmtlcnMgdG8gYmUgcmVzdGFydGVkIGJlaGluZCBvdXIgYmFjay4KLSAgICAgICAgZGVidWcoJ2pvaW5pbmcgd29ya2VyIGhhbmRsZXInKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHdvcmtlciBoYW5kbGVyJykKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkgaXMgbm90IHdvcmtlcl9oYW5kbGVyOgogICAgICAgICAgICAgd29ya2VyX2hhbmRsZXIuam9pbigpCiAKICAgICAgICAgIyBUZXJtaW5hdGUgd29ya2VycyB3aGljaCBoYXZlbid0IGFscmVhZHkgZmluaXNoZWQuCiAgICAgICAgIGlmIHBvb2wgYW5kIGhhc2F0dHIocG9vbFswXSwgJ3Rlcm1pbmF0ZScpOgotICAgICAgICAgICAgZGVidWcoJ3Rlcm1pbmF0aW5nIHdvcmtlcnMnKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGVybWluYXRpbmcgd29ya2VycycpCiAgICAgICAgICAgICBmb3IgcCBpbiBwb29sOgogICAgICAgICAgICAgICAgIGlmIHAuZXhpdGNvZGUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcC50ZXJtaW5hdGUoKQogCi0gICAgICAgIGRlYnVnKCdqb2luaW5nIHRhc2sgaGFuZGxlcicpCisgICAgICAgIHV0aWwuZGVidWcoJ2pvaW5pbmcgdGFzayBoYW5kbGVyJykKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkgaXMgbm90IHRhc2tfaGFuZGxlcjoKICAgICAgICAgICAgIHRhc2tfaGFuZGxlci5qb2luKCkKIAotICAgICAgICBkZWJ1Zygnam9pbmluZyByZXN1bHQgaGFuZGxlcicpCisgICAgICAgIHV0aWwuZGVidWcoJ2pvaW5pbmcgcmVzdWx0IGhhbmRsZXInKQogICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSBpcyBub3QgcmVzdWx0X2hhbmRsZXI6CiAgICAgICAgICAgICByZXN1bHRfaGFuZGxlci5qb2luKCkKIAogICAgICAgICBpZiBwb29sIGFuZCBoYXNhdHRyKHBvb2xbMF0sICd0ZXJtaW5hdGUnKToKLSAgICAgICAgICAgIGRlYnVnKCdqb2luaW5nIHBvb2wgd29ya2VycycpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHBvb2wgd29ya2VycycpCiAgICAgICAgICAgICBmb3IgcCBpbiBwb29sOgogICAgICAgICAgICAgICAgIGlmIHAuaXNfYWxpdmUoKToKICAgICAgICAgICAgICAgICAgICAgIyB3b3JrZXIgaGFzIG5vdCB5ZXQgZXhpdGVkCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCdjbGVhbmluZyB1cCB3b3JrZXIgJWQnICUgcC5waWQpCisgICAgICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBwLnBpZCkKICAgICAgICAgICAgICAgICAgICAgcC5qb2luKCkKIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CkBAIC03MTEsNyArNzM3LDEwIEBACiAKIGNsYXNzIFRocmVhZFBvb2woUG9vbCk6CiAKLSAgICBmcm9tIC5kdW1teSBpbXBvcnQgUHJvY2VzcworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgUHJvY2VzcygqYXJncywgKiprd2RzKToKKyAgICAgICAgZnJvbSAuZHVtbXkgaW1wb3J0IFByb2Nlc3MKKyAgICAgICAgcmV0dXJuIFByb2Nlc3MoKmFyZ3MsICoqa3dkcykKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCkpOgogICAgICAgICBQb29sLl9faW5pdF9fKHNlbGYsIHByb2Nlc3NlcywgaW5pdGlhbGl6ZXIsIGluaXRhcmdzKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3JrLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3JrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2M2NjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmsucHkKQEAgLTAsMCArMSw4MyBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgZXJybm8KKworZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ1BvcGVuJ10KKworIworIyBTdGFydCBjaGlsZCBwcm9jZXNzIHVzaW5nIGZvcmsKKyMKKworY2xhc3MgUG9wZW4ob2JqZWN0KToKKyAgICBtZXRob2QgPSAnZm9yaycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gTm9uZQorICAgICAgICBzZWxmLl9sYXVuY2gocHJvY2Vzc19vYmopCisKKyAgICBkZWYgZHVwbGljYXRlX2Zvcl9jaGlsZChzZWxmLCBmZCk6CisgICAgICAgIHJldHVybiBmZAorCisgICAgZGVmIHBvbGwoc2VsZiwgZmxhZz1vcy5XTk9IQU5HKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGlkLCBzdHMgPSBvcy53YWl0cGlkKHNlbGYucGlkLCBmbGFnKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUlOVFI6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgbm90IHlldCBjcmVhdGVkLiBTZWUgIzE3MzE3MTcKKyAgICAgICAgICAgICAgICAgICAgIyBlLmVycm5vID09IGVycm5vLkVDSElMRCA9PSAxMAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBwaWQgPT0gc2VsZi5waWQ6CisgICAgICAgICAgICAgICAgaWYgb3MuV0lGU0lHTkFMRUQoc3RzKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gLW9zLldURVJNU0lHKHN0cykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MuV0lGRVhJVEVEKHN0cykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gb3MuV0VYSVRTVEFUVVMoc3RzKQorICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCisKKyAgICBkZWYgd2FpdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgd2FpdAorICAgICAgICAgICAgICAgIGlmIG5vdCB3YWl0KFtzZWxmLnNlbnRpbmVsXSwgdGltZW91dCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGJsb2NrIGlmIHdhaXQoKSByZXR1cm5lZCBzdWNjZXNzZnVsbHkuCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wb2xsKG9zLldOT0hBTkcgaWYgdGltZW91dCA9PSAwLjAgZWxzZSAwKQorICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5raWxsKHNlbGYucGlkLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9jZXNzTG9va3VwRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgc2VsZi53YWl0KHRpbWVvdXQ9MC4xKSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIF9sYXVuY2goc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBjb2RlID0gMQorICAgICAgICBwYXJlbnRfciwgY2hpbGRfdyA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLnBpZCA9IG9zLmZvcmsoKQorICAgICAgICBpZiBzZWxmLnBpZCA9PSAwOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHBhcmVudF9yKQorICAgICAgICAgICAgICAgIGlmICdyYW5kb20nIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgcmFuZG9tCisgICAgICAgICAgICAgICAgICAgIHJhbmRvbS5zZWVkKCkKKyAgICAgICAgICAgICAgICBjb2RlID0gcHJvY2Vzc19vYmouX2Jvb3RzdHJhcCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLl9leGl0KGNvZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5jbG9zZShjaGlsZF93KQorICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBvcy5jbG9zZSwgKHBhcmVudF9yLCkpCisgICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gcGFyZW50X3IKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9ya3NlcnZlci5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9ya3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTE1ZjgxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3Jrc2VydmVyLnB5CkBAIC0wLDAgKzEsNjkgQEAKK2ltcG9ydCBpbworaW1wb3J0IG9zCisKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitpZiBub3QgcmVkdWN0aW9uLkhBVkVfU0VORF9IQU5ETEU6CisgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ05vIHN1cHBvcnQgZm9yIHNlbmRpbmcgZmRzIGJldHdlZW4gcHJvY2Vzc2VzJykKK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCBmb3Jrc2VydmVyCitmcm9tIC4gaW1wb3J0IHBvcGVuX2ZvcmsKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCisKK19fYWxsX18gPSBbJ1BvcGVuJ10KKworIworIyBXcmFwcGVyIGZvciBhbiBmZCB1c2VkIHdoaWxlIGxhdW5jaGluZyBhIHByb2Nlc3MKKyMKKworY2xhc3MgX0R1cEZkKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZCk6CisgICAgICAgIHNlbGYuaW5kID0gaW5kCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgcmV0dXJuIGZvcmtzZXJ2ZXIuZ2V0X2luaGVyaXRlZF9mZHMoKVtzZWxmLmluZF0KKworIworIyBTdGFydCBjaGlsZCBwcm9jZXNzIHVzaW5nIGEgc2VydmVyIHByb2Nlc3MKKyMKKworY2xhc3MgUG9wZW4ocG9wZW5fZm9yay5Qb3Blbik6CisgICAgbWV0aG9kID0gJ2ZvcmtzZXJ2ZXInCisgICAgRHVwRmQgPSBfRHVwRmQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIHNlbGYuX2ZkcyA9IFtdCisgICAgICAgIHN1cGVyKCkuX19pbml0X18ocHJvY2Vzc19vYmopCisKKyAgICBkZWYgZHVwbGljYXRlX2Zvcl9jaGlsZChzZWxmLCBmZCk6CisgICAgICAgIHNlbGYuX2Zkcy5hcHBlbmQoZmQpCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fZmRzKSAtIDEKKworICAgIGRlZiBfbGF1bmNoKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgcHJlcF9kYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCisgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcmVwX2RhdGEsIGJ1ZikKKyAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByb2Nlc3Nfb2JqLCBidWYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihOb25lKQorCisgICAgICAgIHNlbGYuc2VudGluZWwsIHcgPSBmb3Jrc2VydmVyLmNvbm5lY3RfdG9fbmV3X3Byb2Nlc3Moc2VsZi5fZmRzKQorICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAoc2VsZi5zZW50aW5lbCwpKQorICAgICAgICB3aXRoIG9wZW4odywgJ3diJywgY2xvc2VmZD1UcnVlKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShidWYuZ2V0YnVmZmVyKCkpCisgICAgICAgIHNlbGYucGlkID0gZm9ya3NlcnZlci5yZWFkX3Vuc2lnbmVkKHNlbGYuc2VudGluZWwpCisKKyAgICBkZWYgcG9sbChzZWxmLCBmbGFnPW9zLldOT0hBTkcpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKKyAgICAgICAgICAgIHRpbWVvdXQgPSAwIGlmIGZsYWcgPT0gb3MuV05PSEFORyBlbHNlIE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0KFtzZWxmLnNlbnRpbmVsXSwgdGltZW91dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBmb3Jrc2VydmVyLnJlYWRfdW5zaWduZWQoc2VsZi5zZW50aW5lbCkKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgICMgVGhlIHByb2Nlc3MgZW5kZWQgYWJub3JtYWxseSBwZXJoYXBzIGJlY2F1c2Ugb2YgYSBzaWduYWwKKyAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAyNTUKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl9wb3NpeC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fcG9zaXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1ZGM0MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fcG9zaXgucHkKQEAgLTAsMCArMSw3MiBAQAoraW1wb3J0IGZjbnRsCitpbXBvcnQgaW8KK2ltcG9ydCBvcworCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgcG9wZW5fZm9yaworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitmcm9tIC4gaW1wb3J0IGN1cnJlbnRfcHJvY2VzcworCitfX2FsbF9fID0gWydQb3BlbiddCisKKworIworIyBXcmFwcGVyIGZvciBhbiBmZCB1c2VkIHdoaWxlIGxhdW5jaGluZyBhIHByb2Nlc3MKKyMKKworY2xhc3MgX0R1cEZkKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5mZCA9IGZkCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmQKKworIworIyBTdGFydCBjaGlsZCBwcm9jZXNzIHVzaW5nIGEgZnJlc2ggaW50ZXJwcmV0ZXIKKyMKKworY2xhc3MgUG9wZW4ocG9wZW5fZm9yay5Qb3Blbik6CisgICAgbWV0aG9kID0gJ3NwYXduJworICAgIER1cEZkID0gX0R1cEZkCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBzZWxmLl9mZHMgPSBbXQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHByb2Nlc3Nfb2JqKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgZmQpOgorICAgICAgICBzZWxmLl9mZHMuYXBwZW5kKGZkKQorICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBfbGF1bmNoKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgZnJvbSAuIGltcG9ydCBzZW1hcGhvcmVfdHJhY2tlcgorICAgICAgICB0cmFja2VyX2ZkID0gc2VtYXBob3JlX3RyYWNrZXIuZ2V0ZmQoKQorICAgICAgICBzZWxmLl9mZHMuYXBwZW5kKHRyYWNrZXJfZmQpCisgICAgICAgIHByZXBfZGF0YSA9IHNwYXduLmdldF9wcmVwYXJhdGlvbl9kYXRhKHByb2Nlc3Nfb2JqLl9uYW1lKQorICAgICAgICBmcCA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcmVwX2RhdGEsIGZwKQorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJvY2Vzc19vYmosIGZwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oTm9uZSkKKworICAgICAgICBwYXJlbnRfciA9IGNoaWxkX3cgPSBjaGlsZF9yID0gcGFyZW50X3cgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcmVudF9yLCBjaGlsZF93ID0gb3MucGlwZSgpCisgICAgICAgICAgICBjaGlsZF9yLCBwYXJlbnRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgY21kID0gc3Bhd24uZ2V0X2NvbW1hbmRfbGluZSh0cmFja2VyX2ZkPXRyYWNrZXJfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVfaGFuZGxlPWNoaWxkX3IpCisgICAgICAgICAgICBzZWxmLl9mZHMuZXh0ZW5kKFtjaGlsZF9yLCBjaGlsZF93XSkKKyAgICAgICAgICAgIHNlbGYucGlkID0gdXRpbC5zcGF3bnZfcGFzc2ZkcyhzcGF3bi5nZXRfZXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCwgc2VsZi5fZmRzKQorICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IHBhcmVudF9yCisgICAgICAgICAgICB3aXRoIG9wZW4ocGFyZW50X3csICd3YicsIGNsb3NlZmQ9RmFsc2UpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShmcC5nZXRidWZmZXIoKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHBhcmVudF9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChwYXJlbnRfciwpKQorICAgICAgICAgICAgZm9yIGZkIGluIChjaGlsZF9yLCBjaGlsZF93LCBwYXJlbnRfdyk6CisgICAgICAgICAgICAgICAgaWYgZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl93aW4zMi5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fd2luMzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1MzA2OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fd2luMzIucHkKQEAgLTAsMCArMSw5OSBAQAoraW1wb3J0IG9zCitpbXBvcnQgbXN2Y3J0CitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCitpbXBvcnQgX3dpbmFwaQorCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisjCisjCisjCisKK1RFUk1JTkFURSA9IDB4MTAwMDAKK1dJTkVYRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSkpCitXSU5TRVJWSUNFID0gc3lzLmV4ZWN1dGFibGUubG93ZXIoKS5lbmRzd2l0aCgicHl0aG9uc2VydmljZS5leGUiKQorCisjCisjIFdlIGRlZmluZSBhIFBvcGVuIGNsYXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBmcm9tIHN1YnByb2Nlc3MsIGJ1dAorIyB3aG9zZSBjb25zdHJ1Y3RvciB0YWtlcyBhIHByb2Nlc3Mgb2JqZWN0IGFzIGl0cyBhcmd1bWVudC4KKyMKKworY2xhc3MgUG9wZW4ob2JqZWN0KToKKyAgICAnJycKKyAgICBTdGFydCBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZSBjb2RlIG9mIGEgcHJvY2VzcyBvYmplY3QKKyAgICAnJycKKyAgICBtZXRob2QgPSAnc3Bhd24nCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBwcmVwX2RhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKKworICAgICAgICAjIHJlYWQgZW5kIG9mIHBpcGUgd2lsbCBiZSAic3RvbGVuIiBieSB0aGUgY2hpbGQgcHJvY2VzcworICAgICAgICAjIC0tIHNlZSBzcGF3bl9tYWluKCkgaW4gc3Bhd24ucHkuCisgICAgICAgIHJoYW5kbGUsIHdoYW5kbGUgPSBfd2luYXBpLkNyZWF0ZVBpcGUoTm9uZSwgMCkKKyAgICAgICAgd2ZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHdoYW5kbGUsIDApCisgICAgICAgIGNtZCA9IHNwYXduLmdldF9jb21tYW5kX2xpbmUocGFyZW50X3BpZD1vcy5nZXRwaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlX2hhbmRsZT1yaGFuZGxlKQorICAgICAgICBjbWQgPSAnICcuam9pbignIiVzIicgJSB4IGZvciB4IGluIGNtZCkKKworICAgICAgICB3aXRoIG9wZW4od2ZkLCAnd2InLCBjbG9zZWZkPVRydWUpIGFzIHRvX2NoaWxkOgorICAgICAgICAgICAgIyBzdGFydCBwcm9jZXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaHAsIGh0LCBwaWQsIHRpZCA9IF93aW5hcGkuQ3JlYXRlUHJvY2VzcygKKyAgICAgICAgICAgICAgICAgICAgc3Bhd24uZ2V0X2V4ZWN1dGFibGUoKSwgY21kLAorICAgICAgICAgICAgICAgICAgICBOb25lLCBOb25lLCBGYWxzZSwgMCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGh0KQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUocmhhbmRsZSkKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICAjIHNldCBhdHRyaWJ1dGVzIG9mIHNlbGYKKyAgICAgICAgICAgIHNlbGYucGlkID0gcGlkCisgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9oYW5kbGUgPSBocAorICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IGludChocCkKKyAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgX3dpbmFwaS5DbG9zZUhhbmRsZSwgKHNlbGYuc2VudGluZWwsKSkKKworICAgICAgICAgICAgIyBzZW5kIGluZm9ybWF0aW9uIHRvIGNoaWxkCisgICAgICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihzZWxmKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByZXBfZGF0YSwgdG9fY2hpbGQpCisgICAgICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJvY2Vzc19vYmosIHRvX2NoaWxkKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihOb25lKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgaGFuZGxlKToKKyAgICAgICAgYXNzZXJ0IHNlbGYgaXMgY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKQorICAgICAgICByZXR1cm4gcmVkdWN0aW9uLmR1cGxpY2F0ZShoYW5kbGUsIHNlbGYuc2VudGluZWwpCisKKyAgICBkZWYgd2FpdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBtc2VjcyA9IF93aW5hcGkuSU5GSU5JVEUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNlY3MgPSBtYXgoMCwgaW50KHRpbWVvdXQgKiAxMDAwICsgMC41KSkKKworICAgICAgICAgICAgcmVzID0gX3dpbmFwaS5XYWl0Rm9yU2luZ2xlT2JqZWN0KGludChzZWxmLl9oYW5kbGUpLCBtc2VjcykKKyAgICAgICAgICAgIGlmIHJlcyA9PSBfd2luYXBpLldBSVRfT0JKRUNUXzA6CisgICAgICAgICAgICAgICAgY29kZSA9IF93aW5hcGkuR2V0RXhpdENvZGVQcm9jZXNzKHNlbGYuX2hhbmRsZSkKKyAgICAgICAgICAgICAgICBpZiBjb2RlID09IFRFUk1JTkFURToKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IC1zaWduYWwuU0lHVEVSTQorICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IGNvZGUKKworICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCisKKyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYud2FpdCh0aW1lb3V0PTApCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBfd2luYXBpLlRlcm1pbmF0ZVByb2Nlc3MoaW50KHNlbGYuX2hhbmRsZSksIFRFUk1JTkFURSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTEuMCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weQppbmRleCAzZDMyYWRkLi42ODk1OWJmIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CkBAIC03LDcgKzcsNyBAQAogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKLV9fYWxsX18gPSBbJ1Byb2Nlc3MnLCAnY3VycmVudF9wcm9jZXNzJywgJ2FjdGl2ZV9jaGlsZHJlbiddCitfX2FsbF9fID0gWydCYXNlUHJvY2VzcycsICdjdXJyZW50X3Byb2Nlc3MnLCAnYWN0aXZlX2NoaWxkcmVuJ10KIAogIwogIyBJbXBvcnRzCkBAIC00Myw3ICs0Myw3IEBACiAgICAgUmV0dXJuIGxpc3Qgb2YgcHJvY2VzcyBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gbGl2ZSBjaGlsZCBwcm9jZXNzZXMKICAgICAnJycKICAgICBfY2xlYW51cCgpCi0gICAgcmV0dXJuIGxpc3QoX2N1cnJlbnRfcHJvY2Vzcy5fY2hpbGRyZW4pCisgICAgcmV0dXJuIGxpc3QoX2NoaWxkcmVuKQogCiAjCiAjCkBAIC01MSwzMyArNTEsMjkgQEAKIAogZGVmIF9jbGVhbnVwKCk6CiAgICAgIyBjaGVjayBmb3IgcHJvY2Vzc2VzIHdoaWNoIGhhdmUgZmluaXNoZWQKLSAgICBmb3IgcCBpbiBsaXN0KF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuKToKKyAgICBmb3IgcCBpbiBsaXN0KF9jaGlsZHJlbik6CiAgICAgICAgIGlmIHAuX3BvcGVuLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuLmRpc2NhcmQocCkKKyAgICAgICAgICAgIF9jaGlsZHJlbi5kaXNjYXJkKHApCiAKICMKICMgVGhlIGBQcm9jZXNzYCBjbGFzcwogIwogCi1jbGFzcyBQcm9jZXNzKG9iamVjdCk6CitjbGFzcyBCYXNlUHJvY2VzcyhvYmplY3QpOgogICAgICcnJwogICAgIFByb2Nlc3Mgb2JqZWN0cyByZXByZXNlbnQgYWN0aXZpdHkgdGhhdCBpcyBydW4gaW4gYSBzZXBhcmF0ZSBwcm9jZXNzCiAKLSAgICBUaGUgY2xhc3MgaXMgYW5hbGFnb3VzIHRvIGB0aHJlYWRpbmcuVGhyZWFkYAorICAgIFRoZSBjbGFzcyBpcyBhbmFsb2dvdXMgdG8gYHRocmVhZGluZy5UaHJlYWRgCiAgICAgJycnCi0gICAgX1BvcGVuID0gTm9uZQorICAgIGRlZiBfUG9wZW4oc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBncm91cD1Ob25lLCB0YXJnZXQ9Tm9uZSwgbmFtZT1Ob25lLCBhcmdzPSgpLCBrd2FyZ3M9e30sCiAgICAgICAgICAgICAgICAgICosIGRhZW1vbj1Ob25lKToKICAgICAgICAgYXNzZXJ0IGdyb3VwIGlzIE5vbmUsICdncm91cCBhcmd1bWVudCBtdXN0IGJlIE5vbmUgZm9yIG5vdycKLSAgICAgICAgY291bnQgPSBuZXh0KF9jdXJyZW50X3Byb2Nlc3MuX2NvdW50ZXIpCisgICAgICAgIGNvdW50ID0gbmV4dChfcHJvY2Vzc19jb3VudGVyKQogICAgICAgICBzZWxmLl9pZGVudGl0eSA9IF9jdXJyZW50X3Byb2Nlc3MuX2lkZW50aXR5ICsgKGNvdW50LCkKLSAgICAgICAgc2VsZi5fYXV0aGtleSA9IF9jdXJyZW50X3Byb2Nlc3MuX2F1dGhrZXkKLSAgICAgICAgaWYgZGFlbW9uIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBkYWVtb24KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX2RhZW1vbmljID0gX2N1cnJlbnRfcHJvY2Vzcy5fZGFlbW9uaWMKLSAgICAgICAgc2VsZi5fdGVtcGRpciA9IF9jdXJyZW50X3Byb2Nlc3MuX3RlbXBkaXIKKyAgICAgICAgc2VsZi5fY29uZmlnID0gX2N1cnJlbnRfcHJvY2Vzcy5fY29uZmlnLmNvcHkoKQogICAgICAgICBzZWxmLl9wYXJlbnRfcGlkID0gb3MuZ2V0cGlkKCkKICAgICAgICAgc2VsZi5fcG9wZW4gPSBOb25lCiAgICAgICAgIHNlbGYuX3RhcmdldCA9IHRhcmdldApAQCAtODUsNiArODEsOCBAQAogICAgICAgICBzZWxmLl9rd2FyZ3MgPSBkaWN0KGt3YXJncykKICAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgb3IgdHlwZShzZWxmKS5fX25hbWVfXyArICctJyArIFwKICAgICAgICAgICAgICAgICAgICAgICc6Jy5qb2luKHN0cihpKSBmb3IgaSBpbiBzZWxmLl9pZGVudGl0eSkKKyAgICAgICAgaWYgZGFlbW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kYWVtb24gPSBkYWVtb24KICAgICAgICAgX2RhbmdsaW5nLmFkZChzZWxmKQogCiAgICAgZGVmIHJ1bihzZWxmKToKQEAgLTEwMSwxNiArOTksMTIgQEAKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BvcGVuIGlzIE5vbmUsICdjYW5ub3Qgc3RhcnQgYSBwcm9jZXNzIHR3aWNlJwogICAgICAgICBhc3NlcnQgc2VsZi5fcGFyZW50X3BpZCA9PSBvcy5nZXRwaWQoKSwgXAogICAgICAgICAgICAgICAgJ2NhbiBvbmx5IHN0YXJ0IGEgcHJvY2VzcyBvYmplY3QgY3JlYXRlZCBieSBjdXJyZW50IHByb2Nlc3MnCi0gICAgICAgIGFzc2VydCBub3QgX2N1cnJlbnRfcHJvY2Vzcy5fZGFlbW9uaWMsIFwKKyAgICAgICAgYXNzZXJ0IG5vdCBfY3VycmVudF9wcm9jZXNzLl9jb25maWcuZ2V0KCdkYWVtb24nKSwgXAogICAgICAgICAgICAgICAgJ2RhZW1vbmljIHByb2Nlc3NlcyBhcmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBjaGlsZHJlbicKICAgICAgICAgX2NsZWFudXAoKQotICAgICAgICBpZiBzZWxmLl9Qb3BlbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIFBvcGVuID0gc2VsZi5fUG9wZW4KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZyb20gLmZvcmtpbmcgaW1wb3J0IFBvcGVuCi0gICAgICAgIHNlbGYuX3BvcGVuID0gUG9wZW4oc2VsZikKKyAgICAgICAgc2VsZi5fcG9wZW4gPSBzZWxmLl9Qb3BlbihzZWxmKQogICAgICAgICBzZWxmLl9zZW50aW5lbCA9IHNlbGYuX3BvcGVuLnNlbnRpbmVsCi0gICAgICAgIF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuLmFkZChzZWxmKQorICAgICAgICBfY2hpbGRyZW4uYWRkKHNlbGYpCiAKICAgICBkZWYgdGVybWluYXRlKHNlbGYpOgogICAgICAgICAnJycKQEAgLTEyNiw3ICsxMjAsNyBAQAogICAgICAgICBhc3NlcnQgc2VsZi5fcG9wZW4gaXMgbm90IE5vbmUsICdjYW4gb25seSBqb2luIGEgc3RhcnRlZCBwcm9jZXNzJwogICAgICAgICByZXMgPSBzZWxmLl9wb3Blbi53YWl0KHRpbWVvdXQpCiAgICAgICAgIGlmIHJlcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuLmRpc2NhcmQoc2VsZikKKyAgICAgICAgICAgIF9jaGlsZHJlbi5kaXNjYXJkKHNlbGYpCiAKICAgICBkZWYgaXNfYWxpdmUoc2VsZik6CiAgICAgICAgICcnJwpAQCAtMTU0LDcgKzE0OCw3IEBACiAgICAgICAgICcnJwogICAgICAgICBSZXR1cm4gd2hldGhlciBwcm9jZXNzIGlzIGEgZGFlbW9uCiAgICAgICAgICcnJwotICAgICAgICByZXR1cm4gc2VsZi5fZGFlbW9uaWMKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZpZy5nZXQoJ2RhZW1vbicsIEZhbHNlKQogCiAgICAgQGRhZW1vbi5zZXR0ZXIKICAgICBkZWYgZGFlbW9uKHNlbGYsIGRhZW1vbmljKToKQEAgLTE2MiwxOCArMTU2LDE4IEBACiAgICAgICAgIFNldCB3aGV0aGVyIHByb2Nlc3MgaXMgYSBkYWVtb24KICAgICAgICAgJycnCiAgICAgICAgIGFzc2VydCBzZWxmLl9wb3BlbiBpcyBOb25lLCAncHJvY2VzcyBoYXMgYWxyZWFkeSBzdGFydGVkJwotICAgICAgICBzZWxmLl9kYWVtb25pYyA9IGRhZW1vbmljCisgICAgICAgIHNlbGYuX2NvbmZpZ1snZGFlbW9uJ10gPSBkYWVtb25pYwogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGF1dGhrZXkoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9hdXRoa2V5CisgICAgICAgIHJldHVybiBzZWxmLl9jb25maWdbJ2F1dGhrZXknXQogCiAgICAgQGF1dGhrZXkuc2V0dGVyCiAgICAgZGVmIGF1dGhrZXkoc2VsZiwgYXV0aGtleSk6CiAgICAgICAgICcnJwogICAgICAgICBTZXQgYXV0aG9yaXphdGlvbiBrZXkgb2YgcHJvY2VzcwogICAgICAgICAnJycKLSAgICAgICAgc2VsZi5fYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCisgICAgICAgIHNlbGYuX2NvbmZpZ1snYXV0aGtleSddID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBleGl0Y29kZShzZWxmKToKQEAgLTIyNywxNyArMjIxLDE5IEBACiAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ3N0b3BwZWRbJXNdJyAlIF9leGl0Y29kZV90b19uYW1lLmdldChzdGF0dXMsIHN0YXR1cykKIAogICAgICAgICByZXR1cm4gJzwlcyglcywgJXMlcyk+JyAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBzZWxmLl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHNlbGYuX2RhZW1vbmljIGFuZCAnIGRhZW1vbicgb3IgJycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgc2VsZi5kYWVtb24gYW5kICcgZGFlbW9uJyBvciAnJykKIAogICAgICMjCiAKICAgICBkZWYgX2Jvb3RzdHJhcChzZWxmKToKLSAgICAgICAgZnJvbSAuIGltcG9ydCB1dGlsCi0gICAgICAgIGdsb2JhbCBfY3VycmVudF9wcm9jZXNzCisgICAgICAgIGZyb20gLiBpbXBvcnQgdXRpbCwgY29udGV4dAorICAgICAgICBnbG9iYWwgX2N1cnJlbnRfcHJvY2VzcywgX3Byb2Nlc3NfY291bnRlciwgX2NoaWxkcmVuCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBzZXQoKQotICAgICAgICAgICAgc2VsZi5fY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQorICAgICAgICAgICAgaWYgc2VsZi5fc3RhcnRfbWV0aG9kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQuX2ZvcmNlX3N0YXJ0X21ldGhvZChzZWxmLl9zdGFydF9tZXRob2QpCisgICAgICAgICAgICBfcHJvY2Vzc19jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KDEpCisgICAgICAgICAgICBfY2hpbGRyZW4gPSBzZXQoKQogICAgICAgICAgICAgaWYgc3lzLnN0ZGluIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKQEAgLTI4NSw4ICsyODEsOCBAQAogCiBjbGFzcyBBdXRoZW50aWNhdGlvblN0cmluZyhieXRlcyk6CiAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6Ci0gICAgICAgIGZyb20gLmZvcmtpbmcgaW1wb3J0IFBvcGVuCi0gICAgICAgIGlmIG5vdCBQb3Blbi50aHJlYWRfaXNfc3Bhd25pbmcoKToKKyAgICAgICAgZnJvbSAuY29udGV4dCBpbXBvcnQgZ2V0X3NwYXduaW5nX3BvcGVuCisgICAgICAgIGlmIGdldF9zcGF3bmluZ19wb3BlbigpIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAgICAgICAgJ1BpY2tsaW5nIGFuIEF1dGhlbnRpY2F0aW9uU3RyaW5nIG9iamVjdCBpcyAnCiAgICAgICAgICAgICAgICAgJ2Rpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMnCkBAIC0yOTcsMjAgKzI5MywyOSBAQAogIyBDcmVhdGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbWFpbiBwcm9jZXNzCiAjCiAKLWNsYXNzIF9NYWluUHJvY2VzcyhQcm9jZXNzKToKK2NsYXNzIF9NYWluUHJvY2VzcyhCYXNlUHJvY2Vzcyk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYuX2lkZW50aXR5ID0gKCkKLSAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBGYWxzZQogICAgICAgICBzZWxmLl9uYW1lID0gJ01haW5Qcm9jZXNzJwogICAgICAgICBzZWxmLl9wYXJlbnRfcGlkID0gTm9uZQogICAgICAgICBzZWxmLl9wb3BlbiA9IE5vbmUKLSAgICAgICAgc2VsZi5fY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQotICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IHNldCgpCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhvcy51cmFuZG9tKDMyKSkKLSAgICAgICAgc2VsZi5fdGVtcGRpciA9IE5vbmUKKyAgICAgICAgc2VsZi5fY29uZmlnID0geydhdXRoa2V5JzogQXV0aGVudGljYXRpb25TdHJpbmcob3MudXJhbmRvbSgzMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbXByZWZpeCc6ICcvbXAnfQorICAgICAgICAjIE5vdGUgdGhhdCBzb21lIHZlcnNpb25zIG9mIEZyZWVCU0Qgb25seSBhbGxvdyBuYW1lZAorICAgICAgICAjIHNlbWFwaG9yZXMgdG8gaGF2ZSBuYW1lcyBvZiB1cCB0byAxNCBjaGFyYWN0ZXJzLiAgVGhlcmVmb3JlCisgICAgICAgICMgd2UgY2hvb3NlIGEgc2hvcnQgcHJlZml4LgorICAgICAgICAjCisgICAgICAgICMgT24gTWFjT1NYIGluIGEgc2FuZGJveCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHVzZSBhCisgICAgICAgICMgZGlmZmVyZW50IHByZWZpeCAtLSBzZWUgIzE5NDc4LgorICAgICAgICAjCisgICAgICAgICMgRXZlcnl0aGluZyBpbiBzZWxmLl9jb25maWcgd2lsbCBiZSBpbmhlcml0ZWQgYnkgZGVzY2VuZGFudAorICAgICAgICAjIHByb2Nlc3Nlcy4KKwogCiBfY3VycmVudF9wcm9jZXNzID0gX01haW5Qcm9jZXNzKCkKK19wcm9jZXNzX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKK19jaGlsZHJlbiA9IHNldCgpCiBkZWwgX01haW5Qcm9jZXNzCiAKICMKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKaW5kZXggMzcyNzFmYi4uZjY1MDc3MSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKQEAgLTE4LDExICsxOCwxNCBAQAogaW1wb3J0IGVycm5vCiAKIGZyb20gcXVldWUgaW1wb3J0IEVtcHR5LCBGdWxsCisKIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCBQaXBlCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgTG9jaywgQm91bmRlZFNlbWFwaG9yZSwgU2VtYXBob3JlLCBDb25kaXRpb24KLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGRlYnVnLCBpbmZvLCBGaW5hbGl6ZSwgcmVnaXN0ZXJfYWZ0ZXJfZm9yawotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgYXNzZXJ0X3NwYXduaW5nCisKK2Zyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorZnJvbSAuIGltcG9ydCBjb250ZXh0CisKK2Zyb20gLnV0aWwgaW1wb3J0IGRlYnVnLCBpbmZvLCBGaW5hbGl6ZSwgcmVnaXN0ZXJfYWZ0ZXJfZm9yaywgaXNfZXhpdGluZworZnJvbSAucmVkdWN0aW9uIGltcG9ydCBGb3JraW5nUGlja2xlcgogCiAjCiAjIFF1ZXVlIHR5cGUgdXNpbmcgYSBwaXBlLCBidWZmZXIgYW5kIHRocmVhZApAQCAtMzAsMTggKzMzLDE4IEBACiAKIGNsYXNzIFF1ZXVlKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wLCAqLCBjdHgpOgogICAgICAgICBpZiBtYXhzaXplIDw9IDA6CiAgICAgICAgICAgICBtYXhzaXplID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrLlNFTV9WQUxVRV9NQVgKICAgICAgICAgc2VsZi5fbWF4c2l6ZSA9IG1heHNpemUKLSAgICAgICAgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIgPSBQaXBlKGR1cGxleD1GYWxzZSkKLSAgICAgICAgc2VsZi5fcmxvY2sgPSBMb2NrKCkKKyAgICAgICAgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIgPSBjb25uZWN0aW9uLlBpcGUoZHVwbGV4PUZhbHNlKQorICAgICAgICBzZWxmLl9ybG9jayA9IGN0eC5Mb2NrKCkKICAgICAgICAgc2VsZi5fb3BpZCA9IG9zLmdldHBpZCgpCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBOb25lCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl93bG9jayA9IExvY2soKQotICAgICAgICBzZWxmLl9zZW0gPSBCb3VuZGVkU2VtYXBob3JlKG1heHNpemUpCisgICAgICAgICAgICBzZWxmLl93bG9jayA9IGN0eC5Mb2NrKCkKKyAgICAgICAgc2VsZi5fc2VtID0gY3R4LkJvdW5kZWRTZW1hcGhvcmUobWF4c2l6ZSkKICAgICAgICAgIyBGb3IgdXNlIGJ5IGNvbmN1cnJlbnQuZnV0dXJlcwogICAgICAgICBzZWxmLl9pZ25vcmVfZXBpcGUgPSBGYWxzZQogCkBAIC01MSw3ICs1NCw3IEBACiAgICAgICAgICAgICByZWdpc3Rlcl9hZnRlcl9mb3JrKHNlbGYsIFF1ZXVlLl9hZnRlcl9mb3JrKQogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgYXNzZXJ0X3NwYXduaW5nKHNlbGYpCisgICAgICAgIGNvbnRleHQuYXNzZXJ0X3NwYXduaW5nKHNlbGYpCiAgICAgICAgIHJldHVybiAoc2VsZi5faWdub3JlX2VwaXBlLCBzZWxmLl9tYXhzaXplLCBzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciwKICAgICAgICAgICAgICAgICBzZWxmLl9ybG9jaywgc2VsZi5fd2xvY2ssIHNlbGYuX3NlbSwgc2VsZi5fb3BpZCkKIApAQCAtNjksOCArNzIsOCBAQAogICAgICAgICBzZWxmLl9qb2luY2FuY2VsbGVkID0gRmFsc2UKICAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKICAgICAgICAgc2VsZi5fY2xvc2UgPSBOb25lCi0gICAgICAgIHNlbGYuX3NlbmQgPSBzZWxmLl93cml0ZXIuc2VuZAotICAgICAgICBzZWxmLl9yZWN2ID0gc2VsZi5fcmVhZGVyLnJlY3YKKyAgICAgICAgc2VsZi5fc2VuZF9ieXRlcyA9IHNlbGYuX3dyaXRlci5zZW5kX2J5dGVzCisgICAgICAgIHNlbGYuX3JlY3ZfYnl0ZXMgPSBzZWxmLl9yZWFkZXIucmVjdl9ieXRlcwogICAgICAgICBzZWxmLl9wb2xsID0gc2VsZi5fcmVhZGVyLnBvbGwKIAogICAgIGRlZiBwdXQoc2VsZiwgb2JqLCBibG9jaz1UcnVlLCB0aW1lb3V0PU5vbmUpOgpAQCAtODksMTQgKzkyLDkgQEAKIAogICAgIGRlZiBnZXQoc2VsZiwgYmxvY2s9VHJ1ZSwgdGltZW91dD1Ob25lKToKICAgICAgICAgaWYgYmxvY2sgYW5kIHRpbWVvdXQgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3Jsb2NrLmFjcXVpcmUoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlcyA9IHNlbGYuX3JlY3YoKQotICAgICAgICAgICAgICAgIHNlbGYuX3NlbS5yZWxlYXNlKCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHNlbGYuX3Jsb2NrLnJlbGVhc2UoKQotCisgICAgICAgICAgICB3aXRoIHNlbGYuX3Jsb2NrOgorICAgICAgICAgICAgICAgIHJlcyA9IHNlbGYuX3JlY3ZfYnl0ZXMoKQorICAgICAgICAgICAgc2VsZi5fc2VtLnJlbGVhc2UoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgYmxvY2s6CiAgICAgICAgICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKQEAgLTEwOSwxMSArMTA3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFbXB0eQogICAgICAgICAgICAgICAgIGVsaWYgbm90IHNlbGYuX3BvbGwoKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRW1wdHkKLSAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2KCkKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2X2J5dGVzKCkKICAgICAgICAgICAgICAgICBzZWxmLl9zZW0ucmVsZWFzZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlcwogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzZWxmLl9ybG9jay5yZWxlYXNlKCkKKyAgICAgICAgIyB1bnNlcmlhbGl6ZSB0aGUgZGF0YSBhZnRlciBoYXZpbmcgcmVsZWFzZWQgdGhlIGxvY2sKKyAgICAgICAgcmV0dXJuIEZvcmtpbmdQaWNrbGVyLmxvYWRzKHJlcykKIAogICAgIGRlZiBxc2l6ZShzZWxmKToKICAgICAgICAgIyBSYWlzZXMgTm90SW1wbGVtZW50ZWRFcnJvciBvbiBNYWMgT1NYIGJlY2F1c2Ugb2YgYnJva2VuIHNlbV9nZXR2YWx1ZSgpCkBAIC0xNTgsNyArMTU3LDcgQEAKICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKICAgICAgICAgc2VsZi5fdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCgKICAgICAgICAgICAgIHRhcmdldD1RdWV1ZS5fZmVlZCwKLSAgICAgICAgICAgIGFyZ3M9KHNlbGYuX2J1ZmZlciwgc2VsZi5fbm90ZW1wdHksIHNlbGYuX3NlbmQsCisgICAgICAgICAgICBhcmdzPShzZWxmLl9idWZmZXIsIHNlbGYuX25vdGVtcHR5LCBzZWxmLl9zZW5kX2J5dGVzLAogICAgICAgICAgICAgICAgICAgc2VsZi5fd2xvY2ssIHNlbGYuX3dyaXRlci5jbG9zZSwgc2VsZi5faWdub3JlX2VwaXBlKSwKICAgICAgICAgICAgIG5hbWU9J1F1ZXVlRmVlZGVyVGhyZWFkJwogICAgICAgICAgICAgKQpAQCAtMjEwLDEwICsyMDksOCBAQAogICAgICAgICAgICAgbm90ZW1wdHkucmVsZWFzZSgpCiAKICAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9mZWVkKGJ1ZmZlciwgbm90ZW1wdHksIHNlbmQsIHdyaXRlbG9jaywgY2xvc2UsIGlnbm9yZV9lcGlwZSk6CisgICAgZGVmIF9mZWVkKGJ1ZmZlciwgbm90ZW1wdHksIHNlbmRfYnl0ZXMsIHdyaXRlbG9jaywgY2xvc2UsIGlnbm9yZV9lcGlwZSk6CiAgICAgICAgIGRlYnVnKCdzdGFydGluZyB0aHJlYWQgdG8gZmVlZCBkYXRhIHRvIHBpcGUnKQotICAgICAgICBmcm9tIC51dGlsIGltcG9ydCBpc19leGl0aW5nCi0KICAgICAgICAgbmFjcXVpcmUgPSBub3RlbXB0eS5hY3F1aXJlCiAgICAgICAgIG5yZWxlYXNlID0gbm90ZW1wdHkucmVsZWFzZQogICAgICAgICBud2FpdCA9IG5vdGVtcHR5LndhaXQKQEAgLTI0MSwxMiArMjM4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgogCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNlcmlhbGl6ZSB0aGUgZGF0YSBiZWZvcmUgYWNxdWlyaW5nIHRoZSBsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBGb3JraW5nUGlja2xlci5kdW1wcyhvYmopCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiB3YWNxdWlyZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQob2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfYnl0ZXMob2JqKQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWNxdWlyZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kKG9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9ieXRlcyhvYmopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JlbGVhc2UoKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgpAQCAtMjc5LDEwICsyNzgsMTAgQEAKIAogY2xhc3MgSm9pbmFibGVRdWV1ZShRdWV1ZSk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wKToKLSAgICAgICAgUXVldWUuX19pbml0X18oc2VsZiwgbWF4c2l6ZSkKLSAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9IFNlbWFwaG9yZSgwKQotICAgICAgICBzZWxmLl9jb25kID0gQ29uZGl0aW9uKCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wLCAqLCBjdHgpOgorICAgICAgICBRdWV1ZS5fX2luaXRfXyhzZWxmLCBtYXhzaXplLCBjdHg9Y3R4KQorICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID0gY3R4LlNlbWFwaG9yZSgwKQorICAgICAgICBzZWxmLl9jb25kID0gY3R4LkNvbmRpdGlvbigpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgogICAgICAgICByZXR1cm4gUXVldWUuX19nZXRzdGF0ZV9fKHNlbGYpICsgKHNlbGYuX2NvbmQsIHNlbGYuX3VuZmluaXNoZWRfdGFza3MpCkBAIC0zMzIsNDggKzMzMSwzNyBAQAogCiBjbGFzcyBTaW1wbGVRdWV1ZShvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciA9IFBpcGUoZHVwbGV4PUZhbHNlKQotICAgICAgICBzZWxmLl9ybG9jayA9IExvY2soKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjdHgpOgorICAgICAgICBzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciA9IGNvbm5lY3Rpb24uUGlwZShkdXBsZXg9RmFsc2UpCisgICAgICAgIHNlbGYuX3Jsb2NrID0gY3R4LkxvY2soKQogICAgICAgICBzZWxmLl9wb2xsID0gc2VsZi5fcmVhZGVyLnBvbGwKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICBzZWxmLl93bG9jayA9IE5vbmUKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gTG9jaygpCi0gICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCisgICAgICAgICAgICBzZWxmLl93bG9jayA9IGN0eC5Mb2NrKCkKIAogICAgIGRlZiBlbXB0eShzZWxmKToKICAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9wb2xsKCkKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyLCBzZWxmLl9ybG9jaywgc2VsZi5fd2xvY2spCiAKICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKICAgICAgICAgKHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyLCBzZWxmLl9ybG9jaywgc2VsZi5fd2xvY2spID0gc3RhdGUKLSAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAotICAgIGRlZiBfbWFrZV9tZXRob2RzKHNlbGYpOgotICAgICAgICByZWN2ID0gc2VsZi5fcmVhZGVyLnJlY3YKLSAgICAgICAgcmFjcXVpcmUsIHJyZWxlYXNlID0gc2VsZi5fcmxvY2suYWNxdWlyZSwgc2VsZi5fcmxvY2sucmVsZWFzZQotICAgICAgICBkZWYgZ2V0KCk6Ci0gICAgICAgICAgICByYWNxdWlyZSgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlY3YoKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBycmVsZWFzZSgpCi0gICAgICAgIHNlbGYuZ2V0ID0gZ2V0CisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLl9ybG9jazoKKyAgICAgICAgICAgIHJlcyA9IHNlbGYuX3JlYWRlci5yZWN2X2J5dGVzKCkKKyAgICAgICAgIyB1bnNlcmlhbGl6ZSB0aGUgZGF0YSBhZnRlciBoYXZpbmcgcmVsZWFzZWQgdGhlIGxvY2sKKyAgICAgICAgcmV0dXJuIEZvcmtpbmdQaWNrbGVyLmxvYWRzKHJlcykKIAorICAgIGRlZiBwdXQoc2VsZiwgb2JqKToKKyAgICAgICAgIyBzZXJpYWxpemUgdGhlIGRhdGEgYmVmb3JlIGFjcXVpcmluZyB0aGUgbG9jaworICAgICAgICBvYmogPSBGb3JraW5nUGlja2xlci5kdW1wcyhvYmopCiAgICAgICAgIGlmIHNlbGYuX3dsb2NrIGlzIE5vbmU6CiAgICAgICAgICAgICAjIHdyaXRlcyB0byBhIG1lc3NhZ2Ugb3JpZW50ZWQgd2luMzIgcGlwZSBhcmUgYXRvbWljCi0gICAgICAgICAgICBzZWxmLnB1dCA9IHNlbGYuX3dyaXRlci5zZW5kCisgICAgICAgICAgICBzZWxmLl93cml0ZXIuc2VuZF9ieXRlcyhvYmopCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZW5kID0gc2VsZi5fd3JpdGVyLnNlbmQKLSAgICAgICAgICAgIHdhY3F1aXJlLCB3cmVsZWFzZSA9IHNlbGYuX3dsb2NrLmFjcXVpcmUsIHNlbGYuX3dsb2NrLnJlbGVhc2UKLSAgICAgICAgICAgIGRlZiBwdXQob2JqKToKLSAgICAgICAgICAgICAgICB3YWNxdWlyZSgpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VuZChvYmopCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgd3JlbGVhc2UoKQotICAgICAgICAgICAgc2VsZi5wdXQgPSBwdXQKKyAgICAgICAgICAgIHdpdGggc2VsZi5fd2xvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVyLnNlbmRfYnl0ZXMob2JqKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weQppbmRleCA2NTZmYThmLi4wMWU2ZGUyIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weQpAQCAtMSw2ICsxLDUgQEAKICMKLSMgTW9kdWxlIHRvIGFsbG93IGNvbm5lY3Rpb24gYW5kIHNvY2tldCBvYmplY3RzIHRvIGJlIHRyYW5zZmVycmVkCi0jIGJldHdlZW4gcHJvY2Vzc2VzCisjIE1vZHVsZSB3aGljaCBkZWFscyB3aXRoIHBpY2tsaW5nIG9mIG9iamVjdHMuCiAjCiAjIG11bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKICMKQEAgLTgsMjcgKzcsNTcgQEAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCi1fX2FsbF9fID0gWydyZWR1Y2Vfc29ja2V0JywgJ3JlZHVjZV9jb25uZWN0aW9uJywgJ3NlbmRfaGFuZGxlJywgJ3JlY3ZfaGFuZGxlJ10KLQoraW1wb3J0IGNvcHlyZWcKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbwogaW1wb3J0IG9zCi1pbXBvcnQgc3lzCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgc29ja2V0Ci1pbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgc3RydWN0Ci1pbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCiAKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IHJlZ2lzdGVyX2FmdGVyX2ZvcmssIGRlYnVnLCBzdWJfZGVidWcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGlzX2V4aXRpbmcsIHN1Yl93YXJuaW5nCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgdXRpbAogCitfX2FsbF9fID0gWydzZW5kX2hhbmRsZScsICdyZWN2X2hhbmRsZScsICdGb3JraW5nUGlja2xlcicsICdyZWdpc3RlcicsICdkdW1wJ10KKworCitIQVZFX1NFTkRfSEFORExFID0gKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yCisgICAgICAgICAgICAgICAgICAgIChoYXNhdHRyKHNvY2tldCwgJ0NNU0dfTEVOJykgYW5kCisgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKHNvY2tldCwgJ1NDTV9SSUdIVFMnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIoc29ja2V0LnNvY2tldCwgJ3NlbmRtc2cnKSkpCiAKICMKLSMKKyMgUGlja2xlciBzdWJjbGFzcwogIwogCi1pZiBub3Qoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3IgKGhhc2F0dHIoc29ja2V0LCAnQ01TR19MRU4nKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihzb2NrZXQsICdTQ01fUklHSFRTJykpKToKLSAgICByYWlzZSBJbXBvcnRFcnJvcigncGlja2xpbmcgb2YgY29ubmVjdGlvbnMgbm90IHN1cHBvcnRlZCcpCitjbGFzcyBGb3JraW5nUGlja2xlcihwaWNrbGUuUGlja2xlcik6CisgICAgJycnUGlja2xlciBzdWJjbGFzcyB1c2VkIGJ5IG11bHRpcHJvY2Vzc2luZy4nJycKKyAgICBfZXh0cmFfcmVkdWNlcnMgPSB7fQorICAgIF9jb3B5cmVnX2Rpc3BhdGNoX3RhYmxlID0gY29weXJlZy5kaXNwYXRjaF90YWJsZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncykKKyAgICAgICAgc2VsZi5kaXNwYXRjaF90YWJsZSA9IHNlbGYuX2NvcHlyZWdfZGlzcGF0Y2hfdGFibGUuY29weSgpCisgICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUudXBkYXRlKHNlbGYuX2V4dHJhX3JlZHVjZXJzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHJlZ2lzdGVyKGNscywgdHlwZSwgcmVkdWNlKToKKyAgICAgICAgJycnUmVnaXN0ZXIgYSByZWR1Y2UgZnVuY3Rpb24gZm9yIGEgdHlwZS4nJycKKyAgICAgICAgY2xzLl9leHRyYV9yZWR1Y2Vyc1t0eXBlXSA9IHJlZHVjZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGR1bXBzKGNscywgb2JqLCBwcm90b2NvbD1Ob25lKToKKyAgICAgICAgYnVmID0gaW8uQnl0ZXNJTygpCisgICAgICAgIGNscyhidWYsIHByb3RvY29sKS5kdW1wKG9iaikKKyAgICAgICAgcmV0dXJuIGJ1Zi5nZXRidWZmZXIoKQorCisgICAgbG9hZHMgPSBwaWNrbGUubG9hZHMKKworcmVnaXN0ZXIgPSBGb3JraW5nUGlja2xlci5yZWdpc3RlcgorCitkZWYgZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUpOgorICAgICcnJ1JlcGxhY2VtZW50IGZvciBwaWNrbGUuZHVtcCgpIHVzaW5nIEZvcmtpbmdQaWNrbGVyLicnJworICAgIEZvcmtpbmdQaWNrbGVyKGZpbGUsIHByb3RvY29sKS5kdW1wKG9iaikKIAogIwogIyBQbGF0Zm9ybSBzcGVjaWZpYyBkZWZpbml0aW9ucwpAQCAtMzYsMjAgKzY1LDQ0IEBACiAKIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICMgV2luZG93cwotICAgIF9fYWxsX18gKz0gWydyZWR1Y2VfcGlwZV9jb25uZWN0aW9uJ10KKyAgICBfX2FsbF9fICs9IFsnRHVwSGFuZGxlJywgJ2R1cGxpY2F0ZScsICdzdGVhbF9oYW5kbGUnXQogICAgIGltcG9ydCBfd2luYXBpCiAKKyAgICBkZWYgZHVwbGljYXRlKGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3M9Tm9uZSwgaW5oZXJpdGFibGU9RmFsc2UpOgorICAgICAgICAnJydEdXBsaWNhdGUgYSBoYW5kbGUuICAodGFyZ2V0X3Byb2Nlc3MgaXMgYSBoYW5kbGUgbm90IGEgcGlkISknJycKKyAgICAgICAgaWYgdGFyZ2V0X3Byb2Nlc3MgaXMgTm9uZToKKyAgICAgICAgICAgIHRhcmdldF9wcm9jZXNzID0gX3dpbmFwaS5HZXRDdXJyZW50UHJvY2VzcygpCisgICAgICAgIHJldHVybiBfd2luYXBpLkR1cGxpY2F0ZUhhbmRsZSgKKyAgICAgICAgICAgIF93aW5hcGkuR2V0Q3VycmVudFByb2Nlc3MoKSwgaGFuZGxlLCB0YXJnZXRfcHJvY2VzcywKKyAgICAgICAgICAgIDAsIGluaGVyaXRhYmxlLCBfd2luYXBpLkRVUExJQ0FURV9TQU1FX0FDQ0VTUykKKworICAgIGRlZiBzdGVhbF9oYW5kbGUoc291cmNlX3BpZCwgaGFuZGxlKToKKyAgICAgICAgJycnU3RlYWwgYSBoYW5kbGUgZnJvbSBwcm9jZXNzIGlkZW50aWZpZWQgYnkgc291cmNlX3BpZC4nJycKKyAgICAgICAgc291cmNlX3Byb2Nlc3NfaGFuZGxlID0gX3dpbmFwaS5PcGVuUHJvY2VzcygKKyAgICAgICAgICAgIF93aW5hcGkuUFJPQ0VTU19EVVBfSEFORExFLCBGYWxzZSwgc291cmNlX3BpZCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIF93aW5hcGkuRHVwbGljYXRlSGFuZGxlKAorICAgICAgICAgICAgICAgIHNvdXJjZV9wcm9jZXNzX2hhbmRsZSwgaGFuZGxlLAorICAgICAgICAgICAgICAgIF93aW5hcGkuR2V0Q3VycmVudFByb2Nlc3MoKSwgMCwgRmFsc2UsCisgICAgICAgICAgICAgICAgX3dpbmFwaS5EVVBMSUNBVEVfU0FNRV9BQ0NFU1MgfCBfd2luYXBpLkRVUExJQ0FURV9DTE9TRV9TT1VSQ0UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHNvdXJjZV9wcm9jZXNzX2hhbmRsZSkKKwogICAgIGRlZiBzZW5kX2hhbmRsZShjb25uLCBoYW5kbGUsIGRlc3RpbmF0aW9uX3BpZCk6CisgICAgICAgICcnJ1NlbmQgYSBoYW5kbGUgb3ZlciBhIGxvY2FsIGNvbm5lY3Rpb24uJycnCiAgICAgICAgIGRoID0gRHVwSGFuZGxlKGhhbmRsZSwgX3dpbmFwaS5EVVBMSUNBVEVfU0FNRV9BQ0NFU1MsIGRlc3RpbmF0aW9uX3BpZCkKICAgICAgICAgY29ubi5zZW5kKGRoKQogCiAgICAgZGVmIHJlY3ZfaGFuZGxlKGNvbm4pOgorICAgICAgICAnJydSZWNlaXZlIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJwogICAgICAgICByZXR1cm4gY29ubi5yZWN2KCkuZGV0YWNoKCkKIAogICAgIGNsYXNzIER1cEhhbmRsZShvYmplY3QpOgorICAgICAgICAnJydQaWNrbGFibGUgd3JhcHBlciBmb3IgYSBoYW5kbGUuJycnCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGUsIGFjY2VzcywgcGlkPU5vbmUpOgotICAgICAgICAgICAgIyBkdXBsaWNhdGUgaGFuZGxlIGZvciBwcm9jZXNzIHdpdGggZ2l2ZW4gcGlkCiAgICAgICAgICAgICBpZiBwaWQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFdlIGp1c3QgZHVwbGljYXRlIHRoZSBoYW5kbGUgaW4gdGhlIGN1cnJlbnQgcHJvY2VzcyBhbmQKKyAgICAgICAgICAgICAgICAjIGxldCB0aGUgcmVjZWl2aW5nIHByb2Nlc3Mgc3RlYWwgdGhlIGhhbmRsZS4KICAgICAgICAgICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQogICAgICAgICAgICAgcHJvYyA9IF93aW5hcGkuT3BlblByb2Nlc3MoX3dpbmFwaS5QUk9DRVNTX0RVUF9IQU5ETEUsIEZhbHNlLCBwaWQpCiAgICAgICAgICAgICB0cnk6CkBAIC02Miw5ICsxMTUsMTIgQEAKICAgICAgICAgICAgIHNlbGYuX3BpZCA9IHBpZAogCiAgICAgICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgICAgICAnJydHZXQgdGhlIGhhbmRsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuJycnCiAgICAgICAgICAgICAjIHJldHJpZXZlIGhhbmRsZSBmcm9tIHByb2Nlc3Mgd2hpY2ggY3VycmVudGx5IG93bnMgaXQKICAgICAgICAgICAgIGlmIHNlbGYuX3BpZCA9PSBvcy5nZXRwaWQoKToKKyAgICAgICAgICAgICAgICAjIFRoZSBoYW5kbGUgaGFzIGFscmVhZHkgYmVlbiBkdXBsaWNhdGVkIGZvciB0aGlzIHByb2Nlc3MuCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZQorICAgICAgICAgICAgIyBXZSBtdXN0IHN0ZWFsIHRoZSBoYW5kbGUgZnJvbSB0aGUgcHJvY2VzcyB3aG9zZSBwaWQgaXMgc2VsZi5fcGlkLgogICAgICAgICAgICAgcHJvYyA9IF93aW5hcGkuT3BlblByb2Nlc3MoX3dpbmFwaS5QUk9DRVNTX0RVUF9IQU5ETEUsIEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGlkKQogICAgICAgICAgICAgdHJ5OgpAQCAtNzQsMjA3ICsxMzAsMTEyIEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUocHJvYykKIAotICAgIGNsYXNzIER1cFNvY2tldChvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc29jayk6Ci0gICAgICAgICAgICBuZXdfc29jayA9IHNvY2suZHVwKCkKLSAgICAgICAgICAgIGRlZiBzZW5kKGNvbm4sIHBpZCk6Ci0gICAgICAgICAgICAgICAgc2hhcmUgPSBuZXdfc29jay5zaGFyZShwaWQpCi0gICAgICAgICAgICAgICAgY29ubi5zZW5kX2J5dGVzKHNoYXJlKQotICAgICAgICAgICAgc2VsZi5faWQgPSByZXNvdXJjZV9zaGFyZXIucmVnaXN0ZXIoc2VuZCwgbmV3X3NvY2suY2xvc2UpCi0KLSAgICAgICAgZGVmIGRldGFjaChzZWxmKToKLSAgICAgICAgICAgIGNvbm4gPSByZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2hhcmUgPSBjb25uLnJlY3ZfYnl0ZXMoKQotICAgICAgICAgICAgICAgIHJldHVybiBzb2NrZXQuZnJvbXNoYXJlKHNoYXJlKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKLQotICAgIGRlZiByZWR1Y2Vfc29ja2V0KHMpOgotICAgICAgICByZXR1cm4gcmVidWlsZF9zb2NrZXQsIChEdXBTb2NrZXQocyksKQotCi0gICAgZGVmIHJlYnVpbGRfc29ja2V0KGRzKToKLSAgICAgICAgcmV0dXJuIGRzLmRldGFjaCgpCi0KLSAgICBkZWYgcmVkdWNlX2Nvbm5lY3Rpb24oY29ubik6Ci0gICAgICAgIGhhbmRsZSA9IGNvbm4uZmlsZW5vKCkKLSAgICAgICAgd2l0aCBzb2NrZXQuZnJvbWZkKGhhbmRsZSwgc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKLSAgICAgICAgICAgIGRzID0gRHVwU29ja2V0KHMpCi0gICAgICAgICAgICByZXR1cm4gcmVidWlsZF9jb25uZWN0aW9uLCAoZHMsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCi0KLSAgICBkZWYgcmVidWlsZF9jb25uZWN0aW9uKGRzLCByZWFkYWJsZSwgd3JpdGFibGUpOgotICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDb25uZWN0aW9uCi0gICAgICAgIHNvY2sgPSBkcy5kZXRhY2goKQotICAgICAgICByZXR1cm4gQ29ubmVjdGlvbihzb2NrLmRldGFjaCgpLCByZWFkYWJsZSwgd3JpdGFibGUpCi0KLSAgICBkZWYgcmVkdWNlX3BpcGVfY29ubmVjdGlvbihjb25uKToKLSAgICAgICAgYWNjZXNzID0gKChfd2luYXBpLkZJTEVfR0VORVJJQ19SRUFEIGlmIGNvbm4ucmVhZGFibGUgZWxzZSAwKSB8Ci0gICAgICAgICAgICAgICAgICAoX3dpbmFwaS5GSUxFX0dFTkVSSUNfV1JJVEUgaWYgY29ubi53cml0YWJsZSBlbHNlIDApKQotICAgICAgICBkaCA9IER1cEhhbmRsZShjb25uLmZpbGVubygpLCBhY2Nlc3MpCi0gICAgICAgIHJldHVybiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbiwgKGRoLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQotCi0gICAgZGVmIHJlYnVpbGRfcGlwZV9jb25uZWN0aW9uKGRoLCByZWFkYWJsZSwgd3JpdGFibGUpOgotICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBQaXBlQ29ubmVjdGlvbgotICAgICAgICBoYW5kbGUgPSBkaC5kZXRhY2goKQotICAgICAgICByZXR1cm4gUGlwZUNvbm5lY3Rpb24oaGFuZGxlLCByZWFkYWJsZSwgd3JpdGFibGUpCi0KIGVsc2U6CiAgICAgIyBVbml4CisgICAgX19hbGxfXyArPSBbJ0R1cEZkJywgJ3NlbmRmZHMnLCAncmVjdmZkcyddCisgICAgaW1wb3J0IGFycmF5CiAKICAgICAjIE9uIE1hY09TWCB3ZSBzaG91bGQgYWNrbm93bGVkZ2UgcmVjZWlwdCBvZiBmZHMgLS0gc2VlIElzc3VlMTQ2NjkKICAgICBBQ0tOT1dMRURHRSA9IHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJwogCi0gICAgZGVmIHNlbmRfaGFuZGxlKGNvbm4sIGhhbmRsZSwgZGVzdGluYXRpb25fcGlkKToKLSAgICAgICAgd2l0aCBzb2NrZXQuZnJvbWZkKGNvbm4uZmlsZW5vKCksIHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBzLnNlbmRtc2coW2IneCddLCBbKHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU0NNX1JJR0hUUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soIkBpIiwgaGFuZGxlKSldKQotICAgICAgICBpZiBBQ0tOT1dMRURHRSBhbmQgY29ubi5yZWN2X2J5dGVzKCkgIT0gYidBQ0snOgorICAgIGRlZiBzZW5kZmRzKHNvY2ssIGZkcyk6CisgICAgICAgICcnJ1NlbmQgYW4gYXJyYXkgb2YgZmRzIG92ZXIgYW4gQUZfVU5JWCBzb2NrZXQuJycnCisgICAgICAgIGZkcyA9IGFycmF5LmFycmF5KCdpJywgZmRzKQorICAgICAgICBtc2cgPSBieXRlcyhbbGVuKGZkcykgJSAyNTZdKQorICAgICAgICBzb2NrLnNlbmRtc2coW21zZ10sIFsoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TQ01fUklHSFRTLCBmZHMpXSkKKyAgICAgICAgaWYgQUNLTk9XTEVER0UgYW5kIHNvY2sucmVjdigxKSAhPSBiJ0EnOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdkaWQgbm90IHJlY2VpdmUgYWNrbm93bGVkZ2VtZW50IG9mIGZkJykKIAotICAgIGRlZiByZWN2X2hhbmRsZShjb25uKToKLSAgICAgICAgc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZSgiQGkiKQorICAgIGRlZiByZWN2ZmRzKHNvY2ssIHNpemUpOgorICAgICAgICAnJydSZWNlaXZlIGFuIGFycmF5IG9mIGZkcyBvdmVyIGFuIEFGX1VOSVggc29ja2V0LicnJworICAgICAgICBhID0gYXJyYXkuYXJyYXkoJ2knKQorICAgICAgICBieXRlc19zaXplID0gYS5pdGVtc2l6ZSAqIHNpemUKKyAgICAgICAgbXNnLCBhbmNkYXRhLCBmbGFncywgYWRkciA9IHNvY2sucmVjdm1zZygxLCBzb2NrZXQuQ01TR19MRU4oYnl0ZXNfc2l6ZSkpCisgICAgICAgIGlmIG5vdCBtc2cgYW5kIG5vdCBhbmNkYXRhOgorICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgQUNLTk9XTEVER0U6CisgICAgICAgICAgICAgICAgc29jay5zZW5kKGInQScpCisgICAgICAgICAgICBpZiBsZW4oYW5jZGF0YSkgIT0gMToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JlY2VpdmVkICVkIGl0ZW1zIG9mIGFuY2RhdGEnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGFuY2RhdGEpKQorICAgICAgICAgICAgY21zZ19sZXZlbCwgY21zZ190eXBlLCBjbXNnX2RhdGEgPSBhbmNkYXRhWzBdCisgICAgICAgICAgICBpZiAoY21zZ19sZXZlbCA9PSBzb2NrZXQuU09MX1NPQ0tFVCBhbmQKKyAgICAgICAgICAgICAgICBjbXNnX3R5cGUgPT0gc29ja2V0LlNDTV9SSUdIVFMpOgorICAgICAgICAgICAgICAgIGlmIGxlbihjbXNnX2RhdGEpICUgYS5pdGVtc2l6ZSAhPSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICAgICAgICAgYS5mcm9tYnl0ZXMoY21zZ19kYXRhKQorICAgICAgICAgICAgICAgIGFzc2VydCBsZW4oYSkgJSAyNTYgPT0gbXNnWzBdCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QoYSkKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdJbnZhbGlkIGRhdGEgcmVjZWl2ZWQnKQorCisgICAgZGVmIHNlbmRfaGFuZGxlKGNvbm4sIGhhbmRsZSwgZGVzdGluYXRpb25fcGlkKToKKyAgICAgICAgJycnU2VuZCBhIGhhbmRsZSBvdmVyIGEgbG9jYWwgY29ubmVjdGlvbi4nJycKICAgICAgICAgd2l0aCBzb2NrZXQuZnJvbWZkKGNvbm4uZmlsZW5vKCksIHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBtc2csIGFuY2RhdGEsIGZsYWdzLCBhZGRyID0gcy5yZWN2bXNnKDEsIHNvY2tldC5DTVNHX0xFTihzaXplKSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBBQ0tOT1dMRURHRToKLSAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kX2J5dGVzKGInQUNLJykKLSAgICAgICAgICAgICAgICBjbXNnX2xldmVsLCBjbXNnX3R5cGUsIGNtc2dfZGF0YSA9IGFuY2RhdGFbMF0KLSAgICAgICAgICAgICAgICBpZiAoY21zZ19sZXZlbCA9PSBzb2NrZXQuU09MX1NPQ0tFVCBhbmQKLSAgICAgICAgICAgICAgICAgICAgY21zZ190eXBlID09IHNvY2tldC5TQ01fUklHSFRTKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soIkBpIiwgY21zZ19kYXRhWzpzaXplXSlbMF0KLSAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvciwgc3RydWN0LmVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0ludmFsaWQgZGF0YSByZWNlaXZlZCcpCisgICAgICAgICAgICBzZW5kZmRzKHMsIFtoYW5kbGVdKQogCi0gICAgY2xhc3MgRHVwRmQob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZkKToKLSAgICAgICAgICAgIG5ld19mZCA9IG9zLmR1cChmZCkKLSAgICAgICAgICAgIGRlZiBzZW5kKGNvbm4sIHBpZCk6Ci0gICAgICAgICAgICAgICAgc2VuZF9oYW5kbGUoY29ubiwgbmV3X2ZkLCBwaWQpCi0gICAgICAgICAgICBkZWYgY2xvc2UoKToKLSAgICAgICAgICAgICAgICBvcy5jbG9zZShuZXdfZmQpCi0gICAgICAgICAgICBzZWxmLl9pZCA9IHJlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBjbG9zZSkKKyAgICBkZWYgcmVjdl9oYW5kbGUoY29ubik6CisgICAgICAgICcnJ1JlY2VpdmUgYSBoYW5kbGUgb3ZlciBhIGxvY2FsIGNvbm5lY3Rpb24uJycnCisgICAgICAgIHdpdGggc29ja2V0LmZyb21mZChjb25uLmZpbGVubygpLCBzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgorICAgICAgICAgICAgcmV0dXJuIHJlY3ZmZHMocywgMSlbMF0KIAotICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgotICAgICAgICAgICAgY29ubiA9IHJlc291cmNlX3NoYXJlci5nZXRfY29ubmVjdGlvbihzZWxmLl9pZCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVjdl9oYW5kbGUoY29ubikKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgZGVmIER1cEZkKGZkKToKKyAgICAgICAgJycnUmV0dXJuIGEgd3JhcHBlciBmb3IgYW4gZmQuJycnCisgICAgICAgIHBvcGVuX29iaiA9IGNvbnRleHQuZ2V0X3NwYXduaW5nX3BvcGVuKCkKKyAgICAgICAgaWYgcG9wZW5fb2JqIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHBvcGVuX29iai5EdXBGZChwb3Blbl9vYmouZHVwbGljYXRlX2Zvcl9jaGlsZChmZCkpCisgICAgICAgIGVsaWYgSEFWRV9TRU5EX0hBTkRMRToKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgcmVzb3VyY2Vfc2hhcmVyCisgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2Vfc2hhcmVyLkR1cEZkKGZkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU0NNX1JJR0hUUyBhcHBlYXJzIG5vdCB0byBiZSBhdmFpbGFibGUnKQogCi0gICAgZGVmIHJlZHVjZV9zb2NrZXQocyk6CisjCisjIFRyeSBtYWtpbmcgc29tZSBjYWxsYWJsZSB0eXBlcyBwaWNrbGFibGUKKyMKKworZGVmIF9yZWR1Y2VfbWV0aG9kKG0pOgorICAgIGlmIG0uX19zZWxmX18gaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fY2xhc3NfXywgbS5fX2Z1bmNfXy5fX25hbWVfXykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZ2V0YXR0ciwgKG0uX19zZWxmX18sIG0uX19mdW5jX18uX19uYW1lX18pCitjbGFzcyBfQzoKKyAgICBkZWYgZihzZWxmKToKKyAgICAgICAgcGFzcworcmVnaXN0ZXIodHlwZShfQygpLmYpLCBfcmVkdWNlX21ldGhvZCkKKworCitkZWYgX3JlZHVjZV9tZXRob2RfZGVzY3JpcHRvcihtKToKKyAgICByZXR1cm4gZ2V0YXR0ciwgKG0uX19vYmpjbGFzc19fLCBtLl9fbmFtZV9fKQorcmVnaXN0ZXIodHlwZShsaXN0LmFwcGVuZCksIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IpCityZWdpc3Rlcih0eXBlKGludC5fX2FkZF9fKSwgX3JlZHVjZV9tZXRob2RfZGVzY3JpcHRvcikKKworCitkZWYgX3JlZHVjZV9wYXJ0aWFsKHApOgorICAgIHJldHVybiBfcmVidWlsZF9wYXJ0aWFsLCAocC5mdW5jLCBwLmFyZ3MsIHAua2V5d29yZHMgb3Ige30pCitkZWYgX3JlYnVpbGRfcGFydGlhbChmdW5jLCBhcmdzLCBrZXl3b3Jkcyk6CisgICAgcmV0dXJuIGZ1bmN0b29scy5wYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKQorcmVnaXN0ZXIoZnVuY3Rvb2xzLnBhcnRpYWwsIF9yZWR1Y2VfcGFydGlhbCkKKworIworIyBNYWtlIHNvY2tldHMgcGlja2xhYmxlCisjCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgIGRlZiBfcmVkdWNlX3NvY2tldChzKToKKyAgICAgICAgZnJvbSAucmVzb3VyY2Vfc2hhcmVyIGltcG9ydCBEdXBTb2NrZXQKKyAgICAgICAgcmV0dXJuIF9yZWJ1aWxkX3NvY2tldCwgKER1cFNvY2tldChzKSwpCisgICAgZGVmIF9yZWJ1aWxkX3NvY2tldChkcyk6CisgICAgICAgIHJldHVybiBkcy5kZXRhY2goKQorICAgIHJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIF9yZWR1Y2Vfc29ja2V0KQorCitlbHNlOgorICAgIGRlZiBfcmVkdWNlX3NvY2tldChzKToKICAgICAgICAgZGYgPSBEdXBGZChzLmZpbGVubygpKQotICAgICAgICByZXR1cm4gcmVidWlsZF9zb2NrZXQsIChkZiwgcy5mYW1pbHksIHMudHlwZSwgcy5wcm90bykKLQotICAgIGRlZiByZWJ1aWxkX3NvY2tldChkZiwgZmFtaWx5LCB0eXBlLCBwcm90byk6CisgICAgICAgIHJldHVybiBfcmVidWlsZF9zb2NrZXQsIChkZiwgcy5mYW1pbHksIHMudHlwZSwgcy5wcm90bykKKyAgICBkZWYgX3JlYnVpbGRfc29ja2V0KGRmLCBmYW1pbHksIHR5cGUsIHByb3RvKToKICAgICAgICAgZmQgPSBkZi5kZXRhY2goKQotICAgICAgICBzID0gc29ja2V0LmZyb21mZChmZCwgZmFtaWx5LCB0eXBlLCBwcm90bykKLSAgICAgICAgb3MuY2xvc2UoZmQpCi0gICAgICAgIHJldHVybiBzCi0KLSAgICBkZWYgcmVkdWNlX2Nvbm5lY3Rpb24oY29ubik6Ci0gICAgICAgIGRmID0gRHVwRmQoY29ubi5maWxlbm8oKSkKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfY29ubmVjdGlvbiwgKGRmLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQotCi0gICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkZiwgcmVhZGFibGUsIHdyaXRhYmxlKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ29ubmVjdGlvbgotICAgICAgICBmZCA9IGRmLmRldGFjaCgpCi0gICAgICAgIHJldHVybiBDb25uZWN0aW9uKGZkLCByZWFkYWJsZSwgd3JpdGFibGUpCi0KLSMKLSMgU2VydmVyIHdoaWNoIHNoYXJlcyByZWdpc3RlcmVkIHJlc291cmNlcyB3aXRoIGNsaWVudHMKLSMKLQotY2xhc3MgUmVzb3VyY2VTaGFyZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2tleSA9IDAKLSAgICAgICAgc2VsZi5fY2FjaGUgPSB7fQotICAgICAgICBzZWxmLl9vbGRfbG9ja3MgPSBbXQotICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKLSAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQotICAgICAgICByZWdpc3Rlcl9hZnRlcl9mb3JrKHNlbGYsIFJlc291cmNlU2hhcmVyLl9hZnRlcmZvcmspCi0KLSAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgc2VuZCwgY2xvc2UpOgotICAgICAgICB3aXRoIHNlbGYuX2xvY2s6Ci0gICAgICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQotICAgICAgICAgICAgc2VsZi5fa2V5ICs9IDEKLSAgICAgICAgICAgIHNlbGYuX2NhY2hlW3NlbGYuX2tleV0gPSAoc2VuZCwgY2xvc2UpCi0gICAgICAgICAgICByZXR1cm4gKHNlbGYuX2FkZHJlc3MsIHNlbGYuX2tleSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZ2V0X2Nvbm5lY3Rpb24oaWRlbnQpOgotICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDbGllbnQKLSAgICAgICAgYWRkcmVzcywga2V5ID0gaWRlbnQKLSAgICAgICAgYyA9IENsaWVudChhZGRyZXNzLCBhdXRoa2V5PWN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCi0gICAgICAgIGMuc2VuZCgoa2V5LCBvcy5nZXRwaWQoKSkpCi0gICAgICAgIHJldHVybiBjCi0KLSAgICBkZWYgc3RvcChzZWxmLCB0aW1lb3V0PU5vbmUpOgotICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDbGllbnQKLSAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBjID0gQ2xpZW50KHNlbGYuX2FkZHJlc3MsIGF1dGhrZXk9Y3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKLSAgICAgICAgICAgICAgICBjLnNlbmQoTm9uZSkKLSAgICAgICAgICAgICAgICBjLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQuam9pbih0aW1lb3V0KQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3RocmVhZC5pc19hbGl2ZSgpOgotICAgICAgICAgICAgICAgICAgICBzdWJfd2FybignUmVzb3VyY2VTaGFyZXIgdGhyZWFkIGRpZCBub3Qgc3RvcCB3aGVuIGFza2VkJykKLSAgICAgICAgICAgICAgICBzZWxmLl9saXN0ZW5lci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQotICAgICAgICAgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCi0gICAgICAgICAgICAgICAgZm9yIGtleSwgKHNlbmQsIGNsb3NlKSBpbiBzZWxmLl9jYWNoZS5pdGVtcygpOgotICAgICAgICAgICAgICAgICAgICBjbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fY2FjaGUuY2xlYXIoKQotCi0gICAgZGVmIF9hZnRlcmZvcmsoc2VsZik6Ci0gICAgICAgIGZvciBrZXksIChzZW5kLCBjbG9zZSkgaW4gc2VsZi5fY2FjaGUuaXRlbXMoKToKLSAgICAgICAgICAgIGNsb3NlKCkKLSAgICAgICAgc2VsZi5fY2FjaGUuY2xlYXIoKQotICAgICAgICAjIElmIHNlbGYuX2xvY2sgd2FzIGxvY2tlZCBhdCB0aGUgdGltZSBvZiB0aGUgZm9yaywgaXQgbWF5IGJlIGJyb2tlbgotICAgICAgICAjIC0tIHNlZSBpc3N1ZSA2NzIxLiAgUmVwbGFjZSBpdCB3aXRob3V0IGxldHRpbmcgaXQgYmUgZ2MnZWQuCi0gICAgICAgIHNlbGYuX29sZF9sb2Nrcy5hcHBlbmQoc2VsZi5fbG9jaykKLSAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICAgICAgaWYgc2VsZi5fbGlzdGVuZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9saXN0ZW5lci5jbG9zZSgpCi0gICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQotICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQotICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCi0KLSAgICBkZWYgX3N0YXJ0KHNlbGYpOgotICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBMaXN0ZW5lcgotICAgICAgICBhc3NlcnQgc2VsZi5fbGlzdGVuZXIgaXMgTm9uZQotICAgICAgICBkZWJ1Zygnc3RhcnRpbmcgbGlzdGVuZXIgYW5kIHRocmVhZCBmb3Igc2VuZGluZyBoYW5kbGVzJykKLSAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBMaXN0ZW5lcihhdXRoa2V5PWN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCi0gICAgICAgIHNlbGYuX2FkZHJlc3MgPSBzZWxmLl9saXN0ZW5lci5hZGRyZXNzCi0gICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9zZXJ2ZSkKLSAgICAgICAgdC5kYWVtb24gPSBUcnVlCi0gICAgICAgIHQuc3RhcnQoKQotICAgICAgICBzZWxmLl90aHJlYWQgPSB0Ci0KLSAgICBkZWYgX3NlcnZlKHNlbGYpOgotICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ3B0aHJlYWRfc2lnbWFzaycpOgotICAgICAgICAgICAgc2lnbmFsLnB0aHJlYWRfc2lnbWFzayhzaWduYWwuU0lHX0JMT0NLLCByYW5nZSgxLCBzaWduYWwuTlNJRykpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY29ubiA9IHNlbGYuX2xpc3RlbmVyLmFjY2VwdCgpCi0gICAgICAgICAgICAgICAgbXNnID0gY29ubi5yZWN2KCkKLSAgICAgICAgICAgICAgICBpZiBtc2cgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBrZXksIGRlc3RpbmF0aW9uX3BpZCA9IG1zZwotICAgICAgICAgICAgICAgIHNlbmQsIGNsb3NlID0gc2VsZi5fY2FjaGUucG9wKGtleSkKLSAgICAgICAgICAgICAgICBzZW5kKGNvbm4sIGRlc3RpbmF0aW9uX3BpZCkKLSAgICAgICAgICAgICAgICBjbG9zZSgpCi0gICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGlzX2V4aXRpbmcoKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjawotICAgICAgICAgICAgICAgICAgICBzdWJfd2FybmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICd0aHJlYWQgZm9yIHNoYXJpbmcgaGFuZGxlcyByYWlzZWQgZXhjZXB0aW9uIDpcbicgKwotICAgICAgICAgICAgICAgICAgICAgICAgJy0nKjc5ICsgJ1xuJyArIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkgKyAnLScqNzkKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLQotcmVzb3VyY2Vfc2hhcmVyID0gUmVzb3VyY2VTaGFyZXIoKQorICAgICAgICByZXR1cm4gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvLCBmaWxlbm89ZmQpCisgICAgcmVnaXN0ZXIoc29ja2V0LnNvY2tldCwgX3JlZHVjZV9zb2NrZXQpCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Jlc291cmNlX3NoYXJlci5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVzb3VyY2Vfc2hhcmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNDZmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Jlc291cmNlX3NoYXJlci5weQpAQCAtMCwwICsxLDE1OCBAQAorIworIyBXZSB1c2UgYSBiYWNrZ3JvdW5kIHRocmVhZCBmb3Igc2hhcmluZyBmZHMgb24gVW5peCwgYW5kIGZvciBzaGFyaW5nIHNvY2tldHMgb24KKyMgV2luZG93cy4KKyMKKyMgQSBjbGllbnQgd2hpY2ggd2FudHMgdG8gcGlja2xlIGEgcmVzb3VyY2UgcmVnaXN0ZXJzIGl0IHdpdGggdGhlIHJlc291cmNlCisjIHNoYXJlciBhbmQgZ2V0cyBhbiBpZGVudGlmaWVyIGluIHJldHVybi4gIFRoZSB1bnBpY2tsaW5nIHByb2Nlc3Mgd2lsbCBjb25uZWN0CisjIHRvIHRoZSByZXNvdXJjZSBzaGFyZXIsIHNlbmRzIHRoZSBpZGVudGlmaWVyIGFuZCBpdHMgcGlkLCBhbmQgdGhlbiByZWNlaXZlcworIyB0aGUgcmVzb3VyY2UuCisjCisKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnc3RvcCddCisKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgX19hbGxfXyArPSBbJ0R1cFNvY2tldCddCisKKyAgICBjbGFzcyBEdXBTb2NrZXQob2JqZWN0KToKKyAgICAgICAgJycnUGlja2xhYmxlIHdyYXBwZXIgZm9yIGEgc29ja2V0LicnJworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc29jayk6CisgICAgICAgICAgICBuZXdfc29jayA9IHNvY2suZHVwKCkKKyAgICAgICAgICAgIGRlZiBzZW5kKGNvbm4sIHBpZCk6CisgICAgICAgICAgICAgICAgc2hhcmUgPSBuZXdfc29jay5zaGFyZShwaWQpCisgICAgICAgICAgICAgICAgY29ubi5zZW5kX2J5dGVzKHNoYXJlKQorICAgICAgICAgICAgc2VsZi5faWQgPSBfcmVzb3VyY2Vfc2hhcmVyLnJlZ2lzdGVyKHNlbmQsIG5ld19zb2NrLmNsb3NlKQorCisgICAgICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgICAgICAnJydHZXQgdGhlIHNvY2tldC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuJycnCisgICAgICAgICAgICB3aXRoIF9yZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpIGFzIGNvbm46CisgICAgICAgICAgICAgICAgc2hhcmUgPSBjb25uLnJlY3ZfYnl0ZXMoKQorICAgICAgICAgICAgICAgIHJldHVybiBzb2NrZXQuZnJvbXNoYXJlKHNoYXJlKQorCitlbHNlOgorICAgIF9fYWxsX18gKz0gWydEdXBGZCddCisKKyAgICBjbGFzcyBEdXBGZChvYmplY3QpOgorICAgICAgICAnJydXcmFwcGVyIGZvciBmZCB3aGljaCBjYW4gYmUgdXNlZCBhdCBhbnkgdGltZS4nJycKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZkKToKKyAgICAgICAgICAgIG5ld19mZCA9IG9zLmR1cChmZCkKKyAgICAgICAgICAgIGRlZiBzZW5kKGNvbm4sIHBpZCk6CisgICAgICAgICAgICAgICAgcmVkdWN0aW9uLnNlbmRfaGFuZGxlKGNvbm4sIG5ld19mZCwgcGlkKQorICAgICAgICAgICAgZGVmIGNsb3NlKCk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UobmV3X2ZkKQorICAgICAgICAgICAgc2VsZi5faWQgPSBfcmVzb3VyY2Vfc2hhcmVyLnJlZ2lzdGVyKHNlbmQsIGNsb3NlKQorCisgICAgICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgICAgICAnJydHZXQgdGhlIGZkLiAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZS4nJycKKyAgICAgICAgICAgIHdpdGggX3Jlc291cmNlX3NoYXJlci5nZXRfY29ubmVjdGlvbihzZWxmLl9pZCkgYXMgY29ubjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWN0aW9uLnJlY3ZfaGFuZGxlKGNvbm4pCisKKworY2xhc3MgX1Jlc291cmNlU2hhcmVyKG9iamVjdCk6CisgICAgJycnTWFuYWdlciBmb3IgcmVzb3VjZXMgdXNpbmcgYmFja2dyb3VuZCB0aHJlYWQuJycnCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9rZXkgPSAwCisgICAgICAgIHNlbGYuX2NhY2hlID0ge30KKyAgICAgICAgc2VsZi5fb2xkX2xvY2tzID0gW10KKyAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKKyAgICAgICAgdXRpbC5yZWdpc3Rlcl9hZnRlcl9mb3JrKHNlbGYsIF9SZXNvdXJjZVNoYXJlci5fYWZ0ZXJmb3JrKQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIHNlbmQsIGNsb3NlKToKKyAgICAgICAgJycnUmVnaXN0ZXIgcmVzb3VyY2UsIHJldHVybmluZyBhbiBpZGVudGlmaWVyLicnJworICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQorICAgICAgICAgICAgc2VsZi5fa2V5ICs9IDEKKyAgICAgICAgICAgIHNlbGYuX2NhY2hlW3NlbGYuX2tleV0gPSAoc2VuZCwgY2xvc2UpCisgICAgICAgICAgICByZXR1cm4gKHNlbGYuX2FkZHJlc3MsIHNlbGYuX2tleSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0X2Nvbm5lY3Rpb24oaWRlbnQpOgorICAgICAgICAnJydSZXR1cm4gY29ubmVjdGlvbiBmcm9tIHdoaWNoIHRvIHJlY2VpdmUgaWRlbnRpZmllZCByZXNvdXJjZS4nJycKKyAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50CisgICAgICAgIGFkZHJlc3MsIGtleSA9IGlkZW50CisgICAgICAgIGMgPSBDbGllbnQoYWRkcmVzcywgYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCisgICAgICAgIGMuc2VuZCgoa2V5LCBvcy5nZXRwaWQoKSkpCisgICAgICAgIHJldHVybiBjCisKKyAgICBkZWYgc3RvcChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAnJydTdG9wIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBhbmQgY2xlYXIgcmVnaXN0ZXJlZCByZXNvdXJjZXMuJycnCisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENsaWVudAorICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGMgPSBDbGllbnQoc2VsZi5fYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQorICAgICAgICAgICAgICAgIGMuc2VuZChOb25lKQorICAgICAgICAgICAgICAgIGMuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX3RocmVhZC5qb2luKHRpbWVvdXQpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fdGhyZWFkLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgIHV0aWwuc3ViX3dhcm5pbmcoJ19SZXNvdXJjZVNoYXJlciB0aHJlYWQgZGlkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm90IHN0b3Agd2hlbiBhc2tlZCcpCisgICAgICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBrZXksIChzZW5kLCBjbG9zZSkgaW4gc2VsZi5fY2FjaGUuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKKworICAgIGRlZiBfYWZ0ZXJmb3JrKHNlbGYpOgorICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6CisgICAgICAgICAgICBjbG9zZSgpCisgICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgIyBJZiBzZWxmLl9sb2NrIHdhcyBsb2NrZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGZvcmssIGl0IG1heSBiZSBicm9rZW4KKyAgICAgICAgIyAtLSBzZWUgaXNzdWUgNjcyMS4gIFJlcGxhY2UgaXQgd2l0aG91dCBsZXR0aW5nIGl0IGJlIGdjJ2VkLgorICAgICAgICBzZWxmLl9vbGRfbG9ja3MuYXBwZW5kKHNlbGYuX2xvY2spCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIGlmIHNlbGYuX2xpc3RlbmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQorICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQorCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgTGlzdGVuZXIKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2xpc3RlbmVyIGlzIE5vbmUKKyAgICAgICAgdXRpbC5kZWJ1Zygnc3RhcnRpbmcgbGlzdGVuZXIgYW5kIHRocmVhZCBmb3Igc2VuZGluZyBoYW5kbGVzJykKKyAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBMaXN0ZW5lcihhdXRoa2V5PXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKKyAgICAgICAgc2VsZi5fYWRkcmVzcyA9IHNlbGYuX2xpc3RlbmVyLmFkZHJlc3MKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuX3NlcnZlKQorICAgICAgICB0LmRhZW1vbiA9IFRydWUKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHNlbGYuX3RocmVhZCA9IHQKKworICAgIGRlZiBfc2VydmUoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc2lnbmFsLCAncHRocmVhZF9zaWdtYXNrJyk6CisgICAgICAgICAgICBzaWduYWwucHRocmVhZF9zaWdtYXNrKHNpZ25hbC5TSUdfQkxPQ0ssIHJhbmdlKDEsIHNpZ25hbC5OU0lHKSkKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuX2xpc3RlbmVyLmFjY2VwdCgpIGFzIGNvbm46CisgICAgICAgICAgICAgICAgICAgIG1zZyA9IGNvbm4ucmVjdigpCisgICAgICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAga2V5LCBkZXN0aW5hdGlvbl9waWQgPSBtc2cKKyAgICAgICAgICAgICAgICAgICAgc2VuZCwgY2xvc2UgPSBzZWxmLl9jYWNoZS5wb3Aoa2V5KQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kKGNvbm4sIGRlc3RpbmF0aW9uX3BpZCkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBpZiBub3QgdXRpbC5pc19leGl0aW5nKCk6CisgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKworCitfcmVzb3VyY2Vfc2hhcmVyID0gX1Jlc291cmNlU2hhcmVyKCkKK3N0b3AgPSBfcmVzb3VyY2Vfc2hhcmVyLnN0b3AKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlX3RyYWNrZXIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZV90cmFja2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYjJiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZV90cmFja2VyLnB5CkBAIC0wLDAgKzEsMTQ1IEBACisjCisjIE9uIFVuaXggd2UgcnVuIGEgc2VydmVyIHByb2Nlc3Mgd2hpY2gga2VlcHMgdHJhY2sgb2YgdW5saW5rZWQKKyMgc2VtYXBob3Jlcy4gVGhlIHNlcnZlciBpZ25vcmVzIFNJR0lOVCBhbmQgU0lHVEVSTSBhbmQgcmVhZHMgZnJvbSBhCisjIHBpcGUuICBFdmVyeSBvdGhlciBwcm9jZXNzIG9mIHRoZSBwcm9ncmFtIGhhcyBhIGNvcHkgb2YgdGhlIHdyaXRhYmxlCisjIGVuZCBvZiB0aGUgcGlwZSwgc28gd2UgZ2V0IEVPRiB3aGVuIGFsbCBvdGhlciBwcm9jZXNzZXMgaGF2ZSBleGl0ZWQuCisjIFRoZW4gdGhlIHNlcnZlciBwcm9jZXNzIHVubGlua3MgYW55IHJlbWFpbmluZyBzZW1hcGhvcmUgbmFtZXMuCisjCisjIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIHN5c3RlbSBvbmx5IHN1cHBvcnRzIGEgbGltaXRlZCBudW1iZXIKKyMgb2YgbmFtZWQgc2VtYXBob3JlcywgYW5kIHRoZXkgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSByZW1vdmVkIHRpbGwKKyMgdGhlIG5leHQgcmVib290LiAgV2l0aG91dCB0aGlzIHNlbWFwaG9yZSB0cmFja2VyIHByb2Nlc3MsICJraWxsYWxsCisjIHB5dGhvbiIgd291bGQgcHJvYmFibHkgbGVhdmUgdW5saW5rZWQgc2VtYXBob3Jlcy4KKyMKKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKKworZnJvbSAuIGltcG9ydCBzcGF3bgorZnJvbSAuIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IGN1cnJlbnRfcHJvY2VzcworCitfX2FsbF9fID0gWydlbnN1cmVfcnVubmluZycsICdyZWdpc3RlcicsICd1bnJlZ2lzdGVyJ10KKworCitjbGFzcyBTZW1hcGhvcmVUcmFja2VyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX2ZkID0gTm9uZQorCisgICAgZGVmIGdldGZkKHNlbGYpOgorICAgICAgICBzZWxmLmVuc3VyZV9ydW5uaW5nKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZkCisKKyAgICBkZWYgZW5zdXJlX3J1bm5pbmcoc2VsZik6CisgICAgICAgICcnJ01ha2Ugc3VyZSB0aGF0IHNlbWFwaG9yZSB0cmFja2VyIHByb2Nlc3MgaXMgcnVubmluZy4KKworICAgICAgICBUaGlzIGNhbiBiZSBydW4gZnJvbSBhbnkgcHJvY2Vzcy4gIFVzdWFsbHkgYSBjaGlsZCBwcm9jZXNzIHdpbGwgdXNlCisgICAgICAgIHRoZSBzZW1hcGhvcmUgY3JlYXRlZCBieSBpdHMgcGFyZW50LicnJworICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBpZiBzZWxmLl9mZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGZkc190b19wYXNzID0gW10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZHNfdG9fcGFzcy5hcHBlbmQoc3lzLnN0ZGVyci5maWxlbm8oKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgY21kID0gJ2Zyb20gbXVsdGlwcm9jZXNzaW5nLnNlbWFwaG9yZV90cmFja2VyIGltcG9ydCBtYWluO21haW4oJWQpJworICAgICAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkc190b19wYXNzLmFwcGVuZChyKQorICAgICAgICAgICAgICAgICMgcHJvY2VzcyB3aWxsIG91dCBsaXZlIHVzLCBzbyBubyBuZWVkIHRvIHdhaXQgb24gcGlkCisgICAgICAgICAgICAgICAgZXhlID0gc3Bhd24uZ2V0X2V4ZWN1dGFibGUoKQorICAgICAgICAgICAgICAgIGFyZ3MgPSBbZXhlXSArIHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCisgICAgICAgICAgICAgICAgYXJncyArPSBbJy1jJywgY21kICUgcl0KKyAgICAgICAgICAgICAgICB1dGlsLnNwYXdudl9wYXNzZmRzKGV4ZSwgYXJncywgZmRzX3RvX3Bhc3MpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UodykKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9mZCA9IHcKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UocikKKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBuYW1lKToKKyAgICAgICAgJycnUmVnaXN0ZXIgbmFtZSBvZiBzZW1hcGhvcmUgd2l0aCBzZW1hcGhvcmUgdHJhY2tlci4nJycKKyAgICAgICAgc2VsZi5fc2VuZCgnUkVHSVNURVInLCBuYW1lKQorCisgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgbmFtZSk6CisgICAgICAgICcnJ1VucmVnaXN0ZXIgbmFtZSBvZiBzZW1hcGhvcmUgd2l0aCBzZW1hcGhvcmUgdHJhY2tlci4nJycKKyAgICAgICAgc2VsZi5fc2VuZCgnVU5SRUdJU1RFUicsIG5hbWUpCisKKyAgICBkZWYgX3NlbmQoc2VsZiwgY21kLCBuYW1lKToKKyAgICAgICAgc2VsZi5lbnN1cmVfcnVubmluZygpCisgICAgICAgIG1zZyA9ICd7MH06ezF9XG4nLmZvcm1hdChjbWQsIG5hbWUpLmVuY29kZSgnYXNjaWknKQorICAgICAgICBpZiBsZW4obmFtZSkgPiA1MTI6CisgICAgICAgICAgICAjIHBvc2l4IGd1YXJhbnRlZXMgdGhhdCB3cml0ZXMgdG8gYSBwaXBlIG9mIGxlc3MgdGhhbiBQSVBFX0JVRgorICAgICAgICAgICAgIyBieXRlcyBhcmUgYXRvbWljLCBhbmQgdGhhdCBQSVBFX0JVRiA+PSA1MTIKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ25hbWUgdG9vIGxvbmcnKQorICAgICAgICBuYnl0ZXMgPSBvcy53cml0ZShzZWxmLl9mZCwgbXNnKQorICAgICAgICBhc3NlcnQgbmJ5dGVzID09IGxlbihtc2cpCisKKworX3NlbWFwaG9yZV90cmFja2VyID0gU2VtYXBob3JlVHJhY2tlcigpCitlbnN1cmVfcnVubmluZyA9IF9zZW1hcGhvcmVfdHJhY2tlci5lbnN1cmVfcnVubmluZworcmVnaXN0ZXIgPSBfc2VtYXBob3JlX3RyYWNrZXIucmVnaXN0ZXIKK3VucmVnaXN0ZXIgPSBfc2VtYXBob3JlX3RyYWNrZXIudW5yZWdpc3RlcgorZ2V0ZmQgPSBfc2VtYXBob3JlX3RyYWNrZXIuZ2V0ZmQKKworCitkZWYgbWFpbihmZCk6CisgICAgJycnUnVuIHNlbWFwaG9yZSB0cmFja2VyLicnJworICAgICMgcHJvdGVjdCB0aGUgcHJvY2VzcyBmcm9tIF5DIGFuZCAia2lsbGFsbCBweXRob24iIGV0YworICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2lnbmFsLlNJR19JR04pCisgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2lnbmFsLlNJR19JR04pCisKKyAgICBmb3IgZiBpbiAoc3lzLnN0ZGluLCBzeXMuc3Rkb3V0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisKKyAgICBjYWNoZSA9IHNldCgpCisgICAgdHJ5OgorICAgICAgICAjIGtlZXAgdHJhY2sgb2YgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgc2VtYXBob3JlcworICAgICAgICB3aXRoIG9wZW4oZmQsICdyYicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY21kLCBuYW1lID0gbGluZS5zdHJpcCgpLnNwbGl0KGInOicpCisgICAgICAgICAgICAgICAgICAgIGlmIGNtZCA9PSBiJ1JFR0lTVEVSJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLmFkZChuYW1lKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGNtZCA9PSBiJ1VOUkVHSVNURVInOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUucmVtb3ZlKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3VucmVjb2duaXplZCBjb21tYW5kICVyJyAlIGNtZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICBmaW5hbGx5OgorICAgICAgICAjIGFsbCBwcm9jZXNzZXMgaGF2ZSB0ZXJtaW5hdGVkOyBjbGVhbnVwIGFueSByZW1haW5pbmcgc2VtYXBob3JlcworICAgICAgICBpZiBjYWNoZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCdzZW1hcGhvcmVfdHJhY2tlcjogVGhlcmUgYXBwZWFyIHRvIGJlICVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsZWFrZWQgc2VtYXBob3JlcyB0byBjbGVhbiB1cCBhdCBzaHV0ZG93bicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGNhY2hlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgbmFtZSBpbiBjYWNoZToKKyAgICAgICAgICAgICMgRm9yIHNvbWUgcmVhc29uIHRoZSBwcm9jZXNzIHdoaWNoIGNyZWF0ZWQgYW5kIHJlZ2lzdGVyZWQgdGhpcworICAgICAgICAgICAgIyBzZW1hcGhvcmUgaGFzIGZhaWxlZCB0byB1bnJlZ2lzdGVyIGl0LiBQcmVzdW1hYmx5IGl0IGhhcyBkaWVkLgorICAgICAgICAgICAgIyBXZSB0aGVyZWZvcmUgdW5saW5rIGl0LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgX211bHRpcHJvY2Vzc2luZy5zZW1fdW5saW5rKG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCdzZW1hcGhvcmVfdHJhY2tlcjogJXI6ICVzJyAlIChuYW1lLCBlKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3NoYXJlZGN0eXBlcy5weQppbmRleCBhMzU4ZWQ0Li4wYzE3ODI1IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NoYXJlZGN0eXBlcy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3NoYXJlZGN0eXBlcy5weQpAQCAtMTAsOCArMTAsMTEgQEAKIGltcG9ydCBjdHlwZXMKIGltcG9ydCB3ZWFrcmVmCiAKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBoZWFwLCBSTG9jawotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgYXNzZXJ0X3NwYXduaW5nLCBGb3JraW5nUGlja2xlcgorZnJvbSAuIGltcG9ydCBoZWFwCitmcm9tIC4gaW1wb3J0IGdldF9jb250ZXh0CisKK2Zyb20gLmNvbnRleHQgaW1wb3J0IGFzc2VydF9zcGF3bmluZworZnJvbSAucmVkdWN0aW9uIGltcG9ydCBGb3JraW5nUGlja2xlcgogCiBfX2FsbF9fID0gWydSYXdWYWx1ZScsICdSYXdBcnJheScsICdWYWx1ZScsICdBcnJheScsICdjb3B5JywgJ3N5bmNocm9uaXplZCddCiAKQEAgLTYzLDcgKzY2LDcgQEAKICAgICAgICAgcmVzdWx0Ll9faW5pdF9fKCpzaXplX29yX2luaXRpYWxpemVyKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLWRlZiBWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1UcnVlKToKK2RlZiBWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1UcnVlLCBjdHg9Tm9uZSk6CiAgICAgJycnCiAgICAgUmV0dXJuIGEgc3luY2hyb25pemF0aW9uIHdyYXBwZXIgZm9yIGEgVmFsdWUKICAgICAnJycKQEAgLTcxLDEyICs3NCwxMyBAQAogICAgIGlmIGxvY2sgaXMgRmFsc2U6CiAgICAgICAgIHJldHVybiBvYmoKICAgICBpZiBsb2NrIGluIChUcnVlLCBOb25lKToKLSAgICAgICAgbG9jayA9IFJMb2NrKCkKKyAgICAgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KCkKKyAgICAgICAgbG9jayA9IGN0eC5STG9jaygpCiAgICAgaWYgbm90IGhhc2F0dHIobG9jaywgJ2FjcXVpcmUnKToKICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIiclcicgaGFzIG5vIG1ldGhvZCAnYWNxdWlyZSciICUgbG9jaykKLSAgICByZXR1cm4gc3luY2hyb25pemVkKG9iaiwgbG9jaykKKyAgICByZXR1cm4gc3luY2hyb25pemVkKG9iaiwgbG9jaywgY3R4PWN0eCkKIAotZGVmIEFycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsICosIGxvY2s9VHJ1ZSk6CitkZWYgQXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgKiwgbG9jaz1UcnVlLCBjdHg9Tm9uZSk6CiAgICAgJycnCiAgICAgUmV0dXJuIGEgc3luY2hyb25pemF0aW9uIHdyYXBwZXIgZm9yIGEgUmF3QXJyYXkKICAgICAnJycKQEAgLTg0LDI1ICs4OCwyNyBAQAogICAgIGlmIGxvY2sgaXMgRmFsc2U6CiAgICAgICAgIHJldHVybiBvYmoKICAgICBpZiBsb2NrIGluIChUcnVlLCBOb25lKToKLSAgICAgICAgbG9jayA9IFJMb2NrKCkKKyAgICAgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KCkKKyAgICAgICAgbG9jayA9IGN0eC5STG9jaygpCiAgICAgaWYgbm90IGhhc2F0dHIobG9jaywgJ2FjcXVpcmUnKToKICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIiclcicgaGFzIG5vIG1ldGhvZCAnYWNxdWlyZSciICUgbG9jaykKLSAgICByZXR1cm4gc3luY2hyb25pemVkKG9iaiwgbG9jaykKKyAgICByZXR1cm4gc3luY2hyb25pemVkKG9iaiwgbG9jaywgY3R4PWN0eCkKIAogZGVmIGNvcHkob2JqKToKICAgICBuZXdfb2JqID0gX25ld192YWx1ZSh0eXBlKG9iaikpCiAgICAgY3R5cGVzLnBvaW50ZXIobmV3X29iailbMF0gPSBvYmoKICAgICByZXR1cm4gbmV3X29iagogCi1kZWYgc3luY2hyb25pemVkKG9iaiwgbG9jaz1Ob25lKToKK2RlZiBzeW5jaHJvbml6ZWQob2JqLCBsb2NrPU5vbmUsIGN0eD1Ob25lKToKICAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2Uob2JqLCBTeW5jaHJvbml6ZWRCYXNlKSwgJ29iamVjdCBhbHJlYWR5IHN5bmNocm9uaXplZCcKKyAgICBjdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoKQogCiAgICAgaWYgaXNpbnN0YW5jZShvYmosIGN0eXBlcy5fU2ltcGxlQ0RhdGEpOgotICAgICAgICByZXR1cm4gU3luY2hyb25pemVkKG9iaiwgbG9jaykKKyAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZChvYmosIGxvY2ssIGN0eCkKICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBjdHlwZXMuQXJyYXkpOgogICAgICAgICBpZiBvYmouX3R5cGVfIGlzIGN0eXBlcy5jX2NoYXI6Ci0gICAgICAgICAgICByZXR1cm4gU3luY2hyb25pemVkU3RyaW5nKG9iaiwgbG9jaykKLSAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZEFycmF5KG9iaiwgbG9jaykKKyAgICAgICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWRTdHJpbmcob2JqLCBsb2NrLCBjdHgpCisgICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWRBcnJheShvYmosIGxvY2ssIGN0eCkKICAgICBlbHNlOgogICAgICAgICBjbHMgPSB0eXBlKG9iaikKICAgICAgICAgdHJ5OgpAQCAtMTEyLDcgKzExOCw3IEBACiAgICAgICAgICAgICBkID0gZGljdCgobmFtZSwgbWFrZV9wcm9wZXJ0eShuYW1lKSkgZm9yIG5hbWUgaW4gbmFtZXMpCiAgICAgICAgICAgICBjbGFzc25hbWUgPSAnU3luY2hyb25pemVkJyArIGNscy5fX25hbWVfXwogICAgICAgICAgICAgc2NscyA9IGNsYXNzX2NhY2hlW2Nsc10gPSB0eXBlKGNsYXNzbmFtZSwgKFN5bmNocm9uaXplZEJhc2UsKSwgZCkKLSAgICAgICAgcmV0dXJuIHNjbHMob2JqLCBsb2NrKQorICAgICAgICByZXR1cm4gc2NscyhvYmosIGxvY2ssIGN0eCkKIAogIwogIyBGdW5jdGlvbnMgZm9yIHBpY2tsaW5nL3VucGlja2xpbmcKQEAgLTE3Miw5ICsxNzgsMTMgQEAKIAogY2xhc3MgU3luY2hyb25pemVkQmFzZShvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaiwgbG9jaz1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqLCBsb2NrPU5vbmUsIGN0eD1Ob25lKToKICAgICAgICAgc2VsZi5fb2JqID0gb2JqCi0gICAgICAgIHNlbGYuX2xvY2sgPSBsb2NrIG9yIFJMb2NrKCkKKyAgICAgICAgaWYgbG9jazoKKyAgICAgICAgICAgIHNlbGYuX2xvY2sgPSBsb2NrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoZm9yY2U9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX2xvY2sgPSBjdHguUkxvY2soKQogICAgICAgICBzZWxmLmFjcXVpcmUgPSBzZWxmLl9sb2NrLmFjcXVpcmUKICAgICAgICAgc2VsZi5yZWxlYXNlID0gc2VsZi5fbG9jay5yZWxlYXNlCiAKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3Bhd24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4Mjk3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5CkBAIC0wLDAgKzEsMjc5IEBACisjCisjIENvZGUgdXNlZCB0byBzdGFydCBwcm9jZXNzZXMgd2hlbiB1c2luZyB0aGUgc3Bhd24gb3IgZm9ya3NlcnZlcgorIyBzdGFydCBtZXRob2RzLgorIworIyBtdWx0aXByb2Nlc3Npbmcvc3Bhd24ucHkKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyaworIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisjCisKK2ltcG9ydCBvcworaW1wb3J0IHBpY2tsZQoraW1wb3J0IHN5cworaW1wb3J0IHJ1bnB5CitpbXBvcnQgdHlwZXMKKworZnJvbSAuIGltcG9ydCBnZXRfc3RhcnRfbWV0aG9kLCBzZXRfc3RhcnRfbWV0aG9kCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydfbWFpbicsICdmcmVlemVfc3VwcG9ydCcsICdzZXRfZXhlY3V0YWJsZScsICdnZXRfZXhlY3V0YWJsZScsCisgICAgICAgICAgICdnZXRfcHJlcGFyYXRpb25fZGF0YScsICdnZXRfY29tbWFuZF9saW5lJywgJ2ltcG9ydF9tYWluX3BhdGgnXQorCisjCisjIF9weXRob25fZXhlIGlzIHRoZSBhc3N1bWVkIHBhdGggdG8gdGhlIHB5dGhvbiBleGVjdXRhYmxlLgorIyBQZW9wbGUgZW1iZWRkaW5nIFB5dGhvbiB3YW50IHRvIG1vZGlmeSBpdC4KKyMKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgV0lORVhFID0gRmFsc2UKKyAgICBXSU5TRVJWSUNFID0gRmFsc2UKK2Vsc2U6CisgICAgV0lORVhFID0gKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKSkKKyAgICBXSU5TRVJWSUNFID0gc3lzLmV4ZWN1dGFibGUubG93ZXIoKS5lbmRzd2l0aCgicHl0aG9uc2VydmljZS5leGUiKQorCitpZiBXSU5TRVJWSUNFOgorICAgIF9weXRob25fZXhlID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgJ3B5dGhvbi5leGUnKQorZWxzZToKKyAgICBfcHl0aG9uX2V4ZSA9IHN5cy5leGVjdXRhYmxlCisKK2RlZiBzZXRfZXhlY3V0YWJsZShleGUpOgorICAgIGdsb2JhbCBfcHl0aG9uX2V4ZQorICAgIF9weXRob25fZXhlID0gZXhlCisKK2RlZiBnZXRfZXhlY3V0YWJsZSgpOgorICAgIHJldHVybiBfcHl0aG9uX2V4ZQorCisjCisjCisjCisKK2RlZiBpc19mb3JraW5nKGFyZ3YpOgorICAgICcnJworICAgIFJldHVybiB3aGV0aGVyIGNvbW1hbmRsaW5lIGluZGljYXRlcyB3ZSBhcmUgZm9ya2luZworICAgICcnJworICAgIGlmIGxlbihhcmd2KSA+PSAyIGFuZCBhcmd2WzFdID09ICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJzoKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgZnJlZXplX3N1cHBvcnQoKToKKyAgICAnJycKKyAgICBSdW4gY29kZSBmb3IgcHJvY2VzcyBvYmplY3QgaWYgdGhpcyBpbiBub3QgdGhlIG1haW4gcHJvY2VzcworICAgICcnJworICAgIGlmIGlzX2Zvcmtpbmcoc3lzLmFyZ3YpOgorICAgICAgICBtYWluKCkKKyAgICAgICAgc3lzLmV4aXQoKQorCisKK2RlZiBnZXRfY29tbWFuZF9saW5lKCoqa3dkcyk6CisgICAgJycnCisgICAgUmV0dXJucyBwcmVmaXggb2YgY29tbWFuZCBsaW5lIHVzZWQgZm9yIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcworICAgICcnJworICAgIGlmIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpOgorICAgICAgICByZXR1cm4gW3N5cy5leGVjdXRhYmxlLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCisgICAgZWxzZToKKyAgICAgICAgcHJvZyA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5zcGF3biBpbXBvcnQgc3Bhd25fbWFpbjsgc3Bhd25fbWFpbiglcyknCisgICAgICAgIHByb2cgJT0gJywgJy5qb2luKCclcz0lcicgJSBpdGVtIGZvciBpdGVtIGluIGt3ZHMuaXRlbXMoKSkKKyAgICAgICAgb3B0cyA9IHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCisgICAgICAgIHJldHVybiBbX3B5dGhvbl9leGVdICsgb3B0cyArIFsnLWMnLCBwcm9nLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCisKKworZGVmIHNwYXduX21haW4ocGlwZV9oYW5kbGUsIHBhcmVudF9waWQ9Tm9uZSwgdHJhY2tlcl9mZD1Ob25lKToKKyAgICAnJycKKyAgICBSdW4gY29kZSBzcGVjaWZlZCBieSBkYXRhIHJlY2VpdmVkIG92ZXIgcGlwZQorICAgICcnJworICAgIGFzc2VydCBpc19mb3JraW5nKHN5cy5hcmd2KQorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgIGZyb20gLnJlZHVjdGlvbiBpbXBvcnQgc3RlYWxfaGFuZGxlCisgICAgICAgIG5ld19oYW5kbGUgPSBzdGVhbF9oYW5kbGUocGFyZW50X3BpZCwgcGlwZV9oYW5kbGUpCisgICAgICAgIGZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKG5ld19oYW5kbGUsIG9zLk9fUkRPTkxZKQorICAgIGVsc2U6CisgICAgICAgIGZyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKKyAgICAgICAgc2VtYXBob3JlX3RyYWNrZXIuX3NlbWFwaG9yZV90cmFja2VyLl9mZCA9IHRyYWNrZXJfZmQKKyAgICAgICAgZmQgPSBwaXBlX2hhbmRsZQorICAgIGV4aXRjb2RlID0gX21haW4oZmQpCisgICAgc3lzLmV4aXQoZXhpdGNvZGUpCisKKworZGVmIF9tYWluKGZkKToKKyAgICB3aXRoIG9zLmZkb3BlbihmZCwgJ3JiJywgY2xvc2VmZD1UcnVlKSBhcyBmcm9tX3BhcmVudDoKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJlcGFyYXRpb25fZGF0YSA9IHBpY2tsZS5sb2FkKGZyb21fcGFyZW50KQorICAgICAgICAgICAgcHJlcGFyZShwcmVwYXJhdGlvbl9kYXRhKQorICAgICAgICAgICAgc2VsZiA9IHBpY2tsZS5sb2FkKGZyb21fcGFyZW50KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcKKyAgICByZXR1cm4gc2VsZi5fYm9vdHN0cmFwKCkKKworCitkZWYgX2NoZWNrX25vdF9pbXBvcnRpbmdfbWFpbigpOgorICAgIGlmIGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJycnCisgICAgICAgIEFuIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBzdGFydCBhIG5ldyBwcm9jZXNzIGJlZm9yZSB0aGUKKyAgICAgICAgY3VycmVudCBwcm9jZXNzIGhhcyBmaW5pc2hlZCBpdHMgYm9vdHN0cmFwcGluZyBwaGFzZS4KKworICAgICAgICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGFyZSBub3QgdXNpbmcgZm9yayB0byBzdGFydCB5b3VyCisgICAgICAgIGNoaWxkIHByb2Nlc3NlcyBhbmQgeW91IGhhdmUgZm9yZ290dGVuIHRvIHVzZSB0aGUgcHJvcGVyIGlkaW9tCisgICAgICAgIGluIHRoZSBtYWluIG1vZHVsZToKKworICAgICAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgICAgICBmcmVlemVfc3VwcG9ydCgpCisgICAgICAgICAgICAgICAgLi4uCisKKyAgICAgICAgVGhlICJmcmVlemVfc3VwcG9ydCgpIiBsaW5lIGNhbiBiZSBvbWl0dGVkIGlmIHRoZSBwcm9ncmFtCisgICAgICAgIGlzIG5vdCBnb2luZyB0byBiZSBmcm96ZW4gdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLicnJykKKworCitkZWYgZ2V0X3ByZXBhcmF0aW9uX2RhdGEobmFtZSk6CisgICAgJycnCisgICAgUmV0dXJuIGluZm8gYWJvdXQgcGFyZW50IG5lZWRlZCBieSBjaGlsZCB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAorICAgICcnJworICAgIF9jaGVja19ub3RfaW1wb3J0aW5nX21haW4oKQorICAgIGQgPSBkaWN0KAorICAgICAgICBsb2dfdG9fc3RkZXJyPXV0aWwuX2xvZ190b19zdGRlcnIsCisgICAgICAgIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5LAorICAgICAgICApCisKKyAgICBpZiB1dGlsLl9sb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgIGRbJ2xvZ19sZXZlbCddID0gdXRpbC5fbG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkKKworICAgIHN5c19wYXRoPXN5cy5wYXRoLmNvcHkoKQorICAgIHRyeToKKyAgICAgICAgaSA9IHN5c19wYXRoLmluZGV4KCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgc3lzX3BhdGhbaV0gPSBwcm9jZXNzLk9SSUdJTkFMX0RJUgorCisgICAgZC51cGRhdGUoCisgICAgICAgIG5hbWU9bmFtZSwKKyAgICAgICAgc3lzX3BhdGg9c3lzX3BhdGgsCisgICAgICAgIHN5c19hcmd2PXN5cy5hcmd2LAorICAgICAgICBvcmlnX2Rpcj1wcm9jZXNzLk9SSUdJTkFMX0RJUiwKKyAgICAgICAgZGlyPW9zLmdldGN3ZCgpLAorICAgICAgICBzdGFydF9tZXRob2Q9Z2V0X3N0YXJ0X21ldGhvZCgpLAorICAgICAgICApCisKKyAgICAjIEZpZ3VyZSBvdXQgd2hldGhlciB0byBpbml0aWFsaXNlIG1haW4gaW4gdGhlIHN1YnByb2Nlc3MgYXMgYSBtb2R1bGUKKyAgICAjIG9yIHRocm91Z2ggZGlyZWN0IGV4ZWN1dGlvbiAob3IgdG8gbGVhdmUgaXQgYWxvbmUgZW50aXJlbHkpCisgICAgbWFpbl9tb2R1bGUgPSBzeXMubW9kdWxlc1snX19tYWluX18nXQorICAgIG1haW5fbW9kX25hbWUgPSBnZXRhdHRyKG1haW5fbW9kdWxlLl9fc3BlY19fLCAibmFtZSIsIE5vbmUpCisgICAgaWYgbWFpbl9tb2RfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgZFsnaW5pdF9tYWluX2Zyb21fbmFtZSddID0gbWFpbl9tb2RfbmFtZQorICAgIGVsaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMicgb3IgKG5vdCBXSU5FWEUgYW5kIG5vdCBXSU5TRVJWSUNFKToKKyAgICAgICAgbWFpbl9wYXRoID0gZ2V0YXR0cihtYWluX21vZHVsZSwgJ19fZmlsZV9fJywgTm9uZSkKKyAgICAgICAgaWYgbWFpbl9wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgKG5vdCBvcy5wYXRoLmlzYWJzKG1haW5fcGF0aCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLk9SSUdJTkFMX0RJUiBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gb3MucGF0aC5qb2luKHByb2Nlc3MuT1JJR0lOQUxfRElSLCBtYWluX3BhdGgpCisgICAgICAgICAgICBkWydpbml0X21haW5fZnJvbV9wYXRoJ10gPSBvcy5wYXRoLm5vcm1wYXRoKG1haW5fcGF0aCkKKworICAgIHJldHVybiBkCisKKyMKKyMgUHJlcGFyZSBjdXJyZW50IHByb2Nlc3MKKyMKKworb2xkX21haW5fbW9kdWxlcyA9IFtdCisKK2RlZiBwcmVwYXJlKGRhdGEpOgorICAgICcnJworICAgIFRyeSB0byBnZXQgY3VycmVudCBwcm9jZXNzIHJlYWR5IHRvIHVucGlja2xlIHByb2Nlc3Mgb2JqZWN0CisgICAgJycnCisgICAgaWYgJ25hbWUnIGluIGRhdGE6CisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZSA9IGRhdGFbJ25hbWUnXQorCisgICAgaWYgJ2F1dGhrZXknIGluIGRhdGE6CisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSA9IGRhdGFbJ2F1dGhrZXknXQorCisgICAgaWYgJ2xvZ190b19zdGRlcnInIGluIGRhdGEgYW5kIGRhdGFbJ2xvZ190b19zdGRlcnInXToKKyAgICAgICAgdXRpbC5sb2dfdG9fc3RkZXJyKCkKKworICAgIGlmICdsb2dfbGV2ZWwnIGluIGRhdGE6CisgICAgICAgIHV0aWwuZ2V0X2xvZ2dlcigpLnNldExldmVsKGRhdGFbJ2xvZ19sZXZlbCddKQorCisgICAgaWYgJ3N5c19wYXRoJyBpbiBkYXRhOgorICAgICAgICBzeXMucGF0aCA9IGRhdGFbJ3N5c19wYXRoJ10KKworICAgIGlmICdzeXNfYXJndicgaW4gZGF0YToKKyAgICAgICAgc3lzLmFyZ3YgPSBkYXRhWydzeXNfYXJndiddCisKKyAgICBpZiAnZGlyJyBpbiBkYXRhOgorICAgICAgICBvcy5jaGRpcihkYXRhWydkaXInXSkKKworICAgIGlmICdvcmlnX2RpcicgaW4gZGF0YToKKyAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgPSBkYXRhWydvcmlnX2RpciddCisKKyAgICBpZiAnc3RhcnRfbWV0aG9kJyBpbiBkYXRhOgorICAgICAgICBzZXRfc3RhcnRfbWV0aG9kKGRhdGFbJ3N0YXJ0X21ldGhvZCddKQorCisgICAgaWYgJ2luaXRfbWFpbl9mcm9tX25hbWUnIGluIGRhdGE6CisgICAgICAgIF9maXh1cF9tYWluX2Zyb21fbmFtZShkYXRhWydpbml0X21haW5fZnJvbV9uYW1lJ10pCisgICAgZWxpZiAnaW5pdF9tYWluX2Zyb21fcGF0aCcgaW4gZGF0YToKKyAgICAgICAgX2ZpeHVwX21haW5fZnJvbV9wYXRoKGRhdGFbJ2luaXRfbWFpbl9mcm9tX3BhdGgnXSkKKworIyBNdWx0aXByb2Nlc3NpbmcgbW9kdWxlIGhlbHBlcnMgdG8gZml4IHVwIHRoZSBtYWluIG1vZHVsZSBpbgorIyBzcGF3bmVkIHN1YnByb2Nlc3NlcworZGVmIF9maXh1cF9tYWluX2Zyb21fbmFtZShtb2RfbmFtZSk6CisgICAgIyBfX21haW5fXy5weSBmaWxlcyBmb3IgcGFja2FnZXMsIGRpcmVjdG9yaWVzLCB6aXAgYXJjaGl2ZXMsIGV0YywgcnVuCisgICAgIyB0aGVpciAibWFpbiBvbmx5IiBjb2RlIHVuY29uZGl0aW9uYWxseSwgc28gd2UgZG9uJ3QgZXZlbiB0cnkgdG8KKyAgICAjIHBvcHVsYXRlIGFueXRoaW5nIGluIF9fbWFpbl9fLCBub3IgZG8gd2UgbWFrZSBhbnkgY2hhbmdlcyB0bworICAgICMgX19tYWluX18gYXR0cmlidXRlcworICAgIGN1cnJlbnRfbWFpbiA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCisgICAgaWYgbW9kX25hbWUgPT0gIl9fbWFpbl9fIiBvciBtb2RfbmFtZS5lbmRzd2l0aCgiLl9fbWFpbl9fIik6CisgICAgICAgIHJldHVybgorCisgICAgIyBJZiB0aGlzIHByb2Nlc3Mgd2FzIGZvcmtlZCwgX19tYWluX18gbWF5IGFscmVhZHkgYmUgcG9wdWxhdGVkCisgICAgaWYgZ2V0YXR0cihjdXJyZW50X21haW4uX19zcGVjX18sICJuYW1lIiwgTm9uZSkgPT0gbW9kX25hbWU6CisgICAgICAgIHJldHVybgorCisgICAgIyBPdGhlcndpc2UsIF9fbWFpbl9fIG1heSBjb250YWluIHNvbWUgbm9uLW1haW4gY29kZSB3aGVyZSB3ZSBuZWVkIHRvCisgICAgIyBzdXBwb3J0IHVucGlja2xpbmcgaXQgcHJvcGVybHkuIFdlIHJlcnVuIGl0IGFzIF9fbXBfbWFpbl9fIGFuZCBtYWtlCisgICAgIyB0aGUgbm9ybWFsIF9fbWFpbl9fIGFuIGFsaWFzIHRvIHRoYXQKKyAgICBvbGRfbWFpbl9tb2R1bGVzLmFwcGVuZChjdXJyZW50X21haW4pCisgICAgbWFpbl9tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCJfX21wX21haW5fXyIpCisgICAgbWFpbl9jb250ZW50ID0gcnVucHkucnVuX21vZHVsZShtb2RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9uYW1lPSJfX21wX21haW5fXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcl9zeXM9VHJ1ZSkKKyAgICBtYWluX21vZHVsZS5fX2RpY3RfXy51cGRhdGUobWFpbl9jb250ZW50KQorICAgIHN5cy5tb2R1bGVzWydfX21haW5fXyddID0gc3lzLm1vZHVsZXNbJ19fbXBfbWFpbl9fJ10gPSBtYWluX21vZHVsZQorCisKK2RlZiBfZml4dXBfbWFpbl9mcm9tX3BhdGgobWFpbl9wYXRoKToKKyAgICAjIElmIHRoaXMgcHJvY2VzcyB3YXMgZm9ya2VkLCBfX21haW5fXyBtYXkgYWxyZWFkeSBiZSBwb3B1bGF0ZWQKKyAgICBjdXJyZW50X21haW4gPSBzeXMubW9kdWxlc1snX19tYWluX18nXQorCisgICAgIyBVbmZvcnR1bmF0ZWx5LCB0aGUgbWFpbiBpcHl0aG9uIGxhdW5jaCBzY3JpcHQgaGlzdG9yaWNhbGx5IGhhZCBubworICAgICMgImlmIF9fbmFtZV9fID09ICdfX21haW5fXyciIGd1YXJkLCBzbyB3ZSB3b3JrIGFyb3VuZCB0aGF0CisgICAgIyBieSB0cmVhdGluZyBpdCBsaWtlIGEgX19tYWluX18ucHkgZmlsZQorICAgICMgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pcHl0aG9uL2lweXRob24vaXNzdWVzLzQ2OTgKKyAgICBtYWluX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUobWFpbl9wYXRoKSlbMF0KKyAgICBpZiBtYWluX25hbWUgPT0gJ2lweXRob24nOgorICAgICAgICByZXR1cm4KKworICAgICMgT3RoZXJ3aXNlLCBpZiBfX2ZpbGVfXyBhbHJlYWR5IGhhcyB0aGUgc2V0dGluZyB3ZSBleHBlY3QsCisgICAgIyB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkbworICAgIGlmIGdldGF0dHIoY3VycmVudF9tYWluLCAnX19maWxlX18nLCBOb25lKSA9PSBtYWluX3BhdGg6CisgICAgICAgIHJldHVybgorCisgICAgIyBJZiB0aGUgcGFyZW50IHByb2Nlc3MgaGFzIHNlbnQgYSBwYXRoIHRocm91Z2ggcmF0aGVyIHRoYW4gYSBtb2R1bGUKKyAgICAjIG5hbWUgd2UgYXNzdW1lIGl0IGlzIGFuIGV4ZWN1dGFibGUgc2NyaXB0IHRoYXQgbWF5IGNvbnRhaW4KKyAgICAjIG5vbi1tYWluIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBleGVjdXRlZAorICAgIG9sZF9tYWluX21vZHVsZXMuYXBwZW5kKGN1cnJlbnRfbWFpbikKKyAgICBtYWluX21vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoIl9fbXBfbWFpbl9fIikKKyAgICBtYWluX2NvbnRlbnQgPSBydW5weS5ydW5fcGF0aChtYWluX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX25hbWU9Il9fbXBfbWFpbl9fIikKKyAgICBtYWluX21vZHVsZS5fX2RpY3RfXy51cGRhdGUobWFpbl9jb250ZW50KQorICAgIHN5cy5tb2R1bGVzWydfX21haW5fXyddID0gc3lzLm1vZHVsZXNbJ19fbXBfbWFpbl9fJ10gPSBtYWluX21vZHVsZQorCisKK2RlZiBpbXBvcnRfbWFpbl9wYXRoKG1haW5fcGF0aCk6CisgICAgJycnCisgICAgU2V0IHN5cy5tb2R1bGVzWydfX21haW5fXyddIHRvIG1vZHVsZSBhdCBtYWluX3BhdGgKKyAgICAnJycKKyAgICBfZml4dXBfbWFpbl9mcm9tX3BhdGgobWFpbl9wYXRoKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKaW5kZXggMGZhY2E3OC4uOWQ4ZTI4MiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CkBAIC0xMSwyMCArMTEsMjQgQEAKICAgICAnTG9jaycsICdSTG9jaycsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZScsICdDb25kaXRpb24nLCAnRXZlbnQnCiAgICAgXQogCitpbXBvcnQgb3MKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCBzeXMKLQoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcyBpbXBvcnQgY3VycmVudF9wcm9jZXNzCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCByZWdpc3Rlcl9hZnRlcl9mb3JrLCBkZWJ1ZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgYXNzZXJ0X3NwYXduaW5nLCBQb3BlbgorCiBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgX3RpbWUKIAorZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgdXRpbAorCiAjIFRyeSB0byBpbXBvcnQgdGhlIG1wLnN5bmNocm9uaXplIG1vZHVsZSBjbGVhbmx5LCBpZiBpdCBmYWlscwogIyByYWlzZSBJbXBvcnRFcnJvciBmb3IgcGxhdGZvcm1zIGxhY2tpbmcgYSB3b3JraW5nIHNlbV9vcGVuIGltcGxlbWVudGF0aW9uLgogIyBTZWUgaXNzdWUgMzc3MAogdHJ5OgotICAgIGZyb20gX211bHRpcHJvY2Vzc2luZyBpbXBvcnQgU2VtTG9jaworICAgIGZyb20gX211bHRpcHJvY2Vzc2luZyBpbXBvcnQgU2VtTG9jaywgc2VtX3VubGluawogZXhjZXB0IChJbXBvcnRFcnJvcik6CiAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIlRoaXMgcGxhdGZvcm0gbGFja3MgYSBmdW5jdGlvbmluZyBzZW1fb3BlbiIgKwogICAgICAgICAgICAgICAgICAgICAgICIgaW1wbGVtZW50YXRpb24sIHRoZXJlZm9yZSwgdGhlIHJlcXVpcmVkIiArCkBAIC00NCwxNSArNDgsNDYgQEAKIAogY2xhc3MgU2VtTG9jayhvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGtpbmQsIHZhbHVlLCBtYXh2YWx1ZSk6Ci0gICAgICAgIHNsID0gc2VsZi5fc2VtbG9jayA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jayhraW5kLCB2YWx1ZSwgbWF4dmFsdWUpCi0gICAgICAgIGRlYnVnKCdjcmVhdGVkIHNlbWxvY2sgd2l0aCBoYW5kbGUgJXMnICUgc2wuaGFuZGxlKQorICAgIF9yYW5kID0gdGVtcGZpbGUuX1JhbmRvbU5hbWVTZXF1ZW5jZSgpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwga2luZCwgdmFsdWUsIG1heHZhbHVlLCAqLCBjdHgpOgorICAgICAgICBjdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoKQorICAgICAgICBjdHggPSBjdHguZ2V0X2NvbnRleHQoKQorICAgICAgICB1bmxpbmtfbm93ID0gc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3IgY3R4Ll9uYW1lID09ICdmb3JrJworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNsID0gc2VsZi5fc2VtbG9jayA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jaygKKyAgICAgICAgICAgICAgICAgICAga2luZCwgdmFsdWUsIG1heHZhbHVlLCBzZWxmLl9tYWtlX25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgdW5saW5rX25vdykKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRmlsZUV4aXN0c0Vycm9yKCdjYW5ub3QgZmluZCBuYW1lIGZvciBzZW1hcGhvcmUnKQorCisgICAgICAgIHV0aWwuZGVidWcoJ2NyZWF0ZWQgc2VtbG9jayB3aXRoIGhhbmRsZSAlcycgJSBzbC5oYW5kbGUpCiAgICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CiAgICAgICAgICAgICBkZWYgX2FmdGVyX2Zvcmsob2JqKToKICAgICAgICAgICAgICAgICBvYmouX3NlbWxvY2suX2FmdGVyX2ZvcmsoKQotICAgICAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBfYWZ0ZXJfZm9yaykKKyAgICAgICAgICAgIHV0aWwucmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBfYWZ0ZXJfZm9yaykKKworICAgICAgICBpZiBzZWxmLl9zZW1sb2NrLm5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIFdlIG9ubHkgZ2V0IGhlcmUgaWYgd2UgYXJlIG9uIFVuaXggd2l0aCBmb3JraW5nCisgICAgICAgICAgICAjIGRpc2FibGVkLiAgV2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkIG9yIHRoZQorICAgICAgICAgICAgIyBwcm9jZXNzIHNodXRzIGRvd24gd2UgdW5saW5rIHRoZSBzZW1hcGhvcmUgbmFtZQorICAgICAgICAgICAgZnJvbSAuc2VtYXBob3JlX3RyYWNrZXIgaW1wb3J0IHJlZ2lzdGVyCisgICAgICAgICAgICByZWdpc3RlcihzZWxmLl9zZW1sb2NrLm5hbWUpCisgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIFNlbUxvY2suX2NsZWFudXAsIChzZWxmLl9zZW1sb2NrLm5hbWUsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdHByaW9yaXR5PTApCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jbGVhbnVwKG5hbWUpOgorICAgICAgICBmcm9tIC5zZW1hcGhvcmVfdHJhY2tlciBpbXBvcnQgdW5yZWdpc3RlcgorICAgICAgICBzZW1fdW5saW5rKG5hbWUpCisgICAgICAgIHVucmVnaXN0ZXIobmFtZSkKIAogICAgIGRlZiBfbWFrZV9tZXRob2RzKHNlbGYpOgogICAgICAgICBzZWxmLmFjcXVpcmUgPSBzZWxmLl9zZW1sb2NrLmFjcXVpcmUKQEAgLTY1LDIzICsxMDAsMzIgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbWxvY2suX19leGl0X18oKmFyZ3MpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgc2wgPSBzZWxmLl9zZW1sb2NrCi0gICAgICAgIHJldHVybiAoUG9wZW4uZHVwbGljYXRlX2Zvcl9jaGlsZChzbC5oYW5kbGUpLCBzbC5raW5kLCBzbC5tYXh2YWx1ZSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBoID0gY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKS5kdXBsaWNhdGVfZm9yX2NoaWxkKHNsLmhhbmRsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGggPSBzbC5oYW5kbGUKKyAgICAgICAgcmV0dXJuIChoLCBzbC5raW5kLCBzbC5tYXh2YWx1ZSwgc2wubmFtZSkKIAogICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgogICAgICAgICBzZWxmLl9zZW1sb2NrID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrLl9yZWJ1aWxkKCpzdGF0ZSkKLSAgICAgICAgZGVidWcoJ3JlY3JlYXRlZCBibG9ja2VyIHdpdGggaGFuZGxlICVyJyAlIHN0YXRlWzBdKQorICAgICAgICB1dGlsLmRlYnVnKCdyZWNyZWF0ZWQgYmxvY2tlciB3aXRoIGhhbmRsZSAlcicgJSBzdGF0ZVswXSkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2VfbmFtZSgpOgorICAgICAgICByZXR1cm4gJyVzLSVzJyAlIChwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWdbJ3NlbXByZWZpeCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KFNlbUxvY2suX3JhbmQpKQorCiAjCiAjIFNlbWFwaG9yZQogIwogCiBjbGFzcyBTZW1hcGhvcmUoU2VtTG9jayk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSk6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgU0VNX1ZBTFVFX01BWCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBTRU1BUEhPUkUsIHZhbHVlLCBTRU1fVkFMVUVfTUFYLCBjdHg9Y3R4KQogCiAgICAgZGVmIGdldF92YWx1ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbWxvY2suX2dldF92YWx1ZSgpCkBAIC05OSw4ICsxNDMsOCBAQAogCiBjbGFzcyBCb3VuZGVkU2VtYXBob3JlKFNlbWFwaG9yZSk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSk6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgdmFsdWUpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEsICosIGN0eCk6CisgICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgdmFsdWUsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTExNiwxMyArMTYwLDEzIEBACiAKIGNsYXNzIExvY2soU2VtTG9jayk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCAxLCAxKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjdHgpOgorICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgMSwgMSwgY3R4PWN0eCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi5fc2VtbG9jay5faXNfbWluZSgpOgotICAgICAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisgICAgICAgICAgICAgICAgbmFtZSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZQogICAgICAgICAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUgIT0gJ01haW5UaHJlYWQnOgogICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICd8JyArIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUKICAgICAgICAgICAgIGVsaWYgc2VsZi5fc2VtbG9jay5fZ2V0X3ZhbHVlKCkgPT0gMToKQEAgLTE0MSwxMyArMTg1LDEzIEBACiAKIGNsYXNzIFJMb2NrKFNlbUxvY2spOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFJFQ1VSU0lWRV9NVVRFWCwgMSwgMSkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBSRUNVUlNJVkVfTVVURVgsIDEsIDEsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX3NlbWxvY2suX2lzX21pbmUoKToKLSAgICAgICAgICAgICAgICBuYW1lID0gY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKICAgICAgICAgICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnfCcgKyB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lCiAgICAgICAgICAgICAgICAgY291bnQgPSBzZWxmLl9zZW1sb2NrLl9jb3VudCgpCkBAIC0xNjcsMTUgKzIxMSwxNSBAQAogCiBjbGFzcyBDb25kaXRpb24ob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrPU5vbmUpOgotICAgICAgICBzZWxmLl9sb2NrID0gbG9jayBvciBSTG9jaygpCi0gICAgICAgIHNlbGYuX3NsZWVwaW5nX2NvdW50ID0gU2VtYXBob3JlKDApCi0gICAgICAgIHNlbGYuX3dva2VuX2NvdW50ID0gU2VtYXBob3JlKDApCi0gICAgICAgIHNlbGYuX3dhaXRfc2VtYXBob3JlID0gU2VtYXBob3JlKDApCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2s9Tm9uZSwgKiwgY3R4KToKKyAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sgb3IgY3R4LlJMb2NrKCkKKyAgICAgICAgc2VsZi5fc2xlZXBpbmdfY291bnQgPSBjdHguU2VtYXBob3JlKDApCisgICAgICAgIHNlbGYuX3dva2VuX2NvdW50ID0gY3R4LlNlbWFwaG9yZSgwKQorICAgICAgICBzZWxmLl93YWl0X3NlbWFwaG9yZSA9IGN0eC5TZW1hcGhvcmUoMCkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX2xvY2ssIHNlbGYuX3NsZWVwaW5nX2NvdW50LAogICAgICAgICAgICAgICAgIHNlbGYuX3dva2VuX2NvdW50LCBzZWxmLl93YWl0X3NlbWFwaG9yZSkKIApAQCAtMjg5LDkgKzMzMyw5IEBACiAKIGNsYXNzIEV2ZW50KG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvbmQgPSBDb25kaXRpb24oTG9jaygpKQotICAgICAgICBzZWxmLl9mbGFnID0gU2VtYXBob3JlKDApCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGN0eCk6CisgICAgICAgIHNlbGYuX2NvbmQgPSBjdHguQ29uZGl0aW9uKGN0eC5Mb2NrKCkpCisgICAgICAgIHNlbGYuX2ZsYWcgPSBjdHguU2VtYXBob3JlKDApCiAKICAgICBkZWYgaXNfc2V0KHNlbGYpOgogICAgICAgICBzZWxmLl9jb25kLmFjcXVpcmUoKQpAQCAtMzQwLDExICszODQsMTEgQEAKIAogY2xhc3MgQmFycmllcih0aHJlYWRpbmcuQmFycmllcik6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnRpZXMsIGFjdGlvbj1Ob25lLCB0aW1lb3V0PU5vbmUsICosIGN0eCk6CiAgICAgICAgIGltcG9ydCBzdHJ1Y3QKLSAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuaGVhcCBpbXBvcnQgQnVmZmVyV3JhcHBlcgorICAgICAgICBmcm9tIC5oZWFwIGltcG9ydCBCdWZmZXJXcmFwcGVyCiAgICAgICAgIHdyYXBwZXIgPSBCdWZmZXJXcmFwcGVyKHN0cnVjdC5jYWxjc2l6ZSgnaScpICogMikKLSAgICAgICAgY29uZCA9IENvbmRpdGlvbigpCisgICAgICAgIGNvbmQgPSBjdHguQ29uZGl0aW9uKCkKICAgICAgICAgc2VsZi5fX3NldHN0YXRlX18oKHBhcnRpZXMsIGFjdGlvbiwgdGltZW91dCwgY29uZCwgd3JhcHBlcikpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gMAogICAgICAgICBzZWxmLl9jb3VudCA9IDAKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQppbmRleCBmNTg2MmI0Li5lNDc2ZTg1IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CkBAIC0xNywxMyArMTcsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xlYW51cCBmdW5jdGlvbiBiZWZvcmUgbXVsdGlwcm9jZXNzaW5nIGRvZXMKIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncwogCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MsIGFjdGl2ZV9jaGlsZHJlbgorZnJvbSAuIGltcG9ydCBwcm9jZXNzCiAKIF9fYWxsX18gPSBbCiAgICAgJ3N1Yl9kZWJ1ZycsICdkZWJ1ZycsICdpbmZvJywgJ3N1Yl93YXJuaW5nJywgJ2dldF9sb2dnZXInLAogICAgICdsb2dfdG9fc3RkZXJyJywgJ2dldF90ZW1wX2RpcicsICdyZWdpc3Rlcl9hZnRlcl9mb3JrJywKICAgICAnaXNfZXhpdGluZycsICdGaW5hbGl6ZScsICdGb3JrQXdhcmVUaHJlYWRMb2NrJywgJ0ZvcmtBd2FyZUxvY2FsJywKLSAgICAnU1VCREVCVUcnLCAnU1VCV0FSTklORycsCisgICAgJ2Nsb3NlX2FsbF9mZHNfZXhjZXB0JywgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAogICAgIF0KIAogIwpAQCAtNzEsOCArNzEsNiBAQAogCiAgICAgICAgICAgICBfbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoTE9HR0VSX05BTUUpCiAgICAgICAgICAgICBfbG9nZ2VyLnByb3BhZ2F0ZSA9IDAKLSAgICAgICAgICAgIGxvZ2dpbmcuYWRkTGV2ZWxOYW1lKFNVQkRFQlVHLCAnU1VCREVCVUcnKQotICAgICAgICAgICAgbG9nZ2luZy5hZGRMZXZlbE5hbWUoU1VCV0FSTklORywgJ1NVQldBUk5JTkcnKQogCiAgICAgICAgICAgICAjIFhYWCBtdWx0aXByb2Nlc3Npbmcgc2hvdWxkIGNsZWFudXAgYmVmb3JlIGxvZ2dpbmcKICAgICAgICAgICAgIGlmIGhhc2F0dHIoYXRleGl0LCAndW5yZWdpc3RlcicpOgpAQCAtMTExLDEzICsxMDksMTQgQEAKIAogZGVmIGdldF90ZW1wX2RpcigpOgogICAgICMgZ2V0IG5hbWUgb2YgYSB0ZW1wIGRpcmVjdG9yeSB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cAotICAgIGlmIGN1cnJlbnRfcHJvY2VzcygpLl90ZW1wZGlyIGlzIE5vbmU6CisgICAgdGVtcGRpciA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2NvbmZpZy5nZXQoJ3RlbXBkaXInKQorICAgIGlmIHRlbXBkaXIgaXMgTm9uZToKICAgICAgICAgaW1wb3J0IHNodXRpbCwgdGVtcGZpbGUKICAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdweW1wLScpCiAgICAgICAgIGluZm8oJ2NyZWF0ZWQgdGVtcCBkaXJlY3RvcnkgJXMnLCB0ZW1wZGlyKQogICAgICAgICBGaW5hbGl6ZShOb25lLCBzaHV0aWwucm10cmVlLCBhcmdzPVt0ZW1wZGlyXSwgZXhpdHByaW9yaXR5PS0xMDApCi0gICAgICAgIGN1cnJlbnRfcHJvY2VzcygpLl90ZW1wZGlyID0gdGVtcGRpcgotICAgIHJldHVybiBjdXJyZW50X3Byb2Nlc3MoKS5fdGVtcGRpcgorICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWdbJ3RlbXBkaXInXSA9IHRlbXBkaXIKKyAgICByZXR1cm4gdGVtcGRpcgogCiAjCiAjIFN1cHBvcnQgZm9yIHJlaW5pdGlhbGl6YXRpb24gb2Ygb2JqZWN0cyB3aGVuIGJvb3RzdHJhcHBpbmcgYSBjaGlsZCBwcm9jZXNzCkBAIC0yNzMsOCArMjcyLDggQEAKIF9leGl0aW5nID0gRmFsc2UKIAogZGVmIF9leGl0X2Z1bmN0aW9uKGluZm89aW5mbywgZGVidWc9ZGVidWcsIF9ydW5fZmluYWxpemVycz1fcnVuX2ZpbmFsaXplcnMsCi0gICAgICAgICAgICAgICAgICAgYWN0aXZlX2NoaWxkcmVuPWFjdGl2ZV9jaGlsZHJlbiwKLSAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Byb2Nlc3M9Y3VycmVudF9wcm9jZXNzKToKKyAgICAgICAgICAgICAgICAgICBhY3RpdmVfY2hpbGRyZW49cHJvY2Vzcy5hY3RpdmVfY2hpbGRyZW4sCisgICAgICAgICAgICAgICAgICAgY3VycmVudF9wcm9jZXNzPXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKToKICAgICAjIFdlIGhvbGQgb24gdG8gcmVmZXJlbmNlcyB0byBmdW5jdGlvbnMgaW4gdGhlIGFyZ2xpc3QgZHVlIHRvIHRoZQogICAgICMgc2l0dWF0aW9uIGRlc2NyaWJlZCBiZWxvdywgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhpcwogICAgICMgbW9kdWxlJ3MgZ2xvYmFscyBhcmUgZGVzdHJveWVkLgpAQCAtMzAzLDcgKzMwMiw3IEBACiAgICAgICAgICAgICAjICM5MjA3LgogCiAgICAgICAgICAgICBmb3IgcCBpbiBhY3RpdmVfY2hpbGRyZW4oKToKLSAgICAgICAgICAgICAgICBpZiBwLl9kYWVtb25pYzoKKyAgICAgICAgICAgICAgICBpZiBwLmRhZW1vbjoKICAgICAgICAgICAgICAgICAgICAgaW5mbygnY2FsbGluZyB0ZXJtaW5hdGUoKSBmb3IgZGFlbW9uICVzJywgcC5uYW1lKQogICAgICAgICAgICAgICAgICAgICBwLl9wb3Blbi50ZXJtaW5hdGUoKQogCkBAIC0zMzUsMyArMzM0LDM2IEBACiAgICAgICAgIHJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgbGFtYmRhIG9iaiA6IG9iai5fX2RpY3RfXy5jbGVhcigpKQogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgICAgICByZXR1cm4gdHlwZShzZWxmKSwgKCkKKworIworIyBDbG9zZSBmZHMgZXhjZXB0IHRob3NlIHNwZWNpZmllZAorIworCit0cnk6CisgICAgTUFYRkQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCitleGNlcHQgRXhjZXB0aW9uOgorICAgIE1BWEZEID0gMjU2CisKK2RlZiBjbG9zZV9hbGxfZmRzX2V4Y2VwdChmZHMpOgorICAgIGZkcyA9IGxpc3QoZmRzKSArIFstMSwgTUFYRkRdCisgICAgZmRzLnNvcnQoKQorICAgIGFzc2VydCBmZHNbLTFdID09IE1BWEZELCAnZmQgdG9vIGxhcmdlJworICAgIGZvciBpIGluIHJhbmdlKGxlbihmZHMpIC0gMSk6CisgICAgICAgIG9zLmNsb3NlcmFuZ2UoZmRzW2ldKzEsIGZkc1tpKzFdKQorCisjCisjIFN0YXJ0IGEgcHJvZ3JhbSB3aXRoIG9ubHkgc3BlY2lmaWVkIGZkcyBrZXB0IG9wZW4KKyMKKworZGVmIHNwYXdudl9wYXNzZmRzKHBhdGgsIGFyZ3MsIHBhc3NmZHMpOgorICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCisgICAgcGFzc2ZkcyA9IHNvcnRlZChwYXNzZmRzKQorICAgIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSA9IG9zLnBpcGUoKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIF9wb3NpeHN1YnByb2Nlc3MuZm9ya19leGVjKAorICAgICAgICAgICAgYXJncywgW29zLmZzZW5jb2RlKHBhdGgpXSwgVHJ1ZSwgcGFzc2ZkcywgTm9uZSwgTm9uZSwKKyAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSwKKyAgICAgICAgICAgIEZhbHNlLCBGYWxzZSwgTm9uZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jbG9zZShlcnJwaXBlX3JlYWQpCisgICAgICAgIG9zLmNsb3NlKGVycnBpcGVfd3JpdGUpCmRpZmYgLS1naXQgYS9MaWIvbmV0cmMucHkgYi9MaWIvbmV0cmMucHkKaW5kZXggMmFhNDhmMy4uYmJiM2QyMyAxMDA2NDQKLS0tIGEvTGliL25ldHJjLnB5CisrKyBiL0xpYi9uZXRyYy5weQpAQCAtMyw4ICszLDYgQEAKICMgTW9kdWxlIGFuZCBkb2N1bWVudGF0aW9uIGJ5IEVyaWMgUy4gUmF5bW9uZCwgMjEgRGVjIDE5OTgKIAogaW1wb3J0IG9zLCBzaGxleCwgc3RhdAotaWYgb3MubmFtZSA9PSAncG9zaXgnOgotICAgIGltcG9ydCBwd2QKIAogX19hbGxfXyA9IFsibmV0cmMiLCAiTmV0cmNQYXJzZUVycm9yIl0KIApAQCAtMjgsNyArMjYsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsnSE9NRSddLCAiLm5ldHJjIikKICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDb3VsZCBub3QgZmluZCAubmV0cmM6ICRIT01FIGlzIG5vdCBzZXQiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNvdWxkIG5vdCBmaW5kIC5uZXRyYzogJEhPTUUgaXMgbm90IHNldCIpCiAgICAgICAgIHNlbGYuaG9zdHMgPSB7fQogICAgICAgICBzZWxmLm1hY3JvcyA9IHt9CiAgICAgICAgIHdpdGggb3BlbihmaWxlKSBhcyBmcDoKQEAgLTkyLDYgKzkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnIGFuZCBkZWZhdWx0X25ldHJjOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCA9IG9zLmZzdGF0KGZwLmZpbGVubygpKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvcC5zdF91aWQgIT0gb3MuZ2V0dWlkKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHB3ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm93bmVyID0gcHdkLmdldHB3dWlkKHByb3Auc3RfdWlkKVswXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKZGlmZiAtLWdpdCBhL0xpYi9ubnRwbGliLnB5IGIvTGliL25udHBsaWIucHkKaW5kZXggMDJjYzM3Yy4uZmNiMDFkMyAxMDA2NDQKLS0tIGEvTGliL25udHBsaWIucHkKKysrIGIvTGliL25udHBsaWIucHkKQEAgLTI3OSw3ICsyNzksNyBAQAogCiBpZiBfaGF2ZV9zc2w6CiAKLSAgICBkZWYgX2VuY3J5cHRfb24oc29jaywgY29udGV4dCk6CisgICAgZGVmIF9lbmNyeXB0X29uKHNvY2ssIGNvbnRleHQsIGhvc3RuYW1lKToKICAgICAgICAgIiIiV3JhcCBhIHNvY2tldCBpbiBTU0wvVExTLiBBcmd1bWVudHM6CiAgICAgICAgIC0gc29jazogU29ja2V0IHRvIHdyYXAKICAgICAgICAgLSBjb250ZXh0OiBTU0wgY29udGV4dCB0byB1c2UgZm9yIHRoZSBlbmNyeXB0ZWQgY29ubmVjdGlvbgpAQCAtMjg4LDEwICsyODgsOSBAQAogICAgICAgICAiIiIKICAgICAgICAgIyBHZW5lcmF0ZSBhIGRlZmF1bHQgU1NMIGNvbnRleHQgaWYgbm9uZSB3YXMgcGFzc2VkLgogICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgICAgICMgU1NMdjIgY29uc2lkZXJlZCBoYXJtZnVsLgotICAgICAgICAgICAgY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgotICAgICAgICByZXR1cm4gY29udGV4dC53cmFwX3NvY2tldChzb2NrKQorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KCkKKyAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gaG9zdG5hbWUgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgIHJldHVybiBjb250ZXh0LndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCiAKIAogIyBUaGUgY2xhc3NlcyB0aGVtc2VsdmVzCkBAIC0zNjYsNyArMzY1LDcgQEAKICAgICAgICAgaWYgaXNfY29ubmVjdGVkKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5xdWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIGlzX2Nvbm5lY3RlZCgpOgpAQCAtOTU2LDcgKzk1NSw3IEBACiAgICAgICAgICAgICAgICAgaWYgYXV0aDoKICAgICAgICAgICAgICAgICAgICAgdXNlciA9IGF1dGhbMF0KICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBhdXRoWzJdCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBQZXJmb3JtIE5OVFAgYXV0aGVudGljYXRpb24gaWYgbmVlZGVkLgogICAgICAgICBpZiBub3QgdXNlcjoKQEAgLTEwMDcsNyArMTAwNiw3IEBACiAgICAgICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoJ1NUQVJUVExTJykKICAgICAgICAgICAgIGlmIHJlc3Auc3RhcnRzd2l0aCgnMzgyJyk6CiAgICAgICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBfZW5jcnlwdF9vbihzZWxmLnNvY2ssIGNvbnRleHQpCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gX2VuY3J5cHRfb24oc2VsZi5zb2NrLCBjb250ZXh0LCBzZWxmLmhvc3QpCiAgICAgICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQogICAgICAgICAgICAgICAgIHNlbGYudGxzX29uID0gVHJ1ZQogICAgICAgICAgICAgICAgICMgQ2FwYWJpbGl0aWVzIG1heSBjaGFuZ2UgYWZ0ZXIgVExTIHN0YXJ0cyB1cCwgc28gYXNrIGZvciB0aGVtCkBAIC0xMDY3LDcgKzEwNjYsNyBAQAogICAgICAgICAgICAgaW4gZGVmYXVsdCBwb3J0IGFuZCB0aGUgYHNzbF9jb250ZXh0YCBhcmd1bWVudCBmb3IgU1NMIGNvbm5lY3Rpb25zLgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCB0aW1lb3V0KQotICAgICAgICAgICAgc2VsZi5zb2NrID0gX2VuY3J5cHRfb24oc2VsZi5zb2NrLCBzc2xfY29udGV4dCkKKyAgICAgICAgICAgIHNlbGYuc29jayA9IF9lbmNyeXB0X29uKHNlbGYuc29jaywgc3NsX2NvbnRleHQsIGhvc3QpCiAgICAgICAgICAgICBmaWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQogICAgICAgICAgICAgX05OVFBCYXNlLl9faW5pdF9fKHNlbGYsIGZpbGUsIGhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVybW9kZT1yZWFkZXJtb2RlLCB0aW1lb3V0PXRpbWVvdXQpCmRpZmYgLS1naXQgYS9MaWIvbnRwYXRoLnB5IGIvTGliL250cGF0aC5weQppbmRleCAzMDNlNTg2Li5hZjNmYjg3IDEwMDY0NAotLS0gYS9MaWIvbnRwYXRoLnB5CisrKyBiL0xpYi9udHBhdGgucHkKQEAgLTE3LDcgKzE3LDcgQEAKICAgICAgICAgICAgImlzbW91bnQiLCAiZXhwYW5kdXNlciIsImV4cGFuZHZhcnMiLCJub3JtcGF0aCIsImFic3BhdGgiLAogICAgICAgICAgICAic3BsaXR1bmMiLCJjdXJkaXIiLCJwYXJkaXIiLCJzZXAiLCJwYXRoc2VwIiwiZGVmcGF0aCIsImFsdHNlcCIsCiAgICAgICAgICAgICJleHRzZXAiLCJkZXZudWxsIiwicmVhbHBhdGgiLCJzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyIsInJlbHBhdGgiLAotICAgICAgICAgICAic2FtZWZpbGUiLCAic2FtZW9wZW5maWxlIixdCisgICAgICAgICAgICJzYW1lZmlsZSIsICJzYW1lb3BlbmZpbGUiLCAic2FtZXN0YXQiLF0KIAogIyBzdHJpbmdzIHJlcHJlc2VudGluZyB2YXJpb3VzIHBhdGgtcmVsYXRlZCBiaXRzIGFuZCBwaWVjZXMKICMgVGhlc2UgYXJlIHByaW1hcmlseSBmb3IgZXhwb3J0OyBpbnRlcm5hbGx5LCB0aGV5IGFyZSBoYXJkY29kZWQuCkBAIC0zMCw5ICszMCw2IEBACiBkZWZwYXRoID0gJy47QzpcXGJpbicKIGlmICdjZScgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgogICAgIGRlZnBhdGggPSAnXFxXaW5kb3dzJwotZWxpZiAnb3MyJyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgIyBPUy8yIHcvIFZBQ1BQCi0gICAgYWx0c2VwID0gJy8nCiBkZXZudWxsID0gJ251bCcKIAogZGVmIF9nZXRfZW1wdHkocGF0aCk6CkBAIC0yNjAsMTIgKzI1NywxMSBAQAogCiBkZWYgaXNsaW5rKHBhdGgpOgogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLgotICAgIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBXaW5kb3dzIHByaW9yIHRvIDYuMAotICAgIGFuZCBmb3IgT1MvMi4KKyAgICBUaGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgV2luZG93cyBwcmlvciB0byA2LjAuCiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBzdCA9IG9zLmxzdGF0KHBhdGgpCi0gICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgIGV4Y2VwdCAoT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gc3RhdC5TX0lTTE5LKHN0LnN0X21vZGUpCiAKQEAgLTI3NSwyMCArMjcxLDM5IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIFRydWUgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCAob3MuZXJyb3IsIFdpbmRvd3NFcnJvcik6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCiAKLSMgSXMgYSBwYXRoIGEgbW91bnQgcG9pbnQ/ICBFaXRoZXIgYSByb290ICh3aXRoIG9yIHdpdGhvdXQgZHJpdmUgbGV0dGVyKQotIyBvciBhbiBVTkMgcGF0aCB3aXRoIGF0IG1vc3QgYSAvIG9yIFwgYWZ0ZXIgdGhlIG1vdW50IHBvaW50LgotCisjIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PworIyBBbnkgZHJpdmUgbGV0dGVyIHJvb3QgKGVnIGM6XCkKKyMgQW55IHNoYXJlIFVOQyAoZWcgXFxzZXJ2ZXJcc2hhcmUpCisjIEFueSB2b2x1bWUgbW91bnRlZCBvbiBhIGZpbGVzeXN0ZW0gZm9sZGVyCisjCisjIE5vIG9uZSBtZXRob2QgZGV0ZWN0cyBhbGwgdGhyZWUgc2l0dWF0aW9ucy4gSGlzdG9yaWNhbGx5IHdlJ3ZlIGxleGljYWxseQorIyBkZXRlY3RlZCBkcml2ZSBsZXR0ZXIgcm9vdHMgYW5kIHNoYXJlIFVOQ3MuIFRoZSBjYW5vbmljYWwgYXBwcm9hY2ggdG8KKyMgZGV0ZWN0aW5nIG1vdW50ZWQgdm9sdW1lcyAocXVlcnlpbmcgdGhlIHJlcGFyc2UgdGFnKSBmYWlscyBmb3IgdGhlIG1vc3QKKyMgY29tbW9uIGNhc2U6IGRyaXZlIGxldHRlciByb290cy4gVGhlIGFsdGVybmF0aXZlIHdoaWNoIHVzZXMgR2V0Vm9sdW1lUGF0aE5hbWUKKyMgZmFpbHMgaWYgdGhlIGRyaXZlIGxldHRlciBpcyB0aGUgcmVzdWx0IG9mIGEgU1VCU1QuCit0cnk6CisgICAgZnJvbSBudCBpbXBvcnQgX2dldHZvbHVtZXBhdGhuYW1lCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX2dldHZvbHVtZXBhdGhuYW1lID0gTm9uZQogZGVmIGlzbW91bnQocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChkZWZpbmVkIGFzIHJvb3Qgb2YgZHJpdmUpIiIiCisgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChhIGRyaXZlIHJvb3QsIHRoZSByb290IG9mIGEKKyAgICBzaGFyZSwgb3IgYSBtb3VudGVkIHZvbHVtZSkiIiIKICAgICBzZXBzID0gX2dldF9ib3Roc2VwcyhwYXRoKQorICAgIHBhdGggPSBhYnNwYXRoKHBhdGgpCiAgICAgcm9vdCwgcmVzdCA9IHNwbGl0ZHJpdmUocGF0aCkKICAgICBpZiByb290IGFuZCByb290WzBdIGluIHNlcHM6CiAgICAgICAgIHJldHVybiAobm90IHJlc3QpIG9yIChyZXN0IGluIHNlcHMpCi0gICAgcmV0dXJuIHJlc3QgaW4gc2VwcworICAgIGlmIHJlc3QgaW4gc2VwczoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmIF9nZXR2b2x1bWVwYXRobmFtZToKKyAgICAgICAgcmV0dXJuIHBhdGgucnN0cmlwKHNlcHMpID09IF9nZXR2b2x1bWVwYXRobmFtZShwYXRoKS5yc3RyaXAoc2VwcykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKIAogCiAjIEV4cGFuZCBwYXRocyBiZWdpbm5pbmcgd2l0aCAnficgb3IgJ351c2VyJy4KQEAgLTUzMCw3ICs1NDUsNyBAQAogICAgICAgICBpZiBwYXRoOiAjIEVtcHR5IHBhdGggbXVzdCByZXR1cm4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwYXRoID0gX2dldGZ1bGxwYXRobmFtZShwYXRoKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MgIyBCYWQgcGF0aCAtIHJldHVybiB1bmNoYW5nZWQuCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6CiAgICAgICAgICAgICBwYXRoID0gb3MuZ2V0Y3dkYigpCkBAIC01OTgsMjMgKzYxMyw2IEBACiAgICAgZGVmIF9nZXRmaW5hbHBhdGhuYW1lKGYpOgogICAgICAgICByZXR1cm4gbm9ybWNhc2UoYWJzcGF0aChmKSkKIAotZGVmIHNhbWVmaWxlKGYxLCBmMik6Ci0gICAgIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIKLSAgICByZXR1cm4gX2dldGZpbmFscGF0aG5hbWUoZjEpID09IF9nZXRmaW5hbHBhdGhuYW1lKGYyKQotCi0KLXRyeToKLSAgICBmcm9tIG50IGltcG9ydCBfZ2V0ZmlsZWluZm9ybWF0aW9uCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBPbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcywganVzdCByZXR1cm4gdGhlIGZkIGFuZCBzZWUgdGhhdAotICAgICMgaXQgY29tcGFyZXMgZXF1YWwgaW4gc2FtZW9wZW5maWxlLgotICAgIGRlZiBfZ2V0ZmlsZWluZm9ybWF0aW9uKGZkKToKLSAgICAgICAgcmV0dXJuIGZkCi0KLWRlZiBzYW1lb3BlbmZpbGUoZjEsIGYyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHJldHVybiBfZ2V0ZmlsZWluZm9ybWF0aW9uKGYxKSA9PSBfZ2V0ZmlsZWluZm9ybWF0aW9uKGYyKQotCiAKIHRyeToKICAgICAjIFRoZSBnZW5lcmljcGF0aC5pc2RpciBpbXBsZW1lbnRhdGlvbiB1c2VzIG9zLnN0YXQgYW5kIGNoZWNrcyB0aGUgbW9kZQpkaWZmIC0tZ2l0IGEvTGliL250dXJsMnBhdGgucHkgYi9MaWIvbnR1cmwycGF0aC5weQppbmRleCA1MTFkY2VjLi41YTZkNDRhIDEwMDY0NAotLS0gYS9MaWIvbnR1cmwycGF0aC5weQorKysgYi9MaWIvbnR1cmwycGF0aC5weQpAQCAtMjMsNyArMjMsNyBAQAogICAgIGNvbXAgPSB1cmwuc3BsaXQoJ3wnKQogICAgIGlmIGxlbihjb21wKSAhPSAyIG9yIGNvbXBbMF1bLTFdIG5vdCBpbiBzdHJpbmcuYXNjaWlfbGV0dGVyczoKICAgICAgICAgZXJyb3IgPSAnQmFkIFVSTDogJyArIHVybAotICAgICAgICByYWlzZSBJT0Vycm9yKGVycm9yKQorICAgICAgICByYWlzZSBPU0Vycm9yKGVycm9yKQogICAgIGRyaXZlID0gY29tcFswXVstMV0udXBwZXIoKQogICAgIGNvbXBvbmVudHMgPSBjb21wWzFdLnNwbGl0KCcvJykKICAgICBwYXRoID0gZHJpdmUgKyAnOicKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBjb21wID0gcC5zcGxpdCgnOicpCiAgICAgaWYgbGVuKGNvbXApICE9IDIgb3IgbGVuKGNvbXBbMF0pID4gMToKICAgICAgICAgZXJyb3IgPSAnQmFkIHBhdGg6ICcgKyBwCi0gICAgICAgIHJhaXNlIElPRXJyb3IoZXJyb3IpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3IpCiAKICAgICBkcml2ZSA9IHVybGxpYi5wYXJzZS5xdW90ZShjb21wWzBdLnVwcGVyKCkpCiAgICAgY29tcG9uZW50cyA9IGNvbXBbMV0uc3BsaXQoJ1xcJykKZGlmZiAtLWdpdCBhL0xpYi9vcGNvZGUucHkgYi9MaWIvb3Bjb2RlLnB5CmluZGV4IGE2MzlmZTMuLjBiZDFlZTYgMTAwNjQ0Ci0tLSBhL0xpYi9vcGNvZGUucHkKKysrIGIvTGliL29wY29kZS5weQpAQCAtOCw2ICs4LDE5IEBACiAgICAgICAgICAgICJoYXNsb2NhbCIsICJoYXNjb21wYXJlIiwgImhhc2ZyZWUiLCAib3BuYW1lIiwgIm9wbWFwIiwKICAgICAgICAgICAgIkhBVkVfQVJHVU1FTlQiLCAiRVhURU5ERURfQVJHIiwgImhhc25hcmdzIl0KIAorIyBJdCdzIGEgY2hpY2tlbi1hbmQtZWdnIEknbSBhZnJhaWQ6CisjIFdlJ3JlIGltcG9ydGVkIGJlZm9yZSBfb3Bjb2RlJ3MgbWFkZS4KKyMgV2l0aCBleGNlcHRpb24gdW5oZWVkZWQKKyMgKHN0YWNrX2VmZmVjdCBpcyBub3QgbmVlZGVkKQorIyBCb3RoIG91ciBjaGlja2VucyBhbmQgZWdncyBhcmUgYWxsYXllZC4KKyMgICAgIC0tTGFycnkgSGFzdGluZ3MsIDIwMTMvMTEvMjMKKwordHJ5OgorICAgIGZyb20gX29wY29kZSBpbXBvcnQgc3RhY2tfZWZmZWN0CisgICAgX19hbGxfXy5hcHBlbmQoJ3N0YWNrX2VmZmVjdCcpCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCiBjbXBfb3AgPSAoJzwnLCAnPD0nLCAnPT0nLCAnIT0nLCAnPicsICc+PScsICdpbicsICdub3QgaW4nLCAnaXMnLAogICAgICAgICAnaXMgbm90JywgJ2V4Y2VwdGlvbiBtYXRjaCcsICdCQUQnKQogCkBAIC04NCw3ICs5Nyw2IEBACiBkZWZfb3AoJ0JJTkFSWV9PUicsIDY2KQogZGVmX29wKCdJTlBMQUNFX1BPV0VSJywgNjcpCiBkZWZfb3AoJ0dFVF9JVEVSJywgNjgpCi1kZWZfb3AoJ1NUT1JFX0xPQ0FMUycsIDY5KQogCiBkZWZfb3AoJ1BSSU5UX0VYUFInLCA3MCkKIGRlZl9vcCgnTE9BRF9CVUlMRF9DTEFTUycsIDcxKQpAQCAtMTc5LDYgKzE5MSw5IEBACiBkZWZfb3AoJ1NFVF9BREQnLCAxNDYpCiBkZWZfb3AoJ01BUF9BREQnLCAxNDcpCiAKK2RlZl9vcCgnTE9BRF9DTEFTU0RFUkVGJywgMTQ4KQoraGFzZnJlZS5hcHBlbmQoMTQ4KQorCiBkZWZfb3AoJ0VYVEVOREVEX0FSRycsIDE0NCkKIEVYVEVOREVEX0FSRyA9IDE0NAogCmRpZmYgLS1naXQgYS9MaWIvb3BlcmF0b3IucHkgYi9MaWIvb3BlcmF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYwMzQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9vcGVyYXRvci5weQpAQCAtMCwwICsxLDQxMSBAQAorIiIiCitPcGVyYXRvciBJbnRlcmZhY2UKKworVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBmdW5jdGlvbnMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50cmluc2ljCitvcGVyYXRvcnMgb2YgUHl0aG9uLiAgRm9yIGV4YW1wbGUsIG9wZXJhdG9yLmFkZCh4LCB5KSBpcyBlcXVpdmFsZW50Cit0byB0aGUgZXhwcmVzc2lvbiB4K3kuICBUaGUgZnVuY3Rpb24gbmFtZXMgYXJlIHRob3NlIHVzZWQgZm9yIHNwZWNpYWwKK21ldGhvZHM7IHZhcmlhbnRzIHdpdGhvdXQgbGVhZGluZyBhbmQgdHJhaWxpbmcgJ19fJyBhcmUgYWxzbyBwcm92aWRlZAorZm9yIGNvbnZlbmllbmNlLgorCitUaGlzIGlzIHRoZSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kdWxlLgorIiIiCisKK19fYWxsX18gPSBbJ2FicycsICdhZGQnLCAnYW5kXycsICdhdHRyZ2V0dGVyJywgJ2NvbmNhdCcsICdjb250YWlucycsICdjb3VudE9mJywKKyAgICAgICAgICAgJ2RlbGl0ZW0nLCAnZXEnLCAnZmxvb3JkaXYnLCAnZ2UnLCAnZ2V0aXRlbScsICdndCcsICdpYWRkJywgJ2lhbmQnLAorICAgICAgICAgICAnaWNvbmNhdCcsICdpZmxvb3JkaXYnLCAnaWxzaGlmdCcsICdpbW9kJywgJ2ltdWwnLCAnaW5kZXgnLAorICAgICAgICAgICAnaW5kZXhPZicsICdpbnYnLCAnaW52ZXJ0JywgJ2lvcicsICdpcG93JywgJ2lyc2hpZnQnLCAnaXNfJywKKyAgICAgICAgICAgJ2lzX25vdCcsICdpc3ViJywgJ2l0ZW1nZXR0ZXInLCAnaXRydWVkaXYnLCAnaXhvcicsICdsZScsCisgICAgICAgICAgICdsZW5ndGhfaGludCcsICdsc2hpZnQnLCAnbHQnLCAnbWV0aG9kY2FsbGVyJywgJ21vZCcsICdtdWwnLCAnbmUnLAorICAgICAgICAgICAnbmVnJywgJ25vdF8nLCAnb3JfJywgJ3BvcycsICdwb3cnLCAncnNoaWZ0JywgJ3NldGl0ZW0nLCAnc3ViJywKKyAgICAgICAgICAgJ3RydWVkaXYnLCAndHJ1dGgnLCAneG9yJ10KKworZnJvbSBidWlsdGlucyBpbXBvcnQgYWJzIGFzIF9hYnMKKworCisjIENvbXBhcmlzb24gT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgbHQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8IGIuIgorICAgIHJldHVybiBhIDwgYgorCitkZWYgbGUoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PSBiLiIKKyAgICByZXR1cm4gYSA8PSBiCisKK2RlZiBlcShhLCBiKToKKyAgICAiU2FtZSBhcyBhID09IGIuIgorICAgIHJldHVybiBhID09IGIKKworZGVmIG5lKGEsIGIpOgorICAgICJTYW1lIGFzIGEgIT0gYi4iCisgICAgcmV0dXJuIGEgIT0gYgorCitkZWYgZ2UoYSwgYik6CisgICAgIlNhbWUgYXMgYSA+PSBiLiIKKyAgICByZXR1cm4gYSA+PSBiCisKK2RlZiBndChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4gYi4iCisgICAgcmV0dXJuIGEgPiBiCisKKyMgTG9naWNhbCBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBub3RfKGEpOgorICAgICJTYW1lIGFzIG5vdCBhLiIKKyAgICByZXR1cm4gbm90IGEKKworZGVmIHRydXRoKGEpOgorICAgICJSZXR1cm4gVHJ1ZSBpZiBhIGlzIHRydWUsIEZhbHNlIG90aGVyd2lzZS4iCisgICAgcmV0dXJuIFRydWUgaWYgYSBlbHNlIEZhbHNlCisKK2RlZiBpc18oYSwgYik6CisgICAgIlNhbWUgYXMgYSBpcyBiLiIKKyAgICByZXR1cm4gYSBpcyBiCisKK2RlZiBpc19ub3QoYSwgYik6CisgICAgIlNhbWUgYXMgYSBpcyBub3QgYi4iCisgICAgcmV0dXJuIGEgaXMgbm90IGIKKworIyBNYXRoZW1hdGljYWwvQml0d2lzZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworZGVmIGFicyhhKToKKyAgICAiU2FtZSBhcyBhYnMoYSkuIgorICAgIHJldHVybiBfYWJzKGEpCisKK2RlZiBhZGQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArIGIuIgorICAgIHJldHVybiBhICsgYgorCitkZWYgYW5kXyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICYgYi4iCisgICAgcmV0dXJuIGEgJiBiCisKK2RlZiBmbG9vcmRpdihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC8vIGIuIgorICAgIHJldHVybiBhIC8vIGIKKworZGVmIGluZGV4KGEpOgorICAgICJTYW1lIGFzIGEuX19pbmRleF9fKCkuIgorICAgIHJldHVybiBhLl9faW5kZXhfXygpCisKK2RlZiBpbnYoYSk6CisgICAgIlNhbWUgYXMgfmEuIgorICAgIHJldHVybiB+YQoraW52ZXJ0ID0gaW52CisKK2RlZiBsc2hpZnQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PCBiLiIKKyAgICByZXR1cm4gYSA8PCBiCisKK2RlZiBtb2QoYSwgYik6CisgICAgIlNhbWUgYXMgYSAlIGIuIgorICAgIHJldHVybiBhICUgYgorCitkZWYgbXVsKGEsIGIpOgorICAgICJTYW1lIGFzIGEgKiBiLiIKKyAgICByZXR1cm4gYSAqIGIKKworZGVmIG5lZyhhKToKKyAgICAiU2FtZSBhcyAtYS4iCisgICAgcmV0dXJuIC1hCisKK2RlZiBvcl8oYSwgYik6CisgICAgIlNhbWUgYXMgYSB8IGIuIgorICAgIHJldHVybiBhIHwgYgorCitkZWYgcG9zKGEpOgorICAgICJTYW1lIGFzICthLiIKKyAgICByZXR1cm4gK2EKKworZGVmIHBvdyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICoqIGIuIgorICAgIHJldHVybiBhICoqIGIKKworZGVmIHJzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4+IGIuIgorICAgIHJldHVybiBhID4+IGIKKworZGVmIHN1YihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC0gYi4iCisgICAgcmV0dXJuIGEgLSBiCisKK2RlZiB0cnVlZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLyBiLiIKKyAgICByZXR1cm4gYSAvIGIKKworZGVmIHhvcihhLCBiKToKKyAgICAiU2FtZSBhcyBhIF4gYi4iCisgICAgcmV0dXJuIGEgXiBiCisKKyMgU2VxdWVuY2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBjb25jYXQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArIGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iCisgICAgaWYgbm90IGhhc2F0dHIoYSwgJ19fZ2V0aXRlbV9fJyk6CisgICAgICAgIG1zZyA9ICInJXMnIG9iamVjdCBjYW4ndCBiZSBjb25jYXRlbmF0ZWQiICUgdHlwZShhKS5fX25hbWVfXworICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgIHJldHVybiBhICsgYgorCitkZWYgY29udGFpbnMoYSwgYik6CisgICAgIlNhbWUgYXMgYiBpbiBhIChub3RlIHJldmVyc2VkIG9wZXJhbmRzKS4iCisgICAgcmV0dXJuIGIgaW4gYQorCitkZWYgY291bnRPZihhLCBiKToKKyAgICAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXMgYiBvY2N1cnMgaW4gYS4iCisgICAgY291bnQgPSAwCisgICAgZm9yIGkgaW4gYToKKyAgICAgICAgaWYgaSA9PSBiOgorICAgICAgICAgICAgY291bnQgKz0gMQorICAgIHJldHVybiBjb3VudAorCitkZWYgZGVsaXRlbShhLCBiKToKKyAgICAiU2FtZSBhcyBkZWwgYVtiXS4iCisgICAgZGVsIGFbYl0KKworZGVmIGdldGl0ZW0oYSwgYik6CisgICAgIlNhbWUgYXMgYVtiXS4iCisgICAgcmV0dXJuIGFbYl0KKworZGVmIGluZGV4T2YoYSwgYik6CisgICAgIlJldHVybiB0aGUgZmlyc3QgaW5kZXggb2YgYiBpbiBhLiIKKyAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoYSk6CisgICAgICAgIGlmIGogPT0gYjoKKyAgICAgICAgICAgIHJldHVybiBpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc2VxdWVuY2UuaW5kZXgoeCk6IHggbm90IGluIHNlcXVlbmNlJykKKworZGVmIHNldGl0ZW0oYSwgYiwgYyk6CisgICAgIlNhbWUgYXMgYVtiXSA9IGMuIgorICAgIGFbYl0gPSBjCisKK2RlZiBsZW5ndGhfaGludChvYmosIGRlZmF1bHQ9MCk6CisgICAgIiIiCisgICAgUmV0dXJuIGFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gb2JqLgorICAgIFRoaXMgaXMgdXNlZnVsIGZvciBwcmVzaXppbmcgY29udGFpbmVycyB3aGVuIGJ1aWxkaW5nIGZyb20gYW4gaXRlcmFibGUuCisKKyAgICBJZiB0aGUgb2JqZWN0IHN1cHBvcnRzIGxlbigpLCB0aGUgcmVzdWx0IHdpbGwgYmUgZXhhY3QuIE90aGVyd2lzZSwgaXQgbWF5CisgICAgb3Zlci0gb3IgdW5kZXItZXN0aW1hdGUgYnkgYW4gYXJiaXRyYXJ5IGFtb3VudC4gVGhlIHJlc3VsdCB3aWxsIGJlIGFuCisgICAgaW50ZWdlciA+PSAwLgorICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKGRlZmF1bHQsIGludCk6CisgICAgICAgIG1zZyA9ICgiJyVzJyBvYmplY3QgY2Fubm90IGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIiICUKKyAgICAgICAgICAgICAgIHR5cGUoZGVmYXVsdCkuX19uYW1lX18pCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBsZW4ob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHBhc3MKKworICAgIHRyeToKKyAgICAgICAgaGludCA9IHR5cGUob2JqKS5fX2xlbmd0aF9oaW50X18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICB0cnk6CisgICAgICAgIHZhbCA9IGhpbnQob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYgdmFsIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbCwgaW50KToKKyAgICAgICAgbXNnID0gKCdfX2xlbmd0aF9oaW50X18gbXVzdCBiZSBpbnRlZ2VyLCBub3QgJXMnICUKKyAgICAgICAgICAgICAgIHR5cGUodmFsKS5fX25hbWVfXykKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBpZiB2YWwgPCAwOgorICAgICAgICBtc2cgPSAnX19sZW5ndGhfaGludF9fKCkgc2hvdWxkIHJldHVybiA+PSAwJworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKyAgICByZXR1cm4gdmFsCisKKyMgR2VuZXJhbGl6ZWQgTG9va3VwIE9iamVjdHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2NsYXNzIGF0dHJnZXR0ZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgZmV0Y2hlcyB0aGUgZ2l2ZW4gYXR0cmlidXRlKHMpIGZyb20gaXRzIG9wZXJhbmQuCisgICAgQWZ0ZXIgZiA9IGF0dHJnZXR0ZXIoJ25hbWUnKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHIubmFtZS4KKyAgICBBZnRlciBnID0gYXR0cmdldHRlcignbmFtZScsICdkYXRlJyksIHRoZSBjYWxsIGcocikgcmV0dXJucyAoci5uYW1lLCByLmRhdGUpLgorICAgIEFmdGVyIGggPSBhdHRyZ2V0dGVyKCduYW1lLmZpcnN0JywgJ25hbWUubGFzdCcpLCB0aGUgY2FsbCBoKHIpIHJldHVybnMKKyAgICAoci5uYW1lLmZpcnN0LCByLm5hbWUubGFzdCkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0dHIsICphdHRycyk6CisgICAgICAgIGlmIG5vdCBhdHRyczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGF0dHIsIHN0cik6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdhdHRyaWJ1dGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJykKKyAgICAgICAgICAgIG5hbWVzID0gYXR0ci5zcGxpdCgnLicpCisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBzZWxmLl9jYWxsID0gZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ2V0dGVycyA9IHR1cGxlKG1hcChhdHRyZ2V0dGVyLCAoYXR0ciwpICsgYXR0cnMpKQorICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUoZ2V0dGVyKG9iaikgZm9yIGdldHRlciBpbiBnZXR0ZXJzKQorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5fY2FsbChvYmopCisKK2NsYXNzIGl0ZW1nZXR0ZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgZmV0Y2hlcyB0aGUgZ2l2ZW4gaXRlbShzKSBmcm9tIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBpdGVtZ2V0dGVyKDIpLCB0aGUgY2FsbCBmKHIpIHJldHVybnMgclsyXS4KKyAgICBBZnRlciBnID0gaXRlbWdldHRlcigyLCA1LCAzKSwgdGhlIGNhbGwgZyhyKSByZXR1cm5zIChyWzJdLCByWzVdLCByWzNdKQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVtLCAqaXRlbXMpOgorICAgICAgICBpZiBub3QgaXRlbXM6CisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIHJldHVybiBvYmpbaXRlbV0KKyAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpdGVtcyA9IChpdGVtLCkgKyBpdGVtcworICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUob2JqW2ldIGZvciBpIGluIGl0ZW1zKQorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5fY2FsbChvYmopCisKK2NsYXNzIG1ldGhvZGNhbGxlcjoKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBjYWxsYWJsZSBvYmplY3QgdGhhdCBjYWxscyB0aGUgZ2l2ZW4gbWV0aG9kIG9uIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBtZXRob2RjYWxsZXIoJ25hbWUnKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHIubmFtZSgpLgorICAgIEFmdGVyIGcgPSBtZXRob2RjYWxsZXIoJ25hbWUnLCAnZGF0ZScsIGZvbz0xKSwgdGhlIGNhbGwgZyhyKSByZXR1cm5zCisgICAgci5uYW1lKCdkYXRlJywgZm9vPTEpLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgICAgICBtc2cgPSAibWV0aG9kY2FsbGVyIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgdGhlIG1ldGhvZCBuYW1lIgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICAgICAgc2VsZiA9IGFyZ3NbMF0KKyAgICAgICAgc2VsZi5fbmFtZSA9IGFyZ3NbMV0KKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3NbMjpdCisgICAgICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG9iaik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKG9iaiwgc2VsZi5fbmFtZSkoKnNlbGYuX2FyZ3MsICoqc2VsZi5fa3dhcmdzKQorCisjIEluLXBsYWNlIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgaWFkZChhLCBiKToKKyAgICAiU2FtZSBhcyBhICs9IGIuIgorICAgIGEgKz0gYgorICAgIHJldHVybiBhCisKK2RlZiBpYW5kKGEsIGIpOgorICAgICJTYW1lIGFzIGEgJj0gYi4iCisgICAgYSAmPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGljb25jYXQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArPSBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIgorICAgIGlmIG5vdCBoYXNhdHRyKGEsICdfX2dldGl0ZW1fXycpOgorICAgICAgICBtc2cgPSAiJyVzJyBvYmplY3QgY2FuJ3QgYmUgY29uY2F0ZW5hdGVkIiAlIHR5cGUoYSkuX19uYW1lX18KKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBhICs9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWZsb29yZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLy89IGIuIgorICAgIGEgLy89IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWxzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhIDw8PSBiLiIKKyAgICBhIDw8PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGltb2QoYSwgYik6CisgICAgIlNhbWUgYXMgYSAlPSBiLiIKKyAgICBhICU9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaW11bChhLCBiKToKKyAgICAiU2FtZSBhcyBhICo9IGIuIgorICAgIGEgKj0gYgorICAgIHJldHVybiBhCisKK2RlZiBpb3IoYSwgYik6CisgICAgIlNhbWUgYXMgYSB8PSBiLiIKKyAgICBhIHw9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXBvdyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICoqPSBiLiIKKyAgICBhICoqPWIKKyAgICByZXR1cm4gYQorCitkZWYgaXJzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4+PSBiLiIKKyAgICBhID4+PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlzdWIoYSwgYik6CisgICAgIlNhbWUgYXMgYSAtPSBiLiIKKyAgICBhIC09IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXRydWVkaXYoYSwgYik6CisgICAgIlNhbWUgYXMgYSAvPSBiLiIKKyAgICBhIC89IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXhvcihhLCBiKToKKyAgICAiU2FtZSBhcyBhIF49IGIuIgorICAgIGEgXj0gYgorICAgIHJldHVybiBhCisKKwordHJ5OgorICAgIGZyb20gX29wZXJhdG9yIGltcG9ydCAqCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBmcm9tIF9vcGVyYXRvciBpbXBvcnQgX19kb2NfXworCisjIEFsbCBvZiB0aGVzZSAiX19mdW5jX18gPSBmdW5jIiBhc3NpZ25tZW50cyBoYXZlIHRvIGhhcHBlbiBhZnRlciBpbXBvcnRpbmcKKyMgZnJvbSBfb3BlcmF0b3IgdG8gbWFrZSBzdXJlIHRoZXkncmUgc2V0IHRvIHRoZSByaWdodCBmdW5jdGlvbgorX19sdF9fID0gbHQKK19fbGVfXyA9IGxlCitfX2VxX18gPSBlcQorX19uZV9fID0gbmUKK19fZ2VfXyA9IGdlCitfX2d0X18gPSBndAorX19ub3RfXyA9IG5vdF8KK19fYWJzX18gPSBhYnMKK19fYWRkX18gPSBhZGQKK19fYW5kX18gPSBhbmRfCitfX2Zsb29yZGl2X18gPSBmbG9vcmRpdgorX19pbmRleF9fID0gaW5kZXgKK19faW52X18gPSBpbnYKK19faW52ZXJ0X18gPSBpbnZlcnQKK19fbHNoaWZ0X18gPSBsc2hpZnQKK19fbW9kX18gPSBtb2QKK19fbXVsX18gPSBtdWwKK19fbmVnX18gPSBuZWcKK19fb3JfXyA9IG9yXworX19wb3NfXyA9IHBvcworX19wb3dfXyA9IHBvdworX19yc2hpZnRfXyA9IHJzaGlmdAorX19zdWJfXyA9IHN1YgorX190cnVlZGl2X18gPSB0cnVlZGl2CitfX3hvcl9fID0geG9yCitfX2NvbmNhdF9fID0gY29uY2F0CitfX2NvbnRhaW5zX18gPSBjb250YWlucworX19kZWxpdGVtX18gPSBkZWxpdGVtCitfX2dldGl0ZW1fXyA9IGdldGl0ZW0KK19fc2V0aXRlbV9fID0gc2V0aXRlbQorX19pYWRkX18gPSBpYWRkCitfX2lhbmRfXyA9IGlhbmQKK19faWNvbmNhdF9fID0gaWNvbmNhdAorX19pZmxvb3JkaXZfXyA9IGlmbG9vcmRpdgorX19pbHNoaWZ0X18gPSBpbHNoaWZ0CitfX2ltb2RfXyA9IGltb2QKK19faW11bF9fID0gaW11bAorX19pb3JfXyA9IGlvcgorX19pcG93X18gPSBpcG93CitfX2lyc2hpZnRfXyA9IGlyc2hpZnQKK19faXN1Yl9fID0gaXN1YgorX19pdHJ1ZWRpdl9fID0gaXRydWVkaXYKK19faXhvcl9fID0gaXhvcgpkaWZmIC0tZ2l0IGEvTGliL29zLnB5IGIvTGliL29zLnB5CmluZGV4IDg3Njg5Y2MuLmU5ODgwYTEgMTAwNjQ0Ci0tLSBhL0xpYi9vcy5weQorKysgYi9MaWIvb3MucHkKQEAgLTEsOSArMSw5IEBACiByIiIiT1Mgcm91dGluZXMgZm9yIE1hYywgTlQsIG9yIFBvc2l4IGRlcGVuZGluZyBvbiB3aGF0IHN5c3RlbSB3ZSdyZSBvbi4KIAogVGhpcyBleHBvcnRzOgotICAtIGFsbCBmdW5jdGlvbnMgZnJvbSBwb3NpeCwgbnQsIG9zMiwgb3IgY2UsIGUuZy4gdW5saW5rLCBzdGF0LCBldGMuCisgIC0gYWxsIGZ1bmN0aW9ucyBmcm9tIHBvc2l4LCBudCBvciBjZSwgZS5nLiB1bmxpbmssIHN0YXQsIGV0Yy4KICAgLSBvcy5wYXRoIGlzIGVpdGhlciBwb3NpeHBhdGggb3IgbnRwYXRoCi0gIC0gb3MubmFtZSBpcyBlaXRoZXIgJ3Bvc2l4JywgJ250JywgJ29zMicgb3IgJ2NlJy4KKyAgLSBvcy5uYW1lIGlzIGVpdGhlciAncG9zaXgnLCAnbnQnIG9yICdjZScuCiAgIC0gb3MuY3VyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKCcuJyBvciAnOicpCiAgIC0gb3MucGFyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGFyZW50IGRpcmVjdG9yeSAoJy4uJyBvciAnOjonKQogICAtIG9zLnNlcCBpcyB0aGUgKG9yIGEgbW9zdCBjb21tb24pIHBhdGhuYW1lIHNlcGFyYXRvciAoJy8nIG9yICc6JyBvciAnXFwnKQpAQCAtODEsMzAgKzgxLDYgQEAKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgIHBhc3MKIAotZWxpZiAnb3MyJyBpbiBfbmFtZXM6Ci0gICAgbmFtZSA9ICdvczInCi0gICAgbGluZXNlcCA9ICdcclxuJwotICAgIGZyb20gb3MyIGltcG9ydCAqCi0gICAgdHJ5OgotICAgICAgICBmcm9tIG9zMiBpbXBvcnQgX2V4aXQKLSAgICAgICAgX19hbGxfXy5hcHBlbmQoJ19leGl0JykKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBpZiBzeXMudmVyc2lvbi5maW5kKCdFTVggR0NDJykgPT0gLTE6Ci0gICAgICAgIGltcG9ydCBudHBhdGggYXMgcGF0aAotICAgIGVsc2U6Ci0gICAgICAgIGltcG9ydCBvczJlbXhwYXRoIGFzIHBhdGgKLSAgICAgICAgZnJvbSBfZW14X2xpbmsgaW1wb3J0IGxpbmsKLQotICAgIGltcG9ydCBvczIKLSAgICBfX2FsbF9fLmV4dGVuZChfZ2V0X2V4cG9ydHNfbGlzdChvczIpKQotICAgIGRlbCBvczIKLQotICAgIHRyeToKLSAgICAgICAgZnJvbSBvczIgaW1wb3J0IF9oYXZlX2Z1bmN0aW9ucwotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotCiBlbGlmICdjZScgaW4gX25hbWVzOgogICAgIG5hbWUgPSAnY2UnCiAgICAgbGluZXNlcCA9ICdcclxuJwpAQCAtMjU2LDEwICsyMzIsOSBAQAogICAgIGlmIGhlYWQgYW5kIHRhaWwgYW5kIG5vdCBwYXRoLmV4aXN0cyhoZWFkKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbWFrZWRpcnMoaGVhZCwgbW9kZSwgZXhpc3Rfb2spCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CiAgICAgICAgICAgICAjIGJlIGhhcHB5IGlmIHNvbWVvbmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBwYXRoCi0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcGFzcwogICAgICAgICBjZGlyID0gY3VyZGlyCiAgICAgICAgIGlmIGlzaW5zdGFuY2UodGFpbCwgYnl0ZXMpOgogICAgICAgICAgICAgY2RpciA9IGJ5dGVzKGN1cmRpciwgJ0FTQ0lJJykKQEAgLTMwMiw3ICsyNzcsNyBAQAogICAgIHdoaWxlIGhlYWQgYW5kIHRhaWw6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJtZGlyKGhlYWQpCi0gICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBicmVhawogICAgICAgICBoZWFkLCB0YWlsID0gcGF0aC5zcGxpdChoZWFkKQogCkBAIC0zMjksNyArMzA0LDcgQEAKICAgICBpZiBoZWFkIGFuZCB0YWlsOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZW1vdmVkaXJzKGhlYWQpCi0gICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKIF9fYWxsX18uZXh0ZW5kKFsibWFrZWRpcnMiLCAicmVtb3ZlZGlycyIsICJyZW5hbWVzIl0pCkBAIC0zNjUsNyArMzQwLDcgQEAKIAogICAgIEJ5IGRlZmF1bHQgZXJyb3JzIGZyb20gdGhlIG9zLmxpc3RkaXIoKSBjYWxsIGFyZSBpZ25vcmVkLiAgSWYKICAgICBvcHRpb25hbCBhcmcgJ29uZXJyb3InIGlzIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgZnVuY3Rpb247IGl0Ci0gICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIG9zLmVycm9yIGluc3RhbmNlLiAgSXQgY2FuCisgICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIE9TRXJyb3IgaW5zdGFuY2UuICBJdCBjYW4KICAgICByZXBvcnQgdGhlIGVycm9yIHRvIGNvbnRpbnVlIHdpdGggdGhlIHdhbGssIG9yIHJhaXNlIHRoZSBleGNlcHRpb24KICAgICB0byBhYm9ydCB0aGUgd2Fsay4gIE5vdGUgdGhhdCB0aGUgZmlsZW5hbWUgaXMgYXZhaWxhYmxlIGFzIHRoZQogICAgIGZpbGVuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdC4KQEAgLTM5OSwxMCArMzc0LDEwIEBACiAgICAgIyBtaW5vciByZWFzb24gd2hlbiAoc2F5KSBhIHRob3VzYW5kIHJlYWRhYmxlIGRpcmVjdG9yaWVzIGFyZSBzdGlsbAogICAgICMgbGVmdCB0byB2aXNpdC4gIFRoYXQgbG9naWMgaXMgY29waWVkIGhlcmUuCiAgICAgdHJ5OgotICAgICAgICAjIE5vdGUgdGhhdCBsaXN0ZGlyIGFuZCBlcnJvciBhcmUgZ2xvYmFscyBpbiB0aGlzIG1vZHVsZSBkdWUKKyAgICAgICAgIyBOb3RlIHRoYXQgbGlzdGRpciBpcyBnbG9iYWwgaW4gdGhpcyBtb2R1bGUgZHVlCiAgICAgICAgICMgdG8gZWFybGllciBpbXBvcnQtKi4KICAgICAgICAgbmFtZXMgPSBsaXN0ZGlyKHRvcCkKLSAgICBleGNlcHQgZXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgaWYgb25lcnJvciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIG9uZXJyb3IoZXJyKQogICAgICAgICByZXR1cm4KQEAgLTUwNCw3ICs0NzksNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9yaWdfc3QgPSBzdGF0KG5hbWUsIGRpcl9mZD10b3BmZCwgZm9sbG93X3N5bWxpbmtzPWZvbGxvd19zeW1saW5rcykKICAgICAgICAgICAgICAgICBkaXJmZCA9IG9wZW4obmFtZSwgT19SRE9OTFksIGRpcl9mZD10b3BmZCkKLSAgICAgICAgICAgIGV4Y2VwdCBlcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgaWYgb25lcnJvciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpCiAgICAgICAgICAgICAgICAgcmV0dXJuCkBAIC01OTksNyArNTc0LDcgQEAKICAgICAgICAgZnVsbG5hbWUgPSBwYXRoLmpvaW4oZGlyLCBmaWxlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBleGVjX2Z1bmMoZnVsbG5hbWUsICphcmdyZXN0KQotICAgICAgICBleGNlcHQgZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGxhc3RfZXhjID0gZQogICAgICAgICAgICAgdGIgPSBzeXMuZXhjX2luZm8oKVsyXQogICAgICAgICAgICAgaWYgKGUuZXJybm8gIT0gZXJybm8uRU5PRU5UIGFuZCBlLmVycm5vICE9IGVycm5vLkVOT1RESVIKQEAgLTY1Niw3ICs2MzEsNyBAQAogCiAKICMgQ2hhbmdlIGVudmlyb24gdG8gYXV0b21hdGljYWxseSBjYWxsIHB1dGVudigpLCB1bnNldGVudiBpZiB0aGV5IGV4aXN0LgotZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0IE11dGFibGVNYXBwaW5nCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IE11dGFibGVNYXBwaW5nCiAKIGNsYXNzIF9FbnZpcm9uKE11dGFibGVNYXBwaW5nKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgZW5jb2Rla2V5LCBkZWNvZGVrZXksIGVuY29kZXZhbHVlLCBkZWNvZGV2YWx1ZSwgcHV0ZW52LCB1bnNldGVudik6CkBAIC03MTYsMTcgKzY5MSwxOSBAQAogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBfcHV0ZW52ID0gbGFtYmRhIGtleSwgdmFsdWU6IE5vbmUKIGVsc2U6Ci0gICAgX19hbGxfXy5hcHBlbmQoInB1dGVudiIpCisgICAgaWYgInB1dGVudiIgbm90IGluIF9fYWxsX186CisgICAgICAgIF9fYWxsX18uYXBwZW5kKCJwdXRlbnYiKQogCiB0cnk6CiAgICAgX3Vuc2V0ZW52ID0gdW5zZXRlbnYKIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgX3Vuc2V0ZW52ID0gbGFtYmRhIGtleTogX3B1dGVudihrZXksICIiKQogZWxzZToKLSAgICBfX2FsbF9fLmFwcGVuZCgidW5zZXRlbnYiKQorICAgIGlmICJ1bnNldGVudiIgbm90IGluIF9fYWxsX186CisgICAgICAgIF9fYWxsX18uYXBwZW5kKCJ1bnNldGVudiIpCiAKIGRlZiBfY3JlYXRlZW52aXJvbigpOgotICAgIGlmIG5hbWUgaW4gKCdvczInLCAnbnQnKToKKyAgICBpZiBuYW1lID09ICdudCc6CiAgICAgICAgICMgV2hlcmUgRW52IFZhciBOYW1lcyBNdXN0IEJlIFVQUEVSQ0FTRQogICAgICAgICBkZWYgY2hlY2tfc3RyKHZhbHVlKToKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgpAQCAtNzY2LDcgKzc0Myw3IEBACiAgICAga2V5LCBkZWZhdWx0IGFuZCB0aGUgcmVzdWx0IGFyZSBzdHIuIiIiCiAgICAgcmV0dXJuIGVudmlyb24uZ2V0KGtleSwgZGVmYXVsdCkKIAotc3VwcG9ydHNfYnl0ZXNfZW52aXJvbiA9IG5hbWUgbm90IGluICgnb3MyJywgJ250JykKK3N1cHBvcnRzX2J5dGVzX2Vudmlyb24gPSAobmFtZSAhPSAnbnQnKQogX19hbGxfXy5leHRlbmQoKCJnZXRlbnYiLCAic3VwcG9ydHNfYnl0ZXNfZW52aXJvbiIpKQogCiBpZiBzdXBwb3J0c19ieXRlc19lbnZpcm9uOgpAQCAtODY1LDcgKzg0Miw3IEBACiAgICAgICAgICAgICAgICAgZWxpZiBXSUZFWElURUQoc3RzKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdFWElUU1RBVFVTKHN0cykKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiTm90IHN0b3BwZWQsIHNpZ25hbGVkIG9yIGV4aXRlZD8/PyIpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIk5vdCBzdG9wcGVkLCBzaWduYWxlZCBvciBleGl0ZWQ/Pz8iKQogCiAgICAgZGVmIHNwYXdudihtb2RlLCBmaWxlLCBhcmdzKToKICAgICAgICAgIiIic3Bhd252KG1vZGUsIGZpbGUsIGFyZ3MpIC0+IGludGVnZXIKQEAgLTkwOCw2ICs4ODUsMTAgQEAKIG90aGVyd2lzZSByZXR1cm4gLVNJRywgd2hlcmUgU0lHIGlzIHRoZSBzaWduYWwgdGhhdCBraWxsZWQgaXQuICIiIgogICAgICAgICByZXR1cm4gX3NwYXdudmVmKG1vZGUsIGZpbGUsIGFyZ3MsIGVudiwgZXhlY3ZwZSkKIAorCisgICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bnYiLCAic3Bhd252ZSIsICJzcGF3bnZwIiwgInNwYXdudnBlIl0pCisKKwogaWYgX2V4aXN0cygic3Bhd252Iik6CiAgICAgIyBUaGVzZSBhcmVuJ3Qgc3VwcGxpZWQgYnkgdGhlIGJhc2ljIFdpbmRvd3MgY29kZQogICAgICMgYnV0IGNhbiBiZSBlYXNpbHkgaW1wbGVtZW50ZWQgaW4gUHl0aG9uCkBAIC05MzMsNyArOTE0LDcgQEAKICAgICAgICAgcmV0dXJuIHNwYXdudmUobW9kZSwgZmlsZSwgYXJnc1s6LTFdLCBlbnYpCiAKIAotICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd252IiwgInNwYXdudmUiLCAic3Bhd25sIiwgInNwYXdubGUiLF0pCisgICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bmwiLCAic3Bhd25sZSJdKQogCiAKIGlmIF9leGlzdHMoInNwYXdudnAiKToKQEAgLTk2MSwzNCArOTQyLDggQEAKICAgICAgICAgcmV0dXJuIHNwYXdudnBlKG1vZGUsIGZpbGUsIGFyZ3NbOi0xXSwgZW52KQogCiAKLSAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdudnAiLCAic3Bhd252cGUiLCAic3Bhd25scCIsICJzcGF3bmxwZSIsXSkKKyAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdubHAiLCAic3Bhd25scGUiXSkKIAotaW1wb3J0IGNvcHlyZWcgYXMgX2NvcHlyZWcKLQotZGVmIF9tYWtlX3N0YXRfcmVzdWx0KHR1cCwgZGljdCk6Ci0gICAgcmV0dXJuIHN0YXRfcmVzdWx0KHR1cCwgZGljdCkKLQotZGVmIF9waWNrbGVfc3RhdF9yZXN1bHQoc3IpOgotICAgICh0eXBlLCBhcmdzKSA9IHNyLl9fcmVkdWNlX18oKQotICAgIHJldHVybiAoX21ha2Vfc3RhdF9yZXN1bHQsIGFyZ3MpCi0KLXRyeToKLSAgICBfY29weXJlZy5waWNrbGUoc3RhdF9yZXN1bHQsIF9waWNrbGVfc3RhdF9yZXN1bHQsIF9tYWtlX3N0YXRfcmVzdWx0KQotZXhjZXB0IE5hbWVFcnJvcjogIyBzdGF0X3Jlc3VsdCBtYXkgbm90IGV4aXN0Ci0gICAgcGFzcwotCi1kZWYgX21ha2Vfc3RhdHZmc19yZXN1bHQodHVwLCBkaWN0KToKLSAgICByZXR1cm4gc3RhdHZmc19yZXN1bHQodHVwLCBkaWN0KQotCi1kZWYgX3BpY2tsZV9zdGF0dmZzX3Jlc3VsdChzcik6Ci0gICAgKHR5cGUsIGFyZ3MpID0gc3IuX19yZWR1Y2VfXygpCi0gICAgcmV0dXJuIChfbWFrZV9zdGF0dmZzX3Jlc3VsdCwgYXJncykKLQotdHJ5OgotICAgIF9jb3B5cmVnLnBpY2tsZShzdGF0dmZzX3Jlc3VsdCwgX3BpY2tsZV9zdGF0dmZzX3Jlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgIF9tYWtlX3N0YXR2ZnNfcmVzdWx0KQotZXhjZXB0IE5hbWVFcnJvcjogIyBzdGF0dmZzX3Jlc3VsdCBtYXkgbm90IGV4aXN0Ci0gICAgcGFzcwogCiAjIFN1cHBseSBvcy5wb3BlbigpCiBkZWYgcG9wZW4oY21kLCBtb2RlPSJyIiwgYnVmZmVyaW5nPS0xKToKZGlmZiAtLWdpdCBhL0xpYi9vczJlbXhwYXRoLnB5IGIvTGliL29zMmVteHBhdGgucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjY2JmOGEuLjAwMDAwMDAKLS0tIGEvTGliL29zMmVteHBhdGgucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotIyBNb2R1bGUgJ29zMmVteHBhdGgnIC0tIGNvbW1vbiBvcGVyYXRpb25zIG9uIE9TLzIgcGF0aG5hbWVzCi0iIiJDb21tb24gcGF0aG5hbWUgbWFuaXB1bGF0aW9ucywgT1MvMiBFTVggdmVyc2lvbi4KLQotSW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUgZGlyZWN0bHksIGltcG9ydCBvcyBhbmQgcmVmZXIgdG8gdGhpcwotbW9kdWxlIGFzIG9zLnBhdGguCi0iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3RhdAotZnJvbSBnZW5lcmljcGF0aCBpbXBvcnQgKgotZnJvbSBudHBhdGggaW1wb3J0IChleHBhbmR1c2VyLCBleHBhbmR2YXJzLCBpc2FicywgaXNsaW5rLCBzcGxpdGRyaXZlLAotICAgICAgICAgICAgICAgICAgICBzcGxpdGV4dCwgc3BsaXQpCi0KLV9fYWxsX18gPSBbIm5vcm1jYXNlIiwiaXNhYnMiLCJqb2luIiwic3BsaXRkcml2ZSIsInNwbGl0Iiwic3BsaXRleHQiLAotICAgICAgICAgICAiYmFzZW5hbWUiLCJkaXJuYW1lIiwiY29tbW9ucHJlZml4IiwiZ2V0c2l6ZSIsImdldG10aW1lIiwKLSAgICAgICAgICAgImdldGF0aW1lIiwiZ2V0Y3RpbWUiLCAiaXNsaW5rIiwiZXhpc3RzIiwibGV4aXN0cyIsImlzZGlyIiwiaXNmaWxlIiwKLSAgICAgICAgICAgImlzbW91bnQiLCJleHBhbmR1c2VyIiwiZXhwYW5kdmFycyIsIm5vcm1wYXRoIiwiYWJzcGF0aCIsCi0gICAgICAgICAgICJzcGxpdHVuYyIsImN1cmRpciIsInBhcmRpciIsInNlcCIsInBhdGhzZXAiLCJkZWZwYXRoIiwiYWx0c2VwIiwKLSAgICAgICAgICAgImV4dHNlcCIsImRldm51bGwiLCJyZWFscGF0aCIsInN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzIl0KLQotIyBzdHJpbmdzIHJlcHJlc2VudGluZyB2YXJpb3VzIHBhdGgtcmVsYXRlZCBiaXRzIGFuZCBwaWVjZXMKLWN1cmRpciA9ICcuJwotcGFyZGlyID0gJy4uJwotZXh0c2VwID0gJy4nCi1zZXAgPSAnLycKLWFsdHNlcCA9ICdcXCcKLXBhdGhzZXAgPSAnOycKLWRlZnBhdGggPSAnLjtDOlxcYmluJwotZGV2bnVsbCA9ICdudWwnCi0KLSMgTm9ybWFsaXplIHRoZSBjYXNlIG9mIGEgcGF0aG5hbWUgYW5kIG1hcCBzbGFzaGVzIHRvIGJhY2tzbGFzaGVzLgotIyBPdGhlciBub3JtYWxpemF0aW9ucyAoc3VjaCBhcyBvcHRpbWl6aW5nICcuLi8nIGF3YXkpIGFyZSBub3QgZG9uZQotIyAodGhpcyBpcyBkb25lIGJ5IG5vcm1wYXRoKS4KLQotZGVmIG5vcm1jYXNlKHMpOgotICAgICIiIk5vcm1hbGl6ZSBjYXNlIG9mIHBhdGhuYW1lLgotCi0gICAgTWFrZXMgYWxsIGNoYXJhY3RlcnMgbG93ZXJjYXNlIGFuZCBhbGwgYWx0c2VwcyBpbnRvIHNlcHMuIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgKGJ5dGVzLCBzdHIpKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJub3JtY2FzZSgpIGFyZ3VtZW50IG11c3QgYmUgc3RyIG9yIGJ5dGVzLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAibm90ICd7fSciLmZvcm1hdChzLl9fY2xhc3NfXy5fX25hbWVfXykpCi0gICAgcmV0dXJuIHMucmVwbGFjZSgnXFwnLCAnLycpLmxvd2VyKCkKLQotCi0jIEpvaW4gdHdvIChvciBtb3JlKSBwYXRocy4KLQotZGVmIGpvaW4oYSwgKnApOgotICAgICIiIkpvaW4gdHdvIG9yIG1vcmUgcGF0aG5hbWUgY29tcG9uZW50cywgaW5zZXJ0aW5nIHNlcCBhcyBuZWVkZWQiIiIKLSAgICBwYXRoID0gYQotICAgIGZvciBiIGluIHA6Ci0gICAgICAgIGlmIGlzYWJzKGIpOgotICAgICAgICAgICAgcGF0aCA9IGIKLSAgICAgICAgZWxpZiBwYXRoID09ICcnIG9yIHBhdGhbLTE6XSBpbiAnL1xcOic6Ci0gICAgICAgICAgICBwYXRoID0gcGF0aCArIGIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhdGggPSBwYXRoICsgJy8nICsgYgotICAgIHJldHVybiBwYXRoCi0KLQotIyBQYXJzZSBVTkMgcGF0aHMKLWRlZiBzcGxpdHVuYyhwKToKLSAgICAiIiJTcGxpdCBhIHBhdGhuYW1lIGludG8gVU5DIG1vdW50IHBvaW50IGFuZCByZWxhdGl2ZSBwYXRoIHNwZWNpZmllcnMuCi0KLSAgICBSZXR1cm4gYSAyLXR1cGxlICh1bmMsIHJlc3QpOyBlaXRoZXIgcGFydCBtYXkgYmUgZW1wdHkuCi0gICAgSWYgdW5jIGlzIG5vdCBlbXB0eSwgaXQgaGFzIHRoZSBmb3JtICcvL2hvc3QvbW91bnQnIChvciBzaW1pbGFyCi0gICAgdXNpbmcgYmFja3NsYXNoZXMpLiAgdW5jK3Jlc3QgaXMgYWx3YXlzIHRoZSBpbnB1dCBwYXRoLgotICAgIFBhdGhzIGNvbnRhaW5pbmcgZHJpdmUgbGV0dGVycyBuZXZlciBoYXZlIGFuIFVOQyBwYXJ0LgotICAgICIiIgotICAgIGlmIHBbMToyXSA9PSAnOic6Ci0gICAgICAgIHJldHVybiAnJywgcCAjIERyaXZlIGxldHRlciBwcmVzZW50Ci0gICAgZmlyc3RUd28gPSBwWzA6Ml0KLSAgICBpZiBmaXJzdFR3byA9PSAnLycgKiAyIG9yIGZpcnN0VHdvID09ICdcXCcgKiAyOgotICAgICAgICAjIGlzIGEgVU5DIHBhdGg6Ci0gICAgICAgICMgdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYgZXF1aXZhbGVudCB0byBkcml2ZSBsZXR0ZXIKLSAgICAgICAgIyBcXG1hY2hpbmVcbW91bnRwb2ludFxkaXJlY3Rvcmllcy4uLgotICAgICAgICAjICAgICAgICAgICBkaXJlY3RvcnkgXl5eXl5eXl5eXl5eXl5eCi0gICAgICAgIG5vcm1wID0gbm9ybWNhc2UocCkKLSAgICAgICAgaW5kZXggPSBub3JtcC5maW5kKCcvJywgMikKLSAgICAgICAgaWYgaW5kZXggPT0gLTE6Ci0gICAgICAgICAgICAjI3JhaXNlIFJ1bnRpbWVFcnJvciwgJ2lsbGVnYWwgVU5DIHBhdGg6ICInICsgcCArICciJwotICAgICAgICAgICAgcmV0dXJuICgiIiwgcCkKLSAgICAgICAgaW5kZXggPSBub3JtcC5maW5kKCcvJywgaW5kZXggKyAxKQotICAgICAgICBpZiBpbmRleCA9PSAtMToKLSAgICAgICAgICAgIGluZGV4ID0gbGVuKHApCi0gICAgICAgIHJldHVybiBwWzppbmRleF0sIHBbaW5kZXg6XQotICAgIHJldHVybiAnJywgcAotCi0KLSMgUmV0dXJuIHRoZSB0YWlsIChiYXNlbmFtZSkgcGFydCBvZiBhIHBhdGguCi0KLWRlZiBiYXNlbmFtZShwKToKLSAgICAiIiJSZXR1cm5zIHRoZSBmaW5hbCBjb21wb25lbnQgb2YgYSBwYXRobmFtZSIiIgotICAgIHJldHVybiBzcGxpdChwKVsxXQotCi0KLSMgUmV0dXJuIHRoZSBoZWFkIChkaXJuYW1lKSBwYXJ0IG9mIGEgcGF0aC4KLQotZGVmIGRpcm5hbWUocCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBvZiBhIHBhdGhuYW1lIiIiCi0gICAgcmV0dXJuIHNwbGl0KHApWzBdCi0KLQotIyBhbGlhcyBleGlzdHMgdG8gbGV4aXN0cwotbGV4aXN0cyA9IGV4aXN0cwotCi0KLSMgSXMgYSBwYXRoIGEgZGlyZWN0b3J5PwotCi0jIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PyAgRWl0aGVyIGEgcm9vdCAod2l0aCBvciB3aXRob3V0IGRyaXZlIGxldHRlcikKLSMgb3IgYW4gVU5DIHBhdGggd2l0aCBhdCBtb3N0IGEgLyBvciBcIGFmdGVyIHRoZSBtb3VudCBwb2ludC4KLQotZGVmIGlzbW91bnQocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChkZWZpbmVkIGFzIHJvb3Qgb2YgZHJpdmUpIiIiCi0gICAgdW5jLCByZXN0ID0gc3BsaXR1bmMocGF0aCkKLSAgICBpZiB1bmM6Ci0gICAgICAgIHJldHVybiByZXN0IGluICgiIiwgIi8iLCAiXFwiKQotICAgIHAgPSBzcGxpdGRyaXZlKHBhdGgpWzFdCi0gICAgcmV0dXJuIGxlbihwKSA9PSAxIGFuZCBwWzBdIGluICcvXFwnCi0KLQotIyBOb3JtYWxpemUgYSBwYXRoLCBlLmcuIEEvL0IsIEEvLi9CIGFuZCBBL2Zvby8uLi9CIGFsbCBiZWNvbWUgQS9CLgotCi1kZWYgbm9ybXBhdGgocGF0aCk6Ci0gICAgIiIiTm9ybWFsaXplIHBhdGgsIGVsaW1pbmF0aW5nIGRvdWJsZSBzbGFzaGVzLCBldGMuIiIiCi0gICAgcGF0aCA9IHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCi0gICAgcHJlZml4LCBwYXRoID0gc3BsaXRkcml2ZShwYXRoKQotICAgIHdoaWxlIHBhdGhbOjFdID09ICcvJzoKLSAgICAgICAgcHJlZml4ID0gcHJlZml4ICsgJy8nCi0gICAgICAgIHBhdGggPSBwYXRoWzE6XQotICAgIGNvbXBzID0gcGF0aC5zcGxpdCgnLycpCi0gICAgaSA9IDAKLSAgICB3aGlsZSBpIDwgbGVuKGNvbXBzKToKLSAgICAgICAgaWYgY29tcHNbaV0gPT0gJy4nOgotICAgICAgICAgICAgZGVsIGNvbXBzW2ldCi0gICAgICAgIGVsaWYgY29tcHNbaV0gPT0gJy4uJyBhbmQgaSA+IDAgYW5kIGNvbXBzW2ktMV0gbm90IGluICgnJywgJy4uJyk6Ci0gICAgICAgICAgICBkZWwgY29tcHNbaS0xOmkrMV0KLSAgICAgICAgICAgIGkgPSBpIC0gMQotICAgICAgICBlbGlmIGNvbXBzW2ldID09ICcnIGFuZCBpID4gMCBhbmQgY29tcHNbaS0xXSAhPSAnJzoKLSAgICAgICAgICAgIGRlbCBjb21wc1tpXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaSA9IGkgKyAxCi0gICAgIyBJZiB0aGUgcGF0aCBpcyBub3cgZW1wdHksIHN1YnN0aXR1dGUgJy4nCi0gICAgaWYgbm90IHByZWZpeCBhbmQgbm90IGNvbXBzOgotICAgICAgICBjb21wcy5hcHBlbmQoJy4nKQotICAgIHJldHVybiBwcmVmaXggKyAnLycuam9pbihjb21wcykKLQotCi0jIFJldHVybiBhbiBhYnNvbHV0ZSBwYXRoLgotZGVmIGFic3BhdGgocGF0aCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSB2ZXJzaW9uIG9mIGEgcGF0aCIiIgotICAgIGlmIG5vdCBpc2FicyhwYXRoKToKLSAgICAgICAgcGF0aCA9IGpvaW4ob3MuZ2V0Y3dkKCksIHBhdGgpCi0gICAgcmV0dXJuIG5vcm1wYXRoKHBhdGgpCi0KLSMgcmVhbHBhdGggaXMgYSBuby1vcCBvbiBzeXN0ZW1zIHdpdGhvdXQgaXNsaW5rIHN1cHBvcnQKLXJlYWxwYXRoID0gYWJzcGF0aAotCi1zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyA9IEZhbHNlCmRpZmYgLS1naXQgYS9MaWIvcGF0aGxpYi5weSBiL0xpYi9wYXRobGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMDhlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvcGF0aGxpYi5weQpAQCAtMCwwICsxLDEyODggQEAKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW8KK2ltcG9ydCBudHBhdGgKK2ltcG9ydCBvcworaW1wb3J0IHBvc2l4cGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBTZXF1ZW5jZQorZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgorZnJvbSBlcnJubyBpbXBvcnQgRUlOVkFMLCBFTk9FTlQKK2Zyb20gb3BlcmF0b3IgaW1wb3J0IGF0dHJnZXR0ZXIKK2Zyb20gc3RhdCBpbXBvcnQgU19JU0RJUiwgU19JU0xOSywgU19JU1JFRywgU19JU1NPQ0ssIFNfSVNCTEssIFNfSVNDSFIsIFNfSVNGSUZPCitmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgcXVvdGVfZnJvbV9ieXRlcyBhcyB1cmxxdW90ZV9mcm9tX2J5dGVzCisKKworc3VwcG9ydHNfc3ltbGlua3MgPSBUcnVlCit0cnk6CisgICAgaW1wb3J0IG50CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgbnQgPSBOb25lCitlbHNlOgorICAgIGlmIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzoyXSA+PSAoNiwgMCk6CisgICAgICAgIGZyb20gbnQgaW1wb3J0IF9nZXRmaW5hbHBhdGhuYW1lCisgICAgZWxzZToKKyAgICAgICAgc3VwcG9ydHNfc3ltbGlua3MgPSBGYWxzZQorICAgICAgICBfZ2V0ZmluYWxwYXRobmFtZSA9IE5vbmUKKworCitfX2FsbF9fID0gWworICAgICJQdXJlUGF0aCIsICJQdXJlUG9zaXhQYXRoIiwgIlB1cmVXaW5kb3dzUGF0aCIsCisgICAgIlBhdGgiLCAiUG9zaXhQYXRoIiwgIldpbmRvd3NQYXRoIiwKKyAgICBdCisKKyMKKyMgSW50ZXJuYWxzCisjCisKK2RlZiBfaXNfd2lsZGNhcmRfcGF0dGVybihwYXQpOgorICAgICMgV2hldGhlciB0aGlzIHBhdHRlcm4gbmVlZHMgYWN0dWFsIG1hdGNoaW5nIHVzaW5nIGZubWF0Y2gsIG9yIGNhbgorICAgICMgYmUgbG9va2VkIHVwIGRpcmVjdGx5IGFzIGEgZmlsZS4KKyAgICByZXR1cm4gIioiIGluIHBhdCBvciAiPyIgaW4gcGF0IG9yICJbIiBpbiBwYXQKKworCitjbGFzcyBfRmxhdm91cihvYmplY3QpOgorICAgICIiIkEgZmxhdm91ciBpbXBsZW1lbnRzIGEgcGFydGljdWxhciAocGxhdGZvcm0tc3BlY2lmaWMpIHNldCBvZiBwYXRoCisgICAgc2VtYW50aWNzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmpvaW4gPSBzZWxmLnNlcC5qb2luCisKKyAgICBkZWYgcGFyc2VfcGFydHMoc2VsZiwgcGFydHMpOgorICAgICAgICBwYXJzZWQgPSBbXQorICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBhbHRzZXAgPSBzZWxmLmFsdHNlcAorICAgICAgICBkcnYgPSByb290ID0gJycKKyAgICAgICAgaXQgPSByZXZlcnNlZChwYXJ0cykKKyAgICAgICAgZm9yIHBhcnQgaW4gaXQ6CisgICAgICAgICAgICBpZiBub3QgcGFydDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgYWx0c2VwOgorICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnJlcGxhY2UoYWx0c2VwLCBzZXApCisgICAgICAgICAgICBkcnYsIHJvb3QsIHJlbCA9IHNlbGYuc3BsaXRyb290KHBhcnQpCisgICAgICAgICAgICBpZiBzZXAgaW4gcmVsOgorICAgICAgICAgICAgICAgIGZvciB4IGluIHJldmVyc2VkKHJlbC5zcGxpdChzZXApKToKKyAgICAgICAgICAgICAgICAgICAgaWYgeCBhbmQgeCAhPSAnLic6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQuYXBwZW5kKHN5cy5pbnRlcm4oeCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHJlbCBhbmQgcmVsICE9ICcuJzoKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkLmFwcGVuZChzeXMuaW50ZXJuKHJlbCkpCisgICAgICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgICAgICBpZiBub3QgZHJ2OgorICAgICAgICAgICAgICAgICAgICAjIElmIG5vIGRyaXZlIGlzIHByZXNlbnQsIHRyeSB0byBmaW5kIG9uZSBpbiB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgICAgICAgICAgIyBwYXJ0cy4gVGhpcyBtYWtlcyB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgZS5nLgorICAgICAgICAgICAgICAgICAgICAjICgiQzoiLCAiLyIsICJhIikgcmVhc29uYWJseSBpbnR1aXRpdmUuCisgICAgICAgICAgICAgICAgICAgIGZvciBwYXJ0IGluIGl0OgorICAgICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gc2VsZi5zcGxpdHJvb3QocGFydClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRydjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgcGFyc2VkLmFwcGVuZChkcnYgKyByb290KQorICAgICAgICBwYXJzZWQucmV2ZXJzZSgpCisgICAgICAgIHJldHVybiBkcnYsIHJvb3QsIHBhcnNlZAorCisgICAgZGVmIGpvaW5fcGFyc2VkX3BhcnRzKHNlbGYsIGRydiwgcm9vdCwgcGFydHMsIGRydjIsIHJvb3QyLCBwYXJ0czIpOgorICAgICAgICAiIiIKKyAgICAgICAgSm9pbiB0aGUgdHdvIHBhdGhzIHJlcHJlc2VudGVkIGJ5IHRoZSByZXNwZWN0aXZlCisgICAgICAgIChkcml2ZSwgcm9vdCwgcGFydHMpIHR1cGxlcy4gIFJldHVybiBhIG5ldyAoZHJpdmUsIHJvb3QsIHBhcnRzKSB0dXBsZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHJvb3QyOgorICAgICAgICAgICAgaWYgbm90IGRydjIgYW5kIGRydjoKKyAgICAgICAgICAgICAgICByZXR1cm4gZHJ2LCByb290MiwgW2RydiArIHJvb3QyXSArIHBhcnRzMlsxOl0KKyAgICAgICAgZWxpZiBkcnYyOgorICAgICAgICAgICAgaWYgZHJ2MiA9PSBkcnYgb3Igc2VsZi5jYXNlZm9sZChkcnYyKSA9PSBzZWxmLmNhc2Vmb2xkKGRydik6CisgICAgICAgICAgICAgICAgIyBTYW1lIGRyaXZlID0+IHNlY29uZCBwYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdAorICAgICAgICAgICAgICAgIHJldHVybiBkcnYsIHJvb3QsIHBhcnRzICsgcGFydHMyWzE6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBTZWNvbmQgcGF0aCBpcyBub24tYW5jaG9yZWQgKGNvbW1vbiBjYXNlKQorICAgICAgICAgICAgcmV0dXJuIGRydiwgcm9vdCwgcGFydHMgKyBwYXJ0czIKKyAgICAgICAgcmV0dXJuIGRydjIsIHJvb3QyLCBwYXJ0czIKKworCitjbGFzcyBfV2luZG93c0ZsYXZvdXIoX0ZsYXZvdXIpOgorICAgICMgUmVmZXJlbmNlIGZvciBXaW5kb3dzIHBhdGhzIGNhbiBiZSBmb3VuZCBhdAorICAgICMgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMzY1MjQ3JTI4dj12cy44NSUyOS5hc3B4CisKKyAgICBzZXAgPSAnXFwnCisgICAgYWx0c2VwID0gJy8nCisgICAgaGFzX2RydiA9IFRydWUKKyAgICBwYXRobW9kID0gbnRwYXRoCisKKyAgICBpc19zdXBwb3J0ZWQgPSAobnQgaXMgbm90IE5vbmUpCisKKyAgICBkcml2ZV9sZXR0ZXJzID0gKAorICAgICAgICBzZXQoY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnYScpLCBvcmQoJ3onKSArIDEpKSB8CisgICAgICAgIHNldChjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdBJyksIG9yZCgnWicpICsgMSkpCisgICAgKQorICAgIGV4dF9uYW1lc3BhY2VfcHJlZml4ID0gJ1xcXFw/XFwnCisKKyAgICByZXNlcnZlZF9uYW1lcyA9ICgKKyAgICAgICAgeydDT04nLCAnUFJOJywgJ0FVWCcsICdOVUwnfSB8CisgICAgICAgIHsnQ09NJWQnICUgaSBmb3IgaSBpbiByYW5nZSgxLCAxMCl9IHwKKyAgICAgICAgeydMUFQlZCcgJSBpIGZvciBpIGluIHJhbmdlKDEsIDEwKX0KKyAgICAgICAgKQorCisgICAgIyBJbnRlcmVzdGluZyBmaW5kaW5ncyBhYm91dCBleHRlbmRlZCBwYXRoczoKKyAgICAjIC0gJ1xcP1xjOlxhJywgJy8vPy9jOlxhJyBhbmQgJy8vPy9jOi9hJyBhcmUgYWxsIHN1cHBvcnRlZAorICAgICMgICBidXQgJ1xcP1xjOi9hJyBpcyBub3QKKyAgICAjIC0gZXh0ZW5kZWQgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZTsgInJlbGF0aXZlIiBleHRlbmRlZCBwYXRocyB3aWxsCisgICAgIyAgIGZhaWwuCisKKyAgICBkZWYgc3BsaXRyb290KHNlbGYsIHBhcnQsIHNlcD1zZXApOgorICAgICAgICBmaXJzdCA9IHBhcnRbMDoxXQorICAgICAgICBzZWNvbmQgPSBwYXJ0WzE6Ml0KKyAgICAgICAgaWYgKHNlY29uZCA9PSBzZXAgYW5kIGZpcnN0ID09IHNlcCk6CisgICAgICAgICAgICAjIFhYWCBleHRlbmRlZCBwYXRocyBzaG91bGQgYWxzbyBkaXNhYmxlIHRoZSBjb2xsYXBzaW5nIG9mICIuIgorICAgICAgICAgICAgIyBjb21wb25lbnRzIChhY2NvcmRpbmcgdG8gTVNETiBkb2NzKS4KKyAgICAgICAgICAgIHByZWZpeCwgcGFydCA9IHNlbGYuX3NwbGl0X2V4dGVuZGVkX3BhdGgocGFydCkKKyAgICAgICAgICAgIGZpcnN0ID0gcGFydFswOjFdCisgICAgICAgICAgICBzZWNvbmQgPSBwYXJ0WzE6Ml0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgIHRoaXJkID0gcGFydFsyOjNdCisgICAgICAgIGlmIChzZWNvbmQgPT0gc2VwIGFuZCBmaXJzdCA9PSBzZXAgYW5kIHRoaXJkICE9IHNlcCk6CisgICAgICAgICAgICAjIGlzIGEgVU5DIHBhdGg6CisgICAgICAgICAgICAjIHZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2diByb290CisgICAgICAgICAgICAjIFxcbWFjaGluZVxtb3VudHBvaW50XGRpcmVjdG9yeVxldGNcLi4uCisgICAgICAgICAgICAjICAgICAgICAgICAgZGlyZWN0b3J5IF5eXl5eXl5eXl5eXl5eCisgICAgICAgICAgICBpbmRleCA9IHBhcnQuZmluZChzZXAsIDIpCisgICAgICAgICAgICBpZiBpbmRleCAhPSAtMToKKyAgICAgICAgICAgICAgICBpbmRleDIgPSBwYXJ0LmZpbmQoc2VwLCBpbmRleCArIDEpCisgICAgICAgICAgICAgICAgIyBhIFVOQyBwYXRoIGNhbid0IGhhdmUgdHdvIHNsYXNoZXMgaW4gYSByb3cKKyAgICAgICAgICAgICAgICAjIChhZnRlciB0aGUgaW5pdGlhbCB0d28pCisgICAgICAgICAgICAgICAgaWYgaW5kZXgyICE9IGluZGV4ICsgMToKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5kZXgyID09IC0xOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgyID0gbGVuKHBhcnQpCisgICAgICAgICAgICAgICAgICAgIGlmIHByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyBwYXJ0WzE6aW5kZXgyXSwgc2VwLCBwYXJ0W2luZGV4MisxOl0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0WzppbmRleDJdLCBzZXAsIHBhcnRbaW5kZXgyKzE6XQorICAgICAgICBkcnYgPSByb290ID0gJycKKyAgICAgICAgaWYgc2Vjb25kID09ICc6JyBhbmQgZmlyc3QgaW4gc2VsZi5kcml2ZV9sZXR0ZXJzOgorICAgICAgICAgICAgZHJ2ID0gcGFydFs6Ml0KKyAgICAgICAgICAgIHBhcnQgPSBwYXJ0WzI6XQorICAgICAgICAgICAgZmlyc3QgPSB0aGlyZAorICAgICAgICBpZiBmaXJzdCA9PSBzZXA6CisgICAgICAgICAgICByb290ID0gZmlyc3QKKyAgICAgICAgICAgIHBhcnQgPSBwYXJ0LmxzdHJpcChzZXApCisgICAgICAgIHJldHVybiBwcmVmaXggKyBkcnYsIHJvb3QsIHBhcnQKKworICAgIGRlZiBjYXNlZm9sZChzZWxmLCBzKToKKyAgICAgICAgcmV0dXJuIHMubG93ZXIoKQorCisgICAgZGVmIGNhc2Vmb2xkX3BhcnRzKHNlbGYsIHBhcnRzKToKKyAgICAgICAgcmV0dXJuIFtwLmxvd2VyKCkgZm9yIHAgaW4gcGFydHNdCisKKyAgICBkZWYgcmVzb2x2ZShzZWxmLCBwYXRoKToKKyAgICAgICAgcyA9IHN0cihwYXRoKQorICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHJldHVybiBvcy5nZXRjd2QoKQorICAgICAgICBpZiBfZ2V0ZmluYWxwYXRobmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9leHRfdG9fbm9ybWFsKF9nZXRmaW5hbHBhdGhuYW1lKHMpKQorICAgICAgICAjIE1lYW5zIGZhbGxiYWNrIG9uIGFic29sdXRlCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3NwbGl0X2V4dGVuZGVkX3BhdGgoc2VsZiwgcywgZXh0X3ByZWZpeD1leHRfbmFtZXNwYWNlX3ByZWZpeCk6CisgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgIGlmIHMuc3RhcnRzd2l0aChleHRfcHJlZml4KToKKyAgICAgICAgICAgIHByZWZpeCA9IHNbOjRdCisgICAgICAgICAgICBzID0gc1s0Ol0KKyAgICAgICAgICAgIGlmIHMuc3RhcnRzd2l0aCgnVU5DXFwnKToKKyAgICAgICAgICAgICAgICBwcmVmaXggKz0gc1s6M10KKyAgICAgICAgICAgICAgICBzID0gJ1xcJyArIHNbMzpdCisgICAgICAgIHJldHVybiBwcmVmaXgsIHMKKworICAgIGRlZiBfZXh0X3RvX25vcm1hbChzZWxmLCBzKToKKyAgICAgICAgIyBUdXJuIGJhY2sgYW4gZXh0ZW5kZWQgcGF0aCBpbnRvIGEgbm9ybWFsIERPUy1saWtlIHBhdGgKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwbGl0X2V4dGVuZGVkX3BhdGgocylbMV0KKworICAgIGRlZiBpc19yZXNlcnZlZChzZWxmLCBwYXJ0cyk6CisgICAgICAgICMgTk9URTogdGhlIHJ1bGVzIGZvciByZXNlcnZlZCBuYW1lcyBzZWVtIHNvbWV3aGF0IGNvbXBsaWNhdGVkCisgICAgICAgICMgKGUuZy4gciIuLlxOVUwiIGlzIHJlc2VydmVkIGJ1dCBub3QgciJmb29cTlVMIikuCisgICAgICAgICMgV2UgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24gYW5kIHJldHVybiBUcnVlIGZvciBwYXRocyB3aGljaCBhcmUKKyAgICAgICAgIyBub3QgY29uc2lkZXJlZCByZXNlcnZlZCBieSBXaW5kb3dzLgorICAgICAgICBpZiBub3QgcGFydHM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgcGFydHNbMF0uc3RhcnRzd2l0aCgnXFxcXCcpOgorICAgICAgICAgICAgIyBVTkMgcGF0aHMgYXJlIG5ldmVyIHJlc2VydmVkCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHBhcnRzWy0xXS5wYXJ0aXRpb24oJy4nKVswXS51cHBlcigpIGluIHNlbGYucmVzZXJ2ZWRfbmFtZXMKKworICAgIGRlZiBtYWtlX3VyaShzZWxmLCBwYXRoKToKKyAgICAgICAgIyBVbmRlciBXaW5kb3dzLCBmaWxlIFVSSXMgdXNlIHRoZSBVVEYtOCBlbmNvZGluZy4KKyAgICAgICAgZHJpdmUgPSBwYXRoLmRyaXZlCisgICAgICAgIGlmIGxlbihkcml2ZSkgPT0gMiBhbmQgZHJpdmVbMV0gPT0gJzonOgorICAgICAgICAgICAgIyBJdCdzIGEgcGF0aCBvbiBhIGxvY2FsIGRyaXZlID0+ICdmaWxlOi8vL2M6L2EvYicKKyAgICAgICAgICAgIHJlc3QgPSBwYXRoLmFzX3Bvc2l4KClbMjpdLmxzdHJpcCgnLycpCisgICAgICAgICAgICByZXR1cm4gJ2ZpbGU6Ly8vJXMvJXMnICUgKAorICAgICAgICAgICAgICAgIGRyaXZlLCB1cmxxdW90ZV9mcm9tX2J5dGVzKHJlc3QuZW5jb2RlKCd1dGYtOCcpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSXQncyBhIHBhdGggb24gYSBuZXR3b3JrIGRyaXZlID0+ICdmaWxlOi8vaG9zdC9zaGFyZS9hL2InCisgICAgICAgICAgICByZXR1cm4gJ2ZpbGU6JyArIHVybHF1b3RlX2Zyb21fYnl0ZXMocGF0aC5hc19wb3NpeCgpLmVuY29kZSgndXRmLTgnKSkKKworCitjbGFzcyBfUG9zaXhGbGF2b3VyKF9GbGF2b3VyKToKKyAgICBzZXAgPSAnLycKKyAgICBhbHRzZXAgPSAnJworICAgIGhhc19kcnYgPSBGYWxzZQorICAgIHBhdGhtb2QgPSBwb3NpeHBhdGgKKworICAgIGlzX3N1cHBvcnRlZCA9IChvcy5uYW1lICE9ICdudCcpCisKKyAgICBkZWYgc3BsaXRyb290KHNlbGYsIHBhcnQsIHNlcD1zZXApOgorICAgICAgICBpZiBwYXJ0IGFuZCBwYXJ0WzBdID09IHNlcDoKKyAgICAgICAgICAgIHN0cmlwcGVkX3BhcnQgPSBwYXJ0LmxzdHJpcChzZXApCisgICAgICAgICAgICAjIEFjY29yZGluZyB0byBQT1NJWCBwYXRoIHJlc29sdXRpb246CisgICAgICAgICAgICAjIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvYmFzZWRlZnMveGJkX2NoYXAwNC5odG1sI3RhZ18wNF8xMQorICAgICAgICAgICAgIyAiQSBwYXRobmFtZSB0aGF0IGJlZ2lucyB3aXRoIHR3byBzdWNjZXNzaXZlIHNsYXNoZXMgbWF5IGJlCisgICAgICAgICAgICAjIGludGVycHJldGVkIGluIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbWFubmVyLCBhbHRob3VnaCBtb3JlCisgICAgICAgICAgICAjIHRoYW4gdHdvIGxlYWRpbmcgc2xhc2hlcyBzaGFsbCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlIHNsYXNoIi4KKyAgICAgICAgICAgIGlmIGxlbihwYXJ0KSAtIGxlbihzdHJpcHBlZF9wYXJ0KSA9PSAyOgorICAgICAgICAgICAgICAgIHJldHVybiAnJywgc2VwICogMiwgc3RyaXBwZWRfcGFydAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJycsIHNlcCwgc3RyaXBwZWRfcGFydAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICcnLCAnJywgcGFydAorCisgICAgZGVmIGNhc2Vmb2xkKHNlbGYsIHMpOgorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIGNhc2Vmb2xkX3BhcnRzKHNlbGYsIHBhcnRzKToKKyAgICAgICAgcmV0dXJuIHBhcnRzCisKKyAgICBkZWYgcmVzb2x2ZShzZWxmLCBwYXRoKToKKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgYWNjZXNzb3IgPSBwYXRoLl9hY2Nlc3NvcgorICAgICAgICBzZWVuID0ge30KKyAgICAgICAgZGVmIF9yZXNvbHZlKHBhdGgsIHJlc3QpOgorICAgICAgICAgICAgaWYgcmVzdC5zdGFydHN3aXRoKHNlcCk6CisgICAgICAgICAgICAgICAgcGF0aCA9ICcnCisKKyAgICAgICAgICAgIGZvciBuYW1lIGluIHJlc3Quc3BsaXQoc2VwKToKKyAgICAgICAgICAgICAgICBpZiBub3QgbmFtZSBvciBuYW1lID09ICcuJzoKKyAgICAgICAgICAgICAgICAgICAgIyBjdXJyZW50IGRpcgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJy4uJzoKKyAgICAgICAgICAgICAgICAgICAgIyBwYXJlbnQgZGlyCisgICAgICAgICAgICAgICAgICAgIHBhdGgsIF8sIF8gPSBwYXRoLnJwYXJ0aXRpb24oc2VwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG5ld3BhdGggPSBwYXRoICsgc2VwICsgbmFtZQorICAgICAgICAgICAgICAgIGlmIG5ld3BhdGggaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgIyBBbHJlYWR5IHNlZW4gdGhpcyBwYXRoCisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBzZWVuW25ld3BhdGhdCisgICAgICAgICAgICAgICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIHVzZSBjYWNoZWQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICMgVGhlIHN5bWxpbmsgaXMgbm90IHJlc29sdmVkLCBzbyB3ZSBtdXN0IGhhdmUgYSBzeW1saW5rIGxvb3AuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU3ltbGluayBsb29wIGZyb20gJXIiICUgbmV3cGF0aCkKKyAgICAgICAgICAgICAgICAjIFJlc29sdmUgdGhlIHN5bWJvbGljIGxpbmsKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGFjY2Vzc29yLnJlYWRsaW5rKG5ld3BhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFSU5WQUw6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAjIE5vdCBhIHN5bWxpbmsKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG5ld3BhdGgKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWVuW25ld3BhdGhdID0gTm9uZSAjIG5vdCByZXNvbHZlZCBzeW1saW5rCisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBfcmVzb2x2ZShwYXRoLCB0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIHNlZW5bbmV3cGF0aF0gPSBwYXRoICMgcmVzb2x2ZWQgc3ltbGluaworCisgICAgICAgICAgICByZXR1cm4gcGF0aAorICAgICAgICAjIE5PVEU6IGFjY29yZGluZyB0byBQT1NJWCwgZ2V0Y3dkKCkgY2Fubm90IGNvbnRhaW4gcGF0aCBjb21wb25lbnRzCisgICAgICAgICMgd2hpY2ggYXJlIHN5bWxpbmtzLgorICAgICAgICBiYXNlID0gJycgaWYgcGF0aC5pc19hYnNvbHV0ZSgpIGVsc2Ugb3MuZ2V0Y3dkKCkKKyAgICAgICAgcmV0dXJuIF9yZXNvbHZlKGJhc2UsIHN0cihwYXRoKSkgb3Igc2VwCisKKyAgICBkZWYgaXNfcmVzZXJ2ZWQoc2VsZiwgcGFydHMpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBtYWtlX3VyaShzZWxmLCBwYXRoKToKKyAgICAgICAgIyBXZSByZXByZXNlbnQgdGhlIHBhdGggdXNpbmcgdGhlIGxvY2FsIGZpbGVzeXN0ZW0gZW5jb2RpbmcsCisgICAgICAgICMgZm9yIHBvcnRhYmlsaXR5IHRvIG90aGVyIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgYnBhdGggPSBieXRlcyhwYXRoKQorICAgICAgICByZXR1cm4gJ2ZpbGU6Ly8nICsgdXJscXVvdGVfZnJvbV9ieXRlcyhicGF0aCkKKworCitfd2luZG93c19mbGF2b3VyID0gX1dpbmRvd3NGbGF2b3VyKCkKK19wb3NpeF9mbGF2b3VyID0gX1Bvc2l4Rmxhdm91cigpCisKKworY2xhc3MgX0FjY2Vzc29yOgorICAgICIiIkFuIGFjY2Vzc29yIGltcGxlbWVudHMgYSBwYXJ0aWN1bGFyIChzeXN0ZW0tc3BlY2lmaWMgb3Igbm90KSB3YXkgb2YKKyAgICBhY2Nlc3NpbmcgcGF0aHMgb24gdGhlIGZpbGVzeXN0ZW0uIiIiCisKKworY2xhc3MgX05vcm1hbEFjY2Vzc29yKF9BY2Nlc3Nvcik6CisKKyAgICBkZWYgX3dyYXBfc3RyZnVuYyhzdHJmdW5jKToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhzdHJmdW5jKQorICAgICAgICBkZWYgd3JhcHBlZChwYXRob2JqLCAqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gc3RyZnVuYyhzdHIocGF0aG9iaiksICphcmdzKQorICAgICAgICByZXR1cm4gc3RhdGljbWV0aG9kKHdyYXBwZWQpCisKKyAgICBkZWYgX3dyYXBfYmluYXJ5X3N0cmZ1bmMoc3RyZnVuYyk6CisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoc3RyZnVuYykKKyAgICAgICAgZGVmIHdyYXBwZWQocGF0aG9iakEsIHBhdGhvYmpCLCAqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gc3RyZnVuYyhzdHIocGF0aG9iakEpLCBzdHIocGF0aG9iakIpLCAqYXJncykKKyAgICAgICAgcmV0dXJuIHN0YXRpY21ldGhvZCh3cmFwcGVkKQorCisgICAgc3RhdCA9IF93cmFwX3N0cmZ1bmMob3Muc3RhdCkKKworICAgIGxzdGF0ID0gX3dyYXBfc3RyZnVuYyhvcy5sc3RhdCkKKworICAgIG9wZW4gPSBfd3JhcF9zdHJmdW5jKG9zLm9wZW4pCisKKyAgICBsaXN0ZGlyID0gX3dyYXBfc3RyZnVuYyhvcy5saXN0ZGlyKQorCisgICAgY2htb2QgPSBfd3JhcF9zdHJmdW5jKG9zLmNobW9kKQorCisgICAgaWYgaGFzYXR0cihvcywgImxjaG1vZCIpOgorICAgICAgICBsY2htb2QgPSBfd3JhcF9zdHJmdW5jKG9zLmxjaG1vZCkKKyAgICBlbHNlOgorICAgICAgICBkZWYgbGNobW9kKHNlbGYsIHBhdGhvYmosIG1vZGUpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigibGNobW9kKCkgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbSIpCisKKyAgICBta2RpciA9IF93cmFwX3N0cmZ1bmMob3MubWtkaXIpCisKKyAgICB1bmxpbmsgPSBfd3JhcF9zdHJmdW5jKG9zLnVubGluaykKKworICAgIHJtZGlyID0gX3dyYXBfc3RyZnVuYyhvcy5ybWRpcikKKworICAgIHJlbmFtZSA9IF93cmFwX2JpbmFyeV9zdHJmdW5jKG9zLnJlbmFtZSkKKworICAgIHJlcGxhY2UgPSBfd3JhcF9iaW5hcnlfc3RyZnVuYyhvcy5yZXBsYWNlKQorCisgICAgaWYgbnQ6CisgICAgICAgIGlmIHN1cHBvcnRzX3N5bWxpbmtzOgorICAgICAgICAgICAgc3ltbGluayA9IF93cmFwX2JpbmFyeV9zdHJmdW5jKG9zLnN5bWxpbmspCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWYgc3ltbGluayhhLCBiLCB0YXJnZXRfaXNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJzeW1saW5rKCkgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbSIpCisgICAgZWxzZToKKyAgICAgICAgIyBVbmRlciBQT1NJWCwgb3Muc3ltbGluaygpIHRha2VzIHR3byBhcmdzCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIHN5bWxpbmsoYSwgYiwgdGFyZ2V0X2lzX2RpcmVjdG9yeSk6CisgICAgICAgICAgICByZXR1cm4gb3Muc3ltbGluayhzdHIoYSksIHN0cihiKSkKKworICAgIHV0aW1lID0gX3dyYXBfc3RyZnVuYyhvcy51dGltZSkKKworICAgICMgSGVscGVyIGZvciByZXNvbHZlKCkKKyAgICBkZWYgcmVhZGxpbmsoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBvcy5yZWFkbGluayhwYXRoKQorCisKK19ub3JtYWxfYWNjZXNzb3IgPSBfTm9ybWFsQWNjZXNzb3IoKQorCisKKyMKKyMgR2xvYmJpbmcgaGVscGVycworIworCitAY29udGV4dG1hbmFnZXIKK2RlZiBfY2FjaGVkKGZ1bmMpOgorICAgIHRyeToKKyAgICAgICAgZnVuYy5fX2NhY2hlZF9fCisgICAgICAgIHlpZWxkIGZ1bmMKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGNhY2hlID0ge30KKyAgICAgICAgZGVmIHdyYXBwZXIoKmFyZ3MpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZVthcmdzXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHZhbHVlID0gY2FjaGVbYXJnc10gPSBmdW5jKCphcmdzKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICB3cmFwcGVyLl9fY2FjaGVkX18gPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIHdyYXBwZXIKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNhY2hlLmNsZWFyKCkKKworZGVmIF9tYWtlX3NlbGVjdG9yKHBhdHRlcm5fcGFydHMpOgorICAgIHBhdCA9IHBhdHRlcm5fcGFydHNbMF0KKyAgICBjaGlsZF9wYXJ0cyA9IHBhdHRlcm5fcGFydHNbMTpdCisgICAgaWYgcGF0ID09ICcqKic6CisgICAgICAgIGNscyA9IF9SZWN1cnNpdmVXaWxkY2FyZFNlbGVjdG9yCisgICAgZWxpZiAnKionIGluIHBhdDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBwYXR0ZXJuOiAnKionIGNhbiBvbmx5IGJlIGFuIGVudGlyZSBwYXRoIGNvbXBvbmVudCIpCisgICAgZWxpZiBfaXNfd2lsZGNhcmRfcGF0dGVybihwYXQpOgorICAgICAgICBjbHMgPSBfV2lsZGNhcmRTZWxlY3RvcgorICAgIGVsc2U6CisgICAgICAgIGNscyA9IF9QcmVjaXNlU2VsZWN0b3IKKyAgICByZXR1cm4gY2xzKHBhdCwgY2hpbGRfcGFydHMpCisKK2lmIGhhc2F0dHIoZnVuY3Rvb2xzLCAibHJ1X2NhY2hlIik6CisgICAgX21ha2Vfc2VsZWN0b3IgPSBmdW5jdG9vbHMubHJ1X2NhY2hlKCkoX21ha2Vfc2VsZWN0b3IpCisKKworY2xhc3MgX1NlbGVjdG9yOgorICAgICIiIkEgc2VsZWN0b3IgbWF0Y2hlcyBhIHNwZWNpZmljIGdsb2IgcGF0dGVybiBwYXJ0IGFnYWluc3QgdGhlIGNoaWxkcmVuCisgICAgb2YgYSBnaXZlbiBwYXRoLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNoaWxkX3BhcnRzKToKKyAgICAgICAgc2VsZi5jaGlsZF9wYXJ0cyA9IGNoaWxkX3BhcnRzCisgICAgICAgIGlmIGNoaWxkX3BhcnRzOgorICAgICAgICAgICAgc2VsZi5zdWNjZXNzb3IgPSBfbWFrZV9zZWxlY3RvcihjaGlsZF9wYXJ0cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3VjY2Vzc29yID0gX1Rlcm1pbmF0aW5nU2VsZWN0b3IoKQorCisgICAgZGVmIHNlbGVjdF9mcm9tKHNlbGYsIHBhcmVudF9wYXRoKToKKyAgICAgICAgIiIiSXRlcmF0ZSBvdmVyIGFsbCBjaGlsZCBwYXRocyBvZiBgcGFyZW50X3BhdGhgIG1hdGNoZWQgYnkgdGhpcworICAgICAgICBzZWxlY3Rvci4gIFRoaXMgY2FuIGNvbnRhaW4gcGFyZW50X3BhdGggaXRzZWxmLiIiIgorICAgICAgICBwYXRoX2NscyA9IHR5cGUocGFyZW50X3BhdGgpCisgICAgICAgIGlzX2RpciA9IHBhdGhfY2xzLmlzX2RpcgorICAgICAgICBleGlzdHMgPSBwYXRoX2Nscy5leGlzdHMKKyAgICAgICAgbGlzdGRpciA9IHBhcmVudF9wYXRoLl9hY2Nlc3Nvci5saXN0ZGlyCisgICAgICAgIHJldHVybiBzZWxmLl9zZWxlY3RfZnJvbShwYXJlbnRfcGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpCisKKworY2xhc3MgX1Rlcm1pbmF0aW5nU2VsZWN0b3I6CisKKyAgICBkZWYgX3NlbGVjdF9mcm9tKHNlbGYsIHBhcmVudF9wYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgIHlpZWxkIHBhcmVudF9wYXRoCisKKworY2xhc3MgX1ByZWNpc2VTZWxlY3RvcihfU2VsZWN0b3IpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGNoaWxkX3BhcnRzKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBfU2VsZWN0b3IuX19pbml0X18oc2VsZiwgY2hpbGRfcGFydHMpCisKKyAgICBkZWYgX3NlbGVjdF9mcm9tKHNlbGYsIHBhcmVudF9wYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgIGlmIG5vdCBpc19kaXIocGFyZW50X3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHBhdGggPSBwYXJlbnRfcGF0aC5fbWFrZV9jaGlsZF9yZWxwYXRoKHNlbGYubmFtZSkKKyAgICAgICAgaWYgZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5zdWNjZXNzb3IuX3NlbGVjdF9mcm9tKHBhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICB5aWVsZCBwCisKKworY2xhc3MgX1dpbGRjYXJkU2VsZWN0b3IoX1NlbGVjdG9yKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXQsIGNoaWxkX3BhcnRzKToKKyAgICAgICAgc2VsZi5wYXQgPSByZS5jb21waWxlKGZubWF0Y2gudHJhbnNsYXRlKHBhdCkpCisgICAgICAgIF9TZWxlY3Rvci5fX2luaXRfXyhzZWxmLCBjaGlsZF9wYXJ0cykKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgaWYgbm90IGlzX2RpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgY2YgPSBwYXJlbnRfcGF0aC5fZmxhdm91ci5jYXNlZm9sZAorICAgICAgICBmb3IgbmFtZSBpbiBsaXN0ZGlyKHBhcmVudF9wYXRoKToKKyAgICAgICAgICAgIGNhc2Vmb2xkZWQgPSBjZihuYW1lKQorICAgICAgICAgICAgaWYgc2VsZi5wYXQubWF0Y2goY2FzZWZvbGRlZCk6CisgICAgICAgICAgICAgICAgcGF0aCA9IHBhcmVudF9wYXRoLl9tYWtlX2NoaWxkX3JlbHBhdGgobmFtZSkKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLnN1Y2Nlc3Nvci5fc2VsZWN0X2Zyb20ocGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBwCisKKworY2xhc3MgX1JlY3Vyc2l2ZVdpbGRjYXJkU2VsZWN0b3IoX1NlbGVjdG9yKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXQsIGNoaWxkX3BhcnRzKToKKyAgICAgICAgX1NlbGVjdG9yLl9faW5pdF9fKHNlbGYsIGNoaWxkX3BhcnRzKQorCisgICAgZGVmIF9pdGVyYXRlX2RpcmVjdG9yaWVzKHNlbGYsIHBhcmVudF9wYXRoLCBpc19kaXIsIGxpc3RkaXIpOgorICAgICAgICB5aWVsZCBwYXJlbnRfcGF0aAorICAgICAgICBmb3IgbmFtZSBpbiBsaXN0ZGlyKHBhcmVudF9wYXRoKToKKyAgICAgICAgICAgIHBhdGggPSBwYXJlbnRfcGF0aC5fbWFrZV9jaGlsZF9yZWxwYXRoKG5hbWUpCisgICAgICAgICAgICBpZiBpc19kaXIocGF0aCk6CisgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5faXRlcmF0ZV9kaXJlY3RvcmllcyhwYXRoLCBpc19kaXIsIGxpc3RkaXIpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBwCisKKyAgICBkZWYgX3NlbGVjdF9mcm9tKHNlbGYsIHBhcmVudF9wYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgIGlmIG5vdCBpc19kaXIocGFyZW50X3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdpdGggX2NhY2hlZChsaXN0ZGlyKSBhcyBsaXN0ZGlyOgorICAgICAgICAgICAgeWllbGRlZCA9IHNldCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3VjY2Vzc29yX3NlbGVjdCA9IHNlbGYuc3VjY2Vzc29yLl9zZWxlY3RfZnJvbQorICAgICAgICAgICAgICAgIGZvciBzdGFydGluZ19wb2ludCBpbiBzZWxmLl9pdGVyYXRlX2RpcmVjdG9yaWVzKHBhcmVudF9wYXRoLCBpc19kaXIsIGxpc3RkaXIpOgorICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBzdWNjZXNzb3Jfc2VsZWN0KHN0YXJ0aW5nX3BvaW50LCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwIG5vdCBpbiB5aWVsZGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZGVkLmFkZChwKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB5aWVsZGVkLmNsZWFyKCkKKworCisjCisjIFB1YmxpYyBBUEkKKyMKKworY2xhc3MgX1BhdGhQYXJlbnRzKFNlcXVlbmNlKToKKyAgICAiIiJUaGlzIG9iamVjdCBwcm92aWRlcyBzZXF1ZW5jZS1saWtlIGFjY2VzcyB0byB0aGUgbG9naWNhbCBhbmNlc3RvcnMKKyAgICBvZiBhIHBhdGguICBEb24ndCB0cnkgdG8gY29uc3RydWN0IGl0IHlvdXJzZWxmLiIiIgorICAgIF9fc2xvdHNfXyA9ICgnX3BhdGhjbHMnLCAnX2RydicsICdfcm9vdCcsICdfcGFydHMnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICAjIFdlIGRvbid0IHN0b3JlIHRoZSBpbnN0YW5jZSB0byBhdm9pZCByZWZlcmVuY2UgY3ljbGVzCisgICAgICAgIHNlbGYuX3BhdGhjbHMgPSB0eXBlKHBhdGgpCisgICAgICAgIHNlbGYuX2RydiA9IHBhdGguX2RydgorICAgICAgICBzZWxmLl9yb290ID0gcGF0aC5fcm9vdAorICAgICAgICBzZWxmLl9wYXJ0cyA9IHBhdGguX3BhcnRzCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZHJ2IG9yIHNlbGYuX3Jvb3Q6CisgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3BhcnRzKSAtIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fcGFydHMpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaWR4KToKKyAgICAgICAgaWYgaWR4IDwgMCBvciBpZHggPj0gbGVuKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcihpZHgpCisgICAgICAgIHJldHVybiBzZWxmLl9wYXRoY2xzLl9mcm9tX3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0c1s6LWlkeCAtIDFdKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjx7fS5wYXJlbnRzPiIuZm9ybWF0KHNlbGYuX3BhdGhjbHMuX19uYW1lX18pCisKKworY2xhc3MgUHVyZVBhdGgob2JqZWN0KToKKyAgICAiIiJQdXJlUGF0aCByZXByZXNlbnRzIGEgZmlsZXN5c3RlbSBwYXRoIGFuZCBvZmZlcnMgb3BlcmF0aW9ucyB3aGljaAorICAgIGRvbid0IGltcGx5IGFueSBhY3R1YWwgZmlsZXN5c3RlbSBJL08uICBEZXBlbmRpbmcgb24geW91ciBzeXN0ZW0sCisgICAgaW5zdGFudGlhdGluZyBhIFB1cmVQYXRoIHdpbGwgcmV0dXJuIGVpdGhlciBhIFB1cmVQb3NpeFBhdGggb3IgYQorICAgIFB1cmVXaW5kb3dzUGF0aCBvYmplY3QuICBZb3UgY2FuIGFsc28gaW5zdGFudGlhdGUgZWl0aGVyIG9mIHRoZXNlIGNsYXNzZXMKKyAgICBkaXJlY3RseSwgcmVnYXJkbGVzcyBvZiB5b3VyIHN5c3RlbS4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoCisgICAgICAgICdfZHJ2JywgJ19yb290JywgJ19wYXJ0cycsCisgICAgICAgICdfc3RyJywgJ19oYXNoJywgJ19wcGFydHMnLCAnX2NhY2hlZF9jcGFydHMnLAorICAgICkKKworICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBQdXJlUGF0aCBmcm9tIG9uZSBvciBzZXZlcmFsIHN0cmluZ3MgYW5kIG9yIGV4aXN0aW5nCisgICAgICAgIFB1cmVQYXRoIG9iamVjdHMuICBUaGUgc3RyaW5ncyBhbmQgcGF0aCBvYmplY3RzIGFyZSBjb21iaW5lZCBzbyBhcworICAgICAgICB0byB5aWVsZCBhIGNhbm9uaWNhbGl6ZWQgcGF0aCwgd2hpY2ggaXMgaW5jb3Jwb3JhdGVkIGludG8gdGhlCisgICAgICAgIG5ldyBQdXJlUGF0aCBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICBpZiBjbHMgaXMgUHVyZVBhdGg6CisgICAgICAgICAgICBjbHMgPSBQdXJlV2luZG93c1BhdGggaWYgb3MubmFtZSA9PSAnbnQnIGVsc2UgUHVyZVBvc2l4UGF0aAorICAgICAgICByZXR1cm4gY2xzLl9mcm9tX3BhcnRzKGFyZ3MpCisKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgIyBVc2luZyB0aGUgcGFydHMgdHVwbGUgaGVscHMgc2hhcmUgaW50ZXJuZWQgcGF0aCBwYXJ0cworICAgICAgICAjIHdoZW4gcGlja2xpbmcgcmVsYXRlZCBwYXRocy4KKyAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXywgdHVwbGUoc2VsZi5fcGFydHMpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9wYXJzZV9hcmdzKGNscywgYXJncyk6CisgICAgICAgICMgVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2UsIGp1c3QKKyAgICAgICAgIyBjYW5vbmljYWxpemUgc29tZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMuCisgICAgICAgIHBhcnRzID0gW10KKyAgICAgICAgZm9yIGEgaW4gYXJnczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYSwgUHVyZVBhdGgpOgorICAgICAgICAgICAgICAgIHBhcnRzICs9IGEuX3BhcnRzCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYSwgc3RyKToKKyAgICAgICAgICAgICAgICAjIEFzc3VtaW5nIGEgc3RyCisgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IHNob3VsZCBiZSBhIHBhdGggb3Igc3RyIG9iamVjdCwgbm90ICVyIgorICAgICAgICAgICAgICAgICAgICAlIHR5cGUoYSkpCisgICAgICAgIHJldHVybiBjbHMuX2ZsYXZvdXIucGFyc2VfcGFydHMocGFydHMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21fcGFydHMoY2xzLCBhcmdzLCBpbml0PVRydWUpOgorICAgICAgICAjIFdlIG5lZWQgdG8gY2FsbCBfcGFyc2VfYXJncyBvbiB0aGUgaW5zdGFuY2UsIHNvIGFzIHRvIGdldCB0aGUKKyAgICAgICAgIyByaWdodCBmbGF2b3VyLgorICAgICAgICBzZWxmID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICBkcnYsIHJvb3QsIHBhcnRzID0gc2VsZi5fcGFyc2VfYXJncyhhcmdzKQorICAgICAgICBzZWxmLl9kcnYgPSBkcnYKKyAgICAgICAgc2VsZi5fcm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi5fcGFydHMgPSBwYXJ0cworICAgICAgICBpZiBpbml0OgorICAgICAgICAgICAgc2VsZi5faW5pdCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21fcGFyc2VkX3BhcnRzKGNscywgZHJ2LCByb290LCBwYXJ0cywgaW5pdD1UcnVlKToKKyAgICAgICAgc2VsZiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgc2VsZi5fZHJ2ID0gZHJ2CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3BhcnRzID0gcGFydHMKKyAgICAgICAgaWYgaW5pdDoKKyAgICAgICAgICAgIHNlbGYuX2luaXQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mb3JtYXRfcGFyc2VkX3BhcnRzKGNscywgZHJ2LCByb290LCBwYXJ0cyk6CisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgcmV0dXJuIGRydiArIHJvb3QgKyBjbHMuX2ZsYXZvdXIuam9pbihwYXJ0c1sxOl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY2xzLl9mbGF2b3VyLmpvaW4ocGFydHMpCisKKyAgICBkZWYgX2luaXQoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGVuIGluIGNvbmNyZXRlIFBhdGgKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9tYWtlX2NoaWxkKHNlbGYsIGFyZ3MpOgorICAgICAgICBkcnYsIHJvb3QsIHBhcnRzID0gc2VsZi5fcGFyc2VfYXJncyhhcmdzKQorICAgICAgICBkcnYsIHJvb3QsIHBhcnRzID0gc2VsZi5fZmxhdm91ci5qb2luX3BhcnNlZF9wYXJ0cygKKyAgICAgICAgICAgIHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwgc2VsZi5fcGFydHMsIGRydiwgcm9vdCwgcGFydHMpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhkcnYsIHJvb3QsIHBhcnRzKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoLCBzdWl0YWJsZSBmb3IKKyAgICAgICAgcGFzc2luZyB0byBzeXN0ZW0gY2FsbHMuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zdHIKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fc3RyID0gc2VsZi5fZm9ybWF0X3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnRzKSBvciAnLicKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zdHIKKworICAgIGRlZiBhc19wb3NpeChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhdGggd2l0aCBmb3J3YXJkICgvKQorICAgICAgICBzbGFzaGVzLiIiIgorICAgICAgICBmID0gc2VsZi5fZmxhdm91cgorICAgICAgICByZXR1cm4gc3RyKHNlbGYpLnJlcGxhY2UoZi5zZXAsICcvJykKKworICAgIGRlZiBfX2J5dGVzX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgYnl0ZXMgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhdGguICBUaGlzIGlzIG9ubHkKKyAgICAgICAgcmVjb21tZW5kZWQgdG8gdXNlIHVuZGVyIFVuaXguIiIiCisgICAgICAgIHJldHVybiBvcy5mc2VuY29kZShzdHIoc2VsZikpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAie30oeyFyfSkiLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5hc19wb3NpeCgpKQorCisgICAgZGVmIGFzX3VyaShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIGFzIGEgJ2ZpbGUnIFVSSS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfYWJzb2x1dGUoKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJlbGF0aXZlIHBhdGggY2FuJ3QgYmUgZXhwcmVzc2VkIGFzIGEgZmlsZSBVUkkiKQorICAgICAgICByZXR1cm4gc2VsZi5fZmxhdm91ci5tYWtlX3VyaShzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9jcGFydHMoc2VsZik6CisgICAgICAgICMgQ2FjaGVkIGNhc2Vmb2xkZWQgcGFydHMsIGZvciBoYXNoaW5nIGFuZCBjb21wYXJpc29uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRfY3BhcnRzCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2NhY2hlZF9jcGFydHMgPSBzZWxmLl9mbGF2b3VyLmNhc2Vmb2xkX3BhcnRzKHNlbGYuX3BhcnRzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZF9jcGFydHMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUHVyZVBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLl9jcGFydHMgPT0gb3RoZXIuX2NwYXJ0cyBhbmQgc2VsZi5fZmxhdm91ciBpcyBvdGhlci5fZmxhdm91cgorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faGFzaAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9oYXNoID0gaGFzaCh0dXBsZShzZWxmLl9jcGFydHMpKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhc2gKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUHVyZVBhdGgpIG9yIHNlbGYuX2ZsYXZvdXIgaXMgbm90IG90aGVyLl9mbGF2b3VyOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLl9jcGFydHMgPCBvdGhlci5fY3BhcnRzCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzIDw9IG90aGVyLl9jcGFydHMKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUHVyZVBhdGgpIG9yIHNlbGYuX2ZsYXZvdXIgaXMgbm90IG90aGVyLl9mbGF2b3VyOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLl9jcGFydHMgPiBvdGhlci5fY3BhcnRzCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzID49IG90aGVyLl9jcGFydHMKKworICAgIGRyaXZlID0gcHJvcGVydHkoYXR0cmdldHRlcignX2RydicpLAorICAgICAgICAgICAgICAgICAgICAgZG9jPSIiIlRoZSBkcml2ZSBwcmVmaXggKGxldHRlciBvciBVTkMgcGF0aCksIGlmIGFueS4iIiIpCisKKyAgICByb290ID0gcHJvcGVydHkoYXR0cmdldHRlcignX3Jvb3QnKSwKKyAgICAgICAgICAgICAgICAgICAgZG9jPSIiIlRoZSByb290IG9mIHRoZSBwYXRoLCBpZiBhbnkuIiIiKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFuY2hvcihzZWxmKToKKyAgICAgICAgIiIiVGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGRyaXZlIGFuZCByb290LCBvciAnJy4iIiIKKyAgICAgICAgYW5jaG9yID0gc2VsZi5fZHJ2ICsgc2VsZi5fcm9vdAorICAgICAgICByZXR1cm4gYW5jaG9yCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgIiIiVGhlIGZpbmFsIHBhdGggY29tcG9uZW50LCBpZiBhbnkuIiIiCisgICAgICAgIHBhcnRzID0gc2VsZi5fcGFydHMKKyAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAoMSBpZiAoc2VsZi5fZHJ2IG9yIHNlbGYuX3Jvb3QpIGVsc2UgMCk6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgcmV0dXJuIHBhcnRzWy0xXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN1ZmZpeChzZWxmKToKKyAgICAgICAgIiIiVGhlIGZpbmFsIGNvbXBvbmVudCdzIGxhc3Qgc3VmZml4LCBpZiBhbnkuIiIiCisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaSA9IG5hbWUucmZpbmQoJy4nKQorICAgICAgICBpZiAwIDwgaSA8IGxlbihuYW1lKSAtIDE6CisgICAgICAgICAgICByZXR1cm4gbmFtZVtpOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN1ZmZpeGVzKHNlbGYpOgorICAgICAgICAiIiJBIGxpc3Qgb2YgdGhlIGZpbmFsIGNvbXBvbmVudCdzIHN1ZmZpeGVzLCBpZiBhbnkuIiIiCisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLicpOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIG5hbWUgPSBuYW1lLmxzdHJpcCgnLicpCisgICAgICAgIHJldHVybiBbJy4nICsgc3VmZml4IGZvciBzdWZmaXggaW4gbmFtZS5zcGxpdCgnLicpWzE6XV0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdGVtKHNlbGYpOgorICAgICAgICAiIiJUaGUgZmluYWwgcGF0aCBjb21wb25lbnQsIG1pbnVzIGl0cyBsYXN0IHN1ZmZpeC4iIiIKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBpID0gbmFtZS5yZmluZCgnLicpCisgICAgICAgIGlmIDAgPCBpIDwgbGVuKG5hbWUpIC0gMToKKyAgICAgICAgICAgIHJldHVybiBuYW1lWzppXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIGRlZiB3aXRoX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBwYXRoIHdpdGggdGhlIGZpbGUgbmFtZSBjaGFuZ2VkLiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5uYW1lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXIgaGFzIGFuIGVtcHR5IG5hbWUiICUgKHNlbGYsKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnRzWzotMV0gKyBbbmFtZV0pCisKKyAgICBkZWYgd2l0aF9zdWZmaXgoc2VsZiwgc3VmZml4KToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IHBhdGggd2l0aCB0aGUgZmlsZSBzdWZmaXggY2hhbmdlZCAob3IgYWRkZWQsIGlmIG5vbmUpLiIiIgorICAgICAgICAjIFhYWCBpZiBzdWZmaXggaXMgTm9uZSwgc2hvdWxkIHRoZSBjdXJyZW50IHN1ZmZpeCBiZSByZW1vdmVkPworICAgICAgICBkcnYsIHJvb3QsIHBhcnRzID0gc2VsZi5fZmxhdm91ci5wYXJzZV9wYXJ0cygoc3VmZml4LCkpCisgICAgICAgIGlmIGRydiBvciByb290IG9yIGxlbihwYXJ0cykgIT0gMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgc3VmZml4ICVyIiAlIChzdWZmaXgpKQorICAgICAgICBzdWZmaXggPSBwYXJ0c1swXQorICAgICAgICBpZiBub3Qgc3VmZml4LnN0YXJ0c3dpdGgoJy4nKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgc3VmZml4ICVyIiAlIChzdWZmaXgpKQorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGlmIG5vdCBuYW1lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXIgaGFzIGFuIGVtcHR5IG5hbWUiICUgKHNlbGYsKSkKKyAgICAgICAgb2xkX3N1ZmZpeCA9IHNlbGYuc3VmZml4CisgICAgICAgIGlmIG5vdCBvbGRfc3VmZml4OgorICAgICAgICAgICAgbmFtZSA9IG5hbWUgKyBzdWZmaXgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lWzotbGVuKG9sZF9zdWZmaXgpXSArIHN1ZmZpeAorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoc2VsZi5fZHJ2LCBzZWxmLl9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFydHNbOi0xXSArIFtuYW1lXSkKKworICAgIGRlZiByZWxhdGl2ZV90byhzZWxmLCAqb3RoZXIpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHJlbGF0aXZlIHBhdGggdG8gYW5vdGhlciBwYXRoIGlkZW50aWZpZWQgYnkgdGhlIHBhc3NlZAorICAgICAgICBhcmd1bWVudHMuICBJZiB0aGUgb3BlcmF0aW9uIGlzIG5vdCBwb3NzaWJsZSAoYmVjYXVzZSB0aGlzIGlzIG5vdAorICAgICAgICBhIHN1YnBhdGggb2YgdGhlIG90aGVyIHBhdGgpLCByYWlzZSBWYWx1ZUVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgIyBGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QsIGRyaXZlIGFuZCByb290IGFyZSBjb25zaWRlcmVkCisgICAgICAgICMgc2VwYXJhdGUgcGFydHMsIGkuZS46CisgICAgICAgICMgICBQYXRoKCdjOi8nKS5yZWxhdGl2ZV90bygnYzonKSAgZ2l2ZXMgUGF0aCgnLycpCisgICAgICAgICMgICBQYXRoKCdjOi8nKS5yZWxhdGl2ZV90bygnLycpICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBpZiBub3Qgb3RoZXI6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IikKKyAgICAgICAgcGFydHMgPSBzZWxmLl9wYXJ0cworICAgICAgICBkcnYgPSBzZWxmLl9kcnYKKyAgICAgICAgcm9vdCA9IHNlbGYuX3Jvb3QKKyAgICAgICAgaWYgcm9vdDoKKyAgICAgICAgICAgIGFic19wYXJ0cyA9IFtkcnYsIHJvb3RdICsgcGFydHNbMTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhYnNfcGFydHMgPSBwYXJ0cworICAgICAgICB0b19kcnYsIHRvX3Jvb3QsIHRvX3BhcnRzID0gc2VsZi5fcGFyc2VfYXJncyhvdGhlcikKKyAgICAgICAgaWYgdG9fcm9vdDoKKyAgICAgICAgICAgIHRvX2Fic19wYXJ0cyA9IFt0b19kcnYsIHRvX3Jvb3RdICsgdG9fcGFydHNbMTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0b19hYnNfcGFydHMgPSB0b19wYXJ0cworICAgICAgICBuID0gbGVuKHRvX2Fic19wYXJ0cykKKyAgICAgICAgY2YgPSBzZWxmLl9mbGF2b3VyLmNhc2Vmb2xkX3BhcnRzCisgICAgICAgIGlmIChyb290IG9yIGRydikgaWYgbiA9PSAwIGVsc2UgY2YoYWJzX3BhcnRzWzpuXSkgIT0gY2YodG9fYWJzX3BhcnRzKToKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IHNlbGYuX2Zvcm1hdF9wYXJzZWRfcGFydHModG9fZHJ2LCB0b19yb290LCB0b19wYXJ0cykKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInshcn0gZG9lcyBub3Qgc3RhcnQgd2l0aCB7IXJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHN0cihzZWxmKSwgc3RyKGZvcm1hdHRlZCkpKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoJycsIHJvb3QgaWYgbiA9PSAxIGVsc2UgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfcGFydHNbbjpdKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcnRzKHNlbGYpOgorICAgICAgICAiIiJBbiBvYmplY3QgcHJvdmlkaW5nIHNlcXVlbmNlLWxpa2UgYWNjZXNzIHRvIHRoZQorICAgICAgICBjb21wb25lbnRzIGluIHRoZSBmaWxlc3lzdGVtIHBhdGguIiIiCisgICAgICAgICMgV2UgY2FjaGUgdGhlIHR1cGxlIHRvIGF2b2lkIGJ1aWxkaW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUgLnBhcnRzCisgICAgICAgICMgaXMgYWNjZXNzZWQuICBYWFggaXMgdGhpcyBuZWNlc3Nhcnk/CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcGFydHMKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fcHBhcnRzID0gdHVwbGUoc2VsZi5fcGFydHMpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHBhcnRzCisKKyAgICBkZWYgam9pbnBhdGgoc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJDb21iaW5lIHRoaXMgcGF0aCB3aXRoIG9uZSBvciBzZXZlcmFsIGFyZ3VtZW50cywgYW5kIHJldHVybiBhCisgICAgICAgIG5ldyBwYXRoIHJlcHJlc2VudGluZyBlaXRoZXIgYSBzdWJwYXRoIChpZiBhbGwgYXJndW1lbnRzIGFyZSByZWxhdGl2ZQorICAgICAgICBwYXRocykgb3IgYSB0b3RhbGx5IGRpZmZlcmVudCBwYXRoIChpZiBvbmUgb2YgdGhlIGFyZ3VtZW50cyBpcworICAgICAgICBhbmNob3JlZCkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWFrZV9jaGlsZChhcmdzKQorCisgICAgZGVmIF9fdHJ1ZWRpdl9fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9tYWtlX2NoaWxkKChrZXksKSkKKworICAgIGRlZiBfX3J0cnVlZGl2X18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFydHMoW2tleV0gKyBzZWxmLl9wYXJ0cykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJlbnQoc2VsZik6CisgICAgICAgICIiIlRoZSBsb2dpY2FsIHBhcmVudCBvZiB0aGUgcGF0aC4iIiIKKyAgICAgICAgZHJ2ID0gc2VsZi5fZHJ2CisgICAgICAgIHJvb3QgPSBzZWxmLl9yb290CisgICAgICAgIHBhcnRzID0gc2VsZi5fcGFydHMKKyAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAxIGFuZCAoZHJ2IG9yIHJvb3QpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKGRydiwgcm9vdCwgcGFydHNbOi0xXSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJlbnRzKHNlbGYpOgorICAgICAgICAiIiJBIHNlcXVlbmNlIG9mIHRoaXMgcGF0aCdzIGxvZ2ljYWwgcGFyZW50cy4iIiIKKyAgICAgICAgcmV0dXJuIF9QYXRoUGFyZW50cyhzZWxmKQorCisgICAgZGVmIGlzX2Fic29sdXRlKHNlbGYpOgorICAgICAgICAiIiJUcnVlIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlIChoYXMgYm90aCBhIHJvb3QgYW5kLCBpZiBhcHBsaWNhYmxlLAorICAgICAgICBhIGRyaXZlKS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Q6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9mbGF2b3VyLmhhc19kcnYgb3IgYm9vbChzZWxmLl9kcnYpCisKKyAgICBkZWYgaXNfcmVzZXJ2ZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGNvbnRhaW5zIG9uZSBvZiB0aGUgc3BlY2lhbCBuYW1lcyByZXNlcnZlZAorICAgICAgICBieSB0aGUgc3lzdGVtLCBpZiBhbnkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9mbGF2b3VyLmlzX3Jlc2VydmVkKHNlbGYuX3BhcnRzKQorCisgICAgZGVmIG1hdGNoKHNlbGYsIHBhdGhfcGF0dGVybik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gVHJ1ZSBpZiB0aGlzIHBhdGggbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4KKyAgICAgICAgIiIiCisgICAgICAgIGNmID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZAorICAgICAgICBwYXRoX3BhdHRlcm4gPSBjZihwYXRoX3BhdHRlcm4pCisgICAgICAgIGRydiwgcm9vdCwgcGF0X3BhcnRzID0gc2VsZi5fZmxhdm91ci5wYXJzZV9wYXJ0cygocGF0aF9wYXR0ZXJuLCkpCisgICAgICAgIGlmIG5vdCBwYXRfcGFydHM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJlbXB0eSBwYXR0ZXJuIikKKyAgICAgICAgaWYgZHJ2IGFuZCBkcnYgIT0gY2Yoc2VsZi5fZHJ2KToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiByb290IGFuZCByb290ICE9IGNmKHNlbGYuX3Jvb3QpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHBhcnRzID0gc2VsZi5fY3BhcnRzCisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgaWYgbGVuKHBhdF9wYXJ0cykgIT0gbGVuKHBhcnRzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHBhdF9wYXJ0cyA9IHBhdF9wYXJ0c1sxOl0KKyAgICAgICAgZWxpZiBsZW4ocGF0X3BhcnRzKSA+IGxlbihwYXJ0cyk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIHBhcnQsIHBhdCBpbiB6aXAocmV2ZXJzZWQocGFydHMpLCByZXZlcnNlZChwYXRfcGFydHMpKToKKyAgICAgICAgICAgIGlmIG5vdCBmbm1hdGNoLmZubWF0Y2hjYXNlKHBhcnQsIHBhdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgUHVyZVBvc2l4UGF0aChQdXJlUGF0aCk6CisgICAgX2ZsYXZvdXIgPSBfcG9zaXhfZmxhdm91cgorICAgIF9fc2xvdHNfXyA9ICgpCisKKworY2xhc3MgUHVyZVdpbmRvd3NQYXRoKFB1cmVQYXRoKToKKyAgICBfZmxhdm91ciA9IF93aW5kb3dzX2ZsYXZvdXIKKyAgICBfX3Nsb3RzX18gPSAoKQorCisKKyMgRmlsZXN5c3RlbS1hY2Nlc3NpbmcgY2xhc3NlcworCisKK2NsYXNzIFBhdGgoUHVyZVBhdGgpOgorICAgIF9fc2xvdHNfXyA9ICgKKyAgICAgICAgJ19hY2Nlc3NvcicsCisgICAgICAgICdfY2xvc2VkJywKKyAgICApCisKKyAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGNscyBpcyBQYXRoOgorICAgICAgICAgICAgY2xzID0gV2luZG93c1BhdGggaWYgb3MubmFtZSA9PSAnbnQnIGVsc2UgUG9zaXhQYXRoCisgICAgICAgIHNlbGYgPSBjbHMuX2Zyb21fcGFydHMoYXJncywgaW5pdD1GYWxzZSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZsYXZvdXIuaXNfc3VwcG9ydGVkOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiY2Fubm90IGluc3RhbnRpYXRlICVyIG9uIHlvdXIgc3lzdGVtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChjbHMuX19uYW1lX18sKSkKKyAgICAgICAgc2VsZi5faW5pdCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX2luaXQoc2VsZiwKKyAgICAgICAgICAgICAgIyBQcml2YXRlIG5vbi1jb25zdHJ1Y3RvciBhcmd1bWVudHMKKyAgICAgICAgICAgICAgdGVtcGxhdGU9Tm9uZSwKKyAgICAgICAgICAgICAgKToKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKKyAgICAgICAgaWYgdGVtcGxhdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9hY2Nlc3NvciA9IHRlbXBsYXRlLl9hY2Nlc3NvcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IgPSBfbm9ybWFsX2FjY2Vzc29yCisKKyAgICBkZWYgX21ha2VfY2hpbGRfcmVscGF0aChzZWxmLCBwYXJ0KToKKyAgICAgICAgIyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB1c2VkIGZvciBkaXIgd2Fsa2luZy4gIGBwYXJ0YCBtdXN0IGJlCisgICAgICAgICMgYSBzaW5nbGUgcGFydCByZWxhdGl2ZSB0byB0aGlzIHBhdGguCisgICAgICAgIHBhcnRzID0gc2VsZi5fcGFydHMgKyBbcGFydF0KKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwgcGFydHMpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHQsIHYsIHRiKToKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQorCisgICAgZGVmIF9yYWlzZV9jbG9zZWQoc2VsZik6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIHBhdGgiKQorCisgICAgZGVmIF9vcGVuZXIoc2VsZiwgbmFtZSwgZmxhZ3MsIG1vZGU9MG82NjYpOgorICAgICAgICAjIEEgc3R1YiBmb3IgdGhlIG9wZW5lciBhcmd1bWVudCB0byBidWlsdC1pbiBvcGVuKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FjY2Vzc29yLm9wZW4oc2VsZiwgZmxhZ3MsIG1vZGUpCisKKyAgICBkZWYgX3Jhd19vcGVuKHNlbGYsIGZsYWdzLCBtb2RlPTBvNzc3KToKKyAgICAgICAgIiIiCisgICAgICAgIE9wZW4gdGhlIGZpbGUgcG9pbnRlZCBieSB0aGlzIHBhdGggYW5kIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvciwKKyAgICAgICAgYXMgb3Mub3BlbigpIGRvZXMuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICByZXR1cm4gc2VsZi5fYWNjZXNzb3Iub3BlbihzZWxmLCBmbGFncywgbW9kZSkKKworICAgICMgUHVibGljIEFQSQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGN3ZChjbHMpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgcGF0aCBwb2ludGluZyB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorICAgICAgICAoYXMgcmV0dXJuZWQgYnkgb3MuZ2V0Y3dkKCkpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGNscyhvcy5nZXRjd2QoKSkKKworICAgIGRlZiBpdGVyZGlyKHNlbGYpOgorICAgICAgICAiIiJJdGVyYXRlIG92ZXIgdGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LiAgRG9lcyBub3QgeWllbGQgYW55CisgICAgICAgIHJlc3VsdCBmb3IgdGhlIHNwZWNpYWwgcGF0aHMgJy4nIGFuZCAnLi4nLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5fYWNjZXNzb3IubGlzdGRpcihzZWxmKToKKyAgICAgICAgICAgIGlmIG5hbWUgaW4geycuJywgJy4uJ306CisgICAgICAgICAgICAgICAgIyBZaWVsZGluZyBhIHBhdGggb2JqZWN0IGZvciB0aGVzZSBtYWtlcyBsaXR0bGUgc2Vuc2UKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgeWllbGQgc2VsZi5fbWFrZV9jaGlsZF9yZWxwYXRoKG5hbWUpCisgICAgICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKworICAgIGRlZiBnbG9iKHNlbGYsIHBhdHRlcm4pOgorICAgICAgICAiIiJJdGVyYXRlIG92ZXIgdGhpcyBzdWJ0cmVlIGFuZCB5aWVsZCBhbGwgZXhpc3RpbmcgZmlsZXMgKG9mIGFueQorICAgICAgICBraW5kLCBpbmNsdWRpbmcgZGlyZWN0b3JpZXMpIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXR0ZXJuLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0dGVybiA9IHNlbGYuX2ZsYXZvdXIuY2FzZWZvbGQocGF0dGVybikKKyAgICAgICAgZHJ2LCByb290LCBwYXR0ZXJuX3BhcnRzID0gc2VsZi5fZmxhdm91ci5wYXJzZV9wYXJ0cygocGF0dGVybiwpKQorICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIk5vbi1yZWxhdGl2ZSBwYXR0ZXJucyBhcmUgdW5zdXBwb3J0ZWQiKQorICAgICAgICBzZWxlY3RvciA9IF9tYWtlX3NlbGVjdG9yKHR1cGxlKHBhdHRlcm5fcGFydHMpKQorICAgICAgICBmb3IgcCBpbiBzZWxlY3Rvci5zZWxlY3RfZnJvbShzZWxmKToKKyAgICAgICAgICAgIHlpZWxkIHAKKworICAgIGRlZiByZ2xvYihzZWxmLCBwYXR0ZXJuKToKKyAgICAgICAgIiIiUmVjdXJzaXZlbHkgeWllbGQgYWxsIGV4aXN0aW5nIGZpbGVzIChvZiBhbnkga2luZCwgaW5jbHVkaW5nCisgICAgICAgIGRpcmVjdG9yaWVzKSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0dGVybiwgYW55d2hlcmUgaW4gdGhpcyBzdWJ0cmVlLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0dGVybiA9IHNlbGYuX2ZsYXZvdXIuY2FzZWZvbGQocGF0dGVybikKKyAgICAgICAgZHJ2LCByb290LCBwYXR0ZXJuX3BhcnRzID0gc2VsZi5fZmxhdm91ci5wYXJzZV9wYXJ0cygocGF0dGVybiwpKQorICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIk5vbi1yZWxhdGl2ZSBwYXR0ZXJucyBhcmUgdW5zdXBwb3J0ZWQiKQorICAgICAgICBzZWxlY3RvciA9IF9tYWtlX3NlbGVjdG9yKCgiKioiLCkgKyB0dXBsZShwYXR0ZXJuX3BhcnRzKSkKKyAgICAgICAgZm9yIHAgaW4gc2VsZWN0b3Iuc2VsZWN0X2Zyb20oc2VsZik6CisgICAgICAgICAgICB5aWVsZCBwCisKKyAgICBkZWYgYWJzb2x1dGUoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBhYnNvbHV0ZSB2ZXJzaW9uIG9mIHRoaXMgcGF0aC4gIFRoaXMgZnVuY3Rpb24gd29ya3MKKyAgICAgICAgZXZlbiBpZiB0aGUgcGF0aCBkb2Vzbid0IHBvaW50IHRvIGFueXRoaW5nLgorCisgICAgICAgIE5vIG5vcm1hbGl6YXRpb24gaXMgZG9uZSwgaS5lLiBhbGwgJy4nIGFuZCAnLi4nIHdpbGwgYmUga2VwdCBhbG9uZy4KKyAgICAgICAgVXNlIHJlc29sdmUoKSB0byBnZXQgdGhlIGNhbm9uaWNhbCBwYXRoIHRvIGEgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgICMgWFhYIHVudGVzdGVkIHlldCEKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgaWYgc2VsZi5pc19hYnNvbHV0ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgIyBGSVhNRSB0aGlzIG11c3QgZGVmZXIgdG8gdGhlIHNwZWNpZmljIGZsYXZvdXIgKGFuZCwgdW5kZXIgV2luZG93cywKKyAgICAgICAgIyB1c2UgbnQuX2dldGZ1bGxwYXRobmFtZSgpKQorICAgICAgICBvYmogPSBzZWxmLl9mcm9tX3BhcnRzKFtvcy5nZXRjd2QoKV0gKyBzZWxmLl9wYXJ0cywgaW5pdD1GYWxzZSkKKyAgICAgICAgb2JqLl9pbml0KHRlbXBsYXRlPXNlbGYpCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiByZXNvbHZlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFrZSB0aGUgcGF0aCBhYnNvbHV0ZSwgcmVzb2x2aW5nIGFsbCBzeW1saW5rcyBvbiB0aGUgd2F5IGFuZCBhbHNvCisgICAgICAgIG5vcm1hbGl6aW5nIGl0IChmb3IgZXhhbXBsZSB0dXJuaW5nIHNsYXNoZXMgaW50byBiYWNrc2xhc2hlcyB1bmRlcgorICAgICAgICBXaW5kb3dzKS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHMgPSBzZWxmLl9mbGF2b3VyLnJlc29sdmUoc2VsZikKKyAgICAgICAgaWYgcyBpcyBOb25lOgorICAgICAgICAgICAgIyBObyBzeW1saW5rIHJlc29sdXRpb24gPT4gZm9yIGNvbnNpc3RlbmN5LCByYWlzZSBhbiBlcnJvciBpZgorICAgICAgICAgICAgIyB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGZvcmJpZGRlbgorICAgICAgICAgICAgc2VsZi5zdGF0KCkKKyAgICAgICAgICAgIHMgPSBzdHIoc2VsZi5hYnNvbHV0ZSgpKQorICAgICAgICAjIE5vdyB3ZSBoYXZlIG5vIHN5bWxpbmtzIGluIHRoZSBwYXRoLCBpdCdzIHNhZmUgdG8gbm9ybWFsaXplIGl0LgorICAgICAgICBub3JtZWQgPSBzZWxmLl9mbGF2b3VyLnBhdGhtb2Qubm9ybXBhdGgocykKKyAgICAgICAgb2JqID0gc2VsZi5fZnJvbV9wYXJ0cygobm9ybWVkLCksIGluaXQ9RmFsc2UpCisgICAgICAgIG9iai5faW5pdCh0ZW1wbGF0ZT1zZWxmKQorICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgc3RhdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBzdGF0KCkgc3lzdGVtIGNhbGwgb24gdGhpcyBwYXRoLCBsaWtlCisgICAgICAgIG9zLnN0YXQoKSBkb2VzLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FjY2Vzc29yLnN0YXQoc2VsZikKKworICAgIGRlZiBvd25lcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbG9naW4gbmFtZSBvZiB0aGUgZmlsZSBvd25lci4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCBwd2QKKyAgICAgICAgcmV0dXJuIHB3ZC5nZXRwd3VpZChzZWxmLnN0YXQoKS5zdF91aWQpLnB3X25hbWUKKworICAgIGRlZiBncm91cChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgZ3JvdXAgbmFtZSBvZiB0aGUgZmlsZSBnaWQuCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgZ3JwCisgICAgICAgIHJldHVybiBncnAuZ2V0Z3JnaWQoc2VsZi5zdGF0KCkuc3RfZ2lkKS5ncl9uYW1lCisKKyAgICBkZWYgb3BlbihzZWxmLCBtb2RlPSdyJywgYnVmZmVyaW5nPS0xLCBlbmNvZGluZz1Ob25lLAorICAgICAgICAgICAgIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgT3BlbiB0aGUgZmlsZSBwb2ludGVkIGJ5IHRoaXMgcGF0aCBhbmQgcmV0dXJuIGEgZmlsZSBvYmplY3QsIGFzCisgICAgICAgIHRoZSBidWlsdC1pbiBvcGVuKCkgZnVuY3Rpb24gZG9lcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHJldHVybiBpby5vcGVuKHN0cihzZWxmKSwgbW9kZSwgYnVmZmVyaW5nLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBvcGVuZXI9c2VsZi5fb3BlbmVyKQorCisgICAgZGVmIHRvdWNoKHNlbGYsIG1vZGU9MG82NjYsIGV4aXN0X29rPVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoaXMgZmlsZSB3aXRoIHRoZSBnaXZlbiBhY2Nlc3MgbW9kZSwgaWYgaXQgZG9lc24ndCBleGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIGlmIGV4aXN0X29rOgorICAgICAgICAgICAgIyBGaXJzdCB0cnkgdG8gYnVtcCBtb2RpZmljYXRpb24gdGltZQorICAgICAgICAgICAgIyBJbXBsZW1lbnRhdGlvbiBub3RlOiBHTlUgdG91Y2ggdXNlcyB0aGUgVVRJTUVfTk9XIG9wdGlvbiBvZgorICAgICAgICAgICAgIyB0aGUgdXRpbWVuc2F0KCkgLyBmdXRpbWVucygpIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci51dGltZShzZWxmLCBOb25lKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBBdm9pZCBleGNlcHRpb24gY2hhaW5pbmcKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBmbGFncyA9IG9zLk9fQ1JFQVQgfCBvcy5PX1dST05MWQorICAgICAgICBpZiBub3QgZXhpc3Rfb2s6CisgICAgICAgICAgICBmbGFncyB8PSBvcy5PX0VYQ0wKKyAgICAgICAgZmQgPSBzZWxmLl9yYXdfb3BlbihmbGFncywgbW9kZSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICBkZWYgbWtkaXIoc2VsZiwgbW9kZT0wbzc3NywgcGFyZW50cz1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIGlmIG5vdCBwYXJlbnRzOgorICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IubWtkaXIoc2VsZiwgbW9kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ta2RpcihzZWxmLCBtb2RlKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmVudC5ta2RpcihwYXJlbnRzPVRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IubWtkaXIoc2VsZiwgbW9kZSkKKworICAgIGRlZiBjaG1vZChzZWxmLCBtb2RlKToKKyAgICAgICAgIiIiCisgICAgICAgIENoYW5nZSB0aGUgcGVybWlzc2lvbnMgb2YgdGhlIHBhdGgsIGxpa2Ugb3MuY2htb2QoKS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLmNobW9kKHNlbGYsIG1vZGUpCisKKyAgICBkZWYgbGNobW9kKHNlbGYsIG1vZGUpOgorICAgICAgICAiIiIKKyAgICAgICAgTGlrZSBjaG1vZCgpLCBleGNlcHQgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltbGluaywgdGhlIHN5bWxpbmsncworICAgICAgICBwZXJtaXNzaW9ucyBhcmUgY2hhbmdlZCwgcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3IubGNobW9kKHNlbGYsIG1vZGUpCisKKyAgICBkZWYgdW5saW5rKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVtb3ZlIHRoaXMgZmlsZSBvciBsaW5rLgorICAgICAgICBJZiB0aGUgcGF0aCBpcyBhIGRpcmVjdG9yeSwgdXNlIHJtZGlyKCkgaW5zdGVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLnVubGluayhzZWxmKQorCisgICAgZGVmIHJtZGlyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVtb3ZlIHRoaXMgZGlyZWN0b3J5LiAgVGhlIGRpcmVjdG9yeSBtdXN0IGJlIGVtcHR5LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3Iucm1kaXIoc2VsZikKKworICAgIGRlZiBsc3RhdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIExpa2Ugc3RhdCgpLCBleGNlcHQgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltbGluaywgdGhlIHN5bWxpbmsncworICAgICAgICBzdGF0dXMgaW5mb3JtYXRpb24gaXMgcmV0dXJuZWQsIHJhdGhlciB0aGFuIGl0cyB0YXJnZXQncy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHJldHVybiBzZWxmLl9hY2Nlc3Nvci5sc3RhdChzZWxmKQorCisgICAgZGVmIHJlbmFtZShzZWxmLCB0YXJnZXQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVuYW1lIHRoaXMgcGF0aCB0byB0aGUgZ2l2ZW4gcGF0aC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLnJlbmFtZShzZWxmLCB0YXJnZXQpCisKKyAgICBkZWYgcmVwbGFjZShzZWxmLCB0YXJnZXQpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVuYW1lIHRoaXMgcGF0aCB0byB0aGUgZ2l2ZW4gcGF0aCwgY2xvYmJlcmluZyB0aGUgZXhpc3RpbmcKKyAgICAgICAgZGVzdGluYXRpb24gaWYgaXQgZXhpc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3IucmVwbGFjZShzZWxmLCB0YXJnZXQpCisKKyAgICBkZWYgc3ltbGlua190byhzZWxmLCB0YXJnZXQsIHRhcmdldF9pc19kaXJlY3Rvcnk9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFrZSB0aGlzIHBhdGggYSBzeW1saW5rIHBvaW50aW5nIHRvIHRoZSBnaXZlbiBwYXRoLgorICAgICAgICBOb3RlIHRoZSBvcmRlciBvZiBhcmd1bWVudHMgKHNlbGYsIHRhcmdldCkgaXMgdGhlIHJldmVyc2Ugb2Ygb3Muc3ltbGluaydzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3Iuc3ltbGluayh0YXJnZXQsIHNlbGYsIHRhcmdldF9pc19kaXJlY3RvcnkpCisKKyAgICAjIENvbnZlbmllbmNlIGZ1bmN0aW9ucyBmb3IgcXVlcnlpbmcgdGhlIHN0YXQgcmVzdWx0cworCisgICAgZGVmIGV4aXN0cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGV4aXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc3RhdCgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgaXNfZGlyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBkaXJlY3RvcnkuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gU19JU0RJUihzZWxmLnN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbmsKKyAgICAgICAgICAgICMgKHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvMTIvKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfZmlsZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgcmVndWxhciBmaWxlIChhbHNvIFRydWUgZm9yIHN5bWxpbmtzIHBvaW50aW5nCisgICAgICAgIHRvIHJlZ3VsYXIgZmlsZXMpLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNSRUcoc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX3N5bWxpbmsoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmsuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gU19JU0xOSyhzZWxmLmxzdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfYmxvY2tfZGV2aWNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBibG9jayBkZXZpY2UuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gU19JU0JMSyhzZWxmLnN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbmsKKyAgICAgICAgICAgICMgKHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvMTIvKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfY2hhcl9kZXZpY2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIGNoYXJhY3RlciBkZXZpY2UuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gU19JU0NIUihzZWxmLnN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbmsKKyAgICAgICAgICAgICMgKHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvMTIvKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfZmlmbyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgRklGTy4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTRklGTyhzZWxmLnN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbmsKKyAgICAgICAgICAgICMgKHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvMTIvKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfc29ja2V0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBzb2NrZXQuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gU19JU1NPQ0soc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIFBvc2l4UGF0aChQYXRoLCBQdXJlUG9zaXhQYXRoKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCitjbGFzcyBXaW5kb3dzUGF0aChQYXRoLCBQdXJlV2luZG93c1BhdGgpOgorICAgIF9fc2xvdHNfXyA9ICgpCmRpZmYgLS1naXQgYS9MaWIvcGRiLnB5IGIvTGliL3BkYi5weQppbmRleCA4MGNiYTlkLi5kZDdjZWI4IDEwMDc1NQotLS0gYS9MaWIvcGRiLnB5CisrKyBiL0xpYi9wZGIucHkKQEAgLTkyLDIxICs5MiwxNCBAQAogICAgIGNyZSA9IHJlLmNvbXBpbGUocidkZWZccyslc1xzKlsoXScgJSByZS5lc2NhcGUoZnVuY25hbWUpKQogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gTm9uZQogICAgICMgY29uc3VtZXIgb2YgdGhpcyBpbmZvIGV4cGVjdHMgdGhlIGZpcnN0IGxpbmUgdG8gYmUgMQotICAgIGxpbmVubyA9IDEKLSAgICBhbnN3ZXIgPSBOb25lCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbGluZSA9PSAnJzoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIGNyZS5tYXRjaChsaW5lKToKLSAgICAgICAgICAgIGFuc3dlciA9IGZ1bmNuYW1lLCBmaWxlbmFtZSwgbGluZW5vCi0gICAgICAgICAgICBicmVhawotICAgICAgICBsaW5lbm8gKz0gMQotICAgIGZwLmNsb3NlKCkKLSAgICByZXR1cm4gYW5zd2VyCisgICAgd2l0aCBmcDoKKyAgICAgICAgZm9yIGxpbmVubywgbGluZSBpbiBlbnVtZXJhdGUoZnAsIHN0YXJ0PTEpOgorICAgICAgICAgICAgaWYgY3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jbmFtZSwgZmlsZW5hbWUsIGxpbmVubworICAgIHJldHVybiBOb25lCiAKIGRlZiBnZXRzb3VyY2VsaW5lcyhvYmopOgogICAgIGxpbmVzLCBsaW5lbm8gPSBpbnNwZWN0LmZpbmRzb3VyY2Uob2JqKQpAQCAtMTcwLDEyICsxNjMsMTIgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGVudkhvbWUsICIucGRicmMiKSkgYXMgcmNGaWxlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnJjTGluZXMuZXh0ZW5kKHJjRmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIG9wZW4oIi5wZGJyYyIpIGFzIHJjRmlsZToKICAgICAgICAgICAgICAgICBzZWxmLnJjTGluZXMuZXh0ZW5kKHJjRmlsZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIHNlbGYuY29tbWFuZHMgPSB7fSAjIGFzc29jaWF0ZXMgYSBjb21tYW5kIGxpc3QgdG8gYnJlYWtwb2ludCBudW1iZXJzCkBAIC0zMDQsOCArMjk3LDE2IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZXhjX3R5cGUsIGV4Y192YWx1ZSwgZXhjX3RyYWNlYmFjayA9IGV4Y19pbmZvCiAgICAgICAgIGZyYW1lLmZfbG9jYWxzWydfX2V4Y2VwdGlvbl9fJ10gPSBleGNfdHlwZSwgZXhjX3ZhbHVlCi0gICAgICAgIHNlbGYubWVzc2FnZSh0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV4Y190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNfdmFsdWUpWy0xXS5zdHJpcCgpKQorCisgICAgICAgICMgQW4gJ0ludGVybmFsIFN0b3BJdGVyYXRpb24nIGV4Y2VwdGlvbiBpcyBhbiBleGNlcHRpb24gZGVidWcgZXZlbnQKKyAgICAgICAgIyBpc3N1ZWQgYnkgdGhlIGludGVycHJldGVyIHdoZW4gaGFuZGxpbmcgYSBzdWJnZW5lcmF0b3IgcnVuIHdpdGgKKyAgICAgICAgIyAneWllbGQgZnJvbScgb3IgYSBnZW5lcmF0b3IgY29udHJvbGVkIGJ5IGEgZm9yIGxvb3AuIE5vIGV4Y2VwdGlvbiBoYXMKKyAgICAgICAgIyBhY3R1YWxseSBvY2N1cmVkIGluIHRoaXMgY2FzZS4gVGhlIGRlYnVnZ2VyIHVzZXMgdGhpcyBkZWJ1ZyBldmVudCB0bworICAgICAgICAjIHN0b3Agd2hlbiB0aGUgZGVidWdnZWUgaXMgcmV0dXJuaW5nIGZyb20gc3VjaCBnZW5lcmF0b3JzLgorICAgICAgICBwcmVmaXggPSAnSW50ZXJuYWwgJyBpZiAobm90IGV4Y190cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBleGNfdHlwZSBpcyBTdG9wSXRlcmF0aW9uKSBlbHNlICcnCisgICAgICAgIHNlbGYubWVzc2FnZSgnJXMlcycgJSAocHJlZml4LAorICAgICAgICAgICAgdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShleGNfdHlwZSwgZXhjX3ZhbHVlKVstMV0uc3RyaXAoKSkpCiAgICAgICAgIHNlbGYuaW50ZXJhY3Rpb24oZnJhbWUsIGV4Y190cmFjZWJhY2spCiAKICAgICAjIEdlbmVyYWwgaW50ZXJhY3Rpb24gZnVuY3Rpb24KQEAgLTExNjMsMTUgKzExNjQsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBfcnN0cignKiogcmFpc2VkICVzICoqJyAlIGVycikKIAogICAgIGRlZiBkb19wKHNlbGYsIGFyZyk6Ci0gICAgICAgICIiInAocmludCkgZXhwcmVzc2lvbgorICAgICAgICAiIiJwIGV4cHJlc3Npb24KICAgICAgICAgUHJpbnQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLgogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5tZXNzYWdlKHJlcHIoc2VsZi5fZ2V0dmFsKGFyZykpKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBwYXNzCi0gICAgIyBtYWtlICJwcmludCIgYW4gYWxpYXMgb2YgInAiIHNpbmNlIHByaW50IGlzbid0IGEgUHl0aG9uIHN0YXRlbWVudCBhbnltb3JlCi0gICAgZG9fcHJpbnQgPSBkb19wCiAKICAgICBkZWYgZG9fcHAoc2VsZiwgYXJnKToKICAgICAgICAgIiIicHAgZXhwcmVzc2lvbgpAQCAtMTI0NSw3ICsxMjQ0LDcgQEAKICAgICAgICAgYnJlYWtsaXN0ID0gc2VsZi5nZXRfZmlsZV9icmVha3MoZmlsZW5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxpbmVzLCBsaW5lbm8gPSBnZXRzb3VyY2VsaW5lcyhzZWxmLmN1cmZyYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYuZXJyb3IoZXJyKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuX3ByaW50X2xpbmVzKGxpbmVzLCBsaW5lbm8sIGJyZWFrbGlzdCwgc2VsZi5jdXJmcmFtZSkKQEAgLTEyNjEsNyArMTI2MCw3IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGluZXMsIGxpbmVubyA9IGdldHNvdXJjZWxpbmVzKG9iaikKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBUeXBlRXJyb3IpIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBUeXBlRXJyb3IpIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYuZXJyb3IoZXJyKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuX3ByaW50X2xpbmVzKGxpbmVzLCBsaW5lbm8pCkBAIC0xMzkyLDcgKzEzOTEsNyBAQAogICAgICAgICBwbGFjZWQgaW4gdGhlIC5wZGJyYyBmaWxlKToKIAogICAgICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyAodXNhZ2UgInBpIGNsYXNzSW5zdCIpCi0gICAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQgIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10KKyAgICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCgiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXSkKICAgICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgaW4gc2VsZgogICAgICAgICBhbGlhcyBwcyBwaSBzZWxmCiAgICAgICAgICIiIgpAQCAtMTU1MCw3ICsxNTQ5LDcgQEAKICAgICAgICAgJ2hlbHAnLCAnd2hlcmUnLCAnZG93bicsICd1cCcsICdicmVhaycsICd0YnJlYWsnLCAnY2xlYXInLCAnZGlzYWJsZScsCiAgICAgICAgICdlbmFibGUnLCAnaWdub3JlJywgJ2NvbmRpdGlvbicsICdjb21tYW5kcycsICdzdGVwJywgJ25leHQnLCAndW50aWwnLAogICAgICAgICAnanVtcCcsICdyZXR1cm4nLCAncmV0dmFsJywgJ3J1bicsICdjb250aW51ZScsICdsaXN0JywgJ2xvbmdsaXN0JywKLSAgICAgICAgJ2FyZ3MnLCAncHJpbnQnLCAncHAnLCAnd2hhdGlzJywgJ3NvdXJjZScsICdkaXNwbGF5JywgJ3VuZGlzcGxheScsCisgICAgICAgICdhcmdzJywgJ3AnLCAncHAnLCAnd2hhdGlzJywgJ3NvdXJjZScsICdkaXNwbGF5JywgJ3VuZGlzcGxheScsCiAgICAgICAgICdpbnRlcmFjdCcsICdhbGlhcycsICd1bmFsaWFzJywgJ2RlYnVnJywgJ3F1aXQnLAogICAgIF0KIApkaWZmIC0tZ2l0IGEvTGliL3BpY2tsZS5weSBiL0xpYi9waWNrbGUucHkKaW5kZXggMzg2ZmZiYS4uOWNkMDEzMiAxMDA2NDQKLS0tIGEvTGliL3BpY2tsZS5weQorKysgYi9MaWIvcGlja2xlLnB5CkBAIC0yMywxMiArMjMsMTMgQEAKIAogIiIiCiAKLWZyb20gdHlwZXMgaW1wb3J0IEZ1bmN0aW9uVHlwZSwgQnVpbHRpbkZ1bmN0aW9uVHlwZQorZnJvbSB0eXBlcyBpbXBvcnQgRnVuY3Rpb25UeXBlLCBNb2R1bGVUeXBlCiBmcm9tIGNvcHlyZWcgaW1wb3J0IGRpc3BhdGNoX3RhYmxlCiBmcm9tIGNvcHlyZWcgaW1wb3J0IF9leHRlbnNpb25fcmVnaXN0cnksIF9pbnZlcnRlZF9yZWdpc3RyeSwgX2V4dGVuc2lvbl9jYWNoZQotaW1wb3J0IG1hcnNoYWwKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBpc2xpY2UKIGltcG9ydCBzeXMKLWltcG9ydCBzdHJ1Y3QKK2Zyb20gc3lzIGltcG9ydCBtYXhzaXplCitmcm9tIHN0cnVjdCBpbXBvcnQgcGFjaywgdW5wYWNrCiBpbXBvcnQgcmUKIGltcG9ydCBpbwogaW1wb3J0IGNvZGVjcwpAQCAtNDEsMjggKzQyLDI0IEBACiBieXRlc190eXBlcyA9IChieXRlcywgYnl0ZWFycmF5KQogCiAjIFRoZXNlIGFyZSBwdXJlbHkgaW5mb3JtYXRpb25hbDsgbm8gY29kZSB1c2VzIHRoZXNlLgotZm9ybWF0X3ZlcnNpb24gPSAiMy4wIiAgICAgICAgICAgICAgICAgICMgRmlsZSBmb3JtYXQgdmVyc2lvbiB3ZSB3cml0ZQorZm9ybWF0X3ZlcnNpb24gPSAiNC4wIiAgICAgICAgICAgICAgICAgICMgRmlsZSBmb3JtYXQgdmVyc2lvbiB3ZSB3cml0ZQogY29tcGF0aWJsZV9mb3JtYXRzID0gWyIxLjAiLCAgICAgICAgICAgICMgT3JpZ2luYWwgcHJvdG9jb2wgMAogICAgICAgICAgICAgICAgICAgICAgICIxLjEiLCAgICAgICAgICAgICMgUHJvdG9jb2wgMCB3aXRoIElOU1QgYWRkZWQKICAgICAgICAgICAgICAgICAgICAgICAiMS4yIiwgICAgICAgICAgICAjIE9yaWdpbmFsIHByb3RvY29sIDEKICAgICAgICAgICAgICAgICAgICAgICAiMS4zIiwgICAgICAgICAgICAjIFByb3RvY29sIDEgd2l0aCBCSU5GTE9BVCBhZGRlZAogICAgICAgICAgICAgICAgICAgICAgICIyLjAiLCAgICAgICAgICAgICMgUHJvdG9jb2wgMgogICAgICAgICAgICAgICAgICAgICAgICIzLjAiLCAgICAgICAgICAgICMgUHJvdG9jb2wgMworICAgICAgICAgICAgICAgICAgICAgICI0LjAiLCAgICAgICAgICAgICMgUHJvdG9jb2wgNAogICAgICAgICAgICAgICAgICAgICAgIF0gICAgICAgICAgICAgICAgICMgT2xkIGZvcm1hdCB2ZXJzaW9ucyB3ZSBjYW4gcmVhZAogCiAjIFRoaXMgaXMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgbnVtYmVyIHdlIGtub3cgaG93IHRvIHJlYWQuCi1ISUdIRVNUX1BST1RPQ09MID0gMworSElHSEVTVF9QUk9UT0NPTCA9IDQKIAogIyBUaGUgcHJvdG9jb2wgd2Ugd3JpdGUgYnkgZGVmYXVsdC4gIE1heSBiZSBsZXNzIHRoYW4gSElHSEVTVF9QUk9UT0NPTC4KICMgV2UgaW50ZW50aW9uYWxseSB3cml0ZSBhIHByb3RvY29sIHRoYXQgUHl0aG9uIDIueCBjYW5ub3QgcmVhZDsKICMgdGhlcmUgYXJlIHRvbyBtYW55IGlzc3VlcyB3aXRoIHRoYXQuCiBERUZBVUxUX1BST1RPQ09MID0gMwogCi0jIFdoeSB1c2Ugc3RydWN0LnBhY2soKSBmb3IgcGlja2xpbmcgYnV0IG1hcnNoYWwubG9hZHMoKSBmb3IKLSMgdW5waWNrbGluZz8gIHN0cnVjdC5wYWNrKCkgaXMgNDAlIGZhc3RlciB0aGFuIG1hcnNoYWwuZHVtcHMoKSwgYnV0Ci0jIG1hcnNoYWwubG9hZHMoKSBpcyB0d2ljZSBhcyBmYXN0IGFzIHN0cnVjdC51bnBhY2soKSEKLW1sb2FkcyA9IG1hcnNoYWwubG9hZHMKLQogY2xhc3MgUGlja2xlRXJyb3IoRXhjZXB0aW9uKToKICAgICAiIiJBIGNvbW1vbiBiYXNlIGNsYXNzIGZvciB0aGUgb3RoZXIgcGlja2xpbmcgZXhjZXB0aW9ucy4iIiIKICAgICBwYXNzCkBAIC0xNjgsNyArMTY1LDE4MSBAQAogQklOQllURVMgICAgICAgPSBiJ0InICAgIyBwdXNoIGJ5dGVzOyBjb3VudGVkIGJpbmFyeSBzdHJpbmcgYXJndW1lbnQKIFNIT1JUX0JJTkJZVEVTID0gYidDJyAgICMgICIgICAgICIgICA7ICAgICIgICAgICAiICAgICAgICIgICAgICAiIDwgMjU2IGJ5dGVzCiAKLV9fYWxsX18uZXh0ZW5kKFt4IGZvciB4IGluIGRpcigpIGlmIHJlLm1hdGNoKCJbQS1aXVtBLVowLTlfXSskIix4KV0pCisjIFByb3RvY29sIDQKK1NIT1JUX0JJTlVOSUNPREUgPSBiJ1x4OGMnICAjIHB1c2ggc2hvcnQgc3RyaW5nOyBVVEYtOCBsZW5ndGggPCAyNTYgYnl0ZXMKK0JJTlVOSUNPREU4ICAgICAgPSBiJ1x4OGQnICAjIHB1c2ggdmVyeSBsb25nIHN0cmluZworQklOQllURVM4ICAgICAgICA9IGInXHg4ZScgICMgcHVzaCB2ZXJ5IGxvbmcgYnl0ZXMgc3RyaW5nCitFTVBUWV9TRVQgICAgICAgID0gYidceDhmJyAgIyBwdXNoIGVtcHR5IHNldCBvbiB0aGUgc3RhY2sKK0FERElURU1TICAgICAgICAgPSBiJ1x4OTAnICAjIG1vZGlmeSBzZXQgYnkgYWRkaW5nIHRvcG1vc3Qgc3RhY2sgaXRlbXMKK0ZST1pFTlNFVCAgICAgICAgPSBiJ1x4OTEnICAjIGJ1aWxkIGZyb3plbnNldCBmcm9tIHRvcG1vc3Qgc3RhY2sgaXRlbXMKK05FV09CSl9FWCAgICAgICAgPSBiJ1x4OTInICAjIGxpa2UgTkVXT0JKIGJ1dCB3b3JrIHdpdGgga2V5d29yZCBvbmx5IGFyZ3VtZW50cworU1RBQ0tfR0xPQkFMICAgICA9IGInXHg5MycgICMgc2FtZSBhcyBHTE9CQUwgYnV0IHVzaW5nIG5hbWVzIG9uIHRoZSBzdGFja3MKK01FTU9JWkUgICAgICAgICAgPSBiJ1x4OTQnICAjIHN0b3JlIHRvcCBvZiB0aGUgc3RhY2sgaW4gbWVtbworRlJBTUUgICAgICAgICAgICA9IGInXHg5NScgICMgaW5kaWNhdGUgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBmcmFtZQorCitfX2FsbF9fLmV4dGVuZChbeCBmb3IgeCBpbiBkaXIoKSBpZiByZS5tYXRjaCgiW0EtWl1bQS1aMC05X10rJCIsIHgpXSkKKworCitjbGFzcyBfRnJhbWVyOgorCisgICAgX0ZSQU1FX1NJWkVfVEFSR0VUID0gNjQgKiAxMDI0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV93cml0ZSk6CisgICAgICAgIHNlbGYuZmlsZV93cml0ZSA9IGZpbGVfd3JpdGUKKyAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorCisgICAgZGVmIHN0YXJ0X2ZyYW1pbmcoc2VsZik6CisgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IGlvLkJ5dGVzSU8oKQorCisgICAgZGVmIGVuZF9mcmFtaW5nKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWUgYW5kIHNlbGYuY3VycmVudF9mcmFtZS50ZWxsKCkgPiAwOgorICAgICAgICAgICAgc2VsZi5jb21taXRfZnJhbWUoZm9yY2U9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IE5vbmUKKworICAgIGRlZiBjb21taXRfZnJhbWUoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWU6CisgICAgICAgICAgICBmID0gc2VsZi5jdXJyZW50X2ZyYW1lCisgICAgICAgICAgICBpZiBmLnRlbGwoKSA+PSBzZWxmLl9GUkFNRV9TSVpFX1RBUkdFVCBvciBmb3JjZToKKyAgICAgICAgICAgICAgICB3aXRoIGYuZ2V0YnVmZmVyKCkgYXMgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgbiA9IGxlbihkYXRhKQorICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IHNlbGYuZmlsZV93cml0ZQorICAgICAgICAgICAgICAgICAgICB3cml0ZShGUkFNRSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocGFjaygiPFEiLCBuKSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBmLnRydW5jYXRlKCkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY3VycmVudF9mcmFtZS53cml0ZShkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV93cml0ZShkYXRhKQorCisKK2NsYXNzIF9VbmZyYW1lcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX3JlYWQsIGZpbGVfcmVhZGxpbmUsIGZpbGVfdGVsbD1Ob25lKToKKyAgICAgICAgc2VsZi5maWxlX3JlYWQgPSBmaWxlX3JlYWQKKyAgICAgICAgc2VsZi5maWxlX3JlYWRsaW5lID0gZmlsZV9yZWFkbGluZQorICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisKKyAgICBkZWYgcmVhZChzZWxmLCBuKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuY3VycmVudF9mcmFtZS5yZWFkKG4pCisgICAgICAgICAgICBpZiBub3QgZGF0YSBhbmQgbiAhPSAwOgorICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlX3JlYWQobikKKyAgICAgICAgICAgIGlmIGxlbihkYXRhKSA8IG46CisgICAgICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKAorICAgICAgICAgICAgICAgICAgICAicGlja2xlIGV4aGF1c3RlZCBiZWZvcmUgZW5kIG9mIGZyYW1lIikKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlX3JlYWQobikKKworICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuY3VycmVudF9mcmFtZS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV9yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBkYXRhWy0xXSAhPSBiJ1xuJzoKKyAgICAgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgZXhoYXVzdGVkIGJlZm9yZSBlbmQgb2YgZnJhbWUiKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfcmVhZGxpbmUoKQorCisgICAgZGVmIGxvYWRfZnJhbWUoc2VsZiwgZnJhbWVfc2l6ZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZSBhbmQgc2VsZi5jdXJyZW50X2ZyYW1lLnJlYWQoKSAhPSBiJyc6CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoCisgICAgICAgICAgICAgICAgImJlZ2lubmluZyBvZiBhIG5ldyBmcmFtZSBiZWZvcmUgZW5kIG9mIGN1cnJlbnQgZnJhbWUiKQorICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBpby5CeXRlc0lPKHNlbGYuZmlsZV9yZWFkKGZyYW1lX3NpemUpKQorCisKKyMgVG9vbHMgdXNlZCBmb3IgcGlja2xpbmcuCisKK2RlZiBfZ2V0YXR0cmlidXRlKG9iaiwgbmFtZSwgYWxsb3dfcXVhbG5hbWU9RmFsc2UpOgorICAgIGRvdHRlZF9wYXRoID0gbmFtZS5zcGxpdCgiLiIpCisgICAgaWYgbm90IGFsbG93X3F1YWxuYW1lIGFuZCBsZW4oZG90dGVkX3BhdGgpID4gMToKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkNhbid0IGdldCBxdWFsaWZpZWQgYXR0cmlidXRlIHshcn0gb24geyFyfTsgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgcHJvdG9jb2xzID49IDQgdG8gZW5hYmxlIHN1cHBvcnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobmFtZSwgb2JqKSkKKyAgICBmb3Igc3VicGF0aCBpbiBkb3R0ZWRfcGF0aDoKKyAgICAgICAgaWYgc3VicGF0aCA9PSAnPGxvY2Fscz4nOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkNhbid0IGdldCBsb2NhbCBhdHRyaWJ1dGUgeyFyfSBvbiB7IXJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lLCBvYmopKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgc3VicGF0aCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkNhbid0IGdldCBhdHRyaWJ1dGUgeyFyfSBvbiB7IXJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lLCBvYmopKQorICAgIHJldHVybiBvYmoKKworZGVmIHdoaWNobW9kdWxlKG9iaiwgbmFtZSwgYWxsb3dfcXVhbG5hbWU9RmFsc2UpOgorICAgICIiIkZpbmQgdGhlIG1vZHVsZSBhbiBvYmplY3QgYmVsb25nIHRvLiIiIgorICAgIG1vZHVsZV9uYW1lID0gZ2V0YXR0cihvYmosICdfX21vZHVsZV9fJywgTm9uZSkKKyAgICBpZiBtb2R1bGVfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lCisgICAgZm9yIG1vZHVsZV9uYW1lLCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKKyAgICAgICAgaWYgbW9kdWxlX25hbWUgPT0gJ19fbWFpbl9fJyBvciBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIF9nZXRhdHRyaWJ1dGUobW9kdWxlLCBuYW1lLCBhbGxvd19xdWFsbmFtZSkgaXMgb2JqOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVfbmFtZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgcmV0dXJuICdfX21haW5fXycKKworZGVmIGVuY29kZV9sb25nKHgpOgorICAgIHIiIiJFbmNvZGUgYSBsb25nIHRvIGEgdHdvJ3MgY29tcGxlbWVudCBsaXR0bGUtZW5kaWFuIGJpbmFyeSBzdHJpbmcuCisgICAgTm90ZSB0aGF0IDAgaXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybmluZyBhbiBlbXB0eSBzdHJpbmcsIHRvIHNhdmUgYQorICAgIGJ5dGUgaW4gdGhlIExPTkcxIHBpY2tsaW5nIGNvbnRleHQuCisKKyAgICA+Pj4gZW5jb2RlX2xvbmcoMCkKKyAgICBiJycKKyAgICA+Pj4gZW5jb2RlX2xvbmcoMjU1KQorICAgIGInXHhmZlx4MDAnCisgICAgPj4+IGVuY29kZV9sb25nKDMyNzY3KQorICAgIGInXHhmZlx4N2YnCisgICAgPj4+IGVuY29kZV9sb25nKC0yNTYpCisgICAgYidceDAwXHhmZicKKyAgICA+Pj4gZW5jb2RlX2xvbmcoLTMyNzY4KQorICAgIGInXHgwMFx4ODAnCisgICAgPj4+IGVuY29kZV9sb25nKC0xMjgpCisgICAgYidceDgwJworICAgID4+PiBlbmNvZGVfbG9uZygxMjcpCisgICAgYidceDdmJworICAgID4+PgorICAgICIiIgorICAgIGlmIHggPT0gMDoKKyAgICAgICAgcmV0dXJuIGInJworICAgIG5ieXRlcyA9ICh4LmJpdF9sZW5ndGgoKSA+PiAzKSArIDEKKyAgICByZXN1bHQgPSB4LnRvX2J5dGVzKG5ieXRlcywgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKKyAgICBpZiB4IDwgMCBhbmQgbmJ5dGVzID4gMToKKyAgICAgICAgaWYgcmVzdWx0Wy0xXSA9PSAweGZmIGFuZCAocmVzdWx0Wy0yXSAmIDB4ODApICE9IDA6CisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbOi0xXQorICAgIHJldHVybiByZXN1bHQKKworZGVmIGRlY29kZV9sb25nKGRhdGEpOgorICAgIHIiIiJEZWNvZGUgYSBsb25nIGZyb20gYSB0d28ncyBjb21wbGVtZW50IGxpdHRsZS1lbmRpYW4gYmluYXJ5IHN0cmluZy4KKworICAgID4+PiBkZWNvZGVfbG9uZyhiJycpCisgICAgMAorICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ZmZceDAwIikKKyAgICAyNTUKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceGZmXHg3ZiIpCisgICAgMzI3NjcKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDAwXHhmZiIpCisgICAgLTI1NgorICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4MDBceDgwIikKKyAgICAtMzI3NjgKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDgwIikKKyAgICAtMTI4CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHg3ZiIpCisgICAgMTI3CisgICAgIiIiCisgICAgcmV0dXJuIGludC5mcm9tX2J5dGVzKGRhdGEsIGJ5dGVvcmRlcj0nbGl0dGxlJywgc2lnbmVkPVRydWUpCisKIAogIyBQaWNrbGluZyBtYWNoaW5lcnkKIApAQCAtMTc3LDI0ICszNDgsMjUgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6CiAgICAgICAgICIiIlRoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3Igd3JpdGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS4KIAotICAgICAgICBUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZQotICAgICAgICBnaXZlbiBwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0Ci0gICAgICAgIHByb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvcgotICAgICAgICBQeXRob24gMy4wLgorICAgICAgICBUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlCisgICAgICAgIGdpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzIGFuZCA0LiAgVGhlCisgICAgICAgIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQKKyAgICAgICAgZm9yIFB5dGhvbiAzLgogCiAgICAgICAgIFNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QKICAgICAgICAgcHJvdG9jb2wgdmVyc2lvbiBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUKICAgICAgICAgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUKICAgICAgICAgcHJvZHVjZWQuCiAKLSAgICAgICAgVGhlIGZpbGUgYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlCi0gICAgICAgIGJ5dGVzIGFyZ3VtZW50LiBJdCBjYW4gdGh1cyBiZSBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgYmluYXJ5Ci0gICAgICAgIHdyaXRpbmcsIGEgaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdAotICAgICAgICBtZWV0cyB0aGlzIGludGVyZmFjZS4KKyAgICAgICAgVGhlICpmaWxlKiBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYQorICAgICAgICBzaW5nbGUgYnl0ZXMgYXJndW1lbnQuIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvcgorICAgICAgICBiaW5hcnkgd3JpdGluZywgYSBpby5CeXRlc0lPIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tCisgICAgICAgIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgogCi0gICAgICAgIElmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KLSAgICAgICAgbWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbgotICAgICAgICAyLngsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguCisgICAgICAgIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgKnByb3RvY29sKiBpcyBsZXNzIHRoYW4gMywgcGlja2xlCisgICAgICAgIHdpbGwgdHJ5IHRvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzCisgICAgICAgIHVzZWQgaW4gUHl0aG9uIDIsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZQorICAgICAgICB3aXRoIFB5dGhvbiAyLgogICAgICAgICAiIiIKICAgICAgICAgaWYgcHJvdG9jb2wgaXMgTm9uZToKICAgICAgICAgICAgIHByb3RvY29sID0gREVGQVVMVF9QUk9UT0NPTApAQCAtMjAzLDkgKzM3NSwxMSBAQAogICAgICAgICBlbGlmIG5vdCAwIDw9IHByb3RvY29sIDw9IEhJR0hFU1RfUFJPVE9DT0w6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwaWNrbGUgcHJvdG9jb2wgbXVzdCBiZSA8PSAlZCIgJSBISUdIRVNUX1BST1RPQ09MKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlID0gZmlsZS53cml0ZQorICAgICAgICAgICAgc2VsZi5fZmlsZV93cml0ZSA9IGZpbGUud3JpdGUKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJmaWxlIG11c3QgaGF2ZSBhICd3cml0ZScgYXR0cmlidXRlIikKKyAgICAgICAgc2VsZi5mcmFtZXIgPSBfRnJhbWVyKHNlbGYuX2ZpbGVfd3JpdGUpCisgICAgICAgIHNlbGYud3JpdGUgPSBzZWxmLmZyYW1lci53cml0ZQogICAgICAgICBzZWxmLm1lbW8gPSB7fQogICAgICAgICBzZWxmLnByb3RvID0gaW50KHByb3RvY29sKQogICAgICAgICBzZWxmLmJpbiA9IHByb3RvY29sID49IDEKQEAgLTIxNiwxMCArMzkwLDkgQEAKICAgICAgICAgIiIiQ2xlYXJzIHRoZSBwaWNrbGVyJ3MgIm1lbW8iLgogCiAgICAgICAgIFRoZSBtZW1vIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlbWVtYmVycyB3aGljaCBvYmplY3RzIHRoZQotICAgICAgICBwaWNrbGVyIGhhcyBhbHJlYWR5IHNlZW4sIHNvIHRoYXQgc2hhcmVkIG9yIHJlY3Vyc2l2ZSBvYmplY3RzIGFyZQotICAgICAgICBwaWNrbGVkIGJ5IHJlZmVyZW5jZSBhbmQgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW4KLSAgICAgICAgcmUtdXNpbmcgcGlja2xlcnMuCi0KKyAgICAgICAgcGlja2xlciBoYXMgYWxyZWFkeSBzZWVuLCBzbyB0aGF0IHNoYXJlZCBvciByZWN1cnNpdmUgb2JqZWN0cworICAgICAgICBhcmUgcGlja2xlZCBieSByZWZlcmVuY2UgYW5kIG5vdCBieSB2YWx1ZS4gIFRoaXMgbWV0aG9kIGlzCisgICAgICAgIHVzZWZ1bCB3aGVuIHJlLXVzaW5nIHBpY2tsZXJzLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5tZW1vLmNsZWFyKCkKIApAQCAtMjI3LDEzICs0MDAsMTYgQEAKICAgICAgICAgIiIiV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLiIiIgogICAgICAgICAjIENoZWNrIHdoZXRoZXIgUGlja2xlciB3YXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBUaGlzIGlzCiAgICAgICAgICMgb25seSBuZWVkZWQgdG8gbWltaWMgdGhlIGJlaGF2aW9yIG9mIF9waWNrbGUuUGlja2xlci5kdW1wKCkuCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJ3cml0ZSIpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX2ZpbGVfd3JpdGUiKToKICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoIlBpY2tsZXIuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCBieSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy5fX2luaXRfXygpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywpKQogICAgICAgICBpZiBzZWxmLnByb3RvID49IDI6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKFBST1RPICsgYnl0ZXMoW3NlbGYucHJvdG9dKSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoUFJPVE8gKyBwYWNrKCI8QiIsIHNlbGYucHJvdG8pKQorICAgICAgICBpZiBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICBzZWxmLmZyYW1lci5zdGFydF9mcmFtaW5nKCkKICAgICAgICAgc2VsZi5zYXZlKG9iaikKICAgICAgICAgc2VsZi53cml0ZShTVE9QKQorICAgICAgICBzZWxmLmZyYW1lci5lbmRfZnJhbWluZygpCiAKICAgICBkZWYgbWVtb2l6ZShzZWxmLCBvYmopOgogICAgICAgICAiIiJTdG9yZSBhbiBvYmplY3QgaW4gdGhlIG1lbW8uIiIiCkBAIC0yNTMsMzEgKzQyOSwzNSBAQAogICAgICAgICBpZiBzZWxmLmZhc3Q6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgYXNzZXJ0IGlkKG9iaikgbm90IGluIHNlbGYubWVtbwotICAgICAgICBtZW1vX2xlbiA9IGxlbihzZWxmLm1lbW8pCi0gICAgICAgIHNlbGYud3JpdGUoc2VsZi5wdXQobWVtb19sZW4pKQotICAgICAgICBzZWxmLm1lbW9baWQob2JqKV0gPSBtZW1vX2xlbiwgb2JqCisgICAgICAgIGlkeCA9IGxlbihzZWxmLm1lbW8pCisgICAgICAgIHNlbGYud3JpdGUoc2VsZi5wdXQoaWR4KSkKKyAgICAgICAgc2VsZi5tZW1vW2lkKG9iaildID0gaWR4LCBvYmoKIAogICAgICMgUmV0dXJuIGEgUFVUIChCSU5QVVQsIExPTkdfQklOUFVUKSBvcGNvZGUgc3RyaW5nLCB3aXRoIGFyZ3VtZW50IGkuCi0gICAgZGVmIHB1dChzZWxmLCBpLCBwYWNrPXN0cnVjdC5wYWNrKToKLSAgICAgICAgaWYgc2VsZi5iaW46Ci0gICAgICAgICAgICBpZiBpIDwgMjU2OgotICAgICAgICAgICAgICAgIHJldHVybiBCSU5QVVQgKyBieXRlcyhbaV0pCisgICAgZGVmIHB1dChzZWxmLCBpZHgpOgorICAgICAgICBpZiBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICByZXR1cm4gTUVNT0laRQorICAgICAgICBlbGlmIHNlbGYuYmluOgorICAgICAgICAgICAgaWYgaWR4IDwgMjU2OgorICAgICAgICAgICAgICAgIHJldHVybiBCSU5QVVQgKyBwYWNrKCI8QiIsIGlkeCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIExPTkdfQklOUFVUICsgcGFjaygiPEkiLCBpKQotCi0gICAgICAgIHJldHVybiBQVVQgKyByZXByKGkpLmVuY29kZSgiYXNjaWkiKSArIGInXG4nCisgICAgICAgICAgICAgICAgcmV0dXJuIExPTkdfQklOUFVUICsgcGFjaygiPEkiLCBpZHgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gUFVUICsgcmVwcihpZHgpLmVuY29kZSgiYXNjaWkiKSArIGInXG4nCiAKICAgICAjIFJldHVybiBhIEdFVCAoQklOR0VULCBMT05HX0JJTkdFVCkgb3Bjb2RlIHN0cmluZywgd2l0aCBhcmd1bWVudCBpLgotICAgIGRlZiBnZXQoc2VsZiwgaSwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIGdldChzZWxmLCBpKToKICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICBpZiBpIDwgMjU2OgotICAgICAgICAgICAgICAgIHJldHVybiBCSU5HRVQgKyBieXRlcyhbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIEJJTkdFVCArIHBhY2soIjxCIiwgaSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIExPTkdfQklOR0VUICsgcGFjaygiPEkiLCBpKQogCiAgICAgICAgIHJldHVybiBHRVQgKyByZXByKGkpLmVuY29kZSgiYXNjaWkiKSArIGInXG4nCiAKICAgICBkZWYgc2F2ZShzZWxmLCBvYmosIHNhdmVfcGVyc2lzdGVudF9pZD1UcnVlKToKKyAgICAgICAgc2VsZi5mcmFtZXIuY29tbWl0X2ZyYW1lKCkKKwogICAgICAgICAjIENoZWNrIGZvciBwZXJzaXN0ZW50IGlkIChkZWZpbmVkIGJ5IGEgc3ViY2xhc3MpCiAgICAgICAgIHBpZCA9IHNlbGYucGVyc2lzdGVudF9pZChvYmopCiAgICAgICAgIGlmIHBpZCBpcyBub3QgTm9uZSBhbmQgc2F2ZV9wZXJzaXN0ZW50X2lkOgpAQCAtMjg2LDIwICs0NjYsMjAgQEAKIAogICAgICAgICAjIENoZWNrIHRoZSBtZW1vCiAgICAgICAgIHggPSBzZWxmLm1lbW8uZ2V0KGlkKG9iaikpCi0gICAgICAgIGlmIHg6CisgICAgICAgIGlmIHggaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLndyaXRlKHNlbGYuZ2V0KHhbMF0pKQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBDaGVjayB0aGUgdHlwZSBkaXNwYXRjaCB0YWJsZQogICAgICAgICB0ID0gdHlwZShvYmopCiAgICAgICAgIGYgPSBzZWxmLmRpc3BhdGNoLmdldCh0KQotICAgICAgICBpZiBmOgorICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZihzZWxmLCBvYmopICMgQ2FsbCB1bmJvdW5kIG1ldGhvZCB3aXRoIGV4cGxpY2l0IHNlbGYKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgQ2hlY2sgcHJpdmF0ZSBkaXNwYXRjaCB0YWJsZSBpZiBhbnksIG9yIGVsc2UgY29weXJlZy5kaXNwYXRjaF90YWJsZQogICAgICAgICByZWR1Y2UgPSBnZXRhdHRyKHNlbGYsICdkaXNwYXRjaF90YWJsZScsIGRpc3BhdGNoX3RhYmxlKS5nZXQodCkKLSAgICAgICAgaWYgcmVkdWNlOgorICAgICAgICBpZiByZWR1Y2UgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBydiA9IHJlZHVjZShvYmopCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIENoZWNrIGZvciBhIGNsYXNzIHdpdGggYSBjdXN0b20gbWV0YWNsYXNzOyB0cmVhdCBhcyByZWd1bGFyIGNsYXNzCkBAIC0zMTMsMTEgKzQ5MywxMSBAQAogCiAgICAgICAgICAgICAjIENoZWNrIGZvciBhIF9fcmVkdWNlX2V4X18gbWV0aG9kLCBmYWxsIGJhY2sgdG8gX19yZWR1Y2VfXwogICAgICAgICAgICAgcmVkdWNlID0gZ2V0YXR0cihvYmosICJfX3JlZHVjZV9leF9fIiwgTm9uZSkKLSAgICAgICAgICAgIGlmIHJlZHVjZToKKyAgICAgICAgICAgIGlmIHJlZHVjZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBydiA9IHJlZHVjZShzZWxmLnByb3RvKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZWR1Y2UgPSBnZXRhdHRyKG9iaiwgIl9fcmVkdWNlX18iLCBOb25lKQotICAgICAgICAgICAgICAgIGlmIHJlZHVjZToKKyAgICAgICAgICAgICAgICBpZiByZWR1Y2UgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHJ2ID0gcmVkdWNlKCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJDYW4ndCBwaWNrbGUgJXIgb2JqZWN0OiAlciIgJQpAQCAtMzUzLDI0ICs1MzMsMzMgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYud3JpdGUoUEVSU0lEICsgc3RyKHBpZCkuZW5jb2RlKCJhc2NpaSIpICsgYidcbicpCiAKLSAgICBkZWYgc2F2ZV9yZWR1Y2Uoc2VsZiwgZnVuYywgYXJncywgc3RhdGU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgbGlzdGl0ZW1zPU5vbmUsIGRpY3RpdGVtcz1Ob25lLCBvYmo9Tm9uZSk6CisgICAgZGVmIHNhdmVfcmVkdWNlKHNlbGYsIGZ1bmMsIGFyZ3MsIHN0YXRlPU5vbmUsIGxpc3RpdGVtcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICBkaWN0aXRlbXM9Tm9uZSwgb2JqPU5vbmUpOgogICAgICAgICAjIFRoaXMgQVBJIGlzIGNhbGxlZCBieSBzb21lIHN1YmNsYXNzZXMKIAotICAgICAgICAjIEFzc2VydCB0aGF0IGFyZ3MgaXMgYSB0dXBsZQogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmdzLCB0dXBsZSk6Ci0gICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJhcmdzIGZyb20gc2F2ZV9yZWR1Y2UoKSBzaG91bGQgYmUgYSB0dXBsZSIpCi0KLSAgICAgICAgIyBBc3NlcnQgdGhhdCBmdW5jIGlzIGNhbGxhYmxlCisgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJhcmdzIGZyb20gc2F2ZV9yZWR1Y2UoKSBtdXN0IGJlIGEgdHVwbGUiKQogICAgICAgICBpZiBub3QgY2FsbGFibGUoZnVuYyk6Ci0gICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJmdW5jIGZyb20gc2F2ZV9yZWR1Y2UoKSBzaG91bGQgYmUgY2FsbGFibGUiKQorICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiZnVuYyBmcm9tIHNhdmVfcmVkdWNlKCkgbXVzdCBiZSBjYWxsYWJsZSIpCiAKICAgICAgICAgc2F2ZSA9IHNlbGYuc2F2ZQogICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKIAotICAgICAgICAjIFByb3RvY29sIDIgc3BlY2lhbCBjYXNlOiBpZiBmdW5jJ3MgbmFtZSBpcyBfX25ld29ial9fLCB1c2UgTkVXT0JKCi0gICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMiBhbmQgZ2V0YXR0cihmdW5jLCAiX19uYW1lX18iLCAiIikgPT0gIl9fbmV3b2JqX18iOgotICAgICAgICAgICAgIyBBIF9fcmVkdWNlX18gaW1wbGVtZW50YXRpb24gY2FuIGRpcmVjdCBwcm90b2NvbCAyIHRvCisgICAgICAgIGZ1bmNfbmFtZSA9IGdldGF0dHIoZnVuYywgIl9fbmFtZV9fIiwgIiIpCisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNCBhbmQgZnVuY19uYW1lID09ICJfX25ld29ial9leF9fIjoKKyAgICAgICAgICAgIGNscywgYXJncywga3dhcmdzID0gYXJncworICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoY2xzLCAiX19uZXdfXyIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImFyZ3NbMF0gZnJvbSB7fSBhcmdzIGhhcyBubyBfX25ld19fIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChmdW5jX25hbWUpKQorICAgICAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lIGFuZCBjbHMgaXMgbm90IG9iai5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiYXJnc1swXSBmcm9tIHt9IGFyZ3MgaGFzIHRoZSB3cm9uZyBjbGFzcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoZnVuY19uYW1lKSkKKyAgICAgICAgICAgIHNhdmUoY2xzKQorICAgICAgICAgICAgc2F2ZShhcmdzKQorICAgICAgICAgICAgc2F2ZShrd2FyZ3MpCisgICAgICAgICAgICB3cml0ZShORVdPQkpfRVgpCisgICAgICAgIGVsaWYgc2VsZi5wcm90byA+PSAyIGFuZCBmdW5jX25hbWUgPT0gIl9fbmV3b2JqX18iOgorICAgICAgICAgICAgIyBBIF9fcmVkdWNlX18gaW1wbGVtZW50YXRpb24gY2FuIGRpcmVjdCBwcm90b2NvbCAyIG9yIG5ld2VyIHRvCiAgICAgICAgICAgICAjIHVzZSB0aGUgbW9yZSBlZmZpY2llbnQgTkVXT0JKIG9wY29kZSwgd2hpbGUgc3RpbGwKICAgICAgICAgICAgICMgYWxsb3dpbmcgcHJvdG9jb2wgMCBhbmQgMSB0byB3b3JrIG5vcm1hbGx5LiAgRm9yIHRoaXMgdG8KICAgICAgICAgICAgICMgd29yaywgdGhlIGZ1bmN0aW9uIHJldHVybmVkIGJ5IF9fcmVkdWNlX18gc2hvdWxkIGJlCkBAIC00MTMsNyArNjAyLDEzIEBACiAgICAgICAgICAgICB3cml0ZShSRURVQ0UpCiAKICAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKKyAgICAgICAgICAgICMgSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSBtZW1vLCB0aGlzIG1lYW5zIGl0IGlzCisgICAgICAgICAgICAjIHJlY3Vyc2l2ZS4gSW4gdGhpcyBjYXNlLCB0aHJvdyBhd2F5IGV2ZXJ5dGhpbmcgd2UgcHV0IG9uIHRoZQorICAgICAgICAgICAgIyBzdGFjaywgYW5kIGZldGNoIHRoZSBvYmplY3QgYmFjayBmcm9tIHRoZSBtZW1vLgorICAgICAgICAgICAgaWYgaWQob2JqKSBpbiBzZWxmLm1lbW86CisgICAgICAgICAgICAgICAgd3JpdGUoUE9QICsgc2VsZi5nZXQoc2VsZi5tZW1vW2lkKG9iaildWzBdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKIAogICAgICAgICAjIE1vcmUgbmV3IHNwZWNpYWwgY2FzZXMgKHRoYXQgd29yayB3aXRoIG9sZGVyIHByb3RvY29scyBhcwogICAgICAgICAjIHdlbGwpOiB3aGVuIF9fcmVkdWNlX18gcmV0dXJucyBhIHR1cGxlIHdpdGggNCBvciA1IGl0ZW1zLApAQCAtNDM4LDIyICs2MzMsMTQgQEAKICAgICAgICAgc2VsZi53cml0ZShOT05FKQogICAgIGRpc3BhdGNoW3R5cGUoTm9uZSldID0gc2F2ZV9ub25lCiAKLSAgICBkZWYgc2F2ZV9lbGxpcHNpcyhzZWxmLCBvYmopOgotICAgICAgICBzZWxmLnNhdmVfZ2xvYmFsKEVsbGlwc2lzLCAnRWxsaXBzaXMnKQotICAgIGRpc3BhdGNoW3R5cGUoRWxsaXBzaXMpXSA9IHNhdmVfZWxsaXBzaXMKLQotICAgIGRlZiBzYXZlX25vdGltcGxlbWVudGVkKHNlbGYsIG9iaik6Ci0gICAgICAgIHNlbGYuc2F2ZV9nbG9iYWwoTm90SW1wbGVtZW50ZWQsICdOb3RJbXBsZW1lbnRlZCcpCi0gICAgZGlzcGF0Y2hbdHlwZShOb3RJbXBsZW1lbnRlZCldID0gc2F2ZV9ub3RpbXBsZW1lbnRlZAotCiAgICAgZGVmIHNhdmVfYm9vbChzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLnByb3RvID49IDI6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKG9iaiBhbmQgTkVXVFJVRSBvciBORVdGQUxTRSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoTkVXVFJVRSBpZiBvYmogZWxzZSBORVdGQUxTRSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYud3JpdGUob2JqIGFuZCBUUlVFIG9yIEZBTFNFKQorICAgICAgICAgICAgc2VsZi53cml0ZShUUlVFIGlmIG9iaiBlbHNlIEZBTFNFKQogICAgIGRpc3BhdGNoW2Jvb2xdID0gc2F2ZV9ib29sCiAKLSAgICBkZWYgc2F2ZV9sb25nKHNlbGYsIG9iaiwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfbG9uZyhzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgICMgSWYgdGhlIGludCBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGEgc2lnbmVkIDQtYnl0ZSAyJ3MtY29tcAogICAgICAgICAgICAgIyBmb3JtYXQsIHdlIGNhbiBzdG9yZSBpdCBtb3JlIGVmZmljaWVudGx5IHRoYW4gdGhlIGdlbmVyYWwKQEAgLTQ2MSw5MyArNjQ4LDk1IEBACiAgICAgICAgICAgICAjIEZpcnN0IG9uZS0gYW5kIHR3by1ieXRlIHVuc2lnbmVkIGludHM6CiAgICAgICAgICAgICBpZiBvYmogPj0gMDoKICAgICAgICAgICAgICAgICBpZiBvYmogPD0gMHhmZjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQxICsgYnl0ZXMoW29ial0pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVDEgKyBwYWNrKCI8QiIsIG9iaikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGlmIG9iaiA8PSAweGZmZmY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UMiArIGJ5dGVzKFtvYmomMHhmZiwgb2JqPj44XSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UMiArIHBhY2soIjxIIiwgb2JqKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAjIE5leHQgY2hlY2sgZm9yIDQtYnl0ZSBzaWduZWQgaW50czoKLSAgICAgICAgICAgIGhpZ2hfYml0cyA9IG9iaiA+PiAzMSAgIyBub3RlIHRoYXQgUHl0aG9uIHNoaWZ0IHNpZ24tZXh0ZW5kcwotICAgICAgICAgICAgaWYgaGlnaF9iaXRzID09IDAgb3IgaGlnaF9iaXRzID09IC0xOgotICAgICAgICAgICAgICAgICMgQWxsIGhpZ2ggYml0cyBhcmUgY29waWVzIG9mIGJpdCAyKiozMSwgc28gdGhlIHZhbHVlCi0gICAgICAgICAgICAgICAgIyBmaXRzIGluIGEgNC1ieXRlIHNpZ25lZCBpbnQuCisgICAgICAgICAgICBpZiAtMHg4MDAwMDAwMCA8PSBvYmogPD0gMHg3ZmZmZmZmZjoKICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVCArIHBhY2soIjxpIiwgb2JqKSkKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyOgogICAgICAgICAgICAgZW5jb2RlZCA9IGVuY29kZV9sb25nKG9iaikKICAgICAgICAgICAgIG4gPSBsZW4oZW5jb2RlZCkKICAgICAgICAgICAgIGlmIG4gPCAyNTY6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZShMT05HMSArIGJ5dGVzKFtuXSkgKyBlbmNvZGVkKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoTE9ORzEgKyBwYWNrKCI8QiIsIG4pICsgZW5jb2RlZCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShMT05HNCArIHBhY2soIjxpIiwgbikgKyBlbmNvZGVkKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYud3JpdGUoTE9ORyArIHJlcHIob2JqKS5lbmNvZGUoImFzY2lpIikgKyBiJ0xcbicpCiAgICAgZGlzcGF0Y2hbaW50XSA9IHNhdmVfbG9uZwogCi0gICAgZGVmIHNhdmVfZmxvYXQoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9mbG9hdChzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgIHNlbGYud3JpdGUoQklORkxPQVQgKyBwYWNrKCc+ZCcsIG9iaikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLndyaXRlKEZMT0FUICsgcmVwcihvYmopLmVuY29kZSgiYXNjaWkiKSArIGInXG4nKQogICAgIGRpc3BhdGNoW2Zsb2F0XSA9IHNhdmVfZmxvYXQKIAotICAgIGRlZiBzYXZlX2J5dGVzKHNlbGYsIG9iaiwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfYnl0ZXMoc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5wcm90byA8IDM6Ci0gICAgICAgICAgICBpZiBsZW4ob2JqKSA9PSAwOgorICAgICAgICAgICAgaWYgbm90IG9iajogIyBieXRlcyBvYmplY3QgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBzZWxmLnNhdmVfcmVkdWNlKGJ5dGVzLCAoKSwgb2JqPW9iaikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5zYXZlX3JlZHVjZShjb2RlY3MuZW5jb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cihvYmosICdsYXRpbjEnKSwgJ2xhdGluMScpLCBvYmo9b2JqKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIG4gPSBsZW4ob2JqKQotICAgICAgICBpZiBuIDwgMjU2OgotICAgICAgICAgICAgc2VsZi53cml0ZShTSE9SVF9CSU5CWVRFUyArIGJ5dGVzKFtuXSkgKyBieXRlcyhvYmopKQorICAgICAgICBpZiBuIDw9IDB4ZmY6CisgICAgICAgICAgICBzZWxmLndyaXRlKFNIT1JUX0JJTkJZVEVTICsgcGFjaygiPEIiLCBuKSArIG9iaikKKyAgICAgICAgZWxpZiBuID4gMHhmZmZmZmZmZiBhbmQgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgc2VsZi53cml0ZShCSU5CWVRFUzggKyBwYWNrKCI8USIsIG4pICsgb2JqKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi53cml0ZShCSU5CWVRFUyArIHBhY2soIjxJIiwgbikgKyBieXRlcyhvYmopKQorICAgICAgICAgICAgc2VsZi53cml0ZShCSU5CWVRFUyArIHBhY2soIjxJIiwgbikgKyBvYmopCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAgICAgZGlzcGF0Y2hbYnl0ZXNdID0gc2F2ZV9ieXRlcwogCi0gICAgZGVmIHNhdmVfc3RyKHNlbGYsIG9iaiwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfc3RyKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgZW5jb2RlZCA9IG9iai5lbmNvZGUoJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKQogICAgICAgICAgICAgbiA9IGxlbihlbmNvZGVkKQotICAgICAgICAgICAgc2VsZi53cml0ZShCSU5VTklDT0RFICsgcGFjaygiPEkiLCBuKSArIGVuY29kZWQpCisgICAgICAgICAgICBpZiBuIDw9IDB4ZmYgYW5kIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKFNIT1JUX0JJTlVOSUNPREUgKyBwYWNrKCI8QiIsIG4pICsgZW5jb2RlZCkKKyAgICAgICAgICAgIGVsaWYgbiA+IDB4ZmZmZmZmZmYgYW5kIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTlVOSUNPREU4ICsgcGFjaygiPFEiLCBuKSArIGVuY29kZWQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOVU5JQ09ERSArIHBhY2soIjxJIiwgbikgKyBlbmNvZGVkKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb2JqID0gb2JqLnJlcGxhY2UoIlxcIiwgIlxcdTAwNWMiKQogICAgICAgICAgICAgb2JqID0gb2JqLnJlcGxhY2UoIlxuIiwgIlxcdTAwMGEiKQotICAgICAgICAgICAgc2VsZi53cml0ZShVTklDT0RFICsgYnl0ZXMob2JqLmVuY29kZSgncmF3LXVuaWNvZGUtZXNjYXBlJykpICsKKyAgICAgICAgICAgIHNlbGYud3JpdGUoVU5JQ09ERSArIG9iai5lbmNvZGUoJ3Jhdy11bmljb2RlLWVzY2FwZScpICsKICAgICAgICAgICAgICAgICAgICAgICAgYidcbicpCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAgICAgZGlzcGF0Y2hbc3RyXSA9IHNhdmVfc3RyCiAKICAgICBkZWYgc2F2ZV90dXBsZShzZWxmLCBvYmopOgotICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKLSAgICAgICAgcHJvdG8gPSBzZWxmLnByb3RvCi0KLSAgICAgICAgbiA9IGxlbihvYmopCi0gICAgICAgIGlmIG4gPT0gMDoKLSAgICAgICAgICAgIGlmIHByb3RvOgotICAgICAgICAgICAgICAgIHdyaXRlKEVNUFRZX1RVUExFKQorICAgICAgICBpZiBub3Qgb2JqOiAjIHR1cGxlIGlzIGVtcHR5CisgICAgICAgICAgICBpZiBzZWxmLmJpbjoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEVNUFRZX1RVUExFKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB3cml0ZShNQVJLICsgVFVQTEUpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShNQVJLICsgVFVQTEUpCiAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICBuID0gbGVuKG9iaikKICAgICAgICAgc2F2ZSA9IHNlbGYuc2F2ZQogICAgICAgICBtZW1vID0gc2VsZi5tZW1vCi0gICAgICAgIGlmIG4gPD0gMyBhbmQgcHJvdG8gPj0gMjoKKyAgICAgICAgaWYgbiA8PSAzIGFuZCBzZWxmLnByb3RvID49IDI6CiAgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBvYmo6CiAgICAgICAgICAgICAgICAgc2F2ZShlbGVtZW50KQogICAgICAgICAgICAgIyBTdWJ0bGUuICBTYW1lIGFzIGluIHRoZSBiaWcgY29tbWVudCBiZWxvdy4KICAgICAgICAgICAgIGlmIGlkKG9iaikgaW4gbWVtbzoKICAgICAgICAgICAgICAgICBnZXQgPSBzZWxmLmdldChtZW1vW2lkKG9iaildWzBdKQotICAgICAgICAgICAgICAgIHdyaXRlKFBPUCAqIG4gKyBnZXQpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShQT1AgKiBuICsgZ2V0KQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB3cml0ZShfdHVwbGVzaXplMmNvZGVbbl0pCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShfdHVwbGVzaXplMmNvZGVbbl0pCiAgICAgICAgICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgcHJvdG8gMCBvciBwcm90byAxIGFuZCB0dXBsZSBpc24ndCBlbXB0eSwgb3IgcHJvdG8gPiAxIGFuZCB0dXBsZQogICAgICAgICAjIGhhcyBtb3JlIHRoYW4gMyBlbGVtZW50cy4KKyAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCiAgICAgICAgIHdyaXRlKE1BUkspCiAgICAgICAgIGZvciBlbGVtZW50IGluIG9iajoKICAgICAgICAgICAgIHNhdmUoZWxlbWVudCkKQEAgLTU2MSwyNSArNzUwLDIzIEBACiAgICAgICAgICAgICAjIGNvdWxkIGhhdmUgYmVlbiBkb25lIGluIHRoZSAiZm9yIGVsZW1lbnQiIGxvb3AgaW5zdGVhZCwgYnV0CiAgICAgICAgICAgICAjIHJlY3Vyc2l2ZSB0dXBsZXMgYXJlIGEgcmFyZSB0aGluZy4KICAgICAgICAgICAgIGdldCA9IHNlbGYuZ2V0KG1lbW9baWQob2JqKV1bMF0pCi0gICAgICAgICAgICBpZiBwcm90bzoKKyAgICAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgICAgIHdyaXRlKFBPUF9NQVJLICsgZ2V0KQogICAgICAgICAgICAgZWxzZTogICAjIHByb3RvIDAgLS0gUE9QX01BUksgbm90IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgIHdyaXRlKFBPUCAqIChuKzEpICsgZ2V0KQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBObyByZWN1cnNpb24uCi0gICAgICAgIHNlbGYud3JpdGUoVFVQTEUpCisgICAgICAgIHdyaXRlKFRVUExFKQogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogCiAgICAgZGlzcGF0Y2hbdHVwbGVdID0gc2F2ZV90dXBsZQogCiAgICAgZGVmIHNhdmVfbGlzdChzZWxmLCBvYmopOgotICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKLQogICAgICAgICBpZiBzZWxmLmJpbjoKLSAgICAgICAgICAgIHdyaXRlKEVNUFRZX0xJU1QpCisgICAgICAgICAgICBzZWxmLndyaXRlKEVNUFRZX0xJU1QpCiAgICAgICAgIGVsc2U6ICAgIyBwcm90byAwIC0tIGNhbid0IHVzZSBFTVBUWV9MSVNUCi0gICAgICAgICAgICB3cml0ZShNQVJLICsgTElTVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoTUFSSyArIExJU1QpCiAKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICAgICAgc2VsZi5fYmF0Y2hfYXBwZW5kcyhvYmopCkBAIC01OTksMTcgKzc4Niw5IEBACiAgICAgICAgICAgICAgICAgd3JpdGUoQVBQRU5EKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgaXRlbXMgPSBpdGVyKGl0ZW1zKQotICAgICAgICByID0gcmFuZ2Uoc2VsZi5fQkFUQ0hTSVpFKQotICAgICAgICB3aGlsZSBpdGVtcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRtcCA9IFtdCi0gICAgICAgICAgICBmb3IgaSBpbiByOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgeCA9IG5leHQoaXRlbXMpCi0gICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQoeCkKLSAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGl0ID0gaXRlcihpdGVtcykKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRtcCA9IGxpc3QoaXNsaWNlKGl0LCBzZWxmLl9CQVRDSFNJWkUpKQogICAgICAgICAgICAgbiA9IGxlbih0bXApCiAgICAgICAgICAgICBpZiBuID4gMToKICAgICAgICAgICAgICAgICB3cml0ZShNQVJLKQpAQCAtNjIwLDE0ICs3OTksMTQgQEAKICAgICAgICAgICAgICAgICBzYXZlKHRtcFswXSkKICAgICAgICAgICAgICAgICB3cml0ZShBUFBFTkQpCiAgICAgICAgICAgICAjIGVsc2UgdG1wIGlzIGVtcHR5LCBhbmQgd2UncmUgZG9uZQorICAgICAgICAgICAgaWYgbiA8IHNlbGYuX0JBVENIU0laRToKKyAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgIGRlZiBzYXZlX2RpY3Qoc2VsZiwgb2JqKToKLSAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCi0KICAgICAgICAgaWYgc2VsZi5iaW46Ci0gICAgICAgICAgICB3cml0ZShFTVBUWV9ESUNUKQorICAgICAgICAgICAgc2VsZi53cml0ZShFTVBUWV9ESUNUKQogICAgICAgICBlbHNlOiAgICMgcHJvdG8gMCAtLSBjYW4ndCB1c2UgRU1QVFlfRElDVAotICAgICAgICAgICAgd3JpdGUoTUFSSyArIERJQ1QpCisgICAgICAgICAgICBzZWxmLndyaXRlKE1BUksgKyBESUNUKQogCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAgICAgICAgIHNlbGYuX2JhdGNoX3NldGl0ZW1zKG9iai5pdGVtcygpKQpAQCAtNjQ4LDE2ICs4MjcsOSBAQAogICAgICAgICAgICAgICAgIHdyaXRlKFNFVElURU0pCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBpdGVtcyA9IGl0ZXIoaXRlbXMpCi0gICAgICAgIHIgPSByYW5nZShzZWxmLl9CQVRDSFNJWkUpCi0gICAgICAgIHdoaWxlIGl0ZW1zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdG1wID0gW10KLSAgICAgICAgICAgIGZvciBpIGluIHI6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKG5leHQoaXRlbXMpKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaXQgPSBpdGVyKGl0ZW1zKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdG1wID0gbGlzdChpc2xpY2UoaXQsIHNlbGYuX0JBVENIU0laRSkpCiAgICAgICAgICAgICBuID0gbGVuKHRtcCkKICAgICAgICAgICAgIGlmIG4gPiAxOgogICAgICAgICAgICAgICAgIHdyaXRlKE1BUkspCkBAIC02NzEsNTUgKzg0MywxMDkgQEAKICAgICAgICAgICAgICAgICBzYXZlKHYpCiAgICAgICAgICAgICAgICAgd3JpdGUoU0VUSVRFTSkKICAgICAgICAgICAgICMgZWxzZSB0bXAgaXMgZW1wdHksIGFuZCB3ZSdyZSBkb25lCisgICAgICAgICAgICBpZiBuIDwgc2VsZi5fQkFUQ0hTSVpFOgorICAgICAgICAgICAgICAgIHJldHVybgogCi0gICAgZGVmIHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgbmFtZT1Ob25lLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9zZXQoc2VsZiwgb2JqKToKKyAgICAgICAgc2F2ZSA9IHNlbGYuc2F2ZQorICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKKworICAgICAgICBpZiBzZWxmLnByb3RvIDwgNDoKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9yZWR1Y2Uoc2V0LCAobGlzdChvYmopLCksIG9iaj1vYmopCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3cml0ZShFTVBUWV9TRVQpCisgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCisKKyAgICAgICAgaXQgPSBpdGVyKG9iaikKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGJhdGNoID0gbGlzdChpc2xpY2UoaXQsIHNlbGYuX0JBVENIU0laRSkpCisgICAgICAgICAgICBuID0gbGVuKGJhdGNoKQorICAgICAgICAgICAgaWYgbiA+IDA6CisgICAgICAgICAgICAgICAgd3JpdGUoTUFSSykKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBiYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgc2F2ZShpdGVtKQorICAgICAgICAgICAgICAgIHdyaXRlKEFERElURU1TKQorICAgICAgICAgICAgaWYgbiA8IHNlbGYuX0JBVENIU0laRToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICBkaXNwYXRjaFtzZXRdID0gc2F2ZV9zZXQKKworICAgIGRlZiBzYXZlX2Zyb3plbnNldChzZWxmLCBvYmopOgorICAgICAgICBzYXZlID0gc2VsZi5zYXZlCisgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQorCisgICAgICAgIGlmIHNlbGYucHJvdG8gPCA0OgorICAgICAgICAgICAgc2VsZi5zYXZlX3JlZHVjZShmcm96ZW5zZXQsIChsaXN0KG9iaiksKSwgb2JqPW9iaikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdyaXRlKE1BUkspCisgICAgICAgIGZvciBpdGVtIGluIG9iajoKKyAgICAgICAgICAgIHNhdmUoaXRlbSkKKworICAgICAgICBpZiBpZChvYmopIGluIHNlbGYubWVtbzoKKyAgICAgICAgICAgICMgSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSBtZW1vLCB0aGlzIG1lYW5zIGl0IGlzCisgICAgICAgICAgICAjIHJlY3Vyc2l2ZS4gSW4gdGhpcyBjYXNlLCB0aHJvdyBhd2F5IGV2ZXJ5dGhpbmcgd2UgcHV0IG9uIHRoZQorICAgICAgICAgICAgIyBzdGFjaywgYW5kIGZldGNoIHRoZSBvYmplY3QgYmFjayBmcm9tIHRoZSBtZW1vLgorICAgICAgICAgICAgd3JpdGUoUE9QX01BUksgKyBzZWxmLmdldChzZWxmLm1lbW9baWQob2JqKV1bMF0pKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd3JpdGUoRlJPWkVOU0VUKQorICAgICAgICBzZWxmLm1lbW9pemUob2JqKQorICAgIGRpc3BhdGNoW2Zyb3plbnNldF0gPSBzYXZlX2Zyb3plbnNldAorCisgICAgZGVmIHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgbmFtZT1Ob25lKToKICAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCiAgICAgICAgIG1lbW8gPSBzZWxmLm1lbW8KIAorICAgICAgICBpZiBuYW1lIGlzIE5vbmUgYW5kIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIG5hbWUgPSBnZXRhdHRyKG9iaiwgJ19fcXVhbG5hbWVfXycsIE5vbmUpCiAgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKICAgICAgICAgICAgIG5hbWUgPSBvYmouX19uYW1lX18KIAotICAgICAgICBtb2R1bGUgPSBnZXRhdHRyKG9iaiwgIl9fbW9kdWxlX18iLCBOb25lKQotICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKLSAgICAgICAgICAgIG1vZHVsZSA9IHdoaWNobW9kdWxlKG9iaiwgbmFtZSkKLQorICAgICAgICBtb2R1bGVfbmFtZSA9IHdoaWNobW9kdWxlKG9iaiwgbmFtZSwgYWxsb3dfcXVhbG5hbWU9c2VsZi5wcm90byA+PSA0KQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZSwgbGV2ZWw9MCkKLSAgICAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzW21vZHVsZV0KLSAgICAgICAgICAgIGtsYXNzID0gZ2V0YXR0cihtb2QsIG5hbWUpCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lLCBsZXZlbD0wKQorICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCisgICAgICAgICAgICBvYmoyID0gX2dldGF0dHJpYnV0ZShtb2R1bGUsIG5hbWUsIGFsbG93X3F1YWxuYW1lPXNlbGYucHJvdG8gPj0gNCkKICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgS2V5RXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoCiAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlcjogaXQncyBub3QgZm91bmQgYXMgJXMuJXMiICUKLSAgICAgICAgICAgICAgICAob2JqLCBtb2R1bGUsIG5hbWUpKQorICAgICAgICAgICAgICAgIChvYmosIG1vZHVsZV9uYW1lLCBuYW1lKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGtsYXNzIGlzIG5vdCBvYmo6CisgICAgICAgICAgICBpZiBvYmoyIGlzIG5vdCBvYmo6CiAgICAgICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigKICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlcjogaXQncyBub3QgdGhlIHNhbWUgb2JqZWN0IGFzICVzLiVzIiAlCi0gICAgICAgICAgICAgICAgICAgIChvYmosIG1vZHVsZSwgbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIChvYmosIG1vZHVsZV9uYW1lLCBuYW1lKSkKIAogICAgICAgICBpZiBzZWxmLnByb3RvID49IDI6Ci0gICAgICAgICAgICBjb2RlID0gX2V4dGVuc2lvbl9yZWdpc3RyeS5nZXQoKG1vZHVsZSwgbmFtZSkpCisgICAgICAgICAgICBjb2RlID0gX2V4dGVuc2lvbl9yZWdpc3RyeS5nZXQoKG1vZHVsZV9uYW1lLCBuYW1lKSkKICAgICAgICAgICAgIGlmIGNvZGU6CiAgICAgICAgICAgICAgICAgYXNzZXJ0IGNvZGUgPiAwCiAgICAgICAgICAgICAgICAgaWYgY29kZSA8PSAweGZmOgotICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQxICsgYnl0ZXMoW2NvZGVdKSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUMSArIHBhY2soIjxCIiwgY29kZSkpCiAgICAgICAgICAgICAgICAgZWxpZiBjb2RlIDw9IDB4ZmZmZjoKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUMiArIGJ5dGVzKFtjb2RlJjB4ZmYsIGNvZGU+PjhdKSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUMiArIHBhY2soIjxIIiwgY29kZSkpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUNCArIHBhY2soIjxpIiwgY29kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICMgTm9uLUFTQ0lJIGlkZW50aWZpZXJzIGFyZSBzdXBwb3J0ZWQgb25seSB3aXRoIHByb3RvY29scyA+PSAzLgotICAgICAgICBpZiBzZWxmLnByb3RvID49IDM6Ci0gICAgICAgICAgICB3cml0ZShHTE9CQUwgKyBieXRlcyhtb2R1bGUsICJ1dGYtOCIpICsgYidcbicgKworICAgICAgICBpZiBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICBzZWxmLnNhdmUobW9kdWxlX25hbWUpCisgICAgICAgICAgICBzZWxmLnNhdmUobmFtZSkKKyAgICAgICAgICAgIHdyaXRlKFNUQUNLX0dMT0JBTCkKKyAgICAgICAgZWxpZiBzZWxmLnByb3RvID49IDM6CisgICAgICAgICAgICB3cml0ZShHTE9CQUwgKyBieXRlcyhtb2R1bGVfbmFtZSwgInV0Zi04IikgKyBiJ1xuJyArCiAgICAgICAgICAgICAgICAgICBieXRlcyhuYW1lLCAidXRmLTgiKSArIGInXG4nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgc2VsZi5maXhfaW1wb3J0czoKLSAgICAgICAgICAgICAgICBpZiAobW9kdWxlLCBuYW1lKSBpbiBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORzoKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCBuYW1lID0gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkdbKG1vZHVsZSwgbmFtZSldCi0gICAgICAgICAgICAgICAgaWYgbW9kdWxlIGluIF9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkc6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkdbbW9kdWxlXQorICAgICAgICAgICAgICAgIHJfbmFtZV9tYXBwaW5nID0gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcKKyAgICAgICAgICAgICAgICByX2ltcG9ydF9tYXBwaW5nID0gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElORworICAgICAgICAgICAgICAgIGlmIChtb2R1bGVfbmFtZSwgbmFtZSkgaW4gcl9uYW1lX21hcHBpbmc6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLCBuYW1lID0gcl9uYW1lX21hcHBpbmdbKG1vZHVsZV9uYW1lLCBuYW1lKV0KKyAgICAgICAgICAgICAgICBpZiBtb2R1bGVfbmFtZSBpbiByX2ltcG9ydF9tYXBwaW5nOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSA9IHJfaW1wb3J0X21hcHBpbmdbbW9kdWxlX25hbWVdCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgd3JpdGUoR0xPQkFMICsgYnl0ZXMobW9kdWxlLCAiYXNjaWkiKSArIGInXG4nICsKKyAgICAgICAgICAgICAgICB3cml0ZShHTE9CQUwgKyBieXRlcyhtb2R1bGVfbmFtZSwgImFzY2lpIikgKyBiJ1xuJyArCiAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMobmFtZSwgImFzY2lpIikgKyBiJ1xuJykKICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CiAgICAgICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigKQEAgLTczOCw1OCArOTY0LDggQEAKICAgICAgICAgcmV0dXJuIHNlbGYuc2F2ZV9nbG9iYWwob2JqKQogCiAgICAgZGlzcGF0Y2hbRnVuY3Rpb25UeXBlXSA9IHNhdmVfZ2xvYmFsCi0gICAgZGlzcGF0Y2hbQnVpbHRpbkZ1bmN0aW9uVHlwZV0gPSBzYXZlX2dsb2JhbAogICAgIGRpc3BhdGNoW3R5cGVdID0gc2F2ZV90eXBlCiAKLSMgUGlja2xpbmcgaGVscGVycwotCi1kZWYgX2tlZXBfYWxpdmUoeCwgbWVtbyk6Ci0gICAgIiIiS2VlcHMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCB4IGluIHRoZSBtZW1vLgotCi0gICAgQmVjYXVzZSB3ZSByZW1lbWJlciBvYmplY3RzIGJ5IHRoZWlyIGlkLCB3ZSBoYXZlCi0gICAgdG8gYXNzdXJlIHRoYXQgcG9zc2libHkgdGVtcG9yYXJ5IG9iamVjdHMgYXJlIGtlcHQKLSAgICBhbGl2ZSBieSByZWZlcmVuY2luZyB0aGVtLgotICAgIFdlIHN0b3JlIGEgcmVmZXJlbmNlIGF0IHRoZSBpZCBvZiB0aGUgbWVtbywgd2hpY2ggc2hvdWxkCi0gICAgbm9ybWFsbHkgbm90IGJlIHVzZWQgdW5sZXNzIHNvbWVvbmUgdHJpZXMgdG8gZGVlcGNvcHkKLSAgICB0aGUgbWVtbyBpdHNlbGYuLi4KLSAgICAiIiIKLSAgICB0cnk6Ci0gICAgICAgIG1lbW9baWQobWVtbyldLmFwcGVuZCh4KQotICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgIyBhaGEsIHRoaXMgaXMgdGhlIGZpcnN0IG9uZSA6LSkKLSAgICAgICAgbWVtb1tpZChtZW1vKV09W3hdCi0KLQotIyBBIGNhY2hlIGZvciB3aGljaG1vZHVsZSgpLCBtYXBwaW5nIGEgZnVuY3Rpb24gb2JqZWN0IHRvIHRoZSBuYW1lIG9mCi0jIHRoZSBtb2R1bGUgaW4gd2hpY2ggdGhlIGZ1bmN0aW9uIHdhcyBmb3VuZC4KLQotY2xhc3NtYXAgPSB7fSAjIGNhbGxlZCBjbGFzc21hcCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLQotZGVmIHdoaWNobW9kdWxlKGZ1bmMsIGZ1bmNuYW1lKToKLSAgICAiIiJGaWd1cmUgb3V0IHRoZSBtb2R1bGUgaW4gd2hpY2ggYSBmdW5jdGlvbiBvY2N1cnMuCi0KLSAgICBTZWFyY2ggc3lzLm1vZHVsZXMgZm9yIHRoZSBtb2R1bGUuCi0gICAgQ2FjaGUgaW4gY2xhc3NtYXAuCi0gICAgUmV0dXJuIGEgbW9kdWxlIG5hbWUuCi0gICAgSWYgdGhlIGZ1bmN0aW9uIGNhbm5vdCBiZSBmb3VuZCwgcmV0dXJuICJfX21haW5fXyIuCi0gICAgIiIiCi0gICAgIyBQeXRob24gZnVuY3Rpb25zIHNob3VsZCBhbHdheXMgZ2V0IGFuIF9fbW9kdWxlX18gZnJvbSB0aGVpciBnbG9iYWxzLgotICAgIG1vZCA9IGdldGF0dHIoZnVuYywgIl9fbW9kdWxlX18iLCBOb25lKQotICAgIGlmIG1vZCBpcyBub3QgTm9uZToKLSAgICAgICAgcmV0dXJuIG1vZAotICAgIGlmIGZ1bmMgaW4gY2xhc3NtYXA6Ci0gICAgICAgIHJldHVybiBjbGFzc21hcFtmdW5jXQotCi0gICAgZm9yIG5hbWUsIG1vZHVsZSBpbiBsaXN0KHN5cy5tb2R1bGVzLml0ZW1zKCkpOgotICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRpbnVlICMgc2tpcCBkdW1teSBwYWNrYWdlIGVudHJpZXMKLSAgICAgICAgaWYgbmFtZSAhPSAnX19tYWluX18nIGFuZCBnZXRhdHRyKG1vZHVsZSwgZnVuY25hbWUsIE5vbmUpIGlzIGZ1bmM6Ci0gICAgICAgICAgICBicmVhawotICAgIGVsc2U6Ci0gICAgICAgIG5hbWUgPSAnX19tYWluX18nCi0gICAgY2xhc3NtYXBbZnVuY10gPSBuYW1lCi0gICAgcmV0dXJuIG5hbWUKLQogCiAjIFVucGlja2xpbmcgbWFjaGluZXJ5CiAKQEAgLTc5OSw4ICs5NzUsMTQgQEAKICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKToKICAgICAgICAgIiIiVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciByZWFkaW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLgogCi0gICAgICAgIFRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KLSAgICAgICAgcHJvdG8gYXJndW1lbnQgaXMgbmVlZGVkLgorICAgICAgICBUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvCisgICAgICAgIG5vIHByb3RvIGFyZ3VtZW50IGlzIG5lZWRlZC4KKworICAgICAgICBUaGUgYXJndW1lbnQgKmZpbGUqIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQKKyAgICAgICAgdGFrZXMgYW4gaW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdCByZXF1aXJlcworICAgICAgICBubyBhcmd1bWVudHMuICBCb3RoIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqCisgICAgICAgIGNhbiBiZSBhIGJpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHJlYWRpbmcsIGEgaW8uQnl0ZXNJTworICAgICAgICBvYmplY3QsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuCiAKICAgICAgICAgVGhlIGZpbGUtbGlrZSBvYmplY3QgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QKICAgICAgICAgdGhhdCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0CkBAIC04MDksMTYgKzk5MSwxNyBAQAogICAgICAgICByZWFkaW5nLCBhIEJ5dGVzSU8gb2JqZWN0LCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0CiAgICAgICAgIG1lZXRzIHRoaXMgaW50ZXJmYWNlLgogCi0gICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiwKLSAgICAgICAgd2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbQotICAgICAgICBnZW5lcmF0ZWQgYnkgUHl0aG9uIDIueC4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvCi0gICAgICAgIG1hcCB0aGUgb2xkIFB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGUKLSAgICAgICAgKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcKLSAgICAgICAgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZAotICAgICAgICAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorICAgICAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQKKyAgICAgICAgKmVycm9ycyosIHdoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yCisgICAgICAgIHBpY2tsZSBzdHJlYW0gZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLAorICAgICAgICBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcworICAgICAgICB1c2VkIGluIFB5dGhvbiAzLiAgVGhlICplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdworICAgICAgICB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyOyB0aGVzZQorICAgICAgICBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuICplbmNvZGluZyogY2FuIGJlCisgICAgICAgICdieXRlcycgdG8gcmVhZCB0aGVzZXMgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5yZWFkbGluZSA9IGZpbGUucmVhZGxpbmUKLSAgICAgICAgc2VsZi5yZWFkID0gZmlsZS5yZWFkCisgICAgICAgIHNlbGYuX2ZpbGVfcmVhZGxpbmUgPSBmaWxlLnJlYWRsaW5lCisgICAgICAgIHNlbGYuX2ZpbGVfcmVhZCA9IGZpbGUucmVhZAogICAgICAgICBzZWxmLm1lbW8gPSB7fQogICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKICAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKQEAgLTgzMiwxNiArMTAxNSwyMCBAQAogICAgICAgICAiIiIKICAgICAgICAgIyBDaGVjayB3aGV0aGVyIFVucGlja2xlciB3YXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBUaGlzIGlzCiAgICAgICAgICMgb25seSBuZWVkZWQgdG8gbWltaWMgdGhlIGJlaGF2aW9yIG9mIF9waWNrbGUuVW5waWNrbGVyLmR1bXAoKS4KLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgInJlYWQiKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl9maWxlX3JlYWQiKToKICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiVW5waWNrbGVyLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQgYnkgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy5fX2luaXRfXygpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywpKQorICAgICAgICBzZWxmLl91bmZyYW1lciA9IF9VbmZyYW1lcihzZWxmLl9maWxlX3JlYWQsIHNlbGYuX2ZpbGVfcmVhZGxpbmUpCisgICAgICAgIHNlbGYucmVhZCA9IHNlbGYuX3VuZnJhbWVyLnJlYWQKKyAgICAgICAgc2VsZi5yZWFkbGluZSA9IHNlbGYuX3VuZnJhbWVyLnJlYWRsaW5lCiAgICAgICAgIHNlbGYubWFyayA9IG9iamVjdCgpICMgYW55IG5ldyB1bmlxdWUgb2JqZWN0CiAgICAgICAgIHNlbGYuc3RhY2sgPSBbXQogICAgICAgICBzZWxmLmFwcGVuZCA9IHNlbGYuc3RhY2suYXBwZW5kCisgICAgICAgIHNlbGYucHJvdG8gPSAwCiAgICAgICAgIHJlYWQgPSBzZWxmLnJlYWQKICAgICAgICAgZGlzcGF0Y2ggPSBzZWxmLmRpc3BhdGNoCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIGtleSA9IHJlYWQoMSkKICAgICAgICAgICAgICAgICBpZiBub3Qga2V5OgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgpAQCAtODcxLDEyICsxMDU4LDE5IEBACiAgICAgZGlzcGF0Y2ggPSB7fQogCiAgICAgZGVmIGxvYWRfcHJvdG8oc2VsZik6Ci0gICAgICAgIHByb3RvID0gb3JkKHNlbGYucmVhZCgxKSkKKyAgICAgICAgcHJvdG8gPSBzZWxmLnJlYWQoMSlbMF0KICAgICAgICAgaWYgbm90IDAgPD0gcHJvdG8gPD0gSElHSEVTVF9QUk9UT0NPTDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbDogJWQiICUgcHJvdG8pCiAgICAgICAgIHNlbGYucHJvdG8gPSBwcm90bwogICAgIGRpc3BhdGNoW1BST1RPWzBdXSA9IGxvYWRfcHJvdG8KIAorICAgIGRlZiBsb2FkX2ZyYW1lKHNlbGYpOgorICAgICAgICBmcmFtZV9zaXplLCA9IHVucGFjaygnPFEnLCBzZWxmLnJlYWQoOCkpCisgICAgICAgIGlmIGZyYW1lX3NpemUgPiBzeXMubWF4c2l6ZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZyYW1lIHNpemUgPiBzeXMubWF4c2l6ZTogJWQiICUgZnJhbWVfc2l6ZSkKKyAgICAgICAgc2VsZi5fdW5mcmFtZXIubG9hZF9mcmFtZShmcmFtZV9zaXplKQorICAgIGRpc3BhdGNoW0ZSQU1FWzBdXSA9IGxvYWRfZnJhbWUKKwogICAgIGRlZiBsb2FkX3BlcnNpZChzZWxmKToKICAgICAgICAgcGlkID0gc2VsZi5yZWFkbGluZSgpWzotMV0uZGVjb2RlKCJhc2NpaSIpCiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucGVyc2lzdGVudF9sb2FkKHBpZCkpCkBAIC05MDYsNDMgKzExMDAsNDAgQEAKICAgICAgICAgZWxpZiBkYXRhID09IFRSVUVbMTpdOgogICAgICAgICAgICAgdmFsID0gVHJ1ZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZhbCA9IGludChkYXRhLCAwKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgdmFsID0gaW50KGRhdGEsIDApCisgICAgICAgICAgICB2YWwgPSBpbnQoZGF0YSwgMCkKICAgICAgICAgc2VsZi5hcHBlbmQodmFsKQogICAgIGRpc3BhdGNoW0lOVFswXV0gPSBsb2FkX2ludAogCiAgICAgZGVmIGxvYWRfYmluaW50KHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkpCisgICAgICAgIHNlbGYuYXBwZW5kKHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVFswXV0gPSBsb2FkX2JpbmludAogCiAgICAgZGVmIGxvYWRfYmluaW50MShzZWxmKToKLSAgICAgICAgc2VsZi5hcHBlbmQob3JkKHNlbGYucmVhZCgxKSkpCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucmVhZCgxKVswXSkKICAgICBkaXNwYXRjaFtCSU5JTlQxWzBdXSA9IGxvYWRfYmluaW50MQogCiAgICAgZGVmIGxvYWRfYmluaW50MihzZWxmKToKLSAgICAgICAgc2VsZi5hcHBlbmQobWxvYWRzKGInaScgKyBzZWxmLnJlYWQoMikgKyBiJ1wwMDBcMDAwJykpCisgICAgICAgIHNlbGYuYXBwZW5kKHVucGFjaygnPEgnLCBzZWxmLnJlYWQoMikpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVDJbMF1dID0gbG9hZF9iaW5pbnQyCiAKICAgICBkZWYgbG9hZF9sb25nKHNlbGYpOgotICAgICAgICB2YWwgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgaWYgdmFsIGFuZCB2YWxbLTFdID09ICdMJzoKKyAgICAgICAgdmFsID0gc2VsZi5yZWFkbGluZSgpWzotMV0KKyAgICAgICAgaWYgdmFsIGFuZCB2YWxbLTFdID09IGInTCdbMF06CiAgICAgICAgICAgICB2YWwgPSB2YWxbOi0xXQogICAgICAgICBzZWxmLmFwcGVuZChpbnQodmFsLCAwKSkKICAgICBkaXNwYXRjaFtMT05HWzBdXSA9IGxvYWRfbG9uZwogCiAgICAgZGVmIGxvYWRfbG9uZzEoc2VsZik6Ci0gICAgICAgIG4gPSBvcmQoc2VsZi5yZWFkKDEpKQorICAgICAgICBuID0gc2VsZi5yZWFkKDEpWzBdCiAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobikKICAgICAgICAgc2VsZi5hcHBlbmQoZGVjb2RlX2xvbmcoZGF0YSkpCiAgICAgZGlzcGF0Y2hbTE9ORzFbMF1dID0gbG9hZF9sb25nMQogCiAgICAgZGVmIGxvYWRfbG9uZzQoc2VsZik6Ci0gICAgICAgIG4gPSBtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkKKyAgICAgICAgbiwgPSB1bnBhY2soJzxpJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBuIDwgMDoKICAgICAgICAgICAgICMgQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZSAtLSB3ZSBuZXZlciB3cml0ZSBvbmUgbGlrZSB0aGlzCi0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkxPTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkxPTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50IikKICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChuKQogICAgICAgICBzZWxmLmFwcGVuZChkZWNvZGVfbG9uZyhkYXRhKSkKICAgICBkaXNwYXRjaFtMT05HNFswXV0gPSBsb2FkX2xvbmc0CkBAIC05NTEsMzkgKzExNDIsNDMgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoZmxvYXQoc2VsZi5yZWFkbGluZSgpWzotMV0pKQogICAgIGRpc3BhdGNoW0ZMT0FUWzBdXSA9IGxvYWRfZmxvYXQKIAotICAgIGRlZiBsb2FkX2JpbmZsb2F0KHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrKToKKyAgICBkZWYgbG9hZF9iaW5mbG9hdChzZWxmKToKICAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc+ZCcsIHNlbGYucmVhZCg4KSlbMF0pCiAgICAgZGlzcGF0Y2hbQklORkxPQVRbMF1dID0gbG9hZF9iaW5mbG9hdAogCi0gICAgZGVmIGxvYWRfc3RyaW5nKHNlbGYpOgotICAgICAgICBvcmlnID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgIHJlcCA9IG9yaWdbOi0xXQotICAgICAgICBmb3IgcSBpbiAoYiciJywgYiInIik6ICMgZG91YmxlIG9yIHNpbmdsZSBxdW90ZQotICAgICAgICAgICAgaWYgcmVwLnN0YXJ0c3dpdGgocSk6Ci0gICAgICAgICAgICAgICAgaWYgbGVuKHJlcCkgPCAyIG9yIG5vdCByZXAuZW5kc3dpdGgocSk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImluc2VjdXJlIHN0cmluZyBwaWNrbGUiKQotICAgICAgICAgICAgICAgIHJlcCA9IHJlcFtsZW4ocSk6LWxlbihxKV0KLSAgICAgICAgICAgICAgICBicmVhaworICAgIGRlZiBfZGVjb2RlX3N0cmluZyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICMgVXNlZCB0byBhbGxvdyBzdHJpbmdzIGZyb20gUHl0aG9uIDIgdG8gYmUgZGVjb2RlZCBlaXRoZXIgYXMKKyAgICAgICAgIyBieXRlcyBvciBVbmljb2RlIHN0cmluZ3MuICBUaGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgd2l0aCB0aGUKKyAgICAgICAgIyBTVFJJTkcsIEJJTlNUUklORyBhbmQgU0hPUlRfQklOU1RSSU5HIG9wY29kZXMuCisgICAgICAgIGlmIHNlbGYuZW5jb2RpbmcgPT0gImJ5dGVzIjoKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW5zZWN1cmUgc3RyaW5nIHBpY2tsZTogJXIiICUgb3JpZykKLSAgICAgICAgc2VsZi5hcHBlbmQoY29kZWNzLmVzY2FwZV9kZWNvZGUocmVwKVswXQotICAgICAgICAgICAgICAgICAgICAuZGVjb2RlKHNlbGYuZW5jb2RpbmcsIHNlbGYuZXJyb3JzKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5kZWNvZGUoc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpCisKKyAgICBkZWYgbG9hZF9zdHJpbmcoc2VsZik6CisgICAgICAgIGRhdGEgPSBzZWxmLnJlYWRsaW5lKClbOi0xXQorICAgICAgICAjIFN0cmlwIG91dGVybW9zdCBxdW90ZXMKKyAgICAgICAgaWYgbGVuKGRhdGEpID49IDIgYW5kIGRhdGFbMF0gPT0gZGF0YVstMV0gYW5kIGRhdGFbMF0gaW4gYiciXCcnOgorICAgICAgICAgICAgZGF0YSA9IGRhdGFbMTotMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigidGhlIFNUUklORyBvcGNvZGUgYXJndW1lbnQgbXVzdCBiZSBxdW90ZWQiKQorICAgICAgICBzZWxmLmFwcGVuZChzZWxmLl9kZWNvZGVfc3RyaW5nKGNvZGVjcy5lc2NhcGVfZGVjb2RlKGRhdGEpWzBdKSkKICAgICBkaXNwYXRjaFtTVFJJTkdbMF1dID0gbG9hZF9zdHJpbmcKIAogICAgIGRlZiBsb2FkX2JpbnN0cmluZyhzZWxmKToKICAgICAgICAgIyBEZXByZWNhdGVkIEJJTlNUUklORyB1c2VzIHNpZ25lZCAzMi1iaXQgbGVuZ3RoCi0gICAgICAgIGxlbiA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKQorICAgICAgICBsZW4sID0gdW5wYWNrKCc8aScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgbGVuIDwgMDoKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOU1RSSU5HIHBpY2tsZSBoYXMgbmVnYXRpdmUgYnl0ZSBjb3VudCIpOworICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5TVFJJTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50IikKICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChsZW4pCi0gICAgICAgIHZhbHVlID0gc3RyKGRhdGEsIHNlbGYuZW5jb2RpbmcsIHNlbGYuZXJyb3JzKQotICAgICAgICBzZWxmLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5fZGVjb2RlX3N0cmluZyhkYXRhKSkKICAgICBkaXNwYXRjaFtCSU5TVFJJTkdbMF1dID0gbG9hZF9iaW5zdHJpbmcKIAotICAgIGRlZiBsb2FkX2JpbmJ5dGVzKHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrLCBtYXhzaXplPXN5cy5tYXhzaXplKToKKyAgICBkZWYgbG9hZF9iaW5ieXRlcyhzZWxmKToKICAgICAgICAgbGVuLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGxlbiA+IG1heHNpemU6Ci0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTkJZVEVTIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICVkIGJ5dGVzIiAlIG1heHNpemUpOworICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5CWVRFUyBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mICVkIGJ5dGVzIiAlIG1heHNpemUpCiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucmVhZChsZW4pKQogICAgIGRpc3BhdGNoW0JJTkJZVEVTWzBdXSA9IGxvYWRfYmluYnl0ZXMKIApAQCAtOTkxLDI1ICsxMTg2LDM4IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKHN0cihzZWxmLnJlYWRsaW5lKClbOi0xXSwgJ3Jhdy11bmljb2RlLWVzY2FwZScpKQogICAgIGRpc3BhdGNoW1VOSUNPREVbMF1dID0gbG9hZF91bmljb2RlCiAKLSAgICBkZWYgbG9hZF9iaW51bmljb2RlKHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrLCBtYXhzaXplPXN5cy5tYXhzaXplKToKKyAgICBkZWYgbG9hZF9iaW51bmljb2RlKHNlbGYpOgogICAgICAgICBsZW4sID0gdW5wYWNrKCc8SScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgbGVuID4gbWF4c2l6ZToKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOVU5JQ09ERSBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlZCBieXRlcyIgJSBtYXhzaXplKTsKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOVU5JQ09ERSBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mICVkIGJ5dGVzIiAlIG1heHNpemUpCiAgICAgICAgIHNlbGYuYXBwZW5kKHN0cihzZWxmLnJlYWQobGVuKSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKSkKICAgICBkaXNwYXRjaFtCSU5VTklDT0RFWzBdXSA9IGxvYWRfYmludW5pY29kZQogCisgICAgZGVmIGxvYWRfYmludW5pY29kZTgoc2VsZik6CisgICAgICAgIGxlbiwgPSB1bnBhY2soJzxRJywgc2VsZi5yZWFkKDgpKQorICAgICAgICBpZiBsZW4gPiBtYXhzaXplOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5VTklDT0RFOCBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mICVkIGJ5dGVzIiAlIG1heHNpemUpCisgICAgICAgIHNlbGYuYXBwZW5kKHN0cihzZWxmLnJlYWQobGVuKSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKSkKKyAgICBkaXNwYXRjaFtCSU5VTklDT0RFOFswXV0gPSBsb2FkX2JpbnVuaWNvZGU4CisKICAgICBkZWYgbG9hZF9zaG9ydF9iaW5zdHJpbmcoc2VsZik6Ci0gICAgICAgIGxlbiA9IG9yZChzZWxmLnJlYWQoMSkpCi0gICAgICAgIGRhdGEgPSBieXRlcyhzZWxmLnJlYWQobGVuKSkKLSAgICAgICAgdmFsdWUgPSBzdHIoZGF0YSwgc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpCi0gICAgICAgIHNlbGYuYXBwZW5kKHZhbHVlKQorICAgICAgICBsZW4gPSBzZWxmLnJlYWQoMSlbMF0KKyAgICAgICAgZGF0YSA9IHNlbGYucmVhZChsZW4pCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYuX2RlY29kZV9zdHJpbmcoZGF0YSkpCiAgICAgZGlzcGF0Y2hbU0hPUlRfQklOU1RSSU5HWzBdXSA9IGxvYWRfc2hvcnRfYmluc3RyaW5nCiAKICAgICBkZWYgbG9hZF9zaG9ydF9iaW5ieXRlcyhzZWxmKToKLSAgICAgICAgbGVuID0gb3JkKHNlbGYucmVhZCgxKSkKLSAgICAgICAgc2VsZi5hcHBlbmQoYnl0ZXMoc2VsZi5yZWFkKGxlbikpKQorICAgICAgICBsZW4gPSBzZWxmLnJlYWQoMSlbMF0KKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5yZWFkKGxlbikpCiAgICAgZGlzcGF0Y2hbU0hPUlRfQklOQllURVNbMF1dID0gbG9hZF9zaG9ydF9iaW5ieXRlcwogCisgICAgZGVmIGxvYWRfc2hvcnRfYmludW5pY29kZShzZWxmKToKKyAgICAgICAgbGVuID0gc2VsZi5yZWFkKDEpWzBdCisgICAgICAgIHNlbGYuYXBwZW5kKHN0cihzZWxmLnJlYWQobGVuKSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKSkKKyAgICBkaXNwYXRjaFtTSE9SVF9CSU5VTklDT0RFWzBdXSA9IGxvYWRfc2hvcnRfYmludW5pY29kZQorCiAgICAgZGVmIGxvYWRfdHVwbGUoc2VsZik6CiAgICAgICAgIGsgPSBzZWxmLm1hcmtlcigpCiAgICAgICAgIHNlbGYuc3RhY2tbazpdID0gW3R1cGxlKHNlbGYuc3RhY2tbaysxOl0pXQpAQCAtMTAzOSw2ICsxMjQ3LDE1IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKHt9KQogICAgIGRpc3BhdGNoW0VNUFRZX0RJQ1RbMF1dID0gbG9hZF9lbXB0eV9kaWN0aW9uYXJ5CiAKKyAgICBkZWYgbG9hZF9lbXB0eV9zZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXBwZW5kKHNldCgpKQorICAgIGRpc3BhdGNoW0VNUFRZX1NFVFswXV0gPSBsb2FkX2VtcHR5X3NldAorCisgICAgZGVmIGxvYWRfZnJvemVuc2V0KHNlbGYpOgorICAgICAgICBrID0gc2VsZi5tYXJrZXIoKQorICAgICAgICBzZWxmLnN0YWNrW2s6XSA9IFtmcm96ZW5zZXQoc2VsZi5zdGFja1trKzE6XSldCisgICAgZGlzcGF0Y2hbRlJPWkVOU0VUWzBdXSA9IGxvYWRfZnJvemVuc2V0CisKICAgICBkZWYgbG9hZF9saXN0KHNlbGYpOgogICAgICAgICBrID0gc2VsZi5tYXJrZXIoKQogICAgICAgICBzZWxmLnN0YWNrW2s6XSA9IFtzZWxmLnN0YWNrW2srMTpdXQpAQCAtMTA0NiwxMiArMTI2Myw5IEBACiAKICAgICBkZWYgbG9hZF9kaWN0KHNlbGYpOgogICAgICAgICBrID0gc2VsZi5tYXJrZXIoKQotICAgICAgICBkID0ge30KICAgICAgICAgaXRlbXMgPSBzZWxmLnN0YWNrW2srMTpdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihpdGVtcyksIDIpOgotICAgICAgICAgICAga2V5ID0gaXRlbXNbaV0KLSAgICAgICAgICAgIHZhbHVlID0gaXRlbXNbaSsxXQotICAgICAgICAgICAgZFtrZXldID0gdmFsdWUKKyAgICAgICAgZCA9IHtpdGVtc1tpXTogaXRlbXNbaSsxXQorICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihpdGVtcyksIDIpfQogICAgICAgICBzZWxmLnN0YWNrW2s6XSA9IFtkXQogICAgIGRpc3BhdGNoW0RJQ1RbMF1dID0gbG9hZF9kaWN0CiAKQEAgLTEwOTAsMTEgKzEzMDQsMTkgQEAKIAogICAgIGRlZiBsb2FkX25ld29iaihzZWxmKToKICAgICAgICAgYXJncyA9IHNlbGYuc3RhY2sucG9wKCkKLSAgICAgICAgY2xzID0gc2VsZi5zdGFja1stMV0KKyAgICAgICAgY2xzID0gc2VsZi5zdGFjay5wb3AoKQogICAgICAgICBvYmogPSBjbHMuX19uZXdfXyhjbHMsICphcmdzKQotICAgICAgICBzZWxmLnN0YWNrWy0xXSA9IG9iagorICAgICAgICBzZWxmLmFwcGVuZChvYmopCiAgICAgZGlzcGF0Y2hbTkVXT0JKWzBdXSA9IGxvYWRfbmV3b2JqCiAKKyAgICBkZWYgbG9hZF9uZXdvYmpfZXgoc2VsZik6CisgICAgICAgIGt3YXJncyA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgYXJncyA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgY2xzID0gc2VsZi5zdGFjay5wb3AoKQorICAgICAgICBvYmogPSBjbHMuX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hcHBlbmQob2JqKQorICAgIGRpc3BhdGNoW05FV09CSl9FWFswXV0gPSBsb2FkX25ld29ial9leAorCiAgICAgZGVmIGxvYWRfZ2xvYmFsKHNlbGYpOgogICAgICAgICBtb2R1bGUgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoInV0Zi04IikKICAgICAgICAgbmFtZSA9IHNlbGYucmVhZGxpbmUoKVs6LTFdLmRlY29kZSgidXRmLTgiKQpAQCAtMTEwMiwxOCArMTMyNCwyNiBAQAogICAgICAgICBzZWxmLmFwcGVuZChrbGFzcykKICAgICBkaXNwYXRjaFtHTE9CQUxbMF1dID0gbG9hZF9nbG9iYWwKIAorICAgIGRlZiBsb2FkX3N0YWNrX2dsb2JhbChzZWxmKToKKyAgICAgICAgbmFtZSA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgbW9kdWxlID0gc2VsZi5zdGFjay5wb3AoKQorICAgICAgICBpZiB0eXBlKG5hbWUpIGlzIG5vdCBzdHIgb3IgdHlwZShtb2R1bGUpIGlzIG5vdCBzdHI6CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIlNUQUNLX0dMT0JBTCByZXF1aXJlcyBzdHIiKQorICAgICAgICBzZWxmLmFwcGVuZChzZWxmLmZpbmRfY2xhc3MobW9kdWxlLCBuYW1lKSkKKyAgICBkaXNwYXRjaFtTVEFDS19HTE9CQUxbMF1dID0gbG9hZF9zdGFja19nbG9iYWwKKwogICAgIGRlZiBsb2FkX2V4dDEoc2VsZik6Ci0gICAgICAgIGNvZGUgPSBvcmQoc2VsZi5yZWFkKDEpKQorICAgICAgICBjb2RlID0gc2VsZi5yZWFkKDEpWzBdCiAgICAgICAgIHNlbGYuZ2V0X2V4dGVuc2lvbihjb2RlKQogICAgIGRpc3BhdGNoW0VYVDFbMF1dID0gbG9hZF9leHQxCiAKICAgICBkZWYgbG9hZF9leHQyKHNlbGYpOgotICAgICAgICBjb2RlID0gbWxvYWRzKGInaScgKyBzZWxmLnJlYWQoMikgKyBiJ1wwMDBcMDAwJykKKyAgICAgICAgY29kZSwgPSB1bnBhY2soJzxIJywgc2VsZi5yZWFkKDIpKQogICAgICAgICBzZWxmLmdldF9leHRlbnNpb24oY29kZSkKICAgICBkaXNwYXRjaFtFWFQyWzBdXSA9IGxvYWRfZXh0MgogCiAgICAgZGVmIGxvYWRfZXh0NChzZWxmKToKLSAgICAgICAgY29kZSA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKQorICAgICAgICBjb2RlLCA9IHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIHNlbGYuZ2V0X2V4dGVuc2lvbihjb2RlKQogICAgIGRpc3BhdGNoW0VYVDRbMF1dID0gbG9hZF9leHQ0CiAKQEAgLTExMjcsNyArMTM1Nyw3IEBACiAgICAgICAgIGlmIG5vdCBrZXk6CiAgICAgICAgICAgICBpZiBjb2RlIDw9IDA6ICMgbm90ZSB0aGF0IDAgaXMgZm9yYmlkZGVuCiAgICAgICAgICAgICAgICAgIyBDb3JydXB0IG9yIGhvc3RpbGUgcGlja2xlLgotICAgICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiRVhUIHNwZWNpZmllcyBjb2RlIDw9IDAiKTsKKyAgICAgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkVYVCBzcGVjaWZpZXMgY29kZSA8PSAwIikKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVucmVnaXN0ZXJlZCBleHRlbnNpb24gY29kZSAlZCIgJSBjb2RlKQogICAgICAgICBvYmogPSBzZWxmLmZpbmRfY2xhc3MoKmtleSkKICAgICAgICAgX2V4dGVuc2lvbl9jYWNoZVtjb2RlXSA9IG9iagpAQCAtMTE0MSw5ICsxMzcxLDggQEAKICAgICAgICAgICAgIGlmIG1vZHVsZSBpbiBfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElORzoKICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElOR1ttb2R1bGVdCiAgICAgICAgIF9faW1wb3J0X18obW9kdWxlLCBsZXZlbD0wKQotICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2R1bGVdCi0gICAgICAgIGtsYXNzID0gZ2V0YXR0cihtb2QsIG5hbWUpCi0gICAgICAgIHJldHVybiBrbGFzcworICAgICAgICByZXR1cm4gX2dldGF0dHJpYnV0ZShzeXMubW9kdWxlc1ttb2R1bGVdLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19xdWFsbmFtZT1zZWxmLnByb3RvID49IDQpCiAKICAgICBkZWYgbG9hZF9yZWR1Y2Uoc2VsZik6CiAgICAgICAgIHN0YWNrID0gc2VsZi5zdGFjawpAQCAtMTE4MSw3ICsxNDEwLDcgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5tZW1vW2ldKQogICAgIGRpc3BhdGNoW0JJTkdFVFswXV0gPSBsb2FkX2JpbmdldAogCi0gICAgZGVmIGxvYWRfbG9uZ19iaW5nZXQoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2spOgorICAgIGRlZiBsb2FkX2xvbmdfYmluZ2V0KHNlbGYpOgogICAgICAgICBpLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYubWVtb1tpXSkKICAgICBkaXNwYXRjaFtMT05HX0JJTkdFVFswXV0gPSBsb2FkX2xvbmdfYmluZ2V0CkBAIC0xMjAwLDEzICsxNDI5LDE4IEBACiAgICAgICAgIHNlbGYubWVtb1tpXSA9IHNlbGYuc3RhY2tbLTFdCiAgICAgZGlzcGF0Y2hbQklOUFVUWzBdXSA9IGxvYWRfYmlucHV0CiAKLSAgICBkZWYgbG9hZF9sb25nX2JpbnB1dChzZWxmLCB1bnBhY2s9c3RydWN0LnVucGFjaywgbWF4c2l6ZT1zeXMubWF4c2l6ZSk6CisgICAgZGVmIGxvYWRfbG9uZ19iaW5wdXQoc2VsZik6CiAgICAgICAgIGksID0gdW5wYWNrKCc8SScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgaSA+IG1heHNpemU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuZWdhdGl2ZSBMT05HX0JJTlBVVCBhcmd1bWVudCIpCiAgICAgICAgIHNlbGYubWVtb1tpXSA9IHNlbGYuc3RhY2tbLTFdCiAgICAgZGlzcGF0Y2hbTE9OR19CSU5QVVRbMF1dID0gbG9hZF9sb25nX2JpbnB1dAogCisgICAgZGVmIGxvYWRfbWVtb2l6ZShzZWxmKToKKyAgICAgICAgbWVtbyA9IHNlbGYubWVtbworICAgICAgICBtZW1vW2xlbihtZW1vKV0gPSBzZWxmLnN0YWNrWy0xXQorICAgIGRpc3BhdGNoW01FTU9JWkVbMF1dID0gbG9hZF9tZW1vaXplCisKICAgICBkZWYgbG9hZF9hcHBlbmQoc2VsZik6CiAgICAgICAgIHN0YWNrID0gc2VsZi5zdGFjawogICAgICAgICB2YWx1ZSA9IHN0YWNrLnBvcCgpCkBAIC0xMjQ2LDEyICsxNDgwLDI2IEBACiAgICAgICAgIGRlbCBzdGFja1ttYXJrOl0KICAgICBkaXNwYXRjaFtTRVRJVEVNU1swXV0gPSBsb2FkX3NldGl0ZW1zCiAKKyAgICBkZWYgbG9hZF9hZGRpdGVtcyhzZWxmKToKKyAgICAgICAgc3RhY2sgPSBzZWxmLnN0YWNrCisgICAgICAgIG1hcmsgPSBzZWxmLm1hcmtlcigpCisgICAgICAgIHNldF9vYmogPSBzdGFja1ttYXJrIC0gMV0KKyAgICAgICAgaXRlbXMgPSBzdGFja1ttYXJrICsgMTpdCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2V0X29iaiwgc2V0KToKKyAgICAgICAgICAgIHNldF9vYmoudXBkYXRlKGl0ZW1zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkID0gc2V0X29iai5hZGQKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgIGFkZChpdGVtKQorICAgICAgICBkZWwgc3RhY2tbbWFyazpdCisgICAgZGlzcGF0Y2hbQURESVRFTVNbMF1dID0gbG9hZF9hZGRpdGVtcworCiAgICAgZGVmIGxvYWRfYnVpbGQoc2VsZik6CiAgICAgICAgIHN0YWNrID0gc2VsZi5zdGFjawogICAgICAgICBzdGF0ZSA9IHN0YWNrLnBvcCgpCiAgICAgICAgIGluc3QgPSBzdGFja1stMV0KICAgICAgICAgc2V0c3RhdGUgPSBnZXRhdHRyKGluc3QsICJfX3NldHN0YXRlX18iLCBOb25lKQotICAgICAgICBpZiBzZXRzdGF0ZToKKyAgICAgICAgaWYgc2V0c3RhdGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZXRzdGF0ZShzdGF0ZSkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzbG90c3RhdGUgPSBOb25lCkBAIC0xMjc5LDg2ICsxNTI3LDQ2IEBACiAgICAgICAgIHJhaXNlIF9TdG9wKHZhbHVlKQogICAgIGRpc3BhdGNoW1NUT1BbMF1dID0gbG9hZF9zdG9wCiAKLSMgRW5jb2RlL2RlY29kZSBpbnRzLgotCi1kZWYgZW5jb2RlX2xvbmcoeCk6Ci0gICAgciIiIkVuY29kZSBhIGxvbmcgdG8gYSB0d28ncyBjb21wbGVtZW50IGxpdHRsZS1lbmRpYW4gYmluYXJ5IHN0cmluZy4KLSAgICBOb3RlIHRoYXQgMCBpcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuaW5nIGFuIGVtcHR5IHN0cmluZywgdG8gc2F2ZSBhCi0gICAgYnl0ZSBpbiB0aGUgTE9ORzEgcGlja2xpbmcgY29udGV4dC4KLQotICAgID4+PiBlbmNvZGVfbG9uZygwKQotICAgIGInJwotICAgID4+PiBlbmNvZGVfbG9uZygyNTUpCi0gICAgYidceGZmXHgwMCcKLSAgICA+Pj4gZW5jb2RlX2xvbmcoMzI3NjcpCi0gICAgYidceGZmXHg3ZicKLSAgICA+Pj4gZW5jb2RlX2xvbmcoLTI1NikKLSAgICBiJ1x4MDBceGZmJwotICAgID4+PiBlbmNvZGVfbG9uZygtMzI3NjgpCi0gICAgYidceDAwXHg4MCcKLSAgICA+Pj4gZW5jb2RlX2xvbmcoLTEyOCkKLSAgICBiJ1x4ODAnCi0gICAgPj4+IGVuY29kZV9sb25nKDEyNykKLSAgICBiJ1x4N2YnCi0gICAgPj4+Ci0gICAgIiIiCi0gICAgaWYgeCA9PSAwOgotICAgICAgICByZXR1cm4gYicnCi0gICAgbmJ5dGVzID0gKHguYml0X2xlbmd0aCgpID4+IDMpICsgMQotICAgIHJlc3VsdCA9IHgudG9fYnl0ZXMobmJ5dGVzLCBieXRlb3JkZXI9J2xpdHRsZScsIHNpZ25lZD1UcnVlKQotICAgIGlmIHggPCAwIGFuZCBuYnl0ZXMgPiAxOgotICAgICAgICBpZiByZXN1bHRbLTFdID09IDB4ZmYgYW5kIChyZXN1bHRbLTJdICYgMHg4MCkgIT0gMDoKLSAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFs6LTFdCi0gICAgcmV0dXJuIHJlc3VsdAotCi1kZWYgZGVjb2RlX2xvbmcoZGF0YSk6Ci0gICAgciIiIkRlY29kZSBhbiBpbnQgZnJvbSBhIHR3bydzIGNvbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiBiaW5hcnkgc3RyaW5nLgotCi0gICAgPj4+IGRlY29kZV9sb25nKGInJykKLSAgICAwCi0gICAgPj4+IGRlY29kZV9sb25nKGIiXHhmZlx4MDAiKQotICAgIDI1NQotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ZmZceDdmIikKLSAgICAzMjc2NwotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4MDBceGZmIikKLSAgICAtMjU2Ci0gICAgPj4+IGRlY29kZV9sb25nKGIiXHgwMFx4ODAiKQotICAgIC0zMjc2OAotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ODAiKQotICAgIC0xMjgKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDdmIikKLSAgICAxMjcKLSAgICAiIiIKLSAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoZGF0YSwgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKIAogIyBTaG9ydGhhbmRzCiAKLWRlZiBkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6Ci0gICAgUGlja2xlcihmaWxlLCBwcm90b2NvbCwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMpLmR1bXAob2JqKQorZGVmIF9kdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6CisgICAgX1BpY2tsZXIoZmlsZSwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKIAotZGVmIGR1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6CitkZWYgX2R1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6CiAgICAgZiA9IGlvLkJ5dGVzSU8oKQotICAgIFBpY2tsZXIoZiwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKKyAgICBfUGlja2xlcihmLCBwcm90b2NvbCwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMpLmR1bXAob2JqKQogICAgIHJlcyA9IGYuZ2V0dmFsdWUoKQogICAgIGFzc2VydCBpc2luc3RhbmNlKHJlcywgYnl0ZXNfdHlwZXMpCiAgICAgcmV0dXJuIHJlcwogCi1kZWYgbG9hZChmaWxlLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgotICAgIHJldHVybiBVbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCitkZWYgX2xvYWQoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKToKKyAgICByZXR1cm4gX1VucGlja2xlcihmaWxlLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cywKICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLCBlcnJvcnM9ZXJyb3JzKS5sb2FkKCkKIAotZGVmIGxvYWRzKHMsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Iik6CitkZWYgX2xvYWRzKHMsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Iik6CiAgICAgaWYgaXNpbnN0YW5jZShzLCBzdHIpOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbid0IGxvYWQgcGlja2xlIGZyb20gdW5pY29kZSBzdHJpbmciKQogICAgIGZpbGUgPSBpby5CeXRlc0lPKHMpCi0gICAgcmV0dXJuIFVucGlja2xlcihmaWxlLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cywKLSAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLCBlcnJvcnM9ZXJyb3JzKS5sb2FkKCkKKyAgICByZXR1cm4gX1VucGlja2xlcihmaWxlLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cywKKyAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykubG9hZCgpCiAKICMgVXNlIHRoZSBmYXN0ZXIgX3BpY2tsZSBpZiBwb3NzaWJsZQogdHJ5OgotICAgIGZyb20gX3BpY2tsZSBpbXBvcnQgKgorICAgIGZyb20gX3BpY2tsZSBpbXBvcnQgKAorICAgICAgICBQaWNrbGVFcnJvciwKKyAgICAgICAgUGlja2xpbmdFcnJvciwKKyAgICAgICAgVW5waWNrbGluZ0Vycm9yLAorICAgICAgICBQaWNrbGVyLAorICAgICAgICBVbnBpY2tsZXIsCisgICAgICAgIGR1bXAsCisgICAgICAgIGR1bXBzLAorICAgICAgICBsb2FkLAorICAgICAgICBsb2FkcworICAgICkKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBQaWNrbGVyLCBVbnBpY2tsZXIgPSBfUGlja2xlciwgX1VucGlja2xlcgorICAgIGR1bXAsIGR1bXBzLCBsb2FkLCBsb2FkcyA9IF9kdW1wLCBfZHVtcHMsIF9sb2FkLCBfbG9hZHMKIAogIyBEb2N0ZXN0CiBkZWYgX3Rlc3QoKToKZGlmZiAtLWdpdCBhL0xpYi9waWNrbGV0b29scy5weSBiL0xpYi9waWNrbGV0b29scy5weQppbmRleCA2MTJmYThmLi43MWMyYWExIDEwMDY0NAotLS0gYS9MaWIvcGlja2xldG9vbHMucHkKKysrIGIvTGliL3BpY2tsZXRvb2xzLnB5CkBAIC0xMSw2ICsxMSw3IEBACiAnJycKIAogaW1wb3J0IGNvZGVjcworaW1wb3J0IGlvCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKQEAgLTM0LDExOSArMzUsMTE4IEBACiAjICAgYnkgYSBsYXRlciBHRVQuCiAKIAotIiIiCi0iQSBwaWNrbGUiIGlzIGEgcHJvZ3JhbSBmb3IgYSB2aXJ0dWFsIHBpY2tsZSBtYWNoaW5lIChQTSwgYnV0IG1vcmUgYWNjdXJhdGVseQotY2FsbGVkIGFuIHVucGlja2xpbmcgbWFjaGluZSkuICBJdCdzIGEgc2VxdWVuY2Ugb2Ygb3Bjb2RlcywgaW50ZXJwcmV0ZWQgYnkgdGhlCi1QTSwgYnVpbGRpbmcgYW4gYXJiaXRyYXJpbHkgY29tcGxleCBQeXRob24gb2JqZWN0LgorIyAiQSBwaWNrbGUiIGlzIGEgcHJvZ3JhbSBmb3IgYSB2aXJ0dWFsIHBpY2tsZSBtYWNoaW5lIChQTSwgYnV0IG1vcmUgYWNjdXJhdGVseQorIyBjYWxsZWQgYW4gdW5waWNrbGluZyBtYWNoaW5lKS4gIEl0J3MgYSBzZXF1ZW5jZSBvZiBvcGNvZGVzLCBpbnRlcnByZXRlZCBieSB0aGUKKyMgUE0sIGJ1aWxkaW5nIGFuIGFyYml0cmFyaWx5IGNvbXBsZXggUHl0aG9uIG9iamVjdC4KKyMKKyMgRm9yIHRoZSBtb3N0IHBhcnQsIHRoZSBQTSBpcyB2ZXJ5IHNpbXBsZTogIHRoZXJlIGFyZSBubyBsb29waW5nLCB0ZXN0aW5nLCBvcgorIyBjb25kaXRpb25hbCBpbnN0cnVjdGlvbnMsIG5vIGFyaXRobWV0aWMgYW5kIG5vIGZ1bmN0aW9uIGNhbGxzLiAgT3Bjb2RlcyBhcmUKKyMgZXhlY3V0ZWQgb25jZSBlYWNoLCBmcm9tIGZpcnN0IHRvIGxhc3QsIHVudGlsIGEgU1RPUCBvcGNvZGUgaXMgcmVhY2hlZC4KKyMKKyMgVGhlIFBNIGhhcyB0d28gZGF0YSBhcmVhcywgInRoZSBzdGFjayIgYW5kICJ0aGUgbWVtbyIuCisjCisjIE1hbnkgb3Bjb2RlcyBwdXNoIFB5dGhvbiBvYmplY3RzIG9udG8gdGhlIHN0YWNrOyBlLmcuLCBJTlQgcHVzaGVzIGEgUHl0aG9uCisjIGludGVnZXIgb2JqZWN0IG9uIHRoZSBzdGFjaywgd2hvc2UgdmFsdWUgaXMgZ290dGVuIGZyb20gYSBkZWNpbWFsIHN0cmluZworIyBsaXRlcmFsIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgSU5UIG9wY29kZSBpbiB0aGUgcGlja2xlIGJ5dGVzdHJlYW0uICBPdGhlcgorIyBvcGNvZGVzIHRha2UgUHl0aG9uIG9iamVjdHMgb2ZmIHRoZSBzdGFjay4gIFRoZSByZXN1bHQgb2YgdW5waWNrbGluZyBpcworIyB3aGF0ZXZlciBvYmplY3QgaXMgbGVmdCBvbiB0aGUgc3RhY2sgd2hlbiB0aGUgZmluYWwgU1RPUCBvcGNvZGUgaXMgZXhlY3V0ZWQuCisjCisjIFRoZSBtZW1vIGlzIHNpbXBseSBhbiBhcnJheSBvZiBvYmplY3RzLCBvciBpdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgYSBkaWN0CisjIG1hcHBpbmcgbGl0dGxlIGludGVnZXJzIHRvIG9iamVjdHMuICBUaGUgbWVtbyBzZXJ2ZXMgYXMgdGhlIFBNJ3MgImxvbmcgdGVybQorIyBtZW1vcnkiLCBhbmQgdGhlIGxpdHRsZSBpbnRlZ2VycyBpbmRleGluZyB0aGUgbWVtbyBhcmUgYWtpbiB0byB2YXJpYWJsZQorIyBuYW1lcy4gIFNvbWUgb3Bjb2RlcyBwb3AgYSBzdGFjayBvYmplY3QgaW50byB0aGUgbWVtbyBhdCBhIGdpdmVuIGluZGV4LAorIyBhbmQgb3RoZXJzIHB1c2ggYSBtZW1vIG9iamVjdCBhdCBhIGdpdmVuIGluZGV4IG9udG8gdGhlIHN0YWNrIGFnYWluLgorIworIyBBdCBoZWFydCwgdGhhdCdzIGFsbCB0aGUgUE0gaGFzLiAgU3VidGxldGllcyBhcmlzZSBmb3IgdGhlc2UgcmVhc29uczoKKyMKKyMgKyBPYmplY3QgaWRlbnRpdHkuICBPYmplY3RzIGNhbiBiZSBhcmJpdHJhcmlseSBjb21wbGV4LCBhbmQgc3Vib2JqZWN0cworIyAgIG1heSBiZSBzaGFyZWQgKGZvciBleGFtcGxlLCB0aGUgbGlzdCBbYSwgYV0gcmVmZXJzIHRvIHRoZSBzYW1lIG9iamVjdCBhCisjICAgdHdpY2UpLiAgSXQgY2FuIGJlIHZpdGFsIHRoYXQgdW5waWNrbGluZyByZWNyZWF0ZSBhbiBpc29tb3JwaGljIG9iamVjdAorIyAgIGdyYXBoLCBmYWl0aGZ1bGx5IHJlcHJvZHVjaW5nIHNoYXJpbmcuCisjCisjICsgUmVjdXJzaXZlIG9iamVjdHMuICBGb3IgZXhhbXBsZSwgYWZ0ZXIgIkwgPSBbXTsgTC5hcHBlbmQoTCkiLCBMIGlzIGEKKyMgICBsaXN0LCBhbmQgTFswXSBpcyB0aGUgc2FtZSBsaXN0LiAgVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBvYmplY3QgaWRlbnRpdHkKKyMgICBwb2ludCwgYW5kIHNvbWUgc2VxdWVuY2VzIG9mIHBpY2tsZSBvcGNvZGVzIGFyZSBzdWJ0bGUgaW4gb3JkZXIgdG8KKyMgICBnZXQgdGhlIHJpZ2h0IHJlc3VsdCBpbiBhbGwgY2FzZXMuCisjCisjICsgVGhpbmdzIHBpY2tsZSBkb2Vzbid0IGtub3cgZXZlcnl0aGluZyBhYm91dC4gIEV4YW1wbGVzIG9mIHRoaW5ncyBwaWNrbGUKKyMgICBkb2VzIGtub3cgZXZlcnl0aGluZyBhYm91dCBhcmUgUHl0aG9uJ3MgYnVpbHRpbiBzY2FsYXIgYW5kIGNvbnRhaW5lcgorIyAgIHR5cGVzLCBsaWtlIGludHMgYW5kIHR1cGxlcy4gIFRoZXkgZ2VuZXJhbGx5IGhhdmUgb3Bjb2RlcyBkZWRpY2F0ZWQgdG8KKyMgICB0aGVtLiAgRm9yIHRoaW5ncyBsaWtlIG1vZHVsZSByZWZlcmVuY2VzIGFuZCBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkCisjICAgY2xhc3NlcywgcGlja2xlJ3Mga25vd2xlZGdlIGlzIGxpbWl0ZWQuICBIaXN0b3JpY2FsbHksIG1hbnkgZW5oYW5jZW1lbnRzCisjICAgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIHBpY2tsZSBwcm90b2NvbCBpbiBvcmRlciB0byBkbyBhIGJldHRlciAoZmFzdGVyLAorIyAgIGFuZC9vciBtb3JlIGNvbXBhY3QpIGpvYiBvbiB0aG9zZS4KKyMKKyMgKyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBtaWNyby1vcHRpbWl6YXRpb24uICBBcyBleHBsYWluZWQgYmVsb3csCisjICAgcGlja2xlIG9wY29kZXMgbmV2ZXIgZ28gYXdheSwgbm90IGV2ZW4gd2hlbiBiZXR0ZXIgd2F5cyB0byBkbyBhIHRoaW5nCisjICAgZ2V0IGludmVudGVkLiAgVGhlIHJlcGVydG9pcmUgb2YgdGhlIFBNIGp1c3Qga2VlcHMgZ3Jvd2luZyBvdmVyIHRpbWUuCisjICAgRm9yIGV4YW1wbGUsIHByb3RvY29sIDAgaGFkIHR3byBvcGNvZGVzIGZvciBidWlsZGluZyBQeXRob24gaW50ZWdlcnMgKElOVAorIyAgIGFuZCBMT05HKSwgcHJvdG9jb2wgMSBhZGRlZCB0aHJlZSBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZiBzaG9ydAorIyAgIGludGVnZXJzLCBhbmQgcHJvdG9jb2wgMiBhZGRlZCB0d28gbW9yZSBmb3IgbW9yZS1lZmZpY2llbnQgcGlja2xpbmcgb2YKKyMgICBsb25nIGludGVnZXJzIChiZWZvcmUgcHJvdG9jb2wgMiwgdGhlIG9ubHkgd2F5cyB0byBwaWNrbGUgYSBQeXRob24gbG9uZworIyAgIHRvb2sgdGltZSBxdWFkcmF0aWMgaW4gdGhlIG51bWJlciBvZiBkaWdpdHMsIGZvciBib3RoIHBpY2tsaW5nIGFuZAorIyAgIHVucGlja2xpbmcpLiAgIk9wY29kZSBibG9hdCIgaXNuJ3Qgc28gbXVjaCBhIHN1YnRsZXR5IGFzIGEgc291cmNlIG9mCisjICAgd2VhcnlpbmcgY29tcGxpY2F0aW9uLgorIworIworIyBQaWNrbGUgcHJvdG9jb2xzOgorIworIyBGb3IgY29tcGF0aWJpbGl0eSwgdGhlIG1lYW5pbmcgb2YgYSBwaWNrbGUgb3Bjb2RlIG5ldmVyIGNoYW5nZXMuICBJbnN0ZWFkIG5ldworIyBwaWNrbGUgb3Bjb2RlcyBnZXQgYWRkZWQsIGFuZCBlYWNoIHZlcnNpb24ncyB1bnBpY2tsZXIgY2FuIGhhbmRsZSBhbGwgdGhlCisjIHBpY2tsZSBvcGNvZGVzIGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucyB0byBkYXRlLiAgU28gb2xkIHBpY2tsZXMgY29udGludWUgdG8KKyMgYmUgcmVhZGFibGUgZm9yZXZlci4gIFRoZSBwaWNrbGVyIGNhbiBnZW5lcmFsbHkgYmUgdG9sZCB0byByZXN0cmljdCBpdHNlbGYgdG8KKyMgdGhlIHN1YnNldCBvZiBvcGNvZGVzIGF2YWlsYWJsZSB1bmRlciBwcmV2aW91cyBwcm90b2NvbCB2ZXJzaW9ucyB0b28sIHNvIHRoYXQKKyMgdXNlcnMgY2FuIGNyZWF0ZSBwaWNrbGVzIHVuZGVyIHRoZSBjdXJyZW50IHZlcnNpb24gcmVhZGFibGUgYnkgb2xkZXIKKyMgdmVyc2lvbnMuICBIb3dldmVyLCBhIHBpY2tsZSBkb2VzIG5vdCBjb250YWluIGl0cyB2ZXJzaW9uIG51bWJlciBlbWJlZGRlZAorIyB3aXRoaW4gaXQuICBJZiBhbiBvbGRlciB1bnBpY2tsZXIgdHJpZXMgdG8gcmVhZCBhIHBpY2tsZSB1c2luZyBhIGxhdGVyCisjIHByb3RvY29sLCB0aGUgcmVzdWx0IGlzIG1vc3QgbGlrZWx5IGFuIGV4Y2VwdGlvbiBkdWUgdG8gc2VlaW5nIGFuIHVua25vd24gKGluCisjIHRoZSBvbGRlciB1bnBpY2tsZXIpIG9wY29kZS4KKyMKKyMgVGhlIG9yaWdpbmFsIHBpY2tsZSB1c2VkIHdoYXQncyBub3cgY2FsbGVkICJwcm90b2NvbCAwIiwgYW5kIHdoYXQgd2FzIGNhbGxlZAorIyAidGV4dCBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoZSBlbnRpcmUgcGlja2xlIGJ5dGVzdHJlYW0gaXMgbWFkZSB1cCBvZgorIyBwcmludGFibGUgNy1iaXQgQVNDSUkgY2hhcmFjdGVycywgcGx1cyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIsIGluIHByb3RvY29sIDAuCisjIFRoYXQncyB3aHkgaXQgd2FzIGNhbGxlZCB0ZXh0IG1vZGUuICBQcm90b2NvbCAwIGlzIHNtYWxsIGFuZCBlbGVnYW50LCBidXQKKyMgc29tZXRpbWVzIHBhaW5mdWxseSBpbmVmZmljaWVudC4KKyMKKyMgVGhlIHNlY29uZCBtYWpvciBzZXQgb2YgYWRkaXRpb25zIGlzIG5vdyBjYWxsZWQgInByb3RvY29sIDEiLCBhbmQgd2FzIGNhbGxlZAorIyAiYmluYXJ5IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhpcyBhZGRlZCBtYW55IG9wY29kZXMgd2l0aCBhcmd1bWVudHMKKyMgY29uc2lzdGluZyBvZiBhcmJpdHJhcnkgYnl0ZXMsIGluY2x1ZGluZyBOVUwgYnl0ZXMgYW5kIHVucHJpbnRhYmxlICJoaWdoIGJpdCIKKyMgYnl0ZXMuICBCaW5hcnkgbW9kZSBwaWNrbGVzIGNhbiBiZSBzdWJzdGFudGlhbGx5IHNtYWxsZXIgdGhhbiBlcXVpdmFsZW50CisjIHRleHQgbW9kZSBwaWNrbGVzLCBhbmQgc29tZXRpbWVzIGZhc3RlciB0b287IGUuZy4sIEJJTklOVCByZXByZXNlbnRzIGEgNC1ieXRlCisjIGludCBhcyA0IGJ5dGVzIGZvbGxvd2luZyB0aGUgb3Bjb2RlLCB3aGljaCBpcyBjaGVhcGVyIHRvIHVucGlja2xlIHRoYW4gdGhlCisjIChwZXJoYXBzKSAxMS1jaGFyYWN0ZXIgZGVjaW1hbCBzdHJpbmcgYXR0YWNoZWQgdG8gSU5ULiAgUHJvdG9jb2wgMSBhbHNvIGFkZGVkCisjIGEgbnVtYmVyIG9mIG9wY29kZXMgdGhhdCBvcGVyYXRlIG9uIG1hbnkgc3RhY2sgZWxlbWVudHMgYXQgb25jZSAobGlrZSBBUFBFTkRTCisjIGFuZCBTRVRJVEVNUyksIGFuZCAic2hvcnRjdXQiIG9wY29kZXMgKGxpa2UgRU1QVFlfRElDVCBhbmQgRU1QVFlfVFVQTEUpLgorIworIyBUaGUgdGhpcmQgbWFqb3Igc2V0IG9mIGFkZGl0aW9ucyBjYW1lIGluIFB5dGhvbiAyLjMsIGFuZCBpcyBjYWxsZWQgInByb3RvY29sCisjIDIiLiAgVGhpcyBhZGRlZDoKKyMKKyMgLSBBIGJldHRlciB3YXkgdG8gcGlja2xlIGluc3RhbmNlcyBvZiBuZXctc3R5bGUgY2xhc3NlcyAoTkVXT0JKKS4KKyMKKyMgLSBBIHdheSBmb3IgYSBwaWNrbGUgdG8gaWRlbnRpZnkgaXRzIHByb3RvY29sIChQUk9UTykuCisjCisjIC0gVGltZS0gYW5kIHNwYWNlLSBlZmZpY2llbnQgcGlja2xpbmcgb2YgbG9uZyBpbnRzIChMT05HezEsNH0pLgorIworIyAtIFNob3J0Y3V0cyBmb3Igc21hbGwgdHVwbGVzIChUVVBMRXsxLDIsM319LgorIworIyAtIERlZGljYXRlZCBvcGNvZGVzIGZvciBib29scyAoTkVXVFJVRSwgTkVXRkFMU0UpLgorIworIyAtIFRoZSAiZXh0ZW5zaW9uIHJlZ2lzdHJ5IiwgYSB2ZWN0b3Igb2YgcG9wdWxhciBvYmplY3RzIHRoYXQgY2FuIGJlIHB1c2hlZAorIyAgIGVmZmljaWVudGx5IGJ5IGluZGV4IChFWFR7MSwyLDR9KS4gIFRoaXMgaXMgYWtpbiB0byB0aGUgbWVtbyBhbmQgR0VULCBidXQKKyMgICB0aGUgcmVnaXN0cnkgY29udGVudHMgYXJlIHByZWRlZmluZWQgKHRoZXJlJ3Mgbm90aGluZyBha2luIHRvIHRoZSBtZW1vJ3MKKyMgICBQVVQpLgorIworIyBBbm90aGVyIGluZGVwZW5kZW50IGNoYW5nZSB3aXRoIFB5dGhvbiAyLjMgaXMgdGhlIGFiYW5kb25tZW50IG9mIGFueQorIyBwcmV0ZW5zZSB0aGF0IGl0IG1pZ2h0IGJlIHNhZmUgdG8gbG9hZCBwaWNrbGVzIHJlY2VpdmVkIGZyb20gdW50cnVzdGVkCisjIHBhcnRpZXMgLS0gbm8gc3VmZmljaWVudCBzZWN1cml0eSBhbmFseXNpcyBoYXMgYmVlbiBkb25lIHRvIGd1YXJhbnRlZQorIyB0aGlzIGFuZCB0aGVyZSBpc24ndCBhIHVzZSBjYXNlIHRoYXQgd2FycmFudHMgdGhlIGV4cGVuc2Ugb2Ygc3VjaCBhbgorIyBhbmFseXNpcy4KKyMKKyMgVG8gdGhpcyBlbmQsIGFsbCB0ZXN0cyBmb3IgX19zYWZlX2Zvcl91bnBpY2tsaW5nX18gb3IgZm9yCisjIGNvcHlyZWcuc2FmZV9jb25zdHJ1Y3RvcnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgdW5waWNrbGluZyBjb2RlLgorIyBSZWZlcmVuY2VzIHRvIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgZGVzY3JpcHRpb25zIGJlbG93IGFyZSB0byBiZSBzZWVuCisjIGFzIGRlc2NyaWJpbmcgdW5waWNrbGluZyBpbiBQeXRob24gMi4yIGFuZCBiZWZvcmUuCiAKLUZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgUE0gaXMgdmVyeSBzaW1wbGU6ICB0aGVyZSBhcmUgbm8gbG9vcGluZywgdGVzdGluZywgb3IKLWNvbmRpdGlvbmFsIGluc3RydWN0aW9ucywgbm8gYXJpdGhtZXRpYyBhbmQgbm8gZnVuY3Rpb24gY2FsbHMuICBPcGNvZGVzIGFyZQotZXhlY3V0ZWQgb25jZSBlYWNoLCBmcm9tIGZpcnN0IHRvIGxhc3QsIHVudGlsIGEgU1RPUCBvcGNvZGUgaXMgcmVhY2hlZC4KLQotVGhlIFBNIGhhcyB0d28gZGF0YSBhcmVhcywgInRoZSBzdGFjayIgYW5kICJ0aGUgbWVtbyIuCi0KLU1hbnkgb3Bjb2RlcyBwdXNoIFB5dGhvbiBvYmplY3RzIG9udG8gdGhlIHN0YWNrOyBlLmcuLCBJTlQgcHVzaGVzIGEgUHl0aG9uCi1pbnRlZ2VyIG9iamVjdCBvbiB0aGUgc3RhY2ssIHdob3NlIHZhbHVlIGlzIGdvdHRlbiBmcm9tIGEgZGVjaW1hbCBzdHJpbmcKLWxpdGVyYWwgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBJTlQgb3Bjb2RlIGluIHRoZSBwaWNrbGUgYnl0ZXN0cmVhbS4gIE90aGVyCi1vcGNvZGVzIHRha2UgUHl0aG9uIG9iamVjdHMgb2ZmIHRoZSBzdGFjay4gIFRoZSByZXN1bHQgb2YgdW5waWNrbGluZyBpcwotd2hhdGV2ZXIgb2JqZWN0IGlzIGxlZnQgb24gdGhlIHN0YWNrIHdoZW4gdGhlIGZpbmFsIFNUT1Agb3Bjb2RlIGlzIGV4ZWN1dGVkLgotCi1UaGUgbWVtbyBpcyBzaW1wbHkgYW4gYXJyYXkgb2Ygb2JqZWN0cywgb3IgaXQgY2FuIGJlIGltcGxlbWVudGVkIGFzIGEgZGljdAotbWFwcGluZyBsaXR0bGUgaW50ZWdlcnMgdG8gb2JqZWN0cy4gIFRoZSBtZW1vIHNlcnZlcyBhcyB0aGUgUE0ncyAibG9uZyB0ZXJtCi1tZW1vcnkiLCBhbmQgdGhlIGxpdHRsZSBpbnRlZ2VycyBpbmRleGluZyB0aGUgbWVtbyBhcmUgYWtpbiB0byB2YXJpYWJsZQotbmFtZXMuICBTb21lIG9wY29kZXMgcG9wIGEgc3RhY2sgb2JqZWN0IGludG8gdGhlIG1lbW8gYXQgYSBnaXZlbiBpbmRleCwKLWFuZCBvdGhlcnMgcHVzaCBhIG1lbW8gb2JqZWN0IGF0IGEgZ2l2ZW4gaW5kZXggb250byB0aGUgc3RhY2sgYWdhaW4uCi0KLUF0IGhlYXJ0LCB0aGF0J3MgYWxsIHRoZSBQTSBoYXMuICBTdWJ0bGV0aWVzIGFyaXNlIGZvciB0aGVzZSByZWFzb25zOgotCi0rIE9iamVjdCBpZGVudGl0eS4gIE9iamVjdHMgY2FuIGJlIGFyYml0cmFyaWx5IGNvbXBsZXgsIGFuZCBzdWJvYmplY3RzCi0gIG1heSBiZSBzaGFyZWQgKGZvciBleGFtcGxlLCB0aGUgbGlzdCBbYSwgYV0gcmVmZXJzIHRvIHRoZSBzYW1lIG9iamVjdCBhCi0gIHR3aWNlKS4gIEl0IGNhbiBiZSB2aXRhbCB0aGF0IHVucGlja2xpbmcgcmVjcmVhdGUgYW4gaXNvbW9ycGhpYyBvYmplY3QKLSAgZ3JhcGgsIGZhaXRoZnVsbHkgcmVwcm9kdWNpbmcgc2hhcmluZy4KLQotKyBSZWN1cnNpdmUgb2JqZWN0cy4gIEZvciBleGFtcGxlLCBhZnRlciAiTCA9IFtdOyBMLmFwcGVuZChMKSIsIEwgaXMgYQotICBsaXN0LCBhbmQgTFswXSBpcyB0aGUgc2FtZSBsaXN0LiAgVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBvYmplY3QgaWRlbnRpdHkKLSAgcG9pbnQsIGFuZCBzb21lIHNlcXVlbmNlcyBvZiBwaWNrbGUgb3Bjb2RlcyBhcmUgc3VidGxlIGluIG9yZGVyIHRvCi0gIGdldCB0aGUgcmlnaHQgcmVzdWx0IGluIGFsbCBjYXNlcy4KLQotKyBUaGluZ3MgcGlja2xlIGRvZXNuJ3Qga25vdyBldmVyeXRoaW5nIGFib3V0LiAgRXhhbXBsZXMgb2YgdGhpbmdzIHBpY2tsZQotICBkb2VzIGtub3cgZXZlcnl0aGluZyBhYm91dCBhcmUgUHl0aG9uJ3MgYnVpbHRpbiBzY2FsYXIgYW5kIGNvbnRhaW5lcgotICB0eXBlcywgbGlrZSBpbnRzIGFuZCB0dXBsZXMuICBUaGV5IGdlbmVyYWxseSBoYXZlIG9wY29kZXMgZGVkaWNhdGVkIHRvCi0gIHRoZW0uICBGb3IgdGhpbmdzIGxpa2UgbW9kdWxlIHJlZmVyZW5jZXMgYW5kIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQKLSAgY2xhc3NlcywgcGlja2xlJ3Mga25vd2xlZGdlIGlzIGxpbWl0ZWQuICBIaXN0b3JpY2FsbHksIG1hbnkgZW5oYW5jZW1lbnRzCi0gIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBwaWNrbGUgcHJvdG9jb2wgaW4gb3JkZXIgdG8gZG8gYSBiZXR0ZXIgKGZhc3RlciwKLSAgYW5kL29yIG1vcmUgY29tcGFjdCkgam9iIG9uIHRob3NlLgotCi0rIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIG1pY3JvLW9wdGltaXphdGlvbi4gIEFzIGV4cGxhaW5lZCBiZWxvdywKLSAgcGlja2xlIG9wY29kZXMgbmV2ZXIgZ28gYXdheSwgbm90IGV2ZW4gd2hlbiBiZXR0ZXIgd2F5cyB0byBkbyBhIHRoaW5nCi0gIGdldCBpbnZlbnRlZC4gIFRoZSByZXBlcnRvaXJlIG9mIHRoZSBQTSBqdXN0IGtlZXBzIGdyb3dpbmcgb3ZlciB0aW1lLgotICBGb3IgZXhhbXBsZSwgcHJvdG9jb2wgMCBoYWQgdHdvIG9wY29kZXMgZm9yIGJ1aWxkaW5nIFB5dGhvbiBpbnRlZ2VycyAoSU5UCi0gIGFuZCBMT05HKSwgcHJvdG9jb2wgMSBhZGRlZCB0aHJlZSBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZiBzaG9ydAotICBpbnRlZ2VycywgYW5kIHByb3RvY29sIDIgYWRkZWQgdHdvIG1vcmUgZm9yIG1vcmUtZWZmaWNpZW50IHBpY2tsaW5nIG9mCi0gIGxvbmcgaW50ZWdlcnMgKGJlZm9yZSBwcm90b2NvbCAyLCB0aGUgb25seSB3YXlzIHRvIHBpY2tsZSBhIFB5dGhvbiBsb25nCi0gIHRvb2sgdGltZSBxdWFkcmF0aWMgaW4gdGhlIG51bWJlciBvZiBkaWdpdHMsIGZvciBib3RoIHBpY2tsaW5nIGFuZAotICB1bnBpY2tsaW5nKS4gICJPcGNvZGUgYmxvYXQiIGlzbid0IHNvIG11Y2ggYSBzdWJ0bGV0eSBhcyBhIHNvdXJjZSBvZgotICB3ZWFyeWluZyBjb21wbGljYXRpb24uCi0KLQotUGlja2xlIHByb3RvY29sczoKLQotRm9yIGNvbXBhdGliaWxpdHksIHRoZSBtZWFuaW5nIG9mIGEgcGlja2xlIG9wY29kZSBuZXZlciBjaGFuZ2VzLiAgSW5zdGVhZCBuZXcKLXBpY2tsZSBvcGNvZGVzIGdldCBhZGRlZCwgYW5kIGVhY2ggdmVyc2lvbidzIHVucGlja2xlciBjYW4gaGFuZGxlIGFsbCB0aGUKLXBpY2tsZSBvcGNvZGVzIGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucyB0byBkYXRlLiAgU28gb2xkIHBpY2tsZXMgY29udGludWUgdG8KLWJlIHJlYWRhYmxlIGZvcmV2ZXIuICBUaGUgcGlja2xlciBjYW4gZ2VuZXJhbGx5IGJlIHRvbGQgdG8gcmVzdHJpY3QgaXRzZWxmIHRvCi10aGUgc3Vic2V0IG9mIG9wY29kZXMgYXZhaWxhYmxlIHVuZGVyIHByZXZpb3VzIHByb3RvY29sIHZlcnNpb25zIHRvbywgc28gdGhhdAotdXNlcnMgY2FuIGNyZWF0ZSBwaWNrbGVzIHVuZGVyIHRoZSBjdXJyZW50IHZlcnNpb24gcmVhZGFibGUgYnkgb2xkZXIKLXZlcnNpb25zLiAgSG93ZXZlciwgYSBwaWNrbGUgZG9lcyBub3QgY29udGFpbiBpdHMgdmVyc2lvbiBudW1iZXIgZW1iZWRkZWQKLXdpdGhpbiBpdC4gIElmIGFuIG9sZGVyIHVucGlja2xlciB0cmllcyB0byByZWFkIGEgcGlja2xlIHVzaW5nIGEgbGF0ZXIKLXByb3RvY29sLCB0aGUgcmVzdWx0IGlzIG1vc3QgbGlrZWx5IGFuIGV4Y2VwdGlvbiBkdWUgdG8gc2VlaW5nIGFuIHVua25vd24gKGluCi10aGUgb2xkZXIgdW5waWNrbGVyKSBvcGNvZGUuCi0KLVRoZSBvcmlnaW5hbCBwaWNrbGUgdXNlZCB3aGF0J3Mgbm93IGNhbGxlZCAicHJvdG9jb2wgMCIsIGFuZCB3aGF0IHdhcyBjYWxsZWQKLSJ0ZXh0IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhlIGVudGlyZSBwaWNrbGUgYnl0ZXN0cmVhbSBpcyBtYWRlIHVwIG9mCi1wcmludGFibGUgNy1iaXQgQVNDSUkgY2hhcmFjdGVycywgcGx1cyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIsIGluIHByb3RvY29sIDAuCi1UaGF0J3Mgd2h5IGl0IHdhcyBjYWxsZWQgdGV4dCBtb2RlLiAgUHJvdG9jb2wgMCBpcyBzbWFsbCBhbmQgZWxlZ2FudCwgYnV0Ci1zb21ldGltZXMgcGFpbmZ1bGx5IGluZWZmaWNpZW50LgotCi1UaGUgc2Vjb25kIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgaXMgbm93IGNhbGxlZCAicHJvdG9jb2wgMSIsIGFuZCB3YXMgY2FsbGVkCi0iYmluYXJ5IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhpcyBhZGRlZCBtYW55IG9wY29kZXMgd2l0aCBhcmd1bWVudHMKLWNvbnNpc3Rpbmcgb2YgYXJiaXRyYXJ5IGJ5dGVzLCBpbmNsdWRpbmcgTlVMIGJ5dGVzIGFuZCB1bnByaW50YWJsZSAiaGlnaCBiaXQiCi1ieXRlcy4gIEJpbmFyeSBtb2RlIHBpY2tsZXMgY2FuIGJlIHN1YnN0YW50aWFsbHkgc21hbGxlciB0aGFuIGVxdWl2YWxlbnQKLXRleHQgbW9kZSBwaWNrbGVzLCBhbmQgc29tZXRpbWVzIGZhc3RlciB0b287IGUuZy4sIEJJTklOVCByZXByZXNlbnRzIGEgNC1ieXRlCi1pbnQgYXMgNCBieXRlcyBmb2xsb3dpbmcgdGhlIG9wY29kZSwgd2hpY2ggaXMgY2hlYXBlciB0byB1bnBpY2tsZSB0aGFuIHRoZQotKHBlcmhhcHMpIDExLWNoYXJhY3RlciBkZWNpbWFsIHN0cmluZyBhdHRhY2hlZCB0byBJTlQuICBQcm90b2NvbCAxIGFsc28gYWRkZWQKLWEgbnVtYmVyIG9mIG9wY29kZXMgdGhhdCBvcGVyYXRlIG9uIG1hbnkgc3RhY2sgZWxlbWVudHMgYXQgb25jZSAobGlrZSBBUFBFTkRTCi1hbmQgU0VUSVRFTVMpLCBhbmQgInNob3J0Y3V0IiBvcGNvZGVzIChsaWtlIEVNUFRZX0RJQ1QgYW5kIEVNUFRZX1RVUExFKS4KLQotVGhlIHRoaXJkIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgY2FtZSBpbiBQeXRob24gMi4zLCBhbmQgaXMgY2FsbGVkICJwcm90b2NvbAotMiIuICBUaGlzIGFkZGVkOgotCi0tIEEgYmV0dGVyIHdheSB0byBwaWNrbGUgaW5zdGFuY2VzIG9mIG5ldy1zdHlsZSBjbGFzc2VzIChORVdPQkopLgotCi0tIEEgd2F5IGZvciBhIHBpY2tsZSB0byBpZGVudGlmeSBpdHMgcHJvdG9jb2wgKFBST1RPKS4KLQotLSBUaW1lLSBhbmQgc3BhY2UtIGVmZmljaWVudCBwaWNrbGluZyBvZiBsb25nIGludHMgKExPTkd7MSw0fSkuCi0KLS0gU2hvcnRjdXRzIGZvciBzbWFsbCB0dXBsZXMgKFRVUExFezEsMiwzfX0uCi0KLS0gRGVkaWNhdGVkIG9wY29kZXMgZm9yIGJvb2xzIChORVdUUlVFLCBORVdGQUxTRSkuCi0KLS0gVGhlICJleHRlbnNpb24gcmVnaXN0cnkiLCBhIHZlY3RvciBvZiBwb3B1bGFyIG9iamVjdHMgdGhhdCBjYW4gYmUgcHVzaGVkCi0gIGVmZmljaWVudGx5IGJ5IGluZGV4IChFWFR7MSwyLDR9KS4gIFRoaXMgaXMgYWtpbiB0byB0aGUgbWVtbyBhbmQgR0VULCBidXQKLSAgdGhlIHJlZ2lzdHJ5IGNvbnRlbnRzIGFyZSBwcmVkZWZpbmVkICh0aGVyZSdzIG5vdGhpbmcgYWtpbiB0byB0aGUgbWVtbydzCi0gIFBVVCkuCi0KLUFub3RoZXIgaW5kZXBlbmRlbnQgY2hhbmdlIHdpdGggUHl0aG9uIDIuMyBpcyB0aGUgYWJhbmRvbm1lbnQgb2YgYW55Ci1wcmV0ZW5zZSB0aGF0IGl0IG1pZ2h0IGJlIHNhZmUgdG8gbG9hZCBwaWNrbGVzIHJlY2VpdmVkIGZyb20gdW50cnVzdGVkCi1wYXJ0aWVzIC0tIG5vIHN1ZmZpY2llbnQgc2VjdXJpdHkgYW5hbHlzaXMgaGFzIGJlZW4gZG9uZSB0byBndWFyYW50ZWUKLXRoaXMgYW5kIHRoZXJlIGlzbid0IGEgdXNlIGNhc2UgdGhhdCB3YXJyYW50cyB0aGUgZXhwZW5zZSBvZiBzdWNoIGFuCi1hbmFseXNpcy4KLQotVG8gdGhpcyBlbmQsIGFsbCB0ZXN0cyBmb3IgX19zYWZlX2Zvcl91bnBpY2tsaW5nX18gb3IgZm9yCi1jb3B5cmVnLnNhZmVfY29uc3RydWN0b3JzIGFyZSByZW1vdmVkIGZyb20gdGhlIHVucGlja2xpbmcgY29kZS4KLVJlZmVyZW5jZXMgdG8gdGhlc2UgdmFyaWFibGVzIGluIHRoZSBkZXNjcmlwdGlvbnMgYmVsb3cgYXJlIHRvIGJlIHNlZW4KLWFzIGRlc2NyaWJpbmcgdW5waWNrbGluZyBpbiBQeXRob24gMi4yIGFuZCBiZWZvcmUuCi0iIiIKIAogIyBNZXRhLXJ1bGU6ICBEZXNjcmlwdGlvbnMgYXJlIHN0b3JlZCBpbiBpbnN0YW5jZXMgb2YgZGVzY3JpcHRvciBvYmplY3RzLAogIyB3aXRoIHBsYWluIGNvbnN0cnVjdG9ycy4gIE5vIG1ldGEtbGFuZ3VhZ2UgaXMgZGVmaW5lZCBmcm9tIHdoaWNoCkBAIC0xNjksNiArMTY5LDcgQEAKIFRBS0VOX0ZST01fQVJHVU1FTlQxICA9IC0yICAgIyBudW0gYnl0ZXMgaXMgMS1ieXRlIHVuc2lnbmVkIGludAogVEFLRU5fRlJPTV9BUkdVTUVOVDQgID0gLTMgICAjIG51bSBieXRlcyBpcyA0LWJ5dGUgc2lnbmVkIGxpdHRsZS1lbmRpYW4gaW50CiBUQUtFTl9GUk9NX0FSR1VNRU5UNFUgPSAtNCAgICMgbnVtIGJ5dGVzIGlzIDQtYnl0ZSB1bnNpZ25lZCBsaXR0bGUtZW5kaWFuIGludAorVEFLRU5fRlJPTV9BUkdVTUVOVDhVID0gLTUgICAjIG51bSBieXRlcyBpcyA4LWJ5dGUgdW5zaWduZWQgbGl0dGxlLWVuZGlhbiBpbnQKIAogY2xhc3MgQXJndW1lbnREZXNjcmlwdG9yKG9iamVjdCk6CiAgICAgX19zbG90c19fID0gKApAQCAtMTc2LDcgKzE3Nyw3IEBACiAgICAgICAgICduYW1lJywKIAogICAgICAgICAjIGxlbmd0aCBvZiBhcmd1bWVudCwgaW4gYnl0ZXM7IGFuIGludDsgVVBfVE9fTkVXTElORSBhbmQKLSAgICAgICAgIyBUQUtFTl9GUk9NX0FSR1VNRU5UezEsNH0gYXJlIG5lZ2F0aXZlIHZhbHVlcyBmb3IgdmFyaWFibGUtbGVuZ3RoCisgICAgICAgICMgVEFLRU5fRlJPTV9BUkdVTUVOVHsxLDQsOH0gYXJlIG5lZ2F0aXZlIHZhbHVlcyBmb3IgdmFyaWFibGUtbGVuZ3RoCiAgICAgICAgICMgY2FzZXMKICAgICAgICAgJ24nLAogCkBAIC0xOTcsNyArMTk4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gaW4gKFVQX1RPX05FV0xJTkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFLRU5fRlJPTV9BUkdVTUVOVDRVKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ0VSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ4VSkpCiAgICAgICAgIHNlbGYubiA9IG4KIAogICAgICAgICBzZWxmLnJlYWRlciA9IHJlYWRlcgpAQCAtMjg5LDYgKzI5MSwyNyBAQAogICAgICAgICAgICAgZG9jPSJGb3VyLWJ5dGUgdW5zaWduZWQgaW50ZWdlciwgbGl0dGxlLWVuZGlhbi4iKQogCiAKK2RlZiByZWFkX3VpbnQ4KGYpOgorICAgIHIiIiIKKyAgICA+Pj4gaW1wb3J0IGlvCisgICAgPj4+IHJlYWRfdWludDgoaW8uQnl0ZXNJTyhiJ1x4ZmZceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJykpCisgICAgMjU1CisgICAgPj4+IHJlYWRfdWludDgoaW8uQnl0ZXNJTyhiJ1x4ZmYnICogOCkpID09IDIqKjY0LTEKKyAgICBUcnVlCisgICAgIiIiCisKKyAgICBkYXRhID0gZi5yZWFkKDgpCisgICAgaWYgbGVuKGRhdGEpID09IDg6CisgICAgICAgIHJldHVybiBfdW5wYWNrKCI8USIsIGRhdGEpWzBdCisgICAgcmFpc2UgVmFsdWVFcnJvcigibm90IGVub3VnaCBkYXRhIGluIHN0cmVhbSB0byByZWFkIHVpbnQ4IikKKwordWludDggPSBBcmd1bWVudERlc2NyaXB0b3IoCisgICAgICAgICAgICBuYW1lPSd1aW50OCcsCisgICAgICAgICAgICBuPTgsCisgICAgICAgICAgICByZWFkZXI9cmVhZF91aW50OCwKKyAgICAgICAgICAgIGRvYz0iRWlnaHQtYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyLCBsaXR0bGUtZW5kaWFuLiIpCisKKwogZGVmIHJlYWRfc3RyaW5nbmwoZiwgZGVjb2RlPVRydWUsIHN0cmlwcXVvdGVzPVRydWUpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC0zODIsNiArNDA1LDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc2luZ2xlIGJsYW5rIHNlcGFyYXRpbmcgdGhlIHR3byBzdHJpbmdzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiIpCiAKKworZGVmIHJlYWRfc3RyaW5nMShmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbworICAgID4+PiByZWFkX3N0cmluZzEoaW8uQnl0ZXNJTyhiIlx4MDAiKSkKKyAgICAnJworICAgID4+PiByZWFkX3N0cmluZzEoaW8uQnl0ZXNJTyhiIlx4MDNhYmNkZWYiKSkKKyAgICAnYWJjJworICAgICIiIgorCisgICAgbiA9IHJlYWRfdWludDEoZikKKyAgICBhc3NlcnQgbiA+PSAwCisgICAgZGF0YSA9IGYucmVhZChuKQorICAgIGlmIGxlbihkYXRhKSA9PSBuOgorICAgICAgICByZXR1cm4gZGF0YS5kZWNvZGUoImxhdGluLTEiKQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgc3RyaW5nMSwgYnV0IG9ubHkgJWQgcmVtYWluIiAlCisgICAgICAgICAgICAgICAgICAgICAobiwgbGVuKGRhdGEpKSkKKworc3RyaW5nMSA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgbmFtZT0ic3RyaW5nMSIsCisgICAgICAgICAgICAgIG49VEFLRU5fRlJPTV9BUkdVTUVOVDEsCisgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX3N0cmluZzEsCisgICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgc3RyaW5nLgorCisgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIDEtYnl0ZSB1bnNpZ25lZCBpbnQgZ2l2aW5nIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhhdCBtYW55CisgICAgICAgICAgICAgIGJ5dGVzLgorICAgICAgICAgICAgICAiIiIpCisKKwogZGVmIHJlYWRfc3RyaW5nNChmKToKICAgICByIiIiCiAgICAgPj4+IGltcG9ydCBpbwpAQCAtNDE2LDI4ICs0NjksMjggQEAKICAgICAgICAgICAgICAgIiIiKQogCiAKLWRlZiByZWFkX3N0cmluZzEoZik6CitkZWYgcmVhZF9ieXRlczEoZik6CiAgICAgciIiIgogICAgID4+PiBpbXBvcnQgaW8KLSAgICA+Pj4gcmVhZF9zdHJpbmcxKGlvLkJ5dGVzSU8oYiJceDAwIikpCi0gICAgJycKLSAgICA+Pj4gcmVhZF9zdHJpbmcxKGlvLkJ5dGVzSU8oYiJceDAzYWJjZGVmIikpCi0gICAgJ2FiYycKKyAgICA+Pj4gcmVhZF9ieXRlczEoaW8uQnl0ZXNJTyhiIlx4MDAiKSkKKyAgICBiJycKKyAgICA+Pj4gcmVhZF9ieXRlczEoaW8uQnl0ZXNJTyhiIlx4MDNhYmNkZWYiKSkKKyAgICBiJ2FiYycKICAgICAiIiIKIAogICAgIG4gPSByZWFkX3VpbnQxKGYpCiAgICAgYXNzZXJ0IG4gPj0gMAogICAgIGRhdGEgPSBmLnJlYWQobikKICAgICBpZiBsZW4oZGF0YSkgPT0gbjoKLSAgICAgICAgcmV0dXJuIGRhdGEuZGVjb2RlKCJsYXRpbi0xIikKLSAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIHN0cmluZzEsIGJ1dCBvbmx5ICVkIHJlbWFpbiIgJQorICAgICAgICByZXR1cm4gZGF0YQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgYnl0ZXMxLCBidXQgb25seSAlZCByZW1haW4iICUKICAgICAgICAgICAgICAgICAgICAgIChuLCBsZW4oZGF0YSkpKQogCi1zdHJpbmcxID0gQXJndW1lbnREZXNjcmlwdG9yKAotICAgICAgICAgICAgICBuYW1lPSJzdHJpbmcxIiwKK2J5dGVzMSA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgbmFtZT0iYnl0ZXMxIiwKICAgICAgICAgICAgICAgbj1UQUtFTl9GUk9NX0FSR1VNRU5UMSwKLSAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfc3RyaW5nMSwKLSAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBzdHJpbmcuCisgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX2J5dGVzMSwKKyAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBieXRlcyBzdHJpbmcuCiAKICAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgMS1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcgdGhlIG51bWJlcgogICAgICAgICAgICAgICBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGF0IG1hbnkKQEAgLTQ4Nyw2ICs1NDAsNyBAQAogICAgICIiIgogCiAgICAgbiA9IHJlYWRfdWludDQoZikKKyAgICBhc3NlcnQgbiA+PSAwCiAgICAgaWYgbiA+IHN5cy5tYXhzaXplOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJieXRlczQgYnl0ZSBjb3VudCA+IHN5cy5tYXhzaXplOiAlZCIgJSBuKQogICAgIGRhdGEgPSBmLnJlYWQobikKQEAgLTUwNiw2ICs1NjAsNDAgQEAKICAgICAgICAgICAgICAgIiIiKQogCiAKK2RlZiByZWFkX2J5dGVzOChmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbywgc3RydWN0LCBzeXMKKyAgICA+Pj4gcmVhZF9ieXRlczgoaW8uQnl0ZXNJTyhiIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwYWJjIikpCisgICAgYicnCisgICAgPj4+IHJlYWRfYnl0ZXM4KGlvLkJ5dGVzSU8oYiJceDAzXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMGFiY2RlZiIpKQorICAgIGInYWJjJworICAgID4+PiBiaWdzaXplOCA9IHN0cnVjdC5wYWNrKCI8USIsIHN5cy5tYXhzaXplLy8zKQorICAgID4+PiByZWFkX2J5dGVzOChpby5CeXRlc0lPKGJpZ3NpemU4ICsgYiJhYmNkZWYiKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogZXhwZWN0ZWQgLi4uIGJ5dGVzIGluIGEgYnl0ZXM4LCBidXQgb25seSA2IHJlbWFpbgorICAgICIiIgorCisgICAgbiA9IHJlYWRfdWludDgoZikKKyAgICBhc3NlcnQgbiA+PSAwCisgICAgaWYgbiA+IHN5cy5tYXhzaXplOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJieXRlczggYnl0ZSBjb3VudCA+IHN5cy5tYXhzaXplOiAlZCIgJSBuKQorICAgIGRhdGEgPSBmLnJlYWQobikKKyAgICBpZiBsZW4oZGF0YSkgPT0gbjoKKyAgICAgICAgcmV0dXJuIGRhdGEKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIGJ5dGVzOCwgYnV0IG9ubHkgJWQgcmVtYWluIiAlCisgICAgICAgICAgICAgICAgICAgICAobiwgbGVuKGRhdGEpKSkKKworYnl0ZXM4ID0gQXJndW1lbnREZXNjcmlwdG9yKAorICAgICAgICAgICAgICBuYW1lPSJieXRlczgiLAorICAgICAgICAgICAgICBuPVRBS0VOX0ZST01fQVJHVU1FTlQ4VSwKKyAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfYnl0ZXM4LAorICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIGJ5dGVzIHN0cmluZy4KKworICAgICAgICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSA4LWJ5dGUgbGl0dGxlLWVuZGlhbiB1bnNpZ25lZCBpbnQgZ2l2aW5nCisgICAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMsIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoYXQgbWFueSBieXRlcy4KKyAgICAgICAgICAgICAgIiIiKQorCiBkZWYgcmVhZF91bmljb2Rlc3RyaW5nbmwoZik6CiAgICAgciIiIgogICAgID4+PiBpbXBvcnQgaW8KQEAgLTUzMSw2ICs2MTksNDYgQEAKICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUgc2VxdWVuY2VzLgogICAgICAgICAgICAgICAgICAgICAgICIiIikKIAorCitkZWYgcmVhZF91bmljb2Rlc3RyaW5nMShmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbworICAgID4+PiBzID0gJ2FiY2RcdWFiY2QnCisgICAgPj4+IGVuYyA9IHMuZW5jb2RlKCd1dGYtOCcpCisgICAgPj4+IGVuYworICAgIGInYWJjZFx4ZWFceGFmXHg4ZCcKKyAgICA+Pj4gbiA9IGJ5dGVzKFtsZW4oZW5jKV0pICAjIGxpdHRsZS1lbmRpYW4gMS1ieXRlIGxlbmd0aAorICAgID4+PiB0ID0gcmVhZF91bmljb2Rlc3RyaW5nMShpby5CeXRlc0lPKG4gKyBlbmMgKyBiJ2p1bmsnKSkKKyAgICA+Pj4gcyA9PSB0CisgICAgVHJ1ZQorCisgICAgPj4+IHJlYWRfdW5pY29kZXN0cmluZzEoaW8uQnl0ZXNJTyhuICsgZW5jWzotMV0pKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiBleHBlY3RlZCA3IGJ5dGVzIGluIGEgdW5pY29kZXN0cmluZzEsIGJ1dCBvbmx5IDYgcmVtYWluCisgICAgIiIiCisKKyAgICBuID0gcmVhZF91aW50MShmKQorICAgIGFzc2VydCBuID49IDAKKyAgICBkYXRhID0gZi5yZWFkKG4pCisgICAgaWYgbGVuKGRhdGEpID09IG46CisgICAgICAgIHJldHVybiBzdHIoZGF0YSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgdW5pY29kZXN0cmluZzEsIGJ1dCBvbmx5ICVkICIKKyAgICAgICAgICAgICAgICAgICAgICJyZW1haW4iICUgKG4sIGxlbihkYXRhKSkpCisKK3VuaWNvZGVzdHJpbmcxID0gQXJndW1lbnREZXNjcmlwdG9yKAorICAgICAgICAgICAgICAgICAgICBuYW1lPSJ1bmljb2Rlc3RyaW5nMSIsCisgICAgICAgICAgICAgICAgICAgIG49VEFLRU5fRlJPTV9BUkdVTUVOVDEsCisgICAgICAgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX3VuaWNvZGVzdHJpbmcxLAorICAgICAgICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIFVuaWNvZGUgc3RyaW5nLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIDEtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKKyAgICAgICAgICAgICAgICAgICAgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQtLSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nIC0tCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoYXQgbWFueSBieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgIiIiKQorCisKIGRlZiByZWFkX3VuaWNvZGVzdHJpbmc0KGYpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC01NTAsNiArNjc4LDcgQEAKICAgICAiIiIKIAogICAgIG4gPSByZWFkX3VpbnQ0KGYpCisgICAgYXNzZXJ0IG4gPj0gMAogICAgIGlmIG4gPiBzeXMubWF4c2l6ZToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5pY29kZXN0cmluZzQgYnl0ZSBjb3VudCA+IHN5cy5tYXhzaXplOiAlZCIgJSBuKQogICAgIGRhdGEgPSBmLnJlYWQobikKQEAgLTU3MSw2ICs3MDAsNDcgQEAKICAgICAgICAgICAgICAgICAgICAgIiIiKQogCiAKK2RlZiByZWFkX3VuaWNvZGVzdHJpbmc4KGYpOgorICAgIHIiIiIKKyAgICA+Pj4gaW1wb3J0IGlvCisgICAgPj4+IHMgPSAnYWJjZFx1YWJjZCcKKyAgICA+Pj4gZW5jID0gcy5lbmNvZGUoJ3V0Zi04JykKKyAgICA+Pj4gZW5jCisgICAgYidhYmNkXHhlYVx4YWZceDhkJworICAgID4+PiBuID0gYnl0ZXMoW2xlbihlbmMpXSkgKyBieXRlcyg3KSAgIyBsaXR0bGUtZW5kaWFuIDgtYnl0ZSBsZW5ndGgKKyAgICA+Pj4gdCA9IHJlYWRfdW5pY29kZXN0cmluZzgoaW8uQnl0ZXNJTyhuICsgZW5jICsgYidqdW5rJykpCisgICAgPj4+IHMgPT0gdAorICAgIFRydWUKKworICAgID4+PiByZWFkX3VuaWNvZGVzdHJpbmc4KGlvLkJ5dGVzSU8obiArIGVuY1s6LTFdKSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogZXhwZWN0ZWQgNyBieXRlcyBpbiBhIHVuaWNvZGVzdHJpbmc4LCBidXQgb25seSA2IHJlbWFpbgorICAgICIiIgorCisgICAgbiA9IHJlYWRfdWludDgoZikKKyAgICBhc3NlcnQgbiA+PSAwCisgICAgaWYgbiA+IHN5cy5tYXhzaXplOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmljb2Rlc3RyaW5nOCBieXRlIGNvdW50ID4gc3lzLm1heHNpemU6ICVkIiAlIG4pCisgICAgZGF0YSA9IGYucmVhZChuKQorICAgIGlmIGxlbihkYXRhKSA9PSBuOgorICAgICAgICByZXR1cm4gc3RyKGRhdGEsICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIHVuaWNvZGVzdHJpbmc4LCBidXQgb25seSAlZCAiCisgICAgICAgICAgICAgICAgICAgICAicmVtYWluIiAlIChuLCBsZW4oZGF0YSkpKQorCit1bmljb2Rlc3RyaW5nOCA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0idW5pY29kZXN0cmluZzgiLAorICAgICAgICAgICAgICAgICAgICBuPVRBS0VOX0ZST01fQVJHVU1FTlQ4VSwKKyAgICAgICAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfdW5pY29kZXN0cmluZzgsCisgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgVW5pY29kZSBzdHJpbmcuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgOC1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAorICAgICAgICAgICAgICAgICAgICBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudC0tIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcgLS0KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhhdCBtYW55IGJ5dGVzLgorICAgICAgICAgICAgICAgICAgICAiIiIpCisKKwogZGVmIHJlYWRfZGVjaW1hbG5sX3Nob3J0KGYpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC03OTksMTAzICs5NjksMTA3IEBACiAgICAgICAgIHJldHVybiBzZWxmLm5hbWUKIAogCi1weWludCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgbmFtZT0naW50JywKLSAgICAgICAgICAgIG9idHlwZT1pbnQsCi0gICAgICAgICAgICBkb2M9IkEgc2hvcnQgKGFzIG9wcG9zZWQgdG8gbG9uZykgUHl0aG9uIGludGVnZXIgb2JqZWN0LiIpCi0KLXB5bG9uZyA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgIG5hbWU9J2xvbmcnLAotICAgICAgICAgICAgIG9idHlwZT1pbnQsCi0gICAgICAgICAgICAgZG9jPSJBIGxvbmcgKGFzIG9wcG9zZWQgdG8gc2hvcnQpIFB5dGhvbiBpbnRlZ2VyIG9iamVjdC4iKQorcHlpbnQgPSBweWxvbmcgPSBTdGFja09iamVjdCgKKyAgICBuYW1lPSdpbnQnLAorICAgIG9idHlwZT1pbnQsCisgICAgZG9jPSJBIFB5dGhvbiBpbnRlZ2VyIG9iamVjdC4iKQogCiBweWludGVnZXJfb3JfYm9vbCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0naW50X29yX2Jvb2wnLAotICAgICAgICAgICAgICAgICAgICAgICAgb2J0eXBlPShpbnQsIGJvb2wpLAotICAgICAgICAgICAgICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiBpbnRlZ2VyIG9iamVjdCAoc2hvcnQgb3IgbG9uZyksIG9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSBQeXRob24gYm9vbC4iKQorICAgIG5hbWU9J2ludF9vcl9ib29sJywKKyAgICBvYnR5cGU9KGludCwgYm9vbCksCisgICAgZG9jPSJBIFB5dGhvbiBpbnRlZ2VyIG9yIGJvb2xlYW4gb2JqZWN0LiIpCiAKIHB5Ym9vbCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgIG5hbWU9J2Jvb2wnLAotICAgICAgICAgICAgIG9idHlwZT0oYm9vbCwpLAotICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gYm9vbCBvYmplY3QuIikKKyAgICBuYW1lPSdib29sJywKKyAgICBvYnR5cGU9Ym9vbCwKKyAgICBkb2M9IkEgUHl0aG9uIGJvb2xlYW4gb2JqZWN0LiIpCiAKIHB5ZmxvYXQgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgbmFtZT0nZmxvYXQnLAotICAgICAgICAgICAgICBvYnR5cGU9ZmxvYXQsCi0gICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gZmxvYXQgb2JqZWN0LiIpCisgICAgbmFtZT0nZmxvYXQnLAorICAgIG9idHlwZT1mbG9hdCwKKyAgICBkb2M9IkEgUHl0aG9uIGZsb2F0IG9iamVjdC4iKQogCi1weXN0cmluZyA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgbmFtZT0nc3RyaW5nJywKLSAgICAgICAgICAgICAgIG9idHlwZT1ieXRlcywKLSAgICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gKDgtYml0KSBzdHJpbmcgb2JqZWN0LiIpCitweWJ5dGVzX29yX3N0ciA9IHB5c3RyaW5nID0gU3RhY2tPYmplY3QoCisgICAgbmFtZT0nYnl0ZXNfb3Jfc3RyJywKKyAgICBvYnR5cGU9KGJ5dGVzLCBzdHIpLAorICAgIGRvYz0iQSBQeXRob24gYnl0ZXMgb3IgKFVuaWNvZGUpIHN0cmluZyBvYmplY3QuIikKIAogcHlieXRlcyA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgbmFtZT0nYnl0ZXMnLAotICAgICAgICAgICAgICAgb2J0eXBlPWJ5dGVzLAotICAgICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiBieXRlcyBvYmplY3QuIikKKyAgICBuYW1lPSdieXRlcycsCisgICAgb2J0eXBlPWJ5dGVzLAorICAgIGRvYz0iQSBQeXRob24gYnl0ZXMgb2JqZWN0LiIpCiAKIHB5dW5pY29kZSA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgIG5hbWU9J3N0cicsCi0gICAgICAgICAgICAgICAgb2J0eXBlPXN0ciwKLSAgICAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIChVbmljb2RlKSBzdHJpbmcgb2JqZWN0LiIpCisgICAgbmFtZT0nc3RyJywKKyAgICBvYnR5cGU9c3RyLAorICAgIGRvYz0iQSBQeXRob24gKFVuaWNvZGUpIHN0cmluZyBvYmplY3QuIikKIAogcHlub25lID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgbmFtZT0iTm9uZSIsCi0gICAgICAgICAgICAgb2J0eXBlPXR5cGUoTm9uZSksCi0gICAgICAgICAgICAgZG9jPSJUaGUgUHl0aG9uIE5vbmUgb2JqZWN0LiIpCisgICAgbmFtZT0iTm9uZSIsCisgICAgb2J0eXBlPXR5cGUoTm9uZSksCisgICAgZG9jPSJUaGUgUHl0aG9uIE5vbmUgb2JqZWN0LiIpCiAKIHB5dHVwbGUgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgbmFtZT0idHVwbGUiLAotICAgICAgICAgICAgICBvYnR5cGU9dHVwbGUsCi0gICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gdHVwbGUgb2JqZWN0LiIpCisgICAgbmFtZT0idHVwbGUiLAorICAgIG9idHlwZT10dXBsZSwKKyAgICBkb2M9IkEgUHl0aG9uIHR1cGxlIG9iamVjdC4iKQogCiBweWxpc3QgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICBuYW1lPSJsaXN0IiwKLSAgICAgICAgICAgICBvYnR5cGU9bGlzdCwKLSAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGxpc3Qgb2JqZWN0LiIpCisgICAgbmFtZT0ibGlzdCIsCisgICAgb2J0eXBlPWxpc3QsCisgICAgZG9jPSJBIFB5dGhvbiBsaXN0IG9iamVjdC4iKQogCiBweWRpY3QgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICBuYW1lPSJkaWN0IiwKLSAgICAgICAgICAgICBvYnR5cGU9ZGljdCwKLSAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGRpY3Qgb2JqZWN0LiIpCisgICAgbmFtZT0iZGljdCIsCisgICAgb2J0eXBlPWRpY3QsCisgICAgZG9jPSJBIFB5dGhvbiBkaWN0IG9iamVjdC4iKQorCitweXNldCA9IFN0YWNrT2JqZWN0KAorICAgIG5hbWU9InNldCIsCisgICAgb2J0eXBlPXNldCwKKyAgICBkb2M9IkEgUHl0aG9uIHNldCBvYmplY3QuIikKKworcHlmcm96ZW5zZXQgPSBTdGFja09iamVjdCgKKyAgICBuYW1lPSJmcm96ZW5zZXQiLAorICAgIG9idHlwZT1zZXQsCisgICAgZG9jPSJBIFB5dGhvbiBmcm96ZW5zZXQgb2JqZWN0LiIpCiAKIGFueW9iamVjdCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgIG5hbWU9J2FueScsCi0gICAgICAgICAgICAgICAgb2J0eXBlPW9iamVjdCwKLSAgICAgICAgICAgICAgICBkb2M9IkFueSBraW5kIG9mIG9iamVjdCB3aGF0c29ldmVyLiIpCisgICAgbmFtZT0nYW55JywKKyAgICBvYnR5cGU9b2JqZWN0LAorICAgIGRvYz0iQW55IGtpbmQgb2Ygb2JqZWN0IHdoYXRzb2V2ZXIuIikKIAogbWFya29iamVjdCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgICBuYW1lPSJtYXJrIiwKLSAgICAgICAgICAgICAgICAgb2J0eXBlPVN0YWNrT2JqZWN0LAotICAgICAgICAgICAgICAgICBkb2M9IiIiJ1RoZSBtYXJrJyBpcyBhIHVuaXF1ZSBvYmplY3QuCisgICAgbmFtZT0ibWFyayIsCisgICAgb2J0eXBlPVN0YWNrT2JqZWN0LAorICAgIGRvYz0iIiInVGhlIG1hcmsnIGlzIGEgdW5pcXVlIG9iamVjdC4KIAotICAgICAgICAgICAgICAgICBPcGNvZGVzIHRoYXQgb3BlcmF0ZSBvbiBhIHZhcmlhYmxlIG51bWJlciBvZiBvYmplY3RzCi0gICAgICAgICAgICAgICAgIGdlbmVyYWxseSBkb24ndCBlbWJlZCB0aGUgY291bnQgb2Ygb2JqZWN0cyBpbiB0aGUgb3Bjb2RlLAotICAgICAgICAgICAgICAgICBvciBwdWxsIGl0IG9mZiB0aGUgc3RhY2suICBJbnN0ZWFkIHRoZSBNQVJLIG9wY29kZSBpcyB1c2VkCi0gICAgICAgICAgICAgICAgIHRvIHB1c2ggYSBzcGVjaWFsIG1hcmtlciBvYmplY3Qgb24gdGhlIHN0YWNrLCBhbmQgdGhlbgotICAgICAgICAgICAgICAgICBzb21lIG90aGVyIG9wY29kZXMgZ3JhYiBhbGwgdGhlIG9iamVjdHMgZnJvbSB0aGUgdG9wIG9mCi0gICAgICAgICAgICAgICAgIHRoZSBzdGFjayBkb3duIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIHRvcG1vc3QgbWFya2VyCi0gICAgICAgICAgICAgICAgIG9iamVjdC4KLSAgICAgICAgICAgICAgICAgIiIiKQorT3Bjb2RlcyB0aGF0IG9wZXJhdGUgb24gYSB2YXJpYWJsZSBudW1iZXIgb2Ygb2JqZWN0cworZ2VuZXJhbGx5IGRvbid0IGVtYmVkIHRoZSBjb3VudCBvZiBvYmplY3RzIGluIHRoZSBvcGNvZGUsCitvciBwdWxsIGl0IG9mZiB0aGUgc3RhY2suICBJbnN0ZWFkIHRoZSBNQVJLIG9wY29kZSBpcyB1c2VkCit0byBwdXNoIGEgc3BlY2lhbCBtYXJrZXIgb2JqZWN0IG9uIHRoZSBzdGFjaywgYW5kIHRoZW4KK3NvbWUgb3RoZXIgb3Bjb2RlcyBncmFiIGFsbCB0aGUgb2JqZWN0cyBmcm9tIHRoZSB0b3Agb2YKK3RoZSBzdGFjayBkb3duIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIHRvcG1vc3QgbWFya2VyCitvYmplY3QuCisiIiIpCiAKIHN0YWNrc2xpY2UgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgICAgbmFtZT0ic3RhY2tzbGljZSIsCi0gICAgICAgICAgICAgICAgIG9idHlwZT1TdGFja09iamVjdCwKLSAgICAgICAgICAgICAgICAgZG9jPSIiIkFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb250aWd1b3VzIHNsaWNlIG9mIHRoZSBzdGFjay4KKyAgICBuYW1lPSJzdGFja3NsaWNlIiwKKyAgICBvYnR5cGU9U3RhY2tPYmplY3QsCisgICAgZG9jPSIiIkFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb250aWd1b3VzIHNsaWNlIG9mIHRoZSBzdGFjay4KIAotICAgICAgICAgICAgICAgICBUaGlzIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBtYXJrb2JqZWN0LCB0byByZXByZXNlbnQgYWxsCi0gICAgICAgICAgICAgICAgIG9mIHRoZSBzdGFjayBmb2xsb3dpbmcgdGhlIHRvcG1vc3QgbWFya29iamVjdC4gIEZvciBleGFtcGxlLAotICAgICAgICAgICAgICAgICB0aGUgUE9QX01BUksgb3Bjb2RlIGNoYW5nZXMgdGhlIHN0YWNrIGZyb20KK1RoaXMgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG1hcmtvYmplY3QsIHRvIHJlcHJlc2VudCBhbGwKK29mIHRoZSBzdGFjayBmb2xsb3dpbmcgdGhlIHRvcG1vc3QgbWFya29iamVjdC4gIEZvciBleGFtcGxlLAordGhlIFBPUF9NQVJLIG9wY29kZSBjaGFuZ2VzIHRoZSBzdGFjayBmcm9tCiAKLSAgICAgICAgICAgICAgICAgICAgIFsuLi4sIG1hcmtvYmplY3QsIHN0YWNrc2xpY2VdCi0gICAgICAgICAgICAgICAgIHRvCi0gICAgICAgICAgICAgICAgICAgICBbLi4uXQorICAgIFsuLi4sIG1hcmtvYmplY3QsIHN0YWNrc2xpY2VdCit0bworICAgIFsuLi5dCiAKLSAgICAgICAgICAgICAgICAgTm8gbWF0dGVyIGhvdyBtYW55IG9iamVjdCBhcmUgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSB0b3Btb3N0Ci0gICAgICAgICAgICAgICAgIG1hcmtvYmplY3QsIFBPUF9NQVJLIGdldHMgcmlkIG9mIGFsbCBvZiB0aGVtIChpbmNsdWRpbmcgdGhlCi0gICAgICAgICAgICAgICAgIHRvcG1vc3QgbWFya29iamVjdCB0b28pLgotICAgICAgICAgICAgICAgICAiIiIpCitObyBtYXR0ZXIgaG93IG1hbnkgb2JqZWN0IGFyZSBvbiB0aGUgc3RhY2sgYWZ0ZXIgdGhlIHRvcG1vc3QKK21hcmtvYmplY3QsIFBPUF9NQVJLIGdldHMgcmlkIG9mIGFsbCBvZiB0aGVtIChpbmNsdWRpbmcgdGhlCit0b3Btb3N0IG1hcmtvYmplY3QgdG9vKS4KKyIiIikKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIERlc2NyaXB0b3JzIGZvciBwaWNrbGUgb3Bjb2Rlcy4KQEAgLTEwMzIsNyArMTIwNiw3IEBACiAgICAgICBjb2RlPSdMJywKICAgICAgIGFyZz1kZWNpbWFsbmxfbG9uZywKICAgICAgIHN0YWNrX2JlZm9yZT1bXSwKLSAgICAgIHN0YWNrX2FmdGVyPVtweWxvbmddLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5aW50XSwKICAgICAgIHByb3RvPTAsCiAgICAgICBkb2M9IiIiUHVzaCBhIGxvbmcgaW50ZWdlci4KIApAQCAtMTA1MCw3ICsxMjI0LDcgQEAKICAgICAgIGNvZGU9J1x4OGEnLAogICAgICAgYXJnPWxvbmcxLAogICAgICAgc3RhY2tfYmVmb3JlPVtdLAotICAgICAgc3RhY2tfYWZ0ZXI9W3B5bG9uZ10sCisgICAgICBzdGFja19hZnRlcj1bcHlpbnRdLAogICAgICAgcHJvdG89MiwKICAgICAgIGRvYz0iIiJMb25nIGludGVnZXIgdXNpbmcgb25lLWJ5dGUgbGVuZ3RoLgogCkBAIC0xMDYxLDcgKzEyMzUsNyBAQAogICAgICAgY29kZT0nXHg4YicsCiAgICAgICBhcmc9bG9uZzQsCiAgICAgICBzdGFja19iZWZvcmU9W10sCi0gICAgICBzdGFja19hZnRlcj1bcHlsb25nXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWludF0sCiAgICAgICBwcm90bz0yLAogICAgICAgZG9jPSIiIkxvbmcgaW50ZWdlciB1c2luZyBmb3VuZC1ieXRlIGxlbmd0aC4KIApAQCAtMTA3NCw0NSArMTI0OCw1MCBAQAogICAgICAgY29kZT0nUycsCiAgICAgICBhcmc9c3RyaW5nbmwsCiAgICAgICBzdGFja19iZWZvcmU9W10sCi0gICAgICBzdGFja19hZnRlcj1bcHlzdHJpbmddLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5Ynl0ZXNfb3Jfc3RyXSwKICAgICAgIHByb3RvPTAsCiAgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBzdHJpbmcgb2JqZWN0LgogCiAgICAgICBUaGUgYXJndW1lbnQgaXMgYSByZXByLXN0eWxlIHN0cmluZywgd2l0aCBicmFja2V0aW5nIHF1b3RlIGNoYXJhY3RlcnMsCiAgICAgICBhbmQgcGVyaGFwcyBlbWJlZGRlZCBlc2NhcGVzLiAgVGhlIGFyZ3VtZW50IGV4dGVuZHMgdW50aWwgdGhlIG5leHQKLSAgICAgIG5ld2xpbmUgY2hhcmFjdGVyLiAgKEFjdHVhbGx5LCB0aGV5IGFyZSBkZWNvZGVkIGludG8gYSBzdHIgaW5zdGFuY2UKKyAgICAgIG5ld2xpbmUgY2hhcmFjdGVyLiAgVGhlc2UgYXJlIHVzdWFsbHkgZGVjb2RlZCBpbnRvIGEgc3RyIGluc3RhbmNlCiAgICAgICB1c2luZyB0aGUgZW5jb2RpbmcgZ2l2ZW4gdG8gdGhlIFVucGlja2xlciBjb25zdHJ1Y3Rvci4gb3IgdGhlIGRlZmF1bHQsCi0gICAgICAnQVNDSUknLikKKyAgICAgICdBU0NJSScuICBJZiB0aGUgZW5jb2RpbmcgZ2l2ZW4gd2FzICdieXRlcycgaG93ZXZlciwgdGhleSB3aWxsIGJlCisgICAgICBkZWNvZGVkIGFzIGJ5dGVzIG9iamVjdCBpbnN0ZWFkLgogICAgICAgIiIiKSwKIAogICAgIEkobmFtZT0nQklOU1RSSU5HJywKICAgICAgIGNvZGU9J1QnLAogICAgICAgYXJnPXN0cmluZzQsCiAgICAgICBzdGFja19iZWZvcmU9W10sCi0gICAgICBzdGFja19hZnRlcj1bcHlzdHJpbmddLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5Ynl0ZXNfb3Jfc3RyXSwKICAgICAgIHByb3RvPTEsCiAgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBzdHJpbmcgb2JqZWN0LgogCi0gICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogIHRoZSBmaXJzdCBpcyBhIDQtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKLSAgICAgIGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGlzIHRoYXQgbWFueQotICAgICAgYnl0ZXMsIHdoaWNoIGFyZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZyBjb250ZW50LiAgKEFjdHVhbGx5LAotICAgICAgdGhleSBhcmUgZGVjb2RlZCBpbnRvIGEgc3RyIGluc3RhbmNlIHVzaW5nIHRoZSBlbmNvZGluZyBnaXZlbiB0byB0aGUKLSAgICAgIFVucGlja2xlciBjb25zdHJ1Y3Rvci4gb3IgdGhlIGRlZmF1bHQsICdBU0NJSScuKQorICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6IHRoZSBmaXJzdCBpcyBhIDQtYnl0ZSBsaXR0bGUtZW5kaWFuCisgICAgICBzaWduZWQgaW50IGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUKKyAgICAgIHNlY29uZCBpcyB0aGF0IG1hbnkgYnl0ZXMsIHdoaWNoIGFyZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZworICAgICAgY29udGVudC4gIFRoZXNlIGFyZSB1c3VhbGx5IGRlY29kZWQgaW50byBhIHN0ciBpbnN0YW5jZSB1c2luZyB0aGUKKyAgICAgIGVuY29kaW5nIGdpdmVuIHRvIHRoZSBVbnBpY2tsZXIgY29uc3RydWN0b3IuIG9yIHRoZSBkZWZhdWx0LAorICAgICAgJ0FTQ0lJJy4gIElmIHRoZSBlbmNvZGluZyBnaXZlbiB3YXMgJ2J5dGVzJyBob3dldmVyLCB0aGV5IHdpbGwgYmUKKyAgICAgIGRlY29kZWQgYXMgYnl0ZXMgb2JqZWN0IGluc3RlYWQuCiAgICAgICAiIiIpLAogCiAgICAgSShuYW1lPSdTSE9SVF9CSU5TVFJJTkcnLAogICAgICAgY29kZT0nVScsCiAgICAgICBhcmc9c3RyaW5nMSwKICAgICAgIHN0YWNrX2JlZm9yZT1bXSwKLSAgICAgIHN0YWNrX2FmdGVyPVtweXN0cmluZ10sCisgICAgICBzdGFja19hZnRlcj1bcHlieXRlc19vcl9zdHJdLAogICAgICAgcHJvdG89MSwKICAgICAgIGRvYz0iIiJQdXNoIGEgUHl0aG9uIHN0cmluZyBvYmplY3QuCiAKLSAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgMS1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcKLSAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgaXMgdGhhdCBtYW55IGJ5dGVzLAotICAgICAgd2hpY2ggYXJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgc3RyaW5nIGNvbnRlbnQuICAoQWN0dWFsbHksIHRoZXkKLSAgICAgIGFyZSBkZWNvZGVkIGludG8gYSBzdHIgaW5zdGFuY2UgdXNpbmcgdGhlIGVuY29kaW5nIGdpdmVuIHRvIHRoZQotICAgICAgVW5waWNrbGVyIGNvbnN0cnVjdG9yLiBvciB0aGUgZGVmYXVsdCwgJ0FTQ0lJJy4pCisgICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogdGhlIGZpcnN0IGlzIGEgMS1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcKKyAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgaXMgdGhhdCBtYW55CisgICAgICBieXRlcywgd2hpY2ggYXJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgc3RyaW5nIGNvbnRlbnQuICBUaGVzZSBhcmUKKyAgICAgIHVzdWFsbHkgZGVjb2RlZCBpbnRvIGEgc3RyIGluc3RhbmNlIHVzaW5nIHRoZSBlbmNvZGluZyBnaXZlbiB0bworICAgICAgdGhlIFVucGlja2xlciBjb25zdHJ1Y3Rvci4gb3IgdGhlIGRlZmF1bHQsICdBU0NJSScuICBJZiB0aGUKKyAgICAgIGVuY29kaW5nIGdpdmVuIHdhcyAnYnl0ZXMnIGhvd2V2ZXIsIHRoZXkgd2lsbCBiZSBkZWNvZGVkIGFzIGJ5dGVzCisgICAgICBvYmplY3QgaW5zdGVhZC4KICAgICAgICIiIiksCiAKICAgICAjIEJ5dGVzIChwcm90b2NvbCAzIG9ubHk7IG9sZGVyIHByb3RvY29scyBkb24ndCBzdXBwb3J0IGJ5dGVzIGF0IGFsbCkKQEAgLTExNDMsNiArMTMyMiwxOSBAQAogICAgICAgbGl0ZXJhbGx5IGFzIHRoZSBzdHJpbmcgY29udGVudC4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J0JJTkJZVEVTOCcsCisgICAgICBjb2RlPSdceDhlJywKKyAgICAgIGFyZz1ieXRlczgsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bcHlieXRlc10sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIlB1c2ggYSBQeXRob24gYnl0ZXMgb2JqZWN0LgorCisgICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogIHRoZSBmaXJzdCBpcyBhIDgtYnl0ZSB1bnNpZ25lZCBpbnQgZ2l2aW5nCisgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGlzIHRoYXQgbWFueSBieXRlcywKKyAgICAgIHdoaWNoIGFyZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZyBjb250ZW50LgorICAgICAgIiIiKSwKKwogICAgICMgV2F5cyB0byBzcGVsbCBOb25lLgogCiAgICAgSShuYW1lPSdOT05FJywKQEAgLTExOTEsNiArMTM4MywxOSBAQAogICAgICAgdW50aWwgdGhlIG5leHQgbmV3bGluZSBjaGFyYWN0ZXIuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdTSE9SVF9CSU5VTklDT0RFJywKKyAgICAgIGNvZGU9J1x4OGMnLAorICAgICAgYXJnPXVuaWNvZGVzdHJpbmcxLAorICAgICAgc3RhY2tfYmVmb3JlPVtdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5dW5pY29kZV0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIlB1c2ggYSBQeXRob24gVW5pY29kZSBzdHJpbmcgb2JqZWN0LgorCisgICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogIHRoZSBmaXJzdCBpcyBhIDEtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKKyAgICAgIGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcuICBUaGUgc2Vjb25kIGlzIHRoYXQgbWFueQorICAgICAgYnl0ZXMsIGFuZCBpcyB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nLgorICAgICAgIiIiKSwKKwogICAgIEkobmFtZT0nQklOVU5JQ09ERScsCiAgICAgICBjb2RlPSdYJywKICAgICAgIGFyZz11bmljb2Rlc3RyaW5nNCwKQEAgLTEyMDQsNiArMTQwOSwxOSBAQAogICAgICAgYnl0ZXMsIGFuZCBpcyB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nLgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nQklOVU5JQ09ERTgnLAorICAgICAgY29kZT0nXHg4ZCcsCisgICAgICBhcmc9dW5pY29kZXN0cmluZzgsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bcHl1bmljb2RlXSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBVbmljb2RlIHN0cmluZyBvYmplY3QuCisKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgOC1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAorICAgICAgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZy4gIFRoZSBzZWNvbmQgaXMgdGhhdCBtYW55CisgICAgICBieXRlcywgYW5kIGlzIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcuCisgICAgICAiIiIpLAorCiAgICAgIyBXYXlzIHRvIHNwZWxsIGZsb2F0cy4KIAogICAgIEkobmFtZT0nRkxPQVQnLApAQCAtMTQyOSw2ICsxNjQ3LDU0IEBACiAgICAgICAxLCAyLCAuLi4sIG4sIGFuZCBpbiB0aGF0IG9yZGVyLgogICAgICAgIiIiKSwKIAorICAgICMgV2F5cyB0byBidWlsZCBzZXRzCisKKyAgICBJKG5hbWU9J0VNUFRZX1NFVCcsCisgICAgICBjb2RlPSdceDhmJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVtdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5c2V0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IlB1c2ggYW4gZW1wdHkgc2V0LiIpLAorCisgICAgSShuYW1lPSdBRERJVEVNUycsCisgICAgICBjb2RlPSdceDkwJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVtweXNldCwgbWFya29iamVjdCwgc3RhY2tzbGljZV0sCisgICAgICBzdGFja19hZnRlcj1bcHlzZXRdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJBZGQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBpdGVtcyB0byBhbiBleGlzdGluZyBzZXQuCisKKyAgICAgIFRoZSBzbGljZSBvZiB0aGUgc3RhY2sgZm9sbG93aW5nIHRoZSB0b3Btb3N0IG1hcmtvYmplY3QgaXMgdGFrZW4gYXMKKyAgICAgIGEgc2VxdWVuY2Ugb2YgaXRlbXMsIGFkZGVkIHRvIHRoZSBzZXQgaW1tZWRpYXRlbHkgdW5kZXIgdGhlIHRvcG1vc3QKKyAgICAgIG1hcmtvYmplY3QuICBFdmVyeXRoaW5nIGF0IGFuZCBhZnRlciB0aGUgdG9wbW9zdCBtYXJrb2JqZWN0IGlzIHBvcHBlZCwKKyAgICAgIGxlYXZpbmcgdGhlIG11dGF0ZWQgc2V0IGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorCisgICAgICBTdGFjayBiZWZvcmU6ICAuLi4gcHlzZXQgbWFya29iamVjdCBpdGVtXzEgLi4uIGl0ZW1fbgorICAgICAgU3RhY2sgYWZ0ZXI6ICAgLi4uIHB5c2V0CisKKyAgICAgIHdoZXJlIHB5c2V0IGhhcyBiZWVuIG1vZGlmaWVkIHZpYSBweXNldC5hZGQoaXRlbV9pKSA9IGl0ZW1faSBmb3IgaSBpbgorICAgICAgMSwgMiwgLi4uLCBuLCBhbmQgaW4gdGhhdCBvcmRlci4KKyAgICAgICIiIiksCisKKyAgICAjIFdheSB0byBidWlsZCBmcm96ZW5zZXRzCisKKyAgICBJKG5hbWU9J0ZST1pFTlNFVCcsCisgICAgICBjb2RlPSdceDkxJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVttYXJrb2JqZWN0LCBzdGFja3NsaWNlXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWZyb3plbnNldF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIkJ1aWxkIGEgZnJvemVuc2V0IG91dCBvZiB0aGUgdG9wbW9zdCBzbGljZSwgYWZ0ZXIgbWFya29iamVjdC4KKworICAgICAgQWxsIHRoZSBzdGFjayBlbnRyaWVzIGZvbGxvd2luZyB0aGUgdG9wbW9zdCBtYXJrb2JqZWN0IGFyZSBwbGFjZWQgaW50bworICAgICAgYSBzaW5nbGUgUHl0aG9uIGZyb3plbnNldCwgd2hpY2ggc2luZ2xlIGZyb3plbnNldCBvYmplY3QgcmVwbGFjZXMgYWxsCisgICAgICBvZiB0aGUgc3RhY2sgZnJvbSB0aGUgdG9wbW9zdCBtYXJrb2JqZWN0IG9ud2FyZC4gIEZvciBleGFtcGxlLAorCisgICAgICBTdGFjayBiZWZvcmU6IC4uLiBtYXJrb2JqZWN0IDEgMiAzCisgICAgICBTdGFjayBhZnRlcjogIC4uLiBmcm96ZW5zZXQoezEsIDIsIDN9KQorICAgICAgIiIiKSwKKwogICAgICMgU3RhY2sgbWFuaXB1bGF0aW9uLgogCiAgICAgSShuYW1lPSdQT1AnLApAQCAtMTU1MCw2ICsxODE2LDE4IEBACiAgICAgICB1bnNpZ25lZCBsaXR0bGUtZW5kaWFuIGludGVnZXIgZm9sbG93aW5nLgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nTUVNT0laRScsCisgICAgICBjb2RlPSdceDk0JywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVthbnlvYmplY3RdLAorICAgICAgc3RhY2tfYWZ0ZXI9W2FueW9iamVjdF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIlN0b3JlIHRoZSBzdGFjayB0b3AgaW50byB0aGUgbWVtby4gIFRoZSBzdGFjayBpcyBub3QgcG9wcGVkLgorCisgICAgICBUaGUgaW5kZXggb2YgdGhlIG1lbW8gbG9jYXRpb24gdG8gd3JpdGUgaXMgdGhlIG51bWJlciBvZgorICAgICAgZWxlbWVudHMgY3VycmVudGx5IHByZXNlbnQgaW4gdGhlIG1lbW8uCisgICAgICAiIiIpLAorCiAgICAgIyBBY2Nlc3MgdGhlIGV4dGVuc2lvbiByZWdpc3RyeSAocHJlZGVmaW5lZCBvYmplY3RzKS4gIEFraW4gdG8gdGhlIEdFVAogICAgICMgZmFtaWx5LgogCkBAIC0xNjE1LDYgKzE4OTMsMTUgQEAKICAgICAgIHN0YWNrLCBzbyB1bnBpY2tsaW5nIHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgZm9ybSBvZiBsb29rdXAuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdTVEFDS19HTE9CQUwnLAorICAgICAgY29kZT0nXHg5MycsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bcHl1bmljb2RlLCBweXVuaWNvZGVdLAorICAgICAgc3RhY2tfYWZ0ZXI9W2FueW9iamVjdF0sCisgICAgICBwcm90bz0wLAorICAgICAgZG9jPSIiIlB1c2ggYSBnbG9iYWwgb2JqZWN0IChtb2R1bGUuYXR0cikgb24gdGhlIHN0YWNrLgorICAgICAgIiIiKSwKKwogICAgICMgV2F5cyB0byBidWlsZCBvYmplY3RzIG9mIGNsYXNzZXMgcGlja2xlIGRvZXNuJ3Qga25vdyBhYm91dCBkaXJlY3RseQogICAgICMgKHVzZXItZGVmaW5lZCBjbGFzc2VzKS4gIEkgZGVzcGFpciBvZiBkb2N1bWVudGluZyB0aGlzIGFjY3VyYXRlbHkKICAgICAjIGFuZCBjb21wcmVoZW5zaWJseSAtLSB5b3UgcmVhbGx5IGhhdmUgdG8gcmVhZCB0aGUgcGlja2xlIGNvZGUgdG8KQEAgLTE3NzEsNiArMjA1OCwyMSBAQAogICAgICAgb250byB0aGUgc3RhY2suCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdORVdPQkpfRVgnLAorICAgICAgY29kZT0nXHg5MicsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bYW55b2JqZWN0LCBhbnlvYmplY3QsIGFueW9iamVjdF0sCisgICAgICBzdGFja19hZnRlcj1bYW55b2JqZWN0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiQnVpbGQgYW4gb2JqZWN0IGluc3RhbmNlLgorCisgICAgICBUaGUgc3RhY2sgYmVmb3JlIHNob3VsZCBiZSB0aG91Z2h0IG9mIGFzIGNvbnRhaW5pbmcgYSBjbGFzcworICAgICAgb2JqZWN0IGZvbGxvd2VkIGJ5IGFuIGFyZ3VtZW50IHR1cGxlIGFuZCBieSBhIGtleXdvcmQgYXJndW1lbnQgZGljdAorICAgICAgKHRoZSBkaWN0IGJlaW5nIHRoZSBzdGFjayB0b3ApLiAgQ2FsbCB0aGVzZSBjbHMgYW5kIGFyZ3MuICBUaGV5IGFyZQorICAgICAgcG9wcGVkIG9mZiB0aGUgc3RhY2ssIGFuZCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKKyAgICAgIGNscy5fX25ld19fKGNscywgKmFyZ3MsICprd2FyZ3MpIGlzICBwdXNoZWQgYmFjayAgb250byB0aGUgc3RhY2suCisgICAgICAiIiIpLAorCiAgICAgIyBNYWNoaW5lIGNvbnRyb2wuCiAKICAgICBJKG5hbWU9J1BST1RPJywKQEAgLTE3OTgsNiArMjEwMCwyMCBAQAogICAgICAgZW1wdHkgdGhlbi4KICAgICAgICIiIiksCiAKKyAgICAjIEZyYW1pbmcgc3VwcG9ydC4KKworICAgIEkobmFtZT0nRlJBTUUnLAorICAgICAgY29kZT0nXHg5NScsCisgICAgICBhcmc9dWludDgsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bXSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiSW5kaWNhdGUgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBmcmFtZS4KKworICAgICAgVGhlIHVucGlja2xlciBtYXkgdXNlIHRoaXMgb3Bjb2RlIHRvIHNhZmVseSBwcmVmZXRjaCBkYXRhIGZyb20gaXRzCisgICAgICB1bmRlcmx5aW5nIHN0cmVhbS4KKyAgICAgICIiIiksCisKICAgICAjIFdheXMgdG8gZGVhbCB3aXRoIHBlcnNpc3RlbnQgSURzLgogCiAgICAgSShuYW1lPSdQRVJTSUQnLApAQCAtMTkwNCw2ICsyMjIwLDM4IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQSBwaWNrbGUgb3Bjb2RlIGdlbmVyYXRvci4KIAorZGVmIF9nZW5vcHMoZGF0YSwgeWllbGRfZW5kX3Bvcz1GYWxzZSk6CisgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBieXRlc190eXBlcyk6CisgICAgICAgIGRhdGEgPSBpby5CeXRlc0lPKGRhdGEpCisKKyAgICBpZiBoYXNhdHRyKGRhdGEsICJ0ZWxsIik6CisgICAgICAgIGdldHBvcyA9IGRhdGEudGVsbAorICAgIGVsc2U6CisgICAgICAgIGdldHBvcyA9IGxhbWJkYTogTm9uZQorCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgcG9zID0gZ2V0cG9zKCkKKyAgICAgICAgY29kZSA9IGRhdGEucmVhZCgxKQorICAgICAgICBvcGNvZGUgPSBjb2RlMm9wLmdldChjb2RlLmRlY29kZSgibGF0aW4tMSIpKQorICAgICAgICBpZiBvcGNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGNvZGUgPT0gYiIiOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBpY2tsZSBleGhhdXN0ZWQgYmVmb3JlIHNlZWluZyBTVE9QIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYXQgcG9zaXRpb24gJXMsIG9wY29kZSAlciB1bmtub3duIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dW5rbm93bj4iIGlmIHBvcyBpcyBOb25lIGVsc2UgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSkpCisgICAgICAgIGlmIG9wY29kZS5hcmcgaXMgTm9uZToKKyAgICAgICAgICAgIGFyZyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZyA9IG9wY29kZS5hcmcucmVhZGVyKGRhdGEpCisgICAgICAgIGlmIHlpZWxkX2VuZF9wb3M6CisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIGFyZywgcG9zLCBnZXRwb3MoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBhcmcsIHBvcworICAgICAgICBpZiBjb2RlID09IGInLic6CisgICAgICAgICAgICBhc3NlcnQgb3Bjb2RlLm5hbWUgPT0gJ1NUT1AnCisgICAgICAgICAgICBicmVhaworCiBkZWYgZ2Vub3BzKHBpY2tsZSk6CiAgICAgIiIiR2VuZXJhdGUgYWxsIHRoZSBvcGNvZGVzIGluIGEgcGlja2xlLgogCkBAIC0xOTI3LDYyICsyMjc1LDQ4IEBACiAgICAgdXNlZC4gIEVsc2UgKHRoZSBwaWNrbGUgZG9lc24ndCBoYXZlIGEgdGVsbCgpLCBhbmQgaXQncyBub3Qgb2J2aW91cyBob3cKICAgICB0byBxdWVyeSBpdHMgY3VycmVudCBwb3NpdGlvbikgcG9zIGlzIE5vbmUuCiAgICAgIiIiCi0KLSAgICBpZiBpc2luc3RhbmNlKHBpY2tsZSwgYnl0ZXNfdHlwZXMpOgotICAgICAgICBpbXBvcnQgaW8KLSAgICAgICAgcGlja2xlID0gaW8uQnl0ZXNJTyhwaWNrbGUpCi0KLSAgICBpZiBoYXNhdHRyKHBpY2tsZSwgInRlbGwiKToKLSAgICAgICAgZ2V0cG9zID0gcGlja2xlLnRlbGwKLSAgICBlbHNlOgotICAgICAgICBnZXRwb3MgPSBsYW1iZGE6IE5vbmUKLQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIHBvcyA9IGdldHBvcygpCi0gICAgICAgIGNvZGUgPSBwaWNrbGUucmVhZCgxKQotICAgICAgICBvcGNvZGUgPSBjb2RlMm9wLmdldChjb2RlLmRlY29kZSgibGF0aW4tMSIpKQotICAgICAgICBpZiBvcGNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIGNvZGUgPT0gYiIiOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBpY2tsZSBleGhhdXN0ZWQgYmVmb3JlIHNlZWluZyBTVE9QIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYXQgcG9zaXRpb24gJXMsIG9wY29kZSAlciB1bmtub3duIiAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyBpcyBOb25lIGFuZCAiPHVua25vd24+IiBvciBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlKSkKLSAgICAgICAgaWYgb3Bjb2RlLmFyZyBpcyBOb25lOgotICAgICAgICAgICAgYXJnID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXJnID0gb3Bjb2RlLmFyZy5yZWFkZXIocGlja2xlKQotICAgICAgICB5aWVsZCBvcGNvZGUsIGFyZywgcG9zCi0gICAgICAgIGlmIGNvZGUgPT0gYicuJzoKLSAgICAgICAgICAgIGFzc2VydCBvcGNvZGUubmFtZSA9PSAnU1RPUCcKLSAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIF9nZW5vcHMocGlja2xlKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQSBwaWNrbGUgb3B0aW1pemVyLgogCiBkZWYgb3B0aW1pemUocCk6CiAgICAgJ09wdGltaXplIGEgcGlja2xlIHN0cmluZyBieSByZW1vdmluZyB1bnVzZWQgUFVUIG9wY29kZXMnCi0gICAgZ2V0cyA9IHNldCgpICAgICAgICAgICAgIyBzZXQgb2YgYXJncyB1c2VkIGJ5IGEgR0VUIG9wY29kZQotICAgIHB1dHMgPSBbXSAgICAgICAgICAgICAgICMgKGFyZywgc3RhcnRwb3MsIHN0b3Bwb3MpIGZvciB0aGUgUFVUIG9wY29kZXMKLSAgICBwcmV2cG9zID0gTm9uZSAgICAgICAgICAjIHNldCB0byBwb3MgaWYgcHJldmlvdXMgb3Bjb2RlIHdhcyBhIFBVVAotICAgIGZvciBvcGNvZGUsIGFyZywgcG9zIGluIGdlbm9wcyhwKToKLSAgICAgICAgaWYgcHJldnBvcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHB1dHMuYXBwZW5kKChwcmV2YXJnLCBwcmV2cG9zLCBwb3MpKQotICAgICAgICAgICAgcHJldnBvcyA9IE5vbmUKKyAgICBub3RfYV9wdXQgPSBvYmplY3QoKQorICAgIGdldHMgPSB7IG5vdF9hX3B1dCB9ICAgICMgc2V0IG9mIGFyZ3MgdXNlZCBieSBhIEdFVCBvcGNvZGUKKyAgICBvcGNvZGVzID0gW10gICAgICAgICAgICAjIChzdGFydHBvcywgc3RvcHBvcywgcHV0aWQpCisgICAgcHJvdG8gPSAwCisgICAgZm9yIG9wY29kZSwgYXJnLCBwb3MsIGVuZF9wb3MgaW4gX2dlbm9wcyhwLCB5aWVsZF9lbmRfcG9zPVRydWUpOgogICAgICAgICBpZiAnUFVUJyBpbiBvcGNvZGUubmFtZToKLSAgICAgICAgICAgIHByZXZhcmcsIHByZXZwb3MgPSBhcmcsIHBvcwotICAgICAgICBlbGlmICdHRVQnIGluIG9wY29kZS5uYW1lOgotICAgICAgICAgICAgZ2V0cy5hZGQoYXJnKQorICAgICAgICAgICAgb3Bjb2Rlcy5hcHBlbmQoKHBvcywgZW5kX3BvcywgYXJnKSkKKyAgICAgICAgZWxpZiAnRlJBTUUnIGluIG9wY29kZS5uYW1lOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgJ0dFVCcgaW4gb3Bjb2RlLm5hbWU6CisgICAgICAgICAgICAgICAgZ2V0cy5hZGQoYXJnKQorICAgICAgICAgICAgZWxpZiBvcGNvZGUubmFtZSA9PSAnUFJPVE8nOgorICAgICAgICAgICAgICAgIGFzc2VydCBwb3MgPT0gMCwgcG9zCisgICAgICAgICAgICAgICAgcHJvdG8gPSBhcmcKKyAgICAgICAgICAgIG9wY29kZXMuYXBwZW5kKChwb3MsIGVuZF9wb3MsIG5vdF9hX3B1dCkpCisgICAgICAgICAgICBwcmV2cG9zLCBwcmV2YXJnID0gcG9zLCBOb25lCiAKLSAgICAjIENvcHkgdGhlIHBpY2tsZSBzdHJpbmcgZXhjZXB0IGZvciBQVVRTIHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIEdFVAotICAgIHMgPSBbXQotICAgIGkgPSAwCi0gICAgZm9yIGFyZywgc3RhcnQsIHN0b3AgaW4gcHV0czoKLSAgICAgICAgaiA9IHN0b3AgaWYgKGFyZyBpbiBnZXRzKSBlbHNlIHN0YXJ0Ci0gICAgICAgIHMuYXBwZW5kKHBbaTpqXSkKLSAgICAgICAgaSA9IHN0b3AKLSAgICBzLmFwcGVuZChwW2k6XSkKLSAgICByZXR1cm4gYicnLmpvaW4ocykKKyAgICAjIENvcHkgdGhlIG9wY29kZXMgZXhjZXB0IGZvciBQVVRTIHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIEdFVAorICAgIG91dCA9IGlvLkJ5dGVzSU8oKQorICAgIG9wY29kZXMgPSBpdGVyKG9wY29kZXMpCisgICAgaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgIyBXcml0ZSB0aGUgUFJPVE8gaGVhZGVyIGJlZm9yZSBhbnkgZnJhbWluZworICAgICAgICBzdGFydCwgc3RvcCwgXyA9IG5leHQob3Bjb2RlcykKKyAgICAgICAgb3V0LndyaXRlKHBbc3RhcnQ6c3RvcF0pCisgICAgYnVmID0gcGlja2xlLl9GcmFtZXIob3V0LndyaXRlKQorICAgIGlmIHByb3RvID49IDQ6CisgICAgICAgIGJ1Zi5zdGFydF9mcmFtaW5nKCkKKyAgICBmb3Igc3RhcnQsIHN0b3AsIHB1dGlkIGluIG9wY29kZXM6CisgICAgICAgIGlmIHB1dGlkIGluIGdldHM6CisgICAgICAgICAgICBidWYuY29tbWl0X2ZyYW1lKCkKKyAgICAgICAgICAgIGJ1Zi53cml0ZShwW3N0YXJ0OnN0b3BdKQorICAgIGlmIHByb3RvID49IDQ6CisgICAgICAgIGJ1Zi5lbmRfZnJhbWluZygpCisgICAgcmV0dXJuIG91dC5nZXR2YWx1ZSgpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBIHN5bWJvbGljIHBpY2tsZSBkaXNhc3NlbWJsZXIuCkBAIC0yMDgyLDE3ICsyNDE2LDIwIEBACiAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgPSBtYXJrbXNnID0gIm5vIE1BUksgZXhpc3RzIG9uIHN0YWNrIgogCiAgICAgICAgICMgQ2hlY2sgZm9yIGNvcnJlY3QgbWVtbyB1c2FnZS4KLSAgICAgICAgaWYgb3Bjb2RlLm5hbWUgaW4gKCJQVVQiLCAiQklOUFVUIiwgIkxPTkdfQklOUFVUIik6Ci0gICAgICAgICAgICBhc3NlcnQgYXJnIGlzIG5vdCBOb25lCi0gICAgICAgICAgICBpZiBhcmcgaW4gbWVtbzoKKyAgICAgICAgaWYgb3Bjb2RlLm5hbWUgaW4gKCJQVVQiLCAiQklOUFVUIiwgIkxPTkdfQklOUFVUIiwgIk1FTU9JWkUiKToKKyAgICAgICAgICAgIGlmIG9wY29kZS5uYW1lID09ICJNRU1PSVpFIjoKKyAgICAgICAgICAgICAgICBtZW1vX2lkeCA9IGxlbihtZW1vKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgYXJnIGlzIG5vdCBOb25lCisgICAgICAgICAgICAgICAgbWVtb19pZHggPSBhcmcKKyAgICAgICAgICAgIGlmIG1lbW9faWR4IGluIG1lbW86CiAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgPSAibWVtbyBrZXkgJXIgYWxyZWFkeSBkZWZpbmVkIiAlIGFyZwogICAgICAgICAgICAgZWxpZiBub3Qgc3RhY2s6CiAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgPSAic3RhY2sgaXMgZW1wdHkgLS0gY2FuJ3Qgc3RvcmUgaW50byBtZW1vIgogICAgICAgICAgICAgZWxpZiBzdGFja1stMV0gaXMgbWFya29iamVjdDoKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9ICJjYW4ndCBzdG9yZSBtYXJrb2JqZWN0IGluIHRoZSBtZW1vIgogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBtZW1vW2FyZ10gPSBzdGFja1stMV0KLQorICAgICAgICAgICAgICAgIG1lbW9bbWVtb19pZHhdID0gc3RhY2tbLTFdCiAgICAgICAgIGVsaWYgb3Bjb2RlLm5hbWUgaW4gKCJHRVQiLCAiQklOR0VUIiwgIkxPTkdfQklOR0VUIik6CiAgICAgICAgICAgICBpZiBhcmcgaW4gbWVtbzoKICAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGFmdGVyKSA9PSAxCmRpZmYgLS1naXQgYS9MaWIvcGtndXRpbC5weSBiL0xpYi9wa2d1dGlsLnB5CmluZGV4IDIwZTY0OTguLjMyNjY1N2EgMTAwNjQ0Ci0tLSBhL0xpYi9wa2d1dGlsLnB5CisrKyBiL0xpYi9wa2d1dGlsLnB5CkBAIC0xLDEyICsxLDE0IEBACiAiIiJVdGlsaXRpZXMgdG8gc3VwcG9ydCBwYWNrYWdlcy4iIiIKIAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgc2luZ2xlZGlzcGF0Y2ggYXMgc2ltcGxlZ2VuZXJpYwogaW1wb3J0IGltcG9ydGxpYgotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCitpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQoraW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAotZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgoraW1wb3J0IHN5cwogZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQoraW1wb3J0IHdhcm5pbmdzCiAKIF9fYWxsX18gPSBbCiAgICAgJ2dldF9pbXBvcnRlcicsICdpdGVyX2ltcG9ydGVycycsICdnZXRfbG9hZGVyJywgJ2ZpbmRfbG9hZGVyJywKQEAgLTE0LDU5ICsxNiwzNCBAQAogICAgICdJbXBJbXBvcnRlcicsICdJbXBMb2FkZXInLCAncmVhZF9jb2RlJywgJ2V4dGVuZF9wYXRoJywKIF0KIAorCitkZWYgX2dldF9zcGVjKGZpbmRlciwgbmFtZSk6CisgICAgIiIiUmV0dXJuIHRoZSBmaW5kZXItc3BlY2lmaWMgbW9kdWxlIHNwZWMuIiIiCisgICAgIyBXb3JrcyB3aXRoIGxlZ2FjeSBmaW5kZXJzLgorICAgIHRyeToKKyAgICAgICAgZmluZF9zcGVjID0gZmluZGVyLmZpbmRfc3BlYworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKG5hbWUpCisgICAgICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9sb2FkZXIobmFtZSwgbG9hZGVyKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmaW5kX3NwZWMobmFtZSkKKworCiBkZWYgcmVhZF9jb2RlKHN0cmVhbSk6CiAgICAgIyBUaGlzIGhlbHBlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIHRoZSBQRVAgMzAyIGVtdWxhdGlvbiB0bwogICAgICMgY29ycmVjdGx5IGhhbmRsZSBjb21waWxlZCBmaWxlcwogICAgIGltcG9ydCBtYXJzaGFsCiAKICAgICBtYWdpYyA9IHN0cmVhbS5yZWFkKDQpCi0gICAgaWYgbWFnaWMgIT0gaW1wLmdldF9tYWdpYygpOgorICAgIGlmIG1hZ2ljICE9IGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUjoKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIHN0cmVhbS5yZWFkKDgpICMgU2tpcCB0aW1lc3RhbXAgYW5kIHNpemUKICAgICByZXR1cm4gbWFyc2hhbC5sb2FkKHN0cmVhbSkKIAogCi1kZWYgc2ltcGxlZ2VuZXJpYyhmdW5jKToKLSAgICAiIiJNYWtlIGEgdHJpdmlhbCBzaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbiIiIgotICAgIHJlZ2lzdHJ5ID0ge30KLSAgICBkZWYgd3JhcHBlcigqYXJncywgKiprdyk6Ci0gICAgICAgIG9iID0gYXJnc1swXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjbHMgPSBvYi5fX2NsYXNzX18KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgY2xzID0gdHlwZShvYikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbXJvID0gY2xzLl9fbXJvX18KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNsYXNzIGNscyhjbHMsIG9iamVjdCk6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBtcm8gPSBjbHMuX19tcm9fX1sxOl0KLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgbXJvID0gb2JqZWN0LCAgICMgbXVzdCBiZSBhbiBFeHRlbnNpb25DbGFzcyBvciBzb21lIHN1Y2ggIDooCi0gICAgICAgIGZvciB0IGluIG1ybzoKLSAgICAgICAgICAgIGlmIHQgaW4gcmVnaXN0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5W3RdKCphcmdzLCAqKmt3KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3cpCi0gICAgdHJ5OgotICAgICAgICB3cmFwcGVyLl9fbmFtZV9fID0gZnVuYy5fX25hbWVfXwotICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgIHBhc3MgICAgIyBQeXRob24gMi4zIGRvZXNuJ3QgYWxsb3cgZnVuY3Rpb25zIHRvIGJlIHJlbmFtZWQKLQotICAgIGRlZiByZWdpc3Rlcih0eXAsIGZ1bmM9Tm9uZSk6Ci0gICAgICAgIGlmIGZ1bmMgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBsYW1iZGEgZjogcmVnaXN0ZXIodHlwLCBmKQotICAgICAgICByZWdpc3RyeVt0eXBdID0gZnVuYwotICAgICAgICByZXR1cm4gZnVuYwotCi0gICAgd3JhcHBlci5fX2RpY3RfXyA9IGZ1bmMuX19kaWN0X18KLSAgICB3cmFwcGVyLl9fZG9jX18gPSBmdW5jLl9fZG9jX18KLSAgICB3cmFwcGVyLnJlZ2lzdGVyID0gcmVnaXN0ZXIKLSAgICByZXR1cm4gd3JhcHBlcgotCi0KIGRlZiB3YWxrX3BhY2thZ2VzKHBhdGg9Tm9uZSwgcHJlZml4PScnLCBvbmVycm9yPU5vbmUpOgogICAgICIiIllpZWxkcyAobW9kdWxlX2xvYWRlciwgbmFtZSwgaXNwa2cpIGZvciBhbGwgbW9kdWxlcyByZWN1cnNpdmVseQogICAgIG9uIHBhdGgsIG9yLCBpZiBwYXRoIGlzIE5vbmUsIGFsbCBhY2Nlc3NpYmxlIG1vZHVsZXMuCkBAIC0xMjEsOCArOTgsNyBAQAogICAgICAgICAgICAgICAgICMgZG9uJ3QgdHJhdmVyc2UgcGF0aCBpdGVtcyB3ZSd2ZSBzZWVuIGJlZm9yZQogICAgICAgICAgICAgICAgIHBhdGggPSBbcCBmb3IgcCBpbiBwYXRoIGlmIG5vdCBzZWVuKHApXQogCi0gICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gd2Fsa19wYWNrYWdlcyhwYXRoLCBuYW1lKycuJywgb25lcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGl0ZW0KKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHdhbGtfcGFja2FnZXMocGF0aCwgbmFtZSsnLicsIG9uZXJyb3IpCiAKIAogZGVmIGl0ZXJfbW9kdWxlcyhwYXRoPU5vbmUsIHByZWZpeD0nJyk6CkBAIC0xNDksMTMgKzEyNSwxMiBAQAogICAgICAgICAgICAgICAgIHlpZWxkIGksIG5hbWUsIGlzcGtnCiAKIAotI0BzaW1wbGVnZW5lcmljCitAc2ltcGxlZ2VuZXJpYwogZGVmIGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcyhpbXBvcnRlciwgcHJlZml4PScnKToKICAgICBpZiBub3QgaGFzYXR0cihpbXBvcnRlciwgJ2l0ZXJfbW9kdWxlcycpOgogICAgICAgICByZXR1cm4gW10KICAgICByZXR1cm4gaW1wb3J0ZXIuaXRlcl9tb2R1bGVzKHByZWZpeCkKIAotaXRlcl9pbXBvcnRlcl9tb2R1bGVzID0gc2ltcGxlZ2VuZXJpYyhpdGVyX2ltcG9ydGVyX21vZHVsZXMpCiAKICMgSW1wbGVtZW50IGEgZmlsZSB3YWxrZXIgZm9yIHRoZSBub3JtYWwgaW1wb3J0bGliIHBhdGggaG9vawogZGVmIF9pdGVyX2ZpbGVfZmluZGVyX21vZHVsZXMoaW1wb3J0ZXIsIHByZWZpeD0nJyk6CkBAIC0yMDEsNiArMTc2LDEzIEBACiBpdGVyX2ltcG9ydGVyX21vZHVsZXMucmVnaXN0ZXIoCiAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLCBfaXRlcl9maWxlX2ZpbmRlcl9tb2R1bGVzKQogCisKK2RlZiBfaW1wb3J0X2ltcCgpOgorICAgIGdsb2JhbCBpbXAKKyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgaW1wID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2ltcCcpCisKIGNsYXNzIEltcEltcG9ydGVyOgogICAgICIiIlBFUCAzMDIgSW1wb3J0ZXIgdGhhdCB3cmFwcyBQeXRob24ncyAiY2xhc3NpYyIgaW1wb3J0IGFsZ29yaXRobQogCkBAIC0yMTMsOCArMTk1LDEwIEBACiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD1Ob25lKToKLSAgICAgICAgd2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAorICAgICAgICBnbG9iYWwgaW1wCisgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoaXMgZW11bGF0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAnaW1wb3J0bGliJyBpbnN0ZWFkIiwKICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIF9pbXBvcnRfaW1wKCkKICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAogCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgpAQCAtMjc5LDggKzI2Myw5IEBACiAgICAgY29kZSA9IHNvdXJjZSA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdWxsbmFtZSwgZmlsZSwgZmlsZW5hbWUsIGV0Yyk6Ci0gICAgICAgIHdhcm4oIlRoaXMgZW11bGF0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAnaW1wb3J0bGliJyBpbnN0ZWFkIiwKLSAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoaXMgZW11bGF0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAnaW1wb3J0bGliJyBpbnN0ZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIF9pbXBvcnRfaW1wKCkKICAgICAgICAgc2VsZi5maWxlID0gZmlsZQogICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKICAgICAgICAgc2VsZi5mdWxsbmFtZSA9IGZ1bGxuYW1lCkBAIC0zNTAsMTYgKzMzNSwxNiBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQogICAgICAgICAgICAgZWxpZiBtb2RfdHlwZT09aW1wLlBZX0NPTVBJTEVEOgogICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZmlsZW5hbWVbOi0xXSk6Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWVbOi0xXSwgJ3InKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZSA9IGYucmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZVs6LTFdLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZSA9IGYucmVhZCgpCiAgICAgICAgICAgICBlbGlmIG1vZF90eXBlPT1pbXAuUEtHX0RJUkVDVE9SWToKICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZSA9IHNlbGYuX2dldF9kZWxlZ2F0ZSgpLmdldF9zb3VyY2UoKQogICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKIAotCiAgICAgZGVmIF9nZXRfZGVsZWdhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBJbXBJbXBvcnRlcihzZWxmLmZpbGVuYW1lKS5maW5kX21vZHVsZSgnX19pbml0X18nKQorICAgICAgICBmaW5kZXIgPSBJbXBJbXBvcnRlcihzZWxmLmZpbGVuYW1lKQorICAgICAgICBzcGVjID0gX2dldF9zcGVjKGZpbmRlciwgJ19faW5pdF9fJykKKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyCiAKICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lPU5vbmUpOgogICAgICAgICBmdWxsbmFtZSA9IHNlbGYuX2ZpeF9uYW1lKGZ1bGxuYW1lKQpAQCAtNDU2LDEyICs0NDEsMTIgQEAKICAgICAgICAgaWYgcGF0aCBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgZWxzZToKLSAgICAgICAgZm9yIGltcG9ydGVyIGluIHN5cy5tZXRhX3BhdGg6Ci0gICAgICAgICAgICB5aWVsZCBpbXBvcnRlcgorICAgICAgICB5aWVsZCBmcm9tIHN5cy5tZXRhX3BhdGgKICAgICAgICAgcGF0aCA9IHN5cy5wYXRoCiAgICAgZm9yIGl0ZW0gaW4gcGF0aDoKICAgICAgICAgeWllbGQgZ2V0X2ltcG9ydGVyKGl0ZW0pCiAKKwogZGVmIGdldF9sb2FkZXIobW9kdWxlX29yX25hbWUpOgogICAgICIiIkdldCBhIFBFUCAzMDIgImxvYWRlciIgb2JqZWN0IGZvciBtb2R1bGVfb3JfbmFtZQogCkBAIC01NjksMTMgKzU1NCwxNCBAQAogCiAgICAgICAgIGZpbmRlciA9IGdldF9pbXBvcnRlcihkaXIpCiAgICAgICAgIGlmIGZpbmRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBvcnRpb25zID0gW10KKyAgICAgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9zcGVjJyk6CisgICAgICAgICAgICAgICAgc3BlYyA9IGZpbmRlci5maW5kX3NwZWMoZmluYWxfbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgb3IgW10KICAgICAgICAgICAgICMgSXMgdGhpcyBmaW5kZXIgUEVQIDQyMCBjb21wbGlhbnQ/Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6Ci0gICAgICAgICAgICAgICAgbG9hZGVyLCBwb3J0aW9ucyA9IGZpbmRlci5maW5kX2xvYWRlcihmaW5hbF9uYW1lKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIE5vLCBubyBuZWVkIHRvIGNhbGwgaXQKLSAgICAgICAgICAgICAgICBsb2FkZXIgPSBOb25lCi0gICAgICAgICAgICAgICAgcG9ydGlvbnMgPSBbXQorICAgICAgICAgICAgZWxpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6CisgICAgICAgICAgICAgICAgXywgcG9ydGlvbnMgPSBmaW5kZXIuZmluZF9sb2FkZXIoZmluYWxfbmFtZSkKIAogICAgICAgICAgICAgZm9yIHBvcnRpb24gaW4gcG9ydGlvbnM6CiAgICAgICAgICAgICAgICAgIyBYWFggVGhpcyBtYXkgc3RpbGwgYWRkIGR1cGxpY2F0ZSBlbnRyaWVzIHRvIHBhdGggb24KQEAgLTU4OSwxOSArNTc1LDIwIEBACiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBrZ2ZpbGUpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKHBrZ2ZpbGUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3Qgb3BlbiAlczogJXNcbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZ2ZpbGUsIG1zZykpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZSBvciBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHBhdGguYXBwZW5kKGxpbmUpICMgRG9uJ3QgY2hlY2sgZm9yIGV4aXN0ZW5jZSEKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lIG9yIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmFwcGVuZChsaW5lKSAjIERvbid0IGNoZWNrIGZvciBleGlzdGVuY2UhCiAKICAgICByZXR1cm4gcGF0aAogCisKIGRlZiBnZXRfZGF0YShwYWNrYWdlLCByZXNvdXJjZSk6CiAgICAgIiIiR2V0IGEgcmVzb3VyY2UgZnJvbSBhIHBhY2thZ2UuCiAKQEAgLTYyNCwxMCArNjExLDE1IEBACiAgICAgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBnZXRfZGF0YSgpLCB0aGVuIE5vbmUgaXMgcmV0dXJuZWQuCiAgICAgIiIiCiAKLSAgICBsb2FkZXIgPSBnZXRfbG9hZGVyKHBhY2thZ2UpCisgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYyhwYWNrYWdlKQorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgogICAgIGlmIGxvYWRlciBpcyBOb25lIG9yIG5vdCBoYXNhdHRyKGxvYWRlciwgJ2dldF9kYXRhJyk6CiAgICAgICAgIHJldHVybiBOb25lCi0gICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KHBhY2thZ2UpIG9yIGxvYWRlci5sb2FkX21vZHVsZShwYWNrYWdlKQorICAgICMgWFhYIG5lZWRzIHRlc3QKKyAgICBtb2QgPSAoc3lzLm1vZHVsZXMuZ2V0KHBhY2thZ2UpIG9yCisgICAgICAgICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5sb2FkKCkpCiAgICAgaWYgbW9kIGlzIE5vbmUgb3Igbm90IGhhc2F0dHIobW9kLCAnX19maWxlX18nKToKICAgICAgICAgcmV0dXJuIE5vbmUKIApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L0lOLnB5IGIvTGliL3BsYXQtb3MyZW14L0lOLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTNhZTI0Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9JTi5weQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9uZXRpbmV0L2luLmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy9wYXJhbS5oCi1QQUdFX1NJWkUgPSAweDEwMDAKLUhaID0gMTAwCi1NQVhOQU1MRU4gPSAyNjAKLU1BWFBBVEhMRU4gPSAyNjAKLWRlZiBodG9ubChYKTogcmV0dXJuIF9zd2FwbChYKQotCi1kZWYgbnRvaGwoWCk6IHJldHVybiBfc3dhcGwoWCkKLQotZGVmIGh0b25zKFgpOiByZXR1cm4gX3N3YXBzKFgpCi0KLWRlZiBudG9ocyhYKTogcmV0dXJuIF9zd2FwcyhYKQotCi1JUFBST1RPX0lQID0gMAotSVBQUk9UT19JQ01QID0gMQotSVBQUk9UT19JR01QID0gMgotSVBQUk9UT19HR1AgPSAzCi1JUFBST1RPX1RDUCA9IDYKLUlQUFJPVE9fRUdQID0gOAotSVBQUk9UT19QVVAgPSAxMgotSVBQUk9UT19VRFAgPSAxNwotSVBQUk9UT19JRFAgPSAyMgotSVBQUk9UT19UUCA9IDI5Ci1JUFBST1RPX0VPTiA9IDgwCi1JUFBST1RPX1JBVyA9IDI1NQotSVBQUk9UT19NQVggPSAyNTYKLUlQUE9SVF9SRVNFUlZFRCA9IDEwMjQKLUlQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCi1kZWYgSU5fQ0xBU1NBKGkpOiByZXR1cm4gKCgoaW50KShpKSAmIDB4ODAwMDAwMDApID09IDApCi0KLUlOX0NMQVNTQV9ORVQgPSAweGZmMDAwMDAwCi1JTl9DTEFTU0FfTlNISUZUID0gMjQKLUlOX0NMQVNTQV9IT1NUID0gMHgwMGZmZmZmZgotSU5fQ0xBU1NBX01BWCA9IDEyOAotZGVmIElOX0NMQVNTQihpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGMwMDAwMDAwKSA9PSAweDgwMDAwMDAwKQotCi1JTl9DTEFTU0JfTkVUID0gMHhmZmZmMDAwMAotSU5fQ0xBU1NCX05TSElGVCA9IDE2Ci1JTl9DTEFTU0JfSE9TVCA9IDB4MDAwMGZmZmYKLUlOX0NMQVNTQl9NQVggPSA2NTUzNgotZGVmIElOX0NMQVNTQyhpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGMwMDAwMDAwKQotCi1JTl9DTEFTU0NfTkVUID0gMHhmZmZmZmYwMAotSU5fQ0xBU1NDX05TSElGVCA9IDgKLUlOX0NMQVNTQ19IT1NUID0gMHgwMDAwMDBmZgotZGVmIElOX0NMQVNTRChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGYwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1JTl9DTEFTU0RfTkVUID0gMHhmMDAwMDAwMAotSU5fQ0xBU1NEX05TSElGVCA9IDI4Ci1JTl9DTEFTU0RfSE9TVCA9IDB4MGZmZmZmZmYKLWRlZiBJTl9NVUxUSUNBU1QoaSk6IHJldHVybiBJTl9DTEFTU0QoaSkKLQotZGVmIElOX0VYUEVSSU1FTlRBTChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1kZWYgSU5fQkFEQ0xBU1MoaSk6IHJldHVybiAoKChpbnQpKGkpICYgMHhmMDAwMDAwMCkgPT0gMHhmMDAwMDAwMCkKLQotSU5BRERSX0FOWSA9IDB4MDAwMDAwMDAKLUlOQUREUl9MT09QQkFDSyA9IDB4N2YwMDAwMDEKLUlOQUREUl9CUk9BRENBU1QgPSAweGZmZmZmZmZmCi1JTkFERFJfTk9ORSA9IDB4ZmZmZmZmZmYKLUlOQUREUl9VTlNQRUNfR1JPVVAgPSAweGUwMDAwMDAwCi1JTkFERFJfQUxMSE9TVFNfR1JPVVAgPSAweGUwMDAwMDAxCi1JTkFERFJfTUFYX0xPQ0FMX0dST1VQID0gMHhlMDAwMDBmZgotSU5fTE9PUEJBQ0tORVQgPSAxMjcKLUlQX09QVElPTlMgPSAxCi1JUF9NVUxUSUNBU1RfSUYgPSAyCi1JUF9NVUxUSUNBU1RfVFRMID0gMwotSVBfTVVMVElDQVNUX0xPT1AgPSA0Ci1JUF9BRERfTUVNQkVSU0hJUCA9IDUKLUlQX0RST1BfTUVNQkVSU0hJUCA9IDYKLUlQX0hEUklOQ0wgPSAyCi1JUF9UT1MgPSAzCi1JUF9UVEwgPSA0Ci1JUF9SRUNWT1BUUyA9IDUKLUlQX1JFQ1ZSRVRPUFRTID0gNgotSVBfUkVDVkRTVEFERFIgPSA3Ci1JUF9SRVRPUFRTID0gOAotSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMID0gMQotSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCA9IDEKLUlQX01BWF9NRU1CRVJTSElQUyA9IDIwCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5IGIvTGliL3BsYXQtb3MyZW14L1NPQ0tFVC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFjNTk0YS4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9zeXMvc29ja2V0LmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy90eXBlcy5oCi1GRF9TRVRTSVpFID0gMjU2Ci0KLSMgSW5jbHVkZWQgZnJvbSBzeXMvdWlvLmgKLUZSRUFEID0gMQotRldSSVRFID0gMgotU09DS19TVFJFQU0gPSAxCi1TT0NLX0RHUkFNID0gMgotU09DS19SQVcgPSAzCi1TT0NLX1JETSA9IDQKLVNPQ0tfU0VRUEFDS0VUID0gNQotU09fREVCVUcgPSAweDAwMDEKLVNPX0FDQ0VQVENPTk4gPSAweDAwMDIKLVNPX1JFVVNFQUREUiA9IDB4MDAwNAotU09fS0VFUEFMSVZFID0gMHgwMDA4Ci1TT19ET05UUk9VVEUgPSAweDAwMTAKLVNPX0JST0FEQ0FTVCA9IDB4MDAyMAotU09fVVNFTE9PUEJBQ0sgPSAweDAwNDAKLVNPX0xJTkdFUiA9IDB4MDA4MAotU09fT09CSU5MSU5FID0gMHgwMTAwCi1TT19MX0JST0FEQ0FTVCA9IDB4MDIwMAotU09fUkNWX1NIVVRET1dOID0gMHgwNDAwCi1TT19TTkRfU0hVVERPV04gPSAweDA4MDAKLVNPX1NOREJVRiA9IDB4MTAwMQotU09fUkNWQlVGID0gMHgxMDAyCi1TT19TTkRMT1dBVCA9IDB4MTAwMwotU09fUkNWTE9XQVQgPSAweDEwMDQKLVNPX1NORFRJTUVPID0gMHgxMDA1Ci1TT19SQ1ZUSU1FTyA9IDB4MTAwNgotU09fRVJST1IgPSAweDEwMDcKLVNPX1RZUEUgPSAweDEwMDgKLVNPX09QVElPTlMgPSAweDEwMTAKLVNPTF9TT0NLRVQgPSAweGZmZmYKLUFGX1VOU1BFQyA9IDAKLUFGX1VOSVggPSAxCi1BRl9JTkVUID0gMgotQUZfSU1QTElOSyA9IDMKLUFGX1BVUCA9IDQKLUFGX0NIQU9TID0gNQotQUZfTlMgPSA2Ci1BRl9OQlMgPSA3Ci1BRl9JU08gPSA3Ci1BRl9PU0kgPSBBRl9JU08KLUFGX0VDTUEgPSA4Ci1BRl9EQVRBS0lUID0gOQotQUZfQ0NJVFQgPSAxMAotQUZfU05BID0gMTEKLUFGX0RFQ25ldCA9IDEyCi1BRl9ETEkgPSAxMwotQUZfTEFUID0gMTQKLUFGX0hZTElOSyA9IDE1Ci1BRl9BUFBMRVRBTEsgPSAxNgotQUZfTkIgPSAxNwotQUZfTkVUQklPUyA9IEFGX05CCi1BRl9PUzIgPSBBRl9VTklYCi1BRl9NQVggPSAxOAotUEZfVU5TUEVDID0gQUZfVU5TUEVDCi1QRl9VTklYID0gQUZfVU5JWAotUEZfSU5FVCA9IEFGX0lORVQKLVBGX0lNUExJTksgPSBBRl9JTVBMSU5LCi1QRl9QVVAgPSBBRl9QVVAKLVBGX0NIQU9TID0gQUZfQ0hBT1MKLVBGX05TID0gQUZfTlMKLVBGX05CUyA9IEFGX05CUwotUEZfSVNPID0gQUZfSVNPCi1QRl9PU0kgPSBBRl9JU08KLVBGX0VDTUEgPSBBRl9FQ01BCi1QRl9EQVRBS0lUID0gQUZfREFUQUtJVAotUEZfQ0NJVFQgPSBBRl9DQ0lUVAotUEZfU05BID0gQUZfU05BCi1QRl9ERUNuZXQgPSBBRl9ERUNuZXQKLVBGX0RMSSA9IEFGX0RMSQotUEZfTEFUID0gQUZfTEFUCi1QRl9IWUxJTksgPSBBRl9IWUxJTksKLVBGX0FQUExFVEFMSyA9IEFGX0FQUExFVEFMSwotUEZfTkIgPSBBRl9OQgotUEZfTkVUQklPUyA9IEFGX05CCi1QRl9PUzIgPSBBRl9VTklYCi1QRl9NQVggPSBBRl9NQVgKLVNPTUFYQ09OTiA9IDUKLU1TR19PT0IgPSAweDEKLU1TR19QRUVLID0gMHgyCi1NU0dfRE9OVFJPVVRFID0gMHg0Ci1NU0dfRU9SID0gMHg4Ci1NU0dfVFJVTkMgPSAweDEwCi1NU0dfQ1RSVU5DID0gMHgyMAotTVNHX1dBSVRBTEwgPSAweDQwCi1NU0dfTUFYSU9WTEVOID0gMTYKLVNDTV9SSUdIVFMgPSAweDAxCi1NVF9GUkVFID0gMAotTVRfREFUQSA9IDEKLU1UX0hFQURFUiA9IDIKLU1UX1NPQ0tFVCA9IDMKLU1UX1BDQiA9IDQKLU1UX1JUQUJMRSA9IDUKLU1UX0hUQUJMRSA9IDYKLU1UX0FUQUJMRSA9IDcKLU1UX1NPTkFNRSA9IDgKLU1UX1pPTUJJRSA9IDkKLU1UX1NPT1BUUyA9IDEwCi1NVF9GVEFCTEUgPSAxMQotTVRfUklHSFRTID0gMTIKLU1UX0lGQUREUiA9IDEzCi1NQVhTT0NLRVRTID0gMjA0OApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weSBiL0xpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTZiNTQuLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLSMgX2VteF9saW5rLnB5Ci0KLSMgV3JpdHRlbiBieSBBbmRyZXcgSSBNYWNJbnR5cmUsIERlY2VtYmVyIDIwMDIuCi0KLSIiIl9lbXhfbGluay5weSBpcyBhIHNpbXBsaXN0aWMgZW11bGF0aW9uIG9mIHRoZSBVbml4IGxpbmsoMikgbGlicmFyeSByb3V0aW5lCi1mb3IgY3JlYXRpbmcgc28tY2FsbGVkIGhhcmQgbGlua3MuICBJdCBpcyBpbnRlbmRlZCB0byBiZSBpbXBvcnRlZCBpbnRvCi10aGUgb3MgbW9kdWxlIGluIHBsYWNlIG9mIHRoZSB1bmltcGxlbWVudGVkIChvbiBPUy8yKSBQb3NpeCBsaW5rKCkKLWZ1bmN0aW9uIChvcy5saW5rKCkpLgotCi1XZSBkbyB0aGlzIG9uIE9TLzIgYnkgaW1wbGVtZW50aW5nIGEgZmlsZSBjb3B5LCB3aXRoIGxpbmsoMikgc2VtYW50aWNzOi0KLSAgLSB0aGUgdGFyZ2V0IGNhbm5vdCBhbHJlYWR5IGV4aXN0OwotICAtIHdlIGhvcGUgdGhhdCB0aGUgYWN0dWFsIGZpbGUgb3BlbiAoaWYgc3VjY2Vzc2Z1bCkgaXMgYWN0dWFsbHkKLSAgICBhdG9taWMuLi4KLQotTGltaXRhdGlvbnMgb2YgdGhpcyBhcHByb2FjaC9pbXBsZW1lbnRhdGlvbiBpbmNsdWRlOi0KLSAgLSBubyBzdXBwb3J0IGZvciBjb3JyZWN0IGxpbmsgY291bnRzIChFTVggc3RhdCh0YXJnZXQpLnN0X25saW5rCi0gICAgaXMgYWx3YXlzIDEpOwotICAtIHRocmVhZCBzYWZldHkgdW5kZWZpbmVkOwotICAtIGRlZmF1bHQgZmlsZSBwZXJtaXNzaW9ucyAocit3KSB1c2VkLCBjYW4ndCBiZSBvdmVyLXJpZGRlbjsKLSAgLSBpbXBsZW1lbnRlZCBpbiBQeXRob24gc28gY29tcGFyYXRpdmVseSBzbG93LCBlc3BlY2lhbGx5IGZvciBsYXJnZQotICAgIHNvdXJjZSBmaWxlczsKLSAgLSBuZWVkIHN1ZmZpY2llbnQgZnJlZSBkaXNrIHNwYWNlIHRvIHN0b3JlIHRoZSBjb3B5LgotCi1CZWhhdmlvdXI6LQotICAtIGFueSBleGNlcHRpb24gc2hvdWxkIHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyOwotICAtIHdhbnQgdGFyZ2V0IHRvIGJlIGFuIGV4YWN0IGNvcHkgb2YgdGhlIHNvdXJjZSwgc28gdXNlIGJpbmFyeSBtb2RlOwotICAtIHJldHVybnMgTm9uZSwgc2FtZSBhcyBvcy5saW5rKCkgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4gcG9zaXhtb2R1bGUuYzsKLSAgLSB0YXJnZXQgcmVtb3ZlZCBpbiB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlIHdoZXJlIHBvc3NpYmxlOwotICAtIGdpdmVuIHRoZSBtb3RpdmF0aW9uIHRvIHdyaXRlIHRoaXMgZW11bGF0aW9uIGNhbWUgZnJvbSB0cnlpbmcgdG8KLSAgICBzdXBwb3J0IGEgVW5peCByZXNvdXJjZSBsb2NrIGltcGxlbWVudGF0aW9uLCB3aGVyZSBtaW5pbWFsIG92ZXJoZWFkCi0gICAgZHVyaW5nIGNyZWF0aW9uIG9mIHRoZSB0YXJnZXQgaXMgZGVzaXJhYmxlIGFuZCB0aGUgZmlsZXMgYXJlIHNtYWxsLAotICAgIHdlIHJlYWQgYSBzb3VyY2UgYmxvY2sgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSB0YXJnZXQgc28gdGhhdAotICAgIHdlJ3JlIHJlYWR5IHRvIGltbWVkaWF0ZWx5IHdyaXRlIHNvbWUgZGF0YSBpbnRvIGl0LgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IGVycm5vCi0KLV9fYWxsX18gPSBbJ2xpbmsnXQotCi1kZWYgbGluayhzb3VyY2UsIHRhcmdldCk6Ci0gICAgIiIibGluayhzb3VyY2UsIHRhcmdldCkgLT4gTm9uZQotCi0gICAgQXR0ZW1wdCB0byBoYXJkIGxpbmsgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSB0YXJnZXQgZmlsZSBuYW1lLgotICAgIE9uIE9TLzIsIHRoaXMgY3JlYXRlcyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHNvdXJjZSBmaWxlLgotICAgICIiIgotCi0gICAgcyA9IG9zLm9wZW4oc291cmNlLCBvcy5PX1JET05MWSB8IG9zLk9fQklOQVJZKQotICAgIGlmIG9zLmlzYXR0eShzKToKLSAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FWERFViwgJ0Nyb3NzLWRldmljZSBsaW5rJykKLSAgICBkYXRhID0gb3MucmVhZChzLCAxMDI0KQotCi0gICAgdHJ5OgotICAgICAgICB0ID0gb3Mub3Blbih0YXJnZXQsIG9zLk9fV1JPTkxZIHwgb3MuT19CSU5BUlkgfCBvcy5PX0NSRUFUIHwgb3MuT19FWENMKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBvcy5jbG9zZShzKQotICAgICAgICByYWlzZQotCi0gICAgdHJ5OgotICAgICAgICB3aGlsZSBkYXRhOgotICAgICAgICAgICAgb3Mud3JpdGUodCwgZGF0YSkKLSAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHMsIDEwMjQpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIG9zLmNsb3NlKHMpCi0gICAgICAgIG9zLmNsb3NlKHQpCi0gICAgICAgIG9zLnVubGluayh0YXJnZXQpCi0gICAgICAgIHJhaXNlCi0KLSAgICBvcy5jbG9zZShzKQotICAgIG9zLmNsb3NlKHQpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IHN5cwotICAgIHRyeToKLSAgICAgICAgbGluayhzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0pCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgIHByaW50KCdVc2FnZTogZW14X2xpbmsgPHNvdXJjZT4gPHRhcmdldD4nKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBwcmludCgnZW14X2xpbms6ICVzJyAlIHN0cihzeXMuZXhjX2luZm8oKVsxXSkpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5IGIvTGliL3BsYXQtb3MyZW14L2dycC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU2M2VmOC4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIGdycCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotCi0iIiJSZXBsYWNlbWVudCBmb3IgZ3JwIHN0YW5kYXJkIGV4dGVuc2lvbiBtb2R1bGUsIGludGVuZGVkIGZvciB1c2Ugb24KLU9TLzIgYW5kIHNpbWlsYXIgc3lzdGVtcyB3aGljaCBkb24ndCBub3JtYWxseSBoYXZlIGFuIC9ldGMvZ3JvdXAgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggZ3JvdXAgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNCBmaWVsZHMgcGVyCi1yZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSBncm91cCBuYW1lIChzdHJpbmcpCi0gIC0gZ3JvdXAgcGFzc3dvcmQgKG9wdGlvbmFsIGVuY3J5cHRlZCBzdHJpbmcpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgbWVtYmVycyAoY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgdXNlcmlkcywgd2l0aCBubyBzcGFjZXMpCi0KLU5vdGUgdGhhdCBtZW1iZXJzIGFyZSBvbmx5IGluY2x1ZGVkIGluIHRoZSBncm91cCBmaWxlIGZvciBncm91cHMgdGhhdAotYXJlbid0IHRoZWlyIHByaW1hcnkgZ3JvdXBzLgotKHNlZSB0aGUgc2VjdGlvbiA4LjIgb2YgdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSkKLQotVGhpcyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJzIGZyb20gdGhlIHN0YW5kYXJkIFVuaXggaW1wbGVtZW50YXRpb24gYnkKLWFsbG93aW5nIHVzZSBvZiB0aGUgcGxhdGZvcm0ncyBuYXRpdmUgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyIC0gJzsnIG9uIE9TLzIsCi1ET1MgYW5kIE1TLVdpbmRvd3MgLSBhcyB0aGUgZmllbGQgc2VwYXJhdG9yIGluIGFkZGl0aW9uIHRvIHRoZSBVbml4Ci1zdGFuZGFyZCAiOiIuCi0KLVRoZSBtb2R1bGUgbG9va3MgZm9yIHRoZSBncm91cCBkYXRhYmFzZSBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9ucwotKGluIG9yZGVyIGZpcnN0IHRvIGxhc3QpOgotICAtICR7RVRDX0dST1VQfSAgICAgICAgICAgICAgKG9yICVFVENfR1JPVVAlKQotICAtICR7RVRDfS9ncm91cCAgICAgICAgICAgICAgKG9yICVFVEMlL2dyb3VwKQotICAtICR7UFlUSE9OSE9NRX0vRXRjL2dyb3VwICAgKG9yICVQWVRIT05IT01FJS9FdGMvZ3JvdXApCi0KLUNsYXNzZXMKLS0tLS0tLS0KLQotTm9uZQotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1nZXRncmdpZChnaWQpIC0gIHJldHVybiB0aGUgcmVjb3JkIGZvciBncm91cC1pZCBnaWQgYXMgYSA0LXR1cGxlCi0KLWdldGdybmFtKG5hbWUpIC0gcmV0dXJuIHRoZSByZWNvcmQgZm9yIGdyb3VwICduYW1lJyBhcyBhIDQtdHVwbGUKLQotZ2V0Z3JhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDQtdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotZ3JvdXBfZmlsZSAtICAgICB0aGUgcGF0aCBvZiB0aGUgZ3JvdXAgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBncm91cCBmaWxlCi1fX2dyb3VwX3BhdGggPSBbXQotaWYgJ0VUQ19HUk9VUCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKG9zLmVudmlyb25bJ0VUQ19HUk9VUCddKQotaWYgJ0VUQycgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKCclcy9ncm91cCcgJSBvcy5lbnZpcm9uWydFVEMnXSkKLWlmICdQWVRIT05IT01FJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fZ3JvdXBfcGF0aC5hcHBlbmQoJyVzL0V0Yy9ncm91cCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLWdyb3VwX2ZpbGUgPSBOb25lCi1mb3IgX19pIGluIF9fZ3JvdXBfcGF0aDoKLSAgICB0cnk6Ci0gICAgICAgIF9fZiA9IG9wZW4oX19pLCAncicpCi0gICAgICAgIF9fZi5jbG9zZSgpCi0gICAgICAgIGdyb3VwX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBkZWNpZGUgd2hhdCBmaWVsZCBzZXBhcmF0b3Igd2UgY2FuIHRyeSB0byB1c2UgLSBVbml4IHN0YW5kYXJkLCB3aXRoCi0jIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGFuIG9wdGlvbi4gIE5vIHNwZWNpYWwgZmllbGQgY29udmVyc2lvbgotIyBoYW5kbGVycyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBncm91cCBmaWxlLgotX19maWVsZF9zZXAgPSBbJzonXQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXAuYXBwZW5kKG9zLnBhdGhzZXApCi0KLSMgaGVscGVyIHJvdXRpbmUgdG8gaWRlbnRpZnkgd2hpY2ggc2VwYXJhdG9yIGNoYXJhY3RlciBpcyBpbiB1c2UKLWRlZiBfX2dldF9maWVsZF9zZXAocmVjb3JkKToKLSAgICBmcyA9IE5vbmUKLSAgICBmb3IgYyBpbiBfX2ZpZWxkX3NlcDoKLSAgICAgICAgIyB0aGVyZSBzaG91bGQgYmUgMyBkZWxpbWl0ZXIgY2hhcmFjdGVycyAoZm9yIDQgZmllbGRzKQotICAgICAgICBpZiByZWNvcmQuY291bnQoYykgPT0gMzoKLSAgICAgICAgICAgIGZzID0gYwotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBmczoKLSAgICAgICAgcmV0dXJuIGZzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IGdyb3VwIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIEdyb3VwOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXNzd2QsIGdpZCwgbWVtKToKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snZ3JfbmFtZSddID0gbmFtZQotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9wYXNzd2QnXSA9IHBhc3N3ZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9naWQnXSA9IGdpZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9tZW0nXSA9IG1lbQotICAgICAgICBzZWxmLl9fZGljdF9fWydfcmVjb3JkJ10gPSAoc2VsZi5ncl9uYW1lLCBzZWxmLmdyX3Bhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ3JfZ2lkLCBzZWxmLmdyX21lbSkKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gNAotCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9yZWNvcmRba2V5XQotCi0gICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoJ2F0dHJpYnV0ZSByZWFkLW9ubHk6ICVzJyAlIG5hbWUpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzdHIoc2VsZi5fcmVjb3JkKQotCi0gICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgotICAgICAgICB0aGlzID0gc3RyKHNlbGYuX3JlY29yZCkKLSAgICAgICAgaWYgdGhpcyA9PSBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGVsaWYgdGhpcyA8IG90aGVyOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gMQotCi0KLSMgcmVhZCB0aGUgd2hvbGUgZmlsZSwgcGFyc2luZyBlYWNoIGVudHJ5IGludG8gdHVwbGUgZm9ybQotIyB3aXRoIGRpY3Rpb25hcmllcyB0byBzcGVlZCByZWNhbGwgYnkgR0lEIG9yIGdyb3VwIG5hbWUKLWRlZiBfX3JlYWRfZ3JvdXBfZmlsZSgpOgotICAgIGlmIGdyb3VwX2ZpbGU6Ci0gICAgICAgIGdyb3VwID0gb3Blbihncm91cF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIGdyb3VwIGRhdGFiYXNlIDw8JykKLSAgICBnaWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgMToKLSAgICAgICAgZW50cnkgPSBncm91cC5yZWFkbGluZSgpLnN0cmlwKCkKLSAgICAgICAgaWYgbGVuKGVudHJ5KSA+IDM6Ci0gICAgICAgICAgICBpZiBzZXAgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZXAgPSBfX2dldF9maWVsZF9zZXAoZW50cnkpCi0gICAgICAgICAgICBmaWVsZHMgPSBlbnRyeS5zcGxpdChzZXApCi0gICAgICAgICAgICBmaWVsZHNbMl0gPSBpbnQoZmllbGRzWzJdKQotICAgICAgICAgICAgZmllbGRzWzNdID0gW2Yuc3RyaXAoKSBmb3IgZiBpbiBmaWVsZHNbM10uc3BsaXQoJywnKV0KLSAgICAgICAgICAgIHJlY29yZCA9IEdyb3VwKCpmaWVsZHMpCi0gICAgICAgICAgICBpZiBmaWVsZHNbMl0gbm90IGluIGdpZHg6Ci0gICAgICAgICAgICAgICAgZ2lkeFtmaWVsZHNbMl1dID0gcmVjb3JkCi0gICAgICAgICAgICBpZiBmaWVsZHNbMF0gbm90IGluIG5hbXg6Ci0gICAgICAgICAgICAgICAgbmFteFtmaWVsZHNbMF1dID0gcmVjb3JkCi0gICAgICAgIGVsaWYgbGVuKGVudHJ5KSA+IDA6Ci0gICAgICAgICAgICBwYXNzICAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBlbXB0eSBvciBtYWxmb3JtZWQgcmVjb3JkcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnJlYWsKLSAgICBncm91cC5jbG9zZSgpCi0gICAgaWYgbGVuKGdpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuIChnaWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cnkgYnkgR0lECi1kZWYgZ2V0Z3JnaWQoZ2lkKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBnW2dpZF0KLQotIyByZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGJ5IGdyb3VwIG5hbWUKLWRlZiBnZXRncm5hbShuYW1lKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBuW25hbWVdCi0KLSMgcmV0dXJuIGFsbCB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldGdyYWxsKCk6Ci0gICAgZywgbiA9IF9fcmVhZF9ncm91cF9maWxlKCkKLSAgICByZXR1cm4gZy52YWx1ZXMoKQotCi0jIHRlc3QgaGFybmVzcwotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBnZXRncmFsbCgpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5IGIvTGliL3BsYXQtb3MyZW14L3B3ZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNiMDc3Zi4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIHB3ZCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgUGF0aCBjb252ZXJzaW9ucyBhcmUgYXJlIGFwcGxpZWQgd2hlbgotIyB0aGUgZGF0YWJhc2UgdXNlcyAiOiIgYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBjaGFyYWN0ZXIuCi0KLSIiIlJlcGxhY2VtZW50IGZvciBwd2Qgc3RhbmRhcmQgZXh0ZW5zaW9uIG1vZHVsZSwgaW50ZW5kZWQgZm9yIHVzZSBvbgotT1MvMiBhbmQgc2ltaWxhciBzeXN0ZW1zIHdoaWNoIGRvbid0IG5vcm1hbGx5IGhhdmUgYW4gL2V0Yy9wYXNzd2QgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggcGFzc3dvcmQgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNyBmaWVsZHMKLXBlciByZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSB1c2VyIG5hbWUgKHN0cmluZykKLSAgLSBwYXNzd29yZCAoZW5jcnlwdGVkIHN0cmluZywgb3IgIioiIG9yICIiKQotICAtIHVzZXIgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZGVzY3JpcHRpb24gKHVzdWFsbHkgdXNlcidzIG5hbWUpCi0gIC0gaG9tZSBkaXJlY3RvcnkgKHBhdGggdG8gdXNlcidzIGhvbWUgZGlyZWN0b3J5KQotICAtIHNoZWxsIChwYXRoIHRvIHRoZSB1c2VyJ3MgbG9naW4gc2hlbGwpCi0KLShzZWUgdGhlIHNlY3Rpb24gOC4xIG9mIHRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UpCi0KLVRoaXMgaW1wbGVtZW50YXRpb24gZGlmZmVycyBmcm9tIHRoZSBzdGFuZGFyZCBVbml4IGltcGxlbWVudGF0aW9uIGJ5Ci1hbGxvd2luZyB1c2Ugb2YgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciAtICc7JyBvbiBPUy8yLAotRE9TIGFuZCBNUy1XaW5kb3dzIC0gYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBpbiBhZGRpdGlvbiB0byB0aGUgVW5peAotc3RhbmRhcmQgIjoiLiAgQWRkaXRpb25hbGx5LCB3aGVuICI6IiBpcyB0aGUgc2VwYXJhdG9yIHBhdGggY29udmVyc2lvbnMKLWFyZSBhcHBsaWVkIHRvIGRlYWwgd2l0aCBhbnkgbXVuZ2luZyBvZiB0aGUgZHJpdmUgbGV0dGVyIHJlZmVyZW5jZS4KLQotVGhlIG1vZHVsZSBsb29rcyBmb3IgdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zCi0oaW4gb3JkZXIgZmlyc3QgdG8gbGFzdCk6Ci0gIC0gJHtFVENfUEFTU1dEfSAgICAgICAgICAgICAob3IgJUVUQ19QQVNTV0QlKQotICAtICR7RVRDfS9wYXNzd2QgICAgICAgICAgICAgKG9yICVFVEMlL3Bhc3N3ZCkKLSAgLSAke1BZVEhPTkhPTUV9L0V0Yy9wYXNzd2QgIChvciAlUFlUSE9OSE9NRSUvRXRjL3Bhc3N3ZCkKLQotQ2xhc3NlcwotLS0tLS0tLQotCi1Ob25lCi0KLUZ1bmN0aW9ucwotLS0tLS0tLS0tCi0KLWdldHB3dWlkKHVpZCkgLSAgcmV0dXJuIHRoZSByZWNvcmQgZm9yIHVzZXItaWQgdWlkIGFzIGEgNy10dXBsZQotCi1nZXRwd25hbShuYW1lKSAtIHJldHVybiB0aGUgcmVjb3JkIGZvciB1c2VyICduYW1lJyBhcyBhIDctdHVwbGUKLQotZ2V0cHdhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDctdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotcGFzc3dkX2ZpbGUgLSAgICB0aGUgcGF0aCBvZiB0aGUgcGFzc3dvcmQgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBwYXNzd2QgZmlsZQotX19wYXNzd2RfcGF0aCA9IFtdCi1pZiAnRVRDX1BBU1NXRCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydFVENfUEFTU1dEJ10pCi1pZiAnRVRDJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fcGFzc3dkX3BhdGguYXBwZW5kKCclcy9wYXNzd2QnICUgb3MuZW52aXJvblsnRVRDJ10pCi1pZiAnUFlUSE9OSE9NRScgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZCgnJXMvRXRjL3Bhc3N3ZCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLXBhc3N3ZF9maWxlID0gTm9uZQotZm9yIF9faSBpbiBfX3Bhc3N3ZF9wYXRoOgotICAgIHRyeToKLSAgICAgICAgX19mID0gb3BlbihfX2ksICdyJykKLSAgICAgICAgX19mLmNsb3NlKCkKLSAgICAgICAgcGFzc3dkX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBwYXRoIGNvbnZlcnNpb24gaGFuZGxlcnMKLWRlZiBfX251bGxwYXRoY29udihwYXRoKToKLSAgICByZXR1cm4gcGF0aC5yZXBsYWNlKG9zLmFsdHNlcCwgb3Muc2VwKQotCi1kZWYgX191bml4cGF0aGNvbnYocGF0aCk6Ci0gICAgIyB0d28ga25vd24gZHJpdmUgbGV0dGVyIHZhcmlhdGlvbnM6ICJ4OyIgYW5kICIkeCIKLSAgICBpZiBwYXRoWzBdID09ICckJzoKLSAgICAgICAgY29udiA9IHBhdGhbMV0gKyAnOicgKyBwYXRoWzI6XQotICAgIGVsaWYgcGF0aFsxXSA9PSAnOyc6Ci0gICAgICAgIGNvbnYgPSBwYXRoWzBdICsgJzonICsgcGF0aFsyOl0KLSAgICBlbHNlOgotICAgICAgICBjb252ID0gcGF0aAotICAgIHJldHVybiBjb252LnJlcGxhY2Uob3MuYWx0c2VwLCBvcy5zZXApCi0KLSMgZGVjaWRlIHdoYXQgZmllbGQgc2VwYXJhdG9yIHdlIGNhbiB0cnkgdG8gdXNlIC0gVW5peCBzdGFuZGFyZCwgd2l0aAotIyB0aGUgcGxhdGZvcm0ncyBwYXRoIHNlcGFyYXRvciBhcyBhbiBvcHRpb24uICBObyBzcGVjaWFsIGZpZWxkIGNvbnZlcnNpb24KLSMgaGFuZGxlciBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGZpZWxkCi0jIHNlcGFyYXRvciwgYnV0IGFyZSByZXF1aXJlZCBmb3IgdGhlIGhvbWUgZGlyZWN0b3J5IGFuZCBzaGVsbCBmaWVsZHMgd2hlbgotIyB1c2luZyB0aGUgc3RhbmRhcmQgVW5peCAoIjoiKSBmaWVsZCBzZXBhcmF0b3IuCi1fX2ZpZWxkX3NlcCA9IHsnOic6IF9fdW5peHBhdGhjb252fQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXBbb3MucGF0aHNlcF0gPSBfX251bGxwYXRoY29udgotCi0jIGhlbHBlciByb3V0aW5lIHRvIGlkZW50aWZ5IHdoaWNoIHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgaW4gdXNlCi1kZWYgX19nZXRfZmllbGRfc2VwKHJlY29yZCk6Ci0gICAgZnMgPSBOb25lCi0gICAgZm9yIGMgaW4gX19maWVsZF9zZXAua2V5cygpOgotICAgICAgICAjIHRoZXJlIHNob3VsZCBiZSA2IGRlbGltaXRlciBjaGFyYWN0ZXJzIChmb3IgNyBmaWVsZHMpCi0gICAgICAgIGlmIHJlY29yZC5jb3VudChjKSA9PSA2OgotICAgICAgICAgICAgZnMgPSBjCi0gICAgICAgICAgICBicmVhawotICAgIGlmIGZzOgotICAgICAgICByZXR1cm4gZnMKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBLZXlFcnJvcignPj4gcGFzc3dkIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIFBhc3N3ZDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFzc3dkLCB1aWQsIGdpZCwgZ2Vjb3MsIGRpciwgc2hlbGwpOgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19uYW1lJ10gPSBuYW1lCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3Bhc3N3ZCddID0gcGFzc3dkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3VpZCddID0gdWlkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dpZCddID0gZ2lkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dlY29zJ10gPSBnZWNvcwotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19kaXInXSA9IGRpcgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19zaGVsbCddID0gc2hlbGwKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snX3JlY29yZCddID0gKHNlbGYucHdfbmFtZSwgc2VsZi5wd19wYXNzd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X3VpZCwgc2VsZi5wd19naWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X2dlY29zLCBzZWxmLnB3X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHdfc2hlbGwpCi0KLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDcKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVjb3JkW2tleV0KLQotICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdhdHRyaWJ1dGUgcmVhZC1vbmx5OiAlcycgJSBuYW1lKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc3RyKHNlbGYuX3JlY29yZCkKLQotICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgdGhpcyA9IHN0cihzZWxmLl9yZWNvcmQpCi0gICAgICAgIGlmIHRoaXMgPT0gb3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbGlmIHRoaXMgPCBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIDEKLQotCi0jIHJlYWQgdGhlIHdob2xlIGZpbGUsIHBhcnNpbmcgZWFjaCBlbnRyeSBpbnRvIHR1cGxlIGZvcm0KLSMgd2l0aCBkaWN0aW9uYXJpZXMgdG8gc3BlZWQgcmVjYWxsIGJ5IFVJRCBvciBwYXNzd2QgbmFtZQotZGVmIF9fcmVhZF9wYXNzd2RfZmlsZSgpOgotICAgIGlmIHBhc3N3ZF9maWxlOgotICAgICAgICBwYXNzd2QgPSBvcGVuKHBhc3N3ZF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIHBhc3N3b3JkIGRhdGFiYXNlIDw8JykKLSAgICB1aWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgZW50cnkgPSBwYXNzd2QucmVhZGxpbmUoKS5zdHJpcCgpCi0gICAgICAgIGlmIGxlbihlbnRyeSkgPiA2OgotICAgICAgICAgICAgaWYgc2VwIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VwID0gX19nZXRfZmllbGRfc2VwKGVudHJ5KQotICAgICAgICAgICAgZmllbGRzID0gZW50cnkuc3BsaXQoc2VwKQotICAgICAgICAgICAgZm9yIGkgaW4gKDIsIDMpOgotICAgICAgICAgICAgICAgIGZpZWxkc1tpXSA9IGludChmaWVsZHNbaV0pCi0gICAgICAgICAgICBmb3IgaSBpbiAoNSwgNik6Ci0gICAgICAgICAgICAgICAgZmllbGRzW2ldID0gX19maWVsZF9zZXBbc2VwXShmaWVsZHNbaV0pCi0gICAgICAgICAgICByZWNvcmQgPSBQYXNzd2QoKmZpZWxkcykKLSAgICAgICAgICAgIGlmIGZpZWxkc1syXSBub3QgaW4gdWlkeDoKLSAgICAgICAgICAgICAgICB1aWR4W2ZpZWxkc1syXV0gPSByZWNvcmQKLSAgICAgICAgICAgIGlmIGZpZWxkc1swXSBub3QgaW4gbmFteDoKLSAgICAgICAgICAgICAgICBuYW14W2ZpZWxkc1swXV0gPSByZWNvcmQKLSAgICAgICAgZWxpZiBsZW4oZW50cnkpID4gMDoKLSAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAgICAgICAgICAgICAgIyBza2lwIGVtcHR5IG9yIG1hbGZvcm1lZCByZWNvcmRzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBicmVhawotICAgIHBhc3N3ZC5jbG9zZSgpCi0gICAgaWYgbGVuKHVpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuICh1aWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IFVJRAotZGVmIGdldHB3dWlkKHVpZCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIHVbdWlkXQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IHBhc3N3ZCBuYW1lCi1kZWYgZ2V0cHduYW0obmFtZSk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG5bbmFtZV0KLQotIyByZXR1cm4gYWxsIHRoZSBwYXNzd2QgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldHB3YWxsKCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG4udmFsdWVzKCkKLQotIyB0ZXN0IGhhcm5lc3MKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZ2V0cHdhbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L3JlZ2VuIGIvTGliL3BsYXQtb3MyZW14L3JlZ2VuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzZWNkMmE4Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9yZWdlbgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyEgL2Jpbi9zaAotZXhwb3J0IElOQ0xVREU9JENfSU5DTFVERV9QQVRICi1zZXQgLXYKLXB5dGhvbi5leGUgLi4vLi4vVG9vbHMvc2NyaXB0cy9oMnB5LnB5ICRDX0lOQ0xVREVfUEFUSC9mY250bC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvc3lzL3NvY2tldC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknICRDX0lOQ0xVREVfUEFUSC9uZXRpbmV0L2luLmgKLSNweXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvdGVybWlvcy5oCmRpZmYgLS1naXQgYS9MaWIvcGxhdGZvcm0ucHkgYi9MaWIvcGxhdGZvcm0ucHkKaW5kZXggMDMwZWYyYS4uMTFiNTAxZSAxMDA3NTUKLS0tIGEvTGliL3BsYXRmb3JtLnB5CisrKyBiL0xpYi9wbGF0Zm9ybS5weQpAQCAtMTIyLDcgKzEyMiw3IEBACiBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgIyBvcy5kZXZudWxsIHdhcyBhZGRlZCBpbiBQeXRob24gMi40LCBzbyBlbXVsYXRlIGl0IGZvciBlYXJsaWVyCiAgICAgIyBQeXRob24gdmVyc2lvbnMKLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywgJ3dpbjMyJywgJ3dpbjE2Jyk6CiAgICAgICAgICMgVXNlIHRoZSBvbGQgQ1AvTSBOVUwgYXMgZGV2aWNlIG5hbWUKICAgICAgICAgREVWX05VTEwgPSAnTlVMJwogICAgIGVsc2U6CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBicicobGliYyhfXHcrKT9cLnNvKD86XC4oXGRbMC05Ll0qKSk/KScsIHJlLkFTQ0lJKQogCi1kZWYgbGliY192ZXIoZXhlY3V0YWJsZT1zeXMuZXhlY3V0YWJsZSxsaWI9JycsdmVyc2lvbj0nJywKK2RlZiBsaWJjX3ZlcihleGVjdXRhYmxlPXN5cy5leGVjdXRhYmxlLCBsaWI9JycsIHZlcnNpb249JycsCiAKICAgICAgICAgICAgICBjaHVua3NpemU9MTYzODQpOgogCkBAIC0xNjMsMTIgKzE2MywxMiBAQAogICAgICAgICAjIGhlcmUgdG8gd29yayBhcm91bmQgcHJvYmxlbXMgd2l0aCBDeWd3aW4gbm90IGJlaW5nCiAgICAgICAgICMgYWJsZSB0byBvcGVuIHN5bWxpbmtzIGZvciByZWFkaW5nCiAgICAgICAgIGV4ZWN1dGFibGUgPSBvcy5wYXRoLnJlYWxwYXRoKGV4ZWN1dGFibGUpCi0gICAgZiA9IG9wZW4oZXhlY3V0YWJsZSwncmInKQorICAgIGYgPSBvcGVuKGV4ZWN1dGFibGUsICdyYicpCiAgICAgYmluYXJ5ID0gZi5yZWFkKGNodW5rc2l6ZSkKICAgICBwb3MgPSAwCiAgICAgd2hpbGUgMToKICAgICAgICAgaWYgYidsaWJjJyBpbiBiaW5hcnkgb3IgYidHTElCQycgaW4gYmluYXJ5OgotICAgICAgICAgICAgbSA9IF9saWJjX3NlYXJjaC5zZWFyY2goYmluYXJ5LHBvcykKKyAgICAgICAgICAgIG0gPSBfbGliY19zZWFyY2guc2VhcmNoKGJpbmFyeSwgcG9zKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbSA9IE5vbmUKICAgICAgICAgaWYgbm90IG06CkBAIC0xNzcsNyArMTc3LDcgQEAKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgcG9zID0gMAogICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgbGliY2luaXQsZ2xpYmMsZ2xpYmN2ZXJzaW9uLHNvLHRocmVhZHMsc292ZXJzaW9uID0gWworICAgICAgICBsaWJjaW5pdCwgZ2xpYmMsIGdsaWJjdmVyc2lvbiwgc28sIHRocmVhZHMsIHNvdmVyc2lvbiA9IFsKICAgICAgICAgICAgIHMuZGVjb2RlKCdsYXRpbjEnKSBpZiBzIGlzIG5vdCBOb25lIGVsc2UgcwogICAgICAgICAgICAgZm9yIHMgaW4gbS5ncm91cHMoKV0KICAgICAgICAgaWYgbGliY2luaXQgYW5kIG5vdCBsaWI6CkBAIC0xOTcsOSArMTk3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24gKyB0aHJlYWRzCiAgICAgICAgIHBvcyA9IG0uZW5kKCkKICAgICBmLmNsb3NlKCkKLSAgICByZXR1cm4gbGliLHZlcnNpb24KKyAgICByZXR1cm4gbGliLCB2ZXJzaW9uCiAKLWRlZiBfZGlzdF90cnlfaGFyZGVyKGRpc3RuYW1lLHZlcnNpb24saWQpOgorZGVmIF9kaXN0X3RyeV9oYXJkZXIoZGlzdG5hbWUsIHZlcnNpb24sIGlkKToKIAogICAgICIiIiBUcmllcyBzb21lIHNwZWNpYWwgdHJpY2tzIHRvIGdldCB0aGUgZGlzdHJpYnV0aW9uCiAgICAgICAgIGluZm9ybWF0aW9uIGluIGNhc2UgdGhlIGRlZmF1bHQgbWV0aG9kIGZhaWxzLgpAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgIGZvciBsaW5lIGluIG9wZW4oJy92YXIvYWRtL2luc3QtbG9nL2luZm8nKToKICAgICAgICAgICAgIHR2ID0gbGluZS5zcGxpdCgpCiAgICAgICAgICAgICBpZiBsZW4odHYpID09IDI6Ci0gICAgICAgICAgICAgICAgdGFnLHZhbHVlID0gdHYKKyAgICAgICAgICAgICAgICB0YWcsIHZhbHVlID0gdHYKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIHRhZyA9PSAnTUlOX0RJU1RfVkVSU0lPTic6CkBAIC0yMjIsNyArMjIyLDcgQEAKICAgICAgICAgICAgIGVsaWYgdGFnID09ICdESVNUX0lERU5UJzoKICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZS5zcGxpdCgnLScpCiAgICAgICAgICAgICAgICAgaWQgPSB2YWx1ZXNbMl0KLSAgICAgICAgcmV0dXJuIGRpc3RuYW1lLHZlcnNpb24saWQKKyAgICAgICAgcmV0dXJuIGRpc3RuYW1lLCB2ZXJzaW9uLCBpZAogCiAgICAgaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvLmluc3RhbGxlZCcpOgogICAgICAgICAjIENhbGRlcmEgT3BlbkxpbnV4IGhhcyBzb21lIGluZm9zIGluIHRoYXQgZmlsZSAodGhhbmtzIHRvIENvbGluIEtvbmcpCkBAIC0yMzEsNyArMjMxLDcgQEAKICAgICAgICAgICAgIGlmIGxlbihwa2cpID49IDIgYW5kIHBrZ1swXSA9PSAnT3BlbkxpbnV4JzoKICAgICAgICAgICAgICAgICAjIFhYWCBkb2VzIENhbGRlcmEgc3VwcG9ydCBub24gSW50ZWwgcGxhdGZvcm1zID8gSWYgeWVzLAogICAgICAgICAgICAgICAgICMgICAgIHdoZXJlIGNhbiB3ZSBmaW5kIHRoZSBuZWVkZWQgaWQgPwotICAgICAgICAgICAgICAgIHJldHVybiAnT3BlbkxpbnV4Jyxwa2dbMV0saWQKKyAgICAgICAgICAgICAgICByZXR1cm4gJ09wZW5MaW51eCcsIHBrZ1sxXSwgaWQKIAogICAgIGlmIG9zLnBhdGguaXNkaXIoJy91c3IvbGliL3NldHVwJyk6CiAgICAgICAgICMgQ2hlY2sgZm9yIHNsYWNrd2FyZSB2ZXJzaW9uIHRhZyBmaWxlICh0aGFua3MgdG8gR3JlZyBBbmRydWspCkBAIC0yNDMsOSArMjQzLDkgQEAKICAgICAgICAgICAgIHZlcmZpbGVzLnNvcnQoKQogICAgICAgICAgICAgZGlzdG5hbWUgPSAnc2xhY2t3YXJlJwogICAgICAgICAgICAgdmVyc2lvbiA9IHZlcmZpbGVzWy0xXVsxNDpdCi0gICAgICAgICAgICByZXR1cm4gZGlzdG5hbWUsdmVyc2lvbixpZAorICAgICAgICAgICAgcmV0dXJuIGRpc3RuYW1lLCB2ZXJzaW9uLCBpZAogCi0gICAgcmV0dXJuIGRpc3RuYW1lLHZlcnNpb24saWQKKyAgICByZXR1cm4gZGlzdG5hbWUsIHZlcnNpb24sIGlkCiAKIF9yZWxlYXNlX2ZpbGVuYW1lID0gcmUuY29tcGlsZShyJyhcdyspWy1fXShyZWxlYXNlfHZlcnNpb24pJywgcmUuQVNDSUkpCiBfbHNiX3JlbGVhc2VfdmVyc2lvbiA9IHJlLmNvbXBpbGUocicoLispJwpAQCAtMzE0LDI1ICszMTQsMjUgQEAKICAgICAgICAgZGlzdHJpYnV0aW9uIHJlYWQgZnJvbSB0aGUgT1MgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgc2hvcnQKICAgICAgICAgbmFtZSB0YWtlbiBmcm9tIHN1cHBvcnRlZF9kaXN0cyBpcyB1c2VkLgogCi0gICAgICAgIFJldHVybnMgYSB0dXBsZSAoZGlzdG5hbWUsdmVyc2lvbixpZCkgd2hpY2ggZGVmYXVsdCB0byB0aGUKKyAgICAgICAgUmV0dXJucyBhIHR1cGxlIChkaXN0bmFtZSwgdmVyc2lvbiwgaWQpIHdoaWNoIGRlZmF1bHQgdG8gdGhlCiAgICAgICAgIGFyZ3MgZ2l2ZW4gYXMgcGFyYW1ldGVycy4KIAogICAgICIiIgogICAgIHRyeToKICAgICAgICAgZXRjID0gb3MubGlzdGRpcihfVU5JWENPTkZESVIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIFByb2JhYmx5IG5vdCBhIFVuaXggc3lzdGVtCi0gICAgICAgIHJldHVybiBkaXN0bmFtZSx2ZXJzaW9uLGlkCisgICAgICAgIHJldHVybiBkaXN0bmFtZSwgdmVyc2lvbiwgaWQKICAgICBldGMuc29ydCgpCiAgICAgZm9yIGZpbGUgaW4gZXRjOgogICAgICAgICBtID0gX3JlbGVhc2VfZmlsZW5hbWUubWF0Y2goZmlsZSkKICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIF9kaXN0bmFtZSxkdW1teSA9IG0uZ3JvdXBzKCkKKyAgICAgICAgICAgIF9kaXN0bmFtZSwgZHVtbXkgPSBtLmdyb3VwcygpCiAgICAgICAgICAgICBpZiBfZGlzdG5hbWUgaW4gc3VwcG9ydGVkX2Rpc3RzOgogICAgICAgICAgICAgICAgIGRpc3RuYW1lID0gX2Rpc3RuYW1lCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICBlbHNlOgotICAgICAgICByZXR1cm4gX2Rpc3RfdHJ5X2hhcmRlcihkaXN0bmFtZSx2ZXJzaW9uLGlkKQorICAgICAgICByZXR1cm4gX2Rpc3RfdHJ5X2hhcmRlcihkaXN0bmFtZSwgdmVyc2lvbiwgaWQpCiAKICAgICAjIFJlYWQgdGhlIGZpcnN0IGxpbmUKICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKF9VTklYQ09ORkRJUiwgZmlsZSksICdyJywKQEAgLTM1MCw3ICszNTAsNyBAQAogCiAjIFRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgogCi1kZWYgZGlzdChkaXN0bmFtZT0nJyx2ZXJzaW9uPScnLGlkPScnLAorZGVmIGRpc3QoZGlzdG5hbWU9JycsIHZlcnNpb249JycsIGlkPScnLAogCiAgICAgICAgICBzdXBwb3J0ZWRfZGlzdHM9X3N1cHBvcnRlZF9kaXN0cyk6CiAKQEAgLTM2MCw3ICszNjAsNyBAQAogICAgICAgICAvZXRjIGFuZCB0aGVuIHJldmVydHMgdG8gX2Rpc3RfdHJ5X2hhcmRlcigpIGluIGNhc2Ugbm8KICAgICAgICAgc3VpdGFibGUgZmlsZXMgYXJlIGZvdW5kLgogCi0gICAgICAgIFJldHVybnMgYSB0dXBsZSAoZGlzdG5hbWUsdmVyc2lvbixpZCkgd2hpY2ggZGVmYXVsdCB0byB0aGUKKyAgICAgICAgUmV0dXJucyBhIHR1cGxlIChkaXN0bmFtZSwgdmVyc2lvbiwgaWQpIHdoaWNoIGRlZmF1bHQgdG8gdGhlCiAgICAgICAgIGFyZ3MgZ2l2ZW4gYXMgcGFyYW1ldGVycy4KIAogICAgICIiIgpAQCAtMzg1LDExICszODUsMTEgQEAKICAgICBpZiBidWlsZDoKICAgICAgICAgbC5hcHBlbmQoYnVpbGQpCiAgICAgdHJ5OgotICAgICAgICBpbnRzID0gbWFwKGludCxsKQorICAgICAgICBpbnRzID0gbWFwKGludCwgbCkKICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgc3RyaW5ncyA9IGwKICAgICBlbHNlOgotICAgICAgICBzdHJpbmdzID0gbGlzdChtYXAoc3RyLGludHMpKQorICAgICAgICBzdHJpbmdzID0gbGlzdChtYXAoc3RyLCBpbnRzKSkKICAgICB2ZXJzaW9uID0gJy4nLmpvaW4oc3RyaW5nc1s6M10pCiAgICAgcmV0dXJuIHZlcnNpb24KIApAQCAtNDA4LDQ2ICs0MDgsNDMgQEAKIAogZGVmIF9zeXNjbWRfdmVyKHN5c3RlbT0nJywgcmVsZWFzZT0nJywgdmVyc2lvbj0nJywKIAotICAgICAgICAgICAgICAgc3VwcG9ydGVkX3BsYXRmb3Jtcz0oJ3dpbjMyJywnd2luMTYnLCdkb3MnLCdvczInKSk6CisgICAgICAgICAgICAgICBzdXBwb3J0ZWRfcGxhdGZvcm1zPSgnd2luMzInLCAnd2luMTYnLCAnZG9zJykpOgogCiAgICAgIiIiIFRyaWVzIHRvIGZpZ3VyZSBvdXQgdGhlIE9TIHZlcnNpb24gdXNlZCBhbmQgcmV0dXJucwotICAgICAgICBhIHR1cGxlIChzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uKS4KKyAgICAgICAgYSB0dXBsZSAoc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uKS4KIAogICAgICAgICBJdCB1c2VzIHRoZSAidmVyIiBzaGVsbCBjb21tYW5kIGZvciB0aGlzIHdoaWNoIGlzIGtub3duCi0gICAgICAgIHRvIGV4aXN0cyBvbiBXaW5kb3dzLCBET1MgYW5kIE9TLzIuIFhYWCBPdGhlcnMgdG9vID8KKyAgICAgICAgdG8gZXhpc3RzIG9uIFdpbmRvd3MsIERPUy4gWFhYIE90aGVycyB0b28gPwogCiAgICAgICAgIEluIGNhc2UgdGhpcyBmYWlscywgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYXJlIHVzZWQgYXMKICAgICAgICAgZGVmYXVsdHMuCiAKICAgICAiIiIKICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluIHN1cHBvcnRlZF9wbGF0Zm9ybXM6Ci0gICAgICAgIHJldHVybiBzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uCisgICAgICAgIHJldHVybiBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24KIAogICAgICMgVHJ5IHNvbWUgY29tbW9uIGNtZCBzdHJpbmdzCi0gICAgZm9yIGNtZCBpbiAoJ3ZlcicsJ2NvbW1hbmQgL2MgdmVyJywnY21kIC9jIHZlcicpOgorICAgIGZvciBjbWQgaW4gKCd2ZXInLCAnY29tbWFuZCAvYyB2ZXInLCAnY21kIC9jIHZlcicpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwaXBlID0gcG9wZW4oY21kKQogICAgICAgICAgICAgaW5mbyA9IHBpcGUucmVhZCgpCiAgICAgICAgICAgICBpZiBwaXBlLmNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgcmFpc2Ugb3MuZXJyb3IoJ2NvbW1hbmQgZmFpbGVkJykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjb21tYW5kIGZhaWxlZCcpCiAgICAgICAgICAgICAjIFhYWCBIb3cgY2FuIEkgc3VwcHJlc3Mgc2hlbGwgZXJyb3JzIGZyb20gYmVpbmcgd3JpdHRlbgogICAgICAgICAgICAgIyAgICAgdG8gc3RkZXJyID8KLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIHdoeToKLSAgICAgICAgICAgICNwcmludCAnQ29tbWFuZCAlcyBmYWlsZWQ6ICVzJyAlIChjbWQsd2h5KQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgd2h5OgotICAgICAgICAgICAgI3ByaW50ICdDb21tYW5kICVzIGZhaWxlZDogJXMnICUgKGNtZCx3aHkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgICNwcmludCAnQ29tbWFuZCAlcyBmYWlsZWQ6ICVzJyAlIChjbWQsIHdoeSkKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBicmVhawogICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uCisgICAgICAgIHJldHVybiBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24KIAogICAgICMgUGFyc2UgdGhlIG91dHB1dAogICAgIGluZm8gPSBpbmZvLnN0cmlwKCkKICAgICBtID0gX3Zlcl9vdXRwdXQubWF0Y2goaW5mbykKICAgICBpZiBtIGlzIG5vdCBOb25lOgotICAgICAgICBzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uID0gbS5ncm91cHMoKQorICAgICAgICBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24gPSBtLmdyb3VwcygpCiAgICAgICAgICMgU3RyaXAgdHJhaWxpbmcgZG90cyBmcm9tIHZlcnNpb24gYW5kIHJlbGVhc2UKICAgICAgICAgaWYgcmVsZWFzZVstMV0gPT0gJy4nOgogICAgICAgICAgICAgcmVsZWFzZSA9IHJlbGVhc2VbOi0xXQpAQCAtNDU2LDkgKzQ1Myw5IEBACiAgICAgICAgICMgTm9ybWFsaXplIHRoZSB2ZXJzaW9uIGFuZCBidWlsZCBzdHJpbmdzIChlbGltaW5hdGluZyBhZGRpdGlvbmFsCiAgICAgICAgICMgemVyb3MpCiAgICAgICAgIHZlcnNpb24gPSBfbm9ybV92ZXJzaW9uKHZlcnNpb24pCi0gICAgcmV0dXJuIHN5c3RlbSxyZWxlYXNlLHZlcnNpb24KKyAgICByZXR1cm4gc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uCiAKLWRlZiBfd2luMzJfZ2V0dmFsdWUoa2V5LG5hbWUsZGVmYXVsdD0nJyk6CitkZWYgX3dpbjMyX2dldHZhbHVlKGtleSwgbmFtZSwgZGVmYXVsdD0nJyk6CiAKICAgICAiIiIgUmVhZCBhIHZhbHVlIGZvciBuYW1lIGZyb20gdGhlIHJlZ2lzdHJ5IGtleS4KIApAQCAtNDczLDE0ICs0NzAsMTQgQEAKICAgICAgICAgaW1wb3J0IHdpbnJlZwogICAgICAgICBSZWdRdWVyeVZhbHVlRXggPSB3aW5yZWcuUXVlcnlWYWx1ZUV4CiAgICAgdHJ5OgotICAgICAgICByZXR1cm4gUmVnUXVlcnlWYWx1ZUV4KGtleSxuYW1lKQorICAgICAgICByZXR1cm4gUmVnUXVlcnlWYWx1ZUV4KGtleSwgbmFtZSkKICAgICBleGNlcHQ6CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAKLWRlZiB3aW4zMl92ZXIocmVsZWFzZT0nJyx2ZXJzaW9uPScnLGNzZD0nJyxwdHlwZT0nJyk6CitkZWYgd2luMzJfdmVyKHJlbGVhc2U9JycsIHZlcnNpb249JycsIGNzZD0nJywgcHR5cGU9JycpOgogCiAgICAgIiIiIEdldCBhZGRpdGlvbmFsIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgV2luZG93cyBSZWdpc3RyeQotICAgICAgICBhbmQgcmV0dXJuIGEgdHVwbGUgKHZlcnNpb24sY3NkLHB0eXBlKSByZWZlcnJpbmcgdG8gdmVyc2lvbgorICAgICAgICBhbmQgcmV0dXJuIGEgdHVwbGUgKHZlcnNpb24sIGNzZCwgcHR5cGUpIHJlZmVycmluZyB0byB2ZXJzaW9uCiAgICAgICAgIG51bWJlciwgQ1NEIGxldmVsIChzZXJ2aWNlIHBhY2spLCBhbmQgT1MgdHlwZSAobXVsdGkvc2luZ2xlCiAgICAgICAgIHByb2Nlc3NvcikuCiAKQEAgLTUxNyw3ICs1MTQsNyBAQAogICAgICAgICAgICAgc3lzLmdldHdpbmRvd3N2ZXJzaW9uCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgICMgTm8gZW11bGF0aW9uIHBvc3NpYmxlLCBzbyByZXR1cm4gdGhlIGRlZmF1bHRzLi4uCi0gICAgICAgICAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uLGNzZCxwdHlwZQorICAgICAgICAgICAgcmV0dXJuIHJlbGVhc2UsIHZlcnNpb24sIGNzZCwgcHR5cGUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgRW11bGF0aW9uIHVzaW5nIHdpbnJlZyAoYWRkZWQgaW4gUHl0aG9uIDIuMCkgYW5kCiAgICAgICAgICAgICAjIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpIChhZGRlZCBpbiBQeXRob24gMi4zKQpAQCAtNTM1LDggKzUzMiw4IEBACiAKICAgICAjIEZpbmQgb3V0IHRoZSByZWdpc3RyeSBrZXkgYW5kIHNvbWUgZ2VuZXJhbCB2ZXJzaW9uIGluZm9zCiAgICAgd2ludmVyID0gR2V0VmVyc2lvbkV4KCkKLSAgICBtYWosbWluLGJ1aWxkbm8scGxhdCxjc2QgPSB3aW52ZXIKLSAgICB2ZXJzaW9uID0gJyVpLiVpLiVpJyAlIChtYWosbWluLGJ1aWxkbm8gJiAweEZGRkYpCisgICAgbWFqLCBtaW4sIGJ1aWxkbm8sIHBsYXQsIGNzZCA9IHdpbnZlcgorICAgIHZlcnNpb24gPSAnJWkuJWkuJWknICUgKG1haiwgbWluLCBidWlsZG5vICYgMHhGRkZGKQogICAgIGlmIGhhc2F0dHIod2ludmVyLCAic2VydmljZV9wYWNrIik6CiAgICAgICAgIGlmIHdpbnZlci5zZXJ2aWNlX3BhY2sgIT0gIiI6CiAgICAgICAgICAgICBjc2QgPSAnU1AlcycgJSB3aW52ZXIuc2VydmljZV9wYWNrX21ham9yCkBAIC01ODYsNyArNTgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIyBEaXNjYXJkIGFueSB0eXBlIHRoYXQgaXNuJ3QgUkVHX1NaCiAgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUgPT0gUkVHX1NaIGFuZCBuYW1lLmZpbmQoIlNlcnZlciIpICE9IC0xOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdF90eXBlID0gVkVSX05UX1NFUlZFUgotICAgICAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgVXNlIGRlZmF1bHQgb2YgVkVSX05UX1dPUktTVEFUSU9OCiAgICAgICAgICAgICAgICAgICAgIHBhc3MKIApAQCAtNjExLDggKzYwOCw4IEBACiAgICAgZWxzZToKICAgICAgICAgaWYgbm90IHJlbGVhc2U6CiAgICAgICAgICAgICAjIEUuZy4gV2luMy4xIHdpdGggd2luMzJzCi0gICAgICAgICAgICByZWxlYXNlID0gJyVpLiVpJyAlIChtYWosbWluKQotICAgICAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uLGNzZCxwdHlwZQorICAgICAgICAgICAgcmVsZWFzZSA9ICclaS4laScgJSAobWFqLCBtaW4pCisgICAgICAgIHJldHVybiByZWxlYXNlLCB2ZXJzaW9uLCBjc2QsIHB0eXBlCiAKICAgICAjIE9wZW4gdGhlIHJlZ2lzdHJ5IGtleQogICAgIHRyeToKQEAgLTYyMCw3ICs2MTcsNyBAQAogICAgICAgICAjIEdldCBhIHZhbHVlIHRvIG1ha2Ugc3VyZSB0aGUga2V5IGV4aXN0cy4uLgogICAgICAgICBSZWdRdWVyeVZhbHVlRXgoa2V5Q3VyVmVyLCAnU3lzdGVtUm9vdCcpCiAgICAgZXhjZXB0OgotICAgICAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uLGNzZCxwdHlwZQorICAgICAgICByZXR1cm4gcmVsZWFzZSwgdmVyc2lvbiwgY3NkLCBwdHlwZQogCiAgICAgIyBQYXJzZSB2YWx1ZXMKICAgICAjc3VidmVyc2lvbiA9IF93aW4zMl9nZXR2YWx1ZShrZXlDdXJWZXIsCkBAIC02MzAsNzMgKzYyNywxNyBAQAogICAgICMgICByZWxlYXNlID0gcmVsZWFzZSArIHN1YnZlcnNpb24gIyA5NWEsIDk1YiwgZXRjLgogICAgIGJ1aWxkID0gX3dpbjMyX2dldHZhbHVlKGtleUN1clZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ3VycmVudEJ1aWxkTnVtYmVyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJycsMSkpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcnLCAxKSlbMF0KICAgICBwdHlwZSA9IF93aW4zMl9nZXR2YWx1ZShrZXlDdXJWZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ3VycmVudFR5cGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB0eXBlLDEpKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB0eXBlLCAxKSlbMF0KIAogICAgICMgTm9ybWFsaXplIHZlcnNpb24KLSAgICB2ZXJzaW9uID0gX25vcm1fdmVyc2lvbih2ZXJzaW9uLGJ1aWxkKQorICAgIHZlcnNpb24gPSBfbm9ybV92ZXJzaW9uKHZlcnNpb24sIGJ1aWxkKQogCiAgICAgIyBDbG9zZSBrZXkKICAgICBSZWdDbG9zZUtleShrZXlDdXJWZXIpCi0gICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbixjc2QscHR5cGUKLQotZGVmIF9tYWNfdmVyX2xvb2t1cChzZWxlY3RvcnMsZGVmYXVsdD1Ob25lKToKLQotICAgIGZyb20gX2dlc3RhbHQgaW1wb3J0IGdlc3RhbHQKLSAgICBsID0gW10KLSAgICBhcHBlbmQgPSBsLmFwcGVuZAotICAgIGZvciBzZWxlY3RvciBpbiBzZWxlY3RvcnM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGFwcGVuZChnZXN0YWx0KHNlbGVjdG9yKSkKLSAgICAgICAgZXhjZXB0IChSdW50aW1lRXJyb3IsIE9TRXJyb3IpOgotICAgICAgICAgICAgYXBwZW5kKGRlZmF1bHQpCi0gICAgcmV0dXJuIGwKLQotZGVmIF9iY2Qyc3RyKGJjZCk6Ci0KLSAgICByZXR1cm4gaGV4KGJjZClbMjpdCi0KLWRlZiBfbWFjX3Zlcl9nZXN0YWx0KCk6Ci0gICAgIiIiCi0gICAgICAgIFRoYW5rcyB0byBNYXJrIFIuIExldmluc29uIGZvciBtYWlsaW5nIGRvY3VtZW50YXRpb24gbGlua3MgYW5kCi0gICAgICAgIGNvZGUgZXhhbXBsZXMgZm9yIHRoaXMgZnVuY3Rpb24uIERvY3VtZW50YXRpb24gZm9yIHRoZQotICAgICAgICBnZXN0YWx0KCkgQVBJIGlzIGF2YWlsYWJsZSBvbmxpbmUgYXQ6Ci0KLSAgICAgICAgICAgaHR0cDovL3d3dy5yZ2Fyb3MubmwvZ2VzdGFsdC8KLSAgICAiIiIKLSAgICAjIENoZWNrIHdoZXRoZXIgdGhlIHZlcnNpb24gaW5mbyBtb2R1bGUgaXMgYXZhaWxhYmxlCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgX2dlc3RhbHQKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgIyBHZXQgdGhlIGluZm9zCi0gICAgc3lzdiwgc3lzYSA9IF9tYWNfdmVyX2xvb2t1cCgoJ3N5c3YnLCdzeXNhJykpCi0gICAgIyBEZWNvZGUgdGhlIGluZm9zCi0gICAgaWYgc3lzdjoKLSAgICAgICAgbWFqb3IgPSAoc3lzdiAmIDB4RkYwMCkgPj4gOAotICAgICAgICBtaW5vciA9IChzeXN2ICYgMHgwMEYwKSA+PiA0Ci0gICAgICAgIHBhdGNoID0gKHN5c3YgJiAweDAwMEYpCi0KLSAgICAgICAgaWYgKG1ham9yLCBtaW5vcikgPj0gKDEwLCA0KToKLSAgICAgICAgICAgICMgdGhlICdzeXN2JyBnZXN0YWxkIGNhbm5vdCByZXR1cm4gcGF0Y2hsZXZlbHMKLSAgICAgICAgICAgICMgaGlnaGVyIHRoYW4gOS4gQXBwbGUgaW50cm9kdWNlZCAzIG5ldwotICAgICAgICAgICAgIyBnZXN0YWx0IGNvZGVzIGluIDEwLjQgdG8gZGVhbCB3aXRoIHRoaXMKLSAgICAgICAgICAgICMgaXNzdWUgKG5lZWRlZCBiZWNhdXNlIHBhdGNoIGxldmVscyBjYW4KLSAgICAgICAgICAgICMgcnVuIGhpZ2hlciB0aGFuIDksIHN1Y2ggYXMgMTAuNC4xMSkKLSAgICAgICAgICAgIG1ham9yLG1pbm9yLHBhdGNoID0gX21hY192ZXJfbG9va3VwKCgnc3lzMScsJ3N5czInLCdzeXMzJykpCi0gICAgICAgICAgICByZWxlYXNlID0gJyVpLiVpLiVpJyAlKG1ham9yLCBtaW5vciwgcGF0Y2gpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZWxlYXNlID0gJyVzLiVpLiVpJyAlIChfYmNkMnN0cihtYWpvciksbWlub3IscGF0Y2gpCi0KLSAgICBpZiBzeXNhOgotICAgICAgICBtYWNoaW5lID0gezB4MTogJzY4aycsCi0gICAgICAgICAgICAgICAgICAgMHgyOiAnUG93ZXJQQycsCi0gICAgICAgICAgICAgICAgICAgMHhhOiAnaTM4Nid9LmdldChzeXNhLCcnKQotCi0gICAgdmVyc2lvbmluZm89KCcnLCAnJywgJycpCi0gICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbmluZm8sbWFjaGluZQorICAgIHJldHVybiByZWxlYXNlLCB2ZXJzaW9uLCBjc2QsIHB0eXBlCiAKIGRlZiBfbWFjX3Zlcl94bWwoKToKICAgICBmbiA9ICcvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL1N5c3RlbVZlcnNpb24ucGxpc3QnCkBAIC03MDgsMTggKzY0OSwxOSBAQAogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgIHBsID0gcGxpc3RsaWIucmVhZFBsaXN0KGZuKQorICAgIHdpdGggb3BlbihmbiwgJ3JiJykgYXMgZjoKKyAgICAgICAgcGwgPSBwbGlzdGxpYi5sb2FkKGYpCiAgICAgcmVsZWFzZSA9IHBsWydQcm9kdWN0VmVyc2lvbiddCi0gICAgdmVyc2lvbmluZm89KCcnLCAnJywgJycpCisgICAgdmVyc2lvbmluZm8gPSAoJycsICcnLCAnJykKICAgICBtYWNoaW5lID0gb3MudW5hbWUoKS5tYWNoaW5lCiAgICAgaWYgbWFjaGluZSBpbiAoJ3BwYycsICdQb3dlciBNYWNpbnRvc2gnKToKLSAgICAgICAgIyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBnZXN0YWx0IGJhc2VkIGNvZGUKKyAgICAgICAgIyBDYW5vbmljYWwgbmFtZQogICAgICAgICBtYWNoaW5lID0gJ1Bvd2VyUEMnCiAKLSAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uaW5mbyxtYWNoaW5lCisgICAgcmV0dXJuIHJlbGVhc2UsIHZlcnNpb25pbmZvLCBtYWNoaW5lCiAKIAotZGVmIG1hY192ZXIocmVsZWFzZT0nJyx2ZXJzaW9uaW5mbz0oJycsJycsJycpLG1hY2hpbmU9JycpOgorZGVmIG1hY192ZXIocmVsZWFzZT0nJywgdmVyc2lvbmluZm89KCcnLCAnJywgJycpLCBtYWNoaW5lPScnKToKIAogICAgICIiIiBHZXQgTWFjT1MgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIGl0IGFzIHR1cGxlIChyZWxlYXNlLAogICAgICAgICB2ZXJzaW9uaW5mbywgbWFjaGluZSkgd2l0aCB2ZXJzaW9uaW5mbyBiZWluZyBhIHR1cGxlICh2ZXJzaW9uLApAQCAtNzM1LDE2ICs2NzcsMTAgQEAKICAgICBpZiBpbmZvIGlzIG5vdCBOb25lOgogICAgICAgICByZXR1cm4gaW5mbwogCi0gICAgIyBJZiB0aGF0IGRvZXNuJ3Qgd29yayBmb3Igc29tZSByZWFzb24gZmFsbCBiYWNrIHRvIHJlYWRpbmcgdGhlCi0gICAgIyBpbmZvcm1hdGlvbiB1c2luZyBnZXN0YWx0IGNhbGxzLgotICAgIGluZm8gPSBfbWFjX3Zlcl9nZXN0YWx0KCkKLSAgICBpZiBpbmZvIGlzIG5vdCBOb25lOgotICAgICAgICByZXR1cm4gaW5mbwotCiAgICAgIyBJZiB0aGF0IGFsc28gZG9lc24ndCB3b3JrIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZXMKLSAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uaW5mbyxtYWNoaW5lCisgICAgcmV0dXJuIHJlbGVhc2UsIHZlcnNpb25pbmZvLCBtYWNoaW5lCiAKLWRlZiBfamF2YV9nZXRwcm9wKG5hbWUsZGVmYXVsdCk6CitkZWYgX2phdmFfZ2V0cHJvcChuYW1lLCBkZWZhdWx0KToKIAogICAgIGZyb20gamF2YS5sYW5nIGltcG9ydCBTeXN0ZW0KICAgICB0cnk6CkBAIC03NTUsMTMgKzY5MSwxMyBAQAogICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKIAotZGVmIGphdmFfdmVyKHJlbGVhc2U9JycsdmVuZG9yPScnLHZtaW5mbz0oJycsJycsJycpLG9zaW5mbz0oJycsJycsJycpKToKK2RlZiBqYXZhX3ZlcihyZWxlYXNlPScnLCB2ZW5kb3I9JycsIHZtaW5mbz0oJycsICcnLCAnJyksIG9zaW5mbz0oJycsICcnLCAnJykpOgogCiAgICAgIiIiIFZlcnNpb24gaW50ZXJmYWNlIGZvciBKeXRob24uCiAKLSAgICAgICAgUmV0dXJucyBhIHR1cGxlIChyZWxlYXNlLHZlbmRvcix2bWluZm8sb3NpbmZvKSB3aXRoIHZtaW5mbyBiZWluZwotICAgICAgICBhIHR1cGxlICh2bV9uYW1lLHZtX3JlbGVhc2Usdm1fdmVuZG9yKSBhbmQgb3NpbmZvIGJlaW5nIGEKLSAgICAgICAgdHVwbGUgKG9zX25hbWUsb3NfdmVyc2lvbixvc19hcmNoKS4KKyAgICAgICAgUmV0dXJucyBhIHR1cGxlIChyZWxlYXNlLCB2ZW5kb3IsIHZtaW5mbywgb3NpbmZvKSB3aXRoIHZtaW5mbyBiZWluZworICAgICAgICBhIHR1cGxlICh2bV9uYW1lLCB2bV9yZWxlYXNlLCB2bV92ZW5kb3IpIGFuZCBvc2luZm8gYmVpbmcgYQorICAgICAgICB0dXBsZSAob3NfbmFtZSwgb3NfdmVyc2lvbiwgb3NfYXJjaCkuCiAKICAgICAgICAgVmFsdWVzIHdoaWNoIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGFyZSBzZXQgdG8gdGhlIGRlZmF1bHRzCiAgICAgICAgIGdpdmVuIGFzIHBhcmFtZXRlcnMgKHdoaWNoIGFsbCBkZWZhdWx0IHRvICcnKS4KQEAgLTc3MSw3ICs3MDcsNyBAQAogICAgIHRyeToKICAgICAgICAgaW1wb3J0IGphdmEubGFuZwogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcmV0dXJuIHJlbGVhc2UsdmVuZG9yLHZtaW5mbyxvc2luZm8KKyAgICAgICAgcmV0dXJuIHJlbGVhc2UsIHZlbmRvciwgdm1pbmZvLCBvc2luZm8KIAogICAgIHZlbmRvciA9IF9qYXZhX2dldHByb3AoJ2phdmEudmVuZG9yJywgdmVuZG9yKQogICAgIHJlbGVhc2UgPSBfamF2YV9nZXRwcm9wKCdqYXZhLnZlcnNpb24nLCByZWxlYXNlKQpAQCAtNzkwLDkgKzcyNiw5IEBACiAKICMjIyBTeXN0ZW0gbmFtZSBhbGlhc2luZwogCi1kZWYgc3lzdGVtX2FsaWFzKHN5c3RlbSxyZWxlYXNlLHZlcnNpb24pOgorZGVmIHN5c3RlbV9hbGlhcyhzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24pOgogCi0gICAgIiIiIFJldHVybnMgKHN5c3RlbSxyZWxlYXNlLHZlcnNpb24pIGFsaWFzZWQgdG8gY29tbW9uCisgICAgIiIiIFJldHVybnMgKHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbikgYWxpYXNlZCB0byBjb21tb24KICAgICAgICAgbWFya2V0aW5nIG5hbWVzIHVzZWQgZm9yIHNvbWUgc3lzdGVtcy4KIAogICAgICAgICBJdCBhbHNvIGRvZXMgc29tZSByZW9yZGVyaW5nIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiBzb21lIGNhc2VzCkBAIC04MDIsMTMgKzczOCwxMyBAQAogICAgIGlmIHN5c3RlbSA9PSAnUmhhcHNvZHknOgogICAgICAgICAjIEFwcGxlJ3MgQlNEIGRlcml2YXRpdmUKICAgICAgICAgIyBYWFggSG93IGNhbiB3ZSBkZXRlcm1pbmUgdGhlIG1hcmtldGluZyByZWxlYXNlIG51bWJlciA/Ci0gICAgICAgIHJldHVybiAnTWFjT1MgWCBTZXJ2ZXInLHN5c3RlbStyZWxlYXNlLHZlcnNpb24KKyAgICAgICAgcmV0dXJuICdNYWNPUyBYIFNlcnZlcicsIHN5c3RlbStyZWxlYXNlLCB2ZXJzaW9uCiAKICAgICBlbGlmIHN5c3RlbSA9PSAnU3VuT1MnOgogICAgICAgICAjIFN1bidzIE9TCiAgICAgICAgIGlmIHJlbGVhc2UgPCAnNSc6CiAgICAgICAgICAgICAjIFRoZXNlIHJlbGVhc2VzIHVzZSB0aGUgb2xkIG5hbWUgU3VuT1MKLSAgICAgICAgICAgIHJldHVybiBzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uCisgICAgICAgICAgICByZXR1cm4gc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uCiAgICAgICAgICMgTW9kaWZ5IHJlbGVhc2UgKG1hcmtldGluZyByZWxlYXNlID0gU3VuT1MgcmVsZWFzZSAtIDMpCiAgICAgICAgIGwgPSByZWxlYXNlLnNwbGl0KCcuJykKICAgICAgICAgaWYgbDoKQEAgLTgzNiwxMSArNzcyLDExIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB2ZXJzaW9uID0gJzY0Yml0JwogCi0gICAgZWxpZiBzeXN0ZW0gaW4gKCd3aW4zMicsJ3dpbjE2Jyk6CisgICAgZWxpZiBzeXN0ZW0gaW4gKCd3aW4zMicsICd3aW4xNicpOgogICAgICAgICAjIEluIGNhc2Ugb25lIG9mIHRoZSBvdGhlciB0cmlja3MKICAgICAgICAgc3lzdGVtID0gJ1dpbmRvd3MnCiAKLSAgICByZXR1cm4gc3lzdGVtLHJlbGVhc2UsdmVyc2lvbgorICAgIHJldHVybiBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24KIAogIyMjIFZhcmlvdXMgaW50ZXJuYWwgaGVscGVycwogCkBAIC04NTMsMjEgKzc4OSwyMSBAQAogICAgIHBsYXRmb3JtID0gJy0nLmpvaW4oeC5zdHJpcCgpIGZvciB4IGluIGZpbHRlcihsZW4sIGFyZ3MpKQogCiAgICAgIyBDbGVhbnVwIHNvbWUgcG9zc2libGUgZmlsZW5hbWUgb2JzdGFjbGVzLi4uCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCcgJywnXycpCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCcvJywnLScpCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCdcXCcsJy0nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnOicsJy0nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnOycsJy0nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnIicsJy0nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnKCcsJy0nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnKScsJy0nKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnICcsICdfJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJy8nLCAnLScpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCdcXCcsICctJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJzonLCAnLScpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCc7JywgJy0nKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnIicsICctJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJygnLCAnLScpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCcpJywgJy0nKQogCiAgICAgIyBObyBuZWVkIHRvIHJlcG9ydCAndW5rbm93bicgaW5mb3JtYXRpb24uLi4KLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJ3Vua25vd24nLCcnKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgndW5rbm93bicsICcnKQogCiAgICAgIyBGb2xkICctLSdzIGFuZCByZW1vdmUgdHJhaWxpbmcgJy0nCiAgICAgd2hpbGUgMToKLSAgICAgICAgY2xlYW5lZCA9IHBsYXRmb3JtLnJlcGxhY2UoJy0tJywnLScpCisgICAgICAgIGNsZWFuZWQgPSBwbGF0Zm9ybS5yZXBsYWNlKCctLScsICctJykKICAgICAgICAgaWYgY2xlYW5lZCA9PSBwbGF0Zm9ybToKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHBsYXRmb3JtID0gY2xlYW5lZApAQCAtODg3LDcgKzgyMyw3IEBACiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gc29ja2V0LmdldGhvc3RuYW1lKCkKLSAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIFN0aWxsIG5vdCB3b3JraW5nLi4uCiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAKQEAgLTg5OSwxOSArODM1LDE5IEBACiAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmFic3BhdGgoZmlsZXBhdGgpCiAgICAgd2hpbGUgb3MucGF0aC5pc2xpbmsoZmlsZXBhdGgpOgogICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoCi0gICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGZpbGVwYXRoKSxvcy5yZWFkbGluayhmaWxlcGF0aCkpKQorICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShmaWxlcGF0aCksIG9zLnJlYWRsaW5rKGZpbGVwYXRoKSkpCiAgICAgcmV0dXJuIGZpbGVwYXRoCiAKLWRlZiBfc3lzY21kX3VuYW1lKG9wdGlvbixkZWZhdWx0PScnKToKK2RlZiBfc3lzY21kX3VuYW1lKG9wdGlvbiwgZGVmYXVsdD0nJyk6CiAKICAgICAiIiIgSW50ZXJmYWNlIHRvIHRoZSBzeXN0ZW0ncyB1bmFtZSBjb21tYW5kLgogICAgICIiIgotICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnLCdvczInKToKKyAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCAnd2luMzInLCAnd2luMTYnKToKICAgICAgICAgIyBYWFggT3RoZXJzIHRvbyA/CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgdHJ5OgogICAgICAgICBmID0gb3MucG9wZW4oJ3VuYW1lICVzIDI+ICVzJyAlIChvcHRpb24sIERFVl9OVUxMKSkKLSAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLG9zLmVycm9yKToKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICBvdXRwdXQgPSBmLnJlYWQoKS5zdHJpcCgpCiAgICAgcmMgPSBmLmNsb3NlKCkKQEAgLTkyMCw3ICs4NTYsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBvdXRwdXQKIAotZGVmIF9zeXNjbWRfZmlsZSh0YXJnZXQsZGVmYXVsdD0nJyk6CitkZWYgX3N5c2NtZF9maWxlKHRhcmdldCwgZGVmYXVsdD0nJyk6CiAKICAgICAiIiIgSW50ZXJmYWNlIHRvIHRoZSBzeXN0ZW0ncyBmaWxlIGNvbW1hbmQuCiAKQEAgLTkyOSw3ICs4NjUsNyBAQAogICAgICAgICBkZWZhdWx0IGluIGNhc2UgdGhlIGNvbW1hbmQgc2hvdWxkIGZhaWwuCiAKICAgICAiIiIKLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywgJ3dpbjMyJywgJ3dpbjE2Jyk6CiAgICAgICAgICMgWFhYIE90aGVycyB0b28gPwogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIHRhcmdldCA9IF9mb2xsb3dfc3ltbGlua3ModGFyZ2V0KQpAQCAtOTM3LDcgKzg3Myw3IEBACiAgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFsnZmlsZScsIHRhcmdldF0sCiAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQogCi0gICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvcixvcy5lcnJvcik6CisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgb3V0cHV0ID0gcHJvYy5jb21tdW5pY2F0ZSgpWzBdLmRlY29kZSgnbGF0aW4tMScpCiAgICAgcmMgPSBwcm9jLndhaXQoKQpAQCAtOTUxLDE3ICs4ODcsMTcgQEAKICMgRGVmYXVsdCB2YWx1ZXMgZm9yIGFyY2hpdGVjdHVyZTsgbm9uLWVtcHR5IHN0cmluZ3Mgb3ZlcnJpZGUgdGhlCiAjIGRlZmF1bHRzIGdpdmVuIGFzIHBhcmFtZXRlcnMKIF9kZWZhdWx0X2FyY2hpdGVjdHVyZSA9IHsKLSAgICAnd2luMzInOiAoJycsJ1dpbmRvd3NQRScpLAotICAgICd3aW4xNic6ICgnJywnV2luZG93cycpLAotICAgICdkb3MnOiAoJycsJ01TRE9TJyksCisgICAgJ3dpbjMyJzogKCcnLCAnV2luZG93c1BFJyksCisgICAgJ3dpbjE2JzogKCcnLCAnV2luZG93cycpLAorICAgICdkb3MnOiAoJycsICdNU0RPUycpLAogfQogCi1kZWYgYXJjaGl0ZWN0dXJlKGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUsYml0cz0nJyxsaW5rYWdlPScnKToKK2RlZiBhcmNoaXRlY3R1cmUoZXhlY3V0YWJsZT1zeXMuZXhlY3V0YWJsZSwgYml0cz0nJywgbGlua2FnZT0nJyk6CiAKICAgICAiIiIgUXVlcmllcyB0aGUgZ2l2ZW4gZXhlY3V0YWJsZSAoZGVmYXVsdHMgdG8gdGhlIFB5dGhvbiBpbnRlcnByZXRlcgogICAgICAgICBiaW5hcnkpIGZvciB2YXJpb3VzIGFyY2hpdGVjdHVyZSBpbmZvcm1hdGlvbi4KIAotICAgICAgICBSZXR1cm5zIGEgdHVwbGUgKGJpdHMsbGlua2FnZSkgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgUmV0dXJucyBhIHR1cGxlIChiaXRzLCBsaW5rYWdlKSB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAogICAgICAgICB0aGUgYml0IGFyY2hpdGVjdHVyZSBhbmQgdGhlIGxpbmthZ2UgZm9ybWF0IHVzZWQgZm9yIHRoZQogICAgICAgICBleGVjdXRhYmxlLiBCb3RoIHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgc3RyaW5ncy4KIApAQCAtOTk5LDE2ICs5MzUsMTYgQEAKICAgICAgICAgIyAiZmlsZSIgY29tbWFuZCBkaWQgbm90IHJldHVybiBhbnl0aGluZzsgd2UnbGwgdHJ5IHRvIHByb3ZpZGUKICAgICAgICAgIyBzb21lIHNlbnNpYmxlIGRlZmF1bHRzIHRoZW4uLi4KICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluIF9kZWZhdWx0X2FyY2hpdGVjdHVyZToKLSAgICAgICAgICAgIGIsbCA9IF9kZWZhdWx0X2FyY2hpdGVjdHVyZVtzeXMucGxhdGZvcm1dCisgICAgICAgICAgICBiLCBsID0gX2RlZmF1bHRfYXJjaGl0ZWN0dXJlW3N5cy5wbGF0Zm9ybV0KICAgICAgICAgICAgIGlmIGI6CiAgICAgICAgICAgICAgICAgYml0cyA9IGIKICAgICAgICAgICAgIGlmIGw6CiAgICAgICAgICAgICAgICAgbGlua2FnZSA9IGwKLSAgICAgICAgcmV0dXJuIGJpdHMsbGlua2FnZQorICAgICAgICByZXR1cm4gYml0cywgbGlua2FnZQogCiAgICAgaWYgJ2V4ZWN1dGFibGUnIG5vdCBpbiBmaWxlb3V0OgogICAgICAgICAjIEZvcm1hdCBub3Qgc3VwcG9ydGVkCi0gICAgICAgIHJldHVybiBiaXRzLGxpbmthZ2UKKyAgICAgICAgcmV0dXJuIGJpdHMsIGxpbmthZ2UKIAogICAgICMgQml0cwogICAgIGlmICczMi1iaXQnIGluIGZpbGVvdXQ6CkBAIC0xMDM2LDcgKzk3Miw3IEBACiAgICAgICAgICMgWFhYIHRoZSBBLk9VVCBmb3JtYXQgYWxzbyBmYWxscyB1bmRlciB0aGlzIGNsYXNzLi4uCiAgICAgICAgIHBhc3MKIAotICAgIHJldHVybiBiaXRzLGxpbmthZ2UKKyAgICByZXR1cm4gYml0cywgbGlua2FnZQogCiAjIyMgUG9ydGFibGUgdW5hbWUoKSBpbnRlcmZhY2UKIApAQCAtMTA0OCw3ICs5ODQsNyBAQAogZGVmIHVuYW1lKCk6CiAKICAgICAiIiIgRmFpcmx5IHBvcnRhYmxlIHVuYW1lIGludGVyZmFjZS4gUmV0dXJucyBhIHR1cGxlCi0gICAgICAgIG9mIHN0cmluZ3MgKHN5c3RlbSxub2RlLHJlbGVhc2UsdmVyc2lvbixtYWNoaW5lLHByb2Nlc3NvcikKKyAgICAgICAgb2Ygc3RyaW5ncyAoc3lzdGVtLCBub2RlLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lLCBwcm9jZXNzb3IpCiAgICAgICAgIGlkZW50aWZ5aW5nIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtLgogCiAgICAgICAgIE5vdGUgdGhhdCB1bmxpa2UgdGhlIG9zLnVuYW1lIGZ1bmN0aW9uIHRoaXMgYWxzbyByZXR1cm5zCkBAIC0xMDY3LDcgKzEwMDMsNyBAQAogCiAgICAgIyBHZXQgc29tZSBpbmZvcyBmcm9tIHRoZSBidWlsdGluIG9zLnVuYW1lIEFQSS4uLgogICAgIHRyeToKLSAgICAgICAgc3lzdGVtLG5vZGUscmVsZWFzZSx2ZXJzaW9uLG1hY2hpbmUgPSBvcy51bmFtZSgpCisgICAgICAgIHN5c3RlbSwgbm9kZSwgcmVsZWFzZSwgdmVyc2lvbiwgbWFjaGluZSA9IG9zLnVuYW1lKCkKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgIG5vX29zX3VuYW1lID0gMQogCkBAIC0xMDg1LDcgKzEwMjEsNyBAQAogCiAgICAgICAgICMgVHJ5IHdpbjMyX3ZlcigpIG9uIHdpbjMyIHBsYXRmb3JtcwogICAgICAgICBpZiBzeXN0ZW0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIHJlbGVhc2UsdmVyc2lvbixjc2QscHR5cGUgPSB3aW4zMl92ZXIoKQorICAgICAgICAgICAgcmVsZWFzZSwgdmVyc2lvbiwgY3NkLCBwdHlwZSA9IHdpbjMyX3ZlcigpCiAgICAgICAgICAgICBpZiByZWxlYXNlIGFuZCB2ZXJzaW9uOgogICAgICAgICAgICAgICAgIHVzZV9zeXNjbWRfdmVyID0gMAogICAgICAgICAgICAgIyBUcnkgdG8gdXNlIHRoZSBQUk9DRVNTT1JfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKQEAgLTExMDQsNyArMTA0MCw3IEBACiAgICAgICAgICMgVHJ5IHRoZSAndmVyJyBzeXN0ZW0gY29tbWFuZCBhdmFpbGFibGUgb24gc29tZQogICAgICAgICAjIHBsYXRmb3JtcwogICAgICAgICBpZiB1c2Vfc3lzY21kX3ZlcjoKLSAgICAgICAgICAgIHN5c3RlbSxyZWxlYXNlLHZlcnNpb24gPSBfc3lzY21kX3ZlcihzeXN0ZW0pCisgICAgICAgICAgICBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24gPSBfc3lzY21kX3ZlcihzeXN0ZW0pCiAgICAgICAgICAgICAjIE5vcm1hbGl6ZSBzeXN0ZW0gdG8gd2hhdCB3aW4zMl92ZXIoKSBub3JtYWxseSByZXR1cm5zCiAgICAgICAgICAgICAjIChfc3lzY21kX3ZlcigpIHRlbmRzIHRvIHJldHVybiB0aGUgdmVuZG9yIG5hbWUgYXMgd2VsbCkKICAgICAgICAgICAgIGlmIHN5c3RlbSA9PSAnTWljcm9zb2Z0IFdpbmRvd3MnOgpAQCAtMTEyMiw3ICsxMDU4LDcgQEAKIAogICAgICAgICAjIEluIGNhc2Ugd2Ugc3RpbGwgZG9uJ3Qga25vdyBhbnl0aGluZyB1c2VmdWwsIHdlJ2xsIHRyeSB0bwogICAgICAgICAjIGhlbHAgb3Vyc2VsdmVzCi0gICAgICAgIGlmIHN5c3RlbSBpbiAoJ3dpbjMyJywnd2luMTYnKToKKyAgICAgICAgaWYgc3lzdGVtIGluICgnd2luMzInLCAnd2luMTYnKToKICAgICAgICAgICAgIGlmIG5vdCB2ZXJzaW9uOgogICAgICAgICAgICAgICAgIGlmIHN5c3RlbSA9PSAnd2luMzInOgogICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gJzMyYml0JwpAQCAtMTEzMSw3ICsxMDY3LDcgQEAKICAgICAgICAgICAgIHN5c3RlbSA9ICdXaW5kb3dzJwogCiAgICAgICAgIGVsaWYgc3lzdGVtWzo0XSA9PSAnamF2YSc6Ci0gICAgICAgICAgICByZWxlYXNlLHZlbmRvcix2bWluZm8sb3NpbmZvID0gamF2YV92ZXIoKQorICAgICAgICAgICAgcmVsZWFzZSwgdmVuZG9yLCB2bWluZm8sIG9zaW5mbyA9IGphdmFfdmVyKCkKICAgICAgICAgICAgIHN5c3RlbSA9ICdKYXZhJwogICAgICAgICAgICAgdmVyc2lvbiA9ICcsICcuam9pbih2bWluZm8pCiAgICAgICAgICAgICBpZiBub3QgdmVyc2lvbjoKQEAgLTExNDksMTQgKzEwODUsMTQgQEAKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgY3NpZCwgY3B1X251bWJlciA9IHZtc19saWIuZ2V0c3lpKCdTWUkkX0NQVScsMCkKKyAgICAgICAgICAgIGNzaWQsIGNwdV9udW1iZXIgPSB2bXNfbGliLmdldHN5aSgnU1lJJF9DUFUnLCAwKQogICAgICAgICAgICAgaWYgKGNwdV9udW1iZXIgPj0gMTI4KToKICAgICAgICAgICAgICAgICBwcm9jZXNzb3IgPSAnQWxwaGEnCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHByb2Nlc3NvciA9ICdWQVgnCiAgICAgaWYgbm90IHByb2Nlc3NvcjoKICAgICAgICAgIyBHZXQgcHJvY2Vzc29yIGluZm9ybWF0aW9uIGZyb20gdGhlIHVuYW1lIHN5c3RlbSBjb21tYW5kCi0gICAgICAgIHByb2Nlc3NvciA9IF9zeXNjbWRfdW5hbWUoJy1wJywnJykKKyAgICAgICAgcHJvY2Vzc29yID0gX3N5c2NtZF91bmFtZSgnLXAnLCAnJykKIAogICAgICNJZiBhbnkgdW5rbm93bnMgc3RpbGwgZXhpc3QsIHJlcGxhY2UgdGhlbSB3aXRoICcncywgd2hpY2ggYXJlIG1vcmUgcG9ydGFibGUKICAgICBpZiBzeXN0ZW0gPT0gJ3Vua25vd24nOgpAQCAtMTE3Nyw3ICsxMTEzLDggQEAKICAgICAgICAgc3lzdGVtID0gJ1dpbmRvd3MnCiAgICAgICAgIHJlbGVhc2UgPSAnVmlzdGEnCiAKLSAgICBfdW5hbWVfY2FjaGUgPSB1bmFtZV9yZXN1bHQoc3lzdGVtLG5vZGUscmVsZWFzZSx2ZXJzaW9uLG1hY2hpbmUscHJvY2Vzc29yKQorICAgIF91bmFtZV9jYWNoZSA9IHVuYW1lX3Jlc3VsdChzeXN0ZW0sIG5vZGUsIHJlbGVhc2UsIHZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUsIHByb2Nlc3NvcikKICAgICByZXR1cm4gX3VuYW1lX2NhY2hlCiAKICMjIyBEaXJlY3QgaW50ZXJmYWNlcyB0byBzb21lIG9mIHRoZSB1bmFtZSgpIHJldHVybiB2YWx1ZXMKQEAgLTE0NzQsNTcgKzE0MTEsNTggQEAKIAogICAgICMgR2V0IHVuYW1lIGluZm9ybWF0aW9uIGFuZCB0aGVuIGFwcGx5IHBsYXRmb3JtIHNwZWNpZmljIGNvc21ldGljcwogICAgICMgdG8gaXQuLi4KLSAgICBzeXN0ZW0sbm9kZSxyZWxlYXNlLHZlcnNpb24sbWFjaGluZSxwcm9jZXNzb3IgPSB1bmFtZSgpCisgICAgc3lzdGVtLCBub2RlLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lLCBwcm9jZXNzb3IgPSB1bmFtZSgpCiAgICAgaWYgbWFjaGluZSA9PSBwcm9jZXNzb3I6CiAgICAgICAgIHByb2Nlc3NvciA9ICcnCiAgICAgaWYgYWxpYXNlZDoKLSAgICAgICAgc3lzdGVtLHJlbGVhc2UsdmVyc2lvbiA9IHN5c3RlbV9hbGlhcyhzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uKQorICAgICAgICBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24gPSBzeXN0ZW1fYWxpYXMoc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uKQogCiAgICAgaWYgc3lzdGVtID09ICdXaW5kb3dzJzoKICAgICAgICAgIyBNUyBwbGF0Zm9ybXMKLSAgICAgICAgcmVsLHZlcnMsY3NkLHB0eXBlID0gd2luMzJfdmVyKHZlcnNpb24pCisgICAgICAgIHJlbCwgdmVycywgY3NkLCBwdHlwZSA9IHdpbjMyX3Zlcih2ZXJzaW9uKQogICAgICAgICBpZiB0ZXJzZToKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlKQorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UsdmVyc2lvbixjc2QpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24sIGNzZCkKIAogICAgIGVsaWYgc3lzdGVtIGluICgnTGludXgnLCk6CiAgICAgICAgICMgTGludXggYmFzZWQgc3lzdGVtcwotICAgICAgICBkaXN0bmFtZSxkaXN0dmVyc2lvbixkaXN0aWQgPSBkaXN0KCcnKQorICAgICAgICBkaXN0bmFtZSwgZGlzdHZlcnNpb24sIGRpc3RpZCA9IGRpc3QoJycpCiAgICAgICAgIGlmIGRpc3RuYW1lIGFuZCBub3QgdGVyc2U6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSxtYWNoaW5lLHByb2Nlc3NvciwKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSwgbWFjaGluZSwgcHJvY2Vzc29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdG5hbWUsZGlzdHZlcnNpb24sZGlzdGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdG5hbWUsIGRpc3R2ZXJzaW9uLCBkaXN0aWQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIElmIHRoZSBkaXN0cmlidXRpb24gbmFtZSBpcyB1bmtub3duIGNoZWNrIGZvciBsaWJjIHZzLiBnbGliYwotICAgICAgICAgICAgbGliY25hbWUsbGliY3ZlcnNpb24gPSBsaWJjX3ZlcihzeXMuZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlLG1hY2hpbmUscHJvY2Vzc29yLAorICAgICAgICAgICAgbGliY25hbWUsIGxpYmN2ZXJzaW9uID0gbGliY192ZXIoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UsIG1hY2hpbmUsIHByb2Nlc3NvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYmNuYW1lK2xpYmN2ZXJzaW9uKQogICAgIGVsaWYgc3lzdGVtID09ICdKYXZhJzoKICAgICAgICAgIyBKYXZhIHBsYXRmb3JtcwotICAgICAgICByLHYsdm1pbmZvLChvc19uYW1lLG9zX3ZlcnNpb24sb3NfYXJjaCkgPSBqYXZhX3ZlcigpCisgICAgICAgIHIsIHYsIHZtaW5mbywgKG9zX25hbWUsIG9zX3ZlcnNpb24sIG9zX2FyY2gpID0gamF2YV92ZXIoKQogICAgICAgICBpZiB0ZXJzZSBvciBub3Qgb3NfbmFtZToKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlLHZlcnNpb24pCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24pCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uLAorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zX25hbWUsb3NfdmVyc2lvbixvc19hcmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NfbmFtZSwgb3NfdmVyc2lvbiwgb3NfYXJjaCkKIAogICAgIGVsaWYgc3lzdGVtID09ICdNYWNPUyc6CiAgICAgICAgICMgTWFjT1MgcGxhdGZvcm1zCiAgICAgICAgIGlmIHRlcnNlOgotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSxtYWNoaW5lKQorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlLCBtYWNoaW5lKQogCiAgICAgZWxzZToKICAgICAgICAgIyBHZW5lcmljIGhhbmRsZXIKICAgICAgICAgaWYgdGVyc2U6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSkKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGJpdHMsbGlua2FnZSA9IGFyY2hpdGVjdHVyZShzeXMuZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlLG1hY2hpbmUscHJvY2Vzc29yLGJpdHMsbGlua2FnZSkKKyAgICAgICAgICAgIGJpdHMsIGxpbmthZ2UgPSBhcmNoaXRlY3R1cmUoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UsIG1hY2hpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3IsIGJpdHMsIGxpbmthZ2UpCiAKICAgICBfcGxhdGZvcm1fY2FjaGVbKGFsaWFzZWQsIHRlcnNlKV0gPSBwbGF0Zm9ybQogICAgIHJldHVybiBwbGF0Zm9ybQpAQCAtMTUzNSw1ICsxNDczLDUgQEAKICAgICAjIERlZmF1bHQgaXMgdG8gcHJpbnQgdGhlIGFsaWFzZWQgdmVyYm9zZSBwbGF0Zm9ybSBzdHJpbmcKICAgICB0ZXJzZSA9ICgndGVyc2UnIGluIHN5cy5hcmd2IG9yICctLXRlcnNlJyBpbiBzeXMuYXJndikKICAgICBhbGlhc2VkID0gKG5vdCAnbm9uYWxpYXNlZCcgaW4gc3lzLmFyZ3YgYW5kIG5vdCAnLS1ub25hbGlhc2VkJyBpbiBzeXMuYXJndikKLSAgICBwcmludChwbGF0Zm9ybShhbGlhc2VkLHRlcnNlKSkKKyAgICBwcmludChwbGF0Zm9ybShhbGlhc2VkLCB0ZXJzZSkpCiAgICAgc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL0xpYi9wbGlzdGxpYi5weSBiL0xpYi9wbGlzdGxpYi5weQppbmRleCAyYjBiNjM0Li5kY2IwZjljIDEwMDY0NAotLS0gYS9MaWIvcGxpc3RsaWIucHkKKysrIGIvTGliL3BsaXN0bGliLnB5CkBAIC00LDI1ICs0LDIwIEBACiBiYXNpYyBvYmplY3QgdHlwZXMsIGxpa2UgZGljdGlvbmFyaWVzLCBsaXN0cywgbnVtYmVycyBhbmQgc3RyaW5ncy4KIFVzdWFsbHkgdGhlIHRvcCBsZXZlbCBvYmplY3QgaXMgYSBkaWN0aW9uYXJ5LgogCi1UbyB3cml0ZSBvdXQgYSBwbGlzdCBmaWxlLCB1c2UgdGhlIHdyaXRlUGxpc3Qocm9vdE9iamVjdCwgcGF0aE9yRmlsZSkKLWZ1bmN0aW9uLiAncm9vdE9iamVjdCcgaXMgdGhlIHRvcCBsZXZlbCBvYmplY3QsICdwYXRoT3JGaWxlJyBpcyBhCi1maWxlbmFtZSBvciBhICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCitUbyB3cml0ZSBvdXQgYSBwbGlzdCBmaWxlLCB1c2UgdGhlIGR1bXAodmFsdWUsIGZpbGUpCitmdW5jdGlvbi4gJ3ZhbHVlJyBpcyB0aGUgdG9wIGxldmVsIG9iamVjdCwgJ2ZpbGUnIGlzCithICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCiAKLVRvIHBhcnNlIGEgcGxpc3QgZnJvbSBhIGZpbGUsIHVzZSB0aGUgcmVhZFBsaXN0KHBhdGhPckZpbGUpIGZ1bmN0aW9uLAotd2l0aCBhIGZpbGUgbmFtZSBvciBhIChyZWFkYWJsZSkgZmlsZSBvYmplY3QgYXMgdGhlIG9ubHkgYXJndW1lbnQuIEl0CitUbyBwYXJzZSBhIHBsaXN0IGZyb20gYSBmaWxlLCB1c2UgdGhlIGxvYWQoZmlsZSkgZnVuY3Rpb24sCit3aXRoIGEgKHJlYWRhYmxlKSBmaWxlIG9iamVjdCBhcyB0aGUgb25seSBhcmd1bWVudC4gSXQKIHJldHVybnMgdGhlIHRvcCBsZXZlbCBvYmplY3QgKGFnYWluLCB1c3VhbGx5IGEgZGljdGlvbmFyeSkuCiAKLVRvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHlvdSBjYW4gdXNlIHJlYWRQbGlzdEZyb21CeXRlcygpCi1hbmQgd3JpdGVQbGlzdFRvQnl0ZXMoKS4KK1RvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHlvdSBjYW4gdXNlIGxvYWRzKCkKK2FuZCBkdW1wcygpLgogCiBWYWx1ZXMgY2FuIGJlIHN0cmluZ3MsIGludGVnZXJzLCBmbG9hdHMsIGJvb2xlYW5zLCB0dXBsZXMsIGxpc3RzLAotZGljdGlvbmFyaWVzIChidXQgb25seSB3aXRoIHN0cmluZyBrZXlzKSwgRGF0YSBvciBkYXRldGltZS5kYXRldGltZSBvYmplY3RzLgotU3RyaW5nIHZhbHVlcyAoaW5jbHVkaW5nIGRpY3Rpb25hcnkga2V5cykgaGF2ZSB0byBiZSB1bmljb2RlIHN0cmluZ3MgLS0gdGhleQotd2lsbCBiZSB3cml0dGVuIG91dCBhcyBVVEYtOC4KLQotVGhlIDxkYXRhPiBwbGlzdCB0eXBlIGlzIHN1cHBvcnRlZCB0aHJvdWdoIHRoZSBEYXRhIGNsYXNzLiBUaGlzIGlzIGEKLXRoaW4gd3JhcHBlciBhcm91bmQgYSBQeXRob24gYnl0ZXMgb2JqZWN0LiBVc2UgJ0RhdGEnIGlmIHlvdXIgc3RyaW5ncwotY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMuCitkaWN0aW9uYXJpZXMgKGJ1dCBvbmx5IHdpdGggc3RyaW5nIGtleXMpLCBEYXRhLCBieXRlcywgYnl0ZWFycmF5LCBvcgorZGF0ZXRpbWUuZGF0ZXRpbWUgb2JqZWN0cy4KIAogR2VuZXJhdGUgUGxpc3QgZXhhbXBsZToKIApAQCAtMzcsMjI2ICszMiw0OCBAQAogICAgICAgICAgICAgYVRydWVWYWx1ZSA9IFRydWUsCiAgICAgICAgICAgICBhRmFsc2VWYWx1ZSA9IEZhbHNlLAogICAgICAgICApLAotICAgICAgICBzb21lRGF0YSA9IERhdGEoYiI8YmluYXJ5IGd1bms+IiksCi0gICAgICAgIHNvbWVNb3JlRGF0YSA9IERhdGEoYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz4iICogMTApLAorICAgICAgICBzb21lRGF0YSA9IGIiPGJpbmFyeSBndW5rPiIsCisgICAgICAgIHNvbWVNb3JlRGF0YSA9IGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwLAogICAgICAgICBhRGF0ZSA9IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZS5ta3RpbWUodGltZS5nbXRpbWUoKSkpLAogICAgICkKLSAgICB3cml0ZVBsaXN0KHBsLCBmaWxlTmFtZSkKKyAgICB3aXRoIG9wZW4oZmlsZU5hbWUsICd3YicpIGFzIGZwOgorICAgICAgICBkdW1wKHBsLCBmcCkKIAogUGFyc2UgUGxpc3QgZXhhbXBsZToKIAotICAgIHBsID0gcmVhZFBsaXN0KHBhdGhPckZpbGUpCi0gICAgcHJpbnQgcGxbImFLZXkiXQorICAgIHdpdGggb3BlbihmaWxlTmFtZSwgJ3JiJykgYXMgZnA6CisgICAgICAgIHBsID0gbG9hZChmcCkKKyAgICBwcmludChwbFsiYUtleSJdKQogIiIiCi0KLQogX19hbGxfXyA9IFsKICAgICAicmVhZFBsaXN0IiwgIndyaXRlUGxpc3QiLCAicmVhZFBsaXN0RnJvbUJ5dGVzIiwgIndyaXRlUGxpc3RUb0J5dGVzIiwKLSAgICAiUGxpc3QiLCAiRGF0YSIsICJEaWN0IgorICAgICJQbGlzdCIsICJEYXRhIiwgIkRpY3QiLCAiRk1UX1hNTCIsICJGTVRfQklOQVJZIiwKKyAgICAibG9hZCIsICJkdW1wIiwgImxvYWRzIiwgImR1bXBzIgogXQotIyBOb3RlOiB0aGUgUGxpc3QgYW5kIERpY3QgY2xhc3NlcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4KIAogaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgY29kZWNzCitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgZW51bQogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzdHJ1Y3QKK2Zyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KK2Zyb20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IFBhcnNlckNyZWF0ZQogCiAKLWRlZiByZWFkUGxpc3QocGF0aE9yRmlsZSk6Ci0gICAgIiIiUmVhZCBhIC5wbGlzdCBmaWxlLiAncGF0aE9yRmlsZScgbWF5IGVpdGhlciBiZSBhIGZpbGUgbmFtZSBvciBhCi0gICAgKHJlYWRhYmxlKSBmaWxlIG9iamVjdC4gUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2gKLSAgICB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCi0gICAgIiIiCi0gICAgZGlkT3BlbiA9IEZhbHNlCi0gICAgdHJ5OgotICAgICAgICBpZiBpc2luc3RhbmNlKHBhdGhPckZpbGUsIHN0cik6Ci0gICAgICAgICAgICBwYXRoT3JGaWxlID0gb3BlbihwYXRoT3JGaWxlLCAncmInKQotICAgICAgICAgICAgZGlkT3BlbiA9IFRydWUKLSAgICAgICAgcCA9IFBsaXN0UGFyc2VyKCkKLSAgICAgICAgcm9vdE9iamVjdCA9IHAucGFyc2UocGF0aE9yRmlsZSkKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBkaWRPcGVuOgotICAgICAgICAgICAgcGF0aE9yRmlsZS5jbG9zZSgpCi0gICAgcmV0dXJuIHJvb3RPYmplY3QKK1BsaXN0Rm9ybWF0ID0gZW51bS5FbnVtKCdQbGlzdEZvcm1hdCcsICdGTVRfWE1MIEZNVF9CSU5BUlknLCBtb2R1bGU9X19uYW1lX18pCitnbG9iYWxzKCkudXBkYXRlKFBsaXN0Rm9ybWF0Ll9fbWVtYmVyc19fKQogCiAKLWRlZiB3cml0ZVBsaXN0KHJvb3RPYmplY3QsIHBhdGhPckZpbGUpOgotICAgICIiIldyaXRlICdyb290T2JqZWN0JyB0byBhIC5wbGlzdCBmaWxlLiAncGF0aE9yRmlsZScgbWF5IGVpdGhlciBiZSBhCi0gICAgZmlsZSBuYW1lIG9yIGEgKHdyaXRhYmxlKSBmaWxlIG9iamVjdC4KLSAgICAiIiIKLSAgICBkaWRPcGVuID0gRmFsc2UKLSAgICB0cnk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aE9yRmlsZSwgc3RyKToKLSAgICAgICAgICAgIHBhdGhPckZpbGUgPSBvcGVuKHBhdGhPckZpbGUsICd3YicpCi0gICAgICAgICAgICBkaWRPcGVuID0gVHJ1ZQotICAgICAgICB3cml0ZXIgPSBQbGlzdFdyaXRlcihwYXRoT3JGaWxlKQotICAgICAgICB3cml0ZXIud3JpdGVsbigiPHBsaXN0IHZlcnNpb249XCIxLjBcIj4iKQotICAgICAgICB3cml0ZXIud3JpdGVWYWx1ZShyb290T2JqZWN0KQotICAgICAgICB3cml0ZXIud3JpdGVsbigiPC9wbGlzdD4iKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGRpZE9wZW46Ci0gICAgICAgICAgICBwYXRoT3JGaWxlLmNsb3NlKCkKLQotCi1kZWYgcmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpOgotICAgICIiIlJlYWQgYSBwbGlzdCBkYXRhIGZyb20gYSBieXRlcyBvYmplY3QuIFJldHVybiB0aGUgcm9vdCBvYmplY3QuCi0gICAgIiIiCi0gICAgcmV0dXJuIHJlYWRQbGlzdChCeXRlc0lPKGRhdGEpKQotCi0KLWRlZiB3cml0ZVBsaXN0VG9CeXRlcyhyb290T2JqZWN0KToKLSAgICAiIiJSZXR1cm4gJ3Jvb3RPYmplY3QnIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4KLSAgICAiIiIKLSAgICBmID0gQnl0ZXNJTygpCi0gICAgd3JpdGVQbGlzdChyb290T2JqZWN0LCBmKQotICAgIHJldHVybiBmLmdldHZhbHVlKCkKLQotCi1jbGFzcyBEdW1iWE1MV3JpdGVyOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRMZXZlbD0wLCBpbmRlbnQ9Ilx0Iik6Ci0gICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKLSAgICAgICAgc2VsZi5zdGFjayA9IFtdCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgPSBpbmRlbnRMZXZlbAotICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAotCi0gICAgZGVmIGJlZ2luRWxlbWVudChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoZWxlbWVudCkKLSAgICAgICAgc2VsZi53cml0ZWxuKCI8JXM+IiAlIGVsZW1lbnQpCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgKz0gMQotCi0gICAgZGVmIGVuZEVsZW1lbnQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIGFzc2VydCBzZWxmLmluZGVudExldmVsID4gMAotICAgICAgICBhc3NlcnQgc2VsZi5zdGFjay5wb3AoKSA9PSBlbGVtZW50Ci0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgLT0gMQotICAgICAgICBzZWxmLndyaXRlbG4oIjwvJXM+IiAlIGVsZW1lbnQpCi0KLSAgICBkZWYgc2ltcGxlRWxlbWVudChzZWxmLCBlbGVtZW50LCB2YWx1ZT1Ob25lKToKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB2YWx1ZSA9IF9lc2NhcGUodmFsdWUpCi0gICAgICAgICAgICBzZWxmLndyaXRlbG4oIjwlcz4lczwvJXM+IiAlIChlbGVtZW50LCB2YWx1ZSwgZWxlbWVudCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLndyaXRlbG4oIjwlcy8+IiAlIGVsZW1lbnQpCi0KLSAgICBkZWYgd3JpdGVsbihzZWxmLCBsaW5lKToKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgICMgcGxpc3QgaGFzIGZpeGVkIGVuY29kaW5nIG9mIHV0Zi04Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHN0cik6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoc2VsZi5pbmRlbnRMZXZlbCAqIHNlbGYuaW5kZW50KQotICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKGxpbmUpCi0gICAgICAgIHNlbGYuZmlsZS53cml0ZShiJ1xuJykKLQotCi0jIENvbnRlbnRzIHNob3VsZCBjb25mb3JtIHRvIGEgc3Vic2V0IG9mIElTTyA4NjAxCi0jIChpbiBwYXJ0aWN1bGFyLCBZWVlZICctJyBNTSAnLScgREQgJ1QnIEhIICc6JyBNTSAnOicgU1MgJ1onLiAgU21hbGxlciB1bml0cyBtYXkgYmUgb21pdHRlZCB3aXRoCi0jICBhIGxvc3Mgb2YgcHJlY2lzaW9uKQotX2RhdGVQYXJzZXIgPSByZS5jb21waWxlKHIiKD9QPHllYXI+XGRcZFxkXGQpKD86LSg/UDxtb250aD5cZFxkKSg/Oi0oP1A8ZGF5PlxkXGQpKD86VCg/UDxob3VyPlxkXGQpKD86Oig/UDxtaW51dGU+XGRcZCkoPzo6KD9QPHNlY29uZD5cZFxkKSk/KT8pPyk/KT9aIiwgcmUuQVNDSUkpCi0KLWRlZiBfZGF0ZUZyb21TdHJpbmcocyk6Ci0gICAgb3JkZXIgPSAoJ3llYXInLCAnbW9udGgnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcpCi0gICAgZ2QgPSBfZGF0ZVBhcnNlci5tYXRjaChzKS5ncm91cGRpY3QoKQotICAgIGxzdCA9IFtdCi0gICAgZm9yIGtleSBpbiBvcmRlcjoKLSAgICAgICAgdmFsID0gZ2Rba2V5XQotICAgICAgICBpZiB2YWwgaXMgTm9uZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGxzdC5hcHBlbmQoaW50KHZhbCkpCi0gICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lKCpsc3QpCi0KLWRlZiBfZGF0ZVRvU3RyaW5nKGQpOgotICAgIHJldHVybiAnJTA0ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmRaJyAlICgKLSAgICAgICAgZC55ZWFyLCBkLm1vbnRoLCBkLmRheSwKLSAgICAgICAgZC5ob3VyLCBkLm1pbnV0ZSwgZC5zZWNvbmQKLSAgICApCi0KLQotIyBSZWdleCB0byBmaW5kIGFueSBjb250cm9sIGNoYXJzLCBleGNlcHQgZm9yIFx0IFxuIGFuZCBccgotX2NvbnRyb2xDaGFyUGF0ID0gcmUuY29tcGlsZSgKLSAgICByIltceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDBiXHgwY1x4MGVceDBmIgotICAgIHIiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZl0iKQotCi1kZWYgX2VzY2FwZSh0ZXh0KToKLSAgICBtID0gX2NvbnRyb2xDaGFyUGF0LnNlYXJjaCh0ZXh0KQotICAgIGlmIG0gaXMgbm90IE5vbmU6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInN0cmluZ3MgY2FuJ3QgY29udGFpbnMgY29udHJvbCBjaGFyYWN0ZXJzOyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBwbGlzdGxpYi5EYXRhIGluc3RlYWQiKQotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlxyXG4iLCAiXG4iKSAgICAgICAjIGNvbnZlcnQgRE9TIGxpbmUgZW5kaW5ncwotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlxyIiwgIlxuIikgICAgICAgICAjIGNvbnZlcnQgTWFjIGxpbmUgZW5kaW5ncwotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIiYiLCAiJmFtcDsiKSAgICAgICAjIGVzY2FwZSAnJicKLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI8IiwgIiZsdDsiKSAgICAgICAgIyBlc2NhcGUgJzwnCi0gICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPiIsICImZ3Q7IikgICAgICAgICMgZXNjYXBlICc+JwotICAgIHJldHVybiB0ZXh0Ci0KLQotUExJU1RIRUFERVIgPSBiIiIiXAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotIiIiCi0KLWNsYXNzIFBsaXN0V3JpdGVyKER1bWJYTUxXcml0ZXIpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudExldmVsPTAsIGluZGVudD1iIlx0Iiwgd3JpdGVIZWFkZXI9MSk6Ci0gICAgICAgIGlmIHdyaXRlSGVhZGVyOgotICAgICAgICAgICAgZmlsZS53cml0ZShQTElTVEhFQURFUikKLSAgICAgICAgRHVtYlhNTFdyaXRlci5fX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRMZXZlbCwgaW5kZW50KQotCi0gICAgZGVmIHdyaXRlVmFsdWUoc2VsZiwgdmFsdWUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJzdHJpbmciLCB2YWx1ZSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKLSAgICAgICAgICAgICMgbXVzdCBzd2l0Y2ggZm9yIGJvb2wgYmVmb3JlIGludCwgYXMgYm9vbCBpcyBhCi0gICAgICAgICAgICAjIHN1YmNsYXNzIG9mIGludC4uLgotICAgICAgICAgICAgaWYgdmFsdWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJ0cnVlIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJmYWxzZSIpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiaW50ZWdlciIsICIlZCIgJSB2YWx1ZSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoInJlYWwiLCByZXByKHZhbHVlKSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKLSAgICAgICAgICAgIHNlbGYud3JpdGVEaWN0KHZhbHVlKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgotICAgICAgICAgICAgc2VsZi53cml0ZURhdGEodmFsdWUpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGF0ZXRpbWUuZGF0ZXRpbWUpOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJkYXRlIiwgX2RhdGVUb1N0cmluZyh2YWx1ZSkpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlQXJyYXkodmFsdWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVuc3VwcG9ydGVkIHR5cGU6ICVzIiAlIHR5cGUodmFsdWUpKQotCi0gICAgZGVmIHdyaXRlRGF0YShzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5iZWdpbkVsZW1lbnQoImRhdGEiKQotICAgICAgICBzZWxmLmluZGVudExldmVsIC09IDEKLSAgICAgICAgbWF4bGluZWxlbmd0aCA9IG1heCgxNiwgNzYgLSBsZW4oc2VsZi5pbmRlbnQucmVwbGFjZShiIlx0IiwgYiIgIiAqIDgpICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5kZW50TGV2ZWwpKQotICAgICAgICBmb3IgbGluZSBpbiBkYXRhLmFzQmFzZTY0KG1heGxpbmVsZW5ndGgpLnNwbGl0KGIiXG4iKToKLSAgICAgICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZWxuKGxpbmUpCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgKz0gMQotICAgICAgICBzZWxmLmVuZEVsZW1lbnQoImRhdGEiKQotCi0gICAgZGVmIHdyaXRlRGljdChzZWxmLCBkKToKLSAgICAgICAgaWYgZDoKLSAgICAgICAgICAgIHNlbGYuYmVnaW5FbGVtZW50KCJkaWN0IikKLSAgICAgICAgICAgIGl0ZW1zID0gc29ydGVkKGQuaXRlbXMoKSkKLSAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgc3RyKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXlzIG11c3QgYmUgc3RyaW5ncyIpCi0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJrZXkiLCBrZXkpCi0gICAgICAgICAgICAgICAgc2VsZi53cml0ZVZhbHVlKHZhbHVlKQotICAgICAgICAgICAgc2VsZi5lbmRFbGVtZW50KCJkaWN0IikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiZGljdCIpCi0KLSAgICBkZWYgd3JpdGVBcnJheShzZWxmLCBhcnJheSk6Ci0gICAgICAgIGlmIGFycmF5OgotICAgICAgICAgICAgc2VsZi5iZWdpbkVsZW1lbnQoImFycmF5IikKLSAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBhcnJheToKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlVmFsdWUodmFsdWUpCi0gICAgICAgICAgICBzZWxmLmVuZEVsZW1lbnQoImFycmF5IikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiYXJyYXkiKQorIworIworIyBEZXByZWNhdGVkIGZ1bmN0aW9uYWxpdHkKKyMKKyMKIAogCiBjbGFzcyBfSW50ZXJuYWxEaWN0KGRpY3QpOgpAQCAtMjY0LDE5ICs4MSwxOCBAQAogICAgICMgVGhpcyBjbGFzcyBpcyBuZWVkZWQgd2hpbGUgRGljdCBpcyBzY2hlZHVsZWQgZm9yIGRlcHJlY2F0aW9uOgogICAgICMgd2Ugb25seSBuZWVkIHRvIHdhcm4gd2hlbiBhICp1c2VyKiBpbnN0YW50aWF0ZXMgRGljdCBvciB3aGVuCiAgICAgIyB0aGUgImF0dHJpYnV0ZSBub3RhdGlvbiBmb3IgZGljdCBrZXlzIiBpcyB1c2VkLgorICAgIF9fc2xvdHNfXyA9ICgpCiAKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlID0gc2VsZlthdHRyXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihhdHRyKQotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIkF0dHJpYnV0ZSBhY2Nlc3MgZnJvbSBwbGlzdCBkaWN0cyBpcyBkZXByZWNhdGVkLCB1c2UgZFtrZXldICIKICAgICAgICAgICAgICAibm90YXRpb24gaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgcmV0dXJuIHZhbHVlCiAKICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgYXR0ciwgdmFsdWUpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIkF0dHJpYnV0ZSBhY2Nlc3MgZnJvbSBwbGlzdCBkaWN0cyBpcyBkZXByZWNhdGVkLCB1c2UgZFtrZXldICIKICAgICAgICAgICAgICAibm90YXRpb24gaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc2VsZlthdHRyXSA9IHZhbHVlCkBAIC0yODYsNTYgKzEwMiwxMTEgQEAKICAgICAgICAgICAgIGRlbCBzZWxmW2F0dHJdCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKGF0dHIpCi0gICAgICAgIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KICAgICAgICAgd2FybigiQXR0cmlidXRlIGFjY2VzcyBmcm9tIHBsaXN0IGRpY3RzIGlzIGRlcHJlY2F0ZWQsIHVzZSBkW2tleV0gIgogICAgICAgICAgICAgICJub3RhdGlvbiBpbnN0ZWFkIiwgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogCisKIGNsYXNzIERpY3QoX0ludGVybmFsRGljdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIlRoZSBwbGlzdGxpYi5EaWN0IGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSBidWlsdGluIGRpY3QgaW5zdGVhZCIsCiAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCoqa3dhcmdzKQogCiAKLWNsYXNzIFBsaXN0KF9JbnRlcm5hbERpY3QpOgorQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBfbWF5YmVfb3BlbihwYXRoT3JGaWxlLCBtb2RlKToKKyAgICBpZiBpc2luc3RhbmNlKHBhdGhPckZpbGUsIHN0cik6CisgICAgICAgIHdpdGggb3BlbihwYXRoT3JGaWxlLCBtb2RlKSBhcyBmcDoKKyAgICAgICAgICAgIHlpZWxkIGZwCiAKLSAgICAiIiJUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSByZWFkUGxpc3QoKSBhbmQgd3JpdGVQbGlzdCgpCisgICAgZWxzZToKKyAgICAgICAgeWllbGQgcGF0aE9yRmlsZQorCisKK2NsYXNzIFBsaXN0KF9JbnRlcm5hbERpY3QpOgorICAgICIiIlRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIGR1bXAoKSBhbmQgbG9hZCgpCiAgICAgZnVuY3Rpb25zIGluc3RlYWQsIHRvZ2V0aGVyIHdpdGggcmVndWxhciBkaWN0IG9iamVjdHMuCiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCi0gICAgICAgIHdhcm4oIlRoZSBQbGlzdCBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgdGhlIHJlYWRQbGlzdCgpIGFuZCAiCi0gICAgICAgICAgICAgIndyaXRlUGxpc3QoKSBmdW5jdGlvbnMgaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgd2FybigiVGhlIFBsaXN0IGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgbG9hZCgpIGFuZCAiCisgICAgICAgICAgICAgImR1bXAoKSBmdW5jdGlvbnMgaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqKmt3YXJncykKIAorICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9tRmlsZShjbHMsIHBhdGhPckZpbGUpOgotICAgICAgICAiIiJEZXByZWNhdGVkLiBVc2UgdGhlIHJlYWRQbGlzdCgpIGZ1bmN0aW9uIGluc3RlYWQuIiIiCi0gICAgICAgIHJvb3RPYmplY3QgPSByZWFkUGxpc3QocGF0aE9yRmlsZSkKKyAgICAgICAgIiIiRGVwcmVjYXRlZC4gVXNlIHRoZSBsb2FkKCkgZnVuY3Rpb24gaW5zdGVhZC4iIiIKKyAgICAgICAgd2l0aCBfbWF5YmVfb3BlbihwYXRoT3JGaWxlLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHZhbHVlID0gbG9hZChmcCkKICAgICAgICAgcGxpc3QgPSBjbHMoKQotICAgICAgICBwbGlzdC51cGRhdGUocm9vdE9iamVjdCkKKyAgICAgICAgcGxpc3QudXBkYXRlKHZhbHVlKQogICAgICAgICByZXR1cm4gcGxpc3QKLSAgICBmcm9tRmlsZSA9IGNsYXNzbWV0aG9kKGZyb21GaWxlKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIHBhdGhPckZpbGUpOgotICAgICAgICAiIiJEZXByZWNhdGVkLiBVc2UgdGhlIHdyaXRlUGxpc3QoKSBmdW5jdGlvbiBpbnN0ZWFkLiIiIgotICAgICAgICB3cml0ZVBsaXN0KHNlbGYsIHBhdGhPckZpbGUpCisgICAgICAgICIiIkRlcHJlY2F0ZWQuIFVzZSB0aGUgZHVtcCgpIGZ1bmN0aW9uIGluc3RlYWQuIiIiCisgICAgICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBkdW1wKHNlbGYsIGZwKQogCiAKLWRlZiBfZW5jb2RlQmFzZTY0KHMsIG1heGxpbmVsZW5ndGg9NzYpOgotICAgICMgY29waWVkIGZyb20gYmFzZTY0LmVuY29kZWJ5dGVzKCksIHdpdGggYWRkZWQgbWF4bGluZWxlbmd0aCBhcmd1bWVudAotICAgIG1heGJpbnNpemUgPSAobWF4bGluZWxlbmd0aC8vNCkqMwotICAgIHBpZWNlcyA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBtYXhiaW5zaXplKToKLSAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgbWF4Ymluc2l6ZV0KLSAgICAgICAgcGllY2VzLmFwcGVuZChiaW5hc2NpaS5iMmFfYmFzZTY0KGNodW5rKSkKLSAgICByZXR1cm4gYicnLmpvaW4ocGllY2VzKQorZGVmIHJlYWRQbGlzdChwYXRoT3JGaWxlKToKKyAgICAiIiIKKyAgICBSZWFkIGEgLnBsaXN0IGZyb20gYSBwYXRoIG9yIGZpbGUuIHBhdGhPckZpbGUgc2hvdWxkIGVpdGhlcgorICAgIGJlIGEgZmlsZSBuYW1lLCBvciBhIHJlYWRhYmxlIGJpbmFyeSBmaWxlIG9iamVjdC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGxvYWQgaW5zdGVhZC4KKyAgICAiIiIKKyAgICB3YXJuKCJUaGUgcmVhZFBsaXN0IGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBsb2FkKCkgaW5zdGVhZCIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKworICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgIHJldHVybiBsb2FkKGZwLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UsCisgICAgICAgICAgICBkaWN0X3R5cGU9X0ludGVybmFsRGljdCkKKworZGVmIHdyaXRlUGxpc3QodmFsdWUsIHBhdGhPckZpbGUpOgorICAgICIiIgorICAgIFdyaXRlICd2YWx1ZScgdG8gYSAucGxpc3QgZmlsZS4gJ3BhdGhPckZpbGUnIG1heSBlaXRoZXIgYmUgYQorICAgIGZpbGUgbmFtZSBvciBhICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBkdW1wIGluc3RlYWQuCisgICAgIiIiCisgICAgd2FybigiVGhlIHdyaXRlUGxpc3QgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGR1bXAoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgIGR1bXAodmFsdWUsIGZwLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKQorCisKK2RlZiByZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSk6CisgICAgIiIiCisgICAgUmVhZCBhIHBsaXN0IGRhdGEgZnJvbSBhIGJ5dGVzIG9iamVjdC4gUmV0dXJuIHRoZSByb290IG9iamVjdC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGxvYWRzIGluc3RlYWQuCisgICAgIiIiCisgICAgd2FybigiVGhlIHJlYWRQbGlzdEZyb21CeXRlcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgbG9hZHMoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIHJldHVybiBsb2FkKEJ5dGVzSU8oZGF0YSksIGZtdD1Ob25lLCB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSwKKyAgICAgICAgZGljdF90eXBlPV9JbnRlcm5hbERpY3QpCisKKworZGVmIHdyaXRlUGxpc3RUb0J5dGVzKHZhbHVlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gJ3ZhbHVlJyBhcyBhIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBkdW1wcyBpbnN0ZWFkLgorICAgICIiIgorICAgIHdhcm4oIlRoZSB3cml0ZVBsaXN0VG9CeXRlcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgZHVtcHMoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIGYgPSBCeXRlc0lPKCkKKyAgICBkdW1wKHZhbHVlLCBmLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKQorICAgIHJldHVybiBmLmdldHZhbHVlKCkKKwogCiBjbGFzcyBEYXRhOgorICAgICIiIgorICAgIFdyYXBwZXIgZm9yIGJpbmFyeSBkYXRhLgogCi0gICAgIiIiV3JhcHBlciBmb3IgYmluYXJ5IGRhdGEuIiIiCisgICAgVGhpcyBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgYSBieXRlcyBvYmplY3QgaW5zdGVhZC4KKyAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpOgpAQCAtMzQ2LDEwICsyMTcsMTAgQEAKICAgICBkZWYgZnJvbUJhc2U2NChjbHMsIGRhdGEpOgogICAgICAgICAjIGJhc2U2NC5kZWNvZGVieXRlcyBqdXN0IGNhbGxzIGJpbmFzY2lpLmEyYl9iYXNlNjQ7CiAgICAgICAgICMgaXQgc2VlbXMgb3ZlcmtpbGwgdG8gdXNlIGJvdGggYmFzZTY0IGFuZCBiaW5hc2NpaS4KLSAgICAgICAgcmV0dXJuIGNscyhiaW5hc2NpaS5hMmJfYmFzZTY0KGRhdGEpKQorICAgICAgICByZXR1cm4gY2xzKF9kZWNvZGVfYmFzZTY0KGRhdGEpKQogCiAgICAgZGVmIGFzQmFzZTY0KHNlbGYsIG1heGxpbmVsZW5ndGg9NzYpOgotICAgICAgICByZXR1cm4gX2VuY29kZUJhc2U2NChzZWxmLmRhdGEsIG1heGxpbmVsZW5ndGgpCisgICAgICAgIHJldHVybiBfZW5jb2RlX2Jhc2U2NChzZWxmLmRhdGEsIG1heGxpbmVsZW5ndGgpCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgpAQCAtMzYyLDQzICsyMzMsMTE5IEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIiVzKCVzKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHJlcHIoc2VsZi5kYXRhKSkKIAotY2xhc3MgUGxpc3RQYXJzZXI6CisjCisjCisjIEVuZCBvZiBkZXByZWNhdGVkIGZ1bmN0aW9uYWxpdHkKKyMKKyMKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKworIworIyBYTUwgc3VwcG9ydAorIworCisKKyMgWE1MICdoZWFkZXInCitQTElTVEhFQURFUiA9IGIiIiJcCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CisiIiIKKworCisjIFJlZ2V4IHRvIGZpbmQgYW55IGNvbnRyb2wgY2hhcnMsIGV4Y2VwdCBmb3IgXHQgXG4gYW5kIFxyCitfY29udHJvbENoYXJQYXQgPSByZS5jb21waWxlKAorICAgIHIiW1x4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MGJceDBjXHgwZVx4MGYiCisgICAgciJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmXSIpCisKK2RlZiBfZW5jb2RlX2Jhc2U2NChzLCBtYXhsaW5lbGVuZ3RoPTc2KToKKyAgICAjIGNvcGllZCBmcm9tIGJhc2U2NC5lbmNvZGVieXRlcygpLCB3aXRoIGFkZGVkIG1heGxpbmVsZW5ndGggYXJndW1lbnQKKyAgICBtYXhiaW5zaXplID0gKG1heGxpbmVsZW5ndGgvLzQpKjMKKyAgICBwaWVjZXMgPSBbXQorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgbWF4Ymluc2l6ZSk6CisgICAgICAgIGNodW5rID0gc1tpIDogaSArIG1heGJpbnNpemVdCisgICAgICAgIHBpZWNlcy5hcHBlbmQoYmluYXNjaWkuYjJhX2Jhc2U2NChjaHVuaykpCisgICAgcmV0dXJuIGInJy5qb2luKHBpZWNlcykKKworZGVmIF9kZWNvZGVfYmFzZTY0KHMpOgorICAgIGlmIGlzaW5zdGFuY2Uocywgc3RyKToKKyAgICAgICAgcmV0dXJuIGJpbmFzY2lpLmEyYl9iYXNlNjQocy5lbmNvZGUoInV0Zi04IikpCisKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzKQorCisjIENvbnRlbnRzIHNob3VsZCBjb25mb3JtIHRvIGEgc3Vic2V0IG9mIElTTyA4NjAxCisjIChpbiBwYXJ0aWN1bGFyLCBZWVlZICctJyBNTSAnLScgREQgJ1QnIEhIICc6JyBNTSAnOicgU1MgJ1onLiAgU21hbGxlciB1bml0cworIyBtYXkgYmUgb21pdHRlZCB3aXRoICMgIGEgbG9zcyBvZiBwcmVjaXNpb24pCitfZGF0ZVBhcnNlciA9IHJlLmNvbXBpbGUociIoP1A8eWVhcj5cZFxkXGRcZCkoPzotKD9QPG1vbnRoPlxkXGQpKD86LSg/UDxkYXk+XGRcZCkoPzpUKD9QPGhvdXI+XGRcZCkoPzo6KD9QPG1pbnV0ZT5cZFxkKSg/OjooP1A8c2Vjb25kPlxkXGQpKT8pPyk/KT8pP1oiLCByZS5BU0NJSSkKKworCitkZWYgX2RhdGVfZnJvbV9zdHJpbmcocyk6CisgICAgb3JkZXIgPSAoJ3llYXInLCAnbW9udGgnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcpCisgICAgZ2QgPSBfZGF0ZVBhcnNlci5tYXRjaChzKS5ncm91cGRpY3QoKQorICAgIGxzdCA9IFtdCisgICAgZm9yIGtleSBpbiBvcmRlcjoKKyAgICAgICAgdmFsID0gZ2Rba2V5XQorICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGxzdC5hcHBlbmQoaW50KHZhbCkpCisgICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lKCpsc3QpCisKKworZGVmIF9kYXRlX3RvX3N0cmluZyhkKToKKyAgICByZXR1cm4gJyUwNGQtJTAyZC0lMDJkVCUwMmQ6JTAyZDolMDJkWicgJSAoCisgICAgICAgIGQueWVhciwgZC5tb250aCwgZC5kYXksCisgICAgICAgIGQuaG91ciwgZC5taW51dGUsIGQuc2Vjb25kCisgICAgKQorCitkZWYgX2VzY2FwZSh0ZXh0KToKKyAgICBtID0gX2NvbnRyb2xDaGFyUGF0LnNlYXJjaCh0ZXh0KQorICAgIGlmIG0gaXMgbm90IE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInN0cmluZ3MgY2FuJ3QgY29udGFpbnMgY29udHJvbCBjaGFyYWN0ZXJzOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBieXRlcyBpbnN0ZWFkIikKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcclxuIiwgIlxuIikgICAgICAgIyBjb252ZXJ0IERPUyBsaW5lIGVuZGluZ3MKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcciIsICJcbiIpICAgICAgICAgIyBjb252ZXJ0IE1hYyBsaW5lIGVuZGluZ3MKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCImIiwgIiZhbXA7IikgICAgICAgIyBlc2NhcGUgJyYnCisgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPCIsICImbHQ7IikgICAgICAgICMgZXNjYXBlICc8JworICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIj4iLCAiJmd0OyIpICAgICAgICAjIGVzY2FwZSAnPicKKyAgICByZXR1cm4gdGV4dAorCitjbGFzcyBfUGxpc3RQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVzZV9idWlsdGluX3R5cGVzLCBkaWN0X3R5cGUpOgogICAgICAgICBzZWxmLnN0YWNrID0gW10KLSAgICAgICAgc2VsZi5jdXJyZW50S2V5ID0gTm9uZQorICAgICAgICBzZWxmLmN1cnJlbnRfa2V5ID0gTm9uZQogICAgICAgICBzZWxmLnJvb3QgPSBOb25lCisgICAgICAgIHNlbGYuX3VzZV9idWlsdGluX3R5cGVzID0gdXNlX2J1aWx0aW5fdHlwZXMKKyAgICAgICAgc2VsZi5fZGljdF90eXBlID0gZGljdF90eXBlCiAKICAgICBkZWYgcGFyc2Uoc2VsZiwgZmlsZW9iaik6Ci0gICAgICAgIGZyb20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IFBhcnNlckNyZWF0ZQogICAgICAgICBzZWxmLnBhcnNlciA9IFBhcnNlckNyZWF0ZSgpCi0gICAgICAgIHNlbGYucGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzZWxmLmhhbmRsZUJlZ2luRWxlbWVudAotICAgICAgICBzZWxmLnBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IHNlbGYuaGFuZGxlRW5kRWxlbWVudAotICAgICAgICBzZWxmLnBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuaGFuZGxlRGF0YQorICAgICAgICBzZWxmLnBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5oYW5kbGVfYmVnaW5fZWxlbWVudAorICAgICAgICBzZWxmLnBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IHNlbGYuaGFuZGxlX2VuZF9lbGVtZW50CisgICAgICAgIHNlbGYucGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5oYW5kbGVfZGF0YQogICAgICAgICBzZWxmLnBhcnNlci5QYXJzZUZpbGUoZmlsZW9iaikKICAgICAgICAgcmV0dXJuIHNlbGYucm9vdAogCi0gICAgZGVmIGhhbmRsZUJlZ2luRWxlbWVudChzZWxmLCBlbGVtZW50LCBhdHRycyk6CisgICAgZGVmIGhhbmRsZV9iZWdpbl9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIGF0dHJzKToKICAgICAgICAgc2VsZi5kYXRhID0gW10KICAgICAgICAgaGFuZGxlciA9IGdldGF0dHIoc2VsZiwgImJlZ2luXyIgKyBlbGVtZW50LCBOb25lKQogICAgICAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaGFuZGxlcihhdHRycykKIAotICAgIGRlZiBoYW5kbGVFbmRFbGVtZW50KHNlbGYsIGVsZW1lbnQpOgorICAgIGRlZiBoYW5kbGVfZW5kX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CiAgICAgICAgIGhhbmRsZXIgPSBnZXRhdHRyKHNlbGYsICJlbmRfIiArIGVsZW1lbnQsIE5vbmUpCiAgICAgICAgIGlmIGhhbmRsZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBoYW5kbGVyKCkKIAotICAgIGRlZiBoYW5kbGVEYXRhKHNlbGYsIGRhdGEpOgorICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5kYXRhLmFwcGVuZChkYXRhKQogCi0gICAgZGVmIGFkZE9iamVjdChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleSBpcyBub3QgTm9uZToKKyAgICBkZWYgYWRkX29iamVjdChzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9rZXkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnN0YWNrWy0xXSwgdHlwZSh7fSkpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuZXhwZWN0ZWQgZWxlbWVudCBhdCBsaW5lICVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikKLSAgICAgICAgICAgIHNlbGYuc3RhY2tbLTFdW3NlbGYuY3VycmVudEtleV0gPSB2YWx1ZQotICAgICAgICAgICAgc2VsZi5jdXJyZW50S2V5ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5zdGFja1stMV1bc2VsZi5jdXJyZW50X2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2tleSA9IE5vbmUKICAgICAgICAgZWxpZiBub3Qgc2VsZi5zdGFjazoKICAgICAgICAgICAgICMgdGhpcyBpcyB0aGUgcm9vdCBvYmplY3QKICAgICAgICAgICAgIHNlbGYucm9vdCA9IHZhbHVlCkBAIC00MDgsNyArMzU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKQogICAgICAgICAgICAgc2VsZi5zdGFja1stMV0uYXBwZW5kKHZhbHVlKQogCi0gICAgZGVmIGdldERhdGEoc2VsZik6CisgICAgZGVmIGdldF9kYXRhKHNlbGYpOgogICAgICAgICBkYXRhID0gJycuam9pbihzZWxmLmRhdGEpCiAgICAgICAgIHNlbGYuZGF0YSA9IFtdCiAgICAgICAgIHJldHVybiBkYXRhCkBAIC00MTYsMzkgKzM2Myw2NjEgQEAKICAgICAjIGVsZW1lbnQgaGFuZGxlcnMKIAogICAgIGRlZiBiZWdpbl9kaWN0KHNlbGYsIGF0dHJzKToKLSAgICAgICAgZCA9IF9JbnRlcm5hbERpY3QoKQotICAgICAgICBzZWxmLmFkZE9iamVjdChkKQorICAgICAgICBkID0gc2VsZi5fZGljdF90eXBlKCkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGQpCiAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGQpCisKICAgICBkZWYgZW5kX2RpY3Qoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2tleToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1pc3NpbmcgdmFsdWUgZm9yIGtleSAnJXMnIGF0IGxpbmUgJWQiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuY3VycmVudEtleSxzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRfa2V5LHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKSkKICAgICAgICAgc2VsZi5zdGFjay5wb3AoKQogCiAgICAgZGVmIGVuZF9rZXkoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleSBvciBub3QgaXNpbnN0YW5jZShzZWxmLnN0YWNrWy0xXSwgdHlwZSh7fSkpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfa2V5IG9yIG5vdCBpc2luc3RhbmNlKHNlbGYuc3RhY2tbLTFdLCB0eXBlKHt9KSk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmV4cGVjdGVkIGtleSBhdCBsaW5lICVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKQotICAgICAgICBzZWxmLmN1cnJlbnRLZXkgPSBzZWxmLmdldERhdGEoKQorICAgICAgICBzZWxmLmN1cnJlbnRfa2V5ID0gc2VsZi5nZXRfZGF0YSgpCiAKICAgICBkZWYgYmVnaW5fYXJyYXkoc2VsZiwgYXR0cnMpOgogICAgICAgICBhID0gW10KLSAgICAgICAgc2VsZi5hZGRPYmplY3QoYSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGEpCiAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGEpCisKICAgICBkZWYgZW5kX2FycmF5KHNlbGYpOgogICAgICAgICBzZWxmLnN0YWNrLnBvcCgpCiAKICAgICBkZWYgZW5kX3RydWUoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KFRydWUpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChUcnVlKQorCiAgICAgZGVmIGVuZF9mYWxzZShzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoRmFsc2UpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChGYWxzZSkKKwogICAgIGRlZiBlbmRfaW50ZWdlcihzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoaW50KHNlbGYuZ2V0RGF0YSgpKSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGludChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9yZWFsKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChmbG9hdChzZWxmLmdldERhdGEoKSkpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChmbG9hdChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9zdHJpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KHNlbGYuZ2V0RGF0YSgpKQorICAgICAgICBzZWxmLmFkZF9vYmplY3Qoc2VsZi5nZXRfZGF0YSgpKQorCiAgICAgZGVmIGVuZF9kYXRhKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChEYXRhLmZyb21CYXNlNjQoc2VsZi5nZXREYXRhKCkuZW5jb2RlKCJ1dGYtOCIpKSkKKyAgICAgICAgaWYgc2VsZi5fdXNlX2J1aWx0aW5fdHlwZXM6CisgICAgICAgICAgICBzZWxmLmFkZF9vYmplY3QoX2RlY29kZV9iYXNlNjQoc2VsZi5nZXRfZGF0YSgpKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hZGRfb2JqZWN0KERhdGEuZnJvbUJhc2U2NChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9kYXRlKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChfZGF0ZUZyb21TdHJpbmcoc2VsZi5nZXREYXRhKCkpKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoX2RhdGVfZnJvbV9zdHJpbmcoc2VsZi5nZXRfZGF0YSgpKSkKKworCitjbGFzcyBfRHVtYlhNTFdyaXRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgaW5kZW50X2xldmVsPTAsIGluZGVudD0iXHQiKToKKyAgICAgICAgc2VsZi5maWxlID0gZmlsZQorICAgICAgICBzZWxmLnN0YWNrID0gW10KKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsID0gaW5kZW50X2xldmVsCisgICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50CisKKyAgICBkZWYgYmVnaW5fZWxlbWVudChzZWxmLCBlbGVtZW50KToKKyAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoZWxlbWVudCkKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8JXM+IiAlIGVsZW1lbnQpCisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCArPSAxCisKKyAgICBkZWYgZW5kX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CisgICAgICAgIGFzc2VydCBzZWxmLl9pbmRlbnRfbGV2ZWwgPiAwCisgICAgICAgIGFzc2VydCBzZWxmLnN0YWNrLnBvcCgpID09IGVsZW1lbnQKKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8LyVzPiIgJSBlbGVtZW50KQorCisgICAgZGVmIHNpbXBsZV9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIHZhbHVlPU5vbmUpOgorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlID0gX2VzY2FwZSh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYud3JpdGVsbigiPCVzPiVzPC8lcz4iICUgKGVsZW1lbnQsIHZhbHVlLCBlbGVtZW50KSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi53cml0ZWxuKCI8JXMvPiIgJSBlbGVtZW50KQorCisgICAgZGVmIHdyaXRlbG4oc2VsZiwgbGluZSk6CisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAjIHBsaXN0IGhhcyBmaXhlZCBlbmNvZGluZyBvZiB1dGYtOAorCisgICAgICAgICAgICAjIFhYWDogaXMgdGhpcyB0ZXN0IG5lZWRlZD8KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgc3RyKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShzZWxmLl9pbmRlbnRfbGV2ZWwgKiBzZWxmLmluZGVudCkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShsaW5lKQorICAgICAgICBzZWxmLmZpbGUud3JpdGUoYidcbicpCisKKworY2xhc3MgX1BsaXN0V3JpdGVyKF9EdW1iWE1MV3JpdGVyKToKKyAgICBkZWYgX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBmaWxlLCBpbmRlbnRfbGV2ZWw9MCwgaW5kZW50PWIiXHQiLCB3cml0ZUhlYWRlcj0xLAorICAgICAgICAgICAgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKToKKworICAgICAgICBpZiB3cml0ZUhlYWRlcjoKKyAgICAgICAgICAgIGZpbGUud3JpdGUoUExJU1RIRUFERVIpCisgICAgICAgIF9EdW1iWE1MV3JpdGVyLl9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudF9sZXZlbCwgaW5kZW50KQorICAgICAgICBzZWxmLl9zb3J0X2tleXMgPSBzb3J0X2tleXMKKyAgICAgICAgc2VsZi5fc2tpcGtleXMgPSBza2lwa2V5cworCisgICAgZGVmIHdyaXRlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8cGxpc3QgdmVyc2lvbj1cIjEuMFwiPiIpCisgICAgICAgIHNlbGYud3JpdGVfdmFsdWUodmFsdWUpCisgICAgICAgIHNlbGYud3JpdGVsbigiPC9wbGlzdD4iKQorCisgICAgZGVmIHdyaXRlX3ZhbHVlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoInN0cmluZyIsIHZhbHVlKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoInRydWUiKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJmYWxzZSIpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgaWYgLTEgPDwgNjMgPD0gdmFsdWUgPCAxIDw8IDY0OgorICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImludGVnZXIiLCAiJWQiICUgdmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IodmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJyZWFsIiwgcmVwcih2YWx1ZSkpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZGljdCh2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9kYXRhKHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfYnl0ZXModmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkYXRldGltZS5kYXRldGltZSk6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJkYXRlIiwgX2RhdGVfdG9fc3RyaW5nKHZhbHVlKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9hcnJheSh2YWx1ZSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlOiAlcyIgJSB0eXBlKHZhbHVlKSkKKworICAgIGRlZiB3cml0ZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLndyaXRlX2J5dGVzKGRhdGEuZGF0YSkKKworICAgIGRlZiB3cml0ZV9ieXRlcyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5iZWdpbl9lbGVtZW50KCJkYXRhIikKKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgbWF4bGluZWxlbmd0aCA9IG1heCgKKyAgICAgICAgICAgIDE2LAorICAgICAgICAgICAgNzYgLSBsZW4oc2VsZi5pbmRlbnQucmVwbGFjZShiIlx0IiwgYiIgIiAqIDgpICogc2VsZi5faW5kZW50X2xldmVsKSkKKworICAgICAgICBmb3IgbGluZSBpbiBfZW5jb2RlX2Jhc2U2NChkYXRhLCBtYXhsaW5lbGVuZ3RoKS5zcGxpdChiIlxuIik6CisgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVsbihsaW5lKQorICAgICAgICBzZWxmLl9pbmRlbnRfbGV2ZWwgKz0gMQorICAgICAgICBzZWxmLmVuZF9lbGVtZW50KCJkYXRhIikKKworICAgIGRlZiB3cml0ZV9kaWN0KHNlbGYsIGQpOgorICAgICAgICBpZiBkOgorICAgICAgICAgICAgc2VsZi5iZWdpbl9lbGVtZW50KCJkaWN0IikKKyAgICAgICAgICAgIGlmIHNlbGYuX3NvcnRfa2V5czoKKyAgICAgICAgICAgICAgICBpdGVtcyA9IHNvcnRlZChkLml0ZW1zKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGl0ZW1zID0gZC5pdGVtcygpCisKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2tpcGtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleXMgbXVzdCBiZSBzdHJpbmdzIikKKyAgICAgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJrZXkiLCBrZXkpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuZW5kX2VsZW1lbnQoImRpY3QiKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJkaWN0IikKKworICAgIGRlZiB3cml0ZV9hcnJheShzZWxmLCBhcnJheSk6CisgICAgICAgIGlmIGFycmF5OgorICAgICAgICAgICAgc2VsZi5iZWdpbl9lbGVtZW50KCJhcnJheSIpCisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gYXJyYXk6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuZW5kX2VsZW1lbnQoImFycmF5IikKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgiYXJyYXkiKQorCisKK2RlZiBfaXNfZm10X3htbChoZWFkZXIpOgorICAgIHByZWZpeGVzID0gKGInPD94bWwnLCBiJzxwbGlzdCcpCisKKyAgICBmb3IgcGZ4IGluIHByZWZpeGVzOgorICAgICAgICBpZiBoZWFkZXIuc3RhcnRzd2l0aChwZngpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgQWxzbyBjaGVjayBmb3IgYWx0ZXJuYXRpdmUgWE1MIGVuY29kaW5ncywgdGhpcyBpcyBzbGlnaHRseQorICAgICMgb3ZlcmtpbGwgYmVjYXVzZSB0aGUgQXBwbGUgdG9vbHMgKGFuZCBwbGlzdGxpYikgd2lsbCBub3QKKyAgICAjIGdlbmVyYXRlIGZpbGVzIHdpdGggdGhlc2UgZW5jb2RpbmdzLgorICAgIGZvciBib20sIGVuY29kaW5nIGluICgKKyAgICAgICAgICAgICAgICAoY29kZWNzLkJPTV9VVEY4LCAidXRmLTgiKSwKKyAgICAgICAgICAgICAgICAoY29kZWNzLkJPTV9VVEYxNl9CRSwgInV0Zi0xNi1iZSIpLAorICAgICAgICAgICAgICAgIChjb2RlY3MuQk9NX1VURjE2X0xFLCAidXRmLTE2LWxlIiksCisgICAgICAgICAgICAgICAgIyBleHBhdCBkb2VzIG5vdCBzdXBwb3J0IHV0Zi0zMgorICAgICAgICAgICAgICAgICMoY29kZWNzLkJPTV9VVEYzMl9CRSwgInV0Zi0zMi1iZSIpLAorICAgICAgICAgICAgICAgICMoY29kZWNzLkJPTV9VVEYzMl9MRSwgInV0Zi0zMi1sZSIpLAorICAgICAgICAgICAgKToKKyAgICAgICAgaWYgbm90IGhlYWRlci5zdGFydHN3aXRoKGJvbSk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGZvciBzdGFydCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIHByZWZpeCA9IGJvbSArIHN0YXJ0LmRlY29kZSgnYXNjaWknKS5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICBpZiBoZWFkZXJbOmxlbihwcmVmaXgpXSA9PSBwcmVmaXg6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCisjCisjIEJpbmFyeSBQbGlzdAorIworCisKK2NsYXNzIEludmFsaWRGaWxlRXhjZXB0aW9uIChWYWx1ZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZT0iSW52YWxpZCBmaWxlIik6CisgICAgICAgIFZhbHVlRXJyb3IuX19pbml0X18oc2VsZiwgbWVzc2FnZSkKKworX0JJTkFSWV9GT1JNQVQgPSB7MTogJ0InLCAyOiAnSCcsIDQ6ICdMJywgODogJ1EnfQorCitjbGFzcyBfQmluYXJ5UGxpc3RQYXJzZXI6CisgICAgIiIiCisgICAgUmVhZCBvciB3cml0ZSBhIGJpbmFyeSBwbGlzdCBmaWxlLCBmb2xsb3dpbmcgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBiaW5hcnkKKyAgICBmb3JtYXQuICBSYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbiBpbiBjYXNlIG9mIGVycm9yLCBvdGhlcndpc2UgcmV0dXJuIHRoZQorICAgIHJvb3Qgb2JqZWN0LgorCisgICAgc2VlIGFsc286IGh0dHA6Ly9vcGVuc291cmNlLmFwcGxlLmNvbS9zb3VyY2UvQ0YvQ0YtNzQ0LjE4L0NGQmluYXJ5UExpc3QuYworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VfYnVpbHRpbl90eXBlcywgZGljdF90eXBlKToKKyAgICAgICAgc2VsZi5fdXNlX2J1aWx0aW5fdHlwZXMgPSB1c2VfYnVpbHRpbl90eXBlcworICAgICAgICBzZWxmLl9kaWN0X3R5cGUgPSBkaWN0X3R5cGUKKworICAgIGRlZiBwYXJzZShzZWxmLCBmcCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgVGhlIGJhc2ljIGZpbGUgZm9ybWF0OgorICAgICAgICAgICAgIyBIRUFERVIKKyAgICAgICAgICAgICMgb2JqZWN0Li4uCisgICAgICAgICAgICAjIHJlZmlkLT5vZmZzZXQuLi4KKyAgICAgICAgICAgICMgVFJBSUxFUgorICAgICAgICAgICAgc2VsZi5fZnAgPSBmcAorICAgICAgICAgICAgc2VsZi5fZnAuc2VlaygtMzIsIG9zLlNFRUtfRU5EKQorICAgICAgICAgICAgdHJhaWxlciA9IHNlbGYuX2ZwLnJlYWQoMzIpCisgICAgICAgICAgICBpZiBsZW4odHJhaWxlcikgIT0gMzI6CisgICAgICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZpbGVFeGNlcHRpb24oKQorICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgIG9mZnNldF9zaXplLCBzZWxmLl9yZWZfc2l6ZSwgbnVtX29iamVjdHMsIHRvcF9vYmplY3QsCisgICAgICAgICAgICAgICAgb2Zmc2V0X3RhYmxlX29mZnNldAorICAgICAgICAgICAgKSA9IHN0cnVjdC51bnBhY2soJz42eEJCUVFRJywgdHJhaWxlcikKKyAgICAgICAgICAgIHNlbGYuX2ZwLnNlZWsob2Zmc2V0X3RhYmxlX29mZnNldCkKKyAgICAgICAgICAgIG9mZnNldF9mb3JtYXQgPSAnPicgKyBfQklOQVJZX0ZPUk1BVFtvZmZzZXRfc2l6ZV0gKiBudW1fb2JqZWN0cworICAgICAgICAgICAgc2VsZi5fcmVmX2Zvcm1hdCA9IF9CSU5BUllfRk9STUFUW3NlbGYuX3JlZl9zaXplXQorICAgICAgICAgICAgc2VsZi5fb2JqZWN0X29mZnNldHMgPSBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAgICAgICAgIG9mZnNldF9mb3JtYXQsIHNlbGYuX2ZwLnJlYWQob2Zmc2V0X3NpemUgKiBudW1fb2JqZWN0cykpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9vYmplY3Qoc2VsZi5fb2JqZWN0X29mZnNldHNbdG9wX29iamVjdF0pCisKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJbmRleEVycm9yLCBzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZpbGVFeGNlcHRpb24oKQorCisgICAgZGVmIF9nZXRfc2l6ZShzZWxmLCB0b2tlbkwpOgorICAgICAgICAiIiIgcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBuZXh0IG9iamVjdC4iIiIKKyAgICAgICAgaWYgdG9rZW5MID09IDB4RjoKKyAgICAgICAgICAgIG0gPSBzZWxmLl9mcC5yZWFkKDEpWzBdICYgMHgzCisgICAgICAgICAgICBzID0gMSA8PCBtCisgICAgICAgICAgICBmID0gJz4nICsgX0JJTkFSWV9GT1JNQVRbc10KKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKGYsIHNlbGYuX2ZwLnJlYWQocykpWzBdCisKKyAgICAgICAgcmV0dXJuIHRva2VuTAorCisgICAgZGVmIF9yZWFkX3JlZnMoc2VsZiwgbik6CisgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKAorICAgICAgICAgICAgJz4nICsgc2VsZi5fcmVmX2Zvcm1hdCAqIG4sIHNlbGYuX2ZwLnJlYWQobiAqIHNlbGYuX3JlZl9zaXplKSkKKworICAgIGRlZiBfcmVhZF9vYmplY3Qoc2VsZiwgb2Zmc2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIHJlYWQgdGhlIG9iamVjdCBhdCBvZmZzZXQuCisKKyAgICAgICAgTWF5IHJlY3Vyc2l2ZWx5IHJlYWQgc3ViLW9iamVjdHMgKGNvbnRlbnQgb2YgYW4gYXJyYXkvZGljdC9zZXQpCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9mcC5zZWVrKG9mZnNldCkKKyAgICAgICAgdG9rZW4gPSBzZWxmLl9mcC5yZWFkKDEpWzBdCisgICAgICAgIHRva2VuSCwgdG9rZW5MID0gdG9rZW4gJiAweEYwLCB0b2tlbiAmIDB4MEYKKworICAgICAgICBpZiB0b2tlbiA9PSAweDAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBlbGlmIHRva2VuID09IDB4MDg6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBlbGlmIHRva2VuID09IDB4MDk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgVGhlIHJlZmVyZW5jZWQgc291cmNlIGNvZGUgYWxzbyBtZW50aW9ucyBVUkwgKDB4MGMsIDB4MGQpIGFuZAorICAgICAgICAjIFVVSUQgKDB4MGUpLCBidXQgbmVpdGhlciBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBDb2NvYSBsaWJyYXJpZXMuCisKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAweDBmOgorICAgICAgICAgICAgcmV0dXJuIGInJworCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4MTA6ICAjIGludAorICAgICAgICAgICAgcmV0dXJuIGludC5mcm9tX2J5dGVzKHNlbGYuX2ZwLnJlYWQoMSA8PCB0b2tlbkwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaWcnLCBzaWduZWQ9dG9rZW5MID49IDMpCisKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAweDIyOiAjIHJlYWwKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCc+ZicsIHNlbGYuX2ZwLnJlYWQoNCkpWzBdCisKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAweDIzOiAjIHJlYWwKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCc+ZCcsIHNlbGYuX2ZwLnJlYWQoOCkpWzBdCisKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAweDMzOiAgIyBkYXRlCisgICAgICAgICAgICBmID0gc3RydWN0LnVucGFjaygnPmQnLCBzZWxmLl9mcC5yZWFkKDgpKVswXQorICAgICAgICAgICAgIyB0aW1lc3RhbXAgMCBvZiBiaW5hcnkgcGxpc3RzIGNvcnJlc3BvbmRzIHRvIDEvMS8yMDAxCisgICAgICAgICAgICAjICh5ZWFyIG9mIE1hYyBPUyBYIDEwLjApLCBpbnN0ZWFkIG9mIDEvMS8xOTcwLgorICAgICAgICAgICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoZiArICgzMSAqIDM2NSArIDgpICogODY0MDApCisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHg0MDogICMgZGF0YQorICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3VzZV9idWlsdGluX3R5cGVzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9mcC5yZWFkKHMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBEYXRhKHNlbGYuX2ZwLnJlYWQocykpCisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHg1MDogICMgYXNjaWkgc3RyaW5nCisgICAgICAgICAgICBzID0gc2VsZi5fZ2V0X3NpemUodG9rZW5MKQorICAgICAgICAgICAgcmVzdWx0ID0gIHNlbGYuX2ZwLnJlYWQocykuZGVjb2RlKCdhc2NpaScpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHg2MDogICMgdW5pY29kZSBzdHJpbmcKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZnAucmVhZChzICogMikuZGVjb2RlKCd1dGYtMTZiZScpCisKKyAgICAgICAgIyB0b2tlbkggPT0gMHg4MCBpcyBkb2N1bWVudGVkIGFzICdVSUQnIGFuZCBhcHBlYXJzIHRvIGJlIHVzZWQgZm9yCisgICAgICAgICMga2V5ZWQtYXJjaGl2aW5nLCBub3QgaW4gcGxpc3RzLgorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4QTA6ICAjIGFycmF5CisgICAgICAgICAgICBzID0gc2VsZi5fZ2V0X3NpemUodG9rZW5MKQorICAgICAgICAgICAgb2JqX3JlZnMgPSBzZWxmLl9yZWFkX3JlZnMocykKKyAgICAgICAgICAgIHJldHVybiBbc2VsZi5fcmVhZF9vYmplY3Qoc2VsZi5fb2JqZWN0X29mZnNldHNbeF0pCisgICAgICAgICAgICAgICAgZm9yIHggaW4gb2JqX3JlZnNdCisKKyAgICAgICAgIyB0b2tlbkggPT0gMHhCMCBpcyBkb2N1bWVudGVkIGFzICdvcmRzZXQnLCBidXQgaXMgbm90IGFjdHVhbGx5CisgICAgICAgICMgaW1wbGVtZW50ZWQgaW4gdGhlIEFwcGxlIHJlZmVyZW5jZSBjb2RlLgorCisgICAgICAgICMgdG9rZW5IID09IDB4QzAgaXMgZG9jdW1lbnRlZCBhcyAnc2V0JywgYnV0IHNldHMgY2Fubm90IGJlIHVzZWQgaW4KKyAgICAgICAgIyBwbGlzdHMuCisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHhEMDogICMgZGljdAorICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIGtleV9yZWZzID0gc2VsZi5fcmVhZF9yZWZzKHMpCisgICAgICAgICAgICBvYmpfcmVmcyA9IHNlbGYuX3JlYWRfcmVmcyhzKQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fZGljdF90eXBlKCkKKyAgICAgICAgICAgIGZvciBrLCBvIGluIHppcChrZXlfcmVmcywgb2JqX3JlZnMpOgorICAgICAgICAgICAgICAgIHJlc3VsdFtzZWxmLl9yZWFkX29iamVjdChzZWxmLl9vYmplY3Rfb2Zmc2V0c1trXSkKKyAgICAgICAgICAgICAgICAgICAgXSA9IHNlbGYuX3JlYWRfb2JqZWN0KHNlbGYuX29iamVjdF9vZmZzZXRzW29dKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIHJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uKCkKKworZGVmIF9jb3VudF90b19zaXplKGNvdW50KToKKyAgICBpZiBjb3VudCA8IDEgPDwgODoKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGVsaWYgY291bnQgPCAxIDw8IDE2OgorICAgICAgICByZXR1cm4gMgorCisgICAgZWxpZiBjb3VudCA8PCAxIDw8IDMyOgorICAgICAgICByZXR1cm4gNAorCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIDgKKworY2xhc3MgX0JpbmFyeVBsaXN0V3JpdGVyIChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcCwgc29ydF9rZXlzLCBza2lwa2V5cyk6CisgICAgICAgIHNlbGYuX2ZwID0gZnAKKyAgICAgICAgc2VsZi5fc29ydF9rZXlzID0gc29ydF9rZXlzCisgICAgICAgIHNlbGYuX3NraXBrZXlzID0gc2tpcGtleXMKKworICAgIGRlZiB3cml0ZShzZWxmLCB2YWx1ZSk6CisKKyAgICAgICAgIyBGbGF0dGVuZWQgb2JqZWN0IGxpc3Q6CisgICAgICAgIHNlbGYuX29iamxpc3QgPSBbXQorCisgICAgICAgICMgTWFwcGluZ3MgZnJvbSBvYmplY3QtPm9iamVjdGlkCisgICAgICAgICMgRmlyc3QgZGljdCBoYXMgKHR5cGUob2JqZWN0KSwgb2JqZWN0KSBhcyB0aGUga2V5LAorICAgICAgICAjIHNlY29uZCBkaWN0IGlzIHVzZWQgd2hlbiBvYmplY3QgaXMgbm90IGhhc2hhYmxlIGFuZAorICAgICAgICAjIGhhcyBpZChvYmplY3QpIGFzIHRoZSBrZXkuCisgICAgICAgIHNlbGYuX29ianRhYmxlID0ge30KKyAgICAgICAgc2VsZi5fb2JqaWR0YWJsZSA9IHt9CisKKyAgICAgICAgIyBDcmVhdGUgbGlzdCBvZiBhbGwgb2JqZWN0cyBpbiB0aGUgcGxpc3QKKyAgICAgICAgc2VsZi5fZmxhdHRlbih2YWx1ZSkKKworICAgICAgICAjIFNpemUgb2Ygb2JqZWN0IHJlZmVyZW5jZXMgaW4gc2VyaWFsaXplZCBjb250YWluZXJzCisgICAgICAgICMgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHBsaXN0LgorICAgICAgICBudW1fb2JqZWN0cyA9IGxlbihzZWxmLl9vYmpsaXN0KQorICAgICAgICBzZWxmLl9vYmplY3Rfb2Zmc2V0cyA9IFswXSpudW1fb2JqZWN0cworICAgICAgICBzZWxmLl9yZWZfc2l6ZSA9IF9jb3VudF90b19zaXplKG51bV9vYmplY3RzKQorCisgICAgICAgIHNlbGYuX3JlZl9mb3JtYXQgPSBfQklOQVJZX0ZPUk1BVFtzZWxmLl9yZWZfc2l6ZV0KKworICAgICAgICAjIFdyaXRlIGZpbGUgaGVhZGVyCisgICAgICAgIHNlbGYuX2ZwLndyaXRlKGInYnBsaXN0MDAnKQorCisgICAgICAgICMgV3JpdGUgb2JqZWN0IGxpc3QKKyAgICAgICAgZm9yIG9iaiBpbiBzZWxmLl9vYmpsaXN0OgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfb2JqZWN0KG9iaikKKworICAgICAgICAjIFdyaXRlIHJlZm51bS0+b2JqZWN0IG9mZnNldCB0YWJsZQorICAgICAgICB0b3Bfb2JqZWN0ID0gc2VsZi5fZ2V0cmVmbnVtKHZhbHVlKQorICAgICAgICBvZmZzZXRfdGFibGVfb2Zmc2V0ID0gc2VsZi5fZnAudGVsbCgpCisgICAgICAgIG9mZnNldF9zaXplID0gX2NvdW50X3RvX3NpemUob2Zmc2V0X3RhYmxlX29mZnNldCkKKyAgICAgICAgb2Zmc2V0X2Zvcm1hdCA9ICc+JyArIF9CSU5BUllfRk9STUFUW29mZnNldF9zaXplXSAqIG51bV9vYmplY3RzCisgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKG9mZnNldF9mb3JtYXQsICpzZWxmLl9vYmplY3Rfb2Zmc2V0cykpCisKKyAgICAgICAgIyBXcml0ZSB0cmFpbGVyCisgICAgICAgIHNvcnRfdmVyc2lvbiA9IDAKKyAgICAgICAgdHJhaWxlciA9ICgKKyAgICAgICAgICAgIHNvcnRfdmVyc2lvbiwgb2Zmc2V0X3NpemUsIHNlbGYuX3JlZl9zaXplLCBudW1fb2JqZWN0cywKKyAgICAgICAgICAgIHRvcF9vYmplY3QsIG9mZnNldF90YWJsZV9vZmZzZXQKKyAgICAgICAgKQorICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPjV4QkJCUVFRJywgKnRyYWlsZXIpKQorCisgICAgZGVmIF9mbGF0dGVuKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIyBGaXJzdCBjaGVjayBpZiB0aGUgb2JqZWN0IGlzIGluIHRoZSBvYmplY3QgdGFibGUsIG5vdCB1c2VkIGZvcgorICAgICAgICAjIGNvbnRhaW5lcnMgdG8gZW5zdXJlIHRoYXQgdHdvIHN1YmNvbnRhaW5lcnMgd2l0aCB0aGUgc2FtZSBjb250ZW50cworICAgICAgICAjIHdpbGwgYmUgc2VyaWFsaXplZCBhcyBkaXN0aW5jdCB2YWx1ZXMuCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsICgKKyAgICAgICAgICAgICAgICBzdHIsIGludCwgZmxvYXQsIGRhdGV0aW1lLmRhdGV0aW1lLCBieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBpZiAodHlwZSh2YWx1ZSksIHZhbHVlKSBpbiBzZWxmLl9vYmp0YWJsZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgaWYgKHR5cGUodmFsdWUuZGF0YSksIHZhbHVlLmRhdGEpIGluIHNlbGYuX29ianRhYmxlOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQWRkIHRvIG9iamVjdHJlZmVyZW5jZSBtYXAKKyAgICAgICAgcmVmbnVtID0gbGVuKHNlbGYuX29iamxpc3QpCisgICAgICAgIHNlbGYuX29iamxpc3QuYXBwZW5kKHZhbHVlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBEYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLl9vYmp0YWJsZVsodHlwZSh2YWx1ZS5kYXRhKSwgdmFsdWUuZGF0YSldID0gcmVmbnVtCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX29ianRhYmxlWyh0eXBlKHZhbHVlKSwgdmFsdWUpXSA9IHJlZm51bQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fb2JqaWR0YWJsZVtpZCh2YWx1ZSldID0gcmVmbnVtCisKKyAgICAgICAgIyBBbmQgZmluYWxseSByZWN1cnNlIGludG8gY29udGFpbmVycworICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgIGtleXMgPSBbXQorICAgICAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAgICAgIGl0ZW1zID0gdmFsdWUuaXRlbXMoKQorICAgICAgICAgICAgaWYgc2VsZi5fc29ydF9rZXlzOgorICAgICAgICAgICAgICAgIGl0ZW1zID0gc29ydGVkKGl0ZW1zKQorCisgICAgICAgICAgICBmb3IgaywgdiBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrLCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9za2lwa2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5cyBtdXN0IGJlIHN0cmluZ3MiKQorICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGspCisgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2KQorCisgICAgICAgICAgICBmb3IgbyBpbiBpdGVydG9vbHMuY2hhaW4oa2V5cywgdmFsdWVzKToKKyAgICAgICAgICAgICAgICBzZWxmLl9mbGF0dGVuKG8pCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIGZvciBvIGluIHZhbHVlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZsYXR0ZW4obykKKworICAgIGRlZiBfZ2V0cmVmbnVtKHNlbGYsIHZhbHVlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29ianRhYmxlWyh0eXBlKHZhbHVlLmRhdGEpLCB2YWx1ZS5kYXRhKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29ianRhYmxlWyh0eXBlKHZhbHVlKSwgdmFsdWUpXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29iamlkdGFibGVbaWQodmFsdWUpXQorCisgICAgZGVmIF93cml0ZV9zaXplKHNlbGYsIHRva2VuLCBzaXplKToKKyAgICAgICAgaWYgc2l6ZSA8IDE1OgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CJywgdG9rZW4gfCBzaXplKSkKKworICAgICAgICBlbGlmIHNpemUgPCAxIDw8IDg6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJCQicsIHRva2VuIHwgMHhGLCAweDEwLCBzaXplKSkKKworICAgICAgICBlbGlmIHNpemUgPCAxIDw8IDE2OgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQkgnLCB0b2tlbiB8IDB4RiwgMHgxMSwgc2l6ZSkpCisKKyAgICAgICAgZWxpZiBzaXplIDwgMSA8PCAzMjoKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkJMJywgdG9rZW4gfCAweEYsIDB4MTIsIHNpemUpKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJCUScsIHRva2VuIHwgMHhGLCAweDEzLCBzaXplKSkKKworICAgIGRlZiBfd3JpdGVfb2JqZWN0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgcmVmID0gc2VsZi5fZ2V0cmVmbnVtKHZhbHVlKQorICAgICAgICBzZWxmLl9vYmplY3Rfb2Zmc2V0c1tyZWZdID0gc2VsZi5fZnAudGVsbCgpCisgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShiJ1x4MDAnKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShiJ1x4MDgnKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKGInXHgwOScpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgaWYgdmFsdWUgPCAwOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CcScsIDB4MTMsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKHZhbHVlKSBmcm9tIE5vbmUKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPCAxIDw8IDg6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQicsIDB4MTAsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPCAxIDw8IDE2OgorICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkgnLCAweDExLCB2YWx1ZSkpCisgICAgICAgICAgICBlbGlmIHZhbHVlIDwgMSA8PCAzMjoKKyAgICAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJMJywgMHgxMiwgdmFsdWUpKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA8IDEgPDwgNjM6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CUScsIDB4MTMsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPCAxIDw8IDY0OgorICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKGInXHgxNCcgKyB2YWx1ZS50b19ieXRlcygxNiwgJ2JpZycsIHNpZ25lZD1UcnVlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcih2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QmQnLCAweDIzLCB2YWx1ZSkpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkYXRldGltZS5kYXRldGltZSk6CisgICAgICAgICAgICBmID0gKHZhbHVlIC0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwMSwgMSwgMSkpLnRvdGFsX3NlY29uZHMoKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CZCcsIDB4MzMsIGYpKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NDAsIGxlbih2YWx1ZS5kYXRhKSkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHZhbHVlLmRhdGEpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweDQwLCBsZW4odmFsdWUpKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUodmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHQgPSB2YWx1ZS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NTAsIGxlbih2YWx1ZSkpCisgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgIHQgPSB2YWx1ZS5lbmNvZGUoJ3V0Zi0xNmJlJykKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NjAsIGxlbih2YWx1ZSkpCisKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHQpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIHJlZnMgPSBbc2VsZi5fZ2V0cmVmbnVtKG8pIGZvciBvIGluIHZhbHVlXQorICAgICAgICAgICAgcyA9IGxlbihyZWZzKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweEEwLCBzKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz4nICsgc2VsZi5fcmVmX2Zvcm1hdCAqIHMsICpyZWZzKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAga2V5UmVmcywgdmFsUmVmcyA9IFtdLCBbXQorCisgICAgICAgICAgICBpZiBzZWxmLl9zb3J0X2tleXM6CisgICAgICAgICAgICAgICAgcm9vdEl0ZW1zID0gc29ydGVkKHZhbHVlLml0ZW1zKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJvb3RJdGVtcyA9IHZhbHVlLml0ZW1zKCkKKworICAgICAgICAgICAgZm9yIGssIHYgaW4gcm9vdEl0ZW1zOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGssIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NraXBrZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXlzIG11c3QgYmUgc3RyaW5ncyIpCisgICAgICAgICAgICAgICAga2V5UmVmcy5hcHBlbmQoc2VsZi5fZ2V0cmVmbnVtKGspKQorICAgICAgICAgICAgICAgIHZhbFJlZnMuYXBwZW5kKHNlbGYuX2dldHJlZm51bSh2KSkKKworICAgICAgICAgICAgcyA9IGxlbihrZXlSZWZzKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweEQwLCBzKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz4nICsgc2VsZi5fcmVmX2Zvcm1hdCAqIHMsICprZXlSZWZzKSkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+JyArIHNlbGYuX3JlZl9mb3JtYXQgKiBzLCAqdmFsUmVmcykpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcih2YWx1ZSkKKworCitkZWYgX2lzX2ZtdF9iaW5hcnkoaGVhZGVyKToKKyAgICByZXR1cm4gaGVhZGVyWzo4XSA9PSBiJ2JwbGlzdDAwJworCisKKyMKKyMgR2VuZXJpYyBiaXRzCisjCisKK19GT1JNQVRTPXsKKyAgICBGTVRfWE1MOiBkaWN0KAorICAgICAgICBkZXRlY3Q9X2lzX2ZtdF94bWwsCisgICAgICAgIHBhcnNlcj1fUGxpc3RQYXJzZXIsCisgICAgICAgIHdyaXRlcj1fUGxpc3RXcml0ZXIsCisgICAgKSwKKyAgICBGTVRfQklOQVJZOiBkaWN0KAorICAgICAgICBkZXRlY3Q9X2lzX2ZtdF9iaW5hcnksCisgICAgICAgIHBhcnNlcj1fQmluYXJ5UGxpc3RQYXJzZXIsCisgICAgICAgIHdyaXRlcj1fQmluYXJ5UGxpc3RXcml0ZXIsCisgICAgKQorfQorCisKK2RlZiBsb2FkKGZwLCAqLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9VHJ1ZSwgZGljdF90eXBlPWRpY3QpOgorICAgICIiIlJlYWQgYSAucGxpc3QgZmlsZS4gJ2ZwJyBzaG91bGQgYmUgKHJlYWRhYmxlKSBmaWxlIG9iamVjdC4KKyAgICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCisgICAgIiIiCisgICAgaWYgZm10IGlzIE5vbmU6CisgICAgICAgIGhlYWRlciA9IGZwLnJlYWQoMzIpCisgICAgICAgIGZwLnNlZWsoMCkKKyAgICAgICAgZm9yIGluZm8gaW4gX0ZPUk1BVFMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBpbmZvWydkZXRlY3QnXShoZWFkZXIpOgorICAgICAgICAgICAgICAgIHAgPSBpbmZvWydwYXJzZXInXSgKKyAgICAgICAgICAgICAgICAgICAgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMsCisgICAgICAgICAgICAgICAgICAgIGRpY3RfdHlwZT1kaWN0X3R5cGUsCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uKCkKKworICAgIGVsc2U6CisgICAgICAgIHAgPSBfRk9STUFUU1tmbXRdWydwYXJzZXInXSh1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcykKKworICAgIHJldHVybiBwLnBhcnNlKGZwKQorCisKK2RlZiBsb2Fkcyh2YWx1ZSwgKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KToKKyAgICAiIiJSZWFkIGEgLnBsaXN0IGZpbGUgZnJvbSBhIGJ5dGVzIG9iamVjdC4KKyAgICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCisgICAgIiIiCisgICAgZnAgPSBCeXRlc0lPKHZhbHVlKQorICAgIHJldHVybiBsb2FkKAorICAgICAgICBmcCwgZm10PWZtdCwgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMsIGRpY3RfdHlwZT1kaWN0X3R5cGUpCisKKworZGVmIGR1bXAodmFsdWUsIGZwLCAqLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKToKKyAgICAiIiJXcml0ZSAndmFsdWUnIHRvIGEgLnBsaXN0IGZpbGUuICdmcCcgc2hvdWxkIGJlIGEgKHdyaXRhYmxlKQorICAgIGZpbGUgb2JqZWN0LgorICAgICIiIgorICAgIGlmIGZtdCBub3QgaW4gX0ZPUk1BVFM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIGZvcm1hdDogJXIiJShmbXQsKSkKKworICAgIHdyaXRlciA9IF9GT1JNQVRTW2ZtdF1bIndyaXRlciJdKGZwLCBzb3J0X2tleXM9c29ydF9rZXlzLCBza2lwa2V5cz1za2lwa2V5cykKKyAgICB3cml0ZXIud3JpdGUodmFsdWUpCisKKworZGVmIGR1bXBzKHZhbHVlLCAqLCBmbXQ9Rk1UX1hNTCwgc2tpcGtleXM9RmFsc2UsIHNvcnRfa2V5cz1UcnVlKToKKyAgICAiIiJSZXR1cm4gYSBieXRlcyBvYmplY3Qgd2l0aCB0aGUgY29udGVudHMgZm9yIGEgLnBsaXN0IGZpbGUuCisgICAgIiIiCisgICAgZnAgPSBCeXRlc0lPKCkKKyAgICBkdW1wKHZhbHVlLCBmcCwgZm10PWZtdCwgc2tpcGtleXM9c2tpcGtleXMsIHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgcmV0dXJuIGZwLmdldHZhbHVlKCkKZGlmZiAtLWdpdCBhL0xpYi9wb3BsaWIucHkgYi9MaWIvcG9wbGliLnB5CmluZGV4IDQzZjgzMDUuLjIzYTM1MTcgMTAwNjQ0Ci0tLSBhL0xpYi9wb3BsaWIucHkKKysrIGIvTGliL3BvcGxpYi5weQpAQCAtMTMsNyArMTMsMTUgQEAKIAogIyBJbXBvcnRzCiAKLWltcG9ydCByZSwgc29ja2V0CitpbXBvcnQgZXJybm8KK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAorCit0cnk6CisgICAgaW1wb3J0IHNzbAorICAgIEhBVkVfU1NMID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIEhBVkVfU1NMID0gRmFsc2UKIAogX19hbGxfXyA9IFsiUE9QMyIsImVycm9yX3Byb3RvIl0KIApAQCAtNjEsNiArNjksOCBAQAogICAgICAgICAgICAgQVBPUCBuYW1lIGRpZ2VzdCAgICAgICAgYXBvcChuYW1lLCBkaWdlc3QpCiAgICAgICAgICAgICBUT1AgbXNnIG4gICAgICAgICAgICAgICB0b3AobXNnLCBuKQogICAgICAgICAgICAgVUlETCBbbXNnXSAgICAgICAgICAgICAgdWlkbChtc2cgPSBOb25lKQorICAgICAgICAgICAgQ0FQQSAgICAgICAgICAgICAgICAgICAgY2FwYSgpCisgICAgICAgICAgICBTVExTICAgICAgICAgICAgICAgICAgICBzdGxzKCkKIAogICAgIFJhaXNlcyBvbmUgZXhjZXB0aW9uOiAnZXJyb3JfcHJvdG8nLgogCkBAIC04Nyw2ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKICAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX3Rsc19lc3RhYmxpc2hlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NyZWF0ZV9zb2NrZXQodGltZW91dCkKICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCdyYicpCiAgICAgICAgIHNlbGYuX2RlYnVnZ2luZyA9IDAKQEAgLTI2OCw3ICsyNzksMTQgQEAKICAgICAgICAgaWYgc2VsZi5maWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgIyBUaGUgc2VydmVyIG1pZ2h0IGFscmVhZHkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2sgPSBOb25lCiAKICAgICAjX19kZWxfXyA9IHF1aXQKQEAgLTMyNCwyMSArMzQyLDcyIEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2hvcnRjbWQoJ1VJREwgJXMnICUgd2hpY2gpCiAgICAgICAgIHJldHVybiBzZWxmLl9sb25nY21kKCdVSURMJykKIAotdHJ5OgotICAgIGltcG9ydCBzc2wKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgorCisgICAgZGVmIGNhcGEoc2VsZik6CisgICAgICAgICIiIlJldHVybiBzZXJ2ZXIgY2FwYWJpbGl0aWVzIChSRkMgMjQ0OSkgYXMgYSBkaWN0aW9uYXJ5CisgICAgICAgID4+PiBjPXBvcGxpYi5QT1AzKCdsb2NhbGhvc3QnKQorICAgICAgICA+Pj4gYy5jYXBhKCkKKyAgICAgICAgeydJTVBMRU1FTlRBVElPTic6IFsnQ3lydXMnLCAnUE9QMycsICdzZXJ2ZXInLCAndjIuMi4xMiddLAorICAgICAgICAgJ1RPUCc6IFtdLCAnTE9HSU4tREVMQVknOiBbJzAnXSwgJ0FVVEgtUkVTUC1DT0RFJzogW10sCisgICAgICAgICAnRVhQSVJFJzogWydORVZFUiddLCAnVVNFUic6IFtdLCAnU1RMUyc6IFtdLCAnUElQRUxJTklORyc6IFtdLAorICAgICAgICAgJ1VJREwnOiBbXSwgJ1JFU1AtQ09ERVMnOiBbXX0KKyAgICAgICAgPj4+CisKKyAgICAgICAgUmVhbGx5LCBhY2NvcmRpbmcgdG8gUkZDIDI0NDksIHRoZSBjeXJ1cyBmb2xrcyBzaG91bGQgYXZvaWQKKyAgICAgICAgaGF2aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBzcGxpdCBpbnRvIG11bHRpcGxlIGFyZ3VtZW50cy4uLgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIF9wYXJzZWNhcChsaW5lKToKKyAgICAgICAgICAgIGxzdCA9IGxpbmUuZGVjb2RlKCdhc2NpaScpLnNwbGl0KCkKKyAgICAgICAgICAgIHJldHVybiBsc3RbMF0sIGxzdFsxOl0KKworICAgICAgICBjYXBzID0ge30KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuX2xvbmdjbWQoJ0NBUEEnKQorICAgICAgICAgICAgcmF3Y2FwcyA9IHJlc3BbMV0KKyAgICAgICAgICAgIGZvciBjYXBsaW5lIGluIHJhd2NhcHM6CisgICAgICAgICAgICAgICAgY2Fwbm0sIGNhcGFyZ3MgPSBfcGFyc2VjYXAoY2FwbGluZSkKKyAgICAgICAgICAgICAgICBjYXBzW2NhcG5tXSA9IGNhcGFyZ3MKKyAgICAgICAgZXhjZXB0IGVycm9yX3Byb3RvIGFzIF9lcnI6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBDQVBBIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyJykKKyAgICAgICAgcmV0dXJuIGNhcHMKKworCisgICAgZGVmIHN0bHMoc2VsZiwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiU3RhcnQgYSBUTFMgc2Vzc2lvbiBvbiB0aGUgYWN0aXZlIGNvbm5lY3Rpb24gYXMgc3BlY2lmaWVkIGluIFJGQyAyNTk1LgorCisgICAgICAgICAgICAgICAgY29udGV4dCAtIGEgc3NsLlNTTENvbnRleHQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBIQVZFX1NTTDoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFRMUyBzdXBwb3J0IG1pc3NpbmcnKQorICAgICAgICBpZiBzZWxmLl90bHNfZXN0YWJsaXNoZWQ6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBUTFMgc2Vzc2lvbiBhbHJlYWR5IGVzdGFibGlzaGVkJykKKyAgICAgICAgY2FwcyA9IHNlbGYuY2FwYSgpCisgICAgICAgIGlmIG5vdCAnU1RMUycgaW4gY2FwczoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFNUTFMgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXInKQorICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKQorICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoJ1NUTFMnKQorICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgIHNlbGYuc29jayA9IGNvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgncmInKQorICAgICAgICBzZWxmLl90bHNfZXN0YWJsaXNoZWQgPSBUcnVlCisgICAgICAgIHJldHVybiByZXNwCisKKworaWYgSEFWRV9TU0w6CiAKICAgICBjbGFzcyBQT1AzX1NTTChQT1AzKToKICAgICAgICAgIiIiUE9QMyBjbGllbnQgY2xhc3Mgb3ZlciBTU0wgY29ubmVjdGlvbgogCi0gICAgICAgIEluc3RhbnRpYXRlIHdpdGg6IFBPUDNfU1NMKGhvc3RuYW1lLCBwb3J0PTk5NSwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lKQorICAgICAgICBJbnN0YW50aWF0ZSB3aXRoOiBQT1AzX1NTTChob3N0bmFtZSwgcG9ydD05OTUsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1Ob25lKQogCiAgICAgICAgICAgICAgICBob3N0bmFtZSAtIHRoZSBob3N0bmFtZSBvZiB0aGUgcG9wMyBvdmVyIHNzbCBzZXJ2ZXIKICAgICAgICAgICAgICAgIHBvcnQgLSBwb3J0IG51bWJlcgogICAgICAgICAgICAgICAga2V5ZmlsZSAtIFBFTSBmb3JtYXR0ZWQgZmlsZSB0aGF0IGNvbnRhaW5zIHlvdXIgcHJpdmF0ZSBrZXkKICAgICAgICAgICAgICAgIGNlcnRmaWxlIC0gUEVNIGZvcm1hdHRlZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlCisgICAgICAgICAgICAgICBjb250ZXh0IC0gYSBzc2wuU1NMQ29udGV4dAogCiAgICAgICAgIFNlZSB0aGUgbWV0aG9kcyBvZiB0aGUgcGFyZW50IGNsYXNzIFBPUDMgZm9yIG1vcmUgZG9jdW1lbnRhdGlvbi4KICAgICAgICAgIiIiCkBAIC0zNTMsMTcgKzQyMiwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIFBPUDMuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgdGltZW91dCkKIAogICAgICAgICBkZWYgX2NyZWF0ZV9zb2NrZXQoc2VsZiwgdGltZW91dCk6CiAgICAgICAgICAgICBzb2NrID0gUE9QMy5fY3JlYXRlX3NvY2tldChzZWxmLCB0aW1lb3V0KQotICAgICAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNvY2sgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc29jaykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc29jayA9IHNzbC53cmFwX3NvY2tldChzb2NrLCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUpCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgICAgICBzb2NrID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gc29jawogCisgICAgICAgIGRlZiBzdGxzKHNlbGYsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwgY29udGV4dD1Ob25lKToKKyAgICAgICAgICAgICIiIlRoZSBtZXRob2QgdW5jb25kaXRpb25hbGx5IHJhaXNlcyBhbiBleGNlcHRpb24gc2luY2UgdGhlCisgICAgICAgICAgICBTVExTIGNvbW1hbmQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSBvbiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkCisgICAgICAgICAgICBTU0wvVExTIHNlc3Npb24uCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFRMUyBzZXNzaW9uIGFscmVhZHkgZXN0YWJsaXNoZWQnKQorCiAgICAgX19hbGxfXy5hcHBlbmQoIlBPUDNfU1NMIikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi9wb3NpeHBhdGgucHkgYi9MaWIvcG9zaXhwYXRoLnB5CmluZGV4IGZkNjNmOTcuLjNlMTMyMzkgMTAwNjQ0Ci0tLSBhL0xpYi9wb3NpeHBhdGgucHkKKysrIGIvTGliL3Bvc2l4cGF0aC5weQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmsiIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKLSAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgZXhjZXB0IChPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBzdGF0LlNfSVNMTksoc3Quc3RfbW9kZSkKIApAQCAtMTcyLDU2ICsxNzIsMzUgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgVHJ1ZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIAogCi0jIEFyZSB0d28gZmlsZW5hbWVzIHJlYWxseSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlPwotCi1kZWYgc2FtZWZpbGUoZjEsIGYyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHBhdGhuYW1lcyByZWZlcmVuY2UgdGhlIHNhbWUgYWN0dWFsIGZpbGUiIiIKLSAgICBzMSA9IG9zLnN0YXQoZjEpCi0gICAgczIgPSBvcy5zdGF0KGYyKQotICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCi0KLQotIyBBcmUgdHdvIG9wZW4gZmlsZXMgcmVhbGx5IHJlZmVyZW5jaW5nIHRoZSBzYW1lIGZpbGU/Ci0jIChOb3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgZmlsZSBkZXNjcmlwdG9yISkKLQotZGVmIHNhbWVvcGVuZmlsZShmcDEsIGZwMik6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIHR3byBvcGVuIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHMxID0gb3MuZnN0YXQoZnAxKQotICAgIHMyID0gb3MuZnN0YXQoZnAyKQotICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCi0KLQotIyBBcmUgdHdvIHN0YXQgYnVmZmVycyAob2J0YWluZWQgZnJvbSBzdGF0LCBmc3RhdCBvciBsc3RhdCkKLSMgZGVzY3JpYmluZyB0aGUgc2FtZSBmaWxlPwotCi1kZWYgc2FtZXN0YXQoczEsIHMyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHN0YXQgYnVmZmVycyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHJldHVybiBzMS5zdF9pbm8gPT0gczIuc3RfaW5vIGFuZCBcCi0gICAgICAgICAgIHMxLnN0X2RldiA9PSBzMi5zdF9kZXYKLQotCiAjIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PwogIyAoRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBVTklYZXM/ICBJcyBpdCBldmVuIGd1YXJhbnRlZWQgdG8gd29yayBieSBQb3NpeD8pCiAKIGRlZiBpc21vdW50KHBhdGgpOgogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBtb3VudCBwb2ludCIiIgotICAgIGlmIGlzbGluayhwYXRoKToKLSAgICAgICAgIyBBIHN5bWxpbmsgY2FuIG5ldmVyIGJlIGEgbW91bnQgcG9pbnQKLSAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgdHJ5OgogICAgICAgICBzMSA9IG9zLmxzdGF0KHBhdGgpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgotICAgICAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCBiJy4uJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhcmVudCA9IGpvaW4ocGF0aCwgJy4uJykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIyBJdCBkb2Vzbid0IGV4aXN0IC0tIHNvIG5vdCBhIG1vdW50IHBvaW50LiA6LSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgIyBBIHN5bWxpbmsgY2FuIG5ldmVyIGJlIGEgbW91bnQgcG9pbnQKKyAgICAgICAgaWYgc3RhdC5TX0lTTE5LKHMxLnN0X21vZGUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKKyAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCBiJy4uJykKKyAgICBlbHNlOgorICAgICAgICBwYXJlbnQgPSBqb2luKHBhdGgsICcuLicpCisgICAgdHJ5OgogICAgICAgICBzMiA9IG9zLmxzdGF0KHBhcmVudCkKLSAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZSAjIEl0IGRvZXNuJ3QgZXhpc3QgLS0gc28gbm90IGEgbW91bnQgcG9pbnQgOi0pCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorCiAgICAgZGV2MSA9IHMxLnN0X2RldgogICAgIGRldjIgPSBzMi5zdF9kZXYKICAgICBpZiBkZXYxICE9IGRldjI6CmRpZmYgLS1naXQgYS9MaWIvcHByaW50LnB5IGIvTGliL3BwcmludC5weQppbmRleCAyMmJlMGI0Yi4uM2JlOWMzNiAxMDA2NDQKLS0tIGEvTGliL3BwcmludC5weQorKysgYi9MaWIvcHByaW50LnB5CkBAIC0zNCw2ICszNCw3IEBACiAKICIiIgogCitpbXBvcnQgcmUKIGltcG9ydCBzeXMgYXMgX3N5cwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QgYXMgX09yZGVyZWREaWN0CiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTyBhcyBfU3RyaW5nSU8KQEAgLTQxLDIyICs0MiwxOSBAQAogX19hbGxfXyA9IFsicHByaW50IiwicGZvcm1hdCIsImlzcmVhZGFibGUiLCJpc3JlY3Vyc2l2ZSIsInNhZmVyZXByIiwKICAgICAgICAgICAgIlByZXR0eVByaW50ZXIiXQogCi0jIGNhY2hlIHRoZXNlIGZvciBmYXN0ZXIgYWNjZXNzOgotX2NvbW1ham9pbiA9ICIsICIuam9pbgotX2lkID0gaWQKLV9sZW4gPSBsZW4KLV90eXBlID0gdHlwZQogCi0KLWRlZiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lKToKK2RlZiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCAqLAorICAgICAgICAgICBjb21wYWN0PUZhbHNlKToKICAgICAiIiJQcmV0dHktcHJpbnQgYSBQeXRob24gb2JqZWN0IHRvIGEgc3RyZWFtIFtkZWZhdWx0IGlzIHN5cy5zdGRvdXRdLiIiIgogICAgIHByaW50ZXIgPSBQcmV0dHlQcmludGVyKAotICAgICAgICBzdHJlYW09c3RyZWFtLCBpbmRlbnQ9aW5kZW50LCB3aWR0aD13aWR0aCwgZGVwdGg9ZGVwdGgpCisgICAgICAgIHN0cmVhbT1zdHJlYW0sIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCwKKyAgICAgICAgY29tcGFjdD1jb21wYWN0KQogICAgIHByaW50ZXIucHByaW50KG9iamVjdCkKIAotZGVmIHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUpOgorZGVmIHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsICosIGNvbXBhY3Q9RmFsc2UpOgogICAgICIiIkZvcm1hdCBhIFB5dGhvbiBvYmplY3QgaW50byBhIHByZXR0eS1wcmludGVkIHJlcHJlc2VudGF0aW9uLiIiIgotICAgIHJldHVybiBQcmV0dHlQcmludGVyKGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCkucGZvcm1hdChvYmplY3QpCisgICAgcmV0dXJuIFByZXR0eVByaW50ZXIoaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsIGRlcHRoPWRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhY3Q9Y29tcGFjdCkucGZvcm1hdChvYmplY3QpCiAKIGRlZiBzYWZlcmVwcihvYmplY3QpOgogICAgICIiIlZlcnNpb24gb2YgcmVwcigpIHdoaWNoIGNhbiBoYW5kbGUgcmVjdXJzaXZlIGRhdGEgc3RydWN0dXJlcy4iIiIKQEAgLTEwMSw3ICs5OSw4IEBACiAgICAgcmV0dXJuIF9zYWZlX2tleSh0WzBdKSwgX3NhZmVfa2V5KHRbMV0pCiAKIGNsYXNzIFByZXR0eVByaW50ZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKToKICAgICAgICAgIiIiSGFuZGxlIHByZXR0eSBwcmludGluZyBvcGVyYXRpb25zIG9udG8gYSBzdHJlYW0gdXNpbmcgYSBzZXQgb2YKICAgICAgICAgY29uZmlndXJlZCBwYXJhbWV0ZXJzLgogCkBAIC0xMTgsNiArMTE3LDkgQEAKICAgICAgICAgICAgIFRoZSBkZXNpcmVkIG91dHB1dCBzdHJlYW0uICBJZiBvbWl0dGVkIChvciBmYWxzZSksIHRoZSBzdGFuZGFyZAogICAgICAgICAgICAgb3V0cHV0IHN0cmVhbSBhdmFpbGFibGUgYXQgY29uc3RydWN0aW9uIHdpbGwgYmUgdXNlZC4KIAorICAgICAgICBjb21wYWN0CisgICAgICAgICAgICBJZiB0cnVlLCBzZXZlcmFsIGl0ZW1zIHdpbGwgYmUgY29tYmluZWQgaW4gb25lIGxpbmUuCisKICAgICAgICAgIiIiCiAgICAgICAgIGluZGVudCA9IGludChpbmRlbnQpCiAgICAgICAgIHdpZHRoID0gaW50KHdpZHRoKQpAQCAtMTMxLDYgKzEzMyw3IEBACiAgICAgICAgICAgICBzZWxmLl9zdHJlYW0gPSBzdHJlYW0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3N0cmVhbSA9IF9zeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuX2NvbXBhY3QgPSBib29sKGNvbXBhY3QpCiAKICAgICBkZWYgcHByaW50KHNlbGYsIG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3QsIHNlbGYuX3N0cmVhbSwgMCwgMCwge30sIDApCkBAIC0xNTAsMjggKzE1MywyNSBAQAogCiAgICAgZGVmIF9mb3JtYXQoc2VsZiwgb2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCk6CiAgICAgICAgIGxldmVsID0gbGV2ZWwgKyAxCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG9iamlkIGluIGNvbnRleHQ6CiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoX3JlY3Vyc2lvbihvYmplY3QpKQogICAgICAgICAgICAgc2VsZi5fcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBGYWxzZQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIob2JqZWN0LCBjb250ZXh0LCBsZXZlbCAtIDEpCi0gICAgICAgIHR5cCA9IF90eXBlKG9iamVjdCkKLSAgICAgICAgc2VwTGluZXMgPSBfbGVuKHJlcCkgPiAoc2VsZi5fd2lkdGggLSAxIC0gaW5kZW50IC0gYWxsb3dhbmNlKQorICAgICAgICB0eXAgPSB0eXBlKG9iamVjdCkKKyAgICAgICAgbWF4X3dpZHRoID0gc2VsZi5fd2lkdGggLSAxIC0gaW5kZW50IC0gYWxsb3dhbmNlCisgICAgICAgIHNlcExpbmVzID0gbGVuKHJlcCkgPiBtYXhfd2lkdGgKICAgICAgICAgd3JpdGUgPSBzdHJlYW0ud3JpdGUKIAotICAgICAgICBpZiBzZWxmLl9kZXB0aCBhbmQgbGV2ZWwgPiBzZWxmLl9kZXB0aDoKLSAgICAgICAgICAgIHdyaXRlKHJlcCkKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIGlmIHNlcExpbmVzOgogICAgICAgICAgICAgciA9IGdldGF0dHIodHlwLCAiX19yZXByX18iLCBOb25lKQogICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIGRpY3QpOgogICAgICAgICAgICAgICAgIHdyaXRlKCd7JykKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbmRlbnRfcGVyX2xldmVsID4gMToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBfbGVuKG9iamVjdCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW4ob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGxlbmd0aDoKICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtvYmppZF0gPSAxCiAgICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCArIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKQEAgLTE4MywxMyArMTgzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoa2V5LCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQogICAgICAgICAgICAgICAgICAgICB3cml0ZSgnOiAnKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIF9sZW4ocmVwKSArIDIsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50ICsgbGVuKHJlcCkgKyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBpZiBsZW5ndGggPiAxOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgZW50IGluIGl0ZW1zWzE6XToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXAgPSBzZWxmLl9yZXByKGtleSwgY29udGV4dCwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyxcbiVzJXM6ICcgJSAoJyAnKmluZGVudCwgcmVwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIF9sZW4ocmVwKSArIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQgKyBsZW4ocmVwKSArIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2FuY2UgKyAxLCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50IC0gc2VsZi5faW5kZW50X3Blcl9sZXZlbAogICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgICAgICAgICAgICAgIChpc3N1YmNsYXNzKHR5cCwgc2V0KSBhbmQgciBpcyBzZXQuX19yZXByX18pIG9yCiAgICAgICAgICAgICAgICAgKGlzc3ViY2xhc3ModHlwLCBmcm96ZW5zZXQpIGFuZCByIGlzIGZyb3plbnNldC5fX3JlcHJfXykKICAgICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gX2xlbihvYmplY3QpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gbGVuKG9iamVjdCkKICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgbGlzdCk6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdbJykKICAgICAgICAgICAgICAgICAgICAgZW5kY2hhciA9ICddJwpAQCAtMjI1LDIzICsyMjUsNzEgQEAKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKICAgICAgICAgICAgICAgICBpZiBsZW5ndGg6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbb2JqaWRdID0gMQotICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgKyBzZWxmLl9pbmRlbnRfcGVyX2xldmVsCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3RbMF0sIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbmd0aCA+IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW50IGluIG9iamVjdFsxOl06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyxcbicgKyAnICcqaW5kZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCAtIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0X2l0ZW1zKG9iamVjdCwgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ICsgc2VsZi5faW5kZW50X3Blcl9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgdHVwbGUpIGFuZCBsZW5ndGggPT0gMToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJywnKQogICAgICAgICAgICAgICAgIHdyaXRlKGVuZGNoYXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCBzdHIpIGFuZCBsZW4ob2JqZWN0KSA+IDAgYW5kIHIgaXMgc3RyLl9fcmVwcl9fOgorICAgICAgICAgICAgICAgIGRlZiBfc3RyX3BhcnRzKHMpOgorICAgICAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBzdHJpbmcgbGl0ZXJhbHMgY29tcHJpc2luZyB0aGUgcmVwcigpCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBnaXZlbiBzdHJpbmcgdXNpbmcgbGl0ZXJhbCBjb25jYXRlbmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBzLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHJlcHIobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihyZXApIDw9IG1heF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBIGxpc3Qgb2YgYWx0ZXJuYXRpbmcgKG5vbi1zcGFjZSwgc3BhY2UpIHN0cmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHJlLnNwbGl0KHInKFxzKyknLCBsaW5lKSArIFsnJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocGFydHMpLCAyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnRzW2ldICsgcGFydHNbaSsxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjdXJyZW50ICsgcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocmVwcihjYW5kaWRhdGUpKSA+IG1heF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVwcihjdXJyZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHBhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXByKGN1cnJlbnQpCisgICAgICAgICAgICAgICAgZm9yIGksIHJlcCBpbiBlbnVtZXJhdGUoX3N0cl9wYXJ0cyhvYmplY3QpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnXG4nICsgJyAnKmluZGVudCkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICB3cml0ZShyZXApCiAKKyAgICBkZWYgX2Zvcm1hdF9pdGVtcyhzZWxmLCBpdGVtcywgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpOgorICAgICAgICB3cml0ZSA9IHN0cmVhbS53cml0ZQorICAgICAgICBkZWxpbW5sID0gJyxcbicgKyAnICcgKiBpbmRlbnQKKyAgICAgICAgZGVsaW0gPSAnJworICAgICAgICB3aWR0aCA9IG1heF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gaW5kZW50IC0gYWxsb3dhbmNlICsgMgorICAgICAgICBmb3IgZW50IGluIGl0ZW1zOgorICAgICAgICAgICAgaWYgc2VsZi5fY29tcGFjdDoKKyAgICAgICAgICAgICAgICByZXAgPSBzZWxmLl9yZXByKGVudCwgY29udGV4dCwgbGV2ZWwpCisgICAgICAgICAgICAgICAgdyA9IGxlbihyZXApICsgMgorICAgICAgICAgICAgICAgIGlmIHdpZHRoIDwgdzoKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtYXhfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVsaW06CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxpbSA9IGRlbGltbmwKKyAgICAgICAgICAgICAgICBpZiB3aWR0aCA+PSB3OgorICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGRlbGltKQorICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICcsICcKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd3JpdGUoZGVsaW0pCisgICAgICAgICAgICBkZWxpbSA9IGRlbGltbmwKKyAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKQorCiAgICAgZGVmIF9yZXByKHNlbGYsIG9iamVjdCwgY29udGV4dCwgbGV2ZWwpOgogICAgICAgICByZXByLCByZWFkYWJsZSwgcmVjdXJzaXZlID0gc2VsZi5mb3JtYXQob2JqZWN0LCBjb250ZXh0LmNvcHkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlcHRoLCBsZXZlbCkKQEAgLTI2Miw3ICszMTAsNyBAQAogIyBSZXR1cm4gdHJpcGxlIChyZXByX3N0cmluZywgaXNyZWFkYWJsZSwgaXNyZWN1cnNpdmUpLgogCiBkZWYgX3NhZmVfcmVwcihvYmplY3QsIGNvbnRleHQsIG1heGxldmVscywgbGV2ZWwpOgotICAgIHR5cCA9IF90eXBlKG9iamVjdCkKKyAgICB0eXAgPSB0eXBlKG9iamVjdCkKICAgICBpZiB0eXAgaXMgc3RyOgogICAgICAgICBpZiAnbG9jYWxlJyBub3QgaW4gX3N5cy5tb2R1bGVzOgogICAgICAgICAgICAgcmV0dXJuIHJlcHIob2JqZWN0KSwgVHJ1ZSwgRmFsc2UKQEAgLTI4Niw3ICszMzQsNyBAQAogICAgIGlmIGlzc3ViY2xhc3ModHlwLCBkaWN0KSBhbmQgciBpcyBkaWN0Ll9fcmVwcl9fOgogICAgICAgICBpZiBub3Qgb2JqZWN0OgogICAgICAgICAgICAgcmV0dXJuICJ7fSIsIFRydWUsIEZhbHNlCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG1heGxldmVscyBhbmQgbGV2ZWwgPj0gbWF4bGV2ZWxzOgogICAgICAgICAgICAgcmV0dXJuICJ7Li4ufSIsIEZhbHNlLCBvYmppZCBpbiBjb250ZXh0CiAgICAgICAgIGlmIG9iamlkIGluIGNvbnRleHQ6CkBAIC0zMDcsNyArMzU1LDcgQEAKICAgICAgICAgICAgIGlmIGtyZWN1ciBvciB2cmVjdXI6CiAgICAgICAgICAgICAgICAgcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KLSAgICAgICAgcmV0dXJuICJ7JXN9IiAlIF9jb21tYWpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKKyAgICAgICAgcmV0dXJuICJ7JXN9IiAlICIsICIuam9pbihjb21wb25lbnRzKSwgcmVhZGFibGUsIHJlY3Vyc2l2ZQogCiAgICAgaWYgKGlzc3ViY2xhc3ModHlwLCBsaXN0KSBhbmQgciBpcyBsaXN0Ll9fcmVwcl9fKSBvciBcCiAgICAgICAgKGlzc3ViY2xhc3ModHlwLCB0dXBsZSkgYW5kIHIgaXMgdHVwbGUuX19yZXByX18pOgpAQCAtMzE1LDEzICszNjMsMTMgQEAKICAgICAgICAgICAgIGlmIG5vdCBvYmplY3Q6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJbXSIsIFRydWUsIEZhbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSAiWyVzXSIKLSAgICAgICAgZWxpZiBfbGVuKG9iamVjdCkgPT0gMToKKyAgICAgICAgZWxpZiBsZW4ob2JqZWN0KSA9PSAxOgogICAgICAgICAgICAgZm9ybWF0ID0gIiglcywpIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbm90IG9iamVjdDoKICAgICAgICAgICAgICAgICByZXR1cm4gIigpIiwgVHJ1ZSwgRmFsc2UKICAgICAgICAgICAgIGZvcm1hdCA9ICIoJXMpIgotICAgICAgICBvYmppZCA9IF9pZChvYmplY3QpCisgICAgICAgIG9iamlkID0gaWQob2JqZWN0KQogICAgICAgICBpZiBtYXhsZXZlbHMgYW5kIGxldmVsID49IG1heGxldmVsczoKICAgICAgICAgICAgIHJldHVybiBmb3JtYXQgJSAiLi4uIiwgRmFsc2UsIG9iamlkIGluIGNvbnRleHQKICAgICAgICAgaWYgb2JqaWQgaW4gY29udGV4dDoKQEAgLTM0MCw3ICszODgsNyBAQAogICAgICAgICAgICAgaWYgb3JlY3VyOgogICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IFRydWUKICAgICAgICAgZGVsIGNvbnRleHRbb2JqaWRdCi0gICAgICAgIHJldHVybiBmb3JtYXQgJSBfY29tbWFqb2luKGNvbXBvbmVudHMpLCByZWFkYWJsZSwgcmVjdXJzaXZlCisgICAgICAgIHJldHVybiBmb3JtYXQgJSAiLCAiLmpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKIAogICAgIHJlcCA9IHJlcHIob2JqZWN0KQogICAgIHJldHVybiByZXAsIChyZXAgYW5kIG5vdCByZXAuc3RhcnRzd2l0aCgnPCcpKSwgRmFsc2UKQEAgLTM0OCw3ICszOTYsNyBAQAogCiBkZWYgX3JlY3Vyc2lvbihvYmplY3QpOgogICAgIHJldHVybiAoIjxSZWN1cnNpb24gb24gJXMgd2l0aCBpZD0lcz4iCi0gICAgICAgICAgICAlIChfdHlwZShvYmplY3QpLl9fbmFtZV9fLCBfaWQob2JqZWN0KSkpCisgICAgICAgICAgICAlICh0eXBlKG9iamVjdCkuX19uYW1lX18sIGlkKG9iamVjdCkpKQogCiAKIGRlZiBfcGVyZmNoZWNrKG9iamVjdD1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi9wcm9maWxlLnB5IGIvTGliL3Byb2ZpbGUucHkKaW5kZXggNzQzZTc3ZC4uNWQwZTk2OCAxMDA3NTUKLS0tIGEvTGliL3Byb2ZpbGUucHkKKysrIGIvTGliL3Byb2ZpbGUucHkKQEAgLTQwLDYgKzQwLDQwIEBACiAjICAgICAgIHJldHVybiBpX2NvdW50CiAjaXRpbWVzID0gaW50ZWdlcl90aW1lciAjIHJlcGxhY2Ugd2l0aCBDIGNvZGVkIHRpbWVyIHJldHVybmluZyBpbnRlZ2VycwogCitjbGFzcyBfVXRpbHM6CisgICAgIiIiU3VwcG9ydCBjbGFzcyBmb3IgdXRpbGl0eSBmdW5jdGlvbnMgd2hpY2ggYXJlIHNoYXJlZCBieQorICAgIHByb2ZpbGUucHkgYW5kIGNQcm9maWxlLnB5IG1vZHVsZXMuCisgICAgTm90IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvZmlsZXIpOgorICAgICAgICBzZWxmLnByb2ZpbGVyID0gcHJvZmlsZXIKKworICAgIGRlZiBydW4oc2VsZiwgc3RhdGVtZW50LCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIHByb2YgPSBzZWxmLnByb2ZpbGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZi5ydW4oc3RhdGVtZW50KQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3Nob3cocHJvZiwgZmlsZW5hbWUsIHNvcnQpCisKKyAgICBkZWYgcnVuY3R4KHNlbGYsIHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIHByb2YgPSBzZWxmLnByb2ZpbGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc2hvdyhwcm9mLCBmaWxlbmFtZSwgc29ydCkKKworICAgIGRlZiBfc2hvdyhzZWxmLCBwcm9mLCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvZi5wcmludF9zdGF0cyhzb3J0KQorCisKICMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIyBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgZm9yIHRoZSBwcm9maWxlciBjbGFzcwogIyBOb3RlIHRoYXQgYW4gaW5zdGFuY2Ugb2YgUHJvZmlsZSgpIGlzICpub3QqIG5lZWRlZCB0byBjYWxsIHRoZW0uCkBAIC01NiwxNSArOTAsNyBAQAogICAgIHN0YW5kYXJkIG5hbWUgc3RyaW5nIChmaWxlL2xpbmUvZnVuY3Rpb24tbmFtZSkgdGhhdCBpcyBwcmVzZW50ZWQgaW4KICAgICBlYWNoIGxpbmUuCiAgICAgIiIiCi0gICAgcHJvZiA9IFByb2ZpbGUoKQotICAgIHRyeToKLSAgICAgICAgcHJvZiA9IHByb2YucnVuKHN0YXRlbWVudCkKLSAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgcGFzcwotICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHByb2YucHJpbnRfc3RhdHMoc29ydCkKKyAgICByZXR1cm4gX1V0aWxzKFByb2ZpbGUpLnJ1bihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KQogCiBkZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKICAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyLCBzdXBwbHlpbmcgeW91ciBvd24gZ2xvYmFscyBhbmQgbG9jYWxzLApAQCAtNzIsMTYgKzk4LDggQEAKIAogICAgIHN0YXRlbWVudCBhbmQgZmlsZW5hbWUgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgcHJvZmlsZS5ydW4KICAgICAiIiIKLSAgICBwcm9mID0gUHJvZmlsZSgpCi0gICAgdHJ5OgotICAgICAgICBwcm9mID0gcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCi0gICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgIHBhc3MKKyAgICByZXR1cm4gX1V0aWxzKFByb2ZpbGUpLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywgZmlsZW5hbWUsIHNvcnQpCiAKLSAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBwcm9mLnByaW50X3N0YXRzKHNvcnQpCiAKIGNsYXNzIFByb2ZpbGU6CiAgICAgIiIiUHJvZmlsZXIgY2xhc3MuCkBAIC0zNzMsMTAgKzM5MSw5IEBACiAgICAgICAgICAgICAgICAgICBwcmludF9zdGF0cygpCiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlKToKLSAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3diJykKLSAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQotICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCiAKICAgICBkZWYgY3JlYXRlX3N0YXRzKHNlbGYpOgogICAgICAgICBzZWxmLnNpbXVsYXRlX2NtZF9jb21wbGV0ZSgpCmRpZmYgLS1naXQgYS9MaWIvcHN0YXRzLnB5IGIvTGliL3BzdGF0cy5weQppbmRleCA2YTc3NjA1Li5lMWVjMzU1IDEwMDY0NAotLS0gYS9MaWIvcHN0YXRzLnB5CisrKyBiL0xpYi9wc3RhdHMucHkKQEAgLTkzLDkgKzkzLDggQEAKICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSB7fQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhcmcsIHN0cik6Ci0gICAgICAgICAgICBmID0gb3BlbihhcmcsICdyYicpCi0gICAgICAgICAgICBzZWxmLnN0YXRzID0gbWFyc2hhbC5sb2FkKGYpCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihhcmcsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0cyA9IG1hcnNoYWwubG9hZChmKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZpbGVfc3RhdHMgPSBvcy5zdGF0KGFyZykKICAgICAgICAgICAgICAgICBhcmcgPSB0aW1lLmN0aW1lKGZpbGVfc3RhdHMuc3RfbXRpbWUpICsgIiAgICAiICsgYXJnCkBAIC0xNDksMTEgKzE0OCw4IEBACiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIldyaXRlIHRoZSBwcm9maWxlIGRhdGEgdG8gYSBmaWxlIHdlIGtub3cgaG93IHRvIGxvYWQgYmFjay4iIiIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICd3YicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICMgbGlzdCB0aGUgdHVwbGUgaW5kaWNlcyBhbmQgZGlyZWN0aW9ucyBmb3Igc29ydGluZywKICAgICAjIGFsb25nIHdpdGggc29tZSBwcmludGFibGUgZGVzY3JpcHRpb24KQEAgLTYxMiw3ICs2MDgsNyBAQAogICAgICAgICAgICAgaWYgbGluZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBTdGF0cyhsaW5lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KGVyci5hcmdzWzFdLCBmaWxlPXNlbGYuc3RyZWFtKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKZGlmZiAtLWdpdCBhL0xpYi9wdHkucHkgYi9MaWIvcHR5LnB5CmluZGV4IDNjY2Y2MTkuLmU4NDFmMTIgMTAwNjQ0Ci0tLSBhL0xpYi9wdHkucHkKKysrIGIvTGliL3B0eS5weQpAQCAtNDcsMjcgKzQ3LDE2IEBACiAgICAgcmV0dXJuIF9vcGVuX3Rlcm1pbmFsKCkKIAogZGVmIF9vcGVuX3Rlcm1pbmFsKCk6Ci0gICAgIiIiT3BlbiBwdHkgbWFzdGVyIGFuZCByZXR1cm4gKG1hc3Rlcl9mZCwgdHR5X25hbWUpLgotICAgIFNHSSBhbmQgZ2VuZXJpYyBCU0QgdmVyc2lvbiwgZm9yIHdoZW4gb3BlbnB0eSgpIGZhaWxzLiIiIgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IHNnaQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHR0eV9uYW1lLCBtYXN0ZXJfZmQgPSBzZ2kuX2dldHB0eShvcy5PX1JEV1IsIDBvNjY2LCAwKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICByYWlzZSBvcy5lcnJvcihtc2cpCi0gICAgICAgIHJldHVybiBtYXN0ZXJfZmQsIHR0eV9uYW1lCisgICAgIiIiT3BlbiBwdHkgbWFzdGVyIGFuZCByZXR1cm4gKG1hc3Rlcl9mZCwgdHR5X25hbWUpLiIiIgogICAgIGZvciB4IGluICdwcXJzdHV2d3h5elBRUlNUJzoKICAgICAgICAgZm9yIHkgaW4gJzAxMjM0NTY3ODlhYmNkZWYnOgogICAgICAgICAgICAgcHR5X25hbWUgPSAnL2Rldi9wdHknICsgeCArIHkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9zLm9wZW4ocHR5X25hbWUsIG9zLk9fUkRXUikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByZXR1cm4gKGZkLCAnL2Rldi90dHknICsgeCArIHkpCi0gICAgcmFpc2Ugb3MuZXJyb3IoJ291dCBvZiBwdHkgZGV2aWNlcycpCisgICAgcmFpc2UgT1NFcnJvcignb3V0IG9mIHB0eSBkZXZpY2VzJykKIAogZGVmIHNsYXZlX29wZW4odHR5X25hbWUpOgogICAgICIiInNsYXZlX29wZW4odHR5X25hbWUpIC0+IHNsYXZlX2ZkCkBAIC04Myw3ICs3Miw3IEBACiAgICAgdHJ5OgogICAgICAgICBpb2N0bChyZXN1bHQsIElfUFVTSCwgInB0ZW0iKQogICAgICAgICBpb2N0bChyZXN1bHQsIElfUFVTSCwgImxkdGVybSIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTE3Myw4ICsxNjIsOSBAQAogICAgICAgICByZXN0b3JlID0gMAogICAgIHRyeToKICAgICAgICAgX2NvcHkobWFzdGVyX2ZkLCBtYXN0ZXJfcmVhZCwgc3RkaW5fcmVhZCkKLSAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiByZXN0b3JlOgogICAgICAgICAgICAgdHR5LnRjc2V0YXR0cihTVERJTl9GSUxFTk8sIHR0eS5UQ1NBRkxVU0gsIG1vZGUpCiAKICAgICBvcy5jbG9zZShtYXN0ZXJfZmQpCisgICAgcmV0dXJuIG9zLndhaXRwaWQocGlkLCAwKVsxXQpkaWZmIC0tZ2l0IGEvTGliL3B5X2NvbXBpbGUucHkgYi9MaWIvcHlfY29tcGlsZS5weQppbmRleCA2MmQ2OWFkLi4xMjc3YjkzIDEwMDY0NAotLS0gYS9MaWIvcHlfY29tcGlsZS5weQorKysgYi9MaWIvcHlfY29tcGlsZS5weQpAQCAtMywxNyArMywxNCBAQAogVGhpcyBtb2R1bGUgaGFzIGludGltYXRlIGtub3dsZWRnZSBvZiB0aGUgZm9ybWF0IG9mIC5weWMgZmlsZXMuCiAiIiIKIAotaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKLWltcG9ydCBtYXJzaGFsCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKLWltcG9ydCB0b2tlbml6ZQogaW1wb3J0IHRyYWNlYmFjawogCi1NQUdJQyA9IGltcC5nZXRfbWFnaWMoKQotCiBfX2FsbF9fID0gWyJjb21waWxlIiwgIm1haW4iLCAiUHlDb21waWxlRXJyb3IiXQogCiAKQEAgLTY1LDEzICs2Miw2IEBACiAgICAgICAgIHJldHVybiBzZWxmLm1zZwogCiAKLWRlZiB3cl9sb25nKGYsIHgpOgotICAgICIiIkludGVybmFsOyB3cml0ZSBhIDMyLWJpdCBpbnQgdG8gYSBmaWxlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIuIiIiCi0gICAgZi53cml0ZShieXRlcyhbeCAgICAgICAgICYgMHhmZiwKLSAgICAgICAgICAgICAgICAgICAoeCA+PiA4KSAgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICh4ID4+IDE2KSAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgKHggPj4gMjQpICYgMHhmZl0pKQotCiBkZWYgY29tcGlsZShmaWxlLCBjZmlsZT1Ob25lLCBkZmlsZT1Ob25lLCBkb3JhaXNlPUZhbHNlLCBvcHRpbWl6ZT0tMSk6CiAgICAgIiIiQnl0ZS1jb21waWxlIG9uZSBQeXRob24gc291cmNlIGZpbGUgdG8gUHl0aG9uIGJ5dGVjb2RlLgogCkBAIC0xMDcsMTggKzk3LDMxIEBACiAgICAgU2VlIGNvbXBpbGVhbGwucHkgZm9yIGEgc2NyaXB0L21vZHVsZSB0aGF0IHVzZXMgdGhpcyBtb2R1bGUgdG8KICAgICBieXRlLWNvbXBpbGUgYWxsIGluc3RhbGxlZCBmaWxlcyAob3IgYWxsIGZpbGVzIGluIHNlbGVjdGVkCiAgICAgZGlyZWN0b3JpZXMpLgorCisgICAgRG8gbm90ZSB0aGF0IEZpbGVFeGlzdHNFcnJvciBpcyByYWlzZWQgaWYgY2ZpbGUgZW5kcyB1cCBwb2ludGluZyBhdCBhCisgICAgbm9uLXJlZ3VsYXIgZmlsZSBvciBzeW1saW5rLiBCZWNhdXNlIHRoZSBjb21waWxhdGlvbiB1c2VzIGEgZmlsZSByZW5hbWluZywKKyAgICB0aGUgcmVzdWx0aW5nIGZpbGUgd291bGQgYmUgcmVndWxhciBhbmQgdGh1cyBub3QgdGhlIHNhbWUgdHlwZSBvZiBmaWxlIGFzCisgICAgaXQgd2FzIHByZXZpb3VzbHkuCiAgICAgIiIiCi0gICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZpbGUpIGFzIGY6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0ID0gb3MuZnN0YXQoZi5maWxlbm8oKSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGUpCi0gICAgICAgIHRpbWVzdGFtcCA9IGludChzdC5zdF9tdGltZSkKLSAgICAgICAgc2l6ZSA9IHN0LnN0X3NpemUgJiAweEZGRkZGRkZGCi0gICAgICAgIGNvZGVzdHJpbmcgPSBmLnJlYWQoKQorICAgIGlmIGNmaWxlIGlzIE5vbmU6CisgICAgICAgIGlmIG9wdGltaXplID49IDA6CisgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKKyAgICBpZiBvcy5wYXRoLmlzbGluayhjZmlsZSk6CisgICAgICAgIG1zZyA9ICgne30gaXMgYSBzeW1saW5rIGFuZCB3aWxsIGJlIGNoYW5nZWQgaW50byBhIHJlZ3VsYXIgZmlsZSBpZiAnCisgICAgICAgICAgICAgICAnaW1wb3J0IHdyaXRlcyBhIGJ5dGUtY29tcGlsZWQgZmlsZSB0byBpdCcpCisgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcihtc2cuZm9ybWF0KGNmaWxlKSkKKyAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGNmaWxlKSBhbmQgbm90IG9zLnBhdGguaXNmaWxlKGNmaWxlKToKKyAgICAgICAgbXNnID0gKCd7fSBpcyBhIG5vbi1yZWd1bGFyIGZpbGUgYW5kIHdpbGwgYmUgY2hhbmdlZCBpbnRvIGEgcmVndWxhciAnCisgICAgICAgICAgICAgICAnb25lIGlmIGltcG9ydCB3cml0ZXMgYSBieXRlLWNvbXBpbGVkIGZpbGUgdG8gaXQnKQorICAgICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IobXNnLmZvcm1hdChjZmlsZSkpCisgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCc8cHlfY29tcGlsZT4nLCBmaWxlKQorICAgIHNvdXJjZV9ieXRlcyA9IGxvYWRlci5nZXRfZGF0YShmaWxlKQogICAgIHRyeToKLSAgICAgICAgY29kZW9iamVjdCA9IGJ1aWx0aW5zLmNvbXBpbGUoY29kZXN0cmluZywgZGZpbGUgb3IgZmlsZSwgJ2V4ZWMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZT1vcHRpbWl6ZSkKKyAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZShzb3VyY2VfYnl0ZXMsIGRmaWxlIG9yIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29wdGltaXplPW9wdGltaXplKQogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICBweV9leGMgPSBQeUNvbXBpbGVFcnJvcihlcnIuX19jbGFzc19fLCBlcnIsIGRmaWxlIG9yIGZpbGUpCiAgICAgICAgIGlmIGRvcmFpc2U6CkBAIC0xMjYsMjggKzEyOSwyMCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShweV9leGMubXNnICsgJ1xuJykKICAgICAgICAgICAgIHJldHVybgotICAgIGlmIGNmaWxlIGlzIE5vbmU6Ci0gICAgICAgIGlmIG9wdGltaXplID49IDA6Ci0gICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQogICAgIHRyeToKICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShjZmlsZSkKICAgICAgICAgaWYgZGlybmFtZToKICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0gICAgd2l0aCBvcGVuKGNmaWxlLCAnd2InKSBhcyBmYzoKLSAgICAgICAgZmMud3JpdGUoYidcMFwwXDBcMCcpCi0gICAgICAgIHdyX2xvbmcoZmMsIHRpbWVzdGFtcCkKLSAgICAgICAgd3JfbG9uZyhmYywgc2l6ZSkKLSAgICAgICAgbWFyc2hhbC5kdW1wKGNvZGVvYmplY3QsIGZjKQotICAgICAgICBmYy5mbHVzaCgpCi0gICAgICAgIGZjLnNlZWsoMCwgMCkKLSAgICAgICAgZmMud3JpdGUoTUFHSUMpCisgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgcGFzcworICAgIHNvdXJjZV9zdGF0cyA9IGxvYWRlci5wYXRoX3N0YXRzKGZpbGUpCisgICAgYnl0ZWNvZGUgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fY29kZV90b19ieXRlY29kZSgKKyAgICAgICAgICAgIGNvZGUsIHNvdXJjZV9zdGF0c1snbXRpbWUnXSwgc291cmNlX3N0YXRzWydzaXplJ10pCisgICAgbW9kZSA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9jYWxjX21vZGUoZmlsZSkKKyAgICBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fd3JpdGVfYXRvbWljKGNmaWxlLCBieXRlY29kZSwgbW9kZSkKICAgICByZXR1cm4gY2ZpbGUKIAorCiBkZWYgbWFpbihhcmdzPU5vbmUpOgogICAgICIiIkNvbXBpbGUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCiAKQEAgLTE3Myw3ICsxNjgsNyBAQAogICAgICAgICAgICAgZXhjZXB0IFB5Q29tcGlsZUVycm9yIGFzIGVycm9yOgogICAgICAgICAgICAgICAgIHJ2ID0gMQogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG4iICUgZXJyb3IubXNnKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKICAgICAgICAgICAgICAgICBydiA9IDEKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIGVycm9yKQogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvcHljbGJyLnB5IGIvTGliL3B5Y2xici5weQppbmRleCA5ZWMwNWVlLi5kZDU4YWRhIDEwMDY0NAotLS0gYS9MaWIvcHljbGJyLnB5CisrKyBiL0xpYi9weWNsYnIucHkKQEAgLTQyLDcgKzQyLDcgQEAKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCB0b2tlbml6ZQogZnJvbSB0b2tlbiBpbXBvcnQgTkFNRSwgREVERU5ULCBPUAogZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlcgpAQCAtMTQwLDEzICsxNDAsMTQgQEAKICAgICAgICAgc2VhcmNoX3BhdGggPSBwYXRoCiAgICAgZWxzZToKICAgICAgICAgc2VhcmNoX3BhdGggPSBwYXRoICsgc3lzLnBhdGgKLSAgICBsb2FkZXIgPSBpbXBvcnRsaWIuZmluZF9sb2FkZXIoZnVsbG1vZHVsZSwgc2VhcmNoX3BhdGgpCi0gICAgZm5hbWUgPSBsb2FkZXIuZ2V0X2ZpbGVuYW1lKGZ1bGxtb2R1bGUpCisgICAgIyBYWFggVGhpcyB3aWxsIGNoYW5nZSBvbmNlIGlzc3VlMTk5NDQgbGFuZHMuCisgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLl9maW5kX3NwZWNfZnJvbV9wYXRoKGZ1bGxtb2R1bGUsIHNlYXJjaF9wYXRoKQorICAgIGZuYW1lID0gc3BlYy5sb2FkZXIuZ2V0X2ZpbGVuYW1lKGZ1bGxtb2R1bGUpCiAgICAgX21vZHVsZXNbZnVsbG1vZHVsZV0gPSBkaWN0Ci0gICAgaWYgbG9hZGVyLmlzX3BhY2thZ2UoZnVsbG1vZHVsZSk6CisgICAgaWYgc3BlYy5sb2FkZXIuaXNfcGFja2FnZShmdWxsbW9kdWxlKToKICAgICAgICAgZGljdFsnX19wYXRoX18nXSA9IFtvcy5wYXRoLmRpcm5hbWUoZm5hbWUpXQogICAgIHRyeToKLSAgICAgICAgc291cmNlID0gbG9hZGVyLmdldF9zb3VyY2UoZnVsbG1vZHVsZSkKKyAgICAgICAgc291cmNlID0gc3BlYy5sb2FkZXIuZ2V0X3NvdXJjZShmdWxsbW9kdWxlKQogICAgICAgICBpZiBzb3VyY2UgaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBkaWN0CiAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgSW1wb3J0RXJyb3IpOgpkaWZmIC0tZ2l0IGEvTGliL3B5ZG9jLnB5IGIvTGliL3B5ZG9jLnB5CmluZGV4IDlkY2UwNzkuLmNmMTY0Y2MgMTAwNzU1Ci0tLSBhL0xpYi9weWRvYy5weQorKysgYi9MaWIvcHlkb2MucHkKQEAgLTQ0LDE2ICs0NCwxNiBAQAogIiIiCiAKICMgS25vd24gYnVncyB0aGF0IGNhbid0IGJlIGZpeGVkIGhlcmU6Ci0jICAgLSBpbXAubG9hZF9tb2R1bGUoKSBjYW5ub3QgYmUgcHJldmVudGVkIGZyb20gY2xvYmJlcmluZyBleGlzdGluZwotIyAgICAgbG9hZGVkIG1vZHVsZXMsIHNvIGNhbGxpbmcgc3lub3BzaXMoKSBvbiBhIGJpbmFyeSBtb2R1bGUgZmlsZQotIyAgICAgY2hhbmdlcyB0aGUgY29udGVudHMgb2YgYW55IGV4aXN0aW5nIG1vZHVsZSB3aXRoIHRoZSBzYW1lIG5hbWUuCisjICAgLSBzeW5vcHNpcygpIGNhbm5vdCBiZSBwcmV2ZW50ZWQgZnJvbSBjbG9iYmVyaW5nIGV4aXN0aW5nCisjICAgICBsb2FkZWQgbW9kdWxlcy4KICMgICAtIElmIHRoZSBfX2ZpbGVfXyBhdHRyaWJ1dGUgb24gYSBtb2R1bGUgaXMgYSByZWxhdGl2ZSBwYXRoIGFuZAogIyAgICAgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGNoYW5nZWQgd2l0aCBvcy5jaGRpcigpLCBhbiBpbmNvcnJlY3QKICMgICAgIHBhdGggd2lsbCBiZSBkaXNwbGF5ZWQuCiAKIGltcG9ydCBidWlsdGlucwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi5fYm9vdHN0cmFwCiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKQEAgLTE2Nyw4ICsxNjcsOSBAQAogZGVmIHZpc2libGVuYW1lKG5hbWUsIGFsbD1Ob25lLCBvYmo9Tm9uZSk6CiAgICAgIiIiRGVjaWRlIHdoZXRoZXIgdG8gc2hvdyBkb2N1bWVudGF0aW9uIG9uIGEgdmFyaWFibGUuIiIiCiAgICAgIyBDZXJ0YWluIHNwZWNpYWwgbmFtZXMgYXJlIHJlZHVuZGFudCBvciBpbnRlcm5hbC4KKyAgICAjIFhYWCBSZW1vdmUgX19pbml0aWFsaXppbmdfXz8KICAgICBpZiBuYW1lIGluIHsnX19hdXRob3JfXycsICdfX2J1aWx0aW5zX18nLCAnX19jYWNoZWRfXycsICdfX2NyZWRpdHNfXycsCi0gICAgICAgICAgICAgICAgJ19fZGF0ZV9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19pbml0aWFsaXppbmdfXycsCisgICAgICAgICAgICAgICAgJ19fZGF0ZV9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19zcGVjX18nLAogICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLAogICAgICAgICAgICAgICAgICdfX3BhdGhfXycsICdfX3F1YWxuYW1lX18nLCAnX19zbG90c19fJywgJ19fdmVyc2lvbl9fJ306CiAgICAgICAgIHJldHVybiAwCkBAIC0yMjQsMzQgKzIyNSwzOCBAQAogICAgIG10aW1lID0gb3Muc3RhdChmaWxlbmFtZSkuc3RfbXRpbWUKICAgICBsYXN0dXBkYXRlLCByZXN1bHQgPSBjYWNoZS5nZXQoZmlsZW5hbWUsIChOb25lLCBOb25lKSkKICAgICBpZiBsYXN0dXBkYXRlIGlzIE5vbmUgb3IgbGFzdHVwZGF0ZSA8IG10aW1lOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmaWxlID0gdG9rZW5pemUub3BlbihmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICAjIG1vZHVsZSBjYW4ndCBiZSBvcGVuZWQsIHNvIHNraXAgaXQKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGJpbmFyeV9zdWZmaXhlcyA9IGltcG9ydGxpYi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVNbOl0KLSAgICAgICAgYmluYXJ5X3N1ZmZpeGVzICs9IGltcG9ydGxpYi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTWzpdCi0gICAgICAgIGlmIGFueShmaWxlbmFtZS5lbmRzd2l0aCh4KSBmb3IgeCBpbiBiaW5hcnlfc3VmZml4ZXMpOgotICAgICAgICAgICAgIyBiaW5hcnkgbW9kdWxlcyBoYXZlIHRvIGJlIGltcG9ydGVkCi0gICAgICAgICAgICBmaWxlLmNsb3NlKCkKLSAgICAgICAgICAgIGlmIGFueShmaWxlbmFtZS5lbmRzd2l0aCh4KSBmb3IgeCBpbgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTKToKLSAgICAgICAgICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyKCdfX3RlbXBfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKCdfX3RlbXBfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKQorICAgICAgICAjIExvb2sgZm9yIGJpbmFyeSBzdWZmaXhlcyBmaXJzdCwgZmFsbGluZyBiYWNrIHRvIHNvdXJjZS4KKyAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgodHVwbGUoaW1wb3J0bGliLm1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUykpOgorICAgICAgICAgICAgbG9hZGVyX2NscyA9IGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIKKyAgICAgICAgZWxpZiBmaWxlbmFtZS5lbmRzd2l0aCh0dXBsZShpbXBvcnRsaWIubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpOgorICAgICAgICAgICAgbG9hZGVyX2NscyA9IGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9hZGVyX2NscyA9IE5vbmUKKyAgICAgICAgIyBOb3cgaGFuZGxlIHRoZSBjaG9pY2UuCisgICAgICAgIGlmIGxvYWRlcl9jbHMgaXMgTm9uZToKKyAgICAgICAgICAgICMgTXVzdCBiZSBhIHNvdXJjZSBmaWxlLgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX190ZW1wX18nKQorICAgICAgICAgICAgICAgIGZpbGUgPSB0b2tlbml6ZS5vcGVuKGZpbGVuYW1lKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBtb2R1bGUgY2FuJ3QgYmUgb3BlbmVkLCBzbyBza2lwIGl0CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICMgdGV4dCBtb2R1bGVzIGNhbiBiZSBkaXJlY3RseSBleGFtaW5lZAorICAgICAgICAgICAgd2l0aCBmaWxlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNvdXJjZV9zeW5vcHNpcyhmaWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBNdXN0IGJlIGEgYmluYXJ5IG1vZHVsZSwgd2hpY2ggaGFzIHRvIGJlIGltcG9ydGVkLgorICAgICAgICAgICAgbG9hZGVyID0gbG9hZGVyX2NscygnX190ZW1wX18nLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICMgWFhYIFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gcGFzcyBpbiB0aGUgbG9hZGVyIGhlcmUuCisgICAgICAgICAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oJ19fdGVtcF9fJywgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKKyAgICAgICAgICAgIF9zcGVjID0gaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gX3NwZWMubG9hZCgpCiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHJlc3VsdCA9IChtb2R1bGUuX19kb2NfXyBvciAnJykuc3BsaXRsaW5lcygpWzBdCiAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fdGVtcF9fJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgdGV4dCBtb2R1bGVzIGNhbiBiZSBkaXJlY3RseSBleGFtaW5lZAotICAgICAgICAgICAgcmVzdWx0ID0gc291cmNlX3N5bm9wc2lzKGZpbGUpCi0gICAgICAgICAgICBmaWxlLmNsb3NlKCkKLQorICAgICAgICAgICAgcmVzdWx0ID0gKG1vZHVsZS5fX2RvY19fIG9yICcnKS5zcGxpdGxpbmVzKClbMF0KKyAgICAgICAgIyBDYWNoZSB0aGUgcmVzdWx0LgogICAgICAgICBjYWNoZVtmaWxlbmFtZV0gPSAobXRpbWUsIHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTI2NywyMCArMjcyLDIyIEBACiAKIGRlZiBpbXBvcnRmaWxlKHBhdGgpOgogICAgICIiIkltcG9ydCBhIFB5dGhvbiBzb3VyY2UgZmlsZSBvciBjb21waWxlZCBmaWxlIGdpdmVuIGl0cyBwYXRoLiIiIgotICAgIG1hZ2ljID0gaW1wLmdldF9tYWdpYygpCisgICAgbWFnaWMgPSBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIKICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKLSAgICAgICAgaWYgZmlsZS5yZWFkKGxlbihtYWdpYykpID09IG1hZ2ljOgotICAgICAgICAgICAga2luZCA9IGltcC5QWV9DT01QSUxFRAotICAgICAgICBlbHNlOgotICAgICAgICAgICAga2luZCA9IGltcC5QWV9TT1VSQ0UKLSAgICAgICAgZmlsZS5zZWVrKDApCi0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQotICAgICAgICBuYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubG9hZF9tb2R1bGUobmFtZSwgZmlsZSwgcGF0aCwgKGV4dCwgJ3InLCBraW5kKSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmFpc2UgRXJyb3JEdXJpbmdJbXBvcnQocGF0aCwgc3lzLmV4Y19pbmZvKCkpCi0gICAgcmV0dXJuIG1vZHVsZQorICAgICAgICBpc19ieXRlY29kZSA9IG1hZ2ljID09IGZpbGUucmVhZChsZW4obWFnaWMpKQorICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQorICAgIG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCisgICAgaWYgaXNfYnl0ZWNvZGU6CisgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLlNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLl9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRoKQorICAgICMgWFhYIFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gcGFzcyBpbiB0aGUgbG9hZGVyIGhlcmUuCisgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIHBhdGgsIGxvYWRlcj1sb2FkZXIpCisgICAgX3NwZWMgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBfc3BlYy5sb2FkKCkKKyAgICBleGNlcHQ6CisgICAgICAgIHJhaXNlIEVycm9yRHVyaW5nSW1wb3J0KHBhdGgsIHN5cy5leGNfaW5mbygpKQogCiBkZWYgc2FmZWltcG9ydChwYXRoLCBmb3JjZWxvYWQ9MCwgY2FjaGU9e30pOgogICAgICIiIkltcG9ydCBhIG1vZHVsZTsgaGFuZGxlIGVycm9yczsgcmV0dXJuIE5vbmUgaWYgdGhlIG1vZHVsZSBpc24ndCBmb3VuZC4KQEAgLTkxNiwyMCArOTIzLDIxIEBACiAgICAgICAgICAgICAgICAgcmVhbGxpbmsgPSByZWFsbmFtZQogICAgICAgICAgICAgdGl0bGUgPSAnPGEgbmFtZT0iJXMiPjxzdHJvbmc+JXM8L3N0cm9uZz48L2E+ID0gJXMnICUgKAogICAgICAgICAgICAgICAgIGFuY2hvciwgbmFtZSwgcmVhbGxpbmspCi0gICAgICAgIGlmIGluc3BlY3QuaXNmdW5jdGlvbihvYmplY3QpOgotICAgICAgICAgICAgYXJncywgdmFyYXJncywga3dvbmx5YXJncywga3dkZWZhdWx0cywgdmFya3csIGRlZmF1bHRzLCBhbm4gPSBcCi0gICAgICAgICAgICAgICAgaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhvYmplY3QpCi0gICAgICAgICAgICBhcmdzcGVjID0gaW5zcGVjdC5mb3JtYXRhcmdzcGVjKAotICAgICAgICAgICAgICAgIGFyZ3MsIHZhcmFyZ3MsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIHZhcmt3LCBkZWZhdWx0cywgYW5uLAotICAgICAgICAgICAgICAgIGZvcm1hdHZhbHVlPXNlbGYuZm9ybWF0dmFsdWUsCi0gICAgICAgICAgICAgICAgZm9ybWF0YW5ub3RhdGlvbj1pbnNwZWN0LmZvcm1hdGFubm90YXRpb25yZWxhdGl2ZXRvKG9iamVjdCkpCi0gICAgICAgICAgICBpZiByZWFsbmFtZSA9PSAnPGxhbWJkYT4nOgotICAgICAgICAgICAgICAgIHRpdGxlID0gJzxzdHJvbmc+JXM8L3N0cm9uZz4gPGVtPmxhbWJkYTwvZW0+ICcgJSBuYW1lCi0gICAgICAgICAgICAgICAgIyBYWFggbGFtYmRhJ3Mgd29uJ3QgdXN1YWxseSBoYXZlIGZ1bmNfYW5ub3RhdGlvbnNbJ3JldHVybiddCi0gICAgICAgICAgICAgICAgIyBzaW5jZSB0aGUgc3ludGF4IGRvZXNuJ3Qgc3VwcG9ydCBidXQgaXQgaXMgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgIyBTbyByZW1vdmluZyBwYXJlbnRoZXNlcyBpc24ndCB0cnVseSBzYWZlLgotICAgICAgICAgICAgICAgIGFyZ3NwZWMgPSBhcmdzcGVjWzE6LTFdICMgcmVtb3ZlIHBhcmVudGhlc2VzCi0gICAgICAgIGVsc2U6CisgICAgICAgIGFyZ3NwZWMgPSBOb25lCisgICAgICAgIGlmIGluc3BlY3QuaXNmdW5jdGlvbihvYmplY3QpIG9yIGluc3BlY3QuaXNidWlsdGluKG9iamVjdCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUob2JqZWN0KQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNpZ25hdHVyZToKKyAgICAgICAgICAgICAgICBhcmdzcGVjID0gc3RyKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICAgICBpZiByZWFsbmFtZSA9PSAnPGxhbWJkYT4nOgorICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICc8c3Ryb25nPiVzPC9zdHJvbmc+IDxlbT5sYW1iZGE8L2VtPiAnICUgbmFtZQorICAgICAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KKyAgICAgICAgICAgICAgICAgICAgIyBzaW5jZSB0aGUgc3ludGF4IGRvZXNuJ3Qgc3VwcG9ydCBidXQgaXQgaXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgICMgU28gcmVtb3ZpbmcgcGFyZW50aGVzZXMgaXNuJ3QgdHJ1bHkgc2FmZS4KKyAgICAgICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKKyAgICAgICAgaWYgbm90IGFyZ3NwZWM6CiAgICAgICAgICAgICBhcmdzcGVjID0gJyguLi4pJwogCiAgICAgICAgIGRlY2wgPSB0aXRsZSArIGFyZ3NwZWMgKyAobm90ZSBhbmQgc2VsZi5ncmV5KApAQCAtMTIzNiw4ICsxMjQ0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IGdldGRvYyh2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgcHVzaChzZWxmLmRvY290aGVyKGdldGF0dHIob2JqZWN0LCBuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIG1vZCwgbWF4bGVuPTcwLCBkb2M9ZG9jKSArICdcbicpCisgICAgICAgICAgICAgICAgICAgIHB1c2goc2VsZi5kb2NvdGhlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIob2JqZWN0LCBuYW1lLCBOb25lKSBvciBob21lY2xzLl9fZGljdF9fW25hbWVdLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbW9kLCBtYXhsZW49NzAsIGRvYz1kb2MpICsgJ1xuJykKICAgICAgICAgICAgIHJldHVybiBhdHRycwogCiAgICAgICAgIGF0dHJzID0gWyhuYW1lLCBraW5kLCBjbHMsIHZhbHVlKQpAQCAtMTI1OSw3ICsxMjY4LDYgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdGFnID0gImluaGVyaXRlZCBmcm9tICVzIiAlIGNsYXNzbmFtZSh0aGlzY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX19tb2R1bGVfXykKLQogICAgICAgICAgICAgIyBTb3J0IGF0dHJzIGJ5IG5hbWUuCiAgICAgICAgICAgICBhdHRycy5zb3J0KCkKIApAQCAtMTI3NCw2ICsxMjgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgdDogdFsxXSA9PSAnZGF0YSBkZXNjcmlwdG9yJykKICAgICAgICAgICAgIGF0dHJzID0gc3BpbGxkYXRhKCJEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzICVzOlxuIiAlIHRhZywgYXR0cnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgdDogdFsxXSA9PSAnZGF0YScpCisKICAgICAgICAgICAgIGFzc2VydCBhdHRycyA9PSBbXQogICAgICAgICAgICAgYXR0cnMgPSBpbmhlcml0ZWQKIApAQCAtMTMxMiwyMCArMTMyMSwyMiBAQAogICAgICAgICAgICAgICAgIGNsLl9fZGljdF9fW3JlYWxuYW1lXSBpcyBvYmplY3QpOgogICAgICAgICAgICAgICAgIHNraXBkb2NzID0gMQogICAgICAgICAgICAgdGl0bGUgPSBzZWxmLmJvbGQobmFtZSkgKyAnID0gJyArIHJlYWxuYW1lCi0gICAgICAgIGlmIGluc3BlY3QuaXNmdW5jdGlvbihvYmplY3QpOgotICAgICAgICAgICAgYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCBhbm4gPSBcCi0gICAgICAgICAgICAgIGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWMob2JqZWN0KQotICAgICAgICAgICAgYXJnc3BlYyA9IGluc3BlY3QuZm9ybWF0YXJnc3BlYygKLSAgICAgICAgICAgICAgICBhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIGFubiwKLSAgICAgICAgICAgICAgICBmb3JtYXR2YWx1ZT1zZWxmLmZvcm1hdHZhbHVlLAotICAgICAgICAgICAgICAgIGZvcm1hdGFubm90YXRpb249aW5zcGVjdC5mb3JtYXRhbm5vdGF0aW9ucmVsYXRpdmV0byhvYmplY3QpKQotICAgICAgICAgICAgaWYgcmVhbG5hbWUgPT0gJzxsYW1iZGE+JzoKLSAgICAgICAgICAgICAgICB0aXRsZSA9IHNlbGYuYm9sZChuYW1lKSArICcgbGFtYmRhICcKLSAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KLSAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBzeW50YXggZG9lc24ndCBzdXBwb3J0IGJ1dCBpdCBpcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICAjIFNvIHJlbW92aW5nIHBhcmVudGhlc2VzIGlzbid0IHRydWx5IHNhZmUuCi0gICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKLSAgICAgICAgZWxzZToKKyAgICAgICAgYXJnc3BlYyA9IE5vbmUKKworICAgICAgICBpZiBpbnNwZWN0Lmlzcm91dGluZShvYmplY3QpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKG9iamVjdCkKKyAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBOb25lCisgICAgICAgICAgICBpZiBzaWduYXR1cmU6CisgICAgICAgICAgICAgICAgYXJnc3BlYyA9IHN0cihzaWduYXR1cmUpCisgICAgICAgICAgICAgICAgaWYgcmVhbG5hbWUgPT0gJzxsYW1iZGE+JzoKKyAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBzZWxmLmJvbGQobmFtZSkgKyAnIGxhbWJkYSAnCisgICAgICAgICAgICAgICAgICAgICMgWFhYIGxhbWJkYSdzIHdvbid0IHVzdWFsbHkgaGF2ZSBmdW5jX2Fubm90YXRpb25zWydyZXR1cm4nXQorICAgICAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBzeW50YXggZG9lc24ndCBzdXBwb3J0IGJ1dCBpdCBpcyBwb3NzaWJsZS4KKyAgICAgICAgICAgICAgICAgICAgIyBTbyByZW1vdmluZyBwYXJlbnRoZXNlcyBpc24ndCB0cnVseSBzYWZlLgorICAgICAgICAgICAgICAgICAgICBhcmdzcGVjID0gYXJnc3BlY1sxOi0xXSAjIHJlbW92ZSBwYXJlbnRoZXNlcworICAgICAgICBpZiBub3QgYXJnc3BlYzoKICAgICAgICAgICAgIGFyZ3NwZWMgPSAnKC4uLiknCiAgICAgICAgIGRlY2wgPSB0aXRsZSArIGFyZ3NwZWMgKyBub3RlCiAKQEAgLTEzOTYsNyArMTQwNyw3IEBACiAgICAgICAgICAgICByZXR1cm4gbGFtYmRhIHRleHQ6IHBpcGVwYWdlcih0ZXh0LCBvcy5lbnZpcm9uWydQQUdFUiddKQogICAgIGlmIG9zLmVudmlyb24uZ2V0KCdURVJNJykgaW4gKCdkdW1iJywgJ2VtYWNzJyk6CiAgICAgICAgIHJldHVybiBwbGFpbnBhZ2VyCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3Igc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ29zMicpOgorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICByZXR1cm4gbGFtYmRhIHRleHQ6IHRlbXBmaWxlcGFnZXIocGxhaW4odGV4dCksICdtb3JlIDwnKQogICAgIGlmIGhhc2F0dHIob3MsICdzeXN0ZW0nKSBhbmQgb3Muc3lzdGVtKCcobGVzcykgMj4vZGV2L251bGwnKSA9PSAwOgogICAgICAgICByZXR1cm4gbGFtYmRhIHRleHQ6IHBpcGVwYWdlcih0ZXh0LCAnbGVzcycpCkBAIC0xNDIyLDE2ICsxNDMzLDE1IEBACiAgICAgdHJ5OgogICAgICAgICBwaXBlLndyaXRlKHRleHQpCiAgICAgICAgIHBpcGUuY2xvc2UoKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzICMgSWdub3JlIGJyb2tlbiBwaXBlcyBjYXVzZWQgYnkgcXVpdHRpbmcgdGhlIHBhZ2VyIHByb2dyYW0uCiAKIGRlZiB0ZW1wZmlsZXBhZ2VyKHRleHQsIGNtZCk6CiAgICAgIiIiUGFnZSB0aHJvdWdoIHRleHQgYnkgaW52b2tpbmcgYSBwcm9ncmFtIG9uIGEgdGVtcG9yYXJ5IGZpbGUuIiIiCiAgICAgaW1wb3J0IHRlbXBmaWxlCiAgICAgZmlsZW5hbWUgPSB0ZW1wZmlsZS5ta3RlbXAoKQotICAgIGZpbGUgPSBvcGVuKGZpbGVuYW1lLCAndycpCi0gICAgZmlsZS53cml0ZSh0ZXh0KQotICAgIGZpbGUuY2xvc2UoKQorICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3cnKSBhcyBmaWxlOgorICAgICAgICBmaWxlLndyaXRlKHRleHQpCiAgICAgdHJ5OgogICAgICAgICBvcy5zeXN0ZW0oY21kICsgJyAiJyArIGZpbGVuYW1lICsgJyInKQogICAgIGZpbmFsbHk6CkBAIC0xODUwLDEwICsxODYwLDEwIEBACiBQeXRob24gcHJvZ3JhbXMgYW5kIHVzaW5nIFB5dGhvbiBtb2R1bGVzLiAgVG8gcXVpdCB0aGlzIGhlbHAgdXRpbGl0eSBhbmQKIHJldHVybiB0byB0aGUgaW50ZXJwcmV0ZXIsIGp1c3QgdHlwZSAicXVpdCIuCiAKLVRvIGdldCBhIGxpc3Qgb2YgYXZhaWxhYmxlIG1vZHVsZXMsIGtleXdvcmRzLCBvciB0b3BpY3MsIHR5cGUgIm1vZHVsZXMiLAotImtleXdvcmRzIiwgb3IgInRvcGljcyIuICBFYWNoIG1vZHVsZSBhbHNvIGNvbWVzIHdpdGggYSBvbmUtbGluZSBzdW1tYXJ5Ci1vZiB3aGF0IGl0IGRvZXM7IHRvIGxpc3QgdGhlIG1vZHVsZXMgd2hvc2Ugc3VtbWFyaWVzIGNvbnRhaW4gYSBnaXZlbiB3b3JkCi1zdWNoIGFzICJzcGFtIiwgdHlwZSAibW9kdWxlcyBzcGFtIi4KK1RvIGdldCBhIGxpc3Qgb2YgYXZhaWxhYmxlIG1vZHVsZXMsIGtleXdvcmRzLCBzeW1ib2xzLCBvciB0b3BpY3MsIHR5cGUKKyJtb2R1bGVzIiwgImtleXdvcmRzIiwgInN5bWJvbHMiLCBvciAidG9waWNzIi4gIEVhY2ggbW9kdWxlIGFsc28gY29tZXMKK3dpdGggYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHdoYXQgaXQgZG9lczsgdG8gbGlzdCB0aGUgbW9kdWxlcyB3aG9zZSBuYW1lCitvciBzdW1tYXJ5IGNvbnRhaW4gYSBnaXZlbiBzdHJpbmcgc3VjaCBhcyAic3BhbSIsIHR5cGUgIm1vZHVsZXMgc3BhbSIuCiAnJycgJSB0dXBsZShbc3lzLnZlcnNpb25bOjNdXSoyKSkKIAogICAgIGRlZiBsaXN0KHNlbGYsIGl0ZW1zLCBjb2x1bW5zPTQsIHdpZHRoPTgwKToKQEAgLTE5MTcsMTEgKzE5MjcsMTAgQEAKICAgICAgICAgaWYgbW9yZV94cmVmczoKICAgICAgICAgICAgIHhyZWZzID0gKHhyZWZzIG9yICcnKSArICcgJyArIG1vcmVfeHJlZnMKICAgICAgICAgaWYgeHJlZnM6Ci0gICAgICAgICAgICBpbXBvcnQgZm9ybWF0dGVyCi0gICAgICAgICAgICBidWZmZXIgPSBpby5TdHJpbmdJTygpCi0gICAgICAgICAgICBmb3JtYXR0ZXIuRHVtYldyaXRlcihidWZmZXIpLnNlbmRfZmxvd2luZ19kYXRhKAotICAgICAgICAgICAgICAgICdSZWxhdGVkIGhlbHAgdG9waWNzOiAnICsgJywgJy5qb2luKHhyZWZzLnNwbGl0KCkpICsgJ1xuJykKLSAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCdcbiVzXG4nICUgYnVmZmVyLmdldHZhbHVlKCkpCisgICAgICAgICAgICBpbXBvcnQgdGV4dHdyYXAKKyAgICAgICAgICAgIHRleHQgPSAnUmVsYXRlZCBoZWxwIHRvcGljczogJyArICcsICcuam9pbih4cmVmcy5zcGxpdCgpKSArICdcbicKKyAgICAgICAgICAgIHdyYXBwZWRfdGV4dCA9IHRleHR3cmFwLndyYXAodGV4dCwgNzIpCisgICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnXG4lc1xuJyAlICcnLmpvaW4od3JhcHBlZF90ZXh0KSkKIAogICAgIGRlZiBfZ2V0dG9waWMoc2VsZiwgdG9waWMsIG1vcmVfeHJlZnM9JycpOgogICAgICAgICAiIiJSZXR1cm4gdW5idWZmZXJlZCB0dXBsZSBvZiAodG9waWMsIHhyZWZzKS4KQEAgLTE5NTgsOSArMTk2NywxMCBAQAogICAgIGRlZiBsaXN0bW9kdWxlcyhzZWxmLCBrZXk9JycpOgogICAgICAgICBpZiBrZXk6CiAgICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnJycKLUhlcmUgaXMgYSBsaXN0IG9mIG1hdGNoaW5nIG1vZHVsZXMuICBFbnRlciBhbnkgbW9kdWxlIG5hbWUgdG8gZ2V0IG1vcmUgaGVscC4KK0hlcmUgaXMgYSBsaXN0IG9mIG1vZHVsZXMgd2hvc2UgbmFtZSBvciBzdW1tYXJ5IGNvbnRhaW5zICd7fScuCitJZiB0aGVyZSBhcmUgYW55LCBlbnRlciBhIG1vZHVsZSBuYW1lIHRvIGdldCBtb3JlIGhlbHAuCiAKLScnJykKKycnJy5mb3JtYXQoa2V5KSkKICAgICAgICAgICAgIGFwcm9wb3Moa2V5KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCkBAIC0xOTc5LDM1ICsxOTg5LDExIEBACiAgICAgICAgICAgICBzZWxmLmxpc3QobW9kdWxlcy5rZXlzKCkpCiAgICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnJycKIEVudGVyIGFueSBtb2R1bGUgbmFtZSB0byBnZXQgbW9yZSBoZWxwLiAgT3IsIHR5cGUgIm1vZHVsZXMgc3BhbSIgdG8gc2VhcmNoCi1mb3IgbW9kdWxlcyB3aG9zZSBkZXNjcmlwdGlvbnMgY29udGFpbiB0aGUgd29yZCAic3BhbSIuCitmb3IgbW9kdWxlcyB3aG9zZSBuYW1lIG9yIHN1bW1hcnkgY29udGFpbiB0aGUgc3RyaW5nICJzcGFtIi4KICcnJykKIAogaGVscCA9IEhlbHBlcigpCiAKLWNsYXNzIFNjYW5uZXI6Ci0gICAgIiIiQSBnZW5lcmljIHRyZWUgaXRlcmF0b3IuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3RzLCBjaGlsZHJlbiwgZGVzY2VuZHApOgotICAgICAgICBzZWxmLnJvb3RzID0gcm9vdHNbOl0KLSAgICAgICAgc2VsZi5zdGF0ZSA9IFtdCi0gICAgICAgIHNlbGYuY2hpbGRyZW4gPSBjaGlsZHJlbgotICAgICAgICBzZWxmLmRlc2NlbmRwID0gZGVzY2VuZHAKLQotICAgIGRlZiBuZXh0KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5zdGF0ZToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJvb3RzOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICByb290ID0gc2VsZi5yb290cy5wb3AoMCkKLSAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBbKHJvb3QsIHNlbGYuY2hpbGRyZW4ocm9vdCkpXQotICAgICAgICBub2RlLCBjaGlsZHJlbiA9IHNlbGYuc3RhdGVbLTFdCi0gICAgICAgIGlmIG5vdCBjaGlsZHJlbjoKLSAgICAgICAgICAgIHNlbGYuc3RhdGUucG9wKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoKQotICAgICAgICBjaGlsZCA9IGNoaWxkcmVuLnBvcCgwKQotICAgICAgICBpZiBzZWxmLmRlc2NlbmRwKGNoaWxkKToKLSAgICAgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKChjaGlsZCwgc2VsZi5jaGlsZHJlbihjaGlsZCkpKQotICAgICAgICByZXR1cm4gY2hpbGQKLQotCiBjbGFzcyBNb2R1bGVTY2FubmVyOgogICAgICIiIkFuIGludGVycnVwdGlibGUgc2Nhbm5lciB0aGF0IHNlYXJjaGVzIG1vZHVsZSBzeW5vcHNlcy4iIiIKIApAQCAtMjAzNiwxMCArMjAyMiwxMSBAQAogICAgICAgICAgICAgICAgIGNhbGxiYWNrKE5vbmUsIG1vZG5hbWUsICcnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IGltcG9ydGVyLmZpbmRfbW9kdWxlKG1vZG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBwa2d1dGlsLl9nZXRfc3BlYyhpbXBvcnRlciwgbW9kbmFtZSkKICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgcmFpc2VkIGJ5IHRlc3RzIGZvciBiYWQgY29kaW5nIGNvb2tpZXMgb3IgQk9NCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbG9hZGVyID0gc3BlYy5sb2FkZXIKICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ2dldF9zb3VyY2UnKToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gbG9hZGVyLmdldF9zb3VyY2UobW9kbmFtZSkKQEAgLTIwNTMsOCArMjA0MCw5IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gTm9uZQogICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIF9zcGVjID0gaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShtb2RuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gX3NwZWMubG9hZCgpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9uZXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihtb2RuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5IGIvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CmluZGV4IDRkZTVlYzMuLjkwNWM3YzggMTAwNjQ0Ci0tLSBhL0xpYi9weWRvY19kYXRhL3RvcGljcy5weQorKysgYi9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKQEAgLTEsNSArMSw1IEBACiAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQotIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiBTYXQgSmFuIDI1IDA5OjEzOjI1IDIwMTQKKyMgQXV0b2dlbmVyYXRlZCBieSBTcGhpbnggb24gTW9uIEZlYiAxMCAwNDoyMDowMyAyMDE0CiB0b3BpY3MgPSB7J2Fzc2VydCc6ICdcblRoZSAiYXNzZXJ0IiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuQXNzZXJ0IHN0YXRlbWVudHMgYXJlIGEgY29udmVuaWVudCB3YXkgdG8gaW5zZXJ0IGRlYnVnZ2luZyBhc3NlcnRpb25zXG5pbnRvIGEgcHJvZ3JhbTpcblxuICAgYXNzZXJ0X3N0bXQgOjo9ICJhc3NlcnQiIGV4cHJlc3Npb24gWyIsIiBleHByZXNzaW9uXVxuXG5UaGUgc2ltcGxlIGZvcm0sICJhc3NlcnQgZXhwcmVzc2lvbiIsIGlzIGVxdWl2YWxlbnQgdG9cblxuICAgaWYgX19kZWJ1Z19fOlxuICAgICAgaWYgbm90IGV4cHJlc3Npb246IHJhaXNlIEFzc2VydGlvbkVycm9yXG5cblRoZSBleHRlbmRlZCBmb3JtLCAiYXNzZXJ0IGV4cHJlc3Npb24xLCBleHByZXNzaW9uMiIsIGlzIGVxdWl2YWxlbnQgdG9cblxuICAgaWYgX19kZWJ1Z19fOlxuICAgICAgaWYgbm90IGV4cHJlc3Npb24xOiByYWlzZSBBc3NlcnRpb25FcnJvcihleHByZXNzaW9uMilcblxuVGhlc2UgZXF1aXZhbGVuY2VzIGFzc3VtZSB0aGF0ICJfX2RlYnVnX18iIGFuZCAiQXNzZXJ0aW9uRXJyb3IiIHJlZmVyXG50byB0aGUgYnVpbHQtaW4gdmFyaWFibGVzIHdpdGggdGhvc2UgbmFtZXMuICBJbiB0aGUgY3VycmVudFxuaW1wbGVtZW50YXRpb24sIHRoZSBidWlsdC1pbiB2YXJpYWJsZSAiX19kZWJ1Z19fIiBpcyAiVHJ1ZSIgdW5kZXJcbm5vcm1hbCBjaXJjdW1zdGFuY2VzLCAiRmFsc2UiIHdoZW4gb3B0aW1pemF0aW9uIGlzIHJlcXVlc3RlZCAoY29tbWFuZFxubGluZSBvcHRpb24gLU8pLiAgVGhlIGN1cnJlbnQgY29kZSBnZW5lcmF0b3IgZW1pdHMgbm8gY29kZSBmb3IgYW5cbmFzc2VydCBzdGF0ZW1lbnQgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIGF0IGNvbXBpbGUgdGltZS4gIE5vdGVcbnRoYXQgaXQgaXMgdW5uZWNlc3NhcnkgdG8gaW5jbHVkZSB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBleHByZXNzaW9uXG50aGF0IGZhaWxlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZTsgaXQgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgcGFydCBvZiB0aGVcbnN0YWNrIHRyYWNlLlxuXG5Bc3NpZ25tZW50cyB0byAiX19kZWJ1Z19fIiBhcmUgaWxsZWdhbC4gIFRoZSB2YWx1ZSBmb3IgdGhlIGJ1aWx0LWluXG52YXJpYWJsZSBpcyBkZXRlcm1pbmVkIHdoZW4gdGhlIGludGVycHJldGVyIHN0YXJ0cy5cbicsCiAgJ2Fzc2lnbm1lbnQnOiAnXG5Bc3NpZ25tZW50IHN0YXRlbWVudHNcbioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NpZ25tZW50IHN0YXRlbWVudHMgYXJlIHVzZWQgdG8gKHJlKWJpbmQgbmFtZXMgdG8gdmFsdWVzIGFuZCB0b1xubW9kaWZ5IGF0dHJpYnV0ZXMgb3IgaXRlbXMgb2YgbXV0YWJsZSBvYmplY3RzOlxuXG4gICBhc3NpZ25tZW50X3N0bXQgOjo9ICh0YXJnZXRfbGlzdCAiPSIpKyAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIHRhcmdldF9saXN0ICAgICA6Oj0gdGFyZ2V0ICgiLCIgdGFyZ2V0KSogWyIsIl1cbiAgIHRhcmdldCAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgICAgICAgICB8ICIoIiB0YXJnZXRfbGlzdCAiKSJcbiAgICAgICAgICAgICAgfCAiWyIgdGFyZ2V0X2xpc3QgIl0iXG4gICAgICAgICAgICAgIHwgYXR0cmlidXRlcmVmXG4gICAgICAgICAgICAgIHwgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAgIHwgc2xpY2luZ1xuICAgICAgICAgICAgICB8ICIqIiB0YXJnZXRcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciB0aGUgbGFzdCB0aHJlZVxuc3ltYm9scy4pXG5cbkFuIGFzc2lnbm1lbnQgc3RhdGVtZW50IGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBsaXN0IChyZW1lbWJlciB0aGF0XG50aGlzIGNhbiBiZSBhIHNpbmdsZSBleHByZXNzaW9uIG9yIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHRoZSBsYXR0ZXJcbnlpZWxkaW5nIGEgdHVwbGUpIGFuZCBhc3NpZ25zIHRoZSBzaW5nbGUgcmVzdWx0aW5nIG9iamVjdCB0byBlYWNoIG9mXG50aGUgdGFyZ2V0IGxpc3RzLCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cbkFzc2lnbm1lbnQgaXMgZGVmaW5lZCByZWN1cnNpdmVseSBkZXBlbmRpbmcgb24gdGhlIGZvcm0gb2YgdGhlIHRhcmdldFxuKGxpc3QpLiBXaGVuIGEgdGFyZ2V0IGlzIHBhcnQgb2YgYSBtdXRhYmxlIG9iamVjdCAoYW4gYXR0cmlidXRlXG5yZWZlcmVuY2UsIHN1YnNjcmlwdGlvbiBvciBzbGljaW5nKSwgdGhlIG11dGFibGUgb2JqZWN0IG11c3RcbnVsdGltYXRlbHkgcGVyZm9ybSB0aGUgYXNzaWdubWVudCBhbmQgZGVjaWRlIGFib3V0IGl0cyB2YWxpZGl0eSwgYW5kXG5tYXkgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBhc3NpZ25tZW50IGlzIHVuYWNjZXB0YWJsZS4gIFRoZSBydWxlc1xub2JzZXJ2ZWQgYnkgdmFyaW91cyB0eXBlcyBhbmQgdGhlIGV4Y2VwdGlvbnMgcmFpc2VkIGFyZSBnaXZlbiB3aXRoIHRoZVxuZGVmaW5pdGlvbiBvZiB0aGUgb2JqZWN0IHR5cGVzIChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGVcbmhpZXJhcmNoeSopLlxuXG5Bc3NpZ25tZW50IG9mIGFuIG9iamVjdCB0byBhIHRhcmdldCBsaXN0LCBvcHRpb25hbGx5IGVuY2xvc2VkIGluXG5wYXJlbnRoZXNlcyBvciBzcXVhcmUgYnJhY2tldHMsIGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgYXMgZm9sbG93cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGxpc3QgaXMgYSBzaW5nbGUgdGFyZ2V0OiBUaGUgb2JqZWN0IGlzIGFzc2lnbmVkIHRvXG4gIHRoYXQgdGFyZ2V0LlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRhcmdldHM6IFRoZVxuICBvYmplY3QgbXVzdCBiZSBhbiBpdGVyYWJsZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtcyBhcyB0aGVyZVxuICBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCB0aGUgaXRlbXMgYXJlIGFzc2lnbmVkLCBmcm9tXG4gIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbiAgKiBJZiB0aGUgdGFyZ2V0IGxpc3QgY29udGFpbnMgb25lIHRhcmdldCBwcmVmaXhlZCB3aXRoIGFuXG4gICAgYXN0ZXJpc2ssIGNhbGxlZCBhICJzdGFycmVkIiB0YXJnZXQ6IFRoZSBvYmplY3QgbXVzdCBiZSBhIHNlcXVlbmNlXG4gICAgd2l0aCBhdCBsZWFzdCBhcyBtYW55IGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXRcbiAgICBsaXN0LCBtaW51cyBvbmUuICBUaGUgZmlyc3QgaXRlbXMgb2YgdGhlIHNlcXVlbmNlIGFyZSBhc3NpZ25lZCxcbiAgICBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSB0YXJnZXRzIGJlZm9yZSB0aGUgc3RhcnJlZCB0YXJnZXQuICBUaGVcbiAgICBmaW5hbCBpdGVtcyBvZiB0aGUgc2VxdWVuY2UgYXJlIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXRzIGFmdGVyIHRoZVxuICAgIHN0YXJyZWQgdGFyZ2V0LiAgQSBsaXN0IG9mIHRoZSByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHNlcXVlbmNlIGlzXG4gICAgdGhlbiBhc3NpZ25lZCB0byB0aGUgc3RhcnJlZCB0YXJnZXQgKHRoZSBsaXN0IGNhbiBiZSBlbXB0eSkuXG5cbiAgKiBFbHNlOiBUaGUgb2JqZWN0IG11c3QgYmUgYSBzZXF1ZW5jZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgIGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIHRoZSBpdGVtcyBhcmVcbiAgICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG5Bc3NpZ25tZW50IG9mIGFuIG9iamVjdCB0byBhIHNpbmdsZSB0YXJnZXQgaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCBhc1xuZm9sbG93cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGFuIGlkZW50aWZpZXIgKG5hbWUpOlxuXG4gICogSWYgdGhlIG5hbWUgZG9lcyBub3Qgb2NjdXIgaW4gYSAiZ2xvYmFsIiBvciAibm9ubG9jYWwiIHN0YXRlbWVudFxuICAgIGluIHRoZSBjdXJyZW50IGNvZGUgYmxvY2s6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlXG4gICAgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UuXG5cbiAgKiBPdGhlcndpc2U6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlIGdsb2JhbFxuICAgIG5hbWVzcGFjZSBvciB0aGUgb3V0ZXIgbmFtZXNwYWNlIGRldGVybWluZWQgYnkgIm5vbmxvY2FsIixcbiAgICByZXNwZWN0aXZlbHkuXG5cbiAgVGhlIG5hbWUgaXMgcmVib3VuZCBpZiBpdCB3YXMgYWxyZWFkeSBib3VuZC4gIFRoaXMgbWF5IGNhdXNlIHRoZVxuICByZWZlcmVuY2UgY291bnQgZm9yIHRoZSBvYmplY3QgcHJldmlvdXNseSBib3VuZCB0byB0aGUgbmFtZSB0byByZWFjaFxuICB6ZXJvLCBjYXVzaW5nIHRoZSBvYmplY3QgdG8gYmUgZGVhbGxvY2F0ZWQgYW5kIGl0cyBkZXN0cnVjdG9yIChpZiBpdFxuICBoYXMgb25lKSB0byBiZSBjYWxsZWQuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHRhcmdldCBsaXN0IGVuY2xvc2VkIGluIHBhcmVudGhlc2VzIG9yIGluXG4gIHNxdWFyZSBicmFja2V0czogVGhlIG9iamVjdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyXG4gIG9mIGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIGl0cyBpdGVtcyBhcmVcbiAgYXNzaWduZWQsIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGFuIGF0dHJpYnV0ZSByZWZlcmVuY2U6IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW5cbiAgdGhlIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgYW4gb2JqZWN0IHdpdGhcbiAgYXNzaWduYWJsZSBhdHRyaWJ1dGVzOyBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgIlR5cGVFcnJvciIgaXNcbiAgcmFpc2VkLiAgVGhhdCBvYmplY3QgaXMgdGhlbiBhc2tlZCB0byBhc3NpZ24gdGhlIGFzc2lnbmVkIG9iamVjdCB0b1xuICB0aGUgZ2l2ZW4gYXR0cmlidXRlOyBpZiBpdCBjYW5ub3QgcGVyZm9ybSB0aGUgYXNzaWdubWVudCwgaXQgcmFpc2VzXG4gIGFuIGV4Y2VwdGlvbiAodXN1YWxseSBidXQgbm90IG5lY2Vzc2FyaWx5ICJBdHRyaWJ1dGVFcnJvciIpLlxuXG4gIE5vdGU6IElmIHRoZSBvYmplY3QgaXMgYSBjbGFzcyBpbnN0YW5jZSBhbmQgdGhlIGF0dHJpYnV0ZSByZWZlcmVuY2VcbiAgb2NjdXJzIG9uIGJvdGggc2lkZXMgb2YgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IsIHRoZSBSSFMgZXhwcmVzc2lvbixcbiAgImEueCIgY2FuIGFjY2VzcyBlaXRoZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG9yIChpZiBubyBpbnN0YW5jZVxuICBhdHRyaWJ1dGUgZXhpc3RzKSBhIGNsYXNzIGF0dHJpYnV0ZS4gIFRoZSBMSFMgdGFyZ2V0ICJhLngiIGlzIGFsd2F5c1xuICBzZXQgYXMgYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBjcmVhdGluZyBpdCBpZiBuZWNlc3NhcnkuICBUaHVzLCB0aGVcbiAgdHdvIG9jY3VycmVuY2VzIG9mICJhLngiIGRvIG5vdCBuZWNlc3NhcmlseSByZWZlciB0byB0aGUgc2FtZVxuICBhdHRyaWJ1dGU6IGlmIHRoZSBSSFMgZXhwcmVzc2lvbiByZWZlcnMgdG8gYSBjbGFzcyBhdHRyaWJ1dGUsIHRoZVxuICBMSFMgY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBhdHRyaWJ1dGUgYXMgdGhlIHRhcmdldCBvZiB0aGVcbiAgYXNzaWdubWVudDpcblxuICAgICBjbGFzcyBDbHM6XG4gICAgICAgICB4ID0gMyAgICAgICAgICAgICAjIGNsYXNzIHZhcmlhYmxlXG4gICAgIGluc3QgPSBDbHMoKVxuICAgICBpbnN0LnggPSBpbnN0LnggKyAxICAgIyB3cml0ZXMgaW5zdC54IGFzIDQgbGVhdmluZyBDbHMueCBhcyAzXG5cbiAgVGhpcyBkZXNjcmlwdGlvbiBkb2VzIG5vdCBuZWNlc3NhcmlseSBhcHBseSB0byBkZXNjcmlwdG9yXG4gIGF0dHJpYnV0ZXMsIHN1Y2ggYXMgcHJvcGVydGllcyBjcmVhdGVkIHdpdGggInByb3BlcnR5KCkiLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYSBzdWJzY3JpcHRpb246IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW4gdGhlXG4gIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgZWl0aGVyIGEgbXV0YWJsZSBzZXF1ZW5jZVxuICBvYmplY3QgKHN1Y2ggYXMgYSBsaXN0KSBvciBhIG1hcHBpbmcgb2JqZWN0IChzdWNoIGFzIGEgZGljdGlvbmFyeSkuXG4gIE5leHQsIHRoZSBzdWJzY3JpcHQgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQuXG5cbiAgSWYgdGhlIHByaW1hcnkgaXMgYSBtdXRhYmxlIHNlcXVlbmNlIG9iamVjdCAoc3VjaCBhcyBhIGxpc3QpLCB0aGVcbiAgc3Vic2NyaXB0IG11c3QgeWllbGQgYW4gaW50ZWdlci4gIElmIGl0IGlzIG5lZ2F0aXZlLCB0aGUgc2VxdWVuY2VcJ3NcbiAgbGVuZ3RoIGlzIGFkZGVkIHRvIGl0LiAgVGhlIHJlc3VsdGluZyB2YWx1ZSBtdXN0IGJlIGEgbm9ubmVnYXRpdmVcbiAgaW50ZWdlciBsZXNzIHRoYW4gdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCwgYW5kIHRoZSBzZXF1ZW5jZSBpcyBhc2tlZFxuICB0byBhc3NpZ24gdGhlIGFzc2lnbmVkIG9iamVjdCB0byBpdHMgaXRlbSB3aXRoIHRoYXQgaW5kZXguICBJZiB0aGVcbiAgaW5kZXggaXMgb3V0IG9mIHJhbmdlLCAiSW5kZXhFcnJvciIgaXMgcmFpc2VkIChhc3NpZ25tZW50IHRvIGFcbiAgc3Vic2NyaXB0ZWQgc2VxdWVuY2UgY2Fubm90IGFkZCBuZXcgaXRlbXMgdG8gYSBsaXN0KS5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcgb2JqZWN0IChzdWNoIGFzIGEgZGljdGlvbmFyeSksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCBoYXZlIGEgdHlwZSBjb21wYXRpYmxlIHdpdGggdGhlIG1hcHBpbmdcJ3Mga2V5IHR5cGUsXG4gIGFuZCB0aGUgbWFwcGluZyBpcyB0aGVuIGFza2VkIHRvIGNyZWF0ZSBhIGtleS9kYXR1bSBwYWlyIHdoaWNoIG1hcHNcbiAgdGhlIHN1YnNjcmlwdCB0byB0aGUgYXNzaWduZWQgb2JqZWN0LiAgVGhpcyBjYW4gZWl0aGVyIHJlcGxhY2UgYW5cbiAgZXhpc3Rpbmcga2V5L3ZhbHVlIHBhaXIgd2l0aCB0aGUgc2FtZSBrZXkgdmFsdWUsIG9yIGluc2VydCBhIG5ld1xuICBrZXkvdmFsdWUgcGFpciAoaWYgbm8ga2V5IHdpdGggdGhlIHNhbWUgdmFsdWUgZXhpc3RlZCkuXG5cbiAgRm9yIHVzZXItZGVmaW5lZCBvYmplY3RzLCB0aGUgIl9fc2V0aXRlbV9fKCkiIG1ldGhvZCBpcyBjYWxsZWQgd2l0aFxuICBhcHByb3ByaWF0ZSBhcmd1bWVudHMuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHNsaWNpbmc6IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW4gdGhlXG4gIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgYSBtdXRhYmxlIHNlcXVlbmNlIG9iamVjdFxuICAoc3VjaCBhcyBhIGxpc3QpLiAgVGhlIGFzc2lnbmVkIG9iamVjdCBzaG91bGQgYmUgYSBzZXF1ZW5jZSBvYmplY3RcbiAgb2YgdGhlIHNhbWUgdHlwZS4gIE5leHQsIHRoZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZXhwcmVzc2lvbnMgYXJlXG4gIGV2YWx1YXRlZCwgaW5zb2ZhciB0aGV5IGFyZSBwcmVzZW50OyBkZWZhdWx0cyBhcmUgemVybyBhbmQgdGhlXG4gIHNlcXVlbmNlXCdzIGxlbmd0aC4gIFRoZSBib3VuZHMgc2hvdWxkIGV2YWx1YXRlIHRvIGludGVnZXJzLiBJZlxuICBlaXRoZXIgYm91bmQgaXMgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGVcbiAgcmVzdWx0aW5nIGJvdW5kcyBhcmUgY2xpcHBlZCB0byBsaWUgYmV0d2VlbiB6ZXJvIGFuZCB0aGUgc2VxdWVuY2VcJ3NcbiAgbGVuZ3RoLCBpbmNsdXNpdmUuICBGaW5hbGx5LCB0aGUgc2VxdWVuY2Ugb2JqZWN0IGlzIGFza2VkIHRvIHJlcGxhY2VcbiAgdGhlIHNsaWNlIHdpdGggdGhlIGl0ZW1zIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZS4gIFRoZSBsZW5ndGggb2ZcbiAgdGhlIHNsaWNlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZSxcbiAgdGh1cyBjaGFuZ2luZyB0aGUgbGVuZ3RoIG9mIHRoZSB0YXJnZXQgc2VxdWVuY2UsIGlmIHRoZSBvYmplY3RcbiAgYWxsb3dzIGl0LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGVcbnN5bnRheCBmb3IgdGFyZ2V0cyBpcyB0YWtlbiB0byBiZSB0aGUgc2FtZSBhcyBmb3IgZXhwcmVzc2lvbnMsIGFuZFxuaW52YWxpZCBzeW50YXggaXMgcmVqZWN0ZWQgZHVyaW5nIHRoZSBjb2RlIGdlbmVyYXRpb24gcGhhc2UsIGNhdXNpbmdcbmxlc3MgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMuXG5cbldBUk5JTkc6IEFsdGhvdWdoIHRoZSBkZWZpbml0aW9uIG9mIGFzc2lnbm1lbnQgaW1wbGllcyB0aGF0IG92ZXJsYXBzXG5iZXR3ZWVuIHRoZSBsZWZ0LWhhbmQgc2lkZSBhbmQgdGhlIHJpZ2h0LWhhbmQgc2lkZSBhcmUgXCdzYWZlXCcgKGZvclxuZXhhbXBsZSAiYSwgYiA9IGIsIGEiIHN3YXBzIHR3byB2YXJpYWJsZXMpLCBvdmVybGFwcyAqd2l0aGluKiB0aGVcbmNvbGxlY3Rpb24gb2YgYXNzaWduZWQtdG8gdmFyaWFibGVzIGFyZSBub3Qgc2FmZSEgIEZvciBpbnN0YW5jZSwgdGhlXG5mb2xsb3dpbmcgcHJvZ3JhbSBwcmludHMgIlswLCAyXSI6XG5cbiAgIHggPSBbMCwgMV1cbiAgIGkgPSAwXG4gICBpLCB4W2ldID0gMSwgMlxuICAgcHJpbnQoeClcblxuU2VlIGFsc286ICoqUEVQIDMxMzIqKiAtIEV4dGVuZGVkIEl0ZXJhYmxlIFVucGFja2luZ1xuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgIip0YXJnZXQiIGZlYXR1cmUuXG5cblxuQXVnbWVudGVkIGFzc2lnbm1lbnQgc3RhdGVtZW50c1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgY29tYmluYXRpb24sIGluIGEgc2luZ2xlIHN0YXRlbWVudCwgb2YgYVxuYmluYXJ5IG9wZXJhdGlvbiBhbmQgYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQ6XG5cbiAgIGF1Z21lbnRlZF9hc3NpZ25tZW50X3N0bXQgOjo9IGF1Z3RhcmdldCBhdWdvcCAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIGF1Z3RhcmdldCAgICAgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXIgfCBhdHRyaWJ1dGVyZWYgfCBzdWJzY3JpcHRpb24gfCBzbGljaW5nXG4gICBhdWdvcCAgICAgICAgICAgICAgICAgICAgIDo6PSAiKz0iIHwgIi09IiB8ICIqPSIgfCAiLz0iIHwgIi8vPSIgfCAiJT0iIHwgIioqPSJcbiAgICAgICAgICAgICB8ICI+Pj0iIHwgIjw8PSIgfCAiJj0iIHwgIl49IiB8ICJ8PSJcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciB0aGUgbGFzdCB0aHJlZVxuc3ltYm9scy4pXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV2YWx1YXRlcyB0aGUgdGFyZ2V0ICh3aGljaCwgdW5saWtlIG5vcm1hbFxuYXNzaWdubWVudCBzdGF0ZW1lbnRzLCBjYW5ub3QgYmUgYW4gdW5wYWNraW5nKSBhbmQgdGhlIGV4cHJlc3Npb25cbmxpc3QsIHBlcmZvcm1zIHRoZSBiaW5hcnkgb3BlcmF0aW9uIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIGFzc2lnbm1lbnRcbm9uIHRoZSB0d28gb3BlcmFuZHMsIGFuZCBhc3NpZ25zIHRoZSByZXN1bHQgdG8gdGhlIG9yaWdpbmFsIHRhcmdldC5cblRoZSB0YXJnZXQgaXMgb25seSBldmFsdWF0ZWQgb25jZS5cblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBsaWtlICJ4ICs9IDEiIGNhbiBiZSByZXdyaXR0ZW4gYXNcbiJ4ID0geCArIDEiIHRvIGFjaGlldmUgYSBzaW1pbGFyLCBidXQgbm90IGV4YWN0bHkgZXF1YWwgZWZmZWN0LiBJbiB0aGVcbmF1Z21lbnRlZCB2ZXJzaW9uLCAieCIgaXMgb25seSBldmFsdWF0ZWQgb25jZS4gQWxzbywgd2hlbiBwb3NzaWJsZSxcbnRoZSBhY3R1YWwgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCAqaW4tcGxhY2UqLCBtZWFuaW5nIHRoYXQgcmF0aGVyIHRoYW5cbmNyZWF0aW5nIGEgbmV3IG9iamVjdCBhbmQgYXNzaWduaW5nIHRoYXQgdG8gdGhlIHRhcmdldCwgdGhlIG9sZCBvYmplY3RcbmlzIG1vZGlmaWVkIGluc3RlYWQuXG5cbldpdGggdGhlIGV4Y2VwdGlvbiBvZiBhc3NpZ25pbmcgdG8gdHVwbGVzIGFuZCBtdWx0aXBsZSB0YXJnZXRzIGluIGFcbnNpbmdsZSBzdGF0ZW1lbnQsIHRoZSBhc3NpZ25tZW50IGRvbmUgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnRcbnN0YXRlbWVudHMgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgbm9ybWFsIGFzc2lnbm1lbnRzLiBTaW1pbGFybHksXG53aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHBvc3NpYmxlICppbi1wbGFjZSogYmVoYXZpb3IsIHRoZSBiaW5hcnlcbm9wZXJhdGlvbiBwZXJmb3JtZWQgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbFxuYmluYXJ5IG9wZXJhdGlvbnMuXG5cbkZvciB0YXJnZXRzIHdoaWNoIGFyZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgdGhlIHNhbWUgKmNhdmVhdCBhYm91dFxuY2xhc3MgYW5kIGluc3RhbmNlIGF0dHJpYnV0ZXMqIGFwcGxpZXMgYXMgZm9yIHJlZ3VsYXIgYXNzaWdubWVudHMuXG4nLAogICdhdG9tLWlkZW50aWZpZXJzJzogJ1xuSWRlbnRpZmllcnMgKE5hbWVzKVxuKioqKioqKioqKioqKioqKioqKlxuXG5BbiBpZGVudGlmaWVyIG9jY3VycmluZyBhcyBhbiBhdG9tIGlzIGEgbmFtZS4gIFNlZSBzZWN0aW9uXG4qSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzKiBmb3IgbGV4aWNhbCBkZWZpbml0aW9uIGFuZCBzZWN0aW9uICpOYW1pbmdcbmFuZCBiaW5kaW5nKiBmb3IgZG9jdW1lbnRhdGlvbiBvZiBuYW1pbmcgYW5kIGJpbmRpbmcuXG5cbldoZW4gdGhlIG5hbWUgaXMgYm91bmQgdG8gYW4gb2JqZWN0LCBldmFsdWF0aW9uIG9mIHRoZSBhdG9tIHlpZWxkc1xudGhhdCBvYmplY3QuIFdoZW4gYSBuYW1lIGlzIG5vdCBib3VuZCwgYW4gYXR0ZW1wdCB0byBldmFsdWF0ZSBpdFxucmFpc2VzIGEgIk5hbWVFcnJvciIgZXhjZXB0aW9uLlxuXG4qKlByaXZhdGUgbmFtZSBtYW5nbGluZzoqKiBXaGVuIGFuIGlkZW50aWZpZXIgdGhhdCB0ZXh0dWFsbHkgb2NjdXJzIGluXG5hIGNsYXNzIGRlZmluaXRpb24gYmVnaW5zIHdpdGggdHdvIG9yIG1vcmUgdW5kZXJzY29yZSBjaGFyYWN0ZXJzIGFuZFxuZG9lcyBub3QgZW5kIGluIHR3byBvciBtb3JlIHVuZGVyc2NvcmVzLCBpdCBpcyBjb25zaWRlcmVkIGEgKnByaXZhdGVcbm5hbWUqIG9mIHRoYXQgY2xhc3MuIFByaXZhdGUgbmFtZXMgYXJlIHRyYW5zZm9ybWVkIHRvIGEgbG9uZ2VyIGZvcm1cbmJlZm9yZSBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgdGhlbS4gIFRoZSB0cmFuc2Zvcm1hdGlvbiBpbnNlcnRzIHRoZVxuY2xhc3MgbmFtZSwgd2l0aCBsZWFkaW5nIHVuZGVyc2NvcmVzIHJlbW92ZWQgYW5kIGEgc2luZ2xlIHVuZGVyc2NvcmVcbmluc2VydGVkLCBpbiBmcm9udCBvZiB0aGUgbmFtZS4gIEZvciBleGFtcGxlLCB0aGUgaWRlbnRpZmllciAiX19zcGFtIlxub2NjdXJyaW5nIGluIGEgY2xhc3MgbmFtZWQgIkhhbSIgd2lsbCBiZSB0cmFuc2Zvcm1lZCB0byAiX0hhbV9fc3BhbSIuXG5UaGlzIHRyYW5zZm9ybWF0aW9uIGlzIGluZGVwZW5kZW50IG9mIHRoZSBzeW50YWN0aWNhbCBjb250ZXh0IGluIHdoaWNoXG50aGUgaWRlbnRpZmllciBpcyB1c2VkLiAgSWYgdGhlIHRyYW5zZm9ybWVkIG5hbWUgaXMgZXh0cmVtZWx5IGxvbmdcbihsb25nZXIgdGhhbiAyNTUgY2hhcmFjdGVycyksIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHJ1bmNhdGlvbiBtYXlcbmhhcHBlbi4gSWYgdGhlIGNsYXNzIG5hbWUgY29uc2lzdHMgb25seSBvZiB1bmRlcnNjb3Jlcywgbm9cbnRyYW5zZm9ybWF0aW9uIGlzIGRvbmUuXG4nLApAQCAtMTksMTIgKzE5LDEyIEBACiAgJ2NhbGxzJzogJ1xuQ2FsbHNcbioqKioqXG5cbkEgY2FsbCBjYWxscyBhIGNhbGxhYmxlIG9iamVjdCAoZS5nLiwgYSAqZnVuY3Rpb24qKSB3aXRoIGEgcG9zc2libHlcbmVtcHR5IHNlcmllcyBvZiAqYXJndW1lbnRzKjpcblxuICAgY2FsbCAgICAgICAgICAgICAgICAgOjo9IHByaW1hcnkgIigiIFthcmd1bWVudF9saXN0IFsiLCJdIHwgY29tcHJlaGVuc2lvbl0gIikiXG4gICBhcmd1bWVudF9saXN0ICAgICAgICA6Oj0gcG9zaXRpb25hbF9hcmd1bWVudHMgWyIsIiBrZXl3b3JkX2FyZ3VtZW50c11cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiAiKiIgZXhwcmVzc2lvbl0gWyIsIiBrZXl3b3JkX2FyZ3VtZW50c11cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8IGtleXdvcmRfYXJndW1lbnRzIFsiLCIgIioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIga2V5d29yZF9hcmd1bWVudHNdIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCAiKiIgZXhwcmVzc2lvbiBbIiwiIGtleXdvcmRfYXJndW1lbnRzXSBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBleHByZXNzaW9uXG4gICBwb3NpdGlvbmFsX2FyZ3VtZW50cyA6Oj0gZXhwcmVzc2lvbiAoIiwiIGV4cHJlc3Npb24pKlxuICAga2V5d29yZF9hcmd1bWVudHMgICAgOjo9IGtleXdvcmRfaXRlbSAoIiwiIGtleXdvcmRfaXRlbSkqXG4gICBrZXl3b3JkX2l0ZW0gICAgICAgICA6Oj0gaWRlbnRpZmllciAiPSIgZXhwcmVzc2lvblxuXG5BIHRyYWlsaW5nIGNvbW1hIG1heSBiZSBwcmVzZW50IGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkXG5hcmd1bWVudHMgYnV0IGRvZXMgbm90IGFmZmVjdCB0aGUgc2VtYW50aWNzLlxuXG5UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGEgY2FsbGFibGUgb2JqZWN0ICh1c2VyLWRlZmluZWRcbmZ1bmN0aW9ucywgYnVpbHQtaW4gZnVuY3Rpb25zLCBtZXRob2RzIG9mIGJ1aWx0LWluIG9iamVjdHMsIGNsYXNzXG5vYmplY3RzLCBtZXRob2RzIG9mIGNsYXNzIGluc3RhbmNlcywgYW5kIGFsbCBvYmplY3RzIGhhdmluZyBhXG4iX19jYWxsX18oKSIgbWV0aG9kIGFyZSBjYWxsYWJsZSkuICBBbGwgYXJndW1lbnQgZXhwcmVzc2lvbnMgYXJlXG5ldmFsdWF0ZWQgYmVmb3JlIHRoZSBjYWxsIGlzIGF0dGVtcHRlZC4gIFBsZWFzZSByZWZlciB0byBzZWN0aW9uXG4qRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIGZvcm1hbCAqcGFyYW1ldGVyKiBsaXN0cy5cblxuSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIHByZXNlbnQsIHRoZXkgYXJlIGZpcnN0IGNvbnZlcnRlZCB0b1xucG9zaXRpb25hbCBhcmd1bWVudHMsIGFzIGZvbGxvd3MuICBGaXJzdCwgYSBsaXN0IG9mIHVuZmlsbGVkIHNsb3RzIGlzXG5jcmVhdGVkIGZvciB0aGUgZm9ybWFsIHBhcmFtZXRlcnMuICBJZiB0aGVyZSBhcmUgTiBwb3NpdGlvbmFsXG5hcmd1bWVudHMsIHRoZXkgYXJlIHBsYWNlZCBpbiB0aGUgZmlyc3QgTiBzbG90cy4gIE5leHQsIGZvciBlYWNoXG5rZXl3b3JkIGFyZ3VtZW50LCB0aGUgaWRlbnRpZmllciBpcyB1c2VkIHRvIGRldGVybWluZSB0aGVcbmNvcnJlc3BvbmRpbmcgc2xvdCAoaWYgdGhlIGlkZW50aWZpZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IGZvcm1hbFxucGFyYW1ldGVyIG5hbWUsIHRoZSBmaXJzdCBzbG90IGlzIHVzZWQsIGFuZCBzbyBvbikuICBJZiB0aGUgc2xvdCBpc1xuYWxyZWFkeSBmaWxsZWQsIGEgIlR5cGVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCB0aGVcbnZhbHVlIG9mIHRoZSBhcmd1bWVudCBpcyBwbGFjZWQgaW4gdGhlIHNsb3QsIGZpbGxpbmcgaXQgKGV2ZW4gaWYgdGhlXG5leHByZXNzaW9uIGlzICJOb25lIiwgaXQgZmlsbHMgdGhlIHNsb3QpLiAgV2hlbiBhbGwgYXJndW1lbnRzIGhhdmVcbmJlZW4gcHJvY2Vzc2VkLCB0aGUgc2xvdHMgdGhhdCBhcmUgc3RpbGwgdW5maWxsZWQgYXJlIGZpbGxlZCB3aXRoIHRoZVxuY29ycmVzcG9uZGluZyBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICAoRGVmYXVsdFxudmFsdWVzIGFyZSBjYWxjdWxhdGVkLCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkOyB0aHVzLCBhXG5tdXRhYmxlIG9iamVjdCBzdWNoIGFzIGEgbGlzdCBvciBkaWN0aW9uYXJ5IHVzZWQgYXMgZGVmYXVsdCB2YWx1ZSB3aWxsXG5iZSBzaGFyZWQgYnkgYWxsIGNhbGxzIHRoYXQgZG9uXCd0IHNwZWNpZnkgYW4gYXJndW1lbnQgdmFsdWUgZm9yIHRoZVxuY29ycmVzcG9uZGluZyBzbG90OyB0aGlzIHNob3VsZCB1c3VhbGx5IGJlIGF2b2lkZWQuKSAgSWYgdGhlcmUgYXJlIGFueVxudW5maWxsZWQgc2xvdHMgZm9yIHdoaWNoIG5vIGRlZmF1bHQgdmFsdWUgaXMgc3BlY2lmaWVkLCBhICJUeXBlRXJyb3IiXG5leGNlcHRpb24gaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCB0aGUgbGlzdCBvZiBmaWxsZWQgc2xvdHMgaXMgdXNlZCBhc1xudGhlIGFyZ3VtZW50IGxpc3QgZm9yIHRoZSBjYWxsLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEFuIGltcGxlbWVudGF0aW9uIG1heSBwcm92aWRlXG5idWlsdC1pbiBmdW5jdGlvbnMgd2hvc2UgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGRvIG5vdCBoYXZlIG5hbWVzLCBldmVuXG5pZiB0aGV5IGFyZSBcJ25hbWVkXCcgZm9yIHRoZSBwdXJwb3NlIG9mIGRvY3VtZW50YXRpb24sIGFuZCB3aGljaFxudGhlcmVmb3JlIGNhbm5vdCBiZSBzdXBwbGllZCBieSBrZXl3b3JkLiAgSW4gQ1B5dGhvbiwgdGhpcyBpcyB0aGUgY2FzZVxuZm9yIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBDIHRoYXQgdXNlICJQeUFyZ19QYXJzZVR1cGxlKCkiIHRvIHBhcnNlXG50aGVpciBhcmd1bWVudHMuXG5cbklmIHRoZXJlIGFyZSBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhlcmUgYXJlIGZvcm1hbCBwYXJhbWV0ZXJcbnNsb3RzLCBhICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggIippZGVudGlmaWVyIiBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXQgZm9ybWFsXG5wYXJhbWV0ZXIgcmVjZWl2ZXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHNcbihvciBhbiBlbXB0eSB0dXBsZSBpZiB0aGVyZSB3ZXJlIG5vIGV4Y2VzcyBwb3NpdGlvbmFsIGFyZ3VtZW50cykuXG5cbklmIGFueSBrZXl3b3JkIGFyZ3VtZW50IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBmb3JtYWwgcGFyYW1ldGVyXG5uYW1lLCBhICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggIioqaWRlbnRpZmllciIgaXMgcHJlc2VudDsgaW4gdGhpcyBjYXNlLCB0aGF0IGZvcm1hbFxucGFyYW1ldGVyIHJlY2VpdmVzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBleGNlc3Mga2V5d29yZFxuYXJndW1lbnRzICh1c2luZyB0aGUga2V5d29yZHMgYXMga2V5cyBhbmQgdGhlIGFyZ3VtZW50IHZhbHVlcyBhc1xuY29ycmVzcG9uZGluZyB2YWx1ZXMpLCBvciBhIChuZXcpIGVtcHR5IGRpY3Rpb25hcnkgaWYgdGhlcmUgd2VyZSBub1xuZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLlxuXG5JZiB0aGUgc3ludGF4ICIqZXhwcmVzc2lvbiIgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCwgImV4cHJlc3Npb24iXG5tdXN0IGV2YWx1YXRlIHRvIGFuIGl0ZXJhYmxlLiAgRWxlbWVudHMgZnJvbSB0aGlzIGl0ZXJhYmxlIGFyZSB0cmVhdGVkXG5hcyBpZiB0aGV5IHdlcmUgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50czsgaWYgdGhlcmUgYXJlXG5wb3NpdGlvbmFsIGFyZ3VtZW50cyAqeDEqLCAuLi4sICp4TiosIGFuZCAiZXhwcmVzc2lvbiIgZXZhbHVhdGVzIHRvIGFcbnNlcXVlbmNlICp5MSosIC4uLiwgKnlNKiwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgY2FsbCB3aXRoIE0rTlxucG9zaXRpb25hbCBhcmd1bWVudHMgKngxKiwgLi4uLCAqeE4qLCAqeTEqLCAuLi4sICp5TSouXG5cbkEgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IGFsdGhvdWdoIHRoZSAiKmV4cHJlc3Npb24iIHN5bnRheCBtYXlcbmFwcGVhciAqYWZ0ZXIqIHNvbWUga2V5d29yZCBhcmd1bWVudHMsIGl0IGlzIHByb2Nlc3NlZCAqYmVmb3JlKiB0aGVcbmtleXdvcmQgYXJndW1lbnRzIChhbmQgdGhlICIqKmV4cHJlc3Npb24iIGFyZ3VtZW50LCBpZiBhbnkgLS0gc2VlXG5iZWxvdykuICBTbzpcblxuICAgPj4+IGRlZiBmKGEsIGIpOlxuICAgLi4uICBwcmludChhLCBiKVxuICAgLi4uXG4gICA+Pj4gZihiPTEsICooMiwpKVxuICAgMiAxXG4gICA+Pj4gZihhPTEsICooMiwpKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50IFwnYVwnXG4gICA+Pj4gZigxLCAqKDIsKSlcbiAgIDEgMlxuXG5JdCBpcyB1bnVzdWFsIGZvciBib3RoIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGUgIipleHByZXNzaW9uIiBzeW50YXhcbnRvIGJlIHVzZWQgaW4gdGhlIHNhbWUgY2FsbCwgc28gaW4gcHJhY3RpY2UgdGhpcyBjb25mdXNpb24gZG9lcyBub3RcbmFyaXNlLlxuXG5JZiB0aGUgc3ludGF4ICIqKmV4cHJlc3Npb24iIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsXG4iZXhwcmVzc2lvbiIgbXVzdCBldmFsdWF0ZSB0byBhIG1hcHBpbmcsIHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmVcbnRyZWF0ZWQgYXMgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cy4gIEluIHRoZSBjYXNlIG9mIGEga2V5d29yZFxuYXBwZWFyaW5nIGluIGJvdGggImV4cHJlc3Npb24iIGFuZCBhcyBhbiBleHBsaWNpdCBrZXl3b3JkIGFyZ3VtZW50LCBhXG4iVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuXG5Gb3JtYWwgcGFyYW1ldGVycyB1c2luZyB0aGUgc3ludGF4ICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciJcbmNhbm5vdCBiZSB1c2VkIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgc2xvdHMgb3IgYXMga2V5d29yZCBhcmd1bWVudFxubmFtZXMuXG5cbkEgY2FsbCBhbHdheXMgcmV0dXJucyBzb21lIHZhbHVlLCBwb3NzaWJseSAiTm9uZSIsIHVubGVzcyBpdCByYWlzZXMgYW5cbmV4Y2VwdGlvbi4gIEhvdyB0aGlzIHZhbHVlIGlzIGNvbXB1dGVkIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgdGhlXG5jYWxsYWJsZSBvYmplY3QuXG5cbklmIGl0IGlzLS0tXG5cbmEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uOlxuICAgVGhlIGNvZGUgYmxvY2sgZm9yIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCwgcGFzc2luZyBpdCB0aGVcbiAgIGFyZ3VtZW50IGxpc3QuICBUaGUgZmlyc3QgdGhpbmcgdGhlIGNvZGUgYmxvY2sgd2lsbCBkbyBpcyBiaW5kIHRoZVxuICAgZm9ybWFsIHBhcmFtZXRlcnMgdG8gdGhlIGFyZ3VtZW50czsgdGhpcyBpcyBkZXNjcmliZWQgaW4gc2VjdGlvblxuICAgKkZ1bmN0aW9uIGRlZmluaXRpb25zKi4gIFdoZW4gdGhlIGNvZGUgYmxvY2sgZXhlY3V0ZXMgYSAicmV0dXJuIlxuICAgc3RhdGVtZW50LCB0aGlzIHNwZWNpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxsLlxuXG5hIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIG1ldGhvZDpcbiAgIFRoZSByZXN1bHQgaXMgdXAgdG8gdGhlIGludGVycHJldGVyOyBzZWUgKkJ1aWx0LWluIEZ1bmN0aW9ucyogZm9yXG4gICB0aGUgZGVzY3JpcHRpb25zIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcy5cblxuYSBjbGFzcyBvYmplY3Q6XG4gICBBIG5ldyBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIGlzIHJldHVybmVkLlxuXG5hIGNsYXNzIGluc3RhbmNlIG1ldGhvZDpcbiAgIFRoZSBjb3JyZXNwb25kaW5nIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdpdGggYW4gYXJndW1lbnRcbiAgIGxpc3QgdGhhdCBpcyBvbmUgbG9uZ2VyIHRoYW4gdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGNhbGw6IHRoZVxuICAgaW5zdGFuY2UgYmVjb21lcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cbmEgY2xhc3MgaW5zdGFuY2U6XG4gICBUaGUgY2xhc3MgbXVzdCBkZWZpbmUgYSAiX19jYWxsX18oKSIgbWV0aG9kOyB0aGUgZWZmZWN0IGlzIHRoZW4gdGhlXG4gICBzYW1lIGFzIGlmIHRoYXQgbWV0aG9kIHdhcyBjYWxsZWQuXG4nLAogICdjbGFzcyc6ICdcbkNsYXNzIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyAib2JqZWN0IjsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoICJzZWxmLm5hbWUgPSB2YWx1ZSIuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvbiAiInNlbGYubmFtZSIiLFxuYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWVcbndoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIGFzIGRlZmF1bHRzXG5mb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhbiBsZWFkIHRvXG51bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLVxuICBDbGFzcyBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzc1xuICAgIHRoZXJlIGlzIGEgImZpbmFsbHkiIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXJcbiAgICBleGNlcHRpb24uIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZlxuICAgIGFuIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgInJldHVybiIsICJjb250aW51ZSIsIG9yXG4gICAgImJyZWFrIiBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZVxuICAgIGZ1bmN0aW9uIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgIl9fZG9jX18iXG4gICAgYXR0cmlidXRlIGFuZCB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyAiX19kb2NfXyIgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKICAnY29tcGFyaXNvbnMnOiAnXG5Db21wYXJpc29uc1xuKioqKioqKioqKipcblxuVW5saWtlIEMsIGFsbCBjb21wYXJpc29uIG9wZXJhdGlvbnMgaW4gUHl0aG9uIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHksXG53aGljaCBpcyBsb3dlciB0aGFuIHRoYXQgb2YgYW55IGFyaXRobWV0aWMsIHNoaWZ0aW5nIG9yIGJpdHdpc2Vcbm9wZXJhdGlvbi4gIEFsc28gdW5saWtlIEMsIGV4cHJlc3Npb25zIGxpa2UgImEgPCBiIDwgYyIgaGF2ZSB0aGVcbmludGVycHJldGF0aW9uIHRoYXQgaXMgY29udmVudGlvbmFsIGluIG1hdGhlbWF0aWNzOlxuXG4gICBjb21wYXJpc29uICAgIDo6PSBvcl9leHByICggY29tcF9vcGVyYXRvciBvcl9leHByICkqXG4gICBjb21wX29wZXJhdG9yIDo6PSAiPCIgfCAiPiIgfCAiPT0iIHwgIj49IiB8ICI8PSIgfCAiIT0iXG4gICAgICAgICAgICAgICAgICAgICB8ICJpcyIgWyJub3QiXSB8IFsibm90Il0gImluIlxuXG5Db21wYXJpc29ucyB5aWVsZCBib29sZWFuIHZhbHVlczogIlRydWUiIG9yICJGYWxzZSIuXG5cbkNvbXBhcmlzb25zIGNhbiBiZSBjaGFpbmVkIGFyYml0cmFyaWx5LCBlLmcuLCAieCA8IHkgPD0geiIgaXNcbmVxdWl2YWxlbnQgdG8gInggPCB5IGFuZCB5IDw9IHoiLCBleGNlcHQgdGhhdCAieSIgaXMgZXZhbHVhdGVkIG9ubHlcbm9uY2UgKGJ1dCBpbiBib3RoIGNhc2VzICJ6IiBpcyBub3QgZXZhbHVhdGVkIGF0IGFsbCB3aGVuICJ4IDwgeSIgaXNcbmZvdW5kIHRvIGJlIGZhbHNlKS5cblxuRm9ybWFsbHksIGlmICphKiwgKmIqLCAqYyosIC4uLiwgKnkqLCAqeiogYXJlIGV4cHJlc3Npb25zIGFuZCAqb3AxKixcbipvcDIqLCAuLi4sICpvcE4qIGFyZSBjb21wYXJpc29uIG9wZXJhdG9ycywgdGhlbiAiYSBvcDEgYiBvcDIgYyAuLi4geVxub3BOIHoiIGlzIGVxdWl2YWxlbnQgdG8gImEgb3AxIGIgYW5kIGIgb3AyIGMgYW5kIC4uLiB5IG9wTiB6IiwgZXhjZXB0XG50aGF0IGVhY2ggZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgYXQgbW9zdCBvbmNlLlxuXG5Ob3RlIHRoYXQgImEgb3AxIGIgb3AyIGMiIGRvZXNuXCd0IGltcGx5IGFueSBraW5kIG9mIGNvbXBhcmlzb24gYmV0d2VlblxuKmEqIGFuZCAqYyosIHNvIHRoYXQsIGUuZy4sICJ4IDwgeSA+IHoiIGlzIHBlcmZlY3RseSBsZWdhbCAodGhvdWdoXG5wZXJoYXBzIG5vdCBwcmV0dHkpLlxuXG5UaGUgb3BlcmF0b3JzICI8IiwgIj4iLCAiPT0iLCAiPj0iLCAiPD0iLCBhbmQgIiE9IiBjb21wYXJlIHRoZSB2YWx1ZXNcbm9mIHR3byBvYmplY3RzLiAgVGhlIG9iamVjdHMgbmVlZCBub3QgaGF2ZSB0aGUgc2FtZSB0eXBlLiBJZiBib3RoIGFyZVxubnVtYmVycywgdGhleSBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBPdGhlcndpc2UsIHRoZSAiPT0iIGFuZFxuIiE9IiBvcGVyYXRvcnMgKmFsd2F5cyogY29uc2lkZXIgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdG8gYmVcbnVuZXF1YWwsIHdoaWxlIHRoZSAiPCIsICI+IiwgIj49IiBhbmQgIjw9IiBvcGVyYXRvcnMgcmFpc2UgYVxuIlR5cGVFcnJvciIgd2hlbiBjb21wYXJpbmcgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdGhhdCBkbyBub3RcbmltcGxlbWVudCB0aGVzZSBvcGVyYXRvcnMgZm9yIHRoZSBnaXZlbiBwYWlyIG9mIHR5cGVzLiAgWW91IGNhblxuY29udHJvbCBjb21wYXJpc29uIGJlaGF2aW9yIG9mIG9iamVjdHMgb2Ygbm9uLWJ1aWx0LWluIHR5cGVzIGJ5XG5kZWZpbmluZyByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBsaWtlICJfX2d0X18oKSIsIGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4qQmFzaWMgY3VzdG9taXphdGlvbiouXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGRlcGVuZHMgb24gdGhlIHR5cGU6XG5cbiogTnVtYmVycyBhcmUgY29tcGFyZWQgYXJpdGhtZXRpY2FsbHkuXG5cbiogVGhlIHZhbHVlcyAiZmxvYXQoXCdOYU5cJykiIGFuZCAiRGVjaW1hbChcJ05hTlwnKSIgYXJlIHNwZWNpYWwuIFRoZVxuICBhcmUgaWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMsICJ4IGlzIHgiIGJ1dCBhcmUgbm90IGVxdWFsIHRvXG4gIHRoZW1zZWx2ZXMsICJ4ICE9IHgiLiAgQWRkaXRpb25hbGx5LCBjb21wYXJpbmcgYW55IHZhbHVlIHRvIGFcbiAgbm90LWEtbnVtYmVyIHZhbHVlIHdpbGwgcmV0dXJuICJGYWxzZSIuICBGb3IgZXhhbXBsZSwgYm90aCAiMyA8XG4gIGZsb2F0KFwnTmFOXCcpIiBhbmQgImZsb2F0KFwnTmFOXCcpIDwgMyIgd2lsbCByZXR1cm4gIkZhbHNlIi5cblxuKiBCeXRlcyBvYmplY3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUgbnVtZXJpY1xuICB2YWx1ZXMgb2YgdGhlaXIgZWxlbWVudHMuXG5cbiogU3RyaW5ncyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWNcbiAgZXF1aXZhbGVudHMgKHRoZSByZXN1bHQgb2YgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJvcmQoKSIpIG9mIHRoZWlyXG4gIGNoYXJhY3RlcnMuIFszXSBTdHJpbmcgYW5kIGJ5dGVzIG9iamVjdCBjYW5cJ3QgYmUgY29tcGFyZWQhXG5cbiogVHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvblxuICBvZiBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGVhY2hcbiAgZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguXG5cbiAgSWYgbm90IGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGFzIHRoZWlyIGZpcnN0XG4gIGRpZmZlcmluZyBlbGVtZW50cy4gIEZvciBleGFtcGxlLCAiWzEsMix4XSA8PSBbMSwyLHldIiBoYXMgdGhlIHNhbWVcbiAgdmFsdWUgYXMgInggPD0geSIuICBJZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGRvZXMgbm90IGV4aXN0LCB0aGVcbiAgc2hvcnRlciBzZXF1ZW5jZSBpcyBvcmRlcmVkIGZpcnN0IChmb3IgZXhhbXBsZSwgIlsxLDJdIDwgWzEsMiwzXSIpLlxuXG4qIE1hcHBpbmdzIChkaWN0aW9uYXJpZXMpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZVxuICBzYW1lICIoa2V5LCB2YWx1ZSkiIHBhaXJzLiBPcmRlciBjb21wYXJpc29ucyAiKFwnPFwnLCBcJzw9XCcsIFwnPj1cJyxcbiAgXCc+XCcpIiByYWlzZSAiVHlwZUVycm9yIi5cblxuKiBTZXRzIGFuZCBmcm96ZW5zZXRzIGRlZmluZSBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmRcbiAgc3VwZXJzZXQgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8gbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKHRoZVxuICB0d28gc2V0cyAiezEsMn0iIGFuZCB7MiwzfSBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmVcbiAgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlcikuICBBY2NvcmRpbmdseSwgc2V0cyBhcmUgbm90XG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb25zIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZy5cbiAgRm9yIGV4YW1wbGUsICJtaW4oKSIsICJtYXgoKSIsIGFuZCAic29ydGVkKCkiIHByb2R1Y2UgdW5kZWZpbmVkXG4gIHJlc3VsdHMgZ2l2ZW4gYSBsaXN0IG9mIHNldHMgYXMgaW5wdXRzLlxuXG4qIE1vc3Qgb3RoZXIgb2JqZWN0cyBvZiBidWlsdC1pbiB0eXBlcyBjb21wYXJlIHVuZXF1YWwgdW5sZXNzIHRoZXlcbiAgYXJlIHRoZSBzYW1lIG9iamVjdDsgdGhlIGNob2ljZSB3aGV0aGVyIG9uZSBvYmplY3QgaXMgY29uc2lkZXJlZFxuICBzbWFsbGVyIG9yIGxhcmdlciB0aGFuIGFub3RoZXIgb25lIGlzIG1hZGUgYXJiaXRyYXJpbHkgYnV0XG4gIGNvbnNpc3RlbnRseSB3aXRoaW4gb25lIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0uXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgZGlmZmVyaW5nIHR5cGVzIGRlcGVuZHMgb24gd2hldGhlciBlaXRoZXJcbm9mIHRoZSB0eXBlcyBwcm92aWRlIGV4cGxpY2l0IHN1cHBvcnQgZm9yIHRoZSBjb21wYXJpc29uLiAgTW9zdFxubnVtZXJpYyB0eXBlcyBjYW4gYmUgY29tcGFyZWQgd2l0aCBvbmUgYW5vdGhlci4gIFdoZW4gY3Jvc3MtdHlwZVxuY29tcGFyaXNvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgY29tcGFyaXNvbiBtZXRob2QgcmV0dXJuc1xuIk5vdEltcGxlbWVudGVkIi5cblxuVGhlIG9wZXJhdG9ycyAiaW4iIGFuZCAibm90IGluIiB0ZXN0IGZvciBtZW1iZXJzaGlwLiAgInggaW4gcyJcbmV2YWx1YXRlcyB0byB0cnVlIGlmICp4KiBpcyBhIG1lbWJlciBvZiAqcyosIGFuZCBmYWxzZSBvdGhlcndpc2UuICAieFxubm90IGluIHMiIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mICJ4IGluIHMiLiAgQWxsIGJ1aWx0LWluIHNlcXVlbmNlc1xuYW5kIHNldCB0eXBlcyBzdXBwb3J0IHRoaXMgYXMgd2VsbCBhcyBkaWN0aW9uYXJ5LCBmb3Igd2hpY2ggImluIiB0ZXN0c1xud2hldGhlciBhIHRoZSBkaWN0aW9uYXJ5IGhhcyBhIGdpdmVuIGtleS4gRm9yIGNvbnRhaW5lciB0eXBlcyBzdWNoIGFzXG5saXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQsIGRpY3QsIG9yIGNvbGxlY3Rpb25zLmRlcXVlLCB0aGVcbmV4cHJlc3Npb24gInggaW4geSIgaXMgZXF1aXZhbGVudCB0byAiYW55KHggaXMgZSBvciB4ID09IGUgZm9yIGUgaW5cbnkpIi5cblxuRm9yIHRoZSBzdHJpbmcgYW5kIGJ5dGVzIHR5cGVzLCAieCBpbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBpc1xuYSBzdWJzdHJpbmcgb2YgKnkqLiAgQW4gZXF1aXZhbGVudCB0ZXN0IGlzICJ5LmZpbmQoeCkgIT0gLTEiLiAgRW1wdHlcbnN0cmluZ3MgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvIGJlIGEgc3Vic3RyaW5nIG9mIGFueSBvdGhlciBzdHJpbmcsXG5zbyAiIiIgaW4gImFiYyIiIHdpbGwgcmV0dXJuICJUcnVlIi5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgIl9fY29udGFpbnNfXygpIiBtZXRob2QsICJ4XG5pbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICJ5Ll9fY29udGFpbnNfXyh4KSIgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiBidXQgZG9cbmRlZmluZSAiX19pdGVyX18oKSIsICJ4IGluIHkiIGlzIHRydWUgaWYgc29tZSB2YWx1ZSAieiIgd2l0aCAieCA9PSB6IlxuaXMgcHJvZHVjZWQgd2hpbGUgaXRlcmF0aW5nIG92ZXIgInkiLiAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZFxuZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmICJpbiIgcmFpc2VkIHRoYXQgZXhjZXB0aW9uLlxuXG5MYXN0bHksIHRoZSBvbGQtc3R5bGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIHRyaWVkOiBpZiBhIGNsYXNzIGRlZmluZXNcbiJfX2dldGl0ZW1fXygpIiwgInggaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCAieCA9PSB5W2ldIiwgYW5kIGFsbCBsb3dlclxuaW50ZWdlciBpbmRpY2VzIGRvIG5vdCByYWlzZSAiSW5kZXhFcnJvciIgZXhjZXB0aW9uLiAgKElmIGFueSBvdGhlclxuZXhjZXB0aW9uIGlzIHJhaXNlZCwgaXQgaXMgYXMgaWYgImluIiByYWlzZWQgdGhhdCBleGNlcHRpb24pLlxuXG5UaGUgb3BlcmF0b3IgIm5vdCBpbiIgaXMgZGVmaW5lZCB0byBoYXZlIHRoZSBpbnZlcnNlIHRydWUgdmFsdWUgb2ZcbiJpbiIuXG5cblRoZSBvcGVyYXRvcnMgImlzIiBhbmQgImlzIG5vdCIgdGVzdCBmb3Igb2JqZWN0IGlkZW50aXR5OiAieCBpcyB5IiBpc1xudHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogYW5kICp5KiBhcmUgdGhlIHNhbWUgb2JqZWN0LiAgInggaXMgbm90IHkiXG55aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFs0XVxuJywKLSAnY29tcG91bmQnOiAnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgImlmIiwgIndoaWxlIiBhbmQgImZvciIgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWwgY29udHJvbFxuZmxvdyBjb25zdHJ1Y3RzLiAgInRyeSIgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cFxuY29kZSBmb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzLCB3aGlsZSB0aGUgIndpdGgiIHN0YXRlbWVudCBhbGxvd3MgdGhlXG5leGVjdXRpb24gb2YgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiBjb2RlIGFyb3VuZCBhIGJsb2NrIG9mXG5jb2RlLiAgRnVuY3Rpb24gYW5kIGNsYXNzIGRlZmluaXRpb25zIGFyZSBhbHNvIHN5bnRhY3RpY2FsbHkgY29tcG91bmRcbnN0YXRlbWVudHMuXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29uc2lzdCBvZiBvbmUgb3IgbW9yZSBcJ2NsYXVzZXMuXCcgIEEgY2xhdXNlXG5jb25zaXN0cyBvZiBhIGhlYWRlciBhbmQgYSBcJ3N1aXRlLlwnICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYVxucGFydGljdWxhciBjb21wb3VuZCBzdGF0ZW1lbnQgYXJlIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC5cbkVhY2ggY2xhdXNlIGhlYWRlciBiZWdpbnMgd2l0aCBhIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHNcbndpdGggYSBjb2xvbi4gIEEgc3VpdGUgaXMgYSBncm91cCBvZiBzdGF0ZW1lbnRzIGNvbnRyb2xsZWQgYnkgYVxuY2xhdXNlLiAgQSBzdWl0ZSBjYW4gYmUgb25lIG9yIG1vcmUgc2VtaWNvbG9uLXNlcGFyYXRlZCBzaW1wbGVcbnN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgaGVhZGVyLCBmb2xsb3dpbmcgdGhlIGhlYWRlclwnc1xuY29sb24sIG9yIGl0IGNhbiBiZSBvbmUgb3IgbW9yZSBpbmRlbnRlZCBzdGF0ZW1lbnRzIG9uIHN1YnNlcXVlbnRcbmxpbmVzLiAgT25seSB0aGUgbGF0dGVyIGZvcm0gb2Ygc3VpdGUgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbXBvdW5kXG5zdGF0ZW1lbnRzOyB0aGUgZm9sbG93aW5nIGlzIGlsbGVnYWwsIG1vc3RseSBiZWNhdXNlIGl0IHdvdWxkblwndCBiZVxuY2xlYXIgdG8gd2hpY2ggImlmIiBjbGF1c2UgYSBmb2xsb3dpbmcgImVsc2UiIGNsYXVzZSB3b3VsZCBiZWxvbmc6XG5cbiAgIGlmIHRlc3QxOiBpZiB0ZXN0MjogcHJpbnQoeClcblxuQWxzbyBub3RlIHRoYXQgdGhlIHNlbWljb2xvbiBiaW5kcyB0aWdodGVyIHRoYW4gdGhlIGNvbG9uIGluIHRoaXNcbmNvbnRleHQsIHNvIHRoYXQgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBlaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlXG4icHJpbnQoKSIgY2FsbHMgYXJlIGV4ZWN1dGVkOlxuXG4gICBpZiB4IDwgeSA8IHo6IHByaW50KHgpOyBwcmludCh5KTsgcHJpbnQoeilcblxuU3VtbWFyaXppbmc6XG5cbiAgIGNvbXBvdW5kX3N0bXQgOjo9IGlmX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2hpbGVfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmb3Jfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB0cnlfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aXRoX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZnVuY2RlZlxuICAgICAgICAgICAgICAgICAgICAgfCBjbGFzc2RlZlxuICAgc3VpdGUgICAgICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBORVdMSU5FIElOREVOVCBzdGF0ZW1lbnQrIERFREVOVFxuICAgc3RhdGVtZW50ICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBjb21wb3VuZF9zdG10XG4gICBzdG10X2xpc3QgICAgIDo6PSBzaW1wbGVfc3RtdCAoIjsiIHNpbXBsZV9zdG10KSogWyI7Il1cblxuTm90ZSB0aGF0IHN0YXRlbWVudHMgYWx3YXlzIGVuZCBpbiBhICJORVdMSU5FIiBwb3NzaWJseSBmb2xsb3dlZCBieSBhXG4iREVERU5UIi4gIEFsc28gbm90ZSB0aGF0IG9wdGlvbmFsIGNvbnRpbnVhdGlvbiBjbGF1c2VzIGFsd2F5cyBiZWdpblxud2l0aCBhIGtleXdvcmQgdGhhdCBjYW5ub3Qgc3RhcnQgYSBzdGF0ZW1lbnQsIHRodXMgdGhlcmUgYXJlIG5vXG5hbWJpZ3VpdGllcyAodGhlIFwnZGFuZ2xpbmcgImVsc2UiXCcgcHJvYmxlbSBpcyBzb2x2ZWQgaW4gUHl0aG9uIGJ5XG5yZXF1aXJpbmcgbmVzdGVkICJpZiIgc3RhdGVtZW50cyB0byBiZSBpbmRlbnRlZCkuXG5cblRoZSBmb3JtYXR0aW5nIG9mIHRoZSBncmFtbWFyIHJ1bGVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgcGxhY2VzXG5lYWNoIGNsYXVzZSBvbiBhIHNlcGFyYXRlIGxpbmUgZm9yIGNsYXJpdHkuXG5cblxuVGhlICJpZiIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT1cblxuVGhlICJpZiIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgImlmIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuXG5cblRoZSAid2hpbGUiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSAid2hpbGUiIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSAiYnJlYWsiIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlICJlbHNlIiBjbGF1c2VcJ3Mgc3VpdGUuICBBICJjb250aW51ZSIgc3RhdGVtZW50XG5leGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBnb2VzIGJhY2tcbnRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG5cblxuVGhlICJmb3IiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgImZvciIgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlXG4oc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbiJleHByZXNzaW9uX2xpc3QiLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiksXG50aGUgc3VpdGUgaW4gdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgY29udGludWVzXG53aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlICJlbHNlIiBjbGF1c2UgaWYgdGhlcmUgd2FzIG5vIG5leHRcbml0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAicmFuZ2UoKSIgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyAiZm9yIGlcbjo9IGEgdG8gYiBkbyI7IGUuZy4sICJsaXN0KHJhbmdlKDMpKSIgcmV0dXJucyB0aGUgbGlzdCAiWzAsIDEsIDJdIi5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGVcbiAgbG9vcCAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlICJ0cnkiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgInRyeSIgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSAiZXhjZXB0IiBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW4gbm9cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIHN1aXRlLCBhIHNlYXJjaCBmb3IgYW5cbmV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0IGNsYXVzZXNcbmluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW4gZXhwcmVzc2lvbi1cbmxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzIGFueVxuZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0IGV4cHJlc3Npb25cbmlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzIGNvbXBhdGlibGVcbndpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlIGV4Y2VwdGlvblxub2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlICJ0cnkiIHN0YXRlbWVudCByYWlzZWRcbnRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlICJhcyIga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsIGlmXG5wcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nICJhcyB0YXJnZXQiLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSAic3lzIiBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhXG4ic3lzLmV4Y19pbmZvKCkiLiAic3lzLmV4Y19pbmZvKCkiIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlXG5leGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlXG5wcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICAic3lzLmV4Y19pbmZvKCkiIHZhbHVlcyBhcmVcbnJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCAiZWxzZSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSAidHJ5IiBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSAiZWxzZSIgY2xhdXNlIGFyZVxubm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyAiZXhjZXB0IiBjbGF1c2VzLlxuXG5JZiAiZmluYWxseSIgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZSAidHJ5IlxuY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55ICJleGNlcHQiIGFuZCAiZWxzZSIgY2xhdXNlcy4gIElmIGFuXG5leGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90IGhhbmRsZWQsIHRoZVxuZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZC4gIElmXG50aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UuICBJZiB0aGUgImZpbmFsbHkiIGNsYXVzZSByYWlzZXMgYW5vdGhlciBleGNlcHRpb24sIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGV4Y2VwdGlvbi4gSWYgdGhlICJmaW5hbGx5IlxuY2xhdXNlIGV4ZWN1dGVzIGEgInJldHVybiIgb3IgImJyZWFrIiBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb25cbmlzIGRpc2NhcmRlZDpcblxuICAgZGVmIGYoKTpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIDEvMFxuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIHJldHVybiA0MlxuXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlICJmaW5hbGx5IiBjbGF1c2UuXG5cbldoZW4gYSAicmV0dXJuIiwgImJyZWFrIiBvciAiY29udGludWUiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpbiB0aGVcbiJ0cnkiIHN1aXRlIG9mIGEgInRyeSIuLi4iZmluYWxseSIgc3RhdGVtZW50LCB0aGUgImZpbmFsbHkiIGNsYXVzZSBpc1xuYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnQgaXMgaWxsZWdhbCBpblxudGhlICJmaW5hbGx5IiBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSAicmFpc2UiIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cblxuVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSAid2l0aCIgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uICJ0cnkiLi4uImV4Y2VwdCIuLi4iZmluYWxseSJcbnVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZCBmb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSAid2l0aCIgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlICJ3aXRoX2l0ZW0iKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZW50ZXJfXygpIiBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSAid2l0aCIgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tICJfX2VudGVyX18oKSIgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSAid2l0aCIgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgIl9fZW50ZXJfXygpIlxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuICJfX2V4aXRfXygpIiB3aWxsIGFsd2F5cyBiZVxuICAgICBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvICJfX2V4aXRfXygpIi4gT3RoZXJ3aXNlLCB0aHJlZVxuICAgIk5vbmUiIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSAiX19leGl0X18oKSIgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyByZXJhaXNlZC5cbiAgIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgYW5kXG4gICBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlICJ3aXRoIlxuICAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSAiX19leGl0X18oKSIgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlICJ3aXRoIiBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuXG5cbkZ1bmN0aW9uIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PT09PVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiAiPSJcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICIiKiIiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS0gdGhpc1xuaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25cbmlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlblxudGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzXG51c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhXG5kZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6XG5pZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhXG5saXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLiBUaGlzIGlzIGdlbmVyYWxseSBub3RcbndoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlICJOb25lIiBhcyB0aGUgZGVmYXVsdCxcbmFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iIippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmcgYW55XG5leGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmIHRoZVxuZm9ybSAiIioqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICIiKiIiIG9yICIiKmlkZW50aWZpZXIiIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiIjogZXhwcmVzc2lvbiIiIGZvbGxvd2luZ1xudGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uIGV2ZW4gdGhvc2Vcbm9mIHRoZSBmb3JtICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciIuICBGdW5jdGlvbnMgbWF5IGhhdmVcbiJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gIiItPiBleHByZXNzaW9uIiIgYWZ0ZXIgdGhlIHBhcmFtZXRlclxubGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gYW5kIGFyZVxuZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuICBBbm5vdGF0aW9ucyBtYXlcbmJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS5cblRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiBhXG5mdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzIHZhbHVlcyBvZiBhXG5kaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlICJfX2Fubm90YXRpb25zX18iXG5hdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICIiZGVmIiIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiImRlZiIiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgIiJkZWYiIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286ICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG5cbiAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuXG5cbkNsYXNzIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PVxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyAib2JqZWN0IjsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoICJzZWxmLm5hbWUgPSB2YWx1ZSIuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvbiAiInNlbGYubmFtZSIiLFxuYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWVcbndoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIGFzIGRlZmF1bHRzXG5mb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhbiBsZWFkIHRvXG51bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLVxuICBDbGFzcyBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzc1xuICAgIHRoZXJlIGlzIGEgImZpbmFsbHkiIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXJcbiAgICBleGNlcHRpb24uIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZlxuICAgIGFuIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgInJldHVybiIsICJjb250aW51ZSIsIG9yXG4gICAgImJyZWFrIiBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZVxuICAgIGZ1bmN0aW9uIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgIl9fZG9jX18iXG4gICAgYXR0cmlidXRlIGFuZCB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyAiX19kb2NfXyIgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKKyAnY29tcG91bmQnOiAnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgImlmIiwgIndoaWxlIiBhbmQgImZvciIgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWwgY29udHJvbFxuZmxvdyBjb25zdHJ1Y3RzLiAgInRyeSIgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cFxuY29kZSBmb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzLCB3aGlsZSB0aGUgIndpdGgiIHN0YXRlbWVudCBhbGxvd3MgdGhlXG5leGVjdXRpb24gb2YgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiBjb2RlIGFyb3VuZCBhIGJsb2NrIG9mXG5jb2RlLiAgRnVuY3Rpb24gYW5kIGNsYXNzIGRlZmluaXRpb25zIGFyZSBhbHNvIHN5bnRhY3RpY2FsbHkgY29tcG91bmRcbnN0YXRlbWVudHMuXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29uc2lzdCBvZiBvbmUgb3IgbW9yZSBcJ2NsYXVzZXMuXCcgIEEgY2xhdXNlXG5jb25zaXN0cyBvZiBhIGhlYWRlciBhbmQgYSBcJ3N1aXRlLlwnICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYVxucGFydGljdWxhciBjb21wb3VuZCBzdGF0ZW1lbnQgYXJlIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC5cbkVhY2ggY2xhdXNlIGhlYWRlciBiZWdpbnMgd2l0aCBhIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHNcbndpdGggYSBjb2xvbi4gIEEgc3VpdGUgaXMgYSBncm91cCBvZiBzdGF0ZW1lbnRzIGNvbnRyb2xsZWQgYnkgYVxuY2xhdXNlLiAgQSBzdWl0ZSBjYW4gYmUgb25lIG9yIG1vcmUgc2VtaWNvbG9uLXNlcGFyYXRlZCBzaW1wbGVcbnN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgaGVhZGVyLCBmb2xsb3dpbmcgdGhlIGhlYWRlclwnc1xuY29sb24sIG9yIGl0IGNhbiBiZSBvbmUgb3IgbW9yZSBpbmRlbnRlZCBzdGF0ZW1lbnRzIG9uIHN1YnNlcXVlbnRcbmxpbmVzLiAgT25seSB0aGUgbGF0dGVyIGZvcm0gb2Ygc3VpdGUgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbXBvdW5kXG5zdGF0ZW1lbnRzOyB0aGUgZm9sbG93aW5nIGlzIGlsbGVnYWwsIG1vc3RseSBiZWNhdXNlIGl0IHdvdWxkblwndCBiZVxuY2xlYXIgdG8gd2hpY2ggImlmIiBjbGF1c2UgYSBmb2xsb3dpbmcgImVsc2UiIGNsYXVzZSB3b3VsZCBiZWxvbmc6XG5cbiAgIGlmIHRlc3QxOiBpZiB0ZXN0MjogcHJpbnQoeClcblxuQWxzbyBub3RlIHRoYXQgdGhlIHNlbWljb2xvbiBiaW5kcyB0aWdodGVyIHRoYW4gdGhlIGNvbG9uIGluIHRoaXNcbmNvbnRleHQsIHNvIHRoYXQgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBlaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlXG4icHJpbnQoKSIgY2FsbHMgYXJlIGV4ZWN1dGVkOlxuXG4gICBpZiB4IDwgeSA8IHo6IHByaW50KHgpOyBwcmludCh5KTsgcHJpbnQoeilcblxuU3VtbWFyaXppbmc6XG5cbiAgIGNvbXBvdW5kX3N0bXQgOjo9IGlmX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2hpbGVfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmb3Jfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB0cnlfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aXRoX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZnVuY2RlZlxuICAgICAgICAgICAgICAgICAgICAgfCBjbGFzc2RlZlxuICAgc3VpdGUgICAgICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBORVdMSU5FIElOREVOVCBzdGF0ZW1lbnQrIERFREVOVFxuICAgc3RhdGVtZW50ICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBjb21wb3VuZF9zdG10XG4gICBzdG10X2xpc3QgICAgIDo6PSBzaW1wbGVfc3RtdCAoIjsiIHNpbXBsZV9zdG10KSogWyI7Il1cblxuTm90ZSB0aGF0IHN0YXRlbWVudHMgYWx3YXlzIGVuZCBpbiBhICJORVdMSU5FIiBwb3NzaWJseSBmb2xsb3dlZCBieSBhXG4iREVERU5UIi4gIEFsc28gbm90ZSB0aGF0IG9wdGlvbmFsIGNvbnRpbnVhdGlvbiBjbGF1c2VzIGFsd2F5cyBiZWdpblxud2l0aCBhIGtleXdvcmQgdGhhdCBjYW5ub3Qgc3RhcnQgYSBzdGF0ZW1lbnQsIHRodXMgdGhlcmUgYXJlIG5vXG5hbWJpZ3VpdGllcyAodGhlIFwnZGFuZ2xpbmcgImVsc2UiXCcgcHJvYmxlbSBpcyBzb2x2ZWQgaW4gUHl0aG9uIGJ5XG5yZXF1aXJpbmcgbmVzdGVkICJpZiIgc3RhdGVtZW50cyB0byBiZSBpbmRlbnRlZCkuXG5cblRoZSBmb3JtYXR0aW5nIG9mIHRoZSBncmFtbWFyIHJ1bGVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgcGxhY2VzXG5lYWNoIGNsYXVzZSBvbiBhIHNlcGFyYXRlIGxpbmUgZm9yIGNsYXJpdHkuXG5cblxuVGhlICJpZiIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT1cblxuVGhlICJpZiIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgImlmIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuXG5cblRoZSAid2hpbGUiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSAid2hpbGUiIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSAiYnJlYWsiIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlICJlbHNlIiBjbGF1c2VcJ3Mgc3VpdGUuICBBICJjb250aW51ZSIgc3RhdGVtZW50XG5leGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBnb2VzIGJhY2tcbnRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG5cblxuVGhlICJmb3IiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgImZvciIgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlXG4oc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbiJleHByZXNzaW9uX2xpc3QiLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiksXG50aGUgc3VpdGUgaW4gdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgY29udGludWVzXG53aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlICJlbHNlIiBjbGF1c2UgaWYgdGhlcmUgd2FzIG5vIG5leHRcbml0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAicmFuZ2UoKSIgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyAiZm9yIGlcbjo9IGEgdG8gYiBkbyI7IGUuZy4sICJsaXN0KHJhbmdlKDMpKSIgcmV0dXJucyB0aGUgbGlzdCAiWzAsIDEsIDJdIi5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGVcbiAgbG9vcCAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlICJ0cnkiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgInRyeSIgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSAiZXhjZXB0IiBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW4gbm9cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIHN1aXRlLCBhIHNlYXJjaCBmb3IgYW5cbmV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0IGNsYXVzZXNcbmluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW4gZXhwcmVzc2lvbi1cbmxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzIGFueVxuZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0IGV4cHJlc3Npb25cbmlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzIGNvbXBhdGlibGVcbndpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlIGV4Y2VwdGlvblxub2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlICJ0cnkiIHN0YXRlbWVudCByYWlzZWRcbnRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlICJhcyIga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsIGlmXG5wcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nICJhcyB0YXJnZXQiLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSAic3lzIiBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhXG4ic3lzLmV4Y19pbmZvKCkiLiAic3lzLmV4Y19pbmZvKCkiIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlXG5leGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlXG5wcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICAic3lzLmV4Y19pbmZvKCkiIHZhbHVlcyBhcmVcbnJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCAiZWxzZSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSAidHJ5IiBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSAiZWxzZSIgY2xhdXNlIGFyZVxubm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyAiZXhjZXB0IiBjbGF1c2VzLlxuXG5JZiAiZmluYWxseSIgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZSAidHJ5IlxuY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55ICJleGNlcHQiIGFuZCAiZWxzZSIgY2xhdXNlcy4gIElmIGFuXG5leGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90IGhhbmRsZWQsIHRoZVxuZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZC4gIElmXG50aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UuICBJZiB0aGUgImZpbmFsbHkiIGNsYXVzZSByYWlzZXMgYW5vdGhlciBleGNlcHRpb24sIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGV4Y2VwdGlvbi4gSWYgdGhlICJmaW5hbGx5IlxuY2xhdXNlIGV4ZWN1dGVzIGEgInJldHVybiIgb3IgImJyZWFrIiBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb25cbmlzIGRpc2NhcmRlZDpcblxuICAgZGVmIGYoKTpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIDEvMFxuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIHJldHVybiA0MlxuXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlICJmaW5hbGx5IiBjbGF1c2UuXG5cbldoZW4gYSAicmV0dXJuIiwgImJyZWFrIiBvciAiY29udGludWUiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpbiB0aGVcbiJ0cnkiIHN1aXRlIG9mIGEgInRyeSIuLi4iZmluYWxseSIgc3RhdGVtZW50LCB0aGUgImZpbmFsbHkiIGNsYXVzZSBpc1xuYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnQgaXMgaWxsZWdhbCBpblxudGhlICJmaW5hbGx5IiBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSAicmFpc2UiIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cblxuVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSAid2l0aCIgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uICJ0cnkiLi4uImV4Y2VwdCIuLi4iZmluYWxseSJcbnVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZCBmb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSAid2l0aCIgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlICJ3aXRoX2l0ZW0iKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZW50ZXJfXygpIiBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSAid2l0aCIgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tICJfX2VudGVyX18oKSIgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSAid2l0aCIgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgIl9fZW50ZXJfXygpIlxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuICJfX2V4aXRfXygpIiB3aWxsIGFsd2F5cyBiZVxuICAgICBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvICJfX2V4aXRfXygpIi4gT3RoZXJ3aXNlLCB0aHJlZVxuICAgIk5vbmUiIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSAiX19leGl0X18oKSIgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyByZXJhaXNlZC5cbiAgIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgYW5kXG4gICBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlICJ3aXRoIlxuICAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSAiX19leGl0X18oKSIgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlICJ3aXRoIiBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuXG5cbkZ1bmN0aW9uIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PT09PVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiAiPSJcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICIiKiIiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS0gdGhpc1xuaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB3aGVuIHRoZVxuZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXNcbmV2YWx1YXRlZCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLVxuY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnRcbnRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYVxubGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5XG5hcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuXG5UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2VcbiJOb25lIiBhcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlXG5mdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iIippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmcgYW55XG5leGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmIHRoZVxuZm9ybSAiIioqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICIiKiIiIG9yICIiKmlkZW50aWZpZXIiIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiIjogZXhwcmVzc2lvbiIiIGZvbGxvd2luZ1xudGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uIGV2ZW4gdGhvc2Vcbm9mIHRoZSBmb3JtICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciIuICBGdW5jdGlvbnMgbWF5IGhhdmVcbiJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gIiItPiBleHByZXNzaW9uIiIgYWZ0ZXIgdGhlIHBhcmFtZXRlclxubGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gYW5kIGFyZVxuZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuICBBbm5vdGF0aW9ucyBtYXlcbmJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS5cblRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiBhXG5mdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzIHZhbHVlcyBvZiBhXG5kaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlICJfX2Fubm90YXRpb25zX18iXG5hdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICIiZGVmIiIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiImRlZiIiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgIiJkZWYiIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286ICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG5cbiAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuXG5cbkNsYXNzIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PVxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyAib2JqZWN0IjsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoICJzZWxmLm5hbWUgPSB2YWx1ZSIuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvbiAiInNlbGYubmFtZSIiLFxuYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWVcbndoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIGFzIGRlZmF1bHRzXG5mb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhbiBsZWFkIHRvXG51bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLVxuICBDbGFzcyBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzc1xuICAgIHRoZXJlIGlzIGEgImZpbmFsbHkiIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXJcbiAgICBleGNlcHRpb24uIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZlxuICAgIGFuIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgInJldHVybiIsICJjb250aW51ZSIsIG9yXG4gICAgImJyZWFrIiBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZVxuICAgIGZ1bmN0aW9uIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgIl9fZG9jX18iXG4gICAgYXR0cmlidXRlIGFuZCB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyAiX19kb2NfXyIgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKICAnY29udGV4dC1tYW5hZ2Vycyc6ICdcbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgIndpdGgiIHN0YXRlbWVudC4gVGhlIGNvbnRleHQgbWFuYWdlclxuaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWUgY29udGV4dFxuZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZSBub3JtYWxseVxuaW52b2tlZCB1c2luZyB0aGUgIndpdGgiIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb24gKlRoZSB3aXRoXG5zdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXIgbWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgIndpdGgiXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlICJhcyIgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgIk5vbmUiLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCAiX19leGl0X18oKSIgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOiAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gIndpdGgiXG4gICAgIHN0YXRlbWVudC5cbicsCiAgJ2NvbnRpbnVlJzogJ1xuVGhlICJjb250aW51ZSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgY29udGludWVfc3RtdCA6Oj0gImNvbnRpbnVlIlxuXG4iY29udGludWUiIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgImZvciIgb3IgIndoaWxlIlxubG9vcCwgYnV0IG5vdCBuZXN0ZWQgaW4gYSBmdW5jdGlvbiBvciBjbGFzcyBkZWZpbml0aW9uIG9yICJmaW5hbGx5IlxuY2xhdXNlIHdpdGhpbiB0aGF0IGxvb3AuICBJdCBjb250aW51ZXMgd2l0aCB0aGUgbmV4dCBjeWNsZSBvZiB0aGVcbm5lYXJlc3QgZW5jbG9zaW5nIGxvb3AuXG5cbldoZW4gImNvbnRpbnVlIiBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBhXG4iZmluYWxseSIgY2xhdXNlLCB0aGF0ICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseVxuc3RhcnRpbmcgdGhlIG5leHQgbG9vcCBjeWNsZS5cbicsCiAgJ2NvbnZlcnNpb25zJzogJ1xuQXJpdGhtZXRpYyBjb252ZXJzaW9uc1xuKioqKioqKioqKioqKioqKioqKioqKlxuXG5XaGVuIGEgZGVzY3JpcHRpb24gb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRvciBiZWxvdyB1c2VzIHRoZSBwaHJhc2VcbiJ0aGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCIgdGhpcyBtZWFuc1xudGhhdCB0aGUgb3BlcmF0b3IgaW1wbGVtZW50YXRpb24gZm9yIGJ1aWx0LWluIHR5cGVzIHdvcmtzIHRoYXQgd2F5OlxuXG4qIElmIGVpdGhlciBhcmd1bWVudCBpcyBhIGNvbXBsZXggbnVtYmVyLCB0aGUgb3RoZXIgaXMgY29udmVydGVkIHRvXG4gIGNvbXBsZXg7XG5cbiogb3RoZXJ3aXNlLCBpZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIHRoZVxuICBvdGhlciBpcyBjb252ZXJ0ZWQgdG8gZmxvYXRpbmcgcG9pbnQ7XG5cbiogb3RoZXJ3aXNlLCBib3RoIG11c3QgYmUgaW50ZWdlcnMgYW5kIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LlxuXG5Tb21lIGFkZGl0aW9uYWwgcnVsZXMgYXBwbHkgZm9yIGNlcnRhaW4gb3BlcmF0b3JzIChlLmcuLCBhIHN0cmluZyBsZWZ0XG5hcmd1bWVudCB0byB0aGUgXCclXCcgb3BlcmF0b3IpLiAgRXh0ZW5zaW9ucyBtdXN0IGRlZmluZSB0aGVpciBvd25cbmNvbnZlcnNpb24gYmVoYXZpb3IuXG4nLAotICdjdXN0b21pemF0aW9uJzogJ1xuQmFzaWMgY3VzdG9taXphdGlvblxuKioqKioqKioqKioqKioqKioqKlxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgIl9fbmV3X18oKSIgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgIl9fbmV3X18oKSIgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5IGFuXG4gICBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzICJfX25ld19fKCkiIG1ldGhvZCB1c2luZ1xuICAgInN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pIiB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgIl9fbmV3X18oKSIgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICAiX19pbml0X18oc2VsZlssIC4uLl0pIiwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIuXG5cbiAgIElmICJfX25ld19fKCkiIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgICJfX25ld19fKCkiIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgICJfX2luaXRfXygpIiBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzICJfX2luaXRfXygpIiBtZXRob2QsIGlmXG4gICBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2YgdGhlXG4gICBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgICJCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKSIuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludCBvblxuICAgY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgIlR5cGVFcnJvciIgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgIl9fZGVsX18oKSIgbWV0aG9kLCB0aGVcbiAgIGRlcml2ZWQgY2xhc3NcJ3MgIl9fZGVsX18oKSIgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0XG4gICB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlLlxuICAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yIHRoZVxuICAgIl9fZGVsX18oKSIgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogImRlbCB4IiBkb2VzblwndCBkaXJlY3RseSBjYWxsICJ4Ll9fZGVsX18oKSIgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciAieCIgYnkgb25lLCBhbmQgdGhlIGxhdHRlciBpc1xuICAgICBvbmx5IGNhbGxlZCB3aGVuICJ4IlwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZSBjb21tb25cbiAgICAgc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW4gb2JqZWN0IGZyb21cbiAgICAgZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW4gb2JqZWN0cyAoZS5nLixcbiAgICAgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGggcGFyZW50IGFuZFxuICAgICBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIG9mXG4gICAgIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmV4Y19pbmZvKClbMl0iIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yIGEgcmVmZXJlbmNlXG4gICAgIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuIHVuaGFuZGxlZFxuICAgICBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nICJOb25lIiBpblxuICAgICAic3lzLmxhc3RfdHJhY2ViYWNrIi4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5XG4gICAgIGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZCB1cCBpZiB0aGVyZSBhcmUgbm8gUHl0aG9uLVxuICAgICBsZXZlbCAiX19kZWxfXygpIiBtZXRob2RzIGludm9sdmVkLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvblxuICAgICBmb3IgdGhlICJnYyIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyAiX19kZWxfXygpIlxuICAgICBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvciwgcGFydGljdWxhcmx5IHRoZVxuICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgImdhcmJhZ2UiIHZhbHVlLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaFxuICAgICAiX19kZWxfXygpIiBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nXG4gICAgIHRoZWlyIGV4ZWN1dGlvbiBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvXG4gICAgICJzeXMuc3RkZXJyIiBpbnN0ZWFkLiBBbHNvLCB3aGVuICJfX2RlbF9fKCkiIGlzIGludm9rZWQgaW5cbiAgICAgcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmcgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlXG4gICAgIHByb2dyYW0gaXMgZG9uZSksIG90aGVyIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgIl9fZGVsX18oKSJcbiAgICAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nXG4gICAgIHRvcm4gZG93biAoZS5nLiB0aGUgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzXG4gICAgIHJlYXNvbiwgIl9fZGVsX18oKSIgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkXG4gICAgIHRvIG1haW50YWluIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LFxuICAgICBQeXRob24gZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSAiX19kZWxfXygpIiBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSAicmVwcigpIiBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSAib2ZmaWNpYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLCB0aGlzXG4gICBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkIHRvXG4gICByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgIjwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj4iIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyAiX19yZXByX18oKSIgYnV0XG4gICBub3QgIl9fc3RyX18oKSIsIHRoZW4gIl9fcmVwcl9fKCkiIGlzIGFsc28gdXNlZCB3aGVuIGFuICJpbmZvcm1hbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpcyByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgInN0cihvYmplY3QpIiBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZm9ybWF0KCkiIGFuZFxuICAgInByaW50KCkiIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZSBzdHJpbmdcbiAgIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhICpzdHJpbmcqXG4gICBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSAib2JqZWN0Ll9fcmVwcl9fKCkiIGluIHRoYXQgdGhlcmUgaXMgbm9cbiAgIGV4cGVjdGF0aW9uIHRoYXQgIl9fc3RyX18oKSIgcmV0dXJuIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGFcbiAgIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlIHJlcHJlc2VudGF0aW9uIGNhbiBiZSB1c2VkLlxuXG4gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ5IHRoZSBidWlsdC1pbiB0eXBlICJvYmplY3QiXG4gICBjYWxscyAib2JqZWN0Ll9fcmVwcl9fKCkiLlxuXG5vYmplY3QuX19ieXRlc19fKHNlbGYpXG5cbiAgIENhbGxlZCBieSAiYnl0ZXMoKSIgdG8gY29tcHV0ZSBhIGJ5dGUtc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuIFRoaXMgc2hvdWxkIHJldHVybiBhICJieXRlcyIgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSAiZm9ybWF0KCkiIGJ1aWx0LWluIGZ1bmN0aW9uIChhbmQgYnkgZXh0ZW5zaW9uLCB0aGVcbiAgICJzdHIuZm9ybWF0KCkiIG1ldGhvZCBvZiBjbGFzcyAic3RyIikgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyBhXG4gICBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyB1cCB0b1xuICAgdGhlIHR5cGUgaW1wbGVtZW50aW5nICJfX2Zvcm1hdF9fKCkiLCBob3dldmVyIG1vc3QgY2xhc3NlcyB3aWxsXG4gICBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvciB1c2UgYVxuICAgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiAieDx5IiBjYWxscyAieC5fX2x0X18oeSkiLCAieDw9eSIgY2FsbHMgInguX19sZV9fKHkpIixcbiAgICJ4PT15IiBjYWxscyAieC5fX2VxX18oeSkiLCAieCE9eSIgY2FsbHMgInguX19uZV9fKHkpIiwgIng+eSIgY2FsbHNcbiAgICJ4Ll9fZ3RfXyh5KSIsIGFuZCAieD49eSIgY2FsbHMgInguX19nZV9fKHkpIi5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvbiAiTm90SW1wbGVtZW50ZWQiXG4gICBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYSBnaXZlbiBwYWlyIG9mXG4gICBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sICJGYWxzZSIgYW5kICJUcnVlIiBhcmUgcmV0dXJuZWQgZm9yIGFcbiAgIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW4gcmV0dXJuIGFueSB2YWx1ZSxcbiAgIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYSBCb29sZWFuIGNvbnRleHQgKGUuZy4sXG4gICBpbiB0aGUgY29uZGl0aW9uIG9mIGFuICJpZiIgc3RhdGVtZW50KSwgUHl0aG9uIHdpbGwgY2FsbCAiYm9vbCgpIlxuICAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0IGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mICJ4PT15IiBkb2VzIG5vdCBpbXBseSB0aGF0ICJ4IT15IiBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nICJfX2VxX18oKSIsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgICJfX25lX18oKSIgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlIHRoZVxuICAgcGFyYWdyYXBoIG9uICJfX2hhc2hfXygpIiBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb24gY3JlYXRpbmdcbiAgICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kXG4gICBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgIl9fbHRfXygpIiBhbmQgIl9fZ3RfXygpIiBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgIl9fbGVfXygpIiBhbmQgIl9fZ2VfXygpIiBhcmUgZWFjaCBvdGhlclwncyByZWZsZWN0aW9uLFxuICAgYW5kICJfX2VxX18oKSIgYW5kICJfX25lX18oKSIgYXJlIHRoZWlyIG93biByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlICJmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKSIuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gImhhc2goKSIgYW5kIGZvciBvcGVyYXRpb25zIG9uIG1lbWJlcnNcbiAgIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgInNldCIsICJmcm96ZW5zZXQiLCBhbmQgImRpY3QiLlxuICAgIl9faGFzaF9fKCkiIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5IHJlcXVpcmVkIHByb3BlcnR5XG4gICBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lIGhhc2ggdmFsdWU7IGl0IGlzXG4gICBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2hcbiAgIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0IGFsc28gcGxheSBhIHBhcnQgaW5cbiAgIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogImhhc2goKSIgdHJ1bmNhdGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuIG9iamVjdFwnc1xuICAgICBjdXN0b20gIl9faGFzaF9fKCkiIG1ldGhvZCB0byB0aGUgc2l6ZSBvZiBhICJQeV9zc2l6ZV90Ii4gIFRoaXNcbiAgICAgaXMgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXRcbiAgICAgYnVpbGRzLiBJZiBhbiBvYmplY3RcJ3MgICAiX19oYXNoX18oKSIgbXVzdCBpbnRlcm9wZXJhdGUgb24gYnVpbGRzXG4gICAgIG9mIGRpZmZlcmVudCBiaXQgc2l6ZXMsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHdpZHRoIG9uIGFsbFxuICAgICBzdXBwb3J0ZWQgYnVpbGRzLiAgQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoICJweXRob24gLWNcbiAgICAgImltcG9ydCBzeXM7IHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpIiJcblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gIl9fZXFfXygpIiBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgIl9faGFzaF9fKCkiIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0IGRlZmluZXMgIl9fZXFfXygpIlxuICAgYnV0IG5vdCAiX19oYXNoX18oKSIsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmUgdXNhYmxlIGFzIGl0ZW1zIGluXG4gICBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lcyBtdXRhYmxlIG9iamVjdHMgYW5kXG4gICBpbXBsZW1lbnRzIGFuICJfX2VxX18oKSIgbWV0aG9kLCBpdCBzaG91bGQgbm90IGltcGxlbWVudFxuICAgIl9faGFzaF9fKCkiLCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGFzaGFibGUgY29sbGVjdGlvbnNcbiAgIHJlcXVpcmVzIHRoYXQgYSBrZXlcJ3MgaGFzaCB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZSBvYmplY3RcJ3MgaGFzaFxuICAgdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZSBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlICJfX2VxX18oKSIgYW5kICJfX2hhc2hfXygpIiBtZXRob2RzIGJ5XG4gICBkZWZhdWx0OyB3aXRoIHRoZW0sIGFsbCBvYmplY3RzIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGhcbiAgIHRoZW1zZWx2ZXMpIGFuZCAieC5fX2hhc2hfXygpIiByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHN1Y2hcbiAgIHRoYXQgInggPT0geSIgaW1wbGllcyBib3RoIHRoYXQgInggaXMgeSIgYW5kICJoYXNoKHgpID09IGhhc2goeSkiLlxuXG4gICBBIGNsYXNzIHRoYXQgb3ZlcnJpZGVzICJfX2VxX18oKSIgYW5kIGRvZXMgbm90IGRlZmluZSAiX19oYXNoX18oKSJcbiAgIHdpbGwgaGF2ZSBpdHMgIl9faGFzaF9fKCkiIGltcGxpY2l0bHkgc2V0IHRvICJOb25lIi4gIFdoZW4gdGhlXG4gICAiX19oYXNoX18oKSIgbWV0aG9kIG9mIGEgY2xhc3MgaXMgIk5vbmUiLCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzXG4gICB3aWxsIHJhaXNlIGFuIGFwcHJvcHJpYXRlICJUeXBlRXJyb3IiIHdoZW4gYSBwcm9ncmFtIGF0dGVtcHRzIHRvXG4gICByZXRyaWV2ZSB0aGVpciBoYXNoIHZhbHVlLCBhbmQgd2lsbCBhbHNvIGJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgImlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSIpLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzICJfX2VxX18oKSIgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgIl9faGFzaF9fKCkiIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZSBpbnRlcnByZXRlclxuICAgbXVzdCBiZSB0b2xkIHRoaXMgZXhwbGljaXRseSBieSBzZXR0aW5nICJfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fIi5cblxuICAgSWYgYSBjbGFzcyB0aGF0IGRvZXMgbm90IG92ZXJyaWRlICJfX2VxX18oKSIgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlICJfX2hhc2hfXyA9IE5vbmUiIGluIHRoZSBjbGFzc1xuICAgZGVmaW5pdGlvbi4gQSBjbGFzcyB3aGljaCBkZWZpbmVzIGl0cyBvd24gIl9faGFzaF9fKCkiIHRoYXRcbiAgIGV4cGxpY2l0bHkgcmFpc2VzIGEgIlR5cGVFcnJvciIgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgaGFzaGFibGUgYnkgYW4gImlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSkiIGNhbGwuXG5cbiAgIE5vdGU6IEJ5IGRlZmF1bHQsIHRoZSAiX19oYXNoX18oKSIgdmFsdWVzIG9mIHN0ciwgYnl0ZXMgYW5kXG4gICAgIGRhdGV0aW1lIG9iamVjdHMgYXJlICJzYWx0ZWQiIHdpdGggYW4gdW5wcmVkaWN0YWJsZSByYW5kb20gdmFsdWUuXG4gICAgIEFsdGhvdWdoIHRoZXkgcmVtYWluIGNvbnN0YW50IHdpdGhpbiBhbiBpbmRpdmlkdWFsIFB5dGhvblxuICAgICBwcm9jZXNzLCB0aGV5IGFyZSBub3QgcHJlZGljdGFibGUgYmV0d2VlbiByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZlxuICAgICBQeXRob24uVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBhIGRlbmlhbC1cbiAgICAgb2Ytc2VydmljZSBjYXVzZWQgYnkgY2FyZWZ1bGx5LWNob3NlbiBpbnB1dHMgdGhhdCBleHBsb2l0IHRoZVxuICAgICB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIG9mIGEgZGljdCBpbnNlcnRpb24sIE8obl4yKSBjb21wbGV4aXR5LlxuICAgICBTZWUgaHR0cDovL3d3dy5vY2VydC5vcmcvYWR2aXNvcmllcy9vY2VydC0yMDExLTAwMy5odG1sIGZvclxuICAgICBkZXRhaWxzLkNoYW5naW5nIGhhc2ggdmFsdWVzIGFmZmVjdHMgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZlxuICAgICBkaWN0cywgc2V0cyBhbmQgb3RoZXIgbWFwcGluZ3MuICBQeXRob24gaGFzIG5ldmVyIG1hZGUgZ3VhcmFudGVlc1xuICAgICBhYm91dCB0aGlzIG9yZGVyaW5nIChhbmQgaXQgdHlwaWNhbGx5IHZhcmllcyBiZXR3ZWVuIDMyLWJpdCBhbmRcbiAgICAgNjQtYml0IGJ1aWxkcykuU2VlIGFsc28gIlBZVEhPTkhBU0hTRUVEIi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgImJvb2woKSI7IHNob3VsZCByZXR1cm4gIkZhbHNlIiBvciAiVHJ1ZSIuICBXaGVuIHRoaXMgbWV0aG9kIGlzIG5vdFxuICAgZGVmaW5lZCwgIl9fbGVuX18oKSIgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlIG9iamVjdCBpc1xuICAgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbmVpdGhlciAiX19sZW5fXygpIiBub3IgIl9fYm9vbF9fKCkiLCBhbGwgaXRzIGluc3RhbmNlcyBhcmVcbiAgIGNvbnNpZGVyZWQgdHJ1ZS5cbicsCi0gJ2RlYnVnZ2VyJzogJ1xuInBkYiIgLS0tIFRoZSBQeXRob24gRGVidWdnZXJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBtb2R1bGUgInBkYiIgZGVmaW5lcyBhbiBpbnRlcmFjdGl2ZSBzb3VyY2UgY29kZSBkZWJ1Z2dlciBmb3JcblB5dGhvbiBwcm9ncmFtcy4gIEl0IHN1cHBvcnRzIHNldHRpbmcgKGNvbmRpdGlvbmFsKSBicmVha3BvaW50cyBhbmRcbnNpbmdsZSBzdGVwcGluZyBhdCB0aGUgc291cmNlIGxpbmUgbGV2ZWwsIGluc3BlY3Rpb24gb2Ygc3RhY2sgZnJhbWVzLFxuc291cmNlIGNvZGUgbGlzdGluZywgYW5kIGV2YWx1YXRpb24gb2YgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGluIHRoZVxuY29udGV4dCBvZiBhbnkgc3RhY2sgZnJhbWUuICBJdCBhbHNvIHN1cHBvcnRzIHBvc3QtbW9ydGVtIGRlYnVnZ2luZ1xuYW5kIGNhbiBiZSBjYWxsZWQgdW5kZXIgcHJvZ3JhbSBjb250cm9sLlxuXG5UaGUgZGVidWdnZXIgaXMgZXh0ZW5zaWJsZSAtLSBpdCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIHRoZSBjbGFzc1xuIlBkYiIuIFRoaXMgaXMgY3VycmVudGx5IHVuZG9jdW1lbnRlZCBidXQgZWFzaWx5IHVuZGVyc3Rvb2QgYnkgcmVhZGluZ1xudGhlIHNvdXJjZS4gIFRoZSBleHRlbnNpb24gaW50ZXJmYWNlIHVzZXMgdGhlIG1vZHVsZXMgImJkYiIgYW5kICJjbWQiLlxuXG5UaGUgZGVidWdnZXJcJ3MgcHJvbXB0IGlzICIoUGRiKSIuIFR5cGljYWwgdXNhZ2UgdG8gcnVuIGEgcHJvZ3JhbSB1bmRlclxuY29udHJvbCBvZiB0aGUgZGVidWdnZXIgaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gcGRiLnJ1bihcJ215bW9kdWxlLnRlc3QoKVwnKVxuICAgPiA8c3RyaW5nPigwKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICBOYW1lRXJyb3I6IFwnc3BhbVwnXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBUYWItY29tcGxldGlvbiB2aWEgdGhlICJyZWFkbGluZSIgbW9kdWxlIGlzXG5hdmFpbGFibGUgZm9yIGNvbW1hbmRzIGFuZCBjb21tYW5kIGFyZ3VtZW50cywgZS5nLiB0aGUgY3VycmVudCBnbG9iYWxcbmFuZCBsb2NhbCBuYW1lcyBhcmUgb2ZmZXJlZCBhcyBhcmd1bWVudHMgb2YgdGhlICJwcmludCIgY29tbWFuZC5cblxuInBkYi5weSIgY2FuIGFsc28gYmUgaW52b2tlZCBhcyBhIHNjcmlwdCB0byBkZWJ1ZyBvdGhlciBzY3JpcHRzLiAgRm9yXG5leGFtcGxlOlxuXG4gICBweXRob24zIC1tIHBkYiBteXNjcmlwdC5weVxuXG5XaGVuIGludm9rZWQgYXMgYSBzY3JpcHQsIHBkYiB3aWxsIGF1dG9tYXRpY2FsbHkgZW50ZXIgcG9zdC1tb3J0ZW1cbmRlYnVnZ2luZyBpZiB0aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBleGl0cyBhYm5vcm1hbGx5LiAgQWZ0ZXIgcG9zdC1cbm1vcnRlbSBkZWJ1Z2dpbmcgKG9yIGFmdGVyIG5vcm1hbCBleGl0IG9mIHRoZSBwcm9ncmFtKSwgcGRiIHdpbGxcbnJlc3RhcnQgdGhlIHByb2dyYW0uICBBdXRvbWF0aWMgcmVzdGFydGluZyBwcmVzZXJ2ZXMgcGRiXCdzIHN0YXRlIChzdWNoXG5hcyBicmVha3BvaW50cykgYW5kIGluIG1vc3QgY2FzZXMgaXMgbW9yZSB1c2VmdWwgdGhhbiBxdWl0dGluZyB0aGVcbmRlYnVnZ2VyIHVwb24gcHJvZ3JhbVwncyBleGl0LlxuXG5OZXcgaW4gdmVyc2lvbiAzLjI6ICJwZGIucHkiIG5vdyBhY2NlcHRzIGEgIi1jIiBvcHRpb24gdGhhdCBleGVjdXRlc1xuY29tbWFuZHMgYXMgaWYgZ2l2ZW4gaW4gYSAiLnBkYnJjIiBmaWxlLCBzZWUgKkRlYnVnZ2VyIENvbW1hbmRzKi5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIgZnJvbSBhIHJ1bm5pbmcgcHJvZ3JhbSBpc1xudG8gaW5zZXJ0XG5cbiAgIGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKVxuXG5hdCB0aGUgbG9jYXRpb24geW91IHdhbnQgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIuICBZb3UgY2FuIHRoZW5cbnN0ZXAgdGhyb3VnaCB0aGUgY29kZSBmb2xsb3dpbmcgdGhpcyBzdGF0ZW1lbnQsIGFuZCBjb250aW51ZSBydW5uaW5nXG53aXRob3V0IHRoZSBkZWJ1Z2dlciB1c2luZyB0aGUgImNvbnRpbnVlIiBjb21tYW5kLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBpbnNwZWN0IGEgY3Jhc2hlZCBwcm9ncmFtIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IG15bW9kdWxlLnRlc3QoKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDQsIGluIHRlc3RcbiAgICAgICB0ZXN0MigpXG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDMsIGluIHRlc3QyXG4gICAgICAgcHJpbnQoc3BhbSlcbiAgIE5hbWVFcnJvcjogc3BhbVxuICAgPj4+IHBkYi5wbSgpXG4gICA+IC4vbXltb2R1bGUucHkoMyl0ZXN0MigpXG4gICAtPiBwcmludChzcGFtKVxuICAgKFBkYilcblxuVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOyBlYWNoIGVudGVycyB0aGUgZGVidWdnZXJcbmluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHdheTpcblxucGRiLnJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV4ZWN1dGUgdGhlICpzdGF0ZW1lbnQqIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KSB1bmRlclxuICAgZGVidWdnZXIgY29udHJvbC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFycyBiZWZvcmUgYW55IGNvZGUgaXNcbiAgIGV4ZWN1dGVkOyB5b3UgY2FuIHNldCBicmVha3BvaW50cyBhbmQgdHlwZSAiY29udGludWUiLCBvciB5b3UgY2FuXG4gICBzdGVwIHRocm91Z2ggdGhlIHN0YXRlbWVudCB1c2luZyAic3RlcCIgb3IgIm5leHQiIChhbGwgdGhlc2VcbiAgIGNvbW1hbmRzIGFyZSBleHBsYWluZWQgYmVsb3cpLiAgVGhlIG9wdGlvbmFsICpnbG9iYWxzKiBhbmQgKmxvY2FscypcbiAgIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgY29kZSBpcyBleGVjdXRlZDsgYnlcbiAgIGRlZmF1bHQgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIG1vZHVsZSAiX19tYWluX18iIGlzIHVzZWQuICAoU2VlIHRoZVxuICAgZXhwbGFuYXRpb24gb2YgdGhlIGJ1aWx0LWluICJleGVjKCkiIG9yICJldmFsKCkiIGZ1bmN0aW9ucy4pXG5cbnBkYi5ydW5ldmFsKGV4cHJlc3Npb24sIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogKGdpdmVuIGFzIGEgc3RyaW5nIG9yIGEgY29kZSBvYmplY3QpXG4gICB1bmRlciBkZWJ1Z2dlciBjb250cm9sLiAgV2hlbiAicnVuZXZhbCgpIiByZXR1cm5zLCBpdCByZXR1cm5zIHRoZVxuICAgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uICBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvXG4gICAicnVuKCkiLlxuXG5wZGIucnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcblxuICAgQ2FsbCB0aGUgKmZ1bmN0aW9uKiAoYSBmdW5jdGlvbiBvciBtZXRob2Qgb2JqZWN0LCBub3QgYSBzdHJpbmcpXG4gICB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuICBXaGVuICJydW5jYWxsKCkiIHJldHVybnMsIGl0IHJldHVybnNcbiAgIHdoYXRldmVyIHRoZSBmdW5jdGlvbiBjYWxsIHJldHVybmVkLiAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzXG4gICBhcyBzb29uIGFzIHRoZSBmdW5jdGlvbiBpcyBlbnRlcmVkLlxuXG5wZGIuc2V0X3RyYWNlKClcblxuICAgRW50ZXIgdGhlIGRlYnVnZ2VyIGF0IHRoZSBjYWxsaW5nIHN0YWNrIGZyYW1lLiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgIGhhcmQtY29kZSBhIGJyZWFrcG9pbnQgYXQgYSBnaXZlbiBwb2ludCBpbiBhIHByb2dyYW0sIGV2ZW4gaWYgdGhlXG4gICBjb2RlIGlzIG5vdCBvdGhlcndpc2UgYmVpbmcgZGVidWdnZWQgKGUuZy4gd2hlbiBhbiBhc3NlcnRpb25cbiAgIGZhaWxzKS5cblxucGRiLnBvc3RfbW9ydGVtKHRyYWNlYmFjaz1Ob25lKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIGdpdmVuICp0cmFjZWJhY2sqIG9iamVjdC4gIElmIG5vXG4gICAqdHJhY2ViYWNrKiBpcyBnaXZlbiwgaXQgdXNlcyB0aGUgb25lIG9mIHRoZSBleGNlcHRpb24gdGhhdCBpc1xuICAgY3VycmVudGx5IGJlaW5nIGhhbmRsZWQgKGFuIGV4Y2VwdGlvbiBtdXN0IGJlIGJlaW5nIGhhbmRsZWQgaWYgdGhlXG4gICBkZWZhdWx0IGlzIHRvIGJlIHVzZWQpLlxuXG5wZGIucG0oKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIHRyYWNlYmFjayBmb3VuZCBpblxuICAgInN5cy5sYXN0X3RyYWNlYmFjayIuXG5cblRoZSAicnVuKiIgZnVuY3Rpb25zIGFuZCAic2V0X3RyYWNlKCkiIGFyZSBhbGlhc2VzIGZvciBpbnN0YW50aWF0aW5nXG50aGUgIlBkYiIgY2xhc3MgYW5kIGNhbGxpbmcgdGhlIG1ldGhvZCBvZiB0aGUgc2FtZSBuYW1lLiAgSWYgeW91IHdhbnRcbnRvIGFjY2VzcyBmdXJ0aGVyIGZlYXR1cmVzLCB5b3UgaGF2ZSB0byBkbyB0aGlzIHlvdXJzZWxmOlxuXG5jbGFzcyBjbGFzcyBwZGIuUGRiKGNvbXBsZXRla2V5PVwndGFiXCcsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBza2lwPU5vbmUsIG5vc2lnaW50PUZhbHNlKVxuXG4gICAiUGRiIiBpcyB0aGUgZGVidWdnZXIgY2xhc3MuXG5cbiAgIFRoZSAqY29tcGxldGVrZXkqLCAqc3RkaW4qIGFuZCAqc3Rkb3V0KiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGVcbiAgIHVuZGVybHlpbmcgImNtZC5DbWQiIGNsYXNzOyBzZWUgdGhlIGRlc2NyaXB0aW9uIHRoZXJlLlxuXG4gICBUaGUgKnNraXAqIGFyZ3VtZW50LCBpZiBnaXZlbiwgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBnbG9iLXN0eWxlXG4gICBtb2R1bGUgbmFtZSBwYXR0ZXJucy4gIFRoZSBkZWJ1Z2dlciB3aWxsIG5vdCBzdGVwIGludG8gZnJhbWVzIHRoYXRcbiAgIG9yaWdpbmF0ZSBpbiBhIG1vZHVsZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZXNlIHBhdHRlcm5zLiBbMV1cblxuICAgQnkgZGVmYXVsdCwgUGRiIHNldHMgYSBoYW5kbGVyIGZvciB0aGUgU0lHSU5UIHNpZ25hbCAod2hpY2ggaXMgc2VudFxuICAgd2hlbiB0aGUgdXNlciBwcmVzc2VzIEN0cmwtQyBvbiB0aGUgY29uc29sZSkgd2hlbiB5b3UgZ2l2ZSBhXG4gICAiY29udGludWUiIGNvbW1hbmQuIFRoaXMgYWxsb3dzIHlvdSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlclxuICAgYWdhaW4gYnkgcHJlc3NpbmcgQ3RybC1DLiAgSWYgeW91IHdhbnQgUGRiIG5vdCB0byB0b3VjaCB0aGUgU0lHSU5UXG4gICBoYW5kbGVyLCBzZXQgKm5vc2lnaW50KiB0b3QgdHJ1ZS5cblxuICAgRXhhbXBsZSBjYWxsIHRvIGVuYWJsZSB0cmFjaW5nIHdpdGggKnNraXAqOlxuXG4gICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9W1wnZGphbmdvLipcJ10pLnNldF90cmFjZSgpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMTogVGhlICpza2lwKiBhcmd1bWVudC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yOiBUaGUgKm5vc2lnaW50KiBhcmd1bWVudC4gIFByZXZpb3VzbHksIGEgU0lHSU5UXG4gICBoYW5kbGVyIHdhcyBuZXZlciBzZXQgYnkgUGRiLlxuXG4gICBydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcbiAgIHNldF90cmFjZSgpXG5cbiAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZ1bmN0aW9ucyBleHBsYWluZWQgYWJvdmUuXG5cblxuRGVidWdnZXIgQ29tbWFuZHNcbj09PT09PT09PT09PT09PT09XG5cblRoZSBjb21tYW5kcyByZWNvZ25pemVkIGJ5IHRoZSBkZWJ1Z2dlciBhcmUgbGlzdGVkIGJlbG93LiAgTW9zdFxuY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIG9uZSBvciB0d28gbGV0dGVycyBhcyBpbmRpY2F0ZWQ7IGUuZy5cbiJoKGVscCkiIG1lYW5zIHRoYXQgZWl0aGVyICJoIiBvciAiaGVscCIgY2FuIGJlIHVzZWQgdG8gZW50ZXIgdGhlIGhlbHBcbmNvbW1hbmQgKGJ1dCBub3QgImhlIiBvciAiaGVsIiwgbm9yICJIIiBvciAiSGVscCIgb3IgIkhFTFAiKS5cbkFyZ3VtZW50cyB0byBjb21tYW5kcyBtdXN0IGJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlIChzcGFjZXMgb3JcbnRhYnMpLiAgT3B0aW9uYWwgYXJndW1lbnRzIGFyZSBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMgKCJbXSIpIGluXG50aGUgY29tbWFuZCBzeW50YXg7IHRoZSBzcXVhcmUgYnJhY2tldHMgbXVzdCBub3QgYmUgdHlwZWQuXG5BbHRlcm5hdGl2ZXMgaW4gdGhlIGNvbW1hbmQgc3ludGF4IGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbCBiYXJcbigifCIpLlxuXG5FbnRlcmluZyBhIGJsYW5rIGxpbmUgcmVwZWF0cyB0aGUgbGFzdCBjb21tYW5kIGVudGVyZWQuICBFeGNlcHRpb246IGlmXG50aGUgbGFzdCBjb21tYW5kIHdhcyBhICJsaXN0IiBjb21tYW5kLCB0aGUgbmV4dCAxMSBsaW5lcyBhcmUgbGlzdGVkLlxuXG5Db21tYW5kcyB0aGF0IHRoZSBkZWJ1Z2dlciBkb2VzblwndCByZWNvZ25pemUgYXJlIGFzc3VtZWQgdG8gYmUgUHl0aG9uXG5zdGF0ZW1lbnRzIGFuZCBhcmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkLiAgUHl0aG9uIHN0YXRlbWVudHMgY2FuIGFsc28gYmUgcHJlZml4ZWQgd2l0aCBhbiBleGNsYW1hdGlvblxucG9pbnQgKCIhIikuICBUaGlzIGlzIGEgcG93ZXJmdWwgd2F5IHRvIGluc3BlY3QgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkOyBpdCBpcyBldmVuIHBvc3NpYmxlIHRvIGNoYW5nZSBhIHZhcmlhYmxlIG9yIGNhbGwgYSBmdW5jdGlvbi5cbldoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBzdWNoIGEgc3RhdGVtZW50LCB0aGUgZXhjZXB0aW9uIG5hbWUgaXNcbnByaW50ZWQgYnV0IHRoZSBkZWJ1Z2dlclwncyBzdGF0ZSBpcyBub3QgY2hhbmdlZC5cblxuVGhlIGRlYnVnZ2VyIHN1cHBvcnRzICphbGlhc2VzKi4gIEFsaWFzZXMgY2FuIGhhdmUgcGFyYW1ldGVycyB3aGljaFxuYWxsb3dzIG9uZSBhIGNlcnRhaW4gbGV2ZWwgb2YgYWRhcHRhYmlsaXR5IHRvIHRoZSBjb250ZXh0IHVuZGVyXG5leGFtaW5hdGlvbi5cblxuTXVsdGlwbGUgY29tbWFuZHMgbWF5IGJlIGVudGVyZWQgb24gYSBzaW5nbGUgbGluZSwgc2VwYXJhdGVkIGJ5ICI7OyIuXG4oQSBzaW5nbGUgIjsiIGlzIG5vdCB1c2VkIGFzIGl0IGlzIHRoZSBzZXBhcmF0b3IgZm9yIG11bHRpcGxlIGNvbW1hbmRzXG5pbiBhIGxpbmUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIFB5dGhvbiBwYXJzZXIuKSAgTm8gaW50ZWxsaWdlbmNlIGlzXG5hcHBsaWVkIHRvIHNlcGFyYXRpbmcgdGhlIGNvbW1hbmRzOyB0aGUgaW5wdXQgaXMgc3BsaXQgYXQgdGhlIGZpcnN0XG4iOzsiIHBhaXIsIGV2ZW4gaWYgaXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHF1b3RlZCBzdHJpbmcuXG5cbklmIGEgZmlsZSAiLnBkYnJjIiBleGlzdHMgaW4gdGhlIHVzZXJcJ3MgaG9tZSBkaXJlY3Rvcnkgb3IgaW4gdGhlXG5jdXJyZW50IGRpcmVjdG9yeSwgaXQgaXMgcmVhZCBpbiBhbmQgZXhlY3V0ZWQgYXMgaWYgaXQgaGFkIGJlZW4gdHlwZWRcbmF0IHRoZSBkZWJ1Z2dlciBwcm9tcHQuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGFsaWFzZXMuICBJZlxuYm90aCBmaWxlcyBleGlzdCwgdGhlIG9uZSBpbiB0aGUgaG9tZSBkaXJlY3RvcnkgaXMgcmVhZCBmaXJzdCBhbmRcbmFsaWFzZXMgZGVmaW5lZCB0aGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgbG9jYWwgZmlsZS5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogIi5wZGJyYyIgY2FuIG5vdyBjb250YWluIGNvbW1hbmRzIHRoYXRcbmNvbnRpbnVlIGRlYnVnZ2luZywgc3VjaCBhcyAiY29udGludWUiIG9yICJuZXh0Ii4gIFByZXZpb3VzbHksIHRoZXNlXG5jb21tYW5kcyBoYWQgbm8gZWZmZWN0LlxuXG5oKGVscCkgW2NvbW1hbmRdXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIHByaW50IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy4gIFdpdGggYVxuICAgKmNvbW1hbmQqIGFzIGFyZ3VtZW50LCBwcmludCBoZWxwIGFib3V0IHRoYXQgY29tbWFuZC4gICJoZWxwIHBkYiJcbiAgIGRpc3BsYXlzIHRoZSBmdWxsIGRvY3VtZW50YXRpb24gKHRoZSBkb2NzdHJpbmcgb2YgdGhlICJwZGIiXG4gICBtb2R1bGUpLiAgU2luY2UgdGhlICpjb21tYW5kKiBhcmd1bWVudCBtdXN0IGJlIGFuIGlkZW50aWZpZXIsICJoZWxwXG4gICBleGVjIiBtdXN0IGJlIGVudGVyZWQgdG8gZ2V0IGhlbHAgb24gdGhlICIhIiBjb21tYW5kLlxuXG53KGhlcmUpXG5cbiAgIFByaW50IGEgc3RhY2sgdHJhY2UsIHdpdGggdGhlIG1vc3QgcmVjZW50IGZyYW1lIGF0IHRoZSBib3R0b20uICBBblxuICAgYXJyb3cgaW5kaWNhdGVzIHRoZSBjdXJyZW50IGZyYW1lLCB3aGljaCBkZXRlcm1pbmVzIHRoZSBjb250ZXh0IG9mXG4gICBtb3N0IGNvbW1hbmRzLlxuXG5kKG93bikgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgZG93biBpbiB0aGVcbiAgIHN0YWNrIHRyYWNlICh0byBhIG5ld2VyIGZyYW1lKS5cblxudShwKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyB1cCBpbiB0aGUgc3RhY2tcbiAgIHRyYWNlICh0byBhbiBvbGRlciBmcmFtZSkuXG5cbmIocmVhaykgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBXaXRoIGEgKmxpbmVubyogYXJndW1lbnQsIHNldCBhIGJyZWFrIHRoZXJlIGluIHRoZSBjdXJyZW50IGZpbGUuXG4gICBXaXRoIGEgKmZ1bmN0aW9uKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgYXQgdGhlIGZpcnN0IGV4ZWN1dGFibGVcbiAgIHN0YXRlbWVudCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gIFRoZSBsaW5lIG51bWJlciBtYXkgYmUgcHJlZml4ZWRcbiAgIHdpdGggYSBmaWxlbmFtZSBhbmQgYSBjb2xvbiwgdG8gc3BlY2lmeSBhIGJyZWFrcG9pbnQgaW4gYW5vdGhlclxuICAgZmlsZSAocHJvYmFibHkgb25lIHRoYXQgaGFzblwndCBiZWVuIGxvYWRlZCB5ZXQpLiAgVGhlIGZpbGUgaXNcbiAgIHNlYXJjaGVkIG9uICJzeXMucGF0aCIuICBOb3RlIHRoYXQgZWFjaCBicmVha3BvaW50IGlzIGFzc2lnbmVkIGFcbiAgIG51bWJlciB0byB3aGljaCBhbGwgdGhlIG90aGVyIGJyZWFrcG9pbnQgY29tbWFuZHMgcmVmZXIuXG5cbiAgIElmIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQsIGl0IGlzIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdFxuICAgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC5cblxuICAgV2l0aG91dCBhcmd1bWVudCwgbGlzdCBhbGwgYnJlYWtzLCBpbmNsdWRpbmcgZm9yIGVhY2ggYnJlYWtwb2ludCxcbiAgIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBicmVha3BvaW50IGhhcyBiZWVuIGhpdCwgdGhlIGN1cnJlbnRcbiAgIGlnbm9yZSBjb3VudCwgYW5kIHRoZSBhc3NvY2lhdGVkIGNvbmRpdGlvbiBpZiBhbnkuXG5cbnRicmVhayBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFRlbXBvcmFyeSBicmVha3BvaW50LCB3aGljaCBpcyByZW1vdmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpc1xuICAgZmlyc3QgaGl0LiBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgImJyZWFrIi5cblxuY2woZWFyKSBbZmlsZW5hbWU6bGluZW5vIHwgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIFdpdGggYSAqZmlsZW5hbWU6bGluZW5vKiBhcmd1bWVudCwgY2xlYXIgYWxsIHRoZSBicmVha3BvaW50cyBhdFxuICAgdGhpcyBsaW5lLiBXaXRoIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnJlYWtwb2ludCBudW1iZXJzLCBjbGVhclxuICAgdGhvc2UgYnJlYWtwb2ludHMuIFdpdGhvdXQgYXJndW1lbnQsIGNsZWFyIGFsbCBicmVha3MgKGJ1dCBmaXJzdFxuICAgYXNrIGNvbmZpcm1hdGlvbikuXG5cbmRpc2FibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBEaXNhYmxlIHRoZSBicmVha3BvaW50cyBnaXZlbiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mXG4gICBicmVha3BvaW50IG51bWJlcnMuICBEaXNhYmxpbmcgYSBicmVha3BvaW50IG1lYW5zIGl0IGNhbm5vdCBjYXVzZVxuICAgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24sIGJ1dCB1bmxpa2UgY2xlYXJpbmcgYSBicmVha3BvaW50LCBpdFxuICAgcmVtYWlucyBpbiB0aGUgbGlzdCBvZiBicmVha3BvaW50cyBhbmQgY2FuIGJlIChyZS0pZW5hYmxlZC5cblxuZW5hYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRW5hYmxlIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG5cbmlnbm9yZSBicG51bWJlciBbY291bnRdXG5cbiAgIFNldCB0aGUgaWdub3JlIGNvdW50IGZvciB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBudW1iZXIuICBJZiBjb3VudCBpc1xuICAgb21pdHRlZCwgdGhlIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludCBiZWNvbWVzIGFjdGl2ZVxuICAgd2hlbiB0aGUgaWdub3JlIGNvdW50IGlzIHplcm8uICBXaGVuIG5vbi16ZXJvLCB0aGUgY291bnQgaXNcbiAgIGRlY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgYnJlYWtwb2ludCBpcyByZWFjaGVkIGFuZCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuXG5cbmNvbmRpdGlvbiBicG51bWJlciBbY29uZGl0aW9uXVxuXG4gICBTZXQgYSBuZXcgKmNvbmRpdGlvbiogZm9yIHRoZSBicmVha3BvaW50LCBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuICBJZiAqY29uZGl0aW9uKlxuICAgaXMgYWJzZW50LCBhbnkgZXhpc3RpbmcgY29uZGl0aW9uIGlzIHJlbW92ZWQ7IGkuZS4sIHRoZSBicmVha3BvaW50XG4gICBpcyBtYWRlIHVuY29uZGl0aW9uYWwuXG5cbmNvbW1hbmRzIFticG51bWJlcl1cblxuICAgU3BlY2lmeSBhIGxpc3Qgb2YgY29tbWFuZHMgZm9yIGJyZWFrcG9pbnQgbnVtYmVyICpicG51bWJlciouICBUaGVcbiAgIGNvbW1hbmRzIHRoZW1zZWx2ZXMgYXBwZWFyIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuICBUeXBlIGEgbGluZVxuICAgY29udGFpbmluZyBqdXN0ICJlbmQiIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZHMuIEFuIGV4YW1wbGU6XG5cbiAgICAgIChQZGIpIGNvbW1hbmRzIDFcbiAgICAgIChjb20pIHByaW50IHNvbWVfdmFyaWFibGVcbiAgICAgIChjb20pIGVuZFxuICAgICAgKFBkYilcblxuICAgVG8gcmVtb3ZlIGFsbCBjb21tYW5kcyBmcm9tIGEgYnJlYWtwb2ludCwgdHlwZSBjb21tYW5kcyBhbmQgZm9sbG93XG4gICBpdCBpbW1lZGlhdGVseSB3aXRoICJlbmQiOyB0aGF0IGlzLCBnaXZlIG5vIGNvbW1hbmRzLlxuXG4gICBXaXRoIG5vICpicG51bWJlciogYXJndW1lbnQsIGNvbW1hbmRzIHJlZmVycyB0byB0aGUgbGFzdCBicmVha3BvaW50XG4gICBzZXQuXG5cbiAgIFlvdSBjYW4gdXNlIGJyZWFrcG9pbnQgY29tbWFuZHMgdG8gc3RhcnQgeW91ciBwcm9ncmFtIHVwIGFnYWluLlxuICAgU2ltcGx5IHVzZSB0aGUgY29udGludWUgY29tbWFuZCwgb3Igc3RlcCwgb3IgYW55IG90aGVyIGNvbW1hbmQgdGhhdFxuICAgcmVzdW1lcyBleGVjdXRpb24uXG5cbiAgIFNwZWNpZnlpbmcgYW55IGNvbW1hbmQgcmVzdW1pbmcgZXhlY3V0aW9uIChjdXJyZW50bHkgY29udGludWUsXG4gICBzdGVwLCBuZXh0LCByZXR1cm4sIGp1bXAsIHF1aXQgYW5kIHRoZWlyIGFiYnJldmlhdGlvbnMpIHRlcm1pbmF0ZXNcbiAgIHRoZSBjb21tYW5kIGxpc3QgKGFzIGlmIHRoYXQgY29tbWFuZCB3YXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnlcbiAgIGVuZCkuIFRoaXMgaXMgYmVjYXVzZSBhbnkgdGltZSB5b3UgcmVzdW1lIGV4ZWN1dGlvbiAoZXZlbiB3aXRoIGFcbiAgIHNpbXBsZSBuZXh0IG9yIHN0ZXApLCB5b3UgbWF5IGVuY291bnRlciBhbm90aGVyIGJyZWFrcG9pbnQtLXdoaWNoXG4gICBjb3VsZCBoYXZlIGl0cyBvd24gY29tbWFuZCBsaXN0LCBsZWFkaW5nIHRvIGFtYmlndWl0aWVzIGFib3V0IHdoaWNoXG4gICBsaXN0IHRvIGV4ZWN1dGUuXG5cbiAgIElmIHlvdSB1c2UgdGhlIFwnc2lsZW50XCcgY29tbWFuZCBpbiB0aGUgY29tbWFuZCBsaXN0LCB0aGUgdXN1YWxcbiAgIG1lc3NhZ2UgYWJvdXQgc3RvcHBpbmcgYXQgYSBicmVha3BvaW50IGlzIG5vdCBwcmludGVkLiAgVGhpcyBtYXkgYmVcbiAgIGRlc2lyYWJsZSBmb3IgYnJlYWtwb2ludHMgdGhhdCBhcmUgdG8gcHJpbnQgYSBzcGVjaWZpYyBtZXNzYWdlIGFuZFxuICAgdGhlbiBjb250aW51ZS4gIElmIG5vbmUgb2YgdGhlIG90aGVyIGNvbW1hbmRzIHByaW50IGFueXRoaW5nLCB5b3VcbiAgIHNlZSBubyBzaWduIHRoYXQgdGhlIGJyZWFrcG9pbnQgd2FzIHJlYWNoZWQuXG5cbnModGVwKVxuXG4gICBFeGVjdXRlIHRoZSBjdXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG9jY2FzaW9uXG4gICAoZWl0aGVyIGluIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb3Igb24gdGhlIG5leHQgbGluZSBpbiB0aGVcbiAgIGN1cnJlbnQgZnVuY3Rpb24pLlxuXG5uKGV4dClcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXNcbiAgIHJlYWNoZWQgb3IgaXQgcmV0dXJucy4gIChUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuICJuZXh0IiBhbmQgInN0ZXAiXG4gICBpcyB0aGF0ICJzdGVwIiBzdG9wcyBpbnNpZGUgYSBjYWxsZWQgZnVuY3Rpb24sIHdoaWxlICJuZXh0IlxuICAgZXhlY3V0ZXMgY2FsbGVkIGZ1bmN0aW9ucyBhdCAobmVhcmx5KSBmdWxsIHNwZWVkLCBvbmx5IHN0b3BwaW5nIGF0XG4gICB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLilcblxudW50KGlsKSBbbGluZW5vXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBpcyByZWFjaGVkLlxuXG4gICBXaXRoIGEgbGluZSBudW1iZXIsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCBhIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGF0IGlzIHJlYWNoZWQuICBJbiBib3RoIGNhc2VzLCBhbHNvIHN0b3Agd2hlblxuICAgdGhlIGN1cnJlbnQgZnJhbWUgcmV0dXJucy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogQWxsb3cgZ2l2aW5nIGFuIGV4cGxpY2l0IGxpbmUgbnVtYmVyLlxuXG5yKGV0dXJuKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucy5cblxuYyhvbnQoaW51ZSkpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiwgb25seSBzdG9wIHdoZW4gYSBicmVha3BvaW50IGlzIGVuY291bnRlcmVkLlxuXG5qKHVtcCkgbGluZW5vXG5cbiAgIFNldCB0aGUgbmV4dCBsaW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4gIE9ubHkgYXZhaWxhYmxlIGluIHRoZVxuICAgYm90dG9tLW1vc3QgZnJhbWUuICBUaGlzIGxldHMgeW91IGp1bXAgYmFjayBhbmQgZXhlY3V0ZSBjb2RlIGFnYWluLFxuICAgb3IganVtcCBmb3J3YXJkIHRvIHNraXAgY29kZSB0aGF0IHlvdSBkb25cJ3Qgd2FudCB0byBydW4uXG5cbiAgIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IG5vdCBhbGwganVtcHMgYXJlIGFsbG93ZWQgLS0gZm9yIGluc3RhbmNlXG4gICBpdCBpcyBub3QgcG9zc2libGUgdG8ganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYSAiZm9yIiBsb29wIG9yIG91dFxuICAgb2YgYSAiZmluYWxseSIgY2xhdXNlLlxuXG5sKGlzdCkgW2ZpcnN0WywgbGFzdF1dXG5cbiAgIExpc3Qgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZpbGUuICBXaXRob3V0IGFyZ3VtZW50cywgbGlzdCAxMVxuICAgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUgb3IgY29udGludWUgdGhlIHByZXZpb3VzIGxpc3RpbmcuXG4gICBXaXRoICIuIiBhcyBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZS4gIFdpdGhcbiAgIG9uZSBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBhcm91bmQgYXQgdGhhdCBsaW5lLiAgV2l0aCB0d29cbiAgIGFyZ3VtZW50cywgbGlzdCB0aGUgZ2l2ZW4gcmFuZ2U7IGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbGVzc1xuICAgdGhhbiB0aGUgZmlyc3QsIGl0IGlzIGludGVycHJldGVkIGFzIGEgY291bnQuXG5cbiAgIFRoZSBjdXJyZW50IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUgaXMgaW5kaWNhdGVkIGJ5ICItPiIuICBJZiBhblxuICAgZXhjZXB0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkLCB0aGUgbGluZSB3aGVyZSB0aGUgZXhjZXB0aW9uIHdhc1xuICAgb3JpZ2luYWxseSByYWlzZWQgb3IgcHJvcGFnYXRlZCBpcyBpbmRpY2F0ZWQgYnkgIj4+IiwgaWYgaXQgZGlmZmVyc1xuICAgZnJvbSB0aGUgY3VycmVudCBsaW5lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSAiPj4iIG1hcmtlci5cblxubGwgfCBsb25nbGlzdFxuXG4gICBMaXN0IGFsbCBzb3VyY2UgY29kZSBmb3IgdGhlIGN1cnJlbnQgZnVuY3Rpb24gb3IgZnJhbWUuXG4gICBJbnRlcmVzdGluZyBsaW5lcyBhcmUgbWFya2VkIGFzIGZvciAibGlzdCIuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuYShyZ3MpXG5cbiAgIFByaW50IHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLlxuXG5wKHJpbnQpIGV4cHJlc3Npb25cblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiBpbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwcmludCBpdHNcbiAgIHZhbHVlLlxuXG5wcCBleHByZXNzaW9uXG5cbiAgIExpa2UgdGhlICJwcmludCIgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpc1xuICAgcHJldHR5LXByaW50ZWQgdXNpbmcgdGhlICJwcHJpbnQiIG1vZHVsZS5cblxud2hhdGlzIGV4cHJlc3Npb25cblxuICAgUHJpbnQgdGhlIHR5cGUgb2YgdGhlICpleHByZXNzaW9uKi5cblxuc291cmNlIGV4cHJlc3Npb25cblxuICAgVHJ5IHRvIGdldCBzb3VyY2UgY29kZSBmb3IgdGhlIGdpdmVuIG9iamVjdCBhbmQgZGlzcGxheSBpdC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEaXNwbGF5IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpZiBpdCBjaGFuZ2VkLCBlYWNoIHRpbWVcbiAgIGV4ZWN1dGlvbiBzdG9wcyBpbiB0aGUgY3VycmVudCBmcmFtZS5cblxuICAgV2l0aG91dCBleHByZXNzaW9uLCBsaXN0IGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxudW5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEbyBub3QgZGlzcGxheSB0aGUgZXhwcmVzc2lvbiBhbnkgbW9yZSBpbiB0aGUgY3VycmVudCBmcmFtZS5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgY2xlYXIgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50XG4gICBmcmFtZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5pbnRlcmFjdFxuXG4gICBTdGFydCBhbiBpbnRlcmF0aXZlIGludGVycHJldGVyICh1c2luZyB0aGUgImNvZGUiIG1vZHVsZSkgd2hvc2VcbiAgIGdsb2JhbCBuYW1lc3BhY2UgY29udGFpbnMgYWxsIHRoZSAoZ2xvYmFsIGFuZCBsb2NhbCkgbmFtZXMgZm91bmQgaW5cbiAgIHRoZSBjdXJyZW50IHNjb3BlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmFsaWFzIFtuYW1lIFtjb21tYW5kXV1cblxuICAgQ3JlYXRlIGFuIGFsaWFzIGNhbGxlZCAqbmFtZSogdGhhdCBleGVjdXRlcyAqY29tbWFuZCouICBUaGUgY29tbWFuZFxuICAgbXVzdCAqbm90KiBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuICBSZXBsYWNlYWJsZSBwYXJhbWV0ZXJzIGNhbiBiZVxuICAgaW5kaWNhdGVkIGJ5ICIlMSIsICIlMiIsIGFuZCBzbyBvbiwgd2hpbGUgIiUqIiBpcyByZXBsYWNlZCBieSBhbGxcbiAgIHRoZSBwYXJhbWV0ZXJzLiBJZiBubyBjb21tYW5kIGlzIGdpdmVuLCB0aGUgY3VycmVudCBhbGlhcyBmb3JcbiAgICpuYW1lKiBpcyBzaG93bi4gSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgYWxsIGFsaWFzZXMgYXJlIGxpc3RlZC5cblxuICAgQWxpYXNlcyBtYXkgYmUgbmVzdGVkIGFuZCBjYW4gY29udGFpbiBhbnl0aGluZyB0aGF0IGNhbiBiZSBsZWdhbGx5XG4gICB0eXBlZCBhdCB0aGUgcGRiIHByb21wdC4gIE5vdGUgdGhhdCBpbnRlcm5hbCBwZGIgY29tbWFuZHMgKmNhbiogYmVcbiAgIG92ZXJyaWRkZW4gYnkgYWxpYXNlcy4gIFN1Y2ggYSBjb21tYW5kIGlzIHRoZW4gaGlkZGVuIHVudGlsIHRoZVxuICAgYWxpYXMgaXMgcmVtb3ZlZC4gIEFsaWFzaW5nIGlzIHJlY3Vyc2l2ZWx5IGFwcGxpZWQgdG8gdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBvdGhlciB3b3JkcyBpbiB0aGUgbGluZSBhcmUgbGVmdFxuICAgYWxvbmUuXG5cbiAgIEFzIGFuIGV4YW1wbGUsIGhlcmUgYXJlIHR3byB1c2VmdWwgYWxpYXNlcyAoZXNwZWNpYWxseSB3aGVuIHBsYWNlZFxuICAgaW4gdGhlICIucGRicmMiIGZpbGUpOlxuXG4gICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyAodXNhZ2UgInBpIGNsYXNzSW5zdCIpXG4gICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50KCIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdKVxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgaW4gc2VsZlxuICAgICAgYWxpYXMgcHMgcGkgc2VsZlxuXG51bmFsaWFzIG5hbWVcblxuICAgRGVsZXRlIHRoZSBzcGVjaWZpZWQgYWxpYXMuXG5cbiEgc3RhdGVtZW50XG5cbiAgIEV4ZWN1dGUgdGhlIChvbmUtbGluZSkgKnN0YXRlbWVudCogaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnRcbiAgIHN0YWNrIGZyYW1lLiBUaGUgZXhjbGFtYXRpb24gcG9pbnQgY2FuIGJlIG9taXR0ZWQgdW5sZXNzIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgc3RhdGVtZW50IHJlc2VtYmxlcyBhIGRlYnVnZ2VyIGNvbW1hbmQuICBUbyBzZXQgYVxuICAgZ2xvYmFsIHZhcmlhYmxlLCB5b3UgY2FuIHByZWZpeCB0aGUgYXNzaWdubWVudCBjb21tYW5kIHdpdGggYVxuICAgImdsb2JhbCIgc3RhdGVtZW50IG9uIHRoZSBzYW1lIGxpbmUsIGUuZy46XG5cbiAgICAgIChQZGIpIGdsb2JhbCBsaXN0X29wdGlvbnM7IGxpc3Rfb3B0aW9ucyA9IFtcJy1sXCddXG4gICAgICAoUGRiKVxuXG5ydW4gW2FyZ3MgLi4uXVxucmVzdGFydCBbYXJncyAuLi5dXG5cbiAgIFJlc3RhcnQgdGhlIGRlYnVnZ2VkIFB5dGhvbiBwcm9ncmFtLiAgSWYgYW4gYXJndW1lbnQgaXMgc3VwcGxpZWQsXG4gICBpdCBpcyBzcGxpdCB3aXRoICJzaGxleCIgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3XG4gICAic3lzLmFyZ3YiLiBIaXN0b3J5LCBicmVha3BvaW50cywgYWN0aW9ucyBhbmQgZGVidWdnZXIgb3B0aW9ucyBhcmVcbiAgIHByZXNlcnZlZC4gInJlc3RhcnQiIGlzIGFuIGFsaWFzIGZvciAicnVuIi5cblxucSh1aXQpXG5cbiAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuICBUaGUgcHJvZ3JhbSBiZWluZyBleGVjdXRlZCBpcyBhYm9ydGVkLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoZXRoZXIgYSBmcmFtZSBpcyBjb25zaWRlcmVkIHRvIG9yaWdpbmF0ZSBpbiBhIGNlcnRhaW4gbW9kdWxlXG4gICAgaXMgZGV0ZXJtaW5lZCBieSB0aGUgIl9fbmFtZV9fIiBpbiB0aGUgZnJhbWUgZ2xvYmFscy5cbicsCisgJ2N1c3RvbWl6YXRpb24nOiAnXG5CYXNpYyBjdXN0b21pemF0aW9uXG4qKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICAiX19uZXdfXygpIiBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiAiX19uZXdfXygpIiBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHkgYW5cbiAgIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgIl9fbmV3X18oKSIgbWV0aG9kIHVzaW5nXG4gICAic3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSkiIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiAiX19uZXdfXygpIiByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgICJfX2luaXRfXyhzZWxmWywgLi4uXSkiLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byAiX19uZXdfXygpIi5cblxuICAgSWYgIl9fbmV3X18oKSIgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgIl9fbmV3X18oKSIgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgIl9faW5pdF9fKCkiIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCwgaWZcbiAgIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZiB0aGVcbiAgIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgIkJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pIi4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50IG9uXG4gICBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICAiVHlwZUVycm9yIiB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSAiX19kZWxfXygpIiBtZXRob2QsIHRoZVxuICAgZGVyaXZlZCBjbGFzc1wncyAiX19kZWxfXygpIiBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXRcbiAgIHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2UuXG4gICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3IgdGhlXG4gICAiX19kZWxfXygpIiBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiAiZGVsIHgiIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgInguX19kZWxfXygpIiAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yICJ4IiBieSBvbmUsIGFuZCB0aGUgbGF0dGVyIGlzXG4gICAgIG9ubHkgY2FsbGVkIHdoZW4gIngiXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lIGNvbW1vblxuICAgICBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhbiBvYmplY3QgZnJvbVxuICAgICBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlbiBvYmplY3RzIChlLmcuLFxuICAgICBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBwYXJlbnQgYW5kXG4gICAgIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgb2ZcbiAgICAgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgICJzeXMuZXhjX2luZm8oKVsyXSIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3IgYSByZWZlcmVuY2VcbiAgICAgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW4gdW5oYW5kbGVkXG4gICAgIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmxhc3RfdHJhY2ViYWNrIiBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgIk5vbmUiIGluXG4gICAgICJzeXMubGFzdF90cmFjZWJhY2siLiBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZVxuICAgICBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCB3aGVuIHRoZSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0b3IgaXNcbiAgICAgZW5hYmxlZCAoaXRcJ3Mgb24gYnkgZGVmYXVsdCkuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgImdjIiBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYy5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2hcbiAgICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZ1xuICAgICB0aGVpciBleGVjdXRpb24gYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0b1xuICAgICAic3lzLnN0ZGVyciIgaW5zdGVhZC4gQWxzbywgd2hlbiAiX19kZWxfXygpIiBpcyBpbnZva2VkIGluXG4gICAgIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZVxuICAgICBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlciBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlICJfX2RlbF9fKCkiXG4gICAgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZ1xuICAgICB0b3JuIGRvd24gKGUuZy4gdGhlIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpc1xuICAgICByZWFzb24sICJfX2RlbF9fKCkiIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZFxuICAgICB0byBtYWludGFpbiBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSxcbiAgICAgUHl0aG9uIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgIl9fZGVsX18oKSIgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgInJlcHIoKSIgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgIm9mZmljaWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpc1xuICAgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZCB0b1xuICAgcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgICI8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+IiBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgIl9fcmVwcl9fKCkiIGJ1dFxuICAgbm90ICJfX3N0cl9fKCkiLCB0aGVuICJfX3JlcHJfXygpIiBpcyBhbHNvIHVzZWQgd2hlbiBhbiAiaW5mb3JtYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXMgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJzdHIob2JqZWN0KSIgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImZvcm1hdCgpIiBhbmRcbiAgICJwcmludCgpIiB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGUgc3RyaW5nXG4gICByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSAqc3RyaW5nKlxuICAgb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gIm9iamVjdC5fX3JlcHJfXygpIiBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0ICJfX3N0cl9fKCkiIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSAib2JqZWN0IlxuICAgY2FsbHMgIm9iamVjdC5fX3JlcHJfXygpIi5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgImJ5dGVzKCkiIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSAiYnl0ZXMiIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgImZvcm1hdCgpIiBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICAic3RyLmZvcm1hdCgpIiBtZXRob2Qgb2YgY2xhc3MgInN0ciIpIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgYVxuICAgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgdXAgdG9cbiAgIHRoZSB0eXBlIGltcGxlbWVudGluZyAiX19mb3JtYXRfXygpIiwgaG93ZXZlciBtb3N0IGNsYXNzZXMgd2lsbFxuICAgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3IgdXNlIGFcbiAgIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogIng8eSIgY2FsbHMgInguX19sdF9fKHkpIiwgIng8PXkiIGNhbGxzICJ4Ll9fbGVfXyh5KSIsXG4gICAieD09eSIgY2FsbHMgInguX19lcV9fKHkpIiwgInghPXkiIGNhbGxzICJ4Ll9fbmVfXyh5KSIsICJ4PnkiIGNhbGxzXG4gICAieC5fX2d0X18oeSkiLCBhbmQgIng+PXkiIGNhbGxzICJ4Ll9fZ2VfXyh5KSIuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b24gIk5vdEltcGxlbWVudGVkIlxuICAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGEgZ2l2ZW4gcGFpciBvZlxuICAgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCAiRmFsc2UiIGFuZCAiVHJ1ZSIgYXJlIHJldHVybmVkIGZvciBhXG4gICBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuIHJldHVybiBhbnkgdmFsdWUsXG4gICBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGEgQm9vbGVhbiBjb250ZXh0IChlLmcuLFxuICAgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiAiaWYiIHN0YXRlbWVudCksIFB5dGhvbiB3aWxsIGNhbGwgImJvb2woKSJcbiAgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdCBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiAieD09eSIgZG9lcyBub3QgaW1wbHkgdGhhdCAieCE9eSIgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyAiX19lcV9fKCkiLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICAiX19uZV9fKCkiIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZSB0aGVcbiAgIHBhcmFncmFwaCBvbiAiX19oYXNoX18oKSIgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uIGNyZWF0aW5nXG4gICAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZFxuICAgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsICJfX2x0X18oKSIgYW5kICJfX2d0X18oKSIgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sICJfX2xlX18oKSIgYW5kICJfX2dlX18oKSIgYXJlIGVhY2ggb3RoZXJcJ3MgcmVmbGVjdGlvbixcbiAgIGFuZCAiX19lcV9fKCkiIGFuZCAiX19uZV9fKCkiIGFyZSB0aGVpciBvd24gcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSAiZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKCkiLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uICJoYXNoKCkiIGFuZCBmb3Igb3BlcmF0aW9ucyBvbiBtZW1iZXJzXG4gICBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nICJzZXQiLCAiZnJvemVuc2V0IiwgYW5kICJkaWN0Ii5cbiAgICJfX2hhc2hfXygpIiBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seSByZXF1aXJlZCBwcm9wZXJ0eVxuICAgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZSBoYXNoIHZhbHVlOyBpdCBpc1xuICAgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZyBleGNsdXNpdmUgb3IpIHRoZSBoYXNoXG4gICB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdCBhbHNvIHBsYXkgYSBwYXJ0IGluXG4gICBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6ICJoYXNoKCkiIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3NcbiAgICAgY3VzdG9tICJfX2hhc2hfXygpIiBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSAiUHlfc3NpemVfdCIuICBUaGlzXG4gICAgIGlzIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0XG4gICAgIGJ1aWxkcy4gSWYgYW4gb2JqZWN0XCdzICAgIl9faGFzaF9fKCkiIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkc1xuICAgICBvZiBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGxcbiAgICAgc3VwcG9ydGVkIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCAicHl0aG9uIC1jXG4gICAgICJpbXBvcnQgc3lzOyBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSIiXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuICJfX2VxX18oKSIgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhICJfX2hhc2hfXygpIiBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzICJfX2VxX18oKSJcbiAgIGJ1dCBub3QgIl9faGFzaF9fKCkiLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBhcyBpdGVtcyBpblxuICAgaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXMgbXV0YWJsZSBvYmplY3RzIGFuZFxuICAgaW1wbGVtZW50cyBhbiAiX19lcV9fKCkiIG1ldGhvZCwgaXQgc2hvdWxkIG5vdCBpbXBsZW1lbnRcbiAgICJfX2hhc2hfXygpIiwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlIGNvbGxlY3Rpb25zXG4gICByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGUgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSAiX19lcV9fKCkiIGFuZCAiX19oYXNoX18oKSIgbWV0aG9kcyBieVxuICAgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgInguX19oYXNoX18oKSIgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0ICJ4ID09IHkiIGltcGxpZXMgYm90aCB0aGF0ICJ4IGlzIHkiIGFuZCAiaGFzaCh4KSA9PSBoYXNoKHkpIi5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIGFuZCBkb2VzIG5vdCBkZWZpbmUgIl9faGFzaF9fKCkiXG4gICB3aWxsIGhhdmUgaXRzICJfX2hhc2hfXygpIiBpbXBsaWNpdGx5IHNldCB0byAiTm9uZSIuICBXaGVuIHRoZVxuICAgIl9faGFzaF9fKCkiIG1ldGhvZCBvZiBhIGNsYXNzIGlzICJOb25lIiwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzc1xuICAgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSAiVHlwZUVycm9yIiB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0b1xuICAgcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUiKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mICJfX2hhc2hfXygpIiBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGUgaW50ZXJwcmV0ZXJcbiAgIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyAiX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfXyIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSAiX19lcV9fKCkiIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSAiX19oYXNoX18gPSBOb25lIiBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duICJfX2hhc2hfXygpIiB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhICJUeXBlRXJyb3IiIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIGhhc2hhYmxlIGJ5IGFuICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIiBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgIl9faGFzaF9fKCkiIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZFxuICAgICBkYXRldGltZSBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvICJQWVRIT05IQVNIU0VFRCIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgICJib29sKCkiOyBzaG91bGQgcmV0dXJuICJGYWxzZSIgb3IgIlRydWUiLiAgV2hlbiB0aGlzIG1ldGhvZCBpcyBub3RcbiAgIGRlZmluZWQsICJfX2xlbl9fKCkiIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgIl9fbGVuX18oKSIgbm9yICJfX2Jvb2xfXygpIiwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG4nLAorICdkZWJ1Z2dlcic6ICdcbiJwZGIiIC0tLSBUaGUgUHl0aG9uIERlYnVnZ2VyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgbW9kdWxlICJwZGIiIGRlZmluZXMgYW4gaW50ZXJhY3RpdmUgc291cmNlIGNvZGUgZGVidWdnZXIgZm9yXG5QeXRob24gcHJvZ3JhbXMuICBJdCBzdXBwb3J0cyBzZXR0aW5nIChjb25kaXRpb25hbCkgYnJlYWtwb2ludHMgYW5kXG5zaW5nbGUgc3RlcHBpbmcgYXQgdGhlIHNvdXJjZSBsaW5lIGxldmVsLCBpbnNwZWN0aW9uIG9mIHN0YWNrIGZyYW1lcyxcbnNvdXJjZSBjb2RlIGxpc3RpbmcsIGFuZCBldmFsdWF0aW9uIG9mIGFyYml0cmFyeSBQeXRob24gY29kZSBpbiB0aGVcbmNvbnRleHQgb2YgYW55IHN0YWNrIGZyYW1lLiAgSXQgYWxzbyBzdXBwb3J0cyBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmdcbmFuZCBjYW4gYmUgY2FsbGVkIHVuZGVyIHByb2dyYW0gY29udHJvbC5cblxuVGhlIGRlYnVnZ2VyIGlzIGV4dGVuc2libGUgLS0gaXQgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyB0aGUgY2xhc3NcbiJQZGIiLiBUaGlzIGlzIGN1cnJlbnRseSB1bmRvY3VtZW50ZWQgYnV0IGVhc2lseSB1bmRlcnN0b29kIGJ5IHJlYWRpbmdcbnRoZSBzb3VyY2UuICBUaGUgZXh0ZW5zaW9uIGludGVyZmFjZSB1c2VzIHRoZSBtb2R1bGVzICJiZGIiIGFuZCAiY21kIi5cblxuVGhlIGRlYnVnZ2VyXCdzIHByb21wdCBpcyAiKFBkYikiLiBUeXBpY2FsIHVzYWdlIHRvIHJ1biBhIHByb2dyYW0gdW5kZXJcbmNvbnRyb2wgb2YgdGhlIGRlYnVnZ2VyIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IHBkYi5ydW4oXCdteW1vZHVsZS50ZXN0KClcJylcbiAgID4gPHN0cmluZz4oMCk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgTmFtZUVycm9yOiBcJ3NwYW1cJ1xuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYilcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogVGFiLWNvbXBsZXRpb24gdmlhIHRoZSAicmVhZGxpbmUiIG1vZHVsZSBpc1xuYXZhaWxhYmxlIGZvciBjb21tYW5kcyBhbmQgY29tbWFuZCBhcmd1bWVudHMsIGUuZy4gdGhlIGN1cnJlbnQgZ2xvYmFsXG5hbmQgbG9jYWwgbmFtZXMgYXJlIG9mZmVyZWQgYXMgYXJndW1lbnRzIG9mIHRoZSAicCIgY29tbWFuZC5cblxuInBkYi5weSIgY2FuIGFsc28gYmUgaW52b2tlZCBhcyBhIHNjcmlwdCB0byBkZWJ1ZyBvdGhlciBzY3JpcHRzLiAgRm9yXG5leGFtcGxlOlxuXG4gICBweXRob24zIC1tIHBkYiBteXNjcmlwdC5weVxuXG5XaGVuIGludm9rZWQgYXMgYSBzY3JpcHQsIHBkYiB3aWxsIGF1dG9tYXRpY2FsbHkgZW50ZXIgcG9zdC1tb3J0ZW1cbmRlYnVnZ2luZyBpZiB0aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBleGl0cyBhYm5vcm1hbGx5LiAgQWZ0ZXIgcG9zdC1cbm1vcnRlbSBkZWJ1Z2dpbmcgKG9yIGFmdGVyIG5vcm1hbCBleGl0IG9mIHRoZSBwcm9ncmFtKSwgcGRiIHdpbGxcbnJlc3RhcnQgdGhlIHByb2dyYW0uICBBdXRvbWF0aWMgcmVzdGFydGluZyBwcmVzZXJ2ZXMgcGRiXCdzIHN0YXRlIChzdWNoXG5hcyBicmVha3BvaW50cykgYW5kIGluIG1vc3QgY2FzZXMgaXMgbW9yZSB1c2VmdWwgdGhhbiBxdWl0dGluZyB0aGVcbmRlYnVnZ2VyIHVwb24gcHJvZ3JhbVwncyBleGl0LlxuXG5OZXcgaW4gdmVyc2lvbiAzLjI6ICJwZGIucHkiIG5vdyBhY2NlcHRzIGEgIi1jIiBvcHRpb24gdGhhdCBleGVjdXRlc1xuY29tbWFuZHMgYXMgaWYgZ2l2ZW4gaW4gYSAiLnBkYnJjIiBmaWxlLCBzZWUgKkRlYnVnZ2VyIENvbW1hbmRzKi5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIgZnJvbSBhIHJ1bm5pbmcgcHJvZ3JhbSBpc1xudG8gaW5zZXJ0XG5cbiAgIGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKVxuXG5hdCB0aGUgbG9jYXRpb24geW91IHdhbnQgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIuICBZb3UgY2FuIHRoZW5cbnN0ZXAgdGhyb3VnaCB0aGUgY29kZSBmb2xsb3dpbmcgdGhpcyBzdGF0ZW1lbnQsIGFuZCBjb250aW51ZSBydW5uaW5nXG53aXRob3V0IHRoZSBkZWJ1Z2dlciB1c2luZyB0aGUgImNvbnRpbnVlIiBjb21tYW5kLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBpbnNwZWN0IGEgY3Jhc2hlZCBwcm9ncmFtIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IG15bW9kdWxlLnRlc3QoKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDQsIGluIHRlc3RcbiAgICAgICB0ZXN0MigpXG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDMsIGluIHRlc3QyXG4gICAgICAgcHJpbnQoc3BhbSlcbiAgIE5hbWVFcnJvcjogc3BhbVxuICAgPj4+IHBkYi5wbSgpXG4gICA+IC4vbXltb2R1bGUucHkoMyl0ZXN0MigpXG4gICAtPiBwcmludChzcGFtKVxuICAgKFBkYilcblxuVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOyBlYWNoIGVudGVycyB0aGUgZGVidWdnZXJcbmluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHdheTpcblxucGRiLnJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV4ZWN1dGUgdGhlICpzdGF0ZW1lbnQqIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KSB1bmRlclxuICAgZGVidWdnZXIgY29udHJvbC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFycyBiZWZvcmUgYW55IGNvZGUgaXNcbiAgIGV4ZWN1dGVkOyB5b3UgY2FuIHNldCBicmVha3BvaW50cyBhbmQgdHlwZSAiY29udGludWUiLCBvciB5b3UgY2FuXG4gICBzdGVwIHRocm91Z2ggdGhlIHN0YXRlbWVudCB1c2luZyAic3RlcCIgb3IgIm5leHQiIChhbGwgdGhlc2VcbiAgIGNvbW1hbmRzIGFyZSBleHBsYWluZWQgYmVsb3cpLiAgVGhlIG9wdGlvbmFsICpnbG9iYWxzKiBhbmQgKmxvY2FscypcbiAgIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgY29kZSBpcyBleGVjdXRlZDsgYnlcbiAgIGRlZmF1bHQgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIG1vZHVsZSAiX19tYWluX18iIGlzIHVzZWQuICAoU2VlIHRoZVxuICAgZXhwbGFuYXRpb24gb2YgdGhlIGJ1aWx0LWluICJleGVjKCkiIG9yICJldmFsKCkiIGZ1bmN0aW9ucy4pXG5cbnBkYi5ydW5ldmFsKGV4cHJlc3Npb24sIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogKGdpdmVuIGFzIGEgc3RyaW5nIG9yIGEgY29kZSBvYmplY3QpXG4gICB1bmRlciBkZWJ1Z2dlciBjb250cm9sLiAgV2hlbiAicnVuZXZhbCgpIiByZXR1cm5zLCBpdCByZXR1cm5zIHRoZVxuICAgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uICBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvXG4gICAicnVuKCkiLlxuXG5wZGIucnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcblxuICAgQ2FsbCB0aGUgKmZ1bmN0aW9uKiAoYSBmdW5jdGlvbiBvciBtZXRob2Qgb2JqZWN0LCBub3QgYSBzdHJpbmcpXG4gICB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuICBXaGVuICJydW5jYWxsKCkiIHJldHVybnMsIGl0IHJldHVybnNcbiAgIHdoYXRldmVyIHRoZSBmdW5jdGlvbiBjYWxsIHJldHVybmVkLiAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzXG4gICBhcyBzb29uIGFzIHRoZSBmdW5jdGlvbiBpcyBlbnRlcmVkLlxuXG5wZGIuc2V0X3RyYWNlKClcblxuICAgRW50ZXIgdGhlIGRlYnVnZ2VyIGF0IHRoZSBjYWxsaW5nIHN0YWNrIGZyYW1lLiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgIGhhcmQtY29kZSBhIGJyZWFrcG9pbnQgYXQgYSBnaXZlbiBwb2ludCBpbiBhIHByb2dyYW0sIGV2ZW4gaWYgdGhlXG4gICBjb2RlIGlzIG5vdCBvdGhlcndpc2UgYmVpbmcgZGVidWdnZWQgKGUuZy4gd2hlbiBhbiBhc3NlcnRpb25cbiAgIGZhaWxzKS5cblxucGRiLnBvc3RfbW9ydGVtKHRyYWNlYmFjaz1Ob25lKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIGdpdmVuICp0cmFjZWJhY2sqIG9iamVjdC4gIElmIG5vXG4gICAqdHJhY2ViYWNrKiBpcyBnaXZlbiwgaXQgdXNlcyB0aGUgb25lIG9mIHRoZSBleGNlcHRpb24gdGhhdCBpc1xuICAgY3VycmVudGx5IGJlaW5nIGhhbmRsZWQgKGFuIGV4Y2VwdGlvbiBtdXN0IGJlIGJlaW5nIGhhbmRsZWQgaWYgdGhlXG4gICBkZWZhdWx0IGlzIHRvIGJlIHVzZWQpLlxuXG5wZGIucG0oKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIHRyYWNlYmFjayBmb3VuZCBpblxuICAgInN5cy5sYXN0X3RyYWNlYmFjayIuXG5cblRoZSAicnVuKiIgZnVuY3Rpb25zIGFuZCAic2V0X3RyYWNlKCkiIGFyZSBhbGlhc2VzIGZvciBpbnN0YW50aWF0aW5nXG50aGUgIlBkYiIgY2xhc3MgYW5kIGNhbGxpbmcgdGhlIG1ldGhvZCBvZiB0aGUgc2FtZSBuYW1lLiAgSWYgeW91IHdhbnRcbnRvIGFjY2VzcyBmdXJ0aGVyIGZlYXR1cmVzLCB5b3UgaGF2ZSB0byBkbyB0aGlzIHlvdXJzZWxmOlxuXG5jbGFzcyBjbGFzcyBwZGIuUGRiKGNvbXBsZXRla2V5PVwndGFiXCcsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBza2lwPU5vbmUsIG5vc2lnaW50PUZhbHNlKVxuXG4gICAiUGRiIiBpcyB0aGUgZGVidWdnZXIgY2xhc3MuXG5cbiAgIFRoZSAqY29tcGxldGVrZXkqLCAqc3RkaW4qIGFuZCAqc3Rkb3V0KiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGVcbiAgIHVuZGVybHlpbmcgImNtZC5DbWQiIGNsYXNzOyBzZWUgdGhlIGRlc2NyaXB0aW9uIHRoZXJlLlxuXG4gICBUaGUgKnNraXAqIGFyZ3VtZW50LCBpZiBnaXZlbiwgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBnbG9iLXN0eWxlXG4gICBtb2R1bGUgbmFtZSBwYXR0ZXJucy4gIFRoZSBkZWJ1Z2dlciB3aWxsIG5vdCBzdGVwIGludG8gZnJhbWVzIHRoYXRcbiAgIG9yaWdpbmF0ZSBpbiBhIG1vZHVsZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZXNlIHBhdHRlcm5zLiBbMV1cblxuICAgQnkgZGVmYXVsdCwgUGRiIHNldHMgYSBoYW5kbGVyIGZvciB0aGUgU0lHSU5UIHNpZ25hbCAod2hpY2ggaXMgc2VudFxuICAgd2hlbiB0aGUgdXNlciBwcmVzc2VzIEN0cmwtQyBvbiB0aGUgY29uc29sZSkgd2hlbiB5b3UgZ2l2ZSBhXG4gICAiY29udGludWUiIGNvbW1hbmQuIFRoaXMgYWxsb3dzIHlvdSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlclxuICAgYWdhaW4gYnkgcHJlc3NpbmcgQ3RybC1DLiAgSWYgeW91IHdhbnQgUGRiIG5vdCB0byB0b3VjaCB0aGUgU0lHSU5UXG4gICBoYW5kbGVyLCBzZXQgKm5vc2lnaW50KiB0b3QgdHJ1ZS5cblxuICAgRXhhbXBsZSBjYWxsIHRvIGVuYWJsZSB0cmFjaW5nIHdpdGggKnNraXAqOlxuXG4gICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9W1wnZGphbmdvLipcJ10pLnNldF90cmFjZSgpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMTogVGhlICpza2lwKiBhcmd1bWVudC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yOiBUaGUgKm5vc2lnaW50KiBhcmd1bWVudC4gIFByZXZpb3VzbHksIGEgU0lHSU5UXG4gICBoYW5kbGVyIHdhcyBuZXZlciBzZXQgYnkgUGRiLlxuXG4gICBydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcbiAgIHNldF90cmFjZSgpXG5cbiAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZ1bmN0aW9ucyBleHBsYWluZWQgYWJvdmUuXG5cblxuRGVidWdnZXIgQ29tbWFuZHNcbj09PT09PT09PT09PT09PT09XG5cblRoZSBjb21tYW5kcyByZWNvZ25pemVkIGJ5IHRoZSBkZWJ1Z2dlciBhcmUgbGlzdGVkIGJlbG93LiAgTW9zdFxuY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIG9uZSBvciB0d28gbGV0dGVycyBhcyBpbmRpY2F0ZWQ7IGUuZy5cbiJoKGVscCkiIG1lYW5zIHRoYXQgZWl0aGVyICJoIiBvciAiaGVscCIgY2FuIGJlIHVzZWQgdG8gZW50ZXIgdGhlIGhlbHBcbmNvbW1hbmQgKGJ1dCBub3QgImhlIiBvciAiaGVsIiwgbm9yICJIIiBvciAiSGVscCIgb3IgIkhFTFAiKS5cbkFyZ3VtZW50cyB0byBjb21tYW5kcyBtdXN0IGJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlIChzcGFjZXMgb3JcbnRhYnMpLiAgT3B0aW9uYWwgYXJndW1lbnRzIGFyZSBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMgKCJbXSIpIGluXG50aGUgY29tbWFuZCBzeW50YXg7IHRoZSBzcXVhcmUgYnJhY2tldHMgbXVzdCBub3QgYmUgdHlwZWQuXG5BbHRlcm5hdGl2ZXMgaW4gdGhlIGNvbW1hbmQgc3ludGF4IGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbCBiYXJcbigifCIpLlxuXG5FbnRlcmluZyBhIGJsYW5rIGxpbmUgcmVwZWF0cyB0aGUgbGFzdCBjb21tYW5kIGVudGVyZWQuICBFeGNlcHRpb246IGlmXG50aGUgbGFzdCBjb21tYW5kIHdhcyBhICJsaXN0IiBjb21tYW5kLCB0aGUgbmV4dCAxMSBsaW5lcyBhcmUgbGlzdGVkLlxuXG5Db21tYW5kcyB0aGF0IHRoZSBkZWJ1Z2dlciBkb2VzblwndCByZWNvZ25pemUgYXJlIGFzc3VtZWQgdG8gYmUgUHl0aG9uXG5zdGF0ZW1lbnRzIGFuZCBhcmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkLiAgUHl0aG9uIHN0YXRlbWVudHMgY2FuIGFsc28gYmUgcHJlZml4ZWQgd2l0aCBhbiBleGNsYW1hdGlvblxucG9pbnQgKCIhIikuICBUaGlzIGlzIGEgcG93ZXJmdWwgd2F5IHRvIGluc3BlY3QgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkOyBpdCBpcyBldmVuIHBvc3NpYmxlIHRvIGNoYW5nZSBhIHZhcmlhYmxlIG9yIGNhbGwgYSBmdW5jdGlvbi5cbldoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBzdWNoIGEgc3RhdGVtZW50LCB0aGUgZXhjZXB0aW9uIG5hbWUgaXNcbnByaW50ZWQgYnV0IHRoZSBkZWJ1Z2dlclwncyBzdGF0ZSBpcyBub3QgY2hhbmdlZC5cblxuVGhlIGRlYnVnZ2VyIHN1cHBvcnRzICphbGlhc2VzKi4gIEFsaWFzZXMgY2FuIGhhdmUgcGFyYW1ldGVycyB3aGljaFxuYWxsb3dzIG9uZSBhIGNlcnRhaW4gbGV2ZWwgb2YgYWRhcHRhYmlsaXR5IHRvIHRoZSBjb250ZXh0IHVuZGVyXG5leGFtaW5hdGlvbi5cblxuTXVsdGlwbGUgY29tbWFuZHMgbWF5IGJlIGVudGVyZWQgb24gYSBzaW5nbGUgbGluZSwgc2VwYXJhdGVkIGJ5ICI7OyIuXG4oQSBzaW5nbGUgIjsiIGlzIG5vdCB1c2VkIGFzIGl0IGlzIHRoZSBzZXBhcmF0b3IgZm9yIG11bHRpcGxlIGNvbW1hbmRzXG5pbiBhIGxpbmUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIFB5dGhvbiBwYXJzZXIuKSAgTm8gaW50ZWxsaWdlbmNlIGlzXG5hcHBsaWVkIHRvIHNlcGFyYXRpbmcgdGhlIGNvbW1hbmRzOyB0aGUgaW5wdXQgaXMgc3BsaXQgYXQgdGhlIGZpcnN0XG4iOzsiIHBhaXIsIGV2ZW4gaWYgaXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHF1b3RlZCBzdHJpbmcuXG5cbklmIGEgZmlsZSAiLnBkYnJjIiBleGlzdHMgaW4gdGhlIHVzZXJcJ3MgaG9tZSBkaXJlY3Rvcnkgb3IgaW4gdGhlXG5jdXJyZW50IGRpcmVjdG9yeSwgaXQgaXMgcmVhZCBpbiBhbmQgZXhlY3V0ZWQgYXMgaWYgaXQgaGFkIGJlZW4gdHlwZWRcbmF0IHRoZSBkZWJ1Z2dlciBwcm9tcHQuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGFsaWFzZXMuICBJZlxuYm90aCBmaWxlcyBleGlzdCwgdGhlIG9uZSBpbiB0aGUgaG9tZSBkaXJlY3RvcnkgaXMgcmVhZCBmaXJzdCBhbmRcbmFsaWFzZXMgZGVmaW5lZCB0aGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgbG9jYWwgZmlsZS5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogIi5wZGJyYyIgY2FuIG5vdyBjb250YWluIGNvbW1hbmRzIHRoYXRcbmNvbnRpbnVlIGRlYnVnZ2luZywgc3VjaCBhcyAiY29udGludWUiIG9yICJuZXh0Ii4gIFByZXZpb3VzbHksIHRoZXNlXG5jb21tYW5kcyBoYWQgbm8gZWZmZWN0LlxuXG5oKGVscCkgW2NvbW1hbmRdXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIHByaW50IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy4gIFdpdGggYVxuICAgKmNvbW1hbmQqIGFzIGFyZ3VtZW50LCBwcmludCBoZWxwIGFib3V0IHRoYXQgY29tbWFuZC4gICJoZWxwIHBkYiJcbiAgIGRpc3BsYXlzIHRoZSBmdWxsIGRvY3VtZW50YXRpb24gKHRoZSBkb2NzdHJpbmcgb2YgdGhlICJwZGIiXG4gICBtb2R1bGUpLiAgU2luY2UgdGhlICpjb21tYW5kKiBhcmd1bWVudCBtdXN0IGJlIGFuIGlkZW50aWZpZXIsICJoZWxwXG4gICBleGVjIiBtdXN0IGJlIGVudGVyZWQgdG8gZ2V0IGhlbHAgb24gdGhlICIhIiBjb21tYW5kLlxuXG53KGhlcmUpXG5cbiAgIFByaW50IGEgc3RhY2sgdHJhY2UsIHdpdGggdGhlIG1vc3QgcmVjZW50IGZyYW1lIGF0IHRoZSBib3R0b20uICBBblxuICAgYXJyb3cgaW5kaWNhdGVzIHRoZSBjdXJyZW50IGZyYW1lLCB3aGljaCBkZXRlcm1pbmVzIHRoZSBjb250ZXh0IG9mXG4gICBtb3N0IGNvbW1hbmRzLlxuXG5kKG93bikgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgZG93biBpbiB0aGVcbiAgIHN0YWNrIHRyYWNlICh0byBhIG5ld2VyIGZyYW1lKS5cblxudShwKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyB1cCBpbiB0aGUgc3RhY2tcbiAgIHRyYWNlICh0byBhbiBvbGRlciBmcmFtZSkuXG5cbmIocmVhaykgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBXaXRoIGEgKmxpbmVubyogYXJndW1lbnQsIHNldCBhIGJyZWFrIHRoZXJlIGluIHRoZSBjdXJyZW50IGZpbGUuXG4gICBXaXRoIGEgKmZ1bmN0aW9uKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgYXQgdGhlIGZpcnN0IGV4ZWN1dGFibGVcbiAgIHN0YXRlbWVudCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gIFRoZSBsaW5lIG51bWJlciBtYXkgYmUgcHJlZml4ZWRcbiAgIHdpdGggYSBmaWxlbmFtZSBhbmQgYSBjb2xvbiwgdG8gc3BlY2lmeSBhIGJyZWFrcG9pbnQgaW4gYW5vdGhlclxuICAgZmlsZSAocHJvYmFibHkgb25lIHRoYXQgaGFzblwndCBiZWVuIGxvYWRlZCB5ZXQpLiAgVGhlIGZpbGUgaXNcbiAgIHNlYXJjaGVkIG9uICJzeXMucGF0aCIuICBOb3RlIHRoYXQgZWFjaCBicmVha3BvaW50IGlzIGFzc2lnbmVkIGFcbiAgIG51bWJlciB0byB3aGljaCBhbGwgdGhlIG90aGVyIGJyZWFrcG9pbnQgY29tbWFuZHMgcmVmZXIuXG5cbiAgIElmIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQsIGl0IGlzIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdFxuICAgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC5cblxuICAgV2l0aG91dCBhcmd1bWVudCwgbGlzdCBhbGwgYnJlYWtzLCBpbmNsdWRpbmcgZm9yIGVhY2ggYnJlYWtwb2ludCxcbiAgIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBicmVha3BvaW50IGhhcyBiZWVuIGhpdCwgdGhlIGN1cnJlbnRcbiAgIGlnbm9yZSBjb3VudCwgYW5kIHRoZSBhc3NvY2lhdGVkIGNvbmRpdGlvbiBpZiBhbnkuXG5cbnRicmVhayBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFRlbXBvcmFyeSBicmVha3BvaW50LCB3aGljaCBpcyByZW1vdmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpc1xuICAgZmlyc3QgaGl0LiBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgImJyZWFrIi5cblxuY2woZWFyKSBbZmlsZW5hbWU6bGluZW5vIHwgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIFdpdGggYSAqZmlsZW5hbWU6bGluZW5vKiBhcmd1bWVudCwgY2xlYXIgYWxsIHRoZSBicmVha3BvaW50cyBhdFxuICAgdGhpcyBsaW5lLiBXaXRoIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnJlYWtwb2ludCBudW1iZXJzLCBjbGVhclxuICAgdGhvc2UgYnJlYWtwb2ludHMuIFdpdGhvdXQgYXJndW1lbnQsIGNsZWFyIGFsbCBicmVha3MgKGJ1dCBmaXJzdFxuICAgYXNrIGNvbmZpcm1hdGlvbikuXG5cbmRpc2FibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBEaXNhYmxlIHRoZSBicmVha3BvaW50cyBnaXZlbiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mXG4gICBicmVha3BvaW50IG51bWJlcnMuICBEaXNhYmxpbmcgYSBicmVha3BvaW50IG1lYW5zIGl0IGNhbm5vdCBjYXVzZVxuICAgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24sIGJ1dCB1bmxpa2UgY2xlYXJpbmcgYSBicmVha3BvaW50LCBpdFxuICAgcmVtYWlucyBpbiB0aGUgbGlzdCBvZiBicmVha3BvaW50cyBhbmQgY2FuIGJlIChyZS0pZW5hYmxlZC5cblxuZW5hYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRW5hYmxlIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG5cbmlnbm9yZSBicG51bWJlciBbY291bnRdXG5cbiAgIFNldCB0aGUgaWdub3JlIGNvdW50IGZvciB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBudW1iZXIuICBJZiBjb3VudCBpc1xuICAgb21pdHRlZCwgdGhlIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludCBiZWNvbWVzIGFjdGl2ZVxuICAgd2hlbiB0aGUgaWdub3JlIGNvdW50IGlzIHplcm8uICBXaGVuIG5vbi16ZXJvLCB0aGUgY291bnQgaXNcbiAgIGRlY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgYnJlYWtwb2ludCBpcyByZWFjaGVkIGFuZCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuXG5cbmNvbmRpdGlvbiBicG51bWJlciBbY29uZGl0aW9uXVxuXG4gICBTZXQgYSBuZXcgKmNvbmRpdGlvbiogZm9yIHRoZSBicmVha3BvaW50LCBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuICBJZiAqY29uZGl0aW9uKlxuICAgaXMgYWJzZW50LCBhbnkgZXhpc3RpbmcgY29uZGl0aW9uIGlzIHJlbW92ZWQ7IGkuZS4sIHRoZSBicmVha3BvaW50XG4gICBpcyBtYWRlIHVuY29uZGl0aW9uYWwuXG5cbmNvbW1hbmRzIFticG51bWJlcl1cblxuICAgU3BlY2lmeSBhIGxpc3Qgb2YgY29tbWFuZHMgZm9yIGJyZWFrcG9pbnQgbnVtYmVyICpicG51bWJlciouICBUaGVcbiAgIGNvbW1hbmRzIHRoZW1zZWx2ZXMgYXBwZWFyIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuICBUeXBlIGEgbGluZVxuICAgY29udGFpbmluZyBqdXN0ICJlbmQiIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZHMuIEFuIGV4YW1wbGU6XG5cbiAgICAgIChQZGIpIGNvbW1hbmRzIDFcbiAgICAgIChjb20pIHAgc29tZV92YXJpYWJsZVxuICAgICAgKGNvbSkgZW5kXG4gICAgICAoUGRiKVxuXG4gICBUbyByZW1vdmUgYWxsIGNvbW1hbmRzIGZyb20gYSBicmVha3BvaW50LCB0eXBlIGNvbW1hbmRzIGFuZCBmb2xsb3dcbiAgIGl0IGltbWVkaWF0ZWx5IHdpdGggImVuZCI7IHRoYXQgaXMsIGdpdmUgbm8gY29tbWFuZHMuXG5cbiAgIFdpdGggbm8gKmJwbnVtYmVyKiBhcmd1bWVudCwgY29tbWFuZHMgcmVmZXJzIHRvIHRoZSBsYXN0IGJyZWFrcG9pbnRcbiAgIHNldC5cblxuICAgWW91IGNhbiB1c2UgYnJlYWtwb2ludCBjb21tYW5kcyB0byBzdGFydCB5b3VyIHByb2dyYW0gdXAgYWdhaW4uXG4gICBTaW1wbHkgdXNlIHRoZSBjb250aW51ZSBjb21tYW5kLCBvciBzdGVwLCBvciBhbnkgb3RoZXIgY29tbWFuZCB0aGF0XG4gICByZXN1bWVzIGV4ZWN1dGlvbi5cblxuICAgU3BlY2lmeWluZyBhbnkgY29tbWFuZCByZXN1bWluZyBleGVjdXRpb24gKGN1cnJlbnRseSBjb250aW51ZSxcbiAgIHN0ZXAsIG5leHQsIHJldHVybiwganVtcCwgcXVpdCBhbmQgdGhlaXIgYWJicmV2aWF0aW9ucykgdGVybWluYXRlc1xuICAgdGhlIGNvbW1hbmQgbGlzdCAoYXMgaWYgdGhhdCBjb21tYW5kIHdhcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieVxuICAgZW5kKS4gVGhpcyBpcyBiZWNhdXNlIGFueSB0aW1lIHlvdSByZXN1bWUgZXhlY3V0aW9uIChldmVuIHdpdGggYVxuICAgc2ltcGxlIG5leHQgb3Igc3RlcCksIHlvdSBtYXkgZW5jb3VudGVyIGFub3RoZXIgYnJlYWtwb2ludC0td2hpY2hcbiAgIGNvdWxkIGhhdmUgaXRzIG93biBjb21tYW5kIGxpc3QsIGxlYWRpbmcgdG8gYW1iaWd1aXRpZXMgYWJvdXQgd2hpY2hcbiAgIGxpc3QgdG8gZXhlY3V0ZS5cblxuICAgSWYgeW91IHVzZSB0aGUgXCdzaWxlbnRcJyBjb21tYW5kIGluIHRoZSBjb21tYW5kIGxpc3QsIHRoZSB1c3VhbFxuICAgbWVzc2FnZSBhYm91dCBzdG9wcGluZyBhdCBhIGJyZWFrcG9pbnQgaXMgbm90IHByaW50ZWQuICBUaGlzIG1heSBiZVxuICAgZGVzaXJhYmxlIGZvciBicmVha3BvaW50cyB0aGF0IGFyZSB0byBwcmludCBhIHNwZWNpZmljIG1lc3NhZ2UgYW5kXG4gICB0aGVuIGNvbnRpbnVlLiAgSWYgbm9uZSBvZiB0aGUgb3RoZXIgY29tbWFuZHMgcHJpbnQgYW55dGhpbmcsIHlvdVxuICAgc2VlIG5vIHNpZ24gdGhhdCB0aGUgYnJlYWtwb2ludCB3YXMgcmVhY2hlZC5cblxucyh0ZXApXG5cbiAgIEV4ZWN1dGUgdGhlIGN1cnJlbnQgbGluZSwgc3RvcCBhdCB0aGUgZmlyc3QgcG9zc2libGUgb2NjYXNpb25cbiAgIChlaXRoZXIgaW4gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvciBvbiB0aGUgbmV4dCBsaW5lIGluIHRoZVxuICAgY3VycmVudCBmdW5jdGlvbikuXG5cbm4oZXh0KVxuXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbiBpc1xuICAgcmVhY2hlZCBvciBpdCByZXR1cm5zLiAgKFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gIm5leHQiIGFuZCAic3RlcCJcbiAgIGlzIHRoYXQgInN0ZXAiIHN0b3BzIGluc2lkZSBhIGNhbGxlZCBmdW5jdGlvbiwgd2hpbGUgIm5leHQiXG4gICBleGVjdXRlcyBjYWxsZWQgZnVuY3Rpb25zIGF0IChuZWFybHkpIGZ1bGwgc3BlZWQsIG9ubHkgc3RvcHBpbmcgYXRcbiAgIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uKVxuXG51bnQoaWwpIFtsaW5lbm9dXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lIGlzIHJlYWNoZWQuXG5cbiAgIFdpdGggYSBsaW5lIG51bWJlciwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIGEgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIG9yIGVxdWFsIHRvIHRoYXQgaXMgcmVhY2hlZC4gIEluIGJvdGggY2FzZXMsIGFsc28gc3RvcCB3aGVuXG4gICB0aGUgY3VycmVudCBmcmFtZSByZXR1cm5zLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBBbGxvdyBnaXZpbmcgYW4gZXhwbGljaXQgbGluZSBudW1iZXIuXG5cbnIoZXR1cm4pXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgY3VycmVudCBmdW5jdGlvbiByZXR1cm5zLlxuXG5jKG9udChpbnVlKSlcblxuICAgQ29udGludWUgZXhlY3V0aW9uLCBvbmx5IHN0b3Agd2hlbiBhIGJyZWFrcG9pbnQgaXMgZW5jb3VudGVyZWQuXG5cbmoodW1wKSBsaW5lbm9cblxuICAgU2V0IHRoZSBuZXh0IGxpbmUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiAgT25seSBhdmFpbGFibGUgaW4gdGhlXG4gICBib3R0b20tbW9zdCBmcmFtZS4gIFRoaXMgbGV0cyB5b3UganVtcCBiYWNrIGFuZCBleGVjdXRlIGNvZGUgYWdhaW4sXG4gICBvciBqdW1wIGZvcndhcmQgdG8gc2tpcCBjb2RlIHRoYXQgeW91IGRvblwndCB3YW50IHRvIHJ1bi5cblxuICAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgbm90IGFsbCBqdW1wcyBhcmUgYWxsb3dlZCAtLSBmb3IgaW5zdGFuY2VcbiAgIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBqdW1wIGludG8gdGhlIG1pZGRsZSBvZiBhICJmb3IiIGxvb3Agb3Igb3V0XG4gICBvZiBhICJmaW5hbGx5IiBjbGF1c2UuXG5cbmwoaXN0KSBbZmlyc3RbLCBsYXN0XV1cblxuICAgTGlzdCBzb3VyY2UgY29kZSBmb3IgdGhlIGN1cnJlbnQgZmlsZS4gIFdpdGhvdXQgYXJndW1lbnRzLCBsaXN0IDExXG4gICBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZSBvciBjb250aW51ZSB0aGUgcHJldmlvdXMgbGlzdGluZy5cbiAgIFdpdGggIi4iIGFzIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lLiAgV2l0aFxuICAgb25lIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCBhdCB0aGF0IGxpbmUuICBXaXRoIHR3b1xuICAgYXJndW1lbnRzLCBsaXN0IHRoZSBnaXZlbiByYW5nZTsgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBsZXNzXG4gICB0aGFuIHRoZSBmaXJzdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjb3VudC5cblxuICAgVGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgY3VycmVudCBmcmFtZSBpcyBpbmRpY2F0ZWQgYnkgIi0+Ii4gIElmIGFuXG4gICBleGNlcHRpb24gaXMgYmVpbmcgZGVidWdnZWQsIHRoZSBsaW5lIHdoZXJlIHRoZSBleGNlcHRpb24gd2FzXG4gICBvcmlnaW5hbGx5IHJhaXNlZCBvciBwcm9wYWdhdGVkIGlzIGluZGljYXRlZCBieSAiPj4iLCBpZiBpdCBkaWZmZXJzXG4gICBmcm9tIHRoZSBjdXJyZW50IGxpbmUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlICI+PiIgbWFya2VyLlxuXG5sbCB8IGxvbmdsaXN0XG5cbiAgIExpc3QgYWxsIHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbiBvciBmcmFtZS5cbiAgIEludGVyZXN0aW5nIGxpbmVzIGFyZSBtYXJrZWQgYXMgZm9yICJsaXN0Ii5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5hKHJncylcblxuICAgUHJpbnQgdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uXG5cbnAgZXhwcmVzc2lvblxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIGluIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHByaW50IGl0c1xuICAgdmFsdWUuXG5cbiAgIE5vdGU6ICJwcmludCgpIiBjYW4gYWxzbyBiZSB1c2VkLCBidXQgaXMgbm90IGEgZGVidWdnZXIgY29tbWFuZFxuICAgICAtLS0gdGhpcyBleGVjdXRlcyB0aGUgUHl0aG9uICJwcmludCgpIiBmdW5jdGlvbi5cblxucHAgZXhwcmVzc2lvblxuXG4gICBMaWtlIHRoZSAicCIgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcyBwcmV0dHktXG4gICBwcmludGVkIHVzaW5nIHRoZSAicHByaW50IiBtb2R1bGUuXG5cbndoYXRpcyBleHByZXNzaW9uXG5cbiAgIFByaW50IHRoZSB0eXBlIG9mIHRoZSAqZXhwcmVzc2lvbiouXG5cbnNvdXJjZSBleHByZXNzaW9uXG5cbiAgIFRyeSB0byBnZXQgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIGRpc3BsYXkgaXQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaWYgaXQgY2hhbmdlZCwgZWFjaCB0aW1lXG4gICBleGVjdXRpb24gc3RvcHMgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgbGlzdCBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnRcbiAgIGZyYW1lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnVuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRG8gbm90IGRpc3BsYXkgdGhlIGV4cHJlc3Npb24gYW55IG1vcmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG4gICBXaXRob3V0IGV4cHJlc3Npb24sIGNsZWFyIGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuaW50ZXJhY3RcblxuICAgU3RhcnQgYW4gaW50ZXJhdGl2ZSBpbnRlcnByZXRlciAodXNpbmcgdGhlICJjb2RlIiBtb2R1bGUpIHdob3NlXG4gICBnbG9iYWwgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCB0aGUgKGdsb2JhbCBhbmQgbG9jYWwpIG5hbWVzIGZvdW5kIGluXG4gICB0aGUgY3VycmVudCBzY29wZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5hbGlhcyBbbmFtZSBbY29tbWFuZF1dXG5cbiAgIENyZWF0ZSBhbiBhbGlhcyBjYWxsZWQgKm5hbWUqIHRoYXQgZXhlY3V0ZXMgKmNvbW1hbmQqLiAgVGhlIGNvbW1hbmRcbiAgIG11c3QgKm5vdCogYmUgZW5jbG9zZWQgaW4gcXVvdGVzLiAgUmVwbGFjZWFibGUgcGFyYW1ldGVycyBjYW4gYmVcbiAgIGluZGljYXRlZCBieSAiJTEiLCAiJTIiLCBhbmQgc28gb24sIHdoaWxlICIlKiIgaXMgcmVwbGFjZWQgYnkgYWxsXG4gICB0aGUgcGFyYW1ldGVycy4gSWYgbm8gY29tbWFuZCBpcyBnaXZlbiwgdGhlIGN1cnJlbnQgYWxpYXMgZm9yXG4gICAqbmFtZSogaXMgc2hvd24uIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGFsbCBhbGlhc2VzIGFyZSBsaXN0ZWQuXG5cbiAgIEFsaWFzZXMgbWF5IGJlIG5lc3RlZCBhbmQgY2FuIGNvbnRhaW4gYW55dGhpbmcgdGhhdCBjYW4gYmUgbGVnYWxseVxuICAgdHlwZWQgYXQgdGhlIHBkYiBwcm9tcHQuICBOb3RlIHRoYXQgaW50ZXJuYWwgcGRiIGNvbW1hbmRzICpjYW4qIGJlXG4gICBvdmVycmlkZGVuIGJ5IGFsaWFzZXMuICBTdWNoIGEgY29tbWFuZCBpcyB0aGVuIGhpZGRlbiB1bnRpbCB0aGVcbiAgIGFsaWFzIGlzIHJlbW92ZWQuICBBbGlhc2luZyBpcyByZWN1cnNpdmVseSBhcHBsaWVkIHRvIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgY29tbWFuZCBsaW5lOyBhbGwgb3RoZXIgd29yZHMgaW4gdGhlIGxpbmUgYXJlIGxlZnRcbiAgIGFsb25lLlxuXG4gICBBcyBhbiBleGFtcGxlLCBoZXJlIGFyZSB0d28gdXNlZnVsIGFsaWFzZXMgKGVzcGVjaWFsbHkgd2hlbiBwbGFjZWRcbiAgIGluIHRoZSAiLnBkYnJjIiBmaWxlKTpcblxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgKHVzYWdlICJwaSBjbGFzc0luc3QiKVxuICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCgiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXSlcbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGZcbiAgICAgIGFsaWFzIHBzIHBpIHNlbGZcblxudW5hbGlhcyBuYW1lXG5cbiAgIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGFsaWFzLlxuXG4hIHN0YXRlbWVudFxuXG4gICBFeGVjdXRlIHRoZSAob25lLWxpbmUpICpzdGF0ZW1lbnQqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50XG4gICBzdGFjayBmcmFtZS4gVGhlIGV4Y2xhbWF0aW9uIHBvaW50IGNhbiBiZSBvbWl0dGVkIHVubGVzcyB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIHN0YXRlbWVudCByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLiAgVG8gc2V0IGFcbiAgIGdsb2JhbCB2YXJpYWJsZSwgeW91IGNhbiBwcmVmaXggdGhlIGFzc2lnbm1lbnQgY29tbWFuZCB3aXRoIGFcbiAgICJnbG9iYWwiIHN0YXRlbWVudCBvbiB0aGUgc2FtZSBsaW5lLCBlLmcuOlxuXG4gICAgICAoUGRiKSBnbG9iYWwgbGlzdF9vcHRpb25zOyBsaXN0X29wdGlvbnMgPSBbXCctbFwnXVxuICAgICAgKFBkYilcblxucnVuIFthcmdzIC4uLl1cbnJlc3RhcnQgW2FyZ3MgLi4uXVxuXG4gICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBQeXRob24gcHJvZ3JhbS4gIElmIGFuIGFyZ3VtZW50IGlzIHN1cHBsaWVkLFxuICAgaXQgaXMgc3BsaXQgd2l0aCAic2hsZXgiIGFuZCB0aGUgcmVzdWx0IGlzIHVzZWQgYXMgdGhlIG5ld1xuICAgInN5cy5hcmd2Ii4gSGlzdG9yeSwgYnJlYWtwb2ludHMsIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnMgYXJlXG4gICBwcmVzZXJ2ZWQuICJyZXN0YXJ0IiBpcyBhbiBhbGlhcyBmb3IgInJ1biIuXG5cbnEodWl0KVxuXG4gICBRdWl0IGZyb20gdGhlIGRlYnVnZ2VyLiAgVGhlIHByb2dyYW0gYmVpbmcgZXhlY3V0ZWQgaXMgYWJvcnRlZC5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGV0aGVyIGEgZnJhbWUgaXMgY29uc2lkZXJlZCB0byBvcmlnaW5hdGUgaW4gYSBjZXJ0YWluIG1vZHVsZVxuICAgIGlzIGRldGVybWluZWQgYnkgdGhlICJfX25hbWVfXyIgaW4gdGhlIGZyYW1lIGdsb2JhbHMuXG4nLAogICdkZWwnOiAnXG5UaGUgImRlbCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqXG5cbiAgIGRlbF9zdG10IDo6PSAiZGVsIiB0YXJnZXRfbGlzdFxuXG5EZWxldGlvbiBpcyByZWN1cnNpdmVseSBkZWZpbmVkIHZlcnkgc2ltaWxhciB0byB0aGUgd2F5IGFzc2lnbm1lbnQgaXNcbmRlZmluZWQuIFJhdGhlciB0aGFuIHNwZWxsaW5nIGl0IG91dCBpbiBmdWxsIGRldGFpbHMsIGhlcmUgYXJlIHNvbWVcbmhpbnRzLlxuXG5EZWxldGlvbiBvZiBhIHRhcmdldCBsaXN0IHJlY3Vyc2l2ZWx5IGRlbGV0ZXMgZWFjaCB0YXJnZXQsIGZyb20gbGVmdFxudG8gcmlnaHQuXG5cbkRlbGV0aW9uIG9mIGEgbmFtZSByZW1vdmVzIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSBmcm9tIHRoZSBsb2NhbCBvclxuZ2xvYmFsIG5hbWVzcGFjZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5hbWUgb2NjdXJzIGluIGEgImdsb2JhbCJcbnN0YXRlbWVudCBpbiB0aGUgc2FtZSBjb2RlIGJsb2NrLiAgSWYgdGhlIG5hbWUgaXMgdW5ib3VuZCwgYVxuIk5hbWVFcnJvciIgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLlxuXG5EZWxldGlvbiBvZiBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgc3Vic2NyaXB0aW9ucyBhbmQgc2xpY2luZ3MgaXMgcGFzc2VkXG50byB0aGUgcHJpbWFyeSBvYmplY3QgaW52b2x2ZWQ7IGRlbGV0aW9uIG9mIGEgc2xpY2luZyBpcyBpbiBnZW5lcmFsXG5lcXVpdmFsZW50IHRvIGFzc2lnbm1lbnQgb2YgYW4gZW1wdHkgc2xpY2Ugb2YgdGhlIHJpZ2h0IHR5cGUgKGJ1dCBldmVuXG50aGlzIGlzIGRldGVybWluZWQgYnkgdGhlIHNsaWNlZCBvYmplY3QpLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBQcmV2aW91c2x5IGl0IHdhcyBpbGxlZ2FsIHRvIGRlbGV0ZSBhIG5hbWVcbmZyb20gdGhlIGxvY2FsIG5hbWVzcGFjZSBpZiBpdCBvY2N1cnMgYXMgYSBmcmVlIHZhcmlhYmxlIGluIGEgbmVzdGVkXG5ibG9jay5cbicsCiAgJ2RpY3QnOiAnXG5EaWN0aW9uYXJ5IGRpc3BsYXlzXG4qKioqKioqKioqKioqKioqKioqXG5cbkEgZGljdGlvbmFyeSBkaXNwbGF5IGlzIGEgcG9zc2libHkgZW1wdHkgc2VyaWVzIG9mIGtleS9kYXR1bSBwYWlyc1xuZW5jbG9zZWQgaW4gY3VybHkgYnJhY2VzOlxuXG4gICBkaWN0X2Rpc3BsYXkgICAgICAgOjo9ICJ7IiBba2V5X2RhdHVtX2xpc3QgfCBkaWN0X2NvbXByZWhlbnNpb25dICJ9IlxuICAga2V5X2RhdHVtX2xpc3QgICAgIDo6PSBrZXlfZGF0dW0gKCIsIiBrZXlfZGF0dW0pKiBbIiwiXVxuICAga2V5X2RhdHVtICAgICAgICAgIDo6PSBleHByZXNzaW9uICI6IiBleHByZXNzaW9uXG4gICBkaWN0X2NvbXByZWhlbnNpb24gOjo9IGV4cHJlc3Npb24gIjoiIGV4cHJlc3Npb24gY29tcF9mb3JcblxuQSBkaWN0aW9uYXJ5IGRpc3BsYXkgeWllbGRzIGEgbmV3IGRpY3Rpb25hcnkgb2JqZWN0LlxuXG5JZiBhIGNvbW1hLXNlcGFyYXRlZCBzZXF1ZW5jZSBvZiBrZXkvZGF0dW0gcGFpcnMgaXMgZ2l2ZW4sIHRoZXkgYXJlXG5ldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHRvIGRlZmluZSB0aGUgZW50cmllcyBvZiB0aGUgZGljdGlvbmFyeTpcbmVhY2gga2V5IG9iamVjdCBpcyB1c2VkIGFzIGEga2V5IGludG8gdGhlIGRpY3Rpb25hcnkgdG8gc3RvcmUgdGhlXG5jb3JyZXNwb25kaW5nIGRhdHVtLiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gc3BlY2lmeSB0aGUgc2FtZSBrZXlcbm11bHRpcGxlIHRpbWVzIGluIHRoZSBrZXkvZGF0dW0gbGlzdCwgYW5kIHRoZSBmaW5hbCBkaWN0aW9uYXJ5XCdzIHZhbHVlXG5mb3IgdGhhdCBrZXkgd2lsbCBiZSB0aGUgbGFzdCBvbmUgZ2l2ZW4uXG5cbkEgZGljdCBjb21wcmVoZW5zaW9uLCBpbiBjb250cmFzdCB0byBsaXN0IGFuZCBzZXQgY29tcHJlaGVuc2lvbnMsXG5uZWVkcyB0d28gZXhwcmVzc2lvbnMgc2VwYXJhdGVkIHdpdGggYSBjb2xvbiBmb2xsb3dlZCBieSB0aGUgdXN1YWxcbiJmb3IiIGFuZCAiaWYiIGNsYXVzZXMuIFdoZW4gdGhlIGNvbXByZWhlbnNpb24gaXMgcnVuLCB0aGUgcmVzdWx0aW5nXG5rZXkgYW5kIHZhbHVlIGVsZW1lbnRzIGFyZSBpbnNlcnRlZCBpbiB0aGUgbmV3IGRpY3Rpb25hcnkgaW4gdGhlIG9yZGVyXG50aGV5IGFyZSBwcm9kdWNlZC5cblxuUmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlcyBvZiB0aGUga2V5IHZhbHVlcyBhcmUgbGlzdGVkIGVhcmxpZXIgaW5cbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSouICAoVG8gc3VtbWFyaXplLCB0aGUga2V5IHR5cGVcbnNob3VsZCBiZSAqaGFzaGFibGUqLCB3aGljaCBleGNsdWRlcyBhbGwgbXV0YWJsZSBvYmplY3RzLikgIENsYXNoZXNcbmJldHdlZW4gZHVwbGljYXRlIGtleXMgYXJlIG5vdCBkZXRlY3RlZDsgdGhlIGxhc3QgZGF0dW0gKHRleHR1YWxseVxucmlnaHRtb3N0IGluIHRoZSBkaXNwbGF5KSBzdG9yZWQgZm9yIGEgZ2l2ZW4ga2V5IHZhbHVlIHByZXZhaWxzLlxuJywKICAnZHluYW1pYy1mZWF0dXJlcyc6ICdcbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cbklmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tICJpbXBvcnQgKiIgLS0tIGlzIHVzZWQgaW4gYVxuZnVuY3Rpb24gYW5kIHRoZSBmdW5jdGlvbiBjb250YWlucyBvciBpcyBhIG5lc3RlZCBibG9jayB3aXRoIGZyZWVcbnZhcmlhYmxlcywgdGhlIGNvbXBpbGVyIHdpbGwgcmFpc2UgYSAiU3ludGF4RXJyb3IiLlxuXG5UaGUgImV2YWwoKSIgYW5kICJleGVjKCkiIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGxcbmVudmlyb25tZW50IGZvciByZXNvbHZpbmcgbmFtZXMuICBOYW1lcyBtYXkgYmUgcmVzb2x2ZWQgaW4gdGhlIGxvY2FsXG5hbmQgZ2xvYmFsIG5hbWVzcGFjZXMgb2YgdGhlIGNhbGxlci4gIEZyZWUgdmFyaWFibGVzIGFyZSBub3QgcmVzb2x2ZWRcbmluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBuYW1lc3BhY2UsIGJ1dCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gIFsxXVxuVGhlICJleGVjKCkiIGFuZCAiZXZhbCgpIiBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuJywKQEAgLTM1LDcgKzM1LDcgQEAKICAnZmxvYXRpbmcnOiAnXG5GbG9hdGluZyBwb2ludCBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuRmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWxcbmRlZmluaXRpb25zOlxuXG4gICBmbG9hdG51bWJlciAgIDo6PSBwb2ludGZsb2F0IHwgZXhwb25lbnRmbG9hdFxuICAgcG9pbnRmbG9hdCAgICA6Oj0gW2ludHBhcnRdIGZyYWN0aW9uIHwgaW50cGFydCAiLiJcbiAgIGV4cG9uZW50ZmxvYXQgOjo9IChpbnRwYXJ0IHwgcG9pbnRmbG9hdCkgZXhwb25lbnRcbiAgIGludHBhcnQgICAgICAgOjo9IGRpZ2l0K1xuICAgZnJhY3Rpb24gICAgICA6Oj0gIi4iIGRpZ2l0K1xuICAgZXhwb25lbnQgICAgICA6Oj0gKCJlIiB8ICJFIikgWyIrIiB8ICItIl0gZGlnaXQrXG5cbk5vdGUgdGhhdCB0aGUgaW50ZWdlciBhbmQgZXhwb25lbnQgcGFydHMgYXJlIGFsd2F5cyBpbnRlcnByZXRlZCB1c2luZ1xucmFkaXggMTAuIEZvciBleGFtcGxlLCAiMDc3ZTAxMCIgaXMgbGVnYWwsIGFuZCBkZW5vdGVzIHRoZSBzYW1lIG51bWJlclxuYXMgIjc3ZTEwIi4gVGhlIGFsbG93ZWQgcmFuZ2Ugb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgaXNcbmltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4gU29tZSBleGFtcGxlcyBvZiBmbG9hdGluZyBwb2ludCBsaXRlcmFsczpcblxuICAgMy4xNCAgICAxMC4gICAgLjAwMSAgICAxZTEwMCAgICAzLjE0ZS0xMCAgICAwZTBcblxuTm90ZSB0aGF0IG51bWVyaWMgbGl0ZXJhbHMgZG8gbm90IGluY2x1ZGUgYSBzaWduOyBhIHBocmFzZSBsaWtlICItMSJcbmlzIGFjdHVhbGx5IGFuIGV4cHJlc3Npb24gY29tcG9zZWQgb2YgdGhlIHVuYXJ5IG9wZXJhdG9yICItIiBhbmQgdGhlXG5saXRlcmFsICIxIi5cbicsCiAgJ2Zvcic6ICdcblRoZSAiZm9yIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKipcblxuVGhlICJmb3IiIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZVxuKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG4iZXhwcmVzc2lvbl9saXN0Ii4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzIChzZWUgKkFzc2lnbm1lbnQgc3RhdGVtZW50cyopLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXNcbmV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlIGV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGVcbnNlcXVlbmNlIGlzIGVtcHR5IG9yIGFuIGl0ZXJhdG9yIHJhaXNlcyBhICJTdG9wSXRlcmF0aW9uIiBleGNlcHRpb24pLFxudGhlIHN1aXRlIGluIHRoZSAiZWxzZSIgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCwgYW5kIHRoZSBsb29wXG50ZXJtaW5hdGVzLlxuXG5BICJicmVhayIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgImVsc2UiIGNsYXVzZVwncyBzdWl0ZS4gIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbmV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGNvbnRpbnVlc1xud2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSAiZWxzZSIgY2xhdXNlIGlmIHRoZXJlIHdhcyBubyBuZXh0XG5pdGVtLlxuXG5UaGUgc3VpdGUgbWF5IGFzc2lnbiB0byB0aGUgdmFyaWFibGUocykgaW4gdGhlIHRhcmdldCBsaXN0OyB0aGlzIGRvZXNcbm5vdCBhZmZlY3QgdGhlIG5leHQgaXRlbSBhc3NpZ25lZCB0byBpdC5cblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbFxuYnkgdGhlIGxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gInJhbmdlKCkiIHJldHVybnMgYW5cbml0ZXJhdG9yIG9mIGludGVnZXJzIHN1aXRhYmxlIHRvIGVtdWxhdGUgdGhlIGVmZmVjdCBvZiBQYXNjYWxcJ3MgImZvciBpXG46PSBhIHRvIGIgZG8iOyBlLmcuLCAibGlzdChyYW5nZSgzKSkiIHJldHVybnMgdGhlIGxpc3QgIlswLCAxLCAyXSIuXG5cbk5vdGU6IFRoZXJlIGlzIGEgc3VidGxldHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgbW9kaWZpZWQgYnkgdGhlXG4gIGxvb3AgKHRoaXMgY2FuIG9ubHkgb2NjdXIgZm9yIG11dGFibGUgc2VxdWVuY2VzLCBpLmUuIGxpc3RzKS4gIEFuXG4gIGludGVybmFsIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LFxuICBhbmQgdGhpcyBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhc1xuICByZWFjaGVkIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zXG4gIHRoYXQgaWYgdGhlIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGVcbiAgc2VxdWVuY2UsIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZlxuICB0aGUgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuJywKICAnZm9ybWF0c3RyaW5ncyc6ICdcbkZvcm1hdCBTdHJpbmcgU3ludGF4XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgInN0ci5mb3JtYXQoKSIgbWV0aG9kIGFuZCB0aGUgIkZvcm1hdHRlciIgY2xhc3Mgc2hhcmUgdGhlIHNhbWVcbnN5bnRheCBmb3IgZm9ybWF0IHN0cmluZ3MgKGFsdGhvdWdoIGluIHRoZSBjYXNlIG9mICJGb3JtYXR0ZXIiLFxuc3ViY2xhc3NlcyBjYW4gZGVmaW5lIHRoZWlyIG93biBmb3JtYXQgc3RyaW5nIHN5bnRheCkuXG5cbkZvcm1hdCBzdHJpbmdzIGNvbnRhaW4gInJlcGxhY2VtZW50IGZpZWxkcyIgc3Vycm91bmRlZCBieSBjdXJseSBicmFjZXNcbiJ7fSIuIEFueXRoaW5nIHRoYXQgaXMgbm90IGNvbnRhaW5lZCBpbiBicmFjZXMgaXMgY29uc2lkZXJlZCBsaXRlcmFsXG50ZXh0LCB3aGljaCBpcyBjb3BpZWQgdW5jaGFuZ2VkIHRvIHRoZSBvdXRwdXQuICBJZiB5b3UgbmVlZCB0byBpbmNsdWRlXG5hIGJyYWNlIGNoYXJhY3RlciBpbiB0aGUgbGl0ZXJhbCB0ZXh0LCBpdCBjYW4gYmUgZXNjYXBlZCBieSBkb3VibGluZzpcbiJ7eyIgYW5kICJ9fSIuXG5cblRoZSBncmFtbWFyIGZvciBhIHJlcGxhY2VtZW50IGZpZWxkIGlzIGFzIGZvbGxvd3M6XG5cbiAgICAgIHJlcGxhY2VtZW50X2ZpZWxkIDo6PSAieyIgW2ZpZWxkX25hbWVdIFsiISIgY29udmVyc2lvbl0gWyI6IiBmb3JtYXRfc3BlY10gIn0iXG4gICAgICBmaWVsZF9uYW1lICAgICAgICA6Oj0gYXJnX25hbWUgKCIuIiBhdHRyaWJ1dGVfbmFtZSB8ICJbIiBlbGVtZW50X2luZGV4ICJdIikqXG4gICAgICBhcmdfbmFtZSAgICAgICAgICA6Oj0gW2lkZW50aWZpZXIgfCBpbnRlZ2VyXVxuICAgICAgYXR0cmlidXRlX25hbWUgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgIGVsZW1lbnRfaW5kZXggICAgIDo6PSBpbnRlZ2VyIHwgaW5kZXhfc3RyaW5nXG4gICAgICBpbmRleF9zdHJpbmcgICAgICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXSI+ICtcbiAgICAgIGNvbnZlcnNpb24gICAgICAgIDo6PSAiciIgfCAicyIgfCAiYSJcbiAgICAgIGZvcm1hdF9zcGVjICAgICAgIDo6PSA8ZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24+XG5cbkluIGxlc3MgZm9ybWFsIHRlcm1zLCB0aGUgcmVwbGFjZW1lbnQgZmllbGQgY2FuIHN0YXJ0IHdpdGggYVxuKmZpZWxkX25hbWUqIHRoYXQgc3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgdG8gYmUgZm9ybWF0dGVkXG5hbmQgaW5zZXJ0ZWQgaW50byB0aGUgb3V0cHV0IGluc3RlYWQgb2YgdGhlIHJlcGxhY2VtZW50IGZpZWxkLiBUaGVcbipmaWVsZF9uYW1lKiBpcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgICpjb252ZXJzaW9uKiBmaWVsZCwgd2hpY2ggaXNcbnByZWNlZGVkIGJ5IGFuIGV4Y2xhbWF0aW9uIHBvaW50ICJcJyFcJyIsIGFuZCBhICpmb3JtYXRfc3BlYyosIHdoaWNoIGlzXG5wcmVjZWRlZCBieSBhIGNvbG9uICJcJzpcJyIuICBUaGVzZSBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgZm9ybWF0IGZvciB0aGVcbnJlcGxhY2VtZW50IHZhbHVlLlxuXG5TZWUgYWxzbyB0aGUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIHNlY3Rpb24uXG5cblRoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGFuICphcmdfbmFtZSogdGhhdCBpcyBlaXRoZXIgYVxubnVtYmVyIG9yIGEga2V5d29yZC4gIElmIGl0XCdzIGEgbnVtYmVyLCBpdCByZWZlcnMgdG8gYSBwb3NpdGlvbmFsXG5hcmd1bWVudCwgYW5kIGlmIGl0XCdzIGEga2V5d29yZCwgaXQgcmVmZXJzIHRvIGEgbmFtZWQga2V5d29yZFxuYXJndW1lbnQuICBJZiB0aGUgbnVtZXJpY2FsIGFyZ19uYW1lcyBpbiBhIGZvcm1hdCBzdHJpbmcgYXJlIDAsIDEsIDIsXG4uLi4gaW4gc2VxdWVuY2UsIHRoZXkgY2FuIGFsbCBiZSBvbWl0dGVkIChub3QganVzdCBzb21lKSBhbmQgdGhlXG5udW1iZXJzIDAsIDEsIDIsIC4uLiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhhdCBvcmRlci5cbkJlY2F1c2UgKmFyZ19uYW1lKiBpcyBub3QgcXVvdGUtZGVsaW1pdGVkLCBpdCBpcyBub3QgcG9zc2libGUgdG9cbnNwZWNpZnkgYXJiaXRyYXJ5IGRpY3Rpb25hcnkga2V5cyAoZS5nLiwgdGhlIHN0cmluZ3MgIlwnMTBcJyIgb3JcbiJcJzotXVwnIikgd2l0aGluIGEgZm9ybWF0IHN0cmluZy4gVGhlICphcmdfbmFtZSogY2FuIGJlIGZvbGxvd2VkIGJ5IGFueVxubnVtYmVyIG9mIGluZGV4IG9yIGF0dHJpYnV0ZSBleHByZXNzaW9ucy4gQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybVxuIlwnLm5hbWVcJyIgc2VsZWN0cyB0aGUgbmFtZWQgYXR0cmlidXRlIHVzaW5nICJnZXRhdHRyKCkiLCB3aGlsZSBhblxuZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSAiXCdbaW5kZXhdXCciIGRvZXMgYW4gaW5kZXggbG9va3VwIHVzaW5nXG4iX19nZXRpdGVtX18oKSIuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcnMgY2FuIGJlXG5vbWl0dGVkLCBzbyAiXCd7fSB7fVwnIiBpcyBlcXVpdmFsZW50IHRvICJcJ3swfSB7MX1cJyIuXG5cblNvbWUgc2ltcGxlIGZvcm1hdCBzdHJpbmcgZXhhbXBsZXM6XG5cbiAgICJGaXJzdCwgdGhvdSBzaGFsdCBjb3VudCB0byB7MH0iICMgUmVmZXJlbmNlcyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiQnJpbmcgbWUgYSB7fSIgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0bHkgcmVmZXJlbmNlcyB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkZyb20ge30gdG8ge30iICAgICAgICAgICAgICAgICAgIyBTYW1lIGFzICJGcm9tIHswfSB0byB7MX0iXG4gICAiTXkgcXVlc3QgaXMge25hbWV9IiAgICAgICAgICAgICAjIFJlZmVyZW5jZXMga2V5d29yZCBhcmd1bWVudCBcJ25hbWVcJ1xuICAgIldlaWdodCBpbiB0b25zIHswLndlaWdodH0iICAgICAgIyBcJ3dlaWdodFwnIGF0dHJpYnV0ZSBvZiBmaXJzdCBwb3NpdGlvbmFsIGFyZ1xuICAgIlVuaXRzIGRlc3Ryb3llZDoge3BsYXllcnNbMF19IiAgIyBGaXJzdCBlbGVtZW50IG9mIGtleXdvcmQgYXJndW1lbnQgXCdwbGF5ZXJzXCcuXG5cblRoZSAqY29udmVyc2lvbiogZmllbGQgY2F1c2VzIGEgdHlwZSBjb2VyY2lvbiBiZWZvcmUgZm9ybWF0dGluZy5cbk5vcm1hbGx5LCB0aGUgam9iIG9mIGZvcm1hdHRpbmcgYSB2YWx1ZSBpcyBkb25lIGJ5IHRoZSAiX19mb3JtYXRfXygpIlxubWV0aG9kIG9mIHRoZSB2YWx1ZSBpdHNlbGYuICBIb3dldmVyLCBpbiBzb21lIGNhc2VzIGl0IGlzIGRlc2lyYWJsZSB0b1xuZm9yY2UgYSB0eXBlIHRvIGJlIGZvcm1hdHRlZCBhcyBhIHN0cmluZywgb3ZlcnJpZGluZyBpdHMgb3duXG5kZWZpbml0aW9uIG9mIGZvcm1hdHRpbmcuICBCeSBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBhIHN0cmluZyBiZWZvcmVcbmNhbGxpbmcgIl9fZm9ybWF0X18oKSIsIHRoZSBub3JtYWwgZm9ybWF0dGluZyBsb2dpYyBpcyBieXBhc3NlZC5cblxuVGhyZWUgY29udmVyc2lvbiBmbGFncyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDogIlwnIXNcJyIgd2hpY2ggY2FsbHNcbiJzdHIoKSIgb24gdGhlIHZhbHVlLCAiXCchclwnIiB3aGljaCBjYWxscyAicmVwcigpIiBhbmQgIlwnIWFcJyIgd2hpY2hcbmNhbGxzICJhc2NpaSgpIi5cblxuU29tZSBleGFtcGxlczpcblxuICAgIkhhcm9sZFwncyBhIGNsZXZlciB7MCFzfSIgICAgICAgICMgQ2FsbHMgc3RyKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiQnJpbmcgb3V0IHRoZSBob2x5IHtuYW1lIXJ9IiAgICAjIENhbGxzIHJlcHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcbiAgICJNb3JlIHshYX0iICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbHMgYXNjaWkoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcblxuVGhlICpmb3JtYXRfc3BlYyogZmllbGQgY29udGFpbnMgYSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGUgdmFsdWVcbnNob3VsZCBiZSBwcmVzZW50ZWQsIGluY2x1ZGluZyBzdWNoIGRldGFpbHMgYXMgZmllbGQgd2lkdGgsIGFsaWdubWVudCxcbnBhZGRpbmcsIGRlY2ltYWwgcHJlY2lzaW9uIGFuZCBzbyBvbi4gIEVhY2ggdmFsdWUgdHlwZSBjYW4gZGVmaW5lIGl0c1xub3duICJmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UiIG9yIGludGVycHJldGF0aW9uIG9mIHRoZSAqZm9ybWF0X3NwZWMqLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIHN1cHBvcnQgYSBjb21tb24gZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlLCB3aGljaFxuaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uXG5cbkEgKmZvcm1hdF9zcGVjKiBmaWVsZCBjYW4gYWxzbyBpbmNsdWRlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHNcbndpdGhpbiBpdC4gVGhlc2UgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkcyBjYW4gY29udGFpbiBvbmx5IGEgZmllbGRcbm5hbWU7IGNvbnZlcnNpb24gZmxhZ3MgYW5kIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICBUaGVcbnJlcGxhY2VtZW50IGZpZWxkcyB3aXRoaW4gdGhlIGZvcm1hdF9zcGVjIGFyZSBzdWJzdGl0dXRlZCBiZWZvcmUgdGhlXG4qZm9ybWF0X3NwZWMqIHN0cmluZyBpcyBpbnRlcnByZXRlZC4gVGhpcyBhbGxvd3MgdGhlIGZvcm1hdHRpbmcgb2YgYVxudmFsdWUgdG8gYmUgZHluYW1pY2FsbHkgc3BlY2lmaWVkLlxuXG5TZWUgdGhlICpGb3JtYXQgZXhhbXBsZXMqIHNlY3Rpb24gZm9yIHNvbWUgZXhhbXBsZXMuXG5cblxuRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iRm9ybWF0IHNwZWNpZmljYXRpb25zIiBhcmUgdXNlZCB3aXRoaW4gcmVwbGFjZW1lbnQgZmllbGRzIGNvbnRhaW5lZFxud2l0aGluIGEgZm9ybWF0IHN0cmluZyB0byBkZWZpbmUgaG93IGluZGl2aWR1YWwgdmFsdWVzIGFyZSBwcmVzZW50ZWRcbihzZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KikuICBUaGV5IGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGVcbmJ1aWx0LWluICJmb3JtYXQoKSIgZnVuY3Rpb24uICBFYWNoIGZvcm1hdHRhYmxlIHR5cGUgbWF5IGRlZmluZSBob3dcbnRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBpcyB0byBiZSBpbnRlcnByZXRlZC5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciBmb3JtYXRcbnNwZWNpZmljYXRpb25zLCBhbHRob3VnaCBzb21lIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXJlIG9ubHlcbnN1cHBvcnRlZCBieSB0aGUgbnVtZXJpYyB0eXBlcy5cblxuQSBnZW5lcmFsIGNvbnZlbnRpb24gaXMgdGhhdCBhbiBlbXB0eSBmb3JtYXQgc3RyaW5nICgiIiIiKSBwcm9kdWNlc1xudGhlIHNhbWUgcmVzdWx0IGFzIGlmIHlvdSBoYWQgY2FsbGVkICJzdHIoKSIgb24gdGhlIHZhbHVlLiBBIG5vbi1lbXB0eVxuZm9ybWF0IHN0cmluZyB0eXBpY2FsbHkgbW9kaWZpZXMgdGhlIHJlc3VsdC5cblxuVGhlIGdlbmVyYWwgZm9ybSBvZiBhICpzdGFuZGFyZCBmb3JtYXQgc3BlY2lmaWVyKiBpczpcblxuICAgZm9ybWF0X3NwZWMgOjo9IFtbZmlsbF1hbGlnbl1bc2lnbl1bI11bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW3R5cGVdXG4gICBmaWxsICAgICAgICA6Oj0gPGFueSBjaGFyYWN0ZXI+XG4gICBhbGlnbiAgICAgICA6Oj0gIjwiIHwgIj4iIHwgIj0iIHwgIl4iXG4gICBzaWduICAgICAgICA6Oj0gIisiIHwgIi0iIHwgIiAiXG4gICB3aWR0aCAgICAgICA6Oj0gaW50ZWdlclxuICAgcHJlY2lzaW9uICAgOjo9IGludGVnZXJcbiAgIHR5cGUgICAgICAgIDo6PSAiYiIgfCAiYyIgfCAiZCIgfCAiZSIgfCAiRSIgfCAiZiIgfCAiRiIgfCAiZyIgfCAiRyIgfCAibiIgfCAibyIgfCAicyIgfCAieCIgfCAiWCIgfCAiJSJcblxuSWYgYSB2YWxpZCAqYWxpZ24qIHZhbHVlIGlzIHNwZWNpZmllZCwgaXQgY2FuIGJlIHByZWNlZGVkIGJ5IGEgKmZpbGwqXG5jaGFyYWN0ZXIgdGhhdCBjYW4gYmUgYW55IGNoYXJhY3RlciBhbmQgZGVmYXVsdHMgdG8gYSBzcGFjZSBpZlxub21pdHRlZC4gTm90ZSB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgInsiIGFuZCAifSIgYXMgKmZpbGwqXG5jaGFyIHdoaWxlIHVzaW5nIHRoZSAic3RyLmZvcm1hdCgpIiBtZXRob2Q7IHRoaXMgbGltaXRhdGlvbiBob3dldmVyXG5kb2VzblwndCBhZmZlY3QgdGhlICJmb3JtYXQoKSIgZnVuY3Rpb24uXG5cblRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGFsaWdubWVudCBvcHRpb25zIGlzIGFzIGZvbGxvd3M6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnPFwnIiAgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGxlZnQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJz5cJyIgICAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSByaWdodC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCc9XCciICAgICB8IEZvcmNlcyB0aGUgcGFkZGluZyB0byBiZSBwbGFjZWQgYWZ0ZXIgdGhlIHNpZ24gKGlmIGFueSkgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnXlwnIiAgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGNlbnRlcmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGUgdGhhdCB1bmxlc3MgYSBtaW5pbXVtIGZpZWxkIHdpZHRoIGlzIGRlZmluZWQsIHRoZSBmaWVsZCB3aWR0aFxud2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZGF0YSB0byBmaWxsIGl0LCBzbyB0aGF0IHRoZVxuYWxpZ25tZW50IG9wdGlvbiBoYXMgbm8gbWVhbmluZyBpbiB0aGlzIGNhc2UuXG5cblRoZSAqc2lnbiogb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIG51bWJlciB0eXBlcywgYW5kIGNhbiBiZSBvbmUgb2ZcbnRoZSBmb2xsb3dpbmc6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnK1wnIiAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgZm9yIGJvdGggcG9zaXRpdmUgYXMgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJy1cJyIgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIG5lZ2F0aXZlICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBzcGFjZSAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIGxlYWRpbmcgc3BhY2Ugc2hvdWxkIGJlIHVzZWQgb24gcG9zaXRpdmUgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSAiXCcjXCciIG9wdGlvbiBjYXVzZXMgdGhlICJhbHRlcm5hdGUgZm9ybSIgdG8gYmUgdXNlZCBmb3IgdGhlXG5jb252ZXJzaW9uLiAgVGhlIGFsdGVybmF0ZSBmb3JtIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIGRpZmZlcmVudFxudHlwZXMuICBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBpbnRlZ2VyLCBmbG9hdCwgY29tcGxleCBhbmRcbkRlY2ltYWwgdHlwZXMuIEZvciBpbnRlZ2Vycywgd2hlbiBiaW5hcnksIG9jdGFsLCBvciBoZXhhZGVjaW1hbCBvdXRwdXRcbmlzIHVzZWQsIHRoaXMgb3B0aW9uIGFkZHMgdGhlIHByZWZpeCByZXNwZWN0aXZlICJcJzBiXCciLCAiXCcwb1wnIiwgb3JcbiJcJzB4XCciIHRvIHRoZSBvdXRwdXQgdmFsdWUuIEZvciBmbG9hdHMsIGNvbXBsZXggYW5kIERlY2ltYWwgdGhlXG5hbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiB0byBhbHdheXMgY29udGFpbiBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciwgZXZlbiBpZiBubyBkaWdpdHMgZm9sbG93IGl0LiBOb3JtYWxseSwgYVxuZGVjaW1hbC1wb2ludCBjaGFyYWN0ZXIgYXBwZWFycyBpbiB0aGUgcmVzdWx0IG9mIHRoZXNlIGNvbnZlcnNpb25zXG5vbmx5IGlmIGEgZGlnaXQgZm9sbG93cyBpdC4gSW4gYWRkaXRpb24sIGZvciAiXCdnXCciIGFuZCAiXCdHXCciXG5jb252ZXJzaW9ucywgdHJhaWxpbmcgemVyb3MgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHJlc3VsdC5cblxuVGhlICJcJyxcJyIgb3B0aW9uIHNpZ25hbHMgdGhlIHVzZSBvZiBhIGNvbW1hIGZvciBhIHRob3VzYW5kcyBzZXBhcmF0b3IuXG5Gb3IgYSBsb2NhbGUgYXdhcmUgc2VwYXJhdG9yLCB1c2UgdGhlICJcJ25cJyIgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZVxuaW5zdGVhZC5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogQWRkZWQgdGhlICJcJyxcJyIgb3B0aW9uIChzZWUgYWxzbyAqKlBFUCAzNzgqKikuXG5cbip3aWR0aCogaXMgYSBkZWNpbWFsIGludGVnZXIgZGVmaW5pbmcgdGhlIG1pbmltdW0gZmllbGQgd2lkdGguICBJZiBub3RcbnNwZWNpZmllZCwgdGhlbiB0aGUgZmllbGQgd2lkdGggd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjb250ZW50LlxuXG5QcmVjZWRpbmcgdGhlICp3aWR0aCogZmllbGQgYnkgYSB6ZXJvICgiXCcwXCciKSBjaGFyYWN0ZXIgZW5hYmxlcyBzaWduLVxuYXdhcmUgemVyby1wYWRkaW5nIGZvciBudW1lcmljIHR5cGVzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgKmZpbGwqXG5jaGFyYWN0ZXIgb2YgIlwnMFwnIiB3aXRoIGFuICphbGlnbm1lbnQqIHR5cGUgb2YgIlwnPVwnIi5cblxuVGhlICpwcmVjaXNpb24qIGlzIGEgZGVjaW1hbCBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBkaWdpdHMgc2hvdWxkXG5iZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWVcbmZvcm1hdHRlZCB3aXRoICJcJ2ZcJyIgYW5kICJcJ0ZcJyIsIG9yIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRcbmZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGZvcm1hdHRlZCB3aXRoICJcJ2dcJyIgb3IgIlwnR1wnIi4gIEZvciBub24tXG5udW1iZXIgdHlwZXMgdGhlIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBmaWVsZCBzaXplIC0gaW4gb3RoZXJcbndvcmRzLCBob3cgbWFueSBjaGFyYWN0ZXJzIHdpbGwgYmUgdXNlZCBmcm9tIHRoZSBmaWVsZCBjb250ZW50LiBUaGVcbipwcmVjaXNpb24qIGlzIG5vdCBhbGxvd2VkIGZvciBpbnRlZ2VyIHZhbHVlcy5cblxuRmluYWxseSwgdGhlICp0eXBlKiBkZXRlcm1pbmVzIGhvdyB0aGUgZGF0YSBzaG91bGQgYmUgcHJlc2VudGVkLlxuXG5UaGUgYXZhaWxhYmxlIHN0cmluZyBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJ3NcJyIgICAgIHwgU3RyaW5nIGZvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBzdHJpbmdzIGFuZCAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyAiXCdzXCciLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlIGF2YWlsYWJsZSBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnYlwnIiAgICAgfCBCaW5hcnkgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAyLiAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ2NcJyIgICAgIHwgQ2hhcmFjdGVyLiBDb252ZXJ0cyB0aGUgaW50ZWdlciB0byB0aGUgY29ycmVzcG9uZGluZyAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdkXCciICAgICB8IERlY2ltYWwgSW50ZWdlci4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTAuICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnb1wnIiAgICAgfCBPY3RhbCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDguICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ3hcJyIgICAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIGxvd2VyLSAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdYXCciICAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyB1cHBlci0gICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnblwnIiAgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgIlwnZFwnIiwgZXhjZXB0IHRoYXQgaXQgdXNlcyB0aGUgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgIlwnZFwnIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBwcmVzZW50YXRpb24gdHlwZXMsIGludGVnZXJzIGNhbiBiZSBmb3JtYXR0ZWRcbndpdGggdGhlIGZsb2F0aW5nIHBvaW50IHByZXNlbnRhdGlvbiB0eXBlcyBsaXN0ZWQgYmVsb3cgKGV4Y2VwdCAiXCduXCciXG5hbmQgTm9uZSkuIFdoZW4gZG9pbmcgc28sICJmbG9hdCgpIiBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIGludGVnZXIgdG9cbmEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJlZm9yZSBmb3JtYXR0aW5nLlxuXG5UaGUgYXZhaWxhYmxlIHByZXNlbnRhdGlvbiB0eXBlcyBmb3IgZmxvYXRpbmcgcG9pbnQgYW5kIGRlY2ltYWwgdmFsdWVzXG5hcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnZVwnIiAgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gUHJpbnRzIHRoZSBudW1iZXIgaW4gc2NpZW50aWZpYyAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ0VcJyIgICAgIHwgRXhwb25lbnQgbm90YXRpb24uIFNhbWUgYXMgIlwnZVwnIiBleGNlcHQgaXQgdXNlcyBhbiB1cHBlciAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ2ZcJyIgICAgIHwgRml4ZWQgcG9pbnQuIERpc3BsYXlzIHRoZSBudW1iZXIgYXMgYSBmaXhlZC1wb2ludCBudW1iZXIuICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdGXCciICAgICB8IEZpeGVkIHBvaW50LiBTYW1lIGFzICJcJ2ZcJyIsIGJ1dCBjb252ZXJ0cyAibmFuIiB0byAiTkFOIiAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdnXCciICAgICB8IEdlbmVyYWwgZm9ybWF0LiAgRm9yIGEgZ2l2ZW4gcHJlY2lzaW9uICJwID49IDEiLCB0aGlzICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnR1wnIiAgICAgfCBHZW5lcmFsIGZvcm1hdC4gU2FtZSBhcyAiXCdnXCciIGV4Y2VwdCBzd2l0Y2hlcyB0byAiXCdFXCciIGlmICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCduXCciICAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyAiXCdnXCciLCBleGNlcHQgdGhhdCBpdCB1c2VzIHRoZSB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCclXCciICAgICB8IFBlcmNlbnRhZ2UuIE11bHRpcGxpZXMgdGhlIG51bWJlciBieSAxMDAgYW5kIGRpc3BsYXlzIGluICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgU2ltaWxhciB0byAiXCdnXCciLCBleGNlcHQgd2l0aCBhdCBsZWFzdCBvbmUgZGlnaXQgcGFzdCB0aGUgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblxuRm9ybWF0IGV4YW1wbGVzXG49PT09PT09PT09PT09PT1cblxuVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGV4YW1wbGVzIG9mIHRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbmQgY29tcGFyaXNvblxud2l0aCB0aGUgb2xkICIlIi1mb3JtYXR0aW5nLlxuXG5JbiBtb3N0IG9mIHRoZSBjYXNlcyB0aGUgc3ludGF4IGlzIHNpbWlsYXIgdG8gdGhlIG9sZCAiJSItZm9ybWF0dGluZyxcbndpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSAie30iIGFuZCB3aXRoICI6IiB1c2VkIGluc3RlYWQgb2YgIiUiLiBGb3JcbmV4YW1wbGUsICJcJyUwMy4yZlwnIiBjYW4gYmUgdHJhbnNsYXRlZCB0byAiXCd7OjAzLjJmfVwnIi5cblxuVGhlIG5ldyBmb3JtYXQgc3ludGF4IGFsc28gc3VwcG9ydHMgbmV3IGFuZCBkaWZmZXJlbnQgb3B0aW9ucywgc2hvd25cbmluIHRoZSBmb2xsb3cgZXhhbXBsZXMuXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgcG9zaXRpb246XG5cbiAgID4+PiBcJ3swfSwgezF9LCB7Mn1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7fSwge30sIHt9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpICAjIDMuMSsgb25seVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KCpcJ2FiY1wnKSAgICAgICMgdW5wYWNraW5nIGFyZ3VtZW50IHNlcXVlbmNlXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezB9ezF9ezB9XCcuZm9ybWF0KFwnYWJyYVwnLCBcJ2NhZFwnKSAgICMgYXJndW1lbnRzXCcgaW5kaWNlcyBjYW4gYmUgcmVwZWF0ZWRcbiAgIFwnYWJyYWNhZGFicmFcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IG5hbWU6XG5cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdChsYXRpdHVkZT1cJzM3LjI0TlwnLCBsb25naXR1ZGU9XCctMTE1LjgxV1wnKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG4gICA+Pj4gY29vcmQgPSB7XCdsYXRpdHVkZVwnOiBcJzM3LjI0TlwnLCBcJ2xvbmdpdHVkZVwnOiBcJy0xMTUuODFXXCd9XG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQoKipjb29yZClcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgYXR0cmlidXRlczpcblxuICAgPj4+IGMgPSAzLTVqXG4gICA+Pj4gKFwnVGhlIGNvbXBsZXggbnVtYmVyIHswfSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IHswLnJlYWx9IFwnXG4gICAuLi4gIFwnYW5kIHRoZSBpbWFnaW5hcnkgcGFydCB7MC5pbWFnfS5cJykuZm9ybWF0KGMpXG4gICBcJ1RoZSBjb21wbGV4IG51bWJlciAoMy01aikgaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCAzLjAgYW5kIHRoZSBpbWFnaW5hcnkgcGFydCAtNS4wLlwnXG4gICA+Pj4gY2xhc3MgUG9pbnQ6XG4gICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KTpcbiAgIC4uLiAgICAgICAgIHNlbGYueCwgc2VsZi55ID0geCwgeVxuICAgLi4uICAgICBkZWYgX19zdHJfXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBcJ1BvaW50KHtzZWxmLnh9LCB7c2VsZi55fSlcJy5mb3JtYXQoc2VsZj1zZWxmKVxuICAgLi4uXG4gICA+Pj4gc3RyKFBvaW50KDQsIDIpKVxuICAgXCdQb2ludCg0LCAyKVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBpdGVtczpcblxuICAgPj4+IGNvb3JkID0gKDMsIDUpXG4gICA+Pj4gXCdYOiB7MFswXX07ICBZOiB7MFsxXX1cJy5mb3JtYXQoY29vcmQpXG4gICBcJ1g6IDM7ICBZOiA1XCdcblxuUmVwbGFjaW5nICIlcyIgYW5kICIlciI6XG5cbiAgID4+PiAicmVwcigpIHNob3dzIHF1b3RlczogeyFyfTsgc3RyKCkgZG9lc25cJ3Q6IHshc30iLmZvcm1hdChcJ3Rlc3QxXCcsIFwndGVzdDJcJylcbiAgICJyZXByKCkgc2hvd3MgcXVvdGVzOiBcJ3Rlc3QxXCc7IHN0cigpIGRvZXNuXCd0OiB0ZXN0MiJcblxuQWxpZ25pbmcgdGhlIHRleHQgYW5kIHNwZWNpZnlpbmcgYSB3aWR0aDpcblxuICAgPj4+IFwnezo8MzB9XCcuZm9ybWF0KFwnbGVmdCBhbGlnbmVkXCcpXG4gICBcJ2xlZnQgYWxpZ25lZCAgICAgICAgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7Oj4zMH1cJy5mb3JtYXQoXCdyaWdodCBhbGlnbmVkXCcpXG4gICBcJyAgICAgICAgICAgICAgICAgcmlnaHQgYWxpZ25lZFwnXG4gICA+Pj4gXCd7Ol4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKVxuICAgXCcgICAgICAgICAgIGNlbnRlcmVkICAgICAgICAgICBcJ1xuICAgPj4+IFwnezoqXjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpICAjIHVzZSBcJypcJyBhcyBhIGZpbGwgY2hhclxuICAgXCcqKioqKioqKioqKmNlbnRlcmVkKioqKioqKioqKipcJ1xuXG5SZXBsYWNpbmcgIiUrZiIsICIlLWYiLCBhbmQgIiUgZiIgYW5kIHNwZWNpZnlpbmcgYSBzaWduOlxuXG4gICA+Pj4gXCd7OitmfTsgezorZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgaXQgYWx3YXlzXG4gICBcJyszLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6IGZ9OyB7OiBmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBhIHNwYWNlIGZvciBwb3NpdGl2ZSBudW1iZXJzXG4gICBcJyAzLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6LWZ9OyB7Oi1mfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBvbmx5IHRoZSBtaW51cyAtLSBzYW1lIGFzIFwnezpmfTsgezpmfVwnXG4gICBcJzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuXG5SZXBsYWNpbmcgIiV4IiBhbmQgIiVvIiBhbmQgY29udmVydGluZyB0aGUgdmFsdWUgdG8gZGlmZmVyZW50IGJhc2VzOlxuXG4gICA+Pj4gIyBmb3JtYXQgYWxzbyBzdXBwb3J0cyBiaW5hcnkgbnVtYmVyc1xuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDp4fTsgIG9jdDogezA6b307ICBiaW46IHswOmJ9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDJhOyAgb2N0OiA1MjsgIGJpbjogMTAxMDEwXCdcbiAgID4+PiAjIHdpdGggMHgsIDBvLCBvciAwYiBhcyBwcmVmaXg6XG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOiN4fTsgIG9jdDogezA6I299OyAgYmluOiB7MDojYn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMHgyYTsgIG9jdDogMG81MjsgIGJpbjogMGIxMDEwMTBcJ1xuXG5Vc2luZyB0aGUgY29tbWEgYXMgYSB0aG91c2FuZHMgc2VwYXJhdG9yOlxuXG4gICA+Pj4gXCd7Oix9XCcuZm9ybWF0KDEyMzQ1Njc4OTApXG4gICBcJzEsMjM0LDU2Nyw4OTBcJ1xuXG5FeHByZXNzaW5nIGEgcGVyY2VudGFnZTpcblxuICAgPj4+IHBvaW50cyA9IDE5XG4gICA+Pj4gdG90YWwgPSAyMlxuICAgPj4+IFwnQ29ycmVjdCBhbnN3ZXJzOiB7Oi4yJX1cJy5mb3JtYXQocG9pbnRzL3RvdGFsKVxuICAgXCdDb3JyZWN0IGFuc3dlcnM6IDg2LjM2JVwnXG5cblVzaW5nIHR5cGUtc3BlY2lmaWMgZm9ybWF0dGluZzpcblxuICAgPj4+IGltcG9ydCBkYXRldGltZVxuICAgPj4+IGQgPSBkYXRldGltZS5kYXRldGltZSgyMDEwLCA3LCA0LCAxMiwgMTUsIDU4KVxuICAgPj4+IFwnezolWS0lbS0lZCAlSDolTTolU31cJy5mb3JtYXQoZClcbiAgIFwnMjAxMC0wNy0wNCAxMjoxNTo1OFwnXG5cbk5lc3RpbmcgYXJndW1lbnRzIGFuZCBtb3JlIGNvbXBsZXggZXhhbXBsZXM6XG5cbiAgID4+PiBmb3IgYWxpZ24sIHRleHQgaW4gemlwKFwnPF4+XCcsIFtcJ2xlZnRcJywgXCdjZW50ZXJcJywgXCdyaWdodFwnXSk6XG4gICAuLi4gICAgIFwnezA6e2ZpbGx9e2FsaWdufTE2fVwnLmZvcm1hdCh0ZXh0LCBmaWxsPWFsaWduLCBhbGlnbj1hbGlnbilcbiAgIC4uLlxuICAgXCdsZWZ0PDw8PDw8PDw8PDw8XCdcbiAgIFwnXl5eXl5jZW50ZXJeXl5eXlwnXG4gICBcJz4+Pj4+Pj4+Pj4+cmlnaHRcJ1xuICAgPj4+XG4gICA+Pj4gb2N0ZXRzID0gWzE5MiwgMTY4LCAwLCAxXVxuICAgPj4+IFwnezowMlh9ezowMlh9ezowMlh9ezowMlh9XCcuZm9ybWF0KCpvY3RldHMpXG4gICBcJ0MwQTgwMDAxXCdcbiAgID4+PiBpbnQoXywgMTYpXG4gICAzMjMyMjM1NTIxXG4gICA+Pj5cbiAgID4+PiB3aWR0aCA9IDVcbiAgID4+PiBmb3IgbnVtIGluIHJhbmdlKDUsMTIpOiAjZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFXG4gICAuLi4gICAgIGZvciBiYXNlIGluIFwnZFhvYlwnOlxuICAgLi4uICAgICAgICAgcHJpbnQoXCd7MDp7d2lkdGh9e2Jhc2V9fVwnLmZvcm1hdChudW0sIGJhc2U9YmFzZSwgd2lkdGg9d2lkdGgpLCBlbmQ9XCcgXCcpXG4gICAuLi4gICAgIHByaW50KClcbiAgIC4uLlxuICAgICAgIDUgICAgIDUgICAgIDUgICAxMDFcbiAgICAgICA2ICAgICA2ICAgICA2ICAgMTEwXG4gICAgICAgNyAgICAgNyAgICAgNyAgIDExMVxuICAgICAgIDggICAgIDggICAgMTAgIDEwMDBcbiAgICAgICA5ICAgICA5ICAgIDExICAxMDAxXG4gICAgICAxMCAgICAgQSAgICAxMiAgMTAxMFxuICAgICAgMTEgICAgIEIgICAgMTMgIDEwMTFcbicsCi0gJ2Z1bmN0aW9uJzogJ1xuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZnVuY2RlZiAgICAgICAgOjo9IFtkZWNvcmF0b3JzXSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFtwYXJhbWV0ZXJfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICAoICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqIFsiLCIgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlICpwYXJhbWV0ZXJzKiBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqICI9IlxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgIiIqIiIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLSB0aGlzXG5pcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvblxuaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuXG50aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXNcbnVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGFcbmRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTpcbmlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGFcbmxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdFxud2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgIk5vbmUiIGFzIHRoZSBkZWZhdWx0LFxuYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiIiKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZyBhbnlcbmV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWYgdGhlXG5mb3JtICIiKippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuIFBhcmFtZXRlcnMgYWZ0ZXIgIiIqIiIgb3IgIiIqaWRlbnRpZmllciIiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICIiOiBleHByZXNzaW9uIiIgZm9sbG93aW5nXG50aGUgcGFyYW1ldGVyIG5hbWUuICBBbnkgcGFyYW1ldGVyIG1heSBoYXZlIGFuIGFubm90YXRpb24gZXZlbiB0aG9zZVxub2YgdGhlIGZvcm0gIippZGVudGlmaWVyIiBvciAiKippZGVudGlmaWVyIi4gIEZ1bmN0aW9ucyBtYXkgaGF2ZVxuInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiIi0+IGV4cHJlc3Npb24iIiBhZnRlciB0aGUgcGFyYW1ldGVyXG5saXN0LiAgVGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFueSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiBhbmQgYXJlXG5ldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4gIEFubm90YXRpb25zIG1heVxuYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW4gdGhlIHNvdXJjZSBjb2RlLlxuVGhlIHByZXNlbmNlIG9mIGFubm90YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGUgc2VtYW50aWNzIG9mIGFcbmZ1bmN0aW9uLiAgVGhlIGFubm90YXRpb24gdmFsdWVzIGFyZSBhdmFpbGFibGUgYXMgdmFsdWVzIG9mIGFcbmRpY3Rpb25hcnkga2V5ZWQgYnkgdGhlIHBhcmFtZXRlcnNcJyBuYW1lcyBpbiB0aGUgIl9fYW5ub3RhdGlvbnNfXyJcbmF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGFcbmV4cHJlc3Npb25zLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYVxuZXhwcmVzc2lvbiBpcyBtZXJlbHkgYSBzaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uO1xuYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgIiJkZWYiIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICIiZGVmIiIgZm9ybSBpcyBhY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFuZCBhbm5vdGF0aW9ucy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiImRlZiIiXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWxcbmZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkXG5pbiB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzEwNyoqIC0gRnVuY3Rpb24gQW5ub3RhdGlvbnNcblxuICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG4nLAorICdmdW5jdGlvbic6ICdcbkZ1bmN0aW9uIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiAiPSJcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICIiKiIiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS0gdGhpc1xuaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB3aGVuIHRoZVxuZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXNcbmV2YWx1YXRlZCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLVxuY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnRcbnRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYVxubGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5XG5hcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuXG5UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2VcbiJOb25lIiBhcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlXG5mdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iIippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmcgYW55XG5leGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmIHRoZVxuZm9ybSAiIioqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICIiKiIiIG9yICIiKmlkZW50aWZpZXIiIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiIjogZXhwcmVzc2lvbiIiIGZvbGxvd2luZ1xudGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uIGV2ZW4gdGhvc2Vcbm9mIHRoZSBmb3JtICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciIuICBGdW5jdGlvbnMgbWF5IGhhdmVcbiJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gIiItPiBleHByZXNzaW9uIiIgYWZ0ZXIgdGhlIHBhcmFtZXRlclxubGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gYW5kIGFyZVxuZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuICBBbm5vdGF0aW9ucyBtYXlcbmJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS5cblRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiBhXG5mdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzIHZhbHVlcyBvZiBhXG5kaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlICJfX2Fubm90YXRpb25zX18iXG5hdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICIiZGVmIiIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiImRlZiIiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgIiJkZWYiIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286ICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG5cbiAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuJywKICAnZ2xvYmFsJzogJ1xuVGhlICJnbG9iYWwiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBnbG9iYWxfc3RtdCA6Oj0gImdsb2JhbCIgaWRlbnRpZmllciAoIiwiIGlkZW50aWZpZXIpKlxuXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50IGlzIGEgZGVjbGFyYXRpb24gd2hpY2ggaG9sZHMgZm9yIHRoZSBlbnRpcmVcbmN1cnJlbnQgY29kZSBibG9jay4gIEl0IG1lYW5zIHRoYXQgdGhlIGxpc3RlZCBpZGVudGlmaWVycyBhcmUgdG8gYmVcbmludGVycHJldGVkIGFzIGdsb2JhbHMuICBJdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIGFzc2lnbiB0byBhIGdsb2JhbFxudmFyaWFibGUgd2l0aG91dCAiZ2xvYmFsIiwgYWx0aG91Z2ggZnJlZSB2YXJpYWJsZXMgbWF5IHJlZmVyIHRvXG5nbG9iYWxzIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgZ2xvYmFsLlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAiZ2xvYmFsIiBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBjb2RlXG5ibG9jayB0ZXh0dWFsbHkgcHJlY2VkaW5nIHRoYXQgImdsb2JhbCIgc3RhdGVtZW50LlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAiZ2xvYmFsIiBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgZGVmaW5lZCBhcyBmb3JtYWxcbnBhcmFtZXRlcnMgb3IgaW4gYSAiZm9yIiBsb29wIGNvbnRyb2wgdGFyZ2V0LCAiY2xhc3MiIGRlZmluaXRpb24sXG5mdW5jdGlvbiBkZWZpbml0aW9uLCBvciAiaW1wb3J0IiBzdGF0ZW1lbnQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RcbmVuZm9yY2UgdGhlIGxhdHRlciB0d28gcmVzdHJpY3Rpb25zLCBidXQgcHJvZ3JhbXMgc2hvdWxkIG5vdCBhYnVzZVxudGhpcyBmcmVlZG9tLCBhcyBmdXR1cmUgaW1wbGVtZW50YXRpb25zIG1heSBlbmZvcmNlIHRoZW0gb3Igc2lsZW50bHlcbmNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogdGhlICJnbG9iYWwiIGlzIGEgZGlyZWN0aXZlIHRvIHRoZSBwYXJzZXIuICBJdFxuYXBwbGllcyBvbmx5IHRvIGNvZGUgcGFyc2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlICJnbG9iYWwiXG5zdGF0ZW1lbnQuIEluIHBhcnRpY3VsYXIsIGEgImdsb2JhbCIgc3RhdGVtZW50IGNvbnRhaW5lZCBpbiBhIHN0cmluZ1xub3IgY29kZSBvYmplY3Qgc3VwcGxpZWQgdG8gdGhlIGJ1aWx0LWluICJleGVjKCkiIGZ1bmN0aW9uIGRvZXMgbm90XG5hZmZlY3QgdGhlIGNvZGUgYmxvY2sgKmNvbnRhaW5pbmcqIHRoZSBmdW5jdGlvbiBjYWxsLCBhbmQgY29kZVxuY29udGFpbmVkIGluIHN1Y2ggYSBzdHJpbmcgaXMgdW5hZmZlY3RlZCBieSAiZ2xvYmFsIiBzdGF0ZW1lbnRzIGluIHRoZVxuY29kZSBjb250YWluaW5nIHRoZSBmdW5jdGlvbiBjYWxsLiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgImV2YWwoKSJcbmFuZCAiY29tcGlsZSgpIiBmdW5jdGlvbnMuXG4nLAogICdpZC1jbGFzc2VzJzogJ1xuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG4iXyoiXG4gICBOb3QgaW1wb3J0ZWQgYnkgImZyb20gbW9kdWxlIGltcG9ydCAqIi4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXIgIl8iXG4gICBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoZVxuICAgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlICJidWlsdGlucyIgbW9kdWxlLiAgV2hlbiBub3RcbiAgIGluIGludGVyYWN0aXZlIG1vZGUsICJfIiBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3QgZGVmaW5lZC5cbiAgIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lICJfIiBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgImdldHRleHQiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnZlbnRpb24uXG5cbiJfXypfXyJcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mICJfXypfXyIgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXMgbm90XG4gICBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZSB3aXRob3V0XG4gICB3YXJuaW5nLlxuXG4iX18qIlxuICAgQ2xhc3MtcHJpdmF0ZSBuYW1lcy4gIE5hbWVzIGluIHRoaXMgY2F0ZWdvcnksIHdoZW4gdXNlZCB3aXRoaW4gdGhlXG4gICBjb250ZXh0IG9mIGEgY2xhc3MgZGVmaW5pdGlvbiwgYXJlIHJlLXdyaXR0ZW4gdG8gdXNlIGEgbWFuZ2xlZCBmb3JtXG4gICB0byBoZWxwIGF2b2lkIG5hbWUgY2xhc2hlcyBiZXR3ZWVuICJwcml2YXRlIiBhdHRyaWJ1dGVzIG9mIGJhc2UgYW5kXG4gICBkZXJpdmVkIGNsYXNzZXMuIFNlZSBzZWN0aW9uICpJZGVudGlmaWVycyAoTmFtZXMpKi5cbicsCiAgJ2lkZW50aWZpZXJzJzogJ1xuSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzXG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuSWRlbnRpZmllcnMgKGFsc28gcmVmZXJyZWQgdG8gYXMgKm5hbWVzKikgYXJlIGRlc2NyaWJlZCBieSB0aGVcbmZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zLlxuXG5UaGUgc3ludGF4IG9mIGlkZW50aWZpZXJzIGluIFB5dGhvbiBpcyBiYXNlZCBvbiB0aGUgVW5pY29kZSBzdGFuZGFyZFxuYW5uZXggVUFYLTMxLCB3aXRoIGVsYWJvcmF0aW9uIGFuZCBjaGFuZ2VzIGFzIGRlZmluZWQgYmVsb3c7IHNlZSBhbHNvXG4qKlBFUCAzMTMxKiogZm9yIGZ1cnRoZXIgZGV0YWlscy5cblxuV2l0aGluIHRoZSBBU0NJSSByYW5nZSAoVSswMDAxLi5VKzAwN0YpLCB0aGUgdmFsaWQgY2hhcmFjdGVycyBmb3JcbmlkZW50aWZpZXJzIGFyZSB0aGUgc2FtZSBhcyBpbiBQeXRob24gMi54OiB0aGUgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2VcbmxldHRlcnMgIkEiIHRocm91Z2ggIloiLCB0aGUgdW5kZXJzY29yZSAiXyIgYW5kLCBleGNlcHQgZm9yIHRoZSBmaXJzdFxuY2hhcmFjdGVyLCB0aGUgZGlnaXRzICIwIiB0aHJvdWdoICI5Ii5cblxuUHl0aG9uIDMuMCBpbnRyb2R1Y2VzIGFkZGl0aW9uYWwgY2hhcmFjdGVycyBmcm9tIG91dHNpZGUgdGhlIEFTQ0lJXG5yYW5nZSAoc2VlICoqUEVQIDMxMzEqKikuICBGb3IgdGhlc2UgY2hhcmFjdGVycywgdGhlIGNsYXNzaWZpY2F0aW9uXG51c2VzIHRoZSB2ZXJzaW9uIG9mIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSBhcyBpbmNsdWRlZCBpbiB0aGVcbiJ1bmljb2RlZGF0YSIgbW9kdWxlLlxuXG5JZGVudGlmaWVycyBhcmUgdW5saW1pdGVkIGluIGxlbmd0aC4gIENhc2UgaXMgc2lnbmlmaWNhbnQuXG5cbiAgIGlkZW50aWZpZXIgICA6Oj0geGlkX3N0YXJ0IHhpZF9jb250aW51ZSpcbiAgIGlkX3N0YXJ0ICAgICA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGdlbmVyYWwgY2F0ZWdvcmllcyBMdSwgTGwsIEx0LCBMbSwgTG8sIE5sLCB0aGUgdW5kZXJzY29yZSwgYW5kIGNoYXJhY3RlcnMgd2l0aCB0aGUgT3RoZXJfSURfU3RhcnQgcHJvcGVydHk+XG4gICBpZF9jb250aW51ZSAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBpZF9zdGFydCwgcGx1cyBjaGFyYWN0ZXJzIGluIHRoZSBjYXRlZ29yaWVzIE1uLCBNYywgTmQsIFBjIGFuZCBvdGhlcnMgd2l0aCB0aGUgT3RoZXJfSURfQ29udGludWUgcHJvcGVydHk+XG4gICB4aWRfc3RhcnQgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBpZF9zdGFydCB3aG9zZSBORktDIG5vcm1hbGl6YXRpb24gaXMgaW4gImlkX3N0YXJ0IHhpZF9jb250aW51ZSoiPlxuICAgeGlkX2NvbnRpbnVlIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfY29udGludWUgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9jb250aW51ZSoiPlxuXG5UaGUgVW5pY29kZSBjYXRlZ29yeSBjb2RlcyBtZW50aW9uZWQgYWJvdmUgc3RhbmQgZm9yOlxuXG4qICpMdSogLSB1cHBlcmNhc2UgbGV0dGVyc1xuXG4qICpMbCogLSBsb3dlcmNhc2UgbGV0dGVyc1xuXG4qICpMdCogLSB0aXRsZWNhc2UgbGV0dGVyc1xuXG4qICpMbSogLSBtb2RpZmllciBsZXR0ZXJzXG5cbiogKkxvKiAtIG90aGVyIGxldHRlcnNcblxuKiAqTmwqIC0gbGV0dGVyIG51bWJlcnNcblxuKiAqTW4qIC0gbm9uc3BhY2luZyBtYXJrc1xuXG4qICpNYyogLSBzcGFjaW5nIGNvbWJpbmluZyBtYXJrc1xuXG4qICpOZCogLSBkZWNpbWFsIG51bWJlcnNcblxuKiAqUGMqIC0gY29ubmVjdG9yIHB1bmN0dWF0aW9uc1xuXG4qICpPdGhlcl9JRF9TdGFydCogLSBleHBsaWNpdCBsaXN0IG9mIGNoYXJhY3RlcnMgaW4gUHJvcExpc3QudHh0IHRvXG4gIHN1cHBvcnQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuKiAqT3RoZXJfSURfQ29udGludWUqIC0gbGlrZXdpc2VcblxuQWxsIGlkZW50aWZpZXJzIGFyZSBjb252ZXJ0ZWQgaW50byB0aGUgbm9ybWFsIGZvcm0gTkZLQyB3aGlsZSBwYXJzaW5nO1xuY29tcGFyaXNvbiBvZiBpZGVudGlmaWVycyBpcyBiYXNlZCBvbiBORktDLlxuXG5BIG5vbi1ub3JtYXRpdmUgSFRNTCBmaWxlIGxpc3RpbmcgYWxsIHZhbGlkIGlkZW50aWZpZXIgY2hhcmFjdGVycyBmb3JcblVuaWNvZGUgNC4xIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LmRjbC5ocGkudW5pLVxucG90c2RhbS5kZS9ob21lL2xvZXdpcy90YWJsZS0zMTMxLmh0bWwuXG5cblxuS2V5d29yZHNcbj09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgaWRlbnRpZmllcnMgYXJlIHVzZWQgYXMgcmVzZXJ2ZWQgd29yZHMsIG9yICprZXl3b3Jkcyogb2ZcbnRoZSBsYW5ndWFnZSwgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIG9yZGluYXJ5IGlkZW50aWZpZXJzLiAgVGhleSBtdXN0XG5iZSBzcGVsbGVkIGV4YWN0bHkgYXMgd3JpdHRlbiBoZXJlOlxuXG4gICBGYWxzZSAgICAgIGNsYXNzICAgICAgZmluYWxseSAgICBpcyAgICAgICAgIHJldHVyblxuICAgTm9uZSAgICAgICBjb250aW51ZSAgIGZvciAgICAgICAgbGFtYmRhICAgICB0cnlcbiAgIFRydWUgICAgICAgZGVmICAgICAgICBmcm9tICAgICAgIG5vbmxvY2FsICAgd2hpbGVcbiAgIGFuZCAgICAgICAgZGVsICAgICAgICBnbG9iYWwgICAgIG5vdCAgICAgICAgd2l0aFxuICAgYXMgICAgICAgICBlbGlmICAgICAgIGlmICAgICAgICAgb3IgICAgICAgICB5aWVsZFxuICAgYXNzZXJ0ICAgICBlbHNlICAgICAgIGltcG9ydCAgICAgcGFzc1xuICAgYnJlYWsgICAgICBleGNlcHQgICAgIGluICAgICAgICAgcmFpc2VcblxuXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbiJfKiJcbiAgIE5vdCBpbXBvcnRlZCBieSAiZnJvbSBtb2R1bGUgaW1wb3J0ICoiLiAgVGhlIHNwZWNpYWwgaWRlbnRpZmllciAiXyJcbiAgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2YgdGhlXG4gICBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgImJ1aWx0aW5zIiBtb2R1bGUuICBXaGVuIG5vdFxuICAgaW4gaW50ZXJhY3RpdmUgbW9kZSwgIl8iIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgYW5kIGlzIG5vdCBkZWZpbmVkLlxuICAgU2VlIHNlY3Rpb24gKlRoZSBpbXBvcnQgc3RhdGVtZW50Ki5cblxuICAgTm90ZTogVGhlIG5hbWUgIl8iIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICAiZ2V0dGV4dCIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuIl9fKl9fIlxuICAgU3lzdGVtLWRlZmluZWQgbmFtZXMuIFRoZXNlIG5hbWVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnByZXRlclxuICAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiAoaW5jbHVkaW5nIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KS4gIEN1cnJlbnRcbiAgIHN5c3RlbSBuYW1lcyBhcmUgZGlzY3Vzc2VkIGluIHRoZSAqU3BlY2lhbCBtZXRob2QgbmFtZXMqIHNlY3Rpb25cbiAgIGFuZCBlbHNld2hlcmUuICBNb3JlIHdpbGwgbGlrZWx5IGJlIGRlZmluZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mXG4gICBQeXRob24uICAqQW55KiB1c2Ugb2YgIl9fKl9fIiBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lcyBub3RcbiAgIGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlIHdpdGhvdXRcbiAgIHdhcm5pbmcuXG5cbiJfXyoiXG4gICBDbGFzcy1wcml2YXRlIG5hbWVzLiAgTmFtZXMgaW4gdGhpcyBjYXRlZ29yeSwgd2hlbiB1c2VkIHdpdGhpbiB0aGVcbiAgIGNvbnRleHQgb2YgYSBjbGFzcyBkZWZpbml0aW9uLCBhcmUgcmUtd3JpdHRlbiB0byB1c2UgYSBtYW5nbGVkIGZvcm1cbiAgIHRvIGhlbHAgYXZvaWQgbmFtZSBjbGFzaGVzIGJldHdlZW4gInByaXZhdGUiIGF0dHJpYnV0ZXMgb2YgYmFzZSBhbmRcbiAgIGRlcml2ZWQgY2xhc3Nlcy4gU2VlIHNlY3Rpb24gKklkZW50aWZpZXJzIChOYW1lcykqLlxuJywKQEAgLTQ5LDI0ICs0OSwyNCBAQAogICduYW1pbmcnOiAnXG5OYW1pbmcgYW5kIGJpbmRpbmdcbioqKioqKioqKioqKioqKioqKlxuXG4qTmFtZXMqIHJlZmVyIHRvIG9iamVjdHMuICBOYW1lcyBhcmUgaW50cm9kdWNlZCBieSBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuIEVhY2ggb2NjdXJyZW5jZSBvZiBhIG5hbWUgaW4gdGhlIHByb2dyYW0gdGV4dCByZWZlcnMgdG9cbnRoZSAqYmluZGluZyogb2YgdGhhdCBuYW1lIGVzdGFibGlzaGVkIGluIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24gYmxvY2tcbmNvbnRhaW5pbmcgdGhlIHVzZS5cblxuQSAqYmxvY2sqIGlzIGEgcGllY2Ugb2YgUHl0aG9uIHByb2dyYW0gdGV4dCB0aGF0IGlzIGV4ZWN1dGVkIGFzIGFcbnVuaXQuIFRoZSBmb2xsb3dpbmcgYXJlIGJsb2NrczogYSBtb2R1bGUsIGEgZnVuY3Rpb24gYm9keSwgYW5kIGEgY2xhc3NcbmRlZmluaXRpb24uIEVhY2ggY29tbWFuZCB0eXBlZCBpbnRlcmFjdGl2ZWx5IGlzIGEgYmxvY2suICBBIHNjcmlwdFxuZmlsZSAoYSBmaWxlIGdpdmVuIGFzIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbnRlcnByZXRlciBvciBzcGVjaWZpZWRcbm9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmUgdGhlIGZpcnN0IGFyZ3VtZW50KSBpcyBhIGNvZGUgYmxvY2suXG5BIHNjcmlwdCBjb21tYW5kIChhIGNvbW1hbmQgc3BlY2lmaWVkIG9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmVcbndpdGggdGhlIFwnKiotYyoqXCcgb3B0aW9uKSBpcyBhIGNvZGUgYmxvY2suICBUaGUgc3RyaW5nIGFyZ3VtZW50IHBhc3NlZFxudG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZXZhbCgpIiBhbmQgImV4ZWMoKSIgaXMgYSBjb2RlIGJsb2NrLlxuXG5BIGNvZGUgYmxvY2sgaXMgZXhlY3V0ZWQgaW4gYW4gKmV4ZWN1dGlvbiBmcmFtZSouICBBIGZyYW1lIGNvbnRhaW5zXG5zb21lIGFkbWluaXN0cmF0aXZlIGluZm9ybWF0aW9uICh1c2VkIGZvciBkZWJ1Z2dpbmcpIGFuZCBkZXRlcm1pbmVzXG53aGVyZSBhbmQgaG93IGV4ZWN1dGlvbiBjb250aW51ZXMgYWZ0ZXIgdGhlIGNvZGUgYmxvY2tcJ3MgZXhlY3V0aW9uIGhhc1xuY29tcGxldGVkLlxuXG5BICpzY29wZSogZGVmaW5lcyB0aGUgdmlzaWJpbGl0eSBvZiBhIG5hbWUgd2l0aGluIGEgYmxvY2suICBJZiBhIGxvY2FsXG52YXJpYWJsZSBpcyBkZWZpbmVkIGluIGEgYmxvY2ssIGl0cyBzY29wZSBpbmNsdWRlcyB0aGF0IGJsb2NrLiAgSWYgdGhlXG5kZWZpbml0aW9uIG9jY3VycyBpbiBhIGZ1bmN0aW9uIGJsb2NrLCB0aGUgc2NvcGUgZXh0ZW5kcyB0byBhbnkgYmxvY2tzXG5jb250YWluZWQgd2l0aGluIHRoZSBkZWZpbmluZyBvbmUsIHVubGVzcyBhIGNvbnRhaW5lZCBibG9jayBpbnRyb2R1Y2VzXG5hIGRpZmZlcmVudCBiaW5kaW5nIGZvciB0aGUgbmFtZS4gIFRoZSBzY29wZSBvZiBuYW1lcyBkZWZpbmVkIGluIGFcbmNsYXNzIGJsb2NrIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzIGJsb2NrOyBpdCBkb2VzIG5vdCBleHRlbmQgdG8gdGhlXG5jb2RlIGJsb2NrcyBvZiBtZXRob2RzIC0tIHRoaXMgaW5jbHVkZXMgY29tcHJlaGVuc2lvbnMgYW5kIGdlbmVyYXRvclxuZXhwcmVzc2lvbnMgc2luY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYSBmdW5jdGlvbiBzY29wZS4gIFRoaXNcbm1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyB3aWxsIGZhaWw6XG5cbiAgIGNsYXNzIEE6XG4gICAgICAgYSA9IDQyXG4gICAgICAgYiA9IGxpc3QoYSArIGkgZm9yIGkgaW4gcmFuZ2UoMTApKVxuXG5XaGVuIGEgbmFtZSBpcyB1c2VkIGluIGEgY29kZSBibG9jaywgaXQgaXMgcmVzb2x2ZWQgdXNpbmcgdGhlIG5lYXJlc3RcbmVuY2xvc2luZyBzY29wZS4gIFRoZSBzZXQgb2YgYWxsIHN1Y2ggc2NvcGVzIHZpc2libGUgdG8gYSBjb2RlIGJsb2NrXG5pcyBjYWxsZWQgdGhlIGJsb2NrXCdzICplbnZpcm9ubWVudCouXG5cbklmIGEgbmFtZSBpcyBib3VuZCBpbiBhIGJsb2NrLCBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9mIHRoYXQgYmxvY2ssXG51bmxlc3MgZGVjbGFyZWQgYXMgIm5vbmxvY2FsIi4gIElmIGEgbmFtZSBpcyBib3VuZCBhdCB0aGUgbW9kdWxlXG5sZXZlbCwgaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuICAoVGhlIHZhcmlhYmxlcyBvZiB0aGUgbW9kdWxlIGNvZGVcbmJsb2NrIGFyZSBsb2NhbCBhbmQgZ2xvYmFsLikgIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2tcbmJ1dCBub3QgZGVmaW5lZCB0aGVyZSwgaXQgaXMgYSAqZnJlZSB2YXJpYWJsZSouXG5cbldoZW4gYSBuYW1lIGlzIG5vdCBmb3VuZCBhdCBhbGwsIGEgIk5hbWVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbklmIHRoZSBuYW1lIHJlZmVycyB0byBhIGxvY2FsIHZhcmlhYmxlIHRoYXQgaGFzIG5vdCBiZWVuIGJvdW5kLCBhXG4iVW5ib3VuZExvY2FsRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuICAiVW5ib3VuZExvY2FsRXJyb3IiIGlzIGFcbnN1YmNsYXNzIG9mICJOYW1lRXJyb3IiLlxuXG5UaGUgZm9sbG93aW5nIGNvbnN0cnVjdHMgYmluZCBuYW1lczogZm9ybWFsIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb25zLFxuImltcG9ydCIgc3RhdGVtZW50cywgY2xhc3MgYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zICh0aGVzZSBiaW5kIHRoZVxuY2xhc3Mgb3IgZnVuY3Rpb24gbmFtZSBpbiB0aGUgZGVmaW5pbmcgYmxvY2spLCBhbmQgdGFyZ2V0cyB0aGF0IGFyZVxuaWRlbnRpZmllcnMgaWYgb2NjdXJyaW5nIGluIGFuIGFzc2lnbm1lbnQsICJmb3IiIGxvb3AgaGVhZGVyLCBvciBhZnRlclxuImFzIiBpbiBhICJ3aXRoIiBzdGF0ZW1lbnQgb3IgImV4Y2VwdCIgY2xhdXNlLiBUaGUgImltcG9ydCIgc3RhdGVtZW50XG5vZiB0aGUgZm9ybSAiZnJvbSAuLi4gaW1wb3J0ICoiIGJpbmRzIGFsbCBuYW1lcyBkZWZpbmVkIGluIHRoZVxuaW1wb3J0ZWQgbW9kdWxlLCBleGNlcHQgdGhvc2UgYmVnaW5uaW5nIHdpdGggYW4gdW5kZXJzY29yZS4gIFRoaXMgZm9ybVxubWF5IG9ubHkgYmUgdXNlZCBhdCB0aGUgbW9kdWxlIGxldmVsLlxuXG5BIHRhcmdldCBvY2N1cnJpbmcgaW4gYSAiZGVsIiBzdGF0ZW1lbnQgaXMgYWxzbyBjb25zaWRlcmVkIGJvdW5kIGZvclxudGhpcyBwdXJwb3NlICh0aG91Z2ggdGhlIGFjdHVhbCBzZW1hbnRpY3MgYXJlIHRvIHVuYmluZCB0aGUgbmFtZSkuXG5cbkVhY2ggYXNzaWdubWVudCBvciBpbXBvcnQgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jayBkZWZpbmVkIGJ5IGFcbmNsYXNzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgYXQgdGhlIG1vZHVsZSBsZXZlbCAodGhlIHRvcC1sZXZlbFxuY29kZSBibG9jaykuXG5cbklmIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbiBvY2N1cnMgYW55d2hlcmUgd2l0aGluIGEgY29kZSBibG9jaywgYWxsXG51c2VzIG9mIHRoZSBuYW1lIHdpdGhpbiB0aGUgYmxvY2sgYXJlIHRyZWF0ZWQgYXMgcmVmZXJlbmNlcyB0byB0aGVcbmN1cnJlbnQgYmxvY2suICBUaGlzIGNhbiBsZWFkIHRvIGVycm9ycyB3aGVuIGEgbmFtZSBpcyB1c2VkIHdpdGhpbiBhXG5ibG9jayBiZWZvcmUgaXQgaXMgYm91bmQuICBUaGlzIHJ1bGUgaXMgc3VidGxlLiAgUHl0aG9uIGxhY2tzXG5kZWNsYXJhdGlvbnMgYW5kIGFsbG93cyBuYW1lIGJpbmRpbmcgb3BlcmF0aW9ucyB0byBvY2N1ciBhbnl3aGVyZVxud2l0aGluIGEgY29kZSBibG9jay4gIFRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYSBjb2RlIGJsb2NrIGNhbiBiZVxuZGV0ZXJtaW5lZCBieSBzY2FubmluZyB0aGUgZW50aXJlIHRleHQgb2YgdGhlIGJsb2NrIGZvciBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuXG5cbklmIHRoZSAiZ2xvYmFsIiBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrLCBhbGwgdXNlcyBvZiB0aGUgbmFtZVxuc3BlY2lmaWVkIGluIHRoZSBzdGF0ZW1lbnQgcmVmZXIgdG8gdGhlIGJpbmRpbmcgb2YgdGhhdCBuYW1lIGluIHRoZVxudG9wLWxldmVsIG5hbWVzcGFjZS4gIE5hbWVzIGFyZSByZXNvbHZlZCBpbiB0aGUgdG9wLWxldmVsIG5hbWVzcGFjZSBieVxuc2VhcmNoaW5nIHRoZSBnbG9iYWwgbmFtZXNwYWNlLCBpLmUuIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZVxuY29udGFpbmluZyB0aGUgY29kZSBibG9jaywgYW5kIHRoZSBidWlsdGlucyBuYW1lc3BhY2UsIHRoZSBuYW1lc3BhY2Vcbm9mIHRoZSBtb2R1bGUgImJ1aWx0aW5zIi4gIFRoZSBnbG9iYWwgbmFtZXNwYWNlIGlzIHNlYXJjaGVkIGZpcnN0LiAgSWZcbnRoZSBuYW1lIGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBpcyBzZWFyY2hlZC4gIFRoZVxuZ2xvYmFsIHN0YXRlbWVudCBtdXN0IHByZWNlZGUgYWxsIHVzZXMgb2YgdGhlIG5hbWUuXG5cblRoZSBidWlsdGlucyBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBleGVjdXRpb24gb2YgYSBjb2RlIGJsb2NrXG5pcyBhY3R1YWxseSBmb3VuZCBieSBsb29raW5nIHVwIHRoZSBuYW1lICJfX2J1aWx0aW5zX18iIGluIGl0cyBnbG9iYWxcbm5hbWVzcGFjZTsgdGhpcyBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5IG9yIGEgbW9kdWxlIChpbiB0aGUgbGF0dGVyIGNhc2VcbnRoZSBtb2R1bGVcJ3MgZGljdGlvbmFyeSBpcyB1c2VkKS4gIEJ5IGRlZmF1bHQsIHdoZW4gaW4gdGhlICJfX21haW5fXyJcbm1vZHVsZSwgIl9fYnVpbHRpbnNfXyIgaXMgdGhlIGJ1aWx0LWluIG1vZHVsZSAiYnVpbHRpbnMiOyB3aGVuIGluIGFueVxub3RoZXIgbW9kdWxlLCAiX19idWlsdGluc19fIiBpcyBhbiBhbGlhcyBmb3IgdGhlIGRpY3Rpb25hcnkgb2YgdGhlXG4iYnVpbHRpbnMiIG1vZHVsZSBpdHNlbGYuICAiX19idWlsdGluc19fIiBjYW4gYmUgc2V0IHRvIGEgdXNlci1jcmVhdGVkXG5kaWN0aW9uYXJ5IHRvIGNyZWF0ZSBhIHdlYWsgZm9ybSBvZiByZXN0cmljdGVkIGV4ZWN1dGlvbi5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBVc2VycyBzaG91bGQgbm90IHRvdWNoXG4iX19idWlsdGluc19fIjsgaXQgaXMgc3RyaWN0bHkgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiAgVXNlcnNcbndhbnRpbmcgdG8gb3ZlcnJpZGUgdmFsdWVzIGluIHRoZSBidWlsdGlucyBuYW1lc3BhY2Ugc2hvdWxkICJpbXBvcnQiXG50aGUgImJ1aWx0aW5zIiBtb2R1bGUgYW5kIG1vZGlmeSBpdHMgYXR0cmlidXRlcyBhcHByb3ByaWF0ZWx5LlxuXG5UaGUgbmFtZXNwYWNlIGZvciBhIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUgYVxubW9kdWxlIGlzIGltcG9ydGVkLiAgVGhlIG1haW4gbW9kdWxlIGZvciBhIHNjcmlwdCBpcyBhbHdheXMgY2FsbGVkXG4iX19tYWluX18iLlxuXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIG5hbWUgYmluZGluZyBvcGVyYXRpb25cbmluIHRoZSBzYW1lIGJsb2NrLiAgSWYgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlIGZvciBhIGZyZWUgdmFyaWFibGVcbmNvbnRhaW5zIGEgZ2xvYmFsIHN0YXRlbWVudCwgdGhlIGZyZWUgdmFyaWFibGUgaXMgdHJlYXRlZCBhcyBhIGdsb2JhbC5cblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50IHRoYXQgbWF5IHVzZSBhbmQgZGVmaW5lXG5uYW1lcy4gVGhlc2UgcmVmZXJlbmNlcyBmb2xsb3cgdGhlIG5vcm1hbCBydWxlcyBmb3IgbmFtZSByZXNvbHV0aW9uLlxuVGhlIG5hbWVzcGFjZSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBiZWNvbWVzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeVxub2YgdGhlIGNsYXNzLiAgTmFtZXMgZGVmaW5lZCBhdCB0aGUgY2xhc3Mgc2NvcGUgYXJlIG5vdCB2aXNpYmxlIGluXG5tZXRob2RzLlxuXG5cbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cbklmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tICJpbXBvcnQgKiIgLS0tIGlzIHVzZWQgaW4gYVxuZnVuY3Rpb24gYW5kIHRoZSBmdW5jdGlvbiBjb250YWlucyBvciBpcyBhIG5lc3RlZCBibG9jayB3aXRoIGZyZWVcbnZhcmlhYmxlcywgdGhlIGNvbXBpbGVyIHdpbGwgcmFpc2UgYSAiU3ludGF4RXJyb3IiLlxuXG5UaGUgImV2YWwoKSIgYW5kICJleGVjKCkiIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGxcbmVudmlyb25tZW50IGZvciByZXNvbHZpbmcgbmFtZXMuICBOYW1lcyBtYXkgYmUgcmVzb2x2ZWQgaW4gdGhlIGxvY2FsXG5hbmQgZ2xvYmFsIG5hbWVzcGFjZXMgb2YgdGhlIGNhbGxlci4gIEZyZWUgdmFyaWFibGVzIGFyZSBub3QgcmVzb2x2ZWRcbmluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBuYW1lc3BhY2UsIGJ1dCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gIFsxXVxuVGhlICJleGVjKCkiIGFuZCAiZXZhbCgpIiBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuJywKICAnbm9ubG9jYWwnOiAnXG5UaGUgIm5vbmxvY2FsIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBub25sb2NhbF9zdG10IDo6PSAibm9ubG9jYWwiIGlkZW50aWZpZXIgKCIsIiBpZGVudGlmaWVyKSpcblxuVGhlICJub25sb2NhbCIgc3RhdGVtZW50IGNhdXNlcyB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIHRvIHJlZmVyIHRvXG5wcmV2aW91c2x5IGJvdW5kIHZhcmlhYmxlcyBpbiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUuICBUaGlzIGlzXG5pbXBvcnRhbnQgYmVjYXVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYmluZGluZyBpcyB0byBzZWFyY2ggdGhlXG5sb2NhbCBuYW1lc3BhY2UgZmlyc3QuICBUaGUgc3RhdGVtZW50IGFsbG93cyBlbmNhcHN1bGF0ZWQgY29kZSB0b1xucmViaW5kIHZhcmlhYmxlcyBvdXRzaWRlIG9mIHRoZSBsb2NhbCBzY29wZSBiZXNpZGVzIHRoZSBnbG9iYWxcbihtb2R1bGUpIHNjb3BlLlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAibm9ubG9jYWwiIHN0YXRlbWVudCwgdW5saWtlIHRvIHRob3NlIGxpc3RlZCBpbiBhXG4iZ2xvYmFsIiBzdGF0ZW1lbnQsIG11c3QgcmVmZXIgdG8gcHJlLWV4aXN0aW5nIGJpbmRpbmdzIGluIGFuXG5lbmNsb3Npbmcgc2NvcGUgKHRoZSBzY29wZSBpbiB3aGljaCBhIG5ldyBiaW5kaW5nIHNob3VsZCBiZSBjcmVhdGVkXG5jYW5ub3QgYmUgZGV0ZXJtaW5lZCB1bmFtYmlndW91c2x5KS5cblxuTmFtZXMgbGlzdGVkIGluIGEgIm5vbmxvY2FsIiBzdGF0ZW1lbnQgbXVzdCBub3QgY29sbGlkZSB3aXRoIHByZS1cbmV4aXN0aW5nIGJpbmRpbmdzIGluIHRoZSBsb2NhbCBzY29wZS5cblxuU2VlIGFsc286ICoqUEVQIDMxMDQqKiAtIEFjY2VzcyB0byBOYW1lcyBpbiBPdXRlciBTY29wZXNcblxuICAgICBUaGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlICJub25sb2NhbCIgc3RhdGVtZW50LlxuJywKICAnbnVtYmVycyc6ICdcbk51bWVyaWMgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIG51bWVyaWMgbGl0ZXJhbHM6IGludGVnZXJzLCBmbG9hdGluZyBwb2ludFxubnVtYmVycywgYW5kIGltYWdpbmFyeSBudW1iZXJzLiAgVGhlcmUgYXJlIG5vIGNvbXBsZXggbGl0ZXJhbHNcbihjb21wbGV4IG51bWJlcnMgY2FuIGJlIGZvcm1lZCBieSBhZGRpbmcgYSByZWFsIG51bWJlciBhbmQgYW5cbmltYWdpbmFyeSBudW1iZXIpLlxuXG5Ob3RlIHRoYXQgbnVtZXJpYyBsaXRlcmFscyBkbyBub3QgaW5jbHVkZSBhIHNpZ247IGEgcGhyYXNlIGxpa2UgIi0xIlxuaXMgYWN0dWFsbHkgYW4gZXhwcmVzc2lvbiBjb21wb3NlZCBvZiB0aGUgdW5hcnkgb3BlcmF0b3IgXCciLSJcJyBhbmQgdGhlXG5saXRlcmFsICIxIi5cbicsCi0gJ251bWVyaWMtdHlwZXMnOiAnXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlXG4gICBleHByZXNzaW9uICJ4ICsgeSIsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuXG4gICAiX19hZGRfXygpIiBtZXRob2QsICJ4Ll9fYWRkX18oeSkiIGlzIGNhbGxlZC4gIFRoZSAiX19kaXZtb2RfXygpIlxuICAgbWV0aG9kIHNob3VsZCBiZSB0aGUgZXF1aXZhbGVudCB0byB1c2luZyAiX19mbG9vcmRpdl9fKCkiIGFuZFxuICAgIl9fbW9kX18oKSI7IGl0IHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byAiX190cnVlZGl2X18oKSIuICBOb3RlXG4gICB0aGF0ICJfX3Bvd19fKCkiIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gInBvdygpIiBmdW5jdGlvbiBpc1xuICAgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiAiTm90SW1wbGVtZW50ZWQiLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8Iikgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLlxuICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90XG4gICBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZlxuICAgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gInggLVxuICAgeSIsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX3JzdWJfXygpIlxuICAgbWV0aG9kLCAieS5fX3JzdWJfXyh4KSIgaXMgY2FsbGVkIGlmICJ4Ll9fc3ViX18oeSkiIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5ICJwb3coKSIgd2lsbCBub3QgdHJ5IGNhbGxpbmcgIl9fcnBvd19fKCkiICh0aGVcbiAgIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kXG4gICAgIGZvciB0aGUgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXNcbiAgICAgdG8gb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKCIrPSIsICItPSIsICIqPSIsICIvPSIsICIvLz0iLCAiJT0iLCAiKio9IiwgIjw8PSIsXG4gICAiPj49IiwgIiY9IiwgIl49IiwgInw9IikuICBUaGVzZSBtZXRob2RzIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZVxuICAgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoXG4gICBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWQgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWxcbiAgIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIHRvIGV4ZWN1dGUgdGhlIHN0YXRlbWVudCAieCArPSB5Iiwgd2hlcmVcbiAgICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX2lhZGRfXygpIiBtZXRob2QsXG4gICAieC5fX2lhZGRfXyh5KSIgaXMgY2FsbGVkLiAgSWYgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdFxuICAgZG9lcyBub3QgZGVmaW5lIGEgIl9faWFkZF9fKCkiIG1ldGhvZCwgInguX19hZGRfXyh5KSIgYW5kXG4gICAieS5fX3JhZGRfXyh4KSIgYXJlIGNvbnNpZGVyZWQsIGFzIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgInggKyB5Ii5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zICgiLSIsICIrIixcbiAgICJhYnMoKSIgYW5kICJ+IikuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcbm9iamVjdC5fX3JvdW5kX18oc2VsZlssIG5dKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImNvbXBsZXgoKSIsICJpbnQoKSIsXG4gICAiZmxvYXQoKSIgYW5kICJyb3VuZCgpIi4gIFNob3VsZCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgYXBwcm9wcmlhdGVcbiAgIHR5cGUuXG5cbm9iamVjdC5fX2luZGV4X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAib3BlcmF0b3IuaW5kZXgoKSIuICBBbHNvIGNhbGxlZCB3aGVuZXZlclxuICAgUHl0aG9uIG5lZWRzIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZVxuICAgYnVpbHQtaW4gImJpbigpIiwgImhleCgpIiBhbmQgIm9jdCgpIiBmdW5jdGlvbnMpLiBNdXN0IHJldHVybiBhblxuICAgaW50ZWdlci5cbicsCisgJ251bWVyaWMtdHlwZXMnOiAnXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlXG4gICBleHByZXNzaW9uICJ4ICsgeSIsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuXG4gICAiX19hZGRfXygpIiBtZXRob2QsICJ4Ll9fYWRkX18oeSkiIGlzIGNhbGxlZC4gIFRoZSAiX19kaXZtb2RfXygpIlxuICAgbWV0aG9kIHNob3VsZCBiZSB0aGUgZXF1aXZhbGVudCB0byB1c2luZyAiX19mbG9vcmRpdl9fKCkiIGFuZFxuICAgIl9fbW9kX18oKSI7IGl0IHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byAiX190cnVlZGl2X18oKSIuICBOb3RlXG4gICB0aGF0ICJfX3Bvd19fKCkiIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gInBvdygpIiBmdW5jdGlvbiBpc1xuICAgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiAiTm90SW1wbGVtZW50ZWQiLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8Iikgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLlxuICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90XG4gICBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZlxuICAgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gInggLVxuICAgeSIsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX3JzdWJfXygpIlxuICAgbWV0aG9kLCAieS5fX3JzdWJfXyh4KSIgaXMgY2FsbGVkIGlmICJ4Ll9fc3ViX18oeSkiIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5ICJwb3coKSIgd2lsbCBub3QgdHJ5IGNhbGxpbmcgIl9fcnBvd19fKCkiICh0aGVcbiAgIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kXG4gICAgIGZvciB0aGUgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXNcbiAgICAgdG8gb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKCIrPSIsICItPSIsICIqPSIsICIvPSIsICIvLz0iLCAiJT0iLCAiKio9IiwgIjw8PSIsXG4gICAiPj49IiwgIiY9IiwgIl49IiwgInw9IikuICBUaGVzZSBtZXRob2RzIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZVxuICAgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoXG4gICBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWQgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWxcbiAgIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIHRvIGV4ZWN1dGUgdGhlIHN0YXRlbWVudCAieCArPSB5Iiwgd2hlcmVcbiAgICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX2lhZGRfXygpIiBtZXRob2QsXG4gICAieC5fX2lhZGRfXyh5KSIgaXMgY2FsbGVkLiAgSWYgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdFxuICAgZG9lcyBub3QgZGVmaW5lIGEgIl9faWFkZF9fKCkiIG1ldGhvZCwgInguX19hZGRfXyh5KSIgYW5kXG4gICAieS5fX3JhZGRfXyh4KSIgYXJlIGNvbnNpZGVyZWQsIGFzIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgInggKyB5Ii5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zICgiLSIsICIrIixcbiAgICJhYnMoKSIgYW5kICJ+IikuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcbm9iamVjdC5fX3JvdW5kX18oc2VsZlssIG5dKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImNvbXBsZXgoKSIsICJpbnQoKSIsXG4gICAiZmxvYXQoKSIgYW5kICJyb3VuZCgpIi4gIFNob3VsZCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgYXBwcm9wcmlhdGVcbiAgIHR5cGUuXG5cbm9iamVjdC5fX2luZGV4X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAib3BlcmF0b3IuaW5kZXgoKSIsIGFuZCB3aGVuZXZlciBQeXRob24gbmVlZHNcbiAgIHRvIGxvc3NsZXNzbHkgY29udmVydCB0aGUgbnVtZXJpYyBvYmplY3QgdG8gYW4gaW50ZWdlciBvYmplY3QgKHN1Y2hcbiAgIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZSBidWlsdC1pbiAiYmluKCkiLCAiaGV4KCkiIGFuZCAib2N0KCkiXG4gICBmdW5jdGlvbnMpLiBQcmVzZW5jZSBvZiB0aGlzIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdCB0aGUgbnVtZXJpY1xuICAgb2JqZWN0IGlzIGFuIGludGVnZXIgdHlwZS4gIE11c3QgcmV0dXJuIGFuIGludGVnZXIuXG5cbiAgIE5vdGU6IFdoZW4gIl9faW5kZXhfXygpIiBpcyBkZWZpbmVkLCAiX19pbnRfXygpIiBzaG91bGQgYWxzbyBiZVxuICAgICBkZWZpbmVkLCBhbmQgYm90aCBzaHVsZCByZXR1cm4gdGhlIHNhbWUgdmFsdWUsIGluIG9yZGVyIHRvIGhhdmUgYVxuICAgICBjb2hlcmVudCBpbnRlZ2VyIHR5cGUgY2xhc3MuXG4nLAogICdvYmplY3RzJzogJ1xuT2JqZWN0cywgdmFsdWVzIGFuZCB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4qT2JqZWN0cyogYXJlIFB5dGhvblwncyBhYnN0cmFjdGlvbiBmb3IgZGF0YS4gIEFsbCBkYXRhIGluIGEgUHl0aG9uXG5wcm9ncmFtIGlzIHJlcHJlc2VudGVkIGJ5IG9iamVjdHMgb3IgYnkgcmVsYXRpb25zIGJldHdlZW4gb2JqZWN0cy4gKEluXG5hIHNlbnNlLCBhbmQgaW4gY29uZm9ybWFuY2UgdG8gVm9uIE5ldW1hbm5cJ3MgbW9kZWwgb2YgYSAic3RvcmVkXG5wcm9ncmFtIGNvbXB1dGVyLCIgY29kZSBpcyBhbHNvIHJlcHJlc2VudGVkIGJ5IG9iamVjdHMuKVxuXG5FdmVyeSBvYmplY3QgaGFzIGFuIGlkZW50aXR5LCBhIHR5cGUgYW5kIGEgdmFsdWUuICBBbiBvYmplY3RcJ3NcbippZGVudGl0eSogbmV2ZXIgY2hhbmdlcyBvbmNlIGl0IGhhcyBiZWVuIGNyZWF0ZWQ7IHlvdSBtYXkgdGhpbmsgb2YgaXRcbmFzIHRoZSBvYmplY3RcJ3MgYWRkcmVzcyBpbiBtZW1vcnkuICBUaGUgXCciaXMiXCcgb3BlcmF0b3IgY29tcGFyZXMgdGhlXG5pZGVudGl0eSBvZiB0d28gb2JqZWN0czsgdGhlICJpZCgpIiBmdW5jdGlvbiByZXR1cm5zIGFuIGludGVnZXJcbnJlcHJlc2VudGluZyBpdHMgaWRlbnRpdHkuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogRm9yIENQeXRob24sICJpZCh4KSIgaXMgdGhlIG1lbW9yeVxuYWRkcmVzcyB3aGVyZSAieCIgaXMgc3RvcmVkLlxuXG5BbiBvYmplY3RcJ3MgdHlwZSBkZXRlcm1pbmVzIHRoZSBvcGVyYXRpb25zIHRoYXQgdGhlIG9iamVjdCBzdXBwb3J0c1xuKGUuZy4sICJkb2VzIGl0IGhhdmUgYSBsZW5ndGg/IikgYW5kIGFsc28gZGVmaW5lcyB0aGUgcG9zc2libGUgdmFsdWVzXG5mb3Igb2JqZWN0cyBvZiB0aGF0IHR5cGUuICBUaGUgInR5cGUoKSIgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3RcJ3NcbnR5cGUgKHdoaWNoIGlzIGFuIG9iamVjdCBpdHNlbGYpLiAgTGlrZSBpdHMgaWRlbnRpdHksIGFuIG9iamVjdFwnc1xuKnR5cGUqIGlzIGFsc28gdW5jaGFuZ2VhYmxlLiBbMV1cblxuVGhlICp2YWx1ZSogb2Ygc29tZSBvYmplY3RzIGNhbiBjaGFuZ2UuICBPYmplY3RzIHdob3NlIHZhbHVlIGNhblxuY2hhbmdlIGFyZSBzYWlkIHRvIGJlICptdXRhYmxlKjsgb2JqZWN0cyB3aG9zZSB2YWx1ZSBpcyB1bmNoYW5nZWFibGVcbm9uY2UgdGhleSBhcmUgY3JlYXRlZCBhcmUgY2FsbGVkICppbW11dGFibGUqLiAoVGhlIHZhbHVlIG9mIGFuXG5pbW11dGFibGUgY29udGFpbmVyIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGEgbXV0YWJsZVxub2JqZWN0IGNhbiBjaGFuZ2Ugd2hlbiB0aGUgbGF0dGVyXCdzIHZhbHVlIGlzIGNoYW5nZWQ7IGhvd2V2ZXIgdGhlXG5jb250YWluZXIgaXMgc3RpbGwgY29uc2lkZXJlZCBpbW11dGFibGUsIGJlY2F1c2UgdGhlIGNvbGxlY3Rpb24gb2Zcbm9iamVjdHMgaXQgY29udGFpbnMgY2Fubm90IGJlIGNoYW5nZWQuICBTbywgaW1tdXRhYmlsaXR5IGlzIG5vdFxuc3RyaWN0bHkgdGhlIHNhbWUgYXMgaGF2aW5nIGFuIHVuY2hhbmdlYWJsZSB2YWx1ZSwgaXQgaXMgbW9yZSBzdWJ0bGUuKVxuQW4gb2JqZWN0XCdzIG11dGFiaWxpdHkgaXMgZGV0ZXJtaW5lZCBieSBpdHMgdHlwZTsgZm9yIGluc3RhbmNlLFxubnVtYmVycywgc3RyaW5ncyBhbmQgdHVwbGVzIGFyZSBpbW11dGFibGUsIHdoaWxlIGRpY3Rpb25hcmllcyBhbmRcbmxpc3RzIGFyZSBtdXRhYmxlLlxuXG5PYmplY3RzIGFyZSBuZXZlciBleHBsaWNpdGx5IGRlc3Ryb3llZDsgaG93ZXZlciwgd2hlbiB0aGV5IGJlY29tZVxudW5yZWFjaGFibGUgdGhleSBtYXkgYmUgZ2FyYmFnZS1jb2xsZWN0ZWQuICBBbiBpbXBsZW1lbnRhdGlvbiBpc1xuYWxsb3dlZCB0byBwb3N0cG9uZSBnYXJiYWdlIGNvbGxlY3Rpb24gb3Igb21pdCBpdCBhbHRvZ2V0aGVyIC0tLSBpdCBpc1xuYSBtYXR0ZXIgb2YgaW1wbGVtZW50YXRpb24gcXVhbGl0eSBob3cgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzXG5pbXBsZW1lbnRlZCwgYXMgbG9uZyBhcyBubyBvYmplY3RzIGFyZSBjb2xsZWN0ZWQgdGhhdCBhcmUgc3RpbGxcbnJlYWNoYWJsZS5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBDUHl0aG9uIGN1cnJlbnRseSB1c2VzIGEgcmVmZXJlbmNlLVxuY291bnRpbmcgc2NoZW1lIHdpdGggKG9wdGlvbmFsKSBkZWxheWVkIGRldGVjdGlvbiBvZiBjeWNsaWNhbGx5IGxpbmtlZFxuZ2FyYmFnZSwgd2hpY2ggY29sbGVjdHMgbW9zdCBvYmplY3RzIGFzIHNvb24gYXMgdGhleSBiZWNvbWVcbnVucmVhY2hhYmxlLCBidXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gY29sbGVjdCBnYXJiYWdlIGNvbnRhaW5pbmdcbmNpcmN1bGFyIHJlZmVyZW5jZXMuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlICJnYyIgbW9kdWxlIGZvclxuaW5mb3JtYXRpb24gb24gY29udHJvbGxpbmcgdGhlIGNvbGxlY3Rpb24gb2YgY3ljbGljIGdhcmJhZ2UuIE90aGVyXG5pbXBsZW1lbnRhdGlvbnMgYWN0IGRpZmZlcmVudGx5IGFuZCBDUHl0aG9uIG1heSBjaGFuZ2UuIERvIG5vdCBkZXBlbmRcbm9uIGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gb2Ygb2JqZWN0cyB3aGVuIHRoZXkgYmVjb21lIHVucmVhY2hhYmxlIChleDpcbmFsd2F5cyBjbG9zZSBmaWxlcykuXG5cbk5vdGUgdGhhdCB0aGUgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvblwncyB0cmFjaW5nIG9yIGRlYnVnZ2luZ1xuZmFjaWxpdGllcyBtYXkga2VlcCBvYmplY3RzIGFsaXZlIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgY29sbGVjdGFibGUuXG5BbHNvIG5vdGUgdGhhdCBjYXRjaGluZyBhbiBleGNlcHRpb24gd2l0aCBhIFwnInRyeSIuLi4iZXhjZXB0IlwnXG5zdGF0ZW1lbnQgbWF5IGtlZXAgb2JqZWN0cyBhbGl2ZS5cblxuU29tZSBvYmplY3RzIGNvbnRhaW4gcmVmZXJlbmNlcyB0byAiZXh0ZXJuYWwiIHJlc291cmNlcyBzdWNoIGFzIG9wZW5cbmZpbGVzIG9yIHdpbmRvd3MuICBJdCBpcyB1bmRlcnN0b29kIHRoYXQgdGhlc2UgcmVzb3VyY2VzIGFyZSBmcmVlZFxud2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UtY29sbGVjdGVkLCBidXQgc2luY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzXG5ub3QgZ3VhcmFudGVlZCB0byBoYXBwZW4sIHN1Y2ggb2JqZWN0cyBhbHNvIHByb3ZpZGUgYW4gZXhwbGljaXQgd2F5IHRvXG5yZWxlYXNlIHRoZSBleHRlcm5hbCByZXNvdXJjZSwgdXN1YWxseSBhICJjbG9zZSgpIiBtZXRob2QuIFByb2dyYW1zXG5hcmUgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gZXhwbGljaXRseSBjbG9zZSBzdWNoIG9iamVjdHMuICBUaGVcblwnInRyeSIuLi4iZmluYWxseSJcJyBzdGF0ZW1lbnQgYW5kIHRoZSBcJyJ3aXRoIlwnIHN0YXRlbWVudCBwcm92aWRlXG5jb252ZW5pZW50IHdheXMgdG8gZG8gdGhpcy5cblxuU29tZSBvYmplY3RzIGNvbnRhaW4gcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzOyB0aGVzZSBhcmUgY2FsbGVkXG4qY29udGFpbmVycyouIEV4YW1wbGVzIG9mIGNvbnRhaW5lcnMgYXJlIHR1cGxlcywgbGlzdHMgYW5kXG5kaWN0aW9uYXJpZXMuICBUaGUgcmVmZXJlbmNlcyBhcmUgcGFydCBvZiBhIGNvbnRhaW5lclwncyB2YWx1ZS4gIEluXG5tb3N0IGNhc2VzLCB3aGVuIHdlIHRhbGsgYWJvdXQgdGhlIHZhbHVlIG9mIGEgY29udGFpbmVyLCB3ZSBpbXBseSB0aGVcbnZhbHVlcywgbm90IHRoZSBpZGVudGl0aWVzIG9mIHRoZSBjb250YWluZWQgb2JqZWN0czsgaG93ZXZlciwgd2hlbiB3ZVxudGFsayBhYm91dCB0aGUgbXV0YWJpbGl0eSBvZiBhIGNvbnRhaW5lciwgb25seSB0aGUgaWRlbnRpdGllcyBvZiB0aGVcbmltbWVkaWF0ZWx5IGNvbnRhaW5lZCBvYmplY3RzIGFyZSBpbXBsaWVkLiAgU28sIGlmIGFuIGltbXV0YWJsZVxuY29udGFpbmVyIChsaWtlIGEgdHVwbGUpIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGEgbXV0YWJsZSBvYmplY3QsIGl0c1xudmFsdWUgY2hhbmdlcyBpZiB0aGF0IG11dGFibGUgb2JqZWN0IGlzIGNoYW5nZWQuXG5cblR5cGVzIGFmZmVjdCBhbG1vc3QgYWxsIGFzcGVjdHMgb2Ygb2JqZWN0IGJlaGF2aW9yLiAgRXZlbiB0aGVcbmltcG9ydGFuY2Ugb2Ygb2JqZWN0IGlkZW50aXR5IGlzIGFmZmVjdGVkIGluIHNvbWUgc2Vuc2U6IGZvciBpbW11dGFibGVcbnR5cGVzLCBvcGVyYXRpb25zIHRoYXQgY29tcHV0ZSBuZXcgdmFsdWVzIG1heSBhY3R1YWxseSByZXR1cm4gYVxucmVmZXJlbmNlIHRvIGFueSBleGlzdGluZyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSwgd2hpbGVcbmZvciBtdXRhYmxlIG9iamVjdHMgdGhpcyBpcyBub3QgYWxsb3dlZC4gIEUuZy4sIGFmdGVyICJhID0gMTsgYiA9IDEiLFxuImEiIGFuZCAiYiIgbWF5IG9yIG1heSBub3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0IHdpdGggdGhlIHZhbHVlXG5vbmUsIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIGJ1dCBhZnRlciAiYyA9IFtdOyBkID0gW10iLCAiYyJcbmFuZCAiZCIgYXJlIGd1YXJhbnRlZWQgdG8gcmVmZXIgdG8gdHdvIGRpZmZlcmVudCwgdW5pcXVlLCBuZXdseVxuY3JlYXRlZCBlbXB0eSBsaXN0cy4gKE5vdGUgdGhhdCAiYyA9IGQgPSBbXSIgYXNzaWducyB0aGUgc2FtZSBvYmplY3RcbnRvIGJvdGggImMiIGFuZCAiZCIuKVxuJywKICAnb3BlcmF0b3Itc3VtbWFyeSc6ICdcbk9wZXJhdG9yIHByZWNlZGVuY2VcbioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBvcGVyYXRvciBwcmVjZWRlbmNlcyBpbiBQeXRob24sXG5mcm9tIGxvd2VzdCBwcmVjZWRlbmNlIChsZWFzdCBiaW5kaW5nKSB0byBoaWdoZXN0IHByZWNlZGVuY2UgKG1vc3RcbmJpbmRpbmcpLiAgT3BlcmF0b3JzIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByZWNlZGVuY2UuICBVbmxlc3NcbnRoZSBzeW50YXggaXMgZXhwbGljaXRseSBnaXZlbiwgb3BlcmF0b3JzIGFyZSBiaW5hcnkuICBPcGVyYXRvcnMgaW5cbnRoZSBzYW1lIGJveCBncm91cCBsZWZ0IHRvIHJpZ2h0IChleGNlcHQgZm9yIGNvbXBhcmlzb25zLCBpbmNsdWRpbmdcbnRlc3RzLCB3aGljaCBhbGwgaGF2ZSB0aGUgc2FtZSBwcmVjZWRlbmNlIGFuZCBjaGFpbiBmcm9tIGxlZnQgdG8gcmlnaHRcbi0tLSBzZWUgc2VjdGlvbiAqQ29tcGFyaXNvbnMqIC0tLSBhbmQgZXhwb25lbnRpYXRpb24sIHdoaWNoIGdyb3Vwc1xuZnJvbSByaWdodCB0byBsZWZ0KS5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xufCAibGFtYmRhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExhbWJkYSBleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiaWYiIC0tICJlbHNlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvbmRpdGlvbmFsIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAib3IiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAibm90IiAieCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gTk9UICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiaW4iLCAibm90IGluIiwgImlzIiwgImlzIG5vdCIsICI8IiwgIjw9IiwgIj4iLCB8IENvbXBhcmlzb25zLCBpbmNsdWRpbmcgbWVtYmVyc2hpcCAgICAgfFxufCAiPj0iLCAiIT0iLCAiPT0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RzIGFuZCBpZGVudGl0eSB0ZXN0cyAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAifCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiXiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgWE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiJiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiPDwiLCAiPj4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNoaWZ0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKyIsICItIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKiIsICIvIiwgIi8vIiwgIiUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aW9uLCBkaXZpc2lvbiwgcmVtYWluZGVyICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiK3giLCAiLXgiLCAifngiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBvc2l0aXZlLCBuZWdhdGl2ZSwgYml0d2lzZSBOT1QgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKioiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEV4cG9uZW50aWF0aW9uIFs2XSAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAieFtpbmRleF0iLCAieFtpbmRleDppbmRleF0iLCAgICAgICAgICAgICAgICAgICB8IFN1YnNjcmlwdGlvbiwgc2xpY2luZywgY2FsbCwgICAgICAgICAgfFxufCAieChhcmd1bWVudHMuLi4pIiwgInguYXR0cmlidXRlIiAgICAgICAgICAgICAgICB8IGF0dHJpYnV0ZSByZWZlcmVuY2UgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKGV4cHJlc3Npb25zLi4uKSIsICJbZXhwcmVzc2lvbnMuLi5dIiwgIntrZXk6ICB8IEJpbmRpbmcgb3IgdHVwbGUgZGlzcGxheSwgbGlzdCAgICAgICAgfFxufCB2YWx1ZS4uLn0iLCAie2V4cHJlc3Npb25zLi4ufSIgICAgICAgICAgICAgICAgICB8IGRpc3BsYXksIGRpY3Rpb25hcnkgZGlzcGxheSwgc2V0ICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoaWxlICJhYnMoeCV5KSA8IGFicyh5KSIgaXMgdHJ1ZSBtYXRoZW1hdGljYWxseSwgZm9yIGZsb2F0c1xuICAgIGl0IG1heSBub3QgYmUgdHJ1ZSBudW1lcmljYWxseSBkdWUgdG8gcm91bmRvZmYuICBGb3IgZXhhbXBsZSwgYW5kXG4gICAgYXNzdW1pbmcgYSBwbGF0Zm9ybSBvbiB3aGljaCBhIFB5dGhvbiBmbG9hdCBpcyBhbiBJRUVFIDc1NCBkb3VibGUtXG4gICAgcHJlY2lzaW9uIG51bWJlciwgaW4gb3JkZXIgdGhhdCAiLTFlLTEwMCAlIDFlMTAwIiBoYXZlIHRoZSBzYW1lXG4gICAgc2lnbiBhcyAiMWUxMDAiLCB0aGUgY29tcHV0ZWQgcmVzdWx0IGlzICItMWUtMTAwICsgMWUxMDAiLCB3aGljaFxuICAgIGlzIG51bWVyaWNhbGx5IGV4YWN0bHkgZXF1YWwgdG8gIjFlMTAwIi4gIFRoZSBmdW5jdGlvblxuICAgICJtYXRoLmZtb2QoKSIgcmV0dXJucyBhIHJlc3VsdCB3aG9zZSBzaWduIG1hdGNoZXMgdGhlIHNpZ24gb2YgdGhlXG4gICAgZmlyc3QgYXJndW1lbnQgaW5zdGVhZCwgYW5kIHNvIHJldHVybnMgIi0xZS0xMDAiIGluIHRoaXMgY2FzZS5cbiAgICBXaGljaCBhcHByb2FjaCBpcyBtb3JlIGFwcHJvcHJpYXRlIGRlcGVuZHMgb24gdGhlIGFwcGxpY2F0aW9uLlxuXG5bMl0gSWYgeCBpcyB2ZXJ5IGNsb3NlIHRvIGFuIGV4YWN0IGludGVnZXIgbXVsdGlwbGUgb2YgeSwgaXRcJ3NcbiAgICBwb3NzaWJsZSBmb3IgIngvL3kiIHRvIGJlIG9uZSBsYXJnZXIgdGhhbiAiKHgteCV5KS8veSIgZHVlIHRvXG4gICAgcm91bmRpbmcuICBJbiBzdWNoIGNhc2VzLCBQeXRob24gcmV0dXJucyB0aGUgbGF0dGVyIHJlc3VsdCwgaW5cbiAgICBvcmRlciB0byBwcmVzZXJ2ZSB0aGF0ICJkaXZtb2QoeCx5KVswXSAqIHkgKyB4ICUgeSIgYmUgdmVyeSBjbG9zZVxuICAgIHRvICJ4Ii5cblxuWzNdIFdoaWxlIGNvbXBhcmlzb25zIGJldHdlZW4gc3RyaW5ncyBtYWtlIHNlbnNlIGF0IHRoZSBieXRlXG4gICAgbGV2ZWwsIHRoZXkgbWF5IGJlIGNvdW50ZXItaW50dWl0aXZlIHRvIHVzZXJzLiAgRm9yIGV4YW1wbGUsIHRoZVxuICAgIHN0cmluZ3MgIiJcXHUwMEM3IiIgYW5kICIiXFx1MDMyN1xcdTAwNDMiIiBjb21wYXJlIGRpZmZlcmVudGx5LCBldmVuXG4gICAgdGhvdWdoIHRoZXkgYm90aCByZXByZXNlbnQgdGhlIHNhbWUgdW5pY29kZSBjaGFyYWN0ZXIgKExBVElOXG4gICAgQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEpLiAgVG8gY29tcGFyZSBzdHJpbmdzIGluIGEgaHVtYW5cbiAgICByZWNvZ25pemFibGUgd2F5LCBjb21wYXJlIHVzaW5nICJ1bmljb2RlZGF0YS5ub3JtYWxpemUoKSIuXG5cbls0XSBEdWUgdG8gYXV0b21hdGljIGdhcmJhZ2UtY29sbGVjdGlvbiwgZnJlZSBsaXN0cywgYW5kIHRoZVxuICAgIGR5bmFtaWMgbmF0dXJlIG9mIGRlc2NyaXB0b3JzLCB5b3UgbWF5IG5vdGljZSBzZWVtaW5nbHkgdW51c3VhbFxuICAgIGJlaGF2aW91ciBpbiBjZXJ0YWluIHVzZXMgb2YgdGhlICJpcyIgb3BlcmF0b3IsIGxpa2UgdGhvc2VcbiAgICBpbnZvbHZpbmcgY29tcGFyaXNvbnMgYmV0d2VlbiBpbnN0YW5jZSBtZXRob2RzLCBvciBjb25zdGFudHMuXG4gICAgQ2hlY2sgdGhlaXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvLlxuXG5bNV0gVGhlICIlIiBvcGVyYXRvciBpcyBhbHNvIHVzZWQgZm9yIHN0cmluZyBmb3JtYXR0aW5nOyB0aGUgc2FtZVxuICAgIHByZWNlZGVuY2UgYXBwbGllcy5cblxuWzZdIFRoZSBwb3dlciBvcGVyYXRvciAiKioiIGJpbmRzIGxlc3MgdGlnaHRseSB0aGFuIGFuIGFyaXRobWV0aWNcbiAgICBvciBiaXR3aXNlIHVuYXJ5IG9wZXJhdG9yIG9uIGl0cyByaWdodCwgdGhhdCBpcywgIjIqKi0xIiBpcyAiMC41Ii5cbicsCiAgJ3Bhc3MnOiAnXG5UaGUgInBhc3MiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKipcblxuICAgcGFzc19zdG10IDo6PSAicGFzcyJcblxuInBhc3MiIGlzIGEgbnVsbCBvcGVyYXRpb24gLS0tIHdoZW4gaXQgaXMgZXhlY3V0ZWQsIG5vdGhpbmcgaGFwcGVucy5cbkl0IGlzIHVzZWZ1bCBhcyBhIHBsYWNlaG9sZGVyIHdoZW4gYSBzdGF0ZW1lbnQgaXMgcmVxdWlyZWRcbnN5bnRhY3RpY2FsbHksIGJ1dCBubyBjb2RlIG5lZWRzIHRvIGJlIGV4ZWN1dGVkLCBmb3IgZXhhbXBsZTpcblxuICAgZGVmIGYoYXJnKTogcGFzcyAgICAjIGEgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcgKHlldClcblxuICAgY2xhc3MgQzogcGFzcyAgICAgICAjIGEgY2xhc3Mgd2l0aCBubyBtZXRob2RzICh5ZXQpXG4nLAogICdwb3dlcic6ICdcblRoZSBwb3dlciBvcGVyYXRvclxuKioqKioqKioqKioqKioqKioqXG5cblRoZSBwb3dlciBvcGVyYXRvciBiaW5kcyBtb3JlIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzXG5sZWZ0OyBpdCBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzIHJpZ2h0LiAgVGhlXG5zeW50YXggaXM6XG5cbiAgIHBvd2VyIDo6PSBwcmltYXJ5IFsiKioiIHVfZXhwcl1cblxuVGh1cywgaW4gYW4gdW5wYXJlbnRoZXNpemVkIHNlcXVlbmNlIG9mIHBvd2VyIGFuZCB1bmFyeSBvcGVyYXRvcnMsIHRoZVxub3BlcmF0b3JzIGFyZSBldmFsdWF0ZWQgZnJvbSByaWdodCB0byBsZWZ0ICh0aGlzIGRvZXMgbm90IGNvbnN0cmFpblxudGhlIGV2YWx1YXRpb24gb3JkZXIgZm9yIHRoZSBvcGVyYW5kcyk6ICItMSoqMiIgcmVzdWx0cyBpbiAiLTEiLlxuXG5UaGUgcG93ZXIgb3BlcmF0b3IgaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcyB0aGUgYnVpbHQtaW4gInBvdygpIlxuZnVuY3Rpb24sIHdoZW4gY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czogaXQgeWllbGRzIGl0cyBsZWZ0IGFyZ3VtZW50XG5yYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGl0cyByaWdodCBhcmd1bWVudC4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmVcbmZpcnN0IGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCBhbmQgdGhlIHJlc3VsdCBpcyBvZiB0aGF0IHR5cGUuXG5cbkZvciBpbnQgb3BlcmFuZHMsIHRoZSByZXN1bHQgaGFzIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG9wZXJhbmRzIHVubGVzc1xudGhlIHNlY29uZCBhcmd1bWVudCBpcyBuZWdhdGl2ZTsgaW4gdGhhdCBjYXNlLCBhbGwgYXJndW1lbnRzIGFyZVxuY29udmVydGVkIHRvIGZsb2F0IGFuZCBhIGZsb2F0IHJlc3VsdCBpcyBkZWxpdmVyZWQuIEZvciBleGFtcGxlLFxuIjEwKioyIiByZXR1cm5zICIxMDAiLCBidXQgIjEwKiotMiIgcmV0dXJucyAiMC4wMSIuXG5cblJhaXNpbmcgIjAuMCIgdG8gYSBuZWdhdGl2ZSBwb3dlciByZXN1bHRzIGluIGEgIlplcm9EaXZpc2lvbkVycm9yIi5cblJhaXNpbmcgYSBuZWdhdGl2ZSBudW1iZXIgdG8gYSBmcmFjdGlvbmFsIHBvd2VyIHJlc3VsdHMgaW4gYSAiY29tcGxleCJcbm51bWJlci4gKEluIGVhcmxpZXIgdmVyc2lvbnMgaXQgcmFpc2VkIGEgIlZhbHVlRXJyb3IiLilcbicsCiAgJ3JhaXNlJzogJ1xuVGhlICJyYWlzZSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuICAgcmFpc2Vfc3RtdCA6Oj0gInJhaXNlIiBbZXhwcmVzc2lvbiBbImZyb20iIGV4cHJlc3Npb25dXVxuXG5JZiBubyBleHByZXNzaW9ucyBhcmUgcHJlc2VudCwgInJhaXNlIiByZS1yYWlzZXMgdGhlIGxhc3QgZXhjZXB0aW9uXG50aGF0IHdhcyBhY3RpdmUgaW4gdGhlIGN1cnJlbnQgc2NvcGUuICBJZiBubyBleGNlcHRpb24gaXMgYWN0aXZlIGluXG50aGUgY3VycmVudCBzY29wZSwgYSAiUnVudGltZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkIGluZGljYXRpbmdcbnRoYXQgdGhpcyBpcyBhbiBlcnJvci5cblxuT3RoZXJ3aXNlLCAicmFpc2UiIGV2YWx1YXRlcyB0aGUgZmlyc3QgZXhwcmVzc2lvbiBhcyB0aGUgZXhjZXB0aW9uXG5vYmplY3QuICBJdCBtdXN0IGJlIGVpdGhlciBhIHN1YmNsYXNzIG9yIGFuIGluc3RhbmNlIG9mXG4iQmFzZUV4Y2VwdGlvbiIuIElmIGl0IGlzIGEgY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2Ugd2lsbCBiZVxub2J0YWluZWQgd2hlbiBuZWVkZWQgYnkgaW5zdGFudGlhdGluZyB0aGUgY2xhc3Mgd2l0aCBubyBhcmd1bWVudHMuXG5cblRoZSAqdHlwZSogb2YgdGhlIGV4Y2VwdGlvbiBpcyB0aGUgZXhjZXB0aW9uIGluc3RhbmNlXCdzIGNsYXNzLCB0aGVcbip2YWx1ZSogaXMgdGhlIGluc3RhbmNlIGl0c2VsZi5cblxuQSB0cmFjZWJhY2sgb2JqZWN0IGlzIG5vcm1hbGx5IGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFuIGV4Y2VwdGlvblxuaXMgcmFpc2VkIGFuZCBhdHRhY2hlZCB0byBpdCBhcyB0aGUgIl9fdHJhY2ViYWNrX18iIGF0dHJpYnV0ZSwgd2hpY2hcbmlzIHdyaXRhYmxlLiBZb3UgY2FuIGNyZWF0ZSBhbiBleGNlcHRpb24gYW5kIHNldCB5b3VyIG93biB0cmFjZWJhY2sgaW5cbm9uZSBzdGVwIHVzaW5nIHRoZSAid2l0aF90cmFjZWJhY2soKSIgZXhjZXB0aW9uIG1ldGhvZCAod2hpY2ggcmV0dXJuc1xudGhlIHNhbWUgZXhjZXB0aW9uIGluc3RhbmNlLCB3aXRoIGl0cyB0cmFjZWJhY2sgc2V0IHRvIGl0cyBhcmd1bWVudCksXG5saWtlIHNvOlxuXG4gICByYWlzZSBFeGNlcHRpb24oImZvbyBvY2N1cnJlZCIpLndpdGhfdHJhY2ViYWNrKHRyYWNlYmFja29iailcblxuVGhlICJmcm9tIiBjbGF1c2UgaXMgdXNlZCBmb3IgZXhjZXB0aW9uIGNoYWluaW5nOiBpZiBnaXZlbiwgdGhlIHNlY29uZFxuKmV4cHJlc3Npb24qIG11c3QgYmUgYW5vdGhlciBleGNlcHRpb24gY2xhc3Mgb3IgaW5zdGFuY2UsIHdoaWNoIHdpbGxcbnRoZW4gYmUgYXR0YWNoZWQgdG8gdGhlIHJhaXNlZCBleGNlcHRpb24gYXMgdGhlICJfX2NhdXNlX18iIGF0dHJpYnV0ZVxuKHdoaWNoIGlzIHdyaXRhYmxlKS4gIElmIHRoZSByYWlzZWQgZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkLCBib3RoXG5leGNlcHRpb25zIHdpbGwgYmUgcHJpbnRlZDpcblxuICAgPj4+IHRyeTpcbiAgIC4uLiAgICAgcHJpbnQoMSAvIDApXG4gICAuLi4gZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6XG4gICAuLi4gICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU29tZXRoaW5nIGJhZCBoYXBwZW5lZCIpIGZyb20gZXhjXG4gICAuLi5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gPG1vZHVsZT5cbiAgIFplcm9EaXZpc2lvbkVycm9yOiBpbnQgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm9cblxuICAgVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcblxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSA0LCBpbiA8bW9kdWxlPlxuICAgUnVudGltZUVycm9yOiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkXG5cbkEgc2ltaWxhciBtZWNoYW5pc20gd29ya3MgaW1wbGljaXRseSBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluc2lkZVxuYW4gZXhjZXB0aW9uIGhhbmRsZXI6IHRoZSBwcmV2aW91cyBleGNlcHRpb24gaXMgdGhlbiBhdHRhY2hlZCBhcyB0aGVcbm5ldyBleGNlcHRpb25cJ3MgIl9fY29udGV4dF9fIiBhdHRyaWJ1dGU6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdDpcbiAgIC4uLiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb21ldGhpbmcgYmFkIGhhcHBlbmVkIilcbiAgIC4uLlxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAyLCBpbiA8bW9kdWxlPlxuICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludCBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVyb1xuXG4gICBEdXJpbmcgaGFuZGxpbmcgb2YgdGhlIGFib3ZlIGV4Y2VwdGlvbiwgYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQ6XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IGhhbmRsaW5nIGV4Y2VwdGlvbnMgaXMgaW4gc2VjdGlvblxuKlRoZSB0cnkgc3RhdGVtZW50Ki5cbicsCiAgJ3JldHVybic6ICdcblRoZSAicmV0dXJuIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuICAgcmV0dXJuX3N0bXQgOjo9ICJyZXR1cm4iIFtleHByZXNzaW9uX2xpc3RdXG5cbiJyZXR1cm4iIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbixcbm5vdCB3aXRoaW4gYSBuZXN0ZWQgY2xhc3MgZGVmaW5pdGlvbi5cblxuSWYgYW4gZXhwcmVzc2lvbiBsaXN0IGlzIHByZXNlbnQsIGl0IGlzIGV2YWx1YXRlZCwgZWxzZSAiTm9uZSIgaXNcbnN1YnN0aXR1dGVkLlxuXG4icmV0dXJuIiBsZWF2ZXMgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbCB3aXRoIHRoZSBleHByZXNzaW9uIGxpc3QgKG9yXG4iTm9uZSIpIGFzIHJldHVybiB2YWx1ZS5cblxuV2hlbiAicmV0dXJuIiBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBhICJmaW5hbGx5IlxuY2xhdXNlLCB0aGF0ICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseSBsZWF2aW5nIHRoZVxuZnVuY3Rpb24uXG5cbkluIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLCB0aGUgInJldHVybiIgc3RhdGVtZW50IGluZGljYXRlcyB0aGF0IHRoZVxuZ2VuZXJhdG9yIGlzIGRvbmUgYW5kIHdpbGwgY2F1c2UgIlN0b3BJdGVyYXRpb24iIHRvIGJlIHJhaXNlZC4gVGhlXG5yZXR1cm5lZCB2YWx1ZSAoaWYgYW55KSBpcyB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIGNvbnN0cnVjdFxuIlN0b3BJdGVyYXRpb24iIGFuZCBiZWNvbWVzIHRoZSAiU3RvcEl0ZXJhdGlvbi52YWx1ZSIgYXR0cmlidXRlLlxuJywKLSAnc2VxdWVuY2UtdHlwZXMnOiAnXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoICIwIDw9IGsgPCBOIiB3aGVyZVxuKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaCBkZWZpbmUgYVxucmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZSB0aGVcbm1ldGhvZHMgImtleXMoKSIsICJ2YWx1ZXMoKSIsICJpdGVtcygpIiwgImdldCgpIiwgImNsZWFyKCkiLFxuInNldGRlZmF1bHQoKSIsICJwb3AoKSIsICJwb3BpdGVtKCkiLCAiY29weSgpIiwgYW5kICJ1cGRhdGUoKSJcbmJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwncyBzdGFuZGFyZCBkaWN0aW9uYXJ5IG9iamVjdHMuXG5UaGUgImNvbGxlY3Rpb25zIiBtb2R1bGUgcHJvdmlkZXMgYSAiTXV0YWJsZU1hcHBpbmciIGFic3RyYWN0IGJhc2VcbmNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHMgZnJvbSBhIGJhc2Ugc2V0IG9mICJfX2dldGl0ZW1fXygpIixcbiJfX3NldGl0ZW1fXygpIiwgIl9fZGVsaXRlbV9fKCkiLCBhbmQgImtleXMoKSIuIE11dGFibGUgc2VxdWVuY2VzXG5zaG91bGQgcHJvdmlkZSBtZXRob2RzICJhcHBlbmQoKSIsICJjb3VudCgpIiwgImluZGV4KCkiLCAiZXh0ZW5kKCkiLFxuImluc2VydCgpIiwgInBvcCgpIiwgInJlbW92ZSgpIiwgInJldmVyc2UoKSIgYW5kICJzb3J0KCkiLCBsaWtlIFB5dGhvblxuc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkIGltcGxlbWVudFxuYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyAiX19hZGRfXygpIiwgIl9fcmFkZF9fKCkiLFxuIl9faWFkZF9fKCkiLCAiX19tdWxfXygpIiwgIl9fcm11bF9fKCkiIGFuZCAiX19pbXVsX18oKSIgZGVzY3JpYmVkXG5iZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXQgaXNcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbiJfX2NvbnRhaW5zX18oKSIgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlICJpbiIgb3BlcmF0b3I7XG5mb3IgbWFwcGluZ3MsICJpbiIgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZ1wncyBrZXlzOyBmb3Igc2VxdWVuY2VzLCBpdFxuc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyIHJlY29tbWVuZGVkIHRoYXQgYm90aFxubWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlICJfX2l0ZXJfXygpIiBtZXRob2QgdG8gYWxsb3dcbmVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsICJfX2l0ZXJfXygpIlxuc2hvdWxkIGJlIHRoZSBzYW1lIGFzICJrZXlzKCkiOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZVxudGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyICI+PSIgMC4gIEFsc28sIGFuIG9iamVjdCB0aGF0XG4gICBkb2VzblwndCBkZWZpbmUgYSAiX19ib29sX18oKSIgbWV0aG9kIGFuZCB3aG9zZSAiX19sZW5fXygpIiBtZXRob2RcbiAgIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuXG4gIEEgY2FsbCBsaWtlXG5cbiAgICAgYVsxOjJdID0gYlxuXG4gIGlzIHRyYW5zbGF0ZWQgdG9cblxuICAgICBhW3NsaWNlKDEsIDIsIE5vbmUpXSA9IGJcblxuICBhbmQgc28gZm9ydGguICBNaXNzaW5nIHNsaWNlIGl0ZW1zIGFyZSBhbHdheXMgZmlsbGVkIGluIHdpdGggIk5vbmUiLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgInNlbGZba2V5XSIuIEZvciBzZXF1ZW5jZSB0eXBlcyxcbiAgIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy4gIE5vdGUgdGhhdFxuICAgdGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgaW5kZXhlcyAoaWYgdGhlIGNsYXNzIHdpc2hlc1xuICAgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIHR5cGUpIGlzIHVwIHRvIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLiBJZlxuICAgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLCAiVHlwZUVycm9yIiBtYXkgYmUgcmFpc2VkOyBpZiBvZlxuICAgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2YgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnlcbiAgIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgdmFsdWVzKSwgIkluZGV4RXJyb3IiIHNob3VsZCBiZVxuICAgcmFpc2VkLiBGb3IgbWFwcGluZyB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZVxuICAgY29udGFpbmVyKSwgIktleUVycm9yIiBzaG91bGQgYmUgcmFpc2VkLlxuXG4gICBOb3RlOiAiZm9yIiBsb29wcyBleHBlY3QgdGhhdCBhbiAiSW5kZXhFcnJvciIgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgImtleXMoKSIuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlICJyZXZlcnNlZCgpIiBidWlsdC1pbiB0byBpbXBsZW1lbnRcbiAgIHJldmVyc2UgaXRlcmF0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdFxuICAgaXRlcmF0ZXMgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lciBpbiByZXZlcnNlIG9yZGVyLlxuXG4gICBJZiB0aGUgIl9fcmV2ZXJzZWRfXygpIiBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGUgInJldmVyc2VkKCkiXG4gICBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgKCJfX2xlbl9fKCkiXG4gICBhbmQgIl9fZ2V0aXRlbV9fKCkiKS4gIE9iamVjdHMgdGhhdCBzdXBwb3J0IHRoZSBzZXF1ZW5jZSBwcm90b2NvbFxuICAgc2hvdWxkIG9ubHkgcHJvdmlkZSAiX19yZXZlcnNlZF9fKCkiIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW5cbiAgIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5XG4gICAicmV2ZXJzZWQoKSIuXG5cblRoZSBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzICgiaW4iIGFuZCAibm90IGluIikgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lICJfX2NvbnRhaW5zX18oKSIsIHRoZSBtZW1iZXJzaGlwIHRlc3RcbiAgIGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgIl9faXRlcl9fKCkiLCB0aGVuIHRoZSBvbGQgc2VxdWVuY2VcbiAgIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgIl9fZ2V0aXRlbV9fKCkiLCBzZWUgKnRoaXMgc2VjdGlvbiBpbiB0aGVcbiAgIGxhbmd1YWdlIHJlZmVyZW5jZSouXG4nLAorICdzZXF1ZW5jZS10eXBlcyc6ICdcbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggIjAgPD0gayA8IE4iIHdoZXJlXG4qTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoIGRlZmluZSBhXG5yYW5nZSBvZiBpdGVtcy4gIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlIHRoZVxubWV0aG9kcyAia2V5cygpIiwgInZhbHVlcygpIiwgIml0ZW1zKCkiLCAiZ2V0KCkiLCAiY2xlYXIoKSIsXG4ic2V0ZGVmYXVsdCgpIiwgInBvcCgpIiwgInBvcGl0ZW0oKSIsICJjb3B5KCkiLCBhbmQgInVwZGF0ZSgpIlxuYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uXCdzIHN0YW5kYXJkIGRpY3Rpb25hcnkgb2JqZWN0cy5cblRoZSAiY29sbGVjdGlvbnMiIG1vZHVsZSBwcm92aWRlcyBhICJNdXRhYmxlTWFwcGluZyIgYWJzdHJhY3QgYmFzZVxuY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kcyBmcm9tIGEgYmFzZSBzZXQgb2YgIl9fZ2V0aXRlbV9fKCkiLFxuIl9fc2V0aXRlbV9fKCkiLCAiX19kZWxpdGVtX18oKSIsIGFuZCAia2V5cygpIi4gTXV0YWJsZSBzZXF1ZW5jZXNcbnNob3VsZCBwcm92aWRlIG1ldGhvZHMgImFwcGVuZCgpIiwgImNvdW50KCkiLCAiaW5kZXgoKSIsICJleHRlbmQoKSIsXG4iaW5zZXJ0KCkiLCAicG9wKCkiLCAicmVtb3ZlKCkiLCAicmV2ZXJzZSgpIiBhbmQgInNvcnQoKSIsIGxpa2UgUHl0aG9uXG5zdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGQgaW1wbGVtZW50XG5hZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzICJfX2FkZF9fKCkiLCAiX19yYWRkX18oKSIsXG4iX19pYWRkX18oKSIsICJfX211bF9fKCkiLCAiX19ybXVsX18oKSIgYW5kICJfX2ltdWxfXygpIiBkZXNjcmliZWRcbmJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdCBpc1xucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuIl9fY29udGFpbnNfXygpIiBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgImluIiBvcGVyYXRvcjtcbmZvciBtYXBwaW5ncywgImluIiBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nXCdzIGtleXM7IGZvciBzZXF1ZW5jZXMsIGl0XG5zaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXIgcmVjb21tZW5kZWQgdGhhdCBib3RoXG5tYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGUgIl9faXRlcl9fKCkiIG1ldGhvZCB0byBhbGxvd1xuZWZmaWNpZW50IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZSBjb250YWluZXI7IGZvciBtYXBwaW5ncywgIl9faXRlcl9fKCkiXG5zaG91bGQgYmUgdGhlIHNhbWUgYXMgImtleXMoKSI7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlXG50aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJsZW4oKSIuICBTaG91bGQgcmV0dXJuXG4gICB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QsIGFuIGludGVnZXIgIj49IiAwLiAgQWxzbywgYW4gb2JqZWN0IHRoYXRcbiAgIGRvZXNuXCd0IGRlZmluZSBhICJfX2Jvb2xfXygpIiBtZXRob2QgYW5kIHdob3NlICJfX2xlbl9fKCkiIG1ldGhvZFxuICAgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuXG5cbm9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAib3BlcmF0b3IubGVuZ3RoX2hpbnQoKSIuIFNob3VsZCByZXR1cm4gYW5cbiAgIGVzdGltYXRlZCBsZW5ndGggZm9yIHRoZSBvYmplY3QgKHdoaWNoIG1heSBiZSBncmVhdGVyIG9yIGxlc3MgdGhhblxuICAgdGhlIGFjdHVhbCBsZW5ndGgpLiBUaGUgbGVuZ3RoIG11c3QgYmUgYW4gaW50ZWdlciAiPj0iIDAuIFRoaXNcbiAgIG1ldGhvZCBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIGFuZCBpcyBuZXZlciByZXF1aXJlZCBmb3JcbiAgIGNvcnJlY3RuZXNzLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjQuXG5cbk5vdGU6IFNsaWNpbmcgaXMgZG9uZSBleGNsdXNpdmVseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcy5cbiAgQSBjYWxsIGxpa2VcblxuICAgICBhWzE6Ml0gPSBiXG5cbiAgaXMgdHJhbnNsYXRlZCB0b1xuXG4gICAgIGFbc2xpY2UoMSwgMiwgTm9uZSldID0gYlxuXG4gIGFuZCBzbyBmb3J0aC4gIE1pc3Npbmcgc2xpY2UgaXRlbXMgYXJlIGFsd2F5cyBmaWxsZWQgaW4gd2l0aCAiTm9uZSIuXG5cbm9iamVjdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiAic2VsZltrZXldIi4gRm9yIHNlcXVlbmNlIHR5cGVzLFxuICAgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLiAgTm90ZSB0aGF0XG4gICB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGUgY2xhc3Mgd2lzaGVzXG4gICB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuIElmXG4gICAqa2V5KiBpcyBvZiBhbiBpbmFwcHJvcHJpYXRlIHR5cGUsICJUeXBlRXJyb3IiIG1heSBiZSByYWlzZWQ7IGlmIG9mXG4gICBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZiBpbmRleGVzIGZvciB0aGUgc2VxdWVuY2UgKGFmdGVyIGFueVxuICAgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSB2YWx1ZXMpLCAiSW5kZXhFcnJvciIgc2hvdWxkIGJlXG4gICByYWlzZWQuIEZvciBtYXBwaW5nIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlXG4gICBjb250YWluZXIpLCAiS2V5RXJyb3IiIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6ICJmb3IiIGxvb3BzIGV4cGVjdCB0aGF0IGFuICJJbmRleEVycm9yIiB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZXMgZm9yIGtleXMsIG9yIGlmIG5ldyBrZXlzXG4gICBjYW4gYmUgYWRkZWQsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHMgY2FuIGJlIHJlcGxhY2VkLiAgVGhlXG4gICBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvclxuICAgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCByZW1vdmFsIG9mIGtleXMsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHNcbiAgIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNlcXVlbmNlLiAgVGhlIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmVcbiAgIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvciB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9faXRlcl9fKHNlbGYpXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGVcbiAgIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZFxuICAgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIsIGFuZCBzaG91bGQgYWxzbyBiZSBtYWRlXG4gICBhdmFpbGFibGUgYXMgdGhlIG1ldGhvZCAia2V5cygpIi5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgInJldmVyc2VkKCkiIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSAiX19yZXZlcnNlZF9fKCkiIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZSAicmV2ZXJzZWQoKSJcbiAgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZSBwcm90b2NvbCAoIl9fbGVuX18oKSJcbiAgIGFuZCAiX19nZXRpdGVtX18oKSIpLiAgT2JqZWN0cyB0aGF0IHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sXG4gICBzaG91bGQgb25seSBwcm92aWRlICJfX3JldmVyc2VkX18oKSIgaWYgdGhleSBjYW4gcHJvdmlkZSBhblxuICAgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnlcbiAgICJyZXZlcnNlZCgpIi5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKCJpbiIgYW5kICJub3QgaW4iKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiwgdGhlIG1lbWJlcnNoaXAgdGVzdFxuICAgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSAiX19pdGVyX18oKSIsIHRoZW4gdGhlIG9sZCBzZXF1ZW5jZVxuICAgaXRlcmF0aW9uIHByb3RvY29sIHZpYSAiX19nZXRpdGVtX18oKSIsIHNlZSAqdGhpcyBzZWN0aW9uIGluIHRoZVxuICAgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cbicsCiAgJ3NoaWZ0aW5nJzogJ1xuU2hpZnRpbmcgb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgc2hpZnRpbmcgb3BlcmF0aW9ucyBoYXZlIGxvd2VyIHByaW9yaXR5IHRoYW4gdGhlIGFyaXRobWV0aWNcbm9wZXJhdGlvbnM6XG5cbiAgIHNoaWZ0X2V4cHIgOjo9IGFfZXhwciB8IHNoaWZ0X2V4cHIgKCAiPDwiIHwgIj4+IiApIGFfZXhwclxuXG5UaGVzZSBvcGVyYXRvcnMgYWNjZXB0IGludGVnZXJzIGFzIGFyZ3VtZW50cy4gIFRoZXkgc2hpZnQgdGhlIGZpcnN0XG5hcmd1bWVudCB0byB0aGUgbGVmdCBvciByaWdodCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgZ2l2ZW4gYnkgdGhlXG5zZWNvbmQgYXJndW1lbnQuXG5cbkEgcmlnaHQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBmbG9vciBkaXZpc2lvbiBieSAicG93KDIsbikiLlxuQSBsZWZ0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgbXVsdGlwbGljYXRpb24gd2l0aCAicG93KDIsbikiLlxuXG5Ob3RlOiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpc1xuICByZXF1aXJlZCB0byBiZSBhdCBtb3N0ICJzeXMubWF4c2l6ZSIuICBJZiB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzXG4gIGxhcmdlciB0aGFuICJzeXMubWF4c2l6ZSIgYW4gIk92ZXJmbG93RXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4nLAogICdzbGljaW5ncyc6ICdcblNsaWNpbmdzXG4qKioqKioqKlxuXG5BIHNsaWNpbmcgc2VsZWN0cyBhIHJhbmdlIG9mIGl0ZW1zIGluIGEgc2VxdWVuY2Ugb2JqZWN0IChlLmcuLCBhXG5zdHJpbmcsIHR1cGxlIG9yIGxpc3QpLiAgU2xpY2luZ3MgbWF5IGJlIHVzZWQgYXMgZXhwcmVzc2lvbnMgb3IgYXNcbnRhcmdldHMgaW4gYXNzaWdubWVudCBvciAiZGVsIiBzdGF0ZW1lbnRzLiAgVGhlIHN5bnRheCBmb3IgYSBzbGljaW5nOlxuXG4gICBzbGljaW5nICAgICAgOjo9IHByaW1hcnkgIlsiIHNsaWNlX2xpc3QgIl0iXG4gICBzbGljZV9saXN0ICAgOjo9IHNsaWNlX2l0ZW0gKCIsIiBzbGljZV9pdGVtKSogWyIsIl1cbiAgIHNsaWNlX2l0ZW0gICA6Oj0gZXhwcmVzc2lvbiB8IHByb3Blcl9zbGljZVxuICAgcHJvcGVyX3NsaWNlIDo6PSBbbG93ZXJfYm91bmRdICI6IiBbdXBwZXJfYm91bmRdIFsgIjoiIFtzdHJpZGVdIF1cbiAgIGxvd2VyX2JvdW5kICA6Oj0gZXhwcmVzc2lvblxuICAgdXBwZXJfYm91bmQgIDo6PSBleHByZXNzaW9uXG4gICBzdHJpZGUgICAgICAgOjo9IGV4cHJlc3Npb25cblxuVGhlcmUgaXMgYW1iaWd1aXR5IGluIHRoZSBmb3JtYWwgc3ludGF4IGhlcmU6IGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZVxuYW4gZXhwcmVzc2lvbiBsaXN0IGFsc28gbG9va3MgbGlrZSBhIHNsaWNlIGxpc3QsIHNvIGFueSBzdWJzY3JpcHRpb25cbmNhbiBiZSBpbnRlcnByZXRlZCBhcyBhIHNsaWNpbmcuICBSYXRoZXIgdGhhbiBmdXJ0aGVyIGNvbXBsaWNhdGluZyB0aGVcbnN5bnRheCwgdGhpcyBpcyBkaXNhbWJpZ3VhdGVkIGJ5IGRlZmluaW5nIHRoYXQgaW4gdGhpcyBjYXNlIHRoZVxuaW50ZXJwcmV0YXRpb24gYXMgYSBzdWJzY3JpcHRpb24gdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGVcbmludGVycHJldGF0aW9uIGFzIGEgc2xpY2luZyAodGhpcyBpcyB0aGUgY2FzZSBpZiB0aGUgc2xpY2UgbGlzdFxuY29udGFpbnMgbm8gcHJvcGVyIHNsaWNlKS5cblxuVGhlIHNlbWFudGljcyBmb3IgYSBzbGljaW5nIGFyZSBhcyBmb2xsb3dzLiAgVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZVxudG8gYSBtYXBwaW5nIG9iamVjdCwgYW5kIGl0IGlzIGluZGV4ZWQgKHVzaW5nIHRoZSBzYW1lICJfX2dldGl0ZW1fXygpIlxubWV0aG9kIGFzIG5vcm1hbCBzdWJzY3JpcHRpb24pIHdpdGggYSBrZXkgdGhhdCBpcyBjb25zdHJ1Y3RlZCBmcm9tIHRoZVxuc2xpY2UgbGlzdCwgYXMgZm9sbG93cy4gIElmIHRoZSBzbGljZSBsaXN0IGNvbnRhaW5zIGF0IGxlYXN0IG9uZVxuY29tbWEsIHRoZSBrZXkgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBjb252ZXJzaW9uIG9mIHRoZSBzbGljZVxuaXRlbXM7IG90aGVyd2lzZSwgdGhlIGNvbnZlcnNpb24gb2YgdGhlIGxvbmUgc2xpY2UgaXRlbSBpcyB0aGUga2V5LlxuVGhlIGNvbnZlcnNpb24gb2YgYSBzbGljZSBpdGVtIHRoYXQgaXMgYW4gZXhwcmVzc2lvbiBpcyB0aGF0XG5leHByZXNzaW9uLiAgVGhlIGNvbnZlcnNpb24gb2YgYSBwcm9wZXIgc2xpY2UgaXMgYSBzbGljZSBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kikgd2hvc2UgInN0YXJ0IiwgInN0b3AiIGFuZFxuInN0ZXAiIGF0dHJpYnV0ZXMgYXJlIHRoZSB2YWx1ZXMgb2YgdGhlIGV4cHJlc3Npb25zIGdpdmVuIGFzIGxvd2VyXG5ib3VuZCwgdXBwZXIgYm91bmQgYW5kIHN0cmlkZSwgcmVzcGVjdGl2ZWx5LCBzdWJzdGl0dXRpbmcgIk5vbmUiIGZvclxubWlzc2luZyBleHByZXNzaW9ucy5cbicsCiAgJ3NwZWNpYWxhdHRycyc6ICdcblNwZWNpYWwgQXR0cmlidXRlc1xuKioqKioqKioqKioqKioqKioqXG5cblRoZSBpbXBsZW1lbnRhdGlvbiBhZGRzIGEgZmV3IHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXMgdG8gc2V2ZXJhbFxub2JqZWN0IHR5cGVzLCB3aGVyZSB0aGV5IGFyZSByZWxldmFudC4gIFNvbWUgb2YgdGhlc2UgYXJlIG5vdCByZXBvcnRlZFxuYnkgdGhlICJkaXIoKSIgYnVpbHQtaW4gZnVuY3Rpb24uXG5cbm9iamVjdC5fX2RpY3RfX1xuXG4gICBBIGRpY3Rpb25hcnkgb3Igb3RoZXIgbWFwcGluZyBvYmplY3QgdXNlZCB0byBzdG9yZSBhbiBvYmplY3RcJ3NcbiAgICh3cml0YWJsZSkgYXR0cmlidXRlcy5cblxuaW5zdGFuY2UuX19jbGFzc19fXG5cbiAgIFRoZSBjbGFzcyB0byB3aGljaCBhIGNsYXNzIGluc3RhbmNlIGJlbG9uZ3MuXG5cbmNsYXNzLl9fYmFzZXNfX1xuXG4gICBUaGUgdHVwbGUgb2YgYmFzZSBjbGFzc2VzIG9mIGEgY2xhc3Mgb2JqZWN0LlxuXG5jbGFzcy5fX25hbWVfX1xuXG4gICBUaGUgbmFtZSBvZiB0aGUgY2xhc3Mgb3IgdHlwZS5cblxuY2xhc3MuX19xdWFsbmFtZV9fXG5cbiAgIFRoZSAqcXVhbGlmaWVkIG5hbWUqIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjMuXG5cbmNsYXNzLl9fbXJvX19cblxuICAgVGhpcyBhdHRyaWJ1dGUgaXMgYSB0dXBsZSBvZiBjbGFzc2VzIHRoYXQgYXJlIGNvbnNpZGVyZWQgd2hlblxuICAgbG9va2luZyBmb3IgYmFzZSBjbGFzc2VzIGR1cmluZyBtZXRob2QgcmVzb2x1dGlvbi5cblxuY2xhc3MubXJvKClcblxuICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBtZXRhY2xhc3MgdG8gY3VzdG9taXplIHRoZVxuICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgZm9yIGl0cyBpbnN0YW5jZXMuICBJdCBpcyBjYWxsZWQgYXQgY2xhc3NcbiAgIGluc3RhbnRpYXRpb24sIGFuZCBpdHMgcmVzdWx0IGlzIHN0b3JlZCBpbiAiX19tcm9fXyIuXG5cbmNsYXNzLl9fc3ViY2xhc3Nlc19fKClcblxuICAgRWFjaCBjbGFzcyBrZWVwcyBhIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIHRvIGl0cyBpbW1lZGlhdGVcbiAgIHN1YmNsYXNzZXMuICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhvc2UgcmVmZXJlbmNlc1xuICAgc3RpbGwgYWxpdmUuIEV4YW1wbGU6XG5cbiAgICAgID4+PiBpbnQuX19zdWJjbGFzc2VzX18oKVxuICAgICAgWzxjbGFzcyBcJ2Jvb2xcJz5dXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGVzZSBzcGVjaWFsIG1ldGhvZHMgbWF5IGJlIGZvdW5kXG4gICAgaW4gdGhlIFB5dGhvbiBSZWZlcmVuY2UgTWFudWFsICgqQmFzaWMgY3VzdG9taXphdGlvbiopLlxuXG5bMl0gQXMgYSBjb25zZXF1ZW5jZSwgdGhlIGxpc3QgIlsxLCAyXSIgaXMgY29uc2lkZXJlZCBlcXVhbCB0b1xuICAgICJbMS4wLCAyLjBdIiwgYW5kIHNpbWlsYXJseSBmb3IgdHVwbGVzLlxuXG5bM10gVGhleSBtdXN0IGhhdmUgc2luY2UgdGhlIHBhcnNlciBjYW5cJ3QgdGVsbCB0aGUgdHlwZSBvZiB0aGVcbiAgICBvcGVyYW5kcy5cblxuWzRdIENhc2VkIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eVxuICAgIGJlaW5nIG9uZSBvZiAiTHUiIChMZXR0ZXIsIHVwcGVyY2FzZSksICJMbCIgKExldHRlciwgbG93ZXJjYXNlKSxcbiAgICBvciAiTHQiIChMZXR0ZXIsIHRpdGxlY2FzZSkuXG5cbls1XSBUbyBmb3JtYXQgb25seSBhIHR1cGxlIHlvdSBzaG91bGQgdGhlcmVmb3JlIHByb3ZpZGUgYVxuICAgIHNpbmdsZXRvbiB0dXBsZSB3aG9zZSBvbmx5IGVsZW1lbnQgaXMgdGhlIHR1cGxlIHRvIGJlIGZvcm1hdHRlZC5cbicsCi0gJ3NwZWNpYWxuYW1lcyc6ICdcblNwZWNpYWwgbWV0aG9kIG5hbWVzXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGNhbiBpbXBsZW1lbnQgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgYXJlIGludm9rZWQgYnkgc3BlY2lhbFxuc3ludGF4IChzdWNoIGFzIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBvciBzdWJzY3JpcHRpbmcgYW5kIHNsaWNpbmcpIGJ5XG5kZWZpbmluZyBtZXRob2RzIHdpdGggc3BlY2lhbCBuYW1lcy4gVGhpcyBpcyBQeXRob25cJ3MgYXBwcm9hY2ggdG9cbipvcGVyYXRvciBvdmVybG9hZGluZyosIGFsbG93aW5nIGNsYXNzZXMgdG8gZGVmaW5lIHRoZWlyIG93biBiZWhhdmlvclxud2l0aCByZXNwZWN0IHRvIGxhbmd1YWdlIG9wZXJhdG9ycy4gIEZvciBpbnN0YW5jZSwgaWYgYSBjbGFzcyBkZWZpbmVzXG5hIG1ldGhvZCBuYW1lZCAiX19nZXRpdGVtX18oKSIsIGFuZCAieCIgaXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyxcbnRoZW4gInhbaV0iIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byAidHlwZSh4KS5fX2dldGl0ZW1fXyh4LCBpKSIuXG5FeGNlcHQgd2hlcmUgbWVudGlvbmVkLCBhdHRlbXB0cyB0byBleGVjdXRlIGFuIG9wZXJhdGlvbiByYWlzZSBhblxuZXhjZXB0aW9uIHdoZW4gbm8gYXBwcm9wcmlhdGUgbWV0aG9kIGlzIGRlZmluZWQgKHR5cGljYWxseVxuIkF0dHJpYnV0ZUVycm9yIiBvciAiVHlwZUVycm9yIikuXG5cbldoZW4gaW1wbGVtZW50aW5nIGEgY2xhc3MgdGhhdCBlbXVsYXRlcyBhbnkgYnVpbHQtaW4gdHlwZSwgaXQgaXNcbmltcG9ydGFudCB0aGF0IHRoZSBlbXVsYXRpb24gb25seSBiZSBpbXBsZW1lbnRlZCB0byB0aGUgZGVncmVlIHRoYXQgaXRcbm1ha2VzIHNlbnNlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1vZGVsbGVkLiAgRm9yIGV4YW1wbGUsIHNvbWVcbnNlcXVlbmNlcyBtYXkgd29yayB3ZWxsIHdpdGggcmV0cmlldmFsIG9mIGluZGl2aWR1YWwgZWxlbWVudHMsIGJ1dFxuZXh0cmFjdGluZyBhIHNsaWNlIG1heSBub3QgbWFrZSBzZW5zZS4gIChPbmUgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZVxuIk5vZGVMaXN0IiBpbnRlcmZhY2UgaW4gdGhlIFczQ1wncyBEb2N1bWVudCBPYmplY3QgTW9kZWwuKVxuXG5cbkJhc2ljIGN1c3RvbWl6YXRpb25cbj09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gICJfX25ld19fKCkiIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mICJfX25ld19fKCkiIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseSBhblxuICAgaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyAiX19uZXdfXygpIiBtZXRob2QgdXNpbmdcbiAgICJzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKSIgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmICJfX25ld19fKCkiIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgIl9faW5pdF9fKHNlbGZbLCAuLi5dKSIsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvICJfX25ld19fKCkiLlxuXG4gICBJZiAiX19uZXdfXygpIiBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICAiX19uZXdfXygpIiBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICAiX19pbml0X18oKSIgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyAiX19pbml0X18oKSIgbWV0aG9kLCBpZlxuICAgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mIHRoZVxuICAgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICAiQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSkiLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnQgb25cbiAgIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgICJUeXBlRXJyb3IiIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhICJfX2RlbF9fKCkiIG1ldGhvZCwgdGhlXG4gICBkZXJpdmVkIGNsYXNzXCdzICJfX2RlbF9fKCkiIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdFxuICAgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZS5cbiAgIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvciB0aGVcbiAgICJfX2RlbF9fKCkiIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICAiX19kZWxfXygpIiBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6ICJkZWwgeCIgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCAieC5fX2RlbF9fKCkiIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgIngiIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXIgaXNcbiAgICAgb25seSBjYWxsZWQgd2hlbiAieCJcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWUgY29tbW9uXG4gICAgIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuIG9iamVjdCBmcm9tXG4gICAgIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuIG9iamVjdHMgKGUuZy4sXG4gICAgIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoIHBhcmVudCBhbmRcbiAgICAgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSBvZlxuICAgICBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5leGNfaW5mbygpWzJdIiBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvciBhIHJlZmVyZW5jZVxuICAgICB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhbiB1bmhhbmRsZWRcbiAgICAgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgICJzeXMubGFzdF90cmFjZWJhY2siIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyAiTm9uZSIgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIuIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlXG4gICAgIGRldGVjdGVkIHdoZW4gdGhlIG9wdGlvbiBjeWNsZSBkZXRlY3RvciBpcyBlbmFibGVkIChpdFwncyBvbiBieVxuICAgICBkZWZhdWx0KSwgYnV0IGNhbiBvbmx5IGJlIGNsZWFuZWQgdXAgaWYgdGhlcmUgYXJlIG5vIFB5dGhvbi1cbiAgICAgbGV2ZWwgIl9fZGVsX18oKSIgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb25cbiAgICAgZm9yIHRoZSAiZ2MiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgIl9fZGVsX18oKSJcbiAgICAgbWV0aG9kcyBhcmUgaGFuZGxlZCBieSB0aGUgY3ljbGUgZGV0ZWN0b3IsIHBhcnRpY3VsYXJseSB0aGVcbiAgICAgZGVzY3JpcHRpb24gb2YgdGhlICJnYXJiYWdlIiB2YWx1ZS5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2hcbiAgICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZ1xuICAgICB0aGVpciBleGVjdXRpb24gYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0b1xuICAgICAic3lzLnN0ZGVyciIgaW5zdGVhZC4gQWxzbywgd2hlbiAiX19kZWxfXygpIiBpcyBpbnZva2VkIGluXG4gICAgIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZVxuICAgICBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlciBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlICJfX2RlbF9fKCkiXG4gICAgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZ1xuICAgICB0b3JuIGRvd24gKGUuZy4gdGhlIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpc1xuICAgICByZWFzb24sICJfX2RlbF9fKCkiIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZFxuICAgICB0byBtYWludGFpbiBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSxcbiAgICAgUHl0aG9uIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgIl9fZGVsX18oKSIgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgInJlcHIoKSIgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgIm9mZmljaWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpc1xuICAgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZCB0b1xuICAgcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgICI8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+IiBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgIl9fcmVwcl9fKCkiIGJ1dFxuICAgbm90ICJfX3N0cl9fKCkiLCB0aGVuICJfX3JlcHJfXygpIiBpcyBhbHNvIHVzZWQgd2hlbiBhbiAiaW5mb3JtYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXMgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJzdHIob2JqZWN0KSIgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImZvcm1hdCgpIiBhbmRcbiAgICJwcmludCgpIiB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGUgc3RyaW5nXG4gICByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSAqc3RyaW5nKlxuICAgb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gIm9iamVjdC5fX3JlcHJfXygpIiBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0ICJfX3N0cl9fKCkiIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSAib2JqZWN0IlxuICAgY2FsbHMgIm9iamVjdC5fX3JlcHJfXygpIi5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgImJ5dGVzKCkiIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSAiYnl0ZXMiIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgImZvcm1hdCgpIiBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICAic3RyLmZvcm1hdCgpIiBtZXRob2Qgb2YgY2xhc3MgInN0ciIpIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgYVxuICAgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgdXAgdG9cbiAgIHRoZSB0eXBlIGltcGxlbWVudGluZyAiX19mb3JtYXRfXygpIiwgaG93ZXZlciBtb3N0IGNsYXNzZXMgd2lsbFxuICAgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3IgdXNlIGFcbiAgIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogIng8eSIgY2FsbHMgInguX19sdF9fKHkpIiwgIng8PXkiIGNhbGxzICJ4Ll9fbGVfXyh5KSIsXG4gICAieD09eSIgY2FsbHMgInguX19lcV9fKHkpIiwgInghPXkiIGNhbGxzICJ4Ll9fbmVfXyh5KSIsICJ4PnkiIGNhbGxzXG4gICAieC5fX2d0X18oeSkiLCBhbmQgIng+PXkiIGNhbGxzICJ4Ll9fZ2VfXyh5KSIuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b24gIk5vdEltcGxlbWVudGVkIlxuICAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGEgZ2l2ZW4gcGFpciBvZlxuICAgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCAiRmFsc2UiIGFuZCAiVHJ1ZSIgYXJlIHJldHVybmVkIGZvciBhXG4gICBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuIHJldHVybiBhbnkgdmFsdWUsXG4gICBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGEgQm9vbGVhbiBjb250ZXh0IChlLmcuLFxuICAgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiAiaWYiIHN0YXRlbWVudCksIFB5dGhvbiB3aWxsIGNhbGwgImJvb2woKSJcbiAgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdCBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiAieD09eSIgZG9lcyBub3QgaW1wbHkgdGhhdCAieCE9eSIgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyAiX19lcV9fKCkiLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICAiX19uZV9fKCkiIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZSB0aGVcbiAgIHBhcmFncmFwaCBvbiAiX19oYXNoX18oKSIgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uIGNyZWF0aW5nXG4gICAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZFxuICAgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsICJfX2x0X18oKSIgYW5kICJfX2d0X18oKSIgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sICJfX2xlX18oKSIgYW5kICJfX2dlX18oKSIgYXJlIGVhY2ggb3RoZXJcJ3MgcmVmbGVjdGlvbixcbiAgIGFuZCAiX19lcV9fKCkiIGFuZCAiX19uZV9fKCkiIGFyZSB0aGVpciBvd24gcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSAiZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKCkiLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uICJoYXNoKCkiIGFuZCBmb3Igb3BlcmF0aW9ucyBvbiBtZW1iZXJzXG4gICBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nICJzZXQiLCAiZnJvemVuc2V0IiwgYW5kICJkaWN0Ii5cbiAgICJfX2hhc2hfXygpIiBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seSByZXF1aXJlZCBwcm9wZXJ0eVxuICAgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZSBoYXNoIHZhbHVlOyBpdCBpc1xuICAgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZyBleGNsdXNpdmUgb3IpIHRoZSBoYXNoXG4gICB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdCBhbHNvIHBsYXkgYSBwYXJ0IGluXG4gICBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6ICJoYXNoKCkiIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3NcbiAgICAgY3VzdG9tICJfX2hhc2hfXygpIiBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSAiUHlfc3NpemVfdCIuICBUaGlzXG4gICAgIGlzIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0XG4gICAgIGJ1aWxkcy4gSWYgYW4gb2JqZWN0XCdzICAgIl9faGFzaF9fKCkiIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkc1xuICAgICBvZiBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGxcbiAgICAgc3VwcG9ydGVkIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCAicHl0aG9uIC1jXG4gICAgICJpbXBvcnQgc3lzOyBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSIiXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuICJfX2VxX18oKSIgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhICJfX2hhc2hfXygpIiBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzICJfX2VxX18oKSJcbiAgIGJ1dCBub3QgIl9faGFzaF9fKCkiLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBhcyBpdGVtcyBpblxuICAgaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXMgbXV0YWJsZSBvYmplY3RzIGFuZFxuICAgaW1wbGVtZW50cyBhbiAiX19lcV9fKCkiIG1ldGhvZCwgaXQgc2hvdWxkIG5vdCBpbXBsZW1lbnRcbiAgICJfX2hhc2hfXygpIiwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlIGNvbGxlY3Rpb25zXG4gICByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGUgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSAiX19lcV9fKCkiIGFuZCAiX19oYXNoX18oKSIgbWV0aG9kcyBieVxuICAgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgInguX19oYXNoX18oKSIgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0ICJ4ID09IHkiIGltcGxpZXMgYm90aCB0aGF0ICJ4IGlzIHkiIGFuZCAiaGFzaCh4KSA9PSBoYXNoKHkpIi5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIGFuZCBkb2VzIG5vdCBkZWZpbmUgIl9faGFzaF9fKCkiXG4gICB3aWxsIGhhdmUgaXRzICJfX2hhc2hfXygpIiBpbXBsaWNpdGx5IHNldCB0byAiTm9uZSIuICBXaGVuIHRoZVxuICAgIl9faGFzaF9fKCkiIG1ldGhvZCBvZiBhIGNsYXNzIGlzICJOb25lIiwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzc1xuICAgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSAiVHlwZUVycm9yIiB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0b1xuICAgcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUiKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mICJfX2hhc2hfXygpIiBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGUgaW50ZXJwcmV0ZXJcbiAgIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyAiX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfXyIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSAiX19lcV9fKCkiIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSAiX19oYXNoX18gPSBOb25lIiBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duICJfX2hhc2hfXygpIiB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhICJUeXBlRXJyb3IiIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIGhhc2hhYmxlIGJ5IGFuICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIiBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgIl9faGFzaF9fKCkiIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZFxuICAgICBkYXRldGltZSBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvICJQWVRIT05IQVNIU0VFRCIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgICJib29sKCkiOyBzaG91bGQgcmV0dXJuICJGYWxzZSIgb3IgIlRydWUiLiAgV2hlbiB0aGlzIG1ldGhvZCBpcyBub3RcbiAgIGRlZmluZWQsICJfX2xlbl9fKCkiIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgIl9fbGVuX18oKSIgbm9yICJfX2Jvb2xfXygpIiwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG5cblxuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mICJ4Lm5hbWUiKSBmb3JcbmNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgInNlbGYiKS4gICJuYW1lIiBpcyB0aGUgYXR0cmlidXRlIG5hbWUuIFRoaXNcbiAgIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICAiX19nZXRhdHRyX18oKSIgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiAiX19nZXRhdHRyX18oKSIgYW5kICJfX3NldGF0dHJfXygpIi4pIFRoaXMgaXMgZG9uZSBib3RoIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSAiX19nZXRhdHRyX18oKSIgd291bGQgaGF2ZVxuICAgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGUgdGhhdCBhdFxuICAgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnkgbm90XG4gICBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICAiX19nZXRhdHRyaWJ1dGVfXygpIiBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBvdmVyIGF0dHJpYnV0ZSBhY2Nlc3MuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXMgIl9fZ2V0YXR0cl9fKCkiLFxuICAgdGhlIGxhdHRlciB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzICJfX2dldGF0dHJpYnV0ZV9fKCkiIGVpdGhlclxuICAgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW4gIkF0dHJpYnV0ZUVycm9yIi4gVGhpcyBtZXRob2RcbiAgIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi4gSW4gb3JkZXIgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluXG4gICB0aGlzIG1ldGhvZCwgaXRzIGltcGxlbWVudGF0aW9uIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzc1xuICAgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSB0byBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvclxuICAgZXhhbXBsZSwgIm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpIi5cblxuICAgTm90ZTogVGhpcyBtZXRob2QgbWF5IHN0aWxsIGJlIGJ5cGFzc2VkIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsXG4gICAgIG1ldGhvZHMgYXMgdGhlIHJlc3VsdCBvZiBpbXBsaWNpdCBpbnZvY2F0aW9uIHZpYSBsYW5ndWFnZSBzeW50YXhcbiAgICAgb3IgYnVpbHQtaW4gZnVuY3Rpb25zLiBTZWUgKlNwZWNpYWwgbWV0aG9kIGxvb2t1cCouXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICpuYW1lKiBpcyB0aGUgYXR0cmlidXRlIG5hbWUsICp2YWx1ZSogaXMgdGhlXG4gICB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBpdC5cblxuICAgSWYgIl9fc2V0YXR0cl9fKCkiIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgICJvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpIi5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgIl9fc2V0YXR0cl9fKCkiIGJ1dCBmb3IgYXR0cmlidXRlIGRlbGV0aW9uIGluc3RlYWQgb2ZcbiAgIGFzc2lnbm1lbnQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmICJkZWwgb2JqLm5hbWUiIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiAiZGlyKCkiIGlzIGNhbGxlZCBvbiB0aGUgb2JqZWN0LiBBIHNlcXVlbmNlIG11c3QgYmVcbiAgIHJldHVybmVkLiAiZGlyKCkiIGNvbnZlcnRzIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSB0byBhIGxpc3QgYW5kXG4gICBzb3J0cyBpdC5cblxuXG5JbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB3aGVuIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuY29udGFpbmluZyB0aGUgbWV0aG9kIChhIHNvLWNhbGxlZCAqZGVzY3JpcHRvciogY2xhc3MpIGFwcGVhcnMgaW4gYW5cbipvd25lciogY2xhc3MgKHRoZSBkZXNjcmlwdG9yIG11c3QgYmUgaW4gZWl0aGVyIHRoZSBvd25lclwncyBjbGFzc1xuZGljdGlvbmFyeSBvciBpbiB0aGUgY2xhc3MgZGljdGlvbmFyeSBmb3Igb25lIG9mIGl0cyBwYXJlbnRzKS4gIEluIHRoZVxuZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzXG50aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJyAiX19kaWN0X18iLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgIk5vbmUiIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiAiQXR0cmlidXRlRXJyb3IiXG4gICBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblxuSW52b2tpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkluIGdlbmVyYWwsIGEgZGVzY3JpcHRvciBpcyBhbiBvYmplY3QgYXR0cmlidXRlIHdpdGggImJpbmRpbmdcbmJlaGF2aW9yIiwgb25lIHdob3NlIGF0dHJpYnV0ZSBhY2Nlc3MgaGFzIGJlZW4gb3ZlcnJpZGRlbiBieSBtZXRob2RzXG5pbiB0aGUgZGVzY3JpcHRvciBwcm90b2NvbDogICJfX2dldF9fKCkiLCAiX19zZXRfXygpIiwgYW5kXG4iX19kZWxldGVfXygpIi4gSWYgYW55IG9mIHRob3NlIG1ldGhvZHMgYXJlIGRlZmluZWQgZm9yIGFuIG9iamVjdCwgaXRcbmlzIHNhaWQgdG8gYmUgYSBkZXNjcmlwdG9yLlxuXG5UaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYXR0cmlidXRlIGFjY2VzcyBpcyB0byBnZXQsIHNldCwgb3IgZGVsZXRlXG50aGUgYXR0cmlidXRlIGZyb20gYW4gb2JqZWN0XCdzIGRpY3Rpb25hcnkuIEZvciBpbnN0YW5jZSwgImEueCIgaGFzIGFcbmxvb2t1cCBjaGFpbiBzdGFydGluZyB3aXRoICJhLl9fZGljdF9fW1wneFwnXSIsIHRoZW5cbiJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXSIsIGFuZCBjb250aW51aW5nIHRocm91Z2ggdGhlIGJhc2UgY2xhc3NlcyBvZlxuInR5cGUoYSkiIGV4Y2x1ZGluZyBtZXRhY2xhc3Nlcy5cblxuSG93ZXZlciwgaWYgdGhlIGxvb2tlZC11cCB2YWx1ZSBpcyBhbiBvYmplY3QgZGVmaW5pbmcgb25lIG9mIHRoZVxuZGVzY3JpcHRvciBtZXRob2RzLCB0aGVuIFB5dGhvbiBtYXkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kXG5pbnZva2UgdGhlIGRlc2NyaXB0b3IgbWV0aG9kIGluc3RlYWQuICBXaGVyZSB0aGlzIG9jY3VycyBpbiB0aGVcbnByZWNlZGVuY2UgY2hhaW4gZGVwZW5kcyBvbiB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgd2VyZSBkZWZpbmVkIGFuZFxuaG93IHRoZXkgd2VyZSBjYWxsZWQuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgImEueCIuIEhvd1xudGhlIGFyZ3VtZW50cyBhcmUgYXNzZW1ibGVkIGRlcGVuZHMgb24gImEiOlxuXG5EaXJlY3QgQ2FsbFxuICAgVGhlIHNpbXBsZXN0IGFuZCBsZWFzdCBjb21tb24gY2FsbCBpcyB3aGVuIHVzZXIgY29kZSBkaXJlY3RseVxuICAgaW52b2tlcyBhIGRlc2NyaXB0b3IgbWV0aG9kOiAgICAieC5fX2dldF9fKGEpIi5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhbiBvYmplY3QgaW5zdGFuY2UsICJhLngiIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlXG4gICBjYWxsOiAidHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKSIuXG5cbkNsYXNzIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYSBjbGFzcywgIkEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgY2FsbDpcbiAgICJBLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKE5vbmUsIEEpIi5cblxuU3VwZXIgQmluZGluZ1xuICAgSWYgImEiIGlzIGFuIGluc3RhbmNlIG9mICJzdXBlciIsIHRoZW4gdGhlIGJpbmRpbmcgInN1cGVyKEIsXG4gICBvYmopLm0oKSIgc2VhcmNoZXMgIm9iai5fX2NsYXNzX18uX19tcm9fXyIgZm9yIHRoZSBiYXNlIGNsYXNzICJBIlxuICAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nICJCIiBhbmQgdGhlbiBpbnZva2VzIHRoZSBkZXNjcmlwdG9yIHdpdGggdGhlXG4gICBjYWxsOiAiQS5fX2RpY3RfX1tcJ21cJ10uX19nZXRfXyhvYmosIG9iai5fX2NsYXNzX18pIi5cblxuRm9yIGluc3RhbmNlIGJpbmRpbmdzLCB0aGUgcHJlY2VkZW5jZSBvZiBkZXNjcmlwdG9yIGludm9jYXRpb24gZGVwZW5kc1xub24gdGhlIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyBhcmUgZGVmaW5lZC4gIEEgZGVzY3JpcHRvciBjYW4gZGVmaW5lXG5hbnkgY29tYmluYXRpb24gb2YgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiIGFuZCAiX19kZWxldGVfXygpIi4gIElmIGl0XG5kb2VzIG5vdCBkZWZpbmUgIl9fZ2V0X18oKSIsIHRoZW4gYWNjZXNzaW5nIHRoZSBhdHRyaWJ1dGUgd2lsbCByZXR1cm5cbnRoZSBkZXNjcmlwdG9yIG9iamVjdCBpdHNlbGYgdW5sZXNzIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlIG9iamVjdFwnc1xuaW5zdGFuY2UgZGljdGlvbmFyeS4gIElmIHRoZSBkZXNjcmlwdG9yIGRlZmluZXMgIl9fc2V0X18oKSIgYW5kL29yXG4iX19kZWxldGVfXygpIiwgaXQgaXMgYSBkYXRhIGRlc2NyaXB0b3I7IGlmIGl0IGRlZmluZXMgbmVpdGhlciwgaXQgaXNcbmEgbm9uLWRhdGEgZGVzY3JpcHRvci4gIE5vcm1hbGx5LCBkYXRhIGRlc2NyaXB0b3JzIGRlZmluZSBib3RoXG4iX19nZXRfXygpIiBhbmQgIl9fc2V0X18oKSIsIHdoaWxlIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGhhdmUganVzdCB0aGVcbiJfX2dldF9fKCkiIG1ldGhvZC4gIERhdGEgZGVzY3JpcHRvcnMgd2l0aCAiX19zZXRfXygpIiBhbmQgIl9fZ2V0X18oKSJcbmRlZmluZWQgYWx3YXlzIG92ZXJyaWRlIGEgcmVkZWZpbml0aW9uIGluIGFuIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJblxuY29udHJhc3QsIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGluc3RhbmNlcy5cblxuUHl0aG9uIG1ldGhvZHMgKGluY2x1ZGluZyAic3RhdGljbWV0aG9kKCkiIGFuZCAiY2xhc3NtZXRob2QoKSIpIGFyZVxuaW1wbGVtZW50ZWQgYXMgbm9uLWRhdGEgZGVzY3JpcHRvcnMuICBBY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhblxucmVkZWZpbmUgYW5kIG92ZXJyaWRlIG1ldGhvZHMuICBUaGlzIGFsbG93cyBpbmRpdmlkdWFsIGluc3RhbmNlcyB0b1xuYWNxdWlyZSBiZWhhdmlvcnMgdGhhdCBkaWZmZXIgZnJvbSBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2xhc3MuXG5cblRoZSAicHJvcGVydHkoKSIgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBkYXRhIGRlc2NyaXB0b3IuXG5BY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhbm5vdCBvdmVycmlkZSB0aGUgYmVoYXZpb3Igb2YgYSBwcm9wZXJ0eS5cblxuXG5fX3Nsb3RzX19cbi0tLS0tLS0tLVxuXG5CeSBkZWZhdWx0LCBpbnN0YW5jZXMgb2YgY2xhc3NlcyBoYXZlIGEgZGljdGlvbmFyeSBmb3IgYXR0cmlidXRlXG5zdG9yYWdlLiAgVGhpcyB3YXN0ZXMgc3BhY2UgZm9yIG9iamVjdHMgaGF2aW5nIHZlcnkgZmV3IGluc3RhbmNlXG52YXJpYWJsZXMuICBUaGUgc3BhY2UgY29uc3VtcHRpb24gY2FuIGJlY29tZSBhY3V0ZSB3aGVuIGNyZWF0aW5nIGxhcmdlXG5udW1iZXJzIG9mIGluc3RhbmNlcy5cblxuVGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgKl9fc2xvdHNfXyogaW4gYSBjbGFzc1xuZGVmaW5pdGlvbi4gVGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIHRha2VzIGEgc2VxdWVuY2Ugb2YgaW5zdGFuY2VcbnZhcmlhYmxlcyBhbmQgcmVzZXJ2ZXMganVzdCBlbm91Z2ggc3BhY2UgaW4gZWFjaCBpbnN0YW5jZSB0byBob2xkIGFcbnZhbHVlIGZvciBlYWNoIHZhcmlhYmxlLiAgU3BhY2UgaXMgc2F2ZWQgYmVjYXVzZSAqX19kaWN0X18qIGlzIG5vdFxuY3JlYXRlZCBmb3IgZWFjaCBpbnN0YW5jZS5cblxub2JqZWN0Ll9fc2xvdHNfX1xuXG4gICBUaGlzIGNsYXNzIHZhcmlhYmxlIGNhbiBiZSBhc3NpZ25lZCBhIHN0cmluZywgaXRlcmFibGUsIG9yIHNlcXVlbmNlXG4gICBvZiBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICBJZiBkZWZpbmVkIGluIGFcbiAgIGNsYXNzLCAqX19zbG90c19fKiByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmRcbiAgIHByZXZlbnRzIHRoZSBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmQgKl9fd2Vha3JlZl9fKiBmb3JcbiAgIGVhY2ggaW5zdGFuY2UuXG5cblxuTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXypcbn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyAiQXR0cmlidXRlRXJyb3IiLiBJZlxuICBkeW5hbWljIGFzc2lnbm1lbnQgb2YgbmV3IHZhcmlhYmxlcyBpcyBkZXNpcmVkLCB0aGVuIGFkZFxuICAiXCdfX2RpY3RfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXNcbiAgZGVmaW5pbmcgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0c1xuICBpbnN0YW5jZXMuIElmIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZFxuICAiXCdfX3dlYWtyZWZfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogKl9fc2xvdHNfXyogYXJlIGltcGxlbWVudGVkIGF0IHRoZSBjbGFzcyBsZXZlbCBieSBjcmVhdGluZ1xuICBkZXNjcmlwdG9ycyAoKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyopIGZvciBlYWNoIHZhcmlhYmxlIG5hbWUuICBBc1xuICBhIHJlc3VsdCwgY2xhc3MgYXR0cmlidXRlcyBjYW5ub3QgYmUgdXNlZCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yXG4gIGluc3RhbmNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICpfX3Nsb3RzX18qOyBvdGhlcndpc2UsIHRoZSBjbGFzc1xuICBhdHRyaWJ1dGUgd291bGQgb3ZlcndyaXRlIHRoZSBkZXNjcmlwdG9yIGFzc2lnbm1lbnQuXG5cbiogVGhlIGFjdGlvbiBvZiBhICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzXG4gIHdoZXJlIGl0IGlzIGRlZmluZWQuICBBcyBhIHJlc3VsdCwgc3ViY2xhc3NlcyB3aWxsIGhhdmUgYSAqX19kaWN0X18qXG4gIHVubGVzcyB0aGV5IGFsc28gZGVmaW5lICpfX3Nsb3RzX18qICh3aGljaCBtdXN0IG9ubHkgY29udGFpbiBuYW1lc1xuICBvZiBhbnkgKmFkZGl0aW9uYWwqIHNsb3RzKS5cblxuKiBJZiBhIGNsYXNzIGRlZmluZXMgYSBzbG90IGFsc28gZGVmaW5lZCBpbiBhIGJhc2UgY2xhc3MsIHRoZVxuICBpbnN0YW5jZSB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzIHNsb3QgaXMgaW5hY2Nlc3NpYmxlXG4gIChleGNlcHQgYnkgcmV0cmlldmluZyBpdHMgZGVzY3JpcHRvciBkaXJlY3RseSBmcm9tIHRoZSBiYXNlIGNsYXNzKS5cbiAgVGhpcyByZW5kZXJzIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtIHVuZGVmaW5lZC4gIEluIHRoZSBmdXR1cmUsIGFcbiAgY2hlY2sgbWF5IGJlIGFkZGVkIHRvIHByZXZlbnQgdGhpcy5cblxuKiBOb25lbXB0eSAqX19zbG90c19fKiBkb2VzIG5vdCB3b3JrIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbVxuICAidmFyaWFibGUtbGVuZ3RoIiBidWlsdC1pbiB0eXBlcyBzdWNoIGFzICJpbnQiLCAiYnl0ZXMiIGFuZCAidHVwbGUiLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3NcbiAgbWF5IGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuXG5cbkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBjbGFzc2VzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyAidHlwZSgpIi4gVGhlIGNsYXNzIGJvZHkgaXNcbmV4ZWN1dGVkIGluIGEgbmV3IG5hbWVzcGFjZSBhbmQgdGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgbG9jYWxseSB0byB0aGVcbnJlc3VsdCBvZiAidHlwZShuYW1lLCBiYXNlcywgbmFtZXNwYWNlKSIuXG5cblRoZSBjbGFzcyBjcmVhdGlvbiBwcm9jZXNzIGNhbiBiZSBjdXN0b21pc2VkIGJ5IHBhc3NpbmcgdGhlXG4ibWV0YWNsYXNzIiBrZXl3b3JkIGFyZ3VtZW50IGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGxpbmUsIG9yIGJ5XG5pbmhlcml0aW5nIGZyb20gYW4gZXhpc3RpbmcgY2xhc3MgdGhhdCBpbmNsdWRlZCBzdWNoIGFuIGFyZ3VtZW50LiBJblxudGhlIGZvbGxvd2luZyBleGFtcGxlLCBib3RoICJNeUNsYXNzIiBhbmQgIk15U3ViY2xhc3MiIGFyZSBpbnN0YW5jZXNcbm9mICJNZXRhIjpcblxuICAgY2xhc3MgTWV0YSh0eXBlKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15Q2xhc3MobWV0YWNsYXNzPU1ldGEpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlTdWJjbGFzcyhNeUNsYXNzKTpcbiAgICAgICBwYXNzXG5cbkFueSBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbmFyZSBwYXNzZWQgdGhyb3VnaCB0byBhbGwgbWV0YWNsYXNzIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGJlbG93LlxuXG5XaGVuIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBleGVjdXRlZCwgdGhlIGZvbGxvd2luZyBzdGVwcyBvY2N1cjpcblxuKiB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGlzIGRldGVybWluZWRcblxuKiB0aGUgY2xhc3MgbmFtZXNwYWNlIGlzIHByZXBhcmVkXG5cbiogdGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWRcblxuKiB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWRcblxuXG5EZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgZm9yIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBkZXRlcm1pbmVkIGFzXG5mb2xsb3dzOlxuXG4qIGlmIG5vIGJhc2VzIGFuZCBubyBleHBsaWNpdCBtZXRhY2xhc3MgYXJlIGdpdmVuLCB0aGVuICJ0eXBlKCkiIGlzXG4gIHVzZWRcblxuKiBpZiBhbiBleHBsaWNpdCBtZXRhY2xhc3MgaXMgZ2l2ZW4gYW5kIGl0IGlzICpub3QqIGFuIGluc3RhbmNlIG9mXG4gICJ0eXBlKCkiLCB0aGVuIGl0IGlzIHVzZWQgZGlyZWN0bHkgYXMgdGhlIG1ldGFjbGFzc1xuXG4qIGlmIGFuIGluc3RhbmNlIG9mICJ0eXBlKCkiIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBtZXRhY2xhc3MsIG9yXG4gIGJhc2VzIGFyZSBkZWZpbmVkLCB0aGVuIHRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHVzZWRcblxuVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZXhwbGljaXRseSBzcGVjaWZpZWRcbm1ldGFjbGFzcyAoaWYgYW55KSBhbmQgdGhlIG1ldGFjbGFzc2VzIChpLmUuICJ0eXBlKGNscykiKSBvZiBhbGxcbnNwZWNpZmllZCBiYXNlIGNsYXNzZXMuIFRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIG9uZSB3aGljaCBpcyBhXG5zdWJ0eXBlIG9mICphbGwqIG9mIHRoZXNlIGNhbmRpZGF0ZSBtZXRhY2xhc3Nlcy4gSWYgbm9uZSBvZiB0aGVcbmNhbmRpZGF0ZSBtZXRhY2xhc3NlcyBtZWV0cyB0aGF0IGNyaXRlcmlvbiwgdGhlbiB0aGUgY2xhc3MgZGVmaW5pdGlvblxud2lsbCBmYWlsIHdpdGggIlR5cGVFcnJvciIuXG5cblxuUHJlcGFyaW5nIHRoZSBjbGFzcyBuYW1lc3BhY2Vcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBoYXMgYmVlbiBpZGVudGlmaWVkLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIHByZXBhcmVkLiBJZiB0aGUgbWV0YWNsYXNzIGhhcyBhICJfX3ByZXBhcmVfXyIgYXR0cmlidXRlLFxuaXQgaXMgY2FsbGVkIGFzICJuYW1lc3BhY2UgPSBtZXRhY2xhc3MuX19wcmVwYXJlX18obmFtZSwgYmFzZXMsXG4qKmt3ZHMpIiAod2hlcmUgdGhlIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMsIGlmIGFueSwgY29tZSBmcm9tXG50aGUgY2xhc3MgZGVmaW5pdGlvbikuXG5cbklmIHRoZSBtZXRhY2xhc3MgaGFzIG5vICJfX3ByZXBhcmVfXyIgYXR0cmlidXRlLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIGluaXRpYWxpc2VkIGFzIGFuIGVtcHR5ICJkaWN0KCkiIGluc3RhbmNlLlxuXG5TZWUgYWxzbzogKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMwMDBcblxuICAgICBJbnRyb2R1Y2VkIHRoZSAiX19wcmVwYXJlX18iIG5hbWVzcGFjZSBob29rXG5cblxuRXhlY3V0aW5nIHRoZSBjbGFzcyBib2R5XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWQgKGFwcHJveGltYXRlbHkpIGFzICJleGVjKGJvZHksIGdsb2JhbHMoKSxcbm5hbWVzcGFjZSkiLiBUaGUga2V5IGRpZmZlcmVuY2UgZnJvbSBhIG5vcm1hbCBjYWxsIHRvICJleGVjKCkiIGlzIHRoYXRcbmxleGljYWwgc2NvcGluZyBhbGxvd3MgdGhlIGNsYXNzIGJvZHkgKGluY2x1ZGluZyBhbnkgbWV0aG9kcykgdG9cbnJlZmVyZW5jZSBuYW1lcyBmcm9tIHRoZSBjdXJyZW50IGFuZCBvdXRlciBzY29wZXMgd2hlbiB0aGUgY2xhc3NcbmRlZmluaXRpb24gb2NjdXJzIGluc2lkZSBhIGZ1bmN0aW9uLlxuXG5Ib3dldmVyLCBldmVuIHdoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gb2NjdXJzIGluc2lkZSB0aGUgZnVuY3Rpb24sXG5tZXRob2RzIGRlZmluZWQgaW5zaWRlIHRoZSBjbGFzcyBzdGlsbCBjYW5ub3Qgc2VlIG5hbWVzIGRlZmluZWQgYXQgdGhlXG5jbGFzcyBzY29wZS4gQ2xhc3MgdmFyaWFibGVzIG11c3QgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgZmlyc3RcbnBhcmFtZXRlciBvZiBpbnN0YW5jZSBvciBjbGFzcyBtZXRob2RzLCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGF0IGFsbFxuZnJvbSBzdGF0aWMgbWV0aG9kcy5cblxuXG5DcmVhdGluZyB0aGUgY2xhc3Mgb2JqZWN0XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGNsYXNzIG5hbWVzcGFjZSBoYXMgYmVlbiBwb3B1bGF0ZWQgYnkgZXhlY3V0aW5nIHRoZSBjbGFzc1xuYm9keSwgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgIm1ldGFjbGFzcyhuYW1lLCBiYXNlcyxcbm5hbWVzcGFjZSwgKiprd2RzKSIgKHRoZSBhZGRpdGlvbmFsIGtleXdvcmRzIHBhc3NlZCBoZXJlIGFyZSB0aGUgc2FtZVxuYXMgdGhvc2UgcGFzc2VkIHRvICJfX3ByZXBhcmVfXyIpLlxuXG5UaGlzIGNsYXNzIG9iamVjdCBpcyB0aGUgb25lIHRoYXQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IHRoZSB6ZXJvLVxuYXJndW1lbnQgZm9ybSBvZiAic3VwZXIoKSIuICJfX2NsYXNzX18iIGlzIGFuIGltcGxpY2l0IGNsb3N1cmVcbnJlZmVyZW5jZSBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBpZiBhbnkgbWV0aG9kcyBpbiBhIGNsYXNzIGJvZHkgcmVmZXJcbnRvIGVpdGhlciAiX19jbGFzc19fIiBvciAic3VwZXIiLiBUaGlzIGFsbG93cyB0aGUgemVybyBhcmd1bWVudCBmb3JtXG5vZiAic3VwZXIoKSIgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHRoZSBjbGFzcyBiZWluZyBkZWZpbmVkIGJhc2VkIG9uXG5sZXhpY2FsIHNjb3BpbmcsIHdoaWxlIHRoZSBjbGFzcyBvciBpbnN0YW5jZSB0aGF0IHdhcyB1c2VkIHRvIG1ha2UgdGhlXG5jdXJyZW50IGNhbGwgaXMgaWRlbnRpZmllZCBiYXNlZCBvbiB0aGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoZVxubWV0aG9kLlxuXG5BZnRlciB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQsIGl0IGlzIHBhc3NlZCB0byB0aGUgY2xhc3NcbmRlY29yYXRvcnMgaW5jbHVkZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gKGlmIGFueSkgYW5kIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGFzIHRoZSBkZWZpbmVkIGNsYXNzLlxuXG5TZWUgYWxzbzogKipQRVAgMzEzNSoqIC0gTmV3IHN1cGVyXG5cbiAgICAgRGVzY3JpYmVzIHRoZSBpbXBsaWNpdCAiX19jbGFzc19fIiBjbG9zdXJlIHJlZmVyZW5jZVxuXG5cbk1ldGFjbGFzcyBleGFtcGxlXG4tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgcG90ZW50aWFsIHVzZXMgZm9yIG1ldGFjbGFzc2VzIGFyZSBib3VuZGxlc3MuIFNvbWUgaWRlYXMgdGhhdCBoYXZlXG5iZWVuIGV4cGxvcmVkIGluY2x1ZGUgbG9nZ2luZywgaW50ZXJmYWNlIGNoZWNraW5nLCBhdXRvbWF0aWNcbmRlbGVnYXRpb24sIGF1dG9tYXRpYyBwcm9wZXJ0eSBjcmVhdGlvbiwgcHJveGllcywgZnJhbWV3b3JrcywgYW5kXG5hdXRvbWF0aWMgcmVzb3VyY2UgbG9ja2luZy9zeW5jaHJvbml6YXRpb24uXG5cbkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIG1ldGFjbGFzcyB0aGF0IHVzZXMgYW5cbiJjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCIgdG8gcmVtZW1iZXIgdGhlIG9yZGVyIHRoYXQgY2xhc3MgbWVtYmVyc1xud2VyZSBkZWZpbmVkOlxuXG4gICBjbGFzcyBPcmRlcmVkQ2xhc3ModHlwZSk6XG5cbiAgICAgICAgQGNsYXNzbWV0aG9kXG4gICAgICAgIGRlZiBfX3ByZXBhcmVfXyhtZXRhY2xzLCBuYW1lLCBiYXNlcywgKiprd2RzKTpcbiAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KClcblxuICAgICAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsICoqa3dkcyk6XG4gICAgICAgICAgIHJlc3VsdCA9IHR5cGUuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0KG5hbWVzcGFjZSkpXG4gICAgICAgICAgIHJlc3VsdC5tZW1iZXJzID0gdHVwbGUobmFtZXNwYWNlKVxuICAgICAgICAgICByZXR1cm4gcmVzdWx0XG5cbiAgIGNsYXNzIEEobWV0YWNsYXNzPU9yZGVyZWRDbGFzcyk6XG4gICAgICAgZGVmIG9uZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0d28oc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdGhyZWUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgZm91cihzZWxmKTogcGFzc1xuXG4gICA+Pj4gQS5tZW1iZXJzXG4gICAoXCdfX21vZHVsZV9fXCcsIFwnb25lXCcsIFwndHdvXCcsIFwndGhyZWVcJywgXCdmb3VyXCcpXG5cbldoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gZm9yICpBKiBnZXRzIGV4ZWN1dGVkLCB0aGUgcHJvY2VzcyBiZWdpbnNcbndpdGggY2FsbGluZyB0aGUgbWV0YWNsYXNzXCdzICJfX3ByZXBhcmVfXygpIiBtZXRob2Qgd2hpY2ggcmV0dXJucyBhblxuZW1wdHkgImNvbGxlY3Rpb25zLk9yZGVyZWREaWN0Ii4gIFRoYXQgbWFwcGluZyByZWNvcmRzIHRoZSBtZXRob2RzIGFuZFxuYXR0cmlidXRlcyBvZiAqQSogYXMgdGhleSBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGNsYXNzXG5zdGF0ZW1lbnQuIE9uY2UgdGhvc2UgZGVmaW5pdGlvbnMgYXJlIGV4ZWN1dGVkLCB0aGUgb3JkZXJlZCBkaWN0aW9uYXJ5XG5pcyBmdWxseSBwb3B1bGF0ZWQgYW5kIHRoZSBtZXRhY2xhc3NcJ3MgIl9fbmV3X18oKSIgbWV0aG9kIGdldHNcbmludm9rZWQuICBUaGF0IG1ldGhvZCBidWlsZHMgdGhlIG5ldyB0eXBlIGFuZCBpdCBzYXZlcyB0aGUgb3JkZXJlZFxuZGljdGlvbmFyeSBrZXlzIGluIGFuIGF0dHJpYnV0ZSBjYWxsZWQgIm1lbWJlcnMiLlxuXG5cbkN1c3RvbWl6aW5nIGluc3RhbmNlIGFuZCBzdWJjbGFzcyBjaGVja3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZVxuImlzaW5zdGFuY2UoKSIgYW5kICJpc3N1YmNsYXNzKCkiIGJ1aWx0LWluIGZ1bmN0aW9ucy5cblxuSW4gcGFydGljdWxhciwgdGhlIG1ldGFjbGFzcyAiYWJjLkFCQ01ldGEiIGltcGxlbWVudHMgdGhlc2UgbWV0aG9kcyBpblxub3JkZXIgdG8gYWxsb3cgdGhlIGFkZGl0aW9uIG9mIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgYXNcbiJ2aXJ0dWFsIGJhc2UgY2xhc3NlcyIgdG8gYW55IGNsYXNzIG9yIHR5cGUgKGluY2x1ZGluZyBidWlsdC1pblxudHlwZXMpLCBpbmNsdWRpbmcgb3RoZXIgQUJDcy5cblxuY2xhc3MuX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIFJldHVybiB0cnVlIGlmICppbnN0YW5jZSogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgaW5zdGFuY2Ugb2YgKmNsYXNzKi4gSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgImlzaW5zdGFuY2UoaW5zdGFuY2UsIGNsYXNzKSIuXG5cbmNsYXNzLl9fc3ViY2xhc3NjaGVja19fKHNlbGYsIHN1YmNsYXNzKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiAqc3ViY2xhc3MqIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgKGRpcmVjdCBvclxuICAgaW5kaXJlY3QpIHN1YmNsYXNzIG9mICpjbGFzcyouICBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICAiaXNzdWJjbGFzcyhzdWJjbGFzcywgY2xhc3MpIi5cblxuTm90ZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgdHlwZSAobWV0YWNsYXNzKSBvZiBhXG5jbGFzcy4gIFRoZXkgY2Fubm90IGJlIGRlZmluZWQgYXMgY2xhc3MgbWV0aG9kcyBpbiB0aGUgYWN0dWFsIGNsYXNzLlxuVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkXG5vbiBpbnN0YW5jZXMsIG9ubHkgaW4gdGhpcyBjYXNlIHRoZSBpbnN0YW5jZSBpcyBpdHNlbGYgYSBjbGFzcy5cblxuU2VlIGFsc286ICoqUEVQIDMxMTkqKiAtIEludHJvZHVjaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3Nlc1xuXG4gICAgIEluY2x1ZGVzIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBjdXN0b21pemluZyAiaXNpbnN0YW5jZSgpIiBhbmRcbiAgICAgImlzc3ViY2xhc3MoKSIgYmVoYXZpb3IgdGhyb3VnaCAiX19pbnN0YW5jZWNoZWNrX18oKSIgYW5kXG4gICAgICJfX3N1YmNsYXNzY2hlY2tfXygpIiwgd2l0aCBtb3RpdmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaW5cbiAgICAgdGhlIGNvbnRleHQgb2YgYWRkaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoc2VlIHRoZSAiYWJjIlxuICAgICBtb2R1bGUpIHRvIHRoZSBsYW5ndWFnZS5cblxuXG5FbXVsYXRpbmcgY2FsbGFibGUgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fY2FsbF9fKHNlbGZbLCBhcmdzLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzICJjYWxsZWQiIGFzIGEgZnVuY3Rpb247IGlmIHRoaXMgbWV0aG9kXG4gICBpcyBkZWZpbmVkLCAieChhcmcxLCBhcmcyLCAuLi4pIiBpcyBhIHNob3J0aGFuZCBmb3JcbiAgICJ4Ll9fY2FsbF9fKGFyZzEsIGFyZzIsIC4uLikiLlxuXG5cbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggIjAgPD0gayA8IE4iIHdoZXJlXG4qTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoIGRlZmluZSBhXG5yYW5nZSBvZiBpdGVtcy4gIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlIHRoZVxubWV0aG9kcyAia2V5cygpIiwgInZhbHVlcygpIiwgIml0ZW1zKCkiLCAiZ2V0KCkiLCAiY2xlYXIoKSIsXG4ic2V0ZGVmYXVsdCgpIiwgInBvcCgpIiwgInBvcGl0ZW0oKSIsICJjb3B5KCkiLCBhbmQgInVwZGF0ZSgpIlxuYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uXCdzIHN0YW5kYXJkIGRpY3Rpb25hcnkgb2JqZWN0cy5cblRoZSAiY29sbGVjdGlvbnMiIG1vZHVsZSBwcm92aWRlcyBhICJNdXRhYmxlTWFwcGluZyIgYWJzdHJhY3QgYmFzZVxuY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kcyBmcm9tIGEgYmFzZSBzZXQgb2YgIl9fZ2V0aXRlbV9fKCkiLFxuIl9fc2V0aXRlbV9fKCkiLCAiX19kZWxpdGVtX18oKSIsIGFuZCAia2V5cygpIi4gTXV0YWJsZSBzZXF1ZW5jZXNcbnNob3VsZCBwcm92aWRlIG1ldGhvZHMgImFwcGVuZCgpIiwgImNvdW50KCkiLCAiaW5kZXgoKSIsICJleHRlbmQoKSIsXG4iaW5zZXJ0KCkiLCAicG9wKCkiLCAicmVtb3ZlKCkiLCAicmV2ZXJzZSgpIiBhbmQgInNvcnQoKSIsIGxpa2UgUHl0aG9uXG5zdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGQgaW1wbGVtZW50XG5hZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzICJfX2FkZF9fKCkiLCAiX19yYWRkX18oKSIsXG4iX19pYWRkX18oKSIsICJfX211bF9fKCkiLCAiX19ybXVsX18oKSIgYW5kICJfX2ltdWxfXygpIiBkZXNjcmliZWRcbmJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdCBpc1xucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuIl9fY29udGFpbnNfXygpIiBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgImluIiBvcGVyYXRvcjtcbmZvciBtYXBwaW5ncywgImluIiBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nXCdzIGtleXM7IGZvciBzZXF1ZW5jZXMsIGl0XG5zaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXIgcmVjb21tZW5kZWQgdGhhdCBib3RoXG5tYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGUgIl9faXRlcl9fKCkiIG1ldGhvZCB0byBhbGxvd1xuZWZmaWNpZW50IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZSBjb250YWluZXI7IGZvciBtYXBwaW5ncywgIl9faXRlcl9fKCkiXG5zaG91bGQgYmUgdGhlIHNhbWUgYXMgImtleXMoKSI7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlXG50aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJsZW4oKSIuICBTaG91bGQgcmV0dXJuXG4gICB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QsIGFuIGludGVnZXIgIj49IiAwLiAgQWxzbywgYW4gb2JqZWN0IHRoYXRcbiAgIGRvZXNuXCd0IGRlZmluZSBhICJfX2Jvb2xfXygpIiBtZXRob2QgYW5kIHdob3NlICJfX2xlbl9fKCkiIG1ldGhvZFxuICAgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuXG5cbk5vdGU6IFNsaWNpbmcgaXMgZG9uZSBleGNsdXNpdmVseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcy5cbiAgQSBjYWxsIGxpa2VcblxuICAgICBhWzE6Ml0gPSBiXG5cbiAgaXMgdHJhbnNsYXRlZCB0b1xuXG4gICAgIGFbc2xpY2UoMSwgMiwgTm9uZSldID0gYlxuXG4gIGFuZCBzbyBmb3J0aC4gIE1pc3Npbmcgc2xpY2UgaXRlbXMgYXJlIGFsd2F5cyBmaWxsZWQgaW4gd2l0aCAiTm9uZSIuXG5cbm9iamVjdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiAic2VsZltrZXldIi4gRm9yIHNlcXVlbmNlIHR5cGVzLFxuICAgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLiAgTm90ZSB0aGF0XG4gICB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGUgY2xhc3Mgd2lzaGVzXG4gICB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuIElmXG4gICAqa2V5KiBpcyBvZiBhbiBpbmFwcHJvcHJpYXRlIHR5cGUsICJUeXBlRXJyb3IiIG1heSBiZSByYWlzZWQ7IGlmIG9mXG4gICBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZiBpbmRleGVzIGZvciB0aGUgc2VxdWVuY2UgKGFmdGVyIGFueVxuICAgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSB2YWx1ZXMpLCAiSW5kZXhFcnJvciIgc2hvdWxkIGJlXG4gICByYWlzZWQuIEZvciBtYXBwaW5nIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlXG4gICBjb250YWluZXIpLCAiS2V5RXJyb3IiIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6ICJmb3IiIGxvb3BzIGV4cGVjdCB0aGF0IGFuICJJbmRleEVycm9yIiB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZXMgZm9yIGtleXMsIG9yIGlmIG5ldyBrZXlzXG4gICBjYW4gYmUgYWRkZWQsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHMgY2FuIGJlIHJlcGxhY2VkLiAgVGhlXG4gICBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvclxuICAgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCByZW1vdmFsIG9mIGtleXMsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHNcbiAgIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNlcXVlbmNlLiAgVGhlIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmVcbiAgIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvciB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9faXRlcl9fKHNlbGYpXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGVcbiAgIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZFxuICAgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIsIGFuZCBzaG91bGQgYWxzbyBiZSBtYWRlXG4gICBhdmFpbGFibGUgYXMgdGhlIG1ldGhvZCAia2V5cygpIi5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgInJldmVyc2VkKCkiIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSAiX19yZXZlcnNlZF9fKCkiIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZSAicmV2ZXJzZWQoKSJcbiAgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZSBwcm90b2NvbCAoIl9fbGVuX18oKSJcbiAgIGFuZCAiX19nZXRpdGVtX18oKSIpLiAgT2JqZWN0cyB0aGF0IHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sXG4gICBzaG91bGQgb25seSBwcm92aWRlICJfX3JldmVyc2VkX18oKSIgaWYgdGhleSBjYW4gcHJvdmlkZSBhblxuICAgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnlcbiAgICJyZXZlcnNlZCgpIi5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKCJpbiIgYW5kICJub3QgaW4iKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiwgdGhlIG1lbWJlcnNoaXAgdGVzdFxuICAgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSAiX19pdGVyX18oKSIsIHRoZW4gdGhlIG9sZCBzZXF1ZW5jZVxuICAgaXRlcmF0aW9uIHByb3RvY29sIHZpYSAiX19nZXRpdGVtX18oKSIsIHNlZSAqdGhpcyBzZWN0aW9uIGluIHRoZVxuICAgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cblxuXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlXG4gICBleHByZXNzaW9uICJ4ICsgeSIsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuXG4gICAiX19hZGRfXygpIiBtZXRob2QsICJ4Ll9fYWRkX18oeSkiIGlzIGNhbGxlZC4gIFRoZSAiX19kaXZtb2RfXygpIlxuICAgbWV0aG9kIHNob3VsZCBiZSB0aGUgZXF1aXZhbGVudCB0byB1c2luZyAiX19mbG9vcmRpdl9fKCkiIGFuZFxuICAgIl9fbW9kX18oKSI7IGl0IHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byAiX190cnVlZGl2X18oKSIuICBOb3RlXG4gICB0aGF0ICJfX3Bvd19fKCkiIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gInBvdygpIiBmdW5jdGlvbiBpc1xuICAgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiAiTm90SW1wbGVtZW50ZWQiLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8Iikgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLlxuICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90XG4gICBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZlxuICAgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gInggLVxuICAgeSIsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX3JzdWJfXygpIlxuICAgbWV0aG9kLCAieS5fX3JzdWJfXyh4KSIgaXMgY2FsbGVkIGlmICJ4Ll9fc3ViX18oeSkiIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5ICJwb3coKSIgd2lsbCBub3QgdHJ5IGNhbGxpbmcgIl9fcnBvd19fKCkiICh0aGVcbiAgIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kXG4gICAgIGZvciB0aGUgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXNcbiAgICAgdG8gb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKCIrPSIsICItPSIsICIqPSIsICIvPSIsICIvLz0iLCAiJT0iLCAiKio9IiwgIjw8PSIsXG4gICAiPj49IiwgIiY9IiwgIl49IiwgInw9IikuICBUaGVzZSBtZXRob2RzIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZVxuICAgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoXG4gICBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWQgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWxcbiAgIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIHRvIGV4ZWN1dGUgdGhlIHN0YXRlbWVudCAieCArPSB5Iiwgd2hlcmVcbiAgICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX2lhZGRfXygpIiBtZXRob2QsXG4gICAieC5fX2lhZGRfXyh5KSIgaXMgY2FsbGVkLiAgSWYgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdFxuICAgZG9lcyBub3QgZGVmaW5lIGEgIl9faWFkZF9fKCkiIG1ldGhvZCwgInguX19hZGRfXyh5KSIgYW5kXG4gICAieS5fX3JhZGRfXyh4KSIgYXJlIGNvbnNpZGVyZWQsIGFzIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgInggKyB5Ii5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zICgiLSIsICIrIixcbiAgICJhYnMoKSIgYW5kICJ+IikuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcbm9iamVjdC5fX3JvdW5kX18oc2VsZlssIG5dKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImNvbXBsZXgoKSIsICJpbnQoKSIsXG4gICAiZmxvYXQoKSIgYW5kICJyb3VuZCgpIi4gIFNob3VsZCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgYXBwcm9wcmlhdGVcbiAgIHR5cGUuXG5cbm9iamVjdC5fX2luZGV4X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAib3BlcmF0b3IuaW5kZXgoKSIuICBBbHNvIGNhbGxlZCB3aGVuZXZlclxuICAgUHl0aG9uIG5lZWRzIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZVxuICAgYnVpbHQtaW4gImJpbigpIiwgImhleCgpIiBhbmQgIm9jdCgpIiBmdW5jdGlvbnMpLiBNdXN0IHJldHVybiBhblxuICAgaW50ZWdlci5cblxuXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhICJ3aXRoIiBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0IG1hbmFnZXJcbmhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lIGNvbnRleHRcbmZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmUgbm9ybWFsbHlcbmludm9rZWQgdXNpbmcgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgKGRlc2NyaWJlZCBpbiBzZWN0aW9uICpUaGUgd2l0aFxuc3RhdGVtZW50KiksIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGRpcmVjdGx5IGludm9raW5nIHRoZWlyIG1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlICJ3aXRoIlxuICAgc3RhdGVtZW50IHdpbGwgYmluZCB0aGlzIG1ldGhvZFwncyByZXR1cm4gdmFsdWUgdG8gdGhlIHRhcmdldChzKVxuICAgc3BlY2lmaWVkIGluIHRoZSAiYXMiIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlICJOb25lIi5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgIl9fZXhpdF9fKCkiIG1ldGhvZHMgc2hvdWxkIG5vdCByZXJhaXNlIHRoZSBwYXNzZWQtaW5cbiAgIGV4Y2VwdGlvbjsgdGhpcyBpcyB0aGUgY2FsbGVyXCdzIHJlc3BvbnNpYmlsaXR5LlxuXG5TZWUgYWxzbzogKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcblxuICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uICJ3aXRoIlxuICAgICBzdGF0ZW1lbnQuXG5cblxuU3BlY2lhbCBtZXRob2QgbG9va3VwXG49PT09PT09PT09PT09PT09PT09PT1cblxuRm9yIGN1c3RvbSBjbGFzc2VzLCBpbXBsaWNpdCBpbnZvY2F0aW9ucyBvZiBzcGVjaWFsIG1ldGhvZHMgYXJlIG9ubHlcbmd1YXJhbnRlZWQgdG8gd29yayBjb3JyZWN0bHkgaWYgZGVmaW5lZCBvbiBhbiBvYmplY3RcJ3MgdHlwZSwgbm90IGluXG50aGUgb2JqZWN0XCdzIGluc3RhbmNlIGRpY3Rpb25hcnkuICBUaGF0IGJlaGF2aW91ciBpcyB0aGUgcmVhc29uIHdoeVxudGhlIGZvbGxvd2luZyBjb2RlIHJhaXNlcyBhbiBleGNlcHRpb246XG5cbiAgID4+PiBjbGFzcyBDOlxuICAgLi4uICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fID0gbGFtYmRhOiA1XG4gICA+Pj4gbGVuKGMpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IG9iamVjdCBvZiB0eXBlIFwnQ1wnIGhhcyBubyBsZW4oKVxuXG5UaGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGJlaGF2aW91ciBsaWVzIHdpdGggYSBudW1iZXIgb2Ygc3BlY2lhbFxubWV0aG9kcyBzdWNoIGFzICJfX2hhc2hfXygpIiBhbmQgIl9fcmVwcl9fKCkiIHRoYXQgYXJlIGltcGxlbWVudGVkIGJ5XG5hbGwgb2JqZWN0cywgaW5jbHVkaW5nIHR5cGUgb2JqZWN0cy4gSWYgdGhlIGltcGxpY2l0IGxvb2t1cCBvZiB0aGVzZVxubWV0aG9kcyB1c2VkIHRoZSBjb252ZW50aW9uYWwgbG9va3VwIHByb2Nlc3MsIHRoZXkgd291bGQgZmFpbCB3aGVuXG5pbnZva2VkIG9uIHRoZSB0eXBlIG9iamVjdCBpdHNlbGY6XG5cbiAgID4+PiAxIC5fX2hhc2hfXygpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiBpbnQuX19oYXNoX18oKSA9PSBoYXNoKGludClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIFR5cGVFcnJvcjogZGVzY3JpcHRvciBcJ19faGFzaF9fXCcgb2YgXCdpbnRcJyBvYmplY3QgbmVlZHMgYW4gYXJndW1lbnRcblxuSW5jb3JyZWN0bHkgYXR0ZW1wdGluZyB0byBpbnZva2UgYW4gdW5ib3VuZCBtZXRob2Qgb2YgYSBjbGFzcyBpbiB0aGlzXG53YXkgaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIFwnbWV0YWNsYXNzIGNvbmZ1c2lvblwnLCBhbmQgaXMgYXZvaWRlZFxuYnkgYnlwYXNzaW5nIHRoZSBpbnN0YW5jZSB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbCBtZXRob2RzOlxuXG4gICA+Pj4gdHlwZSgxKS5fX2hhc2hfXygxKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gdHlwZShpbnQpLl9faGFzaF9fKGludCkgPT0gaGFzaChpbnQpXG4gICBUcnVlXG5cbkluIGFkZGl0aW9uIHRvIGJ5cGFzc2luZyBhbnkgaW5zdGFuY2UgYXR0cmlidXRlcyBpbiB0aGUgaW50ZXJlc3Qgb2ZcbmNvcnJlY3RuZXNzLCBpbXBsaWNpdCBzcGVjaWFsIG1ldGhvZCBsb29rdXAgZ2VuZXJhbGx5IGFsc28gYnlwYXNzZXNcbnRoZSAiX19nZXRhdHRyaWJ1dGVfXygpIiBtZXRob2QgZXZlbiBvZiB0aGUgb2JqZWN0XCdzIG1ldGFjbGFzczpcblxuICAgPj4+IGNsYXNzIE1ldGEodHlwZSk6XG4gICAuLi4gICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgIHByaW50KCJNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgIHJldHVybiB0eXBlLl9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjbGFzcyBDKG9iamVjdCwgbWV0YWNsYXNzPU1ldGEpOlxuICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiAxMFxuICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgICBwcmludCgiQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXygpICAgICAgICAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgaW5zdGFuY2VcbiAgIENsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IHR5cGUoYykuX19sZW5fXyhjKSAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgdHlwZVxuICAgTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IGxlbihjKSAgICAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0IGxvb2t1cFxuICAgMTBcblxuQnlwYXNzaW5nIHRoZSAiX19nZXRhdHRyaWJ1dGVfXygpIiBtYWNoaW5lcnkgaW4gdGhpcyBmYXNoaW9uIHByb3ZpZGVzXG5zaWduaWZpY2FudCBzY29wZSBmb3Igc3BlZWQgb3B0aW1pc2F0aW9ucyB3aXRoaW4gdGhlIGludGVycHJldGVyLCBhdFxudGhlIGNvc3Qgb2Ygc29tZSBmbGV4aWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2Ygc3BlY2lhbCBtZXRob2RzICh0aGVcbnNwZWNpYWwgbWV0aG9kICptdXN0KiBiZSBzZXQgb24gdGhlIGNsYXNzIG9iamVjdCBpdHNlbGYgaW4gb3JkZXIgdG8gYmVcbmNvbnNpc3RlbnRseSBpbnZva2VkIGJ5IHRoZSBpbnRlcnByZXRlcikuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gSXQgKmlzKiBwb3NzaWJsZSBpbiBzb21lIGNhc2VzIHRvIGNoYW5nZSBhbiBvYmplY3RcJ3MgdHlwZSxcbiAgICB1bmRlciBjZXJ0YWluIGNvbnRyb2xsZWQgY29uZGl0aW9ucy4gSXQgZ2VuZXJhbGx5IGlzblwndCBhIGdvb2RcbiAgICBpZGVhIHRob3VnaCwgc2luY2UgaXQgY2FuIGxlYWQgdG8gc29tZSB2ZXJ5IHN0cmFuZ2UgYmVoYXZpb3VyIGlmXG4gICAgaXQgaXMgaGFuZGxlZCBpbmNvcnJlY3RseS5cblxuWzJdIEZvciBvcGVyYW5kcyBvZiB0aGUgc2FtZSB0eXBlLCBpdCBpcyBhc3N1bWVkIHRoYXQgaWYgdGhlIG5vbi1cbiAgICByZWZsZWN0ZWQgbWV0aG9kIChzdWNoIGFzICJfX2FkZF9fKCkiKSBmYWlscyB0aGUgb3BlcmF0aW9uIGlzIG5vdFxuICAgIHN1cHBvcnRlZCwgd2hpY2ggaXMgd2h5IHRoZSByZWZsZWN0ZWQgbWV0aG9kIGlzIG5vdCBjYWxsZWQuXG4nLAotICdzdHJpbmctbWV0aG9kcyc6ICdcblN0cmluZyBNZXRob2RzXG4qKioqKioqKioqKioqKlxuXG5TdHJpbmdzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIHNlcXVlbmNlIG9wZXJhdGlvbnMsIGFsb25nIHdpdGhcbnRoZSBhZGRpdGlvbmFsIG1ldGhvZHMgZGVzY3JpYmVkIGJlbG93LlxuXG5TdHJpbmdzIGFsc28gc3VwcG9ydCB0d28gc3R5bGVzIG9mIHN0cmluZyBmb3JtYXR0aW5nLCBvbmUgcHJvdmlkaW5nIGFcbmxhcmdlIGRlZ3JlZSBvZiBmbGV4aWJpbGl0eSBhbmQgY3VzdG9taXphdGlvbiAoc2VlICJzdHIuZm9ybWF0KCkiLFxuKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBhbmQgKlN0cmluZyBGb3JtYXR0aW5nKikgYW5kIHRoZSBvdGhlciBiYXNlZCBvblxuQyAicHJpbnRmIiBzdHlsZSBmb3JtYXR0aW5nIHRoYXQgaGFuZGxlcyBhIG5hcnJvd2VyIHJhbmdlIG9mIHR5cGVzIGFuZFxuaXMgc2xpZ2h0bHkgaGFyZGVyIHRvIHVzZSBjb3JyZWN0bHksIGJ1dCBpcyBvZnRlbiBmYXN0ZXIgZm9yIHRoZSBjYXNlc1xuaXQgY2FuIGhhbmRsZSAoKnByaW50Zi1zdHlsZSBTdHJpbmcgRm9ybWF0dGluZyopLlxuXG5UaGUgKlRleHQgUHJvY2Vzc2luZyBTZXJ2aWNlcyogc2VjdGlvbiBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeSBjb3ZlcnNcbmEgbnVtYmVyIG9mIG90aGVyIG1vZHVsZXMgdGhhdCBwcm92aWRlIHZhcmlvdXMgdGV4dCByZWxhdGVkIHV0aWxpdGllc1xuKGluY2x1ZGluZyByZWd1bGFyIGV4cHJlc3Npb24gc3VwcG9ydCBpbiB0aGUgInJlIiBtb2R1bGUpLlxuXG5zdHIuY2FwaXRhbGl6ZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGl0cyBmaXJzdCBjaGFyYWN0ZXIgY2FwaXRhbGl6ZWRcbiAgIGFuZCB0aGUgcmVzdCBsb3dlcmNhc2VkLlxuXG5zdHIuY2FzZWZvbGQoKVxuXG4gICBSZXR1cm4gYSBjYXNlZm9sZGVkIGNvcHkgb2YgdGhlIHN0cmluZy4gQ2FzZWZvbGRlZCBzdHJpbmdzIG1heSBiZVxuICAgdXNlZCBmb3IgY2FzZWxlc3MgbWF0Y2hpbmcuXG5cbiAgIENhc2Vmb2xkaW5nIGlzIHNpbWlsYXIgdG8gbG93ZXJjYXNpbmcgYnV0IG1vcmUgYWdncmVzc2l2ZSBiZWNhdXNlXG4gICBpdCBpcyBpbnRlbmRlZCB0byByZW1vdmUgYWxsIGNhc2UgZGlzdGluY3Rpb25zIGluIGEgc3RyaW5nLiBGb3JcbiAgIGV4YW1wbGUsIHRoZSBHZXJtYW4gbG93ZXJjYXNlIGxldHRlciAiXCdceGMzXHg5ZlwnIiBpcyBlcXVpdmFsZW50IHRvICIic3MiIi5cbiAgIFNpbmNlIGl0IGlzIGFscmVhZHkgbG93ZXJjYXNlLCAibG93ZXIoKSIgd291bGQgZG8gbm90aGluZyB0byAiXCdceGMzXHg5ZlwnIjtcbiAgICJjYXNlZm9sZCgpIiBjb252ZXJ0cyBpdCB0byAiInNzIiIuXG5cbiAgIFRoZSBjYXNlZm9sZGluZyBhbGdvcml0aG0gaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMy5cblxuc3RyLmNlbnRlcih3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIGNlbnRlcmVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBQYWRkaW5nIGlzIGRvbmVcbiAgIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhIHNwYWNlKS5cblxuc3RyLmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKnN1YipcbiAgIGluIHRoZSByYW5nZSBbKnN0YXJ0KiwgKmVuZCpdLiAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kXG4gICAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uXG5cbnN0ci5lbmNvZGUoZW5jb2Rpbmc9InV0Zi04IiwgZXJyb3JzPSJzdHJpY3QiKVxuXG4gICBSZXR1cm4gYW4gZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgYXMgYSBieXRlcyBvYmplY3QuIERlZmF1bHRcbiAgIGVuY29kaW5nIGlzICJcJ3V0Zi04XCciLiAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50XG4gICBlcnJvciBoYW5kbGluZyBzY2hlbWUuIFRoZSBkZWZhdWx0IGZvciAqZXJyb3JzKiBpcyAiXCdzdHJpY3RcJyIsXG4gICBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGEgIlVuaWNvZGVFcnJvciIuIE90aGVyIHBvc3NpYmxlXG4gICB2YWx1ZXMgYXJlICJcJ2lnbm9yZVwnIiwgIlwncmVwbGFjZVwnIiwgIlwneG1sY2hhcnJlZnJlcGxhY2VcJyIsXG4gICAiXCdiYWNrc2xhc2hyZXBsYWNlXCciIGFuZCBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHZpYVxuICAgImNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpIiwgc2VlIHNlY3Rpb24gKkNvZGVjIEJhc2UgQ2xhc3NlcyouIEZvciBhXG4gICBsaXN0IG9mIHBvc3NpYmxlIGVuY29kaW5ncywgc2VlIHNlY3Rpb24gKlN0YW5kYXJkIEVuY29kaW5ncyouXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIGtleXdvcmQgYXJndW1lbnRzIGFkZGVkLlxuXG5zdHIuZW5kc3dpdGgoc3VmZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuICJUcnVlIiBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkICpzdWZmaXgqLFxuICAgb3RoZXJ3aXNlIHJldHVybiAiRmFsc2UiLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBzdWZmaXhlc1xuICAgdG8gbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdCBwb3NpdGlvbi5cblxuc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZFxuICAgYnkgb25lIG9yIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGVcbiAgIGdpdmVuIHRhYiBzaXplLiAgVGFiIHBvc2l0aW9ucyBvY2N1ciBldmVyeSAqdGFic2l6ZSogY2hhcmFjdGVyc1xuICAgKGRlZmF1bHQgaXMgOCwgZ2l2aW5nIHRhYiBwb3NpdGlvbnMgYXQgY29sdW1ucyAwLCA4LCAxNiBhbmQgc28gb24pLlxuICAgVG8gZXhwYW5kIHRoZSBzdHJpbmcsIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzZXQgdG8gemVybyBhbmQgdGhlXG4gICBzdHJpbmcgaXMgZXhhbWluZWQgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rlci4gIElmIHRoZSBjaGFyYWN0ZXIgaXMgYVxuICAgdGFiICgiXFx0IiksIG9uZSBvciBtb3JlIHNwYWNlIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGluIHRoZSByZXN1bHRcbiAgIHVudGlsIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBlcXVhbCB0byB0aGUgbmV4dCB0YWIgcG9zaXRpb24uIChUaGVcbiAgIHRhYiBjaGFyYWN0ZXIgaXRzZWxmIGlzIG5vdCBjb3BpZWQuKSAgSWYgdGhlIGNoYXJhY3RlciBpcyBhIG5ld2xpbmVcbiAgICgiXFxuIikgb3IgcmV0dXJuICgiXFxyIiksIGl0IGlzIGNvcGllZCBhbmQgdGhlIGN1cnJlbnQgY29sdW1uIGlzXG4gICByZXNldCB0byB6ZXJvLiAgQW55IG90aGVyIGNoYXJhY3RlciBpcyBjb3BpZWQgdW5jaGFuZ2VkIGFuZCB0aGVcbiAgIGN1cnJlbnQgY29sdW1uIGlzIGluY3JlbWVudGVkIGJ5IG9uZSByZWdhcmRsZXNzIG9mIGhvdyB0aGVcbiAgIGNoYXJhY3RlciBpcyByZXByZXNlbnRlZCB3aGVuIHByaW50ZWQuXG5cbiAgID4+PiBcJzAxXFx0MDEyXFx0MDEyM1xcdDAxMjM0XCcuZXhwYW5kdGFicygpXG4gICBcJzAxICAgICAgMDEyICAgICAwMTIzICAgIDAxMjM0XCdcbiAgID4+PiBcJzAxXFx0MDEyXFx0MDEyM1xcdDAxMjM0XCcuZXhwYW5kdGFicyg0KVxuICAgXCcwMSAgMDEyIDAxMjMgICAgMDEyMzRcJ1xuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlICJzW3N0YXJ0OmVuZF0iLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gIi0xIiBpZiAqc3ViKiBpcyBub3QgZm91bmQuXG5cbiAgIE5vdGU6IFRoZSAiZmluZCgpIiBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgb25seSBpZiB5b3UgbmVlZCB0byBrbm93XG4gICAgIHRoZSBwb3NpdGlvbiBvZiAqc3ViKi4gIFRvIGNoZWNrIGlmICpzdWIqIGlzIGEgc3Vic3RyaW5nIG9yIG5vdCxcbiAgICAgdXNlIHRoZSAiaW4iIG9wZXJhdG9yOlxuXG4gICAgICAgID4+PiBcJ1B5XCcgaW4gXCdQeXRob25cJ1xuICAgICAgICBUcnVlXG5cbnN0ci5mb3JtYXQoKmFyZ3MsICoqa3dhcmdzKVxuXG4gICBQZXJmb3JtIGEgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0aW9uLiAgVGhlIHN0cmluZyBvbiB3aGljaCB0aGlzXG4gICBtZXRob2QgaXMgY2FsbGVkIGNhbiBjb250YWluIGxpdGVyYWwgdGV4dCBvciByZXBsYWNlbWVudCBmaWVsZHNcbiAgIGRlbGltaXRlZCBieSBicmFjZXMgInt9Ii4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyXG4gICB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGFcbiAgIGtleXdvcmQgYXJndW1lbnQuICBSZXR1cm5zIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGVhY2hcbiAgIHJlcGxhY2VtZW50IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGVcbiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuXG5cbiAgID4+PiAiVGhlIHN1bSBvZiAxICsgMiBpcyB7MH0iLmZvcm1hdCgxKzIpXG4gICBcJ1RoZSBzdW0gb2YgMSArIDIgaXMgM1wnXG5cbiAgIFNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpb3VzXG4gICBmb3JtYXR0aW5nIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLlxuXG5zdHIuZm9ybWF0X21hcChtYXBwaW5nKVxuXG4gICBTaW1pbGFyIHRvICJzdHIuZm9ybWF0KCoqbWFwcGluZykiLCBleGNlcHQgdGhhdCAibWFwcGluZyIgaXMgdXNlZFxuICAgZGlyZWN0bHkgYW5kIG5vdCBjb3BpZWQgdG8gYSAiZGljdCIuICBUaGlzIGlzIHVzZWZ1bCBpZiBmb3IgZXhhbXBsZVxuICAgIm1hcHBpbmciIGlzIGEgZGljdCBzdWJjbGFzczpcblxuICAgPj4+IGNsYXNzIERlZmF1bHQoZGljdCk6XG4gICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIGtleVxuICAgLi4uXG4gICA+Pj4gXCd7bmFtZX0gd2FzIGJvcm4gaW4ge2NvdW50cnl9XCcuZm9ybWF0X21hcChEZWZhdWx0KG5hbWU9XCdHdWlkb1wnKSlcbiAgIFwnR3VpZG8gd2FzIGJvcm4gaW4gY291bnRyeVwnXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuc3RyLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgImZpbmQoKSIsIGJ1dCByYWlzZSAiVmFsdWVFcnJvciIgd2hlbiB0aGUgc3Vic3RyaW5nIGlzIG5vdFxuICAgZm91bmQuXG5cbnN0ci5pc2FsbnVtKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFudW1lcmljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgQSBjaGFyYWN0ZXIgImMiXG4gICBpcyBhbHBoYW51bWVyaWMgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJucyAiVHJ1ZSI6XG4gICAiYy5pc2FscGhhKCkiLCAiYy5pc2RlY2ltYWwoKSIsICJjLmlzZGlnaXQoKSIsIG9yICJjLmlzbnVtZXJpYygpIi5cblxuc3RyLmlzYWxwaGEoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYWJldGljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgQWxwaGFiZXRpY1xuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIkxldHRlciIsIGkuZS4sIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eVxuICAgYmVpbmcgb25lIG9mICJMbSIsICJMdCIsICJMdSIsICJMbCIsIG9yICJMbyIuICBOb3RlIHRoYXQgdGhpcyBpc1xuICAgZGlmZmVyZW50IGZyb20gdGhlICJBbHBoYWJldGljIiBwcm9wZXJ0eSBkZWZpbmVkIGluIHRoZSBVbmljb2RlXG4gICBTdGFuZGFyZC5cblxuc3RyLmlzZGVjaW1hbCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRlY2ltYWwgY2hhcmFjdGVyc1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gRGVjaW1hbFxuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgZnJvbSBnZW5lcmFsIGNhdGVnb3J5ICJOZCIuIFRoaXMgY2F0ZWdvcnlcbiAgIGluY2x1ZGVzIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvXG4gICBmb3JtIGRlY2ltYWwtcmFkaXggbnVtYmVycywgZS5nLiBVKzA2NjAsIEFSQUJJQy1JTkRJQyBESUdJVCBaRVJPLlxuXG5zdHIuaXNkaWdpdCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRpZ2l0cyBhbmQgdGhlcmUgaXNcbiAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIERpZ2l0cyBpbmNsdWRlIGRlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYW5kIGRpZ2l0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZywgc3VjaCBhcyB0aGVcbiAgIGNvbXBhdGliaWxpdHkgc3VwZXJzY3JpcHQgZGlnaXRzLiAgRm9ybWFsbHksIGEgZGlnaXQgaXMgYSBjaGFyYWN0ZXJcbiAgIHRoYXQgaGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQgb3JcbiAgIE51bWVyaWNfVHlwZT1EZWNpbWFsLlxuXG5zdHIuaXNpZGVudGlmaWVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGlkZW50aWZpZXIgYWNjb3JkaW5nIHRvIHRoZVxuICAgbGFuZ3VhZ2UgZGVmaW5pdGlvbiwgc2VjdGlvbiAqSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzKi5cblxuICAgVXNlICJrZXl3b3JkLmlza2V5d29yZCgpIiB0byB0ZXN0IGZvciByZXNlcnZlZCBpZGVudGlmaWVycyBzdWNoIGFzXG4gICAiZGVmIiBhbmQgImNsYXNzIi5cblxuc3RyLmlzbG93ZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgbG93ZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXNudW1lcmljKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbnVtZXJpYyBjaGFyYWN0ZXJzLFxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gTnVtZXJpY1xuICAgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmVcbiAgIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksIGUuZy4gVSsyMTU1LCBWVUxHQVIgRlJBQ1RJT05cbiAgIE9ORSBGSUZUSC4gIEZvcm1hbGx5LCBudW1lcmljIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggdGhlXG4gICBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQsIE51bWVyaWNfVHlwZT1EZWNpbWFsIG9yXG4gICBOdW1lcmljX1R5cGU9TnVtZXJpYy5cblxuc3RyLmlzcHJpbnRhYmxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgcHJpbnRhYmxlIG9yIHRoZVxuICAgc3RyaW5nIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuICBOb25wcmludGFibGUgY2hhcmFjdGVycyBhcmVcbiAgIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UgYXNcbiAgICJPdGhlciIgb3IgIlNlcGFyYXRvciIsIGV4Y2VwdGluZyB0aGUgQVNDSUkgc3BhY2UgKDB4MjApIHdoaWNoIGlzXG4gICBjb25zaWRlcmVkIHByaW50YWJsZS4gIChOb3RlIHRoYXQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gdGhpc1xuICAgY29udGV4dCBhcmUgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBlc2NhcGVkIHdoZW4gInJlcHIoKSIgaXNcbiAgIGludm9rZWQgb24gYSBzdHJpbmcuICBJdCBoYXMgbm8gYmVhcmluZyBvbiB0aGUgaGFuZGxpbmcgb2Ygc3RyaW5nc1xuICAgd3JpdHRlbiB0byAic3lzLnN0ZG91dCIgb3IgInN5cy5zdGRlcnIiLilcblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIFdoaXRlc3BhY2VcbiAgIGNoYXJhY3RlcnMgIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiT3RoZXIiIG9yICJTZXBhcmF0b3IiIGFuZCB0aG9zZSB3aXRoIGJpZGlyZWN0aW9uYWxcbiAgIHByb3BlcnR5IGJlaW5nIG9uZSBvZiAiV1MiLCAiQiIsIG9yICJTIi5cblxuc3RyLmlzdGl0bGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdGl0bGVjYXNlZCBzdHJpbmcgYW5kIHRoZXJlIGlzIGF0XG4gICBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyBtYXkgb25seVxuICAgZm9sbG93IHVuY2FzZWQgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgb25seSBjYXNlZCBvbmVzLlxuICAgUmV0dXJuIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgdXBwZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgQSAiVHlwZUVycm9yIiB3aWxsIGJlIHJhaXNlZCBpZiB0aGVyZSBhcmVcbiAgIGFueSBub24tc3RyaW5nIHZhbHVlcyBpbiAqaXRlcmFibGUqLCBpbmNsdWRpbmcgImJ5dGVzIiBvYmplY3RzLlxuICAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZSBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yXG4gICBlcXVhbCB0byAibGVuKHMpIi5cblxuc3RyLmxvd2VyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cblxuICAgVGhlIGxvd2VyY2FzaW5nIGFsZ29yaXRobSB1c2VkIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG5zdHIubHN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGxlYWRpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciAiTm9uZSIsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLmxzdHJpcCgpXG4gICBcJ3NwYWNpb3VzICAgXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLmxzdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlLmNvbVwnXG5cbnN0YXRpYyBzdHIubWFrZXRyYW5zKHhbLCB5Wywgel1dKVxuXG4gICBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3JcbiAgICJzdHIudHJhbnNsYXRlKCkiLlxuXG4gICBJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZ1xuICAgVW5pY29kZSBvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgKHN0cmluZ3Mgb2YgbGVuZ3RoIDEpIHRvXG4gICBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIChvZiBhcmJpdHJhcnkgbGVuZ3Rocykgb3IgTm9uZS5cbiAgIENoYXJhY3RlciBrZXlzIHdpbGwgdGhlbiBiZSBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG5cbiAgIElmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsXG4gICBhbmQgaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkXG4gICB0byB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuICBJZiB0aGVyZSBpcyBhIHRoaXJkXG4gICBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0b1xuICAgTm9uZSBpbiB0aGUgcmVzdWx0LlxuXG5zdHIucGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGl0c2VsZiwgZm9sbG93ZWQgYnlcbiAgIHR3byBlbXB0eSBzdHJpbmdzLlxuXG5zdHIucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqb2xkKlxuICAgcmVwbGFjZWQgYnkgKm5ldyouICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyBnaXZlbiwgb25seVxuICAgdGhlIGZpcnN0ICpjb3VudCogb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLlxuXG5zdHIucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCB3aXRoaW4gInNbc3RhcnQ6ZW5kXSIuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiAiLTEiIG9uIGZhaWx1cmUuXG5cbnN0ci5yaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSAicmZpbmQoKSIgYnV0IHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiB0aGUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBub3QgZm91bmQuXG5cbnN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3JcbiAgIGVxdWFsIHRvICJsZW4ocykiLlxuXG5zdHIucnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0d28gZW1wdHkgc3RyaW5ncywgZm9sbG93ZWQgYnlcbiAgIHRoZSBzdHJpbmcgaXRzZWxmLlxuXG5zdHIucnNwbGl0KHNlcD1Ob25lLCBtYXhzcGxpdD0tMSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCogc3BsaXRzXG4gICBhcmUgZG9uZSwgdGhlICpyaWdodG1vc3QqIG9uZXMuICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yXG4gICAiTm9uZSIsIGFueSB3aGl0ZXNwYWNlIHN0cmluZyBpcyBhIHNlcGFyYXRvci4gIEV4Y2VwdCBmb3Igc3BsaXR0aW5nXG4gICBmcm9tIHRoZSByaWdodCwgInJzcGxpdCgpIiBiZWhhdmVzIGxpa2UgInNwbGl0KCkiIHdoaWNoIGlzXG4gICBkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93LlxuXG5zdHIucnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRyYWlsaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHN1ZmZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5yc3RyaXAoKVxuICAgXCcgICBzcGFjaW91c1wnXG4gICA+Pj4gXCdtaXNzaXNzaXBwaVwnLnJzdHJpcChcJ2lwelwnKVxuICAgXCdtaXNzaXNzXCdcblxuc3RyLnNwbGl0KHNlcD1Ob25lLCBtYXhzcGxpdD0tMSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiAgSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqXG4gICBzcGxpdHMgYXJlIGRvbmUgKHRodXMsIHRoZSBsaXN0IHdpbGwgaGF2ZSBhdCBtb3N0ICJtYXhzcGxpdCsxIlxuICAgZWxlbWVudHMpLiAgSWYgKm1heHNwbGl0KiBpcyBub3Qgc3BlY2lmaWVkIG9yICItMSIsIHRoZW4gdGhlcmUgaXNcbiAgIG5vIGxpbWl0IG9uIHRoZSBudW1iZXIgb2Ygc3BsaXRzIChhbGwgcG9zc2libGUgc3BsaXRzIGFyZSBtYWRlKS5cblxuICAgSWYgKnNlcCogaXMgZ2l2ZW4sIGNvbnNlY3V0aXZlIGRlbGltaXRlcnMgYXJlIG5vdCBncm91cGVkIHRvZ2V0aGVyXG4gICBhbmQgYXJlIGRlZW1lZCB0byBkZWxpbWl0IGVtcHR5IHN0cmluZ3MgKGZvciBleGFtcGxlLFxuICAgIlwnMSwsMlwnLnNwbGl0KFwnLFwnKSIgcmV0dXJucyAiW1wnMVwnLCBcJ1wnLCBcJzJcJ10iKS4gIFRoZSAqc2VwKiBhcmd1bWVudFxuICAgbWF5IGNvbnNpc3Qgb2YgbXVsdGlwbGUgY2hhcmFjdGVycyAoZm9yIGV4YW1wbGUsXG4gICAiXCcxPD4yPD4zXCcuc3BsaXQoXCc8PlwnKSIgcmV0dXJucyAiW1wnMVwnLCBcJzJcJywgXCczXCddIikuIFNwbGl0dGluZyBhblxuICAgZW1wdHkgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgc2VwYXJhdG9yIHJldHVybnMgIltcJ1wnXSIuXG5cbiAgIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgIk5vbmUiLCBhIGRpZmZlcmVudCBzcGxpdHRpbmdcbiAgIGFsZ29yaXRobSBpcyBhcHBsaWVkOiBydW5zIG9mIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgYXJlIHJlZ2FyZGVkXG4gICBhcyBhIHNpbmdsZSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29udGFpbiBubyBlbXB0eSBzdHJpbmdzXG4gICBhdCB0aGUgc3RhcnQgb3IgZW5kIGlmIHRoZSBzdHJpbmcgaGFzIGxlYWRpbmcgb3IgdHJhaWxpbmdcbiAgIHdoaXRlc3BhY2UuICBDb25zZXF1ZW50bHksIHNwbGl0dGluZyBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmdcbiAgIGNvbnNpc3Rpbmcgb2YganVzdCB3aGl0ZXNwYWNlIHdpdGggYSAiTm9uZSIgc2VwYXJhdG9yIHJldHVybnMgIltdIi5cblxuICAgRm9yIGV4YW1wbGUsICJcJyAxICAyICAgMyAgXCcuc3BsaXQoKSIgcmV0dXJucyAiW1wnMVwnLCBcJzJcJywgXCczXCddIiwgYW5kXG4gICAiXCcgIDEgIDIgICAzICBcJy5zcGxpdChOb25lLCAxKSIgcmV0dXJucyAiW1wnMVwnLCBcJzIgICAzICBcJ10iLlxuXG5zdHIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSBsaW5lcyBpbiB0aGUgc3RyaW5nLCBicmVha2luZyBhdCBsaW5lXG4gICBib3VuZGFyaWVzLiBUaGlzIG1ldGhvZCB1c2VzIHRoZSAqdW5pdmVyc2FsIG5ld2xpbmVzKiBhcHByb2FjaCB0b1xuICAgc3BsaXR0aW5nIGxpbmVzLiBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdFxuICAgdW5sZXNzICprZWVwZW5kcyogaXMgZ2l2ZW4gYW5kIHRydWUuXG5cbiAgIEZvciBleGFtcGxlLCAiXCdhYiBjXFxuXFxuZGUgZmdcXHJrbFxcclxcblwnLnNwbGl0bGluZXMoKSIgcmV0dXJucyAiW1wnYWJcbiAgIGNcJywgXCdcJywgXCdkZSBmZ1wnLCBcJ2tsXCddIiwgd2hpbGUgdGhlIHNhbWUgY2FsbCB3aXRoXG4gICAic3BsaXRsaW5lcyhUcnVlKSIgcmV0dXJucyAiW1wnYWIgY1xcblwnLCBcJ1xcblwnLCBcJ2RlIGZnXFxyXCcsIFwna2xcXHJcXG5cJ10iLlxuXG4gICBVbmxpa2UgInNwbGl0KCkiIHdoZW4gYSBkZWxpbWl0ZXIgc3RyaW5nICpzZXAqIGlzIGdpdmVuLCB0aGlzXG4gICBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBsaXN0IGZvciB0aGUgZW1wdHkgc3RyaW5nLCBhbmQgYSB0ZXJtaW5hbFxuICAgbGluZSBicmVhayBkb2VzIG5vdCByZXN1bHQgaW4gYW4gZXh0cmEgbGluZS5cblxuc3RyLnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuICJUcnVlIiBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICpwcmVmaXgqLCBvdGhlcndpc2UgcmV0dXJuXG4gICAiRmFsc2UiLiAqcHJlZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHByZWZpeGVzIHRvIGxvb2sgZm9yLlxuICAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IHN0cmluZyBiZWdpbm5pbmcgYXQgdGhhdCBwb3NpdGlvbi5cbiAgIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIHN0cmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuXG5zdHIuc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG4gICBjaGFyYWN0ZXJzIHJlbW92ZWQuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlXG4gICBzZXQgb2YgY2hhcmFjdGVycyB0byBiZSByZW1vdmVkLiBJZiBvbWl0dGVkIG9yICJOb25lIiwgdGhlICpjaGFycypcbiAgIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzXG4gICBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmVcbiAgIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnN0cmlwKClcbiAgIFwnc3BhY2lvdXNcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcuc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZVwnXG5cbnN0ci5zd2FwY2FzZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIGNvbnZlcnRlZCB0b1xuICAgbG93ZXJjYXNlIGFuZCB2aWNlIHZlcnNhLiBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgdGhhdFxuICAgInMuc3dhcGNhc2UoKS5zd2FwY2FzZSgpID09IHMiLlxuXG5zdHIudGl0bGUoKVxuXG4gICBSZXR1cm4gYSB0aXRsZWNhc2VkIHZlcnNpb24gb2YgdGhlIHN0cmluZyB3aGVyZSB3b3JkcyBzdGFydCB3aXRoIGFuXG4gICB1cHBlcmNhc2UgY2hhcmFjdGVyIGFuZCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIGxvd2VyY2FzZS5cblxuICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYVxuICAgd29yZCBhcyBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluXG4gICBtYW55IGNvbnRleHRzIGJ1dCBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmRcbiAgIHBvc3Nlc3NpdmVzIGZvcm0gd29yZCBib3VuZGFyaWVzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNpcmVkXG4gICByZXN1bHQ6XG5cbiAgICAgID4+PiAidGhleVwncmUgYmlsbFwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpXG4gICAgICAiVGhleVwnUmUgQmlsbFwnUyBGcmllbmRzIEZyb20gVGhlIFVrIlxuXG4gICBBIHdvcmthcm91bmQgZm9yIGFwb3N0cm9waGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCB1c2luZyByZWd1bGFyXG4gICBleHByZXNzaW9uczpcblxuICAgICAgPj4+IGltcG9ydCByZVxuICAgICAgPj4+IGRlZiB0aXRsZWNhc2Uocyk6XG4gICAgICAuLi4gICAgIHJldHVybiByZS5zdWIociJbQS1aYS16XSsoXCdbQS1aYS16XSspPyIsXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswXS51cHBlcigpICtcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vLmdyb3VwKDApWzE6XS5sb3dlcigpLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIHMpXG4gICAgICAuLi5cbiAgICAgID4+PiB0aXRsZWNhc2UoInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcy4iKVxuICAgICAgIlRoZXlcJ3JlIEJpbGxcJ3MgRnJpZW5kcy4iXG5cbnN0ci50cmFuc2xhdGUobWFwKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSAqcyogd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZFxuICAgdGhyb3VnaCB0aGUgKm1hcCogd2hpY2ggbXVzdCBiZSBhIGRpY3Rpb25hcnkgb2YgVW5pY29kZSBvcmRpbmFsc1xuICAgKGludGVnZXJzKSB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yICJOb25lIi4gIFVubWFwcGVkXG4gICBjaGFyYWN0ZXJzIGFyZSBsZWZ0IHVudG91Y2hlZC4gQ2hhcmFjdGVycyBtYXBwZWQgdG8gIk5vbmUiIGFyZVxuICAgZGVsZXRlZC5cblxuICAgWW91IGNhbiB1c2UgInN0ci5tYWtldHJhbnMoKSIgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gbWFwIGZyb21cbiAgIGNoYXJhY3Rlci10by1jaGFyYWN0ZXIgbWFwcGluZ3MgaW4gZGlmZmVyZW50IGZvcm1hdHMuXG5cbiAgIE5vdGU6IEFuIGV2ZW4gbW9yZSBmbGV4aWJsZSBhcHByb2FjaCBpcyB0byBjcmVhdGUgYSBjdXN0b21cbiAgICAgY2hhcmFjdGVyIG1hcHBpbmcgY29kZWMgdXNpbmcgdGhlICJjb2RlY3MiIG1vZHVsZSAoc2VlXG4gICAgICJlbmNvZGluZ3MuY3AxMjUxIiBmb3IgYW4gZXhhbXBsZSkuXG5cbnN0ci51cHBlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCB0aGUgY2FzZWQgY2hhcmFjdGVycyBbNF1cbiAgIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuICBOb3RlIHRoYXQgInN0ci51cHBlcigpLmlzdXBwZXIoKSIgbWlnaHQgYmVcbiAgICJGYWxzZSIgaWYgInMiIGNvbnRhaW5zIHVuY2FzZWQgY2hhcmFjdGVycyBvciBpZiB0aGUgVW5pY29kZVxuICAgY2F0ZWdvcnkgb2YgdGhlIHJlc3VsdGluZyBjaGFyYWN0ZXIocykgaXMgbm90ICJMdSIgKExldHRlcixcbiAgIHVwcGVyY2FzZSksIGJ1dCBlLmcuICJMdCIgKExldHRlciwgdGl0bGVjYXNlKS5cblxuICAgVGhlIHVwcGVyY2FzaW5nIGFsZ29yaXRobSB1c2VkIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG5zdHIuemZpbGwod2lkdGgpXG5cbiAgIFJldHVybiB0aGUgbnVtZXJpYyBzdHJpbmcgbGVmdCBmaWxsZWQgd2l0aCB6ZXJvcyBpbiBhIHN0cmluZyBvZlxuICAgbGVuZ3RoICp3aWR0aCouICBBIHNpZ24gcHJlZml4IGlzIGhhbmRsZWQgY29ycmVjdGx5LiAgVGhlIG9yaWdpbmFsXG4gICBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gImxlbihzKSIuXG4nLAorICdzcGVjaWFsbmFtZXMnOiAnXG5TcGVjaWFsIG1ldGhvZCBuYW1lc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBjYW4gaW1wbGVtZW50IGNlcnRhaW4gb3BlcmF0aW9ucyB0aGF0IGFyZSBpbnZva2VkIGJ5IHNwZWNpYWxcbnN5bnRheCAoc3VjaCBhcyBhcml0aG1ldGljIG9wZXJhdGlvbnMgb3Igc3Vic2NyaXB0aW5nIGFuZCBzbGljaW5nKSBieVxuZGVmaW5pbmcgbWV0aG9kcyB3aXRoIHNwZWNpYWwgbmFtZXMuIFRoaXMgaXMgUHl0aG9uXCdzIGFwcHJvYWNoIHRvXG4qb3BlcmF0b3Igb3ZlcmxvYWRpbmcqLCBhbGxvd2luZyBjbGFzc2VzIHRvIGRlZmluZSB0aGVpciBvd24gYmVoYXZpb3JcbndpdGggcmVzcGVjdCB0byBsYW5ndWFnZSBvcGVyYXRvcnMuICBGb3IgaW5zdGFuY2UsIGlmIGEgY2xhc3MgZGVmaW5lc1xuYSBtZXRob2QgbmFtZWQgIl9fZ2V0aXRlbV9fKCkiLCBhbmQgIngiIGlzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MsXG50aGVuICJ4W2ldIiBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gInR5cGUoeCkuX19nZXRpdGVtX18oeCwgaSkiLlxuRXhjZXB0IHdoZXJlIG1lbnRpb25lZCwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBhbiBvcGVyYXRpb24gcmFpc2UgYW5cbmV4Y2VwdGlvbiB3aGVuIG5vIGFwcHJvcHJpYXRlIG1ldGhvZCBpcyBkZWZpbmVkICh0eXBpY2FsbHlcbiJBdHRyaWJ1dGVFcnJvciIgb3IgIlR5cGVFcnJvciIpLlxuXG5XaGVuIGltcGxlbWVudGluZyBhIGNsYXNzIHRoYXQgZW11bGF0ZXMgYW55IGJ1aWx0LWluIHR5cGUsIGl0IGlzXG5pbXBvcnRhbnQgdGhhdCB0aGUgZW11bGF0aW9uIG9ubHkgYmUgaW1wbGVtZW50ZWQgdG8gdGhlIGRlZ3JlZSB0aGF0IGl0XG5tYWtlcyBzZW5zZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtb2RlbGxlZC4gIEZvciBleGFtcGxlLCBzb21lXG5zZXF1ZW5jZXMgbWF5IHdvcmsgd2VsbCB3aXRoIHJldHJpZXZhbCBvZiBpbmRpdmlkdWFsIGVsZW1lbnRzLCBidXRcbmV4dHJhY3RpbmcgYSBzbGljZSBtYXkgbm90IG1ha2Ugc2Vuc2UuICAoT25lIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGVcbiJOb2RlTGlzdCIgaW50ZXJmYWNlIGluIHRoZSBXM0NcJ3MgRG9jdW1lbnQgT2JqZWN0IE1vZGVsLilcblxuXG5CYXNpYyBjdXN0b21pemF0aW9uXG49PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICAiX19uZXdfXygpIiBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiAiX19uZXdfXygpIiBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHkgYW5cbiAgIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgIl9fbmV3X18oKSIgbWV0aG9kIHVzaW5nXG4gICAic3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSkiIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiAiX19uZXdfXygpIiByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgICJfX2luaXRfXyhzZWxmWywgLi4uXSkiLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byAiX19uZXdfXygpIi5cblxuICAgSWYgIl9fbmV3X18oKSIgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgIl9fbmV3X18oKSIgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgIl9faW5pdF9fKCkiIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCwgaWZcbiAgIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZiB0aGVcbiAgIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgIkJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pIi4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50IG9uXG4gICBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICAiVHlwZUVycm9yIiB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSAiX19kZWxfXygpIiBtZXRob2QsIHRoZVxuICAgZGVyaXZlZCBjbGFzc1wncyAiX19kZWxfXygpIiBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXRcbiAgIHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2UuXG4gICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3IgdGhlXG4gICAiX19kZWxfXygpIiBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiAiZGVsIHgiIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgInguX19kZWxfXygpIiAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yICJ4IiBieSBvbmUsIGFuZCB0aGUgbGF0dGVyIGlzXG4gICAgIG9ubHkgY2FsbGVkIHdoZW4gIngiXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lIGNvbW1vblxuICAgICBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhbiBvYmplY3QgZnJvbVxuICAgICBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlbiBvYmplY3RzIChlLmcuLFxuICAgICBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBwYXJlbnQgYW5kXG4gICAgIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgb2ZcbiAgICAgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgICJzeXMuZXhjX2luZm8oKVsyXSIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3IgYSByZWZlcmVuY2VcbiAgICAgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW4gdW5oYW5kbGVkXG4gICAgIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmxhc3RfdHJhY2ViYWNrIiBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgIk5vbmUiIGluXG4gICAgICJzeXMubGFzdF90cmFjZWJhY2siLiBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZVxuICAgICBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCB3aGVuIHRoZSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0b3IgaXNcbiAgICAgZW5hYmxlZCAoaXRcJ3Mgb24gYnkgZGVmYXVsdCkuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgImdjIiBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYy5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2hcbiAgICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZ1xuICAgICB0aGVpciBleGVjdXRpb24gYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0b1xuICAgICAic3lzLnN0ZGVyciIgaW5zdGVhZC4gQWxzbywgd2hlbiAiX19kZWxfXygpIiBpcyBpbnZva2VkIGluXG4gICAgIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZVxuICAgICBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlciBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlICJfX2RlbF9fKCkiXG4gICAgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZ1xuICAgICB0b3JuIGRvd24gKGUuZy4gdGhlIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpc1xuICAgICByZWFzb24sICJfX2RlbF9fKCkiIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZFxuICAgICB0byBtYWludGFpbiBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSxcbiAgICAgUHl0aG9uIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgIl9fZGVsX18oKSIgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgInJlcHIoKSIgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgIm9mZmljaWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpc1xuICAgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZCB0b1xuICAgcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgICI8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+IiBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgIl9fcmVwcl9fKCkiIGJ1dFxuICAgbm90ICJfX3N0cl9fKCkiLCB0aGVuICJfX3JlcHJfXygpIiBpcyBhbHNvIHVzZWQgd2hlbiBhbiAiaW5mb3JtYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXMgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJzdHIob2JqZWN0KSIgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImZvcm1hdCgpIiBhbmRcbiAgICJwcmludCgpIiB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGUgc3RyaW5nXG4gICByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSAqc3RyaW5nKlxuICAgb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gIm9iamVjdC5fX3JlcHJfXygpIiBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0ICJfX3N0cl9fKCkiIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSAib2JqZWN0IlxuICAgY2FsbHMgIm9iamVjdC5fX3JlcHJfXygpIi5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgImJ5dGVzKCkiIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSAiYnl0ZXMiIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgImZvcm1hdCgpIiBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICAic3RyLmZvcm1hdCgpIiBtZXRob2Qgb2YgY2xhc3MgInN0ciIpIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgYVxuICAgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgdXAgdG9cbiAgIHRoZSB0eXBlIGltcGxlbWVudGluZyAiX19mb3JtYXRfXygpIiwgaG93ZXZlciBtb3N0IGNsYXNzZXMgd2lsbFxuICAgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3IgdXNlIGFcbiAgIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogIng8eSIgY2FsbHMgInguX19sdF9fKHkpIiwgIng8PXkiIGNhbGxzICJ4Ll9fbGVfXyh5KSIsXG4gICAieD09eSIgY2FsbHMgInguX19lcV9fKHkpIiwgInghPXkiIGNhbGxzICJ4Ll9fbmVfXyh5KSIsICJ4PnkiIGNhbGxzXG4gICAieC5fX2d0X18oeSkiLCBhbmQgIng+PXkiIGNhbGxzICJ4Ll9fZ2VfXyh5KSIuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b24gIk5vdEltcGxlbWVudGVkIlxuICAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGEgZ2l2ZW4gcGFpciBvZlxuICAgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCAiRmFsc2UiIGFuZCAiVHJ1ZSIgYXJlIHJldHVybmVkIGZvciBhXG4gICBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuIHJldHVybiBhbnkgdmFsdWUsXG4gICBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGEgQm9vbGVhbiBjb250ZXh0IChlLmcuLFxuICAgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiAiaWYiIHN0YXRlbWVudCksIFB5dGhvbiB3aWxsIGNhbGwgImJvb2woKSJcbiAgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdCBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiAieD09eSIgZG9lcyBub3QgaW1wbHkgdGhhdCAieCE9eSIgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyAiX19lcV9fKCkiLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICAiX19uZV9fKCkiIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZSB0aGVcbiAgIHBhcmFncmFwaCBvbiAiX19oYXNoX18oKSIgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uIGNyZWF0aW5nXG4gICAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZFxuICAgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsICJfX2x0X18oKSIgYW5kICJfX2d0X18oKSIgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sICJfX2xlX18oKSIgYW5kICJfX2dlX18oKSIgYXJlIGVhY2ggb3RoZXJcJ3MgcmVmbGVjdGlvbixcbiAgIGFuZCAiX19lcV9fKCkiIGFuZCAiX19uZV9fKCkiIGFyZSB0aGVpciBvd24gcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSAiZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKCkiLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uICJoYXNoKCkiIGFuZCBmb3Igb3BlcmF0aW9ucyBvbiBtZW1iZXJzXG4gICBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nICJzZXQiLCAiZnJvemVuc2V0IiwgYW5kICJkaWN0Ii5cbiAgICJfX2hhc2hfXygpIiBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seSByZXF1aXJlZCBwcm9wZXJ0eVxuICAgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZSBoYXNoIHZhbHVlOyBpdCBpc1xuICAgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZyBleGNsdXNpdmUgb3IpIHRoZSBoYXNoXG4gICB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdCBhbHNvIHBsYXkgYSBwYXJ0IGluXG4gICBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6ICJoYXNoKCkiIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3NcbiAgICAgY3VzdG9tICJfX2hhc2hfXygpIiBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSAiUHlfc3NpemVfdCIuICBUaGlzXG4gICAgIGlzIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0XG4gICAgIGJ1aWxkcy4gSWYgYW4gb2JqZWN0XCdzICAgIl9faGFzaF9fKCkiIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkc1xuICAgICBvZiBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGxcbiAgICAgc3VwcG9ydGVkIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCAicHl0aG9uIC1jXG4gICAgICJpbXBvcnQgc3lzOyBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSIiXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuICJfX2VxX18oKSIgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhICJfX2hhc2hfXygpIiBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzICJfX2VxX18oKSJcbiAgIGJ1dCBub3QgIl9faGFzaF9fKCkiLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBhcyBpdGVtcyBpblxuICAgaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXMgbXV0YWJsZSBvYmplY3RzIGFuZFxuICAgaW1wbGVtZW50cyBhbiAiX19lcV9fKCkiIG1ldGhvZCwgaXQgc2hvdWxkIG5vdCBpbXBsZW1lbnRcbiAgICJfX2hhc2hfXygpIiwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlIGNvbGxlY3Rpb25zXG4gICByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGUgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSAiX19lcV9fKCkiIGFuZCAiX19oYXNoX18oKSIgbWV0aG9kcyBieVxuICAgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgInguX19oYXNoX18oKSIgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0ICJ4ID09IHkiIGltcGxpZXMgYm90aCB0aGF0ICJ4IGlzIHkiIGFuZCAiaGFzaCh4KSA9PSBoYXNoKHkpIi5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIGFuZCBkb2VzIG5vdCBkZWZpbmUgIl9faGFzaF9fKCkiXG4gICB3aWxsIGhhdmUgaXRzICJfX2hhc2hfXygpIiBpbXBsaWNpdGx5IHNldCB0byAiTm9uZSIuICBXaGVuIHRoZVxuICAgIl9faGFzaF9fKCkiIG1ldGhvZCBvZiBhIGNsYXNzIGlzICJOb25lIiwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzc1xuICAgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSAiVHlwZUVycm9yIiB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0b1xuICAgcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUiKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mICJfX2hhc2hfXygpIiBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGUgaW50ZXJwcmV0ZXJcbiAgIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyAiX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfXyIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSAiX19lcV9fKCkiIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSAiX19oYXNoX18gPSBOb25lIiBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duICJfX2hhc2hfXygpIiB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhICJUeXBlRXJyb3IiIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIGhhc2hhYmxlIGJ5IGFuICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIiBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgIl9faGFzaF9fKCkiIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZFxuICAgICBkYXRldGltZSBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvICJQWVRIT05IQVNIU0VFRCIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgICJib29sKCkiOyBzaG91bGQgcmV0dXJuICJGYWxzZSIgb3IgIlRydWUiLiAgV2hlbiB0aGlzIG1ldGhvZCBpcyBub3RcbiAgIGRlZmluZWQsICJfX2xlbl9fKCkiIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgIl9fbGVuX18oKSIgbm9yICJfX2Jvb2xfXygpIiwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG5cblxuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mICJ4Lm5hbWUiKSBmb3JcbmNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgInNlbGYiKS4gICJuYW1lIiBpcyB0aGUgYXR0cmlidXRlIG5hbWUuIFRoaXNcbiAgIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICAiX19nZXRhdHRyX18oKSIgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiAiX19nZXRhdHRyX18oKSIgYW5kICJfX3NldGF0dHJfXygpIi4pIFRoaXMgaXMgZG9uZSBib3RoIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSAiX19nZXRhdHRyX18oKSIgd291bGQgaGF2ZVxuICAgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGUgdGhhdCBhdFxuICAgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnkgbm90XG4gICBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICAiX19nZXRhdHRyaWJ1dGVfXygpIiBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBvdmVyIGF0dHJpYnV0ZSBhY2Nlc3MuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXMgIl9fZ2V0YXR0cl9fKCkiLFxuICAgdGhlIGxhdHRlciB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzICJfX2dldGF0dHJpYnV0ZV9fKCkiIGVpdGhlclxuICAgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW4gIkF0dHJpYnV0ZUVycm9yIi4gVGhpcyBtZXRob2RcbiAgIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi4gSW4gb3JkZXIgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluXG4gICB0aGlzIG1ldGhvZCwgaXRzIGltcGxlbWVudGF0aW9uIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzc1xuICAgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSB0byBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvclxuICAgZXhhbXBsZSwgIm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpIi5cblxuICAgTm90ZTogVGhpcyBtZXRob2QgbWF5IHN0aWxsIGJlIGJ5cGFzc2VkIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsXG4gICAgIG1ldGhvZHMgYXMgdGhlIHJlc3VsdCBvZiBpbXBsaWNpdCBpbnZvY2F0aW9uIHZpYSBsYW5ndWFnZSBzeW50YXhcbiAgICAgb3IgYnVpbHQtaW4gZnVuY3Rpb25zLiBTZWUgKlNwZWNpYWwgbWV0aG9kIGxvb2t1cCouXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICpuYW1lKiBpcyB0aGUgYXR0cmlidXRlIG5hbWUsICp2YWx1ZSogaXMgdGhlXG4gICB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBpdC5cblxuICAgSWYgIl9fc2V0YXR0cl9fKCkiIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgICJvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpIi5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgIl9fc2V0YXR0cl9fKCkiIGJ1dCBmb3IgYXR0cmlidXRlIGRlbGV0aW9uIGluc3RlYWQgb2ZcbiAgIGFzc2lnbm1lbnQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmICJkZWwgb2JqLm5hbWUiIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiAiZGlyKCkiIGlzIGNhbGxlZCBvbiB0aGUgb2JqZWN0LiBBIHNlcXVlbmNlIG11c3QgYmVcbiAgIHJldHVybmVkLiAiZGlyKCkiIGNvbnZlcnRzIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSB0byBhIGxpc3QgYW5kXG4gICBzb3J0cyBpdC5cblxuXG5JbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB3aGVuIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuY29udGFpbmluZyB0aGUgbWV0aG9kIChhIHNvLWNhbGxlZCAqZGVzY3JpcHRvciogY2xhc3MpIGFwcGVhcnMgaW4gYW5cbipvd25lciogY2xhc3MgKHRoZSBkZXNjcmlwdG9yIG11c3QgYmUgaW4gZWl0aGVyIHRoZSBvd25lclwncyBjbGFzc1xuZGljdGlvbmFyeSBvciBpbiB0aGUgY2xhc3MgZGljdGlvbmFyeSBmb3Igb25lIG9mIGl0cyBwYXJlbnRzKS4gIEluIHRoZVxuZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzXG50aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJyAiX19kaWN0X18iLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgIk5vbmUiIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiAiQXR0cmlidXRlRXJyb3IiXG4gICBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblxuSW52b2tpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkluIGdlbmVyYWwsIGEgZGVzY3JpcHRvciBpcyBhbiBvYmplY3QgYXR0cmlidXRlIHdpdGggImJpbmRpbmdcbmJlaGF2aW9yIiwgb25lIHdob3NlIGF0dHJpYnV0ZSBhY2Nlc3MgaGFzIGJlZW4gb3ZlcnJpZGRlbiBieSBtZXRob2RzXG5pbiB0aGUgZGVzY3JpcHRvciBwcm90b2NvbDogICJfX2dldF9fKCkiLCAiX19zZXRfXygpIiwgYW5kXG4iX19kZWxldGVfXygpIi4gSWYgYW55IG9mIHRob3NlIG1ldGhvZHMgYXJlIGRlZmluZWQgZm9yIGFuIG9iamVjdCwgaXRcbmlzIHNhaWQgdG8gYmUgYSBkZXNjcmlwdG9yLlxuXG5UaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYXR0cmlidXRlIGFjY2VzcyBpcyB0byBnZXQsIHNldCwgb3IgZGVsZXRlXG50aGUgYXR0cmlidXRlIGZyb20gYW4gb2JqZWN0XCdzIGRpY3Rpb25hcnkuIEZvciBpbnN0YW5jZSwgImEueCIgaGFzIGFcbmxvb2t1cCBjaGFpbiBzdGFydGluZyB3aXRoICJhLl9fZGljdF9fW1wneFwnXSIsIHRoZW5cbiJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXSIsIGFuZCBjb250aW51aW5nIHRocm91Z2ggdGhlIGJhc2UgY2xhc3NlcyBvZlxuInR5cGUoYSkiIGV4Y2x1ZGluZyBtZXRhY2xhc3Nlcy5cblxuSG93ZXZlciwgaWYgdGhlIGxvb2tlZC11cCB2YWx1ZSBpcyBhbiBvYmplY3QgZGVmaW5pbmcgb25lIG9mIHRoZVxuZGVzY3JpcHRvciBtZXRob2RzLCB0aGVuIFB5dGhvbiBtYXkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kXG5pbnZva2UgdGhlIGRlc2NyaXB0b3IgbWV0aG9kIGluc3RlYWQuICBXaGVyZSB0aGlzIG9jY3VycyBpbiB0aGVcbnByZWNlZGVuY2UgY2hhaW4gZGVwZW5kcyBvbiB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgd2VyZSBkZWZpbmVkIGFuZFxuaG93IHRoZXkgd2VyZSBjYWxsZWQuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgImEueCIuIEhvd1xudGhlIGFyZ3VtZW50cyBhcmUgYXNzZW1ibGVkIGRlcGVuZHMgb24gImEiOlxuXG5EaXJlY3QgQ2FsbFxuICAgVGhlIHNpbXBsZXN0IGFuZCBsZWFzdCBjb21tb24gY2FsbCBpcyB3aGVuIHVzZXIgY29kZSBkaXJlY3RseVxuICAgaW52b2tlcyBhIGRlc2NyaXB0b3IgbWV0aG9kOiAgICAieC5fX2dldF9fKGEpIi5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhbiBvYmplY3QgaW5zdGFuY2UsICJhLngiIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlXG4gICBjYWxsOiAidHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKSIuXG5cbkNsYXNzIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYSBjbGFzcywgIkEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgY2FsbDpcbiAgICJBLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKE5vbmUsIEEpIi5cblxuU3VwZXIgQmluZGluZ1xuICAgSWYgImEiIGlzIGFuIGluc3RhbmNlIG9mICJzdXBlciIsIHRoZW4gdGhlIGJpbmRpbmcgInN1cGVyKEIsXG4gICBvYmopLm0oKSIgc2VhcmNoZXMgIm9iai5fX2NsYXNzX18uX19tcm9fXyIgZm9yIHRoZSBiYXNlIGNsYXNzICJBIlxuICAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nICJCIiBhbmQgdGhlbiBpbnZva2VzIHRoZSBkZXNjcmlwdG9yIHdpdGggdGhlXG4gICBjYWxsOiAiQS5fX2RpY3RfX1tcJ21cJ10uX19nZXRfXyhvYmosIG9iai5fX2NsYXNzX18pIi5cblxuRm9yIGluc3RhbmNlIGJpbmRpbmdzLCB0aGUgcHJlY2VkZW5jZSBvZiBkZXNjcmlwdG9yIGludm9jYXRpb24gZGVwZW5kc1xub24gdGhlIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyBhcmUgZGVmaW5lZC4gIEEgZGVzY3JpcHRvciBjYW4gZGVmaW5lXG5hbnkgY29tYmluYXRpb24gb2YgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiIGFuZCAiX19kZWxldGVfXygpIi4gIElmIGl0XG5kb2VzIG5vdCBkZWZpbmUgIl9fZ2V0X18oKSIsIHRoZW4gYWNjZXNzaW5nIHRoZSBhdHRyaWJ1dGUgd2lsbCByZXR1cm5cbnRoZSBkZXNjcmlwdG9yIG9iamVjdCBpdHNlbGYgdW5sZXNzIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlIG9iamVjdFwnc1xuaW5zdGFuY2UgZGljdGlvbmFyeS4gIElmIHRoZSBkZXNjcmlwdG9yIGRlZmluZXMgIl9fc2V0X18oKSIgYW5kL29yXG4iX19kZWxldGVfXygpIiwgaXQgaXMgYSBkYXRhIGRlc2NyaXB0b3I7IGlmIGl0IGRlZmluZXMgbmVpdGhlciwgaXQgaXNcbmEgbm9uLWRhdGEgZGVzY3JpcHRvci4gIE5vcm1hbGx5LCBkYXRhIGRlc2NyaXB0b3JzIGRlZmluZSBib3RoXG4iX19nZXRfXygpIiBhbmQgIl9fc2V0X18oKSIsIHdoaWxlIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGhhdmUganVzdCB0aGVcbiJfX2dldF9fKCkiIG1ldGhvZC4gIERhdGEgZGVzY3JpcHRvcnMgd2l0aCAiX19zZXRfXygpIiBhbmQgIl9fZ2V0X18oKSJcbmRlZmluZWQgYWx3YXlzIG92ZXJyaWRlIGEgcmVkZWZpbml0aW9uIGluIGFuIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJblxuY29udHJhc3QsIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGluc3RhbmNlcy5cblxuUHl0aG9uIG1ldGhvZHMgKGluY2x1ZGluZyAic3RhdGljbWV0aG9kKCkiIGFuZCAiY2xhc3NtZXRob2QoKSIpIGFyZVxuaW1wbGVtZW50ZWQgYXMgbm9uLWRhdGEgZGVzY3JpcHRvcnMuICBBY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhblxucmVkZWZpbmUgYW5kIG92ZXJyaWRlIG1ldGhvZHMuICBUaGlzIGFsbG93cyBpbmRpdmlkdWFsIGluc3RhbmNlcyB0b1xuYWNxdWlyZSBiZWhhdmlvcnMgdGhhdCBkaWZmZXIgZnJvbSBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2xhc3MuXG5cblRoZSAicHJvcGVydHkoKSIgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBkYXRhIGRlc2NyaXB0b3IuXG5BY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhbm5vdCBvdmVycmlkZSB0aGUgYmVoYXZpb3Igb2YgYSBwcm9wZXJ0eS5cblxuXG5fX3Nsb3RzX19cbi0tLS0tLS0tLVxuXG5CeSBkZWZhdWx0LCBpbnN0YW5jZXMgb2YgY2xhc3NlcyBoYXZlIGEgZGljdGlvbmFyeSBmb3IgYXR0cmlidXRlXG5zdG9yYWdlLiAgVGhpcyB3YXN0ZXMgc3BhY2UgZm9yIG9iamVjdHMgaGF2aW5nIHZlcnkgZmV3IGluc3RhbmNlXG52YXJpYWJsZXMuICBUaGUgc3BhY2UgY29uc3VtcHRpb24gY2FuIGJlY29tZSBhY3V0ZSB3aGVuIGNyZWF0aW5nIGxhcmdlXG5udW1iZXJzIG9mIGluc3RhbmNlcy5cblxuVGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgKl9fc2xvdHNfXyogaW4gYSBjbGFzc1xuZGVmaW5pdGlvbi4gVGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIHRha2VzIGEgc2VxdWVuY2Ugb2YgaW5zdGFuY2VcbnZhcmlhYmxlcyBhbmQgcmVzZXJ2ZXMganVzdCBlbm91Z2ggc3BhY2UgaW4gZWFjaCBpbnN0YW5jZSB0byBob2xkIGFcbnZhbHVlIGZvciBlYWNoIHZhcmlhYmxlLiAgU3BhY2UgaXMgc2F2ZWQgYmVjYXVzZSAqX19kaWN0X18qIGlzIG5vdFxuY3JlYXRlZCBmb3IgZWFjaCBpbnN0YW5jZS5cblxub2JqZWN0Ll9fc2xvdHNfX1xuXG4gICBUaGlzIGNsYXNzIHZhcmlhYmxlIGNhbiBiZSBhc3NpZ25lZCBhIHN0cmluZywgaXRlcmFibGUsIG9yIHNlcXVlbmNlXG4gICBvZiBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICBJZiBkZWZpbmVkIGluIGFcbiAgIGNsYXNzLCAqX19zbG90c19fKiByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmRcbiAgIHByZXZlbnRzIHRoZSBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmQgKl9fd2Vha3JlZl9fKiBmb3JcbiAgIGVhY2ggaW5zdGFuY2UuXG5cblxuTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXypcbn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyAiQXR0cmlidXRlRXJyb3IiLiBJZlxuICBkeW5hbWljIGFzc2lnbm1lbnQgb2YgbmV3IHZhcmlhYmxlcyBpcyBkZXNpcmVkLCB0aGVuIGFkZFxuICAiXCdfX2RpY3RfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXNcbiAgZGVmaW5pbmcgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0c1xuICBpbnN0YW5jZXMuIElmIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZFxuICAiXCdfX3dlYWtyZWZfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogKl9fc2xvdHNfXyogYXJlIGltcGxlbWVudGVkIGF0IHRoZSBjbGFzcyBsZXZlbCBieSBjcmVhdGluZ1xuICBkZXNjcmlwdG9ycyAoKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyopIGZvciBlYWNoIHZhcmlhYmxlIG5hbWUuICBBc1xuICBhIHJlc3VsdCwgY2xhc3MgYXR0cmlidXRlcyBjYW5ub3QgYmUgdXNlZCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yXG4gIGluc3RhbmNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICpfX3Nsb3RzX18qOyBvdGhlcndpc2UsIHRoZSBjbGFzc1xuICBhdHRyaWJ1dGUgd291bGQgb3ZlcndyaXRlIHRoZSBkZXNjcmlwdG9yIGFzc2lnbm1lbnQuXG5cbiogVGhlIGFjdGlvbiBvZiBhICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzXG4gIHdoZXJlIGl0IGlzIGRlZmluZWQuICBBcyBhIHJlc3VsdCwgc3ViY2xhc3NlcyB3aWxsIGhhdmUgYSAqX19kaWN0X18qXG4gIHVubGVzcyB0aGV5IGFsc28gZGVmaW5lICpfX3Nsb3RzX18qICh3aGljaCBtdXN0IG9ubHkgY29udGFpbiBuYW1lc1xuICBvZiBhbnkgKmFkZGl0aW9uYWwqIHNsb3RzKS5cblxuKiBJZiBhIGNsYXNzIGRlZmluZXMgYSBzbG90IGFsc28gZGVmaW5lZCBpbiBhIGJhc2UgY2xhc3MsIHRoZVxuICBpbnN0YW5jZSB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzIHNsb3QgaXMgaW5hY2Nlc3NpYmxlXG4gIChleGNlcHQgYnkgcmV0cmlldmluZyBpdHMgZGVzY3JpcHRvciBkaXJlY3RseSBmcm9tIHRoZSBiYXNlIGNsYXNzKS5cbiAgVGhpcyByZW5kZXJzIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtIHVuZGVmaW5lZC4gIEluIHRoZSBmdXR1cmUsIGFcbiAgY2hlY2sgbWF5IGJlIGFkZGVkIHRvIHByZXZlbnQgdGhpcy5cblxuKiBOb25lbXB0eSAqX19zbG90c19fKiBkb2VzIG5vdCB3b3JrIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbVxuICAidmFyaWFibGUtbGVuZ3RoIiBidWlsdC1pbiB0eXBlcyBzdWNoIGFzICJpbnQiLCAiYnl0ZXMiIGFuZCAidHVwbGUiLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3NcbiAgbWF5IGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuXG5cbkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBjbGFzc2VzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyAidHlwZSgpIi4gVGhlIGNsYXNzIGJvZHkgaXNcbmV4ZWN1dGVkIGluIGEgbmV3IG5hbWVzcGFjZSBhbmQgdGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgbG9jYWxseSB0byB0aGVcbnJlc3VsdCBvZiAidHlwZShuYW1lLCBiYXNlcywgbmFtZXNwYWNlKSIuXG5cblRoZSBjbGFzcyBjcmVhdGlvbiBwcm9jZXNzIGNhbiBiZSBjdXN0b21pc2VkIGJ5IHBhc3NpbmcgdGhlXG4ibWV0YWNsYXNzIiBrZXl3b3JkIGFyZ3VtZW50IGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGxpbmUsIG9yIGJ5XG5pbmhlcml0aW5nIGZyb20gYW4gZXhpc3RpbmcgY2xhc3MgdGhhdCBpbmNsdWRlZCBzdWNoIGFuIGFyZ3VtZW50LiBJblxudGhlIGZvbGxvd2luZyBleGFtcGxlLCBib3RoICJNeUNsYXNzIiBhbmQgIk15U3ViY2xhc3MiIGFyZSBpbnN0YW5jZXNcbm9mICJNZXRhIjpcblxuICAgY2xhc3MgTWV0YSh0eXBlKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15Q2xhc3MobWV0YWNsYXNzPU1ldGEpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlTdWJjbGFzcyhNeUNsYXNzKTpcbiAgICAgICBwYXNzXG5cbkFueSBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbmFyZSBwYXNzZWQgdGhyb3VnaCB0byBhbGwgbWV0YWNsYXNzIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGJlbG93LlxuXG5XaGVuIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBleGVjdXRlZCwgdGhlIGZvbGxvd2luZyBzdGVwcyBvY2N1cjpcblxuKiB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGlzIGRldGVybWluZWRcblxuKiB0aGUgY2xhc3MgbmFtZXNwYWNlIGlzIHByZXBhcmVkXG5cbiogdGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWRcblxuKiB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWRcblxuXG5EZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgZm9yIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBkZXRlcm1pbmVkIGFzXG5mb2xsb3dzOlxuXG4qIGlmIG5vIGJhc2VzIGFuZCBubyBleHBsaWNpdCBtZXRhY2xhc3MgYXJlIGdpdmVuLCB0aGVuICJ0eXBlKCkiIGlzXG4gIHVzZWRcblxuKiBpZiBhbiBleHBsaWNpdCBtZXRhY2xhc3MgaXMgZ2l2ZW4gYW5kIGl0IGlzICpub3QqIGFuIGluc3RhbmNlIG9mXG4gICJ0eXBlKCkiLCB0aGVuIGl0IGlzIHVzZWQgZGlyZWN0bHkgYXMgdGhlIG1ldGFjbGFzc1xuXG4qIGlmIGFuIGluc3RhbmNlIG9mICJ0eXBlKCkiIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBtZXRhY2xhc3MsIG9yXG4gIGJhc2VzIGFyZSBkZWZpbmVkLCB0aGVuIHRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHVzZWRcblxuVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZXhwbGljaXRseSBzcGVjaWZpZWRcbm1ldGFjbGFzcyAoaWYgYW55KSBhbmQgdGhlIG1ldGFjbGFzc2VzIChpLmUuICJ0eXBlKGNscykiKSBvZiBhbGxcbnNwZWNpZmllZCBiYXNlIGNsYXNzZXMuIFRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIG9uZSB3aGljaCBpcyBhXG5zdWJ0eXBlIG9mICphbGwqIG9mIHRoZXNlIGNhbmRpZGF0ZSBtZXRhY2xhc3Nlcy4gSWYgbm9uZSBvZiB0aGVcbmNhbmRpZGF0ZSBtZXRhY2xhc3NlcyBtZWV0cyB0aGF0IGNyaXRlcmlvbiwgdGhlbiB0aGUgY2xhc3MgZGVmaW5pdGlvblxud2lsbCBmYWlsIHdpdGggIlR5cGVFcnJvciIuXG5cblxuUHJlcGFyaW5nIHRoZSBjbGFzcyBuYW1lc3BhY2Vcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBoYXMgYmVlbiBpZGVudGlmaWVkLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIHByZXBhcmVkLiBJZiB0aGUgbWV0YWNsYXNzIGhhcyBhICJfX3ByZXBhcmVfXyIgYXR0cmlidXRlLFxuaXQgaXMgY2FsbGVkIGFzICJuYW1lc3BhY2UgPSBtZXRhY2xhc3MuX19wcmVwYXJlX18obmFtZSwgYmFzZXMsXG4qKmt3ZHMpIiAod2hlcmUgdGhlIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMsIGlmIGFueSwgY29tZSBmcm9tXG50aGUgY2xhc3MgZGVmaW5pdGlvbikuXG5cbklmIHRoZSBtZXRhY2xhc3MgaGFzIG5vICJfX3ByZXBhcmVfXyIgYXR0cmlidXRlLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIGluaXRpYWxpc2VkIGFzIGFuIGVtcHR5ICJkaWN0KCkiIGluc3RhbmNlLlxuXG5TZWUgYWxzbzogKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMwMDBcblxuICAgICBJbnRyb2R1Y2VkIHRoZSAiX19wcmVwYXJlX18iIG5hbWVzcGFjZSBob29rXG5cblxuRXhlY3V0aW5nIHRoZSBjbGFzcyBib2R5XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWQgKGFwcHJveGltYXRlbHkpIGFzICJleGVjKGJvZHksIGdsb2JhbHMoKSxcbm5hbWVzcGFjZSkiLiBUaGUga2V5IGRpZmZlcmVuY2UgZnJvbSBhIG5vcm1hbCBjYWxsIHRvICJleGVjKCkiIGlzIHRoYXRcbmxleGljYWwgc2NvcGluZyBhbGxvd3MgdGhlIGNsYXNzIGJvZHkgKGluY2x1ZGluZyBhbnkgbWV0aG9kcykgdG9cbnJlZmVyZW5jZSBuYW1lcyBmcm9tIHRoZSBjdXJyZW50IGFuZCBvdXRlciBzY29wZXMgd2hlbiB0aGUgY2xhc3NcbmRlZmluaXRpb24gb2NjdXJzIGluc2lkZSBhIGZ1bmN0aW9uLlxuXG5Ib3dldmVyLCBldmVuIHdoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gb2NjdXJzIGluc2lkZSB0aGUgZnVuY3Rpb24sXG5tZXRob2RzIGRlZmluZWQgaW5zaWRlIHRoZSBjbGFzcyBzdGlsbCBjYW5ub3Qgc2VlIG5hbWVzIGRlZmluZWQgYXQgdGhlXG5jbGFzcyBzY29wZS4gQ2xhc3MgdmFyaWFibGVzIG11c3QgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgZmlyc3RcbnBhcmFtZXRlciBvZiBpbnN0YW5jZSBvciBjbGFzcyBtZXRob2RzLCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGF0IGFsbFxuZnJvbSBzdGF0aWMgbWV0aG9kcy5cblxuXG5DcmVhdGluZyB0aGUgY2xhc3Mgb2JqZWN0XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGNsYXNzIG5hbWVzcGFjZSBoYXMgYmVlbiBwb3B1bGF0ZWQgYnkgZXhlY3V0aW5nIHRoZSBjbGFzc1xuYm9keSwgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgIm1ldGFjbGFzcyhuYW1lLCBiYXNlcyxcbm5hbWVzcGFjZSwgKiprd2RzKSIgKHRoZSBhZGRpdGlvbmFsIGtleXdvcmRzIHBhc3NlZCBoZXJlIGFyZSB0aGUgc2FtZVxuYXMgdGhvc2UgcGFzc2VkIHRvICJfX3ByZXBhcmVfXyIpLlxuXG5UaGlzIGNsYXNzIG9iamVjdCBpcyB0aGUgb25lIHRoYXQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IHRoZSB6ZXJvLVxuYXJndW1lbnQgZm9ybSBvZiAic3VwZXIoKSIuICJfX2NsYXNzX18iIGlzIGFuIGltcGxpY2l0IGNsb3N1cmVcbnJlZmVyZW5jZSBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBpZiBhbnkgbWV0aG9kcyBpbiBhIGNsYXNzIGJvZHkgcmVmZXJcbnRvIGVpdGhlciAiX19jbGFzc19fIiBvciAic3VwZXIiLiBUaGlzIGFsbG93cyB0aGUgemVybyBhcmd1bWVudCBmb3JtXG5vZiAic3VwZXIoKSIgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHRoZSBjbGFzcyBiZWluZyBkZWZpbmVkIGJhc2VkIG9uXG5sZXhpY2FsIHNjb3BpbmcsIHdoaWxlIHRoZSBjbGFzcyBvciBpbnN0YW5jZSB0aGF0IHdhcyB1c2VkIHRvIG1ha2UgdGhlXG5jdXJyZW50IGNhbGwgaXMgaWRlbnRpZmllZCBiYXNlZCBvbiB0aGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoZVxubWV0aG9kLlxuXG5BZnRlciB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQsIGl0IGlzIHBhc3NlZCB0byB0aGUgY2xhc3NcbmRlY29yYXRvcnMgaW5jbHVkZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gKGlmIGFueSkgYW5kIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGFzIHRoZSBkZWZpbmVkIGNsYXNzLlxuXG5TZWUgYWxzbzogKipQRVAgMzEzNSoqIC0gTmV3IHN1cGVyXG5cbiAgICAgRGVzY3JpYmVzIHRoZSBpbXBsaWNpdCAiX19jbGFzc19fIiBjbG9zdXJlIHJlZmVyZW5jZVxuXG5cbk1ldGFjbGFzcyBleGFtcGxlXG4tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgcG90ZW50aWFsIHVzZXMgZm9yIG1ldGFjbGFzc2VzIGFyZSBib3VuZGxlc3MuIFNvbWUgaWRlYXMgdGhhdCBoYXZlXG5iZWVuIGV4cGxvcmVkIGluY2x1ZGUgbG9nZ2luZywgaW50ZXJmYWNlIGNoZWNraW5nLCBhdXRvbWF0aWNcbmRlbGVnYXRpb24sIGF1dG9tYXRpYyBwcm9wZXJ0eSBjcmVhdGlvbiwgcHJveGllcywgZnJhbWV3b3JrcywgYW5kXG5hdXRvbWF0aWMgcmVzb3VyY2UgbG9ja2luZy9zeW5jaHJvbml6YXRpb24uXG5cbkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIG1ldGFjbGFzcyB0aGF0IHVzZXMgYW5cbiJjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCIgdG8gcmVtZW1iZXIgdGhlIG9yZGVyIHRoYXQgY2xhc3MgbWVtYmVyc1xud2VyZSBkZWZpbmVkOlxuXG4gICBjbGFzcyBPcmRlcmVkQ2xhc3ModHlwZSk6XG5cbiAgICAgICAgQGNsYXNzbWV0aG9kXG4gICAgICAgIGRlZiBfX3ByZXBhcmVfXyhtZXRhY2xzLCBuYW1lLCBiYXNlcywgKiprd2RzKTpcbiAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KClcblxuICAgICAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsICoqa3dkcyk6XG4gICAgICAgICAgIHJlc3VsdCA9IHR5cGUuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0KG5hbWVzcGFjZSkpXG4gICAgICAgICAgIHJlc3VsdC5tZW1iZXJzID0gdHVwbGUobmFtZXNwYWNlKVxuICAgICAgICAgICByZXR1cm4gcmVzdWx0XG5cbiAgIGNsYXNzIEEobWV0YWNsYXNzPU9yZGVyZWRDbGFzcyk6XG4gICAgICAgZGVmIG9uZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0d28oc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdGhyZWUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgZm91cihzZWxmKTogcGFzc1xuXG4gICA+Pj4gQS5tZW1iZXJzXG4gICAoXCdfX21vZHVsZV9fXCcsIFwnb25lXCcsIFwndHdvXCcsIFwndGhyZWVcJywgXCdmb3VyXCcpXG5cbldoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gZm9yICpBKiBnZXRzIGV4ZWN1dGVkLCB0aGUgcHJvY2VzcyBiZWdpbnNcbndpdGggY2FsbGluZyB0aGUgbWV0YWNsYXNzXCdzICJfX3ByZXBhcmVfXygpIiBtZXRob2Qgd2hpY2ggcmV0dXJucyBhblxuZW1wdHkgImNvbGxlY3Rpb25zLk9yZGVyZWREaWN0Ii4gIFRoYXQgbWFwcGluZyByZWNvcmRzIHRoZSBtZXRob2RzIGFuZFxuYXR0cmlidXRlcyBvZiAqQSogYXMgdGhleSBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGNsYXNzXG5zdGF0ZW1lbnQuIE9uY2UgdGhvc2UgZGVmaW5pdGlvbnMgYXJlIGV4ZWN1dGVkLCB0aGUgb3JkZXJlZCBkaWN0aW9uYXJ5XG5pcyBmdWxseSBwb3B1bGF0ZWQgYW5kIHRoZSBtZXRhY2xhc3NcJ3MgIl9fbmV3X18oKSIgbWV0aG9kIGdldHNcbmludm9rZWQuICBUaGF0IG1ldGhvZCBidWlsZHMgdGhlIG5ldyB0eXBlIGFuZCBpdCBzYXZlcyB0aGUgb3JkZXJlZFxuZGljdGlvbmFyeSBrZXlzIGluIGFuIGF0dHJpYnV0ZSBjYWxsZWQgIm1lbWJlcnMiLlxuXG5cbkN1c3RvbWl6aW5nIGluc3RhbmNlIGFuZCBzdWJjbGFzcyBjaGVja3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZVxuImlzaW5zdGFuY2UoKSIgYW5kICJpc3N1YmNsYXNzKCkiIGJ1aWx0LWluIGZ1bmN0aW9ucy5cblxuSW4gcGFydGljdWxhciwgdGhlIG1ldGFjbGFzcyAiYWJjLkFCQ01ldGEiIGltcGxlbWVudHMgdGhlc2UgbWV0aG9kcyBpblxub3JkZXIgdG8gYWxsb3cgdGhlIGFkZGl0aW9uIG9mIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgYXNcbiJ2aXJ0dWFsIGJhc2UgY2xhc3NlcyIgdG8gYW55IGNsYXNzIG9yIHR5cGUgKGluY2x1ZGluZyBidWlsdC1pblxudHlwZXMpLCBpbmNsdWRpbmcgb3RoZXIgQUJDcy5cblxuY2xhc3MuX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIFJldHVybiB0cnVlIGlmICppbnN0YW5jZSogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgaW5zdGFuY2Ugb2YgKmNsYXNzKi4gSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgImlzaW5zdGFuY2UoaW5zdGFuY2UsIGNsYXNzKSIuXG5cbmNsYXNzLl9fc3ViY2xhc3NjaGVja19fKHNlbGYsIHN1YmNsYXNzKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiAqc3ViY2xhc3MqIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgKGRpcmVjdCBvclxuICAgaW5kaXJlY3QpIHN1YmNsYXNzIG9mICpjbGFzcyouICBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICAiaXNzdWJjbGFzcyhzdWJjbGFzcywgY2xhc3MpIi5cblxuTm90ZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgdHlwZSAobWV0YWNsYXNzKSBvZiBhXG5jbGFzcy4gIFRoZXkgY2Fubm90IGJlIGRlZmluZWQgYXMgY2xhc3MgbWV0aG9kcyBpbiB0aGUgYWN0dWFsIGNsYXNzLlxuVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkXG5vbiBpbnN0YW5jZXMsIG9ubHkgaW4gdGhpcyBjYXNlIHRoZSBpbnN0YW5jZSBpcyBpdHNlbGYgYSBjbGFzcy5cblxuU2VlIGFsc286ICoqUEVQIDMxMTkqKiAtIEludHJvZHVjaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3Nlc1xuXG4gICAgIEluY2x1ZGVzIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBjdXN0b21pemluZyAiaXNpbnN0YW5jZSgpIiBhbmRcbiAgICAgImlzc3ViY2xhc3MoKSIgYmVoYXZpb3IgdGhyb3VnaCAiX19pbnN0YW5jZWNoZWNrX18oKSIgYW5kXG4gICAgICJfX3N1YmNsYXNzY2hlY2tfXygpIiwgd2l0aCBtb3RpdmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaW5cbiAgICAgdGhlIGNvbnRleHQgb2YgYWRkaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoc2VlIHRoZSAiYWJjIlxuICAgICBtb2R1bGUpIHRvIHRoZSBsYW5ndWFnZS5cblxuXG5FbXVsYXRpbmcgY2FsbGFibGUgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fY2FsbF9fKHNlbGZbLCBhcmdzLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzICJjYWxsZWQiIGFzIGEgZnVuY3Rpb247IGlmIHRoaXMgbWV0aG9kXG4gICBpcyBkZWZpbmVkLCAieChhcmcxLCBhcmcyLCAuLi4pIiBpcyBhIHNob3J0aGFuZCBmb3JcbiAgICJ4Ll9fY2FsbF9fKGFyZzEsIGFyZzIsIC4uLikiLlxuXG5cbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggIjAgPD0gayA8IE4iIHdoZXJlXG4qTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoIGRlZmluZSBhXG5yYW5nZSBvZiBpdGVtcy4gIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlIHRoZVxubWV0aG9kcyAia2V5cygpIiwgInZhbHVlcygpIiwgIml0ZW1zKCkiLCAiZ2V0KCkiLCAiY2xlYXIoKSIsXG4ic2V0ZGVmYXVsdCgpIiwgInBvcCgpIiwgInBvcGl0ZW0oKSIsICJjb3B5KCkiLCBhbmQgInVwZGF0ZSgpIlxuYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uXCdzIHN0YW5kYXJkIGRpY3Rpb25hcnkgb2JqZWN0cy5cblRoZSAiY29sbGVjdGlvbnMiIG1vZHVsZSBwcm92aWRlcyBhICJNdXRhYmxlTWFwcGluZyIgYWJzdHJhY3QgYmFzZVxuY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kcyBmcm9tIGEgYmFzZSBzZXQgb2YgIl9fZ2V0aXRlbV9fKCkiLFxuIl9fc2V0aXRlbV9fKCkiLCAiX19kZWxpdGVtX18oKSIsIGFuZCAia2V5cygpIi4gTXV0YWJsZSBzZXF1ZW5jZXNcbnNob3VsZCBwcm92aWRlIG1ldGhvZHMgImFwcGVuZCgpIiwgImNvdW50KCkiLCAiaW5kZXgoKSIsICJleHRlbmQoKSIsXG4iaW5zZXJ0KCkiLCAicG9wKCkiLCAicmVtb3ZlKCkiLCAicmV2ZXJzZSgpIiBhbmQgInNvcnQoKSIsIGxpa2UgUHl0aG9uXG5zdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGQgaW1wbGVtZW50XG5hZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzICJfX2FkZF9fKCkiLCAiX19yYWRkX18oKSIsXG4iX19pYWRkX18oKSIsICJfX211bF9fKCkiLCAiX19ybXVsX18oKSIgYW5kICJfX2ltdWxfXygpIiBkZXNjcmliZWRcbmJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdCBpc1xucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuIl9fY29udGFpbnNfXygpIiBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgImluIiBvcGVyYXRvcjtcbmZvciBtYXBwaW5ncywgImluIiBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nXCdzIGtleXM7IGZvciBzZXF1ZW5jZXMsIGl0XG5zaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXIgcmVjb21tZW5kZWQgdGhhdCBib3RoXG5tYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGUgIl9faXRlcl9fKCkiIG1ldGhvZCB0byBhbGxvd1xuZWZmaWNpZW50IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZSBjb250YWluZXI7IGZvciBtYXBwaW5ncywgIl9faXRlcl9fKCkiXG5zaG91bGQgYmUgdGhlIHNhbWUgYXMgImtleXMoKSI7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlXG50aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJsZW4oKSIuICBTaG91bGQgcmV0dXJuXG4gICB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QsIGFuIGludGVnZXIgIj49IiAwLiAgQWxzbywgYW4gb2JqZWN0IHRoYXRcbiAgIGRvZXNuXCd0IGRlZmluZSBhICJfX2Jvb2xfXygpIiBtZXRob2QgYW5kIHdob3NlICJfX2xlbl9fKCkiIG1ldGhvZFxuICAgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuXG5cbm9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAib3BlcmF0b3IubGVuZ3RoX2hpbnQoKSIuIFNob3VsZCByZXR1cm4gYW5cbiAgIGVzdGltYXRlZCBsZW5ndGggZm9yIHRoZSBvYmplY3QgKHdoaWNoIG1heSBiZSBncmVhdGVyIG9yIGxlc3MgdGhhblxuICAgdGhlIGFjdHVhbCBsZW5ndGgpLiBUaGUgbGVuZ3RoIG11c3QgYmUgYW4gaW50ZWdlciAiPj0iIDAuIFRoaXNcbiAgIG1ldGhvZCBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIGFuZCBpcyBuZXZlciByZXF1aXJlZCBmb3JcbiAgIGNvcnJlY3RuZXNzLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjQuXG5cbk5vdGU6IFNsaWNpbmcgaXMgZG9uZSBleGNsdXNpdmVseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcy5cbiAgQSBjYWxsIGxpa2VcblxuICAgICBhWzE6Ml0gPSBiXG5cbiAgaXMgdHJhbnNsYXRlZCB0b1xuXG4gICAgIGFbc2xpY2UoMSwgMiwgTm9uZSldID0gYlxuXG4gIGFuZCBzbyBmb3J0aC4gIE1pc3Npbmcgc2xpY2UgaXRlbXMgYXJlIGFsd2F5cyBmaWxsZWQgaW4gd2l0aCAiTm9uZSIuXG5cbm9iamVjdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiAic2VsZltrZXldIi4gRm9yIHNlcXVlbmNlIHR5cGVzLFxuICAgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLiAgTm90ZSB0aGF0XG4gICB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGUgY2xhc3Mgd2lzaGVzXG4gICB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuIElmXG4gICAqa2V5KiBpcyBvZiBhbiBpbmFwcHJvcHJpYXRlIHR5cGUsICJUeXBlRXJyb3IiIG1heSBiZSByYWlzZWQ7IGlmIG9mXG4gICBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZiBpbmRleGVzIGZvciB0aGUgc2VxdWVuY2UgKGFmdGVyIGFueVxuICAgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSB2YWx1ZXMpLCAiSW5kZXhFcnJvciIgc2hvdWxkIGJlXG4gICByYWlzZWQuIEZvciBtYXBwaW5nIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlXG4gICBjb250YWluZXIpLCAiS2V5RXJyb3IiIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6ICJmb3IiIGxvb3BzIGV4cGVjdCB0aGF0IGFuICJJbmRleEVycm9yIiB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZXMgZm9yIGtleXMsIG9yIGlmIG5ldyBrZXlzXG4gICBjYW4gYmUgYWRkZWQsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHMgY2FuIGJlIHJlcGxhY2VkLiAgVGhlXG4gICBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvclxuICAgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCByZW1vdmFsIG9mIGtleXMsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHNcbiAgIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNlcXVlbmNlLiAgVGhlIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmVcbiAgIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvciB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9faXRlcl9fKHNlbGYpXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGVcbiAgIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZFxuICAgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIsIGFuZCBzaG91bGQgYWxzbyBiZSBtYWRlXG4gICBhdmFpbGFibGUgYXMgdGhlIG1ldGhvZCAia2V5cygpIi5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgInJldmVyc2VkKCkiIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSAiX19yZXZlcnNlZF9fKCkiIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZSAicmV2ZXJzZWQoKSJcbiAgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZSBwcm90b2NvbCAoIl9fbGVuX18oKSJcbiAgIGFuZCAiX19nZXRpdGVtX18oKSIpLiAgT2JqZWN0cyB0aGF0IHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sXG4gICBzaG91bGQgb25seSBwcm92aWRlICJfX3JldmVyc2VkX18oKSIgaWYgdGhleSBjYW4gcHJvdmlkZSBhblxuICAgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnlcbiAgICJyZXZlcnNlZCgpIi5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKCJpbiIgYW5kICJub3QgaW4iKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiwgdGhlIG1lbWJlcnNoaXAgdGVzdFxuICAgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSAiX19pdGVyX18oKSIsIHRoZW4gdGhlIG9sZCBzZXF1ZW5jZVxuICAgaXRlcmF0aW9uIHByb3RvY29sIHZpYSAiX19nZXRpdGVtX18oKSIsIHNlZSAqdGhpcyBzZWN0aW9uIGluIHRoZVxuICAgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cblxuXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlXG4gICBleHByZXNzaW9uICJ4ICsgeSIsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuXG4gICAiX19hZGRfXygpIiBtZXRob2QsICJ4Ll9fYWRkX18oeSkiIGlzIGNhbGxlZC4gIFRoZSAiX19kaXZtb2RfXygpIlxuICAgbWV0aG9kIHNob3VsZCBiZSB0aGUgZXF1aXZhbGVudCB0byB1c2luZyAiX19mbG9vcmRpdl9fKCkiIGFuZFxuICAgIl9fbW9kX18oKSI7IGl0IHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byAiX190cnVlZGl2X18oKSIuICBOb3RlXG4gICB0aGF0ICJfX3Bvd19fKCkiIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gInBvdygpIiBmdW5jdGlvbiBpc1xuICAgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiAiTm90SW1wbGVtZW50ZWQiLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8Iikgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLlxuICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90XG4gICBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZlxuICAgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gInggLVxuICAgeSIsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX3JzdWJfXygpIlxuICAgbWV0aG9kLCAieS5fX3JzdWJfXyh4KSIgaXMgY2FsbGVkIGlmICJ4Ll9fc3ViX18oeSkiIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5ICJwb3coKSIgd2lsbCBub3QgdHJ5IGNhbGxpbmcgIl9fcnBvd19fKCkiICh0aGVcbiAgIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kXG4gICAgIGZvciB0aGUgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXNcbiAgICAgdG8gb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKCIrPSIsICItPSIsICIqPSIsICIvPSIsICIvLz0iLCAiJT0iLCAiKio9IiwgIjw8PSIsXG4gICAiPj49IiwgIiY9IiwgIl49IiwgInw9IikuICBUaGVzZSBtZXRob2RzIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZVxuICAgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoXG4gICBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWQgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWxcbiAgIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIHRvIGV4ZWN1dGUgdGhlIHN0YXRlbWVudCAieCArPSB5Iiwgd2hlcmVcbiAgICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX2lhZGRfXygpIiBtZXRob2QsXG4gICAieC5fX2lhZGRfXyh5KSIgaXMgY2FsbGVkLiAgSWYgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdFxuICAgZG9lcyBub3QgZGVmaW5lIGEgIl9faWFkZF9fKCkiIG1ldGhvZCwgInguX19hZGRfXyh5KSIgYW5kXG4gICAieS5fX3JhZGRfXyh4KSIgYXJlIGNvbnNpZGVyZWQsIGFzIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgInggKyB5Ii5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zICgiLSIsICIrIixcbiAgICJhYnMoKSIgYW5kICJ+IikuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcbm9iamVjdC5fX3JvdW5kX18oc2VsZlssIG5dKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImNvbXBsZXgoKSIsICJpbnQoKSIsXG4gICAiZmxvYXQoKSIgYW5kICJyb3VuZCgpIi4gIFNob3VsZCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgYXBwcm9wcmlhdGVcbiAgIHR5cGUuXG5cbm9iamVjdC5fX2luZGV4X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAib3BlcmF0b3IuaW5kZXgoKSIsIGFuZCB3aGVuZXZlciBQeXRob24gbmVlZHNcbiAgIHRvIGxvc3NsZXNzbHkgY29udmVydCB0aGUgbnVtZXJpYyBvYmplY3QgdG8gYW4gaW50ZWdlciBvYmplY3QgKHN1Y2hcbiAgIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZSBidWlsdC1pbiAiYmluKCkiLCAiaGV4KCkiIGFuZCAib2N0KCkiXG4gICBmdW5jdGlvbnMpLiBQcmVzZW5jZSBvZiB0aGlzIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdCB0aGUgbnVtZXJpY1xuICAgb2JqZWN0IGlzIGFuIGludGVnZXIgdHlwZS4gIE11c3QgcmV0dXJuIGFuIGludGVnZXIuXG5cbiAgIE5vdGU6IFdoZW4gIl9faW5kZXhfXygpIiBpcyBkZWZpbmVkLCAiX19pbnRfXygpIiBzaG91bGQgYWxzbyBiZVxuICAgICBkZWZpbmVkLCBhbmQgYm90aCBzaHVsZCByZXR1cm4gdGhlIHNhbWUgdmFsdWUsIGluIG9yZGVyIHRvIGhhdmUgYVxuICAgICBjb2hlcmVudCBpbnRlZ2VyIHR5cGUgY2xhc3MuXG5cblxuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSAid2l0aCIgc3RhdGVtZW50LiBUaGUgY29udGV4dCBtYW5hZ2VyXG5oYW5kbGVzIHRoZSBlbnRyeSBpbnRvLCBhbmQgdGhlIGV4aXQgZnJvbSwgdGhlIGRlc2lyZWQgcnVudGltZSBjb250ZXh0XG5mb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2sgb2YgY29kZS4gIENvbnRleHQgbWFuYWdlcnMgYXJlIG5vcm1hbGx5XG5pbnZva2VkIHVzaW5nIHRoZSAid2l0aCIgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvbiAqVGhlIHdpdGhcbnN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpciBtZXRob2RzLlxuXG5UeXBpY2FsIHVzZXMgb2YgY29udGV4dCBtYW5hZ2VycyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHZhcmlvdXNcbmtpbmRzIG9mIGdsb2JhbCBzdGF0ZSwgbG9ja2luZyBhbmQgdW5sb2NraW5nIHJlc291cmNlcywgY2xvc2luZyBvcGVuZWRcbmZpbGVzLCBldGMuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRleHQgbWFuYWdlcnMsIHNlZSAqQ29udGV4dCBNYW5hZ2VyIFR5cGVzKi5cblxub2JqZWN0Ll9fZW50ZXJfXyhzZWxmKVxuXG4gICBFbnRlciB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSAid2l0aCJcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgImFzIiBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSAiTm9uZSIuXG5cbiAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBtZXRob2Qgd2lzaGVzIHRvIHN1cHByZXNzIHRoZVxuICAgZXhjZXB0aW9uIChpLmUuLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHJvcGFnYXRlZCksIGl0IHNob3VsZFxuICAgcmV0dXJuIGEgdHJ1ZSB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkXG4gICBub3JtYWxseSB1cG9uIGV4aXQgZnJvbSB0aGlzIG1ldGhvZC5cblxuICAgTm90ZSB0aGF0ICJfX2V4aXRfXygpIiBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuXG5cblNwZWNpYWwgbWV0aG9kIGxvb2t1cFxuPT09PT09PT09PT09PT09PT09PT09XG5cbkZvciBjdXN0b20gY2xhc3NlcywgaW1wbGljaXQgaW52b2NhdGlvbnMgb2Ygc3BlY2lhbCBtZXRob2RzIGFyZSBvbmx5XG5ndWFyYW50ZWVkIHRvIHdvcmsgY29ycmVjdGx5IGlmIGRlZmluZWQgb24gYW4gb2JqZWN0XCdzIHR5cGUsIG5vdCBpblxudGhlIG9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgVGhhdCBiZWhhdmlvdXIgaXMgdGhlIHJlYXNvbiB3aHlcbnRoZSBmb2xsb3dpbmcgY29kZSByYWlzZXMgYW4gZXhjZXB0aW9uOlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXyA9IGxhbWJkYTogNVxuICAgPj4+IGxlbihjKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBvYmplY3Qgb2YgdHlwZSBcJ0NcJyBoYXMgbm8gbGVuKClcblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBiZWhhdmlvdXIgbGllcyB3aXRoIGEgbnVtYmVyIG9mIHNwZWNpYWxcbm1ldGhvZHMgc3VjaCBhcyAiX19oYXNoX18oKSIgYW5kICJfX3JlcHJfXygpIiB0aGF0IGFyZSBpbXBsZW1lbnRlZCBieVxuYWxsIG9iamVjdHMsIGluY2x1ZGluZyB0eXBlIG9iamVjdHMuIElmIHRoZSBpbXBsaWNpdCBsb29rdXAgb2YgdGhlc2Vcbm1ldGhvZHMgdXNlZCB0aGUgY29udmVudGlvbmFsIGxvb2t1cCBwcm9jZXNzLCB0aGV5IHdvdWxkIGZhaWwgd2hlblxuaW52b2tlZCBvbiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmOlxuXG4gICA+Pj4gMSAuX19oYXNoX18oKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gaW50Ll9faGFzaF9fKCkgPT0gaGFzaChpbnQpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IGRlc2NyaXB0b3IgXCdfX2hhc2hfX1wnIG9mIFwnaW50XCcgb2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50XG5cbkluY29ycmVjdGx5IGF0dGVtcHRpbmcgdG8gaW52b2tlIGFuIHVuYm91bmQgbWV0aG9kIG9mIGEgY2xhc3MgaW4gdGhpc1xud2F5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBcJ21ldGFjbGFzcyBjb25mdXNpb25cJywgYW5kIGlzIGF2b2lkZWRcbmJ5IGJ5cGFzc2luZyB0aGUgaW5zdGFuY2Ugd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kczpcblxuICAgPj4+IHR5cGUoMSkuX19oYXNoX18oMSkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IHR5cGUoaW50KS5fX2hhc2hfXyhpbnQpID09IGhhc2goaW50KVxuICAgVHJ1ZVxuXG5JbiBhZGRpdGlvbiB0byBieXBhc3NpbmcgYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgaW4gdGhlIGludGVyZXN0IG9mXG5jb3JyZWN0bmVzcywgaW1wbGljaXQgc3BlY2lhbCBtZXRob2QgbG9va3VwIGdlbmVyYWxseSBhbHNvIGJ5cGFzc2VzXG50aGUgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWV0aG9kIGV2ZW4gb2YgdGhlIG9iamVjdFwncyBtZXRhY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBNZXRhKHR5cGUpOlxuICAgLi4uICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICBwcmludCgiTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICByZXR1cm4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gY2xhc3MgQyhvYmplY3QsIG1ldGFjbGFzcz1NZXRhKTpcbiAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gMTBcbiAgIC4uLiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgICAgcHJpbnQoIkNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18oKSAgICAgICAgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIGluc3RhbmNlXG4gICBDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiB0eXBlKGMpLl9fbGVuX18oYykgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIHR5cGVcbiAgIE1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiBsZW4oYykgICAgICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdCBsb29rdXBcbiAgIDEwXG5cbkJ5cGFzc2luZyB0aGUgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWFjaGluZXJ5IGluIHRoaXMgZmFzaGlvbiBwcm92aWRlc1xuc2lnbmlmaWNhbnQgc2NvcGUgZm9yIHNwZWVkIG9wdGltaXNhdGlvbnMgd2l0aGluIHRoZSBpbnRlcnByZXRlciwgYXRcbnRoZSBjb3N0IG9mIHNvbWUgZmxleGliaWxpdHkgaW4gdGhlIGhhbmRsaW5nIG9mIHNwZWNpYWwgbWV0aG9kcyAodGhlXG5zcGVjaWFsIG1ldGhvZCAqbXVzdCogYmUgc2V0IG9uIHRoZSBjbGFzcyBvYmplY3QgaXRzZWxmIGluIG9yZGVyIHRvIGJlXG5jb25zaXN0ZW50bHkgaW52b2tlZCBieSB0aGUgaW50ZXJwcmV0ZXIpLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIEl0ICppcyogcG9zc2libGUgaW4gc29tZSBjYXNlcyB0byBjaGFuZ2UgYW4gb2JqZWN0XCdzIHR5cGUsXG4gICAgdW5kZXIgY2VydGFpbiBjb250cm9sbGVkIGNvbmRpdGlvbnMuIEl0IGdlbmVyYWxseSBpc25cJ3QgYSBnb29kXG4gICAgaWRlYSB0aG91Z2gsIHNpbmNlIGl0IGNhbiBsZWFkIHRvIHNvbWUgdmVyeSBzdHJhbmdlIGJlaGF2aW91ciBpZlxuICAgIGl0IGlzIGhhbmRsZWQgaW5jb3JyZWN0bHkuXG5cblsyXSBGb3Igb3BlcmFuZHMgb2YgdGhlIHNhbWUgdHlwZSwgaXQgaXMgYXNzdW1lZCB0aGF0IGlmIHRoZSBub24tXG4gICAgcmVmbGVjdGVkIG1ldGhvZCAoc3VjaCBhcyAiX19hZGRfXygpIikgZmFpbHMgdGhlIG9wZXJhdGlvbiBpcyBub3RcbiAgICBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeSB0aGUgcmVmbGVjdGVkIG1ldGhvZCBpcyBub3QgY2FsbGVkLlxuJywKKyAnc3RyaW5nLW1ldGhvZHMnOiAnXG5TdHJpbmcgTWV0aG9kc1xuKioqKioqKioqKioqKipcblxuU3RyaW5ncyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLCBhbG9uZyB3aXRoXG50aGUgYWRkaXRpb25hbCBtZXRob2RzIGRlc2NyaWJlZCBiZWxvdy5cblxuU3RyaW5ncyBhbHNvIHN1cHBvcnQgdHdvIHN0eWxlcyBvZiBzdHJpbmcgZm9ybWF0dGluZywgb25lIHByb3ZpZGluZyBhXG5sYXJnZSBkZWdyZWUgb2YgZmxleGliaWxpdHkgYW5kIGN1c3RvbWl6YXRpb24gKHNlZSAic3RyLmZvcm1hdCgpIixcbipGb3JtYXQgU3RyaW5nIFN5bnRheCogYW5kICpTdHJpbmcgRm9ybWF0dGluZyopIGFuZCB0aGUgb3RoZXIgYmFzZWQgb25cbkMgInByaW50ZiIgc3R5bGUgZm9ybWF0dGluZyB0aGF0IGhhbmRsZXMgYSBuYXJyb3dlciByYW5nZSBvZiB0eXBlcyBhbmRcbmlzIHNsaWdodGx5IGhhcmRlciB0byB1c2UgY29ycmVjdGx5LCBidXQgaXMgb2Z0ZW4gZmFzdGVyIGZvciB0aGUgY2FzZXNcbml0IGNhbiBoYW5kbGUgKCpwcmludGYtc3R5bGUgU3RyaW5nIEZvcm1hdHRpbmcqKS5cblxuVGhlICpUZXh0IFByb2Nlc3NpbmcgU2VydmljZXMqIHNlY3Rpb24gb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkgY292ZXJzXG5hIG51bWJlciBvZiBvdGhlciBtb2R1bGVzIHRoYXQgcHJvdmlkZSB2YXJpb3VzIHRleHQgcmVsYXRlZCB1dGlsaXRpZXNcbihpbmNsdWRpbmcgcmVndWxhciBleHByZXNzaW9uIHN1cHBvcnQgaW4gdGhlICJyZSIgbW9kdWxlKS5cblxuc3RyLmNhcGl0YWxpemUoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBpdHMgZmlyc3QgY2hhcmFjdGVyIGNhcGl0YWxpemVkXG4gICBhbmQgdGhlIHJlc3QgbG93ZXJjYXNlZC5cblxuc3RyLmNhc2Vmb2xkKClcblxuICAgUmV0dXJuIGEgY2FzZWZvbGRlZCBjb3B5IG9mIHRoZSBzdHJpbmcuIENhc2Vmb2xkZWQgc3RyaW5ncyBtYXkgYmVcbiAgIHVzZWQgZm9yIGNhc2VsZXNzIG1hdGNoaW5nLlxuXG4gICBDYXNlZm9sZGluZyBpcyBzaW1pbGFyIHRvIGxvd2VyY2FzaW5nIGJ1dCBtb3JlIGFnZ3Jlc3NpdmUgYmVjYXVzZVxuICAgaXQgaXMgaW50ZW5kZWQgdG8gcmVtb3ZlIGFsbCBjYXNlIGRpc3RpbmN0aW9ucyBpbiBhIHN0cmluZy4gRm9yXG4gICBleGFtcGxlLCB0aGUgR2VybWFuIGxvd2VyY2FzZSBsZXR0ZXIgIlwnXHhjM1x4OWZcJyIgaXMgZXF1aXZhbGVudCB0byAiInNzIiIuXG4gICBTaW5jZSBpdCBpcyBhbHJlYWR5IGxvd2VyY2FzZSwgImxvd2VyKCkiIHdvdWxkIGRvIG5vdGhpbmcgdG8gIlwnXHhjM1x4OWZcJyI7XG4gICAiY2FzZWZvbGQoKSIgY29udmVydHMgaXQgdG8gIiJzcyIiLlxuXG4gICBUaGUgY2FzZWZvbGRpbmcgYWxnb3JpdGhtIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjMuXG5cbnN0ci5jZW50ZXIod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiBjZW50ZXJlZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lXG4gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuXG5cbnN0ci5jb3VudChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpzdWIqXG4gICBpbiB0aGUgcmFuZ2UgWypzdGFydCosICplbmQqXS4gIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZFxuICAgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLlxuXG5zdHIuZW5jb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0ic3RyaWN0IilcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIGFzIGEgYnl0ZXMgb2JqZWN0LiBEZWZhdWx0XG4gICBlbmNvZGluZyBpcyAiXCd1dGYtOFwnIi4gKmVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudFxuICAgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXMgIlwnc3RyaWN0XCciLFxuICAgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBhICJVbmljb2RlRXJyb3IiLiBPdGhlciBwb3NzaWJsZVxuICAgdmFsdWVzIGFyZSAiXCdpZ25vcmVcJyIsICJcJ3JlcGxhY2VcJyIsICJcJ3htbGNoYXJyZWZyZXBsYWNlXCciLFxuICAgIlwnYmFja3NsYXNocmVwbGFjZVwnIiBhbmQgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB2aWFcbiAgICJjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKSIsIHNlZSBzZWN0aW9uICpDb2RlYyBCYXNlIENsYXNzZXMqLiBGb3IgYVxuICAgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZSBzZWN0aW9uICpTdGFuZGFyZCBFbmNvZGluZ3MqLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuc3RyLmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiAiVHJ1ZSIgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KixcbiAgIG90aGVyd2lzZSByZXR1cm4gIkZhbHNlIi4gICpzdWZmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2Ygc3VmZml4ZXNcbiAgIHRvIGxvb2sgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IGJlZ2lubmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIGF0IHRoYXQgcG9zaXRpb24uXG5cbnN0ci5leHBhbmR0YWJzKHRhYnNpemU9OClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWRcbiAgIGJ5IG9uZSBvciBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlXG4gICBnaXZlbiB0YWIgc2l6ZS4gIFRhYiBwb3NpdGlvbnMgb2NjdXIgZXZlcnkgKnRhYnNpemUqIGNoYXJhY3RlcnNcbiAgIChkZWZhdWx0IGlzIDgsIGdpdmluZyB0YWIgcG9zaXRpb25zIGF0IGNvbHVtbnMgMCwgOCwgMTYgYW5kIHNvIG9uKS5cbiAgIFRvIGV4cGFuZCB0aGUgc3RyaW5nLCB0aGUgY3VycmVudCBjb2x1bW4gaXMgc2V0IHRvIHplcm8gYW5kIHRoZVxuICAgc3RyaW5nIGlzIGV4YW1pbmVkIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIuICBJZiB0aGUgY2hhcmFjdGVyIGlzIGFcbiAgIHRhYiAoIlxcdCIpLCBvbmUgb3IgbW9yZSBzcGFjZSBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBpbiB0aGUgcmVzdWx0XG4gICB1bnRpbCB0aGUgY3VycmVudCBjb2x1bW4gaXMgZXF1YWwgdG8gdGhlIG5leHQgdGFiIHBvc2l0aW9uLiAoVGhlXG4gICB0YWIgY2hhcmFjdGVyIGl0c2VsZiBpcyBub3QgY29waWVkLikgIElmIHRoZSBjaGFyYWN0ZXIgaXMgYSBuZXdsaW5lXG4gICAoIlxcbiIpIG9yIHJldHVybiAoIlxcciIpLCBpdCBpcyBjb3BpZWQgYW5kIHRoZSBjdXJyZW50IGNvbHVtbiBpc1xuICAgcmVzZXQgdG8gemVyby4gIEFueSBvdGhlciBjaGFyYWN0ZXIgaXMgY29waWVkIHVuY2hhbmdlZCBhbmQgdGhlXG4gICBjdXJyZW50IGNvbHVtbiBpcyBpbmNyZW1lbnRlZCBieSBvbmUgcmVnYXJkbGVzcyBvZiBob3cgdGhlXG4gICBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgd2hlbiBwcmludGVkLlxuXG4gICA+Pj4gXCcwMVxcdDAxMlxcdDAxMjNcXHQwMTIzNFwnLmV4cGFuZHRhYnMoKVxuICAgXCcwMSAgICAgIDAxMiAgICAgMDEyMyAgICAwMTIzNFwnXG4gICA+Pj4gXCcwMVxcdDAxMlxcdDAxMjNcXHQwMTIzNFwnLmV4cGFuZHRhYnMoNClcbiAgIFwnMDEgIDAxMiAwMTIzICAgIDAxMjM0XCdcblxuc3RyLmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBsb3dlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIGluIHRoZSBzbGljZSAic1tzdGFydDplbmRdIi5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuICItMSIgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG4gICBOb3RlOiBUaGUgImZpbmQoKSIgbWV0aG9kIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgeW91IG5lZWQgdG8ga25vd1xuICAgICB0aGUgcG9zaXRpb24gb2YgKnN1YiouICBUbyBjaGVjayBpZiAqc3ViKiBpcyBhIHN1YnN0cmluZyBvciBub3QsXG4gICAgIHVzZSB0aGUgImluIiBvcGVyYXRvcjpcblxuICAgICAgICA+Pj4gXCdQeVwnIGluIFwnUHl0aG9uXCdcbiAgICAgICAgVHJ1ZVxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzICJ7fSIuICBFYWNoIHJlcGxhY2VtZW50IGZpZWxkIGNvbnRhaW5zIGVpdGhlclxuICAgdGhlIG51bWVyaWMgaW5kZXggb2YgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBvciB0aGUgbmFtZSBvZiBhXG4gICBrZXl3b3JkIGFyZ3VtZW50LiAgUmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBlYWNoXG4gICByZXBsYWNlbWVudCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlXG4gICBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LlxuXG4gICA+Pj4gIlRoZSBzdW0gb2YgMSArIDIgaXMgezB9Ii5mb3JtYXQoMSsyKVxuICAgXCdUaGUgc3VtIG9mIDEgKyAyIGlzIDNcJ1xuXG4gICBTZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91c1xuICAgZm9ybWF0dGluZyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtYXQgc3RyaW5ncy5cblxuc3RyLmZvcm1hdF9tYXAobWFwcGluZylcblxuICAgU2ltaWxhciB0byAic3RyLmZvcm1hdCgqKm1hcHBpbmcpIiwgZXhjZXB0IHRoYXQgIm1hcHBpbmciIGlzIHVzZWRcbiAgIGRpcmVjdGx5IGFuZCBub3QgY29waWVkIHRvIGEgImRpY3QiLiAgVGhpcyBpcyB1c2VmdWwgaWYgZm9yIGV4YW1wbGVcbiAgICJtYXBwaW5nIiBpcyBhIGRpY3Qgc3ViY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBEZWZhdWx0KGRpY3QpOlxuICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBrZXlcbiAgIC4uLlxuICAgPj4+IFwne25hbWV9IHdhcyBib3JuIGluIHtjb3VudHJ5fVwnLmZvcm1hdF9tYXAoRGVmYXVsdChuYW1lPVwnR3VpZG9cJykpXG4gICBcJ0d1aWRvIHdhcyBib3JuIGluIGNvdW50cnlcJ1xuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlICJmaW5kKCkiLCBidXQgcmFpc2UgIlZhbHVlRXJyb3IiIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3RcbiAgIGZvdW5kLlxuXG5zdHIuaXNhbG51bSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhbnVtZXJpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEEgY2hhcmFjdGVyICJjIlxuICAgaXMgYWxwaGFudW1lcmljIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnMgIlRydWUiOlxuICAgImMuaXNhbHBoYSgpIiwgImMuaXNkZWNpbWFsKCkiLCAiYy5pc2RpZ2l0KCkiLCBvciAiYy5pc251bWVyaWMoKSIuXG5cbnN0ci5pc2FscGhhKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFiZXRpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEFscGhhYmV0aWNcbiAgIGNoYXJhY3RlcnMgYXJlIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcbiAgIGRhdGFiYXNlIGFzICJMZXR0ZXIiLCBpLmUuLCB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHlcbiAgIGJlaW5nIG9uZSBvZiAiTG0iLCAiTHQiLCAiTHUiLCAiTGwiLCBvciAiTG8iLiAgTm90ZSB0aGF0IHRoaXMgaXNcbiAgIGRpZmZlcmVudCBmcm9tIHRoZSAiQWxwaGFiZXRpYyIgcHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgVW5pY29kZVxuICAgU3RhbmRhcmQuXG5cbnN0ci5pc2RlY2ltYWwoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkZWNpbWFsIGNoYXJhY3RlcnNcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIERlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYXJlIHRob3NlIGZyb20gZ2VuZXJhbCBjYXRlZ29yeSAiTmQiLiBUaGlzIGNhdGVnb3J5XG4gICBpbmNsdWRlcyBkaWdpdCBjaGFyYWN0ZXJzLCBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgdXNlZCB0b1xuICAgZm9ybSBkZWNpbWFsLXJhZGl4IG51bWJlcnMsIGUuZy4gVSswNjYwLCBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTy5cblxuc3RyLmlzZGlnaXQoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkaWdpdHMgYW5kIHRoZXJlIGlzXG4gICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBEaWdpdHMgaW5jbHVkZSBkZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFuZCBkaWdpdHMgdGhhdCBuZWVkIHNwZWNpYWwgaGFuZGxpbmcsIHN1Y2ggYXMgdGhlXG4gICBjb21wYXRpYmlsaXR5IHN1cGVyc2NyaXB0IGRpZ2l0cy4gIEZvcm1hbGx5LCBhIGRpZ2l0IGlzIGEgY2hhcmFjdGVyXG4gICB0aGF0IGhhcyB0aGUgcHJvcGVydHkgdmFsdWUgTnVtZXJpY19UeXBlPURpZ2l0IG9yXG4gICBOdW1lcmljX1R5cGU9RGVjaW1hbC5cblxuc3RyLmlzaWRlbnRpZmllcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBpZGVudGlmaWVyIGFjY29yZGluZyB0byB0aGVcbiAgIGxhbmd1YWdlIGRlZmluaXRpb24sIHNlY3Rpb24gKklkZW50aWZpZXJzIGFuZCBrZXl3b3JkcyouXG5cbiAgIFVzZSAia2V5d29yZC5pc2tleXdvcmQoKSIgdG8gdGVzdCBmb3IgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgc3VjaCBhc1xuICAgImRlZiIgYW5kICJjbGFzcyIuXG5cbnN0ci5pc2xvd2VyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgWzRdIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZVxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzbnVtZXJpYygpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIG51bWVyaWMgY2hhcmFjdGVycyxcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIE51bWVyaWNcbiAgIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLCBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlXG4gICB0aGUgVW5pY29kZSBudW1lcmljIHZhbHVlIHByb3BlcnR5LCBlLmcuIFUrMjE1NSwgVlVMR0FSIEZSQUNUSU9OXG4gICBPTkUgRklGVEguICBGb3JtYWxseSwgbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIHRoZVxuICAgcHJvcGVydHkgdmFsdWUgTnVtZXJpY19UeXBlPURpZ2l0LCBOdW1lcmljX1R5cGU9RGVjaW1hbCBvclxuICAgTnVtZXJpY19UeXBlPU51bWVyaWMuXG5cbnN0ci5pc3ByaW50YWJsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIHByaW50YWJsZSBvciB0aGVcbiAgIHN0cmluZyBpcyBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLiAgTm9ucHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlXG4gICB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlIGFzXG4gICAiT3RoZXIiIG9yICJTZXBhcmF0b3IiLCBleGNlcHRpbmcgdGhlIEFTQ0lJIHNwYWNlICgweDIwKSB3aGljaCBpc1xuICAgY29uc2lkZXJlZCBwcmludGFibGUuICAoTm90ZSB0aGF0IHByaW50YWJsZSBjaGFyYWN0ZXJzIGluIHRoaXNcbiAgIGNvbnRleHQgYXJlIHRob3NlIHdoaWNoIHNob3VsZCBub3QgYmUgZXNjYXBlZCB3aGVuICJyZXByKCkiIGlzXG4gICBpbnZva2VkIG9uIGEgc3RyaW5nLiAgSXQgaGFzIG5vIGJlYXJpbmcgb24gdGhlIGhhbmRsaW5nIG9mIHN0cmluZ3NcbiAgIHdyaXR0ZW4gdG8gInN5cy5zdGRvdXQiIG9yICJzeXMuc3RkZXJyIi4pXG5cbnN0ci5pc3NwYWNlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmdcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBXaGl0ZXNwYWNlXG4gICBjaGFyYWN0ZXJzICBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIk90aGVyIiBvciAiU2VwYXJhdG9yIiBhbmQgdGhvc2Ugd2l0aCBiaWRpcmVjdGlvbmFsXG4gICBwcm9wZXJ0eSBiZWluZyBvbmUgb2YgIldTIiwgIkIiLCBvciAiUyIuXG5cbnN0ci5pc3RpdGxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHRpdGxlY2FzZWQgc3RyaW5nIGFuZCB0aGVyZSBpcyBhdFxuICAgbGVhc3Qgb25lIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgbWF5IG9ubHlcbiAgIGZvbGxvdyB1bmNhc2VkIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIG9ubHkgY2FzZWQgb25lcy5cbiAgIFJldHVybiBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc3VwcGVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgWzRdIGluIHRoZSBzdHJpbmcgYXJlIHVwcGVyY2FzZVxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmpvaW4oaXRlcmFibGUpXG5cbiAgIFJldHVybiBhIHN0cmluZyB3aGljaCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyaW5ncyBpbiB0aGVcbiAgICppdGVyYWJsZSogKml0ZXJhYmxlKi4gIEEgIlR5cGVFcnJvciIgd2lsbCBiZSByYWlzZWQgaWYgdGhlcmUgYXJlXG4gICBhbnkgbm9uLXN0cmluZyB2YWx1ZXMgaW4gKml0ZXJhYmxlKiwgaW5jbHVkaW5nICJieXRlcyIgb2JqZWN0cy5cbiAgIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBlbGVtZW50cyBpcyB0aGUgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiAgVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gImxlbihzKSIuXG5cbnN0ci5sb3dlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCB0aGUgY2FzZWQgY2hhcmFjdGVycyBbNF1cbiAgIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuXG5cbiAgIFRoZSBsb3dlcmNhc2luZyBhbGdvcml0aG0gdXNlZCBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5sc3RyaXAoKVxuICAgXCdzcGFjaW91cyAgIFwnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5sc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZS5jb21cJ1xuXG5zdGF0aWMgc3RyLm1ha2V0cmFucyh4WywgeVssIHpdXSlcblxuICAgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yXG4gICAic3RyLnRyYW5zbGF0ZSgpIi5cblxuICAgSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmdcbiAgIFVuaWNvZGUgb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIChzdHJpbmdzIG9mIGxlbmd0aCAxKSB0b1xuICAgVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyAob2YgYXJiaXRyYXJ5IGxlbmd0aHMpIG9yIE5vbmUuXG4gICBDaGFyYWN0ZXIga2V5cyB3aWxsIHRoZW4gYmUgY29udmVydGVkIHRvIG9yZGluYWxzLlxuXG4gICBJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLFxuICAgYW5kIGluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZFxuICAgdG8gdGhlIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiAgSWYgdGhlcmUgaXMgYSB0aGlyZFxuICAgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG9cbiAgIE5vbmUgaW4gdGhlIHJlc3VsdC5cblxuc3RyLnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBpdHNlbGYsIGZvbGxvd2VkIGJ5XG4gICB0d28gZW1wdHkgc3RyaW5ncy5cblxuc3RyLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKm9sZCpcbiAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHlcbiAgIHRoZSBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5cblxuc3RyLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluICJzW3N0YXJ0OmVuZF0iLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gIi0xIiBvbiBmYWlsdXJlLlxuXG5zdHIucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgInJmaW5kKCkiIGJ1dCByYWlzZXMgIlZhbHVlRXJyb3IiIHdoZW4gdGhlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgbm90IGZvdW5kLlxuXG5zdHIucmp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yXG4gICBlcXVhbCB0byAibGVuKHMpIi5cblxuc3RyLnJwYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IHN0cmluZ3MsIGZvbGxvd2VkIGJ5XG4gICB0aGUgc3RyaW5nIGl0c2VsZi5cblxuc3RyLnJzcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0c1xuICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvclxuICAgIk5vbmUiLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcgaXMgYSBzZXBhcmF0b3IuICBFeGNlcHQgZm9yIHNwbGl0dGluZ1xuICAgZnJvbSB0aGUgcmlnaHQsICJyc3BsaXQoKSIgYmVoYXZlcyBsaWtlICJzcGxpdCgpIiB3aGljaCBpc1xuICAgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cblxuc3RyLnJzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0cmFpbGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yICJOb25lIiwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgIFwnICAgc3BhY2lvdXNcJ1xuICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgIFwnbWlzc2lzc1wnXG5cbnN0ci5zcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCAibWF4c3BsaXQrMSJcbiAgIGVsZW1lbnRzKS4gIElmICptYXhzcGxpdCogaXMgbm90IHNwZWNpZmllZCBvciAiLTEiLCB0aGVuIHRoZXJlIGlzXG4gICBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgICJcJzEsLDJcJy5zcGxpdChcJyxcJykiIHJldHVybnMgIltcJzFcJywgXCdcJywgXCcyXCddIikuICBUaGUgKnNlcCogYXJndW1lbnRcbiAgIG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLFxuICAgIlwnMTw+Mjw+M1wnLnNwbGl0KFwnPD5cJykiIHJldHVybnMgIltcJzFcJywgXCcyXCcsIFwnM1wnXSIpLiBTcGxpdHRpbmcgYW5cbiAgIGVtcHR5IHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIHNlcGFyYXRvciByZXR1cm5zICJbXCdcJ10iLlxuXG4gICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzICJOb25lIiwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgIk5vbmUiIHNlcGFyYXRvciByZXR1cm5zICJbXSIuXG5cbiAgIEZvciBleGFtcGxlLCAiXCcgMSAgMiAgIDMgIFwnLnNwbGl0KCkiIHJldHVybnMgIltcJzFcJywgXCcyXCcsIFwnM1wnXSIsIGFuZFxuICAgIlwnICAxICAyICAgMyAgXCcuc3BsaXQoTm9uZSwgMSkiIHJldHVybnMgIltcJzFcJywgXCcyICAgMyAgXCddIi5cblxuc3RyLnNwbGl0bGluZXMoW2tlZXBlbmRzXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIHN0cmluZywgYnJlYWtpbmcgYXQgbGluZVxuICAgYm91bmRhcmllcy4gVGhpcyBtZXRob2QgdXNlcyB0aGUgKnVuaXZlcnNhbCBuZXdsaW5lcyogYXBwcm9hY2ggdG9cbiAgIHNwbGl0dGluZyBsaW5lcy4gTGluZSBicmVha3MgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGxpc3RcbiAgIHVubGVzcyAqa2VlcGVuZHMqIGlzIGdpdmVuIGFuZCB0cnVlLlxuXG4gICBGb3IgZXhhbXBsZSwgIlwnYWIgY1xcblxcbmRlIGZnXFxya2xcXHJcXG5cJy5zcGxpdGxpbmVzKCkiIHJldHVybnMgIltcJ2FiXG4gICBjXCcsIFwnXCcsIFwnZGUgZmdcJywgXCdrbFwnXSIsIHdoaWxlIHRoZSBzYW1lIGNhbGwgd2l0aFxuICAgInNwbGl0bGluZXMoVHJ1ZSkiIHJldHVybnMgIltcJ2FiIGNcXG5cJywgXCdcXG5cJywgXCdkZSBmZ1xcclwnLCBcJ2tsXFxyXFxuXCddIi5cblxuICAgVW5saWtlICJzcGxpdCgpIiB3aGVuIGEgZGVsaW1pdGVyIHN0cmluZyAqc2VwKiBpcyBnaXZlbiwgdGhpc1xuICAgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgdGhlIGVtcHR5IHN0cmluZywgYW5kIGEgdGVybWluYWxcbiAgIGxpbmUgYnJlYWsgZG9lcyBub3QgcmVzdWx0IGluIGFuIGV4dHJhIGxpbmUuXG5cbnN0ci5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiAiVHJ1ZSIgaWYgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSAqcHJlZml4Kiwgb3RoZXJ3aXNlIHJldHVyblxuICAgIkZhbHNlIi4gKnByZWZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBwcmVmaXhlcyB0byBsb29rIGZvci5cbiAgIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBzdHJpbmcgYmVnaW5uaW5nIGF0IHRoYXQgcG9zaXRpb24uXG4gICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBzdHJpbmcgYXQgdGhhdCBwb3NpdGlvbi5cblxuc3RyLnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgY2hhcmFjdGVycyByZW1vdmVkLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZVxuICAgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gSWYgb21pdHRlZCBvciAiTm9uZSIsIHRoZSAqY2hhcnMqXG4gICBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpc1xuICAgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlXG4gICBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5zdHJpcCgpXG4gICBcJ3NwYWNpb3VzXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLnN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGVcJ1xuXG5zdHIuc3dhcGNhc2UoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB1cHBlcmNhc2UgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG9cbiAgIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS4gTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlIHRoYXRcbiAgICJzLnN3YXBjYXNlKCkuc3dhcGNhc2UoKSA9PSBzIi5cblxuc3RyLnRpdGxlKClcblxuICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hlcmUgd29yZHMgc3RhcnQgd2l0aCBhblxuICAgdXBwZXJjYXNlIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuXG5cbiAgIFRoZSBhbGdvcml0aG0gdXNlcyBhIHNpbXBsZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBkZWZpbml0aW9uIG9mIGFcbiAgIHdvcmQgYXMgZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGxldHRlcnMuICBUaGUgZGVmaW5pdGlvbiB3b3JrcyBpblxuICAgbWFueSBjb250ZXh0cyBidXQgaXQgbWVhbnMgdGhhdCBhcG9zdHJvcGhlcyBpbiBjb250cmFjdGlvbnMgYW5kXG4gICBwb3NzZXNzaXZlcyBmb3JtIHdvcmQgYm91bmRhcmllcywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgZGVzaXJlZFxuICAgcmVzdWx0OlxuXG4gICAgICA+Pj4gInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcyBmcm9tIHRoZSBVSyIudGl0bGUoKVxuICAgICAgIlRoZXlcJ1JlIEJpbGxcJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayJcblxuICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhclxuICAgZXhwcmVzc2lvbnM6XG5cbiAgICAgID4+PiBpbXBvcnQgcmVcbiAgICAgID4+PiBkZWYgdGl0bGVjYXNlKHMpOlxuICAgICAgLi4uICAgICByZXR1cm4gcmUuc3ViKHIiW0EtWmEtel0rKFwnW0EtWmEtel0rKT8iLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIGxhbWJkYSBtbzogbW8uZ3JvdXAoMClbMF0udXBwZXIoKSArXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSxcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBzKVxuICAgICAgLi4uXG4gICAgICA+Pj4gdGl0bGVjYXNlKCJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMuIilcbiAgICAgICJUaGV5XCdyZSBCaWxsXCdzIEZyaWVuZHMuIlxuXG5zdHIudHJhbnNsYXRlKG1hcClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgKnMqIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWRcbiAgIHRocm91Z2ggdGhlICptYXAqIHdoaWNoIG11c3QgYmUgYSBkaWN0aW9uYXJ5IG9mIFVuaWNvZGUgb3JkaW5hbHNcbiAgIChpbnRlZ2VycykgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciAiTm9uZSIuICBVbm1hcHBlZFxuICAgY2hhcmFjdGVycyBhcmUgbGVmdCB1bnRvdWNoZWQuIENoYXJhY3RlcnMgbWFwcGVkIHRvICJOb25lIiBhcmVcbiAgIGRlbGV0ZWQuXG5cbiAgIFlvdSBjYW4gdXNlICJzdHIubWFrZXRyYW5zKCkiIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIG1hcCBmcm9tXG4gICBjaGFyYWN0ZXItdG8tY2hhcmFjdGVyIG1hcHBpbmdzIGluIGRpZmZlcmVudCBmb3JtYXRzLlxuXG4gICBOb3RlOiBBbiBldmVuIG1vcmUgZmxleGlibGUgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGEgY3VzdG9tXG4gICAgIGNoYXJhY3RlciBtYXBwaW5nIGNvZGVjIHVzaW5nIHRoZSAiY29kZWNzIiBtb2R1bGUgKHNlZVxuICAgICAiZW5jb2RpbmdzLmNwMTI1MSIgZm9yIGFuIGV4YW1wbGUpLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLiAgTm90ZSB0aGF0ICJzdHIudXBwZXIoKS5pc3VwcGVyKCkiIG1pZ2h0IGJlXG4gICAiRmFsc2UiIGlmICJzIiBjb250YWlucyB1bmNhc2VkIGNoYXJhY3RlcnMgb3IgaWYgdGhlIFVuaWNvZGVcbiAgIGNhdGVnb3J5IG9mIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyKHMpIGlzIG5vdCAiTHUiIChMZXR0ZXIsXG4gICB1cHBlcmNhc2UpLCBidXQgZS5nLiAiTHQiIChMZXR0ZXIsIHRpdGxlY2FzZSkuXG5cbiAgIFRoZSB1cHBlcmNhc2luZyBhbGdvcml0aG0gdXNlZCBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuc3RyLnpmaWxsKHdpZHRoKVxuXG4gICBSZXR1cm4gdGhlIG51bWVyaWMgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggemVyb3MgaW4gYSBzdHJpbmcgb2ZcbiAgIGxlbmd0aCAqd2lkdGgqLiAgQSBzaWduIHByZWZpeCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gIFRoZSBvcmlnaW5hbFxuICAgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICJsZW4ocykiLlxuJywKICAnc3RyaW5ncyc6ICdcblN0cmluZyBhbmQgQnl0ZXMgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuU3RyaW5nIGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBzdHJpbmdsaXRlcmFsICAgOjo9IFtzdHJpbmdwcmVmaXhdKHNob3J0c3RyaW5nIHwgbG9uZ3N0cmluZylcbiAgIHN0cmluZ3ByZWZpeCAgICA6Oj0gInIiIHwgInUiIHwgIlIiIHwgIlUiXG4gICBzaG9ydHN0cmluZyAgICAgOjo9ICJcJyIgc2hvcnRzdHJpbmdpdGVtKiAiXCciIHwgXCciXCcgc2hvcnRzdHJpbmdpdGVtKiBcJyJcJ1xuICAgbG9uZ3N0cmluZyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nc3RyaW5naXRlbSogIlwnXCdcJyIgfCBcJyIiIlwnIGxvbmdzdHJpbmdpdGVtKiBcJyIiIlwnXG4gICBzaG9ydHN0cmluZ2l0ZW0gOjo9IHNob3J0c3RyaW5nY2hhciB8IHN0cmluZ2VzY2FwZXNlcVxuICAgbG9uZ3N0cmluZ2l0ZW0gIDo6PSBsb25nc3RyaW5nY2hhciB8IHN0cmluZ2VzY2FwZXNlcVxuICAgc2hvcnRzdHJpbmdjaGFyIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCIgb3IgbmV3bGluZSBvciB0aGUgcXVvdGU+XG4gICBsb25nc3RyaW5nY2hhciAgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIHN0cmluZ2VzY2FwZXNlcSA6Oj0gIlxcIiA8YW55IHNvdXJjZSBjaGFyYWN0ZXI+XG5cbiAgIGJ5dGVzbGl0ZXJhbCAgIDo6PSBieXRlc3ByZWZpeChzaG9ydGJ5dGVzIHwgbG9uZ2J5dGVzKVxuICAgYnl0ZXNwcmVmaXggICAgOjo9ICJiIiB8ICJCIiB8ICJiciIgfCAiQnIiIHwgImJSIiB8ICJCUiIgfCAicmIiIHwgInJCIiB8ICJSYiIgfCAiUkIiXG4gICBzaG9ydGJ5dGVzICAgICA6Oj0gIlwnIiBzaG9ydGJ5dGVzaXRlbSogIlwnIiB8IFwnIlwnIHNob3J0Ynl0ZXNpdGVtKiBcJyJcJ1xuICAgbG9uZ2J5dGVzICAgICAgOjo9ICJcJ1wnXCciIGxvbmdieXRlc2l0ZW0qICJcJ1wnXCciIHwgXCciIiJcJyBsb25nYnl0ZXNpdGVtKiBcJyIiIlwnXG4gICBzaG9ydGJ5dGVzaXRlbSA6Oj0gc2hvcnRieXRlc2NoYXIgfCBieXRlc2VzY2FwZXNlcVxuICAgbG9uZ2J5dGVzaXRlbSAgOjo9IGxvbmdieXRlc2NoYXIgfCBieXRlc2VzY2FwZXNlcVxuICAgc2hvcnRieXRlc2NoYXIgOjo9IDxhbnkgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiIG9yIG5ld2xpbmUgb3IgdGhlIHF1b3RlPlxuICAgbG9uZ2J5dGVzY2hhciAgOjo9IDxhbnkgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiPlxuICAgYnl0ZXNlc2NhcGVzZXEgOjo9ICJcXCIgPGFueSBBU0NJSSBjaGFyYWN0ZXI+XG5cbk9uZSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gbm90IGluZGljYXRlZCBieSB0aGVzZSBwcm9kdWN0aW9ucyBpcyB0aGF0XG53aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkIGJldHdlZW4gdGhlICJzdHJpbmdwcmVmaXgiIG9yICJieXRlc3ByZWZpeCJcbmFuZCB0aGUgcmVzdCBvZiB0aGUgbGl0ZXJhbC4gVGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IGlzIGRlZmluZWQgYnlcbnRoZSBlbmNvZGluZyBkZWNsYXJhdGlvbjsgaXQgaXMgVVRGLTggaWYgbm8gZW5jb2RpbmcgZGVjbGFyYXRpb24gaXNcbmdpdmVuIGluIHRoZSBzb3VyY2UgZmlsZTsgc2VlIHNlY3Rpb24gKkVuY29kaW5nIGRlY2xhcmF0aW9ucyouXG5cbkluIHBsYWluIEVuZ2xpc2g6IEJvdGggdHlwZXMgb2YgbGl0ZXJhbHMgY2FuIGJlIGVuY2xvc2VkIGluIG1hdGNoaW5nXG5zaW5nbGUgcXVvdGVzICgiXCciKSBvciBkb3VibGUgcXVvdGVzICgiIiIpLiAgVGhleSBjYW4gYWxzbyBiZSBlbmNsb3NlZFxuaW4gbWF0Y2hpbmcgZ3JvdXBzIG9mIHRocmVlIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzICh0aGVzZSBhcmVcbmdlbmVyYWxseSByZWZlcnJlZCB0byBhcyAqdHJpcGxlLXF1b3RlZCBzdHJpbmdzKikuICBUaGUgYmFja3NsYXNoXG4oIlxcIikgY2hhcmFjdGVyIGlzIHVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBvdGhlcndpc2UgaGF2ZSBhXG5zcGVjaWFsIG1lYW5pbmcsIHN1Y2ggYXMgbmV3bGluZSwgYmFja3NsYXNoIGl0c2VsZiwgb3IgdGhlIHF1b3RlXG5jaGFyYWN0ZXIuXG5cbkJ5dGVzIGxpdGVyYWxzIGFyZSBhbHdheXMgcHJlZml4ZWQgd2l0aCAiXCdiXCciIG9yICJcJ0JcJyI7IHRoZXkgcHJvZHVjZVxuYW4gaW5zdGFuY2Ugb2YgdGhlICJieXRlcyIgdHlwZSBpbnN0ZWFkIG9mIHRoZSAic3RyIiB0eXBlLiAgVGhleSBtYXlcbm9ubHkgY29udGFpbiBBU0NJSSBjaGFyYWN0ZXJzOyBieXRlcyB3aXRoIGEgbnVtZXJpYyB2YWx1ZSBvZiAxMjggb3JcbmdyZWF0ZXIgbXVzdCBiZSBleHByZXNzZWQgd2l0aCBlc2NhcGVzLlxuXG5BcyBvZiBQeXRob24gMy4zIGl0IGlzIHBvc3NpYmxlIGFnYWluIHRvIHByZWZpeCB1bmljb2RlIHN0cmluZ3Mgd2l0aCBhXG4idSIgcHJlZml4IHRvIHNpbXBsaWZ5IG1haW50ZW5hbmNlIG9mIGR1YWwgMi54IGFuZCAzLnggY29kZWJhc2VzLlxuXG5Cb3RoIHN0cmluZyBhbmQgYnl0ZXMgbGl0ZXJhbHMgbWF5IG9wdGlvbmFsbHkgYmUgcHJlZml4ZWQgd2l0aCBhXG5sZXR0ZXIgIlwnclwnIiBvciAiXCdSXCciOyBzdWNoIHN0cmluZ3MgYXJlIGNhbGxlZCAqcmF3IHN0cmluZ3MqIGFuZCB0cmVhdFxuYmFja3NsYXNoZXMgYXMgbGl0ZXJhbCBjaGFyYWN0ZXJzLiAgQXMgYSByZXN1bHQsIGluIHN0cmluZyBsaXRlcmFscyxcbiJcJ1xcVVwnIiBhbmQgIlwnXFx1XCciIGVzY2FwZXMgaW4gcmF3IHN0cmluZ3MgYXJlIG5vdCB0cmVhdGVkIHNwZWNpYWxseS5cbkdpdmVuIHRoYXQgUHl0aG9uIDIueFwncyByYXcgdW5pY29kZSBsaXRlcmFscyBiZWhhdmUgZGlmZmVyZW50bHkgdGhhblxuUHl0aG9uIDMueFwncyB0aGUgIlwndXJcJyIgc3ludGF4IGlzIG5vdCBzdXBwb3J0ZWQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogVGhlICJcJ3JiXCciIHByZWZpeCBvZiByYXcgYnl0ZXMgbGl0ZXJhbHMgaGFzXG4gICBiZWVuIGFkZGVkIGFzIGEgc3lub255bSBvZiAiXCdiclwnIi5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciB0aGUgdW5pY29kZSBsZWdhY3kgbGl0ZXJhbFxuICAgKCJ1XCd2YWx1ZVwnIikgd2FzIHJlaW50cm9kdWNlZCB0byBzaW1wbGlmeSB0aGUgbWFpbnRlbmFuY2Ugb2YgZHVhbFxuICAgUHl0aG9uIDIueCBhbmQgMy54IGNvZGViYXNlcy4gU2VlICoqUEVQIDQxNCoqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG5JbiB0cmlwbGUtcXVvdGVkIHN0cmluZ3MsIHVuZXNjYXBlZCBuZXdsaW5lcyBhbmQgcXVvdGVzIGFyZSBhbGxvd2VkXG4oYW5kIGFyZSByZXRhaW5lZCksIGV4Y2VwdCB0aGF0IHRocmVlIHVuZXNjYXBlZCBxdW90ZXMgaW4gYSByb3dcbnRlcm1pbmF0ZSB0aGUgc3RyaW5nLiAgKEEgInF1b3RlIiBpcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gb3BlbiB0aGVcbnN0cmluZywgaS5lLiBlaXRoZXIgIlwnIiBvciAiIiIuKVxuXG5Vbmxlc3MgYW4gIlwnclwnIiBvciAiXCdSXCciIHByZWZpeCBpcyBwcmVzZW50LCBlc2NhcGUgc2VxdWVuY2VzIGluXG5zdHJpbmdzIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gcnVsZXMgc2ltaWxhciB0byB0aG9zZSB1c2VkIGJ5XG5TdGFuZGFyZCBDLiAgVGhlIHJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmU6XG5cbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgRXNjYXBlIFNlcXVlbmNlICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgIHxcbis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcb29vIiAgICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggb2N0YWwgdmFsdWUgKm9vbyogIHwgKDEsMykgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXHhoaCIgICAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIGhleCB2YWx1ZSAqaGgqICAgICB8ICgyLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Fc2NhcGUgc2VxdWVuY2VzIG9ubHkgcmVjb2duaXplZCBpbiBzdHJpbmcgbGl0ZXJhbHMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG58ICJcXE57bmFtZX0iICAgICAgICB8IENoYXJhY3RlciBuYW1lZCAqbmFtZSogaW4gdGhlICAgICB8ICg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFx1eHh4eCIgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCAxNi1iaXQgaGV4IHZhbHVlICAgfCAoNSkgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcVXh4eHh4eHh4IiAgICAgIHwgQ2hhcmFjdGVyIHdpdGggMzItYml0IGhleCB2YWx1ZSAgIHwgKDYpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiBBcyBpbiBTdGFuZGFyZCBDLCB1cCB0byB0aHJlZSBvY3RhbCBkaWdpdHMgYXJlIGFjY2VwdGVkLlxuXG4yLiBVbmxpa2UgaW4gU3RhbmRhcmQgQywgZXhhY3RseSB0d28gaGV4IGRpZ2l0cyBhcmUgcmVxdWlyZWQuXG5cbjMuIEluIGEgYnl0ZXMgbGl0ZXJhbCwgaGV4YWRlY2ltYWwgYW5kIG9jdGFsIGVzY2FwZXMgZGVub3RlIHRoZVxuICAgYnl0ZSB3aXRoIHRoZSBnaXZlbiB2YWx1ZS4gSW4gYSBzdHJpbmcgbGl0ZXJhbCwgdGhlc2UgZXNjYXBlc1xuICAgZGVub3RlIGEgVW5pY29kZSBjaGFyYWN0ZXIgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuXG5cbjQuIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IFN1cHBvcnQgZm9yIG5hbWUgYWxpYXNlcyBbMV0gaGFzIGJlZW5cbiAgIGFkZGVkLlxuXG41LiBJbmRpdmlkdWFsIGNvZGUgdW5pdHMgd2hpY2ggZm9ybSBwYXJ0cyBvZiBhIHN1cnJvZ2F0ZSBwYWlyIGNhblxuICAgYmUgZW5jb2RlZCB1c2luZyB0aGlzIGVzY2FwZSBzZXF1ZW5jZS4gIEV4YWN0bHkgZm91ciBoZXggZGlnaXRzIGFyZVxuICAgcmVxdWlyZWQuXG5cbjYuIEFueSBVbmljb2RlIGNoYXJhY3RlciBjYW4gYmUgZW5jb2RlZCB0aGlzIHdheS4gIEV4YWN0bHkgZWlnaHRcbiAgIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG5Vbmxpa2UgU3RhbmRhcmQgQywgYWxsIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2VzIGFyZSBsZWZ0IGluIHRoZVxuc3RyaW5nIHVuY2hhbmdlZCwgaS5lLiwgKnRoZSBiYWNrc2xhc2ggaXMgbGVmdCBpbiB0aGUgc3RyaW5nKi4gIChUaGlzXG5iZWhhdmlvciBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmc6IGlmIGFuIGVzY2FwZSBzZXF1ZW5jZSBpcyBtaXN0eXBlZCxcbnRoZSByZXN1bHRpbmcgb3V0cHV0IGlzIG1vcmUgZWFzaWx5IHJlY29nbml6ZWQgYXMgYnJva2VuLikgIEl0IGlzIGFsc29cbmltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgb25seSByZWNvZ25pemVkIGluIHN0cmluZ1xubGl0ZXJhbHMgZmFsbCBpbnRvIHRoZSBjYXRlZ29yeSBvZiB1bnJlY29nbml6ZWQgZXNjYXBlcyBmb3IgYnl0ZXNcbmxpdGVyYWxzLlxuXG5FdmVuIGluIGEgcmF3IHN0cmluZywgc3RyaW5nIHF1b3RlcyBjYW4gYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLFxuYnV0IHRoZSBiYWNrc2xhc2ggcmVtYWlucyBpbiB0aGUgc3RyaW5nOyBmb3IgZXhhbXBsZSwgInIiXFwiIiIgaXMgYVxudmFsaWQgc3RyaW5nIGxpdGVyYWwgY29uc2lzdGluZyBvZiB0d28gY2hhcmFjdGVyczogYSBiYWNrc2xhc2ggYW5kIGFcbmRvdWJsZSBxdW90ZTsgInIiXFwiIiBpcyBub3QgYSB2YWxpZCBzdHJpbmcgbGl0ZXJhbCAoZXZlbiBhIHJhdyBzdHJpbmdcbmNhbm5vdCBlbmQgaW4gYW4gb2RkIG51bWJlciBvZiBiYWNrc2xhc2hlcykuICBTcGVjaWZpY2FsbHksICphIHJhd1xuc3RyaW5nIGNhbm5vdCBlbmQgaW4gYSBzaW5nbGUgYmFja3NsYXNoKiAoc2luY2UgdGhlIGJhY2tzbGFzaCB3b3VsZFxuZXNjYXBlIHRoZSBmb2xsb3dpbmcgcXVvdGUgY2hhcmFjdGVyKS4gIE5vdGUgYWxzbyB0aGF0IGEgc2luZ2xlXG5iYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGlzIGludGVycHJldGVkIGFzIHRob3NlIHR3byBjaGFyYWN0ZXJzXG5hcyBwYXJ0IG9mIHRoZSBzdHJpbmcsICpub3QqIGFzIGEgbGluZSBjb250aW51YXRpb24uXG4nLAogICdzdWJzY3JpcHRpb25zJzogJ1xuU3Vic2NyaXB0aW9uc1xuKioqKioqKioqKioqKlxuXG5BIHN1YnNjcmlwdGlvbiBzZWxlY3RzIGFuIGl0ZW0gb2YgYSBzZXF1ZW5jZSAoc3RyaW5nLCB0dXBsZSBvciBsaXN0KVxub3IgbWFwcGluZyAoZGljdGlvbmFyeSkgb2JqZWN0OlxuXG4gICBzdWJzY3JpcHRpb24gOjo9IHByaW1hcnkgIlsiIGV4cHJlc3Npb25fbGlzdCAiXSJcblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhbiBvYmplY3QgdGhhdCBzdXBwb3J0cyBzdWJzY3JpcHRpb24sXG5lLmcuIGEgbGlzdCBvciBkaWN0aW9uYXJ5LiAgVXNlci1kZWZpbmVkIG9iamVjdHMgY2FuIHN1cHBvcnRcbnN1YnNjcmlwdGlvbiBieSBkZWZpbmluZyBhICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbkZvciBidWlsdC1pbiBvYmplY3RzLCB0aGVyZSBhcmUgdHdvIHR5cGVzIG9mIG9iamVjdHMgdGhhdCBzdXBwb3J0XG5zdWJzY3JpcHRpb246XG5cbklmIHRoZSBwcmltYXJ5IGlzIGEgbWFwcGluZywgdGhlIGV4cHJlc3Npb24gbGlzdCBtdXN0IGV2YWx1YXRlIHRvIGFuXG5vYmplY3Qgd2hvc2UgdmFsdWUgaXMgb25lIG9mIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nLCBhbmQgdGhlXG5zdWJzY3JpcHRpb24gc2VsZWN0cyB0aGUgdmFsdWUgaW4gdGhlIG1hcHBpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0XG5rZXkuICAoVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBhIHR1cGxlIGV4Y2VwdCBpZiBpdCBoYXMgZXhhY3RseSBvbmVcbml0ZW0uKVxuXG5JZiB0aGUgcHJpbWFyeSBpcyBhIHNlcXVlbmNlLCB0aGUgZXhwcmVzc2lvbiAobGlzdCkgbXVzdCBldmFsdWF0ZSB0b1xuYW4gaW50ZWdlciBvciBhIHNsaWNlIChhcyBkaXNjdXNzZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uKS5cblxuVGhlIGZvcm1hbCBzeW50YXggbWFrZXMgbm8gc3BlY2lhbCBwcm92aXNpb24gZm9yIG5lZ2F0aXZlIGluZGljZXMgaW5cbnNlcXVlbmNlczsgaG93ZXZlciwgYnVpbHQtaW4gc2VxdWVuY2VzIGFsbCBwcm92aWRlIGEgIl9fZ2V0aXRlbV9fKCkiXG5tZXRob2QgdGhhdCBpbnRlcnByZXRzIG5lZ2F0aXZlIGluZGljZXMgYnkgYWRkaW5nIHRoZSBsZW5ndGggb2YgdGhlXG5zZXF1ZW5jZSB0byB0aGUgaW5kZXggKHNvIHRoYXQgInhbLTFdIiBzZWxlY3RzIHRoZSBsYXN0IGl0ZW0gb2YgIngiKS5cblRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIgbGVzcyB0aGFuIHRoZSBudW1iZXJcbm9mIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSwgYW5kIHRoZSBzdWJzY3JpcHRpb24gc2VsZWN0cyB0aGUgaXRlbSB3aG9zZVxuaW5kZXggaXMgdGhhdCB2YWx1ZSAoY291bnRpbmcgZnJvbSB6ZXJvKS4gU2luY2UgdGhlIHN1cHBvcnQgZm9yXG5uZWdhdGl2ZSBpbmRpY2VzIGFuZCBzbGljaW5nIG9jY3VycyBpbiB0aGUgb2JqZWN0XCdzICJfX2dldGl0ZW1fXygpIlxubWV0aG9kLCBzdWJjbGFzc2VzIG92ZXJyaWRpbmcgdGhpcyBtZXRob2Qgd2lsbCBuZWVkIHRvIGV4cGxpY2l0bHkgYWRkXG50aGF0IHN1cHBvcnQuXG5cbkEgc3RyaW5nXCdzIGl0ZW1zIGFyZSBjaGFyYWN0ZXJzLiAgQSBjaGFyYWN0ZXIgaXMgbm90IGEgc2VwYXJhdGUgZGF0YVxudHlwZSBidXQgYSBzdHJpbmcgb2YgZXhhY3RseSBvbmUgY2hhcmFjdGVyLlxuJywKICAndHJ1dGgnOiAnXG5UcnV0aCBWYWx1ZSBUZXN0aW5nXG4qKioqKioqKioqKioqKioqKioqXG5cbkFueSBvYmplY3QgY2FuIGJlIHRlc3RlZCBmb3IgdHJ1dGggdmFsdWUsIGZvciB1c2UgaW4gYW4gImlmIiBvclxuIndoaWxlIiBjb25kaXRpb24gb3IgYXMgb3BlcmFuZCBvZiB0aGUgQm9vbGVhbiBvcGVyYXRpb25zIGJlbG93LiBUaGVcbmZvbGxvd2luZyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgZmFsc2U6XG5cbiogIk5vbmUiXG5cbiogIkZhbHNlIlxuXG4qIHplcm8gb2YgYW55IG51bWVyaWMgdHlwZSwgZm9yIGV4YW1wbGUsICIwIiwgIjAuMCIsICIwaiIuXG5cbiogYW55IGVtcHR5IHNlcXVlbmNlLCBmb3IgZXhhbXBsZSwgIlwnXCciLCAiKCkiLCAiW10iLlxuXG4qIGFueSBlbXB0eSBtYXBwaW5nLCBmb3IgZXhhbXBsZSwgInt9Ii5cblxuKiBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkIGNsYXNzZXMsIGlmIHRoZSBjbGFzcyBkZWZpbmVzIGFcbiAgIl9fYm9vbF9fKCkiIG9yICJfX2xlbl9fKCkiIG1ldGhvZCwgd2hlbiB0aGF0IG1ldGhvZCByZXR1cm5zIHRoZVxuICBpbnRlZ2VyIHplcm8gb3IgImJvb2wiIHZhbHVlICJGYWxzZSIuIFsxXVxuXG5BbGwgb3RoZXIgdmFsdWVzIGFyZSBjb25zaWRlcmVkIHRydWUgLS0tIHNvIG9iamVjdHMgb2YgbWFueSB0eXBlcyBhcmVcbmFsd2F5cyB0cnVlLlxuXG5PcGVyYXRpb25zIGFuZCBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBoYXZlIGEgQm9vbGVhbiByZXN1bHQgYWx3YXlzXG5yZXR1cm4gIjAiIG9yICJGYWxzZSIgZm9yIGZhbHNlIGFuZCAiMSIgb3IgIlRydWUiIGZvciB0cnVlLCB1bmxlc3Ncbm90aGVyd2lzZSBzdGF0ZWQuIChJbXBvcnRhbnQgZXhjZXB0aW9uOiB0aGUgQm9vbGVhbiBvcGVyYXRpb25zICJvciJcbmFuZCAiYW5kIiBhbHdheXMgcmV0dXJuIG9uZSBvZiB0aGVpciBvcGVyYW5kcy4pXG4nLAogICd0cnknOiAnXG5UaGUgInRyeSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSAidHJ5IiBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsiYXMiIHRhcmdldF1dICI6IiBzdWl0ZSkrXG4gICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuICAgICAgICAgICAgICAgICBbImZpbmFsbHkiICI6IiBzdWl0ZV1cbiAgIHRyeTJfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICJmaW5hbGx5IiAiOiIgc3VpdGVcblxuVGhlICJleGNlcHQiIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlbiBub1xuZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgInRyeSIgY2xhdXNlLCBubyBleGNlcHRpb24gaGFuZGxlciBpc1xuZXhlY3V0ZWQuIFdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgInRyeSIgc3VpdGUsIGEgc2VhcmNoIGZvciBhblxuZXhjZXB0aW9uIGhhbmRsZXIgaXMgc3RhcnRlZC4gIFRoaXMgc2VhcmNoIGluc3BlY3RzIHRoZSBleGNlcHQgY2xhdXNlc1xuaW4gdHVybiB1bnRpbCBvbmUgaXMgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBleGNlcHRpb24uICBBbiBleHByZXNzaW9uLVxubGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXMgYW55XG5leGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXQgZXhwcmVzc2lvblxuaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlIHJlc3VsdGluZ1xub2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXMgY29tcGF0aWJsZVxud2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGUgZXhjZXB0aW9uXG5vYmplY3Qgb3IgYSB0dXBsZSBjb250YWluaW5nIGFuIGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRoZSBleGNlcHRpb24uXG5cbklmIG5vIGV4Y2VwdCBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLCB0aGUgc2VhcmNoIGZvciBhbiBleGNlcHRpb25cbmhhbmRsZXIgY29udGludWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvbiB0aGUgaW52b2NhdGlvbiBzdGFjay5cblsxXVxuXG5JZiB0aGUgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIHRoZSBoZWFkZXIgb2YgYW4gZXhjZXB0IGNsYXVzZVxucmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIG9yaWdpbmFsIHNlYXJjaCBmb3IgYSBoYW5kbGVyIGlzIGNhbmNlbGVkIGFuZFxuYSBzZWFyY2ggc3RhcnRzIGZvciB0aGUgbmV3IGV4Y2VwdGlvbiBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb25cbnRoZSBjYWxsIHN0YWNrIChpdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBlbnRpcmUgInRyeSIgc3RhdGVtZW50IHJhaXNlZFxudGhlIGV4Y2VwdGlvbikuXG5cbldoZW4gYSBtYXRjaGluZyBleGNlcHQgY2xhdXNlIGlzIGZvdW5kLCB0aGUgZXhjZXB0aW9uIGlzIGFzc2lnbmVkIHRvXG50aGUgdGFyZ2V0IHNwZWNpZmllZCBhZnRlciB0aGUgImFzIiBrZXl3b3JkIGluIHRoYXQgZXhjZXB0IGNsYXVzZSwgaWZcbnByZXNlbnQsIGFuZCB0aGUgZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZC4gIEFsbCBleGNlcHRcbmNsYXVzZXMgbXVzdCBoYXZlIGFuIGV4ZWN1dGFibGUgYmxvY2suICBXaGVuIHRoZSBlbmQgb2YgdGhpcyBibG9jayBpc1xucmVhY2hlZCwgZXhlY3V0aW9uIGNvbnRpbnVlcyBub3JtYWxseSBhZnRlciB0aGUgZW50aXJlIHRyeSBzdGF0ZW1lbnQuXG4oVGhpcyBtZWFucyB0aGF0IGlmIHR3byBuZXN0ZWQgaGFuZGxlcnMgZXhpc3QgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbixcbmFuZCB0aGUgZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgdHJ5IGNsYXVzZSBvZiB0aGUgaW5uZXIgaGFuZGxlciwgdGhlXG5vdXRlciBoYW5kbGVyIHdpbGwgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLilcblxuV2hlbiBhbiBleGNlcHRpb24gaGFzIGJlZW4gYXNzaWduZWQgdXNpbmcgImFzIHRhcmdldCIsIGl0IGlzIGNsZWFyZWRcbmF0IHRoZSBlbmQgb2YgdGhlIGV4Y2VwdCBjbGF1c2UuICBUaGlzIGlzIGFzIGlmXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgZm9vXG5cbndhcyB0cmFuc2xhdGVkIHRvXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgdHJ5OlxuICAgICAgICAgICBmb29cbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICBkZWwgTlxuXG5UaGlzIG1lYW5zIHRoZSBleGNlcHRpb24gbXVzdCBiZSBhc3NpZ25lZCB0byBhIGRpZmZlcmVudCBuYW1lIHRvIGJlXG5hYmxlIHRvIHJlZmVyIHRvIGl0IGFmdGVyIHRoZSBleGNlcHQgY2xhdXNlLiAgRXhjZXB0aW9ucyBhcmUgY2xlYXJlZFxuYmVjYXVzZSB3aXRoIHRoZSB0cmFjZWJhY2sgYXR0YWNoZWQgdG8gdGhlbSwgdGhleSBmb3JtIGEgcmVmZXJlbmNlXG5jeWNsZSB3aXRoIHRoZSBzdGFjayBmcmFtZSwga2VlcGluZyBhbGwgbG9jYWxzIGluIHRoYXQgZnJhbWUgYWxpdmVcbnVudGlsIHRoZSBuZXh0IGdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMuXG5cbkJlZm9yZSBhbiBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZVxuZXhjZXB0aW9uIGFyZSBzdG9yZWQgaW4gdGhlICJzeXMiIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2VzcyB2aWFcbiJzeXMuZXhjX2luZm8oKSIuICJzeXMuZXhjX2luZm8oKSIgcmV0dXJucyBhIDMtdHVwbGUgY29uc2lzdGluZyBvZiB0aGVcbmV4Y2VwdGlvbiBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSBhbmQgYSB0cmFjZWJhY2sgb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIGlkZW50aWZ5aW5nIHRoZSBwb2ludCBpbiB0aGVcbnByb2dyYW0gd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gICJzeXMuZXhjX2luZm8oKSIgdmFsdWVzIGFyZVxucmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nXG5mcm9tIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsICJlbHNlIiBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlICJ0cnkiIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlICJlbHNlIiBjbGF1c2UgYXJlXG5ub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nICJleGNlcHQiIGNsYXVzZXMuXG5cbklmICJmaW5hbGx5IiBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlICJ0cnkiXG5jbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgImV4Y2VwdCIgYW5kICJlbHNlIiBjbGF1c2VzLiAgSWYgYW5cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3QgaGFuZGxlZCwgdGhlXG5leGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSAiZmluYWxseSIgY2xhdXNlIGlzIGV4ZWN1dGVkLiAgSWZcbnRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kIG9mIHRoZSAiZmluYWxseSJcbmNsYXVzZS4gIElmIHRoZSAiZmluYWxseSIgY2xhdXNlIHJhaXNlcyBhbm90aGVyIGV4Y2VwdGlvbiwgdGhlIHNhdmVkXG5leGNlcHRpb24gaXMgc2V0IGFzIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgZXhjZXB0aW9uLiBJZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UgZXhlY3V0ZXMgYSAicmV0dXJuIiBvciAiYnJlYWsiIHN0YXRlbWVudCwgdGhlIHNhdmVkIGV4Y2VwdGlvblxuaXMgZGlzY2FyZGVkOlxuXG4gICBkZWYgZigpOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgMS8wXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgcmV0dXJuIDQyXG5cbiAgID4+PiBmKClcbiAgIDQyXG5cblRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbSBkdXJpbmdcbmV4ZWN1dGlvbiBvZiB0aGUgImZpbmFsbHkiIGNsYXVzZS5cblxuV2hlbiBhICJyZXR1cm4iLCAiYnJlYWsiIG9yICJjb250aW51ZSIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluIHRoZVxuInRyeSIgc3VpdGUgb2YgYSAidHJ5Ii4uLiJmaW5hbGx5IiBzdGF0ZW1lbnQsIHRoZSAiZmluYWxseSIgY2xhdXNlIGlzXG5hbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSAiY29udGludWUiIHN0YXRlbWVudCBpcyBpbGxlZ2FsIGluXG50aGUgImZpbmFsbHkiIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYSBwcm9ibGVtIHdpdGggdGhlIGN1cnJlbnRcbmltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cbkFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZXhjZXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvblxuKkV4Y2VwdGlvbnMqLCBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlICJyYWlzZSIgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cbicsCi0gJ3R5cGVzJzogJ1xuVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5XG4qKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQmVsb3cgaXMgYSBsaXN0IG9mIHRoZSB0eXBlcyB0aGF0IGFyZSBidWlsdCBpbnRvIFB5dGhvbi4gIEV4dGVuc2lvblxubW9kdWxlcyAod3JpdHRlbiBpbiBDLCBKYXZhLCBvciBvdGhlciBsYW5ndWFnZXMsIGRlcGVuZGluZyBvbiB0aGVcbmltcGxlbWVudGF0aW9uKSBjYW4gZGVmaW5lIGFkZGl0aW9uYWwgdHlwZXMuICBGdXR1cmUgdmVyc2lvbnMgb2ZcblB5dGhvbiBtYXkgYWRkIHR5cGVzIHRvIHRoZSB0eXBlIGhpZXJhcmNoeSAoZS5nLiwgcmF0aW9uYWwgbnVtYmVycyxcbmVmZmljaWVudGx5IHN0b3JlZCBhcnJheXMgb2YgaW50ZWdlcnMsIGV0Yy4pLCBhbHRob3VnaCBzdWNoIGFkZGl0aW9uc1xud2lsbCBvZnRlbiBiZSBwcm92aWRlZCB2aWEgdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW5zdGVhZC5cblxuU29tZSBvZiB0aGUgdHlwZSBkZXNjcmlwdGlvbnMgYmVsb3cgY29udGFpbiBhIHBhcmFncmFwaCBsaXN0aW5nXG5cJ3NwZWNpYWwgYXR0cmlidXRlcy5cJyAgVGhlc2UgYXJlIGF0dHJpYnV0ZXMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGVcbmltcGxlbWVudGF0aW9uIGFuZCBhcmUgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZS4gIFRoZWlyIGRlZmluaXRpb25cbm1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuTm9uZVxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lICJOb25lIi4gSXRcbiAgIGlzIHVzZWQgdG8gc2lnbmlmeSB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIG1hbnkgc2l0dWF0aW9ucywgZS5nLixcbiAgIGl0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZG9uXCd0IGV4cGxpY2l0bHkgcmV0dXJuXG4gICBhbnl0aGluZy4gSXRzIHRydXRoIHZhbHVlIGlzIGZhbHNlLlxuXG5Ob3RJbXBsZW1lbnRlZFxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lXG4gICAiTm90SW1wbGVtZW50ZWQiLiBOdW1lcmljIG1ldGhvZHMgYW5kIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIG1heVxuICAgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhleSBkbyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIHRoZVxuICAgb3BlcmFuZHMgcHJvdmlkZWQuICAoVGhlIGludGVycHJldGVyIHdpbGwgdGhlbiB0cnkgdGhlIHJlZmxlY3RlZFxuICAgb3BlcmF0aW9uLCBvciBzb21lIG90aGVyIGZhbGxiYWNrLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdG9yLikgIEl0c1xuICAgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuRWxsaXBzaXNcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgbGl0ZXJhbCAiLi4uIiBvciB0aGVcbiAgIGJ1aWx0LWluIG5hbWUgIkVsbGlwc2lzIi4gIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG4ibnVtYmVycy5OdW1iZXIiXG4gICBUaGVzZSBhcmUgY3JlYXRlZCBieSBudW1lcmljIGxpdGVyYWxzIGFuZCByZXR1cm5lZCBhcyByZXN1bHRzIGJ5XG4gICBhcml0aG1ldGljIG9wZXJhdG9ycyBhbmQgYXJpdGhtZXRpYyBidWlsdC1pbiBmdW5jdGlvbnMuICBOdW1lcmljXG4gICBvYmplY3RzIGFyZSBpbW11dGFibGU7IG9uY2UgY3JlYXRlZCB0aGVpciB2YWx1ZSBuZXZlciBjaGFuZ2VzLlxuICAgUHl0aG9uIG51bWJlcnMgYXJlIG9mIGNvdXJzZSBzdHJvbmdseSByZWxhdGVkIHRvIG1hdGhlbWF0aWNhbFxuICAgbnVtYmVycywgYnV0IHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIG9mIG51bWVyaWNhbCByZXByZXNlbnRhdGlvblxuICAgaW4gY29tcHV0ZXJzLlxuXG4gICBQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGludGVnZXJzLCBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBhbmRcbiAgIGNvbXBsZXggbnVtYmVyczpcblxuICAgIm51bWJlcnMuSW50ZWdyYWwiXG4gICAgICBUaGVzZSByZXByZXNlbnQgZWxlbWVudHMgZnJvbSB0aGUgbWF0aGVtYXRpY2FsIHNldCBvZiBpbnRlZ2Vyc1xuICAgICAgKHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSkuXG5cbiAgICAgIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgaW50ZWdlcnM6XG5cbiAgICAgIEludGVnZXJzICgiaW50IilcblxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IG51bWJlcnMgaW4gYW4gdW5saW1pdGVkIHJhbmdlLCBzdWJqZWN0IHRvXG4gICAgICAgICBhdmFpbGFibGUgKHZpcnR1YWwpIG1lbW9yeSBvbmx5LiAgRm9yIHRoZSBwdXJwb3NlIG9mIHNoaWZ0XG4gICAgICAgICBhbmQgbWFzayBvcGVyYXRpb25zLCBhIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyBhc3N1bWVkLCBhbmRcbiAgICAgICAgIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGluIGEgdmFyaWFudCBvZiAyXCdzXG4gICAgICAgICBjb21wbGVtZW50IHdoaWNoIGdpdmVzIHRoZSBpbGx1c2lvbiBvZiBhbiBpbmZpbml0ZSBzdHJpbmcgb2ZcbiAgICAgICAgIHNpZ24gYml0cyBleHRlbmRpbmcgdG8gdGhlIGxlZnQuXG5cbiAgICAgIEJvb2xlYW5zICgiYm9vbCIpXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgdGhlIHRydXRoIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZS4gIFRoZSB0d29cbiAgICAgICAgIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZXMgIkZhbHNlIiBhbmQgIlRydWUiIGFyZSB0aGVcbiAgICAgICAgIG9ubHkgQm9vbGVhbiBvYmplY3RzLiBUaGUgQm9vbGVhbiB0eXBlIGlzIGEgc3VidHlwZSBvZiB0aGVcbiAgICAgICAgIGludGVnZXIgdHlwZSwgYW5kIEJvb2xlYW4gdmFsdWVzIGJlaGF2ZSBsaWtlIHRoZSB2YWx1ZXMgMCBhbmRcbiAgICAgICAgIDEsIHJlc3BlY3RpdmVseSwgaW4gYWxtb3N0IGFsbCBjb250ZXh0cywgdGhlIGV4Y2VwdGlvbiBiZWluZ1xuICAgICAgICAgdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHN0cmluZywgdGhlIHN0cmluZ3MgIiJGYWxzZSIiIG9yXG4gICAgICAgICAiIlRydWUiIiBhcmUgcmV0dXJuZWQsIHJlc3BlY3RpdmVseS5cblxuICAgICAgVGhlIHJ1bGVzIGZvciBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIGFyZSBpbnRlbmRlZCB0byBnaXZlIHRoZVxuICAgICAgbW9zdCBtZWFuaW5nZnVsIGludGVycHJldGF0aW9uIG9mIHNoaWZ0IGFuZCBtYXNrIG9wZXJhdGlvbnNcbiAgICAgIGludm9sdmluZyBuZWdhdGl2ZSBpbnRlZ2Vycy5cblxuICAgIm51bWJlcnMuUmVhbCIgKCJmbG9hdCIpXG4gICAgICBUaGVzZSByZXByZXNlbnQgbWFjaGluZS1sZXZlbCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50XG4gICAgICBudW1iZXJzLiBZb3UgYXJlIGF0IHRoZSBtZXJjeSBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lXG4gICAgICBhcmNoaXRlY3R1cmUgKGFuZCBDIG9yIEphdmEgaW1wbGVtZW50YXRpb24pIGZvciB0aGUgYWNjZXB0ZWRcbiAgICAgIHJhbmdlIGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdy4gUHl0aG9uIGRvZXMgbm90IHN1cHBvcnQgc2luZ2xlLVxuICAgICAgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnM7IHRoZSBzYXZpbmdzIGluIHByb2Nlc3NvciBhbmRcbiAgICAgIG1lbW9yeSB1c2FnZSB0aGF0IGFyZSB1c3VhbGx5IHRoZSByZWFzb24gZm9yIHVzaW5nIHRoZXNlIGlzXG4gICAgICBkd2FyZmVkIGJ5IHRoZSBvdmVyaGVhZCBvZiB1c2luZyBvYmplY3RzIGluIFB5dGhvbiwgc28gdGhlcmUgaXNcbiAgICAgIG5vIHJlYXNvbiB0byBjb21wbGljYXRlIHRoZSBsYW5ndWFnZSB3aXRoIHR3byBraW5kcyBvZiBmbG9hdGluZ1xuICAgICAgcG9pbnQgbnVtYmVycy5cblxuICAgIm51bWJlcnMuQ29tcGxleCIgKCJjb21wbGV4IilcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBjb21wbGV4IG51bWJlcnMgYXMgYSBwYWlyIG9mIG1hY2hpbmUtbGV2ZWxcbiAgICAgIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gIFRoZSBzYW1lIGNhdmVhdHMgYXBwbHlcbiAgICAgIGFzIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLiBUaGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIGFcbiAgICAgIGNvbXBsZXggbnVtYmVyICJ6IiBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIHJlYWQtb25seVxuICAgICAgYXR0cmlidXRlcyAiei5yZWFsIiBhbmQgInouaW1hZyIuXG5cblNlcXVlbmNlc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBvcmRlcmVkIHNldHMgaW5kZXhlZCBieSBub24tbmVnYXRpdmVcbiAgIG51bWJlcnMuIFRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtc1xuICAgb2YgYSBzZXF1ZW5jZS4gV2hlbiB0aGUgbGVuZ3RoIG9mIGEgc2VxdWVuY2UgaXMgKm4qLCB0aGUgaW5kZXggc2V0XG4gICBjb250YWlucyB0aGUgbnVtYmVycyAwLCAxLCAuLi4sICpuKi0xLiAgSXRlbSAqaSogb2Ygc2VxdWVuY2UgKmEqIGlzXG4gICBzZWxlY3RlZCBieSAiYVtpXSIuXG5cbiAgIFNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgc2xpY2luZzogImFbaTpqXSIgc2VsZWN0cyBhbGwgaXRlbXMgd2l0aFxuICAgaW5kZXggKmsqIHN1Y2ggdGhhdCAqaSogIjw9IiAqayogIjwiICpqKi4gIFdoZW4gdXNlZCBhcyBhblxuICAgZXhwcmVzc2lvbiwgYSBzbGljZSBpcyBhIHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUuICBUaGlzIGltcGxpZXNcbiAgIHRoYXQgdGhlIGluZGV4IHNldCBpcyByZW51bWJlcmVkIHNvIHRoYXQgaXQgc3RhcnRzIGF0IDAuXG5cbiAgIFNvbWUgc2VxdWVuY2VzIGFsc28gc3VwcG9ydCAiZXh0ZW5kZWQgc2xpY2luZyIgd2l0aCBhIHRoaXJkICJzdGVwIlxuICAgcGFyYW1ldGVyOiAiYVtpOmo6a10iIHNlbGVjdHMgYWxsIGl0ZW1zIG9mICphKiB3aXRoIGluZGV4ICp4KiB3aGVyZVxuICAgInggPSBpICsgbiprIiwgKm4qICI+PSIgIjAiIGFuZCAqaSogIjw9IiAqeCogIjwiICpqKi5cblxuICAgU2VxdWVuY2VzIGFyZSBkaXN0aW5ndWlzaGVkIGFjY29yZGluZyB0byB0aGVpciBtdXRhYmlsaXR5OlxuXG4gICBJbW11dGFibGUgc2VxdWVuY2VzXG4gICAgICBBbiBvYmplY3Qgb2YgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGUgY2Fubm90IGNoYW5nZSBvbmNlIGl0IGlzXG4gICAgICBjcmVhdGVkLiAgKElmIHRoZSBvYmplY3QgY29udGFpbnMgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLFxuICAgICAgdGhlc2Ugb3RoZXIgb2JqZWN0cyBtYXkgYmUgbXV0YWJsZSBhbmQgbWF5IGJlIGNoYW5nZWQ7IGhvd2V2ZXIsXG4gICAgICB0aGUgY29sbGVjdGlvbiBvZiBvYmplY3RzIGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgYW4gaW1tdXRhYmxlXG4gICAgICBvYmplY3QgY2Fubm90IGNoYW5nZS4pXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXM6XG5cbiAgICAgIFN0cmluZ3NcbiAgICAgICAgIEEgc3RyaW5nIGlzIGEgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoYXQgcmVwcmVzZW50IFVuaWNvZGVcbiAgICAgICAgIGNvZGVwb2ludHMuIEFsbCB0aGUgY29kZXBvaW50cyBpbiByYW5nZSAiVSswMDAwIC0gVSsxMEZGRkYiXG4gICAgICAgICBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSBzdHJpbmcuICBQeXRob24gZG9lc25cJ3QgaGF2ZSBhICJjaHIiXG4gICAgICAgICB0eXBlLCBhbmQgZXZlcnkgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgaXMgcmVwcmVzZW50ZWQgYXMgYVxuICAgICAgICAgc3RyaW5nIG9iamVjdCB3aXRoIGxlbmd0aCAiMSIuICBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gIm9yZCgpIlxuICAgICAgICAgY29udmVydHMgYSBjaGFyYWN0ZXIgdG8gaXRzIGNvZGVwb2ludCAoYXMgYW4gaW50ZWdlcik7XG4gICAgICAgICAiY2hyKCkiIGNvbnZlcnRzIGFuIGludGVnZXIgaW4gcmFuZ2UgIjAgLSAxMEZGRkYiIHRvIHRoZVxuICAgICAgICAgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIuICJzdHIuZW5jb2RlKCkiIGNhbiBiZSB1c2VkIHRvXG4gICAgICAgICBjb252ZXJ0IGEgInN0ciIgdG8gImJ5dGVzIiB1c2luZyB0aGUgZ2l2ZW4gZW5jb2RpbmcsIGFuZFxuICAgICAgICAgImJ5dGVzLmRlY29kZSgpIiBjYW4gYmUgdXNlZCB0byBhY2hpZXZlIHRoZSBvcHBvc2l0ZS5cblxuICAgICAgVHVwbGVzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSB0dXBsZSBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiBUdXBsZXMgb2ZcbiAgICAgICAgIHR3byBvciBtb3JlIGl0ZW1zIGFyZSBmb3JtZWQgYnkgY29tbWEtc2VwYXJhdGVkIGxpc3RzIG9mXG4gICAgICAgICBleHByZXNzaW9ucy4gIEEgdHVwbGUgb2Ygb25lIGl0ZW0gKGEgXCdzaW5nbGV0b25cJykgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYWZmaXhpbmcgYSBjb21tYSB0byBhbiBleHByZXNzaW9uIChhbiBleHByZXNzaW9uIGJ5XG4gICAgICAgICBpdHNlbGYgZG9lcyBub3QgY3JlYXRlIGEgdHVwbGUsIHNpbmNlIHBhcmVudGhlc2VzIG11c3QgYmVcbiAgICAgICAgIHVzYWJsZSBmb3IgZ3JvdXBpbmcgb2YgZXhwcmVzc2lvbnMpLiAgQW4gZW1wdHkgdHVwbGUgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYW4gZW1wdHkgcGFpciBvZiBwYXJlbnRoZXNlcy5cblxuICAgICAgQnl0ZXNcbiAgICAgICAgIEEgYnl0ZXMgb2JqZWN0IGlzIGFuIGltbXV0YWJsZSBhcnJheS4gIFRoZSBpdGVtcyBhcmUgOC1iaXRcbiAgICAgICAgIGJ5dGVzLCByZXByZXNlbnRlZCBieSBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgMjU2LlxuICAgICAgICAgQnl0ZXMgbGl0ZXJhbHMgKGxpa2UgImJcJ2FiY1wnIikgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgICAgICAgImJ5dGVzKCkiIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBieXRlcyBvYmplY3RzLiAgQWxzbyxcbiAgICAgICAgIGJ5dGVzIG9iamVjdHMgY2FuIGJlIGRlY29kZWQgdG8gc3RyaW5ncyB2aWEgdGhlICJkZWNvZGUoKSJcbiAgICAgICAgIG1ldGhvZC5cblxuICAgTXV0YWJsZSBzZXF1ZW5jZXNcbiAgICAgIE11dGFibGUgc2VxdWVuY2VzIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQuICBUaGVcbiAgICAgIHN1YnNjcmlwdGlvbiBhbmQgc2xpY2luZyBub3RhdGlvbnMgY2FuIGJlIHVzZWQgYXMgdGhlIHRhcmdldCBvZlxuICAgICAgYXNzaWdubWVudCBhbmQgImRlbCIgKGRlbGV0ZSkgc3RhdGVtZW50cy5cblxuICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIG11dGFibGUgc2VxdWVuY2UgdHlwZXM6XG5cbiAgICAgIExpc3RzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSBsaXN0IGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuICBMaXN0cyBhcmVcbiAgICAgICAgIGZvcm1lZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaW5cbiAgICAgICAgIHNxdWFyZSBicmFja2V0cy4gKE5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gc3BlY2lhbCBjYXNlcyBuZWVkZWRcbiAgICAgICAgIHRvIGZvcm0gbGlzdHMgb2YgbGVuZ3RoIDAgb3IgMS4pXG5cbiAgICAgIEJ5dGUgQXJyYXlzXG4gICAgICAgICBBIGJ5dGVhcnJheSBvYmplY3QgaXMgYSBtdXRhYmxlIGFycmF5LiBUaGV5IGFyZSBjcmVhdGVkIGJ5XG4gICAgICAgICB0aGUgYnVpbHQtaW4gImJ5dGVhcnJheSgpIiBjb25zdHJ1Y3Rvci4gIEFzaWRlIGZyb20gYmVpbmdcbiAgICAgICAgIG11dGFibGUgKGFuZCBoZW5jZSB1bmhhc2hhYmxlKSwgYnl0ZSBhcnJheXMgb3RoZXJ3aXNlIHByb3ZpZGVcbiAgICAgICAgIHRoZSBzYW1lIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbGl0eSBhcyBpbW11dGFibGUgYnl0ZXNcbiAgICAgICAgIG9iamVjdHMuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlICJhcnJheSIgcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBleGFtcGxlIG9mIGFcbiAgICAgIG11dGFibGUgc2VxdWVuY2UgdHlwZSwgYXMgZG9lcyB0aGUgImNvbGxlY3Rpb25zIiBtb2R1bGUuXG5cblNldCB0eXBlc1xuICAgVGhlc2UgcmVwcmVzZW50IHVub3JkZXJlZCwgZmluaXRlIHNldHMgb2YgdW5pcXVlLCBpbW11dGFibGVcbiAgIG9iamVjdHMuIEFzIHN1Y2gsIHRoZXkgY2Fubm90IGJlIGluZGV4ZWQgYnkgYW55IHN1YnNjcmlwdC4gSG93ZXZlcixcbiAgIHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIlxuICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgc2V0LiBDb21tb24gdXNlcyBmb3Igc2V0cyBhcmUgZmFzdFxuICAgbWVtYmVyc2hpcCB0ZXN0aW5nLCByZW1vdmluZyBkdXBsaWNhdGVzIGZyb20gYSBzZXF1ZW5jZSwgYW5kXG4gICBjb21wdXRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnRlcnNlY3Rpb24sIHVuaW9uLFxuICAgZGlmZmVyZW5jZSwgYW5kIHN5bW1ldHJpYyBkaWZmZXJlbmNlLlxuXG4gICBGb3Igc2V0IGVsZW1lbnRzLCB0aGUgc2FtZSBpbW11dGFiaWxpdHkgcnVsZXMgYXBwbHkgYXMgZm9yXG4gICBkaWN0aW9uYXJ5IGtleXMuIE5vdGUgdGhhdCBudW1lcmljIHR5cGVzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3JcbiAgIG51bWVyaWMgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgIjEiIGFuZFxuICAgIjEuMCIpLCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBiZSBjb250YWluZWQgaW4gYSBzZXQuXG5cbiAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBzZXQgdHlwZXM6XG5cbiAgIFNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhIG11dGFibGUgc2V0LiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgInNldCgpIiBjb25zdHJ1Y3RvciBhbmQgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgYnkgc2V2ZXJhbFxuICAgICAgbWV0aG9kcywgc3VjaCBhcyAiYWRkKCkiLlxuXG4gICBGcm96ZW4gc2V0c1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGFuIGltbXV0YWJsZSBzZXQuICBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZVxuICAgICAgYnVpbHQtaW4gImZyb3plbnNldCgpIiBjb25zdHJ1Y3Rvci4gIEFzIGEgZnJvemVuc2V0IGlzIGltbXV0YWJsZVxuICAgICAgYW5kICpoYXNoYWJsZSosIGl0IGNhbiBiZSB1c2VkIGFnYWluIGFzIGFuIGVsZW1lbnQgb2YgYW5vdGhlclxuICAgICAgc2V0LCBvciBhcyBhIGRpY3Rpb25hcnkga2V5LlxuXG5NYXBwaW5nc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBhcmJpdHJhcnkgaW5kZXhcbiAgIHNldHMuIFRoZSBzdWJzY3JpcHQgbm90YXRpb24gImFba10iIHNlbGVjdHMgdGhlIGl0ZW0gaW5kZXhlZCBieSAiayJcbiAgIGZyb20gdGhlIG1hcHBpbmcgImEiOyB0aGlzIGNhbiBiZSB1c2VkIGluIGV4cHJlc3Npb25zIGFuZCBhcyB0aGVcbiAgIHRhcmdldCBvZiBhc3NpZ25tZW50cyBvciAiZGVsIiBzdGF0ZW1lbnRzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICJsZW4oKSIgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgbWFwcGluZy5cblxuICAgVGhlcmUgaXMgY3VycmVudGx5IGEgc2luZ2xlIGludHJpbnNpYyBtYXBwaW5nIHR5cGU6XG5cbiAgIERpY3Rpb25hcmllc1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBuZWFybHlcbiAgICAgIGFyYml0cmFyeSB2YWx1ZXMuICBUaGUgb25seSB0eXBlcyBvZiB2YWx1ZXMgbm90IGFjY2VwdGFibGUgYXNcbiAgICAgIGtleXMgYXJlIHZhbHVlcyBjb250YWluaW5nIGxpc3RzIG9yIGRpY3Rpb25hcmllcyBvciBvdGhlclxuICAgICAgbXV0YWJsZSB0eXBlcyB0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbiAgICAgIGlkZW50aXR5LCB0aGUgcmVhc29uIGJlaW5nIHRoYXQgdGhlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvZlxuICAgICAgZGljdGlvbmFyaWVzIHJlcXVpcmVzIGEga2V5XCdzIGhhc2ggdmFsdWUgdG8gcmVtYWluIGNvbnN0YW50LlxuICAgICAgTnVtZXJpYyB0eXBlcyB1c2VkIGZvciBrZXlzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpY1xuICAgICAgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgIjEiIGFuZCAiMS4wIilcbiAgICAgIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG8gaW5kZXggdGhlIHNhbWVcbiAgICAgIGRpY3Rpb25hcnkgZW50cnkuXG5cbiAgICAgIERpY3Rpb25hcmllcyBhcmUgbXV0YWJsZTsgdGhleSBjYW4gYmUgY3JlYXRlZCBieSB0aGUgInsuLi59IlxuICAgICAgbm90YXRpb24gKHNlZSBzZWN0aW9uICpEaWN0aW9uYXJ5IGRpc3BsYXlzKikuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlcyAiZGJtLm5kYm0iIGFuZCAiZGJtLmdudSIgcHJvdmlkZVxuICAgICAgYWRkaXRpb25hbCBleGFtcGxlcyBvZiBtYXBwaW5nIHR5cGVzLCBhcyBkb2VzIHRoZSAiY29sbGVjdGlvbnMiXG4gICAgICBtb2R1bGUuXG5cbkNhbGxhYmxlIHR5cGVzXG4gICBUaGVzZSBhcmUgdGhlIHR5cGVzIHRvIHdoaWNoIHRoZSBmdW5jdGlvbiBjYWxsIG9wZXJhdGlvbiAoc2VlXG4gICBzZWN0aW9uICpDYWxscyopIGNhbiBiZSBhcHBsaWVkOlxuXG4gICBVc2VyLWRlZmluZWQgZnVuY3Rpb25zXG4gICAgICBBIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgaXMgY3JlYXRlZCBieSBhIGZ1bmN0aW9uXG4gICAgICBkZWZpbml0aW9uIChzZWUgc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqKS4gIEl0IHNob3VsZCBiZVxuICAgICAgY2FsbGVkIHdpdGggYW4gYXJndW1lbnQgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtc1xuICAgICAgYXMgdGhlIGZ1bmN0aW9uXCdzIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdC5cblxuICAgICAgU3BlY2lhbCBhdHRyaWJ1dGVzOlxuXG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PStcbiAgICAgIHwgIl9fZG9jX18iICAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fbmFtZV9fIiAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBuYW1lICAgICAgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fcXVhbG5hbWVfXyIgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyAqcXVhbGlmaWVkIG5hbWUqIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fbW9kdWxlX18iICAgICAgICAgICAgICB8IFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19kZWZhdWx0c19fIiAgICAgICAgICAgIHwgQSB0dXBsZSBjb250YWluaW5nIGRlZmF1bHQgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2NvZGVfXyIgICAgICAgICAgICAgICAgfCBUaGUgY29kZSBvYmplY3QgcmVwcmVzZW50aW5nICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZ2xvYmFsc19fIiAgICAgICAgICAgICB8IEEgcmVmZXJlbmNlIHRvIHRoZSBkaWN0aW9uYXJ5ICAgfCBSZWFkLW9ubHkgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19kaWN0X18iICAgICAgICAgICAgICAgIHwgVGhlIG5hbWVzcGFjZSBzdXBwb3J0aW5nICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2Nsb3N1cmVfXyIgICAgICAgICAgICAgfCAiTm9uZSIgb3IgYSB0dXBsZSBvZiBjZWxscyB0aGF0IHwgUmVhZC1vbmx5ICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fYW5ub3RhdGlvbnNfXyIgICAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGFubm90YXRpb25zICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19rd2RlZmF1bHRzX18iICAgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgZGVmYXVsdHMgZm9yICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG5cbiAgICAgIE1vc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgbGFiZWxsZWQgIldyaXRhYmxlIiBjaGVjayB0aGUgdHlwZSBvZiB0aGVcbiAgICAgIGFzc2lnbmVkIHZhbHVlLlxuXG4gICAgICBGdW5jdGlvbiBvYmplY3RzIGFsc28gc3VwcG9ydCBnZXR0aW5nIGFuZCBzZXR0aW5nIGFyYml0cmFyeVxuICAgICAgYXR0cmlidXRlcywgd2hpY2ggY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhdHRhY2ggbWV0YWRhdGFcbiAgICAgIHRvIGZ1bmN0aW9ucy4gIFJlZ3VsYXIgYXR0cmlidXRlIGRvdC1ub3RhdGlvbiBpcyB1c2VkIHRvIGdldCBhbmRcbiAgICAgIHNldCBzdWNoIGF0dHJpYnV0ZXMuICpOb3RlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seVxuICAgICAgc3VwcG9ydHMgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiBGdW5jdGlvblxuICAgICAgYXR0cmlidXRlcyBvbiBidWlsdC1pbiBmdW5jdGlvbnMgbWF5IGJlIHN1cHBvcnRlZCBpbiB0aGVcbiAgICAgIGZ1dHVyZS4qXG5cbiAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBmdW5jdGlvblwncyBkZWZpbml0aW9uIGNhbiBiZVxuICAgICAgcmV0cmlldmVkIGZyb20gaXRzIGNvZGUgb2JqZWN0OyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVybmFsXG4gICAgICB0eXBlcyBiZWxvdy5cblxuICAgSW5zdGFuY2UgbWV0aG9kc1xuICAgICAgQW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBjb21iaW5lcyBhIGNsYXNzLCBhIGNsYXNzIGluc3RhbmNlIGFuZFxuICAgICAgYW55IGNhbGxhYmxlIG9iamVjdCAobm9ybWFsbHkgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24pLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiX19zZWxmX18iIGlzIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgb2JqZWN0LCAiX19mdW5jX18iIGlzIHRoZSBmdW5jdGlvbiBvYmplY3Q7ICJfX2RvY19fIiBpcyB0aGVcbiAgICAgIG1ldGhvZFwncyBkb2N1bWVudGF0aW9uIChzYW1lIGFzICJfX2Z1bmNfXy5fX2RvY19fIik7ICJfX25hbWVfXyJcbiAgICAgIGlzIHRoZSBtZXRob2QgbmFtZSAoc2FtZSBhcyAiX19mdW5jX18uX19uYW1lX18iKTsgIl9fbW9kdWxlX18iXG4gICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBtZXRob2Qgd2FzIGRlZmluZWQgaW4sIG9yICJOb25lIlxuICAgICAgaWYgdW5hdmFpbGFibGUuXG5cbiAgICAgIE1ldGhvZHMgYWxzbyBzdXBwb3J0IGFjY2Vzc2luZyAoYnV0IG5vdCBzZXR0aW5nKSB0aGUgYXJiaXRyYXJ5XG4gICAgICBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgVXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3RzIG1heSBiZSBjcmVhdGVkIHdoZW4gZ2V0dGluZyBhblxuICAgICAgYXR0cmlidXRlIG9mIGEgY2xhc3MgKHBlcmhhcHMgdmlhIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MpLCBpZlxuICAgICAgdGhhdCBhdHRyaWJ1dGUgaXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IG9yIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSB1c2VyLVxuICAgICAgZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgZnJvbSBhIGNsYXNzIHZpYSBvbmUgb2YgaXRzIGluc3RhbmNlcyxcbiAgICAgIGl0cyAiX19zZWxmX18iIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UsIGFuZCB0aGUgbWV0aG9kIG9iamVjdFxuICAgICAgaXMgc2FpZCB0byBiZSBib3VuZC4gIFRoZSBuZXcgbWV0aG9kXCdzICJfX2Z1bmNfXyIgYXR0cmlidXRlIGlzXG4gICAgICB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBXaGVuIGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nXG4gICAgICBhbm90aGVyIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCB0aGUgYmVoYXZpb3VyIGlzXG4gICAgICB0aGUgc2FtZSBhcyBmb3IgYSBmdW5jdGlvbiBvYmplY3QsIGV4Y2VwdCB0aGF0IHRoZSAiX19mdW5jX18iXG4gICAgICBhdHRyaWJ1dGUgb2YgdGhlIG5ldyBpbnN0YW5jZSBpcyBub3QgdGhlIG9yaWdpbmFsIG1ldGhvZCBvYmplY3RcbiAgICAgIGJ1dCBpdHMgIl9fZnVuY19fIiBhdHRyaWJ1dGUuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIGl0cyAiX19zZWxmX18iIGF0dHJpYnV0ZVxuICAgICAgaXMgdGhlIGNsYXNzIGl0c2VsZiwgYW5kIGl0cyAiX19mdW5jX18iIGF0dHJpYnV0ZSBpcyB0aGVcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCB1bmRlcmx5aW5nIHRoZSBjbGFzcyBtZXRob2QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjYWxsZWQsIHRoZSB1bmRlcmx5aW5nXG4gICAgICBmdW5jdGlvbiAoIl9fZnVuY19fIikgaXMgY2FsbGVkLCBpbnNlcnRpbmcgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICAoIl9fc2VsZl9fIikgaW4gZnJvbnQgb2YgdGhlIGFyZ3VtZW50IGxpc3QuICBGb3IgaW5zdGFuY2UsIHdoZW5cbiAgICAgICJDIiBpcyBhIGNsYXNzIHdoaWNoIGNvbnRhaW5zIGEgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiAiZigpIixcbiAgICAgIGFuZCAieCIgaXMgYW4gaW5zdGFuY2Ugb2YgIkMiLCBjYWxsaW5nICJ4LmYoMSkiIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgIGNhbGxpbmcgIkMuZih4LCAxKSIuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBkZXJpdmVkIGZyb20gYSBjbGFzcyBtZXRob2RcbiAgICAgIG9iamVjdCwgdGhlICJjbGFzcyBpbnN0YW5jZSIgc3RvcmVkIGluICJfX3NlbGZfXyIgd2lsbCBhY3R1YWxseVxuICAgICAgYmUgdGhlIGNsYXNzIGl0c2VsZiwgc28gdGhhdCBjYWxsaW5nIGVpdGhlciAieC5mKDEpIiBvciAiQy5mKDEpIlxuICAgICAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nICJmKEMsMSkiIHdoZXJlICJmIiBpcyB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIE5vdGUgdGhhdCB0aGUgdHJhbnNmb3JtYXRpb24gZnJvbSBmdW5jdGlvbiBvYmplY3QgdG8gaW5zdGFuY2VcbiAgICAgIG1ldGhvZCBvYmplY3QgaGFwcGVucyBlYWNoIHRpbWUgdGhlIGF0dHJpYnV0ZSBpcyByZXRyaWV2ZWQgZnJvbVxuICAgICAgdGhlIGluc3RhbmNlLiAgSW4gc29tZSBjYXNlcywgYSBmcnVpdGZ1bCBvcHRpbWl6YXRpb24gaXMgdG9cbiAgICAgIGFzc2lnbiB0aGUgYXR0cmlidXRlIHRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIGNhbGwgdGhhdCBsb2NhbFxuICAgICAgdmFyaWFibGUuIEFsc28gbm90aWNlIHRoYXQgdGhpcyB0cmFuc2Zvcm1hdGlvbiBvbmx5IGhhcHBlbnMgZm9yXG4gICAgICB1c2VyLWRlZmluZWQgZnVuY3Rpb25zOyBvdGhlciBjYWxsYWJsZSBvYmplY3RzIChhbmQgYWxsIG5vbi1cbiAgICAgIGNhbGxhYmxlIG9iamVjdHMpIGFyZSByZXRyaWV2ZWQgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbi4gIEl0IGlzXG4gICAgICBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyB3aGljaCBhcmVcbiAgICAgIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyBpbnN0YW5jZSBhcmUgbm90IGNvbnZlcnRlZCB0byBib3VuZFxuICAgICAgbWV0aG9kczsgdGhpcyAqb25seSogaGFwcGVucyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhbiBhdHRyaWJ1dGVcbiAgICAgIG9mIHRoZSBjbGFzcy5cblxuICAgR2VuZXJhdG9yIGZ1bmN0aW9uc1xuICAgICAgQSBmdW5jdGlvbiBvciBtZXRob2Qgd2hpY2ggdXNlcyB0aGUgInlpZWxkIiBzdGF0ZW1lbnQgKHNlZVxuICAgICAgc2VjdGlvbiAqVGhlIHlpZWxkIHN0YXRlbWVudCopIGlzIGNhbGxlZCBhICpnZW5lcmF0b3IgZnVuY3Rpb24qLlxuICAgICAgU3VjaCBhIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCwgYWx3YXlzIHJldHVybnMgYW4gaXRlcmF0b3Igb2JqZWN0XG4gICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbjogIGNhbGxpbmdcbiAgICAgIHRoZSBpdGVyYXRvclwncyAiaXRlcmF0b3IuX19uZXh0X18oKSIgbWV0aG9kIHdpbGwgY2F1c2UgdGhlXG4gICAgICBmdW5jdGlvbiB0byBleGVjdXRlIHVudGlsIGl0IHByb3ZpZGVzIGEgdmFsdWUgdXNpbmcgdGhlICJ5aWVsZCJcbiAgICAgIHN0YXRlbWVudC4gIFdoZW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGEgInJldHVybiIgc3RhdGVtZW50IG9yXG4gICAgICBmYWxscyBvZmYgdGhlIGVuZCwgYSAiU3RvcEl0ZXJhdGlvbiIgZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlXG4gICAgICBpdGVyYXRvciB3aWxsIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXQgb2YgdmFsdWVzIHRvIGJlXG4gICAgICByZXR1cm5lZC5cblxuICAgQnVpbHQtaW4gZnVuY3Rpb25zXG4gICAgICBBIGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgQyBmdW5jdGlvbi5cbiAgICAgIEV4YW1wbGVzIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgImxlbigpIiBhbmQgIm1hdGguc2luKCkiXG4gICAgICAoIm1hdGgiIGlzIGEgc3RhbmRhcmQgYnVpbHQtaW4gbW9kdWxlKS4gVGhlIG51bWJlciBhbmQgdHlwZSBvZlxuICAgICAgdGhlIGFyZ3VtZW50cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgQyBmdW5jdGlvbi4gU3BlY2lhbCByZWFkLVxuICAgICAgb25seSBhdHRyaWJ1dGVzOiAiX19kb2NfXyIgaXMgdGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb25cbiAgICAgIHN0cmluZywgb3IgIk5vbmUiIGlmIHVuYXZhaWxhYmxlOyAiX19uYW1lX18iIGlzIHRoZSBmdW5jdGlvblwnc1xuICAgICAgbmFtZTsgIl9fc2VsZl9fIiBpcyBzZXQgdG8gIk5vbmUiIChidXQgc2VlIHRoZSBuZXh0IGl0ZW0pO1xuICAgICAgIl9fbW9kdWxlX18iIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIGZ1bmN0aW9uIHdhcyBkZWZpbmVkXG4gICAgICBpbiBvciAiTm9uZSIgaWYgdW5hdmFpbGFibGUuXG5cbiAgIEJ1aWx0LWluIG1ldGhvZHNcbiAgICAgIFRoaXMgaXMgcmVhbGx5IGEgZGlmZmVyZW50IGRpc2d1aXNlIG9mIGEgYnVpbHQtaW4gZnVuY3Rpb24sIHRoaXNcbiAgICAgIHRpbWUgY29udGFpbmluZyBhbiBvYmplY3QgcGFzc2VkIHRvIHRoZSBDIGZ1bmN0aW9uIGFzIGFuXG4gICAgICBpbXBsaWNpdCBleHRyYSBhcmd1bWVudC4gIEFuIGV4YW1wbGUgb2YgYSBidWlsdC1pbiBtZXRob2QgaXNcbiAgICAgICJhbGlzdC5hcHBlbmQoKSIsIGFzc3VtaW5nICphbGlzdCogaXMgYSBsaXN0IG9iamVjdC4gSW4gdGhpc1xuICAgICAgY2FzZSwgdGhlIHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZSAiX19zZWxmX18iIGlzIHNldCB0byB0aGVcbiAgICAgIG9iamVjdCBkZW5vdGVkIGJ5ICphbGlzdCouXG5cbiAgIENsYXNzZXNcbiAgICAgIENsYXNzZXMgYXJlIGNhbGxhYmxlLiAgVGhlc2Ugb2JqZWN0cyBub3JtYWxseSBhY3QgYXMgZmFjdG9yaWVzXG4gICAgICBmb3IgbmV3IGluc3RhbmNlcyBvZiB0aGVtc2VsdmVzLCBidXQgdmFyaWF0aW9ucyBhcmUgcG9zc2libGUgZm9yXG4gICAgICBjbGFzcyB0eXBlcyB0aGF0IG92ZXJyaWRlICJfX25ld19fKCkiLiAgVGhlIGFyZ3VtZW50cyBvZiB0aGVcbiAgICAgIGNhbGwgYXJlIHBhc3NlZCB0byAiX19uZXdfXygpIiBhbmQsIGluIHRoZSB0eXBpY2FsIGNhc2UsIHRvXG4gICAgICAiX19pbml0X18oKSIgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3IGluc3RhbmNlLlxuXG4gICBDbGFzcyBJbnN0YW5jZXNcbiAgICAgIEluc3RhbmNlcyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBjYW4gYmUgbWFkZSBjYWxsYWJsZSBieSBkZWZpbmluZ1xuICAgICAgYSAiX19jYWxsX18oKSIgbWV0aG9kIGluIHRoZWlyIGNsYXNzLlxuXG5Nb2R1bGVzXG4gICBNb2R1bGVzIGFyZSBhIGJhc2ljIG9yZ2FuaXphdGlvbmFsIHVuaXQgb2YgUHl0aG9uIGNvZGUsIGFuZCBhcmVcbiAgIGNyZWF0ZWQgYnkgdGhlICppbXBvcnQgc3lzdGVtKiBhcyBpbnZva2VkIGVpdGhlciBieSB0aGUgImltcG9ydCJcbiAgIHN0YXRlbWVudCAoc2VlICJpbXBvcnQiKSwgb3IgYnkgY2FsbGluZyBmdW5jdGlvbnMgc3VjaCBhc1xuICAgImltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkiIGFuZCBidWlsdC1pbiAiX19pbXBvcnRfXygpIi4gIEEgbW9kdWxlXG4gICBvYmplY3QgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QgKHRoaXMgaXNcbiAgIHRoZSBkaWN0aW9uYXJ5IHJlZmVyZW5jZWQgYnkgdGhlICJfX2dsb2JhbHNfXyIgYXR0cmlidXRlIG9mXG4gICBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlKS4gIEF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZVxuICAgdHJhbnNsYXRlZCB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgIm0ueCIgaXMgZXF1aXZhbGVudFxuICAgdG8gIm0uX19kaWN0X19bIngiXSIuIEEgbW9kdWxlIG9iamVjdCBkb2VzIG5vdCBjb250YWluIHRoZSBjb2RlXG4gICBvYmplY3QgdXNlZCB0byBpbml0aWFsaXplIHRoZSBtb2R1bGUgKHNpbmNlIGl0IGlzblwndCBuZWVkZWQgb25jZVxuICAgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUpLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudCB1cGRhdGVzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIGRpY3Rpb25hcnksXG4gICBlLmcuLCAibS54ID0gMSIgaXMgZXF1aXZhbGVudCB0byAibS5fX2RpY3RfX1sieCJdID0gMSIuXG5cbiAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogIl9fZGljdF9fIiBpcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZVxuICAgYXMgYSBkaWN0aW9uYXJ5IG9iamVjdC5cblxuICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBCZWNhdXNlIG9mIHRoZSB3YXkgQ1B5dGhvblxuICAgY2xlYXJzIG1vZHVsZSBkaWN0aW9uYXJpZXMsIHRoZSBtb2R1bGUgZGljdGlvbmFyeSB3aWxsIGJlIGNsZWFyZWRcbiAgIHdoZW4gdGhlIG1vZHVsZSBmYWxscyBvdXQgb2Ygc2NvcGUgZXZlbiBpZiB0aGUgZGljdGlvbmFyeSBzdGlsbCBoYXNcbiAgIGxpdmUgcmVmZXJlbmNlcy4gIFRvIGF2b2lkIHRoaXMsIGNvcHkgdGhlIGRpY3Rpb25hcnkgb3Iga2VlcCB0aGVcbiAgIG1vZHVsZSBhcm91bmQgd2hpbGUgdXNpbmcgaXRzIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIFByZWRlZmluZWQgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzOiAiX19uYW1lX18iIGlzIHRoZSBtb2R1bGVcJ3MgbmFtZTtcbiAgICJfX2RvY19fIiBpcyB0aGUgbW9kdWxlXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciAiTm9uZSIgaWZcbiAgIHVuYXZhaWxhYmxlOyAiX19maWxlX18iIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoIHRoZVxuICAgbW9kdWxlIHdhcyBsb2FkZWQsIGlmIGl0IHdhcyBsb2FkZWQgZnJvbSBhIGZpbGUuIFRoZSAiX19maWxlX18iXG4gICBhdHRyaWJ1dGUgbWF5IGJlIG1pc3NpbmcgZm9yIGNlcnRhaW4gdHlwZXMgb2YgbW9kdWxlcywgc3VjaCBhcyBDXG4gICBtb2R1bGVzIHRoYXQgYXJlIHN0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlIGludGVycHJldGVyOyBmb3JcbiAgIGV4dGVuc2lvbiBtb2R1bGVzIGxvYWRlZCBkeW5hbWljYWxseSBmcm9tIGEgc2hhcmVkIGxpYnJhcnksIGl0IGlzXG4gICB0aGUgcGF0aG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuXG5cbkN1c3RvbSBjbGFzc2VzXG4gICBDdXN0b20gY2xhc3MgdHlwZXMgYXJlIHR5cGljYWxseSBjcmVhdGVkIGJ5IGNsYXNzIGRlZmluaXRpb25zIChzZWVcbiAgIHNlY3Rpb24gKkNsYXNzIGRlZmluaXRpb25zKikuICBBIGNsYXNzIGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZFxuICAgYnkgYSBkaWN0aW9uYXJ5IG9iamVjdC4gQ2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHRyYW5zbGF0ZWRcbiAgIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LCBlLmcuLCAiQy54IiBpcyB0cmFuc2xhdGVkIHRvXG4gICAiQy5fX2RpY3RfX1sieCJdIiAoYWx0aG91Z2ggdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGhvb2tzIHdoaWNoIGFsbG93XG4gICBmb3Igb3RoZXIgbWVhbnMgb2YgbG9jYXRpbmcgYXR0cmlidXRlcykuIFdoZW4gdGhlIGF0dHJpYnV0ZSBuYW1lIGlzXG4gICBub3QgZm91bmQgdGhlcmUsIHRoZSBhdHRyaWJ1dGUgc2VhcmNoIGNvbnRpbnVlcyBpbiB0aGUgYmFzZVxuICAgY2xhc3Nlcy4gVGhpcyBzZWFyY2ggb2YgdGhlIGJhc2UgY2xhc3NlcyB1c2VzIHRoZSBDMyBtZXRob2RcbiAgIHJlc29sdXRpb24gb3JkZXIgd2hpY2ggYmVoYXZlcyBjb3JyZWN0bHkgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2ZcbiAgIFwnZGlhbW9uZFwnIGluaGVyaXRhbmNlIHN0cnVjdHVyZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlXG4gICBpbmhlcml0YW5jZSBwYXRocyBsZWFkaW5nIGJhY2sgdG8gYSBjb21tb24gYW5jZXN0b3IuIEFkZGl0aW9uYWxcbiAgIGRldGFpbHMgb24gdGhlIEMzIE1STyB1c2VkIGJ5IFB5dGhvbiBjYW4gYmUgZm91bmQgaW4gdGhlXG4gICBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgMi4zIHJlbGVhc2UgYXRcbiAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy5cblxuICAgV2hlbiBhIGNsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2UgKGZvciBjbGFzcyAiQyIsIHNheSkgd291bGQgeWllbGQgYVxuICAgY2xhc3MgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBpbnN0YW5jZSBtZXRob2RcbiAgIG9iamVjdCB3aG9zZSAiX19zZWxmX18iIGF0dHJpYnV0ZXMgaXMgIkMiLiAgV2hlbiBpdCB3b3VsZCB5aWVsZCBhXG4gICBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgb2JqZWN0IHdyYXBwZWQgYnlcbiAgIHRoZSBzdGF0aWMgbWV0aG9kIG9iamVjdC4gU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycypcbiAgIGZvciBhbm90aGVyIHdheSBpbiB3aGljaCBhdHRyaWJ1dGVzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3MgbWF5XG4gICBkaWZmZXIgZnJvbSB0aG9zZSBhY3R1YWxseSBjb250YWluZWQgaW4gaXRzICJfX2RpY3RfXyIuXG5cbiAgIENsYXNzIGF0dHJpYnV0ZSBhc3NpZ25tZW50cyB1cGRhdGUgdGhlIGNsYXNzXCdzIGRpY3Rpb25hcnksIG5ldmVyXG4gICB0aGUgZGljdGlvbmFyeSBvZiBhIGJhc2UgY2xhc3MuXG5cbiAgIEEgY2xhc3Mgb2JqZWN0IGNhbiBiZSBjYWxsZWQgKHNlZSBhYm92ZSkgdG8geWllbGQgYSBjbGFzcyBpbnN0YW5jZVxuICAgKHNlZSBiZWxvdykuXG5cbiAgIFNwZWNpYWwgYXR0cmlidXRlczogIl9fbmFtZV9fIiBpcyB0aGUgY2xhc3MgbmFtZTsgIl9fbW9kdWxlX18iIGlzXG4gICB0aGUgbW9kdWxlIG5hbWUgaW4gd2hpY2ggdGhlIGNsYXNzIHdhcyBkZWZpbmVkOyAiX19kaWN0X18iIGlzIHRoZVxuICAgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBjbGFzc1wncyBuYW1lc3BhY2U7ICJfX2Jhc2VzX18iIGlzIGEgdHVwbGVcbiAgIChwb3NzaWJseSBlbXB0eSBvciBhIHNpbmdsZXRvbikgY29udGFpbmluZyB0aGUgYmFzZSBjbGFzc2VzLCBpbiB0aGVcbiAgIG9yZGVyIG9mIHRoZWlyIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdDsgIl9fZG9jX18iIGlzIHRoZVxuICAgY2xhc3NcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIE5vbmUgaWYgdW5kZWZpbmVkLlxuXG5DbGFzcyBpbnN0YW5jZXNcbiAgIEEgY2xhc3MgaW5zdGFuY2UgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGEgY2xhc3Mgb2JqZWN0IChzZWUgYWJvdmUpLlxuICAgQSBjbGFzcyBpbnN0YW5jZSBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYXMgYSBkaWN0aW9uYXJ5IHdoaWNoXG4gICBpcyB0aGUgZmlyc3QgcGxhY2UgaW4gd2hpY2ggYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHNlYXJjaGVkLlxuICAgV2hlbiBhbiBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kIHRoZXJlLCBhbmQgdGhlIGluc3RhbmNlXCdzIGNsYXNzIGhhc1xuICAgYW4gYXR0cmlidXRlIGJ5IHRoYXQgbmFtZSwgdGhlIHNlYXJjaCBjb250aW51ZXMgd2l0aCB0aGUgY2xhc3NcbiAgIGF0dHJpYnV0ZXMuICBJZiBhIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aGF0IGlzIGEgdXNlci1kZWZpbmVkXG4gICBmdW5jdGlvbiBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdFxuICAgd2hvc2UgIl9fc2VsZl9fIiBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLiAgU3RhdGljIG1ldGhvZCBhbmRcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBhbHNvIHRyYW5zZm9ybWVkOyBzZWUgYWJvdmUgdW5kZXJcbiAgICJDbGFzc2VzIi4gIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqIGZvciBhbm90aGVyIHdheVxuICAgaW4gd2hpY2ggYXR0cmlidXRlcyBvZiBhIGNsYXNzIHJldHJpZXZlZCB2aWEgaXRzIGluc3RhbmNlcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRoZSBvYmplY3RzIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGUgY2xhc3NcJ3MgIl9fZGljdF9fIi5cbiAgIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCwgYW5kIHRoZSBvYmplY3RcJ3MgY2xhc3MgaGFzIGFcbiAgICJfX2dldGF0dHJfXygpIiBtZXRob2QsIHRoYXQgaXMgY2FsbGVkIHRvIHNhdGlzZnkgdGhlIGxvb2t1cC5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnRzIGFuZCBkZWxldGlvbnMgdXBkYXRlIHRoZSBpbnN0YW5jZVwnc1xuICAgZGljdGlvbmFyeSwgbmV2ZXIgYSBjbGFzc1wncyBkaWN0aW9uYXJ5LiAgSWYgdGhlIGNsYXNzIGhhcyBhXG4gICAiX19zZXRhdHRyX18oKSIgb3IgIl9fZGVsYXR0cl9fKCkiIG1ldGhvZCwgdGhpcyBpcyBjYWxsZWQgaW5zdGVhZFxuICAgb2YgdXBkYXRpbmcgdGhlIGluc3RhbmNlIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIENsYXNzIGluc3RhbmNlcyBjYW4gcHJldGVuZCB0byBiZSBudW1iZXJzLCBzZXF1ZW5jZXMsIG9yIG1hcHBpbmdzXG4gICBpZiB0aGV5IGhhdmUgbWV0aG9kcyB3aXRoIGNlcnRhaW4gc3BlY2lhbCBuYW1lcy4gIFNlZSBzZWN0aW9uXG4gICAqU3BlY2lhbCBtZXRob2QgbmFtZXMqLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6ICJfX2RpY3RfXyIgaXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5O1xuICAgIl9fY2xhc3NfXyIgaXMgdGhlIGluc3RhbmNlXCdzIGNsYXNzLlxuXG5JL08gb2JqZWN0cyAoYWxzbyBrbm93biBhcyBmaWxlIG9iamVjdHMpXG4gICBBICpmaWxlIG9iamVjdCogcmVwcmVzZW50cyBhbiBvcGVuIGZpbGUuICBWYXJpb3VzIHNob3J0Y3V0cyBhcmVcbiAgIGF2YWlsYWJsZSB0byBjcmVhdGUgZmlsZSBvYmplY3RzOiB0aGUgIm9wZW4oKSIgYnVpbHQtaW4gZnVuY3Rpb24sXG4gICBhbmQgYWxzbyAib3MucG9wZW4oKSIsICJvcy5mZG9wZW4oKSIsIGFuZCB0aGUgIm1ha2VmaWxlKCkiIG1ldGhvZFxuICAgb2Ygc29ja2V0IG9iamVjdHMgKGFuZCBwZXJoYXBzIGJ5IG90aGVyIGZ1bmN0aW9ucyBvciBtZXRob2RzXG4gICBwcm92aWRlZCBieSBleHRlbnNpb24gbW9kdWxlcykuXG5cbiAgIFRoZSBvYmplY3RzICJzeXMuc3RkaW4iLCAic3lzLnN0ZG91dCIgYW5kICJzeXMuc3RkZXJyIiBhcmVcbiAgIGluaXRpYWxpemVkIHRvIGZpbGUgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnRlcnByZXRlclwnc1xuICAgc3RhbmRhcmQgaW5wdXQsIG91dHB1dCBhbmQgZXJyb3Igc3RyZWFtczsgdGhleSBhcmUgYWxsIG9wZW4gaW4gdGV4dFxuICAgbW9kZSBhbmQgdGhlcmVmb3JlIGZvbGxvdyB0aGUgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhlXG4gICAiaW8uVGV4dElPQmFzZSIgYWJzdHJhY3QgY2xhc3MuXG5cbkludGVybmFsIHR5cGVzXG4gICBBIGZldyB0eXBlcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGludGVycHJldGVyIGFyZSBleHBvc2VkIHRvIHRoZVxuICAgdXNlci4gVGhlaXIgZGVmaW5pdGlvbnMgbWF5IGNoYW5nZSB3aXRoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGVcbiAgIGludGVycHJldGVyLCBidXQgdGhleSBhcmUgbWVudGlvbmVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy5cblxuICAgQ29kZSBvYmplY3RzXG4gICAgICBDb2RlIG9iamVjdHMgcmVwcmVzZW50ICpieXRlLWNvbXBpbGVkKiBleGVjdXRhYmxlIFB5dGhvbiBjb2RlLFxuICAgICAgb3IgKmJ5dGVjb2RlKi4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGNvZGUgb2JqZWN0IGFuZCBhXG4gICAgICBmdW5jdGlvbiBvYmplY3QgaXMgdGhhdCB0aGUgZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGFuIGV4cGxpY2l0XG4gICAgICByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uXCdzIGdsb2JhbHMgKHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQgd2FzXG4gICAgICBkZWZpbmVkKSwgd2hpbGUgYSBjb2RlIG9iamVjdCBjb250YWlucyBubyBjb250ZXh0OyBhbHNvIHRoZVxuICAgICAgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgZnVuY3Rpb24gb2JqZWN0LCBub3RcbiAgICAgIGluIHRoZSBjb2RlIG9iamVjdCAoYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB2YWx1ZXMgY2FsY3VsYXRlZCBhdFxuICAgICAgcnVuLXRpbWUpLiAgVW5saWtlIGZ1bmN0aW9uIG9iamVjdHMsIGNvZGUgb2JqZWN0cyBhcmUgaW1tdXRhYmxlXG4gICAgICBhbmQgY29udGFpbiBubyByZWZlcmVuY2VzIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB0byBtdXRhYmxlXG4gICAgICBvYmplY3RzLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiY29fbmFtZSIgZ2l2ZXMgdGhlIGZ1bmN0aW9uIG5hbWU7XG4gICAgICAiY29fYXJnY291bnQiIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMgKGluY2x1ZGluZ1xuICAgICAgYXJndW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMpOyAiY29fbmxvY2FscyIgaXMgdGhlIG51bWJlciBvZlxuICAgICAgbG9jYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIChpbmNsdWRpbmcgYXJndW1lbnRzKTtcbiAgICAgICJjb192YXJuYW1lcyIgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgbG9jYWxcbiAgICAgIHZhcmlhYmxlcyAoc3RhcnRpbmcgd2l0aCB0aGUgYXJndW1lbnQgbmFtZXMpOyAiY29fY2VsbHZhcnMiIGlzIGFcbiAgICAgIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGxvY2FsIHZhcmlhYmxlcyB0aGF0IGFyZVxuICAgICAgcmVmZXJlbmNlZCBieSBuZXN0ZWQgZnVuY3Rpb25zOyAiY29fZnJlZXZhcnMiIGlzIGEgdHVwbGVcbiAgICAgIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGZyZWUgdmFyaWFibGVzOyAiY29fY29kZSIgaXMgYSBzdHJpbmdcbiAgICAgIHJlcHJlc2VudGluZyB0aGUgc2VxdWVuY2Ugb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zOyAiY29fY29uc3RzIlxuICAgICAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBsaXRlcmFscyB1c2VkIGJ5IHRoZSBieXRlY29kZTtcbiAgICAgICJjb19uYW1lcyIgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyB1c2VkIGJ5IHRoZSBieXRlY29kZTtcbiAgICAgICJjb19maWxlbmFtZSIgaXMgdGhlIGZpbGVuYW1lIGZyb20gd2hpY2ggdGhlIGNvZGUgd2FzIGNvbXBpbGVkO1xuICAgICAgImNvX2ZpcnN0bGluZW5vIiBpcyB0aGUgZmlyc3QgbGluZSBudW1iZXIgb2YgdGhlIGZ1bmN0aW9uO1xuICAgICAgImNvX2xub3RhYiIgaXMgYSBzdHJpbmcgZW5jb2RpbmcgdGhlIG1hcHBpbmcgZnJvbSBieXRlY29kZVxuICAgICAgb2Zmc2V0cyB0byBsaW5lIG51bWJlcnMgKGZvciBkZXRhaWxzIHNlZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlXG4gICAgICBpbnRlcnByZXRlcik7ICJjb19zdGFja3NpemUiIGlzIHRoZSByZXF1aXJlZCBzdGFjayBzaXplXG4gICAgICAoaW5jbHVkaW5nIGxvY2FsIHZhcmlhYmxlcyk7ICJjb19mbGFncyIgaXMgYW4gaW50ZWdlciBlbmNvZGluZyBhXG4gICAgICBudW1iZXIgb2YgZmxhZ3MgZm9yIHRoZSBpbnRlcnByZXRlci5cblxuICAgICAgVGhlIGZvbGxvd2luZyBmbGFnIGJpdHMgYXJlIGRlZmluZWQgZm9yICJjb19mbGFncyI6IGJpdCAiMHgwNCJcbiAgICAgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgIiphcmd1bWVudHMiIHN5bnRheCB0byBhY2NlcHQgYW5cbiAgICAgIGFyYml0cmFyeSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHM7IGJpdCAiMHgwOCIgaXMgc2V0IGlmXG4gICAgICB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgIioqa2V5d29yZHMiIHN5bnRheCB0byBhY2NlcHQgYXJiaXRyYXJ5XG4gICAgICBrZXl3b3JkIGFyZ3VtZW50czsgYml0ICIweDIwIiBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIGlzIGFcbiAgICAgIGdlbmVyYXRvci5cblxuICAgICAgRnV0dXJlIGZlYXR1cmUgZGVjbGFyYXRpb25zICgiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiIpXG4gICAgICBhbHNvIHVzZSBiaXRzIGluICJjb19mbGFncyIgdG8gaW5kaWNhdGUgd2hldGhlciBhIGNvZGUgb2JqZWN0XG4gICAgICB3YXMgY29tcGlsZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkOiBiaXQgIjB4MjAwMCIgaXNcbiAgICAgIHNldCBpZiB0aGUgZnVuY3Rpb24gd2FzIGNvbXBpbGVkIHdpdGggZnV0dXJlIGRpdmlzaW9uIGVuYWJsZWQ7XG4gICAgICBiaXRzICIweDEwIiBhbmQgIjB4MTAwMCIgd2VyZSB1c2VkIGluIGVhcmxpZXIgdmVyc2lvbnMgb2ZcbiAgICAgIFB5dGhvbi5cblxuICAgICAgT3RoZXIgYml0cyBpbiAiY29fZmxhZ3MiIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlLlxuXG4gICAgICBJZiBhIGNvZGUgb2JqZWN0IHJlcHJlc2VudHMgYSBmdW5jdGlvbiwgdGhlIGZpcnN0IGl0ZW0gaW5cbiAgICAgICJjb19jb25zdHMiIGlzIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBvZiB0aGUgZnVuY3Rpb24sIG9yXG4gICAgICAiTm9uZSIgaWYgdW5kZWZpbmVkLlxuXG4gICBGcmFtZSBvYmplY3RzXG4gICAgICBGcmFtZSBvYmplY3RzIHJlcHJlc2VudCBleGVjdXRpb24gZnJhbWVzLiAgVGhleSBtYXkgb2NjdXIgaW5cbiAgICAgIHRyYWNlYmFjayBvYmplY3RzIChzZWUgYmVsb3cpLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiZl9iYWNrIiBpcyB0byB0aGUgcHJldmlvdXMgc3RhY2tcbiAgICAgIGZyYW1lICh0b3dhcmRzIHRoZSBjYWxsZXIpLCBvciAiTm9uZSIgaWYgdGhpcyBpcyB0aGUgYm90dG9tXG4gICAgICBzdGFjayBmcmFtZTsgImZfY29kZSIgaXMgdGhlIGNvZGUgb2JqZWN0IGJlaW5nIGV4ZWN1dGVkIGluIHRoaXNcbiAgICAgIGZyYW1lOyAiZl9sb2NhbHMiIGlzIHRoZSBkaWN0aW9uYXJ5IHVzZWQgdG8gbG9vayB1cCBsb2NhbFxuICAgICAgdmFyaWFibGVzOyAiZl9nbG9iYWxzIiBpcyB1c2VkIGZvciBnbG9iYWwgdmFyaWFibGVzO1xuICAgICAgImZfYnVpbHRpbnMiIGlzIHVzZWQgZm9yIGJ1aWx0LWluIChpbnRyaW5zaWMpIG5hbWVzOyAiZl9sYXN0aSJcbiAgICAgIGdpdmVzIHRoZSBwcmVjaXNlIGluc3RydWN0aW9uICh0aGlzIGlzIGFuIGluZGV4IGludG8gdGhlXG4gICAgICBieXRlY29kZSBzdHJpbmcgb2YgdGhlIGNvZGUgb2JqZWN0KS5cblxuICAgICAgU3BlY2lhbCB3cml0YWJsZSBhdHRyaWJ1dGVzOiAiZl90cmFjZSIsIGlmIG5vdCAiTm9uZSIsIGlzIGFcbiAgICAgIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgY29kZSBsaW5lICh0aGlzIGlzXG4gICAgICB1c2VkIGJ5IHRoZSBkZWJ1Z2dlcik7ICJmX2xpbmVubyIgaXMgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIgb2ZcbiAgICAgIHRoZSBmcmFtZSAtLS0gd3JpdGluZyB0byB0aGlzIGZyb20gd2l0aGluIGEgdHJhY2UgZnVuY3Rpb24ganVtcHNcbiAgICAgIHRvIHRoZSBnaXZlbiBsaW5lIChvbmx5IGZvciB0aGUgYm90dG9tLW1vc3QgZnJhbWUpLiAgQSBkZWJ1Z2dlclxuICAgICAgY2FuIGltcGxlbWVudCBhIEp1bXAgY29tbWFuZCAoYWthIFNldCBOZXh0IFN0YXRlbWVudCkgYnkgd3JpdGluZ1xuICAgICAgdG8gZl9saW5lbm8uXG5cbiAgIFRyYWNlYmFjayBvYmplY3RzXG4gICAgICBUcmFjZWJhY2sgb2JqZWN0cyByZXByZXNlbnQgYSBzdGFjayB0cmFjZSBvZiBhbiBleGNlcHRpb24uICBBXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0IGlzIGNyZWF0ZWQgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLiAgV2hlbiB0aGVcbiAgICAgIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdW53aW5kcyB0aGUgZXhlY3V0aW9uIHN0YWNrLCBhdFxuICAgICAgZWFjaCB1bndvdW5kIGxldmVsIGEgdHJhY2ViYWNrIG9iamVjdCBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZlxuICAgICAgdGhlIGN1cnJlbnQgdHJhY2ViYWNrLiAgV2hlbiBhbiBleGNlcHRpb24gaGFuZGxlciBpcyBlbnRlcmVkLFxuICAgICAgdGhlIHN0YWNrIHRyYWNlIGlzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtLiAoU2VlIHNlY3Rpb25cbiAgICAgICpUaGUgdHJ5IHN0YXRlbWVudCouKSBJdCBpcyBhY2Nlc3NpYmxlIGFzIHRoZSB0aGlyZCBpdGVtIG9mIHRoZVxuICAgICAgdHVwbGUgcmV0dXJuZWQgYnkgInN5cy5leGNfaW5mbygpIi4gV2hlbiB0aGUgcHJvZ3JhbSBjb250YWlucyBub1xuICAgICAgc3VpdGFibGUgaGFuZGxlciwgdGhlIHN0YWNrIHRyYWNlIGlzIHdyaXR0ZW4gKG5pY2VseSBmb3JtYXR0ZWQpXG4gICAgICB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtOyBpZiB0aGUgaW50ZXJwcmV0ZXIgaXMgaW50ZXJhY3RpdmUsXG4gICAgICBpdCBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGFzICJzeXMubGFzdF90cmFjZWJhY2siLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAidGJfbmV4dCIgaXMgdGhlIG5leHQgbGV2ZWwgaW4gdGhlXG4gICAgICBzdGFjayB0cmFjZSAodG93YXJkcyB0aGUgZnJhbWUgd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCksIG9yXG4gICAgICAiTm9uZSIgaWYgdGhlcmUgaXMgbm8gbmV4dCBsZXZlbDsgInRiX2ZyYW1lIiBwb2ludHMgdG8gdGhlXG4gICAgICBleGVjdXRpb24gZnJhbWUgb2YgdGhlIGN1cnJlbnQgbGV2ZWw7ICJ0Yl9saW5lbm8iIGdpdmVzIHRoZSBsaW5lXG4gICAgICBudW1iZXIgd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZDsgInRiX2xhc3RpIiBpbmRpY2F0ZXMgdGhlXG4gICAgICBwcmVjaXNlIGluc3RydWN0aW9uLiAgVGhlIGxpbmUgbnVtYmVyIGFuZCBsYXN0IGluc3RydWN0aW9uIGluXG4gICAgICB0aGUgdHJhY2ViYWNrIG1heSBkaWZmZXIgZnJvbSB0aGUgbGluZSBudW1iZXIgb2YgaXRzIGZyYW1lXG4gICAgICBvYmplY3QgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBhICJ0cnkiIHN0YXRlbWVudCB3aXRoIG5vXG4gICAgICBtYXRjaGluZyBleGNlcHQgY2xhdXNlIG9yIHdpdGggYSBmaW5hbGx5IGNsYXVzZS5cblxuICAgU2xpY2Ugb2JqZWN0c1xuICAgICAgU2xpY2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgc2xpY2VzIGZvciAiX19nZXRpdGVtX18oKSJcbiAgICAgIG1ldGhvZHMuICBUaGV5IGFyZSBhbHNvIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluICJzbGljZSgpIlxuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6ICJzdGFydCIgaXMgdGhlIGxvd2VyIGJvdW5kOyAic3RvcCJcbiAgICAgIGlzIHRoZSB1cHBlciBib3VuZDsgInN0ZXAiIGlzIHRoZSBzdGVwIHZhbHVlOyBlYWNoIGlzICJOb25lIiBpZlxuICAgICAgb21pdHRlZC4gIFRoZXNlIGF0dHJpYnV0ZXMgY2FuIGhhdmUgYW55IHR5cGUuXG5cbiAgICAgIFNsaWNlIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOlxuXG4gICAgICBzbGljZS5pbmRpY2VzKHNlbGYsIGxlbmd0aClcblxuICAgICAgICAgVGhpcyBtZXRob2QgdGFrZXMgYSBzaW5nbGUgaW50ZWdlciBhcmd1bWVudCAqbGVuZ3RoKiBhbmRcbiAgICAgICAgIGNvbXB1dGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzbGljZSB0aGF0IHRoZSBzbGljZSBvYmplY3RcbiAgICAgICAgIHdvdWxkIGRlc2NyaWJlIGlmIGFwcGxpZWQgdG8gYSBzZXF1ZW5jZSBvZiAqbGVuZ3RoKiBpdGVtcy5cbiAgICAgICAgIEl0IHJldHVybnMgYSB0dXBsZSBvZiB0aHJlZSBpbnRlZ2VyczsgcmVzcGVjdGl2ZWx5IHRoZXNlIGFyZVxuICAgICAgICAgdGhlICpzdGFydCogYW5kICpzdG9wKiBpbmRpY2VzIGFuZCB0aGUgKnN0ZXAqIG9yIHN0cmlkZVxuICAgICAgICAgbGVuZ3RoIG9mIHRoZSBzbGljZS4gTWlzc2luZyBvciBvdXQtb2YtYm91bmRzIGluZGljZXMgYXJlXG4gICAgICAgICBoYW5kbGVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCByZWd1bGFyIHNsaWNlcy5cblxuICAgU3RhdGljIG1ldGhvZCBvYmplY3RzXG4gICAgICBTdGF0aWMgbWV0aG9kIG9iamVjdHMgcHJvdmlkZSBhIHdheSBvZiBkZWZlYXRpbmcgdGhlXG4gICAgICB0cmFuc2Zvcm1hdGlvbiBvZiBmdW5jdGlvbiBvYmplY3RzIHRvIG1ldGhvZCBvYmplY3RzIGRlc2NyaWJlZFxuICAgICAgYWJvdmUuIEEgc3RhdGljIG1ldGhvZCBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbnkgb3RoZXJcbiAgICAgIG9iamVjdCwgdXN1YWxseSBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0LiBXaGVuIGEgc3RhdGljXG4gICAgICBtZXRob2Qgb2JqZWN0IGlzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3Mgb3IgYSBjbGFzcyBpbnN0YW5jZSwgdGhlXG4gICAgICBvYmplY3QgYWN0dWFsbHkgcmV0dXJuZWQgaXMgdGhlIHdyYXBwZWQgb2JqZWN0LCB3aGljaCBpcyBub3RcbiAgICAgIHN1YmplY3QgdG8gYW55IGZ1cnRoZXIgdHJhbnNmb3JtYXRpb24uIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmVcbiAgICAgIG5vdCB0aGVtc2VsdmVzIGNhbGxhYmxlLCBhbHRob3VnaCB0aGUgb2JqZWN0cyB0aGV5IHdyYXAgdXN1YWxseVxuICAgICAgYXJlLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICAic3RhdGljbWV0aG9kKCkiIGNvbnN0cnVjdG9yLlxuXG4gICBDbGFzcyBtZXRob2Qgb2JqZWN0c1xuICAgICAgQSBjbGFzcyBtZXRob2Qgb2JqZWN0LCBsaWtlIGEgc3RhdGljIG1ldGhvZCBvYmplY3QsIGlzIGEgd3JhcHBlclxuICAgICAgYXJvdW5kIGFub3RoZXIgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSB3YXkgaW4gd2hpY2ggdGhhdCBvYmplY3RcbiAgICAgIGlzIHJldHJpZXZlZCBmcm9tIGNsYXNzZXMgYW5kIGNsYXNzIGluc3RhbmNlcy4gVGhlIGJlaGF2aW91ciBvZlxuICAgICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgdXBvbiBzdWNoIHJldHJpZXZhbCBpcyBkZXNjcmliZWQgYWJvdmUsXG4gICAgICB1bmRlciAiVXNlci1kZWZpbmVkIG1ldGhvZHMiLiBDbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZFxuICAgICAgYnkgdGhlIGJ1aWx0LWluICJjbGFzc21ldGhvZCgpIiBjb25zdHJ1Y3Rvci5cbicsCisgJ3R5cGVzJzogJ1xuVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5XG4qKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQmVsb3cgaXMgYSBsaXN0IG9mIHRoZSB0eXBlcyB0aGF0IGFyZSBidWlsdCBpbnRvIFB5dGhvbi4gIEV4dGVuc2lvblxubW9kdWxlcyAod3JpdHRlbiBpbiBDLCBKYXZhLCBvciBvdGhlciBsYW5ndWFnZXMsIGRlcGVuZGluZyBvbiB0aGVcbmltcGxlbWVudGF0aW9uKSBjYW4gZGVmaW5lIGFkZGl0aW9uYWwgdHlwZXMuICBGdXR1cmUgdmVyc2lvbnMgb2ZcblB5dGhvbiBtYXkgYWRkIHR5cGVzIHRvIHRoZSB0eXBlIGhpZXJhcmNoeSAoZS5nLiwgcmF0aW9uYWwgbnVtYmVycyxcbmVmZmljaWVudGx5IHN0b3JlZCBhcnJheXMgb2YgaW50ZWdlcnMsIGV0Yy4pLCBhbHRob3VnaCBzdWNoIGFkZGl0aW9uc1xud2lsbCBvZnRlbiBiZSBwcm92aWRlZCB2aWEgdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW5zdGVhZC5cblxuU29tZSBvZiB0aGUgdHlwZSBkZXNjcmlwdGlvbnMgYmVsb3cgY29udGFpbiBhIHBhcmFncmFwaCBsaXN0aW5nXG5cJ3NwZWNpYWwgYXR0cmlidXRlcy5cJyAgVGhlc2UgYXJlIGF0dHJpYnV0ZXMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGVcbmltcGxlbWVudGF0aW9uIGFuZCBhcmUgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZS4gIFRoZWlyIGRlZmluaXRpb25cbm1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuTm9uZVxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lICJOb25lIi4gSXRcbiAgIGlzIHVzZWQgdG8gc2lnbmlmeSB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIG1hbnkgc2l0dWF0aW9ucywgZS5nLixcbiAgIGl0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZG9uXCd0IGV4cGxpY2l0bHkgcmV0dXJuXG4gICBhbnl0aGluZy4gSXRzIHRydXRoIHZhbHVlIGlzIGZhbHNlLlxuXG5Ob3RJbXBsZW1lbnRlZFxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lXG4gICAiTm90SW1wbGVtZW50ZWQiLiBOdW1lcmljIG1ldGhvZHMgYW5kIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIG1heVxuICAgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhleSBkbyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIHRoZVxuICAgb3BlcmFuZHMgcHJvdmlkZWQuICAoVGhlIGludGVycHJldGVyIHdpbGwgdGhlbiB0cnkgdGhlIHJlZmxlY3RlZFxuICAgb3BlcmF0aW9uLCBvciBzb21lIG90aGVyIGZhbGxiYWNrLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdG9yLikgIEl0c1xuICAgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuRWxsaXBzaXNcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgbGl0ZXJhbCAiLi4uIiBvciB0aGVcbiAgIGJ1aWx0LWluIG5hbWUgIkVsbGlwc2lzIi4gIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG4ibnVtYmVycy5OdW1iZXIiXG4gICBUaGVzZSBhcmUgY3JlYXRlZCBieSBudW1lcmljIGxpdGVyYWxzIGFuZCByZXR1cm5lZCBhcyByZXN1bHRzIGJ5XG4gICBhcml0aG1ldGljIG9wZXJhdG9ycyBhbmQgYXJpdGhtZXRpYyBidWlsdC1pbiBmdW5jdGlvbnMuICBOdW1lcmljXG4gICBvYmplY3RzIGFyZSBpbW11dGFibGU7IG9uY2UgY3JlYXRlZCB0aGVpciB2YWx1ZSBuZXZlciBjaGFuZ2VzLlxuICAgUHl0aG9uIG51bWJlcnMgYXJlIG9mIGNvdXJzZSBzdHJvbmdseSByZWxhdGVkIHRvIG1hdGhlbWF0aWNhbFxuICAgbnVtYmVycywgYnV0IHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIG9mIG51bWVyaWNhbCByZXByZXNlbnRhdGlvblxuICAgaW4gY29tcHV0ZXJzLlxuXG4gICBQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGludGVnZXJzLCBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBhbmRcbiAgIGNvbXBsZXggbnVtYmVyczpcblxuICAgIm51bWJlcnMuSW50ZWdyYWwiXG4gICAgICBUaGVzZSByZXByZXNlbnQgZWxlbWVudHMgZnJvbSB0aGUgbWF0aGVtYXRpY2FsIHNldCBvZiBpbnRlZ2Vyc1xuICAgICAgKHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSkuXG5cbiAgICAgIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgaW50ZWdlcnM6XG5cbiAgICAgIEludGVnZXJzICgiaW50IilcblxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IG51bWJlcnMgaW4gYW4gdW5saW1pdGVkIHJhbmdlLCBzdWJqZWN0IHRvXG4gICAgICAgICBhdmFpbGFibGUgKHZpcnR1YWwpIG1lbW9yeSBvbmx5LiAgRm9yIHRoZSBwdXJwb3NlIG9mIHNoaWZ0XG4gICAgICAgICBhbmQgbWFzayBvcGVyYXRpb25zLCBhIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyBhc3N1bWVkLCBhbmRcbiAgICAgICAgIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGluIGEgdmFyaWFudCBvZiAyXCdzXG4gICAgICAgICBjb21wbGVtZW50IHdoaWNoIGdpdmVzIHRoZSBpbGx1c2lvbiBvZiBhbiBpbmZpbml0ZSBzdHJpbmcgb2ZcbiAgICAgICAgIHNpZ24gYml0cyBleHRlbmRpbmcgdG8gdGhlIGxlZnQuXG5cbiAgICAgIEJvb2xlYW5zICgiYm9vbCIpXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgdGhlIHRydXRoIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZS4gIFRoZSB0d29cbiAgICAgICAgIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZXMgIkZhbHNlIiBhbmQgIlRydWUiIGFyZSB0aGVcbiAgICAgICAgIG9ubHkgQm9vbGVhbiBvYmplY3RzLiBUaGUgQm9vbGVhbiB0eXBlIGlzIGEgc3VidHlwZSBvZiB0aGVcbiAgICAgICAgIGludGVnZXIgdHlwZSwgYW5kIEJvb2xlYW4gdmFsdWVzIGJlaGF2ZSBsaWtlIHRoZSB2YWx1ZXMgMCBhbmRcbiAgICAgICAgIDEsIHJlc3BlY3RpdmVseSwgaW4gYWxtb3N0IGFsbCBjb250ZXh0cywgdGhlIGV4Y2VwdGlvbiBiZWluZ1xuICAgICAgICAgdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHN0cmluZywgdGhlIHN0cmluZ3MgIiJGYWxzZSIiIG9yXG4gICAgICAgICAiIlRydWUiIiBhcmUgcmV0dXJuZWQsIHJlc3BlY3RpdmVseS5cblxuICAgICAgVGhlIHJ1bGVzIGZvciBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIGFyZSBpbnRlbmRlZCB0byBnaXZlIHRoZVxuICAgICAgbW9zdCBtZWFuaW5nZnVsIGludGVycHJldGF0aW9uIG9mIHNoaWZ0IGFuZCBtYXNrIG9wZXJhdGlvbnNcbiAgICAgIGludm9sdmluZyBuZWdhdGl2ZSBpbnRlZ2Vycy5cblxuICAgIm51bWJlcnMuUmVhbCIgKCJmbG9hdCIpXG4gICAgICBUaGVzZSByZXByZXNlbnQgbWFjaGluZS1sZXZlbCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50XG4gICAgICBudW1iZXJzLiBZb3UgYXJlIGF0IHRoZSBtZXJjeSBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lXG4gICAgICBhcmNoaXRlY3R1cmUgKGFuZCBDIG9yIEphdmEgaW1wbGVtZW50YXRpb24pIGZvciB0aGUgYWNjZXB0ZWRcbiAgICAgIHJhbmdlIGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdy4gUHl0aG9uIGRvZXMgbm90IHN1cHBvcnQgc2luZ2xlLVxuICAgICAgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnM7IHRoZSBzYXZpbmdzIGluIHByb2Nlc3NvciBhbmRcbiAgICAgIG1lbW9yeSB1c2FnZSB0aGF0IGFyZSB1c3VhbGx5IHRoZSByZWFzb24gZm9yIHVzaW5nIHRoZXNlIGlzXG4gICAgICBkd2FyZmVkIGJ5IHRoZSBvdmVyaGVhZCBvZiB1c2luZyBvYmplY3RzIGluIFB5dGhvbiwgc28gdGhlcmUgaXNcbiAgICAgIG5vIHJlYXNvbiB0byBjb21wbGljYXRlIHRoZSBsYW5ndWFnZSB3aXRoIHR3byBraW5kcyBvZiBmbG9hdGluZ1xuICAgICAgcG9pbnQgbnVtYmVycy5cblxuICAgIm51bWJlcnMuQ29tcGxleCIgKCJjb21wbGV4IilcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBjb21wbGV4IG51bWJlcnMgYXMgYSBwYWlyIG9mIG1hY2hpbmUtbGV2ZWxcbiAgICAgIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gIFRoZSBzYW1lIGNhdmVhdHMgYXBwbHlcbiAgICAgIGFzIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLiBUaGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIGFcbiAgICAgIGNvbXBsZXggbnVtYmVyICJ6IiBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIHJlYWQtb25seVxuICAgICAgYXR0cmlidXRlcyAiei5yZWFsIiBhbmQgInouaW1hZyIuXG5cblNlcXVlbmNlc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBvcmRlcmVkIHNldHMgaW5kZXhlZCBieSBub24tbmVnYXRpdmVcbiAgIG51bWJlcnMuIFRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtc1xuICAgb2YgYSBzZXF1ZW5jZS4gV2hlbiB0aGUgbGVuZ3RoIG9mIGEgc2VxdWVuY2UgaXMgKm4qLCB0aGUgaW5kZXggc2V0XG4gICBjb250YWlucyB0aGUgbnVtYmVycyAwLCAxLCAuLi4sICpuKi0xLiAgSXRlbSAqaSogb2Ygc2VxdWVuY2UgKmEqIGlzXG4gICBzZWxlY3RlZCBieSAiYVtpXSIuXG5cbiAgIFNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgc2xpY2luZzogImFbaTpqXSIgc2VsZWN0cyBhbGwgaXRlbXMgd2l0aFxuICAgaW5kZXggKmsqIHN1Y2ggdGhhdCAqaSogIjw9IiAqayogIjwiICpqKi4gIFdoZW4gdXNlZCBhcyBhblxuICAgZXhwcmVzc2lvbiwgYSBzbGljZSBpcyBhIHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUuICBUaGlzIGltcGxpZXNcbiAgIHRoYXQgdGhlIGluZGV4IHNldCBpcyByZW51bWJlcmVkIHNvIHRoYXQgaXQgc3RhcnRzIGF0IDAuXG5cbiAgIFNvbWUgc2VxdWVuY2VzIGFsc28gc3VwcG9ydCAiZXh0ZW5kZWQgc2xpY2luZyIgd2l0aCBhIHRoaXJkICJzdGVwIlxuICAgcGFyYW1ldGVyOiAiYVtpOmo6a10iIHNlbGVjdHMgYWxsIGl0ZW1zIG9mICphKiB3aXRoIGluZGV4ICp4KiB3aGVyZVxuICAgInggPSBpICsgbiprIiwgKm4qICI+PSIgIjAiIGFuZCAqaSogIjw9IiAqeCogIjwiICpqKi5cblxuICAgU2VxdWVuY2VzIGFyZSBkaXN0aW5ndWlzaGVkIGFjY29yZGluZyB0byB0aGVpciBtdXRhYmlsaXR5OlxuXG4gICBJbW11dGFibGUgc2VxdWVuY2VzXG4gICAgICBBbiBvYmplY3Qgb2YgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGUgY2Fubm90IGNoYW5nZSBvbmNlIGl0IGlzXG4gICAgICBjcmVhdGVkLiAgKElmIHRoZSBvYmplY3QgY29udGFpbnMgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLFxuICAgICAgdGhlc2Ugb3RoZXIgb2JqZWN0cyBtYXkgYmUgbXV0YWJsZSBhbmQgbWF5IGJlIGNoYW5nZWQ7IGhvd2V2ZXIsXG4gICAgICB0aGUgY29sbGVjdGlvbiBvZiBvYmplY3RzIGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgYW4gaW1tdXRhYmxlXG4gICAgICBvYmplY3QgY2Fubm90IGNoYW5nZS4pXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXM6XG5cbiAgICAgIFN0cmluZ3NcbiAgICAgICAgIEEgc3RyaW5nIGlzIGEgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoYXQgcmVwcmVzZW50IFVuaWNvZGVcbiAgICAgICAgIGNvZGVwb2ludHMuIEFsbCB0aGUgY29kZXBvaW50cyBpbiByYW5nZSAiVSswMDAwIC0gVSsxMEZGRkYiXG4gICAgICAgICBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSBzdHJpbmcuICBQeXRob24gZG9lc25cJ3QgaGF2ZSBhICJjaHIiXG4gICAgICAgICB0eXBlLCBhbmQgZXZlcnkgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgaXMgcmVwcmVzZW50ZWQgYXMgYVxuICAgICAgICAgc3RyaW5nIG9iamVjdCB3aXRoIGxlbmd0aCAiMSIuICBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gIm9yZCgpIlxuICAgICAgICAgY29udmVydHMgYSBjaGFyYWN0ZXIgdG8gaXRzIGNvZGVwb2ludCAoYXMgYW4gaW50ZWdlcik7XG4gICAgICAgICAiY2hyKCkiIGNvbnZlcnRzIGFuIGludGVnZXIgaW4gcmFuZ2UgIjAgLSAxMEZGRkYiIHRvIHRoZVxuICAgICAgICAgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIuICJzdHIuZW5jb2RlKCkiIGNhbiBiZSB1c2VkIHRvXG4gICAgICAgICBjb252ZXJ0IGEgInN0ciIgdG8gImJ5dGVzIiB1c2luZyB0aGUgZ2l2ZW4gZW5jb2RpbmcsIGFuZFxuICAgICAgICAgImJ5dGVzLmRlY29kZSgpIiBjYW4gYmUgdXNlZCB0byBhY2hpZXZlIHRoZSBvcHBvc2l0ZS5cblxuICAgICAgVHVwbGVzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSB0dXBsZSBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiBUdXBsZXMgb2ZcbiAgICAgICAgIHR3byBvciBtb3JlIGl0ZW1zIGFyZSBmb3JtZWQgYnkgY29tbWEtc2VwYXJhdGVkIGxpc3RzIG9mXG4gICAgICAgICBleHByZXNzaW9ucy4gIEEgdHVwbGUgb2Ygb25lIGl0ZW0gKGEgXCdzaW5nbGV0b25cJykgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYWZmaXhpbmcgYSBjb21tYSB0byBhbiBleHByZXNzaW9uIChhbiBleHByZXNzaW9uIGJ5XG4gICAgICAgICBpdHNlbGYgZG9lcyBub3QgY3JlYXRlIGEgdHVwbGUsIHNpbmNlIHBhcmVudGhlc2VzIG11c3QgYmVcbiAgICAgICAgIHVzYWJsZSBmb3IgZ3JvdXBpbmcgb2YgZXhwcmVzc2lvbnMpLiAgQW4gZW1wdHkgdHVwbGUgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYW4gZW1wdHkgcGFpciBvZiBwYXJlbnRoZXNlcy5cblxuICAgICAgQnl0ZXNcbiAgICAgICAgIEEgYnl0ZXMgb2JqZWN0IGlzIGFuIGltbXV0YWJsZSBhcnJheS4gIFRoZSBpdGVtcyBhcmUgOC1iaXRcbiAgICAgICAgIGJ5dGVzLCByZXByZXNlbnRlZCBieSBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgMjU2LlxuICAgICAgICAgQnl0ZXMgbGl0ZXJhbHMgKGxpa2UgImJcJ2FiY1wnIikgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgICAgICAgImJ5dGVzKCkiIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBieXRlcyBvYmplY3RzLiAgQWxzbyxcbiAgICAgICAgIGJ5dGVzIG9iamVjdHMgY2FuIGJlIGRlY29kZWQgdG8gc3RyaW5ncyB2aWEgdGhlICJkZWNvZGUoKSJcbiAgICAgICAgIG1ldGhvZC5cblxuICAgTXV0YWJsZSBzZXF1ZW5jZXNcbiAgICAgIE11dGFibGUgc2VxdWVuY2VzIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQuICBUaGVcbiAgICAgIHN1YnNjcmlwdGlvbiBhbmQgc2xpY2luZyBub3RhdGlvbnMgY2FuIGJlIHVzZWQgYXMgdGhlIHRhcmdldCBvZlxuICAgICAgYXNzaWdubWVudCBhbmQgImRlbCIgKGRlbGV0ZSkgc3RhdGVtZW50cy5cblxuICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIG11dGFibGUgc2VxdWVuY2UgdHlwZXM6XG5cbiAgICAgIExpc3RzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSBsaXN0IGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuICBMaXN0cyBhcmVcbiAgICAgICAgIGZvcm1lZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaW5cbiAgICAgICAgIHNxdWFyZSBicmFja2V0cy4gKE5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gc3BlY2lhbCBjYXNlcyBuZWVkZWRcbiAgICAgICAgIHRvIGZvcm0gbGlzdHMgb2YgbGVuZ3RoIDAgb3IgMS4pXG5cbiAgICAgIEJ5dGUgQXJyYXlzXG4gICAgICAgICBBIGJ5dGVhcnJheSBvYmplY3QgaXMgYSBtdXRhYmxlIGFycmF5LiBUaGV5IGFyZSBjcmVhdGVkIGJ5XG4gICAgICAgICB0aGUgYnVpbHQtaW4gImJ5dGVhcnJheSgpIiBjb25zdHJ1Y3Rvci4gIEFzaWRlIGZyb20gYmVpbmdcbiAgICAgICAgIG11dGFibGUgKGFuZCBoZW5jZSB1bmhhc2hhYmxlKSwgYnl0ZSBhcnJheXMgb3RoZXJ3aXNlIHByb3ZpZGVcbiAgICAgICAgIHRoZSBzYW1lIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbGl0eSBhcyBpbW11dGFibGUgYnl0ZXNcbiAgICAgICAgIG9iamVjdHMuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlICJhcnJheSIgcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBleGFtcGxlIG9mIGFcbiAgICAgIG11dGFibGUgc2VxdWVuY2UgdHlwZSwgYXMgZG9lcyB0aGUgImNvbGxlY3Rpb25zIiBtb2R1bGUuXG5cblNldCB0eXBlc1xuICAgVGhlc2UgcmVwcmVzZW50IHVub3JkZXJlZCwgZmluaXRlIHNldHMgb2YgdW5pcXVlLCBpbW11dGFibGVcbiAgIG9iamVjdHMuIEFzIHN1Y2gsIHRoZXkgY2Fubm90IGJlIGluZGV4ZWQgYnkgYW55IHN1YnNjcmlwdC4gSG93ZXZlcixcbiAgIHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIlxuICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgc2V0LiBDb21tb24gdXNlcyBmb3Igc2V0cyBhcmUgZmFzdFxuICAgbWVtYmVyc2hpcCB0ZXN0aW5nLCByZW1vdmluZyBkdXBsaWNhdGVzIGZyb20gYSBzZXF1ZW5jZSwgYW5kXG4gICBjb21wdXRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnRlcnNlY3Rpb24sIHVuaW9uLFxuICAgZGlmZmVyZW5jZSwgYW5kIHN5bW1ldHJpYyBkaWZmZXJlbmNlLlxuXG4gICBGb3Igc2V0IGVsZW1lbnRzLCB0aGUgc2FtZSBpbW11dGFiaWxpdHkgcnVsZXMgYXBwbHkgYXMgZm9yXG4gICBkaWN0aW9uYXJ5IGtleXMuIE5vdGUgdGhhdCBudW1lcmljIHR5cGVzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3JcbiAgIG51bWVyaWMgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgIjEiIGFuZFxuICAgIjEuMCIpLCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBiZSBjb250YWluZWQgaW4gYSBzZXQuXG5cbiAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBzZXQgdHlwZXM6XG5cbiAgIFNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhIG11dGFibGUgc2V0LiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgInNldCgpIiBjb25zdHJ1Y3RvciBhbmQgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgYnkgc2V2ZXJhbFxuICAgICAgbWV0aG9kcywgc3VjaCBhcyAiYWRkKCkiLlxuXG4gICBGcm96ZW4gc2V0c1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGFuIGltbXV0YWJsZSBzZXQuICBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZVxuICAgICAgYnVpbHQtaW4gImZyb3plbnNldCgpIiBjb25zdHJ1Y3Rvci4gIEFzIGEgZnJvemVuc2V0IGlzIGltbXV0YWJsZVxuICAgICAgYW5kICpoYXNoYWJsZSosIGl0IGNhbiBiZSB1c2VkIGFnYWluIGFzIGFuIGVsZW1lbnQgb2YgYW5vdGhlclxuICAgICAgc2V0LCBvciBhcyBhIGRpY3Rpb25hcnkga2V5LlxuXG5NYXBwaW5nc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBhcmJpdHJhcnkgaW5kZXhcbiAgIHNldHMuIFRoZSBzdWJzY3JpcHQgbm90YXRpb24gImFba10iIHNlbGVjdHMgdGhlIGl0ZW0gaW5kZXhlZCBieSAiayJcbiAgIGZyb20gdGhlIG1hcHBpbmcgImEiOyB0aGlzIGNhbiBiZSB1c2VkIGluIGV4cHJlc3Npb25zIGFuZCBhcyB0aGVcbiAgIHRhcmdldCBvZiBhc3NpZ25tZW50cyBvciAiZGVsIiBzdGF0ZW1lbnRzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICJsZW4oKSIgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgbWFwcGluZy5cblxuICAgVGhlcmUgaXMgY3VycmVudGx5IGEgc2luZ2xlIGludHJpbnNpYyBtYXBwaW5nIHR5cGU6XG5cbiAgIERpY3Rpb25hcmllc1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBuZWFybHlcbiAgICAgIGFyYml0cmFyeSB2YWx1ZXMuICBUaGUgb25seSB0eXBlcyBvZiB2YWx1ZXMgbm90IGFjY2VwdGFibGUgYXNcbiAgICAgIGtleXMgYXJlIHZhbHVlcyBjb250YWluaW5nIGxpc3RzIG9yIGRpY3Rpb25hcmllcyBvciBvdGhlclxuICAgICAgbXV0YWJsZSB0eXBlcyB0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbiAgICAgIGlkZW50aXR5LCB0aGUgcmVhc29uIGJlaW5nIHRoYXQgdGhlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvZlxuICAgICAgZGljdGlvbmFyaWVzIHJlcXVpcmVzIGEga2V5XCdzIGhhc2ggdmFsdWUgdG8gcmVtYWluIGNvbnN0YW50LlxuICAgICAgTnVtZXJpYyB0eXBlcyB1c2VkIGZvciBrZXlzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpY1xuICAgICAgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgIjEiIGFuZCAiMS4wIilcbiAgICAgIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG8gaW5kZXggdGhlIHNhbWVcbiAgICAgIGRpY3Rpb25hcnkgZW50cnkuXG5cbiAgICAgIERpY3Rpb25hcmllcyBhcmUgbXV0YWJsZTsgdGhleSBjYW4gYmUgY3JlYXRlZCBieSB0aGUgInsuLi59IlxuICAgICAgbm90YXRpb24gKHNlZSBzZWN0aW9uICpEaWN0aW9uYXJ5IGRpc3BsYXlzKikuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlcyAiZGJtLm5kYm0iIGFuZCAiZGJtLmdudSIgcHJvdmlkZVxuICAgICAgYWRkaXRpb25hbCBleGFtcGxlcyBvZiBtYXBwaW5nIHR5cGVzLCBhcyBkb2VzIHRoZSAiY29sbGVjdGlvbnMiXG4gICAgICBtb2R1bGUuXG5cbkNhbGxhYmxlIHR5cGVzXG4gICBUaGVzZSBhcmUgdGhlIHR5cGVzIHRvIHdoaWNoIHRoZSBmdW5jdGlvbiBjYWxsIG9wZXJhdGlvbiAoc2VlXG4gICBzZWN0aW9uICpDYWxscyopIGNhbiBiZSBhcHBsaWVkOlxuXG4gICBVc2VyLWRlZmluZWQgZnVuY3Rpb25zXG4gICAgICBBIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgaXMgY3JlYXRlZCBieSBhIGZ1bmN0aW9uXG4gICAgICBkZWZpbml0aW9uIChzZWUgc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqKS4gIEl0IHNob3VsZCBiZVxuICAgICAgY2FsbGVkIHdpdGggYW4gYXJndW1lbnQgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtc1xuICAgICAgYXMgdGhlIGZ1bmN0aW9uXCdzIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdC5cblxuICAgICAgU3BlY2lhbCBhdHRyaWJ1dGVzOlxuXG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PStcbiAgICAgIHwgIl9fZG9jX18iICAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fbmFtZV9fIiAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBuYW1lICAgICAgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fcXVhbG5hbWVfXyIgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyAqcXVhbGlmaWVkIG5hbWUqIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fbW9kdWxlX18iICAgICAgICAgICAgICB8IFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19kZWZhdWx0c19fIiAgICAgICAgICAgIHwgQSB0dXBsZSBjb250YWluaW5nIGRlZmF1bHQgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2NvZGVfXyIgICAgICAgICAgICAgICAgfCBUaGUgY29kZSBvYmplY3QgcmVwcmVzZW50aW5nICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZ2xvYmFsc19fIiAgICAgICAgICAgICB8IEEgcmVmZXJlbmNlIHRvIHRoZSBkaWN0aW9uYXJ5ICAgfCBSZWFkLW9ubHkgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19kaWN0X18iICAgICAgICAgICAgICAgIHwgVGhlIG5hbWVzcGFjZSBzdXBwb3J0aW5nICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2Nsb3N1cmVfXyIgICAgICAgICAgICAgfCAiTm9uZSIgb3IgYSB0dXBsZSBvZiBjZWxscyB0aGF0IHwgUmVhZC1vbmx5ICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fYW5ub3RhdGlvbnNfXyIgICAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGFubm90YXRpb25zICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19rd2RlZmF1bHRzX18iICAgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgZGVmYXVsdHMgZm9yICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG5cbiAgICAgIE1vc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgbGFiZWxsZWQgIldyaXRhYmxlIiBjaGVjayB0aGUgdHlwZSBvZiB0aGVcbiAgICAgIGFzc2lnbmVkIHZhbHVlLlxuXG4gICAgICBGdW5jdGlvbiBvYmplY3RzIGFsc28gc3VwcG9ydCBnZXR0aW5nIGFuZCBzZXR0aW5nIGFyYml0cmFyeVxuICAgICAgYXR0cmlidXRlcywgd2hpY2ggY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhdHRhY2ggbWV0YWRhdGFcbiAgICAgIHRvIGZ1bmN0aW9ucy4gIFJlZ3VsYXIgYXR0cmlidXRlIGRvdC1ub3RhdGlvbiBpcyB1c2VkIHRvIGdldCBhbmRcbiAgICAgIHNldCBzdWNoIGF0dHJpYnV0ZXMuICpOb3RlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seVxuICAgICAgc3VwcG9ydHMgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiBGdW5jdGlvblxuICAgICAgYXR0cmlidXRlcyBvbiBidWlsdC1pbiBmdW5jdGlvbnMgbWF5IGJlIHN1cHBvcnRlZCBpbiB0aGVcbiAgICAgIGZ1dHVyZS4qXG5cbiAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBmdW5jdGlvblwncyBkZWZpbml0aW9uIGNhbiBiZVxuICAgICAgcmV0cmlldmVkIGZyb20gaXRzIGNvZGUgb2JqZWN0OyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVybmFsXG4gICAgICB0eXBlcyBiZWxvdy5cblxuICAgSW5zdGFuY2UgbWV0aG9kc1xuICAgICAgQW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBjb21iaW5lcyBhIGNsYXNzLCBhIGNsYXNzIGluc3RhbmNlIGFuZFxuICAgICAgYW55IGNhbGxhYmxlIG9iamVjdCAobm9ybWFsbHkgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24pLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiX19zZWxmX18iIGlzIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgb2JqZWN0LCAiX19mdW5jX18iIGlzIHRoZSBmdW5jdGlvbiBvYmplY3Q7ICJfX2RvY19fIiBpcyB0aGVcbiAgICAgIG1ldGhvZFwncyBkb2N1bWVudGF0aW9uIChzYW1lIGFzICJfX2Z1bmNfXy5fX2RvY19fIik7ICJfX25hbWVfXyJcbiAgICAgIGlzIHRoZSBtZXRob2QgbmFtZSAoc2FtZSBhcyAiX19mdW5jX18uX19uYW1lX18iKTsgIl9fbW9kdWxlX18iXG4gICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBtZXRob2Qgd2FzIGRlZmluZWQgaW4sIG9yICJOb25lIlxuICAgICAgaWYgdW5hdmFpbGFibGUuXG5cbiAgICAgIE1ldGhvZHMgYWxzbyBzdXBwb3J0IGFjY2Vzc2luZyAoYnV0IG5vdCBzZXR0aW5nKSB0aGUgYXJiaXRyYXJ5XG4gICAgICBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgVXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3RzIG1heSBiZSBjcmVhdGVkIHdoZW4gZ2V0dGluZyBhblxuICAgICAgYXR0cmlidXRlIG9mIGEgY2xhc3MgKHBlcmhhcHMgdmlhIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MpLCBpZlxuICAgICAgdGhhdCBhdHRyaWJ1dGUgaXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IG9yIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSB1c2VyLVxuICAgICAgZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgZnJvbSBhIGNsYXNzIHZpYSBvbmUgb2YgaXRzIGluc3RhbmNlcyxcbiAgICAgIGl0cyAiX19zZWxmX18iIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UsIGFuZCB0aGUgbWV0aG9kIG9iamVjdFxuICAgICAgaXMgc2FpZCB0byBiZSBib3VuZC4gIFRoZSBuZXcgbWV0aG9kXCdzICJfX2Z1bmNfXyIgYXR0cmlidXRlIGlzXG4gICAgICB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBXaGVuIGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nXG4gICAgICBhbm90aGVyIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCB0aGUgYmVoYXZpb3VyIGlzXG4gICAgICB0aGUgc2FtZSBhcyBmb3IgYSBmdW5jdGlvbiBvYmplY3QsIGV4Y2VwdCB0aGF0IHRoZSAiX19mdW5jX18iXG4gICAgICBhdHRyaWJ1dGUgb2YgdGhlIG5ldyBpbnN0YW5jZSBpcyBub3QgdGhlIG9yaWdpbmFsIG1ldGhvZCBvYmplY3RcbiAgICAgIGJ1dCBpdHMgIl9fZnVuY19fIiBhdHRyaWJ1dGUuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIGl0cyAiX19zZWxmX18iIGF0dHJpYnV0ZVxuICAgICAgaXMgdGhlIGNsYXNzIGl0c2VsZiwgYW5kIGl0cyAiX19mdW5jX18iIGF0dHJpYnV0ZSBpcyB0aGVcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCB1bmRlcmx5aW5nIHRoZSBjbGFzcyBtZXRob2QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjYWxsZWQsIHRoZSB1bmRlcmx5aW5nXG4gICAgICBmdW5jdGlvbiAoIl9fZnVuY19fIikgaXMgY2FsbGVkLCBpbnNlcnRpbmcgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICAoIl9fc2VsZl9fIikgaW4gZnJvbnQgb2YgdGhlIGFyZ3VtZW50IGxpc3QuICBGb3IgaW5zdGFuY2UsIHdoZW5cbiAgICAgICJDIiBpcyBhIGNsYXNzIHdoaWNoIGNvbnRhaW5zIGEgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiAiZigpIixcbiAgICAgIGFuZCAieCIgaXMgYW4gaW5zdGFuY2Ugb2YgIkMiLCBjYWxsaW5nICJ4LmYoMSkiIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgIGNhbGxpbmcgIkMuZih4LCAxKSIuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBkZXJpdmVkIGZyb20gYSBjbGFzcyBtZXRob2RcbiAgICAgIG9iamVjdCwgdGhlICJjbGFzcyBpbnN0YW5jZSIgc3RvcmVkIGluICJfX3NlbGZfXyIgd2lsbCBhY3R1YWxseVxuICAgICAgYmUgdGhlIGNsYXNzIGl0c2VsZiwgc28gdGhhdCBjYWxsaW5nIGVpdGhlciAieC5mKDEpIiBvciAiQy5mKDEpIlxuICAgICAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nICJmKEMsMSkiIHdoZXJlICJmIiBpcyB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIE5vdGUgdGhhdCB0aGUgdHJhbnNmb3JtYXRpb24gZnJvbSBmdW5jdGlvbiBvYmplY3QgdG8gaW5zdGFuY2VcbiAgICAgIG1ldGhvZCBvYmplY3QgaGFwcGVucyBlYWNoIHRpbWUgdGhlIGF0dHJpYnV0ZSBpcyByZXRyaWV2ZWQgZnJvbVxuICAgICAgdGhlIGluc3RhbmNlLiAgSW4gc29tZSBjYXNlcywgYSBmcnVpdGZ1bCBvcHRpbWl6YXRpb24gaXMgdG9cbiAgICAgIGFzc2lnbiB0aGUgYXR0cmlidXRlIHRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIGNhbGwgdGhhdCBsb2NhbFxuICAgICAgdmFyaWFibGUuIEFsc28gbm90aWNlIHRoYXQgdGhpcyB0cmFuc2Zvcm1hdGlvbiBvbmx5IGhhcHBlbnMgZm9yXG4gICAgICB1c2VyLWRlZmluZWQgZnVuY3Rpb25zOyBvdGhlciBjYWxsYWJsZSBvYmplY3RzIChhbmQgYWxsIG5vbi1cbiAgICAgIGNhbGxhYmxlIG9iamVjdHMpIGFyZSByZXRyaWV2ZWQgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbi4gIEl0IGlzXG4gICAgICBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyB3aGljaCBhcmVcbiAgICAgIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyBpbnN0YW5jZSBhcmUgbm90IGNvbnZlcnRlZCB0byBib3VuZFxuICAgICAgbWV0aG9kczsgdGhpcyAqb25seSogaGFwcGVucyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhbiBhdHRyaWJ1dGVcbiAgICAgIG9mIHRoZSBjbGFzcy5cblxuICAgR2VuZXJhdG9yIGZ1bmN0aW9uc1xuICAgICAgQSBmdW5jdGlvbiBvciBtZXRob2Qgd2hpY2ggdXNlcyB0aGUgInlpZWxkIiBzdGF0ZW1lbnQgKHNlZVxuICAgICAgc2VjdGlvbiAqVGhlIHlpZWxkIHN0YXRlbWVudCopIGlzIGNhbGxlZCBhICpnZW5lcmF0b3IgZnVuY3Rpb24qLlxuICAgICAgU3VjaCBhIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCwgYWx3YXlzIHJldHVybnMgYW4gaXRlcmF0b3Igb2JqZWN0XG4gICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbjogIGNhbGxpbmdcbiAgICAgIHRoZSBpdGVyYXRvclwncyAiaXRlcmF0b3IuX19uZXh0X18oKSIgbWV0aG9kIHdpbGwgY2F1c2UgdGhlXG4gICAgICBmdW5jdGlvbiB0byBleGVjdXRlIHVudGlsIGl0IHByb3ZpZGVzIGEgdmFsdWUgdXNpbmcgdGhlICJ5aWVsZCJcbiAgICAgIHN0YXRlbWVudC4gIFdoZW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGEgInJldHVybiIgc3RhdGVtZW50IG9yXG4gICAgICBmYWxscyBvZmYgdGhlIGVuZCwgYSAiU3RvcEl0ZXJhdGlvbiIgZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlXG4gICAgICBpdGVyYXRvciB3aWxsIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXQgb2YgdmFsdWVzIHRvIGJlXG4gICAgICByZXR1cm5lZC5cblxuICAgQnVpbHQtaW4gZnVuY3Rpb25zXG4gICAgICBBIGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgQyBmdW5jdGlvbi5cbiAgICAgIEV4YW1wbGVzIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgImxlbigpIiBhbmQgIm1hdGguc2luKCkiXG4gICAgICAoIm1hdGgiIGlzIGEgc3RhbmRhcmQgYnVpbHQtaW4gbW9kdWxlKS4gVGhlIG51bWJlciBhbmQgdHlwZSBvZlxuICAgICAgdGhlIGFyZ3VtZW50cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgQyBmdW5jdGlvbi4gU3BlY2lhbCByZWFkLVxuICAgICAgb25seSBhdHRyaWJ1dGVzOiAiX19kb2NfXyIgaXMgdGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb25cbiAgICAgIHN0cmluZywgb3IgIk5vbmUiIGlmIHVuYXZhaWxhYmxlOyAiX19uYW1lX18iIGlzIHRoZSBmdW5jdGlvblwnc1xuICAgICAgbmFtZTsgIl9fc2VsZl9fIiBpcyBzZXQgdG8gIk5vbmUiIChidXQgc2VlIHRoZSBuZXh0IGl0ZW0pO1xuICAgICAgIl9fbW9kdWxlX18iIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIGZ1bmN0aW9uIHdhcyBkZWZpbmVkXG4gICAgICBpbiBvciAiTm9uZSIgaWYgdW5hdmFpbGFibGUuXG5cbiAgIEJ1aWx0LWluIG1ldGhvZHNcbiAgICAgIFRoaXMgaXMgcmVhbGx5IGEgZGlmZmVyZW50IGRpc2d1aXNlIG9mIGEgYnVpbHQtaW4gZnVuY3Rpb24sIHRoaXNcbiAgICAgIHRpbWUgY29udGFpbmluZyBhbiBvYmplY3QgcGFzc2VkIHRvIHRoZSBDIGZ1bmN0aW9uIGFzIGFuXG4gICAgICBpbXBsaWNpdCBleHRyYSBhcmd1bWVudC4gIEFuIGV4YW1wbGUgb2YgYSBidWlsdC1pbiBtZXRob2QgaXNcbiAgICAgICJhbGlzdC5hcHBlbmQoKSIsIGFzc3VtaW5nICphbGlzdCogaXMgYSBsaXN0IG9iamVjdC4gSW4gdGhpc1xuICAgICAgY2FzZSwgdGhlIHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZSAiX19zZWxmX18iIGlzIHNldCB0byB0aGVcbiAgICAgIG9iamVjdCBkZW5vdGVkIGJ5ICphbGlzdCouXG5cbiAgIENsYXNzZXNcbiAgICAgIENsYXNzZXMgYXJlIGNhbGxhYmxlLiAgVGhlc2Ugb2JqZWN0cyBub3JtYWxseSBhY3QgYXMgZmFjdG9yaWVzXG4gICAgICBmb3IgbmV3IGluc3RhbmNlcyBvZiB0aGVtc2VsdmVzLCBidXQgdmFyaWF0aW9ucyBhcmUgcG9zc2libGUgZm9yXG4gICAgICBjbGFzcyB0eXBlcyB0aGF0IG92ZXJyaWRlICJfX25ld19fKCkiLiAgVGhlIGFyZ3VtZW50cyBvZiB0aGVcbiAgICAgIGNhbGwgYXJlIHBhc3NlZCB0byAiX19uZXdfXygpIiBhbmQsIGluIHRoZSB0eXBpY2FsIGNhc2UsIHRvXG4gICAgICAiX19pbml0X18oKSIgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3IGluc3RhbmNlLlxuXG4gICBDbGFzcyBJbnN0YW5jZXNcbiAgICAgIEluc3RhbmNlcyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBjYW4gYmUgbWFkZSBjYWxsYWJsZSBieSBkZWZpbmluZ1xuICAgICAgYSAiX19jYWxsX18oKSIgbWV0aG9kIGluIHRoZWlyIGNsYXNzLlxuXG5Nb2R1bGVzXG4gICBNb2R1bGVzIGFyZSBhIGJhc2ljIG9yZ2FuaXphdGlvbmFsIHVuaXQgb2YgUHl0aG9uIGNvZGUsIGFuZCBhcmVcbiAgIGNyZWF0ZWQgYnkgdGhlICppbXBvcnQgc3lzdGVtKiBhcyBpbnZva2VkIGVpdGhlciBieSB0aGUgImltcG9ydCJcbiAgIHN0YXRlbWVudCAoc2VlICJpbXBvcnQiKSwgb3IgYnkgY2FsbGluZyBmdW5jdGlvbnMgc3VjaCBhc1xuICAgImltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkiIGFuZCBidWlsdC1pbiAiX19pbXBvcnRfXygpIi4gIEEgbW9kdWxlXG4gICBvYmplY3QgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QgKHRoaXMgaXNcbiAgIHRoZSBkaWN0aW9uYXJ5IHJlZmVyZW5jZWQgYnkgdGhlICJfX2dsb2JhbHNfXyIgYXR0cmlidXRlIG9mXG4gICBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlKS4gIEF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZVxuICAgdHJhbnNsYXRlZCB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgIm0ueCIgaXMgZXF1aXZhbGVudFxuICAgdG8gIm0uX19kaWN0X19bIngiXSIuIEEgbW9kdWxlIG9iamVjdCBkb2VzIG5vdCBjb250YWluIHRoZSBjb2RlXG4gICBvYmplY3QgdXNlZCB0byBpbml0aWFsaXplIHRoZSBtb2R1bGUgKHNpbmNlIGl0IGlzblwndCBuZWVkZWQgb25jZVxuICAgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUpLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudCB1cGRhdGVzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIGRpY3Rpb25hcnksXG4gICBlLmcuLCAibS54ID0gMSIgaXMgZXF1aXZhbGVudCB0byAibS5fX2RpY3RfX1sieCJdID0gMSIuXG5cbiAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogIl9fZGljdF9fIiBpcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZVxuICAgYXMgYSBkaWN0aW9uYXJ5IG9iamVjdC5cblxuICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBCZWNhdXNlIG9mIHRoZSB3YXkgQ1B5dGhvblxuICAgY2xlYXJzIG1vZHVsZSBkaWN0aW9uYXJpZXMsIHRoZSBtb2R1bGUgZGljdGlvbmFyeSB3aWxsIGJlIGNsZWFyZWRcbiAgIHdoZW4gdGhlIG1vZHVsZSBmYWxscyBvdXQgb2Ygc2NvcGUgZXZlbiBpZiB0aGUgZGljdGlvbmFyeSBzdGlsbCBoYXNcbiAgIGxpdmUgcmVmZXJlbmNlcy4gIFRvIGF2b2lkIHRoaXMsIGNvcHkgdGhlIGRpY3Rpb25hcnkgb3Iga2VlcCB0aGVcbiAgIG1vZHVsZSBhcm91bmQgd2hpbGUgdXNpbmcgaXRzIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIFByZWRlZmluZWQgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzOiAiX19uYW1lX18iIGlzIHRoZSBtb2R1bGVcJ3MgbmFtZTtcbiAgICJfX2RvY19fIiBpcyB0aGUgbW9kdWxlXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciAiTm9uZSIgaWZcbiAgIHVuYXZhaWxhYmxlOyAiX19maWxlX18iIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoIHRoZVxuICAgbW9kdWxlIHdhcyBsb2FkZWQsIGlmIGl0IHdhcyBsb2FkZWQgZnJvbSBhIGZpbGUuIFRoZSAiX19maWxlX18iXG4gICBhdHRyaWJ1dGUgbWF5IGJlIG1pc3NpbmcgZm9yIGNlcnRhaW4gdHlwZXMgb2YgbW9kdWxlcywgc3VjaCBhcyBDXG4gICBtb2R1bGVzIHRoYXQgYXJlIHN0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlIGludGVycHJldGVyOyBmb3JcbiAgIGV4dGVuc2lvbiBtb2R1bGVzIGxvYWRlZCBkeW5hbWljYWxseSBmcm9tIGEgc2hhcmVkIGxpYnJhcnksIGl0IGlzXG4gICB0aGUgcGF0aG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuXG5cbkN1c3RvbSBjbGFzc2VzXG4gICBDdXN0b20gY2xhc3MgdHlwZXMgYXJlIHR5cGljYWxseSBjcmVhdGVkIGJ5IGNsYXNzIGRlZmluaXRpb25zIChzZWVcbiAgIHNlY3Rpb24gKkNsYXNzIGRlZmluaXRpb25zKikuICBBIGNsYXNzIGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZFxuICAgYnkgYSBkaWN0aW9uYXJ5IG9iamVjdC4gQ2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHRyYW5zbGF0ZWRcbiAgIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LCBlLmcuLCAiQy54IiBpcyB0cmFuc2xhdGVkIHRvXG4gICAiQy5fX2RpY3RfX1sieCJdIiAoYWx0aG91Z2ggdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGhvb2tzIHdoaWNoIGFsbG93XG4gICBmb3Igb3RoZXIgbWVhbnMgb2YgbG9jYXRpbmcgYXR0cmlidXRlcykuIFdoZW4gdGhlIGF0dHJpYnV0ZSBuYW1lIGlzXG4gICBub3QgZm91bmQgdGhlcmUsIHRoZSBhdHRyaWJ1dGUgc2VhcmNoIGNvbnRpbnVlcyBpbiB0aGUgYmFzZVxuICAgY2xhc3Nlcy4gVGhpcyBzZWFyY2ggb2YgdGhlIGJhc2UgY2xhc3NlcyB1c2VzIHRoZSBDMyBtZXRob2RcbiAgIHJlc29sdXRpb24gb3JkZXIgd2hpY2ggYmVoYXZlcyBjb3JyZWN0bHkgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2ZcbiAgIFwnZGlhbW9uZFwnIGluaGVyaXRhbmNlIHN0cnVjdHVyZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlXG4gICBpbmhlcml0YW5jZSBwYXRocyBsZWFkaW5nIGJhY2sgdG8gYSBjb21tb24gYW5jZXN0b3IuIEFkZGl0aW9uYWxcbiAgIGRldGFpbHMgb24gdGhlIEMzIE1STyB1c2VkIGJ5IFB5dGhvbiBjYW4gYmUgZm91bmQgaW4gdGhlXG4gICBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgMi4zIHJlbGVhc2UgYXRcbiAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy5cblxuICAgV2hlbiBhIGNsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2UgKGZvciBjbGFzcyAiQyIsIHNheSkgd291bGQgeWllbGQgYVxuICAgY2xhc3MgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBpbnN0YW5jZSBtZXRob2RcbiAgIG9iamVjdCB3aG9zZSAiX19zZWxmX18iIGF0dHJpYnV0ZXMgaXMgIkMiLiAgV2hlbiBpdCB3b3VsZCB5aWVsZCBhXG4gICBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgb2JqZWN0IHdyYXBwZWQgYnlcbiAgIHRoZSBzdGF0aWMgbWV0aG9kIG9iamVjdC4gU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycypcbiAgIGZvciBhbm90aGVyIHdheSBpbiB3aGljaCBhdHRyaWJ1dGVzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3MgbWF5XG4gICBkaWZmZXIgZnJvbSB0aG9zZSBhY3R1YWxseSBjb250YWluZWQgaW4gaXRzICJfX2RpY3RfXyIuXG5cbiAgIENsYXNzIGF0dHJpYnV0ZSBhc3NpZ25tZW50cyB1cGRhdGUgdGhlIGNsYXNzXCdzIGRpY3Rpb25hcnksIG5ldmVyXG4gICB0aGUgZGljdGlvbmFyeSBvZiBhIGJhc2UgY2xhc3MuXG5cbiAgIEEgY2xhc3Mgb2JqZWN0IGNhbiBiZSBjYWxsZWQgKHNlZSBhYm92ZSkgdG8geWllbGQgYSBjbGFzcyBpbnN0YW5jZVxuICAgKHNlZSBiZWxvdykuXG5cbiAgIFNwZWNpYWwgYXR0cmlidXRlczogIl9fbmFtZV9fIiBpcyB0aGUgY2xhc3MgbmFtZTsgIl9fbW9kdWxlX18iIGlzXG4gICB0aGUgbW9kdWxlIG5hbWUgaW4gd2hpY2ggdGhlIGNsYXNzIHdhcyBkZWZpbmVkOyAiX19kaWN0X18iIGlzIHRoZVxuICAgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBjbGFzc1wncyBuYW1lc3BhY2U7ICJfX2Jhc2VzX18iIGlzIGEgdHVwbGVcbiAgIChwb3NzaWJseSBlbXB0eSBvciBhIHNpbmdsZXRvbikgY29udGFpbmluZyB0aGUgYmFzZSBjbGFzc2VzLCBpbiB0aGVcbiAgIG9yZGVyIG9mIHRoZWlyIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdDsgIl9fZG9jX18iIGlzIHRoZVxuICAgY2xhc3NcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIE5vbmUgaWYgdW5kZWZpbmVkLlxuXG5DbGFzcyBpbnN0YW5jZXNcbiAgIEEgY2xhc3MgaW5zdGFuY2UgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGEgY2xhc3Mgb2JqZWN0IChzZWUgYWJvdmUpLlxuICAgQSBjbGFzcyBpbnN0YW5jZSBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYXMgYSBkaWN0aW9uYXJ5IHdoaWNoXG4gICBpcyB0aGUgZmlyc3QgcGxhY2UgaW4gd2hpY2ggYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHNlYXJjaGVkLlxuICAgV2hlbiBhbiBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kIHRoZXJlLCBhbmQgdGhlIGluc3RhbmNlXCdzIGNsYXNzIGhhc1xuICAgYW4gYXR0cmlidXRlIGJ5IHRoYXQgbmFtZSwgdGhlIHNlYXJjaCBjb250aW51ZXMgd2l0aCB0aGUgY2xhc3NcbiAgIGF0dHJpYnV0ZXMuICBJZiBhIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aGF0IGlzIGEgdXNlci1kZWZpbmVkXG4gICBmdW5jdGlvbiBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdFxuICAgd2hvc2UgIl9fc2VsZl9fIiBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLiAgU3RhdGljIG1ldGhvZCBhbmRcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBhbHNvIHRyYW5zZm9ybWVkOyBzZWUgYWJvdmUgdW5kZXJcbiAgICJDbGFzc2VzIi4gIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqIGZvciBhbm90aGVyIHdheVxuICAgaW4gd2hpY2ggYXR0cmlidXRlcyBvZiBhIGNsYXNzIHJldHJpZXZlZCB2aWEgaXRzIGluc3RhbmNlcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRoZSBvYmplY3RzIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGUgY2xhc3NcJ3MgIl9fZGljdF9fIi5cbiAgIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCwgYW5kIHRoZSBvYmplY3RcJ3MgY2xhc3MgaGFzIGFcbiAgICJfX2dldGF0dHJfXygpIiBtZXRob2QsIHRoYXQgaXMgY2FsbGVkIHRvIHNhdGlzZnkgdGhlIGxvb2t1cC5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnRzIGFuZCBkZWxldGlvbnMgdXBkYXRlIHRoZSBpbnN0YW5jZVwnc1xuICAgZGljdGlvbmFyeSwgbmV2ZXIgYSBjbGFzc1wncyBkaWN0aW9uYXJ5LiAgSWYgdGhlIGNsYXNzIGhhcyBhXG4gICAiX19zZXRhdHRyX18oKSIgb3IgIl9fZGVsYXR0cl9fKCkiIG1ldGhvZCwgdGhpcyBpcyBjYWxsZWQgaW5zdGVhZFxuICAgb2YgdXBkYXRpbmcgdGhlIGluc3RhbmNlIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIENsYXNzIGluc3RhbmNlcyBjYW4gcHJldGVuZCB0byBiZSBudW1iZXJzLCBzZXF1ZW5jZXMsIG9yIG1hcHBpbmdzXG4gICBpZiB0aGV5IGhhdmUgbWV0aG9kcyB3aXRoIGNlcnRhaW4gc3BlY2lhbCBuYW1lcy4gIFNlZSBzZWN0aW9uXG4gICAqU3BlY2lhbCBtZXRob2QgbmFtZXMqLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6ICJfX2RpY3RfXyIgaXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5O1xuICAgIl9fY2xhc3NfXyIgaXMgdGhlIGluc3RhbmNlXCdzIGNsYXNzLlxuXG5JL08gb2JqZWN0cyAoYWxzbyBrbm93biBhcyBmaWxlIG9iamVjdHMpXG4gICBBICpmaWxlIG9iamVjdCogcmVwcmVzZW50cyBhbiBvcGVuIGZpbGUuICBWYXJpb3VzIHNob3J0Y3V0cyBhcmVcbiAgIGF2YWlsYWJsZSB0byBjcmVhdGUgZmlsZSBvYmplY3RzOiB0aGUgIm9wZW4oKSIgYnVpbHQtaW4gZnVuY3Rpb24sXG4gICBhbmQgYWxzbyAib3MucG9wZW4oKSIsICJvcy5mZG9wZW4oKSIsIGFuZCB0aGUgIm1ha2VmaWxlKCkiIG1ldGhvZFxuICAgb2Ygc29ja2V0IG9iamVjdHMgKGFuZCBwZXJoYXBzIGJ5IG90aGVyIGZ1bmN0aW9ucyBvciBtZXRob2RzXG4gICBwcm92aWRlZCBieSBleHRlbnNpb24gbW9kdWxlcykuXG5cbiAgIFRoZSBvYmplY3RzICJzeXMuc3RkaW4iLCAic3lzLnN0ZG91dCIgYW5kICJzeXMuc3RkZXJyIiBhcmVcbiAgIGluaXRpYWxpemVkIHRvIGZpbGUgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnRlcnByZXRlclwnc1xuICAgc3RhbmRhcmQgaW5wdXQsIG91dHB1dCBhbmQgZXJyb3Igc3RyZWFtczsgdGhleSBhcmUgYWxsIG9wZW4gaW4gdGV4dFxuICAgbW9kZSBhbmQgdGhlcmVmb3JlIGZvbGxvdyB0aGUgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhlXG4gICAiaW8uVGV4dElPQmFzZSIgYWJzdHJhY3QgY2xhc3MuXG5cbkludGVybmFsIHR5cGVzXG4gICBBIGZldyB0eXBlcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGludGVycHJldGVyIGFyZSBleHBvc2VkIHRvIHRoZVxuICAgdXNlci4gVGhlaXIgZGVmaW5pdGlvbnMgbWF5IGNoYW5nZSB3aXRoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGVcbiAgIGludGVycHJldGVyLCBidXQgdGhleSBhcmUgbWVudGlvbmVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy5cblxuICAgQ29kZSBvYmplY3RzXG4gICAgICBDb2RlIG9iamVjdHMgcmVwcmVzZW50ICpieXRlLWNvbXBpbGVkKiBleGVjdXRhYmxlIFB5dGhvbiBjb2RlLFxuICAgICAgb3IgKmJ5dGVjb2RlKi4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGNvZGUgb2JqZWN0IGFuZCBhXG4gICAgICBmdW5jdGlvbiBvYmplY3QgaXMgdGhhdCB0aGUgZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGFuIGV4cGxpY2l0XG4gICAgICByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uXCdzIGdsb2JhbHMgKHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQgd2FzXG4gICAgICBkZWZpbmVkKSwgd2hpbGUgYSBjb2RlIG9iamVjdCBjb250YWlucyBubyBjb250ZXh0OyBhbHNvIHRoZVxuICAgICAgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgZnVuY3Rpb24gb2JqZWN0LCBub3RcbiAgICAgIGluIHRoZSBjb2RlIG9iamVjdCAoYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB2YWx1ZXMgY2FsY3VsYXRlZCBhdFxuICAgICAgcnVuLXRpbWUpLiAgVW5saWtlIGZ1bmN0aW9uIG9iamVjdHMsIGNvZGUgb2JqZWN0cyBhcmUgaW1tdXRhYmxlXG4gICAgICBhbmQgY29udGFpbiBubyByZWZlcmVuY2VzIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB0byBtdXRhYmxlXG4gICAgICBvYmplY3RzLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiY29fbmFtZSIgZ2l2ZXMgdGhlIGZ1bmN0aW9uIG5hbWU7XG4gICAgICAiY29fYXJnY291bnQiIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMgKGluY2x1ZGluZ1xuICAgICAgYXJndW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMpOyAiY29fbmxvY2FscyIgaXMgdGhlIG51bWJlciBvZlxuICAgICAgbG9jYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIChpbmNsdWRpbmcgYXJndW1lbnRzKTtcbiAgICAgICJjb192YXJuYW1lcyIgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgbG9jYWxcbiAgICAgIHZhcmlhYmxlcyAoc3RhcnRpbmcgd2l0aCB0aGUgYXJndW1lbnQgbmFtZXMpOyAiY29fY2VsbHZhcnMiIGlzIGFcbiAgICAgIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGxvY2FsIHZhcmlhYmxlcyB0aGF0IGFyZVxuICAgICAgcmVmZXJlbmNlZCBieSBuZXN0ZWQgZnVuY3Rpb25zOyAiY29fZnJlZXZhcnMiIGlzIGEgdHVwbGVcbiAgICAgIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGZyZWUgdmFyaWFibGVzOyAiY29fY29kZSIgaXMgYSBzdHJpbmdcbiAgICAgIHJlcHJlc2VudGluZyB0aGUgc2VxdWVuY2Ugb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zOyAiY29fY29uc3RzIlxuICAgICAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBsaXRlcmFscyB1c2VkIGJ5IHRoZSBieXRlY29kZTtcbiAgICAgICJjb19uYW1lcyIgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyB1c2VkIGJ5IHRoZSBieXRlY29kZTtcbiAgICAgICJjb19maWxlbmFtZSIgaXMgdGhlIGZpbGVuYW1lIGZyb20gd2hpY2ggdGhlIGNvZGUgd2FzIGNvbXBpbGVkO1xuICAgICAgImNvX2ZpcnN0bGluZW5vIiBpcyB0aGUgZmlyc3QgbGluZSBudW1iZXIgb2YgdGhlIGZ1bmN0aW9uO1xuICAgICAgImNvX2xub3RhYiIgaXMgYSBzdHJpbmcgZW5jb2RpbmcgdGhlIG1hcHBpbmcgZnJvbSBieXRlY29kZVxuICAgICAgb2Zmc2V0cyB0byBsaW5lIG51bWJlcnMgKGZvciBkZXRhaWxzIHNlZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlXG4gICAgICBpbnRlcnByZXRlcik7ICJjb19zdGFja3NpemUiIGlzIHRoZSByZXF1aXJlZCBzdGFjayBzaXplXG4gICAgICAoaW5jbHVkaW5nIGxvY2FsIHZhcmlhYmxlcyk7ICJjb19mbGFncyIgaXMgYW4gaW50ZWdlciBlbmNvZGluZyBhXG4gICAgICBudW1iZXIgb2YgZmxhZ3MgZm9yIHRoZSBpbnRlcnByZXRlci5cblxuICAgICAgVGhlIGZvbGxvd2luZyBmbGFnIGJpdHMgYXJlIGRlZmluZWQgZm9yICJjb19mbGFncyI6IGJpdCAiMHgwNCJcbiAgICAgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgIiphcmd1bWVudHMiIHN5bnRheCB0byBhY2NlcHQgYW5cbiAgICAgIGFyYml0cmFyeSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHM7IGJpdCAiMHgwOCIgaXMgc2V0IGlmXG4gICAgICB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgIioqa2V5d29yZHMiIHN5bnRheCB0byBhY2NlcHQgYXJiaXRyYXJ5XG4gICAgICBrZXl3b3JkIGFyZ3VtZW50czsgYml0ICIweDIwIiBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIGlzIGFcbiAgICAgIGdlbmVyYXRvci5cblxuICAgICAgRnV0dXJlIGZlYXR1cmUgZGVjbGFyYXRpb25zICgiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiIpXG4gICAgICBhbHNvIHVzZSBiaXRzIGluICJjb19mbGFncyIgdG8gaW5kaWNhdGUgd2hldGhlciBhIGNvZGUgb2JqZWN0XG4gICAgICB3YXMgY29tcGlsZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkOiBiaXQgIjB4MjAwMCIgaXNcbiAgICAgIHNldCBpZiB0aGUgZnVuY3Rpb24gd2FzIGNvbXBpbGVkIHdpdGggZnV0dXJlIGRpdmlzaW9uIGVuYWJsZWQ7XG4gICAgICBiaXRzICIweDEwIiBhbmQgIjB4MTAwMCIgd2VyZSB1c2VkIGluIGVhcmxpZXIgdmVyc2lvbnMgb2ZcbiAgICAgIFB5dGhvbi5cblxuICAgICAgT3RoZXIgYml0cyBpbiAiY29fZmxhZ3MiIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlLlxuXG4gICAgICBJZiBhIGNvZGUgb2JqZWN0IHJlcHJlc2VudHMgYSBmdW5jdGlvbiwgdGhlIGZpcnN0IGl0ZW0gaW5cbiAgICAgICJjb19jb25zdHMiIGlzIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBvZiB0aGUgZnVuY3Rpb24sIG9yXG4gICAgICAiTm9uZSIgaWYgdW5kZWZpbmVkLlxuXG4gICBGcmFtZSBvYmplY3RzXG4gICAgICBGcmFtZSBvYmplY3RzIHJlcHJlc2VudCBleGVjdXRpb24gZnJhbWVzLiAgVGhleSBtYXkgb2NjdXIgaW5cbiAgICAgIHRyYWNlYmFjayBvYmplY3RzIChzZWUgYmVsb3cpLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiZl9iYWNrIiBpcyB0byB0aGUgcHJldmlvdXMgc3RhY2tcbiAgICAgIGZyYW1lICh0b3dhcmRzIHRoZSBjYWxsZXIpLCBvciAiTm9uZSIgaWYgdGhpcyBpcyB0aGUgYm90dG9tXG4gICAgICBzdGFjayBmcmFtZTsgImZfY29kZSIgaXMgdGhlIGNvZGUgb2JqZWN0IGJlaW5nIGV4ZWN1dGVkIGluIHRoaXNcbiAgICAgIGZyYW1lOyAiZl9sb2NhbHMiIGlzIHRoZSBkaWN0aW9uYXJ5IHVzZWQgdG8gbG9vayB1cCBsb2NhbFxuICAgICAgdmFyaWFibGVzOyAiZl9nbG9iYWxzIiBpcyB1c2VkIGZvciBnbG9iYWwgdmFyaWFibGVzO1xuICAgICAgImZfYnVpbHRpbnMiIGlzIHVzZWQgZm9yIGJ1aWx0LWluIChpbnRyaW5zaWMpIG5hbWVzOyAiZl9sYXN0aSJcbiAgICAgIGdpdmVzIHRoZSBwcmVjaXNlIGluc3RydWN0aW9uICh0aGlzIGlzIGFuIGluZGV4IGludG8gdGhlXG4gICAgICBieXRlY29kZSBzdHJpbmcgb2YgdGhlIGNvZGUgb2JqZWN0KS5cblxuICAgICAgU3BlY2lhbCB3cml0YWJsZSBhdHRyaWJ1dGVzOiAiZl90cmFjZSIsIGlmIG5vdCAiTm9uZSIsIGlzIGFcbiAgICAgIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgY29kZSBsaW5lICh0aGlzIGlzXG4gICAgICB1c2VkIGJ5IHRoZSBkZWJ1Z2dlcik7ICJmX2xpbmVubyIgaXMgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIgb2ZcbiAgICAgIHRoZSBmcmFtZSAtLS0gd3JpdGluZyB0byB0aGlzIGZyb20gd2l0aGluIGEgdHJhY2UgZnVuY3Rpb24ganVtcHNcbiAgICAgIHRvIHRoZSBnaXZlbiBsaW5lIChvbmx5IGZvciB0aGUgYm90dG9tLW1vc3QgZnJhbWUpLiAgQSBkZWJ1Z2dlclxuICAgICAgY2FuIGltcGxlbWVudCBhIEp1bXAgY29tbWFuZCAoYWthIFNldCBOZXh0IFN0YXRlbWVudCkgYnkgd3JpdGluZ1xuICAgICAgdG8gZl9saW5lbm8uXG5cbiAgICAgIEZyYW1lIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOlxuXG4gICAgICBmcmFtZS5jbGVhcigpXG5cbiAgICAgICAgIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgcmVmZXJlbmNlcyB0byBsb2NhbCB2YXJpYWJsZXMgaGVsZCBieVxuICAgICAgICAgdGhlIGZyYW1lLiAgQWxzbywgaWYgdGhlIGZyYW1lIGJlbG9uZ2VkIHRvIGEgZ2VuZXJhdG9yLCB0aGVcbiAgICAgICAgIGdlbmVyYXRvciBpcyBmaW5hbGl6ZWQuICBUaGlzIGhlbHBzIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXNcbiAgICAgICAgIGludm9sdmluZyBmcmFtZSBvYmplY3RzIChmb3IgZXhhbXBsZSB3aGVuIGNhdGNoaW5nIGFuXG4gICAgICAgICBleGNlcHRpb24gYW5kIHN0b3JpbmcgaXRzIHRyYWNlYmFjayBmb3IgbGF0ZXIgdXNlKS5cblxuICAgICAgICAgIlJ1bnRpbWVFcnJvciIgaXMgcmFpc2VkIGlmIHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLlxuXG4gICAgICAgICBOZXcgaW4gdmVyc2lvbiAzLjQuXG5cbiAgIFRyYWNlYmFjayBvYmplY3RzXG4gICAgICBUcmFjZWJhY2sgb2JqZWN0cyByZXByZXNlbnQgYSBzdGFjayB0cmFjZSBvZiBhbiBleGNlcHRpb24uICBBXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0IGlzIGNyZWF0ZWQgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLiAgV2hlbiB0aGVcbiAgICAgIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdW53aW5kcyB0aGUgZXhlY3V0aW9uIHN0YWNrLCBhdFxuICAgICAgZWFjaCB1bndvdW5kIGxldmVsIGEgdHJhY2ViYWNrIG9iamVjdCBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZlxuICAgICAgdGhlIGN1cnJlbnQgdHJhY2ViYWNrLiAgV2hlbiBhbiBleGNlcHRpb24gaGFuZGxlciBpcyBlbnRlcmVkLFxuICAgICAgdGhlIHN0YWNrIHRyYWNlIGlzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtLiAoU2VlIHNlY3Rpb25cbiAgICAgICpUaGUgdHJ5IHN0YXRlbWVudCouKSBJdCBpcyBhY2Nlc3NpYmxlIGFzIHRoZSB0aGlyZCBpdGVtIG9mIHRoZVxuICAgICAgdHVwbGUgcmV0dXJuZWQgYnkgInN5cy5leGNfaW5mbygpIi4gV2hlbiB0aGUgcHJvZ3JhbSBjb250YWlucyBub1xuICAgICAgc3VpdGFibGUgaGFuZGxlciwgdGhlIHN0YWNrIHRyYWNlIGlzIHdyaXR0ZW4gKG5pY2VseSBmb3JtYXR0ZWQpXG4gICAgICB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtOyBpZiB0aGUgaW50ZXJwcmV0ZXIgaXMgaW50ZXJhY3RpdmUsXG4gICAgICBpdCBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGFzICJzeXMubGFzdF90cmFjZWJhY2siLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAidGJfbmV4dCIgaXMgdGhlIG5leHQgbGV2ZWwgaW4gdGhlXG4gICAgICBzdGFjayB0cmFjZSAodG93YXJkcyB0aGUgZnJhbWUgd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCksIG9yXG4gICAgICAiTm9uZSIgaWYgdGhlcmUgaXMgbm8gbmV4dCBsZXZlbDsgInRiX2ZyYW1lIiBwb2ludHMgdG8gdGhlXG4gICAgICBleGVjdXRpb24gZnJhbWUgb2YgdGhlIGN1cnJlbnQgbGV2ZWw7ICJ0Yl9saW5lbm8iIGdpdmVzIHRoZSBsaW5lXG4gICAgICBudW1iZXIgd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZDsgInRiX2xhc3RpIiBpbmRpY2F0ZXMgdGhlXG4gICAgICBwcmVjaXNlIGluc3RydWN0aW9uLiAgVGhlIGxpbmUgbnVtYmVyIGFuZCBsYXN0IGluc3RydWN0aW9uIGluXG4gICAgICB0aGUgdHJhY2ViYWNrIG1heSBkaWZmZXIgZnJvbSB0aGUgbGluZSBudW1iZXIgb2YgaXRzIGZyYW1lXG4gICAgICBvYmplY3QgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBhICJ0cnkiIHN0YXRlbWVudCB3aXRoIG5vXG4gICAgICBtYXRjaGluZyBleGNlcHQgY2xhdXNlIG9yIHdpdGggYSBmaW5hbGx5IGNsYXVzZS5cblxuICAgU2xpY2Ugb2JqZWN0c1xuICAgICAgU2xpY2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgc2xpY2VzIGZvciAiX19nZXRpdGVtX18oKSJcbiAgICAgIG1ldGhvZHMuICBUaGV5IGFyZSBhbHNvIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluICJzbGljZSgpIlxuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6ICJzdGFydCIgaXMgdGhlIGxvd2VyIGJvdW5kOyAic3RvcCJcbiAgICAgIGlzIHRoZSB1cHBlciBib3VuZDsgInN0ZXAiIGlzIHRoZSBzdGVwIHZhbHVlOyBlYWNoIGlzICJOb25lIiBpZlxuICAgICAgb21pdHRlZC4gIFRoZXNlIGF0dHJpYnV0ZXMgY2FuIGhhdmUgYW55IHR5cGUuXG5cbiAgICAgIFNsaWNlIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOlxuXG4gICAgICBzbGljZS5pbmRpY2VzKHNlbGYsIGxlbmd0aClcblxuICAgICAgICAgVGhpcyBtZXRob2QgdGFrZXMgYSBzaW5nbGUgaW50ZWdlciBhcmd1bWVudCAqbGVuZ3RoKiBhbmRcbiAgICAgICAgIGNvbXB1dGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzbGljZSB0aGF0IHRoZSBzbGljZSBvYmplY3RcbiAgICAgICAgIHdvdWxkIGRlc2NyaWJlIGlmIGFwcGxpZWQgdG8gYSBzZXF1ZW5jZSBvZiAqbGVuZ3RoKiBpdGVtcy5cbiAgICAgICAgIEl0IHJldHVybnMgYSB0dXBsZSBvZiB0aHJlZSBpbnRlZ2VyczsgcmVzcGVjdGl2ZWx5IHRoZXNlIGFyZVxuICAgICAgICAgdGhlICpzdGFydCogYW5kICpzdG9wKiBpbmRpY2VzIGFuZCB0aGUgKnN0ZXAqIG9yIHN0cmlkZVxuICAgICAgICAgbGVuZ3RoIG9mIHRoZSBzbGljZS4gTWlzc2luZyBvciBvdXQtb2YtYm91bmRzIGluZGljZXMgYXJlXG4gICAgICAgICBoYW5kbGVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCByZWd1bGFyIHNsaWNlcy5cblxuICAgU3RhdGljIG1ldGhvZCBvYmplY3RzXG4gICAgICBTdGF0aWMgbWV0aG9kIG9iamVjdHMgcHJvdmlkZSBhIHdheSBvZiBkZWZlYXRpbmcgdGhlXG4gICAgICB0cmFuc2Zvcm1hdGlvbiBvZiBmdW5jdGlvbiBvYmplY3RzIHRvIG1ldGhvZCBvYmplY3RzIGRlc2NyaWJlZFxuICAgICAgYWJvdmUuIEEgc3RhdGljIG1ldGhvZCBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbnkgb3RoZXJcbiAgICAgIG9iamVjdCwgdXN1YWxseSBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0LiBXaGVuIGEgc3RhdGljXG4gICAgICBtZXRob2Qgb2JqZWN0IGlzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3Mgb3IgYSBjbGFzcyBpbnN0YW5jZSwgdGhlXG4gICAgICBvYmplY3QgYWN0dWFsbHkgcmV0dXJuZWQgaXMgdGhlIHdyYXBwZWQgb2JqZWN0LCB3aGljaCBpcyBub3RcbiAgICAgIHN1YmplY3QgdG8gYW55IGZ1cnRoZXIgdHJhbnNmb3JtYXRpb24uIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmVcbiAgICAgIG5vdCB0aGVtc2VsdmVzIGNhbGxhYmxlLCBhbHRob3VnaCB0aGUgb2JqZWN0cyB0aGV5IHdyYXAgdXN1YWxseVxuICAgICAgYXJlLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICAic3RhdGljbWV0aG9kKCkiIGNvbnN0cnVjdG9yLlxuXG4gICBDbGFzcyBtZXRob2Qgb2JqZWN0c1xuICAgICAgQSBjbGFzcyBtZXRob2Qgb2JqZWN0LCBsaWtlIGEgc3RhdGljIG1ldGhvZCBvYmplY3QsIGlzIGEgd3JhcHBlclxuICAgICAgYXJvdW5kIGFub3RoZXIgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSB3YXkgaW4gd2hpY2ggdGhhdCBvYmplY3RcbiAgICAgIGlzIHJldHJpZXZlZCBmcm9tIGNsYXNzZXMgYW5kIGNsYXNzIGluc3RhbmNlcy4gVGhlIGJlaGF2aW91ciBvZlxuICAgICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgdXBvbiBzdWNoIHJldHJpZXZhbCBpcyBkZXNjcmliZWQgYWJvdmUsXG4gICAgICB1bmRlciAiVXNlci1kZWZpbmVkIG1ldGhvZHMiLiBDbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZFxuICAgICAgYnkgdGhlIGJ1aWx0LWluICJjbGFzc21ldGhvZCgpIiBjb25zdHJ1Y3Rvci5cbicsCiAgJ3R5cGVzZnVuY3Rpb25zJzogJ1xuRnVuY3Rpb25zXG4qKioqKioqKipcblxuRnVuY3Rpb24gb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFRoZSBvbmx5XG5vcGVyYXRpb24gb24gYSBmdW5jdGlvbiBvYmplY3QgaXMgdG8gY2FsbCBpdDogImZ1bmMoYXJndW1lbnQtbGlzdCkiLlxuXG5UaGVyZSBhcmUgcmVhbGx5IHR3byBmbGF2b3JzIG9mIGZ1bmN0aW9uIG9iamVjdHM6IGJ1aWx0LWluIGZ1bmN0aW9uc1xuYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMuICBCb3RoIHN1cHBvcnQgdGhlIHNhbWUgb3BlcmF0aW9uICh0byBjYWxsXG50aGUgZnVuY3Rpb24pLCBidXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIGRpZmZlcmVudCwgaGVuY2UgdGhlXG5kaWZmZXJlbnQgb2JqZWN0IHR5cGVzLlxuXG5TZWUgKkZ1bmN0aW9uIGRlZmluaXRpb25zKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicsCiAgJ3R5cGVzbWFwcGluZyc6ICdcbk1hcHBpbmcgVHlwZXMgLS0tICJkaWN0IlxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkEgKm1hcHBpbmcqIG9iamVjdCBtYXBzICpoYXNoYWJsZSogdmFsdWVzIHRvIGFyYml0cmFyeSBvYmplY3RzLlxuTWFwcGluZ3MgYXJlIG11dGFibGUgb2JqZWN0cy4gIFRoZXJlIGlzIGN1cnJlbnRseSBvbmx5IG9uZSBzdGFuZGFyZFxubWFwcGluZyB0eXBlLCB0aGUgKmRpY3Rpb25hcnkqLiAgKEZvciBvdGhlciBjb250YWluZXJzIHNlZSB0aGUgYnVpbHQtXG5pbiAibGlzdCIsICJzZXQiLCBhbmQgInR1cGxlIiBjbGFzc2VzLCBhbmQgdGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlLilcblxuQSBkaWN0aW9uYXJ5XCdzIGtleXMgYXJlICphbG1vc3QqIGFyYml0cmFyeSB2YWx1ZXMuICBWYWx1ZXMgdGhhdCBhcmVcbm5vdCAqaGFzaGFibGUqLCB0aGF0IGlzLCB2YWx1ZXMgY29udGFpbmluZyBsaXN0cywgZGljdGlvbmFyaWVzIG9yXG5vdGhlciBtdXRhYmxlIHR5cGVzICh0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbmlkZW50aXR5KSBtYXkgbm90IGJlIHVzZWQgYXMga2V5cy4gIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5XG50aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWxcbihzdWNoIGFzICIxIiBhbmQgIjEuMCIpIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG8gaW5kZXhcbnRoZSBzYW1lIGRpY3Rpb25hcnkgZW50cnkuICAoTm90ZSBob3dldmVyLCB0aGF0IHNpbmNlIGNvbXB1dGVycyBzdG9yZVxuZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcyBhcHByb3hpbWF0aW9ucyBpdCBpcyB1c3VhbGx5IHVud2lzZSB0byB1c2VcbnRoZW0gYXMgZGljdGlvbmFyeSBrZXlzLilcblxuRGljdGlvbmFyaWVzIGNhbiBiZSBjcmVhdGVkIGJ5IHBsYWNpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiAia2V5OlxudmFsdWUiIHBhaXJzIHdpdGhpbiBicmFjZXMsIGZvciBleGFtcGxlOiAie1wnamFja1wnOiA0MDk4LCBcJ3Nqb2VyZFwnOlxuNDEyN30iIG9yICJ7NDA5ODogXCdqYWNrXCcsIDQxMjc6IFwnc2pvZXJkXCd9Iiwgb3IgYnkgdGhlICJkaWN0IlxuY29uc3RydWN0b3IuXG5cbmNsYXNzIGNsYXNzIGRpY3QoKiprd2FyZylcbmNsYXNzIGNsYXNzIGRpY3QobWFwcGluZywgKiprd2FyZylcbmNsYXNzIGNsYXNzIGRpY3QoaXRlcmFibGUsICoqa3dhcmcpXG5cbiAgIFJldHVybiBhIG5ldyBkaWN0aW9uYXJ5IGluaXRpYWxpemVkIGZyb20gYW4gb3B0aW9uYWwgcG9zaXRpb25hbFxuICAgYXJndW1lbnQgYW5kIGEgcG9zc2libHkgZW1wdHkgc2V0IG9mIGtleXdvcmQgYXJndW1lbnRzLlxuXG4gICBJZiBubyBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuLCBhbiBlbXB0eSBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQuXG4gICBJZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgZ2l2ZW4gYW5kIGl0IGlzIGEgbWFwcGluZyBvYmplY3QsIGFcbiAgIGRpY3Rpb25hcnkgaXMgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIGtleS12YWx1ZSBwYWlycyBhcyB0aGUgbWFwcGluZ1xuICAgb2JqZWN0LiAgT3RoZXJ3aXNlLCB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBtdXN0IGJlIGFuICppdGVyYXRvcipcbiAgIG9iamVjdC4gIEVhY2ggaXRlbSBpbiB0aGUgaXRlcmFibGUgbXVzdCBpdHNlbGYgYmUgYW4gaXRlcmF0b3Igd2l0aFxuICAgZXhhY3RseSB0d28gb2JqZWN0cy4gIFRoZSBmaXJzdCBvYmplY3Qgb2YgZWFjaCBpdGVtIGJlY29tZXMgYSBrZXlcbiAgIGluIHRoZSBuZXcgZGljdGlvbmFyeSwgYW5kIHRoZSBzZWNvbmQgb2JqZWN0IHRoZSBjb3JyZXNwb25kaW5nXG4gICB2YWx1ZS4gIElmIGEga2V5IG9jY3VycyBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3QgdmFsdWUgZm9yIHRoYXQga2V5XG4gICBiZWNvbWVzIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBuZXcgZGljdGlvbmFyeS5cblxuICAgSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIGdpdmVuLCB0aGUga2V5d29yZCBhcmd1bWVudHMgYW5kIHRoZWlyXG4gICB2YWx1ZXMgYXJlIGFkZGVkIHRvIHRoZSBkaWN0aW9uYXJ5IGNyZWF0ZWQgZnJvbSB0aGUgcG9zaXRpb25hbFxuICAgYXJndW1lbnQuICBJZiBhIGtleSBiZWluZyBhZGRlZCBpcyBhbHJlYWR5IHByZXNlbnQsIHRoZSB2YWx1ZSBmcm9tXG4gICB0aGUga2V5d29yZCBhcmd1bWVudCByZXBsYWNlcyB0aGUgdmFsdWUgZnJvbSB0aGUgcG9zaXRpb25hbFxuICAgYXJndW1lbnQuXG5cbiAgIFRvIGlsbHVzdHJhdGUsIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgYWxsIHJldHVybiBhIGRpY3Rpb25hcnkgZXF1YWxcbiAgIHRvICJ7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzfSI6XG5cbiAgICAgID4+PiBhID0gZGljdChvbmU9MSwgdHdvPTIsIHRocmVlPTMpXG4gICAgICA+Pj4gYiA9IHtcJ29uZVwnOiAxLCBcJ3R3b1wnOiAyLCBcJ3RocmVlXCc6IDN9XG4gICAgICA+Pj4gYyA9IGRpY3QoemlwKFtcJ29uZVwnLCBcJ3R3b1wnLCBcJ3RocmVlXCddLCBbMSwgMiwgM10pKVxuICAgICAgPj4+IGQgPSBkaWN0KFsoXCd0d29cJywgMiksIChcJ29uZVwnLCAxKSwgKFwndGhyZWVcJywgMyldKVxuICAgICAgPj4+IGUgPSBkaWN0KHtcJ3RocmVlXCc6IDMsIFwnb25lXCc6IDEsIFwndHdvXCc6IDJ9KVxuICAgICAgPj4+IGEgPT0gYiA9PSBjID09IGQgPT0gZVxuICAgICAgVHJ1ZVxuXG4gICBQcm92aWRpbmcga2V5d29yZCBhcmd1bWVudHMgYXMgaW4gdGhlIGZpcnN0IGV4YW1wbGUgb25seSB3b3JrcyBmb3JcbiAgIGtleXMgdGhhdCBhcmUgdmFsaWQgUHl0aG9uIGlkZW50aWZpZXJzLiAgT3RoZXJ3aXNlLCBhbnkgdmFsaWQga2V5c1xuICAgY2FuIGJlIHVzZWQuXG5cbiAgIFRoZXNlIGFyZSB0aGUgb3BlcmF0aW9ucyB0aGF0IGRpY3Rpb25hcmllcyBzdXBwb3J0IChhbmQgdGhlcmVmb3JlLFxuICAgY3VzdG9tIG1hcHBpbmcgdHlwZXMgc2hvdWxkIHN1cHBvcnQgdG9vKTpcblxuICAgbGVuKGQpXG5cbiAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBkaWN0aW9uYXJ5ICpkKi5cblxuICAgZFtrZXldXG5cbiAgICAgIFJldHVybiB0aGUgaXRlbSBvZiAqZCogd2l0aCBrZXkgKmtleSouICBSYWlzZXMgYSAiS2V5RXJyb3IiIGlmXG4gICAgICAqa2V5KiBpcyBub3QgaW4gdGhlIG1hcC5cblxuICAgICAgSWYgYSBzdWJjbGFzcyBvZiBkaWN0IGRlZmluZXMgYSBtZXRob2QgIl9fbWlzc2luZ19fKCkiLCBpZiB0aGVcbiAgICAgIGtleSAqa2V5KiBpcyBub3QgcHJlc2VudCwgdGhlICJkW2tleV0iIG9wZXJhdGlvbiBjYWxscyB0aGF0XG4gICAgICBtZXRob2Qgd2l0aCB0aGUga2V5ICprZXkqIGFzIGFyZ3VtZW50LiAgVGhlICJkW2tleV0iIG9wZXJhdGlvblxuICAgICAgdGhlbiByZXR1cm5zIG9yIHJhaXNlcyB3aGF0ZXZlciBpcyByZXR1cm5lZCBvciByYWlzZWQgYnkgdGhlXG4gICAgICAiX19taXNzaW5nX18oa2V5KSIgY2FsbCBpZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50LiBObyBvdGhlclxuICAgICAgb3BlcmF0aW9ucyBvciBtZXRob2RzIGludm9rZSAiX19taXNzaW5nX18oKSIuIElmICJfX21pc3NpbmdfXygpIlxuICAgICAgaXMgbm90IGRlZmluZWQsICJLZXlFcnJvciIgaXMgcmFpc2VkLiAiX19taXNzaW5nX18oKSIgbXVzdCBiZSBhXG4gICAgICBtZXRob2Q7IGl0IGNhbm5vdCBiZSBhbiBpbnN0YW5jZSB2YXJpYWJsZTpcblxuICAgICAgICAgPj4+IGNsYXNzIENvdW50ZXIoZGljdCk6XG4gICAgICAgICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgICAgICAgLi4uICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgID4+PiBjID0gQ291bnRlcigpXG4gICAgICAgICA+Pj4gY1tcJ3JlZFwnXVxuICAgICAgICAgMFxuICAgICAgICAgPj4+IGNbXCdyZWRcJ10gKz0gMVxuICAgICAgICAgPj4+IGNbXCdyZWRcJ11cbiAgICAgICAgIDFcblxuICAgICAgU2VlICJjb2xsZWN0aW9ucy5Db3VudGVyIiBmb3IgYSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvblxuICAgICAgaW5jbHVkaW5nIG90aGVyIG1ldGhvZHMgaGVscGZ1bCBmb3IgYWNjdW11bGF0aW5nIGFuZCBtYW5hZ2luZ1xuICAgICAgdGFsbGllcy5cblxuICAgZFtrZXldID0gdmFsdWVcblxuICAgICAgU2V0ICJkW2tleV0iIHRvICp2YWx1ZSouXG5cbiAgIGRlbCBkW2tleV1cblxuICAgICAgUmVtb3ZlICJkW2tleV0iIGZyb20gKmQqLiAgUmFpc2VzIGEgIktleUVycm9yIiBpZiAqa2V5KiBpcyBub3RcbiAgICAgIGluIHRoZSBtYXAuXG5cbiAgIGtleSBpbiBkXG5cbiAgICAgIFJldHVybiAiVHJ1ZSIgaWYgKmQqIGhhcyBhIGtleSAqa2V5KiwgZWxzZSAiRmFsc2UiLlxuXG4gICBrZXkgbm90IGluIGRcblxuICAgICAgRXF1aXZhbGVudCB0byAibm90IGtleSBpbiBkIi5cblxuICAgaXRlcihkKVxuXG4gICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cyBvZiB0aGUgZGljdGlvbmFyeS4gIFRoaXMgaXMgYVxuICAgICAgc2hvcnRjdXQgZm9yICJpdGVyKGQua2V5cygpKSIuXG5cbiAgIGNsZWFyKClcblxuICAgICAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBjb3B5KClcblxuICAgICAgUmV0dXJuIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBjbGFzc21ldGhvZCBmcm9ta2V5cyhzZXFbLCB2YWx1ZV0pXG5cbiAgICAgIENyZWF0ZSBhIG5ldyBkaWN0aW9uYXJ5IHdpdGgga2V5cyBmcm9tICpzZXEqIGFuZCB2YWx1ZXMgc2V0IHRvXG4gICAgICAqdmFsdWUqLlxuXG4gICAgICAiZnJvbWtleXMoKSIgaXMgYSBjbGFzcyBtZXRob2QgdGhhdCByZXR1cm5zIGEgbmV3IGRpY3Rpb25hcnkuXG4gICAgICAqdmFsdWUqIGRlZmF1bHRzIHRvICJOb25lIi5cblxuICAgZ2V0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBSZXR1cm4gdGhlIHZhbHVlIGZvciAqa2V5KiBpZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgZWxzZVxuICAgICAgKmRlZmF1bHQqLiBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byAiTm9uZSIsIHNvXG4gICAgICB0aGF0IHRoaXMgbWV0aG9kIG5ldmVyIHJhaXNlcyBhICJLZXlFcnJvciIuXG5cbiAgIGl0ZW1zKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgaXRlbXMgKCIoa2V5LCB2YWx1ZSkiXG4gICAgICBwYWlycykuIFNlZSB0aGUgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuICAga2V5cygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGtleXMuICBTZWUgdGhlXG4gICAgICAqZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMqLlxuXG4gICBwb3Aoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZW1vdmUgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUsXG4gICAgICBlbHNlIHJldHVybiAqZGVmYXVsdCouICBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuIGFuZCAqa2V5KiBpc1xuICAgICAgbm90IGluIHRoZSBkaWN0aW9uYXJ5LCBhICJLZXlFcnJvciIgaXMgcmFpc2VkLlxuXG4gICBwb3BpdGVtKClcblxuICAgICAgUmVtb3ZlIGFuZCByZXR1cm4gYW4gYXJiaXRyYXJ5ICIoa2V5LCB2YWx1ZSkiIHBhaXIgZnJvbSB0aGVcbiAgICAgIGRpY3Rpb25hcnkuXG5cbiAgICAgICJwb3BpdGVtKCkiIGlzIHVzZWZ1bCB0byBkZXN0cnVjdGl2ZWx5IGl0ZXJhdGUgb3ZlciBhXG4gICAgICBkaWN0aW9uYXJ5LCBhcyBvZnRlbiB1c2VkIGluIHNldCBhbGdvcml0aG1zLiAgSWYgdGhlIGRpY3Rpb25hcnlcbiAgICAgIGlzIGVtcHR5LCBjYWxsaW5nICJwb3BpdGVtKCkiIHJhaXNlcyBhICJLZXlFcnJvciIuXG5cbiAgIHNldGRlZmF1bHQoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZXR1cm4gaXRzIHZhbHVlLiAgSWYgbm90LCBpbnNlcnRcbiAgICAgICprZXkqIHdpdGggYSB2YWx1ZSBvZiAqZGVmYXVsdCogYW5kIHJldHVybiAqZGVmYXVsdCouICAqZGVmYXVsdCpcbiAgICAgIGRlZmF1bHRzIHRvICJOb25lIi5cblxuICAgdXBkYXRlKFtvdGhlcl0pXG5cbiAgICAgIFVwZGF0ZSB0aGUgZGljdGlvbmFyeSB3aXRoIHRoZSBrZXkvdmFsdWUgcGFpcnMgZnJvbSAqb3RoZXIqLFxuICAgICAgb3ZlcndyaXRpbmcgZXhpc3Rpbmcga2V5cy4gIFJldHVybiAiTm9uZSIuXG5cbiAgICAgICJ1cGRhdGUoKSIgYWNjZXB0cyBlaXRoZXIgYW5vdGhlciBkaWN0aW9uYXJ5IG9iamVjdCBvciBhblxuICAgICAgaXRlcmFibGUgb2Yga2V5L3ZhbHVlIHBhaXJzIChhcyB0dXBsZXMgb3Igb3RoZXIgaXRlcmFibGVzIG9mXG4gICAgICBsZW5ndGggdHdvKS4gIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQsIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyB0aGVuIHVwZGF0ZWQgd2l0aCB0aG9zZSBrZXkvdmFsdWUgcGFpcnM6ICJkLnVwZGF0ZShyZWQ9MSxcbiAgICAgIGJsdWU9MikiLlxuXG4gICB2YWx1ZXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyB2YWx1ZXMuICBTZWUgdGhlXG4gICAgICAqZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMqLlxuXG5TZWUgYWxzbzogInR5cGVzLk1hcHBpbmdQcm94eVR5cGUiIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHJlYWQtb25seVxuICB2aWV3IG9mIGEgImRpY3QiLlxuXG5cbkRpY3Rpb25hcnkgdmlldyBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb2JqZWN0cyByZXR1cm5lZCBieSAiZGljdC5rZXlzKCkiLCAiZGljdC52YWx1ZXMoKSIgYW5kXG4iZGljdC5pdGVtcygpIiBhcmUgKnZpZXcgb2JqZWN0cyouICBUaGV5IHByb3ZpZGUgYSBkeW5hbWljIHZpZXcgb24gdGhlXG5kaWN0aW9uYXJ5XCdzIGVudHJpZXMsIHdoaWNoIG1lYW5zIHRoYXQgd2hlbiB0aGUgZGljdGlvbmFyeSBjaGFuZ2VzLFxudGhlIHZpZXcgcmVmbGVjdHMgdGhlc2UgY2hhbmdlcy5cblxuRGljdGlvbmFyeSB2aWV3cyBjYW4gYmUgaXRlcmF0ZWQgb3ZlciB0byB5aWVsZCB0aGVpciByZXNwZWN0aXZlIGRhdGEsXG5hbmQgc3VwcG9ydCBtZW1iZXJzaGlwIHRlc3RzOlxuXG5sZW4oZGljdHZpZXcpXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRpY3Rpb25hcnkuXG5cbml0ZXIoZGljdHZpZXcpXG5cbiAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBrZXlzLCB2YWx1ZXMgb3IgaXRlbXMgKHJlcHJlc2VudGVkIGFzXG4gICB0dXBsZXMgb2YgIihrZXksIHZhbHVlKSIpIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBLZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyIHdoaWNoIGlzXG4gICBub24tcmFuZG9tLCB2YXJpZXMgYWNyb3NzIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMsIGFuZCBkZXBlbmRzIG9uXG4gICB0aGUgZGljdGlvbmFyeVwncyBoaXN0b3J5IG9mIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gSWYga2V5cyxcbiAgIHZhbHVlcyBhbmQgaXRlbXMgdmlld3MgYXJlIGl0ZXJhdGVkIG92ZXIgd2l0aCBubyBpbnRlcnZlbmluZ1xuICAgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGljdGlvbmFyeSwgdGhlIG9yZGVyIG9mIGl0ZW1zIHdpbGwgZGlyZWN0bHlcbiAgIGNvcnJlc3BvbmQuICBUaGlzIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgIih2YWx1ZSwga2V5KSIgcGFpcnMgdXNpbmdcbiAgICJ6aXAoKSI6ICJwYWlycyA9IHppcChkLnZhbHVlcygpLCBkLmtleXMoKSkiLiAgQW5vdGhlciB3YXkgdG9cbiAgIGNyZWF0ZSB0aGUgc2FtZSBsaXN0IGlzICJwYWlycyA9IFsodiwgaykgZm9yIChrLCB2KSBpbiBkLml0ZW1zKCldIi5cblxuICAgSXRlcmF0aW5nIHZpZXdzIHdoaWxlIGFkZGluZyBvciBkZWxldGluZyBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5XG4gICBtYXkgcmFpc2UgYSAiUnVudGltZUVycm9yIiBvciBmYWlsIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcy5cblxueCBpbiBkaWN0dmlld1xuXG4gICBSZXR1cm4gIlRydWUiIGlmICp4KiBpcyBpbiB0aGUgdW5kZXJseWluZyBkaWN0aW9uYXJ5XCdzIGtleXMsIHZhbHVlc1xuICAgb3IgaXRlbXMgKGluIHRoZSBsYXR0ZXIgY2FzZSwgKngqIHNob3VsZCBiZSBhICIoa2V5LCB2YWx1ZSkiXG4gICB0dXBsZSkuXG5cbktleXMgdmlld3MgYXJlIHNldC1saWtlIHNpbmNlIHRoZWlyIGVudHJpZXMgYXJlIHVuaXF1ZSBhbmQgaGFzaGFibGUuXG5JZiBhbGwgdmFsdWVzIGFyZSBoYXNoYWJsZSwgc28gdGhhdCAiKGtleSwgdmFsdWUpIiBwYWlycyBhcmUgdW5pcXVlXG5hbmQgaGFzaGFibGUsIHRoZW4gdGhlIGl0ZW1zIHZpZXcgaXMgYWxzbyBzZXQtbGlrZS4gIChWYWx1ZXMgdmlld3MgYXJlXG5ub3QgdHJlYXRlZCBhcyBzZXQtbGlrZSBzaW5jZSB0aGUgZW50cmllcyBhcmUgZ2VuZXJhbGx5IG5vdCB1bmlxdWUuKVxuRm9yIHNldC1saWtlIHZpZXdzLCBhbGwgb2YgdGhlIG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgdGhlIGFic3RyYWN0XG5iYXNlIGNsYXNzICJjb2xsZWN0aW9ucy5hYmMuU2V0IiBhcmUgYXZhaWxhYmxlIChmb3IgZXhhbXBsZSwgIj09IixcbiI8Iiwgb3IgIl4iKS5cblxuQW4gZXhhbXBsZSBvZiBkaWN0aW9uYXJ5IHZpZXcgdXNhZ2U6XG5cbiAgID4+PiBkaXNoZXMgPSB7XCdlZ2dzXCc6IDIsIFwnc2F1c2FnZVwnOiAxLCBcJ2JhY29uXCc6IDEsIFwnc3BhbVwnOiA1MDB9XG4gICA+Pj4ga2V5cyA9IGRpc2hlcy5rZXlzKClcbiAgID4+PiB2YWx1ZXMgPSBkaXNoZXMudmFsdWVzKClcblxuICAgPj4+ICMgaXRlcmF0aW9uXG4gICA+Pj4gbiA9IDBcbiAgID4+PiBmb3IgdmFsIGluIHZhbHVlczpcbiAgIC4uLiAgICAgbiArPSB2YWxcbiAgID4+PiBwcmludChuKVxuICAgNTA0XG5cbiAgID4+PiAjIGtleXMgYW5kIHZhbHVlcyBhcmUgaXRlcmF0ZWQgb3ZlciBpbiB0aGUgc2FtZSBvcmRlclxuICAgPj4+IGxpc3Qoa2V5cylcbiAgIFtcJ2VnZ3NcJywgXCdiYWNvblwnLCBcJ3NhdXNhZ2VcJywgXCdzcGFtXCddXG4gICA+Pj4gbGlzdCh2YWx1ZXMpXG4gICBbMiwgMSwgMSwgNTAwXVxuXG4gICA+Pj4gIyB2aWV3IG9iamVjdHMgYXJlIGR5bmFtaWMgYW5kIHJlZmxlY3QgZGljdCBjaGFuZ2VzXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ2VnZ3NcJ11cbiAgID4+PiBkZWwgZGlzaGVzW1wnc2F1c2FnZVwnXVxuICAgPj4+IGxpc3Qoa2V5cylcbiAgIFtcJ3NwYW1cJywgXCdiYWNvblwnXVxuXG4gICA+Pj4gIyBzZXQgb3BlcmF0aW9uc1xuICAgPj4+IGtleXMgJiB7XCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYWxhZFwnfVxuICAge1wnYmFjb25cJ31cbiAgID4+PiBrZXlzIF4ge1wnc2F1c2FnZVwnLCBcJ2p1aWNlXCd9XG4gICB7XCdqdWljZVwnLCBcJ3NhdXNhZ2VcJywgXCdiYWNvblwnLCBcJ3NwYW1cJ31cbicsCiAgJ3R5cGVzbWV0aG9kcyc6ICdcbk1ldGhvZHNcbioqKioqKipcblxuTWV0aG9kcyBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCB1c2luZyB0aGUgYXR0cmlidXRlIG5vdGF0aW9uLlxuVGhlcmUgYXJlIHR3byBmbGF2b3JzOiBidWlsdC1pbiBtZXRob2RzIChzdWNoIGFzICJhcHBlbmQoKSIgb24gbGlzdHMpXG5hbmQgY2xhc3MgaW5zdGFuY2UgbWV0aG9kcy4gIEJ1aWx0LWluIG1ldGhvZHMgYXJlIGRlc2NyaWJlZCB3aXRoIHRoZVxudHlwZXMgdGhhdCBzdXBwb3J0IHRoZW0uXG5cbklmIHlvdSBhY2Nlc3MgYSBtZXRob2QgKGEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhIGNsYXNzIG5hbWVzcGFjZSlcbnRocm91Z2ggYW4gaW5zdGFuY2UsIHlvdSBnZXQgYSBzcGVjaWFsIG9iamVjdDogYSAqYm91bmQgbWV0aG9kKiAoYWxzb1xuY2FsbGVkICppbnN0YW5jZSBtZXRob2QqKSBvYmplY3QuIFdoZW4gY2FsbGVkLCBpdCB3aWxsIGFkZCB0aGUgInNlbGYiXG5hcmd1bWVudCB0byB0aGUgYXJndW1lbnQgbGlzdC4gIEJvdW5kIG1ldGhvZHMgaGF2ZSB0d28gc3BlY2lhbCByZWFkLVxub25seSBhdHRyaWJ1dGVzOiAibS5fX3NlbGZfXyIgaXMgdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kXG5vcGVyYXRlcywgYW5kICJtLl9fZnVuY19fIiBpcyB0aGUgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBtZXRob2QuXG5DYWxsaW5nICJtKGFyZy0xLCBhcmctMiwgLi4uLCBhcmctbikiIGlzIGNvbXBsZXRlbHkgZXF1aXZhbGVudCB0b1xuY2FsbGluZyAibS5fX2Z1bmNfXyhtLl9fc2VsZl9fLCBhcmctMSwgYXJnLTIsIC4uLiwgYXJnLW4pIi5cblxuTGlrZSBmdW5jdGlvbiBvYmplY3RzLCBib3VuZCBtZXRob2Qgb2JqZWN0cyBzdXBwb3J0IGdldHRpbmcgYXJiaXRyYXJ5XG5hdHRyaWJ1dGVzLiAgSG93ZXZlciwgc2luY2UgbWV0aG9kIGF0dHJpYnV0ZXMgYXJlIGFjdHVhbGx5IHN0b3JlZCBvblxudGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0ICgibWV0aC5fX2Z1bmNfXyIpLCBzZXR0aW5nIG1ldGhvZFxuYXR0cmlidXRlcyBvbiBib3VuZCBtZXRob2RzIGlzIGRpc2FsbG93ZWQuICBBdHRlbXB0aW5nIHRvIHNldCBhblxuYXR0cmlidXRlIG9uIGEgbWV0aG9kIHJlc3VsdHMgaW4gYW4gIkF0dHJpYnV0ZUVycm9yIiBiZWluZyByYWlzZWQuICBJblxub3JkZXIgdG8gc2V0IGEgbWV0aG9kIGF0dHJpYnV0ZSwgeW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgaXQgb24gdGhlXG51bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdDpcblxuICAgPj4+IGNsYXNzIEM6XG4gICAuLi4gICAgIGRlZiBtZXRob2Qoc2VsZik6XG4gICAuLi4gICAgICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5tZXRob2Qud2hvYW1pID0gXCdteSBuYW1lIGlzIG1ldGhvZFwnICAjIGNhblwndCBzZXQgb24gdGhlIG1ldGhvZFxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgQXR0cmlidXRlRXJyb3I6IFwnbWV0aG9kXCcgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgXCd3aG9hbWlcJ1xuICAgPj4+IGMubWV0aG9kLl9fZnVuY19fLndob2FtaSA9IFwnbXkgbmFtZSBpcyBtZXRob2RcJ1xuICAgPj4+IGMubWV0aG9kLndob2FtaVxuICAgXCdteSBuYW1lIGlzIG1ldGhvZFwnXG5cblNlZSAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicsCkBAIC03Niw0ICs3Niw0IEBACiAgJ3VuYXJ5JzogJ1xuVW5hcnkgYXJpdGhtZXRpYyBhbmQgYml0d2lzZSBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQWxsIHVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5OlxuXG4gICB1X2V4cHIgOjo9IHBvd2VyIHwgIi0iIHVfZXhwciB8ICIrIiB1X2V4cHIgfCAifiIgdV9leHByXG5cblRoZSB1bmFyeSAiLSIgKG1pbnVzKSBvcGVyYXRvciB5aWVsZHMgdGhlIG5lZ2F0aW9uIG9mIGl0cyBudW1lcmljXG5hcmd1bWVudC5cblxuVGhlIHVuYXJ5ICIrIiAocGx1cykgb3BlcmF0b3IgeWllbGRzIGl0cyBudW1lcmljIGFyZ3VtZW50IHVuY2hhbmdlZC5cblxuVGhlIHVuYXJ5ICJ+IiAoaW52ZXJ0KSBvcGVyYXRvciB5aWVsZHMgdGhlIGJpdHdpc2UgaW52ZXJzaW9uIG9mIGl0c1xuaW50ZWdlciBhcmd1bWVudC4gIFRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiAieCIgaXMgZGVmaW5lZCBhc1xuIi0oeCsxKSIuICBJdCBvbmx5IGFwcGxpZXMgdG8gaW50ZWdyYWwgbnVtYmVycy5cblxuSW4gYWxsIHRocmVlIGNhc2VzLCBpZiB0aGUgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVyIHR5cGUsIGFcbiJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4nLAogICd3aGlsZSc6ICdcblRoZSAid2hpbGUiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSAid2hpbGUiIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSAiYnJlYWsiIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlICJlbHNlIiBjbGF1c2VcJ3Mgc3VpdGUuICBBICJjb250aW51ZSIgc3RhdGVtZW50XG5leGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBnb2VzIGJhY2tcbnRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG4nLAogICd3aXRoJzogJ1xuVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSAid2l0aCIgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uICJ0cnkiLi4uImV4Y2VwdCIuLi4iZmluYWxseSJcbnVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZCBmb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSAid2l0aCIgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlICJ3aXRoX2l0ZW0iKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZW50ZXJfXygpIiBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSAid2l0aCIgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tICJfX2VudGVyX18oKSIgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSAid2l0aCIgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgIl9fZW50ZXJfXygpIlxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuICJfX2V4aXRfXygpIiB3aWxsIGFsd2F5cyBiZVxuICAgICBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvICJfX2V4aXRfXygpIi4gT3RoZXJ3aXNlLCB0aHJlZVxuICAgIk5vbmUiIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSAiX19leGl0X18oKSIgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyByZXJhaXNlZC5cbiAgIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgYW5kXG4gICBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlICJ3aXRoIlxuICAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSAiX19leGl0X18oKSIgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlICJ3aXRoIiBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuJywKLSAneWllbGQnOiAnXG5UaGUgInlpZWxkIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG4gICB5aWVsZF9zdG10IDo6PSB5aWVsZF9leHByZXNzaW9uXG5cblRoZSAieWllbGQiIHN0YXRlbWVudCBpcyBvbmx5IHVzZWQgd2hlbiBkZWZpbmluZyBhIGdlbmVyYXRvciBmdW5jdGlvbixcbmFuZCBpcyBvbmx5IHVzZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGdlbmVyYXRvciBmdW5jdGlvbi4gVXNpbmcgYVxuInlpZWxkIiBzdGF0ZW1lbnQgaW4gYSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIHN1ZmZpY2llbnQgdG8gY2F1c2UgdGhhdFxuZGVmaW5pdGlvbiB0byBjcmVhdGUgYSBnZW5lcmF0b3IgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIG5vcm1hbFxuZnVuY3Rpb24uXG5cbldoZW4gYSBnZW5lcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkLCBpdCByZXR1cm5zIGFuIGl0ZXJhdG9yIGtub3duIGFzIGFcbmdlbmVyYXRvciBpdGVyYXRvciwgb3IgbW9yZSBjb21tb25seSwgYSBnZW5lcmF0b3IuICBUaGUgYm9keSBvZiB0aGVcbmdlbmVyYXRvciBmdW5jdGlvbiBpcyBleGVjdXRlZCBieSBjYWxsaW5nIHRoZSAibmV4dCgpIiBmdW5jdGlvbiBvbiB0aGVcbmdlbmVyYXRvciByZXBlYXRlZGx5IHVudGlsIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uXG5cbldoZW4gYSAieWllbGQiIHN0YXRlbWVudCBpcyBleGVjdXRlZCwgdGhlIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IgaXNcbmZyb3plbiBhbmQgdGhlIHZhbHVlIG9mICJleHByZXNzaW9uX2xpc3QiIGlzIHJldHVybmVkIHRvICJuZXh0KCkiXCdzXG5jYWxsZXIuICBCeSAiZnJvemVuIiB3ZSBtZWFuIHRoYXQgYWxsIGxvY2FsIHN0YXRlIGlzIHJldGFpbmVkLFxuaW5jbHVkaW5nIHRoZSBjdXJyZW50IGJpbmRpbmdzIG9mIGxvY2FsIHZhcmlhYmxlcywgdGhlIGluc3RydWN0aW9uXG5wb2ludGVyLCBhbmQgdGhlIGludGVybmFsIGV2YWx1YXRpb24gc3RhY2s6IGVub3VnaCBpbmZvcm1hdGlvbiBpc1xuc2F2ZWQgc28gdGhhdCB0aGUgbmV4dCB0aW1lICJuZXh0KCkiIGlzIGludm9rZWQsIHRoZSBmdW5jdGlvbiBjYW5cbnByb2NlZWQgZXhhY3RseSBhcyBpZiB0aGUgInlpZWxkIiBzdGF0ZW1lbnQgd2VyZSBqdXN0IGFub3RoZXIgZXh0ZXJuYWxcbmNhbGwuXG5cblRoZSAieWllbGQiIHN0YXRlbWVudCBpcyBhbGxvd2VkIGluIHRoZSAidHJ5IiBjbGF1c2Ugb2YgYSAidHJ5IiAuLi5cbiJmaW5hbGx5IiBjb25zdHJ1Y3QuICBJZiB0aGUgZ2VuZXJhdG9yIGlzIG5vdCByZXN1bWVkIGJlZm9yZSBpdCBpc1xuZmluYWxpemVkIChieSByZWFjaGluZyBhIHplcm8gcmVmZXJlbmNlIGNvdW50IG9yIGJ5IGJlaW5nIGdhcmJhZ2VcbmNvbGxlY3RlZCksIHRoZSBnZW5lcmF0b3ItaXRlcmF0b3JcJ3MgImNsb3NlKCkiIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCxcbmFsbG93aW5nIGFueSBwZW5kaW5nICJmaW5hbGx5IiBjbGF1c2VzIHRvIGV4ZWN1dGUuXG5cbldoZW4gInlpZWxkIGZyb20gPGV4cHI+IiBpcyB1c2VkLCBpdCB0cmVhdHMgdGhlIHN1cHBsaWVkIGV4cHJlc3Npb24gYXNcbmEgc3ViaXRlcmF0b3IsIHByb2R1Y2luZyB2YWx1ZXMgZnJvbSBpdCB1bnRpbCB0aGUgdW5kZXJseWluZyBpdGVyYXRvclxuaXMgZXhoYXVzdGVkLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBBZGRlZCAieWllbGQgZnJvbSA8ZXhwcj4iIHRvIGRlbGVnYXRlXG4gICBjb250cm9sIGZsb3cgdG8gYSBzdWJpdGVyYXRvclxuXG5Gb3IgZnVsbCBkZXRhaWxzIG9mICJ5aWVsZCIgc2VtYW50aWNzLCByZWZlciB0byB0aGUgKllpZWxkXG5leHByZXNzaW9ucyogc2VjdGlvbi5cblxuU2VlIGFsc286ICoqUEVQIDAyNTUqKiAtIFNpbXBsZSBHZW5lcmF0b3JzXG5cbiAgICAgVGhlIHByb3Bvc2FsIGZvciBhZGRpbmcgZ2VuZXJhdG9ycyBhbmQgdGhlICJ5aWVsZCIgc3RhdGVtZW50IHRvXG4gICAgIFB5dGhvbi5cblxuICAqKlBFUCAwMzQyKiogLSBDb3JvdXRpbmVzIHZpYSBFbmhhbmNlZCBHZW5lcmF0b3JzXG4gICAgIFRoZSBwcm9wb3NhbCB0byBlbmhhbmNlIHRoZSBBUEkgYW5kIHN5bnRheCBvZiBnZW5lcmF0b3JzLCBtYWtpbmdcbiAgICAgdGhlbSB1c2FibGUgYXMgc2ltcGxlIGNvcm91dGluZXMuXG5cbiAgKipQRVAgMDM4MCoqIC0gU3ludGF4IGZvciBEZWxlZ2F0aW5nIHRvIGEgU3ViZ2VuZXJhdG9yXG4gICAgIFRoZSBwcm9wb3NhbCB0byBpbnRyb2R1Y2UgdGhlICJ5aWVsZF9mcm9tIiBzeW50YXgsIG1ha2luZ1xuICAgICBkZWxlZ2F0aW9uIHRvIHN1Yi1nZW5lcmF0b3JzIGVhc3kuXG4nfQorICd5aWVsZCc6ICdcblRoZSAieWllbGQiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHlpZWxkX3N0bXQgOjo9IHlpZWxkX2V4cHJlc3Npb25cblxuQSAieWllbGQiIHN0YXRlbWVudCBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byBhICp5aWVsZFxuZXhwcmVzc2lvbiouIFRoZSB5aWVsZCBzdGF0ZW1lbnQgY2FuIGJlIHVzZWQgdG8gb21pdCB0aGUgcGFyZW50aGVzZXNcbnRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIHJlcXVpcmVkIGluIHRoZSBlcXVpdmFsZW50IHlpZWxkIGV4cHJlc3Npb25cbnN0YXRlbWVudC4gRm9yIGV4YW1wbGUsIHRoZSB5aWVsZCBzdGF0ZW1lbnRzXG5cbiAgIHlpZWxkIDxleHByPlxuICAgeWllbGQgZnJvbSA8ZXhwcj5cblxuYXJlIGVxdWl2YWxlbnQgdG8gdGhlIHlpZWxkIGV4cHJlc3Npb24gc3RhdGVtZW50c1xuXG4gICAoeWllbGQgPGV4cHI+KVxuICAgKHlpZWxkIGZyb20gPGV4cHI+KVxuXG5ZaWVsZCBleHByZXNzaW9ucyBhbmQgc3RhdGVtZW50cyBhcmUgb25seSB1c2VkIHdoZW4gZGVmaW5pbmcgYVxuKmdlbmVyYXRvciogZnVuY3Rpb24sIGFuZCBhcmUgb25seSB1c2VkIGluIHRoZSBib2R5IG9mIHRoZSBnZW5lcmF0b3JcbmZ1bmN0aW9uLiAgVXNpbmcgeWllbGQgaW4gYSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIHN1ZmZpY2llbnQgdG8gY2F1c2VcbnRoYXQgZGVmaW5pdGlvbiB0byBjcmVhdGUgYSBnZW5lcmF0b3IgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIG5vcm1hbFxuZnVuY3Rpb24uXG5cbkZvciBmdWxsIGRldGFpbHMgb2YgInlpZWxkIiBzZW1hbnRpY3MsIHJlZmVyIHRvIHRoZSAqWWllbGRcbmV4cHJlc3Npb25zKiBzZWN0aW9uLlxuJ30KZGlmZiAtLWdpdCBhL0xpYi9xdW9wcmkucHkgYi9MaWIvcXVvcHJpLnB5CmluZGV4IDNkMGYwYWMuLmU1YmQwMTAgMTAwNzU1Ci0tLSBhL0xpYi9xdW9wcmkucHkKKysrIGIvTGliL3F1b3ByaS5weQpAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGUsICJyYiIpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXM6IGNhbid0IG9wZW4gKCVzKVxuIiAlIChmaWxlLCBtc2cpKQogICAgICAgICAgICAgICAgIHN0cyA9IDEKICAgICAgICAgICAgICAgICBjb250aW51ZQpkaWZmIC0tZ2l0IGEvTGliL3JhbmRvbS5weSBiL0xpYi9yYW5kb20ucHkKaW5kZXggMTRhYzVlNS4uODA4MTc1YSAxMDA2NDQKLS0tIGEvTGliL3JhbmRvbS5weQorKysgYi9MaWIvcmFuZG9tLnB5CkBAIC00MSw3ICs0MSw3IEBACiBmcm9tIG1hdGggaW1wb3J0IGxvZyBhcyBfbG9nLCBleHAgYXMgX2V4cCwgcGkgYXMgX3BpLCBlIGFzIF9lLCBjZWlsIGFzIF9jZWlsCiBmcm9tIG1hdGggaW1wb3J0IHNxcnQgYXMgX3NxcnQsIGFjb3MgYXMgX2Fjb3MsIGNvcyBhcyBfY29zLCBzaW4gYXMgX3NpbgogZnJvbSBvcyBpbXBvcnQgdXJhbmRvbSBhcyBfdXJhbmRvbQotZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0IFNldCBhcyBfU2V0LCBTZXF1ZW5jZSBhcyBfU2VxdWVuY2UKK2Zyb20gX2NvbGxlY3Rpb25zX2FiYyBpbXBvcnQgU2V0IGFzIF9TZXQsIFNlcXVlbmNlIGFzIF9TZXF1ZW5jZQogZnJvbSBoYXNobGliIGltcG9ydCBzaGE1MTIgYXMgX3NoYTUxMgogCiBfX2FsbF9fID0gWyJSYW5kb20iLCJzZWVkIiwicmFuZG9tIiwidW5pZm9ybSIsInJhbmRpbnQiLCJjaG9pY2UiLCJzYW1wbGUiLApAQCAtMTUxLDYgKzE1MSw5IEBACiAKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tIHBpY2tsZSBzdXBwb3J0ICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAjIElzc3VlIDE3NDg5OiBTaW5jZSBfX3JlZHVjZV9fIHdhcyBkZWZpbmVkIHRvIGZpeCAjNzU5ODg5IHRoaXMgaXMgbm8KKyAgICAjIGxvbmdlciBjYWxsZWQ7IHdlIGxlYXZlIGl0IGhlcmUgYmVjYXVzZSBpdCBoYXMgYmVlbiBoZXJlIHNpbmNlIHJhbmRvbSB3YXMKKyAgICAjIHJld3JpdHRlbiBiYWNrIGluIDIwMDEgYW5kIHdoeSByaXNrIGJyZWFraW5nIHNvbWV0aGluZy4KICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOiAjIGZvciBwaWNrbGUKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0c3RhdGUoKQogCkBAIC0yMTYsMTAgKzIxOSwxMSBAQAogICAgICAgICAgICAgICAgICAgIE1ldGhvZD1fTWV0aG9kVHlwZSwgQnVpbHRpbk1ldGhvZD1fQnVpbHRpbk1ldGhvZFR5cGUpOgogICAgICAgICAiUmV0dXJuIGEgcmFuZG9tIGludCBpbiB0aGUgcmFuZ2UgWzAsbikuICBSYWlzZXMgVmFsdWVFcnJvciBpZiBuPT0wLiIKIAorICAgICAgICByYW5kb20gPSBzZWxmLnJhbmRvbQogICAgICAgICBnZXRyYW5kYml0cyA9IHNlbGYuZ2V0cmFuZGJpdHMKICAgICAgICAgIyBPbmx5IGNhbGwgc2VsZi5nZXRyYW5kYml0cyBpZiB0aGUgb3JpZ2luYWwgcmFuZG9tKCkgYnVpbHRpbiBtZXRob2QKICAgICAgICAgIyBoYXMgbm90IGJlZW4gb3ZlcnJpZGRlbiBvciBpZiBhIG5ldyBnZXRyYW5kYml0cygpIHdhcyBzdXBwbGllZC4KLSAgICAgICAgaWYgdHlwZShzZWxmLnJhbmRvbSkgaXMgQnVpbHRpbk1ldGhvZCBvciB0eXBlKGdldHJhbmRiaXRzKSBpcyBNZXRob2Q6CisgICAgICAgIGlmIHR5cGUocmFuZG9tKSBpcyBCdWlsdGluTWV0aG9kIG9yIHR5cGUoZ2V0cmFuZGJpdHMpIGlzIE1ldGhvZDoKICAgICAgICAgICAgIGsgPSBuLmJpdF9sZW5ndGgoKSAgIyBkb24ndCB1c2UgKG4tMSkgaGVyZSBiZWNhdXNlIG4gY2FuIGJlIDEKICAgICAgICAgICAgIHIgPSBnZXRyYW5kYml0cyhrKSAgICAgICAgICAjIDAgPD0gciA8IDIqKmsKICAgICAgICAgICAgIHdoaWxlIHIgPj0gbjoKQEAgLTIyNyw3ICsyMzEsNiBAQAogICAgICAgICAgICAgcmV0dXJuIHIKICAgICAgICAgIyBUaGVyZSdzIGFuIG92ZXJyaWRlbiByYW5kb20oKSBtZXRob2QgYnV0IG5vIG5ldyBnZXRyYW5kYml0cygpIG1ldGhvZCwKICAgICAgICAgIyBzbyB3ZSBjYW4gb25seSB1c2UgcmFuZG9tKCkgZnJvbSBoZXJlLgotICAgICAgICByYW5kb20gPSBzZWxmLnJhbmRvbQogICAgICAgICBpZiBuID49IG1heHNpemU6CiAgICAgICAgICAgICBfd2FybigiVW5kZXJseWluZyByYW5kb20oKSBnZW5lcmF0b3IgZG9lcyBub3Qgc3VwcGx5IFxuIgogICAgICAgICAgICAgICAgICJlbm91Z2ggYml0cyB0byBjaG9vc2UgZnJvbSBhIHBvcHVsYXRpb24gcmFuZ2UgdGhpcyBsYXJnZS5cbiIKQEAgLTI1MSwxMCArMjU0LDExIEBACiAgICAgICAgIHJldHVybiBzZXFbaV0KIAogICAgIGRlZiBzaHVmZmxlKHNlbGYsIHgsIHJhbmRvbT1Ob25lKToKLSAgICAgICAgIiIieCwgcmFuZG9tPXJhbmRvbS5yYW5kb20gLT4gc2h1ZmZsZSBsaXN0IHggaW4gcGxhY2U7IHJldHVybiBOb25lLgorICAgICAgICAiIiJTaHVmZmxlIGxpc3QgeCBpbiBwbGFjZSwgYW5kIHJldHVybiBOb25lLgogCi0gICAgICAgIE9wdGlvbmFsIGFyZyByYW5kb20gaXMgYSAwLWFyZ3VtZW50IGZ1bmN0aW9uIHJldHVybmluZyBhIHJhbmRvbQotICAgICAgICBmbG9hdCBpbiBbMC4wLCAxLjApOyBieSBkZWZhdWx0LCB0aGUgc3RhbmRhcmQgcmFuZG9tLnJhbmRvbS4KKyAgICAgICAgT3B0aW9uYWwgYXJndW1lbnQgcmFuZG9tIGlzIGEgMC1hcmd1bWVudCBmdW5jdGlvbiByZXR1cm5pbmcgYQorICAgICAgICByYW5kb20gZmxvYXQgaW4gWzAuMCwgMS4wKTsgaWYgaXQgaXMgdGhlIGRlZmF1bHQgTm9uZSwgdGhlCisgICAgICAgIHN0YW5kYXJkIHJhbmRvbS5yYW5kb20gd2lsbCBiZSB1c2VkLgogCiAgICAgICAgICIiIgogCmRpZmYgLS1naXQgYS9MaWIvcmUucHkgYi9MaWIvcmUucHkKaW5kZXggYTQ2ZWNjOC4uMmU0ZDg3YyAxMDA2NDQKLS0tIGEvTGliL3JlLnB5CisrKyBiL0xpYi9yZS5weQpAQCAtODUsMTYgKzg1LDE3IEBACiAgICAgXFwgICAgICAgTWF0Y2hlcyBhIGxpdGVyYWwgYmFja3NsYXNoLgogCiBUaGlzIG1vZHVsZSBleHBvcnRzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgotICAgIG1hdGNoICAgIE1hdGNoIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZy4KLSAgICBzZWFyY2ggICBTZWFyY2ggYSBzdHJpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIHBhdHRlcm4uCi0gICAgc3ViICAgICAgU3Vic3RpdHV0ZSBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4gZm91bmQgaW4gYSBzdHJpbmcuCi0gICAgc3VibiAgICAgU2FtZSBhcyBzdWIsIGJ1dCBhbHNvIHJldHVybiB0aGUgbnVtYmVyIG9mIHN1YnN0aXR1dGlvbnMgbWFkZS4KLSAgICBzcGxpdCAgICBTcGxpdCBhIHN0cmluZyBieSB0aGUgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuLgotICAgIGZpbmRhbGwgIEZpbmQgYWxsIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybiBpbiBhIHN0cmluZy4KLSAgICBmaW5kaXRlciBSZXR1cm4gYW4gaXRlcmF0b3IgeWllbGRpbmcgYSBtYXRjaCBvYmplY3QgZm9yIGVhY2ggbWF0Y2guCi0gICAgY29tcGlsZSAgQ29tcGlsZSBhIHBhdHRlcm4gaW50byBhIFJlZ2V4T2JqZWN0LgotICAgIHB1cmdlICAgIENsZWFyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY2FjaGUuCi0gICAgZXNjYXBlICAgQmFja3NsYXNoIGFsbCBub24tYWxwaGFudW1lcmljcyBpbiBhIHN0cmluZy4KKyAgICBtYXRjaCAgICAgTWF0Y2ggYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0byB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nLgorICAgIGZ1bGxtYXRjaCBNYXRjaCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIGFsbCBvZiBhIHN0cmluZy4KKyAgICBzZWFyY2ggICAgU2VhcmNoIGEgc3RyaW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSBwYXR0ZXJuLgorICAgIHN1YiAgICAgICBTdWJzdGl0dXRlIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybiBmb3VuZCBpbiBhIHN0cmluZy4KKyAgICBzdWJuICAgICAgU2FtZSBhcyBzdWIsIGJ1dCBhbHNvIHJldHVybiB0aGUgbnVtYmVyIG9mIHN1YnN0aXR1dGlvbnMgbWFkZS4KKyAgICBzcGxpdCAgICAgU3BsaXQgYSBzdHJpbmcgYnkgdGhlIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybi4KKyAgICBmaW5kYWxsICAgRmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuIGluIGEgc3RyaW5nLgorICAgIGZpbmRpdGVyICBSZXR1cm4gYW4gaXRlcmF0b3IgeWllbGRpbmcgYSBtYXRjaCBvYmplY3QgZm9yIGVhY2ggbWF0Y2guCisgICAgY29tcGlsZSAgIENvbXBpbGUgYSBwYXR0ZXJuIGludG8gYSBSZWdleE9iamVjdC4KKyAgICBwdXJnZSAgICAgQ2xlYXIgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYWNoZS4KKyAgICBlc2NhcGUgICAgQmFja3NsYXNoIGFsbCBub24tYWxwaGFudW1lcmljcyBpbiBhIHN0cmluZy4KIAogU29tZSBvZiB0aGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHRha2VzIGZsYWdzIGFzIG9wdGlvbmFsIHBhcmFtZXRlcnM6CiAgICAgQSAgQVNDSUkgICAgICAgRm9yIHN0cmluZyBwYXR0ZXJucywgbWFrZSBcdywgXFcsIFxiLCBcQiwgXGQsIFxECkBAIC0xMjEsMTAgKzEyMiw5IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgc3JlX2NvbXBpbGUKIGltcG9ydCBzcmVfcGFyc2UKLWltcG9ydCBmdW5jdG9vbHMKIAogIyBwdWJsaWMgc3ltYm9scwotX19hbGxfXyA9IFsgIm1hdGNoIiwgInNlYXJjaCIsICJzdWIiLCAic3VibiIsICJzcGxpdCIsICJmaW5kYWxsIiwKK19fYWxsX18gPSBbICJtYXRjaCIsICJmdWxsbWF0Y2giLCAic2VhcmNoIiwgInN1YiIsICJzdWJuIiwgInNwbGl0IiwgImZpbmRhbGwiLAogICAgICJjb21waWxlIiwgInB1cmdlIiwgInRlbXBsYXRlIiwgImVzY2FwZSIsICJBIiwgIkkiLCAiTCIsICJNIiwgIlMiLCAiWCIsCiAgICAgIlUiLCAiQVNDSUkiLCAiSUdOT1JFQ0FTRSIsICJMT0NBTEUiLCAiTVVMVElMSU5FIiwgIkRPVEFMTCIsICJWRVJCT1NFIiwKICAgICAiVU5JQ09ERSIsICJlcnJvciIgXQpAQCAtMTU1LDYgKzE1NSwxMSBAQAogICAgIGEgbWF0Y2ggb2JqZWN0LCBvciBOb25lIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4iIiIKICAgICByZXR1cm4gX2NvbXBpbGUocGF0dGVybiwgZmxhZ3MpLm1hdGNoKHN0cmluZykKIAorZGVmIGZ1bGxtYXRjaChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzPTApOgorICAgICIiIlRyeSB0byBhcHBseSB0aGUgcGF0dGVybiB0byBhbGwgb2YgdGhlIHN0cmluZywgcmV0dXJuaW5nCisgICAgYSBtYXRjaCBvYmplY3QsIG9yIE5vbmUgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLiIiIgorICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCBmbGFncykuZnVsbG1hdGNoKHN0cmluZykKKwogZGVmIHNlYXJjaChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzPTApOgogICAgICIiIlNjYW4gdGhyb3VnaCBzdHJpbmcgbG9va2luZyBmb3IgYSBtYXRjaCB0byB0aGUgcGF0dGVybiwgcmV0dXJuaW5nCiAgICAgYSBtYXRjaCBvYmplY3QsIG9yIE5vbmUgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLiIiIgpkaWZmIC0tZ2l0IGEvTGliL3JsY29tcGxldGVyLnB5IGIvTGliL3JsY29tcGxldGVyLnB5CmluZGV4IDNmOTcwNTMuLjk0ZjkzNDEgMTAwNjQ0Ci0tLSBhL0xpYi9ybGNvbXBsZXRlci5weQorKysgYi9MaWIvcmxjb21wbGV0ZXIucHkKQEAgLTI5LDYgKzI5LDcgQEAKIAogIiIiCiAKK2ltcG9ydCBhdGV4aXQKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IF9fbWFpbl9fCiAKQEAgLTE1OCwzICsxNTksNyBAQAogICAgIHBhc3MKIGVsc2U6CiAgICAgcmVhZGxpbmUuc2V0X2NvbXBsZXRlcihDb21wbGV0ZXIoKS5jb21wbGV0ZSkKKyAgICAjIFJlbGVhc2UgcmVmZXJlbmNlcyBlYXJseSBhdCBzaHV0ZG93biAodGhlIHJlYWRsaW5lIG1vZHVsZSdzCisgICAgIyBjb250ZW50cyBhcmUgcXVhc2ktaW1tb3J0YWwsIGFuZCB0aGUgY29tcGxldGVyIGZ1bmN0aW9uIGhvbGRzIGEKKyAgICAjIHJlZmVyZW5jZSB0byBnbG9iYWxzKS4KKyAgICBhdGV4aXQucmVnaXN0ZXIobGFtYmRhOiByZWFkbGluZS5zZXRfY29tcGxldGVyKE5vbmUpKQpkaWZmIC0tZ2l0IGEvTGliL3J1bnB5LnB5IGIvTGliL3J1bnB5LnB5CmluZGV4IDM5YzBlOWYuLjU3N2RlYjIgMTAwNjQ0Ci0tLSBhL0xpYi9ydW5weS5weQorKysgYi9MaWIvcnVucHkucHkKQEAgLTEzLDggKzEzLDkgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkgIyBpbXBvcnRsaWIgZmlyc3Qgc28gd2UgY2FuIHRlc3QgIzE1Mzg2IHZpYSAtbQotaW1wb3J0IGltcAotZnJvbSBwa2d1dGlsIGltcG9ydCByZWFkX2NvZGUsIGdldF9sb2FkZXIsIGdldF9pbXBvcnRlcgoraW1wb3J0IGltcG9ydGxpYi51dGlsCitpbXBvcnQgdHlwZXMKK2Zyb20gcGtndXRpbCBpbXBvcnQgcmVhZF9jb2RlLCBnZXRfaW1wb3J0ZXIKIAogX19hbGxfXyA9IFsKICAgICAicnVuX21vZHVsZSIsICJydW5fcGF0aCIsCkBAIC0yNCw3ICsyNSw3IEBACiAgICAgIiIiVGVtcG9yYXJpbHkgcmVwbGFjZSBhIG1vZHVsZSBpbiBzeXMubW9kdWxlcyB3aXRoIGFuIGVtcHR5IG5hbWVzcGFjZSIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RfbmFtZSk6CiAgICAgICAgIHNlbGYubW9kX25hbWUgPSBtb2RfbmFtZQotICAgICAgICBzZWxmLm1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG1vZF9uYW1lKQorICAgICAgICBzZWxmLm1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobW9kX25hbWUpCiAgICAgICAgIHNlbGYuX3NhdmVkX21vZHVsZSA9IFtdCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgpAQCAtNTgsNTEgKzU5LDU5IEBACiAgICAgICAgIHNlbGYudmFsdWUgPSBzZWxmLl9zZW50aW5lbAogICAgICAgICBzeXMuYXJndlswXSA9IHNlbGYuX3NhdmVkX3ZhbHVlCiAKKyMgVE9ETzogUmVwbGFjZSB0aGVzZSBoZWxwZXJzIHdpdGggaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzCiBkZWYgX3J1bl9jb2RlKGNvZGUsIHJ1bl9nbG9iYWxzLCBpbml0X2dsb2JhbHM9Tm9uZSwKLSAgICAgICAgICAgICAgbW9kX25hbWU9Tm9uZSwgbW9kX2ZuYW1lPU5vbmUsCi0gICAgICAgICAgICAgIG1vZF9sb2FkZXI9Tm9uZSwgcGtnX25hbWU9Tm9uZSk6CisgICAgICAgICAgICAgIG1vZF9uYW1lPU5vbmUsIG1vZF9zcGVjPU5vbmUsCisgICAgICAgICAgICAgIHBrZ19uYW1lPU5vbmUsIHNjcmlwdF9uYW1lPU5vbmUpOgogICAgICIiIkhlbHBlciB0byBydW4gY29kZSBpbiBub21pbmF0ZWQgbmFtZXNwYWNlIiIiCiAgICAgaWYgaW5pdF9nbG9iYWxzIGlzIG5vdCBOb25lOgogICAgICAgICBydW5fZ2xvYmFscy51cGRhdGUoaW5pdF9nbG9iYWxzKQorICAgIGlmIG1vZF9zcGVjIGlzIE5vbmU6CisgICAgICAgIGxvYWRlciA9IE5vbmUKKyAgICAgICAgZm5hbWUgPSBzY3JpcHRfbmFtZQorICAgICAgICBjYWNoZWQgPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgbG9hZGVyID0gbW9kX3NwZWMubG9hZGVyCisgICAgICAgIGZuYW1lID0gbW9kX3NwZWMub3JpZ2luCisgICAgICAgIGNhY2hlZCA9IG1vZF9zcGVjLmNhY2hlZAorICAgICAgICBpZiBwa2dfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcGtnX25hbWUgPSBtb2Rfc3BlYy5wYXJlbnQKICAgICBydW5fZ2xvYmFscy51cGRhdGUoX19uYW1lX18gPSBtb2RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgX19maWxlX18gPSBtb2RfZm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIF9fY2FjaGVkX18gPSBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICBfX2ZpbGVfXyA9IGZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBfX2NhY2hlZF9fID0gY2FjaGVkLAogICAgICAgICAgICAgICAgICAgICAgICBfX2RvY19fID0gTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgX19sb2FkZXJfXyA9IG1vZF9sb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIF9fcGFja2FnZV9fID0gcGtnX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgIF9fbG9hZGVyX18gPSBsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgIF9fcGFja2FnZV9fID0gcGtnX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIF9fc3BlY19fID0gbW9kX3NwZWMpCiAgICAgZXhlYyhjb2RlLCBydW5fZ2xvYmFscykKICAgICByZXR1cm4gcnVuX2dsb2JhbHMKIAogZGVmIF9ydW5fbW9kdWxlX2NvZGUoY29kZSwgaW5pdF9nbG9iYWxzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIG1vZF9uYW1lPU5vbmUsIG1vZF9mbmFtZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICBtb2RfbG9hZGVyPU5vbmUsIHBrZ19uYW1lPU5vbmUpOgorICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZT1Ob25lLCBtb2Rfc3BlYz1Ob25lLAorICAgICAgICAgICAgICAgICAgICBwa2dfbmFtZT1Ob25lLCBzY3JpcHRfbmFtZT1Ob25lKToKICAgICAiIiJIZWxwZXIgdG8gcnVuIGNvZGUgaW4gbmV3IG5hbWVzcGFjZSB3aXRoIHN5cyBtb2RpZmllZCIiIgotICAgIHdpdGggX1RlbXBNb2R1bGUobW9kX25hbWUpIGFzIHRlbXBfbW9kdWxlLCBfTW9kaWZpZWRBcmd2MChtb2RfZm5hbWUpOgorICAgIGZuYW1lID0gc2NyaXB0X25hbWUgaWYgbW9kX3NwZWMgaXMgTm9uZSBlbHNlIG1vZF9zcGVjLm9yaWdpbgorICAgIHdpdGggX1RlbXBNb2R1bGUobW9kX25hbWUpIGFzIHRlbXBfbW9kdWxlLCBfTW9kaWZpZWRBcmd2MChmbmFtZSk6CiAgICAgICAgIG1vZF9nbG9iYWxzID0gdGVtcF9tb2R1bGUubW9kdWxlLl9fZGljdF9fCiAgICAgICAgIF9ydW5fY29kZShjb2RlLCBtb2RfZ2xvYmFscywgaW5pdF9nbG9iYWxzLAotICAgICAgICAgICAgICAgICAgbW9kX25hbWUsIG1vZF9mbmFtZSwgbW9kX2xvYWRlciwgcGtnX25hbWUpCisgICAgICAgICAgICAgICAgICBtb2RfbmFtZSwgbW9kX3NwZWMsIHBrZ19uYW1lLCBzY3JpcHRfbmFtZSkKICAgICAjIENvcHkgdGhlIGdsb2JhbHMgb2YgdGhlIHRlbXBvcmFyeSBtb2R1bGUsIGFzIHRoZXkKICAgICAjIG1heSBiZSBjbGVhcmVkIHdoZW4gdGhlIHRlbXBvcmFyeSBtb2R1bGUgZ29lcyBhd2F5CiAgICAgcmV0dXJuIG1vZF9nbG9iYWxzLmNvcHkoKQogCi0KLSMgVGhpcyBoZWxwZXIgaXMgbmVlZGVkIGR1ZSB0byBhIG1pc3NpbmcgY29tcG9uZW50IGluIHRoZSBQRVAgMzAyCi0jIGxvYWRlciBwcm90b2NvbCAoc3BlY2lmaWNhbGx5LCAiZ2V0X2ZpbGVuYW1lIiBpcyBub24tc3RhbmRhcmQpCi0jIFNpbmNlIHdlIGNhbid0IGludHJvZHVjZSBuZXcgZmVhdHVyZXMgaW4gbWFpbnRlbmFuY2UgcmVsZWFzZXMsCi0jIHN1cHBvcnQgd2FzIGFkZGVkIHRvIHppcGltcG9ydGVyIHVuZGVyIHRoZSBuYW1lICdfZ2V0X2ZpbGVuYW1lJwotZGVmIF9nZXRfZmlsZW5hbWUobG9hZGVyLCBtb2RfbmFtZSk6Ci0gICAgZm9yIGF0dHIgaW4gKCJnZXRfZmlsZW5hbWUiLCAiX2dldF9maWxlbmFtZSIpOgotICAgICAgICBtZXRoID0gZ2V0YXR0cihsb2FkZXIsIGF0dHIsIE5vbmUpCi0gICAgICAgIGlmIG1ldGggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKG1ldGgobW9kX25hbWUpKQotICAgIHJldHVybiBOb25lCi0KICMgSGVscGVyIHRvIGdldCB0aGUgbG9hZGVyLCBjb2RlIGFuZCBmaWxlbmFtZSBmb3IgYSBtb2R1bGUKIGRlZiBfZ2V0X21vZHVsZV9kZXRhaWxzKG1vZF9uYW1lKToKLSAgICBsb2FkZXIgPSBnZXRfbG9hZGVyKG1vZF9uYW1lKQotICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgIHRyeToKKyAgICAgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYyhtb2RfbmFtZSkKKyAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yLCBWYWx1ZUVycm9yKSBhcyBleDoKKyAgICAgICAgIyBUaGlzIGhhY2sgZml4ZXMgYW4gaW1wZWRhbmNlIG1pc21hdGNoIGJldHdlZW4gcGtndXRpbCBhbmQKKyAgICAgICAgIyBpbXBvcnRsaWIsIHdoZXJlIHRoZSBsYXR0ZXIgcmFpc2VzIG90aGVyIGVycm9ycyBmb3IgY2FzZXMgd2hlcmUKKyAgICAgICAgIyBwa2d1dGlsIHByZXZpb3VzbHkgcmFpc2VkIEltcG9ydEVycm9yCisgICAgICAgIG1zZyA9ICJFcnJvciB3aGlsZSBmaW5kaW5nIHNwZWMgZm9yIHshcn0gKHt9OiB7fSkiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQobW9kX25hbWUsIHR5cGUoZXgpLCBleCkpIGZyb20gZXgKKyAgICBpZiBzcGVjIGlzIE5vbmU6CiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJObyBtb2R1bGUgbmFtZWQgJXMiICUgbW9kX25hbWUpCi0gICAgaWYgbG9hZGVyLmlzX3BhY2thZ2UobW9kX25hbWUpOgorICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CiAgICAgICAgIGlmIG1vZF9uYW1lID09ICJfX21haW5fXyIgb3IgbW9kX25hbWUuZW5kc3dpdGgoIi5fX21haW5fXyIpOgogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIkNhbm5vdCB1c2UgcGFja2FnZSBhcyBfX21haW5fXyBtb2R1bGUiKQogICAgICAgICB0cnk6CkBAIC0xMTEsMTEgKzEyMCwxNCBAQAogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCgiJXM7ICVyIGlzIGEgcGFja2FnZSBhbmQgY2Fubm90ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBkaXJlY3RseSBleGVjdXRlZCIpICUoZSwgbW9kX25hbWUpKQorICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCisgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCIlciBpcyBhIG5hbWVzcGFjZSBwYWNrYWdlIGFuZCBjYW5ub3QgYmUgZXhlY3V0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgbW9kX25hbWUpCiAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZShtb2RfbmFtZSkKICAgICBpZiBjb2RlIGlzIE5vbmU6CiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJObyBjb2RlIG9iamVjdCBhdmFpbGFibGUgZm9yICVzIiAlIG1vZF9uYW1lKQotICAgIGZpbGVuYW1lID0gX2dldF9maWxlbmFtZShsb2FkZXIsIG1vZF9uYW1lKQotICAgIHJldHVybiBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmaWxlbmFtZQorICAgIHJldHVybiBtb2RfbmFtZSwgc3BlYywgY29kZQogCiAjIFhYWCBuY29naGxhbjogU2hvdWxkIHRoaXMgYmUgZG9jdW1lbnRlZCBhbmQgbWFkZSBwdWJsaWM/CiAjIChDdXJyZW50IHRob3VnaHRzOiBkb24ndCByZXBlYXQgdGhlIG1pc3Rha2UgdGhhdCBsZWFkIHRvIGl0cwpAQCAtMTM3LDkgKzE0OSw5IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBpZiBhbHRlcl9hcmd2IG9yIG1vZF9uYW1lICE9ICJfX21haW5fXyI6ICMgaS5lLiAtbSBzd2l0Y2gKLSAgICAgICAgICAgIG1vZF9uYW1lLCBsb2FkZXIsIGNvZGUsIGZuYW1lID0gX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSkKKyAgICAgICAgICAgIG1vZF9uYW1lLCBtb2Rfc3BlYywgY29kZSA9IF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUpCiAgICAgICAgIGVsc2U6ICAgICAgICAgICMgaS5lLiBkaXJlY3Rvcnkgb3IgemlwZmlsZSBleGVjdXRpb24KLSAgICAgICAgICAgIG1vZF9uYW1lLCBsb2FkZXIsIGNvZGUsIGZuYW1lID0gX2dldF9tYWluX21vZHVsZV9kZXRhaWxzKCkKKyAgICAgICAgICAgIG1vZF9uYW1lLCBtb2Rfc3BlYywgY29kZSA9IF9nZXRfbWFpbl9tb2R1bGVfZGV0YWlscygpCiAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGV4YzoKICAgICAgICAgIyBUcnkgdG8gcHJvdmlkZSBhIGdvb2QgZXJyb3IgbWVzc2FnZQogICAgICAgICAjIGZvciBkaXJlY3RvcmllcywgemlwIGZpbGVzIGFuZCB0aGUgLW0gc3dpdGNoCkBAIC0xNTIsMTIgKzE2NCwxMSBAQAogICAgICAgICAgICAgaW5mbyA9ICJjYW4ndCBmaW5kICdfX21haW5fXycgbW9kdWxlIGluICVyIiAlIHN5cy5hcmd2WzBdCiAgICAgICAgIG1zZyA9ICIlczogJXMiICUgKHN5cy5leGVjdXRhYmxlLCBpbmZvKQogICAgICAgICBzeXMuZXhpdChtc2cpCi0gICAgcGtnX25hbWUgPSBtb2RfbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KICAgICBtYWluX2dsb2JhbHMgPSBzeXMubW9kdWxlc1siX19tYWluX18iXS5fX2RpY3RfXwogICAgIGlmIGFsdGVyX2FyZ3Y6Ci0gICAgICAgIHN5cy5hcmd2WzBdID0gZm5hbWUKKyAgICAgICAgc3lzLmFyZ3ZbMF0gPSBtb2Rfc3BlYy5vcmlnaW4KICAgICByZXR1cm4gX3J1bl9jb2RlKGNvZGUsIG1haW5fZ2xvYmFscywgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICJfX21haW5fXyIsIGZuYW1lLCBsb2FkZXIsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgIl9fbWFpbl9fIiwgbW9kX3NwZWMpCiAKIGRlZiBydW5fbW9kdWxlKG1vZF9uYW1lLCBpbml0X2dsb2JhbHM9Tm9uZSwKICAgICAgICAgICAgICAgIHJ1bl9uYW1lPU5vbmUsIGFsdGVyX3N5cz1GYWxzZSk6CkBAIC0xNjUsMTcgKzE3NiwxNCBAQAogCiAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0aW5nIHRvcCBsZXZlbCBuYW1lc3BhY2UgZGljdGlvbmFyeQogICAgICIiIgotICAgIG1vZF9uYW1lLCBsb2FkZXIsIGNvZGUsIGZuYW1lID0gX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSkKKyAgICBtb2RfbmFtZSwgbW9kX3NwZWMsIGNvZGUgPSBfZ2V0X21vZHVsZV9kZXRhaWxzKG1vZF9uYW1lKQogICAgIGlmIHJ1bl9uYW1lIGlzIE5vbmU6CiAgICAgICAgIHJ1bl9uYW1lID0gbW9kX25hbWUKLSAgICBwa2dfbmFtZSA9IG1vZF9uYW1lLnJwYXJ0aXRpb24oJy4nKVswXQogICAgIGlmIGFsdGVyX3N5czoKLSAgICAgICAgcmV0dXJuIF9ydW5fbW9kdWxlX2NvZGUoY29kZSwgaW5pdF9nbG9iYWxzLCBydW5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUsIGxvYWRlciwgcGtnX25hbWUpCisgICAgICAgIHJldHVybiBfcnVuX21vZHVsZV9jb2RlKGNvZGUsIGluaXRfZ2xvYmFscywgcnVuX25hbWUsIG1vZF9zcGVjKQogICAgIGVsc2U6CiAgICAgICAgICMgTGVhdmUgdGhlIHN5cyBtb2R1bGUgYWxvbmUKLSAgICAgICAgcmV0dXJuIF9ydW5fY29kZShjb2RlLCB7fSwgaW5pdF9nbG9iYWxzLCBydW5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkKKyAgICAgICAgcmV0dXJuIF9ydW5fY29kZShjb2RlLCB7fSwgaW5pdF9nbG9iYWxzLCBydW5fbmFtZSwgbW9kX3NwZWMpCiAKIGRlZiBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKToKICAgICAjIEhlbHBlciB0aGF0IGdpdmVzIGEgbmljZXIgZXJyb3IgbWVzc2FnZSB3aGVuIGF0dGVtcHRpbmcgdG8KQEAgLTIwNCwxMCArMjEyLDcgQEAKICAgICAgICAgIyBUaGF0IGRpZG4ndCB3b3JrLCBzbyB0cnkgaXQgYXMgbm9ybWFsIHNvdXJjZSBjb2RlCiAgICAgICAgIHdpdGggb3BlbihmbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGYucmVhZCgpLCBmbmFtZSwgJ2V4ZWMnKQotICAgICAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKHJ1bl9uYW1lLCBmbmFtZSkKLSAgICBlbHNlOgotICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyKHJ1bl9uYW1lLCBmbmFtZSkKLSAgICByZXR1cm4gY29kZSwgbG9hZGVyCisgICAgcmV0dXJuIGNvZGUsIGZuYW1lCiAKIGRlZiBydW5fcGF0aChwYXRoX25hbWUsIGluaXRfZ2xvYmFscz1Ob25lLCBydW5fbmFtZT1Ob25lKToKICAgICAiIiJFeGVjdXRlIGNvZGUgbG9jYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGZpbGVzeXN0ZW0gbG9jYXRpb24KQEAgLTIyMywxMiArMjI4LDE3IEBACiAgICAgICAgIHJ1bl9uYW1lID0gIjxydW5fcGF0aD4iCiAgICAgcGtnX25hbWUgPSBydW5fbmFtZS5ycGFydGl0aW9uKCIuIilbMF0KICAgICBpbXBvcnRlciA9IGdldF9pbXBvcnRlcihwYXRoX25hbWUpCi0gICAgaWYgaXNpbnN0YW5jZShpbXBvcnRlciwgKHR5cGUoTm9uZSksIGltcC5OdWxsSW1wb3J0ZXIpKToKKyAgICAjIFRyeWluZyB0byBhdm9pZCBpbXBvcnRpbmcgaW1wIHNvIGFzIHRvIG5vdCBjb25zdW1lIHRoZSBkZXByZWNhdGlvbiB3YXJuaW5nLgorICAgIGlzX051bGxJbXBvcnRlciA9IEZhbHNlCisgICAgaWYgdHlwZShpbXBvcnRlcikuX19tb2R1bGVfXyA9PSAnaW1wJzoKKyAgICAgICAgaWYgdHlwZShpbXBvcnRlcikuX19uYW1lX18gPT0gJ051bGxJbXBvcnRlcic6CisgICAgICAgICAgICBpc19OdWxsSW1wb3J0ZXIgPSBUcnVlCisgICAgaWYgaXNpbnN0YW5jZShpbXBvcnRlciwgdHlwZShOb25lKSkgb3IgaXNfTnVsbEltcG9ydGVyOgogICAgICAgICAjIE5vdCBhIHZhbGlkIHN5cy5wYXRoIGVudHJ5LCBzbyBydW4gdGhlIGNvZGUgZGlyZWN0bHkKICAgICAgICAgIyBleGVjZmlsZSgpIGRvZXNuJ3QgaGVscCBhcyB3ZSB3YW50IHRvIGFsbG93IGNvbXBpbGVkIGZpbGVzCi0gICAgICAgIGNvZGUsIG1vZF9sb2FkZXIgPSBfZ2V0X2NvZGVfZnJvbV9maWxlKHJ1bl9uYW1lLCBwYXRoX25hbWUpCi0gICAgICAgIHJldHVybiBfcnVuX21vZHVsZV9jb2RlKGNvZGUsIGluaXRfZ2xvYmFscywgcnVuX25hbWUsIHBhdGhfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kX2xvYWRlciwgcGtnX25hbWUpCisgICAgICAgIGNvZGUsIGZuYW1lID0gX2dldF9jb2RlX2Zyb21fZmlsZShydW5fbmFtZSwgcGF0aF9uYW1lKQorICAgICAgICByZXR1cm4gX3J1bl9tb2R1bGVfY29kZShjb2RlLCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dfbmFtZT1wa2dfbmFtZSwgc2NyaXB0X25hbWU9Zm5hbWUpCiAgICAgZWxzZToKICAgICAgICAgIyBJbXBvcnRlciBpcyBkZWZpbmVkIGZvciBwYXRoLCBzbyBhZGQgaXQgdG8KICAgICAgICAgIyB0aGUgc3RhcnQgb2Ygc3lzLnBhdGgKQEAgLTI0MCwxMiArMjUwLDEyIEBACiAgICAgICAgICAgICAjIGhhdmUgbm8gY2hvaWNlIGFuZCB3ZSBoYXZlIHRvIHJlbW92ZSBpdCBldmVuIHdoaWxlIHdlIHJlYWQgdGhlCiAgICAgICAgICAgICAjIGNvZGUuIElmIHdlIGRvbid0IGRvIHRoaXMsIGEgX19sb2FkZXJfXyBhdHRyaWJ1dGUgaW4gdGhlCiAgICAgICAgICAgICAjIGV4aXN0aW5nIF9fbWFpbl9fIG1vZHVsZSBtYXkgcHJldmVudCBsb2NhdGlvbiBvZiB0aGUgbmV3IG1vZHVsZS4KLSAgICAgICAgICAgIG1vZF9uYW1lLCBsb2FkZXIsIGNvZGUsIGZuYW1lID0gX2dldF9tYWluX21vZHVsZV9kZXRhaWxzKCkKKyAgICAgICAgICAgIG1vZF9uYW1lLCBtb2Rfc3BlYywgY29kZSA9IF9nZXRfbWFpbl9tb2R1bGVfZGV0YWlscygpCiAgICAgICAgICAgICB3aXRoIF9UZW1wTW9kdWxlKHJ1bl9uYW1lKSBhcyB0ZW1wX21vZHVsZSwgXAogICAgICAgICAgICAgICAgICBfTW9kaWZpZWRBcmd2MChwYXRoX25hbWUpOgogICAgICAgICAgICAgICAgIG1vZF9nbG9iYWxzID0gdGVtcF9tb2R1bGUubW9kdWxlLl9fZGljdF9fCiAgICAgICAgICAgICAgICAgcmV0dXJuIF9ydW5fY29kZShjb2RlLCBtb2RfZ2xvYmFscywgaW5pdF9nbG9iYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX25hbWUsIGZuYW1lLCBsb2FkZXIsIHBrZ19uYW1lKS5jb3B5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9uYW1lLCBtb2Rfc3BlYywgcGtnX25hbWUpLmNvcHkoKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN5cy5wYXRoLnJlbW92ZShwYXRoX25hbWUpCmRpZmYgLS1naXQgYS9MaWIvc2NoZWQucHkgYi9MaWIvc2NoZWQucHkKaW5kZXggYjlhN2FkMS4uMmU2YjAwYSAxMDA2NDQKLS0tIGEvTGliL3NjaGVkLnB5CisrKyBiL0xpYi9zY2hlZC5weQpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBrd2FyZ3MgaXMgX3NlbnRpbmVsOgogICAgICAgICAgICAga3dhcmdzID0ge30KKyAgICAgICAgZXZlbnQgPSBFdmVudCh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6Ci0gICAgICAgICAgICBldmVudCA9IEV2ZW50KHRpbWUsIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50LCBrd2FyZ3MpCiAgICAgICAgICAgICBoZWFwcS5oZWFwcHVzaChzZWxmLl9xdWV1ZSwgZXZlbnQpCi0gICAgICAgICAgICByZXR1cm4gZXZlbnQgIyBUaGUgSUQKKyAgICAgICAgcmV0dXJuIGV2ZW50ICMgVGhlIElECiAKICAgICBkZWYgZW50ZXIoc2VsZiwgZGVsYXksIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50PSgpLCBrd2FyZ3M9X3NlbnRpbmVsKToKICAgICAgICAgIiIiQSB2YXJpYW50IHRoYXQgc3BlY2lmaWVzIHRoZSB0aW1lIGFzIGEgcmVsYXRpdmUgdGltZS4KQEAgLTgyLDkgKzgyLDggQEAKICAgICAgICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgbW9yZSBjb21tb25seSB1c2VkIGludGVyZmFjZS4KIAogICAgICAgICAiIiIKLSAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgdGltZSA9IHNlbGYudGltZWZ1bmMoKSArIGRlbGF5Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5lbnRlcmFicyh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQorICAgICAgICB0aW1lID0gc2VsZi50aW1lZnVuYygpICsgZGVsYXkKKyAgICAgICAgcmV0dXJuIHNlbGYuZW50ZXJhYnModGltZSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQsIGt3YXJncykKIAogICAgIGRlZiBjYW5jZWwoc2VsZiwgZXZlbnQpOgogICAgICAgICAiIiJSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgcXVldWUuCkBAIC0xNjUsNCArMTY0LDQgQEAKICAgICAgICAgIyB0aGUgYWN0dWFsIG9yZGVyIHRoZXkgd291bGQgYmUgcmV0cmlldmVkLgogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICAgICAgICBldmVudHMgPSBzZWxmLl9xdWV1ZVs6XQotICAgICAgICAgICAgcmV0dXJuIGxpc3QobWFwKGhlYXBxLmhlYXBwb3AsIFtldmVudHNdKmxlbihldmVudHMpKSkKKyAgICAgICAgcmV0dXJuIGxpc3QobWFwKGhlYXBxLmhlYXBwb3AsIFtldmVudHNdKmxlbihldmVudHMpKSkKZGlmZiAtLWdpdCBhL0xpYi9zZWxlY3RvcnMucHkgYi9MaWIvc2VsZWN0b3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMmE0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvc2VsZWN0b3JzLnB5CkBAIC0wLDAgKzEsNTI2IEBACisiIiJTZWxlY3RvcnMgbW9kdWxlLgorCitUaGlzIG1vZHVsZSBhbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTyBtdWx0aXBsZXhpbmcsIGJ1aWx0IHVwb24gdGhlCitgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4KKyIiIgorCisKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZCwgYWJzdHJhY3Rwcm9wZXJ0eQorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgTWFwcGluZworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IG1hdGgKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzeXMKKworCisjIGdlbmVyaWMgZXZlbnRzLCB0aGF0IG11c3QgYmUgbWFwcGVkIHRvIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIG9uZXMKK0VWRU5UX1JFQUQgPSAoMSA8PCAwKQorRVZFTlRfV1JJVEUgPSAoMSA8PCAxKQorCisKK2RlZiBfZmlsZW9ial90b19mZChmaWxlb2JqKToKKyAgICAiIiJSZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IgZnJvbSBhIGZpbGUgb2JqZWN0LgorCisgICAgUGFyYW1ldGVyczoKKyAgICBmaWxlb2JqIC0tIGZpbGUgb2JqZWN0IG9yIGZpbGUgZGVzY3JpcHRvcgorCisgICAgUmV0dXJuczoKKyAgICBjb3JyZXNwb25kaW5nIGZpbGUgZGVzY3JpcHRvcgorCisgICAgUmFpc2VzOgorICAgIFZhbHVlRXJyb3IgaWYgdGhlIG9iamVjdCBpcyBpbnZhbGlkCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShmaWxlb2JqLCBpbnQpOgorICAgICAgICBmZCA9IGZpbGVvYmoKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCA9IGludChmaWxlb2JqLmZpbGVubygpKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBmaWxlIG9iamVjdDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyFyfSIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKyAgICBpZiBmZCA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgZmlsZSBkZXNjcmlwdG9yOiB7fSIuZm9ybWF0KGZkKSkKKyAgICByZXR1cm4gZmQKKworCitTZWxlY3RvcktleSA9IG5hbWVkdHVwbGUoJ1NlbGVjdG9yS2V5JywgWydmaWxlb2JqJywgJ2ZkJywgJ2V2ZW50cycsICdkYXRhJ10pCisiIiJPYmplY3QgdXNlZCB0byBhc3NvY2lhdGUgYSBmaWxlIG9iamVjdCB0byBpdHMgYmFja2luZyBmaWxlIGRlc2NyaXB0b3IsCitzZWxlY3RlZCBldmVudCBtYXNrIGFuZCBhdHRhY2hlZCBkYXRhLiIiIgorCisKK2NsYXNzIF9TZWxlY3Rvck1hcHBpbmcoTWFwcGluZyk6CisgICAgIiIiTWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3Rvcik6CisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gc2VsZWN0b3IKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3NlbGVjdG9yLl9mZF90b19rZXkpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgZmlsZW9iaik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZkID0gc2VsZi5fc2VsZWN0b3IuX2ZpbGVvYmpfbG9va3VwKGZpbGVvYmopCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2VsZWN0b3IuX2ZkX3RvX2tleVtmZF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoInshcn0gaXMgbm90IHJlZ2lzdGVyZWQiLmZvcm1hdChmaWxlb2JqKSkgZnJvbSBOb25lCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHNlbGYuX3NlbGVjdG9yLl9mZF90b19rZXkpCisKKworY2xhc3MgQmFzZVNlbGVjdG9yKG1ldGFjbGFzcz1BQkNNZXRhKToKKyAgICAiIiJTZWxlY3RvciBhYnN0cmFjdCBiYXNlIGNsYXNzLgorCisgICAgQSBzZWxlY3RvciBzdXBwb3J0cyByZWdpc3RlcmluZyBmaWxlIG9iamVjdHMgdG8gYmUgbW9uaXRvcmVkIGZvciBzcGVjaWZpYworICAgIEkvTyBldmVudHMuCisKKyAgICBBIGZpbGUgb2JqZWN0IGlzIGEgZmlsZSBkZXNjcmlwdG9yIG9yIGFueSBvYmplY3Qgd2l0aCBhIGBmaWxlbm8oKWAgbWV0aG9kLgorICAgIEFuIGFyYml0cmFyeSBvYmplY3QgY2FuIGJlIGF0dGFjaGVkIHRvIHRoZSBmaWxlIG9iamVjdCwgd2hpY2ggY2FuIGJlIHVzZWQKKyAgICBmb3IgZXhhbXBsZSB0byBzdG9yZSBjb250ZXh0IGluZm9ybWF0aW9uLCBhIGNhbGxiYWNrLCBldGMuCisKKyAgICBBIHNlbGVjdG9yIGNhbiB1c2UgdmFyaW91cyBpbXBsZW1lbnRhdGlvbnMgKHNlbGVjdCgpLCBwb2xsKCksIGVwb2xsKCkuLi4pCisgICAgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4gVGhlIGRlZmF1bHQgYFNlbGVjdG9yYCBjbGFzcyB1c2VzIHRoZSBtb3N0CisgICAgcGVyZm9ybWFudCBpbXBsZW1lbnRhdGlvbiBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4KKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICIiIlJlZ2lzdGVyIGEgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgZXZlbnRzICAtLSBldmVudHMgdG8gbW9uaXRvciAoYml0d2lzZSBtYXNrIG9mIEVWRU5UX1JFQUR8RVZFTlRfV1JJVEUpCisgICAgICAgIGRhdGEgICAgLS0gYXR0YWNoZWQgZGF0YQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgIFNlbGVjdG9yS2V5IGluc3RhbmNlCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICBWYWx1ZUVycm9yIGlmIGV2ZW50cyBpcyBpbnZhbGlkCisgICAgICAgIEtleUVycm9yIGlmIGZpbGVvYmogaXMgYWxyZWFkeSByZWdpc3RlcmVkCisgICAgICAgIE9TRXJyb3IgaWYgZmlsZW9iaiBpcyBjbG9zZWQgb3Igb3RoZXJ3aXNlIGlzIHVuYWNjZXB0YWJsZSB0bworICAgICAgICAgICAgICAgIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxsIChpZiBhIHN5c3RlbSBjYWxsIGlzIG1hZGUpCisKKyAgICAgICAgTm90ZToKKyAgICAgICAgT1NFcnJvciBtYXkgb3IgbWF5IG5vdCBiZSByYWlzZWQKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJVbnJlZ2lzdGVyIGEgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBpbnN0YW5jZQorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgS2V5RXJyb3IgaWYgZmlsZW9iaiBpcyBub3QgcmVnaXN0ZXJlZAorCisgICAgICAgIE5vdGU6CisgICAgICAgIElmIGZpbGVvYmogaXMgcmVnaXN0ZXJlZCBidXQgaGFzIHNpbmNlIGJlZW4gY2xvc2VkIHRoaXMgZG9lcworICAgICAgICAqbm90KiByYWlzZSBPU0Vycm9yIChldmVuIGlmIHRoZSB3cmFwcGVkIHN5c2NhbGwgZG9lcykKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBtb2RpZnkoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAiIiJDaGFuZ2UgYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0IG1vbml0b3JlZCBldmVudHMgb3IgYXR0YWNoZWQgZGF0YS4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICBmaWxlb2JqIC0tIGZpbGUgb2JqZWN0IG9yIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBldmVudHMgIC0tIGV2ZW50cyB0byBtb25pdG9yIChiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURSkKKyAgICAgICAgZGF0YSAgICAtLSBhdHRhY2hlZCBkYXRhCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgaW5zdGFuY2UKKworICAgICAgICBSYWlzZXM6CisgICAgICAgIEFueXRoaW5nIHRoYXQgdW5yZWdpc3RlcigpIG9yIHJlZ2lzdGVyKCkgcmFpc2VzCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgcmV0dXJuIHNlbGYucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiJQZXJmb3JtIHRoZSBhY3R1YWwgc2VsZWN0aW9uLCB1bnRpbCBzb21lIG1vbml0b3JlZCBmaWxlIG9iamVjdHMgYXJlCisgICAgICAgIHJlYWR5IG9yIGEgdGltZW91dCBleHBpcmVzLgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgIHRpbWVvdXQgLS0gaWYgdGltZW91dCA+IDAsIHRoaXMgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHdhaXQgdGltZSwgaW4KKyAgICAgICAgICAgICAgICAgICBzZWNvbmRzCisgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwLCB0aGUgc2VsZWN0KCkgY2FsbCB3b24ndCBibG9jaywgYW5kIHdpbGwKKyAgICAgICAgICAgICAgICAgICByZXBvcnQgdGhlIGN1cnJlbnRseSByZWFkeSBmaWxlIG9iamVjdHMKKyAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmUsIHNlbGVjdCgpIHdpbGwgYmxvY2sgdW50aWwgYSBtb25pdG9yZWQKKyAgICAgICAgICAgICAgICAgICBmaWxlIG9iamVjdCBiZWNvbWVzIHJlYWR5CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgbGlzdCBvZiAoa2V5LCBldmVudHMpIGZvciByZWFkeSBmaWxlIG9iamVjdHMKKyAgICAgICAgYGV2ZW50c2AgaXMgYSBiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgc2VsZWN0b3IuCisKKyAgICAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdW5kZXJseWluZyByZXNvdXJjZSBpcyBmcmVlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBnZXRfa2V5KHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGtleSBhc3NvY2lhdGVkIHRvIGEgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBmb3IgdGhpcyBmaWxlIG9iamVjdAorICAgICAgICAiIiIKKyAgICAgICAgbWFwcGluZyA9IHNlbGYuZ2V0X21hcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBtYXBwaW5nW2ZpbGVvYmpdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGdldF9tYXAoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIG1hcHBpbmcgb2YgZmlsZSBvYmplY3RzIHRvIHNlbGVjdG9yIGtleXMuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworCitjbGFzcyBfQmFzZVNlbGVjdG9ySW1wbChCYXNlU2VsZWN0b3IpOgorICAgICIiIkJhc2Ugc2VsZWN0b3IgaW1wbGVtZW50YXRpb24uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICMgdGhpcyBtYXBzIGZpbGUgZGVzY3JpcHRvcnMgdG8ga2V5cworICAgICAgICBzZWxmLl9mZF90b19rZXkgPSB7fQorICAgICAgICAjIHJlYWQtb25seSBtYXBwaW5nIHJldHVybmVkIGJ5IGdldF9tYXAoKQorICAgICAgICBzZWxmLl9tYXAgPSBfU2VsZWN0b3JNYXBwaW5nKHNlbGYpCisKKyAgICBkZWYgX2ZpbGVvYmpfbG9va3VwKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJSZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IgZnJvbSBhIGZpbGUgb2JqZWN0LgorCisgICAgICAgIFRoaXMgd3JhcHMgX2ZpbGVvYmpfdG9fZmQoKSB0byBkbyBhbiBleGhhdXN0aXZlIHNlYXJjaCBpbiBjYXNlCisgICAgICAgIHRoZSBvYmplY3QgaXMgaW52YWxpZCBidXQgd2Ugc3RpbGwgaGF2ZSBpdCBpbiBvdXIgbWFwLiAgVGhpcworICAgICAgICBpcyB1c2VkIGJ5IHVucmVnaXN0ZXIoKSBzbyB3ZSBjYW4gdW5yZWdpc3RlciBhbiBvYmplY3QgdGhhdAorICAgICAgICB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIGV2ZW4gaWYgaXQgaXMgY2xvc2VkLiAgSXQgaXMgYWxzbworICAgICAgICB1c2VkIGJ5IF9TZWxlY3Rvck1hcHBpbmcuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gX2ZpbGVvYmpfdG9fZmQoZmlsZW9iaikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAjIERvIGFuIGV4aGF1c3RpdmUgc2VhcmNoLgorICAgICAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9mZF90b19rZXkudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYga2V5LmZpbGVvYmogaXMgZmlsZW9iajoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5mZAorICAgICAgICAgICAgIyBSYWlzZSBWYWx1ZUVycm9yIGFmdGVyIGFsbC4KKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICBpZiAobm90IGV2ZW50cykgb3IgKGV2ZW50cyAmIH4oRVZFTlRfUkVBRCB8IEVWRU5UX1dSSVRFKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGV2ZW50czogeyFyfSIuZm9ybWF0KGV2ZW50cykpCisKKyAgICAgICAga2V5ID0gU2VsZWN0b3JLZXkoZmlsZW9iaiwgc2VsZi5fZmlsZW9ial9sb29rdXAoZmlsZW9iaiksIGV2ZW50cywgZGF0YSkKKworICAgICAgICBpZiBrZXkuZmQgaW4gc2VsZi5fZmRfdG9fa2V5OgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoInshcn0gKEZEIHt9KSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGZpbGVvYmosIGtleS5mZCkpCisKKyAgICAgICAgc2VsZi5fZmRfdG9fa2V5W2tleS5mZF0gPSBrZXkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2ZkX3RvX2tleS5wb3Aoc2VsZi5fZmlsZW9ial9sb29rdXAoZmlsZW9iaikpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgbW9kaWZ5KHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgIyBUT0RPOiBTdWJjbGFzc2VzIGNhbiBwcm9iYWJseSBvcHRpbWl6ZSB0aGlzIGV2ZW4gZnVydGhlci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fZmRfdG9fa2V5W3NlbGYuX2ZpbGVvYmpfbG9va3VwKGZpbGVvYmopXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKyAgICAgICAgaWYgZXZlbnRzICE9IGtleS5ldmVudHM6CisgICAgICAgICAgICBzZWxmLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIGtleSA9IHNlbGYucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICBlbGlmIGRhdGEgIT0ga2V5LmRhdGE6CisgICAgICAgICAgICAjIFVzZSBhIHNob3J0Y3V0IHRvIHVwZGF0ZSB0aGUgZGF0YS4KKyAgICAgICAgICAgIGtleSA9IGtleS5fcmVwbGFjZShkYXRhPWRhdGEpCisgICAgICAgICAgICBzZWxmLl9mZF90b19rZXlba2V5LmZkXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuX2ZkX3RvX2tleS5jbGVhcigpCisKKyAgICBkZWYgZ2V0X21hcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hcAorCisgICAgZGVmIF9rZXlfZnJvbV9mZChzZWxmLCBmZCk6CisgICAgICAgICIiIlJldHVybiB0aGUga2V5IGFzc29jaWF0ZWQgdG8gYSBnaXZlbiBmaWxlIGRlc2NyaXB0b3IuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmQgLS0gZmlsZSBkZXNjcmlwdG9yCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgY29ycmVzcG9uZGluZyBrZXksIG9yIE5vbmUgaWYgbm90IGZvdW5kCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmRfdG9fa2V5W2ZkXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFNlbGVjdFNlbGVjdG9yKF9CYXNlU2VsZWN0b3JJbXBsKToKKyAgICAiIiJTZWxlY3QtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9yZWFkZXJzID0gc2V0KCkKKyAgICAgICAgc2VsZi5fd3JpdGVycyA9IHNldCgpCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRlcnMuYWRkKGtleS5mZCkKKyAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICBzZWxmLl93cml0ZXJzLmFkZChrZXkuZmQpCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgc2VsZi5fcmVhZGVycy5kaXNjYXJkKGtleS5mZCkKKyAgICAgICAgc2VsZi5fd3JpdGVycy5kaXNjYXJkKGtleS5mZCkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIGRlZiBfc2VsZWN0KHNlbGYsIHIsIHcsIF8sIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICByLCB3LCB4ID0gc2VsZWN0LnNlbGVjdChyLCB3LCB3LCB0aW1lb3V0KQorICAgICAgICAgICAgcmV0dXJuIHIsIHcgKyB4LCBbXQorICAgIGVsc2U6CisgICAgICAgIF9zZWxlY3QgPSBzZWxlY3Quc2VsZWN0CisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIHRpbWVvdXQgPSBOb25lIGlmIHRpbWVvdXQgaXMgTm9uZSBlbHNlIG1heCh0aW1lb3V0LCAwKQorICAgICAgICByZWFkeSA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHIsIHcsIF8gPSBzZWxmLl9zZWxlY3Qoc2VsZi5fcmVhZGVycywgc2VsZi5fd3JpdGVycywgW10sIHRpbWVvdXQpCisgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgIHIgPSBzZXQocikKKyAgICAgICAgdyA9IHNldCh3KQorICAgICAgICBmb3IgZmQgaW4gciB8IHc6CisgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICBpZiBmZCBpbiByOgorICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisgICAgICAgICAgICBpZiBmZCBpbiB3OgorICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9XUklURQorCisgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgIHJldHVybiByZWFkeQorCisKK2lmIGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpOgorCisgICAgY2xhc3MgUG9sbFNlbGVjdG9yKF9CYXNlU2VsZWN0b3JJbXBsKToKKyAgICAgICAgIiIiUG9sbC1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgIHNlbGYuX3BvbGwgPSBzZWxlY3QucG9sbCgpCisKKyAgICAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICAgICAgcG9sbF9ldmVudHMgPSAwCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgIHBvbGxfZXZlbnRzIHw9IHNlbGVjdC5QT0xMSU4KKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIHBvbGxfZXZlbnRzIHw9IHNlbGVjdC5QT0xMT1VUCisgICAgICAgICAgICBzZWxmLl9wb2xsLnJlZ2lzdGVyKGtleS5mZCwgcG9sbF9ldmVudHMpCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIHNlbGYuX3BvbGwudW5yZWdpc3RlcihrZXkuZmQpCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBOb25lCisgICAgICAgICAgICBlbGlmIHRpbWVvdXQgPD0gMDoKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHBvbGwoKSBoYXMgYSByZXNvbHV0aW9uIG9mIDEgbWlsbGlzZWNvbmQsIHJvdW5kIGF3YXkgZnJvbQorICAgICAgICAgICAgICAgICMgemVybyB0byB3YWl0ICphdCBsZWFzdCogdGltZW91dCBzZWNvbmRzLgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBtYXRoLmNlaWwodGltZW91dCAqIDFlMykKKyAgICAgICAgICAgIHJlYWR5ID0gW10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZF9ldmVudF9saXN0ID0gc2VsZi5fcG9sbC5wb2xsKHRpbWVvdXQpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhZHkKKyAgICAgICAgICAgIGZvciBmZCwgZXZlbnQgaW4gZmRfZXZlbnRfbGlzdDoKKyAgICAgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgJiB+c2VsZWN0LlBPTExJTjoKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1dSSVRFCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgJiB+c2VsZWN0LlBPTExPVVQ6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgICAgICBpZiBrZXk6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZCgoa2V5LCBldmVudHMgJiBrZXkuZXZlbnRzKSkKKyAgICAgICAgICAgIHJldHVybiByZWFkeQorCisKK2lmIGhhc2F0dHIoc2VsZWN0LCAnZXBvbGwnKToKKworICAgIGNsYXNzIEVwb2xsU2VsZWN0b3IoX0Jhc2VTZWxlY3RvckltcGwpOgorICAgICAgICAiIiJFcG9sbC1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgIHNlbGYuX2Vwb2xsID0gc2VsZWN0LmVwb2xsKCkKKworICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Vwb2xsLmZpbGVubygpCisKKyAgICAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICAgICAgZXBvbGxfZXZlbnRzID0gMAorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBlcG9sbF9ldmVudHMgfD0gc2VsZWN0LkVQT0xMSU4KKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIGVwb2xsX2V2ZW50cyB8PSBzZWxlY3QuRVBPTExPVVQKKyAgICAgICAgICAgIHNlbGYuX2Vwb2xsLnJlZ2lzdGVyKGtleS5mZCwgZXBvbGxfZXZlbnRzKQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXBvbGwudW5yZWdpc3RlcihrZXkuZmQpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgRkQgd2FzIGNsb3NlZCBzaW5jZSBpdAorICAgICAgICAgICAgICAgICMgd2FzIHJlZ2lzdGVyZWQuCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gLTEKKyAgICAgICAgICAgIGVsaWYgdGltZW91dCA8PSAwOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgZXBvbGxfd2FpdCgpIGhhcyBhIHJlc29sdXRpb24gb2YgMSBtaWxsaXNlY29uZCwgcm91bmQgYXdheQorICAgICAgICAgICAgICAgICMgZnJvbSB6ZXJvIHRvIHdhaXQgKmF0IGxlYXN0KiB0aW1lb3V0IHNlY29uZHMuCisgICAgICAgICAgICAgICAgdGltZW91dCA9IG1hdGguY2VpbCh0aW1lb3V0ICogMWUzKSAqIDFlLTMKKyAgICAgICAgICAgIG1heF9ldiA9IGxlbihzZWxmLl9mZF90b19rZXkpCisgICAgICAgICAgICByZWFkeSA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRfZXZlbnRfbGlzdCA9IHNlbGYuX2Vwb2xsLnBvbGwodGltZW91dCwgbWF4X2V2KQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgICAgICBmb3IgZmQsIGV2ZW50IGluIGZkX2V2ZW50X2xpc3Q6CisgICAgICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5FUE9MTElOOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfV1JJVEUKKyAgICAgICAgICAgICAgICBpZiBldmVudCAmIH5zZWxlY3QuRVBPTExPVVQ6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgICAgICBpZiBrZXk6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZCgoa2V5LCBldmVudHMgJiBrZXkuZXZlbnRzKSkKKyAgICAgICAgICAgIHJldHVybiByZWFkeQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2Vwb2xsLmNsb3NlKCkKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisKK2lmIGhhc2F0dHIoc2VsZWN0LCAna3F1ZXVlJyk6CisKKyAgICBjbGFzcyBLcXVldWVTZWxlY3RvcihfQmFzZVNlbGVjdG9ySW1wbCk6CisgICAgICAgICIiIktxdWV1ZS1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgIHNlbGYuX2txdWV1ZSA9IHNlbGVjdC5rcXVldWUoKQorCisgICAgICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fa3F1ZXVlLmZpbGVubygpCisKKyAgICAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0FERCkKKyAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIGtldiA9IHNlbGVjdC5rZXZlbnQoa2V5LmZkLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0FERCkKKyAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAgaWYga2V5LmV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAga2V2ID0gc2VsZWN0LmtldmVudChrZXkuZmQsIHNlbGVjdC5LUV9GSUxURVJfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9ERUxFVEUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIEZEIHdhcyBjbG9zZWQgc2luY2UgaXQKKyAgICAgICAgICAgICAgICAgICAgIyB3YXMgcmVnaXN0ZXJlZC4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYga2V5LmV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIGtldiA9IHNlbGVjdC5rZXZlbnQoa2V5LmZkLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0RFTEVURSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2txdWV1ZS5jb250cm9sKFtrZXZdLCAwLCAwKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAjIFNlZSBjb21tZW50IGFib3ZlLgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdGltZW91dCA9IE5vbmUgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbWF4KHRpbWVvdXQsIDApCisgICAgICAgICAgICBtYXhfZXYgPSBsZW4oc2VsZi5fZmRfdG9fa2V5KQorICAgICAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtldl9saXN0ID0gc2VsZi5fa3F1ZXVlLmNvbnRyb2woTm9uZSwgbWF4X2V2LCB0aW1lb3V0KQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgICAgICBmb3Iga2V2IGluIGtldl9saXN0OgorICAgICAgICAgICAgICAgIGZkID0ga2V2LmlkZW50CisgICAgICAgICAgICAgICAgZmxhZyA9IGtldi5maWx0ZXIKKyAgICAgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICAgICAgaWYgZmxhZyA9PSBzZWxlY3QuS1FfRklMVEVSX1JFQUQ6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisgICAgICAgICAgICAgICAgaWYgZmxhZyA9PSBzZWxlY3QuS1FfRklMVEVSX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfV1JJVEUKKworICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuX2tleV9mcm9tX2ZkKGZkKQorICAgICAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKChrZXksIGV2ZW50cyAmIGtleS5ldmVudHMpKQorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisKKyMgQ2hvb3NlIHRoZSBiZXN0IGltcGxlbWVudGF0aW9uOiByb3VnaGx5LCBlcG9sbHxrcXVldWUgPiBwb2xsID4gc2VsZWN0LgorIyBzZWxlY3QoKSBhbHNvIGNhbid0IGFjY2VwdCBhIEZEID4gRkRfU0VUU0laRSAodXN1YWxseSBhcm91bmQgMTAyNCkKK2lmICdLcXVldWVTZWxlY3RvcicgaW4gZ2xvYmFscygpOgorICAgIERlZmF1bHRTZWxlY3RvciA9IEtxdWV1ZVNlbGVjdG9yCitlbGlmICdFcG9sbFNlbGVjdG9yJyBpbiBnbG9iYWxzKCk6CisgICAgRGVmYXVsdFNlbGVjdG9yID0gRXBvbGxTZWxlY3RvcgorZWxpZiAnUG9sbFNlbGVjdG9yJyBpbiBnbG9iYWxzKCk6CisgICAgRGVmYXVsdFNlbGVjdG9yID0gUG9sbFNlbGVjdG9yCitlbHNlOgorICAgIERlZmF1bHRTZWxlY3RvciA9IFNlbGVjdFNlbGVjdG9yCmRpZmYgLS1naXQgYS9MaWIvc2hlbHZlLnB5IGIvTGliL3NoZWx2ZS5weQppbmRleCBjYzE4MTVlLi5jZWY1ODBlIDEwMDY0NAotLS0gYS9MaWIvc2hlbHZlLnB5CisrKyBiL0xpYi9zaGVsdmUucHkKQEAgLTYxLDcgKzYxLDcgQEAKIAogaW1wb3J0IGNvbGxlY3Rpb25zCiAKLV9fYWxsX18gPSBbIlNoZWxmIiwiQnNkRGJTaGVsZiIsIkRiZmlsZW5hbWVTaGVsZiIsIm9wZW4iXQorX19hbGxfXyA9IFsiU2hlbGYiLCAiQnNkRGJTaGVsZiIsICJEYmZpbGVuYW1lU2hlbGYiLCAib3BlbiJdCiAKIGNsYXNzIF9DbG9zZWREaWN0KGNvbGxlY3Rpb25zLk11dGFibGVNYXBwaW5nKToKICAgICAnTWFya2VyIGZvciBhIGNsb3NlZCBkaWN0LiAgQWNjZXNzIGF0dGVtcHRzIHJhaXNlIGEgVmFsdWVFcnJvci4nCkBAIC0xMzEsNiArMTMxLDEyIEBACiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLnN5bmMoKQogICAgICAgICB0cnk6CkBAIC0xNDcsNiArMTUzLDcgQEAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ3dyaXRlYmFjaycpOgogICAgICAgICAgICAgIyBfX2luaXRfXyBkaWRuJ3Qgc3VjY2VlZCwgc28gZG9uJ3QgYm90aGVyIGNsb3NpbmcKKyAgICAgICAgICAgICMgc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzM5MDA3IGZvciBkZXRhaWxzCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0xpYi9zaHV0aWwucHkgYi9MaWIvc2h1dGlsLnB5CmluZGV4IDVhNGQ0ZjYuLjBjZDZlYzQgMTAwNjQ0Ci0tLSBhL0xpYi9zaHV0aWwucHkKKysrIGIvTGliL3NodXRpbC5weQpAQCAtMzksMTcgKzM5LDIwIEBACiAgICAgICAgICAgICJpZ25vcmVfcGF0dGVybnMiLCAiY2hvd24iLCAid2hpY2giXQogICAgICAgICAgICAjIGRpc2tfdXNhZ2UgaXMgYWRkZWQgbGF0ZXIsIGlmIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0KIAotY2xhc3MgRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBFcnJvcihPU0Vycm9yKToKICAgICBwYXNzCiAKLWNsYXNzIFNwZWNpYWxGaWxlRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBTYW1lRmlsZUVycm9yKEVycm9yKToKKyAgICAiIiJSYWlzZWQgd2hlbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLiIiIgorCitjbGFzcyBTcGVjaWFsRmlsZUVycm9yKE9TRXJyb3IpOgogICAgICIiIlJhaXNlZCB3aGVuIHRyeWluZyB0byBkbyBhIGtpbmQgb2Ygb3BlcmF0aW9uIChlLmcuIGNvcHlpbmcpIHdoaWNoIGlzCiAgICAgbm90IHN1cHBvcnRlZCBvbiBhIHNwZWNpYWwgZmlsZSAoZS5nLiBhIG5hbWVkIHBpcGUpIiIiCiAKLWNsYXNzIEV4ZWNFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIEV4ZWNFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhIGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIiIiCiAKLWNsYXNzIFJlYWRFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIFJlYWRFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhbiBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIiIiCiAKIGNsYXNzIFJlZ2lzdHJ5RXJyb3IoRXhjZXB0aW9uKToKQEAgLTU3LDExICs2MCw2IEBACiAgICAgYW5kIHVucGFja2luZyByZWdpc3RlcmllcyBmYWlscyIiIgogCiAKLXRyeToKLSAgICBXaW5kb3dzRXJyb3IKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgV2luZG93c0Vycm9yID0gTm9uZQotCiBkZWYgY29weWZpbGVvYmooZnNyYywgZmRzdCwgbGVuZ3RoPTE2KjEwMjQpOgogICAgICIiImNvcHkgZGF0YSBmcm9tIGZpbGUtbGlrZSBvYmplY3QgZnNyYyB0byBmaWxlLWxpa2Ugb2JqZWN0IGZkc3QiIiIKICAgICB3aGlsZSAxOgpAQCAtOTAsNyArODgsNyBAQAogCiAgICAgIiIiCiAgICAgaWYgX3NhbWVmaWxlKHNyYywgZHN0KToKLSAgICAgICAgcmFpc2UgRXJyb3IoImAlc2AgYW5kIGAlc2AgYXJlIHRoZSBzYW1lIGZpbGUiICUgKHNyYywgZHN0KSkKKyAgICAgICAgcmFpc2UgU2FtZUZpbGVFcnJvcigieyFyfSBhbmQgeyFyfSBhcmUgdGhlIHNhbWUgZmlsZSIuZm9ybWF0KHNyYywgZHN0KSkKIAogICAgIGZvciBmbiBpbiBbc3JjLCBkc3RdOgogICAgICAgICB0cnk6CkBAIC0yMjEsNiArMjE5LDkgQEAKICAgICBJZiBmb2xsb3dfc3ltbGlua3MgaXMgZmFsc2UsIHN5bWxpbmtzIHdvbid0IGJlIGZvbGxvd2VkLiBUaGlzCiAgICAgcmVzZW1ibGVzIEdOVSdzICJjcCAtUCBzcmMgZHN0Ii4KIAorICAgIElmIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUsIGEgU2FtZUZpbGVFcnJvciB3aWxsIGJlCisgICAgcmFpc2VkLgorCiAgICAgIiIiCiAgICAgaWYgb3MucGF0aC5pc2Rpcihkc3QpOgogICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZHN0LCBvcy5wYXRoLmJhc2VuYW1lKHNyYykpCkBAIC0zMjksMTUgKzMzMCwxMyBAQAogICAgICAgICAjIGNvbnRpbnVlIHdpdGggb3RoZXIgZmlsZXMKICAgICAgICAgZXhjZXB0IEVycm9yIGFzIGVycjoKICAgICAgICAgICAgIGVycm9ycy5leHRlbmQoZXJyLmFyZ3NbMF0pCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjbmFtZSwgZHN0bmFtZSwgc3RyKHdoeSkpKQogICAgIHRyeToKICAgICAgICAgY29weXN0YXQoc3JjLCBkc3QpCiAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgotICAgICAgICBpZiBXaW5kb3dzRXJyb3IgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2Uod2h5LCBXaW5kb3dzRXJyb3IpOgotICAgICAgICAgICAgIyBDb3B5aW5nIGZpbGUgYWNjZXNzIHRpbWVzIG1heSBmYWlsIG9uIFdpbmRvd3MKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKKyAgICAgICAgIyBDb3B5aW5nIGZpbGUgYWNjZXNzIHRpbWVzIG1heSBmYWlsIG9uIFdpbmRvd3MKKyAgICAgICAgaWYgd2h5LndpbmVycm9yIGlzIE5vbmU6CiAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKChzcmMsIGRzdCwgc3RyKHdoeSkpKQogICAgIGlmIGVycm9yczoKICAgICAgICAgcmFpc2UgRXJyb3IoZXJyb3JzKQpAQCAtMzU2LDI0ICszNTUsMjQgQEAKICAgICBuYW1lcyA9IFtdCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIG9uZXJyb3Iob3MubGlzdGRpciwgcGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1vZGUgPSBvcy5sc3RhdChmdWxsbmFtZSkuc3RfbW9kZQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbW9kZSA9IDAKICAgICAgICAgaWYgc3RhdC5TX0lTRElSKG1vZGUpOgogICAgICAgICAgICAgX3JtdHJlZV91bnNhZmUoZnVsbG5hbWUsIG9uZXJyb3IpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZ1bGxuYW1lKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgb25lcnJvcihvcy51bmxpbmssIGZ1bGxuYW1lLCBzeXMuZXhjX2luZm8oKSkKICAgICB0cnk6CiAgICAgICAgIG9zLnJtZGlyKHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBvbmVycm9yKG9zLnJtZGlyLCBwYXRoLCBzeXMuZXhjX2luZm8oKSkKIAogIyBWZXJzaW9uIHVzaW5nIGZkLWJhc2VkIEFQSXMgdG8gcHJvdGVjdCBhZ2FpbnN0IHJhY2VzCkBAIC00NjQsNyArNDYzLDcgQEAKICAgICAgICAgICAgICAgICBfcm10cmVlX3NhZmVfZmQoZmQsIHBhdGgsIG9uZXJyb3IpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihwYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihvcy5ybWRpciwgcGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi9zaXRlLnB5IGIvTGliL3NpdGUucHkKaW5kZXggN2UwOTcwMS4uNGZiMTA1OCAxMDA2NDQKLS0tIGEvTGliL3NpdGUucHkKKysrIGIvTGliL3NpdGUucHkKQEAgLTU4LDE3ICs1OCwyMCBAQAogYmVjYXVzZSBiYXIucHRoIGNvbWVzIGFscGhhYmV0aWNhbGx5IGJlZm9yZSBmb28ucHRoOyBhbmQgc3BhbSBpcwogb21pdHRlZCBiZWNhdXNlIGl0IGlzIG5vdCBtZW50aW9uZWQgaW4gZWl0aGVyIHBhdGggY29uZmlndXJhdGlvbiBmaWxlLgogCi1BZnRlciB0aGVzZSBwYXRoIG1hbmlwdWxhdGlvbnMsIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBpbXBvcnQgYSBtb2R1bGUKK1RoZSByZWFkbGluZSBtb2R1bGUgaXMgYWxzbyBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQgdG8gZW5hYmxlCitjb21wbGV0aW9uIGZvciBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdC4gIFRoaXMgY2FuIGJlIG92ZXJyaWRlbiBpbgorc2l0ZWN1c3RvbWl6ZSwgdXNlcmN1c3RvbWl6ZSBvciBQWVRIT05TVEFSVFVQLgorCitBZnRlciB0aGVzZSBvcGVyYXRpb25zLCBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gaW1wb3J0IGEgbW9kdWxlCiBuYW1lZCBzaXRlY3VzdG9taXplLCB3aGljaCBjYW4gcGVyZm9ybSBhcmJpdHJhcnkgYWRkaXRpb25hbAogc2l0ZS1zcGVjaWZpYyBjdXN0b21pemF0aW9ucy4gIElmIHRoaXMgaW1wb3J0IGZhaWxzIHdpdGggYW4KIEltcG9ydEVycm9yIGV4Y2VwdGlvbiwgaXQgaXMgc2lsZW50bHkgaWdub3JlZC4KLQogIiIiCiAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwotaW1wb3J0IHJlCiBpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCBfc2l0ZWJ1aWx0aW5zCiAKICMgUHJlZml4ZXMgZm9yIHNpdGUtcGFja2FnZXM7IGFkZCBhZGRpdGlvbmFsIHByZWZpeGVzIGxpa2UgL3Vzci9sb2NhbCBoZXJlCiBQUkVGSVhFUyA9IFtzeXMucHJlZml4LCBzeXMuZXhlY19wcmVmaXhdCkBAIC0xNDYsMTQgKzE0OSwxNCBAQAogICAgICAgIGFuZCBhZGQgdGhhdCB0byBrbm93bl9wYXRocywgb3IgZXhlY3V0ZSBpdCBpZiBpdCBzdGFydHMgd2l0aCAnaW1wb3J0ICcuCiAgICAgIiIiCiAgICAgaWYga25vd25fcGF0aHMgaXMgTm9uZToKLSAgICAgICAgX2luaXRfcGF0aGluZm8oKQorICAgICAgICBrbm93bl9wYXRocyA9IF9pbml0X3BhdGhpbmZvKCkKICAgICAgICAgcmVzZXQgPSAxCiAgICAgZWxzZToKICAgICAgICAgcmVzZXQgPSAwCiAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oc2l0ZWRpciwgbmFtZSkKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZ1bGxuYW1lLCAiciIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybgogICAgIHdpdGggZjoKICAgICAgICAgZm9yIG4sIGxpbmUgaW4gZW51bWVyYXRlKGYpOgpAQCAtMTk2LDcgKzE5OSw3IEBACiAgICAgICAgIGtub3duX3BhdGhzLmFkZChzaXRlZGlyY2FzZSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzaXRlZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuCiAgICAgbmFtZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBuYW1lcyBpZiBuYW1lLmVuZHN3aXRoKCIucHRoIildCiAgICAgZm9yIG5hbWUgaW4gc29ydGVkKG5hbWVzKToKQEAgLTMwMCw5ICszMDMsNyBAQAogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgc2Vlbi5hZGQocHJlZml4KQogCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikpCi0gICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKyAgICAgICAgaWYgb3Muc2VwID09ICcvJzoKICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKQEAgLTMyNSwyNyArMzI2LDE1IEBACiAgICAgIiIiQWRkIHNpdGUtcGFja2FnZXMgKGFuZCBwb3NzaWJseSBzaXRlLXB5dGhvbikgdG8gc3lzLnBhdGgiIiIKICAgICBmb3Igc2l0ZWRpciBpbiBnZXRzaXRlcGFja2FnZXMocHJlZml4ZXMpOgogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNpdGVkaXIpOgorICAgICAgICAgICAgaWYgInNpdGUtcHl0aG9uIiBpbiBzaXRlZGlyOgorICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJyJzaXRlLXB5dGhvbiIgZGlyZWN0b3JpZXMgd2lsbCBub3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1cHBvcnRlZCBpbiAzLjUgYW55bW9yZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICBhZGRzaXRlZGlyKHNpdGVkaXIsIGtub3duX3BhdGhzKQogCiAgICAgcmV0dXJuIGtub3duX3BhdGhzCiAKLWRlZiBzZXRCRUdJTkxJQlBBVEgoKToKLSAgICAiIiJUaGUgT1MvMiBFTVggcG9ydCBoYXMgb3B0aW9uYWwgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBkbyBkb3VibGUgZHV0eQotICAgIGFzIERMTHMgKGFuZCBtdXN0IHVzZSB0aGUgLkRMTCBmaWxlIGV4dGVuc2lvbikgZm9yIG90aGVyIGV4dGVuc2lvbnMuCi0gICAgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggbmVlZHMgdG8gYmUgYW1lbmRlZCBzbyB0aGVzZSB3aWxsIGJlIGZvdW5kCi0gICAgZHVyaW5nIG1vZHVsZSBpbXBvcnQuICBVc2UgQkVHSU5MSUJQQVRIIHNvIHRoYXQgdGhlc2UgYXJlIGF0IHRoZSBzdGFydAotICAgIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoLgotCi0gICAgIiIiCi0gICAgZGxscGF0aCA9IG9zLnBhdGguam9pbihzeXMucHJlZml4LCAiTGliIiwgImxpYi1keW5sb2FkIikKLSAgICBsaWJwYXRoID0gb3MuZW52aXJvblsnQkVHSU5MSUJQQVRIJ10uc3BsaXQoJzsnKQotICAgIGlmIGxpYnBhdGhbLTFdOgotICAgICAgICBsaWJwYXRoLmFwcGVuZChkbGxwYXRoKQotICAgIGVsc2U6Ci0gICAgICAgIGxpYnBhdGhbLTFdID0gZGxscGF0aAotICAgIG9zLmVudmlyb25bJ0JFR0lOTElCUEFUSCddID0gJzsnLmpvaW4obGlicGF0aCkKLQotCiBkZWYgc2V0cXVpdCgpOgogICAgICIiIkRlZmluZSBuZXcgYnVpbHRpbnMgJ3F1aXQnIGFuZCAnZXhpdCcuCiAKQEAgLTM2MCwxMjYgKzM0OSw4OSBAQAogICAgIGVsc2U6CiAgICAgICAgIGVvZiA9ICdDdHJsLUQgKGkuZS4gRU9GKScKIAotICAgIGNsYXNzIFF1aXR0ZXIob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gJ1VzZSAlcygpIG9yICVzIHRvIGV4aXQnICUgKHNlbGYubmFtZSwgZW9mKQotICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgY29kZT1Ob25lKToKLSAgICAgICAgICAgICMgU2hlbGxzIGxpa2UgSURMRSBjYXRjaCB0aGUgU3lzdGVtRXhpdCwgYnV0IGxpc3RlbiB3aGVuIHRoZWlyCi0gICAgICAgICAgICAjIHN0ZGluIHdyYXBwZXIgaXMgY2xvc2VkLgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChjb2RlKQotICAgIGJ1aWx0aW5zLnF1aXQgPSBRdWl0dGVyKCdxdWl0JykKLSAgICBidWlsdGlucy5leGl0ID0gUXVpdHRlcignZXhpdCcpCisgICAgYnVpbHRpbnMucXVpdCA9IF9zaXRlYnVpbHRpbnMuUXVpdHRlcigncXVpdCcsIGVvZikKKyAgICBidWlsdGlucy5leGl0ID0gX3NpdGVidWlsdGlucy5RdWl0dGVyKCdleGl0JywgZW9mKQogCiAKLWNsYXNzIF9QcmludGVyKG9iamVjdCk6Ci0gICAgIiIiaW50ZXJhY3RpdmUgcHJvbXB0IG9iamVjdHMgZm9yIHByaW50aW5nIHRoZSBsaWNlbnNlIHRleHQsIGEgbGlzdCBvZgotICAgIGNvbnRyaWJ1dG9ycyBhbmQgdGhlIGNvcHlyaWdodCBub3RpY2UuIiIiCi0KLSAgICBNQVhMSU5FUyA9IDIzCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZGF0YSwgZmlsZXM9KCksIGRpcnM9KCkpOgotICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5fX2RhdGEgPSBkYXRhCi0gICAgICAgIHNlbGYuX19maWxlcyA9IGZpbGVzCi0gICAgICAgIHNlbGYuX19kaXJzID0gZGlycwotICAgICAgICBzZWxmLl9fbGluZXMgPSBOb25lCi0KLSAgICBkZWYgX19zZXR1cChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fX2xpbmVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGRhdGEgPSBOb25lCi0gICAgICAgIGZvciBkaXIgaW4gc2VsZi5fX2RpcnM6Ci0gICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5fX2ZpbGVzOgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGRpciwgZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICJyIikKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQotICAgICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGlmIGRhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fX2RhdGEKLSAgICAgICAgc2VsZi5fX2xpbmVzID0gZGF0YS5zcGxpdCgnXG4nKQotICAgICAgICBzZWxmLl9fbGluZWNudCA9IGxlbihzZWxmLl9fbGluZXMpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX19zZXR1cCgpCi0gICAgICAgIGlmIGxlbihzZWxmLl9fbGluZXMpIDw9IHNlbGYuTUFYTElORVM6Ci0gICAgICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNlbGYuX19saW5lcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAiVHlwZSAlcygpIHRvIHNlZSB0aGUgZnVsbCAlcyB0ZXh0IiAlICgoc2VsZi5fX25hbWUsKSoyKQotCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9fc2V0dXAoKQotICAgICAgICBwcm9tcHQgPSAnSGl0IFJldHVybiBmb3IgbW9yZSwgb3IgcSAoYW5kIFJldHVybikgdG8gcXVpdDogJwotICAgICAgICBsaW5lbm8gPSAwCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGluZW5vLCBsaW5lbm8gKyBzZWxmLk1BWExJTkVTKToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoc2VsZi5fX2xpbmVzW2ldKQotICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbGluZW5vICs9IHNlbGYuTUFYTElORVMKLSAgICAgICAgICAgICAgICBrZXkgPSBOb25lCi0gICAgICAgICAgICAgICAgd2hpbGUga2V5IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IGlucHV0KHByb21wdCkKLSAgICAgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiAoJycsICdxJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBOb25lCi0gICAgICAgICAgICAgICAgaWYga2V5ID09ICdxJzoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLQogZGVmIHNldGNvcHlyaWdodCgpOgogICAgICIiIlNldCAnY29weXJpZ2h0JyBhbmQgJ2NyZWRpdHMnIGluIGJ1aWx0aW5zIiIiCi0gICAgYnVpbHRpbnMuY29weXJpZ2h0ID0gX1ByaW50ZXIoImNvcHlyaWdodCIsIHN5cy5jb3B5cmlnaHQpCisgICAgYnVpbHRpbnMuY29weXJpZ2h0ID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigiY29weXJpZ2h0Iiwgc3lzLmNvcHlyaWdodCkKICAgICBpZiBzeXMucGxhdGZvcm1bOjRdID09ICdqYXZhJzoKLSAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9QcmludGVyKAorICAgICAgICBidWlsdGlucy5jcmVkaXRzID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigKICAgICAgICAgICAgICJjcmVkaXRzIiwKICAgICAgICAgICAgICJKeXRob24gaXMgbWFpbnRhaW5lZCBieSB0aGUgSnl0aG9uIGRldmVsb3BlcnMgKHd3dy5qeXRob24ub3JnKS4iKQogICAgIGVsc2U6Ci0gICAgICAgIGJ1aWx0aW5zLmNyZWRpdHMgPSBfUHJpbnRlcigiY3JlZGl0cyIsICIiIlwKKyAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9zaXRlYnVpbHRpbnMuX1ByaW50ZXIoImNyZWRpdHMiLCAiIiJcCiAgICAgVGhhbmtzIHRvIENXSSwgQ05SSSwgQmVPcGVuLmNvbSwgWm9wZSBDb3Jwb3JhdGlvbiBhbmQgYSBjYXN0IG9mIHRob3VzYW5kcwogICAgIGZvciBzdXBwb3J0aW5nIFB5dGhvbiBkZXZlbG9wbWVudC4gIFNlZSB3d3cucHl0aG9uLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIiIpCiAgICAgaGVyZSA9IG9zLnBhdGguZGlybmFtZShvcy5fX2ZpbGVfXykKLSAgICBidWlsdGlucy5saWNlbnNlID0gX1ByaW50ZXIoCisgICAgYnVpbHRpbnMubGljZW5zZSA9IF9zaXRlYnVpbHRpbnMuX1ByaW50ZXIoCiAgICAgICAgICJsaWNlbnNlIiwKLSAgICAgICAgIlNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvJS41cy9saWNlbnNlLyIgJSBzeXMudmVyc2lvbiwKKyAgICAgICAgIlNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvJS41cy9saWNlbnNlIiAlIHN5cy52ZXJzaW9uLAogICAgICAgICBbIkxJQ0VOU0UudHh0IiwgIkxJQ0VOU0UiXSwKICAgICAgICAgW29zLnBhdGguam9pbihoZXJlLCBvcy5wYXJkaXIpLCBoZXJlLCBvcy5jdXJkaXJdKQogCiAKLWNsYXNzIF9IZWxwZXIob2JqZWN0KToKLSAgICAiIiJEZWZpbmUgdGhlIGJ1aWx0aW4gJ2hlbHAnLgotICAgIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBweWRvYy5oZWxwICh3aXRoIGEgdHdpc3QpLgotCi0gICAgIiIiCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiVHlwZSBoZWxwKCkgZm9yIGludGVyYWN0aXZlIGhlbHAsICIgXAotICAgICAgICAgICAgICAgIm9yIGhlbHAob2JqZWN0KSBmb3IgaGVscCBhYm91dCBvYmplY3QuIgotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgaW1wb3J0IHB5ZG9jCi0gICAgICAgIHJldHVybiBweWRvYy5oZWxwKCphcmdzLCAqKmt3ZHMpCi0KIGRlZiBzZXRoZWxwZXIoKToKLSAgICBidWlsdGlucy5oZWxwID0gX0hlbHBlcigpCisgICAgYnVpbHRpbnMuaGVscCA9IF9zaXRlYnVpbHRpbnMuX0hlbHBlcigpCisKK2RlZiBlbmFibGVybGNvbXBsZXRlcigpOgorICAgICIiIkVuYWJsZSBkZWZhdWx0IHJlYWRsaW5lIGNvbmZpZ3VyYXRpb24gb24gaW50ZXJhY3RpdmUgcHJvbXB0cywgYnkKKyAgICByZWdpc3RlcmluZyBhIHN5cy5fX2ludGVyYWN0aXZlaG9va19fLgorCisgICAgSWYgdGhlIHJlYWRsaW5lIG1vZHVsZSBjYW4gYmUgaW1wb3J0ZWQsIHRoZSBob29rIHdpbGwgc2V0IHRoZSBUYWIga2V5CisgICAgYXMgY29tcGxldGlvbiBrZXkgYW5kIHJlZ2lzdGVyIH4vLnB5dGhvbl9oaXN0b3J5IGFzIGhpc3RvcnkgZmlsZS4KKyAgICBUaGlzIGNhbiBiZSBvdmVycmlkZW4gaW4gdGhlIHNpdGVjdXN0b21pemUgb3IgdXNlcmN1c3RvbWl6ZSBtb2R1bGUsCisgICAgb3IgaW4gYSBQWVRIT05TVEFSVFVQIGZpbGUuCisgICAgIiIiCisgICAgZGVmIHJlZ2lzdGVyX3JlYWRsaW5lKCk6CisgICAgICAgIGltcG9ydCBhdGV4aXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHJlYWRsaW5lCisgICAgICAgICAgICBpbXBvcnQgcmxjb21wbGV0ZXIKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBSZWFkaW5nIHRoZSBpbml0aWFsaXphdGlvbiAoY29uZmlnKSBmaWxlIG1heSBub3QgYmUgZW5vdWdoIHRvIHNldCBhCisgICAgICAgICMgY29tcGxldGlvbiBrZXksIHNvIHdlIHNldCBvbmUgZmlyc3QgYW5kIHRoZW4gcmVhZCB0aGUgZmlsZS4KKyAgICAgICAgcmVhZGxpbmVfZG9jID0gZ2V0YXR0cihyZWFkbGluZSwgJ19fZG9jX18nLCAnJykKKyAgICAgICAgaWYgcmVhZGxpbmVfZG9jIGlzIG5vdCBOb25lIGFuZCAnbGliZWRpdCcgaW4gcmVhZGxpbmVfZG9jOgorICAgICAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ2JpbmQgXkkgcmxfY29tcGxldGUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ3RhYjogY29tcGxldGUnKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRsaW5lLnJlYWRfaW5pdF9maWxlKCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAjIEFuIE9TRXJyb3IgaGVyZSBjb3VsZCBoYXZlIG1hbnkgY2F1c2VzLCBidXQgdGhlIG1vc3QgbGlrZWx5IG9uZQorICAgICAgICAgICAgIyBpcyB0aGF0IHRoZXJlJ3Mgbm8gLmlucHV0cmMgZmlsZSAob3IgLmVkaXRyYyBmaWxlIGluIHRoZSBjYXNlIG9mCisgICAgICAgICAgICAjIE1hYyBPUyBYICsgbGliZWRpdCkgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiAgSW4gdGhhdCBjYXNlLCB3ZQorICAgICAgICAgICAgIyB3YW50IHRvIGlnbm9yZSB0aGUgZXhjZXB0aW9uLgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHJlYWRsaW5lLmdldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3RoKCkgPT0gMDoKKyAgICAgICAgICAgICMgSWYgbm8gaGlzdG9yeSB3YXMgbG9hZGVkLCBkZWZhdWx0IHRvIC5weXRob25faGlzdG9yeS4KKyAgICAgICAgICAgICMgVGhlIGd1YXJkIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBkb3VibGluZyBoaXN0b3J5IHNpemUgYXQKKyAgICAgICAgICAgICMgZWFjaCBpbnRlcnByZXRlciBleGl0IHdoZW4gcmVhZGxpbmUgd2FzIGFscmVhZHkgY29uZmlndXJlZAorICAgICAgICAgICAgIyB0aHJvdWdoIGEgUFlUSE9OU1RBUlRVUCBob29rLCBzZWU6CisgICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU1ODQ1I21zZzE5ODYzNgorICAgICAgICAgICAgaGlzdG9yeSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5weXRob25faGlzdG9yeScpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdG9yeSkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihyZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUsIGhpc3RvcnkpCisKKyAgICBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfXyA9IHJlZ2lzdGVyX3JlYWRsaW5lCiAKIGRlZiBhbGlhc21iY3MoKToKICAgICAiIiJPbiBXaW5kb3dzLCBzb21lIGRlZmF1bHQgZW5jb2RpbmdzIGFyZSBub3QgcHJvdmlkZWQgYnkgUHl0aG9uLAogICAgIHdoaWxlIHRoZXkgYXJlIGFsd2F5cyBhdmFpbGFibGUgYXMgIm1iY3MiIGluIGVhY2ggbG9jYWxlLiBNYWtlCiAgICAgdGhlbSB1c2FibGUgYnkgYWxpYXNpbmcgdG8gIm1iY3MiIGluIHN1Y2ggYSBjYXNlLiIiIgogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICBpbXBvcnQgbG9jYWxlLCBjb2RlY3MKLSAgICAgICAgZW5jID0gbG9jYWxlLmdldGRlZmF1bHRsb2NhbGUoKVsxXQorICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUsIGNvZGVjcworICAgICAgICBlbmMgPSBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKICAgICAgICAgaWYgZW5jLnN0YXJ0c3dpdGgoJ2NwJyk6ICAgICAgICAgICAgIyAiY3AqKioiID8KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjb2RlY3MubG9va3VwKGVuYykKQEAgLTQ4OCw4ICs0NDAsNyBAQAogICAgICAgICAgICAgICAgIGVuY29kaW5ncy5fY2FjaGVbZW5jXSA9IGVuY29kaW5ncy5fdW5rbm93bgogICAgICAgICAgICAgICAgIGVuY29kaW5ncy5hbGlhc2VzLmFsaWFzZXNbZW5jXSA9ICdtYmNzJwogCi0KLUNPTkZJR19MSU5FID0gcmUuY29tcGlsZShyJ14oP1A8a2V5Pihcd3xbLV9dKSspXHMqPVxzKig/UDx2YWx1ZT4uKilccyokJykKK0NPTkZJR19MSU5FID0gcideKD9QPGtleT4oXHd8Wy1fXSkrKVxzKj1ccyooP1A8dmFsdWU+LiopXHMqJCcKIAogZGVmIHZlbnYoa25vd25fcGF0aHMpOgogICAgIGdsb2JhbCBQUkVGSVhFUywgRU5BQkxFX1VTRVJfU0lURQpAQCAtNTEyLDEyICs0NjMsMTQgQEAKICAgICAgICAgXQogCiAgICAgaWYgY2FuZGlkYXRlX2NvbmZzOgorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgY29uZmlnX2xpbmUgPSByZS5jb21waWxlKENPTkZJR19MSU5FKQogICAgICAgICB2aXJ0dWFsX2NvbmYgPSBjYW5kaWRhdGVfY29uZnNbMF0KICAgICAgICAgc3lzdGVtX3NpdGUgPSAidHJ1ZSIKICAgICAgICAgd2l0aCBvcGVuKHZpcnR1YWxfY29uZikgYXMgZjoKICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgIG0gPSBDT05GSUdfTElORS5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIG0gPSBjb25maWdfbGluZS5tYXRjaChsaW5lKQogICAgICAgICAgICAgICAgIGlmIG06CiAgICAgICAgICAgICAgICAgICAgIGQgPSBtLmdyb3VwZGljdCgpCiAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBkWydrZXknXS5sb3dlcigpLCBkWyd2YWx1ZSddCkBAIC01ODksMTEgKzU0MiwxMCBAQAogICAgICAgICBFTkFCTEVfVVNFUl9TSVRFID0gY2hlY2tfZW5hYmxldXNlcnNpdGUoKQogICAgIGtub3duX3BhdGhzID0gYWRkdXNlcnNpdGVwYWNrYWdlcyhrbm93bl9wYXRocykKICAgICBrbm93bl9wYXRocyA9IGFkZHNpdGVwYWNrYWdlcyhrbm93bl9wYXRocykKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ29zMmVteCc6Ci0gICAgICAgIHNldEJFR0lOTElCUEFUSCgpCiAgICAgc2V0cXVpdCgpCiAgICAgc2V0Y29weXJpZ2h0KCkKICAgICBzZXRoZWxwZXIoKQorICAgIGVuYWJsZXJsY29tcGxldGVyKCkKICAgICBhbGlhc21iY3MoKQogICAgIGV4ZWNzaXRlY3VzdG9taXplKCkKICAgICBpZiBFTkFCTEVfVVNFUl9TSVRFOgpkaWZmIC0tZ2l0IGEvTGliL3NtdHBkLnB5IGIvTGliL3NtdHBkLnB5CmluZGV4IDc3OGQ2ZDYuLjFmYTE1N2EgMTAwNzU1Ci0tLSBhL0xpYi9zbXRwZC5weQorKysgYi9MaWIvc210cGQucHkKQEAgLTEyMSw4ICsxMjEsOSBAQAogICAgICAgICB9KQogICAgIG1heF9jb21tYW5kX3NpemVfbGltaXQgPSBtYXgoY29tbWFuZF9zaXplX2xpbWl0cy52YWx1ZXMoKSkKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCk6Ci0gICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubikKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyLCBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgIG1hcD1Ob25lKToKKyAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uLCBtYXA9bWFwKQogICAgICAgICBzZWxmLnNtdHBfc2VydmVyID0gc2VydmVyCiAgICAgICAgIHNlbGYuY29ubiA9IGNvbm4KICAgICAgICAgc2VsZi5hZGRyID0gYWRkcgpAQCAtMTM3LDcgKzEzOCw3IEBACiAgICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnBlZXIgPSBjb25uLmdldHBlZXJuYW1lKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICMgYSByYWNlIGNvbmRpdGlvbiAgbWF5IG9jY3VyIGlmIHRoZSBvdGhlciBlbmQgaXMgY2xvc2luZwogICAgICAgICAgICAgIyBiZWZvcmUgd2UgY2FuIGdldCB0aGUgcGVlcm5hbWUKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQpAQCAtNTc2LDExICs1NzcsMTEgQEAKICAgICBjaGFubmVsX2NsYXNzID0gU01UUENoYW5uZWwKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbGFkZHIsIHJlbW90ZWFkZHIsCi0gICAgICAgICAgICAgICAgIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCk6CisgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCwgbWFwPU5vbmUpOgogICAgICAgICBzZWxmLl9sb2NhbGFkZHIgPSBsb2NhbGFkZHIKICAgICAgICAgc2VsZi5fcmVtb3RlYWRkciA9IHJlbW90ZWFkZHIKICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBkYXRhX3NpemVfbGltaXQKLSAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIG1hcD1tYXApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgIyB0cnkgdG8gcmUtdXNlIGEgc2VydmVyIHBvcnQgaWYgcG9zc2libGUKQEAgLTU5Nyw3ICs1OTgsOCBAQAogCiAgICAgZGVmIGhhbmRsZV9hY2NlcHRlZChzZWxmLCBjb25uLCBhZGRyKToKICAgICAgICAgcHJpbnQoJ0luY29taW5nIGNvbm5lY3Rpb24gZnJvbSAlcycgJSByZXByKGFkZHIpLCBmaWxlPURFQlVHU1RSRUFNKQotICAgICAgICBjaGFubmVsID0gc2VsZi5jaGFubmVsX2NsYXNzKHNlbGYsIGNvbm4sIGFkZHIsIHNlbGYuZGF0YV9zaXplX2xpbWl0KQorICAgICAgICBjaGFubmVsID0gc2VsZi5jaGFubmVsX2NsYXNzKHNlbGYsIGNvbm4sIGFkZHIsIHNlbGYuZGF0YV9zaXplX2xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21hcCkKIAogICAgICMgQVBJIGZvciAiZG9pbmcgc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZSBtZXNzYWdlIgogICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgpAQCAtNjY4LDcgKzY3MCw3IEBACiAgICAgICAgIGV4Y2VwdCBzbXRwbGliLlNNVFBSZWNpcGllbnRzUmVmdXNlZCBhcyBlOgogICAgICAgICAgICAgcHJpbnQoJ2dvdCBTTVRQUmVjaXBpZW50c1JlZnVzZWQnLCBmaWxlPURFQlVHU1RSRUFNKQogICAgICAgICAgICAgcmVmdXNlZCA9IGUucmVjaXBpZW50cwotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgc210cGxpYi5TTVRQRXhjZXB0aW9uKSBhcyBlOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIHNtdHBsaWIuU01UUEV4Y2VwdGlvbikgYXMgZToKICAgICAgICAgICAgIHByaW50KCdnb3QnLCBlLl9fY2xhc3NfXywgZmlsZT1ERUJVR1NUUkVBTSkKICAgICAgICAgICAgICMgQWxsIHJlY2lwaWVudHMgd2VyZSByZWZ1c2VkLiAgSWYgdGhlIGV4Y2VwdGlvbiBoYWQgYW4gYXNzb2NpYXRlZAogICAgICAgICAgICAgIyBlcnJvciBjb2RlLCB1c2UgaXQuICBPdGhlcndpc2UsZmFrZSBpdCB3aXRoIGEgbm9uLXRyaWdnZXJpbmcKQEAgLTc3OCw3ICs3ODAsNyBAQAogICAgICAgICBpZiBvcHQgaW4gKCctaCcsICctLWhlbHAnKToKICAgICAgICAgICAgIHVzYWdlKDApCiAgICAgICAgIGVsaWYgb3B0IGluICgnLVYnLCAnLS12ZXJzaW9uJyk6Ci0gICAgICAgICAgICBwcmludChfX3ZlcnNpb25fXywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgcHJpbnQoX192ZXJzaW9uX18pCiAgICAgICAgICAgICBzeXMuZXhpdCgwKQogICAgICAgICBlbGlmIG9wdCBpbiAoJy1uJywgJy0tbm9zZXR1aWQnKToKICAgICAgICAgICAgIG9wdGlvbnMuc2V0dWlkID0gMApAQCAtODUwLDggKzg1Miw3IEBACiAgICAgICAgIG5vYm9keSA9IHB3ZC5nZXRwd25hbSgnbm9ib2R5JylbMl0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Muc2V0dWlkKG5vYm9keSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVBFUk06IHJhaXNlCisgICAgICAgIGV4Y2VwdCBQZXJtaXNzaW9uRXJyb3I6CiAgICAgICAgICAgICBwcmludCgnQ2Fubm90IHNldHVpZCAibm9ib2R5IjsgdHJ5IHJ1bm5pbmcgd2l0aCAtbiBvcHRpb24uJywgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvc210cGxpYi5weSBiL0xpYi9zbXRwbGliLnB5CmluZGV4IDU3ZjE4MWIuLjY2YjU4NzkgMTAwNzU1Ci0tLSBhL0xpYi9zbXRwbGliLnB5CisrKyBiL0xpYi9zbXRwbGliLnB5CkBAIC02Nyw3ICs2Nyw3IEBACiBPTERTVFlMRV9BVVRIID0gcmUuY29tcGlsZShyImF1dGg9KC4qKSIsIHJlLkkpCiAKICMgRXhjZXB0aW9uIGNsYXNzZXMgdXNlZCBieSB0aGlzIG1vZHVsZS4KLWNsYXNzIFNNVFBFeGNlcHRpb24oRXhjZXB0aW9uKToKK2NsYXNzIFNNVFBFeGNlcHRpb24oT1NFcnJvcik6CiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgYWxsIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoaXMgbW9kdWxlLiIiIgogCiBjbGFzcyBTTVRQU2VydmVyRGlzY29ubmVjdGVkKFNNVFBFeGNlcHRpb24pOgpAQCAtMjMzLDYgKzIzMyw3IEBACiAgICAgICAgIHdpbGwgYmUgdXNlZC4KIAogICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgICAgICBzZWxmLmVzbXRwX2ZlYXR1cmVzID0ge30KICAgICAgICAgc2VsZi5zb3VyY2VfYWRkcmVzcyA9IHNvdXJjZV9hZGRyZXNzCkBAIC0zMTIsNyArMzEzLDcgQEAKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKCJub25udW1lcmljIHBvcnQiKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJub25udW1lcmljIHBvcnQiKQogICAgICAgICBpZiBub3QgcG9ydDoKICAgICAgICAgICAgIHBvcnQgPSBzZWxmLmRlZmF1bHRfcG9ydAogICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgpAQCAtMzMzLDcgKzMzNCw3IEBACiAgICAgICAgICAgICAgICAgcyA9IHMuZW5jb2RlKCJhc2NpaSIpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwocykKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZSBTTVRQU2VydmVyRGlzY29ubmVjdGVkKCdTZXJ2ZXIgbm90IGNvbm5lY3RlZCcpCiAgICAgICAgIGVsc2U6CkBAIC0zNjYsNyArMzY3LDcgQEAKICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5maWxlLnJlYWRsaW5lKF9NQVhMSU5FICsgMSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCgiQ29ubmVjdGlvbiB1bmV4cGVjdGVkbHkgY2xvc2VkOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cihlKSkKQEAgLTU4Miw3ICs1ODMsNyBAQAogICAgICAgICBkZWYgZW5jb2RlX2NyYW1fbWQ1KGNoYWxsZW5nZSwgdXNlciwgcGFzc3dvcmQpOgogICAgICAgICAgICAgY2hhbGxlbmdlID0gYmFzZTY0LmRlY29kZWJ5dGVzKGNoYWxsZW5nZSkKICAgICAgICAgICAgIHJlc3BvbnNlID0gdXNlciArICIgIiArIGhtYWMuSE1BQyhwYXNzd29yZC5lbmNvZGUoJ2FzY2lpJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGxlbmdlKS5oZXhkaWdlc3QoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxsZW5nZSwgJ21kNScpLmhleGRpZ2VzdCgpCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlX2Jhc2U2NChyZXNwb25zZS5lbmNvZGUoJ2FzY2lpJyksIGVvbD0nJykKIAogICAgICAgICBkZWYgZW5jb2RlX3BsYWluKHVzZXIsIHBhc3N3b3JkKToKQEAgLTY2NywxMCArNjY4LDEyIEBACiAgICAgICAgICAgICBpZiBjb250ZXh0IGlzIG5vdCBOb25lIGFuZCBjZXJ0ZmlsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjb250ZXh0IGFuZCBjZXJ0ZmlsZSBhcmd1bWVudHMgYXJlIG11dHVhbGx5ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNsdXNpdmUiKQotICAgICAgICAgICAgaWYgY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBjb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29jaywga2V5ZmlsZSwgY2VydGZpbGUpCisgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUpCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLl9ob3N0IGlmIHNzbC5IQVNfU05JIGVsc2UgTm9uZQorICAgICAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCiAgICAgICAgICAgICAjIFJGQyAzMjA3OgogICAgICAgICAgICAgIyBUaGUgY2xpZW50IE1VU1QgZGlzY2FyZCBhbnkga25vd2xlZGdlIG9idGFpbmVkIGZyb20KQEAgLTg4Myw2ICs4ODYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIFNNVFAuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgbG9jYWxfaG9zdG5hbWUsIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzKQpAQCAtODkyLDEwICs4OTgsOSBAQAogICAgICAgICAgICAgICAgIHByaW50KCdjb25uZWN0OicsIChob3N0LCBwb3J0KSwgZmlsZT1zdGRlcnIpCiAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2VfYWRkcmVzcykKLSAgICAgICAgICAgIGlmIHNlbGYuY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KG5ld19zb2NrZXQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzc2wud3JhcF9zb2NrZXQobmV3X3NvY2tldCwgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlKQorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gc2VsZi5faG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKKyAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQobmV3X3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKICAgICAgICAgICAgIHJldHVybiBuZXdfc29ja2V0CiAKICAgICBfX2FsbF9fLmFwcGVuZCgiU01UUF9TU0wiKQpAQCAtOTM3LDcgKzk0Miw3IEBACiAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCiAgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChob3N0KQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3QgZmFpbDonLCBob3N0LCBmaWxlPXN0ZGVycikKICAgICAgICAgICAgIGlmIHNlbGYuc29jazoKZGlmZiAtLWdpdCBhL0xpYi9zbmRoZHIucHkgYi9MaWIvc25kaGRyLnB5CmluZGV4IDlmNWRjYzkuLjI0MGU1MDcgMTAwNjQ0Ci0tLSBhL0xpYi9zbmRoZHIucHkKKysrIGIvTGliL3NuZGhkci5weQpAQCAtMTEsNyArMTEsNyBAQAogLSBudW1iZXIgb2YgYml0cy9zYW1wbGUsIG9yICdVJyBmb3IgVS1MQVcsIG9yICdBJyBmb3IgQS1MQVcKIAogSWYgdGhlIGZpbGUgZG9lc24ndCBoYXZlIGEgcmVjb2duaXphYmxlIHR5cGUsIGl0IHJldHVybnMgTm9uZS4KLUlmIHRoZSBmaWxlIGNhbid0IGJlIG9wZW5lZCwgSU9FcnJvciBpcyByYWlzZWQuCitJZiB0aGUgZmlsZSBjYW4ndCBiZSBvcGVuZWQsIE9TRXJyb3IgaXMgcmFpc2VkLgogCiBUbyBjb21wdXRlIHRoZSB0b3RhbCB0aW1lLCBkaXZpZGUgdGhlIG51bWJlciBvZiBmcmFtZXMgYnkgdGhlCiBzYW1wbGluZyByYXRlIChhIGZyYW1lIGNvbnRhaW5zIGEgc2FtcGxlIGZvciBlYWNoIGNoYW5uZWwpLgpAQCAtMTM3LDE0ICsxMzcsMTcgQEAKIAogCiBkZWYgdGVzdF93YXYoaCwgZik6CisgICAgaW1wb3J0IHdhdmUKICAgICAjICdSSUZGJyA8bGVuPiAnV0FWRScgJ2ZtdCAnIDxsZW4+CiAgICAgaWYgbm90IGguc3RhcnRzd2l0aChiJ1JJRkYnKSBvciBoWzg6MTJdICE9IGInV0FWRScgb3IgaFsxMjoxNl0gIT0gYidmbXQgJzoKICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBzdHlsZSA9IGdldF9zaG9ydF9sZShoWzIwOjIyXSkKLSAgICBuY2hhbm5lbHMgPSBnZXRfc2hvcnRfbGUoaFsyMjoyNF0pCi0gICAgcmF0ZSA9IGdldF9sb25nX2xlKGhbMjQ6MjhdKQotICAgIHNhbXBsZV9iaXRzID0gZ2V0X3Nob3J0X2xlKGhbMzQ6MzZdKQotICAgIHJldHVybiAnd2F2JywgcmF0ZSwgbmNoYW5uZWxzLCAtMSwgc2FtcGxlX2JpdHMKKyAgICBmLnNlZWsoMCkKKyAgICB0cnk6CisgICAgICAgIHcgPSB3YXZlLm9wZW5mcChmLCAncicpCisgICAgZXhjZXB0IChFT0ZFcnJvciwgd2F2ZS5FcnJvcik6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuICgnd2F2Jywgdy5nZXRmcmFtZXJhdGUoKSwgdy5nZXRuY2hhbm5lbHMoKSwKKyAgICAgICAgICAgICAgICAgICB3LmdldG5mcmFtZXMoKSwgOCp3LmdldHNhbXB3aWR0aCgpKQogCiB0ZXN0cy5hcHBlbmQodGVzdF93YXYpCiAKQEAgLTIzMCw3ICsyMzMsNyBAQAogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHJpbnQod2hhdChmaWxlbmFtZSkpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHByaW50KCcqKiogbm90IGZvdW5kICoqKicpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvc29ja2V0LnB5IGIvTGliL3NvY2tldC5weQppbmRleCBkNGYxYjY1Li42ZDY3YjNkIDEwMDY0NAotLS0gYS9MaWIvc29ja2V0LnB5CisrKyBiL0xpYi9zb2NrZXQucHkKQEAgLTQ4LDYgKzQ4LDcgQEAKIGZyb20gX3NvY2tldCBpbXBvcnQgKgogCiBpbXBvcnQgb3MsIHN5cywgaW8KK2Zyb20gZW51bSBpbXBvcnQgSW50RW51bQogCiB0cnk6CiAgICAgaW1wb3J0IGVycm5vCkBAIC02MCw2ICs2MSwzMCBAQAogX19hbGxfXyA9IFsiZ2V0ZnFkbiIsICJjcmVhdGVfY29ubmVjdGlvbiJdCiBfX2FsbF9fLmV4dGVuZChvcy5fZ2V0X2V4cG9ydHNfbGlzdChfc29ja2V0KSkKIAorIyBTZXQgdXAgdGhlIHNvY2tldC5BRl8qIHNvY2tldC5TT0NLXyogY29uc3RhbnRzIGFzIG1lbWJlcnMgb2YgSW50RW51bXMgZm9yCisjIG5pY2VyIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCisjIE5vdGUgdGhhdCBfc29ja2V0IG9ubHkga25vd3MgYWJvdXQgdGhlIGludGVnZXIgdmFsdWVzLiBUaGUgcHVibGljIGludGVyZmFjZQorIyBpbiB0aGlzIG1vZHVsZSB1bmRlcnN0YW5kcyB0aGUgZW51bXMgYW5kIHRyYW5zbGF0ZXMgdGhlbSBiYWNrIGZyb20gaW50ZWdlcnMKKyMgd2hlcmUgbmVlZGVkIChlLmcuIC5mYW1pbHkgcHJvcGVydHkgb2YgYSBzb2NrZXQgb2JqZWN0KS4KK0FkZHJlc3NGYW1pbHkgPSBJbnRFbnVtKCdBZGRyZXNzRmFtaWx5JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB2YWx1ZSBmb3IgbmFtZSwgdmFsdWUgaW4gZ2xvYmFscygpLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lLmlzdXBwZXIoKSBhbmQgbmFtZS5zdGFydHN3aXRoKCdBRl8nKX0pCitnbG9iYWxzKCkudXBkYXRlKEFkZHJlc3NGYW1pbHkuX19tZW1iZXJzX18pCisKK1NvY2tldFR5cGUgPSBJbnRFbnVtKCdTb2NrZXRUeXBlJywKKyAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB2YWx1ZSBmb3IgbmFtZSwgdmFsdWUgaW4gZ2xvYmFscygpLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lLmlzdXBwZXIoKSBhbmQgbmFtZS5zdGFydHN3aXRoKCdTT0NLXycpfSkKK2dsb2JhbHMoKS51cGRhdGUoU29ja2V0VHlwZS5fX21lbWJlcnNfXykKKworZGVmIF9pbnRlbnVtX2NvbnZlcnRlcih2YWx1ZSwgZW51bV9rbGFzcyk6CisgICAgIiIiQ29udmVydCBhIG51bWVyaWMgZmFtaWx5IHZhbHVlIHRvIGFuIEludEVudW0gbWVtYmVyLgorCisgICAgSWYgaXQncyBub3QgYSBrbm93biBtZW1iZXIsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpdHNlbGYuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gZW51bV9rbGFzcyh2YWx1ZSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcmV0dXJuIHZhbHVlCiAKIF9yZWFsc29ja2V0ID0gc29ja2V0CiAKQEAgLTkxLDYgKzExNiwxMCBAQAogICAgIF9fc2xvdHNfXyA9IFsiX193ZWFrcmVmX18iLCAiX2lvX3JlZnMiLCAiX2Nsb3NlZCJdCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmFtaWx5PUFGX0lORVQsIHR5cGU9U09DS19TVFJFQU0sIHByb3RvPTAsIGZpbGVubz1Ob25lKToKKyAgICAgICAgIyBGb3IgdXNlciBjb2RlIGFkZHJlc3MgZmFtaWx5IGFuZCB0eXBlIHZhbHVlcyBhcmUgSW50RW51bSBtZW1iZXJzLCBidXQKKyAgICAgICAgIyBmb3IgdGhlIHVuZGVybHlpbmcgX3NvY2tldC5zb2NrZXQgdGhleSdyZSBqdXN0IGludGVnZXJzLiBUaGUKKyAgICAgICAgIyBjb25zdHJ1Y3RvciBvZiBfc29ja2V0LnNvY2tldCBjb252ZXJ0cyB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4KKyAgICAgICAgIyBpbnRlZ2VyIGF1dG9tYXRpY2FsbHkuCiAgICAgICAgIF9zb2NrZXQuc29ja2V0Ll9faW5pdF9fKHNlbGYsIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZpbGVubykKICAgICAgICAgc2VsZi5faW9fcmVmcyA9IDAKICAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKQEAgLTEwMywxMyArMTMyLDMyIEBACiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgIiIiV3JhcCBfX3JlcHJfXygpIHRvIHJldmVhbCB0aGUgcmVhbCBjbGFzcyBuYW1lLiIiIgotICAgICAgICBzID0gX3NvY2tldC5zb2NrZXQuX19yZXByX18oc2VsZikKLSAgICAgICAgaWYgcy5zdGFydHN3aXRoKCI8c29ja2V0IG9iamVjdCIpOgotICAgICAgICAgICAgcyA9ICI8JXMuJXMlcyVzIiAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCAnX2Nsb3NlZCcsIEZhbHNlKSBhbmQgIiBbY2xvc2VkXSAiIG9yICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzc6XSkKKyAgICAgICAgIiIiV3JhcCBfX3JlcHJfXygpIHRvIHJldmVhbCB0aGUgcmVhbCBjbGFzcyBuYW1lIGFuZCBzb2NrZXQKKyAgICAgICAgYWRkcmVzcyhlcykuCisgICAgICAgICIiIgorICAgICAgICBjbG9zZWQgPSBnZXRhdHRyKHNlbGYsICdfY2xvc2VkJywgRmFsc2UpCisgICAgICAgIHMgPSAiPCVzLiVzJXMgZmQ9JWksIGZhbWlseT0lcywgdHlwZT0lcywgcHJvdG89JWkiIFwKKyAgICAgICAgICAgICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICIgW2Nsb3NlZF0iIGlmIGNsb3NlZCBlbHNlICIiLAorICAgICAgICAgICAgICAgc2VsZi5maWxlbm8oKSwKKyAgICAgICAgICAgICAgIHNlbGYuZmFtaWx5LAorICAgICAgICAgICAgICAgc2VsZi50eXBlLAorICAgICAgICAgICAgICAgc2VsZi5wcm90bykKKyAgICAgICAgaWYgbm90IGNsb3NlZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsYWRkciA9IHNlbGYuZ2V0c29ja25hbWUoKQorICAgICAgICAgICAgICAgIGlmIGxhZGRyOgorICAgICAgICAgICAgICAgICAgICBzICs9ICIsIGxhZGRyPSVzIiAlIHN0cihsYWRkcikKKyAgICAgICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFkZHIgPSBzZWxmLmdldHBlZXJuYW1lKCkKKyAgICAgICAgICAgICAgICBpZiByYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgcyArPSAiLCByYWRkcj0lcyIgJSBzdHIocmFkZHIpCisgICAgICAgICAgICBleGNlcHQgZXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzICs9ICc+JwogICAgICAgICByZXR1cm4gcwogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKQEAgLTExOCw3ICsxNjYsOCBAQAogICAgIGRlZiBkdXAoc2VsZik6CiAgICAgICAgICIiImR1cCgpIC0+IHNvY2tldCBvYmplY3QKIAotICAgICAgICBSZXR1cm4gYSBuZXcgc29ja2V0IG9iamVjdCBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgc3lzdGVtIHJlc291cmNlLgorICAgICAgICBEdXBsaWNhdGUgdGhlIHNvY2tldC4gUmV0dXJuIGEgbmV3IHNvY2tldCBvYmplY3QgY29ubmVjdGVkIHRvIHRoZSBzYW1lCisgICAgICAgIHN5c3RlbSByZXNvdXJjZS4gVGhlIG5ldyBzb2NrZXQgaXMgbm9uLWluaGVyaXRhYmxlLgogICAgICAgICAiIiIKICAgICAgICAgZmQgPSBkdXAoc2VsZi5maWxlbm8oKSkKICAgICAgICAgc29jayA9IHNlbGYuX19jbGFzc19fKHNlbGYuZmFtaWx5LCBzZWxmLnR5cGUsIHNlbGYucHJvdG8sIGZpbGVubz1mZCkKQEAgLTIxMCw2ICsyNTksMzEgQEAKICAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQogICAgICAgICByZXR1cm4gc3VwZXIoKS5kZXRhY2goKQogCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZhbWlseShzZWxmKToKKyAgICAgICAgIiIiUmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgYWRkcmVzcyBmYW1pbHkgZm9yIHRoaXMgc29ja2V0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIF9pbnRlbnVtX2NvbnZlcnRlcihzdXBlcigpLmZhbWlseSwgQWRkcmVzc0ZhbWlseSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICAiIiJSZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBzb2NrZXQgdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBfaW50ZW51bV9jb252ZXJ0ZXIoc3VwZXIoKS50eXBlLCBTb2NrZXRUeXBlKQorCisgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICBkZWYgZ2V0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIG9zLmdldF9oYW5kbGVfaW5oZXJpdGFibGUoc2VsZi5maWxlbm8oKSkKKyAgICAgICAgZGVmIHNldF9pbmhlcml0YWJsZShzZWxmLCBpbmhlcml0YWJsZSk6CisgICAgICAgICAgICBvcy5zZXRfaGFuZGxlX2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCksIGluaGVyaXRhYmxlKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBnZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gb3MuZ2V0X2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCkpCisgICAgICAgIGRlZiBzZXRfaW5oZXJpdGFibGUoc2VsZiwgaW5oZXJpdGFibGUpOgorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCksIGluaGVyaXRhYmxlKQorICAgIGdldF9pbmhlcml0YWJsZS5fX2RvY19fID0gIkdldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc29ja2V0IgorICAgIHNldF9pbmhlcml0YWJsZS5fX2RvY19fID0gIlNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc29ja2V0IgorCiBkZWYgZnJvbWZkKGZkLCBmYW1pbHksIHR5cGUsIHByb3RvPTApOgogICAgICIiIiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZVssIHByb3RvXSkgLT4gc29ja2V0IG9iamVjdAogCkBAIC0yOTEsNyArMzY1LDcgQEAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQogICAgICAgICBzZWxmLl9jaGVja1JlYWRhYmxlKCkKICAgICAgICAgaWYgc2VsZi5fdGltZW91dF9vY2N1cnJlZDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbm5vdCByZWFkIGZyb20gdGltZWQgb3V0IG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW5ub3QgcmVhZCBmcm9tIHRpbWVkIG91dCBvYmplY3QiKQogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zb2NrLnJlY3ZfaW50byhiKQpAQCAtNDM1LDMgKzUwOSwyNyBAQAogICAgICAgICByYWlzZSBlcnIKICAgICBlbHNlOgogICAgICAgICByYWlzZSBlcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKKworZGVmIGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIGZhbWlseT0wLCB0eXBlPTAsIHByb3RvPTAsIGZsYWdzPTApOgorICAgICIiIlJlc29sdmUgaG9zdCBhbmQgcG9ydCBpbnRvIGxpc3Qgb2YgYWRkcmVzcyBpbmZvIGVudHJpZXMuCisKKyAgICBUcmFuc2xhdGUgdGhlIGhvc3QvcG9ydCBhcmd1bWVudCBpbnRvIGEgc2VxdWVuY2Ugb2YgNS10dXBsZXMgdGhhdCBjb250YWluCisgICAgYWxsIHRoZSBuZWNlc3NhcnkgYXJndW1lbnRzIGZvciBjcmVhdGluZyBhIHNvY2tldCBjb25uZWN0ZWQgdG8gdGhhdCBzZXJ2aWNlLgorICAgIGhvc3QgaXMgYSBkb21haW4gbmFtZSwgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gSVB2NC92NiBhZGRyZXNzIG9yCisgICAgTm9uZS4gcG9ydCBpcyBhIHN0cmluZyBzZXJ2aWNlIG5hbWUgc3VjaCBhcyAnaHR0cCcsIGEgbnVtZXJpYyBwb3J0IG51bWJlciBvcgorICAgIE5vbmUuIEJ5IHBhc3NpbmcgTm9uZSBhcyB0aGUgdmFsdWUgb2YgaG9zdCBhbmQgcG9ydCwgeW91IGNhbiBwYXNzIE5VTEwgdG8KKyAgICB0aGUgdW5kZXJseWluZyBDIEFQSS4KKworICAgIFRoZSBmYW1pbHksIHR5cGUgYW5kIHByb3RvIGFyZ3VtZW50cyBjYW4gYmUgb3B0aW9uYWxseSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8KKyAgICBuYXJyb3cgdGhlIGxpc3Qgb2YgYWRkcmVzc2VzIHJldHVybmVkLiBQYXNzaW5nIHplcm8gYXMgYSB2YWx1ZSBmb3IgZWFjaCBvZgorICAgIHRoZXNlIGFyZ3VtZW50cyBzZWxlY3RzIHRoZSBmdWxsIHJhbmdlIG9mIHJlc3VsdHMuCisgICAgIiIiCisgICAgIyBXZSBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHNpbmNlIHdlIHdhbnQgdG8gdHJhbnNsYXRlIHRoZSBudW1lcmljIGZhbWlseQorICAgICMgYW5kIHNvY2tldCB0eXBlIHZhbHVlcyB0byBlbnVtIGNvbnN0YW50cy4KKyAgICBhZGRybGlzdCA9IFtdCisgICAgZm9yIHJlcyBpbiBfc29ja2V0LmdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZsYWdzKToKKyAgICAgICAgYWYsIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzYSA9IHJlcworICAgICAgICBhZGRybGlzdC5hcHBlbmQoKF9pbnRlbnVtX2NvbnZlcnRlcihhZiwgQWRkcmVzc0ZhbWlseSksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2ludGVudW1fY29udmVydGVyKHNvY2t0eXBlLCBTb2NrZXRUeXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bywgY2Fub25uYW1lLCBzYSkpCisgICAgcmV0dXJuIGFkZHJsaXN0CmRpZmYgLS1naXQgYS9MaWIvc29ja2V0c2VydmVyLnB5IGIvTGliL3NvY2tldHNlcnZlci5weQppbmRleCA4MzMyZmRmLi5lOWU0ZTRlIDEwMDY0NAotLS0gYS9MaWIvc29ja2V0c2VydmVyLnB5CisrKyBiL0xpYi9zb2NrZXRzZXJ2ZXIucHkKQEAgLTI5OSw3ICsyOTksNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MgPSBzZWxmLmdldF9yZXF1ZXN0KCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi52ZXJpZnlfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CiAgICAgICAgICAgICB0cnk6CkBAIC00NzksNyArNDc5LDcgQEAKICAgICAgICAgICAgICNleHBsaWNpdGx5IHNodXRkb3duLiAgc29ja2V0LmNsb3NlKCkgbWVyZWx5IHJlbGVhc2VzCiAgICAgICAgICAgICAjdGhlIHNvY2tldCBhbmQgd2FpdHMgZm9yIEdDIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBjbG9zZS4KICAgICAgICAgICAgIHJlcXVlc3Quc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcyAjc29tZSBwbGF0Zm9ybXMgbWF5IHJhaXNlIEVOT1RDT05OIGhlcmUKICAgICAgICAgc2VsZi5jbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCiAKQEAgLTUzMiw3ICs1MzIsNyBAQAogICAgICAgICAgICAgIyBjaGlsZHJlbi4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoMCwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBpZCA9IE5vbmUKICAgICAgICAgICAgIGlmIHBpZCBub3QgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW46IGNvbnRpbnVlCiAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5yZW1vdmUocGlkKQpAQCAtNTQ1LDcgKzU0NSw3IEBACiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbjoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoY2hpbGQsIG9zLldOT0hBTkcpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwaWQgPSBOb25lCiAgICAgICAgICAgICBpZiBub3QgcGlkOiBjb250aW51ZQogICAgICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKaW5kZXggYjdlYzFhZC4uMDQ2NDlmYyAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CkBAIC0yOCw2ICsyOCw5IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmsKKworCiBjbGFzcyBNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIENoZWNrQVBJTGV2ZWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3FsaXRlLmFwaWxldmVsLCAiMi4wIiwKQEAgLTE2Myw2ICsxNjYsMjEgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmN4LmluX3RyYW5zYWN0aW9uID0gVHJ1ZQogCisgICAgZGVmIENoZWNrT3BlblVyaShzZWxmKToKKyAgICAgICAgaWYgc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgNywgNyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Ob3RTdXBwb3J0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc3FsaXRlLmNvbm5lY3QoJzptZW1vcnk6JywgdXJpPVRydWUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgVEVTVEZOKQorICAgICAgICB3aXRoIHNxbGl0ZS5jb25uZWN0KFRFU1RGTikgYXMgY3g6CisgICAgICAgICAgICBjeC5leGVjdXRlKCdjcmVhdGUgdGFibGUgdGVzdChpZCBpbnRlZ2VyKScpCisgICAgICAgIHdpdGggc3FsaXRlLmNvbm5lY3QoJ2ZpbGU6JyArIFRFU1RGTiwgdXJpPVRydWUpIGFzIGN4OgorICAgICAgICAgICAgY3guZXhlY3V0ZSgnaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzKDApJykKKyAgICAgICAgd2l0aCBzcWxpdGUuY29ubmVjdCgnZmlsZTonICsgVEVTVEZOICsgJz9tb2RlPXJvJywgdXJpPVRydWUpIGFzIGN4OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcik6CisgICAgICAgICAgICAgICAgY3guZXhlY3V0ZSgnaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzKDEpJykKKworCiBjbGFzcyBDdXJzb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmN4ID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKZGlmZiAtLWdpdCBhL0xpYi9zcmVfY29tcGlsZS5weSBiL0xpYi9zcmVfY29tcGlsZS5weQppbmRleCBiOTg0YTU0Li4zYTUwODNmIDEwMDY0NAotLS0gYS9MaWIvc3JlX2NvbXBpbGUucHkKKysrIGIvTGliL3NyZV9jb21waWxlLnB5CkBAIC0xMyw2ICsxMyw3IEBACiBpbXBvcnQgX3NyZSwgc3lzCiBpbXBvcnQgc3JlX3BhcnNlCiBmcm9tIHNyZV9jb25zdGFudHMgaW1wb3J0ICoKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKIGFzc2VydCBfc3JlLk1BR0lDID09IE1BR0lDLCAiU1JFIG1vZHVsZSBtaXNtYXRjaCIKIApAQCAtNjQsMTMgKzY1LDYgQEAKICAgICAgICAgZWxpZiBvcCBpbiBSRVBFQVRJTkdfQ09ERVM6CiAgICAgICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX1RFTVBMQVRFOgogICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJpbnRlcm5hbDogdW5zdXBwb3J0ZWQgdGVtcGxhdGUgb3BlcmF0b3IiKQotICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tSRVBFQVRdKQotICAgICAgICAgICAgICAgIHNraXAgPSBfbGVuKGNvZGUpOyBlbWl0KDApCi0gICAgICAgICAgICAgICAgZW1pdChhdlswXSkKLSAgICAgICAgICAgICAgICBlbWl0KGF2WzFdKQotICAgICAgICAgICAgICAgIF9jb21waWxlKGNvZGUsIGF2WzJdLCBmbGFncykKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbU1VDQ0VTU10pCi0gICAgICAgICAgICAgICAgY29kZVtza2lwXSA9IF9sZW4oY29kZSkgLSBza2lwCiAgICAgICAgICAgICBlbGlmIF9zaW1wbGUoYXYpIGFuZCBvcCBpcyBub3QgUkVQRUFUOgogICAgICAgICAgICAgICAgIGlmIG9wIGlzIE1BWF9SRVBFQVQ6CiAgICAgICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tSRVBFQVRfT05FXSkKQEAgLTIwNywxNTggKzIwMSwxNDMgQEAKIGRlZiBfb3B0aW1pemVfY2hhcnNldChjaGFyc2V0LCBmaXh1cCk6CiAgICAgIyBpbnRlcm5hbDogb3B0aW1pemUgY2hhcmFjdGVyIHNldAogICAgIG91dCA9IFtdCi0gICAgb3V0YXBwZW5kID0gb3V0LmFwcGVuZAotICAgIGNoYXJtYXAgPSBbMF0qMjU2Ci0gICAgdHJ5OgotICAgICAgICBmb3Igb3AsIGF2IGluIGNoYXJzZXQ6Ci0gICAgICAgICAgICBpZiBvcCBpcyBORUdBVEU6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChvcCwgYXYpKQotICAgICAgICAgICAgZWxpZiBvcCBpcyBMSVRFUkFMOgotICAgICAgICAgICAgICAgIGNoYXJtYXBbZml4dXAoYXYpXSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgUkFOR0U6Ci0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZml4dXAoYXZbMF0pLCBmaXh1cChhdlsxXSkrMSk6Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIENBVEVHT1JZOgotICAgICAgICAgICAgICAgICMgWFhYOiBjb3VsZCBhcHBlbmQgdG8gY2hhcm1hcCB0YWlsCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQgIyBjYW5ub3QgY29tcHJlc3MKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgIyBjaGFyYWN0ZXIgc2V0IGNvbnRhaW5zIHVuaWNvZGUgY2hhcmFjdGVycwotICAgICAgICByZXR1cm4gX29wdGltaXplX3VuaWNvZGUoY2hhcnNldCwgZml4dXApCisgICAgdGFpbCA9IFtdCisgICAgY2hhcm1hcCA9IGJ5dGVhcnJheSgyNTYpCisgICAgZm9yIG9wLCBhdiBpbiBjaGFyc2V0OgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG9wIGlzIExJVEVSQUw6CisgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbZml4dXAoYXYpXSA9IDEKKyAgICAgICAgICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShmaXh1cChhdlswXSksIGZpeHVwKGF2WzFdKSsxKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCisgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBORUdBVEU6CisgICAgICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGFpbC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBsZW4oY2hhcm1hcCkgPT0gMjU2OgorICAgICAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgbm9uLVVDUzEgY2hhcmFjdGVyIGNvZGVzCisgICAgICAgICAgICAgICAgICAgIGNoYXJtYXAgKz0gYidcMCcgKiAweGZmMDAKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIgY29kZXMKKyAgICAgICAgICAgICAgICB0YWlsLmFwcGVuZCgob3AsIGF2KSkKKyAgICAgICAgICAgIGJyZWFrCisKICAgICAjIGNvbXByZXNzIGNoYXJhY3RlciBtYXAKLSAgICBpID0gcCA9IG4gPSAwCiAgICAgcnVucyA9IFtdCi0gICAgcnVuc2FwcGVuZCA9IHJ1bnMuYXBwZW5kCi0gICAgZm9yIGMgaW4gY2hhcm1hcDoKLSAgICAgICAgaWYgYzoKLSAgICAgICAgICAgIGlmIG4gPT0gMDoKLSAgICAgICAgICAgICAgICBwID0gaQotICAgICAgICAgICAgbiA9IG4gKyAxCi0gICAgICAgIGVsaWYgbjoKLSAgICAgICAgICAgIHJ1bnNhcHBlbmQoKHAsIG4pKQotICAgICAgICAgICAgbiA9IDAKLSAgICAgICAgaSA9IGkgKyAxCi0gICAgaWYgbjoKLSAgICAgICAgcnVuc2FwcGVuZCgocCwgbikpCi0gICAgaWYgbGVuKHJ1bnMpIDw9IDI6CisgICAgcSA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwID0gY2hhcm1hcC5maW5kKDEsIHEpCisgICAgICAgIGlmIHAgPCAwOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbGVuKHJ1bnMpID49IDI6CisgICAgICAgICAgICBydW5zID0gTm9uZQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcSA9IGNoYXJtYXAuZmluZCgwLCBwKQorICAgICAgICBpZiBxIDwgMDoKKyAgICAgICAgICAgIHJ1bnMuYXBwZW5kKChwLCBsZW4oY2hhcm1hcCkpKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcnVucy5hcHBlbmQoKHAsIHEpKQorICAgIGlmIHJ1bnMgaXMgbm90IE5vbmU6CiAgICAgICAgICMgdXNlIGxpdGVyYWwvcmFuZ2UKLSAgICAgICAgZm9yIHAsIG4gaW4gcnVuczoKLSAgICAgICAgICAgIGlmIG4gPT0gMToKLSAgICAgICAgICAgICAgICBvdXRhcHBlbmQoKExJVEVSQUwsIHApKQorICAgICAgICBmb3IgcCwgcSBpbiBydW5zOgorICAgICAgICAgICAgaWYgcSAtIHAgPT0gMToKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKChMSVRFUkFMLCBwKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChSQU5HRSwgKHAsIHArbi0xKSkpCisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgoUkFOR0UsIChwLCBxIC0gMSkpKQorICAgICAgICBvdXQgKz0gdGFpbAogICAgICAgICBpZiBsZW4ob3V0KSA8IGxlbihjaGFyc2V0KToKICAgICAgICAgICAgIHJldHVybiBvdXQKLSAgICBlbHNlOgotICAgICAgICAjIHVzZSBiaXRtYXAKKyAgICAgICAgcmV0dXJuIGNoYXJzZXQKKworICAgICMgdXNlIGJpdG1hcAorICAgIGlmIGxlbihjaGFybWFwKSA9PSAyNTY6CiAgICAgICAgIGRhdGEgPSBfbWtfYml0bWFwKGNoYXJtYXApCi0gICAgICAgIG91dGFwcGVuZCgoQ0hBUlNFVCwgZGF0YSkpCisgICAgICAgIG91dC5hcHBlbmQoKENIQVJTRVQsIGRhdGEpKQorICAgICAgICBvdXQgKz0gdGFpbAogICAgICAgICByZXR1cm4gb3V0Ci0gICAgcmV0dXJuIGNoYXJzZXQKIAotZGVmIF9ta19iaXRtYXAoYml0cyk6Ci0gICAgZGF0YSA9IFtdCi0gICAgZGF0YWFwcGVuZCA9IGRhdGEuYXBwZW5kCi0gICAgaWYgX3NyZS5DT0RFU0laRSA9PSAyOgotICAgICAgICBzdGFydCA9ICgxLCAwKQotICAgIGVsc2U6Ci0gICAgICAgIHN0YXJ0ID0gKDEsIDApCi0gICAgbSwgdiA9IHN0YXJ0Ci0gICAgZm9yIGMgaW4gYml0czoKLSAgICAgICAgaWYgYzoKLSAgICAgICAgICAgIHYgPSB2ICsgbQotICAgICAgICBtID0gbSArIG0KLSAgICAgICAgaWYgbSA+IE1BWENPREU6Ci0gICAgICAgICAgICBkYXRhYXBwZW5kKHYpCi0gICAgICAgICAgICBtLCB2ID0gc3RhcnQKLSAgICByZXR1cm4gZGF0YQorICAgICMgVG8gcmVwcmVzZW50IGEgYmlnIGNoYXJzZXQsIGZpcnN0IGEgYml0bWFwIG9mIGFsbCBjaGFyYWN0ZXJzIGluIHRoZQorICAgICMgc2V0IGlzIGNvbnN0cnVjdGVkLiBUaGVuLCB0aGlzIGJpdG1hcCBpcyBzbGljZWQgaW50byBjaHVua3Mgb2YgMjU2CisgICAgIyBjaGFyYWN0ZXJzLCBkdXBsaWNhdGUgY2h1bmtzIGFyZSBlbGltaW5hdGVkLCBhbmQgZWFjaCBjaHVuayBpcworICAgICMgZ2l2ZW4gYSBudW1iZXIuIEluIHRoZSBjb21waWxlZCBleHByZXNzaW9uLCB0aGUgY2hhcnNldCBpcworICAgICMgcmVwcmVzZW50ZWQgYnkgYSAzMi1iaXQgd29yZCBzZXF1ZW5jZSwgY29uc2lzdGluZyBvZiBvbmUgd29yZCBmb3IKKyAgICAjIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGNodW5rcywgYSBzZXF1ZW5jZSBvZiAyNTYgYnl0ZXMgKDY0IHdvcmRzKQorICAgICMgb2YgY2h1bmsgbnVtYmVycyBpbmRleGVkIGJ5IHRoZWlyIG9yaWdpbmFsIGNodW5rIHBvc2l0aW9uLCBhbmQgYQorICAgICMgc2VxdWVuY2Ugb2YgMjU2LWJpdCBjaHVua3MgKDggd29yZHMgZWFjaCkuCiAKLSMgVG8gcmVwcmVzZW50IGEgYmlnIGNoYXJzZXQsIGZpcnN0IGEgYml0bWFwIG9mIGFsbCBjaGFyYWN0ZXJzIGluIHRoZQotIyBzZXQgaXMgY29uc3RydWN0ZWQuIFRoZW4sIHRoaXMgYml0bWFwIGlzIHNsaWNlZCBpbnRvIGNodW5rcyBvZiAyNTYKLSMgY2hhcmFjdGVycywgZHVwbGljYXRlIGNodW5rcyBhcmUgZWxpbWluYXRlZCwgYW5kIGVhY2ggY2h1bmsgaXMKLSMgZ2l2ZW4gYSBudW1iZXIuIEluIHRoZSBjb21waWxlZCBleHByZXNzaW9uLCB0aGUgY2hhcnNldCBpcwotIyByZXByZXNlbnRlZCBieSBhIDMyLWJpdCB3b3JkIHNlcXVlbmNlLCBjb25zaXN0aW5nIG9mIG9uZSB3b3JkIGZvcgotIyB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBjaHVua3MsIGEgc2VxdWVuY2Ugb2YgMjU2IGJ5dGVzICg2NCB3b3JkcykKLSMgb2YgY2h1bmsgbnVtYmVycyBpbmRleGVkIGJ5IHRoZWlyIG9yaWdpbmFsIGNodW5rIHBvc2l0aW9uLCBhbmQgYQotIyBzZXF1ZW5jZSBvZiAyNTYtYml0IGNodW5rcyAoOCB3b3JkcyBlYWNoKS4KKyAgICAjIENvbXByZXNzaW9uIGlzIG5vcm1hbGx5IGdvb2Q6IGluIGEgdHlwaWNhbCBjaGFyc2V0LCBsYXJnZSByYW5nZXMgb2YKKyAgICAjIFVuaWNvZGUgd2lsbCBiZSBlaXRoZXIgY29tcGxldGVseSBleGNsdWRlZCAoZS5nLiBpZiBvbmx5IGN5cmlsbGljCisgICAgIyBsZXR0ZXJzIGFyZSB0byBiZSBtYXRjaGVkKSwgb3IgY29tcGxldGVseSBpbmNsdWRlZCAoZS5nLiBpZiBsYXJnZQorICAgICMgc3VicmFuZ2VzIG9mIEthbmppIG1hdGNoKS4gVGhlc2UgcmFuZ2VzIHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkKKyAgICAjIGNodW5rcyBvZiBhbGwgb25lLWJpdHMgb3IgYWxsIHplcm8tYml0cy4KIAotIyBDb21wcmVzc2lvbiBpcyBub3JtYWxseSBnb29kOiBpbiBhIHR5cGljYWwgY2hhcnNldCwgbGFyZ2UgcmFuZ2VzIG9mCi0jIFVuaWNvZGUgd2lsbCBiZSBlaXRoZXIgY29tcGxldGVseSBleGNsdWRlZCAoZS5nLiBpZiBvbmx5IGN5cmlsbGljCi0jIGxldHRlcnMgYXJlIHRvIGJlIG1hdGNoZWQpLCBvciBjb21wbGV0ZWx5IGluY2x1ZGVkIChlLmcuIGlmIGxhcmdlCi0jIHN1YnJhbmdlcyBvZiBLYW5qaSBtYXRjaCkuIFRoZXNlIHJhbmdlcyB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5Ci0jIGNodW5rcyBvZiBhbGwgb25lLWJpdHMgb3IgYWxsIHplcm8tYml0cy4KKyAgICAjIE1hdGNoaW5nIGNhbiBiZSBhbHNvIGRvbmUgZWZmaWNpZW50bHk6IHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgb2YKKyAgICAjIHRoZSBVbmljb2RlIGNoYXJhY3RlciBpcyBhbiBpbmRleCBpbnRvIHRoZSBjaHVuayBudW1iZXIsIGFuZCB0aGUKKyAgICAjIGxlc3Mgc2lnbmlmaWNhbnQgYnl0ZSBpcyBhIGJpdCBpbmRleCBpbiB0aGUgY2h1bmsgKGp1c3QgbGlrZSB0aGUKKyAgICAjIENIQVJTRVQgbWF0Y2hpbmcpLgogCi0jIE1hdGNoaW5nIGNhbiBiZSBhbHNvIGRvbmUgZWZmaWNpZW50bHk6IHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgb2YKLSMgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGlzIGFuIGluZGV4IGludG8gdGhlIGNodW5rIG51bWJlciwgYW5kIHRoZQotIyBsZXNzIHNpZ25pZmljYW50IGJ5dGUgaXMgYSBiaXQgaW5kZXggaW4gdGhlIGNodW5rIChqdXN0IGxpa2UgdGhlCi0jIENIQVJTRVQgbWF0Y2hpbmcpLgotCi0jIFRoZSBCSUdDSEFSU0VUIG9wY29kZSBzdGlsbCBzdXBwb3J0cyBvbmx5IHN1YnNldHMKLSMgb2YgdGhlIGJhc2ljIG11bHRpbGluZ3VhbCBwbGFuZTsgYW4gZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uCi0jIGZvciBhbGwgb2YgVW5pY29kZSBoYXMgbm90IHlldCBiZWVuIGRldmVsb3BlZC4gVGhpcyBtZWFucywKLSMgaW4gcGFydGljdWxhciwgdGhhdCBuZWdhdGVkIGNoYXJzZXRzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcwotIyBiaWdjaGFyc2V0cy4KLQotZGVmIF9vcHRpbWl6ZV91bmljb2RlKGNoYXJzZXQsIGZpeHVwKToKLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBhcnJheQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcmV0dXJuIGNoYXJzZXQKLSAgICBjaGFybWFwID0gWzBdKjY1NTM2Ci0gICAgbmVnYXRlID0gMAotICAgIHRyeToKLSAgICAgICAgZm9yIG9wLCBhdiBpbiBjaGFyc2V0OgotICAgICAgICAgICAgaWYgb3AgaXMgTkVHQVRFOgotICAgICAgICAgICAgICAgIG5lZ2F0ZSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgTElURVJBTDoKLSAgICAgICAgICAgICAgICBjaGFybWFwW2ZpeHVwKGF2KV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgotICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGZpeHVwKGF2WzBdKSwgZml4dXAoYXZbMV0pKzEpOgotICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2ldID0gMQotICAgICAgICAgICAgZWxpZiBvcCBpcyBDQVRFR09SWToKLSAgICAgICAgICAgICAgICAjIFhYWDogY291bGQgZXhwYW5kIGNhdGVnb3J5Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQgIyBjYW5ub3QgY29tcHJlc3MKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgIyBub24tQk1QIGNoYXJhY3RlcnM7IFhYWCBub3cgdGhleSBzaG91bGQgd29yawotICAgICAgICByZXR1cm4gY2hhcnNldAotICAgIGlmIG5lZ2F0ZToKLSAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgIT0gNjU1MzU6Ci0gICAgICAgICAgICAjIFhYWDogbmVnYXRpb24gZG9lcyBub3Qgd29yayB3aXRoIGJpZyBjaGFyc2V0cwotICAgICAgICAgICAgIyBYWFgyOiBub3cgdGhleSBzaG91bGQgd29yaywgYnV0IHJlbW92aW5nIHRoaXMgd2lsbCBtYWtlIHRoZQotICAgICAgICAgICAgIyBjaGFybWFwIDE3IHRpbWVzIGJpZ2dlcgotICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNjU1MzYpOgotICAgICAgICAgICAgY2hhcm1hcFtpXSA9IG5vdCBjaGFybWFwW2ldCisgICAgY2hhcm1hcCA9IGJ5dGVzKGNoYXJtYXApICMgc2hvdWxkIGJlIGhhc2hhYmxlCiAgICAgY29tcHMgPSB7fQotICAgIG1hcHBpbmcgPSBbMF0qMjU2CisgICAgbWFwcGluZyA9IGJ5dGVhcnJheSgyNTYpCiAgICAgYmxvY2sgPSAwCi0gICAgZGF0YSA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoMjU2KToKLSAgICAgICAgY2h1bmsgPSB0dXBsZShjaGFybWFwW2kqMjU2OihpKzEpKjI1Nl0pCi0gICAgICAgIG5ldyA9IGNvbXBzLnNldGRlZmF1bHQoY2h1bmssIGJsb2NrKQotICAgICAgICBtYXBwaW5nW2ldID0gbmV3Ci0gICAgICAgIGlmIG5ldyA9PSBibG9jazoKLSAgICAgICAgICAgIGJsb2NrID0gYmxvY2sgKyAxCi0gICAgICAgICAgICBkYXRhID0gZGF0YSArIF9ta19iaXRtYXAoY2h1bmspCi0gICAgaGVhZGVyID0gW2Jsb2NrXQotICAgIGlmIF9zcmUuQ09ERVNJWkUgPT0gMjoKLSAgICAgICAgY29kZSA9ICdIJwotICAgIGVsc2U6Ci0gICAgICAgIGNvZGUgPSAnSScKLSAgICAjIENvbnZlcnQgYmxvY2sgaW5kaWNlcyB0byBieXRlIGFycmF5IG9mIDI1NiBieXRlcwotICAgIG1hcHBpbmcgPSBhcnJheS5hcnJheSgnQicsIG1hcHBpbmcpLnRvYnl0ZXMoKQotICAgICMgQ29udmVydCBieXRlIGFycmF5IHRvIHdvcmQgYXJyYXkKLSAgICBtYXBwaW5nID0gYXJyYXkuYXJyYXkoY29kZSwgbWFwcGluZykKLSAgICBhc3NlcnQgbWFwcGluZy5pdGVtc2l6ZSA9PSBfc3JlLkNPREVTSVpFCi0gICAgYXNzZXJ0IGxlbihtYXBwaW5nKSAqIG1hcHBpbmcuaXRlbXNpemUgPT0gMjU2Ci0gICAgaGVhZGVyID0gaGVhZGVyICsgbWFwcGluZy50b2xpc3QoKQotICAgIGRhdGFbMDowXSA9IGhlYWRlcgotICAgIHJldHVybiBbKEJJR0NIQVJTRVQsIGRhdGEpXQorICAgIGRhdGEgPSBieXRlYXJyYXkoKQorICAgIGZvciBpIGluIHJhbmdlKDAsIDY1NTM2LCAyNTYpOgorICAgICAgICBjaHVuayA9IGNoYXJtYXBbaTogaSArIDI1Nl0KKyAgICAgICAgaWYgY2h1bmsgaW4gY29tcHM6CisgICAgICAgICAgICBtYXBwaW5nW2kgLy8gMjU2XSA9IGNvbXBzW2NodW5rXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFwcGluZ1tpIC8vIDI1Nl0gPSBjb21wc1tjaHVua10gPSBibG9jaworICAgICAgICAgICAgYmxvY2sgKz0gMQorICAgICAgICAgICAgZGF0YSArPSBjaHVuaworICAgIGRhdGEgPSBfbWtfYml0bWFwKGRhdGEpCisgICAgZGF0YVswOjBdID0gW2Jsb2NrXSArIF9ieXRlc190b19jb2RlcyhtYXBwaW5nKQorICAgIG91dC5hcHBlbmQoKEJJR0NIQVJTRVQsIGRhdGEpKQorICAgIG91dCArPSB0YWlsCisgICAgcmV0dXJuIG91dAorCitfQ09ERUJJVFMgPSBfc3JlLkNPREVTSVpFICogOAorX0JJVFNfVFJBTlMgPSBiJzAnICsgYicxJyAqIDI1NQorZGVmIF9ta19iaXRtYXAoYml0cywgX0NPREVCSVRTPV9DT0RFQklUUywgX2ludD1pbnQpOgorICAgIHMgPSBiaXRzLnRyYW5zbGF0ZShfQklUU19UUkFOUylbOjotMV0KKyAgICByZXR1cm4gW19pbnQoc1tpIC0gX0NPREVCSVRTOiBpXSwgMikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzKSwgMCwgLV9DT0RFQklUUyldCisKK2RlZiBfYnl0ZXNfdG9fY29kZXMoYik6CisgICAgIyBDb252ZXJ0IGJsb2NrIGluZGljZXMgdG8gd29yZCBhcnJheQorICAgIGltcG9ydCBhcnJheQorICAgIGEgPSBhcnJheS5hcnJheSgnSScsIGIpCisgICAgYXNzZXJ0IGEuaXRlbXNpemUgPT0gX3NyZS5DT0RFU0laRQorICAgIGFzc2VydCBsZW4oYSkgKiBhLml0ZW1zaXplID09IGxlbihiKQorICAgIHJldHVybiBhLnRvbGlzdCgpCiAKIGRlZiBfc2ltcGxlKGF2KToKICAgICAjIGNoZWNrIGlmIGF2IGlzIGEgInNpbXBsZSIgb3BlcmF0b3IKICAgICBsbywgaGkgPSBhdlsyXS5nZXR3aWR0aCgpCiAgICAgcmV0dXJuIGxvID09IGhpID09IDEgYW5kIGF2WzJdWzBdWzBdICE9IFNVQlBBVFRFUk4KIAorZGVmIF9nZW5lcmF0ZV9vdmVybGFwX3RhYmxlKHByZWZpeCk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgYW4gb3ZlcmxhcCB0YWJsZSBmb3IgdGhlIGZvbGxvd2luZyBwcmVmaXguCisgICAgQW4gb3ZlcmxhcCB0YWJsZSBpcyBhIHRhYmxlIG9mIHRoZSBzYW1lIHNpemUgYXMgdGhlIHByZWZpeCB3aGljaAorICAgIGluZm9ybXMgYWJvdXQgdGhlIHBvdGVudGlhbCBzZWxmLW92ZXJsYXAgZm9yIGVhY2ggaW5kZXggaW4gdGhlIHByZWZpeDoKKyAgICAtIGlmIG92ZXJsYXBbaV0gPT0gMCwgcHJlZml4W2k6XSBjYW4ndCBvdmVybGFwIHByZWZpeFswOi4uLl0KKyAgICAtIGlmIG92ZXJsYXBbaV0gPT0gayB3aXRoIDAgPCBrIDw9IGksIHByZWZpeFtpLWsrMTppKzFdIG92ZXJsYXBzIHdpdGgKKyAgICAgIHByZWZpeFswOmtdCisgICAgIiIiCisgICAgdGFibGUgPSBbMF0gKiBsZW4ocHJlZml4KQorICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihwcmVmaXgpKToKKyAgICAgICAgaWR4ID0gdGFibGVbaSAtIDFdCisgICAgICAgIHdoaWxlIHByZWZpeFtpXSAhPSBwcmVmaXhbaWR4XToKKyAgICAgICAgICAgIGlmIGlkeCA9PSAwOgorICAgICAgICAgICAgICAgIHRhYmxlW2ldID0gMAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZHggPSB0YWJsZVtpZHggLSAxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFibGVbaV0gPSBpZHggKyAxCisgICAgcmV0dXJuIHRhYmxlCisKIGRlZiBfY29tcGlsZV9pbmZvKGNvZGUsIHBhdHRlcm4sIGZsYWdzKToKICAgICAjIGludGVybmFsOiBjb21waWxlIGFuIGluZm8gYmxvY2suICBpbiB0aGUgY3VycmVudCB2ZXJzaW9uLAogICAgICMgdGhpcyBjb250YWlucyBtaW4vbWF4IHBhdHRlcm4gd2lkdGgsIGFuZCBhbiBvcHRpb25hbCBsaXRlcmFsCkBAIC00NTUsMTIgKzQzNCw3IEBACiAgICAgICAgIGVtaXQocHJlZml4X3NraXApICMgc2tpcAogICAgICAgICBjb2RlLmV4dGVuZChwcmVmaXgpCiAgICAgICAgICMgZ2VuZXJhdGUgb3ZlcmxhcCB0YWJsZQotICAgICAgICB0YWJsZSA9IFstMV0gKyAoWzBdKmxlbihwcmVmaXgpKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocHJlZml4KSk6Ci0gICAgICAgICAgICB0YWJsZVtpKzFdID0gdGFibGVbaV0rMQotICAgICAgICAgICAgd2hpbGUgdGFibGVbaSsxXSA+IDAgYW5kIHByZWZpeFtpXSAhPSBwcmVmaXhbdGFibGVbaSsxXS0xXToKLSAgICAgICAgICAgICAgICB0YWJsZVtpKzFdID0gdGFibGVbdGFibGVbaSsxXS0xXSsxCi0gICAgICAgIGNvZGUuZXh0ZW5kKHRhYmxlWzE6XSkgIyBkb24ndCBzdG9yZSBmaXJzdCBlbnRyeQorICAgICAgICBjb2RlLmV4dGVuZChfZ2VuZXJhdGVfb3ZlcmxhcF90YWJsZShwcmVmaXgpKQogICAgIGVsaWYgY2hhcnNldDoKICAgICAgICAgX2NvbXBpbGVfY2hhcnNldChjaGFyc2V0LCBmbGFncywgY29kZSkKICAgICBjb2RlW3NraXBdID0gbGVuKGNvZGUpIC0gc2tpcApkaWZmIC0tZ2l0IGEvTGliL3NyZV9jb25zdGFudHMucHkgYi9MaWIvc3JlX2NvbnN0YW50cy5weQppbmRleCAzZmI1ZWFjLi4yM2UzNTE2IDEwMDY0NAotLS0gYS9MaWIvc3JlX2NvbnN0YW50cy5weQorKysgYi9MaWIvc3JlX2NvbnN0YW50cy5weQpAQCAtMTUsMTEgKzE1LDcgQEAKIAogTUFHSUMgPSAyMDAzMTAxNwogCi10cnk6Ci0gICAgZnJvbSBfc3JlIGltcG9ydCBNQVhSRVBFQVQKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpbXBvcnQgX3NyZQotICAgIE1BWFJFUEVBVCA9IF9zcmUuTUFYUkVQRUFUID0gNjU1MzUKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKICMgU1JFIHN0YW5kYXJkIGV4Y2VwdGlvbiAoYWNjZXNzIGFzIHNyZS5lcnJvcikKICMgc2hvdWxkIHRoaXMgcmVhbGx5IGJlIGhlcmU/CkBAIC0yNTQsNiArMjUwLDggQEAKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX0RPVEFMTCAlZFxuIiAlIFNSRV9GTEFHX0RPVEFMTCkKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX1VOSUNPREUgJWRcbiIgJSBTUkVfRkxBR19VTklDT0RFKQogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfVkVSQk9TRSAlZFxuIiAlIFNSRV9GTEFHX1ZFUkJPU0UpCisgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19ERUJVRyAlZFxuIiAlIFNSRV9GTEFHX0RFQlVHKQorICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfQVNDSUkgJWRcbiIgJSBTUkVfRkxBR19BU0NJSSkKIAogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0lORk9fUFJFRklYICVkXG4iICUgU1JFX0lORk9fUFJFRklYKQogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0lORk9fTElURVJBTCAlZFxuIiAlIFNSRV9JTkZPX0xJVEVSQUwpCmRpZmYgLS1naXQgYS9MaWIvc3JlX3BhcnNlLnB5IGIvTGliL3NyZV9wYXJzZS5weQppbmRleCA4YTc3NzkwLi42NTgzZWY2IDEwMDY0NAotLS0gYS9MaWIvc3JlX3BhcnNlLnB5CisrKyBiL0xpYi9zcmVfcGFyc2UucHkKQEAgLTE1LDYgKzE1LDcgQEAKIGltcG9ydCBzeXMKIAogZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqCitmcm9tIF9zcmUgaW1wb3J0IE1BWFJFUEVBVAogCiBTUEVDSUFMX0NIQVJTID0gIi5cXFt7KCkqKz9eJHwiCiBSRVBFQVRfQ0hBUlMgPSAiKis/eyIKQEAgLTc2OCwzNSArNzY5LDMzIEBACiAgICAgIyBncm91cCByZWZlcmVuY2VzCiAgICAgcyA9IFRva2VuaXplcihzb3VyY2UpCiAgICAgc2dldCA9IHMuZ2V0Ci0gICAgcCA9IFtdCi0gICAgYSA9IHAuYXBwZW5kCi0gICAgZGVmIGxpdGVyYWwobGl0ZXJhbCwgcD1wLCBwYXBwZW5kPWEpOgotICAgICAgICBpZiBwIGFuZCBwWy0xXVswXSBpcyBMSVRFUkFMOgotICAgICAgICAgICAgcFstMV0gPSBMSVRFUkFMLCBwWy0xXVsxXSArIGxpdGVyYWwKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhcHBlbmQoKExJVEVSQUwsIGxpdGVyYWwpKQotICAgIHNlcCA9IHNvdXJjZVs6MF0KLSAgICBpZiBpc2luc3RhbmNlKHNlcCwgc3RyKToKLSAgICAgICAgbWFrZWNoYXIgPSBjaHIKLSAgICBlbHNlOgotICAgICAgICBtYWtlY2hhciA9IGNocgotICAgIHdoaWxlIDE6CisgICAgZ3JvdXBzID0gW10KKyAgICBsaXRlcmFscyA9IFtdCisgICAgbGl0ZXJhbCA9IFtdCisgICAgbGFwcGVuZCA9IGxpdGVyYWwuYXBwZW5kCisgICAgZGVmIGFkZGdyb3VwKGluZGV4KToKKyAgICAgICAgaWYgbGl0ZXJhbDoKKyAgICAgICAgICAgIGxpdGVyYWxzLmFwcGVuZCgnJy5qb2luKGxpdGVyYWwpKQorICAgICAgICAgICAgZGVsIGxpdGVyYWxbOl0KKyAgICAgICAgZ3JvdXBzLmFwcGVuZCgobGVuKGxpdGVyYWxzKSwgaW5kZXgpKQorICAgICAgICBsaXRlcmFscy5hcHBlbmQoTm9uZSkKKyAgICB3aGlsZSBUcnVlOgogICAgICAgICB0aGlzID0gc2dldCgpCiAgICAgICAgIGlmIHRoaXMgaXMgTm9uZToKICAgICAgICAgICAgIGJyZWFrICMgZW5kIG9mIHJlcGxhY2VtZW50IHN0cmluZwotICAgICAgICBpZiB0aGlzIGFuZCB0aGlzWzBdID09ICJcXCI6CisgICAgICAgIGlmIHRoaXNbMF0gPT0gIlxcIjoKICAgICAgICAgICAgICMgZ3JvdXAKLSAgICAgICAgICAgIGMgPSB0aGlzWzE6Ml0KKyAgICAgICAgICAgIGMgPSB0aGlzWzFdCiAgICAgICAgICAgICBpZiBjID09ICJnIjoKICAgICAgICAgICAgICAgICBuYW1lID0gIiIKICAgICAgICAgICAgICAgICBpZiBzLm1hdGNoKCI8Iik6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyID0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInVudGVybWluYXRlZCBncm91cCBuYW1lIikKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgPT0gIj4iOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZSArIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gY2hhcgogICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigibWlzc2luZyBncm91cCBuYW1lIikKICAgICAgICAgICAgICAgICB0cnk6CkBAIC04MTAsNTAgKzgwOSwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwYXR0ZXJuLmdyb3VwaW5kZXhbbmFtZV0KICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcigidW5rbm93biBncm91cCBuYW1lIikKLSAgICAgICAgICAgICAgICBhKChNQVJLLCBpbmRleCkpCisgICAgICAgICAgICAgICAgYWRkZ3JvdXAoaW5kZXgpCiAgICAgICAgICAgICBlbGlmIGMgPT0gIjAiOgogICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBPQ1RESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBPQ1RESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzID0gdGhpcyArIHNnZXQoKQotICAgICAgICAgICAgICAgIGxpdGVyYWwobWFrZWNoYXIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyArPSBzZ2V0KCkKKyAgICAgICAgICAgICAgICBsYXBwZW5kKGNocihpbnQodGhpc1sxOl0sIDgpICYgMHhmZikpCiAgICAgICAgICAgICBlbGlmIGMgaW4gRElHSVRTOgogICAgICAgICAgICAgICAgIGlzb2N0YWwgPSBGYWxzZQogICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIChjIGluIE9DVERJR0lUUyBhbmQgdGhpc1syXSBpbiBPQ1RESUdJVFMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICBzLm5leHQgaW4gT0NURElHSVRTKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzICs9IHNnZXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgaXNvY3RhbCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwobWFrZWNoYXIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGFwcGVuZChjaHIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQogICAgICAgICAgICAgICAgIGlmIG5vdCBpc29jdGFsOgotICAgICAgICAgICAgICAgICAgICBhKChNQVJLLCBpbnQodGhpc1sxOl0pKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkZ3JvdXAoaW50KHRoaXNbMTpdKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0aGlzID0gbWFrZWNoYXIoRVNDQVBFU1t0aGlzXVsxXSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcyA9IGNocihFU0NBUEVTW3RoaXNdWzFdKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGxpdGVyYWwodGhpcykKKyAgICAgICAgICAgICAgICBsYXBwZW5kKHRoaXMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaXRlcmFsKHRoaXMpCi0gICAgIyBjb252ZXJ0IHRlbXBsYXRlIHRvIGdyb3VwcyBhbmQgbGl0ZXJhbHMgbGlzdHMKLSAgICBpID0gMAotICAgIGdyb3VwcyA9IFtdCi0gICAgZ3JvdXBzYXBwZW5kID0gZ3JvdXBzLmFwcGVuZAotICAgIGxpdGVyYWxzID0gW05vbmVdICogbGVuKHApCi0gICAgaWYgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6Ci0gICAgICAgIGVuY29kZSA9IGxhbWJkYSB4OiB4Ci0gICAgZWxzZToKKyAgICAgICAgICAgIGxhcHBlbmQodGhpcykKKyAgICBpZiBsaXRlcmFsOgorICAgICAgICBsaXRlcmFscy5hcHBlbmQoJycuam9pbihsaXRlcmFsKSkKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6CiAgICAgICAgICMgVGhlIHRva2VuaXplciBpbXBsaWNpdGx5IGRlY29kZXMgYnl0ZXMgb2JqZWN0cyBhcyBsYXRpbi0xLCB3ZSBtdXN0CiAgICAgICAgICMgdGhlcmVmb3JlIHJlLWVuY29kZSB0aGUgZmluYWwgcmVwcmVzZW50YXRpb24uCi0gICAgICAgIGVuY29kZSA9IGxhbWJkYSB4OiB4LmVuY29kZSgnbGF0aW4tMScpCi0gICAgZm9yIGMsIHMgaW4gcDoKLSAgICAgICAgaWYgYyBpcyBNQVJLOgotICAgICAgICAgICAgZ3JvdXBzYXBwZW5kKChpLCBzKSkKLSAgICAgICAgICAgICMgbGl0ZXJhbFtpXSBpcyBhbHJlYWR5IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpdGVyYWxzW2ldID0gZW5jb2RlKHMpCi0gICAgICAgIGkgPSBpICsgMQorICAgICAgICBsaXRlcmFscyA9IFtOb25lIGlmIHMgaXMgTm9uZSBlbHNlIHMuZW5jb2RlKCdsYXRpbi0xJykgZm9yIHMgaW4gbGl0ZXJhbHNdCiAgICAgcmV0dXJuIGdyb3VwcywgbGl0ZXJhbHMKIAogZGVmIGV4cGFuZF90ZW1wbGF0ZSh0ZW1wbGF0ZSwgbWF0Y2gpOgpkaWZmIC0tZ2l0IGEvTGliL3NzbC5weSBiL0xpYi9zc2wucHkKaW5kZXggY2Q4ZDZiNC4uNDQwOGU3YiAxMDA2NDQKLS0tIGEvTGliL3NzbC5weQorKysgYi9MaWIvc3NsLnB5CkBAIC01MiwxMCArNTIsNDcgQEAKIFBST1RPQ09MX1NTTHYzCiBQUk9UT0NPTF9TU0x2MjMKIFBST1RPQ09MX1RMU3YxCitQUk9UT0NPTF9UTFN2MV8xCitQUk9UT0NPTF9UTFN2MV8yCisKK1RoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGlkZW50aWZ5IHZhcmlvdXMgU1NMIGFsZXJ0IG1lc3NhZ2UgZGVzY3JpcHRpb25zIGFzIHBlcgoraHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWwjdGxzLXBhcmFtZXRlcnMtNgorCitBTEVSVF9ERVNDUklQVElPTl9DTE9TRV9OT1RJRlkKK0FMRVJUX0RFU0NSSVBUSU9OX1VORVhQRUNURURfTUVTU0FHRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX1JFQ09SRF9NQUMKK0FMRVJUX0RFU0NSSVBUSU9OX1JFQ09SRF9PVkVSRkxPVworQUxFUlRfREVTQ1JJUFRJT05fREVDT01QUkVTU0lPTl9GQUlMVVJFCitBTEVSVF9ERVNDUklQVElPTl9IQU5EU0hBS0VfRkFJTFVSRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFCitBTEVSVF9ERVNDUklQVElPTl9VTlNVUFBPUlRFRF9DRVJUSUZJQ0FURQorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfUkVWT0tFRAorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfRVhQSVJFRAorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfVU5LTk9XTgorQUxFUlRfREVTQ1JJUFRJT05fSUxMRUdBTF9QQVJBTUVURVIKK0FMRVJUX0RFU0NSSVBUSU9OX1VOS05PV05fQ0EKK0FMRVJUX0RFU0NSSVBUSU9OX0FDQ0VTU19ERU5JRUQKK0FMRVJUX0RFU0NSSVBUSU9OX0RFQ09ERV9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fREVDUllQVF9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fUFJPVE9DT0xfVkVSU0lPTgorQUxFUlRfREVTQ1JJUFRJT05fSU5TVUZGSUNJRU5UX1NFQ1VSSVRZCitBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fVVNFUl9DQU5DRUxMRUQKK0FMRVJUX0RFU0NSSVBUSU9OX05PX1JFTkVHT1RJQVRJT04KK0FMRVJUX0RFU0NSSVBUSU9OX1VOU1VQUE9SVEVEX0VYVEVOU0lPTgorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFCitBTEVSVF9ERVNDUklQVElPTl9VTlJFQ09HTklaRURfTkFNRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUKK0FMRVJUX0RFU0NSSVBUSU9OX1VOS05PV05fUFNLX0lERU5USVRZCiAiIiIKIAogaW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorZnJvbSBlbnVtIGltcG9ydCBFbnVtIGFzIF9FbnVtCiAKIGltcG9ydCBfc3NsICAgICAgICAgICAgICMgaWYgd2UgY2FuJ3QgaW1wb3J0IGl0LCBsZXQgdGhlIGVycm9yIHByb3BhZ2F0ZQogCkBAIC02NiwzNSArMTAzLDI2IEBACiAgICAgU1NMU3lzY2FsbEVycm9yLCBTU0xFT0ZFcnJvciwKICAgICApCiBmcm9tIF9zc2wgaW1wb3J0IENFUlRfTk9ORSwgQ0VSVF9PUFRJT05BTCwgQ0VSVF9SRVFVSVJFRAotZnJvbSBfc3NsIGltcG9ydCAoCi0gICAgT1BfQUxMLCBPUF9OT19TU0x2MiwgT1BfTk9fU1NMdjMsIE9QX05PX1RMU3YxLAotICAgIE9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSwgT1BfU0lOR0xFX0RIX1VTRQotICAgICkKLXRyeToKLSAgICBmcm9tIF9zc2wgaW1wb3J0IE9QX05PX0NPTVBSRVNTSU9OCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotdHJ5OgotICAgIGZyb20gX3NzbCBpbXBvcnQgT1BfU0lOR0xFX0VDREhfVVNFCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcworZnJvbSBfc3NsIGltcG9ydCAoVkVSSUZZX0RFRkFVTFQsIFZFUklGWV9DUkxfQ0hFQ0tfTEVBRiwgVkVSSUZZX0NSTF9DSEVDS19DSEFJTiwKKyAgICBWRVJJRllfWDUwOV9TVFJJQ1QpCitmcm9tIF9zc2wgaW1wb3J0IHR4dDJvYmogYXMgX3R4dDJvYmosIG5pZDJvYmogYXMgX25pZDJvYmoKIGZyb20gX3NzbCBpbXBvcnQgUkFORF9zdGF0dXMsIFJBTkRfZWdkLCBSQU5EX2FkZCwgUkFORF9ieXRlcywgUkFORF9wc2V1ZG9fYnl0ZXMKLWZyb20gX3NzbCBpbXBvcnQgKAotICAgIFNTTF9FUlJPUl9aRVJPX1JFVFVSTiwKLSAgICBTU0xfRVJST1JfV0FOVF9SRUFELAotICAgIFNTTF9FUlJPUl9XQU5UX1dSSVRFLAotICAgIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQLAotICAgIFNTTF9FUlJPUl9TWVNDQUxMLAotICAgIFNTTF9FUlJPUl9TU0wsCi0gICAgU1NMX0VSUk9SX1dBTlRfQ09OTkVDVCwKLSAgICBTU0xfRVJST1JfRU9GLAotICAgIFNTTF9FUlJPUl9JTlZBTElEX0VSUk9SX0NPREUsCi0gICAgKQorCitkZWYgX2ltcG9ydF9zeW1ib2xzKHByZWZpeCk6CisgICAgZm9yIG4gaW4gZGlyKF9zc2wpOgorICAgICAgICBpZiBuLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgIGdsb2JhbHMoKVtuXSA9IGdldGF0dHIoX3NzbCwgbikKKworX2ltcG9ydF9zeW1ib2xzKCdPUF8nKQorX2ltcG9ydF9zeW1ib2xzKCdBTEVSVF9ERVNDUklQVElPTl8nKQorX2ltcG9ydF9zeW1ib2xzKCdTU0xfRVJST1JfJykKKwogZnJvbSBfc3NsIGltcG9ydCBIQVNfU05JLCBIQVNfRUNESCwgSEFTX05QTgotZnJvbSBfc3NsIGltcG9ydCAoUFJPVE9DT0xfU1NMdjMsIFBST1RPQ09MX1NTTHYyMywKLSAgICAgICAgICAgICAgICAgIFBST1RPQ09MX1RMU3YxKQorCitmcm9tIF9zc2wgaW1wb3J0IFBST1RPQ09MX1NTTHYzLCBQUk9UT0NPTF9TU0x2MjMsIFBST1RPQ09MX1RMU3YxCiBmcm9tIF9zc2wgaW1wb3J0IF9PUEVOU1NMX0FQSV9WRVJTSU9OCiAKKwogX1BST1RPQ09MX05BTUVTID0gewogICAgIFBST1RPQ09MX1RMU3YxOiAiVExTdjEiLAogICAgIFBST1RPQ09MX1NTTHYyMzogIlNTTHYyMyIsCkBAIC0xMDgsMTQgKzEzNiwyOCBAQAogZWxzZToKICAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfU1NMdjJdID0gIlNTTHYyIgogCit0cnk6CisgICAgZnJvbSBfc3NsIGltcG9ydCBQUk9UT0NPTF9UTFN2MV8xLCBQUk9UT0NPTF9UTFN2MV8yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMV0gPSAiVExTdjEuMSIKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMl0gPSAiVExTdjEuMiIKKworaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgZnJvbSBfc3NsIGltcG9ydCBlbnVtX2NlcnRpZmljYXRlcywgZW51bV9jcmxzCisKIGZyb20gc29ja2V0IGltcG9ydCBnZXRuYW1laW5mbyBhcyBfZ2V0bmFtZWluZm8KLWZyb20gc29ja2V0IGltcG9ydCBlcnJvciBhcyBzb2NrZXRfZXJyb3IKK2Zyb20gc29ja2V0IGltcG9ydCBTSFVUX1JEV1IgYXMgX1NIVVRfUkRXUgogZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldCwgQUZfSU5FVCwgU09DS19TVFJFQU0sIGNyZWF0ZV9jb25uZWN0aW9uCiBmcm9tIHNvY2tldCBpbXBvcnQgU09MX1NPQ0tFVCwgU09fVFlQRQogaW1wb3J0IGJhc2U2NCAgICAgICAgIyBmb3IgREVSLXRvLVBFTSB0cmFuc2xhdGlvbgogaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IGVycm5vCiAKKworc29ja2V0X2Vycm9yID0gT1NFcnJvciAgIyBrZWVwIHRoYXQgcHVibGljIG5hbWUgaW4gbW9kdWxlIG5hbWVzcGFjZQorCiBpZiBfc3NsLkhBU19UTFNfVU5JUVVFOgogICAgIENIQU5ORUxfQklORElOR19UWVBFUyA9IFsndGxzLXVuaXF1ZSddCiBlbHNlOgpAQCAtMTI1LDYgKzE2NywxMyBAQAogIyAoT3BlblNTTCdzIGRlZmF1bHQgc2V0dGluZyBpcyAnREVGQVVMVDohYU5VTEw6IWVOVUxMJykKIF9ERUZBVUxUX0NJUEhFUlMgPSAnREVGQVVMVDohYU5VTEw6IWVOVUxMOiFMT1c6IUVYUE9SVDohU1NMdjInCiAKKyMgcmVzdHJpY3RlZCBhbmQgbW9yZSBzZWN1cmUgY2lwaGVycworIyBISUdIOiBoaWdoIGVuY3J5cHRpb24gY2lwaGVyIHN1aXRlcyB3aXRoIGtleSBsZW5ndGggPj0gMTI4IGJpdHMgKG5vIE1ENSkKKyMgIWFOVUxMOiBvbmx5IGF1dGhlbnRpY2F0ZWQgY2lwaGVyIHN1aXRlcyAobm8gYW5vbnltb3VzIERIKQorIyAhUkM0OiBubyBSQzQgc3RyZWFtaW5nIGNpcGhlciwgUkM0IGlzIGJyb2tlbgorIyAhRFNTOiBSU0EgaXMgcHJlZmVycmVkIG92ZXIgRFNBCitfUkVTVFJJQ1RFRF9DSVBIRVJTID0gJ0hJR0g6IWFOVUxMOiFSQzQ6IURTUycKKwogCiBjbGFzcyBDZXJ0aWZpY2F0ZUVycm9yKFZhbHVlRXJyb3IpOgogICAgIHBhc3MKQEAgLTE4OCw3ICsyMzcsOSBAQAogICAgIHJldHVybnMgbm90aGluZy4KICAgICAiIiIKICAgICBpZiBub3QgY2VydDoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZW1wdHkgb3Igbm8gY2VydGlmaWNhdGUiKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJlbXB0eSBvciBubyBjZXJ0aWZpY2F0ZSwgbWF0Y2hfaG9zdG5hbWUgbmVlZHMgYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNTTCBzb2NrZXQgb3IgU1NMIGNvbnRleHQgd2l0aCBlaXRoZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJDRVJUX09QVElPTkFMIG9yIENFUlRfUkVRVUlSRUQiKQogICAgIGRuc25hbWVzID0gW10KICAgICBzYW4gPSBjZXJ0LmdldCgnc3ViamVjdEFsdE5hbWUnLCAoKSkKICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzYW46CkBAIC0yMjAsMTEgKzI3MSw1OCBAQAogICAgICAgICAgICAgInN1YmplY3RBbHROYW1lIGZpZWxkcyB3ZXJlIGZvdW5kIikKIAogCitEZWZhdWx0VmVyaWZ5UGF0aHMgPSBuYW1lZHR1cGxlKCJEZWZhdWx0VmVyaWZ5UGF0aHMiLAorICAgICJjYWZpbGUgY2FwYXRoIG9wZW5zc2xfY2FmaWxlX2VudiBvcGVuc3NsX2NhZmlsZSBvcGVuc3NsX2NhcGF0aF9lbnYgIgorICAgICJvcGVuc3NsX2NhcGF0aCIpCisKK2RlZiBnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKToKKyAgICAiIiJSZXR1cm4gcGF0aHMgdG8gZGVmYXVsdCBjYWZpbGUgYW5kIGNhcGF0aC4KKyAgICAiIiIKKyAgICBwYXJ0cyA9IF9zc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKworICAgICMgZW52aXJvbm1lbnQgdmFycyBzaGFkb3cgcGF0aHMKKyAgICBjYWZpbGUgPSBvcy5lbnZpcm9uLmdldChwYXJ0c1swXSwgcGFydHNbMV0pCisgICAgY2FwYXRoID0gb3MuZW52aXJvbi5nZXQocGFydHNbMl0sIHBhcnRzWzNdKQorCisgICAgcmV0dXJuIERlZmF1bHRWZXJpZnlQYXRocyhjYWZpbGUgaWYgb3MucGF0aC5pc2ZpbGUoY2FmaWxlKSBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhdGggaWYgb3MucGF0aC5pc2RpcihjYXBhdGgpIGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJ0cykKKworCitjbGFzcyBfQVNOMU9iamVjdChuYW1lZHR1cGxlKCJfQVNOMU9iamVjdCIsICJuaWQgc2hvcnRuYW1lIGxvbmduYW1lIG9pZCIpKToKKyAgICAiIiJBU04uMSBvYmplY3QgaWRlbnRpZmllciBsb29rdXAKKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCBvaWQpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscywgKl90eHQyb2JqKG9pZCwgbmFtZT1GYWxzZSkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbW5pZChjbHMsIG5pZCk6CisgICAgICAgICIiIkNyZWF0ZSBfQVNOMU9iamVjdCBmcm9tIE9wZW5TU0wgbnVtZXJpYyBJRAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19uZXdfXyhjbHMsICpfbmlkMm9iaihuaWQpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21uYW1lKGNscywgbmFtZSk6CisgICAgICAgICIiIkNyZWF0ZSBfQVNOMU9iamVjdCBmcm9tIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBvciBPSUQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18oY2xzLCAqX3R4dDJvYmoobmFtZSwgbmFtZT1UcnVlKSkKKworCitjbGFzcyBQdXJwb3NlKF9BU04xT2JqZWN0LCBfRW51bSk6CisgICAgIiIiU1NMQ29udGV4dCBwdXJwb3NlIGZsYWdzIHdpdGggWDUwOXYzIEV4dGVuZGVkIEtleSBVc2FnZSBvYmplY3RzCisgICAgIiIiCisgICAgU0VSVkVSX0FVVEggPSAnMS4zLjYuMS41LjUuNy4zLjEnCisgICAgQ0xJRU5UX0FVVEggPSAnMS4zLjYuMS41LjUuNy4zLjInCisKKwogY2xhc3MgU1NMQ29udGV4dChfU1NMQ29udGV4dCk6CiAgICAgIiIiQW4gU1NMQ29udGV4dCBob2xkcyB2YXJpb3VzIFNTTC1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQKICAgICBkYXRhLCBzdWNoIGFzIGNlcnRpZmljYXRlcyBhbmQgcG9zc2libHkgYSBwcml2YXRlIGtleS4iIiIKIAotICAgIF9fc2xvdHNfXyA9ICgncHJvdG9jb2wnLCkKKyAgICBfX3Nsb3RzX18gPSAoJ3Byb3RvY29sJywgJ19fd2Vha3JlZl9fJykKKyAgICBfd2luZG93c19jZXJ0X3N0b3JlcyA9ICgiQ0EiLCAiUk9PVCIpCiAKICAgICBkZWYgX19uZXdfXyhjbHMsIHByb3RvY29sLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzZWxmID0gX1NTTENvbnRleHQuX19uZXdfXyhjbHMsIHByb3RvY29sKQpAQCAtMjU2LDYgKzM1NCw5NCBAQAogCiAgICAgICAgIHNlbGYuX3NldF9ucG5fcHJvdG9jb2xzKHByb3RvcykKIAorICAgIGRlZiBfbG9hZF93aW5kb3dzX3N0b3JlX2NlcnRzKHNlbGYsIHN0b3JlbmFtZSwgcHVycG9zZSk6CisgICAgICAgIGNlcnRzID0gYnl0ZWFycmF5KCkKKyAgICAgICAgZm9yIGNlcnQsIGVuY29kaW5nLCB0cnVzdCBpbiBlbnVtX2NlcnRpZmljYXRlcyhzdG9yZW5hbWUpOgorICAgICAgICAgICAgIyBDQSBjZXJ0cyBhcmUgbmV2ZXIgUEtDUyM3IGVuY29kZWQKKyAgICAgICAgICAgIGlmIGVuY29kaW5nID09ICJ4NTA5X2FzbiI6CisgICAgICAgICAgICAgICAgaWYgdHJ1c3QgaXMgVHJ1ZSBvciBwdXJwb3NlLm9pZCBpbiB0cnVzdDoKKyAgICAgICAgICAgICAgICAgICAgY2VydHMuZXh0ZW5kKGNlcnQpCisgICAgICAgIHNlbGYubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jZXJ0cykKKyAgICAgICAgcmV0dXJuIGNlcnRzCisKKyAgICBkZWYgbG9hZF9kZWZhdWx0X2NlcnRzKHNlbGYsIHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHB1cnBvc2UsIF9BU04xT2JqZWN0KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihwdXJwb3NlKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgIGZvciBzdG9yZW5hbWUgaW4gc2VsZi5fd2luZG93c19jZXJ0X3N0b3JlczoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2FkX3dpbmRvd3Nfc3RvcmVfY2VydHMoc3RvcmVuYW1lLCBwdXJwb3NlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9jb250ZXh0KHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCwgKiwgY2FmaWxlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhdGg9Tm9uZSwgY2FkYXRhPU5vbmUpOgorICAgICIiIkNyZWF0ZSBhIFNTTENvbnRleHQgb2JqZWN0IHdpdGggZGVmYXVsdCBzZXR0aW5ncy4KKworICAgIE5PVEU6IFRoZSBwcm90b2NvbCBhbmQgc2V0dGluZ3MgbWF5IGNoYW5nZSBhbnl0aW1lIHdpdGhvdXQgcHJpb3IKKyAgICAgICAgICBkZXByZWNhdGlvbi4gVGhlIHZhbHVlcyByZXByZXNlbnQgYSBmYWlyIGJhbGFuY2UgYmV0d2VlbiBtYXhpbXVtCisgICAgICAgICAgY29tcGF0aWJpbGl0eSBhbmQgc2VjdXJpdHkuCisgICAgIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2UocHVycG9zZSwgX0FTTjFPYmplY3QpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IocHVycG9zZSkKKyAgICBjb250ZXh0ID0gU1NMQ29udGV4dChQUk9UT0NPTF9UTFN2MSkKKyAgICAjIFNTTHYyIGNvbnNpZGVyZWQgaGFybWZ1bC4KKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gT1BfTk9fU1NMdjIKKyAgICAjIGRpc2FibGUgY29tcHJlc3Npb24gdG8gcHJldmVudCBDUklNRSBhdHRhY2tzIChPcGVuU1NMIDEuMCspCisgICAgY29udGV4dC5vcHRpb25zIHw9IGdldGF0dHIoX3NzbCwgIk9QX05PX0NPTVBSRVNTSU9OIiwgMCkKKyAgICAjIGRpc2FsbG93IGNpcGhlcnMgd2l0aCBrbm93biB2dWxuZXJhYmlsaXRpZXMKKyAgICBjb250ZXh0LnNldF9jaXBoZXJzKF9SRVNUUklDVEVEX0NJUEhFUlMpCisgICAgIyB2ZXJpZnkgY2VydHMgYW5kIGhvc3QgbmFtZSBpbiBjbGllbnQgbW9kZQorICAgIGlmIHB1cnBvc2UgPT0gUHVycG9zZS5TRVJWRVJfQVVUSDoKKyAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IENFUlRfUkVRVUlSRUQKKyAgICAgICAgY29udGV4dC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICBpZiBjYWZpbGUgb3IgY2FwYXRoIG9yIGNhZGF0YToKKyAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlLCBjYXBhdGgsIGNhZGF0YSkKKyAgICBlbGlmIGNvbnRleHQudmVyaWZ5X21vZGUgIT0gQ0VSVF9OT05FOgorICAgICAgICAjIG5vIGV4cGxpY2l0IGNhZmlsZSwgY2FwYXRoIG9yIGNhZGF0YSBidXQgdGhlIHZlcmlmeSBtb2RlIGlzCisgICAgICAgICMgQ0VSVF9PUFRJT05BTCBvciBDRVJUX1JFUVVJUkVELiBMZXQncyB0cnkgdG8gbG9hZCBkZWZhdWx0IHN5c3RlbQorICAgICAgICAjIHJvb3QgQ0EgY2VydGlmaWNhdGVzIGZvciB0aGUgZ2l2ZW4gcHVycG9zZS4gVGhpcyBtYXkgZmFpbCBzaWxlbnRseS4KKyAgICAgICAgY29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMocHVycG9zZSkKKyAgICByZXR1cm4gY29udGV4dAorCisKK2RlZiBfY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHByb3RvY29sPVBST1RPQ09MX1NTTHYyMywgKiwgY2VydF9yZXFzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZT1GYWxzZSwgcHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Tm9uZSwga2V5ZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSk6CisgICAgIiIiQ3JlYXRlIGEgU1NMQ29udGV4dCBvYmplY3QgZm9yIFB5dGhvbiBzdGRsaWIgbW9kdWxlcworCisgICAgQWxsIFB5dGhvbiBzdGRsaWIgbW9kdWxlcyBzaGFsbCB1c2UgdGhpcyBmdW5jdGlvbiB0byBjcmVhdGUgU1NMQ29udGV4dAorICAgIG9iamVjdHMgaW4gb3JkZXIgdG8ga2VlcCBjb21tb24gc2V0dGluZ3MgaW4gb25lIHBsYWNlLiBUaGUgY29uZmlndXJhdGlvbgorICAgIGlzIGxlc3MgcmVzdHJpY3QgdGhhbiBjcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkncyB0byBpbmNyZWFzZSBiYWNrd2FyZAorICAgIGNvbXBhdGliaWxpdHkuCisgICAgIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2UocHVycG9zZSwgX0FTTjFPYmplY3QpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IocHVycG9zZSkKKworICAgIGNvbnRleHQgPSBTU0xDb250ZXh0KHByb3RvY29sKQorICAgICMgU1NMdjIgY29uc2lkZXJlZCBoYXJtZnVsLgorICAgIGNvbnRleHQub3B0aW9ucyB8PSBPUF9OT19TU0x2MgorCisgICAgaWYgY2VydF9yZXFzIGlzIG5vdCBOb25lOgorICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gY2VydF9yZXFzCisgICAgY29udGV4dC5jaGVja19ob3N0bmFtZSA9IGNoZWNrX2hvc3RuYW1lCisKKyAgICBpZiBrZXlmaWxlIGFuZCBub3QgY2VydGZpbGU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNlcnRmaWxlIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICBpZiBjZXJ0ZmlsZSBvciBrZXlmaWxlOgorICAgICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKKworICAgICMgbG9hZCBDQSByb290IGNlcnRzCisgICAgaWYgY2FmaWxlIG9yIGNhcGF0aCBvciBjYWRhdGE6CisgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZSwgY2FwYXRoLCBjYWRhdGEpCisgICAgZWxpZiBjb250ZXh0LnZlcmlmeV9tb2RlICE9IENFUlRfTk9ORToKKyAgICAgICAgIyBubyBleHBsaWNpdCBjYWZpbGUsIGNhcGF0aCBvciBjYWRhdGEgYnV0IHRoZSB2ZXJpZnkgbW9kZSBpcworICAgICAgICAjIENFUlRfT1BUSU9OQUwgb3IgQ0VSVF9SRVFVSVJFRC4gTGV0J3MgdHJ5IHRvIGxvYWQgZGVmYXVsdCBzeXN0ZW0KKyAgICAgICAgIyByb290IENBIGNlcnRpZmljYXRlcyBmb3IgdGhlIGdpdmVuIHB1cnBvc2UuIFRoaXMgbWF5IGZhaWwgc2lsZW50bHkuCisgICAgICAgIGNvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKHB1cnBvc2UpCisKKyAgICByZXR1cm4gY29udGV4dAogCiBjbGFzcyBTU0xTb2NrZXQoc29ja2V0KToKICAgICAiIiJUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBzdWJ0eXBlIG9mIHNvY2tldC5zb2NrZXQgdGhhdCB3cmFwcwpAQCAtMjcyLDcgKzQ1OCw3IEBACiAgICAgICAgICAgICAgICAgIF9jb250ZXh0PU5vbmUpOgogCiAgICAgICAgIGlmIF9jb250ZXh0OgotICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gX2NvbnRleHQKKyAgICAgICAgICAgIHNlbGYuX2NvbnRleHQgPSBfY29udGV4dAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgc2VydmVyX3NpZGUgYW5kIG5vdCBjZXJ0ZmlsZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjZXJ0ZmlsZSBtdXN0IGJlIHNwZWNpZmllZCBmb3Igc2VydmVyLXNpZGUgIgpAQCAtMjgxLDE2ICs0NjcsMTYgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjZXJ0ZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpCiAgICAgICAgICAgICBpZiBjZXJ0ZmlsZSBhbmQgbm90IGtleWZpbGU6CiAgICAgICAgICAgICAgICAga2V5ZmlsZSA9IGNlcnRmaWxlCi0gICAgICAgICAgICBzZWxmLmNvbnRleHQgPSBTU0xDb250ZXh0KHNzbF92ZXJzaW9uKQotICAgICAgICAgICAgc2VsZi5jb250ZXh0LnZlcmlmeV9tb2RlID0gY2VydF9yZXFzCisgICAgICAgICAgICBzZWxmLl9jb250ZXh0ID0gU1NMQ29udGV4dChzc2xfdmVyc2lvbikKKyAgICAgICAgICAgIHNlbGYuX2NvbnRleHQudmVyaWZ5X21vZGUgPSBjZXJ0X3JlcXMKICAgICAgICAgICAgIGlmIGNhX2NlcnRzOgotICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FfY2VydHMpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FfY2VydHMpCiAgICAgICAgICAgICBpZiBjZXJ0ZmlsZToKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlLCBrZXlmaWxlKQorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlLCBrZXlmaWxlKQogICAgICAgICAgICAgaWYgbnBuX3Byb3RvY29sczoKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQuc2V0X25wbl9wcm90b2NvbHMobnBuX3Byb3RvY29scykKKyAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LnNldF9ucG5fcHJvdG9jb2xzKG5wbl9wcm90b2NvbHMpCiAgICAgICAgICAgICBpZiBjaXBoZXJzOgotICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5zZXRfY2lwaGVycyhjaXBoZXJzKQorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRleHQuc2V0X2NpcGhlcnMoY2lwaGVycykKICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0X3JlcXMgPSBjZXJ0X3JlcXMKQEAgLTMwNCwxMSArNDkwLDE3IEBACiAgICAgICAgIGlmIHNlcnZlcl9zaWRlIGFuZCBzZXJ2ZXJfaG9zdG5hbWU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzZXJ2ZXJfaG9zdG5hbWUgY2FuIG9ubHkgYmUgc3BlY2lmaWVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIGNsaWVudCBtb2RlIikKKyAgICAgICAgaWYgc2VsZi5fY29udGV4dC5jaGVja19ob3N0bmFtZSBhbmQgbm90IHNlcnZlcl9ob3N0bmFtZToKKyAgICAgICAgICAgIGlmIEhBU19TTkk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2hlY2tfaG9zdG5hbWUgcmVxdWlyZXMgc2VydmVyX2hvc3RuYW1lIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2hlY2tfaG9zdG5hbWUgcmVxdWlyZXMgc2VydmVyX2hvc3RuYW1lLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IGl0J3Mgbm90IHN1cHBvcnRlZCBieSB5b3VyIE9wZW5TU0wgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnkiKQogICAgICAgICBzZWxmLnNlcnZlcl9zaWRlID0gc2VydmVyX3NpZGUKICAgICAgICAgc2VsZi5zZXJ2ZXJfaG9zdG5hbWUgPSBzZXJ2ZXJfaG9zdG5hbWUKICAgICAgICAgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdCA9IGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0CiAgICAgICAgIHNlbGYuc3VwcHJlc3NfcmFnZ2VkX2VvZnMgPSBzdXBwcmVzc19yYWdnZWRfZW9mcwotICAgICAgICBjb25uZWN0ZWQgPSBGYWxzZQogICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc29ja2V0Ll9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PXNvY2suZmFtaWx5LApAQCAtMzE2LDI3ICs1MDgsMjkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bz1zb2NrLnByb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVubz1zb2NrLmZpbGVubygpKQogICAgICAgICAgICAgc2VsZi5zZXR0aW1lb3V0KHNvY2suZ2V0dGltZW91dCgpKQotICAgICAgICAgICAgIyBzZWUgaWYgaXQncyBjb25uZWN0ZWQKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb2NrLmdldHBlZXJuYW1lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSBUcnVlCiAgICAgICAgICAgICBzb2NrLmRldGFjaCgpCiAgICAgICAgIGVsaWYgZmlsZW5vIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc29ja2V0Ll9faW5pdF9fKHNlbGYsIGZpbGVubz1maWxlbm8pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzb2NrZXQuX19pbml0X18oc2VsZiwgZmFtaWx5PWZhbWlseSwgdHlwZT10eXBlLCBwcm90bz1wcm90bykKIAorICAgICAgICAjIFNlZSBpZiB3ZSBhcmUgY29ubmVjdGVkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZ2V0cGVlcm5hbWUoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgY29ubmVjdGVkID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbm5lY3RlZCA9IFRydWUKKwogICAgICAgICBzZWxmLl9jbG9zZWQgPSBGYWxzZQogICAgICAgICBzZWxmLl9zc2xvYmogPSBOb25lCiAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IGNvbm5lY3RlZAogICAgICAgICBpZiBjb25uZWN0ZWQ6CiAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgU1NMIG9iamVjdAogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IHNlbGYuY29udGV4dC5fd3JhcF9zb2NrZXQoc2VsZiwgc2VydmVyX3NpZGUsCisgICAgICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gc2VsZi5fY29udGV4dC5fd3JhcF9zb2NrZXQoc2VsZiwgc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUpCiAgICAgICAgICAgICAgICAgaWYgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q6CiAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLmdldHRpbWVvdXQoKQpAQCAtMzQ1LDkgKzUzOSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Qgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgZm9yIG5vbi1ibG9ja2luZyBzb2NrZXRzIikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb19oYW5kc2hha2UoKQogCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0X2Vycm9yIGFzIHg6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHJhaXNlIHgKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNvbnRleHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb250ZXh0CisKKyAgICBAY29udGV4dC5zZXR0ZXIKKyAgICBkZWYgY29udGV4dChzZWxmLCBjdHgpOgorICAgICAgICBzZWxmLl9jb250ZXh0ID0gY3R4CisgICAgICAgIHNlbGYuX3NzbG9iai5jb250ZXh0ID0gY3R4CiAKICAgICBkZWYgZHVwKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZCgiQ2FuJ3QgZHVwKCkgJXMgaW5zdGFuY2VzIiAlCkBAIC0zNTcsMTEgKzU2MCwyMSBAQAogICAgICAgICAjIHJhaXNlIGFuIGV4Y2VwdGlvbiBoZXJlIGlmIHlvdSB3aXNoIHRvIGNoZWNrIGZvciBzcHVyaW91cyBjbG9zZXMKICAgICAgICAgcGFzcwogCisgICAgZGVmIF9jaGVja19jb25uZWN0ZWQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICAjIGdldHBlZXJuYW1lKCkgd2lsbCByYWlzZSBFTk9UQ09OTiBpZiB0aGUgc29ja2V0IGlzIHJlYWxseQorICAgICAgICAgICAgIyBub3QgY29ubmVjdGVkOyBub3RlIHRoYXQgd2UgY2FuIGJlIGNvbm5lY3RlZCBldmVuIHdpdGhvdXQKKyAgICAgICAgICAgICMgX2Nvbm5lY3RlZCBiZWluZyBzZXQsIGUuZy4gaWYgY29ubmVjdCgpIGZpcnN0IHJldHVybmVkCisgICAgICAgICAgICAjIEVBR0FJTi4KKyAgICAgICAgICAgIHNlbGYuZ2V0cGVlcm5hbWUoKQorCiAgICAgZGVmIHJlYWQoc2VsZiwgbGVuPTAsIGJ1ZmZlcj1Ob25lKToKICAgICAgICAgIiIiUmVhZCB1cCB0byBMRU4gYnl0ZXMgYW5kIHJldHVybiB0aGVtLgogICAgICAgICBSZXR1cm4gemVyby1sZW5ndGggc3RyaW5nIG9uIEVPRi4iIiIKIAogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIGlmIG5vdCBzZWxmLl9zc2xvYmo6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJSZWFkIG9uIGNsb3NlZCBvciB1bndyYXBwZWQgU1NMIHNvY2tldC4iKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBidWZmZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgdiA9IHNlbGYuX3NzbG9iai5yZWFkKGxlbiwgYnVmZmVyKQpAQCAtMzgyLDYgKzU5NSw4IEBACiAgICAgICAgIG51bWJlciBvZiBieXRlcyBvZiBEQVRBIGFjdHVhbGx5IHRyYW5zbWl0dGVkLiIiIgogCiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgaWYgbm90IHNlbGYuX3NzbG9iajoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIldyaXRlIG9uIGNsb3NlZCBvciB1bndyYXBwZWQgU1NMIHNvY2tldC4iKQogICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLndyaXRlKGRhdGEpCiAKICAgICBkZWYgZ2V0cGVlcmNlcnQoc2VsZiwgYmluYXJ5X2Zvcm09RmFsc2UpOgpAQCAtMzkxLDYgKzYwNiw3IEBACiAgICAgICAgIGNlcnRpZmljYXRlIHdhcyBwcm92aWRlZCwgYnV0IG5vdCB2YWxpZGF0ZWQuIiIiCiAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICBzZWxmLl9jaGVja19jb25uZWN0ZWQoKQogICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLnBlZXJfY2VydGlmaWNhdGUoYmluYXJ5X2Zvcm0pCiAKICAgICBkZWYgc2VsZWN0ZWRfbnBuX3Byb3RvY29sKHNlbGYpOgpAQCAtNDIxLDE4ICs2MzcsMTcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAibm9uLXplcm8gZmxhZ3Mgbm90IGFsbG93ZWQgaW4gY2FsbHMgdG8gc2VuZCgpIG9uICVzIiAlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fKQotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoud3JpdGUoZGF0YSkKLSAgICAgICAgICAgICAgICBleGNlcHQgU1NMRXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICAgICAgaWYgeC5hcmdzWzBdID09IFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICAgICAgICAgICAgICBlbGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9XUklURToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBTU0xFcnJvciBhcyB4OgorICAgICAgICAgICAgICAgIGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgICAgIGVsaWYgeC5hcmdzWzBdID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiB2CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc29ja2V0LnNlbmQoc2VsZiwgZGF0YSwgZmxhZ3MpCiAKQEAgLTU0MCwxMiArNzU1LDExIEBACiAKICAgICBkZWYgX3JlYWxfY2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKLSAgICAgICAgIyBzZWxmLl9jbG9zZWQgPSBUcnVlCiAgICAgICAgIHNvY2tldC5fcmVhbF9jbG9zZShzZWxmKQogCiAgICAgZGVmIGRvX2hhbmRzaGFrZShzZWxmLCBibG9jaz1GYWxzZSk6CiAgICAgICAgICIiIlBlcmZvcm0gYSBUTFMvU1NMIGhhbmRzaGFrZS4iIiIKLQorICAgICAgICBzZWxmLl9jaGVja19jb25uZWN0ZWQoKQogICAgICAgICB0aW1lb3V0ID0gc2VsZi5nZXR0aW1lb3V0KCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgdGltZW91dCA9PSAwLjAgYW5kIGJsb2NrOgpAQCAtNTU0LDYgKzc2OCwxMiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5zZXR0aW1lb3V0KHRpbWVvdXQpCiAKKyAgICAgICAgaWYgc2VsZi5jb250ZXh0LmNoZWNrX2hvc3RuYW1lOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyX2hvc3RuYW1lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNoZWNrX2hvc3RuYW1lIG5lZWRzIHNlcnZlcl9ob3N0bmFtZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQiKQorICAgICAgICAgICAgbWF0Y2hfaG9zdG5hbWUoc2VsZi5nZXRwZWVyY2VydCgpLCBzZWxmLnNlcnZlcl9ob3N0bmFtZSkKKwogICAgIGRlZiBfcmVhbF9jb25uZWN0KHNlbGYsIGFkZHIsIGNvbm5lY3RfZXgpOgogICAgICAgICBpZiBzZWxmLnNlcnZlcl9zaWRlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgY29ubmVjdCBpbiBzZXJ2ZXItc2lkZSBtb2RlIikKQEAgLTU2OSwxMSArNzg5LDExIEBACiAgICAgICAgICAgICAgICAgcmMgPSBOb25lCiAgICAgICAgICAgICAgICAgc29ja2V0LmNvbm5lY3Qoc2VsZiwgYWRkcikKICAgICAgICAgICAgIGlmIG5vdCByYzoKKyAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb19oYW5kc2hha2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IFRydWUKICAgICAgICAgICAgIHJldHVybiByYwotICAgICAgICBleGNlcHQgc29ja2V0X2Vycm9yOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQogICAgICAgICAgICAgcmFpc2UKIApAQCAtNjcxLDE1ICs4OTEsMTYgQEAKICAgICBJZiAnc3NsX3ZlcnNpb24nIGlzIHNwZWNpZmllZCwgdXNlIGl0IGluIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQuIiIiCiAKICAgICBob3N0LCBwb3J0ID0gYWRkcgotICAgIGlmIChjYV9jZXJ0cyBpcyBub3QgTm9uZSk6CisgICAgaWYgY2FfY2VydHMgaXMgbm90IE5vbmU6CiAgICAgICAgIGNlcnRfcmVxcyA9IENFUlRfUkVRVUlSRUQKICAgICBlbHNlOgogICAgICAgICBjZXJ0X3JlcXMgPSBDRVJUX05PTkUKLSAgICBzID0gY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcikKLSAgICBzID0gd3JhcF9zb2NrZXQocywgc3NsX3ZlcnNpb249c3NsX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1jZXJ0X3JlcXMsIGNhX2NlcnRzPWNhX2NlcnRzKQotICAgIGRlcmNlcnQgPSBzLmdldHBlZXJjZXJ0KFRydWUpCi0gICAgcy5jbG9zZSgpCisgICAgY29udGV4dCA9IF9jcmVhdGVfc3RkbGliX2NvbnRleHQoc3NsX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPWNlcnRfcmVxcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWZpbGU9Y2FfY2VydHMpCisgICAgd2l0aCAgY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcikgYXMgc29jazoKKyAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2spIGFzIHNzbHNvY2s6CisgICAgICAgICAgICBkZXJjZXJ0ID0gc3Nsc29jay5nZXRwZWVyY2VydChUcnVlKQogICAgIHJldHVybiBERVJfY2VydF90b19QRU1fY2VydChkZXJjZXJ0KQogCiBkZWYgZ2V0X3Byb3RvY29sX25hbWUocHJvdG9jb2xfY29kZSk6CmRpZmYgLS1naXQgYS9MaWIvc3RhdC5weSBiL0xpYi9zdGF0LnB5CmluZGV4IDcwNGFkZmUuLjNlZWNjM2UgMTAwNjQ0Ci0tLSBhL0xpYi9zdGF0LnB5CisrKyBiL0xpYi9zdGF0LnB5CkBAIC0xNDcsMyArMTQ3LDkgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBlcm0uYXBwZW5kKCItIikKICAgICByZXR1cm4gIiIuam9pbihwZXJtKQorCisjIElmIGF2YWlsYWJsZSwgdXNlIEMgaW1wbGVtZW50YXRpb24KK3RyeToKKyAgICBmcm9tIF9zdGF0IGltcG9ydCAqCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3N0YXRpc3RpY3MucHkgYi9MaWIvc3RhdGlzdGljcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWEyNmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3N0YXRpc3RpY3MucHkKQEAgLTAsMCArMSw1OTUgQEAKKyMjICBNb2R1bGUgc3RhdGlzdGljcy5weQorIyMKKyMjICBDb3B5cmlnaHQgKGMpIDIwMTMgU3RldmVuIEQnQXByYW5vIDxzdGV2ZStweXRob25AcGVhcndvb2QuaW5mbz4uCisjIworIyMgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyMgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMjICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMjCisjIyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIworIyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMjICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyMgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMjICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisiIiIKK0Jhc2ljIHN0YXRpc3RpY3MgbW9kdWxlLgorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIGNhbGN1bGF0aW5nIHN0YXRpc3RpY3Mgb2YgZGF0YSwgaW5jbHVkaW5nCithdmVyYWdlcywgdmFyaWFuY2UsIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24uCisKK0NhbGN1bGF0aW5nIGF2ZXJhZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRnVuY3Rpb24gICAgICAgICAgICBEZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK21lYW4gICAgICAgICAgICAgICAgQXJpdGhtZXRpYyBtZWFuIChhdmVyYWdlKSBvZiBkYXRhLgorbWVkaWFuICAgICAgICAgICAgICBNZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgZGF0YS4KK21lZGlhbl9sb3cgICAgICAgICAgTG93IG1lZGlhbiBvZiBkYXRhLgorbWVkaWFuX2hpZ2ggICAgICAgICBIaWdoIG1lZGlhbiBvZiBkYXRhLgorbWVkaWFuX2dyb3VwZWQgICAgICBNZWRpYW4sIG9yIDUwdGggcGVyY2VudGlsZSwgb2YgZ3JvdXBlZCBkYXRhLgorbW9kZSAgICAgICAgICAgICAgICBNb2RlIChtb3N0IGNvbW1vbiB2YWx1ZSkgb2YgZGF0YS4KKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NhbGN1bGF0ZSB0aGUgYXJpdGhtZXRpYyBtZWFuICgidGhlIGF2ZXJhZ2UiKSBvZiBkYXRhOgorCis+Pj4gbWVhbihbLTEuMCwgMi41LCAzLjI1LCA1Ljc1XSkKKzIuNjI1CisKKworQ2FsY3VsYXRlIHRoZSBzdGFuZGFyZCBtZWRpYW4gb2YgZGlzY3JldGUgZGF0YToKKworPj4+IG1lZGlhbihbMiwgMywgNCwgNV0pCiszLjUKKworCitDYWxjdWxhdGUgdGhlIG1lZGlhbiwgb3IgNTB0aCBwZXJjZW50aWxlLCBvZiBkYXRhIGdyb3VwZWQgaW50byBjbGFzcyBpbnRlcnZhbHMKK2NlbnRyZWQgb24gdGhlIGRhdGEgdmFsdWVzIHByb3ZpZGVkLiBFLmcuIGlmIHlvdXIgZGF0YSBwb2ludHMgYXJlIHJvdW5kZWQgdG8KK3RoZSBuZWFyZXN0IHdob2xlIG51bWJlcjoKKworPj4+IG1lZGlhbl9ncm91cGVkKFsyLCAyLCAzLCAzLCAzLCA0XSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKKzIuODMzMzMzMzMzMy4uLgorCitUaGlzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBpbiB0aGlzIHdheTogeW91IGhhdmUgdHdvIGRhdGEgcG9pbnRzIGluIHRoZSBjbGFzcworaW50ZXJ2YWwgMS41LTIuNSwgdGhyZWUgZGF0YSBwb2ludHMgaW4gdGhlIGNsYXNzIGludGVydmFsIDIuNS0zLjUsIGFuZCBvbmUgaW4KK3RoZSBjbGFzcyBpbnRlcnZhbCAzLjUtNC41LiBUaGUgbWVkaWFuIG9mIHRoZXNlIGRhdGEgcG9pbnRzIGlzIDIuODMzMy4uLgorCisKK0NhbGN1bGF0aW5nIHZhcmlhYmlsaXR5IG9yIHNwcmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitGdW5jdGlvbiAgICAgICAgICAgIERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorcHZhcmlhbmNlICAgICAgICAgICBQb3B1bGF0aW9uIHZhcmlhbmNlIG9mIGRhdGEuCit2YXJpYW5jZSAgICAgICAgICAgIFNhbXBsZSB2YXJpYW5jZSBvZiBkYXRhLgorcHN0ZGV2ICAgICAgICAgICAgICBQb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBkYXRhLgorc3RkZXYgICAgICAgICAgICAgICBTYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRhdGEuCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDYWxjdWxhdGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBzYW1wbGUgZGF0YToKKworPj4+IHN0ZGV2KFsyLjUsIDMuMjUsIDUuNSwgMTEuMjUsIDExLjc1XSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKKzQuMzg5NjE4NDM0NDQuLi4KKworSWYgeW91IGhhdmUgcHJldmlvdXNseSBjYWxjdWxhdGVkIHRoZSBtZWFuLCB5b3UgY2FuIHBhc3MgaXQgYXMgdGhlIG9wdGlvbmFsCitzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGZvdXIgInNwcmVhZCIgZnVuY3Rpb25zIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQ6CisKKz4+PiBkYXRhID0gWzEsIDIsIDIsIDQsIDQsIDQsIDUsIDZdCis+Pj4gbXUgPSBtZWFuKGRhdGEpCis+Pj4gcHZhcmlhbmNlKGRhdGEsIG11KQorMi41CisKKworRXhjZXB0aW9ucworLS0tLS0tLS0tLQorCitBIHNpbmdsZSBleGNlcHRpb24gaXMgZGVmaW5lZDogU3RhdGlzdGljc0Vycm9yIGlzIGEgc3ViY2xhc3Mgb2YgVmFsdWVFcnJvci4KKworIiIiCisKK19fYWxsX18gPSBbICdTdGF0aXN0aWNzRXJyb3InLAorICAgICAgICAgICAgJ3BzdGRldicsICdwdmFyaWFuY2UnLCAnc3RkZXYnLCAndmFyaWFuY2UnLAorICAgICAgICAgICAgJ21lZGlhbicsICAnbWVkaWFuX2xvdycsICdtZWRpYW5faGlnaCcsICdtZWRpYW5fZ3JvdXBlZCcsCisgICAgICAgICAgICAnbWVhbicsICdtb2RlJywKKyAgICAgICAgICBdCisKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgbWF0aAorCitmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24KK2Zyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAorCisKKyMgPT09IEV4Y2VwdGlvbnMgPT09CisKK2NsYXNzIFN0YXRpc3RpY3NFcnJvcihWYWx1ZUVycm9yKToKKyAgICBwYXNzCisKKworIyA9PT0gUHJpdmF0ZSB1dGlsaXRpZXMgPT09CisKK2RlZiBfc3VtKGRhdGEsIHN0YXJ0PTApOgorICAgICIiIl9zdW0oZGF0YSBbLCBzdGFydF0pIC0+IHZhbHVlCisKKyAgICBSZXR1cm4gYSBoaWdoLXByZWNpc2lvbiBzdW0gb2YgdGhlIGdpdmVuIG51bWVyaWMgZGF0YS4gSWYgb3B0aW9uYWwKKyAgICBhcmd1bWVudCBgYHN0YXJ0YGAgaXMgZ2l2ZW4sIGl0IGlzIGFkZGVkIHRvIHRoZSB0b3RhbC4gSWYgYGBkYXRhYGAgaXMKKyAgICBlbXB0eSwgYGBzdGFydGBgIChkZWZhdWx0aW5nIHRvIDApIGlzIHJldHVybmVkLgorCisKKyAgICBFeGFtcGxlcworICAgIC0tLS0tLS0tCisKKyAgICA+Pj4gX3N1bShbMywgMi4yNSwgNC41LCAtMC41LCAxLjBdLCAwLjc1KQorICAgIDExLjAKKworICAgIFNvbWUgc291cmNlcyBvZiByb3VuZC1vZmYgZXJyb3Igd2lsbCBiZSBhdm9pZGVkOgorCisgICAgPj4+IF9zdW0oWzFlNTAsIDEsIC0xZTUwXSAqIDEwMDApICAjIEJ1aWx0LWluIHN1bSByZXR1cm5zIHplcm8uCisgICAgMTAwMC4wCisKKyAgICBGcmFjdGlvbnMgYW5kIERlY2ltYWxzIGFyZSBhbHNvIHN1cHBvcnRlZDoKKworICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgID4+PiBfc3VtKFtGKDIsIDMpLCBGKDcsIDUpLCBGKDEsIDQpLCBGKDUsIDYpXSkKKyAgICBGcmFjdGlvbig2MywgMjApCisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICA+Pj4gZGF0YSA9IFtEKCIwLjEzNzUiKSwgRCgiMC4yMTA4IiksIEQoIjAuMzA2MSIpLCBEKCIwLjA0MTkiKV0KKyAgICA+Pj4gX3N1bShkYXRhKQorICAgIERlY2ltYWwoJzAuNjk2MycpCisKKyAgICBNaXhlZCB0eXBlcyBhcmUgY3VycmVudGx5IHRyZWF0ZWQgYXMgYW4gZXJyb3IsIGV4Y2VwdCB0aGF0IGludCBpcworICAgIGFsbG93ZWQuCisgICAgIiIiCisgICAgIyBXZSBmYWlsIGFzIHNvb24gYXMgd2UgcmVhY2ggYSB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBpbnQgb3IgdGhlIHR5cGUgb2YKKyAgICAjIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBpcyBub3QgYW4gaW50LiBFLmcuIF9zdW0oW2ludCwgaW50LCBmbG9hdCwgaW50XSkKKyAgICAjIGlzIG9rYXksIGJ1dCBzdW0oW2ludCwgaW50LCBmbG9hdCwgRnJhY3Rpb25dKSBpcyBub3QuCisgICAgYWxsb3dlZF90eXBlcyA9IHNldChbaW50LCB0eXBlKHN0YXJ0KV0pCisgICAgbiwgZCA9IF9leGFjdF9yYXRpbyhzdGFydCkKKyAgICBwYXJ0aWFscyA9IHtkOiBufSAgIyBtYXAge2Rlbm9taW5hdG9yOiBzdW0gb2YgbnVtZXJhdG9yc30KKyAgICAjIE1pY3JvLW9wdGltaXphdGlvbnMuCisgICAgZXhhY3RfcmF0aW8gPSBfZXhhY3RfcmF0aW8KKyAgICBwYXJ0aWFsc19nZXQgPSBwYXJ0aWFscy5nZXQKKyAgICAjIEFkZCBudW1lcmF0b3JzIGZvciBlYWNoIGRlbm9taW5hdG9yLgorICAgIGZvciB4IGluIGRhdGE6CisgICAgICAgIF9jaGVja190eXBlKHR5cGUoeCksIGFsbG93ZWRfdHlwZXMpCisgICAgICAgIG4sIGQgPSBleGFjdF9yYXRpbyh4KQorICAgICAgICBwYXJ0aWFsc1tkXSA9IHBhcnRpYWxzX2dldChkLCAwKSArIG4KKyAgICAjIEZpbmQgdGhlIGV4cGVjdGVkIHJlc3VsdCB0eXBlLiBJZiBhbGxvd2VkX3R5cGVzIGhhcyBvbmx5IG9uZSBpdGVtLCBpdAorICAgICMgd2lsbCBiZSBpbnQ7IGlmIGl0IGhhcyB0d28sIHVzZSB0aGUgb25lIHdoaWNoIGlzbid0IGludC4KKyAgICBhc3NlcnQgbGVuKGFsbG93ZWRfdHlwZXMpIGluICgxLCAyKQorICAgIGlmIGxlbihhbGxvd2VkX3R5cGVzKSA9PSAxOgorICAgICAgICBhc3NlcnQgYWxsb3dlZF90eXBlcy5wb3AoKSBpcyBpbnQKKyAgICAgICAgVCA9IGludAorICAgIGVsc2U6CisgICAgICAgIFQgPSAoYWxsb3dlZF90eXBlcyAtIHNldChbaW50XSkpLnBvcCgpCisgICAgaWYgTm9uZSBpbiBwYXJ0aWFsczoKKyAgICAgICAgYXNzZXJ0IGlzc3ViY2xhc3MoVCwgKGZsb2F0LCBEZWNpbWFsKSkKKyAgICAgICAgYXNzZXJ0IG5vdCBtYXRoLmlzZmluaXRlKHBhcnRpYWxzW05vbmVdKQorICAgICAgICByZXR1cm4gVChwYXJ0aWFsc1tOb25lXSkKKyAgICB0b3RhbCA9IEZyYWN0aW9uKCkKKyAgICBmb3IgZCwgbiBpbiBzb3J0ZWQocGFydGlhbHMuaXRlbXMoKSk6CisgICAgICAgIHRvdGFsICs9IEZyYWN0aW9uKG4sIGQpCisgICAgaWYgaXNzdWJjbGFzcyhULCBpbnQpOgorICAgICAgICBhc3NlcnQgdG90YWwuZGVub21pbmF0b3IgPT0gMQorICAgICAgICByZXR1cm4gVCh0b3RhbC5udW1lcmF0b3IpCisgICAgaWYgaXNzdWJjbGFzcyhULCBEZWNpbWFsKToKKyAgICAgICAgcmV0dXJuIFQodG90YWwubnVtZXJhdG9yKS90b3RhbC5kZW5vbWluYXRvcgorICAgIHJldHVybiBUKHRvdGFsKQorCisKK2RlZiBfY2hlY2tfdHlwZShULCBhbGxvd2VkKToKKyAgICBpZiBUIG5vdCBpbiBhbGxvd2VkOgorICAgICAgICBpZiBsZW4oYWxsb3dlZCkgPT0gMToKKyAgICAgICAgICAgIGFsbG93ZWQuYWRkKFQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0eXBlcyA9ICcsICcuam9pbihbdC5fX25hbWVfXyBmb3IgdCBpbiBhbGxvd2VkXSArIFtULl9fbmFtZV9fXSkKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidW5zdXBwb3J0ZWQgbWl4ZWQgdHlwZXM6ICVzIiAlIHR5cGVzKQorCisKK2RlZiBfZXhhY3RfcmF0aW8oeCk6CisgICAgIiIiQ29udmVydCBSZWFsIG51bWJlciB4IGV4YWN0bHkgdG8gKG51bWVyYXRvciwgZGVub21pbmF0b3IpIHBhaXIuCisKKyAgICA+Pj4gX2V4YWN0X3JhdGlvKDAuMjUpCisgICAgKDEsIDQpCisKKyAgICB4IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGludCwgRnJhY3Rpb24sIERlY2ltYWwgb3IgZmxvYXQuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGludCwgRnJhY3Rpb24KKyAgICAgICAgICAgIHJldHVybiAoeC5udW1lcmF0b3IsIHguZGVub21pbmF0b3IpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgZmxvYXQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4geC5hc19pbnRlZ2VyX3JhdGlvKCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAjIERlY2ltYWwKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZGVjaW1hbF90b19yYXRpbyh4KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gImNhbid0IGNvbnZlcnQgdHlwZSAne30nIHRvIG51bWVyYXRvci9kZW5vbWluYXRvciIKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZy5mb3JtYXQodHlwZSh4KS5fX25hbWVfXykpIGZyb20gTm9uZQorICAgIGV4Y2VwdCAoT3ZlcmZsb3dFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICMgSU5GIG9yIE5BTgorICAgICAgICBpZiBfX2RlYnVnX186CisgICAgICAgICAgICAjIERlY2ltYWwgc2lnbmFsbGluZyBOQU5zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gZmxvYXQgOi0oCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHgsIERlY2ltYWwpOgorICAgICAgICAgICAgICAgIGFzc2VydCBub3QgeC5pc19maW5pdGUoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IG1hdGguaXNmaW5pdGUoeCkKKyAgICAgICAgcmV0dXJuICh4LCBOb25lKQorCisKKyMgRklYTUUgVGhpcyBpcyBmYXN0ZXIgdGhhbiBGcmFjdGlvbi5mcm9tX2RlY2ltYWwsIGJ1dCBzdGlsbCB0b28gc2xvdy4KK2RlZiBfZGVjaW1hbF90b19yYXRpbyhkKToKKyAgICAiIiJDb252ZXJ0IERlY2ltYWwgZCB0byBleGFjdCBpbnRlZ2VyIHJhdGlvIChudW1lcmF0b3IsIGRlbm9taW5hdG9yKS4KKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKKyAgICA+Pj4gX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMi42IikpCisgICAgKDI2LCAxMCkKKworICAgICIiIgorICAgIHNpZ24sIGRpZ2l0cywgZXhwID0gZC5hc190dXBsZSgpCisgICAgaWYgZXhwIGluICgnRicsICduJywgJ04nKTogICMgSU5GLCBOQU4sIHNOQU4KKyAgICAgICAgYXNzZXJ0IG5vdCBkLmlzX2Zpbml0ZSgpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICBudW0gPSAwCisgICAgZm9yIGRpZ2l0IGluIGRpZ2l0czoKKyAgICAgICAgbnVtID0gbnVtKjEwICsgZGlnaXQKKyAgICBpZiBleHAgPCAwOgorICAgICAgICBkZW4gPSAxMCoqLWV4cAorICAgIGVsc2U6CisgICAgICAgIG51bSAqPSAxMCoqZXhwCisgICAgICAgIGRlbiA9IDEKKyAgICBpZiBzaWduOgorICAgICAgICBudW0gPSAtbnVtCisgICAgcmV0dXJuIChudW0sIGRlbikKKworCitkZWYgX2NvdW50cyhkYXRhKToKKyAgICAjIEdlbmVyYXRlIGEgdGFibGUgb2Ygc29ydGVkICh2YWx1ZSwgZnJlcXVlbmN5KSBwYWlycy4KKyAgICB0YWJsZSA9IGNvbGxlY3Rpb25zLkNvdW50ZXIoaXRlcihkYXRhKSkubW9zdF9jb21tb24oKQorICAgIGlmIG5vdCB0YWJsZToKKyAgICAgICAgcmV0dXJuIHRhYmxlCisgICAgIyBFeHRyYWN0IHRoZSB2YWx1ZXMgd2l0aCB0aGUgaGlnaGVzdCBmcmVxdWVuY3kuCisgICAgbWF4ZnJlcSA9IHRhYmxlWzBdWzFdCisgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKHRhYmxlKSk6CisgICAgICAgIGlmIHRhYmxlW2ldWzFdICE9IG1heGZyZXE6CisgICAgICAgICAgICB0YWJsZSA9IHRhYmxlWzppXQorICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gdGFibGUKKworCisjID09PSBNZWFzdXJlcyBvZiBjZW50cmFsIHRlbmRlbmN5IChhdmVyYWdlcykgPT09CisKK2RlZiBtZWFuKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgc2FtcGxlIGFyaXRobWV0aWMgbWVhbiBvZiBkYXRhLgorCisgICAgPj4+IG1lYW4oWzEsIDIsIDMsIDQsIDRdKQorICAgIDIuOAorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IG1lYW4oW0YoMywgNyksIEYoMSwgMjEpLCBGKDUsIDMpLCBGKDEsIDMpXSkKKyAgICBGcmFjdGlvbigxMywgMjEpCisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICA+Pj4gbWVhbihbRCgiMC41IiksIEQoIjAuNzUiKSwgRCgiMC42MjUiKSwgRCgiMC4zNzUiKV0pCisgICAgRGVjaW1hbCgnMC41NjI1JykKKworICAgIElmIGBgZGF0YWBgIGlzIGVtcHR5LCBTdGF0aXN0aWNzRXJyb3Igd2lsbCBiZSByYWlzZWQuCisgICAgIiIiCisgICAgaWYgaXRlcihkYXRhKSBpcyBkYXRhOgorICAgICAgICBkYXRhID0gbGlzdChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuIDwgMToKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCdtZWFuIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBkYXRhIHBvaW50JykKKyAgICByZXR1cm4gX3N1bShkYXRhKS9uCisKKworIyBGSVhNRTogaW52ZXN0aWdhdGUgd2F5cyB0byBjYWxjdWxhdGUgbWVkaWFucyB3aXRob3V0IHNvcnRpbmc/IFF1aWNrc2VsZWN0PworZGVmIG1lZGlhbihkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIG1lZGlhbiAobWlkZGxlIHZhbHVlKSBvZiBudW1lcmljIGRhdGEuCisKKyAgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgb2RkLCByZXR1cm4gdGhlIG1pZGRsZSBkYXRhIHBvaW50LgorICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBldmVuLCB0aGUgbWVkaWFuIGlzIGludGVycG9sYXRlZCBieQorICAgIHRha2luZyB0aGUgYXZlcmFnZSBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXM6CisKKyAgICA+Pj4gbWVkaWFuKFsxLCAzLCA1XSkKKyAgICAzCisgICAgPj4+IG1lZGlhbihbMSwgMywgNSwgN10pCisgICAgNC4wCisKKyAgICAiIiIKKyAgICBkYXRhID0gc29ydGVkKGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCJubyBtZWRpYW4gZm9yIGVtcHR5IGRhdGEiKQorICAgIGlmIG4lMiA9PSAxOgorICAgICAgICByZXR1cm4gZGF0YVtuLy8yXQorICAgIGVsc2U6CisgICAgICAgIGkgPSBuLy8yCisgICAgICAgIHJldHVybiAoZGF0YVtpIC0gMV0gKyBkYXRhW2ldKS8yCisKKworZGVmIG1lZGlhbl9sb3coZGF0YSk6CisgICAgIiIiUmV0dXJuIHRoZSBsb3cgbWVkaWFuIG9mIG51bWVyaWMgZGF0YS4KKworICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBvZGQsIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuCisgICAgV2hlbiBpdCBpcyBldmVuLCB0aGUgc21hbGxlciBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgaXMgcmV0dXJuZWQuCisKKyAgICA+Pj4gbWVkaWFuX2xvdyhbMSwgMywgNV0pCisgICAgMworICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1LCA3XSkKKyAgICAzCisKKyAgICAiIiIKKyAgICBkYXRhID0gc29ydGVkKGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCJubyBtZWRpYW4gZm9yIGVtcHR5IGRhdGEiKQorICAgIGlmIG4lMiA9PSAxOgorICAgICAgICByZXR1cm4gZGF0YVtuLy8yXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBkYXRhW24vLzIgLSAxXQorCisKK2RlZiBtZWRpYW5faGlnaChkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIGhpZ2ggbWVkaWFuIG9mIGRhdGEuCisKKyAgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgb2RkLCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLgorICAgIFdoZW4gaXQgaXMgZXZlbiwgdGhlIGxhcmdlciBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgaXMgcmV0dXJuZWQuCisKKyAgICA+Pj4gbWVkaWFuX2hpZ2goWzEsIDMsIDVdKQorICAgIDMKKyAgICA+Pj4gbWVkaWFuX2hpZ2goWzEsIDMsIDUsIDddKQorICAgIDUKKworICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgcmV0dXJuIGRhdGFbbi8vMl0KKworCitkZWYgbWVkaWFuX2dyb3VwZWQoZGF0YSwgaW50ZXJ2YWw9MSk6CisgICAgIiIiIlJldHVybiB0aGUgNTB0aCBwZXJjZW50aWxlIChtZWRpYW4pIG9mIGdyb3VwZWQgY29udGludW91cyBkYXRhLgorCisgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAyLCAyLCAzLCA0LCA0LCA0LCA0LCA0LCA1XSkKKyAgICAzLjcKKyAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzUyLCA1MiwgNTMsIDU0XSkKKyAgICA1Mi41CisKKyAgICBUaGlzIGNhbGN1bGF0ZXMgdGhlIG1lZGlhbiBhcyB0aGUgNTB0aCBwZXJjZW50aWxlLCBhbmQgc2hvdWxkIGJlCisgICAgdXNlZCB3aGVuIHlvdXIgZGF0YSBpcyBjb250aW51b3VzIGFuZCBncm91cGVkLiBJbiB0aGUgYWJvdmUgZXhhbXBsZSwKKyAgICB0aGUgdmFsdWVzIDEsIDIsIDMsIGV0Yy4gYWN0dWFsbHkgcmVwcmVzZW50IHRoZSBtaWRwb2ludCBvZiBjbGFzc2VzCisgICAgMC41LTEuNSwgMS41LTIuNSwgMi41LTMuNSwgZXRjLiBUaGUgbWlkZGxlIHZhbHVlIGZhbGxzIHNvbWV3aGVyZSBpbgorICAgIGNsYXNzIDMuNS00LjUsIGFuZCBpbnRlcnBvbGF0aW9uIGlzIHVzZWQgdG8gZXN0aW1hdGUgaXQuCisKKyAgICBPcHRpb25hbCBhcmd1bWVudCBgYGludGVydmFsYGAgcmVwcmVzZW50cyB0aGUgY2xhc3MgaW50ZXJ2YWwsIGFuZAorICAgIGRlZmF1bHRzIHRvIDEuIENoYW5naW5nIHRoZSBjbGFzcyBpbnRlcnZhbCBuYXR1cmFsbHkgd2lsbCBjaGFuZ2UgdGhlCisgICAgaW50ZXJwb2xhdGVkIDUwdGggcGVyY2VudGlsZSB2YWx1ZToKKworICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMywgMywgNSwgN10sIGludGVydmFsPTEpCisgICAgMy4yNQorICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMywgMywgNSwgN10sIGludGVydmFsPTIpCisgICAgMy41CisKKyAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgdGhlIGRhdGEgcG9pbnRzIGFyZSBhdCBsZWFzdAorICAgIGBgaW50ZXJ2YWxgYCBhcGFydC4KKyAgICAiIiIKKyAgICBkYXRhID0gc29ydGVkKGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCJubyBtZWRpYW4gZm9yIGVtcHR5IGRhdGEiKQorICAgIGVsaWYgbiA9PSAxOgorICAgICAgICByZXR1cm4gZGF0YVswXQorICAgICMgRmluZCB0aGUgdmFsdWUgYXQgdGhlIG1pZHBvaW50LiBSZW1lbWJlciB0aGlzIGNvcnJlc3BvbmRzIHRvIHRoZQorICAgICMgY2VudHJlIG9mIHRoZSBjbGFzcyBpbnRlcnZhbC4KKyAgICB4ID0gZGF0YVtuLy8yXQorICAgIGZvciBvYmogaW4gKHgsIGludGVydmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIChzdHIsIGJ5dGVzKSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4cGVjdGVkIG51bWJlciBidXQgZ290ICVyJyAlIG9iaikKKyAgICB0cnk6CisgICAgICAgIEwgPSB4IC0gaW50ZXJ2YWwvMiAgIyBUaGUgbG93ZXIgbGltaXQgb2YgdGhlIG1lZGlhbiBpbnRlcnZhbC4KKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAjIE1peGVkIHR5cGUuIEZvciBub3cgd2UganVzdCBjb2VyY2UgdG8gZmxvYXQuCisgICAgICAgIEwgPSBmbG9hdCh4KSAtIGZsb2F0KGludGVydmFsKS8yCisgICAgY2YgPSBkYXRhLmluZGV4KHgpICAjIE51bWJlciBvZiB2YWx1ZXMgYmVsb3cgdGhlIG1lZGlhbiBpbnRlcnZhbC4KKyAgICAjIEZJWE1FIFRoZSBmb2xsb3dpbmcgbGluZSBjb3VsZCBiZSBtb3JlIGVmZmljaWVudCBmb3IgYmlnIGxpc3RzLgorICAgIGYgPSBkYXRhLmNvdW50KHgpICAjIE51bWJlciBvZiBkYXRhIHBvaW50cyBpbiB0aGUgbWVkaWFuIGludGVydmFsLgorICAgIHJldHVybiBMICsgaW50ZXJ2YWwqKG4vMiAtIGNmKS9mCisKKworZGVmIG1vZGUoZGF0YSk6CisgICAgIiIiUmV0dXJuIHRoZSBtb3N0IGNvbW1vbiBkYXRhIHBvaW50IGZyb20gZGlzY3JldGUgb3Igbm9taW5hbCBkYXRhLgorCisgICAgYGBtb2RlYGAgYXNzdW1lcyBkaXNjcmV0ZSBkYXRhLCBhbmQgcmV0dXJucyBhIHNpbmdsZSB2YWx1ZS4gVGhpcyBpcyB0aGUKKyAgICBzdGFuZGFyZCB0cmVhdG1lbnQgb2YgdGhlIG1vZGUgYXMgY29tbW9ubHkgdGF1Z2h0IGluIHNjaG9vbHM6CisKKyAgICA+Pj4gbW9kZShbMSwgMSwgMiwgMywgMywgMywgMywgNF0pCisgICAgMworCisgICAgVGhpcyBhbHNvIHdvcmtzIHdpdGggbm9taW5hbCAobm9uLW51bWVyaWMpIGRhdGE6CisKKyAgICA+Pj4gbW9kZShbInJlZCIsICJibHVlIiwgImJsdWUiLCAicmVkIiwgImdyZWVuIiwgInJlZCIsICJyZWQiXSkKKyAgICAncmVkJworCisgICAgSWYgdGhlcmUgaXMgbm90IGV4YWN0bHkgb25lIG1vc3QgY29tbW9uIHZhbHVlLCBgYG1vZGVgYCB3aWxsIHJhaXNlCisgICAgU3RhdGlzdGljc0Vycm9yLgorICAgICIiIgorICAgICMgR2VuZXJhdGUgYSB0YWJsZSBvZiBzb3J0ZWQgKHZhbHVlLCBmcmVxdWVuY3kpIHBhaXJzLgorICAgIHRhYmxlID0gX2NvdW50cyhkYXRhKQorICAgIGlmIGxlbih0YWJsZSkgPT0gMToKKyAgICAgICAgcmV0dXJuIHRhYmxlWzBdWzBdCisgICAgZWxpZiB0YWJsZToKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKAorICAgICAgICAgICAgICAgICdubyB1bmlxdWUgbW9kZTsgZm91bmQgJWQgZXF1YWxseSBjb21tb24gdmFsdWVzJyAlIGxlbih0YWJsZSkKKyAgICAgICAgICAgICAgICApCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCdubyBtb2RlIGZvciBlbXB0eSBkYXRhJykKKworCisjID09PSBNZWFzdXJlcyBvZiBzcHJlYWQgPT09CisKKyMgU2VlIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vVmFyaWFuY2UuaHRtbAorIyAgICAgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9TYW1wbGVWYXJpYW5jZS5odG1sCisjICAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FsZ29yaXRobXNfZm9yX2NhbGN1bGF0aW5nX3ZhcmlhbmNlCisjCisjIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgdXNlIHRoZSBzby1jYWxsZWQgImNvbXB1dGF0aW9uYWwgZm9ybXVsYSBmb3IKKyMgdmFyaWFuY2UiLCBhcyB0aGF0IGlzIG9ubHkgc3VpdGFibGUgZm9yIGhhbmQgY2FsY3VsYXRpb25zIHdpdGggYSBzbWFsbAorIyBhbW91bnQgb2YgbG93LXByZWNpc2lvbiBkYXRhLiBJdCBoYXMgdGVycmlibGUgbnVtZXJpYyBwcm9wZXJ0aWVzLgorIworIyBTZWUgYSBjb21wYXJpc29uIG9mIHRocmVlIGNvbXB1dGF0aW9uYWwgbWV0aG9kcyBoZXJlOgorIyBodHRwOi8vd3d3LmpvaG5kY29vay5jb20vYmxvZy8yMDA4LzA5LzI2L2NvbXBhcmluZy10aHJlZS1tZXRob2RzLW9mLWNvbXB1dGluZy1zdGFuZGFyZC1kZXZpYXRpb24vCisKK2RlZiBfc3MoZGF0YSwgYz1Ob25lKToKKyAgICAiIiJSZXR1cm4gc3VtIG9mIHNxdWFyZSBkZXZpYXRpb25zIG9mIHNlcXVlbmNlIGRhdGEuCisKKyAgICBJZiBgYGNgYCBpcyBOb25lLCB0aGUgbWVhbiBpcyBjYWxjdWxhdGVkIGluIG9uZSBwYXNzLCBhbmQgdGhlIGRldmlhdGlvbnMKKyAgICBmcm9tIHRoZSBtZWFuIGFyZSBjYWxjdWxhdGVkIGluIGEgc2Vjb25kIHBhc3MuIE90aGVyd2lzZSwgZGV2aWF0aW9ucyBhcmUKKyAgICBjYWxjdWxhdGVkIGZyb20gYGBjYGAgYXMgZ2l2ZW4uIFVzZSB0aGUgc2Vjb25kIGNhc2Ugd2l0aCBjYXJlLCBhcyBpdCBjYW4KKyAgICBsZWFkIHRvIGdhcmJhZ2UgcmVzdWx0cy4KKyAgICAiIiIKKyAgICBpZiBjIGlzIE5vbmU6CisgICAgICAgIGMgPSBtZWFuKGRhdGEpCisgICAgc3MgPSBfc3VtKCh4LWMpKioyIGZvciB4IGluIGRhdGEpCisgICAgIyBUaGUgZm9sbG93aW5nIHN1bSBzaG91bGQgbWF0aGVtYXRpY2FsbHkgZXF1YWwgemVybywgYnV0IGR1ZSB0byByb3VuZGluZworICAgICMgZXJyb3IgbWF5IG5vdC4KKyAgICBzcyAtPSBfc3VtKCh4LWMpIGZvciB4IGluIGRhdGEpKioyL2xlbihkYXRhKQorICAgIGFzc2VydCBub3Qgc3MgPCAwLCAnbmVnYXRpdmUgc3VtIG9mIHNxdWFyZSBkZXZpYXRpb25zOiAlZicgJSBzcworICAgIHJldHVybiBzcworCisKK2RlZiB2YXJpYW5jZShkYXRhLCB4YmFyPU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgc2FtcGxlIHZhcmlhbmNlIG9mIGRhdGEuCisKKyAgICBkYXRhIHNob3VsZCBiZSBhbiBpdGVyYWJsZSBvZiBSZWFsLXZhbHVlZCBudW1iZXJzLCB3aXRoIGF0IGxlYXN0IHR3bworICAgIHZhbHVlcy4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50IHhiYXIsIGlmIGdpdmVuLCBzaG91bGQgYmUgdGhlIG1lYW4gb2YKKyAgICB0aGUgZGF0YS4gSWYgaXQgaXMgbWlzc2luZyBvciBOb25lLCB0aGUgbWVhbiBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQuCisKKyAgICBVc2UgdGhpcyBmdW5jdGlvbiB3aGVuIHlvdXIgZGF0YSBpcyBhIHNhbXBsZSBmcm9tIGEgcG9wdWxhdGlvbi4gVG8KKyAgICBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLCBzZWUgYGBwdmFyaWFuY2VgYC4KKworICAgIEV4YW1wbGVzOgorCisgICAgPj4+IGRhdGEgPSBbMi43NSwgMS43NSwgMS4yNSwgMC4yNSwgMC41LCAxLjI1LCAzLjVdCisgICAgPj4+IHZhcmlhbmNlKGRhdGEpCisgICAgMS4zNzIwMjM4MDk1MjM4MDk1CisKKyAgICBJZiB5b3UgaGF2ZSBhbHJlYWR5IGNhbGN1bGF0ZWQgdGhlIG1lYW4gb2YgeW91ciBkYXRhLCB5b3UgY2FuIHBhc3MgaXQgYXMKKyAgICB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGBgeGJhcmBgIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQ6CisKKyAgICA+Pj4gbSA9IG1lYW4oZGF0YSkKKyAgICA+Pj4gdmFyaWFuY2UoZGF0YSwgbSkKKyAgICAxLjM3MjAyMzgwOTUyMzgwOTUKKworICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgdGhhdCBgYHhiYXJgYCBpcyBhY3R1YWxseSB0aGUgbWVhbiBvZgorICAgIGBgZGF0YWBgLiBHaXZpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgYGB4YmFyYGAgbWF5IGxlYWQgdG8gaW52YWxpZCBvcgorICAgIGltcG9zc2libGUgcmVzdWx0cy4KKworICAgIERlY2ltYWxzIGFuZCBGcmFjdGlvbnMgYXJlIHN1cHBvcnRlZDoKKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgID4+PiB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgIERlY2ltYWwoJzMxLjAxODc1JykKKworICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgID4+PiB2YXJpYW5jZShbRigxLCA2KSwgRigxLCAyKSwgRig1LCAzKV0pCisgICAgRnJhY3Rpb24oNjcsIDEwOCkKKworICAgICIiIgorICAgIGlmIGl0ZXIoZGF0YSkgaXMgZGF0YToKKyAgICAgICAgZGF0YSA9IGxpc3QoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA8IDI6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigndmFyaWFuY2UgcmVxdWlyZXMgYXQgbGVhc3QgdHdvIGRhdGEgcG9pbnRzJykKKyAgICBzcyA9IF9zcyhkYXRhLCB4YmFyKQorICAgIHJldHVybiBzcy8obi0xKQorCisKK2RlZiBwdmFyaWFuY2UoZGF0YSwgbXU9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlIG9mIGBgZGF0YWBgLgorCisgICAgZGF0YSBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgUmVhbC12YWx1ZWQgbnVtYmVycywgd2l0aCBhdCBsZWFzdCBvbmUKKyAgICB2YWx1ZS4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50IG11LCBpZiBnaXZlbiwgc2hvdWxkIGJlIHRoZSBtZWFuIG9mCisgICAgdGhlIGRhdGEuIElmIGl0IGlzIG1pc3Npbmcgb3IgTm9uZSwgdGhlIG1lYW4gaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorCisgICAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBmcm9tIHRoZSBlbnRpcmUgcG9wdWxhdGlvbi4KKyAgICBUbyBlc3RpbWF0ZSB0aGUgdmFyaWFuY2UgZnJvbSBhIHNhbXBsZSwgdGhlIGBgdmFyaWFuY2VgYCBmdW5jdGlvbiBpcworICAgIHVzdWFsbHkgYSBiZXR0ZXIgY2hvaWNlLgorCisgICAgRXhhbXBsZXM6CisKKyAgICA+Pj4gZGF0YSA9IFswLjAsIDAuMjUsIDAuMjUsIDEuMjUsIDEuNSwgMS43NSwgMi43NSwgMy4yNV0KKyAgICA+Pj4gcHZhcmlhbmNlKGRhdGEpCisgICAgMS4yNQorCisgICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHRoZSBkYXRhLCB5b3UgY2FuIHBhc3MgaXQgYXMKKyAgICB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQ6CisKKyAgICA+Pj4gbXUgPSBtZWFuKGRhdGEpCisgICAgPj4+IHB2YXJpYW5jZShkYXRhLCBtdSkKKyAgICAxLjI1CisKKyAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoYXQgYGBtdWBgIGlzIGFjdHVhbGx5IHRoZSBtZWFuIG9mIGBgZGF0YWBgLgorICAgIEdpdmluZyBhcmJpdHJhcnkgdmFsdWVzIGZvciBgYG11YGAgbWF5IGxlYWQgdG8gaW52YWxpZCBvciBpbXBvc3NpYmxlCisgICAgcmVzdWx0cy4KKworICAgIERlY2ltYWxzIGFuZCBGcmFjdGlvbnMgYXJlIHN1cHBvcnRlZDoKKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgID4+PiBwdmFyaWFuY2UoW0QoIjI3LjUiKSwgRCgiMzAuMjUiKSwgRCgiMzAuMjUiKSwgRCgiMzQuNSIpLCBEKCI0MS43NSIpXSkKKyAgICBEZWNpbWFsKCcyNC44MTUnKQorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IHB2YXJpYW5jZShbRigxLCA0KSwgRig1LCA0KSwgRigxLCAyKV0pCisgICAgRnJhY3Rpb24oMTMsIDcyKQorCisgICAgIiIiCisgICAgaWYgaXRlcihkYXRhKSBpcyBkYXRhOgorICAgICAgICBkYXRhID0gbGlzdChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuIDwgMToKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCdwdmFyaWFuY2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGRhdGEgcG9pbnQnKQorICAgIHNzID0gX3NzKGRhdGEsIG11KQorICAgIHJldHVybiBzcy9uCisKKworZGVmIHN0ZGV2KGRhdGEsIHhiYXI9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgc2FtcGxlIHZhcmlhbmNlLgorCisgICAgU2VlIGBgdmFyaWFuY2VgYCBmb3IgYXJndW1lbnRzIGFuZCBvdGhlciBkZXRhaWxzLgorCisgICAgPj4+IHN0ZGV2KFsxLjUsIDIuNSwgMi41LCAyLjc1LCAzLjI1LCA0Ljc1XSkKKyAgICAxLjA4MTA4NzQxNTUyMTk4MjcKKworICAgICIiIgorICAgIHZhciA9IHZhcmlhbmNlKGRhdGEsIHhiYXIpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gdmFyLnNxcnQoKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIG1hdGguc3FydCh2YXIpCisKKworZGVmIHBzdGRldihkYXRhLCBtdT1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNxdWFyZSByb290IG9mIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlLgorCisgICAgU2VlIGBgcHZhcmlhbmNlYGAgZm9yIGFyZ3VtZW50cyBhbmQgb3RoZXIgZGV0YWlscy4KKworICAgID4+PiBwc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgIDAuOTg2ODkzMjczNTI3MjUxCisKKyAgICAiIiIKKyAgICB2YXIgPSBwdmFyaWFuY2UoZGF0YSwgbXUpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gdmFyLnNxcnQoKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIG1hdGguc3FydCh2YXIpCmRpZmYgLS1naXQgYS9MaWIvc3RydWN0LnB5IGIvTGliL3N0cnVjdC5weQppbmRleCA5YmZjMjNmLi5kNmJiYTU4IDEwMDY0NAotLS0gYS9MaWIvc3RydWN0LnB5CisrKyBiL0xpYi9zdHJ1Y3QucHkKQEAgLTEsNiArMSw3IEBACiBfX2FsbF9fID0gWwogICAgICMgRnVuY3Rpb25zCiAgICAgJ2NhbGNzaXplJywgJ3BhY2snLCAncGFja19pbnRvJywgJ3VucGFjaycsICd1bnBhY2tfZnJvbScsCisgICAgJ2l0ZXJfdW5wYWNrJywKIAogICAgICMgQ2xhc3NlcwogICAgICdTdHJ1Y3QnLApkaWZmIC0tZ2l0IGEvTGliL3N1YnByb2Nlc3MucHkgYi9MaWIvc3VicHJvY2Vzcy5weQppbmRleCBkNzVhNGUwLi5mNDdmNWFiIDEwMDY0NAotLS0gYS9MaWIvc3VicHJvY2Vzcy5weQorKysgYi9MaWIvc3VicHJvY2Vzcy5weQpAQCAtMTQ1LDExICsxNDUsMTMgQEAKIGdldHN0YXR1c291dHB1dChjbWQpOgogICAgIFJldHVybiAoc3RhdHVzLCBvdXRwdXQpIG9mIGV4ZWN1dGluZyBjbWQgaW4gYSBzaGVsbC4KIAotICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggb3MucG9wZW4oKSBhbmQgcmV0dXJuIGEgMi10dXBsZQotICAgIChzdGF0dXMsIG91dHB1dCkuICBjbWQgaXMgYWN0dWFsbHkgcnVuIGFzICd7IGNtZCA7IH0gMj4mMScsIHNvIHRoYXQgdGhlCi0gICAgcmV0dXJuZWQgb3V0cHV0IHdpbGwgY29udGFpbiBvdXRwdXQgb3IgZXJyb3IgbWVzc2FnZXMuIEEgdHJhaWxpbmcgbmV3bGluZQotICAgIGlzIHN0cmlwcGVkIGZyb20gdGhlIG91dHB1dC4gVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUKLSAgICBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgQyBmdW5jdGlvbiB3YWl0KCkuICBFeGFtcGxlOgorICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggJ2NoZWNrX291dHB1dCcgYW5kCisgICAgcmV0dXJuIGEgMi10dXBsZSAoc3RhdHVzLCBvdXRwdXQpLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcyB1c2VkLAorICAgIG1lYW5pbmcgdGhhdCB0aGUgcmVzdWx0IHdpdGggYmUgZGVjb2RlZCB0byBhIHN0cmluZy4KKworICAgIEEgdHJhaWxpbmcgbmV3bGluZSBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuCisgICAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQKKyAgICBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgZnVuY3Rpb24gJ3dhaXQnLiAgRXhhbXBsZToKIAogICAgID4+PiBzdWJwcm9jZXNzLmdldHN0YXR1c291dHB1dCgnbHMgL2Jpbi9scycpCiAgICAgKDAsICcvYmluL2xzJykKQEAgLTE3OCw2ICsxODAsOSBAQAogCiAgICAgPj4+IG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsibHMiLCAiLWwiLCAiL2Rldi9udWxsIl0pCiAKKyAgICBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50LCAiaW5wdXQiLCBhbGxvd2luZyB5b3UgdG8KKyAgICBwYXNzIGEgc3RyaW5nIHRvIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4uICBJZiB5b3UgdXNlIHRoaXMgYXJndW1lbnQKKyAgICB5b3UgbWF5IG5vdCBhbHNvIHVzZSB0aGUgUG9wZW4gY29uc3RydWN0b3IncyAic3RkaW4iIGFyZ3VtZW50LgogCiBFeGNlcHRpb25zCiAtLS0tLS0tLS0tCkBAIC0zOTgsMTkgKzQwMywyNCBAQAogICAgICAgICBoU3RkT3V0cHV0ID0gTm9uZQogICAgICAgICBoU3RkRXJyb3IgPSBOb25lCiAgICAgICAgIHdTaG93V2luZG93ID0gMAotICAgIGNsYXNzIHB5d2ludHlwZXM6Ci0gICAgICAgIGVycm9yID0gSU9FcnJvcgogZWxzZToKLSAgICBpbXBvcnQgc2VsZWN0Ci0gICAgX2hhc19wb2xsID0gaGFzYXR0cihzZWxlY3QsICdwb2xsJykKICAgICBpbXBvcnQgX3Bvc2l4c3VicHJvY2VzcwotICAgIF9jcmVhdGVfcGlwZSA9IF9wb3NpeHN1YnByb2Nlc3MuY2xvZXhlY19waXBlCisgICAgaW1wb3J0IHNlbGVjdAorICAgIGltcG9ydCBzZWxlY3RvcnMKIAogICAgICMgV2hlbiBzZWxlY3Qgb3IgcG9sbCBoYXMgaW5kaWNhdGVkIHRoYXQgdGhlIGZpbGUgaXMgd3JpdGFibGUsCiAgICAgIyB3ZSBjYW4gd3JpdGUgdXAgdG8gX1BJUEVfQlVGIGJ5dGVzIHdpdGhvdXQgcmlzayBvZiBibG9ja2luZy4KICAgICAjIFBPU0lYIGRlZmluZXMgUElQRV9CVUYgYXMgPj0gNTEyLgogICAgIF9QSVBFX0JVRiA9IGdldGF0dHIoc2VsZWN0LCAnUElQRV9CVUYnLCA1MTIpCiAKKyAgICAjIHBvbGwvc2VsZWN0IGhhdmUgdGhlIGFkdmFudGFnZSBvZiBub3QgcmVxdWlyaW5nIGFueSBleHRyYSBmaWxlCisgICAgIyBkZXNjcmlwdG9yLCBjb250cmFyaWx5IHRvIGVwb2xsL2txdWV1ZSAoYWxzbywgdGhleSByZXF1aXJlIGEgc2luZ2xlCisgICAgIyBzeXNjYWxsKS4KKyAgICBpZiBoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpOgorICAgICAgICBfUG9wZW5TZWxlY3RvciA9IHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IKKyAgICBlbHNlOgorICAgICAgICBfUG9wZW5TZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgorCiAKIF9fYWxsX18gPSBbIlBvcGVuIiwgIlBJUEUiLCAiU1RET1VUIiwgImNhbGwiLCAiY2hlY2tfY2FsbCIsICJnZXRzdGF0dXNvdXRwdXQiLAogICAgICAgICAgICAiZ2V0b3V0cHV0IiwgImNoZWNrX291dHB1dCIsICJDYWxsZWRQcm9jZXNzRXJyb3IiLCAiREVWTlVMTCJdCkBAIC01MDYsNiArNTE2LDggQEAKICAgICBmb3IgZmxhZywgb3B0IGluIGZsYWdfb3B0X21hcC5pdGVtcygpOgogICAgICAgICB2ID0gZ2V0YXR0cihzeXMuZmxhZ3MsIGZsYWcpCiAgICAgICAgIGlmIHYgPiAwOgorICAgICAgICAgICAgaWYgZmxhZyA9PSAnaGFzaF9yYW5kb21pemF0aW9uJzoKKyAgICAgICAgICAgICAgICB2ID0gMSAjIEhhbmRsZSBzcGVjaWZpY2F0aW9uIG9mIGFuIGV4YWN0IHNlZWQKICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCctJyArIG9wdCAqIHYpCiAgICAgZm9yIG9wdCBpbiBzeXMud2Fybm9wdGlvbnM6CiAgICAgICAgIGFyZ3MuYXBwZW5kKCctVycgKyBvcHQpCkBAIC01NjgsMTQgKzU4MCwzMSBAQAogICAgIC4uLiAgICAgICAgICAgICAgc3RkZXJyPVNURE9VVCkKICAgICBiJ2xzOiBub25fZXhpc3RlbnRfZmlsZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuJwogCisgICAgVGhlcmUgaXMgYW4gYWRkaXRpb25hbCBvcHRpb25hbCBhcmd1bWVudCwgImlucHV0IiwgYWxsb3dpbmcgeW91IHRvCisgICAgcGFzcyBhIHN0cmluZyB0byB0aGUgc3VicHJvY2VzcydzIHN0ZGluLiAgSWYgeW91IHVzZSB0aGlzIGFyZ3VtZW50CisgICAgeW91IG1heSBub3QgYWxzbyB1c2UgdGhlIFBvcGVuIGNvbnN0cnVjdG9yJ3MgInN0ZGluIiBhcmd1bWVudCwgYXMKKyAgICBpdCB0b28gd2lsbCBiZSB1c2VkIGludGVybmFsbHkuICBFeGFtcGxlOgorCisgICAgPj4+IGNoZWNrX291dHB1dChbInNlZCIsICItZSIsICJzL2Zvby9iYXIvIl0sCisgICAgLi4uICAgICAgICAgICAgICBpbnB1dD1iIndoZW4gaW4gdGhlIGNvdXJzZSBvZiBmb29tYW4gZXZlbnRzXG4iKQorICAgIGInd2hlbiBpbiB0aGUgY291cnNlIG9mIGJhcm1hbiBldmVudHNcbicKKwogICAgIElmIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlIGlzIHBhc3NlZCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEKICAgICBzdHJpbmcgcmF0aGVyIHRoYW4gYnl0ZXMuCiAgICAgIiIiCiAgICAgaWYgJ3N0ZG91dCcgaW4ga3dhcmdzOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdGRvdXQgYXJndW1lbnQgbm90IGFsbG93ZWQsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi4nKQorICAgIGlmICdpbnB1dCcgaW4ga3dhcmdzOgorICAgICAgICBpZiAnc3RkaW4nIGluIGt3YXJnczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZGluIGFuZCBpbnB1dCBhcmd1bWVudHMgbWF5IG5vdCBib3RoIGJlIHVzZWQuJykKKyAgICAgICAgaW5wdXRkYXRhID0ga3dhcmdzWydpbnB1dCddCisgICAgICAgIGRlbCBrd2FyZ3NbJ2lucHV0J10KKyAgICAgICAga3dhcmdzWydzdGRpbiddID0gUElQRQorICAgIGVsc2U6CisgICAgICAgIGlucHV0ZGF0YSA9IE5vbmUKICAgICB3aXRoIFBvcGVuKCpwb3BlbmFyZ3MsIHN0ZG91dD1QSVBFLCAqKmt3YXJncykgYXMgcHJvY2VzczoKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSh0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgICAgICBvdXRwdXQsIHVudXNlZF9lcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKGlucHV0ZGF0YSwgdGltZW91dD10aW1lb3V0KQogICAgICAgICBleGNlcHQgVGltZW91dEV4cGlyZWQ6CiAgICAgICAgICAgICBwcm9jZXNzLmtpbGwoKQogICAgICAgICAgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCkBAIC02NjQsMTMgKzY5MywxNSBAQAogIwogCiBkZWYgZ2V0c3RhdHVzb3V0cHV0KGNtZCk6Ci0gICAgIiIiUmV0dXJuIChzdGF0dXMsIG91dHB1dCkgb2YgZXhlY3V0aW5nIGNtZCBpbiBhIHNoZWxsLgorICAgICIiIiAgICBSZXR1cm4gKHN0YXR1cywgb3V0cHV0KSBvZiBleGVjdXRpbmcgY21kIGluIGEgc2hlbGwuCiAKLSAgICBFeGVjdXRlIHRoZSBzdHJpbmcgJ2NtZCcgaW4gYSBzaGVsbCB3aXRoIG9zLnBvcGVuKCkgYW5kIHJldHVybiBhIDItdHVwbGUKLSAgICAoc3RhdHVzLCBvdXRwdXQpLiAgY21kIGlzIGFjdHVhbGx5IHJ1biBhcyAneyBjbWQgOyB9IDI+JjEnLCBzbyB0aGF0IHRoZQotICAgIHJldHVybmVkIG91dHB1dCB3aWxsIGNvbnRhaW4gb3V0cHV0IG9yIGVycm9yIG1lc3NhZ2VzLiAgQSB0cmFpbGluZyBuZXdsaW5lCi0gICAgaXMgc3RyaXBwZWQgZnJvbSB0aGUgb3V0cHV0LiAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUKLSAgICBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgQyBmdW5jdGlvbiB3YWl0KCkuICBFeGFtcGxlOgorICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggJ2NoZWNrX291dHB1dCcgYW5kCisgICAgcmV0dXJuIGEgMi10dXBsZSAoc3RhdHVzLCBvdXRwdXQpLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcyB1c2VkLAorICAgIG1lYW5pbmcgdGhhdCB0aGUgcmVzdWx0IHdpdGggYmUgZGVjb2RlZCB0byBhIHN0cmluZy4KKworICAgIEEgdHJhaWxpbmcgbmV3bGluZSBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuCisgICAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQKKyAgICBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgZnVuY3Rpb24gJ3dhaXQnLiBFeGFtcGxlOgogCiAgICAgPj4+IGltcG9ydCBzdWJwcm9jZXNzCiAgICAgPj4+IHN1YnByb2Nlc3MuZ2V0c3RhdHVzb3V0cHV0KCdscyAvYmluL2xzJykKQEAgLTgyMiw3ICs4NTMsNyBAQAogICAgICAgICAgICAgZm9yIGYgaW4gZmlsdGVyKE5vbmUsIChzZWxmLnN0ZGluLCBzZWxmLnN0ZG91dCwgc2VsZi5zdGRlcnIpKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzICAjIElnbm9yZSBFQkFERiBvciBvdGhlciBlcnJvcnMuCiAKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zZWRfY2hpbGRfcGlwZV9mZHM6CkBAIC04MzgsNyArODY5LDcgQEAKICAgICAgICAgICAgICAgICBmb3IgZmQgaW4gdG9fY2xvc2U6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgICAgIHJhaXNlCkBAIC04OTksNyArOTMwLDcgQEAKICAgICAgICAgICAgICAgICBpZiBpbnB1dDoKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVBJUEUgYW5kIGUuZXJybm8gIT0gZXJybm8uRUlOVkFMOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCkBAIC0xMDMxLDIzICsxMDYyLDYgQEAKICAgICAgICAgICAgIHJldHVybiBIYW5kbGUoaCkKIAogCi0gICAgICAgIGRlZiBfZmluZF93OXhwb3BlbihzZWxmKToKLSAgICAgICAgICAgICIiIkZpbmQgYW5kIHJldHVybiBhYnNvbHV0IHBhdGggdG8gdzl4cG9wZW4uZXhlIiIiCi0gICAgICAgICAgICB3OXhwb3BlbiA9IG9zLnBhdGguam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX3dpbmFwaS5HZXRNb2R1bGVGaWxlTmFtZSgwKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidzl4cG9wZW4uZXhlIikKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh3OXhwb3Blbik6Ci0gICAgICAgICAgICAgICAgIyBFZWVrIC0gZmlsZS1ub3QtZm91bmQgLSBwb3NzaWJseSBhbiBlbWJlZGRpbmcKLSAgICAgICAgICAgICAgICAjIHNpdHVhdGlvbiAtIHNlZSBpZiB3ZSBjYW4gbG9jYXRlIGl0IGluIHN5cy5leGVjX3ByZWZpeAotICAgICAgICAgICAgICAgIHc5eHBvcGVuID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYmFzZV9leGVjX3ByZWZpeCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInc5eHBvcGVuLmV4ZSIpCi0gICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHc5eHBvcGVuKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgbG9jYXRlIHc5eHBvcGVuLmV4ZSwgd2hpY2ggaXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRlZCBmb3IgUG9wZW4gdG8gd29yayB3aXRoIHlvdXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoZWxsIG9yIHBsYXRmb3JtLiIpCi0gICAgICAgICAgICByZXR1cm4gdzl4cG9wZW4KLQotCiAgICAgICAgIGRlZiBfZXhlY3V0ZV9jaGlsZChzZWxmLCBhcmdzLCBleGVjdXRhYmxlLCBwcmVleGVjX2ZuLCBjbG9zZV9mZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2ZkcywgY3dkLCBlbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbywgY3JlYXRpb25mbGFncywgc2hlbGwsCkBAIC0xMDc2LDIxICsxMDkwLDYgQEAKICAgICAgICAgICAgICAgICBzdGFydHVwaW5mby53U2hvd1dpbmRvdyA9IF93aW5hcGkuU1dfSElERQogICAgICAgICAgICAgICAgIGNvbXNwZWMgPSBvcy5lbnZpcm9uLmdldCgiQ09NU1BFQyIsICJjbWQuZXhlIikKICAgICAgICAgICAgICAgICBhcmdzID0gJ3t9IC9jICJ7fSInLmZvcm1hdCAoY29tc3BlYywgYXJncykKLSAgICAgICAgICAgICAgICBpZiAoX3dpbmFwaS5HZXRWZXJzaW9uKCkgPj0gMHg4MDAwMDAwMCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShjb21zcGVjKS5sb3dlcigpID09ICJjb21tYW5kLmNvbSIpOgotICAgICAgICAgICAgICAgICAgICAjIFdpbjl4LCBvciB1c2luZyBjb21tYW5kLmNvbSBvbiBOVC4gV2UgbmVlZCB0bwotICAgICAgICAgICAgICAgICAgICAjIHVzZSB0aGUgdzl4cG9wZW4gaW50ZXJtZWRpYXRlIHByb2dyYW0uIEZvciBtb3JlCi0gICAgICAgICAgICAgICAgICAgICMgaW5mb3JtYXRpb24sIHNlZSBLQiBRMTUwOTU2Ci0gICAgICAgICAgICAgICAgICAgICMgKGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMDExMTA1MDg0MDAyL2h0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20vc3VwcG9ydC9rYi9hcnRpY2xlcy9RMTUwLzkvNTYuYXNwKQotICAgICAgICAgICAgICAgICAgICB3OXhwb3BlbiA9IHNlbGYuX2ZpbmRfdzl4cG9wZW4oKQotICAgICAgICAgICAgICAgICAgICBhcmdzID0gJyIlcyIgJXMnICUgKHc5eHBvcGVuLCBhcmdzKQotICAgICAgICAgICAgICAgICAgICAjIE5vdCBwYXNzaW5nIENSRUFURV9ORVdfQ09OU09MRSBoYXMgYmVlbiBrbm93biB0bwotICAgICAgICAgICAgICAgICAgICAjIGNhdXNlIHJhbmRvbSBmYWlsdXJlcyBvbiB3aW45eC4gIFNwZWNpZmljYWxseSBhCi0gICAgICAgICAgICAgICAgICAgICMgZGlhbG9nOiAiWW91ciBwcm9ncmFtIGFjY2Vzc2VkIG1lbSBjdXJyZW50bHkgaW4KLSAgICAgICAgICAgICAgICAgICAgIyB1c2UgYXQgeHh4IiBhbmQgYSBob3BlZnVsIHdhcm5pbmcgYWJvdXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICMgc3RhYmlsaXR5IG9mIHlvdXIgc3lzdGVtLiAgQ29zdCBpcyBDdHJsK0Mgd29uJ3QKLSAgICAgICAgICAgICAgICAgICAgIyBraWxsIGNoaWxkcmVuLgotICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzIHw9IF93aW5hcGkuQ1JFQVRFX05FV19DT05TT0xFCiAKICAgICAgICAgICAgICMgU3RhcnQgdGhlIHByb2Nlc3MKICAgICAgICAgICAgIHRyeToKQEAgLTExMDIsMTIgKzExMDEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm8pCi0gICAgICAgICAgICBleGNlcHQgcHl3aW50eXBlcy5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICMgVHJhbnNsYXRlIHB5d2ludHlwZXMuZXJyb3IgdG8gV2luZG93c0Vycm9yLCB3aGljaCBpcwotICAgICAgICAgICAgICAgICMgYSBzdWJjbGFzcyBvZiBPU0Vycm9yLiAgRklYTUU6IFdlIHNob3VsZCByZWFsbHkKLSAgICAgICAgICAgICAgICAjIHRyYW5zbGF0ZSBlcnJubyB1c2luZyBfc3lzX2Vycmxpc3QgKG9yIHNpbWlsYXIpLCBidXQKLSAgICAgICAgICAgICAgICAjIGhvdyBjYW4gdGhpcyBiZSBkb25lIGZyb20gUHl0aG9uPwotICAgICAgICAgICAgICAgIHJhaXNlIFdpbmRvd3NFcnJvcigqZS5hcmdzKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAjIENoaWxkIGlzIGxhdW5jaGVkLiBDbG9zZSB0aGUgcGFyZW50J3MgY29weSBvZiB0aG9zZSBwaXBlCiAgICAgICAgICAgICAgICAgIyBoYW5kbGVzIHRoYXQgb25seSB0aGUgY2hpbGQgc2hvdWxkIGhhdmUgb3Blbi4gIFlvdSBuZWVkCkBAIC0xMTkyLDcgKzExODUsNyBAQAogICAgICAgICAgICAgICAgIGlmIGlucHV0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLndyaXRlKGlucHV0KQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FUElQRToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQpAQCAtMTI3MCw3ICsxMjYzLDcgQEAKICAgICAgICAgICAgIGlmIHN0ZGluIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxpZiBzdGRpbiA9PSBQSVBFOgotICAgICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlID0gX2NyZWF0ZV9waXBlKCkKKyAgICAgICAgICAgICAgICBwMmNyZWFkLCBwMmN3cml0ZSA9IG9zLnBpcGUoKQogICAgICAgICAgICAgZWxpZiBzdGRpbiA9PSBERVZOVUxMOgogICAgICAgICAgICAgICAgIHAyY3JlYWQgPSBzZWxmLl9nZXRfZGV2bnVsbCgpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc3RkaW4sIGludCk6CkBAIC0xMjgyLDcgKzEyNzUsNyBAQAogICAgICAgICAgICAgaWYgc3Rkb3V0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxpZiBzdGRvdXQgPT0gUElQRToKLSAgICAgICAgICAgICAgICBjMnByZWFkLCBjMnB3cml0ZSA9IF9jcmVhdGVfcGlwZSgpCisgICAgICAgICAgICAgICAgYzJwcmVhZCwgYzJwd3JpdGUgPSBvcy5waXBlKCkKICAgICAgICAgICAgIGVsaWYgc3Rkb3V0ID09IERFVk5VTEw6CiAgICAgICAgICAgICAgICAgYzJwd3JpdGUgPSBzZWxmLl9nZXRfZGV2bnVsbCgpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc3Rkb3V0LCBpbnQpOgpAQCAtMTI5NCw3ICsxMjg3LDcgQEAKICAgICAgICAgICAgIGlmIHN0ZGVyciBpcyBOb25lOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsaWYgc3RkZXJyID09IFBJUEU6Ci0gICAgICAgICAgICAgICAgZXJycmVhZCwgZXJyd3JpdGUgPSBfY3JlYXRlX3BpcGUoKQorICAgICAgICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlID0gb3MucGlwZSgpCiAgICAgICAgICAgICBlbGlmIHN0ZGVyciA9PSBTVERPVVQ6CiAgICAgICAgICAgICAgICAgZXJyd3JpdGUgPSBjMnB3cml0ZQogICAgICAgICAgICAgZWxpZiBzdGRlcnIgPT0gREVWTlVMTDoKQEAgLTEzNDYsNyArMTMzOSwxNCBAQAogICAgICAgICAgICAgIyBGb3IgdHJhbnNmZXJyaW5nIHBvc3NpYmxlIGV4ZWMgZmFpbHVyZSBmcm9tIGNoaWxkIHRvIHBhcmVudC4KICAgICAgICAgICAgICMgRGF0YSBmb3JtYXQ6ICJleGNlcHRpb24gbmFtZTpoZXggZXJybm86ZGVzY3JpcHRpb24iCiAgICAgICAgICAgICAjIFBpY2tsZSBpcyBub3QgdXNlZDsgaXQgaXMgY29tcGxleCBhbmQgaW52b2x2ZXMgbWVtb3J5IGFsbG9jYXRpb24uCi0gICAgICAgICAgICBlcnJwaXBlX3JlYWQsIGVycnBpcGVfd3JpdGUgPSBfY3JlYXRlX3BpcGUoKQorICAgICAgICAgICAgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlID0gb3MucGlwZSgpCisgICAgICAgICAgICAjIGVycnBpcGVfd3JpdGUgbXVzdCBub3QgYmUgaW4gdGhlIHN0YW5kYXJkIGlvIDAsIDEsIG9yIDIgZmQgcmFuZ2UuCisgICAgICAgICAgICBsb3dfZmRzX3RvX2Nsb3NlID0gW10KKyAgICAgICAgICAgIHdoaWxlIGVycnBpcGVfd3JpdGUgPCAzOgorICAgICAgICAgICAgICAgIGxvd19mZHNfdG9fY2xvc2UuYXBwZW5kKGVycnBpcGVfd3JpdGUpCisgICAgICAgICAgICAgICAgZXJycGlwZV93cml0ZSA9IG9zLmR1cChlcnJwaXBlX3dyaXRlKQorICAgICAgICAgICAgZm9yIGxvd19mZCBpbiBsb3dfZmRzX3RvX2Nsb3NlOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGxvd19mZCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICMgV2UgbXVzdCBhdm9pZCBjb21wbGV4IHdvcmsgdGhhdCBjb3VsZCBpbnZvbHZlCkBAIC0xNDE2LDEzICsxNDE2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9uYW1lLCBoZXhfZXJybm8sIGVycl9tc2cgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJycGlwZV9kYXRhLnNwbGl0KGInOicsIDIpKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fbmFtZSA9IGInUnVudGltZUVycm9yJworICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fbmFtZSA9IGInU3VicHJvY2Vzc0Vycm9yJwogICAgICAgICAgICAgICAgICAgICBoZXhfZXJybm8gPSBiJzAnCiAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgPSAoYidCYWQgZXhjZXB0aW9uIGRhdGEgZnJvbSBjaGlsZDogJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihlcnJwaXBlX2RhdGEpKQogICAgICAgICAgICAgICAgIGNoaWxkX2V4Y2VwdGlvbl90eXBlID0gZ2V0YXR0cigKICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0aW5zLCBleGNlcHRpb25fbmFtZS5kZWNvZGUoJ2FzY2lpJyksCi0gICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzRXJyb3IpCiAgICAgICAgICAgICAgICAgZXJyX21zZyA9IGVycl9tc2cuZGVjb2RlKGVycm9ycz0ic3Vycm9nYXRlcGFzcyIpCiAgICAgICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhjaGlsZF9leGNlcHRpb25fdHlwZSwgT1NFcnJvcikgYW5kIGhleF9lcnJubzoKICAgICAgICAgICAgICAgICAgICAgZXJybm9fbnVtID0gaW50KGhleF9lcnJubywgMTYpCkBAIC0xNDUyLDExICsxNDUyLDExIEBACiAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gX1dFWElUU1RBVFVTKHN0cykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBTaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJVbmtub3duIGNoaWxkIGV4aXQgc3RhdHVzISIpCisgICAgICAgICAgICAgICAgcmFpc2UgU3VicHJvY2Vzc0Vycm9yKCJVbmtub3duIGNoaWxkIGV4aXQgc3RhdHVzISIpCiAKIAogICAgICAgICBkZWYgX2ludGVybmFsX3BvbGwoc2VsZiwgX2RlYWRzdGF0ZT1Ob25lLCBfd2FpdHBpZD1vcy53YWl0cGlkLAotICAgICAgICAgICAgICAgIF9XTk9IQU5HPW9zLldOT0hBTkcsIF9vc19lcnJvcj1vcy5lcnJvciwgX0VDSElMRD1lcnJuby5FQ0hJTEQpOgorICAgICAgICAgICAgICAgIF9XTk9IQU5HPW9zLldOT0hBTkcsIF9FQ0hJTEQ9ZXJybm8uRUNISUxEKToKICAgICAgICAgICAgICIiIkNoZWNrIGlmIGNoaWxkIHByb2Nlc3MgaGFzIHRlcm1pbmF0ZWQuICBSZXR1cm5zIHJldHVybmNvZGUKICAgICAgICAgICAgIGF0dHJpYnV0ZS4KIApAQCAtMTQ2OSw3ICsxNDY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGlkLCBzdHMgPSBfd2FpdHBpZChzZWxmLnBpZCwgX1dOT0hBTkcpCiAgICAgICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9leGl0c3RhdHVzKHN0cykKLSAgICAgICAgICAgICAgICBleGNlcHQgX29zX2Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgX2RlYWRzdGF0ZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IF9kZWFkc3RhdGUKICAgICAgICAgICAgICAgICAgICAgZWxpZiBlLmVycm5vID09IF9FQ0hJTEQ6CkBAIC0xNTQzLDEyICsxNTQzLDY4IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IGlucHV0OgogICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKIAotICAgICAgICAgICAgaWYgX2hhc19wb2xsOgotICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fY29tbXVuaWNhdGVfd2l0aF9wb2xsKGlucHV0LCBlbmR0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfdGltZW91dCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9jb21tdW5pY2F0ZV93aXRoX3NlbGVjdChpbnB1dCwgZW5kdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfdGltZW91dCkKKyAgICAgICAgICAgIHN0ZG91dCA9IE5vbmUKKyAgICAgICAgICAgIHN0ZGVyciA9IE5vbmUKKworICAgICAgICAgICAgIyBPbmx5IGNyZWF0ZSB0aGlzIG1hcHBpbmcgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlb2JqMm91dHB1dCA9IHt9CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3Rkb3V0XSA9IFtdCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3RkZXJyXSA9IFtdCisKKyAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgorICAgICAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3Rkb3V0XQorICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fZmlsZW9iajJvdXRwdXRbc2VsZi5zdGRlcnJdCisKKyAgICAgICAgICAgIHNlbGYuX3NhdmVfaW5wdXQoaW5wdXQpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0OgorICAgICAgICAgICAgICAgIGlucHV0X3ZpZXcgPSBtZW1vcnl2aWV3KHNlbGYuX2lucHV0KQorCisgICAgICAgICAgICB3aXRoIF9Qb3BlblNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBhbmQgaW5wdXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYuc3RkaW4sIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZi5zdGRvdXQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLnN0ZGVyciwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgICAgICAgICB3aGlsZSBzZWxlY3Rvci5nZXRfbWFwKCk6CisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKQorICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGFuZCB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQorCisgICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3RpbWVvdXQoZW5kdGltZSwgb3JpZ190aW1lb3V0KQorCisgICAgICAgICAgICAgICAgICAgICMgWFhYIFJld3JpdGUgdGhlc2UgdG8gdXNlIG5vbi1ibG9ja2luZyBJL08gb24gdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgIyBvYmplY3RzOyB0aGV5IGFyZSBubyBsb25nZXIgdXNpbmcgQyBzdGRpbyEKKworICAgICAgICAgICAgICAgICAgICBmb3Iga2V5LCBldmVudHMgaW4gcmVhZHk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrZXkuZmlsZW9iaiBpcyBzZWxmLnN0ZGluOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gaW5wdXRfdmlld1tzZWxmLl9pbnB1dF9vZmZzZXQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKz0gb3Mud3JpdGUoa2V5LmZkLCBjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQSVBFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IudW5yZWdpc3RlcihrZXkuZmlsZW9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5maWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wdXRfb2Zmc2V0ID49IGxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci51bnJlZ2lzdGVyKGtleS5maWxlb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LmZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkuZmlsZW9iaiBpbiAoc2VsZi5zdGRvdXQsIHNlbGYuc3RkZXJyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChrZXkuZmQsIDMyNzY4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci51bnJlZ2lzdGVyKGtleS5maWxlb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkuZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW9iajJvdXRwdXRba2V5LmZpbGVvYmpdLmFwcGVuZChkYXRhKQogCiAgICAgICAgICAgICBzZWxmLndhaXQodGltZW91dD1zZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKSkKIApAQCAtMTU4MiwxNzAgKzE2MzgsNiBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dCA9IHNlbGYuX2lucHV0LmVuY29kZShzZWxmLnN0ZGluLmVuY29kaW5nKQogCiAKLSAgICAgICAgZGVmIF9jb21tdW5pY2F0ZV93aXRoX3BvbGwoc2VsZiwgaW5wdXQsIGVuZHRpbWUsIG9yaWdfdGltZW91dCk6Ci0gICAgICAgICAgICBzdGRvdXQgPSBOb25lICMgUmV0dXJuCi0gICAgICAgICAgICBzdGRlcnIgPSBOb25lICMgUmV0dXJuCi0KLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZmQyZmlsZSA9IHt9Ci0KLSAgICAgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIGRlZiByZWdpc3Rlcl9hbmRfYXBwZW5kKGZpbGVfb2JqLCBldmVudG1hc2spOgotICAgICAgICAgICAgICAgIHBvbGxlci5yZWdpc3RlcihmaWxlX29iai5maWxlbm8oKSwgZXZlbnRtYXNrKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMmZpbGVbZmlsZV9vYmouZmlsZW5vKCldID0gZmlsZV9vYmoKLQotICAgICAgICAgICAgZGVmIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCk6Ci0gICAgICAgICAgICAgICAgcG9sbGVyLnVucmVnaXN0ZXIoZmQpCi0gICAgICAgICAgICAgICAgc2VsZi5fZmQyZmlsZVtmZF0uY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMmZpbGUucG9wKGZkKQotCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZGluIGFuZCBpbnB1dDoKLSAgICAgICAgICAgICAgICByZWdpc3Rlcl9hbmRfYXBwZW5kKHNlbGYuc3RkaW4sIHNlbGVjdC5QT0xMT1VUKQotCi0gICAgICAgICAgICAjIE9ubHkgY3JlYXRlIHRoaXMgbWFwcGluZyBpZiB3ZSBoYXZlbid0IGFscmVhZHkuCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMm91dHB1dCA9IHt9Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZkMm91dHB1dFtzZWxmLnN0ZG91dC5maWxlbm8oKV0gPSBbXQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mZDJvdXRwdXRbc2VsZi5zdGRlcnIuZmlsZW5vKCldID0gW10KLQotICAgICAgICAgICAgc2VsZWN0X1BPTExJTl9QT0xMUFJJID0gc2VsZWN0LlBPTExJTiB8IHNlbGVjdC5QT0xMUFJJCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKLSAgICAgICAgICAgICAgICByZWdpc3Rlcl9hbmRfYXBwZW5kKHNlbGYuc3Rkb3V0LCBzZWxlY3RfUE9MTElOX1BPTExQUkkpCi0gICAgICAgICAgICAgICAgc3Rkb3V0ID0gc2VsZi5fZmQyb3V0cHV0W3NlbGYuc3Rkb3V0LmZpbGVubygpXQotICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJfYW5kX2FwcGVuZChzZWxmLnN0ZGVyciwgc2VsZWN0X1BPTExJTl9QT0xMUFJJKQotICAgICAgICAgICAgICAgIHN0ZGVyciA9IHNlbGYuX2ZkMm91dHB1dFtzZWxmLnN0ZGVyci5maWxlbm8oKV0KLQotICAgICAgICAgICAgc2VsZi5fc2F2ZV9pbnB1dChpbnB1dCkKLQotICAgICAgICAgICAgaWYgc2VsZi5faW5wdXQ6Ci0gICAgICAgICAgICAgICAgaW5wdXRfdmlldyA9IG1lbW9yeXZpZXcoc2VsZi5faW5wdXQpCi0KLSAgICAgICAgICAgIHdoaWxlIHNlbGYuX2ZkMmZpbGU6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IHNlbGYuX3JlbWFpbmluZ190aW1lKGVuZHRpbWUpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZSBhbmQgdGltZW91dCA8IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBwb2xsZXIucG9sbCh0aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBzZWxmLl9jaGVja190aW1lb3V0KGVuZHRpbWUsIG9yaWdfdGltZW91dCkKLQotICAgICAgICAgICAgICAgICMgWFhYIFJld3JpdGUgdGhlc2UgdG8gdXNlIG5vbi1ibG9ja2luZyBJL08gb24gdGhlCi0gICAgICAgICAgICAgICAgIyBmaWxlIG9iamVjdHM7IHRoZXkgYXJlIG5vIGxvbmdlciB1c2luZyBDIHN0ZGlvIQotCi0gICAgICAgICAgICAgICAgZm9yIGZkLCBtb2RlIGluIHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBpZiBtb2RlICYgc2VsZWN0LlBPTExPVVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGlucHV0X3ZpZXdbc2VsZi5faW5wdXRfb2Zmc2V0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICs9IG9zLndyaXRlKGZkLCBjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0X29mZnNldCA+PSBsZW4oc2VsZi5faW5wdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgbW9kZSAmIHNlbGVjdF9QT0xMSU5fUE9MTFBSSToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKGZkLCAzMjc2OCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZkMm91dHB1dFtmZF0uYXBwZW5kKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBoYW5nIHVwIG9yIGVycm9ycy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKLQotICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIHN0ZGVycikKLQotCi0gICAgICAgIGRlZiBfY29tbXVuaWNhdGVfd2l0aF9zZWxlY3Qoc2VsZiwgaW5wdXQsIGVuZHRpbWUsIG9yaWdfdGltZW91dCk6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0ID0gW10KLSAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zZXQgPSBbXQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gYW5kIGlucHV0OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zZXQuYXBwZW5kKHNlbGYuc3RkaW4pCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0LmFwcGVuZChzZWxmLnN0ZG91dCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9zZXQuYXBwZW5kKHNlbGYuc3RkZXJyKQotCi0gICAgICAgICAgICBzZWxmLl9zYXZlX2lucHV0KGlucHV0KQotCi0gICAgICAgICAgICBzdGRvdXQgPSBOb25lICMgUmV0dXJuCi0gICAgICAgICAgICBzdGRlcnIgPSBOb25lICMgUmV0dXJuCi0KLSAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dF9idWZmID0gW10KLSAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl9zdGRvdXRfYnVmZgotICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyX2J1ZmYgPSBbXQotICAgICAgICAgICAgICAgIHN0ZGVyciA9IHNlbGYuX3N0ZGVycl9idWZmCi0KLSAgICAgICAgICAgIHdoaWxlIHNlbGYuX3JlYWRfc2V0IG9yIHNlbGYuX3dyaXRlX3NldDoKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5fcmVtYWluaW5nX3RpbWUoZW5kdGltZSkKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGFuZCB0aW1lb3V0IDwgMDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEV4cGlyZWQoc2VsZi5hcmdzLCBvcmlnX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAocmxpc3QsIHdsaXN0LCB4bGlzdCkgPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KHNlbGYuX3JlYWRfc2V0LCBzZWxmLl93cml0ZV9zZXQsIFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLQotICAgICAgICAgICAgICAgICMgQWNjb3JkaW5nIHRvIHRoZSBkb2NzLCByZXR1cm5pbmcgdGhyZWUgZW1wdHkgbGlzdHMgaW5kaWNhdGVzCi0gICAgICAgICAgICAgICAgIyB0aGF0IHRoZSB0aW1lb3V0IGV4cGlyZWQuCi0gICAgICAgICAgICAgICAgaWYgbm90IChybGlzdCBvciB3bGlzdCBvciB4bGlzdCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQotICAgICAgICAgICAgICAgICMgV2UgYWxzbyBjaGVjayB3aGF0IHRpbWUgaXQgaXMgb3Vyc2VsdmVzIGZvciBnb29kIG1lYXN1cmUuCi0gICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfdGltZW91dChlbmR0aW1lLCBvcmlnX3RpbWVvdXQpCi0KLSAgICAgICAgICAgICAgICAjIFhYWCBSZXdyaXRlIHRoZXNlIHRvIHVzZSBub24tYmxvY2tpbmcgSS9PIG9uIHRoZQotICAgICAgICAgICAgICAgICMgZmlsZSBvYmplY3RzOyB0aGV5IGFyZSBubyBsb25nZXIgdXNpbmcgQyBzdGRpbyEKLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gaW4gd2xpc3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5faW5wdXRbc2VsZi5faW5wdXRfb2Zmc2V0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX3dyaXR0ZW4gPSBvcy53cml0ZShzZWxmLnN0ZGluLmZpbGVubygpLCBjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBJUEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2V0LnJlbW92ZShzZWxmLnN0ZGluKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICs9IGJ5dGVzX3dyaXR0ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0X29mZnNldCA+PSBsZW4oc2VsZi5faW5wdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NldC5yZW1vdmUoc2VsZi5zdGRpbikKLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0IGluIHJsaXN0OgotICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLnN0ZG91dC5maWxlbm8oKSwgMTAyNCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZG91dC5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldC5yZW1vdmUoc2VsZi5zdGRvdXQpCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dC5hcHBlbmQoZGF0YSkKLQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyIGluIHJsaXN0OgotICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLnN0ZGVyci5maWxlbm8oKSwgMTAyNCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldC5yZW1vdmUoc2VsZi5zdGRlcnIpCi0gICAgICAgICAgICAgICAgICAgIHN0ZGVyci5hcHBlbmQoZGF0YSkKLQotICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIHN0ZGVycikKLQotCiAgICAgICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWcpOgogICAgICAgICAgICAgIiIiU2VuZCBhIHNpZ25hbCB0byB0aGUgcHJvY2VzcwogICAgICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvc3VuYXUucHkgYi9MaWIvc3VuYXUucHkKaW5kZXggMTVmN2IwMy4uM2MyNDQ5MiAxMDA2NDQKLS0tIGEvTGliL3N1bmF1LnB5CisrKyBiL0xpYi9zdW5hdS5weQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICBnZXRjb21wdHlwZSgpICAgLS0gcmV0dXJucyBjb21wcmVzc2lvbiB0eXBlICgnTk9ORScgb3IgJ1VMQVcnKQogICAgICAgICBnZXRjb21wbmFtZSgpICAgLS0gcmV0dXJucyBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiB0eXBlICgnbm90IGNvbXByZXNzZWQnIG1hdGNoZXMgJ05PTkUnKQotICAgICAgICBnZXRwYXJhbXMoKSAgICAgLS0gcmV0dXJucyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQorICAgICAgICBnZXRwYXJhbXMoKSAgICAgLS0gcmV0dXJucyBhIG5hbWVkdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgYWJvdmUgb3JkZXIKICAgICAgICAgZ2V0bWFya2VycygpICAgIC0tIHJldHVybnMgTm9uZSAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZmMgbW9kdWxlKQpAQCAtMTAzLDYgKzEwMywxMSBAQAogaXMgZGVzdHJveWVkLgogIiIiCiAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKKworX3N1bmF1X3BhcmFtcyA9IG5hbWVkdHVwbGUoJ19zdW5hdV9wYXJhbXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQorCiAjIGZyb20gPG11bHRpbWVkaWEvYXVkaW9fZmlsZWhkci5oPgogQVVESU9fRklMRV9NQUdJQyA9IDB4MmU3MzZlNjQKIEFVRElPX0ZJTEVfRU5DT0RJTkdfTVVMQVdfOCA9IDEKQEAgLTE2Myw2ICsxNjgsMTIgQEAKICAgICAgICAgaWYgc2VsZi5fZmlsZToKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIGluaXRmcChzZWxmLCBmaWxlKToKICAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGUKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSAwCkBAIC0yNDYsOSArMjU3LDkgQEAKICAgICAgICAgICAgIHJldHVybiAnbm90IGNvbXByZXNzZWQnCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpCisgICAgICAgIHJldHVybiBfc3VuYXVfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpKQogCiAgICAgZGVmIGdldG1hcmtlcnMoc2VsZik6CiAgICAgICAgIHJldHVybiBOb25lCkBAIC0zMDcsNiArMzE4LDEyIEBACiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgIGRlZiBpbml0ZnAoc2VsZiwgZmlsZSk6CiAgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCiAgICAgICAgIHNlbGYuX2ZyYW1lcmF0ZSA9IDAKQEAgLTMzNSw3ICszNTIsNyBAQAogICAgIGRlZiBzZXRzYW1wd2lkdGgoc2VsZiwgc2FtcHdpZHRoKToKICAgICAgICAgaWYgc2VsZi5fbmZyYW1lc3dyaXR0ZW46CiAgICAgICAgICAgICByYWlzZSBFcnJvcignY2Fubm90IGNoYW5nZSBwYXJhbWV0ZXJzIGFmdGVyIHN0YXJ0aW5nIHRvIHdyaXRlJykKLSAgICAgICAgaWYgc2FtcHdpZHRoIG5vdCBpbiAoMSwgMiwgNCk6CisgICAgICAgIGlmIHNhbXB3aWR0aCBub3QgaW4gKDEsIDIsIDMsIDQpOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ2JhZCBzYW1wbGUgd2lkdGgnKQogICAgICAgICBzZWxmLl9zYW1wd2lkdGggPSBzYW1wd2lkdGgKIApAQCAtMzkwLDE0ICs0MDcsMTYgQEAKICAgICAgICAgc2VsZi5zZXRjb21wdHlwZShjb21wdHlwZSwgY29tcG5hbWUpCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpCisgICAgICAgIHJldHVybiBfc3VuYXVfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpKQogCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uZnJhbWVzd3JpdHRlbgogCiAgICAgZGVmIHdyaXRlZnJhbWVzcmF3KHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkuY2FzdCgnQicpCiAgICAgICAgIHNlbGYuX2Vuc3VyZV9oZWFkZXJfd3JpdHRlbigpCiAgICAgICAgIGlmIHNlbGYuX2NvbXB0eXBlID09ICdVTEFXJzoKICAgICAgICAgICAgIGltcG9ydCBhdWRpb29wCkBAIC00MjEsOSArNDQwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RhdGFsZW5ndGggIT0gc2VsZi5fZGF0YXdyaXR0ZW46CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhdGNoaGVhZGVyKCkKICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmZsdXNoKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3BlbmVkIGFuZCBzZWxmLl9maWxlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKIAogICAgICMKQEAgLTQ0OCw2ICs0NjcsOSBAQAogICAgICAgICAgICAgZWxpZiBzZWxmLl9zYW1wd2lkdGggPT0gMjoKICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IEFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzE2CiAgICAgICAgICAgICAgICAgc2VsZi5fZnJhbWVzaXplID0gMgorICAgICAgICAgICAgZWxpZiBzZWxmLl9zYW1wd2lkdGggPT0gMzoKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IEFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzI0CisgICAgICAgICAgICAgICAgc2VsZi5fZnJhbWVzaXplID0gMwogICAgICAgICAgICAgZWxpZiBzZWxmLl9zYW1wd2lkdGggPT0gNDoKICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IEFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzMyCiAgICAgICAgICAgICAgICAgc2VsZi5fZnJhbWVzaXplID0gNApkaWZmIC0tZ2l0IGEvTGliL3N5bWJvbC5weSBiL0xpYi9zeW1ib2wucHkKaW5kZXggMzQxNDNiNS4uNWNmNGE2NSAxMDA3NTUKLS0tIGEvTGliL3N5bWJvbC5weQorKysgYi9MaWIvc3ltYm9sLnB5CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgc3ltX25hbWVbX3ZhbHVlXSA9IF9uYW1lCiAKIAotZGVmIG1haW4oKToKK2RlZiBfbWFpbigpOgogICAgIGltcG9ydCBzeXMKICAgICBpbXBvcnQgdG9rZW4KICAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6CkBAIC0xMDgsNCArMTA4LDQgQEAKICAgICB0b2tlbi5fbWFpbigpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCisgICAgX21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3N5bXRhYmxlLnB5IGIvTGliL3N5bXRhYmxlLnB5CmluZGV4IGJiMjcxOTYuLmUyMzMxM2IgMTAwNjQ0Ci0tLSBhL0xpYi9zeW10YWJsZS5weQorKysgYi9MaWIvc3ltdGFibGUucHkKQEAgLTIzMiw3ICsyMzIsOCBAQAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGltcG9ydCBvcywgc3lzCi0gICAgc3JjID0gb3BlbihzeXMuYXJndlswXSkucmVhZCgpCisgICAgd2l0aCBvcGVuKHN5cy5hcmd2WzBdKSBhcyBmOgorICAgICAgICBzcmMgPSBmLnJlYWQoKQogICAgIG1vZCA9IHN5bXRhYmxlKHNyYywgb3MucGF0aC5zcGxpdChzeXMuYXJndlswXSlbMV0sICJleGVjIikKICAgICBmb3IgaWRlbnQgaW4gbW9kLmdldF9pZGVudGlmaWVycygpOgogICAgICAgICBpbmZvID0gbW9kLmxvb2t1cChpZGVudCkKZGlmZiAtLWdpdCBhL0xpYi9zeXNjb25maWcucHkgYi9MaWIvc3lzY29uZmlnLnB5CmluZGV4IDJhMjE2MGMuLmRiZjc3NjcgMTAwNjQ0Ci0tLSBhL0xpYi9zeXNjb25maWcucHkKKysrIGIvTGliL3N5c2NvbmZpZy5weQpAQCAtMSw3ICsxLDYgQEAKICIiIkFjY2VzcyB0byBQeXRob24ncyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCByZQogaW1wb3J0IHN5cwogZnJvbSBvcy5wYXRoIGltcG9ydCBwYXJkaXIsIHJlYWxwYXRoCiAKQEAgLTUyLDI1ICs1MSw2IEBACiAgICAgICAgICdzY3JpcHRzJzogJ3tiYXNlfS9TY3JpcHRzJywKICAgICAgICAgJ2RhdGEnOiAne2Jhc2V9JywKICAgICAgICAgfSwKLSAgICAnb3MyJzogewotICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vTGliJywKLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne2Jhc2V9L0xpYicsCi0gICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdwbGF0bGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdpbmNsdWRlJzogJ3tpbnN0YWxsZWRfYmFzZX0vSW5jbHVkZScsCi0gICAgICAgICdwbGF0aW5jbHVkZSc6ICd7aW5zdGFsbGVkX2Jhc2V9L0luY2x1ZGUnLAotICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vU2NyaXB0cycsCi0gICAgICAgICdkYXRhJzogJ3tiYXNlfScsCi0gICAgICAgIH0sCi0gICAgJ29zMl9ob21lJzogewotICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCi0gICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCi0gICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAotICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKLSAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAotICAgICAgICAnZGF0YSc6ICd7dXNlcmJhc2V9JywKLSAgICAgICAgfSwKICAgICAnbnRfdXNlcic6IHsKICAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fScsCiAgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vUHl0aG9ue3B5X3ZlcnNpb25fbm9kb3R9JywKQEAgLTIxMCw3ICsxOTAsNiBAQAogICAgIGRlZiBqb2ludXNlcigqYXJncyk6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmV4cGFuZHVzZXIob3MucGF0aC5qb2luKCphcmdzKSkKIAotICAgICMgd2hhdCBhYm91dCAnb3MyZW14JywgJ3Jpc2NvcycgPwogICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKICAgICAgICAgYmFzZSA9IG9zLmVudmlyb24uZ2V0KCJBUFBEQVRBIikgb3IgIn4iCiAgICAgICAgIGlmIGVudl9iYXNlOgpAQCAtMjQyLDYgKzIyMSw3IEBACiAgICAgIiIiCiAgICAgIyBSZWdleGVzIG5lZWRlZCBmb3IgcGFyc2luZyBNYWtlZmlsZSAoYW5kIHNpbWlsYXIgc3ludGF4ZXMsCiAgICAgIyBsaWtlIG9sZC1zdHlsZSBTZXR1cCBmaWxlcykuCisgICAgaW1wb3J0IHJlCiAgICAgX3ZhcmlhYmxlX3J4ID0gcmUuY29tcGlsZSgiKFthLXpBLVpdW2EtekEtWjAtOV9dKylccyo9XHMqKC4qKSIpCiAgICAgX2ZpbmR2YXIxX3J4ID0gcmUuY29tcGlsZShyIlwkXCgoW0EtWmEtel1bQS1aYS16MC05X10qKVwpIikKICAgICBfZmluZHZhcjJfcnggPSByZS5jb21waWxlKHIiXCR7KFtBLVphLXpdW0EtWmEtejAtOV9dKil9IikKQEAgLTM2OSwyMSArMzQ5LDIxIEBACiAgICAgbWFrZWZpbGUgPSBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKQogICAgIHRyeToKICAgICAgICAgX3BhcnNlX21ha2VmaWxlKG1ha2VmaWxlLCB2YXJzKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgbWFrZWZpbGUKICAgICAgICAgaWYgaGFzYXR0cihlLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG1zZyA9IG1zZyArICIgKCVzKSIgJSBlLnN0cmVycm9yCi0gICAgICAgIHJhaXNlIElPRXJyb3IobXNnKQorICAgICAgICByYWlzZSBPU0Vycm9yKG1zZykKICAgICAjIGxvYWQgdGhlIGluc3RhbGxlZCBweWNvbmZpZy5oOgogICAgIGNvbmZpZ19oID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKICAgICB0cnk6CiAgICAgICAgIHdpdGggb3Blbihjb25maWdfaCkgYXMgZjoKICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19oKGYsIHZhcnMpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBtc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBjb25maWdfaAogICAgICAgICBpZiBoYXNhdHRyKGUsICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXNnID0gbXNnICsgIiAoJXMpIiAlIGUuc3RyZXJyb3IKLSAgICAgICAgcmFpc2UgSU9FcnJvcihtc2cpCisgICAgICAgIHJhaXNlIE9TRXJyb3IobXNnKQogICAgICMgT24gQUlYLCB0aGVyZSBhcmUgd3JvbmcgcGF0aHMgdG8gdGhlIGxpbmtlciBzY3JpcHRzIGluIHRoZSBNYWtlZmlsZQogICAgICMgLS0gdGhlc2UgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBQeXRob24gc291cmNlLCBidXQgd2hlbiBpbnN0YWxsZWQKICAgICAjIHRoZSBzY3JpcHRzIGFyZSBpbiBhbm90aGVyIGRpcmVjdG9yeS4KQEAgLTQwMyw4ICszODMsOCBAQAogICAgICMgZ2V0X3BsYXRmb3JtKCkgc3VjY2VlZHMuCiAgICAgbmFtZSA9ICdfc3lzY29uZmlnZGF0YScKICAgICBpZiAnZGFyd2luJyBpbiBzeXMucGxhdGZvcm06Ci0gICAgICAgIGltcG9ydCBpbXAKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgbW9kdWxlLmJ1aWxkX3RpbWVfdmFycyA9IHZhcnMKICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKIApAQCAtNDM2LDcgKzQxNiw2IEBACiAgICAgdmFyc1snTElCREVTVCddID0gZ2V0X3BhdGgoJ3N0ZGxpYicpCiAgICAgdmFyc1snQklOTElCREVTVCddID0gZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKQogICAgIHZhcnNbJ0lOQ0xVREVQWSddID0gZ2V0X3BhdGgoJ2luY2x1ZGUnKQotICAgIHZhcnNbJ1NPJ10gPSAnLnB5ZCcKICAgICB2YXJzWydFWFRfU1VGRklYJ10gPSAnLnB5ZCcKICAgICB2YXJzWydFWEUnXSA9ICcuZXhlJwogICAgIHZhcnNbJ1ZFUlNJT04nXSA9IF9QWV9WRVJTSU9OX1NIT1JUX05PX0RPVApAQCAtNDU2LDYgKzQzNSw3IEBACiAgICAgIiIiCiAgICAgaWYgdmFycyBpcyBOb25lOgogICAgICAgICB2YXJzID0ge30KKyAgICBpbXBvcnQgcmUKICAgICBkZWZpbmVfcnggPSByZS5jb21waWxlKCIjZGVmaW5lIChbQS1aXVtBLVphLXowLTlfXSspICguKilcbiIpCiAgICAgdW5kZWZfcnggPSByZS5jb21waWxlKCIvWypdICN1bmRlZiAoW0EtWl1bQS1aYS16MC05X10rKSBbKl0vXG4iKQogCkBAIC01NTIsMTAgKzUzMiwxNCBAQAogICAgICAgICAgICAgIyBzeXMuYWJpZmxhZ3MgbWF5IG5vdCBiZSBkZWZpbmVkIG9uIGFsbCBwbGF0Zm9ybXMuCiAgICAgICAgICAgICBfQ09ORklHX1ZBUlNbJ2FiaWZsYWdzJ10gPSAnJwogCi0gICAgICAgIGlmIG9zLm5hbWUgaW4gKCdudCcsICdvczInKToKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgogICAgICAgICAgICAgX2luaXRfbm9uX3Bvc2l4KF9DT05GSUdfVkFSUykKICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgogICAgICAgICAgICAgX2luaXRfcG9zaXgoX0NPTkZJR19WQVJTKQorICAgICAgICAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBzZWUgaXNzdWUxOTU1NQorICAgICAgICBTTyA9IF9DT05GSUdfVkFSUy5nZXQoJ0VYVF9TVUZGSVgnKQorICAgICAgICBpZiBTTyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9DT05GSUdfVkFSU1snU08nXSA9IFNPCiAgICAgICAgICMgU2V0dGluZyAndXNlcmJhc2UnIGlzIGRvbmUgYmVsb3cgdGhlIGNhbGwgdG8gdGhlCiAgICAgICAgICMgaW5pdCBmdW5jdGlvbiB0byBlbmFibGUgdXNpbmcgJ2dldF9jb25maWdfdmFyJyBpbgogICAgICAgICAjIHRoZSBpbml0LWZ1bmN0aW9uLgpAQCAtNTk5LDYgKzU4Myw5IEBACiAKICAgICBFcXVpdmFsZW50IHRvIGdldF9jb25maWdfdmFycygpLmdldChuYW1lKQogICAgICIiIgorICAgIGlmIG5hbWUgPT0gJ1NPJzoKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ1NPIGlzIGRlcHJlY2F0ZWQsIHVzZSBFWFRfU1VGRklYJywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgIHJldHVybiBnZXRfY29uZmlnX3ZhcnMoKS5nZXQobmFtZSkKIAogCkBAIC02NzksNiArNjY2LDcgQEAKICAgICAgICAgcmV0dXJuICIlcy0lcy4lcyIgJSAob3NuYW1lLCB2ZXJzaW9uLCByZWxlYXNlKQogICAgIGVsaWYgb3NuYW1lWzo2XSA9PSAiY3lnd2luIjoKICAgICAgICAgb3NuYW1lID0gImN5Z3dpbiIKKyAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIHJlbF9yZSA9IHJlLmNvbXBpbGUocidbXGQuXSsnKQogICAgICAgICBtID0gcmVsX3JlLm1hdGNoKHJlbGVhc2UpCiAgICAgICAgIGlmIG06CmRpZmYgLS1naXQgYS9MaWIvdGFibmFubnkucHkgYi9MaWIvdGFibmFubnkucHkKaW5kZXggNWI5YjQ0NC4uNDZlMGY1NiAxMDA3NTUKLS0tIGEvTGliL3RhYm5hbm55LnB5CisrKyBiL0xpYi90YWJuYW5ueS5weQpAQCAtOTUsNyArOTUsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICBmID0gdG9rZW5pemUub3BlbihmaWxlKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycnByaW50KCIlcjogSS9PIEVycm9yOiAlcyIgJSAoZmlsZSwgbXNnKSkKICAgICAgICAgcmV0dXJuCiAKZGlmZiAtLWdpdCBhL0xpYi90YXJmaWxlLnB5IGIvTGliL3RhcmZpbGUucHkKaW5kZXggZjZkN2Y3OS4uMzQwOWVmZSAxMDA3NTUKLS0tIGEvTGliL3RhcmZpbGUucHkKKysrIGIvTGliL3RhcmZpbGUucHkKQEAgLTU2LDkgKzU2LDkgQEAKICMgb3Muc3ltbGluayBvbiBXaW5kb3dzIHByaW9yIHRvIDYuMCByYWlzZXMgTm90SW1wbGVtZW50ZWRFcnJvcgogc3ltbGlua19leGNlcHRpb24gPSAoQXR0cmlidXRlRXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpCiB0cnk6Ci0gICAgIyBXaW5kb3dzRXJyb3IgKDEzMTQpIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCB0aGUKKyAgICAjIE9TRXJyb3IgKHdpbmVycm9yPTEzMTQpIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCB0aGUKICAgICAjIFNlQ3JlYXRlU3ltYm9saWNMaW5rUHJpdmlsZWdlIHByaXZpbGVnZQotICAgIHN5bWxpbmtfZXhjZXB0aW9uICs9IChXaW5kb3dzRXJyb3IsKQorICAgIHN5bWxpbmtfZXhjZXB0aW9uICs9IChPU0Vycm9yLCkKIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgcGFzcwogCkBAIC0xNDAsMzAgKzE0MCw2IEBACiB9CiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQml0cyB1c2VkIGluIHRoZSBtb2RlIGZpZWxkLCB2YWx1ZXMgaW4gb2N0YWwuCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TX0lGTE5LID0gMG8xMjAwMDAgICAgICAgICMgc3ltYm9saWMgbGluawotU19JRlJFRyA9IDBvMTAwMDAwICAgICAgICAjIHJlZ3VsYXIgZmlsZQotU19JRkJMSyA9IDBvMDYwMDAwICAgICAgICAjIGJsb2NrIGRldmljZQotU19JRkRJUiA9IDBvMDQwMDAwICAgICAgICAjIGRpcmVjdG9yeQotU19JRkNIUiA9IDBvMDIwMDAwICAgICAgICAjIGNoYXJhY3RlciBkZXZpY2UKLVNfSUZJRk8gPSAwbzAxMDAwMCAgICAgICAgIyBmaWZvCi0KLVRTVUlEICAgPSAwbzQwMDAgICAgICAgICAgIyBzZXQgVUlEIG9uIGV4ZWN1dGlvbgotVFNHSUQgICA9IDBvMjAwMCAgICAgICAgICAjIHNldCBHSUQgb24gZXhlY3V0aW9uCi1UU1ZUWCAgID0gMG8xMDAwICAgICAgICAgICMgcmVzZXJ2ZWQKLQotVFVSRUFEICA9IDBvNDAwICAgICAgICAgICAjIHJlYWQgYnkgb3duZXIKLVRVV1JJVEUgPSAwbzIwMCAgICAgICAgICAgIyB3cml0ZSBieSBvd25lcgotVFVFWEVDICA9IDBvMTAwICAgICAgICAgICAjIGV4ZWN1dGUvc2VhcmNoIGJ5IG93bmVyCi1UR1JFQUQgID0gMG8wNDAgICAgICAgICAgICMgcmVhZCBieSBncm91cAotVEdXUklURSA9IDBvMDIwICAgICAgICAgICAjIHdyaXRlIGJ5IGdyb3VwCi1UR0VYRUMgID0gMG8wMTAgICAgICAgICAgICMgZXhlY3V0ZS9zZWFyY2ggYnkgZ3JvdXAKLVRPUkVBRCAgPSAwbzAwNCAgICAgICAgICAgIyByZWFkIGJ5IG90aGVyCi1UT1dSSVRFID0gMG8wMDIgICAgICAgICAgICMgd3JpdGUgYnkgb3RoZXIKLVRPRVhFQyAgPSAwbzAwMSAgICAgICAgICAgIyBleGVjdXRlL3NlYXJjaCBieSBvdGhlcgotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIGluaXRpYWxpemF0aW9uCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpZiBvcy5uYW1lIGluICgibnQiLCAiY2UiKToKQEAgLTIyMCw3ICsxOTYsNyBAQAogICAgICMgQSAwbzIwMCBieXRlIGluZGljYXRlcyBhIHBvc2l0aXZlIG51bWJlciwgYSAwbzM3NyBieXRlIGEgbmVnYXRpdmUKICAgICAjIG51bWJlci4KICAgICBpZiAwIDw9IG4gPCA4ICoqIChkaWdpdHMgLSAxKToKLSAgICAgICAgcyA9IGJ5dGVzKCIlMCpvIiAlIChkaWdpdHMgLSAxLCBuKSwgImFzY2lpIikgKyBOVUwKKyAgICAgICAgcyA9IGJ5dGVzKCIlMCpvIiAlIChkaWdpdHMgLSAxLCBpbnQobikpLCAiYXNjaWkiKSArIE5VTAogICAgIGVsaWYgZm9ybWF0ID09IEdOVV9GT1JNQVQgYW5kIC0yNTYgKiogKGRpZ2l0cyAtIDEpIDw9IG4gPCAyNTYgKiogKGRpZ2l0cyAtIDEpOgogICAgICAgICBpZiBuID49IDA6CiAgICAgICAgICAgICBzID0gYnl0ZWFycmF5KFswbzIwMF0pCkBAIC0yNjQsMTMgKzI0MCwxMyBAQAogICAgIGZvciBiIGluIHJhbmdlKGJsb2Nrcyk6CiAgICAgICAgIGJ1ZiA9IHNyYy5yZWFkKEJVRlNJWkUpCiAgICAgICAgIGlmIGxlbihidWYpIDwgQlVGU0laRToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImVuZCBvZiBmaWxlIHJlYWNoZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZW5kIG9mIGZpbGUgcmVhY2hlZCIpCiAgICAgICAgIGRzdC53cml0ZShidWYpCiAKICAgICBpZiByZW1haW5kZXIgIT0gMDoKICAgICAgICAgYnVmID0gc3JjLnJlYWQocmVtYWluZGVyKQogICAgICAgICBpZiBsZW4oYnVmKSA8IHJlbWFpbmRlcjoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImVuZCBvZiBmaWxlIHJlYWNoZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZW5kIG9mIGZpbGUgcmVhY2hlZCIpCiAgICAgICAgIGRzdC53cml0ZShidWYpCiAgICAgcmV0dXJuCiAKQEAgLTQwNSw3ICszODEsNyBAQAogICAgICAgICAgICAgICAgIGlmIG1vZGUgPT0gInIiOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmRidWYgPSBiIiIKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbXAgPSBiejIuQloyRGVjb21wcmVzc29yKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5leGNlcHRpb24gPSBJT0Vycm9yCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gT1NFcnJvcgogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY21wID0gYnoyLkJaMkNvbXByZXNzb3IoKQogCkBAIC0xNjcyLDcgKzE2NDgsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHQgPSBjbHMudGFyb3BlbihuYW1lLCBtb2RlLCBmaWxlb2JqLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCiAgICAgICAgICAgICBpZiBtb2RlID09ICdyJzoKICAgICAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3IoIm5vdCBhIGJ6aXAyIGZpbGUiKQpAQCAtMjA0Miw3ICsyMDE4LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fZXh0cmFjdF9tZW1iZXIodGFyaW5mbywgb3MucGF0aC5qb2luKHBhdGgsIHRhcmluZm8ubmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfYXR0cnM9c2V0X2F0dHJzKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgc2VsZi5lcnJvcmxldmVsID4gMDoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZWxzZToKQEAgLTIyMzEsOSArMjIwNyw4IEBACiAgICAgICAgICAgICAgICAgaWYgdGFyaW5mby5pc3N5bSgpIGFuZCBoYXNhdHRyKG9zLCAibGNob3duIik6CiAgICAgICAgICAgICAgICAgICAgIG9zLmxjaG93bih0YXJnZXRwYXRoLCB1LCBnKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAib3MyZW14IjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNob3duKHRhcmdldHBhdGgsIHUsIGcpCi0gICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBvcy5jaG93bih0YXJnZXRwYXRoLCB1LCBnKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoImNvdWxkIG5vdCBjaGFuZ2Ugb3duZXIiKQogCiAgICAgZGVmIGNobW9kKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgpAQCAtMjI0Miw3ICsyMjE3LDcgQEAKICAgICAgICAgaWYgaGFzYXR0cihvcywgJ2NobW9kJyk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MuY2htb2QodGFyZ2V0cGF0aCwgdGFyaW5mby5tb2RlKQotICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXh0cmFjdEVycm9yKCJjb3VsZCBub3QgY2hhbmdlIG1vZGUiKQogCiAgICAgZGVmIHV0aW1lKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgpAQCAtMjI1Miw3ICsyMjI3LDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51dGltZSh0YXJnZXRwYXRoLCAodGFyaW5mby5tdGltZSwgdGFyaW5mby5tdGltZSkpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoImNvdWxkIG5vdCBjaGFuZ2UgbW9kaWZpY2F0aW9uIHRpbWUiKQogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzQzLDkgKzIzMTgsOSBAQAogICAgICAgICAgICBjb3JyZXNwb25kcyB0byBUYXJGaWxlJ3MgbW9kZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiJXMgaXMgY2xvc2VkIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiJXMgaXMgY2xvc2VkIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQogICAgICAgICBpZiBtb2RlIGlzIG5vdCBOb25lIGFuZCBzZWxmLm1vZGUgbm90IGluIG1vZGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJiYWQgb3BlcmF0aW9uIGZvciBtb2RlICVyIiAlIHNlbGYubW9kZSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImJhZCBvcGVyYXRpb24gZm9yIG1vZGUgJXIiICUgc2VsZi5tb2RlKQogCiAgICAgZGVmIF9maW5kX2xpbmtfdGFyZ2V0KHNlbGYsIHRhcmluZm8pOgogICAgICAgICAiIiJGaW5kIHRoZSB0YXJnZXQgbWVtYmVyIG9mIGEgc3ltbGluayBvciBoYXJkbGluayBtZW1iZXIgaW4gdGhlCkBAIC0yNDQ5LDMgKzI0MjQsOTcgQEAKIAogYmx0bl9vcGVuID0gb3Blbgogb3BlbiA9IFRhckZpbGUub3BlbgorCisKK2RlZiBtYWluKCk6CisgICAgaW1wb3J0IGFyZ3BhcnNlCisKKyAgICBkZXNjcmlwdGlvbiA9ICdBIHNpbXBsZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGZvciB0YXJmaWxlIG1vZHVsZS4nCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ZGVzY3JpcHRpb24pCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1ZlcmJvc2Ugb3V0cHV0JykKKyAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1sJywgJy0tbGlzdCcsIG1ldGF2YXI9Jzx0YXJmaWxlPicsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Nob3cgbGlzdGluZyBvZiBhIHRhcmZpbGUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWUnLCAnLS1leHRyYWN0JywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSgnPHRhcmZpbGU+JywgJzxvdXRwdXRfZGlyPicpLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFeHRyYWN0IHRhcmZpbGUgaW50byB0YXJnZXQgZGlyJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1jJywgJy0tY3JlYXRlJywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSgnPG5hbWU+JywgJzxmaWxlPicpLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDcmVhdGUgdGFyZmlsZSBmcm9tIHNvdXJjZXMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10ZXN0JywgbWV0YXZhcj0nPHRhcmZpbGU+JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGVzdCBpZiBhIHRhcmZpbGUgaXMgdmFsaWQnKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLnRlc3Q6CisgICAgICAgIHNyYyA9IGFyZ3MudGVzdAorICAgICAgICBpZiBpc190YXJmaWxlKHNyYyk6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgICAgICAgICAgcHJpbnQodGFyLmdldG1lbWJlcnMoKSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgaWYgYXJncy52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCd7IXJ9IGlzIGEgdGFyIGFyY2hpdmUuJy5mb3JtYXQoc3JjKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsICd7IXJ9IGlzIG5vdCBhIHRhciBhcmNoaXZlLlxuJy5mb3JtYXQoc3JjKSkKKworICAgIGVsaWYgYXJncy5saXN0OgorICAgICAgICBzcmMgPSBhcmdzLmxpc3QKKyAgICAgICAgaWYgaXNfdGFyZmlsZShzcmMpOgorICAgICAgICAgICAgd2l0aCBUYXJGaWxlLm9wZW4oc3JjLCAncjoqJykgYXMgdGY6CisgICAgICAgICAgICAgICAgdGYubGlzdCh2ZXJib3NlPWFyZ3MudmVyYm9zZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsICd7IXJ9IGlzIG5vdCBhIHRhciBhcmNoaXZlLlxuJy5mb3JtYXQoc3JjKSkKKworICAgIGVsaWYgYXJncy5leHRyYWN0OgorICAgICAgICBpZiBsZW4oYXJncy5leHRyYWN0KSA9PSAxOgorICAgICAgICAgICAgc3JjID0gYXJncy5leHRyYWN0WzBdCisgICAgICAgICAgICBjdXJkaXIgPSBvcy5jdXJkaXIKKyAgICAgICAgZWxpZiBsZW4oYXJncy5leHRyYWN0KSA9PSAyOgorICAgICAgICAgICAgc3JjLCBjdXJkaXIgPSBhcmdzLmV4dHJhY3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsIHBhcnNlci5mb3JtYXRfaGVscCgpKQorCisgICAgICAgIGlmIGlzX3RhcmZpbGUoc3JjKToKKyAgICAgICAgICAgIHdpdGggVGFyRmlsZS5vcGVuKHNyYywgJ3I6KicpIGFzIHRmOgorICAgICAgICAgICAgICAgIHRmLmV4dHJhY3RhbGwocGF0aD1jdXJkaXIpCisgICAgICAgICAgICBpZiBhcmdzLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgaWYgY3VyZGlyID09ICcuJzoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJ3shcn0gZmlsZSBpcyBleHRyYWN0ZWQuJy5mb3JtYXQoc3JjKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgneyFyfSBmaWxlIGlzIGV4dHJhY3RlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50byB7IXJ9IGRpcmVjdG9yeS4nKS5mb3JtYXQoc3JjLCBjdXJkaXIpCisgICAgICAgICAgICAgICAgcHJpbnQobXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyc2VyLmV4aXQoMSwgJ3shcn0gaXMgbm90IGEgdGFyIGFyY2hpdmUuXG4nLmZvcm1hdChzcmMpKQorCisgICAgZWxpZiBhcmdzLmNyZWF0ZToKKyAgICAgICAgdGFyX25hbWUgPSBhcmdzLmNyZWF0ZS5wb3AoMCkKKyAgICAgICAgXywgZXh0ID0gb3MucGF0aC5zcGxpdGV4dCh0YXJfbmFtZSkKKyAgICAgICAgY29tcHJlc3Npb25zID0geworICAgICAgICAgICAgIyBnegorICAgICAgICAgICAgJ2d6JzogJ2d6JywKKyAgICAgICAgICAgICd0Z3onOiAnZ3onLAorICAgICAgICAgICAgIyB4egorICAgICAgICAgICAgJ3h6JzogJ3h6JywKKyAgICAgICAgICAgICd0eHonOiAneHonLAorICAgICAgICAgICAgIyBiejIKKyAgICAgICAgICAgICdiejInOiAnYnoyJywKKyAgICAgICAgICAgICd0YnonOiAnYnoyJywKKyAgICAgICAgICAgICd0YnoyJzogJ2J6MicsCisgICAgICAgICAgICAndGIyJzogJ2J6MicsCisgICAgICAgIH0KKyAgICAgICAgdGFyX21vZGUgPSAndzonICsgY29tcHJlc3Npb25zW2V4dF0gaWYgZXh0IGluIGNvbXByZXNzaW9ucyBlbHNlICd3JworICAgICAgICB0YXJfZmlsZXMgPSBhcmdzLmNyZWF0ZQorCisgICAgICAgIHdpdGggVGFyRmlsZS5vcGVuKHRhcl9uYW1lLCB0YXJfbW9kZSkgYXMgdGY6CisgICAgICAgICAgICBmb3IgZmlsZV9uYW1lIGluIHRhcl9maWxlczoKKyAgICAgICAgICAgICAgICB0Zi5hZGQoZmlsZV9uYW1lKQorCisgICAgICAgIGlmIGFyZ3MudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCd7IXJ9IGZpbGUgY3JlYXRlZC4nLmZvcm1hdCh0YXJfbmFtZSkpCisKKyAgICBlbHNlOgorICAgICAgICBwYXJzZXIuZXhpdCgxLCBwYXJzZXIuZm9ybWF0X2hlbHAoKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZWxuZXRsaWIucHkgYi9MaWIvdGVsbmV0bGliLnB5CmluZGV4IGQ0OWQ0ZjQuLjBjYWNhYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZWxuZXRsaWIucHkKKysrIGIvTGliL3RlbG5ldGxpYi5weQpAQCAtMTcsMTMgKzE3LDEyIEBACiBOb3RlIHRoYXQgcmVhZF9hbGwoKSB3b24ndCByZWFkIHVudGlsIGVvZiAtLSBpdCBqdXN0IHJlYWRzIHNvbWUgZGF0YQogLS0gYnV0IGl0IGd1YXJhbnRlZXMgdG8gcmVhZCBhdCBsZWFzdCBvbmUgYnl0ZSB1bmxlc3MgRU9GIGlzIGhpdC4KIAotSXQgaXMgcG9zc2libGUgdG8gcGFzcyBhIFRlbG5ldCBvYmplY3QgdG8gc2VsZWN0LnNlbGVjdCgpIGluIG9yZGVyIHRvCi13YWl0IHVudGlsIG1vcmUgZGF0YSBpcyBhdmFpbGFibGUuICBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLAotcmVhZF9lYWdlcigpIG1heSByZXR1cm4gYicnIGV2ZW4gaWYgdGhlcmUgd2FzIGRhdGEgb24gdGhlIHNvY2tldCwKLWJlY2F1c2UgdGhlIHByb3RvY29sIG5lZ290aWF0aW9uIG1heSBoYXZlIGVhdGVuIHRoZSBkYXRhLiAgVGhpcyBpcyB3aHkKLUVPRkVycm9yIGlzIG5lZWRlZCBpbiBzb21lIGNhc2VzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gIm5vIGRhdGEiIGFuZAotImNvbm5lY3Rpb24gY2xvc2VkIiAoc2luY2UgdGhlIHNvY2tldCBhbHNvIGFwcGVhcnMgcmVhZHkgZm9yIHJlYWRpbmcKLXdoZW4gaXQgaXMgY2xvc2VkKS4KK0l0IGlzIHBvc3NpYmxlIHRvIHBhc3MgYSBUZWxuZXQgb2JqZWN0IHRvIGEgc2VsZWN0b3IgaW4gb3JkZXIgdG8gd2FpdCB1bnRpbAorbW9yZSBkYXRhIGlzIGF2YWlsYWJsZS4gIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIHJlYWRfZWFnZXIoKSBtYXkgcmV0dXJuIGInJworZXZlbiBpZiB0aGVyZSB3YXMgZGF0YSBvbiB0aGUgc29ja2V0LCBiZWNhdXNlIHRoZSBwcm90b2NvbCBuZWdvdGlhdGlvbiBtYXkgaGF2ZQorZWF0ZW4gdGhlIGRhdGEuICBUaGlzIGlzIHdoeSBFT0ZFcnJvciBpcyBuZWVkZWQgaW4gc29tZSBjYXNlcyB0byBkaXN0aW5ndWlzaAorYmV0d2VlbiAibm8gZGF0YSIgYW5kICJjb25uZWN0aW9uIGNsb3NlZCIgKHNpbmNlIHRoZSBzb2NrZXQgYWxzbyBhcHBlYXJzIHJlYWR5Citmb3IgcmVhZGluZyB3aGVuIGl0IGlzIGNsb3NlZCkuCiAKIFRvIGRvOgogLSBvcHRpb24gbmVnb3RpYXRpb24KQEAgLTM0LDEwICszMyw5IEBACiAKIAogIyBJbXBvcnRlZCBtb2R1bGVzCi1pbXBvcnQgZXJybm8KIGltcG9ydCBzeXMKIGltcG9ydCBzb2NrZXQKLWltcG9ydCBzZWxlY3QKK2ltcG9ydCBzZWxlY3RvcnMKIHRyeToKICAgICBmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyBfdGltZQogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMTM0LDYgKzEzMiwxNSBAQAogRVhPUEwgPSBieXRlcyhbMjU1XSkgIyBFeHRlbmRlZC1PcHRpb25zLUxpc3QKIE5PT1BUID0gYnl0ZXMoWzBdKQogCisKKyMgcG9sbC9zZWxlY3QgaGF2ZSB0aGUgYWR2YW50YWdlIG9mIG5vdCByZXF1aXJpbmcgYW55IGV4dHJhIGZpbGUgZGVzY3JpcHRvciwKKyMgY29udHJhcmlseSB0byBlcG9sbC9rcXVldWUgKGFsc28sIHRoZXkgcmVxdWlyZSBhIHNpbmdsZSBzeXNjYWxsKS4KK2lmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgX1RlbG5ldFNlbGVjdG9yID0gc2VsZWN0b3JzLlBvbGxTZWxlY3RvcgorZWxzZToKKyAgICBfVGVsbmV0U2VsZWN0b3IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IKKworCiBjbGFzcyBUZWxuZXQ6CiAKICAgICAiIiJUZWxuZXQgaW50ZXJmYWNlIGNsYXNzLgpAQCAtMjEwLDcgKzIxNyw2IEBACiAgICAgICAgIHNlbGYuc2IgPSAwICMgZmxhZyBmb3IgU0IgYW5kIFNFIHNlcXVlbmNlLgogICAgICAgICBzZWxmLnNiZGF0YXEgPSBiJycKICAgICAgICAgc2VsZi5vcHRpb25fY2FsbGJhY2sgPSBOb25lCi0gICAgICAgIHNlbGYuX2hhc19wb2xsID0gaGFzYXR0cihzZWxlY3QsICdwb2xsJykKICAgICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYub3Blbihob3N0LCBwb3J0LCB0aW1lb3V0KQogCkBAIC0yNzcsNyArMjgzLDcgQEAKICAgICAgICAgIiIiV3JpdGUgYSBzdHJpbmcgdG8gdGhlIHNvY2tldCwgZG91YmxpbmcgYW55IElBQyBjaGFyYWN0ZXJzLgogCiAgICAgICAgIENhbiBibG9jayBpZiB0aGUgY29ubmVjdGlvbiBpcyBibG9ja2VkLiAgTWF5IHJhaXNlCi0gICAgICAgIHNvY2tldC5lcnJvciBpZiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCisgICAgICAgIE9TRXJyb3IgaWYgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgogCiAgICAgICAgICIiIgogICAgICAgICBpZiBJQUMgaW4gYnVmZmVyOgpAQCAtMjkzLDYxICsyOTksNiBAQAogICAgICAgICBpcyBjbG9zZWQgYW5kIG5vIGNvb2tlZCBkYXRhIGlzIGF2YWlsYWJsZS4KIAogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5faGFzX3BvbGw6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bnRpbF93aXRoX3BvbGwobWF0Y2gsIHRpbWVvdXQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bnRpbF93aXRoX3NlbGVjdChtYXRjaCwgdGltZW91dCkKLQotICAgIGRlZiBfcmVhZF91bnRpbF93aXRoX3BvbGwoc2VsZiwgbWF0Y2gsIHRpbWVvdXQpOgotICAgICAgICAiIiJSZWFkIHVudGlsIGEgZ2l2ZW4gc3RyaW5nIGlzIGVuY291bnRlcmVkIG9yIHVudGlsIHRpbWVvdXQuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgdXNlcyBzZWxlY3QucG9sbCgpIHRvIGltcGxlbWVudCB0aGUgdGltZW91dC4KLSAgICAgICAgIiIiCi0gICAgICAgIG4gPSBsZW4obWF0Y2gpCi0gICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRpbWVfc3RhcnQgPSBfdGltZSgpCi0gICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgaSA9IHNlbGYuY29va2VkcS5maW5kKG1hdGNoKQotICAgICAgICBpZiBpIDwgMDoKLSAgICAgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKLSAgICAgICAgICAgIHBvbGxlci5yZWdpc3RlcihzZWxmLCBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzKQotICAgICAgICAgICAgd2hpbGUgaSA8IDAgYW5kIG5vdCBzZWxmLmVvZjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gcG9sbGVyLnBvbGwoTm9uZSBpZiB0aW1lb3V0IGlzIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIDEwMDAgKiBjYWxsX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgZm9yIGZkLCBtb2RlIGluIHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBpZiBtb2RlICYgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICBwb2xsZXIudW5yZWdpc3RlcihzZWxmKQotICAgICAgICBpZiBpID49IDA6Ci0gICAgICAgICAgICBpID0gaSArIG4KLSAgICAgICAgICAgIGJ1ZiA9IHNlbGYuY29va2VkcVs6aV0KLSAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KLSAgICAgICAgICAgIHJldHVybiBidWYKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZF92ZXJ5X2xhenkoKQotCi0gICAgZGVmIF9yZWFkX3VudGlsX3dpdGhfc2VsZWN0KHNlbGYsIG1hdGNoLCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVudGlsIGEgZ2l2ZW4gc3RyaW5nIGlzIGVuY291bnRlcmVkIG9yIHVudGlsIHRpbWVvdXQuCi0KLSAgICAgICAgVGhlIHRpbWVvdXQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgc2VsZWN0LnNlbGVjdCgpLgotICAgICAgICAiIiIKICAgICAgICAgbiA9IGxlbihtYXRjaCkKICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQogICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gpCkBAIC0zNTYsMjYgKzMwNywyNSBAQAogICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQogICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQogICAgICAgICAgICAgcmV0dXJuIGJ1ZgotICAgICAgICBzX3JlcGx5ID0gKFtzZWxmXSwgW10sIFtdKQotICAgICAgICBzX2FyZ3MgPSBzX3JlcGx5CiAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzX2FyZ3MgPSBzX2FyZ3MgKyAodGltZW91dCwpCi0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICB3aGlsZSBub3Qgc2VsZi5lb2YgYW5kIHNlbGVjdC5zZWxlY3QoKnNfYXJncykgPT0gc19yZXBseToKLSAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKLSAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKLSAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKLSAgICAgICAgICAgIGlmIGkgPj0gMDoKLSAgICAgICAgICAgICAgICBpID0gaStuCi0gICAgICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQotICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmCi0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzX2FyZ3MgPSBzX3JlcGx5ICsgKHRpbWVvdXQtZWxhcHNlZCwpCisgICAgICAgICAgICBkZWFkbGluZSA9IF90aW1lKCkgKyB0aW1lb3V0CisgICAgICAgIHdpdGggX1RlbG5ldFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmVvZjoKKyAgICAgICAgICAgICAgICBpZiBzZWxlY3Rvci5zZWxlY3QodGltZW91dCk6CisgICAgICAgICAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCisgICAgICAgICAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA+PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkrbgorICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZgorICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIF90aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICByZXR1cm4gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCiAKICAgICBkZWYgcmVhZF9hbGwoc2VsZik6CkBAIC01ODAsMjkgKzUzMCwzNSBAQAogCiAgICAgZGVmIHNvY2tfYXZhaWwoc2VsZik6CiAgICAgICAgICIiIlRlc3Qgd2hldGhlciBkYXRhIGlzIGF2YWlsYWJsZSBvbiB0aGUgc29ja2V0LiIiIgotICAgICAgICByZXR1cm4gc2VsZWN0LnNlbGVjdChbc2VsZl0sIFtdLCBbXSwgMCkgPT0gKFtzZWxmXSwgW10sIFtdKQorICAgICAgICB3aXRoIF9UZWxuZXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICByZXR1cm4gYm9vbChzZWxlY3Rvci5zZWxlY3QoMCkpCiAKICAgICBkZWYgaW50ZXJhY3Qoc2VsZik6CiAgICAgICAgICIiIkludGVyYWN0aW9uIGZ1bmN0aW9uLCBlbXVsYXRlcyBhIHZlcnkgZHVtYiB0ZWxuZXQgY2xpZW50LiIiIgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKICAgICAgICAgICAgIHNlbGYubXRfaW50ZXJhY3QoKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICByZmQsIHdmZCwgeGZkID0gc2VsZWN0LnNlbGVjdChbc2VsZiwgc3lzLnN0ZGluXSwgW10sIFtdKQotICAgICAgICAgICAgaWYgc2VsZiBpbiByZmQ6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX2VhZ2VyKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcqKiogQ29ubmVjdGlvbiBjbG9zZWQgYnkgcmVtb3RlIGhvc3QgKioqJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiB0ZXh0OgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHRleHQuZGVjb2RlKCdhc2NpaScpKQotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgIGlmIHN5cy5zdGRpbiBpbiByZmQ6Ci0gICAgICAgICAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLmVuY29kZSgnYXNjaWknKQotICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUobGluZSkKKyAgICAgICAgd2l0aCBfVGVsbmV0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc3lzLnN0ZGluLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBmb3Iga2V5LCBldmVudHMgaW4gc2VsZWN0b3Iuc2VsZWN0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGtleS5maWxlb2JqIGlzIHNlbGY6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYucmVhZF9lYWdlcigpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBDb25uZWN0aW9uIGNsb3NlZCBieSByZW1vdGUgaG9zdCAqKionKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHRleHQuZGVjb2RlKCdhc2NpaScpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGtleS5maWxlb2JqIGlzIHN5cy5zdGRpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShsaW5lKQogCiAgICAgZGVmIG10X2ludGVyYWN0KHNlbGYpOgogICAgICAgICAiIiJNdWx0aXRocmVhZGVkIHZlcnNpb24gb2YgaW50ZXJhY3QoKS4iIiIKQEAgLTY0OSw3OSArNjA1LDYgQEAKICAgICAgICAgcmVzdWx0cyBhcmUgdW5kZXRlcm1pbmlzdGljLCBhbmQgbWF5IGRlcGVuZCBvbiB0aGUgSS9PIHRpbWluZy4KIAogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5faGFzX3BvbGw6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0X3dpdGhfcG9sbChsaXN0LCB0aW1lb3V0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdF93aXRoX3NlbGVjdChsaXN0LCB0aW1lb3V0KQotCi0gICAgZGVmIF9leHBlY3Rfd2l0aF9wb2xsKHNlbGYsIGV4cGVjdF9saXN0LCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVudGlsIG9uZSBmcm9tIGEgbGlzdCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbWF0Y2hlcy4KLQotICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRoZSB0aW1lb3V0LgotICAgICAgICAiIiIKLSAgICAgICAgcmUgPSBOb25lCi0gICAgICAgIGV4cGVjdF9saXN0ID0gZXhwZWN0X2xpc3RbOl0KLSAgICAgICAgaW5kaWNlcyA9IHJhbmdlKGxlbihleHBlY3RfbGlzdCkpCi0gICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihleHBlY3RfbGlzdFtpXSwgInNlYXJjaCIpOgotICAgICAgICAgICAgICAgIGlmIG5vdCByZTogaW1wb3J0IHJlCi0gICAgICAgICAgICAgICAgZXhwZWN0X2xpc3RbaV0gPSByZS5jb21waWxlKGV4cGVjdF9saXN0W2ldKQotICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0Ci0gICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgIG0gPSBOb25lCi0gICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICBtID0gZXhwZWN0X2xpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKLSAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgZSA9IG0uZW5kKCkKLSAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQotICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBub3QgbToKLSAgICAgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKLSAgICAgICAgICAgIHBvbGxlci5yZWdpc3RlcihzZWxmLCBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzKQotICAgICAgICAgICAgd2hpbGUgbm90IG0gYW5kIG5vdCBzZWxmLmVvZjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gcG9sbGVyLnBvbGwoTm9uZSBpZiB0aW1lb3V0IGlzIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIDEwMDAgKiBjYWxsX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgZm9yIGZkLCBtb2RlIGluIHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBpZiBtb2RlICYgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGV4cGVjdF9saXN0W2ldLnNlYXJjaChzZWxmLmNvb2tlZHEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG0uZW5kKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYuY29va2VkcVs6ZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2U6XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgICAgICBpZiBlbGFwc2VkID49IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgIHBvbGxlci51bnJlZ2lzdGVyKHNlbGYpCi0gICAgICAgIGlmIG06Ci0gICAgICAgICAgICByZXR1cm4gKGksIG0sIHRleHQpCi0gICAgICAgIHRleHQgPSBzZWxmLnJlYWRfdmVyeV9sYXp5KCkKLSAgICAgICAgaWYgbm90IHRleHQgYW5kIHNlbGYuZW9mOgotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKLSAgICAgICAgcmV0dXJuICgtMSwgTm9uZSwgdGV4dCkKLQotICAgIGRlZiBfZXhwZWN0X3dpdGhfc2VsZWN0KHNlbGYsIGxpc3QsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdW50aWwgb25lIGZyb20gYSBsaXN0IG9mIGEgcmVndWxhciBleHByZXNzaW9ucyBtYXRjaGVzLgotCi0gICAgICAgIFRoZSB0aW1lb3V0IGlzIGltcGxlbWVudGVkIHVzaW5nIHNlbGVjdC5zZWxlY3QoKS4KLSAgICAgICAgIiIiCiAgICAgICAgIHJlID0gTm9uZQogICAgICAgICBsaXN0ID0gbGlzdFs6XQogICAgICAgICBpbmRpY2VzID0gcmFuZ2UobGVuKGxpc3QpKQpAQCAtNzMwLDI3ICs2MTMsMjcgQEAKICAgICAgICAgICAgICAgICBpZiBub3QgcmU6IGltcG9ydCByZQogICAgICAgICAgICAgICAgIGxpc3RbaV0gPSByZS5jb21waWxlKGxpc3RbaV0pCiAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKLSAgICAgICAgICAgICAgICBtID0gbGlzdFtpXS5zZWFyY2goc2VsZi5jb29rZWRxKQotICAgICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBtLmVuZCgpCi0gICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNvb2tlZHFbOmVdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpLCBtLCB0ZXh0KQotICAgICAgICAgICAgaWYgc2VsZi5lb2Y6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNfYXJncyA9IChbc2VsZi5maWxlbm8oKV0sIFtdLCBbXSwgdGltZW91dC1lbGFwc2VkKQotICAgICAgICAgICAgICAgIHIsIHcsIHggPSBzZWxlY3Quc2VsZWN0KCpzX2FyZ3MpCi0gICAgICAgICAgICAgICAgaWYgbm90IHI6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCisgICAgICAgICAgICBkZWFkbGluZSA9IF90aW1lKCkgKyB0aW1lb3V0CisgICAgICAgIHdpdGggX1RlbG5ldFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmVvZjoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKKyAgICAgICAgICAgICAgICAgICAgbSA9IGxpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBtLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2U6XQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpLCBtLCB0ZXh0KQorICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIF90aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWR5OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCiAgICAgICAgIHRleHQgPSBzZWxmLnJlYWRfdmVyeV9sYXp5KCkKICAgICAgICAgaWYgbm90IHRleHQgYW5kIHNlbGYuZW9mOgogICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKZGlmZiAtLWdpdCBhL0xpYi90ZW1wZmlsZS5weSBiL0xpYi90ZW1wZmlsZS5weQppbmRleCA2YmM4NDJmLi4wNWQ0Y2FiIDEwMDY0NAotLS0gYS9MaWIvdGVtcGZpbGUucHkKKysrIGIvTGliL3RlbXBmaWxlLnB5CkBAIC0yNyw3ICsyNyw2IEBACiAKICMgSW1wb3J0cy4KIAotaW1wb3J0IGF0ZXhpdCBhcyBfYXRleGl0CiBpbXBvcnQgZnVuY3Rvb2xzIGFzIF9mdW5jdG9vbHMKIGltcG9ydCB3YXJuaW5ncyBhcyBfd2FybmluZ3MKIGltcG9ydCBpbyBhcyBfaW8KQEAgLTM1LDIzICszNCw3IEBACiBpbXBvcnQgc2h1dGlsIGFzIF9zaHV0aWwKIGltcG9ydCBlcnJubyBhcyBfZXJybm8KIGZyb20gcmFuZG9tIGltcG9ydCBSYW5kb20gYXMgX1JhbmRvbQotCi10cnk6Ci0gICAgaW1wb3J0IGZjbnRsIGFzIF9mY250bAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGRlZiBfc2V0X2Nsb2V4ZWMoZmQpOgotICAgICAgICBwYXNzCi1lbHNlOgotICAgIGRlZiBfc2V0X2Nsb2V4ZWMoZmQpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmbGFncyA9IF9mY250bC5mY250bChmZCwgX2ZjbnRsLkZfR0VURkQsIDApCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBmbGFncyByZWFkIHN1Y2Nlc3NmdWxseSwgbW9kaWZ5Ci0gICAgICAgICAgICBmbGFncyB8PSBfZmNudGwuRkRfQ0xPRVhFQwotICAgICAgICAgICAgX2ZjbnRsLmZjbnRsKGZkLCBfZmNudGwuRl9TRVRGRCwgZmxhZ3MpCi0KK2ltcG9ydCB3ZWFrcmVmIGFzIF93ZWFrcmVmCiAKIHRyeToKICAgICBpbXBvcnQgX3RocmVhZApAQCAtNjAsOCArNDMsNiBAQAogX2FsbG9jYXRlX2xvY2sgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2sKIAogX3RleHRfb3BlbmZsYWdzID0gX29zLk9fUkRXUiB8IF9vcy5PX0NSRUFUIHwgX29zLk9fRVhDTAotaWYgaGFzYXR0cihfb3MsICdPX05PSU5IRVJJVCcpOgotICAgIF90ZXh0X29wZW5mbGFncyB8PSBfb3MuT19OT0lOSEVSSVQKIGlmIGhhc2F0dHIoX29zLCAnT19OT0ZPTExPVycpOgogICAgIF90ZXh0X29wZW5mbGFncyB8PSBfb3MuT19OT0ZPTExPVwogCkBAIC05MCw4ICs3MSw4IEBACiAgICAgIyBGYWxsYmFjay4gIEFsbCB3ZSBuZWVkIGlzIHNvbWV0aGluZyB0aGF0IHJhaXNlcyBPU0Vycm9yIGlmIHRoZQogICAgICMgZmlsZSBkb2Vzbid0IGV4aXN0LgogICAgIGRlZiBfc3RhdChmbik6Ci0gICAgICAgIGYgPSBvcGVuKGZuKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmQgPSBfb3Mub3BlbihmbiwgX29zLk9fUkRPTkxZKQorICAgICAgICBvcy5jbG9zZShmZCkKIAogZGVmIF9leGlzdHMoZm4pOgogICAgIHRyeToKQEAgLTEyNSw3ICsxMDYsNyBAQAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICAgYyA9IHNlbGYuY2hhcmFjdGVycwogICAgICAgICBjaG9vc2UgPSBzZWxmLnJuZy5jaG9pY2UKLSAgICAgICAgbGV0dGVycyA9IFtjaG9vc2UoYykgZm9yIGR1bW15IGluICIxMjM0NTYiXQorICAgICAgICBsZXR0ZXJzID0gW2Nob29zZShjKSBmb3IgZHVtbXkgaW4gcmFuZ2UoOCldCiAgICAgICAgIHJldHVybiAnJy5qb2luKGxldHRlcnMpCiAKIGRlZiBfY2FuZGlkYXRlX3RlbXBkaXJfbGlzdCgpOgpAQCAtMTY3LDcgKzE0OCw3IEBACiAKICAgICBmb3IgZGlyIGluIGRpcmxpc3Q6CiAgICAgICAgIGlmIGRpciAhPSBfb3MuY3VyZGlyOgotICAgICAgICAgICAgZGlyID0gX29zLnBhdGgubm9ybWNhc2UoX29zLnBhdGguYWJzcGF0aChkaXIpKQorICAgICAgICAgICAgZGlyID0gX29zLnBhdGguYWJzcGF0aChkaXIpCiAgICAgICAgICMgVHJ5IG9ubHkgYSBmZXcgbmFtZXMgcGVyIGRpcmVjdG9yeS4KICAgICAgICAgZm9yIHNlcSBpbiByYW5nZSgxMDApOgogICAgICAgICAgICAgbmFtZSA9IG5leHQobmFtZXIpCkBAIC0yMTcsNyArMTk4LDYgQEAKICAgICAgICAgZmlsZSA9IF9vcy5wYXRoLmpvaW4oZGlyLCBwcmUgKyBuYW1lICsgc3VmKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmZCA9IF9vcy5vcGVuKGZpbGUsIGZsYWdzLCAwbzYwMCkKLSAgICAgICAgICAgIF9zZXRfY2xvZXhlYyhmZCkKICAgICAgICAgICAgIHJldHVybiAoZmQsIF9vcy5wYXRoLmFic3BhdGgoZmlsZSkpCiAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZSAgICAjIHRyeSBhZ2FpbgpAQCAtMzU2LDggKzMzNiw3IEBACiAgICAgdW5kZXJseWluZyBmaWxlIG9iamVjdCwgd2l0aG91dCBhZGRpbmcgYSBfX2RlbF9fIG1ldGhvZCB0byB0aGUKICAgICB0ZW1wb3JhcnkgZmlsZS4iIiIKIAotICAgICMgU2V0IGhlcmUgc2luY2UgX19kZWxfXyBjaGVja3MgaXQKLSAgICBmaWxlID0gTm9uZQorICAgIGZpbGUgPSBOb25lICAjIFNldCBoZXJlIHNpbmNlIF9fZGVsX18gY2hlY2tzIGl0CiAgICAgY2xvc2VfY2FsbGVkID0gRmFsc2UKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBuYW1lLCBkZWxldGU9VHJ1ZSk6CkBAIC02ODIsMTAgKzY2MSwyMSBAQAogCiAgICAgIyBIYW5kbGUgbWtkdGVtcCByYWlzaW5nIGFuIGV4Y2VwdGlvbgogICAgIG5hbWUgPSBOb25lCisgICAgX2ZpbmFsaXplciA9IE5vbmUKICAgICBfY2xvc2VkID0gRmFsc2UKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWZmaXg9IiIsIHByZWZpeD10ZW1wbGF0ZSwgZGlyPU5vbmUpOgogICAgICAgICBzZWxmLm5hbWUgPSBta2R0ZW1wKHN1ZmZpeCwgcHJlZml4LCBkaXIpCisgICAgICAgIHNlbGYuX2ZpbmFsaXplciA9IF93ZWFrcmVmLmZpbmFsaXplKAorICAgICAgICAgICAgc2VsZiwgc2VsZi5fY2xlYW51cCwgc2VsZi5uYW1lLAorICAgICAgICAgICAgd2Fybl9tZXNzYWdlPSJJbXBsaWNpdGx5IGNsZWFuaW5nIHVwIHshcn0iLmZvcm1hdChzZWxmKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfY2xlYW51cChjbHMsIG5hbWUsIHdhcm5fbWVzc2FnZT1Ob25lKToKKyAgICAgICAgX3NodXRpbC5ybXRyZWUobmFtZSkKKyAgICAgICAgaWYgd2Fybl9tZXNzYWdlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3dhcm5pbmdzLndhcm4od2Fybl9tZXNzYWdlLCBSZXNvdXJjZVdhcm5pbmcpCisKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICI8e30geyFyfT4iLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5uYW1lKQpAQCAtNjkzLDUzICs2ODMsMTIgQEAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5uYW1lCiAKLSAgICBkZWYgY2xlYW51cChzZWxmLCBfd2Fybj1GYWxzZSwgX3dhcm5pbmdzPV93YXJuaW5ncyk6Ci0gICAgICAgIGlmIHNlbGYubmFtZSBhbmQgbm90IHNlbGYuX2Nsb3NlZDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBfc2h1dGlsLnJtdHJlZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpIGFzIGV4OgotICAgICAgICAgICAgICAgIGlmICJOb25lIiBub3QgaW4gJyVzJyAlIChleCwpOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIHNlbGYuX3JtdHJlZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCi0gICAgICAgICAgICBpZiBfd2FybiBhbmQgX3dhcm5pbmdzLndhcm46Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBfd2FybmluZ3Mud2FybigiSW1wbGljaXRseSBjbGVhbmluZyB1cCB7IXJ9Ii5mb3JtYXQoc2VsZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlV2FybmluZykKLSAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIF9pc19ydW5uaW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgIyBEb24ndCByYWlzZSBhbiBleGNlcHRpb24gaWYgbW9kdWxlcyBuZWVkZWQgZm9yIGVtaXR0aW5nCi0gICAgICAgICAgICAgICAgICAgICMgYSB3YXJuaW5nIGFyZSBhbHJlYWR5IGNsZWFuZWQgaW4gc2h1dGRvd24gcHJvY2Vzcy4KLQogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGMsIHZhbHVlLCB0Yik6CiAgICAgICAgIHNlbGYuY2xlYW51cCgpCiAKLSAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgIyBJc3N1ZSBhIFJlc291cmNlV2FybmluZyBpZiBpbXBsaWNpdCBjbGVhbnVwIG5lZWRlZAotICAgICAgICBzZWxmLmNsZWFudXAoX3dhcm49VHJ1ZSkKLQotICAgIGRlZiBfcm10cmVlKHNlbGYsIHBhdGgsIF9PU0Vycm9yPU9TRXJyb3IsIF9zZXA9X29zLnBhdGguc2VwLAotICAgICAgICAgICAgICAgIF9saXN0ZGlyPV9vcy5saXN0ZGlyLCBfcmVtb3ZlPV9vcy5yZW1vdmUsIF9ybWRpcj1fb3Mucm1kaXIpOgotICAgICAgICAjIEVzc2VudGlhbGx5IGEgc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIHNodXRpbC5ybXRyZWUuICBXZSBjYW4ndAotICAgICAgICAjIHVzZSBnbG9iYWxzIGJlY2F1c2UgdGhleSBtYXkgYmUgTm9uZSdlZCBvdXQgYXQgc2h1dGRvd24uCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhdGgsIHN0cik6Ci0gICAgICAgICAgICBfc2VwID0gX3NlcC5lbmNvZGUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmb3IgbmFtZSBpbiBfbGlzdGRpcihwYXRoKToKLSAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IHBhdGggKyBfc2VwICsgbmFtZQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgX3JlbW92ZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgX09TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JtdHJlZShmdWxsbmFtZSkKLSAgICAgICAgICAgIF9ybWRpcihwYXRoKQotICAgICAgICBleGNlcHQgX09TRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0KLV9pc19ydW5uaW5nID0gVHJ1ZQotCi1kZWYgX29uX3NodXRkb3duKCk6Ci0gICAgZ2xvYmFsIF9pc19ydW5uaW5nCi0gICAgX2lzX3J1bm5pbmcgPSBGYWxzZQotCi1fYXRleGl0LnJlZ2lzdGVyKF9vbl9zaHV0ZG93bikKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZmluYWxpemVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZmluYWxpemVyLmRldGFjaCgpCisgICAgICAgIGlmIHNlbGYubmFtZSBpcyBub3QgTm9uZSBhbmQgbm90IHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIF9zaHV0aWwucm10cmVlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvX19tYWluX18ucHkKaW5kZXggY2U1NjE1Yi4uZDVmYmUxNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvX19tYWluX18ucHkKKysrIGIvTGliL3Rlc3QvX19tYWluX18ucHkKQEAgLTEsMTMgKzEsMyBAQAotZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdCwgc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdAogCi0KLVRFTVBESVIsIFRFU1RDV0QgPSByZWdydGVzdC5fbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQocmVncnRlc3QuVEVNUERJUikKLXJlZ3J0ZXN0LlRFTVBESVIgPSBURU1QRElSCi1yZWdydGVzdC5URVNUQ1dEID0gVEVTVENXRAotCi0jIFJ1biB0aGUgdGVzdHMgaW4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB0ZW1wb3JhcnkgY2hhbmdlcyB0aGUgQ1dEIHRvIGEKLSMgdGVtcG9yYXJ5IGFuZCB3cml0YWJsZSBkaXJlY3RvcnkuIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgotIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuIFRoZSBvcmlnaW5hbCBDV0QgaXMKLSMgYXZhaWxhYmxlIGZyb20gc3VwcG9ydC5TQVZFRENXRC4KLXdpdGggc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKLSAgICByZWdydGVzdC5tYWluKCkKK3JlZ3J0ZXN0Lm1haW5faW5fdGVtcF9jd2QoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkgYi9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKcmVuYW1lIHRvIExpYi90ZXN0L190ZXN0X211bHRpcHJvY2Vzc2luZy5weQppbmRleCBhYTY2ZGI0Li4wNmQzY2E5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZy5weQorKysgYi9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKQEAgLTQxLDcgKzQxLDcgQEAKIAogdHJ5OgogICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCByZWR1Y3Rpb24KLSAgICBIQVNfUkVEVUNUSU9OID0gVHJ1ZQorICAgIEhBU19SRURVQ1RJT04gPSByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIEhBU19SRURVQ1RJT04gPSBGYWxzZQogCkBAIC05Nyw2ICs5Nyw5IEBACiBleGNlcHQ6CiAgICAgTUFYRkQgPSAyNTYKIAorIyBUbyBzcGVlZCB1cCB0ZXN0cyB3aGVuIHVzaW5nIHRoZSBmb3Jrc2VydmVyLCB3ZSBjYW4gcHJlbG9hZCB0aGVzZToKK1BSRUxPQUQgPSBbJ19fbWFpbl9fJywgJ3Rlc3QudGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlciddCisKICMKICMgU29tZSB0ZXN0cyByZXF1aXJlIGN0eXBlcwogIwpAQCAtMjkyLDE3ICsyOTUsMjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChqb2luLmVsYXBzZWQsIDAuMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIFRydWUpCiAKKyAgICAgICAgIyBYWFggbWF5YmUgdGVybWluYXRpbmcgdG9vIHNvb24gY2F1c2VzIHRoZSBwcm9ibGVtcyBvbiBHZW50b28uLi4KKyAgICAgICAgdGltZS5zbGVlcCgxKQorCiAgICAgICAgIHAudGVybWluYXRlKCkKIAogICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ2FsYXJtJyk6CisgICAgICAgICAgICAjIE9uIHRoZSBHZW50b28gYnVpbGRib3Qgd2FpdHBpZCgpIG9mdGVuIHNlZW1zIHRvIGJsb2NrIGZvcmV2ZXIuCisgICAgICAgICAgICAjIFdlIHVzZSBhbGFybSgpIHRvIGludGVycnVwdCBpdCBpZiBpdCBibG9ja3MgZm9yIHRvbyBsb25nLgogICAgICAgICAgICAgZGVmIGhhbmRsZXIoKmFyZ3MpOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignam9pbiB0b29rIHRvbyBsb25nOiAlcycgJSBwKQogICAgICAgICAgICAgb2xkX2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBoYW5kbGVyKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oKSwgTm9uZSkKLSAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCiAgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgb2xkX2hhbmRsZXIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oKSwgTm9uZSkKQEAgLTM0MCw3ICszNDgsNiBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF90ZXN0X3JlY3Vyc2lvbihjbHMsIHdjb25uLCBpZCk6Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBmb3JraW5nCiAgICAgICAgIHdjb25uLnNlbmQoaWQpCiAgICAgICAgIGlmIGxlbihpZCkgPCAyOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CkBAIC0zODgsNyArMzk1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9MC4wKSkKICAgICAgICAgZXZlbnQuc2V0KCkKICAgICAgICAgcC5qb2luKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRfZm9yX2hhbmRsZShzZW50aW5lbCwgdGltZW91dD1ERUxUQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9MSkpCiAKICMKICMKQEAgLTY4OCw5ICs2OTUsNiBAQAogICAgIGRlZiB0ZXN0X3Rhc2tfZG9uZShzZWxmKToKICAgICAgICAgcXVldWUgPSBzZWxmLkpvaW5hYmxlUXVldWUoKQogCi0gICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNSkgYW5kIG5vdCBoYXNhdHRyKHF1ZXVlLCAndGFza19kb25lJyk6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJyZXF1aXJlcyAncXVldWUudGFza19kb25lKCknIG1ldGhvZCIpCi0KICAgICAgICAgd29ya2VycyA9IFtzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3RfdGFza19kb25lLCBhcmdzPShxdWV1ZSwpKQogICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDQpXQogCkBAIC0xNzc3LDYgKzE3ODEsMzUgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZ2V0KCksIGV4cGVjdGVkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5tYXBfYXN5bmMsIHNxciwgTCkKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF90cmFjZWJhY2soY2xzKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKDEyMykgIyBzb21lIGNvbW1lbnQKKworICAgIGRlZiB0ZXN0X3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgIyBXZSB3YW50IGVuc3VyZSB0aGF0IHRoZSB0cmFjZWJhY2sgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcyBpcworICAgICAgICAjIGNvbnRhaW5lZCBpbiB0aGUgdHJhY2ViYWNrIHJhaXNlZCBpbiB0aGUgbWFpbiBwcm9jZXNzLgorICAgICAgICBpZiBzZWxmLlRZUEUgPT0gJ3Byb2Nlc3Nlcyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuUG9vbCgxKSBhcyBwOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcC5hcHBseShzZWxmLl90ZXN0X3RyYWNlYmFjaykKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGV4YyA9IGUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgUnVudGltZUVycm9yJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShleGMpLCBSdW50aW1lRXJyb3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5hcmdzLCAoMTIzLCkpCisgICAgICAgICAgICBjYXVzZSA9IGV4Yy5fX2NhdXNlX18KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShjYXVzZSksIG11bHRpcHJvY2Vzc2luZy5wb29sLlJlbW90ZVRyYWNlYmFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3JhaXNlIFJ1bnRpbWVFcnJvcigxMjMpICMgc29tZSBjb21tZW50JywgY2F1c2UudGIpCisKKyAgICAgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIGYxOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjCisgICAgICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncmFpc2UgUnVudGltZUVycm9yKDEyMykgIyBzb21lIGNvbW1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmMS5nZXR2YWx1ZSgpKQorCiBkZWYgcmFpc2luZygpOgogICAgIHJhaXNlIEtleUVycm9yKCJrZXkiKQogCkBAIC0yNDg0LDcgKzI1MTcsNyBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKLSAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uIGltcG9ydCByZXNvdXJjZV9zaGFyZXIKKyAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IHJlc291cmNlX3NoYXJlcgogICAgICAgICByZXNvdXJjZV9zaGFyZXIuc3RvcCh0aW1lb3V0PTUpCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTI3OTgsMzAgKzI4MzEsNDAgQEAKICMgVGVzdCB0aGF0IGZyb20gLi4uIGltcG9ydCAqIHdvcmtzIGZvciBlYWNoIG1vZHVsZQogIwogCi1jbGFzcyBfVGVzdEltcG9ydFN0YXIoQmFzZVRlc3RDYXNlKToKK2NsYXNzIF9UZXN0SW1wb3J0U3Rhcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKKyAgICBkZWYgZ2V0X21vZHVsZV9uYW1lcyhzZWxmKToKKyAgICAgICAgaW1wb3J0IGdsb2IKKyAgICAgICAgZm9sZGVyID0gb3MucGF0aC5kaXJuYW1lKG11bHRpcHJvY2Vzc2luZy5fX2ZpbGVfXykKKyAgICAgICAgcGF0dGVybiA9IG9zLnBhdGguam9pbihmb2xkZXIsICcqLnB5JykKKyAgICAgICAgZmlsZXMgPSBnbG9iLmdsb2IocGF0dGVybikKKyAgICAgICAgbW9kdWxlcyA9IFtvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguc3BsaXQoZilbMV0pWzBdIGZvciBmIGluIGZpbGVzXQorICAgICAgICBtb2R1bGVzID0gWydtdWx0aXByb2Nlc3NpbmcuJyArIG0gZm9yIG0gaW4gbW9kdWxlc10KKyAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5fX2luaXRfXycpCisgICAgICAgIG1vZHVsZXMuYXBwZW5kKCdtdWx0aXByb2Nlc3NpbmcnKQorICAgICAgICByZXR1cm4gbW9kdWxlcwogCiAgICAgZGVmIHRlc3RfaW1wb3J0KHNlbGYpOgotICAgICAgICBtb2R1bGVzID0gWwotICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZycsICdtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbicsCi0gICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLmhlYXAnLCAnbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcucG9vbCcsICdtdWx0aXByb2Nlc3NpbmcucHJvY2VzcycsCi0gICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplJywgJ211bHRpcHJvY2Vzc2luZy51dGlsJwotICAgICAgICAgICAgXQorICAgICAgICBtb2R1bGVzID0gc2VsZi5nZXRfbW9kdWxlX25hbWVzKCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmsnKQorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9mb3Jrc2VydmVyJykKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fc3Bhd25fcG9zaXgnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9zcGF3bl93aW4zMicpCisgICAgICAgICAgICBpZiBub3QgSEFTX1JFRFVDVElPTjoKKyAgICAgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmtzZXJ2ZXInKQogCi0gICAgICAgIGlmIEhBU19SRURVQ1RJT046Ci0gICAgICAgICAgICBtb2R1bGVzLmFwcGVuZCgnbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbicpCi0KLSAgICAgICAgaWYgY19pbnQgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGNfaW50IGlzIE5vbmU6CiAgICAgICAgICAgICAjIFRoaXMgbW9kdWxlIHJlcXVpcmVzIF9jdHlwZXMKLSAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKCdtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzJykKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzJykKIAogICAgICAgICBmb3IgbmFtZSBpbiBtb2R1bGVzOgogICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZCwgJ19fYWxsX18nKSwgbmFtZSkKIAotICAgICAgICAgICAgZm9yIGF0dHIgaW4gZ2V0YXR0cihtb2QsICdfX2FsbF9fJywgKCkpOgorICAgICAgICAgICAgZm9yIGF0dHIgaW4gbW9kLl9fYWxsX186CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG1vZCwgYXR0ciksCiAgICAgICAgICAgICAgICAgICAgICclciBkb2VzIG5vdCBoYXZlIGF0dHJpYnV0ZSAlcicgJSAobW9kLCBhdHRyKQpAQCAtMjkwNCw3ICsyOTQ3LDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBfa2lsbGVyKGNscywgcGlkKToKLSAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR1VTUjEpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR1VTUjEnKSwgJ3JlcXVpcmVzIFNJR1VTUjEnKQpAQCAtMjkxNywxMiArMjk2MCwxNCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBraWxsZXIgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX2tpbGxlciwgYXJncz0ocGlkLCkpCiAgICAgICAgICAgICBraWxsZXIuc3RhcnQoKQotICAgICAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9dGltZS5zbGVlcCwgYXJncz0oMSwpKQotICAgICAgICAgICAgcC5zdGFydCgpCi0gICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXRpbWUuc2xlZXAsIGFyZ3M9KDIsKSkKKyAgICAgICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBraWxsZXIuam9pbigpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ290X3NpZ25hbFswXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgMCkKLSAgICAgICAgICAgIGtpbGxlci5qb2luKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1VTUjEsIG9sZGhhbmRsZXIpCiAKQEAgLTI5MzUsOCArMjk4MCwxMSBAQAogICAgIEB1bml0dGVzdC5za2lwSWYoV0lOMzIsICJza2lwcGVkIG9uIFdpbmRvd3MiKQogICAgIGRlZiB0ZXN0X2ludmFsaWRfaGFuZGxlcyhzZWxmKToKICAgICAgICAgY29ubiA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24oNDQ5Nzc2MDgpCisgICAgICAgICMgY2hlY2sgdGhhdCBwb2xsKCkgZG9lc24ndCBjcmFzaAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksIGNvbm4ucG9sbCkKKyAgICAgICAgICAgIGNvbm4ucG9sbCgpCisgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAjIEhhY2sgcHJpdmF0ZSBhdHRyaWJ1dGUgX2hhbmRsZSB0byBhdm9pZCBwcmludGluZyBhbiBlcnJvcgogICAgICAgICAgICAgIyBpbiBjb25uLl9fZGVsX18KQEAgLTI5NDQsMTMxICsyOTkyLDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE9TRXJyb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uLCAtMSkKIAotIwotIyBGdW5jdGlvbnMgdXNlZCB0byBjcmVhdGUgdGVzdCBjYXNlcyBmcm9tIHRoZSBiYXNlIG9uZXMgaW4gdGhpcyBtb2R1bGUKLSMKLQotZGVmIGNyZWF0ZV90ZXN0X2Nhc2VzKE1peGluLCB0eXBlKToKLSAgICByZXN1bHQgPSB7fQotICAgIGdsb2IgPSBnbG9iYWxzKCkKLSAgICBUeXBlID0gdHlwZS5jYXBpdGFsaXplKCkKLSAgICBBTExfVFlQRVMgPSB7J3Byb2Nlc3NlcycsICd0aHJlYWRzJywgJ21hbmFnZXInfQotCi0gICAgZm9yIG5hbWUgaW4gbGlzdChnbG9iLmtleXMoKSk6Ci0gICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnX1Rlc3QnKToKLSAgICAgICAgICAgIGJhc2UgPSBnbG9iW25hbWVdCi0gICAgICAgICAgICBhc3NlcnQgc2V0KGJhc2UuQUxMT1dFRF9UWVBFUykgPD0gQUxMX1RZUEVTLCBzZXQoYmFzZS5BTExPV0VEX1RZUEVTKQotICAgICAgICAgICAgaWYgdHlwZSBpbiBiYXNlLkFMTE9XRURfVFlQRVM6Ci0gICAgICAgICAgICAgICAgbmV3bmFtZSA9ICdXaXRoJyArIFR5cGUgKyBuYW1lWzE6XQotICAgICAgICAgICAgICAgIGNsYXNzIFRlbXAoYmFzZSwgTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHJlc3VsdFtuZXduYW1lXSA9IFRlbXAKLSAgICAgICAgICAgICAgICBUZW1wLl9fbmFtZV9fID0gVGVtcC5fX3F1YWxuYW1lX18gPSBuZXduYW1lCi0gICAgICAgICAgICAgICAgVGVtcC5fX21vZHVsZV9fID0gTWl4aW4uX19tb2R1bGVfXwotICAgIHJldHVybiByZXN1bHQKLQotIwotIyBDcmVhdGUgdGVzdCBjYXNlcwotIwotCi1jbGFzcyBQcm9jZXNzZXNNaXhpbihvYmplY3QpOgotICAgIFRZUEUgPSAncHJvY2Vzc2VzJwotICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcwotICAgIGNvbm5lY3Rpb24gPSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbgotICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKQotICAgIGFjdGl2ZV9jaGlsZHJlbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKQotICAgIFBvb2wgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBvb2wpCi0gICAgUGlwZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUGlwZSkKLSAgICBRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUXVldWUpCi0gICAgSm9pbmFibGVRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuSm9pbmFibGVRdWV1ZSkKLSAgICBMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Mb2NrKQotICAgIFJMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5STG9jaykKLSAgICBTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlNlbWFwaG9yZSkKLSAgICBCb3VuZGVkU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Cb3VuZGVkU2VtYXBob3JlKQotICAgIENvbmRpdGlvbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKQotICAgIEV2ZW50ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5FdmVudCkKLSAgICBCYXJyaWVyID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5CYXJyaWVyKQotICAgIFZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5WYWx1ZSkKLSAgICBBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQXJyYXkpCi0gICAgUmF3VmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd1ZhbHVlKQotICAgIFJhd0FycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5SYXdBcnJheSkKLQotdGVzdGNhc2VzX3Byb2Nlc3NlcyA9IGNyZWF0ZV90ZXN0X2Nhc2VzKFByb2Nlc3Nlc01peGluLCB0eXBlPSdwcm9jZXNzZXMnKQotZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfcHJvY2Vzc2VzKQotCi0KLWNsYXNzIE1hbmFnZXJNaXhpbihvYmplY3QpOgotICAgIFRZUEUgPSAnbWFuYWdlcicKLSAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKLSAgICBRdWV1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuUXVldWUnKSkKLSAgICBKb2luYWJsZVF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Kb2luYWJsZVF1ZXVlJykpCi0gICAgTG9jayA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuTG9jaycpKQotICAgIFJMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5STG9jaycpKQotICAgIFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuU2VtYXBob3JlJykpCi0gICAgQm91bmRlZFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQm91bmRlZFNlbWFwaG9yZScpKQotICAgIENvbmRpdGlvbiA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQ29uZGl0aW9uJykpCi0gICAgRXZlbnQgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkV2ZW50JykpCi0gICAgQmFycmllciA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQmFycmllcicpKQotICAgIFZhbHVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5WYWx1ZScpKQotICAgIEFycmF5ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5BcnJheScpKQotICAgIGxpc3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmxpc3QnKSkKLSAgICBkaWN0ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5kaWN0JykpCi0gICAgTmFtZXNwYWNlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5OYW1lc3BhY2UnKSkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBQb29sKGNscywgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIHJldHVybiBjbHMubWFuYWdlci5Qb29sKCphcmdzLCAqKmt3ZHMpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgotICAgICAgICBjbHMubWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6Ci0gICAgICAgICMgb25seSB0aGUgbWFuYWdlciBwcm9jZXNzIHNob3VsZCBiZSByZXR1cm5lZCBieSBhY3RpdmVfY2hpbGRyZW4oKQotICAgICAgICAjIGJ1dCB0aGlzIGNhbiB0YWtlIGEgYml0IG9uIHNsb3cgbWFjaGluZXMsIHNvIHdhaXQgYSBmZXcgc2Vjb25kcwotICAgICAgICAjIGlmIHRoZXJlIGFyZSBvdGhlciBjaGlsZHJlbiB0b28gKHNlZSAjMTczOTUpCi0gICAgICAgIHQgPSAwLjAxCi0gICAgICAgIHdoaWxlIGxlbihtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkpID4gMSBhbmQgdCA8IDU6Ci0gICAgICAgICAgICB0aW1lLnNsZWVwKHQpCi0gICAgICAgICAgICB0ICo9IDIKLSAgICAgICAgZ2MuY29sbGVjdCgpICAgICAgICAgICAgICAgICAgICAgICAjIGRvIGdhcmJhZ2UgY29sbGVjdGlvbgotICAgICAgICBpZiBjbHMubWFuYWdlci5fbnVtYmVyX29mX29iamVjdHMoKSAhPSAwOgotICAgICAgICAgICAgIyBUaGlzIGlzIG5vdCByZWFsbHkgYW4gZXJyb3Igc2luY2Ugc29tZSB0ZXN0cyBkbyBub3QKLSAgICAgICAgICAgICMgZW5zdXJlIHRoYXQgYWxsIHByb2Nlc3NlcyB3aGljaCBob2xkIGEgcmVmZXJlbmNlIHRvIGEKLSAgICAgICAgICAgICMgbWFuYWdlZCBvYmplY3QgaGF2ZSBiZWVuIGpvaW5lZC4KLSAgICAgICAgICAgIHByaW50KCdTaGFyZWQgb2JqZWN0cyB3aGljaCBzdGlsbCBleGlzdCBhdCBtYW5hZ2VyIHNodXRkb3duOicpCi0gICAgICAgICAgICBwcmludChjbHMubWFuYWdlci5fZGVidWdfaW5mbygpKQotICAgICAgICBjbHMubWFuYWdlci5zaHV0ZG93bigpCi0gICAgICAgIGNscy5tYW5hZ2VyLmpvaW4oKQotICAgICAgICBjbHMubWFuYWdlciA9IE5vbmUKLQotdGVzdGNhc2VzX21hbmFnZXIgPSBjcmVhdGVfdGVzdF9jYXNlcyhNYW5hZ2VyTWl4aW4sIHR5cGU9J21hbmFnZXInKQotZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfbWFuYWdlcikKLQotCi1jbGFzcyBUaHJlYWRzTWl4aW4ob2JqZWN0KToKLSAgICBUWVBFID0gJ3RocmVhZHMnCi0gICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5Qcm9jZXNzCi0gICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5jb25uZWN0aW9uCi0gICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5jdXJyZW50X3Byb2Nlc3MpCi0gICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5hY3RpdmVfY2hpbGRyZW4pCi0gICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKLSAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5QaXBlKQotICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5RdWV1ZSkKLSAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Kb2luYWJsZVF1ZXVlKQotICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkxvY2spCi0gICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlJMb2NrKQotICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuU2VtYXBob3JlKQotICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkJvdW5kZWRTZW1hcGhvcmUpCi0gICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Db25kaXRpb24pCi0gICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkV2ZW50KQotICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkJhcnJpZXIpCi0gICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlZhbHVlKQotICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5BcnJheSkKLQotdGVzdGNhc2VzX3RocmVhZHMgPSBjcmVhdGVfdGVzdF9jYXNlcyhUaHJlYWRzTWl4aW4sIHR5cGU9J3RocmVhZHMnKQotZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfdGhyZWFkcykKIAogCiBjbGFzcyBPdGhlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzQxOCw3ICszMzQxLDcgQEAKICAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKICAgICAgICAgaW1wb3J0IGpzb24sIHN1YnByb2Nlc3MKICAgICAgICAgIyBzdGFydCBjaGlsZCBwcm9jZXNzIHVzaW5nIHVudXN1YWwgZmxhZ3MKLSAgICAgICAgcHJvZyA9ICgnZnJvbSB0ZXN0LnRlc3RfbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBUZXN0RmxhZ3M7ICcgKworICAgICAgICBwcm9nID0gKCdmcm9tIHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBUZXN0RmxhZ3M7ICcgKwogICAgICAgICAgICAgICAgICdUZXN0RmxhZ3MucnVuX2luX2NoaWxkKCknKQogICAgICAgICBkYXRhID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctRScsICctUycsICctTycsICctYycsIHByb2ddKQpAQCAtMzQ2NSwxMyArMzM4OCwxNCBAQAogCiBjbGFzcyBUZXN0Tm9Gb3JrQm9tYih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfbm9mb3JrYm9tYihzZWxmKToKKyAgICAgICAgc20gPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZCgpCiAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ21wX2ZvcmtfYm9tYi5weScpCi0gICAgICAgIGlmIFdJTjMyOgotICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShuYW1lKQorICAgICAgICBpZiBzbSAhPSAnZm9yayc6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKG5hbWUsIHNtKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgb3V0LmRlY29kZSgnYXNjaWknKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1J1bnRpbWVFcnJvcicsIGVyci5kZWNvZGUoJ2FzY2lpJykpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayhuYW1lKQorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2sobmFtZSwgc20pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxMjMnLCBvdXQuZGVjb2RlKCdhc2NpaScpLnJzdHJpcCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgZXJyLmRlY29kZSgnYXNjaWknKSkKIApAQCAtMzQ4OSw3ICszNDEzLDggQEAKICAgICAgICAgaWYgbiA+IDE6CiAgICAgICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWNscy5jaGlsZCwgYXJncz0obi0xLCBjb25uKSkKICAgICAgICAgICAgIHAuc3RhcnQoKQotICAgICAgICAgICAgcC5qb2luKCkKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgcC5qb2luKHRpbWVvdXQ9NSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbm4uc2VuZChsZW4odXRpbC5fYWZ0ZXJmb3JrX3JlZ2lzdHJ5KSkKICAgICAgICAgY29ubi5jbG9zZSgpCkBAIC0zNTAwLDExICszNDI1LDc4IEBACiAgICAgICAgIG9sZF9zaXplID0gbGVuKHV0aWwuX2FmdGVyZm9ya19yZWdpc3RyeSkKICAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLmNoaWxkLCBhcmdzPSg1LCB3KSkKICAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHcuY2xvc2UoKQogICAgICAgICBuZXdfc2l6ZSA9IHIucmVjdigpCi0gICAgICAgIHAuam9pbigpCisgICAgICAgIHAuam9pbih0aW1lb3V0PTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG5ld19zaXplLCBvbGRfc2l6ZSkKIAogIworIyBDaGVjayB0aGF0IG5vbi1mb3JrZWQgY2hpbGQgcHJvY2Vzc2VzIGRvIG5vdCBpbmhlcml0IHVubmVlZGVkIGZkcy9oYW5kbGVzCisjCisKK2NsYXNzIFRlc3RDbG9zZUZkcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X2hpZ2hfc29ja2V0X2ZkKHNlbGYpOgorICAgICAgICBpZiBXSU4zMjoKKyAgICAgICAgICAgICMgVGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBub3QgaGF2ZSBhbnkgc29ja2V0IGhhbmRsZXMsIHNvCisgICAgICAgICAgICAjIGNhbGxpbmcgc29ja2V0LmZyb21mZCgpIHNob3VsZCBwcm9kdWNlIFdTQUVOT1RTT0NLIGV2ZW4KKyAgICAgICAgICAgICMgaWYgdGhlcmUgaXMgYSBoYW5kbGUgb2YgdGhlIHNhbWUgbnVtYmVyLgorICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5zb2NrZXQoKS5kZXRhY2goKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBXZSB3YW50IHRvIHByb2R1Y2UgYSBzb2NrZXQgd2l0aCBhbiBmZCBoaWdoIGVub3VnaCB0aGF0IGEKKyAgICAgICAgICAgICMgZnJlc2hseSBjcmVhdGVkIGNoaWxkIHByb2Nlc3Mgd2lsbCBub3QgaGF2ZSBhbnkgZmRzIGFzIGhpZ2guCisgICAgICAgICAgICBmZCA9IHNvY2tldC5zb2NrZXQoKS5kZXRhY2goKQorICAgICAgICAgICAgdG9fY2xvc2UgPSBbXQorICAgICAgICAgICAgd2hpbGUgZmQgPCA1MDoKKyAgICAgICAgICAgICAgICB0b19jbG9zZS5hcHBlbmQoZmQpCisgICAgICAgICAgICAgICAgZmQgPSBvcy5kdXAoZmQpCisgICAgICAgICAgICBmb3IgeCBpbiB0b19jbG9zZToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZSh4KQorICAgICAgICAgICAgcmV0dXJuIGZkCisKKyAgICBkZWYgY2xvc2Uoc2VsZiwgZmQpOgorICAgICAgICBpZiBXSU4zMjoKKyAgICAgICAgICAgIHNvY2tldC5zb2NrZXQoZmlsZW5vPWZkKS5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF9jbG9zZWZkcyhjbHMsIGNvbm4sIGZkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IHNvY2tldC5mcm9tZmQoZmQsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGNvbm4uc2VuZChlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgICAgICBjb25uLnNlbmQoTm9uZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlZmQoc2VsZik6CisgICAgICAgIGlmIG5vdCBIQVNfUkVEVUNUSU9OOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3JlcXVpcmVzIGZkIHBpY2tsaW5nJykKKworICAgICAgICByZWFkZXIsIHdyaXRlciA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKCkKKyAgICAgICAgZmQgPSBzZWxmLmdldF9oaWdoX3NvY2tldF9mZCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fdGVzdF9jbG9zZWZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPSh3cml0ZXIsIGZkKSkKKyAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCkKKyAgICAgICAgICAgIGUgPSByZWFkZXIucmVjdigpCisgICAgICAgICAgICBwLmpvaW4odGltZW91dD01KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5jbG9zZShmZCkKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisgICAgICAgICAgICByZWFkZXIuY2xvc2UoKQorCisgICAgICAgIGlmIG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkgPT0gJ2ZvcmsnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhlLCBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgV1NBRU5PVFNPQ0sgPSAxMDAzOAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUsIE9TRXJyb3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5lcnJubyA9PSBlcnJuby5FQkFERiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUud2luZXJyb3IgPT0gV1NBRU5PVFNPQ0ssIGUpCisKKyMKICMgSXNzdWUgIzE3MDk3OiBFSU5UUiBzaG91bGQgYmUgaWdub3JlZCBieSByZWN2KCksIHNlbmQoKSwgYWNjZXB0KCkgZXRjCiAjCiAKQEAgLTM1NDgsMTAgKzM1NDAsMTAgQEAKICAgICAgICAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1VTUjEsIGhhbmRsZXIpCi0gICAgICAgIGwgPSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lcigpCi0gICAgICAgIGNvbm4uc2VuZChsLmFkZHJlc3MpCi0gICAgICAgIGEgPSBsLmFjY2VwdCgpCi0gICAgICAgIGEuc2VuZCgnd2VsY29tZScpCisgICAgICAgIHdpdGggbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIoKSBhcyBsOgorICAgICAgICAgICAgY29ubi5zZW5kKGwuYWRkcmVzcykKKyAgICAgICAgICAgIGEgPSBsLmFjY2VwdCgpCisgICAgICAgICAgICBhLnNlbmQoJ3dlbGNvbWUnKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdTSUdVU1IxJyksICdyZXF1aXJlcyBTSUdVU1IxJykKICAgICBkZWYgdGVzdF9pZ25vcmVfbGlzdGVuZXIoc2VsZik6CkBAIC0zNTcyLDI2ICszNTY0LDI2NyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgY29ubi5jbG9zZSgpCiAKLSMKLSMKLSMKK2NsYXNzIFRlc3RTdGFydE1ldGhvZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9jaGVja19jb250ZXh0KGNscywgY29ubik6CisgICAgICAgIGNvbm4uc2VuZChtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZCgpKQogCi1kZWYgc2V0VXBNb2R1bGUoKToKLSAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgibGludXgiKToKKyAgICBkZWYgY2hlY2tfY29udGV4dChzZWxmLCBjdHgpOgorICAgICAgICByLCB3ID0gY3R4LlBpcGUoZHVwbGV4PUZhbHNlKQorICAgICAgICBwID0gY3R4LlByb2Nlc3ModGFyZ2V0PXNlbGYuX2NoZWNrX2NvbnRleHQsIGFyZ3M9KHcsKSkKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHcuY2xvc2UoKQorICAgICAgICBjaGlsZF9tZXRob2QgPSByLnJlY3YoKQorICAgICAgICByLmNsb3NlKCkKKyAgICAgICAgcC5qb2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGlsZF9tZXRob2QsIGN0eC5nZXRfc3RhcnRfbWV0aG9kKCkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0KHNlbGYpOgorICAgICAgICBmb3IgbWV0aG9kIGluICgnZm9yaycsICdzcGF3bicsICdmb3Jrc2VydmVyJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3R4ID0gbXVsdGlwcm9jZXNzaW5nLmdldF9jb250ZXh0KG1ldGhvZCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfc3RhcnRfbWV0aG9kKCksIG1ldGhvZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3R4LmdldF9jb250ZXh0KCksIGN0eCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfc3RhcnRfbWV0aG9kLCAnc3Bhd24nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9zdGFydF9tZXRob2QsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbnRleHQoY3R4KQorCisgICAgZGVmIHRlc3Rfc2V0X2dldChzZWxmKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9mb3Jrc2VydmVyX3ByZWxvYWQoUFJFTE9BRCkKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIG9sZF9tZXRob2QgPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvY2sgPSBtdWx0aXByb2Nlc3NpbmcuUkxvY2soKQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJPU0Vycm9yIHJhaXNlcyBvbiBSTG9jayBjcmVhdGlvbiwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlZSBpc3N1ZSAzMTExISIpCi0gICAgY2hlY2tfZW5vdWdoX3NlbWFwaG9yZXMoKQotICAgIHV0aWwuZ2V0X3RlbXBfZGlyKCkgICAgICMgY3JlYXRlcyB0ZW1wIGRpcmVjdG9yeSBmb3IgdXNlIGJ5IGFsbCBwcm9jZXNzZXMKLSAgICBtdWx0aXByb2Nlc3NpbmcuZ2V0X2xvZ2dlcigpLnNldExldmVsKExPR19MRVZFTCkKKyAgICAgICAgICAgIGZvciBtZXRob2QgaW4gKCdmb3JrJywgJ3NwYXduJywgJ2ZvcmtzZXJ2ZXInKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKG1ldGhvZCwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCksIG1ldGhvZCkKKyAgICAgICAgICAgICAgICBjdHggPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X2NvbnRleHQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9zdGFydF9tZXRob2QoKSwgbWV0aG9kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGN0eCkuX19uYW1lX18ubG93ZXIoKS5zdGFydHN3aXRoKG1ldGhvZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgICAgICBjdHguUHJvY2Vzcy5fX25hbWVfXy5sb3dlcigpLnN0YXJ0c3dpdGgobWV0aG9kKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbnRleHQobXVsdGlwcm9jZXNzaW5nKQorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKG9sZF9tZXRob2QsIGZvcmNlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGNvdW50LCAxKQorCisgICAgZGVmIHRlc3RfZ2V0X2FsbChzZWxmKToKKyAgICAgICAgbWV0aG9kcyA9IG11bHRpcHJvY2Vzc2luZy5nZXRfYWxsX3N0YXJ0X21ldGhvZHMoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0aG9kcywgWydzcGF3biddKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ldGhvZHMgPT0gWydmb3JrJywgJ3NwYXduJ10gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzID09IFsnZm9yaycsICdzcGF3bicsICdmb3Jrc2VydmVyJ10pCisKKyMKKyMgQ2hlY2sgdGhhdCBraWxsaW5nIHByb2Nlc3MgZG9lcyBub3QgbGVhayBuYW1lZCBzZW1hcGhvcmVzCisjCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsCisgICAgICAgICAgICAgICAgICJ0ZXN0IHNlbWFudGljcyBkb24ndCBtYWtlIHNlbnNlIG9uIFdpbmRvd3MiKQorY2xhc3MgVGVzdFNlbWFwaG9yZVRyYWNrZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NlbWFwaG9yZV90cmFja2VyKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICBjbWQgPSAnJydpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZyBhcyBtcCwgdGltZSwgb3MKKyAgICAgICAgICAgIG1wLnNldF9zdGFydF9tZXRob2QoInNwYXduIikKKyAgICAgICAgICAgIGxvY2sxID0gbXAuTG9jaygpCisgICAgICAgICAgICBsb2NrMiA9IG1wLkxvY2soKQorICAgICAgICAgICAgb3Mud3JpdGUoJWQsIGxvY2sxLl9zZW1sb2NrLm5hbWUuZW5jb2RlKCJhc2NpaSIpICsgYiJcXG4iKQorICAgICAgICAgICAgb3Mud3JpdGUoJWQsIGxvY2syLl9zZW1sb2NrLm5hbWUuZW5jb2RlKCJhc2NpaSIpICsgYiJcXG4iKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKKyAgICAgICAgJycnCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWMnLCBjbWQgJSAodywgdyldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2Zkcz1bd10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgIHdpdGggb3BlbihyLCAncmInLCBjbG9zZWZkPVRydWUpIGFzIGY6CisgICAgICAgICAgICBuYW1lMSA9IGYucmVhZGxpbmUoKS5yc3RyaXAoKS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgIG5hbWUyID0gZi5yZWFkbGluZSgpLnJzdHJpcCgpLmRlY29kZSgnYXNjaWknKQorICAgICAgICBfbXVsdGlwcm9jZXNzaW5nLnNlbV91bmxpbmsobmFtZTEpCisgICAgICAgIHAudGVybWluYXRlKCkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgdGltZS5zbGVlcCgxLjApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY3R4OgorICAgICAgICAgICAgX211bHRpcHJvY2Vzc2luZy5zZW1fdW5saW5rKG5hbWUyKQorICAgICAgICAjIGRvY3Mgc2F5IGl0IHNob3VsZCBiZSBFTk9FTlQsIGJ1dCBPU1ggc2VlbXMgdG8gZ2l2ZSBFSU5WQUwKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjdHguZXhjZXB0aW9uLmVycm5vLCAoZXJybm8uRU5PRU5ULCBlcnJuby5FSU5WQUwpKQorICAgICAgICBlcnIgPSBwLnN0ZGVyci5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHAuc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgZXhwZWN0ZWQgPSAnc2VtYXBob3JlX3RyYWNrZXI6IFRoZXJlIGFwcGVhciB0byBiZSAyIGxlYWtlZCBzZW1hcGhvcmVzJworICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyciwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCAnc2VtYXBob3JlX3RyYWNrZXI6ICVyOiBcW0Vycm5vJyAlIG5hbWUxKQorCisjCisjIE1peGlucworIworCitjbGFzcyBQcm9jZXNzZXNNaXhpbihvYmplY3QpOgorICAgIFRZUEUgPSAncHJvY2Vzc2VzJworICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcworICAgIGNvbm5lY3Rpb24gPSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbgorICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKQorICAgIGFjdGl2ZV9jaGlsZHJlbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKQorICAgIFBvb2wgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBvb2wpCisgICAgUGlwZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUGlwZSkKKyAgICBRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUXVldWUpCisgICAgSm9pbmFibGVRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuSm9pbmFibGVRdWV1ZSkKKyAgICBMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Mb2NrKQorICAgIFJMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5STG9jaykKKyAgICBTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlNlbWFwaG9yZSkKKyAgICBCb3VuZGVkU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Cb3VuZGVkU2VtYXBob3JlKQorICAgIENvbmRpdGlvbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKQorICAgIEV2ZW50ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5FdmVudCkKKyAgICBCYXJyaWVyID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5CYXJyaWVyKQorICAgIFZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5WYWx1ZSkKKyAgICBBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQXJyYXkpCisgICAgUmF3VmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd1ZhbHVlKQorICAgIFJhd0FycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5SYXdBcnJheSkKIAogCi1kZWYgdGVhckRvd25Nb2R1bGUoKToKLSAgICAjIHBhdXNlIGEgYml0IHNvIHdlIGRvbid0IGdldCB3YXJuaW5nIGFib3V0IGRhbmdsaW5nIHRocmVhZHMvcHJvY2Vzc2VzCi0gICAgdGltZS5zbGVlcCgwLjUpCitjbGFzcyBNYW5hZ2VyTWl4aW4ob2JqZWN0KToKKyAgICBUWVBFID0gJ21hbmFnZXInCisgICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCisgICAgUXVldWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlF1ZXVlJykpCisgICAgSm9pbmFibGVRdWV1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuSm9pbmFibGVRdWV1ZScpKQorICAgIExvY2sgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkxvY2snKSkKKyAgICBSTG9jayA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuUkxvY2snKSkKKyAgICBTZW1hcGhvcmUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlNlbWFwaG9yZScpKQorICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkJvdW5kZWRTZW1hcGhvcmUnKSkKKyAgICBDb25kaXRpb24gPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkNvbmRpdGlvbicpKQorICAgIEV2ZW50ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5FdmVudCcpKQorICAgIEJhcnJpZXIgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkJhcnJpZXInKSkKKyAgICBWYWx1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuVmFsdWUnKSkKKyAgICBBcnJheSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQXJyYXknKSkKKyAgICBsaXN0ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5saXN0JykpCisgICAgZGljdCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuZGljdCcpKQorICAgIE5hbWVzcGFjZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuTmFtZXNwYWNlJykpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgUG9vbChjbHMsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICByZXR1cm4gY2xzLm1hbmFnZXIuUG9vbCgqYXJncywgKiprd2RzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLm1hbmFnZXIgPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAjIG9ubHkgdGhlIG1hbmFnZXIgcHJvY2VzcyBzaG91bGQgYmUgcmV0dXJuZWQgYnkgYWN0aXZlX2NoaWxkcmVuKCkKKyAgICAgICAgIyBidXQgdGhpcyBjYW4gdGFrZSBhIGJpdCBvbiBzbG93IG1hY2hpbmVzLCBzbyB3YWl0IGEgZmV3IHNlY29uZHMKKyAgICAgICAgIyBpZiB0aGVyZSBhcmUgb3RoZXIgY2hpbGRyZW4gdG9vIChzZWUgIzE3Mzk1KQorICAgICAgICB0ID0gMC4wMQorICAgICAgICB3aGlsZSBsZW4obXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbigpKSA+IDEgYW5kIHQgPCA1OgorICAgICAgICAgICAgdGltZS5zbGVlcCh0KQorICAgICAgICAgICAgdCAqPSAyCisgICAgICAgIGdjLmNvbGxlY3QoKSAgICAgICAgICAgICAgICAgICAgICAgIyBkbyBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgICAgICAgaWYgY2xzLm1hbmFnZXIuX251bWJlcl9vZl9vYmplY3RzKCkgIT0gMDoKKyAgICAgICAgICAgICMgVGhpcyBpcyBub3QgcmVhbGx5IGFuIGVycm9yIHNpbmNlIHNvbWUgdGVzdHMgZG8gbm90CisgICAgICAgICAgICAjIGVuc3VyZSB0aGF0IGFsbCBwcm9jZXNzZXMgd2hpY2ggaG9sZCBhIHJlZmVyZW5jZSB0byBhCisgICAgICAgICAgICAjIG1hbmFnZWQgb2JqZWN0IGhhdmUgYmVlbiBqb2luZWQuCisgICAgICAgICAgICBwcmludCgnU2hhcmVkIG9iamVjdHMgd2hpY2ggc3RpbGwgZXhpc3QgYXQgbWFuYWdlciBzaHV0ZG93bjonKQorICAgICAgICAgICAgcHJpbnQoY2xzLm1hbmFnZXIuX2RlYnVnX2luZm8oKSkKKyAgICAgICAgY2xzLm1hbmFnZXIuc2h1dGRvd24oKQorICAgICAgICBjbHMubWFuYWdlci5qb2luKCkKKyAgICAgICAgY2xzLm1hbmFnZXIgPSBOb25lCiAKIAotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkKK2NsYXNzIFRocmVhZHNNaXhpbihvYmplY3QpOgorICAgIFRZUEUgPSAndGhyZWFkcycKKyAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LlByb2Nlc3MKKyAgICBjb25uZWN0aW9uID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LmNvbm5lY3Rpb24KKyAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmN1cnJlbnRfcHJvY2VzcykKKyAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmFjdGl2ZV9jaGlsZHJlbikKKyAgICBQb29sID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Qb29sKQorICAgIFBpcGUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlBpcGUpCisgICAgUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlF1ZXVlKQorICAgIEpvaW5hYmxlUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkpvaW5hYmxlUXVldWUpCisgICAgTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuTG9jaykKKyAgICBSTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUkxvY2spCisgICAgU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5TZW1hcGhvcmUpCisgICAgQm91bmRlZFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQm91bmRlZFNlbWFwaG9yZSkKKyAgICBDb25kaXRpb24gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkNvbmRpdGlvbikKKyAgICBFdmVudCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuRXZlbnQpCisgICAgQmFycmllciA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQmFycmllcikKKyAgICBWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuVmFsdWUpCisgICAgQXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkFycmF5KQorCisjCisjIEZ1bmN0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGZyb20gdGhlIGJhc2Ugb25lcyBpbiB0aGlzIG1vZHVsZQorIworCitkZWYgaW5zdGFsbF90ZXN0c19pbl9tb2R1bGVfZGljdChyZW1vdGVfZ2xvYnMsIHN0YXJ0X21ldGhvZCk6CisgICAgX19tb2R1bGVfXyA9IHJlbW90ZV9nbG9ic1snX19uYW1lX18nXQorICAgIGxvY2FsX2dsb2JzID0gZ2xvYmFscygpCisgICAgQUxMX1RZUEVTID0geydwcm9jZXNzZXMnLCAndGhyZWFkcycsICdtYW5hZ2VyJ30KKworICAgIGZvciBuYW1lLCBiYXNlIGluIGxvY2FsX2dsb2JzLml0ZW1zKCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGJhc2UsIHR5cGUpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgaXNzdWJjbGFzcyhiYXNlLCBCYXNlVGVzdENhc2UpOgorICAgICAgICAgICAgaWYgYmFzZSBpcyBCYXNlVGVzdENhc2U6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFzc2VydCBzZXQoYmFzZS5BTExPV0VEX1RZUEVTKSA8PSBBTExfVFlQRVMsIGJhc2UuQUxMT1dFRF9UWVBFUworICAgICAgICAgICAgZm9yIHR5cGVfIGluIGJhc2UuQUxMT1dFRF9UWVBFUzoKKyAgICAgICAgICAgICAgICBuZXduYW1lID0gJ1dpdGgnICsgdHlwZV8uY2FwaXRhbGl6ZSgpICsgbmFtZVsxOl0KKyAgICAgICAgICAgICAgICBNaXhpbiA9IGxvY2FsX2dsb2JzW3R5cGVfLmNhcGl0YWxpemUoKSArICdNaXhpbiddCisgICAgICAgICAgICAgICAgY2xhc3MgVGVtcChiYXNlLCBNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgVGVtcC5fX25hbWVfXyA9IFRlbXAuX19xdWFsbmFtZV9fID0gbmV3bmFtZQorICAgICAgICAgICAgICAgIFRlbXAuX19tb2R1bGVfXyA9IF9fbW9kdWxlX18KKyAgICAgICAgICAgICAgICByZW1vdGVfZ2xvYnNbbmV3bmFtZV0gPSBUZW1wCisgICAgICAgIGVsaWYgaXNzdWJjbGFzcyhiYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBjbGFzcyBUZW1wKGJhc2UsIG9iamVjdCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgVGVtcC5fX25hbWVfXyA9IFRlbXAuX19xdWFsbmFtZV9fID0gbmFtZQorICAgICAgICAgICAgVGVtcC5fX21vZHVsZV9fID0gX19tb2R1bGVfXworICAgICAgICAgICAgcmVtb3RlX2dsb2JzW25hbWVdID0gVGVtcAorCisgICAgZGFuZ2xpbmcgPSBbTm9uZSwgTm9uZV0KKyAgICBvbGRfc3RhcnRfbWV0aG9kID0gW05vbmVdCisKKyAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9mb3Jrc2VydmVyX3ByZWxvYWQoUFJFTE9BRCkKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKQorICAgICAgICBkYW5nbGluZ1swXSA9IG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZy5jb3B5KCkKKyAgICAgICAgZGFuZ2xpbmdbMV0gPSB0aHJlYWRpbmcuX2RhbmdsaW5nLmNvcHkoKQorICAgICAgICBvbGRfc3RhcnRfbWV0aG9kWzBdID0gbXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoYWxsb3dfbm9uZT1UcnVlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZChzdGFydF9tZXRob2QsIGZvcmNlPVRydWUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3Qoc3RhcnRfbWV0aG9kICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgc3RhcnQgbWV0aG9kIG5vdCBzdXBwb3J0ZWQnKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJsaW51eCIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvY2sgPSBtdWx0aXByb2Nlc3NpbmcuUkxvY2soKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk9TRXJyb3IgcmFpc2VzIG9uIFJMb2NrIGNyZWF0aW9uLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlZSBpc3N1ZSAzMTExISIpCisgICAgICAgIGNoZWNrX2Vub3VnaF9zZW1hcGhvcmVzKCkKKyAgICAgICAgdXRpbC5nZXRfdGVtcF9kaXIoKSAgICAgIyBjcmVhdGVzIHRlbXAgZGlyZWN0b3J5CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VyKCkuc2V0TGV2ZWwoTE9HX0xFVkVMKQorCisgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKG9sZF9zdGFydF9tZXRob2RbMF0sIGZvcmNlPVRydWUpCisgICAgICAgICMgcGF1c2UgYSBiaXQgc28gd2UgZG9uJ3QgZ2V0IHdhcm5pbmcgYWJvdXQgZGFuZ2xpbmcgdGhyZWFkcy9wcm9jZXNzZXMKKyAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9jbGVhbnVwKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHRtcCA9IHNldChtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fZGFuZ2xpbmcpIC0gc2V0KGRhbmdsaW5nWzBdKQorICAgICAgICBpZiB0bXA6CisgICAgICAgICAgICBwcmludCgnRGFuZ2xpbmcgcHJvY2Vzc2VzOicsIHRtcCwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBkZWwgdG1wCisgICAgICAgIHRtcCA9IHNldCh0aHJlYWRpbmcuX2RhbmdsaW5nKSAtIHNldChkYW5nbGluZ1sxXSkKKyAgICAgICAgaWYgdG1wOgorICAgICAgICAgICAgcHJpbnQoJ0RhbmdsaW5nIHRocmVhZHM6JywgdG1wLCBmaWxlPXN5cy5zdGRlcnIpCisKKyAgICByZW1vdGVfZ2xvYnNbJ3NldFVwTW9kdWxlJ10gPSBzZXRVcE1vZHVsZQorICAgIHJlbW90ZV9nbG9ic1sndGVhckRvd25Nb2R1bGUnXSA9IHRlYXJEb3duTW9kdWxlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9hdWRpb2RhdGEvcGx1Y2stcGNtMjQuYXUgYi9MaWIvdGVzdC9hdWRpb2RhdGEvcGx1Y2stcGNtMjQuYXUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiMjMwNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2F1ZGlvZGF0YS9wbHVjay1wY20yNC5hdQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9hdWRpb3Rlc3RzLnB5IGIvTGliL3Rlc3QvYXVkaW90ZXN0cy5weQppbmRleCA2ZmY1YmI4Li5iNzQ5N2NlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9hdWRpb3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkKQEAgLTEyLDI0ICsxMiw2IEBACiAgICAgZGVmIHNlZWsoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KIAotZGVmIGJ5dGVzd2FwMihkYXRhKToKLSAgICBhID0gYXJyYXkuYXJyYXkoJ2gnKQotICAgIGEuZnJvbWJ5dGVzKGRhdGEpCi0gICAgYS5ieXRlc3dhcCgpCi0gICAgcmV0dXJuIGEudG9ieXRlcygpCi0KLWRlZiBieXRlc3dhcDMoZGF0YSk6Ci0gICAgYmEgPSBieXRlYXJyYXkoZGF0YSkKLSAgICBiYVs6OjNdID0gZGF0YVsyOjozXQotICAgIGJhWzI6OjNdID0gZGF0YVs6OjNdCi0gICAgcmV0dXJuIGJ5dGVzKGJhKQotCi1kZWYgYnl0ZXN3YXA0KGRhdGEpOgotICAgIGEgPSBhcnJheS5hcnJheSgnaScpCi0gICAgYS5mcm9tYnl0ZXMoZGF0YSkKLSAgICBhLmJ5dGVzd2FwKCkKLSAgICByZXR1cm4gYS50b2J5dGVzKCkKLQogCiBjbGFzcyBBdWRpb1Rlc3RzOgogICAgIGNsb3NlX2ZkID0gRmFsc2UKQEAgLTU2LDYgKzM4LDEyIEBACiAgICAgICAgIHBhcmFtcyA9IGYuZ2V0cGFyYW1zKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMsCiAgICAgICAgICAgICAgICAgKG5jaGFubmVscywgc2FtcHdpZHRoLCBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgbmNoYW5uZWxzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5zYW1wd2lkdGgsIHNhbXB3aWR0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuZnJhbWVyYXRlLCBmcmFtZXJhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5mcmFtZXMsIG5mcmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmNvbXB0eXBlLCBjb21wdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuY29tcG5hbWUsIGNvbXBuYW1lKQogCiAgICAgICAgIGR1bXAgPSBwaWNrbGUuZHVtcHMocGFyYW1zKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5sb2FkcyhkdW1wKSwgcGFyYW1zKQpAQCAtNzIsMTUgKzYwLDEyIEBACiAgICAgICAgIHJldHVybiBmCiAKICAgICBkZWYgY2hlY2tfZmlsZShzZWxmLCB0ZXN0ZmlsZSwgbmZyYW1lcywgZnJhbWVzKToKLSAgICAgICAgZiA9IHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlLCAncmInKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5jaGFubmVscygpLCBzZWxmLm5jaGFubmVscykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRzYW1wd2lkdGgoKSwgc2VsZi5zYW1wd2lkdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZnJhbWVyYXRlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5mcmFtZXMoKSwgbmZyYW1lcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKG5mcmFtZXMpLCBmcmFtZXMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3dyaXRlX3BhcmFtcyhzZWxmKToKICAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQpAQCAtOTAsNiArNzUsNTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZnJhbWVzLCBzZWxmLmNvbXB0eXBlLCBzZWxmLmNvbXBuYW1lKQogICAgICAgICBmLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X3dyaXRlX2NvbnRleHRfbWFuYWdlcl9jYWxsc19jbG9zZShzZWxmKToKKyAgICAgICAgIyBDbG9zZSBjaGVja3MgZm9yIGEgbWluaW11bSBoZWFkZXIgYW5kIHdpbGwgcmFpc2UgYW4gZXJyb3IKKyAgICAgICAgIyBpZiBpdCBpcyBub3Qgc2V0LCBzbyB0aGlzIHByb3ZlcyB0aGF0IGNsb3NlIGlzIGNhbGxlZC4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLm1vZHVsZS5FcnJvcik6CisgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4oVEVTVEZOLCAnd2InKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5tb2R1bGUuRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX3dpdGhfb3Blbl9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNldG5jaGFubmVscyhzZWxmLm5jaGFubmVscykKKyAgICAgICAgICAgICAgICBmLnNldHNhbXB3aWR0aChzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgICAgICBmLnNldGZyYW1lcmF0ZShzZWxmLmZyYW1lcmF0ZSkKKyAgICAgICAgICAgICAgICBmLnNldGNvbXB0eXBlKHNlbGYuY29tcHR5cGUsIHNlbGYuY29tcG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLmNsb3NlZCwgc2VsZi5jbG9zZV9mZCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmdldGZwKCkuY2xvc2VkKQorICAgICAgICAgICAgICAgIHBhcmFtcyA9IGYuZ2V0cGFyYW1zKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uY2hhbm5lbHMsIHNlbGYubmNoYW5uZWxzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLnNhbXB3aWR0aCwgc2VsZi5zYW1wd2lkdGgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuZnJhbWVyYXRlLCBzZWxmLmZyYW1lcmF0ZSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlX2ZkOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYuZ2V0ZnAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUuY2xvc2VkLCBzZWxmLmNsb3NlX2ZkKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX3dpdGhfZmlsZW5hbWUoc2VsZik6CisgICAgICAgICMgSWYgdGhlIGZpbGUgZG9lc24ndCBnZXQgY2xvc2VkLCB0aGlzIHRlc3Qgd29uJ3QgZmFpbCwgYnV0IGl0IHdpbGwKKyAgICAgICAgIyBwcm9kdWNlIGEgcmVzb3VyY2UgbGVhayB3YXJuaW5nLgorICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi5zZXRuY2hhbm5lbHMoc2VsZi5uY2hhbm5lbHMpCisgICAgICAgICAgICBmLnNldHNhbXB3aWR0aChzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgIGYuc2V0ZnJhbWVyYXRlKHNlbGYuZnJhbWVyYXRlKQorICAgICAgICAgICAgZi5zZXRjb21wdHlwZShzZWxmLmNvbXB0eXBlLCBzZWxmLmNvbXBuYW1lKQorICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4oVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmdldGZwKCkuY2xvc2VkKQorICAgICAgICAgICAgcGFyYW1zID0gZi5nZXRwYXJhbXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmNoYW5uZWxzLCBzZWxmLm5jaGFubmVscykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLnNhbXB3aWR0aCwgc2VsZi5zYW1wd2lkdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIHNlbGYuZnJhbWVyYXRlKQorICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZV9mZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYuZ2V0ZnAoKSkKKwogICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgogICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCiAgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCkBAIC05OCw2ICsxMzAsMzAgQEAKIAogICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoVEVTVEZOLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCisgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCisgICAgICAgIGYud3JpdGVmcmFtZXMoYnl0ZWFycmF5KHNlbGYuZnJhbWVzKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKKworICAgIGRlZiB0ZXN0X3dyaXRlX2FycmF5KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCisgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCisgICAgICAgIGYud3JpdGVmcmFtZXMoYXJyYXkuYXJyYXkoJ2gnLCBzZWxmLmZyYW1lcykpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCisKKyAgICBkZWYgdGVzdF93cml0ZV9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCisgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCisgICAgICAgIGYud3JpdGVmcmFtZXMobWVtb3J5dmlldyhzZWxmLmZyYW1lcykpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCisKICAgICBkZWYgdGVzdF9pbmNvbXBsZXRlZF93cml0ZShzZWxmKToKICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6CiAgICAgICAgICAgICB0ZXN0ZmlsZS53cml0ZShiJ2FiYWJhZ2FsYW1hZ2EnKQpAQCAtMTM3LDIwICsxOTMsMTggQEAKICAgICAgICAgICAgIHNlbGYuY2hlY2tfZmlsZSh0ZXN0ZmlsZSwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKIAogICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGVfcmVhZChzZWxmKToKLSAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQotICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQotICAgICAgICBmLndyaXRlZnJhbWVzKHNlbGYuZnJhbWVzKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikgYXMgZjoKKyAgICAgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCisgICAgICAgICAgICBmLndyaXRlZnJhbWVzKHNlbGYuZnJhbWVzKQogCiAgICAgICAgIHdpdGggVW5zZWVrYWJsZUlPKFRFU1RGTiwgJ3JiJykgYXMgdGVzdGZpbGU6CiAgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUodGVzdGZpbGUsIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCiAKICAgICBkZWYgdGVzdF91bnNlZWthYmxlX3dyaXRlKHNlbGYpOgogICAgICAgICB3aXRoIFVuc2Vla2FibGVJTyhURVNURk4sICd3YicpIGFzIHRlc3RmaWxlOgotICAgICAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUodGVzdGZpbGUpCi0gICAgICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQotICAgICAgICAgICAgZi53cml0ZWZyYW1lcyhzZWxmLmZyYW1lcykKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmNyZWF0ZV9maWxlKHRlc3RmaWxlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCisgICAgICAgICAgICAgICAgZi53cml0ZWZyYW1lcyhzZWxmLmZyYW1lcykKIAogICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoVEVTVEZOLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQogCkBAIC0yNjcsMTIgKzMyMSw5IEBACiAKICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgdGVzdGZpbGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLnJlYWQoMTMpLCBiJ2FiYWJhZ2FsYW1hZ2EnKQotICAgICAgICAgICAgZiA9IHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5jaGFubmVscygpLCBzZWxmLm5jaGFubmVscykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0c2FtcHdpZHRoKCksIHNlbGYuc2FtcHdpZHRoKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5mcmFtZXJhdGUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5mcmFtZXMoKSwgc2VsZi5zbmRmaWxlbmZyYW1lcykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcyhzZWxmLm5mcmFtZXMpLCBzZWxmLmZyYW1lcykKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlMTAucHkgYi9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlMTAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1YWI2NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmUxMC5weQpAQCAtMCwwICsxLDMgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cisic3BhbSwgYmFyLCBibGFoIgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5IGIvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5CmluZGV4IGNmNTRjMjguLjBhNjI5NDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weQorKysgYi9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKQEAgLTE2MCwxNCArMTYwLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoOCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICBkZWZcbmcgICBoaScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWIgICAgICBkZWZcbmcgICAgICAgaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYiAgICAgIGRlZlxuZyAgICAgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg4KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYiAgZGVmXG5nICAgaGknLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoNCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicygpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoOCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywKLSAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknKS5leHBhbmR0YWJzKDQpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknKS5leHBhbmR0YWJzKDQpKQorICAgICAgICAjIGNoZWNrIGtleXdvcmQgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnModGFic2l6ZT04KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyh0YWJzaXplPTQpKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicgIGFcbiBiJywgc2VsZi5tYXJzaGFsKGInIFx0YVxuXHRiJykuZXhwYW5kdGFicygxKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2hlbGxvJykuZXhwYW5kdGFicywgNDIsIDQyKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYnl0ZWNvZGVfaGVscGVyLnB5IGIvTGliL3Rlc3QvYnl0ZWNvZGVfaGVscGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YjQyMDkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9ieXRlY29kZV9oZWxwZXIucHkKQEAgLTAsMCArMSw0MSBAQAorIiIiYnl0ZWNvZGVfaGVscGVyIC0gc3VwcG9ydCB0b29scyBmb3IgdGVzdGluZyBjb3JyZWN0IGJ5dGVjb2RlIGdlbmVyYXRpb24iIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgZGlzCitpbXBvcnQgaW8KKworX1VOU1BFQ0lGSUVEID0gb2JqZWN0KCkKKworY2xhc3MgQnl0ZWNvZGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQ3VzdG9tIGFzc2VydGlvbiBtZXRob2RzIGZvciBpbnNwZWN0aW5nIGJ5dGVjb2RlLiIiIgorCisgICAgZGVmIGdldF9kaXNhc3NlbWJseV9hc19zdHJpbmcoc2VsZiwgY28pOgorICAgICAgICBzID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBkaXMuZGlzKGNvLCBmaWxlPXMpCisgICAgICAgIHJldHVybiBzLmdldHZhbHVlKCkKKworICAgIGRlZiBhc3NlcnRJbkJ5dGVjb2RlKHNlbGYsIHgsIG9wbmFtZSwgYXJndmFsPV9VTlNQRUNJRklFRCk6CisgICAgICAgICIiIlJldHVybnMgaW5zdHIgaWYgb3AgaXMgZm91bmQsIG90aGVyd2lzZSB0aHJvd3MgQXNzZXJ0aW9uRXJyb3IiIiIKKyAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKHgpOgorICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09IG9wbmFtZToKKyAgICAgICAgICAgICAgICBpZiBhcmd2YWwgaXMgX1VOU1BFQ0lGSUVEIG9yIGluc3RyLmFyZ3ZhbCA9PSBhcmd2YWw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0cgorICAgICAgICBkaXNhc3NlbWJseSA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5X2FzX3N0cmluZyh4KQorICAgICAgICBpZiBhcmd2YWwgaXMgX1VOU1BFQ0lGSUVEOgorICAgICAgICAgICAgbXNnID0gJyVzIG5vdCBmb3VuZCBpbiBieXRlY29kZTpcbiVzJyAlIChvcG5hbWUsIGRpc2Fzc2VtYmx5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gJyglcywlcikgbm90IGZvdW5kIGluIGJ5dGVjb2RlOlxuJXMnCisgICAgICAgICAgICBtc2cgPSBtc2cgJSAob3BuYW1lLCBhcmd2YWwsIGRpc2Fzc2VtYmx5KQorICAgICAgICBzZWxmLmZhaWwobXNnKQorCisgICAgZGVmIGFzc2VydE5vdEluQnl0ZWNvZGUoc2VsZiwgeCwgb3BuYW1lLCBhcmd2YWw9X1VOU1BFQ0lGSUVEKToKKyAgICAgICAgIiIiVGhyb3dzIEFzc2VydGlvbkVycm9yIGlmIG9wIGlzIGZvdW5kIiIiCisgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyh4KToKKyAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSBvcG5hbWU6CisgICAgICAgICAgICAgICAgZGlzYXNzZW1ibHkgPSBzZWxmLmdldF9kaXNhc3NlbWJseV9hc19zdHJpbmcoY28pCisgICAgICAgICAgICAgICAgaWYgb3Bhcmd2YWwgaXMgX1VOU1BFQ0lGSUVEOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAnJXMgb2NjdXJzIGluIGJ5dGVjb2RlOlxuJXMnICUgKG9wbmFtZSwgZGlzYXNzZW1ibHkpCisgICAgICAgICAgICAgICAgZWxpZiBpbnN0ci5hcmd2YWwgPT0gYXJndmFsOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAnKCVzLCVyKSBvY2N1cnMgaW4gYnl0ZWNvZGU6XG4lcycKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gbXNnICUgKG9wbmFtZSwgYXJndmFsLCBkaXNhc3NlbWJseSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwobXNnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGF0ZXRpbWV0ZXN0ZXIucHkgYi9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQppbmRleCBhYjU1NDc2Li4zZjNjNjBhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQorKysgYi9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQpAQCAtNjE5LDYgKzYxOSwxMCBAQAogICAgICAgICBlcSh0ZChob3Vycz0tLjIvdXNfcGVyX2hvdXIpLCB0ZCgwKSkKICAgICAgICAgZXEodGQoZGF5cz0tLjQvdXNfcGVyX2RheSwgaG91cnM9LS4yL3VzX3Blcl9ob3VyKSwgdGQobWljcm9zZWNvbmRzPS0xKSkKIAorICAgICAgICAjIFRlc3QgZm9yIGEgcGF0Y2ggaW4gSXNzdWUgODg2MAorICAgICAgICBlcSh0ZChtaWNyb3NlY29uZHM9MC41KSwgMC41KnRkKG1pY3Jvc2Vjb25kcz0xLjApKQorICAgICAgICBlcSh0ZChtaWNyb3NlY29uZHM9MC41KS8vdGQucmVzb2x1dGlvbiwgMC41KnRkLnJlc29sdXRpb24vL3RkLnJlc29sdXRpb24pCisKICAgICBkZWYgdGVzdF9tYXNzaXZlX25vcm1hbGl6YXRpb24oc2VsZik6CiAgICAgICAgIHRkID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0tMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodGQuZGF5cywgdGQuc2Vjb25kcywgdGQubWljcm9zZWNvbmRzKSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ZpbmFsX2EucHkgYi9MaWIvdGVzdC9maW5hbF9hLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MGVlODgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9maW5hbF9hLnB5CkBAIC0wLDAgKzEsMTkgQEAKKyIiIgorRm9kZGVyIGZvciBtb2R1bGUgZmluYWxpemF0aW9uIHRlc3RzIGluIHRlc3RfbW9kdWxlLgorIiIiCisKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZXN0LmZpbmFsX2IKKworeCA9ICdhJworCitjbGFzcyBDOgorICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAjIEluc3BlY3QgbW9kdWxlIGdsb2JhbHMgYW5kIGJ1aWx0aW5zCisgICAgICAgIHByaW50KCJ4ID0iLCB4KQorICAgICAgICBwcmludCgiZmluYWxfYi54ID0iLCB0ZXN0LmZpbmFsX2IueCkKKyAgICAgICAgcHJpbnQoInNodXRpbC5ybXRyZWUgPSIsIGdldGF0dHIoc2h1dGlsLnJtdHJlZSwgJ19fbmFtZV9fJywgTm9uZSkpCisgICAgICAgIHByaW50KCJsZW4gPSIsIGdldGF0dHIobGVuLCAnX19uYW1lX18nLCBOb25lKSkKKworYyA9IEMoKQorX3VuZGVyc2NvcmVkID0gQygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9maW5hbF9iLnB5IGIvTGliL3Rlc3QvZmluYWxfYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjI4ZDgyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZmluYWxfYi5weQpAQCAtMCwwICsxLDE5IEBACisiIiIKK0ZvZGRlciBmb3IgbW9kdWxlIGZpbmFsaXphdGlvbiB0ZXN0cyBpbiB0ZXN0X21vZHVsZS4KKyIiIgorCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVzdC5maW5hbF9hCisKK3ggPSAnYicKKworY2xhc3MgQzoKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgIyBJbnNwZWN0IG1vZHVsZSBnbG9iYWxzIGFuZCBidWlsdGlucworICAgICAgICBwcmludCgieCA9IiwgeCkKKyAgICAgICAgcHJpbnQoImZpbmFsX2EueCA9IiwgdGVzdC5maW5hbF9hLngpCisgICAgICAgIHByaW50KCJzaHV0aWwucm10cmVlID0iLCBnZXRhdHRyKHNodXRpbC5ybXRyZWUsICdfX25hbWVfXycsIE5vbmUpKQorICAgICAgICBwcmludCgibGVuID0iLCBnZXRhdHRyKGxlbiwgJ19fbmFtZV9fJywgTm9uZSkpCisKK2MgPSBDKCkKK191bmRlcnNjb3JlZCA9IEMoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZm9ya193YWl0LnB5IGIvTGliL3Rlc3QvZm9ya193YWl0LnB5CmluZGV4IDg4NTI3ZGYuLjE5YjU0ZWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQorKysgYi9MaWIvdGVzdC9mb3JrX3dhaXQucHkKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgICAgIHNlbGYuYWxpdmVbaWRdID0gb3MuZ2V0cGlkKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKFNIT1JUU0xFRVApCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9rZXljZXJ0My5wZW0gYi9MaWIvdGVzdC9rZXljZXJ0My5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmYTYyYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2tleWNlcnQzLnBlbQpAQCAtMCwwICsxLDczIEBACistLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNkZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Bd2dnSmNBZ0VBQW9HQkFNTGdEMGtBS0RiNWNGeVAKK2pid05mUjVDdGV3ZFhDK2tNWEFXRDhETHhpVFR2aE1XN3FWbmx3T20zNm1abHN6SEt2c1JmMDVsVDRwZWdpRk0KKzl6MmoxT2xhTitjaS9YN05VMjJUTk42Y3JZU2lONzdGallKUDQ2NGo4NzZuZFN4eUQrcnp5czM4NlQrMXIxYVoKK2FnZ0Vka2oxVHNTc3YxeldJWUtsUElqbHZodXhBZ01CQUFFQ2dZQTBhSCtUMlZmM1dPUHY4S2RrY0pnNmdDUmUKK3lKS1hPV2dXUmNpY3gvQ1V6T0VzVHhtRklEUEx4cUFXQTNrN3YwQiszdmpHdzVZOWx5Y1YvNVhxWE5vUUkxNGoKK3kwOWlOc3VtZHMxM3U1QUtrR2RUSm5aaFE3VUtkb1ZIZnVQNDRaZE92L3JKNS9WRDZGNHpXeXdwZTkwcGNiSysKK0FXRFZ0dXNnR1FCU2llRWwxUUpCQU95VnJVRzVsMnlvVUJ0ZDJ6ci9raUdtL0RZeVhsSXRoUU8vQTMvTG5nRFcKKzUveWRHeFZzVDdsQVZPZ0Nzb1QrMEw0ZWZUaDkwUGp6VzhMUFFyUEJXVk1DUVFEUzNoL0Z0WVlkNWxmeitGTkwKKzlDRWUxRjF3OWw4UDc0OXVOVUQwZzMxN3p2MXRhdElxVkNzUVdIZlZITmRWdmZRK3ZTRnczOE9PUk8wMFhxczkKKzFHSnJBa0Jrb1hYRWt4Q1pveTRQdGVoZU8vOElXV0xHR3I2TDdkaTZNekZsMWxJcXdUNkQ4TDlvYVYydnluRlQKK0RuS29wMHBhMDlVbmhqeXc1N0tNTm1TRTJTVUpBa0VBcmxvVEV6cGdSbUNxNElLMi9OcENlR2RIUzV1cVJsYmgKKzFWSWEveEdwczdFV1FsNU1uOHN3UURlbC9ZUDNXR0hUamZ4N3BnU2VnUWZreWFSdEdwWjlPUUpBYTlWdW1qOG0KK0pBQXRJMEJuZ2E4aGdReDdCaFRRWTRDYWREeHlpUkdPR1lod1V6WVZDcWtiMnNiVlJIOUhud1VhSlQ3Y1dCWTMKK1JuSmRIT01YV2VtNy93PT0KKy0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0KK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDEgKDB4MCkKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMTI3MjMzNDI2MTI3MjE0NDMyODEgKDB4YjA5MjY0YjFmMmRhMjFkMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBKYW4gIDQgMTk6NDc6MDcgMjAxMyBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IE5vdiAxMyAxOTo0NzowNyAyMDIyIEdNVAorICAgICAgICBTdWJqZWN0OiBDPVhZLCBMPUNhc3RsZSBBbnRocmF4LCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBDTj1sb2NhbGhvc3QKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgxMDI0IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDpjMjplMDowZjo0OTowMDoyODozNjpmOTo3MDo1Yzo4Zjo4ZDpiYzowZDoKKyAgICAgICAgICAgICAgICAgICAgN2Q6MWU6NDI6YjU6ZWM6MWQ6NWM6MmY6YTQ6MzE6NzA6MTY6MGY6YzA6Y2I6CisgICAgICAgICAgICAgICAgICAgIGM2OjI0OmQzOmJlOjEzOjE2OmVlOmE1OjY3Ojk3OjAzOmE2OmRmOmE5Ojk5OgorICAgICAgICAgICAgICAgICAgICA5NjpjYzpjNzoyYTpmYjoxMTo3Zjo0ZTo2NTo0Zjo4YTo1ZTo4MjoyMTo0YzoKKyAgICAgICAgICAgICAgICAgICAgZjc6M2Q6YTM6ZDQ6ZTk6NWE6Mzc6ZTc6MjI6ZmQ6N2U6Y2Q6NTM6NmQ6OTM6CisgICAgICAgICAgICAgICAgICAgIDM0OmRlOjljOmFkOjg0OmEyOjM3OmJlOmM1OjhkOjgyOjRmOmUzOmFlOjIzOgorICAgICAgICAgICAgICAgICAgICBmMzpiZTphNzo3NToyYzo3MjowZjplYTpmMzpjYTpjZDpmYzplOTozZjpiNToKKyAgICAgICAgICAgICAgICAgICAgYWY6NTY6OTk6NmE6MDg6MDQ6NzY6NDg6ZjU6NGU6YzQ6YWM6YmY6NWM6ZDY6CisgICAgICAgICAgICAgICAgICAgIDIxOjgyOmE1OjNjOjg4OmU1OmJlOjFiOmIxCisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICAgMmY6NDI6NWY6YTM6MDk6MmM6ZmE6NTE6ODg6Yzc6Mzc6N2Y6ZWE6MGU6NjM6ZjA6YTI6OWE6CisgICAgICAgICBlNTo1YTplMjpjODoyMDpmMDozZjo2MDpiYzpjODowZjpiNjpjNjo3NjpjZTpkYjo4Mzo5MzoKKyAgICAgICAgIGY1OmEzOjMzOjY3OjAxOjhlOjA0OmNkOjAwOjlhOjczOmZkOmYzOjM1Ojg2OmZhOmQ3OjEzOgorICAgICAgICAgZTI6NDY6YzY6OWQ6YzA6Mjk6NTM6ZDQ6YTk6OTA6Yjg6Nzc6NGI6ZTY6ODM6NzY6ZTQ6OTI6CisgICAgICAgICBkNjo5Yzo1MDpjZjo0MzpkMDpjNjowMTo3Nzo2MTo5YTpkZTo5Yjo3MDpmNzo3MjpjZDo1OToKKyAgICAgICAgIDAwOjMxOjY5OmQ5OmI0OmNhOjA2OjljOjZkOmMzOmM3OjgwOjhjOjY4OmU2OmI1OmEyOmY4OgorICAgICAgICAgZWY6MWQ6YmI6MTY6OWY6Nzc6Nzc6ZWY6ODc6NjI6MjI6OWI6NGQ6Njk6YTQ6M2E6MWE6ZjE6CisgICAgICAgICAyMTo1ZTo4YzozMjphYzo5MjpmZDoxNTo2YjoxODpjMjo3ZjoxNTowZDo5ODozMDpjYTo3NToKKyAgICAgICAgIDhmOjFhOjcxOmRmOmRhOjFkOmIyOmVmOjlhOmU4OjJkOjJlOjAyOmZkOjRhOjNjOmFhOjk2OgorICAgICAgICAgMGI6MDY6NWQ6MzU6YjM6M2Q6MjQ6ODc6NGI6ZTA6YjA6NTg6NjA6MmY6NDU6YWM6MmU6NDg6CisgICAgICAgICA4YTpiMDo5OToxMDo2NToyNzpmZjpjYzpiMTpkODpmZDpiZDoyNjo2YjpiOTowYzowNToyYToKKyAgICAgICAgIGY0OjQ1OjYzOjM1OjUxOjA3OmVkOjgzOjg1OmZlOjZmOjY5OmNiOmJiOjQwOmE4OmFlOmI2OgorICAgICAgICAgM2I6NTY6NGE6MmQ6YTQ6ZWQ6NmQ6MTE6MmM6NGQ6ZWQ6MTc6MjQ6ZmQ6NDc6YmM6ZDM6NDE6CisgICAgICAgICBhMjpkMzowNjpmZTowYzo5MDpkODpkODo5NDoyNjpjNDpmZjpjYzphMTpkODo0Mjo3NzplYjoKKyAgICAgICAgIGZjOmE5Ojk0OjcxCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNwRENDQVl3Q0NRQ3drbVN4OHRvaDBUQU5CZ2txaGtpRzl3MEJBUVVGQURCTk1Rc3dDUVlEVlFRR0V3SlkKK1dURW1NQ1FHQTFVRUNnd2RVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNGdRMEV4RmpBVUJnTlYKK0JBTU1EVzkxY2kxallTMXpaWEoyWlhJd0hoY05NVE13TVRBME1UazBOekEzV2hjTk1qSXhNVEV6TVRrME56QTMKK1dqQmZNUXN3Q1FZRFZRUUdFd0pZV1RFWE1CVUdBMVVFQnhNT1EyRnpkR3hsSUVGdWRHaHlZWGd4SXpBaEJnTlYKK0JBb1RHbEI1ZEdodmJpQlRiMlowZDJGeVpTQkdiM1Z1WkdGMGFXOXVNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYKK2MzUXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTUxnRDBrQUtEYjVjRnlQamJ3TmZSNUMKK3Rld2RYQytrTVhBV0Q4REx4aVRUdmhNVzdxVm5sd09tMzZtWmxzekhLdnNSZjA1bFQ0cGVnaUZNOXoyajFPbGEKK04rY2kvWDdOVTIyVE5ONmNyWVNpTjc3RmpZSlA0NjRqODc2bmRTeHlEK3J6eXMzODZUKzFyMWFaYWdnRWRrajEKK1RzU3N2MXpXSVlLbFBJamx2aHV4QWdNQkFBRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBQzlDWDZNSkxQcFIKK2lNYzNmK29PWS9DaW11VmE0c2dnOEQ5Z3ZNZ1B0c1oyenR1RGsvV2pNMmNCamdUTkFKcHovZk0xaHZyWEUrSkcKK3hwM0FLVlBVcVpDNGQwdm1nM2Jra3RhY1VNOUQwTVlCZDJHYTNwdHc5M0xOV1FBeGFkbTB5Z2FjYmNQSGdJeG8KKzVyV2krTzhkdXhhZmQzZnZoMklpbTAxcHBEb2E4U0ZlakRLc2t2MFZheGpDZnhVTm1EREtkWThhY2QvYUhiTHYKK211Z3RMZ0w5U2p5cWxnc0dYVFd6UFNTSFMrQ3dXR0F2UmF3dVNJcXdtUkJsSi8vTXNkajl2U1pydVF3Rkt2UkYKK1l6VlJCKzJEaGY1dmFjdTdRS2l1dGp0V1NpMms3VzBSTEUzdEZ5VDlSN3pUUWFMVEJ2NE1rTmpZbENiRS84eWgKKzJFSjM2L3lwbEhFPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qva2V5Y2VydDQucGVtIGIvTGliL3Rlc3Qva2V5Y2VydDQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzU1YzgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9rZXljZXJ0NC5wZW0KQEAgLTAsMCArMSw3MyBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZGdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtQXdnZ0pjQWdFQUFvR0JBSzVVUWlNSTVWa05zMlF2CitMN2dVYWlEZEZldk5VWFJqVTRESEFlM1p6ellMWk5FNjloOWdPOVZDU1MxNnRKNWZUNVZFdTBFWnlHcjBlM1YyCitOa1gwWm9VMEhjL1VhWTRxeDdMSG1uNVNZWnBJeGhKbmtmN1N5SEpLMXpVYUdsVTAvTHhZcUl1R0N0RjVkcXgxCitMMk9RaEV4MUdNNlJ5ZEhkZ1g2OUc2NExYY1k1QWdNQkFBRUNnWUFoc1JNZkprYjlFUkxNbC9vRy81c0xRdTlMCitwV0RLdDYrWndkeHpsWmJnZ1E4NUNNWXNoakxLSW9kMkRMTC9zTGYyeDFQUlh5UkcxMzFNMUUzazh6a2t6NmRlCitSMXVEcklOL3g5MWl1WXpmTFFaR2g4Yk1ZN1lqZDJlb3JvYTZSLzdEanBFbEdlakx4T0FhRFdPMFNUMklGUXk5CitteVRHUzJqU005N3djWGZzU1FKQkFOUDNqZWxKb1M1WDZCUmpUU25lWTIxd2NvY3hWdVFoOHBYcEVyQUxWTnNUCitkcnJGVGVhQnVacDdLdmJ0bklNNWcyV1JOdmF4TFpsQVkvaFhQSnZpNm5jQ1FRRFNpeDFjZWJtbDZFbVBsRVpTCitNbThnd0kyRjl1ZlV1bndKbUJKY3o4MjZEbzBaTkdCeVdEQU0vSlFaSDRGWDRHZkFGTnVqOFBVYitHUWZhZGt4CitpMURQQWtFQTBsVnNOSG9qdnVEc0lvOEhHdXphck5aUVQyYmVXakoxamR4aDl0N0hyVHg3TElwczZyYi9maE9LCitaczBSNmdWQUphRWJjV0FQWjJ0RnlFQ0luQWRuc1FKQVVqYWVYWGp1eEZrak9GeW01UHZxcHZocGl2RXg3OEJ1CitKUFRyM3JBS1htZkdNeHhmdU9hMHhLMXdTeXNoUDZaUi9SQm4vK2xjWFBLdWJoSFFET2Vnd3dKQUpGMURCUW5OCisrL3RMbU9QVUx0RHdmUDRaaXhuKy84R21HT2FoRm9SY3U2VklHSG1SaWxKVG42TU9CdXR3N0dsdjJZZGVDNmwvCitlODNHcTZmZkxWZktOUT09CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAxICgweDApCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgyICgweGIwOTI2NGIxZjJkYTIxZDIpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBOb3YgMTMgMTk6NDc6MDcgMjAyMiBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTD1DYXN0bGUgQW50aHJheCwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgQ049ZmFrZWhvc3RuYW1lCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMTAyNCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6YWU6NTQ6NDI6MjM6MDg6ZTU6NTk6MGQ6YjM6NjQ6MmY6MmY6Yjg6MTQ6CisgICAgICAgICAgICAgICAgICAgIDZhOjIwOmRkOjE1OmViOmNkOjUxOjc0OjYzOjUzOjgwOmM3OjAxOmVkOmQ5OgorICAgICAgICAgICAgICAgICAgICBjZjozNjowYjo2NDpkMTozYTpmNjoxZjo2MDozYjpkNTo0Mjo0OToyZDo3YToKKyAgICAgICAgICAgICAgICAgICAgYjQ6OWU6NWY6NGY6OTU6NDQ6YmI6NDE6MTk6Yzg6NmE6ZjQ6N2I6NzU6NzY6CisgICAgICAgICAgICAgICAgICAgIDM2OjQ1OmY0OjY2Ojg1OjM0OjFkOmNmOmQ0OjY5OjhlOjJhOmM3OmIyOmM3OgorICAgICAgICAgICAgICAgICAgICA5YTo3ZTo1Mjo2MTo5YTo0ODpjNjoxMjo2Nzo5MTpmZTpkMjpjODo3Mjo0YToKKyAgICAgICAgICAgICAgICAgICAgZDc6MzU6MWE6MWE6NTU6MzQ6ZmM6YmM6NTg6YTg6OGI6ODY6MGE6ZDE6Nzk6CisgICAgICAgICAgICAgICAgICAgIDc2OmFjOjc1OjJmOjYzOjkwOjg0OjRjOjc1OjE4OmNlOjkxOmM5OmQxOmRkOgorICAgICAgICAgICAgICAgICAgICA4MTo3ZTpiZDoxYjphZTowYjo1ZDpjNjozOQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIGFkOjQ1OjhhOjhlOmVmOmM2OmVmOjA0OjQxOjVjOjJjOjRhOjg0OmRjOjAyOjc2OjBjOmQwOgorICAgICAgICAgNjY6MGY6ZjA6MTY6MDQ6NTg6NGQ6ZmQ6Njg6Yjc6Yjg6ZDM6YTg6NDE6YTU6NWM6M2M6NmY6CisgICAgICAgICA2NTozYzpkMTpmODpjZTo0MzozNTplNzo0MTo1Zjo1MzozZDpjOToyYzpjMzo3ZDpmYzo1NjoKKyAgICAgICAgIDRhOmZhOjQ3Ojc3OjM4OjlkOmJiOjk3OjI4OjBhOjNiOjkxOjE5OjdmOmJjOjc0OmFlOjE1OgorICAgICAgICAgNmI6YmQ6MjA6MzY6Njc6NDU6YTU6MWU6Nzk6ZDc6NzU6ZTY6ODk6NWM6NmQ6NTQ6ODQ6ZDE6CisgICAgICAgICA5NTpkNzphNzpiNDozMzozYzphZjozNzpjNDo3OTo4Zjo1ZTo3NTpkYzo3NTpjMjoxODpmYjoKKyAgICAgICAgIDYxOjZmOjJkOmRjOjM4OjY1OjViOmJhOjY3OjI4OmQwOjg4OmQ3OjhkOmI5OjIzOjVhOjhlOgorICAgICAgICAgZTg6YzY6YmI6ZGI6Y2U6ZDU6Yjg6NDE6MmE6Y2U6OTM6MDg6YjY6OTU6YWQ6MzQ6MjA6MTg6CisgICAgICAgICBkNTozYjozNzo1Mjo3NDo1MDowYjowNzoyYzpiMDo2ZDphNDo0Yzo3YjpmNDplMDpmZDpkMToKKyAgICAgICAgIGFmOjE3OmFhOjIwOmNkOjYyOmUzOmYwOjlkOjM3OjY5OmRiOjQxOmJkOmQ0OjFjOmZiOjUzOgorICAgICAgICAgMjA6ZGE6ODg6OWQ6NzY6MjY6Njc6Y2U6MDE6OTA6YTc6ODA6MWQ6YTk6NWI6Mzk6NzM6Njg6CisgICAgICAgICA1NDowYTpkMToyYTowMzoxYjo4ZjozYzo0Mzo1ZDo1ZDpjNDo1MTpmMTphNzplNzoxMTpkYToKKyAgICAgICAgIDMxOjJjOjQ5OjA2OmFmOjA0OmY0OmI4OjNjOjk5OmM0OjIwOmI5OjA2OjM2OmEyOjAwOjkyOgorICAgICAgICAgNjE6MWQ6MGM6NmQ6MjQ6MDU6ZTI6ODI6ZTE6NDc6ZGI6YTA6NWY6YmE6Yjk6ZmI6YmE6ZmE6CisgICAgICAgICA0OToxMjoxZTpjZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDcHpDQ0FZOENDUUN3a21TeDh0b2gwakFOQmdrcWhraUc5dzBCQVFVRkFEQk5NUXN3Q1FZRFZRUUdFd0pZCitXVEVtTUNRR0ExVUVDZ3dkVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjRnUTBFeEZqQVVCZ05WCitCQU1NRFc5MWNpMWpZUzF6WlhKMlpYSXdIaGNOTVRNd01UQTBNVGswTnpBM1doY05Nakl4TVRFek1UazBOekEzCitXakJpTVFzd0NRWURWUVFHRXdKWVdURVhNQlVHQTFVRUJ4TU9RMkZ6ZEd4bElFRnVkR2h5WVhneEl6QWhCZ05WCitCQW9UR2xCNWRHaHZiaUJUYjJaMGQyRnlaU0JHYjNWdVpHRjBhVzl1TVJVd0V3WURWUVFERXd4bVlXdGxhRzl6CitkRzVoYldVd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFLNVVRaU1JNVZrTnMyUXZMN2dVCithaURkRmV2TlVYUmpVNERIQWUzWnp6WUxaTkU2OWg5Z085VkNTUzE2dEo1ZlQ1VkV1MEVaeUdyMGUzVjJOa1gwCitab1UwSGMvVWFZNHF4N0xIbW41U1lacEl4aEpua2Y3U3lISksxelVhR2xVMC9MeFlxSXVHQ3RGNWRxeDFMMk9RCitoRXgxR002UnlkSGRnWDY5RzY0TFhjWTVBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFLMUZpbzd2Cit4dThFUVZ3c1NvVGNBbllNMEdZUDhCWUVXRTM5YUxlNDA2aEJwVnc4YjJVODBmak9RelhuUVY5VFBja3N3MzM4CitWa3I2UjNjNG5idVhLQW83a1JsL3ZIU3VGV3U5SURablJhVWVlZGQxNW9sY2JWU0UwWlhYcDdRelBLODN4SG1QCitYblhjZGNJWSsyRnZMZHc0WlZ1Nlp5alFpTmVOdVNOYWp1akd1OXZPMWJoQktzNlRDTGFWclRRZ0dOVTdOMUowCitVQXNITExCdHBFeDc5T0Q5MGE4WHFpRE5ZdVB3blRkcDIwRzkxQno3VXlEYWlKMTJKbWZPQVpDbmdCMnBXemx6CithRlFLMFNvREc0ODhRMTFkeEZIeHArY1IyakVzU1FhdkJQUzRQSm5FSUxrR05xSUFrbUVkREcwa0JlS0M0VWZiCitvRis2dWZ1Nitra1NIczQ9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VzdGFsdC5weSBiL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZXN0YWx0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDA4MWMxLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZXN0YWx0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotaW1wb3J0IHN5cwotCi1pZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6Ci0gICAgcmFpc2UgVmFsdWVFcnJvcigiVGhpcyB0ZXN0IG9ubHkgbGVha3Mgb24gTWFjIE9TIFgiKQotCi1kZWYgbGVhaygpOgotICAgICMgdGFrZW4gZnJvbSBwbGF0Zm9ybS5fbWFjX3Zlcl9sb29rdXAoKQotICAgIGZyb20gZ2VzdGFsdCBpbXBvcnQgZ2VzdGFsdAotICAgIGltcG9ydCBNYWNPUwotCi0gICAgdHJ5OgotICAgICAgICBnZXN0YWx0KCdzeXN1JykKLSAgICBleGNlcHQgTWFjT1MuRXJyb3I6Ci0gICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkgYi9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CmluZGV4IGJmYmY0NGUuLjFjYmNlYTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvbG9ja190ZXN0cy5weQpAQCAtODAsNiArODAsMTEgQEAKICAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQogICAgICAgICBkZWwgbG9jawogCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICByZXByKGxvY2spCisgICAgICAgIGRlbCBsb2NrCisKICAgICBkZWYgdGVzdF9hY3F1aXJlX2Rlc3Ryb3koc2VsZik6CiAgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKICAgICAgICAgbG9jay5hY3F1aXJlKCkKQEAgLTQxMyw2ICs0MTgsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjb25kLm5vdGlmeSkKIAogICAgIGRlZiBfY2hlY2tfbm90aWZ5KHNlbGYsIGNvbmQpOgorICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIHRlc3QgaXMgc2Vuc2l0aXZlIHRvIHRpbWluZy4gIElmIHRoZSB3b3JrZXIgdGhyZWFkcworICAgICAgICAjIGRvbid0IGV4ZWN1dGUgaW4gYSB0aW1lbHkgZmFzaGlvbiwgdGhlIG1haW4gdGhyZWFkIG1heSB0aGluayB0aGV5CisgICAgICAgICMgYXJlIGZ1cnRoZXIgYWxvbmcgdGhlbiB0aGV5IGFyZS4gIFRoZSBtYWluIHRocmVhZCB0aGVyZWZvcmUgaXNzdWVzCisgICAgICAgICMgX3dhaXQoKSBzdGF0ZW1lbnRzIHRvIHRyeSB0byBtYWtlIHN1cmUgdGhhdCBpdCBkb2Vzbid0IHJhY2UgYWhlYWQKKyAgICAgICAgIyBvZiB0aGUgd29ya2Vycy4KKyAgICAgICAgIyBTZWNvbmRseSwgdGhpcyB0ZXN0IGFzc3VtZXMgdGhhdCBjb25kaXRpb24gdmFyaWFibGVzIGFyZSBub3Qgc3ViamVjdAorICAgICAgICAjIHRvIHNwdXJpb3VzIHdha2V1cHMuICBUaGUgYWJzZW5jZSBvZiBzcHVyaW91cyB3YWtldXBzIGlzIGFuIGltcGxlbWVudGF0aW9uCisgICAgICAgICMgZGV0YWlsIG9mIENvbmRpdGlvbiBDYXJpYWJsZXMgaW4gY3VycmVudCBDUHl0aG9uLCBidXQgaW4gZ2VuZXJhbCwgbm90CisgICAgICAgICMgYSBndWFyYW50ZWVkIHByb3BlcnR5IG9mIGNvbmRpdGlvbiB2YXJpYWJsZXMgYXMgYSBwcm9ncmFtbWluZworICAgICAgICAjIGNvbnN0cnVjdC4gIEluIHBhcnRpY3VsYXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhpcyBjYW4gbm8gbG9uZ2VyCisgICAgICAgICMgYmUgY29udmVuaWVudGx5IGd1YXJhbnRlZWQgc2hvdWxkIHRoZWlyIGltcGxlbWVudGF0aW9uIGV2ZXIgY2hhbmdlLgogICAgICAgICBOID0gNQogICAgICAgICByZXN1bHRzMSA9IFtdCiAgICAgICAgIHJlc3VsdHMyID0gW10KQEAgLTQ0MCw2ICs0NTYsOSBAQAogICAgICAgICAgICAgX3dhaXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMxLCBbKFRydWUsIDEpXSAqIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czIsIFtdKQorICAgICAgICAjIGZpcnN0IHdhaXQsIHRvIGVuc3VyZSBhbGwgd29ya2VycyBzZXR0bGUgaW50byBjb25kLndhaXQoKSBiZWZvcmUKKyAgICAgICAgIyB3ZSBjb250aW51ZS4gU2VlIGlzc3VlICM4Nzk5CisgICAgICAgIF93YWl0KCkKICAgICAgICAgIyBOb3RpZnkgNSB0aHJlYWRzOiB0aGV5IG1pZ2h0IGJlIGluIHRoZWlyIGZpcnN0IG9yIHNlY29uZCB3YWl0CiAgICAgICAgIGNvbmQuYWNxdWlyZSgpCiAgICAgICAgIGNvbmQubm90aWZ5KDUpCkBAIC00NTAsNiArNDY5LDcgQEAKICAgICAgICAgICAgIF93YWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgWyhUcnVlLCAxKV0gKiAzICsgWyhUcnVlLCAyKV0gKiAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMyLCBbKFRydWUsIDIpXSAqIDMpCisgICAgICAgIF93YWl0KCkgIyBtYWtlIHN1cmUgYWxsIHdvcmtlcnMgc2V0dGxlIGludG8gY29uZC53YWl0KCkKICAgICAgICAgIyBOb3RpZnkgYWxsIHRocmVhZHM6IHRoZXkgYXJlIGFsbCBpbiB0aGVpciBzZWNvbmQgd2FpdAogICAgICAgICBjb25kLmFjcXVpcmUoKQogICAgICAgICBjb25kLm5vdGlmeV9hbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkgYi9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQppbmRleCA0OGQyZTU3Li40MjUxZDU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQorKysgYi9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQpAQCAtMiw2ICsyLDcgQEAKIGFuZCBmcmllbmRzLiIiIgogCiBpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogZnJvbSBzdWJwcm9jZXNzIGltcG9ydCAqCkBAIC0yMCwxMSArMjEsNTQgQEAKIAogICAgIFtyZXFfeDUwOV9leHRlbnNpb25zXQogICAgIHN1YmplY3RBbHROYW1lICAgICAgICAgPSBETlM6e2hvc3RuYW1lfQorCisgICAgWyBjYSBdCisgICAgZGVmYXVsdF9jYSAgICAgID0gQ0FfZGVmYXVsdAorCisgICAgWyBDQV9kZWZhdWx0IF0KKyAgICBkaXIgPSBjYWRpcgorICAgIGRhdGFiYXNlICA9ICRkaXIvaW5kZXgudHh0CisgICAgY3JsbnVtYmVyID0gJGRpci9jcmwudHh0CisgICAgZGVmYXVsdF9tZCA9IHNoYTEKKyAgICBkZWZhdWx0X2RheXMgPSAzNjAwCisgICAgZGVmYXVsdF9jcmxfZGF5cyA9IDM2MDAKKyAgICBjZXJ0aWZpY2F0ZSA9IHB5Y2FjZXJ0LnBlbQorICAgIHByaXZhdGVfa2V5ID0gcHljYWtleS5wZW0KKyAgICBzZXJpYWwgICAgPSAkZGlyL3NlcmlhbAorICAgIFJBTkRGSUxFICA9ICRkaXIvLnJhbmQKKworICAgIHBvbGljeSAgICAgICAgICA9IHBvbGljeV9tYXRjaAorCisgICAgWyBwb2xpY3lfbWF0Y2ggXQorICAgIGNvdW50cnlOYW1lICAgICAgICAgICAgID0gbWF0Y2gKKyAgICBzdGF0ZU9yUHJvdmluY2VOYW1lICAgICA9IG9wdGlvbmFsCisgICAgb3JnYW5pemF0aW9uTmFtZSAgICAgICAgPSBtYXRjaAorICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWUgID0gb3B0aW9uYWwKKyAgICBjb21tb25OYW1lICAgICAgICAgICAgICA9IHN1cHBsaWVkCisgICAgZW1haWxBZGRyZXNzICAgICAgICAgICAgPSBvcHRpb25hbAorCisgICAgWyBwb2xpY3lfYW55dGhpbmcgXQorICAgIGNvdW50cnlOYW1lICAgPSBvcHRpb25hbAorICAgIHN0YXRlT3JQcm92aW5jZU5hbWUgPSBvcHRpb25hbAorICAgIGxvY2FsaXR5TmFtZSAgICA9IG9wdGlvbmFsCisgICAgb3JnYW5pemF0aW9uTmFtZSAgPSBvcHRpb25hbAorICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWUgID0gb3B0aW9uYWwKKyAgICBjb21tb25OYW1lICAgID0gc3VwcGxpZWQKKyAgICBlbWFpbEFkZHJlc3MgICAgPSBvcHRpb25hbAorCisKKyAgICBbIHYzX2NhIF0KKworICAgIHN1YmplY3RLZXlJZGVudGlmaWVyPWhhc2gKKyAgICBhdXRob3JpdHlLZXlJZGVudGlmaWVyPWtleWlkOmFsd2F5cyxpc3N1ZXIKKyAgICBiYXNpY0NvbnN0cmFpbnRzID0gQ0E6dHJ1ZQorCiAgICAgIiIiCiAKIGhlcmUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKIAotZGVmIG1ha2VfY2VydF9rZXkoaG9zdG5hbWUpOgorZGVmIG1ha2VfY2VydF9rZXkoaG9zdG5hbWUsIHNpZ249RmFsc2UpOgorICAgIHByaW50KCJjcmVhdGluZyBjZXJ0IGZvciAiICsgaG9zdG5hbWUpCiAgICAgdGVtcG5hbWVzID0gW10KICAgICBmb3IgaSBpbiByYW5nZSgzKToKICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKSBhcyBmOgpAQCAtMzMsMTAgKzc3LDI1IEBACiAgICAgdHJ5OgogICAgICAgICB3aXRoIG9wZW4ocmVxX2ZpbGUsICd3JykgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUocmVxX3RlbXBsYXRlLmZvcm1hdChob3N0bmFtZT1ob3N0bmFtZSkpCi0gICAgICAgIGFyZ3MgPSBbJ3JlcScsICctbmV3JywgJy1kYXlzJywgJzM2NTAnLCAnLW5vZGVzJywgJy14NTA5JywKKyAgICAgICAgYXJncyA9IFsncmVxJywgJy1uZXcnLCAnLWRheXMnLCAnMzY1MCcsICctbm9kZXMnLAogICAgICAgICAgICAgICAgICctbmV3a2V5JywgJ3JzYToxMDI0JywgJy1rZXlvdXQnLCBrZXlfZmlsZSwKLSAgICAgICAgICAgICAgICAnLW91dCcsIGNlcnRfZmlsZSwgJy1jb25maWcnLCByZXFfZmlsZV0KKyAgICAgICAgICAgICAgICAnLWNvbmZpZycsIHJlcV9maWxlXQorICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgIHRlbXBuYW1lcy5hcHBlbmQoZi5uYW1lKQorICAgICAgICAgICAgICAgIHJlcWZpbGUgPSBmLm5hbWUKKyAgICAgICAgICAgIGFyZ3MgKz0gWyctb3V0JywgcmVxZmlsZSBdCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWycteDUwOScsICctb3V0JywgY2VydF9maWxlIF0KICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisKKyAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgIGFyZ3MgPSBbJ2NhJywgJy1jb25maWcnLCByZXFfZmlsZSwgJy1vdXQnLCBjZXJ0X2ZpbGUsICctb3V0ZGlyJywgJ2NhZGlyJywKKyAgICAgICAgICAgICAgICAgICAgJy1wb2xpY3knLCAncG9saWN5X2FueXRoaW5nJywgJy1iYXRjaCcsICctaW5maWxlcycsIHJlcWZpbGUgXQorICAgICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisKKwogICAgICAgICB3aXRoIG9wZW4oY2VydF9maWxlLCAncicpIGFzIGY6CiAgICAgICAgICAgICBjZXJ0ID0gZi5yZWFkKCkKICAgICAgICAgd2l0aCBvcGVuKGtleV9maWxlLCAncicpIGFzIGY6CkBAIC00Niw2ICsxMDUsMzYgQEAKICAgICAgICAgZm9yIG5hbWUgaW4gdGVtcG5hbWVzOgogICAgICAgICAgICAgb3MucmVtb3ZlKG5hbWUpCiAKK1RNUF9DQURJUiA9ICdjYWRpcicKKworZGVmIHVubWFrZV9jYSgpOgorICAgIHNodXRpbC5ybXRyZWUoVE1QX0NBRElSKQorCitkZWYgbWFrZV9jYSgpOgorICAgIG9zLm1rZGlyKFRNUF9DQURJUikKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdjYWRpcicsJ2luZGV4LnR4dCcpLCdhKycpIGFzIGY6CisgICAgICAgIHBhc3MgIyBlbXB0eSBmaWxlCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignY2FkaXInLCdjcmwudHh0JyksJ2ErJykgYXMgZjoKKyAgICAgICAgci53cml0ZSgiMDAiKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ2NhZGlyJywnaW5kZXgudHh0LmF0dHInKSwndysnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCd1bmlxdWVfc3ViamVjdCA9IG5vJykKKworICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCJ3IikgYXMgdDoKKyAgICAgICAgdC53cml0ZShyZXFfdGVtcGxhdGUuZm9ybWF0KGhvc3RuYW1lPSdvdXItY2Etc2VydmVyJykpCisgICAgICAgIHQuZmx1c2goKQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGY6CisgICAgICAgICAgICBhcmdzID0gWydyZXEnLCAnLW5ldycsICctZGF5cycsICczNjUwJywgJy1leHRlbnNpb25zJywgJ3YzX2NhJywgJy1ub2RlcycsCisgICAgICAgICAgICAgICAgICAgICctbmV3a2V5JywgJ3JzYToyMDQ4JywgJy1rZXlvdXQnLCAncHljYWtleS5wZW0nLAorICAgICAgICAgICAgICAgICAgICAnLW91dCcsIGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJy1zdWJqJywgJy9DPVhZL0w9Q2FzdGxlIEFudGhyYXgvTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQS9DTj1vdXItY2Etc2VydmVyJ10KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorICAgICAgICAgICAgYXJncyA9IFsnY2EnLCAnLWNvbmZpZycsIHQubmFtZSwgJy1jcmVhdGVfc2VyaWFsJywKKyAgICAgICAgICAgICAgICAgICAgJy1vdXQnLCAncHljYWNlcnQucGVtJywgJy1iYXRjaCcsICctb3V0ZGlyJywgVE1QX0NBRElSLAorICAgICAgICAgICAgICAgICAgICAnLWtleWZpbGUnLCAncHljYWtleS5wZW0nLCAnLWRheXMnLCAnMzY1MCcsCisgICAgICAgICAgICAgICAgICAgICctc2VsZnNpZ24nLCAnLWV4dGVuc2lvbnMnLCAndjNfY2EnLCAnLWluZmlsZXMnLCBmLm5hbWUgXQorICAgICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisgICAgICAgICAgICBhcmdzID0gWydjYScsICctY29uZmlnJywgdC5uYW1lLCAnLWdlbmNybCcsICctb3V0JywgJ3Jldm9jYXRpb24uY3JsJ10KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG9zLmNoZGlyKGhlcmUpCkBAIC01NCwxMSArMTQzLDM0IEBACiAgICAgICAgIGYud3JpdGUoY2VydCkKICAgICB3aXRoIG9wZW4oJ3NzbF9rZXkucGVtJywgJ3cnKSBhcyBmOgogICAgICAgICBmLndyaXRlKGtleSkKKyAgICBwcmludCgicGFzc3dvcmQgcHJvdGVjdGluZyBzc2xfa2V5LnBlbSBpbiBzc2xfa2V5LnBhc3N3ZC5wZW0iKQorICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJywncnNhJywnLWluJywnc3NsX2tleS5wZW0nLCctb3V0Jywnc3NsX2tleS5wYXNzd2QucGVtJywnLWRlczMnLCctcGFzc291dCcsJ3Bhc3M6c29tZXBhc3MnXSkKKyAgICBjaGVja19jYWxsKFsnb3BlbnNzbCcsJ3JzYScsJy1pbicsJ3NzbF9rZXkucGVtJywnLW91dCcsJ2tleWNlcnQucGFzc3dkLnBlbScsJy1kZXMzJywnLXBhc3NvdXQnLCdwYXNzOnNvbWVwYXNzJ10pCisKICAgICB3aXRoIG9wZW4oJ2tleWNlcnQucGVtJywgJ3cnKSBhcyBmOgogICAgICAgICBmLndyaXRlKGtleSkKICAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgd2l0aCBvcGVuKCdrZXljZXJ0LnBhc3N3ZC5wZW0nLCAnYSsnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGNlcnQpCisKICAgICAjIEZvciBjZXJ0aWZpY2F0ZSBtYXRjaGluZyB0ZXN0cworICAgIG1ha2VfY2EoKQogICAgIGNlcnQsIGtleSA9IG1ha2VfY2VydF9rZXkoJ2Zha2Vob3N0bmFtZScpCiAgICAgd2l0aCBvcGVuKCdrZXljZXJ0Mi5wZW0nLCAndycpIGFzIGY6CiAgICAgICAgIGYud3JpdGUoa2V5KQogICAgICAgICBmLndyaXRlKGNlcnQpCisKKyAgICBjZXJ0LCBrZXkgPSBtYWtlX2NlcnRfa2V5KCdsb2NhbGhvc3QnLCBUcnVlKQorICAgIHdpdGggb3Blbigna2V5Y2VydDMucGVtJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGtleSkKKyAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgY2VydCwga2V5ID0gbWFrZV9jZXJ0X2tleSgnZmFrZWhvc3RuYW1lJywgVHJ1ZSkKKyAgICB3aXRoIG9wZW4oJ2tleWNlcnQ0LnBlbScsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShrZXkpCisgICAgICAgIGYud3JpdGUoY2VydCkKKworICAgIHVubWFrZV9jYSgpCisgICAgcHJpbnQoIlxuXG5QbGVhc2UgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gdGVzdF9zc2wucHksIHRlc3RfcGFyc2VfY2VydCBmdW5jdGlvbiByZWxhdGVkIHRvIG5vdEFmdGVyLG5vdEJlZm9yZSBhbmQgc2VyaWFsTnVtYmVyIikKKyAgICBjaGVja19jYWxsKFsnb3BlbnNzbCcsJ3g1MDknLCctaW4nLCdrZXljZXJ0LnBlbScsJy1kYXRlcycsJy1zZXJpYWwnLCctbm9vdXQnXSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5IGIvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkKaW5kZXggODYxYmZiMi4uZTM2NzI0ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkKKysrIGIvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkKQEAgLTE0NSwxMiArMTQ1LDggQEAKICAgICByZXR1cm4gIiIKIAogCi1jbGFzcyBnYWllcnJvcihFeGNlcHRpb24pOgotICAgIHBhc3MKLQotCi1jbGFzcyBlcnJvcihFeGNlcHRpb24pOgotICAgIHBhc3MKK2dhaWVycm9yID0gc29ja2V0X21vZHVsZS5nYWllcnJvcgorZXJyb3IgPSBzb2NrZXRfbW9kdWxlLmVycm9yCiAKIAogIyBDb25zdGFudHMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weSBiL0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weQppbmRleCA5MDhhZmUzLi4wMTdlMDEwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkKKysrIGIvTGliL3Rlc3QvbXBfZm9ya19ib21iLnB5CkBAIC03LDYgKzcsMTEgQEAKICMgY29ycmVjdGx5IG9uIFdpbmRvd3MuICBIb3dldmVyLCB3ZSBzaG91bGQgZ2V0IGEgUnVudGltZUVycm9yIHJhdGhlcgogIyB0aGFuIHRoZSBXaW5kb3dzIGVxdWl2YWxlbnQgb2YgYSBmb3JrIGJvbWIuCiAKK2lmIGxlbihzeXMuYXJndikgPiAxOgorICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKHN5cy5hcmd2WzFdKQorZWxzZToKKyAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZCgnc3Bhd24nKQorCiBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWZvbykKIHAuc3RhcnQoKQogcC5qb2luKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkgYi9MaWIvdGVzdC9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5CmluZGV4IDE0ZmVhM2UuLjUxY2EzYmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKKysrIGIvTGliL3Rlc3QvbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQpAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLm9wZW5fbWFwcGluZ19maWxlKCkuY2xvc2UoKSAjIHRlc3QgaXQgdG8gcmVwb3J0IHRoZSBlcnJvciBlYXJseQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIEhUVFBFeGNlcHRpb24pOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEhUVFBFeGNlcHRpb24pOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IHJldHJpZXZlICIrc2VsZi5tYXBmaWxldXJsKQogCiAgICAgZGVmIG9wZW5fbWFwcGluZ19maWxlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5IGIvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CmluZGV4IDRkNTliZGUuLmEyYmVhNjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQorKysgYi9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKQEAgLTEsOSArMSwxMSBAQAoraW1wb3J0IGNvcHlyZWcKIGltcG9ydCBpbwotaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgcGlja2xldG9vbHMKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzeXMKLWltcG9ydCBjb3B5cmVnCitpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCiBmcm9tIGh0dHAuY29va2llcyBpbXBvcnQgU2ltcGxlQ29va2llCiAKQEAgLTkzLDYgKzk1LDkgQEAKICAgICBkZWYgX19nZXRpbml0YXJnc19fKHNlbGYpOgogICAgICAgICByZXR1cm4gKCkKIAorY2xhc3MgSChvYmplY3QpOgorICAgIHBhc3MKKwogaW1wb3J0IF9fbWFpbl9fCiBfX21haW5fXy5DID0gQwogQy5fX21vZHVsZV9fID0gIl9fbWFpbl9fIgpAQCAtMTAwLDYgKzEwNSw4IEBACiBELl9fbW9kdWxlX18gPSAiX19tYWluX18iCiBfX21haW5fXy5FID0gRQogRS5fX21vZHVsZV9fID0gIl9fbWFpbl9fIgorX19tYWluX18uSCA9IEgKK0guX19tb2R1bGVfXyA9ICJfX21haW5fXyIKIAogY2xhc3MgbXlpbnQoaW50KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CkBAIC00OTEsMzEgKzQ5OCw1MiBAQAogICAgIHguYXBwZW5kKDUpCiAgICAgcmV0dXJuIHgKIAorCiBjbGFzcyBBYnN0cmFjdFBpY2tsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFN1YmNsYXNzIG11c3QgZGVmaW5lIHNlbGYuZHVtcHMsIHNlbGYubG9hZHMuCiAKKyAgICBvcHRpbWl6ZWQgPSBGYWxzZQorCiAgICAgX3Rlc3RkYXRhID0gY3JlYXRlX2RhdGEoKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBwYXNzCiAKKyAgICBkZWYgYXNzZXJ0X2lzX2NvcHkoc2VsZiwgb2JqLCBvYmpjb3B5LCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlV0aWxpdHkgbWV0aG9kIHRvIHZlcmlmeSBpZiB0d28gb2JqZWN0cyBhcmUgY29waWVzIG9mIGVhY2ggb3RoZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSAieyFyfSBpcyBub3QgYSBjb3B5IG9mIHshcn0iLmZvcm1hdChvYmosIG9iamNvcHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCBvYmpjb3B5LCBtc2c9bXNnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUob2JqKSwgdHlwZShvYmpjb3B5KSwgbXNnPW1zZykKKyAgICAgICAgaWYgaGFzYXR0cihvYmosICdfX2RpY3RfXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwob2JqLl9fZGljdF9fLCBvYmpjb3B5Ll9fZGljdF9fLCBtc2c9bXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvYmouX19kaWN0X18sIG9iamNvcHkuX19kaWN0X18sIG1zZz1tc2cpCisgICAgICAgIGlmIGhhc2F0dHIob2JqLCAnX19zbG90c19fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChvYmouX19zbG90c19fLCBvYmpjb3B5Ll9fc2xvdHNfXywgbXNnPW1zZykKKyAgICAgICAgICAgIGZvciBzbG90IGluIG9iai5fX3Nsb3RzX186CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihvYmosIHNsb3QpLCBoYXNhdHRyKG9iamNvcHksIHNsb3QpLCBtc2c9bXNnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihvYmosIHNsb3QsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihvYmpjb3B5LCBzbG90LCBOb25lKSwgbXNnPW1zZykKKwogICAgIGRlZiB0ZXN0X21pc2Moc2VsZik6CiAgICAgICAgICMgdGVzdCB2YXJpb3VzIGRhdGF0eXBlcyBub3QgdGVzdGVkIGJ5IHRlc3RkYXRhCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICB4ID0gbXlpbnQoNCkKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgICAgICAgICAgeCA9ICgxLCAoKSkKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgICAgICAgICAgeCA9IGluaXRhcmcoMSwgeCkKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgICAgICAjIFhYWCB0ZXN0IF9fcmVkdWNlX18gcHJvdG9jb2w/CiAKQEAgLTUyNCwxNiArNTUyLDE2IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhleHBlY3RlZCwgcHJvdG8pCiAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KGV4cGVjdGVkLCBnb3QpCiAKICAgICBkZWYgdGVzdF9sb2FkX2Zyb21fZGF0YTAoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTApKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEEwKSkKIAogICAgIGRlZiB0ZXN0X2xvYWRfZnJvbV9kYXRhMShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTEpKQogCiAgICAgZGVmIHRlc3RfbG9hZF9mcm9tX2RhdGEyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEEyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMikpCiAKICAgICBkZWYgdGVzdF9sb2FkX2NsYXNzaWNfaW5zdGFuY2Uoc2VsZik6CiAgICAgICAgICMgU2VlIGlzc3VlNTE4MC4gIFRlc3QgbG9hZGluZyAyLnggcGlja2xlcyB0aGF0CkBAIC01NTUsNyArNTgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgYiJYXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIicDBcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIoZHAxXG5iLiIpLnJlcGxhY2UoYidYJywgeG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUwKSkKIAogICAgICAgICAgICAgIyBQcm90b2NvbCAxIChiaW5hcnkgbW9kZSBwaWNrbGUpCiAgICAgICAgICAgICAiIiIKQEAgLTU3Miw3ICs2MDAsNyBAQAogICAgICAgICAgICAgcGlja2xlMSA9IChiJyhjX19tYWluX19cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidYXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncVx4MDBvcVx4MDF9cVx4MDJiLicpLnJlcGxhY2UoYidYJywgeG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUxKSkKIAogICAgICAgICAgICAgIyBQcm90b2NvbCAyIChwaWNrbGUyID0gYidceDgwXHgwMicgKyBwaWNrbGUxKQogICAgICAgICAgICAgIiIiCkBAIC01OTAsNyArNjE4LDcgQEAKICAgICAgICAgICAgIHBpY2tsZTIgPSAoYidceDgwXHgwMihjX19tYWluX19cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidYXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncVx4MDBvcVx4MDF9cVx4MDJiLicpLnJlcGxhY2UoYidYJywgeG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUyKSkKIAogICAgICMgVGhlcmUgYXJlIGdyYXR1aXRvdXMgZGlmZmVyZW5jZXMgYmV0d2VlbiBwaWNrbGVzIHByb2R1Y2VkIGJ5CiAgICAgIyBwaWNrbGUgYW5kIGNQaWNrbGUsIGxhcmdlbHkgYmVjYXVzZSBjUGlja2xlIHN0YXJ0cyBQVVQgaW5kaWNlcyBhdApAQCAtNjE1LDYgKzY0Myw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhsLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbGlzdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeFswXSkKIApAQCAtNjI0LDYgKzY1Myw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgdHVwbGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHhbMF0pLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeFswXVswXSkKQEAgLTYzNCwxNSArNjY0LDM5IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhkLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgZGljdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4LmtleXMoKSksIFsxXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzFdIGlzIHgpCiAKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfc2V0KHNlbGYpOgorICAgICAgICBoID0gSCgpCisgICAgICAgIHkgPSBzZXQoe2h9KQorICAgICAgICBoLmF0dHIgPSB5CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh5LCBwcm90bykKKyAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsaXN0KHgpWzBdLmF0dHIsIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9mcm96ZW5zZXQoc2VsZik6CisgICAgICAgIGggPSBIKCkKKyAgICAgICAgeSA9IGZyb3plbnNldCh7aH0pCisgICAgICAgIGguYXR0ciA9IHkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHksIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBmcm96ZW5zZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxpc3QoeClbMF0uYXR0ciwgeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQorCiAgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2luc3Qoc2VsZik6CiAgICAgICAgIGkgPSBDKCkKICAgICAgICAgaS5hdHRyID0gaQogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoaSwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIEMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcih4KSwgZGlyKGkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh4LmF0dHIsIHgpCiAKQEAgLTY1NSw2ICs3MDksNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMobCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxpc3QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKHhbMF0pLCBkaXIoaSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeFswXS5hdHRyLmtleXMoKSksIFsxXSkKQEAgLTY2MiwzMSArNzE3LDggQEAKIAogICAgIGRlZiB0ZXN0X2dldChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHNlbGYubG9hZHMsIGInZzBcbnAwJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGInKChLZHRwMFxuaFx4MDBsLikpJyksIFsoMTAwLCksICgxMDAsKV0pCi0KLSAgICBkZWYgdGVzdF9pbnNlY3VyZV9zdHJpbmdzKHNlbGYpOgotICAgICAgICAjIFhYWCBTb21lIG9mIHRoZXNlIHRlc3RzIGFyZSB0ZW1wb3JhcmlseSBkaXNhYmxlZAotICAgICAgICBpbnNlY3VyZSA9IFtiImFiYyIsIGIiMiArIDIiLCAjIG5vdCBxdW90ZWQKLSAgICAgICAgICAgICAgICAgICAgIyMgYiInYWJjJyArICdkZWYnIiwgIyBub3QgYSBzaW5nbGUgcXVvdGVkIHN0cmluZwotICAgICAgICAgICAgICAgICAgICBiIidhYmMiLCAjIHF1b3RlIGlzIG5vdCBjbG9zZWQKLSAgICAgICAgICAgICAgICAgICAgYiInYWJjXCIiLCAjIG9wZW4gcXVvdGUgYW5kIGNsb3NlIHF1b3RlIGRvbid0IG1hdGNoCi0gICAgICAgICAgICAgICAgICAgIGIiJ2FiYycgICA/IiwgIyBqdW5rIGFmdGVyIGNsb3NlIHF1b3RlCi0gICAgICAgICAgICAgICAgICAgIGIiJ1xcJyIsICMgdHJhaWxpbmcgYmFja3NsYXNoCi0gICAgICAgICAgICAgICAgICAgICMgVmFyaWF0aW9ucyBvbiBpc3N1ZSAjMTc3MTAKLSAgICAgICAgICAgICAgICAgICAgYiInIiwKLSAgICAgICAgICAgICAgICAgICAgYiciJywKLSAgICAgICAgICAgICAgICAgICAgYiInICIsCi0gICAgICAgICAgICAgICAgICAgIGIiJyAgIiwKLSAgICAgICAgICAgICAgICAgICAgYiInICAgIiwKLSAgICAgICAgICAgICAgICAgICAgYiInICAgICIsCi0gICAgICAgICAgICAgICAgICAgIGInIiAgICAnLAotICAgICAgICAgICAgICAgICAgICAjIHNvbWUgdGVzdHMgb2YgdGhlIHF1b3RpbmcgcnVsZXMKLSAgICAgICAgICAgICAgICAgICAgIyMgYiInYWJjXCJcJyciLAotICAgICAgICAgICAgICAgICAgICAjIyBiIidcXFxcYVwnXCdcJ1xcXCdcXFxcXCcnIiwKLSAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICBmb3IgYiBpbiBpbnNlY3VyZToKLSAgICAgICAgICAgIGJ1ZiA9IGIiUyIgKyBiICsgYiJcMDEycDBcMDEyLiIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9hZHMsIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShbKDEwMCwpLCAoMTAwLCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZHMoYicoKEtkdHAwXG5oXHgwMGwuKSknKSkKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CiAgICAgICAgIGVuZGNhc2VzID0gWycnLCAnPFxcdT4nLCAnPFxcXHUxMjM0PicsICc8XG4+JywKQEAgLTY5NywyNiArNzI5LDI2IEBACiAgICAgICAgICAgICBmb3IgdSBpbiBlbmRjYXNlczoKICAgICAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyh1LCBwcm90bykKICAgICAgICAgICAgICAgICB1MiA9IHNlbGYubG9hZHMocCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLCB1KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodSwgdTIpCiAKICAgICBkZWYgdGVzdF91bmljb2RlX2hpZ2hfcGxhbmUoc2VsZik6CiAgICAgICAgIHQgPSAnXFUwMDAxMjM0NScKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgdDIgPSBzZWxmLmxvYWRzKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLCB0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh0LCB0MikKIAogICAgIGRlZiB0ZXN0X2J5dGVzKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgZm9yIHMgaW4gYicnLCBiJ3h5eicsIGIneHl6JyoxMDA6CiAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHMocywgcHJvdG8pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHApLCBzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkocywgc2VsZi5sb2FkcyhwKSkKICAgICAgICAgICAgIGZvciBzIGluIFtieXRlcyhbaV0pIGZvciBpIGluIHJhbmdlKDI1NildOgogICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHMsIHByb3RvKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhwKSwgcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHMsIHNlbGYubG9hZHMocCkpCiAgICAgICAgICAgICBmb3IgcyBpbiBbYnl0ZXMoW2ksIGldKSBmb3IgaSBpbiByYW5nZSgyNTYpXToKICAgICAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhzLCBwcm90bykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocCksIHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzLCBzZWxmLmxvYWRzKHApKQogCiAgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKICAgICAgICAgaW1wb3J0IHN5cwpAQCAtNzI2LDE0ICs3NTgsMTQgQEAKICAgICAgICAgICAgICAgICBmb3IgZXhwZWN0ZWQgaW4gKC1uLCBuKToKICAgICAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZXhwZWN0ZWQsIHByb3RvKQogICAgICAgICAgICAgICAgICAgICBuMiA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgbjIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoZXhwZWN0ZWQsIG4yKQogICAgICAgICAgICAgICAgIG4gPSBuID4+IDEKIAogICAgIGRlZiB0ZXN0X21heGludDY0KHNlbGYpOgogICAgICAgICBtYXhpbnQ2NCA9ICgxIDw8IDYzKSAtIDEKICAgICAgICAgZGF0YSA9IGInSScgKyBzdHIobWF4aW50NjQpLmVuY29kZSgiYXNjaWkiKSArIGInXG4uJwogICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKGRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBtYXhpbnQ2NCkKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShtYXhpbnQ2NCwgZ290KQogCiAgICAgICAgICMgVHJ5IHRvbyB3aXRoIGEgYm9ndXMgbGl0ZXJhbC4KICAgICAgICAgZGF0YSA9IGInSScgKyBzdHIobWF4aW50NjQpLmVuY29kZSgiYXNjaWkiKSArIGInSlVOS1xuLicKQEAgLTc0OCw3ICs3ODAsNyBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBucG9zLCAtbnBvczoKICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZSA9IHNlbGYuZHVtcHMobiwgcHJvdG8pCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHBpY2tsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgZ290KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShuLCBnb3QpCiAgICAgICAgICMgVHJ5IGEgbW9uc3Rlci4gIFRoaXMgaXMgcXVhZHJhdGljLXRpbWUgaW4gcHJvdG9zIDAgJiAxLCBzbyBkb24ndAogICAgICAgICAjIGJvdGhlciB3aXRoIHRob3NlLgogICAgICAgICBuYmFzZSA9IGludCgiZGVhZGJlZWZmZWVkZmFjZSIsIDE2KQpAQCAtNzU2LDYgKzc4OCwxMCBAQAogICAgICAgICBmb3IgbiBpbiBuYmFzZSwgLW5iYXNlOgogICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHMobiwgMikKICAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocCkKKyAgICAgICAgICAgICMgYXNzZXJ0X2lzX2NvcHkgaXMgdmVyeSBleHBlbnNpdmUgaGVyZSBhcyBpdCBwcmVjb21wdXRlcworICAgICAgICAgICAgIyBhIGZhaWx1cmUgbWVzc2FnZSBieSBjb21wdXRpbmcgdGhlIHJlcHIoKSBvZiBuIGFuZCBnb3QsCisgICAgICAgICAgICAjIHdlIGp1c3QgZG8gdGhlIGNoZWNrIG91cnNlbHZlcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShnb3QpLCBpbnQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGdvdCkKIAogICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgpAQCAtNzY2LDcgKzgwMiw3IEBACiAgICAgICAgICAgICBmb3IgdmFsdWUgaW4gdGVzdF92YWx1ZXM6CiAgICAgICAgICAgICAgICAgcGlja2xlID0gc2VsZi5kdW1wcyh2YWx1ZSwgcHJvdG8pCiAgICAgICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwaWNrbGUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgZ290KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodmFsdWUsIGdvdCkKIAogICAgIEBydW5fd2l0aF9sb2NhbGUoJ0xDX0FMTCcsICdkZV9ERScsICdmcl9GUicpCiAgICAgZGVmIHRlc3RfZmxvYXRfZm9ybWF0KHNlbGYpOgpAQCAtNzc0LDEwICs4MTAsMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKDEuMiwgMClbMDozXSwgYidGMS4nKQogCiAgICAgZGVmIHRlc3RfcmVkdWNlKHNlbGYpOgotICAgICAgICBwYXNzCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpbnN0ID0gQUFBKCkKKyAgICAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMoaW5zdCwgcHJvdG8pCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLCBSRURVQ0VfQSkKIAogICAgIGRlZiB0ZXN0X2dldGluaXRhcmdzKHNlbGYpOgotICAgICAgICBwYXNzCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpbnN0ID0gaW5pdGFyZygxLCAyKQorICAgICAgICAgICAgZHVtcGVkID0gc2VsZi5kdW1wcyhpbnN0LCBwcm90bykKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYubG9hZHMoZHVtcGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShpbnN0LCBsb2FkZWQpCiAKICAgICBkZWYgdGVzdF9wb3BfZW1wdHlfc3RhY2soc2VsZik6CiAgICAgICAgICMgVGVzdCBpc3N1ZTc0NTUKQEAgLTc5OCw2ICs4NDIsNyBAQAogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoYSwgcHJvdG8pCiAgICAgICAgICAgICBiID0gc2VsZi5sb2FkcyhzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGEpLCB0eXBlKGIpKQogCiAgICAgZGVmIHRlc3Rfc3RydWN0c2VxKHNlbGYpOgogICAgICAgICBpbXBvcnQgdGltZQpAQCAtODA3LDI5ICs4NTIsMjkgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgdSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdSkKICAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzdGF0Iik6CiAgICAgICAgICAgICAgICAgdCA9IG9zLnN0YXQob3MuY3VyZGlyKQogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB1KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdSkKICAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzdGF0dmZzIik6CiAgICAgICAgICAgICAgICAgdCA9IG9zLnN0YXR2ZnMob3MuY3VyZGlyKQogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB1KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdSkKIAogICAgIGRlZiB0ZXN0X2VsbGlwc2lzKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoLi4uLCBwcm90bykKICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC4uLiwgdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoLi4uLCB1KQogCiAgICAgZGVmIHRlc3Rfbm90aW1wbGVtZW50ZWQoc2VsZik6CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhOb3RJbXBsZW1lbnRlZCwgcHJvdG8pCiAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb3RJbXBsZW1lbnRlZCwgdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm90SW1wbGVtZW50ZWQsIHUpCiAKICAgICBkZWYgdGVzdF9zaW5nbGV0b25fdHlwZXMoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzY0Nzc6IFRlc3QgdGhhdCB0eXBlcyBvZiBidWlsdC1pbiBzaW5nbGV0b25zIGNhbiBiZSBwaWNrbGVkLgpAQCAtODQzLDIxICs4ODgsMjEgQEAKICAgICAjIFRlc3RzIGZvciBwcm90b2NvbCAyCiAKICAgICBkZWYgdGVzdF9wcm90byhzZWxmKToKLSAgICAgICAgYnVpbGRfbm9uZSA9IHBpY2tsZS5OT05FICsgcGlja2xlLlNUT1AKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgIGV4cGVjdGVkID0gYnVpbGRfbm9uZQorICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMoTm9uZSwgcHJvdG8pCiAgICAgICAgICAgICBpZiBwcm90byA+PSAyOgotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcGlja2xlLlBST1RPICsgYnl0ZXMoW3Byb3RvXSkgKyBleHBlY3RlZAotICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHMoTm9uZSwgcHJvdG8pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHByb3RvX2hlYWRlciA9IHBpY2tsZS5QUk9UTyArIGJ5dGVzKFtwcm90b10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBpY2tsZWQuc3RhcnRzd2l0aChwcm90b19oZWFkZXIpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50X29wY29kZShwaWNrbGUuUFJPVE8sIHBpY2tsZWQpLCAwKQogCiAgICAgICAgIG9vYiA9IHByb3RvY29sc1stMV0gKyAxICAgICAjIGEgZnV0dXJlIHByb3RvY29sCisgICAgICAgIGJ1aWxkX25vbmUgPSBwaWNrbGUuTk9ORSArIHBpY2tsZS5TVE9QCiAgICAgICAgIGJhZHBpY2tsZSA9IHBpY2tsZS5QUk9UTyArIGJ5dGVzKFtvb2JdKSArIGJ1aWxkX25vbmUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5sb2FkcyhiYWRwaWNrbGUpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGRldGFpbDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoZGV0YWlsKS5zdGFydHN3aXRoKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgcGlja2xlIHByb3RvY29sIikpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbCIsIHN0cihlcnIpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBiYWQgcHJvdG9jb2wgbnVtYmVyIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQogCkBAIC04NjYsNyArOTExLDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTE9ORzEsIHMpLCBwcm90byA+PSAyKQogCiAgICAgZGVmIHRlc3RfbG9uZzQoc2VsZik6CkBAIC04NzQsNyArOTE5LDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTE9ORzQsIHMpLCBwcm90byA+PSAyKQogCiAgICAgZGVmIHRlc3Rfc2hvcnRfdHVwbGVzKHNlbGYpOgpAQCAtOTEyLDkgKzk1Nyw5IEBACiAgICAgICAgICAgICBmb3IgeCBpbiBhLCBiLCBjLCBkLCBlOgogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5LCAocHJvdG8sIHgsIHMsIHkpKQotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3Bjb2RlW3Byb3RvLCBsZW4oeCldCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vcGNvZGVbbWluKHByb3RvLCAzKSwgbGVuKHgpXQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSkKIAogICAgIGRlZiB0ZXN0X3NpbmdsZXRvbnMoc2VsZik6CiAgICAgICAgICMgTWFwIChwcm90bywgc2luZ2xldG9uKSB0byBleHBlY3RlZCBvcGNvZGUuCkBAIC05MzgsOCArOTgzLDggQEAKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHksIChwcm90bywgeCwgcywgeSkpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vcGNvZGVbcHJvdG8sIHhdCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVttaW4ocHJvdG8sIDMpLCB4XQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSkKIAogICAgIGRlZiB0ZXN0X25ld29ial90dXBsZShzZWxmKToKICAgICAgICAgeCA9IE15VHVwbGUoWzEsIDIsIDNdKQpAQCAtOTQ4LDggKzk5Myw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKHgpLCB0dXBsZSh5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgIGRlZiB0ZXN0X25ld29ial9saXN0KHNlbGYpOgogICAgICAgICB4ID0gTXlMaXN0KFsxLCAyLCAzXSkKQEAgLTk1OCw4ICsxMDAyLDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgIGRlZiB0ZXN0X25ld29ial9nZW5lcmljKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgpAQCAtOTcwLDYgKzEwMTMsNyBAQAogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCiAgICAgICAgICAgICAgICAgZGV0YWlsID0gKHByb3RvLCBDLCBCLCB4LCB5LCB0eXBlKHkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkgIyBYWFggcmV2aXNpdAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQih4KSwgQih5KSwgZGV0YWlsKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXywgZGV0YWlsKQogCkBAIC0xMDA4LDExICsxMDUyLDEwIEBACiAgICAgICAgICAgICBzMSA9IHNlbGYuZHVtcHMoeCwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oX19uYW1lX18uZW5jb2RlKCJ1dGYtOCIpLCBzMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJNeUxpc3QiLCBzMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHMxKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBzMSkpCiAKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgICAgICAgICAjIER1bXAgdXNpbmcgcHJvdG9jb2wgMiBmb3IgdGVzdC4KICAgICAgICAgICAgIHMyID0gc2VsZi5kdW1wcyh4LCAyKQpAQCAtMTAyMSw5ICsxMDY0LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHMyKSwgVHJ1ZSwgcmVwcihzMikpCiAKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQotCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBlLnJlc3RvcmUoKQogCkBAIC0xMDQ3LDcgKzEwODgsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICAgICAgbnVtX2FwcGVuZHMgPSBjb3VudF9vcGNvZGUocGlja2xlLkFQUEVORFMsIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hcHBlbmRzLCBwcm90byA+IDApCiAKQEAgLTEwNTYsNyArMTA5Nyw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBudW1fYXBwZW5kcyA9IGNvdW50X29wY29kZShwaWNrbGUuQVBQRU5EUywgcykKICAgICAgICAgICAgIGlmIHByb3RvID09IDA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYXBwZW5kcywgMCkKQEAgLTEwNzAsNyArMTExMSw3IEBACiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzLCBieXRlc190eXBlcykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBudW1fc2V0aXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLlNFVElURU1TLCBzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fc2V0aXRlbXMsIHByb3RvID4gMCkKIApAQCAtMTA3OSwyMiArMTEyMCw0OSBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICAgICAgbnVtX3NldGl0ZW1zID0gY291bnRfb3Bjb2RlKHBpY2tsZS5TRVRJVEVNUywgcykKICAgICAgICAgICAgIGlmIHByb3RvID09IDA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fc2V0aXRlbXMsIDApCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW1fc2V0aXRlbXMgPj0gMikKIAorICAgIGRlZiB0ZXN0X3NldF9jaHVua2luZyhzZWxmKToKKyAgICAgICAgbiA9IDEwICAjIHRvbyBzbWFsbCB0byBjaHVuaworICAgICAgICB4ID0gc2V0KHJhbmdlKG4pKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQorICAgICAgICAgICAgbnVtX2FkZGl0ZW1zID0gY291bnRfb3Bjb2RlKHBpY2tsZS5BRERJVEVNUywgcykKKyAgICAgICAgICAgIGlmIHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hZGRpdGVtcywgMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYWRkaXRlbXMsIDEpCisKKyAgICAgICAgbiA9IDI1MDAgICMgZXhwZWN0IGF0IGxlYXN0IHR3byBjaHVua3Mgd2hlbiBwcm90byA+PSA0CisgICAgICAgIHggPSBzZXQocmFuZ2UobikpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCisgICAgICAgICAgICBudW1fYWRkaXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLkFERElURU1TLCBzKQorICAgICAgICAgICAgaWYgcHJvdG8gPCA0OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FkZGl0ZW1zLCAwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChudW1fYWRkaXRlbXMsIDIpCisKICAgICBkZWYgdGVzdF9zaW1wbGVfbmV3b2JqKHNlbGYpOgogICAgICAgICB4ID0gb2JqZWN0Ll9fbmV3X18oU2ltcGxlTmV3T2JqKSAgIyBhdm9pZCBfX2luaXRfXwogICAgICAgICB4LmFiYyA9IDY2NgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLk5FV09CSiwgcyksIHByb3RvID49IDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLk5FV09CSiwgcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPD0gcHJvdG8gPCA0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5ORVdPQkpfRVgsIHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90byA+PSA0KQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykgICAjIHdpbGwgcmFpc2UgVHlwZUVycm9yIGlmIF9faW5pdF9fIGNhbGxlZAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmFiYywgNjY2KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgZGVmIHRlc3RfbmV3b2JqX2xpc3Rfc2xvdHMoc2VsZik6CiAgICAgICAgIHggPSBTbG90TGlzdChbMSwgMiwgM10pCkBAIC0xMTAyLDEwICsxMTcwLDcgQEAKICAgICAgICAgeC5iYXIgPSAiaGVsbG8iCiAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIDIpCiAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZm9vLCB5LmZvbykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmJhciwgeS5iYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgIGRlZiB0ZXN0X3JlZHVjZV9vdmVycmlkZXNfZGVmYXVsdF9yZWR1Y2VfZXgoc2VsZik6CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CkBAIC0xMTU0LDExICsxMjE5LDEwIEBACiAKICAgICBAbm9fdHJhY2luZwogICAgIGRlZiB0ZXN0X2JhZF9nZXRhdHRyKHNlbGYpOgorICAgICAgICAjIElzc3VlICMzNTE0OiBjcmFzaCB3aGVuIHRoZXJlIGlzIGFuIGluZmluaXRlIGxvb3AgaW4gX19nZXRhdHRyX18KICAgICAgICAgeCA9IEJhZEdldGF0dHIoKQotICAgICAgICBmb3IgcHJvdG8gaW4gMCwgMToKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi5kdW1wcywgeCwgcHJvdG8pCi0gICAgICAgICMgcHJvdG9jb2wgMiBkb24ndCByYWlzZSBhIFJ1bnRpbWVFcnJvci4KLSAgICAgICAgZCA9IHNlbGYuZHVtcHMoeCwgMikKIAogICAgIGRlZiB0ZXN0X3JlZHVjZV9iYWRfaXRlcmF0b3Ioc2VsZik6CiAgICAgICAgICMgSXNzdWU0MTc2OiBjcmFzaCB3aGVuIDR0aCBhbmQgNXRoIGl0ZW1zIG9mIF9fcmVkdWNlX18oKQpAQCAtMTE5MSwxMSArMTI1NSwxMCBAQAogICAgICAgICBvYmogPSBbZGljdChsYXJnZV9kaWN0KSwgZGljdChsYXJnZV9kaWN0KSwgZGljdChsYXJnZV9kaWN0KV0KIAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgZHVtcGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQotICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhkdW1wZWQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZCwgb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHByb3RvY29sICVkOiAlciAhPSAlciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocHJvdG8sIG9iaiwgbG9hZGVkKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBkdW1wZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCisgICAgICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShvYmosIGxvYWRlZCkKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9uYW1lX2ludGVybmluZyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgYXR0cmlidXRlIG5hbWVzIG9mIHBpY2tsZWQgb2JqZWN0cyBhcmUgaW50ZXJuZWQgd2hlbgpAQCAtMTI0OCw2ICsxMzExLDM1IEBACiAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMoc2V0KFszXSksIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVtcGVkLCBEQVRBNikKIAorICAgIGRlZiB0ZXN0X2xvYWRfcHl0aG9uMl9zdHJfYXNfYnl0ZXMoc2VsZik6CisgICAgICAgICMgRnJvbSBQeXRob24gMjogcGlja2xlLmR1bXBzKCdhXHgwMFx4YTAnLCBwcm90b2NvbD0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYiJTJ2FcXHgwMFxceGEwJ1xuLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0iYnl0ZXMiKSwgYidhXHgwMFx4YTAnKQorICAgICAgICAjIEZyb20gUHl0aG9uIDI6IHBpY2tsZS5kdW1wcygnYVx4MDBceGEwJywgcHJvdG9jb2w9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGInVVx4MDNhXHgwMFx4YTAuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJieXRlcyIpLCBiJ2FceDAwXHhhMCcpCisgICAgICAgICMgRnJvbSBQeXRob24gMjogcGlja2xlLmR1bXBzKCdhXHgwMFx4YTAnLCBwcm90b2NvbD0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYidceDgwXHgwMlVceDAzYVx4MDBceGEwLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0iYnl0ZXMiKSwgYidhXHgwMFx4YTAnKQorCisgICAgZGVmIHRlc3RfbG9hZF9weXRob24yX3VuaWNvZGVfYXNfc3RyKHNlbGYpOgorICAgICAgICAjIEZyb20gUHl0aG9uIDI6IHBpY2tsZS5kdW1wcyh1J8+AJywgcHJvdG9jb2w9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGInVlxcdTAzYzBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9J2J5dGVzJyksICfPgCcpCisgICAgICAgICMgRnJvbSBQeXRob24gMjogcGlja2xlLmR1bXBzKHUnz4AnLCBwcm90b2NvbD0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYidYXHgwMlx4MDBceDAwXHgwMFx4Y2ZceDgwLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0iYnl0ZXMiKSwgJ8+AJykKKyAgICAgICAgIyBGcm9tIFB5dGhvbiAyOiBwaWNrbGUuZHVtcHModSfPgCcsIHByb3RvY29sPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhiJ1x4ODBceDAyWFx4MDJceDAwXHgwMFx4MDBceGNmXHg4MC4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ImJ5dGVzIiksICfPgCcpCisKKyAgICBkZWYgdGVzdF9sb2FkX2xvbmdfcHl0aG9uMl9zdHJfYXNfYnl0ZXMoc2VsZik6CisgICAgICAgICMgRnJvbSBQeXRob24gMjogcGlja2xlLmR1bXBzKCd4JyAqIDMwMCwgcHJvdG9jb2w9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHBpY2tsZS5CSU5TVFJJTkcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soIjxJIiwgMzAwKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gnICogMzAwICsgcGlja2xlLlNUT1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0nYnl0ZXMnKSwgYid4JyAqIDMwMCkKKwogICAgIGRlZiB0ZXN0X2xhcmdlX3BpY2tsZXMoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGUgY29ycmVjdG5lc3Mgb2YgaW50ZXJuYWwgYnVmZmVyaW5nIHJvdXRpbmVzIHdoZW4gaGFuZGxpbmcKICAgICAgICAgIyBsYXJnZSBkYXRhLgpAQCAtMTI2NiwxMSArMTM1OCwxNCBAQAogICAgIGRlZiB0ZXN0X2ludF9waWNrbGluZ19lZmZpY2llbmN5KHNlbGYpOgogICAgICAgICAjIFRlc3QgY29tcGFjaXR5IG9mIGludCByZXByZXNlbnRhdGlvbiAoc2VlIGlzc3VlICMxMjc0NCkKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgIHNpemVzID0gW2xlbihzZWxmLmR1bXBzKDIqKm4sIHByb3RvKSkgZm9yIG4gaW4gcmFuZ2UoNzApXQotICAgICAgICAgICAgIyB0aGUgc2l6ZSBmdW5jdGlvbiBpcyBtb25vdG9uaWMKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHNpemVzKSwgc2l6ZXMpCi0gICAgICAgICAgICBpZiBwcm90byA+PSAyOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHNpemVzWy0xXSwgMTQpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgcGlja2xlcyA9IFtzZWxmLmR1bXBzKDIqKm4sIHByb3RvKSBmb3IgbiBpbiByYW5nZSg3MCldCisgICAgICAgICAgICAgICAgc2l6ZXMgPSBsaXN0KG1hcChsZW4sIHBpY2tsZXMpKQorICAgICAgICAgICAgICAgICMgdGhlIHNpemUgZnVuY3Rpb24gaXMgbW9ub3RvbmljCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoc2l6ZXMpLCBzaXplcykKKyAgICAgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBwaWNrbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5MT05HLCBwKSkKIAogICAgIGRlZiBjaGVja19uZWdhdGl2ZV8zMmJfYmluWFhYKHNlbGYsIGR1bXBlZCk6CiAgICAgICAgIGlmIHN5cy5tYXhzaXplID4gMioqMzI6CkBAIC0xMzAxLDYgKzEzOTYsMzUgQEAKICAgICAgICAgZHVtcGVkID0gYidceDgwXHgwM1hceDAxXHgwMFx4MDBceDAwYXJceGZmXHhmZlx4ZmZceGZmLicKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb2FkcywgZHVtcGVkKQogCisgICAgZGVmIHRlc3RfYmFkbHlfZXNjYXBlZF9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9hZHMsIGIiUydcXCdcbi4iKQorCisgICAgZGVmIHRlc3RfYmFkbHlfcXVvdGVkX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTc3MTAKKyAgICAgICAgYmFkcGlja2xlcyA9IFtiIlMnXG4uIiwKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MiXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1NcJyBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUyIgXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1NcJyJcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUyJcJ1xuLicsCisgICAgICAgICAgICAgICAgICAgICAgYiJTJyAnIFxuLiIsCisgICAgICAgICAgICAgICAgICAgICAgYidTIiAiIFxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYiJTICcnXG4uIiwKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MgIiJcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUyBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInU1xuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTLiddCisgICAgICAgIGZvciBwIGluIGJhZHBpY2tsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBzZWxmLmxvYWRzLCBwKQorCisgICAgZGVmIHRlc3RfY29ycmVjdGx5X3F1b3RlZF9zdHJpbmcoc2VsZik6CisgICAgICAgIGdvb2RwaWNrbGVzID0gWyhiIlMnJ1xuLiIsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGInUyIiXG4uJywgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAoYidTIlxcbiJcbi4nLCAnXG4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGIiUydcXG4nXG4uIiwgJ1xuJyldCisgICAgICAgIGZvciBwLCBleHBlY3RlZCBpbiBnb29kcGlja2xlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhwKSwgZXhwZWN0ZWQpCisKICAgICBkZWYgX2NoZWNrX3BpY2tsaW5nX3dpdGhfb3Bjb2RlKHNlbGYsIG9iaiwgb3Bjb2RlLCBwcm90byk6CiAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgcGlja2xlZCkpCkBAIC0xMzI0LDYgKzE0NDgsMTk0IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3BpY2tsaW5nX3dpdGhfb3Bjb2RlKG9iaiwgcGlja2xlLlNFVElURU1TLCBwcm90bykKIAorICAgICMgRXhlcmNpc2UgZnJhbWluZyAocHJvdG8gPj0gNCkgZm9yIHNpZ25pZmljYW50IHdvcmtsb2FkcworCisgICAgRlJBTUVfU0laRV9UQVJHRVQgPSA2NCAqIDEwMjQKKworICAgIGRlZiBjaGVja19mcmFtZV9vcGNvZGVzKHNlbGYsIHBpY2tsZWQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhlIGFyZ3VtZW50cyBvZiBGUkFNRSBvcGNvZGVzIGluIGEgcHJvdG9jb2wgNCsgcGlja2xlLgorICAgICAgICAiIiIKKyAgICAgICAgZnJhbWVfb3Bjb2RlX3NpemUgPSA5CisgICAgICAgIGxhc3RfYXJnID0gbGFzdF9wb3MgPSBOb25lCisgICAgICAgIGZvciBvcCwgYXJnLCBwb3MgaW4gcGlja2xldG9vbHMuZ2Vub3BzKHBpY2tsZWQpOgorICAgICAgICAgICAgaWYgb3AubmFtZSAhPSAnRlJBTUUnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsYXN0X3BvcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIFRoZSBwcmV2aW91cyBmcmFtZSdzIHNpemUgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAjIG9mIGJ5dGVzIHVwIHRvIHRoZSBjdXJyZW50IGZyYW1lLgorICAgICAgICAgICAgICAgIGZyYW1lX3NpemUgPSBwb3MgLSBsYXN0X3BvcyAtIGZyYW1lX29wY29kZV9zaXplCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcmFtZV9zaXplLCBsYXN0X2FyZykKKyAgICAgICAgICAgIGxhc3RfYXJnLCBsYXN0X3BvcyA9IGFyZywgcG9zCisgICAgICAgICMgVGhlIGxhc3QgZnJhbWUncyBzaXplIHNob3VsZCBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVwCisgICAgICAgICMgdG8gdGhlIHBpY2tsZSdzIGVuZC4KKyAgICAgICAgZnJhbWVfc2l6ZSA9IGxlbihwaWNrbGVkKSAtIGxhc3RfcG9zIC0gZnJhbWVfb3Bjb2RlX3NpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcmFtZV9zaXplLCBsYXN0X2FyZykKKworICAgIGRlZiB0ZXN0X2ZyYW1pbmdfbWFueV9vYmplY3RzKHNlbGYpOgorICAgICAgICBvYmogPSBsaXN0KHJhbmdlKDEwKio1KSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKKyAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIHVucGlja2xlZCkKKyAgICAgICAgICAgICAgICBieXRlc19wZXJfZnJhbWUgPSAobGVuKHBpY2tsZWQpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRfb3Bjb2RlKHBpY2tsZS5GUkFNRSwgcGlja2xlZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGJ5dGVzX3Blcl9mcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5GUkFNRV9TSVpFX1RBUkdFVCAvIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoYnl0ZXNfcGVyX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRlJBTUVfU0laRV9UQVJHRVQgKiAxKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZnJhbWVfb3Bjb2RlcyhwaWNrbGVkKQorCisgICAgZGVmIHRlc3RfZnJhbWluZ19sYXJnZV9vYmplY3RzKHNlbGYpOgorICAgICAgICBOID0gMTAyNCAqIDEwMjQKKyAgICAgICAgb2JqID0gW2IneCcgKiBOLCBiJ3knICogTiwgYid6JyAqIE5dCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCisgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCB1bnBpY2tsZWQpCisgICAgICAgICAgICAgICAgbl9mcmFtZXMgPSBjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBwaWNrbGVkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG5fZnJhbWVzLCBsZW4ob2JqKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2ZyYW1lX29wY29kZXMocGlja2xlZCkKKworICAgIGRlZiB0ZXN0X29wdGlvbmFsX2ZyYW1lcyhzZWxmKToKKyAgICAgICAgaWYgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgPCA0OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZGVmIHJlbW92ZV9mcmFtZXMocGlja2xlZCwga2VlcF9mcmFtZT1Ob25lKToKKyAgICAgICAgICAgICIiIlJlbW92ZSBmcmFtZSBvcGNvZGVzIGZyb20gdGhlIGdpdmVuIHBpY2tsZS4iIiIKKyAgICAgICAgICAgIGZyYW1lX3N0YXJ0cyA9IFtdCisgICAgICAgICAgICAjIDEgYnl0ZSBmb3IgdGhlIG9wY29kZSBhbmQgOCBmb3IgdGhlIGFyZ3VtZW50CisgICAgICAgICAgICBmcmFtZV9vcGNvZGVfc2l6ZSA9IDkKKyAgICAgICAgICAgIGZvciBvcGNvZGUsIF8sIHBvcyBpbiBwaWNrbGV0b29scy5nZW5vcHMocGlja2xlZCk6CisgICAgICAgICAgICAgICAgaWYgb3Bjb2RlLm5hbWUgPT0gJ0ZSQU1FJzoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVfc3RhcnRzLmFwcGVuZChwb3MpCisKKyAgICAgICAgICAgIG5ld3BpY2tsZSA9IGJ5dGVhcnJheSgpCisgICAgICAgICAgICBsYXN0X2ZyYW1lX2VuZCA9IDAKKyAgICAgICAgICAgIGZvciBpLCBwb3MgaW4gZW51bWVyYXRlKGZyYW1lX3N0YXJ0cyk6CisgICAgICAgICAgICAgICAgaWYga2VlcF9mcmFtZSBhbmQga2VlcF9mcmFtZShpKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuZXdwaWNrbGUgKz0gcGlja2xlZFtsYXN0X2ZyYW1lX2VuZDpwb3NdCisgICAgICAgICAgICAgICAgbGFzdF9mcmFtZV9lbmQgPSBwb3MgKyBmcmFtZV9vcGNvZGVfc2l6ZQorICAgICAgICAgICAgbmV3cGlja2xlICs9IHBpY2tsZWRbbGFzdF9mcmFtZV9lbmQ6XQorICAgICAgICAgICAgcmV0dXJuIG5ld3BpY2tsZQorCisgICAgICAgIGZyYW1lX3NpemUgPSBzZWxmLkZSQU1FX1NJWkVfVEFSR0VUCisgICAgICAgIG51bV9mcmFtZXMgPSAyMAorICAgICAgICBvYmogPSBbYnl0ZXMoW2ldKSAqIGZyYW1lX3NpemUgZm9yIGkgaW4gcmFuZ2UobnVtX2ZyYW1lcyldCisKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQorCisgICAgICAgICAgICBmcmFtZWxlc3NfcGlja2xlID0gcmVtb3ZlX2ZyYW1lcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBmcmFtZWxlc3NfcGlja2xlKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCBzZWxmLmxvYWRzKGZyYW1lbGVzc19waWNrbGUpKQorCisgICAgICAgICAgICBzb21lX2ZyYW1lc19waWNrbGUgPSByZW1vdmVfZnJhbWVzKHBpY2tsZWQsIGxhbWJkYSBpOiBpICUgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBzb21lX2ZyYW1lc19waWNrbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X29wY29kZShwaWNrbGUuRlJBTUUsIHBpY2tsZWQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIHNlbGYubG9hZHMoc29tZV9mcmFtZXNfcGlja2xlKSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9uYW1lcyhzZWxmKToKKyAgICAgICAgZ2xvYmFsIE5lc3RlZAorICAgICAgICBjbGFzcyBOZXN0ZWQ6CisgICAgICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3Igb2JqIGluIFtOZXN0ZWQuQSwgTmVzdGVkLkEuQiwgTmVzdGVkLkEuQi5DXToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgb2JqPW9iaik6CisgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhvYmosIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmosIHVucGlja2xlZCkKKworICAgIGRlZiB0ZXN0X3B5X21ldGhvZHMoc2VsZik6CisgICAgICAgIGdsb2JhbCBQeU1ldGhvZHNUZXN0CisgICAgICAgIGNsYXNzIFB5TWV0aG9kc1Rlc3Q6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgY2hlZXNlKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJjaGVlc2UiCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB3aW5lKGNscyk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGNscyBpcyBQeU1ldGhvZHNUZXN0CisgICAgICAgICAgICAgICAgcmV0dXJuICJ3aW5lIgorICAgICAgICAgICAgZGVmIGJpc2N1aXRzKHNlbGYpOgorICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYsIFB5TWV0aG9kc1Rlc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuICJiaXNjdWl0cyIKKyAgICAgICAgICAgIGNsYXNzIE5lc3RlZDoKKyAgICAgICAgICAgICAgICAiTmVzdGVkIGNsYXNzIgorICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYga2V0Y2h1cCgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gImtldGNodXAiCisgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIG1hcGxlKGNscyk6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBjbHMgaXMgUHlNZXRob2RzVGVzdC5OZXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJtYXBsZSIKKyAgICAgICAgICAgICAgICBkZWYgcGllKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLCBQeU1ldGhvZHNUZXN0Lk5lc3RlZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwaWUiCisKKyAgICAgICAgcHlfbWV0aG9kcyA9ICgKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QuY2hlZXNlLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC53aW5lLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdCgpLmJpc2N1aXRzLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC5OZXN0ZWQua2V0Y2h1cCwKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QuTmVzdGVkLm1hcGxlLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC5OZXN0ZWQoKS5waWUKKyAgICAgICAgKQorICAgICAgICBweV91bmJvdW5kX21ldGhvZHMgPSAoCisgICAgICAgICAgICAoUHlNZXRob2RzVGVzdC5iaXNjdWl0cywgUHlNZXRob2RzVGVzdCksCisgICAgICAgICAgICAoUHlNZXRob2RzVGVzdC5OZXN0ZWQucGllLCBQeU1ldGhvZHNUZXN0Lk5lc3RlZCkKKyAgICAgICAgKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciBtZXRob2QgaW4gcHlfbWV0aG9kczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgbWV0aG9kPW1ldGhvZCk6CisgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhtZXRob2QsIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2QoKSwgdW5waWNrbGVkKCkpCisgICAgICAgICAgICBmb3IgbWV0aG9kLCBjbHMgaW4gcHlfdW5ib3VuZF9tZXRob2RzOgorICAgICAgICAgICAgICAgIG9iaiA9IGNscygpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8sIG1ldGhvZD1tZXRob2QpOgorICAgICAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMobWV0aG9kLCBwcm90bykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0aG9kKG9iaiksIHVucGlja2xlZChvYmopKQorCisgICAgZGVmIHRlc3RfY19tZXRob2RzKHNlbGYpOgorICAgICAgICBnbG9iYWwgU3ViY2xhc3MKKyAgICAgICAgY2xhc3MgU3ViY2xhc3ModHVwbGUpOgorICAgICAgICAgICAgY2xhc3MgTmVzdGVkKHN0cik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNfbWV0aG9kcyA9ICgKKyAgICAgICAgICAgICMgYm91bmQgYnVpbHQtaW4gbWV0aG9kCisgICAgICAgICAgICAoImFiY2QiLmluZGV4LCAoImMiLCkpLAorICAgICAgICAgICAgIyB1bmJvdW5kIGJ1aWx0LWluIG1ldGhvZAorICAgICAgICAgICAgKHN0ci5pbmRleCwgKCJhYmNkIiwgImMiKSksCisgICAgICAgICAgICAjIGJvdW5kICJzbG90IiBtZXRob2QKKyAgICAgICAgICAgIChbMSwgMiwgM10uX19sZW5fXywgKCkpLAorICAgICAgICAgICAgIyB1bmJvdW5kICJzbG90IiBtZXRob2QKKyAgICAgICAgICAgIChsaXN0Ll9fbGVuX18sIChbMSwgMiwgM10sKSksCisgICAgICAgICAgICAjIGJvdW5kICJjb2V4aXN0IiBtZXRob2QKKyAgICAgICAgICAgICh7MSwgMn0uX19jb250YWluc19fLCAoMiwpKSwKKyAgICAgICAgICAgICMgdW5ib3VuZCAiY29leGlzdCIgbWV0aG9kCisgICAgICAgICAgICAoc2V0Ll9fY29udGFpbnNfXywgKHsxLCAyfSwgMikpLAorICAgICAgICAgICAgIyBidWlsdC1pbiBjbGFzcyBtZXRob2QKKyAgICAgICAgICAgIChkaWN0LmZyb21rZXlzLCAoKCJhIiwgMSksICgiYiIsIDIpKSksCisgICAgICAgICAgICAjIGJ1aWx0LWluIHN0YXRpYyBtZXRob2QKKyAgICAgICAgICAgIChieXRlYXJyYXkubWFrZXRyYW5zLCAoYiJhYmMiLCBiInh5eiIpKSwKKyAgICAgICAgICAgICMgc3ViY2xhc3MgbWV0aG9kcworICAgICAgICAgICAgKFN1YmNsYXNzKFsxLDIsMl0pLmNvdW50LCAoMiwpKSwKKyAgICAgICAgICAgIChTdWJjbGFzcy5jb3VudCwgKFN1YmNsYXNzKFsxLDIsMl0pLCAyKSksCisgICAgICAgICAgICAoU3ViY2xhc3MuTmVzdGVkKCJzd2VldCIpLmNvdW50LCAoImUiLCkpLAorICAgICAgICAgICAgKFN1YmNsYXNzLk5lc3RlZC5jb3VudCwgKFN1YmNsYXNzLk5lc3RlZCgic3dlZXQiKSwgImUiKSksCisgICAgICAgICkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3IgbWV0aG9kLCBhcmdzIGluIGNfbWV0aG9kczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgbWV0aG9kPW1ldGhvZCk6CisgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhtZXRob2QsIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2QoKmFyZ3MpLCB1bnBpY2tsZWQoKmFyZ3MpKQorCiAKIGNsYXNzIEJpZ21lbVBpY2tsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTMzNiw4ICsxNjQ4LDkgQEAKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPCAyOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkYXRhID0gTm9uZQogCkBAIC0xMzUyLDI0ICsxNjY1LDQ0IEBACiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgMzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWzoxNV0pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbLTE1Ol0pCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gKHBpY2tsZS5CSU5CWVRFUyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soIjxJIiwgbGVuKGRhdGEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc3RhcnQgPSBwaWNrbGVkLmluZGV4KGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkW2RhdGFfc3RhcnQtbGVuKGhlYWRlcik6ZGF0YV9zdGFydF0pCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIAogICAgIEBiaWdtZW10ZXN0KHNpemU9XzRHLCBtZW11c2U9Mi41LCBkcnlfcnVuPUZhbHNlKQogICAgIGRlZiB0ZXN0X2h1Z2VfYnl0ZXNfNjRiKHNlbGYsIHNpemUpOgotICAgICAgICBkYXRhID0gYiJhIiAqIHNpemUKKyAgICAgICAgZGF0YSA9IGIiYWNiZCIgKiAoc2l6ZSAvLyA0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgMzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm90byA9PSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBQcm90b2NvbCAzIGRvZXMgbm90IHN1cHBvcnQgbGFyZ2UgYnl0ZXMgb2JqZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgd2UgZG8gbm90IGNyYXNoIHdoZW4gcHJvY2Vzc2luZyBvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gKHBpY2tsZS5CSU5CWVRFUzggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCI8USIsIGxlbihkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3N0YXJ0ID0gcGlja2xlZC5pbmRleChkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZFtkYXRhX3N0YXJ0LWxlbihoZWFkZXIpOmRhdGFfc3RhcnRdKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKQEAgLTEzODEsMjcgKzE3MTQsNTIgQEAKICAgICAgICAgZGF0YSA9ICJhYmNkIiAqIChzaXplIC8vIDQpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFs6MTVdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWy0xNTpdKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gKHBpY2tsZS5CSU5VTklDT0RFICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiPEkiLCBsZW4oZGF0YSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zdGFydCA9IHBpY2tsZWQuaW5kZXgoYidhYmNkJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWRbZGF0YV9zdGFydC1sZW4oaGVhZGVyKTpkYXRhX3N0YXJ0XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHBpY2tsZWQucmluZGV4KGIiYWJjZCIpICsgbGVuKGIiYWJjZCIpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQuaW5kZXgoYiJhYmNkIikpLCBsZW4oZGF0YSkpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIAotICAgICMgQklOVU5JQ09ERSAocHJvdG9jb2xzIDEsIDIgYW5kIDMpIGNhbm5vdCBjYXJyeSBtb3JlIHRoYW4KLSAgICAjIDIqKjMyIC0gMSBieXRlcyBvZiB1dGYtOCBlbmNvZGVkIHVuaWNvZGUuCisgICAgIyBCSU5VTklDT0RFIChwcm90b2NvbHMgMSwgMiBhbmQgMykgY2Fubm90IGNhcnJ5IG1vcmUgdGhhbiAyKiozMiAtIDEgYnl0ZXMKKyAgICAjIG9mIHV0Zi04IGVuY29kZWQgdW5pY29kZS4gQklOVU5JQ09ERTggKHByb3RvY29sIDQpIHN1cHBvcnRzIHRoZXNlIGh1Z2UKKyAgICAjIHVuaWNvZGUgc3RyaW5ncyBob3dldmVyLgogCiAgICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcsIG1lbXVzZT04LCBkcnlfcnVuPUZhbHNlKQogICAgIGRlZiB0ZXN0X2h1Z2Vfc3RyXzY0YihzZWxmLCBzaXplKToKLSAgICAgICAgZGF0YSA9ICJhIiAqIHNpemUKKyAgICAgICAgZGF0YSA9ICJhYmNkIiAqIChzaXplIC8vIDQpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm90byA8IDQ6CisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gKHBpY2tsZS5CSU5VTklDT0RFOCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soIjxRIiwgbGVuKGRhdGEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc3RhcnQgPSBwaWNrbGVkLmluZGV4KGInYWJjZCcpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkW2RhdGFfc3RhcnQtbGVuKGhlYWRlcik6ZGF0YV9zdGFydF0pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChwaWNrbGVkLnJpbmRleChiImFiY2QiKSArIGxlbihiImFiY2QiKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkLmluZGV4KGIiYWJjZCIpKSwgbGVuKGRhdGEpKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKQEAgLTE0NDUsOCArMTgwMyw4IEBACiAgICAgICAgIHJldHVybiBvYmplY3QuX19yZWR1Y2VfXyhzZWxmKQogCiBjbGFzcyBSRVhfc2l4KG9iamVjdCk6Ci0gICAgIiIiVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNoZWNrIHRoZSA0dGggYXJndW1lbnQgKGxpc3QgaXRlcmF0b3IpIG9mIHRoZSByZWR1Y2UKLSAgICBwcm90b2NvbC4KKyAgICAiIiJUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY2hlY2sgdGhlIDR0aCBhcmd1bWVudCAobGlzdCBpdGVyYXRvcikgb2YKKyAgICB0aGUgcmVkdWNlIHByb3RvY29sLgogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVtcz1Ob25lKToKICAgICAgICAgc2VsZi5pdGVtcyA9IGl0ZW1zIGlmIGl0ZW1zIGlzIG5vdCBOb25lIGVsc2UgW10KQEAgLTE0NTgsOCArMTgxNiw4IEBACiAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpLCAoKSwgTm9uZSwgaXRlcihzZWxmLml0ZW1zKSwgTm9uZQogCiBjbGFzcyBSRVhfc2V2ZW4ob2JqZWN0KToKLSAgICAiIiJUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY2hlY2sgdGhlIDV0aCBhcmd1bWVudCAoZGljdCBpdGVyYXRvcikgb2YgdGhlIHJlZHVjZQotICAgIHByb3RvY29sLgorICAgICIiIlRoaXMgY2xhc3MgaXMgdXNlZCB0byBjaGVjayB0aGUgNXRoIGFyZ3VtZW50IChkaWN0IGl0ZXJhdG9yKSBvZgorICAgIHRoZSByZWR1Y2UgcHJvdG9jb2wuCiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhYmxlPU5vbmUpOgogICAgICAgICBzZWxmLnRhYmxlID0gdGFibGUgaWYgdGFibGUgaXMgbm90IE5vbmUgZWxzZSB7fQpAQCAtMTQ5NywxMCArMTg1NSwxNiBAQAogY2xhc3MgTXlEaWN0KGRpY3QpOgogICAgIHNhbXBsZSA9IHsiYSI6IDEsICJiIjogMn0KIAorY2xhc3MgTXlTZXQoc2V0KToKKyAgICBzYW1wbGUgPSB7ImEiLCAiYiJ9CisKK2NsYXNzIE15RnJvemVuU2V0KGZyb3plbnNldCk6CisgICAgc2FtcGxlID0gZnJvemVuc2V0KHsiYSIsICJiIn0pCisKIG15Y2xhc3NlcyA9IFtNeUludCwgTXlGbG9hdCwKICAgICAgICAgICAgICBNeUNvbXBsZXgsCiAgICAgICAgICAgICAgTXlTdHIsIE15VW5pY29kZSwKLSAgICAgICAgICAgICBNeVR1cGxlLCBNeUxpc3QsIE15RGljdF0KKyAgICAgICAgICAgICBNeVR1cGxlLCBNeUxpc3QsIE15RGljdCwgTXlTZXQsIE15RnJvemVuU2V0XQogCiAKIGNsYXNzIFNsb3RMaXN0KE15TGlzdCk6CkBAIC0xNTEwLDYgKzE4NzQsOCBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiLCBjKToKICAgICAgICAgIyByYWlzZSBhbiBlcnJvciwgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgY2FsbGVkCiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiU2ltcGxlTmV3T2JqLl9faW5pdF9fKCkgZGlkbid0IGV4cGVjdCB0byBnZXQgY2FsbGVkIikKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KIAogY2xhc3MgQmFkR2V0YXR0cjoKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwga2V5KToKQEAgLTE1NDYsNyArMTkxMiw3IEBACiAKICAgICBkZWYgdGVzdF9oaWdoZXN0X3Byb3RvY29sKHNlbGYpOgogICAgICAgICAjIE9mIGNvdXJzZSB0aGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgd2hlbiBISUdIRVNUX1BST1RPQ09MIGNoYW5nZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wsIDQpCiAKICAgICBkZWYgdGVzdF9jYWxsYXBpKHNlbGYpOgogICAgICAgICBmID0gaW8uQnl0ZXNJTygpCkBAIC0xNzMxLDIyICsyMDk3LDIzIEBACiAKICAgICBkZWYgX2NoZWNrX211bHRpcGxlX3VucGlja2xpbmdzKHNlbGYsIGlvY2xhc3MpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgZGF0YTEgPSBbKHgsIHN0cih4KSkgZm9yIHggaW4gcmFuZ2UoMjAwMCldICsgW2IiYWJjZGUiLCBsZW5dCi0gICAgICAgICAgICBmID0gaW9jbGFzcygpCi0gICAgICAgICAgICBwaWNrbGVyID0gc2VsZi5waWNrbGVyX2NsYXNzKGYsIHByb3RvY29sPXByb3RvKQotICAgICAgICAgICAgcGlja2xlci5kdW1wKGRhdGExKQotICAgICAgICAgICAgcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIGRhdGExID0gWyh4LCBzdHIoeCkpIGZvciB4IGluIHJhbmdlKDIwMDApXSArIFtiImFiY2RlIiwgbGVuXQorICAgICAgICAgICAgICAgIGYgPSBpb2NsYXNzKCkKKyAgICAgICAgICAgICAgICBwaWNrbGVyID0gc2VsZi5waWNrbGVyX2NsYXNzKGYsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhMSkKKyAgICAgICAgICAgICAgICBwaWNrbGVkID0gZi5nZXR2YWx1ZSgpCiAKLSAgICAgICAgICAgIE4gPSA1Ci0gICAgICAgICAgICBmID0gaW9jbGFzcyhwaWNrbGVkICogTikKLSAgICAgICAgICAgIHVucGlja2xlciA9IHNlbGYudW5waWNrbGVyX2NsYXNzKGYpCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZShOKToKLSAgICAgICAgICAgICAgICBpZiBmLnNlZWthYmxlKCk6Ci0gICAgICAgICAgICAgICAgICAgIHBvcyA9IGYudGVsbCgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZXIubG9hZCgpLCBkYXRhMSkKLSAgICAgICAgICAgICAgICBpZiBmLnNlZWthYmxlKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHBvcyArIGxlbihwaWNrbGVkKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCB1bnBpY2tsZXIubG9hZCkKKyAgICAgICAgICAgICAgICBOID0gNQorICAgICAgICAgICAgICAgIGYgPSBpb2NsYXNzKHBpY2tsZWQgKiBOKQorICAgICAgICAgICAgICAgIHVucGlja2xlciA9IHNlbGYudW5waWNrbGVyX2NsYXNzKGYpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTik6CisgICAgICAgICAgICAgICAgICAgIGlmIGYuc2Vla2FibGUoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGYudGVsbCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVyLmxvYWQoKSwgZGF0YTEpCisgICAgICAgICAgICAgICAgICAgIGlmIGYuc2Vla2FibGUoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHBvcyArIGxlbihwaWNrbGVkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgdW5waWNrbGVyLmxvYWQpCiAKICAgICBkZWYgdGVzdF9tdWx0aXBsZV91bnBpY2tsaW5nc19zZWVrYWJsZShzZWxmKToKICAgICAgICAgc2VsZi5fY2hlY2tfbXVsdGlwbGVfdW5waWNrbGluZ3MoaW8uQnl0ZXNJTykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3B5Y2FjZXJ0LnBlbSBiL0xpYi90ZXN0L3B5Y2FjZXJ0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWIxZjNlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvcHljYWNlcnQucGVtCkBAIC0wLDAgKzEsNzggQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMTI3MjMzNDI2MTI3MjE0NDMyODAgKDB4YjA5MjY0YjFmMmRhMjFkMCkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBKYW4gIDQgMTk6NDc6MDcgMjAxMyBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEphbiAgMiAxOTo0NzowNyAyMDIzIEdNVAorICAgICAgICBTdWJqZWN0OiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6ZTc6ZGU6ZTk6ZTM6MGM6OWY6MDA6YjY6YTE6ZmQ6MmI6NWI6OTY6ZDI6CisgICAgICAgICAgICAgICAgICAgIDZmOmNjOmUwOmJlOjg2OmI5OjIwOjVlOmVjOjAzOjdhOjU1OmFiOmVhOmE0OgorICAgICAgICAgICAgICAgICAgICBlOTpmOTo0OTo4NTpkMjo2NjpkNTplZDpjNzo3YTplYTo1Njo4ZToyZDo4ZjoKKyAgICAgICAgICAgICAgICAgICAgZTc6NDI6ZTI6NjI6Mjg6YTk6OWY6ZDY6MWI6OGU6ZWI6YjU6YjQ6OWM6OWY6CisgICAgICAgICAgICAgICAgICAgIDE0OmFiOmRmOmU2Ojk0OjhiOjc2OjFkOjNlOjZkOjI0OjYxOmVkOjBjOmJmOgorICAgICAgICAgICAgICAgICAgICAwMDo4YTo2MTowYzpkZjo1YzpjODozNjo3MzoxNjowMDpjZDo0NzpiYTo2ZDoKKyAgICAgICAgICAgICAgICAgICAgYTQ6YTQ6NzQ6ODg6ODM6MjM6MGE6MTk6ZmM6MDk6YTc6M2M6NGE6NGI6ZDM6CisgICAgICAgICAgICAgICAgICAgIGU3OjFkOjJkOmU0OmVhOjRjOjU0OjIxOmYzOjI2OmRiOjg5OjM3OjE4OmQ0OgorICAgICAgICAgICAgICAgICAgICAwMjpiYjo0MDozMjo1ZjphNDpmZjoyZDoxYzpmNzpkNDpiYjplYzo4ZTpjZjoKKyAgICAgICAgICAgICAgICAgICAgNWM6ODI6YWM6ZTY6N2M6MDg6NmM6NDg6ODU6NjE6MDc6N2Y6MjU6ZTA6NWM6CisgICAgICAgICAgICAgICAgICAgIGUwOmJjOjM0OjVmOmUwOmI5OjA0OjQ3Ojc1OmM4OjQ3OjBiOjhkOmJjOmQ2OgorICAgICAgICAgICAgICAgICAgICBjODo2ODo1ZjozMzo4Mzo2MjpkMjoyMDo0NDozNTpiMTphZDo4MToxYTo4YToKKyAgICAgICAgICAgICAgICAgICAgY2Q6YmM6MzU6YjA6NWM6OGI6NDc6ZDY6MTg6ZTk6OWM6MTg6OTc6Y2M6MDE6CisgICAgICAgICAgICAgICAgICAgIDNjOjI5OmNjOmU4OjFlOmU0OmU0OmMxOmI4OmRlOmU3OmMyOjExOjE4Ojg3OgorICAgICAgICAgICAgICAgICAgICA1YTo5MzozNDpkODphNjoyNTpmNzoxNDo3MTplYjplNDoyMTphMjpkMjowZjoKKyAgICAgICAgICAgICAgICAgICAgMmU6MmU6ZDQ6NjI6MDA6MzU6ZDM6ZDY6ZWY6NWM6NjA6NGI6NGM6YTk6MTQ6CisgICAgICAgICAgICAgICAgICAgIGUyOmRkOjE1OjU4OjQ2OjM3OjMzOjI2OmI3OmU3OjJlOjVkOmVkOjQyOmU0OgorICAgICAgICAgICAgICAgICAgICBjNTo0ZAorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgQkM6REQ6NjI6RDk6NzY6REE6MUI6RDI6NTQ6NkI6Q0Y6RTA6NjY6OUI6MUU6MUU6N0I6NTY6MEM6MEIKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkJDOkREOjYyOkQ5Ojc2OkRBOjFCOkQyOjU0OjZCOkNGOkUwOjY2OjlCOjFFOjFFOjdCOjU2OjBDOjBCCisKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICAgN2Q6MGE6ZjU6Y2I6OGQ6ZDM6NWQ6YmQ6OTk6OGU6Zjg6MmI6MGY6YmE6ZWI6YzI6ZDk6YTY6CisgICAgICAgICAyNzo0ZjoyZTo3YjoyZjowZTo2NDpkODoxYzozNTo1MDo0ZTplZTpmYzo5MDpiOTo4ZDo2ZDoKKyAgICAgICAgIGE4OmM1OmM2OjA2OmIwOmFmOmYzOjJkOmJmOjNiOmI4OjQyOjA3OmRkOjE4OjdkOjZkOjk1OgorICAgICAgICAgNTQ6NTc6ODU6MTg6NjA6NDc6MmY6ZWI6Nzg6MWI6Zjk6ZTg6MTc6ZmQ6NWE6MGQ6ODc6MTc6CisgICAgICAgICAyODphYzo0Yzo2YTplNjpiYzoyOTpmNDpmNDo1NTo3MDoyOTo0MjpkZTo4NTplYTphYjo2YzoKKyAgICAgICAgIDIzOjA2OjY0OjMwOjc1OjAyOjhlOjUzOmJjOjVlOjAxOjMzOjM3OmNjOjFlOmNkOmI4OmE0OgorICAgICAgICAgZmQ6Y2E6ZTQ6NWY6NjU6M2I6ODM6MWM6ODY6ZjE6NTU6MDI6YTA6M2E6OGY6ZGI6OTE6Yjc6CisgICAgICAgICA0MDoxNDpiNDplNzo4ZDpkMjplZTo3MzpiYTplMzplNTozNDoyZDpiYzo5NDo2Zjo0ZToyNDoKKyAgICAgICAgIDA2OmY3OjVmOjhiOjBlOmE3OjhlOjZiOmRlOjVlOjc1OmY0OjMyOjlhOjUwOmIxOjQ0OjMzOgorICAgICAgICAgOWE6ZDA6MDU6ZTI6Nzg6ODI6ZmY6ZGI6ZGE6OGE6NjM6ZWI6YTk6ZGQ6ZDE6YmY6YTA6NjE6CisgICAgICAgICBhZDplMzo5ZTo4YToyNDo1ZDo2MjowZTplNzo0Yzo5MTo3ZjplZjpkZjozNDozNjozYjoyZjoKKyAgICAgICAgIDVkOmY1Ojg0OmIyOjJmOmM0OjZkOjkzOjk2OjFhOjZmOjMwOjI4OmYxOmRhOjEyOjlhOjY0OgorICAgICAgICAgYjQ6NDA6MzM6MWQ6YmQ6ZGU6MmI6NTM6YTg6ZWE6YmU6ZDY6YmM6NGU6OTY6ZjU6NDQ6ZmI6CisgICAgICAgICAzMjoxODphZTpkNToxZjpmNjo2OTphZjpiNjo0ZTo3YjoxZDo1ODplYzozYjphOTo1MzphMzoKKyAgICAgICAgIDVlOjU4OmM4OjllCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURiVENDQWxXZ0F3SUJBZ0lKQUxDU1pMSHkyaUhRTUEwR0NTcUdTSWIzRFFFQkJRVUFNRTB4Q3pBSkJnTlYKK0JBWVRBbGhaTVNZd0pBWURWUVFLREIxUWVYUm9iMjRnVTI5bWRIZGhjbVVnUm05MWJtUmhkR2x2YmlCRFFURVcKK01CUUdBMVVFQXd3TmIzVnlMV05oTFhObGNuWmxjakFlRncweE16QXhNRFF4T1RRM01EZGFGdzB5TXpBeE1ESXgKK09UUTNNRGRhTUUweEN6QUpCZ05WQkFZVEFsaFpNU1l3SkFZRFZRUUtEQjFRZVhSb2IyNGdVMjltZEhkaGNtVWcKK1JtOTFibVJoZEdsdmJpQkRRVEVXTUJRR0ExVUVBd3dOYjNWeUxXTmhMWE5sY25abGNqQ0NBU0l3RFFZSktvWkkKK2h2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBT2ZlNmVNTW53QzJvZjByVzViU2I4emd2b2E1SUY3c0EzcFYKK3ErcWs2ZmxKaGRKbTFlM0hldXBXamkyUDUwTGlZaWlwbjlZYmp1dTF0SnlmRkt2ZjVwU0xkaDArYlNSaDdReS8KK0FJcGhETjljeURaekZnRE5SN3B0cEtSMGlJTWpDaG44Q2FjOFNrdlQ1eDB0NU9wTVZDSHpKdHVKTnhqVUFydEEKK01sK2sveTBjOTlTNzdJN1BYSUtzNW53SWJFaUZZUWQvSmVCYzRMdzBYK0M1QkVkMXlFY0xqYnpXeUdoZk00TmkKKzBpQkVOYkd0Z1JxS3pidzFzRnlMUjlZWTZad1lsOHdCUENuTTZCN2s1TUc0M3VmQ0VSaUhXcE0wMktZbDl4UngKKzYrUWhvdElQTGk3VVlnQTEwOWJ2WEdCTFRLa1U0dDBWV0VZM015YTM1eTVkN1VMa3hVMENBd0VBQWFOUU1FNHcKK0hRWURWUjBPQkJZRUZMemRZdGwyMmh2U1ZHdlA0R2FiSGg1N1Znd0xNQjhHQTFVZEl3UVlNQmFBRkx6ZFl0bDIKKzJodlNWR3ZQNEdhYkhoNTdWZ3dMTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUIKK0FIMEs5Y3VOMDEyOW1ZNzRLdys2NjhMWnBpZFBMbnN2RG1UWUhEVlFUdTc4a0xtTmJhakZ4Z2F3ci9NdHZ6dTQKK1FnZmRHSDF0bFZSWGhSaGdSeS9yZUJ2NTZCZjlXZzJIRnlpc1RHcm12Q24wOUZWd0tVTGVoZXFyYkNNR1pEQjEKK0FvNVR2RjRCTXpmTUhzMjRwUDNLNUY5bE80TWNodkZWQXFBNmo5dVJ0MEFVdE9lTjB1NXp1dVBsTkMyOGxHOU8KK0pBYjNYNHNPcDQ1cjNsNTE5REthVUxGRU01clFCZUo0Z3YvYjJvcGo2Nm5kMGIrZ1lhM2pub29rWFdJTzUweVIKK2YrL2ZORFk3TDEzMWhMSXZ4RzJUbGhwdk1DangyaEthWkxSQU14MjkzaXRUcU9xKzFyeE9sdlZFK3pJWXJ0VWYKKzltbXZ0azU3SFZqc082bFRvMTVZeUo0PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcHljYWtleS5wZW0gYi9MaWIvdGVzdC9weWNha2V5LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzZlZmZlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvcHljYWtleS5wZW0KQEAgLTAsMCArMSwyOCBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlFdmdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0JLZ3dnZ1NrQWdFQUFvSUJBUURuM3VuakRKOEF0cUg5CitLMXVXMG0vTTRMNkd1U0JlN0FONlZhdnFwT241U1lYU1p0WHR4M3JxVm80dGorZEM0bUlvcVovV0c0N3J0YlNjCitueFNyMythVWkzWWRQbTBrWWUwTXZ3Q0tZUXpmWE1nMmN4WUF6VWU2YmFTa2RJaURJd29aL0FtblBFcEwwK2NkCitMZVRxVEZRaDh5YmJpVGNZMUFLN1FESmZwUDh0SFBmVXUreU96MXlDck9aOENHeEloV0VIZnlYZ1hPQzhORi9nCit1UVJIZGNoSEM0Mjgxc2hvWHpPRFl0SWdSRFd4cllFYWlzMjhOYkJjaTBmV0dPbWNHSmZNQVR3cHpPZ2U1T1RCCit1Tjdud2hFWWgxcVROTmltSmZjVWNldmtJYUxTRHk0dTFHSUFOZFBXNzF4Z1MweXBGT0xkRlZoR056TW10K2N1CitYZTFDNU1WTkFnTUJBQUVDZ2dFQkFKUE03UXVVclBuNGNMTi9Zc2QxNWx3VFduOW9IREZGZ2tZRnZDczY2Z1hFCitqdS82S3gyQmpXRTR3VEpieTA5QUhNL01xQjBEdmd1VDdNZjFRMmozdFBRMUhab3dnOE93UkRsZXV3cDZLSWxzCitqQmJoTDBKZGwvNUhDNjdrdFd2Wjl3TnZPL3dGRzFyUWZUNkZWYWpmOUxVYldFYVNaYk9HMlNMaEhmc0hvcnp1Cit4alRKYUkzYlEvMCs3OUIxZXh3azVydXdoekZSZC9YcFk4aGxzN0QvUmZQSXVIRGxCZ2hrVzNONTlLRldyZjVoCis2Yk5FaDJUSG0wK0l5R2NHcXMwRkQrUUNPWHl2c2p3U1Vzd3FycjJjdExSRU9lRGNkNVJlVWpTeFlnamNKUnJtCitKN2NlSVkvK3V3REp4dy9PbG5tQnZGNnBRTWtLd1lXMmdGenR1K2cydDRVQ2dZRUEvOXlvMDFFeHo0Y3J4WHN5Cit0QWxuREpNKytuWmNtMDdydEZqVEtIVWZLWS9jQ2dOVGE4dWRNMHN2bmZ3bGlkL2RwZ0xzSTM4Z3gwNEhIQzFpCitFWjRhY3orVG9JV2VkTHhNMG5xNzMvL3hlUldFYXpPdkN6MW1NVFphTWxkYWhUV0F5ek44cVZLMkIvNjI1WXk0Cit3TllXeXdlQkJ3RUI4TXphQ3M3M3Nwa3NYT3NDZ1lFQTUvN3d2aGlvZllHRkFmTXVBTmVKSXdETDJPdEJub092CittVk5mQ21pM0dDMzhmend5aTVacHNrV0RpUzJ3b0orTFFmczlRdTRFY1piVUZMZDdnYmVPdmI1Z21GVXRZb3BlCitMaXRVVUt1bklSMThNa1ErbVFEQnBRUFFQaGs0UUpQNXJlQ2JXa3JmVHU3YjVvL2lTNDFzNmZCVEZtdXpoTGNUCitDNzF2RmRDeWVLY0NnWUFpQ0NxWWVPdEVMRG1CT2VMRG1hQ1FScUdRMU45NmRPUGJDQm1GL3hZWEJDQ0RZRy9mCitIYVVhSm56OTZZVGdzdHNiY3JZUC9wL1FncXRsYncvbFFmOUlwd011emJjRzFlanQ4Zzg5T3lEV055dDJ5dGdVCitpYVVuRkpDb3MzL0J5aDBJYWgvQnNkT3VlbzIvT0psMlpNT0JXODBvcmxTZ3Y4NmNzMnkwMzdUTDR3S0JnUURtCitPT3lXK01sYm93aG5JdmZvQmZ3bExFa2VmbmVqNG5LRDZXUkxaQmN1ZTVReWYzNTVYMDZNaHNjOWZvWGxIKzZHCitEOWgvYnN3aUhOZGhwNk44MnJkZ1BHaUhReC9DeGlVb0UvK2IvbnZnTk81bXc2cUxFMkVYYkcxZThwQU1KY3lFCitiSHcrWWthd2dnRGZFTEkwMzZmUmo1Z2tpOFNlVXo4blMxbk5nRWxieVFLQmdDUkRYOUpoK013U0x1NFFCV2R0CisvZmkrbHYzSzZrdW4vZkk3RU9WMXZDVi9qODcxdElDdTdwdTVCck9MeEFIcW9WZlU5QVVYMjk5LzJLakNiNXB2Citram9naVVLNnFXQ1dCbGZ1cUROV0dDb1VHdDFyaHpuVXZhMG5OalNNeTVyaW5CaGhqcFJPWkMycHc0OGxPbHVQCitVdXZYc2FQcGg3R1RxUHV5NEthYjEyWUMKKy0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5IGIvTGliL3Rlc3QvcmVncnRlc3QucHkKaW5kZXggY2E0ZDgyMC4uMTdjYmNjYiAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvcmVncnRlc3QucHkKKysrIGIvTGliL3Rlc3QvcmVncnRlc3QucHkKQEAgLTEsMTEgKzEsMTggQEAKICMhIC91c3IvYmluL2VudiBweXRob24zCiAKICIiIgotVXNhZ2U6CitTY3JpcHQgdG8gcnVuIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzLgogCitSdW4gdGhpcyBzY3JpcHQgd2l0aCAtaCBvciAtLWhlbHAgZm9yIGRvY3VtZW50YXRpb24uCisiIiIKKworVVNBR0UgPSAiIiJcCiBweXRob24gLW0gdGVzdCBbb3B0aW9uc10gW3Rlc3RfbmFtZTEgW3Rlc3RfbmFtZTIgLi4uXV0KIHB5dGhvbiBwYXRoL3RvL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5IFtvcHRpb25zXSBbdGVzdF9uYW1lMSBbdGVzdF9uYW1lMiAuLi5dXQorIiIiCiAKK0RFU0NSSVBUSU9OID0gIiIiXAorUnVuIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzLgogCiBJZiBubyBhcmd1bWVudHMgb3Igb3B0aW9ucyBhcmUgcHJvdmlkZWQsIGZpbmRzIGFsbCBmaWxlcyBtYXRjaGluZwogdGhlIHBhdHRlcm4gInRlc3RfKiIgaW4gdGhlIExpYi90ZXN0IHN1YmRpcmVjdG9yeSBhbmQgcnVucwpAQCAtMTUsNjMgKzIyLDEwIEBACiBjb21tYW5kIGxpbmU6CiAKIHB5dGhvbiAtRSAtV2QgLW0gdGVzdCBbb3B0aW9uc10gW3Rlc3RfbmFtZTEgLi4uXQorIiIiCiAKLQotT3B0aW9uczoKLQotLWgvLS1oZWxwICAgICAgIC0tIHByaW50IHRoaXMgdGV4dCBhbmQgZXhpdAotLS10aW1lb3V0IFRJTUVPVVQKLSAgICAgICAgICAgICAgICAtLSBkdW1wIHRoZSB0cmFjZWJhY2sgYW5kIGV4aXQgaWYgYSB0ZXN0IHRha2VzIG1vcmUKLSAgICAgICAgICAgICAgICAgICB0aGFuIFRJTUVPVVQgc2Vjb25kczsgZGlzYWJsZWQgaWYgVElNRU9VVCBpcyBuZWdhdGl2ZQotICAgICAgICAgICAgICAgICAgIG9yIGVxdWFscyB0byB6ZXJvCi0tLXdhaXQgICAgICAgICAgLS0gd2FpdCBmb3IgdXNlciBpbnB1dCwgZS5nLiwgYWxsb3cgYSBkZWJ1Z2dlciB0byBiZSBhdHRhY2hlZAotCi1WZXJib3NpdHkKLQotLXYvLS12ZXJib3NlICAgIC0tIHJ1biB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUgd2l0aCBvdXRwdXQgdG8gc3Rkb3V0Ci0tdy8tLXZlcmJvc2UyICAgLS0gcmUtcnVuIGZhaWxlZCB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUKLS1XLy0tdmVyYm9zZTMgICAtLSBkaXNwbGF5IHRlc3Qgb3V0cHV0IG9uIGZhaWx1cmUKLS1kLy0tZGVidWcgICAgICAtLSBwcmludCB0cmFjZWJhY2sgZm9yIGZhaWxlZCB0ZXN0cwotLXEvLS1xdWlldCAgICAgIC0tIG5vIG91dHB1dCB1bmxlc3Mgb25lIG9yIG1vcmUgdGVzdHMgZmFpbAotLW8vLS1zbG93ICAgICAgIC0tIHByaW50IHRoZSBzbG93ZXN0IDEwIHRlc3RzCi0gICAtLWhlYWRlciAgICAgLS0gcHJpbnQgaGVhZGVyIHdpdGggaW50ZXJwcmV0ZXIgaW5mbwotCi1TZWxlY3RpbmcgdGVzdHMKLQotLXIvLS1yYW5kb21pemUgIC0tIHJhbmRvbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBvcmRlciAoc2VlIGJlbG93KQotICAgLS1yYW5kc2VlZCAgIC0tIHBhc3MgYSByYW5kb20gc2VlZCB0byByZXByb2R1Y2UgYSBwcmV2aW91cyByYW5kb20gcnVuCi0tZi8tLWZyb21maWxlICAgLS0gcmVhZCBuYW1lcyBvZiB0ZXN0cyB0byBydW4gZnJvbSBhIGZpbGUgKHNlZSBiZWxvdykKLS14Ly0tZXhjbHVkZSAgICAtLSBhcmd1bWVudHMgYXJlIHRlc3RzIHRvICpleGNsdWRlKgotLXMvLS1zaW5nbGUgICAgIC0tIHNpbmdsZSBzdGVwIHRocm91Z2ggYSBzZXQgb2YgdGVzdHMgKHNlZSBiZWxvdykKLS1tLy0tbWF0Y2ggUEFUICAtLSBtYXRjaCB0ZXN0IGNhc2VzIGFuZCBtZXRob2RzIHdpdGggZ2xvYiBwYXR0ZXJuIFBBVAotLUcvLS1mYWlsZmFzdCAgIC0tIGZhaWwgYXMgc29vbiBhcyBhIHRlc3QgZmFpbHMgKG9ubHkgd2l0aCAtdiBvciAtVykKLS11Ly0tdXNlIFJFUzEsUkVTMiwuLi4KLSAgICAgICAgICAgICAgICAtLSBzcGVjaWZ5IHdoaWNoIHNwZWNpYWwgcmVzb3VyY2UgaW50ZW5zaXZlIHRlc3RzIHRvIHJ1bgotLU0vLS1tZW1saW1pdCBMSU1JVAotICAgICAgICAgICAgICAgIC0tIHJ1biB2ZXJ5IGxhcmdlIG1lbW9yeS1jb25zdW1pbmcgdGVzdHMKLSAgIC0tdGVzdGRpciBESVIKLSAgICAgICAgICAgICAgICAtLSBleGVjdXRlIHRlc3QgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgKGluc3RlYWQKLSAgICAgICAgICAgICAgICAgICBvZiB0aGUgUHl0aG9uIHN0ZGxpYiB0ZXN0IHN1aXRlKQotCi1TcGVjaWFsIHJ1bnMKLQotLWwvLS1maW5kbGVha3MgIC0tIGlmIEdDIGlzIGF2YWlsYWJsZSBkZXRlY3QgdGVzdHMgdGhhdCBsZWFrIG1lbW9yeQotLUwvLS1ydW5sZWFrcyAgIC0tIHJ1biB0aGUgbGVha3MoMSkgY29tbWFuZCBqdXN0IGJlZm9yZSBleGl0Ci0tUi8tLWh1bnRybGVha3MgUlVOQ09VTlRTCi0gICAgICAgICAgICAgICAgLS0gc2VhcmNoIGZvciByZWZlcmVuY2UgbGVha3MgKG5lZWRzIGRlYnVnIGJ1aWxkLCB2LiBzbG93KQotLWovLS1tdWx0aXByb2Nlc3MgUFJPQ0VTU0VTCi0gICAgICAgICAgICAgICAgLS0gcnVuIFBST0NFU1NFUyBwcm9jZXNzZXMgYXQgb25jZQotLVQvLS1jb3ZlcmFnZSAgIC0tIHR1cm4gb24gY29kZSBjb3ZlcmFnZSB0cmFjaW5nIHVzaW5nIHRoZSB0cmFjZSBtb2R1bGUKLS1ELy0tY292ZXJkaXIgRElSRUNUT1JZCi0gICAgICAgICAgICAgICAgLS0gRGlyZWN0b3J5IHdoZXJlIGNvdmVyYWdlIGZpbGVzIGFyZSBwdXQKLS1OLy0tbm9jb3ZlcmRpciAtLSBQdXQgY292ZXJhZ2UgZmlsZXMgYWxvbmdzaWRlIG1vZHVsZXMKLS10Ly0tdGhyZXNob2xkIFRIUkVTSE9MRAotICAgICAgICAgICAgICAgIC0tIGNhbGwgZ2Muc2V0X3RocmVzaG9sZChUSFJFU0hPTEQpCi0tbi8tLW5vd2luZG93cyAgLS0gc3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBib3hlcyBvbiBXaW5kb3dzCi0tRi8tLWZvcmV2ZXIgICAgLS0gcnVuIHRoZSBzcGVjaWZpZWQgdGVzdHMgaW4gYSBsb29wLCB1bnRpbCBhbiBlcnJvciBoYXBwZW5zCi0KLQotQWRkaXRpb25hbCBPcHRpb24gRGV0YWlsczoKK0VQSUxPRyA9ICIiIlwKK0FkZGl0aW9uYWwgb3B0aW9uIGRldGFpbHM6CiAKIC1yIHJhbmRvbWl6ZXMgdGVzdCBleGVjdXRpb24gb3JkZXIuIFlvdSBjYW4gdXNlIC0tcmFuZHNlZWQ9aW50IHRvIHByb3ZpZGUgYQogaW50IHNlZWQgdmFsdWUgZm9yIHRoZSByYW5kb21pemVyOyB0aGlzIGlzIHVzZWZ1bCBmb3IgcmVwcm9kdWNpbmcgdHJvdWJsZXNvbWUKQEAgLTE2OCwxMSArMTIyLDEyIEBACiAjIFdlIGltcG9ydCBpbXBvcnRsaWIgKkFTQVAqIGluIG9yZGVyIHRvIHRlc3QgIzE1Mzg2CiBpbXBvcnQgaW1wb3J0bGliCiAKK2ltcG9ydCBhcmdwYXJzZQogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgZmF1bHRoYW5kbGVyCi1pbXBvcnQgZ2V0b3B0CiBpbXBvcnQgaW8KIGltcG9ydCBqc29uCitpbXBvcnQgbG9jYWxlCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcGxhdGZvcm0KQEAgLTE5NCw3ICsxNDksNyBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIHRyeToKLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MKKyAgICBpbXBvcnQgX211bHRpcHJvY2Vzc2luZywgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBtdWx0aXByb2Nlc3NpbmcgPSBOb25lCiAKQEAgLTI0NiwyMCArMjAxLDI2MiBAQAogUkVTT1VSQ0VfTkFNRVMgPSAoJ2F1ZGlvJywgJ2N1cnNlcycsICdsYXJnZWZpbGUnLCAnbmV0d29yaycsCiAgICAgICAgICAgICAgICAgICAnZGVjaW1hbCcsICdjcHUnLCAnc3VicHJvY2VzcycsICd1cmxmZXRjaCcsICdndWknKQogCi1URU1QRElSID0gb3MucGF0aC5hYnNwYXRoKHRlbXBmaWxlLmdldHRlbXBkaXIoKSkKKyMgV2hlbiB0ZXN0cyBhcmUgcnVuIGZyb20gdGhlIFB5dGhvbiBidWlsZCBkaXJlY3RvcnksIGl0IGlzIGJlc3QgcHJhY3RpY2UKKyMgdG8ga2VlcCB0aGUgdGVzdCBmaWxlcyBpbiBhIHN1YmZvbGRlci4gIFRoaXMgZWFzZXMgdGhlIGNsZWFudXAgb2YgbGVmdG92ZXIKKyMgZmlsZXMgdXNpbmcgdGhlICJtYWtlIGRpc3RjbGVhbiIgY29tbWFuZC4KK2lmIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKToKKyAgICBURU1QRElSID0gb3MucGF0aC5qb2luKHN5c2NvbmZpZy5nZXRfY29uZmlnX3Zhcignc3JjZGlyJyksICdidWlsZCcpCitlbHNlOgorICAgIFRFTVBESVIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKK1RFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgoVEVNUERJUikKIAotZGVmIHVzYWdlKG1zZyk6Ci0gICAgcHJpbnQobXNnLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgcHJpbnQoIlVzZSAtLWhlbHAgZm9yIHVzYWdlIiwgZmlsZT1zeXMuc3RkZXJyKQotICAgIHN5cy5leGl0KDIpCitjbGFzcyBfQXJnUGFyc2VyKGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKToKIAorICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc3VwZXIoKS5lcnJvcihtZXNzYWdlICsgIlxuUGFzcyAtaCBvciAtLWhlbHAgZm9yIGNvbXBsZXRlIGhlbHAuIikKIAotZGVmIG1haW4odGVzdHM9Tm9uZSwgdGVzdGRpcj1Ob25lLCB2ZXJib3NlPTAsIHF1aWV0PUZhbHNlLAorZGVmIF9jcmVhdGVfcGFyc2VyKCk6CisgICAgIyBTZXQgcHJvZyB0byBwcmV2ZW50IHRoZSB1bmluZm9ybWF0aXZlICJfX21haW5fXy5weSIgZnJvbSBkaXNwbGF5aW5nIGluCisgICAgIyBlcnJvciBtZXNzYWdlcyB3aGVuIHVzaW5nICJweXRob24gLW0gdGVzdCAuLi4iLgorICAgIHBhcnNlciA9IF9BcmdQYXJzZXIocHJvZz0ncmVncnRlc3QucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2U9VVNBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1ERVNDUklQVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVwaWxvZz1FUElMT0csCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfaGVscD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIpCisKKyAgICAjIEFyZ3VtZW50cyB3aXRoIHRoaXMgY2xhdXNlIGFkZGVkIHRvIGl0cyBoZWxwIGFyZSBkZXNjcmliZWQgZnVydGhlciBpbgorICAgICMgdGhlIGVwaWxvZydzICJBZGRpdGlvbmFsIG9wdGlvbiBkZXRhaWxzIiBzZWN0aW9uLgorICAgIG1vcmVfZGV0YWlscyA9ICcgIFNlZSB0aGUgc2VjdGlvbiBhdCBib3R0b20gZm9yIG1vcmUgZGV0YWlscy4nCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ0dlbmVyYWwgb3B0aW9ucycpCisgICAgIyBXZSBhZGQgaGVscCBleHBsaWNpdGx5IHRvIGNvbnRyb2wgd2hhdCBhcmd1bWVudCBncm91cCBpdCByZW5kZXJzIHVuZGVyLgorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWgnLCAnLS1oZWxwJywgYWN0aW9uPSdoZWxwJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXRpbWVvdXQnLCBtZXRhdmFyPSdUSU1FT1VUJywgdHlwZT1mbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2R1bXAgdGhlIHRyYWNlYmFjayBhbmQgZXhpdCBpZiBhIHRlc3QgdGFrZXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9yZSB0aGFuIFRJTUVPVVQgc2Vjb25kczsgZGlzYWJsZWQgaWYgVElNRU9VVCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcyBuZWdhdGl2ZSBvciBlcXVhbHMgdG8gemVybycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXdhaXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd3YWl0IGZvciB1c2VyIGlucHV0LCBlLmcuLCBhbGxvdyBhIGRlYnVnZ2VyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gYmUgYXR0YWNoZWQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zbGF2ZWFyZ3MnLCBtZXRhdmFyPSdBUkdTJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1TJywgJy0tc3RhcnQnLCBtZXRhdmFyPSdTVEFSVCcsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3RoZSBuYW1lIG9mIHRoZSB0ZXN0IGF0IHdoaWNoIHRvIHN0YXJ0LicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnVmVyYm9zaXR5JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nY291bnQnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdGVzdHMgaW4gdmVyYm9zZSBtb2RlIHdpdGggb3V0cHV0IHRvIHN0ZG91dCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdycsICctLXZlcmJvc2UyJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncmUtcnVuIGZhaWxlZCB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLVcnLCAnLS12ZXJib3NlMycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2Rpc3BsYXkgdGVzdCBvdXRwdXQgb24gZmFpbHVyZScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nbm8gb3V0cHV0IHVubGVzcyBvbmUgb3IgbW9yZSB0ZXN0cyBmYWlsJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1vJywgJy0tc2xvdycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3ByaW50X3Nsb3cnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwcmludCB0aGUgc2xvd2VzdCAxMCB0ZXN0cycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWhlYWRlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3ByaW50IGhlYWRlciB3aXRoIGludGVycHJldGVyIGluZm8nKQorCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdTZWxlY3RpbmcgdGVzdHMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXInLCAnLS1yYW5kb21pemUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyYW5kb21pemUgdGVzdCBleGVjdXRpb24gb3JkZXIuJyArIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tcmFuZHNlZWQnLCBtZXRhdmFyPSdTRUVEJywKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ncmFuZG9tX3NlZWQnLCB0eXBlPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncGFzcyBhIHJhbmRvbSBzZWVkIHRvIHJlcHJvZHVjZSBhIHByZXZpb3VzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmFuZG9tIHJ1bicpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctZicsICctLWZyb21maWxlJywgbWV0YXZhcj0nRklMRScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3JlYWQgbmFtZXMgb2YgdGVzdHMgdG8gcnVuIGZyb20gYSBmaWxlLicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy14JywgJy0tZXhjbHVkZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2FyZ3VtZW50cyBhcmUgdGVzdHMgdG8gKmV4Y2x1ZGUqJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2luZ2xlJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2luZ2xlIHN0ZXAgdGhyb3VnaCBhIHNldCBvZiB0ZXN0cy4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbScsICctLW1hdGNoJywgbWV0YXZhcj0nUEFUJywKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nbWF0Y2hfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdtYXRjaCB0ZXN0IGNhc2VzIGFuZCBtZXRob2RzIHdpdGggZ2xvYiBwYXR0ZXJuIFBBVCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctRycsICctLWZhaWxmYXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZmFpbCBhcyBzb29uIGFzIGEgdGVzdCBmYWlscyAob25seSB3aXRoIC12IG9yIC1XKScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdScsICctLXVzZScsIG1ldGF2YXI9J1JFUzEsUkVTMiwuLi4nLAorICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J2FwcGVuZCcsIHR5cGU9cmVzb3VyY2VzX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NwZWNpZnkgd2hpY2ggc3BlY2lhbCByZXNvdXJjZSBpbnRlbnNpdmUgdGVzdHMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBydW4uJyArIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1NJywgJy0tbWVtbGltaXQnLCBtZXRhdmFyPSdMSU1JVCcsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biB2ZXJ5IGxhcmdlIG1lbW9yeS1jb25zdW1pbmcgdGVzdHMuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS10ZXN0ZGlyJywgbWV0YXZhcj0nRElSJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1yZWxhdGl2ZV9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZXhlY3V0ZSB0ZXN0IGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGluc3RlYWQgb2YgdGhlIFB5dGhvbiBzdGRsaWIgdGVzdCBzdWl0ZSknKQorCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdTcGVjaWFsIHJ1bnMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWwnLCAnLS1maW5kbGVha3MnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdpZiBHQyBpcyBhdmFpbGFibGUgZGV0ZWN0IHRlc3RzIHRoYXQgbGVhayBtZW1vcnknKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLUwnLCAnLS1ydW5sZWFrcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biB0aGUgbGVha3MoMSkgY29tbWFuZCBqdXN0IGJlZm9yZSBleGl0LicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1SJywgJy0taHVudHJsZWFrcycsIG1ldGF2YXI9J1JVTkNPVU5UUycsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9aHVudHJsZWFrcywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2VhcmNoIGZvciByZWZlcmVuY2UgbGVha3MgKG5lZWRzIGRlYnVnIGJ1aWxkLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Zlcnkgc2xvdykuJyArIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1qJywgJy0tbXVsdGlwcm9jZXNzJywgbWV0YXZhcj0nUFJPQ0VTU0VTJywKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ndXNlX21wJywgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biBQUk9DRVNTRVMgcHJvY2Vzc2VzIGF0IG9uY2UnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLVQnLCAnLS1jb3ZlcmFnZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3RyYWNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndHVybiBvbiBjb2RlIGNvdmVyYWdlIHRyYWNpbmcgdXNpbmcgdGhlIHRyYWNlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9kdWxlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1EJywgJy0tY292ZXJkaXInLCBtZXRhdmFyPSdESVInLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXJlbGF0aXZlX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXJlY3Rvcnkgd2hlcmUgY292ZXJhZ2UgZmlsZXMgYXJlIHB1dCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctTicsICctLW5vY292ZXJkaXInLAorICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9Tm9uZSwgZGVzdD0nY292ZXJkaXInLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwdXQgY292ZXJhZ2UgZmlsZXMgYWxvbmdzaWRlIG1vZHVsZXMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10aHJlc2hvbGQnLCBtZXRhdmFyPSdUSFJFU0hPTEQnLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nY2FsbCBnYy5zZXRfdGhyZXNob2xkKFRIUkVTSE9MRCknKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLW4nLCAnLS1ub3dpbmRvd3MnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGJveGVzIG9uIFdpbmRvd3MnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLUYnLCAnLS1mb3JldmVyJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHRoZSBzcGVjaWZpZWQgdGVzdHMgaW4gYSBsb29wLCB1bnRpbCBhbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yIGhhcHBlbnMnKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYXJncycsIG5hcmdzPWFyZ3BhcnNlLlJFTUFJTkRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisKKyAgICByZXR1cm4gcGFyc2VyCisKK2RlZiByZWxhdGl2ZV9maWxlbmFtZShzdHJpbmcpOgorICAgICMgQ1dEIGlzIHJlcGxhY2VkIHdpdGggYSB0ZW1wb3JhcnkgZGlyIGJlZm9yZSBjYWxsaW5nIG1haW4oKSwgc28gd2UKKyAgICAjIGpvaW4gaXQgd2l0aCB0aGUgc2F2ZWQgQ1dEIHNvIGl0IGVuZHMgdXAgd2hlcmUgdGhlIHVzZXIgZXhwZWN0cy4KKyAgICByZXR1cm4gb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIHN0cmluZykKKworZGVmIGh1bnRybGVha3Moc3RyaW5nKToKKyAgICBhcmdzID0gc3RyaW5nLnNwbGl0KCc6JykKKyAgICBpZiBsZW4oYXJncykgbm90IGluICgyLCAzKToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoCisgICAgICAgICAgICAnbmVlZHMgMiBvciAzIGNvbG9uLXNlcGFyYXRlZCBhcmd1bWVudHMnKQorICAgIG53YXJtdXAgPSBpbnQoYXJnc1swXSkgaWYgYXJnc1swXSBlbHNlIDUKKyAgICBudHJhY2tlZCA9IGludChhcmdzWzFdKSBpZiBhcmdzWzFdIGVsc2UgNAorICAgIGZuYW1lID0gYXJnc1syXSBpZiBsZW4oYXJncykgPiAyIGFuZCBhcmdzWzJdIGVsc2UgJ3JlZmxvZy50eHQnCisgICAgcmV0dXJuIG53YXJtdXAsIG50cmFja2VkLCBmbmFtZQorCitkZWYgcmVzb3VyY2VzX2xpc3Qoc3RyaW5nKToKKyAgICB1ID0gW3gubG93ZXIoKSBmb3IgeCBpbiBzdHJpbmcuc3BsaXQoJywnKV0KKyAgICBmb3IgciBpbiB1OgorICAgICAgICBpZiByID09ICdhbGwnIG9yIHIgPT0gJ25vbmUnOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgclswXSA9PSAnLSc6CisgICAgICAgICAgICByID0gclsxOl0KKyAgICAgICAgaWYgciBub3QgaW4gUkVTT1VSQ0VfTkFNRVM6CisgICAgICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcignaW52YWxpZCByZXNvdXJjZTogJyArIHIpCisgICAgcmV0dXJuIHUKKworZGVmIF9wYXJzZV9hcmdzKGFyZ3MsICoqa3dhcmdzKToKKyAgICAjIERlZmF1bHRzCisgICAgbnMgPSBhcmdwYXJzZS5OYW1lc3BhY2UodGVzdGRpcj1Ob25lLCB2ZXJib3NlPTAsIHF1aWV0PUZhbHNlLAogICAgICAgICAgZXhjbHVkZT1GYWxzZSwgc2luZ2xlPUZhbHNlLCByYW5kb21pemU9RmFsc2UsIGZyb21maWxlPU5vbmUsCiAgICAgICAgICBmaW5kbGVha3M9RmFsc2UsIHVzZV9yZXNvdXJjZXM9Tm9uZSwgdHJhY2U9RmFsc2UsIGNvdmVyZGlyPSdjb3ZlcmFnZScsCiAgICAgICAgICBydW5sZWFrcz1GYWxzZSwgaHVudHJsZWFrcz1GYWxzZSwgdmVyYm9zZTI9RmFsc2UsIHByaW50X3Nsb3c9RmFsc2UsCiAgICAgICAgICByYW5kb21fc2VlZD1Ob25lLCB1c2VfbXA9Tm9uZSwgdmVyYm9zZTM9RmFsc2UsIGZvcmV2ZXI9RmFsc2UsCi0gICAgICAgICBoZWFkZXI9RmFsc2UsIGZhaWxmYXN0PUZhbHNlLCBtYXRjaF90ZXN0cz1Ob25lKToKKyAgICAgICAgIGhlYWRlcj1GYWxzZSwgZmFpbGZhc3Q9RmFsc2UsIG1hdGNoX3Rlc3RzPU5vbmUpCisgICAgZm9yIGssIHYgaW4ga3dhcmdzLml0ZW1zKCk6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG5zLCBrKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXIgaXMgYW4gaW52YWxpZCBrZXl3b3JkIGFyZ3VtZW50ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9yIHRoaXMgZnVuY3Rpb24nICUgaykKKyAgICAgICAgc2V0YXR0cihucywgaywgdikKKyAgICBpZiBucy51c2VfcmVzb3VyY2VzIGlzIE5vbmU6CisgICAgICAgIG5zLnVzZV9yZXNvdXJjZXMgPSBbXQorCisgICAgcGFyc2VyID0gX2NyZWF0ZV9wYXJzZXIoKQorICAgIHBhcnNlci5wYXJzZV9hcmdzKGFyZ3M9YXJncywgbmFtZXNwYWNlPW5zKQorCisgICAgaWYgbnMuc2luZ2xlIGFuZCBucy5mcm9tZmlsZToKKyAgICAgICAgcGFyc2VyLmVycm9yKCItcyBhbmQgLWYgZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy51c2VfbXAgYW5kIG5zLnRyYWNlOgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1UIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIG5zLnVzZV9tcCBhbmQgbnMuZmluZGxlYWtzOgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1sIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIG5zLnVzZV9tcCBhbmQgbnMubWVtbGltaXQ6CisgICAgICAgIHBhcnNlci5lcnJvcigiLU0gYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgbnMuZmFpbGZhc3QgYW5kIG5vdCAobnMudmVyYm9zZSBvciBucy52ZXJib3NlMyk6CisgICAgICAgIHBhcnNlci5lcnJvcigiLUcvLS1mYWlsZmFzdCBuZWVkcyBlaXRoZXIgLXYgb3IgLVciKQorCisgICAgaWYgbnMucXVpZXQ6CisgICAgICAgIG5zLnZlcmJvc2UgPSAwCisgICAgaWYgbnMudGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgaGFzYXR0cihmYXVsdGhhbmRsZXIsICdkdW1wX3RyYWNlYmFja19sYXRlcicpOgorICAgICAgICAgICAgaWYgbnMudGltZW91dCA8PSAwOgorICAgICAgICAgICAgICAgIG5zLnRpbWVvdXQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiV2FybmluZzogVGhlIHRpbWVvdXQgb3B0aW9uIHJlcXVpcmVzICIKKyAgICAgICAgICAgICAgICAgICJmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIiKQorICAgICAgICAgICAgbnMudGltZW91dCA9IE5vbmUKKyAgICBpZiBucy51c2VfbXAgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIG5zLnVzZV9tcCA8PSAwOgorICAgICAgICAgICAgIyBVc2UgYWxsIGNvcmVzICsgZXh0cmFzIGZvciB0ZXN0cyB0aGF0IGxpa2UgdG8gc2xlZXAKKyAgICAgICAgICAgIG5zLnVzZV9tcCA9IDIgKyAob3MuY3B1X2NvdW50KCkgb3IgMSkKKyAgICAgICAgaWYgbnMudXNlX21wID09IDE6CisgICAgICAgICAgICBucy51c2VfbXAgPSBOb25lCisgICAgaWYgbnMudXNlOgorICAgICAgICBmb3IgYSBpbiBucy51c2U6CisgICAgICAgICAgICBmb3IgciBpbiBhOgorICAgICAgICAgICAgICAgIGlmIHIgPT0gJ2FsbCc6CisgICAgICAgICAgICAgICAgICAgIG5zLnVzZV9yZXNvdXJjZXNbOl0gPSBSRVNPVVJDRV9OQU1FUworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHIgPT0gJ25vbmUnOgorICAgICAgICAgICAgICAgICAgICBkZWwgbnMudXNlX3Jlc291cmNlc1s6XQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJlbW92ZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgclswXSA9PSAnLSc6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgciA9IHJbMTpdCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlOgorICAgICAgICAgICAgICAgICAgICBpZiByIGluIG5zLnVzZV9yZXNvdXJjZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBucy51c2VfcmVzb3VyY2VzLnJlbW92ZShyKQorICAgICAgICAgICAgICAgIGVsaWYgciBub3QgaW4gbnMudXNlX3Jlc291cmNlczoKKyAgICAgICAgICAgICAgICAgICAgbnMudXNlX3Jlc291cmNlcy5hcHBlbmQocikKKyAgICBpZiBucy5yYW5kb21fc2VlZCBpcyBub3QgTm9uZToKKyAgICAgICAgbnMucmFuZG9taXplID0gVHJ1ZQorCisgICAgcmV0dXJuIG5zCisKKworZGVmIHJ1bl90ZXN0X2luX3N1YnByb2Nlc3ModGVzdG5hbWUsIG5zKToKKyAgICAiIiJSdW4gdGhlIGdpdmVuIHRlc3QgaW4gYSBzdWJwcm9jZXNzIHdpdGggLS1zbGF2ZWFyZ3MuCisKKyAgICBucyBpcyB0aGUgb3B0aW9uIE5hbWVzcGFjZSBwYXJzZWQgZnJvbSBjb21tYW5kLWxpbmUgYXJndW1lbnRzLiByZWdydGVzdAorICAgIGlzIGludm9rZWQgaW4gYSBzdWJwcm9jZXNzIHdpdGggdGhlIC0tc2xhdmVhcmdzIGFyZ3VtZW50OyB3aGVuIHRoZQorICAgIHN1YnByb2Nlc3MgZXhpdHMsIGl0cyByZXR1cm4gY29kZSwgc3Rkb3V0IGFuZCBzdGRlcnIgYXJlIHJldHVybmVkIGFzIGEKKyAgICAzLXR1cGxlLgorICAgICIiIgorICAgIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEUKKyAgICBiYXNlX2NtZCA9IChbc3lzLmV4ZWN1dGFibGVdICsgc3VwcG9ydC5hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKSArCisgICAgICAgICAgICAgICAgWyctWCcsICdmYXVsdGhhbmRsZXInLCAnLW0nLCAndGVzdC5yZWdydGVzdCddKQorCisgICAgc2xhdmVhcmdzID0gKAorICAgICAgICAgICAgKHRlc3RuYW1lLCBucy52ZXJib3NlLCBucy5xdWlldCksCisgICAgICAgICAgICBkaWN0KGh1bnRybGVha3M9bnMuaHVudHJsZWFrcywKKyAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlcz1ucy51c2VfcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICBvdXRwdXRfb25fZmFpbHVyZT1ucy52ZXJib3NlMywKKyAgICAgICAgICAgICAgICAgdGltZW91dD1ucy50aW1lb3V0LCBmYWlsZmFzdD1ucy5mYWlsZmFzdCwKKyAgICAgICAgICAgICAgICAgbWF0Y2hfdGVzdHM9bnMubWF0Y2hfdGVzdHMpKQorICAgICMgUnVubmluZyB0aGUgY2hpbGQgZnJvbSB0aGUgc2FtZSB3b3JraW5nIGRpcmVjdG9yeSBhcyByZWdydGVzdCdzIG9yaWdpbmFsCisgICAgIyBpbnZvY2F0aW9uIGVuc3VyZXMgdGhhdCBURU1QRElSIGZvciB0aGUgY2hpbGQgaXMgdGhlIHNhbWUgd2hlbgorICAgICMgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpIGlzIHRydWUuIFNlZSBpc3N1ZSAxNTMwMC4KKyAgICBwb3BlbiA9IFBvcGVuKGJhc2VfY21kICsgWyctLXNsYXZlYXJncycsIGpzb24uZHVtcHMoc2xhdmVhcmdzKV0sCisgICAgICAgICAgICAgICAgICBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUsCisgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz0ob3MubmFtZSAhPSAnbnQnKSwKKyAgICAgICAgICAgICAgICAgIGN3ZD1zdXBwb3J0LlNBVkVEQ1dEKQorICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQorICAgIHJldGNvZGUgPSBwb3Blbi53YWl0KCkKKyAgICByZXR1cm4gcmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIKKworCitkZWYgbWFpbih0ZXN0cz1Ob25lLCAqKmt3YXJncyk6CiAgICAgIiIiRXhlY3V0ZSBhIHRlc3Qgc3VpdGUuCiAKICAgICBUaGlzIGFsc28gcGFyc2VzIGNvbW1hbmQtbGluZSBvcHRpb25zIGFuZCBtb2RpZmllcyBpdHMgYmVoYXZpb3IKQEAgLTI4Miw3ICs0NzksNiBAQAogICAgIGRpcmVjdGx5IHRvIHNldCB0aGUgdmFsdWVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgc2V0IGJ5IGZsYWdzCiAgICAgb24gdGhlIGNvbW1hbmQgbGluZS4KICAgICAiIiIKLQogICAgICMgRGlzcGxheSB0aGUgUHl0aG9uIHRyYWNlYmFjayBvbiBmYXRhbCBlcnJvcnMgKGUuZy4gc2VnZmF1bHQpCiAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZShhbGxfdGhyZWFkcz1UcnVlKQogCkBAIC0yOTgsMTg3ICs0OTQsNTEgQEAKICAgICByZXBsYWNlX3N0ZG91dCgpCiAKICAgICBzdXBwb3J0LnJlY29yZF9vcmlnaW5hbF9zdGRvdXQoc3lzLnN0ZG91dCkKLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2h2cXhzb1M6cmY6bHU6dDpURDpOTFI6RmR3V006bmo6R206JywKLSAgICAgICAgICAgIFsnaGVscCcsICd2ZXJib3NlJywgJ3ZlcmJvc2UyJywgJ3ZlcmJvc2UzJywgJ3F1aWV0JywKLSAgICAgICAgICAgICAnZXhjbHVkZScsICdzaW5nbGUnLCAnc2xvdycsICdyYW5kb21pemUnLCAnZnJvbWZpbGU9JywgJ2ZpbmRsZWFrcycsCi0gICAgICAgICAgICAgJ3VzZT0nLCAndGhyZXNob2xkPScsICdjb3ZlcmRpcj0nLCAnbm9jb3ZlcmRpcicsCi0gICAgICAgICAgICAgJ3J1bmxlYWtzJywgJ2h1bnRybGVha3M9JywgJ21lbWxpbWl0PScsICdyYW5kc2VlZD0nLAotICAgICAgICAgICAgICdtdWx0aXByb2Nlc3M9JywgJ2NvdmVyYWdlJywgJ3NsYXZlYXJncz0nLCAnZm9yZXZlcicsICdkZWJ1ZycsCi0gICAgICAgICAgICAgJ3N0YXJ0PScsICdub3dpbmRvd3MnLCAnaGVhZGVyJywgJ3Rlc3RkaXI9JywgJ3RpbWVvdXQ9JywgJ3dhaXQnLAotICAgICAgICAgICAgICdmYWlsZmFzdCcsICdtYXRjaD0nXSkKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgdXNhZ2UobXNnKQogCi0gICAgIyBEZWZhdWx0cwotICAgIGlmIHJhbmRvbV9zZWVkIGlzIE5vbmU6Ci0gICAgICAgIHJhbmRvbV9zZWVkID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwMDAwMCkKLSAgICBpZiB1c2VfcmVzb3VyY2VzIGlzIE5vbmU6Ci0gICAgICAgIHVzZV9yZXNvdXJjZXMgPSBbXQotICAgIGRlYnVnID0gRmFsc2UKLSAgICBzdGFydCA9IE5vbmUKLSAgICB0aW1lb3V0ID0gTm9uZQotICAgIGZvciBvLCBhIGluIG9wdHM6Ci0gICAgICAgIGlmIG8gaW4gKCctaCcsICctLWhlbHAnKToKLSAgICAgICAgICAgIHByaW50KF9fZG9jX18pCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZWxpZiBvIGluICgnLXYnLCAnLS12ZXJib3NlJyk6Ci0gICAgICAgICAgICB2ZXJib3NlICs9IDEKLSAgICAgICAgZWxpZiBvIGluICgnLXcnLCAnLS12ZXJib3NlMicpOgotICAgICAgICAgICAgdmVyYm9zZTIgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1kJywgJy0tZGVidWcnKToKLSAgICAgICAgICAgIGRlYnVnID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctVycsICctLXZlcmJvc2UzJyk6Ci0gICAgICAgICAgICB2ZXJib3NlMyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLUcnLCAnLS1mYWlsZmFzdCcpOgotICAgICAgICAgICAgZmFpbGZhc3QgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1xJywgJy0tcXVpZXQnKToKLSAgICAgICAgICAgIHF1aWV0ID0gVHJ1ZTsKLSAgICAgICAgICAgIHZlcmJvc2UgPSAwCi0gICAgICAgIGVsaWYgbyBpbiAoJy14JywgJy0tZXhjbHVkZScpOgotICAgICAgICAgICAgZXhjbHVkZSA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLVMnLCAnLS1zdGFydCcpOgotICAgICAgICAgICAgc3RhcnQgPSBhCi0gICAgICAgIGVsaWYgbyBpbiAoJy1zJywgJy0tc2luZ2xlJyk6Ci0gICAgICAgICAgICBzaW5nbGUgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1vJywgJy0tc2xvdycpOgotICAgICAgICAgICAgcHJpbnRfc2xvdyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLXInLCAnLS1yYW5kb21pemUnKToKLSAgICAgICAgICAgIHJhbmRvbWl6ZSA9IFRydWUKLSAgICAgICAgZWxpZiBvID09ICctLXJhbmRzZWVkJzoKLSAgICAgICAgICAgIHJhbmRvbWl6ZSA9IFRydWUKLSAgICAgICAgICAgIHJhbmRvbV9zZWVkID0gaW50KGEpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1mJywgJy0tZnJvbWZpbGUnKToKLSAgICAgICAgICAgIGZyb21maWxlID0gYQotICAgICAgICBlbGlmIG8gaW4gKCctbScsICctLW1hdGNoJyk6Ci0gICAgICAgICAgICBtYXRjaF90ZXN0cyA9IGEKLSAgICAgICAgZWxpZiBvIGluICgnLWwnLCAnLS1maW5kbGVha3MnKToKLSAgICAgICAgICAgIGZpbmRsZWFrcyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLUwnLCAnLS1ydW5sZWFrcycpOgotICAgICAgICAgICAgcnVubGVha3MgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy10JywgJy0tdGhyZXNob2xkJyk6Ci0gICAgICAgICAgICBpbXBvcnQgZ2MKLSAgICAgICAgICAgIGdjLnNldF90aHJlc2hvbGQoaW50KGEpKQotICAgICAgICBlbGlmIG8gaW4gKCctVCcsICctLWNvdmVyYWdlJyk6Ci0gICAgICAgICAgICB0cmFjZSA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLUQnLCAnLS1jb3ZlcmRpcicpOgotICAgICAgICAgICAgIyBDV0QgaXMgcmVwbGFjZWQgd2l0aCBhIHRlbXBvcmFyeSBkaXIgYmVmb3JlIGNhbGxpbmcgbWFpbigpLCBzbyB3ZQotICAgICAgICAgICAgIyBuZWVkICBqb2luIGl0IHdpdGggdGhlIHNhdmVkIENXRCBzbyBpdCBnb2VzIHdoZXJlIHRoZSB1c2VyIGV4cGVjdHMuCi0gICAgICAgICAgICBjb3ZlcmRpciA9IG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBhKQotICAgICAgICBlbGlmIG8gaW4gKCctTicsICctLW5vY292ZXJkaXInKToKLSAgICAgICAgICAgIGNvdmVyZGlyID0gTm9uZQotICAgICAgICBlbGlmIG8gaW4gKCctUicsICctLWh1bnRybGVha3MnKToKLSAgICAgICAgICAgIGh1bnRybGVha3MgPSBhLnNwbGl0KCc6JykKLSAgICAgICAgICAgIGlmIGxlbihodW50cmxlYWtzKSBub3QgaW4gKDIsIDMpOgotICAgICAgICAgICAgICAgIHByaW50KGEsIGh1bnRybGVha3MpCi0gICAgICAgICAgICAgICAgdXNhZ2UoJy1SIHRha2VzIDIgb3IgMyBjb2xvbi1zZXBhcmF0ZWQgYXJndW1lbnRzJykKLSAgICAgICAgICAgIGlmIG5vdCBodW50cmxlYWtzWzBdOgotICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMF0gPSA1Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMF0gPSBpbnQoaHVudHJsZWFrc1swXSkKLSAgICAgICAgICAgIGlmIG5vdCBodW50cmxlYWtzWzFdOgotICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMV0gPSA0Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMV0gPSBpbnQoaHVudHJsZWFrc1sxXSkKLSAgICAgICAgICAgIGlmIGxlbihodW50cmxlYWtzKSA9PSAyIG9yIG5vdCBodW50cmxlYWtzWzJdOgotICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMjpdID0gWyJyZWZsb2cudHh0Il0KLSAgICAgICAgICAgICMgQXZvaWQgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byB2YXJpb3VzIGNhY2hlcwotICAgICAgICAgICAgIyBmaWxsaW5nIHNsb3dseSB3aXRoIHJhbmRvbSBkYXRhOgotICAgICAgICAgICAgd2FybV9jYWNoZXMoKQotICAgICAgICBlbGlmIG8gaW4gKCctTScsICctLW1lbWxpbWl0Jyk6Ci0gICAgICAgICAgICBzdXBwb3J0LnNldF9tZW1saW1pdChhKQotICAgICAgICBlbGlmIG8gaW4gKCctdScsICctLXVzZScpOgotICAgICAgICAgICAgdSA9IFt4Lmxvd2VyKCkgZm9yIHggaW4gYS5zcGxpdCgnLCcpXQotICAgICAgICAgICAgZm9yIHIgaW4gdToKLSAgICAgICAgICAgICAgICBpZiByID09ICdhbGwnOgotICAgICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzWzpdID0gUkVTT1VSQ0VfTkFNRVMKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBpZiByID09ICdub25lJzoKLSAgICAgICAgICAgICAgICAgICAgZGVsIHVzZV9yZXNvdXJjZXNbOl0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICByZW1vdmUgPSBGYWxzZQotICAgICAgICAgICAgICAgIGlmIHJbMF0gPT0gJy0nOgotICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIHIgPSByWzE6XQotICAgICAgICAgICAgICAgIGlmIHIgbm90IGluIFJFU09VUkNFX05BTUVTOgotICAgICAgICAgICAgICAgICAgICB1c2FnZSgnSW52YWxpZCAtdS8tLXVzZSBvcHRpb246ICcgKyBhKQotICAgICAgICAgICAgICAgIGlmIHJlbW92ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgciBpbiB1c2VfcmVzb3VyY2VzOgotICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlcy5yZW1vdmUocikKLSAgICAgICAgICAgICAgICBlbGlmIHIgbm90IGluIHVzZV9yZXNvdXJjZXM6Ci0gICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXMuYXBwZW5kKHIpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1uJywgJy0tbm93aW5kb3dzJyk6Ci0gICAgICAgICAgICBpbXBvcnQgbXN2Y3J0Ci0gICAgICAgICAgICBtc3ZjcnQuU2V0RXJyb3JNb2RlKG1zdmNydC5TRU1fRkFJTENSSVRJQ0FMRVJST1JTfAotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PQUxJR05NRU5URkFVTFRFWENFUFR8Ci0gICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9HUEZBVUxURVJST1JCT1h8Ci0gICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9PUEVORklMRUVSUk9SQk9YKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgIyByZWxlYXNlIGJ1aWxkCi0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmb3IgbSBpbiBbbXN2Y3J0LkNSVF9XQVJOLCBtc3ZjcnQuQ1JUX0VSUk9SLCBtc3ZjcnQuQ1JUX0FTU0VSVF06Ci0gICAgICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlKG0sIG1zdmNydC5DUlREQkdfTU9ERV9GSUxFKQotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0RmlsZShtLCBtc3ZjcnQuQ1JUREJHX0ZJTEVfU1RERVJSKQotICAgICAgICBlbGlmIG8gaW4gKCctRicsICctLWZvcmV2ZXInKToKLSAgICAgICAgICAgIGZvcmV2ZXIgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1qJywgJy0tbXVsdGlwcm9jZXNzJyk6Ci0gICAgICAgICAgICB1c2VfbXAgPSBpbnQoYSkKLSAgICAgICAgICAgIGlmIHVzZV9tcCA8PSAwOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotICAgICAgICAgICAgICAgICAgICAjIFVzZSBhbGwgY29yZXMgKyBleHRyYXMgZm9yIHRlc3RzIHRoYXQgbGlrZSB0byBzbGVlcAotICAgICAgICAgICAgICAgICAgICB1c2VfbXAgPSAyICsgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIHVzZV9tcCA9IDMKLSAgICAgICAgICAgIGlmIHVzZV9tcCA9PSAxOgotICAgICAgICAgICAgICAgIHVzZV9tcCA9IE5vbmUKLSAgICAgICAgZWxpZiBvID09ICctLWhlYWRlcic6Ci0gICAgICAgICAgICBoZWFkZXIgPSBUcnVlCi0gICAgICAgIGVsaWYgbyA9PSAnLS1zbGF2ZWFyZ3MnOgotICAgICAgICAgICAgYXJncywga3dhcmdzID0ganNvbi5sb2FkcyhhKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IElOVEVSUlVQVEVELCAnJwotICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBDSElMRF9FUlJPUiwgc3RyKGUpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgIHByaW50KCkgICAjIEZvcmNlIGEgbmV3bGluZSAoanVzdCBpbiBjYXNlKQotICAgICAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhyZXN1bHQpKQotICAgICAgICAgICAgc3lzLmV4aXQoMCkKLSAgICAgICAgZWxpZiBvID09ICctLXRlc3RkaXInOgotICAgICAgICAgICAgIyBDV0QgaXMgcmVwbGFjZWQgd2l0aCBhIHRlbXBvcmFyeSBkaXIgYmVmb3JlIGNhbGxpbmcgbWFpbigpLCBzbyB3ZQotICAgICAgICAgICAgIyBqb2luIGl0IHdpdGggdGhlIHNhdmVkIENXRCBzbyBpdCBlbmRzIHVwIHdoZXJlIHRoZSB1c2VyIGV4cGVjdHMuCi0gICAgICAgICAgICB0ZXN0ZGlyID0gb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIGEpCi0gICAgICAgIGVsaWYgbyA9PSAnLS10aW1lb3V0JzoKLSAgICAgICAgICAgIGlmIGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAnZHVtcF90cmFjZWJhY2tfbGF0ZXInKToKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZmxvYXQoYSkKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDw9IDA6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBOb25lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBUaGUgdGltZW91dCBvcHRpb24gcmVxdWlyZXMgIgotICAgICAgICAgICAgICAgICAgICAgICJmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIiKQotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBOb25lCi0gICAgICAgIGVsaWYgbyA9PSAnLS13YWl0JzoKLSAgICAgICAgICAgIGlucHV0KCJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uIikKKyAgICBucyA9IF9wYXJzZV9hcmdzKHN5cy5hcmd2WzE6XSwgKiprd2FyZ3MpCisKKyAgICBpZiBucy5odW50cmxlYWtzOgorICAgICAgICAjIEF2b2lkIGZhbHNlIHBvc2l0aXZlcyBkdWUgdG8gdmFyaW91cyBjYWNoZXMKKyAgICAgICAgIyBmaWxsaW5nIHNsb3dseSB3aXRoIHJhbmRvbSBkYXRhOgorICAgICAgICB3YXJtX2NhY2hlcygpCisgICAgaWYgbnMubWVtbGltaXQgaXMgbm90IE5vbmU6CisgICAgICAgIHN1cHBvcnQuc2V0X21lbWxpbWl0KG5zLm1lbWxpbWl0KQorICAgIGlmIG5zLnRocmVzaG9sZCBpcyBub3QgTm9uZToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGdjLnNldF90aHJlc2hvbGQobnMudGhyZXNob2xkKQorICAgIGlmIG5zLm5vd2luZG93czoKKyAgICAgICAgaW1wb3J0IG1zdmNydAorICAgICAgICBtc3ZjcnQuU2V0RXJyb3JNb2RlKG1zdmNydC5TRU1fRkFJTENSSVRJQ0FMRVJST1JTfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9BTElHTk1FTlRGQVVMVEVYQ0VQVHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PR1BGQVVMVEVSUk9SQk9YfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9PUEVORklMRUVSUk9SQk9YKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIHJlbGVhc2UgYnVpbGQKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCgiTm8gaGFuZGxlciBmb3Igb3B0aW9uIHt9LiAgUGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnICIKLSAgICAgICAgICAgICAgICAgICAiYXQgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy4iKS5mb3JtYXQobyksIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgaWYgc2luZ2xlIGFuZCBmcm9tZmlsZToKLSAgICAgICAgdXNhZ2UoIi1zIGFuZCAtZiBkb24ndCBnbyB0b2dldGhlciEiKQotICAgIGlmIHVzZV9tcCBhbmQgdHJhY2U6Ci0gICAgICAgIHVzYWdlKCItVCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiB1c2VfbXAgYW5kIGZpbmRsZWFrczoKLSAgICAgICAgdXNhZ2UoIi1sIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQotICAgIGlmIHVzZV9tcCBhbmQgc3VwcG9ydC5tYXhfbWVtdXNlOgotICAgICAgICB1c2FnZSgiLU0gYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCi0gICAgaWYgZmFpbGZhc3QgYW5kIG5vdCAodmVyYm9zZSBvciB2ZXJib3NlMyk6Ci0gICAgICAgIHVzYWdlKCItRy8tLWZhaWxmYXN0IG5lZWRzIGVpdGhlciAtdiBvciAtVyIpCisgICAgICAgICAgICBmb3IgbSBpbiBbbXN2Y3J0LkNSVF9XQVJOLCBtc3ZjcnQuQ1JUX0VSUk9SLCBtc3ZjcnQuQ1JUX0FTU0VSVF06CisgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUobSwgbXN2Y3J0LkNSVERCR19NT0RFX0ZJTEUpCisgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydEZpbGUobSwgbXN2Y3J0LkNSVERCR19GSUxFX1NUREVSUikKKyAgICBpZiBucy53YWl0OgorICAgICAgICBpbnB1dCgiUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLiIpCisKKyAgICBpZiBucy5zbGF2ZWFyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgIGFyZ3MsIGt3YXJncyA9IGpzb24ubG9hZHMobnMuc2xhdmVhcmdzKQorICAgICAgICBpZiBrd2FyZ3MuZ2V0KCdodW50cmxlYWtzJyk6CisgICAgICAgICAgICB1bml0dGVzdC5CYXNlVGVzdFN1aXRlLl9jbGVhbnVwID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCgqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHJlc3VsdCA9IElOVEVSUlVQVEVELCAnJworICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgICAgICByZXN1bHQgPSBDSElMRF9FUlJPUiwgc3RyKGUpCisgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICBwcmludCgpICAgIyBGb3JjZSBhIG5ld2xpbmUgKGp1c3QgaW4gY2FzZSkKKyAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhyZXN1bHQpKQorICAgICAgICBzeXMuZXhpdCgwKQogCiAgICAgZ29vZCA9IFtdCiAgICAgYmFkID0gW10KQEAgLTQ4NywxMiArNTQ3LDEyIEBACiAgICAgZW52aXJvbm1lbnRfY2hhbmdlZCA9IFtdCiAgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQogCi0gICAgaWYgZmluZGxlYWtzOgorICAgIGlmIG5zLmZpbmRsZWFrczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IGdjCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHByaW50KCdObyBHQyBhdmFpbGFibGUsIGRpc2FibGluZyBmaW5kbGVha3MuJykKLSAgICAgICAgICAgIGZpbmRsZWFrcyA9IEZhbHNlCisgICAgICAgICAgICBucy5maW5kbGVha3MgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgdG8gcmVwb3J0IGdhcmJhZ2UgdGhhdCBpcyBub3QKICAgICAgICAgICAgICMgZnJlZWFibGUgYnkgcmVmZXJlbmNlIGNvdW50aW5nIGFsb25lLiAgQnkgZGVmYXVsdCBvbmx5CkBAIC01MDAsODIgKzU2MCw4NyBAQAogICAgICAgICAgICAgI2djLnNldF9kZWJ1ZyhnYy5ERUJVR19TQVZFQUxMKQogICAgICAgICAgICAgZm91bmRfZ2FyYmFnZSA9IFtdCiAKLSAgICBpZiBzaW5nbGU6CisgICAgaWYgbnMuaHVudHJsZWFrczoKKyAgICAgICAgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cCA9IEZhbHNlCisKKyAgICBpZiBucy5zaW5nbGU6CiAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICdweW5leHR0ZXN0JykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAncicpCi0gICAgICAgICAgICBuZXh0X3Rlc3QgPSBmcC5yZWFkKCkuc3RyaXAoKQotICAgICAgICAgICAgdGVzdHMgPSBbbmV4dF90ZXN0XQotICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBuZXh0X3Rlc3QgPSBmcC5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgICAgIHRlc3RzID0gW25leHRfdGVzdF0KKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKLSAgICBpZiBmcm9tZmlsZToKKyAgICBpZiBucy5mcm9tZmlsZToKICAgICAgICAgdGVzdHMgPSBbXQotICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIGZyb21maWxlKSkKLSAgICAgICAgY291bnRfcGF0ID0gcmUuY29tcGlsZShyJ1xbXHMqXGQrL1xzKlxkK1xdJykKLSAgICAgICAgZm9yIGxpbmUgaW4gZnA6Ci0gICAgICAgICAgICBsaW5lID0gY291bnRfcGF0LnN1YignJywgbGluZSkKLSAgICAgICAgICAgIGd1dHMgPSBsaW5lLnNwbGl0KCkgIyBhc3N1bWluZyBubyB0ZXN0IGhhcyB3aGl0ZXNwYWNlIGluIGl0cyBuYW1lCi0gICAgICAgICAgICBpZiBndXRzIGFuZCBub3QgZ3V0c1swXS5zdGFydHN3aXRoKCcjJyk6Ci0gICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKGd1dHMpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBucy5mcm9tZmlsZSkpIGFzIGZwOgorICAgICAgICAgICAgY291bnRfcGF0ID0gcmUuY29tcGlsZShyJ1xbXHMqXGQrL1xzKlxkK1xdJykKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZwOgorICAgICAgICAgICAgICAgIGxpbmUgPSBjb3VudF9wYXQuc3ViKCcnLCBsaW5lKQorICAgICAgICAgICAgICAgIGd1dHMgPSBsaW5lLnNwbGl0KCkgIyBhc3N1bWluZyBubyB0ZXN0IGhhcyB3aGl0ZXNwYWNlIGluIGl0cyBuYW1lCisgICAgICAgICAgICAgICAgaWYgZ3V0cyBhbmQgbm90IGd1dHNbMF0uc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0cy5leHRlbmQoZ3V0cykKIAogICAgICMgU3RyaXAgLnB5IGV4dGVuc2lvbnMuCi0gICAgcmVtb3ZlcHkoYXJncykKKyAgICByZW1vdmVweShucy5hcmdzKQogICAgIHJlbW92ZXB5KHRlc3RzKQogCiAgICAgc3RkdGVzdHMgPSBTVERURVNUU1s6XQogICAgIG5vdHRlc3RzID0gTk9UVEVTVFMuY29weSgpCi0gICAgaWYgZXhjbHVkZToKLSAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgIGlmIG5zLmV4Y2x1ZGU6CisgICAgICAgIGZvciBhcmcgaW4gbnMuYXJnczoKICAgICAgICAgICAgIGlmIGFyZyBpbiBzdGR0ZXN0czoKICAgICAgICAgICAgICAgICBzdGR0ZXN0cy5yZW1vdmUoYXJnKQogICAgICAgICAgICAgbm90dGVzdHMuYWRkKGFyZykKLSAgICAgICAgYXJncyA9IFtdCisgICAgICAgIG5zLmFyZ3MgPSBbXQogCiAgICAgIyBGb3IgYSBwYXJ0aWFsIHJ1biwgd2UgZG8gbm90IG5lZWQgdG8gY2x1dHRlciB0aGUgb3V0cHV0LgotICAgIGlmIHZlcmJvc2Ugb3IgaGVhZGVyIG9yIG5vdCAocXVpZXQgb3Igc2luZ2xlIG9yIHRlc3RzIG9yIGFyZ3MpOgorICAgIGlmIG5zLnZlcmJvc2Ugb3IgbnMuaGVhZGVyIG9yIG5vdCAobnMucXVpZXQgb3IgbnMuc2luZ2xlIG9yIHRlc3RzIG9yIG5zLmFyZ3MpOgogICAgICAgICAjIFByaW50IGJhc2ljIHBsYXRmb3JtIGluZm9ybWF0aW9uCiAgICAgICAgIHByaW50KCI9PSIsIHBsYXRmb3JtLnB5dGhvbl9pbXBsZW1lbnRhdGlvbigpLCAqc3lzLnZlcnNpb24uc3BsaXQoKSkKICAgICAgICAgcHJpbnQoIj09ICAiLCBwbGF0Zm9ybS5wbGF0Zm9ybShhbGlhc2VkPVRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICIlcy1lbmRpYW4iICUgc3lzLmJ5dGVvcmRlcikKKyAgICAgICAgcHJpbnQoIj09ICAiLCAiaGFzaCBhbGdvcml0aG06Iiwgc3lzLmhhc2hfaW5mby5hbGdvcml0aG0sCisgICAgICAgICAgICAgICI2NGJpdCIgaWYgc3lzLm1heHNpemUgPiAyKiozMiBlbHNlICIzMmJpdCIpCiAgICAgICAgIHByaW50KCI9PSAgIiwgb3MuZ2V0Y3dkKCkpCiAgICAgICAgIHByaW50KCJUZXN0aW5nIHdpdGggZmxhZ3M6Iiwgc3lzLmZsYWdzKQogCiAgICAgIyBpZiB0ZXN0ZGlyIGlzIHNldCwgdGhlbiB3ZSBhcmUgbm90IHJ1bm5pbmcgdGhlIHB5dGhvbiB0ZXN0cyBzdWl0ZSwgc28KICAgICAjIGRvbid0IGFkZCBkZWZhdWx0IHRlc3RzIHRvIGJlIGV4ZWN1dGVkIG9yIHNraXBwZWQgKHBhc3MgZW1wdHkgdmFsdWVzKQotICAgIGlmIHRlc3RkaXI6Ci0gICAgICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKHRlc3RkaXIsIGxpc3QoKSwgc2V0KCkpCisgICAgaWYgbnMudGVzdGRpcjoKKyAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHMobnMudGVzdGRpciwgbGlzdCgpLCBzZXQoKSkKICAgICBlbHNlOgotICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyh0ZXN0ZGlyLCBzdGR0ZXN0cywgbm90dGVzdHMpCisgICAgICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKG5zLnRlc3RkaXIsIHN0ZHRlc3RzLCBub3R0ZXN0cykKIAotICAgIHNlbGVjdGVkID0gdGVzdHMgb3IgYXJncyBvciBhbGx0ZXN0cwotICAgIGlmIHNpbmdsZToKKyAgICBzZWxlY3RlZCA9IHRlc3RzIG9yIG5zLmFyZ3Mgb3IgYWxsdGVzdHMKKyAgICBpZiBucy5zaW5nbGU6CiAgICAgICAgIHNlbGVjdGVkID0gc2VsZWN0ZWRbOjFdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5leHRfc2luZ2xlX3Rlc3QgPSBhbGx0ZXN0c1thbGx0ZXN0cy5pbmRleChzZWxlY3RlZFswXSkrMV0KICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgICBuZXh0X3NpbmdsZV90ZXN0ID0gTm9uZQogICAgICMgUmVtb3ZlIGFsbCB0aGUgc2VsZWN0ZWQgdGVzdHMgdGhhdCBwcmVjZWRlIHN0YXJ0IGlmIGl0J3Mgc2V0LgotICAgIGlmIHN0YXJ0OgorICAgIGlmIG5zLnN0YXJ0OgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkZWwgc2VsZWN0ZWRbOnNlbGVjdGVkLmluZGV4KHN0YXJ0KV0KKyAgICAgICAgICAgIGRlbCBzZWxlY3RlZFs6c2VsZWN0ZWQuaW5kZXgobnMuc3RhcnQpXQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBmaW5kIHN0YXJ0aW5nIHRlc3QgKCVzKSwgdXNpbmcgYWxsIHRlc3RzIiAlIHN0YXJ0KQotICAgIGlmIHJhbmRvbWl6ZToKLSAgICAgICAgcmFuZG9tLnNlZWQocmFuZG9tX3NlZWQpCi0gICAgICAgIHByaW50KCJVc2luZyByYW5kb20gc2VlZCIsIHJhbmRvbV9zZWVkKQorICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IGZpbmQgc3RhcnRpbmcgdGVzdCAoJXMpLCB1c2luZyBhbGwgdGVzdHMiICUgbnMuc3RhcnQpCisgICAgaWYgbnMucmFuZG9taXplOgorICAgICAgICBpZiBucy5yYW5kb21fc2VlZCBpcyBOb25lOgorICAgICAgICAgICAgbnMucmFuZG9tX3NlZWQgPSByYW5kb20ucmFuZHJhbmdlKDEwMDAwMDAwKQorICAgICAgICByYW5kb20uc2VlZChucy5yYW5kb21fc2VlZCkKKyAgICAgICAgcHJpbnQoIlVzaW5nIHJhbmRvbSBzZWVkIiwgbnMucmFuZG9tX3NlZWQpCiAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHNlbGVjdGVkKQotICAgIGlmIHRyYWNlOgorICAgIGlmIG5zLnRyYWNlOgogICAgICAgICBpbXBvcnQgdHJhY2UsIHRlbXBmaWxlCiAgICAgICAgIHRyYWNlciA9IHRyYWNlLlRyYWNlKGlnbm9yZWRpcnM9W3N5cy5iYXNlX3ByZWZpeCwgc3lzLmJhc2VfZXhlY19wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBmaWxlLmdldHRlbXBkaXIoKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlPUZhbHNlLCBjb3VudD1UcnVlKQogCiAgICAgdGVzdF90aW1lcyA9IFtdCi0gICAgc3VwcG9ydC52ZXJib3NlID0gdmVyYm9zZSAgICAgICMgVGVsbCB0ZXN0cyB0byBiZSBtb2RlcmF0ZWx5IHF1aWV0Ci0gICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gdXNlX3Jlc291cmNlcworICAgIHN1cHBvcnQudmVyYm9zZSA9IG5zLnZlcmJvc2UgICAgICAjIFRlbGwgdGVzdHMgdG8gYmUgbW9kZXJhdGVseSBxdWlldAorICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcyA9IG5zLnVzZV9yZXNvdXJjZXMKICAgICBzYXZlX21vZHVsZXMgPSBzeXMubW9kdWxlcy5rZXlzKCkKIAogICAgIGRlZiBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpOgpAQCAtNTkzLDcgKzY1OCw3IEBACiAgICAgICAgICAgICBza2lwcGVkLmFwcGVuZCh0ZXN0KQogICAgICAgICAgICAgcmVzb3VyY2VfZGVuaWVkcy5hcHBlbmQodGVzdCkKIAotICAgIGlmIGZvcmV2ZXI6CisgICAgaWYgbnMuZm9yZXZlcjoKICAgICAgICAgZGVmIHRlc3RfZm9yZXZlcih0ZXN0cz1saXN0KHNlbGVjdGVkKSk6CiAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgpAQCAtNjA4LDE5ICs2NzMsMTYgQEAKICAgICAgICAgdGVzdF9jb3VudCA9ICcve30nLmZvcm1hdChsZW4oc2VsZWN0ZWQpKQogICAgICAgICB0ZXN0X2NvdW50X3dpZHRoID0gbGVuKHRlc3RfY291bnQpIC0gMQogCi0gICAgaWYgdXNlX21wOgorICAgIGlmIG5zLnVzZV9tcDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICBwcmludCgiTXVsdGlwcm9jZXNzIG9wdGlvbiByZXF1aXJlcyB0aHJlYWQgc3VwcG9ydCIpCiAgICAgICAgICAgICBzeXMuZXhpdCgyKQogICAgICAgICBmcm9tIHF1ZXVlIGltcG9ydCBRdWV1ZQotICAgICAgICBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBQSVBFCi0gICAgICAgIGRlYnVnX291dHB1dF9wYXQgPSByZS5jb21waWxlKHIiXFtcZCsgcmVmc1xdJCIpCisgICAgICAgIGRlYnVnX291dHB1dF9wYXQgPSByZS5jb21waWxlKHIiXFtcZCsgcmVmcywgXGQrIGJsb2Nrc1xdJCIpCiAgICAgICAgIG91dHB1dCA9IFF1ZXVlKCkKICAgICAgICAgcGVuZGluZyA9IE11bHRpcHJvY2Vzc1Rlc3RzKHRlc3RzKQotICAgICAgICBvcHRfYXJncyA9IHN1cHBvcnQuYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKLSAgICAgICAgYmFzZV9jbWQgPSBbc3lzLmV4ZWN1dGFibGVdICsgb3B0X2FyZ3MgKyBbJy1tJywgJ3Rlc3QucmVncnRlc3QnXQogICAgICAgICBkZWYgd29yaygpOgogICAgICAgICAgICAgIyBBIHdvcmtlciB0aHJlYWQuCiAgICAgICAgICAgICB0cnk6CkBAIC02MzAsMjQgKzY5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgogICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAgYXJnc190dXBsZSA9ICgKLSAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LCB2ZXJib3NlLCBxdWlldCksCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWN0KGh1bnRybGVha3M9aHVudHJsZWFrcywgdXNlX3Jlc291cmNlcz11c2VfcmVzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz1kZWJ1Zywgb3V0cHV0X29uX2ZhaWx1cmU9dmVyYm9zZTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9dGltZW91dCwgZmFpbGZhc3Q9ZmFpbGZhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW1hdGNoX3Rlc3RzKQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICMgLUUgaXMgbmVlZGVkIGJ5IHNvbWUgdGVzdHMsIGUuZy4gdGVzdF9pbXBvcnQKLSAgICAgICAgICAgICAgICAgICAgIyBSdW5uaW5nIHRoZSBjaGlsZCBmcm9tIHRoZSBzYW1lIHdvcmtpbmcgZGlyZWN0b3J5IGVuc3VyZXMKLSAgICAgICAgICAgICAgICAgICAgIyB0aGF0IFRFTVBESVIgZm9yIHRoZSBjaGlsZCBpcyB0aGUgc2FtZSB3aGVuCi0gICAgICAgICAgICAgICAgICAgICMgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpIGlzIHRydWUuIFNlZSBpc3N1ZSAxNTMwMC4KLSAgICAgICAgICAgICAgICAgICAgcG9wZW4gPSBQb3BlbihiYXNlX2NtZCArIFsnLS1zbGF2ZWFyZ3MnLCBqc29uLmR1bXBzKGFyZ3NfdHVwbGUpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPShvcy5uYW1lICE9ICdudCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9c3VwcG9ydC5TQVZFRENXRCkKLSAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCi0gICAgICAgICAgICAgICAgICAgIHJldGNvZGUgPSBwb3Blbi53YWl0KCkKKyAgICAgICAgICAgICAgICAgICAgcmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBydW5fdGVzdF9pbl9zdWJwcm9jZXNzKHRlc3QsIG5zKQogICAgICAgICAgICAgICAgICAgICAjIFN0cmlwIGxhc3QgcmVmY291bnQgb3V0cHV0IGxpbmUgaWYgaXQgZXhpc3RzLCBzaW5jZSBpdAogICAgICAgICAgICAgICAgICAgICAjIGNvbWVzIGZyb20gdGhlIHNodXRkb3duIG9mIHRoZSBpbnRlcnByZXRlciBpbiB0aGUgc3ViY29tbWFuZC4KICAgICAgICAgICAgICAgICAgICAgc3RkZXJyID0gZGVidWdfb3V0cHV0X3BhdC5zdWIoIiIsIHN0ZGVycikKQEAgLTY2NCwxOSArNzA5LDE5IEBACiAgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICBvdXRwdXQucHV0KChOb25lLCBOb25lLCBOb25lLCBOb25lKSkKICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICB3b3JrZXJzID0gW1RocmVhZCh0YXJnZXQ9d29yaykgZm9yIGkgaW4gcmFuZ2UodXNlX21wKV0KKyAgICAgICAgd29ya2VycyA9IFtUaHJlYWQodGFyZ2V0PXdvcmspIGZvciBpIGluIHJhbmdlKG5zLnVzZV9tcCldCiAgICAgICAgIGZvciB3b3JrZXIgaW4gd29ya2VyczoKICAgICAgICAgICAgIHdvcmtlci5zdGFydCgpCiAgICAgICAgIGZpbmlzaGVkID0gMAogICAgICAgICB0ZXN0X2luZGV4ID0gMQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBmaW5pc2hlZCA8IHVzZV9tcDoKKyAgICAgICAgICAgIHdoaWxlIGZpbmlzaGVkIDwgbnMudXNlX21wOgogICAgICAgICAgICAgICAgIHRlc3QsIHN0ZG91dCwgc3RkZXJyLCByZXN1bHQgPSBvdXRwdXQuZ2V0KCkKICAgICAgICAgICAgICAgICBpZiB0ZXN0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkICs9IDEKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpCi0gICAgICAgICAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgICAgIGlmIG5vdCBucy5xdWlldDoKICAgICAgICAgICAgICAgICAgICAgZm10ID0gIlt7MTp7MH19ezJ9L3szfV0gezR9IiBpZiBiYWQgZWxzZSAiW3sxOnswfX17Mn1dIHs0fSIKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZm10LmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY291bnRfd2lkdGgsIHRlc3RfaW5kZXgsIHRlc3RfY291bnQsCkBAIC02OTksMjkgKzc0NCwzMCBAQAogICAgICAgICAgICAgd29ya2VyLmpvaW4oKQogICAgIGVsc2U6CiAgICAgICAgIGZvciB0ZXN0X2luZGV4LCB0ZXN0IGluIGVudW1lcmF0ZSh0ZXN0cywgMSk6Ci0gICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICBpZiBub3QgbnMucXVpZXQ6CiAgICAgICAgICAgICAgICAgZm10ID0gIlt7MTp7MH19ezJ9L3szfV0gezR9IiBpZiBiYWQgZWxzZSAiW3sxOnswfX17Mn1dIHs0fSIKICAgICAgICAgICAgICAgICBwcmludChmbXQuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICB0ZXN0X2NvdW50X3dpZHRoLCB0ZXN0X2luZGV4LCB0ZXN0X2NvdW50LCBsZW4oYmFkKSwgdGVzdCkpCiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICBpZiB0cmFjZToKKyAgICAgICAgICAgIGlmIG5zLnRyYWNlOgogICAgICAgICAgICAgICAgICMgSWYgd2UncmUgdHJhY2luZyBjb2RlIGNvdmVyYWdlLCB0aGVuIHdlIGRvbid0IGV4aXQgd2l0aCBzdGF0dXMKICAgICAgICAgICAgICAgICAjIGlmIG9uIGEgZmFsc2UgcmV0dXJuIHZhbHVlIGZyb20gbWFpbi4KLSAgICAgICAgICAgICAgICB0cmFjZXIucnVuY3R4KCdydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LCB0aW1lb3V0PXRpbWVvdXQpJywKKyAgICAgICAgICAgICAgICB0cmFjZXIucnVuY3R4KCdydW50ZXN0KHRlc3QsIG5zLnZlcmJvc2UsIG5zLnF1aWV0LCB0aW1lb3V0PW5zLnRpbWVvdXQpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbHM9Z2xvYmFscygpLCBsb2NhbHM9dmFycygpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsIGRlYnVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9vbl9mYWlsdXJlPXZlcmJvc2UzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9dGltZW91dCwgZmFpbGZhc3Q9ZmFpbGZhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfdGVzdHM9bWF0Y2hfdGVzdHMpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QodGVzdCwgbnMudmVyYm9zZSwgbnMucXVpZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnMuaHVudHJsZWFrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfb25fZmFpbHVyZT1ucy52ZXJib3NlMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PW5zLnRpbWVvdXQsIGZhaWxmYXN0PW5zLmZhaWxmYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW5zLm1hdGNoX3Rlc3RzKQogICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpCiAgICAgICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBpZiBmaW5kbGVha3M6CisgICAgICAgICAgICBpZiBucy5maW5kbGVha3M6CiAgICAgICAgICAgICAgICAgZ2MuY29sbGVjdCgpCiAgICAgICAgICAgICAgICAgaWYgZ2MuZ2FyYmFnZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IHRlc3QgY3JlYXRlZCIsIGxlbihnYy5nYXJiYWdlKSwgZW5kPScgJykKQEAgLTc0MiwxMSArNzg4LDExIEBACiAgICAgICAgIG9taXR0ZWQgPSBzZXQoc2VsZWN0ZWQpIC0gc2V0KGdvb2QpIC0gc2V0KGJhZCkgLSBzZXQoc2tpcHBlZCkKICAgICAgICAgcHJpbnQoY291bnQobGVuKG9taXR0ZWQpLCAidGVzdCIpLCAib21pdHRlZDoiKQogICAgICAgICBwcmludGxpc3Qob21pdHRlZCkKLSAgICBpZiBnb29kIGFuZCBub3QgcXVpZXQ6CisgICAgaWYgZ29vZCBhbmQgbm90IG5zLnF1aWV0OgogICAgICAgICBpZiBub3QgYmFkIGFuZCBub3Qgc2tpcHBlZCBhbmQgbm90IGludGVycnVwdGVkIGFuZCBsZW4oZ29vZCkgPiAxOgogICAgICAgICAgICAgcHJpbnQoIkFsbCIsIGVuZD0nICcpCiAgICAgICAgIHByaW50KGNvdW50KGxlbihnb29kKSwgInRlc3QiKSwgIk9LLiIpCi0gICAgaWYgcHJpbnRfc2xvdzoKKyAgICBpZiBucy5wcmludF9zbG93OgogICAgICAgICB0ZXN0X3RpbWVzLnNvcnQocmV2ZXJzZT1UcnVlKQogICAgICAgICBwcmludCgiMTAgc2xvd2VzdCB0ZXN0czoiKQogICAgICAgICBmb3IgdGltZSwgdGVzdCBpbiB0ZXN0X3RpbWVzWzoxMF06CkBAIC03NjAsMzIgKzgwNiwxOSBAQAogICAgICAgICBwcmludCgie30gYWx0ZXJlZCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50OiIuZm9ybWF0KAogICAgICAgICAgICAgICAgICBjb3VudChsZW4oZW52aXJvbm1lbnRfY2hhbmdlZCksICJ0ZXN0IikpKQogICAgICAgICBwcmludGxpc3QoZW52aXJvbm1lbnRfY2hhbmdlZCkKLSAgICBpZiBza2lwcGVkIGFuZCBub3QgcXVpZXQ6CisgICAgaWYgc2tpcHBlZCBhbmQgbm90IG5zLnF1aWV0OgogICAgICAgICBwcmludChjb3VudChsZW4oc2tpcHBlZCksICJ0ZXN0IiksICJza2lwcGVkOiIpCiAgICAgICAgIHByaW50bGlzdChza2lwcGVkKQogCi0gICAgICAgIGUgPSBfRXhwZWN0ZWRTa2lwcygpCi0gICAgICAgIHBsYXQgPSBzeXMucGxhdGZvcm0KLSAgICAgICAgaWYgZS5pc3ZhbGlkKCk6Ci0gICAgICAgICAgICBzdXJwcmlzZSA9IHNldChza2lwcGVkKSAtIGUuZ2V0ZXhwZWN0ZWQoKSAtIHNldChyZXNvdXJjZV9kZW5pZWRzKQotICAgICAgICAgICAgaWYgc3VycHJpc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoY291bnQobGVuKHN1cnByaXNlKSwgInNraXAiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIG9uIiwgcGxhdCArICI6IikKLSAgICAgICAgICAgICAgICBwcmludGxpc3Qoc3VycHJpc2UpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KCJUaG9zZSBza2lwcyBhcmUgYWxsIGV4cGVjdGVkIG9uIiwgcGxhdCArICIuIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCJBc2sgc29tZW9uZSB0byB0ZWFjaCByZWdydGVzdC5weSBhYm91dCB3aGljaCB0ZXN0cyBhcmUiKQotICAgICAgICAgICAgcHJpbnQoImV4cGVjdGVkIHRvIGdldCBza2lwcGVkIG9uIiwgcGxhdCArICIuIikKLQotICAgIGlmIHZlcmJvc2UyIGFuZCBiYWQ6CisgICAgaWYgbnMudmVyYm9zZTIgYW5kIGJhZDoKICAgICAgICAgcHJpbnQoIlJlLXJ1bm5pbmcgZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZSIpCiAgICAgICAgIGZvciB0ZXN0IGluIGJhZDoKICAgICAgICAgICAgIHByaW50KCJSZS1ydW5uaW5nIHRlc3QgJXIgaW4gdmVyYm9zZSBtb2RlIiAlIHRlc3QpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB2ZXJib3NlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG9rID0gcnVudGVzdCh0ZXN0LCBUcnVlLCBxdWlldCwgaHVudHJsZWFrcywgZGVidWcsIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgICAgICAgICBucy52ZXJib3NlID0gVHJ1ZQorICAgICAgICAgICAgICAgIG9rID0gcnVudGVzdCh0ZXN0LCBUcnVlLCBucy5xdWlldCwgbnMuaHVudHJsZWFrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1ucy50aW1lb3V0KQogICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgICAgICMgcHJpbnQgYSBuZXdsaW5lIHNlcGFyYXRlIGZyb20gdGhlIF5DCiAgICAgICAgICAgICAgICAgcHJpbnQoKQpAQCAtNzkzLDE4ICs4MjYsMTggQEAKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICByYWlzZQogCi0gICAgaWYgc2luZ2xlOgorICAgIGlmIG5zLnNpbmdsZToKICAgICAgICAgaWYgbmV4dF9zaW5nbGVfdGVzdDoKICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3cnKSBhcyBmcDoKICAgICAgICAgICAgICAgICBmcC53cml0ZShuZXh0X3NpbmdsZV90ZXN0ICsgJ1xuJykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKIAotICAgIGlmIHRyYWNlOgorICAgIGlmIG5zLnRyYWNlOgogICAgICAgICByID0gdHJhY2VyLnJlc3VsdHMoKQotICAgICAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9Y292ZXJkaXIpCisgICAgICAgIHIud3JpdGVfcmVzdWx0cyhzaG93X21pc3Npbmc9VHJ1ZSwgc3VtbWFyeT1UcnVlLCBjb3ZlcmRpcj1ucy5jb3ZlcmRpcikKIAotICAgIGlmIHJ1bmxlYWtzOgorICAgIGlmIG5zLnJ1bmxlYWtzOgogICAgICAgICBvcy5zeXN0ZW0oImxlYWtzICVkIiAlIG9zLmdldHBpZCgpKQogCiAgICAgc3lzLmV4aXQobGVuKGJhZCkgPiAwIG9yIGludGVycnVwdGVkKQpAQCAtODc3LDcgKzkxMCw3IEBACiAgICAgYXRleGl0LnJlZ2lzdGVyKHJlc3RvcmVfc3Rkb3V0KQogCiBkZWYgcnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwKLSAgICAgICAgICAgIGh1bnRybGVha3M9RmFsc2UsIGRlYnVnPUZhbHNlLCB1c2VfcmVzb3VyY2VzPU5vbmUsCisgICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCB1c2VfcmVzb3VyY2VzPU5vbmUsCiAgICAgICAgICAgICBvdXRwdXRfb25fZmFpbHVyZT1GYWxzZSwgZmFpbGZhc3Q9RmFsc2UsIG1hdGNoX3Rlc3RzPU5vbmUsCiAgICAgICAgICAgICB0aW1lb3V0PU5vbmUpOgogICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0LgpAQCAtODg1LDE0ICs5MTgsMTUgQEAKICAgICB0ZXN0IC0tIHRoZSBuYW1lIG9mIHRoZSB0ZXN0CiAgICAgdmVyYm9zZSAtLSBpZiB0cnVlLCBwcmludCBtb3JlIG1lc3NhZ2VzCiAgICAgcXVpZXQgLS0gaWYgdHJ1ZSwgZG9uJ3QgcHJpbnQgJ3NraXBwZWQnIG1lc3NhZ2VzIChwcm9iYWJseSByZWR1bmRhbnQpCi0gICAgdGVzdF90aW1lcyAtLSBhIGxpc3Qgb2YgKHRpbWUsIHRlc3RfbmFtZSkgcGFpcnMKICAgICBodW50cmxlYWtzIC0tIHJ1biBtdWx0aXBsZSB0aW1lcyB0byB0ZXN0IGZvciBsZWFrczsgcmVxdWlyZXMgYSBkZWJ1ZwogICAgICAgICAgICAgICAgICAgYnVpbGQ7IGEgdHJpcGxlIGNvcnJlc3BvbmRpbmcgdG8gLVIncyB0aHJlZSBhcmd1bWVudHMKKyAgICB1c2VfcmVzb3VyY2VzIC0tIGxpc3Qgb2YgZXh0cmEgcmVzb3VyY2VzIHRvIHVzZQogICAgIG91dHB1dF9vbl9mYWlsdXJlIC0tIGlmIHRydWUsIGRpc3BsYXkgdGVzdCBvdXRwdXQgb24gZmFpbHVyZQogICAgIHRpbWVvdXQgLS0gZHVtcCB0aGUgdHJhY2ViYWNrIGFuZCBleGl0IGlmIGEgdGVzdCB0YWtlcyBtb3JlIHRoYW4KICAgICAgICAgICAgICAgIHRpbWVvdXQgc2Vjb25kcworICAgIGZhaWxmYXN0LCBtYXRjaF90ZXN0cyAtLSBTZWUgcmVncnRlc3QgY29tbWFuZC1saW5lIGZsYWdzIGZvciB0aGVzZS4KIAotICAgIFJldHVybnMgb25lIG9mIHRoZSB0ZXN0IHJlc3VsdCBjb25zdGFudHM6CisgICAgUmV0dXJucyB0aGUgdHVwbGUgcmVzdWx0LCB0ZXN0X3RpbWUsIHdoZXJlIHJlc3VsdCBpcyBvbmUgb2YgdGhlIGNvbnN0YW50czoKICAgICAgICAgSU5URVJSVVBURUQgICAgICBLZXlib2FyZEludGVycnVwdCB3aGVuIHJ1biB1bmRlciAtagogICAgICAgICBSRVNPVVJDRV9ERU5JRUQgIHRlc3Qgc2tpcHBlZCBiZWNhdXNlIHJlc291cmNlIGRlbmllZAogICAgICAgICBTS0lQUEVEICAgICAgICAgIHRlc3Qgc2tpcHBlZCBmb3Igc29tZSBvdGhlciByZWFzb24KQEAgLTkzMCw3ICs5NjQsNyBAQAogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdHJlYW0KICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyID0gc3RyZWFtCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnLCBkaXNwbGF5X2ZhaWx1cmU9RmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2ZhaWx1cmU9RmFsc2UpCiAgICAgICAgICAgICAgICAgaWYgcmVzdWx0WzBdID09IEZBSUxFRDoKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3RyZWFtLmdldHZhbHVlKCkKICAgICAgICAgICAgICAgICAgICAgb3JpZ19zdGRlcnIud3JpdGUob3V0cHV0KQpAQCAtOTQwLDcgKzk3NCw3IEBACiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyciA9IG9yaWdfc3RkZXJyCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdXBwb3J0LnZlcmJvc2UgPSB2ZXJib3NlICAjIFRlbGwgdGVzdHMgdG8gYmUgbW9kZXJhdGVseSBxdWlldAotICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcywgZGVidWcsCisgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2ZhaWx1cmU9bm90IHZlcmJvc2UpCiAgICAgICAgIHJldHVybiByZXN1bHQKICAgICBmaW5hbGx5OgpAQCAtOTkyLDEwICsxMDI2LDEyIEBACiAgICAgICAgICAgICAgICAgICdvcy5lbnZpcm9uJywgJ3N5cy5wYXRoJywgJ3N5cy5wYXRoX2hvb2tzJywgJ19faW1wb3J0X18nLAogICAgICAgICAgICAgICAgICAnd2FybmluZ3MuZmlsdGVycycsICdhc3luY29yZS5zb2NrZXRfbWFwJywKICAgICAgICAgICAgICAgICAgJ2xvZ2dpbmcuX2hhbmRsZXJzJywgJ2xvZ2dpbmcuX2hhbmRsZXJMaXN0JywgJ3N5cy5nZXR0cmFjZScsCi0gICAgICAgICAgICAgICAgICdzeXMud2Fybm9wdGlvbnMnLCAndGhyZWFkaW5nLl9kYW5nbGluZycsCi0gICAgICAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fZGFuZ2xpbmcnLAorICAgICAgICAgICAgICAgICAnc3lzLndhcm5vcHRpb25zJywKKyAgICAgICAgICAgICAgICAgIyBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fY2xlYW51cCgpIG1heSByZWxlYXNlIHJlZgorICAgICAgICAgICAgICAgICAjIHRvIGEgdGhyZWFkLCBzbyBjaGVjayBwcm9jZXNzZXMgZmlyc3QuCisgICAgICAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fZGFuZ2xpbmcnLCAndGhyZWFkaW5nLl9kYW5nbGluZycsCiAgICAgICAgICAgICAgICAgICdzeXNjb25maWcuX0NPTkZJR19WQVJTJywgJ3N5c2NvbmZpZy5fSU5TVEFMTF9TQ0hFTUVTJywKLSAgICAgICAgICAgICAgICAgJ3N1cHBvcnQuVEVTVEZOJywKKyAgICAgICAgICAgICAgICAgJ3N1cHBvcnQuVEVTVEZOJywgJ2xvY2FsZScsICd3YXJuaW5ncy5zaG93d2FybmluZycsCiAgICAgICAgICAgICAgICAgKQogCiAgICAgZGVmIGdldF9zeXNfYXJndihzZWxmKToKQEAgLTExMjMsNiArMTE1OSw4IEBACiAgICAgZGVmIGdldF9tdWx0aXByb2Nlc3NpbmdfcHJvY2Vzc19fZGFuZ2xpbmcoc2VsZik6CiAgICAgICAgIGlmIG5vdCBtdWx0aXByb2Nlc3Npbmc6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAjIFVuam9pbmVkIHByb2Nlc3Mgb2JqZWN0cyBjYW4gc3Vydml2ZSBhZnRlciBwcm9jZXNzIGV4aXRzCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9jbGVhbnVwKCkKICAgICAgICAgIyBUaGlzIGNvcGllcyB0aGUgd2Vha3JlZnMgd2l0aG91dCBtYWtpbmcgYW55IHN0cm9uZyByZWZlcmVuY2UKICAgICAgICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZy5jb3B5KCkKICAgICBkZWYgcmVzdG9yZV9tdWx0aXByb2Nlc3NpbmdfcHJvY2Vzc19fZGFuZ2xpbmcoc2VsZiwgc2F2ZWQpOgpAQCAtMTE2NCw2ICsxMjAyLDI1IEBACiAgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoc3VwcG9ydC5URVNURk4pOgogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc3VwcG9ydC5URVNURk4pCiAKKyAgICBfbGMgPSBbZ2V0YXR0cihsb2NhbGUsIGxjKSBmb3IgbGMgaW4gZGlyKGxvY2FsZSkKKyAgICAgICAgICAgaWYgbGMuc3RhcnRzd2l0aCgnTENfJyldCisgICAgZGVmIGdldF9sb2NhbGUoc2VsZik6CisgICAgICAgIHBhaXJpbmdzID0gW10KKyAgICAgICAgZm9yIGxjIGluIHNlbGYuX2xjOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhaXJpbmdzLmFwcGVuZCgobGMsIGxvY2FsZS5zZXRsb2NhbGUobGMsIE5vbmUpKSkKKyAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICByZXR1cm4gcGFpcmluZ3MKKyAgICBkZWYgcmVzdG9yZV9sb2NhbGUoc2VsZiwgc2F2ZWQpOgorICAgICAgICBmb3IgbGMsIHNldHRpbmcgaW4gc2F2ZWQ6CisgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxjLCBzZXR0aW5nKQorCisgICAgZGVmIGdldF93YXJuaW5nc19zaG93d2FybmluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHdhcm5pbmdzLnNob3d3YXJuaW5nCisgICAgZGVmIHJlc3RvcmVfd2FybmluZ3Nfc2hvd3dhcm5pbmcoc2VsZiwgZnhuKToKKyAgICAgICAgd2FybmluZ3Muc2hvd3dhcm5pbmcgPSBmeG4KKwogICAgIGRlZiByZXNvdXJjZV9pbmZvKHNlbGYpOgogICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLnJlc291cmNlczoKICAgICAgICAgICAgIG1ldGhvZF9zdWZmaXggPSBuYW1lLnJlcGxhY2UoJy4nLCAnXycpCkBAIC0xMTk4LDcgKzEyNTUsNyBAQAogCiAKIGRlZiBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LAotICAgICAgICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgZGVidWc9RmFsc2UsIGRpc3BsYXlfZmFpbHVyZT1UcnVlKToKKyAgICAgICAgICAgICAgICAgIGh1bnRybGVha3M9RmFsc2UsIGRpc3BsYXlfZmFpbHVyZT1UcnVlKToKICAgICBzdXBwb3J0LnVubG9hZCh0ZXN0KQogCiAgICAgdGVzdF90aW1lID0gMC4wCkBAIC0xMjExLDggKzEyNjgsNyBAQAogICAgICAgICAgICAgYWJzdGVzdCA9ICd0ZXN0LicgKyB0ZXN0CiAgICAgICAgIHdpdGggc2F2ZWRfdGVzdF9lbnZpcm9ubWVudCh0ZXN0LCB2ZXJib3NlLCBxdWlldCkgYXMgZW52aXJvbm1lbnQ6CiAgICAgICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIHRoZV9wYWNrYWdlID0gX19pbXBvcnRfXyhhYnN0ZXN0LCBnbG9iYWxzKCksIGxvY2FscygpLCBbXSkKLSAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBnZXRhdHRyKHRoZV9wYWNrYWdlLCB0ZXN0KQorICAgICAgICAgICAgdGhlX21vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKGFic3Rlc3QpCiAgICAgICAgICAgICAjIElmIHRoZSB0ZXN0IGhhcyBhIHRlc3RfbWFpbiwgdGhhdCB3aWxsIHJ1biB0aGUgYXBwcm9wcmlhdGUKICAgICAgICAgICAgICMgdGVzdHMuICBJZiBub3QsIHVzZSBub3JtYWwgdW5pdHRlc3QgdGVzdCBsb2FkaW5nLgogICAgICAgICAgICAgdGVzdF9ydW5uZXIgPSBnZXRhdHRyKHRoZV9tb2R1bGUsICJ0ZXN0X21haW4iLCBOb25lKQpAQCAtMTIyMSw4ICsxMjc3LDcgQEAKICAgICAgICAgICAgICAgICB0ZXN0X3J1bm5lciA9IGxhbWJkYTogc3VwcG9ydC5ydW5fdW5pdHRlc3QodGVzdHMpCiAgICAgICAgICAgICB0ZXN0X3J1bm5lcigpCiAgICAgICAgICAgICBpZiBodW50cmxlYWtzOgotICAgICAgICAgICAgICAgIHJlZmxlYWsgPSBkYXNoX1IodGhlX21vZHVsZSwgdGVzdCwgdGVzdF9ydW5uZXIsCi0gICAgICAgICAgICAgICAgICAgIGh1bnRybGVha3MpCisgICAgICAgICAgICAgICAgcmVmbGVhayA9IGRhc2hfUih0aGVfbW9kdWxlLCB0ZXN0LCB0ZXN0X3J1bm5lciwgaHVudHJsZWFrcykKICAgICAgICAgICAgIHRlc3RfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQogICAgIGV4Y2VwdCBzdXBwb3J0LlJlc291cmNlRGVuaWVkIGFzIG1zZzoKICAgICAgICAgaWYgbm90IHF1aWV0OgpAQCAtMTMyOSw0MSArMTM4NCw1MCBAQAogICAgICAgICBmb3Igb2JqIGluIGFiYy5fX3N1YmNsYXNzZXNfXygpICsgW2FiY106CiAgICAgICAgICAgICBhYmNzW29ial0gPSBvYmouX2FiY19yZWdpc3RyeS5jb3B5KCkKIAotICAgIGlmIGluZGlyZWN0X3Rlc3Q6Ci0gICAgICAgIGRlZiBydW5fdGhlX3Rlc3QoKToKLSAgICAgICAgICAgIGluZGlyZWN0X3Rlc3QoKQotICAgIGVsc2U6Ci0gICAgICAgIGRlZiBydW5fdGhlX3Rlc3QoKToKLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1t0aGVfbW9kdWxlLl9fbmFtZV9fXQotICAgICAgICAgICAgZXhlYygnaW1wb3J0ICcgKyB0aGVfbW9kdWxlLl9fbmFtZV9fKQotCi0gICAgZGVsdGFzID0gW10KICAgICBud2FybXVwLCBudHJhY2tlZCwgZm5hbWUgPSBodW50cmxlYWtzCiAgICAgZm5hbWUgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgZm5hbWUpCiAgICAgcmVwY291bnQgPSBud2FybXVwICsgbnRyYWNrZWQKKyAgICByY19kZWx0YXMgPSBbMF0gKiByZXBjb3VudAorICAgIGFsbG9jX2RlbHRhcyA9IFswXSAqIHJlcGNvdW50CisKICAgICBwcmludCgiYmVnaW5uaW5nIiwgcmVwY291bnQsICJyZXBldGl0aW9ucyIsIGZpbGU9c3lzLnN0ZGVycikKICAgICBwcmludCgoIjEyMzQ1Njc4OTAiKihyZXBjb3VudC8vMTAgKyAxKSlbOnJlcGNvdW50XSwgZmlsZT1zeXMuc3RkZXJyKQogICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgIGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCB6ZGMsIHpzYywgYWJjcykKICAgICBmb3IgaSBpbiByYW5nZShyZXBjb3VudCk6Ci0gICAgICAgIHJjX2JlZm9yZSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcnVuX3RoZV90ZXN0KCkKKyAgICAgICAgaW5kaXJlY3RfdGVzdCgpCisgICAgICAgIGFsbG9jX2FmdGVyLCByY19hZnRlciA9IGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCB6ZGMsIHpzYywgYWJjcykKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLicpCiAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCB6c2MsIGFiY3MpCi0gICAgICAgIHJjX2FmdGVyID0gc3lzLmdldHRvdGFscmVmY291bnQoKQogICAgICAgICBpZiBpID49IG53YXJtdXA6Ci0gICAgICAgICAgICBkZWx0YXMuYXBwZW5kKHJjX2FmdGVyIC0gcmNfYmVmb3JlKQorICAgICAgICAgICAgcmNfZGVsdGFzW2ldID0gcmNfYWZ0ZXIgLSByY19iZWZvcmUKKyAgICAgICAgICAgIGFsbG9jX2RlbHRhc1tpXSA9IGFsbG9jX2FmdGVyIC0gYWxsb2NfYmVmb3JlCisgICAgICAgIGFsbG9jX2JlZm9yZSwgcmNfYmVmb3JlID0gYWxsb2NfYWZ0ZXIsIHJjX2FmdGVyCiAgICAgcHJpbnQoZmlsZT1zeXMuc3RkZXJyKQotICAgIGlmIGFueShkZWx0YXMpOgotICAgICAgICBtc2cgPSAnJXMgbGVha2VkICVzIHJlZmVyZW5jZXMsIHN1bT0lcycgJSAodGVzdCwgZGVsdGFzLCBzdW0oZGVsdGFzKSkKLSAgICAgICAgcHJpbnQobXNnLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJhIikgYXMgcmVmcmVwOgotICAgICAgICAgICAgcHJpbnQobXNnLCBmaWxlPXJlZnJlcCkKLSAgICAgICAgICAgIHJlZnJlcC5mbHVzaCgpCi0gICAgICAgIHJldHVybiBUcnVlCi0gICAgcmV0dXJuIEZhbHNlCisgICAgIyBUaGVzZSBjaGVja2VycyByZXR1cm4gRmFsc2Ugb24gc3VjY2VzcywgVHJ1ZSBvbiBmYWlsdXJlCisgICAgZGVmIGNoZWNrX3JjX2RlbHRhcyhkZWx0YXMpOgorICAgICAgICByZXR1cm4gYW55KGRlbHRhcykKKyAgICBkZWYgY2hlY2tfYWxsb2NfZGVsdGFzKGRlbHRhcyk6CisgICAgICAgICMgQXQgbGVhc3QgMS8zcmQgb2YgMHMKKyAgICAgICAgaWYgMyAqIGRlbHRhcy5jb3VudCgwKSA8IGxlbihkZWx0YXMpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgIyBOb3RoaW5nIGVsc2UgdGhhbiAxcywgMHMgYW5kIC0xcworICAgICAgICBpZiBub3Qgc2V0KGRlbHRhcykgPD0gezEsMCwtMX06CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBmYWlsZWQgPSBGYWxzZQorICAgIGZvciBkZWx0YXMsIGl0ZW1fbmFtZSwgY2hlY2tlciBpbiBbCisgICAgICAgIChyY19kZWx0YXMsICdyZWZlcmVuY2VzJywgY2hlY2tfcmNfZGVsdGFzKSwKKyAgICAgICAgKGFsbG9jX2RlbHRhcywgJ21lbW9yeSBibG9ja3MnLCBjaGVja19hbGxvY19kZWx0YXMpXToKKyAgICAgICAgaWYgY2hlY2tlcihkZWx0YXMpOgorICAgICAgICAgICAgbXNnID0gJyVzIGxlYWtlZCAlcyAlcywgc3VtPSVzJyAlICgKKyAgICAgICAgICAgICAgICB0ZXN0LCBkZWx0YXNbbndhcm11cDpdLCBpdGVtX25hbWUsIHN1bShkZWx0YXMpKQorICAgICAgICAgICAgcHJpbnQobXNnLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihmbmFtZSwgImEiKSBhcyByZWZyZXA6CisgICAgICAgICAgICAgICAgcHJpbnQobXNnLCBmaWxlPXJlZnJlcCkKKyAgICAgICAgICAgICAgICByZWZyZXAuZmx1c2goKQorICAgICAgICAgICAgZmFpbGVkID0gVHJ1ZQorICAgIHJldHVybiBmYWlsZWQKIAogZGVmIGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCB6ZGMsIHpzYywgYWJjcyk6CiAgICAgaW1wb3J0IGdjLCBjb3B5cmVnCkBAIC0xNDMxLDggKzE0OTUsMTEgQEAKICAgICBlbHNlOgogICAgICAgICBjdHlwZXMuX3Jlc2V0X2NhY2hlKCkKIAotICAgICMgQ29sbGVjdCBjeWNsaWMgdHJhc2guCisgICAgIyBDb2xsZWN0IGN5Y2xpYyB0cmFzaCBhbmQgcmVhZCBtZW1vcnkgc3RhdGlzdGljcyBpbW1lZGlhdGVseSBhZnRlci4KKyAgICBmdW5jMSA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MKKyAgICBmdW5jMiA9IHN5cy5nZXR0b3RhbHJlZmNvdW50CiAgICAgZ2MuY29sbGVjdCgpCisgICAgcmV0dXJuIGZ1bmMxKCksIGZ1bmMyKCkKIAogZGVmIHdhcm1fY2FjaGVzKCk6CiAgICAgIyBjaGFyIGNhY2hlCkBAIC0xNDc1LDMwNyArMTU0MiwxMCBAQAogICAgIHByaW50KGZpbGwoJyAnLmpvaW4oc3RyKGVsdCkgZm9yIGVsdCBpbiBzb3J0ZWQoeCkpLCB3aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PWJsYW5rcywgc3Vic2VxdWVudF9pbmRlbnQ9YmxhbmtzKSkKIAotIyBNYXAgc3lzLnBsYXRmb3JtIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJhc2VuYW1lcyBvZiB0ZXN0cwotIyBleHBlY3RlZCB0byBiZSBza2lwcGVkIG9uIHRoYXQgcGxhdGZvcm0uCi0jCi0jIFNwZWNpYWwgY2FzZXM6Ci0jICAgICB0ZXN0X3BlcDI3NwotIyAgICAgICAgIFRoZSBfRXhwZWN0ZWRTa2lwcyBjb25zdHJ1Y3RvciBhZGRzIHRoaXMgdG8gdGhlIHNldCBvZiBleHBlY3RlZAotIyAgICAgICAgIHNraXBzIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzLgotIyAgICAgdGVzdF90aW1lb3V0Ci0jICAgICAgICAgQ29udHJvbGxlZCBieSB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZC4gIFJlcXVpcmVzIHRoZSBuZXR3b3JrCi0jICAgICAgICAgcmVzb3VyY2UgYW5kIGEgc29ja2V0IG1vZHVsZS4KLSMKLSMgVGVzdHMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgc2tpcHBlZCBldmVyeXdoZXJlIGV4Y2VwdCBvbiBvbmUgcGxhdGZvcm0KLSMgYXJlIGFsc28gaGFuZGxlZCBzZXBhcmF0ZWx5LgogCi1fZXhwZWN0YXRpb25zID0gKAotICAgICgnd2luMzInLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9fbG9jYWxlCi0gICAgICAgIHRlc3RfY3J5cHQKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kYm0KLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZmNudGwKLSAgICAgICAgdGVzdF9mb3JrMQotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2RibV9uZGJtCi0gICAgICAgIHRlc3RfZ3JwCi0gICAgICAgIHRlc3RfaW9jdGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9vcGVucHR5Ci0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9waXBlcwotICAgICAgICB0ZXN0X3BvbGwKLSAgICAgICAgdGVzdF9wb3NpeAotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3B3ZAotICAgICAgICB0ZXN0X3Jlc291cmNlCi0gICAgICAgIHRlc3Rfc2lnbmFsCi0gICAgICAgIHRlc3Rfc3lzbG9nCi0gICAgICAgIHRlc3RfdGhyZWFkc2lnbmFscwotICAgICAgICB0ZXN0X3dhaXQzCi0gICAgICAgIHRlc3Rfd2FpdDQKLSAgICAgICAgIiIiKSwKLSAgICAoJ2xpbnV4JywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgICIiIiksCi0gICAgKCd1bml4d2FyZScsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3Rfc3VuZHJ5Ci0gICAgICAgICIiIiksCi0gICAgKCdvcGVudW5peCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3Rfc3VuZHJ5Ci0gICAgICAgICIiIiksCi0gICAgKCdzY29fc3YnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9hc3luY2hhdAotICAgICAgICB0ZXN0X2ZvcmsxCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9nZXR0ZXh0Ci0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3RfcXVldWUKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF9zdW5kcnkKLSAgICAgICAgdGVzdF90aHJlYWQKLSAgICAgICAgdGVzdF90aHJlYWRlZF9pbXBvcnQKLSAgICAgICAgdGVzdF90aHJlYWRlZHRlbXBmaWxlCi0gICAgICAgIHRlc3RfdGhyZWFkaW5nCi0gICAgICAgICIiIiksCi0gICAgKCdkYXJ3aW4nLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9fbG9jYWxlCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2dkYgotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X21pbmlkb20KLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BvbGwKLSAgICAgICAgIiIiKSwKLSAgICAoJ3N1bm9zJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGJtCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfZ3ppcAotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF96aXBmaWxlCi0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnaHAtdXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3RfemlwZmlsZQotICAgICAgICB0ZXN0X3psaWIKLSAgICAgICAgIiIiKSwKLSAgICAoJ2N5Z3dpbicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RibQotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2lvY3RsCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9zb2NrZXRzZXJ2ZXIKLSAgICAgICAgIiIiKSwKLSAgICAoJ29zMmVteCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2F1ZGlvb3AKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X21tYXAKLSAgICAgICAgdGVzdF9vcGVucHR5Ci0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wdHkKLSAgICAgICAgdGVzdF9yZXNvdXJjZQotICAgICAgICB0ZXN0X3NpZ25hbAotICAgICAgICAiIiIpLAotICAgICgnZnJlZWJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BlcDI3NwotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3NvY2tldHNlcnZlcgotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF90aW1lb3V0Ci0gICAgICAgIHRlc3RfdXJsbGlibmV0Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0gICAgKCdhaXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9iejIKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfemlwaW1wb3J0Ci0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnb3BlbmJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N0eXBlcwotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9ub3JtYWxpemF0aW9uCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wZXAyNzcKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0gICAgKCduZXRic2QnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdHlwZXMKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wZXAyNzcKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0pCi0KLWNsYXNzIF9FeHBlY3RlZFNraXBzOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgaW1wb3J0IG9zLnBhdGgKLSAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3RpbWVvdXQKLQotICAgICAgICBzZWxmLnZhbGlkID0gRmFsc2UKLSAgICAgICAgZXhwZWN0ZWQgPSBOb25lCi0gICAgICAgIGZvciBpdGVtIGluIF9leHBlY3RhdGlvbnM6Ci0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aChpdGVtWzBdKToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGl0ZW1bMV0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBleHBlY3RlZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgPSBzZXQoZXhwZWN0ZWQuc3BsaXQoKSkKLQotICAgICAgICAgICAgIyBUaGVzZSBhcmUgYnJva2VuIHRlc3RzLCBmb3Igbm93IHNraXBwZWQgb24gZXZlcnkgcGxhdGZvcm0uCi0gICAgICAgICAgICAjIFhYWCBGaXggdGhlc2UhCi0gICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9uaXMnKQotCi0gICAgICAgICAgICAjIGV4cGVjdGVkIHRvIGJlIHNraXBwZWQgb24gZXZlcnkgcGxhdGZvcm0sIGV2ZW4gTGludXgKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3BlcDI3NycpCi0KLSAgICAgICAgICAgICMgZG9jdGVzdCwgcHJvZmlsZSBhbmQgY1Byb2ZpbGUgdGVzdHMgZmFpbCB3aGVuIHRoZSBjb2RlYyBmb3IgdGhlCi0gICAgICAgICAgICAjIGZzIGVuY29kaW5nIGlzbid0IGJ1aWx0IGluIGJlY2F1c2UgUHlVbmljb2RlX0RlY29kZSgpIGFkZHMgdHdvCi0gICAgICAgICAgICAjIGNhbGxzIGludG8gUHl0aG9uLgotICAgICAgICAgICAgZW5jcyA9ICgidXRmLTgiLCAibGF0aW4tMSIsICJhc2NpaSIsICJtYmNzIiwgInV0Zi0xNiIsICJ1dGYtMzIiKQotICAgICAgICAgICAgaWYgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpLmxvd2VyKCkgbm90IGluIGVuY3M6Ci0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfcHJvZmlsZScpCi0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfY1Byb2ZpbGUnKQotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X2RvY3Rlc3QnKQotCi0gICAgICAgICAgICBpZiB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZDoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF90aW1lb3V0JykKLQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6Ci0gICAgICAgICAgICAgICAgIyB0ZXN0X3NxbGl0ZSBpcyBvbmx5IHJlbGlhYmxlIG9uIFdpbmRvd3Mgd2hlcmUgdGhlIGxpYnJhcnkKLSAgICAgICAgICAgICAgICAjIGlzIGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uCi0gICAgICAgICAgICAgICAgV0lOX09OTFkgPSB7InRlc3RfdW5pY29kZV9maWxlIiwgInRlc3Rfd2lucmVnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF93aW5zb3VuZCIsICJ0ZXN0X3N0YXJ0ZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfc3FsaXRlIiwgInRlc3RfbXNpbGliIn0KLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkIHw9IFdJTl9PTkxZCi0KLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnc3Vub3M1JzoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9uaXMnKQotCi0gICAgICAgICAgICBpZiBzdXBwb3J0LnB5dGhvbl9pc19vcHRpbWl6ZWQoKToKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgidGVzdF9nZGIiKQotCi0gICAgICAgICAgICBzZWxmLnZhbGlkID0gVHJ1ZQotCi0gICAgZGVmIGlzdmFsaWQoc2VsZik6Ci0gICAgICAgICJSZXR1cm4gdHJ1ZSBpZmYgX0V4cGVjdGVkU2tpcHMga25vd3MgYWJvdXQgdGhlIGN1cnJlbnQgcGxhdGZvcm0uIgotICAgICAgICByZXR1cm4gc2VsZi52YWxpZAotCi0gICAgZGVmIGdldGV4cGVjdGVkKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gc2V0IG9mIHRlc3QgbmFtZXMgd2UgZXhwZWN0IHRvIHNraXAgb24gY3VycmVudCBwbGF0Zm9ybS4KLQotICAgICAgICBzZWxmLmlzdmFsaWQoKSBtdXN0IGJlIHRydWUuCi0gICAgICAgICIiIgotCi0gICAgICAgIGFzc2VydCBzZWxmLmlzdmFsaWQoKQotICAgICAgICByZXR1cm4gc2VsZi5leHBlY3RlZAotCi1kZWYgX21ha2VfdGVtcF9kaXJfZm9yX2J1aWxkKFRFTVBESVIpOgotICAgICMgV2hlbiB0ZXN0cyBhcmUgcnVuIGZyb20gdGhlIFB5dGhvbiBidWlsZCBkaXJlY3RvcnksIGl0IGlzIGJlc3QgcHJhY3RpY2UKLSAgICAjIHRvIGtlZXAgdGhlIHRlc3QgZmlsZXMgaW4gYSBzdWJmb2xkZXIuICBJdCBlYXNlcyB0aGUgY2xlYW51cCBvZiBsZWZ0b3ZlcgotICAgICMgZmlsZXMgdXNpbmcgY29tbWFuZCAibWFrZSBkaXN0Y2xlYW4iLgorZGVmIG1haW5faW5fdGVtcF9jd2QoKToKKyAgICAiIiJSdW4gbWFpbigpIGluIGEgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5LiIiIgogICAgIGlmIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKToKLSAgICAgICAgVEVNUERJUiA9IG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpLCAnYnVpbGQnKQotICAgICAgICBURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKFRFTVBESVIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKFRFTVBESVIpCiAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CkBAIC0xNzg0LDEwICsxNTU0LDE2IEBACiAgICAgIyBEZWZpbmUgYSB3cml0YWJsZSB0ZW1wIGRpciB0aGF0IHdpbGwgYmUgdXNlZCBhcyBjd2Qgd2hpbGUgcnVubmluZwogICAgICMgdGhlIHRlc3RzLiBUaGUgbmFtZSBvZiB0aGUgZGlyIGluY2x1ZGVzIHRoZSBwaWQgdG8gYWxsb3cgcGFyYWxsZWwKICAgICAjIHRlc3RpbmcgKHNlZSB0aGUgLWogb3B0aW9uKS4KLSAgICBURVNUQ1dEID0gJ3Rlc3RfcHl0aG9uX3t9Jy5mb3JtYXQob3MuZ2V0cGlkKCkpCisgICAgdGVzdF9jd2QgPSAndGVzdF9weXRob25fe30nLmZvcm1hdChvcy5nZXRwaWQoKSkKKyAgICB0ZXN0X2N3ZCA9IG9zLnBhdGguam9pbihURU1QRElSLCB0ZXN0X2N3ZCkKIAotICAgIFRFU1RDV0QgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgVEVTVENXRCkKLSAgICByZXR1cm4gVEVNUERJUiwgVEVTVENXRAorICAgICMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyaWx5IGNoYW5nZXMgdGhlIENXRCB0byBhCisgICAgIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgorICAgICMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiAgVGhlIG9yaWdpbmFsIENXRCBpcworICAgICMgYXZhaWxhYmxlIGZyb20gc3VwcG9ydC5TQVZFRENXRC4KKyAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGVzdF9jd2QsIHF1aWV0PVRydWUpOgorICAgICAgICBtYWluKCkKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICMgUmVtb3ZlIHJlZ3J0ZXN0LnB5J3Mgb3duIGRpcmVjdG9yeSBmcm9tIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGguIERlc3BpdGUKQEAgLTE4MTEsMTEgKzE1ODcsNCBAQAogICAgICMgc2FuaXR5IGNoZWNrCiAgICAgYXNzZXJ0IF9fZmlsZV9fID09IG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkKIAotICAgIFRFTVBESVIsIFRFU1RDV0QgPSBfbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQoVEVNUERJUikKLQotICAgICMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyeSBjaGFuZ2VzIHRoZSBDV0QgdG8gYQotICAgICMgdGVtcG9yYXJ5IGFuZCB3cml0YWJsZSBkaXJlY3RvcnkuIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgotICAgICMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiBUaGUgb3JpZ2luYWwgQ1dEIGlzCi0gICAgIyBhdmFpbGFibGUgZnJvbSBzdXBwb3J0LlNBVkVEQ1dELgotICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKLSAgICAgICAgbWFpbigpCisgICAgbWFpbl9pbl90ZW1wX2N3ZCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9yZXZvY2F0aW9uLmNybCBiL0xpYi90ZXN0L3Jldm9jYXRpb24uY3JsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODliMDgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9yZXZvY2F0aW9uLmNybApAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJwakNCandJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURCTk1Rc3dDUVlEVlFRR0V3SllXVEVtTUNRR0ExVUUKK0Nnd2RVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNGdRMEV4RmpBVUJnTlZCQU1NRFc5MWNpMWoKK1lTMXpaWEoyWlhJWERURXpNVEV5TVRFM01EZzBOMW9YRFRJek1Ea3pNREUzTURnME4xcWdEakFNTUFvR0ExVWQKK0ZBUURBZ0VBTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFDTkpYQzJtVkthdUVlTjNMbFEzWnRNNWdrSDNFeEgKKytpNGJtSmp0Sm40OTdXd3Z2b0llVWRybVZYZ0pRUjkzUnRWMzdoWndOMFNYTUxsTm1VWlBINHJIaGloYXl3NG0KK3VuQ3pWai9PaENDWTcvVFBqS3VKMU8vMFhoYUxCcEJWalFON1IvMXVqb1JLYlNpYS9DRDN2Y243RnF4enc3TEsKK2ZTUkNLUkdUajFDWml1eHJwaHRGY2h3QUxYU2lGRHk5bXIyWktoSW1jeXExUHlkZmdFelU3OEFQcE9rTVFzSUMKK1VOSi9jZjNjOWVtemYrZFV0Y01FY2VqUTNteW5CbzRlSUdnMUVXNDJiejRxNGhTanpRbEtjQlYwbXV3NXFYaGMKK0hPeEgyaVRGaFE3U3J2VnVLL2RNMTRyWU00QjVtU1gzblJDMWtObVhwUzlqM3dKRGh1d21qSGVkCistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5IGIvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQppbmRleCBhYjIwMTY0Li5hZjA1NDViIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5CisrKyBiL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkKQEAgLTEyLDEzICsxMiwyMiBAQAogaW1wb3J0IHNodXRpbAogaW1wb3J0IHppcGZpbGUKIAotZnJvbSBpbXAgaW1wb3J0IHNvdXJjZV9mcm9tX2NhY2hlCitmcm9tIGltcG9ydGxpYi51dGlsIGltcG9ydCBzb3VyY2VfZnJvbV9jYWNoZQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5Yywgc3RyaXBfcHl0aG9uX3N0ZGVyciwgdGVtcF9kaXIKIAogIyBFeGVjdXRpbmcgdGhlIGludGVycHJldGVyIGluIGEgc3VicHJvY2VzcwogZGVmIF9hc3NlcnRfcHl0aG9uKGV4cGVjdGVkX3N1Y2Nlc3MsICphcmdzLCAqKmVudl92YXJzKToKLSAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZV0KLSAgICBpZiBub3QgZW52X3ZhcnM6CisgICAgaWYgJ19faXNvbGF0ZWQnIGluIGVudl92YXJzOgorICAgICAgICBpc29sYXRlZCA9IGVudl92YXJzLnBvcCgnX19pc29sYXRlZCcpCisgICAgZWxzZToKKyAgICAgICAgaXNvbGF0ZWQgPSBub3QgZW52X3ZhcnMKKyAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1YJywgJ2ZhdWx0aGFuZGxlciddCisgICAgaWYgaXNvbGF0ZWQ6CisgICAgICAgICMgaXNvbGF0ZWQgbW9kZTogaWdub3JlIFB5dGhvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGlnbm9yZSB1c2VyCisgICAgICAgICMgc2l0ZS1wYWNrYWdlcywgYW5kIGRvbid0IGFkZCB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gc3lzLnBhdGgKKyAgICAgICAgY21kX2xpbmUuYXBwZW5kKCctSScpCisgICAgZWxpZiBub3QgZW52X3ZhcnM6CisgICAgICAgICMgaWdub3JlIFB5dGhvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgICAgICAgY21kX2xpbmUuYXBwZW5kKCctRScpCiAgICAgIyBOZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudCwgZm9yIGluLXBsYWNlIHRlc3Rpbmcgb2YKICAgICAjIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkcy4KQEAgLTM5LDcgKzQ4LDcgQEAKICAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQogICAgICAgICBwLnN0ZGVyci5jbG9zZSgpCiAgICAgcmMgPSBwLnJldHVybmNvZGUKLSAgICBlcnIgPSAgc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCisgICAgZXJyID0gc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCiAgICAgaWYgKHJjIGFuZCBleHBlY3RlZF9zdWNjZXNzKSBvciAobm90IHJjIGFuZCBub3QgZXhwZWN0ZWRfc3VjY2Vzcyk6CiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgIlByb2Nlc3MgcmV0dXJuIGNvZGUgaXMgJWQsICIKQEAgLTQ5LDE4ICs1OCwzMiBAQAogZGVmIGFzc2VydF9weXRob25fb2soKmFyZ3MsICoqZW52X3ZhcnMpOgogICAgICIiIgogICAgIEFzc2VydCB0aGF0IHJ1bm5pbmcgdGhlIGludGVycHJldGVyIHdpdGggYGFyZ3NgIGFuZCBvcHRpb25hbCBlbnZpcm9ubWVudAotICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGlzIG9rIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwgc3RkZXJyKSB0dXBsZS4KKyAgICB2YXJpYWJsZXMgYGVudl92YXJzYCBzdWNjZWVkcyAocmMgPT0gMCkgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LAorICAgIHN0ZGVycikgdHVwbGUuCisKKyAgICBJZiB0aGUgX19jbGVhbmVudiBrZXl3b3JkIGlzIHNldCwgZW52X3ZhcnMgaXMgdXNlZCBhIGZyZXNoIGVudmlyb25tZW50LgorCisgICAgUHl0aG9uIGlzIHN0YXJ0ZWQgaW4gaXNvbGF0ZWQgbW9kZSAoY29tbWFuZCBsaW5lIG9wdGlvbiAtSSksCisgICAgZXhjZXB0IGlmIHRoZSBfX2lzb2xhdGVkIGtleXdvcmQgaXMgc2V0IHRvIEZhbHNlLgogICAgICIiIgogICAgIHJldHVybiBfYXNzZXJ0X3B5dGhvbihUcnVlLCAqYXJncywgKiplbnZfdmFycykKIAogZGVmIGFzc2VydF9weXRob25fZmFpbHVyZSgqYXJncywgKiplbnZfdmFycyk6CiAgICAgIiIiCiAgICAgQXNzZXJ0IHRoYXQgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBgYXJnc2AgYW5kIG9wdGlvbmFsIGVudmlyb25tZW50Ci0gICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgZmFpbHMgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1cGxlLgorICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGZhaWxzIChyYyAhPSAwKSBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsCisgICAgc3RkZXJyKSB0dXBsZS4KKworICAgIFNlZSBhc3NlcnRfcHl0aG9uX29rKCkgZm9yIG1vcmUgb3B0aW9ucy4KICAgICAiIiIKICAgICByZXR1cm4gX2Fzc2VydF9weXRob24oRmFsc2UsICphcmdzLCAqKmVudl92YXJzKQogCiBkZWYgc3Bhd25fcHl0aG9uKCphcmdzLCAqKmt3KToKKyAgICAiIiJSdW4gYSBQeXRob24gc3VicHJvY2VzcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCisKKyAgICBrdyBpcyBleHRyYSBrZXl3b3JkIGFyZ3MgdG8gcGFzcyB0byBzdWJwcm9jZXNzLlBvcGVuLiBSZXR1cm5zIGEgUG9wZW4KKyAgICBvYmplY3QuCisgICAgIiIiCiAgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRSddCiAgICAgY21kX2xpbmUuZXh0ZW5kKGFyZ3MpCiAgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKQEAgLTY4LDYgKzkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3KQogCiBkZWYga2lsbF9weXRob24ocCk6CisgICAgIiIiUnVuIHRoZSBnaXZlbiBQb3BlbiBwcm9jZXNzIHVudGlsIGNvbXBsZXRpb24gYW5kIHJldHVybiBzdGRvdXQuIiIiCiAgICAgcC5zdGRpbi5jbG9zZSgpCiAgICAgZGF0YSA9IHAuc3Rkb3V0LnJlYWQoKQogICAgIHAuc3Rkb3V0LmNsb3NlKCkKQEAgLTc3LDggKzEwMSwxMCBAQAogICAgIHN1YnByb2Nlc3MuX2NsZWFudXAoKQogICAgIHJldHVybiBkYXRhCiAKLWRlZiBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSk6Ci0gICAgc2NyaXB0X2ZpbGVuYW1lID0gc2NyaXB0X2Jhc2VuYW1lK29zLmV4dHNlcCsncHknCitkZWYgbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UsIG9taXRfc3VmZml4PUZhbHNlKToKKyAgICBzY3JpcHRfZmlsZW5hbWUgPSBzY3JpcHRfYmFzZW5hbWUKKyAgICBpZiBub3Qgb21pdF9zdWZmaXg6CisgICAgICAgIHNjcmlwdF9maWxlbmFtZSArPSBvcy5leHRzZXAgKyAncHknCiAgICAgc2NyaXB0X25hbWUgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2Rpciwgc2NyaXB0X2ZpbGVuYW1lKQogICAgICMgVGhlIHNjcmlwdCBzaG91bGQgYmUgZW5jb2RlZCB0byBVVEYtOCwgdGhlIGRlZmF1bHQgc3RyaW5nIGVuY29kaW5nCiAgICAgc2NyaXB0X2ZpbGUgPSBvcGVuKHNjcmlwdF9uYW1lLCAndycsIGVuY29kaW5nPSd1dGYtOCcpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zb3J0cGVyZi5weSBiL0xpYi90ZXN0L3NvcnRwZXJmLnB5CmluZGV4IGFmN2MwYjQuLjkwNzIyZjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3NvcnRwZXJmLnB5CisrKyBiL0xpYi90ZXN0L3NvcnRwZXJmLnB5CkBAIC0yMiw3ICsyMiw3IEBACiAgICAgZm4gPSBvcy5wYXRoLmpvaW4odGQsICJyciUwNmQiICUgbikKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihmbiwgInJiIikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgciA9IHJhbmRvbS5yYW5kb20KICAgICAgICAgcmVzdWx0ID0gW3IoKSBmb3IgaSBpbiByYW5nZShuKV0KICAgICAgICAgdHJ5OgpAQCAtMzUsOSArMzUsOSBAQAogICAgICAgICAgICAgICAgIGlmIGZwOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm4pCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoImNhbid0IHdyaXRlIiwgZm4sICI6IiwgbXNnKQogICAgIGVsc2U6CiAgICAgICAgIHJlc3VsdCA9IG1hcnNoYWwubG9hZChmcCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NzbF9zZXJ2ZXJzLnB5IGIvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkKaW5kZXggODY4NjE1My4uNzU5YjNmNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkKKysrIGIvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc29jaywgYWRkciA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCiAgICAgICAgICAgICBzc2xjb25uID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9zaWRlPVRydWUpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICMgc29ja2V0IGVycm9ycyBhcmUgc2lsZW5jZWQgYnkgdGhlIGNhbGxlciwgcHJpbnQgdGhlbSBoZXJlCiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiR290IGFuIGVycm9yOlxuJXNcbiIgJSBlKQpAQCAtMTQ3LDkgKzE0NywxMSBAQAogICAgICAgICBzZWxmLnNlcnZlci5zaHV0ZG93bigpCiAKIAotZGVmIG1ha2VfaHR0cHNfc2VydmVyKGNhc2UsIGNlcnRmaWxlPUNFUlRGSUxFLCBob3N0PUhPU1QsIGhhbmRsZXJfY2xhc3M9Tm9uZSk6Ci0gICAgIyB3ZSBhc3N1bWUgdGhlIGNlcnRmaWxlIGNvbnRhaW5zIGJvdGggcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlCi0gICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCitkZWYgbWFrZV9odHRwc19zZXJ2ZXIoY2FzZSwgKiwgY29udGV4dD1Ob25lLCBjZXJ0ZmlsZT1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICBob3N0PUhPU1QsIGhhbmRsZXJfY2xhc3M9Tm9uZSk6CisgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAjIFdlIGFzc3VtZSB0aGUgY2VydGZpbGUgY29udGFpbnMgYm90aCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUKICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSkKICAgICBzZXJ2ZXIgPSBIVFRQU1NlcnZlclRocmVhZChjb250ZXh0LCBob3N0LCBoYW5kbGVyX2NsYXNzKQogICAgIGZsYWcgPSB0aHJlYWRpbmcuRXZlbnQoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3NsdGVzdHMucHkgYi9MaWIvdGVzdC9zc2x0ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBlZDIyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3Qvc3NsdGVzdHMucHkKQEAgLTAsMCArMSwyMiBAQAorIyBDb252ZW5pZW5jZSB0ZXN0IG1vZHVsZSB0byBydW4gYWxsIG9mIHRoZSBTU0wtcmVsYXRlZCB0ZXN0cyBpbiB0aGUKKyMgc3RhbmRhcmQgbGlicmFyeS4KKworaW1wb3J0IHN5cworaW1wb3J0IHN1YnByb2Nlc3MKKworVEVTVFMgPSBbJ3Rlc3RfYXN5bmNpbycsICd0ZXN0X2Z0cGxpYicsICd0ZXN0X2hhc2hsaWInLCAndGVzdF9odHRwbGliJywKKyAgICAgICAgICd0ZXN0X2ltYXBsaWInLCAndGVzdF9ubnRwbGliJywgJ3Rlc3RfcG9wbGliJywgJ3Rlc3Rfc210cGxpYicsCisgICAgICAgICAndGVzdF9zbXRwbmV0JywgJ3Rlc3RfdXJsbGliMl9sb2NhbG5ldCcsICd0ZXN0X3ZlbnYnXQorCitkZWYgcnVuX3JlZ3J0ZXN0cygqZXh0cmFfYXJncyk6CisgICAgYXJncyA9IFtzeXMuZXhlY3V0YWJsZSwgIi1tIiwgInRlc3QiXQorICAgIGlmIG5vdCBleHRyYV9hcmdzOgorICAgICAgICBhcmdzLmFwcGVuZCgiLXVuZXR3b3JrIikKKyAgICBlbHNlOgorICAgICAgICBhcmdzLmV4dGVuZChleHRyYV9hcmdzKQorICAgIGFyZ3MuZXh0ZW5kKFRFU1RTKQorICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2FsbChhcmdzKQorICAgIHN5cy5leGl0KHJlc3VsdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5fcmVncnRlc3RzKCpzeXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkgYi9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKaW5kZXggNDgwMGQ2ZC4uNWVkMDFmMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQpAQCAtMzI3LDEzICszMjcsMjYgQEAKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICd1cHBlcicsIDQyKQogCiAgICAgZGVmIHRlc3RfZXhwYW5kdGFicyhzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA4KQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDQpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICBkZWZcbmcgICBoaScsICdhYmNcclxuYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDQpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnKQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgOCkKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywgJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLCAnZXhwYW5kdGFicycsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCA4KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNcclxuYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNcclxuYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCA4KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYiAgZGVmXG5nICAgaGknLCAnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywgJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICAjIGNoZWNrIGtleXdvcmQgYXJncworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIHRhYnNpemU9OCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICBkZWZcbmcgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgdGFic2l6ZT00KQorCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnICBhXG4gYicsICcgXHRhXG5cdGInLCAnZXhwYW5kdGFicycsIDEpCiAKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdleHBhbmR0YWJzJywgNDIsIDQyKQpAQCAtMTE2NSw3ICsxMTc4LDggQEAKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnX19tb2RfXycpCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJShmb28pcycsICdfX21vZF9fJywgNDIpCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJXMlcycsICdfX21vZF9fJywgKDQyLCkpCi0gICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJWMnLCAnX19tb2RfXycsIChOb25lLCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclYycsICdfX21vZF9fJywgKE5vbmUsKSkKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnJShmb28nLCAnX19tb2RfXycsIHt9KQogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyUoZm9vKXMgJShiYXIpcycsICdfX21vZF9fJywgKCdmb28nLCA0MikpCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJWQnLCAnX19tb2RfXycsICI0MiIpICMgbm90IG51bWVyaWMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL2ZkX3N0YXR1cy5weSBiL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL2ZkX3N0YXR1cy5weQppbmRleCAxZjYxZTEzLi5kMTJiZDk1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkKKysrIGIvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5CkBAIC0xLDE3ICsxLDI3IEBACiAiIiJXaGVuIGNhbGxlZCBhcyBhIHNjcmlwdCwgcHJpbnQgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgb3BlbgotZmlsZSBkZXNjcmlwdG9ycyBvbiBzdGRvdXQuIiIiCitmaWxlIGRlc2NyaXB0b3JzIG9uIHN0ZG91dC4KKworVXNhZ2U6CitmZF9zdGF0cy5weTogY2hlY2sgYWxsIGZpbGUgZGVzY3JpcHRvcnMKK2ZkX3N0YXR1cy5weSBmZDEgZmQyIC4uLjogY2hlY2sgb25seSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9ycworIiIiCiAKIGltcG9ydCBlcnJubwogaW1wb3J0IG9zCi0KLXRyeToKLSAgICBfTUFYRkQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCi1leGNlcHQ6Ci0gICAgX01BWEZEID0gMjU2CitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGZkcyA9IFtdCi0gICAgZm9yIGZkIGluIHJhbmdlKDAsIF9NQVhGRCk6CisgICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfTUFYRkQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIF9NQVhGRCA9IDI1NgorICAgICAgICB0ZXN0X2ZkcyA9IHJhbmdlKDAsIF9NQVhGRCkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0X2ZkcyA9IG1hcChpbnQsIHN5cy5hcmd2WzE6XSkKKyAgICBmb3IgZmQgaW4gdGVzdF9mZHM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN0ID0gb3MuZnN0YXQoZmQpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CkBAIC0xOSw2ICsyOSw2IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICMgSWdub3JlIFNvbGFyaXMgZG9vciBmaWxlcwotICAgICAgICBpZiBzdC5zdF9tb2RlICYgMHhGMDAwICE9IDB4ZDAwMDoKKyAgICAgICAgaWYgbm90IHN0YXQuU19JU0RPT1Ioc3Quc3RfbW9kZSk6CiAgICAgICAgICAgICBmZHMuYXBwZW5kKGZkKQogICAgIHByaW50KCcsJy5qb2luKG1hcChzdHIsIGZkcykpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkKaW5kZXggNWMwM2Y1NC4uOTg1N2Y5ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5CkBAIC0xNSwxMCArMTUsMTAgQEAKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBjb2xsZWN0aW9ucy5hYmMKIGltcG9ydCByZQogaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBpbXAKIGltcG9ydCB0aW1lCiBpbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgZm5tYXRjaApAQCAtNTYsMjYgKzU2LDQ5IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbHptYSA9IE5vbmUKIAordHJ5OgorICAgIGltcG9ydCByZXNvdXJjZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHJlc291cmNlID0gTm9uZQorCiBfX2FsbF9fID0gWwotICAgICJFcnJvciIsICJUZXN0RmFpbGVkIiwgIlJlc291cmNlRGVuaWVkIiwgImltcG9ydF9tb2R1bGUiLCAidmVyYm9zZSIsCi0gICAgInVzZV9yZXNvdXJjZXMiLCAibWF4X21lbXVzZSIsICJyZWNvcmRfb3JpZ2luYWxfc3Rkb3V0IiwKLSAgICAiZ2V0X29yaWdpbmFsX3N0ZG91dCIsICJ1bmxvYWQiLCAidW5saW5rIiwgInJtdHJlZSIsICJmb3JnZXQiLAorICAgICMgZ2xvYmFscworICAgICJQSVBFX01BWF9TSVpFIiwgInZlcmJvc2UiLCAibWF4X21lbXVzZSIsICJ1c2VfcmVzb3VyY2VzIiwgImZhaWxmYXN0IiwKKyAgICAjIGV4Y2VwdGlvbnMKKyAgICAiRXJyb3IiLCAiVGVzdEZhaWxlZCIsICJSZXNvdXJjZURlbmllZCIsCisgICAgIyBpbXBvcnRzCisgICAgImltcG9ydF9tb2R1bGUiLCAiaW1wb3J0X2ZyZXNoX21vZHVsZSIsICJDbGVhbkltcG9ydCIsCisgICAgIyBtb2R1bGVzCisgICAgInVubG9hZCIsICJmb3JnZXQiLAorICAgICMgaW8KKyAgICAicmVjb3JkX29yaWdpbmFsX3N0ZG91dCIsICJnZXRfb3JpZ2luYWxfc3Rkb3V0IiwgImNhcHR1cmVkX3N0ZG91dCIsCisgICAgImNhcHR1cmVkX3N0ZGluIiwgImNhcHR1cmVkX3N0ZGVyciIsCisgICAgIyBmaWxlc3lzdGVtCisgICAgIlRFU1RGTiIsICJTQVZFRENXRCIsICJ1bmxpbmsiLCAicm10cmVlIiwgInRlbXBfY3dkIiwgImZpbmRmaWxlIiwKKyAgICAiY3JlYXRlX2VtcHR5X2ZpbGUiLCAiY2FuX3N5bWxpbmsiLCAiZnNfaXNfY2FzZV9pbnNlbnNpdGl2ZSIsCisgICAgIyB1bml0dGVzdAogICAgICJpc19yZXNvdXJjZV9lbmFibGVkIiwgInJlcXVpcmVzIiwgInJlcXVpcmVzX2ZyZWVic2RfdmVyc2lvbiIsCi0gICAgInJlcXVpcmVzX2xpbnV4X3ZlcnNpb24iLCAicmVxdWlyZXNfbWFjX3ZlciIsICJmaW5kX3VudXNlZF9wb3J0IiwKLSAgICAiYmluZF9wb3J0IiwgIklQVjZfRU5BQkxFRCIsICJpc19qeXRob24iLCAiVEVTVEZOIiwgIkhPU1QiLCAiU0FWRURDV0QiLAotICAgICJ0ZW1wX2N3ZCIsICJmaW5kZmlsZSIsICJjcmVhdGVfZW1wdHlfZmlsZSIsICJzb3J0ZGljdCIsCi0gICAgImNoZWNrX3N5bnRheF9lcnJvciIsICJvcGVuX3VybHJlc291cmNlIiwgImNoZWNrX3dhcm5pbmdzIiwgIkNsZWFuSW1wb3J0IiwKLSAgICAiRW52aXJvbm1lbnRWYXJHdWFyZCIsICJUcmFuc2llbnRSZXNvdXJjZSIsICJjYXB0dXJlZF9zdGRvdXQiLAotICAgICJjYXB0dXJlZF9zdGRpbiIsICJjYXB0dXJlZF9zdGRlcnIiLCAidGltZV9vdXQiLCAic29ja2V0X3BlZXJfcmVzZXQiLAotICAgICJpb2Vycm9yX3BlZXJfcmVzZXQiLCAicnVuX3dpdGhfbG9jYWxlIiwgJ3RlbXBfdW1hc2snLAotICAgICJ0cmFuc2llbnRfaW50ZXJuZXQiLCAic2V0X21lbWxpbWl0IiwgImJpZ21lbXRlc3QiLCAiYmlnYWRkcnNwYWNldGVzdCIsCi0gICAgIkJhc2ljVGVzdFJ1bm5lciIsICJydW5fdW5pdHRlc3QiLCAicnVuX2RvY3Rlc3QiLCAidGhyZWFkaW5nX3NldHVwIiwKLSAgICAidGhyZWFkaW5nX2NsZWFudXAiLCAicmVhcF9jaGlsZHJlbiIsICJjcHl0aG9uX29ubHkiLCAiY2hlY2tfaW1wbF9kZXRhaWwiLAotICAgICJnZXRfYXR0cmlidXRlIiwgInN3YXBfaXRlbSIsICJzd2FwX2F0dHIiLCAicmVxdWlyZXNfSUVFRV83NTQiLAotICAgICJUZXN0SGFuZGxlciIsICJNYXRjaGVyIiwgImNhbl9zeW1saW5rIiwgInNraXBfdW5sZXNzX3N5bWxpbmsiLAotICAgICJza2lwX3VubGVzc194YXR0ciIsICJpbXBvcnRfZnJlc2hfbW9kdWxlIiwgInJlcXVpcmVzX3psaWIiLAotICAgICJQSVBFX01BWF9TSVpFIiwgImZhaWxmYXN0IiwgImFudGljaXBhdGVfZmFpbHVyZSIsICJydW5fd2l0aF90eiIsCi0gICAgInJlcXVpcmVzX2d6aXAiLCAicmVxdWlyZXNfYnoyIiwgInJlcXVpcmVzX2x6bWEiLCAic3VwcHJlc3NfY3Jhc2hfcG9wdXAiLAorICAgICJyZXF1aXJlc19saW51eF92ZXJzaW9uIiwgInJlcXVpcmVzX21hY192ZXIiLCAiY2hlY2tfc3ludGF4X2Vycm9yIiwKKyAgICAiVHJhbnNpZW50UmVzb3VyY2UiLCAidGltZV9vdXQiLCAic29ja2V0X3BlZXJfcmVzZXQiLCAiaW9lcnJvcl9wZWVyX3Jlc2V0IiwKKyAgICAidHJhbnNpZW50X2ludGVybmV0IiwgIkJhc2ljVGVzdFJ1bm5lciIsICJydW5fdW5pdHRlc3QiLCAicnVuX2RvY3Rlc3QiLAorICAgICJza2lwX3VubGVzc19zeW1saW5rIiwgInJlcXVpcmVzX2d6aXAiLCAicmVxdWlyZXNfYnoyIiwgInJlcXVpcmVzX2x6bWEiLAorICAgICJiaWdtZW10ZXN0IiwgImJpZ2FkZHJzcGFjZXRlc3QiLCAiY3B5dGhvbl9vbmx5IiwgImdldF9hdHRyaWJ1dGUiLAorICAgICJyZXF1aXJlc19JRUVFXzc1NCIsICJza2lwX3VubGVzc194YXR0ciIsICJyZXF1aXJlc196bGliIiwKKyAgICAiYW50aWNpcGF0ZV9mYWlsdXJlIiwKKyAgICAjIHN5cworICAgICJpc19qeXRob24iLCAiY2hlY2tfaW1wbF9kZXRhaWwiLAorICAgICMgbmV0d29yaworICAgICJIT1NUIiwgIklQVjZfRU5BQkxFRCIsICJmaW5kX3VudXNlZF9wb3J0IiwgImJpbmRfcG9ydCIsICJvcGVuX3VybHJlc291cmNlIiwKKyAgICAjIHByb2Nlc3NlcworICAgICd0ZW1wX3VtYXNrJywgInJlYXBfY2hpbGRyZW4iLAorICAgICMgbG9nZ2luZworICAgICJUZXN0SGFuZGxlciIsCisgICAgIyB0aHJlYWRzCisgICAgInRocmVhZGluZ19zZXR1cCIsICJ0aHJlYWRpbmdfY2xlYW51cCIsCisgICAgIyBtaXNjZWxsYW5lb3VzCisgICAgImNoZWNrX3dhcm5pbmdzIiwgIkVudmlyb25tZW50VmFyR3VhcmQiLCAicnVuX3dpdGhfbG9jYWxlIiwgInN3YXBfaXRlbSIsCisgICAgInN3YXBfYXR0ciIsICJNYXRjaGVyIiwgInNldF9tZW1saW1pdCIsICJTdXBwcmVzc0NyYXNoUmVwb3J0IiwgInNvcnRkaWN0IiwKKyAgICAicnVuX3dpdGhfdHoiLAogICAgIF0KIAogY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKQEAgLTk3LDcgKzEyMCw4IEBACiAgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHN1cHByZXNzIHBhY2thZ2UgYW5kIG1vZHVsZSBkZXByZWNhdGlvbgogICAgIHdhcm5pbmdzIHdoZW4gaW1wb3J0aW5nIHRoZW0uCiAKLSAgICBJZiBpZ25vcmUgaXMgRmFsc2UsIHRoaXMgY29udGV4dCBtYW5hZ2VyIGhhcyBubyBlZmZlY3QuIiIiCisgICAgSWYgaWdub3JlIGlzIEZhbHNlLCB0aGlzIGNvbnRleHQgbWFuYWdlciBoYXMgbm8gZWZmZWN0LgorICAgICIiIgogICAgIGlmIGlnbm9yZToKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKyAobW9kdWxlfHBhY2thZ2UpIiwKQEAgLTEwNywxNiArMTMxLDIxIEBACiAgICAgICAgIHlpZWxkCiAKIAotZGVmIGltcG9ydF9tb2R1bGUobmFtZSwgZGVwcmVjYXRlZD1GYWxzZSk6CitkZWYgaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPUZhbHNlLCAqLCByZXF1aXJlZF9vbj0oKSk6CiAgICAgIiIiSW1wb3J0IGFuZCByZXR1cm4gdGhlIG1vZHVsZSB0byBiZSB0ZXN0ZWQsIHJhaXNpbmcgU2tpcFRlc3QgaWYKICAgICBpdCBpcyBub3QgYXZhaWxhYmxlLgogCiAgICAgSWYgZGVwcmVjYXRlZCBpcyBUcnVlLCBhbnkgbW9kdWxlIG9yIHBhY2thZ2UgZGVwcmVjYXRpb24gbWVzc2FnZXMKLSAgICB3aWxsIGJlIHN1cHByZXNzZWQuIiIiCisgICAgd2lsbCBiZSBzdXBwcmVzc2VkLiBJZiBhIG1vZHVsZSBpcyByZXF1aXJlZCBvbiBhIHBsYXRmb3JtIGJ1dCBvcHRpb25hbCBmb3IKKyAgICBvdGhlcnMsIHNldCByZXF1aXJlZF9vbiB0byBhbiBpdGVyYWJsZSBvZiBwbGF0Zm9ybSBwcmVmaXhlcyB3aGljaCB3aWxsIGJlCisgICAgY29tcGFyZWQgYWdhaW5zdCBzeXMucGxhdGZvcm0uCisgICAgIiIiCiAgICAgd2l0aCBfaWdub3JlX2RlcHJlY2F0ZWRfaW1wb3J0cyhkZXByZWNhdGVkKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCh0dXBsZShyZXF1aXJlZF9vbikpOgorICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChzdHIobXNnKSkKIAogCkBAIC0zMDIsMjUgKzMzMSwyMCBAQAogZGVmIHVubGluayhmaWxlbmFtZSk6CiAgICAgdHJ5OgogICAgICAgICBfdW5saW5rKGZpbGVuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICAjIFRoZSBmaWxlbmFtZSBuZWVkIG5vdCBleGlzdC4KLSAgICAgICAgaWYgZXJyb3IuZXJybm8gbm90IGluIChlcnJuby5FTk9FTlQsIGVycm5vLkVOT1RESVIpOgotICAgICAgICAgICAgcmFpc2UKKyAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBOb3RBRGlyZWN0b3J5RXJyb3IpOgorICAgICAgICBwYXNzCiAKIGRlZiBybWRpcihkaXJuYW1lKToKICAgICB0cnk6CiAgICAgICAgIF9ybWRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICAjIFRoZSBkaXJlY3RvcnkgbmVlZCBub3QgZXhpc3QuCi0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICBwYXNzCiAKIGRlZiBybXRyZWUocGF0aCk6CiAgICAgdHJ5OgogICAgICAgICBfcm10cmVlKHBhdGgpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICBwYXNzCiAKIGRlZiBtYWtlX2xlZ2FjeV9weWMoc291cmNlKToKICAgICAiIiJNb3ZlIGEgUEVQIDMxNDcgcHljL3B5byBmaWxlIHRvIGl0cyBsZWdhY3kgcHljL3B5byBsb2NhdGlvbi4KQEAgLTMzMiw3ICszNTYsNyBAQAogICAgICAgICBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0LCBob3dldmVyIHRoZSBQRVAgMzE0NyBweWMgZmlsZSBtdXN0IGV4aXN0LgogICAgIDpyZXR1cm46IFRoZSBmaWxlIHN5c3RlbSBwYXRoIHRvIHRoZSBsZWdhY3kgcHljIGZpbGUuCiAgICAgIiIiCi0gICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQorICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQogICAgIHVwX29uZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc291cmNlKSkKICAgICBsZWdhY3lfcHljID0gb3MucGF0aC5qb2luKHVwX29uZSwgc291cmNlICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpKQogICAgIG9zLnJlbmFtZShweWNfZmlsZSwgbGVnYWN5X3B5YykKQEAgLTM1MSw4ICszNzUsOCBAQAogICAgICAgICAjIGNvbWJpbmF0aW9ucyBvZiBQRVAgMzE0NyBhbmQgbGVnYWN5IHB5YyBhbmQgcHlvIGZpbGVzLgogICAgICAgICB1bmxpbmsoc291cmNlICsgJ2MnKQogICAgICAgICB1bmxpbmsoc291cmNlICsgJ28nKQotICAgICAgICB1bmxpbmsoaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCi0gICAgICAgIHVubGluayhpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCisgICAgICAgIHVubGluayhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPVRydWUpKQorICAgICAgICB1bmxpbmsoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCiAKICMgT24gc29tZSBwbGF0Zm9ybXMsIHNob3VsZCBub3QgcnVuIGd1aSB0ZXN0IGV2ZW4gaWYgaXQgaXMgYWxsb3dlZAogIyBpbiBgdXNlX3Jlc291cmNlcycuCkBAIC01MTMsNyArNTM3LDcgQEAKICAgICB0aGUgU09fUkVVU0VBRERSIHNvY2tldCBvcHRpb24gaGF2aW5nIGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gV2luZG93cyB2ZXJzdXMKICAgICBVbml4L0xpbnV4LiAgT24gVW5peCwgeW91IGNhbid0IGhhdmUgdHdvIEFGX0lORVQgU09DS19TVFJFQU0gc29ja2V0cyBiaW5kLAogICAgIGxpc3RlbiBhbmQgdGhlbiBhY2NlcHQgY29ubmVjdGlvbnMgb24gaWRlbnRpY2FsIGhvc3QvcG9ydHMuICBBbiBFQUREUklOVVNFCi0gICAgc29ja2V0LmVycm9yIHdpbGwgYmUgcmFpc2VkIGF0IHNvbWUgcG9pbnQgKGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gYW5kCisgICAgT1NFcnJvciB3aWxsIGJlIHJhaXNlZCBhdCBzb21lIHBvaW50IChkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIGFuZAogICAgIHRoZSBvcmRlciBiaW5kIGFuZCBsaXN0ZW4gd2VyZSBjYWxsZWQgb24gZWFjaCBzb2NrZXQpLgogCiAgICAgSG93ZXZlciwgb24gV2luZG93cywgaWYgU09fUkVVU0VBRERSIGlzIHNldCBvbiB0aGUgc29ja2V0cywgbm8gRUFERFJJTlVTRQpAQCAtNTkxLDkgKzYxNSw5IEBACiAgICAgICAgIHNvY2sgPSBOb25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICAgICAgc29jay5iaW5kKCgnOjoxJywgMCkpCisgICAgICAgICAgICBzb2NrLmJpbmQoKEhPU1R2NiwgMCkpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgc29ja2V0LmdhaWVycm9yKToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBzb2NrOgpAQCAtMTE4MCw5ICsxMjA0LDkgQEAKICMgQ29udGV4dCBtYW5hZ2VycyB0aGF0IHJhaXNlIFJlc291cmNlRGVuaWVkIHdoZW4gdmFyaW91cyBpc3N1ZXMKICMgd2l0aCB0aGUgSW50ZXJuZXQgY29ubmVjdGlvbiBtYW5pZmVzdCB0aGVtc2VsdmVzIGFzIGV4Y2VwdGlvbnMuCiAjIFhYWCBkZXByZWNhdGUgdGhlc2UgYW5kIHVzZSB0cmFuc2llbnRfaW50ZXJuZXQoKSBpbnN0ZWFkCi10aW1lX291dCA9IFRyYW5zaWVudFJlc291cmNlKElPRXJyb3IsIGVycm5vPWVycm5vLkVUSU1FRE9VVCkKLXNvY2tldF9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2Uoc29ja2V0LmVycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQotaW9lcnJvcl9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoSU9FcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKK3RpbWVfb3V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRVRJTUVET1VUKQorc29ja2V0X3BlZXJfcmVzZXQgPSBUcmFuc2llbnRSZXNvdXJjZShPU0Vycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQoraW9lcnJvcl9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKIAogCiBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgpAQCAtMTIyOCwxNyArMTI1MiwxNyBAQAogICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KHRpbWVvdXQpCiAgICAgICAgIHlpZWxkCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgIyB1cmxsaWIgY2FuIHdyYXAgb3JpZ2luYWwgc29ja2V0IGVycm9ycyBtdWx0aXBsZSB0aW1lcyAoISksIHdlIG11c3QKICAgICAgICAgIyB1bndyYXAgdG8gZ2V0IGF0IHRoZSBvcmlnaW5hbCBlcnJvci4KICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGEgPSBlcnIuYXJncwotICAgICAgICAgICAgaWYgbGVuKGEpID49IDEgYW5kIGlzaW5zdGFuY2UoYVswXSwgSU9FcnJvcik6CisgICAgICAgICAgICBpZiBsZW4oYSkgPj0gMSBhbmQgaXNpbnN0YW5jZShhWzBdLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBlcnIgPSBhWzBdCiAgICAgICAgICAgICAjIFRoZSBlcnJvciBjYW4gYWxzbyBiZSB3cmFwcGVkIGFzIGFyZ3NbMV06CiAgICAgICAgICAgICAjICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgIyAgICAgICAgcmFpc2UgSU9FcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKLSAgICAgICAgICAgIGVsaWYgbGVuKGEpID49IDIgYW5kIGlzaW5zdGFuY2UoYVsxXSwgSU9FcnJvcik6CisgICAgICAgICAgICAjICAgICAgICByYWlzZSBPU0Vycm9yKCdzb2NrZXQgZXJyb3InLCBtc2cpLndpdGhfdHJhY2ViYWNrKHN5cy5leGNfaW5mbygpWzJdKQorICAgICAgICAgICAgZWxpZiBsZW4oYSkgPj0gMiBhbmQgaXNpbnN0YW5jZShhWzFdLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBlcnIgPSBhWzFdCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xNjk3LDkgKzE3MjEsMTggQEAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGRvY3N0cmluZ3MuCiAKLUhBVkVfRE9DU1RSSU5HUyA9IChjaGVja19pbXBsX2RldGFpbChjcHl0aG9uPUZhbHNlKSBvcgotICAgICAgICAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yCi0gICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX0RPQ19TVFJJTkdTJykpCisjIFJhdGhlciB0aGFuIHRyeWluZyB0byBlbnVtZXJhdGUgYWxsIHRoZSBjYXNlcyB3aGVyZSBkb2NzdHJpbmdzIG1heSBiZQorIyBkaXNhYmxlZCwgd2UganVzdCBjaGVjayBmb3IgdGhhdCBkaXJlY3RseQorCitkZWYgX2NoZWNrX2RvY3N0cmluZ3MoKToKKyAgICAiIiJKdXN0IHVzZWQgdG8gY2hlY2sgaWYgZG9jc3RyaW5ncyBhcmUgZW5hYmxlZCIiIgorCitNSVNTSU5HX0NfRE9DU1RSSU5HUyA9IChjaGVja19pbXBsX2RldGFpbCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtICE9ICd3aW4zMicgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX0RPQ19TVFJJTkdTJykpCisKK0hBVkVfRE9DU1RSSU5HUyA9IChfY2hlY2tfZG9jc3RyaW5ncy5fX2RvY19fIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgIG5vdCBNSVNTSU5HX0NfRE9DU1RSSU5HUykKIAogcmVxdWlyZXNfZG9jc3RyaW5ncyA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9ET0NTVFJJTkdTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCkBAIC0xNzc0LDEyICsxODA3LDEyIEBACiBkZWYgdGhyZWFkaW5nX2NsZWFudXAoKm9yaWdpbmFsX3ZhbHVlcyk6CiAgICAgaWYgbm90IF90aHJlYWQ6CiAgICAgICAgIHJldHVybgotICAgIF9NQVhfQ09VTlQgPSAxMAorICAgIF9NQVhfQ09VTlQgPSAxMDAKICAgICBmb3IgY291bnQgaW4gcmFuZ2UoX01BWF9DT1VOVCk6CiAgICAgICAgIHZhbHVlcyA9IF90aHJlYWQuX2NvdW50KCksIHRocmVhZGluZy5fZGFuZ2xpbmcKICAgICAgICAgaWYgdmFsdWVzID09IG9yaWdpbmFsX3ZhbHVlczoKICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCiAgICAgICAgIGdjX2NvbGxlY3QoKQogICAgICMgWFhYIHByaW50IGEgd2FybmluZyBpbiBjYXNlIG9mIGZhaWx1cmU/CiAKQEAgLTE4ODEsNyArMTkxNCw3IEBACiAgICAgVGhpcyB3aWxsIHR5cGljYWxseSBiZSBydW4gb24gdGhlIHJlc3VsdCBvZiB0aGUgY29tbXVuaWNhdGUoKSBtZXRob2QKICAgICBvZiBhIHN1YnByb2Nlc3MuUG9wZW4gb2JqZWN0LgogICAgICIiIgotICAgIHN0ZGVyciA9IHJlLnN1YihiciJcW1xkKyByZWZzXF1ccj9cbj8iLCBiIiIsIHN0ZGVycikuc3RyaXAoKQorICAgIHN0ZGVyciA9IHJlLnN1YihiciJcW1xkKyByZWZzLCBcZCsgYmxvY2tzXF1ccj9cbj8iLCBiIiIsIHN0ZGVycikuc3RyaXAoKQogICAgIHJldHVybiBzdGRlcnIKIAogZGVmIGFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpOgpAQCAtMjAxMiwyNyArMjA0NSw4MSBAQAogICAgIHJldHVybiB0ZXN0IGlmIG9rIGVsc2UgdW5pdHRlc3Quc2tpcChtc2cpKHRlc3QpCiAKIAotaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gICAgZGVmIHN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgICIiIkRpc2FibGUgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZyBTZXRFcnJvck1vZGUuIiIiCi0gICAgICAgICMgc2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODA2MjElMjh2PXZzLjg1JTI5LmFzcHgKLSAgICAgICAgIyBHZXRFcnJvck1vZGUgaXMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzIFhQIGFuZCBXaW5kb3dzIFNlcnZlciAyMDAzLAotICAgICAgICAjIGJ1dCBTZXRFcnJvck1vZGUgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWUsIHNvIHdlIGNhbiB1c2UgdGhhdAotICAgICAgICBpbXBvcnQgY3R5cGVzCi0gICAgICAgIGszMiA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIKLSAgICAgICAgU0VNX05PR1BGQVVMVEVSUk9SQk9YID0gMHgwMgotICAgICAgICBvbGRfZXJyb3JfbW9kZSA9IGszMi5TZXRFcnJvck1vZGUoU0VNX05PR1BGQVVMVEVSUk9SQk9YKQotICAgICAgICBrMzIuU2V0RXJyb3JNb2RlKG9sZF9lcnJvcl9tb2RlIHwgU0VNX05PR1BGQVVMVEVSUk9SQk9YKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB5aWVsZAotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgazMyLlNldEVycm9yTW9kZShvbGRfZXJyb3JfbW9kZSkKLWVsc2U6Ci0gICAgIyB0aGlzIGlzIGEgbm8tb3AgZm9yIG90aGVyIHBsYXRmb3JtcwotICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gICAgZGVmIHN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgIHlpZWxkCitkZWYgZnNfaXNfY2FzZV9pbnNlbnNpdGl2ZShkaXJlY3RvcnkpOgorICAgICIiIkRldGVjdHMgaWYgdGhlIGZpbGUgc3lzdGVtIGZvciB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpcyBjYXNlLWluc2Vuc2l0aXZlLiIiIgorICAgIGJhc2VfZnAsIGJhc2VfcGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoZGlyPWRpcmVjdG9yeSkKKyAgICBjYXNlX3BhdGggPSBiYXNlX3BhdGgudXBwZXIoKQorICAgIGlmIGNhc2VfcGF0aCA9PSBiYXNlX3BhdGg6CisgICAgICAgIGNhc2VfcGF0aCA9IGJhc2VfcGF0aC5sb3dlcigpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gb3MucGF0aC5zYW1lZmlsZShiYXNlX3BhdGgsIGNhc2VfcGF0aCkKKyAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLnVubGluayhiYXNlX3BhdGgpCisKKworY2xhc3MgU3VwcHJlc3NDcmFzaFJlcG9ydDoKKyAgICAiIiJUcnkgdG8gcHJldmVudCBhIGNyYXNoIHJlcG9ydCBmcm9tIHBvcHBpbmcgdXAuCisKKyAgICBPbiBXaW5kb3dzLCBkb24ndCBkaXNwbGF5IHRoZSBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2cuICBPbiBVTklYLAorICAgIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIGNvcmVkdW1wIGZpbGUuCisgICAgIiIiCisgICAgb2xkX3ZhbHVlID0gTm9uZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgIiIiT24gV2luZG93cywgZGlzYWJsZSBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2dzIHVzaW5nCisgICAgICAgIFNldEVycm9yTW9kZS4KKworICAgICAgICBPbiBVTklYLCB0cnkgdG8gc2F2ZSB0aGUgcHJldmlvdXMgY29yZSBmaWxlIHNpemUgbGltaXQsIHRoZW4gc2V0CisgICAgICAgIHNvZnQgbGltaXQgdG8gMC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgICMgc2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODA2MjEuYXNweAorICAgICAgICAgICAgIyBHZXRFcnJvck1vZGUgaXMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzIFhQIGFuZCBXaW5kb3dzIFNlcnZlciAyMDAzLAorICAgICAgICAgICAgIyBidXQgU2V0RXJyb3JNb2RlIHJldHVybnMgdGhlIHByZXZpb3VzIHZhbHVlLCBzbyB3ZSBjYW4gdXNlIHRoYXQKKyAgICAgICAgICAgIGltcG9ydCBjdHlwZXMKKyAgICAgICAgICAgIHNlbGYuX2szMiA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIKKyAgICAgICAgICAgIFNFTV9OT0dQRkFVTFRFUlJPUkJPWCA9IDB4MDIKKyAgICAgICAgICAgIHNlbGYub2xkX3ZhbHVlID0gc2VsZi5fazMyLlNldEVycm9yTW9kZShTRU1fTk9HUEZBVUxURVJST1JCT1gpCisgICAgICAgICAgICBzZWxmLl9rMzIuU2V0RXJyb3JNb2RlKHNlbGYub2xkX3ZhbHVlIHwgU0VNX05PR1BGQVVMVEVSUk9SQk9YKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLm9sZF92YWx1ZSA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSkKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIHNlbGYub2xkX3ZhbHVlWzFdKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgJ0NyYXNoIFJlcG9ydGVyJyBvbiBPU1ggd2FzIGNvbmZpZ3VyZWQKKyAgICAgICAgICAgICAgICAjIGluICdEZXZlbG9wZXInIG1vZGUgYW5kIHdhcm4gdGhhdCBpdCB3aWxsIGdldCB0cmlnZ2VyZWQKKyAgICAgICAgICAgICAgICAjIHdoZW4gaXQgaXMuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgdXNlZCBpbiB0ZXN0cworICAgICAgICAgICAgICAgICMgdGhhdCBtaWdodCB0cmlnZ2VyIHRoZSBuZXh0IG1hbmFnZXIuCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdWJwcm9jZXNzLlBvcGVuKFsnL3Vzci9iaW4vZGVmYXVsdHMnLCAncmVhZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnY29tLmFwcGxlLkNyYXNoUmVwb3J0ZXInLCAnRGlhbG9nVHlwZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgICAgIGlmIHZhbHVlLnN0cmlwKCkgPT0gYidkZXZlbG9wZXInOgorICAgICAgICAgICAgICAgICAgICBwcmludCgidGhpcyB0ZXN0IHRyaWdnZXJzIHRoZSBDcmFzaCBSZXBvcnRlciwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAidGhhdCBpcyBpbnRlbnRpb25hbCIsIGVuZD0nJywgZmx1c2g9VHJ1ZSkKKworICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICppZ25vcmVfZXhjKToKKyAgICAgICAgIiIiUmVzdG9yZSBXaW5kb3dzIEVycm9yTW9kZSBvciBjb3JlIGZpbGUgYmVoYXZpb3IgdG8gaW5pdGlhbCB2YWx1ZS4iIiIKKyAgICAgICAgaWYgc2VsZi5vbGRfdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgIHNlbGYuX2szMi5TZXRFcnJvck1vZGUoc2VsZi5vbGRfdmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiByZXNvdXJjZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgc2VsZi5vbGRfdmFsdWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAKIGRlZiBwYXRjaCh0ZXN0X2luc3RhbmNlLCBvYmplY3RfdG9fcGF0Y2gsIGF0dHJfbmFtZSwgbmV3X3ZhbHVlKToKQEAgLTIwNjcsMyArMjE1NCwyMyBAQAogCiAgICAgIyBhY3R1YWxseSBvdmVycmlkZSB0aGUgYXR0cmlidXRlCiAgICAgc2V0YXR0cihvYmplY3RfdG9fcGF0Y2gsIGF0dHJfbmFtZSwgbmV3X3ZhbHVlKQorCisKK2RlZiBydW5faW5fc3ViaW50ZXJwKGNvZGUpOgorICAgICIiIgorICAgIFJ1biBjb2RlIGluIGEgc3ViaW50ZXJwcmV0ZXIuIFJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0IGlmIHRoZSB0cmFjZW1hbGxvYworICAgIG1vZHVsZSBpcyBlbmFibGVkLgorICAgICIiIgorICAgICMgSXNzdWUgIzEwOTE1LCAjMTU3NTE6IFB5R0lMU3RhdGVfKigpIGZ1bmN0aW9ucyBkb24ndCB3b3JrIHdpdGgKKyAgICAjIHN1Yi1pbnRlcnByZXRlcnMsIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgdXNlcyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJuYWxseQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHRyYWNlbWFsbG9jCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgaWYgdHJhY2VtYWxsb2MuaXNfdHJhY2luZygpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInJ1bl9pbl9zdWJpbnRlcnAoKSBjYW5ub3QgYmUgdXNlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlmIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyB0cmFjaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGFsbG9jYXRpb25zIikKKyAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgcmV0dXJuIF90ZXN0Y2FwaS5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkgYi9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkKaW5kZXggNjA4ZWMwMS4uOGNjMjg1ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQpAQCAtMjksMTcgKzI5LDIwIEBACiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHN5cy5tb2R1bGVzW21vZG5hbWVdLCAiX19hbGxfXyIpOgogICAgICAgICAgICAgcmFpc2UgTm9BbGwobW9kbmFtZSkKICAgICAgICAgbmFtZXMgPSB7fQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBleGVjKCJmcm9tICVzIGltcG9ydCAqIiAlIG1vZG5hbWUsIG5hbWVzKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAjIEluY2x1ZGUgdGhlIG1vZHVsZSBuYW1lIGluIHRoZSBleGNlcHRpb24gc3RyaW5nCi0gICAgICAgICAgICBzZWxmLmZhaWwoIl9fYWxsX18gZmFpbHVyZSBpbiB7fToge306IHt9Ii5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgZS5fX2NsYXNzX18uX19uYW1lX18sIGUpKQotICAgICAgICBpZiAiX19idWlsdGluc19fIiBpbiBuYW1lczoKLSAgICAgICAgICAgIGRlbCBuYW1lc1siX19idWlsdGluc19fIl0KLSAgICAgICAga2V5cyA9IHNldChuYW1lcykKLSAgICAgICAgYWxsID0gc2V0KHN5cy5tb2R1bGVzW21vZG5hbWVdLl9fYWxsX18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgYWxsKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtb2R1bGU9bW9kbmFtZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhlYygiZnJvbSAlcyBpbXBvcnQgKiIgJSBtb2RuYW1lLCBuYW1lcykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdGhlIG1vZHVsZSBuYW1lIGluIHRoZSBleGNlcHRpb24gc3RyaW5nCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2FsbF9fIGZhaWx1cmUgaW4ge306IHt9OiB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RuYW1lLCBlLl9fY2xhc3NfXy5fX25hbWVfXywgZSkpCisgICAgICAgICAgICBpZiAiX19idWlsdGluc19fIiBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICBkZWwgbmFtZXNbIl9fYnVpbHRpbnNfXyJdCisgICAgICAgICAgICBrZXlzID0gc2V0KG5hbWVzKQorICAgICAgICAgICAgYWxsX2xpc3QgPSBzeXMubW9kdWxlc1ttb2RuYW1lXS5fX2FsbF9fCisgICAgICAgICAgICBhbGxfc2V0ID0gc2V0KGFsbF9saXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKGFsbF9zZXQsIGFsbF9saXN0LCAiaW4gbW9kdWxlIHt9Ii5mb3JtYXQobW9kbmFtZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIGFsbF9zZXQsICJpbiBtb2R1bGUge30iLmZvcm1hdChtb2RuYW1lKSkKIAogICAgIGRlZiB3YWxrX21vZHVsZXMoc2VsZiwgYmFzZWRpciwgbW9kcGF0aCk6CiAgICAgICAgIGZvciBmbiBpbiBzb3J0ZWQob3MubGlzdGRpcihiYXNlZGlyKSk6CkBAIC0xMTAsOCArMTEzLDUgQEAKICAgICAgICAgICAgIHByaW50KCdGb2xsb3dpbmcgbW9kdWxlcyBmYWlsZWQgdG8gYmUgaW1wb3J0ZWQ6JywgZmFpbGVkX2ltcG9ydHMpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEFsbFRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfX29wY29kZS5weSBiL0xpYi90ZXN0L3Rlc3RfX29wY29kZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTUyZTlkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9fb3Bjb2RlLnB5CkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCBkaXMKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKK2ltcG9ydCB1bml0dGVzdAorCitfb3Bjb2RlID0gaW1wb3J0X21vZHVsZSgiX29wY29kZSIpCisKK2NsYXNzIE9wY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0YWNrX2VmZmVjdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfb3Bjb2RlLnN0YWNrX2VmZmVjdChkaXMub3BtYXBbJ1BPUF9UT1AnXSksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9vcGNvZGUuc3RhY2tfZWZmZWN0KGRpcy5vcG1hcFsnRFVQX1RPUF9UV08nXSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydCVUlMRF9TTElDRSddLCAwKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydCVUlMRF9TTElDRSddLCAxKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydCVUlMRF9TTElDRSddLCAzKSwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9vcGNvZGUuc3RhY2tfZWZmZWN0LCAzMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX29wY29kZS5zdGFja19lZmZlY3QsIGRpcy5vcG1hcFsnQlVJTERfU0xJQ0UnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX29wY29kZS5zdGFja19lZmZlY3QsIGRpcy5vcG1hcFsnUE9QX1RPUCddLCAwKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KE9wY29kZVRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FiYy5weSBiL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CmluZGV4IGQ0ZDc1NTYuLjkzZjlkYWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CkBAIC02OCw2ICs2OCwxOSBAQAogCiBjbGFzcyBUZXN0QUJDKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZXN0X0FCQ19oZWxwZXIoc2VsZik6CisgICAgICAgICMgY3JlYXRlIGFuIEFCQyB1c2luZyB0aGUgaGVscGVyIGNsYXNzIGFuZCBwZXJmb3JtIGJhc2ljIGNoZWNrcworICAgICAgICBjbGFzcyBDKGFiYy5BQkMpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKGNscyk6IHJldHVybiBjbHMuX19uYW1lX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKEMpLCBhYmMuQUJDTWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDKQorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKGNscyk6IHJldHVybiBzdXBlcigpLmZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5mb28oKSwgJ0QnKQorCiAgICAgZGVmIHRlc3RfYWJzdHJhY3RtZXRob2RfYmFzaWNzKHNlbGYpOgogICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgICAgIGRlZiBmb28oc2VsZik6IHBhc3MKQEAgLTI4OCw3ICszMDEsMTAgQEAKICAgICAgICAgYiA9IEIoKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoYiwgQSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShiLCAoQSwpKSkKKyAgICAgICAgdG9rZW5fb2xkID0gYWJjLmdldF9jYWNoZV90b2tlbigpCiAgICAgICAgIEEucmVnaXN0ZXIoQikKKyAgICAgICAgdG9rZW5fbmV3ID0gYWJjLmdldF9jYWNoZV90b2tlbigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodG9rZW5fb2xkLCB0b2tlbl9uZXcpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGIsIEEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiLCAoQSwpKSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9haWZjLnB5IGIvTGliL3Rlc3QvdGVzdF9haWZjLnB5CmluZGV4IDEwMjYwZTMuLmFiNTE0MzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWlmYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FpZmMucHkKQEAgLTEsNiArMSw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIFRFU1RGTiwgdW5saW5rCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgYXVkaW90ZXN0cworZnJvbSBhdWRpb29wIGltcG9ydCBieXRlc3dhcAogaW1wb3J0IG9zCiBpbXBvcnQgaW8KIGltcG9ydCBzeXMKQEAgLTExOSw3ICsxMjAsNyBAQAogICAgICAgRTUwNDBDQkMgNjE3QzBBM0MgMDhCQzBBM0MgMkM3QzBCM0MgNTE3QzBFM0MgOEE4NDEwRkMgQjY4NDBFQkMgNDU3QzBBM0MgXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXAyKGZyYW1lcykKKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAyKQogCiAKIGNsYXNzIEFpZmNBTEFXVGVzdChBaWZjVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTQwLDcgKzE0MSw3IEBACiAgICAgICBFNDgwMENDMCA2MjAwMEE0MCAwOEMwMEE0MCAyQjAwMEI0MCA1MjAwMEU0MCA4QTAwMTE4MCBCNjAwMEVDMCA0NjAwMEE0MCBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDIpCiAKIAogY2xhc3MgQWlmY01pc2NUZXN0KGF1ZGlvdGVzdHMuQXVkaW9UZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTQ5LDYgKzE1MCwyMSBAQAogICAgICAgICAjVGhpcyBmaWxlIGNvbnRhaW5zIGNodW5rIHR5cGVzIGFpZmMgZG9lc24ndCByZWNvZ25pemUuCiAgICAgICAgIHNlbGYuZiA9IGFpZmMub3BlbihmaW5kZmlsZSgnU2luZS0xMDAwSHotMzAwbXMuYWlmJykpCiAKKyAgICBkZWYgdGVzdF9wYXJhbXNfYWRkZWQoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oVEVTVEZOLCAnd2InKQorICAgICAgICBmLmFpZmYoKQorICAgICAgICBmLnNldHBhcmFtcygoMSwgMSwgMSwgMSwgYidOT05FJywgYicnKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihURVNURk4sICdyYicpCisgICAgICAgIHBhcmFtcyA9IGYuZ2V0cGFyYW1zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmNoYW5uZWxzLCBmLmdldG5jaGFubmVscygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5zYW1wd2lkdGgsIGYuZ2V0c2FtcHdpZHRoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmZyYW1lcmF0ZSwgZi5nZXRmcmFtZXJhdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmZyYW1lcywgZi5nZXRuZnJhbWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmNvbXB0eXBlLCBmLmdldGNvbXB0eXBlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmNvbXBuYW1lLCBmLmdldGNvbXBuYW1lKCkpCisKICAgICBkZWYgdGVzdF93cml0ZV9oZWFkZXJfY29tcHR5cGVfc2FtcHdpZHRoKHNlbGYpOgogICAgICAgICBmb3IgY29tcHR5cGUgaW4gKGInVUxBVycsIGIndWxhdycsIGInQUxBVycsIGInYWxhdycsIGInRzcyMicpOgogICAgICAgICAgICAgZm91dCA9IGFpZmMub3Blbihpby5CeXRlc0lPKCksICd3YicpCkBAIC0zNTIsMTIgKzM2OCwxNCBAQAogCiAgICAgZGVmIHRlc3Rfd3JpdGVfYWlmZl9ieV9leHRlbnNpb24oc2VsZik6CiAgICAgICAgIHNhbXB3aWR0aCA9IDIKLSAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihURVNURk4gKyAnLmFpZmYnLCAnd2InKQorICAgICAgICBmaWxlbmFtZSA9IFRFU1RGTiArICcuYWlmZicKKyAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihmaWxlbmFtZSwgJ3diJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgZmlsZW5hbWUpCiAgICAgICAgIGZvdXQuc2V0cGFyYW1zKCgxLCBzYW1wd2lkdGgsIDEsIDEsIGInVUxBVycsIGInJykpCiAgICAgICAgIGZyYW1lcyA9IGInXHgwMCcgKiBmb3V0LmdldG5jaGFubmVscygpICogc2FtcHdpZHRoCiAgICAgICAgIGZvdXQud3JpdGVmcmFtZXMoZnJhbWVzKQogICAgICAgICBmb3V0LmNsb3NlKCkKLSAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihURVNURk4gKyAnLmFpZmYnLCAncmInKQorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKGZpbGVuYW1lLCAncmInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0Y29tcHR5cGUoKSwgYidOT05FJykKICAgICAgICAgZi5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5CmluZGV4IDljYjE1YzcuLjI1YmE5ZTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQpAQCAtMTQsNiArMTQsNyBAQAogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCiBjbGFzcyBTdGRJT0J1ZmZlcihTdHJpbmdJTyk6CiAgICAgcGFzcwogCkBAIC0xNDIxLDYgKzE0MjIsMTkgQEAKICAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCd3YicsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCd3YicsIDEpIiwgcmVwcih0eXBlKSkKIAorICAgIGRlZiB0ZXN0X3JfbGF0aW4oc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgncicsIGVuY29kaW5nPSdsYXRpbl8xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3InLCBlbmNvZGluZz0nbGF0aW5fMScpIiwgcmVwcih0eXBlKSkKKworICAgIGRlZiB0ZXN0X3dfYmlnNV9pZ25vcmUoc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgndycsIGVuY29kaW5nPSdiaWc1JywgZXJyb3JzPSdpZ25vcmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgndycsIGVuY29kaW5nPSdiaWc1JywgZXJyb3JzPSdpZ25vcmUnKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcih0eXBlKSkKKworICAgIGRlZiB0ZXN0X3JfMV9yZXBsYWNlKHNlbGYpOgorICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3InLCAxLCBlcnJvcnM9J3JlcGxhY2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgncicsIDEsIGVycm9ycz0ncmVwbGFjZScpIiwgcmVwcih0eXBlKSkKKwogCiBjbGFzcyBSRmlsZShvYmplY3QpOgogICAgIHNlZW4gPSB7fQpAQCAtMTU1Nyw2ICsxNTcxLDI0IEBACiAgICAgXQogCiAKK2NsYXNzIFRlc3RGaWxlVHlwZU9wZW5BcmdzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgb3BlbiAodGhlIGJ1aWx0aW4pIGlzIGNvcnJlY3RseSBjYWxsZWQiIiIKKworICAgIGRlZiB0ZXN0X29wZW5fYXJncyhzZWxmKToKKyAgICAgICAgRlQgPSBhcmdwYXJzZS5GaWxlVHlwZQorICAgICAgICBjYXNlcyA9IFsKKyAgICAgICAgICAgIChGVCgncmInKSwgKCdyYicsIC0xLCBOb25lLCBOb25lKSksCisgICAgICAgICAgICAoRlQoJ3cnLCAxKSwgKCd3JywgMSwgTm9uZSwgTm9uZSkpLAorICAgICAgICAgICAgKEZUKCd3JywgZXJyb3JzPSdyZXBsYWNlJyksICgndycsIC0xLCBOb25lLCAncmVwbGFjZScpKSwKKyAgICAgICAgICAgIChGVCgnd2InLCBlbmNvZGluZz0nYmlnNScpLCAoJ3diJywgLTEsICdiaWc1JywgTm9uZSkpLAorICAgICAgICAgICAgKEZUKCd3JywgMCwgJ2wxJywgJ3N0cmljdCcpLCAoJ3cnLCAwLCAnbDEnLCAnc3RyaWN0JykpLAorICAgICAgICBdCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYnVpbHRpbnMub3BlbicpIGFzIG06CisgICAgICAgICAgICBmb3IgdHlwZSwgYXJncyBpbiBjYXNlczoKKyAgICAgICAgICAgICAgICB0eXBlKCdmb28nKQorICAgICAgICAgICAgICAgIG0uYXNzZXJ0X2NhbGxlZF93aXRoKCdmb28nLCAqYXJncykKKworCiBjbGFzcyBUZXN0VHlwZUNhbGxhYmxlKFBhcnNlclRlc3RDYXNlKToKICAgICAiIiJUZXN0IHNvbWUgY2FsbGFibGVzIGFzIG9wdGlvbi9hcmd1bWVudCB0eXBlcyIiIgogCkBAIC00MzgxLDcgKzQ0MTMsNyBAQAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fZm9ybWF0KHNlbGYpOgogICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUFAnKQogICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcnNpb24nLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSclKHByb2cpcyAzLjUnKQotICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLXYnXSkuc3RkZXJyCisgICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctdiddKS5zdGRvdXQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnUFBQIDMuNVxuJywgbXNnKQogCiAgICAgZGVmIHRlc3RfdmVyc2lvbl9ub19oZWxwKHNlbGYpOgpAQCAtNDM5NCw3ICs0NDI2LDcgQEAKICAgICBkZWYgdGVzdF92ZXJzaW9uX2FjdGlvbihzZWxmKToKICAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nWFhYJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLVYnLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSclKHByb2cpcyAzLjcnKQotICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLVYnXSkuc3RkZXJyCisgICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctViddKS5zdGRvdXQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnWFhYIDMuN1xuJywgbXNnKQogCiAgICAgZGVmIHRlc3Rfbm9faGVscChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkgYi9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CmluZGV4IGQ2ODI4NGYuLmY4ZGJmMDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hcnJheS5weQpAQCAtMzUzLDEyICszNTMsMTIgQEAKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfZnJvbWZpbGVfaW9lcnJvcihzZWxmKToKLSAgICAgICAgIyBJc3N1ZSAjNTM5NTogQ2hlY2sgaWYgZnJvbWZpbGUgcmFpc2VzIGEgcHJvcGVyIElPRXJyb3IKKyAgICAgICAgIyBJc3N1ZSAjNTM5NTogQ2hlY2sgaWYgZnJvbWZpbGUgcmFpc2VzIGEgcHJvcGVyIE9TRXJyb3IKICAgICAgICAgIyBpbnN0ZWFkIG9mIEVPRkVycm9yLgogICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGEuZnJvbWZpbGUsIGYsIGxlbihzZWxmLmV4YW1wbGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYS5mcm9tZmlsZSwgZiwgbGVuKHNlbGYuZXhhbXBsZSkpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQpAQCAtMTAyNiw2ICsxMDI2LDE4IEBACiAgICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjdm9ianNpemUoJ1BuMlBpJykKICAgICAgICAgc3VwcG9ydC5jaGVja19zaXplb2Yoc2VsZiwgYSwgYmFzZXNpemUpCiAKKyAgICBkZWYgdGVzdF9pbml0aWFsaXplX3dpdGhfdW5pY29kZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi50eXBlY29kZSAhPSAndSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsICdmb28nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiY2Fubm90IHVzZSBhIHN0ciIsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBhcnJheS5hcnJheSgndScsICdmb28nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImNhbm5vdCB1c2UgYSB1bmljb2RlIGFycmF5Iiwgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgImZvbyIpCisgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgYXJyYXkuYXJyYXkoJ3UnLCAnZm9vJykpCisKIAogY2xhc3MgU3RyaW5nVGVzdChCYXNlVGVzdCk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9hc3QucHkKaW5kZXggNjM1Mjg4OC4uZjE3YzkzZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3QucHkKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAjIEZ1bmN0aW9uRGVmIHdpdGgga3dhcmdzCiAgICAgImRlZiBmKCoqa3dhcmdzKTogcGFzcyIsCiAgICAgIyBGdW5jdGlvbkRlZiB3aXRoIGFsbCBraW5kIG9mIGFyZ3MKLSAgICAiZGVmIGYoYSwgYj0xLCBjPU5vbmUsIGQ9W10sIGU9e30sICphcmdzLCAqKmt3YXJncyk6IHBhc3MiLAorICAgICJkZWYgZihhLCBiPTEsIGM9Tm9uZSwgZD1bXSwgZT17fSwgKmFyZ3MsIGY9NDIsICoqa3dhcmdzKTogcGFzcyIsCiAgICAgIyBDbGFzc0RlZgogICAgICJjbGFzcyBDOnBhc3MiLAogICAgICMgQ2xhc3NEZWYsIG5ldyBzdHlsZSBjbGFzcwpAQCAtMTgwLDIwICsxODAsMzYgQEAKIAogY2xhc3MgQVNUX1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiBfYXNzZXJ0VHJ1ZW9yZGVyKHNlbGYsIGFzdF9ub2RlLCBwYXJlbnRfcG9zKToKKyAgICBkZWYgX2Fzc2VydFRydWVvcmRlcihzZWxmLCBhc3Rfbm9kZSwgcGFyZW50X3BvcywgcmV2ZXJzZV9jaGVjayA9IEZhbHNlKToKKyAgICAgICAgZGVmIHNob3VsZF9yZXZlcnNlX2NoZWNrKHBhcmVudCwgY2hpbGQpOgorICAgICAgICAgICAgIyBJbiBzb21lIHNpdHVhdGlvbnMsIHRoZSBjaGlsZHJlbiBvZiBub2RlcyBvY2N1ciBiZWZvcmUKKyAgICAgICAgICAgICMgdGhlaXIgcGFyZW50cywgZm9yIGV4YW1wbGUgaW4gYS5iLmMsIGEgb2NjdXJzIGJlZm9yZSBiCisgICAgICAgICAgICAjIGJ1dCBhIGlzIGEgY2hpbGQgb2YgYi4KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyZW50LCBhc3QuQ2FsbCk6CisgICAgICAgICAgICAgICAgaWYgcGFyZW50LmZ1bmMgPT0gY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmVudCwgKGFzdC5BdHRyaWJ1dGUsIGFzdC5TdWJzY3JpcHQpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXN0X25vZGUsIGFzdC5BU1QpIG9yIGFzdF9ub2RlLl9maWVsZHMgaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBpc2luc3RhbmNlKGFzdF9ub2RlLCAoYXN0LmV4cHIsIGFzdC5zdG10LCBhc3QuZXhjZXB0aGFuZGxlcikpOgogICAgICAgICAgICAgbm9kZV9wb3MgPSAoYXN0X25vZGUubGluZW5vLCBhc3Rfbm9kZS5jb2xfb2Zmc2V0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGVfcG9zID49IHBhcmVudF9wb3MpCisgICAgICAgICAgICBpZiByZXZlcnNlX2NoZWNrOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlX3BvcyA8PSBwYXJlbnRfcG9zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZV9wb3MgPj0gcGFyZW50X3BvcykKICAgICAgICAgICAgIHBhcmVudF9wb3MgPSAoYXN0X25vZGUubGluZW5vLCBhc3Rfbm9kZS5jb2xfb2Zmc2V0KQogICAgICAgICBmb3IgbmFtZSBpbiBhc3Rfbm9kZS5fZmllbGRzOgogICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKGFzdF9ub2RlLCBuYW1lKQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CiAgICAgICAgICAgICAgICAgZm9yIGNoaWxkIGluIHZhbHVlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIoY2hpbGQsIHBhcmVudF9wb3MpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcihjaGlsZCwgcGFyZW50X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkX3JldmVyc2VfY2hlY2soYXN0X25vZGUsIGNoaWxkKSkKICAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKHZhbHVlLCBwYXJlbnRfcG9zKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcih2YWx1ZSwgcGFyZW50X3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkX3JldmVyc2VfY2hlY2soYXN0X25vZGUsIHZhbHVlKSkKIAogICAgIGRlZiB0ZXN0X0FTVF9vYmplY3RzKHNlbGYpOgogICAgICAgICB4ID0gYXN0LkFTVCgpCkBAIC0yNjIsMTQgKzI3OCwxNCBAQAogCiAgICAgZGVmIHRlc3RfYXJndW1lbnRzKHNlbGYpOgogICAgICAgICB4ID0gYXN0LmFyZ3VtZW50cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fZmllbGRzLCAoJ2FyZ3MnLCAndmFyYXJnJywgJ3ZhcmFyZ2Fubm90YXRpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dvbmx5YXJncycsICdrd2FyZycsICdrd2FyZ2Fubm90YXRpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdHMnLCAna3dfZGVmYXVsdHMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9maWVsZHMsICgnYXJncycsICd2YXJhcmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dvbmx5YXJncycsICdrd19kZWZhdWx0cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd2FyZycsICdkZWZhdWx0cycpKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgeC52YXJhcmcKIAotICAgICAgICB4ID0gYXN0LmFyZ3VtZW50cygqcmFuZ2UoMSwgOSkpCisgICAgICAgIHggPSBhc3QuYXJndW1lbnRzKCpyYW5nZSgxLCA3KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhcmFyZywgMikKIAogICAgIGRlZiB0ZXN0X2ZpZWxkX2F0dHJfd3JpdGFibGUoc2VsZik6CkBAIC00MzksNyArNDU1LDcgQEAKICAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD0wKSwgYXJncz1bTmFtZShpZD0nZWdncycsIGN0eD1Mb2FkKCksICIKICAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD01KSwgU3RyKHM9J2FuZCBjaGVlc2UnLCBsaW5lbm89MSwgIgogICAgICAgICAgICAgImNvbF9vZmZzZXQ9MTEpXSwga2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lLCAiCi0gICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApXSkiCisgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9NCksIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApXSkiCiAgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X2NvcHlfbG9jYXRpb24oc2VsZik6CkBAIC00NjAsNyArNDc2LDcgQEAKICAgICAgICAgICAgICJNb2R1bGUoYm9keT1bRXhwcih2YWx1ZT1DYWxsKGZ1bmM9TmFtZShpZD0nd3JpdGUnLCBjdHg9TG9hZCgpLCAiCiAgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksIGFyZ3M9W1N0cihzPSdzcGFtJywgbGluZW5vPTEsICIKICAgICAgICAgICAgICJjb2xfb2Zmc2V0PTYpXSwga2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lLCAiCi0gICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCAiCisgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9NSksIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCAiCiAgICAgICAgICAgICAiRXhwcih2YWx1ZT1DYWxsKGZ1bmM9TmFtZShpZD0nc3BhbScsIGN0eD1Mb2FkKCksIGxpbmVubz0xLCAiCiAgICAgICAgICAgICAiY29sX29mZnNldD0wKSwgYXJncz1bU3RyKHM9J2VnZ3MnLCBsaW5lbm89MSwgY29sX29mZnNldD0wKV0sICIKICAgICAgICAgICAgICJrZXl3b3Jkcz1bXSwgc3RhcmFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUsIGxpbmVubz0xLCAiCkBAIC01NjAsOCArNTc2LDggQEAKICAgICAgICAgc2VsZi5tb2QobSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiLCAiZXZhbCIpCiAKICAgICBkZWYgX2NoZWNrX2FyZ3VtZW50cyhzZWxmLCBmYWMsIGNoZWNrKToKLSAgICAgICAgZGVmIGFyZ3VtZW50cyhhcmdzPU5vbmUsIHZhcmFyZz1Ob25lLCB2YXJhcmdhbm5vdGF0aW9uPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncz1Ob25lLCBrd2FyZz1Ob25lLCBrd2FyZ2Fubm90YXRpb249Tm9uZSwKKyAgICAgICAgZGVmIGFyZ3VtZW50cyhhcmdzPU5vbmUsIHZhcmFyZz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3M9Tm9uZSwga3dhcmc9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cz1Ob25lLCBrd19kZWZhdWx0cz1Ob25lKToKICAgICAgICAgICAgIGlmIGFyZ3MgaXMgTm9uZToKICAgICAgICAgICAgICAgICBhcmdzID0gW10KQEAgLTU3MSwyMCArNTg3LDEyIEBACiAgICAgICAgICAgICAgICAgZGVmYXVsdHMgPSBbXQogICAgICAgICAgICAgaWYga3dfZGVmYXVsdHMgaXMgTm9uZToKICAgICAgICAgICAgICAgICBrd19kZWZhdWx0cyA9IFtdCi0gICAgICAgICAgICBhcmdzID0gYXN0LmFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIHZhcmFyZ2Fubm90YXRpb24sIGt3b25seWFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZywga3dhcmdhbm5vdGF0aW9uLCBkZWZhdWx0cywga3dfZGVmYXVsdHMpCisgICAgICAgICAgICBhcmdzID0gYXN0LmFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIGt3b25seWFyZ3MsIGt3X2RlZmF1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmcsIGRlZmF1bHRzKQogICAgICAgICAgICAgcmV0dXJuIGZhYyhhcmdzKQogICAgICAgICBhcmdzID0gW2FzdC5hcmcoIngiLCBhc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSldCiAgICAgICAgIGNoZWNrKGFyZ3VtZW50cyhhcmdzPWFyZ3MpLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCi0gICAgICAgIGNoZWNrKGFyZ3VtZW50cyh2YXJhcmdhbm5vdGF0aW9uPWFzdC5OdW0oMykpLAotICAgICAgICAgICAgICAidmFyYXJnYW5ub3RhdGlvbiBidXQgbm8gdmFyYXJnIikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKHZhcmFyZ2Fubm90YXRpb249YXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSksIHZhcmFyZz0ieCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKICAgICAgICAgY2hlY2soYXJndW1lbnRzKGt3b25seWFyZ3M9YXJncyksICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKGt3YXJnYW5ub3RhdGlvbj1hc3QuTnVtKDQyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICJrd2FyZ2Fubm90YXRpb24gYnV0IG5vIGt3YXJnIikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKGt3YXJnYW5ub3RhdGlvbj1hc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmc9IngiKSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogICAgICAgICBjaGVjayhhcmd1bWVudHMoZGVmYXVsdHM9W2FzdC5OdW0oMyldKSwKICAgICAgICAgICAgICAgICAgICAgICAgIm1vcmUgcG9zaXRpb25hbCBkZWZhdWx0cyB0aGFuIGFyZ3MiKQogICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dfZGVmYXVsdHM9W2FzdC5OdW0oNCldKSwKQEAgLTU5OSw3ICs2MDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAKICAgICBkZWYgdGVzdF9mdW5jZGVmKHNlbGYpOgotICAgICAgICBhID0gYXN0LmFyZ3VtZW50cyhbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSkKKyAgICAgICAgYSA9IGFzdC5hcmd1bWVudHMoW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pCiAgICAgICAgIGYgPSBhc3QuRnVuY3Rpb25EZWYoIngiLCBhLCBbXSwgW10sIE5vbmUpCiAgICAgICAgIHNlbGYuc3RtdChmLCAiZW1wdHkgYm9keSBvbiBGdW5jdGlvbkRlZiIpCiAgICAgICAgIGYgPSBhc3QuRnVuY3Rpb25EZWYoIngiLCBhLCBbYXN0LlBhc3MoKV0sIFthc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKV0sCkBAIC03NzAsNyArNzc4LDcgQEAKICAgICAgICAgc2VsZi5leHByKHUsICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKIAogICAgIGRlZiB0ZXN0X2xhbWJkYShzZWxmKToKLSAgICAgICAgYSA9IGFzdC5hcmd1bWVudHMoW10sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pCisgICAgICAgIGEgPSBhc3QuYXJndW1lbnRzKFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKQogICAgICAgICBzZWxmLmV4cHIoYXN0LkxhbWJkYShhLCBhc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSksCiAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAgICAgICAgIGRlZiBmYWMoYXJncyk6CkBAIC05MjgsNiArOTM2LDkgQEAKICAgICBkZWYgdGVzdF90dXBsZShzZWxmKToKICAgICAgICAgc2VsZi5fc2VxdWVuY2UoYXN0LlR1cGxlKQogCisgICAgZGVmIHRlc3RfbmFtZWNvbnN0YW50KHNlbGYpOgorICAgICAgICBzZWxmLmV4cHIoYXN0Lk5hbWVDb25zdGFudCg0KSwgInNpbmdsZXRvbiBtdXN0IGJlIFRydWUsIEZhbHNlLCBvciBOb25lIikKKwogICAgIGRlZiB0ZXN0X3N0ZGxpYl92YWxpZGF0ZXMoc2VsZik6CiAgICAgICAgIHN0ZGxpYiA9IG9zLnBhdGguZGlybmFtZShhc3QuX19maWxlX18pCiAgICAgICAgIHRlc3RzID0gW2ZuIGZvciBmbiBpbiBvcy5saXN0ZGlyKHN0ZGxpYikgaWYgZm4uZW5kc3dpdGgoIi5weSIpXQpAQCAtOTM2LDEzICs5NDcsMTAgQEAKICAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHN0ZGxpYiwgbW9kdWxlKQogICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGZwOgogICAgICAgICAgICAgICAgIHNvdXJjZSA9IGZwLnJlYWQoKQotICAgICAgICAgICAgbW9kID0gYXN0LnBhcnNlKHNvdXJjZSkKKyAgICAgICAgICAgIG1vZCA9IGFzdC5wYXJzZShzb3VyY2UsIGZuKQogICAgICAgICAgICAgY29tcGlsZShtb2QsIGZuLCAiZXhlYyIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEFTVF9UZXN0cywgQVNUSGVscGVyc19UZXN0LCBBU1RWYWxpZGF0b3JUZXN0cykKLQogZGVmIG1haW4oKToKICAgICBpZiBfX25hbWVfXyAhPSAnX19tYWluX18nOgogICAgICAgICByZXR1cm4KQEAgLTk1NSwyMCArOTYzLDIwIEBACiAgICAgICAgICAgICBwcmludCgiXSIpCiAgICAgICAgIHByaW50KCJtYWluKCkiKQogICAgICAgICByYWlzZSBTeXN0ZW1FeGl0Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKIAogIyMjIyBFVkVSWVRISU5HIEJFTE9XIElTIEdFTkVSQVRFRCAjIyMjIwogZXhlY19yZXN1bHRzID0gWwotKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdOb25lJywgKCdMb2FkJywpKSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgOSkpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgJ2EnLCBOb25lKV0sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCBbKCdQYXNzJywgKDEsIDEwKSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAnYScsIE5vbmUpXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFsoJ051bScsICgxLCA4KSwgMCldLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTIpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCAnYXJncycsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCBbKCdQYXNzJywgKDEsIDE0KSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sICdrd2FyZ3MnLCBOb25lLCBbXSwgW10pLCBbKCdQYXNzJywgKDEsIDE3KSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAnYScsIE5vbmUpLCAoJ2FyZycsICdiJywgTm9uZSksICgnYXJnJywgJ2MnLCBOb25lKSwgKCdhcmcnLCAnZCcsIE5vbmUpLCAoJ2FyZycsICdlJywgTm9uZSldLCAnYXJncycsIE5vbmUsIFtdLCAna3dhcmdzJywgTm9uZSwgWygnTnVtJywgKDEsIDExKSwgMSksICgnTmFtZScsICgxLCAxNiksICdOb25lJywgKCdMb2FkJywpKSwgKCdMaXN0JywgKDEsIDI0KSwgW10sICgnTG9hZCcsKSksICgnRGljdCcsICgxLCAzMCksIFtdLCBbXSldLCBbXSksIFsoJ1Bhc3MnLCAoMSwgNTIpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ05hbWVDb25zdGFudCcsICgxLCAwKSwgTm9uZSkpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDkpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICgxLCA2KSwgJ2EnLCBOb25lKV0sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDEwKSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAoMSwgNiksICdhJywgTm9uZSldLCBOb25lLCBbXSwgW10sIE5vbmUsIFsoJ051bScsICgxLCA4KSwgMCldKSwgWygnUGFzcycsICgxLCAxMikpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sICgnYXJnJywgKDEsIDcpLCAnYXJncycsIE5vbmUpLCBbXSwgW10sIE5vbmUsIFtdKSwgWygnUGFzcycsICgxLCAxNCkpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIFtdLCBbXSwgKCdhcmcnLCAoMSwgOCksICdrd2FyZ3MnLCBOb25lKSwgW10pLCBbKCdQYXNzJywgKDEsIDE3KSldLCBbXSwgTm9uZSldKSwKKyAgICAoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgKDEsIDYpLCAnYScsIE5vbmUpLCAoJ2FyZycsICgxLCA5KSwgJ2InLCBOb25lKSwgKCdhcmcnLCAoMSwgMTQpLCAnYycsIE5vbmUpLCAoJ2FyZycsICgxLCAyMiksICdkJywgTm9uZSksICgnYXJnJywgKDEsIDI4KSwgJ2UnLCBOb25lKV0sICgnYXJnJywgKDEsIDM1KSwgJ2FyZ3MnLCBOb25lKSwgWygnYXJnJywgKDEsIDQxKSwgJ2YnLCBOb25lKV0sIFsoJ051bScsICgxLCA0MyksIDQyKV0sICgnYXJnJywgKDEsIDQ5KSwgJ2t3YXJncycsIE5vbmUpLCBbKCdOdW0nLCAoMSwgMTEpLCAxKSwgKCdOYW1lQ29uc3RhbnQnLCAoMSwgMTYpLCBOb25lKSwgKCdMaXN0JywgKDEsIDI0KSwgW10sICgnTG9hZCcsKSksICgnRGljdCcsICgxLCAzMCksIFtdLCBbXSldKSwgWygnUGFzcycsICgxLCA1OCkpXSwgW10sIE5vbmUpXSksCiAoJ01vZHVsZScsIFsoJ0NsYXNzRGVmJywgKDEsIDApLCAnQycsIFtdLCBbXSwgTm9uZSwgTm9uZSwgWygnUGFzcycsICgxLCA4KSldLCBbXSldKSwKICgnTW9kdWxlJywgWygnQ2xhc3NEZWYnLCAoMSwgMCksICdDJywgWygnTmFtZScsICgxLCA4KSwgJ29iamVjdCcsICgnTG9hZCcsKSldLCBbXSwgTm9uZSwgTm9uZSwgWygnUGFzcycsICgxLCAxNykpXSwgW10pXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCBbKCdSZXR1cm4nLCAoMSwgOCksICgnTnVtJywgKDEsIDE1KSwgMSkpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdSZXR1cm4nLCAoMSwgOCksICgnTnVtJywgKDEsIDE1KSwgMSkpXSwgW10sIE5vbmUpXSksCiAoJ01vZHVsZScsIFsoJ0RlbGV0ZScsICgxLCAwKSwgWygnTmFtZScsICgxLCA0KSwgJ3YnLCAoJ0RlbCcsKSldKV0pLAogKCdNb2R1bGUnLCBbKCdBc3NpZ24nLCAoMSwgMCksIFsoJ05hbWUnLCAoMSwgMCksICd2JywgKCdTdG9yZScsKSldLCAoJ051bScsICgxLCA0KSwgMSkpXSksCiAoJ01vZHVsZScsIFsoJ0F1Z0Fzc2lnbicsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAndicsICgnU3RvcmUnLCkpLCAoJ0FkZCcsKSwgKCdOdW0nLCAoMSwgNSksIDEpKV0pLApAQCAtOTc3LDcgKzk4NSw3IEBACiAoJ01vZHVsZScsIFsoJ0lmJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMyksICd2JywgKCdMb2FkJywpKSwgWygnUGFzcycsICgxLCA1KSldLCBbXSldKSwKICgnTW9kdWxlJywgWygnV2l0aCcsICgxLCAwKSwgWygnd2l0aGl0ZW0nLCAoJ05hbWUnLCAoMSwgNSksICd4JywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDEwKSwgJ3knLCAoJ1N0b3JlJywpKSldLCBbKCdQYXNzJywgKDEsIDEzKSldKV0pLAogKCdNb2R1bGUnLCBbKCdXaXRoJywgKDEsIDApLCBbKCd3aXRoaXRlbScsICgnTmFtZScsICgxLCA1KSwgJ3gnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgMTApLCAneScsICgnU3RvcmUnLCkpKSwgKCd3aXRoaXRlbScsICgnTmFtZScsICgxLCAxMyksICd6JywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDE4KSwgJ3EnLCAoJ1N0b3JlJywpKSldLCBbKCdQYXNzJywgKDEsIDIxKSldKV0pLAotKCdNb2R1bGUnLCBbKCdSYWlzZScsICgxLCAwKSwgKCdDYWxsJywgKDEsIDYpLCAoJ05hbWUnLCAoMSwgNiksICdFeGNlcHRpb24nLCAoJ0xvYWQnLCkpLCBbKCdTdHInLCAoMSwgMTYpLCAnc3RyaW5nJyldLCBbXSwgTm9uZSwgTm9uZSksIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ1JhaXNlJywgKDEsIDApLCAoJ0NhbGwnLCAoMSwgMTUpLCAoJ05hbWUnLCAoMSwgNiksICdFeGNlcHRpb24nLCAoJ0xvYWQnLCkpLCBbKCdTdHInLCAoMSwgMTYpLCAnc3RyaW5nJyldLCBbXSwgTm9uZSwgTm9uZSksIE5vbmUpXSksCiAoJ01vZHVsZScsIFsoJ1RyeScsICgxLCAwKSwgWygnUGFzcycsICgyLCAyKSldLCBbKCdFeGNlcHRIYW5kbGVyJywgKDMsIDApLCAoJ05hbWUnLCAoMywgNyksICdFeGNlcHRpb24nLCAoJ0xvYWQnLCkpLCBOb25lLCBbKCdQYXNzJywgKDQsIDIpKV0pXSwgW10sIFtdKV0pLAogKCdNb2R1bGUnLCBbKCdUcnknLCAoMSwgMCksIFsoJ1Bhc3MnLCAoMiwgMikpXSwgW10sIFtdLCBbKCdQYXNzJywgKDQsIDIpKV0pXSksCiAoJ01vZHVsZScsIFsoJ0Fzc2VydCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDcpLCAndicsICgnTG9hZCcsKSksIE5vbmUpXSksCkBAIC0xMDAyLDI5ICsxMDEwLDI5IEBACiAoJ0ludGVyYWN0aXZlJywgWygnRXhwcicsICgxLCAwKSwgKCdCaW5PcCcsICgxLCAwKSwgKCdOdW0nLCAoMSwgMCksIDEpLCAoJ0FkZCcsKSwgKCdOdW0nLCAoMSwgMiksIDIpKSldKSwKIF0KIGV2YWxfcmVzdWx0cyA9IFsKLSgnRXhwcmVzc2lvbicsICgnTmFtZScsICgxLCAwKSwgJ05vbmUnLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnTmFtZUNvbnN0YW50JywgKDEsIDApLCBOb25lKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0Jvb2xPcCcsICgxLCAwKSwgKCdBbmQnLCksIFsoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDYpLCAnYicsICgnTG9hZCcsKSldKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0Jpbk9wJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgKCdBZGQnLCksICgnTmFtZScsICgxLCA0KSwgJ2InLCAoJ0xvYWQnLCkpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ1VuYXJ5T3AnLCAoMSwgMCksICgnTm90JywpLCAoJ05hbWUnLCAoMSwgNCksICd2JywgKCdMb2FkJywpKSkpLAotKCdFeHByZXNzaW9uJywgKCdMYW1iZGEnLCAoMSwgMCksICgnYXJndW1lbnRzJywgW10sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCAoJ05hbWUnLCAoMSwgNyksICdOb25lJywgKCdMb2FkJywpKSkpLAorKCdFeHByZXNzaW9uJywgKCdMYW1iZGEnLCAoMSwgMCksICgnYXJndW1lbnRzJywgW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pLCAoJ05hbWVDb25zdGFudCcsICgxLCA3KSwgTm9uZSkpKSwKICgnRXhwcmVzc2lvbicsICgnRGljdCcsICgxLCAwKSwgWygnTnVtJywgKDEsIDIpLCAxKV0sIFsoJ051bScsICgxLCA0KSwgMildKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0RpY3QnLCAoMSwgMCksIFtdLCBbXSkpLAotKCdFeHByZXNzaW9uJywgKCdTZXQnLCAoMSwgMCksIFsoJ05hbWUnLCAoMSwgMSksICdOb25lJywgKCdMb2FkJywpKV0pKSwKKygnRXhwcmVzc2lvbicsICgnU2V0JywgKDEsIDApLCBbKCdOYW1lQ29uc3RhbnQnLCAoMSwgMSksIE5vbmUpXSkpLAogKCdFeHByZXNzaW9uJywgKCdEaWN0JywgKDEsIDApLCBbKCdOdW0nLCAoMiwgNiksIDEpXSwgWygnTnVtJywgKDQsIDEwKSwgMildKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0xpc3RDb21wJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMSksICdhJywgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnTmFtZScsICgxLCA3KSwgJ2InLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEyKSwgJ2MnLCAoJ0xvYWQnLCkpLCBbKCdOYW1lJywgKDEsIDE3KSwgJ2QnLCAoJ0xvYWQnLCkpXSldKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0dlbmVyYXRvckV4cCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAnYScsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgNyksICdiJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMiksICdjJywgKCdMb2FkJywpKSwgWygnTmFtZScsICgxLCAxNyksICdkJywgKCdMb2FkJywpKV0pXSkpLAogKCdFeHByZXNzaW9uJywgKCdDb21wYXJlJywgKDEsIDApLCAoJ051bScsICgxLCAwKSwgMSksIFsoJ0x0JywpLCAoJ0x0JywpXSwgWygnTnVtJywgKDEsIDQpLCAyKSwgKCdOdW0nLCAoMSwgOCksIDMpXSkpLAotKCdFeHByZXNzaW9uJywgKCdDYWxsJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdmJywgKCdMb2FkJywpKSwgWygnTnVtJywgKDEsIDIpLCAxKSwgKCdOdW0nLCAoMSwgNCksIDIpXSwgWygna2V5d29yZCcsICdjJywgKCdOdW0nLCAoMSwgOCksIDMpKV0sICgnTmFtZScsICgxLCAxMSksICdkJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDE1KSwgJ2UnLCAoJ0xvYWQnLCkpKSksCisoJ0V4cHJlc3Npb24nLCAoJ0NhbGwnLCAoMSwgMSksICgnTmFtZScsICgxLCAwKSwgJ2YnLCAoJ0xvYWQnLCkpLCBbKCdOdW0nLCAoMSwgMiksIDEpLCAoJ051bScsICgxLCA0KSwgMildLCBbKCdrZXl3b3JkJywgJ2MnLCAoJ051bScsICgxLCA4KSwgMykpXSwgKCdOYW1lJywgKDEsIDExKSwgJ2QnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgMTUpLCAnZScsICgnTG9hZCcsKSkpKSwKICgnRXhwcmVzc2lvbicsICgnTnVtJywgKDEsIDApLCAxMCkpLAogKCdFeHByZXNzaW9uJywgKCdTdHInLCAoMSwgMCksICdzdHJpbmcnKSksCi0oJ0V4cHJlc3Npb24nLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSksCi0oJ0V4cHJlc3Npb24nLCAoJ1N1YnNjcmlwdCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICgnU2xpY2UnLCAoJ05hbWUnLCAoMSwgMiksICdiJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDQpLCAnYycsICgnTG9hZCcsKSksIE5vbmUpLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnQXR0cmlidXRlJywgKDEsIDIpLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnU3Vic2NyaXB0JywgKDEsIDIpLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgKCdTbGljZScsICgnTmFtZScsICgxLCAyKSwgJ2InLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNCksICdjJywgKCdMb2FkJywpKSwgTm9uZSksICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdOYW1lJywgKDEsIDApLCAndicsICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdMaXN0JywgKDEsIDApLCBbKCdOdW0nLCAoMSwgMSksIDEpLCAoJ051bScsICgxLCAzKSwgMiksICgnTnVtJywgKDEsIDUpLCAzKV0sICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdMaXN0JywgKDEsIDApLCBbXSwgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ1R1cGxlJywgKDEsIDApLCBbKCdOdW0nLCAoMSwgMCksIDEpLCAoJ051bScsICgxLCAyKSwgMiksICgnTnVtJywgKDEsIDQpLCAzKV0sICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdUdXBsZScsICgxLCAxKSwgWygnTnVtJywgKDEsIDEpLCAxKSwgKCdOdW0nLCAoMSwgMyksIDIpLCAoJ051bScsICgxLCA1KSwgMyldLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnVHVwbGUnLCAoMSwgMCksIFtdLCAoJ0xvYWQnLCkpKSwKLSgnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCAwKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSwgJ2MnLCAoJ0xvYWQnLCkpLCAnZCcsICgnTG9hZCcsKSksIFsoJ1N1YnNjcmlwdCcsICgxLCA4KSwgKCdBdHRyaWJ1dGUnLCAoMSwgOCksICgnTmFtZScsICgxLCA4KSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICgnU2xpY2UnLCAoJ051bScsICgxLCAxMiksIDEpLCAoJ051bScsICgxLCAxNCksIDIpLCBOb25lKSwgKCdMb2FkJywpKV0sIFtdLCBOb25lLCBOb25lKSksCisoJ0V4cHJlc3Npb24nLCAoJ0NhbGwnLCAoMSwgNyksICgnQXR0cmlidXRlJywgKDEsIDYpLCAoJ0F0dHJpYnV0ZScsICgxLCA0KSwgKCdBdHRyaWJ1dGUnLCAoMSwgMiksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICdjJywgKCdMb2FkJywpKSwgJ2QnLCAoJ0xvYWQnLCkpLCBbKCdTdWJzY3JpcHQnLCAoMSwgMTIpLCAoJ0F0dHJpYnV0ZScsICgxLCAxMCksICgnTmFtZScsICgxLCA4KSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICgnU2xpY2UnLCAoJ051bScsICgxLCAxMiksIDEpLCAoJ051bScsICgxLCAxNCksIDIpLCBOb25lKSwgKCdMb2FkJywpKV0sIFtdLCBOb25lLCBOb25lKSksCiBdCiBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CmluZGV4IGM3OWZlNmYuLmY5M2E1MmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQpAQCAtMTUsNiArMTUsNyBAQAogCiBIT1NUID0gc3VwcG9ydC5IT1NUCiBTRVJWRVJfUVVJVCA9IGInUVVJVFxuJworVElNRU9VVCA9IDMuMAogCiBpZiB0aHJlYWRpbmc6CiAgICAgY2xhc3MgZWNob19zZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6CkBAIC0xMjMsNyArMTI0LDkgQEAKICAgICAgICAgYy5wdXNoKGIiSSdtIG5vdCBkZWFkIHlldCEiICsgdGVybSkKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtiImhlbGxvIHdvcmxkIiwgYiJJJ20gbm90IGRlYWQgeWV0ISJdKQogCkBAIC0xNTQsNyArMTU3LDkgQEAKICAgICAgICAgYy5wdXNoKGRhdGEpCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbZGF0YVs6dGVybWxlbl1dKQogCkBAIC0xNzQsNyArMTc5LDkgQEAKICAgICAgICAgYy5wdXNoKGRhdGEpCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmJ1ZmZlciwgZGF0YSkKQEAgLTE4Niw3ICsxOTMsOSBAQAogICAgICAgICBwID0gYXN5bmNoYXQuc2ltcGxlX3Byb2R1Y2VyKGRhdGErU0VSVkVSX1FVSVQsIGJ1ZmZlcl9zaXplPTgpCiAgICAgICAgIGMucHVzaF93aXRoX3Byb2R1Y2VyKHApCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW2IiaGVsbG8gd29ybGQiLCBiIkknbSBub3QgZGVhZCB5ZXQhIl0pCiAKQEAgLTE5Niw3ICsyMDUsOSBAQAogICAgICAgICBkYXRhID0gYiJoZWxsbyB3b3JsZFxuSSdtIG5vdCBkZWFkIHlldCFcbiIKICAgICAgICAgYy5wdXNoX3dpdGhfcHJvZHVjZXIoZGF0YStTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbYiJoZWxsbyB3b3JsZCIsIGIiSSdtIG5vdCBkZWFkIHlldCEiXSkKIApAQCAtMjA3LDcgKzIxOCw5IEBACiAgICAgICAgIGMucHVzaChiImhlbGxvIHdvcmxkXG5cbkknbSBub3QgZGVhZCB5ZXQhXG4iKQogICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICBbYiJoZWxsbyB3b3JsZCIsIGIiIiwgYiJJJ20gbm90IGRlYWQgeWV0ISJdKQpAQCAtMjI2LDcgKzIzOSw5IEBACiAgICAgICAgICMgd2hlcmUgdGhlIHNlcnZlciBlY2hvZXMgYWxsIG9mIGl0cyBkYXRhIGJlZm9yZSB3ZSBjYW4gY2hlY2sgdGhhdCBpdAogICAgICAgICAjIGdvdCBhbnkgZG93biBiZWxvdy4KICAgICAgICAgcy5zdGFydF9yZXNlbmRfZXZlbnQuc2V0KCkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtdKQogICAgICAgICAjIHRoZSBzZXJ2ZXIgbWlnaHQgaGF2ZSBiZWVuIGFibGUgdG8gc2VuZCBhIGJ5dGUgb3IgdHdvIGJhY2ssIGJ1dCB0aGlzCkBAIC0yNjgsOSArMjgzLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBvcCgpLCAoMCwgTm9uZSkpCiAKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RBc3luY2hhdCwgVGVzdEFzeW5jaGF0X1dpdGhQb2xsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEhlbHBlckZ1bmN0aW9ucywgVGVzdEZpZm8pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2NlNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMzEgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCisKKyMgU2tpcCB0ZXN0cyBpZiB3ZSBkb24ndCBoYXZlIHRocmVhZGluZy4KK2ltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCisjIFNraXAgdGVzdHMgaWYgd2UgZG9uJ3QgaGF2ZSBjb25jdXJyZW50LmZ1dHVyZXMuCitpbXBvcnRfbW9kdWxlKCdjb25jdXJyZW50LmZ1dHVyZXMnKQorCisKK2RlZiBzdWl0ZSgpOgorICAgIHRlc3RzX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ3Rlc3RzLnR4dCcpCisgICAgd2l0aCBvcGVuKHRlc3RzX2ZpbGUpIGFzIGZwOgorICAgICAgICB0ZXN0X25hbWVzID0gZnAucmVhZCgpLnNwbGl0bGluZXMoKQorICAgIHRlc3RzID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICBmb3IgdGVzdF9uYW1lIGluIHRlc3RfbmFtZXM6CisgICAgICAgIG1vZF9uYW1lID0gJ3Rlc3QuJyArIHRlc3RfbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQorICAgICAgICBleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3Q6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2RfbmFtZV0KKyAgICAgICAgICAgIHRlc3RzLmFkZFRlc3RzKGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZCkpCisgICAgcmV0dXJuIHRlc3RzCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChzdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NDk0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19tYWluX18ucHkKQEAgLTAsMCArMSw1IEBACitmcm9tIC4gaW1wb3J0IHRlc3RfbWFpbgorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2MzY0YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvLnB5CkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IG9zCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgYnVmID0gb3MucmVhZCgwLCAxMDI0KQorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgb3Mud3JpdGUoMSwgYnVmKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8yLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4M2NhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzIucHkKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgb3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBidWYgPSBvcy5yZWFkKDAsIDEwMjQpCisgICAgb3Mud3JpdGUoMSwgYidPVVQ6JytidWYpCisgICAgb3Mud3JpdGUoMiwgYidFUlI6JytidWYpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0NDk2NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMy5weQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgb3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBidWYgPSBvcy5yZWFkKDAsIDEwMjQpCisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICBicmVhaworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy53cml0ZSgxLCBiJ09VVDonK2J1ZikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXg6CisgICAgICAgICAgICBvcy53cml0ZSgyLCBiJ0VSUjonICsgZXguX19jbGFzc19fLl9fbmFtZV9fLmVuY29kZSgnYXNjaWknKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9rZXljZXJ0My5wZW0gYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8va2V5Y2VydDMucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZmE2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8va2V5Y2VydDMucGVtCkBAIC0wLDAgKzEsNzMgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2RnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUF3Z2dKY0FnRUFBb0dCQU1MZ0Qwa0FLRGI1Y0Z5UAoramJ3TmZSNUN0ZXdkWEMra01YQVdEOERMeGlUVHZoTVc3cVZubHdPbTM2bVpsc3pIS3ZzUmYwNWxUNHBlZ2lGTQorOXoyajFPbGFOK2NpL1g3TlUyMlROTjZjcllTaU43N0ZqWUpQNDY0ajg3Nm5kU3h5RCtyenlzMzg2VCsxcjFhWgorYWdnRWRrajFUc1NzdjF6V0lZS2xQSWpsdmh1eEFnTUJBQUVDZ1lBMGFIK1QyVmYzV09QdjhLZGtjSmc2Z0NSZQoreUpLWE9XZ1dSY2ljeC9DVXpPRXNUeG1GSURQTHhxQVdBM2s3djBCKzN2akd3NVk5bHljVi81WHFYTm9RSTE0agoreTA5aU5zdW1kczEzdTVBS2tHZFRKblpoUTdVS2RvVkhmdVA0NFpkT3Yvcko1L1ZENkY0eld5d3BlOTBwY2JLKworQVdEVnR1c2dHUUJTaWVFbDFRSkJBT3lWclVHNWwyeW9VQnRkMnpyL2tpR20vRFl5WGxJdGhRTy9BMy9MbmdEVworNS95ZEd4VnNUN2xBVk9nQ3NvVCswTDRlZlRoOTBQanpXOExQUXJQQldWTUNRUURTM2gvRnRZWWQ1bGZ6K0ZOTAorOUNFZTFGMXc5bDhQNzQ5dU5VRDBnMzE3enYxdGF0SXFWQ3NRV0hmVkhOZFZ2ZlErdlNGdzM4T09STzAwWHFzOQorMUdKckFrQmtvWFhFa3hDWm95NFB0ZWhlTy84SVdXTEdHcjZMN2RpNk16RmwxbElxd1Q2RDhMOW9hVjJ2eW5GVAorRG5Lb3AwcGEwOVVuaGp5dzU3S01ObVNFMlNVSkFrRUFybG9URXpwZ1JtQ3E0SUsyL05wQ2VHZEhTNXVxUmxiaAorMVZJYS94R3BzN0VXUWw1TW44c3dRRGVsL1lQM1dHSFRqZng3cGdTZWdRZmt5YVJ0R3BaOU9RSkFhOVZ1bWo4bQorSkFBdEkwQm5nYThoZ1F4N0JoVFFZNENhZER4eWlSR09HWWh3VXpZVkNxa2Iyc2JWUkg5SG53VWFKVDdjV0JZMworUm5KZEhPTVhXZW03L3c9PQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMSAoMHgwKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAxMjcyMzM0MjYxMjcyMTQ0MzI4MSAoMHhiMDkyNjRiMWYyZGEyMWQxKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9WFksIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EsIENOPW91ci1jYS1zZXJ2ZXIKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEphbiAgNCAxOTo0NzowNyAyMDEzIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogTm92IDEzIDE5OjQ3OjA3IDIwMjIgR01UCisgICAgICAgIFN1YmplY3Q6IEM9WFksIEw9Q2FzdGxlIEFudGhyYXgsIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24sIENOPWxvY2FsaG9zdAorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDEwMjQgYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmMyOmUwOjBmOjQ5OjAwOjI4OjM2OmY5OjcwOjVjOjhmOjhkOmJjOjBkOgorICAgICAgICAgICAgICAgICAgICA3ZDoxZTo0MjpiNTplYzoxZDo1YzoyZjphNDozMTo3MDoxNjowZjpjMDpjYjoKKyAgICAgICAgICAgICAgICAgICAgYzY6MjQ6ZDM6YmU6MTM6MTY6ZWU6YTU6Njc6OTc6MDM6YTY6ZGY6YTk6OTk6CisgICAgICAgICAgICAgICAgICAgIDk2OmNjOmM3OjJhOmZiOjExOjdmOjRlOjY1OjRmOjhhOjVlOjgyOjIxOjRjOgorICAgICAgICAgICAgICAgICAgICBmNzozZDphMzpkNDplOTo1YTozNzplNzoyMjpmZDo3ZTpjZDo1Mzo2ZDo5MzoKKyAgICAgICAgICAgICAgICAgICAgMzQ6ZGU6OWM6YWQ6ODQ6YTI6Mzc6YmU6YzU6OGQ6ODI6NGY6ZTM6YWU6MjM6CisgICAgICAgICAgICAgICAgICAgIGYzOmJlOmE3Ojc1OjJjOjcyOjBmOmVhOmYzOmNhOmNkOmZjOmU5OjNmOmI1OgorICAgICAgICAgICAgICAgICAgICBhZjo1Njo5OTo2YTowODowNDo3Njo0ODpmNTo0ZTpjNDphYzpiZjo1YzpkNjoKKyAgICAgICAgICAgICAgICAgICAgMjE6ODI6YTU6M2M6ODg6ZTU6YmU6MWI6YjEKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgICAyZjo0Mjo1ZjphMzowOToyYzpmYTo1MTo4ODpjNzozNzo3ZjplYTowZTo2MzpmMDphMjo5YToKKyAgICAgICAgIGU1OjVhOmUyOmM4OjIwOmYwOjNmOjYwOmJjOmM4OjBmOmI2OmM2Ojc2OmNlOmRiOjgzOjkzOgorICAgICAgICAgZjU6YTM6MzM6Njc6MDE6OGU6MDQ6Y2Q6MDA6OWE6NzM6ZmQ6ZjM6MzU6ODY6ZmE6ZDc6MTM6CisgICAgICAgICBlMjo0NjpjNjo5ZDpjMDoyOTo1MzpkNDphOTo5MDpiODo3Nzo0YjplNjo4Mzo3NjplNDo5MjoKKyAgICAgICAgIGQ2OjljOjUwOmNmOjQzOmQwOmM2OjAxOjc3OjYxOjlhOmRlOjliOjcwOmY3OjcyOmNkOjU5OgorICAgICAgICAgMDA6MzE6Njk6ZDk6YjQ6Y2E6MDY6OWM6NmQ6YzM6Yzc6ODA6OGM6Njg6ZTY6YjU6YTI6Zjg6CisgICAgICAgICBlZjoxZDpiYjoxNjo5Zjo3Nzo3NzplZjo4Nzo2MjoyMjo5Yjo0ZDo2OTphNDozYToxYTpmMToKKyAgICAgICAgIDIxOjVlOjhjOjMyOmFjOjkyOmZkOjE1OjZiOjE4OmMyOjdmOjE1OjBkOjk4OjMwOmNhOjc1OgorICAgICAgICAgOGY6MWE6NzE6ZGY6ZGE6MWQ6YjI6ZWY6OWE6ZTg6MmQ6MmU6MDI6ZmQ6NGE6M2M6YWE6OTY6CisgICAgICAgICAwYjowNjo1ZDozNTpiMzozZDoyNDo4Nzo0YjplMDpiMDo1ODo2MDoyZjo0NTphYzoyZTo0ODoKKyAgICAgICAgIDhhOmIwOjk5OjEwOjY1OjI3OmZmOmNjOmIxOmQ4OmZkOmJkOjI2OjZiOmI5OjBjOjA1OjJhOgorICAgICAgICAgZjQ6NDU6NjM6MzU6NTE6MDc6ZWQ6ODM6ODU6ZmU6NmY6Njk6Y2I6YmI6NDA6YTg6YWU6YjY6CisgICAgICAgICAzYjo1Njo0YToyZDphNDplZDo2ZDoxMToyYzo0ZDplZDoxNzoyNDpmZDo0NzpiYzpkMzo0MToKKyAgICAgICAgIGEyOmQzOjA2OmZlOjBjOjkwOmQ4OmQ4Ojk0OjI2OmM0OmZmOmNjOmExOmQ4OjQyOjc3OmViOgorICAgICAgICAgZmM6YTk6OTQ6NzEKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ3BEQ0NBWXdDQ1FDd2ttU3g4dG9oMFRBTkJna3Foa2lHOXcwQkFRVUZBREJOTVFzd0NRWURWUVFHRXdKWQorV1RFbU1DUUdBMVVFQ2d3ZFVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0Z1EwRXhGakFVQmdOVgorQkFNTURXOTFjaTFqWVMxelpYSjJaWEl3SGhjTk1UTXdNVEEwTVRrME56QTNXaGNOTWpJeE1URXpNVGswTnpBMworV2pCZk1Rc3dDUVlEVlFRR0V3SllXVEVYTUJVR0ExVUVCeE1PUTJGemRHeGxJRUZ1ZEdoeVlYZ3hJekFoQmdOVgorQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodgorYzNRd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNTGdEMGtBS0RiNWNGeVBqYndOZlI1QwordGV3ZFhDK2tNWEFXRDhETHhpVFR2aE1XN3FWbmx3T20zNm1abHN6SEt2c1JmMDVsVDRwZWdpRk05ejJqMU9sYQorTitjaS9YN05VMjJUTk42Y3JZU2lONzdGallKUDQ2NGo4NzZuZFN4eUQrcnp5czM4NlQrMXIxYVphZ2dFZGtqMQorVHNTc3YxeldJWUtsUElqbHZodXhBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFDOUNYNk1KTFBwUgoraU1jM2Yrb09ZL0NpbXVWYTRzZ2c4RDlndk1nUHRzWjJ6dHVEay9Xak0yY0JqZ1ROQUpwei9mTTFodnJYRStKRworeHAzQUtWUFVxWkM0ZDB2bWczYmtrdGFjVU05RDBNWUJkMkdhM3B0dzkzTE5XUUF4YWRtMHlnYWNiY1BIZ0l4bworNXJXaStPOGR1eGFmZDNmdmgySWltMDFwcERvYThTRmVqREtza3YwVmF4akNmeFVObURES2RZOGFjZC9hSGJMdgorbXVndExnTDlTanlxbGdzR1hUV3pQU1NIUytDd1dHQXZSYXd1U0lxd21SQmxKLy9Nc2RqOXZTWnJ1UXdGS3ZSRgorWXpWUkIrMkRoZjV2YWN1N1FLaXV0anRXU2kyazdXMFJMRTN0RnlUOVI3elRRYUxUQnY0TWtOallsQ2JFLzh5aAorMkVKMzYveXBsSEU9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vcHljYWNlcnQucGVtIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3B5Y2FjZXJ0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWIxZjNlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3B5Y2FjZXJ0LnBlbQpAQCAtMCwwICsxLDc4IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgwICgweGIwOTI2NGIxZjJkYTIxZDApCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBKYW4gIDIgMTk6NDc6MDcgMjAyMyBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmU3OmRlOmU5OmUzOjBjOjlmOjAwOmI2OmExOmZkOjJiOjViOjk2OmQyOgorICAgICAgICAgICAgICAgICAgICA2ZjpjYzplMDpiZTo4NjpiOToyMDo1ZTplYzowMzo3YTo1NTphYjplYTphNDoKKyAgICAgICAgICAgICAgICAgICAgZTk6Zjk6NDk6ODU6ZDI6NjY6ZDU6ZWQ6Yzc6N2E6ZWE6NTY6OGU6MmQ6OGY6CisgICAgICAgICAgICAgICAgICAgIGU3OjQyOmUyOjYyOjI4OmE5OjlmOmQ2OjFiOjhlOmViOmI1OmI0OjljOjlmOgorICAgICAgICAgICAgICAgICAgICAxNDphYjpkZjplNjo5NDo4Yjo3NjoxZDozZTo2ZDoyNDo2MTplZDowYzpiZjoKKyAgICAgICAgICAgICAgICAgICAgMDA6OGE6NjE6MGM6ZGY6NWM6Yzg6MzY6NzM6MTY6MDA6Y2Q6NDc6YmE6NmQ6CisgICAgICAgICAgICAgICAgICAgIGE0OmE0Ojc0Ojg4OjgzOjIzOjBhOjE5OmZjOjA5OmE3OjNjOjRhOjRiOmQzOgorICAgICAgICAgICAgICAgICAgICBlNzoxZDoyZDplNDplYTo0Yzo1NDoyMTpmMzoyNjpkYjo4OTozNzoxODpkNDoKKyAgICAgICAgICAgICAgICAgICAgMDI6YmI6NDA6MzI6NWY6YTQ6ZmY6MmQ6MWM6Zjc6ZDQ6YmI6ZWM6OGU6Y2Y6CisgICAgICAgICAgICAgICAgICAgIDVjOjgyOmFjOmU2OjdjOjA4OjZjOjQ4Ojg1OjYxOjA3OjdmOjI1OmUwOjVjOgorICAgICAgICAgICAgICAgICAgICBlMDpiYzozNDo1ZjplMDpiOTowNDo0Nzo3NTpjODo0NzowYjo4ZDpiYzpkNjoKKyAgICAgICAgICAgICAgICAgICAgYzg6Njg6NWY6MzM6ODM6NjI6ZDI6MjA6NDQ6MzU6YjE6YWQ6ODE6MWE6OGE6CisgICAgICAgICAgICAgICAgICAgIGNkOmJjOjM1OmIwOjVjOjhiOjQ3OmQ2OjE4OmU5OjljOjE4Ojk3OmNjOjAxOgorICAgICAgICAgICAgICAgICAgICAzYzoyOTpjYzplODoxZTplNDplNDpjMTpiODpkZTplNzpjMjoxMToxODo4NzoKKyAgICAgICAgICAgICAgICAgICAgNWE6OTM6MzQ6ZDg6YTY6MjU6Zjc6MTQ6NzE6ZWI6ZTQ6MjE6YTI6ZDI6MGY6CisgICAgICAgICAgICAgICAgICAgIDJlOjJlOmQ0OjYyOjAwOjM1OmQzOmQ2OmVmOjVjOjYwOjRiOjRjOmE5OjE0OgorICAgICAgICAgICAgICAgICAgICBlMjpkZDoxNTo1ODo0NjozNzozMzoyNjpiNzplNzoyZTo1ZDplZDo0MjplNDoKKyAgICAgICAgICAgICAgICAgICAgYzU6NGQKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEJDOkREOjYyOkQ5Ojc2OkRBOjFCOkQyOjU0OjZCOkNGOkUwOjY2OjlCOjFFOjFFOjdCOjU2OjBDOjBCCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCQzpERDo2MjpEOTo3NjpEQToxQjpEMjo1NDo2QjpDRjpFMDo2Njo5QjoxRToxRTo3Qjo1NjowQzowQgorCisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDdkOjBhOmY1OmNiOjhkOmQzOjVkOmJkOjk5OjhlOmY4OjJiOjBmOmJhOmViOmMyOmQ5OmE2OgorICAgICAgICAgMjc6NGY6MmU6N2I6MmY6MGU6NjQ6ZDg6MWM6MzU6NTA6NGU6ZWU6ZmM6OTA6Yjk6OGQ6NmQ6CisgICAgICAgICBhODpjNTpjNjowNjpiMDphZjpmMzoyZDpiZjozYjpiODo0MjowNzpkZDoxODo3ZDo2ZDo5NToKKyAgICAgICAgIDU0OjU3Ojg1OjE4OjYwOjQ3OjJmOmViOjc4OjFiOmY5OmU4OjE3OmZkOjVhOjBkOjg3OjE3OgorICAgICAgICAgMjg6YWM6NGM6NmE6ZTY6YmM6Mjk6ZjQ6ZjQ6NTU6NzA6Mjk6NDI6ZGU6ODU6ZWE6YWI6NmM6CisgICAgICAgICAyMzowNjo2NDozMDo3NTowMjo4ZTo1MzpiYzo1ZTowMTozMzozNzpjYzoxZTpjZDpiODphNDoKKyAgICAgICAgIGZkOmNhOmU0OjVmOjY1OjNiOjgzOjFjOjg2OmYxOjU1OjAyOmEwOjNhOjhmOmRiOjkxOmI3OgorICAgICAgICAgNDA6MTQ6YjQ6ZTc6OGQ6ZDI6ZWU6NzM6YmE6ZTM6ZTU6MzQ6MmQ6YmM6OTQ6NmY6NGU6MjQ6CisgICAgICAgICAwNjpmNzo1Zjo4YjowZTphNzo4ZTo2YjpkZTo1ZTo3NTpmNDozMjo5YTo1MDpiMTo0NDozMzoKKyAgICAgICAgIDlhOmQwOjA1OmUyOjc4OjgyOmZmOmRiOmRhOjhhOjYzOmViOmE5OmRkOmQxOmJmOmEwOjYxOgorICAgICAgICAgYWQ6ZTM6OWU6OGE6MjQ6NWQ6NjI6MGU6ZTc6NGM6OTE6N2Y6ZWY6ZGY6MzQ6MzY6M2I6MmY6CisgICAgICAgICA1ZDpmNTo4NDpiMjoyZjpjNDo2ZDo5Mzo5NjoxYTo2ZjozMDoyODpmMTpkYToxMjo5YTo2NDoKKyAgICAgICAgIGI0OjQwOjMzOjFkOmJkOmRlOjJiOjUzOmE4OmVhOmJlOmQ2OmJjOjRlOjk2OmY1OjQ0OmZiOgorICAgICAgICAgMzI6MTg6YWU6ZDU6MWY6ZjY6Njk6YWY6YjY6NGU6N2I6MWQ6NTg6ZWM6M2I6YTk6NTM6YTM6CisgICAgICAgICA1ZTo1ODpjODo5ZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEYlRDQ0FsV2dBd0lCQWdJSkFMQ1NaTEh5MmlIUU1BMEdDU3FHU0liM0RRRUJCUVVBTUUweEN6QUpCZ05WCitCQVlUQWxoWk1TWXdKQVlEVlFRS0RCMVFlWFJvYjI0Z1UyOW1kSGRoY21VZ1JtOTFibVJoZEdsdmJpQkRRVEVXCitNQlFHQTFVRUF3d05iM1Z5TFdOaExYTmxjblpsY2pBZUZ3MHhNekF4TURReE9UUTNNRGRhRncweU16QXhNREl4CitPVFEzTURkYU1FMHhDekFKQmdOVkJBWVRBbGhaTVNZd0pBWURWUVFLREIxUWVYUm9iMjRnVTI5bWRIZGhjbVVnCitSbTkxYm1SaGRHbHZiaUJEUVRFV01CUUdBMVVFQXd3TmIzVnlMV05oTFhObGNuWmxjakNDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU9mZTZlTU1ud0Myb2Ywclc1YlNiOHpndm9hNUlGN3NBM3BWCitxK3FrNmZsSmhkSm0xZTNIZXVwV2ppMlA1MExpWWlpcG45WWJqdXUxdEp5ZkZLdmY1cFNMZGgwK2JTUmg3UXkvCitBSXBoRE45Y3lEWnpGZ0ROUjdwdHBLUjBpSU1qQ2huOENhYzhTa3ZUNXgwdDVPcE1WQ0h6SnR1Sk54alVBcnRBCitNbCtrL3kwYzk5Uzc3STdQWElLczVud0liRWlGWVFkL0plQmM0THcwWCtDNUJFZDF5RWNMamJ6V3lHaGZNNE5pCiswaUJFTmJHdGdScUt6Yncxc0Z5TFI5WVk2WndZbDh3QlBDbk02QjdrNU1HNDN1ZkNFUmlIV3BNMDJLWWw5eFJ4Cis2K1Fob3RJUExpN1VZZ0ExMDlidlhHQkxUS2tVNHQwVldFWTNNeWEzNXk1ZDdVTGt4VTBDQXdFQUFhTlFNRTR3CitIUVlEVlIwT0JCWUVGTHpkWXRsMjJodlNWR3ZQNEdhYkhoNTdWZ3dMTUI4R0ExVWRJd1FZTUJhQUZMemRZdGwyCisyaHZTVkd2UDRHYWJIaDU3Vmd3TE1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCCitBSDBLOWN1TjAxMjltWTc0S3crNjY4TFpwaWRQTG5zdkRtVFlIRFZRVHU3OGtMbU5iYWpGeGdhd3IvTXR2enU0CitRZ2ZkR0gxdGxWUlhoUmhnUnkvcmVCdjU2QmY5V2cySEZ5aXNUR3JtdkNuMDlGVndLVUxlaGVxcmJDTUdaREIxCitBbzVUdkY0Qk16Zk1IczI0cFAzSzVGOWxPNE1jaHZGVkFxQTZqOXVSdDBBVXRPZU4wdTV6dXVQbE5DMjhsRzlPCitKQWIzWDRzT3A0NXIzbDUxOURLYVVMRkVNNXJRQmVKNGd2L2Iyb3BqNjZuZDBiK2dZYTNqbm9va1hXSU81MHlSCitmKy9mTkRZN0wxMzFoTEl2eEcyVGxocHZNQ2p4MmhLYVpMUkFNeDI5M2l0VHFPcSsxcnhPbHZWRSt6SVlydFVmCis5bW12dGs1N0hWanNPNmxUbzE1WXlKND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfY2VydC5wZW0gYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc3NsX2NlcnQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTdkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc3NsX2NlcnQucGVtCkBAIC0wLDAgKzEsMTUgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ1ZEQ0NBYjJnQXdJQkFnSUpBTmZIT0JrWnI4Sk9NQTBHQ1NxR1NJYjNEUUVCQlFVQU1GOHhDekFKQmdOVgorQkFZVEFsaFpNUmN3RlFZRFZRUUhFdzVEWVhOMGJHVWdRVzUwYUhKaGVERWpNQ0VHQTFVRUNoTWFVSGwwYUc5dQorSUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQWVGdzB4TURFdworTURneU16QXhOVFphRncweU1ERXdNRFV5TXpBeE5UWmFNRjh4Q3pBSkJnTlZCQVlUQWxoWk1SY3dGUVlEVlFRSAorRXc1RFlYTjBiR1VnUVc1MGFISmhlREVqTUNFR0ExVUVDaE1hVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2ZFc1aworWVhScGIyNHhFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBdworZ1lrQ2dZRUEyMXZUNWlzcTdGNjhhbVl1dU5wU0ZsS0RQck1VQ2E0WVdZcVpSdDJPWisvM05LYVoyeEFpU3dyNworNk1yUUY3MHQ1bkxiU1BwcUU1KzVWclM1OFNZK2cvc1hMaUZkNkFwbEgxd0pad2g3OERvZmJGWVhVZ2drdEZNdAorcFR5aVg4anRQNjZia2NQa0RBREEwODlSSTFUUVI2Q2ErbjdIRmE3YzFmYWJWVjZpM3prQ0F3RUFBYU1ZTUJZdworRkFZRFZSMFJCQTB3QzRJSmJHOWpZV3hvYjNOME1BMEdDU3FHU0liM0RRRUJCUVVBQTRHQkFIUGN0UUJFUTR3ZAorQko2K0pjcElyYW9wTG44QkdoYmpOV2o0MG1tUnFXQi9OQVdGNk01bmU3S3BHQXU3dExlRzRoYjF6TGFsZEs4RworbHh5MkdQU1JGNkxGUzQ4ZHBFajJIYk12Mm52djZ4eGFsRE1KOStEaWNXZ0FLVFE2YmNYMmozR1VrQ1IwZy9UMQorQ1JsTkJBQWx2aEt6TzdDbHBmOWwwWUtCRWZyYUpCeVgKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfa2V5LnBlbSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfa2V5LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmQzYmJkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NzbF9rZXkucGVtCkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2R3SUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUV3Z2dKZEFnRUFBb0dCQU50YjArWXJLdXhldkdwbQorTHJqYVVoWlNnejZ6RkFtdUdGbUttVWJkam1mdjl6U21tZHNRSWtzSysrakswQmU5TGVaeTIwajZhaE9mdVZhMAordWZFbVBvUDdGeTRoWGVnS1pSOWNDV2NJZS9BNkgyeFdGMUlJSkxSVExhVThvbC9JN1QrdW01SEQ1QXdBd05QUAorVVNOVTBFZWdtdnAreHhXdTNOWDJtMVZlb3Q4NUFnTUJBQUVDZ1lBM1pkWjY3M1gwb2V4RmxxN0FBbXJ1dGtIdAorQ0w3THZ3cnBPaWFCamh5VHhUZVNOV3p2dFFCa0lVOERPSTBiSWF6QTRVcmVBRmZmd3R2RXVQbW9uRGIzRitJcQorU01BdTQyWGNHeVZaRWwrZ0hsVFBVOVhSWDduVE9YVnQrTWxSUlJ4TDZ0OUdrR2ZVQVhJM1h4SkRYVzNjMHZCSworVUw5eHFEOGNPUlhPZkUwNnJRSkJBUDhtRVgxRVJrUjY0UHRzb2U0MjgxdmpUbE5mSWJzN05NUGtVbnJuOU4vWQorQkxoak5JZlEzSEZaRzhCVE1MZlg3a0NTOUQ1OTNEVzV0VjRaOUJQL2M2Y0NRUURjRnpDY1ZBck5oMkpTeXdPUQorWmZUZlJiSmcvWjVMdDlGa25ndjFtZWVHTlBnSU1MTjhTZzY3OXBBT09XbXpkTU8zVjcwNnJOUHpTVk1NRTdFNQorb1BJZkFrRUE4cERkZGFyUDV0Q3ZUVGdVcG1URmJha20wS29UWm0yK0Z6SGNuQTRqUmgrWE5UalRPdjk4WTZJaworZU81ZDFabktYc2VXdmtabmNRZ3hmZG5NcXFwajV3SkFjTnEvUlZuZTFEYllsd1djaFQyU2k2NU1ZbW1KOHQrRgorMG1jc1VMcWpPbkVNd2Y1ZStwdHE1THp3YnlySFpZcTVGTms3b2N1ZlB2L1pRcmNTU0MrY0Z3SkJBS3ZPSkJ5UworeDU2cXlHZVpMT1FsV1MySlMzS0pvNTlYdUxGR3FjYmdOOU9tOXhGYTQxWWI0TjlOdnBsRml2c3ZaZHczbTFRLworU1BJWFF1VDhSTVBEVk5RPQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGUyZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkKQEAgLTAsMCArMSw3NTQgQEAKKyIiIlRlc3RzIGZvciBiYXNlX2V2ZW50cy5weSIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGZpbmRfdW51c2VkX3BvcnQsIElQVjZfRU5BQkxFRAorCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCBiYXNlX2V2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCBjb25zdGFudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIEJhc2VFdmVudExvb3BUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3AoKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBtID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NvY2tldF90cmFuc3BvcnQsIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LCBtLCBtLCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2VfZGF0YWdyYW1fdHJhbnNwb3J0LCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYubG9vcC5fd3JpdGVfdG9fc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBzZWxmLmxvb3AuX3JlYWRfZnJvbV9zZWxmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydCwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0LCBtLCBtKQorICAgICAgICBnZW4gPSBzZWxmLmxvb3AuX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQobSwgbSwgbSwgbSwgbSwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbmV4dCwgaXRlcihnZW4pKQorCisgICAgZGVmIHRlc3RfX2FkZF9jYWxsYmFja19oYW5kbGUoc2VsZik6CisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShsYW1iZGE6IEZhbHNlLCAoKSkKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayhoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydEluKGgsIHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9fYWRkX2NhbGxiYWNrX3RpbWVyKHNlbGYpOgorICAgICAgICBoID0gYXN5bmNpby5UaW1lckhhbmRsZSh0aW1lLm1vbm90b25pYygpKzEwLCBsYW1iZGE6IEZhbHNlLCAoKSkKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayhoKQorICAgICAgICBzZWxmLmFzc2VydEluKGgsIHNlbGYubG9vcC5fc2NoZWR1bGVkKQorCisgICAgZGVmIHRlc3RfX2FkZF9jYWxsYmFja19jYW5jZWxsZWRfaGFuZGxlKHNlbGYpOgorICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUobGFtYmRhOiBGYWxzZSwgKCkpCisgICAgICAgIGguY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayhoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdF9leGVjdXRvcihzZWxmKToKKyAgICAgICAgZXhlY3V0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IoZXhlY3V0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhlY3V0b3IsIHNlbGYubG9vcC5fZGVmYXVsdF9leGVjdXRvcikKKworICAgIGRlZiB0ZXN0X2dldG5hbWVpbmZvKHNlbGYpOgorICAgICAgICBzb2NrYWRkciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuZ2V0bmFtZWluZm8oc29ja2FkZHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoTm9uZSwgc29ja2V0LmdldG5hbWVpbmZvLCBzb2NrYWRkciwgMCksCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbihzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaCA9IHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5fY2FsbGJhY2ssIGNiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaCwgYXN5bmNpby5IYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X2NhbGxfbGF0ZXIoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGggPSBzZWxmLmxvb3AuY2FsbF9sYXRlcigxMC4wLCBjYikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGgsIGFzeW5jaW8uVGltZXJIYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9zY2hlZHVsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X2NhbGxfbGF0ZXJfbmVnYXRpdmVfZGVsYXlzKHNlbGYpOgorICAgICAgICBjYWxscyA9IFtdCisKKyAgICAgICAgZGVmIGNiKGFyZyk6CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJnKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigtMSwgY2IsICdhJykKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoLTIsIGNiLCAnYicpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbJ2InLCAnYSddKQorCisgICAgZGVmIHRlc3RfdGltZV9hbmRfY2FsbF9hdChzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGRlbGF5ID0gMC4xCisKKyAgICAgICAgd2hlbiA9IHNlbGYubG9vcC50aW1lKCkgKyBkZWxheQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9hdCh3aGVuLCBjYikKKyAgICAgICAgdDAgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIGR0ID0gc2VsZi5sb29wLnRpbWUoKSAtIHQwCisKKyAgICAgICAgIyA1MCBtczogbWF4aW11bSBncmFudWxhcml0eSBvZiB0aGUgZXZlbnQgbG9vcAorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChkdCwgZGVsYXkgLSAwLjA1MCwgZHQpCisgICAgICAgICMgdG9sZXJhdGUgYSBkaWZmZXJlbmNlIG9mICs4MDAgbXMgYmVjYXVzZSBzb21lIFB5dGhvbiBidWlsZGJvdHMKKyAgICAgICAgIyBhcmUgcmVhbGx5IHNsb3cKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoZHQsIDAuOSwgZHQpCisKKyAgICBkZWYgdGVzdF9ydW5fb25jZV9pbl9leGVjdXRvcl9oYW5kbGUoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IsCisgICAgICAgICAgICBOb25lLCBhc3luY2lvLkhhbmRsZShjYiwgKCkpLCAoJycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvciwKKyAgICAgICAgICAgIE5vbmUsIGFzeW5jaW8uVGltZXJIYW5kbGUoMTAsIGNiLCAoKSkpCisKKyAgICBkZWYgdGVzdF9ydW5fb25jZV9pbl9leGVjdXRvcl9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUoY2IsICgpKQorICAgICAgICBoLmNhbmNlbCgpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFzeW5jaW8uRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ydW5fb25jZV9pbl9leGVjdXRvcl9wbGFpbihzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShjYiwgKCkpCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXhlY3V0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBleGVjdXRvci5zdWJtaXQucmV0dXJuX3ZhbHVlID0gZgorCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVmYXVsdF9leGVjdXRvcihleGVjdXRvcikKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKE5vbmUsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgcmVzKQorCisgICAgICAgIGV4ZWN1dG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZXhlY3V0b3Iuc3VibWl0LnJldHVybl92YWx1ZSA9IGYKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihleGVjdXRvciwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleGVjdXRvci5zdWJtaXQuY2FsbGVkKQorCisgICAgICAgIGYuY2FuY2VsKCkgICMgRG9uJ3QgY29tcGxhaW4gYWJvdXQgYWJhbmRvbmVkIEZ1dHVyZS4KKworICAgIGRlZiB0ZXN0X19ydW5fb25jZShzZWxmKToKKyAgICAgICAgaDEgPSBhc3luY2lvLlRpbWVySGFuZGxlKHRpbWUubW9ub3RvbmljKCkgKyA1LjAsIGxhbWJkYTogVHJ1ZSwgKCkpCisgICAgICAgIGgyID0gYXN5bmNpby5UaW1lckhhbmRsZSh0aW1lLm1vbm90b25pYygpICsgMTAuMCwgbGFtYmRhOiBUcnVlLCAoKSkKKworICAgICAgICBoMS5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NjaGVkdWxlZC5hcHBlbmQoaDEpCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkLmFwcGVuZChoMikKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisKKyAgICAgICAgdCA9IHNlbGYubG9vcC5fc2VsZWN0b3Iuc2VsZWN0LmNhbGxfYXJnc1swXVswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoOS41IDwgdCA8IDEwLjUsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2gyXSwgc2VsZi5sb29wLl9zY2hlZHVsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnRpbWUnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfX3J1bl9vbmNlX2xvZ2dpbmcoc2VsZiwgbV9sb2dnZXIsIG1fdGltZSk6CisgICAgICAgICMgTG9nIHRvIElORk8gbGV2ZWwgaWYgdGltZW91dCA+IDEuMCBzZWMuCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGRhdGEgPSBbMTAuMCwgMTAuMCwgMTIuMCwgMTMuMF0KKworICAgICAgICBkZWYgbW9ub3RvbmljKCk6CisgICAgICAgICAgICBub25sb2NhbCBkYXRhLCBpZHgKKyAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgICAgICByZXR1cm4gZGF0YVtpZHhdCisKKyAgICAgICAgbV90aW1lLm1vbm90b25pYyA9IG1vbm90b25pYworCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkLmFwcGVuZCgKKyAgICAgICAgICAgIGFzeW5jaW8uVGltZXJIYW5kbGUoMTEuMCwgbGFtYmRhOiBUcnVlLCAoKSkpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnaW5nLklORk8sIG1fbG9nZ2VyLmxvZy5jYWxsX2FyZ3NbMF1bMF0pCisKKyAgICAgICAgaWR4ID0gLTEKKyAgICAgICAgZGF0YSA9IFsxMC4wLCAxMC4wLCAxMC4zLCAxMy4wXQorICAgICAgICBzZWxmLmxvb3AuX3NjaGVkdWxlZCA9IFthc3luY2lvLlRpbWVySGFuZGxlKDExLjAsIGxhbWJkYTpUcnVlLCAoKSldCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dpbmcuREVCVUcsIG1fbG9nZ2VyLmxvZy5jYWxsX2FyZ3NbMF1bMF0pCisKKyAgICBkZWYgdGVzdF9fcnVuX29uY2Vfc2NoZWR1bGVfaGFuZGxlKHNlbGYpOgorICAgICAgICBoYW5kbGUgPSBOb25lCisgICAgICAgIHByb2Nlc3NlZCA9IEZhbHNlCisKKyAgICAgICAgZGVmIGNiKGxvb3ApOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvY2Vzc2VkLCBoYW5kbGUKKyAgICAgICAgICAgIHByb2Nlc3NlZCA9IFRydWUKKyAgICAgICAgICAgIGhhbmRsZSA9IGxvb3AuY2FsbF9zb29uKGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBoID0gYXN5bmNpby5UaW1lckhhbmRsZSh0aW1lLm1vbm90b25pYygpIC0gMSwgY2IsIChzZWxmLmxvb3AsKSkKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQuYXBwZW5kKGgpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9jZXNzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2hhbmRsZV0sIGxpc3Qoc2VsZi5sb29wLl9yZWFkeSkpCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGVfdHlwZV9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgJ2JsYWgnKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19leGVjX2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgYXJncyA9IFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3Bhc3MnXQorCisgICAgICAgICMgbWlzc2luZyBwcm9ncmFtIHBhcmFtZXRlciAoZW1wdHkgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYywKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgICMgZXhlcGVjdGVkIG11bHRpcGxlIGFyZ3VtZW50cywgbm90IGEgbGlzdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsIGFyZ3MpCisKKyAgICAgICAgIyBwcm9ncmFtIGFyZ3VtZW50cyBtdXN0IGJlIHN0cmluZ3MsIG5vdCBpbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYywKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCBzeXMuZXhlY3V0YWJsZSwgMTIzKQorCisgICAgICAgICMgdW5pdmVyc2FsX25ld2xpbmVzLCBzaGVsbCwgYnVmc2l6ZSBtdXN0IG5vdCBiZSBzZXQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsICphcmdzLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYywKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCAqYXJncywgc2hlbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYywKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCAqYXJncywgYnVmc2l6ZT00MDk2KQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zaGVsbF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgICMgZXhlcGVjdGVkIGEgc3RyaW5nLCBub3QgYW4gaW50IG9yIGEgbGlzdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCwKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsIFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3Bhc3MnXSkKKworICAgICAgICAjIHVuaXZlcnNhbF9uZXdsaW5lcywgc2hlbGwsIGJ1ZnNpemUgbXVzdCBub3QgYmUgc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsICdleGl0IDAnLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwsCisgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwgJ2V4aXQgMCcsIHNoZWxsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsICdleGl0IDAnLCBidWZzaXplPTQwOTYpCisKKworY2xhc3MgTXlQcm90byhhc3luY2lvLlByb3RvY29sKToKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNyZWF0ZV9mdXR1cmU9RmFsc2UpOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBpZiBjcmVhdGVfZnV0dXJlOgorICAgICAgICAgICAgc2VsZi5kb25lID0gYXN5bmNpby5GdXR1cmUoKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDT05ORUNURUQnCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcbkhvc3Q6IGV4YW1wbGUuY29tXHJcblxyXG4nKQorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYubmJ5dGVzICs9IGxlbihkYXRhKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdFT0YnCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlIGluICgnQ09OTkVDVEVEJywgJ0VPRicpLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15RGF0YWdyYW1Qcm90byhhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3JlYXRlX2Z1dHVyZT1GYWxzZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIGlmIGNyZWF0ZV9mdXR1cmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBhc3luY2lvLkZ1dHVyZSgpCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUxJWkVEJworCisgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYubmJ5dGVzICs9IGxlbihkYXRhKQorCisgICAgZGVmIGVycm9yX3JlY2VpdmVkKHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBCYXNlRXZlbnRMb29wV2l0aFNlbGVjdG9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9tdWx0aXBsZV9lcnJvcnMoc2VsZiwgbV9zb2NrZXQpOgorCisgICAgICAgIGNsYXNzIE15UHJvdG8oYXN5bmNpby5Qcm90b2NvbCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpLAorICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKV0KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGVycm9ycyA9IFsnZXJyMScsICdlcnIyJ10KKworICAgICAgICBkZWYgX3NvY2tldCgqYXJncywgKiprdyk6CisgICAgICAgICAgICBub25sb2NhbCBpZHgsIGVycm9ycworICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3JzW2lkeF0pCisKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0ID0gX3NvY2tldAorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICdNdWx0aXBsZSBleGNlcHRpb25zOiBlcnIxLCBlcnIyJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2hvc3RfcG9ydF9zb2NrKHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ub19ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fZ2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBbXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9jb25uZWN0X2VycihzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9tdWx0aXBsZShzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcwLjAuMC4xJywgODApKSwKKyAgICAgICAgICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzAuMC4wLjInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGVfZXJyb3JzX2xvY2FsX2FkZHIoc2VsZiwgbV9zb2NrZXQpOgorCisgICAgICAgIGRlZiBiaW5kKGFkZHIpOgorICAgICAgICAgICAgaWYgYWRkclswXSA9PSAnMC4wLjAuMSc6CisgICAgICAgICAgICAgICAgZXJyID0gT1NFcnJvcignRXJyJykKKyAgICAgICAgICAgICAgICBlcnIuc3RyZXJyb3IgPSAnRXJyJworICAgICAgICAgICAgICAgIHJhaXNlIGVycgorCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuYmluZCA9IGJpbmQKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzAuMC4wLjEnLCA4MCkpLAorICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMC4wLjAuMicsIDgwKSldCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcignRXJyMicpCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgIE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwLCBmYW1pbHk9c29ja2V0LkFGX0lORVQsCisgICAgICAgICAgICBsb2NhbF9hZGRyPShOb25lLCA4MDgwKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGNtLmV4Y2VwdGlvbikuc3RhcnRzd2l0aCgnTXVsdGlwbGUgZXhjZXB0aW9uczogJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX25vX2xvY2FsX2FkZHIoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oaG9zdCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgaWYgaG9zdCA9PSAnZXhhbXBsZS5jb20nOgorICAgICAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCwgZmFtaWx5PXNvY2tldC5BRl9JTkVULAorICAgICAgICAgICAgbG9jYWxfYWRkcj0oTm9uZSwgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3NzbF9zZXJ2ZXJfaG9zdG5hbWVfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBkZWYgbW9ja19nZXRhZGRyaW5mbygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIGYuc2V0X3Jlc3VsdChbKHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1RDUCwgJycsICgnMS4yLjMuNCcsIDgwKSldKQorICAgICAgICAgICAgcmV0dXJuIGYKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8uc2lkZV9lZmZlY3QgPSBtb2NrX2dldGFkZHJpbmZvCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0LnJldHVybl92YWx1ZSA9ICgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBjbGFzcyBfU2VsZWN0b3JUcmFuc3BvcnRNb2NrOgorICAgICAgICAgICAgX3NvY2sgPSBOb25lCisKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKworICAgICAgICBkZWYgbW9ja19tYWtlX3NzbF90cmFuc3BvcnQoc29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dkcyk6CisgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yVHJhbnNwb3J0TW9jaygpCisgICAgICAgICAgICB0cmFuc3BvcnQuX3NvY2sgPSBzb2NrCisgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0CisKKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQuc2lkZV9lZmZlY3QgPSBtb2NrX21ha2Vfc3NsX3RyYW5zcG9ydAorICAgICAgICBBTlkgPSB1bml0dGVzdC5tb2NrLkFOWQorICAgICAgICAjIEZpcnN0IHRyeSB0aGUgZGVmYXVsdCBzZXJ2ZXJfaG9zdG5hbWUuCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LnJlc2V0X21vY2soKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsIHNzbD1UcnVlKQorICAgICAgICB0cmFuc3BvcnQsIF8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIEFOWSwgQU5ZLCBBTlksIEFOWSwKKyAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdweXRob24ub3JnJykKKyAgICAgICAgIyBOZXh0IHRyeSBhbiBleHBsaWNpdCBzZXJ2ZXJfaG9zdG5hbWUuCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LnJlc2V0X21vY2soKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsIHNzbD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncGVybC5jb20nKQorICAgICAgICB0cmFuc3BvcnQsIF8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIEFOWSwgQU5ZLCBBTlksIEFOWSwKKyAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdwZXJsLmNvbScpCisgICAgICAgICMgRmluYWxseSB0cnkgYW4gZXhwbGljaXQgZW1wdHkgc2VydmVyX2hvc3RuYW1lLgorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5yZXNldF9tb2NrKCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLCBzc2w9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9JycpCisgICAgICAgIHRyYW5zcG9ydCwgXyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQuYXNzZXJ0X2NhbGxlZF93aXRoKEFOWSwgQU5ZLCBBTlksIEFOWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fc3NsX3NlcnZlcl9ob3N0bmFtZV9lcnJvcnMoc2VsZik6CisgICAgICAgICMgV2hlbiBub3QgdXNpbmcgc3NsLCBzZXJ2ZXJfaG9zdG5hbWUgbXVzdCBiZSBOb25lLgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdweXRob24ub3JnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3NzbF9zZXJ2ZXJfaG9zdG5hbWVfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIFdoZW4gdXNpbmcgc3NsLCBzZXJ2ZXJfaG9zdG5hbWUgbWF5IGJlIE5vbmUgaWYgaG9zdCBpcyBub24tZW1wdHkuCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJycsIDgwLCBzc2w9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBOb25lLCA4MCwgc3NsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1UcnVlLCBzb2NrPXNvY2spCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9lbXB0eV9ob3N0KHNlbGYpOgorICAgICAgICAjIGlmIGhvc3QgaXMgZW1wdHkgc3RyaW5nIHVzZSBOb25lIGluc3RlYWQKKyAgICAgICAgaG9zdCA9IG9iamVjdCgpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICBub25sb2NhbCBob3N0CisgICAgICAgICAgICBob3N0ID0gYXJnc1swXQorICAgICAgICAgICAgeWllbGQgZnJvbSBbXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCAnJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShob3N0KQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoCisgICAgICAgICAgICBNeVByb3RvLCAnMC4wLjAuMCcsIDAsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbm9faG9zdF9wb3J0X3NvY2soc2VsZik6CisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbm9fZ2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIGdldGFkZHJpbmZvID0gc2VsZi5sb29wLmdldGFkZHJpbmZvID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gW10KKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2NhbnRfYmluZChzZWxmLCBtX3NvY2tldCk6CisKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgc3RyZXJyb3IgPSAnZXJyb3InCisKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gWworICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzEyNy4wLjAuMScsIDEwMTAwKSldCisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvLl9pc19jb3JvdXRpbmUgPSBGYWxzZQorICAgICAgICBtX3NvY2sgPSBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgbV9zb2NrLmJpbmQuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCAnMC4wLjAuMCcsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9ub19hZGRyaW5mbyhzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvLnJldHVybl92YWx1ZSA9IFtdCisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvLl9pc19jb3JvdXRpbmUgPSBGYWxzZQorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCBsb2NhbF9hZGRyPSgnbG9jYWxob3N0JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9hZGRyX2Vycm9yKHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgbG9jYWxfYWRkcj0nbG9jYWxob3N0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9KCdsb2NhbGhvc3QnLCAxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9jb25uZWN0X2VycihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wsIHJlbW90ZV9hZGRyPSgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X3NvY2tldF9lcnIoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mbyA9IHNvY2tldC5nZXRhZGRyaW5mbworICAgICAgICBtX3NvY2tldC5zb2NrZXQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgYXN5bmNpby5EYXRhZ3JhbVByb3RvY29sLCBsb2NhbF9hZGRyPSgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKElQVjZfRU5BQkxFRCwgJ0lQdjYgbm90IHN1cHBvcnRlZCBvciBlbmFibGVkJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfbm9fbWF0Y2hpbmdfZmFtaWx5KHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCwKKyAgICAgICAgICAgIHJlbW90ZV9hZGRyPSgnMTI3LjAuMC4xJywgMCksIGxvY2FsX2FkZHI9KCc6OjEnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc2V0YmxrX2VycihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuc2V0YmxvY2tpbmcuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9ub2FkZHJfbm9mYW1pbHkoc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgYXN5bmNpby5EYXRhZ3JhbVByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfY2FudF9iaW5kKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1fc29ja2V0LkFGX0lORVQ2ID0gc29ja2V0LkFGX0lORVQ2CisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvID0gc29ja2V0LmdldGFkZHJpbmZvCisgICAgICAgIG1fc29jayA9IG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBtX3NvY2suYmluZC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sCisgICAgICAgICAgICBsb2NhbF9hZGRyPSgnMTI3LjAuMC4xJywgMCksIGZhbWlseT1zb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXJyLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfYWNjZXB0X2Nvbm5lY3Rpb25fcmV0cnkoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9hY2NlcHRfY29ubmVjdGlvbihNeVByb3RvLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfYWNjZXB0X2Nvbm5lY3Rpb25fZXhjZXB0aW9uKHNlbGYsIG1fbG9nKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcihlcnJuby5FTUZJTEUsICdUb28gbWFueSBvcGVuIGZpbGVzJykKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9hY2NlcHRfY29ubmVjdGlvbihNeVByb3RvLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9sb2cuZXhjZXB0aW9uLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoY29uc3RhbnRzLkFDQ0VQVF9SRVRSWV9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15UHJvdG8sIHNvY2ssIE5vbmUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWxsX2Nvcm91dGluZShzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvdXRpbmVfZnVuY3Rpb24oKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNvcm91dGluZV9mdW5jdGlvbikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKGNvcm91dGluZV9mdW5jdGlvbikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoNjAsIGNvcm91dGluZV9mdW5jdGlvbikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfYXQoc2VsZi5sb29wLnRpbWUoKSArIDYwLCBjb3JvdXRpbmVfZnVuY3Rpb24pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgY29yb3V0aW5lX2Z1bmN0aW9uKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiOGRkOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weQpAQCAtMCwwICsxLDE5NjQgQEAKKyIiIlRlc3RzIGZvciBldmVudHMucHkuIiIiCisKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBnYworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQorICAgIEhBU19TTkkgPSBGYWxzZQorZWxzZToKKyAgICBmcm9tIHNzbCBpbXBvcnQgSEFTX1NOSQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgZXJybm8KK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCAgIyBmaW5kX3VudXNlZF9wb3J0LCBJUFY2X0VOQUJMRUQsIFRFU1RfSE9NRV9ESVIKKworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCBldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JfZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitkZWYgZGF0YV9maWxlKGZpbGVuYW1lKToKKyAgICBpZiBoYXNhdHRyKHN1cHBvcnQsICdURVNUX0hPTUVfRElSJyk6CisgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVF9IT01FX0RJUiwgZmlsZW5hbWUpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZ1bGxuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBmdWxsbmFtZQorICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIGZpbGVuYW1lKQorICAgIGlmIG9zLnBhdGguaXNmaWxlKGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIGZ1bGxuYW1lCisgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoZmlsZW5hbWUpCisKK09OTFlDRVJUID0gZGF0YV9maWxlKCdzc2xfY2VydC5wZW0nKQorT05MWUtFWSA9IGRhdGFfZmlsZSgnc3NsX2tleS5wZW0nKQorU0lHTkVEX0NFUlRGSUxFID0gZGF0YV9maWxlKCdrZXljZXJ0My5wZW0nKQorU0lHTklOR19DQSA9IGRhdGFfZmlsZSgncHljYWNlcnQucGVtJykKKworCitjbGFzcyBNeVByb3RvKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInR0VUIC8gSFRUUC8xLjBcclxuSG9zdDogZXhhbXBsZS5jb21cclxuXHJcbicpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0VPRicKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgaW4gKCdDT05ORUNURUQnLCAnRU9GJyksIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlEYXRhZ3JhbVByb3RvKGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kb25lID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMSVpFRCcKKworICAgIGRlZiBkYXRhZ3JhbV9yZWNlaXZlZChzZWxmLCBkYXRhLCBhZGRyKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlcnJvcl9yZWNlaXZlZChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlSZWFkUGlwZVByb3RvKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9IFsnSU5JVElBTCddCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gWydJTklUSUFMJ10sIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZS5hcHBlbmQoJ0NPTk5FQ1RFRCcpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYubmJ5dGVzICs9IGxlbihkYXRhKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdFT0YnKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBpZiAnRU9GJyBub3QgaW4gc2VsZi5zdGF0ZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdFT0YnKSAgIyBJdCBpcyBva2F5IGlmIEVPRiBpcyBtaXNzZWQuCisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCcsICdDT05ORUNURUQnLCAnRU9GJ10sIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZS5hcHBlbmQoJ0NMT1NFRCcpCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlXcml0ZVBpcGVQcm90byhhc3luY2lvLkJhc2VQcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gTm9uZQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kb25lID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDT05ORUNURUQnCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15U3VicHJvY2Vzc1Byb3RvY29sKGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuY29tcGxldGVkID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmRpc2Nvbm5lY3RzID0ge2ZkOiBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApIGZvciBmZCBpbiByYW5nZSgzKX0KKyAgICAgICAgc2VsZi5kYXRhID0gezE6IGInJywgMjogYicnfQorICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuZ290X2RhdGEgPSB7MTogYXN5bmNpby5FdmVudChsb29wPWxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgIDI6IGFzeW5jaW8uRXZlbnQobG9vcD1sb29wKX0KKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworICAgICAgICBzZWxmLmNvbm5lY3RlZC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBzZWxmLmNvbXBsZXRlZC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5kYXRhW2ZkXSArPSBkYXRhCisgICAgICAgIHNlbGYuZ290X2RhdGFbZmRdLnNldCgpCisKKyAgICBkZWYgcGlwZV9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZmQsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIGlmIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZGlzY29ubmVjdHNbZmRdLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0c1tmZF0uc2V0X3Jlc3VsdChleGMpCisKKyAgICBkZWYgcHJvY2Vzc19leGl0ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IHNlbGYudHJhbnNwb3J0LmdldF9yZXR1cm5jb2RlKCkKKworCitjbGFzcyBFdmVudExvb3BUZXN0c01peGluOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5jcmVhdGVfZXZlbnRfbG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBqdXN0IGluIGNhc2UgaWYgd2UgaGF2ZSB0cmFuc3BvcnQgY2xvc2UgY2FsbGJhY2tzCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZV9uZXN0aW5nKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8xKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuaXNfcnVubmluZygpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvMSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvMigpKQorCisgICAgIyBOb3RlOiBiZWNhdXNlIG9mIHRoZSBkZWZhdWx0IFdpbmRvd3MgdGltaW5nIGdyYW51bGFyaXR5IG9mCisgICAgIyAxNS42IG1zZWMsIHdlIHVzZSBmYWlybHkgbG9uZyBzbGVlcCB0aW1lcyBoZXJlICh+MTAwIG1zZWMpLgorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlKHNlbGYpOgorICAgICAgICB0MCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICB0MSA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDggPD0gdDEtdDAgPD0gMC44LCB0MS10MCkKKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZV9zdG9wcGVkKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzayA9IGNiKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorCisgICAgZGVmIHRlc3RfY2FsbF9sYXRlcihzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoMC4xLCBjYWxsYmFjaywgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgdDAgPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHQxID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8gd29ybGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDggPD0gdDEtdDAgPD0gMC44LCB0MS10MCkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbihzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZzEsIGFyZzIpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKGFyZzEsIGFyZzIpKQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICdoZWxsbycsICd3b3JsZCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWygnaGVsbG8nLCAnd29ybGQnKV0pCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBpZiBsZW4ocmVzdWx0cykgPj0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgZGVmIHJ1bl9pbl90aHJlYWQoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjYWxsYmFjaywgJ2hlbGxvJykKKyAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1bl9pbl90aHJlYWQpCisgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICd3b3JsZCcpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB0LmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8nLCAnd29ybGQnXSkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbl90aHJlYWRzYWZlX3NhbWVfdGhyZWFkKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBkZWYgY2FsbGJhY2soYXJnKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGFyZykKKyAgICAgICAgICAgIGlmIGxlbihyZXN1bHRzKSA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY2FsbGJhY2ssICdoZWxsbycpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICd3b3JsZCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWydoZWxsbycsICd3b3JsZCddKQorCisgICAgZGVmIHRlc3RfcnVuX2luX2V4ZWN1dG9yKHNlbGYpOgorICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBmMiA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgcnVuLCAneW8nKQorICAgICAgICByZXMsIHRocmVhZF9pZCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAneW8nKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRocmVhZF9pZCwgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorCisgICAgZGVmIHRlc3RfcmVhZGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICByLCB3ID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgYnl0ZXNfcmVhZCA9IFtdCisKKyAgICAgICAgZGVmIHJlYWRlcigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSByLnJlY3YoMTAyNCkKKyAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTcHVyaW91cyByZWFkaW5lc3Mgbm90aWZpY2F0aW9ucyBhcmUgcG9zc2libGUKKyAgICAgICAgICAgICAgICAjIGF0IGxlYXN0IG9uIExpbnV4IC0tIHNlZSBtYW4gc2VsZWN0LgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBieXRlc19yZWFkLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIoci5maWxlbm8oKSkpCisgICAgICAgICAgICAgICAgci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoci5maWxlbm8oKSwgcmVhZGVyKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHcuc2VuZCwgYidhYmMnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3LnNlbmQsIGInZGVmJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24ody5jbG9zZSkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihzZWxmLmxvb3Auc3RvcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycuam9pbihieXRlc19yZWFkKSwgYidhYmNkZWYnKQorCisgICAgZGVmIHRlc3Rfd3JpdGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICByLCB3ID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgdy5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIody5maWxlbm8oKSwgdy5zZW5kLCBiJ3gnKigyNTYqMTAyNCkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIGRlZiByZW1vdmVfd3JpdGVyKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJlbW92ZV93cml0ZXIody5maWxlbm8oKSkpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihyZW1vdmVfd3JpdGVyKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHNlbGYubG9vcC5zdG9wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB3LmNsb3NlKCkKKyAgICAgICAgZGF0YSA9IHIucmVjdigyNTYqMTAyNCkKKyAgICAgICAgci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihkYXRhKSwgMjAwKQorCisgICAgZGVmIHRlc3Rfc29ja19jbGllbnRfb3BzKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGh0dHBkLmFkZHJlc3MpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfcmVjdihzb2NrLCAxMDI0KSkKKyAgICAgICAgICAgICMgY29uc3VtZSBkYXRhCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc29jaywgMTAyNCkpCisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5zdGFydHN3aXRoKGInSFRUUC8xLjAgMjAwIE9LJykpCisKKyAgICBkZWYgdGVzdF9zb2NrX2NsaWVudF9mYWlsKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHdpbGwgZ2V0IGFuIHVudXNlZCBwb3J0CisgICAgICAgIGFkZHJlc3MgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHMuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICAgICAgYWRkcmVzcyA9IHMuZ2V0c29ja25hbWUoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpKQorICAgICAgICBzb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBsaXN0ZW5lciA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBsaXN0ZW5lci5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgbGlzdGVuZXIuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICBsaXN0ZW5lci5saXN0ZW4oMSkKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KGxpc3RlbmVyLmdldHNvY2tuYW1lKCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2FjY2VwdChsaXN0ZW5lcikKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLmdldHRpbWVvdXQoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyLCBjbGllbnQuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGllbnQuZ2V0cGVlcm5hbWUoKSwgbGlzdGVuZXIuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgIGxpc3RlbmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHS0lMTCcpLCAnTm8gU0lHS0lMTCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBjYXVnaHQgPSAwCisKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhdWdodAorICAgICAgICAgICAgY2F1Z2h0ICs9IDEKKworICAgICAgICAjIENoZWNrIGVycm9yIGJlaGF2aW9yIGZpcnN0LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgJ2Jvb20nLCBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgJ2Jvb20nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5OU0lHKzEsCisgICAgICAgICAgICBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5OU0lHKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgMCwgbXlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIC0xLCBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0tJTEwsCisgICAgICAgICAgICBteV9oYW5kbGVyKQorICAgICAgICAjIFJlbW92aW5nIFNJR0tJTEwgZG9lc24ndCByYWlzZSwgc2luY2Ugd2UgZG9uJ3QgY2FsbCBzaWduYWwoKS4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdLSUxMKSkKKyAgICAgICAgIyBOb3cgc2V0IGEgaGFuZGxlciBhbmQgaGFuZGxlIGl0LgorICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQsIG15X2hhbmRsZXIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBvcy5raWxsKG9zLmdldHBpZCgpLCBzaWduYWwuU0lHSU5UKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXVnaHQsIDEpCisgICAgICAgICMgUmVtb3ZpbmcgaXQgc2hvdWxkIHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlci4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0lOVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwuZGVmYXVsdF9pbnRfaGFuZGxlcikKKyAgICAgICAgIyBSZW1vdmluZyBhZ2FpbiByZXR1cm5zIEZhbHNlLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0lOVCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR0FMUk0nKSwgJ05vIFNJR0FMUk0nKQorICAgIGRlZiB0ZXN0X3NpZ25hbF9oYW5kbGluZ193aGlsZV9zZWxlY3Rpbmcoc2VsZik6CisgICAgICAgICMgVGVzdCB3aXRoIGEgc2lnbmFsIGFjdHVhbGx5IGFycml2aW5nIGR1cmluZyBhIHNlbGVjdCgpIGNhbGwuCisgICAgICAgIGNhdWdodCA9IDAKKworICAgICAgICBkZWYgbXlfaGFuZGxlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgY2F1Z2h0CisgICAgICAgICAgICBjYXVnaHQgKz0gMQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0FMUk0sIG15X2hhbmRsZXIpCisKKyAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzaWduYWwuSVRJTUVSX1JFQUwsIDAuMDEsIDApICAjIFNlbmQgU0lHQUxSTSBvbmNlLgorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhdWdodCwgMSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHQUxSTScpLCAnTm8gU0lHQUxSTScpCisgICAgZGVmIHRlc3Rfc2lnbmFsX2hhbmRsaW5nX2FyZ3Moc2VsZik6CisgICAgICAgIHNvbWVfYXJncyA9ICg0MiwpCisgICAgICAgIGNhdWdodCA9IDAKKworICAgICAgICBkZWYgbXlfaGFuZGxlcigqYXJncyk6CisgICAgICAgICAgICBub25sb2NhbCBjYXVnaHQKKyAgICAgICAgICAgIGNhdWdodCArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIHNvbWVfYXJncykKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdBTFJNLCBteV9oYW5kbGVyLCAqc29tZV9hcmdzKQorCisgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2lnbmFsLklUSU1FUl9SRUFMLCAwLjEsIDApICAjIFNlbmQgU0lHQUxSTSBvbmNlLgorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigwLjUsIHNlbGYubG9vcC5zdG9wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhdWdodCwgMSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksICpodHRwZC5hZGRyZXNzKQorICAgICAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyLCBhc3luY2lvLlRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwciwgYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHIuZG9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihwci5uYnl0ZXMsIDApCisgICAgICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9zb2NrKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgaW5mb3MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICAgICAgKmh0dHBkLmFkZHJlc3MsIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNKSkKKyAgICAgICAgICAgIGZvciBmYW1pbHksIHR5cGUsIHByb3RvLCBjbmFtZSwgYWRkcmVzcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseT1mYW1pbHksIHR5cGU9dHlwZSwgcHJvdG89cHJvdG8pCisgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgJ0NhbiBub3QgY3JlYXRlIHNvY2tldC4nCisKKyAgICAgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBNeVByb3RvKGxvb3A9c2VsZi5sb29wKSwgc29jaz1zb2NrKQorICAgICAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyLCBhc3luY2lvLlRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwciwgYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHIuZG9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihwci5uYnl0ZXMsIDApCisgICAgICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKHVzZV9zc2w9VHJ1ZSkgYXMgaHR0cGQ6CisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksICpodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgIHNzbD10ZXN0X3V0aWxzLmR1bW15X3NzbF9jb250ZXh0KCkpCisgICAgICAgICAgICB0ciwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIGFzeW5jaW8uVHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByLCBhc3luY2lvLlByb3RvY29sKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdzc2wnIGluIHRyLl9fY2xhc3NfXy5fX25hbWVfXy5sb3dlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocHIubmJ5dGVzLCAwKQorICAgICAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbG9jYWxfYWRkcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgKmh0dHBkLmFkZHJlc3MsIGxvY2FsX2FkZHI9KGh0dHBkLmFkZHJlc3NbMF0sIHBvcnQpKQorICAgICAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBwci50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJylbMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydCwgZXhwZWN0ZWQpCisgICAgICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9sb2NhbF9hZGRyX2luX3VzZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICpodHRwZC5hZGRyZXNzLCBsb2NhbF9hZGRyPWh0dHBkLmFkZHJlc3MpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQUREUklOVVNFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdHIoaHR0cGQuYWRkcmVzcyksIGNtLmV4Y2VwdGlvbi5zdHJlcnJvcikKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVByb3RvKCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihmYWN0b3J5LCAnMC4wLjAuMCcsIDApCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VydmVyLnNvY2tldHMpLCAxKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QsICcwLjAuMC4wJykKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kYWxsKGIneHh4JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90byBpcyBub3QgTm9uZSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlQcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSU5JVElBTCcsIHByb3RvLnN0YXRlKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTI3LjAuMC4xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJylbMF0pCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKSAgIyB3aW5kb3dzIGlvY3AKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICAjIHRoZSBjbGllbnQgc29ja2V0IG11c3QgYmUgY2xvc2VkIGFmdGVyIHRvIGF2b2lkIEVDT05OUkVTRVQgdXBvbgorICAgICAgICAjIHJlY3YoKS9zZW5kKCkgb24gdGhlIHNlcnZpbmcgc29ja2V0CisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgIyBjbG9zZSBzZXJ2ZXIKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIGRlZiBfbWFrZV9zc2xfc2VydmVyKHNlbGYsIGZhY3RvcnksIGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUpOgorICAgICAgICBzc2xjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoCisgICAgICAgICAgICBmYWN0b3J5LCAnMTI3LjAuMC4xJywgMCwgc3NsPXNzbGNvbnRleHQpCisKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QsICcxMjcuMC4wLjEnKQorICAgICAgICByZXR1cm4gc2VydmVyLCBob3N0LCBwb3J0CisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGNsYXNzIENsaWVudE15UHJvdG8oTXlQcm90byk6CisgICAgICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIHNlcnZlciwgaG9zdCwgcG9ydCA9IHNlbGYuX21ha2Vfc3NsX3NlcnZlcihmYWN0b3J5LCBPTkxZQ0VSVCwgT05MWUtFWSkKKworICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oQ2xpZW50TXlQcm90bywgaG9zdCwgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD10ZXN0X3V0aWxzLmR1bW15X3NzbF9jb250ZXh0KCkpCisgICAgICAgIGNsaWVudCwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICBjbGllbnQud3JpdGUoYid4eHgnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVByb3RvKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTI3LjAuMC4xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJylbMF0pCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgIyB0aGUgY2xpZW50IHNvY2tldCBtdXN0IGJlIGNsb3NlZCBhZnRlciB0byBhdm9pZCBFQ09OTlJFU0VUIHVwb24KKyAgICAgICAgIyByZWN2KCkvc2VuZCgpIG9uIHRoZSBzZXJ2aW5nIHNvY2tldAorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgICMgc3RvcCBzZXJ2aW5nCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1NOSSwgJ05vIFNOSSBzdXBwb3J0IGluIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsX3ZlcmlmeV9mYWlsZWQoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICAgICAgc2VydmVyLCBob3N0LCBwb3J0ID0gc2VsZi5fbWFrZV9zc2xfc2VydmVyKGZhY3RvcnksIFNJR05FRF9DRVJURklMRSkKKworICAgICAgICBzc2xjb250ZXh0X2NsaWVudCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgaWYgaGFzYXR0cihzc2xjb250ZXh0X2NsaWVudCwgJ2NoZWNrX2hvc3RuYW1lJyk6CisgICAgICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5jaGVja19ob3N0bmFtZSA9IFRydWUKKworICAgICAgICAjIG5vIENBIGxvYWRlZAorICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgaG9zdCwgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1zc2xjb250ZXh0X2NsaWVudCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmFpbGVkICcpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX2MpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfU05JLCAnTm8gU05JIHN1cHBvcnQgaW4gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfbWF0Y2hfZmFpbGVkKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIHNlcnZlciwgaG9zdCwgcG9ydCA9IHNlbGYuX21ha2Vfc3NsX3NlcnZlcihmYWN0b3J5LCBTSUdORURfQ0VSVEZJTEUpCisKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucygKKyAgICAgICAgICAgIGNhZmlsZT1TSUdOSU5HX0NBKQorICAgICAgICBpZiBoYXNhdHRyKHNzbGNvbnRleHRfY2xpZW50LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorCisgICAgICAgICMgaW5jb3JyZWN0IHNlcnZlcl9ob3N0bmFtZQorICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgaG9zdCwgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1zc2xjb250ZXh0X2NsaWVudCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgICAgIHNzbC5DZXJ0aWZpY2F0ZUVycm9yLAorICAgICAgICAgICAgICAgICJob3N0bmFtZSAnMTI3LjAuMC4xJyBkb2Vzbid0IG1hdGNoICdsb2NhbGhvc3QnIik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfU05JLCAnTm8gU05JIHN1cHBvcnQgaW4gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICAgICAgc2VydmVyLCBob3N0LCBwb3J0ID0gc2VsZi5fbWFrZV9zc2xfc2VydmVyKGZhY3RvcnksIFNJR05FRF9DRVJURklMRSkKKworICAgICAgICBzc2xjb250ZXh0X2NsaWVudCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1TSUdOSU5HX0NBKQorICAgICAgICBpZiBoYXNhdHRyKHNzbGNvbnRleHRfY2xpZW50LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorCisgICAgICAgICMgQ29ubmVjdGlvbiBzdWNjZWVkcyB3aXRoIGNvcnJlY3QgQ0EgYW5kIHNlcnZlciBob3N0bmFtZS4KKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sIGhvc3QsIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9c3NsY29udGV4dF9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J2xvY2FsaG9zdCcpCisgICAgICAgIGNsaWVudCwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc29jayhzZWxmKToKKyAgICAgICAgcHJvdG8gPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBjbGFzcyBUZXN0TXlQcm90byhNeVByb3RvKToKKyAgICAgICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgICAgICBzdXBlcigpLmNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCisgICAgICAgICAgICAgICAgcHJvdG8uc2V0X3Jlc3VsdChzZWxmKQorCisgICAgICAgIHNvY2tfb2IgPSBzb2NrZXQuc29ja2V0KHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzb2NrX29iLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIHNvY2tfb2IuYmluZCgoJzAuMC4wLjAnLCAwKSkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoVGVzdE15UHJvdG8sIHNvY2s9c29ja19vYikKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzb2NrLCBzb2NrX29iKQorCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LCAnMC4wLjAuMCcpCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuc2VuZChiJ3h4eCcpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2FkZHJfaW5fdXNlKHNlbGYpOgorICAgICAgICBzb2NrX29iID0gc29ja2V0LnNvY2tldCh0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc29ja19vYi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICBzb2NrX29iLmJpbmQoKCcwLjAuMC4wJywgMCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sIHNvY2s9c29ja19vYikKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCBob3N0PWhvc3QsIHBvcnQ9cG9ydCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVBRERSSU5VU0UpCisKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuSVBWNl9FTkFCTEVELCAnSVB2NiBub3Qgc3VwcG9ydGVkIG9yIGVuYWJsZWQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfZHVhbF9zdGFjayhzZWxmKToKKyAgICAgICAgZl9wcm90byA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGNsYXNzIFRlc3RNeVByb3RvKE15UHJvdG8pOgorICAgICAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKKyAgICAgICAgICAgICAgICBmX3Byb3RvLnNldF9yZXN1bHQoc2VsZikKKworICAgICAgICB0cnlfY291bnQgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKFRlc3RNeVByb3RvLCBob3N0PU5vbmUsIHBvcnQ9cG9ydCkKKyAgICAgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleDoKKyAgICAgICAgICAgICAgICBpZiBleC5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgorICAgICAgICAgICAgICAgICAgICB0cnlfY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCg1LCB0cnlfY291bnQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfcHJvdG8pCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgZl9wcm90byA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNikKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCc6OjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmQoYid4eHgnKQorICAgICAgICBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9wcm90bykKKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2VydmVyX2Nsb3NlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IsIGNsaWVudC5jb25uZWN0LCAoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0TXlEYXRhZ3JhbVByb3RvKE15RGF0YWdyYW1Qcm90byk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oaW5uZXJfc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPXNlbGYubG9vcCkKKworICAgICAgICAgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuZGF0YWdyYW1fcmVjZWl2ZWQoZGF0YSwgYWRkcikKKyAgICAgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydC5zZW5kdG8oYidyZXNwOicrZGF0YSwgYWRkcikKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIFRlc3RNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgc190cmFuc3BvcnQsIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNfdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBsYW1iZGE6IE15RGF0YWdyYW1Qcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICByZW1vdGVfYWRkcj0oaG9zdCwgcG9ydCkpCisgICAgICAgIHRyYW5zcG9ydCwgY2xpZW50ID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0lOSVRJQUxJWkVEJywgY2xpZW50LnN0YXRlKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGIneHh4JykKKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICBpZiBzZXJ2ZXIubmJ5dGVzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBzZXJ2ZXIubmJ5dGVzKQorICAgICAgICBmb3IgXyBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgIGlmIGNsaWVudC5uYnl0ZXM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgICMgcmVjZWl2ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg4LCBjbGllbnQubmJ5dGVzKQorCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNsaWVudC5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBjbGllbnQuc3RhdGUpCisgICAgICAgIHNlcnZlci50cmFuc3BvcnQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfaW50ZXJuYWxfZmRzKHNlbGYpOgorICAgICAgICBsb29wID0gc2VsZi5jcmVhdGVfZXZlbnRfbG9vcCgpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGxvb3AsIHNlbGVjdG9yX2V2ZW50cy5CYXNlU2VsZWN0b3JFdmVudExvb3ApOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbG9vcCBpcyBub3QgYSBCYXNlU2VsZWN0b3JFdmVudExvb3AnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbG9vcC5faW50ZXJuYWxfZmRzKQorICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsb29wLl9pbnRlcm5hbF9mZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvb3AuX2Nzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb29wLl9zc29jaykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF9yZWFkX3BpcGUoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVJlYWRQaXBlUHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZXR1cm4gcHJvdG8KKworICAgICAgICBycGlwZSwgd3BpcGUgPSBvcy5waXBlKCkKKyAgICAgICAgcGlwZW9iaiA9IGlvLm9wZW4ocnBpcGUsICdyYicsIDEwMjQpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICB0LCBwID0geWllbGQgZnJvbSBzZWxmLmxvb3AuY29ubmVjdF9yZWFkX3BpcGUoZmFjdG9yeSwgcGlwZW9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorCisgICAgICAgIG9zLndyaXRlKHdwaXBlLCBiJzEnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgb3Mud3JpdGUod3BpcGUsIGInMjM0NScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgcHJvdG8uc3RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIG9zLmNsb3NlKHdwaXBlKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJywgJ0VPRicsICdDTE9TRUQnXSwgcHJvdG8uc3RhdGUpCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwaXBlJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgIyBzZWxlY3QsIHBvbGwgYW5kIGtxdWV1ZSBkb24ndCBzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzIChQVFkpIG9uIE1hYyBPUyBYCisgICAgIyBvbGRlciB0aGFuIDEwLjYgKFNub3cgTGVvcGFyZCkKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA2KQorICAgICMgSXNzdWUgIzIwNDk1OiBUaGUgdGVzdCBoYW5ncyBvbiBGcmVlQlNEIDcuMiBidXQgcGFzcyBvbiBGcmVlQlNEIDkKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19mcmVlYnNkX3ZlcnNpb24oOCkKKyAgICBkZWYgdGVzdF9yZWFkX3B0eV9vdXRwdXQoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVJlYWRQaXBlUHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZXR1cm4gcHJvdG8KKworICAgICAgICBtYXN0ZXIsIHNsYXZlID0gb3Mub3BlbnB0eSgpCisgICAgICAgIG1hc3Rlcl9yZWFkX29iaiA9IGlvLm9wZW4obWFzdGVyLCAncmInLCAwKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgdCwgcCA9IHlpZWxkIGZyb20gc2VsZi5sb29wLmNvbm5lY3RfcmVhZF9waXBlKGZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyX3JlYWRfb2JqKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwLCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModCwgcHJvdG8udHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJ10sIHByb3RvLnN0YXRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisKKyAgICAgICAgb3Mud3JpdGUoc2xhdmUsIGInMScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIG9zLndyaXRlKHNsYXZlLCBiJzIzNDUnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID49IDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgb3MuY2xvc2Uoc2xhdmUpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsnSU5JVElBTCcsICdDT05ORUNURUQnLCAnRU9GJywgJ0NMT1NFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BpcGUnKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF93cml0ZV9waXBlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwb3J0ID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVdyaXRlUGlwZVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICAgICAgcnBpcGUsIHdwaXBlID0gb3MucGlwZSgpCisgICAgICAgIHBpcGVvYmogPSBpby5vcGVuKHdwaXBlLCAnd2InLCAxMDI0KQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgdHJhbnNwb3J0CisgICAgICAgICAgICB0LCBwID0geWllbGQgZnJvbSBzZWxmLmxvb3AuY29ubmVjdF93cml0ZV9waXBlKGZhY3RvcnksIHBpcGVvYmopCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0LCBwcm90by50cmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHQKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicxJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGRhdGEgPSBvcy5yZWFkKHJwaXBlLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMScsIGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInMjM0NScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBkYXRhID0gb3MucmVhZChycGlwZSwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzIzNDUnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICBvcy5jbG9zZShycGlwZSkKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGlwZScpKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtICE9ICd3aW4zMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRvbid0IHN1cHBvcnQgcGlwZXMgZm9yIFdpbmRvd3MiKQorICAgIGRlZiB0ZXN0X3dyaXRlX3BpcGVfZGlzY29ubmVjdF9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcG9ydCA9IE5vbmUKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgIHByb3RvID0gTXlXcml0ZVBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIHJzb2NrLCB3c29jayA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHBpcGVvYmogPSBpby5vcGVuKHdzb2NrLmRldGFjaCgpLCAnd2InLCAxMDI0KQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgdHJhbnNwb3J0CisgICAgICAgICAgICB0LCBwID0geWllbGQgZnJvbSBzZWxmLmxvb3AuY29ubmVjdF93cml0ZV9waXBlKGZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVvYmopCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0LCBwcm90by50cmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHQKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInMScpCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbGYubG9vcC5zb2NrX3JlY3YocnNvY2ssIDEwMjQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMScsIGRhdGEpCisKKyAgICAgICAgcnNvY2suY2xvc2UoKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgIyBzZWxlY3QsIHBvbGwgYW5kIGtxdWV1ZSBkb24ndCBzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzIChQVFkpIG9uIE1hYyBPUyBYCisgICAgIyBvbGRlciB0aGFuIDEwLjYgKFNub3cgTGVvcGFyZCkKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA2KQorICAgIGRlZiB0ZXN0X3dyaXRlX3B0eShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcG9ydCA9IE5vbmUKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgIHByb3RvID0gTXlXcml0ZVBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIG1hc3Rlciwgc2xhdmUgPSBvcy5vcGVucHR5KCkKKyAgICAgICAgc2xhdmVfd3JpdGVfb2JqID0gaW8ub3BlbihzbGF2ZSwgJ3diJywgMCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHRyYW5zcG9ydAorICAgICAgICAgICAgdCwgcCA9IHlpZWxkIGZyb20gc2VsZi5sb29wLmNvbm5lY3Rfd3JpdGVfcGlwZShmYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV93cml0ZV9vYmopCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0LCBwcm90by50cmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHQKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicxJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGRhdGEgPSBvcy5yZWFkKG1hc3RlciwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEnLCBkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJzIzNDUnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZGF0YSA9IG9zLnJlYWQobWFzdGVyLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMjM0NScsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIG9zLmNsb3NlKG1hc3RlcikKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGlwZScpKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgZGVmIHRlc3RfcHJvbXB0X2NhbmNlbGxhdGlvbihzZWxmKToKKyAgICAgICAgciwgdyA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHIuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19yZWN2KHIsIDEpCisgICAgICAgIG92ID0gZ2V0YXR0cihmLCAnb3YnLCBOb25lKQorICAgICAgICBpZiBvdiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdi5wZW5kaW5nKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbWFpbigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oZi5jYW5jZWwpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXMgPSAnY2FuY2VsbGVkJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMgPSBOb25lCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICBzdGFydCA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhtYWluKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBlbGFwc2VkID0gdGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0CisKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGVsYXBzZWQsIDAuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnY2FuY2VsbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIGlmIG92IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdi5wZW5kaW5nKQorICAgICAgICBzZWxmLmxvb3AuX3N0b3Bfc2VydmluZyhyKQorCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICB3LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXRfcm91bmRpbmcoc2VsZik6CisgICAgICAgIGRlZiBfcnVuX29uY2UoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2VfY291bnRlciArPSAxCisgICAgICAgICAgICBvcmlnX3J1bl9vbmNlKCkKKworICAgICAgICBvcmlnX3J1bl9vbmNlID0gc2VsZi5sb29wLl9ydW5fb25jZQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlX2NvdW50ZXIgPSAwCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UgPSBfcnVuX29uY2UKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdhaXQoKToKKyAgICAgICAgICAgIGxvb3AgPSBzZWxmLmxvb3AKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxZS0yLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMWUtNCwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDFlLTYsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxZS04LCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMWUtMTAsIGxvb3A9bG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHdhaXQoKSkKKyAgICAgICAgIyBUaGUgaWRlYWwgbnVtYmVyIG9mIGNhbGwgaXMgMTIsIGJ1dCBvbiBzb21lIHBsYXRmb3JtcywgdGhlIHNlbGVjdG9yCisgICAgICAgICMgbWF5IHNsZWVwIGF0IGxpdHRsZSBiaXQgbGVzcyB0aGFuIHRpbWVvdXQgZGVwZW5kaW5nIG9uIHRoZSByZXNvbHV0aW9uCisgICAgICAgICMgb2YgdGhlIGNsb2NrIHVzZWQgYnkgdGhlIGtlcm5lbC4gVG9sZXJhdGUgYSBmZXcgdXNlbGVzcyBjYWxscyBvbgorICAgICAgICAjIHRoZXNlIHBsYXRmb3Jtcy4KKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc2VsZi5sb29wLl9ydW5fb25jZV9jb3VudGVyLCAyMCwKKyAgICAgICAgICAgIHsnY2xvY2tfcmVzb2x1dGlvbic6IHNlbGYubG9vcC5fY2xvY2tfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAnc2VsZWN0b3InOiBzZWxmLmxvb3AuX3NlbGVjdG9yLl9fY2xhc3NfXy5fX25hbWVfX30pCisKKyAgICBkZWYgdGVzdF9zb2NrX2Nvbm5lY3RfYWRkcmVzcyhzZWxmKToKKyAgICAgICAgZmFtaWxpZXMgPSBbc29ja2V0LkFGX0lORVRdCisgICAgICAgIGlmIHN1cHBvcnQuSVBWNl9FTkFCTEVEOgorICAgICAgICAgICAgZmFtaWxpZXMuYXBwZW5kKHNvY2tldC5BRl9JTkVUNikKKworICAgICAgICBhZGRyZXNzID0gKCd3d3cucHl0aG9uLm9yZycsIDgwKQorICAgICAgICBmb3IgZmFtaWx5IGluIGZhbWlsaWVzOgorICAgICAgICAgICAgZm9yIHNvY2tfdHlwZSBpbiAoc29ja2V0LlNPQ0tfU1RSRUFNLCBzb2NrZXQuU09DS19ER1JBTSk6CisgICAgICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5LCBzb2NrX3R5cGUpCisgICAgICAgICAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdhZGRyZXNzIG11c3QgYmUgcmVzb2x2ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihjbS5leGNlcHRpb24pKQorCisKK2NsYXNzIFN1YnByb2Nlc3NUZXN0c01peGluOgorCisgICAgZGVmIGNoZWNrX3Rlcm1pbmF0ZWQoc2VsZiwgcmV0dXJuY29kZSk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJldHVybmNvZGUsIGludCkKKyAgICAgICAgICAgICMgZXhwZWN0IDEgYnV0IHNvbWV0aW1lcyBnZXQgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtc2lnbmFsLlNJR1RFUk0sIHJldHVybmNvZGUpCisKKyAgICBkZWYgY2hlY2tfa2lsbGVkKHNlbGYsIHJldHVybmNvZGUpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXR1cm5jb2RlLCBpbnQpCisgICAgICAgICAgICAjIGV4cGVjdCAxIGJ1dCBzb21ldGltZXMgZ2V0IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdLSUxMLCByZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19leGVjKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgc3RkaW4ud3JpdGUoYidQeXRob24gVGhlIFdpbm5lcicpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja190ZXJtaW5hdGVkKHByb3RvLnJldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidQeXRob24gVGhlIFdpbm5lcicsIHByb3RvLmRhdGFbMV0pCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2ludGVyYWN0aXZlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgICAgIHN0ZGluLndyaXRlKGInUHl0aG9uICcpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzFdLndhaXQoKSkKKyAgICAgICAgICAgIHByb3RvLmdvdF9kYXRhWzFdLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidQeXRob24gJywgcHJvdG8uZGF0YVsxXSkKKworICAgICAgICAgICAgc3RkaW4ud3JpdGUoYidUaGUgV2lubmVyJykKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1B5dGhvbiBUaGUgV2lubmVyJywgcHJvdG8uZGF0YVsxXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyYW5zcC5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfdGVybWluYXRlZChwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zaGVsbChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICdlY2hvIFB5dGhvbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbChmLmRvbmUoKSBmb3IgZiBpbiBwcm90by5kaXNjb25uZWN0cy52YWx1ZXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvdG8uZGF0YVsxXS5yc3RyaXAoYidcclxuJyksIGInUHl0aG9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5kYXRhWzJdLCBiJycpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2V4aXRjb2RlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfY2xvc2VfYWZ0ZXJfZmluaXNoKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgJ2V4aXQgNycsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMikpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIHByb3RvLnJldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYW5zcC5jbG9zZSgpKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19raWxsKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHRyYW5zcC5raWxsKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfa2lsbGVkKHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3Rlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICB0cmFuc3AudGVybWluYXRlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfdGVybWluYXRlZChwcm90by5yZXR1cm5jb2RlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywgIkRvbid0IGhhdmUgU0lHSFVQIikKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3NlbmRfc2lnbmFsKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHRyYW5zcC5zZW5kX3NpZ25hbChzaWduYWwuU0lHSFVQKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtc2lnbmFsLlNJR0hVUCwgcHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfc3RkZXJyKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8yLnB5JykKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgc3RkaW4ud3JpdGUoYid0ZXN0JykKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKworICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInT1VUOnRlc3QnLCBwcm90by5kYXRhWzFdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uZGF0YVsyXS5zdGFydHN3aXRoKGInRVJSOnRlc3QnKSwgcHJvdG8uZGF0YVsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zdGRlcnJfcmVkaXJlY3RfdG9fc3Rkb3V0KHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8yLnB5JykKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2csIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDEpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDIpKQorCisgICAgICAgIHN0ZGluLndyaXRlKGIndGVzdCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uZGF0YVsxXS5zdGFydHN3aXRoKGInT1VUOnRlc3RFUlI6dGVzdCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8uZGF0YVsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHByb3RvLmRhdGFbMl0pCisKKyAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19jbG9zZV9jbGllbnRfc3RyZWFtKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8zLnB5JykKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgc3Rkb3V0ID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgxKQorICAgICAgICBzdGRpbi53cml0ZShiJ3Rlc3QnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzFdLndhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ09VVDp0ZXN0JywgcHJvdG8uZGF0YVsxXSkKKworICAgICAgICBzdGRvdXQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRpc2Nvbm5lY3RzWzFdKQorICAgICAgICBzdGRpbi53cml0ZShiJ3h4eCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMl0ud2FpdCgpKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidFUlI6QnJva2VuUGlwZUVycm9yJywgcHJvdG8uZGF0YVsyXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQWZ0ZXIgY2xvc2luZyB0aGUgcmVhZC1lbmQgb2YgYSBwaXBlLCB3cml0aW5nIHRvIHRoZQorICAgICAgICAgICAgIyB3cml0ZS1lbmQgdXNpbmcgb3Mud3JpdGUoKSBmYWlscyB3aXRoIGVycm5vPT1FSU5WQUwgYW5kCisgICAgICAgICAgICAjIEdldExhc3RFcnJvcigpPT1FUlJPUl9JTlZBTElEX05BTUUgb24gV2luZG93cyE/ISAgKFVzaW5nCisgICAgICAgICAgICAjIFdyaXRlRmlsZSgpIHdlIGdldCBFUlJPUl9CUk9LRU5fUElQRSBhcyBleHBlY3RlZC4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInRVJSOk9TRXJyb3InLCBwcm90by5kYXRhWzJdKQorICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja190ZXJtaW5hdGVkKHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3dhaXRfbm9fc2FtZV9ncm91cChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICAjIHN0YXJ0IHRoZSBuZXcgcHJvY2VzcyBpbiBhIG5ldyBzZXNzaW9uCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLAorICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19leGVjX2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCoqa3dkcyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgJ3B3ZCcsICoqa3dkcykKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdChidWZzaXplPTQwOTYpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KHNoZWxsPVRydWUpKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zaGVsbF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdChjbWQ9Tm9uZSwgKiprd2RzKToKKyAgICAgICAgICAgIGlmIG5vdCBjbWQ6CisgICAgICAgICAgICAgICAgY21kID0gJ3B3ZCcKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwoCisgICAgICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgY21kLCAqKmt3ZHMpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdChbJ2xzJywgJy1sJ10pKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdChidWZzaXplPTQwOTYpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KHNoZWxsPUZhbHNlKSkKKworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKworICAgIGNsYXNzIFNlbGVjdEV2ZW50TG9vcFRlc3RzKEV2ZW50TG9vcFRlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcCgpCisKKyAgICBjbGFzcyBQcm9hY3RvckV2ZW50TG9vcFRlc3RzKEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5Qcm9hY3RvckV2ZW50TG9vcCgpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgaW5jb21wYXRpYmxlIHdpdGggU1NMIikKKworICAgICAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NzbChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGluY29tcGF0aWJsZSB3aXRoIFNTTCIpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGluY29tcGF0aWJsZSB3aXRoIFNTTCIpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfbWF0Y2hfZmFpbGVkKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgaW5jb21wYXRpYmxlIHdpdGggU1NMIikKKworICAgICAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NzbF92ZXJpZmllZChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGluY29tcGF0aWJsZSB3aXRoIFNTTCIpCisKKyAgICAgICAgZGVmIHRlc3RfcmVhZGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgZG9lcyBub3QgaGF2ZSBhZGRfcmVhZGVyKCkiKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWRlcl9jYWxsYmFja19jYW5jZWwoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF9yZWFkZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3Rfd3JpdGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgZG9lcyBub3QgaGF2ZSBhZGRfd3JpdGVyKCkiKQorCisgICAgICAgIGRlZiB0ZXN0X3dyaXRlcl9jYWxsYmFja19jYW5jZWwoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF93cml0ZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoCisgICAgICAgICAgICAgICAgIklvY3BFdmVudExvb3AgZG9lcyBub3QgaGF2ZSBjcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoKSIpCitlbHNlOgorICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JzCisKKyAgICBjbGFzcyBVbml4RXZlbnRMb29wVGVzdHNNaXhpbihFdmVudExvb3BUZXN0c01peGluKToKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgICAgICB3YXRjaGVyID0gYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKCkKKyAgICAgICAgICAgIHdhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgYXN5bmNpby5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQorCisgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2NoaWxkX3dhdGNoZXIoTm9uZSkKKyAgICAgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdLcXVldWVTZWxlY3RvcicpOgorICAgICAgICBjbGFzcyBLcXVldWVFdmVudExvb3BUZXN0cyhVbml4RXZlbnRMb29wVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICAgICAgZGVmIGNyZWF0ZV9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wKAorICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuS3F1ZXVlU2VsZWN0b3IoKSkKKworICAgICAgICAgICAgIyBrcXVldWUgZG9lc24ndCBzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzIChQVFkpIG9uIE1hYyBPUyBYIG9sZGVyCisgICAgICAgICAgICAjIHRoYW4gMTAuOSAoTWF2ZXJpY2spCisgICAgICAgICAgICBAc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA5KQorICAgICAgICAgICAgZGVmIHRlc3RfcmVhZF9wdHlfb3V0cHV0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkudGVzdF9yZWFkX3B0eV9vdXRwdXQoKQorCisgICAgICAgICAgICAjIGtxdWV1ZSBkb2Vzbid0IHN1cHBvcnQgY2hhcmFjdGVyIGRldmljZXMgKFBUWSkgb24gTWFjIE9TIFggb2xkZXIKKyAgICAgICAgICAgICMgdGhhbiAxMC45IChNYXZlcmljaykKKyAgICAgICAgICAgIEBzdXBwb3J0LnJlcXVpcmVzX21hY192ZXIoMTAsIDkpCisgICAgICAgICAgICBkZWYgdGVzdF93cml0ZV9wdHkoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS50ZXN0X3dyaXRlX3B0eSgpCisKKyAgICBpZiBoYXNhdHRyKHNlbGVjdG9ycywgJ0Vwb2xsU2VsZWN0b3InKToKKyAgICAgICAgY2xhc3MgRVBvbGxFdmVudExvb3BUZXN0cyhVbml4RXZlbnRMb29wVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuRXBvbGxTZWxlY3RvcigpKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICAgICAgY2xhc3MgUG9sbEV2ZW50TG9vcFRlc3RzKFVuaXhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuUG9sbFNlbGVjdG9yKCkpCisKKyAgICAjIFNob3VsZCBhbHdheXMgZXhpc3QuCisgICAgY2xhc3MgU2VsZWN0RXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcigpKQorCisKK2NsYXNzIEhhbmRsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2hhbmRsZShzZWxmKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzCisKKyAgICAgICAgYXJncyA9ICgpCisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fYXJncywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoLl9jYW5jZWxsZWQpCisKKyAgICAgICAgciA9IHJlcHIoaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICdIYW5kbGUoJworICAgICAgICAgICAgJzxmdW5jdGlvbiBIYW5kbGVUZXN0cy50ZXN0X2hhbmRsZS48bG9jYWxzPi5jYWxsYmFjaycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoci5lbmRzd2l0aCgnKCkpJykpCisKKyAgICAgICAgaC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaC5fY2FuY2VsbGVkKQorCisgICAgICAgIHIgPSByZXByKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAnSGFuZGxlKCcKKyAgICAgICAgICAgICc8ZnVuY3Rpb24gSGFuZGxlVGVzdHMudGVzdF9oYW5kbGUuPGxvY2Fscz4uY2FsbGJhY2snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJygpKTxjYW5jZWxsZWQ+JyksIHIpCisKKyAgICBkZWYgdGVzdF9oYW5kbGUoc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworICAgICAgICBoMSA9IGFzeW5jaW8uSGFuZGxlKGNhbGxiYWNrLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgYXN5bmNpby5IYW5kbGUsIGgxLCAoKSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmV2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3dpdGhfZXhjZXB0aW9uKHNlbGYsIGxvZyk6CisgICAgICAgIGRlZiBjYWxsYmFjaygpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGNhbGxiYWNrLCAoKSkKKyAgICAgICAgaC5fcnVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZy5leGNlcHRpb24uY2FsbGVkKQorCisKK2NsYXNzIFRpbWVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgd2hlbiA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgaCA9IGFzeW5jaW8uVGltZXJIYW5kbGUod2hlbiwgbGFtYmRhOiBGYWxzZSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChoKSwgaGFzaCh3aGVuKSkKKworICAgIGRlZiB0ZXN0X3RpbWVyKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgICAgICBhcmdzID0gKCkKKyAgICAgICAgd2hlbiA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgaCA9IGFzeW5jaW8uVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fY2FsbGJhY2ssIGNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydElzKGguX2FyZ3MsIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaC5fY2FuY2VsbGVkKQorCisgICAgICAgIHIgPSByZXByKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLmVuZHN3aXRoKCcoKSknKSkKKworICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoLl9jYW5jZWxsZWQpCisKKyAgICAgICAgciA9IHJlcHIoaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJygpKTxjYW5jZWxsZWQ+JyksIHIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jaW8uVGltZXJIYW5kbGUsIE5vbmUsIGNhbGxiYWNrLCBhcmdzKQorCisgICAgZGVmIHRlc3RfdGltZXJfY29tcGFyaXNvbihzZWxmKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzCisKKyAgICAgICAgd2hlbiA9IHRpbWUubW9ub3RvbmljKCkKKworICAgICAgICBoMSA9IGFzeW5jaW8uVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssICgpKQorICAgICAgICBoMiA9IGFzeW5jaW8uVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssICgpKQorICAgICAgICAjIFRPRE86IFVzZSBhc3NlcnRMZXNzIGV0Yy4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA8IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgyIDwgaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSA8PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgyIDw9IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID4gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPiBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxID49IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPj0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSA9PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSAhPSBoMikKKworICAgICAgICBoMi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID09IGgyKQorCisgICAgICAgIGgxID0gYXN5bmNpby5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgKCkpCisgICAgICAgIGgyID0gYXN5bmNpby5UaW1lckhhbmRsZSh3aGVuICsgMTAuMCwgY2FsbGJhY2ssICgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEgPCBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMiA8IGgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEgPD0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPD0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPiBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgyID4gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPj0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMiA+PSBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA9PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxICE9IGgyKQorCisgICAgICAgIGgzID0gYXN5bmNpby5IYW5kbGUoY2FsbGJhY2ssICgpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCBoMS5fX2VxX18oaDMpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCBoMS5fX25lX18oaDMpKQorCisKK2NsYXNzIEFic3RyYWN0RXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3AoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucnVuX2ZvcmV2ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zdG9wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuaXNfcnVubmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9sYXRlciwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNhbGxfYXQsIGYsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX3Nvb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC50aW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5ydW5faW5fZXhlY3V0b3IsIGYsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zZXRfZGVmYXVsdF9leGVjdXRvciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmdldGFkZHJpbmZvLCAnbG9jYWxob3N0JywgODA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmdldG5hbWVpbmZvLCAoJ2xvY2FsaG9zdCcsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24sIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jcmVhdGVfc2VydmVyLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50LCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuYWRkX3JlYWRlciwgMSwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV9yZWFkZXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5hZGRfd3JpdGVyLCAxLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucmVtb3ZlX3dyaXRlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNvY2tfcmVjdiwgZiwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX3NlbmRhbGwsIGYsIDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc29ja19jb25uZWN0LCBmLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc29ja19hY2NlcHQsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIDEsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jb25uZWN0X3JlYWRfcGlwZSwgZiwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suc2VudGluZWwucGlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNvbm5lY3Rfd3JpdGVfcGlwZSwgZiwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suc2VudGluZWwucGlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnN1YnByb2Nlc3Nfc2hlbGwsIGYsCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLnNlbnRpbmVsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc3VicHJvY2Vzc19leGVjLCBmKQorCisKK2NsYXNzIFByb3RvY29sc0Fic1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgcCA9IGFzeW5jaW8uUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLmNvbm5lY3Rpb25fbWFkZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5jb25uZWN0aW9uX2xvc3QoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuZGF0YV9yZWNlaXZlZChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5lb2ZfcmVjZWl2ZWQoKSkKKworICAgICAgICBkcCA9IGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRwLmNvbm5lY3Rpb25fbWFkZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZHAuY29ubmVjdGlvbl9sb3N0KGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkcC5lcnJvcl9yZWNlaXZlZChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZHAuZGF0YWdyYW1fcmVjZWl2ZWQoZiwgZikpCisKKyAgICAgICAgc3AgPSBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwLmNvbm5lY3Rpb25fbWFkZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AuY29ubmVjdGlvbl9sb3N0KGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5waXBlX2RhdGFfcmVjZWl2ZWQoMSwgZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwLnBpcGVfY29ubmVjdGlvbl9sb3N0KDEsIGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5wcm9jZXNzX2V4aXRlZCgpKQorCisKK2NsYXNzIFBvbGljeVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2V2ZW50X2xvb3BfcG9saWN5KHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkFic3RyYWN0RXZlbnRMb29wUG9saWN5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5LmdldF9ldmVudF9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwb2xpY3kuc2V0X2V2ZW50X2xvb3AsIG9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwb2xpY3kubmV3X2V2ZW50X2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5LnNldF9jaGlsZF93YXRjaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QoKSkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb2xpY3kuX2xvY2FsLl9sb29wKQorCisgICAgICAgIGxvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vcCwgYXN5bmNpby5BYnN0cmFjdEV2ZW50TG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeS5fbG9jYWwuX2xvb3AsIGxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9vcCwgcG9saWN5LmdldF9ldmVudF9sb29wKCkpCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0X2V2ZW50X2xvb3BfY2FsbHNfc2V0X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisKKyAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICBwb2xpY3ksICJzZXRfZXZlbnRfbG9vcCIsCisgICAgICAgICAgICAgICAgd3JhcHM9cG9saWN5LnNldF9ldmVudF9sb29wKSBhcyBtX3NldF9ldmVudF9sb29wOgorCisgICAgICAgICAgICBsb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKworICAgICAgICAgICAgIyBwb2xpY3kuX2xvY2FsLl9sb29wIG11c3QgYmUgc2V0IHRocm91Z2ggLnNldF9ldmVudF9sb29wKCkKKyAgICAgICAgICAgICMgKHRoZSB1bml4IERlZmF1bHRFdmVudExvb3BQb2xpY3kgbmVlZHMgdGhpcyBjYWxsIHRvIGF0dGFjaAorICAgICAgICAgICAgIyB0aGUgY2hpbGQgd2F0Y2hlciBjb3JyZWN0bHkpCisgICAgICAgICAgICBtX3NldF9ldmVudF9sb29wLmFzc2VydF9jYWxsZWRfd2l0aChsb29wKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0X2V2ZW50X2xvb3BfYWZ0ZXJfc2V0X25vbmUoc2VsZik6CisgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9saWN5LmdldF9ldmVudF9sb29wKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uZXZlbnRzLnRocmVhZGluZy5jdXJyZW50X3RocmVhZCcpCisgICAgZGVmIHRlc3RfZ2V0X2V2ZW50X2xvb3BfdGhyZWFkKHNlbGYsIG1fY3VycmVudF90aHJlYWQpOgorCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCkKKworICAgICAgICB0aCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHRoLnN0YXJ0KCkKKyAgICAgICAgdGguam9pbigpCisKKyAgICBkZWYgdGVzdF9uZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gYXN5bmNpby5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKworICAgICAgICBsb29wID0gcG9saWN5Lm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb3AsIGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3ApCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2V0X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIG9sZF9sb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9saWN5LnNldF9ldmVudF9sb29wLCBvYmplY3QoKSkKKworICAgICAgICBsb29wID0gcG9saWN5Lm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9vcCwgcG9saWN5LmdldF9ldmVudF9sb29wKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob2xkX2xvb3AsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpKQorICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgb2xkX2xvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0X2V2ZW50X2xvb3BfcG9saWN5KHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb2xpY3ksIGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5LCBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpKQorCisgICAgZGVmIHRlc3Rfc2V0X2V2ZW50X2xvb3BfcG9saWN5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBhc3luY2lvLnNldF9ldmVudF9sb29wX3BvbGljeSwgb2JqZWN0KCkpCisKKyAgICAgICAgb2xkX3BvbGljeSA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKworICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wX3BvbGljeShwb2xpY3kpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5LCBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHBvbGljeSwgb2xkX3BvbGljeSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfZnV0dXJlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE2OTc2YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKQEAgLTAsMCArMSwzNTEgQEAKKyIiIlRlc3RzIGZvciBmdXR1cmVzLnB5LiIiIgorCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitkZWYgX2Zha2VmdW5jKGYpOgorICAgIHJldHVybiBmCisKKworY2xhc3MgRnV0dXJlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbF9zdGF0ZShzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5kb25lKCkpCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9pbml0X2NvbnN0cnVjdG9yX2RlZmF1bHRfbG9vcChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhmLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9wb3NpdGlvbmFsKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBGdXR1cmUgZG9lcyd0IGFjY2VwdCBhIHBvc2l0aW9uYWwgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhc3luY2lvLkZ1dHVyZSwgNDIpCisKKyAgICBkZWYgdGVzdF9jYW5jZWwoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsIGYucmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yLCBmLmV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfcmVzdWx0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9leGNlcHRpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLnJlc3VsdCkKKworICAgICAgICBmLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZXhjZXB0aW9uKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X3Jlc3VsdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfZXhjZXB0aW9uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5JbnZhbGlkU3RhdGVFcnJvciwgZi5leGNlcHRpb24pCisKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5leGNlcHRpb24oKSwgZXhjKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9yZXN1bHQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X2V4Y2VwdGlvbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2NsYXNzKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBSdW50aW1lRXJyb3IpCisKKyAgICBkZWYgdGVzdF95aWVsZF9mcm9tX3R3aWNlKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGZpeHR1cmUoKToKKyAgICAgICAgICAgIHlpZWxkICdBJworICAgICAgICAgICAgeCA9IHlpZWxkIGZyb20gZgorICAgICAgICAgICAgeWllbGQgJ0InLCB4CisgICAgICAgICAgICB5ID0geWllbGQgZnJvbSBmCisgICAgICAgICAgICB5aWVsZCAnQycsIHkKKworICAgICAgICBnID0gZml4dHVyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgJ0EnKSAgIyB5aWVsZCAnQScuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgZikgICMgRmlyc3QgeWllbGQgZnJvbSBmLgorICAgICAgICBmLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgKCdCJywgNDIpKSAgIyB5aWVsZCAnQicsIHguCisgICAgICAgICMgVGhlIHNlY29uZCAieWllbGQgZnJvbSBmIiBkb2VzIG5vdCB5aWVsZCBmLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksICgnQycsIDQyKSkgICMgeWllbGQgJ0MnLCB5LgorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZl9wZW5kaW5nID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3BlbmRpbmcpLCAnRnV0dXJlPFBFTkRJTkc+JykKKyAgICAgICAgZl9wZW5kaW5nLmNhbmNlbCgpCisKKyAgICAgICAgZl9jYW5jZWxsZWQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9jYW5jZWxsZWQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZfY2FuY2VsbGVkKSwgJ0Z1dHVyZTxDQU5DRUxMRUQ+JykKKworICAgICAgICBmX3Jlc3VsdCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX3Jlc3VsdC5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3Jlc3VsdCksICdGdXR1cmU8cmVzdWx0PTQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmX3Jlc3VsdC5yZXN1bHQoKSwgNCkKKworICAgICAgICBleGMgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBmX2V4Y2VwdGlvbiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2V4Y2VwdGlvbi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZfZXhjZXB0aW9uKSwgJ0Z1dHVyZTxleGNlcHRpb249UnVudGltZUVycm9yKCk+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmX2V4Y2VwdGlvbi5leGNlcHRpb24oKSwgZXhjKQorCisgICAgICAgIGZfZmV3X2NhbGxiYWNrcyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2Zld19jYWxsYmFja3MuYWRkX2RvbmVfY2FsbGJhY2soX2Zha2VmdW5jKQorICAgICAgICBzZWxmLmFzc2VydEluKCdGdXR1cmU8UEVORElORywgWzxmdW5jdGlvbiBfZmFrZWZ1bmMnLAorICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZl9mZXdfY2FsbGJhY2tzKSkKKyAgICAgICAgZl9mZXdfY2FsbGJhY2tzLmNhbmNlbCgpCisKKyAgICAgICAgZl9tYW55X2NhbGxiYWNrcyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyMCk6CisgICAgICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKF9mYWtlZnVuYykKKyAgICAgICAgciA9IHJlcHIoZl9tYW55X2NhbGxiYWNrcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignRnV0dXJlPFBFTkRJTkcsIFs8ZnVuY3Rpb24gX2Zha2VmdW5jJywgcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignPDE4IG1vcmU+JywgcikKKyAgICAgICAgZl9tYW55X2NhbGxiYWNrcy5jYW5jZWwoKQorCisgICAgZGVmIHRlc3RfY29weV9zdGF0ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBpbnRlcm5hbCBfY29weV9zdGF0ZSBtZXRob2Qgc2luY2UgaXQncyBiZWluZyBkaXJlY3RseQorICAgICAgICAjIGludm9rZWQgaW4gb3RoZXIgbW9kdWxlcy4KKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLnNldF9yZXN1bHQoMTApCisKKyAgICAgICAgbmV3ZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBuZXdmLl9jb3B5X3N0YXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdmLnJlc3VsdCgpLCAxMCkKKworICAgICAgICBmX2V4Y2VwdGlvbiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2V4Y2VwdGlvbi5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcigpKQorCisgICAgICAgIG5ld2ZfZXhjZXB0aW9uID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG5ld2ZfZXhjZXB0aW9uLl9jb3B5X3N0YXRlKGZfZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zl9leGNlcHRpb24uZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG5ld2ZfZXhjZXB0aW9uLnJlc3VsdCkKKworICAgICAgICBmX2NhbmNlbGxlZCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2NhbmNlbGxlZC5jYW5jZWwoKQorCisgICAgICAgIG5ld2ZfY2FuY2VsbGVkID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG5ld2ZfY2FuY2VsbGVkLl9jb3B5X3N0YXRlKGZfY2FuY2VsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zl9jYW5jZWxsZWQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKworICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgYXJnMSwgYXJnMiA9IGNvcm8oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0ZXN0KQorICAgICAgICBmdXQuY2FuY2VsKCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfYWJhbmRvbmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX3Jlc3VsdF91bnJldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfcmVzdWx0X3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZnV0LnJlc3VsdCgpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl91bnJldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfZXhjZXB0aW9uX3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgZnV0LmV4Y2VwdGlvbigpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl9yZXN1bHRfcmV0cmlldmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcignYm9vbScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGZ1dC5yZXN1bHQpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZShzZWxmKToKKworICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBleCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoMSkKKyAgICAgICAgZjEgPSBleC5zdWJtaXQocnVuLCAnb2knKQorICAgICAgICBmMiA9IGFzeW5jaW8ud3JhcF9mdXR1cmUoZjEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXMsIGlkZW50ID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYyLCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICdvaScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWRlbnQsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKworICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZjEgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZjIgPSBhc3luY2lvLndyYXBfZnV0dXJlKGYxKQorICAgICAgICBzZWxmLmFzc2VydElzKGYxLCBmMikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMuZXZlbnRzJykKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZV91c2VfZ2xvYmFsX2xvb3Aoc2VsZiwgbV9ldmVudHMpOgorICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBleCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoMSkKKyAgICAgICAgZjEgPSBleC5zdWJtaXQocnVuLCAnb2knKQorICAgICAgICBmMiA9IGFzeW5jaW8ud3JhcF9mdXR1cmUoZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobV9ldmVudHMuZ2V0X2V2ZW50X2xvb3AucmV0dXJuX3ZhbHVlLCBmMi5fbG9vcCkKKworICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX2NhbmNlbChzZWxmKToKKyAgICAgICAgZjEgPSBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKCkKKyAgICAgICAgZjIgPSBhc3luY2lvLndyYXBfZnV0dXJlKGYxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZjIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMS5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYyLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfd3JhcF9mdXR1cmVfY2FuY2VsMihzZWxmKToKKyAgICAgICAgZjEgPSBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKCkKKyAgICAgICAgZjIgPSBhc3luY2lvLndyYXBfZnV0dXJlKGYxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZjEuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZjIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjEucmVzdWx0KCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjIuY2FuY2VsbGVkKCkpCisKKworY2xhc3MgRnV0dXJlRG9uZUNhbGxiYWNrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHJ1bl9icmllZmx5KHNlbGYpOgorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgIGRlZiBfbWFrZV9jYWxsYmFjayhzZWxmLCBiYWcsIHRoaW5nKToKKyAgICAgICAgIyBDcmVhdGUgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGFwcGVuZHMgdGhpbmcgdG8gYmFnLgorICAgICAgICBkZWYgYmFnX2FwcGVuZGVyKGZ1dHVyZSk6CisgICAgICAgICAgICBiYWcuYXBwZW5kKHRoaW5nKQorICAgICAgICByZXR1cm4gYmFnX2FwcGVuZGVyCisKKyAgICBkZWYgX25ld19mdXR1cmUoc2VsZik6CisgICAgICAgIHJldHVybiBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrc19pbnZva2VkX29uX3NldF9yZXN1bHQoc2VsZik6CisgICAgICAgIGJhZyA9IFtdCisgICAgICAgIGYgPSBzZWxmLl9uZXdfZnV0dXJlKCkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgNDIpKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAxNykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFtdKQorICAgICAgICBmLnNldF9yZXN1bHQoJ2ZvbycpCisKKyAgICAgICAgc2VsZi5ydW5fYnJpZWZseSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFs0MiwgMTddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksICdmb28nKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2ludm9rZWRfb25fc2V0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgYmFnID0gW10KKyAgICAgICAgZiA9IHNlbGYuX25ld19mdXR1cmUoKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAxMDApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbXSkKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGV4YykKKworICAgICAgICBzZWxmLnJ1bl9icmllZmx5KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgWzEwMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5leGNlcHRpb24oKSwgZXhjKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2RvbmVfY2FsbGJhY2soc2VsZik6CisgICAgICAgIGJhZyA9IFtdCisgICAgICAgIGYgPSBzZWxmLl9uZXdfZnV0dXJlKCkKKyAgICAgICAgY2IxID0gc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDEpCisgICAgICAgIGNiMiA9IHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAyKQorICAgICAgICBjYjMgPSBzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMykKKworICAgICAgICAjIEFkZCBvbmUgY2IxIGFuZCBvbmUgY2IyLgorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGNiMSkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjIpCisKKyAgICAgICAgIyBPbmUgaW5zdGFuY2Ugb2YgY2IyIHJlbW92ZWQuIE5vdyB0aGVyZSdzIG9ubHkgb25lIGNiMS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiMiksIDEpCisKKyAgICAgICAgIyBOZXZlciBoYWQgYW55IGNiMyBpbiB0aGVyZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiMyksIDApCisKKyAgICAgICAgIyBBZnRlciB0aGlzIHRoZXJlIHdpbGwgYmUgNiBpbnN0YW5jZXMgb2YgY2IxIGFuZCBvbmUgb2YgY2IyLgorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGNiMikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGNiMSkKKworICAgICAgICAjIFJlbW92ZSBhbGwgaW5zdGFuY2VzIG9mIGNiMS4gT25lIGNiMiByZW1haW5zLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVtb3ZlX2RvbmVfY2FsbGJhY2soY2IxKSwgNikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgW10pCisgICAgICAgIGYuc2V0X3Jlc3VsdCgnZm9vJykKKworICAgICAgICBzZWxmLnJ1bl9icmllZmx5KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksICdmb28nKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9sb2Nrcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2xvY2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzVmNDkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9sb2Nrcy5weQpAQCAtMCwwICsxLDg3MCBAQAorIiIiVGVzdHMgZm9yIGxvY2sucHkiIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworaW1wb3J0IHJlCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitTVFJfUkdYX1JFUFIgPSAoCisgICAgcidePCg/UDxjbGFzcz4uKj8pIG9iamVjdCBhdCAoP1A8YWRkcmVzcz4uKj8pJworICAgIHInXFsoP1A8ZXh0cmFzPicKKyAgICByJyhzZXR8dW5zZXR8bG9ja2VkfHVubG9ja2VkKSgsdmFsdWU6XGQpPygsd2FpdGVyczpcZCspPycKKyAgICByJylcXT5cWicKKykKK1JHWF9SRVBSID0gcmUuY29tcGlsZShTVFJfUkdYX1JFUFIpCisKKworY2xhc3MgTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvY2suX2xvb3AsIGxvb3ApCisKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2NrLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9jay5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobG9jaykuZW5kc3dpdGgoJ1t1bmxvY2tlZF0+JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGxvY2spKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobG9jaykuZW5kc3dpdGgoJ1tsb2NrZWRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihsb2NrKSkpCisKKyAgICBkZWYgdGVzdF9sb2NrKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gbG9jaykKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2FjcXVpcmUoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUobG9jay5hY3F1aXJlKCkpKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQxID0gYXN5bmNpby5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IGFzeW5jaW8uVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHQzID0gYXN5bmNpby5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyXSwgcmVzdWx0KQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2NhbmNlbChzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUobG9jay5hY3F1aXJlKCkpKQorCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2sobG9jay5hY3F1aXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHRhc2suY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2suX3dhaXRlcnMpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfcmFjZShzZWxmKToKKyAgICAgICAgIyBTZXZlcmFsIHRhc2tzOgorICAgICAgICAjIC0gQSBhY3F1aXJlcyB0aGUgbG9jaworICAgICAgICAjIC0gQiBpcyBibG9ja2VkIGluIGFxY3VpcmUoKQorICAgICAgICAjIC0gQyBpcyBibG9ja2VkIGluIGFxY3VpcmUoKQorICAgICAgICAjCisgICAgICAgICMgTm93LCBjb25jdXJyZW50bHk6CisgICAgICAgICMgLSBCIGlzIGNhbmNlbGxlZAorICAgICAgICAjIC0gQSByZWxlYXNlcyB0aGUgbG9jaworICAgICAgICAjCisgICAgICAgICMgSWYgQidzIHdhaXRlciBpcyBtYXJrZWQgY2FuY2VsbGVkIGJ1dCBub3QgeWV0IHJlbW92ZWQgZnJvbQorICAgICAgICAjIF93YWl0ZXJzLCBBJ3MgcmVsZWFzZSgpIGNhbGwgd2lsbCBjcmFzaCB3aGVuIHRyeWluZyB0byBzZXQKKyAgICAgICAgIyBCJ3Mgd2FpdGVyOyBpbnN0ZWFkLCBpdCBzaG91bGQgbW92ZSBvbiB0byBDJ3Mgd2FpdGVyLgorCisgICAgICAgICMgU2V0dXA6IEEgaGFzIHRoZSBsb2NrLCBiIGFuZCBjIGFyZSB3YWl0aW5nLgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbG9ja2l0KG5hbWUsIGJsb2NrZXIpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGJsb2NrZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gYmxvY2tlcgorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICAgICAgIGZhID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhID0gYXN5bmNpby5UYXNrKGxvY2tpdCgnQScsIGZhKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5sb2NrZWQoKSkKKyAgICAgICAgdGIgPSBhc3luY2lvLlRhc2sobG9ja2l0KCdCJywgTm9uZSksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9jay5fd2FpdGVycyksIDEpCisgICAgICAgIHRjID0gYXN5bmNpby5UYXNrKGxvY2tpdCgnQycsIE5vbmUpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvY2suX3dhaXRlcnMpLCAyKQorCisgICAgICAgICMgQ3JlYXRlIHRoZSByYWNlIGFuZCBjaGVjay4KKyAgICAgICAgIyBXaXRob3V0IHRoZSBmaXggdGhpcyBmYWlsZWQgYXQgdGhlIGxhc3QgYXNzZXJ0LgorICAgICAgICBmYS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRiLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLl93YWl0ZXJzWzBdLmNhbmNlbGxlZCgpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGIuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Yy5kb25lKCkpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX25vdF9hY3F1aXJlZChzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGxvY2sucmVsZWFzZSkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm9fd2FpdGVycyhzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShsb2NrLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gbG9jaykKKworICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX2NhbnRfcmV1c2Uoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBsb2NrKQorCisgICAgICAgICMgVGhpcyBzcGVsbHMgInlpZWxkIGZyb20gbG9jayIgb3V0c2lkZSBhIGdlbmVyYXRvci4KKyAgICAgICAgY20gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKQorICAgICAgICB3aXRoIGNtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBjbToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfbm9feWllbGQoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBsb2NrOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnUnVudGltZUVycm9yIGlzIG5vdCByYWlzZWQgaW4gd2l0aCBleHByZXNzaW9uJykKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHN0cihlcnIpLAorICAgICAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworCitjbGFzcyBFdmVudFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGV2ID0gYXN5bmNpby5FdmVudChsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGV2Ll9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhldi5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihldikuZW5kc3dpdGgoJ1t1bnNldF0+JykpCisgICAgICAgIG1hdGNoID0gUkdYX1JFUFIubWF0Y2gocmVwcihldikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0Y2guZ3JvdXAoJ2V4dHJhcycpLCAndW5zZXQnKQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGV2KS5lbmRzd2l0aCgnW3NldF0+JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGV2KSkpCisKKyAgICAgICAgZXYuX3dhaXRlcnMuYXBwZW5kKHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnM6MScgaW4gcmVwcihldikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGV2KSkpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXYuaXNfc2V0KCkpCisKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMyKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMzKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICB0MyA9IGFzeW5jaW8uVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMywgMSwgMl0sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQzLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9vbl9zZXQoc2VsZik6CisgICAgICAgIGV2ID0gYXN5bmNpby5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXYuc2V0KCkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGV2LndhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcykKKworICAgIGRlZiB0ZXN0X3dhaXRfY2FuY2VsKHNlbGYpOgorICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgd2FpdCA9IGFzeW5jaW8uVGFzayhldi53YWl0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHdhaXQuY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB3YWl0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2Ll93YWl0ZXJzKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIGV2ID0gYXN5bmNpby5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXYuaXNfc2V0KCkpCisKKyAgICAgICAgZXYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgZGVmIHRlc3RfY2xlYXJfd2l0aF93YWl0ZXJzKHNlbGYpOgorICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgZXYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGV2Ll93YWl0ZXJzKSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oZXYuX3dhaXRlcnMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKworY2xhc3MgQ29uZGl0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb29wLCBsb29wKQorCisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMyhyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MyA9IGFzeW5jaW8uVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpKQorICAgICAgICBjb25kLm5vdGlmeSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLm5vdGlmeSgyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDJdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9jYW5jZWwoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKworICAgICAgICB3YWl0ID0gYXN5bmNpby5UYXNrKGNvbmQud2FpdCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3YWl0LmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhc3luY2lvLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgd2FpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLl93YWl0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfdW5hY3F1aXJlZChzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvbmQud2FpdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3Ioc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJlc3VsdCA9IEZhbHNlCisKKyAgICAgICAgZGVmIHByZWRpY2F0ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHByZXN1bHQKKworICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdF9mb3IocHJlZGljYXRlKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBjb25kLm5vdGlmeSgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgcHJlc3VsdCA9IFRydWUKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3JfdW5hY3F1aXJlZChzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICMgcHJlZGljYXRlIGNhbiByZXR1cm4gdHJ1ZSBpbW1lZGlhdGVseQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQud2FpdF9mb3IobGFtYmRhOiBbMSwgMiwgM10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGNvbmQud2FpdF9mb3IobGFtYmRhOiBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnkoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMyhyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQzID0gYXN5bmNpby5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoMSkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoMSkKKyAgICAgICAgY29uZC5ub3RpZnkoMjA0OCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDIsIDNdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X25vdGlmeV9hbGwoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKworICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBjb25kLm5vdGlmeV9hbGwoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMl0sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X25vdGlmeV91bmFjcXVpcmVkKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29uZC5ub3RpZnkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnlfYWxsX3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjb25kLm5vdGlmeV9hbGwpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndW5sb2NrZWQnIGluIHJlcHIoY29uZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGNvbmQpKSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2xvY2tlZCcgaW4gcmVwcihjb25kKSkKKworICAgICAgICBjb25kLl93YWl0ZXJzLmFwcGVuZCh1bml0dGVzdC5tb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjEnIGluIHJlcHIoY29uZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGNvbmQpKSkKKworICAgICAgICBjb25kLl93YWl0ZXJzLmFwcGVuZCh1bml0dGVzdC5tb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjInIGluIHJlcHIoY29uZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKGNvbmQpKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9jb25kKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gY29uZCkKKworICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9jb25kKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX25vX3lpZWxkKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjb25kOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnUnVudGltZUVycm9yIGlzIG5vdCByYWlzZWQgaW4gd2l0aCBleHByZXNzaW9uJykKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHN0cihlcnIpLAorICAgICAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5sb2NrZWQoKSkKKworCitjbGFzcyBTZW1hcGhvcmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VtLl9sb29wLCBsb29wKQorCisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZW0uX2xvb3AsIHNlbGYubG9vcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X2luaXRpYWxfdmFsdWVfemVybyhzZWxmKToKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUoMCwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoc2VtKS5lbmRzd2l0aCgnW3VubG9ja2VkLHZhbHVlOjFdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihzZW0pKSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHNlbSkuZW5kc3dpdGgoJ1tsb2NrZWRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnMnIG5vdCBpbiByZXByKHNlbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKHNlbSkpKQorCisgICAgICAgIHNlbS5fd2FpdGVycy5hcHBlbmQodW5pdHRlc3QubW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVyczoxJyBpbiByZXByKHNlbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKHNlbSkpKQorCisgICAgICAgIHNlbS5fd2FpdGVycy5hcHBlbmQodW5pdHRlc3QubW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVyczoyJyBpbiByZXByKHNlbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKHNlbSkpKQorCisgICAgZGVmIHRlc3Rfc2VtYXBob3JlKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZW0uX3ZhbHVlKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gc2VtKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZW0uX3ZhbHVlKQorCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VtLl92YWx1ZSkKKworICAgIGRlZiB0ZXN0X3NlbWFwaG9yZV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXN5bmNpby5TZW1hcGhvcmUsIC0xKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZShzZWxmKToKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUoMywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5sb2NrZWQoKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZW0uYWNxdWlyZSgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgzKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGM0KHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoNCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MyA9IGFzeW5jaW8uVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oc2VtLl93YWl0ZXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZW0uX3ZhbHVlKQorCisgICAgICAgIHQ0ID0gYXN5bmNpby5UYXNrKGM0KHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VtLl92YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oc2VtLl93YWl0ZXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZW0uX3ZhbHVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDQuZG9uZSgpKQorCisgICAgICAgICMgY2xlYW51cCBsb2NrZWQgc2VtYXBob3JlCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKworICAgIGRlZiB0ZXN0X2FjcXVpcmVfY2FuY2VsKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKQorCisgICAgICAgIGFjcXVpcmUgPSBhc3luY2lvLlRhc2soc2VtLmFjcXVpcmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oYWNxdWlyZS5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXN5bmNpby5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGFjcXVpcmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLl93YWl0ZXJzKQorCisgICAgZGVmIHRlc3RfcmVsZWFzZV9ub3RfYWNxdWlyZWQoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uQm91bmRlZFNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZW0ucmVsZWFzZSkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm9fd2FpdGVycyhzZWxmKToKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSgyLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHNlbSkKKworICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNlbS5fdmFsdWUpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfbm9feWllbGQoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKDIsIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VtOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnUnVudGltZUVycm9yIGlzIG5vdCByYWlzZWQgaW4gd2l0aCBleHByZXNzaW9uJykKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHN0cihlcnIpLAorICAgICAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc2VtLl92YWx1ZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcHJvYWN0b3JfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcHJvYWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZWExYTMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9wcm9hY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSw0ODQgQEAKKyIiIlRlc3RzIGZvciBwcm9hY3Rvcl9ldmVudHMucHkiIiIKKworaW1wb3J0IHNvY2tldAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvLnByb2FjdG9yX2V2ZW50cyBpbXBvcnQgQmFzZVByb2FjdG9yRXZlbnRMb29wCitmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMgaW1wb3J0IF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnByb2FjdG9yX2V2ZW50cyBpbXBvcnQgX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydAorZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnByb2FjdG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3RvciA9IHNlbGYucHJvYWN0b3IKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKGFzeW5jaW8uUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jayhzb2NrZXQuc29ja2V0KQorCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIGZ1dCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZ1dC5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX21hZGUodHIpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCA0MDk2KQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCA0MDk2KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2RhdGEoc2VsZik6CisgICAgICAgIHJlcyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXMuc2V0X3Jlc3VsdChiJ2RhdGEnKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLl9yZWFkX2Z1dCA9IHJlcworICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKHJlcykKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIDQwOTYpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhJykKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19ub19kYXRhKHNlbGYpOgorICAgICAgICByZXMgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzLnNldF9yZXN1bHQoYicnKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0ci5fbG9vcF9yZWFkaW5nLCByZXMpCisKKyAgICAgICAgdHIuY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fcmVhZF9mdXQgPSByZXMKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZyhyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19hYm9ydGVkKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uQWJvcnRlZEVycm9yKCkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZygpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2Fib3J0ZWRfY2xvc2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvbkFib3J0ZWRFcnJvcigpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2Fib3J0ZWRfaXNfZmF0YWwoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25BYm9ydGVkRXJyb3IoKQorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBGYWxzZQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfY29ubl9yZXNldF9sb3N0KHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVzZXRFcnJvcigpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9jbG9zaW5nID0gRmFsc2UKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSAoT1NFcnJvcigpKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIE5vbmUpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcuYXNzZXJ0X2NhbGxlZF93aXRoKGRhdGE9YidkYXRhJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX21vcmUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fd3JpdGVfZnV0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fbG9vcF93cml0aW5nLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3Iuc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlLmFkZF9kb25lX2NhbGxiYWNrLlwKKyAgICAgICAgICAgIGFzc2VydF9jYWxsZWRfd2l0aCh0ci5fbG9vcF93cml0aW5nKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ucHJvYWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfbG9vcF93cml0aW5nX2VycihzZWxmLCBtX2xvZyk6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3Iuc2VuZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgdHIuX2Nvbm5fbG9zdCA9IDEKKworICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIE5vbmUpCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZ19zdG9wKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoYidkYXRhJykKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IGZ1dAorICAgICAgICB0ci5fbG9vcF93cml0aW5nKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3dyaXRlX2Z1dCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZ19jbG9zaW5nKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoMSkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IGZ1dAorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fd3JpdGVfZnV0KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9hYm9ydChzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLmFib3J0KCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDEpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QucmVzZXRfbW9jaygpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfd3JpdGVfZnV0KHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY2xvc2VfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnByb2FjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yKHNlbGYsIG1fbG9nZ2luZyk6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9mb3JjZV9jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZ2dpbmcuZXhjZXB0aW9uLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2ZvcmNlX2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICByZWFkX2Z1dCA9IHRyLl9yZWFkX2Z1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlX2Z1dCA9IHRyLl93cml0ZV9mdXQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICByZWFkX2Z1dC5jYW5jZWwuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgd3JpdGVfZnV0LmNhbmNlbC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgZGVmIHRlc3RfZm9yY2VfY2xvc2VfaWRlbXBvdGVudChzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3JfMihzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYXRhJ10KKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHRyLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suc2h1dGRvd24uY2FsbF9jb3VudCwgMSkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2VvZl93cml0dGVuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsZWQpCisgICAgICAgIHRyLl9sb29wLl9wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIGYuc2V0X3Jlc3VsdCg0KQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX3dyaXRlX3BpcGUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfYnVmZmVyX3dyaXRlX3BpcGUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyLl9sb29wLl9wcm9hY3Rvci5zZW5kLnJldHVybl92YWx1ZSA9IGYKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsZWQpCisgICAgICAgIHRyLl9sb29wLl9wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIGYuc2V0X3Jlc3VsdCg0KQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfZHVwbGV4X3BpcGUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3BhdXNlX3Jlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBmdXR1cmVzID0gW10KKyAgICAgICAgZm9yIG1zZyBpbiBbYidkYXRhMScsIGInZGF0YTInLCBiJ2RhdGEzJywgYidkYXRhNCcsIGInJ106CisgICAgICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBmLnNldF9yZXN1bHQobXNnKQorICAgICAgICAgICAgZnV0dXJlcy5hcHBlbmQoZikKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gZnV0dXJlcworICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGExJykKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMicpCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX3BhdXNlZCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMicpCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEzJykKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhNCcpCisgICAgICAgIHRyLmNsb3NlKCkKKworCitjbGFzcyBCYXNlUHJvYWN0b3JFdmVudExvb3BUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jayhzb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnByb2FjdG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLnNzb2NrLCBzZWxmLmNzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCksIHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgY2xhc3MgRXZlbnRMb29wKEJhc2VQcm9hY3RvckV2ZW50TG9vcCk6CisgICAgICAgICAgICBkZWYgX3NvY2tldHBhaXIocyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLnNzb2NrLCBzZWxmLmNzb2NrKQorCisgICAgICAgIHNlbGYubG9vcCA9IEV2ZW50TG9vcChzZWxmLnByb2FjdG9yKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KEJhc2VQcm9hY3RvckV2ZW50TG9vcCwgJ2NhbGxfc29vbicpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KEJhc2VQcm9hY3RvckV2ZW50TG9vcCwgJ19zb2NrZXRwYWlyJykKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYsIHNvY2tldHBhaXIsIGNhbGxfc29vbik6CisgICAgICAgIHNzb2NrLCBjc29jayA9IHNvY2tldHBhaXIucmV0dXJuX3ZhbHVlID0gKAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5Nb2NrKCksIHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorICAgICAgICBsb29wID0gQmFzZVByb2FjdG9yRXZlbnRMb29wKHNlbGYucHJvYWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9vcC5fc3NvY2ssIHNzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AuX2Nzb2NrLCBjc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29wLl9pbnRlcm5hbF9mZHMsIDEpCisgICAgICAgIGNhbGxfc29vbi5hc3NlcnRfY2FsbGVkX3dpdGgobG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AuX2ludGVybmFsX2ZkcywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3NvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fY3NvY2spCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9jbG9zZV9zZWxmX3BpcGUgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9jbG9zZV9zZWxmX3BpcGUuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm9hY3Rvci5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fcHJvYWN0b3IpCisKKyAgICAgICAgc2VsZi5sb29wLl9jbG9zZV9zZWxmX3BpcGUucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9jbG9zZV9zZWxmX3BpcGUuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc29ja19yZWN2KHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc29ja19yZWN2KHNlbGYuc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIDEwMjQpCisKKyAgICBkZWYgdGVzdF9zb2NrX3NlbmRhbGwoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX3NlbmRhbGwoc2VsZi5zb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLnByb2FjdG9yLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgYidkYXRhJykKKworICAgIGRlZiB0ZXN0X3NvY2tfY29ubmVjdChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdChzZWxmLnNvY2ssIDEyMykKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5jb25uZWN0LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIDEyMykKKworICAgIGRlZiB0ZXN0X3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc29ja19hY2NlcHQoc2VsZi5zb2NrKQorICAgICAgICBzZWxmLnByb2FjdG9yLmFjY2VwdC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrKQorCisgICAgZGVmIHRlc3Rfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBCYXNlUHJvYWN0b3JFdmVudExvb3AsIHNlbGYucHJvYWN0b3IpCisKKyAgICBkZWYgdGVzdF9tYWtlX3NvY2tldF90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5sb29wLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoc2VsZi5zb2NrLCBhc3luY2lvLlByb3RvY29sKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ciwgX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KQorCisgICAgZGVmIHRlc3RfbG9vcF9zZWxmX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcoKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc3NvY2ssIDQwOTYpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5yZXR1cm5fdmFsdWUuYWRkX2RvbmVfY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiB0ZXN0X2xvb3Bfc2VsZl9yZWFkaW5nX2Z1dChzZWxmKToKKyAgICAgICAgZnV0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZyhmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQucmVzdWx0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNzb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YucmV0dXJuX3ZhbHVlLmFkZF9kb25lX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgdGVzdF9sb29wX3NlbGZfcmVhZGluZ19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AuX2xvb3Bfc2VsZl9yZWFkaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fd3JpdGVfdG9fc2VsZigpCisgICAgICAgIHNlbGYuY3NvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoYid4JykKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKFtdKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ucHJvYWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcihzZWxmLCBtX2xvZyk6CisgICAgICAgIHBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbF9zb29uID0gc2VsZi5sb29wLmNhbGxfc29vbiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nKHBmLCBzZWxmLnNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsX3Nvb24uY2FsbGVkKQorCisgICAgICAgICMgY2FsbGJhY2sKKyAgICAgICAgbG9vcCA9IGNhbGxfc29vbi5jYWxsX2FyZ3NbMF1bMF0KKyAgICAgICAgbG9vcCgpCisgICAgICAgIHNlbGYucHJvYWN0b3IuYWNjZXB0LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2spCisKKyAgICAgICAgIyBjb25uCisgICAgICAgIGZ1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGZ1dC5yZXN1bHQucmV0dXJuX3ZhbHVlID0gKHVuaXR0ZXN0Lm1vY2suTW9jaygpLCB1bml0dGVzdC5tb2NrLk1vY2soKSkKKworICAgICAgICBtYWtlX3RyID0gc2VsZi5sb29wLl9tYWtlX3NvY2tldF90cmFuc3BvcnQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBsb29wKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5yZXN1bHQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV90ci5jYWxsZWQpCisKKyAgICAgICAgIyBleGNlcHRpb24KKyAgICAgICAgZnV0LnJlc3VsdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICBsb29wKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZy5leGNlcHRpb24uY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9jYW5jZWwoc2VsZik6CisgICAgICAgIHBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbF9zb29uID0gc2VsZi5sb29wLmNhbGxfc29vbiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nKHBmLCBzZWxmLnNvY2spCisgICAgICAgIGxvb3AgPSBjYWxsX3Nvb24uY2FsbF9hcmdzWzBdWzBdCisKKyAgICAgICAgIyBjYW5jZWxsZWQKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICBsb29wKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zdG9wX3NlcnZpbmcoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3N0b3Bfc2VydmluZyhzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYucHJvYWN0b3IuX3N0b3Bfc2VydmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoc29jaykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmJmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9xdWV1ZXMucHkKQEAgLTAsMCArMSw0NjYgQEAKKyIiIlRlc3RzIGZvciBxdWV1ZXMucHkiIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgX1F1ZXVlVGVzdEJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisKK2NsYXNzIFF1ZXVlQmFzaWNUZXN0cyhfUXVldWVUZXN0QmFzZSk6CisKKyAgICBkZWYgX3Rlc3RfcmVwcl9vcl9zdHIoc2VsZiwgZm4sIGV4cGVjdF9pZCk6CisgICAgICAgICIiIlRlc3QgUXVldWUncyByZXByIG9yIHN0ci4KKworICAgICAgICBmbiBpcyByZXByIG9yIHN0ci4gZXhwZWN0X2lkIGlzIFRydWUgaWYgd2UgZXhwZWN0IHRoZSBRdWV1ZSdzIGlkIHRvCisgICAgICAgIGFwcGVhciBpbiBmbihRdWV1ZSgpKS4KKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm4ocSkuc3RhcnRzd2l0aCgnPFF1ZXVlJyksIGZuKHEpKQorICAgICAgICBpZF9pc19wcmVzZW50ID0gaGV4KGlkKHEpKSBpbiBmbihxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdF9pZCwgaWRfaXNfcHJlc2VudCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFkZF9nZXR0ZXIoKToKKyAgICAgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgU3RhcnQgYSB0YXNrIHRoYXQgd2FpdHMgdG8gZ2V0LgorICAgICAgICAgICAgYXN5bmNpby5UYXNrKHEuZ2V0KCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgTGV0IGl0IHN0YXJ0IHdhaXRpbmcuCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19nZXR0ZXJzWzFdJyBpbiBmbihxKSkKKyAgICAgICAgICAgICMgcmVzdW1lIHEuZ2V0IGNvcm91dGluZSB0byBmaW5pc2ggZ2VuZXJhdG9yCisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMCkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhZGRfZ2V0dGVyKCkpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBhZGRfcHV0dGVyKCk6CisgICAgICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICAgICAgIyBTdGFydCBhIHRhc2sgdGhhdCB3YWl0cyB0byBwdXQuCisgICAgICAgICAgICBhc3luY2lvLlRhc2socS5wdXQoMiksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgTGV0IGl0IHN0YXJ0IHdhaXRpbmcuCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19wdXR0ZXJzWzFdJyBpbiBmbihxKSkKKyAgICAgICAgICAgICMgcmVzdW1lIHEucHV0IGNvcm91dGluZSB0byBmaW5pc2ggZ2VuZXJhdG9yCisgICAgICAgICAgICBxLmdldF9ub3dhaXQoKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFkZF9wdXR0ZXIoKSkKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPWxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19xdWV1ZT1bMV0nIGluIGZuKHEpKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHEuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhxLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlcHJfb3Jfc3RyKHJlcHIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9zdHIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVwcl9vcl9zdHIoc3RyLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocS5lbXB0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHEuZ2V0X25vd2FpdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5lbXB0eSgpKQorCisgICAgZGVmIHRlc3RfZnVsbChzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocS5mdWxsKCkpCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobWF4c2l6ZT0xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSkKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZm9yIGkgaW4gWzEsIDMsIDJdOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgaXRlbXMgPSBbcS5nZXRfbm93YWl0KCkgZm9yIF8gaW4gcmFuZ2UoMyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDMsIDJdLCBpdGVtcykKKworICAgIGRlZiB0ZXN0X21heHNpemUoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4wMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAyLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobWF4c2l6ZT0yLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcS5tYXhzaXplKQorICAgICAgICBoYXZlX2JlZW5fcHV0ID0gW10KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHB1dHRlcigpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dChpKQorICAgICAgICAgICAgICAgIGhhdmVfYmVlbl9wdXQuYXBwZW5kKGkpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhwdXR0ZXIoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkKKworICAgICAgICAgICAgIyBUaGUgcHV0dGVyIGlzIGJsb2NrZWQgYWZ0ZXIgcHV0dGluZyB0d28gaXRlbXMuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFswLCAxXSwgaGF2ZV9iZWVuX3B1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcS5nZXRfbm93YWl0KCkpCisKKyAgICAgICAgICAgICMgTGV0IHRoZSBwdXR0ZXIgcmVzdW1lIGFuZCBwdXQgbGFzdCBpdGVtLgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzAsIDEsIDJdLCBoYXZlX2JlZW5fcHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcS5nZXRfbm93YWl0KCkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAyLCBsb29wLnRpbWUoKSkKKworCitjbGFzcyBRdWV1ZUdldFRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X2Jsb2NraW5nX2dldChzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gcS5nZXQoKSkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX2dldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlcykKKworICAgIGRlZiB0ZXN0X2dldF93aXRoX3B1dHRlcnMoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKDEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKworICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5fcHV0dGVycy5hcHBlbmQoKDIsIHdhaXRlcikpCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxLmdldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X2Jsb2NraW5nX2dldF93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorICAgICAgICBzdGFydGVkID0gYXN5bmNpby5FdmVudChsb29wPWxvb3ApCisgICAgICAgIGZpbmlzaGVkID0gRmFsc2UKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX2dldCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgZmluaXNoZWQKKyAgICAgICAgICAgIHN0YXJ0ZWQuc2V0KCkKKyAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gcS5nZXQoKQorICAgICAgICAgICAgZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9wdXQoKToKKyAgICAgICAgICAgIGxvb3AuY2FsbF9sYXRlcigwLjAxLCBxLnB1dF9ub3dhaXQsIDEpCisgICAgICAgICAgICBxdWV1ZV9nZXRfdGFzayA9IGFzeW5jaW8uVGFzayhxdWV1ZV9nZXQoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBzdGFydGVkLndhaXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5pc2hlZCkKKyAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gcXVldWVfZ2V0X3Rhc2sKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5pc2hlZCkKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxdWV1ZV9wdXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9ub25ibG9ja2luZ19nZXQoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKworICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX2dldF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlF1ZXVlRW1wdHksIHEuZ2V0X25vd2FpdCkKKworICAgIGRlZiB0ZXN0X2dldF9jYW5jZWxsZWQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4wMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA2MSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDUKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX2dldCgpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdF9mb3IocS5nZXQoKSwgMC4wNTEsIGxvb3A9bG9vcCkpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBnZXRfdGFzayA9IGFzeW5jaW8uVGFzayhxdWV1ZV9nZXQoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkgICMgbGV0IHRoZSB0YXNrIHN0YXJ0CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBnZXRfdGFzaykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNiwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9nZXRfY2FuY2VsbGVkX3JhY2Uoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHQxID0gYXN5bmNpby5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IGFzeW5jaW8uVGFzayhxLmdldCgpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgdDEuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHEucHV0X25vd2FpdCgnYScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnJlc3VsdCgpLCAnYScpCisKKyAgICBkZWYgdGVzdF9nZXRfd2l0aF93YWl0aW5nX3B1dHRlcnMoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wLCBtYXhzaXplPTEpCisgICAgICAgIGFzeW5jaW8uVGFzayhxLnB1dCgnYScpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgYXN5bmNpby5UYXNrKHEucHV0KCdiJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEuZ2V0KCkpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxLmdldCgpKSwgJ2InKQorCisKK2NsYXNzIFF1ZXVlUHV0VGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfcHV0KHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX3B1dCgpOgorICAgICAgICAgICAgIyBObyBtYXhzaXplLCB3b24ndCBibG9jay4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5wdXQoMSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX3B1dCgpKQorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfcHV0X3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTEsIGxvb3A9bG9vcCkKKyAgICAgICAgc3RhcnRlZCA9IGFzeW5jaW8uRXZlbnQobG9vcD1sb29wKQorICAgICAgICBmaW5pc2hlZCA9IEZhbHNlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9wdXQoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGZpbmlzaGVkCisgICAgICAgICAgICBzdGFydGVkLnNldCgpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDIpCisgICAgICAgICAgICBmaW5pc2hlZCA9IFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX2dldCgpOgorICAgICAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDAuMDEsIHEuZ2V0X25vd2FpdCkKKyAgICAgICAgICAgIHF1ZXVlX3B1dF90YXNrID0gYXN5bmNpby5UYXNrKHF1ZXVlX3B1dCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHN0YXJ0ZWQud2FpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmlzaGVkKQorICAgICAgICAgICAgeWllbGQgZnJvbSBxdWV1ZV9wdXRfdGFzaworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmlzaGVkKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX2dldCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfcHV0KHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcS5nZXRfbm93YWl0KCkpCisKKyAgICBkZWYgdGVzdF9ub25ibG9ja2luZ19wdXRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5RdWV1ZUZ1bGwsIHEucHV0X25vd2FpdCwgMikKKworICAgIGRlZiB0ZXN0X3B1dF9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHEuZ2V0KCkpCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhxdWV1ZV9wdXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0ZXN0KCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfcHV0X2NhbmNlbGxlZF9yYWNlKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCwgbWF4c2l6ZT0xKQorCisgICAgICAgIGFzeW5jaW8uVGFzayhxLnB1dCgnYScpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgYXN5bmNpby5UYXNrKHEucHV0KCdjJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHEucHV0KCdiJyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5nZXRfbm93YWl0KCksICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldF9ub3dhaXQoKSwgJ2MnKQorCisgICAgZGVmIHRlc3RfcHV0X3dpdGhfd2FpdGluZ19nZXR0ZXJzKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhxLmdldCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocS5wdXQoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpLCAnYScpCisKKworY2xhc3MgTGlmb1F1ZXVlVGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3Rfb3JkZXIoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLkxpZm9RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZm9yIGkgaW4gWzEsIDMsIDJdOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgaXRlbXMgPSBbcS5nZXRfbm93YWl0KCkgZm9yIF8gaW4gcmFuZ2UoMyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzIsIDMsIDFdLCBpdGVtcykKKworCitjbGFzcyBQcmlvcml0eVF1ZXVlVGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3Rfb3JkZXIoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlByaW9yaXR5UXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgaXRlbXMpCisKKworY2xhc3MgSm9pbmFibGVRdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X3Rhc2tfZG9uZV91bmRlcmZsb3coc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLkpvaW5hYmxlUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHEudGFza19kb25lKQorCisgICAgZGVmIHRlc3RfdGFza19kb25lKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5Kb2luYWJsZVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgYWNjdW11bGF0b3IgPSAwCisKKyAgICAgICAgIyBUd28gd29ya2VycyBnZXQgaXRlbXMgZnJvbSB0aGUgcXVldWUgYW5kIGNhbGwgdGFza19kb25lIGFmdGVyIGVhY2guCisgICAgICAgICMgSm9pbiB0aGUgcXVldWUgYW5kIGFzc2VydCBhbGwgaXRlbXMgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KKyAgICAgICAgcnVubmluZyA9IFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdvcmtlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgYWNjdW11bGF0b3IKKworICAgICAgICAgICAgd2hpbGUgcnVubmluZzoKKyAgICAgICAgICAgICAgICBpdGVtID0geWllbGQgZnJvbSBxLmdldCgpCisgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKz0gaXRlbQorICAgICAgICAgICAgICAgIHEudGFza19kb25lKCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKDIpOgorICAgICAgICAgICAgICAgIGFzeW5jaW8uVGFzayh3b3JrZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0ocmFuZ2UoMTAwKSksIGFjY3VtdWxhdG9yKQorCisgICAgICAgICMgY2xvc2UgcnVubmluZyBnZW5lcmF0b3JzCisgICAgICAgIHJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgwKQorCisgICAgZGVmIHRlc3Rfam9pbl9lbXB0eV9xdWV1ZShzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uSm9pbmFibGVRdWV1ZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICAjIFRlc3QgdGhhdCBhIHF1ZXVlIGpvaW4oKXMgc3VjY2Vzc2Z1bGx5LCBhbmQgYmVmb3JlIGFueXRoaW5nIGVsc2UKKyAgICAgICAgIyAoZG9uZSB0d2ljZSBmb3IgaW5zdXJhbmNlKS4KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGpvaW4oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGpvaW4oKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uSm9pbmFibGVRdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLl9mb3JtYXQoKSwgJ21heHNpemU9MCcpCisKKyAgICAgICAgcS5fdW5maW5pc2hlZF90YXNrcyA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLl9mb3JtYXQoKSwgJ21heHNpemU9MCB0YXNrcz0yJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NWE4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zZWxlY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSwxNjY0IEBACisiIiJUZXN0cyBmb3Igc2VsZWN0b3JfZXZlbnRzLnB5IiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGVycm5vCitpbXBvcnQgZ2MKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQorCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCBzZWxlY3RvcnMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgQmFzZVNlbGVjdG9yRXZlbnRMb29wCitmcm9tIGFzeW5jaW8uc2VsZWN0b3JfZXZlbnRzIGltcG9ydCBfU2VsZWN0b3JUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IF9TZWxlY3RvclNzbFRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0Citmcm9tIGFzeW5jaW8uc2VsZWN0b3JfZXZlbnRzIGltcG9ydCBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydAorCisKK2NsYXNzIFRlc3RCYXNlU2VsZWN0b3JFdmVudExvb3AoQmFzZVNlbGVjdG9yRXZlbnRMb29wKToKKworICAgIGRlZiBfbWFrZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Nzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5fY3NvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgKz0gMQorCisKK2RlZiBsaXN0X3RvX2J1ZmZlcihsPSgpKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KCkuam9pbihsKQorCisKK2NsYXNzIEJhc2VTZWxlY3RvckV2ZW50TG9vcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZWN0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AgPSBUZXN0QmFzZVNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9yKQorCisgICAgZGVmIHRlc3RfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICBtID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydChtLCBhc3luY2lvLlByb3RvY29sKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cmFuc3BvcnQsIF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9tYWtlX3NzbF90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIG0gPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydChtLCBhc3luY2lvLlByb3RvY29sKCksIG0sIHdhaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyYW5zcG9ydCwgX1NlbGVjdG9yU3NsVHJhbnNwb3J0KQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLnNzbCcsIE5vbmUpCisgICAgZGVmIHRlc3RfbWFrZV9zc2xfdHJhbnNwb3J0X3dpdGhvdXRfc3NsX2Vycm9yKHNlbGYpOgorICAgICAgICBtID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydChtLCBtLCBtLCBtKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHNzb2NrID0gc2VsZi5sb29wLl9zc29jaworICAgICAgICBzc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworICAgICAgICBjc29jayA9IHNlbGYubG9vcC5fY3NvY2sKKyAgICAgICAgY3NvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEKKyAgICAgICAgcmVtb3ZlX3JlYWRlciA9IHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3RvciA9IHNlbGVjdG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zZWxlY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9jc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zc29jaykKKyAgICAgICAgc2VsZWN0b3IuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc3NvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgY3NvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgcmVtb3ZlX3JlYWRlci5hc3NlcnRfY2FsbGVkX3dpdGgoNykKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfbm9fc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHNzb2NrID0gc2VsZi5sb29wLl9zc29jaworICAgICAgICBjc29jayA9IHNlbGYubG9vcC5fY3NvY2sKKyAgICAgICAgcmVtb3ZlX3JlYWRlciA9IHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3RvciA9IE5vbmUKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zZWxlY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3NvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbW92ZV9yZWFkZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgc2VsZi5sb29wLl9zb2NrZXRwYWlyKQorCisgICAgZGVmIHRlc3RfcmVhZF9mcm9tX3NlbGZfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc3NvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3JlYWRfZnJvbV9zZWxmKCkpCisKKyAgICBkZWYgdGVzdF9yZWFkX2Zyb21fc2VsZl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc3NvY2sucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLl9yZWFkX2Zyb21fc2VsZikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3NlbGZfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fY3NvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3NlbGZfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLl93cml0ZV90b19zZWxmKQorCisgICAgZGVmIHRlc3Rfc29ja19yZWN2KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19yZWN2KHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl9jYW5jZWxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2KGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2sucmVjdi5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgVHJ1ZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdihmLCBGYWxzZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsIHNlbGYubG9vcC5fc29ja19yZWN2LCBmLCBUcnVlLCBzb2NrLCAxMDI0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgZXJyID0gc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgRmFsc2UsIHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLCBmLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3Rfc29ja19zZW5kYWxsKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChmLCBGYWxzZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9zb2NrX3NlbmRhbGxfbm9kYXRhKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFzeW5jaW8uRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9jYW5jZWxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2suc2VuZC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgVHJ1ZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwsIGYsIFRydWUsIHNvY2ssIGInZGF0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9pbnRlcnJ1cHRlZChzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gSW50ZXJydXB0ZWRFcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMTAsIHNlbGYubG9vcC5fc29ja19zZW5kYWxsLCBmLCBUcnVlLCBzb2NrLCBiJ2RhdGEnKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBlcnIgPSBzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLmV4Y2VwdGlvbigpLCBlcnIpCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfcGFydGlhbChzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMTAsIHNlbGYubG9vcC5fc29ja19zZW5kYWxsLCBmLCBUcnVlLCBzb2NrLCBiJ3RhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX25vbmUoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9zb2NrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFzeW5jaW8uRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKGYsIEZhbHNlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBGYWxzZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jb25uZWN0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBGYWxzZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmNvbm5lY3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfY29ubmVjdF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0KGYsIFRydWUsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCksIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suZ2V0c29ja29wdC5yZXR1cm5fdmFsdWUgPSBlcnJuby5FQUdBSU4KKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBUcnVlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdCwgZiwKKyAgICAgICAgICAgICBUcnVlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmdldHNvY2tvcHQucmV0dXJuX3ZhbHVlID0gZXJybm8uRU5PVENPTk4KKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0KGYsIFRydWUsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBPU0Vycm9yKQorCisgICAgZGVmIHRlc3Rfc29ja19hY2NlcHQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfYWNjZXB0KHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChmLCBGYWxzZSwgc29jayksIHNlbGYubG9vcC5fc29ja19hY2NlcHQuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgY29ubiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suYWNjZXB0LnJldHVybl92YWx1ZSA9IGNvbm4sICgnMTI3LjAuMC4xJywgMTAwMCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNvbm4sICgnMTI3LjAuMC4xJywgMTAwMCkpLCBmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChGYWxzZSwpLCBjb25uLnNldGJsb2NraW5nLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF9jYW5jZWxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgRmFsc2UsIHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5hY2NlcHQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBUcnVlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwpLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0LCBmLCBUcnVlLCBzb2NrKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIGVyciA9IHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhlcnIsIGYuZXhjZXB0aW9uKCkpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkuc2lkZV9lZmZlY3QgPSBLZXlFcnJvcgorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxfYXJnc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGVjdG9ycy5FVkVOVF9SRUFELCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCByLl9jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodykKKworICAgIGRlZiB0ZXN0X2FkZF9yZWFkZXJfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChyZWFkZXIsIHdyaXRlcikpCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWFkZXIuY2FuY2VsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxlZCkKKyAgICAgICAgZmQsIG1hc2ssIChyLCB3KSA9IHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGVjdG9ycy5FVkVOVF9XUklURSB8IHNlbGVjdG9ycy5FVkVOVF9SRUFELCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCByLl9jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0ZXIsIHcpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyX2V4aXN0aW5nX3dyaXRlcihzZWxmKToKKyAgICAgICAgd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwgKE5vbmUsIHdyaXRlcikpCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdGVyLCB3KQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3JlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAoTm9uZSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIoMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfcmVhZGVyX3JlYWRfd3JpdGUoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCB8IHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgIChyZWFkZXIsIHdyaXRlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci51bnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCB3cml0ZXIpKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9yZWFkZXJfdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgZGVmIHRlc3RfYWRkX3dyaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHcuX2NhbGxiYWNrKQorCisgICAgZGVmIHRlc3RfYWRkX3dyaXRlcl9leGlzdGluZyhzZWxmKToKKyAgICAgICAgcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVyLmNhbmNlbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHcuX2NhbGxiYWNrKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3dyaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwgKE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3dyaXRlcl9yZWFkX3dyaXRlKHNlbGYpOgorICAgICAgICByZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQgfCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIChyZWFkZXIsIE5vbmUpKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXJfdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKDEpKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfcmVhZChzZWxmKToKKyAgICAgICAgcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgcmVhZGVyLl9jYW5jZWxsZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cygKKyAgICAgICAgICAgIFsoc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCBOb25lKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aChyZWFkZXIpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2V2ZW50c19yZWFkX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgcmVhZGVyLmNhbmNlbGxlZCA9IFRydWUKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgTm9uZSkpLAorICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKV0pCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCgxKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfd3JpdGUoc2VsZik6CisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlci5fY2FuY2VsbGVkID0gRmFsc2UKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSldKQorICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5hc3NlcnRfY2FsbGVkX3dpdGgod3JpdGVyKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfd3JpdGVfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIuY2FuY2VsbGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cygKKyAgICAgICAgICAgIFsoc2VsZWN0b3JzLlNlbGVjdG9yS2V5KDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCB3cml0ZXIpKSwKKyAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKV0pCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aCgxKQorCisKK2NsYXNzIFNlbGVjdG9yVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKGFzeW5jaW8uUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jayhzb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKworICAgIGRlZiB0ZXN0X2N0b3Ioc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHIuX3NvY2ssIHNlbGYuc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ci5fc29ja19mZCwgNykKKworICAgIGRlZiB0ZXN0X2Fib3J0KHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB0ci5hYm9ydCgpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFs3XSkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzddKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfd3JpdGVfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgdHIuX2J1ZmZlci5leHRlbmQoYidkYXRhJykKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2ZvcmNlX2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgdHIuX2J1ZmZlci5leHRlbmQoYicxJykKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoNywgdW5pdHRlc3QubW9jay5zZW50aW5lbCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdW5pdHRlc3QubW9jay5zZW50aW5lbCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIGxpc3RfdG9fYnVmZmVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisKKyAgICAgICAgIyBzZWNvbmQgY2xvc2Ugc2hvdWxkIG5vdCByZW1vdmUgcmVhZGVyCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZShOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzddKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ubG9nLmxvZ2dlci5leGNlcHRpb24nKQorICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yKHNlbGYsIG1fZXhjKToKKyAgICAgICAgZXhjID0gT1NFcnJvcigpCisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IoZXhjKQorCisgICAgICAgIG1fZXhjLmFzc2VydF9jYWxsZWRfd2l0aCgnRmF0YWwgZXJyb3IgZm9yICVzJywgdHIpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXhjKQorCisgICAgZGVmIHRlc3RfY29ubmVjdGlvbl9sb3N0KHNlbGYpOgorICAgICAgICBleGMgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChleGMpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGV4YykKKyAgICAgICAgc2VsZi5zb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9zb2NrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5wcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLnByb3RvY29sKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5sb29wKSkpCisKKworY2xhc3MgU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYuc29ja19mZCA9IHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgZnV0KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZnV0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfcGF1c2VfcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSg3IGluIHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEnKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lb2Yoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInJworICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lb2Zfa2VlcF9vcGVuKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQucmV0dXJuX3ZhbHVlID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0LmNsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2FpbihzZWxmLCBtX2V4Yyk6CisgICAgICAgIHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnbG9nZ2luZy5leGNlcHRpb24nKQorICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfdHJ5YWdhaW5faW50ZXJydXB0ZWQoc2VsZiwgbV9leGMpOgorICAgICAgICBzZWxmLnNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9jb25uX3Jlc2V0KHNlbGYsIG1fZXhjKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVzZXRFcnJvcigpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICB0cmFuc3BvcnQuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnbG9nZ2luZy5leGNlcHRpb24nKQorICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfZXJyKHNlbGYsIG1fZXhjKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKGRhdGEpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBieXRlYXJyYXkoYidkYXRhJykpICAjIEhhc24ndCBiZWVuIG11dGF0ZWQuCisKKyAgICBkZWYgdGVzdF93cml0ZV9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhiJ2RhdGEnKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuc29jay5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChiJ2RhdGExJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YTInKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAyCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbF9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ3RhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBieXRlYXJyYXkoYidkYXRhJykpICAjIEhhc24ndCBiZWVuIG11dGF0ZWQuCisKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsX21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGInZGF0YScpCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYid0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsX25vbmUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3dyaXRlX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICB0cmFuc3BvcnQuX2Nvbm5fbG9zdCA9IDEKKworICAgICAgICBzZWxmLnNvY2sucmVzZXRfbW9jaygpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX3N0cihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHJhbnNwb3J0LndyaXRlLCAnc3RyJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAxKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5KHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfY2xvc2luZyhzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgIyBUaGlzIGlzIGFuIGludGVybmFsIGVycm9yLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3BhcnRpYWwoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ3RhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3BhcnRpYWxfbm9uZShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMAorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhMWRhdGEyJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfZXhjZXB0aW9uX2FuZF9jbG9zZShzZWxmLCBtX2xvZyk6CisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHJlbW92ZV93cml0ZXIgPSBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgcmVtb3ZlX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrX2ZkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsX2NvdW50LCAxKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZW9mKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsZWQpCisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gbGFtYmRhIF86IDQKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIuY2xvc2UoKQorCisKK0B1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKK2NsYXNzIFNlbGVjdG9yU3NsVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKGFzeW5jaW8uUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jayhzb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKyAgICAgICAgc2VsZi5zc2xzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxCisgICAgICAgIHNlbGYuc3NsY29udGV4dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC53cmFwX3NvY2tldC5yZXR1cm5fdmFsdWUgPSBzZWxmLnNzbHNvY2sKKworICAgIGRlZiBfbWFrZV9vbmUoc2VsZiwgY3JlYXRlX3dhaXRlcj1Ob25lKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgc2VsZi5zb2NrLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLnNzbHNvY2sucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlc2V0X2NvdW50ZXJzKCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0LAorICAgICAgICAgICAgd2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2UuY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9yZWFkZXJfcmV0cnkoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0KQorICAgICAgICB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDEsIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlKQorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlX3dyaXRlcl9yZXRyeShzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50V3JpdGVFcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0KQorICAgICAgICB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDEsIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlKQorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlX2V4YyhzZWxmKToKKyAgICAgICAgZXhjID0gVmFsdWVFcnJvcigpCisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBleGMKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgdHJhbnNwb3J0Ll93YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYW5zcG9ydC5fd2FpdGVyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhleGMsIHRyYW5zcG9ydC5fd2FpdGVyLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlX2Jhc2VfZXhjKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0KQorICAgICAgICB0cmFuc3BvcnQuX3dhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBleGMgPSBCYXNlRXhjZXB0aW9uKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IGV4YworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3dhaXRlci5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhjLCB0cmFuc3BvcnQuX3dhaXRlci5leGNlcHRpb24oKSkKKworICAgIGRlZiB0ZXN0X3BhdXNlX3Jlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdHIucGF1c2VfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDEgaW4gc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYnl0ZWFycmF5KGInZGF0YScpKSAgIyBIYXNuJ3QgYmVlbiBtdXRhdGVkLgorICAgICAgICBzZWxmLmFzc2VydElzTm90KGRhdGEsIHRyYW5zcG9ydC5fYnVmZmVyKSAgIyBIYXNuJ3QgYmVlbiBpbmNvcnBvcmF0ZWQuCisKKyAgICBkZWYgdGVzdF93cml0ZV9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3N0cihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRyYW5zcG9ydC53cml0ZSwgJ3N0cicpCisKKyAgICBkZWYgdGVzdF93cml0ZV9jbG9zaW5nKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfd3JpdGVfZXhjZXB0aW9uKHNlbGYsIG1fbG9nKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2Nvbm5fbG9zdCA9IDEKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9idWZmZXIsIGxpc3RfdG9fYnVmZmVyKCkpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3JlY3Yoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnJlY3YuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiJ2RhdGEnLCksIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3dyaXRlX3dhbnRzX3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3dhbnRzX3JlYWQgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fd3JpdGVfd2FudHNfcmVhZCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICB0cmFuc3BvcnQuX3NvY2tfZmQsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3JlY3ZfZW9mKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfcmVjdl9jb25uX3Jlc2V0KHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZXNldEVycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2ZvcmNlX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3JldHJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50UmVhZEVycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKworICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3dyaXRlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3JlYWRfd2FudHNfd3JpdGUpCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHRyYW5zcG9ydC5fc29ja19mZCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X2V4YyhzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZChzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcigpLCB0cmFuc3BvcnQuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5zZW5kLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfbm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMAorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YTEnLCBiJ2RhdGEyJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExZGF0YTInXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAyCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGExZGF0YTInXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9jbG9zaW5nX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNzbHNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9jbG9zaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfY2xvc2luZ19lbXB0eV9idWZmZXIoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9yZXRyeShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkKKworICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50V3JpdGVFcnJvcgorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcigpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9yZWFkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll93cml0ZV93YW50c19yZWFkKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgodHJhbnNwb3J0Ll9zb2NrX2ZkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9leGMoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9yZWFkX3dhbnRzX3dyaXRlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3dhbnRzX3dyaXRlID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fcmVhZF93YW50c193cml0ZSkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5LmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHRyYW5zcG9ydC5fc29ja19mZCwgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyLndyaXRlX2VvZikKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzFdKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSBvciBub3Qgc3NsLkhBU19TTkksICdObyBTTkkgc3VwcG9ydCcpCisgICAgZGVmIHRlc3Rfc2VydmVyX2hvc3RuYW1lKHNlbGYpOgorICAgICAgICBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0LAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdsb2NhbGhvc3QnKQorICAgICAgICBzZWxmLnNzbGNvbnRleHQud3JhcF9zb2NrZXQuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgc2VsZi5zb2NrLCBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSwgc2VydmVyX3NpZGU9RmFsc2UsCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J2xvY2FsaG9zdCcpCisKKworY2xhc3MgU2VsZWN0b3JTc2xXaXRob3V0U3NsVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLnNzbCcsIE5vbmUpCisgICAgZGVmIHRlc3Rfc3NsX3RyYW5zcG9ydF9yZXF1aXJlc19zc2xfbW9kdWxlKHNlbGYpOgorICAgICAgICBNb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNzbFRyYW5zcG9ydChNb2NrKCksIE1vY2soKSwgTW9jaygpLCBNb2NrKCkpCisKKworY2xhc3MgU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jayhzcGVjX3NldD1zb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5zb2NrLnJlY3Zmcm9tLnJldHVybl92YWx1ZSA9IChiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFncmFtX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQpKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdmZyb20uc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfZXJyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIGVyciA9IHNlbGYuc29jay5yZWN2ZnJvbS5zaWRlX2VmZmVjdCA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfb3NlcnIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnJlY3Zmcm9tLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X3NlbmR0byhzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5jYWxsX2FyZ3NbMF0sIChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSwgKCcwLjAuMC4wJywgMTIzNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc29jay5zZW5kdG8uY2FsbF9hcmdzWzBdLCAoZGF0YSwgKCcwLjAuMC4wJywgMTIzNCkpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSwgKCcwLjAuMC4wJywgMTIzNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc29jay5zZW5kdG8uY2FsbF9hcmdzWzBdLCAoZGF0YSwgKCcwLjAuMC4wJywgMTIzNCkpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhiJycsICgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fYnVmZmVyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YTEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YTEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpLAorICAgICAgICAgICAgIChiJ2RhdGEyJywgKCcwLjAuMC4wJywgMTIzNDUpKV0sCisgICAgICAgICAgICBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19idWZmZXJfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBkYXRhMiA9IGJ5dGVhcnJheShiJ2RhdGEyJykKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhMiwgKCcwLjAuMC4wJywgMTIzNDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSwKKyAgICAgICAgICAgICAoYidkYXRhMicsICgnMC4wLjAuMCcsIDEyMzQ1KSldLAorICAgICAgICAgICAgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cmFuc3BvcnQuX2J1ZmZlclsxXVswXSwgYnl0ZXMpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fYnVmZmVyX21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIGRhdGEyID0gbWVtb3J5dmlldyhiJ2RhdGEyJykKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhMiwgKCcwLjAuMC4wJywgMTIzNDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSwKKyAgICAgICAgICAgICAoYidkYXRhMicsICgnMC4wLjAuMCcsIDEyMzQ1KSldLAorICAgICAgICAgICAgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cmFuc3BvcnQuX2J1ZmZlclsxXVswXSwgYnl0ZXMpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSwgKCcwLjAuMC4wJywgMTIzNDUpKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9zZW5kdG9fZXhjZXB0aW9uKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IFJ1bnRpbWVFcnJvcigpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSwgKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHRyYW5zcG9ydC5fY29ubl9sb3N0ID0gMQorCisgICAgICAgIHRyYW5zcG9ydC5fYWRkcmVzcyA9ICgnMTIzJywpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fZXJyb3JfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2Vycm9yX3JlY2VpdmVkX2Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKworICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCAoJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5lcnJvcl9yZWNlaXZlZC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fc3RyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRyYW5zcG9ydC5zZW5kdG8sICdzdHInLCAoKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19jb25uZWN0ZWRfYWRkcihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgKCcwLjAuMC4wJywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgdHJhbnNwb3J0LnNlbmR0bywgYidzdHInLCAoJzAuMC4wLjAnLCAyKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19jbG9zaW5nKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBhZGRyZXNzPSgxLCkpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDEpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oYidkYXRhJywgKDEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc29jay5zZW5kdG8uY2FsbF9hcmdzWzBdLCAoZGF0YSwgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9jbG9zaW5nKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoZGF0YSwgKCkpKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5zb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoWyhiJ2RhdGExJywgKCkpLCAoYidkYXRhMicsICgpKV0pCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YTEnLCAoKSksIChiJ2RhdGEyJywgKCkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IFJ1bnRpbWVFcnJvcigpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCkpKQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X2Vycm9yX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YScsICgpKSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfZXJyb3JfcmVjZWl2ZWRfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVmdXNlZEVycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgKCcwLjAuMC4wJywgMSkpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YScsICgpKSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLmVycm9yX3JlY2VpdmVkLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmxvZy5sb2dnZXIuZXhjZXB0aW9uJykKKyAgICBkZWYgdGVzdF9mYXRhbF9lcnJvcl9jb25uZWN0ZWQoc2VsZiwgbV9leGMpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCAoJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgZXJyID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IoZXJyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBtX2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoJ0ZhdGFsIGVycm9yIGZvciAlcycsIHRyYW5zcG9ydCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3N0cmVhbXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzZmI0NQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3N0cmVhbXMucHkKQEAgLTAsMCArMSw0NzIgQEAKKyIiIlRlc3RzIGZvciBzdHJlYW1zLnB5LiIiIgorCitpbXBvcnQgZ2MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQorCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgU3RyZWFtUmVhZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgREFUQSA9IGInbGluZTFcbmxpbmUyXG5saW5lM1xuJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIGp1c3QgaW4gY2FzZSBpZiB3ZSBoYXZlIHRyYW5zcG9ydCBjbG9zZSBjYWxsYmFja3MKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5zdHJlYW1zLmV2ZW50cycpCisgICAgZGVmIHRlc3RfY3Rvcl9nbG9iYWxfbG9vcChzZWxmLCBtX2V2ZW50cyk6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzdHJlYW0uX2xvb3AsIG1fZXZlbnRzLmdldF9ldmVudF9sb29wLnJldHVybl92YWx1ZSkKKworICAgIGRlZiB0ZXN0X29wZW5fY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgZiA9IGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKCpodHRwZC5hZGRyZXNzLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlKGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpCisgICAgICAgICAgICBmID0gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGInSFRUUC8xLjAgMjAwIE9LXHJcbicpCisgICAgICAgICAgICBmID0gcmVhZGVyLnJlYWQoKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLmVuZHN3aXRoKGInXHJcblxyXG5UZXN0IG1lc3NhZ2UnKSkKKworICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9vcGVuX2Nvbm5lY3Rpb25fbm9fbG9vcF9zc2woc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIodXNlX3NzbD1UcnVlKSBhcyBodHRwZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgICAgICAgICBmID0gYXN5bmNpby5vcGVuX2Nvbm5lY3Rpb24oKmh0dHBkLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD10ZXN0X3V0aWxzLmR1bW15X3NzbF9jb250ZXh0KCkpCisgICAgICAgICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgICAgIHdyaXRlci53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcblxyXG4nKQorICAgICAgICAgICAgZiA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5lbmRzd2l0aChiJ1xyXG5cclxuVGVzdCBtZXNzYWdlJykpCisKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9vcGVuX2Nvbm5lY3Rpb25fZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGYgPSBhc3luY2lvLm9wZW5fY29ubmVjdGlvbigqaHR0cGQuYWRkcmVzcywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZWFkZXIsIHdyaXRlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHdyaXRlci5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KFplcm9EaXZpc2lvbkVycm9yKCkpCisgICAgICAgICAgICBmID0gcmVhZGVyLnJlYWQoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9mZWVkX2VtcHR5X2RhdGEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9mZWVkX25vbmVtcHR5X2RhdGEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkX3plcm8oc2VsZik6CisgICAgICAgICMgUmVhZCB6ZXJvIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWQoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICAjIFJlYWQgYnl0ZXMuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZWFkX3Rhc2sgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWQoMzApLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkRBVEEsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRfbGluZV9icmVha3Moc2VsZik6CisgICAgICAgICMgUmVhZCBieXRlcyB3aXRob3V0IGxpbmUgYnJlYWtzLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpbmUxJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpbmUyJykKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCg1KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTEnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTInLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRfZW9mKHNlbGYpOgorICAgICAgICAjIFJlYWQgYnl0ZXMsIHN0b3AgYXQgZW9mLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVhZF90YXNrID0gYXN5bmNpby5UYXNrKHN0cmVhbS5yZWFkKDEwMjQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZF91bnRpbF9lb2Yoc2VsZik6CisgICAgICAgICMgUmVhZCBhbGwgYnl0ZXMgdW50aWwgZW9mLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVhZF90YXNrID0gYXN5bmNpby5UYXNrKHN0cmVhbS5yZWFkKC0xKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsxXG4nKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInY2h1bmsxXG5jaHVuazInLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGknLCBkYXRhKQorCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFZhbHVlRXJyb3IoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZCgyKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICAjIFJlYWQgb25lIGxpbmUuICdyZWFkbGluZScgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBkYXRhCisgICAgICAgICMgdG8gY29tZSBmcm9tICdjYicKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazEgJykKKyAgICAgICAgcmVhZF90YXNrID0gYXN5bmNpby5UYXNrKHN0cmVhbS5yZWFkbGluZSgpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazIgJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazMgJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidcbiBjaHVuazQnKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2NodW5rMSBjaHVuazIgY2h1bmszIFxuJywgbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyBjaHVuazQnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2xpbWl0X3dpdGhfZXhpc3RpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBSZWFkIG9uZSBsaW5lLiBUaGUgZGF0YSBpcyBpbiBTdHJlYW1SZWFkZXIncyBidWZmZXIKKyAgICAgICAgIyBiZWZvcmUgdGhlIGV2ZW50IGxvb3AgaXMgcnVuLgorCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxpbWl0PTMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbmUxXG5saW5lMlxuJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICAjIFRoZSBidWZmZXIgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbWFpbmluZyBkYXRhIGFmdGVyIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTJcbicsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxpbWl0PTMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbmUxJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICAjIE5vIGInXG4nIGF0IHRoZSBlbmQuIFRoZSAnbGltaXQnIGlzIHNldCB0byAzLiBTbyBiZWZvcmUKKyAgICAgICAgIyB3YWl0aW5nIGZvciB0aGUgbmV3IGRhdGEgaW4gYnVmZmVyLCAncmVhZGxpbmUnIHdpbGwgY29uc3VtZQorICAgICAgICAjIHRoZSBlbnRpcmUgYnVmZmVyLCBhbmQgc2luY2UgdGhlIGxlbmd0aCBvZiB0aGUgY29uc3VtZWQgZGF0YQorICAgICAgICAjIGlzIG1vcmUgdGhhbiAzLCBpdCB3aWxsIHJhaXNlIGEgVmFsdWRFcnJvci4gVGhlIGJ1ZmZlciBpcworICAgICAgICAjIGV4cGVjdGVkIHRvIGJlIGVtcHR5IG5vdy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfYXRfZW9mKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uYXRfZW9mKCkpCisKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ3NvbWUgZGF0YVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uYXRfZW9mKCkpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uYXRfZW9mKCkpCisKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ3NvbWUgZGF0YVxuJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cmVhbS5hdF9lb2YoKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2xpbWl0KHNlbGYpOgorICAgICAgICAjIFJlYWQgb25lIGxpbmUuIFN0cmVhbVJlYWRlcnMgYXJlIGZlZCB3aXRoIGRhdGEgYWZ0ZXIKKyAgICAgICAgIyB0aGVpciAncmVhZGxpbmUnIG1ldGhvZHMgYXJlIGNhbGxlZC4KKworICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsaW1pdD03LCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsxJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazInKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rM1xuJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgIyBUaGUgYnVmZmVyIGhhZCBqdXN0IG9uZSBsaW5lIG9mIGRhdGEsIGFuZCBhZnRlciByYWlzaW5nCisgICAgICAgICMgYSBWYWx1ZUVycm9yIGl0IHNob3VsZCBiZSBlbXB0eS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxpbWl0PTcsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazEnKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMlxuJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazNcbicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidjaHVuazNcbicsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbm9saW1pdF9ub3dhaXQoc2VsZik6CisgICAgICAgICMgQWxsIG5lZWRlZCBkYXRhIGZvciB0aGUgZmlyc3QgJ3JlYWRsaW5lJyBjYWxsIHdpbGwgYmUKKyAgICAgICAgIyBpbiB0aGUgYnVmZmVyLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEFbOjZdKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQVs2Ol0pCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUxXG4nLCBsaW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTJcbmxpbmUzXG4nLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2VvZihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidzb21lIGRhdGEnKQorICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInc29tZSBkYXRhJywgbGluZSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2VtcHR5X2VvZihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBsaW5lKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfcmVhZF9ieXRlX2NvdW50KHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCg3KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTJcbmwnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInaW5lM1xuJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZVxuJykKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmVcbicsIGRhdGEpCisKKyAgICAgICAgc3RyZWFtLnNldF9leGNlcHRpb24oVmFsdWVFcnJvcigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkZXhhY3RseV96ZXJvX29yX2xlc3Moc2VsZik6CisgICAgICAgICMgUmVhZCBleGFjdCBudW1iZXIgb2YgYnl0ZXMgKHplcm8gb3IgbGVzcykuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGV4YWN0bHkoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgc3RyZWFtLl9idWZmZXIpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRleGFjdGx5KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5KHNlbGYpOgorICAgICAgICAjIFJlYWQgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBuID0gMiAqIGxlbihzZWxmLkRBVEEpCisgICAgICAgIHJlYWRfdGFzayA9IGFzeW5jaW8uVGFzayhzdHJlYW0ucmVhZGV4YWN0bHkobiksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkRBVEEgKyBzZWxmLkRBVEEsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X2VvZihzZWxmKToKKyAgICAgICAgIyBSZWFkIGV4YWN0IG51bWJlciBvZiBieXRlcyAoZW9mKS4KKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG4gPSAyICogbGVuKHNlbGYuREFUQSkKKyAgICAgICAgcmVhZF90YXNrID0gYXN5bmNpby5UYXNrKHN0cmVhbS5yZWFkZXhhY3RseShuKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkluY29tcGxldGVSZWFkRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnBhcnRpYWwsIHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXhwZWN0ZWQsIG4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzE4IGJ5dGVzIHJlYWQgb24gYSB0b3RhbCBvZiAzNiBleHBlY3RlZCBieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkZXhhY3RseSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRleGFjdGx5KDIpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3RyZWFtLmV4Y2VwdGlvbigpKQorCisgICAgICAgIGV4YyA9IFZhbHVlRXJyb3IoKQorICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RyZWFtLmV4Y2VwdGlvbigpLCBleGMpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fd2FpdGVyKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNldF9lcnIoKToKKyAgICAgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFZhbHVlRXJyb3IoKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJlYWRsaW5lKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHN0cmVhbS5yZWFkbGluZSgpCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IGFzeW5jaW8uVGFzayhzZXRfZXJyKCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFt0MSwgdDJdLCBsb29wPXNlbGYubG9vcCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdDEucmVzdWx0KQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2NhbmNlbChzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiByZWFkX2FfbGluZSgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzdHJlYW0ucmVhZGxpbmUoKQorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2socmVhZF9hX2xpbmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgbGluZSBmYWlscyBpZiBzZXRfZXhjZXB0aW9uKCkgaXNuJ3QgY2FyZWZ1bC4KKyAgICAgICAgc3RyZWFtLnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCdtZXNzYWdlJykpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHN0cmVhbS5fd2FpdGVyLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3RhcnRfc2VydmVyKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE15U2VydmVyOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5sb29wID0gbG9vcAorCisgICAgICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfY2xpZW50KHNlbGYsIGNsaWVudF9yZWFkZXIsIGNsaWVudF93cml0ZXIpOgorICAgICAgICAgICAgICAgIGRhdGEgPSB5aWVsZCBmcm9tIGNsaWVudF9yZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGNsaWVudF93cml0ZXIud3JpdGUoZGF0YSkKKworICAgICAgICAgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNpby5zdGFydF9zZXJ2ZXIoc2VsZi5oYW5kbGVfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTI3LjAuMC4xJywgMTIzNDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9jbGllbnRfY2FsbGJhY2soc2VsZiwgY2xpZW50X3JlYWRlciwgY2xpZW50X3dyaXRlcik6CisgICAgICAgICAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayhjbGllbnRfcmVhZGVyLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICAgICAgICAgZGVmIGRvbmUodGFzayk6CisgICAgICAgICAgICAgICAgICAgIGNsaWVudF93cml0ZXIud3JpdGUodGFzay5yZXN1bHQoKSkKKworICAgICAgICAgICAgICAgIHRhc2suYWRkX2RvbmVfY2FsbGJhY2soZG9uZSkKKworICAgICAgICAgICAgZGVmIHN0YXJ0X2NhbGxiYWNrKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNpby5zdGFydF9zZXJ2ZXIoc2VsZi5oYW5kbGVfY2xpZW50X2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTI3LjAuMC4xJywgMTIzNDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICAgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLnNlcnZlci53YWl0X2Nsb3NlZCgpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IE5vbmUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNsaWVudCgpOgorICAgICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSB5aWVsZCBmcm9tIGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgICcxMjcuMC4wLjEnLCAxMjM0NSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICAjIHNlbmQgYSBsaW5lCisgICAgICAgICAgICB3cml0ZXIud3JpdGUoYiJoZWxsbyB3b3JsZCFcbiIpCisgICAgICAgICAgICAjIHJlYWQgaXQgYmFjaworICAgICAgICAgICAgbXNnYmFjayA9IHlpZWxkIGZyb20gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gbXNnYmFjaworCisgICAgICAgICMgdGVzdCB0aGUgc2VydmVyIHZhcmlhbnQgd2l0aCBhIGNvcm91dGluZSBhcyBjbGllbnQgaGFuZGxlcgorICAgICAgICBzZXJ2ZXIgPSBNeVNlcnZlcihzZWxmLmxvb3ApCisgICAgICAgIHNlcnZlci5zdGFydCgpCisgICAgICAgIG1zZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGNsaWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIHNlcnZlci5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIGIiaGVsbG8gd29ybGQhXG4iKQorCisgICAgICAgICMgdGVzdCB0aGUgc2VydmVyIHZhcmlhbnQgd2l0aCBhIGNhbGxiYWNrIGFzIGNsaWVudCBoYW5kbGVyCisgICAgICAgIHNlcnZlciA9IE15U2VydmVyKHNlbGYubG9vcCkKKyAgICAgICAgc2VydmVyLnN0YXJ0X2NhbGxiYWNrKCkKKyAgICAgICAgbXNnID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soY2xpZW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgc2VydmVyLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgYiJoZWxsbyB3b3JsZCFcbiIpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3N1YnByb2Nlc3MucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdWJwcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmYwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdWJwcm9jZXNzLnB5CkBAIC0wLDAgKzEsMTc2IEBACitmcm9tIGFzeW5jaW8gaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBhc3luY2lvCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgZnJvbSBhc3luY2lvIGltcG9ydCB1bml4X2V2ZW50cworCisjIFByb2dyYW0gYmxvY2tpbmcKK1BST0dSQU1fQkxPQ0tFRCA9IFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ2ltcG9ydCB0aW1lOyB0aW1lLnNsZWVwKDM2MDApJ10KKworIyBQcm9ncmFtIHNsZWVwaW5nIGR1cmluZyAxIHNlY29uZAorUFJPR1JBTV9TTEVFUF8xU0VDID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAnaW1wb3J0IHRpbWU7IHRpbWUuc2xlZXAoMSknXQorCisjIFByb2dyYW0gY29weWluZyBpbnB1dCB0byBvdXRwdXQKK1BST0dSQU1fQ0FUID0gWworICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICc7Jy5qb2luKCgnaW1wb3J0IHN5cycsCisgICAgICAgICAgICAgICdkYXRhID0gc3lzLnN0ZGluLmJ1ZmZlci5yZWFkKCknLAorICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5idWZmZXIud3JpdGUoZGF0YSknKSldCisKK2NsYXNzIFN1YnByb2Nlc3NNaXhpbjoKKyAgICBkZWYgdGVzdF9zdGRpbl9zdGRvdXQoc2VsZik6CisgICAgICAgIGFyZ3MgPSBQUk9HUkFNX0NBVAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcnVuKGRhdGEpOgorICAgICAgICAgICAgcHJvYyA9IHlpZWxkIGZyb20gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgICMgZmVlZCBkYXRhCisgICAgICAgICAgICBwcm9jLnN0ZGluLndyaXRlKGRhdGEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHByb2Muc3RkaW4uZHJhaW4oKQorICAgICAgICAgICAgcHJvYy5zdGRpbi5jbG9zZSgpCisKKyAgICAgICAgICAgICMgZ2V0IG91dHB1dCBhbmQgZXhpdGNvZGUKKyAgICAgICAgICAgIGRhdGEgPSB5aWVsZCBmcm9tIHByb2Muc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgZXhpdGNvZGUgPSB5aWVsZCBmcm9tIHByb2Mud2FpdCgpCisgICAgICAgICAgICByZXR1cm4gKGV4aXRjb2RlLCBkYXRhKQorCisgICAgICAgIHRhc2sgPSBydW4oYidzb21lIGRhdGEnKQorICAgICAgICB0YXNrID0gYXN5bmNpby53YWl0X2Zvcih0YXNrLCAxMC4wLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXhpdGNvZGUsIHN0ZG91dCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0Y29kZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGInc29tZSBkYXRhJykKKworICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlKHNlbGYpOgorICAgICAgICBhcmdzID0gUFJPR1JBTV9DQVQKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJ1bihkYXRhKToKKyAgICAgICAgICAgIHByb2MgPSB5aWVsZCBmcm9tIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSB5aWVsZCBmcm9tIHByb2MuY29tbXVuaWNhdGUoZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBwcm9jLnJldHVybmNvZGUsIHN0ZG91dAorCisgICAgICAgIHRhc2sgPSBydW4oYidzb21lIGRhdGEnKQorICAgICAgICB0YXNrID0gYXN5bmNpby53YWl0X2Zvcih0YXNrLCAxMC4wLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXhpdGNvZGUsIHN0ZG91dCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0Y29kZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGInc29tZSBkYXRhJykKKworICAgIGRlZiB0ZXN0X3NoZWxsKHNlbGYpOgorICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsKCdleGl0IDcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwcm9jID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjcmVhdGUpCisgICAgICAgIGV4aXRjb2RlID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm9jLndhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0Y29kZSwgNykKKworICAgIGRlZiB0ZXN0X3N0YXJ0X25ld19zZXNzaW9uKHNlbGYpOgorICAgICAgICAjIHN0YXJ0IHRoZSBuZXcgcHJvY2VzcyBpbiBhIG5ldyBzZXNzaW9uCisgICAgICAgIGNyZWF0ZSA9IGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3Nfc2hlbGwoJ2V4aXQgOCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfbmV3X3Nlc3Npb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJvYyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY3JlYXRlKQorICAgICAgICBleGl0Y29kZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDgpCisKKyAgICBkZWYgdGVzdF9raWxsKHNlbGYpOgorICAgICAgICBhcmdzID0gUFJPR1JBTV9CTE9DS0VECisgICAgICAgIGNyZWF0ZSA9IGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygqYXJncywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHByb2MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNyZWF0ZSkKKyAgICAgICAgcHJvYy5raWxsKCkKKyAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy53YWl0KCkpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJldHVybmNvZGUsIGludCkKKyAgICAgICAgICAgICMgZXhwZWN0IDEgYnV0IHNvbWV0aW1lcyBnZXQgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtc2lnbmFsLlNJR0tJTEwsIHJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF90ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGFyZ3MgPSBQUk9HUkFNX0JMT0NLRUQKKyAgICAgICAgY3JlYXRlID0gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjKCphcmdzLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJvYyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY3JlYXRlKQorICAgICAgICBwcm9jLnRlcm1pbmF0ZSgpCisgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb2Mud2FpdCgpKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXR1cm5jb2RlLCBpbnQpCisgICAgICAgICAgICAjIGV4cGVjdCAxIGJ1dCBzb21ldGltZXMgZ2V0IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdURVJNLCByZXR1cm5jb2RlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywgIkRvbid0IGhhdmUgU0lHSFVQIikKKyAgICBkZWYgdGVzdF9zZW5kX3NpZ25hbChzZWxmKToKKyAgICAgICAgYXJncyA9IFBST0dSQU1fQkxPQ0tFRAorICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoKmFyZ3MsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwcm9jID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjcmVhdGUpCisgICAgICAgIHByb2Muc2VuZF9zaWduYWwoc2lnbmFsLlNJR0hVUCkKKyAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdIVVAsIHJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9icm9rZW5fcGlwZShzZWxmKToKKyAgICAgICAgbGFyZ2VfZGF0YSA9IGIneCcgKiBzdXBwb3J0LlBJUEVfTUFYX1NJWkUKKworICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQUk9HUkFNX1NMRUVQXzFTRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHByb2MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNyZWF0ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhCcm9rZW5QaXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm9jLmNvbW11bmljYXRlKGxhcmdlX2RhdGEpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb2Mud2FpdCgpKQorCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgICMgVW5peAorICAgIGNsYXNzIFN1YnByb2Nlc3NXYXRjaGVyTWl4aW4oU3VicHJvY2Vzc01peGluKToKKyAgICAgICAgV2F0Y2hlciA9IE5vbmUKKworICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICBwb2xpY3kgPSBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpCisgICAgICAgICAgICBzZWxmLmxvb3AgPSBwb2xpY3kubmV3X2V2ZW50X2xvb3AoKQorCisgICAgICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBldmVudCBsb29wIGlzIHBhc3NlZCBleHBsaWNpdGx5IGluIHRoZSBjb2RlCisgICAgICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgICAgICAgICAgd2F0Y2hlciA9IHNlbGYuV2F0Y2hlcigpCisgICAgICAgICAgICB3YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgICAgIHBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQorCisgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKyAgICAgICAgICAgIHBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlcihOb25lKQorICAgICAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgY2xhc3MgU3VicHJvY2Vzc1NhZmVXYXRjaGVyVGVzdHMoU3VicHJvY2Vzc1dhdGNoZXJNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBXYXRjaGVyID0gdW5peF9ldmVudHMuU2FmZUNoaWxkV2F0Y2hlcgorCisgICAgY2xhc3MgU3VicHJvY2Vzc0Zhc3RXYXRjaGVyVGVzdHMoU3VicHJvY2Vzc1dhdGNoZXJNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBXYXRjaGVyID0gdW5peF9ldmVudHMuRmFzdENoaWxkV2F0Y2hlcgorZWxzZToKKyAgICAjIFdpbmRvd3MKKyAgICBjbGFzcyBTdWJwcm9jZXNzUHJvYWN0b3JUZXN0cyhTdWJwcm9jZXNzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgcG9saWN5ID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKQorICAgICAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5Qcm9hY3RvckV2ZW50TG9vcCgpCisKKyAgICAgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGV2ZW50IGxvb3AgaXMgcGFzc2VkIGV4cGxpY2l0bHkgaW4gdGhlIGNvZGUKKyAgICAgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdGFza3MucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90YXNrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjRkZDJlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdGFza3MucHkKQEAgLTAsMCArMSwxNjUxIEBACisiIiJUZXN0cyBmb3IgdGFza3MucHkuIiIiCisKK2ltcG9ydCBnYworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitAYXN5bmNpby5jb3JvdXRpbmUKK2RlZiBjb3JvdXRpbmVfZnVuY3Rpb24oKToKKyAgICBwYXNzCisKKworY2xhc3MgRHVtbXk6CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnRHVtbXkoKScKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBUYXNrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0X3Rhc2tfY2xhc3Moc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhub3RtdWNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnb2snKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2xvb3AsIHNlbGYubG9vcCkKKworICAgICAgICBsb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sobm90bXVjaCgpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgbG9vcCkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9hc3luY19jb3JvdXRpbmUoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKyAgICAgICAgdCA9IGFzeW5jaW8uYXN5bmMobm90bXVjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZXN1bHQoKSwgJ29rJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBzZWxmLmxvb3ApCisKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICB0ID0gYXN5bmNpby5hc3luYyhub3RtdWNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBsb29wKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2FzeW5jX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZl9vcmlnID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZfb3JpZy5zZXRfcmVzdWx0KCdrbycpCisKKyAgICAgICAgZiA9IGFzeW5jaW8uYXN5bmMoZl9vcmlnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCAna28nKQorICAgICAgICBzZWxmLmFzc2VydElzKGYsIGZfb3JpZykKKworICAgICAgICBsb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKGZfb3JpZywgbG9vcD1sb29wKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKGZfb3JpZywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgZl9vcmlnKQorCisgICAgZGVmIHRlc3RfYXN5bmNfdGFzayhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICByZXR1cm4gJ29rJworICAgICAgICB0X29yaWcgPSBhc3luY2lvLlRhc2sobm90bXVjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdCA9IGFzeW5jaW8uYXN5bmModF9vcmlnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnb2snKQorICAgICAgICBzZWxmLmFzc2VydElzKHQsIHRfb3JpZykKKworICAgICAgICBsb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHQgPSBhc3luY2lvLmFzeW5jKHRfb3JpZywgbG9vcD1sb29wKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgICAgIHQgPSBhc3luY2lvLmFzeW5jKHRfb3JpZywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModCwgdF9vcmlnKQorCisgICAgZGVmIHRlc3RfYXN5bmNfbmVpdGhlcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgYXN5bmNpby5hc3luYygnb2snKQorCisgICAgZGVmIHRlc3RfdGFza19yZXByKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKyAgICAgICAgICAgIHJldHVybiAnYWJjJworCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sobm90bXVjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdC5hZGRfZG9uZV9jYWxsYmFjayhEdW1teSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksICdUYXNrKDxub3RtdWNoPik8UEVORElORywgW0R1bW15KCldPicpCisgICAgICAgIHQuY2FuY2VsKCkgICMgRG9lcyBub3QgdGFrZSBpbW1lZGlhdGUgZWZmZWN0IQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksICdUYXNrKDxub3RtdWNoPik8Q0FOQ0VMTElORywgW0R1bW15KCldPicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwgJ1Rhc2soPG5vdG11Y2g+KTxDQU5DRUxMRUQ+JykKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhub3RtdWNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwgIlRhc2soPG5vdG11Y2g+KTxyZXN1bHQ9J2FiYyc+IikKKworICAgIGRlZiB0ZXN0X3Rhc2tfcmVwcl9jdXN0b20oc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFQoYXN5bmNpby5GdXR1cmUpOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnVFtdJworCisgICAgICAgIGNsYXNzIE15VGFzayhhc3luY2lvLlRhc2ssIFQpOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fcmVwcl9fKCkKKworICAgICAgICBnZW4gPSBjb3JvKCkKKyAgICAgICAgdCA9IE15VGFzayhnZW4sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksICdUW10oPGNvcm8+KScpCisgICAgICAgIGdlbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF90YXNrX2Jhc2ljcyhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgYSA9IHlpZWxkIGZyb20gaW5uZXIxKCkKKyAgICAgICAgICAgIGIgPSB5aWVsZCBmcm9tIGlubmVyMigpCisgICAgICAgICAgICByZXR1cm4gYStiCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcjEoKToKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIyKCk6CisgICAgICAgICAgICByZXR1cm4gMTAwMAorCisgICAgICAgIHQgPSBvdXRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KSwgMTA0MikKKworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEwLjAsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sodGFzaygpLCBsb29wPWxvb3ApCisgICAgICAgIGxvb3AuY2FsbF9zb29uKHQuY2FuY2VsKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3lpZWxkKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkgICMgc3RhcnQgY29ybworICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXN5bmNpby5DYW5jZWxsZWRFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX2lubmVyX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICByZXR1cm4gMTIKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKSAgIyBzdGFydCB0YXNrCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX2JvdGhfdGFza19hbmRfaW5uZXJfZnV0dXJlKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sodGFzaygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICB0LmNhbmNlbCgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF90YXNrX2NhdGNoaW5nKHNlbGYpOgorICAgICAgICBmdXQxID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dDIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0MQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0MgorICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQxKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0MS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDIpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQyLmNhbmNlbGxlZCgpKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3Rhc2tfaWdub3Jpbmcoc2VsZik6CisgICAgICAgIGZ1dDEgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0MiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQzID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDIKKyAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gZnV0MworICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sodGFzaygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fZnV0X3dhaXRlciwgZnV0MSkgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIGZ1dDEuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQyKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0Mi5jYW5jZWxsZWQoKSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fZnV0X3dhaXRlciwgZnV0MykgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIGZ1dDMuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0My5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX2N1cnJlbnRfdGFzayhzZWxmKToKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Ll9tdXN0X2NhbmNlbCkgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgICAgICAjIFRoZSBzbGVlcCBzaG91bGQgYmUgY2FuY2VsbGVkIGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEwMCwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhc3luY2lvLkNhbmNlbGxlZEVycm9yLCBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuX211c3RfY2FuY2VsKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3Rfc3RvcF93aGlsZV9ydW5faW5fY29tcGxldGUoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjMsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHggPSAwCisgICAgICAgIHdhaXRlcnMgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgbm9ubG9jYWwgeAorICAgICAgICAgICAgd2hpbGUgeCA8IDEwOgorICAgICAgICAgICAgICAgIHdhaXRlcnMuYXBwZW5kKGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApKQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyc1stMV0KKyAgICAgICAgICAgICAgICB4ICs9IDEKKyAgICAgICAgICAgICAgICBpZiB4ID09IDI6CisgICAgICAgICAgICAgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4zLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIGNsb3NlIGdlbmVyYXRvcnMKKyAgICAgICAgZm9yIHcgaW4gd2FpdGVyczoKKyAgICAgICAgICAgIHcuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3Ioc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGZvb19ydW5uaW5nID0gTm9uZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBub25sb2NhbCBmb29fcnVubmluZworICAgICAgICAgICAgZm9vX3J1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMiwgbG9vcD1sb29wKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmb29fcnVubmluZyA9IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICAgICAgZnV0ID0gYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlRpbWVvdXRFcnJvcik6CisgICAgICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXRfZm9yKGZ1dCwgMC4xLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgIyBpdCBzaG91bGQgaGF2ZSBiZWVuIGNhbmNlbGxlZCBkdWUgdG8gdGhlIHRpbWVvdXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvb19ydW5uaW5nLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX2Jsb2NraW5nKHNlbGYpOgorICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgcmV0dXJuICdkb25lJworCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdF9mb3IoY29ybygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJ2RvbmUnKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3Jfd2l0aF9nbG9iYWxfbG9vcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4yLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChsb29wKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdXQgPSBhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5UaW1lb3V0RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdF9mb3IoZnV0LCAwLjAxKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjE1CisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjE1LCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChbYiwgYV0sIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9uZSwgc2V0KFthLCBiXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldCgpKQorICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBEb2luZyBpdCBhZ2FpbiBzaG91bGQgdGFrZSBubyB0aW1lIGFuZCBleGVyY2lzZSBhIGRpZmZlcmVudCBwYXRoLgorICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3dhaXRfd2l0aF9nbG9iYWxfbG9vcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDE1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMTUKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjAxLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjAxNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSBhc3luY2lvLndhaXQoW2IsIGFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2EsIGJdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgIGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisKKyAgICBkZWYgdGVzdF93YWl0X2R1cGxpY2F0ZV9jb3JvdXRpbmVzKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8ocyk6CisgICAgICAgICAgICByZXR1cm4gcworICAgICAgICBjID0gY29ybygndGVzdCcpCisKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzaygKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChbYywgYywgY29ybygnc3BhbScpXSwgbG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGYucmVzdWx0KCkgZm9yIGYgaW4gZG9uZSksIHsndGVzdCcsICdzcGFtJ30pCisKKyAgICBkZWYgdGVzdF93YWl0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgYXN5bmNpby53YWl0KHNldCgpLCBsb29wPXNlbGYubG9vcCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgYXN5bmNpby53YWl0KFthc3luY2lvLnNsZWVwKDEwLjAsIGxvb3A9c2VsZi5sb29wKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3doZW49LTEsIGxvb3A9c2VsZi5sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZmlyc3RfY29tcGxldGVkKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMTAuMCwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICBiID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2soCisgICAgICAgICAgICBhc3luY2lvLndhaXQoW2IsIGFdLCByZXR1cm5fd2hlbj1hc3luY2lvLkZJUlNUX0NPTVBMRVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApLAorICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtifSwgZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YX0sIHBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfcmVhbGx5X2RvbmUoc2VsZik6CisgICAgICAgICMgdGhlcmUgaXMgcG9zc2liaWxpdHkgdGhhdCBzb21lIHRhc2tzIGluIHRoZSBwZW5kaW5nIGxpc3QKKyAgICAgICAgIyBiZWNhbWUgZG9uZSBidXQgdGhlaXIgY2FsbGJhY2tzIGhhdmVuJ3QgYWxsIGJlZW4gY2FsbGVkIHlldAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzEoKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvMigpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhjb3JvMSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uVGFzayhjb3JvMigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzaygKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChbYiwgYV0sIHJldHVybl93aGVuPWFzeW5jaW8uRklSU1RfQ09NUExFVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2EsIGJ9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZmlyc3RfZXhjZXB0aW9uKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgIyBmaXJzdF9leGNlcHRpb24sIHRhc2sgYWxyZWFkeSBoYXMgZXhjZXB0aW9uCisgICAgICAgIGEgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgxMC4wLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBleGMoKToKKyAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCdlcnInKQorCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soZXhjKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzaygKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChbYiwgYV0sIHJldHVybl93aGVuPWFzeW5jaW8uRklSU1RfRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCksCisgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2J9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthfSwgcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2ZpcnN0X2V4Y2VwdGlvbl9pbl93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgICMgZmlyc3RfZXhjZXB0aW9uLCBleGNlcHRpb24gZHVyaW5nIHdhaXRpbmcKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDEwLjAsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGV4YygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCdlcnInKQorCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soZXhjKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8ud2FpdChbYiwgYV0sIHJldHVybl93aGVuPWFzeW5jaW8uRklSU1RfRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCkKKworICAgICAgICBkb25lLCBwZW5kaW5nID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7Yn0sIGRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2F9LCBwZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfd2l0aF9leGNlcHRpb24oc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjE1CisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4xNSwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ3JlYWxseScpCisKKyAgICAgICAgYiA9IGFzeW5jaW8uVGFzayhzbGVlcGVyKCksIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0KFtiLCBhXSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZG9uZSksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldCgpKQorICAgICAgICAgICAgZXJyb3JzID0gc2V0KGYgZm9yIGYgaW4gZG9uZSBpZiBmLmV4Y2VwdGlvbigpIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyb3JzKSwgMSkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF93aXRoX3RpbWVvdXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjExLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICBiID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSBhc3luY2lvLndhaXQoW2IsIGFdLCB0aW1lb3V0PTAuMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2FdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KFtiXSkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfY29uY3VycmVudF9jb21wbGV0ZShzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICBiID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChbYiwgYV0sIHRpbWVvdXQ9MC4xLCBsb29wPWxvb3ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9uZSwgc2V0KFthXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KFtiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgMAorICAgICAgICAgICAgeWllbGQgMAorICAgICAgICAgICAgeWllbGQgMC4wMQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisgICAgICAgIGNvbXBsZXRlZCA9IHNldCgpCisgICAgICAgIHRpbWVfc2hpZnRlZCA9IEZhbHNlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKGR0LCB4KToKKyAgICAgICAgICAgIG5vbmxvY2FsIHRpbWVfc2hpZnRlZAorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKGR0LCBsb29wPWxvb3ApCisgICAgICAgICAgICBjb21wbGV0ZWQuYWRkKHgpCisgICAgICAgICAgICBpZiBub3QgdGltZV9zaGlmdGVkIGFuZCAnYScgaW4gY29tcGxldGVkIGFuZCAnYicgaW4gY29tcGxldGVkOgorICAgICAgICAgICAgICAgIHRpbWVfc2hpZnRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgwLjE0KQorICAgICAgICAgICAgcmV0dXJuIHgKKworICAgICAgICBhID0gc2xlZXBlcigwLjAxLCAnYScpCisgICAgICAgIGIgPSBzbGVlcGVyKDAuMDEsICdiJykKKyAgICAgICAgYyA9IHNsZWVwZXIoMC4xNSwgJ2MnKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB2YWx1ZXMgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gYXN5bmNpby5hc19jb21wbGV0ZWQoW2IsIGMsIGFdLCBsb29wPWxvb3ApOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoKHlpZWxkIGZyb20gZikpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVzCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIGluIHJlc1s6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYicgaW4gcmVzWzoyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMl0sICdjJykKKworICAgICAgICAjIERvaW5nIGl0IGFnYWluIHNob3VsZCB0YWtlIG5vIHRpbWUgYW5kIGV4ZXJjaXNlIGEgZGlmZmVyZW50IHBhdGguCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF93aXRoX3RpbWVvdXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IGFzeW5jaW8uc2xlZXAoMC4xLCAnYScsIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uc2xlZXAoMC4xNSwgJ2InLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgICAgICBmb3IgZiBpbiBhc3luY2lvLmFzX2NvbXBsZXRlZChbYSwgYl0sIHRpbWVvdXQ9MC4xMiwgbG9vcD1sb29wKToKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZXM6CisgICAgICAgICAgICAgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDAuMDIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB2ID0geWllbGQgZnJvbSBmCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoKDEsIHYpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLlRpbWVvdXRFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoKDIsIGV4YykpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVzCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAyLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzBdLCAoMSwgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMV1bMF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXNbMV1bMV0sIGFzeW5jaW8uVGltZW91dEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTIsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF93aXRoX3VudXNlZF90aW1lb3V0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gYXN5bmNpby5zbGVlcCgwLjAxLCAnYScsIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZm9yIGYgaW4gYXN5bmNpby5hc19jb21wbGV0ZWQoW2FdLCB0aW1lb3V0PTEsIGxvb3A9bG9vcCk6CisgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGZyb20gZgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgJ2EnKQorCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF9yZXZlcnNlX3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgMAorICAgICAgICAgICAgeWllbGQgMC4wNQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IGFzeW5jaW8uc2xlZXAoMC4wNSwgJ2EnLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLnNsZWVwKDAuMTAsICdiJywgbG9vcD1sb29wKQorICAgICAgICBmcyA9IHthLCBifQorICAgICAgICBmdXRzID0gbGlzdChhc3luY2lvLmFzX2NvbXBsZXRlZChmcywgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZnV0cyksIDIpCisKKyAgICAgICAgeCA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHNbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIGxvb3AudGltZSgpKQorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgwLjA1KQorICAgICAgICB5ID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0c1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMCwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfY29uY3VycmVudChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjA1CisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gYXN5bmNpby5zbGVlcCgwLjA1LCAnYScsIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uc2xlZXAoMC4wNSwgJ2InLCBsb29wPWxvb3ApCisgICAgICAgIGZzID0ge2EsIGJ9CisgICAgICAgIGZ1dHMgPSBsaXN0KGFzeW5jaW8uYXNfY29tcGxldGVkKGZzLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmdXRzKSwgMikKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby53YWl0KGZ1dHMsIGxvb3A9bG9vcCkKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHdhaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZi5yZXN1bHQoKSBmb3IgZiBpbiBkb25lKSwgeydhJywgJ2InfSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF9kdXBsaWNhdGVfY29yb3V0aW5lcyhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKHMpOgorICAgICAgICAgICAgcmV0dXJuIHMKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJ1bm5lcigpOgorICAgICAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgICAgIGMgPSBjb3JvKCdoYW0nKQorICAgICAgICAgICAgZm9yIGYgaW4gYXN5bmNpby5hc19jb21wbGV0ZWQoW2MsIGMsIGNvcm8oJ3NwYW0nKV0sIGxvb3A9c2VsZi5sb29wKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCh5aWVsZCBmcm9tIGYpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uVGFzayhydW5uZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICByZXN1bHQgPSBmdXQucmVzdWx0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocmVzdWx0KSwgeydoYW0nLCAnc3BhbSd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCAyKQorCisgICAgZGVmIHRlc3Rfc2xlZXAoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4wNQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjA1CisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwZXIoZHQsIGFyZyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoZHQvMiwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKGR0LzIsIGFyZywgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2soc2xlZXBlcigwLjEsICd5ZWFoJyksIGxvb3A9bG9vcCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICd5ZWFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfc2xlZXBfY2FuY2VsKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDEwLjAsICd5ZWFoJywgbG9vcD1sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgaGFuZGxlID0gTm9uZQorICAgICAgICBvcmlnX2NhbGxfbGF0ZXIgPSBsb29wLmNhbGxfbGF0ZXIKKworICAgICAgICBkZWYgY2FsbF9sYXRlcihzZWxmLCBkZWxheSwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGhhbmRsZQorICAgICAgICAgICAgaGFuZGxlID0gb3JpZ19jYWxsX2xhdGVyKHNlbGYsIGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpCisgICAgICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICAgICAgbG9vcC5jYWxsX2xhdGVyID0gY2FsbF9sYXRlcgorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYW5kbGUuX2NhbmNlbGxlZCkKKworICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkobG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhbmRsZS5fY2FuY2VsbGVkKQorCisgICAgZGVmIHRlc3RfdGFza19jYW5jZWxfc2xlZXBpbmdfdGFzayhzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoNTAwMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgc2xlZXBmdXQgPSBOb25lCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcChkdCk6CisgICAgICAgICAgICBub25sb2NhbCBzbGVlcGZ1dAorICAgICAgICAgICAgc2xlZXBmdXQgPSBhc3luY2lvLnNsZWVwKGR0LCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNsZWVwZnV0CisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBkb2l0KCk6CisgICAgICAgICAgICBzbGVlcGVyID0gYXN5bmNpby5UYXNrKHNsZWVwKDUwMDApLCBsb29wPWxvb3ApCisgICAgICAgICAgICBsb29wLmNhbGxfbGF0ZXIoMC4xLCBzbGVlcGVyLmNhbmNlbCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNsZWVwZXIKKyAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiAnY2FuY2VsbGVkJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NsZXB0IGluJworCisgICAgICAgIGRvZXIgPSBkb2l0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShkb2VyKSwgJ2NhbmNlbGxlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X3Rhc2tfY2FuY2VsX3dhaXRlcl9mdXR1cmUoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKworICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKGNvcm8oKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHRhc2suX2Z1dF93YWl0ZXIsIGZ1dCkKKworICAgICAgICB0YXNrLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRhc2suX2Z1dF93YWl0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9zdGVwX2luX2NvbXBsZXRlZF90YXNrKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHJldHVybiAna28nCisKKyAgICAgICAgZ2VuID0gbm90bXVjaCgpCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2soZ2VuLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzay5zZXRfcmVzdWx0KCdvaycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRhc2suX3N0ZXApCisgICAgICAgIGdlbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zdGVwX3Jlc3VsdChzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICB5aWVsZCBOb25lCisgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICByZXR1cm4gJ2tvJworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBub3RtdWNoKCkpCisKKyAgICBkZWYgdGVzdF9zdGVwX3Jlc3VsdF9mdXR1cmUoc2VsZik6CisgICAgICAgICMgSWYgY29yb3V0aW5lIHJldHVybnMgZnV0dXJlLCB0YXNrIHdhaXRzIG9uIHRoaXMgZnV0dXJlLgorCisgICAgICAgIGNsYXNzIEZ1dChhc3luY2lvLkZ1dHVyZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAgICAgc2VsZi5jYl9hZGRlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2RzKQorCisgICAgICAgICAgICBkZWYgYWRkX2RvbmVfY2FsbGJhY2soc2VsZiwgZm4pOgorICAgICAgICAgICAgICAgIHNlbGYuY2JfYWRkZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgc3VwZXIoKS5hZGRfZG9uZV9jYWxsYmFjayhmbikKKworICAgICAgICBmdXQgPSBGdXQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IE5vbmUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdhaXRfZm9yX2Z1dHVyZSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcmVzdWx0CisgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCBmcm9tIGZ1dAorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sod2FpdF9mb3JfZnV0dXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYl9hZGRlZCkKKworICAgICAgICByZXMgPSBvYmplY3QoKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdChyZXMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlcywgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9zdGVwX3dpdGhfYmFzZWV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdXRjaCgpOgorICAgICAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbigpCisKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayhub3RtdXRjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQmFzZUV4Y2VwdGlvbiwgdGFzay5fc3RlcCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodGFzay5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0YXNrLmV4Y2VwdGlvbigpLCBCYXNlRXhjZXB0aW9uKQorCisgICAgZGVmIHRlc3RfYmFzZWV4Y2VwdGlvbl9kdXJpbmdfY2FuY2VsKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMTAsIGxvb3A9bG9vcCkKKworICAgICAgICBiYXNlX2V4YyA9IEJhc2VFeGNlcHRpb24oKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXV0Y2goKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNsZWVwZXIoKQorICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgYmFzZV9leGMKKworICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKG5vdG11dGNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgICAgIHRhc2suY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrLmRvbmUoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5LCBsb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKHRhc2suZXhjZXB0aW9uKCksIGJhc2VfZXhjKQorCisgICAgZGVmIHRlc3RfaXNjb3JvdXRpbmVmdW5jdGlvbihzZWxmKToKKyAgICAgICAgZGVmIGZuKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3luY2lvLmlzY29yb3V0aW5lZnVuY3Rpb24oZm4pKQorCisgICAgICAgIGRlZiBmbjEoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN5bmNpby5pc2Nvcm91dGluZWZ1bmN0aW9uKGZuMSkpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmbjIoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLmlzY29yb3V0aW5lZnVuY3Rpb24oZm4yKSkKKworICAgIGRlZiB0ZXN0X3lpZWxkX3ZzX3lpZWxkX2Zyb20oc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdF9mb3JfZnV0dXJlKCk6CisgICAgICAgICAgICB5aWVsZCBmdXQKKworICAgICAgICB0YXNrID0gd2FpdF9mb3JfZnV0dXJlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKworICAgIGRlZiB0ZXN0X3lpZWxkX3ZzX3lpZWxkX2Zyb21fZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB3YWl0X2Zvcl9mdXR1cmUoKToKKyAgICAgICAgICAgIGdlbiA9IGNvcm8oKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGdlbgorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBnZW4uY2xvc2UoKQorCisgICAgICAgIHRhc2sgPSB3YWl0X2Zvcl9mdXR1cmUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHRhc2spCisKKyAgICBkZWYgdGVzdF9jb3JvdXRpbmVfbm9uX2dlbl9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmdW5jKCk6CisgICAgICAgICAgICByZXR1cm4gJ3Rlc3QnCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uaXNjb3JvdXRpbmVmdW5jdGlvbihmdW5jKSkKKworICAgICAgICBjb3JvID0gZnVuYygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLmlzY29yb3V0aW5lKGNvcm8pKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICd0ZXN0JykKKworICAgIGRlZiB0ZXN0X2Nvcm91dGluZV9ub25fZ2VuX2Z1bmN0aW9uX3JldHVybl9mdXR1cmUoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZnVuYygpOgorICAgICAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoJ3Rlc3QnKQorCisgICAgICAgIHQxID0gYXN5bmNpby5UYXNrKGZ1bmMoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKGNvcm8oKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQyLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfY3VycmVudF90YXNrKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8obG9vcCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5UYXNrLmN1cnJlbnRfdGFzayhsb29wPWxvb3ApIGlzIHRhc2spCisKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayhjb3JvKHNlbGYubG9vcCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1zZWxmLmxvb3ApKQorCisgICAgZGVmIHRlc3RfY3VycmVudF90YXNrX3dpdGhfaW50ZXJsZWF2aW5nX3Rhc2tzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICBmdXQxID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dDIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8xKGxvb3ApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1sb29wKSBpcyB0YXNrMSkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0MQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1sb29wKSBpcyB0YXNrMSkKKyAgICAgICAgICAgIGZ1dDIuc2V0X3Jlc3VsdChUcnVlKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzIobG9vcCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5UYXNrLmN1cnJlbnRfdGFzayhsb29wPWxvb3ApIGlzIHRhc2syKQorICAgICAgICAgICAgZnV0MS5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9bG9vcCkgaXMgdGFzazIpCisKKyAgICAgICAgdGFzazEgPSBhc3luY2lvLlRhc2soY29ybzEoc2VsZi5sb29wKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2syID0gYXN5bmNpby5UYXNrKGNvcm8yKHNlbGYubG9vcCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KCh0YXNrMSwgdGFzazIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1zZWxmLmxvb3ApKQorCisgICAgIyBTb21lIHRob3JvdWdoIHRlc3RzIGZvciBjYW5jZWxsYXRpb24gcHJvcGFnYXRpb24gdGhyb3VnaAorICAgICMgY29yb3V0aW5lcywgdGFza3MgYW5kIHdhaXQoKS4KKworICAgIGRlZiB0ZXN0X3lpZWxkX2Z1dHVyZV9wYXNzZXNfY2FuY2VsKHNlbGYpOgorICAgICAgICAjIENhbmNlbGxpbmcgb3V0ZXIoKSBjYW5jZWxzIGlubmVyKCkgY2FuY2VscyB3YWl0ZXIuCisgICAgICAgIHByb29mID0gMAorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwcm9vZiArPSAxCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdnb3QgcGFzdCBzbGVlcCgpIGluIGlubmVyKCknKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBpbm5lcigpCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwcm9vZiArPSAxMDAgICMgRXhwZWN0IHRoaXMgcGF0aC4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvb2YgKz0gMTAKKworICAgICAgICBmID0gYXN5bmNpby5hc3luYyhvdXRlcigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAxMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0ZXIuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF95aWVsZF93YWl0X2RvZXNfbm90X3NoaWVsZF9jYW5jZWwoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIG1ha2VzIHdhaXQoKSByZXR1cm4gZWFybHksIGxlYXZlcyBpbm5lcigpCisgICAgICAgICMgcnVubmluZy4KKyAgICAgICAgcHJvb2YgPSAwCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICBkLCBwID0geWllbGQgZnJvbSBhc3luY2lvLndhaXQoW2lubmVyKCldLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHByb29mICs9IDEwMAorCisgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGYpCisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAxKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX3Jlc3VsdChzZWxmKToKKyAgICAgICAgaW5uZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSBhc3luY2lvLnNoaWVsZChpbm5lcikKKyAgICAgICAgaW5uZXIuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShvdXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgaW5uZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSBhc3luY2lvLnNoaWVsZChpbm5lcikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcignZXhwZWN0ZWQnKQorICAgICAgICBpbm5lci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3V0ZXIuZXhjZXB0aW9uKCksIGV4YykKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9jYW5jZWwoc2VsZik6CisgICAgICAgIGlubmVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG91dGVyID0gYXN5bmNpby5zaGllbGQoaW5uZXIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBpbm5lci5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dGVyLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX3Nob3J0Y3V0KHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoNDIpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5zaGllbGQoZnV0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX2VmZmVjdChzZWxmKToKKyAgICAgICAgIyBDYW5jZWxsaW5nIG91dGVyKCkgZG9lcyBub3QgYWZmZWN0IGlubmVyKCkuCisgICAgICAgIHByb29mID0gMAorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgICAgIHByb29mICs9IDEKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNoaWVsZChpbm5lcigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHByb29mICs9IDEwMAorCisgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9vZiwgMSkKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9nYXRoZXIoc2VsZik6CisgICAgICAgIGNoaWxkMSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjaGlsZDIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcGFyZW50ID0gYXN5bmNpby5nYXRoZXIoY2hpbGQxLCBjaGlsZDIsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBvdXRlciA9IGFzeW5jaW8uc2hpZWxkKHBhcmVudCwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBvdXRlci5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dGVyLmNhbmNlbGxlZCgpKQorICAgICAgICBjaGlsZDEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBjaGlsZDIuc2V0X3Jlc3VsdCgyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJlbnQucmVzdWx0KCksIFsxLCAyXSkKKworICAgIGRlZiB0ZXN0X2dhdGhlcl9zaGllbGQoc2VsZik6CisgICAgICAgIGNoaWxkMSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjaGlsZDIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgaW5uZXIxID0gYXN5bmNpby5zaGllbGQoY2hpbGQxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgaW5uZXIyID0gYXN5bmNpby5zaGllbGQoY2hpbGQyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcGFyZW50ID0gYXN5bmNpby5nYXRoZXIoaW5uZXIxLCBpbm5lcjIsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgcGFyZW50LmNhbmNlbCgpCisgICAgICAgICMgVGhpcyBzaG91bGQgY2FuY2VsIGlubmVyMSBhbmQgaW5uZXIyIGJ1dCBib3QgY2hpbGQxIGFuZCBjaGlsZDIuCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGFyZW50LmV4Y2VwdGlvbigpLCBhc3luY2lvLkNhbmNlbGxlZEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5uZXIxLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5uZXIyLmNhbmNlbGxlZCgpKQorICAgICAgICBjaGlsZDEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBjaGlsZDIuc2V0X3Jlc3VsdCgyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICMgYXNfY29tcGxldGVkKCkgZXhwZWN0cyBhIGxpc3Qgb2YgZnV0dXJlcywgbm90IGEgZnV0dXJlIGluc3RhbmNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGFzeW5jaW8uYXNfY29tcGxldGVkKGZ1dCwgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICBhc3luY2lvLmFzX2NvbXBsZXRlZChjb3JvdXRpbmVfZnVuY3Rpb24oKSwgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICMgd2FpdCgpIGV4cGVjdHMgYSBsaXN0IG9mIGZ1dHVyZXMsIG5vdCBhIGZ1dHVyZSBpbnN0YW5jZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICBhc3luY2lvLndhaXQoZnV0LCBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChjb3JvdXRpbmVfZnVuY3Rpb24oKSwgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgICMgd2FpdCgpIGV4cGVjdHMgYXQgbGVhc3QgYSBmdXR1cmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChbXSwgbG9vcD1zZWxmLmxvb3ApKQorCitjbGFzcyBHYXRoZXJUZXN0c0Jhc2U6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub25lX2xvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5vdGhlcl9sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYub25lX2xvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLm90aGVyX2xvb3AuY2xvc2UoKQorCisgICAgZGVmIF9ydW5fbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgd2hpbGUgbG9vcC5fcmVhZHk6CisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisKKyAgICBkZWYgX2NoZWNrX3N1Y2Nlc3Moc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBhLCBiLCBjID0gW2FzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKCpzZWxmLndyYXBfZnV0dXJlcyhhLCBiLCBjKSwgKiprd2FyZ3MpCisgICAgICAgIGNiID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGIuc2V0X3Jlc3VsdCgxKQorICAgICAgICBhLnNldF9yZXN1bHQoMikKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYi5jYWxsZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisgICAgICAgIGMuc2V0X3Jlc3VsdCgzKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbMiwgMSwgM10pCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19zdWNjZXNzKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3VjY2VzcyhyZXR1cm5fZXhjZXB0aW9ucz1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3Jlc3VsdF9leGNlcHRpb25fc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfc3VjY2VzcyhyZXR1cm5fZXhjZXB0aW9ucz1UcnVlKQorCisgICAgZGVmIHRlc3Rfb25lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgYSwgYiwgYywgZCwgZSA9IFthc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDUpXQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcigqc2VsZi53cmFwX2Z1dHVyZXMoYSwgYiwgYywgZCwgZSkpCisgICAgICAgIGNiID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGV4YyA9IFplcm9EaXZpc2lvbkVycm9yKCkKKyAgICAgICAgYS5zZXRfcmVzdWx0KDEpCisgICAgICAgIGIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0LmV4Y2VwdGlvbigpLCBleGMpCisgICAgICAgICMgRG9lcyBub3RoaW5nCisgICAgICAgIGMuc2V0X3Jlc3VsdCgzKQorICAgICAgICBkLmNhbmNlbCgpCisgICAgICAgIGUuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoKSkKKyAgICAgICAgZS5leGNlcHRpb24oKQorCisgICAgZGVmIHRlc3RfcmV0dXJuX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQgPSBbYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKSBmb3IgaSBpbiByYW5nZSg0KV0KKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoKnNlbGYud3JhcF9mdXR1cmVzKGEsIGIsIGMsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fZXhjZXB0aW9ucz1UcnVlKQorICAgICAgICBjYiA9IHRlc3RfdXRpbHMuTW9ja0NhbGxiYWNrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBleGMgPSBaZXJvRGl2aXNpb25FcnJvcigpCisgICAgICAgIGV4YzIgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBiLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYy5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgYS5zZXRfcmVzdWx0KDMpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZC5zZXRfZXhjZXB0aW9uKGV4YzIpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbMywgMSwgZXhjLCBleGMyXSkKKworCitjbGFzcyBGdXR1cmVHYXRoZXJUZXN0cyhHYXRoZXJUZXN0c0Jhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB3cmFwX2Z1dHVyZXMoc2VsZiwgKmZ1dHVyZXMpOgorICAgICAgICByZXR1cm4gZnV0dXJlcworCisgICAgZGVmIF9jaGVja19lbXB0eV9zZXF1ZW5jZShzZWxmLCBzZXFfb3JfaXRlcik6CisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AsIE5vbmUpCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKCpzZXFfb3JfaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1dCwgYXN5bmNpby5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdXQucmVzdWx0KCksIFtdKQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcigqc2VxX29yX2l0ZXIsIGxvb3A9c2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vdGhlcl9sb29wKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfZW1wdHlfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKFtdKQorICAgICAgICBzZWxmLl9jaGVja19lbXB0eV9zZXF1ZW5jZSgoKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZW1wdHlfc2VxdWVuY2Uoc2V0KCkpCisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKGl0ZXIoIiIpKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfaGV0ZXJvZ2Vub3VzX2Z1dHVyZXMoc2VsZik6CisgICAgICAgIGZ1dDEgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGZ1dDIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGFzeW5jaW8uZ2F0aGVyKGZ1dDEsIGZ1dDIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBhc3luY2lvLmdhdGhlcihmdXQxLCBsb29wPXNlbGYub3RoZXJfbG9vcCkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2hvbW9nZW5vdXNfZnV0dXJlcyhzZWxmKToKKyAgICAgICAgY2hpbGRyZW4gPSBbYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm90aGVyX2xvb3ApIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcigqY2hpbGRyZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcigqY2hpbGRyZW4sIGxvb3A9c2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKworICAgIGRlZiB0ZXN0X29uZV9jYW5jZWxsYXRpb24oc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQsIGUgPSBbYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKSBmb3IgaSBpbiByYW5nZSg1KV0KKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoYSwgYiwgYywgZCwgZSkKKyAgICAgICAgY2IgPSB0ZXN0X3V0aWxzLk1vY2tDYWxsYmFjaygpCisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhjYikKKyAgICAgICAgYS5zZXRfcmVzdWx0KDEpCisgICAgICAgIGIuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5kb25lKCkpCisgICAgICAgIGNiLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmdXQuZXhjZXB0aW9uKCksIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpCisgICAgICAgICMgRG9lcyBub3RoaW5nCisgICAgICAgIGMuc2V0X3Jlc3VsdCgzKQorICAgICAgICBkLmNhbmNlbCgpCisgICAgICAgIGUuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoKSkKKyAgICAgICAgZS5leGNlcHRpb24oKQorCisgICAgZGVmIHRlc3RfcmVzdWx0X2V4Y2VwdGlvbl9vbmVfY2FuY2VsbGF0aW9uKHNlbGYpOgorICAgICAgICBhLCBiLCBjLCBkLCBlLCBmID0gW2FzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg2KV0KKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoYSwgYiwgYywgZCwgZSwgZiwgcmV0dXJuX2V4Y2VwdGlvbnM9VHJ1ZSkKKyAgICAgICAgY2IgPSB0ZXN0X3V0aWxzLk1vY2tDYWxsYmFjaygpCisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhjYikKKyAgICAgICAgYS5zZXRfcmVzdWx0KDEpCisgICAgICAgIHpkZSA9IFplcm9EaXZpc2lvbkVycm9yKCkKKyAgICAgICAgYi5zZXRfZXhjZXB0aW9uKHpkZSkKKyAgICAgICAgYy5jYW5jZWwoKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisgICAgICAgIGQuc2V0X3Jlc3VsdCgzKQorICAgICAgICBlLmNhbmNlbCgpCisgICAgICAgIHJ0ZSA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihydGUpCisgICAgICAgIHJlcyA9IHNlbGYub25lX2xvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc1syXSwgYXN5bmNpby5DYW5jZWxsZWRFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc1s0XSwgYXN5bmNpby5DYW5jZWxsZWRFcnJvcikKKyAgICAgICAgcmVzWzJdID0gcmVzWzRdID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgWzEsIHpkZSwgTm9uZSwgMywgTm9uZSwgcnRlXSkKKyAgICAgICAgY2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZnV0KQorCisKK2NsYXNzIENvcm91dGluZUdhdGhlclRlc3RzKEdhdGhlclRlc3RzQmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLm9uZV9sb29wKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKE5vbmUpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgZGVmIHdyYXBfZnV0dXJlcyhzZWxmLCAqZnV0dXJlcyk6CisgICAgICAgIGNvcm9zID0gW10KKyAgICAgICAgZm9yIGZ1dCBpbiBmdXR1cmVzOgorICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgY29ybyhmdXQ9ZnV0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gZnV0KQorICAgICAgICAgICAgY29yb3MuYXBwZW5kKGNvcm8oKSkKKyAgICAgICAgcmV0dXJuIGNvcm9zCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9sb29wX3NlbGVjdGlvbihzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICByZXR1cm4gJ2FiYycKKyAgICAgICAgZ2VuMSA9IGNvcm8oKQorICAgICAgICBnZW4yID0gY29ybygpCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKGdlbjEsIGdlbjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm9uZV9sb29wKQorICAgICAgICBnZW4xLmNsb3NlKCkKKyAgICAgICAgZ2VuMi5jbG9zZSgpCisgICAgICAgIGdlbjMgPSBjb3JvKCkKKyAgICAgICAgZ2VuNCA9IGNvcm8oKQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcihnZW4zLCBnZW40LCBsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgZ2VuMy5jbG9zZSgpCisgICAgICAgIGdlbjQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZHVwbGljYXRlX2Nvcm91dGluZXMoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybyhzKToKKyAgICAgICAgICAgIHJldHVybiBzCisgICAgICAgIGMgPSBjb3JvKCdhYmMnKQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcihjLCBjLCBjb3JvKCdkZWYnKSwgYywgbG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1dC5yZXN1bHQoKSwgWydhYmMnLCAnYWJjJywgJ2RlZicsICdhYmMnXSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbGxhdGlvbl9icm9hZGNhc3Qoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGNhbmNlbHMgYWxsIGNoaWxkcmVuLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIGNoaWxkMSA9IGFzeW5jaW8uYXN5bmMoaW5uZXIoKSwgbG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICBjaGlsZDIgPSBhc3luY2lvLmFzeW5jKGlubmVyKCksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgZ2F0aGVyZXIgPSBOb25lCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YsIGdhdGhlcmVyCisgICAgICAgICAgICBnYXRoZXJlciA9IGFzeW5jaW8uZ2F0aGVyKGNoaWxkMSwgY2hpbGQyLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGdhdGhlcmVyCisgICAgICAgICAgICBwcm9vZiArPSAxMDAKKworICAgICAgICBmID0gYXN5bmNpby5hc3luYyhvdXRlcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLm9uZV9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdhdGhlcmVyLmNhbmNlbCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2FpdGVyLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGQxLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGQyLmNhbmNlbGxlZCgpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDApCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fbWFya2luZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciB0aGUgZmlyc3QgbGluZSBtYXJrZWQgIk1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4iCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcihmKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzaG91bGQgbm90IGJlIGlnbm9yZWQnKQorCisgICAgICAgIGEgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLmdhdGhlcihpbm5lcihhKSwgaW5uZXIoYiksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKworICAgICAgICBmID0gYXN5bmNpby5hc3luYyhvdXRlcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgYS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgYi5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYuZXhjZXB0aW9uKCksIFJ1bnRpbWVFcnJvcikKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdHJhbnNwb3J0cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3RyYW5zcG9ydHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE2ZGI4MAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3RyYW5zcG9ydHMucHkKQEAgLTAsMCArMSw2NSBAQAorIiIiVGVzdHMgZm9yIHRyYW5zcG9ydHMucHkuIiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKKworaW1wb3J0IGFzeW5jaW8KKworCitjbGFzcyBUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jdG9yX2V4dHJhX2lzX25vbmUoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IGFzeW5jaW8uVHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2V4dHJhLCB7fSkKKworICAgIGRlZiB0ZXN0X2dldF9leHRyYV9pbmZvKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLlRyYW5zcG9ydCh7J2V4dHJhJzogJ2luZm8nfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW5mbycsIHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnZXh0cmEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCd1bmtub3duJykpCisKKyAgICAgICAgZGVmYXVsdCA9IG9iamVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZGVmYXVsdCwgdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCd1bmtub3duJywgZGVmYXVsdCkpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLlRyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlbGluZXMoW2InbGluZTEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInbGluZTInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYidsaW5lMycpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0cmFuc3BvcnQud3JpdGUuY2FsbF9jb3VudCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlLmFzc2VydF9jYWxsZWRfd2l0aChiJ2xpbmUxbGluZTJsaW5lMycpCisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IGFzeW5jaW8uVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfd3JpdGVfYnVmZmVyX3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC53cml0ZSwgJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQud3JpdGVfZW9mKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuY2FuX3dyaXRlX2VvZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LnBhdXNlX3JlYWRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5yZXN1bWVfcmVhZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuYWJvcnQpCisKKyAgICBkZWYgdGVzdF9kZ3JhbV9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IGFzeW5jaW8uRGF0YWdyYW1UcmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5zZW5kdG8sICdkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmFib3J0KQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc190cmFuc3BvcnRfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLlN1YnByb2Nlc3NUcmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfcGlkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfcGlwZV90cmFuc3BvcnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5zZW5kX3NpZ25hbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LnRlcm1pbmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmtpbGwpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3VuaXhfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdW5peF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2MWVjOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3VuaXhfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMTQ4NyBAQAorIiIiVGVzdHMgZm9yIHVuaXhfZXZlbnRzLnB5LiIiIgorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBnYworaW1wb3J0IGVycm5vCitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IHBwcmludAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ1VOSVggb25seScpCisKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgbG9nCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdW5peF9ldmVudHMKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzaWduYWwsICdTaWduYWxzIGFyZSBub3Qgc3VwcG9ydGVkJykKK2NsYXNzIFNlbGVjdG9yRXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2hlY2tfc2lnbmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLl9jaGVja19zaWduYWwsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AuX2NoZWNrX3NpZ25hbCwgc2lnbmFsLk5TSUcgKyAxKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3NpZ25hbF9ub19oYW5kbGVyKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2hhbmRsZV9zaWduYWwoc2lnbmFsLk5TSUcgKyAxLCAoKSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9zaWduYWxfY2FuY2VsbGVkX2hhbmRsZXIoc2VsZik6CisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZSh1bml0dGVzdC5tb2NrLk1vY2soKSwgKCkpCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnNbc2lnbmFsLk5TSUcgKyAxXSA9IGgKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5faGFuZGxlX3NpZ25hbChzaWduYWwuTlNJRyArIDEsICgpKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLmFzc2VydF9jYWxsZWRfd2l0aChzaWduYWwuTlNJRyArIDEpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9zZXR1cF9lcnJvcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnNpZGVfZWZmZWN0ID0gVmFsdWVFcnJvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBjYikKKyAgICAgICAgaCA9IHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzLmdldChzaWduYWwuU0lHSFVQKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaCwgYXN5bmNpby5IYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5fY2FsbGJhY2ssIGNiKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfaW5zdGFsbF9lcnJvcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIGRlZiBzZXRfd2FrZXVwX2ZkKGZkKToKKyAgICAgICAgICAgIGlmIGZkID09IC0xOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQorICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkID0gc2V0X3dha2V1cF9mZAorCisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUZBVUxUCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgRXJyLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfaW5zdGFsbF9lcnJvcjIoc2VsZiwgbV9sb2dnaW5nLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUlOVkFMCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzW3NpZ25hbC5TSUdIVVBdID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZ2dpbmcuaW5mby5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsX2NvdW50KQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9pbnN0YWxsX2Vycm9yMyhzZWxmLCBtX2xvZ2dpbmcsIG1fc2lnbmFsKToKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgZXJybm8gPSBlcnJuby5FSU5WQUwKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gRXJyCisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZ2dpbmcuaW5mby5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsX2NvdW50KQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NpZ25hbC5zaWduYWwuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKHNpZ25hbC5TSUdIVVAsIG1fc2lnbmFsLlNJR19ERkwpLCBtX3NpZ25hbC5zaWduYWwuY2FsbF9hcmdzWzBdKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfMihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBtX3NpZ25hbC5TSUdJTlQgPSBzaWduYWwuU0lHSU5UCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisgICAgICAgIHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzW3NpZ25hbC5TSUdIVVBdID0gb2JqZWN0KCkKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5yZXNldF9tb2NrKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fc2lnbmFsLnNldF93YWtldXBfZmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zaWduYWwuc2lnbmFsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChzaWduYWwuU0lHSU5ULCBtX3NpZ25hbC5kZWZhdWx0X2ludF9oYW5kbGVyKSwKKyAgICAgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5jYWxsX2FyZ3NbMF0pCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyX2NsZWFudXBfZXJyb3Ioc2VsZiwgbV9sb2dnaW5nLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnNpZGVfZWZmZWN0ID0gVmFsdWVFcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nZ2luZy5pbmZvKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfZXJyb3Ioc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0hVUCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyX2Vycm9yMihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBlcnJubyA9IGVycm5vLkVJTlZBTAorICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0hVUCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQ0hMRCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzKSwgMikKKworICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnJlc2V0X21vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnMpLCAwKQorICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKC0xKQorCisKK2NsYXNzIFVuaXhSZWFkUGlwZVRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLnBpcGUgPSB1bml0dGVzdC5tb2NrLk1vY2soc3BlY19zZXQ9aW8uUmF3SU9CYXNlKQorICAgICAgICBzZWxmLnBpcGUuZmlsZW5vLnJldHVybl92YWx1ZSA9IDUKKworICAgICAgICBmY250bF9wYXRjaGVyID0gdW5pdHRlc3QubW9jay5wYXRjaCgnZmNudGwuZmNudGwnKQorICAgICAgICBmY250bF9wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZjbnRsX3BhdGNoZXIuc3RvcCkKKworICAgICAgICBmc3RhdF9wYXRjaGVyID0gdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuZnN0YXQnKQorICAgICAgICBtX2ZzdGF0ID0gZnN0YXRfcGF0Y2hlci5zdGFydCgpCisgICAgICAgIHN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc3Quc3RfbW9kZSA9IHN0YXQuU19JRklGTworICAgICAgICBtX2ZzdGF0LnJldHVybl92YWx1ZSA9IHN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmc3RhdF9wYXRjaGVyLnN0b3ApCisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sLCBmdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmdXQucmVzdWx0KCkpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHkoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIG1fcmVhZC5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHlfZW9mKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBtX3JlYWQucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHlfYmxvY2tlZChzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgbV9yZWFkLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ubG9nLmxvZ2dlci5leGNlcHRpb24nKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeV9lcnJvcihzZWxmLCBtX3JlYWQsIG1fbG9nZXhjKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIGVyciA9IE9TRXJyb3IoKQorICAgICAgICBtX3JlYWQuc2lkZV9lZmZlY3QgPSBlcnIKKyAgICAgICAgdHIuX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIG1fcmVhZC5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgdHIubWF4X3NpemUpCisgICAgICAgIHRyLl9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBtX2xvZ2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoJ0ZhdGFsIGVycm9yIGZvciAlcycsIHRyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X3BhdXNlX3JlYWRpbmcoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDUsIG0pCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X3Jlc3VtZV9yZWFkaW5nKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIuX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci5fY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2VfYWxyZWFkeV9jbG9zaW5nKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2Nsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fY2xvc2Uoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gb2JqZWN0KCkKKyAgICAgICAgdHIuX2Nsb3NlKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X19jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gTm9uZQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYucHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5wcm90b2NvbCkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYubG9vcCkpKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0X3dpdGhfZXJyKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGVycikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLnByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYucHJvdG9jb2wpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLmxvb3ApKSkKKworCitjbGFzcyBVbml4V3JpdGVQaXBlVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKGFzeW5jaW8uQmFzZVByb3RvY29sKQorICAgICAgICBzZWxmLnBpcGUgPSB1bml0dGVzdC5tb2NrLk1vY2soc3BlY19zZXQ9aW8uUmF3SU9CYXNlKQorICAgICAgICBzZWxmLnBpcGUuZmlsZW5vLnJldHVybl92YWx1ZSA9IDUKKworICAgICAgICBmY250bF9wYXRjaGVyID0gdW5pdHRlc3QubW9jay5wYXRjaCgnZmNudGwuZmNudGwnKQorICAgICAgICBmY250bF9wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZjbnRsX3BhdGNoZXIuc3RvcCkKKworICAgICAgICBmc3RhdF9wYXRjaGVyID0gdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuZnN0YXQnKQorICAgICAgICBtX2ZzdGF0ID0gZnN0YXRfcGF0Y2hlci5zdGFydCgpCisgICAgICAgIHN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc3Quc3RfbW9kZSA9IHN0YXQuU19JRlNPQ0sKKyAgICAgICAgbV9mc3RhdC5yZXR1cm5fdmFsdWUgPSBzdAorICAgICAgICBzZWxmLmFkZENsZWFudXAoZnN0YXRfcGF0Y2hlci5zdG9wKQorCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig1LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLmFzc2VydF9jYWxsZWRfd2l0aCh0cikKKworICAgIGRlZiB0ZXN0X2N0b3Jfd2l0aF93YWl0ZXIoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wsIGZ1dCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1dC5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X2Nhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNhbl93cml0ZV9lb2YoKSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZGF0YShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLndyaXRlKGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX3dyaXRlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbChzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gMgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2IndGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGVfYnVmZmVyKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2IncHJldmlvdXMnXQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fd3JpdGUuY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2IncHJldmlvdXMnLCBiJ2RhdGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGVfYWdhaW4oc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBtX3dyaXRlLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yKCkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2RhdGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLmxvZ2dlcicpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9lcnIoc2VsZiwgbV93cml0ZSwgbV9sb2cpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gT1NFcnJvcigpCisgICAgICAgIG1fd3JpdGUuc2lkZV9lZmZlY3QgPSBlcnIKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgdHIuX2Nvbm5fbG9zdCkKKworICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHRyLl9jb25uX2xvc3QpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgICMgVGhpcyBpcyBhIGJpdCBvdmVyc3BlY2lmaWVkLiA6LSgKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAncGlwZSBjbG9zZWQgYnkgcGVlciBvciBvcy53cml0ZShwaXBlLCBkYXRhKSByYWlzZWQgZXhjZXB0aW9uLicpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX2Nsb3NlKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkgICMgcGlwZSB3YXMgY2xvc2VkIGJ5IHBlZXIKKworICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDEpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMikKKworICAgIGRlZiB0ZXN0X19yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5waXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5X3BhcnRpYWwoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDMKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2EnXSwgdHIuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5X2FnYWluKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcigpCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidkYXRhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9lbXB0eShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gMAorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InZGF0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ubG9nLmxvZ2dlci5leGNlcHRpb24nKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5X2VycihzZWxmLCBtX3dyaXRlLCBtX2xvZ2V4Yyk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnNpZGVfZWZmZWN0ID0gZXJyID0gT1NFcnJvcigpCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgbV9sb2dleGMuYXNzZXJ0X2NhbGxlZF93aXRoKCdGYXRhbCBlcnJvciBmb3IgJXMnLCB0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0ci5fY29ubl9sb3N0KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5X2Nsb3Npbmcoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfYWJvcnQoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDUsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgdHIuYWJvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fd3JpdGUuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X19jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIGVyciA9IE5vbmUKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGVycikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLnByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYucHJvdG9jb2wpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLmxvb3ApKSkKKworICAgIGRlZiB0ZXN0X19jYWxsX2Nvbm5lY3Rpb25fbG9zdF93aXRoX2VycihzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIGVyciA9IE9TRXJyb3IoKQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYucHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5wcm90b2NvbCkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYubG9vcCkpKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci53cml0ZV9lb2YgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRyLndyaXRlX2VvZi5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgZGVmIHRlc3RfY2xvc2VfY2xvc2luZyhzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLndyaXRlX2VvZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIud3JpdGVfZW9mLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX3BlbmRpbmcoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisKK2NsYXNzIEFic3RyYWN0Q2hpbGRXYXRjaGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd2F0Y2hlciA9IGFzeW5jaW8uQWJzdHJhY3RDaGlsZFdhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIsIGYsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLmF0dGFjaF9sb29wLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5fX2VudGVyX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5fX2V4aXRfXywgZiwgZiwgZikKKworCitjbGFzcyBCYXNlQ2hpbGRXYXRjaGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd2F0Y2hlciA9IHVuaXhfZXZlbnRzLkJhc2VDaGlsZFdhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuX2RvX3dhaXRwaWQsIGYpCisKKworV2FpdFBpZE1vY2tzID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiV2FpdFBpZE1vY2tzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ3YWl0cGlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXSUZFWElURUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldJRlNJR05BTEVEIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXRVhJVFNUQVRVUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV1RFUk1TSUciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKworCitjbGFzcyBDaGlsZFdhdGNoZXJUZXN0c01peGluOgorCisgICAgaWdub3JlX3dhcm5pbmdzID0gdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QobG9nLmxvZ2dlciwgIndhcm5pbmciKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi56b21iaWVzID0ge30KKworICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgIHNlbGYubG9vcCwgImFkZF9zaWduYWxfaGFuZGxlciIpIGFzIHNlbGYubV9hZGRfc2lnbmFsX2hhbmRsZXI6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIgPSBzZWxmLmNyZWF0ZV93YXRjaGVyKCkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hdHRhY2hfbG9vcChzZWxmLmxvb3ApCisKKyAgICBkZWYgd2FpdHBpZChzZWxmLCBwaWQsIGZsYWdzKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLndhdGNoZXIsIGFzeW5jaW8uU2FmZUNoaWxkV2F0Y2hlcikgb3IgcGlkICE9IC0xOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHBpZCwgMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgcGlkIDwgMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi56b21iaWVzLnBvcGl0ZW0oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGlkLCBzZWxmLnpvbWJpZXMucG9wKHBpZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBzZWxmLnJ1bm5pbmc6CisgICAgICAgICAgICByZXR1cm4gMCwgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQ2hpbGRQcm9jZXNzRXJyb3IoKQorCisgICAgZGVmIGFkZF96b21iaWUoc2VsZiwgcGlkLCByZXR1cm5jb2RlKToKKyAgICAgICAgc2VsZi56b21iaWVzW3BpZF0gPSByZXR1cm5jb2RlICsgMzI3NjgKKworICAgIGRlZiBXSUZFWElURUQoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgcmV0dXJuIHN0YXR1cyA+PSAzMjc2OAorCisgICAgZGVmIFdJRlNJR05BTEVEKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHJldHVybiAzMjcwMCA8IHN0YXR1cyA8IDMyNzY4CisKKyAgICBkZWYgV0VYSVRTVEFUVVMoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuV0lGRVhJVEVEKHN0YXR1cykpCisgICAgICAgIHJldHVybiBzdGF0dXMgLSAzMjc2OAorCisgICAgZGVmIFdURVJNU0lHKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLldJRlNJR05BTEVEKHN0YXR1cykpCisgICAgICAgIHJldHVybiAzMjc2OCAtIHN0YXR1cworCisgICAgZGVmIHRlc3RfY3JlYXRlX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHNlbGYubV9hZGRfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCwgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCkKKworICAgIGRlZiB3YWl0cGlkX21vY2tzKGZ1bmMpOgorICAgICAgICBkZWYgd3JhcHBlZF9mdW5jKHNlbGYpOgorICAgICAgICAgICAgZGVmIHBhdGNoKHRhcmdldCwgd3JhcHBlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1vY2sucGF0Y2godGFyZ2V0LCB3cmFwcz13cmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYWxsYWJsZT11bml0dGVzdC5tb2NrLk1vY2spCisKKyAgICAgICAgICAgIHdpdGggcGF0Y2goJ29zLldURVJNU0lHJywgc2VsZi5XVEVSTVNJRykgYXMgbV9XVEVSTVNJRywgXAorICAgICAgICAgICAgICAgICBwYXRjaCgnb3MuV0VYSVRTVEFUVVMnLCBzZWxmLldFWElUU1RBVFVTKSBhcyBtX1dFWElUU1RBVFVTLCBcCisgICAgICAgICAgICAgICAgIHBhdGNoKCdvcy5XSUZTSUdOQUxFRCcsIHNlbGYuV0lGU0lHTkFMRUQpIGFzIG1fV0lGU0lHTkFMRUQsIFwKKyAgICAgICAgICAgICAgICAgcGF0Y2goJ29zLldJRkVYSVRFRCcsIHNlbGYuV0lGRVhJVEVEKSBhcyBtX1dJRkVYSVRFRCwgXAorICAgICAgICAgICAgICAgICBwYXRjaCgnb3Mud2FpdHBpZCcsIHNlbGYud2FpdHBpZCkgYXMgbV93YWl0cGlkOgorICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgV2FpdFBpZE1vY2tzKG1fd2FpdHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dJRkVYSVRFRCwgbV9XSUZTSUdOQUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dFWElUU1RBVFVTLCBtX1dURVJNU0lHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAgIHJldHVybiB3cmFwcGVkX2Z1bmMKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZChzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIGNhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0MiwgY2FsbGJhY2ssIDksIDEwLCAxNCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCBpcyBydW5uaW5nCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMgKHJldHVybmNvZGUgMTIpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MiwgMTIpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDIsIDEyLCA5LCAxMCwgMTQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDIsIDEzKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBzaWdjaGxkIGNhbGxlZCBhZ2FpbgorICAgICAgICBzZWxmLnpvbWJpZXMuY2xlYXIoKQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdHdvX2NoaWxkcmVuKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGQgMQorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0MywgY2FsbGJhY2sxLCA3LCA4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHJlZ2lzdGVyIGNoaWxkIDIKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNDQsIGNhbGxiYWNrMiwgMTQ3LCAxOCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZGVuIGFyZSBydW5uaW5nCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIDEgdGVybWluYXRlcyAoc2lnbmFsIDMpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MywgLTMpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0MywgLTMsIDcsIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV1RFUk1TSUcucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMS5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGNoaWxkIDIgc3RpbGwgcnVubmluZworICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCAyIHRlcm1pbmF0ZXMgKGNvZGUgMTA4KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDQsIDEwOCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2syLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDQ0LCAxMDgsIDE0NywgMTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldFWElUU1RBVFVTLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazIucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGRyZW4gYXJlIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDMsIDE0KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDQsIDE1KQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBzaWdjaGxkIGNhbGxlZCBhZ2FpbgorICAgICAgICBzZWxmLnpvbWJpZXMuY2xlYXIoKQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdHdvX2NoaWxkcmVuX3Rlcm1pbmF0aW5nX3RvZ2V0aGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGQgMQorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0NSwgY2FsbGJhY2sxLCAxNywgOCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyByZWdpc3RlciBjaGlsZCAyCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDQ2LCBjYWxsYmFjazIsIDExNDcsIDE4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkZW4gYXJlIHJ1bm5pbmcKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgMSB0ZXJtaW5hdGVzIChjb2RlIDc4KQorICAgICAgICAjIGNoaWxkIDIgdGVybWluYXRlcyAoc2lnbmFsIDUpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NSwgNzgpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NiwgLTUpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0NSwgNzgsIDE3LCA4KQorICAgICAgICBjYWxsYmFjazIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDYsIC01LCAxMTQ3LCAxOCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XVEVSTVNJRy5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XRVhJVFNUQVRVUy5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2sxLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazIucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGRyZW4gYXJlIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDUsIDE0KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDYsIDE1KQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfcmFjZV9jb25kaXRpb24oc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICBjYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMgYmVmb3JlIGJlaW5nIHJlZ2lzdGVyZWQKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MCwgNCkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTAsIGNhbGxiYWNrLCAxLCAxMikKKworICAgICAgICBjYWxsYmFjay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg1MCwgNCwgMSwgMTIpCisgICAgICAgIGNhbGxiYWNrLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTAsIC0xKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfcmVwbGFjZV9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MSwgY2FsbGJhY2sxLCAxOSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyByZWdpc3RlciB0aGUgc2FtZSBjaGlsZCBhZ2FpbgorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MSwgY2FsbGJhY2syLCAyMSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzIChzaWduYWwgOCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUxLCAtOCkKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2syLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDUxLCAtOCwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV1RFUk1TSUcucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMi5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZCBpcyBlZmZlY3RpdmVseSByZWFwZWQKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUxLCAxMykKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3JlbW92ZV9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUyLCBjYWxsYmFjaywgMTk4NCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyB1bnJlZ2lzdGVyIHRoZSBjaGlsZAorICAgICAgICBzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgdGVybWluYXRlcyAoY29kZSA5OSkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUyLCA5OSkKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3Vua25vd25fc3RhdHVzKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUzLCBjYWxsYmFjaywgLTE5KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHRlcm1pbmF0ZSB3aXRoIHVua25vd24gc3RhdHVzCisgICAgICAgIHNlbGYuem9tYmllc1s1M10gPSAxMTc4CisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDUzLCAxMTc4LCAtMTkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBjYWxsYmFjay5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGQgaXMgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MywgMTAxKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3JlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGRyZW4KKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTQsIGNhbGxiYWNrMSwgMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1NSwgY2FsbGJhY2syLCAyKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU2LCBjYWxsYmFjazMsIDMpCisKKyAgICAgICAgIyByZW1vdmUgY2hpbGQgaGFuZGxlciAxCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTQpKQorCisgICAgICAgICMgcmVtb3ZlIGNoaWxkIGhhbmRsZXIgMiBtdWx0aXBsZSB0aW1lcworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi53YXRjaGVyLnJlbW92ZV9jaGlsZF9oYW5kbGVyKDU1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYud2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcig1NSkpCisKKyAgICAgICAgIyBhbGwgY2hpbGRyZW4gdGVybWluYXRlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1NCwgMCkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDU1LCAxKQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTYsIDIpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2szLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDU2LCAyLCAzKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3VuaGFuZGxlZF9leGNlcHRpb24oc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTcsIGNhbGxiYWNrKQorCisgICAgICAgICMgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgIG0ud2FpdHBpZC5zaWRlX2VmZmVjdCA9IFZhbHVlRXJyb3IKKworICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KGxvZy5sb2dnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbiIpIGFzIG1fZXhjZXB0aW9uOgorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2V4Y2VwdGlvbi5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfY2hpbGRfcmVhcGVkX2Vsc2V3aGVyZShzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIGNhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1OCwgY2FsbGJhY2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgdGVybWluYXRlcworICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTgsIDQpCisKKyAgICAgICAgIyB3YWl0cGlkIGlzIGNhbGxlZCBlbHNld2hlcmUKKyAgICAgICAgb3Mud2FpdHBpZCg1OCwgb3MuV05PSEFORykKKworICAgICAgICBtLndhaXRwaWQucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBzaWdjaGxkCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBjYWxsYmFjay5hc3NlcnRfY2FsbGVkKG0ud2FpdHBpZCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLndhdGNoZXIsIGFzeW5jaW8uRmFzdENoaWxkV2F0Y2hlcik6CisgICAgICAgICAgICAjIGhlcmUgdGhlIEZhc3RDaGlsZFdhdGNoZSBlbnRlcnMgYSBkZWFkbG9jaworICAgICAgICAgICAgIyAodGhlcmUgaXMgbm8gd2F5IHRvIHByZXZlbnQgaXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDU4LCAyNTUpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdW5rbm93bl9waWRfZHVyaW5nX3JlZ2lzdHJhdGlvbihzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciB0d28gY2hpbGRyZW4KKyAgICAgICAgY2FsbGJhY2sxID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzLCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICAjIGNoaWxkIDEgdGVybWluYXRlcworICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDU5MSwgNykKKyAgICAgICAgICAgICMgYW4gdW5rbm93biBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgICAgICBzZWxmLmFkZF96b21iaWUoNTkzLCAxNykKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1OTEsIGNhbGxiYWNrMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1OTIsIGNhbGxiYWNrMikKKworICAgICAgICBjYWxsYmFjazEuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTkxLCA3KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NldF9sb29wKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgY2FsbGJhY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYwLCBjYWxsYmFjaykKKworICAgICAgICAjIGF0dGFjaCBhIG5ldyBsb29wCisgICAgICAgIG9sZF9sb29wID0gc2VsZi5sb29wCisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgb2xkX2xvb3AsCisgICAgICAgICAgICAgICAgInJlbW92ZV9zaWduYWxfaGFuZGxlciIpIGFzIG1fb2xkX3JlbW92ZV9zaWduYWxfaGFuZGxlciwgXAorICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgIHNlbGYubG9vcCwKKyAgICAgICAgICAgICAgICAiYWRkX3NpZ25hbF9oYW5kbGVyIikgYXMgbV9uZXdfYWRkX3NpZ25hbF9oYW5kbGVyOgorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorCisgICAgICAgICAgICBtX29sZF9yZW1vdmVfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQpCisgICAgICAgICAgICBtX25ld19hZGRfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQsIHNlbGYud2F0Y2hlci5fc2lnX2NobGQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MCwgOSkKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNjAsIDkpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NldF9sb29wX3JhY2VfY29uZGl0aW9uKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIDMgY2hpbGRyZW4KKyAgICAgICAgY2FsbGJhY2sxID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2szID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2MSwgY2FsbGJhY2sxKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYyLCBjYWxsYmFjazIpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjIyLCBjYWxsYmFjazMpCisKKyAgICAgICAgIyBkZXRhY2ggdGhlIGxvb3AKKyAgICAgICAgb2xkX2xvb3AgPSBzZWxmLmxvb3AKKyAgICAgICAgc2VsZi5sb29wID0gTm9uZQorCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgb2xkX2xvb3AsICJyZW1vdmVfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX3JlbW92ZV9zaWduYWxfaGFuZGxlcjoKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKE5vbmUpCisKKyAgICAgICAgICAgIG1fcmVtb3ZlX3NpZ25hbF9oYW5kbGVyLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdDSExEKQorCisgICAgICAgICMgY2hpbGQgMSAmIDIgdGVybWluYXRlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MSwgMTEpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MiwgLTUpCisKKyAgICAgICAgIyBTSUdDSExEIHdhcyBub3QgY2F0Y2hlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazMuY2FsbGVkKQorCisgICAgICAgICMgYXR0YWNoIGEgbmV3IGxvb3AKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisKKyAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AsICJhZGRfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX2FkZF9zaWduYWxfaGFuZGxlcjoKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKworICAgICAgICAgICAgbV9hZGRfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQsIHNlbGYud2F0Y2hlci5fc2lnX2NobGQpCisgICAgICAgICAgICBjYWxsYmFjazEuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNjEsIDExKSAgIyByYWNlIGNvbmRpdGlvbiEKKyAgICAgICAgICAgIGNhbGxiYWNrMi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg2MiwgLTUpICAjIHJhY2UgY29uZGl0aW9uIQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazMuY2FsbGVkKQorCisgICAgICAgIGNhbGxiYWNrMS5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2syLnJlc2V0X21vY2soKQorCisgICAgICAgICMgY2hpbGQgMyB0ZXJtaW5hdGVzCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MjIsIDE5KQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2szLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDYyMiwgMTkpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIHR3byBjaGlsZHJlbgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgIyBjaGlsZCAxIHRlcm1pbmF0ZXMKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MywgOSkKKyAgICAgICAgICAgICMgb3RoZXIgY2hpbGQgdGVybWluYXRlcworICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDY1LCAxOCkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjMsIGNhbGxiYWNrMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2NCwgY2FsbGJhY2sxKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLndhdGNoZXIuX2NhbGxiYWNrcyksIDEpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgYXN5bmNpby5GYXN0Q2hpbGRXYXRjaGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLndhdGNoZXIuX3pvbWJpZXMpLCAxKQorCisgICAgICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AsCisgICAgICAgICAgICAgICAgICAgICJyZW1vdmVfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX3JlbW92ZV9zaWduYWxfaGFuZGxlcjoKKworICAgICAgICAgICAgICAgIHNlbGYud2F0Y2hlci5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBtX3JlbW92ZV9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLndhdGNoZXIuX2NhbGxiYWNrcykKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgYXN5bmNpby5GYXN0Q2hpbGRXYXRjaGVyKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLndhdGNoZXIuX3pvbWJpZXMpCisKKworY2xhc3MgU2FmZUNoaWxkV2F0Y2hlclRlc3RzIChDaGlsZFdhdGNoZXJUZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNyZWF0ZV93YXRjaGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKCkKKworCitjbGFzcyBGYXN0Q2hpbGRXYXRjaGVyVGVzdHMgKENoaWxkV2F0Y2hlclRlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY3JlYXRlX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiBhc3luY2lvLkZhc3RDaGlsZFdhdGNoZXIoKQorCisKK2NsYXNzIFBvbGljeVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjcmVhdGVfcG9saWN5KHNlbGYpOgorICAgICAgICByZXR1cm4gYXN5bmNpby5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb2xpY3kuX3dhdGNoZXIpCisKKyAgICAgICAgd2F0Y2hlciA9IHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3YXRjaGVyLCBhc3luY2lvLlNhZmVDaGlsZFdhdGNoZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb2xpY3kuX3dhdGNoZXIsIHdhdGNoZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLCBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2F0Y2hlci5fbG9vcCkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyX2FmdGVyX3NldChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgd2F0Y2hlciA9IGFzeW5jaW8uRmFzdENoaWxkV2F0Y2hlcigpCisKKyAgICAgICAgcG9saWN5LnNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5Ll93YXRjaGVyLCB3YXRjaGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIsIHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpKQorCisgICAgZGVmIHRlc3RfZ2V0X2NoaWxkX3dhdGNoZXJfd2l0aF9tYWlubG9vcF9leGlzdGluZyhzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgbG9vcCA9IHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9saWN5Ll93YXRjaGVyKQorICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod2F0Y2hlciwgYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9nZXRfY2hpbGRfd2F0Y2hlcl90aHJlYWQoc2VsZik6CisKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChwb2xpY3kubmV3X2V2ZW50X2xvb3AoKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3ApCisgICAgICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdhdGNoZXIsIGFzeW5jaW8uU2FmZUNoaWxkV2F0Y2hlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhdGNoZXIuX2xvb3ApCisKKyAgICAgICAgICAgIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpLmNsb3NlKCkKKworICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorCisgICAgICAgIHRoID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdGguc3RhcnQoKQorICAgICAgICB0aC5qb2luKCkKKworICAgIGRlZiB0ZXN0X2NoaWxkX3dhdGNoZXJfcmVwbGFjZV9tYWlubG9vcF9leGlzdGluZyhzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgbG9vcCA9IHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgd2F0Y2hlciA9IHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLl9sb29wLCBsb29wKQorCisgICAgICAgIG5ld19sb29wID0gcG9saWN5Lm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKG5ld19sb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2F0Y2hlci5fbG9vcCwgbmV3X2xvb3ApCisKKyAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLl9sb29wLCBOb25lKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorICAgICAgICBuZXdfbG9vcC5jbG9zZSgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c19ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2MDQ5YQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMTM1IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnV2luZG93cyBvbmx5JykKKworaW1wb3J0IF93aW5hcGkKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworZnJvbSBhc3luY2lvIGltcG9ydCBfb3ZlcmxhcHBlZAorZnJvbSBhc3luY2lvIGltcG9ydCB3aW5kb3dzX2V2ZW50cworCisKK2NsYXNzIFVwcGVyUHJvdG8oYXN5bmNpby5Qcm90b2NvbCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmJ1ZiA9IFtdCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zKToKKyAgICAgICAgc2VsZi50cmFucyA9IHRyYW5zCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5idWYuYXBwZW5kKGRhdGEpCisgICAgICAgIGlmIGInXG4nIGluIGRhdGE6CisgICAgICAgICAgICBzZWxmLnRyYW5zLndyaXRlKGInJy5qb2luKHNlbGYuYnVmKS51cHBlcigpKQorICAgICAgICAgICAgc2VsZi50cmFucy5jbG9zZSgpCisKKworY2xhc3MgUHJvYWN0b3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGFzeW5jaW8uUHJvYWN0b3JFdmVudExvb3AoKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcCA9IE5vbmUKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBhLCBiID0gc2VsZi5sb29wLl9zb2NrZXRwYWlyKCkKKyAgICAgICAgdHJhbnMgPSBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydChhLCBhc3luY2lvLlByb3RvY29sKCkpCisgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKHNlbGYubG9vcC5zb2NrX3JlY3YoYiwgMTAwKSkKKyAgICAgICAgdHJhbnMuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgYicnKQorICAgICAgICBiLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9iaW5kKHNlbGYpOgorICAgICAgICBBRERSRVNTID0gcidcXC5ccGlwZVx0ZXN0X2RvdWJsZV9iaW5kLSVzJyAlIG9zLmdldHBpZCgpCisgICAgICAgIHNlcnZlcjEgPSB3aW5kb3dzX2V2ZW50cy5QaXBlU2VydmVyKEFERFJFU1MpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUGVybWlzc2lvbkVycm9yKToKKyAgICAgICAgICAgIHNlcnZlcjIgPSB3aW5kb3dzX2V2ZW50cy5QaXBlU2VydmVyKEFERFJFU1MpCisgICAgICAgIHNlcnZlcjEuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcGlwZShzZWxmKToKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLl90ZXN0X3BpcGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICdkb25lJykKKworICAgIGRlZiBfdGVzdF9waXBlKHNlbGYpOgorICAgICAgICBBRERSRVNTID0gcidcXC5ccGlwZVxfdGVzdF9waXBlLSVzJyAlIG9zLmdldHBpZCgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGFzeW5jaW8uUHJvdG9jb2wsIEFERFJFU1MpCisKKyAgICAgICAgW3NlcnZlcl0gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdGFydF9zZXJ2aW5nX3BpcGUoCisgICAgICAgICAgICBVcHBlclByb3RvLCBBRERSRVNTKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VydmVyLCB3aW5kb3dzX2V2ZW50cy5QaXBlU2VydmVyKQorCisgICAgICAgIGNsaWVudHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgIHN0cmVhbV9yZWFkZXIgPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHByb3RvY29sID0gYXN5bmNpby5TdHJlYW1SZWFkZXJQcm90b2NvbChzdHJlYW1fcmVhZGVyKQorICAgICAgICAgICAgdHJhbnMsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3AuY3JlYXRlX3BpcGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IHByb3RvY29sLCBBRERSRVNTKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyYW5zLCBhc3luY2lvLlRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvdG9jb2wsIHByb3RvKQorICAgICAgICAgICAgY2xpZW50cy5hcHBlbmQoKHN0cmVhbV9yZWFkZXIsIHRyYW5zKSkKKworICAgICAgICBmb3IgaSwgKHIsIHcpIGluIGVudW1lcmF0ZShjbGllbnRzKToKKyAgICAgICAgICAgIHcud3JpdGUoJ2xvd2VyLXt9XG4nLmZvcm1hdChpKS5lbmNvZGUoKSkKKworICAgICAgICBmb3IgaSwgKHIsIHcpIGluIGVudW1lcmF0ZShjbGllbnRzKToKKyAgICAgICAgICAgIHJlc3BvbnNlID0geWllbGQgZnJvbSByLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2UsICdMT1dFUi17fVxuJy5mb3JtYXQoaSkuZW5jb2RlKCkpCisgICAgICAgICAgICB3LmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZU5vdEZvdW5kRXJyb3IpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmxvb3AuY3JlYXRlX3BpcGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBhc3luY2lvLlByb3RvY29sLCBBRERSRVNTKQorCisgICAgICAgIHJldHVybiAnZG9uZScKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX2hhbmRsZShzZWxmKToKKyAgICAgICAgZXZlbnQgPSBfb3ZlcmxhcHBlZC5DcmVhdGVFdmVudChOb25lLCBUcnVlLCBGYWxzZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKF93aW5hcGkuQ2xvc2VIYW5kbGUsIGV2ZW50KQorCisgICAgICAgICMgV2FpdCBmb3IgdW5zZXQgZXZlbnQgd2l0aCAwLjJzIHRpbWVvdXQ7CisgICAgICAgICMgcmVzdWx0IHNob3VsZCBiZSBGYWxzZSBhdCB0aW1lb3V0CisgICAgICAgIGYgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShldmVudCwgMC4yKQorICAgICAgICBzdGFydCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBlbGFwc2VkID0gc2VsZi5sb29wLnRpbWUoKSAtIHN0YXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMTggPCBlbGFwc2VkIDwgMC45LCBlbGFwc2VkKQorCisgICAgICAgIF9vdmVybGFwcGVkLlNldEV2ZW50KGV2ZW50KQorCisgICAgICAgICMgV2FpdCBmb3IgZm9yIHNldCBldmVudDsKKyAgICAgICAgIyByZXN1bHQgc2hvdWxkIGJlIFRydWUgaW1tZWRpYXRlbHkKKyAgICAgICAgZiA9IHNlbGYubG9vcC5fcHJvYWN0b3Iud2FpdF9mb3JfaGFuZGxlKGV2ZW50LCAxMCkKKyAgICAgICAgc3RhcnQgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgZWxhcHNlZCA9IHNlbGYubG9vcC50aW1lKCkgLSBzdGFydAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gZWxhcHNlZCA8IDAuMSwgZWxhcHNlZCkKKworICAgICAgICBfb3ZlcmxhcHBlZC5SZXNldEV2ZW50KGV2ZW50KQorCisgICAgICAgICMgV2FpdCBmb3IgdW5zZXQgZXZlbnQgd2l0aCBhIGNhbmNlbGxlZCBmdXR1cmU7CisgICAgICAgICMgQ2FuY2VsbGVkRXJyb3Igc2hvdWxkIGJlIHJhaXNlZCBpbW1lZGlhdGVseQorICAgICAgICBmID0gc2VsZi5sb29wLl9wcm9hY3Rvci53YWl0X2Zvcl9oYW5kbGUoZXZlbnQsIDEwKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHN0YXJ0ID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBlbGFwc2VkID0gc2VsZi5sb29wLnRpbWUoKSAtIHN0YXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IGVsYXBzZWQgPCAwLjEsIGVsYXBzZWQpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfdXRpbHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOWQ2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX3V0aWxzLnB5CkBAIC0wLDAgKzEsMTQxIEBACisiIiJUZXN0cyBmb3Igd2luZG93X3V0aWxzIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXN0LnN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ1dpbmRvd3Mgb25seScpCisKK2ltcG9ydCBfd2luYXBpCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgd2luZG93c191dGlscworZnJvbSBhc3luY2lvIGltcG9ydCBfb3ZlcmxhcHBlZAorCisKK2NsYXNzIFdpbnNvY2tldHBhaXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICBzc29jaywgY3NvY2sgPSB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoKQorCisgICAgICAgIGNzb2NrLnNlbmQoYid4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIneHh4Jywgc3NvY2sucmVjdigxMDI0KSkKKworICAgICAgICBjc29jay5jbG9zZSgpCisgICAgICAgIHNzb2NrLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLndpbmRvd3NfdXRpbHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyX2V4YyhzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuZ2V0c29ja25hbWUucmV0dXJuX3ZhbHVlID0gKCcnLCAxMjM0NSkKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5hY2NlcHQucmV0dXJuX3ZhbHVlID0gb2JqZWN0KCksIG9iamVjdCgpCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpcikKKworCitjbGFzcyBQaXBlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGlwZV9vdmVybGFwcGVkKHNlbGYpOgorICAgICAgICBoMSwgaDIgPSB3aW5kb3dzX3V0aWxzLnBpcGUob3ZlcmxhcHBlZD0oVHJ1ZSwgVHJ1ZSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG92MSA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjEucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmVycm9yLCAwKQorCisgICAgICAgICAgICBvdjEuUmVhZEZpbGUoaDEsIDEwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdjEucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmVycm9yLCBfd2luYXBpLkVSUk9SX0lPX1BFTkRJTkcpCisgICAgICAgICAgICBFUlJPUl9JT19JTkNPTVBMRVRFID0gOTk2CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3YxLmdldHJlc3VsdCgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS53aW5lcnJvciwgRVJST1JfSU9fSU5DT01QTEVURSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdleHBlY3RlZCBFUlJPUl9JT19JTkNPTVBMRVRFJykKKworICAgICAgICAgICAgb3YyID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92Mi5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjIuZXJyb3IsIDApCisKKyAgICAgICAgICAgIG92Mi5Xcml0ZUZpbGUoaDIsIGIiaGVsbG8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvdjIuZXJyb3IsIHswLCBfd2luYXBpLkVSUk9SX0lPX1BFTkRJTkd9KQorCisgICAgICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JNdWx0aXBsZU9iamVjdHMoW292Mi5ldmVudF0sIEZhbHNlLCAxMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgX3dpbmFwaS5XQUlUX09CSkVDVF8wKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92MS5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjEuZXJyb3IsIEVSUk9SX0lPX0lOQ09NUExFVEUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92Mi5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvdjIuZXJyb3IsIHswLCBfd2luYXBpLkVSUk9SX0lPX1BFTkRJTkd9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjEuZ2V0cmVzdWx0KCksIGIiaGVsbG8iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoMSkKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDIpCisKKyAgICBkZWYgdGVzdF9waXBlX2hhbmRsZShzZWxmKToKKyAgICAgICAgaCwgXyA9IHdpbmRvd3NfdXRpbHMucGlwZShvdmVybGFwcGVkPShUcnVlLCBUcnVlKSkKKyAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShfKQorICAgICAgICBwID0gd2luZG93c191dGlscy5QaXBlSGFuZGxlKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5maWxlbm8oKSwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmhhbmRsZSwgaCkKKworICAgICAgICAjIGNoZWNrIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiBwIGNsb3NlcyBoYW5kbGUKKyAgICAgICAgZGVsIHAKKyAgICAgICAgdGVzdC5zdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIDYpICAgICAjIEVSUk9SX0lOVkFMSURfSEFORExFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2V4cGVjdGVkIEVSUk9SX0lOVkFMSURfSEFORExFJykKKworCitjbGFzcyBQb3BlblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BvcGVuKHNlbGYpOgorICAgICAgICBjb21tYW5kID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBzID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocy51cHBlcigpKQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc3RkZXJyJykKKyAgICAgICAgICAgICIiIgorICAgICAgICBtc2cgPSBiImJsYWhcbiIKKworICAgICAgICBwID0gd2luZG93c191dGlscy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvbW1hbmRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj13aW5kb3dzX3V0aWxzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD13aW5kb3dzX3V0aWxzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj13aW5kb3dzX3V0aWxzLlBJUEUpCisKKyAgICAgICAgZm9yIGYgaW4gW3Auc3RkaW4sIHAuc3Rkb3V0LCBwLnN0ZGVycl06CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgd2luZG93c191dGlscy5QaXBlSGFuZGxlKQorCisgICAgICAgIG92aW4gPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgb3ZvdXQgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgb3ZlcnIgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKworICAgICAgICBvdmluLldyaXRlRmlsZShwLnN0ZGluLmhhbmRsZSwgbXNnKQorICAgICAgICBvdm91dC5SZWFkRmlsZShwLnN0ZG91dC5oYW5kbGUsIDEwMCkKKyAgICAgICAgb3ZlcnIuUmVhZEZpbGUocC5zdGRlcnIuaGFuZGxlLCAxMDApCisKKyAgICAgICAgZXZlbnRzID0gW292aW4uZXZlbnQsIG92b3V0LmV2ZW50LCBvdmVyci5ldmVudF0KKyAgICAgICAgIyBTdXBlci1sb25nIHRpbWVvdXQgZm9yIHNsb3cgYnVpbGRib3RzLgorICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JNdWx0aXBsZU9iamVjdHMoZXZlbnRzLCBUcnVlLCAxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdm91dC5wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92ZXJyLnBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3Zpbi5wZW5kaW5nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Zpbi5nZXRyZXN1bHQoKSwgbGVuKG1zZykpCisgICAgICAgIG91dCA9IG92b3V0LmdldHJlc3VsdCgpLnJzdHJpcCgpCisgICAgICAgIGVyciA9IG92ZXJyLmdldHJlc3VsdCgpLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihvdXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKGVyciksIDApCisgICAgICAgICMgYWxsb3cgZm9yIHBhcnRpYWwgcmVhZHMuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy51cHBlcigpLnJzdHJpcCgpLnN0YXJ0c3dpdGgob3V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIic3RkZXJyIi5zdGFydHN3aXRoKGVycikpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0cy50eHQgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjA5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdHMudHh0CkBAIC0wLDAgKzEsMTMgQEAKK3Rlc3RfYXN5bmNpby50ZXN0X2Jhc2VfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X2Z1dHVyZXMKK3Rlc3RfYXN5bmNpby50ZXN0X2xvY2tzCit0ZXN0X2FzeW5jaW8udGVzdF9wcm9hY3Rvcl9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X3F1ZXVlcwordGVzdF9hc3luY2lvLnRlc3Rfc2VsZWN0b3JfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF9zdHJlYW1zCit0ZXN0X2FzeW5jaW8udGVzdF90YXNrcwordGVzdF9hc3luY2lvLnRlc3RfdHJhbnNwb3J0cwordGVzdF9hc3luY2lvLnRlc3RfdW5peF9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X3dpbmRvd3NfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF93aW5kb3dzX3V0aWxzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQppbmRleCA1ZDA2MzJlLi4wODRkMjQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKQEAgLTE5LDYgKzE5LDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiAKK1RJTUVPVVQgPSAzCiBIQVNfVU5JWF9TT0NLRVRTID0gaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJykKIAogY2xhc3MgZHVtbXlzb2NrZXQ6CkBAIC0zOTUsNyArMzk2LDEwIEBACiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwLmdldHZhbHVlKCksIGRhdGEqMikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgaWYgdC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCisKIAogCiBjbGFzcyBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0c19Vc2VQb2xsKERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzKToKQEAgLTc0MCw3ICs3NDQsMTIgQEAKICAgICAgICAgcy5jcmVhdGVfc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LmZhbWlseSwgc2VsZi5mYW1pbHkpCiAgICAgICAgIFNPQ0tfTk9OQkxPQ0sgPSBnZXRhdHRyKHNvY2tldCwgJ1NPQ0tfTk9OQkxPQ0snLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0spCisgICAgICAgIHNvY2tfdHlwZSA9IHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0sKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX0NMT0VYRUMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocy5zb2NrZXQudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tfdHlwZSB8IHNvY2tldC5TT0NLX0NMT0VYRUMsIHNvY2tfdHlwZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tfdHlwZSkKIAogICAgIGRlZiB0ZXN0X2JpbmQoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzU0LDcgKzc2Myw3IEBACiAgICAgICAgIHMyID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCiAgICAgICAgIHMyLmNyZWF0ZV9zb2NrZXQoc2VsZi5mYW1pbHkpCiAgICAgICAgICMgRUFERFJJTlVTRSBpbmRpY2F0ZXMgdGhlIHNvY2tldCB3YXMgY29ycmVjdGx5IGJvdW5kCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgczIuYmluZCwgKHNlbGYuYWRkclswXSwgcG9ydCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHMyLmJpbmQsIChzZWxmLmFkZHJbMF0sIHBvcnQpKQogCiAgICAgZGVmIHRlc3Rfc2V0X3JldXNlX2FkZHIoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzYyLDcgKzc3MSw3IEBACiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgdW5pdHRlc3Quc2tpcCgiU09fUkVVU0VBRERSIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIGlmIFNPX1JFVVNFQUREUiBzdWNjZWVkZWQgZm9yIHNvY2sgd2UgZXhwZWN0IGFzeW5jb3JlCkBAIC03ODcsNyArNzk2LDExIEBACiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhOiBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD01MDApKQogICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICBzZWxmLmFkZENsZWFudXAodC5qb2luKQorICAgICAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgICAgIGlmIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQogCiAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzZWxmLmZhbWlseSwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgcy5zZXR0aW1lb3V0KC4yKQpAQCAtNzk1LDcgKzgwOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soJ2lpJywgMSwgMCkpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KHNlcnZlci5hZGRyZXNzKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CmluZGV4IDMwYzNiNGEuLjcwZDJmMWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CkBAIC0yMyw3ICsyMyw5IEBACiBkZWYgcmFpc2UyKCk6CiAgICAgcmFpc2UgU3lzdGVtRXJyb3IKIAotY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBHZW5lcmFsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgIHNlbGYuc2F2ZV9zdGRlcnIgPSBzeXMuc3RkZXJyCkBAIC0xNDEsOCArMTQzLDQzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgWzVdKQogCiAKK2NsYXNzIFN1YmludGVycHJldGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfbGVhayhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3Qgc2hvd3MgYSBsZWFrIGluIHJlZmxlYWsgbW9kZSBpZiBhdGV4aXQgZG9lc24ndAorICAgICAgICAjIHRha2UgY2FyZSB0byBmcmVlIGNhbGxiYWNrcyBpbiBpdHMgcGVyLXN1YmludGVycHJldGVyIG1vZHVsZQorICAgICAgICAjIHN0YXRlLgorICAgICAgICBuID0gYXRleGl0Ll9uY2FsbGJhY2tzKCkKKyAgICAgICAgY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoZikKKyAgICAgICAgICAgIGRlbCBhdGV4aXQKKyAgICAgICAgICAgICIiIgorICAgICAgICByZXQgPSBzdXBwb3J0LnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXRleGl0Ll9uY2FsbGJhY2tzKCksIG4pCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfbGVha19yZWZjeWNsZShzZWxmKToKKyAgICAgICAgIyBTaW1pbGFyIHRvIHRoZSBhYm92ZSwgYnV0IHdpdGggYSByZWZjeWNsZSB0aHJvdWdoIHRoZSBhdGV4aXQKKyAgICAgICAgIyBtb2R1bGUuCisgICAgICAgIG4gPSBhdGV4aXQuX25jYWxsYmFja3MoKQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihmKQorICAgICAgICAgICAgYXRleGl0Ll9fYXRleGl0ID0gYXRleGl0CisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmV0ID0gc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0ZXhpdC5fbmNhbGxiYWNrcygpLCBuKQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0Q2FzZSkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkgYi9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkKaW5kZXggYTkyY2Y4Ny4uODc5YWRlYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXVkaW9vcC5weQpAQCAtNSwxMyArNSwxOCBAQAogZGVmIHBhY2sod2lkdGgsIGRhdGEpOgogICAgIHJldHVybiBiJycuam9pbih2LnRvX2J5dGVzKHdpZHRoLCBzeXMuYnl0ZW9yZGVyLCBzaWduZWQ9VHJ1ZSkgZm9yIHYgaW4gZGF0YSkKIAotcGFja3MgPSB7dzogKGxhbWJkYSAqZGF0YSwgd2lkdGg9dzogcGFjayh3aWR0aCwgZGF0YSkpIGZvciB3IGluICgxLCAyLCA0KX0KLW1heHZhbHVlcyA9IHt3OiAoMSA8PCAoOCAqIHcgLSAxKSkgLSAxIGZvciB3IGluICgxLCAyLCA0KX0KLW1pbnZhbHVlcyA9IHt3OiAtMSA8PCAoOCAqIHcgLSAxKSBmb3IgdyBpbiAoMSwgMiwgNCl9CitkZWYgdW5wYWNrKHdpZHRoLCBkYXRhKToKKyAgICByZXR1cm4gW2ludC5mcm9tX2J5dGVzKGRhdGFbaTogaSArIHdpZHRoXSwgc3lzLmJ5dGVvcmRlciwgc2lnbmVkPVRydWUpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YSksIHdpZHRoKV0KKworcGFja3MgPSB7dzogKGxhbWJkYSAqZGF0YSwgd2lkdGg9dzogcGFjayh3aWR0aCwgZGF0YSkpIGZvciB3IGluICgxLCAyLCAzLCA0KX0KK21heHZhbHVlcyA9IHt3OiAoMSA8PCAoOCAqIHcgLSAxKSkgLSAxIGZvciB3IGluICgxLCAyLCAzLCA0KX0KK21pbnZhbHVlcyA9IHt3OiAtMSA8PCAoOCAqIHcgLSAxKSBmb3IgdyBpbiAoMSwgMiwgMywgNCl9CiAKIGRhdGFzID0gewogICAgIDE6IGInXHgwMFx4MTJceDQ1XHhiYlx4N2ZceDgwXHhmZicsCiAgICAgMjogcGFja3NbMl0oMCwgMHgxMjM0LCAweDQ1NjcsIC0weDQ1NjcsIDB4N2ZmZiwgLTB4ODAwMCwgLTEpLAorICAgIDM6IHBhY2tzWzNdKDAsIDB4MTIzNDU2LCAweDQ1Njc4OSwgLTB4NDU2Nzg5LCAweDdmZmZmZiwgLTB4ODAwMDAwLCAtMSksCiAgICAgNDogcGFja3NbNF0oMCwgMHgxMjM0NTY3OCwgMHg0NTY3ODlhYiwgLTB4NDU2Nzg5YWIsCiAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsIC0xKSwKIH0KQEAgLTE5LDYgKzI0LDcgQEAKIElOVkFMSURfREFUQSA9IFsKICAgICAoYidhYmMnLCAwKSwKICAgICAoYidhYmMnLCAyKSwKKyAgICAoYidhYicsIDMpLAogICAgIChiJ2FiYycsIDQpLAogXQogCkBAIC0yNiw4ICszMiwxMCBAQAogY2xhc3MgVGVzdEF1ZGlvb3AodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfbWF4KHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KG1lbW9yeXZpZXcoYicnKSwgdyksIDApCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgocCg1KSwgdyksIDUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KHAoNSwgLTgsIC0xKSwgdyksIDgpCkBAIC0zNiw5ICs0NCwxMyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChkYXRhc1t3XSwgdyksIC1taW52YWx1ZXNbd10pCiAKICAgICBkZWYgdGVzdF9taW5tYXgoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KGInJywgdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KGJ5dGVhcnJheSgpLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgobWVtb3J5dmlldyhiJycpLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKSkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChwKDUpLCB3KSwgKDUsIDUpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChwKDUsIC04LCAtMSksIHcpLCAoLTgsIDUpKQpAQCAtNTAsMTYgKzYyLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaW52YWx1ZXNbd10sIG1heHZhbHVlc1t3XSkpCiAKICAgICBkZWYgdGVzdF9tYXhwcChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKGJ5dGVhcnJheSgpLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKHBhY2tzW3ddKCpyYW5nZSgxMDApKSwgdyksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAocGFja3Nbd10oOSwgMTAsIDUsIDUsIDAsIDEpLCB3KSwgMTApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAoZGF0YXNbd10sIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXh2YWx1ZXNbd10gLSBtaW52YWx1ZXNbd10pCiAKICAgICBkZWYgdGVzdF9hdmcoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKGInJywgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKGJ5dGVhcnJheSgpLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwKDUpLCB3KSwgNSkKICAgICAgICAgICAgIHNlbGYgLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKHAoNSwgOCksIHcpLCA2KQpAQCAtNzQsMTcgKzkwLDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4NjAwMDAwMDApCiAKICAgICBkZWYgdGVzdF9hdmdwcChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGJ5dGVhcnJheSgpLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKHBhY2tzW3ddKCpyYW5nZSgxMDApKSwgdyksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAocGFja3Nbd10oOSwgMTAsIDUsIDUsIDAsIDEpLCB3KSwgMTApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1sxXSwgMSksIDE5NikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzJdLCAyKSwgNTA1MzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1szXSwgMyksIDEyOTM3MDk2KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbNF0sIDQpLCAzMzExODk3MDAyKQogCiAgICAgZGVmIHRlc3Rfcm1zKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKG1lbW9yeXZpZXcoYicnKSwgdyksIDApCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMocCgqcmFuZ2UoMTAwKSksIHcpLCA1NykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYXVkaW9vcC5ybXMocChtYXh2YWx1ZXNbd10pICogNSwgdyksCkBAIC05MywxMSArMTE0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1taW52YWx1ZXNbd10sIGRlbHRhPTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbMV0sIDEpLCA3NykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1syXSwgMiksIDIwMDAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGRhdGFzWzNdLCAzKSwgNTEyMDUyMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1s0XSwgNCksIDEzMTA4NTQxNTIpCiAKICAgICBkZWYgdGVzdF9jcm9zcyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhiJycsIHcpLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhieXRlYXJyYXkoKSwgdyksIC0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKG1lbW9yeXZpZXcoYicnKSwgdyksIC0xKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MocCgwLCAxLCAyKSwgdyksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MocCgxLCAyLCAtMywgLTQpLCB3KSwgMSkKQEAgLTEwNiwyMiArMTMwLDI5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MocChtaW52YWx1ZXNbd10sIG1heHZhbHVlc1t3XSksIHcpLCAxKQogCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChiJycsIGInJywgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoYnl0ZWFycmF5KCksIGJ5dGVhcnJheSgpLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChtZW1vcnl2aWV3KGInJyksIG1lbW9yeXZpZXcoYicnKSwgdyksIGInJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbd10sIGInXDAnICogbGVuKGRhdGFzW3ddKSwgdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzW3ddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzWzFdLCBkYXRhc1sxXSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAwXHgyNFx4N2ZceDgwXHg3Zlx4ODBceGZlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1syXSwgZGF0YXNbMl0sIDIpLAogICAgICAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MjQ2OCwgMHg3ZmZmLCAtMHg4MDAwLCAweDdmZmYsIC0weDgwMDAsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1szXSwgZGF0YXNbM10sIDMpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MjQ2OGFjLCAweDdmZmZmZiwgLTB4ODAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZiwgLTB4ODAwMDAwLCAtMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbNF0sIGRhdGFzWzRdLCA0KSwKICAgICAgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDI0NjhhY2YwLCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsIC0yKSkKIAogICAgIGRlZiB0ZXN0X2JpYXMoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBmb3IgYmlhcyBpbiAwLCAxLCAtMSwgMTI3LCAtMTI4LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhiJycsIHcsIGJpYXMpLCBiJycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoYnl0ZWFycmF5KCksIHcsIGJpYXMpLCBiJycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMobWVtb3J5dmlldyhiJycpLCB3LCBiaWFzKSwgYicnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1sxXSwgMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAxXHgxM1x4NDZceGJjXHg4MFx4ODFceDAwJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMV0sIDEsIC0xKSwKQEAgLTEzOCw2ICsxNjksMTcgQEAKICAgICAgICAgICAgICAgICBwYWNrc1syXSgtMSwgMHgxMjMzLCAweDQ1NjYsIC0weDQ1NjgsIDB4N2ZmZSwgMHg3ZmZmLCAtMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzJdLCAyLCAtMHg4MDAwMDAwMCksCiAgICAgICAgICAgICAgICAgZGF0YXNbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzNdLCAzLCAxKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgxLCAweDEyMzQ1NywgMHg0NTY3OGEsIC0weDQ1Njc4OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtMHg4MDAwMDAsIC0weDdmZmZmZiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzNdLCAzLCAtMSksCisgICAgICAgICAgICAgICAgcGFja3NbM10oLTEsIDB4MTIzNDU1LCAweDQ1Njc4OCwgLTB4NDU2NzhhLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZlLCAweDdmZmZmZiwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgMHg3ZmZmZmZmZiksCisgICAgICAgICAgICAgICAgcGFja3NbM10oLTEsIDB4MTIzNDU1LCAweDQ1Njc4OCwgLTB4NDU2NzhhLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZlLCAweDdmZmZmZiwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgLTB4ODAwMDAwMDApLAorICAgICAgICAgICAgICAgIGRhdGFzWzNdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1s0XSwgNCwgMSksCiAgICAgICAgICAgICAgICAgcGFja3NbNF0oMSwgMHgxMjM0NTY3OSwgMHg0NTY3ODlhYywgLTB4NDU2Nzg5YWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4ODAwMDAwMDAsIC0weDdmZmZmZmZmLCAwKSkKQEAgLTE1Miw5OSArMTk0LDE0NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAwLCAweDdmZmZmZmZmKSkKIAogICAgIGRlZiB0ZXN0X2xpbjJsaW4oc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1t3XSwgdywgdyksIGRhdGFzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oYnl0ZWFycmF5KGRhdGFzW3ddKSwgdywgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4obWVtb3J5dmlldyhkYXRhc1t3XSksIHcsIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1sxXSwgMSwgMiksCiAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDEyMDAsIDB4NDUwMCwgLTB4NDUwMCwgMHg3ZjAwLCAtMHg4MDAwLCAtMHgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1sxXSwgMSwgMyksCisgICAgICAgICAgICBwYWNrc1szXSgwLCAweDEyMDAwMCwgMHg0NTAwMDAsIC0weDQ1MDAwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwLCAtMHg4MDAwMDAsIC0weDEwMDAwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMV0sIDEsIDQpLAogICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgxMjAwMDAwMCwgMHg0NTAwMDAwMCwgLTB4NDUwMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMDAwLCAtMHg4MDAwMDAwMCwgLTB4MTAwMDAwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzJdLCAyLCAxKSwKICAgICAgICAgICAgIGInXHgwMFx4MTJceDQ1XHhiYVx4N2ZceDgwXHhmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzJdLCAyLCAzKSwKKyAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MTIzNDAwLCAweDQ1NjcwMCwgLTB4NDU2NzAwLAorICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmMDAsIC0weDgwMDAwMCwgLTB4MTAwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMl0sIDIsIDQpLAogICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgxMjM0MDAwMCwgMHg0NTY3MDAwMCwgLTB4NDU2NzAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAweDdmZmYwMDAwLCAtMHg4MDAwMDAwMCwgLTB4MTAwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1szXSwgMywgMSksCisgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1szXSwgMywgMiksCisgICAgICAgICAgICBwYWNrc1syXSgwLCAweDEyMzQsIDB4NDU2NywgLTB4NDU2OCwgMHg3ZmZmLCAtMHg4MDAwLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzNdLCAzLCA0KSwKKyAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MTIzNDU2MDAsIDB4NDU2Nzg5MDAsIC0weDQ1Njc4OTAwLAorICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYwMCwgLTB4ODAwMDAwMDAsIC0weDEwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzRdLCA0LCAxKSwKICAgICAgICAgICAgIGInXHgwMFx4MTJceDQ1XHhiYVx4N2ZceDgwXHhmZicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzRdLCA0LCAyKSwKICAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MTIzNCwgMHg0NTY3LCAtMHg0NTY4LCAweDdmZmYsIC0weDgwMDAsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbNF0sIDQsIDMpLAorICAgICAgICAgICAgcGFja3NbM10oMCwgMHgxMjM0NTYsIDB4NDU2Nzg5LCAtMHg0NTY3OGEsCisgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZiwgLTB4ODAwMDAwLCAtMSkpCiAKICAgICBkZWYgdGVzdF9hZHBjbTJsaW4oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCAxLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDAwXHgwMFx4MDBceGZmXHgwMFx4ZmYnLCAoLTE3OSwgNDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihieXRlYXJyYXkoYidceDA3XHg3Zlx4N2YnKSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwMFx4MDBceDAwXHhmZlx4MDBceGZmJywgKC0xNzksIDQwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4obWVtb3J5dmlldyhiJ1x4MDdceDdmXHg3ZicpLCAxLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDAwXHgwMFx4MDBceGZmXHgwMFx4ZmYnLCAoLTE3OSwgNDApKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDIsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrc1syXSgwLCAweGIsIDB4MjksIC0weDE2LCAweDcyLCAtMHhiMyksICgtMTc5LCA0MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgMywgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2tzWzNdKDAsIDB4YjAwLCAweDI5MDAsIC0weDE2MDAsIDB4NzIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4YjMwMCksICgtMTc5LCA0MCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgNCwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2tzWzRdKDAsIDB4YjAwMDAsIDB4MjkwMDAwLCAtMHgxNjAwMDAsIDB4NzIwMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMHhiMzAwMDApLCAoLTE3OSwgNDApKSkKIAogICAgICAgICAjIFZlcnkgY3Vyc29yeSB0ZXN0Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXDAnICogNSwgdywgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1wwJyAqIHcgKiAxMCwgKDAsIDApKSkKIAogICAgIGRlZiB0ZXN0X2xpbjJhZHBjbShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShkYXRhc1sxXSwgMSwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKC0yMjEsIDM5KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbMl0sIDIsIE5vbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgzMSwgMzkpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShkYXRhc1s0XSwgNCwgTm9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKDMxLCAzOSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGJ5dGVhcnJheShkYXRhc1sxXSksIDEsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgtMjIxLCAzOSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKG1lbW9yeXZpZXcoZGF0YXNbMV0pLCAxLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoLTIyMSwgMzkpKSkKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbd10sIHcsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoMzEsIDM5KSkpCiAKICAgICAgICAgIyBWZXJ5IGN1cnNvcnkgdGVzdAotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShiJ1wwJyAqIHcgKiAxMCwgdywgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1wwJyAqIDUsICgwLCAwKSkpCiAKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FkcGNtX3N0YXRlKHNlbGYpOgorICAgICAgICAjIHN0YXRlIG11c3QgYmUgYSB0dXBsZSBvciBOb25lLCBub3QgYW4gaW50ZWdlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuYWRwY20ybGluLCBiJ1wwJywgMSwgNTU1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubGluMmFkcGNtLCBiJ1wwJywgMSwgNTU1KQorCiAgICAgZGVmIHRlc3RfbGluMmFsYXcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1sxXSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDVhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzWzJdLCAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NTUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbNF0sIDQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhieXRlYXJyYXkoZGF0YXNbMV0pLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NWEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcobWVtb3J5dmlldyhkYXRhc1sxXSksIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1YScpCisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbd10sIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NTUnKQogCiAgICAgZGVmIHRlc3RfYWxhdzJsaW4oc2VsZik6CiAgICAgICAgIGVuY29kZWQgPSBiJ1x4MDBceDAzXHgyNFx4MmFceDUxXHg1NFx4NTVceDU4XHg2Ylx4NzFceDdmJ1wKICAgICAgICAgICAgICAgICAgIGInXHg4MFx4ODNceGE0XHhhYVx4ZDFceGQ0XHhkNVx4ZDhceGViXHhmMVx4ZmYnCiAgICAgICAgIHNyYyA9IFstNjg4LCAtNzIwLCAtMjI0MCwgLTQwMzIsIC05LCAtMywgLTEsIC0yNywgLTI0NCwgLTgyLCAtMTA2LAogICAgICAgICAgICAgICAgNjg4LCA3MjAsIDIyNDAsIDQwMzIsIDksIDMsIDEsIDI3LCAyNDQsIDgyLCAxMDZdCi0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4oZW5jb2RlZCwgdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDEzIGZvciB4IGluIHNyYykpKQorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgorICAgICAgICAgICAgZGVjb2RlZCA9IHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDEzIGZvciB4IGluIHNyYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4oZW5jb2RlZCwgdyksIGRlY29kZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4oYnl0ZWFycmF5KGVuY29kZWQpLCB3KSwgZGVjb2RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hbGF3MmxpbihtZW1vcnl2aWV3KGVuY29kZWQpLCB3KSwgZGVjb2RlZCkKIAogICAgICAgICBlbmNvZGVkID0gYnl0ZXMocmFuZ2UoMjU2KSkKLSAgICAgICAgZm9yIHcgaW4gMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKICAgICAgICAgICAgIGRlY29kZWQgPSBhdWRpb29wLmFsYXcybGluKGVuY29kZWQsIHcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGVjb2RlZCwgdyksIGVuY29kZWQpCiAKICAgICBkZWYgdGVzdF9saW4ydWxhdyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzWzFdLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4NjcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbMl0sIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg3ZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1s0XSwgNCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGJ5dGVhcnJheShkYXRhc1sxXSksIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg2NycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhtZW1vcnl2aWV3KGRhdGFzWzFdKSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDY3JykKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1t3XSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg3ZScpCiAKICAgICBkZWYgdGVzdF91bGF3MmxpbihzZWxmKToKICAgICAgICAgZW5jb2RlZCA9IGInXHgwMFx4MGVceDI4XHgzZlx4NTdceDZhXHg3Nlx4N2NceDdlXHg3ZidcCiAgICAgICAgICAgICAgICAgICBiJ1x4ODBceDhlXHhhOFx4YmZceGQ3XHhlYVx4ZjZceGZjXHhmZVx4ZmYnCiAgICAgICAgIHNyYyA9IFstODAzMSwgLTQ0NDcsIC0xNDcxLCAtNDk1LCAtMTYzLCAtNTMsIC0xOCwgLTYsIC0yLCAwLAogICAgICAgICAgICAgICAgODAzMSwgNDQ0NywgMTQ3MSwgNDk1LCAxNjMsIDUzLCAxOCwgNiwgMiwgMF0KLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihlbmNvZGVkLCB3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTQgZm9yIHggaW4gc3JjKSkpCisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CisgICAgICAgICAgICBkZWNvZGVkID0gcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTQgZm9yIHggaW4gc3JjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihlbmNvZGVkLCB3KSwgZGVjb2RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihieXRlYXJyYXkoZW5jb2RlZCksIHcpLCBkZWNvZGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnVsYXcybGluKG1lbW9yeXZpZXcoZW5jb2RlZCksIHcpLCBkZWNvZGVkKQogCiAgICAgICAgICMgQ3VycmVudCB1LWxhdyBpbXBsZW1lbnRhdGlvbiBoYXMgdHdvIGNvZGVzIGZvIDA6IDB4N2YgYW5kIDB4ZmYuCiAgICAgICAgIGVuY29kZWQgPSBieXRlcyhyYW5nZSgxMjcpKSArIGJ5dGVzKHJhbmdlKDEyOCwgMjU2KSkKLSAgICAgICAgZm9yIHcgaW4gMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKICAgICAgICAgICAgIGRlY29kZWQgPSBhdWRpb29wLnVsYXcybGluKGVuY29kZWQsIHcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGVjb2RlZCwgdyksIGVuY29kZWQpCiAKICAgICBkZWYgdGVzdF9tdWwoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGInJywgdywgMiksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoYnl0ZWFycmF5KCksIHcsIDIpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKG1lbW9yeXZpZXcoYicnKSwgdywgMiksIGInJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbd10sIHcsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1wwJyAqIGxlbihkYXRhc1t3XSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzW3ddLCB3LCAxKSwKQEAgLTI1MywxNCArMzQyLDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAwXHgyNFx4N2ZceDgwXHg3Zlx4ODBceGZlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1syXSwgMiwgMiksCiAgICAgICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgyNDY4LCAweDdmZmYsIC0weDgwMDAsIDB4N2ZmZiwgLTB4ODAwMCwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzWzNdLCAzLCAyKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgwLCAweDI0NjhhYywgMHg3ZmZmZmYsIC0weDgwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZiwgLTB4ODAwMDAwLCAtMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbNF0sIDQsIDIpLAogICAgICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MjQ2OGFjZjAsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMikpCiAKICAgICBkZWYgdGVzdF9yYXRlY3Yoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGInJywgdywgMSwgODAwMCwgODAwMCwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMSwgKCgwLCAwKSwpKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGJ5dGVhcnJheSgpLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YobWVtb3J5dmlldyhiJycpLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYicnLCB3LCA1LCA4MDAwLCA4MDAwLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkgKiA1KSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGInJywgdywgMSwgODAwMCwgMTYwMDAsIE5vbmUpLApAQCAtMjcyLDcgKzM2OCw3IEBACiAgICAgICAgIGQyLCBzdGF0ZSA9IGF1ZGlvb3AucmF0ZWN2KGInXHgwMFx4MDFceDAyJywgMSwgMSwgODAwMCwgMTYwMDAsIHN0YXRlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxICsgZDIsIGInXDAwMFwwMDBcMDAxXDAwMVwwMDJcMDAxXDAwMFwwMDBcMDAxXDAwMVwwMDInKQogCi0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkMCwgc3RhdGUwID0gYXVkaW9vcC5yYXRlY3YoZGF0YXNbd10sIHcsIDEsIDgwMDAsIDE2MDAwLCBOb25lKQogICAgICAgICAgICAgZCwgc3RhdGUgPSBiJycsIE5vbmUKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhc1t3XSksIHcpOgpAQCAtMjgzLDEzICszNzksMTUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIHN0YXRlMCkKIAogICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShiJycsIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShieXRlYXJyYXkoKSwgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yZXZlcnNlKG1lbW9yeXZpZXcoYicnKSwgdyksIGInJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yZXZlcnNlKHBhY2tzW3ddKDAsIDEsIDIpLCB3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja3Nbd10oMiwgMSwgMCkpCiAKICAgICBkZWYgdGVzdF90b21vbm8oc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkYXRhMSA9IGRhdGFzW3ddCiAgICAgICAgICAgICBkYXRhMiA9IGJ5dGVhcnJheSgyICogbGVuKGRhdGExKSkKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgpAQCAtMjk5LDkgKzM5NywxMyBAQAogICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CiAgICAgICAgICAgICAgICAgZGF0YTJbayt3OjoyKnddID0gZGF0YTFbazo6d10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b21vbm8oZGF0YTIsIHcsIDAuNSwgMC41KSwgZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKGJ5dGVhcnJheShkYXRhMiksIHcsIDAuNSwgMC41KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKG1lbW9yeXZpZXcoZGF0YTIpLCB3LCAwLjUsIDAuNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGExKQogCiAgICAgZGVmIHRlc3RfdG9zdGVyZW8oc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkYXRhMSA9IGRhdGFzW3ddCiAgICAgICAgICAgICBkYXRhMiA9IGJ5dGVhcnJheSgyICogbGVuKGRhdGExKSkKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgpAQCAtMzExLDE0ICs0MTMsMjUgQEAKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgogICAgICAgICAgICAgICAgIGRhdGEyW2srdzo6Mip3XSA9IGRhdGExW2s6OnddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8oZGF0YTEsIHcsIDEsIDEpLCBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b3N0ZXJlbyhieXRlYXJyYXkoZGF0YTEpLCB3LCAxLCAxKSwgZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8obWVtb3J5dmlldyhkYXRhMSksIHcsIDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMikKIAogICAgIGRlZiB0ZXN0X2ZpbmRmYWN0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZmFjdG9yKGRhdGFzWzJdLCBkYXRhc1syXSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IoYnl0ZWFycmF5KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGRhdGFzWzJdKSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IobWVtb3J5dmlldyhkYXRhc1syXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoZGF0YXNbMl0pKSwgMS4wKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZhY3RvcihiJ1wwJyAqIGxlbihkYXRhc1syXSksIGRhdGFzWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAwLjApCiAKICAgICBkZWYgdGVzdF9maW5kZml0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChkYXRhc1syXSwgZGF0YXNbMl0pLCAoMCwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoYnl0ZWFycmF5KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGRhdGFzWzJdKSksICgwLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChtZW1vcnl2aWV3KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhkYXRhc1syXSkpLCAoMCwgMS4wKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl0sIHBhY2tzWzJdKDEsIDIsIDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgODAzOC44KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl1bOi0yXSAqIDUgKyBkYXRhc1syXSwgZGF0YXNbMl0pLApAQCAtMzI2LDE2ICs0MzksMzcgQEAKIAogICAgIGRlZiB0ZXN0X2ZpbmRtYXgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kbWF4KGRhdGFzWzJdLCAxKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRtYXgoYnl0ZWFycmF5KGRhdGFzWzJdKSwgMSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kbWF4KG1lbW9yeXZpZXcoZGF0YXNbMl0pLCAxKSwgNSkKIAogICAgIGRlZiB0ZXN0X2dldHNhbXBsZShzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIGRhdGEgPSBwYWNrc1t3XSgwLCAxLCAtMSwgbWF4dmFsdWVzW3ddLCBtaW52YWx1ZXNbd10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShieXRlYXJyYXkoZGF0YSksIHcsIDApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShtZW1vcnl2aWV3KGRhdGEpLCB3LCAwKSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMSksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDIpLCAtMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMyksIG1heHZhbHVlc1t3XSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgNCksIG1pbnZhbHVlc1t3XSkKIAorICAgIGRlZiB0ZXN0X2J5dGVzd2FwKHNlbGYpOgorICAgICAgICBzd2FwcGVkX2RhdGFzID0geworICAgICAgICAgICAgMTogZGF0YXNbMV0sCisgICAgICAgICAgICAyOiBwYWNrc1syXSgwLCAweDM0MTIsIDB4Njc0NSwgLTB4NjY0NiwgLTB4ODEsIDB4ODAsIC0xKSwKKyAgICAgICAgICAgIDM6IHBhY2tzWzNdKDAsIDB4NTYzNDEyLCAtMHg3Njk4YmIsIDB4Nzc5OGJhLCAtMHg4MSwgMHg4MCwgLTEpLAorICAgICAgICAgICAgNDogcGFja3NbNF0oMCwgMHg3ODU2MzQxMiwgLTB4NTQ3Njk4YmIsIDB4NTU3Njk4YmEsCisgICAgICAgICAgICAgICAgICAgICAgICAtMHg4MSwgMHg4MCwgLTEpLAorICAgICAgICB9CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAoYicnLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJ5dGVzd2FwKGRhdGFzW3ddLCB3KSwgc3dhcHBlZF9kYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ieXRlc3dhcChzd2FwcGVkX2RhdGFzW3ddLCB3KSwgZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAoYnl0ZWFycmF5KGRhdGFzW3ddKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBwZWRfZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAobWVtb3J5dmlldyhkYXRhc1t3XSksIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwcGVkX2RhdGFzW3ddKQorCiAgICAgZGVmIHRlc3RfbmVnYXRpdmVsZW4oc2VsZik6CiAgICAgICAgICMgZnJvbSBpc3N1ZSAzMzA2LCBwcmV2aW91c2x5IGl0IHNlZ2ZhdWx0ZWQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwKQEAgLTM2NSwxMCArNDk5LDMzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmxpbjJhbGF3LCBkYXRhLCBzaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5saW4yYWRwY20sIGRhdGEsIHNpemUsIHN0YXRlKQogCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICBkYXRhID0gJ2FiY2QnCisgICAgICAgIHNpemUgPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5nZXRzYW1wbGUsIGRhdGEsIHNpemUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5tYXgsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5taW5tYXgsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hdmcsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5ybXMsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hdmdwcCwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLm1heHBwLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuY3Jvc3MsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5tdWwsIGRhdGEsIHNpemUsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLnRvbW9ubywgZGF0YSwgc2l6ZSwgMC41LCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC50b3N0ZXJlbywgZGF0YSwgc2l6ZSwgMC41LCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hZGQsIGRhdGEsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5iaWFzLCBkYXRhLCBzaXplLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AucmV2ZXJzZSwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJsaW4sIGRhdGEsIHNpemUsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5yYXRlY3YsIGRhdGEsIHNpemUsIDEsIDEsIDEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5saW4ydWxhdywgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJhbGF3LCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubGluMmFkcGNtLCBkYXRhLCBzaXplLCBOb25lKQorCiAgICAgZGVmIHRlc3Rfd3JvbmdzaXplKHNlbGYpOgogICAgICAgICBkYXRhID0gYidhYmNkZWZnaCcKICAgICAgICAgc3RhdGUgPSBOb25lCi0gICAgICAgIGZvciBzaXplIGluICgtMSwgMCwgMywgNSwgMTAyNCk6CisgICAgICAgIGZvciBzaXplIGluICgtMSwgMCwgNSwgMTAyNCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLnVsYXcybGluLCBkYXRhLCBzaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5hbGF3MmxpbiwgZGF0YSwgc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuYWRwY20ybGluLCBkYXRhLCBzaXplLCBzdGF0ZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5IGIvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKaW5kZXggMTM2OTVkZS4uYjk3MzhkZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKQEAgLTUsMTAgKzUsMjEgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHN1YnByb2Nlc3MKLQoraW1wb3J0IHN0cnVjdAorZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKIAogCiBjbGFzcyBMZWdhY3lCYXNlNjRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIExlZ2FjeSBBUEkgaXMgbm90IGFzIHBlcm1pc3NpdmUgYXMgdGhlIG1vZGVybiBBUEkKKyAgICBkZWYgY2hlY2tfdHlwZV9lcnJvcnMoc2VsZiwgZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgW10pCisgICAgICAgIG11bHRpZGltZW5zaW9uYWwgPSBtZW1vcnl2aWV3KGIiMTIzNCIpLmNhc3QoJ0InLCAoMiwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgbXVsdGlkaW1lbnNpb25hbCkKKyAgICAgICAgaW50X2RhdGEgPSBtZW1vcnl2aWV3KGIiMTIzNCIpLmNhc3QoJ0knKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGludF9kYXRhKQorCiAgICAgZGVmIHRlc3RfZW5jb2RlYnl0ZXMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMoYiJ3d3cucHl0aG9uLm9yZyIpLCBiImQzZDNMbkI1ZEdodmJpNXZjbWM9XG4iKQpAQCAtMjQsNyArMzUsOSBAQAogICAgICAgICAgICBiIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT1cbiIpCiAgICAgICAgICMgTm9uLWJ5dGVzCiAgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVieXRlcyhieXRlYXJyYXkoYidhYmMnKSksIGInWVdKalxuJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuZW5jb2RlYnl0ZXMsICIiKQorICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMobWVtb3J5dmlldyhiJ2FiYycpKSwgYidZV0pqXG4nKQorICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMoYXJyYXkoJ0InLCBiJ2FiYycpKSwgYidZV0pqXG4nKQorICAgICAgICBzZWxmLmNoZWNrX3R5cGVfZXJyb3JzKGJhc2U2NC5lbmNvZGVieXRlcykKIAogICAgIGRlZiB0ZXN0X2RlY29kZWJ5dGVzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTQxLDcgKzU0LDkgQEAKICAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKGInJyksIGInJykKICAgICAgICAgIyBOb24tYnl0ZXMKICAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKGJ5dGVhcnJheShiJ1lXSmpcbicpKSwgYidhYmMnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5kZWNvZGVieXRlcywgIiIpCisgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhtZW1vcnl2aWV3KGInWVdKalxuJykpLCBiJ2FiYycpCisgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhhcnJheSgnQicsIGInWVdKalxuJykpLCBiJ2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZV9lcnJvcnMoYmFzZTY0LmRlY29kZWJ5dGVzKQogCiAgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTczLDYgKzg4LDQyIEBACiAKIAogY2xhc3MgQmFzZVhZVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBNb2Rlcm4gQVBJIGNvbXBsZXRlbHkgaWdub3JlcyBleHBvcnRlZCBkaW1lbnNpb24gYW5kIGZvcm1hdCBkYXRhIGFuZAorICAgICMgdHJlYXRzIGFueSBidWZmZXIgYXMgYSBzdHJlYW0gb2YgYnl0ZXMKKyAgICBkZWYgY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKHNlbGYsIGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIFtdKQorCisgICAgZGVmIGNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhzZWxmLCBmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBbXSkKKworICAgIGRlZiBjaGVja19vdGhlcl90eXBlcyhzZWxmLCBmLCBieXRlc19kYXRhLCBleHBlY3RlZCk6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBiID0gYnl0ZWFycmF5KGJ5dGVzX2RhdGEpCisgICAgICAgIGVxKGYoYiksIGV4cGVjdGVkKQorICAgICAgICAjIFRoZSBieXRlYXJyYXkgd2Fzbid0IG11dGF0ZWQKKyAgICAgICAgZXEoYiwgYnl0ZXNfZGF0YSkKKyAgICAgICAgZXEoZihtZW1vcnl2aWV3KGJ5dGVzX2RhdGEpKSwgZXhwZWN0ZWQpCisgICAgICAgIGVxKGYoYXJyYXkoJ0InLCBieXRlc19kYXRhKSksIGV4cGVjdGVkKQorICAgICAgICAjIFhYWCB3aHkgaXMgYjY0ZW5jb2RlIGhhcmRjb2RlZCBoZXJlPworICAgICAgICBzZWxmLmNoZWNrX25vbmJ5dGVfZWxlbWVudF9mb3JtYXQoYmFzZTY0LmI2NGVuY29kZSwgYnl0ZXNfZGF0YSkKKyAgICAgICAgc2VsZi5jaGVja19tdWx0aWRpbWVuc2lvbmFsKGJhc2U2NC5iNjRlbmNvZGUsIGJ5dGVzX2RhdGEpCisKKyAgICBkZWYgY2hlY2tfbXVsdGlkaW1lbnNpb25hbChzZWxmLCBmLCBkYXRhKToKKyAgICAgICAgcGFkZGluZyA9IGIiXHgwMCIgaWYgbGVuKGRhdGEpICUgMiBlbHNlIGIiIgorICAgICAgICBieXRlc19kYXRhID0gZGF0YSArIHBhZGRpbmcgIyBNYWtlIHN1cmUgY2FzdCB3b3JrcworICAgICAgICBzaGFwZSA9IChsZW4oYnl0ZXNfZGF0YSkgLy8gMiwgMikKKyAgICAgICAgbXVsdGlkaW1lbnNpb25hbCA9IG1lbW9yeXZpZXcoYnl0ZXNfZGF0YSkuY2FzdCgnQicsIHNoYXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYobXVsdGlkaW1lbnNpb25hbCksIGYoYnl0ZXNfZGF0YSkpCisKKyAgICBkZWYgY2hlY2tfbm9uYnl0ZV9lbGVtZW50X2Zvcm1hdChzZWxmLCBmLCBkYXRhKToKKyAgICAgICAgcGFkZGluZyA9IGIiXHgwMCIgKiAoKDQgLSBsZW4oZGF0YSkpICUgNCkKKyAgICAgICAgYnl0ZXNfZGF0YSA9IGRhdGEgKyBwYWRkaW5nICMgTWFrZSBzdXJlIGNhc3Qgd29ya3MKKyAgICAgICAgaW50X2RhdGEgPSBtZW1vcnl2aWV3KGJ5dGVzX2RhdGEpLmNhc3QoJ0knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoaW50X2RhdGEpLCBmKGJ5dGVzX2RhdGEpKQorCisKICAgICBkZWYgdGVzdF9iNjRlbmNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICAjIFRlc3QgZGVmYXVsdCBhbHBoYWJldApAQCAtOTAsMTMgKzE0MSwxNiBAQAogICAgICAgICAgICBiIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT0iKQogICAgICAgICAjIFRlc3Qgd2l0aCBhcmJpdHJhcnkgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9YicqJCcpLCBiJzAxYSpiJGNkJykKLSAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShieXRlYXJyYXkoYidhYmNkJykpLCBiJ1lXSmpaQT09JykKICAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGFsdGNoYXJzPWJ5dGVhcnJheShiJyokJykpLAogICAgICAgICAgICBiJzAxYSpiJGNkJykKLSAgICAgICAgIyBDaGVjayBpZiBwYXNzaW5nIGEgc3RyIG9iamVjdCByYWlzZXMgYW4gZXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjY0ZW5jb2RlLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjY0ZW5jb2RlLCBiIiIsIGFsdGNoYXJzPSIiKQorICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9bWVtb3J5dmlldyhiJyokJykpLAorICAgICAgICAgICBiJzAxYSpiJGNkJykKKyAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGFsdGNoYXJzPWFycmF5KCdCJywgYicqJCcpKSwKKyAgICAgICAgICAgYicwMWEqYiRjZCcpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmI2NGVuY29kZSwgYidhYmNkJywgYidZV0pqWkE9PScpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iNjRlbmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmI2NGVuY29kZSwgYiIiLCBhbHRjaGFycz0iKiQiKQogICAgICAgICAjIFRlc3Qgc3RhbmRhcmQgYWxwaGFiZXQKICAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZShiInd3dy5weXRob24ub3JnIiksIGIiZDNkM0xuQjVkR2h2Ymk1dmNtYz0iKQogICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKGIiYSIpLCBiIllRPT0iKQpAQCAtMTEwLDE1ICsxNjQsMTUgQEAKICAgICAgICAgICAgYiJSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2pBeE1qTTBOVCIKICAgICAgICAgICAgYiJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09IikKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZShieXRlYXJyYXkoYidhYmNkJykpLCBiJ1lXSmpaQT09JykKLSAgICAgICAgIyBDaGVjayBpZiBwYXNzaW5nIGEgc3RyIG9iamVjdCByYWlzZXMgYW4gZXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlLCAiIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWJjZCcsIGInWVdKalpBPT0nKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKQogICAgICAgICAjIFRlc3Qgd2l0aCAnVVJMIHNhZmUnIGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKICAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJyksIGInMDFhLWJfY2QnKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUoYnl0ZWFycmF5KGInXHhkM1ZceGJlb1x4ZjdceDFkJykpLCBiJzAxYS1iX2NkJykKLSAgICAgICAgIyBDaGVjayBpZiBwYXNzaW5nIGEgc3RyIG9iamVjdCByYWlzZXMgYW4gZXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUsICIiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGInMDFhLWJfY2QnKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUpCiAKICAgICBkZWYgdGVzdF9iNjRkZWNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMTQxLDcgKzE5NSw4IEBACiAgICAgICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKGRhdGEpLCByZXMpCiAgICAgICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKGRhdGEuZGVjb2RlKCdhc2NpaScpKSwgcmVzKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKGJ5dGVhcnJheShiIllXSmoiKSksIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjY0ZGVjb2RlLCBiIllXSmoiLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iNjRkZWNvZGUpCiAKICAgICAgICAgIyBUZXN0IHdpdGggYXJiaXRyYXJ5IGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKICAgICAgICAgdGVzdHNfYWx0Y2hhcnMgPSB7KGInMDFhKmIkY2QnLCBiJyokJyk6IGInXHhkM1ZceGJlb1x4ZjdceDFkJywKQEAgLTE2MCw3ICsyMTUsOCBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZShkYXRhKSwgcmVzKQogICAgICAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZShkYXRhLmRlY29kZSgnYXNjaWknKSksIHJlcykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZShieXRlYXJyYXkoYiJZV0pqIikpLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSwgYiJZV0pqIiwgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKQogCiAgICAgICAgICMgVGVzdCB3aXRoICdVUkwgc2FmZScgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICB0ZXN0c191cmxzYWZlID0ge2InMDFhLWJfY2QnOiBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsCkBAIC0xNzAsNyArMjI2LDkgQEAKICAgICAgICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZShkYXRhKSwgcmVzKQogICAgICAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKGRhdGEuZGVjb2RlKCdhc2NpaScpKSwgcmVzKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoYnl0ZWFycmF5KGInMDFhLWJfY2QnKSksIGInXHhkM1ZceGJlb1x4ZjdceDFkJykKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUsIGInMDFhLWJfY2QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkM1ZceGJlb1x4ZjdceDFkJykKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKQogCiAgICAgZGVmIHRlc3RfYjY0ZGVjb2RlX3BhZGRpbmdfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmFzY2lpLkVycm9yLCBiYXNlNjQuYjY0ZGVjb2RlLCBiJ2FiYycpCkBAIC0yMDUsOCArMjYzLDggQEAKICAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZShiJ2FiY2QnKSwgYidNRlJHR1pBPScpCiAgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoYidhYmNkZScpLCBiJ01GUkdHWkRGJykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZShieXRlYXJyYXkoYidhYmNkJykpLCBiJ01GUkdHWkE9JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjMyZW5jb2RlLCAiIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjMyZW5jb2RlLCBiJ2FiY2QnLCBiJ01GUkdHWkE9JykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIzMmVuY29kZSkKIAogICAgIGRlZiB0ZXN0X2IzMmRlY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yMjIsNyArMjgwLDggQEAKICAgICAgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoZGF0YSksIHJlcykKICAgICAgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoZGF0YS5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoYnl0ZWFycmF5KGInTUZSR0c9PT0nKSksIGInYWJjJykKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjMyZGVjb2RlLCBiJ01GUkdHPT09JywgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjMyZGVjb2RlKQogCiAgICAgZGVmIHRlc3RfYjMyZGVjb2RlX2Nhc2Vmb2xkKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTI3Nyw4ICszMzYsOSBAQAogICAgICAgICBlcShiYXNlNjQuYjE2ZW5jb2RlKGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKSwgYicwMTAyQUJDREVGJykKICAgICAgICAgZXEoYmFzZTY0LmIxNmVuY29kZShiJ1x4MDAnKSwgYicwMCcpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMTZlbmNvZGUoYnl0ZWFycmF5KGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKSksIGInMDEwMkFCQ0RFRicpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmIxNmVuY29kZSwgIiIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmIxNmVuY29kZSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwMTAyQUJDREVGJykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIxNmVuY29kZSkKIAogICAgIGRlZiB0ZXN0X2IxNmRlY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yOTMsMTQgKzM1MywyNjggQEAKICAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShiJzAxMDJhYmNkZWYnLCBUcnVlKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCiAgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoJzAxMDJhYmNkZWYnLCBUcnVlKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYnl0ZWFycmF5KGIiMDEwMkFCQ0RFRiIpKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmIxNmRlY29kZSwgYiIwMTAyQUJDREVGIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIxNmRlY29kZSkKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShieXRlYXJyYXkoYiIwMTAyYWJjZGVmIiksIFRydWUpLAorICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShtZW1vcnl2aWV3KGIiMDEwMmFiY2RlZiIpLCBUcnVlKSwKKyAgICAgICAgICAgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYXJyYXkoJ0InLCBiIjAxMDJhYmNkZWYiKSwgVHJ1ZSksCisgICAgICAgICAgIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorCisgICAgZGVmIHRlc3RfYTg1ZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0cyA9IHsKKyAgICAgICAgICAgIGInJzogYicnLAorICAgICAgICAgICAgYiJ3d3cucHl0aG9uLm9yZyI6IGInR0JcXDZgRS1aUD1EZi4xR0ViPicsCisgICAgICAgICAgICBieXRlcyhyYW5nZSgyNTUpKTogYiIiIiEhKi0nIjlldTcjUkxoRyRrM1tXJi5vTmcnR1ZCIihgPTUyKiQkIiIiCisgICAgICAgICAgICAgICBiIiIiKEIrPF9wUixVRmNiLW4tVnIvMWlKLTBKUD09MWM3ME0zJnMjXTQ/WWttNVhAXyg2cSdSODg0Y0UiIiIKKyAgICAgICAgICAgICAgIGIiIiJIOU1KOFg6ZjEraDwpbHQjPUJTZzM+WzpaQz90IU1TQTddQGNCUEQzc0NpKycuRSxmbz5GRU1iTiIiIgorICAgICAgICAgICAgICAgYiIiIkdeNFVeSSFwSG5KOlc8KUtTPi85TGwlIklOL2BqWU9IR11pUGEuUSRSJGpENFM9UTdEVFY4KlRVIiIiCisgICAgICAgICAgICAgICBiIiIibnNyZFcyWmV0WEtBWS9ZZChMP1snZD9PXFxASzJfXVkyJW9ecW1uKmA1VGE6YU47VEpiZyJHWmQiIiIKKyAgICAgICAgICAgICAgIGIiIiIqXjpqZUNFLiVmXFwsITVndGdpRWk4TlxcVWpRNU9la2lxQnVtLVg2MG5GPylAb18lcVBxImFkYCIiIgorICAgICAgICAgICAgICAgYiIiInI7SFQiIiIsCisgICAgICAgICAgICBiImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisgICAgICAgICAgICAgICAgYiIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iOgorICAgICAgICAgICAgICAgIGInQDpFX1dBUyxSZ0JraEYiRC9POTJFSDYsQkZgcXRSSCRWYkM2VVhANDduPzNEOTImJlQnCisgICAgICAgICAgICAgICAgYiI6SmFuZDtjSGF0PScvVS8wSlA9PTFjNzBNMyZyLUksOzxGTi5PWmAtM11vU1cvZytBKEhbUCIsCisgICAgICAgICAgICBiIm5vIHBhZGRpbmcuLiI6IGInREpwWTpAOlduX0RKKFJTJywKKyAgICAgICAgICAgIGIiemVybyBjb21wcmVzc2lvblwwXDBcMFwwIjogYidIPV8sOCtDZj4sRSxvTjJGKG9RMXonLAorICAgICAgICAgICAgYiJ6ZXJvIGNvbXByZXNzaW9uXDBcMFwwIjogYidIPV8sOCtDZj4sRSxvTjJGKG9RMSEhISEnLAorICAgICAgICAgICAgYiJCb3VuZGFyeTpcMFwwXDBcMCI6IGInNj5xIWFBNzlNKDNXSy1bISEnLAorICAgICAgICAgICAgYiJTcGFjZSBjb21wcjogICAgIjogYic7ZkgvVEFLWUskRC9hTVYrPFZkTCcsCisgICAgICAgICAgICBiJ1x4ZmYnOiBiJ3JyJywKKyAgICAgICAgICAgIGInXHhmZicqMjogYidzOE4nLAorICAgICAgICAgICAgYidceGZmJyozOiBiJ3M4VyonLAorICAgICAgICAgICAgYidceGZmJyo0OiBiJ3M4Vy0hJywKKyAgICAgICAgICAgIH0KKworICAgICAgICBmb3IgZGF0YSwgcmVzIGluIHRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGRhdGEpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGRhdGEsIGFkb2JlPUZhbHNlKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShkYXRhLCBhZG9iZT1UcnVlKSwgYic8ficgKyByZXMgKyBiJ34+JywgZGF0YSkKKworICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5hODVlbmNvZGUsIGIid3d3LnB5dGhvbi5vcmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0JcXDZgRS1aUD1EZi4xR0ViPicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYTg1ZW5jb2RlLCAiIikKKworICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIid3d3LnB5dGhvbi5vcmciLCB3cmFwY29sPTcsIGFkb2JlPUZhbHNlKSwKKyAgICAgICAgICAgYidHQlxcNmBFLVxuWlA9RGYuMVxuR0ViPicpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJcMFwwXDBcMHd3dy5weXRob24ub3JnIiwgd3JhcGNvbD03LCBhZG9iZT1GYWxzZSksCisgICAgICAgICAgIGInekdCXFw2YEVcbi1aUD1EZi5cbjFHRWI+JykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInd3dy5weXRob24ub3JnIiwgd3JhcGNvbD03LCBhZG9iZT1UcnVlKSwKKyAgICAgICAgICAgYic8fkdCXFw2YFxuRS1aUD1EZlxuLjFHRWI+XG5+PicpCisKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiJyAnKjgsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJ3l5JykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiJyAnKjcsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJ3krPFZkJykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiJyAnKjYsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJ3krPFUnKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGInICcqNSwgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGIneSs5JykKKworICAgIGRlZiB0ZXN0X2I4NWVuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGVzdHMgPSB7CisgICAgICAgICAgICBiJyc6IGInJywKKyAgICAgICAgICAgIGInd3d3LnB5dGhvbi5vcmcnOiBiJ2NYeEwjYUN2bFNaKkRHY2ElVCcsCisgICAgICAgICAgICBieXRlcyhyYW5nZSgyNTUpKTogYiIiIjAwOUM2MU8pfk0ybmgtYzM9SXdzNUReais2Y3JYMTcjU0tIOTMzN1giIiIKKyAgICAgICAgICAgICAgICBiIiIiQVIhX25CcWImJUNAQ3J7RUc7ZkNGZmxTU0cmTUZpSTV8MnlKVXU9P0t0ViE3TGA2bk5OSiZhZCIiIgorICAgICAgICAgICAgICAgIGIiIiJPaWZOdFAqR0EtUjg+fTJTWG8rSVR3UHZZVX0waW9XTXlWJlhsWkl8WTtBNkRhQipeVGJhaSVqIiIiCisgICAgICAgICAgICAgICAgYiIiImN6SnF6ZTBfZEBmUHNSOGdvVEVPaD40MWVqRSM8dWtkY3k7bCREbTNuMzxaSm9TbU1acHJOOXAiIiIKKyAgICAgICAgICAgICAgICBiIiIicUB8eyhzSHYpfXRnV3VFdSg3aFV3NihVa3hWZ0gheXVINF56YD9AOSNLcCRQJGpRcGYlKzFjdiIiIgorICAgICAgICAgICAgICAgIGIiIiIoOXpQPClZYUQ0KnhCMEsrfSs7YTtOanhxPG1Layk9O2BYfj9DdExGQGJVOFZeITRgbGAxJCgjIiIiCisgICAgICAgICAgICAgICAgYiIiIntRZHAiIiIsCisgICAgICAgICAgICBiIiIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIiIgorICAgICAgICAgICAgICAgIGIiIiIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iIiI6CisgICAgICAgICAgICAgICAgYiIiIlZQYSFzV29CbitYPS1iMVpFa09IYWRMQlhiI2B9bmQzciVZTHF0VkpNQFVJWk9INTVwUGYkQCgiIiIKKyAgICAgICAgICAgICAgICBiIiIiUSZkJH1TNkVxRUZmbFNTRyZNRmlJNXtDZUJRUmJqRGt2I0NJeV5vc0UrQVc3ZHdsIiIiLAorICAgICAgICAgICAgYidubyBwYWRkaW5nLi4nOiBiJ1pmX3VQVlBzQCFaZjdubycsCisgICAgICAgICAgICBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDBceDAwJzogYidkUyFCTkFZKlRCYUJeakhiN15tRzAwMDAwJywKKyAgICAgICAgICAgIGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMCc6IGInZFMhQk5BWSpUQmFCXmpIYjdebUcwMDAwJywKKyAgICAgICAgICAgIGIiIiJCb3VuZGFyeTpceDAwXHgwMFx4MDBceDAwIiIiOiBiIiIiTFRgMCRXTU9pN0lzZ0N3MDAiIiIsCisgICAgICAgICAgICBiJ1NwYWNlIGNvbXByOiAgICAnOiBiJ1EqZEVwV2d1ZzNaRSRpckFScihoJywKKyAgICAgICAgICAgIGInXHhmZic6IGIne3snLAorICAgICAgICAgICAgYidceGZmJyoyOiBiJ3xOaicsCisgICAgICAgICAgICBiJ1x4ZmYnKjM6IGInfE5zOScsCisgICAgICAgICAgICBiJ1x4ZmYnKjQ6IGInfE5zQzAnLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGRhdGEsIHJlcyBpbiB0ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShkYXRhKSwgcmVzKQorCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmI4NWVuY29kZSwgYiJ3d3cucHl0aG9uLm9yZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjWHhMI2FDdmxTWipER2NhJVQnKQorCisgICAgZGVmIHRlc3RfYTg1ZGVjb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0cyA9IHsKKyAgICAgICAgICAgIGInJzogYicnLAorICAgICAgICAgICAgYidHQlxcNmBFLVpQPURmLjFHRWI+JzogYid3d3cucHl0aG9uLm9yZycsCisgICAgICAgICAgICBiIiIiISAhICogLSciXG5cdFx0OWV1XHJcbjcjICBSTFx2aEckazNbVyYub05nJ0dWQiIoYD01MiokJCIiIgorICAgICAgICAgICAgICAgYiIiIihCKzxfcFIsVUZjYi1uLVZyLzFpSi0wSlA9PTFjNzBNMyZzI100P1lrbTVYQF8oNnEnUjg4NGNFIiIiCisgICAgICAgICAgICAgICBiIiIiSDlNSjhYOmYxK2g8KWx0Iz1CU2czPls6WkM/dCFNU0E3XUBjQlBEM3NDaSsnLkUsZm8+RkVNYk4iIiIKKyAgICAgICAgICAgICAgIGIiIiJHXjRVXkkhcEhuSjpXPClLUz4vOUxsJSJJTi9gallPSEddaVBhLlEkUiRqRDRTPVE3RFRWOCpUVSIiIgorICAgICAgICAgICAgICAgYiIiIm5zcmRXMlpldFhLQVkvWWQoTD9bJ2Q/T1xcQEsyX11ZMiVvXnFtbipgNVRhOmFOO1RKYmciR1pkIiIiCisgICAgICAgICAgICAgICBiIiIiKl46amVDRS4lZlxcLCE1Z3RnaUVpOE5cXFVqUTVPZWtpcUJ1bS1YNjBuRj8pQG9fJXFQcSJhZGAiIiIKKyAgICAgICAgICAgICAgIGIiIiJyO0hUIiIiOiBieXRlcyhyYW5nZSgyNTUpKSwKKyAgICAgICAgICAgIGIiIiJAOkVfV0FTLFJnQmtoRiJEL085MkVINixCRmBxdFJIJFZiQzZVWEA0N24/M0Q5MiYmVDpKYW5kO2MiIiIKKyAgICAgICAgICAgICAgICBiIiIiSGF0PScvVS8wSlA9PTFjNzBNMyZyLUksOzxGTi5PWmAtM11vU1cvZytBKEhbUCIiIjoKKyAgICAgICAgICAgICAgICBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNCcKKyAgICAgICAgICAgICAgICBiJzU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30nLAorICAgICAgICAgICAgYidESnBZOkA6V25fREooUlMnOiBiJ25vIHBhZGRpbmcuLicsCisgICAgICAgICAgICBiJ0g9Xyw4K0NmPixFLG9OMkYob1Exeic6IGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidIPV8sOCtDZj4sRSxvTjJGKG9RMSEhISEnOiBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYic2PnEhYUE3OU0oM1dLLVshISc6IGIiQm91bmRhcnk6XHgwMFx4MDBceDAwXHgwMCIsCisgICAgICAgICAgICBiJztmSC9UQUtZSyREL2FNVis8VmRMJzogYidTcGFjZSBjb21wcjogICAgJywKKyAgICAgICAgICAgIGIncnInOiBiJ1x4ZmYnLAorICAgICAgICAgICAgYidzOE4nOiBiJ1x4ZmYnKjIsCisgICAgICAgICAgICBiJ3M4VyonOiBiJ1x4ZmYnKjMsCisgICAgICAgICAgICBiJ3M4Vy0hJzogYidceGZmJyo0LAorICAgICAgICAgICAgfQorCisgICAgICAgIGZvciBkYXRhLCByZXMgaW4gdGVzdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoZGF0YSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoZGF0YSwgYWRvYmU9RmFsc2UpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGRhdGEuZGVjb2RlKCJhc2NpaSIpLCBhZG9iZT1GYWxzZSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYic8ficgKyBkYXRhICsgYid+PicsIGFkb2JlPVRydWUpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKCc8fiVzfj4nICUgZGF0YS5kZWNvZGUoImFzY2lpIiksIGFkb2JlPVRydWUpLAorICAgICAgICAgICAgICAgcmVzLCBkYXRhKQorCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYid5eScsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJyAnKjgpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYid5KzxWZCcsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJyAnKjcpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYid5KzxVJywgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGInICcqNikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ3krOScsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJyAnKjUpCisKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYTg1ZGVjb2RlLCBiJ0dCXFw2YEUtWlA9RGYuMUdFYj4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIid3d3LnB5dGhvbi5vcmciKQorCisgICAgZGVmIHRlc3RfYjg1ZGVjb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0cyA9IHsKKyAgICAgICAgICAgIGInJzogYicnLAorICAgICAgICAgICAgYidjWHhMI2FDdmxTWipER2NhJVQnOiBiJ3d3dy5weXRob24ub3JnJywKKyAgICAgICAgICAgIGIiIiIwMDlDNjFPKX5NMm5oLWMzPUl3czVEXmorNmNyWDE3I1NLSDkzMzdYIiIiCisgICAgICAgICAgICAgICAgYiIiIkFSIV9uQnFiJiVDQENye0VHO2ZDRmZsU1NHJk1GaUk1fDJ5SlV1PT9LdFYhN0xgNm5OTkomYWQiIiIKKyAgICAgICAgICAgICAgICBiIiIiT2lmTnRQKkdBLVI4Pn0yU1hvK0lUd1B2WVV9MGlvV015ViZYbFpJfFk7QTZEYUIqXlRiYWklaiIiIgorICAgICAgICAgICAgICAgIGIiIiJjekpxemUwX2RAZlBzUjhnb1RFT2g+NDFlakUjPHVrZGN5O2wkRG0zbjM8WkpvU21NWnByTjlwIiIiCisgICAgICAgICAgICAgICAgYiIiInFAfHsoc0h2KX10Z1d1RXUoN2hVdzYoVWt4VmdIIXl1SDReemA/QDkjS3AkUCRqUXBmJSsxY3YiIiIKKyAgICAgICAgICAgICAgICBiIiIiKDl6UDwpWWFENCp4QjBLK30rO2E7Tmp4cTxtS2spPTtgWH4/Q3RMRkBiVThWXiE0YGxgMSQoIyIiIgorICAgICAgICAgICAgICAgIGIiIiJ7UWRwIiIiOiBieXRlcyhyYW5nZSgyNTUpKSwKKyAgICAgICAgICAgIGIiIiJWUGEhc1dvQm4rWD0tYjFaRWtPSGFkTEJYYiNgfW5kM3IlWUxxdFZKTUBVSVpPSDU1cFBmJEAoIiIiCisgICAgICAgICAgICAgICAgYiIiIlEmZCR9UzZFcUVGZmxTU0cmTUZpSTV7Q2VCUVJiakRrdiNDSXleb3NFK0FXN2R3bCIiIjoKKyAgICAgICAgICAgICAgICBiIiIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIiIgorICAgICAgICAgICAgICAgIGIiIiIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iIiIsCisgICAgICAgICAgICBiJ1pmX3VQVlBzQCFaZjdubyc6IGInbm8gcGFkZGluZy4uJywKKyAgICAgICAgICAgIGInZFMhQk5BWSpUQmFCXmpIYjdebUcwMDAwMCc6IGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidkUyFCTkFZKlRCYUJeakhiN15tRzAwMDAnOiBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYiIiIkxUYDAkV01PaTdJc2dDdzAwIiIiOiBiIiIiQm91bmRhcnk6XHgwMFx4MDBceDAwXHgwMCIiIiwKKyAgICAgICAgICAgIGInUSpkRXBXZ3VnM1pFJGlyQVJyKGgnOiBiJ1NwYWNlIGNvbXByOiAgICAnLAorICAgICAgICAgICAgYid7eyc6IGInXHhmZicsCisgICAgICAgICAgICBiJ3xOaic6IGInXHhmZicqMiwKKyAgICAgICAgICAgIGInfE5zOSc6IGInXHhmZicqMywKKyAgICAgICAgICAgIGInfE5zQzAnOiBiJ1x4ZmYnKjQsCisgICAgICAgIH0KKworICAgICAgICBmb3IgZGF0YSwgcmVzIGluIHRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGRhdGEpLCByZXMpCisgICAgICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGRhdGEuZGVjb2RlKCJhc2NpaSIpKSwgcmVzKQorCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmI4NWRlY29kZSwgYidjWHhMI2FDdmxTWipER2NhJVQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIid3d3LnB5dGhvbi5vcmciKQorCisgICAgZGVmIHRlc3RfYTg1X3BhZGRpbmcoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4IiwgcGFkPVRydWUpLCBiJ0dRN15EJykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInh4IiwgcGFkPVRydWUpLCBiIkdeJzJnIikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInh4eCIsIHBhZD1UcnVlKSwgYidHXitINScpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4eHh4IiwgcGFkPVRydWUpLCBiJ0deK0lYJykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInh4eHh4IiwgcGFkPVRydWUpLCBiJ0deK0lYR1E3XkQnKQorCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYidHUTdeRCcpLCBiInhceDAwXHgwMFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGIiR14nMmciKSwgYiJ4eFx4MDBceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ0deK0g1JyksIGIieHh4XHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYidHXitJWCcpLCBiInh4eHgiKQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGInR14rSVhHUTdeRCcpLCBiInh4eHh4XHgwMFx4MDBceDAwIikKKworICAgIGRlZiB0ZXN0X2I4NV9wYWRkaW5nKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieCIsIHBhZD1UcnVlKSwgYidjbU16WicpCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4eCIsIHBhZD1UcnVlKSwgYidjejZIKycpCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4eHgiLCBwYWQ9VHJ1ZSksIGInY3pBZEsnKQorICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieHh4eCIsIHBhZD1UcnVlKSwgYidjekFldCcpCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4eHh4eCIsIHBhZD1UcnVlKSwgYidjekFldGNtTXpaJykKKworICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY21NelonKSwgYiJ4XHgwMFx4MDBceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2N6NkgrJyksIGIieHhceDAwXHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoYidjekFkSycpLCBiInh4eFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY3pBZXQnKSwgYiJ4eHh4IikKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2N6QWV0Y21NelonKSwgYiJ4eHh4eFx4MDBceDAwXHgwMCIpCisKKyAgICBkZWYgdGVzdF9hODVkZWNvZGVfZXJyb3JzKHNlbGYpOgorICAgICAgICBpbGxlZ2FsID0gKHNldChyYW5nZSgzMikpIHwgc2V0KHJhbmdlKDExOCwgMjU2KSkpIC0gc2V0KGInIFx0XG5cclx2JykKKyAgICAgICAgZm9yIGMgaW4gaWxsZWdhbDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXNnPWJ5dGVzKFtjXSkpOgorICAgICAgICAgICAgICAgIGJhc2U2NC5hODVkZWNvZGUoYichISEhJyArIGJ5dGVzKFtjXSkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1zZz1ieXRlcyhbY10pKToKKyAgICAgICAgICAgICAgICBiYXNlNjQuYTg1ZGVjb2RlKGInISEhIScgKyBieXRlcyhbY10pLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXNnPWJ5dGVzKFtjXSkpOgorICAgICAgICAgICAgICAgIGJhc2U2NC5hODVkZWNvZGUoYic8fiEhISEnICsgYnl0ZXMoW2NdKSArIGInfj4nLCBhZG9iZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibWFsZm9ybWVkIiwgYWRvYmU9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8fnN0aWxsIG1hbGZvcm1lZCIsIGFkb2JlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWxzbyBtYWxmb3JtZWR+PiIsIGFkb2JlPVRydWUpCisKKyAgICAgICAgIyBXaXRoIGFkb2JlPUZhbHNlICh0aGUgZGVmYXVsdCksIEFkb2JlIGZyYW1pbmcgbWFya2VycyBhcmUgZGlzYWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjx+fj4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjx+fj4iLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgYmFzZTY0LmE4NWRlY29kZShiIjx+fj4iLCBhZG9iZT1UcnVlKSAgIyBzYW5pdHkgY2hlY2sKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiY3giLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhYmNkZXkiLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhIGJcbmMiLCBhZG9iZT1GYWxzZSwgaWdub3JlY2hhcnM9YiIiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGIncycsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3M4JywgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGInczhXJywgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGInczhXLScsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3M4Vy0iJywgYWRvYmU9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9iODVkZWNvZGVfZXJyb3JzKHNlbGYpOgorICAgICAgICBpbGxlZ2FsID0gbGlzdChyYW5nZSgzMykpICsgXAorICAgICAgICAgICAgICAgICAgbGlzdChiJyJcJywuLzpbXFxdJykgKyBcCisgICAgICAgICAgICAgICAgICBsaXN0KHJhbmdlKDEyOCwgMjU2KSkKKyAgICAgICAgZm9yIGMgaW4gaWxsZWdhbDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXNnPWJ5dGVzKFtjXSkpOgorICAgICAgICAgICAgICAgIGJhc2U2NC5iODVkZWNvZGUoYicwMDAwJyArIGJ5dGVzKFtjXSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8TicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5iODVkZWNvZGUsIGInfE5zJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8TnNDJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8TnNDMScpCiAKICAgICBkZWYgdGVzdF9kZWNvZGVfbm9uYXNjaWlfc3RyKHNlbGYpOgogICAgICAgICBkZWNvZGVfZnVuY3MgPSAoYmFzZTY0LmI2NGRlY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYjMyZGVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmIxNmRlY29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iMTZkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYjg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmE4NWRlY29kZSkKICAgICAgICAgZm9yIGYgaW4gZGVjb2RlX2Z1bmNzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZiwgJ3dpdGggbm9uLWFzY2lpIFx4Y2InKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jpc2VjdC5weSBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CmluZGV4IDdiOWJkMTkuLjU4MGE5NjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CkBAIC03LDcgKzcsNyBAQAogY19iaXNlY3QgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2Jpc2VjdCcsIGZyZXNoPVsnX2Jpc2VjdCddKQogCiBjbGFzcyBSYW5nZShvYmplY3QpOgotICAgICIiIkEgdHJpdmlhbCByYW5nZSgpLWxpa2Ugb2JqZWN0IHdpdGhvdXQgYW55IGludGVnZXIgd2lkdGggbGltaXRhdGlvbnMuIiIiCisgICAgIiIiQSB0cml2aWFsIHJhbmdlKCktbGlrZSBvYmplY3QgdGhhdCBoYXMgYW4gaW5zZXJ0KCkgbWV0aG9kLiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgc3RvcCk6CiAgICAgICAgIHNlbGYuc3RhcnQgPSBzdGFydAogICAgICAgICBzZWxmLnN0b3AgPSBzdG9wCkBAIC0xMjAsMTAgKzEyMCwxMCBAQAogICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2xvKHNlbGYpOgogICAgICAgICAjIElzc3VlIDMzMDEKICAgICAgICAgbW9kID0gc2VsZi5tb2R1bGUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5iaXNlY3RfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmluc29ydF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKIAogICAgIGRlZiB0ZXN0X2xhcmdlX3JhbmdlKHNlbGYpOgogICAgICAgICAjIElzc3VlIDEzNDk2CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weSBiL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CmluZGV4IDA0ZTNmNjEuLjE2Njc4NDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CkBAIC00MjkwLDkgKzQyOTAsNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgbWVtb3J5dmlldywgeCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEJ1ZmZlclByb3RvY29sKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weSBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQppbmRleCBjMzQyYTQzLi5iNTYxYTZmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CkBAIC0xNiw2ICsxNiw3IEBACiBpbXBvcnQgd2FybmluZ3MKIGZyb20gb3BlcmF0b3IgaW1wb3J0IG5lZwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rLCAgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncworZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIHRyeToKICAgICBpbXBvcnQgcHR5LCBzaWduYWwKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTQ2NCw2ICs0NjUsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsIGJvbVs6Ml0gKyBiJ2EnKQogCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGV2YWwsICJmb28iLCB7fSwgWCgpKQorCiAgICAgZGVmIHRlc3RfZ2VuZXJhbF9ldmFsKHNlbGYpOgogICAgICAgICAjIFRlc3RzIHRoYXQgZ2VuZXJhbCBtYXBwaW5ncyBjYW4gYmUgdXNlZCBmb3IgdGhlIGxvY2FscyBhcmd1bWVudAogCkBAIC01NzksNyArNTg1LDEwIEBACiAgICAgICAgICAgICAgICAgcmFpc2UgZnJvemVuZGljdF9lcnJvcigiZnJvemVuZGljdCBpcyByZWFkb25seSIpCiAKICAgICAgICAgIyByZWFkLW9ubHkgYnVpbHRpbnMKLSAgICAgICAgZnJvemVuX2J1aWx0aW5zID0gZnJvemVuZGljdChfX2J1aWx0aW5zX18pCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX19idWlsdGluc19fLCB0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fLl9fZGljdF9fKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJvemVuX2J1aWx0aW5zID0gZnJvemVuZGljdChfX2J1aWx0aW5zX18pCiAgICAgICAgIGNvZGUgPSBjb21waWxlKCJfX2J1aWx0aW5zX19bJ3N1cGVyZ2xvYmFsJ109MjsgcHJpbnQoc3VwZXJnbG9iYWwpIiwgInRlc3QiLCAiZXhlYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZyb3plbmRpY3RfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMsIGNvZGUsIHsnX19idWlsdGluc19fJzogZnJvemVuX2J1aWx0aW5zfSkKQEAgLTgzOSw4ICs4NDgsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMSwgMi4wLCAzKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMS4wLCAyLCAzKSwgMykKIAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1heCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXgsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXgsICgpKQorICAgICAgICBjbGFzcyBCYWRTZXE6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF4LCBCYWRTZXEoKSkKKwogICAgICAgICBmb3Igc3RtdCBpbiAoCiAgICAgICAgICAgICAibWF4KGtleT1pbnQpIiwgICAgICAgICAgICAgICAgICMgbm8gYXJncworICAgICAgICAgICAgIm1heChkZWZhdWx0PU5vbmUpIiwKKyAgICAgICAgICAgICJtYXgoMSwgMiwgZGVmYXVsdD1Ob25lKSIsICAgICAgIyByZXF1aXJlIGNvbnRhaW5lciBmb3IgZGVmYXVsdAorICAgICAgICAgICAgIm1heChkZWZhdWx0PU5vbmUsIGtleT1pbnQpIiwKICAgICAgICAgICAgICJtYXgoMSwga2V5PWludCkiLCAgICAgICAgICAgICAgIyBzaW5nbGUgYXJnIG5vdCBpdGVyYWJsZQogICAgICAgICAgICAgIm1heCgxLCAyLCBrZXlzdG9uZT1pbnQpIiwgICAgICAjIHdyb25nIGtleXdvcmQKICAgICAgICAgICAgICJtYXgoMSwgMiwga2V5PWludCwgYWJjPWludCkiLCAgIyB0d28gbWFueSBrZXl3b3JkcwpAQCAtODU3LDYgKzg3NywxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwyKSwga2V5PW5lZyksIDEpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMSwgMiwga2V5PW5lZyksIDEpICAgICAjIHR3byBlbGVtcwogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KCgpLCBkZWZhdWx0PU5vbmUpLCBOb25lKSAgICAjIHplcm8gZWxlbSBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwpLCBkZWZhdWx0PU5vbmUpLCAxKSAgICAgIyBvbmUgZWxlbSBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwyKSwgZGVmYXVsdD1Ob25lKSwgMikgICAgIyB0d28gZWxlbSBpdGVyYWJsZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KCgpLCBkZWZhdWx0PTEsIGtleT1uZWcpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwgMiksIGRlZmF1bHQ9Mywga2V5PW5lZyksIDEpCisKICAgICAgICAgZGF0YSA9IFtyYW5kb20ucmFuZHJhbmdlKDIwMCkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0KICAgICAgICAga2V5cyA9IGRpY3QoKGVsZW0sIHJhbmRvbS5yYW5kcmFuZ2UoNTApKSBmb3IgZWxlbSBpbiBkYXRhKQogICAgICAgICBmID0ga2V5cy5fX2dldGl0ZW1fXwpAQCAtODgzLDYgKzkxMCw5IEBACiAKICAgICAgICAgZm9yIHN0bXQgaW4gKAogICAgICAgICAgICAgIm1pbihrZXk9aW50KSIsICAgICAgICAgICAgICAgICAjIG5vIGFyZ3MKKyAgICAgICAgICAgICJtaW4oZGVmYXVsdD1Ob25lKSIsCisgICAgICAgICAgICAibWluKDEsIDIsIGRlZmF1bHQ9Tm9uZSkiLCAgICAgICMgcmVxdWlyZSBjb250YWluZXIgZm9yIGRlZmF1bHQKKyAgICAgICAgICAgICJtaW4oZGVmYXVsdD1Ob25lLCBrZXk9aW50KSIsCiAgICAgICAgICAgICAibWluKDEsIGtleT1pbnQpIiwgICAgICAgICAgICAgICMgc2luZ2xlIGFyZyBub3QgaXRlcmFibGUKICAgICAgICAgICAgICJtaW4oMSwgMiwga2V5c3RvbmU9aW50KSIsICAgICAgIyB3cm9uZyBrZXl3b3JkCiAgICAgICAgICAgICAibWluKDEsIDIsIGtleT1pbnQsIGFiYz1pbnQpIiwgICMgdHdvIG1hbnkga2V5d29yZHMKQEAgLTg5OSw2ICs5MjksMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsMiksIGtleT1uZWcpLCAyKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKDEsIDIsIGtleT1uZWcpLCAyKSAgICAgIyB0d28gZWxlbXMKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigoKSwgZGVmYXVsdD1Ob25lKSwgTm9uZSkgICAgIyB6ZXJvIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsKSwgZGVmYXVsdD1Ob25lKSwgMSkgICAgICMgb25lIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsMiksIGRlZmF1bHQ9Tm9uZSksIDEpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigoKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsIDIpLCBkZWZhdWx0PTEsIGtleT1uZWcpLCAyKQorCiAgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRyYW5nZSgyMDApIGZvciBpIGluIHJhbmdlKDEwMCldCiAgICAgICAgIGtleXMgPSBkaWN0KChlbGVtLCByYW5kb20ucmFuZHJhbmdlKDUwKSkgZm9yIGVsZW0gaW4gZGF0YSkKICAgICAgICAgZiA9IGtleXMuX19nZXRpdGVtX18KQEAgLTk0MCwyOSArOTc3LDI1IEBACiAgICAgZGVmIHdyaXRlX3Rlc3RmaWxlKHNlbGYpOgogICAgICAgICAjIE5CIHRoZSBmaXJzdCA0IGxpbmVzIGFyZSBhbHNvIHVzZWQgdG8gdGVzdCBpbnB1dCwgYmVsb3cKICAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3cnKQotICAgICAgICB0cnk6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgd2l0aCBmcDoKICAgICAgICAgICAgIGZwLndyaXRlKCcxKzFcbicpCiAgICAgICAgICAgICBmcC53cml0ZSgnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpCiAgICAgICAgICAgICBmcC53cml0ZSgnLlxuJykKICAgICAgICAgICAgIGZwLndyaXRlKCdEZWFyIEpvaG5cbicpCiAgICAgICAgICAgICBmcC53cml0ZSgnWFhYJyoxMDApCiAgICAgICAgICAgICBmcC53cml0ZSgnWVlZJyoxMDApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9vcGVuKHNlbGYpOgogICAgICAgICBzZWxmLndyaXRlX3Rlc3RmaWxlKCkKICAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3InKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDQpLCAnMSsxXG4nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgpLCAnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy5cbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDQpLCAnRGVhcicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDEwMCksICcgSm9oblxuJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZCgzMDApLCAnWFhYJyoxMDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWQoMTAwMCksICdZWVknKjEwMCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgIHVubGluayhURVNURk4pCiAKICAgICBkZWYgdGVzdF9vcGVuX2RlZmF1bHRfZW5jb2Rpbmcoc2VsZik6CiAgICAgICAgIG9sZF9lbnZpcm9uID0gZGljdChvcy5lbnZpcm9uKQpAQCAtOTc3LDE1ICsxMDEwLDE3IEBACiAgICAgICAgICAgICBzZWxmLndyaXRlX3Rlc3RmaWxlKCkKICAgICAgICAgICAgIGN1cnJlbnRfbG9jYWxlX2VuY29kaW5nID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKQogICAgICAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3cnKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBmcDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLmVuY29kaW5nLCBjdXJyZW50X2xvY2FsZV9lbmNvZGluZykKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKICAgICAgICAgICAgIG9zLmVudmlyb24udXBkYXRlKG9sZF9lbnZpcm9uKQogCisgICAgZGVmIHRlc3Rfb3Blbl9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGZpbGVvYmogPSBvcGVuKF9fZmlsZV9fKQorICAgICAgICB3aXRoIGZpbGVvYmo6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShmaWxlb2JqLmZpbGVubygpKSkKKwogICAgIGRlZiB0ZXN0X29yZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmQoJyAnKSwgMzIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkKCdBJyksIDY1KQpAQCAtMTA5Niw3ICsxMTMxLDYgQEAKICAgICAgICAgICAgIHN5cy5zdGRpbiA9IHNhdmVzdGRpbgogICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVzdGRvdXQKICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgIHVubGluayhURVNURk4pCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhwdHksICJ0aGUgcHR5IGFuZCBzaWduYWwgbW9kdWxlcyBtdXN0IGJlIGF2YWlsYWJsZSIpCiAgICAgZGVmIGNoZWNrX2lucHV0X3R0eShzZWxmLCBwcm9tcHQsIHRlcm1pbmFsX2lucHV0LCBzdGRpb19lbmNvZGluZz1Ob25lKToKQEAgLTE0NzYsMTcgKzE1MTAsMTEgQEAKICAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAjIElzc3VlICM3OTk0OiBvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMKICAgICAgICAgIyAgZGVwcmVjYXRlZAotICAgICAgICBkZWYgdGVzdF9kZXByZWNhdGVkX2Zvcm1hdF9zdHJpbmcob2JqLCBmbXRfc3RyLCBzaG91bGRfcmFpc2Vfd2FybmluZyk6Ci0gICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIiwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgICAgIGZvcm1hdChvYmosIGZtdF9zdHIpCi0gICAgICAgICAgICBpZiBzaG91bGRfcmFpc2Vfd2FybmluZzoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod1swXS5tZXNzYWdlLCBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsIHN0cih3WzBdLm1lc3NhZ2UpKQorICAgICAgICBkZWYgdGVzdF9kZXByZWNhdGVkX2Zvcm1hdF9zdHJpbmcob2JqLCBmbXRfc3RyLCBzaG91bGRfcmFpc2UpOgorICAgICAgICAgICAgaWYgc2hvdWxkX3JhaXNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZm9ybWF0LCBvYmosIGZtdF9zdHIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQorICAgICAgICAgICAgICAgIGZvcm1hdChvYmosIGZtdF9zdHIpCiAKICAgICAgICAgZm10X3N0cnMgPSBbJycsICdzJ10KIApAQCAtMTU2NSwyMSArMTU5Myw0NSBAQAogICAgICAgICBkYXRhID0gJ1RoZSBxdWljayBCcm93biBmb3ggSnVtcGVkIG92ZXIgVGhlIGxhenkgRG9nJy5zcGxpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ydGVkLCBkYXRhLCBOb25lLCBsYW1iZGEgeCx5OiAwKQogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgdGVzdF9jbGFzc2VzID0gKEJ1aWx0aW5UZXN0LCBUZXN0U29ydGVkKQogCi0gICAgcnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCitjbGFzcyBTaHV0ZG93blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCi0gICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6Ci0gICAgICAgIGltcG9ydCBnYwotICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKLSAgICAgICAgICAgIHJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCi0gICAgICAgIHByaW50KGNvdW50cykKKyAgICBkZWYgdGVzdF9jbGVhbnVwKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxOTI1NTogYnVpbHRpbnMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCBzaHV0ZG93bgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBidWlsdGlucworICAgICAgICAgICAgaW1wb3J0IHN5cwogCisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiYmVmb3JlIikKKyAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IGJ1aWx0aW5zIHN0aWxsIGV4aXN0CisgICAgICAgICAgICAgICAgICAgIGxlbigoKSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoImFmdGVyIikKKworICAgICAgICAgICAgYyA9IEMoKQorICAgICAgICAgICAgIyBNYWtlIHRoaXMgbW9kdWxlIHN1cnZpdmUgdW50aWwgYnVpbHRpbnMgYW5kIHN5cyBhcmUgY2xlYW5lZAorICAgICAgICAgICAgYnVpbHRpbnMuaGVyZSA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXQorICAgICAgICAgICAgc3lzLmhlcmUgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KKyAgICAgICAgICAgICMgQ3JlYXRlIGEgcmVmZXJlbmNlIGxvb3Agc28gdGhhdCB0aGlzIG1vZHVsZSBuZWVkcyB0byBnbworICAgICAgICAgICAgIyB0aHJvdWdoIGEgR0MgcGhhc2UuCisgICAgICAgICAgICBoZXJlID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCisgICAgICAgICAgICAiIiIKKyAgICAgICAgIyBJc3N1ZSAjMjA1OTk6IEZvcmNlIEFTQ0lJIGVuY29kaW5nIHRvIGdldCBhIGNvZGVjIGltcGxlbWVudGVkIGluIEMsCisgICAgICAgICMgb3RoZXJ3aXNlIHRoZSBjb2RlYyBtYXkgYmUgdW5sb2FkZWQgYmVmb3JlIEMuX19kZWxfXygpIGlzIGNhbGxlZCwgYW5kCisgICAgICAgICMgc28gcHJpbnQoImJlZm9yZSIpIGZhaWxzIGJlY2F1c2UgdGhlIGNvZGVjIGNhbm5vdCBiZSB1c2VkIHRvIGVuY29kZQorICAgICAgICAjICJiZWZvcmUiIHRvIHN5cy5zdGRvdXQuZW5jb2RpbmcuIEZvciBleGFtcGxlLCBvbiBXaW5kb3dzLAorICAgICAgICAjIHN5cy5zdGRvdXQuZW5jb2RpbmcgaXMgdGhlIE9FTSBjb2RlIHBhZ2UgYW5kIHRoZXNlIGNvZGUgcGFnZXMgYXJlCisgICAgICAgICMgaW1wbGVtZW50ZWQgaW4gUHl0aG9uCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05JT0VOQ09ESU5HPSJhc2NpaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJiZWZvcmUiLCAiYWZ0ZXIiXSwgb3V0LmRlY29kZSgpLnNwbGl0bGluZXMoKSkKKworCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICBmcm9tIGRvY3Rlc3QgaW1wb3J0IERvY1Rlc3RTdWl0ZQorICAgIHRlc3RzLmFkZFRlc3QoRG9jVGVzdFN1aXRlKGJ1aWx0aW5zKSkKKyAgICByZXR1cm4gdGVzdHMKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ieXRlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKaW5kZXggM2MwOTE0MS4uZjM1MDIxMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CkBAIC0yODgsOCArMjg4LDIyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbihsc3QpLCBiImFiYyIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbih0dXBsZShsc3QpKSwgYiJhYmMiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4oaXRlcihsc3QpKSwgYiJhYmMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiLiIpLmpvaW4oW2IiYWIiLCBiImNkIl0pLCBiImFiLmNkIikKLSAgICAgICAgIyBYWFggbW9yZS4uLgorICAgICAgICBkb3Rfam9pbiA9IHNlbGYudHlwZTJ0ZXN0KGIiLjoiKS5qb2luCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2IiYWIiLCBiImNkIl0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW21lbW9yeXZpZXcoYiJhYiIpLCBiImNkIl0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2IiYWIiLCBtZW1vcnl2aWV3KGIiY2QiKV0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2J5dGVhcnJheShiImFiIiksIGIiY2QiXSksIGIiYWIuOmNkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3Rfam9pbihbYiJhYiIsIGJ5dGVhcnJheShiImNkIildKSwgYiJhYi46Y2QiKQorICAgICAgICAjIFN0cmVzcyBpdCB3aXRoIG1hbnkgaXRlbXMKKyAgICAgICAgc2VxID0gW2IiYWJjIl0gKiAxMDAwCisgICAgICAgIGV4cGVjdGVkID0gYiJhYmMiICsgYiIuOmFiYyIgKiA5OTkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3Rfam9pbihzZXEpLCBleHBlY3RlZCkKKyAgICAgICAgIyBFcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCB3aGVuIHNvbWUgaXRlbSBpbiB0aGUgbWlkZGxlIG9mIHRoZQorICAgICAgICAjIHNlcXVlbmNlIGhhcyB0aGUgd3JvbmcgdHlwZS4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZG90X2pvaW4oW2J5dGVhcnJheShiImFiIiksICJjZCIsIGIiZWYiXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZG90X2pvaW4oW21lbW9yeXZpZXcoYiJhYiIpLCAiY2QiLCBiImVmIl0pCiAKICAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQpAQCAtNzY1LDcgKzc3OSw3IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRmbikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6CkBAIC05MDEsNiArOTE1LDE1IEBACiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgICAgIGJbMzo0XSA9IGVsZW0KIAorICAgIGRlZiB0ZXN0X3NldHNsaWNlX2V4dGVuZChzZWxmKToKKyAgICAgICAgIyBFeGVyY2lzZSB0aGUgcmVzaXppbmcgbG9naWMgKHNlZSBpc3N1ZSAjMTkwODcpCisgICAgICAgIGIgPSBieXRlYXJyYXkocmFuZ2UoMTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBsaXN0KHJhbmdlKDEwMCkpKQorICAgICAgICBkZWwgYls6MTBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChyYW5nZSgxMCwgMTAwKSkpCisgICAgICAgIGIuZXh0ZW5kKHJhbmdlKDEwMCwgMTEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBsaXN0KHJhbmdlKDEwLCAxMTApKSkKKwogICAgIGRlZiB0ZXN0X2V4dGVuZGVkX3NldF9kZWxfc2xpY2Uoc2VsZik6CiAgICAgICAgIGluZGljZXMgPSAoMCwgTm9uZSwgMSwgMywgMTksIDMwMCwgMTw8MzMzLCAtMSwgLTIsIC0zMSwgLTMwMCkKICAgICAgICAgZm9yIHN0YXJ0IGluIGluZGljZXM6CkBAIC0xMjgwLDYgKzEzMDMsMTEgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBuZXd2YWwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsIGlzIG5vdCBuZXd2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcisnIHJldHVybmVkIHZhbCBvbiBhIG11dGFibGUgb2JqZWN0JykKKyAgICAgICAgc2VwID0gc2VsZi5tYXJzaGFsKGInJykKKyAgICAgICAgbmV3dmFsID0gc2VwLmpvaW4oW3ZhbF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBuZXd2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QodmFsLCBuZXd2YWwpCisKIAogY2xhc3MgRml4ZWRTdHJpbmdUZXN0KHRlc3Quc3RyaW5nX3Rlc3RzLkJhc2VUZXN0KToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iejIucHkgYi9MaWIvdGVzdC90ZXN0X2J6Mi5weQppbmRleCBjOGM5MzUxLi40MGQ4NDI1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J6Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J6Mi5weQpAQCAtMSw1ICsxLDUgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgYmlnbWVtdGVzdCwgXzRHCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgYmlnbWVtdGVzdCwgXzRHCiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwpAQCAtOCw2ICs4LDcgQEAKIGltcG9ydCByYW5kb20KIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdW5saW5rCiAKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCkBAIC0xOCwxMCArMTksMTAgQEAKIGJ6MiA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnYnoyJykKIGZyb20gYnoyIGltcG9ydCBCWjJGaWxlLCBCWjJDb21wcmVzc29yLCBCWjJEZWNvbXByZXNzb3IKIAotaGFzX2NtZGxpbmVfYnVuemlwMiA9IHN5cy5wbGF0Zm9ybSBub3QgaW4gKCJ3aW4zMiIsICJvczJlbXgiKQogCiBjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIkJhc2UgZm9yIG90aGVyIHRlc3RjYXNlcy4iCisKICAgICBURVhUX0xJTkVTID0gWwogICAgICAgICBiJ3Jvb3Q6eDowOjA6cm9vdDovcm9vdDovYmluL2Jhc2hcbicsCiAgICAgICAgIGInYmluOng6MToxOmJpbjovYmluOlxuJywKQEAgLTUxLDEzICs1MiwxNyBAQAogICAgIEJBRF9EQVRBID0gYid0aGlzIGlzIG5vdCBhIHZhbGlkIGJ6aXAyIGZpbGUnCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuZmlsZW5hbWUgPSBURVNURk4KKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IHN1cHBvcnQuVEVTVEZOCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNlbGYuZmlsZW5hbWUpOgogICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuZmlsZW5hbWUpCiAKLSAgICBpZiBoYXNfY21kbGluZV9idW56aXAyOgorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAjIGJ1bnppcDIgaXNuJ3QgYXZhaWxhYmxlIHRvIHJ1biBvbiBXaW5kb3dzLgorICAgICAgICBkZWYgZGVjb21wcmVzcyhzZWxmLCBkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBiejIuZGVjb21wcmVzcyhkYXRhKQorICAgIGVsc2U6CiAgICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgogICAgICAgICAgICAgcG9wID0gc3VicHJvY2Vzcy5Qb3BlbigiYnVuemlwMiIsIHNoZWxsPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKQEAgLTcxLDEzICs3Niw5IEBACiAgICAgICAgICAgICAgICAgcmV0ID0gYnoyLmRlY29tcHJlc3MoZGF0YSkKICAgICAgICAgICAgIHJldHVybiByZXQKIAotICAgIGVsc2U6Ci0gICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCi0gICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgotICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCiAKIGNsYXNzIEJaMkZpbGVUZXN0KEJhc2VUZXN0KToKLSAgICAiVGVzdCBCWjJGaWxlIHR5cGUgbWlzY2VsbGFuZW91cyBtZXRob2RzLiIKKyAgICAiVGVzdCB0aGUgQloyRmlsZSBjbGFzcy4iCiAKICAgICBkZWYgY3JlYXRlVGVtcEZpbGUoc2VsZiwgc3RyZWFtcz0xLCBzdWZmaXg9YiIiKToKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CkBAIC04NSwxOCArODYsMTIgQEAKICAgICAgICAgICAgIGYud3JpdGUoc3VmZml4KQogCiAgICAgZGVmIHRlc3RCYWRBcmdzKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKDEyMy40NTYpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCAieiIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCAicngiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgQloyRmlsZSgiL2Rldi9udWxsIiwgInJidCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCBjb21wcmVzc2xldmVsPTApCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCBjb21wcmVzc2xldmVsPTEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEJaMkZpbGUsIDEyMy40NTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCAieiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCAicngiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBCWjJGaWxlLCAiL2Rldi9udWxsIiwgInJidCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCBjb21wcmVzc2xldmVsPTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCBjb21wcmVzc2xldmVsPTEwKQogCiAgICAgZGVmIHRlc3RSZWFkKHNlbGYpOgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKQEAgLTIzMiw5ICsyMjcsOCBAQAogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKICAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKICAgICAgICAgYnoyZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYuX19uZXh0X18pCi0gICAgICAgICMgVGhpcyBjYWxsIHdpbGwgZGVhZGxvY2sgaWYgdGhlIGFib3ZlIC5fX25leHRfXyBjYWxsIGZhaWxlZCB0bwotICAgICAgICAjIHJlbGVhc2UgdGhlIGxvY2suCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIGJ6MmYpCisgICAgICAgICMgVGhpcyBjYWxsIHdpbGwgZGVhZGxvY2sgaWYgdGhlIGFib3ZlIGNhbGwgZmFpbGVkIHRvIHJlbGVhc2UgdGhlIGxvY2suCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYucmVhZGxpbmVzKQogCiAgICAgZGVmIHRlc3RXcml0ZShzZWxmKToKQEAgLTI3OCw4ICsyNzIsOCBAQAogICAgICAgICAgICAgYnoyZi53cml0ZShiImFiYyIpCiAKICAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgYnoyZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGUsIGIiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiejJmLndyaXRlbGluZXMsIFtiImEiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ6MmYud3JpdGUsIGIiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBiejJmLndyaXRlbGluZXMsIFtiImEiXSkKIAogICAgIGRlZiB0ZXN0QXBwZW5kKHNlbGYpOgogICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKSBhcyBiejJmOgpAQCAtMzk3LDcgKzM5MSw3IEBACiAgICAgICAgICAgICBiejJmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5zZWVrYWJsZSkKIAotICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksIG1vZGU9InciKQorICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksICJ3IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiejJmLnNlZWthYmxlKCkpCiAgICAgICAgIGZpbmFsbHk6CkBAIC00MjMsNyArNDE3LDcgQEAKICAgICAgICAgICAgIGJ6MmYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLnJlYWRhYmxlKQogCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgbW9kZT0idyIpCisgICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgInciKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ6MmYucmVhZGFibGUoKSkKICAgICAgICAgZmluYWxseToKQEAgLTQ0MCw3ICs0MzQsNyBAQAogICAgICAgICAgICAgYnoyZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYud3JpdGFibGUpCiAKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCBtb2RlPSJ3IikKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCAidyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiejJmLndyaXRhYmxlKCkpCiAgICAgICAgIGZpbmFsbHk6CkBAIC00NTQsNyArNDQ4LDcgQEAKICAgICAgICAgICAgIGRlbCBvCiAKICAgICBkZWYgdGVzdE9wZW5Ob25leGlzdGVudChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgQloyRmlsZSwgIi9ub24vZXhpc3RlbnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBCWjJGaWxlLCAiL25vbi9leGlzdGVudCIpCiAKICAgICBkZWYgdGVzdFJlYWRsaW5lc05vTmV3bGluZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTE5MTA0MzogcmVhZGxpbmVzKCkgZmFpbHMgb24gYSBmaWxlIGNvbnRhaW5pbmcgbm8gbmV3bGluZS4KQEAgLTQ5NCw3ICs0ODgsNyBAQAogICAgICAgICAjIElzc3VlICM3MjA1OiBVc2luZyBhIEJaMkZpbGUgZnJvbSBzZXZlcmFsIHRocmVhZHMgc2hvdWxkbid0IGRlYWRsb2NrLgogICAgICAgICBkYXRhID0gYiIxIiAqIDIqKjIwCiAgICAgICAgIG50aHJlYWRzID0gMTAKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgYXMgZjoKICAgICAgICAgICAgIGRlZiBjb21wKCk6CiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKQEAgLTUwNSwyOCArNDk5LDI3IEBACiAgICAgICAgICAgICAgICAgdC5qb2luKCkKIAogICAgIGRlZiB0ZXN0V2l0aG91dFRocmVhZGluZyhzZWxmKToKLSAgICAgICAgYnoyID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCJiejIiLCBibG9ja2VkPSgidGhyZWFkaW5nIiwpKQotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgIG1vZHVsZSA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgiYnoyIiwgYmxvY2tlZD0oInRocmVhZGluZyIsKSkKKyAgICAgICAgd2l0aCBtb2R1bGUuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZShiImFiYyIpCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgd2l0aCBtb2R1bGUuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJhYmMiKQogCiAgICAgZGVmIHRlc3RNaXhlZEl0ZXJhdGlvbkFuZFJlYWRzKHNlbGYpOgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKICAgICAgICAgbGluZWxlbiA9IGxlbihzZWxmLlRFWFRfTElORVNbMF0pCiAgICAgICAgIGhhbGZsZW4gPSBsaW5lbGVuIC8vIDIKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKICAgICAgICAgICAgIGJ6MmYucmVhZChoYWxmbGVuKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGJ6MmYpLCBzZWxmLlRFWFRfTElORVNbMF1baGFsZmxlbjpdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUW2xpbmVsZW46XSkKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKICAgICAgICAgICAgIGJ6MmYucmVhZGxpbmUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGJ6MmYpLCBzZWxmLlRFWFRfTElORVNbMV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmUoKSwgc2VsZi5URVhUX0xJTkVTWzJdKQotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkbGluZXMoKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uKToKLSAgICAgICAgICAgICAgICBuZXh0KGJ6MmYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBiejJmKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWRsaW5lcygpLCBbXSkKIAogICAgIGRlZiB0ZXN0TXVsdGlTdHJlYW1PcmRlcmluZyhzZWxmKToKQEAgLTU5NCw2ICs1ODcsMjAgQEAKICAgICAgICAgICAgICAgICBiejJmLnNlZWsoLTE1MCwgMSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbNTAwLTE1MDpdKQogCisgICAgZGVmIHRlc3RfcmVhZF90cnVuY2F0ZWQoc2VsZik6CisgICAgICAgICMgRHJvcCB0aGUgZW9zX21hZ2ljIGZpZWxkICg2IGJ5dGVzKSBhbmQgQ1JDICg0IGJ5dGVzKS4KKyAgICAgICAgdHJ1bmNhdGVkID0gc2VsZi5EQVRBWzotMTBdCisgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQorICAgICAgICB3aXRoIEJaMkZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQobGVuKHNlbGYuVEVYVCkpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorICAgICAgICAjIEluY29tcGxldGUgNC1ieXRlIGZpbGUgaGVhZGVyLCBhbmQgYmxvY2sgaGVhZGVyIG9mIGF0IGxlYXN0IDE0NiBiaXRzLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgyMik6CisgICAgICAgICAgICB3aXRoIEJaMkZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWRbOmldKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorCisKIGNsYXNzIEJaMkNvbXByZXNzb3JUZXN0KEJhc2VUZXN0KToKICAgICBkZWYgdGVzdENvbXByZXNzKHNlbGYpOgogICAgICAgICBiejJjID0gQloyQ29tcHJlc3NvcigpCkBAIC03NDAsOTcgKzc0NywxMjIgQEAKIAogCiBjbGFzcyBPcGVuVGVzdChCYXNlVGVzdCk6CisgICAgIlRlc3QgdGhlIG9wZW4gZnVuY3Rpb24uIgorCisgICAgZGVmIG9wZW4oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIGJ6Mi5vcGVuKCphcmdzLCAqKmt3YXJncykKKwogICAgIGRlZiB0ZXN0X2JpbmFyeV9tb2RlcyhzZWxmKToKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgImFiIikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCisgICAgICAgIGZvciBtb2RlIGluICgid2IiLCAieGIiKToKKyAgICAgICAgICAgIGlmIG1vZGUgPT0gInhiIjoKKyAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgImFiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUICogMikKIAogICAgIGRlZiB0ZXN0X2ltcGxpY2l0X2JpbmFyeV9tb2RlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IGltcGxpY2l0IGJpbmFyeSBtb2RlcyAobm8gImIiIG9yICJ0IiBpbiBtb2RlIHN0cmluZykuCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInciKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAiYSIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQgKiAyKQorICAgICAgICBmb3IgbW9kZSBpbiAoInciLCAieCIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieCI6CisgICAgICAgICAgICAgICAgdW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiciIpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQgKiAyKQogCiAgICAgZGVmIHRlc3RfdGV4dF9tb2RlcyhzZWxmKToKICAgICAgICAgdGV4dCA9IHNlbGYuVEVYVC5kZWNvZGUoImFzY2lpIikKICAgICAgICAgdGV4dF9uYXRpdmVfZW9sID0gdGV4dC5yZXBsYWNlKCJcbiIsIG9zLmxpbmVzZXApCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInd0IikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJhdCIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHRleHQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgiYXNjaWkiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHRleHRfbmF0aXZlX2VvbCAqIDIpCisgICAgICAgIGZvciBtb2RlIGluICgid3QiLCAieHQiKToKKyAgICAgICAgICAgIGlmIG1vZGUgPT0gInh0IjoKKyAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoImFzY2lpIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgImF0IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRleHQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgiYXNjaWkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wgKiAyKQorCisgICAgZGVmIHRlc3RfeF9tb2RlKHNlbGYpOgorICAgICAgICBmb3IgbW9kZSBpbiAoIngiLCAieGIiLCAieHQiKToKKyAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfZmlsZW9iaihzZWxmKToKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oQnl0ZXNJTyhzZWxmLkRBVEEpLCAiciIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oQnl0ZXNJTyhzZWxmLkRBVEEpLCAicmIiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCiAgICAgICAgIHRleHQgPSBzZWxmLlRFWFQuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oQnl0ZXNJTyhzZWxmLkRBVEEpLCAicnQiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJydCIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQogCiAgICAgZGVmIHRlc3RfYmFkX3BhcmFtcyhzZWxmKToKICAgICAgICAgIyBUZXN0IGludmFsaWQgcGFyYW1ldGVyIGNvbWJpbmF0aW9ucy4KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YnQiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZW5jb2Rpbmc9InV0Zi04IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIGVycm9ycz0iaWdub3JlIikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIG5ld2xpbmU9IlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAid2J0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAieGJ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIGVycm9ycz0iaWdub3JlIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAicmIiLCBuZXdsaW5lPSJcbiIpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKICAgICAgICAgIyBUZXN0IG5vbi1kZWZhdWx0IGVuY29kaW5nLgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQogICAgICAgICB0ZXh0X25hdGl2ZV9lb2wgPSB0ZXh0LnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInd0IiwgZW5jb2Rpbmc9InV0Zi0xNi1sZSIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHRleHQpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgidXRmLTE2LWxlIikKKyAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJ1dGYtMTYtbGUiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHRleHRfbmF0aXZlX2VvbCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgZW5jb2Rpbmc9InV0Zi0xNi1sZSIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQogCiAgICAgZGVmIHRlc3RfZW5jb2RpbmdfZXJyb3JfaGFuZGxlcihzZWxmKToKICAgICAgICAgIyBUZXN0IHdpdGggbm9uLWRlZmF1bHQgZW5jb2RpbmcgZXJyb3IgaGFuZGxlci4KLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZShiImZvb1x4ZmZiYXIiKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIikgXAorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9Imlnbm9yZSIpIFwKICAgICAgICAgICAgICAgICBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgImZvb2JhciIpCiAKICAgICBkZWYgdGVzdF9uZXdsaW5lKHNlbGYpOgogICAgICAgICAjIFRlc3Qgd2l0aCBleHBsaWNpdCBuZXdsaW5lICh1bml2ZXJzYWwgbmV3bGluZSBtb2RlIGRpc2FibGVkKS4KICAgICAgICAgdGV4dCA9IHNlbGYuVEVYVC5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiLCBuZXdsaW5lPSJcbiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIG5ld2xpbmU9IlxuIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBuZXdsaW5lPSJcciIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIG5ld2xpbmU9IlxyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoKSwgW3RleHRdKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQppbmRleCA1MGM0YmJhLi5iYTdjMzhkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NhcGkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CkBAIC05LDYgKzksNyBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgTUlTU0lOR19DX0RPQ1NUUklOR1MKIHRyeToKICAgICBpbXBvcnQgX3Bvc2l4c3VicHJvY2VzcwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtNDQsNyArNDUsNyBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKICAgICBkZWYgdGVzdF9ub19GYXRhbEVycm9yX2luZmluaXRlX2xvb3Aoc2VsZik6Ci0gICAgICAgIHdpdGggc3VwcG9ydC5zdXBwcmVzc19jcmFzaF9wb3B1cCgpOgorICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgX3Rlc3RjYXBpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX3Rlc3RjYXBpLmNyYXNoX25vX2N1cnJlbnRfdGhyZWFkKCknXSwKQEAgLTExMCw2ICsxMTEsNDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfcG9zaXhzdWJwcm9jZXNzLmZvcmtfZXhlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgWigpLFtiJzEnXSwzLFsxLCAyXSw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX3NpZ25hdHVyZV9wYXJzaW5nKHNlbGYpOgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLm5vX2RvY3N0cmluZy5fX2RvY19fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5ub19kb2NzdHJpbmcuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ19lbXB0eS5fX2RvY19fLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX2VtcHR5Ll9fdGV4dF9zaWduYXR1cmVfXywgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfbm9fc2lnbmF0dXJlLl9fZG9jX18sCisgICAgICAgICAgICAiVGhpcyBkb2NzdHJpbmcgaGFzIG5vIHNpZ25hdHVyZS4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfbm9fc2lnbmF0dXJlLl9fdGV4dF9zaWduYXR1cmVfXywgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZS5fX2RvY19fLAorICAgICAgICAgICAgImRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlKCRtb2R1bGUsIC8sIGJvbylcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJUaGlzIGRvY3N0cmluZyBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUuIgorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZS5fX3RleHRfc2lnbmF0dXJlX18sIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyLl9fZG9jX18sCisgICAgICAgICAgICAiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyKCRtb2R1bGUsIC8sIGJvbylcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICItLVxuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIlRoaXMgZG9jc3RyaW5nIGFsc28gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlLiIKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyLl9fdGV4dF9zaWduYXR1cmVfXywgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmUuX19kb2NfXywKKyAgICAgICAgICAgICJUaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlLl9fdGV4dF9zaWduYXR1cmVfXywgIigkbW9kdWxlLCAvLCBzaWcpIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzLl9fZG9jX18sCisgICAgICAgICAgICAiXG5UaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUgYW5kIHNvbWUgZXh0cmEgbmV3bGluZXMuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcy5fX3RleHRfc2lnbmF0dXJlX18sCisgICAgICAgICAgICAiKCRtb2R1bGUsIC8sIHBhcmFtZXRlcikiKQorCisKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBUZXN0UGVuZGluZ0NhbGxzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTkzLDYgKzIzNCw5IEBACiAgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3N1Ym1pdChsLCBuKQogICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc193YWl0KGwsIG4pCiAKKworY2xhc3MgU3ViaW50ZXJwcmV0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKwogICAgIGRlZiB0ZXN0X3N1YmludGVycHMoc2VsZik6CiAgICAgICAgIGltcG9ydCBidWlsdGlucwogICAgICAgICByLCB3ID0gb3MucGlwZSgpCkBAIC0yMDMsNDcgKzI0NywxMDkgQEAKICAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcChpZChidWlsdGlucyksIGYpCiAgICAgICAgICAgICAiIiIuZm9ybWF0KHcpCiAgICAgICAgIHdpdGggb3BlbihyLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgcmV0ID0gX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgICAgIHJldCA9IHN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBpY2tsZS5sb2FkKGYpLCBpZChzeXMubW9kdWxlcykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBpY2tsZS5sb2FkKGYpLCBpZChidWlsdGlucykpCiAKKwogIyBCdWcgIzYwMTIKIGNsYXNzIFRlc3Q2MDEyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuYXJncGFyc2luZygiSGVsbG8iLCAiV29ybGQiKSwgMSkKIAogCi1jbGFzcyBFbWJlZGRpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIEB1bml0dGVzdC5za2lwSWYoCi0gICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKLSAgICAgICAgInRlc3QgZG9lc24ndCB3b3JrIHVuZGVyIFdpbmRvd3MiKQotICAgIGRlZiB0ZXN0X3N1YmludGVycHMoc2VsZik6Ci0gICAgICAgICMgWFhYIG9ubHkgdGVzdGVkIHVuZGVyIFVuaXggY2hlY2tvdXRzCitjbGFzcyBFbWJlZGRpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBiYXNlcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpCi0gICAgICAgIG9sZGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGV4ZW5hbWUgPSAiX3Rlc3RlbWJlZCIKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgorICAgICAgICAgICAgZXh0ID0gKCJfZCIgaWYgIl9kIiBpbiBzeXMuZXhlY3V0YWJsZSBlbHNlICIiKSArICIuZXhlIgorICAgICAgICAgICAgZXhlbmFtZSArPSBleHQKKyAgICAgICAgICAgIGV4ZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGVwYXRoID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAiTW9kdWxlcyIpCisgICAgICAgIHNlbGYudGVzdF9leGUgPSBleGUgPSBvcy5wYXRoLmpvaW4oZXhlcGF0aCwgZXhlbmFtZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4ZSk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCIlciBkb2Vzbid0IGV4aXN0IiAlIGV4ZSkKICAgICAgICAgIyBUaGlzIGlzIG5lZWRlZCBvdGhlcndpc2Ugd2UgZ2V0IGEgZmF0YWwgZXJyb3I6CiAgICAgICAgICMgIlB5X0luaXRpYWxpemU6IFVuYWJsZSB0byBnZXQgdGhlIGxvY2FsZSBlbmNvZGluZwogICAgICAgICAjIExvb2t1cEVycm9yOiBubyBjb2RlYyBzZWFyY2ggZnVuY3Rpb25zIHJlZ2lzdGVyZWQ6IGNhbid0IGZpbmQgZW5jb2RpbmciCisgICAgICAgIHNlbGYub2xkY3dkID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgb3MuY2hkaXIoYmFzZXBhdGgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLmNoZGlyKHNlbGYub2xkY3dkKQorCisgICAgZGVmIHJ1bl9lbWJlZGRlZF9pbnRlcnByZXRlcihzZWxmLCAqYXJncyk6CisgICAgICAgICIiIlJ1bnMgYSB0ZXN0IGluIHRoZSBlbWJlZGRlZCBpbnRlcnByZXRlciIiIgorICAgICAgICBjbWQgPSBbc2VsZi50ZXN0X2V4ZV0KKyAgICAgICAgY21kLmV4dGVuZChhcmdzKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCByZXR1cm5jb2RlICVkLCBzdGRlcnIgaXMgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAocC5yZXR1cm5jb2RlLCBlcnIpKQorICAgICAgICByZXR1cm4gb3V0LmRlY29kZSgibGF0aW4xIiksIGVyci5kZWNvZGUoImxhdGluMSIpCisKKyAgICBkZWYgdGVzdF9zdWJpbnRlcnBzKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMganVzdCBhICJkb24ndCBjcmFzaCIgdGVzdAorICAgICAgICBvdXQsIGVyciA9IHNlbGYucnVuX2VtYmVkZGVkX2ludGVycHJldGVyKCkKKyAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQob3V0KQorICAgICAgICAgICAgcHJpbnQoZXJyKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X2RlZmF1bHRfcGlwZV9lbmNvZGluZygpOgorICAgICAgICBycCwgd3AgPSBvcy5waXBlKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAiTW9kdWxlcyIsICJfdGVzdGVtYmVkIikKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhleGUpOgotICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVyIGRvZXNuJ3QgZXhpc3QiICUgZXhlKQotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW2V4ZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHJldHVybmNvZGUgJWQsIHN0ZGVyciBpcyAlciIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocC5yZXR1cm5jb2RlLCBlcnIpKQotICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgICAgICBwcmludChvdXQuZGVjb2RlKCdsYXRpbjEnKSkKLSAgICAgICAgICAgICAgICBwcmludChlcnIuZGVjb2RlKCdsYXRpbjEnKSkKKyAgICAgICAgICAgIHdpdGggb3MuZmRvcGVuKHdwLCAndycpIGFzIHc6CisgICAgICAgICAgICAgICAgZGVmYXVsdF9waXBlX2VuY29kaW5nID0gdy5lbmNvZGluZwogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkY3dkKQorICAgICAgICAgICAgb3MuY2xvc2UocnApCisgICAgICAgIHJldHVybiBkZWZhdWx0X3BpcGVfZW5jb2RpbmcKKworICAgIGRlZiB0ZXN0X2ZvcmNlZF9pb19lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBDaGVja3MgZm9yY2VkIGNvbmZpZ3VyYXRpb24gb2YgZW1iZWRkZWQgaW50ZXJwcmV0ZXIgSU8gc3RyZWFtcworICAgICAgICBvdXQsIGVyciA9IHNlbGYucnVuX2VtYmVkZGVkX2ludGVycHJldGVyKCJmb3JjZWRfaW9fZW5jb2RpbmciKQorICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChvdXQpCisgICAgICAgICAgICBwcmludChlcnIpCisgICAgICAgIGV4cGVjdGVkX3N0ZGluX2VuY29kaW5nID0gc3lzLl9fc3RkaW5fXy5lbmNvZGluZworICAgICAgICBleHBlY3RlZF9waXBlX2VuY29kaW5nID0gc2VsZi5fZ2V0X2RlZmF1bHRfcGlwZV9lbmNvZGluZygpCisgICAgICAgIGV4cGVjdGVkX291dHB1dCA9IG9zLmxpbmVzZXAuam9pbihbCisgICAgICAgICItLS0gVXNlIGRlZmF1bHRzIC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogZGVmYXVsdCIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IGRlZmF1bHQiLAorICAgICAgICAic3RkaW46IHswfTpzdHJpY3QiLAorICAgICAgICAic3Rkb3V0OiB7MX06c3RyaWN0IiwKKyAgICAgICAgInN0ZGVycjogezF9OmJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAiLS0tIFNldCBlcnJvcnMgb25seSAtLS0iLAorICAgICAgICAiRXhwZWN0ZWQgZW5jb2Rpbmc6IGRlZmF1bHQiLAorICAgICAgICAiRXhwZWN0ZWQgZXJyb3JzOiBzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3RkaW46IHswfTpzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3Rkb3V0OiB7MX06c3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZGVycjogezF9OmJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAiLS0tIFNldCBlbmNvZGluZyBvbmx5IC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogbGF0aW4tMSIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IGRlZmF1bHQiLAorICAgICAgICAic3RkaW46IGxhdGluLTE6c3RyaWN0IiwKKyAgICAgICAgInN0ZG91dDogbGF0aW4tMTpzdHJpY3QiLAorICAgICAgICAic3RkZXJyOiBsYXRpbi0xOmJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAiLS0tIFNldCBlbmNvZGluZyBhbmQgZXJyb3JzIC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogbGF0aW4tMSIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IHN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRpbjogbGF0aW4tMTpzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3Rkb3V0OiBsYXRpbi0xOnN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRlcnI6IGxhdGluLTE6YmFja3NsYXNocmVwbGFjZSJdKS5mb3JtYXQoZXhwZWN0ZWRfc3RkaW5fZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcGlwZV9lbmNvZGluZykKKyAgICAgICAgIyBUaGlzIGlzIHVzZWZ1bCBpZiB3ZSBldmVyIHRyaXAgb3ZlciBvZGQgcGxhdGZvcm0gYmVoYXZpb3VyCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZXhwZWN0ZWRfb3V0cHV0KQogCiBjbGFzcyBTa2lwaXRlbVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zNTUsOCArNDYxLDkgQEAKICAgICBkZWYgdGVzdF9fdGVzdGNhcGkoc2VsZik6CiAgICAgICAgIGZvciBuYW1lIGluIGRpcihfdGVzdGNhcGkpOgogICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCd0ZXN0XycpOgotICAgICAgICAgICAgICAgIHRlc3QgPSBnZXRhdHRyKF90ZXN0Y2FwaSwgbmFtZSkKLSAgICAgICAgICAgICAgICB0ZXN0KCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiaW50ZXJuYWwiLCBuYW1lPW5hbWUpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0ID0gZ2V0YXR0cihfdGVzdGNhcGksIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHRlc3QoKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weSBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKaW5kZXggYTg5ZDdlNC4uMzI3YzE0NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CkBAIC00LDYgKzQsNyBAQAogCiBpbXBvcnQgdGVzdC5zdXBwb3J0LCB1bml0dGVzdAogaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRlbXBmaWxlCkBAIC00MSw4ICs0MiwxMCBAQAogCiAgICAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKICAgICAgICAgdmVyc2lvbiA9ICgnUHl0aG9uICVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdKS5lbmNvZGUoImFzY2lpIikKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLVYnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLnN0YXJ0c3dpdGgodmVyc2lvbikpCisgICAgICAgIGZvciBzd2l0Y2ggaW4gJy1WJywgJy0tdmVyc2lvbic6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHN3aXRjaCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLnN0YXJ0c3dpdGgodmVyc2lvbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LnN0YXJ0c3dpdGgodmVyc2lvbikpCiAKICAgICBkZWYgdGVzdF92ZXJib3NlKHNlbGYpOgogICAgICAgICAjIC12IGNhdXNlcyBpbXBvcnRzIHRvIHdyaXRlIHRvIHN0ZGVyci4gIElmIHRoZSB3cml0ZSB0bwpAQCAtNTQsMTQgKzU3LDQ5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidzdGFjayBvdmVyZmxvdycsIGVycikKIAogICAgIGRlZiB0ZXN0X3hvcHRpb25zKHNlbGYpOgotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsICdpbXBvcnQgc3lzOyBwcmludChzeXMuX3hvcHRpb25zKScpCi0gICAgICAgIG9wdHMgPSBldmFsKG91dC5zcGxpdGxpbmVzKClbMF0pCisgICAgICAgIGRlZiBnZXRfeG9wdGlvbnMoKmFyZ3MpOgorICAgICAgICAgICAgIyB1c2Ugc3VicHJvY2VzcyBtb2R1bGUgZGlyZWN0bHkgYmVjYXVzZSB0ZXN0LnNjcmlwdF9oZWxwZXIgYWRkcworICAgICAgICAgICAgIyAiLVggZmF1bHRoYW5kbGVyIiB0byB0aGUgY29tbWFuZCBsaW5lCisgICAgICAgICAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAnLUUnKSArIGFyZ3MKKyAgICAgICAgICAgIGFyZ3MgKz0gKCctYycsICdpbXBvcnQgc3lzOyBwcmludChzeXMuX3hvcHRpb25zKScpCisgICAgICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzKQorICAgICAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKyAgICAgICAgICAgIHJldHVybiBvcHRzCisKKyAgICAgICAgb3B0cyA9IGdldF94b3B0aW9ucygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywge30pCi0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soCi0gICAgICAgICAgICAnLVhhJywgJy1YYj1jLGQ9ZScsICctYycsICdpbXBvcnQgc3lzOyBwcmludChzeXMuX3hvcHRpb25zKScpCi0gICAgICAgIG9wdHMgPSBldmFsKG91dC5zcGxpdGxpbmVzKClbMF0pCisKKyAgICAgICAgb3B0cyA9IGdldF94b3B0aW9ucygnLVhhJywgJy1YYj1jLGQ9ZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgeydhJzogVHJ1ZSwgJ2InOiAnYyxkPWUnfSkKIAorICAgIGRlZiB0ZXN0X3Nob3dyZWZjb3VudChzZWxmKToKKyAgICAgICAgZGVmIHJ1bl9weXRob24oKmFyZ3MpOgorICAgICAgICAgICAgIyB0aGlzIGlzIHNpbWlsYXIgdG8gYXNzZXJ0X3B5dGhvbl9vayBidXQgZG9lc24ndCBzdHJpcAorICAgICAgICAgICAgIyB0aGUgcmVmY291bnQgZnJvbSBzdGRlcnIuICBJdCBjYW4gYmUgcmVwbGFjZWQgb25jZQorICAgICAgICAgICAgIyBhc3NlcnRfcHl0aG9uX29rIHN0b3BzIGRvaW5nIHRoYXQuCisgICAgICAgICAgICBjbWQgPSBbc3lzLmV4ZWN1dGFibGVdCisgICAgICAgICAgICBjbWQuZXh0ZW5kKGFyZ3MpCisgICAgICAgICAgICBQSVBFID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSkKKyAgICAgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBwLnN0ZG91dC5jbG9zZSgpCisgICAgICAgICAgICBwLnN0ZGVyci5jbG9zZSgpCisgICAgICAgICAgICByYyA9IHAucmV0dXJuY29kZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKKyAgICAgICAgICAgIHJldHVybiByYywgb3V0LCBlcnIKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgc3lzOyBwcmludChzeXMuX3hvcHRpb25zKScKKyAgICAgICAgIyBub3JtYWxseSB0aGUgcmVmY291bnQgaXMgaGlkZGVuCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHJ1bl9weXRob24oJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucnN0cmlwKCksIGIne30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorICAgICAgICAjICItWCBzaG93cmVmY291bnQiIHNob3dzIHRoZSByZWZjb3VudCwgYnV0IG9ubHkgaW4gZGVidWcgYnVpbGRzCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHJ1bl9weXRob24oJy1YJywgJ3Nob3dyZWZjb3VudCcsICctYycsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnJzdHJpcCgpLCBiInsnc2hvd3JlZmNvdW50JzogVHJ1ZX0iKQorICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ2dldHRvdGFscmVmY291bnQnKTogICMgZGVidWcgYnVpbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBicideXFtcZCsgcmVmcywgXGQrIGJsb2Nrc1xdJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisKICAgICBkZWYgdGVzdF9ydW5fbW9kdWxlKHNlbGYpOgogICAgICAgICAjIFRlc3QgZXhwZWN0ZWQgb3BlcmF0aW9uIG9mIHRoZSAnLW0nIHN3aXRjaAogICAgICAgICAjIFN3aXRjaCBuZWVkcyBhbiBhcmd1bWVudApAQCAtNzAsOSArMTA4LDkgQEAKICAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdmbm9yZDQzNTIweHl6JykKICAgICAgICAgIyBDaGVjayB0aGUgcnVucHkgbW9kdWxlIGFsc28gZ2l2ZXMgYW4gZXJyb3IgZm9yCiAgICAgICAgICMgYSBub25leGlzdGVudCBtb2R1bGUKLSAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdydW5weScsICdmbm9yZDQzNTIweHl6JyksCisgICAgICAgIGFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAncnVucHknLCAnZm5vcmQ0MzUyMHh5eicpCiAgICAgICAgICMgQWxsIGdvb2QgaWYgbW9kdWxlIGlzIGxvY2F0ZWQgYW5kIHJ1biBzdWNjZXNzZnVsbHkKLSAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGltZWl0JywgJy1uJywgJzEnKSwKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGltZWl0JywgJy1uJywgJzEnKQogCiAgICAgZGVmIHRlc3RfcnVuX21vZHVsZV9idWcxNzY0NDA3KHNlbGYpOgogICAgICAgICAjIC1tIGFuZCAtaSBuZWVkIHRvIHBsYXkgd2VsbCB0b2dldGhlcgpAQCAtMjEzLDYgKzI1MSwyMyBAQAogICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgxLmVuY29kZSgnYXNjaWknKSwgb3V0KQogICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgyLmVuY29kZSgnYXNjaWknKSwgb3V0KQogCisgICAgZGVmIHRlc3RfZW1wdHlfUFlUSE9OUEFUSF9pc3N1ZTE2MzA5KHNlbGYpOgorICAgICAgICAjIE9uIFBvc2l4LCBpdCBpcyBkb2N1bWVudGVkIHRoYXQgc2V0dGluZyBQQVRIIHRvIHRoZQorICAgICAgICAjIGVtcHR5IHN0cmluZyBpcyBlcXVpdmFsZW50IHRvIG5vdCBzZXR0aW5nIFBBVEggYXQgYWxsLAorICAgICAgICAjIHdoaWNoIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGUgcnVsZSB0aGF0IGluIGEgc3RyaW5nIGxpa2UKKyAgICAgICAgIyAiL2Jpbjo6L3Vzci9iaW4iIHRoZSBlbXB0eSBzdHJpbmcgaW4gdGhlIG1pZGRsZSBnZXRzCisgICAgICAgICMgaW50ZXJwcmV0ZWQgYXMgJy4nCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgcGF0aCA9ICI6Ii5qb2luKHN5cy5wYXRoKQorICAgICAgICAgICAgcGF0aCA9IHBhdGguZW5jb2RlKCJhc2NpaSIsICJiYWNrc2xhc2hyZXBsYWNlIikKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKHBhdGgpIiIiCisgICAgICAgIHJjMSwgb3V0MSwgZXJyMSA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwgUFlUSE9OUEFUSD0iIikKKyAgICAgICAgcmMyLCBvdXQyLCBlcnIyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCBfX2lzb2xhdGVkPUZhbHNlKQorICAgICAgICAjIHJlZ2FyZGluZyB0byBQb3NpeCBzcGVjaWZpY2F0aW9uLCBvdXRwdXRzIHNob3VsZCBiZSBlcXVhbAorICAgICAgICAjIGZvciBlbXB0eSBhbmQgdW5zZXQgUFlUSE9OUEFUSAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dDEsIG91dDIpCisKICAgICBkZWYgdGVzdF9kaXNwbGF5aG9va191bmVuY29kYWJsZShzZWxmKToKICAgICAgICAgZm9yIGVuY29kaW5nIGluICgnYXNjaWknLCAnbGF0aW4tMScsICd1dGYtOCcpOgogICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKQEAgLTI5MCw3ICszNDUsNyBAQAogICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLmRlY29kZSgnYXNjaWknLCAnaWdub3JlJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0V4Y2VwdGlvbiBPU0Vycm9yOiAuKiBpZ25vcmVkJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAnRXhjZXB0aW9uIGlnbm9yZWQgaW4uKlxuT1NFcnJvcjogLionKQogCiAgICAgZGVmIHRlc3RfY2xvc2VkX3N0ZG91dChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTM0NDQ6IGlmIHN0ZG91dCBoYXMgYmVlbiBleHBsaWNpdGx5IGNsb3NlZCwgd2Ugc2hvdWxkCkBAIC0zODUsNiArNDQwLDMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBvdXQpCiAKIAorICAgIGRlZiB0ZXN0X2lzb2xhdGVkbW9kZShzZWxmKToKKyAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLUknKQorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctSUVzJykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLUknLCAnLWMnLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCBmbGFncyBhcyBmOyAnCisgICAgICAgICAgICAncHJpbnQoZi5ub191c2VyX3NpdGUsIGYuaWdub3JlX2Vudmlyb25tZW50LCBmLmlzb2xhdGVkKScsCisgICAgICAgICAgICAjIGR1bW15dmFyIHRvIHByZXZlbnQgZXh0cmFub3VzIC1FCisgICAgICAgICAgICBkdW1teXZhcj0iIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgYicxIDEgMScpCisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfY3dkKCkgYXMgdG1wZGlyOgorICAgICAgICAgICAgZmFrZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICJ1dWlkLnB5IikKKyAgICAgICAgICAgIG1haW4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAibWFpbi5weSIpCisgICAgICAgICAgICB3aXRoIG9wZW4oZmFrZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoInJhaXNlIFJ1bnRpbWVFcnJvcignaXNvbGF0ZWQgbW9kZSB0ZXN0JylcbiIpCisgICAgICAgICAgICB3aXRoIG9wZW4obWFpbiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoImltcG9ydCB1dWlkXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoInByaW50KCdvaycpXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgbWFpbl0sIGN3ZD10bXBkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKQorICAgICAgICAgICAgb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoW3N5cy5leGVjdXRhYmxlLCAiLUkiLCBtYWluXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD10bXBkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiIm9rIikKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ21kTGluZVRlc3QpCiAgICAgdGVzdC5zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQppbmRleCBiNDI2OWI5Li4xZTY3NDZkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQpAQCAtNDEsMTEgKzQxLDI4IEBACiBfbG9hZGVyID0gX19sb2FkZXJfXyBpZiBfX2xvYWRlcl9fIGlzIEJ1aWx0aW5JbXBvcnRlciBlbHNlIHR5cGUoX19sb2FkZXJfXykKIHByaW50KCdfX2xvYWRlcl9fPT0lYScgJSBfbG9hZGVyKQogcHJpbnQoJ19fZmlsZV9fPT0lYScgJSBfX2ZpbGVfXykKLWFzc2VydEVxdWFsKF9fY2FjaGVkX18sIE5vbmUpCitwcmludCgnX19jYWNoZWRfXz09JWEnICUgX19jYWNoZWRfXykKIHByaW50KCdfX3BhY2thZ2VfXz09JXInICUgX19wYWNrYWdlX18pCisjIENoZWNrIFBFUCA0NTEgZGV0YWlscworaW1wb3J0IG9zLnBhdGgKK2lmIF9fcGFja2FnZV9fIGlzIG5vdCBOb25lOgorICAgIHByaW50KCdfX21haW5fXyB3YXMgbG9jYXRlZCB0aHJvdWdoIHRoZSBpbXBvcnQgc3lzdGVtJykKKyAgICBhc3NlcnRJZGVudGljYWwoX19zcGVjX18ubG9hZGVyLCBfX2xvYWRlcl9fKQorICAgIGV4cGVjdGVkX3NwZWNfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShfX2ZpbGVfXykpWzBdCisgICAgaWYgX19wYWNrYWdlX186CisgICAgICAgIGV4cGVjdGVkX3NwZWNfbmFtZSA9IF9fcGFja2FnZV9fICsgIi4iICsgZXhwZWN0ZWRfc3BlY19uYW1lCisgICAgYXNzZXJ0RXF1YWwoX19zcGVjX18ubmFtZSwgZXhwZWN0ZWRfc3BlY19uYW1lKQorICAgIGFzc2VydEVxdWFsKF9fc3BlY19fLnBhcmVudCwgX19wYWNrYWdlX18pCisgICAgYXNzZXJ0SWRlbnRpY2FsKF9fc3BlY19fLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgIGFzc2VydEVxdWFsKF9fc3BlY19fLm9yaWdpbiwgX19maWxlX18pCisgICAgaWYgX19zcGVjX18uY2FjaGVkIGlzIG5vdCBOb25lOgorICAgICAgICBhc3NlcnRFcXVhbChfX3NwZWNfXy5jYWNoZWQsIF9fY2FjaGVkX18pCiAjIENoZWNrIHRoZSBzeXMgbW9kdWxlCiBpbXBvcnQgc3lzCiBhc3NlcnRJZGVudGljYWwoZ2xvYmFscygpLCBzeXMubW9kdWxlc1tfX25hbWVfX10uX19kaWN0X18pCitpZiBfX3NwZWNfXyBpcyBub3QgTm9uZToKKyAgICAjIFhYWDogV2UncmUgbm90IGN1cnJlbnRseSBtYWtpbmcgX19tYWluX18gYXZhaWxhYmxlIHVuZGVyIGl0cyByZWFsIG5hbWUKKyAgICBwYXNzICMgYXNzZXJ0SWRlbnRpY2FsKGdsb2JhbHMoKSwgc3lzLm1vZHVsZXNbX19zcGVjX18ubmFtZV0uX19kaWN0X18pCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfY21kX2xpbmVfc2NyaXB0CiBleGFtcGxlX2FyZ3NfbGlzdCA9IHRlc3RfY21kX2xpbmVfc2NyaXB0LmV4YW1wbGVfYXJncwogYXNzZXJ0RXF1YWwoc3lzLmFyZ3ZbMTpdLCBleGFtcGxlX2FyZ3NfbGlzdCkKQEAgLTEyMyw3ICsxNDAsNyBAQAogICAgICAgICBpZiBub3QgX19kZWJ1Z19fOgogICAgICAgICAgICAgY21kX2xpbmVfc3dpdGNoZXMgKz0gKCctJyArICdPJyAqIHN5cy5mbGFncy5vcHRpbWl6ZSwpCiAgICAgICAgIHJ1bl9hcmdzID0gY21kX2xpbmVfc3dpdGNoZXMgKyAoc2NyaXB0X25hbWUsKSArIHR1cGxlKGV4YW1wbGVfYXJncykKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygqcnVuX2FyZ3MpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKnJ1bl9hcmdzLCBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQgKyBlcnIsIGV4cGVjdGVkX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hcmd2MCwgZXhwZWN0ZWRfcGF0aDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9wYWNrYWdlLCBleHBlY3RlZF9sb2FkZXIpCkBAIC0yOTQsNyArMzExLDcgQEAKICAgICAgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCiAgICAgICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpciwgImltcG9ydCBzeXM7IHByaW50KCdpbml0X2FyZ3YwPT0lcicgJSBzeXMuYXJndlswXSkiKQogICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ3NjcmlwdCcpCi0gICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGVzdF9wa2cuc2NyaXB0JywgKmV4YW1wbGVfYXJncykKKyAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0ZXN0X3BrZy5zY3JpcHQnLCAqZXhhbXBsZV9hcmdzLCBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgogICAgICAgICAgICAgICAgICAgICBwcmludChvdXQpCiAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAiaW5pdF9hcmd2MD09JXIiICUgJy1tJwpAQCAtMzExLDcgKzMyOCw4IEBACiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKCItYyIsICJ3IikgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiZGF0YSIpCiAgICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBwcmludCgic3lzLnBhdGhbMF09PSVyIiAlIHN5cy5wYXRoWzBdKScpCisgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgcHJpbnQoInN5cy5wYXRoWzBdPT0lciIgJSBzeXMucGF0aFswXSknLAorICAgICAgICAgICAgICAgICAgICAgICAgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChvdXQpCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gInN5cy5wYXRoWzBdPT0lciIgJSAnJwpAQCAtMzI1LDcgKzM0Myw4IEBACiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChwYXRoPXNjcmlwdF9kaXIpOgogICAgICAgICAgICAgICAgIHdpdGggb3BlbigiLW0iLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoImRhdGEiKQotICAgICAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdvdGhlcicsICpleGFtcGxlX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ290aGVyJywgKmV4YW1wbGVfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZSwgJycsICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCkBAIC0zODYsNiArNDA1LDI0IEBACiAgICAgICAgICAgICAnc3Rkb3V0PSVyIHN0ZGVycj0lcicgJSAoc3Rkb3V0LCBzdGRlcnIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJjKQogCisgICAgZGVmIHRlc3RfaXNzdWUyMDUwMF9leGl0X3dpdGhfZXhjZXB0aW9uX3ZhbHVlKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgZXJyb3IgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc29tZSB0ZXh0JykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBlcnJvciA9IGVycgorCisgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICBzeXMuZXhpdChlcnJvcikKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnLCBzY3JpcHQpCisgICAgICAgICAgICBleGl0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICB0ZXh0ID0gc3RkZXJyLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAic29tZSB0ZXh0IikKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ21kTGluZVRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weQppbmRleCBhZGVmMTcwLi41ZmQyMWRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZV9tb2R1bGUucHkKQEAgLTY0LDYgKzY0LDIwIEBACiAgICAgICAgIHNlbGYuY29uc29sZS5pbnRlcmFjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShob29rLmNhbGxlZCkKIAorICAgIGRlZiB0ZXN0X2Jhbm5lcihzZWxmKToKKyAgICAgICAgIyB3aXRoIGJhbm5lcgorICAgICAgICBzZWxmLmluZnVuYy5zaWRlX2VmZmVjdCA9IEVPRkVycm9yKCdGaW5pc2hlZCcpCisgICAgICAgIHNlbGYuY29uc29sZS5pbnRlcmFjdChiYW5uZXI9J0ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc3RkZXJyLm1ldGhvZF9jYWxscyksIDIpCisgICAgICAgIGJhbm5lcl9jYWxsID0gc2VsZi5zdGRlcnIubWV0aG9kX2NhbGxzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFubmVyX2NhbGwsIFsnd3JpdGUnLCAoJ0Zvb1xuJywpLCB7fV0pCisKKyAgICAgICAgIyBubyBiYW5uZXIKKyAgICAgICAgc2VsZi5zdGRlcnIucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYuaW5mdW5jLnNpZGVfZWZmZWN0ID0gRU9GRXJyb3IoJ0ZpbmlzaGVkJykKKyAgICAgICAgc2VsZi5jb25zb2xlLmludGVyYWN0KGJhbm5lcj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zdGRlcnIubWV0aG9kX2NhbGxzKSwgMSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEludGVyYWN0aXZlQ29uc29sZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CmluZGV4IGZkODg1MDUuLjg0ODA0YmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQpAQCAtODc1LDggKzg3NSw2IEBACiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICBkYXRhLmRlY29kZShlbmNvZGluZywgInRlc3QucmVwbGFjaW5nIikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29kZWNDYWxsYmFja1Rlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKaW5kZXggY2I2MThlYy4uOWI2MmQ1YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKQEAgLTEsOSArMSwxMSBAQAogaW1wb3J0IGNvZGVjcworaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBpbwogaW1wb3J0IGxvY2FsZQogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBlbmNvZGluZ3MKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKQEAgLTM0MSw4ICszNDMsNDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgczUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKCksICIiKQogCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZV9yZXBsYWNlID0gIlx1ZmZmZCIKKworICAgIGRlZiB0ZXN0X2xvbmVfc3Vycm9nYXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCAiXHVkODAwIi5lbmNvZGUsIHNlbGYuZW5jb2RpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoc2VsZi5lbmNvZGluZywgImJhY2tzbGFzaHJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW1xcdWRjODBdIi5lbmNvZGUoc2VsZi5lbmNvZGluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoc2VsZi5lbmNvZGluZywgInhtbGNoYXJyZWZyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlsmIzU2NDQ4O10iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAiaWdub3JlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIltdIi5lbmNvZGUoc2VsZi5lbmNvZGluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoc2VsZi5lbmNvZGluZywgInJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWz9dIi5lbmNvZGUoc2VsZi5lbmNvZGluZykpCisKKyAgICAgICAgYm9tID0gIiIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgIGZvciBiZWZvcmUsIGFmdGVyIGluIFsoIlxVMDAwMTBmZmYiLCAiQSIpLCAoIlsiLCAiXSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJBIiwgIlxVMDAwMTBmZmYiKV06CisgICAgICAgICAgICBiZWZvcmVfc2VxdWVuY2UgPSBiZWZvcmUuZW5jb2RlKHNlbGYuZW5jb2RpbmcpW2xlbihib20pOl0KKyAgICAgICAgICAgIGFmdGVyX3NlcXVlbmNlID0gYWZ0ZXIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpW2xlbihib20pOl0KKyAgICAgICAgICAgIHRlc3Rfc3RyaW5nID0gYmVmb3JlICsgIlx1REM4MCIgKyBhZnRlcgorICAgICAgICAgICAgdGVzdF9zZXF1ZW5jZSA9IChib20gKyBiZWZvcmVfc2VxdWVuY2UgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlsbF9mb3JtZWRfc2VxdWVuY2UgKyBhZnRlcl9zZXF1ZW5jZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgdGVzdF9zZXF1ZW5jZS5kZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVuY29kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X3N0cmluZy5lbmNvZGUoc2VsZi5lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVwYXNzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc2VxdWVuY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc2VxdWVuY2UuZGVjb2RlKHNlbGYuZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVwYXNzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X3NlcXVlbmNlLmRlY29kZShzZWxmLmVuY29kaW5nLCAiaWdub3JlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSArIGFmdGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X3NlcXVlbmNlLmRlY29kZShzZWxmLmVuY29kaW5nLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgKyBzZWxmLmlsbF9mb3JtZWRfc2VxdWVuY2VfcmVwbGFjZSArIGFmdGVyKQorCiBjbGFzcyBVVEYzMlRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMzIiCisgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKKyAgICAgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHg4MFx4ZGNceDAwXHgwMCIKKyAgICBlbHNlOgorICAgICAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDAwXHgwMFx4ZGNceDgwIgogCiAgICAgc3BhbWxlID0gKGInXHhmZlx4ZmVceDAwXHgwMCcKICAgICAgICAgICAgICAgYidzXHgwMFx4MDBceDAwcFx4MDBceDAwXHgwMGFceDAwXHgwMFx4MDBtXHgwMFx4MDBceDAwJwpAQCAtNDM0LDYgKzQ3NCw3IEBACiAKIGNsYXNzIFVURjMyTEVUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTMyLWxlIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ODBceGRjXHgwMFx4MDAiCiAKICAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCkBAIC00NzgsNiArNTE5LDcgQEAKIAogY2xhc3MgVVRGMzJCRVRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMzItYmUiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHgwMFx4MDBceGRjXHg4MCIKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTUyMyw2ICs1NjUsMTAgQEAKIAogY2xhc3MgVVRGMTZUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTE2IgorICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6CisgICAgICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ODBceGRjIgorICAgIGVsc2U6CisgICAgICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ZGNceDgwIgogCiAgICAgc3BhbWxlID0gYidceGZmXHhmZXNceDAwcFx4MDBhXHgwMG1ceDAwc1x4MDBwXHgwMGFceDAwbVx4MDAnCiAgICAgc3BhbWJlID0gYidceGZlXHhmZlx4MDBzXHgwMHBceDAwYVx4MDBtXHgwMHNceDAwcFx4MDBhXHgwMG0nCkBAIC01OTgsMTEgKzY0NCwxNCBAQAogICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGZwOgogICAgICAgICAgICAgZnAud3JpdGUocykKLSAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgJ1UnLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKSBhcyByZWFkZXI6CisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLm9wZW4oc3VwcG9ydC5URVNURk4sICdVJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykKKyAgICAgICAgd2l0aCByZWFkZXI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkKCksIHMxKQogCiBjbGFzcyBVVEYxNkxFVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0xNi1sZSIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDgwXHhkYyIKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTY0Niw2ICs2OTUsNyBAQAogCiBjbGFzcyBVVEYxNkJFVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0xNi1iZSIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceGRjXHg4MCIKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTY4OSw2ICs3MzksOCBAQAogCiBjbGFzcyBVVEY4VGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi04IgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ZWRceGIyXHg4MCIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlX3JlcGxhY2UgPSAiXHVmZmZkIiAqIDMKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTcxOCwxOCArNzcwLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUsIHUuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQogCiAgICAgZGVmIHRlc3RfbG9uZV9zdXJyb2dhdGVzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsICJcdWQ4MDAiLmVuY29kZSwgInV0Zi04IikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBiIlx4ZWRceGEwXHg4MCIuZGVjb2RlLCAidXRmLTgiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCJ1dGYtOCIsICJiYWNrc2xhc2hyZXBsYWNlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbXFx1ZGM4MF0nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCJ1dGYtOCIsICJ4bWxjaGFycmVmcmVwbGFjZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInWyYjNTY0NDg7XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgInN1cnJvZ2F0ZWVzY2FwZSIpLAorICAgICAgICBzdXBlcigpLnRlc3RfbG9uZV9zdXJyb2dhdGVzKCkKKyAgICAgICAgIyBub3Qgc3VyZSBpZiB0aGlzIGlzIG1ha2luZyBzZW5zZSBmb3IKKyAgICAgICAgIyBVVEYtMTYgYW5kIFVURi0zMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCd1dGYtOCcsICJzdXJyb2dhdGVlc2NhcGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tceDgwXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgImlnbm9yZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInW10nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCJ1dGYtOCIsICJyZXBsYWNlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbP10nKQogCiAgICAgZGVmIHRlc3Rfc3Vycm9nYXRlcGFzc19oYW5kbGVyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhYmNcdWQ4MDBkZWYiLmVuY29kZSgidXRmLTgiLCAic3Vycm9nYXRlcGFzcyIpLApAQCAtODQ1LDYgKzg5MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIlxVMDAwMTBmZmZcdUQ4MDAiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoY29kZWNzLmxvb2t1cF9lcnJvcigic3Vycm9nYXRlcGFzcyIpKQogCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcFRlc3QoImlzc3VlICMyMDU3MTogY29kZSBwYWdlIDY1MDAxIGNvZGVjIGRvZXMgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydCBwYXJ0aWFsIGRlY29kZXIgeWV0IikKIAogCiBjbGFzcyBVVEY3VGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtOTA5LDE1ICs5NTcsMTkgQEAKICAgICAgICAgICAgIChiJ2ErLy8vLywrSUt3LWInLCAnYVx1ZmZmZlx1ZmZmZFx1MjBhY2InKSwKICAgICAgICAgXQogICAgICAgICBmb3IgcmF3LCBleHBlY3RlZCBpbiB0ZXN0czoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl83X2RlY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdywgJ3N0cmljdCcsIFRydWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5kZWNvZGUoJ3V0Zi03JywgJ3JlcGxhY2UnKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChyYXc9cmF3KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGNvZGVjcy51dGZfN19kZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdywgJ3N0cmljdCcsIFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuZGVjb2RlKCd1dGYtNycsICdyZXBsYWNlJyksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfbm9uYm1wKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcVTAwMDEwNEEwJy5lbmNvZGUoc2VsZi5lbmNvZGluZyksIGInKzJBSGNvQS0nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcdWQ4MDFcdWRjYTAnLmVuY29kZShzZWxmLmVuY29kaW5nKSwgYicrMkFIY29BLScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrMkFIY29BLScuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLCAnXFUwMDAxMDRBMCcpCiAKKyAgICB0ZXN0X2xvbmVfc3Vycm9nYXRlcyA9IE5vbmUKKworCiBjbGFzcyBVVEYxNkV4VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CkBAIC05NDIsNyArOTk0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MucmVhZGJ1ZmZlcl9lbmNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLnJlYWRidWZmZXJfZW5jb2RlLCA0MikKIAotY2xhc3MgVVRGOFNpZ1Rlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFVURjhTaWdUZXN0KFVURjhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTgtc2lnIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKQEAgLTE2MjQsNiArMTY3Niw3IEBACiAgICAgImNwMDM3IiwKICAgICAiY3AxMDA2IiwKICAgICAiY3AxMDI2IiwKKyAgICAiY3AxMTI1IiwKICAgICAiY3AxMTQwIiwKICAgICAiY3AxMjUwIiwKICAgICAiY3AxMjUxIiwKQEAgLTIzNjYsNDQgKzI0MTksMzE5IEBACiAgICAgInF1b3ByaV9jb2RlYyIsCiAgICAgImhleF9jb2RlYyIsCiBdCisKK3RyYW5zZm9ybV9hbGlhc2VzID0geworICAgICJiYXNlNjRfY29kZWMiOiBbImJhc2U2NCIsICJiYXNlXzY0Il0sCisgICAgInV1X2NvZGVjIjogWyJ1dSJdLAorICAgICJxdW9wcmlfY29kZWMiOiBbInF1b3ByaSIsICJxdW90ZWRfcHJpbnRhYmxlIiwgInF1b3RlZHByaW50YWJsZSJdLAorICAgICJoZXhfY29kZWMiOiBbImhleCJdLAorICAgICJyb3RfMTMiOiBbInJvdDEzIl0sCit9CisKIHRyeToKICAgICBpbXBvcnQgemxpYgogZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKKyAgICB6bGliID0gTm9uZQogZWxzZToKICAgICBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzLmFwcGVuZCgiemxpYl9jb2RlYyIpCisgICAgdHJhbnNmb3JtX2FsaWFzZXNbInpsaWJfY29kZWMiXSA9IFsiemlwIiwgInpsaWIiXQogdHJ5OgogICAgIGltcG9ydCBiejIKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBwYXNzCiBlbHNlOgogICAgIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3MuYXBwZW5kKCJiejJfY29kZWMiKQorICAgIHRyYW5zZm9ybV9hbGlhc2VzWyJiejJfY29kZWMiXSA9IFsiYnoyIl0KIAogY2xhc3MgVHJhbnNmb3JtQ29kZWNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKICAgICAgICAgYmlucHV0ID0gYnl0ZXMocmFuZ2UoMjU2KSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6Ci0gICAgICAgICAgICAjIGdlbmVyaWMgY29kZWNzIGludGVyZmFjZQotICAgICAgICAgICAgKG8sIHNpemUpID0gY29kZWNzLmdldGVuY29kZXIoZW5jb2RpbmcpKGJpbnB1dCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKGJpbnB1dCkpCi0gICAgICAgICAgICAoaSwgc2l6ZSkgPSBjb2RlY3MuZ2V0ZGVjb2RlcihlbmNvZGluZykobykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKG8pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBiaW5wdXQpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgIyBnZW5lcmljIGNvZGVjcyBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAobywgc2l6ZSkgPSBjb2RlY3MuZ2V0ZW5jb2RlcihlbmNvZGluZykoYmlucHV0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKGJpbnB1dCkpCisgICAgICAgICAgICAgICAgKGksIHNpemUpID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpKG8pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBsZW4obykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBiaW5wdXQpCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKLSAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCi0gICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShpby5CeXRlc0lPKHNpbikpCi0gICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykoaW8uQnl0ZXNJTyhzaW4pKQorICAgICAgICAgICAgICAgIHNvdXQgPSByZWFkZXIucmVhZCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgotICAgICAgICAgICAgc2luID0gY29kZWNzLmVuY29kZShiIlx4ODAiLCBlbmNvZGluZykKLSAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKGlvLkJ5dGVzSU8oc2luKSkKLSAgICAgICAgICAgIHNvdXQgPSByZWFkZXIucmVhZGxpbmUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykoaW8uQnl0ZXNJTyhzaW4pKQorICAgICAgICAgICAgICAgIHNvdXQgPSByZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKKworICAgIGRlZiB0ZXN0X2J1ZmZlcl9hcGlfdXNhZ2Uoc2VsZik6CisgICAgICAgICMgV2UgY2hlY2sgYWxsIHRoZSB0cmFuc2Zvcm0gY29kZWNzIGFjY2VwdCBtZW1vcnl2aWV3IGlucHV0CisgICAgICAgICMgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZworICAgICAgICAjIGFuZCBhbHNvIHRoYXQgdGhleSByb3VuZHRyaXAgY29ycmVjdGx5CisgICAgICAgIG9yaWdpbmFsID0gYiIxMjM0NVx4ODAiCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBvcmlnaW5hbAorICAgICAgICAgICAgICAgIHZpZXcgPSBtZW1vcnl2aWV3KGRhdGEpCisgICAgICAgICAgICAgICAgZGF0YSA9IGNvZGVjcy5lbmNvZGUoZGF0YSwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgdmlld19lbmNvZGVkID0gY29kZWNzLmVuY29kZSh2aWV3LCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpZXdfZW5jb2RlZCwgZGF0YSkKKyAgICAgICAgICAgICAgICB2aWV3ID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgICAgICAgICAgIGRhdGEgPSBjb2RlY3MuZGVjb2RlKGRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgb3JpZ2luYWwpCisgICAgICAgICAgICAgICAgdmlld19kZWNvZGVkID0gY29kZWNzLmRlY29kZSh2aWV3LCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpZXdfZGVjb2RlZCwgZGF0YSkKKworICAgIGRlZiB0ZXN0X3RleHRfdG9fYmluYXJ5X2JsYWNrbGlzdHNfYmluYXJ5X3RyYW5zZm9ybXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgYmluYXJ5IC0+IGJpbmFyeSBjb2RlY3MgZ2l2ZSBhIGdvb2QgZXJyb3IgZm9yIHN0ciBpbnB1dAorICAgICAgICBiYWRfaW5wdXQgPSAiYmFkIGlucHV0IHR5cGUiCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIGZtdCA9ICggInshcn0gaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCisgICAgICAgICAgICAgICAgbXNnID0gZm10LmZvcm1hdChlbmNvZGluZykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZykgYXMgZmFpbHVyZToKKyAgICAgICAgICAgICAgICAgICAgYmFkX2lucHV0LmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18pCisKKyAgICBkZWYgdGVzdF90ZXh0X3RvX2JpbmFyeV9ibGFja2xpc3RzX3RleHRfdHJhbnNmb3JtcyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBzdHIuZW5jb2RlIGdpdmVzIGEgZ29vZCBlcnJvciBtZXNzYWdlIGZvciBzdHIgLT4gc3RyIGNvZGVjcworICAgICAgICBtc2cgPSAociJeJ3JvdF8xMycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAianVzdCBhbiBleGFtcGxlIG1lc3NhZ2UiLmVuY29kZSgicm90XzEzIikKKworICAgIGRlZiB0ZXN0X2JpbmFyeV90b190ZXh0X2JsYWNrbGlzdHNfYmluYXJ5X3RyYW5zZm9ybXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgYnl0ZXMuZGVjb2RlIGFuZCBieXRlYXJyYXkuZGVjb2RlIGdpdmUgYSBnb29kIGVycm9yCisgICAgICAgICMgbWVzc2FnZSBmb3IgYmluYXJ5IC0+IGJpbmFyeSBjb2RlY3MKKyAgICAgICAgZGF0YSA9IGIiZW5jb2RlIGZpcnN0IHRvIGVuc3VyZSB3ZSBtZWV0IGFueSBmb3JtYXQgcmVzdHJpY3Rpb25zIgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBlbmNvZGVkX2RhdGEgPSBjb2RlY3MuZW5jb2RlKGRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIGZtdCA9IChyInshcn0gaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCisgICAgICAgICAgICAgICAgbXNnID0gZm10LmZvcm1hdChlbmNvZGluZykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAgICAgICAgIGVuY29kZWRfZGF0YS5kZWNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoZW5jb2RlZF9kYXRhKS5kZWNvZGUoZW5jb2RpbmcpCisKKyAgICBkZWYgdGVzdF9iaW5hcnlfdG9fdGV4dF9ibGFja2xpc3RzX3RleHRfdHJhbnNmb3JtcyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBzdHIgLT4gc3RyIGNvZGVjIGdpdmVzIGEgZ29vZCBlcnJvciBmb3IgYmluYXJ5IGlucHV0CisgICAgICAgIGZvciBiYWRfaW5wdXQgaW4gKGIiaW1tdXRhYmxlIiwgYnl0ZWFycmF5KGIibXV0YWJsZSIpKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGJhZF9pbnB1dD1iYWRfaW5wdXQpOgorICAgICAgICAgICAgICAgIG1zZyA9IChyIl4ncm90XzEzJyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5kZWNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZykgYXMgZmFpbHVyZToKKyAgICAgICAgICAgICAgICAgICAgYmFkX2lucHV0LmRlY29kZSgicm90XzEzIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAiUmVxdWlyZXMgemxpYiBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF9jdXN0b21femxpYl9lcnJvcl9pc193cmFwcGVkKHNlbGYpOgorICAgICAgICAjIENoZWNrIHpsaWIgY29kZWMgZ2l2ZXMgYSBnb29kIGVycm9yIGZvciBtYWxmb3JtZWQgaW5wdXQKKyAgICAgICAgbXNnID0gIl5kZWNvZGluZyB3aXRoICd6bGliX2NvZGVjJyBjb2RlYyBmYWlsZWQiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChFeGNlcHRpb24sIG1zZykgYXMgZmFpbHVyZToKKyAgICAgICAgICAgIGNvZGVjcy5kZWNvZGUoYiJoZWxsbyIsICJ6bGliX2NvZGVjIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZhaWx1cmUuZXhjZXB0aW9uLl9fY2F1c2VfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZmFpbHVyZS5leGNlcHRpb24pKQorCisgICAgZGVmIHRlc3RfY3VzdG9tX2hleF9lcnJvcl9pc193cmFwcGVkKHNlbGYpOgorICAgICAgICAjIENoZWNrIGhleCBjb2RlYyBnaXZlcyBhIGdvb2QgZXJyb3IgZm9yIG1hbGZvcm1lZCBpbnB1dAorICAgICAgICBtc2cgPSAiXmRlY29kaW5nIHdpdGggJ2hleF9jb2RlYycgY29kZWMgZmFpbGVkIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiaGVsbG8iLCAiaGV4X2NvZGVjIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZhaWx1cmUuZXhjZXB0aW9uLl9fY2F1c2VfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZmFpbHVyZS5leGNlcHRpb24pKQorCisgICAgIyBVbmZvcnR1bmF0ZWx5LCB0aGUgYnoyIG1vZHVsZSB0aHJvd3MgT1NFcnJvciwgd2hpY2ggdGhlIGNvZGVjCisgICAgIyBtYWNoaW5lcnkgY3VycmVudGx5IGNhbid0IHdyYXAgOigKKworICAgICMgRW5zdXJlIGNvZGVjIGFsaWFzZXMgZnJvbSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNzQ3NSB3b3JrCisgICAgZGVmIHRlc3RfYWxpYXNlcyhzZWxmKToKKyAgICAgICAgZm9yIGNvZGVjX25hbWUsIGFsaWFzZXMgaW4gdHJhbnNmb3JtX2FsaWFzZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGV4cGVjdGVkX25hbWUgPSBjb2RlY3MubG9va3VwKGNvZGVjX25hbWUpLm5hbWUKKyAgICAgICAgICAgIGZvciBhbGlhcyBpbiBhbGlhc2VzOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGFsaWFzPWFsaWFzKToKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGNvZGVjcy5sb29rdXAoYWxpYXMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5uYW1lLCBleHBlY3RlZF9uYW1lKQorCisKKyMgVGhlIGNvZGVjIHN5c3RlbSB0cmllcyB0byB3cmFwIGV4Y2VwdGlvbnMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBlcnJvcgorIyBtZW50aW9ucyB0aGUgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZCBhbmQgdGhlIGNvZGVjIGludm9sdmVkLiBXZQorIyBjdXJyZW50bHkgKm9ubHkqIHdhbnQgdGhpcyB0byBoYXBwZW4gZm9yIHJlbGF0aXZlbHkgc3RhdGVsZXNzCisjIGV4Y2VwdGlvbnMsIHdoZXJlIHRoZSBvbmx5IHNpZ25pZmljYW50IGluZm9ybWF0aW9uIHRoZXkgY29udGFpbiBpcyB0aGVpcgorIyB0eXBlIGFuZCBhIHNpbmdsZSBzdHIgYXJndW1lbnQuCisKKyMgVXNlIGEgbG9jYWwgY29kZWMgcmVnaXN0cnkgdG8gYXZvaWQgYXBwZWFyaW5nIHRvIGxlYWsgb2JqZWN0cyB3aGVuCisjIHJlZ2lzdGVyaW5nIG11bHRpcGxlIHNlYWNoIGZ1bmN0aW9ucworX1RFU1RfQ09ERUNTID0ge30KKworZGVmIF9nZXRfdGVzdF9jb2RlYyhjb2RlY19uYW1lKToKKyAgICByZXR1cm4gX1RFU1RfQ09ERUNTLmdldChjb2RlY19uYW1lKQorY29kZWNzLnJlZ2lzdGVyKF9nZXRfdGVzdF9jb2RlYykgIyBSZXR1cm5zIE5vbmUsIG5vdCB1c2FibGUgYXMgYSBkZWNvcmF0b3IKKworY2xhc3MgRXhjZXB0aW9uQ2hhaW5pbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBUaGVyZSdzIG5vIHdheSB0byB1bnJlZ2lzdGVyIGEgY29kZWMgc2VhcmNoIGZ1bmN0aW9uLCBzbyB3ZSBqdXN0CisgICAgICAgICMgZW5zdXJlIHdlIHJlbmRlciB0aGlzIG9uZSBmYWlybHkgaGFybWxlc3MgYWZ0ZXIgdGhlIHRlc3QKKyAgICAgICAgIyBjYXNlIGZpbmlzaGVzIGJ5IHVzaW5nIHRoZSB0ZXN0IGNhc2UgcmVwciBhcyB0aGUgY29kZWMgbmFtZQorICAgICAgICAjIFRoZSBjb2RlY3MgbW9kdWxlIG5vcm1hbGl6ZXMgY29kZWMgbmFtZXMsIGFsdGhvdWdoIHRoaXMgZG9lc24ndAorICAgICAgICAjIGFwcGVhciB0byBiZSBmb3JtYWxseSBkb2N1bWVudGVkLi4uCisgICAgICAgICMgV2UgYWxzbyBtYWtlIHN1cmUgd2UgdXNlIGEgdHJ1bHkgdW5pcXVlIGlkIGZvciB0aGUgY3VzdG9tIGNvZGVjCisgICAgICAgICMgdG8gYXZvaWQgaXNzdWVzIHdpdGggdGhlIGNvZGVjIGNhY2hlIHdoZW4gcnVubmluZyB0aGVzZSB0ZXN0cworICAgICAgICAjIG11bHRpcGxlIHRpbWVzIChlLmcuIHdoZW4gaHVudGluZyBmb3IgcmVmbGVha3MpCisgICAgICAgIHVuaXF1ZV9pZCA9IHJlcHIoc2VsZikgKyBzdHIoaWQoc2VsZikpCisgICAgICAgIHNlbGYuY29kZWNfbmFtZSA9IGVuY29kaW5ncy5ub3JtYWxpemVfZW5jb2RpbmcodW5pcXVlX2lkKS5sb3dlcigpCisKKyAgICAgICAgIyBXZSBzdG9yZSB0aGUgb2JqZWN0IHRvIHJhaXNlIG9uIHRoZSBpbnN0YW5jZSBiZWNhdXNlIG9mIGEgYmFkCisgICAgICAgICMgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgY29kZWMgY2FjaGluZyAod2hpY2ggbWVhbnMgd2UgY2FuJ3QKKyAgICAgICAgIyByZWNyZWF0ZSB0aGUgY29kZWMgZW50cnkpIGFuZCByZWdydGVzdCByZWZsZWFrIGh1bnRpbmcgKHdoaWNoCisgICAgICAgICMgcnVucyB0aGUgc2FtZSB0ZXN0IGluc3RhbmNlIG11bHRpcGxlIHRpbWVzKS4gVGhpcyBtZWFucyB3ZQorICAgICAgICAjIG5lZWQgdG8gZW5zdXJlIHRoZSBjb2RlY3MgY2FsbCBiYWNrIGluIHRvIHRoZSBpbnN0YW5jZSB0byBmaW5kCisgICAgICAgICMgb3V0IHdoaWNoIGV4Y2VwdGlvbiB0byByYWlzZSByYXRoZXIgdGhhbiBiaW5kaW5nIHRoZW0gaW4gYQorICAgICAgICAjIGNsb3N1cmUgdG8gYW4gb2JqZWN0IHRoYXQgbWF5IGNoYW5nZSBvbiB0aGUgbmV4dCBydW4KKyAgICAgICAgc2VsZi5vYmpfdG9fcmFpc2UgPSBSdW50aW1lRXJyb3IKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgX1RFU1RfQ09ERUNTLnBvcChzZWxmLmNvZGVjX25hbWUsIE5vbmUpCisKKyAgICBkZWYgc2V0X2NvZGVjKHNlbGYsIGVuY29kZSwgZGVjb2RlKToKKyAgICAgICAgY29kZWNfaW5mbyA9IGNvZGVjcy5Db2RlY0luZm8oZW5jb2RlLCBkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9c2VsZi5jb2RlY19uYW1lKQorICAgICAgICBfVEVTVF9DT0RFQ1Nbc2VsZi5jb2RlY19uYW1lXSA9IGNvZGVjX2luZm8KKworICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIGFzc2VydFdyYXBwZWQoc2VsZiwgb3BlcmF0aW9uLCBleGNfdHlwZSwgbXNnKToKKyAgICAgICAgZnVsbF9tc2cgPSByInt9IHdpdGggeyFyfSBjb2RlYyBmYWlsZWQgXCh7fToge31cKSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLCBzZWxmLmNvZGVjX25hbWUsIGV4Y190eXBlLl9fbmFtZV9fLCBtc2cpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChleGNfdHlwZSwgZnVsbF9tc2cpIGFzIGNhdWdodDoKKyAgICAgICAgICAgIHlpZWxkIGNhdWdodAorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2F1Z2h0LmV4Y2VwdGlvbi5fX2NhdXNlX18sIGV4Y190eXBlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShjYXVnaHQuZXhjZXB0aW9uLl9fY2F1c2VfXy5fX3RyYWNlYmFja19fKQorCisgICAgZGVmIHJhaXNlX29iaihzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgIyBIZWxwZXIgdG8gZHluYW1pY2FsbHkgY2hhbmdlIHRoZSBvYmplY3QgcmFpc2VkIGJ5IGEgdGVzdCBjb2RlYworICAgICAgICByYWlzZSBzZWxmLm9ial90b19yYWlzZQorCisgICAgZGVmIGNoZWNrX3dyYXBwZWQoc2VsZiwgb2JqX3RvX3JhaXNlLCBtc2csIGV4Y190eXBlPVJ1bnRpbWVFcnJvcik6CisgICAgICAgIHNlbGYub2JqX3RvX3JhaXNlID0gb2JqX3RvX3JhaXNlCisgICAgICAgIHNlbGYuc2V0X2NvZGVjKHNlbGYucmFpc2Vfb2JqLCBzZWxmLnJhaXNlX29iaikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdyYXBwZWQoImVuY29kaW5nIiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgICAgICAic3RyX2lucHV0Ii5lbmNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V3JhcHBlZCgiZW5jb2RpbmciLCBleGNfdHlwZSwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5lbmNvZGUoInN0cl9pbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdyYXBwZWQoImRlY29kaW5nIiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgICAgICBiImJ5dGVzIGlucHV0Ii5kZWNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V3JhcHBlZCgiZGVjb2RpbmciLCBleGNfdHlwZSwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5kZWNvZGUoYiJieXRlcyBpbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKworICAgIGRlZiB0ZXN0X3JhaXNlX2J5X3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlZChSdW50aW1lRXJyb3IsICIiKQorCisgICAgZGVmIHRlc3RfcmFpc2VfYnlfdmFsdWUoc2VsZik6CisgICAgICAgIG1zZyA9ICJUaGlzIHNob3VsZCBiZSB3cmFwcGVkIgorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZWQoUnVudGltZUVycm9yKG1zZyksIG1zZykKKworICAgIGRlZiB0ZXN0X3JhaXNlX2dyYW5kY2hpbGRfc3ViY2xhc3NfZXhhY3Rfc2l6ZShzZWxmKToKKyAgICAgICAgbXNnID0gIlRoaXMgc2hvdWxkIGJlIHdyYXBwZWQiCisgICAgICAgIGNsYXNzIE15UnVudGltZUVycm9yKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSAoKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZWQoTXlSdW50aW1lRXJyb3IobXNnKSwgbXNnLCBNeVJ1bnRpbWVFcnJvcikKKworICAgIGRlZiB0ZXN0X3JhaXNlX3N1YmNsYXNzX3dpdGhfd2Vha3JlZl9zdXBwb3J0KHNlbGYpOgorICAgICAgICBtc2cgPSAiVGhpcyBzaG91bGQgYmUgd3JhcHBlZCIKKyAgICAgICAgY2xhc3MgTXlSdW50aW1lRXJyb3IoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVkKE15UnVudGltZUVycm9yKG1zZyksIG1zZywgTXlSdW50aW1lRXJyb3IpCisKKyAgICBkZWYgY2hlY2tfbm90X3dyYXBwZWQoc2VsZiwgb2JqX3RvX3JhaXNlLCBtc2cpOgorICAgICAgICBkZWYgcmFpc2Vfb2JqKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmFpc2Ugb2JqX3RvX3JhaXNlCisgICAgICAgIHNlbGYuc2V0X2NvZGVjKHJhaXNlX29iaiwgcmFpc2Vfb2JqKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgInN0ciBpbnB1dCIuZW5jb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5lbmNvZGUoInN0ciBpbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGIiYnl0ZXMgaW5wdXQiLmRlY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiYnl0ZXMgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisKKyAgICBkZWYgdGVzdF9pbml0X292ZXJyaWRlX2lzX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBDdXN0b21Jbml0KFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNoZWNrX25vdF93cmFwcGVkKEN1c3RvbUluaXQsICIiKQorCisgICAgZGVmIHRlc3RfbmV3X292ZXJyaWRlX2lzX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBDdXN0b21OZXcoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19uZXdfXyhjbHMpCisgICAgICAgIHNlbGYuY2hlY2tfbm90X3dyYXBwZWQoQ3VzdG9tTmV3LCAiIikKKworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2F0dHJpYnV0ZV9pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgbXNnID0gIlRoaXMgc2hvdWxkIE5PVCBiZSB3cmFwcGVkIgorICAgICAgICBleGMgPSBSdW50aW1lRXJyb3IobXNnKQorICAgICAgICBleGMuYXR0ciA9IDEKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChleGMsICJee30kIi5mb3JtYXQobXNnKSkKKworICAgIGRlZiB0ZXN0X25vbl9zdHJfYXJnX2lzX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX25vdF93cmFwcGVkKFJ1bnRpbWVFcnJvcigxKSwgIjEiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfYXJnc19pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgbXNnX3JlID0gciJeXCgnYScsICdiJywgJ2MnXCkkIgorICAgICAgICBzZWxmLmNoZWNrX25vdF93cmFwcGVkKFJ1bnRpbWVFcnJvcignYScsICdiJywgJ2MnKSwgbXNnX3JlKQorCisgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk2MDkKKyAgICBkZWYgdGVzdF9jb2RlY19sb29rdXBfZmFpbHVyZV9ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgbXNnID0gIl51bmtub3duIGVuY29kaW5nOiB7fSQiLmZvcm1hdChzZWxmLmNvZGVjX25hbWUpCisgICAgICAgICMgVGhlIGluaXRpYWwgY29kZWMgbG9va3VwIHNob3VsZCBub3QgYmUgd3JhcHBlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAic3RyIGlucHV0Ii5lbmNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZW5jb2RlKCJzdHIgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGIiYnl0ZXMgaW5wdXQiLmRlY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5kZWNvZGUoYiJieXRlcyBpbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKworICAgIGRlZiB0ZXN0X3VuZmxhZ2dlZF9ub25fdGV4dF9jb2RlY19oYW5kbGluZyhzZWxmKToKKyAgICAgICAgIyBUaGUgc3RkbGliIG5vbi10ZXh0IGNvZGVjcyBhcmUgbm93IG1hcmtlZCBzbyB0aGV5J3JlCisgICAgICAgICMgcHJlLWVtcHRpdmVseSBza2lwcGVkIGJ5IHRoZSB0ZXh0IG1vZGVsIHJlbGF0ZWQgbWV0aG9kcworICAgICAgICAjIEhvd2V2ZXIsIHRoaXJkIHBhcnR5IGNvZGVjcyB3b24ndCBiZSBmbGFnZ2VkLCBzbyB3ZSBzdGlsbCBtYWtlCisgICAgICAgICMgc3VyZSB0aGUgY2FzZSB3aGVyZSBhbiBpbmFwcHJvcHJpYXRlIG91dHB1dCB0eXBlIGlzIHByb2R1Y2VkIGlzCisgICAgICAgICMgaGFuZGxlZCBhcHByb3ByaWF0ZWx5CisgICAgICAgIGRlZiBlbmNvZGVfdG9fc3RyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuICJub3QgYnl0ZXMhIiwgMAorICAgICAgICBkZWYgZGVjb2RlX3RvX2J5dGVzKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGIibm90IHN0ciEiLCAwCisgICAgICAgIHNlbGYuc2V0X2NvZGVjKGVuY29kZV90b19zdHIsIGRlY29kZV90b19ieXRlcykKKyAgICAgICAgIyBObyBpbnB1dCBvciBvdXRwdXQgdHlwZSBjaGVja3Mgb24gdGhlIGNvZGVjcyBtb2R1bGUgZnVuY3Rpb25zCisgICAgICAgIGVuY29kZWQgPSBjb2RlY3MuZW5jb2RlKE5vbmUsIHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVkLCAibm90IGJ5dGVzISIpCisgICAgICAgIGRlY29kZWQgPSBjb2RlY3MuZGVjb2RlKE5vbmUsIHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVkLCBiIm5vdCBzdHIhIikKKyAgICAgICAgIyBUZXh0IG1vZGVsIG1ldGhvZHMgc2hvdWxkIGNvbXBsYWluCisgICAgICAgIGZtdCA9IChyIl57IXJ9IGVuY29kZXIgcmV0dXJuZWQgJ3N0cicgaW5zdGVhZCBvZiAnYnl0ZXMnOyAiCisgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlXChcKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzJCIpCisgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgInN0cl9pbnB1dCIuZW5jb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgZm10ID0gKHIiXnshcn0gZGVjb2RlciByZXR1cm5lZCAnYnl0ZXMnIGluc3RlYWQgb2YgJ3N0cic7ICIKKyAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5kZWNvZGVcKFwpIHRvIGRlY29kZSB0byBhcmJpdHJhcnkgdHlwZXMkIikKKyAgICAgICAgbXNnID0gZm10LmZvcm1hdChzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBiImJ5dGVzIGlucHV0Ii5kZWNvZGUoc2VsZi5jb2RlY19uYW1lKQorCiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICd3aW4zMicsCkBAIC0yNDE1LDggKzI3NDMsOCBAQAogICAgIGRlZiB0ZXN0X2ludmFsaWRfY29kZV9wYWdlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb2RlY3MuY29kZV9wYWdlX2VuY29kZSwgLTEsICdhJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUsIC0xLCBiJ2EnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZW5jb2RlLCAxMjMsICdhJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2RlY29kZSwgMTIzLCBiJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2VuY29kZSwgMTIzLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlLCAxMjMsIGInYScpCiAKICAgICBkZWYgdGVzdF9jb2RlX3BhZ2VfbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChVbmljb2RlRW5jb2RlRXJyb3IsICdjcDkzMicsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODljN2E4Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmssIHVubG9hZAotaW1wb3J0IGltcG9ydGxpYiwgb3MsIHN5cwotCi1jbGFzcyBDb2RpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgotICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nJwotICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQotCi0gICAgZGVmIHRlc3RfYmFkX2NvZGluZzIoc2VsZik6Ci0gICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcyJwotICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQotCi0gICAgZGVmIHZlcmlmeV9iYWRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIF9faW1wb3J0X18sICd0ZXN0LicgKyBtb2R1bGVfbmFtZSkKLQotICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBtb2R1bGVfbmFtZSArICcucHknKQotICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgotICAgICAgICAgICAgYnl0ZXMgPSBmcC5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGJ5dGVzLCBmaWxlbmFtZSwgJ2V4ZWMnKQotCi0gICAgZGVmIHRlc3RfZXhlY192YWxpZF9jb2Rpbmcoc2VsZik6Ci0gICAgICAgIGQgPSB7fQotICAgICAgICBleGVjKGInIyBjb2Rpbmc6IGNwOTQ5XG5hID0gIlx4YWFceGE3IlxuJywgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sICdcdTMwNDcnKQotCi0gICAgZGVmIHRlc3RfZmlsZV9wYXJzZShzZWxmKToKLSAgICAgICAgIyBpc3N1ZTExMzQ6IGFsbCBlbmNvZGluZ3Mgb3V0c2lkZSBsYXRpbi0xIGFuZCB1dGYtOCBmYWlsIG9uCi0gICAgICAgICMgbXVsdGlsaW5lIHN0cmluZ3MgYW5kIGxvbmcgbGluZXMgKD41MTIgY29sdW1ucykKLSAgICAgICAgdW5sb2FkKFRFU1RGTikKLSAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAiLnB5IgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz0iY3AxMjUyIikKLSAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBmOgotICAgICAgICAgICAgICAgIGYud3JpdGUoIiMgLSotIGNvZGluZzogY3AxMjUyIC0qLVxuIikKLSAgICAgICAgICAgICAgICBmLndyaXRlKCInJydBIHNob3J0IHN0cmluZ1xuIikKLSAgICAgICAgICAgICAgICBmLndyaXRlKCInJydcbiIpCi0gICAgICAgICAgICAgICAgZi53cml0ZSgiJ0EgdmVyeSBsb25nIHN0cmluZyAlcydcbiIgJSAoIlgiICogMTAwMCkpCi0KLSAgICAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCi0gICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQotICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lKQotICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgImMiKQotICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgIm8iKQotICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKLQotICAgIGRlZiB0ZXN0X2Vycm9yX2Zyb21fc3RyaW5nKHNlbGYpOgotICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjI4OQotICAgICAgICBpbnB1dCA9ICIjIGNvZGluZzogYXNjaWlcblxOe1NOT1dNQU59Ii5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcikgYXMgYzoKLSAgICAgICAgICAgIGNvbXBpbGUoaW5wdXQsICI8c3RyaW5nPiIsICJleGVjIikKLSAgICAgICAgZXhwZWN0ZWQgPSAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAweGUyIGluIHBvc2l0aW9uIDE2OiAiIFwKLSAgICAgICAgICAgICAgICAgICAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuZXhjZXB0aW9uLmFyZ3NbMF0uc3RhcnRzd2l0aChleHBlY3RlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtc2c9Yy5leGNlcHRpb24uYXJnc1swXSkKLQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKaW5kZXggZmY1Mjc1NS4uZWUyOGE2YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CkBAIC0xMTIsNiArMTEyLDM4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChkKSwgZGljdChhPTEsIGI9MiwgYz0zMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChkLml0ZW1zKCkpLCBkaWN0KGE9MSwgYj0yLCBjPTMwKSkKIAorICAgIGRlZiB0ZXN0X25ld19jaGlsZChzZWxmKToKKyAgICAgICAgJ1Rlc3RzIGZvciBjaGFuZ2VzIGZvciBpc3N1ZSAjMTY2MTMuJworICAgICAgICBjID0gQ2hhaW5NYXAoKQorICAgICAgICBjWydhJ10gPSAxCisgICAgICAgIGNbJ2InXSA9IDIKKyAgICAgICAgbSA9IHsnYic6MjAsICdjJzogMzB9CisgICAgICAgIGQgPSBjLm5ld19jaGlsZChtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubWFwcywgW3snYic6MjAsICdjJzozMH0sIHsnYSc6MSwgJ2InOjJ9XSkgICMgY2hlY2sgaW50ZXJuYWwgc3RhdGUKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtLCBkLm1hcHNbMF0pCisKKyAgICAgICAgIyBVc2UgYSBkaWZmZXJlbnQgbWFwIHRoYW4gYSBkaWN0CisgICAgICAgIGNsYXNzIGxvd2VyZGljdChkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQorICAgICAgICAgICAgICAgIHJldHVybiBkaWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKKyAgICAgICAgICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5fX2NvbnRhaW5zX18oc2VsZiwga2V5KQorCisgICAgICAgIGMgPSBDaGFpbk1hcCgpCisgICAgICAgIGNbJ2EnXSA9IDEKKyAgICAgICAgY1snYiddID0gMgorICAgICAgICBtID0gbG93ZXJkaWN0KGI9MjAsIGM9MzApCisgICAgICAgIGQgPSBjLm5ld19jaGlsZChtKQorICAgICAgICBzZWxmLmFzc2VydElzKG0sIGQubWFwc1swXSkKKyAgICAgICAgZm9yIGtleSBpbiAnYWJjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGNvbnRhaW5zCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgZCkKKyAgICAgICAgZm9yIGssIHYgaW4gZGljdChhPTEsIEI9MjAsIEM9MzAsIHo9MTAwKS5pdGVtcygpOiAgICAgICAgICAgICAjIGNoZWNrIGdldAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChrLCAxMDApLCB2KQorCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgTmFtZWQgVHVwbGVzCkBAIC0yNjksNyArMzAxLDcgQEAKICAgICAgICAgZm9yIG1vZHVsZSBpbiAocGlja2xlLCk6CiAgICAgICAgICAgICBsb2FkcyA9IGdldGF0dHIobW9kdWxlLCAnbG9hZHMnKQogICAgICAgICAgICAgZHVtcHMgPSBnZXRhdHRyKG1vZHVsZSwgJ2R1bXBzJykKLSAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiAtMSwgMCwgMSwgMjoKKyAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZSgtMSwgbW9kdWxlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgICAgICBxID0gbG9hZHMoZHVtcHMocCwgcHJvdG9jb2wpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgcSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX2ZpZWxkcywgcS5fZmllbGRzKQpAQCAtNzUwLDYgKzc4Miw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIFNlcXVlbmNlKSkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJhbmdlKDEwKSwgU2VxdWVuY2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHJhbmdlLCBTZXF1ZW5jZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtZW1vcnl2aWV3KGIiIiksIFNlcXVlbmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhtZW1vcnl2aWV3LCBTZXF1ZW5jZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHN0ciwgU2VxdWVuY2UpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoU2VxdWVuY2UsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycsCiAgICAgICAgICAgICAnX19nZXRpdGVtX18nKQpAQCAtOTA0LDIzICs5MzgsMjYgQEAKICAgICAgICAgd29yZHMgPSBDb3VudGVyKCd3aGljaCB3aXRjaCBoYWQgd2hpY2ggd2l0Y2hlcyB3cmlzdCB3YXRjaCcuc3BsaXQoKSkKICAgICAgICAgdXBkYXRlX3Rlc3QgPSBDb3VudGVyKCkKICAgICAgICAgdXBkYXRlX3Rlc3QudXBkYXRlKHdvcmRzKQotICAgICAgICBmb3IgaSwgZHVwIGluIGVudW1lcmF0ZShbCi0gICAgICAgICAgICAgICAgICAgIHdvcmRzLmNvcHkoKSwKLSAgICAgICAgICAgICAgICAgICAgY29weS5jb3B5KHdvcmRzKSwKLSAgICAgICAgICAgICAgICAgICAgY29weS5kZWVwY29weSh3b3JkcyksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDApKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMSkpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAyKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIC0xKSksCi0gICAgICAgICAgICAgICAgICAgIGV2YWwocmVwcih3b3JkcykpLAotICAgICAgICAgICAgICAgICAgICB1cGRhdGVfdGVzdCwKLSAgICAgICAgICAgICAgICAgICAgQ291bnRlcih3b3JkcyksCi0gICAgICAgICAgICAgICAgICAgIF0pOgotICAgICAgICAgICAgbXNnID0gKGksIGR1cCwgd29yZHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHVwIGlzIG5vdCB3b3JkcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCB3b3JkcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cCksIGxlbih3b3JkcykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZHVwKSwgdHlwZSh3b3JkcykpCisgICAgICAgIGZvciBsYWJlbCwgZHVwIGluIFsKKyAgICAgICAgICAgICAgICAgICAgKCd3b3Jkcy5jb3B5KCknLCB3b3Jkcy5jb3B5KCkpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvcHkuY29weSh3b3JkcyknLCBjb3B5LmNvcHkod29yZHMpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb3B5LmRlZXBjb3B5KHdvcmRzKScsIGNvcHkuZGVlcGNvcHkod29yZHMpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAwKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAxKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMSkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAyKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMikpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAtMSkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIC0xKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ2V2YWwocmVwcih3b3JkcykpJywgZXZhbChyZXByKHdvcmRzKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3VwZGF0ZV90ZXN0JywgdXBkYXRlX3Rlc3QpLAorICAgICAgICAgICAgICAgICAgICAoJ0NvdW50ZXIod29yZHMpJywgQ291bnRlcih3b3JkcykpLAorICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobGFiZWw9bGFiZWwpOgorICAgICAgICAgICAgICAgIG1zZyA9ICJcbmNvcHk6ICVzXG53b3JkczogJXMiICUgKGR1cCwgd29yZHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkdXAsIHdvcmRzLCBtc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIHdvcmRzKQogCiAgICAgZGVmIHRlc3RfY29weV9zdWJjbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgTXlDb3VudGVyKENvdW50ZXIpOgpAQCAtMTA0Myw4ICsxMDgwLDEwIEBACiAgICAgICAgICMgdGVzdCBmaWRlbGl0eSB0byB0aGUgcHVyZSBweXRob24gdmVyc2lvbgogICAgICAgICBjID0gQ291bnRlclN1YmNsYXNzV2l0aFNldEl0ZW0oJ2FicmFjYWRhYnJhJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoYyksIHsnYSc6IDUsICdiJzogMiwgJ2MnOiAxLCAnZCc6IDEsICdyJzoyIH0pCiAgICAgICAgIGMgPSBDb3VudGVyU3ViY2xhc3NXaXRoR2V0KCdhYnJhY2FkYWJyYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGMpLCB7J2EnOiA1LCAnYic6IDIsICdjJzogMSwgJ2QnOiAxLCAncic6MiB9KQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xMjA1LDI0ICsxMjQ0LDI4IEBACiAgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCiAgICAgICAgIHVwZGF0ZV90ZXN0ID0gT3JkZXJlZERpY3QoKQogICAgICAgICB1cGRhdGVfdGVzdC51cGRhdGUob2QpCi0gICAgICAgIGZvciBpLCBkdXAgaW4gZW51bWVyYXRlKFsKLSAgICAgICAgICAgICAgICAgICAgb2QuY29weSgpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmNvcHkob2QpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmRlZXBjb3B5KG9kKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMCkpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAxKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDIpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMykpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAtMSkpLAotICAgICAgICAgICAgICAgICAgICBldmFsKHJlcHIob2QpKSwKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Rlc3QsCi0gICAgICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KG9kKSwKLSAgICAgICAgICAgICAgICAgICAgXSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHVwIGlzIG5vdCBvZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCBvZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkdXAuaXRlbXMoKSksIGxpc3Qob2QuaXRlbXMoKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4ob2QpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGR1cCksIHR5cGUob2QpKQorICAgICAgICBmb3IgbGFiZWwsIGR1cCBpbiBbCisgICAgICAgICAgICAgICAgICAgICgnb2QuY29weSgpJywgb2QuY29weSgpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb3B5LmNvcHkob2QpJywgY29weS5jb3B5KG9kKSksCisgICAgICAgICAgICAgICAgICAgICgnY29weS5kZWVwY29weShvZCknLCBjb3B5LmRlZXBjb3B5KG9kKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMCkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDApKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMSkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDEpKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMikpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDIpKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMykpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDMpKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgLTEpKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAtMSkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdldmFsKHJlcHIob2QpKScsIGV2YWwocmVwcihvZCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCd1cGRhdGVfdGVzdCcsIHVwZGF0ZV90ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgKCdPcmRlcmVkRGljdChvZCknLCBPcmRlcmVkRGljdChvZCkpLAorICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobGFiZWw9bGFiZWwpOgorICAgICAgICAgICAgICAgIG1zZyA9ICJcbmNvcHk6ICVzXG5vZDogJXMiICUgKGR1cCwgb2QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkdXAsIG9kLCBtc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIG9kKQogCiAgICAgZGVmIHRlc3RfeWFtbF9saW5rYWdlKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0IF9fcmVkdWNlX18gaXMgc2V0dXAgaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBQeVlBTUwncyBkdW1wKCkgZmVhdHVyZS4KQEAgLTEyMzcsOSArMTI4MCwxOCBAQAogICAgICAgICAjIGRvIG5vdCBzYXZlIGluc3RhbmNlIGRpY3Rpb25hcnkgaWYgbm90IG5lZWRlZAogICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZC5fX3JlZHVjZV9fKCkpLCAyKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShvZC5fX3JlZHVjZV9fKClbMl0pCiAgICAgICAgIG9kLnggPSAxMAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZC5fX3JlZHVjZV9fKCkpLCAzKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShvZC5fX3JlZHVjZV9fKClbMl0pCisKKyAgICBkZWYgdGVzdF9waWNrbGVfcmVjdXJzaXZlKHNlbGYpOgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2RbMV0gPSBvZAorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoLTEsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdXAgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCBwcm90bykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGR1cCwgb2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZHVwLmtleXMoKSksIFsxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZHVwWzFdLCBkdXApCiAKICAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbG9yc3lzLnB5CmluZGV4IGU0MDViOGEuLmEyNGUzYWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weQpAQCAtMSw0ICsxLDQgQEAKLWltcG9ydCB1bml0dGVzdCwgdGVzdC5zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBjb2xvcnN5cwogCiBkZWYgZnJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKToKQEAgLTY5LDggKzY5LDMyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKGhscywgY29sb3JzeXMucmdiX3RvX2hscygqcmdiKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwocmdiLCBjb2xvcnN5cy5obHNfdG9fcmdiKCpobHMpKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDb2xvcnN5c1Rlc3QpCisgICAgZGVmIHRlc3RfeWlxX3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgZm9yIHIgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgZm9yIGcgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgICAgIGZvciBiIGluIGZyYW5nZSgwLjAsIDEuMCwgMC4yKToKKyAgICAgICAgICAgICAgICAgICAgcmdiID0gKHIsIGcsIGIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICByZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnN5cy55aXFfdG9fcmdiKCpjb2xvcnN5cy5yZ2JfdG9feWlxKCpyZ2IpKQorICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF95aXFfdmFsdWVzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBbCisgICAgICAgICAgICAjIHJnYiwgeWlxCisgICAgICAgICAgICAoKDAuMCwgMC4wLCAwLjApLCAoMC4wLCAwLjAsIDAuMCkpLCAjIGJsYWNrCisgICAgICAgICAgICAoKDAuMCwgMC4wLCAxLjApLCAoMC4xMSwgLTAuMzIxNywgMC4zMTIxKSksICMgYmx1ZQorICAgICAgICAgICAgKCgwLjAsIDEuMCwgMC4wKSwgKDAuNTksIC0wLjI3NzMsIC0wLjUyNTEpKSwgIyBncmVlbgorICAgICAgICAgICAgKCgwLjAsIDEuMCwgMS4wKSwgKDAuNywgLTAuNTk5LCAtMC4yMTMpKSwgIyBjeWFuCisgICAgICAgICAgICAoKDEuMCwgMC4wLCAwLjApLCAoMC4zLCAwLjU5OSwgMC4yMTMpKSwgIyByZWQKKyAgICAgICAgICAgICgoMS4wLCAwLjAsIDEuMCksICgwLjQxLCAwLjI3NzMsIDAuNTI1MSkpLCAjIHB1cnBsZQorICAgICAgICAgICAgKCgxLjAsIDEuMCwgMC4wKSwgKDAuODksIDAuMzIxNywgLTAuMzEyMSkpLCAjIHllbGxvdworICAgICAgICAgICAgKCgxLjAsIDEuMCwgMS4wKSwgKDEuMCwgMC4wLCAwLjApKSwgIyB3aGl0ZQorICAgICAgICAgICAgKCgwLjUsIDAuNSwgMC41KSwgKDAuNSwgMC4wLCAwLjApKSwgIyBncmV5CisgICAgICAgIF0KKyAgICAgICAgZm9yIChyZ2IsIHlpcSkgaW4gdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbCh5aXEsIGNvbG9yc3lzLnJnYl90b195aXEoKnJnYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKHJnYiwgY29sb3JzeXMueWlxX3RvX3JnYigqeWlxKSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5CmluZGV4IDA1MDVjNTIuLjJhNDIyMzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKQEAgLTEsMTEgKzEsMTAgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBjb21waWxlYWxsCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcwogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzdHJ1Y3QKLWltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTE4LDExICsxNywxMSBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0LnB5JykKLSAgICAgICAgc2VsZi5iY19wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCisgICAgICAgIHNlbGYuYmNfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZV9wYXRoLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlLndyaXRlKCd4ID0gMTIzXG4nKQogICAgICAgICBzZWxmLnNvdXJjZV9wYXRoMiA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0Mi5weScpCi0gICAgICAgIHNlbGYuYmNfcGF0aDIgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDIpCisgICAgICAgIHNlbGYuYmNfcGF0aDIgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMikKICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYuc291cmNlX3BhdGgyKQogICAgICAgICBzZWxmLnN1YmRpcmVjdG9yeSA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ19zdWJkaXInKQogICAgICAgICBvcy5ta2RpcihzZWxmLnN1YmRpcmVjdG9yeSkKQEAgLTM2LDcgKzM1LDcgQEAKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuYmNfcGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgIGRhdGEgPSBmaWxlLnJlYWQoOCkKICAgICAgICAgbXRpbWUgPSBpbnQob3Muc3RhdChzZWxmLnNvdXJjZV9wYXRoKS5zdF9tdGltZSkKLSAgICAgICAgY29tcGFyZSA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wLmdldF9tYWdpYygpLCBtdGltZSkKKyAgICAgICAgY29tcGFyZSA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSLCBtdGltZSkKICAgICAgICAgcmV0dXJuIGRhdGEsIGNvbXBhcmUKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzdGF0JyksICd0ZXN0IG5lZWRzIG9zLnN0YXQoKScpCkBAIC01Niw3ICs1NSw4IEBACiAKICAgICBkZWYgdGVzdF9tdGltZShzZWxmKToKICAgICAgICAgIyBUZXN0IGEgY2hhbmdlIGluIG10aW1lIGxlYWRzIHRvIGEgbmV3IC5weWMuCi0gICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgMSkpCisgICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhzdHJ1Y3QucGFjaygnPDRzbCcsIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKQogCiAgICAgZGVmIHRlc3RfbWFnaWNfbnVtYmVyKHNlbGYpOgogICAgICAgICAjIFRlc3QgYSBjaGFuZ2UgaW4gbXRpbWUgbGVhZHMgdG8gYSBuZXcgLnB5Yy4KQEAgLTk2LDE0ICs5NiwxNCBAQAogICAgICAgICAjIGludGVycHJldGVyJ3MgY3JlYXRlcyB0aGUgY29ycmVjdCBmaWxlIG5hbWVzCiAgICAgICAgIG9wdGltaXplID0gMSBpZiBfX2RlYnVnX18gZWxzZSAwCiAgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIHF1aWV0PVRydWUsIG9wdGltaXplPW9wdGltaXplKQotICAgICAgICBjYWNoZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgY2FjaGVkID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkKSkKLSAgICAgICAgY2FjaGVkMiA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgY2FjaGVkMiA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkMikpCi0gICAgICAgIGNhY2hlZDMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGNhY2hlZDMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZDMpKQogCiAKQEAgLTE1MSwxMCArMTUxLDEyIEBACiAgICAgICAgIHJldHVybiByYywgb3V0LCBlcnIKIAogICAgIGRlZiBhc3NlcnRDb21waWxlZChzZWxmLCBmbik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZm4pKSkKKyAgICAgICAgcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICBkZWYgYXNzZXJ0Tm90Q29tcGlsZWQoc2VsZiwgZm4pOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmbikpKQorICAgICAgICBwYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLl9jbGVhbnVwKQpAQCAtMTgwLDcgKzE4Miw3IEBACiAgICAgZGVmIHRlc3Rfbm9fYXJnc19yZXNwZWN0c19mb3JjZV9mbGFnKHNlbGYpOgogICAgICAgICBiYXpmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5kaXJlY3RvcnksICdiYXonLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRSdW5PSyhQWVRIT05QQVRIPXNlbGYuZGlyZWN0b3J5KQotICAgICAgICBweWNwYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGJhemZuKQorICAgICAgICBweWNwYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoYmF6Zm4pCiAgICAgICAgICMgU2V0IGF0aW1lL210aW1lIGJhY2t3YXJkIHRvIGF2b2lkIGZpbGUgdGltZXN0YW1wIHJlc29sdXRpb24gaXNzdWVzCiAgICAgICAgIG9zLnV0aW1lKHB5Y3BhdGgsICh0aW1lLnRpbWUoKS02MCwpKjIpCiAgICAgICAgIG10aW1lID0gb3Muc3RhdChweWNwYXRoKS5zdF9tdGltZQpAQCAtMjEyLDggKzIxNCw4IEBACiAgICAgICAgICAgICAgICAgWyctbScsICdjb21waWxlYWxsJywgJy1xJywgc2VsZi5wa2dkaXJdKSkKICAgICAgICAgICAgICMgVmVyaWZ5IHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcnkgY29udGVudHMuCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5wa2dkaXJfY2FjaGVkaXIpKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSBzb3J0ZWQoYmFzZS5mb3JtYXQoaW1wLmdldF90YWcoKSwgZXh0KSBmb3IgYmFzZSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfX2luaXRfXy57fS57fScsICdiYXIue30ue30nKSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc29ydGVkKGJhc2UuZm9ybWF0KHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcsIGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBiYXNlIGluICgnX19pbml0X18ue30ue30nLCAnYmFyLnt9Lnt9JykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvcy5saXN0ZGlyKHNlbGYucGtnZGlyX2NhY2hlZGlyKSksIGV4cGVjdGVkKQogICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIC5weWMgZmlsZXMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFtmbiBmb3IgZm4gaW4gb3MubGlzdGRpcihzZWxmLnBrZ2RpcikKQEAgLTI0Niw3ICsyNDgsNyBAQAogCiAgICAgZGVmIHRlc3RfZm9yY2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgc2VsZi5wa2dkaXIpCi0gICAgICAgIHB5Y3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5iYXJmbikKKyAgICAgICAgcHljcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuYmFyZm4pCiAgICAgICAgICMgc2V0IGF0aW1lL210aW1lIGJhY2t3YXJkIHRvIGF2b2lkIGZpbGUgdGltZXN0YW1wIHJlc29sdXRpb24gaXNzdWVzCiAgICAgICAgIG9zLnV0aW1lKHB5Y3BhdGgsICh0aW1lLnRpbWUoKS02MCwpKjIpCiAgICAgICAgIG10aW1lID0gb3Muc3RhdChweWNwYXRoKS5zdF9tdGltZQpAQCAtMzEwLDEwICszMTIsMTAgQEAKICAgICAgICAgYmF6Zm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnYmF6JywgJ3JhaXNlIEV4Y2VwdGlvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgJy1kJywgJ2RpbnNkYWxlJywgc2VsZi5wa2dkaXIpCiAgICAgICAgIGZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2JpbmcnLCAnaW1wb3J0IGJheicpCi0gICAgICAgIHB5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShiYXpmbikKKyAgICAgICAgcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoYmF6Zm4pCiAgICAgICAgIG9zLnJlbmFtZShweWMsIG9zLnBhdGguam9pbihzZWxmLnBrZ2RpciwgJ2Jhei5weWMnKSkKICAgICAgICAgb3MucmVtb3ZlKGJhemZuKQotICAgICAgICByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShmbikKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoZm4sIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBiJ0ZpbGUgImRpbnNkYWxlJykKIAogICAgIGRlZiB0ZXN0X2luY2x1ZGVfYmFkX2ZpbGUoc2VsZik6CkBAIC0zMjEsNyArMzIzLDcgQEAKICAgICAgICAgICAgICctaScsIG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ25vc3VjaGZpbGUnKSwgc2VsZi5wa2dkaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0LCBiJ3Jyb3IuKm5vc3VjaGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydE5vdFJlZ2V4KGVyciwgYidUcmFjZWJhY2snKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dkaXJfY2FjaGVkaXIpKSkKIAogICAgIGRlZiB0ZXN0X2luY2x1ZGVfZmlsZV93aXRoX2FyZyhzZWxmKToKQEAgLTM3OCwxMyArMzgwLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXQsIGIiQ2FuJ3QgbGlzdCAnYmFkZmlsZW5hbWUnIikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgIENvbW1hbmRMaW5lVGVzdHMsCi0gICAgICAgIENvbXBpbGVhbGxUZXN0cywKLSAgICAgICAgRW5jb2RpbmdUZXN0LAotICAgICAgICApCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5IGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CmluZGV4IDFiZjQwOTcuLmNkNTUzNzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKQEAgLTIyMCw2ICsyMjAsOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE9TKE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKDEuNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTlMoMSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIxKzEwaiIpLCAxKzEwaikKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEwKSwgMTArMGopCkBAIC0zMDEsNiArMzAzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmbG9hdCwgNSszaikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJub3QgJ05vbmVUeXBlJyIsIGNvbXBsZXgsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICJcMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIzXDA5IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCAiMSIsICIyIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29uY3VycmVudF9mdXR1cmVzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKaW5kZXggMDRjNGMzNy4uYzc0YjJjYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKQEAgLTE1LDYgKzE1LDcgQEAKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCiAKIGZyb20gY29uY3VycmVudCBpbXBvcnQgZnV0dXJlcwogZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMuX2Jhc2UgaW1wb3J0ICgKQEAgLTUyLDYgKzUzLDExIEBACiAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAKIAorY2xhc3MgTXlPYmplY3Qob2JqZWN0KToKKyAgICBkZWYgbXlfbWV0aG9kKHNlbGYpOgorICAgICAgICBwYXNzCisKKwogY2xhc3MgRXhlY3V0b3JNaXhpbjoKICAgICB3b3JrZXJfY291bnQgPSA1CiAKQEAgLTQwMyw2ICs0MDksMjIgQEAKICAgICAgICAgc2VsZi5leGVjdXRvci5tYXAoc3RyLCBbMl0gKiAoc2VsZi53b3JrZXJfY291bnQgKyAxKSkKICAgICAgICAgc2VsZi5leGVjdXRvci5zaHV0ZG93bigpCiAKKyAgICBAdGVzdC5zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X25vX3N0YWxlX3JlZmVyZW5jZXMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2Mjg0OiBjaGVjayB0aGF0IHRoZSBleGVjdXRvcnMgZG9uJ3QgdW5uZWNlc3NhcmlseSBoYW5nIG9udG8KKyAgICAgICAgIyByZWZlcmVuY2VzLgorICAgICAgICBteV9vYmplY3QgPSBNeU9iamVjdCgpCisgICAgICAgIG15X29iamVjdF9jb2xsZWN0ZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBteV9vYmplY3RfY2FsbGJhY2sgPSB3ZWFrcmVmLnJlZigKKyAgICAgICAgICAgIG15X29iamVjdCwgbGFtYmRhIG9iajogbXlfb2JqZWN0X2NvbGxlY3RlZC5zZXQoKSkKKyAgICAgICAgIyBEZWxpYmVyYXRlbHkgZGlzY2FyZGluZyB0aGUgZnV0dXJlLgorICAgICAgICBzZWxmLmV4ZWN1dG9yLnN1Ym1pdChteV9vYmplY3QubXlfbWV0aG9kKQorICAgICAgICBkZWwgbXlfb2JqZWN0CisKKyAgICAgICAgY29sbGVjdGVkID0gbXlfb2JqZWN0X2NvbGxlY3RlZC53YWl0KHRpbWVvdXQ9NS4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sbGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIlN0YWxlIHJlZmVyZW5jZSBub3QgY29sbGVjdGVkIHdpdGhpbiB0aW1lb3V0LiIpCisKIAogY2xhc3MgVGhyZWFkUG9vbEV4ZWN1dG9yVGVzdChUaHJlYWRQb29sTWl4aW4sIEV4ZWN1dG9yVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X21hcF9zdWJtaXRzX3dpdGhvdXRfaXRlcmF0aW9uKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CmluZGV4IGUzOGQwNDMuLjM5Y2M3NzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKQEAgLTEsNSArMSw2IEBACiAiIiJVbml0IHRlc3RzIGZvciBjb250ZXh0bGliLnB5LCBhbmQgb3RoZXIgY29udGV4dCBtYW5hZ2Vycy4iIiIKIAoraW1wb3J0IGlvCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdApAQCAtMTAwLDE1ICsxMDEsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19uYW1lX18sJ2JheicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6LmZvbywgJ2JhcicpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAotICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfZG9jX2F0dHJpYihzZWxmKToKICAgICAgICAgYmF6ID0gc2VsZi5fY3JlYXRlX2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5fX2RvY19fLCAiV2hlZSEiKQogCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3N0cmluZ19naXZlbl9jbV9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGJheiA9IHNlbGYuX2NyZWF0ZV9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKCkoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19kb2NfXywgIldoZWUhIikKKworCiBjbGFzcyBDbG9zaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgIyBYWFggVGhpcyBuZWVkcyBtb3JlIHdvcmsKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gY2xvc2luZy5fX2RvY19fCisgICAgICAgIG9iaiA9IGNsb3NpbmcoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQogCiAgICAgZGVmIHRlc3RfY2xvc2luZyhzZWxmKToKICAgICAgICAgc3RhdGUgPSBbXQpAQCAtMjA0LDYgKzIxNSw3IEBACiAKIAogY2xhc3MgbXljb250ZXh0KENvbnRleHREZWNvcmF0b3IpOgorICAgICIiIkV4YW1wbGUgZGVjb3JhdGlvbi1jb21wYXRpYmxlIGNvbnRleHQgbWFuYWdlciBmb3IgdGVzdGluZyIiIgogICAgIHN0YXJ0ZWQgPSBGYWxzZQogICAgIGV4YyA9IE5vbmUKICAgICBjYXRjaCA9IEZhbHNlCkBAIC0yMTksNiArMjMxLDEzIEBACiAKIGNsYXNzIFRlc3RDb250ZXh0RGVjb3JhdG9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBjbV9kb2NzdHJpbmcgPSBteWNvbnRleHQuX19kb2NfXworICAgICAgICBvYmogPSBteWNvbnRleHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKICAgICBkZWYgdGVzdF9jb250ZXh0ZGVjb3JhdG9yKHNlbGYpOgogICAgICAgICBjb250ZXh0ID0gbXljb250ZXh0KCkKICAgICAgICAgd2l0aCBjb250ZXh0IGFzIHJlc3VsdDoKQEAgLTM3Miw2ICszOTEsMTMgQEAKIAogY2xhc3MgVGVzdEV4aXRTdGFjayh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gRXhpdFN0YWNrLl9fZG9jX18KKyAgICAgICAgb2JqID0gRXhpdFN0YWNrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQorCiAgICAgZGVmIHRlc3Rfbm9fcmVzb3VyY2VzKHNlbGYpOgogICAgICAgICB3aXRoIEV4aXRTdGFjaygpOgogICAgICAgICAgICAgcGFzcwpAQCAtNjkyLDEwICs3MTgsMTExIEBACiAgICAgICAgIHN0YWNrLnB1c2goY20pCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RhY2suX2V4aXRfY2FsbGJhY2tzWy0xXSwgY20pCiAKK2NsYXNzIFRlc3RSZWRpcmVjdFN0ZG91dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSMgVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgdGVzdCBhY3R1YWxseSBydW4gdW5kZXIgcmVncnRlc3QucHkhCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IHJlZGlyZWN0X3N0ZG91dC5fX2RvY19fCisgICAgICAgIG9iaiA9IHJlZGlyZWN0X3N0ZG91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9ub19yZWRpcmVjdF9pbl9pbml0KHNlbGYpOgorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgcmVkaXJlY3Rfc3Rkb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF90b19zdHJpbmdfaW8oc2VsZik6CisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIG1zZyA9ICJDb25zaWRlciBhbiBBUEkgbGlrZSBoZWxwKCksIHdoaWNoIHByaW50cyBkaXJlY3RseSB0byBzdGRvdXQiCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgIHByaW50KG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3Rkb3V0LCBvcmlnX3N0ZG91dCkKKyAgICAgICAgcyA9IGYuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgbXNnKQorCisgICAgZGVmIHRlc3RfZW50ZXJfcmVzdWx0X2lzX3RhcmdldChzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZikgYXMgZW50ZXJfcmVzdWx0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhlbnRlcl9yZXN1bHQsIGYpCisKKyAgICBkZWYgdGVzdF9jbV9pc19yZXVzYWJsZShzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd3JpdGVfdG9fZiA9IHJlZGlyZWN0X3N0ZG91dChmKQorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIkhlbGxvIiwgZW5kPSIgIikKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIldvcmxkISIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiSGVsbG8gV29ybGQhXG4iKQorCisgICAgZGVmIHRlc3RfY21faXNfcmVlbnRyYW50KHNlbGYpOgorICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3cml0ZV90b19mID0gcmVkaXJlY3Rfc3Rkb3V0KGYpCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB3aXRoIHdyaXRlX3RvX2Y6CisgICAgICAgICAgICBwcmludCgiSGVsbG8iLCBlbmQ9IiAiKQorICAgICAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgICAgIHByaW50KCJXb3JsZCEiKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRvdXQsIG9yaWdfc3Rkb3V0KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIkhlbGxvIFdvcmxkIVxuIikKKworCitjbGFzcyBUZXN0U3VwcHJlc3ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IHN1cHByZXNzLl9fZG9jX18KKyAgICAgICAgb2JqID0gc3VwcHJlc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9ub19yZXN1bHRfZnJvbV9lbnRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhWYWx1ZUVycm9yKSBhcyBlbnRlcl9yZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlbnRlcl9yZXN1bHQpCisKKyAgICBkZWYgdGVzdF9ub19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLCA1KSwgMzIpCisKKyAgICBkZWYgdGVzdF9leGFjdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2hpZXJhcmNoeShzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhMb29rdXBFcnJvcik6CisgICAgICAgICAgICAnSGVsbG8nWzUwXQorCisgICAgZGVmIHRlc3Rfb3RoZXJfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAxLzAKKworICAgIGRlZiB0ZXN0X25vX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzdXBwcmVzcygpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZXhjZXB0aW9uX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoWmVyb0RpdmlzaW9uRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhaZXJvRGl2aXNpb25FcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfY21faXNfcmVlbnRyYW50KHNlbGYpOgorICAgICAgICBpZ25vcmVfZXhjZXB0aW9ucyA9IHN1cHByZXNzKEV4Y2VwdGlvbikKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIGxlbig1KQorICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOgorICAgICAgICAgICAgMS8wCisgICAgICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOiAjIENoZWNrIG5lc3RlZCB1c2FnZQorICAgICAgICAgICAgICAgIGxlbig1KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weQppbmRleCA1Njc2NjY4Li5jZTVkMjdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKQEAgLTYsOSArNiwxMSBAQAogIyByaXAgb2ZmIGFsbCBpbnRlcmVzdGluZyBzdHVmZiBmcm9tIHRlc3RfcHJvZmlsZQogaW1wb3J0IGNQcm9maWxlCiBmcm9tIHRlc3QudGVzdF9wcm9maWxlIGltcG9ydCBQcm9maWxlVGVzdCwgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQKK2Zyb20gdGVzdC5wcm9maWxlZSBpbXBvcnQgdGVzdGZ1bmMKIAogY2xhc3MgQ1Byb2ZpbGVUZXN0KFByb2ZpbGVUZXN0KToKICAgICBwcm9maWxlcmNsYXNzID0gY1Byb2ZpbGUuUHJvZmlsZQorICAgIHByb2ZpbGVybW9kdWxlID0gY1Byb2ZpbGUKICAgICBleHBlY3RlZF9tYXhfb3V0cHV0ID0gIntidWlsdC1pbiBtZXRob2QgbWF4fSIKIAogICAgIGRlZiBnZXRfZXhwZWN0ZWRfb3V0cHV0KHNlbGYpOgpAQCAtMjcsNiArMjksNyBAQAogICAgICAgICAgICAgICAgICAgICBvYmouZW5hYmxlKCkKICAgICAgICAgICAgICAgICAgICAgb2JqID0gX2xzcHJvZi5Qcm9maWxlcigxKQogICAgICAgICAgICAgICAgICAgICBvYmouZGlzYWJsZSgpCisgICAgICAgICAgICAgICAgICAgIG9iai5jbGVhcigpCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyciA9IG9yaWdfc3RkZXJyCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5IGIvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQppbmRleCBjZmI3MzQxLi42MjRkNzAyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKQEAgLTEsMTEgKzEsNyBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIAotZGVmIHNldFVwTW9kdWxlKCk6Ci0gICAgIyB0aGlzIGltcG9ydCB3aWxsIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0IGlmIF9jcnlwdCBkb2Vzbid0IGV4aXN0LAotICAgICMgc28gaXQgaGFzIHRvIGJlIGRvbmUgaW4gc2V0VXBNb2R1bGUgZm9yIHRlc3QgZGlzY292ZXJ5IHRvIHdvcmsKLSAgICBnbG9iYWwgY3J5cHQKLSAgICBjcnlwdCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3J5cHQnKQorY3J5cHQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2NyeXB0JykKIAogY2xhc3MgQ3J5cHRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3N2LnB5IGIvTGliL3Rlc3QvdGVzdF9jc3YucHkKaW5kZXggODNmOGNiMy4uN2UyNDg1ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jc3YucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jc3YucHkKQEAgLTEzNiwxMiArMTM2LDEyIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIDEwOwogICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgogICAgICAgICAgICAgICAgIGlmIGkgPiAyOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIEJhZExpc3QoKSwgJycpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwgQmFkTGlzdCgpLCAnJykKICAgICAgICAgY2xhc3MgQmFkSXRlbToKICAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwgW0JhZEl0ZW0oKV0sICcnKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwgW0JhZEl0ZW0oKV0sICcnKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVfYmlnZmllbGQoc2VsZik6CiAgICAgICAgICMgVGhpcyBleGVyY2lzZXMgdGhlIGJ1ZmZlciByZWFsbG9jIGZ1bmN0aW9uYWxpdHkKQEAgLTE4Niw5ICsxODYsOSBAQAogICAgIGRlZiB0ZXN0X3dyaXRlcm93cyhzZWxmKToKICAgICAgICAgY2xhc3MgQnJva2VuRmlsZToKICAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBidWYpOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoQnJva2VuRmlsZSgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB3cml0ZXIud3JpdGVyb3dzLCBbWydhJ11dKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB3cml0ZXIud3JpdGVyb3dzLCBbWydhJ11dKQogCiAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgidysiLCBuZXdsaW5lPScnKSBhcyBmaWxlb2JqOgogICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqKQpAQCAtMzA4LDYgKzMwOCwxNSBAQAogICAgICAgICAgICAgZm9yIGksIHJvdyBpbiBlbnVtZXJhdGUoY3N2LnJlYWRlcihmaWxlb2JqKSk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3csIHJvd3NbaV0pCiAKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfZXNjYXBlZF91bnF1b3RlZF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCJ3KyIsIG5ld2xpbmU9JycpIGFzIGZpbGVvYmo6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmoscXVvdGluZz1jc3YuUVVPVEVfTk9ORSxlc2NhcGVjaGFyPSJcXCIpCisgICAgICAgICAgICByb3dzID0gW1snYVxuYicsJ2InXSxbJ2MnLCd4XHJcbmQnXV0KKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvd3Mocm93cykKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgZm9yIGksIHJvdyBpbiBlbnVtZXJhdGUoY3N2LnJlYWRlcihmaWxlb2JqLHF1b3Rpbmc9Y3N2LlFVT1RFX05PTkUsZXNjYXBlY2hhcj0iXFwiKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3cscm93c1tpXSkKKwogY2xhc3MgVGVzdERpYWxlY3RSZWdpc3RyeSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVnaXN0cnlfYmFkYXJncyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YubGlzdF9kaWFsZWN0cywgTm9uZSkKQEAgLTgzNiwxMCArODQ1LDExIEBACiAgICAgICAgICAgICBkID0gbXlkaWFsZWN0KCkKIAogICAgICAgICBmb3IgZmllbGRfbmFtZSBpbiAoImRlbGltaXRlciIsICJlc2NhcGVjaGFyIiwgInF1b3RlY2hhciIpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBjcmVhdGVfaW52YWxpZCwgZmllbGRfbmFtZSwgIiIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCAiYWJjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3JlYXRlX2ludmFsaWQsIGZpZWxkX25hbWUsIGIneCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCA1KQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZmllbGRfbmFtZT1maWVsZF9uYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCAiIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCAiYWJjIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCBiJ3gnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3JlYXRlX2ludmFsaWQsIGZpZWxkX25hbWUsIDUpCiAKIAogY2xhc3MgVGVzdFNuaWZmZXIodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkgYi9MaWIvdGVzdC90ZXN0X2N1cnNlcy5weQppbmRleCA3MzEwYWZjLi5jZThmMjU0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2N1cnNlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2N1cnNlcy5weQpAQCAtMTE1LDggKzExNSw4IEBACiAgICAgc3Rkc2NyLm5vdGltZW91dCgxKQogICAgIHdpbjIub3ZlcmxheSh3aW4pCiAgICAgd2luMi5vdmVyd3JpdGUod2luKQotICAgIHdpbjIub3ZlcmxheSh3aW4sIDEsIDIsIDMsIDMsIDIsIDEpCi0gICAgd2luMi5vdmVyd3JpdGUod2luLCAxLCAyLCAzLCAzLCAyLCAxKQorICAgIHdpbjIub3ZlcmxheSh3aW4sIDEsIDIsIDIsIDEsIDMsIDMpCisgICAgd2luMi5vdmVyd3JpdGUod2luLCAxLCAyLCAyLCAxLCAzLCAzKQogICAgIHN0ZHNjci5yZWRyYXdsbigxLDIpCiAKICAgICBzdGRzY3Iuc2Nyb2xsb2soMSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm0ucHkKaW5kZXggZDExZDkyNC4uNjIzZDk5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kYm0ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm0ucHkKQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgcmV0dXJuIGtleXMKIAogICAgIGRlZiB0ZXN0X2Vycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZWxmLm1vZHVsZS5lcnJvciwgSU9FcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNlbGYubW9kdWxlLmVycm9yLCBPU0Vycm9yKSkKIAogICAgIGRlZiB0ZXN0X2FueWRibV9ub3RfZXhpc3Rpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRibS5lcnJvciwgZGJtLm9wZW4sIF9mbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkgYi9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5CmluZGV4IDRmMDNhZTcuLjc2MDFlNjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm1fZHVtYi5weQpAQCAtMTgzLDYgKzE4MywxOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggZHVtYmRibS5vcGVuKF9mbmFtZSwgJ2MnKSBhcyBkYjoKKyAgICAgICAgICAgIGRiWyJkdW1iZGJtIGNvbnRleHQgbWFuYWdlciJdID0gImNvbnRleHQgbWFuYWdlciIKKworICAgICAgICB3aXRoIGR1bWJkYm0ub3BlbihfZm5hbWUsICdyJykgYXMgZGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZGIua2V5cygpKSwgW2IiZHVtYmRibSBjb250ZXh0IG1hbmFnZXIiXSkKKworICAgICAgICAjIFRoaXMgY3VycmVudGx5IGp1c3QgcmFpc2VzIEF0dHJpYnV0ZUVycm9yIHJhdGhlciB0aGFuIGEgc3BlY2lmaWMKKyAgICAgICAgIyBleGNlcHRpb24gbGlrZSB0aGUgR05VIG9yIE5EQk0gYmFzZWQgaW1wbGVtZW50YXRpb25zLiBTZWUKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTkzODUgZm9yIGRldGFpbHMuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIGRiLmtleXMoKQorCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBfZGVsZXRlX2ZpbGVzKCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kYm1fZ251LnB5IGIvTGliL3Rlc3QvdGVzdF9kYm1fZ251LnB5CmluZGV4IDRmYjY2YzUuLmE3ODA4ZjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RibV9nbnUucHkKQEAgLTgxLDYgKzgxLDE3IEBACiAgICAgICAgIHNpemUyID0gb3MucGF0aC5nZXRzaXplKGZpbGVuYW1lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2l6ZTEgPiBzaXplMiA+PSBzaXplMCkKIAorICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgd2l0aCBnZGJtLm9wZW4oZmlsZW5hbWUsICdjJykgYXMgZGI6CisgICAgICAgICAgICBkYlsiZ2RibSBjb250ZXh0IG1hbmFnZXIiXSA9ICJjb250ZXh0IG1hbmFnZXIiCisKKyAgICAgICAgd2l0aCBnZGJtLm9wZW4oZmlsZW5hbWUsICdyJykgYXMgZGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZGIua2V5cygpKSwgW2IiZ2RibSBjb250ZXh0IG1hbmFnZXIiXSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGdkYm0uZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgZGIua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkdEQk0gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkIikKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtX25kYm0ucHkgYi9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5CmluZGV4IGI1N2UxZjAuLjIyOTE1NjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtX25kYm0ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm1fbmRibS5weQpAQCAtMzcsNSArMzcsMTggQEAKICAgICAgICAgICAgIGV4Y2VwdCBlcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB3aXRoIGRibS5uZGJtLm9wZW4oc2VsZi5maWxlbmFtZSwgJ2MnKSBhcyBkYjoKKyAgICAgICAgICAgIGRiWyJuZGJtIGNvbnRleHQgbWFuYWdlciJdID0gImNvbnRleHQgbWFuYWdlciIKKworICAgICAgICB3aXRoIGRibS5uZGJtLm9wZW4oc2VsZi5maWxlbmFtZSwgJ3InKSBhcyBkYjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkYi5rZXlzKCkpLCBbYiJuZGJtIGNvbnRleHQgbWFuYWdlciJdKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZGJtLm5kYm0uZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgZGIua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQiKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5IGIvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQppbmRleCBhODQ4N2QyLi43YmZmMWQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKQEAgLTU0Myw4ICs1NDMsOCBAQAogICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfc2l6ZW9mCiAgICAgICAgIGNoZWNrKGRlcXVlKCksIGJhc2VzaXplICsgYmxvY2tzaXplKQogICAgICAgICBjaGVjayhkZXF1ZSgnYScpLCBiYXNlc2l6ZSArIGJsb2Nrc2l6ZSkKLSAgICAgICAgY2hlY2soZGVxdWUoJ2EnICogKEJMT0NLTEVOIC8vIDIpKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCi0gICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIChCTE9DS0xFTiAvLyAyICsgMSkpLCBiYXNlc2l6ZSArIDIgKiBibG9ja3NpemUpCisgICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIChCTE9DS0xFTiAtIDEpKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCisgICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIEJMT0NLTEVOKSwgYmFzZXNpemUgKyAyICogYmxvY2tzaXplKQogICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoNDIgKiBCTE9DS0xFTikpLCBiYXNlc2l6ZSArIDQzICogYmxvY2tzaXplKQogCiBjbGFzcyBUZXN0VmFyaW91c0l0ZXJhdG9yQXJncyh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5IGIvTGliL3Rlc3QvdGVzdF9kZXNjci5weQppbmRleCAxYTg5MWE4Li4yYTllMzI5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKQEAgLTEsOCArMSwxMSBAQAogaW1wb3J0IGJ1aWx0aW5zCitpbXBvcnQgY29weXJlZwogaW1wb3J0IGdjCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbWF0aAoraW1wb3J0IHBpY2tsZQogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCi1pbXBvcnQgbWF0aAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2Vha3JlZgogCkBAIC0xNzk3LDYgKzE4MDAsNyBAQAogICAgICAgICAgICAgKCJfX3RydW5jX18iLCBpbnQsIHplcm8sIHNldCgpLCB7fSksCiAgICAgICAgICAgICAoIl9fY2VpbF9fIiwgbWF0aC5jZWlsLCB6ZXJvLCBzZXQoKSwge30pLAogICAgICAgICAgICAgKCJfX2Rpcl9fIiwgZGlyLCBlbXB0eV9zZXEsIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fcm91bmRfXyIsIHJvdW5kLCB6ZXJvLCBzZXQoKSwge30pLAogICAgICAgICAgICAgXQogCiAgICAgICAgIGNsYXNzIENoZWNrZXIob2JqZWN0KToKQEAgLTIyNTgsNyArMjI2Miw5IEBACiAgICAgICAgIG1pbnN0YW5jZSA9IE0oIm0iKQogICAgICAgICBtaW5zdGFuY2UuYiA9IDIKICAgICAgICAgbWluc3RhbmNlLmEgPSAxCi0gICAgICAgIG5hbWVzID0gW3ggZm9yIHggaW4gZGlyKG1pbnN0YW5jZSkgaWYgeCBub3QgaW4gWyJfX25hbWVfXyIsICJfX2RvY19fIl1dCisgICAgICAgIGRlZmF1bHRfYXR0cmlidXRlcyA9IFsnX19uYW1lX18nLCAnX19kb2NfXycsICdfX3BhY2thZ2VfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX3NwZWNfXyddCisgICAgICAgIG5hbWVzID0gW3ggZm9yIHggaW4gZGlyKG1pbnN0YW5jZSkgaWYgeCBub3QgaW4gZGVmYXVsdF9hdHRyaWJ1dGVzXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVzLCBbJ2EnLCAnYiddKQogCiAgICAgICAgIGNsYXNzIE0yKE0pOgpAQCAtMzE1MSwxNzYgKzMxNTcsNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmEsIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbl9kZWxldGVfZGljdChlKSwgY2FuX2RlbGV0ZV9kaWN0KFZhbHVlRXJyb3IoKSkpCiAKLSAgICBkZWYgdGVzdF9waWNrbGVzKHNlbGYpOgotICAgICAgICAjIFRlc3RpbmcgcGlja2xpbmcgYW5kIGNvcHlpbmcgbmV3LXN0eWxlIGNsYXNzZXMgYW5kIG9iamVjdHMuLi4KLSAgICAgICAgaW1wb3J0IHBpY2tsZQotCi0gICAgICAgIGRlZiBzb3J0ZWRpdGVtcyhkKToKLSAgICAgICAgICAgIEwgPSBsaXN0KGQuaXRlbXMoKSkKLSAgICAgICAgICAgIEwuc29ydCgpCi0gICAgICAgICAgICByZXR1cm4gTAotCi0gICAgICAgIGdsb2JhbCBDCi0gICAgICAgIGNsYXNzIEMob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICBzdXBlcihDLCBzZWxmKS5fX2luaXRfXygpCi0gICAgICAgICAgICAgICAgc2VsZi5hID0gYQotICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKLSAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIkMoJXIsICVyKSIgJSAoc2VsZi5hLCBzZWxmLmIpCi0KLSAgICAgICAgZ2xvYmFsIEMxCi0gICAgICAgIGNsYXNzIEMxKGxpc3QpOgotICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBhLCBiKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoQzEsIGNscykuX19uZXdfXyhjbHMpCi0gICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLmEsIHNlbGYuYikKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCi0gICAgICAgICAgICAgICAgc2VsZi5iID0gYgotICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAiQzEoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBsaXN0KHNlbGYpKQotCi0gICAgICAgIGdsb2JhbCBDMgotICAgICAgICBjbGFzcyBDMihpbnQpOgotICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBhLCBiLCB2YWw9MCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEMyLCBjbHMpLl9fbmV3X18oY2xzLCB2YWwpCi0gICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIsIHZhbD0wKToKLSAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCi0gICAgICAgICAgICAgICAgc2VsZi5iID0gYgotICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAiQzIoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBpbnQoc2VsZikpCi0KLSAgICAgICAgZ2xvYmFsIEMzCi0gICAgICAgIGNsYXNzIEMzKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKLSAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbwotICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mb28KLSAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgZm9vKToKLSAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbwotCi0gICAgICAgIGdsb2JhbCBDNGNsYXNzaWMsIEM0Ci0gICAgICAgIGNsYXNzIEM0Y2xhc3NpYzogIyBjbGFzc2ljCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGNsYXNzIEM0KEM0Y2xhc3NpYywgb2JqZWN0KTogIyBtaXhlZCBpbmhlcml0YW5jZQotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGZvciBiaW4gaW4gMCwgMToKLSAgICAgICAgICAgIGZvciBjbHMgaW4gQywgQzEsIEMyOgotICAgICAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHMoY2xzLCBiaW4pCi0gICAgICAgICAgICAgICAgY2xzMiA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY2xzMiwgY2xzKQotCi0gICAgICAgICAgICBhID0gQzEoMSwgMik7IGEuYXBwZW5kKDQyKTsgYS5hcHBlbmQoMjQpCi0gICAgICAgICAgICBiID0gQzIoImhlbGxvIiwgIndvcmxkIiwgNDIpCi0gICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKChhLCBiKSwgYmluKQotICAgICAgICAgICAgeCwgeSA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fY2xhc3NfXywgYS5fX2NsYXNzX18pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZGl0ZW1zKHguX19kaWN0X18pLCBzb3J0ZWRpdGVtcyhhLl9fZGljdF9fKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fX2NsYXNzX18sIGIuX19jbGFzc19fKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh5Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYi5fX2RpY3RfXykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeCksIHJlcHIoYSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeSksIHJlcHIoYikpCi0gICAgICAgICAgICAjIFRlc3QgZm9yIF9fZ2V0c3RhdGVfXyBhbmQgX19zZXRzdGF0ZV9fIG9uIG5ldyBzdHlsZSBjbGFzcwotICAgICAgICAgICAgdSA9IEMzKDQyKQotICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyh1LCBiaW4pCi0gICAgICAgICAgICB2ID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuX19jbGFzc19fLCB2Ll9fY2xhc3NfXykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mb28sIHYuZm9vKQotICAgICAgICAgICAgIyBUZXN0IGZvciBwaWNrbGFiaWxpdHkgb2YgaHlicmlkIGNsYXNzCi0gICAgICAgICAgICB1ID0gQzQoKQotICAgICAgICAgICAgdS5mb28gPSA0MgotICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyh1LCBiaW4pCi0gICAgICAgICAgICB2ID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuX19jbGFzc19fLCB2Ll9fY2xhc3NfXykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mb28sIHYuZm9vKQotCi0gICAgICAgICMgVGVzdGluZyBjb3B5LmRlZXBjb3B5KCkKLSAgICAgICAgaW1wb3J0IGNvcHkKLSAgICAgICAgZm9yIGNscyBpbiBDLCBDMSwgQzI6Ci0gICAgICAgICAgICBjbHMyID0gY29weS5kZWVwY29weShjbHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKGNsczIsIGNscykKLQotICAgICAgICBhID0gQzEoMSwgMik7IGEuYXBwZW5kKDQyKTsgYS5hcHBlbmQoMjQpCi0gICAgICAgIGIgPSBDMigiaGVsbG8iLCAid29ybGQiLCA0MikKLSAgICAgICAgeCwgeSA9IGNvcHkuZGVlcGNvcHkoKGEsIGIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCBhLl9fY2xhc3NfXykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh4Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYS5fX2RpY3RfXykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fX2NsYXNzX18sIGIuX19jbGFzc19fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZGl0ZW1zKHkuX19kaWN0X18pLCBzb3J0ZWRpdGVtcyhiLl9fZGljdF9fKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHgpLCByZXByKGEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeSksIHJlcHIoYikpCi0KLSAgICBkZWYgdGVzdF9waWNrbGVfc2xvdHMoc2VsZik6Ci0gICAgICAgICMgVGVzdGluZyBwaWNrbGluZyBvZiBjbGFzc2VzIHdpdGggX19zbG90c19fIC4uLgotICAgICAgICBpbXBvcnQgcGlja2xlCi0gICAgICAgICMgUGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyBidXQgd2l0aG91dCBfX2dldHN0YXRlX18gc2hvdWxkIGZhaWwKLSAgICAgICAgIyAoaWYgdXNpbmcgcHJvdG9jb2wgMCBvciAxKQotICAgICAgICBnbG9iYWwgQiwgQywgRCwgRQotICAgICAgICBjbGFzcyBCKG9iamVjdCk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGZvciBiYXNlIGluIFtvYmplY3QsIEJdOgotICAgICAgICAgICAgY2xhc3MgQyhiYXNlKToKLSAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnXQotICAgICAgICAgICAgY2xhc3MgRChDKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKEMoKSwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBmYWlsOiBwaWNrbGUgQyBpbnN0YW5jZSAtICVzIiAlIGJhc2UpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKEMoKSwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBmYWlsOiBwaWNrbGUgRCBpbnN0YW5jZSAtICVzIiAlIGJhc2UpCi0gICAgICAgICAgICAjIEdpdmUgQyBhIG5pY2UgZ2VuZXJpYyBfX2dldHN0YXRlX18gYW5kIF9fc2V0c3RhdGVfXwotICAgICAgICAgICAgY2xhc3MgQyhiYXNlKToKLSAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnXQotICAgICAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBzZWxmLl9fZGljdF9fLmNvcHkoKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkID0ge30KLSAgICAgICAgICAgICAgICAgICAgZm9yIGNscyBpbiBzZWxmLl9fY2xhc3NfXy5fX21yb19fOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNuIGluIGNscy5fX2RpY3RfXy5nZXQoJ19fc2xvdHNfXycsICgpKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbc25dID0gZ2V0YXR0cihzZWxmLCBzbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQKLSAgICAgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIGQpOgotICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBsaXN0KGQuaXRlbXMoKSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGssIHYpCi0gICAgICAgICAgICBjbGFzcyBEKEMpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICMgTm93IGl0IHNob3VsZCB3b3JrCi0gICAgICAgICAgICB4ID0gQygpCi0gICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SGFzQXR0cih5LCAnYScpCi0gICAgICAgICAgICB4LmEgPSA0MgotICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYSwgNDIpCi0gICAgICAgICAgICB4ID0gRCgpCi0gICAgICAgICAgICB4LmEgPSA0MgotICAgICAgICAgICAgeC5iID0gMTAwCi0gICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hICsgeS5iLCAxNDIpCi0gICAgICAgICAgICAjIEEgc3ViY2xhc3MgdGhhdCBhZGRzIGEgc2xvdCBzaG91bGQgYWxzbyB3b3JrCi0gICAgICAgICAgICBjbGFzcyBFKEMpOgotICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYiddCi0gICAgICAgICAgICB4ID0gRSgpCi0gICAgICAgICAgICB4LmEgPSA0MgotICAgICAgICAgICAgeC5iID0gImZvbyIKLSAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEsIHguYSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5iLCB4LmIpCi0KICAgICBkZWYgdGVzdF9iaW5hcnlfb3BlcmF0b3Jfb3ZlcnJpZGUoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBvdmVycmlkZXMgb2YgYmluYXJ5IG9wZXJhdGlvbnMuLi4KICAgICAgICAgY2xhc3MgSShpbnQpOgpAQCAtMzc0NSwxOCArMzU4MSw4IEBACiAgICAgICAgICMgYnVnKS4KICAgICAgICAgZGVsIGMKIAotICAgICAgICAjIElmIHRoYXQgZGlkbid0IGJsb3cgdXAsIGl0J3MgYWxzbyBpbnRlcmVzdGluZyB0byBzZWUgd2hldGhlciBjbGVhcmluZwotICAgICAgICAjIHRoZSBsYXN0IGNvbnRhaW5lciBzbG90IHdvcmtzOiB0aGF0IHdpbGwgYXR0ZW1wdCB0byBkZWxldGUgYyBhZ2FpbiwKLSAgICAgICAgIyB3aGljaCB3aWxsIGNhdXNlIGMgdG8gZ2V0IGFwcGVuZGVkIGJhY2sgdG8gdGhlIGNvbnRhaW5lciBhZ2FpbgotICAgICAgICAjICJkdXJpbmciIHRoZSBkZWwuICAoT24gbm9uLUNQeXRob24gaW1wbGVtZW50YXRpb25zLCBob3dldmVyLCBfX2RlbF9fCi0gICAgICAgICMgaXMgdHlwaWNhbGx5IG5vdCBjYWxsZWQgYWdhaW4uKQogICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihDLmNvbnRhaW5lciksIDEpCi0gICAgICAgIGRlbCBDLmNvbnRhaW5lclstMV0KLSAgICAgICAgaWYgc3VwcG9ydC5jaGVja19pbXBsX2RldGFpbCgpOgotICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEMuY29udGFpbmVyKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5jb250YWluZXJbLTFdLmF0dHIsIDQyKQogCiAgICAgICAgICMgTWFrZSBjIG1vcnRhbCBhZ2Fpbiwgc28gdGhhdCB0aGUgdGVzdCBmcmFtZXdvcmsgd2l0aCAtbCBkb2Vzbid0IHJlcG9ydAogICAgICAgICAjIGl0IGFzIGEgbGVhay4KQEAgLTQ1MzYsNiArNDM2MiwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHR5cGUuX19kaWN0X19bJ19fcXVhbG5hbWVfXyddLl9fc2V0X18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgJ09pbmsnKQogCisgICAgICAgIGdsb2JhbCBZCisgICAgICAgIGNsYXNzIFk6CisgICAgICAgICAgICBjbGFzcyBJbnNpZGU6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuX19xdWFsbmFtZV9fLCAnWScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5JbnNpZGUuX19xdWFsbmFtZV9fLCAnWS5JbnNpZGUnKQorCiAgICAgZGVmIHRlc3RfcXVhbG5hbWVfZGljdChzZWxmKToKICAgICAgICAgbnMgPSB7J19fcXVhbG5hbWVfXyc6ICdzb21lLm5hbWUnfQogICAgICAgICB0cCA9IHR5cGUoJ0ZvbycsICgpLCBucykKQEAgLTQ2OTEsMTEgKzQ1MjQsNDUzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5teWtleTIsICdmcm9tIEJhc2UyJykKIAogCitjbGFzcyBQaWNrbGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfY2hlY2tfcmVkdWNlKHNlbGYsIHByb3RvLCBvYmosIGFyZ3M9KCksIGt3YXJncz17fSwgc3RhdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBsaXN0aXRlbXM9Tm9uZSwgZGljdGl0ZW1zPU5vbmUpOgorICAgICAgICBpZiBwcm90byA+PSA0OgorICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZV92YWx1ZVs6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3B5cmVnLl9fbmV3b2JqX2V4X18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShvYmopLCBhcmdzLCBrd2FyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUpKQorICAgICAgICAgICAgaWYgbGlzdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpc3QocmVkdWNlX3ZhbHVlWzNdKSwgbGlzdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbM10pCisgICAgICAgICAgICBpZiBkaWN0aXRlbXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoZGljdChyZWR1Y2VfdmFsdWVbNF0pLCBkaWN0aXRlbXMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZHVjZV92YWx1ZVs0XSkKKyAgICAgICAgZWxpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZV92YWx1ZVs6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3B5cmVnLl9fbmV3b2JqX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShvYmopLCkgKyBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUpKQorICAgICAgICAgICAgaWYgbGlzdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpc3QocmVkdWNlX3ZhbHVlWzNdKSwgbGlzdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbM10pCisgICAgICAgICAgICBpZiBkaWN0aXRlbXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoZGljdChyZWR1Y2VfdmFsdWVbNF0pLCBkaWN0aXRlbXMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZHVjZV92YWx1ZVs0XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2VfdHlwZSA9IHR5cGUob2JqKS5fX2Jhc2VfXworICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gKGNvcHlyZWcuX3JlY29uc3RydWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUob2JqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lIGlmIGJhc2VfdHlwZSBpcyBvYmplY3QgZWxzZSBiYXNlX3R5cGUob2JqKSkpCisgICAgICAgICAgICBpZiBzdGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgKz0gKHN0YXRlLCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pLCByZWR1Y2VfdmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX3JlZHVjZV9fKCksIHJlZHVjZV92YWx1ZSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZShzZWxmKToKKyAgICAgICAgcHJvdG9jb2xzID0gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKQorICAgICAgICBhcmdzID0gKC0xMDEsICJzcGFtIikKKyAgICAgICAga3dhcmdzID0geydiYWNvbic6IC0yMDEsICdmaXNoJzogLTMwMX0KKyAgICAgICAgc3RhdGUgPSB7J2NoZWVzZSc6IC00MDF9CisKKyAgICAgICAgY2xhc3MgQzE6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKyAgICAgICAgb2JqID0gQzEoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGFyZ3MpCisKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHN0YXRlLml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKG9iaiwgbmFtZSwgdmFsdWUpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgYXJncywgc3RhdGU9c3RhdGUpCisKKyAgICAgICAgY2xhc3MgQzI6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJiYWQgYXJncyIKKyAgICAgICAgb2JqID0gQzIoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEMzOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoYXJncywga3dhcmdzKQorICAgICAgICBvYmogPSBDMygpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpZiBwcm90byA+PSA0OgorICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBhcmdzLCBrd2FyZ3MpCisgICAgICAgICAgICBlbGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisKKyAgICAgICAgY2xhc3MgQzQ6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChhcmdzLCAiYmFkIGRpY3QiKQorICAgICAgICBjbGFzcyBDNToKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCJiYWQgdHVwbGUiLCBrd2FyZ3MpCisgICAgICAgIGNsYXNzIEM2OgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoKQorICAgICAgICBjbGFzcyBDNzoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImJhZCBhcmdzIgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgZm9yIGNscyBpbiBDNCwgQzUsIEM2LCBDNzoKKyAgICAgICAgICAgICAgICBvYmogPSBjbHMoKQorICAgICAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgVmFsdWVFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisKKyAgICAgICAgY2xhc3MgQzg6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChhcmdzLCBrd2FyZ3MpCisgICAgICAgIG9iaiA9IEM4KCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIDIgPD0gcHJvdG8gPCA0OgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICBjbGFzcyBDOToKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGFyZ3MsIHt9KQorICAgICAgICBvYmogPSBDOSgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgYXJncykKKworICAgICAgICBjbGFzcyBDMTA6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICBvYmogPSBDMTAoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKworICAgICAgICBjbGFzcyBDMTE6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZQorICAgICAgICBvYmogPSBDMTEoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIHN0YXRlPXN0YXRlKQorCisgICAgICAgIGNsYXNzIEMxMjoKKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJub3QgZGljdCIKKyAgICAgICAgb2JqID0gQzEyKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBzdGF0ZT0ibm90IGRpY3QiKQorCisgICAgICAgIGNsYXNzIEMxMzoKKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICBvYmogPSBDMTMoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKyAgICAgICAgICAgIGlmIHByb3RvIDwgMjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfXygpCisKKyAgICAgICAgY2xhc3MgQzE0OgorICAgICAgICAgICAgX19zbG90c19fID0gdHVwbGUoc3RhdGUpCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHN0YXRlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgbmFtZSwgdmFsdWUpCisKKyAgICAgICAgb2JqID0gQzE0KCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIHN0YXRlPShOb25lLCBzdGF0ZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfXygpCisKKyAgICAgICAgY2xhc3MgQzE1KGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvYmogPSBDMTUoeyJxdWViZWMiOiAtNjAxfSkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBkaWN0aXRlbXM9ZGljdChvYmopKQorCisgICAgICAgIGNsYXNzIEMxNihsaXN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb2JqID0gQzE2KFsieXVrb24iXSkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBsaXN0aXRlbXM9bGlzdChvYmopKQorCisgICAgZGVmIHRlc3Rfc3BlY2lhbF9tZXRob2RfbG9va3VwKHNlbGYpOgorICAgICAgICBwcm90b2NvbHMgPSByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpCisgICAgICAgIGNsYXNzIFBpY2t5OgorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4ge30KKworICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICAgICAgICAgIGlmIGF0dHIgaW4gKCJfX2dldG5ld2FyZ3NfXyIsICJfX2dldG5ld2FyZ3NfZXhfXyIpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihhdHRyKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZvciBwcm90b2NvbCBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzdGF0ZSA9IHt9IGlmIHByb3RvY29sID49IDIgZWxzZSBOb25lCisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG9jb2wsIFBpY2t5KCksIHN0YXRlPXN0YXRlKQorCisgICAgZGVmIF9hc3NlcnRfaXNfY29weShzZWxmLCBvYmosIG9iamNvcHksIG1zZz1Ob25lKToKKyAgICAgICAgIiIiVXRpbGl0eSBtZXRob2QgdG8gdmVyaWZ5IGlmIHR3byBvYmplY3RzIGFyZSBjb3BpZXMgb2YgZWFjaCBvdGhlcnMuCisgICAgICAgICIiIgorICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgIG1zZyA9ICJ7IXJ9IGlzIG5vdCBhIGNvcHkgb2YgeyFyfSIuZm9ybWF0KG9iaiwgb2JqY29weSkKKyAgICAgICAgaWYgdHlwZShvYmopLl9fcmVwcl9fIGlzIG9iamVjdC5fX3JlcHJfXzoKKyAgICAgICAgICAgICMgV2UgaGF2ZSB0aGlzIGxpbWl0YXRpb24gZm9yIG5vdyBiZWNhdXNlIHdlIHVzZSB0aGUgb2JqZWN0J3MgcmVwcgorICAgICAgICAgICAgIyB0byBoZWxwIHVzIHZlcmlmeSB0aGF0IHRoZSB0d28gb2JqZWN0cyBhcmUgY29waWVzLiBUaGlzIGFsbG93cworICAgICAgICAgICAgIyB1cyB0byBkZWxlZ2F0ZSB0aGUgbm9uLWdlbmVyaWMgdmVyaWZpY2F0aW9uIGxvZ2ljIHRvIHRoZSBvYmplY3RzCisgICAgICAgICAgICAjIHRoZW1zZWx2ZXMuCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJvYmplY3QgcGFzc2VkIHRvIF9hc3NlcnRfaXNfY29weSBtdXN0ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3ZlcnJpZGUgdGhlIF9fcmVwcl9fIG1ldGhvZC4iKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG9iaiwgb2JqY29weSwgbXNnPW1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKG9iaiksIHR5cGUob2JqY29weSksIG1zZz1tc2cpCisgICAgICAgIGlmIGhhc2F0dHIob2JqLCAnX19kaWN0X18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKG9iai5fX2RpY3RfXywgb2JqY29weS5fX2RpY3RfXywgbXNnPW1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob2JqLl9fZGljdF9fLCBvYmpjb3B5Ll9fZGljdF9fLCBtc2c9bXNnKQorICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fc2xvdHNfXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwob2JqLl9fc2xvdHNfXywgb2JqY29weS5fX3Nsb3RzX18sIG1zZz1tc2cpCisgICAgICAgICAgICBmb3Igc2xvdCBpbiBvYmouX19zbG90c19fOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIob2JqLCBzbG90KSwgaGFzYXR0cihvYmpjb3B5LCBzbG90KSwgbXNnPW1zZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIob2JqLCBzbG90LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIob2JqY29weSwgc2xvdCwgTm9uZSksIG1zZz1tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihvYmopLCByZXByKG9iamNvcHkpLCBtc2c9bXNnKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2VuZXJhdGVfcGlja2xlX2NvcGllcnMoKToKKyAgICAgICAgIiIiVXRpbGl0eSBtZXRob2QgdG8gZ2VuZXJhdGUgdGhlIG1hbnkgcG9zc2libGUgcGlja2xlIGNvbmZpZ3VyYXRpb25zLgorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgUGlja2xlQ29waWVyOgorICAgICAgICAgICAgIlRoaXMgY2xhc3MgY29waWVzIG9iamVjdCB1c2luZyBwaWNrbGUuIgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3RvLCBkdW1wcywgbG9hZHMpOgorICAgICAgICAgICAgICAgIHNlbGYucHJvdG8gPSBwcm90bworICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMgPSBkdW1wcworICAgICAgICAgICAgICAgIHNlbGYubG9hZHMgPSBsb2FkcworICAgICAgICAgICAgZGVmIGNvcHkoc2VsZiwgb2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG9iaiwgc2VsZi5wcm90bykpCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBXZSB0cnkgdG8gYmUgYXMgZGVzY3JpcHRpdmUgYXMgcG9zc2libGUgaGVyZSBzaW5jZSB0aGlzIGlzCisgICAgICAgICAgICAgICAgIyB0aGUgc3RyaW5nIHdoaWNoIHdlIHdpbGwgYWxsb3cgdXMgdG8gdGVsbCB0aGUgcGlja2xlCisgICAgICAgICAgICAgICAgIyBjb25maWd1cmF0aW9uIHdlIGFyZSB1c2luZyBkdXJpbmcgZGVidWdnaW5nLgorICAgICAgICAgICAgICAgIHJldHVybiAoIlBpY2tsZUNvcGllcihwcm90bz17fSwgZHVtcHM9e30ue30sIGxvYWRzPXt9Lnt9KSIKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5wcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcy5fX21vZHVsZV9fLCBzZWxmLmR1bXBzLl9fcXVhbG5hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2Fkcy5fX21vZHVsZV9fLCBzZWxmLmxvYWRzLl9fcXVhbG5hbWVfXykpCisgICAgICAgIHJldHVybiAoUGlja2xlQ29waWVyKCphcmdzKSBmb3IgYXJncyBpbgorICAgICAgICAgICAgICAgICAgIGl0ZXJ0b29scy5wcm9kdWN0KHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BpY2tsZS5kdW1wcywgcGlja2xlLl9kdW1wc30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BpY2tsZS5sb2FkcywgcGlja2xlLl9sb2Fkc30pKQorCisgICAgZGVmIHRlc3RfcGlja2xlX3Nsb3RzKHNlbGYpOgorICAgICAgICAjIFRlc3RzIHBpY2tsaW5nIG9mIGNsYXNzZXMgd2l0aCBfX3Nsb3RzX18uCisKKyAgICAgICAgIyBQaWNrbGluZyBvZiBjbGFzc2VzIHdpdGggX19zbG90c19fIGJ1dCB3aXRob3V0IF9fZ2V0c3RhdGVfXyBzaG91bGQKKyAgICAgICAgIyBmYWlsIChpZiB1c2luZyBwcm90b2NvbCAwIG9yIDEpCisgICAgICAgIGdsb2JhbCBDCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwaWNrbGUuZHVtcHMoQygpLCAwKQorCisgICAgICAgIGdsb2JhbCBECisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhEKCksIDApCisKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICJBIGNsYXNzIHdpdGggX19nZXRzdGF0ZV9fIGFuZCBfX3NldHN0YXRlX18gaW1wbGVtZW50ZWQuIgorICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgc3RhdGUgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIHt9KS5jb3B5KCkKKyAgICAgICAgICAgICAgICBmb3IgY2xzIGluIHR5cGUoc2VsZikuX19tcm9fXzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNsb3QgaW4gY2xzLl9fZGljdF9fLmdldCgnX19zbG90c19fJywgKCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW3Nsb3RdID0gZ2V0YXR0cihzZWxmLCBzbG90KQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUKKyAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHN0YXRlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgaywgdikKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzKCk8JXI+IiAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBzZWxmLl9fZ2V0c3RhdGVfXygpKQorCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICAiQSBzdWJjbGFzcyBvZiBhIGNsYXNzIHdpdGggc2xvdHMuIgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGdsb2JhbCBFCisgICAgICAgIGNsYXNzIEUoQyk6CisgICAgICAgICAgICAiQSBzdWJjbGFzcyB3aXRoIGFuIGV4dHJhIHNsb3QuIgorICAgICAgICAgICAgX19zbG90c19fID0gWydiJ10KKworICAgICAgICAjIE5vdyBpdCBzaG91bGQgd29yaworICAgICAgICBmb3IgcGlja2xlX2NvcGllciBpbiBzZWxmLl9nZW5lcmF0ZV9waWNrbGVfY29waWVycygpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocGlja2xlX2NvcGllcj1waWNrbGVfY29waWVyKToKKyAgICAgICAgICAgICAgICB4ID0gQygpCisgICAgICAgICAgICAgICAgeSA9IHBpY2tsZV9jb3BpZXIuY29weSh4KQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KHgsIHkpCisKKyAgICAgICAgICAgICAgICB4LmEgPSA0MgorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgICAgICAgICAgICAgeCA9IEQoKQorICAgICAgICAgICAgICAgIHguYSA9IDQyCisgICAgICAgICAgICAgICAgeC5iID0gMTAwCisgICAgICAgICAgICAgICAgeSA9IHBpY2tsZV9jb3BpZXIuY29weSh4KQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KHgsIHkpCisKKyAgICAgICAgICAgICAgICB4ID0gRSgpCisgICAgICAgICAgICAgICAgeC5hID0gNDIKKyAgICAgICAgICAgICAgICB4LmIgPSAiZm9vIgorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgZGVmIHRlc3RfcmVkdWNlX2NvcHlpbmcoc2VsZik6CisgICAgICAgICMgVGVzdHMgcGlja2xpbmcgYW5kIGNvcHlpbmcgbmV3LXN0eWxlIGNsYXNzZXMgYW5kIG9iamVjdHMuCisgICAgICAgIGdsb2JhbCBDMQorICAgICAgICBjbGFzcyBDMToKKyAgICAgICAgICAgICJUaGUgc3RhdGUgb2YgdGhpcyBjbGFzcyBpcyBjb3B5YWJsZSB2aWEgaXRzIGluc3RhbmNlIGRpY3QuIgorICAgICAgICAgICAgQVJHUyA9ICgxLCAyKQorICAgICAgICAgICAgTkVFRF9ESUNUX0NPUFlJTkcgPSBUcnVlCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkMxKCVyLCAlcikiICUgKHNlbGYuYSwgc2VsZi5iKQorCisgICAgICAgIGdsb2JhbCBDMgorICAgICAgICBjbGFzcyBDMihsaXN0KToKKyAgICAgICAgICAgICJBIGxpc3Qgc3ViY2xhc3MgY29weWFibGUgdmlhIF9fZ2V0bmV3YXJnc19fLiIKKyAgICAgICAgICAgIEFSR1MgPSAoMSwgMikKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYik6CisgICAgICAgICAgICAgICAgc2VsZiA9IHN1cGVyKCkuX19uZXdfXyhjbHMpCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgICAgICAjIFRoaXMgaGVscHMgdGVzdGluZyB0aGF0IF9faW5pdF9fIGlzIG5vdCBjYWxsZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICMgdW5waWNrbGluZyBwcm9jZXNzLCB3aGljaCB3b3VsZCBjYXVzZSBleHRyYSBhcHBlbmRzLgorICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kKCJjaGVlc2UiKQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLkFSR1MKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkMyKCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgbGlzdChzZWxmKSkKKworICAgICAgICBnbG9iYWwgQzMKKyAgICAgICAgY2xhc3MgQzMobGlzdCk6CisgICAgICAgICAgICAiQSBsaXN0IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldHN0YXRlX18uIgorICAgICAgICAgICAgQVJHUyA9ICgxLCAyKQorICAgICAgICAgICAgTkVFRF9ESUNUX0NPUFlJTkcgPSBGYWxzZQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICAgICAgIyBUaGlzIGhlbHBzIHRlc3RpbmcgdGhhdCBfX2luaXRfXyBpcyBub3QgY2FsbGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAjIHVucGlja2xpbmcgcHJvY2Vzcywgd2hpY2ggd291bGQgY2F1c2UgZXh0cmEgYXBwZW5kcy4KKyAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCgiY2hlZXNlIikKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuQVJHUworICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgICAgICAgICAgYSwgYiA9IHN0YXRlCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkMzKCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgbGlzdChzZWxmKSkKKworICAgICAgICBnbG9iYWwgQzQKKyAgICAgICAgY2xhc3MgQzQoaW50KToKKyAgICAgICAgICAgICJBbiBpbnQgc3ViY2xhc3MgY29weWFibGUgdmlhIF9fZ2V0bmV3YXJnc19fLiIKKyAgICAgICAgICAgIEFSR1MgPSAoImhlbGxvIiwgIndvcmxkIiwgMSkKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuQVJHUworICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQzQoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBpbnQoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEM1CisgICAgICAgIGNsYXNzIEM1KGludCk6CisgICAgICAgICAgICAiQW4gaW50IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldG5ld2FyZ3NfZXhfXy4iCisgICAgICAgICAgICBBUkdTID0gKDEsIDIpCisgICAgICAgICAgICBLV0FSR1MgPSB7J3ZhbHVlJzogM30KKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYiwgKiwgdmFsdWU9MCk6CisgICAgICAgICAgICAgICAgc2VsZiA9IHN1cGVyKCkuX19uZXdfXyhjbHMsIHZhbHVlKQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIChjbHMuQVJHUywgY2xzLktXQVJHUykKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkM1KCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQorCisgICAgICAgIHRlc3RfY2xhc3NlcyA9IChDMSwgQzIsIEMzLCBDNCwgQzUpCisgICAgICAgICMgVGVzdGluZyBjb3B5aW5nIHRocm91Z2ggcGlja2xlCisgICAgICAgIHBpY2tsZV9jb3BpZXJzID0gc2VsZi5fZ2VuZXJhdGVfcGlja2xlX2NvcGllcnMoKQorICAgICAgICBmb3IgY2xzLCBwaWNrbGVfY29waWVyIGluIGl0ZXJ0b29scy5wcm9kdWN0KHRlc3RfY2xhc3NlcywgcGlja2xlX2NvcGllcnMpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY2xzPWNscywgcGlja2xlX2NvcGllcj1waWNrbGVfY29waWVyKToKKyAgICAgICAgICAgICAgICBrd2FyZ3MgPSBnZXRhdHRyKGNscywgJ0tXQVJHUycsIHt9KQorICAgICAgICAgICAgICAgIG9iaiA9IGNscygqY2xzLkFSR1MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIHByb3RvID0gcGlja2xlX2NvcGllci5wcm90bworICAgICAgICAgICAgICAgIGlmIDIgPD0gcHJvdG8gPCA0IGFuZCBoYXNhdHRyKGNscywgJ19fZ2V0bmV3YXJnc19leF9fJyk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVfY29waWVyLmR1bXBzKG9iaiwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgb2JqY29weSA9IHBpY2tsZV9jb3BpZXIuY29weShvYmopCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkob2JqLCBvYmpjb3B5KQorICAgICAgICAgICAgICAgICMgRm9yIHRlc3QgY2xhc3NlcyB0aGF0IHN1cHBvcnRzIHRoaXMsIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgZ28KKyAgICAgICAgICAgICAgICAjIGFyb3VuZCB0aGUgcmVkdWNlIHByb3RvY29sIGJ5IHNpbXBseSBjb3B5aW5nIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAjIGRpY3Rpb25hcnkuIFdlIGNsZWFyIGF0dHJpYnV0ZXMgdXNpbmcgdGhlIHByZXZpb3VzIGNvcHkgdG8KKyAgICAgICAgICAgICAgICAjIG5vdCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIGlmIHByb3RvID49IDIgYW5kIG5vdCBjbHMuTkVFRF9ESUNUX0NPUFlJTkc6CisgICAgICAgICAgICAgICAgICAgIG9iamNvcHkuX19kaWN0X18uY2xlYXIoKQorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5MiA9IHBpY2tsZV9jb3BpZXIuY29weShvYmpjb3B5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weShvYmosIG9iamNvcHkyKQorCisgICAgICAgICMgVGVzdGluZyBjb3B5aW5nIHRocm91Z2ggY29weS5kZWVwY29weSgpCisgICAgICAgIGZvciBjbHMgaW4gdGVzdF9jbGFzc2VzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY2xzPWNscyk6CisgICAgICAgICAgICAgICAga3dhcmdzID0gZ2V0YXR0cihjbHMsICdLV0FSR1MnLCB7fSkKKyAgICAgICAgICAgICAgICBvYmogPSBjbHMoKmNscy5BUkdTLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICAjIFhYWDogV2UgbmVlZCB0byBtb2RpZnkgdGhlIGNvcHkgbW9kdWxlIHRvIHN1cHBvcnQgUEVQIDMxNTQncworICAgICAgICAgICAgICAgICMgcmVkdWNlIHByb3RvY29sIDQuCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihjbHMsICdfX2dldG5ld2FyZ3NfZXhfXycpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG9iamNvcHkgPSBkZWVwY29weShvYmopCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkob2JqLCBvYmpjb3B5KQorICAgICAgICAgICAgICAgICMgRm9yIHRlc3QgY2xhc3NlcyB0aGF0IHN1cHBvcnRzIHRoaXMsIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgZ28KKyAgICAgICAgICAgICAgICAjIGFyb3VuZCB0aGUgcmVkdWNlIHByb3RvY29sIGJ5IHNpbXBseSBjb3B5aW5nIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAjIGRpY3Rpb25hcnkuIFdlIGNsZWFyIGF0dHJpYnV0ZXMgdXNpbmcgdGhlIHByZXZpb3VzIGNvcHkgdG8KKyAgICAgICAgICAgICAgICAjIG5vdCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50LgorICAgICAgICAgICAgICAgIGlmIG5vdCBjbHMuTkVFRF9ESUNUX0NPUFlJTkc6CisgICAgICAgICAgICAgICAgICAgIG9iamNvcHkuX19kaWN0X18uY2xlYXIoKQorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5MiA9IGRlZXBjb3B5KG9iamNvcHkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weTIpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgICMgUnVuIGFsbCBsb2NhbCB0ZXN0IGNhc2VzLCB3aXRoIFBUeXBlc0xvbmdJbml0VGVzdCBmaXJzdC4KICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQVHlwZXNMb25nSW5pdFRlc3QsIE9wZXJhdG9yc1Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NQcm9wZXJ0aWVzQW5kTWV0aG9kcywgRGljdFByb3h5VGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTWlzY1Rlc3RzKQorICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2NUZXN0cywgUGlja2xpbmdUZXN0cykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXZwb2xsLnB5IGIvTGliL3Rlc3QvdGVzdF9kZXZwb2xsLnB5CmluZGV4IDkxMjlhYzAuLmU2MzRkM2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RldnBvbGwucHkKQEAgLTIsMTMgKzIsMTcgQEAKIAogIyBJbml0aWFsIHRlc3RzIGFyZSBjb3BpZWQgYXMgaXMgZnJvbSAidGVzdF9wb2xsLnB5IgogCi1pbXBvcnQgb3MsIHNlbGVjdCwgcmFuZG9tLCB1bml0dGVzdCwgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBjcHl0aG9uX29ubHkKIAogdHJ5OgogICAgIHNlbGVjdC5kZXZwb2xsCiBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNlbGVjdC5kZXZwb2xsIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3RfZGV2cG9sbCIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNlbGVjdC5kZXZwb2xsIG5vdCBkZWZpbmVkIikKIAogCiBkZWYgZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgZmxhZyk6CkBAIC04Nyw2ICs5MSwzNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwb2xsc3Rlci5wb2xsLCAxIDw8IDYzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwb2xsc3Rlci5wb2xsLCAxIDw8IDY0KQogCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIG9wZW5fZmlsZSA9IG9wZW4oX19maWxlX18sICJyYiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcGVuX2ZpbGUuY2xvc2UpCisgICAgICAgIGZkID0gb3Blbl9maWxlLmZpbGVubygpCisgICAgICAgIGRldnBvbGwgPSBzZWxlY3QuZGV2cG9sbCgpCisKKyAgICAgICAgIyB0ZXN0IGZpbGVubygpIG1ldGhvZCBhbmQgY2xvc2VkIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGV2cG9sbC5maWxlbm8oKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGRldnBvbGwuY2xvc2VkKQorCisgICAgICAgICMgdGVzdCBjbG9zZSgpCisgICAgICAgIGRldnBvbGwuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGV2cG9sbC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwuZmlsZW5vKQorCisgICAgICAgICMgY2xvc2UoKSBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCisgICAgICAgIGRldnBvbGwuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9ucyBtdXN0IGZhaWwgd2l0aCBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCAuLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLm1vZGlmeSwgZmQsIHNlbGVjdC5QT0xMSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwucG9sbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC5yZWdpc3RlciwgZmQsIGZkLCBzZWxlY3QuUE9MTElOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLnVucmVnaXN0ZXIsIGZkKQorCisgICAgZGVmIHRlc3RfZmRfbm9uX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBkZXZwb2xsID0gc2VsZWN0LmRldnBvbGwoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZGV2cG9sbC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZGV2cG9sbC5maWxlbm8oKSksIEZhbHNlKQorCiAgICAgZGVmIHRlc3RfZXZlbnRzX21hc2tfb3ZlcmZsb3coc2VsZik6CiAgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LmRldnBvbGwoKQogICAgICAgICB3LCByID0gb3MucGlwZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Rpcy5weSBiL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CmluZGV4IGI4NmNjODYuLmQxMjI5ZmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CkBAIC0xLDEyICsxLDMwIEBACiAjIE1pbmltYWwgdGVzdHMgZm9yIGRpcyBtb2R1bGUKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2FwdHVyZWRfc3Rkb3V0Citmcm9tIHRlc3QuYnl0ZWNvZGVfaGVscGVyIGltcG9ydCBCeXRlY29kZVRlc3RDYXNlCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgZGlzCiBpbXBvcnQgaW8KIGltcG9ydCByZQoraW1wb3J0IHR5cGVzCitpbXBvcnQgY29udGV4dGxpYgorCitkZWYgZ2V0X3RiKCk6CisgICAgZGVmIF9lcnJvcigpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxIC8gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICB0YiA9IGUuX190cmFjZWJhY2tfXworICAgICAgICByZXR1cm4gdGIKKworICAgIHRiID0gX2Vycm9yKCkKKyAgICB3aGlsZSB0Yi50Yl9uZXh0OgorICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICByZXR1cm4gdGIKKworVFJBQ0VCQUNLX0NPREUgPSBnZXRfdGIoKS50Yl9mcmFtZS5mX2NvZGUKIAogY2xhc3MgX0M6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMjMsMTIgKzQxLDEyIEBACiAiIiIgJSAoX0MuX19pbml0X18uX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLCkKIAogZGlzX2NfaW5zdGFuY2VfbWV0aG9kX2J5dGVzID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9GQVNUICAgICAgICAgICAxICgxKQotICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQotICAgICAgICAgIDYgQ09NUEFSRV9PUCAgICAgICAgICAyICg9PSkKLSAgICAgICAgICA5IExPQURfRkFTVCAgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDE1IExPQURfQ09OU1QgICAgICAgICAgMCAoMCkKKyAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgNiBDT01QQVJFX09QICAgICAgICAgICAgICAgMiAoPT0pCisgICAgICAgICAgOSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgICAgICAwICgwKQorICAgICAgICAgMTUgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKDApCiAgICAgICAgICAxOCBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC00OSwxMSArNjcsMTEgQEAKIAogCiBkaXNfZl9jb19jb2RlID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAwICgwKQotICAgICAgICAgIDMgTE9BRF9GQVNUICAgICAgICAgICAwICgwKQotICAgICAgICAgIDYgQ0FMTF9GVU5DVElPTiAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQorICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKDApCisgICAgICAgICAgMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgICA2IENBTExfRlVOQ1RJT04gICAgICAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQogICAgICAgICAgIDkgUE9QX1RPUAotICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQorICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCiAgICAgICAgICAxMyBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC04OSw3ICsxMDcsNyBAQAogICAgIHBhc3MKIAogZGlzX2J1ZzEzMzM5ODIgPSAiIiJcCi0gJS00ZCAgICAgICAgIDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDApCislM2QgICAgICAgICAgIDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDApCiAgICAgICAgICAgICAgIDMgUE9QX0pVTVBfSUZfVFJVRSAgICAgICAgMzUKICAgICAgICAgICAgICAgNiBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoQXNzZXJ0aW9uRXJyb3IpCiAgICAgICAgICAgICAgIDkgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDxjb2RlIG9iamVjdCA8bGlzdGNvbXA+IGF0IDB4Li4uLCBmaWxlICIlcyIsIGxpbmUgJWQ+KQpAQCAtOTksMTIgKzExNywxMiBAQAogICAgICAgICAgICAgIDIxIEdFVF9JVEVSCiAgICAgICAgICAgICAgMjIgQ0FMTF9GVU5DVElPTiAgICAgICAgICAgIDEgKDEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXIpCiAKLSAlLTRkICAgICAgICAyNSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgNCAoMSkKKyUzZCAgICAgICAgICAyNSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgNCAoMSkKICAgICAgICAgICAgICAyOCBCSU5BUllfQURECiAgICAgICAgICAgICAgMjkgQ0FMTF9GVU5DVElPTiAgICAgICAgICAgIDEgKDEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXIpCiAgICAgICAgICAgICAgMzIgUkFJU0VfVkFSQVJHUyAgICAgICAgICAgIDEKIAotICUtNGQgICA+PiAgIDM1IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorJTNkICAgICA+PiAgIDM1IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQogICAgICAgICAgICAgIDM4IFJFVFVSTl9WQUxVRQogIiIiICUgKGJ1ZzEzMzM5ODIuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLAogICAgICAgIF9fZmlsZV9fLApAQCAtMTcxLDM4ICsxODksNjkgQEAKICAgICAgICAgICAgICAyNSBSRVRVUk5fVkFMVUUKICIiIgogCitkaXNfdHJhY2ViYWNrID0gIiIiXAorICUtNGQgICAgICAgICAwIFNFVFVQX0VYQ0VQVCAgICAgICAgICAgIDEyICh0byAxNSkKKworICUtNGQgICAgICAgICAzIExPQURfQ09OU1QgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgICAgICA2IExPQURfQ09OU1QgICAgICAgICAgICAgICAyICgwKQorICAgIC0tPiAgICAgICA5IEJJTkFSWV9UUlVFX0RJVklERQorICAgICAgICAgICAgIDEwIFBPUF9UT1AKKyAgICAgICAgICAgICAxMSBQT1BfQkxPQ0sKKyAgICAgICAgICAgICAxMiBKVU1QX0ZPUldBUkQgICAgICAgICAgICA0NiAodG8gNjEpCisKKyAlLTRkICAgPj4gICAxNSBEVVBfVE9QCisgICAgICAgICAgICAgMTYgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKEV4Y2VwdGlvbikKKyAgICAgICAgICAgICAxOSBDT01QQVJFX09QICAgICAgICAgICAgICAxMCAoZXhjZXB0aW9uIG1hdGNoKQorICAgICAgICAgICAgIDIyIFBPUF9KVU1QX0lGX0ZBTFNFICAgICAgIDYwCisgICAgICAgICAgICAgMjUgUE9QX1RPUAorICAgICAgICAgICAgIDI2IFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAwIChlKQorICAgICAgICAgICAgIDI5IFBPUF9UT1AKKyAgICAgICAgICAgICAzMCBTRVRVUF9GSU5BTExZICAgICAgICAgICAxNCAodG8gNDcpCisKKyAlLTRkICAgICAgICAzMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoZSkKKyAgICAgICAgICAgICAzNiBMT0FEX0FUVFIgICAgICAgICAgICAgICAgMSAoX190cmFjZWJhY2tfXykKKyAgICAgICAgICAgICAzOSBTVE9SRV9GQVNUICAgICAgICAgICAgICAgMSAodGIpCisgICAgICAgICAgICAgNDIgUE9QX0JMT0NLCisgICAgICAgICAgICAgNDMgUE9QX0VYQ0VQVAorICAgICAgICAgICAgIDQ0IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorICAgICAgICA+PiAgIDQ3IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorICAgICAgICAgICAgIDUwIFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAwIChlKQorICAgICAgICAgICAgIDUzIERFTEVURV9GQVNUICAgICAgICAgICAgICAwIChlKQorICAgICAgICAgICAgIDU2IEVORF9GSU5BTExZCisgICAgICAgICAgICAgNTcgSlVNUF9GT1JXQVJEICAgICAgICAgICAgIDEgKHRvIDYxKQorICAgICAgICA+PiAgIDYwIEVORF9GSU5BTExZCisKKyAlLTRkICAgPj4gICA2MSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMSAodGIpCisgICAgICAgICAgICAgNjQgUkVUVVJOX1ZBTFVFCisiIiIgJSAoVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyAxLAorICAgICAgIFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgMiwKKyAgICAgICBUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDMsCisgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyA0LAorICAgICAgIFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgNSkKKwogY2xhc3MgRGlzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9kaXNhc3NlbWJseShzZWxmLCBmdW5jLCBsYXN0aT0tMSwgd3JhcHBlcj1UcnVlKToKLSAgICAgICAgcyA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0Ci0gICAgICAgIHN5cy5zdGRvdXQgPSBzCi0gICAgICAgIHRyeToKKyAgICAgICAgIyBXZSB3YW50IHRvIHRlc3QgdGhlIGRlZmF1bHQgcHJpbnRpbmcgYmVoYXZpb3VyLCBub3QgdGhlIGZpbGUgYXJnCisgICAgICAgIG91dHB1dCA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd2l0aCBjb250ZXh0bGliLnJlZGlyZWN0X3N0ZG91dChvdXRwdXQpOgogICAgICAgICAgICAgaWYgd3JhcHBlcjoKICAgICAgICAgICAgICAgICBkaXMuZGlzKGZ1bmMpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGRpcy5kaXNhc3NlbWJsZShmdW5jLCBsYXN0aSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAotICAgICAgICAjIFRyaW0gdHJhaWxpbmcgYmxhbmtzIChpZiBhbnkpLgotICAgICAgICByZXR1cm4gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gcy5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKV0KKyAgICAgICAgcmV0dXJuIG91dHB1dC5nZXR2YWx1ZSgpCiAKICAgICBkZWYgZ2V0X2Rpc2Fzc2VtYmxlX2FzX3N0cmluZyhzZWxmLCBmdW5jLCBsYXN0aT0tMSk6Ci0gICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZXRfZGlzYXNzZW1ibHkoZnVuYywgbGFzdGksIEZhbHNlKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KGZ1bmMsIGxhc3RpLCBGYWxzZSkKKworICAgIGRlZiBzdHJpcF9hZGRyZXNzZXMoc2VsZiwgdGV4dCk6CisgICAgICAgIHJldHVybiByZS5zdWIocidcYjB4WzAtOUEtRmEtZl0rXGInLCAnMHguLi4nLCB0ZXh0KQogCiAgICAgZGVmIGRvX2Rpc2Fzc2VtYmx5X3Rlc3Qoc2VsZiwgZnVuYywgZXhwZWN0ZWQpOgotICAgICAgICBsaW5lcyA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KGZ1bmMpCi0gICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQuc3BsaXRsaW5lcygpCi0gICAgICAgIGlmIGV4cGVjdGVkID09IGxpbmVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcyA9IFtyZS5zdWIoJzB4WzAtOUEtRmEtZl0rJywgJzB4Li4uJywgbCkgZm9yIGwgaW4gbGluZXNdCi0gICAgICAgICAgICBpZiBleHBlY3RlZCA9PSBsaW5lczoKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5mYWlsKAotICAgICAgICAgICAgICAgICJldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RhdGlvbjpcbiIgKwotICAgICAgICAgICAgICAgICJcbiIuam9pbihkaWZmbGliLm5kaWZmKGV4cGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKSkpCisgICAgICAgIGdvdCA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KGZ1bmMpCisgICAgICAgIGlmIGdvdCAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgIGdvdCA9IHNlbGYuc3RyaXBfYWRkcmVzc2VzKGdvdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfb3BtYXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzLm9wbWFwWyJOT1AiXSwgOSkKQEAgLTI5MCwzNSArMzM5LDM1IEBACiAgICAgZGVmIHRlc3RfZGlzX29iamVjdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXMuZGlzLCBvYmplY3QoKSkKIAorY2xhc3MgRGlzV2l0aEZpbGVUZXN0cyhEaXNUZXN0cyk6CisKKyAgICAjIFJ1biB0aGUgdGVzdHMgYWdhaW4sIHVzaW5nIHRoZSBmaWxlIGFyZyBpbnN0ZWFkIG9mIHByaW50CisgICAgZGVmIGdldF9kaXNhc3NlbWJseShzZWxmLCBmdW5jLCBsYXN0aT0tMSwgd3JhcHBlcj1UcnVlKToKKyAgICAgICAgb3V0cHV0ID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBpZiB3cmFwcGVyOgorICAgICAgICAgICAgZGlzLmRpcyhmdW5jLCBmaWxlPW91dHB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcy5kaXNhc3NlbWJsZShmdW5jLCBsYXN0aSwgZmlsZT1vdXRwdXQpCisgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0dmFsdWUoKQorCisKKwogY29kZV9pbmZvX2NvZGVfaW5mbyA9ICIiIlwKIE5hbWU6ICAgICAgICAgICAgICBjb2RlX2luZm8KIEZpbGVuYW1lOiAgICAgICAgICAoLiopCiBBcmd1bWVudCBjb3VudDogICAgMQogS3ctb25seSBhcmd1bWVudHM6IDAKIE51bWJlciBvZiBsb2NhbHM6ICAxCi1TdGFjayBzaXplOiAgICAgICAgNAorU3RhY2sgc2l6ZTogICAgICAgIDMKIEZsYWdzOiAgICAgICAgICAgICBPUFRJTUlaRUQsIE5FV0xPQ0FMUywgTk9GUkVFCiBDb25zdGFudHM6CiAgICAwOiAlcgotICAgMTogJ19fZnVuY19fJwotICAgMjogJ19fY29kZV9fJwotICAgMzogJzxjb2RlX2luZm8+JwotICAgNDogJ2NvX2NvZGUnCi0gICA1OiAiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJSVzIG9iamVjdHMiCi0lc05hbWVzOgotICAgMDogaGFzYXR0cgotICAgMTogX19mdW5jX18KLSAgIDI6IF9fY29kZV9fCi0gICAzOiBpc2luc3RhbmNlCi0gICA0OiBzdHIKLSAgIDU6IF90cnlfY29tcGlsZQotICAgNjogX2Zvcm1hdF9jb2RlX2luZm8KLSAgIDc6IFR5cGVFcnJvcgotICAgODogdHlwZQotICAgOTogX19uYW1lX18KK05hbWVzOgorICAgMDogX2Zvcm1hdF9jb2RlX2luZm8KKyAgIDE6IF9nZXRfY29kZV9vYmplY3QKIFZhcmlhYmxlIG5hbWVzOgotICAgMDogeCIiIiAlICgoJ0Zvcm1hdHRlZCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4nLCAnICAgNjogTm9uZVxuJykKLSAgICAgICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplIDwgMiBlbHNlIChOb25lLCAnJykpCisgICAwOiB4IiIiICUgKCgnRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLicsKQorICAgICAgICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPCAyIGVsc2UgKE5vbmUsKSkKIAogQHN0YXRpY21ldGhvZAogZGVmIHRyaWNreSh4LCB5LCB6PVRydWUsICphcmdzLCBjLCBkLCBlPVtdLCAqKmt3ZHMpOgpAQCAtMzgyLDcgKzQzMSw3IEBACiAKIGNvZGVfaW5mb19leHByX3N0ciA9ICIiIlwKIE5hbWU6ICAgICAgICAgICAgICA8bW9kdWxlPgotRmlsZW5hbWU6ICAgICAgICAgIDxjb2RlX2luZm8+CitGaWxlbmFtZTogICAgICAgICAgPGRpc2Fzc2VtYmx5PgogQXJndW1lbnQgY291bnQ6ICAgIDAKIEt3LW9ubHkgYXJndW1lbnRzOiAwCiBOdW1iZXIgb2YgbG9jYWxzOiAgMApAQCAtMzk1LDcgKzQ0NCw3IEBACiAKIGNvZGVfaW5mb19zaW1wbGVfc3RtdF9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTQwOSw3ICs0NTgsNyBAQAogCiBjb2RlX2luZm9fY29tcG91bmRfc3RtdF9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTQ0Myw2ICs0OTIsOSBAQAogICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICAgICAgZGlzLnNob3dfY29kZSh4KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQrIlxuIikKKyAgICAgICAgICAgIG91dHB1dCA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIGRpcy5zaG93X2NvZGUoeCwgZmlsZT1vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dHB1dC5nZXR2YWx1ZSgpLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2NvZGVfaW5mb19vYmplY3Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGlzLmNvZGVfaW5mbywgb2JqZWN0KCkpCkBAIC00NTEsNSArNTAzLDMzMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5wcmV0dHlfZmxhZ3MoMCksICcweDAnKQogCiAKKyMgRm9kZGVyIGZvciBpbnN0cnVjdGlvbiBpbnRyb3NwZWN0aW9uIHRlc3RzCisjICAgRWRpdGluZyBhbnkgb2YgdGhlc2UgbWF5IHJlcXVpcmUgcmVjYWxjdWxhdGluZyB0aGUgZXhwZWN0ZWQgb3V0cHV0CitkZWYgb3V0ZXIoYT0xLCBiPTIpOgorICAgIGRlZiBmKGM9MywgZD00KToKKyAgICAgICAgZGVmIGlubmVyKGU9NSwgZj02KToKKyAgICAgICAgICAgIHByaW50KGEsIGIsIGMsIGQsIGUsIGYpCisgICAgICAgIHByaW50KGEsIGIsIGMsIGQpCisgICAgICAgIHJldHVybiBpbm5lcgorICAgIHByaW50KGEsIGIsICcnLCAxLCBbXSwge30sICJIZWxsbyB3b3JsZCEiKQorICAgIHJldHVybiBmCisKK2RlZiBqdW1weSgpOgorICAgICMgVGhpcyB3b24ndCBhY3R1YWxseSBydW4gKGJ1dCB0aGF0J3MgT0ssIHdlIG9ubHkgZGlzYXNzZW1ibGUgaXQpCisgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICBwcmludChpKQorICAgICAgICBpZiBpIDwgNDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGkgPiA2OgorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiSSBjYW4gaGF6IGVsc2UgY2xhdXNlPyIpCisgICAgd2hpbGUgaToKKyAgICAgICAgcHJpbnQoaSkKKyAgICAgICAgaSAtPSAxCisgICAgICAgIGlmIGkgPiA2OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgaSA8IDQ6CisgICAgICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIHByaW50KCJXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/IikKKyAgICB0cnk6CisgICAgICAgIDEgLyAwCisgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICBwcmludCgiSGVyZSB3ZSBnbywgaGVyZSB3ZSBnbywgaGVyZSB3ZSBnby4uLiIpCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBpIGFzIGRvZGd5OgorICAgICAgICAgICAgcHJpbnQoIk5ldmVyIHJlYWNoIHRoaXMiKQorICAgIGZpbmFsbHk6CisgICAgICAgIHByaW50KCJPSywgbm93IHdlJ3JlIGRvbmUiKQorCisjIEVuZCBmb2RkZXIgZm9yIG9waW5mbyBnZW5lcmF0aW9uIHRlc3RzCitleHBlY3RlZF9vdXRlcl9saW5lID0gMQorX2xpbmVfb2Zmc2V0ID0gb3V0ZXIuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gLSAxCitjb2RlX29iamVjdF9mID0gb3V0ZXIuX19jb2RlX18uY29fY29uc3RzWzNdCitleHBlY3RlZF9mX2xpbmUgPSBjb2RlX29iamVjdF9mLmNvX2ZpcnN0bGluZW5vIC0gX2xpbmVfb2Zmc2V0Citjb2RlX29iamVjdF9pbm5lciA9IGNvZGVfb2JqZWN0X2YuY29fY29uc3RzWzNdCitleHBlY3RlZF9pbm5lcl9saW5lID0gY29kZV9vYmplY3RfaW5uZXIuY29fZmlyc3RsaW5lbm8gLSBfbGluZV9vZmZzZXQKK2V4cGVjdGVkX2p1bXB5X2xpbmUgPSAxCisKKyMgVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgdXNlZnVsIHRvIHJlZ2VuZXJhdGUgdGhlIGV4cGVjdGVkIHJlc3VsdHMgYWZ0ZXIKKyMgZWl0aGVyIHRoZSBmb2RkZXIgaXMgbW9kaWZpZWQgb3IgdGhlIGJ5dGVjb2RlIGdlbmVyYXRpb24gY2hhbmdlcworIyBBZnRlciByZWdlbmVyYXRpb24sIHVwZGF0ZSB0aGUgcmVmZXJlbmNlcyB0byBjb2RlX29iamVjdF9mIGFuZAorIyBjb2RlX29iamVjdF9pbm5lciBiZWZvcmUgcmVydW5uaW5nIHRoZSB0ZXN0cworCisjX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19vdXRlciA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorI3ByaW50KCdleHBlY3RlZF9vcGluZm9fZiA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSgpLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19pbm5lciA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoanVtcHksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfanVtcHlfbGluZSkKKyNwcmludCgnZXhwZWN0ZWRfb3BpbmZvX2p1bXB5ID0gW1xuICAnLAorICAgICAgIycsXG4gICcuam9pbihtYXAoc3RyLCBfaW5zdHJ1Y3Rpb25zKSksICcsXG5dJywgc2VwPScnKQorCisKK0luc3RydWN0aW9uID0gZGlzLkluc3RydWN0aW9uCitleHBlY3RlZF9vcGluZm9fb3V0ZXIgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xLCBhcmd2YWw9MywgYXJncmVwcj0nMycsIG9mZnNldD0wLCBzdGFydHNfbGluZT0yLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTAsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCVUlMRF9UVVBMRScsIG9wY29kZT0xMDIsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9Y29kZV9vYmplY3RfZiwgYXJncmVwcj1yZXByKGNvZGVfb2JqZWN0X2YpLCBvZmZzZXQ9MTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nb3V0ZXIuPGxvY2Fscz4uZicsIGFyZ3JlcHI9IidvdXRlci48bG9jYWxzPi5mJyIsIG9mZnNldD0xOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J01BS0VfQ0xPU1VSRScsIG9wY29kZT0xMzQsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0yLCBhcmd2YWw9J2YnLCBhcmdyZXByPSdmJywgb2Zmc2V0PTI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MCwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTI3LCBzdGFydHNfbGluZT03LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0wLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTMwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTMzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9JycsIGFyZ3JlcHI9IicnIiwgb2Zmc2V0PTM2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz02LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD0zOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX0xJU1QnLCBvcGNvZGU9MTAzLCBhcmc9MCwgYXJndmFsPTAsIGFyZ3JlcHI9JycsIG9mZnNldD00Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX01BUCcsIG9wY29kZT0xMDUsIGFyZz0wLCBhcmd2YWw9MCwgYXJncmVwcj0nJywgb2Zmc2V0PTQ1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz03LCBhcmd2YWw9J0hlbGxvIHdvcmxkIScsIGFyZ3JlcHI9IidIZWxsbyB3b3JsZCEnIiwgb2Zmc2V0PTQ4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz03LCBhcmd2YWw9NywgYXJncmVwcj0nNyBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD01MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MiwgYXJndmFsPSdmJywgYXJncmVwcj0nZicsIG9mZnNldD01NSwgc3RhcnRzX2xpbmU9OCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1JFVFVSTl9WQUxVRScsIG9wY29kZT04MywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKK10KKworZXhwZWN0ZWRfb3BpbmZvX2YgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xLCBhcmd2YWw9NSwgYXJncmVwcj0nNScsIG9mZnNldD0wLCBzdGFydHNfbGluZT0zLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTIsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0zLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MCwgYXJndmFsPSdjJywgYXJncmVwcj0nYycsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0xLCBhcmd2YWw9J2QnLCBhcmdyZXByPSdkJywgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlVJTERfVFVQTEUnLCBvcGNvZGU9MTAyLCBhcmc9NCwgYXJndmFsPTQsIGFyZ3JlcHI9JycsIG9mZnNldD0xOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MywgYXJndmFsPWNvZGVfb2JqZWN0X2lubmVyLCBhcmdyZXByPXJlcHIoY29kZV9vYmplY3RfaW5uZXIpLCBvZmZzZXQ9MjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nb3V0ZXIuPGxvY2Fscz4uZi48bG9jYWxzPi5pbm5lcicsIGFyZ3JlcHI9IidvdXRlci48bG9jYWxzPi5mLjxsb2NhbHM+LmlubmVyJyIsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J01BS0VfQ0xPU1VSRScsIG9wY29kZT0xMzQsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTI3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0yLCBhcmd2YWw9J2lubmVyJywgYXJncmVwcj0naW5uZXInLCBvZmZzZXQ9MzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MzMsIHN0YXJ0c19saW5lPTUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTIsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9MzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTMsIGFyZ3ZhbD0nYicsIGFyZ3JlcHI9J2InLCBvZmZzZXQ9MzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTAsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9NDIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTEsIGFyZ3ZhbD0nZCcsIGFyZ3JlcHI9J2QnLCBvZmZzZXQ9NDUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTQsIGFyZ3ZhbD00LCBhcmdyZXByPSc0IHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTQ4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD01MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0yLCBhcmd2YWw9J2lubmVyJywgYXJncmVwcj0naW5uZXInLCBvZmZzZXQ9NTIsIHN0YXJ0c19saW5lPTYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19pbm5lciA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9NCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MCwgYXJndmFsPSdhJywgYXJncmVwcj0nYScsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTIsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MywgYXJndmFsPSdkJywgYXJncmVwcj0nZCcsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2UnLCBhcmdyZXByPSdlJywgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTEsIGFyZ3ZhbD0nZicsIGFyZ3JlcHI9J2YnLCBvZmZzZXQ9MTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTYsIGFyZ3ZhbD02LCBhcmdyZXByPSc2IHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19qdW1weSA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9MT09QJywgb3Bjb2RlPTEyMCwgYXJnPTc0LCBhcmd2YWw9NzcsIGFyZ3JlcHI9J3RvIDc3Jywgb2Zmc2V0PTAsIHN0YXJ0c19saW5lPTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3JhbmdlJywgYXJncmVwcj0ncmFuZ2UnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MSwgYXJndmFsPTEwLCBhcmdyZXByPScxMCcsIG9mZnNldD02LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD05LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nR0VUX0lURVInLCBvcGNvZGU9NjgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRk9SX0lURVInLCBvcGNvZGU9OTMsIGFyZz01MCwgYXJndmFsPTY2LCBhcmdyZXByPSd0byA2NicsIG9mZnNldD0xMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTE2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTE5LCBzdGFydHNfbGluZT00LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MjIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTI1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTI5LCBzdGFydHNfbGluZT01LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0zMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MCwgYXJndmFsPSc8JywgYXJncmVwcj0nPCcsIG9mZnNldD0zNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTQ3LCBhcmd2YWw9NDcsIGFyZ3JlcHI9JycsIG9mZnNldD0zOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTQxLCBzdGFydHNfbGluZT02LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTAsIGFyZ3ZhbD00NywgYXJncmVwcj0ndG8gNDcnLCBvZmZzZXQ9NDQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD00Nywgc3RhcnRzX2xpbmU9NywgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD01MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9NCwgYXJndmFsPSc+JywgYXJncmVwcj0nPicsIG9mZnNldD01Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD01Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JSRUFLX0xPT1AnLCBvcGNvZGU9ODAsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU5LCBzdGFydHNfbGluZT04LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz0xMywgYXJndmFsPTEzLCBhcmdyZXByPScnLCBvZmZzZXQ9NjAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD02Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NjYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD02Nywgc3RhcnRzX2xpbmU9MTAsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nSSBjYW4gaGF6IGVsc2UgY2xhdXNlPycsIGFyZ3JlcHI9IidJIGNhbiBoYXogZWxzZSBjbGF1c2U/JyIsIG9mZnNldD03MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9NzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTc2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfTE9PUCcsIG9wY29kZT0xMjAsIGFyZz03NCwgYXJndmFsPTE1NCwgYXJncmVwcj0ndG8gMTU0Jywgb2Zmc2V0PTc3LCBzdGFydHNfbGluZT0xMSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9ODAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTE0MywgYXJndmFsPTE0MywgYXJncmVwcj0nJywgb2Zmc2V0PTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTg2LCBzdGFydHNfbGluZT0xMiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTg5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD05Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9OTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD05Niwgc3RhcnRzX2xpbmU9MTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTUsIGFyZ3ZhbD0xLCBhcmdyZXByPScxJywgb2Zmc2V0PTk5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSU5QTEFDRV9TVUJUUkFDVCcsIG9wY29kZT01NiwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTAyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEwMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEwNiwgc3RhcnRzX2xpbmU9MTQsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTMsIGFyZ3ZhbD02LCBhcmdyZXByPSc2Jywgb2Zmc2V0PTEwOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9NCwgYXJndmFsPSc+JywgYXJncmVwcj0nPicsIG9mZnNldD0xMTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xMjQsIGFyZ3ZhbD0xMjQsIGFyZ3JlcHI9JycsIG9mZnNldD0xMTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTgwLCBhcmd2YWw9ODAsIGFyZ3JlcHI9JycsIG9mZnNldD0xMTgsIHN0YXJ0c19saW5lPTE1LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTAsIGFyZ3ZhbD0xMjQsIGFyZ3JlcHI9J3RvIDEyNCcsIG9mZnNldD0xMjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xMjQsIHN0YXJ0c19saW5lPTE2LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTIsIGFyZ3ZhbD00LCBhcmdyZXByPSc0Jywgb2Zmc2V0PTEyNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MCwgYXJndmFsPSc8JywgYXJncmVwcj0nPCcsIG9mZnNldD0xMzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz04MCwgYXJndmFsPTgwLCBhcmdyZXByPScnLCBvZmZzZXQ9MTMzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlJFQUtfTE9PUCcsIG9wY29kZT04MCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTM2LCBzdGFydHNfbGluZT0xNywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTEzNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTE0MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTQzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTQ0LCBzdGFydHNfbGluZT0xOSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NiwgYXJndmFsPSdXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/JywgYXJncmVwcj0iJ1dobyBsZXQgbG9sY2F0eiBpbnRvIHRoaXMgdGVzdCBzdWl0ZT8nIiwgb2Zmc2V0PTE0Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MTUwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9GSU5BTExZJywgb3Bjb2RlPTEyMiwgYXJnPTcyLCBhcmd2YWw9MjI5LCBhcmdyZXByPSd0byAyMjknLCBvZmZzZXQ9MTU0LCBzdGFydHNfbGluZT0yMCwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfRVhDRVBUJywgb3Bjb2RlPTEyMSwgYXJnPTEyLCBhcmd2YWw9MTcyLCBhcmdyZXByPSd0byAxNzInLCBvZmZzZXQ9MTU3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD0xNjAsIHN0YXJ0c19saW5lPTIxLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz03LCBhcmd2YWw9MCwgYXJncmVwcj0nMCcsIG9mZnNldD0xNjMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCSU5BUllfVFJVRV9ESVZJREUnLCBvcGNvZGU9MjcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE2Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTY3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNjgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MjgsIGFyZ3ZhbD0yMDAsIGFyZ3JlcHI9J3RvIDIwMCcsIG9mZnNldD0xNjksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdEVVBfVE9QJywgb3Bjb2RlPTQsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE3Miwgc3RhcnRzX2xpbmU9MjIsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTIsIGFyZ3ZhbD0nWmVyb0RpdmlzaW9uRXJyb3InLCBhcmdyZXByPSdaZXJvRGl2aXNpb25FcnJvcicsIG9mZnNldD0xNzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTEwLCBhcmd2YWw9J2V4Y2VwdGlvbiBtYXRjaCcsIGFyZ3JlcHI9J2V4Y2VwdGlvbiBtYXRjaCcsIG9mZnNldD0xNzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xOTksIGFyZ3ZhbD0xOTksIGFyZ3JlcHI9JycsIG9mZnNldD0xNzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE4Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xODQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTg1LCBzdGFydHNfbGluZT0yMywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9OCwgYXJndmFsPSdIZXJlIHdlIGdvLCBoZXJlIHdlIGdvLCBoZXJlIHdlIGdvLi4uJywgYXJncmVwcj0iJ0hlcmUgd2UgZ28sIGhlcmUgd2UgZ28sIGhlcmUgd2UgZ28uLi4nIiwgb2Zmc2V0PTE4OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MTkxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfRVhDRVBUJywgb3Bjb2RlPTg5LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MjYsIGFyZ3ZhbD0yMjUsIGFyZ3JlcHI9J3RvIDIyNScsIG9mZnNldD0xOTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTk5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0yMDAsIHN0YXJ0c19saW5lPTI1LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9XSVRIJywgb3Bjb2RlPTE0MywgYXJnPTE3LCBhcmd2YWw9MjIzLCBhcmdyZXByPSd0byAyMjMnLCBvZmZzZXQ9MjAzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0xLCBhcmd2YWw9J2RvZGd5JywgYXJncmVwcj0nZG9kZ3knLCBvZmZzZXQ9MjA2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIwOSwgc3RhcnRzX2xpbmU9MjYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTksIGFyZ3ZhbD0nTmV2ZXIgcmVhY2ggdGhpcycsIGFyZ3JlcHI9IidOZXZlciByZWFjaCB0aGlzJyIsIG9mZnNldD0yMTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIxNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjE4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTIyMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1dJVEhfQ0xFQU5VUCcsIG9wY29kZT04MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjIzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjI2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIyOSwgc3RhcnRzX2xpbmU9MjgsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MTAsIGFyZ3ZhbD0iT0ssIG5vdyB3ZSdyZSBkb25lIiwgYXJncmVwcj0nIk9LLCBub3cgd2VcJ3JlIGRvbmUiJywgb2Zmc2V0PTIzMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MjM1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMzgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjM5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0yNDAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI0Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorXQorCisjIE9uZSBsYXN0IHBpZWNlIG9mIGluc3BlY3QgZm9kZGVyIHRvIGNoZWNrIHRoZSBkZWZhdWx0IGxpbmUgbnVtYmVyIGhhbmRsaW5nCitkZWYgc2ltcGxlKCk6IHBhc3MKK2V4cGVjdGVkX29waW5mb19zaW1wbGUgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0wLCBzdGFydHNfbGluZT1zaW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8sIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKQorXQorCisKK2NsYXNzIEluc3RydWN0aW9uVGVzdHMoQnl0ZWNvZGVUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKHNpbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19zaW1wbGUpCisKKyAgICBkZWYgdGVzdF9maXJzdF9saW5lX3NldF90b19Ob25lKHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhzaW1wbGUsIGZpcnN0X2xpbmU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19zaW1wbGUpCisKKyAgICBkZWYgdGVzdF9vdXRlcihzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfb3V0ZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19vdXRlcikKKworICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKToKKyAgICAgICAgICAgIGYgPSBvdXRlcigpCisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfZl9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX2YpCisKKyAgICBkZWYgdGVzdF9kb3VibHlfbmVzdGVkKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpOgorICAgICAgICAgICAgaW5uZXIgPSBvdXRlcigpKCkKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoaW5uZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfaW5uZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19pbm5lcikKKworICAgIGRlZiB0ZXN0X2p1bXB5KHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhqdW1weSwgZmlyc3RfbGluZT1leHBlY3RlZF9qdW1weV9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX2p1bXB5KQorCisjIGdldF9pbnN0cnVjdGlvbnMgaGFzIGl0cyBvd24gdGVzdHMgYWJvdmUsIHNvIGNhbiByZWx5IG9uIGl0IHRvIHZhbGlkYXRlCisjIHRoZSBvYmplY3Qgb3JpZW50ZWQgQVBJCitjbGFzcyBCeXRlY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pbnN0YW50aWF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2l0aCBmdW5jdGlvbiwgbWV0aG9kLCBjb2RlIHN0cmluZyBhbmQgY29kZSBvYmplY3QKKyAgICAgICAgZm9yIG9iaiBpbiBbX2YsIF9DKDEpLl9faW5pdF9fLCAiYT0xIiwgX2YuX19jb2RlX19dOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob2JqPW9iaik6CisgICAgICAgICAgICAgICAgYiA9IGRpcy5CeXRlY29kZShvYmopCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGIuY29kZW9iaiwgdHlwZXMuQ29kZVR5cGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXMuQnl0ZWNvZGUsIG9iamVjdCgpKQorCisgICAgZGVmIHRlc3RfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIFtfZiwgX0MoMSkuX19pbml0X18sICJhPTEiLCBfZi5fX2NvZGVfX106CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvYmo9b2JqKToKKyAgICAgICAgICAgICAgICB2aWFfb2JqZWN0ID0gbGlzdChkaXMuQnl0ZWNvZGUob2JqKSkKKyAgICAgICAgICAgICAgICB2aWFfZ2VuZXJhdG9yID0gbGlzdChkaXMuZ2V0X2luc3RydWN0aW9ucyhvYmopKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlhX29iamVjdCwgdmlhX2dlbmVyYXRvcikKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5CeXRlY29kZShvdXRlciwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX291dGVyKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2xpbmVfaW5fZGlzYXNzZW1ibHkoc2VsZik6CisgICAgICAgICMgVXNlIHRoZSBsaW5lIGluIHRoZSBzb3VyY2UgY29kZQorICAgICAgICBhY3R1YWwgPSBkaXMuQnl0ZWNvZGUoc2ltcGxlKS5kaXMoKVs6M10KKyAgICAgICAgZXhwZWN0ZWQgPSAiezo+M30iLmZvcm1hdChzaW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgIyBVc2UgYW4gZXhwbGljaXQgZmlyc3QgbGluZSBudW1iZXIKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKHNpbXBsZSwgZmlyc3RfbGluZT0zNTApLmRpcygpWzozXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgIjM1MCIpCisKKyAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSAxMDAwCisgICAgICAgIGZvciB4LCBleHBlY3RlZCBpbiBDb2RlSW5mb1Rlc3RzLnRlc3RfcGFpcnM6CisgICAgICAgICAgICBiID0gZGlzLkJ5dGVjb2RlKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGIuaW5mbygpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Rpc2Fzc2VtYmxlZChzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKF9mKS5kaXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZGlzX2YpCisKKyAgICBkZWYgdGVzdF9mcm9tX3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgdGIgPSBnZXRfdGIoKQorICAgICAgICBiID0gZGlzLkJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKHRiKQorICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OiB0YiA9IHRiLnRiX25leHQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuY3VycmVudF9vZmZzZXQsIHRiLnRiX2xhc3RpKQorCisgICAgZGVmIHRlc3RfZnJvbV90cmFjZWJhY2tfZGlzKHNlbGYpOgorICAgICAgICB0YiA9IGdldF90YigpCisgICAgICAgIGIgPSBkaXMuQnl0ZWNvZGUuZnJvbV90cmFjZWJhY2sodGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5kaXMoKSwgZGlzX3RyYWNlYmFjaykKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQppbmRleCA4NjI1OWMzLi41NjE5M2U4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CkBAIC00MDksNyArNDA5LDggQEAKIAogIiIiCiAKLWRlZiB0ZXN0X0RvY1Rlc3RGaW5kZXIoKTogciIiIgorY2xhc3MgdGVzdF9Eb2NUZXN0RmluZGVyOgorICAgIGRlZiBiYXNpY3MoKTogciIiIgogVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0RmluZGVyYCBjbGFzcy4KIAogRG9jVGVzdEZpbmRlciBpcyB1c2VkIHRvIGV4dHJhY3QgRG9jVGVzdHMgZnJvbSBhbiBvYmplY3QncyBkb2NzdHJpbmcKQEAgLTY0Niw2ICs2NDcsMzkgQEAKICAgICBbMSwgOSwgMTJdCiAiIiIKIAorICAgIGlmIGludC5fX2RvY19fOiAjIHNpbXBsZSBjaGVjayBmb3IgLS13aXRob3V0LWRvYy1zdHJpbmdzLCBza2lwIGlmIGxhY2tpbmcKKyAgICAgICAgZGVmIG5vbl9QeXRob25fbW9kdWxlcygpOiByIiIiCisKK0ZpbmRpbmcgRG9jdGVzdHMgaW4gTW9kdWxlcyBOb3QgV3JpdHRlbiBpbiBQeXRob24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0RvY1Rlc3RGaW5kZXIgY2FuIGFsc28gZmluZCBkb2N0ZXN0cyBpbiBtb3N0IG1vZHVsZXMgbm90IHdyaXR0ZW4gaW4gUHl0aG9uLgorV2UnbGwgdXNlIGJ1aWx0aW5zIGFzIGFuIGV4YW1wbGUsIHNpbmNlIGl0IGFsbW9zdCBjZXJ0YWlubHkgaXNuJ3Qgd3JpdHRlbiBpbgorcGxhaW4gb2wnIFB5dGhvbiBhbmQgaXMgZ3VhcmFudGVlZCB0byBiZSBhdmFpbGFibGUuCisKKyAgICA+Pj4gaW1wb3J0IGJ1aWx0aW5zCisgICAgPj4+IHRlc3RzID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChidWlsdGlucykKKyAgICA+Pj4gNzkwIDwgbGVuKHRlc3RzKSA8IDgwMCAjIGFwcHJveGltYXRlIG51bWJlciBvZiBvYmplY3RzIHdpdGggZG9jc3RyaW5ncworICAgIFRydWUKKyAgICA+Pj4gcmVhbF90ZXN0cyA9IFt0IGZvciB0IGluIHRlc3RzIGlmIGxlbih0LmV4YW1wbGVzKSA+IDBdCisgICAgPj4+IGxlbihyZWFsX3Rlc3RzKSAjIG9iamVjdHMgdGhhdCBhY3R1YWxseSBoYXZlIGRvY3Rlc3RzCisgICAgOAorICAgID4+PiBmb3IgdCBpbiByZWFsX3Rlc3RzOgorICAgIC4uLiAgICAgcHJpbnQoJ3t9ICB7fScuZm9ybWF0KGxlbih0LmV4YW1wbGVzKSwgdC5uYW1lKSkKKyAgICAuLi4KKyAgICAxICBidWlsdGlucy5iaW4KKyAgICAzICBidWlsdGlucy5mbG9hdC5hc19pbnRlZ2VyX3JhdGlvCisgICAgMiAgYnVpbHRpbnMuZmxvYXQuZnJvbWhleAorICAgIDIgIGJ1aWx0aW5zLmZsb2F0LmhleAorICAgIDEgIGJ1aWx0aW5zLmhleAorICAgIDEgIGJ1aWx0aW5zLmludAorICAgIDIgIGJ1aWx0aW5zLmludC5iaXRfbGVuZ3RoCisgICAgMSAgYnVpbHRpbnMub2N0CisKK05vdGUgaGVyZSB0aGF0ICdiaW4nLCAnb2N0JywgYW5kICdoZXgnIGFyZSBmdW5jdGlvbnM7ICdmbG9hdC5hc19pbnRlZ2VyX3JhdGlvJywKKydmbG9hdC5oZXgnLCBhbmQgJ2ludC5iaXRfbGVuZ3RoJyBhcmUgbWV0aG9kczsgJ2Zsb2F0LmZyb21oZXgnIGlzIGEgY2xhc3NtZXRob2QsCithbmQgJ2ludCcgaXMgYSB0eXBlLgorIiIiCisKIGRlZiB0ZXN0X0RvY1Rlc3RQYXJzZXIoKTogciIiIgogVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0UGFyc2VyYCBjbGFzcy4KIApAQCAtMTQzNiw4ICsxNDcwLDQwIEBACiAgICAgICAgIDIKICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCiAKLUZvciB0aGUgcHVycG9zZXMgb2YgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSwgdW5leHBlY3RlZCBleGNlcHRpb25zCi1jb3VudCBhcyBmYWlsdXJlczoKK1RoZSBGQUlMX0ZBU1QgZmxhZyBjYXVzZXMgdGhlIHJ1bm5lciB0byBleGl0IGFmdGVyIHRoZSBmaXJzdCBmYWlsaW5nIGV4YW1wbGUsCitzbyBzdWJzZXF1ZW50IGV4YW1wbGVzIGFyZSBub3QgZXZlbiBhdHRlbXB0ZWQ6CisKKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkZBSUxfRkFTVAorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50KDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK1NwZWNpZnlpbmcgYm90aCBGQUlMX0ZBU1QgYW5kIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgaXMgZXF1aXZhbGVudCB0bworRkFJTF9GQVNUIG9ubHk6CisKKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkZBSUxfRkFTVCB8IGRvY3Rlc3QuUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50KDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgYm90aCBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFIGFuZCBGQUlMX0ZBU1QsIHVuZXhwZWN0ZWQKK2V4Y2VwdGlvbnMgY291bnQgYXMgZmFpbHVyZXM6CiAKICAgICA+Pj4gZGVmIGYoeCk6CiAgICAgLi4uICAgICByJycnCkBAIC0xNDY0LDYgKzE1MzAsMTcgQEAKICAgICAgICAgLi4uCiAgICAgICAgIFZhbHVlRXJyb3I6IDIKICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5GQUlMX0ZBU1QKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNSwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4Y2VwdGlvbiByYWlzZWQ6CisgICAgICAgIC4uLgorICAgICAgICBWYWx1ZUVycm9yOiAyCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQogCiBOZXcgb3B0aW9uIGZsYWdzIGNhbiBhbHNvIGJlIHJlZ2lzdGVyZWQsIHZpYSByZWdpc3Rlcl9vcHRpb25mbGFnKCkuICBIZXJlCiB3ZSByZWFjaCBpbnRvIGRvY3Rlc3QncyBpbnRlcm5hbHMgYSBiaXQuCkBAIC0yNTgwLDYgKzI2NTcsMjQwIEBACiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQogICAgICIiIgogCitkZWYgdGVzdF9DTEkoKTogciIiIgorVGhlIGRvY3Rlc3QgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIHJ1biBkb2N0ZXN0cyBhZ2FpbnN0IGFuIGFyYml0cmFyeSBmaWxlLgorVGhlc2UgdGVzdHMgdGVzdCB0aGlzIENMSSBmdW5jdGlvbmFsaXR5LgorCitXZSdsbCB1c2UgdGhlIHN1cHBvcnQgbW9kdWxlJ3Mgc2NyaXB0X2hlbHBlcnMgZm9yIHRoaXMsIGFuZCB3cml0ZSBhIHRlc3QgZmlsZXMKK3RvIGEgdGVtcCBkaXIgdG8gcnVuIHRoZSBjb21tYW5kIGFnYWluc3QuICBEdWUgdG8gYSBjdXJyZW50IGxpbWl0YXRpb24gaW4KK3NjcmlwdF9oZWxwZXJzLCB0aG91Z2gsIHdlIG5lZWQgYSBsaXR0bGUgdXRpbGl0eSBmdW5jdGlvbiB0byB0dXJuIHRoZSByZXR1cm5lZAorb3V0cHV0IGludG8gc29tZXRoaW5nIHdlIGNhbiBkb2N0ZXN0IGFnYWluc3Q6CisKKyAgICA+Pj4gZGVmIG5vcm1hbGl6ZShzKToKKyAgICAuLi4gICAgIHJldHVybiAnXG4nLmpvaW4ocy5kZWNvZGUoKS5zcGxpdGxpbmVzKCkpCisKK05vdGU6IHdlIGFsc28gcGFzcyBURVJNPScnIHRvIGFsbCB0aGUgYXNzZXJ0X3B5dGhvbiBjYWxscyB0byBhdm9pZCBhIGJ1ZworaW4gdGhlIHJlYWRsaW5lIGxpYnJhcnkgdGhhdCBpcyB0cmlnZ2VyZWQgaW4gdGhlc2UgdGVzdHMgYmVjYXVzZSB3ZSBhcmUKK3J1bm5pbmcgdGhlbSBpbiBhIG5ldyBweXRob24gcHJvY2Vzcy4gIFNlZToKKworICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLXJlYWRsaW5lLzIwMTMtMDYvbXNnMDAwMDAuaHRtbAorCitXaXRoIHRob3NlIHByZWxpbWluYXJpZXMgb3V0IG9mIHRoZSB3YXksIHdlJ2xsIHN0YXJ0IHdpdGggYSBmaWxlIHdpdGggdHdvCitzaW1wbGUgdGVzdHMgYW5kIG5vIGVycm9ycy4gIFdlJ2xsIHJ1biBib3RoIHRoZSB1bmFkb3JuZWQgZG9jdGVzdCBjb21tYW5kLCBhbmQKK3RoZSB2ZXJib3NlIHZlcnNpb24sIGFuZCB0aGVuIGNoZWNrIHRoZSBvdXRwdXQ6CisKKyAgICA+Pj4gZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCisgICAgPj4+IHdpdGggc2NyaXB0X2hlbHBlci50ZW1wX2RpcigpIGFzIHRtcGRpcjoKKyAgICAuLi4gICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ215ZmlsZS5kb2MnKQorICAgIC4uLiAgICAgd2l0aCBvcGVuKGZuLCAndycpIGFzIGY6CisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1RoaXMgaXMgYSB2ZXJ5IHNpbXBsZSB0ZXN0IGZpbGUuXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gMSArIDFcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgID4+PiAiYSJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICdhJ1xuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdBbmQgdGhhdCBpcyBpdC5cbicpCisgICAgLi4uICAgICByYzEsIG91dDEsIGVycjEgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgZm4sIFRFUk09JycpCisgICAgLi4uICAgICByYzIsIG91dDIsIGVycjIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy12JywgZm4sIFRFUk09JycpCisKK1dpdGggbm8gYXJndW1lbnRzIGFuZCBwYXNzaW5nIHRlc3RzLCB3ZSBzaG91bGQgZ2V0IG5vIG91dHB1dDoKKworICAgID4+PiByYzEsIG91dDEsIGVycjEKKyAgICAoMCwgYicnLCBiJycpCisKK1dpdGggdGhlIHZlcmJvc2UgZmxhZywgd2Ugc2hvdWxkIHNlZSB0aGUgdGVzdCBvdXRwdXQsIGJ1dCBubyBlcnJvciBvdXRwdXQ6CisKKyAgICA+Pj4gcmMyLCBlcnIyCisgICAgKDAsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKG91dDIpKQorICAgIFRyeWluZzoKKyAgICAgICAgMSArIDEKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDIKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgImEiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYScKKyAgICBvaworICAgIDEgaXRlbXMgcGFzc2VkIGFsbCB0ZXN0czoKKyAgICAgICAyIHRlc3RzIGluIG15ZmlsZS5kb2MKKyAgICAyIHRlc3RzIGluIDEgaXRlbXMuCisgICAgMiBwYXNzZWQgYW5kIDAgZmFpbGVkLgorICAgIFRlc3QgcGFzc2VkLgorCitOb3cgd2UnbGwgd3JpdGUgYSBjb3VwbGUgZmlsZXMsIG9uZSB3aXRoIHRocmVlIHRlc3RzLCB0aGUgb3RoZXIgYSBweXRob24gbW9kdWxlCit3aXRoIHR3byB0ZXN0cywgYm90aCBvZiB0aGUgZmlsZXMgaGF2aW5nICJlcnJvcnMiIGluIHRoZSB0ZXN0cyB0aGF0IGNhbiBiZSBtYWRlCitub24tZXJyb3JzIGJ5IGFwcGx5aW5nIHRoZSBhcHByb3ByaWF0ZSBkb2N0ZXN0IG9wdGlvbnMgdG8gdGhlIHJ1biAoRUxMSVBTSVMgaW4KK3RoZSBmaXJzdCBmaWxlLCBOT1JNQUxJWkVfV0hJVEVTUEFDRSBpbiB0aGUgc2Vjb25kKS4gIFRoaXMgY29tYmluYXRpb24gd2lsbAorYWxsb3cgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSAtZiBhbmQgLW8gZmxhZ3MsIGFzIHdlbGwgYXMgdGhlIGRvY3Rlc3QgY29tbWFuZCdzCithYmlsaXR5IHRvIHByb2Nlc3MgbW9yZSB0aGFuIG9uZSBmaWxlIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kLCBzaW5jZSB0aGUgc2Vjb25kCitmaWxlIGVuZHMgaW4gJy5weScsIGl0cyBoYW5kbGluZyBvZiBweXRob24gbW9kdWxlIGZpbGVzIChhcyBvcHBvc2VkIHRvIHN0cmFpZ2h0Cit0ZXh0IGZpbGVzKS4KKworICAgID4+PiBmcm9tIHRlc3QgaW1wb3J0IHNjcmlwdF9oZWxwZXIKKyAgICA+Pj4gd2l0aCBzY3JpcHRfaGVscGVyLnRlbXBfZGlyKCkgYXMgdG1wZGlyOgorICAgIC4uLiAgICAgZm4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnbXlmaWxlLmRvYycpCisgICAgLi4uICAgICB3aXRoIG9wZW4oZm4sICd3JykgYXMgZjoKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnVGhpcyBpcyBhbm90aGVyIHNpbXBsZSB0ZXN0IGZpbGUuXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gMSArIDFcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgID4+PiAiYWJjZGVmIlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgiICAgJ2EuLi5mJ1xuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgPj4+ICJhamttbCJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICdhLi4ubCdcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1xuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnQW5kIHRoYXQgaXMgaXQuXG4nKQorICAgIC4uLiAgICAgZm4yID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ215ZmlsZTIucHknKQorICAgIC4uLiAgICAgd2l0aCBvcGVuKGZuMiwgJ3cnKSBhcyBmOgorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdkZWYgdGVzdF9mdW5jKCk6XG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICBcIlwiXCJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIFRoaXMgaXMgc2ltcGxlIHB5dGhvbiB0ZXN0IGZ1bmN0aW9uLlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgICAgID4+PiAxICsgMVxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgICAgIDJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgICAgICA+Pj4gImFiYyAgIGRlZiJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICAgICAnYWJjIGRlZidcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIlxuIikKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgXCJcIlwiXG4nKQorICAgIC4uLiAgICAgaW1wb3J0IHNodXRpbAorICAgIC4uLiAgICAgcmMxLCBvdXQxLCBlcnIxID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjMiwgb3V0MiwgZXJyMiA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnRUxMSVBTSVMnLCBmbiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjMywgb3V0MywgZXJyMyA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnRUxMSVBTSVMnLAorICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yLCBURVJNPScnKQorICAgIC4uLiAgICAgcmM0LCBvdXQ0LCBlcnI0ID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1mJywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjNSwgb3V0NSwgZXJyNSA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLXYnLCAnLW8nLCAnRUxMSVBTSVMnLAorICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yLCBURVJNPScnKQorCitPdXIgZmlyc3QgdGVzdCBydW4gd2lsbCBzaG93IHRoZSBlcnJvcnMgZnJvbSB0aGUgZmlyc3QgZmlsZSAoZG9jdGVzdCBzdG9wcyBpZiBhCitmaWxlIGhhcyBlcnJvcnMpLiAgTm90ZSB0aGF0IGRvY3Rlc3QgdGVzdC1ydW4gZXJyb3Igb3V0cHV0IGFwcGVhcnMgb24gc3Rkb3V0LAorbm90IHN0ZGVycjoKKworICAgID4+PiByYzEsIGVycjEKKyAgICAoMSwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUob3V0MSkpICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgIi4uLm15ZmlsZS5kb2MiLCBsaW5lIDQsIGluIG15ZmlsZS5kb2MKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgImFiY2RlZiIKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgJ2EuLi5mJworICAgIEdvdDoKKyAgICAgICAgJ2FiY2RlZicKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAiLi4ubXlmaWxlLmRvYyIsIGxpbmUgNiwgaW4gbXlmaWxlLmRvYworICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICAiYWprbWwiCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICdhLi4ubCcKKyAgICBHb3Q6CisgICAgICAgICdhamttbCcKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgMSBpdGVtcyBoYWQgZmFpbHVyZXM6CisgICAgICAgMiBvZiAgIDMgaW4gbXlmaWxlLmRvYworICAgICoqKlRlc3QgRmFpbGVkKioqIDIgZmFpbHVyZXMuCisKK1dpdGggLW8gRUxMSVBTSVMgc3BlY2lmaWVkLCB0aGUgc2Vjb25kIHJ1biwgYWdhaW5zdCBqdXN0IHRoZSBmaXJzdCBmaWxlLCBzaG91bGQKK3Byb2R1Y2Ugbm8gZXJyb3JzLCBhbmQgd2l0aCAtbyBOT1JNQUxJWkVfV0hJVEVTUEFDRSBhbHNvIHNwZWNpZmllZCwgbmVpdGhlcgorc2hvdWxkIHRoZSB0aGlyZCwgd2hpY2ggcmFuIGFnYWluc3QgYm90aCBmaWxlczoKKworICAgID4+PiByYzIsIG91dDIsIGVycjIKKyAgICAoMCwgYicnLCBiJycpCisgICAgPj4+IHJjMywgb3V0MywgZXJyMworICAgICgwLCBiJycsIGInJykKKworVGhlIGZvdXJ0aCBydW4gdXNlcyBGQUlMX0ZBU1QsIHNvIHdlIHNob3VsZCBzZWUgb25seSBvbmUgZXJyb3I6CisKKyAgICA+Pj4gcmM0LCBlcnI0CisgICAgKDEsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKG91dDQpKSAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlICIuLi5teWZpbGUuZG9jIiwgbGluZSA0LCBpbiBteWZpbGUuZG9jCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgICJhYmNkZWYiCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICdhLi4uZicKKyAgICBHb3Q6CisgICAgICAgICdhYmNkZWYnCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIDEgaXRlbXMgaGFkIGZhaWx1cmVzOgorICAgICAgIDEgb2YgICAyIGluIG15ZmlsZS5kb2MKKyAgICAqKipUZXN0IEZhaWxlZCoqKiAxIGZhaWx1cmVzLgorCitUaGUgZmlmdGggdGVzdCB1c2VzIHZlcmJvc2Ugd2l0aCB0aGUgdHdvIG9wdGlvbnMsIHNvIHdlIHNob3VsZCBnZXQgdmVyYm9zZQorc3VjY2VzcyBvdXRwdXQgZm9yIHRoZSB0ZXN0cyBpbiBib3RoIGZpbGVzOgorCisgICAgPj4+IHJjNSwgZXJyNQorICAgICgwLCBiJycpCisgICAgPj4+IHByaW50KG5vcm1hbGl6ZShvdXQ1KSkKKyAgICBUcnlpbmc6CisgICAgICAgIDEgKyAxCisgICAgRXhwZWN0aW5nOgorICAgICAgICAyCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhYmNkZWYiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYS4uLmYnCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhamttbCIKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgICdhLi4ubCcKKyAgICBvaworICAgIDEgaXRlbXMgcGFzc2VkIGFsbCB0ZXN0czoKKyAgICAgICAzIHRlc3RzIGluIG15ZmlsZS5kb2MKKyAgICAzIHRlc3RzIGluIDEgaXRlbXMuCisgICAgMyBwYXNzZWQgYW5kIDAgZmFpbGVkLgorICAgIFRlc3QgcGFzc2VkLgorICAgIFRyeWluZzoKKyAgICAgICAgMSArIDEKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIDIKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgImFiYyAgIGRlZiIKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgICdhYmMgZGVmJworICAgIG9rCisgICAgMSBpdGVtcyBoYWQgbm8gdGVzdHM6CisgICAgICAgIG15ZmlsZTIKKyAgICAxIGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CisgICAgICAgMiB0ZXN0cyBpbiBteWZpbGUyLnRlc3RfZnVuYworICAgIDIgdGVzdHMgaW4gMiBpdGVtcy4KKyAgICAyIHBhc3NlZCBhbmQgMCBmYWlsZWQuCisgICAgVGVzdCBwYXNzZWQuCisKK1dlIHNob3VsZCBhbHNvIGNoZWNrIHNvbWUgdHlwaWNhbCBlcnJvciBjYXNlcy4KKworSW52YWxpZCBmaWxlIG5hbWU6CisKKyAgICA+Pj4gcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgLi4uICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnbm9zdWNoZmlsZScsIFRFUk09JycpCisgICAgPj4+IHJjLCBvdXQKKyAgICAoMSwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUoZXJyKSkgICAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgRmlsZU5vdEZvdW5kRXJyb3I6IFtFcnJubyAuLi5dIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICdub3N1Y2hmaWxlJworCitJbnZhbGlkIGRvY3Rlc3Qgb3B0aW9uOgorCisgICAgPj4+IHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgIC4uLiAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ25vc3VjaG9wdGlvbicsIFRFUk09JycpCisgICAgPj4+IHJjLCBvdXQKKyAgICAoMiwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUoZXJyKSkgICAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgdXNhZ2UuLi5pbnZhbGlkLi4ubm9zdWNob3B0aW9uLi4uCisKKyIiIgorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNYWluCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZHluYW1pY2NsYXNzYXR0cmlidXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OWQ2YzMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weQpAQCAtMCwwICsxLDMwNCBAQAorIyBUZXN0IGNhc2UgZm9yIER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorIyBtb3JlIHRlc3RzIGFyZSBpbiB0ZXN0X2Rlc2NyCisKK2ltcG9ydCBhYmMKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0eXBlcyBpbXBvcnQgRHluYW1pY0NsYXNzQXR0cmlidXRlCisKK2NsYXNzIFByb3BlcnR5QmFzZShFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgUHJvcGVydHlHZXQoUHJvcGVydHlCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFByb3BlcnR5U2V0KFByb3BlcnR5QmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eURlbChQcm9wZXJ0eUJhc2UpOgorICAgIHBhc3MKKworY2xhc3MgQmFzZUNsYXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9zcGFtID0gNQorCisgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJCYXNlQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3NwYW0gPSB2YWx1ZQorCisgICAgQHNwYW0uZGVsZXRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5fc3BhbQorCitjbGFzcyBTdWJDbGFzcyhCYXNlQ2xhc3MpOgorCisgICAgc3BhbSA9IEJhc2VDbGFzcy5fX2RpY3RfX1snc3BhbSddCisKKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIiU3ViQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJhaXNlIFByb3BlcnR5R2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJhaXNlIFByb3BlcnR5U2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5kZWxldGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgIHJhaXNlIFByb3BlcnR5RGVsKHNlbGYuX3NwYW0pCisKK2NsYXNzIFByb3BlcnR5RG9jQmFzZShvYmplY3QpOgorICAgIF9zcGFtID0gMQorICAgIGRlZiBfZ2V0X3NwYW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisgICAgc3BhbSA9IER5bmFtaWNDbGFzc0F0dHJpYnV0ZShfZ2V0X3NwYW0sIGRvYz0ic3BhbSBzcGFtIHNwYW0iKQorCitjbGFzcyBQcm9wZXJ0eURvY1N1YihQcm9wZXJ0eURvY0Jhc2UpOgorICAgIHNwYW0gPSBQcm9wZXJ0eURvY0Jhc2UuX19kaWN0X19bJ3NwYW0nXQorICAgIEBzcGFtLmdldHRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJUaGUgZGVjb3JhdG9yIGRvZXMgbm90IHVzZSB0aGlzIGRvYyBzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKworY2xhc3MgUHJvcGVydHlTdWJOZXdHZXR0ZXIoQmFzZUNsYXNzKToKKyAgICBzcGFtID0gQmFzZUNsYXNzLl9fZGljdF9fWydzcGFtJ10KKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIibmV3IGRvY3N0cmluZyIiIgorICAgICAgICByZXR1cm4gNQorCitjbGFzcyBQcm9wZXJ0eU5ld0dldHRlcihvYmplY3QpOgorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIib3JpZ2luYWwgZG9jc3RyaW5nIiIiCisgICAgICAgIHJldHVybiAxCisgICAgQHNwYW0uZ2V0dGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICIiIm5ldyBkb2NzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIDgKKworY2xhc3MgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjb2xvcigpOgorICAgICAgICBwYXNzCisKK2NsYXNzIENsYXNzV2l0aFByb3BlcnR5QWJzdHJhY3RWaXJ0dWFsKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgY29sb3IoKToKKyAgICAgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3JfYmFzZWNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBiYXNlID0gQmFzZUNsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fc3BhbSwgNSkKKyAgICAgICAgYmFzZS5zcGFtID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDEwKQorICAgICAgICBkZWxhdHRyKGJhc2UsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGJhc2UsICJzcGFtIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihiYXNlLCAiX3NwYW0iKSkKKyAgICAgICAgYmFzZS5zcGFtID0gMjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDIwKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb3BlcnR5R2V0LCBnZXRhdHRyLCBzdWIsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvcGVydHlTZXQsIHNldGF0dHIsIHN1YiwgInNwYW0iLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9wZXJ0eURlbCwgZGVsYXR0ciwgc3ViLCAic3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3Jfc3ViY2xhc3NfZG9jKHNlbGYpOgorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJTdWJDbGFzcy5nZXR0ZXIiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2Jhc2VjbGFzc19kb2Moc2VsZik6CisgICAgICAgIGJhc2UgPSBCYXNlQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgIkJhc2VDbGFzcy5nZXR0ZXIiKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2RvYyhzZWxmKToKKyAgICAgICAgYmFzZSA9IFByb3BlcnR5RG9jQmFzZSgpCisgICAgICAgIHN1YiA9IFByb3BlcnR5RG9jU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9nZXR0ZXJfZG9jX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBuZXdnZXR0ZXJzdWIgPSBQcm9wZXJ0eVN1Yk5ld0dldHRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgbmV3Z2V0dGVyID0gUHJvcGVydHlOZXdHZXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5zcGFtLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5fX2NsYXNzX18uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAibmV3IGRvY3N0cmluZyIpCisKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9fX2lzYWJzdHJhY3RtZXRob2RfX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgIGZvciB2YWwgaW4gKFRydWUsIEZhbHNlLCBbXSwgWzFdLCAnJywgJzEnKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gdmFsCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoQy5fX2RpY3RfX1snZm9vJ10uX19pc2Fic3RyYWN0bWV0aG9kX18sIGJvb2wodmFsKSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSdzIF9faXNhYnN0cmFjdG1ldGhvZF9fIGRlc2NyaXB0b3IgZG9lcyB0aGUKKyAgICAgICAgIyByaWdodCB0aGluZyB3aGVuIHByZXNlbnRlZCB3aXRoIGEgdmFsdWUgdGhhdCBmYWlscyB0cnV0aCB0ZXN0aW5nOgorICAgICAgICBjbGFzcyBOb3RCb29sKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisgICAgICAgICAgICBfX2xlbl9fID0gX19ub256ZXJvX18KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gTm90Qm9vbCgpCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0X3ZpcnR1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoUHJvcGVydHlBYnN0cmFjdFZpcnR1YWwpCisgICAgICAgIGNsYXNzIEFQVihDbGFzc1dpdGhQcm9wZXJ0eUFic3RyYWN0VmlydHVhbCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQVBWKQorICAgICAgICBjbGFzcyBBVlAoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEFWUCkKKyAgICAgICAgY2xhc3MgT2theTEoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGNvbG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2xvcgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX2NvbG9yID0gJ2N5YW4nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgT2theTEuY29sb3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChPa2F5MSgpLmNvbG9yLCAnY3lhbicpCisgICAgICAgIGNsYXNzIE9rYXkyKENsYXNzV2l0aEFic3RyYWN0VmlydHVhbFByb3BlcnR5KToKKyAgICAgICAgICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiBjb2xvcihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29sb3IKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9jb2xvciA9ICdtYWdlbnRhJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIE9rYXkyLmNvbG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT2theTIoKS5jb2xvciwgJ21hZ2VudGEnKQorCisKKyMgSXNzdWUgNTg5MDogc3ViY2xhc3NlcyBvZiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgZG8gbm90IHByZXNlcnZlIG1ldGhvZCBfX2RvY19fIHN0cmluZ3MKK2NsYXNzIFByb3BlcnR5U3ViKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSIiIgorCitjbGFzcyBQcm9wZXJ0eVN1YlNsb3RzKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSB0aGF0IGRlZmluZXMgX19zbG90c19fIiIiCisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgUHJvcGVydHlTdWJjbGFzc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihQcm9wZXJ0eVN1YlNsb3RzLCAnX19kb2NfXycpLAorICAgICAgICAgICAgIl9fZG9jX18gaXMgYWxyZWFkeSBwcmVzZW50LCBfX3Nsb3RzX18gd2lsbCBoYXZlIG5vIGVmZmVjdCIpCisgICAgZGVmIHRlc3Rfc2xvdHNfZG9jc3RyaW5nX2NvcHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgICAgICBAUHJvcGVydHlTdWJTbG90cworICAgICAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAiIiJUcnlpbmcgdG8gY29weSB0aGlzIGRvY3N0cmluZyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiIiIgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIHByaW50KCdcbicsc3BhbS5fX2RvY19fKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0dHJpYnV0ZUVycm9yIG5vdCByYWlzZWQiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2NvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvby5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9zZXR0ZXJfY29waWVzX2dldHRlcl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBzZWxmLl9zcGFtID0gMQorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKyAgICAgICAgICAgIEBzcGFtLnNldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgICIiInRoaXMgZG9jc3RyaW5nIGlzIGlnbm9yZWQiIiIKKyAgICAgICAgICAgICAgICBzZWxmLl9zcGFtID0gdmFsdWUKKyAgICAgICAgZm9vID0gRm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uc3BhbSwgMSkKKyAgICAgICAgZm9vLnNwYW0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLnNwYW0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLAorICAgICAgICAgICAgInNwYW0gd3JhcHBlZCBpbiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgc3ViY2xhc3MiKQorICAgICAgICBjbGFzcyBGb29TdWIoRm9vKToKKyAgICAgICAgICAgIHNwYW0gPSBGb28uX19kaWN0X19bJ3NwYW0nXQorICAgICAgICAgICAgQHNwYW0uc2V0dGVyCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgIiIiYW5vdGhlciBpZ25vcmVkIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHNlbGYuX3NwYW0gPSAnZWdncycKKyAgICAgICAgZm9vc3ViID0gRm9vU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29zdWIuc3BhbSwgMSkKKyAgICAgICAgZm9vc3ViLnNwYW0gPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vc3ViLnNwYW0sICdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvb1N1Yi5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9uZXdfZ2V0dGVyX25ld19kb2NzdHJpbmcoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBAUHJvcGVydHlTdWIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIEBzcGFtLmdldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIiYSBuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAiYSBuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgY2xhc3MgRm9vQmFzZShvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJhIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNsYXNzIEZvbzIoRm9vQmFzZSk6CisgICAgICAgICAgICBzcGFtID0gRm9vQmFzZS5fX2RpY3RfX1snc3BhbSddCisgICAgICAgICAgICBAc3BhbS5nZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgbmV3IGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgImEgbmV3IGRvY3N0cmluZyIpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFByb3BlcnR5VGVzdHMsIFByb3BlcnR5U3ViY2xhc3NUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19pbml0X18ucHkKaW5kZXggZjIwNmFjZS4uZDg4OTZlZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL19faW5pdF9fLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGVzdC5zdXBwb3J0CitpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBlbWFpbAogZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCiBmcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBjb21wYXQzMgpAQCAtNDIsNiArNDMsOCBAQAogICAgICMgaGVyZSB3ZSBtYWtlIG1pbmltYWwgY2hhbmdlcyBpbiB0aGUgdGVzdF9lbWFpbCB0ZXN0cyBjb21wYXJlZCB0byB0aGVpcgogICAgICMgcHJlLTMuMyBzdGF0ZS4KICAgICBwb2xpY3kgPSBjb21wYXQzMgorICAgICMgTGlrZXdpc2UsIHRoZSBkZWZhdWx0IG1lc3NhZ2Ugb2JqZWN0IGlzIE1lc3NhZ2UuCisgICAgbWVzc2FnZSA9IE1lc3NhZ2UKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3cpCkBAIC01NCwxMSArNTcsMjMgQEAKICAgICAgICAgd2l0aCBvcGVuZmlsZShmaWxlbmFtZSkgYXMgZnA6CiAgICAgICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnAsIHBvbGljeT1zZWxmLnBvbGljeSkKIAotICAgIGRlZiBfc3RyX21zZyhzZWxmLCBzdHJpbmcsIG1lc3NhZ2U9TWVzc2FnZSwgcG9saWN5PU5vbmUpOgorICAgIGRlZiBfc3RyX21zZyhzZWxmLCBzdHJpbmcsIG1lc3NhZ2U9Tm9uZSwgcG9saWN5PU5vbmUpOgogICAgICAgICBpZiBwb2xpY3kgaXMgTm9uZToKICAgICAgICAgICAgIHBvbGljeSA9IHNlbGYucG9saWN5CisgICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLm1lc3NhZ2UKICAgICAgICAgcmV0dXJuIGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoc3RyaW5nLCBtZXNzYWdlLCBwb2xpY3k9cG9saWN5KQogCisgICAgZGVmIF9ieXRlc19tc2coc2VsZiwgYnl0ZXN0cmluZywgbWVzc2FnZT1Ob25lLCBwb2xpY3k9Tm9uZSk6CisgICAgICAgIGlmIHBvbGljeSBpcyBOb25lOgorICAgICAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kKKyAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYubWVzc2FnZQorICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKGJ5dGVzdHJpbmcsIG1lc3NhZ2UsIHBvbGljeT1wb2xpY3kpCisKKyAgICBkZWYgX21ha2VfbWVzc2FnZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWVzc2FnZShwb2xpY3k9c2VsZi5wb2xpY3kpCisKICAgICBkZWYgX2J5dGVzX3JlcHIoc2VsZiwgYik6CiAgICAgICAgIHJldHVybiBbcmVwcih4KSBmb3IgeCBpbiBiLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSldCiAKQEAgLTEyMyw2ICsxMzgsNyBAQAogCiAgICAgIiIiCiAgICAgcGFyYW1kaWN0cyA9IHt9CisgICAgdGVzdGVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJ19wYXJhbXMnKToKICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGF0dHIsICdrZXlzJyk6CkBAIC0xMzQsNyArMTUwLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGRbbl0gPSB4CiAgICAgICAgICAgICAgICAgYXR0ciA9IGQKICAgICAgICAgICAgIHBhcmFtZGljdHNbbmFtZVs6LTddICsgJ19hc18nXSA9IGF0dHIKKyAgICAgICAgaWYgJ19hc18nIGluIG5hbWU6CisgICAgICAgICAgICB0ZXN0ZXJzW25hbWUuc3BsaXQoJ19hc18nKVswXSArICdfYXNfJ10uYXBwZW5kKG5hbWUpCiAgICAgdGVzdGZ1bmNzID0ge30KKyAgICBmb3IgbmFtZSBpbiBwYXJhbWRpY3RzOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiB0ZXN0ZXJzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gdGVzdGVyIGZvdW5kIGZvciB7fSIuZm9ybWF0KG5hbWUpKQorICAgIGZvciBuYW1lIGluIHRlc3RlcnM6CisgICAgICAgIGlmIG5hbWUgbm90IGluIHBhcmFtZGljdHM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBwYXJhbXMgZm91bmQgZm9yIHt9Ii5mb3JtYXQobmFtZSkpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGZvciBwYXJhbXNuYW1lLCBwYXJhbXNkaWN0IGluIHBhcmFtZGljdHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChwYXJhbXNuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGIwNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2NvbnRlbnRtYW5hZ2VyLnB5CkBAIC0wLDAgKzEsNzk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlLCBwYXJhbWV0ZXJpemUKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Citmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQorZnJvbSBlbWFpbC5jb250ZW50bWFuYWdlciBpbXBvcnQgQ29udGVudE1hbmFnZXIsIHJhd19kYXRhX21hbmFnZXIKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0Q29udGVudE1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdAorICAgIG1lc3NhZ2UgPSBFbWFpbE1lc3NhZ2UKKworICAgIGdldF9rZXlfcGFyYW1zID0geworICAgICAgICAnZnVsbF90eXBlJzogICAgICAgICgxLCAndGV4dC9wbGFpbicsKSwKKyAgICAgICAgJ21haW50eXBlX29ubHknOiAgICAoMiwgJ3RleHQnLCksCisgICAgICAgICdudWxsX2tleSc6ICAgICAgICAgKDMsICcnLCksCisgICAgICAgIH0KKworICAgIGRlZiBnZXRfa2V5X2FzX2dldF9jb250ZW50X2tleShzZWxmLCBvcmRlciwga2V5KToKKyAgICAgICAgZGVmIGZvb19nZXR0ZXIobXNnLCBmb289Tm9uZSk6CisgICAgICAgICAgICBiYXIgPSBtc2dbJ1gtQmFyLUhlYWRlciddCisgICAgICAgICAgICByZXR1cm4gZm9vLCBiYXIKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBtWydYLUJhci1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSwgZm9vPSdiYXInKSwgKCdiYXInLCAnZm9vJykpCisKKyAgICBkZWYgZ2V0X2tleV9hc19nZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBiYXJfZ2V0dGVyKG1zZyk6CisgICAgICAgICAgICByZXR1cm4gbXNnWydYLUJhci1IZWFkZXInXQorICAgICAgICBkZWYgZm9vX2dldHRlcihtc2cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZ1snWC1Gb28tSGVhZGVyJ10KKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIGZvciBwcmVjZWRlbmNlLCBrZXkgaW4gc2VsZi5nZXRfa2V5X3BhcmFtcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHByZWNlZGVuY2UgPiBvcmRlcjoKKyAgICAgICAgICAgICAgICBjbS5hZGRfZ2V0X2hhbmRsZXIoa2V5LCBiYXJfZ2V0dGVyKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgbVsnWC1CYXItSGVhZGVyJ10gPSAnYmFyJworICAgICAgICBtWydYLUZvby1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSksICgnZm9vJykpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9yYWlzZXNfaWZfdW5rbm93bl9taW1ldHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoS2V5RXJyb3IsICd0ZXh0L3BsYWluJyk6CisgICAgICAgICAgICBjbS5nZXRfY29udGVudChtKQorCisgICAgY2xhc3MgQmFzZVRoaW5nKHN0cik6CisgICAgICAgIHBhc3MKKyAgICBiYXNlb2JqZWN0X2Z1bGxfcGF0aCA9IF9fbmFtZV9fICsgJy4nICsgJ1Rlc3RDb250ZW50TWFuYWdlci5CYXNlVGhpbmcnCisgICAgY2xhc3MgVGhpbmcoQmFzZVRoaW5nKToKKyAgICAgICAgcGFzcworICAgIHRlc3RvYmplY3RfZnVsbF9wYXRoID0gX19uYW1lX18gKyAnLicgKyAnVGVzdENvbnRlbnRNYW5hZ2VyLlRoaW5nJworCisgICAgc2V0X2tleV9wYXJhbXMgPSB7CisgICAgICAgICd0eXBlJzogICAgICAgICAgICAgKDAsICBUaGluZywpLAorICAgICAgICAnZnVsbF9wYXRoJzogICAgICAgICgxLCAgdGVzdG9iamVjdF9mdWxsX3BhdGgsKSwKKyAgICAgICAgJ3F1YWxuYW1lJzogICAgICAgICAoMiwgICdUZXN0Q29udGVudE1hbmFnZXIuVGhpbmcnLCksCisgICAgICAgICduYW1lJzogICAgICAgICAgICAgKDMsICAnVGhpbmcnLCksCisgICAgICAgICdiYXNlX3R5cGUnOiAgICAgICAgKDQsICBCYXNlVGhpbmcsKSwKKyAgICAgICAgJ2Jhc2VfZnVsbF9wYXRoJzogICAoNSwgIGJhc2VvYmplY3RfZnVsbF9wYXRoLCksCisgICAgICAgICdiYXNlX3F1YWxuYW1lJzogICAgKDYsICAnVGVzdENvbnRlbnRNYW5hZ2VyLkJhc2VUaGluZycsKSwKKyAgICAgICAgJ2Jhc2VfbmFtZSc6ICAgICAgICAoNywgICdCYXNlVGhpbmcnLCksCisgICAgICAgICdzdHJfdHlwZSc6ICAgICAgICAgKDgsICBzdHIsKSwKKyAgICAgICAgJ3N0cl9mdWxsX3BhdGgnOiAgICAoOSwgICdidWlsdGlucy5zdHInLCksCisgICAgICAgICdzdHJfbmFtZSc6ICAgICAgICAgKDEwLCAnc3RyJywpLCAgICMgc3RyIG5hbWUgYW5kIHF1YWxuYW1lIGFyZSB0aGUgc2FtZQorICAgICAgICAnbnVsbF9rZXknOiAgICAgICAgICgxMSwgTm9uZSwpLAorICAgICAgICB9CisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXkoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqLCBmb289Tm9uZSk6CisgICAgICAgICAgICBtc2dbJ1gtRm9vLUhlYWRlciddID0gZm9vCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQob2JqKQorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgZm9vX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaiwgZm9vPSdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ1gtRm9vLUhlYWRlciddLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKCksIG1zZ19vYmopCisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqKToKKyAgICAgICAgICAgIG1zZ1snWC1Gb29CYXItSGVhZGVyJ10gPSAnZm9vJworICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKG9iaikKKyAgICAgICAgZGVmIGJhcl9zZXR0ZXIobXNnLCBvYmopOgorICAgICAgICAgICAgbXNnWydYLUZvb0Jhci1IZWFkZXInXSA9ICdiYXInCisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBjbS5hZGRfc2V0X2hhbmRsZXIoa2V5LCBmb29fc2V0dGVyKQorICAgICAgICBmb3IgcHJlY2VkZW5jZSwga2V5IGluIHNlbGYuZ2V0X2tleV9wYXJhbXMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBwcmVjZWRlbmNlID4gb3JkZXI6CisgICAgICAgICAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgYmFyX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydYLUZvb0Jhci1IZWFkZXInXSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgpLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX3Vua25vd25fdHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtc2dfb2JqID0gc2VsZi5UaGluZygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChLZXlFcnJvciwgc2VsZi50ZXN0b2JqZWN0X2Z1bGxfcGF0aCk6CisgICAgICAgICAgICBjbS5zZXRfY29udGVudChtLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX2NhbGxlZF9vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0L2ZvbycKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgJ3Rlc3QnKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfY2FsbHNfY2xlYXJfY29udGVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1bJ0NvbnRlbnQtRm9vJ10gPSAnYmFyJworICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L2h0bWwnCisgICAgICAgIG1bJ1RvJ10gPSAndGVzdCcKKyAgICAgICAgbS5zZXRfcGF5bG9hZCgnYWJjJykKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9zZXRfaGFuZGxlcihzdHIsIGxhbWJkYSAqYXJncywgKiprdzogTm9uZSkKKyAgICAgICAgbS5zZXRfY29udGVudCgneHl6JywgY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LUZvbyddKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LVR5cGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydUbyddLCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0UmF3RGF0YU1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisgICAgIyBOb3RlOiB0aGVzZSB0ZXN0cyBhcmUgZGVwZW5kZW50IG9uIHRoZSBvcmRlciBpbiB3aGljaCBoZWFkZXJzIGFyZSBhZGRlZAorICAgICMgdG8gdGhlIG1lc3NhZ2Ugb2JqZWN0cyBieSB0aGUgY29kZS4gIFRoZXJlJ3Mgbm8gZGVmaW5lZCBvcmRlcmluZyBpbgorICAgICMgUkZDNTMyMi9NSU1FLCBzbyB0aGlzIG1ha2VzIHRoZSB0ZXN0cyBtb3JlIGZyYWdpbGUgdGhhbiB0aGUgc3RhbmRhcmRzCisgICAgIyByZXF1aXJlLiAgSG93ZXZlciwgaWYgdGhlIGhlYWRlciBvcmRlciBjaGFuZ2VzIGl0IGlzIGJlc3QgdG8gdW5kZXJzdGFuZAorICAgICMgKndoeSosIGFuZCBtYWtlIHN1cmUgaXQgaXNuJ3QgYSBzdWJ0bGUgYnVnIGluIHdoYXRldmVyIGNoYW5nZSB3YXMKKyAgICAjIGFwcGxpZWQuCisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShtYXhfbGluZV9sZW5ndGg9NjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyPXJhd19kYXRhX21hbmFnZXIpCisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW4oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgIkJhc2ljIHRleHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfaHRtbChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgIDxwPkJhc2ljIHRleHQuPC9wPgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8cD5CYXNpYyB0ZXh0LjwvcD5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbl9sYXRpbjEoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9ieXRlc19tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1sYXRpbjEKKworICAgICAgICAgICAgQmFzw6xjIHTDq3h0LgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2xhdGluMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fbGF0aW4xX3F1b3RlZF9wcmludGFibGUoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9ImxhdGluLTEiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisKKyAgICAgICAgICAgIEJhcz1FQ2MgdD1FQnh0LgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLCAiQmFzw6xjIHTDq3h0LlxuIikKKworICAgIGRlZiB0ZXN0X2dldF90ZXh0X3BsYWluX3V0ZjhfYmFzZTY0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ289CisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgQmFzPWMzPWFjYyB0PWMzPWFieHQ9ZmQuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHTvv70uXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZV9pZ25vcmVfZXJyb3JzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCisgICAgICAgICAgICBCYXM9YzM9YWNjIHQ9YzM9YWJ4dD1mZC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtLCBlcnJvcnM9J2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fdXRmOF9iYXNlNjRfcmVjb3ZlcmFibGVfYmFkX0NURV9kYXRhKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ29ceEZGPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0sIGVycm9ycz0naWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc8OsYyB0w6t4dC5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZm9vPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X25vbl90ZXh0KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHt9CisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgWW05bmRYTWdaR0YwWVE9PQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3IgbWFpbnR5cGUgaW4gJ2F1ZGlvIGltYWdlIHZpZGVvIGFwcGxpY2F0aW9uJy5zcGxpdCgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobWFpbnR5cGU9bWFpbnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChtYWludHlwZSsnL2ZvbycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgYiJib2d1cyBkYXRhIikKKworICAgIGRlZiB0ZXN0X2dldF9ub25fdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFltOW5kWE1nWkdGMFlRPT0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZXJyb3JzPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X3JhaXNlc19vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorCisgICAgZGVmIHRlc3RfZ2V0X21lc3NhZ2VfcmZjODIyX2FuZF9leHRlcm5hbF9ib2R5KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2Uve30KKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIGFuIGV4YW1wbGUgbWVzc2FnZQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChzdWJ0eXBlKSkKKyAgICAgICAgICAgICAgICBzdWJfbXNnID0gcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJfbXNnLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KHN1Yl9tc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGV4YW1wbGUgbWVzc2FnZVxuIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl9tc2dbJ3RvJ10sICdmb29AZXhhbXBsZS5jb20nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX21zZ1snZnJvbSddLmFkZHJlc3Nlc1swXS51c2VybmFtZSwgJ2JhcicpCisKKyAgICBkZWYgdGVzdF9nZXRfbWVzc2FnZV9ub25fcmZjODIyX29yX2V4dGVybmFsX2JvZHlfeWllbGRzX2J5dGVzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3BhcnRpYWwKKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIFRoZSByZWFsIGJvZHkgaXMgaW4gYW5vdGhlciBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pWzoxMF0sIGInVG86IGZvb0BleCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9wbGFpbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2h0bWwoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gIjxwPlNpbXBsZSBtZXNzYWdlLjwvcD5cbiIKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBzdWJ0eXBlPSdodG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIDxwPlNpbXBsZSBtZXNzYWdlLjwvcD4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2NoYXJzZXRfbGF0aW5fMShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgY2hhcnNldD0nbGF0aW4tMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X3Nob3J0X2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiZXQgbMOgIGlsIGVzdCBtb250w6kgc3VyIG1vaSBldCBpbCBjb21tZW5jZSDDoCBtJ8OpdG8uXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKyAgICAgICAgICAgIGV0IGzDoCBpbCBlc3QgbW9udMOpIHN1ciBtb2kgZXQgaWwgY29tbWVuY2Ugw6AgbSfDqXRvLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2xvbmdfbGluZV9taW5pbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgICIgw6AgbSfDqXRvLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAnXG4nKjEwICsgKAorICAgICAgICAgICAgICAgICAgImonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiIKKyAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgIiDDoCBtJ8OpdG8uXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9tYXhpbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICDDocOgw6TDqcOoxJnDtsWRLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0XzExX2xpbmVzX21heGltYWxfbm9uX2FzY2lpX2hldXJpc3RpY3Moc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gJ1xuJyoxMCArICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgw6HDoMOkw6nDqMSZw7bFkS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAoIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEuXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIHc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09veEpuRAorICAgICAgICAgICAgdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09vCisgICAgICAgICAgICB4Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VEQKKyAgICAgICAgICAgIHFjT294Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZworICAgICAgICAgICAgdzZURHFjT294Sm5EdHNXUkxnbz0KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgIyBZZXMsIGl0IGNob29zZXMgIndyb25nIiBoZXJlLiAgSXQncyBhIGhldXJpc3RpYy4gIFNvIHRoaXMgcmVzdWx0CisgICAgICAgICMgY291bGQgY2hhbmdlIGlmIHdlIGNvbWUgdXAgd2l0aCBhIGJldHRlciBoZXVyaXN0aWMuCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gKCdcbicqMTAgKworICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCAiXG4iKjEwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkS5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPQorICAgICAgICAgICAgPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PQorICAgICAgICAgICAgPUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPQorICAgICAgICAgICAgPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PQorICAgICAgICAgICAgPUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PQorICAgICAgICAgICAgPTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPQorICAgICAgICAgICAgPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPQorICAgICAgICAgICAgPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PQorICAgICAgICAgICAgPUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PQorICAgICAgICAgICAgPTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PQorICAgICAgICAgICAgPUM1PTkxLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9ub25fYXNjaWlfd2l0aF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X2FuZF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkZvcndhcmRlZCBtZXNzYWdlIgorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudFsnVG8nXSA9ICdweXRob25Adml2YXJpdW0ub3JnJworICAgICAgICBjb250ZW50WydGcm9tJ10gPSAncG9saWNlQG1vbnR5Lm9yZycKKyAgICAgICAgY29udGVudFsnU3ViamVjdCddID0gImdldCBiYWNrIGluIHlvdXIgYm94IgorICAgICAgICBjb250ZW50LnNldF9jb250ZW50KCJPciBmYWNlIHRoZSBjb21meSBjaGFpci4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRm9yd2FyZGVkIG1lc3NhZ2UKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworICAgICAgICAgICAgVG86IHB5dGhvbkB2aXZhcml1bS5vcmcKKyAgICAgICAgICAgIEZyb206IHBvbGljZUBtb250eS5vcmcKKyAgICAgICAgICAgIFN1YmplY3Q6IGdldCBiYWNrIGluIHlvdXIgYm94CisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgT3IgZmFjZSB0aGUgY29tZnkgY2hhaXIuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBwYXlsb2FkID0gbS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGF5bG9hZCwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwYXlsb2FkKSwgc3RyKGNvbnRlbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobS5nZXRfY29udGVudCgpLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0uZ2V0X2NvbnRlbnQoKSksIHN0cihjb250ZW50KSkKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlX3dpdGhfbm9uX2FzY2lpX2FuZF9jb2VyY2lvbl90b183Yml0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkVzY2FwZSByZXBvcnQiCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50WydUbyddID0gJ3BvbGljZUBtb250eS5vcmcnCisgICAgICAgIGNvbnRlbnRbJ0Zyb20nXSA9ICd2aWN0aW1AbW9udHkub3JnJworICAgICAgICBjb250ZW50WydTdWJqZWN0J10gPSAiSGVscCIKKyAgICAgICAgY29udGVudC5zZXRfY29udGVudCgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisKKyAgICAgICAgICAgIGonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcml1bS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICAjIFRoZSBjaG9pY2Ugb2YgYmFzZTY0IGZvciB0aGUgYm9keSBlbmNvZGluZyBpcyBiZWNhdXNlIGdlbmVyYXRvcgorICAgICAgICAjIGRvZXNuJ3QgYm90aGVyIHdpdGggaGV1cmlzdGljcyBhbmQgdXNlcyBpdCB1bmNvbmRpdGlvbmFsbHkgZm9yIHV0Zi04CisgICAgICAgICMgdGV4dC4KKyAgICAgICAgIyBYWFg6IHRoZSBmaXJzdCBjdGUgc2hvdWxkIGJlIDdiaXQsIHRvby4uLnRoYXQncyBhIGdlbmVyYXRvciBidWcuCisgICAgICAgICMgWFhYOiB0aGUgbGluZSBsZW5ndGggaW4gdGhlIGJvZHkgYWxzbyBsb29rcyBsaWtlIGEgZ2VuZXJhdG9yIGJ1Zy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmFzX3N0cmluZyhtYXhoZWFkZXJsZW49c2VsZi5wb2xpY3kubWF4X2xpbmVfbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgYWlkaGFTQjFiaUJ3Y205aWJNT29iV1VnWkdVZ2NIbDBhRzl1TGlCcGJDQmxjM1FnYzI5eWRHa2daR1VnYzI5dUlIWnBkbUZ5YVhWdAorICAgICAgICAgICAgTGdvPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0uZ2V0X2NvbnRlbnQoKSwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtLmdldF9jb250ZW50KCkpLCBzdHIoY29udGVudCkpCisKKyAgICBkZWYgdGVzdF9zZXRfbWVzc2FnZV9pbnZhbGlkX2N0ZV9yYWlzZXMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgZm9yIGN0ZSBpbiAncXVvdGVkLXByaW50YWJsZSBiYXNlNjQnLnNwbGl0KCk6CisgICAgICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY3RlPWN0ZSwgc3VidHlwZT1zdWJ0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBhcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gc3RyKGFyLmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjdGUsIGV4YykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisgICAgICAgIHN1YnR5cGUgPSAnZXh0ZXJuYWwtYm9keScKKyAgICAgICAgZm9yIGN0ZSBpbiAnOGJpdCBiaW5hcnknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjdGU9Y3RlLCBzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYXI6CisgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICBleGMgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oY3RlLCBleGMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisKKyAgICBkZWYgdGVzdF9zZXRfaW1hZ2VfanBnKHNlbGYpOgorICAgICAgICBmb3IgY29udGVudCBpbiAoYiJib2d1cyBjb250ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShiImJvZ3VzIGNvbnRlbnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiJib2d1cyBjb250ZW50IikpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY29udGVudD1jb250ZW50KToKKyAgICAgICAgICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsICdpbWFnZScsICdqcGVnJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnCisgICAgICAgICAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCisgICAgICAgICAgICAgICAgICAgIFltOW5kWE1nWTI5dWRHVnVkQT09CisgICAgICAgICAgICAgICAgICAgICIiIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgY29udGVudCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hdWRpb19haWZfd2l0aF9xdW90ZWRfcHJpbnRhYmxlX2N0ZShzZWxmKToKKyAgICAgICAgIyBXaHkgeW91IHdvdWxkIHVzZSBxcCwgSSBkb24ndCBrbm93LCBidXQgaXQgaXMgdGVjaG5pY2FsbHkgc3VwcG9ydGVkLgorICAgICAgICAjIFhYWDogdGhlIGluY29ycmVjdCBsaW5lIGxlbmd0aCBpcyBiZWNhdXNlIGJpbmFzY2lpLmIyYV9xcCBkb2Vzbid0CisgICAgICAgICMgc3VwcG9ydCBhIGxpbmUgbGVuZ3RoIHBhcmFtZXRlciwgYnV0IHdlIG11c3QgdXNlIGl0IHRvIGdldCBuZXdsaW5lCisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgICMgWFhYOiB3aGF0IGFib3V0IHRoYXQgbGFjayBvZiB0YWlsaW5nIG5ld2xpbmU/ICBEbyB3ZSBhY3R1YWxseSBoYW5kbGUKKyAgICAgICAgIyB0aGF0IGNvcnJlY3RseSBpbiBhbGwgY2FzZXM/ICBUaGF0IGlzLCBpZiB0aGUgKnNvdXJjZSogaGFzIGFuCisgICAgICAgICMgdW5lbmNvZGVkIG5ld2xpbmUsIGRvIHdlIGFkZCBhbiBleHRyYSBuZXdsaW5lIHRvIHRoZSByZXR1cm5lZCBwYXlsb2FkCisgICAgICAgICMgb3Igbm90PyAgQW5kIGNhbiB0aGF0IGFjdHVhbGx5IGJlIGRpc2FtYmlndWF0ZWQgYmFzZWQgb24gdGhlIFJGQz8KKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAnYXVkaW8nLCAnYWlmJywgY3RlPSdxdW90ZWQtcHJpbnRhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogYXVkaW8vYWlmCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICBiPUZGZ3VzPTA5Y29uPTBBdD0wRGVudD0yMHp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eno9CisgICAgICAgICAgICB6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enoiIiIpLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF92aWRlb19tcGVnX3dpdGhfYmluYXJ5X2N0ZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAndmlkZW8nLCAnbXBlZycsIGN0ZT0nYmluYXJ5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdmlkZW8vbXBlZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSArCisgICAgICAgICAgICAjIFhYWDogdGhlIHNlY29uZCBcbiBvdWdodCB0byBiZSBhIFxyLCBidXQgZ2VuZXJhdG9yIGdldHMgaXQgd3JvbmcuCisgICAgICAgICAgICAjIFRISVMgTUVBTlMgV0UgRE9OJ1QgQUNUVUFMTFkgU1VQUE9SVCBUSEUgJ2JpbmFyeScgQ1RFLgorICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnQgenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6JyArCisgICAgICAgICAgICBiJ3p6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hcHBsaWNhdGlvbl9vY3RldF9zdHJlYW1fd2l0aF84Yml0X2N0ZShzZWxmKToKKyAgICAgICAgIyBJbiA4Yml0IG1vZGUsIHVuaXZlcmFsIGxpbmUgZW5kIGxvZ2ljIGFwcGxpZXMuICBJdCBpcyB1cCB0byB0aGUKKyAgICAgICAgIyBhcHBsaWNhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpbmVzIGFyZSBzaG9ydCBlbm91Z2g7IHdlIGRvbid0IGNoZWNrLgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9IGInYlx4RkZndXNcdGNvblxudFxyZW50XG4nICsgYid6Jyo2MCArIGInXG4nCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgJ2FwcGxpY2F0aW9uJywgJ29jdGV0LXN0cmVhbScsIGN0ZT0nOGJpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2FzY2lpJykgKworICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnRcbicgKworICAgICAgICAgICAgYid6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enpcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfZnJvbV9oZWFkZXJfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIGhlYWRlcl9mYWN0b3J5ID0gc2VsZi5wb2xpY3kuaGVhZGVyX2ZhY3RvcnkKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJUbyIsICJmb29AZXhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJGcm9tIiwgImZvb0BleGFtcGxlLmNvbSIpLAorICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoIlN1YmplY3QiLCAiSSdtIHRhbGtpbmcgdG8gbXlzZWxmLiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBJJ20gdGFsa2luZyB0byBteXNlbGYuCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIFNpbXBsZSBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX2Zyb21fc3RyaW5ncyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAiWC1Gb28tSGVhZGVyOiBmb28iLAorICAgICAgICAgICAgIlgtQmFyLUhlYWRlcjogYmFyIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBYLUZvby1IZWFkZXI6IGZvbworICAgICAgICAgICAgWC1CYXItSGVhZGVyOiBiYXIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworICAgICAgICAgICAgU2ltcGxlIG1lc3NhZ2UuCisgICAgICAgICAgICAiIiIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfd2l0aF9pbnZhbGlkX2R1cGxpY2F0ZV9zdHJpbmdfaGVhZGVyX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnQ29udGVudC1UeXBlJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGZvby9iYXIiLCkKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zZXRfaGVhZGVyc193aXRoX2ludmFsaWRfZHVwbGljYXRlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ0NvbnRlbnQtVHlwZScpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgICAgICBoZWFkZXJfZmFjdG9yeSgiQ29udGVudC1UeXBlIiwgIiBmb28vYmFyIiksKQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX3N0cmluZ19oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdhQGZhaXJseUBAaW52YWxpZEBhZGRyZXNzJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICdUbzogYUBmYWlybHlAQGludmFsaWRAYWRkcmVzcycsKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHByaW50KG1bJ1RvJ10uZGVmZWN0cykKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoJ1RvJywgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKSwpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcHJpbnQobVsnVG8nXS5kZWZlY3RzKQorCisgICAgZGVmIHRlc3Rfc2V0X2Rpc3Bvc2l0aW9uX2lubGluZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgdGVzdF9zZXRfZGlzcG9zaXRpb25fYXR0YWNobWVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdhdHRhY2htZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdhdHRhY2htZW50JykKKworICAgIGRlZiB0ZXN0X3NldF9kaXNwb3NpdGlvbl9mb28oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBkaXNwb3NpdGlvbj0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdmb28nKQorCisgICAgIyBYWFg6IHdlIHNob3VsZCBoYXZlIGEgJ3N0cmljdCcgcG9saWN5IG1vZGUgKGJleW9uZCByYWlzZV9vbl9kZWZlY3QpIHRoYXQKKyAgICAjIHdvdWxkIGNhdXNlICdmb28nIGFib3ZlIHRvIHJhaXNlLgorCisgICAgZGVmIHRlc3Rfc2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J2Jhci50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWU9ImJhci50eHQiJykKKworICAgIGRlZiB0ZXN0X3NldF9maWxlbmFtZV9hbmRfZGlzcG9zaXRpb25faW5saW5lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiYXIudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmU7IGZpbGVuYW1lPSJiYXIudHh0IicpCisKKyAgICBkZWYgdGVzdF9zZXRfbm9uX2FzY2lpX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J8OhYsOhcsOuLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsKKyAgICAgICAgICAgICBmaWxlbmFtZSo9dXRmLTgnJyVDMyVBMWIlQzMlQTFyJUMzJUFFLnR4dAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgZm9vCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGNvbnRlbnRfb2JqZWN0X3BhcmFtcyA9IHsKKyAgICAgICAgJ3RleHRfcGxhaW4nOiAoJ2NvbnRlbnQnLCAoKSksCisgICAgICAgICd0ZXh0X2h0bWwnOiAoJ2NvbnRlbnQnLCAoJ2h0bWwnLCkpLAorICAgICAgICAnYXBwbGljYXRpb25fb2N0ZXRfc3RyZWFtJzogKGInY29udGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhcHBsaWNhdGlvbicsICdvY3RldF9zdHJlYW0nKSksCisgICAgICAgICdpbWFnZV9qcGVnJzogKGInY29udGVudCcsICgnaW1hZ2UnLCAnanBlZycpKSwKKyAgICAgICAgJ21lc3NhZ2VfcmZjODIyJzogKG1lc3NhZ2UoKSwgKCkpLAorICAgICAgICAnbWVzc2FnZV9leHRlcm5hbF9ib2R5JzogKG1lc3NhZ2UoKSwgKCdleHRlcm5hbC1ib2R5JywpKSwKKyAgICAgICAgfQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2hlYWRlcl9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGhlYWRlcnM9KAorICAgICAgICAgICAgJ1RvOiBmb29AZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ0Zyb206IGJhckBzaW1wbGUubmV0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsndG8nXSwgJ2Zvb0BleGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnZnJvbSddLCAnYmFyQHNpbXBsZS5uZXQnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2Rpc3Bvc2l0aW9uX2lubGluZV9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfbm9uX2FzY2lpX2ZpbGVuYW1lX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiw6FyLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnaW5saW5lOyBmaWxlbmFtZT0iYsOhci50eHQiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9maWxlbmFtZSgpLCAiYsOhci50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXS5wYXJhbXNbJ2ZpbGVuYW1lJ10sICJiw6FyLnR4dCIpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfY2lkX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgY2lkPSdzb21lX3JhbmRvbV9zdHVmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1JRCddLCAnc29tZV9yYW5kb21fc3R1ZmYnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX3BhcmFtc19yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHBhcmFtcyA9IHsnZm9vJzogJ2LDoXInLCAnYWJjJzogJ3h5eid9CisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIHBhcmFtcz1wYXJhbXMpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdHIpOgorICAgICAgICAgICAgcGFyYW1zWydjaGFyc2V0J10gPSAndXRmLTgnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1UeXBlJ10ucGFyYW1zLCBwYXJhbXMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weQppbmRleCA1MWZlNzU2Li4yNmVkOTZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfZW1haWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2VtYWlsLnB5CkBAIC0yODEsMTUgKzI4MSw0MiBAQAogICAgICAgICBzZWxmLmFzc2VydEluKCdUTycsIG1zZykKIAogICAgIGRlZiB0ZXN0X2FzX3N0cmluZyhzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKICAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpIGFzIGZwOgogICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQotICAgICAgICBlcSh0ZXh0LCBzdHIobXNnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzdHIobXNnKSkKICAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfc3RyaW5nKHVuaXhmcm9tPVRydWUpCiAgICAgICAgIGxpbmVzID0gZnVsbHJlcHIuc3BsaXQoJ1xuJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzBdLnN0YXJ0c3dpdGgoJ0Zyb20gJykpCi0gICAgICAgIGVxKHRleHQsIE5MLmpvaW4obGluZXNbMTpdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBOTC5qb2luKGxpbmVzWzE6XSkpCisKKyAgICBkZWYgdGVzdF9hc19zdHJpbmdfcG9saWN5KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBuZXdwb2xpY3kgPSBtc2cucG9saWN5LmNsb25lKGxpbmVzZXA9J1xyXG4nKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19zdHJpbmcocG9saWN5PW5ld3BvbGljeSkKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzLCBwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bGxyZXByLCBzLmdldHZhbHVlKCkpCisKKyAgICBkZWYgdGVzdF9hc19ieXRlcyhzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpIGFzIGZwOgorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBieXRlcyhtc2cpKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19ieXRlcyh1bml4ZnJvbT1UcnVlKQorICAgICAgICBsaW5lcyA9IGZ1bGxyZXByLnNwbGl0KGInXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXNbMF0uc3RhcnRzd2l0aChiJ0Zyb20gJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidcbicuam9pbihsaW5lc1sxOl0pKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXNfcG9saWN5KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBuZXdwb2xpY3kgPSBtc2cucG9saWN5LmNsb25lKGxpbmVzZXA9J1xyXG4nKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19ieXRlcyhwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBzID0gQnl0ZXNJTygpCisgICAgICAgIGcgPSBCeXRlc0dlbmVyYXRvcihzLHBvbGljeT1uZXdwb2xpY3kpCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVsbHJlcHIsIHMuZ2V0dmFsdWUoKSkKIAogICAgICMgdGVzdF9oZWFkZXJyZWdpc3RyeS5UZXN0Q29udGVudFR5cGVIZWFkZXIuYmFkX3BhcmFtcwogICAgIGRlZiB0ZXN0X2JhZF9wYXJhbShzZWxmKToKQEAgLTc0Miw4ICs3NjksMTUgQEAKICAgICAgICAgIyB3aG9zZSBvdXRwdXQgY2hhcmFjdGVyIHNldCBpcyA3Yml0IGdldHMgYSB0cmFuc2Zlci1lbmNvZGluZwogICAgICAgICAjIG9mIDdiaXQuCiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBtc2cgPSBNSU1FVGV4dCgn5paHJywgX2NoYXJzZXQ9J2V1Yy1qcCcpCisgICAgICAgIG1zZyA9IE1JTUVUZXh0KCfmlodcbicsIF9jaGFyc2V0PSdldWMtanAnKQogICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJzdiaXQnKQorICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tMjAyMi1qcCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworICAgICAgICAgICAgXHgxYiRCSjhceDFiKEIKKyAgICAgICAgICAgICIiIikpCiAKICAgICBkZWYgdGVzdF9xcF9lbmNvZGVfbGF0aW4xKHNlbGYpOgogICAgICAgICBtc2cgPSBNSU1FVGV4dCgnXHhlMVx4ZjZcbicsICd0ZXh0JywgJ0lTTy04ODU5LTEnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5CmluZGV4IGFkYWYzZTguLjdkNjRhMzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9oZWFkZXJyZWdpc3RyeS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfaGVhZGVycmVnaXN0cnkucHkKQEAgLTY2MSw3ICs2NjEsNyBAQAogICAgICAgICAgICAgJ3RleHQvcGxhaW47IG5hbWU9ImFzY2lpX2lzX3RoZV9kZWZhdWx0IicpLAogCiAgICAgICAgICdyZmMyMjMxX2JhZF9jaGFyYWN0ZXJfaW5fY2hhcnNldF9wYXJhbWV0ZXJfdmFsdWUnOiAoCi0gICAgICAgICAgICAidGV4dC9wbGFpbjsgY2hhcnNldCo9YXNjaWknJ3V0Zi04JUUyJTgwJTlEIiwKKyAgICAgICAgICAgICJ0ZXh0L3BsYWluOyBjaGFyc2V0Kj1hc2NpaScndXRmLTglRjElRjIlRjMiLAogICAgICAgICAgICAgJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgJ3RleHQnLAogICAgICAgICAgICAgJ3BsYWluJywKQEAgLTY2OSw2ICs2NjksMTggQEAKICAgICAgICAgICAgIFtlcnJvcnMuVW5kZWNvZGFibGVCeXRlc0RlZmVjdF0sCiAgICAgICAgICAgICAndGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLThcdUZGRkRcdUZGRkRcdUZGRkQiJyksCiAKKyAgICAgICAgJ3JmYzIyMzFfdXRmXzhfaW5fc3VwcG9zZWRseV9hc2NpaV9jaGFyc2V0X3BhcmFtZXRlcl92YWx1ZSc6ICgKKyAgICAgICAgICAgICJ0ZXh0L3BsYWluOyBjaGFyc2V0Kj1hc2NpaScndXRmLTglRTIlODAlOUQiLAorICAgICAgICAgICAgJ3RleHQvcGxhaW4nLAorICAgICAgICAgICAgJ3RleHQnLAorICAgICAgICAgICAgJ3BsYWluJywKKyAgICAgICAgICAgIHsnY2hhcnNldCc6ICd1dGYtOOKAnSd9LAorICAgICAgICAgICAgW2Vycm9ycy5VbmRlY29kYWJsZUJ5dGVzRGVmZWN0XSwKKyAgICAgICAgICAgICd0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOOKAnSInLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICMgWFhYOiBpZiB0aGUgYWJvdmUgd2VyZSAqcmUqZm9sZGVkLCBpdCB3b3VsZCBnZXQgdGFnZ2VkIGFzIHV0Zi04CisgICAgICAgICAgICAjIGluc3RlYWQgb2YgYXNjaWkgaW4gdGhlIHBhcmFtLCBzaW5jZSBpdCBub3cgY29udGFpbnMgbm9uLUFTQ0lJLgorCiAgICAgICAgICdyZmMyMjMxX2VuY29kZWRfdGhlbl91bmVuY29kZWRfc2VnbWVudHMnOiAoCiAgICAgICAgICAgICAoJ2FwcGxpY2F0aW9uL3gtZm9vOycKICAgICAgICAgICAgICAgICAnXHRuYW1lKjAqPSJ1cy1hc2NpaVwnZW4tdXNcJ015IjsnCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9tZXNzYWdlLnB5CmluZGV4IDhjYzNmODAuLmM3NjFjNjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9tZXNzYWdlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9tZXNzYWdlLnB5CkBAIC0xLDYgKzEsMTMgQEAKIGltcG9ydCB1bml0dGVzdAotZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Ci1mcm9tIHRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZQoraW1wb3J0IHRleHR3cmFwCitmcm9tIGVtYWlsIGltcG9ydCBwb2xpY3ksIG1lc3NhZ2VfZnJvbV9zdHJpbmcKK2Zyb20gZW1haWwubWVzc2FnZSBpbXBvcnQgRW1haWxNZXNzYWdlLCBNSU1FUGFydAorZnJvbSB0ZXN0LnRlc3RfZW1haWwgaW1wb3J0IFRlc3RFbWFpbEJhc2UsIHBhcmFtZXRlcml6ZQorCisKKyMgSGVscGVyLgorZGVmIGZpcnN0KGl0ZXJhYmxlKToKKyAgICByZXR1cm4gbmV4dChmaWx0ZXIobGFtYmRhIHg6IHggaXMgbm90IE5vbmUsIGl0ZXJhYmxlKSwgTm9uZSkKIAogCiBjbGFzcyBUZXN0KFRlc3RFbWFpbEJhc2UpOgpAQCAtMTMsNiArMjAsNzUzIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBtWydUbyddID0gJ3h5ekBhYmMnCiAKKyAgICBkZWYgdGVzdF9yZmMyMDQzX2F1dG9fZGVjb2RlZF9hbmRfZW1haWxtZXNzYWdlX3VzZWQoc2VsZik6CisgICAgICAgIG0gPSBtZXNzYWdlX2Zyb21fc3RyaW5nKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBTdWJqZWN0OiBBeW9ucyBhc3BlcmdlcyBwb3VyIGxlID0/dXRmLTg/cT9kPUMzPUE5amV1bmVyPz0KKyAgICAgICAgICAgIEZyb206ID0/dXRmLTg/cT9QZXA9QzM9QTk/PSBMZSBQZXcgPHBlcGVAZXhhbXBsZS5jb20+CisgICAgICAgICAgICBUbzogIlBlbmVsb3BlIFB1c3N5Y2F0IiA8InBlbmVsb3BlQGV4YW1wbGUuY29tIj4KKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorCisgICAgICAgICAgICBzYW1wbGUgdGV4dAorICAgICAgICAgICAgIiIiKSwgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ3N1YmplY3QnXSwgIkF5b25zIGFzcGVyZ2VzIHBvdXIgbGUgZMOpamV1bmVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydmcm9tJ10sICJQZXDDqSBMZSBQZXcgPHBlcGVAZXhhbXBsZS5jb20+IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0sIEVtYWlsTWVzc2FnZSkKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0RW1haWxNZXNzYWdlQmFzZToKKworICAgIHBvbGljeSA9IHBvbGljeS5kZWZhdWx0CisKKyAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIHRyaXBsZSAocmVsYXRlZCwgaHRtbCwgcGxhaW4pIG9mIGluZGljZXMgaW50byB0aGUKKyAgICAjIGxpc3QgcmV0dXJuZWQgYnkgJ3dhbGsnIGNhbGxlZCBvbiBhIE1lc3NhZ2UgY29uc3RydWN0ZWQgZnJvbSB0aGUgdGhpcmQuCisgICAgIyBUaGUgaW5kaWNlcyBpbmRpY2F0ZSB3aGljaCBwYXJ0IHNob3VsZCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyBwYXJ0LXR5cGUKKyAgICAjIHdoZW4gcGFzc2VkIHRvIGdldF9ib2R5IChpZTogdGhlICJmaXJzdCIgcGFydCBvZiB0aGF0IHR5cGUgaW4gdGhlCisgICAgIyBtZXNzYWdlKS4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBsaXN0IG9mIGluZGljZXMgaW50byB0aGUgJ3dhbGsnIGxpc3QKKyAgICAjIG9mIHRoZSBhdHRhY2htZW50cyB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBieSBhIGNhbGwgdG8KKyAgICAjICdpdGVyX2F0dGFjaG1lbnRzJy4gIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2YgaW5kaWNlcyBpbnRvICd3YWxrJworICAgICMgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgYnkgYSBjYWxsIHRvICdpdGVyX3BhcnRzJy4gIE5vdGUgdGhhdCB0aGUgZmlyc3QKKyAgICAjIGl0ZW0gcmV0dXJuZWQgYnkgJ3dhbGsnIGlzIHRoZSBNZXNzYWdlIGl0c2VsZi4KKworICAgIG1lc3NhZ2VfcGFyYW1zID0geworCisgICAgICAgICdlbXB0eV9tZXNzYWdlJzogKAorICAgICAgICAgICAgKE5vbmUsIE5vbmUsIDApLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICIiKSwKKworICAgICAgICAnbm9uX21pbWVfcGxhaW4nOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgdGV4dCBib2R5CisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21pbWVfbm9uX3RleHQnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworCisgICAgICAgICAgICAgICAgYm9ndXMgYm9keS4KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAncGxhaW5faHRtbF9hbHRlcm5hdGl2ZSc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIHByZWFtYmxlCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAncGxhaW5faHRtbF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIHByZWFtYmxlCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdwbGFpbl9odG1sX2F0dGFjaG1lbnRfbWl4ZWQnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMSksCisgICAgICAgICAgICAoMiwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdodG1sX3RleHRfYXR0YWNobWVudF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCBOb25lKSwKKyAgICAgICAgICAgICgxLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBBdFRhQ2htZW50CisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ2h0bWxfdGV4dF9hdHRhY2htZW50X2lubGluZV9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogSW5MaW5lCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBSRkMgMjM4NworICAgICAgICAncmVsYXRlZCc6ICgKKyAgICAgICAgICAgICgwLCAxLCBOb25lKSwKKyAgICAgICAgICAgICgyLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT0iOyB0eXBlPXRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMT4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGRhdGEKKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAjIFRoaXMgbWVzc2FnZSBzdHJ1Y3R1cmUgd2lsbCBwcm9iYWJseSBuZXZlciBiZSBzZWVuIGluIHRoZSB3aWxkLCBidXQKKyAgICAgICAgIyBpdCBwcm92ZXMgd2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0ZXh0IHBhcnRzIGJhc2VkIG9uICdzdGFydCcuICBUaGUKKyAgICAgICAgIyBjb250ZW50IHdvdWxkIG5vdCwgb2YgY291cnNlLCBhY3R1YWxseSB3b3JrIDopCisgICAgICAgICdyZWxhdGVkX3dpdGhfc3RhcnQnOiAoCisgICAgICAgICAgICAoMCwgMiwgTm9uZSksCisgICAgICAgICAgICAoMSwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iPT09IjsgdHlwZT10ZXh0L2h0bWw7CisgICAgICAgICAgICAgICAgIHN0YXJ0PSI8Ym9keT4iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGluY2x1ZGU+CisKKyAgICAgICAgICAgICAgICB1c2VsZXNzIHRleHQKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8Ym9keT4KKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorICAgICAgICAgICAgICAgIDwhLS0jaW5jbHVkZSBmaWxlPSI8aW5jbHVkZT4iLS0+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKworICAgICAgICAnbWl4ZWRfYWx0ZXJuYXRpdmVfcGxhaW5fcmVsYXRlZCc6ICgKKyAgICAgICAgICAgICgzLCA0LCAyKSwKKyAgICAgICAgICAgICg2LCA3KSwKKyAgICAgICAgICAgICgxLCA2LCA3KSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSJfX18iCisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW1hZ2UxQGNpZD4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKy0tCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBBdHRhY0htZW5UCisKKyAgICAgICAgICAgICAgICBhbm90aGVyIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBUaGlzIHN0cnVjdHVyZSBzdWdnZXN0ZWQgYnkgU3RlcGhlbiBKLiBUdXJuYnVsbC4uLm1heSBub3QgZXhpc3QvYmUKKyAgICAgICAgIyBzdXBwb3J0ZWQgaW4gdGhlIHdpbGQsIGJ1dCB3ZSB3YW50IHRvIHN1cHBvcnQgaXQuCisgICAgICAgICdtaXhlZF9yZWxhdGVkX2FsdGVybmF0aXZlX3BsYWluX2h0bWwnOiAoCisgICAgICAgICAgICAoMSwgNCwgMyksCisgICAgICAgICAgICAoNiwgNyksCisgICAgICAgICAgICAoMSwgNiwgNyksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Il9fXyIKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMUBjaWQ+CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS0rKystLQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYW5vdGhlciBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICMgU2FtZSB0aGluZywgYnV0IHByb3Zpbmcgd2Ugb25seSBsb29rIGF0IHRoZSByb290IHBhcnQsIHdoaWNoIGlzIHRoZQorICAgICAgICAjIGZpcnN0IG9uZSBpZiB0aGVyZSBpc24ndCBhbnkgc3RhcnQgcGFyYW1ldGVyLiAgVGhhdCBpcywgdGhpcyBpcyBhCisgICAgICAgICMgYnJva2VuIHJlbGF0ZWQuCisgICAgICAgICdtaXhlZF9yZWxhdGVkX2FsdGVybmF0aXZlX3BsYWluX2h0bWxfd3Jvbmdfb3JkZXInOiAoCisgICAgICAgICAgICAoMSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAoNiwgNyksCisgICAgICAgICAgICAoMSwgNiwgNyksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxpbWFnZTFAY2lkPgorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSJfX18iCisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS1fX18tLQorCisgICAgICAgICAgICAgICAgLS0rKystLQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYW5vdGhlciBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdtZXNzYWdlX3JmYzgyMic6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKworICAgICAgICAgICAgICAgIFRvOiBiYXJAZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBGcm9tOiByb2JvdEBleGFtcC5jb20KKworICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBtZXNzYWdlIGJvZHkuCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21peGVkX3RleHRfbWVzc2FnZV9yZmM4MjInOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMSksCisgICAgICAgICAgICAoMiwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBZb3VyIG1lc3NhZ2UgaGFzIGJvdW5jZWQsIHNlci4KKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorCisgICAgICAgICAgICAgICAgVG86IGJhckBleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIEZyb206IHJvYm90QGV4YW1wLmNvbQorCisgICAgICAgICAgICAgICAgdGhpcyBpcyBhIG1lc3NhZ2UgYm9keS4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAgfQorCisgICAgZGVmIG1lc3NhZ2VfYXNfZ2V0X2JvZHkoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbTm9uZSBpZiBuIGlzIE5vbmUgZWxzZSBhbGxwYXJ0c1tuXSBmb3IgbiBpbiBib2R5X3BhcnRzXQorICAgICAgICByZWxhdGVkID0gMDsgaHRtbCA9IDE7IHBsYWluID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkoKSwgZmlyc3QoZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ2h0bWwnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbcmVsYXRlZDpodG1sKzFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncmVsYXRlZCcsICdwbGFpbicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChbZXhwZWN0ZWRbcmVsYXRlZF0sIGV4cGVjdGVkW3BsYWluXV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3BsYWluJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkW2h0bWw6cGxhaW4rMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydyZWxhdGVkJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkW3JlbGF0ZWRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydodG1sJ10pLCBleHBlY3RlZFtodG1sXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PVsncGxhaW4nXSksIGV4cGVjdGVkW3BsYWluXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAnaHRtbCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZFtwbGFpbjpodG1sLTE6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAncmVsYXRlZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChbZXhwZWN0ZWRbcGxhaW5dLCBleHBlY3RlZFtyZWxhdGVkXV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3JlbGF0ZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbaHRtbDo6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAnaHRtbCcsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkWzo6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgnaHRtbCcsICdwbGFpbicsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KFtleHBlY3RlZFtodG1sXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRbcGxhaW5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFtyZWxhdGVkXV0pKQorCisgICAgZGVmIG1lc3NhZ2VfYXNfaXRlcl9hdHRhY2htZW50KHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBhbGxwYXJ0cyA9IGxpc3QobS53YWxrKCkpCisgICAgICAgIGF0dGFjaG1lbnRzID0gW2FsbHBhcnRzW25dIGZvciBuIGluIGF0dGFjaG1lbnRzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVyX2F0dGFjaG1lbnRzKCkpLCBhdHRhY2htZW50cykKKworICAgIGRlZiBtZXNzYWdlX2FzX2l0ZXJfcGFydHMoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgcGFydHMgPSBbYWxscGFydHNbbl0gZm9yIG4gaW4gcGFydHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLml0ZXJfcGFydHMoKSksIHBhcnRzKQorCisgICAgY2xhc3MgX1Rlc3RDb250ZW50TWFuYWdlcjoKKyAgICAgICAgZGVmIGdldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZywgYXJncywga3cKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgICAgIHNlbGYua3cgPSBrdworCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfd2l0aF9jbShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSksIChtLCAoKSwge30pKQorICAgICAgICBtc2csIGFyZ3MsIGt3ID0gbS5nZXRfY29udGVudCgnZm9vJywgY29udGVudF9tYW5hZ2VyPWNtLCBiYXI9MSwgaz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCAoJ2ZvbycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrdywgZGljdChiYXI9MSwgaz0yKSkKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X2RlZmF1bHRfY21fY29tZXNfZnJvbV9wb2xpY3koc2VsZik6CisgICAgICAgIHAgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShjb250ZW50X21hbmFnZXI9c2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkpCisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnLCBwb2xpY3k9cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIChtLCAoKSwge30pKQorICAgICAgICBtc2csIGFyZ3MsIGt3ID0gbS5nZXRfY29udGVudCgnZm9vJywgYmFyPTEsIGs9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgKCdmb28nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa3csIGRpY3QoYmFyPTEsIGs9MikpCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF93aXRoX2NtKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJykKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5tc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uYXJncywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ua3csIHt9KQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBjb250ZW50X21hbmFnZXI9Y20sIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfZGVmYXVsdF9jbV9jb21lc19mcm9tX3BvbGljeShzZWxmKToKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBwID0gcG9saWN5LmRlZmF1bHQuY2xvbmUoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJywgcG9saWN5PXApCisgICAgICAgIG0uc2V0X2NvbnRlbnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5hcmdzLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5rdywge30pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgIyBvdXRjb21lIGlzIHdoZXRoZXIgeHh4X21ldGhvZCBzaG91bGQgcmFpc2UgVmFsdWVFcnJvciBlcnJvciB3aGVuIGNhbGxlZAorICAgICMgb24gbXVsdGlwYXJ0L3N1YnR5cGUuICBCbGFuayBvdXRjb21lIG1lYW5zIGl0IGRlcGVuZHMgb24geHh4IChhZGQKKyAgICAjIHN1Y2NlZWRzLCBtYWtlIHJhaXNlcykuICBOb3RlOiAnbm9uZScgbWVhbnMgdGhlcmUgYXJlIGNvbnRlbnQtdHlwZQorICAgICMgaGVhZGVycyBidXQgcGF5bG9hZCBpcyBOb25lLi4udGhpcyBoYXBwZW5pbmcgaW4gcHJhY3RpY2Ugd291bGQgYmUgdmVyeQorICAgICMgdW51c3VhbCwgc28gdHJlYXRpbmcgaXQgYXMgaWYgdGhlcmUgd2VyZSBjb250ZW50IHNlZW1zIHJlYXNvbmFibGUuCisgICAgIyAgICBtZXRob2QgICAgICAgICAgc3VidHlwZSAgICAgICAgICAgb3V0Y29tZQorICAgIHN1YnR5cGVfcGFyYW1zID0gKAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdub19jb250ZW50JywgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdub25lJywgICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdwbGFpbicsICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdyZWxhdGVkJywgICAgICAgICcnKSwKKyAgICAgICAgKCdyZWxhdGVkJywgICAgICAnYWx0ZXJuYXRpdmUnLCAgICAncmFpc2VzJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ21peGVkJywgICAgICAgICAgJ3JhaXNlcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdub19jb250ZW50JywgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdub25lJywgICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdwbGFpbicsICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdyZWxhdGVkJywgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdhbHRlcm5hdGl2ZScsICAgICcnKSwKKyAgICAgICAgKCdhbHRlcm5hdGl2ZScsICAnbWl4ZWQnLCAgICAgICAgICAncmFpc2VzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ25vX2NvbnRlbnQnLCAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ25vbmUnLCAgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ3BsYWluJywgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ3JlbGF0ZWQnLCAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ2FsdGVybmF0aXZlJywgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ21peGVkJywgICAgICAgICAgJycpLAorICAgICAgICApCisKKyAgICBkZWYgX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc2VsZiwgc3VidHlwZSk6CisgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UoKQorICAgICAgICBwYXlsb2FkID0gTm9uZQorICAgICAgICBtc2dfaGVhZGVycyA9ICBbCisgICAgICAgICAgICAoJ1RvJywgJ2Zvb0BiYXIuY29tJyksCisgICAgICAgICAgICAoJ0Zyb20nLCAnYmFyQGZvby5jb20nKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgaWYgc3VidHlwZSAhPSAnbm9fY29udGVudCc6CisgICAgICAgICAgICAoJ2NvbnRlbnQtc2hhZG93JywgJ0xvZ3J1cycpLAorICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdYLVJhbmRvbS1IZWFkZXInLCAnQ29yd2luJykpCisgICAgICAgIGlmIHN1YnR5cGUgPT0gJ3RleHQnOgorICAgICAgICAgICAgcGF5bG9hZCA9ICcnCisgICAgICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpKQorICAgICAgICAgICAgbS5zZXRfcGF5bG9hZCgnJykKKyAgICAgICAgZWxpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHBheWxvYWQgPSBbXQorICAgICAgICAgICAgbXNnX2hlYWRlcnMuYXBwZW5kKCgnQ29udGVudC1UeXBlJywgJ211bHRpcGFydC8nICsgc3VidHlwZSkpCisgICAgICAgIG1zZ19oZWFkZXJzLmFwcGVuZCgoJ1gtVHJ1bXAnLCAnUmFuZG9tJykpCisgICAgICAgIG0uc2V0X3BheWxvYWQocGF5bG9hZCkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgbVtuYW1lXSA9IHZhbHVlCisgICAgICAgIHJldHVybiBtLCBtc2dfaGVhZGVycywgcGF5bG9hZAorCisgICAgZGVmIF9jaGVja19kaXNhbGxvd2VkX3N1YnR5cGVfcmFpc2VzKHNlbGYsIG0sIG1ldGhvZF9uYW1lLCBzdWJ0eXBlLCBtZXRob2QpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGFyOgorICAgICAgICAgICAgZ2V0YXR0cihtLCBtZXRob2QpKCkKKyAgICAgICAgZXhjX3RleHQgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEluKHN1YnR5cGUsIGV4Y190ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEluKG1ldGhvZF9uYW1lLCBleGNfdGV4dCkKKworICAgIGRlZiBfY2hlY2tfbWFrZV9tdWx0aXBhcnQoc2VsZiwgbSwgbXNnX2hlYWRlcnMsIHBheWxvYWQpOgorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgaWYgbm90IG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVtuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtKSwgY291bnQrMSkgIyArMSBmb3IgbmV3IENvbnRlbnQtVHlwZQorICAgICAgICBwYXJ0ID0gbmV4dChtLml0ZXJfcGFydHMoKSkKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBtc2dfaGVhZGVyczoKKyAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydFtuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXJ0KSwgY291bnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydC5nZXRfcGF5bG9hZCgpLCBwYXlsb2FkKQorCisgICAgZGVmIHN1YnR5cGVfYXNfbWFrZShzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCA9IHNlbGYuX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc3VidHlwZSkKKyAgICAgICAgbWFrZV9tZXRob2QgPSAnbWFrZV8nICsgbWV0aG9kCisgICAgICAgIGlmIG91dGNvbWUgaW4gKCcnLCAncmFpc2VzJyk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19kaXNhbGxvd2VkX3N1YnR5cGVfcmFpc2VzKG0sIG1ldGhvZCwgc3VidHlwZSwgbWFrZV9tZXRob2QpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZ2V0YXR0cihtLCBtYWtlX21ldGhvZCkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgJ211bHRpcGFydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9zdWJ0eXBlKCksIG1ldGhvZCkKKyAgICAgICAgaWYgc3VidHlwZSA9PSAnbm9fY29udGVudCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtLmdldF9wYXlsb2FkKCkpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19oZWFkZXJzICsgWygnQ29udGVudC1UeXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXBhcnQvJyttZXRob2QpXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgICAgICBzZWxmLl9jaGVja19tYWtlX211bHRpcGFydChtLCBtc2dfaGVhZGVycywgcGF5bG9hZCkKKworICAgIGRlZiBzdWJ0eXBlX2FzX21ha2Vfd2l0aF9ib3VuZGFyeShzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICAjIERvaW5nIGFsbCB2YXJpYXRpb24gaXMgYSBiaXQgb2Ygb3ZlcmtpbGwuLi4KKyAgICAgICAgbSA9IHNlbGYubWVzc2FnZSgpCisgICAgICAgIGlmIG91dGNvbWUgaW4gKCcnLCAncmFpc2VzJyk6CisgICAgICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICdtdWx0aXBhcnQvJyArIHN1YnR5cGUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgZ2V0YXR0cihtLCAnbWFrZV8nICsgbWV0aG9kKSgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc3VidHlwZSA9PSAncGxhaW4nOgorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgZWxpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC8nICsgc3VidHlwZQorICAgICAgICBnZXRhdHRyKG0sICdtYWtlXycgKyBtZXRob2QpKGJvdW5kYXJ5PSJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib3VuZGFyeSgpLCAnYWJjJykKKworICAgIGRlZiB0ZXN0X3BvbGljeV9vbl9wYXJ0X21hZGVfYnlfbWFrZV9jb21lc19mcm9tX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGZvciBtZXRob2QgaW4gKCdtYWtlX3JlbGF0ZWQnLCAnbWFrZV9hbHRlcm5hdGl2ZScsICdtYWtlX21peGVkJyk6CisgICAgICAgICAgICBtID0gc2VsZi5tZXNzYWdlKHBvbGljeT1zZWxmLnBvbGljeS5jbG9uZShjb250ZW50X21hbmFnZXI9J2ZvbycpKQorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgICAgIGdldGF0dHIobSwgbWV0aG9kKSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoMCkucG9saWN5LmNvbnRlbnRfbWFuYWdlciwgJ2ZvbycpCisKKyAgICBjbGFzcyBfVGVzdFNldENvbnRlbnRNYW5hZ2VyOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCBjb250ZW50LCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW4nCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQoY29udGVudCkKKworICAgIGRlZiBzdWJ0eXBlX2FzX2FkZChzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCA9IHNlbGYuX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc3VidHlwZSkKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0U2V0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBhZGRfbWV0aG9kID0gJ2FkZF9hdHRhY2htZW50JyBpZiBtZXRob2Q9PSdtaXhlZCcgZWxzZSAnYWRkXycgKyBtZXRob2QKKyAgICAgICAgaWYgb3V0Y29tZSA9PSAncmFpc2VzJzoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Rpc2FsbG93ZWRfc3VidHlwZV9yYWlzZXMobSwgbWV0aG9kLCBzdWJ0eXBlLCBhZGRfbWV0aG9kKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGdldGF0dHIobSwgYWRkX21ldGhvZCkoJ3Rlc3QnLCBjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9tYWludHlwZSgpLCAnbXVsdGlwYXJ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50X3N1YnR5cGUoKSwgbWV0aG9kKQorICAgICAgICBpZiBtZXRob2QgPT0gc3VidHlwZSBvciBzdWJ0eXBlID09ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbXNnX2hlYWRlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtW25hbWVdLCB2YWx1ZSkKKyAgICAgICAgICAgIHBhcnQgPSBtLmdldF9wYXlsb2FkKClbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgICAgICBzZWxmLl9jaGVja19tYWtlX211bHRpcGFydChtLCBtc2dfaGVhZGVycywgcGF5bG9hZCkKKyAgICAgICAgICAgIHBhcnQgPSBtLmdldF9wYXlsb2FkKClbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0LmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnQuZ2V0X3BheWxvYWQoKSwgJ3Rlc3QnKQorICAgICAgICBpZiBtZXRob2Q9PSdtaXhlZCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2F0dGFjaG1lbnQnKQorICAgICAgICBlbGlmIG1ldGhvZD09J3JlbGF0ZWQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBPdGhlcndpc2Ugd2UgZG9uJ3QgZ3Vlc3MuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10pCisKKyAgICBjbGFzcyBfVGVzdFNldFJhaXNpbmdDb250ZW50TWFuYWdlcjoKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgY29udGVudCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCd0ZXN0JykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29udGVudF9tYW5hZ2VyX2Zvcl9hZGRfY29tZXNfZnJvbV9wb2xpY3koc2VsZik6CisgICAgICAgIGNtID0gc2VsZi5fVGVzdFNldFJhaXNpbmdDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UocG9saWN5PXNlbGYucG9saWN5LmNsb25lKGNvbnRlbnRfbWFuYWdlcj1jbSkpCisgICAgICAgIGZvciBtZXRob2QgaW4gKCdhZGRfcmVsYXRlZCcsICdhZGRfYWx0ZXJuYXRpdmUnLCAnYWRkX2F0dGFjaG1lbnQnKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBhcjoKKyAgICAgICAgICAgICAgICBnZXRhdHRyKG0sIG1ldGhvZCkoJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhci5leGNlcHRpb24pLCAndGVzdCcpCisKKyAgICBkZWYgbWVzc2FnZV9hc19jbGVhcihzZWxmLCBib2R5X3BhcnRzLCBhdHRhY2htZW50cywgcGFydHMsIG1zZyk6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKG1zZykKKyAgICAgICAgbS5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0pLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVtcygpKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgW10pCisKKyAgICBkZWYgbWVzc2FnZV9hc19jbGVhcl9jb250ZW50KHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBleHBlY3RlZF9oZWFkZXJzID0gW2ggZm9yIGggaW4gbS5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaC5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyldCisgICAgICAgIG0uY2xlYXJfY29udGVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLmtleXMoKSksIGV4cGVjdGVkX2hlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgW10pCisKKyAgICBkZWYgdGVzdF9pc19hdHRhY2htZW50KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLmlzX2F0dGFjaG1lbnQpCisgICAgICAgIG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9ICdpbmxpbmUnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ0F0VGFjaE1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KQorCisKKworY2xhc3MgVGVzdEVtYWlsTWVzc2FnZShUZXN0RW1haWxNZXNzYWdlQmFzZSwgVGVzdEVtYWlsQmFzZSk6CisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfYWRkc19NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ01JTUUtVmVyc2lvbiddLCAnMS4wJykKKworICAgIGNsYXNzIF9NSU1FX1ZlcnNpb25fYWRkaW5nX0NNOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBtc2dbJ01JTUUtVmVyc2lvbiddID0gJzEuMCcKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2RvZXNfbm90X2R1cGxpY2F0ZV9NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX01JTUVfVmVyc2lvbl9hZGRpbmdfQ00oKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydNSU1FLVZlcnNpb24nXSwgJzEuMCcpCisKKworY2xhc3MgVGVzdE1JTUVQYXJ0KFRlc3RFbWFpbE1lc3NhZ2VCYXNlLCBUZXN0RW1haWxCYXNlKToKKyAgICAjIERvaW5nIHRoZSBmdWxsIHRlc3QgcnVuIGhlcmUgbWF5IHNlZW0gYSBiaXQgcmVkdW5kYW50LCBzaW5jZSB0aGUgdHdvCisgICAgIyBjbGFzc2VzIGFyZSBhbG1vc3QgaWRlbnRpY2FsLiAgQnV0IHdoYXQgaWYgdGhleSBkcmlmdCBhcGFydD8gIFNvIHdlIGRvCisgICAgIyB0aGUgZnVsbCB0ZXN0cyBzbyB0aGF0IGFueSBmdXR1cmUgZHJpZnQgZG9lc24ndCBpbnRyb2R1Y2UgYnVncy4KKyAgICBtZXNzYWdlID0gTUlNRVBhcnQKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2RvZXNfbm90X2FkZF9NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weQppbmRleCA5ODNiZDQ5Li4wNmFkNWYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9wb2xpY3kucHkKQEAgLTMwLDYgKzMwLDcgQEAKICAgICAgICAgJ3JhaXNlX29uX2RlZmVjdCc6ICAgICAgICAgIEZhbHNlLAogICAgICAgICAnaGVhZGVyX2ZhY3RvcnknOiAgICAgICAgICAgZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmhlYWRlcl9mYWN0b3J5LAogICAgICAgICAncmVmb2xkX3NvdXJjZSc6ICAgICAgICAgICAgJ2xvbmcnLAorICAgICAgICAnY29udGVudF9tYW5hZ2VyJzogICAgICAgICAgZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmNvbnRlbnRfbWFuYWdlciwKICAgICAgICAgfSkKIAogICAgICMgRm9yIGVhY2ggcG9saWN5IHVuZGVyIHRlc3QsIHdlIGdpdmUgaGVyZSB3aGF0IHdlIGV4cGVjdCB0aGUgZGVmYXVsdHMgdG8KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKaW5kZXggNTQ0YjFiYi4uMTljZjY0ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKQEAgLTI3LDcgKzI3LDcgQEAKICMgUHJldmVudCB0aGlzIHRlc3QgZnJvbSBydW5uaW5nIGluIHRoZSBQeXRob24gZGlzdHJvCiB0cnk6CiAgICAgb3BlbmZpbGUoJ2NyaXNwaW4tdG9ydHVyZS50eHQnKQotZXhjZXB0IElPRXJyb3I6CitleGNlcHQgT1NFcnJvcjoKICAgICByYWlzZSBUZXN0U2tpcHBlZAogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW5zdXJlcGlwLnB5IGIvTGliL3Rlc3QvdGVzdF9lbnN1cmVwaXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0NGE2NQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZW5zdXJlcGlwLnB5CkBAIC0wLDAgKzEsMzQzIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCitpbXBvcnQgdGVzdC5zdXBwb3J0CitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHN5cworCitpbXBvcnQgZW5zdXJlcGlwCitpbXBvcnQgZW5zdXJlcGlwLl91bmluc3RhbGwKKworIyBwaXAgY3VycmVudGx5IHJlcXVpcmVzIHNzbCBzdXBwb3J0LCBzbyB3ZSBlbnN1cmUgd2UgaGFuZGxlCisjIGl0IGJlaW5nIG1pc3NpbmcgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTc0NCkKK2Vuc3VyZXBpcF9ub19zc2wgPSB0ZXN0LnN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgiZW5zdXJlcGlwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja2VkPVsic3NsIl0pCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGRlZiByZXF1aXJlc191c2FibGVfcGlwKGYpOgorICAgICAgICBkZWNvID0gdW5pdHRlc3Quc2tpcChlbnN1cmVwaXAuX01JU1NJTkdfU1NMX01FU1NBR0UpCisgICAgICAgIHJldHVybiBkZWNvKGYpCitlbHNlOgorICAgIGRlZiByZXF1aXJlc191c2FibGVfcGlwKGYpOgorICAgICAgICByZXR1cm4gZgorCitjbGFzcyBUZXN0RW5zdXJlUGlwVmVyc2lvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9yZXR1cm5zX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5zdXJlcGlwLl9QSVBfVkVSU0lPTiwgZW5zdXJlcGlwLnZlcnNpb24oKSkKKworY2xhc3MgRW5zdXJlcGlwTWl4aW46CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHJ1bl9waXBfcGF0Y2ggPSB1bml0dGVzdC5tb2NrLnBhdGNoKCJlbnN1cmVwaXAuX3J1bl9waXAiKQorICAgICAgICBzZWxmLnJ1bl9waXAgPSBydW5fcGlwX3BhdGNoLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJ1bl9waXBfcGF0Y2guc3RvcCkKKworICAgICAgICAjIEF2b2lkIHNpZGUgZWZmZWN0cyBvbiB0aGUgYWN0dWFsIG9zIG1vZHVsZQorICAgICAgICByZWFsX2Rldm51bGwgPSBvcy5kZXZudWxsCisgICAgICAgIG9zX3BhdGNoID0gdW5pdHRlc3QubW9jay5wYXRjaCgiZW5zdXJlcGlwLm9zIikKKyAgICAgICAgcGF0Y2hlZF9vcyA9IG9zX3BhdGNoLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zX3BhdGNoLnN0b3ApCisgICAgICAgIHBhdGNoZWRfb3MuZGV2bnVsbCA9IHJlYWxfZGV2bnVsbAorICAgICAgICBwYXRjaGVkX29zLnBhdGggPSBvcy5wYXRoCisgICAgICAgIHNlbGYub3NfZW52aXJvbiA9IHBhdGNoZWRfb3MuZW52aXJvbiA9IG9zLmVudmlyb24uY29weSgpCisKKworY2xhc3MgVGVzdEJvb3RzdHJhcChFbnN1cmVwaXBNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9iYXNpY19ib290c3RyYXBwaW5nKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKCkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICAgICAgYWRkaXRpb25hbF9wYXRocyA9IHNlbGYucnVuX3BpcC5jYWxsX2FyZ3NbMF1bMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWRkaXRpb25hbF9wYXRocyksIDIpCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF9yb290KHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHJvb3Q9Ii9mb28vYmFyLyIpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi0tcm9vdCIsICIvZm9vL2Jhci8iLAorICAgICAgICAgICAgICAgICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3VzZXIoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAodXNlcj1UcnVlKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItLXVzZXIiLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF91cGdyYWRlKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHVwZ3JhZGU9VHJ1ZSkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS11cGdyYWRlIiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfdmVyYm9zaXR5XzEoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAodmVyYm9zaXR5PTEpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi12IiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfdmVyYm9zaXR5XzIoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAodmVyYm9zaXR5PTIpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi12diIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3ZlcmJvc2l0eV8zKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHZlcmJvc2l0eT0zKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItdnZ2IiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfcmVndWxhcl9pbnN0YWxsKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9zX2Vudmlyb25bIkVOU1VSRVBJUF9PUFRJT05TIl0sICJpbnN0YWxsIikKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX2FsdF9pbnN0YWxsKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKGFsdGluc3RhbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9zX2Vudmlyb25bIkVOU1VSRVBJUF9PUFRJT05TIl0sICJhbHRpbnN0YWxsIikKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX2RlZmF1bHRfcGlwKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKGRlZmF1bHRfcGlwPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkVOU1VSRVBJUF9PUFRJT05TIiwgc2VsZi5vc19lbnZpcm9uKQorCisgICAgZGVmIHRlc3RfYWx0aW5zdGFsbF9kZWZhdWx0X3BpcF9jb25mbGljdChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoYWx0aW5zdGFsbD1UcnVlLCBkZWZhdWx0X3BpcD1UcnVlKQorICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X25vdF9jYWxsZWQoKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9waXBfZW52aXJvbm1lbnRfdmFyaWFibGVzX3JlbW92ZWQoc2VsZik6CisgICAgICAgICMgZW5zdXJlcGlwIGRlbGliZXJhdGVseSBpZ25vcmVzIGFsbCBwaXAgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTczNCBmb3IgZGV0YWlscworICAgICAgICBzZWxmLm9zX2Vudmlyb25bIlBJUF9USElTX1NIT1VMRF9HT19BV0FZIl0gPSAidGVzdCBmb2RkZXIiCisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJQSVBfVEhJU19TSE9VTERfR09fQVdBWSIsIHNlbGYub3NfZW52aXJvbikKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfcGlwX2NvbmZpZ19maWxlX2Rpc2FibGVkKHNlbGYpOgorICAgICAgICAjIGVuc3VyZXBpcCBkZWxpYmVyYXRlbHkgaWdub3JlcyB0aGUgcGlwIGNvbmZpZyBmaWxlCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDA1MyBmb3IgZGV0YWlscworICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9zX2Vudmlyb25bIlBJUF9DT05GSUdfRklMRSJdLCBvcy5kZXZudWxsKQorCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIGZha2VfcGlwKHZlcnNpb249ZW5zdXJlcGlwLl9QSVBfVkVSU0lPTik6CisgICAgaWYgdmVyc2lvbiBpcyBOb25lOgorICAgICAgICBwaXAgPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgY2xhc3MgRmFrZVBpcCgpOgorICAgICAgICAgICAgX192ZXJzaW9uX18gPSB2ZXJzaW9uCisgICAgICAgIHBpcCA9IEZha2VQaXAoKQorICAgIHNlbnRpbmVsID0gb2JqZWN0KCkKKyAgICBvcmlnX3BpcCA9IHN5cy5tb2R1bGVzLmdldCgicGlwIiwgc2VudGluZWwpCisgICAgc3lzLm1vZHVsZXNbInBpcCJdID0gcGlwCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBwaXAKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvcmlnX3BpcCBpcyBzZW50aW5lbDoKKyAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1sicGlwIl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzWyJwaXAiXSA9IG9yaWdfcGlwCisKK2NsYXNzIFRlc3RVbmluc3RhbGwoRW5zdXJlcGlwTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF9za2lwcGVkX3doZW5fbm90X2luc3RhbGxlZChzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcChOb25lKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcigpCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfbm90X2NhbGxlZCgpCisKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfZmFpbHNfd2l0aF93cm9uZ192ZXJzaW9uKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKCJub3QgYSB2YWxpZCB2ZXJzaW9uIik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKCkKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9ub3RfY2FsbGVkKCkKKworCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF91bmluc3RhbGwoc2VsZik6CisgICAgICAgIHdpdGggZmFrZV9waXAoKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcigpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWyJ1bmluc3RhbGwiLCAiLXkiLCAicGlwIiwgInNldHVwdG9vbHMiXQorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF93aXRoX3ZlcmJvc2l0eV8xKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbF9oZWxwZXIodmVyYm9zaXR5PTEpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWyJ1bmluc3RhbGwiLCAiLXkiLCAiLXYiLCAicGlwIiwgInNldHVwdG9vbHMiXQorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF93aXRoX3ZlcmJvc2l0eV8yKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbF9oZWxwZXIodmVyYm9zaXR5PTIpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWyJ1bmluc3RhbGwiLCAiLXkiLCAiLXZ2IiwgInBpcCIsICJzZXR1cHRvb2xzIl0KKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfd2l0aF92ZXJib3NpdHlfMyhzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKHZlcmJvc2l0eT0zKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsidW5pbnN0YWxsIiwgIi15IiwgIi12dnYiLCAicGlwIiwgInNldHVwdG9vbHMiXQorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3BpcF9lbnZpcm9ubWVudF92YXJpYWJsZXNfcmVtb3ZlZChzZWxmKToKKyAgICAgICAgIyBlbnN1cmVwaXAgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgYWxsIHBpcCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzM0IGZvciBkZXRhaWxzCisgICAgICAgIHNlbGYub3NfZW52aXJvblsiUElQX1RISVNfU0hPVUxEX0dPX0FXQVkiXSA9ICJ0ZXN0IGZvZGRlciIKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiUElQX1RISVNfU0hPVUxEX0dPX0FXQVkiLCBzZWxmLm9zX2Vudmlyb24pCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3BpcF9jb25maWdfZmlsZV9kaXNhYmxlZChzZWxmKToKKyAgICAgICAgIyBlbnN1cmVwaXAgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlIHBpcCBjb25maWcgZmlsZQorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjAwNTMgZm9yIGRldGFpbHMKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9zX2Vudmlyb25bIlBJUF9DT05GSUdfRklMRSJdLCBvcy5kZXZudWxsKQorCisKK2NsYXNzIFRlc3RNaXNzaW5nU1NMKEVuc3VyZXBpcE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN5cy5tb2R1bGVzWyJlbnN1cmVwaXAiXSA9IGVuc3VyZXBpcF9ub19zc2wKKyAgICAgICAgQHNlbGYuYWRkQ2xlYW51cAorICAgICAgICBkZWYgcmVzdG9yZV9tb2R1bGUoKToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzWyJlbnN1cmVwaXAiXSA9IGVuc3VyZXBpcAorICAgICAgICBzdXBlcigpLnNldFVwKCkKKworICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcF9yZXF1aXJlc19zc2woc2VsZik6CisgICAgICAgIHNlbGYub3NfZW52aXJvblsiUElQX1RISVNfU0hPVUxEX1NUQVkiXSA9ICJ0ZXN0IGZvZGRlciIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgInJlcXVpcmVzIFNTTC9UTFMiKToKKyAgICAgICAgICAgIGVuc3VyZXBpcF9ub19zc2wuYm9vdHN0cmFwKCkKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9ub3RfY2FsbGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiUElQX1RISVNfU0hPVUxEX1NUQVkiLCBzZWxmLm9zX2Vudmlyb24pCisKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfcmVxdWlyZXNfc3NsKHNlbGYpOgorICAgICAgICBzZWxmLm9zX2Vudmlyb25bIlBJUF9USElTX1NIT1VMRF9TVEFZIl0gPSAidGVzdCBmb2RkZXIiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsICJyZXF1aXJlcyBTU0wvVExTIik6CisgICAgICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICAgICAgZW5zdXJlcGlwX25vX3NzbC5fdW5pbnN0YWxsX2hlbHBlcigpCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfbm90X2NhbGxlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlBJUF9USElTX1NIT1VMRF9TVEFZIiwgc2VsZi5vc19lbnZpcm9uKQorCisgICAgZGVmIHRlc3RfbWFpbl9leGl0c19lYXJseV93aXRoX3dhcm5pbmcoc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgIGVuc3VyZXBpcF9ub19zc2wuX21haW4oWyItLXZlcnNpb24iXSkKKyAgICAgICAgd2FybmluZyA9IHN0ZGVyci5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhcm5pbmcuZW5kc3dpdGgoInJlcXVpcmVzIFNTTC9UTFMiKSwgd2FybmluZykKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9ub3RfY2FsbGVkKCkKKworIyBCYXNpYyB0ZXN0aW5nIG9mIHRoZSBtYWluIGZ1bmN0aW9ucyBhbmQgdGhlaXIgYXJndW1lbnQgcGFyc2luZworCitFWFBFQ1RFRF9WRVJTSU9OX09VVFBVVCA9ICJwaXAgIiArIGVuc3VyZXBpcC5fUElQX1ZFUlNJT04KKworY2xhc3MgVGVzdEJvb3RzdHJhcHBpbmdNYWluRnVuY3Rpb24oRW5zdXJlcGlwTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCk6CisgICAgICAgICAgICAgICAgZW5zdXJlcGlwLl9tYWluKFsiLS12ZXJzaW9uIl0pCisgICAgICAgIHJlc3VsdCA9IHN0ZG91dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIEVYUEVDVEVEX1ZFUlNJT05fT1VUUFVUKQorICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X25vdF9jYWxsZWQoKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9iYXNpY19ib290c3RyYXBwaW5nKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuX21haW4oW10pCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMgPSBzZWxmLnJ1bl9waXAuY2FsbF9hcmdzWzBdWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFkZGl0aW9uYWxfcGF0aHMpLCAyKQorCitjbGFzcyBUZXN0VW5pbnN0YWxsYXRpb25NYWluRnVuY3Rpb24oRW5zdXJlcGlwTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF92ZXJzaW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsLl9tYWluKFsiLS12ZXJzaW9uIl0pCisgICAgICAgIHJlc3VsdCA9IHN0ZG91dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIEVYUEVDVEVEX1ZFUlNJT05fT1VUUFVUKQorICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X25vdF9jYWxsZWQoKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9iYXNpY191bmluc3RhbGwoc2VsZik6CisgICAgICAgIHdpdGggZmFrZV9waXAoKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsLl9tYWluKFtdKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsidW5pbnN0YWxsIiwgIi15IiwgInBpcCIsICJzZXR1cHRvb2xzIl0KKyAgICAgICAgKQorCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbnVtLnB5IGIvTGliL3Rlc3QvdGVzdF9lbnVtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMDA5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2VudW0ucHkKQEAgLTAsMCArMSwxNTM1IEBACitpbXBvcnQgZW51bQoraW1wb3J0IGluc3BlY3QKK2ltcG9ydCBweWRvYworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorZnJvbSBlbnVtIGltcG9ydCBFbnVtLCBJbnRFbnVtLCBFbnVtTWV0YSwgdW5pcXVlCitmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworZnJvbSBwaWNrbGUgaW1wb3J0IGR1bXBzLCBsb2FkcywgUGlja2xpbmdFcnJvciwgSElHSEVTVF9QUk9UT0NPTAorCisjIGZvciBwaWNrbGUgdGVzdHMKK3RyeToKKyAgICBjbGFzcyBTdG9vZ2VzKEVudW0pOgorICAgICAgICBMQVJSWSA9IDEKKyAgICAgICAgQ1VSTFkgPSAyCisgICAgICAgIE1PRSA9IDMKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIFN0b29nZXMgPSBleGMKKwordHJ5OgorICAgIGNsYXNzIEludFN0b29nZXMoaW50LCBFbnVtKToKKyAgICAgICAgTEFSUlkgPSAxCisgICAgICAgIENVUkxZID0gMgorICAgICAgICBNT0UgPSAzCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBJbnRTdG9vZ2VzID0gZXhjCisKK3RyeToKKyAgICBjbGFzcyBGbG9hdFN0b29nZXMoZmxvYXQsIEVudW0pOgorICAgICAgICBMQVJSWSA9IDEuMzkKKyAgICAgICAgQ1VSTFkgPSAyLjcyCisgICAgICAgIE1PRSA9IDMuMTQyNTk2CitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBGbG9hdFN0b29nZXMgPSBleGMKKworIyBmb3IgcGlja2xlIHRlc3QgYW5kIHN1YmNsYXNzIHRlc3RzCit0cnk6CisgICAgY2xhc3MgU3RyRW51bShzdHIsIEVudW0pOgorICAgICAgICAnYWNjZXB0cyBvbmx5IHN0cmluZyB2YWx1ZXMnCisgICAgY2xhc3MgTmFtZShTdHJFbnVtKToKKyAgICAgICAgQkRGTCA9ICdHdWlkbyB2YW4gUm9zc3VtJworICAgICAgICBGTFVGTCA9ICdCYXJyeSBXYXJzYXcnCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBOYW1lID0gZXhjCisKK3RyeToKKyAgICBRdWVzdGlvbiA9IEVudW0oJ1F1ZXN0aW9uJywgJ3dobyB3aGF0IHdoZW4gd2hlcmUgd2h5JywgbW9kdWxlPV9fbmFtZV9fKQorZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgUXVlc3Rpb24gPSBleGMKKwordHJ5OgorICAgIEFuc3dlciA9IEVudW0oJ0Fuc3dlcicsICdoaW0gdGhpcyB0aGVuIHRoZXJlIGJlY2F1c2UnKQorZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgQW5zd2VyID0gZXhjCisKK3RyeToKKyAgICBUaGVvcnkgPSBFbnVtKCdUaGVvcnknLCAncnVsZSBsYXcgc3VwcG9zaXRpb24nLCBxdWFsbmFtZT0nc3BhbmlzaF9pbnF1aXNpdGlvbicpCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBUaGVvcnkgPSBleGMKKworIyBmb3IgZG9jdGVzdHMKK3RyeToKKyAgICBjbGFzcyBGcnVpdChFbnVtKToKKyAgICAgICAgdG9tYXRvID0gMQorICAgICAgICBiYW5hbmEgPSAyCisgICAgICAgIGNoZXJyeSA9IDMKK2V4Y2VwdCBFeGNlcHRpb246CisgICAgcGFzcworCitkZWYgdGVzdF9waWNrbGVfZHVtcF9sb2FkKGFzc2VydGlvbiwgc291cmNlLCB0YXJnZXQ9Tm9uZSwKKyAgICAgICAgKiwgcHJvdG9jb2w9KDAsIEhJR0hFU1RfUFJPVE9DT0wpKToKKyAgICBzdGFydCwgc3RvcCA9IHByb3RvY29sCisgICAgaWYgdGFyZ2V0IGlzIE5vbmU6CisgICAgICAgIHRhcmdldCA9IHNvdXJjZQorICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShzdGFydCwgc3RvcCsxKToKKyAgICAgICAgYXNzZXJ0aW9uKGxvYWRzKGR1bXBzKHNvdXJjZSwgcHJvdG9jb2w9cHJvdG9jb2wpKSwgdGFyZ2V0KQorCitkZWYgdGVzdF9waWNrbGVfZXhjZXB0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uLCBvYmosCisgICAgICAgICosIHByb3RvY29sPSgwLCBISUdIRVNUX1BST1RPQ09MKSk6CisgICAgc3RhcnQsIHN0b3AgPSBwcm90b2NvbAorICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShzdGFydCwgc3RvcCsxKToKKyAgICAgICAgd2l0aCBhc3NlcnRpb24oZXhjZXB0aW9uKToKKyAgICAgICAgICAgIGR1bXBzKG9iaiwgcHJvdG9jb2w9cHJvdG9jb2wpCisKK2NsYXNzIFRlc3RIZWxwZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIF9pc19kZXNjcmlwdG9yLCBfaXNfc3VuZGVyLCBfaXNfZHVuZGVyCisKKyAgICBkZWYgdGVzdF9pc19kZXNjcmlwdG9yKHNlbGYpOgorICAgICAgICBjbGFzcyBmb286CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvciBhdHRyIGluICgnX19nZXRfXycsJ19fc2V0X18nLCdfX2RlbGV0ZV9fJyk6CisgICAgICAgICAgICBvYmogPSBmb28oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnVtLl9pc19kZXNjcmlwdG9yKG9iaikpCisgICAgICAgICAgICBzZXRhdHRyKG9iaiwgYXR0ciwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnVtLl9pc19kZXNjcmlwdG9yKG9iaikpCisKKyAgICBkZWYgdGVzdF9pc19zdW5kZXIoc2VsZik6CisgICAgICAgIGZvciBzIGluICgnX2FfJywgJ19hYV8nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnVtLl9pc19zdW5kZXIocykpCisKKyAgICAgICAgZm9yIHMgaW4gKCdhJywgJ2FfJywgJ19hJywgJ19fYScsICdhX18nLCAnX19hX18nLCAnX2FfXycsICdfX2FfJywgJ18nLAorICAgICAgICAgICAgICAgICdfXycsICdfX18nLCAnX19fXycsICdfX19fXycsKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW51bS5faXNfc3VuZGVyKHMpKQorCisgICAgZGVmIHRlc3RfaXNfZHVuZGVyKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoJ19fYV9fJywgJ19fYWFfXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudW0uX2lzX2R1bmRlcihzKSkKKyAgICAgICAgZm9yIHMgaW4gKCdhJywgJ2FfJywgJ19hJywgJ19fYScsICdhX18nLCAnX2FfJywgJ19hX18nLCAnX19hXycsICdfJywKKyAgICAgICAgICAgICAgICAnX18nLCAnX19fJywgJ19fX18nLCAnX19fX18nLCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVudW0uX2lzX2R1bmRlcihzKSkKKworCitjbGFzcyBUZXN0RW51bSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNsYXNzIFNlYXNvbihFbnVtKToKKyAgICAgICAgICAgIFNQUklORyA9IDEKKyAgICAgICAgICAgIFNVTU1FUiA9IDIKKyAgICAgICAgICAgIEFVVFVNTiA9IDMKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgc2VsZi5TZWFzb24gPSBTZWFzb24KKworICAgICAgICBjbGFzcyBLb25zdGFudHMoZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgRSA9IDIuNzE4MjgxOAorICAgICAgICAgICAgUEkgPSAzLjE0MTU5MjYKKyAgICAgICAgICAgIFRBVSA9IDIgKiBQSQorICAgICAgICBzZWxmLktvbnN0YW50cyA9IEtvbnN0YW50cworCisgICAgICAgIGNsYXNzIEdyYWRlcyhJbnRFbnVtKToKKyAgICAgICAgICAgIEEgPSA1CisgICAgICAgICAgICBCID0gNAorICAgICAgICAgICAgQyA9IDMKKyAgICAgICAgICAgIEQgPSAyCisgICAgICAgICAgICBGID0gMAorICAgICAgICBzZWxmLkdyYWRlcyA9IEdyYWRlcworCisgICAgICAgIGNsYXNzIERpcmVjdGlvbmFsKHN0ciwgRW51bSk6CisgICAgICAgICAgICBFQVNUID0gJ2Vhc3QnCisgICAgICAgICAgICBXRVNUID0gJ3dlc3QnCisgICAgICAgICAgICBOT1JUSCA9ICdub3J0aCcKKyAgICAgICAgICAgIFNPVVRIID0gJ3NvdXRoJworICAgICAgICBzZWxmLkRpcmVjdGlvbmFsID0gRGlyZWN0aW9uYWwKKworICAgICAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlCisgICAgICAgIGNsYXNzIEhvbGlkYXkoZGF0ZSwgRW51bSk6CisgICAgICAgICAgICBORVdfWUVBUiA9IDIwMTMsIDEsIDEKKyAgICAgICAgICAgIElERVNfT0ZfTUFSQ0ggPSAyMDEzLCAzLCAxNQorICAgICAgICBzZWxmLkhvbGlkYXkgPSBIb2xpZGF5CisKKyAgICBkZWYgdGVzdF9kaXJfb25fY2xhc3Moc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZXQoZGlyKFNlYXNvbikpLAorICAgICAgICAgICAgc2V0KFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXycsCisgICAgICAgICAgICAgICAgJ1NQUklORycsICdTVU1NRVInLCAnQVVUVU1OJywgJ1dJTlRFUiddKSwKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Rpcl9vbl9pdGVtKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2V0KGRpcihTZWFzb24uV0lOVEVSKSksCisgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnXSksCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kaXJfd2l0aF9hZGRlZF9iZWhhdmlvcihzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdChFbnVtKToKKyAgICAgICAgICAgIHRoaXMgPSAndGhhdCcKKyAgICAgICAgICAgIHRoZXNlID0gJ3Rob3NlJworICAgICAgICAgICAgZGVmIHdvd3NlcihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCJXb3dzZXIhIEknbSAlcyEiICUgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNldChkaXIoVGVzdCkpLAorICAgICAgICAgICAgICAgIHNldChbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbWVtYmVyc19fJywgJ19fbW9kdWxlX18nLCAndGhpcycsICd0aGVzZSddKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc2V0KGRpcihUZXN0LnRoaXMpKSwKKyAgICAgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnLCAnd293c2VyJ10pLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2VudW1faW5fZW51bV9vdXQoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKFNlYXNvbi5XSU5URVIpLCBTZWFzb24uV0lOVEVSKQorCisgICAgZGVmIHRlc3RfZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfaW50ZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnRTdG9vZ2VzLkNVUkxZLnZhbHVlLCAyKQorCisgICAgZGVmIHRlc3RfZW51bShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgbHN0ID0gbGlzdChTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTZWFzb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTZWFzb24pLCA0LCBTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbU2Vhc29uLlNQUklORywgU2Vhc29uLlNVTU1FUiwgU2Vhc29uLkFVVFVNTiwgU2Vhc29uLldJTlRFUl0sIGxzdCkKKworICAgICAgICBmb3IgaSwgc2Vhc29uIGluIGVudW1lcmF0ZSgnU1BSSU5HIFNVTU1FUiBBVVRVTU4gV0lOVEVSJy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTZWFzb24oaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgZ2V0YXR0cihTZWFzb24sIHNlYXNvbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUudmFsdWUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFNlYXNvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ1NlYXNvbi4nICsgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVwcihlKSwKKyAgICAgICAgICAgICAgICAgICAgJzxTZWFzb24uezB9OiB7MX0+Jy5mb3JtYXQoc2Vhc29uLCBpKSwKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLm5hbWUsICdTUFJJTkcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5TUFJJTkcudmFsdWUsIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLlNQUklORy5uYW1lID0gJ2ludmllcm5vJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcudmFsdWUgPSAyCisKKyAgICBkZWYgdGVzdF9jaGFuZ2luZ19tZW1iZXIoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLldJTlRFUiA9ICdyZWFsbHkgY29sZCcKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9kZWxldGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gMworICAgICAgICAgICAgV0lOVEVSID0gNAorCisgICAgICAgICAgICBkZWYgc3BhbShjbHMpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihTZWFzb24sICdzcGFtJykpCisgICAgICAgIGRlbCBTZWFzb24uc3BhbQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoU2Vhc29uLCAnc3BhbScpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIFNlYXNvbi5TUFJJTkcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgU2Vhc29uLkRSWQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBTZWFzb24uU1BSSU5HLm5hbWUKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbmFtZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBtcm8gPSA5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfY3JlYXRlXz0gMTEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9nZXRfbWl4aW5zXyA9IDkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9maW5kX25ld18gPSAxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfYW55X25hbWVfID0gOQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oU2Vhc29uLkFVVFVNTiwgU2Vhc29uKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDMsIFNlYXNvbikKKworICAgICAgICB2YWwgPSBTZWFzb24oMykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih2YWwsIFNlYXNvbikKKworICAgICAgICBjbGFzcyBPdGhlckVudW0oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxOyB0d28gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oT3RoZXJFbnVtLnR3bywgU2Vhc29uKQorCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBTZWFzb24uV0lOVEVSCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPiA0CisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChTZWFzb24uU1BSSU5HLCAxKQorCisgICAgICAgIGNsYXNzIFBhcnQoRW51bSk6CisgICAgICAgICAgICBTUFJJTkcgPSAxCisgICAgICAgICAgICBDTElQID0gMgorICAgICAgICAgICAgQkFSUkVMID0gMworCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoU2Vhc29uLlNQUklORywgUGFydC5TUFJJTkcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBQYXJ0LkNMSVAKKworICAgIGRlZiB0ZXN0X2VudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gRkFMTCA9IDMKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgICAgIEFOT1RIRVJfU1BSSU5HID0gMQorICAgICAgICBsc3QgPSBsaXN0KFNlYXNvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgIFtTZWFzb24uU1BSSU5HLCBTZWFzb24uU1VNTUVSLAorICAgICAgICAgICAgIFNlYXNvbi5BVVRVTU4sIFNlYXNvbi5XSU5URVIsCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbi5GQUxMLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5GQUxMLnZhbHVlLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5BVVRVTU4udmFsdWUsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKDMpLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbigxKSwgU2Vhc29uLlNQUklORykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uRkFMTC5uYW1lLCAnQVVUVU1OJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbayBmb3Igayx2IGluIFNlYXNvbi5fX21lbWJlcnNfXy5pdGVtcygpIGlmIHYubmFtZSAhPSBrXSwKKyAgICAgICAgICAgICAgICBbJ0ZBTEwnLCAnQU5PVEhFUl9TUFJJTkcnXSwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgICAgICAgICAgcmVkID0gNAorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkJworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkZGVyJworICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworCisKKyAgICBkZWYgdGVzdF9lbnVtX3dpdGhfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgSHVoKEVudW0pOgorICAgICAgICAgICAgbmFtZSA9IDEKKyAgICAgICAgICAgIHZhbHVlID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGlzdChIdWgpLAorICAgICAgICAgICAgW0h1aC5uYW1lLCBIdWgudmFsdWVdLAorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoSHVoLm5hbWUpLCBIdWgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSHVoLm5hbWUubmFtZSwgJ25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEh1aC5uYW1lLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW0oc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggJ3s6fScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnezp9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezoyMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezoyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7Ol4yMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezpeMjB9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezo+MjB9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6PjIwfScuZm9ybWF0KHN0cihTZWFzb24uU1BSSU5HKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6PDIwfScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7OjwyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW1fY3VzdG9tKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0RmxvYXQoZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgb25lID0gMS4wCisgICAgICAgICAgICB0d28gPSAyLjAKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAnVGVzdEZsb2F0IHN1Y2Nlc3MhJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fScuZm9ybWF0KFRlc3RGbG9hdC5vbmUpLCAnVGVzdEZsb2F0IHN1Y2Nlc3MhJykKKworICAgIGRlZiBhc3NlcnRGb3JtYXRJc1ZhbHVlKHNlbGYsIHNwZWMsIG1lbWJlcik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5mb3JtYXQobWVtYmVyKSwgc3BlYy5mb3JtYXQobWVtYmVyLnZhbHVlKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2RhdGUoc2VsZik6CisgICAgICAgIEhvbGlkYXkgPSBzZWxmLkhvbGlkYXkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7On0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PjIwfScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbX0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbSAlTTowMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZW51bV9mbG9hdChzZWxmKToKKyAgICAgICAgS29uc3RhbnRzID0gc2VsZi5Lb25zdGFudHMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezp9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Oj4yMH0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PDIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpufScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo1LjJ9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OmZ9JywgS29uc3RhbnRzLlRBVSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2ludChzZWxmKToKKyAgICAgICAgR3JhZGVzID0gc2VsZi5HcmFkZXMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo8MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezorfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MDhYfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6Yn0nLCBHcmFkZXMuQykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX3N0cihzZWxmKToKKyAgICAgICAgRGlyZWN0aW9uYWwgPSBzZWxmLkRpcmVjdGlvbmFsCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgne30nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6XjIwfScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgRGlyZWN0aW9uYWwuV0VTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgZGF0ZXMgPSB7fQorICAgICAgICBkYXRlc1tTZWFzb24uV0lOVEVSXSA9ICcxMjI1JworICAgICAgICBkYXRlc1tTZWFzb24uU1BSSU5HXSA9ICcwMzE1JworICAgICAgICBkYXRlc1tTZWFzb24uU1VNTUVSXSA9ICcwNzA0JworICAgICAgICBkYXRlc1tTZWFzb24uQVVUVU1OXSA9ICcxMDMxJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGVzW1NlYXNvbi5BVVRVTU5dLCAnMTAzMScpCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGludCwgRW51bSk6CisgICAgICAgICAgICBwaSA9IDMKKyAgICAgICAgICAgIHRhdSA9IDIgKiBwaQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIHBoeShJbnRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMworICAgICAgICAgICAgdGF1ID0gMiAqIHBpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3RfZmxvYXRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGZsb2F0LCBFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9mbG9hdGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGbG9hdEVudW0oZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBwaHkoRmxvYXRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9zdHJlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KHN0ciwgRW51bSk6CisgICAgICAgICAgICBwaSA9ICdQaScKKyAgICAgICAgICAgIHRhdSA9ICdUYXUnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3Rfc3RyZW51bV9pbmhlcml0ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIFN0ckVudW0oc3RyLCBFbnVtKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgcGh5KFN0ckVudW0pOgorICAgICAgICAgICAgcGkgPSAnUGknCisgICAgICAgICAgICB0YXUgPSAnVGF1JworICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworCisgICAgZGVmIHRlc3RfaW50ZW51bShzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSAzCisgICAgICAgICAgICBXRURORVNEQVkgPSA0CisgICAgICAgICAgICBUSFVSU0RBWSA9IDUKKyAgICAgICAgICAgIEZSSURBWSA9IDYKKyAgICAgICAgICAgIFNBVFVSREFZID0gNworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydhJywgJ2InLCAnYyddW1dlZWtEYXkuTU9OREFZXSwgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtpIGZvciBpIGluIHJhbmdlKFdlZWtEYXkuVFVFU0RBWSldLCBbMCwgMSwgMl0pCisKKyAgICAgICAgbHN0ID0gbGlzdChXZWVrRGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oV2Vla0RheSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFdlZWtEYXkpLCA3KQorICAgICAgICB0YXJnZXQgPSAnU1VOREFZIE1PTkRBWSBUVUVTREFZIFdFRE5FU0RBWSBUSFVSU0RBWSBGUklEQVkgU0FUVVJEQVknCisgICAgICAgIHRhcmdldCA9IHRhcmdldC5zcGxpdCgpCisgICAgICAgIGZvciBpLCB3ZWVrZGF5IGluIGVudW1lcmF0ZSh0YXJnZXQsIDEpOgorICAgICAgICAgICAgZSA9IFdlZWtEYXkoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIHdlZWtkYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFdlZWtEYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdC5pbmRleChlKSsxLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPCBlIDwgOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgV2Vla0RheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgRW51bSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSBURVVTREFZID0gMworICAgICAgICAgICAgV0VETkVTREFZID0gNAorICAgICAgICAgICAgVEhVUlNEQVkgPSA1CisgICAgICAgICAgICBGUklEQVkgPSA2CisgICAgICAgICAgICBTQVRVUkRBWSA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhXZWVrRGF5LlRFVVNEQVksIFdlZWtEYXkuVFVFU0RBWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChXZWVrRGF5KDMpLm5hbWUsICdUVUVTREFZJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbayBmb3Igayx2IGluIFdlZWtEYXkuX19tZW1iZXJzX18uaXRlbXMoKQorICAgICAgICAgICAgICAgIGlmIHYubmFtZSAhPSBrXSwgWydURVVTREFZJywgXSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9lbnVtKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKFN0b29nZXMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBTdG9vZ2VzCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBTdG9vZ2VzLkNVUkxZKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgU3Rvb2dlcykKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9pbnQoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoSW50U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEludFN0b29nZXMKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIEludFN0b29nZXMuQ1VSTFkpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBJbnRTdG9vZ2VzKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2Zsb2F0KHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKEZsb2F0U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEZsb2F0U3Rvb2dlcworICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgRmxvYXRTdG9vZ2VzLkNVUkxZKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgRmxvYXRTdG9vZ2VzKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2VudW1fZnVuY3Rpb24oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoQW5zd2VyLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgQW5zd2VyCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBBbnN3ZXIuaGltKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgQW5zd2VyKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2VudW1fZnVuY3Rpb25fd2l0aF9tb2R1bGUoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoUXVlc3Rpb24sIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBRdWVzdGlvbgorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgUXVlc3Rpb24ud2hvKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgUXVlc3Rpb24pCisKKyAgICBkZWYgdGVzdF9lbnVtX2Z1bmN0aW9uX3dpdGhfcXVhbG5hbWUoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoVGhlb3J5LCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgVGhlb3J5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGhlb3J5Ll9fcXVhbG5hbWVfXywgJ3NwYW5pc2hfaW5xdWlzaXRpb24nKQorCisgICAgZGVmIHRlc3RfY2xhc3NfbmVzdGVkX2VudW1fYW5kX3BpY2tsZV9wcm90b2NvbF9mb3VyKHNlbGYpOgorICAgICAgICAjIHdvdWxkIG5vcm1hbGx5IGp1c3QgaGF2ZSB0aGlzIGRpcmVjdGx5IGluIHRoZSBjbGFzcyBuYW1lc3BhY2UKKyAgICAgICAgY2xhc3MgTmVzdGVkRW51bShFbnVtKToKKyAgICAgICAgICAgIHR3aWdzID0gJ2NvbW1vbicKKyAgICAgICAgICAgIHNoaW55ID0gJ3JhcmUnCisKKyAgICAgICAgc2VsZi5fX2NsYXNzX18uTmVzdGVkRW51bSA9IE5lc3RlZEVudW0KKyAgICAgICAgc2VsZi5OZXN0ZWRFbnVtLl9fcXVhbG5hbWVfXyA9ICclcy5OZXN0ZWRFbnVtJyAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgIHRlc3RfcGlja2xlX2V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcywgUGlja2xpbmdFcnJvciwgc2VsZi5OZXN0ZWRFbnVtLnR3aWdzLAorICAgICAgICAgICAgICAgIHByb3RvY29sPSgwLCAzKSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIHNlbGYuTmVzdGVkRW51bS50d2lncywKKyAgICAgICAgICAgICAgICBwcm90b2NvbD0oNCwgSElHSEVTVF9QUk9UT0NPTCkpCisKKyAgICBkZWYgdGVzdF9leHBsb2RpbmdfcGlja2xlKHNlbGYpOgorICAgICAgICBCYWRQaWNrbGUgPSBFbnVtKAorICAgICAgICAgICAgICAgICdCYWRQaWNrbGUnLCAnZGlsbCBzd2VldCBicmVhZC1uLWJ1dHRlcicsIG1vZHVsZT1fX25hbWVfXykKKyAgICAgICAgZ2xvYmFscygpWydCYWRQaWNrbGUnXSA9IEJhZFBpY2tsZQorICAgICAgICAjIG5vdyBicmVhayBCYWRQaWNrbGUgdG8gdGVzdCBleGNlcHRpb24gcmFpc2luZworICAgICAgICBlbnVtLl9tYWtlX2NsYXNzX3VucGlja2xhYmxlKEJhZFBpY2tsZSkKKyAgICAgICAgdGVzdF9waWNrbGVfZXhjZXB0aW9uKHNlbGYuYXNzZXJ0UmFpc2VzLCBUeXBlRXJyb3IsIEJhZFBpY2tsZS5kaWxsKQorICAgICAgICB0ZXN0X3BpY2tsZV9leGNlcHRpb24oc2VsZi5hc3NlcnRSYWlzZXMsIFBpY2tsaW5nRXJyb3IsIEJhZFBpY2tsZSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ19lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBTa2lsbExldmVsKHN0ciwgRW51bSk6CisgICAgICAgICAgICBtYXN0ZXIgPSAnd2hhdCBpcyB0aGUgc291bmQgb2Ygb25lIGhhbmQgY2xhcHBpbmc/JworICAgICAgICAgICAgam91cm5leW1hbiA9ICd3aHkgZGlkIHRoZSBjaGlja2VuIGNyb3NzIHRoZSByb2FkPycKKyAgICAgICAgICAgIGFwcHJlbnRpY2UgPSAna25vY2ssIGtub2NrIScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTa2lsbExldmVsLmFwcHJlbnRpY2UsICdrbm9jaywga25vY2shJykKKworICAgIGRlZiB0ZXN0X2dldGF0dHJfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgY2xhc3MgUGVyaW9kKEVudW0pOgorICAgICAgICAgICAgbW9ybmluZyA9IDEKKyAgICAgICAgICAgIG5vb24gPSAyCisgICAgICAgICAgICBldmVuaW5nID0gMworICAgICAgICAgICAgbmlnaHQgPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUGVyaW9kKDIpLCBQZXJpb2Qubm9vbikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKFBlcmlvZCwgJ25pZ2h0JyksIFBlcmlvZC5uaWdodCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQZXJpb2RbJ21vcm5pbmcnXSwgUGVyaW9kLm1vcm5pbmcpCisKKyAgICBkZWYgdGVzdF9nZXRhdHRyX2R1bmRlcihzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIoU2Vhc29uLCAnX19lcV9fJykpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRpb25fb3JkZXIoc2VsZik6CisgICAgICAgIGNsYXNzIFNlYXNvbihFbnVtKToKKyAgICAgICAgICAgIFNVTU1FUiA9IDIKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgICAgIEFVVFVNTiA9IDMKKyAgICAgICAgICAgIFNQUklORyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KFNlYXNvbiksCisgICAgICAgICAgICAgICAgW1NlYXNvbi5TVU1NRVIsIFNlYXNvbi5XSU5URVIsIFNlYXNvbi5BVVRVTU4sIFNlYXNvbi5TUFJJTkddLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3JldmVyc2VkX2l0ZXJhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KHJldmVyc2VkKHNlbGYuU2Vhc29uKSksCisgICAgICAgICAgICAgICAgW3NlbGYuU2Vhc29uLldJTlRFUiwgc2VsZi5TZWFzb24uQVVUVU1OLCBzZWxmLlNlYXNvbi5TVU1NRVIsCisgICAgICAgICAgICAgICAgIHNlbGYuU2Vhc29uLlNQUklOR10KKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9zdHJpbmcoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcpCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9zdHJpbmdfbGlzdChzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKCdTdW1tZXJNb250aCcsIFsnanVuZScsICdqdWx5JywgJ2F1Z3VzdCddKQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChlLnZhbHVlKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3RfcHJvZ3JhbWF0aWNfZnVuY3Rpb25faXRlcmFibGUoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgKKyAgICAgICAgICAgICAgICAnU3VtbWVyTW9udGgnLAorICAgICAgICAgICAgICAgICgoJ2p1bmUnLCAxKSwgKCdqdWx5JywgMiksICgnYXVndXN0JywgMykpCisgICAgICAgICAgICAgICAgKQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChlLnZhbHVlKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3RfcHJvZ3JhbWF0aWNfZnVuY3Rpb25fZnJvbV9kaWN0KHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oCisgICAgICAgICAgICAgICAgJ1N1bW1lck1vbnRoJywKKyAgICAgICAgICAgICAgICBPcmRlcmVkRGljdCgoKCdqdW5lJywgMSksICgnanVseScsIDIpLCAoJ2F1Z3VzdCcsIDMpKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl90eXBlKHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oJ1N1bW1lck1vbnRoJywgJ2p1bmUganVseSBhdWd1c3QnLCB0eXBlPWludCkKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl90eXBlX2Zyb21fc3ViY2xhc3Moc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gSW50RW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcpCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Npbmcoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoTmFtZSwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIE5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOYW1lLkJERkwsICdHdWlkbyB2YW4gUm9zc3VtJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE5hbWUuQkRGTCwgTmFtZSgnR3VpZG8gdmFuIFJvc3N1bScpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5hbWUuQkRGTCwgZ2V0YXR0cihOYW1lLCAnQkRGTCcpKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTmFtZS5CREZMKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgTW9yZUNvbG9yKENvbG9yKToKKyAgICAgICAgICAgICAgICBjeWFuID0gNAorICAgICAgICAgICAgICAgIG1hZ2VudGEgPSA1CisgICAgICAgICAgICAgICAgeWVsbG93ID0gNgorCisgICAgZGVmIHRlc3RfZXhjbHVkZV9tZXRob2RzKHNlbGYpOgorICAgICAgICBjbGFzcyB3aGF0ZXZlcihFbnVtKToKKyAgICAgICAgICAgIHRoaXMgPSAndGhhdCcKKyAgICAgICAgICAgIHRoZXNlID0gJ3Rob3NlJworICAgICAgICAgICAgZGVmIHJlYWxseShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ25vLCBub3QgJXMnICUgc2VsZi52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHR5cGUod2hhdGV2ZXIucmVhbGx5KSwgd2hhdGV2ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2hhdGV2ZXIudGhpcy5yZWFsbHkoKSwgJ25vLCBub3QgdGhhdCcpCisKKyAgICBkZWYgdGVzdF93cm9uZ19pbmhlcml0YW5jZV9vcmRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgV3JvbmcoRW51bSwgc3RyKToKKyAgICAgICAgICAgICAgICBOb3RIZXJlID0gJ2Vycm9yIGJlZm9yZSB0aGlzIHBvaW50JworCisgICAgZGVmIHRlc3RfaW50ZW51bV90cmFuc2l0aXZpdHkoc2VsZik6CisgICAgICAgIGNsYXNzIG51bWJlcihJbnRFbnVtKToKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgICAgIHR3byA9IDIKKyAgICAgICAgICAgIHRocmVlID0gMworICAgICAgICBjbGFzcyBudW1lcm8oSW50RW51bSk6CisgICAgICAgICAgICB1bm8gPSAxCisgICAgICAgICAgICBkb3MgPSAyCisgICAgICAgICAgICB0cmVzID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bWJlci5vbmUsIG51bWVyby51bm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtYmVyLnR3bywgbnVtZXJvLmRvcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1iZXIudGhyZWUsIG51bWVyby50cmVzKQorCisgICAgZGVmIHRlc3Rfd3JvbmdfZW51bV9pbl9jYWxsKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgTW9ub2Nocm9tZSwgR2VuZGVyLm1hbGUpCisKKyAgICBkZWYgdGVzdF93cm9uZ19lbnVtX2luX21peGVkX2NhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIE1vbm9jaHJvbWUoSW50RW51bSk6CisgICAgICAgICAgICBibGFjayA9IDAKKyAgICAgICAgICAgIHdoaXRlID0gMQorICAgICAgICBjbGFzcyBHZW5kZXIoRW51bSk6CisgICAgICAgICAgICBtYWxlID0gMAorICAgICAgICAgICAgZmVtYWxlID0gMQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBNb25vY2hyb21lLCBHZW5kZXIubWFsZSkKKworICAgIGRlZiB0ZXN0X21peGVkX2VudW1faW5fY2FsbF8xKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEludEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEludEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhNb25vY2hyb21lKEdlbmRlci5mZW1hbGUpLCBNb25vY2hyb21lLndoaXRlKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfZW51bV9pbl9jYWxsXzIoc2VsZik6CisgICAgICAgIGNsYXNzIE1vbm9jaHJvbWUoRW51bSk6CisgICAgICAgICAgICBibGFjayA9IDAKKyAgICAgICAgICAgIHdoaXRlID0gMQorICAgICAgICBjbGFzcyBHZW5kZXIoSW50RW51bSk6CisgICAgICAgICAgICBtYWxlID0gMAorICAgICAgICAgICAgZmVtYWxlID0gMQorICAgICAgICBzZWxmLmFzc2VydElzKE1vbm9jaHJvbWUoR2VuZGVyLm1hbGUpLCBNb25vY2hyb21lLmJsYWNrKQorCisgICAgZGVmIHRlc3RfZmx1ZmxfZW51bShzZWxmKToKKyAgICAgICAgY2xhc3MgRmx1ZmxudW0oRW51bSk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYudmFsdWUpCisgICAgICAgIGNsYXNzIE1haWxNYW5PcHRpb25zKEZsdWZsbnVtKToKKyAgICAgICAgICAgIG9wdGlvbjEgPSAxCisgICAgICAgICAgICBvcHRpb24yID0gMgorICAgICAgICAgICAgb3B0aW9uMyA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoTWFpbE1hbk9wdGlvbnMub3B0aW9uMSksIDEpCisKKyAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uKHNlbGYpOgorICAgICAgICBjbGFzcyBOdW1iZXIoSW50RW51bSk6CisgICAgICAgICAgICBvbmUgPSAxMDAKKyAgICAgICAgICAgIHR3byA9IDIwMAorICAgICAgICBzZWxmLmFzc2VydElzKE51bWJlci5vbmUuX21lbWJlcl90eXBlXywgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzKE51bWJlci5fbWVtYmVyX3R5cGVfLCBpbnQpCisgICAgICAgIGNsYXNzIFN0cmluZyhzdHIsIEVudW0pOgorICAgICAgICAgICAgeWFybiA9ICdzb2Z0JworICAgICAgICAgICAgcm9wZSA9ICdyb3VnaCcKKyAgICAgICAgICAgIHdpcmUgPSAnaGFyZCcKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhTdHJpbmcueWFybi5fbWVtYmVyX3R5cGVfLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU3RyaW5nLl9tZW1iZXJfdHlwZV8sIHN0cikKKyAgICAgICAgY2xhc3MgUGxhaW4oRW51bSk6CisgICAgICAgICAgICB2YW5pbGxhID0gJ3doaXRlJworICAgICAgICAgICAgb25lID0gMQorICAgICAgICBzZWxmLmFzc2VydElzKFBsYWluLnZhbmlsbGEuX21lbWJlcl90eXBlXywgb2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKFBsYWluLl9tZW1iZXJfdHlwZV8sIG9iamVjdCkKKworICAgIGRlZiB0ZXN0X25vX3N1Y2hfZW51bV9tZW1iZXIoc2VsZik6CisgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgQ29sb3IoNCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBDb2xvclsnY2hhcnRyZXVzZSddCisKKyAgICBkZWYgdGVzdF9uZXdfcmVwcihzZWxmKToKKyAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJkb24ndCB5b3UganVzdCBsb3ZlIHNoYWRlcyBvZiAlcz8iICUgc2VsZi5uYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVwcihDb2xvci5ibHVlKSwKKyAgICAgICAgICAgICAgICAiZG9uJ3QgeW91IGp1c3QgbG92ZSBzaGFkZXMgb2YgYmx1ZT8iLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9yZXByKHNlbGYpOgorICAgICAgICBjbGFzcyBNeUVudW0oRW51bSk6CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJNeSBuYW1lIGlzICVzLiIgJSBzZWxmLm5hbWUKKyAgICAgICAgY2xhc3MgTXlJbnRFbnVtKGludCwgTXlFbnVtKToKKyAgICAgICAgICAgIHRoaXMgPSAxCisgICAgICAgICAgICB0aGF0ID0gMgorICAgICAgICAgICAgdGhlb3RoZXIgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihNeUludEVudW0udGhhdCksICJNeSBuYW1lIGlzIHRoYXQuIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX21peGluX21ybyhzZWxmKToKKyAgICAgICAgY2xhc3MgYXV0b19lbnVtKHR5cGUoRW51bSkpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18obWV0YWNscywgY2xzLCBiYXNlcywgY2xhc3NkaWN0KToKKyAgICAgICAgICAgICAgICB0ZW1wID0gdHlwZShjbGFzc2RpY3QpKCkKKyAgICAgICAgICAgICAgICBuYW1lcyA9IHNldChjbGFzc2RpY3QuX21lbWJlcl9uYW1lcykKKyAgICAgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgICAgIGZvciBrIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgICAgICAgICB2ID0gY2xhc3NkaWN0W2tdCisgICAgICAgICAgICAgICAgICAgIGlmIHYgaXMgRWxsaXBzaXM6CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gaQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHYKKyAgICAgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgICAgIHRlbXBba10gPSB2CisgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gY2xhc3NkaWN0Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGsgbm90IGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFtrXSA9IHYKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoYXV0b19lbnVtLCBtZXRhY2xzKS5fX25ld19fKAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWNscywgY2xzLCBiYXNlcywgdGVtcCkKKworICAgICAgICBjbGFzcyBBdXRvTnVtYmVyZWRFbnVtKEVudW0sIG1ldGFjbGFzcz1hdXRvX2VudW0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEF1dG9JbnRFbnVtKEludEVudW0sIG1ldGFjbGFzcz1hdXRvX2VudW0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3RBdXRvTnVtYmVyKEF1dG9OdW1iZXJlZEVudW0pOgorICAgICAgICAgICAgYSA9IC4uLgorICAgICAgICAgICAgYiA9IDMKKyAgICAgICAgICAgIGMgPSAuLi4KKworICAgICAgICBjbGFzcyBUZXN0QXV0b0ludChBdXRvSW50RW51bSk6CisgICAgICAgICAgICBhID0gLi4uCisgICAgICAgICAgICBiID0gMworICAgICAgICAgICAgYyA9IC4uLgorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRoX2dldG5ld2FyZ3Moc2VsZik6CisgICAgICAgIGNsYXNzIE5hbWVkSW50KGludCk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTmFtZWRJbnQnICAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYXJncworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05FSScgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIHggPSAoJ3RoZS14JywgMSkKKyAgICAgICAgICAgIHkgPSAoJ3RoZS15JywgMikKKworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTkVJLl9fbmV3X18sIEVudW0uX19uZXdfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE5FSS54ICsgTkVJLnkpLCAiTmFtZWRJbnQoJyh0aGUteCArIHRoZS15KScsIDMpIikKKyAgICAgICAgZ2xvYmFscygpWydOYW1lZEludCddID0gTmFtZWRJbnQKKyAgICAgICAgZ2xvYmFscygpWydORUknXSA9IE5FSQorICAgICAgICBOSTUgPSBOYW1lZEludCgndGVzdCcsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkk1LCA1KQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRFcXVhbCwgTkk1LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5FSS55LnZhbHVlLCAyKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJLnkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzX3dpdGhfZ2V0bmV3YXJnc19leChzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdOYW1lZEludCcgICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBuYW1lLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGFuZCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5faW50bmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID0gX2FyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9hcmdzLCB7fQorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05FSScgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIHggPSAoJ3RoZS14JywgMSkKKyAgICAgICAgICAgIHkgPSAoJ3RoZS15JywgMikKKworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTkVJLl9fbmV3X18sIEVudW0uX19uZXdfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE5FSS54ICsgTkVJLnkpLCAiTmFtZWRJbnQoJyh0aGUteCArIHRoZS15KScsIDMpIikKKyAgICAgICAgZ2xvYmFscygpWydOYW1lZEludCddID0gTmFtZWRJbnQKKyAgICAgICAgZ2xvYmFscygpWydORUknXSA9IE5FSQorICAgICAgICBOSTUgPSBOYW1lZEludCgndGVzdCcsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkk1LCA1KQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRFcXVhbCwgTkk1LCA1LCBwcm90b2NvbD0oNCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkueSwgcHJvdG9jb2w9KDQsIDQpKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRoX3JlZHVjZShzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdOYW1lZEludCcgICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBuYW1lLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGFuZCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5faW50bmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID0gX2FyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCBzZWxmLl9hcmdzCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX25hbWVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50bmFtZQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgcmVwcigpIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmFtZSBhbmQgdHlwZSBpbmZvCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7fSh7IXJ9LCB7fSkiLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC5fX3JlcHJfXyhzZWxmKSkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgc3RyKCkgaXMgdW5jaGFuZ2VkLCBldmVuIGlmIGl0IHJlbGllcyBvbiB0aGUgcmVwcigpIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgYmFzZSA9IGludAorICAgICAgICAgICAgICAgIGJhc2Vfc3RyID0gYmFzZS5fX3N0cl9fCisgICAgICAgICAgICAgICAgaWYgYmFzZV9zdHIuX19vYmpjbGFzc19fIGlzIG9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuX19yZXByX18oc2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZV9zdHIoc2VsZikKKyAgICAgICAgICAgICMgZm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgZGVmaW5lIG9uZSBvcGVyYXRvciB0aGF0CisgICAgICAgICAgICAjIHByb3BhZ2F0ZXMgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICB0ZW1wID0gaW50KHNlbGYpICsgaW50KCBvdGhlcikKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIE5hbWVkSW50KSBhbmQgaXNpbnN0YW5jZShvdGhlciwgTmFtZWRJbnQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZWRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAnKHswfSArIHsxfSknLmZvcm1hdChzZWxmLl9fbmFtZV9fLCBvdGhlci5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcAorCisgICAgICAgIGNsYXNzIE5FSShOYW1lZEludCwgRW51bSk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTkVJJyAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgeCA9ICgndGhlLXgnLCAxKQorICAgICAgICAgICAgeSA9ICgndGhlLXknLCAyKQorCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydEVxdWFsLCBOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkueSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXNfd2l0aF9yZWR1Y2VfZXgoc2VsZik6CisgICAgICAgIGNsYXNzIE5hbWVkSW50KGludCk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTmFtZWRJbnQnICAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX3JlZHVjZV9leF9fKHNlbGYsIHByb3RvKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIHNlbGYuX2FyZ3MKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fbmFtZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRuYW1lCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyByZXByKCkgaXMgdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBuYW1lIGFuZCB0eXBlIGluZm8KKyAgICAgICAgICAgICAgICByZXR1cm4gInt9KHshcn0sIHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Ll9fcmVwcl9fKHNlbGYpKQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBzdHIoKSBpcyB1bmNoYW5nZWQsIGV2ZW4gaWYgaXQgcmVsaWVzIG9uIHRoZSByZXByKCkgZmFsbGJhY2sKKyAgICAgICAgICAgICAgICBiYXNlID0gaW50CisgICAgICAgICAgICAgICAgYmFzZV9zdHIgPSBiYXNlLl9fc3RyX18KKyAgICAgICAgICAgICAgICBpZiBiYXNlX3N0ci5fX29iamNsYXNzX18gaXMgb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5fX3JlcHJfXyhzZWxmKQorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlX3N0cihzZWxmKQorICAgICAgICAgICAgIyBmb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBkZWZpbmUgb25lIG9wZXJhdG9yIHRoYXQKKyAgICAgICAgICAgICMgcHJvcGFnYXRlcyBleHByZXNzaW9ucworICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBpbnQoc2VsZikgKyBpbnQoIG90aGVyKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgTmFtZWRJbnQpIGFuZCBpc2luc3RhbmNlKG90aGVyLCBOYW1lZEludCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lZEludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICcoezB9ICsgezF9KScuZm9ybWF0KHNlbGYuX19uYW1lX18sIG90aGVyLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wCisKKyAgICAgICAgY2xhc3MgTkVJKE5hbWVkSW50LCBFbnVtKToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdORUknICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICB4ID0gKCd0aGUteCcsIDEpCisgICAgICAgICAgICB5ID0gKCd0aGUteScsIDIpCisKKworICAgICAgICBzZWxmLmFzc2VydElzKE5FSS5fX25ld19fLCBFbnVtLl9fbmV3X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihORUkueCArIE5FSS55KSwgIk5hbWVkSW50KCcodGhlLXggKyB0aGUteSknLCAzKSIpCisgICAgICAgIGdsb2JhbHMoKVsnTmFtZWRJbnQnXSA9IE5hbWVkSW50CisgICAgICAgIGdsb2JhbHMoKVsnTkVJJ10gPSBORUkKKyAgICAgICAgTkk1ID0gTmFtZWRJbnQoJ3Rlc3QnLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5JNSwgNSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0RXF1YWwsIE5JNSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChORUkueS52YWx1ZSwgMikKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSS55KQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRob3V0X2dldG5ld2FyZ3Moc2VsZik6CisgICAgICAgIGNsYXNzIE5hbWVkSW50KGludCk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTmFtZWRJbnQnCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBuYW1lLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGFuZCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5faW50bmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID0gX2FyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05FSScKKyAgICAgICAgICAgIHggPSAoJ3RoZS14JywgMSkKKyAgICAgICAgICAgIHkgPSAoJ3RoZS15JywgMikKKworICAgICAgICBzZWxmLmFzc2VydElzKE5FSS5fX25ld19fLCBFbnVtLl9fbmV3X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihORUkueCArIE5FSS55KSwgIk5hbWVkSW50KCcodGhlLXggKyB0aGUteSknLCAzKSIpCisgICAgICAgIGdsb2JhbHMoKVsnTmFtZWRJbnQnXSA9IE5hbWVkSW50CisgICAgICAgIGdsb2JhbHMoKVsnTkVJJ10gPSBORUkKKyAgICAgICAgTkk1ID0gTmFtZWRJbnQoJ3Rlc3QnLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5JNSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChORUkueS52YWx1ZSwgMikKKyAgICAgICAgdGVzdF9waWNrbGVfZXhjZXB0aW9uKHNlbGYuYXNzZXJ0UmFpc2VzLCBUeXBlRXJyb3IsIE5FSS54KQorICAgICAgICB0ZXN0X3BpY2tsZV9leGNlcHRpb24oc2VsZi5hc3NlcnRSYWlzZXMsIFBpY2tsaW5nRXJyb3IsIE5FSSkKKworICAgIGRlZiB0ZXN0X3R1cGxlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBTb21lVHVwbGUodHVwbGUsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ1NvbWVUdXBsZScgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIGZpcnN0ID0gKDEsICdmb3IgdGhlIG1vbmV5JykKKyAgICAgICAgICAgIHNlY29uZCA9ICgyLCAnZm9yIHRoZSBzaG93JykKKyAgICAgICAgICAgIHRoaXJkID0gKDMsICdmb3IgdGhlIG11c2ljJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKFNvbWVUdXBsZS5maXJzdCksIFNvbWVUdXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKFNvbWVUdXBsZS5zZWNvbmQsIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNvbWVUdXBsZS50aGlyZCwgKDMsICdmb3IgdGhlIG11c2ljJykpCisgICAgICAgIGdsb2JhbHMoKVsnU29tZVR1cGxlJ10gPSBTb21lVHVwbGUKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIFNvbWVUdXBsZS5maXJzdCkKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV92YWx1ZXNfZ2l2ZV91bmlxdWVfZW51bV9pdGVtcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQXV0b051bWJlcihFbnVtKToKKyAgICAgICAgICAgIGZpcnN0ID0gKCkKKyAgICAgICAgICAgIHNlY29uZCA9ICgpCisgICAgICAgICAgICB0aGlyZCA9ICgpCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KEF1dG9OdW1iZXIpLAorICAgICAgICAgICAgICAgIFtBdXRvTnVtYmVyLmZpcnN0LCBBdXRvTnVtYmVyLnNlY29uZCwgQXV0b051bWJlci50aGlyZF0sCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChBdXRvTnVtYmVyLnNlY29uZCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQXV0b051bWJlci50aGlyZC52YWx1ZSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhBdXRvTnVtYmVyKDEpLCBBdXRvTnVtYmVyLmZpcnN0KQorCisgICAgZGVmIHRlc3RfaW5oZXJpdGVkX25ld19mcm9tX2VuaGFuY2VkX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXIoRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9uZXdfZnJvbV9taXhlZF9lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBBdXRvTnVtYmVyKEludEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxlbihjbHMuX19tZW1iZXJzX18pICsgMQorICAgICAgICAgICAgICAgIG9iaiA9IGludC5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBjbGFzcyBBbHdheXNFcXVhbDoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGNsYXNzIE9yZGluYXJ5RW51bShFbnVtKToKKyAgICAgICAgICAgIGEgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQWx3YXlzRXF1YWwoKSwgT3JkaW5hcnlFbnVtLmEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT3JkaW5hcnlFbnVtLmEsIEFsd2F5c0VxdWFsKCkpCisKKyAgICBkZWYgdGVzdF9vcmRlcmVkX21peGluKHNlbGYpOgorICAgICAgICBjbGFzcyBPcmRlcmVkRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlXyA+PSBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPiBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPD0gb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfIDwgb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBjbGFzcyBHcmFkZShPcmRlcmVkRW51bSk6CisgICAgICAgICAgICBBID0gNQorICAgICAgICAgICAgQiA9IDQKKyAgICAgICAgICAgIEMgPSAzCisgICAgICAgICAgICBEID0gMgorICAgICAgICAgICAgRiA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKEdyYWRlLkEsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKEdyYWRlLkYsIEdyYWRlLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhHcmFkZS5ELCBHcmFkZS5BKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChHcmFkZS5CLCBHcmFkZS5CKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdyYWRlLkIsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoR3JhZGUuQywgR3JhZGUuRCkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGluZzIoc2VsZik6CisgICAgICAgIGNsYXNzIFNoYWRlKEVudW0pOgorICAgICAgICAgICAgZGVmIHNoYWRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHByaW50KHNlbGYubmFtZSkKKyAgICAgICAgY2xhc3MgQ29sb3IoU2hhZGUpOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgICAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICAgICAgbWFnZW50YSA9IDUKKyAgICAgICAgICAgICAgICB5ZWxsb3cgPSA2CisKKyAgICBkZWYgdGVzdF9leHRlbmRpbmczKHNlbGYpOgorICAgICAgICBjbGFzcyBTaGFkZShFbnVtKToKKyAgICAgICAgICAgIGRlZiBzaGFkZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisgICAgICAgIGNsYXNzIENvbG9yKFNoYWRlKToKKyAgICAgICAgICAgIGRlZiBoZXgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICclcyBoZXhsaWZpZWQhJyAlIHNlbGYudmFsdWUKKyAgICAgICAgY2xhc3MgTW9yZUNvbG9yKENvbG9yKToKKyAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICBtYWdlbnRhID0gNQorICAgICAgICAgICAgeWVsbG93ID0gNgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vcmVDb2xvci5tYWdlbnRhLmhleCgpLCAnNSBoZXhsaWZpZWQhJykKKworCisgICAgZGVmIHRlc3Rfbm9fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVW5pcXVlRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAgICAgICAgICAgICBpZiBhbnkoc2VsZi52YWx1ZSA9PSBlLnZhbHVlIGZvciBlIGluIGNscyk6CisgICAgICAgICAgICAgICAgICAgIGEgPSBzZWxmLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgZSA9IGNscyhzZWxmLnZhbHVlKS5uYW1lCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzZXMgbm90IGFsbG93ZWQgaW4gVW5pcXVlRW51bTogICVyIC0tPiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChhLCBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgY2xhc3MgQ29sb3IoVW5pcXVlRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBDb2xvcihVbmlxdWVFbnVtKToKKyAgICAgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgICAgICAgICBncmVuZSA9IDIKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIGNsYXNzIFBsYW5ldChFbnVtKToKKyAgICAgICAgICAgIE1FUkNVUlkgPSAoMy4zMDNlKzIzLCAyLjQzOTdlNikKKyAgICAgICAgICAgIFZFTlVTICAgPSAoNC44NjllKzI0LCA2LjA1MThlNikKKyAgICAgICAgICAgIEVBUlRIICAgPSAoNS45NzZlKzI0LCA2LjM3ODE0ZTYpCisgICAgICAgICAgICBNQVJTICAgID0gKDYuNDIxZSsyMywgMy4zOTcyZTYpCisgICAgICAgICAgICBKVVBJVEVSID0gKDEuOWUrMjcsICAgNy4xNDkyZTcpCisgICAgICAgICAgICBTQVRVUk4gID0gKDUuNjg4ZSsyNiwgNi4wMjY4ZTcpCisgICAgICAgICAgICBVUkFOVVMgID0gKDguNjg2ZSsyNSwgMi41NTU5ZTcpCisgICAgICAgICAgICBORVBUVU5FID0gKDEuMDI0ZSsyNiwgMi40NzQ2ZTcpCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzcywgcmFkaXVzKToKKyAgICAgICAgICAgICAgICBzZWxmLm1hc3MgPSBtYXNzICAgICAgICMgaW4ga2lsb2dyYW1zCisgICAgICAgICAgICAgICAgc2VsZi5yYWRpdXMgPSByYWRpdXMgICAjIGluIG1ldGVycworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgc3VyZmFjZV9ncmF2aXR5KHNlbGYpOgorICAgICAgICAgICAgICAgICMgdW5pdmVyc2FsIGdyYXZpdGF0aW9uYWwgY29uc3RhbnQgIChtMyBrZy0xIHMtMikKKyAgICAgICAgICAgICAgICBHID0gNi42NzMwMEUtMTEKKyAgICAgICAgICAgICAgICByZXR1cm4gRyAqIHNlbGYubWFzcyAvIChzZWxmLnJhZGl1cyAqIHNlbGYucmFkaXVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKFBsYW5ldC5FQVJUSC5zdXJmYWNlX2dyYXZpdHksIDIpLCA5LjgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBsYW5ldC5FQVJUSC52YWx1ZSwgKDUuOTc2ZSsyNCwgNi4zNzgxNGU2KSkKKworICAgIGRlZiB0ZXN0X25vbmhhc2hfdmFsdWUoc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXJJbkFMaXN0KEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFtsZW4oY2xzLl9fbWVtYmVyc19fKSArIDFdCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgIGNsYXNzIENvbG9ySW5BTGlzdChBdXRvTnVtYmVySW5BTGlzdCk6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvckluQUxpc3QpLCBbQ29sb3JJbkFMaXN0LnJlZCwgQ29sb3JJbkFMaXN0LmdyZWVuLCBDb2xvckluQUxpc3QuYmx1ZV0pCisgICAgICAgIGZvciBlbnVtLCB2YWx1ZSBpbiB6aXAoQ29sb3JJbkFMaXN0LCByYW5nZSgzKSk6CisgICAgICAgICAgICB2YWx1ZSArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudW0udmFsdWUsIFt2YWx1ZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKENvbG9ySW5BTGlzdChbdmFsdWVdKSwgZW51bSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX3R5cGVzX3Jlc29sdmVkX2luX25ldyhzZWxmKToKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSwgbGFiZWwgPSBhcmdzCisgICAgICAgICAgICAgICAgb2JqID0gaW50Ll9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBvYmoubGFiZWwgPSBsYWJlbAorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRMaXN0KExhYmVsbGVkSW50RW51bSk6CisgICAgICAgICAgICB1bnByb2Nlc3NlZCA9ICgxLCAiVW5wcm9jZXNzZWQiKQorICAgICAgICAgICAgcGF5bWVudF9jb21wbGV0ZSA9ICgyLCAiUGF5bWVudCBDb21wbGV0ZSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KExhYmVsbGVkTGlzdCksIFtMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIExhYmVsbGVkTGlzdC5wYXltZW50X2NvbXBsZXRlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTGFiZWxsZWRMaXN0KDEpLCBMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQpCisKKworY2xhc3MgVGVzdFVuaXF1ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bmlxdWVfY2xlYW4oc2VsZik6CisgICAgICAgIEB1bmlxdWUKKyAgICAgICAgY2xhc3MgQ2xlYW4oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICB0d28gPSAnZG9zJworICAgICAgICAgICAgdHJlcyA9IDQuMAorICAgICAgICBAdW5pcXVlCisgICAgICAgIGNsYXNzIENsZWFuZXIoSW50RW51bSk6CisgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICBkb3VibGUgPSAyCisgICAgICAgICAgICB0cmlwbGUgPSAzCisKKyAgICBkZWYgdGVzdF91bmlxdWVfZGlydHkoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAndHJlcy4qb25lJyk6CisgICAgICAgICAgICBAdW5pcXVlCisgICAgICAgICAgICBjbGFzcyBEaXJ0eShFbnVtKToKKyAgICAgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICAgICAgdHdvID0gJ2RvcycKKyAgICAgICAgICAgICAgICB0cmVzID0gMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAnZG91YmxlLipzaW5nbGUuKnR1cmtleS4qdHJpcGxlJywKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgQHVuaXF1ZQorICAgICAgICAgICAgY2xhc3MgRGlydGllcihJbnRFbnVtKToKKyAgICAgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICAgICAgZG91YmxlID0gMQorICAgICAgICAgICAgICAgIHRyaXBsZSA9IDMKKyAgICAgICAgICAgICAgICB0dXJrZXkgPSAzCisKKworZXhwZWN0ZWRfaGVscF9vdXRwdXQgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ29sb3IgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDb2xvcihlbnVtLkVudW0pCisgfCAgTWV0aG9kIHJlc29sdXRpb24gb3JkZXI6CisgfCAgICAgIENvbG9yCisgfCAgICAgIGVudW0uRW51bQorIHwgICAgICBidWlsdGlucy5vYmplY3QKKyB8XHgyMFx4MjAKKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgaGVyZToKKyB8XHgyMFx4MjAKKyB8ICBibHVlID0gPENvbG9yLmJsdWU6IDM+CisgfFx4MjBceDIwCisgfCAgZ3JlZW4gPSA8Q29sb3IuZ3JlZW46IDI+CisgfFx4MjBceDIwCisgfCAgcmVkID0gPENvbG9yLnJlZDogMT4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW06CisgfFx4MjBceDIwCisgfCAgbmFtZQorIHwgICAgICBUaGUgbmFtZSBvZiB0aGUgRW51bSBtZW1iZXIuCisgfFx4MjBceDIwCisgfCAgdmFsdWUKKyB8ICAgICAgVGhlIHZhbHVlIG9mIHRoZSBFbnVtIG1lbWJlci4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW1NZXRhOgorIHxceDIwXHgyMAorIHwgIF9fbWVtYmVyc19fCisgfCAgICAgIFJldHVybnMgYSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lLT52YWx1ZS4KKyB8XHgyMFx4MjBceDIwXHgyMFx4MjBceDIwCisgfCAgICAgIFRoaXMgbWFwcGluZyBsaXN0cyBhbGwgZW51bSBtZW1iZXJzLCBpbmNsdWRpbmcgYWxpYXNlcy4gTm90ZSB0aGF0IHRoaXMKKyB8ICAgICAgaXMgYSByZWFkLW9ubHkgdmlldyBvZiB0aGUgaW50ZXJuYWwgbWFwcGluZy4KKyIiIi5zdHJpcCgpCisKK2NsYXNzIFRlc3RTdGRMaWIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgIHJlZCA9IDEKKyAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgIGJsdWUgPSAzCisKKyAgICBkZWYgdGVzdF9weWRvYyhzZWxmKToKKyAgICAgICAgIyBpbmRpcmVjdGx5IHRlc3QgX19vYmpjbGFzc19fCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9oZWxwX291dHB1dCAlIF9fbmFtZV9fCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihzZWxmLkNvbG9yKQorICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJlc3VsdCAhPSBleHBlY3RlZF90ZXh0OgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIGRlZiB0ZXN0X2luc3BlY3RfZ2V0bWVtYmVycyhzZWxmKToKKyAgICAgICAgdmFsdWVzID0gZGljdCgoCisgICAgICAgICAgICAgICAgKCdfX2NsYXNzX18nLCBFbnVtTWV0YSksCisgICAgICAgICAgICAgICAgKCdfX2RvY19fJywgTm9uZSksCisgICAgICAgICAgICAgICAgKCdfX21lbWJlcnNfXycsIHNlbGYuQ29sb3IuX19tZW1iZXJzX18pLAorICAgICAgICAgICAgICAgICgnX19tb2R1bGVfXycsIF9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAoJ2JsdWUnLCBzZWxmLkNvbG9yLmJsdWUpLAorICAgICAgICAgICAgICAgICgnZ3JlZW4nLCBzZWxmLkNvbG9yLmdyZWVuKSwKKyAgICAgICAgICAgICAgICAoJ25hbWUnLCBFbnVtLl9fZGljdF9fWyduYW1lJ10pLAorICAgICAgICAgICAgICAgICgncmVkJywgc2VsZi5Db2xvci5yZWQpLAorICAgICAgICAgICAgICAgICgndmFsdWUnLCBFbnVtLl9fZGljdF9fWyd2YWx1ZSddKSwKKyAgICAgICAgICAgICAgICApKQorICAgICAgICByZXN1bHQgPSBkaWN0KGluc3BlY3QuZ2V0bWVtYmVycyhzZWxmLkNvbG9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMua2V5cygpLCByZXN1bHQua2V5cygpKQorICAgICAgICBmYWlsZWQgPSBGYWxzZQorICAgICAgICBmb3IgayBpbiB2YWx1ZXMua2V5cygpOgorICAgICAgICAgICAgaWYgcmVzdWx0W2tdICE9IHZhbHVlc1trXToKKyAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgcHJpbnQoJ1xuJXNcbiAgICAga2V5OiAlc1xuICByZXN1bHQ6ICVzXG5leHBlY3RlZDogJXNcbiVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICgnPScgKiA3NSwgaywgcmVzdWx0W2tdLCB2YWx1ZXNba10sICc9JyAqIDc1KSwgc2VwPScnKQorICAgICAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKyAgICAgICAgaWYgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZXN1bHQgZG9lcyBub3QgZXF1YWwgZXhwZWN0ZWQsIHNlZSBwcmludCBhYm92ZSIpCisKKyAgICBkZWYgdGVzdF9pbnNwZWN0X2NsYXNzaWZ5X2NsYXNzX2F0dHJzKHNlbGYpOgorICAgICAgICAjIGluZGlyZWN0bHkgdGVzdCBfX29iamNsYXNzX18KKyAgICAgICAgZnJvbSBpbnNwZWN0IGltcG9ydCBBdHRyaWJ1dGUKKyAgICAgICAgdmFsdWVzID0gWworICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX2NsYXNzX18nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9b2JqZWN0LCBvYmplY3Q9RW51bU1ldGEpLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX2RvY19fJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1Ob25lKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nX19tZW1iZXJzX18nLCBraW5kPSdwcm9wZXJ0eScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPUVudW1NZXRhLCBvYmplY3Q9RW51bU1ldGEuX19tZW1iZXJzX18pLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX21vZHVsZV9fJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1fX25hbWVfXyksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J2JsdWUnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PXNlbGYuQ29sb3IuYmx1ZSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J2dyZWVuJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1zZWxmLkNvbG9yLmdyZWVuKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0ncmVkJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1zZWxmLkNvbG9yLnJlZCksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J25hbWUnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9RW51bSwgb2JqZWN0PUVudW0uX19kaWN0X19bJ25hbWUnXSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J3ZhbHVlJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPUVudW0sIG9iamVjdD1FbnVtLl9fZGljdF9fWyd2YWx1ZSddKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHZhbHVlcy5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5uYW1lKQorICAgICAgICByZXN1bHQgPSBsaXN0KGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoc2VsZi5Db2xvcikpCisgICAgICAgIHJlc3VsdC5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5uYW1lKQorICAgICAgICBmYWlsZWQgPSBGYWxzZQorICAgICAgICBmb3IgdiwgciBpbiB6aXAodmFsdWVzLCByZXN1bHQpOgorICAgICAgICAgICAgaWYgciAhPSB2OgorICAgICAgICAgICAgICAgIHByaW50KCdcbiVzXG4lc1xuJXNcbiVzXG4nICUgKCc9JyAqIDc1LCByLCB2LCAnPScgKiA3NSksIHNlcD0nJykKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSBUcnVlCisgICAgICAgIGlmIGZhaWxlZDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVzdWx0IGRvZXMgbm90IGVxdWFsIGV4cGVjdGVkLCBzZWUgcHJpbnQgYWJvdmUiKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQppbmRleCA0YWYyMTdiLi44NzQyYWZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQpAQCAtMSw0ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgc3lzCiBpbXBvcnQgcGlja2xlCiAKQEAgLTE2OCwxNSArMTY5LDEyIEBACiAgICAgICAgIHggPSByYW5nZSgxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmV2ZXJzZWQoeCkpLCB0eXBlKGl0ZXIoeCkpKQogCi0gICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgotICAgICAgICAjIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBub3QgYW4gaW50ZXJmYWNlIHJlcXVpcmVtZW50Ci0gICAgICAgIGZyb20gdGVzdC50ZXN0X2l0ZXJsZW4gaW1wb3J0IGxlbgogICAgICAgICBmb3IgcyBpbiAoJ2hlbGxvJywgdHVwbGUoJ2hlbGxvJyksIGxpc3QoJ2hlbGxvJyksIHJhbmdlKDUpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldmVyc2VkKHMpKSwgbGVuKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXZlcnNlZChzKSksIGxlbihzKSkKICAgICAgICAgICAgIHIgPSByZXZlcnNlZChzKQogICAgICAgICAgICAgbGlzdChyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHIpLCAwKQogICAgICAgICBjbGFzcyBTZXFXaXRoV2VpcmRMZW46CiAgICAgICAgICAgICBjYWxsZWQgPSBGYWxzZQogICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CkBAIC0xODcsNyArMTg1LDcgQEAKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4CiAgICAgICAgIHIgPSByZXZlcnNlZChTZXFXaXRoV2VpcmRMZW4oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxlbiwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIG9wZXJhdG9yLmxlbmd0aF9oaW50LCByKQogCiAKICAgICBkZWYgdGVzdF9nYyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkgYi9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CmluZGV4IDg3MWVmYjIuLjBjODhjYzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQpAQCAtMjEsMTAgKzIxLDExIEBACiAiIiIKIFRlc3RzIGZvciBlcG9sbCB3cmFwcGVyLgogIiIiCi1pbXBvcnQgc29ja2V0CiBpbXBvcnQgZXJybm8KLWltcG9ydCB0aW1lCitpbXBvcnQgb3MKIGltcG9ydCBzZWxlY3QKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC0zMyw3ICszNCw3IEBACiAKIHRyeToKICAgICBzZWxlY3QuZXBvbGwoKQotZXhjZXB0IElPRXJyb3IgYXMgZToKK2V4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6CiAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJrZXJuZWwgZG9lc24ndCBzdXBwb3J0IGVwb2xsKCkiKQogICAgIHJhaXNlCkBAIC01NSw3ICs1Niw3IEBACiAgICAgICAgIGNsaWVudC5zZXRibG9ja2luZyhGYWxzZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBzZWxmLnNlcnZlclNvY2tldC5nZXRzb2NrbmFtZSgpWzFdKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkNvbm5lY3Qgc2hvdWxkIGhhdmUgcmFpc2VkIEVJTlBST0dSRVNTIikKQEAgLTg2LDYgKzg3LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LmVwb2xsLCBbJ2ZvbyddKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5lcG9sbCwge30pCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggc2VsZWN0LmVwb2xsKDE2KSBhcyBlcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihlcC5maWxlbm8oKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcC5maWxlbm8pCisKICAgICBkZWYgdGVzdF9hZGQoc2VsZik6CiAgICAgICAgIHNlcnZlciwgY2xpZW50ID0gc2VsZi5fY29ubmVjdGVkX3BhaXIoKQogCkBAIC0xMTQsMTIgKzEyMiwxMiBAQAogICAgICAgICAgICAgIyBWYWx1ZUVycm9yOiBmaWxlIGRlc2NyaXB0b3IgY2Fubm90IGJlIGEgbmVnYXRpdmUgaW50ZWdlciAoLTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcC5yZWdpc3RlciwgLTEsCiAgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCi0gICAgICAgICAgICAjIElPRXJyb3I6IFtFcnJubyA5XSBCYWQgZmlsZSBkZXNjcmlwdG9yCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBlcC5yZWdpc3RlciwgMTAwMDAsCisgICAgICAgICAgICAjIE9TRXJyb3I6IFtFcnJubyA5XSBCYWQgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBlcC5yZWdpc3RlciwgMTAwMDAsCiAgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCiAgICAgICAgICAgICAjIHJlZ2lzdGVyaW5nIHR3aWNlIGFsc28gcmFpc2VzIGFuIGV4Y2VwdGlvbgogICAgICAgICAgICAgZXAucmVnaXN0ZXIoc2VydmVyLCBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGVwLnJlZ2lzdGVyLCBzZXJ2ZXIsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBlcC5yZWdpc3Rlciwgc2VydmVyLAogICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZXAuY2xvc2UoKQpAQCAtMTQxLDcgKzE0OSw3IEBACiAgICAgICAgIGVwLmNsb3NlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXAyLnBvbGwoMSwgNCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FQkFERiwgZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXBvbGwgb24gY2xvc2VkIGZkIGRpZG4ndCByYWlzZSBFQkFERiIpCkBAIC0yMTcsNiArMjI1LDM1IEBACiAgICAgICAgIHNlcnZlci5jbG9zZSgpCiAgICAgICAgIGVwLnVucmVnaXN0ZXIoZmQpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgb3Blbl9maWxlID0gb3BlbihfX2ZpbGVfXywgInJiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9wZW5fZmlsZS5jbG9zZSkKKyAgICAgICAgZmQgPSBvcGVuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgZXBvbGwgPSBzZWxlY3QuZXBvbGwoKQorCisgICAgICAgICMgdGVzdCBmaWxlbm8oKSBtZXRob2QgYW5kIGNsb3NlZCBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVwb2xsLmZpbGVubygpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXBvbGwuY2xvc2VkKQorCisgICAgICAgICMgdGVzdCBjbG9zZSgpCisgICAgICAgIGVwb2xsLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVwb2xsLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwuZmlsZW5vKQorCisgICAgICAgICMgY2xvc2UoKSBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCisgICAgICAgIGVwb2xsLmNsb3NlKCkKKworICAgICAgICAjIG9wZXJhdGlvbnMgbXVzdCBmYWlsIHdpdGggVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgLi4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwubW9kaWZ5LCBmZCwgc2VsZWN0LkVQT0xMSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGVwb2xsLnBvbGwsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwucmVnaXN0ZXIsIGZkLCBzZWxlY3QuRVBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwudW5yZWdpc3RlciwgZmQpCisKKyAgICBkZWYgdGVzdF9mZF9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGVwb2xsID0gc2VsZWN0LmVwb2xsKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGVwb2xsLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShlcG9sbC5maWxlbm8oKSksIEZhbHNlKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0RVBvbGwpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKaW5kZXggOGQxMWQ5MC4uNjJhMmUzMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQpAQCAtOCw4ICs4LDggQEAKIGltcG9ydCBlcnJubwogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKFRFU1RGTiwgY2FwdHVyZWRfb3V0cHV0LCBjaGVja19pbXBsX2RldGFpbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfd2FybmluZ3MsIGNweXRob25fb25seSwgZ2NfY29sbGVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fdHJhY2luZywgcnVuX3VuaXR0ZXN0LCB1bmxpbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3dhcm5pbmdzLCBjcHl0aG9uX29ubHksIGdjX2NvbGxlY3QsIHJ1bl91bml0dGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fdHJhY2luZywgdW5saW5rKQogCiBjbGFzcyBOYWl2ZUV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKQEAgLTI1NywyMiArMjU3LDIyIEBACiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgMSl9KSwKICAgICAgICAgICAgIChTeXN0ZW1FeGl0LCAoJ2ZvbycsKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCksICdjb2RlJyA6ICdmb28nfSksCi0gICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdmb28nLCksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywpLCAnZmlsZW5hbWUnIDogTm9uZSwKICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6IE5vbmUsICdzdHJlcnJvcicgOiBOb25lfSksCi0gICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCAnYmFyJyksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdmb28nLCAnYmFyJyksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgJ2JhcicpLCAnZmlsZW5hbWUnIDogTm9uZSwKICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6ICdmb28nLCAnc3RyZXJyb3InIDogJ2Jhcid9KSwKLSAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JyksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsICdiYXInKSwgJ2ZpbGVuYW1lJyA6ICdiYXonLAogICAgICAgICAgICAgICAgICAnZXJybm8nIDogJ2ZvbycsICdzdHJlcnJvcicgOiAnYmFyJ30pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicsICdiYXonLCAncXV1eCcpLAotICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKX0pLAotICAgICAgICAgICAgKEVudmlyb25tZW50RXJyb3IsICgnZXJybm9TdHInLCAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWVTdHInKSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JywgTm9uZSwgJ3F1dXgnKSwKKyAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJyksICdmaWxlbmFtZScgOiAnYmF6JywgJ2ZpbGVuYW1lMic6ICdxdXV4J30pLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZXJybm9TdHInLCAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWVTdHInKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdlcnJub1N0cicsICdzdHJFcnJvclN0cicpLAogICAgICAgICAgICAgICAgICAnc3RyZXJyb3InIDogJ3N0ckVycm9yU3RyJywgJ2Vycm5vJyA6ICdlcnJub1N0cicsCiAgICAgICAgICAgICAgICAgICdmaWxlbmFtZScgOiAnZmlsZW5hbWVTdHInfSksCi0gICAgICAgICAgICAoRW52aXJvbm1lbnRFcnJvciwgKDEsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgxLCAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWVTdHInKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKDEsICdzdHJFcnJvclN0cicpLCAnZXJybm8nIDogMSwKICAgICAgICAgICAgICAgICAgJ3N0cmVycm9yJyA6ICdzdHJFcnJvclN0cicsICdmaWxlbmFtZScgOiAnZmlsZW5hbWVTdHInfSksCiAgICAgICAgICAgICAoU3ludGF4RXJyb3IsICgpLCB7J21zZycgOiBOb25lLCAndGV4dCcgOiBOb25lLApAQCAtNDIyLDcgKzQyMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGUuX19jb250ZXh0X18pCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGUuX19jYXVzZV9fKQogCi0gICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKEVudmlyb25tZW50RXJyb3IpOgorICAgICAgICBjbGFzcyBNeUV4Y2VwdGlvbihPU0Vycm9yKToKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBlID0gTXlFeGNlcHRpb24oKQpAQCAtOTY4LDggKzk2OCw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhcmcpLCBzdHIoZXhjKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvblRlc3RzLCBJbXBvcnRFcnJvclRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQppbmRleCA3NzBlNzBjLi5lYmQ5OWVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQpAQCAtMTksMTggKzE5LDYgQEAKIAogVElNRU9VVCA9IDAuNQogCi10cnk6Ci0gICAgZnJvbSByZXNvdXJjZSBpbXBvcnQgc2V0cmxpbWl0LCBSTElNSVRfQ09SRSwgZXJyb3IgYXMgcmVzb3VyY2VfZXJyb3IKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwcmVwYXJlX3N1YnByb2Nlc3MgPSBOb25lCi1lbHNlOgotICAgIGRlZiBwcmVwYXJlX3N1YnByb2Nlc3MoKToKLSAgICAgICAgIyBkb24ndCBjcmVhdGUgY29yZSBmaWxlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNldHJsaW1pdChSTElNSVRfQ09SRSwgKDAsIDApKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlX2Vycm9yKToKLSAgICAgICAgICAgIHBhc3MKLQogZGVmIGV4cGVjdGVkX3RyYWNlYmFjayhsaW5lbm8xLCBsaW5lbm8yLCBoZWFkZXIsIG1pbl9jb3VudD0xKToKICAgICByZWdleCA9IGhlYWRlcgogICAgIHJlZ2V4ICs9ICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAlcyBpbiBmdW5jXG4nICUgbGluZW5vMQpAQCAtNTksMTAgKzQ3LDggQEAKICAgICAgICAgYnVpbGQsIGFuZCByZXBsYWNlICJDdXJyZW50IHRocmVhZCAweDAwMDA3ZjhkOGZiZDk3MDAiIGJ5ICJDdXJyZW50CiAgICAgICAgIHRocmVhZCBYWFgiLgogICAgICAgICAiIiIKLSAgICAgICAgb3B0aW9ucyA9IHt9Ci0gICAgICAgIGlmIHByZXBhcmVfc3VicHJvY2VzczoKLSAgICAgICAgICAgIG9wdGlvbnNbJ3ByZWV4ZWNfZm4nXSA9IHByZXBhcmVfc3VicHJvY2VzcwotICAgICAgICBwcm9jZXNzID0gc2NyaXB0X2hlbHBlci5zcGF3bl9weXRob24oJy1jJywgY29kZSwgKipvcHRpb25zKQorICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgICAgICAgICAgcHJvY2VzcyA9IHNjcmlwdF9oZWxwZXIuc3Bhd25fcHl0aG9uKCctYycsIGNvZGUpCiAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCiAgICAgICAgIGV4aXRjb2RlID0gcHJvY2Vzcy53YWl0KCkKICAgICAgICAgb3V0cHV0ID0gc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKHN0ZG91dCkKQEAgLTg2LDkgKzcyLDkgQEAKICAgICAgICAgUmFpc2UgYW4gZXJyb3IgaWYgdGhlIG91dHB1dCBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQuCiAgICAgICAgICIiIgogICAgICAgICBpZiBhbGxfdGhyZWFkczoKLSAgICAgICAgICAgIGhlYWRlciA9ICdDdXJyZW50IHRocmVhZCBYWFgnCisgICAgICAgICAgICBoZWFkZXIgPSAnQ3VycmVudCB0aHJlYWQgWFhYIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KScKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGhlYWRlciA9ICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpJworICAgICAgICAgICAgaGVhZGVyID0gJ1N0YWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KScKICAgICAgICAgcmVnZXggPSAiIiIKIF5GYXRhbCBQeXRob24gZXJyb3I6IHtuYW1lfQogCkBAIC0xMDEsOCArODcsNyBAQAogICAgICAgICAgICAgaGVhZGVyPXJlLmVzY2FwZShoZWFkZXIpKQogICAgICAgICBpZiBvdGhlcl9yZWdleDoKICAgICAgICAgICAgIHJlZ2V4ICs9ICd8JyArIG90aGVyX3JlZ2V4Ci0gICAgICAgIHdpdGggc3VwcG9ydC5zdXBwcmVzc19jcmFzaF9wb3B1cCgpOgotICAgICAgICAgICAgb3V0cHV0LCBleGl0Y29kZSA9IHNlbGYuZ2V0X291dHB1dChjb2RlLCBmaWxlbmFtZSkKKyAgICAgICAgb3V0cHV0LCBleGl0Y29kZSA9IHNlbGYuZ2V0X291dHB1dChjb2RlLCBmaWxlbmFtZSkKICAgICAgICAgb3V0cHV0ID0gJ1xuJy5qb2luKG91dHB1dCkKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQsIHJlZ2V4KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV4aXRjb2RlLCAwKQpAQCAtMjMyLDggKzIxNyw3IEBACiBmYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoKQogIiIiLnN0cmlwKCkKICAgICAgICAgbm90X2V4cGVjdGVkID0gJ0ZhdGFsIFB5dGhvbiBlcnJvcicKLSAgICAgICAgd2l0aCBzdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgICAgICBzdGRlcnIsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUpCisgICAgICAgIHN0ZGVyciwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSkKICAgICAgICAgc3RkZXIgPSAnXG4nLmpvaW4oc3RkZXJyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobm90X2V4cGVjdGVkIG5vdCBpbiBzdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAiJXIgaXMgcHJlc2VudCBpbiAlciIgJSAobm90X2V4cGVjdGVkLCBzdGRlcnIpKQpAQCAtMjY0LDE2ICsyNDgsMzQgQEAKICAgICBkZWYgdGVzdF9kaXNhYmxlZF9ieV9kZWZhdWx0KHNlbGYpOgogICAgICAgICAjIEJ5IGRlZmF1bHQsIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGRpc2FibGVkCiAgICAgICAgIGNvZGUgPSAiaW1wb3J0IGZhdWx0aGFuZGxlcjsgcHJpbnQoZmF1bHRoYW5kbGVyLmlzX2VuYWJsZWQoKSkiCi0gICAgICAgIHJjLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKLSAgICAgICAgc3Rkb3V0ID0gKHN0ZG91dCArIHN0ZGVycikuc3RyaXAoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYiJGYWxzZSIpCisgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICctRScsICctYycsIGNvZGUpCisgICAgICAgICMgZG9uJ3QgdXNlIGFzc2VydF9weXRob25fb2soKSBiZWNhdXNlIGl0IGFsd2F5cyBlbmFibGUgZmF1bHRoYW5kbGVyCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIkZhbHNlIikKIAogICAgIGRlZiB0ZXN0X3N5c194b3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBUZXN0IHB5dGhvbiAtWCBmYXVsdGhhbmRsZXIKICAgICAgICAgY29kZSA9ICJpbXBvcnQgZmF1bHRoYW5kbGVyOyBwcmludChmYXVsdGhhbmRsZXIuaXNfZW5hYmxlZCgpKSIKLSAgICAgICAgcmMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLVgiLCAiZmF1bHRoYW5kbGVyIiwgIi1jIiwgY29kZSkKLSAgICAgICAgc3Rkb3V0ID0gKHN0ZG91dCArIHN0ZGVycikuc3RyaXAoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYiJUcnVlIikKKyAgICAgICAgYXJncyA9IChzeXMuZXhlY3V0YWJsZSwgIi1FIiwgIi1YIiwgImZhdWx0aGFuZGxlciIsICItYyIsIGNvZGUpCisgICAgICAgICMgZG9uJ3QgdXNlIGFzc2VydF9weXRob25fb2soKSBiZWNhdXNlIGl0IGFsd2F5cyBlbmFibGUgZmF1bHRoYW5kbGVyCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIlRydWUiKQorCisgICAgZGVmIHRlc3RfZW52X3ZhcihzZWxmKToKKyAgICAgICAgIyBlbXB0eSBlbnYgdmFyCisgICAgICAgIGNvZGUgPSAiaW1wb3J0IGZhdWx0aGFuZGxlcjsgcHJpbnQoZmF1bHRoYW5kbGVyLmlzX2VuYWJsZWQoKSkiCisgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICItYyIsIGNvZGUpCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsnUFlUSE9ORkFVTFRIQU5ETEVSJ10gPSAnJworICAgICAgICAjIGRvbid0IHVzZSBhc3NlcnRfcHl0aG9uX29rKCkgYmVjYXVzZSBpdCBhbHdheXMgZW5hYmxlIGZhdWx0aGFuZGxlcgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzLCBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJGYWxzZSIpCisKKyAgICAgICAgIyBub24tZW1wdHkgZW52IHZhcgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbJ1BZVEhPTkZBVUxUSEFORExFUiddID0gJzEnCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MsIGVudj1lbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIlRydWUiKQogCiAgICAgZGVmIGNoZWNrX2R1bXBfdHJhY2ViYWNrKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiCkBAIC0zMDQsNyArMzA2LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxpbmVubyA9IDgKICAgICAgICAgZXhwZWN0ZWQgPSBbCi0gICAgICAgICAgICAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAorICAgICAgICAgICAgJ1N0YWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lICVzIGluIGZ1bmNCJyAlIGxpbmVubywKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAxMSBpbiBmdW5jQScsCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMTMgaW4gPG1vZHVsZT4nCkBAIC0zMzYsNyArMzM4LDcgQEAKICAgICAgICAgICAgIGZ1bmNfbmFtZT1mdW5jX25hbWUsCiAgICAgICAgICkKICAgICAgICAgZXhwZWN0ZWQgPSBbCi0gICAgICAgICAgICAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAorICAgICAgICAgICAgJ1N0YWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDQgaW4gJXMnICUgdHJ1bmNhdGVkLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDYgaW4gPG1vZHVsZT4nCiAgICAgICAgIF0KQEAgLTM5MCwxMyArMzkyLDEzIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsaW5lbm8gPSAxMAogICAgICAgICByZWdleCA9ICIiIgotXlRocmVhZCAweFswLTlhLWZdKzoKK15UaHJlYWQgMHhbMC05YS1mXSsgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAoPzogIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gW19hLXpdKwogKXt7MSwzfX0gIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAyMyBpbiBydW4KICAgRmlsZSAiLip0aHJlYWRpbmcucHkiLCBsaW5lIFswLTldKyBpbiBfYm9vdHN0cmFwX2lubmVyCiAgIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gX2Jvb3RzdHJhcAogCi1DdXJyZW50IHRocmVhZCBYWFg6CitDdXJyZW50IHRocmVhZCBYWFggXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSB7bGluZW5vfSBpbiBkdW1wCiAgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAyOCBpbiA8bW9kdWxlPiQKICIiIi5zdHJpcCgpCkBAIC00NTksNyArNDYxLDcgQEAKICAgICAgICAgICAgIGNvdW50ID0gbG9vcHMKICAgICAgICAgICAgIGlmIHJlcGVhdDoKICAgICAgICAgICAgICAgICBjb3VudCAqPSAyCi0gICAgICAgICAgICBoZWFkZXIgPSByJ1RpbWVvdXQgXCglc1wpIVxuVGhyZWFkIDB4WzAtOWEtZl0rOlxuJyAlIHRpbWVvdXRfc3RyCisgICAgICAgICAgICBoZWFkZXIgPSByJ1RpbWVvdXQgXCglc1wpIVxuVGhyZWFkIDB4WzAtOWEtZl0rIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJyAlIHRpbWVvdXRfc3RyCiAgICAgICAgICAgICByZWdleCA9IGV4cGVjdGVkX3RyYWNlYmFjayg5LCAyMCwgaGVhZGVyLCBtaW5fY291bnQ9Y291bnQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHRyYWNlLCByZWdleCkKICAgICAgICAgZWxzZToKQEAgLTU2MSw5ICs1NjMsOSBAQAogICAgICAgICB0cmFjZSA9ICdcbicuam9pbih0cmFjZSkKICAgICAgICAgaWYgbm90IHVucmVnaXN0ZXI6CiAgICAgICAgICAgICBpZiBhbGxfdGhyZWFkczoKLSAgICAgICAgICAgICAgICByZWdleCA9ICdDdXJyZW50IHRocmVhZCBYWFg6XG4nCisgICAgICAgICAgICAgICAgcmVnZXggPSAnQ3VycmVudCB0aHJlYWQgWFhYIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZWdleCA9ICdUcmFjZWJhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6XG4nCisgICAgICAgICAgICAgICAgcmVnZXggPSAnU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6XG4nCiAgICAgICAgICAgICByZWdleCA9IGV4cGVjdGVkX3RyYWNlYmFjayg3LCAyOCwgcmVnZXgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHRyYWNlLCByZWdleCkKICAgICAgICAgZWxzZToKQEAgLTU5MCw4ICs1OTIsNSBAQAogICAgICAgICBzZWxmLmNoZWNrX3JlZ2lzdGVyKGNoYWluPVRydWUpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEZhdWx0SGFuZGxlclRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5IGIvTGliL3Rlc3QvdGVzdF9mY250bC5weQppbmRleCAxODEwYzRlLi5lM2I3ZWQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKQEAgLTEsNyArMSw0IEBACiAiIiJUZXN0IHByb2dyYW0gZm9yIHRoZSBmY250bCBDIG1vZHVsZS4KLQotT1MvMitFTVggZG9lc24ndCBzdXBwb3J0IHRoZSBmaWxlIGxvY2tpbmcgb3BlcmF0aW9ucy4KLQogIiIiCiBpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCBvcwpAQCAtMzksOCArMzYsNiBAQAogICAgICAgICBsb2NrZGF0YSA9IHN0cnVjdC5wYWNrKCdxcWloaGknLCAwLCAwLCAwLCBmY250bC5GX1dSTENLLCAwLCAwKQogICAgIGVsaWYgc3lzLnBsYXRmb3JtIGluIFsnYWl4MycsICdhaXg0JywgJ2hwLXV4QicsICd1bml4d2FyZTcnXToKICAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjaygnaGhsbGxpaScsIGZjbnRsLkZfV1JMQ0ssIDAsIDAsIDAsIDAsIDAsIDApCi0gICAgZWxpZiBzeXMucGxhdGZvcm0gaW4gWydvczJlbXgnXToKLSAgICAgICAgbG9ja2RhdGEgPSBOb25lCiAgICAgZWxzZToKICAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjaygnaGgnK3N0YXJ0X2xlbisnaGgnLCBmY250bC5GX1dSTENLLCAwLCAwLCAwLCAwLCAwKQogICAgIGlmIGxvY2tkYXRhOgpAQCAtNzIsMTggKzY3LDIwIEBACiAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLmZpbGVubygpLCBmY250bC5GX1NFVEZMLCBvcy5PX05PTkJMT0NLKQogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQoJ1N0YXR1cyBmcm9tIGZjbnRsIHdpdGggT19OT05CTE9DSzogJywgcnYpCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gWydvczJlbXgnXToKLSAgICAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLmZpbGVubygpLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCi0gICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50KCdTdHJpbmcgZnJvbSBmY250bCB3aXRoIEZfU0VUTEtXOiAnLCByZXByKHJ2KSkKKyAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYuZmlsZW5vKCksIGZjbnRsLkZfU0VUTEtXLCBsb2NrZGF0YSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdTdHJpbmcgZnJvbSBmY250bCB3aXRoIEZfU0VUTEtXOiAnLCByZXByKHJ2KSkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2ZjbnRsX2ZpbGVfZGVzY3JpcHRvcihzZWxmKToKICAgICAgICAgIyBhZ2FpbiwgYnV0IHBhc3MgdGhlIGZpbGUgcmF0aGVyIHRoYW4gbnVtZXJpYyBkZXNjcmlwdG9yCiAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCAnd2InKQogICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZiwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIG5vdCBpbiBbJ29zMmVteCddOgotICAgICAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VUTEtXLCBsb2NrZGF0YSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdTdGF0dXMgZnJvbSBmY250bCB3aXRoIE9fTk9OQkxPQ0s6ICcsIHJ2KQorICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZiwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ1N0cmluZyBmcm9tIGZjbnRsIHdpdGggRl9TRVRMS1c6ICcsIHJlcHIocnYpKQogICAgICAgICBzZWxmLmYuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfZmNudGxfYmFkX2ZpbGUoc2VsZik6CkBAIC0xMjcsNiArMTI0LDI2IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5jbG9zZShmZCkKIAorICAgIGRlZiB0ZXN0X2Zsb2NrKHNlbGYpOgorICAgICAgICAjIFNvbGFyaXMgbmVlZHMgcmVhZGFibGUgZmlsZSBmb3Igc2hhcmVkIGxvY2sKKyAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICd3YisnKQorICAgICAgICBmaWxlbm8gPSBzZWxmLmYuZmlsZW5vKCkKKyAgICAgICAgZmNudGwuZmxvY2soZmlsZW5vLCBmY250bC5MT0NLX1NIKQorICAgICAgICBmY250bC5mbG9jayhmaWxlbm8sIGZjbnRsLkxPQ0tfVU4pCisgICAgICAgIGZjbnRsLmZsb2NrKHNlbGYuZiwgZmNudGwuTE9DS19TSCB8IGZjbnRsLkxPQ0tfTkIpCisgICAgICAgIGZjbnRsLmZsb2NrKHNlbGYuZiwgZmNudGwuTE9DS19VTikKKyAgICAgICAgZmNudGwuZmxvY2soZmlsZW5vLCBmY250bC5MT0NLX0VYKQorICAgICAgICBmY250bC5mbG9jayhmaWxlbm8sIGZjbnRsLkxPQ0tfVU4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmNudGwuZmxvY2ssIC0xLCBmY250bC5MT0NLX1NIKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZjbnRsLmZsb2NrLCAnc3BhbScsIGZjbnRsLkxPQ0tfU0gpCisKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfZmxvY2tfb3ZlcmZsb3coc2VsZik6CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmNudGwuZmxvY2ssIF90ZXN0Y2FwaS5JTlRfTUFYKzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkxPQ0tfU0gpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChUZXN0RmNudGwpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKaW5kZXggNzZiMTY5NC4uZDU0ZTk3NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQpAQCAtODcsNyArODcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQogCiAgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWRpbnRvIik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSU9FcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT1NFcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuX19leGl0X18oKnN5cy5leGNfaW5mbygpKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0UmVhZFdoZW5Xcml0aW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5mLnJlYWQpCiAKIGNsYXNzIENBdXRvRmlsZVRlc3RzKEF1dG9GaWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBvcGVuID0gaW8ub3BlbgpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgICAgICAgICAgICAgZCA9IGludChmLnJlYWQoKS5kZWNvZGUoImFzY2lpIikpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnJvciBzZXR0aW5nIGJ1ZmZlciBzaXplICVkOiAlcycgJSAocywgc3RyKG1zZykpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkKaW5kZXggMDk1OTk3OS4uYzdjYjNmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weQpAQCAtMSw0ICsxLDMgQEAKLQogaW1wb3J0IG9zLCBmaWxlY21wLCBzaHV0aWwsIHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydApAQCAtNDAsMTUgKzM5LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLmRpciksCiAgICAgICAgICAgICAgICAgICAgICJGaWxlIGFuZCBkaXJlY3RvcnkgY29tcGFyZSBhcyBlcXVhbCIpCiAKKyAgICBkZWYgdGVzdF9jYWNoZV9jbGVhcihzZWxmKToKKyAgICAgICAgZmlyc3RfY29tcGFyZSA9IGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUsIHNoYWxsb3c9RmFsc2UpCisgICAgICAgIHNlY29uZF9jb21wYXJlID0gZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfZGlmZiwgc2hhbGxvdz1GYWxzZSkKKyAgICAgICAgZmlsZWNtcC5jbGVhcl9jYWNoZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZmlsZWNtcC5fY2FjaGUpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FjaGUgbm90IGNsZWFyZWQgYWZ0ZXIgY2FsbGluZyBjbGVhcl9jYWNoZSIpCisKIGNsYXNzIERpckNvbXBhcmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKICAgICAgICAgc2VsZi5kaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyJykKICAgICAgICAgc2VsZi5kaXJfc2FtZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICdkaXItc2FtZScpCiAgICAgICAgIHNlbGYuZGlyX2RpZmYgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyLWRpZmYnKQorCisgICAgICAgICMgQW5vdGhlciBkaXIgaXMgY3JlYXRlZCB1bmRlciBkaXJfc2FtZSwgYnV0IGl0IGhhcyBhIG5hbWUgZnJvbSB0aGUKKyAgICAgICAgIyBpZ25vcmVkIGxpc3Qgc28gaXQgc2hvdWxkIG5vdCBhZmZlY3QgdGVzdGluZyByZXN1bHRzLgorICAgICAgICBzZWxmLmRpcl9pZ25vcmVkID0gb3MucGF0aC5qb2luKHNlbGYuZGlyX3NhbWUsICcuaGcnKQorCiAgICAgICAgIHNlbGYuY2FzZWluc2Vuc2l0aXZlID0gb3MucGF0aC5ub3JtY2FzZSgnQScpID09IG9zLnBhdGgubm9ybWNhc2UoJ2EnKQogICAgICAgICBkYXRhID0gJ0NvbnRlbnRzIG9mIGZpbGUgZ28gaGVyZS5cbicKLSAgICAgICAgZm9yIGRpciBpbiBbc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmZdOgorICAgICAgICBmb3IgZGlyIGluIChzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgc2VsZi5kaXJfZGlmZiwgc2VsZi5kaXJfaWdub3JlZCk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpciwgVHJ1ZSkKICAgICAgICAgICAgIG9zLm1rZGlyKGRpcikKICAgICAgICAgICAgIGlmIHNlbGYuY2FzZWluc2Vuc2l0aXZlIGFuZCBkaXIgaXMgc2VsZi5kaXJfc2FtZToKQEAgLTY0LDkgKzc1LDExIEBACiAgICAgICAgIG91dHB1dC5jbG9zZSgpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXIpCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXJfc2FtZSkKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcl9kaWZmKQorICAgICAgICBmb3IgZGlyIGluIChzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgc2VsZi5kaXJfZGlmZik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpcikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaWdub3JlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJbignLmhnJywgZmlsZWNtcC5ERUZBVUxUX0lHTk9SRVMpCiAKICAgICBkZWYgdGVzdF9jbXBmaWxlcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyLCBbJ2ZpbGUnXSkgPT0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKaW5kZXggMWU3MDY0MS4uZGI2MDgyYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKQEAgLTIyLDcgKzIyLDcgQEAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiBmcm9tIGZpbGVpbnB1dCBpbXBvcnQgRmlsZUlucHV0LCBob29rX2VuY29kZWQKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTiwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdW5saW5rIGFzIHNhZmVfdW5saW5rCiAKIApAQCAtMjI0LDggKzIyNCwxMCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIHRyeSBvcGVuaW5nIGluIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUKICAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgW2IiQVxuQlxyXG5DXHJEIl0sIG1vZGU9IndiIikKLSAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPXQxLCBtb2RlPSJVIikKLSAgICAgICAgICAgIGxpbmVzID0gbGlzdChmaSkKKyAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz10MSwgbW9kZT0iVSIpCisgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgbGluZXMgPSBsaXN0KGZpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWyJBXG4iLCAiQlxuIiwgIkNcbiIsICJEIl0pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxKQpAQCAtMjc1LDggKzI3Nyw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgWyIiXSkKICAgICAgICAgICAgIHdpdGggRmlsZUlucHV0KGZpbGVzPXQxKSBhcyBmaToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLl9maWxlcywgKCkpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxKQpAQCAtODM1LDIyICs4MzcsNiBAQAogICAgICAgICBzZWxmLmFzc2VydElzKGt3YXJncy5wb3AoJ2VuY29kaW5nJyksIGVuY29kaW5nKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGt3YXJncykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdCgKLSAgICAgICAgQnVmZmVyU2l6ZXNUZXN0cywKLSAgICAgICAgRmlsZUlucHV0VGVzdHMsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2lucHV0LAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9jbG9zZSwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfbmV4dGZpbGUsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2ZpbGVuYW1lLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9saW5lbm8sCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2ZpbGVsaW5lbm8sCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2ZpbGVubywKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfaXNmaXJzdGxpbmUsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2lzc3RkaW4sCi0gICAgICAgIFRlc3RfaG9va19jb21wcmVzc2VkLAotICAgICAgICBUZXN0X2hvb2tfZW5jb2RlZCwKLSAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkKaW5kZXggNDQ0YmU5MS4uYzM3NDgyZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkKQEAgLTE0NCwxNiArMTQ0LDE2IEBACiAgICAgICAgICMgVW5peCBjYWxscyBkaXJjaGVjaygpIGFuZCByZXR1cm5zICJbRXJybm8gMjFdOiBJcyBhIGRpcmVjdG9yeSIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgX0ZpbGVJTygnLicsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZS5lcnJubywgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maWxlbmFtZSwgIi4iKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgSU9FcnJvciIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBPU0Vycm9yIikKIAogICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLCAidGVzdCBvbmx5IHdvcmtzIG9uIGEgUE9TSVgtbGlrZSBzeXN0ZW0iKQogICAgIGRlZiB0ZXN0T3BlbkRpckZEKHNlbGYpOgogICAgICAgICBmZCA9IG9zLm9wZW4oJy4nLCBvcy5PX1JET05MWSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIF9GaWxlSU8oZmQsICdyJykKICAgICAgICAgb3MuY2xvc2UoZmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSVNESVIpCkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiB3cmFwcGVyCiAKQEAgLTE4MywxNCArMTgzLDE0IEBACiAgICAgICAgICAgICBvcy5jbG9zZShmLmZpbGVubygpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgZikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUJBREYpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIElPRXJyb3IiKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIE9TRXJyb3IiKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIHdyYXBwZXIKIApAQCAtMjM3LDcgKzIzNyw3IEBACiAgICAgZGVmIFJlb3BlbkZvclJlYWQoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyJykKICAgICAgICAgb3MuY2xvc2Uoc2VsZi5mLmZpbGVubygpKQpAQCAtMjg1LDcgKzI4NSw3IEBACiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGYgPSBfRmlsZUlPKCIvZGV2L3R0eSIsICJhIikKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyBXaGVuIHJ1biBpbiBhIGNyb24gam9iIHRoZXJlIGp1c3QgYXJlbid0IGFueQogICAgICAgICAgICAgICAgICAgICAjIHR0eXMsIHNvIHNraXAgdGhlIHRlc3QuICBUaGlzIGFsc28gaGFuZGxlcyBvdGhlcgogICAgICAgICAgICAgICAgICAgICAjIE9TJ2VzIHRoYXQgZG9uJ3Qgc3VwcG9ydCAvZGV2L3R0eS4KQEAgLTM2MCw3ICszNjAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBfRmlsZUlPLCBtYWtlX2JhZF9mZCgpKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIGltcG9ydCBtc3ZjcnQKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1zdmNydC5nZXRfb3NmaGFuZGxlLCBtYWtlX2JhZF9mZCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXN2Y3J0LmdldF9vc2ZoYW5kbGUsIG1ha2VfYmFkX2ZkKCkpCiAKICAgICBAY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RJbnZhbGlkRmRfb3ZlcmZsb3coc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbmFsaXphdGlvbi5weSBiL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYWMxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbmFsaXphdGlvbi5weQpAQCAtMCwwICsxLDUyMiBAQAorIiIiCitUZXN0cyBmb3Igb2JqZWN0IGZpbmFsaXphdGlvbiBzZW1hbnRpY3MsIGFzIG91dGxpbmVkIGluIFBFUCA0NDIuCisiIiIKKworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBnYworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgorCit0cnk6CisgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHdpdGhfdHBfZGVsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZGVmIHdpdGhfdHBfZGVsKGNscyk6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3JlcXVpcmVzIF90ZXN0Y2FwaS53aXRoX3RwX2RlbCcpCisgICAgICAgIHJldHVybiBDCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIE5vbkdDU2ltcGxlQmFzZToKKyAgICAiIiIKKyAgICBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIHRoZSBvYmplY3RzIHVuZGVyIHRlc3QsIGVxdWlwcGVkIHdpdGggdmFyaW91cworICAgIHRlc3RpbmcgZmVhdHVyZXMuCisgICAgIiIiCisKKyAgICBzdXJ2aXZvcnMgPSBbXQorICAgIGRlbF9jYWxscyA9IFtdCisgICAgdHBfZGVsX2NhbGxzID0gW10KKyAgICBlcnJvcnMgPSBbXQorCisgICAgX2NsZWFuaW5nID0gRmFsc2UKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NsZWFudXAoY2xzKToKKyAgICAgICAgY2xzLnN1cnZpdm9ycy5jbGVhcigpCisgICAgICAgIGNscy5lcnJvcnMuY2xlYXIoKQorICAgICAgICBnYy5nYXJiYWdlLmNsZWFyKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGNscy5kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICBjbHMudHBfZGVsX2NhbGxzLmNsZWFyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHRlc3QoY2xzKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgY29udGV4dCBtYW5hZ2VyIHRvIHVzZSBhcm91bmQgYWxsIGZpbmFsaXphdGlvbiB0ZXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CisgICAgICAgICAgICBjbHMuZGVsX2NhbGxzLmNsZWFyKCkKKyAgICAgICAgICAgIGNscy50cF9kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICAgICAgTm9uR0NTaW1wbGVCYXNlLl9jbGVhbmluZyA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgICAgICBpZiBjbHMuZXJyb3JzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBjbHMuZXJyb3JzWzBdCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIE5vbkdDU2ltcGxlQmFzZS5fY2xlYW5pbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgY2xzLl9jbGVhbnVwKCkKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGUgb2JqZWN0IGlzIHNhbmUgKG5vbi1icm9rZW4pLgorICAgICAgICAiIiIKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUEVQIDQ0MiBmaW5hbGl6ZXIuICBSZWNvcmQgdGhhdCB0aGlzIHdhcyBjYWxsZWQsIGNoZWNrIHRoZQorICAgICAgICBvYmplY3QgaXMgaW4gYSBzYW5lIHN0YXRlLCBhbmQgaW52b2tlIGEgc2lkZSBlZmZlY3QuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xlYW5pbmc6CisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2FsbHMuYXBwZW5kKGlkKHNlbGYpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZGVfZWZmZWN0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGUpCisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBIHNpZGUgZWZmZWN0IGNhbGxlZCBvbiBkZXN0cnVjdGlvbi4KKyAgICAgICAgIiIiCisKKworY2xhc3MgU2ltcGxlQmFzZShOb25HQ1NpbXBsZUJhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmlkXyA9IGlkKHNlbGYpCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5pZF8gPT0gaWQoc2VsZikKKworCitjbGFzcyBOb25HQyhOb25HQ1NpbXBsZUJhc2UpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKK2NsYXNzIE5vbkdDUmVzdXJyZWN0b3IoTm9uR0NTaW1wbGVCYXNlKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIHNpZGVfZWZmZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzdXJyZWN0IHNlbGYgYnkgc3RvcmluZyBzZWxmIGluIGEgY2xhc3Mtd2lkZSBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zdXJ2aXZvcnMuYXBwZW5kKHNlbGYpCisKK2NsYXNzIFNpbXBsZShTaW1wbGVCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFNpbXBsZVJlc3VycmVjdG9yKE5vbkdDUmVzdXJyZWN0b3IsIFNpbXBsZUJhc2UpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0QmFzZToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRfZ2FyYmFnZSA9IGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgZ2MuZ2FyYmFnZVs6XSA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgTm9uZSBvZiB0aGUgdGVzdHMgaGVyZSBzaG91bGQgcHV0IGFueXRoaW5nIGluIGdjLmdhcmJhZ2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5nYXJiYWdlLCBbXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzZWxmLm9sZF9nYXJiYWdlCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiBhc3NlcnRfZGVsX2NhbGxzKHNlbGYsIGlkcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKFNpbXBsZUJhc2UuZGVsX2NhbGxzKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgYXNzZXJ0X3RwX2RlbF9jYWxscyhzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChTaW1wbGVCYXNlLnRwX2RlbF9jYWxscyksIHNvcnRlZChpZHMpKQorCisgICAgZGVmIGFzc2VydF9zdXJ2aXZvcnMoc2VsZiwgaWRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaWQoeCkgZm9yIHggaW4gU2ltcGxlQmFzZS5zdXJ2aXZvcnMpLCBzb3J0ZWQoaWRzKSkKKworICAgIGRlZiBhc3NlcnRfZ2FyYmFnZShzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpZCh4KSBmb3IgeCBpbiBnYy5nYXJiYWdlKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgY2xlYXJfc3Vydml2b3JzKHNlbGYpOgorICAgICAgICBTaW1wbGVCYXNlLnN1cnZpdm9ycy5jbGVhcigpCisKKworY2xhc3MgU2ltcGxlRmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIHdpdGhvdXQgcmVmY3ljbGVzLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFNpbXBsZSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3Jlc3VycmVjdChzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBTaW1wbGVSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfbm9uX2djKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChzKSkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9ub25fZ2NfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHMpKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N1cnZpdm9ycygpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMgKiAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKworCitjbGFzcyBTZWxmQ3ljbGVCYXNlOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5yZWYgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGFzc2VydCBzZWxmLnJlZiBpcyBzZWxmCisKK2NsYXNzIFNpbXBsZVNlbGZDeWNsZShTZWxmQ3ljbGVCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgU2VsZkN5Y2xlUmVzdXJyZWN0b3IoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlUmVzdXJyZWN0b3IpOgorICAgIHBhc3MKKworY2xhc3MgU3VpY2lkYWxTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGxpY2l0bHkgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucmVmID0gTm9uZQorCisKK2NsYXNzIFNlbGZDeWNsZUZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhbiBvYmplY3QgaGF2aW5nIGEgc2luZ2xlIGN5Y2xpYyByZWZlcmVuY2UgdG8KKyAgICBpdHNlbGYuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2ltcGxlU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBfX2RlbF9fIGNhbiByZXN1cnJlY3QgdGhlIG9iamVjdCBiZWluZyBmaW5hbGl6ZWQuCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2VsZkN5Y2xlUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICAjIFhYWCBpcyB0aGlzIGRlc2lyYWJsZT8KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgICMgV2hlbiB0cnlpbmcgdG8gZGVzdHJveSB0aGUgb2JqZWN0IGEgc2Vjb25kIHRpbWUsIF9fZGVsX18KKyAgICAgICAgICAgICMgaXNuJ3QgY2FsbGVkIGFueW1vcmUgKGFuZCB0aGUgb2JqZWN0IGlzbid0IHJlc3VycmVjdGVkKS4KKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9zdWljaWRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIEdDIGlzIGFibGUgdG8gZGVhbCB3aXRoIGFuIG9iamVjdCB0aGF0IGtpbGxzIGl0cyBsYXN0CisgICAgICAgICMgcmVmZXJlbmNlIGR1cmluZyBfX2RlbF9fLgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFN1aWNpZGFsU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKworY2xhc3MgQ2hhaW5lZEJhc2U6CisKKyAgICBkZWYgY2hhaW4oc2VsZiwgbGVmdCk6CisgICAgICAgIHNlbGYuc3VpY2lkZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CisgICAgICAgIGxlZnQucmlnaHQgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGlmIHNlbGYuc3VpY2lkZWQ6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLnJpZ2h0IGlzIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxlZnQgPSBzZWxmLmxlZnQKKyAgICAgICAgICAgIGlmIGxlZnQuc3VpY2lkZWQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlZnQucmlnaHQgaXMgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVmdC5yaWdodCBpcyBzZWxmCisgICAgICAgICAgICByaWdodCA9IHNlbGYucmlnaHQKKyAgICAgICAgICAgIGlmIHJpZ2h0LnN1aWNpZGVkOgorICAgICAgICAgICAgICAgIGFzc2VydCByaWdodC5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJpZ2h0LmxlZnQgaXMgc2VsZgorCitjbGFzcyBTaW1wbGVDaGFpbmVkKENoYWluZWRCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgQ2hhaW5lZFJlc3VycmVjdG9yKENoYWluZWRCYXNlLCBTaW1wbGVSZXN1cnJlY3Rvcik6CisgICAgcGFzcworCitjbGFzcyBTdWljaWRhbENoYWluZWQoQ2hhaW5lZEJhc2UsIFNpbXBsZSk6CisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBFeHBsaWNpdGx5IGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1aWNpZGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmxlZnQgPSBOb25lCisgICAgICAgIHNlbGYucmlnaHQgPSBOb25lCisKKworY2xhc3MgQ3ljbGVDaGFpbkZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhIGN5Y2xpYyBjaGFpbi4gIFRoZXNlIHRlc3RzIGFyZSBzaW1pbGFyIGluCisgICAgc3Bpcml0IHRvIHRoZSBzZWxmLWN5Y2xlIHRlc3RzIGFib3ZlLCBidXQgdGhlIGNvbGxlY3RhYmxlIG9iamVjdAorICAgIGdyYXBoIGlzbid0IHRyaXZpYWwgYW55bW9yZS4KKyAgICAiIiIKKworICAgIGRlZiBidWlsZF9jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgbm9kZXMgPSBbY2xzKCkgZm9yIGNscyBpbiBjbGFzc2VzXQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obm9kZXMpKToKKyAgICAgICAgICAgIG5vZGVzW2ldLmNoYWluKG5vZGVzW2ktMV0pCisgICAgICAgIHJldHVybiBub2RlcworCisgICAgZGVmIGNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oc2VsZiwgY2xhc3Nlcyk6CisgICAgICAgIE4gPSBsZW4oY2xhc3NlcykKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIG5vZGVzID0gc2VsZi5idWlsZF9jaGFpbihjbGFzc2VzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt3cigpIGZvciB3ciBpbiB3cnNdLCBbTm9uZV0gKiBOKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorCisgICAgZGVmIGNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgTiA9IGxlbihjbGFzc2VzKQorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgbm9kZXMgPSBzZWxmLmJ1aWxkX2NoYWluKGNsYXNzZXMpCisgICAgICAgICAgICBOID0gbGVuKG5vZGVzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgc3Vydml2b3JfaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzIGlmIGlzaW5zdGFuY2UocywgU2ltcGxlUmVzdXJyZWN0b3IpXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoc3Vydml2b3JfaWRzKQorICAgICAgICAgICAgIyBYWFggZGVzaXJhYmxlPworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbd3IoKSBmb3Igd3IgaW4gd3JzXSwgW05vbmVdICogTikKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU2ltcGxlQ2hhaW5lZF0gKiAzKQorCisgICAgZGVmIHRlc3RfaG9tb2dlbm91c19yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKFtDaGFpbmVkUmVzdXJyZWN0b3JdICogMykKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXNfc3VpY2lkYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU3VpY2lkYWxDaGFpbmVkXSAqIDMpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfc3VpY2lkYWxfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oW1N1aWNpZGFsQ2hhaW5lZCwgU2ltcGxlQ2hhaW5lZF0gKiAyKQorCisgICAgZGVmIHRlc3RfaGV0ZXJvZ2Vub3VzX3N1aWNpZGFsX3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub25fcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW1N1aWNpZGFsQ2hhaW5lZF0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3Rfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkXSAqIDIpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfcmVzdXJyZWN0X3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXN1cnJlY3RpbmdfY2hhaW4oCisgICAgICAgICAgICBbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkLCBTdWljaWRhbENoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3RfdGhyZWUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW0NoYWluZWRSZXN1cnJlY3Rvcl0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMiArIFtTdWljaWRhbENoYWluZWRdICogMikKKworCisjIE5PVEU6IHRoZSB0cF9kZWwgc2xvdCBpc24ndCBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCwgc28gd2UgaGF2ZSB0byBjYWxsCisjIHdpdGhfdHBfZGVsKCkgZm9yIGVhY2ggaW5zdGFudGlhdGVkIGNsYXNzLgorCitjbGFzcyBMZWdhY3lCYXNlKFNpbXBsZUJhc2UpOgorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRG8gbm90IGludm9rZSBzaWRlX2VmZmVjdCBoZXJlLCBzaW5jZSB3ZSBhcmUgbm93IGV4ZXJjaXNpbmcKKyAgICAgICAgICAgICMgdGhlIHRwX2RlbCBzbG90LgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCisgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBMZWdhY3kgKHByZS1QRVAgNDQyKSBmaW5hbGl6ZXIsIG1hcHBlZCB0byBhIHRwX2RlbCBzbG90LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYudHBfZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgICAgICAgICAgc2VsZi5zaWRlX2VmZmVjdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCitAd2l0aF90cF9kZWwKK2NsYXNzIExlZ2FjeShMZWdhY3lCYXNlKToKKyAgICBwYXNzCisKK0B3aXRoX3RwX2RlbAorY2xhc3MgTGVnYWN5UmVzdXJyZWN0b3IoTGVnYWN5QmFzZSk6CisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXN1cnJlY3Qgc2VsZiBieSBzdG9yaW5nIHNlbGYgaW4gYSBjbGFzcy13aWRlIGxpc3QuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1cnZpdm9ycy5hcHBlbmQoc2VsZikKKworQHdpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3lTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgTGVnYWN5QmFzZSk6CisgICAgcGFzcworCisKK0BzdXBwb3J0LmNweXRob25fb25seQorY2xhc3MgTGVnYWN5RmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIG9mIG9iamVjdHMgd2l0aCBhIHRwX2RlbC4KKyAgICAiIiIKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBUaGVzZSB0ZXN0cyBuZWVkIHRvIGNsZWFuIHVwIGEgYml0IG1vcmUsIHNpbmNlIHRoZXkgY3JlYXRlCisgICAgICAgICMgdW5jb2xsZWN0YWJsZSBvYmplY3RzLgorICAgICAgICBnYy5nYXJiYWdlLmNsZWFyKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfbGVnYWN5KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IExlZ2FjeSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhpZHMpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IExlZ2FjeVJlc3VycmVjdG9yKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgICMgd2Vha3JlZnMgYXJlIGNsZWFyZWQgYmVmb3JlIHRwX2RlbCBpcyBjYWxsZWQuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N1cnZpdm9ycygpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzICogMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9zZWxmX2N5Y2xlKHNlbGYpOgorICAgICAgICAjIFNlbGYtY3ljbGVzIHdpdGggbGVnYWN5IGZpbmFsaXplcnMgZW5kIHVwIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gTGVnYWN5U2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2UoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh3cigpLCBOb25lKQorICAgICAgICAgICAgIyBCcmVhayB0aGUgY3ljbGUgdG8gYWxsb3cgY29sbGVjdGlvbgorICAgICAgICAgICAgZ2MuZ2FyYmFnZVswXS5yZWYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2UoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkgYi9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5CmluZGV4IDk2ZDkwN2EuLmUxZTFmMDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQpAQCAtNDEsNiArNDEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi0uIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsIGIiLSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmxvYXQsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIm5vdCAnZGljdCciLCBmbG9hdCwge30pCiAgICAgICAgICMgTG9uZSBzdXJyb2dhdGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBmbG9hdCwgJ1x1RDhGMCcpCiAgICAgICAgICMgY2hlY2sgdGhhdCB3ZSBkb24ndCBhY2NlcHQgYWx0ZXJuYXRlIGV4cG9uZW50IG1hcmtlcnMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkgYi9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CmluZGV4IDgxOTJjMzguLmUwNjI2ZGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQpAQCAtMSw3ICsxLDcgQEAKICIiIlRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3QgZm9yaygpIGJlaGF2aW9yLgogIiIiCiAKLWltcG9ydCBpbXAKK2ltcG9ydCBfaW1wIGFzIGltcAogaW1wb3J0IG9zCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CmluZGV4IGVhNWE3MzEuLmZjNzFlNDggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CkBAIC0xNDIsNyArMTQyLDggQEAKICAgICAgICAgdGVzdGZvcm1hdCgiJSMrMDI3LjIzWCIsIGJpZywgIiswWDAwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCiAgICAgICAgICMgc2FtZSwgZXhjZXB0IG5vIDAgZmxhZwogICAgICAgICB0ZXN0Zm9ybWF0KCIlIysyNy4yM1giLCBiaWcsICIgKzBYMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIGZsb2F0KGJpZyksICIxMjM0NTZfX19fX19fX19fX19fX18iLCA2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiV4IiwgZmxvYXQoYmlnKSwgIjEyMzQ1Nl9fX19fX19fX19fX19fXyIsIDYpCiAgICAgICAgIGJpZyA9IDBvMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAgICMgMzIgb2N0YWwgZGlnaXRzCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgYmlnLCAiMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIC1iaWcsICItMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQpAQCAtMTgyLDcgKzE4Myw4IEBACiAgICAgICAgIHRlc3Rmb3JtYXQoIiUwMzQuMzNvIiwgYmlnLCAiMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCiAgICAgICAgICMgYmFzZSBtYXJrZXIgc2hvdWxkbid0IGNoYW5nZSB0aGF0CiAgICAgICAgIHRlc3Rmb3JtYXQoIiUwIzM0LjMzbyIsIGJpZywgIjBvMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCBmbG9hdChiaWcpLCAiMTIzNDU2X19fX19fX19fX19fX19fX19fX19fX19fX18iLCA2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgZmxvYXQoYmlnKSwgIjEyMzQ1Nl9fX19fX19fX19fX19fX19fX19fX19fX19fIiwgNikKICAgICAgICAgIyBTb21lIHNtYWxsIGludHMsIGluIGJvdGggUHl0aG9uIGludCBhbmQgZmxhdm9ycykuCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVkIiwgNDIsICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVkIiwgLTQyLCAiLTQyIikKQEAgLTE5Myw3ICsxOTUsOCBAQAogICAgICAgICB0ZXN0Zm9ybWF0KCIlI3giLCAxLCAiMHgxIikKICAgICAgICAgdGVzdGZvcm1hdCgiJSNYIiwgMSwgIjBYMSIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiUjWCIsIDEsICIwWDEiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlI3giLCAxLjAsICIweDEiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiUjeCIsIDEuMCwgIjB4MSIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiUjbyIsIDEsICIwbzEiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlI28iLCAxLCAiMG8xIikKICAgICAgICAgdGVzdGZvcm1hdCgiJSNvIiwgMCwgIjBvMCIpCkBAIC0yMTAsMTIgKzIxMywxNCBAQAogICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIC0weDQyLCAiLTQyIikKICAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCAweDQyLCAiNDIiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIC0weDQyLCAiLTQyIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCBmbG9hdCgweDQyKSwgIjQyIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIGZsb2F0KDB4NDIpLCAiNDIiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIDBvNDIsICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgLTBvNDIsICItNDIiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIDBvNDIsICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgLTBvNDIsICItNDIiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIGZsb2F0KDBvNDIpLCAiNDIiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgZmxvYXQoMG80MiksICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVyIiwgIlx1MDM3OCIsICInXFx1MDM3OCciKSAgIyBub24gcHJpbnRhYmxlCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVhIiwgIlx1MDM3OCIsICInXFx1MDM3OCciKSAgIyBub24gcHJpbnRhYmxlCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVyIiwgIlx1MDM3NCIsICInXHUwMzc0JyIpICAgIyBwcmludGFibGUKQEAgLTMwNywxMCArMzEyLDI1IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsIG9sZGxvYykKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X29wdGltaXNhdGlvbnMoc2VsZik6CisgICAgICAgIHRleHQgPSAiYWJjZGUiICMgNSBjaGFyYWN0ZXJzCiAKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiJXMiICUgdGV4dCwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiJS41cyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlLjEwcyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlMXMiICUgdGV4dCwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiJTVzIiAlIHRleHQsIHRleHQpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGb3JtYXRUZXN0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MH0iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezA6c30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezA6LjVzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDouMTBzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDoxc30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezA6NXN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXh0ICUgKCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGV4dC5mb3JtYXQoKSwgdGV4dCkKIAogICAgIGRlZiB0ZXN0X3ByZWNpc2lvbihzZWxmKToKICAgICAgICAgZiA9IDEuMgpAQCAtMzE4LDE0ICszMzgsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoZiwgIi4zZiIpLCAiMS4yMDAiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgZm9ybWF0KGYsICIuJXNmIiAlIChzeXMubWF4c2l6ZSArIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAicHJlY2lzaW9uIHRvbyBiaWciKQogCiAgICAgICAgIGMgPSBjb21wbGV4KGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGMsICIuMGYiKSwgIjErMGoiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChjLCAiLjNmIiksICIxLjIwMCswLjAwMGoiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgZm9ybWF0KGMsICIuJXNmIiAlIChzeXMubWF4c2l6ZSArIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAicHJlY2lzaW9uIHRvbyBiaWciKQogCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfcHJlY2lzaW9uX2NfbGltaXRzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQppbmRleCAxZmFkOTIxLi4zMzM2NTMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQpAQCAtMTQ2LDkgKzE0NiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigtMC4wKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDM2MDI4Nzk3MDE4OTYzOTcsIDM2MDI4Nzk3MDE4OTYzOTY4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKDAuMSkpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJy1pbmYnKSkKKyAgICAgICAgIyBidWcgMTY0Njk6IGVycm9yIHR5cGVzIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggZmxvYXQgLT4gaW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBmbG9hdCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RJbml0RnJvbURlY2ltYWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDExLCAxMCksCkBAIC0xNTcsMTAgKzE1OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnMy41ZS0yJykpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCcuMDAwZTIwJykpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCdzbmFuJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRiwgRGVjaW1hbCgnc25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBEZWNpbWFsKCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RGcm9tU3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg1LCAxKSwgX2NvbXBvbmVudHMoRigiNSIpKSkKQEAgLTI0OCwxNCArMjUwLDE1IEBACiAKICAgICAgICAgaW5mID0gMWUxMDAwCiAgICAgICAgIG5hbiA9IGluZiAtIGluZgorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBmbG9hdCAtPiBpbnQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIGluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgLWluZiB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1pbmYgdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgLWluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIG5hbikKIAogICAgIGRlZiB0ZXN0RnJvbURlY2ltYWwoc2VsZik6CkBAIC0yNjgsMTcgKzI3MSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLSBGKDEsIDEwKiozMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiMC4iICsgIjkiICogMzApKSkKIAorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBJbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IEluZmluaXR5IHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgiaW5mIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAogICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwsIERlY2ltYWwoIi1pbmYiKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgibmFuIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IHNOYU4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJDYW5ub3QgY29udmVydCBzTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgic25hbiIpKQogCiAgICAgZGVmIHRlc3RMaW1pdERlbm9taW5hdG9yKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFtZS5weSBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkNTc4MAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKQEAgLTAsMCArMSwxMTYgQEAKK2ltcG9ydCBnYworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgorCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKworCitjbGFzcyBDbGVhclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciBmcmFtZS5jbGVhcigpLgorICAgICIiIgorCisgICAgZGVmIGlubmVyKHNlbGYsIHg9NSwgKiprd2FyZ3MpOgorICAgICAgICAxLzAKKworICAgIGRlZiBvdXRlcihzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuaW5uZXIoKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjID0gZQorICAgICAgICByZXR1cm4gZXhjCisKKyAgICBkZWYgY2xlYXJfdHJhY2ViYWNrX2ZyYW1lcyhzZWxmLCB0Yik6CisgICAgICAgICIiIgorICAgICAgICBDbGVhciBhbGwgZnJhbWVzIGluIGEgdHJhY2ViYWNrLgorICAgICAgICAiIiIKKyAgICAgICAgd2hpbGUgdGIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0Yi50Yl9mcmFtZS5jbGVhcigpCisgICAgICAgICAgICB0YiA9IHRiLnRiX25leHQKKworICAgIGRlZiB0ZXN0X2NsZWFyX2xvY2FscyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IEMoKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGMpCisgICAgICAgIGV4YyA9IHNlbGYub3V0ZXIoYz1jKQorICAgICAgICBkZWwgYworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICAjIEEgcmVmZXJlbmNlIHRvIGMgaXMgaGVsZCB0aHJvdWdoIHRoZSBmcmFtZXMKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChOb25lLCB3cigpKQorICAgICAgICBzZWxmLmNsZWFyX3RyYWNlYmFja19mcmFtZXMoZXhjLl9fdHJhY2ViYWNrX18pCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgICMgVGhlIHJlZmVyZW5jZSB3YXMgcmVsZWFzZWQgYnkgLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhOb25lLCB3cigpKQorCisgICAgZGVmIHRlc3RfY2xlYXJfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBlbmRseSA9IEZhbHNlCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICBub25sb2NhbCBlbmRseQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICAgICAgaW5uZXIoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBlbmRseSA9IFRydWUKKyAgICAgICAgZ2VuID0gZygpCisgICAgICAgIG5leHQoZ2VuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVuZGx5KQorICAgICAgICAjIENsZWFyaW5nIHRoZSBmcmFtZSBjbG9zZXMgdGhlIGdlbmVyYXRvcgorICAgICAgICBnZW4uZ2lfZnJhbWUuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZW5kbHkpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9leGVjdXRpbmcoc2VsZik6CisgICAgICAgICMgQXR0ZW1wdGluZyB0byBjbGVhciBhbiBleGVjdXRpbmcgZnJhbWUgaXMgZm9yYmlkZGVuLgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBmID0gZS5fX3RyYWNlYmFja19fLnRiX2ZyYW1lCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGYuY2xlYXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBmLmZfYmFjay5jbGVhcigpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9leGVjdXRpbmdfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICAjIEF0dGVtcHRpbmcgdG8gY2xlYXIgYW4gZXhlY3V0aW5nIGdlbmVyYXRvciBmcmFtZSBpcyBmb3JiaWRkZW4uCisgICAgICAgIGVuZGx5ID0gRmFsc2UKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGVuZGx5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBmID0gZS5fX3RyYWNlYmFja19fLnRiX2ZyYW1lCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBmLmNsZWFyKCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGYuZl9iYWNrLmNsZWFyKCkKKyAgICAgICAgICAgICAgICB5aWVsZCBmCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGVuZGx5ID0gVHJ1ZQorICAgICAgICBnZW4gPSBnKCkKKyAgICAgICAgZiA9IG5leHQoZ2VuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVuZGx5KQorICAgICAgICAjIENsZWFyaW5nIHRoZSBmcmFtZSBjbG9zZXMgdGhlIGdlbmVyYXRvcgorICAgICAgICBmLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVuZGx5KQorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfY2xlYXJfcmVmY3ljbGVzKHNlbGYpOgorICAgICAgICAjIC5jbGVhcigpIGRvZXNuJ3QgbGVhdmUgYW55IHJlZmN5Y2xlIGJlaGluZAorICAgICAgICB3aXRoIHN1cHBvcnQuZGlzYWJsZV9nYygpOgorICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBjID0gQygpCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGMpCisgICAgICAgICAgICBleGMgPSBzZWxmLm91dGVyKGM9YykKKyAgICAgICAgICAgIGRlbCBjCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KE5vbmUsIHdyKCkpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3RyYWNlYmFja19mcmFtZXMoZXhjLl9fdHJhY2ViYWNrX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKE5vbmUsIHdyKCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zyb3plbi5weSBiL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDY3NjFjLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotIyBUZXN0IHRoZSBmcm96ZW4gbW9kdWxlIGRlZmluZWQgaW4gZnJvemVuLmMuCi0KLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzCi0KLWNsYXNzIEZyb3plblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIG1vZHVsZV9hdHRycyA9IGZyb3plbnNldChbJ19fYnVpbHRpbnNfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJ10pCi0gICAgcGFja2FnZV9hdHRycyA9IGZyb3plbnNldChsaXN0KG1vZHVsZV9hdHRycykgKyBbJ19fcGF0aF9fJ10pCi0KLSAgICBkZWYgdGVzdF9mcm96ZW4oc2VsZik6Ci0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX2hlbGxvX18KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9faGVsbG9fXyBmYWlsZWQ6IiArIHN0cih4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19oZWxsb19fLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgZXhwZWN0ID0gc2V0KHNlbGYubW9kdWxlX2F0dHJzKQotICAgICAgICAgICAgZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9faGVsbG9fXykpLCBleHBlY3QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnSGVsbG8gd29ybGQhXG4nKQotCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fIGZhaWxlZDoiICsgc3RyKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX3BoZWxsb19fLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgZXhwZWN0ID0gc2V0KHNlbGYucGFja2FnZV9hdHRycykKLSAgICAgICAgICAgIGV4cGVjdC5hZGQoJ2luaXRpYWxpemVkJykKLSAgICAgICAgICAgIGlmIG5vdCAiX19waGVsbG9fXy5zcGFtIiBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXykpLCBleHBlY3QpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGV4cGVjdC5hZGQoJ3NwYW0nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGRpcihfX3BoZWxsb19fKSksIGV4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19waGVsbG9fXy5fX3BhdGhfXywgW19fcGhlbGxvX18uX19uYW1lX19dKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0hlbGxvIHdvcmxkIVxuJykKLQotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5zcGFtCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fLnNwYW0gZmFpbGVkOiIgKyBzdHIoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fcGhlbGxvX18uc3BhbS5pbml0aWFsaXplZCwgVHJ1ZSkKLSAgICAgICAgICAgIHNwYW1fZXhwZWN0ID0gc2V0KHNlbGYubW9kdWxlX2F0dHJzKQotICAgICAgICAgICAgc3BhbV9leHBlY3QuYWRkKCdpbml0aWFsaXplZCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXy5zcGFtKSksIHNwYW1fZXhwZWN0KQotICAgICAgICAgICAgcGhlbGxvX2V4cGVjdCA9IHNldChzZWxmLnBhY2thZ2VfYXR0cnMpCi0gICAgICAgICAgICBwaGVsbG9fZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgcGhlbGxvX2V4cGVjdC5hZGQoJ3NwYW0nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9fcGhlbGxvX18pKSwgcGhlbGxvX2V4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdIZWxsbyB3b3JsZCFcbicpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18uZm9vCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCi0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5mb28KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCi0KLSAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX2hlbGxvX18nXQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fcGhlbGxvX18nXQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fcGhlbGxvX18uc3BhbSddCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoRnJvemVuVGVzdHMpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKaW5kZXggNmM5NWM0OS4uYTliZjMwYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKQEAgLTE1LDEyICsxNSwxNiBAQAogICAgIGltcG9ydCBzc2wKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBzc2wgPSBOb25lCisgICAgSEFTX1NOSSA9IEZhbHNlCitlbHNlOgorICAgIGZyb20gc3NsIGltcG9ydCBIQVNfU05JCiAKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlLCBza2lwVW5sZXNzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBIT1NULCBIT1NUdjYKIHRocmVhZGluZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIAorVElNRU9VVCA9IDMKICMgdGhlIGR1bW15IGRhdGEgcmV0dXJuZWQgYnkgc2VydmVyIG92ZXIgdGhlIGRhdGEgY2hhbm5lbCB3aGVuCiAjIFJFVFIsIExJU1QsIE5MU1QsIE1MU0QgY29tbWFuZHMgYXJlIGlzc3VlZAogUkVUUl9EQVRBID0gJ2FiY2RlMTIzNDVcclxuJyAqIDEwMDAKQEAgLTEyNiw3ICsxMzAsNyBAQAogICAgICAgICBhZGRyID0gbGlzdChtYXAoaW50LCBhcmcuc3BsaXQoJywnKSkpCiAgICAgICAgIGlwID0gJyVkLiVkLiVkLiVkJyAldHVwbGUoYWRkcls6NF0pCiAgICAgICAgIHBvcnQgPSAoYWRkcls0XSAqIDI1NikgKyBhZGRyWzVdCi0gICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD0yKQorICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQogICAgICAgICBzZWxmLnB1c2goJzIwMCBhY3RpdmUgZGF0YSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJykKIApAQCAtMTM0LDcgKzEzOCw3IEBACiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICBzb2NrLmJpbmQoKHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMF0sIDApKQogICAgICAgICAgICAgc29jay5saXN0ZW4oNSkKLSAgICAgICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKKyAgICAgICAgICAgIHNvY2suc2V0dGltZW91dChUSU1FT1VUKQogICAgICAgICAgICAgaXAsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbOjJdCiAgICAgICAgICAgICBpcCA9IGlwLnJlcGxhY2UoJy4nLCAnLCcpOyBwMSA9IHBvcnQgLyAyNTY7IHAyID0gcG9ydCAlIDI1NgogICAgICAgICAgICAgc2VsZi5wdXNoKCcyMjcgZW50ZXJpbmcgcGFzc2l2ZSBtb2RlICglcywlZCwlZCknICUoaXAsIHAxLCBwMikpCkBAIC0xNDQsNyArMTQ4LDcgQEAKICAgICBkZWYgY21kX2VwcnQoc2VsZiwgYXJnKToKICAgICAgICAgYWYsIGlwLCBwb3J0ID0gYXJnLnNwbGl0KGFyZ1swXSlbMTotMV0KICAgICAgICAgcG9ydCA9IGludChwb3J0KQotICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9MikKKyAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuZHRwID0gc2VsZi5kdHBfaGFuZGxlcihzLCBiYXNlY2xhc3M9c2VsZikKICAgICAgICAgc2VsZi5wdXNoKCcyMDAgYWN0aXZlIGRhdGEgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpCiAKQEAgLTE1Miw3ICsxNTYsNyBAQAogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2KSBhcyBzb2NrOgogICAgICAgICAgICAgc29jay5iaW5kKChzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzBdLCAwKSkKICAgICAgICAgICAgIHNvY2subGlzdGVuKDUpCi0gICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoMTApCisgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoVElNRU9VVCkKICAgICAgICAgICAgIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0KICAgICAgICAgICAgIHNlbGYucHVzaCgnMjI5IGVudGVyaW5nIGV4dGVuZGVkIHBhc3NpdmUgbW9kZSAofHx8JWR8KScgJXBvcnQpCiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQpAQCAtMzAwLDcgKzMwNCw4IEBACiAKIGlmIHNzbCBpcyBub3QgTm9uZToKIAotICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJrZXljZXJ0LnBlbSIpCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImtleWNlcnQzLnBlbSIpCisgICAgQ0FGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJweWNhY2VydC5wZW0iKQogCiAgICAgY2xhc3MgU1NMQ29ubmVjdGlvbihhc3luY29yZS5kaXNwYXRjaGVyKToKICAgICAgICAgIiIiQW4gYXN5bmNvcmUuZGlzcGF0Y2hlciBzdWJjbGFzcyBzdXBwb3J0aW5nIFRMUy9TU0wuIiIiCkBAIC0zMjcsNyArMzMyLDcgQEAKICAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfRU9GOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzQxLDcgKzM0Niw3IEBACiAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICMgQW55ICJzb2NrZXQgZXJyb3IiIGNvcnJlc3BvbmRzIHRvIGEgU1NMX0VSUk9SX1NZU0NBTEwgcmV0dXJuCiAgICAgICAgICAgICAgICAgIyBmcm9tIE9wZW5TU0wncyBTU0xfc2h1dGRvd24oKSwgY29ycmVzcG9uZGluZyB0byBhCiAgICAgICAgICAgICAgICAgIyBjbG9zZWQgc29ja2V0IGNvbmRpdGlvbi4gU2VlIGFsc286CkBAIC00NjAsNyArNDY1LDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlGVFBTZXJ2ZXIoKEhPU1QsIDApKQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTQ4OCw3ICs0OTMsNyBAQAogCiAgICAgZGVmIHRlc3RfYWxsX2Vycm9ycyhzZWxmKToKICAgICAgICAgZXhjZXB0aW9ucyA9IChmdHBsaWIuZXJyb3JfcmVwbHksIGZ0cGxpYi5lcnJvcl90ZW1wLCBmdHBsaWIuZXJyb3JfcGVybSwKLSAgICAgICAgICAgICAgICAgICAgICBmdHBsaWIuZXJyb3JfcHJvdG8sIGZ0cGxpYi5FcnJvciwgSU9FcnJvciwgRU9GRXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgZnRwbGliLmVycm9yX3Byb3RvLCBmdHBsaWIuRXJyb3IsIE9TRXJyb3IsIEVPRkVycm9yKQogICAgICAgICBmb3IgeCBpbiBleGNlcHRpb25zOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJhaXNlIHgoJ2V4Y2VwdGlvbiBub3QgaW5jbHVkZWQgaW4gYWxsX2Vycm9ycyBzZXQnKQpAQCAtNjc4LDcgKzY4Myw3IEBACiAKICAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKLSAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQorICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgIyBJUHY0IGlzIGluIHVzZSwganVzdCBtYWtlIHN1cmUgc2VuZF9lcHN2IGhhcyBub3QgYmVlbiB1c2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ3Bhc3YnKQpAQCAtNjkxLDEyICs2OTYsMTIgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgIyBiYXNlIHRlc3QKLSAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9MikgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpIGFzIHNlbGYuY2xpZW50OgogICAgICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICAgICAgc2VsZi5jbGllbnQuc2VuZGNtZCgnbm9vcCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfY2xpZW50X2Nvbm5lY3RlZCgpKQpAQCAtNzA0LDcgKzcwOSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfY2xpZW50X2Nvbm5lY3RlZCgpKQogCiAgICAgICAgICMgUVVJVCBzZW50IGluc2lkZSB0aGUgd2l0aCBibG9jawotICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0yKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkgYXMgc2VsZi5jbGllbnQ6CiAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKICAgICAgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQpAQCAtNzE0LDcgKzcxOSw3IEBACiAgICAgICAgICMgZm9yY2UgYSB3cm9uZyByZXNwb25zZSBjb2RlIHRvIGJlIHNlbnQgb24gUVVJVDogZXJyb3JfcGVybQogICAgICAgICAjIGlzIGV4cGVjdGVkIGFuZCB0aGUgY29ubmVjdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBjbG9zZWQKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9MikgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD1USU1FT1VUKSBhcyBzZWxmLmNsaWVudDoKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnQuc2VuZGNtZCgnbm9vcCcpCiAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5uZXh0X3Jlc3BvbnNlID0gJzU1MCBlcnJvciBvbiBxdWl0JwpAQCAtNzM2LDcgKzc0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPShIT1NULCBwb3J0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQuc29jay5nZXRzb2NrbmFtZSgpWzFdLCBwb3J0KQogICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNzQ3LDcgKzc1Miw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoJ2xpc3QnKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRzb2NrbmFtZSgpWzFdLCBwb3J0KQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNvdWxkbid0IGJpbmQgdG8gcG9ydCAlZCIgJSBwb3J0KQogICAgICAgICAgICAgcmFpc2UKQEAgLTc4NSw3ICs3OTAsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teUZUUFNlcnZlcigoSE9TVHY2LCAwKSwgYWY9c29ja2V0LkFGX0lORVQ2KQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTgwMiw3ICs4MDcsNyBAQAogCiAgICAgZGVmIHRlc3RfbWFrZXBhc3Yoc2VsZik6CiAgICAgICAgIGhvc3QsIHBvcnQgPSBzZWxmLmNsaWVudC5tYWtlcGFzdigpCi0gICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCAxMCkKKyAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ2Vwc3YnKQogCkBAIC04MjksNyArODM0LDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlUTFNfRlRQU2VydmVyKChIT1NULCAwKSkKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKICAgICAgICAgIyBlbmFibGUgVExTCiAgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQpAQCAtODQzLDcgKzg0OCw3IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15VExTX0ZUUFNlcnZlcigoSE9TVCwgMCkpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC05MDMsNyArOTA4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnRwbGliLkZUUF9UTFMsIGNlcnRmaWxlPUNFUlRGSUxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKIAotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKGNvbnRleHQ9Y3R4LCB0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCkBAIC05MjIsNiArOTI3LDM3IEBACiAgICAgICAgIHNlbGYuY2xpZW50LmNjYygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuY2xpZW50LnNvY2sudW53cmFwKQogCisgICAgQHNraXBVbmxlc3MoSEFTX1NOSSwgJ05vIFNOSSBzdXBwb3J0IGluIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X2NoZWNrX2hvc3RuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBjdHguY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0FGSUxFKQorICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKGNvbnRleHQ9Y3R4LCB0aW1lb3V0PVRJTUVPVVQpCisKKyAgICAgICAgIyAxMjcuMC4wLjEgZG9lc24ndCBtYXRjaCBTQU4KKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5DZXJ0aWZpY2F0ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQorICAgICAgICAjIGV4Y2VwdGlvbiBxdWl0cyBjb25uZWN0aW9uCisKKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorICAgICAgICBzZWxmLmNsaWVudC5wcm90X3AoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5DZXJ0aWZpY2F0ZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoImxpc3QiKSBhcyBzb2NrOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisKKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdCgibG9jYWxob3N0Iiwgc2VsZi5zZXJ2ZXIucG9ydCkKKyAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQorCisgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3QoImxvY2FsaG9zdCIsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfcCgpCisgICAgICAgIHdpdGggc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoImxpc3QiKSBhcyBzb2NrOgorICAgICAgICAgICAgcGFzcworCiAKIGNsYXNzIFRlc3RUaW1lb3V0cyhUZXN0Q2FzZSk6CiAKQEAgLTEwMTcsOCArMTA1MywxOSBAQAogICAgICAgICBmdHAuY2xvc2UoKQogCiAKK2NsYXNzIFRlc3ROZXRyY0RlcHJlY2F0aW9uKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoKSwgc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WydIT01FJ10gPSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgb3BlbignLm5ldHJjJywgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBmdHBsaWIuTmV0cmMoKQorCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gW1Rlc3RGVFBDbGFzcywgVGVzdFRpbWVvdXRzLAorICAgIHRlc3RzID0gW1Rlc3RGVFBDbGFzcywgVGVzdFRpbWVvdXRzLCBUZXN0TmV0cmNEZXByZWNhdGlvbiwKICAgICAgICAgICAgICBUZXN0SVB2NkVudmlyb25tZW50LAogICAgICAgICAgICAgIFRlc3RUTFNfRlRQQ2xhc3NNaXhpbiwgVGVzdFRMU19GVFBDbGFzc10KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdW5jYXR0cnMucHkgYi9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQppbmRleCBjOGVkODMwLi41MDk0ZjdiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQpAQCAtNyw2ICs3LDExIEBACiAgICAgZGVmIGlubmVyX2Z1bmN0aW9uKCk6CiAgICAgICAgIGNsYXNzIExvY2FsQ2xhc3M6CiAgICAgICAgICAgICBwYXNzCisgICAgICAgIGdsb2JhbCBpbm5lcl9nbG9iYWxfZnVuY3Rpb24KKyAgICAgICAgZGVmIGlubmVyX2dsb2JhbF9mdW5jdGlvbigpOgorICAgICAgICAgICAgZGVmIGlubmVyX2Z1bmN0aW9uMigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJldHVybiBpbm5lcl9mdW5jdGlvbjIKICAgICAgICAgcmV0dXJuIExvY2FsQ2xhc3MKICAgICByZXR1cm4gbGFtYmRhOiBpbm5lcl9mdW5jdGlvbgogCkBAIC0xMTYsNiArMTIxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xvYmFsX2Z1bmN0aW9uLjxsb2NhbHM+LmlubmVyX2Z1bmN0aW9uJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfZnVuY3Rpb24oKSgpKCkuX19xdWFsbmFtZV9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24uPGxvY2Fscz4uTG9jYWxDbGFzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uLl9fcXVhbG5hbWVfXywgJ2lubmVyX2dsb2JhbF9mdW5jdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uKCkuX19xdWFsbmFtZV9fLCAnaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uLjxsb2NhbHM+LmlubmVyX2Z1bmN0aW9uMicpCiAgICAgICAgIHNlbGYuYi5fX3F1YWxuYW1lX18gPSAnYycKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19xdWFsbmFtZV9fLCAnYycpCiAgICAgICAgIHNlbGYuYi5fX3F1YWxuYW1lX18gPSAnZCcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKaW5kZXggZDFjZTJhOS4uNzVhZTdmMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKQEAgLTEsNjYgKzEsNTIgQEAKLWltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBhYmMKIGltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBwZXJtdXRhdGlvbnMKIGltcG9ydCBwaWNrbGUKIGZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKLUBzdGF0aWNtZXRob2QKLWRlZiBQeXRob25QYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKToKLSAgICAnUHVyZSBQeXRob24gYXBwcm94aW1hdGlvbiBvZiBwYXJ0aWFsKCknCi0gICAgZGVmIG5ld2Z1bmMoKmZhcmdzLCAqKmZrZXl3b3Jkcyk6Ci0gICAgICAgIG5ld2tleXdvcmRzID0ga2V5d29yZHMuY29weSgpCi0gICAgICAgIG5ld2tleXdvcmRzLnVwZGF0ZShma2V5d29yZHMpCi0gICAgICAgIHJldHVybiBmdW5jKCooYXJncyArIGZhcmdzKSwgKipuZXdrZXl3b3JkcykKLSAgICBuZXdmdW5jLmZ1bmMgPSBmdW5jCi0gICAgbmV3ZnVuYy5hcmdzID0gYXJncwotICAgIG5ld2Z1bmMua2V5d29yZHMgPSBrZXl3b3JkcwotICAgIHJldHVybiBuZXdmdW5jCitpbXBvcnQgZnVuY3Rvb2xzCisKK3B5X2Z1bmN0b29scyA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnZnVuY3Rvb2xzJywgYmxvY2tlZD1bJ19mdW5jdG9vbHMnXSkKK2NfZnVuY3Rvb2xzID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdmdW5jdG9vbHMnLCBmcmVzaD1bJ19mdW5jdG9vbHMnXSkKKworZGVjaW1hbCA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnZGVjaW1hbCcsIGZyZXNoPVsnX2RlY2ltYWwnXSkKKwogCiBkZWYgY2FwdHVyZSgqYXJncywgKiprdyk6CiAgICAgIiIiY2FwdHVyZSBhbGwgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMiIiIKICAgICByZXR1cm4gYXJncywga3cKIAorCiBkZWYgc2lnbmF0dXJlKHBhcnQpOgogICAgICIiIiByZXR1cm4gdGhlIHNpZ25hdHVyZSBvZiBhIHBhcnRpYWwgb2JqZWN0ICIiIgogICAgIHJldHVybiAocGFydC5mdW5jLCBwYXJ0LmFyZ3MsIHBhcnQua2V5d29yZHMsIHBhcnQuX19kaWN0X18pCiAKLWNsYXNzIFRlc3RQYXJ0aWFsKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIHRoZXR5cGUgPSBmdW5jdG9vbHMucGFydGlhbAorY2xhc3MgVGVzdFBhcnRpYWw6CiAKICAgICBkZWYgdGVzdF9iYXNpY19leGFtcGxlcyhzZWxmKToKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsIDQsIGI9MzAsIGM9NDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoMSwgMiwgMywgNCksIGRpY3QoYT0xMCwgYj0zMCwgYz00MCkpKQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKG1hcCwgbGFtYmRhIHg6IHgqMTApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwobWFwLCBsYW1iZGEgeDogeCoxMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHAoWzEsMiwzLDRdKSksIFsxMCwgMjAsIDMwLCA0MF0pCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKICAgICAgICAgIyBhdHRyaWJ1dGVzIHNob3VsZCBiZSByZWFkYWJsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZnVuYywgY2FwdHVyZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmFyZ3MsICgxLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtleXdvcmRzLCBkaWN0KGE9MTAsIGI9MjApKQotICAgICAgICAjIGF0dHJpYnV0ZXMgc2hvdWxkIG5vdCBiZSB3cml0YWJsZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2Z1bmMnLCBtYXApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAnYXJncycsICgxLCAyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdrZXl3b3JkcycsIGRpY3QoYT0xLCBiPTIpKQotCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoaGV4KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkZWwgcC5fX2RpY3RfXwotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdwYXJ0aWFsIG9iamVjdCBhbGxvd2VkIF9fZGljdF9fIHRvIGJlIGRlbGV0ZWQnKQogCiAgICAgZGVmIHRlc3RfYXJndW1lbnRfY2hlY2tpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGV0eXBlKSAgICAgIyBuZWVkIGF0IGxlYXN0IGEgZnVuYyBhcmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnBhcnRpYWwpICAgICAjIG5lZWQgYXQgbGVhc3QgYSBmdW5jIGFyZwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnRoZXR5cGUoMikoKQorICAgICAgICAgICAgc2VsZi5wYXJ0aWFsKDIpKCkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKQEAgLTcxLDcgKzU3LDcgQEAKICAgICAgICAgZGVmIGZ1bmMoYT0xMCwgYj0yMCk6CiAgICAgICAgICAgICByZXR1cm4gYQogICAgICAgICBkID0geydhJzozfQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGZ1bmMsIGE9NSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChmdW5jLCBhPTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgqKmQpLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnYSc6M30pCiAgICAgICAgIHAoYj03KQpAQCAtODAsMjAgKzY2LDIwIEBACiAgICAgZGVmIHRlc3RfYXJnX2NvbWJpbmF0aW9ucyhzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIHplcm8gYXJncyBpbiBlaXRoZXIgcGFydGlhbAogICAgICAgICAjIG9iamVjdCBvciB0aGUgY2FsbGVyCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7fSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgxLDIpLCAoKDEsMiksIHt9KSkKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDEsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKDEsMiksIHt9KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsNCksICgoMSwyLDMsNCksIHt9KSkKIAogICAgIGRlZiB0ZXN0X2t3X2NvbWJpbmF0aW9ucyhzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIG5vIGtleXdvcmQgYXJncyBpbgogICAgICAgICAjIGVpdGhlciB0aGUgcGFydGlhbCBvYmplY3Qgb3IgdGhlIGNhbGxlcgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCksICgoKSwge30pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoYT0xKSwgKCgpLCB7J2EnOjF9KSkKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCBhPTEpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgYT0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7J2EnOjF9KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKGI9MiksICgoKSwgeydhJzoxLCAnYic6Mn0pKQogICAgICAgICAjIGtleXdvcmQgYXJncyBpbiB0aGUgY2FsbCBvdmVycmlkZSB0aG9zZSBpbiB0aGUgcGFydGlhbCBvYmplY3QKQEAgLTEwMiw3ICs4OCw3IEBACiAgICAgZGVmIHRlc3RfcG9zaXRpb25hbChzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGNvcnJlY3RseQogICAgICAgICBmb3IgYXJncyBpbiBbKCksICgwLCksICgwLDEpLCAoMCwxLDIpLCAoMCwxLDIsMyldOgotICAgICAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncykKKyAgICAgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgKmFyZ3MpCiAgICAgICAgICAgICBleHBlY3RlZCA9IGFyZ3MgKyAoJ3gnLCkKICAgICAgICAgICAgIGdvdCwgZW1wdHkgPSBwKCd4JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCA9PSBnb3QgYW5kIGVtcHR5ID09IHt9KQpAQCAtMTEwLDE0ICs5NiwxNCBAQAogICAgIGRlZiB0ZXN0X2tleXdvcmQoc2VsZik6CiAgICAgICAgICMgbWFrZSBzdXJlIGtleXdvcmQgYXJndW1lbnRzIGFyZSBjYXB0dXJlZCBjb3JyZWN0bHkKICAgICAgICAgZm9yIGEgaW4gWydhJywgMCwgTm9uZSwgMy41XToKLSAgICAgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgYT1hKQorICAgICAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCBhPWEpCiAgICAgICAgICAgICBleHBlY3RlZCA9IHsnYSc6YSwneCc6Tm9uZX0KICAgICAgICAgICAgIGVtcHR5LCBnb3QgPSBwKHg9Tm9uZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCA9PSBnb3QgYW5kIGVtcHR5ID09ICgpKQogCiAgICAgZGVmIHRlc3Rfbm9fc2lkZV9lZmZlY3RzKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc2lkZSBlZmZlY3RzIHRoYXQgYWZmZWN0IHN1YnNlcXVlbnQgY2FsbHMKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAwLCBhPTEpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMCwgYT0xKQogICAgICAgICBhcmdzMSwga3cxID0gcCgxLCBiPTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcmdzMSA9PSAoMCwxKSBhbmQga3cxID09IHsnYSc6MSwnYic6Mn0pCiAgICAgICAgIGFyZ3MyLCBrdzIgPSBwKCkKQEAgLTEyNiwxMyArMTEyLDEzIEBACiAgICAgZGVmIHRlc3RfZXJyb3JfcHJvcGFnYXRpb24oc2VsZik6CiAgICAgICAgIGRlZiBmKHgsIHkpOgogICAgICAgICAgICAgeCAvIHkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYudGhldHlwZShmLCAxLCAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYudGhldHlwZShmLCAxKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYudGhldHlwZShmKSwgMSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYudGhldHlwZShmLCB5PTApLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi5wYXJ0aWFsKGYsIDEsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi5wYXJ0aWFsKGYsIDEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi5wYXJ0aWFsKGYpLCAxLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi5wYXJ0aWFsKGYsIHk9MCksIDEpCiAKICAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGludCwgYmFzZT0xNikKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChpbnQsIGJhc2U9MTYpCiAgICAgICAgIHAgPSBwcm94eShmKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZnVuYywgcC5mdW5jKQogICAgICAgICBmID0gTm9uZQpAQCAtMTQwLDM5ICsxMjYsNjEgQEAKIAogICAgIGRlZiB0ZXN0X3dpdGhfYm91bmRfYW5kX3VuYm91bmRfbWV0aG9kcyhzZWxmKToKICAgICAgICAgZGF0YSA9IGxpc3QobWFwKHN0ciwgcmFuZ2UoMTApKSkKLSAgICAgICAgam9pbiA9IHNlbGYudGhldHlwZShzdHIuam9pbiwgJycpCisgICAgICAgIGpvaW4gPSBzZWxmLnBhcnRpYWwoc3RyLmpvaW4sICcnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oZGF0YSksICcwMTIzNDU2Nzg5JykKLSAgICAgICAgam9pbiA9IHNlbGYudGhldHlwZSgnJy5qb2luKQorICAgICAgICBqb2luID0gc2VsZi5wYXJ0aWFsKCcnLmpvaW4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihkYXRhKSwgJzAxMjM0NTY3ODknKQogCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfZnVuY3Rvb2xzLCAncmVxdWlyZXMgdGhlIEMgX2Z1bmN0b29scyBtb2R1bGUnKQorY2xhc3MgVGVzdFBhcnRpYWxDKFRlc3RQYXJ0aWFsLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaWYgY19mdW5jdG9vbHM6CisgICAgICAgIHBhcnRpYWwgPSBjX2Z1bmN0b29scy5wYXJ0aWFsCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzX3Vud3JpdGFibGUoc2VsZik6CisgICAgICAgICMgYXR0cmlidXRlcyBzaG91bGQgbm90IGJlIHdyaXRhYmxlCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdmdW5jJywgbWFwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2FyZ3MnLCAoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAna2V5d29yZHMnLCBkaWN0KGE9MSwgYj0yKSkKKworICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGhleCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHAuX19kaWN0X18KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgncGFydGlhbCBvYmplY3QgYWxsb3dlZCBfX2RpY3RfXyB0byBiZSBkZWxldGVkJykKKwogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIGFyZ3MgPSAob2JqZWN0KCksIG9iamVjdCgpKQogICAgICAgICBhcmdzX3JlcHIgPSAnLCAnLmpvaW4ocmVwcihhKSBmb3IgYSBpbiBhcmdzKQotICAgICAgICBrd2FyZ3MgPSB7J2EnOiBvYmplY3QoKSwgJ2InOiBvYmplY3QoKX0KKyAgICAgICAgI2t3YXJncyA9IHsnYSc6IG9iamVjdCgpLCAnYic6IG9iamVjdCgpfQorICAgICAgICBrd2FyZ3MgPSB7J2EnOiBvYmplY3QoKX0KICAgICAgICAga3dhcmdzX3JlcHIgPSAnLCAnLmpvaW4oIiVzPSVyIiAlIChrLCB2KSBmb3IgaywgdiBpbiBrd2FyZ3MuaXRlbXMoKSkKLSAgICAgICAgaWYgc2VsZi50aGV0eXBlIGlzIGZ1bmN0b29scy5wYXJ0aWFsOgorICAgICAgICBpZiBzZWxmLnBhcnRpYWwgaXMgY19mdW5jdG9vbHMucGFydGlhbDoKICAgICAgICAgICAgIG5hbWUgPSAnZnVuY3Rvb2xzLnBhcnRpYWwnCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuYW1lID0gc2VsZi50aGV0eXBlLl9fbmFtZV9fCisgICAgICAgICAgICBuYW1lID0gc2VsZi5wYXJ0aWFsLl9fbmFtZV9fCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICphcmdzKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICphcmdzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBhcmdzX3JlcHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZikpCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqKmt3YXJncykKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30oeyFyfSwge30pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSwga3dhcmdzX3JlcHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZikpCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9LCB7fSwge30pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSwgYXJnc19yZXByLCBrd2FyZ3NfcmVwciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoc2lnbmF0dXJlLCAnYXNkZicsIGJhcj1UcnVlKQogICAgICAgICBmLmFkZF9zb21ldGhpbmdfdG9fX2RpY3RfXyA9IFRydWUKICAgICAgICAgZl9jb3B5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhmKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoZiksIHNpZ25hdHVyZShmX2NvcHkpKQpAQCAtMTkxLDMwICsxOTksMTQwIEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fQogICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKG9iamVjdCkKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChvYmplY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgIm5ldyBzdHlsZSBnZXRhcmdzIGZvcm1hdCBidXQgYXJndW1lbnQgaXMgbm90IGEgdHVwbGUiLAogICAgICAgICAgICAgICAgIGYuX19zZXRzdGF0ZV9fLCBCYWRTZXF1ZW5jZSgpKQogCi1jbGFzcyBQYXJ0aWFsU3ViY2xhc3MoZnVuY3Rvb2xzLnBhcnRpYWwpOgotICAgIHBhc3MKIAotY2xhc3MgVGVzdFBhcnRpYWxTdWJjbGFzcyhUZXN0UGFydGlhbCk6CitjbGFzcyBUZXN0UGFydGlhbFB5KFRlc3RQYXJ0aWFsLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGFydGlhbCA9IHN0YXRpY21ldGhvZChweV9mdW5jdG9vbHMucGFydGlhbCkKIAotICAgIHRoZXR5cGUgPSBQYXJ0aWFsU3ViY2xhc3MKIAotY2xhc3MgVGVzdFB5dGhvblBhcnRpYWwoVGVzdFBhcnRpYWwpOgoraWYgY19mdW5jdG9vbHM6CisgICAgY2xhc3MgUGFydGlhbFN1YmNsYXNzKGNfZnVuY3Rvb2xzLnBhcnRpYWwpOgorICAgICAgICBwYXNzCiAKLSAgICB0aGV0eXBlID0gUHl0aG9uUGFydGlhbAogCi0gICAgIyB0aGUgcHl0aG9uIHZlcnNpb24gaGFzbid0IGEgbmljZSByZXByCi0gICAgdGVzdF9yZXByID0gTm9uZQorQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19mdW5jdG9vbHMsICdyZXF1aXJlcyB0aGUgQyBfZnVuY3Rvb2xzIG1vZHVsZScpCitjbGFzcyBUZXN0UGFydGlhbENTdWJjbGFzcyhUZXN0UGFydGlhbEMpOgorICAgIGlmIGNfZnVuY3Rvb2xzOgorICAgICAgICBwYXJ0aWFsID0gUGFydGlhbFN1YmNsYXNzCiAKLSAgICAjIHRoZSBweXRob24gdmVyc2lvbiBpc24ndCBwaWNrbGFibGUKLSAgICB0ZXN0X3BpY2tsZSA9IHRlc3Rfc2V0c3RhdGVfcmVmY291bnQgPSBOb25lCiAKLSAgICAjIHRoZSBweXRob24gdmVyc2lvbiBpc24ndCBhIHR5cGUKLSAgICB0ZXN0X2F0dHJpYnV0ZXMgPSBOb25lCitjbGFzcyBUZXN0UGFydGlhbE1ldGhvZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgIG5vdGhpbmcgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjYXB0dXJlKQorICAgICAgICBwb3NpdGlvbmFsID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2FwdHVyZSwgMSkKKyAgICAgICAga2V5d29yZHMgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjYXB0dXJlLCBhPTIpCisgICAgICAgIGJvdGggPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjYXB0dXJlLCAzLCBiPTQpCisKKyAgICAgICAgbmVzdGVkID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QocG9zaXRpb25hbCwgNSkKKworICAgICAgICBvdmVyX3BhcnRpYWwgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChmdW5jdG9vbHMucGFydGlhbChjYXB0dXJlLCBjPTYpLCA3KQorCisgICAgICAgIHN0YXRpYyA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKHN0YXRpY21ldGhvZChjYXB0dXJlKSwgOCkKKyAgICAgICAgY2xzID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2xhc3NtZXRob2QoY2FwdHVyZSksIGQ9OSkKKworICAgIGEgPSBBKCkKKworICAgIGRlZiB0ZXN0X2FyZ19jb21iaW5hdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5vdGhpbmcoKSwgKChzZWxmLmEsKSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ub3RoaW5nKDUpLCAoKHNlbGYuYSwgNSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubm90aGluZyhjPTYpLCAoKHNlbGYuYSwpLCB7J2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5vdGhpbmcoNSwgYz02KSwgKChzZWxmLmEsIDUpLCB7J2MnOiA2fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEucG9zaXRpb25hbCgpLCAoKHNlbGYuYSwgMSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEucG9zaXRpb25hbCg1KSwgKChzZWxmLmEsIDEsIDUpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLnBvc2l0aW9uYWwoYz02KSwgKChzZWxmLmEsIDEpLCB7J2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLnBvc2l0aW9uYWwoNSwgYz02KSwgKChzZWxmLmEsIDEsIDUpLCB7J2MnOiA2fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEua2V5d29yZHMoKSwgKChzZWxmLmEsKSwgeydhJzogMn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3Jkcyg1KSwgKChzZWxmLmEsIDUpLCB7J2EnOiAyfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKGM9NiksICgoc2VsZi5hLCksIHsnYSc6IDIsICdjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3Jkcyg1LCBjPTYpLCAoKHNlbGYuYSwgNSksIHsnYSc6IDIsICdjJzogNn0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmJvdGgoKSwgKChzZWxmLmEsIDMpLCB7J2InOiA0fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmJvdGgoNSksICgoc2VsZi5hLCAzLCA1KSwgeydiJzogNH0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ib3RoKGM9NiksICgoc2VsZi5hLCAzKSwgeydiJzogNCwgJ2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmJvdGgoNSwgYz02KSwgKChzZWxmLmEsIDMsIDUpLCB7J2InOiA0LCAnYyc6IDZ9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuQS5ib3RoKHNlbGYuYSwgNSwgYz02KSwgKChzZWxmLmEsIDMsIDUpLCB7J2InOiA0LCAnYyc6IDZ9KSkKKworICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubmVzdGVkKCksICgoc2VsZi5hLCAxLCA1KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5uZXN0ZWQoNiksICgoc2VsZi5hLCAxLCA1LCA2KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5uZXN0ZWQoZD03KSwgKChzZWxmLmEsIDEsIDUpLCB7J2QnOiA3fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5lc3RlZCg2LCBkPTcpLCAoKHNlbGYuYSwgMSwgNSwgNiksIHsnZCc6IDd9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuQS5uZXN0ZWQoc2VsZi5hLCA2LCBkPTcpLCAoKHNlbGYuYSwgMSwgNSwgNiksIHsnZCc6IDd9KSkKKworICAgIGRlZiB0ZXN0X292ZXJfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEub3Zlcl9wYXJ0aWFsKCksICgoc2VsZi5hLCA3KSwgeydjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5vdmVyX3BhcnRpYWwoNSksICgoc2VsZi5hLCA3LCA1KSwgeydjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5vdmVyX3BhcnRpYWwoZD04KSwgKChzZWxmLmEsIDcpLCB7J2MnOiA2LCAnZCc6IDh9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEub3Zlcl9wYXJ0aWFsKDUsIGQ9OCksICgoc2VsZi5hLCA3LCA1KSwgeydjJzogNiwgJ2QnOiA4fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkEub3Zlcl9wYXJ0aWFsKHNlbGYuYSwgNSwgZD04KSwgKChzZWxmLmEsIDcsIDUpLCB7J2MnOiA2LCAnZCc6IDh9KSkKKworICAgIGRlZiB0ZXN0X2JvdW5kX21ldGhvZF9pbnRyb3NwZWN0aW9uKHNlbGYpOgorICAgICAgICBvYmogPSBzZWxmLmEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmouYm90aC5fX3NlbGZfXywgb2JqKQorICAgICAgICBzZWxmLmFzc2VydElzKG9iai5uZXN0ZWQuX19zZWxmX18sIG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmoub3Zlcl9wYXJ0aWFsLl9fc2VsZl9fLCBvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob2JqLmNscy5fX3NlbGZfXywgc2VsZi5BKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuQS5jbHMuX19zZWxmX18sIHNlbGYuQSkKKworICAgIGRlZiB0ZXN0X3VuYm91bmRfbWV0aG9kX3JldHJpZXZhbChzZWxmKToKKyAgICAgICAgb2JqID0gc2VsZi5BCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihvYmouYm90aCwgIl9fc2VsZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihvYmoubmVzdGVkLCAiX19zZWxmX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG9iai5vdmVyX3BhcnRpYWwsICJfX3NlbGZfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIob2JqLnN0YXRpYywgIl9fc2VsZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihzZWxmLmEuc3RhdGljLCAiX19zZWxmX18iKSkKKworICAgIGRlZiB0ZXN0X2Rlc2NyaXB0b3JzKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIFtzZWxmLkEsIHNlbGYuYV06CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvYmo9b2JqKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoKSwgKCg4LCksIHt9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoNSksICgoOCwgNSksIHt9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoZD04KSwgKCg4LCksIHsnZCc6IDh9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5zdGF0aWMoNSwgZD04KSwgKCg4LCA1KSwgeydkJzogOH0pKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouY2xzKCksICgoc2VsZi5BLCksIHsnZCc6IDl9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5jbHMoNSksICgoc2VsZi5BLCA1KSwgeydkJzogOX0pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmNscyhjPTgpLCAoKHNlbGYuQSwpLCB7J2MnOiA4LCAnZCc6IDl9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5jbHMoNSwgYz04KSwgKChzZWxmLkEsIDUpLCB7J2MnOiA4LCAnZCc6IDl9KSkKKworICAgIGRlZiB0ZXN0X292ZXJyaWRpbmdfa2V5d29yZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKGE9MyksICgoc2VsZi5hLCksIHsnYSc6IDN9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkEua2V5d29yZHMoc2VsZi5hLCBhPTMpLCAoKHNlbGYuYSwpLCB7J2EnOiAzfSkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIEIob2JqZWN0KToKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChOb25lLCAxKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHZhcnMoc2VsZi5BKVsnYm90aCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2Qoe30sIDMsIGI9NCknLmZvcm1hdChjYXB0dXJlKSkKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0KHNlbGYpOgorICAgICAgICBjbGFzcyBBYnN0cmFjdChhYmMuQUJDTWV0YSk6CisKKyAgICAgICAgICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgICAgIGRlZiBhZGQoc2VsZiwgeCwgeSk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBhZGQ1ID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoYWRkLCA1KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBYnN0cmFjdC5hZGQuX19pc2Fic3RyYWN0bWV0aG9kX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBYnN0cmFjdC5hZGQ1Ll9faXNhYnN0cmFjdG1ldGhvZF9fKQorCisgICAgICAgIGZvciBmdW5jIGluIFtzZWxmLkEuc3RhdGljLCBzZWxmLkEuY2xzLCBzZWxmLkEub3Zlcl9wYXJ0aWFsLCBzZWxmLkEubmVzdGVkLCBzZWxmLkEuYm90aF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdldGF0dHIoZnVuYywgJ19faXNhYnN0cmFjdG1ldGhvZF9fJywgRmFsc2UpKQorCiAKIGNsYXNzIFRlc3RVcGRhdGVXcmFwcGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjIzLDE5ICszNDEsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkPWZ1bmN0b29scy5XUkFQUEVSX1VQREFURVMpOgogICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgd2VyZSBhc3NpZ25lZAogICAgICAgICBmb3IgbmFtZSBpbiBhc3NpZ25lZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHdyYXBwZXIsIG5hbWUpIGlzIGdldGF0dHIod3JhcHBlZCwgbmFtZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIod3JhcHBlciwgbmFtZSksIGdldGF0dHIod3JhcHBlZCwgbmFtZSkpCiAgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyB3ZXJlIHVwZGF0ZWQKICAgICAgICAgZm9yIG5hbWUgaW4gdXBkYXRlZDoKICAgICAgICAgICAgIHdyYXBwZXJfYXR0ciA9IGdldGF0dHIod3JhcHBlciwgbmFtZSkKICAgICAgICAgICAgIHdyYXBwZWRfYXR0ciA9IGdldGF0dHIod3JhcHBlZCwgbmFtZSkKICAgICAgICAgICAgIGZvciBrZXkgaW4gd3JhcHBlZF9hdHRyOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cmFwcGVkX2F0dHJba2V5XSBpcyB3cmFwcGVyX2F0dHJba2V5XSkKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJfX2RpY3RfXyIgYW5kIGtleSA9PSAiX193cmFwcGVkX18iOgorICAgICAgICAgICAgICAgICAgICAjIF9fd3JhcHBlZF9fIGlzIG92ZXJ3cml0dGVuIGJ5IHRoZSB1cGRhdGUgY29kZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3JhcHBlZF9hdHRyW2tleV0sIHdyYXBwZXJfYXR0cltrZXldKQorICAgICAgICAjIENoZWNrIF9fd3JhcHBlZF9fCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlZCkKKwogCiAgICAgZGVmIF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKICAgICAgICAgZGVmIGYoYTonVGhpcyBpcyBhIG5ldyBhbm5vdGF0aW9uJyk6CiAgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmLmF0dHIgPSAnVGhpcyBpcyBhbHNvIGEgdGVzdCcKKyAgICAgICAgZi5fX3dyYXBwZWRfXyA9ICJUaGlzIGlzIGEgYmFsZCBmYWNlZCBsaWUiCiAgICAgICAgIGRlZiB3cmFwcGVyKGI6J1RoaXMgaXMgdGhlIHByaW9yIGFubm90YXRpb24nKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIGYpCkBAIC0zMjIsNiArNDQ3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZXIuX19kb2NfXy5zdGFydHN3aXRoKCdtYXgoJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2Fubm90YXRpb25zX18sIHt9KQogCisKIGNsYXNzIFRlc3RXcmFwcyhUZXN0VXBkYXRlV3JhcHBlcik6CiAKICAgICBkZWYgX2RlZmF1bHRfdXBkYXRlKHNlbGYpOgpAQCAtMzI5LDE0ICs0NTUsMTUgQEAKICAgICAgICAgICAgICIiIlRoaXMgaXMgYSB0ZXN0IiIiCiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGYuYXR0ciA9ICdUaGlzIGlzIGFsc28gYSB0ZXN0JworICAgICAgICBmLl9fd3JhcHBlZF9fID0gIlRoaXMgaXMgc3RpbGwgYSBiYWxkIGZhY2VkIGxpZSIKICAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmKQogICAgICAgICBkZWYgd3JhcHBlcigpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZikKICAgICAgICAgcmV0dXJuIHdyYXBwZXIsIGYKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlKHNlbGYpOgogICAgICAgICB3cmFwcGVyLCBmID0gc2VsZi5fZGVmYXVsdF91cGRhdGUoKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fbmFtZV9fLCAnZicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX3F1YWxuYW1lX18sIGYuX19xdWFsbmFtZV9fKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuYXR0ciwgJ1RoaXMgaXMgYWxzbyBhIHRlc3QnKQpAQCAtMzgyLDYgKzUwOSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5hdHRyLCAnVGhpcyBpcyBhIGRpZmZlcmVudCB0ZXN0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmRpY3RfYXR0ciwgZi5kaWN0X2F0dHIpCiAKKwogY2xhc3MgVGVzdFJlZHVjZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZnVuYyA9IGZ1bmN0b29scy5yZWR1Y2UKIApAQCAtNDYyLDI0ICs1OTAsMjkgQEAKICAgICAgICAgZCA9IHsib25lIjogMSwgInR3byI6IDIsICJ0aHJlZSI6IDN9CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGFkZCwgZCksICIiLmpvaW4oZC5rZXlzKCkpKQogCi1jbGFzcyBUZXN0Q21wVG9LZXkodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBUZXN0Q21wVG9LZXk6CiAKICAgICBkZWYgdGVzdF9jbXBfdG9fa2V5KHNlbGYpOgogICAgICAgICBkZWYgY21wMSh4LCB5KToKICAgICAgICAgICAgIHJldHVybiAoeCA+IHkpIC0gKHggPCB5KQotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAxKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkoMyksIGtleSgzKSkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGtleSgzKSwga2V5KDEpKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChrZXkoMyksIGtleSgzKSkKKwogICAgICAgICBkZWYgY21wMih4LCB5KToKICAgICAgICAgICAgIHJldHVybiBpbnQoeCkgLSBpbnQoeSkKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMikKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5KDQuMCksIGtleSgnNCcpKQogICAgICAgICBzZWxmLmFzc2VydExlc3Moa2V5KDIpLCBrZXkoJzM1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGtleSgyKSwga2V5KCczNScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleSgyKSwga2V5KCczNScpKQogCiAgICAgZGVmIHRlc3RfY21wX3RvX2tleV9hcmd1bWVudHMoc2VsZik6CiAgICAgICAgIGRlZiBjbXAxKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShteWNtcD1jbXAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleShvYmo9MyksIGtleShvYmo9MykpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihrZXkob2JqPTMpLCBrZXkob2JqPTEpKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSk6CkBAIC00ODcsMTAgKzYyMCwxMCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSk6CiAgICAgICAgICAgICAxIDwga2V5KDMpICAgICMgbGhzIGlzIG5vdCBhIEsgb2JqZWN0CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KCkgICAgICAgICAgICAgIyB0b28gZmV3IGFyZ3MKKyAgICAgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleSgpICAgICAgICAgICAgICMgdG9vIGZldyBhcmdzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEsIE5vbmUpICAgIyB0b28gbWFueSBhcmdzCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEpCisgICAgICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSwgTm9uZSkgICAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDEpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIGtleSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0b28gZmV3IGFyZ3MKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgpAQCAtNDk5LDcgKzYzMiw3IEBACiAgICAgZGVmIHRlc3RfYmFkX2NtcChzZWxmKToKICAgICAgICAgZGVmIGNtcDEoeCwgeSk6CiAgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcgotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAxKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CiAgICAgICAgICAgICBrZXkoMykgPiBrZXkoMSkKIApAQCAtNTE0LDEzICs2NDcsMTMgQEAKICAgICBkZWYgdGVzdF9vYmpfZmllbGQoc2VsZik6CiAgICAgICAgIGRlZiBjbXAxKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShteWNtcD1jbXAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSg1MCkub2JqLCA1MCkKIAogICAgIGRlZiB0ZXN0X3NvcnRfaW50KHNlbGYpOgogICAgICAgICBkZWYgbXljbXAoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4geSAtIHgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmFuZ2UoNSksIGtleT1mdW5jdG9vbHMuY21wX3RvX2tleShteWNtcCkpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyYW5nZSg1KSwga2V5PXNlbGYuY21wX3RvX2tleShteWNtcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFs0LCAzLCAyLCAxLCAwXSkKIAogICAgIGRlZiB0ZXN0X3NvcnRfaW50X3N0cihzZWxmKToKQEAgLTUyOCwxOCArNjYxLDI5IEBACiAgICAgICAgICAgICB4LCB5ID0gaW50KHgpLCBpbnQoeSkKICAgICAgICAgICAgIHJldHVybiAoeCA+IHkpIC0gKHggPCB5KQogICAgICAgICB2YWx1ZXMgPSBbNSwgJzMnLCA3LCAyLCAnMCcsICcxJywgNCwgJzEwJywgMV0KLSAgICAgICAgdmFsdWVzID0gc29ydGVkKHZhbHVlcywga2V5PWZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKSkKKyAgICAgICAgdmFsdWVzID0gc29ydGVkKHZhbHVlcywga2V5PXNlbGYuY21wX3RvX2tleShteWNtcCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2ludCh2YWx1ZSkgZm9yIHZhbHVlIGluIHZhbHVlc10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDQsIDUsIDcsIDEwXSkKIAogICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CiAgICAgICAgIGRlZiBteWNtcCh4LCB5KToKICAgICAgICAgICAgIHJldHVybiB5IC0geAotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShteWNtcCkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KG15Y21wKQogICAgICAgICBrID0ga2V5KDEwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGspCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShrLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSkKIAorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhjX2Z1bmN0b29scywgJ3JlcXVpcmVzIHRoZSBDIF9mdW5jdG9vbHMgbW9kdWxlJykKK2NsYXNzIFRlc3RDbXBUb0tleUMoVGVzdENtcFRvS2V5LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaWYgY19mdW5jdG9vbHM6CisgICAgICAgIGNtcF90b19rZXkgPSBjX2Z1bmN0b29scy5jbXBfdG9fa2V5CisKKworY2xhc3MgVGVzdENtcFRvS2V5UHkoVGVzdENtcFRvS2V5LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY21wX3RvX2tleSA9IHN0YXRpY21ldGhvZChweV9mdW5jdG9vbHMuY21wX3RvX2tleSkKKworCiBjbGFzcyBUZXN0VG90YWxPcmRlcmluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19sdChzZWxmKToKQEAgLTU1Nyw2ICs3MDEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMSkgPiBBKDIpKQogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbGUoc2VsZik6CiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKQEAgLTU3Myw2ICs3MTgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMSkgPj0gQSgyKSkKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2d0KHNlbGYpOgogICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCkBAIC01ODksNiArNzM1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShBKDIpIDwgQSgxKSkKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2dlKHNlbGYpOgogICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCkBAIC02MDUsNiArNzUyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShBKDIpIDw9IEEoMSkpCiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19ub19vdmVyd3JpdGUoc2VsZik6CiAgICAgICAgICMgbmV3IG1ldGhvZHMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcKQEAgLTYyNCwyNyArNzcyLDExOCBAQAogICAgICAgICAgICAgY2xhc3MgQToKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICBkZWYgdGVzdF9idWdfMTAwNDIoc2VsZik6CisgICAgZGVmIHRlc3RfdHlwZV9lcnJvcl93aGVuX25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgIyBidWcgMTAwNDI7IGVuc3VyZSBzdGFjayBvdmVyZmxvdyBkb2VzIG5vdCBvY2N1cgorICAgICAgICAjIHdoZW4gZGVjb3JhdGVkIHR5cGVzIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCi0gICAgICAgIGNsYXNzIFRlc3RUTzoKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0xlc3NUaGFuOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKICAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFRlc3RUTyk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0xlc3NUaGFuKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFRlc3RUTyk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0xlc3NUaGFuKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBUZXN0VE8oOCkgPD0gKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEltcGxlbWVudHNHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzR3JlYXRlclRoYW4pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPiBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQ29tcGFyYXRvck5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTFQgPCAxIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW4oLTEpIDwgMQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMVCA8IExFIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW4oMCkgPCBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKDApCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxUIDwgR1QiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbigxKSA8IEltcGxlbWVudHNHcmVhdGVyVGhhbigxKQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMRSA8PSBMVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbygyKSA8PSBJbXBsZW1lbnRzTGVzc1RoYW4oMikKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTEUgPD0gR0UiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8oMykgPD0gSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbygzKQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHVCA+IEdFIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzR3JlYXRlclRoYW4oNCkgPiBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKDQpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdUID4gTFQiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNHcmVhdGVyVGhhbig1KSA+IEltcGxlbWVudHNMZXNzVGhhbig1KQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHRSA+PSBHVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyg2KSA+PSBJbXBsZW1lbnRzR3JlYXRlclRoYW4oNikKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR0UgPj0gTEUiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8oNykgPj0gSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbyg3KQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHRSB3aGVuIGVxdWFsIik6CisgICAgICAgICAgICBhID0gQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKDgpCisgICAgICAgICAgICBiID0gQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKDgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgYSA+PSBiCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxFIHdoZW4gZXF1YWwiKToKKyAgICAgICAgICAgIGEgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOSkKKyAgICAgICAgICAgIGIgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBhIDw9IGIKIAogY2xhc3MgVGVzdExSVSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9scnUoc2VsZik6CiAgICAgICAgIGRlZiBvcmlnKHgsIHkpOgotICAgICAgICAgICAgcmV0dXJuIDMqeCt5CisgICAgICAgICAgICByZXR1cm4gMyAqIHggKyB5CiAgICAgICAgIGYgPSBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9MjApKG9yaWcpCiAgICAgICAgIGhpdHMsIG1pc3NlcywgbWF4c2l6ZSwgY3VycnNpemUgPSBmLmNhY2hlX2luZm8oKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heHNpemUsIDIwKQpAQCAtNzQ5LDcgKzk4OCw3IEBACiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdXNlcl9mdW5jdGlvbiBleGNlcHRpb25zIGdldCBwYXNzZWQgdGhyb3VnaCB3aXRob3V0CiAgICAgICAgICMgY3JlYXRpbmcgYSBoYXJkLXRvLXJlYWQgY2hhaW5lZCBleGNlcHRpb24uCiAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzMTc3Ci0gICAgICAgIGZvciBtYXhzaXplIGluIChOb25lLCAxMDApOgorICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTI4KToKICAgICAgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemUpCiAgICAgICAgICAgICBkZWYgZnVuYyhpKToKICAgICAgICAgICAgICAgICByZXR1cm4gJ2FiYydbaV0KQEAgLTc2Miw3ICsxMDAxLDcgQEAKICAgICAgICAgICAgICAgICBmdW5jKDE1KQogCiAgICAgZGVmIHRlc3RfbHJ1X3dpdGhfdHlwZXMoc2VsZik6Ci0gICAgICAgIGZvciBtYXhzaXplIGluIChOb25lLCAxMDApOgorICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTI4KToKICAgICAgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9bWF4c2l6ZSwgdHlwZWQ9VHJ1ZSkKICAgICAgICAgICAgIGRlZiBzcXVhcmUoeCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHggKiB4CkBAIC03NzcsNiArMTAxNiwzNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXVhcmUuY2FjaGVfaW5mbygpLmhpdHMsIDQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNxdWFyZS5jYWNoZV9pbmZvKCkubWlzc2VzLCA0KQogCisgICAgZGVmIHRlc3RfbHJ1X3dpdGhfa2V5d29yZF9hcmdzKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCisgICAgICAgIGRlZiBmaWIobik6CisgICAgICAgICAgICBpZiBuIDwgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICAgICAgcmV0dXJuIGZpYihuPW4tMSkgKyBmaWIobj1uLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbZmliKG49bnVtYmVyKSBmb3IgbnVtYmVyIGluIHJhbmdlKDE2KV0sCisgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCwgNTUsIDg5LCAxNDQsIDIzMywgMzc3LCA2MTBdCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPTEyOCwgY3VycnNpemU9MTYpKQorICAgICAgICBmaWIuY2FjaGVfY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCisgICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTAsIG1pc3Nlcz0wLCBtYXhzaXplPTEyOCwgY3VycnNpemU9MCkpCisKKyAgICBkZWYgdGVzdF9scnVfd2l0aF9rZXl3b3JkX2FyZ3NfbWF4c2l6ZV9ub25lKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPU5vbmUpCisgICAgICAgIGRlZiBmaWIobik6CisgICAgICAgICAgICBpZiBuIDwgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICAgICAgcmV0dXJuIGZpYihuPW4tMSkgKyBmaWIobj1uLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2ZpYihuPW51bWJlcikgZm9yIG51bWJlciBpbiByYW5nZSgxNildLAorICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTE2KSkKKyAgICAgICAgZmliLmNhY2hlX2NsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0wLCBtaXNzZXM9MCwgbWF4c2l6ZT1Ob25lLCBjdXJyc2l6ZT0wKSkKKwogICAgIGRlZiB0ZXN0X25lZWRfZm9yX3Jsb2NrKHNlbGYpOgogICAgICAgICAjIFRoaXMgd2lsbCBkZWFkbG9jayBvbiBhbiBMUlUgY2FjaGUgdGhhdCB1c2VzIGEgcmVndWxhciBsb2NrCiAKQEAgLTgwMiwxNyArMTA3MSw0OTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBEb3VibGVFcSgyKSkgICAgICAgICAgICAgICAjIFZlcmlmeSB0aGUgY29ycmVjdCByZXR1cm4gdmFsdWUKIAogCitjbGFzcyBUZXN0U2luZ2xlRGlzcGF0Y2godW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NpbXBsZV9vdmVybG9hZHMoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgZGVmIGdfaW50KGkpOgorICAgICAgICAgICAgcmV0dXJuICJpbnRlZ2VyIgorICAgICAgICBnLnJlZ2lzdGVyKGludCwgZ19pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZygic3RyIiksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKDEpLCAiaW50ZWdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhbMSwyLDNdKSwgImJhc2UiKQorCisgICAgZGVmIHRlc3RfbXJvKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEQoQywgQik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBnX0EoYSk6CisgICAgICAgICAgICByZXR1cm4gIkEiCisgICAgICAgIGRlZiBnX0IoYik6CisgICAgICAgICAgICByZXR1cm4gIkIiCisgICAgICAgIGcucmVnaXN0ZXIoQSwgZ19BKQorICAgICAgICBnLnJlZ2lzdGVyKEIsIGdfQikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEEoKSksICJBIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEIoKSksICJCIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEMoKSksICJBIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKEQoKSksICJCIikKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2RlY29yYXRvcihzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAZy5yZWdpc3RlcihpbnQpCisgICAgICAgIGRlZiBnX2ludChpKToKKyAgICAgICAgICAgIHJldHVybiAiaW50ICVzIiAlIChpLCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKCIiKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoMTIpLCAiaW50IDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnLmRpc3BhdGNoKGludCksIGdfaW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGcuZGlzcGF0Y2gob2JqZWN0KSwgZy5kaXNwYXRjaChzdHIpKQorICAgICAgICAjIE5vdGU6IGluIHRoZSBhc3NlcnQgYWJvdmUgdGhpcyBpcyBub3QgZy4KKyAgICAgICAgIyBAc2luZ2xlZGlzcGF0Y2ggcmV0dXJucyB0aGUgd3JhcHBlci4KKworICAgIGRlZiB0ZXN0X3dyYXBwaW5nX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgICJTaW1wbGUgdGVzdCIKKyAgICAgICAgICAgIHJldHVybiAiVGVzdCIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLl9fbmFtZV9fLCAiZyIpCisgICAgICAgIGlmIHN5cy5mbGFncy5vcHRpbWl6ZSA8IDI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcuX19kb2NfXywgIlNpbXBsZSB0ZXN0IikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGRlY2ltYWwsICdyZXF1aXJlcyBfZGVjaW1hbCcpCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfY19jbGFzc2VzKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIEBnLnJlZ2lzdGVyKGRlY2ltYWwuRGVjaW1hbEV4Y2VwdGlvbikKKyAgICAgICAgZGVmIF8ob2JqKToKKyAgICAgICAgICAgIHJldHVybiBvYmouYXJncworICAgICAgICBzdWJuID0gZGVjaW1hbC5TdWJub3JtYWwoIkV4cG9uZW50IDwgRW1pbiIpCisgICAgICAgIHJuZCA9IGRlY2ltYWwuUm91bmRlZCgiTnVtYmVyIGdvdCByb3VuZGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHN1Ym4pLCAoIkV4cG9uZW50IDwgRW1pbiIsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHJuZCksICgiTnVtYmVyIGdvdCByb3VuZGVkIiwpKQorICAgICAgICBAZy5yZWdpc3RlcihkZWNpbWFsLlN1Ym5vcm1hbCkKKyAgICAgICAgZGVmIF8ob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiVG9vIHNtYWxsIHRvIGNhcmUuIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoc3VibiksICJUb28gc21hbGwgdG8gY2FyZS4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocm5kKSwgKCJOdW1iZXIgZ290IHJvdW5kZWQiLCkpCisKKyAgICBkZWYgdGVzdF9jb21wb3NlX21ybyhzZWxmKToKKyAgICAgICAgIyBOb25lIG9mIHRoZSBleGFtcGxlcyBpbiB0aGlzIHRlc3QgZGVwZW5kIG9uIGhheXN0YWNrIG9yZGVyaW5nLgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgbXJvID0gZnVuY3Rvb2xzLl9jb21wb3NlX21ybworICAgICAgICBiYXNlcyA9IFtjLlNlcXVlbmNlLCBjLk11dGFibGVNYXBwaW5nLCBjLk1hcHBpbmcsIGMuU2V0XQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oZGljdCwgaGF5c3RhY2spCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtkaWN0LCBjLk11dGFibGVNYXBwaW5nLCBjLk1hcHBpbmcsIGMuU2l6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLkl0ZXJhYmxlLCBjLkNvbnRhaW5lciwgb2JqZWN0XSkKKyAgICAgICAgYmFzZXMgPSBbYy5Db250YWluZXIsIGMuTWFwcGluZywgYy5NdXRhYmxlTWFwcGluZywgYy5PcmRlcmVkRGljdF0KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKGMuQ2hhaW5NYXAsIGhheXN0YWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbYy5DaGFpbk1hcCwgYy5NdXRhYmxlTWFwcGluZywgYy5NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5TaXplZCwgYy5JdGVyYWJsZSwgYy5Db250YWluZXIsIG9iamVjdF0pCisKKyAgICAgICAgIyBJZiB0aGVyZSdzIGEgZ2VuZXJpYyBmdW5jdGlvbiB3aXRoIGltcGxlbWVudGF0aW9ucyByZWdpc3RlcmVkIGZvcgorICAgICAgICAjIGJvdGggU2l6ZWQgYW5kIENvbnRhaW5lciwgcGFzc2luZyBhIGRlZmF1bHRkaWN0IHRvIGl0IHJlc3VsdHMgaW4gYW4KKyAgICAgICAgIyBhbWJpZ3VvdXMgZGlzcGF0Y2ggd2hpY2ggd2lsbCBjYXVzZSBhIFJ1bnRpbWVFcnJvciAoc2VlCisgICAgICAgICMgdGVzdF9tcm9fY29uZmxpY3RzKS4KKyAgICAgICAgYmFzZXMgPSBbYy5Db250YWluZXIsIGMuU2l6ZWQsIHN0cl0KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKGMuZGVmYXVsdGRpY3QsIFtjLlNpemVkLCBjLkNvbnRhaW5lciwgc3RyXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW2MuZGVmYXVsdGRpY3QsIGRpY3QsIGMuU2l6ZWQsIGMuQ29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0XSkKKworICAgICAgICAjIE11dGFibGVTZXF1ZW5jZSBiZWxvdyBpcyByZWdpc3RlcmVkIGRpcmVjdGx5IG9uIEQuIEluIG90aGVyIHdvcmRzLCBpdAorICAgICAgICAjIHByZWNlZWRzIE11dGFibGVNYXBwaW5nIHdoaWNoIG1lYW5zIHNpbmdsZSBkaXNwYXRjaCB3aWxsIGFsd2F5cworICAgICAgICAjIGNob29zZSBNdXRhYmxlU2VxdWVuY2UgaGVyZS4KKyAgICAgICAgY2xhc3MgRChjLmRlZmF1bHRkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYy5NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoRCkKKyAgICAgICAgYmFzZXMgPSBbYy5NdXRhYmxlU2VxdWVuY2UsIGMuTXV0YWJsZU1hcHBpbmddCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhELCBiYXNlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW0QsIGMuTXV0YWJsZVNlcXVlbmNlLCBjLlNlcXVlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5kZWZhdWx0ZGljdCwgZGljdCwgYy5NdXRhYmxlTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuTWFwcGluZywgYy5TaXplZCwgYy5JdGVyYWJsZSwgYy5Db250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RdKQorCisgICAgICAgICMgQ29udGFpbmVyIGFuZCBDYWxsYWJsZSBhcmUgcmVnaXN0ZXJlZCBvbiBkaWZmZXJlbnQgYmFzZSBjbGFzc2VzIGFuZAorICAgICAgICAjIGEgZ2VuZXJpYyBmdW5jdGlvbiBzdXBwb3J0aW5nIGJvdGggc2hvdWxkIGFsd2F5cyBwaWNrIHRoZSBDYWxsYWJsZQorICAgICAgICAjIGltcGxlbWVudGF0aW9uIGlmIGEgQyBpbnN0YW5jZSBpcyBwYXNzZWQuCisgICAgICAgIGNsYXNzIEMoYy5kZWZhdWx0ZGljdCk6CisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBiYXNlcyA9IFtjLlNpemVkLCBjLkNhbGxhYmxlLCBjLkNvbnRhaW5lciwgYy5NYXBwaW5nXQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oQywgaGF5c3RhY2spCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtDLCBjLkNhbGxhYmxlLCBjLmRlZmF1bHRkaWN0LCBkaWN0LCBjLk1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLlNpemVkLCBjLkl0ZXJhYmxlLCBjLkNvbnRhaW5lciwgb2JqZWN0XSkKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2FiYyhzZWxmKToKKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIGQgPSB7ImEiOiAiYiJ9CisgICAgICAgIGwgPSBbMSwgMiwgM10KKyAgICAgICAgcyA9IHtvYmplY3QoKSwgTm9uZX0KKyAgICAgICAgZiA9IGZyb3plbnNldChzKQorICAgICAgICB0ID0gKDEsIDIsIDMpCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgImJhc2UiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2l6ZWQsIGxhbWJkYSBvYmo6ICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuTXV0YWJsZU1hcHBpbmcsIGxhbWJkYSBvYmo6ICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuQ2hhaW5NYXAsIGxhbWJkYSBvYmo6ICJjaGFpbm1hcCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikgICMgaXJyZWxldmFudCBBQkNzIHJlZ2lzdGVyZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuTXV0YWJsZVNlcXVlbmNlLCBsYW1iZGEgb2JqOiAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuTXV0YWJsZVNldCwgbGFtYmRhIG9iajogIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk1hcHBpbmcsIGxhbWJkYSBvYmo6ICJtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKSAgIyBub3Qgc3BlY2lmaWMgZW5vdWdoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNlcXVlbmNlLCBsYW1iZGEgb2JqOiAic2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNldCwgbGFtYmRhIG9iajogInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3RlcihkaWN0LCBsYW1iZGEgb2JqOiAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKGxpc3QsIGxhbWJkYSBvYmo6ICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKHNldCwgbGFtYmRhIG9iajogImNvbmNyZXRlLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAiY29uY3JldGUtc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKGZyb3plbnNldCwgbGFtYmRhIG9iajogImZyb3plbi1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImNvbmNyZXRlLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgImZyb3plbi1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIodHVwbGUsIGxhbWJkYSBvYmo6ICJ0dXBsZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAiY29uY3JldGUtc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAiZnJvemVuLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInR1cGxlIikKKworICAgIGRlZiB0ZXN0X2MzX2FiYyhzZWxmKToKKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIG1ybyA9IGZ1bmN0b29scy5fYzNfbXJvCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQihBKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwICAgIyBpbXBsaWVzIFNpemVkCisgICAgICAgIEBjLkNvbnRhaW5lci5yZWdpc3RlcgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEQob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MgICAjIHVucmVsYXRlZAorICAgICAgICBjbGFzcyBYKEQsIEMsIEIpOgorICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MgICAjIGltcGxpZXMgQ2FsbGFibGUKKyAgICAgICAgZXhwZWN0ZWQgPSBbWCwgYy5DYWxsYWJsZSwgRCwgQywgYy5Db250YWluZXIsIEIsIGMuU2l6ZWQsIEEsIG9iamVjdF0KKyAgICAgICAgZm9yIGFiY3MgaW4gcGVybXV0YXRpb25zKFtjLlNpemVkLCBjLkNhbGxhYmxlLCBjLkNvbnRhaW5lcl0pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtcm8oWCwgYWJjcz1hYmNzKSwgZXhwZWN0ZWQpCisgICAgICAgICMgdW5yZWxhdGVkIEFCQ3MgZG9uJ3QgYXBwZWFyIGluIHRoZSByZXN1bHRpbmcgTVJPCisgICAgICAgIG1hbnlfYWJjcyA9IFtjLk1hcHBpbmcsIGMuU2l6ZWQsIGMuQ2FsbGFibGUsIGMuQ29udGFpbmVyLCBjLkl0ZXJhYmxlXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ybyhYLCBhYmNzPW1hbnlfYWJjcyksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfbXJvX2NvbmZsaWN0cyhzZWxmKToKKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgY2xhc3MgTyhjLlNpemVkKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIG8gPSBPKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAiYmFzZSIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5JdGVyYWJsZSwgbGFtYmRhIGFyZzogIml0ZXJhYmxlIikKKyAgICAgICAgZy5yZWdpc3RlcihjLkNvbnRhaW5lciwgbGFtYmRhIGFyZzogImNvbnRhaW5lciIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TaXplZCwgbGFtYmRhIGFyZzogInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNldCwgbGFtYmRhIGFyZzogInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNpemVkIikKKyAgICAgICAgYy5JdGVyYWJsZS5yZWdpc3RlcihPKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobyksICJzaXplZCIpICAgIyBiZWNhdXNlIGl0J3MgZXhwbGljaXRseSBpbiBfX21yb19fCisgICAgICAgIGMuQ29udGFpbmVyLnJlZ2lzdGVyKE8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNpemVkIikgICAjIHNlZSBhYm92ZTogU2l6ZWQgaXMgaW4gX19tcm9fXworICAgICAgICBjLlNldC5yZWdpc3RlcihPKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobyksICJzZXQiKSAgICAgIyBiZWNhdXNlIGMuU2V0IGlzIGEgc3ViY2xhc3Mgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYy5TaXplZCBhbmQgYy5Db250YWluZXIKKyAgICAgICAgY2xhc3MgUDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcCA9IFAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocCksICJiYXNlIikKKyAgICAgICAgYy5JdGVyYWJsZS5yZWdpc3RlcihQKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocCksICJpdGVyYWJsZSIpCisgICAgICAgIGMuQ29udGFpbmVyLnJlZ2lzdGVyKFApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyByZV9vbmU6CisgICAgICAgICAgICBnKHApCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICBzdHIocmVfb25lLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAoKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkl0ZXJhYmxlJz4iKSwKKyAgICAgICAgICAgICAoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuSXRlcmFibGUnPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiIpKSwKKyAgICAgICAgKQorICAgICAgICBjbGFzcyBRKGMuU2l6ZWQpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgcSA9IFEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocSksICJzaXplZCIpCisgICAgICAgIGMuSXRlcmFibGUucmVnaXN0ZXIoUSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHEpLCAic2l6ZWQiKSAgICMgYmVjYXVzZSBpdCdzIGV4cGxpY2l0bHkgaW4gX19tcm9fXworICAgICAgICBjLlNldC5yZWdpc3RlcihRKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocSksICJzZXQiKSAgICAgIyBiZWNhdXNlIGMuU2V0IGlzIGEgc3ViY2xhc3Mgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYy5TaXplZCBhbmQgYy5JdGVyYWJsZQorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBoKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIEBoLnJlZ2lzdGVyKGMuU2l6ZWQpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gInNpemVkIgorICAgICAgICBAaC5yZWdpc3RlcihjLkNvbnRhaW5lcikKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiY29udGFpbmVyIgorICAgICAgICAjIEV2ZW4gdGhvdWdoIFNpemVkIGFuZCBDb250YWluZXIgYXJlIGV4cGxpY2l0IGJhc2VzIG9mIE11dGFibGVNYXBwaW5nLAorICAgICAgICAjIHRoaXMgQUJDIGlzIGltcGxpY2l0bHkgcmVnaXN0ZXJlZCBvbiBkZWZhdWx0ZGljdCB3aGljaCBtYWtlcyBhbGwgb2YKKyAgICAgICAgIyBNdXRhYmxlTWFwcGluZydzIGJhc2VzIGltcGxpY2l0IGFzIHdlbGwgZnJvbSBkZWZhdWx0ZGljdCdzCisgICAgICAgICMgcGVyc3BlY3RpdmUuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyByZV90d286CisgICAgICAgICAgICBoKGMuZGVmYXVsdGRpY3QobGFtYmRhOiAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIHN0cihyZV90d28uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICgoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuU2l6ZWQnPiIpLAorICAgICAgICAgICAgICgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+IikpLAorICAgICAgICApCisgICAgICAgIGNsYXNzIFIoYy5kZWZhdWx0ZGljdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGMuTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKFIpCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGkoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGkucmVnaXN0ZXIoYy5NdXRhYmxlTWFwcGluZykKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAibWFwcGluZyIKKyAgICAgICAgQGkucmVnaXN0ZXIoYy5NdXRhYmxlU2VxdWVuY2UpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gInNlcXVlbmNlIgorICAgICAgICByID0gUigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaShyKSwgInNlcXVlbmNlIikKKyAgICAgICAgY2xhc3MgUzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgVChTLCBjLlNpemVkKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHQgPSBUKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoKHQpLCAic2l6ZWQiKQorICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgodCksICJzaXplZCIpICAgIyBiZWNhdXNlIGl0J3MgZXhwbGljaXRseSBpbiB0aGUgTVJPCisgICAgICAgIGNsYXNzIFU6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICB1ID0gVSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCh1KSwgInNpemVkIikgICAjIGltcGxpY2l0IFNpemVkIHN1YmNsYXNzIGluZmVycmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZyb20gdGhlIGV4aXN0ZW5jZSBvZiBfX2xlbl9fKCkKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoVSkKKyAgICAgICAgIyBUaGVyZSBpcyBubyBwcmVmZXJlbmNlIGZvciByZWdpc3RlcmVkIHZlcnN1cyBpbmZlcnJlZCBBQkNzLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgcmVfdGhyZWU6CisgICAgICAgICAgICBoKHUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICBzdHIocmVfdGhyZWUuZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICgoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuU2l6ZWQnPiIpLAorICAgICAgICAgICAgICgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+IikpLAorICAgICAgICApCisgICAgICAgIGNsYXNzIFYoYy5TaXplZCwgUyk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBqKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIEBqLnJlZ2lzdGVyKFMpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gInMiCisgICAgICAgIEBqLnJlZ2lzdGVyKGMuQ29udGFpbmVyKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJjb250YWluZXIiCisgICAgICAgIHYgPSBWKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqKHYpLCAicyIpCisgICAgICAgIGMuQ29udGFpbmVyLnJlZ2lzdGVyKFYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaih2KSwgImNvbnRhaW5lciIpICAgIyBiZWNhdXNlIGl0IGVuZHMgdXAgcmlnaHQgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNpemVkIGluIHRoZSBNUk8KKworICAgIGRlZiB0ZXN0X2NhY2hlX2ludmFsaWRhdGlvbihzZWxmKToKKyAgICAgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgVXNlckRpY3QKKyAgICAgICAgY2xhc3MgVHJhY2luZ0RpY3QoVXNlckRpY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgc3VwZXIoVHJhY2luZ0RpY3QsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9vcHMgPSBbXQorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X29wcyA9IFtdCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmRhdGFba2V5XQorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X29wcy5hcHBlbmQoa2V5KQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9vcHMuYXBwZW5kKGtleSkKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGFba2V5XSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5kYXRhLmNsZWFyKCkKKyAgICAgICAgX29yaWdfd2tkID0gZnVuY3Rvb2xzLldlYWtLZXlEaWN0aW9uYXJ5CisgICAgICAgIHRkID0gVHJhY2luZ0RpY3QoKQorICAgICAgICBmdW5jdG9vbHMuV2Vha0tleURpY3Rpb25hcnkgPSBsYW1iZGE6IHRkCisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIGQgPSB7fQorICAgICAgICBsID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLCBnLnJlZ2lzdHJ5W29iamVjdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbZGljdF0sIGcucmVnaXN0cnlbb2JqZWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2xpc3RdLCBnLnJlZ2lzdHJ5W29iamVjdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtkaWN0XSwgdGQuZGF0YVtsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdF0pCisgICAgICAgIGcucmVnaXN0ZXIobGlzdCwgbGFtYmRhIGFyZzogImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtkaWN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMuX2ZpbmRfaW1wbChkaWN0LCBnLnJlZ2lzdHJ5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLl9maW5kX2ltcGwobGlzdCwgZy5yZWdpc3RyeSkpCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGMuTXV0YWJsZU1hcHBpbmcucmVnaXN0ZXIoWCkgICAjIFdpbGwgbm90IGludmFsaWRhdGUgdGhlIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBub3QgdXNpbmcgQUJDcyB5ZXQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2l6ZWQsIGxhbWJkYSBhcmc6ICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0LCBsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIGcuZGlzcGF0Y2gobGlzdCkKKyAgICAgICAgZy5kaXNwYXRjaChkaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0LCBsaXN0LCBkaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIGMuTXV0YWJsZVNldC5yZWdpc3RlcihYKSAgICAgICAjIFdpbGwgaW52YWxpZGF0ZSB0aGUgY2FjaGUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikgICAjIFN0YWxlIGNhY2hlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAxKQorICAgICAgICBnLnJlZ2lzdGVyKGMuTXV0YWJsZU1hcHBpbmcsIGxhbWJkYSBhcmc6ICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDIpCisgICAgICAgIGcucmVnaXN0ZXIoZGljdCwgbGFtYmRhIGFyZzogImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIGcuX2NsZWFyX2NhY2hlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBmdW5jdG9vbHMuV2Vha0tleURpY3Rpb25hcnkgPSBfb3JpZ193a2QKKworCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgdGVzdF9jbGFzc2VzID0gKAotICAgICAgICBUZXN0UGFydGlhbCwKLSAgICAgICAgVGVzdFBhcnRpYWxTdWJjbGFzcywKLSAgICAgICAgVGVzdFB5dGhvblBhcnRpYWwsCisgICAgICAgIFRlc3RQYXJ0aWFsQywKKyAgICAgICAgVGVzdFBhcnRpYWxQeSwKKyAgICAgICAgVGVzdFBhcnRpYWxDU3ViY2xhc3MsCisgICAgICAgIFRlc3RQYXJ0aWFsTWV0aG9kLAogICAgICAgICBUZXN0VXBkYXRlV3JhcHBlciwKICAgICAgICAgVGVzdFRvdGFsT3JkZXJpbmcsCi0gICAgICAgIFRlc3RDbXBUb0tleSwKKyAgICAgICAgVGVzdENtcFRvS2V5QywKKyAgICAgICAgVGVzdENtcFRvS2V5UHksCiAgICAgICAgIFRlc3RXcmFwcywKICAgICAgICAgVGVzdFJlZHVjZSwKICAgICAgICAgVGVzdExSVSwKKyAgICAgICAgVGVzdFNpbmdsZURpc3BhdGNoLAogICAgICkKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weSBiL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5CmluZGV4IGEwYzE1NmYuLmJlYWM5OTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5CkBAIC04Miw2ICs4MiwxNCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gZGlkbid0IG9jY3VyIikKIAorICAgIGRlZiB0ZXN0X2JhZGZ1dHVyZTEwKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGJhZHN5bnRheF9mdXR1cmUxMAorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJyb3JfbG9jYXRpb24obXNnKSwgKCJiYWRzeW50YXhfZnV0dXJlMTAiLCAnMycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gZGlkbid0IG9jY3VyIikKKwogICAgIGRlZiB0ZXN0X3BhcnNlcmhhY2soc2VsZik6CiAgICAgICAgICMgdGVzdCB0aGF0IHRoZSBwYXJzZXIuYzo6ZnV0dXJlX2hhY2sgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQKICAgICAgICAgIyBOb3RlOiBhbHRob3VnaCB0aGlzIHRlc3QgbXVzdCBwYXNzLCBpdCdzIG5vdCB0ZXN0aW5nIHRoZSBvcmlnaW5hbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nYy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2MucHkKaW5kZXggYzU5YjcyZS4uN2ViMTA0YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2djLnB5CkBAIC0xLDYgKzEsOCBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHZlcmJvc2UsIHJlZmNvdW50X3Rlc3QsIHJ1bl91bml0dGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcF9weXRob25fc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwX3B5dGhvbl9zdGRlcnIsIGNweXRob25fb25seSkKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBtYWtlX3NjcmlwdCwgdGVtcF9kaXIKKwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBnYwpAQCAtMTEsNiArMTMsMTUgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiAKK3RyeToKKyAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgd2l0aF90cF9kZWwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBkZWYgd2l0aF90cF9kZWwoY2xzKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigncmVxdWlyZXMgX3Rlc3RjYXBpLndpdGhfdHBfZGVsJykKKyAgICAgICAgcmV0dXJuIEMKKwogIyMjIFN1cHBvcnQgY29kZQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0zOCw2ICs0OSw3IEBACiAgICAgICAgICMgZ2MgY29sbGVjdHMgaXQuCiAgICAgICAgIHNlbGYud3IgPSB3ZWFrcmVmLnJlZihDMTA1NTgyMCg2NjYpLCBpdF9oYXBwZW5lZCkKIAorQHdpdGhfdHBfZGVsCiBjbGFzcyBVbmNvbGxlY3RhYmxlKG9iamVjdCk6CiAgICAgIiIiQ3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlIHdpdGggbXVsdGlwbGUgX19kZWxfXyBtZXRob2RzLgogCkBAIC01MCw3ICs2Miw3IEBACiAgICAgICAgICAgICBzZWxmLnBhcnRuZXIgPSBVbmNvbGxlY3RhYmxlKHBhcnRuZXI9c2VsZikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucGFydG5lciA9IHBhcnRuZXIKLSAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICBkZWYgX190cF9kZWxfXyhzZWxmKToKICAgICAgICAgcGFzcwogCiAjIyMgVGVzdHMKQEAgLTEzOSwxMSArMTUxLDEzIEBACiAgICAgICAgIGRlbCBhCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQogCi0gICAgZGVmIHRlc3RfZmluYWxpemVyKHNlbGYpOgorICAgIEBjcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9sZWdhY3lfZmluYWxpemVyKHNlbGYpOgogICAgICAgICAjIEEoKSBpcyB1bmNvbGxlY3RhYmxlIGlmIGl0IGlzIHBhcnQgb2YgYSBjeWNsZSwgbWFrZSBzdXJlIGl0IHNob3dzIHVwCiAgICAgICAgICMgaW4gZ2MuZ2FyYmFnZS4KKyAgICAgICAgQHdpdGhfdHBfZGVsCiAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6IHBhc3MKICAgICAgICAgY2xhc3MgQjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEEoKQpAQCAtMTYzLDExICsxNzcsMTMgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkbid0IGZpbmQgb2JqIGluIGdhcmJhZ2UgKGZpbmFsaXplcikiKQogICAgICAgICBnYy5nYXJiYWdlLnJlbW92ZShvYmopCiAKLSAgICBkZWYgdGVzdF9maW5hbGl6ZXJfbmV3Y2xhc3Moc2VsZik6CisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2xlZ2FjeV9maW5hbGl6ZXJfbmV3Y2xhc3Moc2VsZik6CiAgICAgICAgICMgQSgpIGlzIHVuY29sbGVjdGFibGUgaWYgaXQgaXMgcGFydCBvZiBhIGN5Y2xlLCBtYWtlIHN1cmUgaXQgc2hvd3MgdXAKICAgICAgICAgIyBpbiBnYy5nYXJiYWdlLgorICAgICAgICBAd2l0aF90cF9kZWwKICAgICAgICAgY2xhc3MgQShvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOiBwYXNzCiAgICAgICAgIGNsYXNzIEIob2JqZWN0KToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEEoKQpAQCAtNTY0LDE2ICs1ODAsMTkgQEAKICAgICAgICAgICAgICMgd291bGQgYmUgZGFtYWdlZCwgd2l0aCBhbiBlbXB0eSBfX2RpY3RfXy4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgTm9uZSkKIAorICAgIEBjcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9nYXJiYWdlX2F0X3NodXRkb3duKHNlbGYpOgogICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgICAgICBjb2RlID0gIiIiaWYgMToKICAgICAgICAgICAgIGltcG9ydCBnYworICAgICAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICAgICAgQF90ZXN0Y2FwaS53aXRoX3RwX2RlbAogICAgICAgICAgICAgY2xhc3MgWDoKICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiPFggJSVyPiIgJSUgc2VsZi5uYW1lCi0gICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAgICAgeCA9IFgoJ2ZpcnN0JykKQEAgLTYxMCw2ICs2MjksNjYgQEAKICAgICAgICAgc3RkZXJyID0gcnVuX2NvbW1hbmQoY29kZSAlICJnYy5ERUJVR19TQVZFQUxMIikKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiInVuY29sbGVjdGFibGUgb2JqZWN0cyBhdCBzaHV0ZG93biIsIHN0ZGVycikKIAorICAgIGRlZiB0ZXN0X2djX21haW5fbW9kdWxlX2F0X3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZSB0aHJvdWdoIHRoZSBfX21haW5fXyBtb2R1bGUgYW5kIGNoZWNrCisgICAgICAgICMgaXQgZ2V0cyBjb2xsZWN0ZWQgYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHdlYWtyZWYKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdfX2RlbF9fIGNhbGxlZCcpCisgICAgICAgICAgICBsID0gW0MoKV0KKyAgICAgICAgICAgIGwuYXBwZW5kKGwpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiJ19fZGVsX18gY2FsbGVkJykKKworICAgIGRlZiB0ZXN0X2djX29yZGluYXJ5X21vZHVsZV9hdF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBTYW1lIGFzIGFib3ZlLCBidXQgd2l0aCBhIG5vbi1fX21haW5fXyBtb2R1bGUuCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kdWxlID0gIiIiaWYgMToKKyAgICAgICAgICAgICAgICBpbXBvcnQgd2Vha3JlZgorICAgICAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ19fZGVsX18gY2FsbGVkJykKKyAgICAgICAgICAgICAgICBsID0gW0MoKV0KKyAgICAgICAgICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCAlcikKKyAgICAgICAgICAgICAgICBpbXBvcnQgZ2N0ZXN0CisgICAgICAgICAgICAgICAgIiIiICUgKHNjcmlwdF9kaXIsKQorICAgICAgICAgICAgbWFrZV9zY3JpcHQoc2NyaXB0X2RpciwgJ2djdGVzdCcsIG1vZHVsZSkKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGInX19kZWxfXyBjYWxsZWQnKQorCisgICAgZGVmIHRlc3RfZ2V0X3N0YXRzKHNlbGYpOgorICAgICAgICBzdGF0cyA9IGdjLmdldF9zdGF0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN0YXRzKSwgMykKKyAgICAgICAgZm9yIHN0IGluIHN0YXRzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0LCBkaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ImNvbGxlY3RlZCIsICJjb2xsZWN0aW9ucyIsICJ1bmNvbGxlY3RhYmxlIn0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdFsiY29sbGVjdGVkIl0sIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdFsiY29sbGVjdGlvbnMiXSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0WyJ1bmNvbGxlY3RhYmxlIl0sIDApCisgICAgICAgICMgQ2hlY2sgdGhhdCBjb2xsZWN0aW9uIGNvdW50cyBhcmUgaW5jcmVtZW50ZWQgY29ycmVjdGx5CisgICAgICAgIGlmIGdjLmlzZW5hYmxlZCgpOgorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGdjLmVuYWJsZSkKKyAgICAgICAgICAgIGdjLmRpc2FibGUoKQorICAgICAgICBvbGQgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBnYy5jb2xsZWN0KDApCisgICAgICAgIG5ldyA9IGdjLmdldF9zdGF0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3WzBdWyJjb2xsZWN0aW9ucyJdLCBvbGRbMF1bImNvbGxlY3Rpb25zIl0gKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1sxXVsiY29sbGVjdGlvbnMiXSwgb2xkWzFdWyJjb2xsZWN0aW9ucyJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1syXVsiY29sbGVjdGlvbnMiXSwgb2xkWzJdWyJjb2xsZWN0aW9ucyJdKQorICAgICAgICBnYy5jb2xsZWN0KDIpCisgICAgICAgIG5ldyA9IGdjLmdldF9zdGF0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3WzBdWyJjb2xsZWN0aW9ucyJdLCBvbGRbMF1bImNvbGxlY3Rpb25zIl0gKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1sxXVsiY29sbGVjdGlvbnMiXSwgb2xkWzFdWyJjb2xsZWN0aW9ucyJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1syXVsiY29sbGVjdGlvbnMiXSwgb2xkWzJdWyJjb2xsZWN0aW9ucyJdICsgMSkKKwogCiBjbGFzcyBHQ0NhbGxiYWNrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTY5Niw2ICs3NzUsNyBAQAogICAgICAgICAgICAgaW5mbyA9IHZbMl0KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1siZ2VuZXJhdGlvbiJdLCAyKQogCisgICAgQGNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2NvbGxlY3RfZ2FyYmFnZShzZWxmKToKICAgICAgICAgc2VsZi5wcmVjbGVhbigpCiAgICAgICAgICMgRWFjaCBvZiB0aGVzZSBjYXVzZSBmb3VyIG9iamVjdHMgdG8gYmUgZ2FyYmFnZTogVHdvCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dkYi5weSBiL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CmluZGV4IDg0NjQyMmIuLjBlMjU0YTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5CkBAIC01LDYgKzUsNyBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCByZQoraW1wb3J0IHBwcmludAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCBzeXNjb25maWcKQEAgLTE3LDYgKzE4LDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBfdGhyZWFkID0gTm9uZQogCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlLCBweXRob25faXNfb3B0aW1pemVkCiAKIHRyeToKQEAgLTQwLDYgKzQyLDggQEAKIGNoZWNrb3V0X2hvb2tfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24tZ2RiLnB5JykKIAorUFlUSE9OSEFTSFNFRUQgPSAnMTIzJworCiBkZWYgcnVuX2dkYigqYXJncywgKiplbnZfdmFycyk6CiAgICAgIiIiUnVucyBnZGIgaW4gLS1iYXRjaCBtb2RlIHdpdGggdGhlIGFkZGl0aW9uYWwgYXJndW1lbnRzIGdpdmVuIGJ5ICphcmdzLgogCkBAIC0xNDQsNyArMTQ4LDcgQEAKICAgICAgICAgIyBwcmludCAoJyAnLmpvaW4oYXJncykpCiAKICAgICAgICAgIyBVc2UgImFyZ3MiIHRvIGludm9rZSBnZGIsIGNhcHR1cmluZyBzdGRvdXQsIHN0ZGVycjoKLSAgICAgICAgb3V0LCBlcnIgPSBydW5fZ2RiKCphcmdzLCBQWVRIT05IQVNIU0VFRD0nMCcpCisgICAgICAgIG91dCwgZXJyID0gcnVuX2dkYigqYXJncywgUFlUSE9OSEFTSFNFRUQ9UFlUSE9OSEFTSFNFRUQpCiAKICAgICAgICAgZXJybGluZXMgPSBlcnIuc3BsaXRsaW5lcygpCiAgICAgICAgIHVuZXhwZWN0ZWRfZXJybGluZXMgPSBbXQpAQCAtMTY1LDYgKzE2OSwxMCBAQAogICAgICAgICAgICAgJ2xpbnV4LWdhdGUuc28nLAogICAgICAgICAgICAgJ0RvIHlvdSBuZWVkICJzZXQgc29saWItc2VhcmNoLXBhdGgiIG9yICcKICAgICAgICAgICAgICcic2V0IHN5c3Jvb3QiPycsCisgICAgICAgICAgICAnd2FybmluZzogU291cmNlIGZpbGUgaXMgbW9yZSByZWNlbnQgdGhhbiBleGVjdXRhYmxlLicsCisgICAgICAgICAgICAjIElzc3VlICMxOTc1MzogbWlzc2luZyBzeW1ib2xzIG9uIFN5c3RlbSBaCisgICAgICAgICAgICAnTWlzc2luZyBzZXBhcmF0ZSBkZWJ1Z2luZm8gZm9yICcsCisgICAgICAgICAgICAnVHJ5OiB6eXBwZXIgaW5zdGFsbCAtQyAnLAogICAgICAgICAgICAgKQogICAgICAgICBmb3IgbGluZSBpbiBlcnJsaW5lczoKICAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoaWdub3JlX3BhdHRlcm5zKToKQEAgLTI0OCw5ICsyNTYsOCBAQAogICAgIGRlZiB0ZXN0X2RpY3RzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZGljdGlvbmFyaWVzJwogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoe30pCi0gICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7J2Zvbyc6ICdiYXInfSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzogNDJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzogNDJ9IikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2Jhcid9LCAieydmb28nOiAnYmFyJ30iKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJywgJ2RvdWdsYXMnOiA0Mn0sICJ7J2RvdWdsYXMnOiA0MiwgJ2Zvbyc6ICdiYXInfSIpCiAKICAgICBkZWYgdGVzdF9saXN0cyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGxpc3RzJwpAQCAtMzA1LDI2ICszMTIsMzAgQEAKIAogICAgIGRlZiB0ZXN0X3R1cGxlcyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHR1cGxlcycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHR1cGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih0dXBsZSgpLCAnKCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKDEsKSwgJygxLCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKCdmb28nLCAnYmFyJywgJ2JheicpKQogCiAgICAgZGVmIHRlc3Rfc2V0cyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHNldHMnCi0gICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoKSkKKyAgICAgICAgaWYgKGdkYl9tYWpvcl92ZXJzaW9uLCBnZGJfbWlub3JfdmVyc2lvbikgPCAoNywgMyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJwcmV0dHktcHJpbnRpbmcgb2Ygc2V0cyBuZWVkcyBnZGIgNy4zIG9yIGxhdGVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldCgpLCAnc2V0KCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc2V0KFsnYScsICdiJ10pLCAieydhJywgJ2InfSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoWzQsIDUsIDZdKSwgIns0LCA1LCA2fSIpCiAKICAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBoYW5kbGUgc2V0cyBjb250YWluaW5nIHRoZSAiZHVtbXkiIGtleSB2YWx1ZSwKICAgICAgICAgIyB3aGljaCBoYXBwZW5zIG9uIGRlbGV0aW9uOgogICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJ3MgPSBzZXQoWydhJywnYiddKQotcy5wb3AoKQorcy5yZW1vdmUoJ2EnKQogaWQocyknJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICJ7J2InfSIpCiAKICAgICBkZWYgdGVzdF9mcm96ZW5zZXRzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZnJvemVuc2V0cycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldCgpKQorICAgICAgICBpZiAoZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uKSA8ICg3LCAzKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInByZXR0eS1wcmludGluZyBvZiBmcm96ZW5zZXRzIG5lZWRzIGdkYiA3LjMgb3IgbGF0ZXIiKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KCksICdmcm96ZW5zZXQoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoWydhJywgJ2InXSksICJmcm96ZW5zZXQoeydhJywgJ2InfSkiKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KFs0LCA1LCA2XSksICJmcm96ZW5zZXQoezQsIDUsIDZ9KSIpCiAKQEAgLTg0MSw2ICs4NTIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmEgPSAxXG5iID0gMlxuYyA9IDNcbi4qIikKIAogZGVmIHRlc3RfbWFpbigpOgorICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgcHJpbnQoIkdEQiB2ZXJzaW9uOiIpCisgICAgICAgIGZvciBsaW5lIGluIG9zLmZzZGVjb2RlKGdkYl92ZXJzaW9uKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBwcmludCgiICIgKiA0ICsgbGluZSkKICAgICBydW5fdW5pdHRlc3QoUHJldHR5UHJpbnRUZXN0cywKICAgICAgICAgICAgICAgICAgUHlMaXN0VGVzdHMsCiAgICAgICAgICAgICAgICAgIFN0YWNrTmF2aWdhdGlvblRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CmluZGV4IDk1ODA1NGEuLjkxYWZlNDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKQEAgLTEsMyArMSw1NSBAQAoraW1wb3J0IGdjCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIEZpbmFsaXphdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZnJhbWVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICAjIEEgZ2VuZXJhdG9yIGZyYW1lIGNhbiBiZSByZXN1cnJlY3RlZCBieSBhIGdlbmVyYXRvcidzIGZpbmFsaXphdGlvbi4KKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgbm9ubG9jYWwgZnJhbWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKQorCisgICAgICAgIGcgPSBnZW4oKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGcpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgZGVsIGcKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnJhbWUpCisgICAgICAgIGRlbCBmcmFtZQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgQSBnZW5lcmF0b3IgY2F1Z2h0IGluIGEgcmVmY3ljbGUgZ2V0cyBmaW5hbGl6ZWQgYW55d2F5LgorICAgICAgICBvbGRfZ2FyYmFnZSA9IGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgZmluYWxpemVkID0gRmFsc2UKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgbm9ubG9jYWwgZmluYWxpemVkCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZyA9IHlpZWxkCisgICAgICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZWQgPSBUcnVlCisKKyAgICAgICAgZyA9IGdlbigpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgZy5zZW5kKGcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzeXMuZ2V0cmVmY291bnQoZyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluYWxpemVkKQorICAgICAgICBkZWwgZworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluYWxpemVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdhcmJhZ2UsIG9sZF9nYXJiYWdlKQorCisKIHR1dG9yaWFsX3Rlc3RzID0gIiIiCiBMZXQncyB0cnkgYSBzaW1wbGUgZ2VuZXJhdG9yOgogCkBAIC0zODQsOCArNDM2LDggQEAKID4+PiBbcyBmb3IgcyBpbiBkaXIoaSkgaWYgbm90IHMuc3RhcnRzd2l0aCgnXycpXQogWydjbG9zZScsICdnaV9jb2RlJywgJ2dpX2ZyYW1lJywgJ2dpX3J1bm5pbmcnLCAnc2VuZCcsICd0aHJvdyddCiA+Pj4gZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IEhBVkVfRE9DU1RSSU5HUwotPj4+IHByaW50KGkuX19uZXh0X18uX19kb2NfXyBpZiBIQVZFX0RPQ1NUUklOR1MgZWxzZSAneC5fX25leHRfXygpIDw9PT4gbmV4dCh4KScpCi14Ll9fbmV4dF9fKCkgPD09PiBuZXh0KHgpCis+Pj4gcHJpbnQoaS5fX25leHRfXy5fX2RvY19fIGlmIEhBVkVfRE9DU1RSSU5HUyBlbHNlICdJbXBsZW1lbnQgbmV4dChzZWxmKS4nKQorSW1wbGVtZW50IG5leHQoc2VsZikuCiA+Pj4gaXRlcihpKSBpcyBpCiBUcnVlCiA+Pj4gaW1wb3J0IHR5cGVzCkBAIC0xNzI5LDkgKzE3ODEsNyBAQAogPj4+IGcgPSBmKCkKID4+PiBuZXh0KGcpCiA+Pj4gZGVsIGcKLT4+PiBzeXMuc3RkZXJyLmdldHZhbHVlKCkuc3RhcnRzd2l0aCgKLS4uLiAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6ICdnZW5lcmF0b3IgaWdub3JlZCBHZW5lcmF0b3JFeGl0JyBpbiAiCi0uLi4gKQorPj4+ICJSdW50aW1lRXJyb3I6IGdlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQiIGluIHN5cy5zdGRlcnIuZ2V0dmFsdWUoKQogVHJ1ZQogPj4+IHN5cy5zdGRlcnIgPSBvbGQKIApAQCAtMTg0MSwyMiArMTg5MSwyMyBAQAogLi4uICAgICBzeXMuc3RkZXJyID0gaW8uU3RyaW5nSU8oKQogLi4uICAgICBjbGFzcyBMZWFrZXI6CiAuLi4gICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKLS4uLiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKy4uLiAgICAgICAgICAgICBkZWYgaW52b2tlKG1lc3NhZ2UpOgorLi4uICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IobWVzc2FnZSkKKy4uLiAgICAgICAgICAgICBpbnZva2UoInRlc3QiKQogLi4uCiAuLi4gICAgIGwgPSBMZWFrZXIoKQogLi4uICAgICBkZWwgbAogLi4uICAgICBlcnIgPSBzeXMuc3RkZXJyLmdldHZhbHVlKCkuc3RyaXAoKQotLi4uICAgICBlcnIuc3RhcnRzd2l0aCgKLS4uLiAgICAgICAgICJFeGNlcHRpb24gUnVudGltZUVycm9yOiBSdW50aW1lRXJyb3IoKSBpbiA8IgotLi4uICAgICApCi0uLi4gICAgIGVyci5lbmRzd2l0aCgiPiBpZ25vcmVkIikKLS4uLiAgICAgbGVuKGVyci5zcGxpdGxpbmVzKCkpCisuLi4gICAgICJFeGNlcHRpb24gaWdub3JlZCBpbiIgaW4gZXJyCisuLi4gICAgICJSdW50aW1lRXJyb3I6IHRlc3QiIGluIGVycgorLi4uICAgICAiVHJhY2ViYWNrIiBpbiBlcnIKKy4uLiAgICAgImluIGludm9rZSIgaW4gZXJyCiAuLi4gZmluYWxseToKIC4uLiAgICAgc3lzLnN0ZGVyciA9IG9sZAogVHJ1ZQogVHJ1ZQotMQotCitUcnVlCitUcnVlCiAKIAogVGhlc2UgcmVmbGVhayB0ZXN0cyBzaG91bGQgcGVyaGFwcyBiZSBpbiBhIHRlc3RmaWxlIG9mIHRoZWlyIG93biwKQEAgLTE4ODEsNiArMTkzMiw3IEBACiAjIHNvIHRoaXMgd29ya3MgYXMgZXhwZWN0ZWQgaW4gYm90aCB3YXlzIG9mIHJ1bm5pbmcgcmVncnRlc3QuCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCB0ZXN0X2dlbmVyYXRvcnMKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKICAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZ2VuZXJhdG9ycywgdmVyYm9zZSkKIAogIyBUaGlzIHBhcnQgaXNuJ3QgbmVlZGVkIGZvciByZWdydGVzdCwgYnV0IGZvciBydW5uaW5nIHRoZSB0ZXN0IGRpcmVjdGx5LgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKaW5kZXggYjUwNjhlNC4uZTU5ZWQ0ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CkBAIC0xODgsMTIgKzE4OCw5MyBAQAogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAgICAgICAgICAgICBzYWZlX3JtZGlyKHN1cHBvcnQuVEVTVEZOKQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfY3JlYXRlX2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGInZm9vJykKKworICAgIGRlZiB0ZXN0X3NhbWVmaWxlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2ZuID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVmaWxlKHRlc3RfZm4sIHRlc3RfZm4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnBhdGhtb2R1bGUuc2FtZWZpbGUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbikKKworICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9zeW1saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhvcy5zeW1saW5rKQorCisgICAgZGVmIHRlc3Rfc2FtZWZpbGVfb25fbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zYW1lZmlsZV9vbl9saW5rX2Z1bmMob3MubGluaykKKworICAgIGRlZiBfdGVzdF9zYW1lZmlsZV9vbl9saW5rX2Z1bmMoc2VsZiwgZnVuYyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQorCisgICAgICAgICAgICBmdW5jKHRlc3RfZm4xLCB0ZXN0X2ZuMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZWZpbGUodGVzdF9mbjEsIHRlc3RfZm4yKSkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4xKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgZGVmIHRlc3Rfc2FtZXN0YXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKKyAgICAgICAgICAgIHRlc3RfZm5zID0gW3Rlc3RfZm5dKjIKKyAgICAgICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGF0aG1vZHVsZS5zYW1lc3RhdCgqc3RhdHMpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4pCisKKyAgICBAc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rCisgICAgZGVmIHRlc3Rfc2FtZXN0YXRfb25fc3ltbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMob3Muc3ltbGluaykKKworICAgIGRlZiB0ZXN0X3NhbWVzdGF0X29uX2xpbmsoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2FtZXN0YXRfb25fbGlua19mdW5jKG9zLmxpbmspCisKKyAgICBkZWYgX3Rlc3Rfc2FtZXN0YXRfb25fbGlua19mdW5jKHNlbGYsIGZ1bmMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2ZuMSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgICAgICB0ZXN0X2ZuMiA9IHN1cHBvcnQuVEVTVEZOICsgIjIiCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMSkKKyAgICAgICAgICAgIHRlc3RfZm5zID0gKHRlc3RfZm4xLCB0ZXN0X2ZuMikKKyAgICAgICAgICAgIGZ1bmMoKnRlc3RfZm5zKQorICAgICAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCisKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4yKQorICAgICAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucGF0aG1vZHVsZS5zYW1lc3RhdCgqc3RhdHMpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucGF0aG1vZHVsZS5zYW1lc3RhdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMSkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgIGRlZiB0ZXN0X3NhbWVvcGVuZmlsZShzZWxmKToKKyAgICAgICAgZm5hbWUgPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGEsIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVvcGVuZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5maWxlbm8oKSwgYi5maWxlbm8oKSkpCisKIGNsYXNzIFRlc3RHZW5lcmljVGVzdChHZW5lcmljVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgSXNzdWUgMTY4NTI6IEdlbmVyaWNUZXN0IGNhbid0IGluaGVyaXQgZnJvbSB1bml0dGVzdC5UZXN0Q2FzZQogICAgICMgZm9yIHRlc3QgZGlzY292ZXJ5IHB1cnBvc2VzOyBDb21tb25UZXN0IGluaGVyaXRzIGZyb20gR2VuZXJpY1Rlc3QKICAgICAjIGFuZCBpcyBvbmx5IG1lYW50IHRvIGJlIGluaGVyaXRlZCBieSBvdGhlcnMuCiAgICAgcGF0aG1vZHVsZSA9IGdlbmVyaWNwYXRoCiAKKwogIyBGb2xsb3dpbmcgVGVzdENhc2UgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHJ1biBmcm9tIHRlc3RfZ2VuZXJpY3BhdGguCiAjIEl0IGlzIGluaGVyaXRlZCBieSBvdGhlciB0ZXN0IG1vZHVsZXMgKG1hY3BhdGgsIG50cGF0aCwgcG9zaXhwYXRoKS4KIApAQCAtMzQ4LDcgKzQyOSw2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZWVkIHN1cHBvcnQuVEVTVEZOX05PTkFTQ0lJIikKIAotICAgICAgICAjIFRlc3Qgbm9uLUFTQ0lJLCBub24tVVRGOCBieXRlcyBpbiB0aGUgcGF0aC4KICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QobmFtZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmV4cHMucHkgYi9MaWIvdGVzdC90ZXN0X2dlbmV4cHMucHkKaW5kZXggMjAzYjMzNi4uZmI1MzFkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZW5leHBzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXhwcy5weQpAQCAtMjIyLDggKzIyMiw4IEBACiAgICAgVHJ1ZQogCiAgICAgPj4+IGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBIQVZFX0RPQ1NUUklOR1MKLSAgICA+Pj4gcHJpbnQoZy5fX25leHRfXy5fX2RvY19fIGlmIEhBVkVfRE9DU1RSSU5HUyBlbHNlICd4Ll9fbmV4dF9fKCkgPD09PiBuZXh0KHgpJykKLSAgICB4Ll9fbmV4dF9fKCkgPD09PiBuZXh0KHgpCisgICAgPj4+IHByaW50KGcuX19uZXh0X18uX19kb2NfXyBpZiBIQVZFX0RPQ1NUUklOR1MgZWxzZSAnSW1wbGVtZW50IG5leHQoc2VsZikuJykKKyAgICBJbXBsZW1lbnQgbmV4dChzZWxmKS4KICAgICA+Pj4gaW1wb3J0IHR5cGVzCiAgICAgPj4+IGlzaW5zdGFuY2UoZywgdHlwZXMuR2VuZXJhdG9yVHlwZSkKICAgICBUcnVlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5IGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQppbmRleCBmZTY0ZWUxLi4xODUzYTJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKQEAgLTMsMzggKzMsNDAgQEAKICMgU2tpcCB0aGlzIHRlc3QgaWYgdGhlIF90ZXN0Y2FwaSBtb2R1bGUgaXNuJ3QgYXZhaWxhYmxlLgogc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGVzdGNhcGknKQogZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3Nfa2V5d29yZHMsIGdldGFyZ3Nfa2V5d29yZF9vbmx5Cit0cnk6CisgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfTCwgZ2V0YXJnc19LCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ2V0YXJnc19MID0gTm9uZSAjIFBZX0xPTkdfTE9ORyBub3QgYXZhaWxhYmxlCiAKLSIiIgotPiBIb3cgYWJvdXQgdGhlIGZvbGxvd2luZyBjb3VudGVycHJvcG9zYWwuIFRoaXMgYWxzbyBjaGFuZ2VzIHNvbWUgb2YKLT4gdGhlIG90aGVyIGZvcm1hdCBjb2RlcyB0byBiZSBhIGxpdHRsZSBtb3JlIHJlZ3VsYXIuCi0+Ci0+IENvZGUgQyB0eXBlIFJhbmdlIGNoZWNrCi0+Ci0+IGIgdW5zaWduZWQgY2hhciAwLi5VQ0hBUl9NQVgKLT4gaCBzaWduZWQgc2hvcnQgU0hSVF9NSU4uLlNIUlRfTUFYCi0+IEIgdW5zaWduZWQgY2hhciBub25lICoqCi0+IEggdW5zaWduZWQgc2hvcnQgbm9uZSAqKgotPiBrICogdW5zaWduZWQgbG9uZyBub25lCi0+IEkgKiB1bnNpZ25lZCBpbnQgMC4uVUlOVF9NQVgKLQotCi0+IGkgaW50IElOVF9NSU4uLklOVF9NQVgKLT4gbCBsb25nIExPTkdfTUlOLi5MT05HX01BWAotCi0+IEsgKiB1bnNpZ25lZCBsb25nIGxvbmcgbm9uZQotPiBMIGxvbmcgbG9uZyBMTE9OR19NSU4uLkxMT05HX01BWAotCi0+IE5vdGVzOgotPgotPiAqIE5ldyBmb3JtYXQgY29kZXMuCi0+Ci0+ICoqIENoYW5nZWQgZnJvbSBwcmV2aW91cyAicmFuZ2UtYW5kLWEtaGFsZiIgdG8gIm5vbmUiOyB0aGUKLT4gcmFuZ2UtYW5kLWEtaGFsZiBjaGVja2luZyB3YXNuJ3QgcGFydGljdWxhcmx5IHVzZWZ1bC4KLQotUGx1cyBhIEMgQVBJIG9yIHR3bywgZS5nLiBQeUludF9Bc0xvbmdNYXNrKCkgLT4KLXVuc2lnbmVkIGxvbmcgYW5kIFB5SW50X0FzTG9uZ0xvbmdNYXNrKCkgLT4gdW5zaWduZWQKLWxvbmcgbG9uZyAoaWYgdGhhdCBleGlzdHMpLgotIiIiCisjID4gSG93IGFib3V0IHRoZSBmb2xsb3dpbmcgY291bnRlcnByb3Bvc2FsLiBUaGlzIGFsc28gY2hhbmdlcyBzb21lIG9mCisjID4gdGhlIG90aGVyIGZvcm1hdCBjb2RlcyB0byBiZSBhIGxpdHRsZSBtb3JlIHJlZ3VsYXIuCisjID4KKyMgPiBDb2RlIEMgdHlwZSBSYW5nZSBjaGVjaworIyA+CisjID4gYiB1bnNpZ25lZCBjaGFyIDAuLlVDSEFSX01BWAorIyA+IGggc2lnbmVkIHNob3J0IFNIUlRfTUlOLi5TSFJUX01BWAorIyA+IEIgdW5zaWduZWQgY2hhciBub25lICoqCisjID4gSCB1bnNpZ25lZCBzaG9ydCBub25lICoqCisjID4gayAqIHVuc2lnbmVkIGxvbmcgbm9uZQorIyA+IEkgKiB1bnNpZ25lZCBpbnQgMC4uVUlOVF9NQVgKKyMKKyMKKyMgPiBpIGludCBJTlRfTUlOLi5JTlRfTUFYCisjID4gbCBsb25nIExPTkdfTUlOLi5MT05HX01BWAorIworIyA+IEsgKiB1bnNpZ25lZCBsb25nIGxvbmcgbm9uZQorIyA+IEwgbG9uZyBsb25nIExMT05HX01JTi4uTExPTkdfTUFYCisjCisjID4gTm90ZXM6CisjID4KKyMgPiAqIE5ldyBmb3JtYXQgY29kZXMuCisjID4KKyMgPiAqKiBDaGFuZ2VkIGZyb20gcHJldmlvdXMgInJhbmdlLWFuZC1hLWhhbGYiIHRvICJub25lIjsgdGhlCisjID4gcmFuZ2UtYW5kLWEtaGFsZiBjaGVja2luZyB3YXNuJ3QgcGFydGljdWxhcmx5IHVzZWZ1bC4KKyMKKyMgUGx1cyBhIEMgQVBJIG9yIHR3bywgZS5nLiBQeUludF9Bc0xvbmdNYXNrKCkgLT4KKyMgdW5zaWduZWQgbG9uZyBhbmQgUHlJbnRfQXNMb25nTG9uZ01hc2soKSAtPiB1bnNpZ25lZAorIyBsb25nIGxvbmcgKGlmIHRoYXQgZXhpc3RzKS4KIAogTEFSR0UgPSAweDdGRkZGRkZGCiBWRVJZX0xBUkdFID0gMHhGRjAwMDAxMjEyMTIxMjEyMTIxMjEyNDIKQEAgLTc3LDcgKzc5LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19iKEludCgpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2IoSW50U3ViY2xhc3MoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19iLCBCYWRJbnQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX2IoQmFkSW50MigpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfYihCYWRJbnQyKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfYihCYWRJbnQzKCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfYiwgLTEpCkBAIC05NSw3ICs5OCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfQihJbnQoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19CKEludFN1YmNsYXNzKCkpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfQiwgQmFkSW50KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19CKEJhZEludDIoKSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX0IoQmFkSW50MigpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0IoQmFkSW50MygpKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVDSEFSX01BWCwgZ2V0YXJnc19CKC0xKSkKQEAgLTExMyw3ICsxMTcsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0goSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSChJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0gsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfSChCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19IKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19IKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVU0hSVF9NQVgsIGdldGFyZ3NfSCgtMSkpCkBAIC0xMzIsNyArMTM3LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19JKEludCgpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0koSW50U3ViY2xhc3MoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19JLCBCYWRJbnQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX0koQmFkSW50MigpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfSShCYWRJbnQyKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSShCYWRJbnQzKCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUlOVF9NQVgsIGdldGFyZ3NfSSgtMSkpCkBAIC0xNzIsNyArMTc4LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19oKEludCgpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2goSW50U3ViY2xhc3MoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19oLCBCYWRJbnQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX2goQmFkSW50MigpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfaChCYWRJbnQyKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfaChCYWRJbnQzKCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfaCwgU0hSVF9NSU4tMSkKQEAgLTE5MCw3ICsxOTcsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2koSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfaShJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2ksIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfaShCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19pKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19pKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19pLCBJTlRfTUlOLTEpCkBAIC0yMDgsNyArMjE2LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19sKEludCgpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2woSW50U3ViY2xhc3MoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19sLCBCYWRJbnQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX2woQmFkSW50MigpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfbChCYWRJbnQyKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfbChCYWRJbnQzKCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbCwgTE9OR19NSU4tMSkKQEAgLTIzOSw2ICsyNDgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX24sIFZFUllfTEFSR0UpCiAKIAorQHVuaXR0ZXN0LnNraXBJZihnZXRhcmdzX0wgaXMgTm9uZSwgJ1BZX0xPTkdfTE9ORyBpcyBub3QgYXZhaWxhYmxlJykKIGNsYXNzIExvbmdMb25nX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9MKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MCkBAIC0yNDksNyArMjU5LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19MKEludCgpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0woSW50U3ViY2xhc3MoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19MLCBCYWRJbnQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX0woQmFkSW50MigpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfTChCYWRJbnQyKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfTChCYWRJbnQzKCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfTCwgTExPTkdfTUlOLTEpCkBAIC02MDAsMjQgKzYxMSw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGdldGFyZ3NfWl9oYXNoKE5vbmUpKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0cyA9IFsKLSAgICAgICAgU2lnbmVkX1Rlc3RDYXNlLAotICAgICAgICBVbnNpZ25lZF9UZXN0Q2FzZSwKLSAgICAgICAgQm9vbGVhbl9UZXN0Q2FzZSwKLSAgICAgICAgVHVwbGVfVGVzdENhc2UsCi0gICAgICAgIEtleXdvcmRzX1Rlc3RDYXNlLAotICAgICAgICBLZXl3b3JkT25seV9UZXN0Q2FzZSwKLSAgICAgICAgQnl0ZXNfVGVzdENhc2UsCi0gICAgICAgIFVuaWNvZGVfVGVzdENhc2UsCi0gICAgXQotICAgIHRyeToKLSAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfTCwgZ2V0YXJnc19LCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzICMgUFlfTE9OR19MT05HIG5vdCBhdmFpbGFibGUKLSAgICBlbHNlOgotICAgICAgICB0ZXN0cy5hcHBlbmQoTG9uZ0xvbmdfVGVzdENhc2UpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dsb2IucHkgYi9MaWIvdGVzdC90ZXN0X2dsb2IucHkKaW5kZXggZWI5YWViNS4uYTVhYjhkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weQpAQCAtMTY5LDYgKzE2OSwyOCBAQAogICAgICAgICBlcShnbG9iLmdsb2IoJ1xcXFwqXFwqXFwnKSwgW10pCiAgICAgICAgIGVxKGdsb2IuZ2xvYihiJ1xcXFwqXFwqXFwnKSwgW10pCiAKKyAgICBkZWYgY2hlY2tfZXNjYXBlKHNlbGYsIGFyZywgZXhwZWN0ZWQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2IuZXNjYXBlKGFyZyksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2IuZXNjYXBlKG9zLmZzZW5jb2RlKGFyZykpLCBvcy5mc2VuY29kZShleHBlY3RlZCkpCisKKyAgICBkZWYgdGVzdF9lc2NhcGUoc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19lc2NhcGUKKyAgICAgICAgY2hlY2soJ2FiYycsICdhYmMnKQorICAgICAgICBjaGVjaygnWycsICdbW10nKQorICAgICAgICBjaGVjaygnPycsICdbP10nKQorICAgICAgICBjaGVjaygnKicsICdbKl0nKQorICAgICAgICBjaGVjaygnW1tfLyo/Ki9fXV0nLCAnW1tdW1tdXy9bKl1bP11bKl0vX11dJykKKyAgICAgICAgY2hlY2soJy9bW18vKj8qL19dXS8nLCAnL1tbXVtbXV8vWypdWz9dWypdL19dXS8nKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0IikKKyAgICBkZWYgdGVzdF9lc2NhcGVfd2luZG93cyhzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX2VzY2FwZQorICAgICAgICBjaGVjaygnPzo/JywgJz86Wz9dJykKKyAgICAgICAgY2hlY2soJyo6KicsICcqOlsqXScpCisgICAgICAgIGNoZWNrKHInXFw/XGM6XD8nLCByJ1xcP1xjOlxbP10nKQorICAgICAgICBjaGVjayhyJ1xcKlwqXConLCByJ1xcKlwqXFsqXScpCisgICAgICAgIGNoZWNrKCcvLz8vYzovPycsICcvLz8vYzovWz9dJykKKyAgICAgICAgY2hlY2soJy8vKi8qLyonLCAnLy8qLyovWypdJykKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChHbG9iVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2d6aXAucHkgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKaW5kZXggYzk0ZDU0ZS4uNTI4OTQwNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nemlwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQpAQCAtMTMwLDYgKzEzMCwxNCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCB6dHh0OiBicmVhawogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBiJ2EnKjIwMSkKIAorICAgIGRlZiB0ZXN0X2V4Y2x1c2l2ZV93cml0ZShzZWxmKToKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd4YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGExICogNTApCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YTEgKiA1MCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAneGInKQorCiAgICAgZGVmIHRlc3RfYnVmZmVyZWRfcmVhZGVyKHNlbGYpOgogICAgICAgICAjIElzc3VlICM3NDcxOiBhIEd6aXBGaWxlIGNhbiBiZSB3cmFwcGVkIGluIGEgQnVmZmVyZWRSZWFkZXIgZm9yCiAgICAgICAgICMgcGVyZm9ybWFuY2UuCkBAIC0yMDUsNiArMjEzLDkgQEAKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3JiJykKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd4JykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3hiJykKIAogICAgIGRlZiB0ZXN0XzE2NDc0ODQoc2VsZik6CiAgICAgICAgIGZvciBtb2RlIGluICgnd2InLCAncmInKToKQEAgLTM4OCw2ICszOTksMjAgQEAKICAgICAgICAgICAgIGRhdGFjID0gZ3ppcC5jb21wcmVzcyhkYXRhKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnemlwLmRlY29tcHJlc3MoZGF0YWMpLCBkYXRhKQogCisgICAgZGVmIHRlc3RfcmVhZF90cnVuY2F0ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBkYXRhMSo1MAorICAgICAgICAjIERyb3AgdGhlIENSQyAoNCBieXRlcykgYW5kIGZpbGUgc2l6ZSAoNCBieXRlcykuCisgICAgICAgIHRydW5jYXRlZCA9IGd6aXAuY29tcHJlc3MoZGF0YSlbOi04XQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oZGF0YSkpLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKyAgICAgICAgIyBJbmNvbXBsZXRlIDEwLWJ5dGUgaGVhZGVyLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgyLCAxMCk6CisgICAgICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKICAgICBkZWYgdGVzdF9yZWFkX3dpdGhfZXh0cmEoc2VsZik6CiAgICAgICAgICMgR3ppcCBkYXRhIHdpdGggYW4gZXh0cmEgZmllbGQKICAgICAgICAgZ3pkYXRhID0gKGInXHgxZlx4OGJceDA4XHgwNFx4YjJceDE3Y1FceDAyXHhmZicKQEAgLTM5OSwzNSArNDI0LDU5IEBACiBjbGFzcyBUZXN0T3BlbihCYXNlVGVzdCk6CiAgICAgZGVmIHRlc3RfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICB1bmNvbXByZXNzZWQgPSBkYXRhMSAqIDUwCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHVuY29tcHJlc3NlZCkKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgZmlsZV9kYXRhID0gZ3ppcC5kZWNvbXByZXNzKGYucmVhZCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHVuY29tcHJlc3NlZCAqIDIpCiAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YiIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkKQorCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wbGljaXQgYmluYXJ5IG1vZGVzIChubyAiYiIgb3IgInQiIGluIG1vZGUgc3RyaW5nKS4KICAgICAgICAgdW5jb21wcmVzc2VkID0gZGF0YTEgKiA1MAorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgdW5jb21wcmVzc2VkKQorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJhIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQgKiAyKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieCIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICBkZWYgdGVzdF90ZXh0X21vZGVzKHNlbGYpOgogICAgICAgICB1bmNvbXByZXNzZWQgPSBkYXRhMS5kZWNvZGUoImFzY2lpIikgKiA1MAogICAgICAgICB1bmNvbXByZXNzZWRfcmF3ID0gdW5jb21wcmVzc2VkLnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKQEAgLTQ2Miw2ICs1MTEsOCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YnQiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YnQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNoLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNoLnB5CmluZGV4IDIyZWJiY2MuLmY2NDdjNmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2gucHkKQEAgLTEyLDYgKzEyLDQwIEBACiAKIElTXzY0QklUID0gc3lzLm1heHNpemUgPiAyKiozMgogCitkZWYgbGNnKHgsIGxlbmd0aD0xNik6CisgICAgIiIiTGluZWFyIGNvbmdydWVudGlhbCBnZW5lcmF0b3IiIiIKKyAgICBpZiB4ID09IDA6CisgICAgICAgIHJldHVybiBieXRlcyhsZW5ndGgpCisgICAgb3V0ID0gYnl0ZWFycmF5KGxlbmd0aCkKKyAgICBmb3IgaSBpbiByYW5nZShsZW5ndGgpOgorICAgICAgICB4ID0gKDIxNDAxMyAqIHggKyAyNTMxMDExKSAmIDB4N2ZmZmZmZmYKKyAgICAgICAgb3V0W2ldID0gKHggPj4gMTYpICYgMHhmZgorICAgIHJldHVybiBieXRlcyhvdXQpCisKK2RlZiBweXNpcGhhc2godWludDY0KToKKyAgICAiIiJDb252ZXJ0IFNpcEhhc2gyNCBvdXRwdXQgdG8gUHlfaGFzaF90CisgICAgIiIiCisgICAgYXNzZXJ0IDAgPD0gdWludDY0IDwgKDEgPDwgNjQpCisgICAgIyBzaW1wbGUgdW5zaWduZWQgdG8gc2lnbmVkIGludDY0CisgICAgaWYgdWludDY0ID4gKDEgPDwgNjMpIC0gMToKKyAgICAgICAgaW50NjQgPSB1aW50NjQgLSAoMSA8PCA2NCkKKyAgICBlbHNlOgorICAgICAgICBpbnQ2NCA9IHVpbnQ2NAorICAgICMgbWFuZ2xlIHVpbnQ2NCB0byB1aW50MzIKKyAgICB1aW50MzIgPSAodWludDY0IF4gdWludDY0ID4+IDMyKSAmIDB4ZmZmZmZmZmYKKyAgICAjIHNpbXBsZSB1bnNpZ25lZCB0byBzaWduZWQgaW50MzIKKyAgICBpZiB1aW50MzIgPiAoMSA8PCAzMSkgLSAxOgorICAgICAgICBpbnQzMiA9IHVpbnQzMiAtICgxIDw8IDMyKQorICAgIGVsc2U6CisgICAgICAgIGludDMyID0gdWludDMyCisgICAgcmV0dXJuIGludDMyLCBpbnQ2NAorCitkZWYgc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoKHRlc3QpOgorICAgICIiIlNraXAgZGVjb3JhdG9yIGZvciB0ZXN0cyB0aGF0IGRlcGVuZCBvbiBTaXBIYXNoMjQgb3IgRk5WIiIiCisgICAgb2sgPSBzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSBpbiB7ImZudiIsICJzaXBoYXNoMjQifQorICAgIG1zZyA9ICJSZXF1aXJlcyBTaXBIYXNoMjQgb3IgRk5WIgorICAgIHJldHVybiB0ZXN0IGlmIG9rIGVsc2UgdW5pdHRlc3Quc2tpcChtc2cpKHRlc3QpCisKIAogY2xhc3MgSGFzaEVxdWFsaXR5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xNjEsMTIgKzE5NSw2NCBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJ1bjEsIHJ1bjIpCiAKIGNsYXNzIFN0cmluZ2xpa2VIYXNoUmFuZG9taXphdGlvblRlc3RzKEhhc2hSYW5kb21pemF0aW9uVGVzdHMpOgorICAgIHJlcHJfID0gTm9uZQorICAgIHJlcHJfbG9uZyA9IE5vbmUKKworICAgICMgMzJiaXQgbGl0dGxlLCA2NGJpdCBsaXR0bGUsIDMyYml0IGJpZywgNjRiaXQgYmlnCisgICAga25vd25faGFzaGVzID0geworICAgICAgICAnZGpiYTMzeCc6IFsgIyBvbmx5IHVzZWQgZm9yIHNtYWxsIHN0cmluZ3MKKyAgICAgICAgICAgICMgc2VlZCAwLCAnYWJjJworICAgICAgICAgICAgWzE5MzQ4NTk2MCwgMTkzNDg1OTYwLCAgMTkzNDg1OTYwLCAxOTM0ODU5NjBdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnYWJjJworICAgICAgICAgICAgWy02Nzg5NjYxOTYsIDU3Mzc2MzQyNjI2MzIyMzM3MiwgLTgyMDQ4OTM4OCwgLTQyODI5MDU4MDQ4MjYwMzk2NjVdLAorICAgICAgICAgICAgXSwKKyAgICAgICAgJ3NpcGhhc2gyNCc6IFsKKyAgICAgICAgICAgICMgTk9URTogUHlVQ1MyIGxheW91dCBkZXBlbmRzIG9uIGVuZGlhbmVzcworICAgICAgICAgICAgIyBzZWVkIDAsICdhYmMnCisgICAgICAgICAgICBbMTE5ODU4MzUxOCwgNDU5NjA2OTIwMDcxMDEzNTUxOCwgMTE5ODU4MzUxOCwgNDU5NjA2OTIwMDcxMDEzNTUxOF0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmMnCisgICAgICAgICAgICBbMjczODc2ODg2LCAtNDUwMTYxODE1MjUyNDU0NDEwNiwgMjczODc2ODg2LCAtNDUwMTYxODE1MjUyNDU0NDEwNl0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmNkZWZnaGlqaycKKyAgICAgICAgICAgIFstMTc0NTIxNTMxMywgNDQzNjcxOTU4ODg5Mjg3Njk3NSwgLTE3NDUyMTUzMTMsIDQ0MzY3MTk1ODg4OTI4NzY5NzVdLAorICAgICAgICAgICAgIyBzZWVkIDAsICfDpMO64oiR4oSHJworICAgICAgICAgICAgWzQ5MzU3MDgwNiwgNTc0OTk4NjQ4NDE4OTYxMjc5MCwgLTEwMDYzODE1NjQsIC01OTE1MTExNDUwMTk5NDY4NTQwXSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ8Okw7riiJHihIcnCisgICAgICAgICAgICBbLTE2NzcxMTA4MTYsIC0yOTQ3OTgxMzQyMjI3NzM4MTQ0LCAtMTg2MDIwNzc5MywgLTQyOTY2OTkyMTc2NTI1MTYwMTddLAorICAgICAgICBdLAorICAgICAgICAnZm52JzogWworICAgICAgICAgICAgIyBzZWVkIDAsICdhYmMnCisgICAgICAgICAgICBbLTE2MDA5MjU1MzMsIDE0NTMwNzk3MjkxODgwOTgyMTEsIC0xNjAwOTI1NTMzLAorICAgICAgICAgICAgIDE0NTMwNzk3MjkxODgwOTgyMTFdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnYWJjJworICAgICAgICAgICAgWy0yMDYwNzY3OTksIC00NDEwOTExNTAyMzAzODc4NTA5LCAtMTAyNDAxNDQ1NywKKyAgICAgICAgICAgICAtMzU3MDE1MDk2OTQ3OTk5NDEzMF0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmNkZWZnaGlqaycKKyAgICAgICAgICAgIFs4MTExMzY3NTEsIC01MDQ2MjMwMDQ5Mzc2MTE4NzQ2LCAtNzcyMDgwNTMgLAorICAgICAgICAgICAgIC00Nzc5MDI5NjE1MjgxMDE5NjY2XSwKKyAgICAgICAgICAgICMgc2VlZCAwLCAnw6TDuuKIkeKEhycKKyAgICAgICAgICAgIFs0NDQwMjgxNywgODk5ODI5NzU3OTg0NTk4NzQzMSwgLTE5NTYyNDAzMzEsCisgICAgICAgICAgICAgLTc4MjY5Nzg4ODYxNDA0Nzg4N10sCisgICAgICAgICAgICAjIHNlZWQgNDIsICfDpMO64oiR4oSHJworICAgICAgICAgICAgWy0yODMwNjYzNjUsIC00NTc2NzI5ODgzODI0NjAxNTQzLCAtMjcxODcxNDA3LAorICAgICAgICAgICAgIC0zOTI3Njk1NTAxMTg3MjQ3MDg0XSwKKyAgICAgICAgXQorICAgIH0KKworICAgIGRlZiBnZXRfZXhwZWN0ZWRfaGFzaChzZWxmLCBwb3NpdGlvbiwgbGVuZ3RoKToKKyAgICAgICAgaWYgbGVuZ3RoIDwgc3lzLmhhc2hfaW5mby5jdXRvZmY6CisgICAgICAgICAgICBhbGdvcml0aG0gPSAiZGpiYTMzeCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFsZ29yaXRobSA9IHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtCisgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6CisgICAgICAgICAgICBwbGF0Zm9ybSA9IDEgaWYgSVNfNjRCSVQgZWxzZSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQoc3lzLmJ5dGVvcmRlciA9PSAnYmlnJykKKyAgICAgICAgICAgIHBsYXRmb3JtID0gMyBpZiBJU182NEJJVCBlbHNlIDIKKyAgICAgICAgcmV0dXJuIHNlbGYua25vd25faGFzaGVzW2FsZ29yaXRobV1bcG9zaXRpb25dW3BsYXRmb3JtXQorCiAgICAgZGVmIHRlc3RfbnVsbF9oYXNoKHNlbGYpOgogICAgICAgICAjIFBZVEhPTkhBU0hTRUVEPTAgZGlzYWJsZXMgdGhlIHJhbmRvbWl6ZWQgaGFzaAotICAgICAgICBpZiBJU182NEJJVDoKLSAgICAgICAgICAgIGtub3duX2hhc2hfb2Zfb2JqID0gMTQ1MzA3OTcyOTE4ODA5ODIxMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAga25vd25faGFzaF9vZl9vYmogPSAtMTYwMDkyNTUzMworICAgICAgICBrbm93bl9oYXNoX29mX29iaiA9IHNlbGYuZ2V0X2V4cGVjdGVkX2hhc2goMCwgMykKIAogICAgICAgICAjIFJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0OgogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXyksIGtub3duX2hhc2hfb2Zfb2JqKQpAQCAtMTc0LDM5ICsyNjAsNTMgQEAKICAgICAgICAgIyBJdCBjYW4gYWxzbyBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIHRoZSBzZWVkIHRvIDA6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfLCBzZWVkPTApLCBrbm93bl9oYXNoX29mX29iaikKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKICAgICBkZWYgdGVzdF9maXhlZF9oYXNoKHNlbGYpOgogICAgICAgICAjIHRlc3QgYSBmaXhlZCBzZWVkIGZvciB0aGUgcmFuZG9taXplZCBoYXNoCiAgICAgICAgICMgTm90ZSB0aGF0IGFsbCB0eXBlcyBzaGFyZSB0aGUgc2FtZSB2YWx1ZXM6Ci0gICAgICAgIGlmIElTXzY0QklUOgotICAgICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKLSAgICAgICAgICAgICAgICBoID0gLTQ0MTA5MTE1MDIzMDM4Nzg1MDkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaCA9IC0zNTcwMTUwOTY5NDc5OTk0MTMwCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgotICAgICAgICAgICAgICAgIGggPSAtMjA2MDc2Nzk5Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGggPSAtMTAyNDAxNDQ1NworICAgICAgICBoID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCgxLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXywgc2VlZD00MiksIGgpCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCisgICAgZGVmIHRlc3RfbG9uZ19maXhlZF9oYXNoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlcHJfbG9uZyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGggPSBzZWxmLmdldF9leHBlY3RlZF9oYXNoKDIsIDExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByX2xvbmcsIHNlZWQ9NDIpLCBoKQorCisKIGNsYXNzIFN0ckhhc2hSYW5kb21pemF0aW9uVGVzdHMoU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICByZXByXyA9IHJlcHIoJ2FiYycpCisgICAgcmVwcl9sb25nID0gcmVwcignYWJjZGVmZ2hpamsnKQorICAgIHJlcHJfdWNzMiA9IHJlcHIoJ8Okw7riiJHihIcnKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKCIiKSwgMCkKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKKyAgICBkZWYgdGVzdF91Y3MyX3N0cmluZyhzZWxmKToKKyAgICAgICAgaCA9IHNlbGYuZ2V0X2V4cGVjdGVkX2hhc2goMywgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF9oYXNoKHNlbGYucmVwcl91Y3MyLCBzZWVkPTApLCBoKQorICAgICAgICBoID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCg0LCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByX3VjczIsIHNlZWQ9NDIpLCBoKQorCiBjbGFzcyBCeXRlc0hhc2hSYW5kb21pemF0aW9uVGVzdHMoU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHJlcHJfID0gcmVwcihiJ2FiYycpCisgICAgcmVwcl9sb25nID0gcmVwcihiJ2FiY2RlZmdoaWprJykKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKICAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChiIiIpLCAwKQogCiBjbGFzcyBNZW1vcnl2aWV3SGFzaFJhbmRvbWl6YXRpb25UZXN0cyhTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICByZXByXyA9ICJtZW1vcnl2aWV3KGInYWJjJykiCisgICAgcmVwcl9sb25nID0gIm1lbW9yeXZpZXcoYidhYmNkZWZnaGlqaycpIgogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKG1lbW9yeXZpZXcoYiIiKSksIDApCiAKQEAgLTIyNCw1ICszMjQsMjMgQEAKICAgICByZXByXyA9IHJlcHIoZGF0ZXRpbWUudGltZSgwKSkKIAogCitjbGFzcyBIYXNoRGlzdHJpYnV0aW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaGFzaF9kaXN0cmlidXRpb24oc2VsZik6CisgICAgICAgICMgY2hlY2sgZm9yIGhhc2ggY29sbGlzaW9uCisgICAgICAgIGJhc2UgPSAiYWJjZGVmZ2hhYmNkZWZnIgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oYmFzZSkpOgorICAgICAgICAgICAgcHJlZml4ID0gYmFzZVs6aV0KKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByZWZpeD1wcmVmaXgpOgorICAgICAgICAgICAgICAgIHMxNSA9IHNldCgpCisgICAgICAgICAgICAgICAgczI1NSA9IHNldCgpCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgICAgICAgICAgaCA9IGhhc2gocHJlZml4ICsgY2hyKGMpKQorICAgICAgICAgICAgICAgICAgICBzMTUuYWRkKGggJiAweGYpCisgICAgICAgICAgICAgICAgICAgIHMyNTUuYWRkKGggJiAweGZmKQorICAgICAgICAgICAgICAgICMgU2lwSGFzaDI0IGRpc3RyaWJ1dGlvbiBkZXBlbmRzIG9uIGtleSwgdXN1YWxseSA+IDYwJQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oczE1KSwgOCwgcHJlZml4KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oczI1NSksIDEyOCwgcHJlZml4KQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CmluZGV4IGMwNDcwZDYuLjM2YTk4Y2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKQEAgLTE4LDExICsxOCwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdCwgaW1wb3J0X2ZyZXNoX21vZHVsZQogCiAjIFdlcmUgd2UgY29tcGlsZWQgLS13aXRoLXB5ZGVidWcgb3Igd2l0aCAjZGVmaW5lIFB5X0RFQlVHPwogQ09NUElMRURfV0lUSF9QWURFQlVHID0gaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50JykKIAorY19oYXNobGliID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgnaGFzaGxpYicsIGZyZXNoPVsnX2hhc2hsaWInXSkKK3B5X2hhc2hsaWIgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdoYXNobGliJywgYmxvY2tlZD1bJ19oYXNobGliJ10pCiAKIGRlZiBoZXhzdHIocyk6CiAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocywgYnl0ZXMpLCByZXByKHMpCkBAIC0zNiw3ICszOCw3IEBACiBjbGFzcyBIYXNoTGliVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHN1cHBvcnRlZF9oYXNoX25hbWVzID0gKCAnbWQ1JywgJ01ENScsICdzaGExJywgJ1NIQTEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMjI0JywgJ1NIQTIyNCcsICdzaGEyNTYnLCAnU0hBMjU2JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTM4NCcsICdTSEEzODQnLCAnc2hhNTEyJywgJ1NIQTUxMicgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMzg0JywgJ1NIQTM4NCcsICdzaGE1MTInLCAnU0hBNTEyJykKIAogICAgICMgSXNzdWUgIzE0NjkzOiBmYWxsYmFjayBtb2R1bGVzIGFyZSBhbHdheXMgY29tcGlsZWQgdW5kZXIgUE9TSVgKICAgICBfd2Fybl9vbl9leHRlbnNpb25faW1wb3J0ID0gb3MubmFtZSA9PSAncG9zaXgnIG9yIENPTVBJTEVEX1dJVEhfUFlERUJVRwpAQCAtNzIsMjcgKzc0LDMxIEBACiAgICAgICAgIGlmIF9oYXNobGliOgogICAgICAgICAgICAgIyBUaGVzZSB0d28gYWxnb3JpdGhtcyBzaG91bGQgYWx3YXlzIGJlIHByZXNlbnQgd2hlbiB0aGlzIG1vZHVsZQogICAgICAgICAgICAgIyBpcyBjb21waWxlZC4gIElmIG5vdCwgc29tZXRoaW5nIHdhcyBjb21waWxlZCB3cm9uZy4KLSAgICAgICAgICAgIGFzc2VydCBoYXNhdHRyKF9oYXNobGliLCAnb3BlbnNzbF9tZDUnKQotICAgICAgICAgICAgYXNzZXJ0IGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX3NoYTEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX21kNScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX3NoYTEnKSkKICAgICAgICAgICAgIGZvciBhbGdvcml0aG0sIGNvbnN0cnVjdG9ycyBpbiBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0Lml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgPSBnZXRhdHRyKF9oYXNobGliLCAnb3BlbnNzbF8nK2FsZ29yaXRobSwgTm9uZSkKICAgICAgICAgICAgICAgICBpZiBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChjb25zdHJ1Y3RvcikKIAorICAgICAgICBkZWYgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IobmFtZSk6CisgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGdldGF0dHIoaGFzaGxpYiwgIl9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IiKShuYW1lKQorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFtuYW1lXS5hZGQoY29uc3RydWN0b3IpCisKICAgICAgICAgX21kNSA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19tZDUnKQogICAgICAgICBpZiBfbWQ1OgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnbWQ1J10uYWRkKF9tZDUubWQ1KQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ21kNScpCiAgICAgICAgIF9zaGExID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTEnKQogICAgICAgICBpZiBfc2hhMToKLSAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTEnXS5hZGQoX3NoYTEuc2hhMSkKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGExJykKICAgICAgICAgX3NoYTI1NiA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGEyNTYnKQogICAgICAgICBpZiBfc2hhMjU2OgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMjI0J10uYWRkKF9zaGEyNTYuc2hhMjI0KQotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMjU2J10uYWRkKF9zaGEyNTYuc2hhMjU2KQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTIyNCcpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMjU2JykKICAgICAgICAgX3NoYTUxMiA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGE1MTInKQogICAgICAgICBpZiBfc2hhNTEyOgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMzg0J10uYWRkKF9zaGE1MTIuc2hhMzg0KQotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhNTEyJ10uYWRkKF9zaGE1MTIuc2hhNTEyKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTM4NCcpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhNTEyJykKIAogICAgICAgICBzdXBlcihIYXNoTGliVGVzdENhc2UsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKIApAQCAtMTIxLDggKzEyNywxMCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2hsaWIubmV3LCAxKQogCiAgICAgZGVmIHRlc3RfZ2V0X2J1aWx0aW5fY29uc3RydWN0b3Ioc2VsZik6Ci0gICAgICAgIGdldF9idWlsdGluX2NvbnN0cnVjdG9yID0gaGFzaGxpYi5fX2RpY3RfX1sKLSAgICAgICAgICAgICAgICAnX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciddCisgICAgICAgIGdldF9idWlsdGluX2NvbnN0cnVjdG9yID0gZ2V0YXR0cihoYXNobGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3InKQorICAgICAgICBidWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlID0gZ2V0YXR0cihoYXNobGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19idWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IsICd0ZXN0JykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IF9tZDUKQEAgLTEzMCw2ICsxMzgsOCBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICAjIFRoaXMgZm9yY2VzIGFuIEltcG9ydEVycm9yIGZvciAiaW1wb3J0IF9tZDUiIHN0YXRlbWVudHMKICAgICAgICAgc3lzLm1vZHVsZXNbJ19tZDUnXSA9IE5vbmUKKyAgICAgICAgIyBjbGVhciB0aGUgY2FjaGUKKyAgICAgICAgYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZS5jbGVhcigpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGdldF9idWlsdGluX2NvbnN0cnVjdG9yLCAnbWQ1JykKICAgICAgICAgZmluYWxseToKQEAgLTEzOCwxMyArMTQ4LDIzIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snX21kNSddCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IsIDMpCisgICAgICAgIGNvbnN0cnVjdG9yID0gZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IoJ21kNScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uc3RydWN0b3IsIF9tZDUubWQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChidWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlKSwgWydNRDUnLCAnbWQ1J10pCiAKICAgICBkZWYgdGVzdF9oZXhkaWdlc3Qoc2VsZik6CiAgICAgICAgIGZvciBjb25zIGluIHNlbGYuaGFzaF9jb25zdHJ1Y3RvcnM6CiAgICAgICAgICAgICBoID0gY29ucygpCi0gICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShoLmRpZ2VzdCgpLCBieXRlcyksIG5hbWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLmRpZ2VzdCgpLCBieXRlcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4c3RyKGguZGlnZXN0KCkpLCBoLmhleGRpZ2VzdCgpKQogCisgICAgZGVmIHRlc3RfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGZvciBjb25zIGluIHNlbGYuaGFzaF9jb25zdHJ1Y3RvcnM6CisgICAgICAgICAgICBoID0gY29ucygpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaC5uYW1lLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGgubmFtZSwgc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCBoYXNobGliLm5ldyhoLm5hbWUpLm5hbWUpCisKICAgICBkZWYgdGVzdF9sYXJnZV91cGRhdGUoc2VsZik6CiAgICAgICAgIGFhcyA9IGInYScgKiAxMjgKICAgICAgICAgYmVlcyA9IGInYicgKiAxMjcKQEAgLTIxMyw4ICsyMzMsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmJsb2NrX3NpemUsIGJsb2NrX3NpemUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZGlnZXN0X3NpemUsIGRpZ2VzdF9zaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5kaWdlc3QoKSksIGRpZ2VzdF9zaXplKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLm5hbWUubG93ZXIoKSwgbmFtZS5sb3dlcigpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLnNwbGl0KCJfIilbMF0sIHJlcHIobSkubG93ZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5uYW1lLCBuYW1lKQorICAgICAgICAgICAgIyBzcGxpdCBmb3Igc2hhM181MTIgLyBfc2hhMy5zaGEzIG9iamVjdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLnNwbGl0KCJfIilbMF0sIHJlcHIobSkpCiAKICAgICBkZWYgdGVzdF9ibG9ja3NpemVfbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19ibG9ja3NpemVfbmFtZSgnbWQ1JywgNjQsIDE2KQpAQCAtMzUyLDYgKzM3MywxMiBAQAogICAgICAgICAgICJlNzE4NDgzZDBjZTc2OTY0NGUyZTQyYzdiYzE1YjQ2MzhlMWY5OGIxM2IyMDQ0Mjg1NjMyYTgwM2FmYTk3M2ViIisKICAgICAgICAgICAiZGUwZmYyNDQ4NzdlYTYwYTRjYjA0MzJjZTU3N2MzMWJlYjAwOWM1YzJjNDlhYTJlNGVhZGIyMTdhZDhjYzA5YiIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5tYXhzaXplIDwgXzRHICsgNSwgJ3Rlc3QgY2Fubm90IHJ1biBvbiAzMi1iaXQgc3lzdGVtcycpCisgICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcgKyA1LCBtZW11c2U9MSwgZHJ5X3J1bj1GYWxzZSkKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMjI0X2h1Z2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfMjI0JywgYidBJypzaXplLAorICAgICAgICAgICAgICAgICAgICc1OGVmNjAwNTdjOWRkZGI2YTg3NDc3ZTlhY2U1YTI2ZjBkOWRiMDE4ODFjZjliMTBhOWY4YzIyNCcpCisKICAgICBkZWYgdGVzdF9naWwoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhpbmdzIHdvcmsgZmluZSB3aXRoIGFuIGlucHV0IGxhcmdlciB0aGFuIHRoZSBzaXplIHJlcXVpcmVkCiAgICAgICAgICMgZm9yIG11bHRpdGhyZWFkZWQgb3BlcmF0aW9uICh3aGljaCBpcyBoYXJkd2lyZWQgdG8gMjA0OCkuCkBAIC00MDAsOCArNDI3LDggQEAKICAgICAgICAgZXZlbnRzID0gW10KICAgICAgICAgZm9yIHRocmVhZG51bSBpbiByYW5nZShudW1fdGhyZWFkcyk6CiAgICAgICAgICAgICBjaHVua19zaXplID0gbGVuKGRhdGEpIC8vICgxMCoqdGhyZWFkbnVtKQotICAgICAgICAgICAgYXNzZXJ0IGNodW5rX3NpemUgPiAwCi0gICAgICAgICAgICBhc3NlcnQgY2h1bmtfc2l6ZSAlIGxlbihzbWFsbGVzdF9kYXRhKSA9PSAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoY2h1bmtfc2l6ZSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2h1bmtfc2l6ZSAlIGxlbihzbWFsbGVzdF9kYXRhKSwgMCkKICAgICAgICAgICAgIGV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoZXZlbnQpCiAgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1oYXNoX2luX2NodW5rcywKQEAgLTQxMiw4ICs0MzksOTUgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2hhc2gsIGhhc2hlci5oZXhkaWdlc3QoKSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEhhc2hMaWJUZXN0Q2FzZSkKKworY2xhc3MgS0RGVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgcGJrZGYyX3Rlc3RfdmVjdG9ycyA9IFsKKyAgICAgICAgKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAxLCBOb25lKSwKKyAgICAgICAgKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAyLCBOb25lKSwKKyAgICAgICAgKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCA0MDk2LCBOb25lKSwKKyAgICAgICAgIyB0b28gc2xvdywgaXQgdGFrZXMgb3ZlciBhIG1pbnV0ZSBvbiBhIGZhc3QgQ1BVLgorICAgICAgICAjKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAxNjc3NzIxNiwgTm9uZSksCisgICAgICAgIChiJ3Bhc3N3b3JkUEFTU1dPUkRwYXNzd29yZCcsIGInc2FsdFNBTFRzYWx0U0FMVHNhbHRTQUxUc2FsdFNBTFRzYWx0JywKKyAgICAgICAgIDQwOTYsIC0xKSwKKyAgICAgICAgKGIncGFzc1wwd29yZCcsIGInc2FcMGx0JywgNDA5NiwgMTYpLAorICAgIF0KKworICAgIHBia2RmMl9yZXN1bHRzID0geworICAgICAgICAic2hhMSI6IFsKKyAgICAgICAgICAgICMgb2ZmaWNhbCB0ZXN0IHZlY3RvcnMgZnJvbSBSRkMgNjA3MAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzBjNjBjODBmOTYxZjBlNzFmM2E5YjUyNGFmNjAxMjA2MmZlMDM3YTYnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnZWE2YzAxNGRjNzJkNmY4Y2NkMWVkOTJhY2UxZDQxZjBkOGRlODk1NycpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc0YjAwNzkwMWI3NjU0ODlhYmVhZDQ5ZDkyNmY3MjFkMDY1YTQyOWMxJyksIE5vbmUpLAorICAgICAgICAgICAgIyhieXRlcy5mcm9taGV4KCdlZWZlM2Q2MWNkNGRhNGU0ZTk5NDViM2Q2YmEyMTU4YzI2MzRlOTg0JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzNkMmVlYzRmZTQxYzg0OWI4MGM4ZDgzNjYyYzBlNDRhOGIyOTFhOTY0YycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdmMmYwNzAzOCcpLCAyNSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnNTZmYTZhYTc1NTQ4MDk5ZGNjMzdkN2YwMzQyNWUwYzMnKSwgTm9uZSksXSwKKyAgICAgICAgInNoYTI1NiI6IFsKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCcxMjBmYjZjZmZjZjhiMzJjNDNlNzIyNTI1NmM0ZjgzNycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdhODY1NDhjOTJjY2MzNTQ4MDgwNTk4N2NiNzBiZTE3YicpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdhZTRkMGM5NWFmNmI0NmQzMmQwYWRmZjkyOGYwNmRkMCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcyYTMwM2Y4ZWYzYzI1MWRmZDZlMmQ4NWE5NTQ3NGM0MycpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdjNWU0NzhkNTkyODhjODQxYWE1MzBkYjY4NDVjNGM4ZCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICc5NjI4OTNhMDAxY2U0ZTExYTQ5NjM4NzNhYTk4MTM0YScpLCBOb25lKSwKKyAgICAgICAgICAgICMoYnl0ZXMuZnJvbWhleCgnY2Y4MWM2NmZlOGNmYzA0ZDFmMzFlY2I2NWRhYjQwODknCisgICAgICAgICAgICAjICAgICAgICAgICAgICAgJ2Y3ZjE3OWU4OWIzYjBiY2IxN2FkMTBlM2FjNmViYTQ2JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzM0OGM4OWRiY2JkMzJiMmYzMmQ4MTRiODExNmU4NGNmMmIxNycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICczNDdlYmMxODAwMTgxYzRlMmExZmI4ZGQ1M2UxYzYzNTUxOGM3ZGFjNDdlOScpLCA0MCksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnODliNjlkMDUxNmY4Mjk4OTNjNjk2MjI2NjUwYTg2ODcnKSwgTm9uZSksXSwKKyAgICAgICAgInNoYTUxMiI6IFsKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc4NjdmNzBjZjFhZGUwMmNmZjM3NTI1OTlhM2E1M2RjNGFmMzRjN2E2Njk4MTVhZTUnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZDUxMzU1NGUxYzhjZjI1MmMwMmQ0NzBhMjg1YTA1MDFiYWQ5OTliZmU5NDNjMDhmJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzA1MDIzNWQ3ZDY4YjFkYTU1ZTYzZjczYjYwYTU3ZmNlJyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2UxZDljMTZhYTY4MTcwOGE0NWY1YzdjNGUyMTVjZWI2NmUwMTFhMmU5ZjAwNDA3MScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICczZjE4YWVmZGI4NjZkNTNjZjc2Y2FiMjg2OGEzOWI5Zjc4NDBlZGNlNGZlZjVhODInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmU2NzMzNWM3N2E2MDY4ZTA0MTEyNzU0ZjI3Y2NmNGUnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnZDE5N2IxYjMzZGIwMTQzZTAxOGIxMmYzZDFkMTQ3OWU2Y2RlYmRjYzk3YzVjMGY4JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzdmNjkwMmUwNzJmNDU3YjUxNDNmMzA2MDI2NDFiM2Q1NWNkMzM1OTg4Y2IzNmI4NCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICczNzYwNjBlY2Q1MzJlMDM5Yjc0MmEyMzk0MzRhZjJkNScpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc4YzA1MTFmNGM2ZTU5N2M2YWM2MzE1ZDhmMDM2MmUyMjVmM2M1MDE0OTViYTIzYjgnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnNjhjMDA1MTc0ZGM0ZWU3MTExNWI1OWY5ZTYwY2Q5NTMyZmEzM2UwZjc1YWVmZTMwJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzIyNWM1ODNhMTg2Y2Q4MmJkNGRhZWE5NzI0YTNkM2I4JyksIDY0KSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc5ZDllOWM0Y2QyMWZlNGJlMjRkNWI4MjQ0Yzc1OTY2NScpLCBOb25lKSxdLAorICAgIH0KKworICAgIGRlZiBfdGVzdF9wYmtkZjJfaG1hYyhzZWxmLCBwYmtkZjIpOgorICAgICAgICBmb3IgZGlnZXN0X25hbWUsIHJlc3VsdHMgaW4gc2VsZi5wYmtkZjJfcmVzdWx0cy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGksIHZlY3RvciBpbiBlbnVtZXJhdGUoc2VsZi5wYmtkZjJfdGVzdF92ZWN0b3JzKToKKyAgICAgICAgICAgICAgICBwYXNzd29yZCwgc2FsdCwgcm91bmRzLCBka2xlbiA9IHZlY3RvcgorICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBvdmVyd3JpdGVfZGtsZW4gPSByZXN1bHRzW2ldCisgICAgICAgICAgICAgICAgaWYgb3ZlcndyaXRlX2RrbGVuOgorICAgICAgICAgICAgICAgICAgICBka2xlbiA9IG92ZXJ3cml0ZV9ka2xlbgorICAgICAgICAgICAgICAgIG91dCA9IHBia2RmMihkaWdlc3RfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcywgZGtsZW4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzLCBka2xlbikpCisgICAgICAgICAgICAgICAgb3V0ID0gcGJrZGYyKGRpZ2VzdF9uYW1lLCBtZW1vcnl2aWV3KHBhc3N3b3JkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhzYWx0KSwgcm91bmRzLCBka2xlbikKKyAgICAgICAgICAgICAgICBvdXQgPSBwYmtkZjIoZGlnZXN0X25hbWUsIGJ5dGVhcnJheShwYXNzd29yZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShzYWx0KSwgcm91bmRzLCBka2xlbikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgaWYgZGtsZW4gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gcGJrZGYyKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBia2RmMiwgYidzaGExJywgYidwYXNzJywgYidzYWx0JywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwYmtkZjIsICdzaGExJywgJ3Bhc3MnLCAnc2FsdCcsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYmtkZjIsICdzaGExJywgYidwYXNzJywgYidzYWx0JywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYmtkZjIsICdzaGExJywgYidwYXNzJywgYidzYWx0JywgMSwgLTEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAndW5zdXBwb3J0ZWQgaGFzaCB0eXBlJyk6CisgICAgICAgICAgICBwYmtkZjIoJ3Vua25vd24nLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxKQorCisgICAgZGVmIHRlc3RfcGJrZGYyX2htYWNfcHkoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcGJrZGYyX2htYWMocHlfaGFzaGxpYi5wYmtkZjJfaG1hYykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoY19oYXNobGliLCAncGJrZGYyX2htYWMnKSwKKyAgICAgICAgICAgICAgICAgICAgICcgICB0ZXN0IHJlcXVpcmVzIE9wZW5TU0wgPiAxLjAnKQorICAgIGRlZiB0ZXN0X3Bia2RmMl9obWFjX2Moc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcGJrZGYyX2htYWMoY19oYXNobGliLnBia2RmMl9obWFjKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaG1hYy5weSBiL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQppbmRleCA0Y2E3Y2VjLi5jZGU1NmZkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2htYWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9obWFjLnB5CkBAIC0xLDE3ICsxLDM5IEBACitpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgaG1hYwogaW1wb3J0IGhhc2hsaWIKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAorCitkZWYgaWdub3JlX3dhcm5pbmcoZnVuYyk6CisgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9UGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICByZXR1cm4gd3JhcHBlcgorCisKIGNsYXNzIFRlc3RWZWN0b3JzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfbWQ1X3ZlY3RvcnMoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGUgSE1BQyBtb2R1bGUgYWdhaW5zdCB0ZXN0IHZlY3RvcnMgZnJvbSB0aGUgUkZDLgogCiAgICAgICAgIGRlZiBtZDV0ZXN0KGtleSwgZGF0YSwgZGlnZXN0KToKLSAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhKQorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNobGliLm1kNSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiaG1hYy1tZDUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCAxNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCA2NCkKKworICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD0nbWQ1JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiaG1hYy1tZDUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCAxNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCA2NCkKKwogCiAgICAgICAgIG1kNXRlc3QoYiJceDBiIiAqIDE2LAogICAgICAgICAgICAgICAgIGIiSGkgVGhlcmUiLApAQCAtNDYsNiArNjgsMTYgQEAKICAgICAgICAgZGVmIHNoYXRlc3Qoa2V5LCBkYXRhLCBkaWdlc3QpOgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNobGliLnNoYTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0LnVwcGVyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgImhtYWMtc2hhMSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIDIwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIDY0KQorCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPSdzaGExJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiaG1hYy1zaGExIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgMjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgNjQpCisKIAogICAgICAgICBzaGF0ZXN0KGIiXHgwYiIgKiAyMCwKICAgICAgICAgICAgICAgICBiIkhpIFRoZXJlIiwKQEAgLTc2LDEwICsxMDgsMjEgQEAKICAgICAgICAgICAgICAgICAgYiJhbmQgTGFyZ2VyIFRoYW4gT25lIEJsb2NrLVNpemUgRGF0YSIpLAogICAgICAgICAgICAgICAgICJlOGU5OWQwZjQ1MjM3ZDc4NmQ2YmJhYTc5NjVjNzgwOGJiZmYxYTkxIikKIAotICAgIGRlZiBfcmZjNDIzMV90ZXN0X2Nhc2VzKHNlbGYsIGhhc2hmdW5jKToKKyAgICBkZWYgX3JmYzQyMzFfdGVzdF9jYXNlcyhzZWxmLCBoYXNoZnVuYywgaGFzaF9uYW1lLCBkaWdlc3Rfc2l6ZSwgYmxvY2tfc2l6ZSk6CiAgICAgICAgIGRlZiBobWFjdGVzdChrZXksIGRhdGEsIGhleGRpZ2VzdHMpOgorICAgICAgICAgICAgaG1hY19uYW1lID0gImhtYWMtIiArIGhhc2hfbmFtZQogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNoZnVuYykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS5sb3dlcigpLCBoZXhkaWdlc3RzW2hhc2hmdW5jXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCBobWFjX25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIGRpZ2VzdF9zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIGJsb2NrX3NpemUpCisKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9aGFzaF9uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLmxvd2VyKCksIGhleGRpZ2VzdHNbaGFzaGZ1bmNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsIGhtYWNfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgZGlnZXN0X3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgYmxvY2tfc2l6ZSkKKwogCiAgICAgICAgICMgNC4yLiAgVGVzdCBDYXNlIDEKICAgICAgICAgaG1hY3Rlc3Qoa2V5ID0gYidceDBiJyoyMCwKQEAgLTE4OSwxNiArMjMyLDE2IEBACiAgICAgICAgICAgICAgICAgIH0pCiAKICAgICBkZWYgdGVzdF9zaGEyMjRfcmZjNDIzMShzZWxmKToKLSAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjI0KQorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEyMjQsICdzaGEyMjQnLCAyOCwgNjQpCiAKICAgICBkZWYgdGVzdF9zaGEyNTZfcmZjNDIzMShzZWxmKToKLSAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjU2KQorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEyNTYsICdzaGEyNTYnLCAzMiwgNjQpCiAKICAgICBkZWYgdGVzdF9zaGEzODRfcmZjNDIzMShzZWxmKToKLSAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMzg0KQorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEzODQsICdzaGEzODQnLCA0OCwgMTI4KQogCiAgICAgZGVmIHRlc3Rfc2hhNTEyX3JmYzQyMzEoc2VsZik6Ci0gICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTUxMikKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhNTEyLCAnc2hhNTEyJywgNjQsIDEyOCkKIAogICAgIGRlZiB0ZXN0X2xlZ2FjeV9ibG9ja19zaXplX3dhcm5pbmdzKHNlbGYpOgogICAgICAgICBjbGFzcyBNb2NrQ3JhenlIYXNoKG9iamVjdCk6CkBAIC0yMjIsNDYgKzI2NSw3NCBAQAogICAgICAgICAgICAgICAgIGhtYWMuSE1BQyhiJ2EnLCBiJ2InLCBkaWdlc3Rtb2Q9TW9ja0NyYXp5SGFzaCkKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4cGVjdGVkIHdhcm5pbmcgYWJvdXQgc21hbGwgYmxvY2tfc2l6ZScpCiAKKyAgICBkZWYgdGVzdF93aXRoX2RpZ2VzdG1vZF93YXJuaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBrZXkgPSBiIlx4MGIiICogMTYKKyAgICAgICAgICAgIGRhdGEgPSBiIkhpIFRoZXJlIgorICAgICAgICAgICAgZGlnZXN0ID0gIjkyOTQ3MjdBMzYzOEJCMUMxM0Y0OEVGODE1OEJGQzlEIgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0KQogCiAKIGNsYXNzIENvbnN0cnVjdG9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgQGlnbm9yZV93YXJuaW5nCiAgICAgZGVmIHRlc3Rfbm9ybWFsKHNlbGYpOgogICAgICAgICAjIFN0YW5kYXJkIGNvbnN0cnVjdG9yIGNhbGwuCiAgICAgICAgIGZhaWxlZCA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiImtleSIpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiU3RhbmRhcmQgY29uc3RydWN0b3IgY2FsbCByYWlzZWQgZXhjZXB0aW9uLiIpCiAKKyAgICBAaWdub3JlX3dhcm5pbmcKICAgICBkZWYgdGVzdF93aXRoX3N0cl9rZXkoc2VsZik6CiAgICAgICAgICMgUGFzcyBhIGtleSBvZiB0eXBlIHN0ciwgd2hpY2ggaXMgYW4gZXJyb3IsIGJlY2F1c2UgaXQgZXhwZWN0cyBhIGtleQogICAgICAgICAjIG9mIHR5cGUgYnl0ZXMKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQygia2V5IikKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X2RvdF9uZXdfd2l0aF9zdHJfa2V5KHNlbGYpOgogICAgICAgICAjIFBhc3MgYSBrZXkgb2YgdHlwZSBzdHIsIHdoaWNoIGlzIGFuIGVycm9yLCBiZWNhdXNlIGl0IGV4cGVjdHMgYSBrZXkKICAgICAgICAgIyBvZiB0eXBlIGJ5dGVzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIGggPSBobWFjLm5ldygia2V5IikKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X3dpdGh0ZXh0KHNlbGYpOgogICAgICAgICAjIENvbnN0cnVjdG9yIGNhbGwgd2l0aCB0ZXh0LgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIia2V5IiwgYiJoYXNoIHRoaXMhIikKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggdGV4dCBhcmd1bWVudCByYWlzZWQgZXhjZXB0aW9uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKSwgJzM0MzI1YjYzOWRhNGNmZDk1NzM1YjM4MWUyOGNiODY0JykKKworICAgIGRlZiB0ZXN0X3dpdGhfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGJ5dGVhcnJheShiImtleSIpLCBieXRlYXJyYXkoYiJoYXNoIHRoaXMhIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdG1vZD0ibWQ1IikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQ29uc3RydWN0b3IgY2FsbCB3aXRoIGJ5dGVhcnJheSBhcmd1bWVudHMgcmFpc2VkIGV4Y2VwdGlvbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCksICczNDMyNWI2MzlkYTRjZmQ5NTczNWIzODFlMjhjYjg2NCcpCisKKyAgICBkZWYgdGVzdF93aXRoX21lbW9yeXZpZXdfbXNnKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIia2V5IiwgbWVtb3J5dmlldyhiImhhc2ggdGhpcyEiKSwgZGlnZXN0bW9kPSJtZDUiKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggbWVtb3J5dmlldyBtc2cgcmFpc2VkIGV4Y2VwdGlvbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCksICczNDMyNWI2MzlkYTRjZmQ5NTczNWIzODFlMjhjYjg2NCcpCiAKICAgICBkZWYgdGVzdF93aXRobW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbnN0cnVjdG9yIGNhbGwgd2l0aCB0ZXh0IGFuZCBkaWdlc3QgbW9kdWxlLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIia2V5IiwgYiIiLCBoYXNobGliLnNoYTEpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ29uc3RydWN0b3IgY2FsbCB3aXRoIGhhc2hsaWIuc2hhMSByYWlzZWQgZXhjZXB0aW9uLiIpCiAKIGNsYXNzIFNhbml0eVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X2RlZmF1bHRfaXNfbWQ1KHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgaWYgSE1BQyBkZWZhdWx0cyB0byBNRDUgYWxnb3JpdGhtLgogICAgICAgICAjIE5PVEU6IHRoaXMgd2hpdGVib3ggdGVzdCBkZXBlbmRzIG9uIHRoZSBobWFjIGNsYXNzIGludGVybmFscwpAQCAtMjcyLDE5ICszNDMsMTkgQEAKICAgICAgICAgIyBFeGVyY2lzaW5nIGFsbCBtZXRob2RzIG9uY2UuCiAgICAgICAgICMgVGhpcyBtdXN0IG5vdCByYWlzZSBhbnkgZXhjZXB0aW9ucwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIibXkgc2VjcmV0IGtleSIpCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIibXkgc2VjcmV0IGtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgICAgIGgudXBkYXRlKGIiY29tcHV0ZSB0aGUgaGFzaCBvZiB0aGlzIHRleHQhIikKICAgICAgICAgICAgIGRpZyA9IGguZGlnZXN0KCkKICAgICAgICAgICAgIGRpZyA9IGguaGV4ZGlnZXN0KCkKICAgICAgICAgICAgIGgyID0gaC5jb3B5KCkKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFeGNlcHRpb24gcmFpc2VkIGR1cmluZyBub3JtYWwgdXNhZ2Ugb2YgSE1BQyBjbGFzcy4iKQogCiBjbGFzcyBDb3B5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGlmIGF0dHJpYnV0ZXMgYXJlIG9mIHNhbWUgdHlwZS4KLSAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiKQorICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgaDIgPSBoMS5jb3B5KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxLmRpZ2VzdF9jb25zID09IGgyLmRpZ2VzdF9jb25zLAogICAgICAgICAgICAgImRpZ2VzdCBjb25zdHJ1Y3RvcnMgZG9uJ3QgbWF0Y2guIikKQEAgLTI5NSw3ICszNjYsNyBAQAogCiAgICAgZGVmIHRlc3RfcmVhbGNvcHkoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBpZiB0aGUgY29weSBtZXRob2QgY3JlYXRlZCBhIHJlYWwgY29weS4KLSAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiKQorICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgaDIgPSBoMS5jb3B5KCkKICAgICAgICAgIyBVc2luZyBpZCgpIGluIGNhc2Ugc29tZWJvZHkgaGFzIG92ZXJyaWRkZW4gX19lcV9fL19fbmVfXy4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlkKGgxKSAhPSBpZChoMiksICJObyByZWFsIGNvcHkgb2YgdGhlIEhNQUMgaW5zdGFuY2UuIikKQEAgLTMwNiw3ICszNzcsNyBAQAogCiAgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBpZiB0aGUgY29weSBoYXMgdGhlIHNhbWUgZGlnZXN0cy4KLSAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiKQorICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgaDEudXBkYXRlKGIic29tZSByYW5kb20gdGV4dCIpCiAgICAgICAgIGgyID0gaDEuY29weSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDEuZGlnZXN0KCksIGgyLmRpZ2VzdCgpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odG1sLnB5IGIvTGliL3Rlc3QvdGVzdF9odG1sLnB5CmluZGV4IDMwZGFjNTguLjVlOWYzODIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHRtbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0bWwucHkKQEAgLTE2LDkgKzE2LDg5IEBACiAgICAgICAgICAgICBodG1sLmVzY2FwZSgnXCc8c2NyaXB0PiImZm9vOyI8L3NjcmlwdD5cJycsIEZhbHNlKSwKICAgICAgICAgICAgICdcJyZsdDtzY3JpcHQmZ3Q7IiZhbXA7Zm9vOyImbHQ7L3NjcmlwdCZndDtcJycpCiAKKyAgICBkZWYgdGVzdF91bmVzY2FwZShzZWxmKToKKyAgICAgICAgbnVtZXJpY19mb3JtYXRzID0gWycmIyVkJywgJyYjJWQ7JywgJyYjeCV4JywgJyYjeCV4OyddCisgICAgICAgIGVycm1zZyA9ICd1bmVzY2FwZSglcikgc2hvdWxkIGhhdmUgcmV0dXJuZWQgJXInCisgICAgICAgIGRlZiBjaGVjayh0ZXh0LCBleHBlY3RlZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWwudW5lc2NhcGUodGV4dCksIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ZXJybXNnICUgKHRleHQsIGV4cGVjdGVkKSkKKyAgICAgICAgZGVmIGNoZWNrX251bShudW0sIGV4cGVjdGVkKToKKyAgICAgICAgICAgIGZvciBmb3JtYXQgaW4gbnVtZXJpY19mb3JtYXRzOgorICAgICAgICAgICAgICAgIHRleHQgPSBmb3JtYXQgJSBudW0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWwudW5lc2NhcGUodGV4dCksIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWVycm1zZyAlICh0ZXh0LCBleHBlY3RlZCkpCisgICAgICAgICMgY2hlY2sgdGV4dCB3aXRoIG5vIGNoYXJhY3RlciByZWZlcmVuY2VzCisgICAgICAgIGNoZWNrKCdubyBjaGFyYWN0ZXIgcmVmZXJlbmNlcycsICdubyBjaGFyYWN0ZXIgcmVmZXJlbmNlcycpCisgICAgICAgICMgY2hlY2sgJiBmb2xsb3dlZCBieSBpbnZhbGlkIGNoYXJzCisgICAgICAgIGNoZWNrKCcmXG4mXHQmICYmJywgJyZcbiZcdCYgJiYnKQorICAgICAgICAjIGNoZWNrICYgZm9sbG93ZWQgYnkgbnVtYmVycyBhbmQgbGV0dGVycworICAgICAgICBjaGVjaygnJjAgJjkgJmEgJjA7ICY5OyAmYTsnLCAnJjAgJjkgJmEgJjA7ICY5OyAmYTsnKQorICAgICAgICAjIGNoZWNrIGluY29tcGxldGUgZW50aXRpZXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCisgICAgICAgIGZvciB4IGluIFsnJicsICcmIycsICcmI3gnLCAnJiNYJywgJyYjeScsICcmI3h5JywgJyYjWHknXToKKyAgICAgICAgICAgIGNoZWNrKHgsIHgpCisgICAgICAgICAgICBjaGVjayh4Kyc7JywgeCsnOycpCisgICAgICAgICMgY2hlY2sgc2V2ZXJhbCBjb21iaW5hdGlvbnMgb2YgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcywKKyAgICAgICAgIyBwb3NzaWJseSBmb2xsb3dlZCBieSBkaWZmZXJlbnQgY2hhcmFjdGVycworICAgICAgICBmb3JtYXRzID0gWycmIyVkJywgJyYjJTA3ZCcsICcmIyVkOycsICcmIyUwN2Q7JywKKyAgICAgICAgICAgICAgICAgICAnJiN4JXgnLCAnJiN4JTA2eCcsICcmI3gleDsnLCAnJiN4JTA2eDsnLAorICAgICAgICAgICAgICAgICAgICcmI3glWCcsICcmI3glMDZYJywgJyYjWCV4OycsICcmI1glMDZ4OyddCisgICAgICAgIGZvciBudW0sIGNoYXIgaW4gemlwKFs2NSwgOTcsIDM0LCAzOCwgMHgyNjAzLCAweDEwMTIzNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnQScsICdhJywgJyInLCAnJicsICdcdTI2MDMnLCAnXFUwMDEwMTIzNCddKToKKyAgICAgICAgICAgIGZvciBzIGluIGZvcm1hdHM6CisgICAgICAgICAgICAgICAgY2hlY2socyAlIG51bSwgY2hhcikKKyAgICAgICAgICAgICAgICBmb3IgZW5kIGluIFsnICcsICdYJ106CisgICAgICAgICAgICAgICAgICAgIGNoZWNrKChzK2VuZCkgJSBudW0sIGNoYXIrZW5kKQorICAgICAgICAjIGNoZWNrIGludmFsaWQgY29kZXBvaW50cworICAgICAgICBmb3IgY3AgaW4gWzB4RDgwMCwgMHhEQjAwLCAweERDMDAsIDB4REZGRiwgMHgxMTAwMDBdOgorICAgICAgICAgICAgY2hlY2tfbnVtKGNwLCAnXHVGRkZEJykKKyAgICAgICAgIyBjaGVjayBtb3JlIGludmFsaWQgY29kZXBvaW50cworICAgICAgICBmb3IgY3AgaW4gWzB4MSwgMHhiLCAweGUsIDB4N2YsIDB4ZmZmZSwgMHhmZmZmLCAweDEwZmZmZSwgMHgxMGZmZmZdOgorICAgICAgICAgICAgY2hlY2tfbnVtKGNwLCAnJykKKyAgICAgICAgIyBjaGVjayBpbnZhbGlkIG51bWJlcnMKKyAgICAgICAgZm9yIG51bSwgY2ggaW4gemlwKFsweDBkLCAweDgwLCAweDk1LCAweDlkXSwgJ1xyXHUyMGFjXHUyMDIyXHg5ZCcpOgorICAgICAgICAgICAgY2hlY2tfbnVtKG51bSwgY2gpCisgICAgICAgICMgY2hlY2sgc21hbGwgbnVtYmVycworICAgICAgICBjaGVja19udW0oMCwgJ1x1RkZGRCcpCisgICAgICAgIGNoZWNrX251bSg5LCAnXHQnKQorICAgICAgICAjIGNoZWNrIGEgYmlnIG51bWJlcgorICAgICAgICBjaGVja19udW0oMTAwMDAwMDAwMDAwMDAwMDAwMCwgJ1x1RkZGRCcpCisgICAgICAgICMgY2hlY2sgdGhhdCBtdWx0aXBsZSB0cmFpbGluZyBzZW1pY29sb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseQorICAgICAgICBmb3IgZSBpbiBbJyZxdW90OzsnLCAnJiMzNDs7JywgJyYjeDIyOzsnLCAnJiNYMjI7OyddOgorICAgICAgICAgICAgY2hlY2soZSwgJyI7JykKKyAgICAgICAgIyBjaGVjayB0aGF0IHNlbWljb2xvbnMgaW4gdGhlIG1pZGRsZSBkb24ndCBjcmVhdGUgcHJvYmxlbXMKKyAgICAgICAgZm9yIGUgaW4gWycmcXVvdDtxdW90OycsICcmIzM0O3F1b3Q7JywgJyYjeDIyO3F1b3Q7JywgJyYjWDIyO3F1b3Q7J106CisgICAgICAgICAgICBjaGVjayhlLCAnInF1b3Q7JykKKyAgICAgICAgIyBjaGVjayB0cmlwbGUgYWRqYWNlbnQgY2hhcnJlZnMKKyAgICAgICAgZm9yIGUgaW4gWycmcXVvdCcsICcmIzM0JywgJyYjeDIyJywgJyYjWDIyJ106CisgICAgICAgICAgICBjaGVjayhlKjMsICciIiInKQorICAgICAgICAgICAgY2hlY2soKGUrJzsnKSozLCAnIiIiJykKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBjYXNlIGlzIHJlc3BlY3RlZAorICAgICAgICBmb3IgZSBpbiBbJyZhbXAnLCAnJmFtcDsnLCAnJkFNUCcsICcmQU1QOyddOgorICAgICAgICAgICAgY2hlY2soZSwgJyYnKQorICAgICAgICBmb3IgZSBpbiBbJyZBbXAnLCAnJkFtcDsnXToKKyAgICAgICAgICAgIGNoZWNrKGUsIGUpCisgICAgICAgICMgY2hlY2sgdGhhdCBub24tZXhpc3RlbnQgbmFtZWQgZW50aXRpZXMgYXJlIHJldHVybmVkIHVuY2hhbmdlZAorICAgICAgICBjaGVjaygnJnN2YWRpbGZhcmk7JywgJyZzdmFkaWxmYXJpOycpCisgICAgICAgICMgdGhlIGZvbGxvd2luZyBleGFtcGxlcyBhcmUgaW4gdGhlIGh0bWw1IHNwZWNzCisgICAgICAgIGNoZWNrKCcmbm90aXQnLCAnwqxpdCcpCisgICAgICAgIGNoZWNrKCcmbm90aXQ7JywgJ8KsaXQ7JykKKyAgICAgICAgY2hlY2soJyZub3RpbicsICfCrGluJykKKyAgICAgICAgY2hlY2soJyZub3RpbjsnLCAn4oiJJykKKyAgICAgICAgIyBhIHNpbWlsYXIgZXhhbXBsZSB3aXRoIGEgbG9uZyBuYW1lCisgICAgICAgIGNoZWNrKCcmbm90UmVhbGx5QW5FeGlzdGluZ05hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlOycsCisgICAgICAgICAgICAgICfCrFJlYWxseUFuRXhpc3RpbmdOYW1lZENoYXJhY3RlclJlZmVyZW5jZTsnKQorICAgICAgICAjIGxvbmdlc3QgdmFsaWQgbmFtZQorICAgICAgICBjaGVjaygnJkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw7JywgJ+KIsycpCisgICAgICAgICMgY2hlY2sgYSBjaGFycmVmIHRoYXQgbWFwcyB0byB0d28gdW5pY29kZSBjaGFycworICAgICAgICBjaGVjaygnJmFjRTsnLCAnXHUyMjNFXHUwMzMzJykKKyAgICAgICAgY2hlY2soJyZhY0UnLCAnJmFjRScpCisgICAgICAgICMgc2VlICMxMjg4OAorICAgICAgICBjaGVjaygnJiMxMjM7ICcgKiAxMDUwLCAneyAnICogMTA1MCkKKyAgICAgICAgIyBzZWUgIzE1MTU2CisgICAgICAgIGNoZWNrKCcmRWFjdXRlcmljJkVhY3V0ZTtyaWMmYWxwaGFjZW50YXVyaSZhbHBoYTtjZW50YXVyaScsCisgICAgICAgICAgICAgICfDiXJpY8OJcmljJmFscGhhY2VudGF1cmnOsWNlbnRhdXJpJykKKyAgICAgICAgY2hlY2soJyZjbzsnLCAnJmNvOycpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoSHRtbFRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkgYi9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKaW5kZXggMTFkOWM5Yy4uMmQ3NzFhMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQpAQCAtNzAsNiArNzAsMTggQEAKICAgICAgICAgc2VsZi5hcHBlbmQoKCJzdGFydHRhZ190ZXh0Iiwgc2VsZi5nZXRfc3RhcnR0YWdfdGV4dCgpKSkKIAogCitjbGFzcyBFdmVudENvbGxlY3RvckNoYXJyZWZzKEV2ZW50Q29sbGVjdG9yKToKKworICAgIGRlZiBnZXRfZXZlbnRzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ldmVudHMKKworICAgIGRlZiBoYW5kbGVfY2hhcnJlZihzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5mYWlsKCdUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2l0aCBjb252ZXJ0X2NoYXJyZWZzPVRydWUnKQorCisgICAgZGVmIGhhbmRsZV9lbnRpdHlyZWYoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuZmFpbCgnVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGggY29udmVydF9jaGFycmVmcz1UcnVlJykKKworCiBjbGFzcyBUZXN0Q2FzZUJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6CkBAIC04NCwyNiArOTYsMzAgQEAKICAgICAgICAgcGFyc2VyLmNsb3NlKCkKICAgICAgICAgZXZlbnRzID0gcGFyc2VyLmdldF9ldmVudHMoKQogICAgICAgICBpZiBldmVudHMgIT0gZXhwZWN0ZWRfZXZlbnRzOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWNlaXZlZCBldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBldmVudHNcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQ6XG4iICsgcHByaW50LnBmb3JtYXQoZXhwZWN0ZWRfZXZlbnRzKSArCisgICAgICAgICAgICBzZWxmLmZhaWwoInJlY2VpdmVkIGV2ZW50cyBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGV2ZW50cyIgKworICAgICAgICAgICAgICAgICAgICAgICJcblNvdXJjZTpcbiIgKyByZXByKHNvdXJjZSkgKworICAgICAgICAgICAgICAgICAgICAgICJcbkV4cGVjdGVkOlxuIiArIHBwcmludC5wZm9ybWF0KGV4cGVjdGVkX2V2ZW50cykgKwogICAgICAgICAgICAgICAgICAgICAgICJcblJlY2VpdmVkOlxuIiArIHBwcmludC5wZm9ybWF0KGV2ZW50cykpCiAKICAgICBkZWYgX3J1bl9jaGVja19leHRyYShzZWxmLCBzb3VyY2UsIGV2ZW50cyk6Ci0gICAgICAgIHNlbGYuX3J1bl9jaGVjayhzb3VyY2UsIGV2ZW50cywgRXZlbnRDb2xsZWN0b3JFeHRyYSgpKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soc291cmNlLCBldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICBFdmVudENvbGxlY3RvckV4dHJhKGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpKQogCiAgICAgZGVmIF9wYXJzZV9lcnJvcihzZWxmLCBzb3VyY2UpOgogICAgICAgICBkZWYgcGFyc2Uoc291cmNlPXNvdXJjZSk6CiAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLmdldF9jb2xsZWN0b3IoKQogICAgICAgICAgICAgcGFyc2VyLmZlZWQoc291cmNlKQogICAgICAgICAgICAgcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3IsIHBhcnNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIHBhcnNlKCkKIAogCiBjbGFzcyBIVE1MUGFyc2VyU3RyaWN0VGVzdENhc2UoVGVzdENhc2VCYXNlKToKIAogICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgogICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCIiLCBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWl0ZT1GYWxzZSk6Ci0gICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUpCisgICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUsIGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9wcm9jZXNzaW5nX2luc3RydWN0aW9uX29ubHkoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPD9wcm9jZXNzaW5nIGluc3RydWN0aW9uPiIsIFsKQEAgLTMzOSw3ICszNTUsNyBAQAogICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKHMsIFsoInN0YXJ0dGFnIiwgZWxlbWVudF9sb3dlciwgW10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImRhdGEiLCBjb250ZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJlbmR0YWciLCBlbGVtZW50X2xvd2VyKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPUNvbGxlY3RvcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcj1Db2xsZWN0b3IoY29udmVydF9jaGFycmVmcz1GYWxzZSkpCiAKICAgICBkZWYgdGVzdF9jb21tZW50cyhzZWxmKToKICAgICAgICAgaHRtbCA9ICgiPCEtLSBJJ20gYSB2YWxpZCBjb21tZW50IC0tPiIKQEAgLTM2NywxMSArMzgzLDYwIEBACiAgICAgICAgICAgICAgICAgICAgICgnY29tbWVudCcsICdbaWYgbHRlIElFIDddPnByZXR0eT88IVtlbmRpZl0nKV0KICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQogCisgICAgZGVmIHRlc3RfY29udmVydF9jaGFycmVmcyhzZWxmKToKKyAgICAgICAgY29sbGVjdG9yID0gbGFtYmRhOiBFdmVudENvbGxlY3RvckNoYXJyZWZzKGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbGxlY3RvcigpLmNvbnZlcnRfY2hhcnJlZnMpCisgICAgICAgIGNoYXJyZWZzID0gWycmcXVvdDsnLCAnJiMzNDsnLCAnJiN4MjI7JywgJyZxdW90JywgJyYjMzQnLCAnJiN4MjInXQorICAgICAgICAjIGNoZWNrIGNoYXJyZWZzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRleHQvYXR0cmlidXRlcworICAgICAgICBleHBlY3RlZCA9IFsoJ3N0YXJ0dGFnJywgJ2EnLCBbKCdocmVmJywgJ2ZvbyJ6YXInKV0pLAorICAgICAgICAgICAgICAgICAgICAoJ2RhdGEnLCAnYSJ6JyksICgnZW5kdGFnJywgJ2EnKV0KKyAgICAgICAgZm9yIGNoYXJyZWYgaW4gY2hhcnJlZnM6CisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soJzxhIGhyZWY9ImZvb3swfXphciI+YXswfXo8L2E+Jy5mb3JtYXQoY2hhcnJlZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIGNvbGxlY3Rvcj1jb2xsZWN0b3IoKSkKKyAgICAgICAgIyBjaGVjayBjaGFycmVmcyBhdCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgdGV4dC9hdHRyaWJ1dGVzCisgICAgICAgIGV4cGVjdGVkID0gWygnZGF0YScsICciJyksCisgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYScsIFsoJ3gnLCAnIicpLCAoJ3knLCAnIlgnKSwgKCd6JywgJ1giJyldKSwKKyAgICAgICAgICAgICAgICAgICAgKCdkYXRhJywgJyInKSwgKCdlbmR0YWcnLCAnYScpLCAoJ2RhdGEnLCAnIicpXQorICAgICAgICBmb3IgY2hhcnJlZiBpbiBjaGFycmVmczoKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnezB9PGEgeD0iezB9IiB5PSJ7MH1YIiB6PSJYezB9Ij4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3swfTwvYT57MH0nLmZvcm1hdChjaGFycmVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIGNoYXJyZWZzIGluIDxzY3JpcHQ+LzxzdHlsZT4gZWxlbWVudHMKKyAgICAgICAgZm9yIGNoYXJyZWYgaW4gY2hhcnJlZnM6CisgICAgICAgICAgICB0ZXh0ID0gJ1gnLmpvaW4oW2NoYXJyZWZdKjMpCisgICAgICAgICAgICBleHBlY3RlZCA9IFsoJ2RhdGEnLCAnIicpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdzY3JpcHQnLCBbXSksICgnZGF0YScsIHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnc2NyaXB0JyksICgnZGF0YScsICciJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ3N0eWxlJywgW10pLCAoJ2RhdGEnLCB0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgnZW5kdGFnJywgJ3N0eWxlJyksICgnZGF0YScsICciJyldCisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soJ3sxfTxzY3JpcHQ+ezB9PC9zY3JpcHQ+ezF9JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3R5bGU+ezB9PC9zdHlsZT57MX0nLmZvcm1hdCh0ZXh0LCBjaGFycmVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIHRydW5jYXRlZCBjaGFycmVmcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCisgICAgICAgIGh0bWwgPSAnJnF1byAmIyAmI3gnCisgICAgICAgIGZvciB4IGluIHJhbmdlKDEsIGxlbihodG1sKSk6CisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbFs6eF0sIFsoJ2RhdGEnLCBodG1sWzp4XSldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcj1jb2xsZWN0b3IoKSkKKyAgICAgICAgIyBjaGVjayBhIHN0cmluZyB3aXRoIG5vIGNoYXJyZWZzCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnbm8gY2hhcnJlZnMgaGVyZScsIFsoJ2RhdGEnLCAnbm8gY2hhcnJlZnMgaGVyZScpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcj1jb2xsZWN0b3IoKSkKKwogCiBjbGFzcyBIVE1MUGFyc2VyVG9sZXJhbnRUZXN0Q2FzZShIVE1MUGFyc2VyU3RyaWN0VGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6Ci0gICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9RmFsc2UpCisgICAgICAgIHJldHVybiBFdmVudENvbGxlY3Rvcihjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRpb25fd2FybmluZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3IoKSAgIyBjb252ZXJ0X2NoYXJyZWZzIG5vdCBwYXNzZWQgZXhwbGljaXRseQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1UcnVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1GYWxzZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhodG1sLnBhcnNlci5IVE1MUGFyc2VFcnJvcik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBFdmVudENvbGxlY3RvcigpLmVycm9yKCd0ZXN0JykKIAogICAgIGRlZiB0ZXN0X3RvbGVyYW50X3BhcnNpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPGh0bWwgPGh0bWw+dGU+Pnh0JmE8PGJjPC9hPjwvaHRtbD5cbicKQEAgLTU2NCwxNyArNjI5LDEyIEBACiAgICAgICAgIGZvciBodG1sLCBleHBlY3RlZCBpbiBkYXRhOgogICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQogCi0gICAgZGVmIHRlc3RfdW5lc2NhcGVfZnVuY3Rpb24oc2VsZik6CisgICAgZGVmIHRlc3RfdW5lc2NhcGVfbWV0aG9kKHNlbGYpOgorICAgICAgICBmcm9tIGh0bWwgaW1wb3J0IHVuZXNjYXBlCiAgICAgICAgIHAgPSBzZWxmLmdldF9jb2xsZWN0b3IoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyYjYmFkOycpLCcmI2JhZDsnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyYjMDAzODsnKSwnJicpCi0gICAgICAgICMgc2VlICMxMjg4OAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyYjMTIzOyAnICogMTA1MCksICd7ICcgKiAxMDUwKQotICAgICAgICAjIHNlZSAjMTUxNTYKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVuZXNjYXBlKCcmRWFjdXRlcmljJkVhY3V0ZTtyaWMnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJmFscGhhY2VudGF1cmkmYWxwaGE7Y2VudGF1cmknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICfDiXJpY8OJcmljJmFscGhhY2VudGF1cmnOsWNlbnRhdXJpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVuZXNjYXBlKCcmY287JyksICcmY287JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzID0gJyZxdW90OyYjMzQ7JiN4MjI7JnF1b3QmIzM0JiN4MjImI2JhZDsnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUocyksIHVuZXNjYXBlKHMpKQogCiAgICAgZGVmIHRlc3RfYnJva2VuX2NvbW1lbnRzKHNlbGYpOgogICAgICAgICBodG1sID0gKCc8ISBub3QgcmVhbGx5IGEgY29tbWVudCA+JwpAQCAtNjMwLDcgKzY5MCw3IEBACiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgiIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwgcXVpdGU9RmFsc2UpOgotICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1UcnVlKQorICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1UcnVlLCBjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfYXR0cl9zeW50YXgoc2VsZik6CiAgICAgICAgIG91dHB1dCA9IFsKQEAgLTY5MSw3ICs3NTEsNyBAQAogY2xhc3MgQXR0cmlidXRlc1RvbGVyYW50VGVzdENhc2UoQXR0cmlidXRlc1N0cmljdFRlc3RDYXNlKToKIAogICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgotICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PUZhbHNlKQorICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3IoY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X2F0dHJfZnVua3lfbmFtZXMyKHNlbGYpOgogICAgICAgICBzZWxmLl9ydW5fY2hlY2soCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKaW5kZXggYzhkZWQ5Mi4uMzBiNmMwYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQpAQCAtMjcsOCArMjcsMTAgQEAKICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAogICAgICAgICBzZWxmLmZpbGVjbGFzcyA9IGZpbGVjbGFzcwogICAgICAgICBzZWxmLmRhdGEgPSBiJycKKyAgICAgICAgc2VsZi5zZW5kYWxsX2NhbGxzID0gMAogCiAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc2VuZGFsbF9jYWxscyArPSAxCiAgICAgICAgIHNlbGYuZGF0YSArPSBkYXRhCiAKICAgICBkZWYgbWFrZWZpbGUoc2VsZiwgbW9kZSwgYnVmc2l6ZT1Ob25lKToKQEAgLTQ1LDcgKzQ3LDcgQEAKIAogICAgIGRlZiBzZW5kYWxsKHNlbGYsIGRhdGEpOgogICAgICAgICBpZiBzZWxmLnBpcGVfdHJpZ2dlciBpbiBkYXRhOgotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVycm5vLkVQSVBFLCAiZ290Y2hhIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRVBJUEUsICJnb3RjaGEiKQogICAgICAgICBzZWxmLmRhdGEgKz0gZGF0YQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgpAQCAtNjAwLDcgKzYwMiw3IEBACiAgICAgICAgICAgICBiIkNvbnRlbnQtTGVuZ3RoIikKICAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbigiZXhhbXBsZS5jb20iKQogICAgICAgICBjb25uLnNvY2sgPSBzb2NrCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBjb25uLnJlcXVlc3QoIlBVVCIsICIvdXJsIiwgImJvZHkiKSkKICAgICAgICAgcmVzcCA9IGNvbm4uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQwMSwgcmVzcC5zdGF0dXMpCkBAIC02NDYsNiArNjQ4LDI4IEBACiAgICAgICAgIHJlc3AuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5jbG9zZWQpCiAKKyAgICBkZWYgdGVzdF9kZWxheWVkX2Fja19vcHQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5hZ2xlL2RlbGF5ZWRfYWNrIG9wdGltaXN0YWlvbiB3b3JrcyBjb3JyZWN0bHkuCisKKyAgICAgICAgIyBGb3Igc21hbGwgcGF5bG9hZHMsIGl0IHNob3VsZCBjb2FsZXNjZSB0aGUgYm9keSB3aXRoCisgICAgICAgICMgaGVhZGVycywgcmVzdWx0aW5nIGluIGEgc2luZ2xlIHNlbmRhbGwoKSBjYWxsCisgICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoTm9uZSkKKyAgICAgICAgY29ubi5zb2NrID0gc29jaworICAgICAgICBib2R5ID0gYid4JyAqIChjb25uLm1zcyAtIDEpCisgICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICcvJywgYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnNlbmRhbGxfY2FsbHMsIDEpCisKKyAgICAgICAgIyBGb3IgbGFyZ2UgcGF5bG9hZHMsIGl0IHNob3VsZCBzZW5kIHRoZSBoZWFkZXJzIGFuZAorICAgICAgICAjIHRoZW4gdGhlIGJvZHksIHJlc3VsdGluZyBpbiBtb3JlIHRoYW4gb25lIHNlbmRhbGwoKQorICAgICAgICAjIGNhbGwKKyAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGJvZHkgPSBiJ3gnICogY29ubi5tc3MKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCBib2R5KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoc29jay5zZW5kYWxsX2NhbGxzLCAxKQorCiBjbGFzcyBPZmZsaW5lVGVzdChUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVzcG9uc2VzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsaWVudC5yZXNwb25zZXNbY2xpZW50Lk5PVF9GT1VORF0sICJOb3QgRm91bmQiKQpAQCAtNzM2LDcgKzc2MCw3IEBACiAKICAgICBkZWYgbWFrZV9zZXJ2ZXIoc2VsZiwgY2VydGZpbGUpOgogICAgICAgICBmcm9tIHRlc3Quc3NsX3NlcnZlcnMgaW1wb3J0IG1ha2VfaHR0cHNfc2VydmVyCi0gICAgICAgIHJldHVybiBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZSkKKyAgICAgICAgcmV0dXJuIG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlPWNlcnRmaWxlKQogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyBzaW1wbGUgdGVzdCB0byBjaGVjayBpdCdzIHN0b3JpbmcgdGhlIHRpbWVvdXQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkgYi9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CmluZGV4IDRlNjI5NjMuLjE1Njk0YWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQpAQCAtOTIsNiArOTIsMTMgQEAKICAgICAgICAgZGVmIGRvX0tFWUVSUk9SKHNlbGYpOgogICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDk5OSkKIAorICAgICAgICBkZWYgZG9fTk9URk9VTkQoc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0KQorCisgICAgICAgIGRlZiBkb19FWFBMQUlORVJST1Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoOTk5LCAiU2hvcnQgTWVzc2FnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgaXMgYSBsb25nIFxuIGV4cGxhaW5hdGlvbiIpCisKICAgICAgICAgZGVmIGRvX0NVU1RPTShzZWxmKToKICAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSg5OTkpCiAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJykKQEAgLTIwMyw2ICsyMTAsMTIgQEAKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDk5OSkKIAorICAgIGRlZiB0ZXN0X3JldHVybl9leHBsYWluX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdFWFBMQUlORVJST1InLCAnLycpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA5OTkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQocmVzLmdldGhlYWRlcignQ29udGVudC1MZW5ndGgnKSkpCisKICAgICBkZWYgdGVzdF9sYXRpbjFfaGVhZGVyKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdMQVRJTk9ORUhFQURFUicsICcvJywgaGVhZGVycz17CiAgICAgICAgICAgICAnWC1TcGVjaWFsLUluY29taW5nJzogICAgICAgJ8OEcmdlciBtaXQgVW5pY29kZScKQEAgLTIxMSw2ICsyMjQsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0aGVhZGVyKCdYLVNwZWNpYWwnKSwgJ0TDpG5nZXJvdXMgTWluZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnJlYWQoKSwgJ8OEcmdlciBtaXQgVW5pY29kZScuZW5jb2RlKCd1dGYtOCcpKQogCisgICAgZGVmIHRlc3RfZXJyb3JfY29udGVudF9sZW5ndGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2MDg4OiBzdGFuZGFyZCBlcnJvciByZXNwb25zZXMgc2hvdWxkIGhhdmUgYSBjb250ZW50LWxlbmd0aAorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdOT1RGT1VORCcsICcvJykKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwNCkKKyAgICAgICAgZGF0YSA9IHJlcy5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQocmVzLmdldGhlYWRlcignQ29udGVudC1MZW5ndGgnKSksIGxlbihkYXRhKSkKKwogCiBjbGFzcyBTaW1wbGVIVFRQU2VydmVyVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKICAgICBjbGFzcyByZXF1ZXN0X2hhbmRsZXIoTm9Mb2dSZXF1ZXN0SGFuZGxlciwgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQppbmRleCA3YzlhZmQ5Li41ZTBlYWVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CkBAIC0xOCw4ICsxOCwxMiBAQAogICAgIGltcG9ydCBzc2wKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBzc2wgPSBOb25lCisgICAgSEFTX1NOSSA9IEZhbHNlCitlbHNlOgorICAgIGZyb20gc3NsIGltcG9ydCBIQVNfU05JCiAKIENFUlRGSUxFID0gTm9uZQorQ0FGSUxFID0gTm9uZQogCiAKIGNsYXNzIFRlc3RJbWFwbGliKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEyNSw3ICsxMjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyBOYWtlZCBzb2NrZXRzIHJldHVybiBlbXB0eSBzdHJpbmdzLi4KICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgICAgICBsaW5lICs9IHBhcnQKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyAuLmJ1dCBTU0xTb2NrZXRzIHJhaXNlIGV4Y2VwdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoYidcclxuJyk6CkBAIC0zNDcsNiArMzUxLDI2IEBACiAgICAgc2VydmVyX2NsYXNzID0gU2VjdXJlVENQU2VydmVyCiAgICAgaW1hcF9jbGFzcyA9IElNQVA0X1NTTAogCisgICAgQHJlYXBfdGhyZWFkcworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19TTkksICdObyBTTkkgc3VwcG9ydCBpbiBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgIHNzbF9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsX2NvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBzc2xfY29udGV4dC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgc3NsX2NvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKENBRklMRSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLkNlcnRpZmljYXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgJzEyNy4wLjAuMScgZG9lc24ndCBtYXRjaCAnbG9jYWxob3N0JyIpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9zZXJ2ZXIoU2ltcGxlSU1BUEhhbmRsZXIpIGFzIHNlcnZlcjoKKyAgICAgICAgICAgICAgICBjbGllbnQgPSBzZWxmLmltYXBfY2xhc3MoKnNlcnZlci5zZXJ2ZXJfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NvbnRleHQ9c3NsX2NvbnRleHQpCisgICAgICAgICAgICAgICAgY2xpZW50LnNodXRkb3duKCkKKworICAgICAgICB3aXRoIHNlbGYucmVhcGVkX3NlcnZlcihTaW1wbGVJTUFQSGFuZGxlcikgYXMgc2VydmVyOgorICAgICAgICAgICAgY2xpZW50ID0gc2VsZi5pbWFwX2NsYXNzKCJsb2NhbGhvc3QiLCBzZXJ2ZXIuc2VydmVyX2FkZHJlc3NbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NvbnRleHQ9c3NsX2NvbnRleHQpCisgICAgICAgICAgICBjbGllbnQuc2h1dGRvd24oKQorCiAKIGNsYXNzIFJlbW90ZUlNQVBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBob3N0ID0gJ2N5cnVzLmFuZHJldy5jbXUuZWR1JwpAQCAtNDU5LDExICs0ODMsMTUgQEAKIAogICAgIGlmIHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpOgogICAgICAgICBpZiBzc2w6Ci0gICAgICAgICAgICBnbG9iYWwgQ0VSVEZJTEUKKyAgICAgICAgICAgIGdsb2JhbCBDRVJURklMRSwgQ0FGSUxFCiAgICAgICAgICAgICBDRVJURklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXljZXJ0LnBlbSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5Y2VydDMucGVtIikKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhDRVJURklMRSk6CiAgICAgICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKCJDYW4ndCByZWFkIGNlcnRpZmljYXRlIGZpbGVzISIpCisgICAgICAgICAgICBDQUZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHljYWNlcnQucGVtIikKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhDQUZJTEUpOgorICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBDQSBmaWxlISIpCiAgICAgICAgIHRlc3RzLmV4dGVuZChbCiAgICAgICAgICAgICBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzLCBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzU1NMLAogICAgICAgICAgICAgUmVtb3RlSU1BUFRlc3QsIFJlbW90ZUlNQVBfU1NMVGVzdCwgUmVtb3RlSU1BUF9TVEFSVFRMU1Rlc3QsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CmluZGV4IDcxYzIyMGYuLjAyNGY0MzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CkBAIC0xLDE0ICsxLDI5IEBACi1pbXBvcnQgaW1wCit0cnk6CisgICAgaW1wb3J0IF90aHJlYWQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfdGhyZWFkID0gTm9uZQogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9pbXBvcnRsaWIgaW1wb3J0IHV0aWwKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCit3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgIGltcG9ydCBpbXAKIAorCitkZWYgcmVxdWlyZXNfbG9hZF9keW5hbWljKG1ldGgpOgorICAgICIiIkRlY29yYXRvciB0byBza2lwIGEgdGVzdCBpZiBub3QgcnVubmluZyB1bmRlciBDUHl0aG9uIG9yIGxhY2tpbmcKKyAgICBpbXAubG9hZF9keW5hbWljKCkuIiIiCisgICAgbWV0aCA9IHN1cHBvcnQuY3B5dGhvbl9vbmx5KG1ldGgpCisgICAgcmV0dXJuIHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihpbXAsICdsb2FkX2R5bmFtaWMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXAubG9hZF9keW5hbWljKCkgcmVxdWlyZWQnKShtZXRoKQorCisKK0B1bml0dGVzdC5za2lwSWYoX3RocmVhZCBpcyBOb25lLCAnX3RocmVhZCBtb2R1bGUgaXMgcmVxdWlyZWQnKQogY2xhc3MgTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIlZlcnkgYmFzaWMgdGVzdCBvZiBpbXBvcnQgbG9jayBmdW5jdGlvbnMuIiIiCkBAIC0xNTAsNyArMTY1LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShmaWxlKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlbmFtZVs6LTNdLmVuZHN3aXRoKHRlbXBfbW9kX25hbWUpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1swXSwgJy5weScpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzFdLCAnVScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzFdLCAncicpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzJdLCBpbXAuUFlfU09VUkNFKQogCiAgICAgICAgICAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKHRlbXBfbW9kX25hbWUsIGZpbGUsIGZpbGVuYW1lLCBpbmZvKQpAQCAtMjA4LDkgKzIyMyw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9yaWdfcGF0aCwgbmV3X29zLnBhdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9yaWdfZ2V0ZW52LCBuZXdfb3MuZ2V0ZW52KQogCi0gICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5Ci0gICAgQHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihpbXAsICdsb2FkX2R5bmFtaWMnKSwKLSAgICAgICAgICAgICAgICAgICAgICdpbXAubG9hZF9keW5hbWljKCkgcmVxdWlyZWQnKQorICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKICAgICBkZWYgdGVzdF9pc3N1ZTE1ODI4X2xvYWRfZXh0ZW5zaW9ucyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxNTgyOCBwaWNrZWQgdXAgdGhhdCB0aGUgYWRhcHRlciBiZXR3ZWVuIHRoZSBvbGQgaW1wIEFQSQogICAgICAgICAjIGFuZCBpbXBvcnRsaWIgY291bGRuJ3QgaGFuZGxlIEMgZXh0ZW5zaW9ucwpAQCAtMjIyLDYgKzIzNSwyMiBAQAogICAgICAgICBtb2QgPSBpbXAubG9hZF9tb2R1bGUoZXhhbXBsZSwgKngpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLl9fbmFtZV9fLCBleGFtcGxlKQogCisgICAgQHJlcXVpcmVzX2xvYWRfZHluYW1pYworICAgIGRlZiB0ZXN0X2lzc3VlMTY0MjFfbXVsdGlwbGVfbW9kdWxlc19pbl9vbmVfZGxsKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE2NDIxOiBsb2FkaW5nIHNldmVyYWwgbW9kdWxlcyBmcm9tIHRoZSBzYW1lIGNvbXBpbGVkIGZpbGUgZmFpbHMKKyAgICAgICAgbSA9ICdfdGVzdGltcG9ydG11bHRpcGxlJworICAgICAgICBmaWxlb2JqLCBwYXRobmFtZSwgZGVzY3JpcHRpb24gPSBpbXAuZmluZF9tb2R1bGUobSkKKyAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgIG1vZDAgPSBpbXAubG9hZF9keW5hbWljKG0sIHBhdGhuYW1lKQorICAgICAgICBtb2QxID0gaW1wLmxvYWRfZHluYW1pYygnX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28nLCBwYXRobmFtZSkKKyAgICAgICAgbW9kMiA9IGltcC5sb2FkX2R5bmFtaWMoJ190ZXN0aW1wb3J0bXVsdGlwbGVfYmFyJywgcGF0aG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kMC5fX25hbWVfXywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QxLl9fbmFtZV9fLCAnX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZDIuX19uYW1lX18sICdfdGVzdGltcG9ydG11bHRpcGxlX2JhcicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgaW1wLmxvYWRfZHluYW1pYygnbm9uZXhpc3RlbnQnLCBwYXRobmFtZSkKKworICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKICAgICBkZWYgdGVzdF9sb2FkX2R5bmFtaWNfSW1wb3J0RXJyb3JfcGF0aChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTU1OTU0OSBhZGRlZCBgbmFtZWAgYW5kIGBwYXRoYCBhdHRyaWJ1dGVzIHRvIEltcG9ydEVycm9yCiAgICAgICAgICMgaW4gb3JkZXIgdG8gcHJvdmlkZSBiZXR0ZXIgZGV0YWlsLiBJc3N1ZSAjMTA4NTQgaW1wbGVtZW50ZWQgdGhvc2UKQEAgLTIzMywxNCArMjYyLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aCwgZXJyLmV4Y2VwdGlvbi5wYXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGVyci5leGNlcHRpb24ubmFtZSkKIAotICAgIEBzdXBwb3J0LmNweXRob25fb25seQotICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaW1wLCAnbG9hZF9keW5hbWljJyksCi0gICAgICAgICAgICAgICAgICAgICAnaW1wLmxvYWRfZHluYW1pYygpIHJlcXVpcmVkJykKKyAgICBAcmVxdWlyZXNfbG9hZF9keW5hbWljCiAgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGVfZXh0ZW5zaW9uX2ZpbGVfaXNfTm9uZShzZWxmKToKICAgICAgICAgIyBXaGVuIGxvYWRpbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZSBhbmQgdGhlIGZpbGUgaXMgTm9uZSwgb3BlbiBvbmUKICAgICAgICAgIyBvbiB0aGUgYmVoYWxmIG9mIGltcC5sb2FkX2R5bmFtaWMoKS4KICAgICAgICAgIyBJc3N1ZSAjMTU5MDIKLSAgICAgICAgbmFtZSA9ICdfaGVhcHEnCisgICAgICAgIG5hbWUgPSAnX3Rlc3RpbXBvcnRtdWx0aXBsZScKICAgICAgICAgZm91bmQgPSBpbXAuZmluZF9tb2R1bGUobmFtZSkKICAgICAgICAgaWYgZm91bmRbMF0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBmb3VuZFswXS5jbG9zZSgpCkBAIC0yNDgsNiArMjc1LDE1IEBACiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJmb3VuZCBtb2R1bGUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSBDIGV4dGVuc2lvbiIpCiAgICAgICAgIGltcC5sb2FkX21vZHVsZShuYW1lLCBOb25lLCAqZm91bmRbMTpdKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwKKyAgICAgICAgInRlc3QgbWVhbmluZ2Z1bCBvbmx5IHdoZW4gd3JpdGluZyBieXRlY29kZSIpCisgICAgZGVmIHRlc3RfYnVnNzczMihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKCk6CisgICAgICAgICAgICBzb3VyY2UgPSBzdXBwb3J0LlRFU1RGTiArICcucHknCisgICAgICAgICAgICBvcy5ta2Rpcihzb3VyY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAnXk5vIG1vZHVsZScsCisgICAgICAgICAgICAgICAgaW1wLmZpbmRfbW9kdWxlLCBzdXBwb3J0LlRFU1RGTiwgWyIuIl0pCisKICAgICBkZWYgdGVzdF9tdWx0aXBsZV9jYWxsc190b19nZXRfZGF0YShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTg3NTU6IG1ha2Ugc3VyZSBtdWx0aXBsZSBjYWxscyB0byBnZXRfZGF0YSgpIGNhbiBzdWNjZWVkLgogICAgICAgICBsb2FkZXIgPSBpbXAuX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KCdpbXAnLCBpbXAuX19maWxlX18sCkBAIC0yOTMsMjIgKzMyOSw2IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgJ2h0bWwnKToKICAgICAgICAgICAgIGltcC5yZWxvYWQocGFyc2VyKQogCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JlcGxhY2VkKHNlbGYpOgotICAgICAgICAjIHNlZSAjMTg2OTgKLSAgICAgICAgZGVmIGNvZGUoKToKLSAgICAgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKSgndG9wX2xldmVsJykKLSAgICAgICAgICAgIG1vZHVsZS5zcGFtID0gMwotICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ3RvcF9sZXZlbCddID0gbW9kdWxlCi0gICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsndG9wX2xldmVsJzogY29kZX0pCi0gICAgICAgIHdpdGggbW9jazoKLSAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCi0gICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBpbXAucmVsb2FkKG1vZHVsZSkKLSAgICAgICAgICAgICAgICBhY3R1YWwgPSBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10KLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbC5zcGFtLCAzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVsb2FkZWQuc3BhbSwgMykKLQogCiBjbGFzcyBQRVAzMTQ3VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIG9mIFBFUCAzMTQ3LiIiIgpAQCAtNDYxLDIwICs0ODEsNSBAQAogICAgICAgICAgICAgb3Mucm1kaXIobmFtZSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbCi0gICAgICAgIEltcG9ydFRlc3RzLAotICAgICAgICBQRVAzMTQ3VGVzdHMsCi0gICAgICAgIFJlbG9hZFRlc3RzLAotICAgICAgICBOdWxsSW1wb3J0ZXJUZXN0cywKLSAgICAgICAgXQotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IF90aHJlYWQKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICB0ZXN0cy5hcHBlbmQoTG9ja1Rlc3RzKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weQppbmRleCBkZjA4ZTZhLi5iZGExNTQxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weQpAQCAtMSw5ICsxLDggQEAKICMgV2UgaW1wb3J0IGltcG9ydGxpYiAqQVNBUCogaW4gb3JkZXIgdG8gdGVzdCAjMTUzODYKIGltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogZnJvbSBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBpbXBvcnQgX2dldF9zb3VyY2VmaWxlCiBpbXBvcnQgYnVpbHRpbnMKLWltcG9ydCBpbXAKLWZyb20gdGVzdC50ZXN0X2ltcG9ydGxpYi5pbXBvcnRfIGltcG9ydCB1dGlsIGFzIGltcG9ydGxpYl91dGlsCiBpbXBvcnQgbWFyc2hhbAogaW1wb3J0IG9zCiBpbXBvcnQgcGxhdGZvcm0KQEAgLTIyLDcgKzIxLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoCiAgICAgRW52aXJvbm1lbnRWYXJHdWFyZCwgVEVTVEZOLCBjaGVja193YXJuaW5ncywgZm9yZ2V0LCBpc19qeXRob24sCiAgICAgbWFrZV9sZWdhY3lfcHljLCBybXRyZWUsIHJ1bl91bml0dGVzdCwgc3dhcF9hdHRyLCBzd2FwX2l0ZW0sIHRlbXBfdW1hc2ssCi0gICAgdW5saW5rLCB1bmxvYWQsIGNyZWF0ZV9lbXB0eV9maWxlLCBjcHl0aG9uX29ubHkpCisgICAgdW5saW5rLCB1bmxvYWQsIGNyZWF0ZV9lbXB0eV9maWxlLCBjcHl0aG9uX29ubHksIFRFU1RGTl9VTkVOQ09EQUJMRSkKIGZyb20gdGVzdCBpbXBvcnQgc2NyaXB0X2hlbHBlcgogCiAKQEAgLTcwLDggKzY5LDYgQEAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHVubG9hZChURVNURk4pCiAKLSAgICBzZXRVcCA9IHRlYXJEb3duCi0KICAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2aXR5KHNlbGYpOgogICAgICAgICAjIEJyaWVmIGRpZ3Jlc3Npb24gdG8gdGVzdCB0aGF0IGltcG9ydCBpcyBjYXNlLXNlbnNpdGl2ZTogIGlmIHdlIGdvdAogICAgICAgICAjIHRoaXMgZmFyLCB3ZSBrbm93IGZvciBzdXJlIHRoYXQgInJhbmRvbSIgZXhpc3RzLgpAQCAtMTI5LDE2ICsxMjYsNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCiAKLSAgICBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCi0gICAgZGVmIHRlc3RfYnVnNzczMihzZWxmKToKLSAgICAgICAgc291cmNlID0gVEVTVEZOICsgJy5weScKLSAgICAgICAgb3MubWtkaXIoc291cmNlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAnXk5vIG1vZHVsZScsCi0gICAgICAgICAgICAgICAgaW1wLmZpbmRfbW9kdWxlLCBURVNURk4sIFsiLiJdKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3Mucm1kaXIoc291cmNlKQotCiAgICAgZGVmIHRlc3RfbW9kdWxlX3dpdGhfbGFyZ2Vfc3RhY2soc2VsZiwgbW9kdWxlPSdsb25nbGlzdCcpOgogICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTU2MTg1OC4KICAgICAgICAgZmlsZW5hbWUgPSBtb2R1bGUgKyAnLnB5JwpAQCAtMTYxLDE2ICsxNDgsMjQgQEAKICAgICAgICAgc3lzLnBhdGguYXBwZW5kKCcnKQogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogCisgICAgICAgIG5hbWVzcGFjZSA9IHt9CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1ha2VfbGVnYWN5X3B5YyhmaWxlbmFtZSkKICAgICAgICAgICAgICMgVGhpcyB1c2VkIHRvIGNyYXNoLgotICAgICAgICAgICAgZXhlYygnaW1wb3J0ICcgKyBtb2R1bGUpCisgICAgICAgICAgICBleGVjKCdpbXBvcnQgJyArIG1vZHVsZSwgTm9uZSwgbmFtZXNwYWNlKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgIyBDbGVhbnVwLgogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWy0xXQogICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgJ2MnKQogICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgJ28nKQogCisgICAgICAgICAgICAjIFJlbW92ZSByZWZlcmVuY2VzIHRvIHRoZSBtb2R1bGUgKHVubG9hZCB0aGUgbW9kdWxlKQorICAgICAgICAgICAgbmFtZXNwYWNlLmNsZWFyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0X2ZhaWxpbmdfaW1wb3J0X3N0aWNrcyhzZWxmKToKICAgICAgICAgc291cmNlID0gVEVTVEZOICsgIi5weSIKICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgInciKSBhcyBmOgpAQCAtMjI1LDcgKzIyMCw3IEBACiAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgiYSA9IDEwXG5iPTIwLy8wXG4iKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgaW1wLnJlbG9hZCwgbW9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGltcG9ydGxpYi5yZWxvYWQsIG1vZCkKICAgICAgICAgICAgICMgQnV0IHdlIHN0aWxsIGV4cGVjdCB0aGUgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzLgogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KFRFU1RGTikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kLCBOb25lLCAiZXhwZWN0ZWQgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzIikKQEAgLTI4MCw3ICsyNzUsNyBAQAogICAgICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgaW1wb3J0IGltcAorICAgICAgICAgICAgICAgICAgaW1wb3J0IGltcG9ydGxpYgogICAgICAgICAgICAgc3lzLmFyZ3YuaW5zZXJ0KDAsIEMoKSkKICAgICAgICAgICAgICIiIikpCiAgICAgICAgIHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayh0ZXN0Zm4pCkBAIC0yOTEsNyArMjg2LDcgQEAKICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc291cmNlID0gVEVTVEZOICsgIi5weSIKLSAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHRyeToKQEAgLTMyMiw2ICszMTcsMTQgQEAKICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJJbXBvcnRFcnJvciIsIHN0ZG91dCkKIAorICAgIGRlZiB0ZXN0X2Zyb21faW1wb3J0X21lc3NhZ2VfZm9yX25vbmV4aXN0ZW50X21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAiXk5vIG1vZHVsZSBuYW1lZCAnYm9ndXMnIik6CisgICAgICAgICAgICBmcm9tIGJvZ3VzIGltcG9ydCBmb28KKworICAgIGRlZiB0ZXN0X2Zyb21faW1wb3J0X21lc3NhZ2VfZm9yX2V4aXN0aW5nX21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAiXmNhbm5vdCBpbXBvcnQgbmFtZSAnYm9ndXMnIik6CisgICAgICAgICAgICBmcm9tIHJlIGltcG9ydCBib2d1cworCiAKIEBza2lwX2lmX2RvbnRfd3JpdGVfYnl0ZWNvZGUKIGNsYXNzIEZpbGVQZXJtaXNzaW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzMyLDcgKzMzNSw3IEBACiAgICAgZGVmIHRlc3RfY3JlYXRpb25fbW9kZShzZWxmKToKICAgICAgICAgbWFzayA9IDBvMDIyCiAgICAgICAgIHdpdGggdGVtcF91bWFzayhtYXNrKSwgX3JlYWR5X3RvX2ltcG9ydCgpIGFzIChuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCisgICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCiAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2FjaGVkX3BhdGgpOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiX19pbXBvcnRfXyBkaWQgbm90IHJlc3VsdCBpbiBjcmVhdGlvbiBvZiAiCkBAIC0zNTAsNyArMzUzLDcgQEAKICAgICAgICAgIyBwZXJtaXNzaW9ucyBvZiAucHljIHNob3VsZCBtYXRjaCB0aG9zZSBvZiAucHksIHJlZ2FyZGxlc3Mgb2YgbWFzawogICAgICAgICBtb2RlID0gMG82MDAKICAgICAgICAgd2l0aCB0ZW1wX3VtYXNrKDBvMDIyKSwgX3JlYWR5X3RvX2ltcG9ydCgpIGFzIChuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCisgICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCiAgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBtb2RlKQogICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNhY2hlZF9wYXRoKToKQEAgLTM2NSw3ICszNjgsNyBAQAogICAgIGRlZiB0ZXN0X2NhY2hlZF9yZWFkb25seShzZWxmKToKICAgICAgICAgbW9kZSA9IDBvNDAwCiAgICAgICAgIHdpdGggdGVtcF91bWFzaygwbzAyMiksIF9yZWFkeV90b19pbXBvcnQoKSBhcyAobmFtZSwgcGF0aCk6Ci0gICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQogICAgICAgICAgICAgb3MuY2htb2QocGF0aCwgbW9kZSkKICAgICAgICAgICAgIF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjYWNoZWRfcGF0aCk6CkBAIC00MDUsNyArNDA4LDcgQEAKICAgICAgICAgICAgICAgICBieXRlY29kZV9vbmx5ID0gcGF0aCArICJjIgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9vbmx5ID0gcGF0aCArICJvIgotICAgICAgICAgICAgb3MucmVuYW1lKGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKSwgYnl0ZWNvZGVfb25seSkKKyAgICAgICAgICAgIG9zLnJlbmFtZShpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKSwgYnl0ZWNvZGVfb25seSkKICAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ueCwgJ3Jld3JpdHRlbicpCiAKQEAgLTQyNyw3ICs0MzAsNyBAQAogIiIiCiAgICAgZGlyX25hbWUgPSBvcy5wYXRoLmFic3BhdGgoVEVTVEZOKQogICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihkaXJfbmFtZSwgbW9kdWxlX25hbWUpICsgb3MuZXh0c2VwICsgInB5IgotICAgIGNvbXBpbGVkX25hbWUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9uYW1lKQorICAgIGNvbXBpbGVkX25hbWUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX25hbWUpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc3lzX3BhdGggPSBzeXMucGF0aFs6XQpAQCAtNDg4LDcgKzQ5MSw3IEBACiAgICAgICAgICAgICBoZWFkZXIgPSBmLnJlYWQoMTIpCiAgICAgICAgICAgICBjb2RlID0gbWFyc2hhbC5sb2FkKGYpCiAgICAgICAgIGNvbnN0YW50cyA9IGxpc3QoY29kZS5jb19jb25zdHMpCi0gICAgICAgIGZvcmVpZ25fY29kZSA9IHRlc3RfbWFpbi5fX2NvZGVfXworICAgICAgICBmb3JlaWduX2NvZGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZS5fX2NvZGVfXwogICAgICAgICBwb3MgPSBjb25zdGFudHMuaW5kZXgoMSkKICAgICAgICAgY29uc3RhbnRzW3Bvc10gPSBmb3JlaWduX2NvZGUKICAgICAgICAgY29kZSA9IHR5cGUoY29kZSkoY29kZS5jb19hcmdjb3VudCwgY29kZS5jb19rd29ubHlhcmdjb3VudCwKQEAgLTYzMCw3ICs2MzMsNyBAQAogY2xhc3MgUHljYWNoZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFRlc3QgdGhlIHZhcmlvdXMgUEVQIDMxNDcgcmVsYXRlZCBiZWhhdmlvcnMuCiAKLSAgICB0YWcgPSBpbXAuZ2V0X3RhZygpCisgICAgdGFnID0gc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZwogCiAgICAgZGVmIF9jbGVhbihzZWxmKToKICAgICAgICAgZm9yZ2V0KFRFU1RGTikKQEAgLTY3OCwxMCArNjgxLDExIEBACiAgICAgICAgICMgV2l0aCBQRVAgMzE0NyBjYWNoZSBsYXlvdXQsIHJlbW92aW5nIHRoZSBzb3VyY2UgYnV0IGxlYXZpbmcgdGhlIHB5YwogICAgICAgICAjIGZpbGUgZG9lcyBub3Qgc2F0aXNmeSB0aGUgaW1wb3J0LgogICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2UpCisgICAgICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhweWNfZmlsZSkpCiAgICAgICAgIG9zLnJlbW92ZShzZWxmLnNvdXJjZSkKICAgICAgICAgZm9yZ2V0KFRFU1RGTikKKyAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sIFRFU1RGTikKIAogICAgIEBza2lwX2lmX2RvbnRfd3JpdGVfYnl0ZWNvZGUKQEAgLTcwMyw3ICs3MDcsNyBAQAogICAgIGRlZiB0ZXN0X19fY2FjaGVkX18oc2VsZik6CiAgICAgICAgICMgTW9kdWxlcyBub3cgYWxzbyBoYXZlIGFuIF9fY2FjaGVkX18gdGhhdCBwb2ludHMgdG8gdGhlIHB5YyBmaWxlLgogICAgICAgICBtID0gX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgIHB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKFRFU1RGTiArICcucHknKQorICAgICAgICBweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKFRFU1RGTiArICcucHknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19jYWNoZWRfXywgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgcHljX2ZpbGUpKQogCiAgICAgQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQpAQCAtNzM4LDEwICs3NDIsMTAgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgbSA9IF9faW1wb3J0X18oJ3BlcDMxNDcuZm9vJykKLSAgICAgICAgaW5pdF9weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgIGluaXRfcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnX19pbml0X18ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fY2FjaGVkX18sIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGluaXRfcHljKSkKLSAgICAgICAgZm9vX3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCisgICAgICAgIGZvb19weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLm1vZHVsZXNbJ3BlcDMxNDcuZm9vJ10uX19jYWNoZWRfXywKICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBmb29fcHljKSkKIApAQCAtNzY1LDEwICs3NjksMTAgQEAKICAgICAgICAgdW5sb2FkKCdwZXAzMTQ3JykKICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgbSA9IF9faW1wb3J0X18oJ3BlcDMxNDcuZm9vJykKLSAgICAgICAgaW5pdF9weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgIGluaXRfcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnX19pbml0X18ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fY2FjaGVkX18sIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGluaXRfcHljKSkKLSAgICAgICAgZm9vX3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCisgICAgICAgIGZvb19weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLm1vZHVsZXNbJ3BlcDMxNDcuZm9vJ10uX19jYWNoZWRfXywKICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBmb29fcHljKSkKIApAQCAtODUyLDcgKzg1Niw2IEBACiAgICAgICAgIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbJ19mcm96ZW5faW1wb3J0bGliJ10KICAgICAgICAgc2VsZi5hc3NlcnRJcyhtYWNoaW5lcnkuRmlsZUZpbmRlciwgbW9kLkZpbGVGaW5kZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMoaW1wLm5ld19tb2R1bGUsIG1vZC5uZXdfbW9kdWxlKQogCiAKIEBjcHl0aG9uX29ubHkKQEAgLTEwMzMsMTEgKzEwMzYsMTQgQEAKICAgICAgICAgIyBhd2F5IGZyb20gdGhlIHRyYWNlYmFjay4KICAgICAgICAgc2VsZi5jcmVhdGVfbW9kdWxlKCJmb28iLCAiIikKICAgICAgICAgaW1wb3J0bGliID0gc3lzLm1vZHVsZXNbJ19mcm96ZW5faW1wb3J0bGliJ10KLSAgICAgICAgb2xkX2xvYWRfbW9kdWxlID0gaW1wb3J0bGliLlNvdXJjZUxvYWRlci5sb2FkX21vZHVsZQorICAgICAgICBpZiAnbG9hZF9tb2R1bGUnIGluIHZhcnMoaW1wb3J0bGliLlNvdXJjZUxvYWRlcik6CisgICAgICAgICAgICBvbGRfZXhlY19tb2R1bGUgPSBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmV4ZWNfbW9kdWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvbGRfZXhlY19tb2R1bGUgPSBOb25lCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZSgqYXJncyk6CisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoKmFyZ3MpOgogICAgICAgICAgICAgICAgIDEvMAotICAgICAgICAgICAgaW1wb3J0bGliLlNvdXJjZUxvYWRlci5sb2FkX21vZHVsZSA9IGxvYWRfbW9kdWxlCisgICAgICAgICAgICBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmV4ZWNfbW9kdWxlID0gZXhlY19tb2R1bGUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpbXBvcnQgZm9vCiAgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZToKQEAgLTEwNDYsMTkgKzEwNTIsMjEgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlplcm9EaXZpc2lvbkVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RyYWNlYmFjayh0YiwgW19fZmlsZV9fLCAnPGZyb3plbiBpbXBvcnRsaWInLCBfX2ZpbGVfX10pCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmxvYWRfbW9kdWxlID0gb2xkX2xvYWRfbW9kdWxlCisgICAgICAgICAgICBpZiBvbGRfZXhlY19tb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBkZWwgaW1wb3J0bGliLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmV4ZWNfbW9kdWxlID0gb2xkX2V4ZWNfbW9kdWxlCiAKLQotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHJ1bl91bml0dGVzdChJbXBvcnRUZXN0cywgUHljYWNoZVRlc3RzLCBGaWxlUGVybWlzc2lvblRlc3RzLAotICAgICAgICAgICAgICAgICBQeWNSZXdyaXRpbmdUZXN0cywgUGF0aHNUZXN0cywgUmVsYXRpdmVJbXBvcnRUZXN0cywKLSAgICAgICAgICAgICAgICAgT3ZlcnJpZGluZ0ltcG9ydEJ1aWx0aW5UZXN0cywKLSAgICAgICAgICAgICAgICAgSW1wb3J0bGliQm9vdHN0cmFwVGVzdHMsIEdldFNvdXJjZWZpbGVUZXN0cywKLSAgICAgICAgICAgICAgICAgVGVzdFN5bWJvbGljYWxseUxpbmtlZFBhY2thZ2UsCi0gICAgICAgICAgICAgICAgIEltcG9ydFRyYWNlYmFja1Rlc3RzKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFRFU1RGTl9VTkVOQ09EQUJMRSwgJ25lZWQgVEVTVEZOX1VORU5DT0RBQkxFJykKKyAgICBkZWYgdGVzdF91bmVuY29kYWJsZV9maWxlbmFtZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTE2MTk6IFRoZSBQeXRob24gcGFyc2VyIGFuZCB0aGUgaW1wb3J0IG1hY2hpbmVyeSBtdXN0IG5vdAorICAgICAgICAjIGVuY29kZSBmaWxlbmFtZXMsIGVzcGVjaWFsbHkgb24gV2luZG93cworICAgICAgICBweW5hbWUgPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KCcnLCBURVNURk5fVU5FTkNPREFCTEUsICdwYXNzJykKKyAgICAgICAgbmFtZSA9IHB5bmFtZVs6LTNdCisgICAgICAgIHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCAibW9kID0gX19pbXBvcnRfXyglYSkiICUgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXNvbGF0ZWQ9RmFsc2UpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAjIFRlc3QgbmVlZHMgdG8gYmUgYSBwYWNrYWdlLCBzbyB3ZSBjYW4gZG8gcmVsYXRpdmUgaW1wb3J0cy4KLSAgICBmcm9tIHRlc3QudGVzdF9pbXBvcnQgaW1wb3J0IHRlc3RfbWFpbgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRob29rcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyMmQxYS4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLWltcG9ydCBzeXMKLWltcG9ydCBpbXAKLWltcG9ydCBvcwotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLQotCi10ZXN0X3NyYyA9ICIiIlwKLWRlZiBnZXRfbmFtZSgpOgotICAgIHJldHVybiBfX25hbWVfXwotZGVmIGdldF9maWxlKCk6Ci0gICAgcmV0dXJuIF9fZmlsZV9fCi0iIiIKLQotYWJzaW1wID0gImltcG9ydCBzdWJcbiIKLXJlbGltcCA9ICJmcm9tIC4gaW1wb3J0IHN1YlxuIgotZGVlcHJlbGltcCA9ICJmcm9tIC4uLi4gaW1wb3J0IHN1YlxuIgotZnV0aW1wID0gImZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0XG4iCi0KLXJlbG9hZF9zcmMgPSB0ZXN0X3NyYysiIiJcCi1yZWxvYWRlZCA9IFRydWUKLSIiIgotCi10ZXN0X2NvID0gY29tcGlsZSh0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotcmVsb2FkX2NvID0gY29tcGlsZShyZWxvYWRfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi0KLXRlc3QyX29sZGFic19jbyA9IGNvbXBpbGUoYWJzaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXRlc3QyX25ld2Fic19jbyA9IGNvbXBpbGUoZnV0aW1wICsgYWJzaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXRlc3QyX25ld3JlbF9jbyA9IGNvbXBpbGUocmVsaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXRlc3QyX2RlZXByZWxfY28gPSBjb21waWxlKGRlZXByZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfZnV0cmVsX2NvID0gY29tcGlsZShmdXRpbXAgKyByZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotCi10ZXN0X3BhdGggPSAiISEhX3Rlc3RfISEhIgotCi0KLWNsYXNzIFRlc3RJbXBvcnRlcjoKLQotICAgIG1vZHVsZXMgPSB7Ci0gICAgICAgICJob29rdGVzdG1vZHVsZSI6IChGYWxzZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2UiOiAoVHJ1ZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViIjogKFRydWUsIHRlc3RfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIiOiAoVHJ1ZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uub2xkYWJzIjogKEZhbHNlLCB0ZXN0Ml9vbGRhYnNfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld2FicyI6IChGYWxzZSwgdGVzdDJfbmV3YWJzX2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdyZWwiOiAoRmFsc2UsIHRlc3QyX25ld3JlbF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5zdWJlc3QiOiAoVHJ1ZSwgdGVzdDJfZGVlcHJlbF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2UuZnV0cmVsIjogKEZhbHNlLCB0ZXN0Ml9mdXRyZWxfY28pLAotICAgICAgICAic3ViIjogKEZhbHNlLCB0ZXN0X2NvKSwKLSAgICAgICAgInJlbG9hZG1vZHVsZSI6IChGYWxzZSwgdGVzdF9jbyksCi0gICAgfQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9dGVzdF9wYXRoKToKLSAgICAgICAgaWYgcGF0aCAhPSB0ZXN0X3BhdGg6Ci0gICAgICAgICAgICAjIGlmIG91ciBjbGFzcyBpcyBvbiBzeXMucGF0aF9ob29rcywgd2UgbXVzdCByYWlzZQotICAgICAgICAgICAgIyBJbXBvcnRFcnJvciBmb3IgYW55IHBhdGggaXRlbSB0aGF0IHdlIGNhbid0IGhhbmRsZS4KLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBfZ2V0X19wYXRoX18oc2VsZik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgaWYgZnVsbG5hbWUgaW4gc2VsZi5tb2R1bGVzOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICBpc3BrZywgY29kZSA9IHNlbGYubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuc2V0ZGVmYXVsdChmdWxsbmFtZSxpbXAubmV3X21vZHVsZShmdWxsbmFtZSkpCi0gICAgICAgIG1vZC5fX2ZpbGVfXyA9ICI8JXM+IiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCi0gICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZgotICAgICAgICBpZiBpc3BrZzoKLSAgICAgICAgICAgIG1vZC5fX3BhdGhfXyA9IHNlbGYuX2dldF9fcGF0aF9fKCkKLSAgICAgICAgZXhlYyhjb2RlLCBtb2QuX19kaWN0X18pCi0gICAgICAgIHJldHVybiBtb2QKLQotCi1jbGFzcyBNZXRhSW1wb3J0ZXIoVGVzdEltcG9ydGVyKToKLSAgICBkZWYgX2dldF9fcGF0aF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gW10KLQotY2xhc3MgUGF0aEltcG9ydGVyKFRlc3RJbXBvcnRlcik6Ci0gICAgZGVmIF9nZXRfX3BhdGhfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtzZWxmLnBhdGhdCi0KLQotY2xhc3MgSW1wb3J0QmxvY2tlcjoKLSAgICAiIiJQbGFjZSBhbiBJbXBvcnRCbG9ja2VyIGluc3RhbmNlIG9uIHN5cy5tZXRhX3BhdGggYW5kIHlvdQotICAgIGNhbiBiZSBzdXJlIHRoZSBtb2R1bGVzIHlvdSBzcGVjaWZpZWQgY2FuJ3QgYmUgaW1wb3J0ZWQsIGV2ZW4KLSAgICBpZiBpdCdzIGEgYnVpbHRpbi4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgKm5hbWVzdG9ibG9jayk6Ci0gICAgICAgIHNlbGYubmFtZXN0b2Jsb2NrID0gZGljdC5mcm9ta2V5cyhuYW1lc3RvYmxvY2spCi0gICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxmLm5hbWVzdG9ibG9jazoKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0gICAgICAgIHJldHVybiBOb25lCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIkkgZGFyZSB5b3UiKQotCi0KLWNsYXNzIEltcFdyYXBwZXI6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD1Ob25lKToKLSAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZSBhbmQgbm90IG9zLnBhdGguaXNkaXIocGF0aCk6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotICAgICAgICBzZWxmLnBhdGggPSBwYXRoCi0KLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIHN1Ym5hbWUgPSBmdWxsbmFtZS5zcGxpdCgiLiIpWy0xXQotICAgICAgICBpZiBzdWJuYW1lICE9IGZ1bGxuYW1lIGFuZCBzZWxmLnBhdGggaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGlmIHNlbGYucGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcGF0aCA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhdGggPSBbc2VsZi5wYXRoXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmaWxlLCBmaWxlbmFtZSwgc3R1ZmYgPSBpbXAuZmluZF9tb2R1bGUoc3VibmFtZSwgcGF0aCkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIEltcExvYWRlcihmaWxlLCBmaWxlbmFtZSwgc3R1ZmYpCi0KLQotY2xhc3MgSW1wTG9hZGVyOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGZpbGVuYW1lLCBzdHVmZik6Ci0gICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgICAgIHNlbGYuc3R1ZmYgPSBzdHVmZgotCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKGZ1bGxuYW1lLCBzZWxmLmZpbGUsIHNlbGYuZmlsZW5hbWUsIHNlbGYuc3R1ZmYpCi0gICAgICAgIGlmIHNlbGYuZmlsZToKLSAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCi0gICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZiAgIyBmb3IgaW50cm9zcGVjdGlvbgotICAgICAgICByZXR1cm4gbW9kCi0KLQotY2xhc3MgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLnBhdGggPSBzeXMucGF0aFs6XQotICAgICAgICBzZWxmLm1ldGFfcGF0aCA9IHN5cy5tZXRhX3BhdGhbOl0KLSAgICAgICAgc2VsZi5wYXRoX2hvb2tzID0gc3lzLnBhdGhfaG9va3NbOl0KLSAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQotICAgICAgICBzZWxmLm1vZHVsZXNfYmVmb3JlID0gc3VwcG9ydC5tb2R1bGVzX3NldHVwKCkKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnBhdGgKLSAgICAgICAgc3lzLm1ldGFfcGF0aFs6XSA9IHNlbGYubWV0YV9wYXRoCi0gICAgICAgIHN5cy5wYXRoX2hvb2tzWzpdID0gc2VsZi5wYXRoX2hvb2tzCi0gICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKLSAgICAgICAgc3VwcG9ydC5tb2R1bGVzX2NsZWFudXAoKnNlbGYubW9kdWxlc19iZWZvcmUpCi0KLQotY2xhc3MgSW1wb3J0SG9va3NUZXN0Q2FzZShJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSk6Ci0KLSAgICBkZWYgZG9UZXN0SW1wb3J0cyhzZWxmLCBpbXBvcnRlcj1Ob25lKToKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0bW9kdWxlCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3Rtb2R1bGUuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3Rtb2R1bGUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1YiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIiKQotICAgICAgICBpZiBpbXBvcnRlcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3Rtb2R1bGUuX19sb2FkZXJfXywgaW1wb3J0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuX19sb2FkZXJfXywgaW1wb3J0ZXIpCi0KLSAgICAgICAgVGVzdEltcG9ydGVyLm1vZHVsZXNbJ3JlbG9hZG1vZHVsZSddID0gKEZhbHNlLCB0ZXN0X2NvKQotICAgICAgICBpbXBvcnQgcmVsb2FkbW9kdWxlCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihyZWxvYWRtb2R1bGUsJ3JlbG9hZGVkJykpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5uZXdyZWwKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3cmVsLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdyZWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdyZWwuc3ViLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLnN1YmVzdCBhcyBzdWJlc3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJlc3QuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuc3ViZXN0IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJlc3Quc3ViLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5mdXRyZWwKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuZnV0cmVsLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5mdXRyZWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5mdXRyZWwuc3ViLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCi0KLSAgICAgICAgaW1wb3J0IHN1YgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yi5nZXRfbmFtZSgpLCAic3ViIikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLm9sZGFicwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5vbGRhYnMuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm9sZGFicyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm9sZGFicy5zdWIsIHN1YikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLm5ld2FicwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdhYnMuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld2FicyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld2Ficy5zdWIsIHN1YikKLQotICAgIGRlZiB0ZXN0TWV0YVBhdGgoc2VsZik6Ci0gICAgICAgIGkgPSBNZXRhSW1wb3J0ZXIoKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChpKQotICAgICAgICBzZWxmLmRvVGVzdEltcG9ydHMoaSkKLQotICAgIGRlZiB0ZXN0UGF0aEhvb2soc2VsZik6Ci0gICAgICAgIHN5cy5wYXRoX2hvb2tzLmluc2VydCgwLCBQYXRoSW1wb3J0ZXIpCi0gICAgICAgIHN5cy5wYXRoLmFwcGVuZCh0ZXN0X3BhdGgpCi0gICAgICAgIHNlbGYuZG9UZXN0SW1wb3J0cygpCi0KLSAgICBkZWYgdGVzdEJsb2NrZXIoc2VsZik6Ci0gICAgICAgIG1uYW1lID0gImV4Y2VwdGlvbnMiICAjIGFuIGFyYml0cmFyeSBoYXJtbGVzcyBidWlsdGluIG1vZHVsZQotICAgICAgICBzdXBwb3J0LnVubG9hZChtbmFtZSkKLSAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoSW1wb3J0QmxvY2tlcihtbmFtZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBfX2ltcG9ydF9fLCBtbmFtZSkKLQotICAgIGRlZiB0ZXN0SW1wV3JhcHBlcihzZWxmKToKLSAgICAgICAgaSA9IEltcFdyYXBwZXIoKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChpKQotICAgICAgICBzeXMucGF0aF9ob29rcy5pbnNlcnQoMCwgSW1wV3JhcHBlcikKLSAgICAgICAgbW5hbWVzID0gKAotICAgICAgICAgICAgImNvbG9yc3lzIiwgInVybGxpYi5wYXJzZSIsICJkaXN0dXRpbHMuY29yZSIsICJzeXMiLAotICAgICAgICApCi0gICAgICAgIGZvciBtbmFtZSBpbiBtbmFtZXM6Ci0gICAgICAgICAgICBwYXJlbnQgPSBtbmFtZS5zcGxpdCgiLiIpWzBdCi0gICAgICAgICAgICBmb3IgbiBpbiBsaXN0KHN5cy5tb2R1bGVzKToKLSAgICAgICAgICAgICAgICBpZiBuLnN0YXJ0c3dpdGgocGFyZW50KToKLSAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25dCi0gICAgICAgIGZvciBtbmFtZSBpbiBtbmFtZXM6Ci0gICAgICAgICAgICBtID0gX19pbXBvcnRfXyhtbmFtZSwgZ2xvYmFscygpLCBsb2NhbHMoKSwgWyJfX2R1bW15X18iXSkKLSAgICAgICAgICAgICMgdG8gbWFrZSBzdXJlIHdlIGFjdHVhbGx5IGhhbmRsZWQgdGhlIGltcG9ydAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobSwgIl9fbG9hZGVyX18iKSkKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoSW1wb3J0SG9va3NUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX21haW5fXy5weQppbmRleCBjMzk3MTI4Li4xNGJkNWJjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX21haW5fXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX21haW5fXy5weQpAQCAtNCwxNyArNCw2IEBACiBidWlsdGlucy5fX2ltcG9ydF9fIGluc3RlYWQgb2YgaW1wb3J0bGliLl9faW1wb3J0X18uCiAKICIiIgotZnJvbSAuIGltcG9ydCB0ZXN0X21haW4KLQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBhcmdwYXJzZQotCi0gICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J0V4ZWN1dGUgdGhlIGltcG9ydGxpYiB0ZXN0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1aXRlJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1aWx0aW4nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndXNlIGJ1aWx0aW5zLl9faW1wb3J0X18oKSBpbnN0ZWFkIG9mIGltcG9ydGxpYicpCi0gICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBpZiBhcmdzLmJ1aWx0aW46Ci0gICAgICAgIHV0aWwudXNpbmdfX19pbXBvcnRfXyA9IFRydWUKKyAgICBmcm9tIC4gaW1wb3J0IHRlc3RfbWFpbgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9hYmMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9hYmMucHkKaW5kZXggMmMxN2FjMy4uMjA3MGRhZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYWJjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weQpAQCAtMiw3ICsyLDcgQEAKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIEZpbmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorY2xhc3MgRmluZGVyVGVzdHMobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKIAogICAgICIiIkJhc2ljIHRlc3RzIGZvciBhIGZpbmRlciB0byBwYXNzLiIiIgogCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBhc3MKIAogCi1jbGFzcyBMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSwgbWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKK2NsYXNzIExvYWRlclRlc3RzKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgpAQCAtODEsMTEgKzgxLDYgQEAKICAgICAgICAgcGFzcwogCiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKLSAgICAgICAgIiIiSWYgYSBtb2R1bGUgaXMgYWxyZWFkeSBpbiBzeXMubW9kdWxlcywgaXQgc2hvdWxkIGJlIHJldXNlZC4iIiIKLSAgICAgICAgcGFzcwotCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiB0ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUoc2VsZik6CiAgICAgICAgICIiIklmIGEgbW9kdWxlIGlzIGFscmVhZHkgaW4gc3lzLm1vZHVsZXMgYW5kIGEgcmVsb2FkIGZhaWxzCiAgICAgICAgIChlLmcuIGEgU3ludGF4RXJyb3IpLCB0aGUgbW9kdWxlIHNob3VsZCBiZSBpbiB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkKaW5kZXggZGEwZWYyOC4uOTM0NTYyZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDExICsxLDUzIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBidWlsdGluX3V0aWwKIAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCisKK2NsYXNzIEZpbmRTcGVjVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKKworICAgICIiIlRlc3QgZmluZF9zcGVjKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCisKKyAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgQ29tbW9uIGNhc2UuCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQub3JpZ2luLCAnYnVpbHQtaW4nKQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCisgICAgdGVzdF9wYWNrYWdlID0gTm9uZQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vYnQgYmUgaW4gYSBwYWNrYWdlLgorICAgIHRlc3RfbW9kdWxlX2luX3BhY2thZ2UgPSBOb25lCisKKyAgICAjIEJ1aWx0LWluIG1vZHVsZXMgY2Fubm90IGJlIGEgcGFja2FnZS4KKyAgICB0ZXN0X3BhY2thZ2VfaW5fcGFja2FnZSA9IE5vbmUKKworICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub3QgYmUgYSBwYWNrYWdlLgorICAgIHRlc3RfcGFja2FnZV9vdmVyX21vZHVsZSA9IE5vbmUKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnaW1wb3J0bGliJworICAgICAgICBhc3NlcnQgbmFtZSBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9zcGVjKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwZWMpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfcGF0aChzZWxmKToKKyAgICAgICAgIyBUaGUgdmFsdWUgZm9yICdwYXRoJyBzaG91bGQgYWx3YXlzIHRyaWdnZXIgYSBmYWlsZWQgaW1wb3J0LgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6CisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhidWlsdGluX3V0aWwuTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsncGtnJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcGVjKQorCitGcm96ZW5fRmluZFNwZWNUZXN0cywgU291cmNlX0ZpbmRTcGVjVGVzdHMgPSB1dGlsLnRlc3RfYm90aChGaW5kU3BlY1Rlc3RzLAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQorCisKIGNsYXNzIEZpbmRlclRlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CiAKICAgICAiIiJUZXN0IGZpbmRfbW9kdWxlKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCkBAIC0xMyw4ICs1NSw5IEBACiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbW1vbiBjYXNlLgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6Ci0gICAgICAgICAgICBmb3VuZCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGZvdW5kLCAnbG9hZF9tb2R1bGUnKSkKIAogICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub3QgYmUgYSBwYWNrYWdlLgogICAgIHRlc3RfcGFja2FnZSA9IHRlc3RfcGFja2FnZV9pbl9wYWNrYWdlID0gdGVzdF9wYWNrYWdlX292ZXJfbW9kdWxlID0gTm9uZQpAQCAtMjQsMjIgKzY3LDE5IEBACiAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICBhc3NlcnQgJ2ltcG9ydGxpYicgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lcwotICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdpbXBvcnRsaWInKQorICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ2ltcG9ydGxpYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvYWRlcikKIAogICAgIGRlZiB0ZXN0X2lnbm9yZV9wYXRoKHNlbGYpOgogICAgICAgICAjIFRoZSB2YWx1ZSBmb3IgJ3BhdGgnIHNob3VsZCBhbHdheXMgdHJpZ2dlciBhIGZhaWxlZCBpbXBvcnQuCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3BrZyddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQogCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCitGcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRlclRlc3RzLAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CmluZGV4IDEyYTc5YzYuLmE2MzZmNzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weQpAQCAtMSw5ICsxLDkgQEAKLWltcG9ydCBpbXBvcnRsaWIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGJ1aWx0aW5fdXRpbAogCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEzLDggKzEzLDkgQEAKIAogICAgICIiIlRlc3QgbG9hZF9tb2R1bGUoKSBmb3IgYnVpbHQtaW4gbW9kdWxlcy4iIiIKIAotICAgIHZlcmlmaWNhdGlvbiA9IHsnX19uYW1lX18nOiAnZXJybm8nLCAnX19wYWNrYWdlX18nOiAnJywKLSAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyfQorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi52ZXJpZmljYXRpb24gPSB7J19fbmFtZV9fJzogJ2Vycm5vJywgJ19fcGFja2FnZV9fJzogJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyfQogCiAgICAgZGVmIHZlcmlmeShzZWxmLCBtb2R1bGUpOgogICAgICAgICAiIiJWZXJpZnkgdGhhdCB0aGUgbW9kdWxlIG1hdGNoZXMgYWdhaW5zdCB3aGF0IGl0IHNob3VsZCBoYXZlLiIiIgpAQCAtMjMsOCArMjQsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgYXR0ciksIHZhbHVlKQogICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZS5fX25hbWVfXywgc3lzLm1vZHVsZXMpCiAKLSAgICBsb2FkX21vZHVsZSA9IHN0YXRpY21ldGhvZChsYW1iZGEgbmFtZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZShuYW1lKSkKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUobmFtZSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgIyBDb21tb24gY2FzZS4KQEAgLTU1LDQ1ICs1Niw1MSBAQAogICAgIGRlZiB0ZXN0X2FscmVhZHlfaW1wb3J0ZWQoc2VsZik6CiAgICAgICAgICMgVXNpbmcgdGhlIG5hbWUgb2YgYSBtb2R1bGUgYWxyZWFkeSBpbXBvcnRlZCBidXQgbm90IGEgYnVpbHQtaW4gc2hvdWxkCiAgICAgICAgICMgc3RpbGwgZmFpbC4KLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoaW1wb3J0bGliLCAnX19maWxlX18nKSAgIyBOb3QgYSBidWlsdC1pbi4KKyAgICAgICAgbW9kdWxlX25hbWUgPSAnYnVpbHRpbl9yZWxvYWRfdGVzdCcKKyAgICAgICAgYXNzZXJ0IG1vZHVsZV9uYW1lIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobW9kdWxlX25hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXSA9IG1vZHVsZQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHNlbGYubG9hZF9tb2R1bGUoJ2ltcG9ydGxpYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdpbXBvcnRsaWInKQorICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbW9kdWxlX25hbWUpCiAKIAotY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK0Zyb3plbl9Mb2FkZXJUZXN0cywgU291cmNlX0xvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCisKKworY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIEluc3BlY3RMb2FkZXIgbWV0aG9kcyBmb3IgQnVpbHRpbkltcG9ydGVyLiIiIgogCiAgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CiAgICAgICAgICMgVGhlcmUgaXMgbm8gY29kZSBvYmplY3QuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X2NvZGUoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5nZXRfY29kZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0KQogCiAgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKICAgICAgICAgIyBUaGVyZSBpcyBubyBzb3VyY2UuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X3NvdXJjZShidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9zb3VyY2UoYnVpbHRpbl91dGlsLk5BTUUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgQ2Fubm90IGJlIGEgcGFja2FnZS4KLSAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5pc19wYWNrYWdlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICByZXN1bHQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuaXNfcGFja2FnZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9ub3RfYnVpbHRpbihzZWxmKToKICAgICAgICAgIyBNb2R1bGVzIG5vdCBidWlsdC1pbiBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IuCiAgICAgICAgIGZvciBtZXRoX25hbWUgaW4gKCdnZXRfY29kZScsICdnZXRfc291cmNlJywgJ2lzX3BhY2thZ2UnKToKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIobWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWV0aF9uYW1lKQorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1ldGhfbmFtZSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CiAgICAgICAgICAgICBtZXRob2QoYnVpbHRpbl91dGlsLkJBRF9OQU1FKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhidWlsdGluX3V0aWwuQkFEX05BTUUpCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChMb2FkZXJUZXN0cywgSW5zcGVjdExvYWRlclRlc3RzKQorRnJvemVuX0luc3BlY3RMb2FkZXJUZXN0cywgU291cmNlX0luc3BlY3RMb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBJbnNwZWN0TG9hZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKaW5kZXggNzZjNTNlNC4uYmIyNTI4ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CkBAIC0xLDIyICsxLDI3IEBACi1pbXBvcnQgaW1wCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCisKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBleHRfdXRpbAogCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKIAorCisjIFhYWCBmaW5kX3NwZWMgdGVzdHMKKworQHVuaXR0ZXN0LnNraXBJZihleHRfdXRpbC5GSUxFTkFNRSBpcyBOb25lLCAnX3Rlc3RjYXBpIG5vdCBhdmFpbGFibGUnKQogQHV0aWwuY2FzZV9pbnNlbnNpdGl2ZV90ZXN0cwotY2xhc3MgRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0OgogCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYpOgogICAgICAgICBnb29kX25hbWUgPSBleHRfdXRpbC5OQU1FCiAgICAgICAgIGJhZF9uYW1lID0gZ29vZF9uYW1lLnVwcGVyKCkKICAgICAgICAgYXNzZXJ0IGdvb2RfbmFtZSAhPSBiYWRfbmFtZQotICAgICAgICBmaW5kZXIgPSBfYm9vdHN0cmFwLkZpbGVGaW5kZXIoZXh0X3V0aWwuUEFUSCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2Jvb3RzdHJhcC5FeHRlbnNpb25GaWxlTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYm9vdHN0cmFwLkVYVEVOU0lPTl9TVUZGSVhFUykpCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIoZXh0X3V0aWwuUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpCiAgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUoYmFkX25hbWUpCiAKICAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2ZShzZWxmKToKQEAgLTM3LDE0ICs0MiwxMCBAQAogICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5maW5kX21vZHVsZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihsb2FkZXIsICdsb2FkX21vZHVsZScpKQogCi0KLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgaWYgZXh0X3V0aWwuRklMRU5BTUUgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCkKK0Zyb3plbl9FeHRlbnNpb25DYXNlU2Vuc2l0aXZpdHksIFNvdXJjZV9FeHRlbnNpb25DYXNlU2Vuc2l0aXZpdHkgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCwKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkKaW5kZXggMzdmNjc3Mi4uOTkwZjI5YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfZmluZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weQpAQCAtMSwxOCArMSwyNSBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuLiBpbXBvcnQgYWJjCitmcm9tIC4uIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsCiAKK21hY2hpbmVyeSA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKKworIyBYWFggZmluZF9zcGVjIHRlc3RzCiAKIGNsYXNzIEZpbmRlclRlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CiAKICAgICAiIiJUZXN0IHRoZSBmaW5kZXIgZm9yIGV4dGVuc2lvbiBtb2R1bGVzLiIiIgogCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgaW1wb3J0ZXIgPSBtYWNoaW5lcnkuRmlsZUZpbmRlcih1dGlsLlBBVEgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkKLSAgICAgICAgcmV0dXJuIGltcG9ydGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQorICAgICAgICBpbXBvcnRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIodXRpbC5QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgcmV0dXJuIGltcG9ydGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX21vZHVsZSh1dGlsLk5BTUUpKQpAQCAtMjksMTEgKzM2LDkgQEAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmZpbmRfbW9kdWxlKCdhc2RmamtsOycpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkKaW5kZXggZTc5MDY3NS4uZmQ5YWJmMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weQpAQCAtMSwxMCArMSwxMiBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGV4dF91dGlsCiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIAorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKIApAQCAtMTMsOCArMTUsOCBAQAogICAgICIiIlRlc3QgbG9hZF9tb2R1bGUoKSBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYubG9hZGVyID0gbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCisgICAgICAgIHNlbGYubG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcihleHRfdXRpbC5OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCiAKICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICByZXR1cm4gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoZnVsbG5hbWUpCkBAIC0yNiw2ICsyOCwxNSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKICAgICAgICAgICAgIHNlbGYubG9hZF9tb2R1bGUoJ1hYWCcpCiAKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dF91dGlsLk5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfdXRpbC5GSUxFUEFUSCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlciwgb3RoZXIpCisKKyAgICBkZWYgdGVzdF9pbmVxdWFsaXR5KHNlbGYpOgorICAgICAgICBvdGhlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoJ18nICsgZXh0X3V0aWwuTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRIKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYubG9hZGVyLCBvdGhlcikKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoZXh0X3V0aWwuTkFNRSk6CkBAIC0zNiw3ICs0Nyw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgYXR0ciksIHZhbHVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleHRfdXRpbC5OQU1FLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R1bGUuX19sb2FkZXJfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKQogCiAgICAgIyBObyBleHRlbnNpb24gbW9kdWxlIGFzIF9faW5pdF9fIGF2YWlsYWJsZSBmb3IgdGVzdGluZy4KICAgICB0ZXN0X3BhY2thZ2UgPSBOb25lCkBAIC02MSwxNiArNzIsMTUgQEAKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShleHRfdXRpbC5OQU1FKSkKLSAgICAgICAgZm9yIHN1ZmZpeCBpbiBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTOgorICAgICAgICBmb3Igc3VmZml4IGluIHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUzoKICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3NvbWUnLCAncGF0aCcsICdwa2cnLCAnX19pbml0X18nICsgc3VmZml4KQotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoJ3BrZycsIHBhdGgpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKCdwa2cnLCBwYXRoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvYWRlci5pc19wYWNrYWdlKCdwa2cnKSkKIAorRnJvemVuX0xvYWRlclRlc3RzLCBTb3VyY2VfTG9hZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTG9hZGVyVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KExvYWRlclRlc3RzKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weQppbmRleCAxZDk2OWExLi40OWQ2NzM0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9wYXRoX2hvb2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5CkBAIC0xLDMyICsxLDMyIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Citmcm9tIC4uIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsCiAKK21hY2hpbmVyeSA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgaW1wCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBQYXRoSG9va1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFBhdGhIb29rVGVzdHM6CiAKICAgICAiIiJUZXN0IHRoZSBwYXRoIGhvb2sgZm9yIGV4dGVuc2lvbiBtb2R1bGVzLiIiIgogICAgICMgWFhYIFNob3VsZCBpdCBvbmx5IHN1Y2NlZWQgZm9yIHByZS1leGlzdGluZyBkaXJlY3Rvcmllcz8KICAgICAjIFhYWCBTaG91bGQgaXQgb25seSB3b3JrIGZvciBkaXJlY3RvcmllcyBjb250YWluaW5nIGFuIGV4dGVuc2lvbiBtb2R1bGU/CiAKICAgICBkZWYgaG9vayhzZWxmLCBlbnRyeSk6Ci0gICAgICAgIHJldHVybiBtYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soKG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpKGVudHJ5KQorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soCisgICAgICAgICAgICAgICAgKHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpKGVudHJ5KQogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgIyBQYXRoIGhvb2sgc2hvdWxkIGhhbmRsZSBhIGRpcmVjdG9yeSB3aGVyZSBhIGtub3duIGV4dGVuc2lvbiBtb2R1bGUKICAgICAgICAgIyBleGlzdHMuCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYuaG9vayh1dGlsLlBBVEgpLCAnZmluZF9tb2R1bGUnKSkKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChQYXRoSG9va1Rlc3RzKQorRnJvemVuX1BhdGhIb29rc1Rlc3RzLCBTb3VyY2VfUGF0aEhvb2tzVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBQYXRoSG9va1Rlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkKaW5kZXggYTI2NmRkOS4uOGQwODlmMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkKQEAgLTEsNCArMSwzIEBACi1pbXBvcnQgaW1wCiBmcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weQppbmRleCBmMGFiZTBlLi5mOWY5N2YzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDE1ICsxLDUyIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKK2Zyb20gLi4gaW1wb3J0IHV0aWwKKworbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKIAogaW1wb3J0IHVuaXR0ZXN0CiAKIAorY2xhc3MgRmluZFNwZWNUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgorCisgICAgIiIiVGVzdCBmaW5kaW5nIGZyb3plbiBtb2R1bGVzLiIiIgorCisgICAgZGVmIGZpbmQoc2VsZiwgbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIKKyAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX3NwZWMobmFtZSwgcGF0aCkKKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX2hlbGxvX18nCisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmQobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgJ2Zyb3plbicpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5maW5kKCdfX3BoZWxsb19fJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc3BlYykKKworICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5maW5kKCdfX3BoZWxsb19fLnNwYW0nLCBbJ19fcGhlbGxvX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc3BlYykKKworICAgICMgTm8gZnJvemVuIHBhY2thZ2Ugd2l0aGluIGFub3RoZXIgcGFja2FnZSB0byB0ZXN0IHdpdGguCisgICAgdGVzdF9wYWNrYWdlX2luX3BhY2thZ2UgPSBOb25lCisKKyAgICAjIE5vIGVhc3kgd2F5IHRvIHRlc3QuCisgICAgdGVzdF9wYWNrYWdlX292ZXJfbW9kdWxlID0gTm9uZQorCisgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYuZmluZCgnPG5vdCByZWFsPicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwZWMpCisKK0Zyb3plbl9GaW5kU3BlY1Rlc3RzLCBTb3VyY2VfRmluZFNwZWNUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRTcGVjVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCisKIGNsYXNzIEZpbmRlclRlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CiAKICAgICAiIiJUZXN0IGZpbmRpbmcgZnJvemVuIG1vZHVsZXMuIiIiCiAKICAgICBkZWYgZmluZChzZWxmLCBuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICBmaW5kZXIgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIKICAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShuYW1lLCBwYXRoKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgpAQCAtMzUsMTEgKzcyLDkgQEAKICAgICAgICAgbG9hZGVyID0gc2VsZi5maW5kKCc8bm90IHJlYWw+JykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aChGaW5kZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkKaW5kZXggZjNhOGJmNi4uN2MwMTQ2NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weQpAQCAtMSwxOCArMSwxMDQgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKLWltcG9ydCBpbXAKLWltcG9ydCB1bml0dGVzdAogZnJvbSAuLiBpbXBvcnQgYWJjCiBmcm9tIC4uIGltcG9ydCB1dGlsCisKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKKworaW1wb3J0IHN5cwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dAoraW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncworCisKK2NsYXNzIEV4ZWNNb2R1bGVUZXN0cyhhYmMuTG9hZGVyVGVzdHMpOgorCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG5hbWUpOgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoCisgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBvcmlnaW49J2Zyb3plbicsCisgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9c2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuaXNfcGFja2FnZShuYW1lKSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgICAgIGFzc2VydCBub3QgaGFzYXR0cihtb2R1bGUsICdpbml0aWFsaXplZCcpCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobW9kdWxlLmluaXRpYWxpemVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnX19zcGVjX18nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fc3BlY19fLm9yaWdpbiwgJ2Zyb3plbicpCisgICAgICAgICAgICByZXR1cm4gbW9kdWxlLCBzdGRvdXQuZ2V0dmFsdWUoKQorCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKKyAgICAgICAgbW9kdWxlLCBvdXRwdXQgPSBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6IG5hbWV9CisgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBjaGVjay5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgYXR0ciksIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgJ0hlbGxvIHdvcmxkIVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnX19zcGVjX18nKSkKKworICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIG5hbWUgPSAnX19waGVsbG9fXycKKyAgICAgICAgbW9kdWxlLCBvdXRwdXQgPSBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6IG5hbWV9CisgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBjaGVjay5pdGVtcygpOgorICAgICAgICAgICAgYXR0cl92YWx1ZSA9IGdldGF0dHIobW9kdWxlLCBhdHRyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyX3ZhbHVlLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdmb3Ige25hbWV9LnthdHRyfSwge2dpdmVuIXJ9ICE9IHtleHBlY3RlZCFyfScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lLCBhdHRyPWF0dHIsIGdpdmVuPWF0dHJfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD12YWx1ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnSGVsbG8gd29ybGQhXG4nKQorCisgICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6CisgICAgICAgIG5hbWUgPSAnX19waGVsbG9fXy5zcGFtJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19waGVsbG9fXycpOgorICAgICAgICAgICAgbW9kdWxlLCBvdXRwdXQgPSBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiBuYW1lfQorICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgYXR0cl92YWx1ZSA9IGdldGF0dHIobW9kdWxlLCBhdHRyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cl92YWx1ZSwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAnZm9yIHtuYW1lfS57YXR0cn0sIHtnaXZlbn0gIT0ge2V4cGVjdGVkIXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUsIGF0dHI9YXR0ciwgZ2l2ZW49YXR0cl92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPXZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnSGVsbG8gd29ybGQhXG4nKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHIoc2VsZik6CisgICAgICAgIG5hbWUgPSAnX19oZWxsb19fJworICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXByX3N0ciA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLm1vZHVsZV9yZXByKG1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPG1vZHVsZSAnX19oZWxsb19fJyAoZnJvemVuKT4iKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfaW5kaXJlY3Qoc2VsZik6CisgICAgICAgIG5hbWUgPSAnX19oZWxsb19fJworICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG1vZHVsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIjxtb2R1bGUgJ19faGVsbG9fXycgKGZyb3plbik+IikKKworICAgICMgTm8gd2F5IHRvIHRyaWdnZXIgYW4gZXJyb3IgaW4gYSBmcm96ZW4gbW9kdWxlLgorICAgIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZSA9IE5vbmUKKworICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZSgnX25vdF9yZWFsJykgaXMgTm9uZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuZXhlY19tb2R1bGUoJ19ub3RfcmVhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdfbm90X3JlYWwnKQorCitGcm96ZW5fRXhlY01vZHVsZVRlc3RzLCBTb3VyY2VfRXhlY01vZHVsZVRlc3RzID0gdXRpbC50ZXN0X2JvdGgoRXhlY01vZHVsZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCiAKIGNsYXNzIExvYWRlclRlc3RzKGFiYy5Mb2FkZXJUZXN0cyk6CiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX2hlbGxvX18nKSwgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQogICAgICAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogJ19faGVsbG9fXycsCiAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6ICcnLAotICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgYXR0ciksIHZhbHVlKQpAQCAtMjEsMTEgKzEwNywxMyBAQAogCiAgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ19fcGhlbGxvX18nKSwgIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIG1vZHVsZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19waGVsbG9fXycpCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19fcGhlbGxvX18nKQogICAgICAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogJ19fcGhlbGxvX18nLAogICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJ19fcGhlbGxvX18nLAotICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogWydfX3BoZWxsb19fJ10sCi0gICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFtdLAorICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBjaGVjay5pdGVtcygpOgogICAgICAgICAgICAgICAgIGF0dHJfdmFsdWUgPSBnZXRhdHRyKG1vZHVsZSwgYXR0cikKQEAgLTM4LDEwICsxMjYsMTIgQEAKICAgICBkZWYgdGVzdF9sYWNraW5nX3BhcmVudChzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ19fcGhlbGxvX18nLCAnX19waGVsbG9fXy5zcGFtJyksIFwKICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19fcGhlbGxvX18uc3BhbScpCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19fcGhlbGxvX18uc3BhbScpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX19waGVsbG9fXy5zcGFtJywKICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJ19fcGhlbGxvX18nLAotICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKKyAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgYXR0cl92YWx1ZSA9IGdldGF0dHIobW9kdWxlLCBhdHRyKQpAQCAtNTMsMjkgKzE0Myw0MyBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19oZWxsb19fJyksIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIG1vZHVsZTEgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCi0gICAgICAgICAgICBtb2R1bGUyID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZTEgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKKyAgICAgICAgICAgICAgICBtb2R1bGUyID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZTEsIG1vZHVsZTIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSGVsbG8gd29ybGQhXG5IZWxsbyB3b3JsZCFcbicpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcihzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ19faGVsbG9fXycpLCBjYXB0dXJlZF9zdGRvdXQoKToKLSAgICAgICAgICAgIG1vZHVsZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtb2R1bGUpLAorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQorICAgICAgICAgICAgICAgIHJlcHJfc3RyID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubW9kdWxlX3JlcHIobW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxtb2R1bGUgJ19faGVsbG9fXycgKGZyb3plbik+IikKIAorICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX2luZGlyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19oZWxsb19fJyksIGNhcHR1cmVkX3N0ZG91dCgpOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtb2R1bGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8bW9kdWxlICdfX2hlbGxvX18nIChmcm96ZW4pPiIpCisKICAgICAjIE5vIHdheSB0byB0cmlnZ2VyIGFuIGVycm9yIGluIGEgZnJvemVuIG1vZHVsZS4KICAgICB0ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUgPSBOb25lCiAKICAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgotICAgICAgICBhc3NlcnQgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdfbm90X3JlYWwnKSBpcyBOb25lCisgICAgICAgIGFzc2VydCBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZSgnX25vdF9yZWFsJykgaXMgTm9uZQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX25vdF9yZWFsJykKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfbm90X3JlYWwnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnX25vdF9yZWFsJykKIAorRnJvemVuX0xvYWRlclRlc3RzLCBTb3VyY2VfTG9hZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aChMb2FkZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIHRoZSBJbnNwZWN0TG9hZGVyIG1ldGhvZHMgZm9yIEZyb3plbkltcG9ydGVyLiIiIgogCkBAIC04MywxNSArMTg3LDE1IEBACiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIGNvZGUgb2JqZWN0IGlzIGdvb2QuCiAgICAgICAgIG5hbWUgPSAnX19oZWxsb19fJwogICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIGNvZGUgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZ2V0X2NvZGUobmFtZSkKLSAgICAgICAgICAgIG1vZCA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBjb2RlID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZ2V0X2NvZGUobmFtZSkKKyAgICAgICAgICAgIG1vZCA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIGV4ZWMoY29kZSwgbW9kLl9fZGljdF9fKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kLCAnaW5pdGlhbGl6ZWQnKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdIZWxsbyB3b3JsZCFcbicpCiAKICAgICBkZWYgdGVzdF9nZXRfc291cmNlKHNlbGYpOgogICAgICAgICAjIFNob3VsZCBhbHdheXMgcmV0dXJuIE5vbmUuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5nZXRfc291cmNlKCdfX2hlbGxvX18nKQorICAgICAgICByZXN1bHQgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5nZXRfc291cmNlKCdfX2hlbGxvX18nKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXN1bHQpCiAKICAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgpAQCAtOTksMjIgKzIwMywyMCBAQAogICAgICAgICB0ZXN0X2ZvciA9ICgoJ19faGVsbG9fXycsIEZhbHNlKSwgKCdfX3BoZWxsb19fJywgVHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICgnX19waGVsbG9fXy5zcGFtJywgRmFsc2UpKQogICAgICAgICBmb3IgbmFtZSwgaXNfcGFja2FnZSBpbiB0ZXN0X2ZvcjoKLSAgICAgICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5pc19wYWNrYWdlKG5hbWUpCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5pc19wYWNrYWdlKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvb2wocmVzdWx0KSwgaXNfcGFja2FnZSkKIAogICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CiAgICAgICAgICMgUmFpc2UgSW1wb3J0RXJyb3IgZm9yIG1vZHVsZXMgdGhhdCBhcmUgbm90IGZyb3plbi4KICAgICAgICAgZm9yIG1ldGhfbmFtZSBpbiAoJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnLCAnaXNfcGFja2FnZScpOgotICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsIG1ldGhfbmFtZSkKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsIG1ldGhfbmFtZSkKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgICAgIG1ldGhvZCgnaW1wb3J0bGliJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdpbXBvcnRsaWInKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KExvYWRlclRlc3RzLCBJbnNwZWN0TG9hZGVyVGVzdHMpCitGcm96ZW5fSUxUZXN0cywgU291cmNlX0lMVGVzdHMgPSB1dGlsLnRlc3RfYm90aChJbnNwZWN0TG9hZGVyVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fbG9hZGVyX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmODAxMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5CkBAIC0wLDAgKzEsNzAgQEAKK2Zyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2ltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gLi4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAorCisKK2NsYXNzIFNwZWNMb2FkZXJNb2NrOgorCisgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBtYWNoaW5lcnkuTW9kdWxlU3BlYyhmdWxsbmFtZSwgc2VsZikKKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgU3BlY0xvYWRlckF0dHJpYnV0ZVRlc3RzOgorCisgICAgZGVmIHRlc3RfX19sb2FkZXJfXyhzZWxmKToKKyAgICAgICAgbG9hZGVyID0gU3BlY0xvYWRlck1vY2soKQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnYmxhaCcpLCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2xvYWRlcl0pOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIG1vZHVsZS5fX2xvYWRlcl9fKQorCitGcm96ZW5fU3BlY1Rlc3RzLCBTb3VyY2VfU3BlY1Rlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNwZWNMb2FkZXJBdHRyaWJ1dGVUZXN0cywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisKK2NsYXNzIExvYWRlck1vY2s6CisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICBzeXMubW9kdWxlc1tmdWxsbmFtZV0gPSBzZWxmLm1vZHVsZQorICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworCitjbGFzcyBMb2FkZXJBdHRyaWJ1dGVUZXN0czoKKworICAgIGRlZiB0ZXN0X19fbG9hZGVyX19fbWlzc2luZyhzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGxvYWRlciA9IExvYWRlck1vY2soKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gbW9kdWxlCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdibGFoJyksIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbG9hZGVyXSk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbW9kdWxlLl9fbG9hZGVyX18pCisKKyAgICBkZWYgdGVzdF9fX2xvYWRlcl9fX2lzX05vbmUoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IE5vbmUKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyTW9jaygpCisgICAgICAgIGxvYWRlci5tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ2JsYWgnKSwgdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtsb2FkZXJdKToKKyAgICAgICAgICAgIHJldHVybmVkX21vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBtb2R1bGUuX19sb2FkZXJfXykKKworCitGcm96ZW5fVGVzdHMsIFNvdXJjZV9UZXN0cyA9IHV0aWwudGVzdF9ib3RoKExvYWRlckF0dHJpYnV0ZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX3BhY2thZ2VfXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX3BhY2thZ2VfXy5weQppbmRleCA3ODNjZGUxLi4yZTE5NzI1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fcGFja2FnZV9fLnB5CkBAIC05LDcgKzksNyBAQAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCiAKIAotY2xhc3MgVXNpbmdfX3BhY2thZ2VfXyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBVc2luZ19fcGFja2FnZV9fOgogCiAgICAgIiIiVXNlIG9mIF9fcGFja2FnZV9fIHN1cGVyY2VkZXMgdGhlIHVzZSBvZiBfX25hbWVfXy9fX3BhdGhfXyB0byBjYWxjdWxhdGUKICAgICB3aGF0IHBhY2thZ2UgYSBtb2R1bGUgYmVsb25ncyB0by4gVGhlIGJhc2ljIGFsZ29yaXRobSBpcyBbX19wYWNrYWdlX19dOjoKQEAgLTM2LDEwICszNiwxMCBAQAogCiAgICAgZGVmIHRlc3RfdXNpbmdfX19wYWNrYWdlX18oc2VsZik6CiAgICAgICAgICMgW19fcGFja2FnZV9fXQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLmZha2UnKSBhcyBpbXBvcnRlcjoKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5mYWtlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cuZmFrZScpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5mYWtlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbHM9eydfX3BhY2thZ2VfXyc6ICdwa2cuZmFrZSd9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQpAQCAtNDksMTAgKzQ5LDEwIEBACiAgICAgICAgIGdsb2JhbHNfID0geydfX25hbWVfXyc6ICdwa2cuZmFrZScsICdfX3BhdGhfXyc6IFtdfQogICAgICAgICBpZiBwYWNrYWdlX2FzX05vbmU6CiAgICAgICAgICAgICBnbG9iYWxzX1snX19wYWNrYWdlX18nXSA9IE5vbmUKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5mYWtlJykgYXMgaW1wb3J0ZXI6CisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cuZmFrZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLmZha2UnKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbHM9IGdsb2JhbHNfLAorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLmZha2UnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFscz0gZ2xvYmFsc18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9MikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKIApAQCAtNjMsMTYgKzYzLDI3IEBACiAgICAgZGVmIHRlc3RfYmFkX19wYWNrYWdlX18oc2VsZik6CiAgICAgICAgIGdsb2JhbHMgPSB7J19fcGFja2FnZV9fJzogJzxub3QgcmVhbD4nfQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUVycm9yKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbHMsIHt9LCBbJ3JlbGltcG9ydCddLCAxKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxzLCB7fSwgWydyZWxpbXBvcnQnXSwgMSkKIAogICAgIGRlZiB0ZXN0X2J1bmtfX3BhY2thZ2VfXyhzZWxmKToKICAgICAgICAgZ2xvYmFscyA9IHsnX19wYWNrYWdlX18nOiA0Mn0KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbHMsIHt9LCBbJ3JlbGltcG9ydCddLCAxKQorCitjbGFzcyBVc2luZ19fcGFja2FnZV9fUEVQMzAyKFVzaW5nX19wYWNrYWdlX18pOgorICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19tb2R1bGVzCisKK0Zyb3plbl9Vc2luZ1BhY2thZ2VQRVAzMDIsIFNvdXJjZV9Vc2luZ1BhY2thZ2VQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgVXNpbmdfX3BhY2thZ2VfX1BFUDMwMiwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCitjbGFzcyBVc2luZ19fcGFja2FnZV9fUEVQMzAyKFVzaW5nX19wYWNrYWdlX18pOgorICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19zcGVjCisKK0Zyb3plbl9Vc2luZ1BhY2thZ2VQRVA0NTEsIFNvdXJjZV9Vc2luZ1BhY2thZ2VQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgVXNpbmdfX3BhY2thZ2VfX1BFUDMwMiwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKLUBpbXBvcnRfdXRpbC5pbXBvcnRsaWJfb25seQotY2xhc3MgU2V0dGluZ19fcGFja2FnZV9fKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFNldHRpbmdfX3BhY2thZ2VfXzoKIAogICAgICIiIkJlY2F1c2UgX19wYWNrYWdlX18gaXMgYSBuZXcgZmVhdHVyZSwgaXQgaXMgbm90IGFsd2F5cyBzZXQgYnkgYSBsb2FkZXIuCiAgICAgSW1wb3J0IHdpbGwgc2V0IGl0IGFzIG5lZWRlZCB0byBoZWxwIHdpdGggdGhlIHRyYW5zaXRpb24gdG8gcmVseWluZyBvbgpAQCAtODQsMzYgKzk1LDM5IEBACiAKICAgICAiIiIKIAorICAgIF9faW1wb3J0X18gPSBpbXBvcnRfdXRpbC5fX2ltcG9ydF9fWzFdCisKICAgICAjIFt0b3AtbGV2ZWxdCiAgICAgZGVmIHRlc3RfdG9wX2xldmVsKHNlbGYpOgotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnKSBhcyBtb2NrOgorICAgICAgICB3aXRoIHNlbGYubW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBkZWwgbW9ja1sndG9wX2xldmVsJ10uX19wYWNrYWdlX18KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygndG9wX2xldmVsJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgJycpCiAKICAgICAjIFtwYWNrYWdlXQogICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycpIGFzIG1vY2s6CisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIGRlbCBtb2NrWydwa2cnXS5fX3BhY2thZ2VfXwotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCAncGtnJykKIAogICAgICMgW3N1Ym1vZHVsZV0KICAgICBkZWYgdGVzdF9zdWJtb2R1bGUoc2VsZik6Ci0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kJykgYXMgbW9jazoKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2QnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBkZWwgbW9ja1sncGtnLm1vZCddLl9fcGFja2FnZV9fCi0gICAgICAgICAgICAgICAgcGtnID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZCcpCisgICAgICAgICAgICAgICAgcGtnID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kJykKICAgICAgICAgICAgICAgICBtb2R1bGUgPSBnZXRhdHRyKHBrZywgJ21vZCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sICdwa2cnKQogCitjbGFzcyBTZXR0aW5nX19wYWNrYWdlX19QRVAzMDIoU2V0dGluZ19fcGFja2FnZV9fLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9ja19tb2R1bGVzID0gdXRpbC5tb2NrX21vZHVsZXMKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoVXNpbmdfX3BhY2thZ2VfXywgU2V0dGluZ19fcGFja2FnZV9fKQorY2xhc3MgU2V0dGluZ19fcGFja2FnZV9fUEVQNDUxKFNldHRpbmdfX3BhY2thZ2VfXywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19zcGVjCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkKaW5kZXggM2Q0Y2Q5NC4uNDM5YzEwNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfYXBpLnB5CkBAIC0xLDIzICsxLDQxIEBACi1mcm9tIC4uIGltcG9ydCB1dGlsIGFzIGltcG9ydGxpYl90ZXN0X3V0aWwKLWZyb20gLiBpbXBvcnQgdXRpbAotaW1wb3J0IGltcAorZnJvbSAuLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCisKK2Zyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKK1BLR19OQU1FID0gJ2ZpbmUnCitTVUJNT0RfTkFNRSA9ICdmaW5lLmJvZ3VzJwogCi1jbGFzcyBCYWRMb2FkZXJGaW5kZXI6Ci0gICAgYmFkID0gJ2ZpbmUuYm9ndXMnCisKK2NsYXNzIEJhZFNwZWNGaW5kZXJMb2FkZXI6CiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGgpOgotICAgICAgICBpZiBmdWxsbmFtZSA9PSBjbHMuYmFkOgotICAgICAgICAgICAgcmV0dXJuIGNscwotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBsb2FkX21vZHVsZShjbHMsIGZ1bGxuYW1lKToKLSAgICAgICAgaWYgZnVsbG5hbWUgPT0gY2xzLmJhZDoKKyAgICBkZWYgZmluZF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICBpZiBmdWxsbmFtZSA9PSBTVUJNT0RfTkFNRToKKyAgICAgICAgICAgIHNwZWMgPSBtYWNoaW5lcnkuTW9kdWxlU3BlYyhmdWxsbmFtZSwgY2xzKQorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhlY19tb2R1bGUobW9kdWxlKToKKyAgICAgICAgaWYgbW9kdWxlLl9fbmFtZV9fID09IFNVQk1PRF9OQU1FOgogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ0kgY2Fubm90IGJlIGxvYWRlZCEnKQogCiAKLWNsYXNzIEFQSVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQmFkTG9hZGVyRmluZGVyOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoKToKKyAgICAgICAgaWYgZnVsbG5hbWUgPT0gU1VCTU9EX05BTUU6CisgICAgICAgICAgICByZXR1cm4gY2xzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbG9hZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSk6CisgICAgICAgIGlmIGZ1bGxuYW1lID09IFNVQk1PRF9OQU1FOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ0kgY2Fubm90IGJlIGxvYWRlZCEnKQorCisKK2NsYXNzIEFQSVRlc3Q6CiAKICAgICAiIiJUZXN0IEFQSS1zcGVjaWZpYyBkZXRhaWxzIGZvciBfX2ltcG9ydF9fIChlLmcuIHJhaXNpbmcgdGhlIHJpZ2h0CiAgICAgZXhjZXB0aW9uIHdoZW4gcGFzc2luZyBpbiBhbiBpbnQgZm9yIHRoZSBtb2R1bGUgbmFtZSkuIiIiCkBAIC0yNSw0MyArNDMsNTIgQEAKICAgICBkZWYgdGVzdF9uYW1lX3JlcXVpcmVzX3JwYXJpdGlvbihzZWxmKToKICAgICAgICAgIyBSYWlzZSBUeXBlRXJyb3IgaWYgYSBub24tc3RyaW5nIGlzIHBhc3NlZCBpbiBmb3IgdGhlIG1vZHVsZSBuYW1lLgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICB1dGlsLmltcG9ydF8oNDIpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oNDIpCiAKICAgICBkZWYgdGVzdF9uZWdhdGl2ZV9sZXZlbChzZWxmKToKICAgICAgICAgIyBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gYSBuZWdhdGl2ZSBsZXZlbCBpcyBzcGVjaWZpZWQuCiAgICAgICAgICMgUEVQIDMyOCBkaWQgYXdheSB3aXRoIHN5cy5tb2R1bGUgTm9uZSBlbnRyaWVzIGFuZCB0aGUgYW1iaWd1aXR5IG9mCiAgICAgICAgICMgYWJzb2x1dGUvcmVsYXRpdmUgaW1wb3J0cy4KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwuaW1wb3J0Xygnb3MnLCBnbG9iYWxzKCksIGxldmVsPS0xKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdvcycsIGdsb2JhbHMoKSwgbGV2ZWw9LTEpCiAKICAgICBkZWYgdGVzdF9ub25leGlzdGVudF9mcm9tbGlzdF9lbnRyeShzZWxmKToKICAgICAgICAgIyBJZiBzb21ldGhpbmcgaW4gZnJvbWxpc3QgZG9lc24ndCBleGlzdCwgdGhhdCdzIG9rYXkuCiAgICAgICAgICMgaXNzdWUxNTcxNQotICAgICAgICBtb2QgPSBpbXAubmV3X21vZHVsZSgnZmluZScpCisgICAgICAgIG1vZCA9IHR5cGVzLk1vZHVsZVR5cGUoUEtHX05BTUUpCiAgICAgICAgIG1vZC5fX3BhdGhfXyA9IFsnWFhYJ10KLSAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W0JhZExvYWRlckZpbmRlcl0pOgotICAgICAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLnVuY2FjaGUoJ2ZpbmUnKToKLSAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZmluZSddID0gbW9kCi0gICAgICAgICAgICAgICAgdXRpbC5pbXBvcnRfKCdmaW5lJywgZnJvbWxpc3Q9Wydub3QgaGVyZSddKQorICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5iYWRfZmluZGVyX2xvYWRlcl0pOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoUEtHX05BTUUpOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW1BLR19OQU1FXSA9IG1vZAorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhQS0dfTkFNRSwgZnJvbWxpc3Q9Wydub3QgaGVyZSddKQogCiAgICAgZGVmIHRlc3RfZnJvbWxpc3RfbG9hZF9lcnJvcl9wcm9wYWdhdGVzKHNlbGYpOgogICAgICAgICAjIElmIHNvbWV0aGluZyBpbiBmcm9tbGlzdCB0cmlnZ2VycyBhbiBleGNlcHRpb24gbm90IHJlbGF0ZWQgdG8gbm90CiAgICAgICAgICMgZXhpc3RpbmcsIGxldCB0aGF0IGV4Y2VwdGlvbiBwcm9wYWdhdGUuCiAgICAgICAgICMgaXNzdWUxNTMxNgotICAgICAgICBtb2QgPSBpbXAubmV3X21vZHVsZSgnZmluZScpCisgICAgICAgIG1vZCA9IHR5cGVzLk1vZHVsZVR5cGUoUEtHX05BTUUpCiAgICAgICAgIG1vZC5fX3BhdGhfXyA9IFsnWFhYJ10KLSAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W0JhZExvYWRlckZpbmRlcl0pOgotICAgICAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLnVuY2FjaGUoJ2ZpbmUnKToKLSAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZmluZSddID0gbW9kCisgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLmJhZF9maW5kZXJfbG9hZGVyXSk6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShQS0dfTkFNRSk6CisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbUEtHX05BTUVdID0gbW9kCiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIHV0aWwuaW1wb3J0XygnZmluZScsIGZyb21saXN0PVsnYm9ndXMnXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKFBLR19OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3Q9W1NVQk1PRF9OQU1FLnJwYXJ0aXRpb24oJy4nKVstMV1dKQogCiAKK2NsYXNzIE9sZEFQSVRlc3RzKEFQSVRlc3QpOgorICAgIGJhZF9maW5kZXJfbG9hZGVyID0gQmFkTG9hZGVyRmluZGVyCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEFQSVRlc3QpCitGcm96ZW5fT2xkQVBJVGVzdHMsIFNvdXJjZV9PbGRBUElUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBPbGRBUElUZXN0cywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisKK2NsYXNzIFNwZWNBUElUZXN0cyhBUElUZXN0KToKKyAgICBiYWRfZmluZGVyX2xvYWRlciA9IEJhZFNwZWNGaW5kZXJMb2FkZXIKKworRnJvemVuX1NwZWNBUElUZXN0cywgU291cmNlX1NwZWNBUElUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBTcGVjQVBJVGVzdHMsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfY2FjaGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9jYWNoaW5nLnB5CmluZGV4IDIwNzM3OGEuLmMyOTJlZTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9jYWNoaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9jYWNoaW5nLnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIAotY2xhc3MgVXNlQ2FjaGUodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVXNlQ2FjaGU6CiAKICAgICAiIiJXaGVuIGl0IGNvbWVzIHRvIHN5cy5tb2R1bGVzLCBpbXBvcnQgcHJlZmVycyBpdCBvdmVyIGFueXRoaW5nIGVsc2UuCiAKQEAgLTIxLDEyICsyMSwxMyBAQAogICAgIEltcG9ydEVycm9yIGlzIHJhaXNlZCBbTm9uZSBpbiBjYWNoZV0uCiAKICAgICAiIiIKKwogICAgIGRlZiB0ZXN0X3VzaW5nX2NhY2hlKHNlbGYpOgogICAgICAgICAjIFt1c2UgY2FjaGVdCiAgICAgICAgIG1vZHVsZV90b191c2UgPSAic29tZSBtb2R1bGUgZm91bmQhIgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnc29tZV9tb2R1bGUnKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydzb21lX21vZHVsZSddID0gbW9kdWxlX3RvX3VzZQotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0Xygnc29tZV9tb2R1bGUnKQorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdzb21lX21vZHVsZScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKG1vZHVsZV90b191c2UpLCBpZChtb2R1bGUpKQogCiAgICAgZGVmIHRlc3RfTm9uZV9pbl9jYWNoZShzZWxmKToKQEAgLTM1LDkgKzM2LDE5IEBACiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBOb25lCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBuYW1lKQogCitGcm96ZW5fVXNlQ2FjaGUsIFNvdXJjZV9Vc2VDYWNoZSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBVc2VDYWNoZSwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisKK2NsYXNzIEltcG9ydGxpYlVzZUNhY2hlKFVzZUNhY2hlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIFBlcnRpbmVudCBvbmx5IHRvIFBFUCAzMDI7IGV4ZWNfbW9kdWxlKCkgZG9lc24ndCByZXR1cm4gYSBtb2R1bGUuCisKKyAgICBfX2ltcG9ydF9fID0gaW1wb3J0X3V0aWwuX19pbXBvcnRfX1sxXQorCiAgICAgZGVmIGNyZWF0ZV9tb2NrKHNlbGYsICpuYW1lcywgcmV0dXJuXz1Ob25lKToKICAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCpuYW1lcykKICAgICAgICAgb3JpZ2luYWxfbG9hZCA9IG1vY2subG9hZF9tb2R1bGUKQEAgLTQ5LDQwICs2MCwzMyBAQAogCiAgICAgIyBfX2ltcG9ydF9fIGluY29uc2lzdGVudCBiZXR3ZWVuIGxvYWRlcnMgYW5kIGJ1aWx0LWluIGltcG9ydCB3aGVuIGl0IGNvbWVzCiAgICAgIyAgIHRvIHdoZW4gdG8gdXNlIHRoZSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMgYW5kIHdoZW4gbm90IHRvLgotICAgIEBpbXBvcnRfdXRpbC5pbXBvcnRsaWJfb25seQogICAgIGRlZiB0ZXN0X3VzaW5nX2NhY2hlX2FmdGVyX2xvYWRlcihzZWxmKToKICAgICAgICAgIyBbZnJvbSBjYWNoZSBvbiByZXR1cm5dCiAgICAgICAgIHdpdGggc2VsZi5jcmVhdGVfbW9jaygnbW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnbW9kdWxlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ21vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChtb2R1bGUpLCBpZChzeXMubW9kdWxlc1snbW9kdWxlJ10pKQogCiAgICAgIyBTZWUgdGVzdF91c2luZ19jYWNoZV9hZnRlcl9sb2FkZXIoKSBmb3IgcmVhc29uaW5nLgotICAgIEBpbXBvcnRfdXRpbC5pbXBvcnRsaWJfb25seQogICAgIGRlZiB0ZXN0X3VzaW5nX2NhY2hlX2Zvcl9hc3NpZ25pbmdfdG9fYXR0cmlidXRlKHNlbGYpOgogICAgICAgICAjIFtmcm9tIGNhY2hlIHRvIGF0dHJpYnV0ZV0KICAgICAgICAgd2l0aCBzZWxmLmNyZWF0ZV9tb2NrKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKG1vZHVsZS5tb2R1bGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc3lzLm1vZHVsZXNbJ3BrZy5tb2R1bGUnXSkpCiAKICAgICAjIFNlZSB0ZXN0X3VzaW5nX2NhY2hlX2FmdGVyX2xvYWRlcigpIGZvciByZWFzb25pbmcuCi0gICAgQGltcG9ydF91dGlsLmltcG9ydGxpYl9vbmx5CiAgICAgZGVmIHRlc3RfdXNpbmdfY2FjaGVfZm9yX2Zyb21saXN0KHNlbGYpOgogICAgICAgICAjIFtmcm9tIGNhY2hlIGZvciBmcm9tbGlzdF0KICAgICAgICAgd2l0aCBzZWxmLmNyZWF0ZV9tb2NrKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUnXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChtb2R1bGUubW9kdWxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkKHN5cy5tb2R1bGVzWydwa2cubW9kdWxlJ10pKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFVzZUNhY2hlKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkKaW5kZXggYzE2YzMzNy4uNThmMjQ0YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weQpAQCAtMSwxMCArMSwxMCBAQAogIiIiVGVzdCB0aGF0IHRoZSBzZW1hbnRpY3MgcmVsYXRpbmcgdG8gdGhlICdmcm9tbGlzdCcgYXJndW1lbnQgYXJlIGNvcnJlY3QuIiIiCiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKLWltcG9ydCBpbXAKIGltcG9ydCB1bml0dGVzdAogCi1jbGFzcyBSZXR1cm5WYWx1ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIFJldHVyblZhbHVlOgogCiAgICAgIiIiVGhlIHVzZSBvZiBmcm9tbGlzdCBpbmZsdWVuY2VzIHdoYXQgaW1wb3J0IHJldHVybnMuCiAKQEAgLTE3LDIwICsxNywyMyBAQAogCiAgICAgZGVmIHRlc3RfcmV0dXJuX2Zyb21faW1wb3J0KHNlbGYpOgogICAgICAgICAjIFtpbXBvcnQgcmV0dXJuXQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIGltcG9ydGVyOgorICAgICAgICB3aXRoIHV0aWwubW9ja19zcGVjKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAKICAgICBkZWYgdGVzdF9yZXR1cm5fZnJvbV9mcm9tX2ltcG9ydChzZWxmKToKICAgICAgICAgIyBbZnJvbSByZXR1cm5dCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJylhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnLCBmcm9tbGlzdD1bJ2F0dHInXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnLCBmcm9tbGlzdD1bJ2F0dHInXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2R1bGUnKQogCitGcm96ZW5fUmV0dXJuVmFsdWUsIFNvdXJjZV9SZXR1cm5WYWx1ZSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBSZXR1cm5WYWx1ZSwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCi1jbGFzcyBIYW5kbGluZ0Zyb21saXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgSGFuZGxpbmdGcm9tbGlzdDoKIAogICAgICIiIlVzaW5nIGZyb21saXN0IHRyaWdnZXJzIGRpZmZlcmVudCBhY3Rpb25zIGJhc2VkIG9uIHdoYXQgaXMgYmVpbmcgYXNrZWQKICAgICBvZiBpdC4KQEAgLTQ5LDE0ICs1MiwxNCBAQAogICAgICAgICAjIFtvYmplY3QgY2FzZV0KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygnbW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdtb2R1bGUnLCBmcm9tbGlzdD1bJ2F0dHInXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ21vZHVsZScsIGZyb21saXN0PVsnYXR0ciddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnbW9kdWxlJykKIAogICAgIGRlZiB0ZXN0X25vbmV4aXN0ZW50X29iamVjdChzZWxmKToKICAgICAgICAgIyBbYmFkIG9iamVjdF0KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygnbW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdtb2R1bGUnLCBmcm9tbGlzdD1bJ25vbl9leGlzdGVudCddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnbW9kdWxlJywgZnJvbWxpc3Q9Wydub25fZXhpc3RlbnQnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ21vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG1vZHVsZSwgJ25vbl9leGlzdGVudCcpKQogCkBAIC02NCw3ICs2Nyw3IEBACiAgICAgICAgICMgW21vZHVsZV0KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZSddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2R1bGUuX19uYW1lX18sICdwa2cubW9kdWxlJykKQEAgLTc5LDEzICs4MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsncGtnLm1vZCc6IG1vZHVsZV9jb2RlfSkgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBleGM6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycsIGZyb21saXN0PVsnbW9kJ10pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9Wydtb2QnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpX2RvX25vdF9leGlzdCcsIGV4Yy5leGNlcHRpb24ubmFtZSkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2QnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2QnLCBmcm9tbGlzdD1bJyddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZCcsIGZyb21saXN0PVsnJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cubW9kJykKIAogICAgIGRlZiBiYXNpY19zdGFyX3Rlc3Qoc2VsZiwgZnJvbWxpc3Q9WycqJ10pOgpAQCAtOTMsNyArOTYsNyBAQAogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIG1vY2tbJ3BrZyddLl9fYWxsX18gPSBbJ21vZHVsZSddCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9ZnJvbWxpc3QpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cnLCBmcm9tbGlzdD1mcm9tbGlzdCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUubW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZHVsZScpCkBAIC0xMTEsMTcgKzExNCwxNiBAQAogICAgICAgICB3aXRoIGNvbnRleHQgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgbW9ja1sncGtnJ10uX19hbGxfXyA9IFsnbW9kdWxlMSddCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUyJywgJyonXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlMicsICcqJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZTEnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUyJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUubW9kdWxlMS5fX25hbWVfXywgJ3BrZy5tb2R1bGUxJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2R1bGUyLl9fbmFtZV9fLCAncGtnLm1vZHVsZTInKQogCitGcm96ZW5fRnJvbUxpc3QsIFNvdXJjZV9Gcm9tTGlzdCA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBIYW5kbGluZ0Zyb21saXN0LCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFJldHVyblZhbHVlLCBIYW5kbGluZ0Zyb21saXN0KQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfbWV0YV9wYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X21ldGFfcGF0aC5weQppbmRleCA0ZDg1ZjgwLi5kYzQ1NDIwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfbWV0YV9wYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9tZXRhX3BhdGgucHkKQEAgLTcsNyArNyw3IEBACiBpbXBvcnQgd2FybmluZ3MKIAogCi1jbGFzcyBDYWxsaW5nT3JkZXIodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQ2FsbGluZ09yZGVyOgogCiAgICAgIiIiQ2FsbHMgdG8gdGhlIGltcG9ydGVycyBvbiBzeXMubWV0YV9wYXRoIGhhcHBlbiBpbiBvcmRlciB0aGF0IHRoZXkgYXJlCiAgICAgc3BlY2lmaWVkIGluIHRoZSBzZXF1ZW5jZSwgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgaW1wb3J0ZXIKQEAgLTE4LDIzICsxOCwxOCBAQAogICAgIGRlZiB0ZXN0X2ZpcnN0X2NhbGxlZChzZWxmKToKICAgICAgICAgIyBbZmlyc3QgY2FsbGVkXQogICAgICAgICBtb2QgPSAndG9wX2xldmVsJwotICAgICAgICBmaXJzdCA9IHV0aWwubW9ja19tb2R1bGVzKG1vZCkKLSAgICAgICAgc2Vjb25kID0gdXRpbC5tb2NrX21vZHVsZXMobW9kKQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKG1vZCkgYXMgZmlyc3QsIHV0aWwubW9ja19tb2R1bGVzKG1vZCkgYXMgc2Vjb25kOgotICAgICAgICAgICAgZmlyc3QubW9kdWxlc1ttb2RdID0gNDIKLSAgICAgICAgICAgIHNlY29uZC5tb2R1bGVzW21vZF0gPSAtMTMKKyAgICAgICAgd2l0aCB1dGlsLm1vY2tfc3BlYyhtb2QpIGFzIGZpcnN0LCB1dGlsLm1vY2tfc3BlYyhtb2QpIGFzIHNlY29uZDoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtmaXJzdCwgc2Vjb25kXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRfdXRpbC5pbXBvcnRfKG1vZCksIDQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5fX2ltcG9ydF9fKG1vZCksIGZpcnN0Lm1vZHVsZXNbbW9kXSkKIAogICAgIGRlZiB0ZXN0X2NvbnRpbnVpbmcoc2VsZik6CiAgICAgICAgICMgW2NvbnRpbnVpbmddCiAgICAgICAgIG1vZF9uYW1lID0gJ2Zvcl9yZWFsJwotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdub25leGlzdGVudCcpIGFzIGZpcnN0LCBcCi0gICAgICAgICAgICAgdXRpbC5tb2NrX21vZHVsZXMobW9kX25hbWUpIGFzIHNlY29uZDoKLSAgICAgICAgICAgIGZpcnN0LmZpbmRfbW9kdWxlID0gbGFtYmRhIHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmU6IE5vbmUKLSAgICAgICAgICAgIHNlY29uZC5tb2R1bGVzW21vZF9uYW1lXSA9IDQyCisgICAgICAgIHdpdGggdXRpbC5tb2NrX3NwZWMoJ25vbmV4aXN0ZW50JykgYXMgZmlyc3QsIFwKKyAgICAgICAgICAgICB1dGlsLm1vY2tfc3BlYyhtb2RfbmFtZSkgYXMgc2Vjb25kOgorICAgICAgICAgICAgZmlyc3QuZmluZF9zcGVjID0gbGFtYmRhIHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHBhcmVudD1Ob25lOiBOb25lCiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bZmlyc3QsIHNlY29uZF0pOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0X3V0aWwuaW1wb3J0Xyhtb2RfbmFtZSksIDQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5fX2ltcG9ydF9fKG1vZF9uYW1lKSwgc2Vjb25kLm1vZHVsZXNbbW9kX25hbWVdKQogCiAgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CiAgICAgICAgICMgUmFpc2UgYW4gSW1wb3J0V2FybmluZyBpZiBzeXMubWV0YV9wYXRoIGlzIGVtcHR5LgpAQCAtNDYsNDEgKzQxLDQyIEBACiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtdKToKICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CiAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdhbHdheXMnKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGltcG9ydGxpYi5fYm9vdHN0cmFwLl9maW5kX21vZHVsZSgnbm90aGluZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGltcG9ydGxpYi5fYm9vdHN0cmFwLl9maW5kX3NwZWMoJ25vdGhpbmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Mod1stMV0uY2F0ZWdvcnksIEltcG9ydFdhcm5pbmcpKQogCitGcm96ZW5fQ2FsbGluZ09yZGVyLCBTb3VyY2VfQ2FsbGluZ09yZGVyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIENhbGxpbmdPcmRlciwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCi1jbGFzcyBDYWxsU2lnbmF0dXJlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgQ2FsbFNpZ25hdHVyZToKIAogICAgICIiIklmIHRoZXJlIGlzIG5vIF9fcGF0aF9fIGVudHJ5IG9uIHRoZSBwYXJlbnQgbW9kdWxlLCB0aGVuICdwYXRoJyBpcyBOb25lCiAgICAgW25vIHBhdGhdLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBmb3IgX19wYXRoX18gaXMgcGFzc2VkIGluIGZvciB0aGUgJ3BhdGgnCiAgICAgYXJndW1lbnQgW3BhdGggc2V0XS4iIiIKIAotICAgIGRlZiBsb2coc2VsZiwgZnhuKToKKyAgICBkZWYgbG9nX2ZpbmRlcihzZWxmLCBpbXBvcnRlcik6CisgICAgICAgIGZ4biA9IGdldGF0dHIoaW1wb3J0ZXIsIHNlbGYuZmluZGVyX25hbWUpCiAgICAgICAgIGxvZyA9IFtdCiAgICAgICAgIGRlZiB3cmFwcGVyKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICAgICBsb2cuYXBwZW5kKFthcmdzLCBrd2FyZ3NdKQogICAgICAgICAgICAgcmV0dXJuIGZ4bigqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHJldHVybiBsb2csIHdyYXBwZXIKIAotCiAgICAgZGVmIHRlc3Rfbm9fcGF0aChzZWxmKToKICAgICAgICAgIyBbbm8gcGF0aF0KICAgICAgICAgbW9kX25hbWUgPSAndG9wX2xldmVsJwogICAgICAgICBhc3NlcnQgJy4nIG5vdCBpbiBtb2RfbmFtZQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKG1vZF9uYW1lKSBhcyBpbXBvcnRlcjoKLSAgICAgICAgICAgIGxvZywgd3JhcHBlZF9jYWxsID0gc2VsZi5sb2coaW1wb3J0ZXIuZmluZF9tb2R1bGUpCi0gICAgICAgICAgICBpbXBvcnRlci5maW5kX21vZHVsZSA9IE1ldGhvZFR5cGUod3JhcHBlZF9jYWxsLCBpbXBvcnRlcikKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcyhtb2RfbmFtZSkgYXMgaW1wb3J0ZXI6CisgICAgICAgICAgICBsb2csIHdyYXBwZWRfY2FsbCA9IHNlbGYubG9nX2ZpbmRlcihpbXBvcnRlcikKKyAgICAgICAgICAgIHNldGF0dHIoaW1wb3J0ZXIsIHNlbGYuZmluZGVyX25hbWUsIE1ldGhvZFR5cGUod3JhcHBlZF9jYWxsLCBpbXBvcnRlcikpCiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKG1vZF9uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhtb2RfbmFtZSkKICAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGxvZykgPT0gMQogICAgICAgICAgICAgICAgIGFyZ3MgPSBsb2dbMF1bMF0KICAgICAgICAgICAgICAgICBrd2FyZ3MgPSBsb2dbMF1bMV0KICAgICAgICAgICAgICAgICAjIEFzc3VtaW5nIGFsbCBhcmd1bWVudHMgYXJlIHBvc2l0aW9uYWwuCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXJncyksIDIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa3dhcmdzKSwgMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3NbMF0sIG1vZF9uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGFyZ3NbMV0pCiAKQEAgLTkwLDEyICs4NiwxMiBAQAogICAgICAgICBtb2RfbmFtZSA9IHBrZ19uYW1lICsgJy5tb2R1bGUnCiAgICAgICAgIHBhdGggPSBbNDJdCiAgICAgICAgIGFzc2VydCAnLicgaW4gbW9kX25hbWUKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhwa2dfbmFtZSsnLl9faW5pdF9fJywgbW9kX25hbWUpIGFzIGltcG9ydGVyOgorICAgICAgICB3aXRoIHNlbGYubW9ja19tb2R1bGVzKHBrZ19uYW1lKycuX19pbml0X18nLCBtb2RfbmFtZSkgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICBpbXBvcnRlci5tb2R1bGVzW3BrZ19uYW1lXS5fX3BhdGhfXyA9IHBhdGgKLSAgICAgICAgICAgIGxvZywgd3JhcHBlZF9jYWxsID0gc2VsZi5sb2coaW1wb3J0ZXIuZmluZF9tb2R1bGUpCi0gICAgICAgICAgICBpbXBvcnRlci5maW5kX21vZHVsZSA9IE1ldGhvZFR5cGUod3JhcHBlZF9jYWxsLCBpbXBvcnRlcikKKyAgICAgICAgICAgIGxvZywgd3JhcHBlZF9jYWxsID0gc2VsZi5sb2dfZmluZGVyKGltcG9ydGVyKQorICAgICAgICAgICAgc2V0YXR0cihpbXBvcnRlciwgc2VsZi5maW5kZXJfbmFtZSwgTWV0aG9kVHlwZSh3cmFwcGVkX2NhbGwsIGltcG9ydGVyKSkKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8obW9kX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKG1vZF9uYW1lKQogICAgICAgICAgICAgICAgIGFzc2VydCBsZW4obG9nKSA9PSAyCiAgICAgICAgICAgICAgICAgYXJncyA9IGxvZ1sxXVswXQogICAgICAgICAgICAgICAgIGt3YXJncyA9IGxvZ1sxXVsxXQpAQCAtMTA0LDEyICsxMDAsMjAgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3NbMF0sIG1vZF9uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoYXJnc1sxXSwgcGF0aCkKIAorY2xhc3MgQ2FsbFNpZ25hdHVyZVBFUDMwMihDYWxsU2lnbmF0dXJlKToKKyAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfbW9kdWxlcworICAgIGZpbmRlcl9uYW1lID0gJ2ZpbmRfbW9kdWxlJwogCitGcm96ZW5fQ2FsbFNpZ25hdHVyZVBFUDMwMiwgU291cmNlX0NhbGxTaWduYXR1cmVQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgQ2FsbFNpZ25hdHVyZVBFUDMwMiwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChDYWxsaW5nT3JkZXIsIENhbGxTaWduYXR1cmUpCitjbGFzcyBDYWxsU2lnbmF0dXJlUEVQNDUxKENhbGxTaWduYXR1cmUpOgorICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19zcGVjCisgICAgZmluZGVyX25hbWUgPSAnZmluZF9zcGVjJworCitGcm96ZW5fQ2FsbFNpZ25hdHVyZVBFUDQ1MSwgU291cmNlX0NhbGxTaWduYXR1cmVQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgQ2FsbFNpZ25hdHVyZVBFUDQ1MSwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weQppbmRleCBiZmExOGRjLi41NWE1ZDE0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhY2thZ2VzLnB5CkBAIC02LDM3ICs2LDM3IEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogCi1jbGFzcyBQYXJlbnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBQYXJlbnRNb2R1bGVUZXN0czoKIAogICAgICIiIkltcG9ydGluZyBhIHN1Ym1vZHVsZSBzaG91bGQgaW1wb3J0IHRoZSBwYXJlbnQgbW9kdWxlcy4iIiIKIAogICAgIGRlZiB0ZXN0X2ltcG9ydF9wYXJlbnQoc2VsZik6Ci0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgbW9jazoKKyAgICAgICAgd2l0aCB1dGlsLm1vY2tfc3BlYygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogCiAgICAgZGVmIHRlc3RfYmFkX3BhcmVudChzZWxmKToKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLm1vZHVsZScpIGFzIG1vY2s6CisgICAgICAgIHdpdGggdXRpbC5tb2NrX3NwZWMoJ3BrZy5tb2R1bGUnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ3BrZycpCiAKICAgICBkZWYgdGVzdF9yYWlzaW5nX3BhcmVudF9hZnRlcl9pbXBvcnRpbmdfY2hpbGQoc2VsZik6CiAgICAgICAgIGRlZiBfX2luaXRfXygpOgogICAgICAgICAgICAgaW1wb3J0IHBrZy5tb2R1bGUKICAgICAgICAgICAgIDEvMAotICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJywKKyAgICAgICAgbW9jayA9IHV0aWwubW9ja19zcGVjKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3BrZyc6IF9faW5pdF9ffSkKICAgICAgICAgd2l0aCBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3BrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncGtnLm1vZHVsZScsIHN5cy5tb2R1bGVzKQogCkBAIC00NCwxNyArNDQsMTcgQEAKICAgICAgICAgZGVmIF9faW5pdF9fKCk6CiAgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IG1vZHVsZQogICAgICAgICAgICAgMS8wCi0gICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnLAorICAgICAgICBtb2NrID0gdXRpbC5tb2NrX3NwZWMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsncGtnJzogX19pbml0X199KQogICAgICAgICB3aXRoIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFplcm9EaXZpc2lvbkVycm9yLCBJbXBvcnRFcnJvcikpOgogICAgICAgICAgICAgICAgICAgICAjIFRoaXMgcmFpc2VzIEltcG9ydEVycm9yIG9uIHRoZSAiZnJvbSAuIGltcG9ydCBtb2R1bGUiCiAgICAgICAgICAgICAgICAgICAgICMgbGluZSwgbm90IHN1cmUgd2h5LgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoWmVyb0RpdmlzaW9uRXJyb3IsIEltcG9ydEVycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgICMgWFhYIEZhbHNlCiAgICAgICAgICAgICAgICAgI3NlbGYuYXNzZXJ0SW4oJ3BrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgZGVmIF9faW5pdF9fKCk6CiAgICAgICAgICAgICBmcm9tIC4uc3VicGtnIGltcG9ydCBtb2R1bGUKICAgICAgICAgICAgIDEvMAotICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cuc3VicGtnLl9faW5pdF9fJywKKyAgICAgICAgbW9jayA9IHV0aWwubW9ja19zcGVjKCdwa2cuX19pbml0X18nLCAncGtnLnN1YnBrZy5fX2luaXRfXycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGtnLnN1YnBrZy5tb2R1bGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eydwa2cuc3VicGtnJzogX19pbml0X199KQogICAgICAgICB3aXRoIG1vY2s6CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHJhaXNlcyBJbXBvcnRFcnJvciBvbiB0aGUgImZyb20gLi5zdWJwa2cgaW1wb3J0IG1vZHVsZSIKICAgICAgICAgICAgICAgICAgICAgIyBsaW5lLCBub3Qgc3VyZSB3aHkuCi0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5zdWJwa2cnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5zdWJwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZy5zdWJwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLnN1YnBrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5zdWJwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cuc3VicGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgIyBYWFggRmFsc2UKICAgICAgICAgICAgICAgICAjc2VsZi5hc3NlcnRJbigncGtnLnN1YnBrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgIyBUcnkgdG8gaW1wb3J0IGEgc3VibW9kdWxlIGZyb20gYSBub24tcGFja2FnZSBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IuCiAgICAgICAgIGFzc2VydCBub3QgaGFzYXR0cihzeXMsICdfX3BhdGhfXycpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0Xygnc3lzLm5vX3N1Ym1vZHVsZXNfaGVyZScpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3N5cy5ub19zdWJtb2R1bGVzX2hlcmUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnc3lzLm5vX3N1Ym1vZHVsZXNfaGVyZScpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfbm90X3BhY2thZ2VfYnV0X3NpZGVfZWZmZWN0cyhzZWxmKToKQEAgLTkzLDIwICs5MywxOCBAQAogICAgICAgICBzdWJuYW1lID0gbmFtZSArICcuYicKICAgICAgICAgZGVmIG1vZHVsZV9pbmplY3Rpb24oKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW3N1Ym5hbWVdID0gJ3RvdGFsIGJ1bmsnCi0gICAgICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19tb2R1bGVzKCdtb2QnLAorICAgICAgICBtb2NrX3NwZWMgPSB1dGlsLm1vY2tfc3BlYygnbW9kJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eydtb2QnOiBtb2R1bGVfaW5qZWN0aW9ufSkKLSAgICAgICAgd2l0aCBtb2NrX21vZHVsZXMgYXMgbW9jazoKKyAgICAgICAgd2l0aCBtb2NrX3NwZWMgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKHN1Ym5hbWUpCisgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXyhzdWJuYW1lKQogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQudW5sb2FkKHN1Ym5hbWUpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoUGFyZW50TW9kdWxlVGVzdHMpCitGcm96ZW5fUGFyZW50VGVzdHMsIFNvdXJjZV9QYXJlbnRUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBQYXJlbnRNb2R1bGVUZXN0cywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKaW5kZXggZDgyYjdmNi4uNzEzZTc1NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKQEAgLTEsOCArMSw5IEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGltcG9ydF9tb2R1bGUKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAorCitpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gdHlwZXMgaW1wb3J0IE1vZHVsZVR5cGUKQEAgLTExLDI1ICsxMiwyNSBAQAogaW1wb3J0IHppcGltcG9ydAogCiAKLWNsYXNzIEZpbmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEZpbmRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIFBhdGhGaW5kZXIuIiIiCiAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgotICAgICAgICAjIFRlc3QgTm9uZSByZXR1cm5lZCB1cG9uIG5vdCBmaW5kaW5nIGEgc3VpdGFibGUgZmluZGVyLgorICAgICAgICAjIFRlc3QgTm9uZSByZXR1cm5lZCB1cG9uIG5vdCBmaW5kaW5nIGEgc3VpdGFibGUgbG9hZGVyLgogICAgICAgICBtb2R1bGUgPSAnPHRlc3QgbW9kdWxlPicKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZSgpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKSkKIAogICAgIGRlZiB0ZXN0X3N5c19wYXRoKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBzeXMucGF0aCBpcyB1c2VkIHdoZW4gJ3BhdGgnIGlzIE5vbmUuCiAgICAgICAgICMgSW1wbGljaXRseSB0ZXN0cyB0aGF0IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlIGlzIHVzZWQuCiAgICAgICAgIG1vZHVsZSA9ICc8dGVzdCBtb2R1bGU+JwogICAgICAgICBwYXRoID0gJzx0ZXN0IHBhdGg+JwotICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKKyAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfc3BlYyhtb2R1bGUpCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aF9pbXBvcnRlcl9jYWNoZT17cGF0aDogaW1wb3J0ZXJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9W3BhdGhdKToKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIGltcG9ydGVyKQogCiAgICAgZGVmIHRlc3RfcGF0aChzZWxmKToKQEAgLTM3LDI5ICszOCwyOSBAQAogICAgICAgICAjIEltcGxpY2l0bHkgdGVzdHMgdGhhdCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSBpcyB1c2VkLgogICAgICAgICBtb2R1bGUgPSAnPHRlc3QgbW9kdWxlPicKICAgICAgICAgcGF0aCA9ICc8dGVzdCBwYXRoPicKLSAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCisgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX3NwZWMobW9kdWxlKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaW1wb3J0ZXJfY2FjaGU9e3BhdGg6IGltcG9ydGVyfSk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUsIFtwYXRoXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlLCBbcGF0aF0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9saXN0KHNlbGYpOgogICAgICAgICAjIEFuIGVtcHR5IGxpc3Qgc2hvdWxkIG5vdCBjb3VudCBhcyBhc2tpbmcgZm9yIHN5cy5wYXRoLgogICAgICAgICBtb2R1bGUgPSAnbW9kdWxlJwogICAgICAgICBwYXRoID0gJzx0ZXN0IHBhdGg+JwotICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKKyAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfc3BlYyhtb2R1bGUpCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aF9pbXBvcnRlcl9jYWNoZT17cGF0aDogaW1wb3J0ZXJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9W3BhdGhdKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdtb2R1bGUnLCBbXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdtb2R1bGUnLCBbXSkpCiAKICAgICBkZWYgdGVzdF9wYXRoX2hvb2tzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBzeXMucGF0aF9ob29rcyBpcyB1c2VkLgogICAgICAgICAjIFRlc3QgdGhhdCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSBpcyBzZXQuCiAgICAgICAgIG1vZHVsZSA9ICc8dGVzdCBtb2R1bGU+JwogICAgICAgICBwYXRoID0gJzx0ZXN0IHBhdGg+JwotICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKKyAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfc3BlYyhtb2R1bGUpCiAgICAgICAgIGhvb2sgPSBpbXBvcnRfdXRpbC5tb2NrX3BhdGhfaG9vayhwYXRoLCBpbXBvcnRlcj1pbXBvcnRlcikKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2hvb2tzPVtob29rXSk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUsIFtwYXRoXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlLCBbcGF0aF0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgsIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtwYXRoXSwgaW1wb3J0ZXIpCkBAIC03Miw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1bcGF0aF9lbnRyeV0pOgogICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Fsd2F5cycpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUoJ29zJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZSgnb3MnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtwYXRoX2VudHJ5XSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh3Wy0xXS5jYXRlZ29yeSwgSW1wb3J0V2FybmluZykpCkBAIC04MSwxMiArODIsMTIgQEAKICAgICAgICAgIyBUaGUgZW1wdHkgc3RyaW5nIHNob3VsZCBjcmVhdGUgYSBmaW5kZXIgdXNpbmcgdGhlIGN3ZC4KICAgICAgICAgcGF0aCA9ICcnCiAgICAgICAgIG1vZHVsZSA9ICc8dGVzdCBtb2R1bGU+JwotICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKLSAgICAgICAgaG9vayA9IGltcG9ydF91dGlsLm1vY2tfcGF0aF9ob29rKG9zLmN1cmRpciwgaW1wb3J0ZXI9aW1wb3J0ZXIpCisgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX3NwZWMobW9kdWxlKQorICAgICAgICBob29rID0gaW1wb3J0X3V0aWwubW9ja19wYXRoX2hvb2sob3MuZ2V0Y3dkKCksIGltcG9ydGVyPWltcG9ydGVyKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGg9W3BhdGhdLCBwYXRoX2hvb2tzPVtob29rXSk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLCBpbXBvcnRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MuY3VyZGlyLCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MuZ2V0Y3dkKCksIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlKQogCiAgICAgZGVmIHRlc3RfTm9uZV9vbl9zeXNfcGF0aChzZWxmKToKICAgICAgICAgIyBQdXR0aW5nIE5vbmUgaW4gc3lzLnBhdGhbMF0gY2F1c2VkIGFuIGltcG9ydCByZWdyZXNzaW9uIGZyb20gUHl0aG9uCkBAIC05Niw4ICs5Nyw4IEBACiAgICAgICAgIG5ld19wYXRoX2ltcG9ydGVyX2NhY2hlID0gc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY29weSgpCiAgICAgICAgIG5ld19wYXRoX2ltcG9ydGVyX2NhY2hlLnBvcChOb25lLCBOb25lKQogICAgICAgICBuZXdfcGF0aF9ob29rcyA9IFt6aXBpbXBvcnQuemlwaW1wb3J0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9ib290c3RyYXAuRmlsZUZpbmRlci5wYXRoX2hvb2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqX2Jvb3RzdHJhcC5fZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKSldCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNlbGYuaW1wb3J0bGliLl9ib290c3RyYXAuX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkpXQogICAgICAgICBtaXNzaW5nID0gb2JqZWN0KCkKICAgICAgICAgZW1haWwgPSBzeXMubW9kdWxlcy5wb3AoJ2VtYWlsJywgbWlzc2luZykKICAgICAgICAgdHJ5OgpAQCAtMTA1LDE2ICsxMDYsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1uZXdfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9pbXBvcnRlcl9jYWNoZT1uZXdfcGF0aF9pbXBvcnRlcl9jYWNoZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9ob29rcz1uZXdfcGF0aF9ob29rcyk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X21vZHVsZSgnZW1haWwnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2VtYWlsJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLCBNb2R1bGVUeXBlKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgZW1haWwgaXMgbm90IG1pc3Npbmc6CiAgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2VtYWlsJ10gPSBlbWFpbAogCitGcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBGaW5kZXJUZXN0cywgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3JlbGF0aXZlX2ltcG9ydHMucHkKaW5kZXggNDU2OWMyNi4uYjIxNmU5YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3JlbGF0aXZlX2ltcG9ydHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3JlbGF0aXZlX2ltcG9ydHMucHkKQEAgLTQsNyArNCw3IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotY2xhc3MgUmVsYXRpdmVJbXBvcnRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFJlbGF0aXZlSW1wb3J0czoKIAogICAgICIiIlBFUCAzMjggaW50cm9kdWNlZCByZWxhdGl2ZSBpbXBvcnRzLiBUaGlzIGFsbG93cyBmb3IgaW1wb3J0cyB0byBvY2N1cgogICAgIGZyb20gd2l0aGluIGEgcGFja2FnZSB3aXRob3V0IGhhdmluZyB0byBzcGVjaWZ5IHRoZSBhY3R1YWwgcGFja2FnZSBuYW1lLgpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgICAgIHVuY2FjaGVfbmFtZXMuYXBwZW5kKG5hbWUpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHVuY2FjaGVfbmFtZXMuYXBwZW5kKG5hbWVbOi1sZW4oJy5fX2luaXRfXycpXSkKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygqY3JlYXRlKSBhcyBpbXBvcnRlcjoKKyAgICAgICAgd2l0aCB1dGlsLm1vY2tfc3BlYygqY3JlYXRlKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgogICAgICAgICAgICAgICAgIGZvciBnbG9iYWxfIGluIGdsb2JhbHNfOgogICAgICAgICAgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgqdW5jYWNoZV9uYW1lcyk6CkBAIC03Niw4ICs3Niw4IEBACiAgICAgICAgIGNyZWF0ZSA9ICdwa2cuX19pbml0X18nLCAncGtnLm1vZDInCiAgICAgICAgIGdsb2JhbHNfID0geydfX3BhY2thZ2VfXyc6ICdwa2cnfSwgeydfX25hbWVfXyc6ICdwa2cubW9kMSd9CiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ21vZDInXSwgbGV2ZWw9MSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wydtb2QyJ10sIGxldmVsPTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2QyJykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2QyLmF0dHIsICdwa2cubW9kMicpCkBAIC04OCw4ICs4OCw4IEBACiAgICAgICAgIGNyZWF0ZSA9ICdwa2cuX19pbml0X18nLCAncGtnLm1vZDInCiAgICAgICAgIGdsb2JhbHNfID0geydfX3BhY2thZ2VfXyc6ICdwa2cnfSwgeydfX25hbWVfXyc6ICdwa2cubW9kMSd9CiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdtb2QyJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ21vZDInLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZDInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgJ3BrZy5tb2QyJykKQEAgLTEwMSw4ICsxMDEsOCBAQAogICAgICAgICBnbG9iYWxzXyA9ICh7J19fcGFja2FnZV9fJzogJ3BrZyd9LAogICAgICAgICAgICAgICAgICAgICB7J19fbmFtZV9fJzogJ3BrZycsICdfX3BhdGhfXyc6IFsnYmxhaCddfSkKICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnbW9kdWxlJ10sCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnbW9kdWxlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKQEAgLTExNCw4ICsxMTQsOCBAQAogICAgICAgICBjcmVhdGUgPSAncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnCiAgICAgICAgIGdsb2JhbHNfID0geydfX3BhY2thZ2VfXyc6ICdwa2cnfSwgeydfX25hbWVfXyc6ICdwa2cubW9kdWxlJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD0xKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIApAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgIGdsb2JhbHNfID0gICh7J19fcGFja2FnZV9fJzogJ3BrZy5zdWJwa2cxJ30sCiAgICAgICAgICAgICAgICAgICAgICB7J19fbmFtZV9fJzogJ3BrZy5zdWJwa2cxJywgJ19fcGF0aF9fJzogWydibGFoJ119KQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3N1YnBrZzInXSwKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydzdWJwa2cyJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdzdWJwa2cyJykpCkBAIC0xNDIsOCArMTQyLDggQEAKICAgICAgICAgICAgICAgICAgICAgeydfX25hbWVfXyc6ICdwa2cucGtnMS5wa2cyLnBrZzMucGtnNC5wa2c1JywKICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFsnYmxhaCddfSkKICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XyhnbG9iYWxzX1swXVsnX19wYWNrYWdlX18nXSkKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD02KQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKGdsb2JhbHNfWzBdWydfX3BhY2thZ2VfXyddKQorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9NikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIApAQCAtMTUzLDkgKzE1Myw5IEBACiAgICAgICAgIGdsb2JhbHNfID0gKHsnX19wYWNrYWdlX18nOiAncGtnJ30sCiAgICAgICAgICAgICAgICAgICAgIHsnX19uYW1lX18nOiAncGtnJywgJ19fcGF0aF9fJzogWydibGFoJ119KQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLAorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wyd0b3BfbGV2ZWwnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTIpCiAgICAgICAgIHNlbGYucmVsYXRpdmVfaW1wb3J0X3Rlc3QoY3JlYXRlLCBnbG9iYWxzXywgY2FsbGJhY2spCiAKQEAgLTE2NCwxNiArMTY0LDE2IEBACiAgICAgICAgIGNyZWF0ZSA9IFsndG9wX2xldmVsJywgJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJ10KICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2R1bGUnfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLAorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wyd0b3BfbGV2ZWwnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTIpCiAgICAgICAgIHNlbGYucmVsYXRpdmVfaW1wb3J0X3Rlc3QoY3JlYXRlLCBnbG9iYWxzXywgY2FsbGJhY2spCiAKICAgICBkZWYgdGVzdF9lbXB0eV9uYW1lX3dfbGV2ZWxfMChzZWxmKToKICAgICAgICAgIyBbZW1wdHkgbmFtZV0KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJycpCiAKICAgICBkZWYgdGVzdF9pbXBvcnRfZnJvbV9kaWZmZXJlbnRfcGFja2FnZShzZWxmKToKICAgICAgICAgIyBUZXN0IGltcG9ydGluZyBmcm9tIGEgZGlmZmVyZW50IHBhY2thZ2UgdGhhbiB0aGUgY2FsbGVyLgpAQCAtMTg2LDggKzE4Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICdfX3J1bnB5X3BrZ19fLnVuY2xlLmNvdXNpbi5uZXBoZXcnXQogICAgICAgICBnbG9iYWxzXyA9IHsnX19wYWNrYWdlX18nOiAnX19ydW5weV9wa2dfXy5fX3J1bnB5X3BrZ19fJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnX19ydW5weV9wa2dfXy5fX3J1bnB5X3BrZ19fJykKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3VuY2xlLmNvdXNpbicsIGdsb2JhbHNfLCB7fSwKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnX19ydW5weV9wa2dfXy5fX3J1bnB5X3BrZ19fJykKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygndW5jbGUuY291c2luJywgZ2xvYmFsc18sIHt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3Q9WyduZXBoZXcnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnX19ydW5weV9wa2dfXy51bmNsZS5jb3VzaW4nKQpAQCAtMTk4LDIwICsxOTgsMTkgQEAKICAgICAgICAgY3JlYXRlID0gWydjcmFzaC5fX2luaXRfXycsICdjcmFzaC5tb2QnXQogICAgICAgICBnbG9iYWxzXyA9IFt7J19fcGFja2FnZV9fJzogJ2NyYXNoJywgJ19fbmFtZV9fJzogJ2NyYXNoJ31dCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ2NyYXNoJykKLSAgICAgICAgICAgIG1vZCA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZCcsIGdsb2JhbF8sIHt9LCBbXSwgMSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnY3Jhc2gnKQorICAgICAgICAgICAgbW9kID0gc2VsZi5fX2ltcG9ydF9fKCdtb2QnLCBnbG9iYWxfLCB7fSwgW10sIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5fX25hbWVfXywgJ2NyYXNoLm1vZCcpCiAgICAgICAgIHNlbGYucmVsYXRpdmVfaW1wb3J0X3Rlc3QoY3JlYXRlLCBnbG9iYWxzXywgY2FsbGJhY2spCiAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRfbm9fZ2xvYmFscyhzZWxmKToKICAgICAgICAgIyBObyBnbG9iYWxzIGZvciBhIHJlbGF0aXZlIGltcG9ydCBpcyBhbiBlcnJvci4KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdzeXMnLCBsZXZlbD0xKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdzeXMnLCBsZXZlbD0xKQogCitGcm96ZW5fUmVsYXRpdmVJbXBvcnRzLCBTb3VyY2VfUmVsYXRpdmVJbXBvcnRzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFJlbGF0aXZlSW1wb3J0cywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChSZWxhdGl2ZUltcG9ydHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdXRpbC5weQppbmRleCA4NmFjMDY1Li5kY2I0OTBmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy91dGlsLnB5CkBAIC0xLDIyICsxLDE0IEBACitmcm9tIC4uIGltcG9ydCB1dGlsCisKK2Zyb3plbl9pbXBvcnRsaWIsIHNvdXJjZV9pbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCisKK2ltcG9ydCBidWlsdGlucwogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IHVuaXR0ZXN0CiAKIAotdXNpbmdfX19pbXBvcnRfXyA9IEZhbHNlCi0KLQotZGVmIGltcG9ydF8oKmFyZ3MsICoqa3dhcmdzKToKLSAgICAiIiJEZWxlZ2F0ZSB0byBhbGxvdyBmb3IgaW5qZWN0aW5nIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgaW1wb3J0LiIiIgotICAgIGlmIHVzaW5nX19faW1wb3J0X186Ci0gICAgICAgIHJldHVybiBfX2ltcG9ydF9fKCphcmdzLCAqKmt3YXJncykKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gaW1wb3J0bGliLl9faW1wb3J0X18oKmFyZ3MsICoqa3dhcmdzKQotCi0KLWRlZiBpbXBvcnRsaWJfb25seShmeG4pOgotICAgICIiIkRlY29yYXRvciB0byBza2lwIGEgdGVzdCBpZiB1c2luZyBfX2J1aWx0aW5zX18uX19pbXBvcnRfXy4iIiIKLSAgICByZXR1cm4gdW5pdHRlc3Quc2tpcElmKHVzaW5nX19faW1wb3J0X18sICJpbXBvcnRsaWItc3BlY2lmaWMgdGVzdCIpKGZ4bikKK19faW1wb3J0X18gPSBzdGF0aWNtZXRob2QoYnVpbHRpbnMuX19pbXBvcnRfXyksIHN0YXRpY21ldGhvZChzb3VyY2VfaW1wb3J0bGliLl9faW1wb3J0X18pCiAKIAogZGVmIG1vY2tfcGF0aF9ob29rKCplbnRyaWVzLCBpbXBvcnRlcik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfYWJjX2xvYWRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ5MTJiNi4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTA2ICswLDAgQEAKLWltcG9ydCBpbXBvcnRsaWIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBhYmMKLQotZnJvbSAuLiBpbXBvcnQgYWJjIGFzIHRlc3RpbmdfYWJjCi1mcm9tIC4uIGltcG9ydCB1dGlsCi1mcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKLQotaW1wb3J0IGltcAotaW1wb3J0IGluc3BlY3QKLWltcG9ydCBpbwotaW1wb3J0IG1hcnNoYWwKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHR5cGVzCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB3YXJuaW5ncwotCi0KLWNsYXNzIFNvdXJjZU9ubHlMb2FkZXJNb2NrKGFiYy5Tb3VyY2VMb2FkZXIpOgotCi0gICAgIyBHbG9iYWxzIHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgZm9yIGFsbCBtb2R1bGVzLgotICAgIHNvdXJjZSA9IChiIl8gPSAnOjonLmpvaW4oW19fbmFtZV9fLCBfX2ZpbGVfXywgX19jYWNoZWRfXywgX19wYWNrYWdlX18sICIKLSAgICAgICAgICAgICAgYiJyZXByKF9fbG9hZGVyX18pXSkiKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgotICAgICAgICBzZWxmLnBhdGggPSBwYXRoCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGFzc2VydCBzZWxmLnBhdGggPT0gcGF0aAotICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKLQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5wYXRoCi0KLSAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgcmV0dXJuICc8bW9kdWxlPicKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJNb2NrKFNvdXJjZU9ubHlMb2FkZXJNb2NrKToKLQotICAgIHNvdXJjZV9tdGltZSA9IDEKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBtYWdpYz1pbXAuZ2V0X21hZ2ljKCkpOgotICAgICAgICBzdXBlcigpLl9faW5pdF9fKHBhdGgpCi0gICAgICAgIHNlbGYuYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCi0gICAgICAgIHNlbGYuc291cmNlX3NpemUgPSBsZW4oc2VsZi5zb3VyY2UpCi0gICAgICAgIGRhdGEgPSBieXRlYXJyYXkobWFnaWMpCi0gICAgICAgIGRhdGEuZXh0ZW5kKGltcG9ydGxpYi5fd19sb25nKHNlbGYuc291cmNlX210aW1lKSkKLSAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5zb3VyY2Vfc2l6ZSkpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gY29tcGlsZShzZWxmLnNvdXJjZSwgc2VsZi5wYXRoLCAnZXhlYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlKQotICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKLSAgICAgICAgc2VsZi5ieXRlY29kZSA9IGJ5dGVzKGRhdGEpCi0gICAgICAgIHNlbGYud3JpdHRlbiA9IHt9Ci0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggPT0gc2VsZi5wYXRoOgotICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgZWxpZiBwYXRoID09IHNlbGYuYnl0ZWNvZGVfcGF0aDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmJ5dGVjb2RlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0KLSAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKLSAgICAgICAgYXNzZXJ0IHBhdGggPT0gc2VsZi5wYXRoCi0gICAgICAgIHJldHVybiB7J210aW1lJzogc2VsZi5zb3VyY2VfbXRpbWUsICdzaXplJzogc2VsZi5zb3VyY2Vfc2l6ZX0KLQotICAgIGRlZiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhKToKLSAgICAgICAgc2VsZi53cml0dGVuW3BhdGhdID0gYnl0ZXMoZGF0YSkKLSAgICAgICAgcmV0dXJuIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoCi0KLQotY2xhc3MgUHlMb2FkZXJNb2NrKGFiYy5QeUxvYWRlcik6Ci0KLSAgICAjIEdsb2JhbHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBmb3IgYWxsIG1vZHVsZXMuCi0gICAgc291cmNlID0gKGIiXyA9ICc6Oicuam9pbihbX19uYW1lX18sIF9fZmlsZV9fLCBfX3BhY2thZ2VfXywgIgotICAgICAgICAgICAgICBiInJlcHIoX19sb2FkZXJfXyldKSIpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6Ci0gICAgICAgICIiIlRha2UgYSBkaWN0IG9mICdtb2R1bGVfbmFtZTogcGF0aCcgcGFpcmluZ3MuCi0KLSAgICAgICAgUGF0aHMgc2hvdWxkIGhhdmUgbm8gZmlsZSBleHRlbnNpb24sIGFsbG93aW5nIHBhY2thZ2VzIHRvIGJlIGRlbm90ZWQgYnkKLSAgICAgICAgZW5kaW5nIGluICdfX2luaXRfXycuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYubW9kdWxlX3BhdGhzID0gZGF0YQotICAgICAgICBzZWxmLnBhdGhfdG9fbW9kdWxlID0ge3ZhbDprZXkgZm9yIGtleSx2YWwgaW4gZGF0YS5pdGVtcygpfQotCi0gICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgotICAgICAgICBpZiBwYXRoIG5vdCBpbiBzZWxmLnBhdGhfdG9fbW9kdWxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKLQotICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfZmlsZW5hbWUobmFtZSkpCi0gICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSA9PSAnX19pbml0X18nCi0KLSAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZV9wYXRoc1tuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBuYW1lKToKLSAgICAgICAgIiIiU2lsZW5jZSBkZXByZWNhdGlvbiB3YXJuaW5nLiIiIgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgcGF0aCA9IHN1cGVyKCkuZ2V0X2ZpbGVuYW1lKG5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgbGVuKHcpID09IDEKLSAgICAgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHJldHVybiBwYXRoCi0KLSAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZik6Ci0gICAgICAgIHJldHVybiAnPG1vZHVsZT4nCi0KLQotY2xhc3MgUHlMb2FkZXJDb21wYXRNb2NrKFB5TG9hZGVyTW9jayk6Ci0KLSAgICAiIiJNb2NrIHRoYXQgbWF0Y2hlcyB3aGF0IGlzIHN1Z2dlc3RlZCB0byBoYXZlIGEgbG9hZGVyIHRoYXQgaXMgY29tcGF0aWJsZQotICAgIGZyb20gUHl0aG9uIDMuMSBvbndhcmRzLiIiIgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZV9wYXRoc1tmdWxsbmFtZV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotCi1jbGFzcyBQeVB5Y0xvYWRlck1vY2soYWJjLlB5UHljTG9hZGVyLCBQeUxvYWRlck1vY2spOgotCi0gICAgZGVmYXVsdF9tdGltZSA9IDEKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIGJjPXt9KToKLSAgICAgICAgIiIiSW5pdGlhbGl6ZSBtb2NrLgotCi0gICAgICAgICdiYycgaXMgYSBkaWN0IGtleWVkIG9uIGEgbW9kdWxlJ3MgbmFtZS4gVGhlIHZhbHVlIGlzIGRpY3Qgd2l0aAotICAgICAgICBwb3NzaWJsZSBrZXlzIG9mICdwYXRoJywgJ210aW1lJywgJ21hZ2ljJywgYW5kICdiYycuIEV4Y2VwdCBmb3IgJ3BhdGgnLAotICAgICAgICBlYWNoIG9mIHRob3NlIGtleXMgY29udHJvbCBpZiBhbnkgcGFydCBvZiBjcmVhdGVkIGJ5dGVjb2RlIGlzIHRvCi0gICAgICAgIGRldmlhdGUgZnJvbSBkZWZhdWx0IHZhbHVlcy4KLQotICAgICAgICAiIiIKLSAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzb3VyY2UpCi0gICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlID0ge30KLSAgICAgICAgc2VsZi5wYXRoX3RvX2J5dGVjb2RlID0ge30KLSAgICAgICAgc2VsZi5ieXRlY29kZV90b19wYXRoID0ge30KLSAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gYmMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYucGF0aF90b19ieXRlY29kZVtkYXRhWydwYXRoJ11dID0gbmFtZQotICAgICAgICAgICAgc2VsZi5ieXRlY29kZV90b19wYXRoW25hbWVdID0gZGF0YVsncGF0aCddCi0gICAgICAgICAgICBtYWdpYyA9IGRhdGEuZ2V0KCdtYWdpYycsIGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgICAgIG10aW1lID0gaW1wb3J0bGliLl93X2xvbmcoZGF0YS5nZXQoJ210aW1lJywgc2VsZi5kZWZhdWx0X210aW1lKSkKLSAgICAgICAgICAgIHNvdXJjZV9zaXplID0gaW1wb3J0bGliLl93X2xvbmcobGVuKHNlbGYuc291cmNlKSAmIDB4RkZGRkZGRkYpCi0gICAgICAgICAgICBpZiAnYmMnIGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgYmMgPSBkYXRhWydiYyddCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGJjID0gc2VsZi5jb21waWxlX2JjKG5hbWUpCi0gICAgICAgICAgICBzZWxmLm1vZHVsZV9ieXRlY29kZVtuYW1lXSA9IG1hZ2ljICsgbXRpbWUgKyBzb3VyY2Vfc2l6ZSArIGJjCi0KLSAgICBkZWYgY29tcGlsZV9iYyhzZWxmLCBuYW1lKToKLSAgICAgICAgc291cmNlX3BhdGggPSBzZWxmLm1vZHVsZV9wYXRocy5nZXQobmFtZSwgJzx0ZXN0PicpIG9yICc8dGVzdD4nCi0gICAgICAgIGNvZGUgPSBjb21waWxlKHNlbGYuc291cmNlLCBzb3VyY2VfcGF0aCwgJ2V4ZWMnKQotICAgICAgICByZXR1cm4gbWFyc2hhbC5kdW1wcyhjb2RlKQotCi0gICAgZGVmIHNvdXJjZV9tdGltZShzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgbmFtZSBpbiBzZWxmLm1vZHVsZV9wYXRoczoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmRlZmF1bHRfbXRpbWUKLSAgICAgICAgZWxpZiBuYW1lIGluIHNlbGYubW9kdWxlX2J5dGVjb2RlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0KLSAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGVfdG9fcGF0aFtuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYubW9kdWxlX3BhdGhzOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0KLSAgICBkZWYgd3JpdGVfYnl0ZWNvZGUoc2VsZiwgbmFtZSwgYnl0ZWNvZGUpOgotICAgICAgICBzZWxmLm1vZHVsZV9ieXRlY29kZVtuYW1lXSA9IGJ5dGVjb2RlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggaW4gc2VsZi5wYXRoX3RvX21vZHVsZToKLSAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGVsaWYgcGF0aCBpbiBzZWxmLnBhdGhfdG9fYnl0ZWNvZGU6Ci0gICAgICAgICAgICBuYW1lID0gc2VsZi5wYXRoX3RvX2J5dGVjb2RlW3BhdGhdCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVfYnl0ZWNvZGVbbmFtZV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLQotICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5pc19wYWNrYWdlKG5hbWUpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gJ19faW5pdF9fJyBpbiBzZWxmLmJ5dGVjb2RlX3RvX3BhdGhbbmFtZV0KLQotICAgIGRlZiBnZXRfY29kZShzZWxmLCBuYW1lKToKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKLSAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKLSAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc3VwZXIoKS5nZXRfY29kZShuYW1lKQotICAgICAgICAgICAgYXNzZXJ0IGxlbih3KSA9PSAxCi0gICAgICAgICAgICBhc3NlcnQgaXNzdWJjbGFzcyh3WzBdLmNhdGVnb3J5LCBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgICAgICByZXR1cm4gY29kZV9vYmplY3QKLQotY2xhc3MgUHlMb2FkZXJUZXN0cyh0ZXN0aW5nX2FiYy5Mb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeUxvYWRlci4iIiIKLQotICAgIG1vY2tlciA9IFB5TG9hZGVyTW9jawotCi0gICAgZGVmIGVxX2F0dHJzKHNlbGYsIG9iLCAqKmt3YXJncyk6Ci0gICAgICAgIGZvciBhdHRyLCB2YWwgaW4ga3dhcmdzLml0ZW1zKCk6Ci0gICAgICAgICAgICBmb3VuZCA9IGdldGF0dHIob2IsIGF0dHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCB2YWwsCi0gICAgICAgICAgICAgICAgICAgICJ7fSBhdHRyaWJ1dGU6IHt9ICE9IHt9Ii5mb3JtYXQoYXR0ciwgZm91bmQsIHZhbCkpCi0KLSAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAnPG1vZHVsZT4nCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJycsICdwYXRoJywgJ3RvJywgJ21vZHVsZScpCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgc2VsZi5lcV9hdHRycyhtb2R1bGUsIF9fbmFtZV9fPW5hbWUsIF9fZmlsZV9fPXBhdGgsIF9fcGFja2FnZV9fPScnLAotICAgICAgICAgICAgICAgICAgICAgICAgX19sb2FkZXJfXz1tb2NrKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKLSAgICAgICAgcmV0dXJuIG1vY2ssIG5hbWUKLQotICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAnPHBrZz4nCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCBuYW1lLCAnX19pbml0X18nKQotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IHBhdGh9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc3lzLm1vZHVsZXMpCi0gICAgICAgIHNlbGYuZXFfYXR0cnMobW9kdWxlLCBfX25hbWVfXz1uYW1lLCBfX2ZpbGVfXz1wYXRoLAotICAgICAgICAgICAgICAgIF9fcGF0aF9fPVtvcy5wYXRoLmRpcm5hbWUocGF0aCldLCBfX3BhY2thZ2VfXz1uYW1lLAotICAgICAgICAgICAgICAgIF9fbG9hZGVyX189bW9jaykKLSAgICAgICAgcmV0dXJuIG1vY2ssIG5hbWUKLQotICAgIGRlZiB0ZXN0X2xhY2tpbmdfcGFyZW50KHNlbGYpOgotICAgICAgICBuYW1lID0gJ3BrZy5tb2QnCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAncGtnJywgJ21vZCcpCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgc2VsZi5lcV9hdHRycyhtb2R1bGUsIF9fbmFtZV9fPW5hbWUsIF9fZmlsZV9fPXBhdGgsIF9fcGFja2FnZV9fPSdwa2cnLAotICAgICAgICAgICAgICAgICAgICAgICAgX19sb2FkZXJfXz1tb2NrKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKLSAgICAgICAgcmV0dXJuIG1vY2ssIG5hbWUKLQotICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJykKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgbG9hZGVkX21vZHVsZSA9IG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkX21vZHVsZSwgbW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1tuYW1lXSwgbW9kdWxlKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICJtb2QiCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCi0gICAgICAgIG1vZHVsZS5ibGFoID0gTm9uZQotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIG1vY2suc291cmNlID0gYiIxLzAiCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgotICAgICAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbbmFtZV0sIG1vZHVsZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ2JsYWgnKSkKLSAgICAgICAgcmV0dXJuIG1vY2sKLQotICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAibW9kIgotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIG1vY2suc291cmNlID0gYiIxLzAiCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgcmV0dXJuIG1vY2sKLQotCi1jbGFzcyBQeUxvYWRlckNvbXBhdFRlc3RzKFB5TG9hZGVyVGVzdHMpOgotCi0gICAgIiIiVGVzdCB0aGF0IHRoZSBzdWdnZXN0ZWQgY29kZSB0byBtYWtlIGEgbG9hZGVyIHRoYXQgaXMgY29tcGF0aWJsZSBmcm9tCi0gICAgUHl0aG9uIDMuMSBmb3J3YXJkIHdvcmtzLiIiIgotCi0gICAgbW9ja2VyID0gUHlMb2FkZXJDb21wYXRNb2NrCi0KLQotY2xhc3MgUHlMb2FkZXJJbnRlcmZhY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeUxvYWRlciB0byBtYWtlIHN1cmUgdGhhdCB3aGVuIHNvdXJjZV9wYXRoKCkKLSAgICBkb2Vzbid0IHJldHVybiBhIHBhdGggZXZlcnl0aGluZyB3b3JrcyBhcyBleHBlY3RlZC4iIiIKLQotICAgIGRlZiB0ZXN0X25vX3NvdXJjZV9wYXRoKHNlbGYpOgotICAgICAgICAjIE5vIHNvdXJjZSBwYXRoIHNob3VsZCBsZWFkIHRvIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotICAgIGRlZiB0ZXN0X3NvdXJjZV9wYXRoX2lzX05vbmUoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZV93aXRoX3NvdXJjZV9wYXRoKHNlbGYpOgotICAgICAgICAjIGdldF9maWxlbmFtZSgpIHNob3VsZCByZXR1cm4gd2hhdCBzb3VyY2VfcGF0aCgpIHJldHVybnMuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ3NvdXJjZScpCi0gICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IHBhdGh9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfZmlsZW5hbWUobmFtZSksIHBhdGgpCi0KLSAgICBkZWYgdGVzdF9nZXRfZmlsZW5hbWVfbm9fc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgZ2V0X2ZpbGVuYW1lKCkgc2hvdWxkIHJhaXNlIEltcG9ydEVycm9yIGlmIHNvdXJjZV9wYXRoIHJldHVybnMgTm9uZS4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IE5vbmV9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5nZXRfZmlsZW5hbWUobmFtZSkKLQotCi1jbGFzcyBQeVB5Y0xvYWRlclRlc3RzKFB5TG9hZGVyVGVzdHMpOgotCi0gICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXIuIiIiCi0KLSAgICBtb2NrZXIgPSBQeVB5Y0xvYWRlck1vY2sKLQotICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKLSAgICBkZWYgdmVyaWZ5X2J5dGVjb2RlKHNlbGYsIG1vY2ssIG5hbWUpOgotICAgICAgICBhc3NlcnQgbmFtZSBpbiBtb2NrLm1vZHVsZV9wYXRocwotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIG1vY2subW9kdWxlX2J5dGVjb2RlKQotICAgICAgICBtYWdpYyA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzo0XQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hZ2ljLCBpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgIG10aW1lID0gaW1wb3J0bGliLl9yX2xvbmcobW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bNDo4XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdGltZSwgMSkKLSAgICAgICAgc291cmNlX3NpemUgPSBtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVs4OjEyXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2NrLnNvdXJjZSkgJiAweEZGRkZGRkZGLAotICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5fcl9sb25nKHNvdXJjZV9zaXplKSkKLSAgICAgICAgYmMgPSBtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVsxMjpdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmMsIG1vY2suY29tcGlsZV9iYyhuYW1lKSkKLQotICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKLSAgICAgICAgbW9jaywgbmFtZSA9IHN1cGVyKCkudGVzdF9tb2R1bGUoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKLSAgICAgICAgbW9jaywgbmFtZSA9IHN1cGVyKCkudGVzdF9wYWNrYWdlKCkKLSAgICAgICAgc2VsZi52ZXJpZnlfYnl0ZWNvZGUobW9jaywgbmFtZSkKLQotICAgIGRlZiB0ZXN0X2xhY2tpbmdfcGFyZW50KHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X2xhY2tpbmdfcGFyZW50KCkKLSAgICAgICAgc2VsZi52ZXJpZnlfYnl0ZWNvZGUobW9jaywgbmFtZSkKLQotICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKLSAgICAgICAgbW9jaywgbmFtZSA9IHN1cGVyKCkudGVzdF9tb2R1bGVfcmV1c2UoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZShzZWxmKToKLSAgICAgICAgc3VwZXIoKS50ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUoKQotCi0gICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKLSAgICAgICAgc3VwZXIoKS50ZXN0X3VubG9hZGFibGUoKQotCi0KLWNsYXNzIFB5UHljTG9hZGVySW50ZXJmYWNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCBmb3IgdGhlIGludGVyZmFjZSBvZiBpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyLiIiIgotCi0gICAgZGVmIGdldF9maWxlbmFtZV9jaGVjayhzZWxmLCBzcmNfcGF0aCwgYmNfcGF0aCwgZXhwZWN0KToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IHNyY19wYXRofSwge25hbWU6IHsncGF0aCc6IGJjX3BhdGh9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBhc3NlcnQgbW9jay5zb3VyY2VfcGF0aChuYW1lKSA9PSBzcmNfcGF0aAotICAgICAgICAgICAgYXNzZXJ0IG1vY2suYnl0ZWNvZGVfcGF0aChuYW1lKSA9PSBiY19wYXRoCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2suZ2V0X2ZpbGVuYW1lKG5hbWUpLCBleHBlY3QpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX3NvdXJjZV9iYyhzZWxmKToKLSAgICAgICAgIyBXaGVuIHNvdXJjZSBhbmQgYnl0ZWNvZGUgcGF0aHMgcHJlc2VudCwgcmV0dXJuIHRoZSBzb3VyY2UgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soJ3NvdXJjZV9wYXRoJywgJ2JjX3BhdGgnLCAnc291cmNlX3BhdGgnKQotCi0gICAgZGVmIHRlc3RfZmlsZW5hbWVfd2l0aF9zb3VyY2Vfbm9fYmMoc2VsZik6Ci0gICAgICAgICMgV2l0aCBzb3VyY2UgYnV0IG5vIGJjLCByZXR1cm4gc291cmNlIHBhdGguCi0gICAgICAgIHNlbGYuZ2V0X2ZpbGVuYW1lX2NoZWNrKCdzb3VyY2VfcGF0aCcsIE5vbmUsICdzb3VyY2VfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX25vX3NvdXJjZV9iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIG5vdCBzb3VyY2UgYnV0IGJjLCByZXR1cm4gdGhlIGJjIHBhdGguCi0gICAgICAgIHNlbGYuZ2V0X2ZpbGVuYW1lX2NoZWNrKE5vbmUsICdiY19wYXRoJywgJ2JjX3BhdGgnKQotCi0gICAgZGVmIHRlc3RfZmlsZW5hbWVfd2l0aF9ub19zb3VyY2Vfb3JfYmMoc2VsZik6Ci0gICAgICAgICMgV2l0aCBubyBzb3VyY2Ugb3IgYmMsIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIHtuYW1lOiB7J3BhdGgnOiBOb25lfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmdldF9maWxlbmFtZShuYW1lKQotCi0KLWNsYXNzIFNraXBXcml0aW5nQnl0ZWNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgYnl0ZWNvZGUgaXMgcHJvcGVybHkgaGFuZGxlZCBiYXNlZCBvbgotICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLiIiIgotCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiBydW5fdGVzdChzZWxmLCBkb250X3dyaXRlX2J5dGVjb2RlKToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gZG9udF93cml0ZV9ieXRlY29kZQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdChuYW1lIGluIG1vY2subW9kdWxlX2J5dGVjb2RlLCBkb250X3dyaXRlX2J5dGVjb2RlKQotCi0gICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGVfd3JpdHRlbihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChUcnVlKQotCi0gICAgZGVmIHRlc3RfYnl0ZWNvZGVfd3JpdHRlbihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChGYWxzZSkKLQotCi1jbGFzcyBSZWdlbmVyYXRlZEJ5dGVjb2RlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCB0aGF0IGJ5dGVjb2RlIGlzIHJlZ2VuZXJhdGVkIGFzIGV4cGVjdGVkLiIiIgotCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiB0ZXN0X2RpZmZlcmVudF9tYWdpYyhzZWxmKToKLSAgICAgICAgIyBBIGRpZmZlcmVudCBtYWdpYyBudW1iZXIgc2hvdWxkIGxlYWQgdG8gbmV3IGJ5dGVjb2RlLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgYmFkX21hZ2ljID0gYidceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBhc3NlcnQgYmFkX21hZ2ljICE9IGltcC5nZXRfbWFnaWMoKQotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyl9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmFtZTogeydwYXRoJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9kLmJ5dGVjb2RlJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hZ2ljJzogYmFkX21hZ2ljfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIG1vY2subW9kdWxlX2J5dGVjb2RlKQotICAgICAgICBtYWdpYyA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzo0XQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hZ2ljLCBpbXAuZ2V0X21hZ2ljKCkpCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHRlc3Rfb2xkX210aW1lKHNlbGYpOgotICAgICAgICAjIEJ5dGVjb2RlIHdpdGggYW4gb2xkZXIgbXRpbWUgc2hvdWxkIGJlIHJlZ2VuZXJhdGVkLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgb2xkX210aW1lID0gUHlQeWNMb2FkZXJNb2NrLmRlZmF1bHRfbXRpbWUgLSAxCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0sCi0gICAgICAgICAgICAgICAge25hbWU6IHsncGF0aCc6ICdwYXRoL3RvL21vZC5ieXRlY29kZScsICdtdGltZSc6IG9sZF9tdGltZX19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBtb2NrLm1vZHVsZV9ieXRlY29kZSkKLSAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3JfbG9uZyhtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVs0OjhdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lLCBQeVB5Y0xvYWRlck1vY2suZGVmYXVsdF9tdGltZSkKLQotCi1jbGFzcyBCYWRCeXRlY29kZUZhaWx1cmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IGltcG9ydCBmYWlsdXJlcyB3aGVuIHRoZXJlIGlzIG5vIHNvdXJjZSBhbmQgcGFydHMgb2YgdGhlIGJ5dGVjb2RlCi0gICAgaXMgYmFkLiIiIgotCi0gICAgZGVmIHRlc3RfYmFkX21hZ2ljKHNlbGYpOgotICAgICAgICAjIEEgYmFkIG1hZ2ljIG51bWJlciBzaG91bGQgbGVhZCB0byBhbiBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJhZF9tYWdpYyA9IGInXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgYmMgPSB7bmFtZToKLSAgICAgICAgICAgICAgICB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyksCi0gICAgICAgICAgICAgICAgICdtYWdpYyc6IGJhZF9tYWdpY319Ci0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCBiYykKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbmFtZSkKLQotICAgIGRlZiB0ZXN0X25vX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIE1pc3NpbmcgY29kZSBvYmplY3QgYnl0ZWNvZGUgc2hvdWxkIGxlYWQgdG8gYW4gRU9GRXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYyA9IHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyksICdiYyc6IGInJ319Ci0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCBiYykKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotICAgIGRlZiB0ZXN0X2JhZF9ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBNYWxmb3JtZWQgY29kZSBvYmplY3QgYnl0ZWNvZGUgc2hvdWxkIGxlYWQgdG8gYSBWYWx1ZUVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgYmMgPSB7bmFtZTogeydwYXRoJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpLCAnYmMnOiBiJzEyMzQnfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0KLQotZGVmIHJhaXNlX0ltcG9ydEVycm9yKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotY2xhc3MgTWlzc2luZ1BhdGhzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiBhIHNvdXJjZSBvciBieXRlY29kZSBwYXRoIGRvZXMgbm90IGV4aXN0IChlaXRoZXIKLSAgICBmcm9tICpfcGF0aCByZXR1cm5pbmcgTm9uZSBvciByYWlzaW5nIEltcG9ydEVycm9yKS4iIiIKLQotICAgIGRlZiB0ZXN0X3NvdXJjZV9wYXRoX05vbmUoc2VsZik6Ci0gICAgICAgICMgQnl0ZWNvZGUgc2hvdWxkIGJlIHVzZWQgd2hlbiBzb3VyY2VfcGF0aCByZXR1cm5zIE5vbmUsIGFsb25nIHdpdGgKLSAgICAgICAgIyBfX2ZpbGVfXyBiZWluZyBzZXQgdG8gdGhlIGJ5dGVjb2RlIHBhdGguCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBieXRlY29kZV9wYXRoID0gJ3BhdGgvdG8vbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwge25hbWU6IHsncGF0aCc6IGJ5dGVjb2RlX3BhdGh9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBieXRlY29kZV9wYXRoKQotCi0gICAgIyBUZXN0aW5nIGZvciBieXRlY29kZV9wYXRoIHJldHVybmluZyBOb25lIGhhbmRsZWQgYnkgYWxsIHRlc3RzIHdoZXJlIG5vCi0gICAgIyBieXRlY29kZSBpbml0aWFsbHkgZXhpc3RzLgotCi0gICAgZGVmIHRlc3RfYWxsX3BhdGhzX05vbmUoc2VsZik6Ci0gICAgICAgICMgSWYgYWxsICpfcGF0aCBtZXRob2RzIHJldHVybiBOb25lLCByYWlzZSBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBuYW1lKQotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfSW1wb3J0RXJyb3Ioc2VsZik6Ci0gICAgICAgICMgQW4gSW1wb3J0RXJyb3IgZnJvbSBzb3VyY2VfcGF0aCBzaG91bGQgdHJpZ2dlciBhbiBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe30sIHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2QnKX19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfYnl0ZWNvZGVfcGF0aF9JbXBvcnRFcnJvcihzZWxmKToKLSAgICAgICAgIyBBbiBJbXBvcnRFcnJvciBmcm9tIGJ5dGVjb2RlX3BhdGggc2hvdWxkIHRyaWdnZXIgYW4gSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyl9KQotICAgICAgICBiYWRfbWV0aCA9IHR5cGVzLk1ldGhvZFR5cGUocmFpc2VfSW1wb3J0RXJyb3IsIG1vY2spCi0gICAgICAgIG1vY2suYnl0ZWNvZGVfcGF0aCA9IGJhZF9tZXRoCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0KLQotY2xhc3MgU291cmNlTG9hZGVyVGVzdEhhcm5lc3ModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYsICosIGlzX3BhY2thZ2U9VHJ1ZSwgKiprd2FyZ3MpOgotICAgICAgICBzZWxmLnBhY2thZ2UgPSAncGtnJwotICAgICAgICBpZiBpc19wYWNrYWdlOgotICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJ19faW5pdF9fLnB5JykKLSAgICAgICAgICAgIHNlbGYubmFtZSA9IHNlbGYucGFja2FnZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAnbW9kJwotICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJy4nLmpvaW4oWydtb2QnLCAncHknXSkpCi0gICAgICAgICAgICBzZWxmLm5hbWUgPSAnLicuam9pbihbc2VsZi5wYWNrYWdlLCBtb2R1bGVfbmFtZV0pCi0gICAgICAgIHNlbGYuY2FjaGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5sb2FkZXIgPSBzZWxmLmxvYWRlcl9tb2NrKHNlbGYucGF0aCwgKiprd2FyZ3MpCi0KLSAgICBkZWYgdmVyaWZ5X21vZHVsZShzZWxmLCBtb2R1bGUpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc2VsZi5uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgc2VsZi5wYXRoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLCBzZWxmLmNhY2hlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNlbGYucGFja2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19sb2FkZXJfXywgc2VsZi5sb2FkZXIpCi0gICAgICAgIHZhbHVlcyA9IG1vZHVsZS5fLnNwbGl0KCc6OicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzBdLCBzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzFdLCBzZWxmLnBhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzJdLCBzZWxmLmNhY2hlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbM10sIHNlbGYucGFja2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbNF0sIHJlcHIoc2VsZi5sb2FkZXIpKQotCi0gICAgZGVmIHZlcmlmeV9jb2RlKHNlbGYsIGNvZGVfb2JqZWN0KToKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoc2VsZi5uYW1lKQotICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzZWxmLnBhdGgKLSAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBzZWxmLmNhY2hlZAotICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBzZWxmLnBhY2thZ2UKLSAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmLmxvYWRlcgotICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbXQotICAgICAgICBleGVjKGNvZGVfb2JqZWN0LCBtb2R1bGUuX19kaWN0X18pCi0gICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCi0KLQotY2xhc3MgU291cmNlT25seUxvYWRlclRlc3RzKFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzKToKLQotICAgICIiIlRlc3QgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIgZm9yIHNvdXJjZS1vbmx5IGxvYWRpbmcuCi0KLSAgICBSZWxvYWQgdGVzdGluZyBpcyBzdWJzdW1lZCBieSB0aGUgdGVzdHMgZm9yCi0gICAgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIuCi0KLSAgICAiIiIKLQotICAgIGxvYWRlcl9tb2NrID0gU291cmNlT25seUxvYWRlck1vY2sKLQotICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6Ci0gICAgICAgICMgVmVyaWZ5IHRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIHN0cmluZy4KLSAgICAgICAgIyBJZiBhbiBJT0Vycm9yIGlzIHJhaXNlZCBieSBnZXRfZGF0YSB0aGVuIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICBleHBlY3RlZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5zb3VyY2UuZGVjb2RlKCd1dGYtOCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpLCBleHBlY3RlZF9zb3VyY2UpCi0gICAgICAgIGRlZiByYWlzZV9JT0Vycm9yKHBhdGgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmxvYWRlci5nZXRfZGF0YSA9IHJhaXNlX0lPRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgc2VsZi5uYW1lKQotCi0gICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKLSAgICAgICAgIyBQcm9wZXJseSBkZXRlY3Qgd2hlbiBsb2FkaW5nIGEgcGFja2FnZS4KLSAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPUZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKLSAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUgKyAnLl9faW5pdF9fJykpCi0KLSAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKLSAgICAgICAgIyBWZXJpZnkgdGhlIGNvZGUgb2JqZWN0IGlzIGNyZWF0ZWQuCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQotCi0gICAgZGVmIHRlc3RfbG9hZF9tb2R1bGUoc2VsZik6Ci0gICAgICAgICMgTG9hZGluZyBhIG1vZHVsZSBzaG91bGQgc2V0IF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywKLSAgICAgICAgIyBfX3BhdGhfXyAoZm9yIHBhY2thZ2VzKSwgX19maWxlX18sIGFuZCBfX2NhY2hlZF9fLgotICAgICAgICAjIFRoZSBtb2R1bGUgc2hvdWxkIGFsc28gYmUgcHV0IGludG8gc3lzLm1vZHVsZXMuCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYXRoX18sIFtvcy5wYXRoLmRpcm5hbWUoc2VsZi5wYXRoKV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgc3lzLm1vZHVsZXMpCi0KLSAgICBkZWYgdGVzdF9wYWNrYWdlX3NldHRpbmdzKHNlbGYpOgotICAgICAgICAjIF9fcGFja2FnZV9fIG5lZWRzIHRvIGJlIHNldCwgd2hpbGUgX19wYXRoX18gaXMgc2V0IG9uIGlmIHRoZSBtb2R1bGUKLSAgICAgICAgIyBpcyBhIHBhY2thZ2UuCi0gICAgICAgICMgVGVzdGluZyB0aGUgdmFsdWVzIGZvciBhIHBhY2thZ2UgYXJlIGNvdmVyZWQgYnkgdGVzdF9sb2FkX21vZHVsZS4KLSAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPUZhbHNlKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShzZWxmLm5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5uYW1lKQotICAgICAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotCi0gICAgZGVmIHRlc3RfZ2V0X3NvdXJjZV9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgIyBTb3VyY2UgaXMgY29uc2lkZXJlZCBlbmNvZGVkIGluIFVURi04IGJ5IGRlZmF1bHQgdW5sZXNzIG90aGVyd2lzZQotICAgICAgICAjIHNwZWNpZmllZCBieSBhbiBlbmNvZGluZyBsaW5lLgotICAgICAgICBzb3VyY2UgPSAiXyA9ICfDvCciCi0gICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgcmV0dXJuZWRfc291cmNlID0gc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCi0gICAgICAgIHNvdXJjZSA9ICIjIGNvZGluZzogbGF0aW4tMVxuXyA9IMO8IgotICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykKLSAgICAgICAgcmV0dXJuZWRfc291cmNlID0gc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCi0KLQotQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwgInN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUiKQotY2xhc3MgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyk6Ci0KLSAgICAiIiJUZXN0IGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyJ3MgdXNlIG9mIGJ5dGVjb2RlLgotCi0gICAgU291cmNlLW9ubHkgdGVzdGluZyBoYW5kbGVkIGJ5IFNvdXJjZU9ubHlMb2FkZXJUZXN0cy4KLQotICAgICIiIgotCi0gICAgbG9hZGVyX21vY2sgPSBTb3VyY2VMb2FkZXJNb2NrCi0KLSAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QsICosIGJ5dGVjb2RlX3dyaXR0ZW49RmFsc2UpOgotICAgICAgICBzdXBlcigpLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQotICAgICAgICBpZiBieXRlY29kZV93cml0dGVuOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmNhY2hlZCwgc2VsZi5sb2FkZXIud3JpdHRlbikKLSAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoaW1wLmdldF9tYWdpYygpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX210aW1lKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKGltcG9ydGxpYi5fd19sb25nKHNlbGYubG9hZGVyLnNvdXJjZV9zaXplKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci53cml0dGVuW3NlbGYuY2FjaGVkXSwgYnl0ZXMoZGF0YSkpCi0KLSAgICBkZWYgdGVzdF9jb2RlX3dpdGhfZXZlcnl0aGluZyhzZWxmKToKLSAgICAgICAgIyBXaGVuIGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsuCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQotCi0gICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6Ci0gICAgICAgICMgSWYgbm8gYnl0ZWNvZGUgZXhpc3RzIHRoZW4gbW92ZSBvbiB0byB0aGUgc291cmNlLgotICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCi0gICAgICAgICMgU2FuaXR5IGNoZWNrCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6Ci0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCi0KLSAgICBkZWYgdGVzdF9jb2RlX2JhZF90aW1lc3RhbXAoc2VsZik6Ci0gICAgICAgICMgQnl0ZWNvZGUgaXMgb25seSB1c2VkIHdoZW4gdGhlIHRpbWVzdGFtcCBtYXRjaGVzIHRoZSBzb3VyY2UgRVhBQ1RMWS4KLSAgICAgICAgZm9yIHNvdXJjZV9tdGltZSBpbiAoMCwgMik6Ci0gICAgICAgICAgICBhc3NlcnQgc291cmNlX210aW1lICE9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQotICAgICAgICAgICAgb3JpZ2luYWwgPSBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IHNvdXJjZV9tdGltZQotICAgICAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCi0gICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQotICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCi0gICAgICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUgPSBvcmlnaW5hbAotCi0gICAgZGVmIHRlc3RfY29kZV9iYWRfbWFnaWMoc2VsZik6Ci0gICAgICAgICMgU2tpcCBvdmVyIGJ5dGVjb2RlIHdpdGggYSBiYWQgbWFnaWMgbnVtYmVyLgotICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCi0gICAgICAgICMgSWYgYnl0ZWNvZGUgaXMgdXNlZCB0aGVuIEVPRkVycm9yIHdvdWxkIGJlIHJhaXNlZCBieSBtYXJzaGFsLgotICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCwgYnl0ZWNvZGVfd3JpdHRlbj1UcnVlKQotCi0gICAgZGVmIHRlc3RfZG9udF93cml0ZV9ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBpcyBub3Qgd3JpdHRlbiBpZiBzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlLgotICAgICAgICAjIENhbiBhc3N1bWUgaXQgaXMgZmFsc2UgYWxyZWFkeSB0aGFua3MgdG8gdGhlIHNraXBJZiBjbGFzcyBkZWNvcmF0b3IuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuYnl0ZWNvZGVfcGF0aCA9ICI8ZG9lcyBub3QgZXhpc3Q+IgotICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQotCi0gICAgZGVmIHRlc3Rfbm9fc2V0X2RhdGEoc2VsZik6Ci0gICAgICAgICMgSWYgc2V0X2RhdGEgaXMgbm90IGRlZmluZWQsIG9uZSBjYW4gc3RpbGwgcmVhZCBieXRlY29kZS4KLSAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQotICAgICAgICBvcmlnaW5hbF9zZXRfZGF0YSA9IHNlbGYubG9hZGVyLl9fY2xhc3NfXy5zZXRfZGF0YQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkZWwgc2VsZi5sb2FkZXIuX19jbGFzc19fLnNldF9kYXRhCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLmxvYWRlci5fX2NsYXNzX18uc2V0X2RhdGEgPSBvcmlnaW5hbF9zZXRfZGF0YQotCi0gICAgZGVmIHRlc3Rfc2V0X2RhdGFfcmFpc2VzX2V4Y2VwdGlvbnMoc2VsZik6Ci0gICAgICAgICMgUmFpc2luZyBOb3RJbXBsZW1lbnRlZEVycm9yIG9yIElPRXJyb3IgaXMgb2theSBmb3Igc2V0X2RhdGEuCi0gICAgICAgIGRlZiByYWlzZV9leGNlcHRpb24oZXhjKToKLSAgICAgICAgICAgIGRlZiBjbG9zdXJlKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXhjCi0gICAgICAgICAgICByZXR1cm4gY2xvc3VyZQotCi0gICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKLSAgICAgICAgc2VsZi5sb2FkZXIuc2V0X2RhdGEgPSByYWlzZV9leGNlcHRpb24oTm90SW1wbGVtZW50ZWRFcnJvcikKLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLQotY2xhc3MgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2UoKS4iIiIKLQotICAgIGRlZiB0ZXN0X2RlZmF1bHRfZW5jb2Rpbmcoc2VsZik6Ci0gICAgICAgICMgU2hvdWxkIGhhdmUgbm8gcHJvYmxlbXMgd2l0aCBVVEYtOCB0ZXh0LgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFNvdXJjZU9ubHlMb2FkZXJNb2NrKCdtb2QuZmlsZScpCi0gICAgICAgIHNvdXJjZSA9ICd4ID0gIsO8IicKLSAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIHJldHVybmVkX3NvdXJjZSA9IG1vY2suZ2V0X3NvdXJjZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQotCi0gICAgZGVmIHRlc3RfZGVjb2RlZF9zb3VyY2Uoc2VsZik6Ci0gICAgICAgICMgRGVjb2Rpbmcgc2hvdWxkIHdvcmsuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soIm1vZC5maWxlIikKLSAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBMYXRpbi0xXG54PSfDvCciCi0gICAgICAgIGFzc2VydCBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykgIT0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLQotICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKLSAgICAgICAgIyBQRVAgMzAyIHNheXMgdW5pdmVyc2FsIG5ld2xpbmVzIHNob3VsZCBiZSB1c2VkLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFNvdXJjZU9ubHlMb2FkZXJNb2NrKCdtb2QuZmlsZScpCi0gICAgICAgIHNvdXJjZSA9ICJ4ID0gNDJcclxueSA9IC0xM1xyXG4iCi0gICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICBleHBlY3QgPSBpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIFRydWUpLmRlY29kZShzb3VyY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfc291cmNlKG5hbWUpLCBleHBlY3QpCi0KLQotY2xhc3MgQWJzdHJhY3RNZXRob2RJbXBsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCB0aGUgY29uY3JldGUgYWJzdHJhY3RtZXRob2QgaW1wbGVtZW50YXRpb25zLiIiIgotCi0gICAgY2xhc3MgTWV0YVBhdGhGaW5kZXIoYWJjLk1ldGFQYXRoRmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGgpCi0KLSAgICBjbGFzcyBQYXRoRW50cnlGaW5kZXIoYWJjLlBhdGhFbnRyeUZpbmRlcik6Ci0gICAgICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9tb2R1bGUoXykKLQotICAgICAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmZpbmRfbG9hZGVyKF8pCi0KLSAgICBjbGFzcyBGaW5kZXIoYWJjLkZpbmRlcik6Ci0gICAgICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aCk6Ci0gICAgICAgICAgICBzdXBlcigpLmZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoKQotCi0gICAgY2xhc3MgTG9hZGVyKGFiYy5Mb2FkZXIpOgotICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgc3VwZXIoKS5sb2FkX21vZHVsZShmdWxsbmFtZSkKLSAgICAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgICAgICBzdXBlcigpLm1vZHVsZV9yZXByKG1vZHVsZSkKLQotICAgIGNsYXNzIFJlc291cmNlTG9hZGVyKExvYWRlciwgYWJjLlJlc291cmNlTG9hZGVyKToKLSAgICAgICAgZGVmIGdldF9kYXRhKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5nZXRfZGF0YShfKQotCi0gICAgY2xhc3MgSW5zcGVjdExvYWRlcihMb2FkZXIsIGFiYy5JbnNwZWN0TG9hZGVyKToKLSAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmlzX3BhY2thZ2UoXykKLQotICAgICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmdldF9jb2RlKF8pCi0KLSAgICAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmdldF9zb3VyY2UoXykKLQotICAgIGNsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbnNwZWN0TG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyKToKLSAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X2ZpbGVuYW1lKF8pCi0KLSAgICBjbGFzcyBTb3VyY2VMb2FkZXIoUmVzb3VyY2VMb2FkZXIsIEV4ZWN1dGlvbkxvYWRlciwgYWJjLlNvdXJjZUxvYWRlcik6Ci0gICAgICAgIHBhc3MKLQotICAgIGNsYXNzIFB5TG9hZGVyKFJlc291cmNlTG9hZGVyLCBJbnNwZWN0TG9hZGVyLCBhYmMuUHlMb2FkZXIpOgotICAgICAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLnNvdXJjZV9wYXRoKF8pCi0KLSAgICBjbGFzcyBQeVB5Y0xvYWRlcihQeUxvYWRlciwgYWJjLlB5UHljTG9hZGVyKToKLSAgICAgICAgZGVmIGJ5dGVjb2RlX3BhdGgoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmJ5dGVjb2RlX3BhdGgoXykKLQotICAgICAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5zb3VyY2VfbXRpbWUoXykKLQotICAgICAgICBkZWYgd3JpdGVfYnl0ZWNvZGUoc2VsZiwgXywgXzIpOgotICAgICAgICAgICAgc3VwZXIoKS53cml0ZV9ieXRlY29kZShfLCBfMikKLQotICAgIGRlZiByYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLCBpbnMsICphcmdzKToKLSAgICAgICAgZm9yIG1ldGhvZF9uYW1lIGluIGFyZ3M6Ci0gICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKGlucywgbWV0aG9kX25hbWUpCi0gICAgICAgICAgICBhcmdfY291bnQgPSBsZW4oaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhtZXRob2QpWzBdKSAtIDEKLSAgICAgICAgICAgIGFyZ3MgPSBbJyddICogYXJnX2NvdW50Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWV0aG9kKCphcmdzKQotICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBtc2cgPSAie30ue30gZGlkIG5vdCByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yIgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cuZm9ybWF0KGlucy5fX2NsYXNzX18uX19uYW1lX18sIG1ldGhvZF9uYW1lKSkKLQotICAgIGRlZiB0ZXN0X0xvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkxvYWRlcigpLCAnbG9hZF9tb2R1bGUnKQotCi0gICAgIyBYWFggbWlzcGxhY2VkOyBzaG91bGQgYmUgc29tZXdoZXJlIGVsc2UKLSAgICBkZWYgdGVzdF9GaW5kZXIoc2VsZik6Ci0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5GaW5kZXIoKSwgJ2ZpbmRfbW9kdWxlJykKLQotICAgIGRlZiB0ZXN0X1Jlc291cmNlTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuUmVzb3VyY2VMb2FkZXIoKSwgJ2xvYWRfbW9kdWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2RhdGEnKQotCi0gICAgZGVmIHRlc3RfSW5zcGVjdExvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkluc3BlY3RMb2FkZXIoKSwgJ2xvYWRfbW9kdWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfcGFja2FnZScsICdnZXRfY29kZScsICdnZXRfc291cmNlJykKLQotICAgIGRlZiB0ZXN0X0V4ZWN1dGlvbkxvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkV4ZWN1dGlvbkxvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19wYWNrYWdlJywgJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZmlsZW5hbWUnKQotCi0gICAgZGVmIHRlc3RfU291cmNlTG9hZGVyKHNlbGYpOgotICAgICAgICBpbnMgPSBzZWxmLlNvdXJjZUxvYWRlcigpCi0gICAgICAgICMgUmVxdWlyZWQgYWJzdHJhY3RtZXRob2RzLgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKGlucywgJ2dldF9maWxlbmFtZScsICdnZXRfZGF0YScpCi0gICAgICAgICMgT3B0aW9uYWwgYWJzdHJhY3RtZXRob2RzLgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKGlucywncGF0aF9zdGF0cycsICdzZXRfZGF0YScpCi0KLSAgICBkZWYgdGVzdF9QeUxvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLlB5TG9hZGVyKCksICdzb3VyY2VfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9kYXRhJywgJ2lzX3BhY2thZ2UnKQotCi0gICAgZGVmIHRlc3RfUHlQeWNMb2FkZXIoc2VsZik6Ci0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5QeVB5Y0xvYWRlcigpLCAnc291cmNlX3BhdGgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VfbXRpbWUnLCAnYnl0ZWNvZGVfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dyaXRlX2J5dGVjb2RlJykKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChQeUxvYWRlclRlc3RzLCBQeUxvYWRlckNvbXBhdFRlc3RzLAotICAgICAgICAgICAgICAgICAgICBQeUxvYWRlckludGVyZmFjZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBQeVB5Y0xvYWRlclRlc3RzLCBQeVB5Y0xvYWRlckludGVyZmFjZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBTa2lwV3JpdGluZ0J5dGVjb2RlVGVzdHMsIFJlZ2VuZXJhdGVkQnl0ZWNvZGVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgQmFkQnl0ZWNvZGVGYWlsdXJlVGVzdHMsIE1pc3NpbmdQYXRoc1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICBTb3VyY2VPbmx5TG9hZGVyVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdE1ldGhvZEltcGxUZXN0cykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQppbmRleCAyNDExNzNmLi5lZmQzMTQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKQEAgLTEsOSArMSwxMCBAQAogIiIiVGVzdCBjYXNlLXNlbnNpdGl2aXR5IChQRVAgMjM1KS4iIiIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKLWltcG9ydCBpbXAKKworaW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQgYXMgdGVzdF9zdXBwb3J0CkBAIC0xMSw3ICsxMiw3IEBACiAKIAogQHV0aWwuY2FzZV9pbnNlbnNpdGl2ZV90ZXN0cwotY2xhc3MgQ2FzZVNlbnNpdGl2aXR5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0OgogCiAgICAgIiIiUEVQIDIzNSBkaWN0YXRlcyB0aGF0IG9uIGNhc2UtcHJlc2VydmluZywgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbXMKICAgICB0aGF0IGltcG9ydHMgYXJlIGNhc2Utc2Vuc2l0aXZlIHVubGVzcyB0aGUgUFlUSE9OQ0FTRU9LIGVudmlyb25tZW50CkBAIC0yMCwxMyArMjEsMTIgQEAKICAgICBuYW1lID0gJ01vRHVMZScKICAgICBhc3NlcnQgbmFtZSAhPSBuYW1lLmxvd2VyKCkKIAotICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgpOgotICAgICAgICBmaW5kZXIgPSBtYWNoaW5lcnkuRmlsZUZpbmRlcihwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUykpCi0gICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUoc2VsZi5uYW1lKQorICAgIGRlZiBmaW5kZXIoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpKQogCiAgICAgZGVmIHNlbnNpdGl2aXR5X3Rlc3Qoc2VsZik6CiAgICAgICAgICIiIkxvb2sgZm9yIGEgbW9kdWxlIHdpdGggbWF0Y2hpbmcgYW5kIG5vbi1tYXRjaGluZyBzZW5zaXRpdml0eS4iIiIKQEAgLTM2LDM1ICszNiw0OCBAQAogICAgICAgICB3aXRoIGNvbnRleHQgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHNlbnNpdGl2ZV9wYXRoID0gb3MucGF0aC5qb2luKG1hcHBpbmdbJy5yb290J10sICdzZW5zaXRpdmUnKQogICAgICAgICAgICAgaW5zZW5zaXRpdmVfcGF0aCA9IG9zLnBhdGguam9pbihtYXBwaW5nWycucm9vdCddLCAnaW5zZW5zaXRpdmUnKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZChzZW5zaXRpdmVfcGF0aCksIHNlbGYuZmluZChpbnNlbnNpdGl2ZV9wYXRoKQorICAgICAgICAgICAgc2Vuc2l0aXZlX2ZpbmRlciA9IHNlbGYuZmluZGVyKHNlbnNpdGl2ZV9wYXRoKQorICAgICAgICAgICAgaW5zZW5zaXRpdmVfZmluZGVyID0gc2VsZi5maW5kZXIoaW5zZW5zaXRpdmVfcGF0aCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQoc2Vuc2l0aXZlX2ZpbmRlciksIHNlbGYuZmluZChpbnNlbnNpdGl2ZV9maW5kZXIpCiAKICAgICBkZWYgdGVzdF9zZW5zaXRpdmUoc2VsZik6CiAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CiAgICAgICAgICAgICBlbnYudW5zZXQoJ1BZVEhPTkNBU0VPSycpCi0gICAgICAgICAgICBpZiBiJ1BZVEhPTkNBU0VPSycgaW4gX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBpbiBzZWxmLmltcG9ydGxpYi5fYm9vdHN0cmFwLl9vcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ29zLmVudmlyb24gY2hhbmdlcyBub3QgcmVmbGVjdGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfb3MuZW52aXJvbicpCiAgICAgICAgICAgICBzZW5zaXRpdmUsIGluc2Vuc2l0aXZlID0gc2VsZi5zZW5zaXRpdml0eV90ZXN0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbnNpdGl2ZSwgJ2xvYWRfbW9kdWxlJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzZW5zaXRpdmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5zZW5zaXRpdmUpCiAKICAgICBkZWYgdGVzdF9pbnNlbnNpdGl2ZShzZWxmKToKICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKICAgICAgICAgICAgIGVudi5zZXQoJ1BZVEhPTkNBU0VPSycsICcxJykKLSAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBub3QgaW4gX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBub3QgaW4gc2VsZi5pbXBvcnRsaWIuX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5lbnZpcm9uIGNoYW5nZXMgbm90IHJlZmxlY3RlZCBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX29zLmVudmlyb24nKQogICAgICAgICAgICAgc2Vuc2l0aXZlLCBpbnNlbnNpdGl2ZSA9IHNlbGYuc2Vuc2l0aXZpdHlfdGVzdCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZW5zaXRpdmUsICdsb2FkX21vZHVsZScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc2Vuc2l0aXZlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIHNlbnNpdGl2ZS5nZXRfZmlsZW5hbWUoc2VsZi5uYW1lKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGluc2Vuc2l0aXZlLCAnbG9hZF9tb2R1bGUnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGluc2Vuc2l0aXZlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIGluc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQogCitjbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0UEVQMzAyKENhc2VTZW5zaXRpdml0eVRlc3QpOgorICAgIGRlZiBmaW5kKHNlbGYsIGZpbmRlcik6CisgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUoc2VsZi5uYW1lKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDYXNlU2Vuc2l0aXZpdHlUZXN0KQorRnJvemVuX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVAzMDIsIFNvdXJjZV9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDMwMiwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworY2xhc3MgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDQ1MShDYXNlU2Vuc2l0aXZpdHlUZXN0KToKKyAgICBkZWYgZmluZChzZWxmLCBmaW5kZXIpOgorICAgICAgICBmb3VuZCA9IGZpbmRlci5maW5kX3NwZWMoc2VsZi5uYW1lKQorICAgICAgICByZXR1cm4gZm91bmQubG9hZGVyIGlmIGZvdW5kIGlzIG5vdCBOb25lIGVsc2UgZm91bmQKKworRnJvemVuX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVA0NTEsIFNvdXJjZV9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDQ1MSwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maWxlX2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5CmluZGV4IGQ1OTk2OWEuLjI1YTNkYWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5CkBAIC0xLDUyICsxLDUyIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1pbXBvcnQgaW1wb3J0bGliCi1pbXBvcnQgaW1wb3J0bGliLmFiYwogZnJvbSAuLiBpbXBvcnQgYWJjCiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIAoraW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQoraW1wb3J0bGliX2FiYyA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLmFiYycpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQoraW1wb3J0bGliX3V0aWwgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKwogaW1wb3J0IGVycm5vCi1pbXBvcnQgaW1wCiBpbXBvcnQgbWFyc2hhbAogaW1wb3J0IG9zCiBpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN0YXQKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YywgdW5sb2FkCiAKIAotY2xhc3MgU2ltcGxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTaW1wbGVUZXN0KGFiYy5Mb2FkZXJUZXN0cyk6CiAKICAgICAiIiJTaG91bGQgaGF2ZSBubyBpc3N1ZSBpbXBvcnRpbmcgYSBzb3VyY2UgbW9kdWxlIFtiYXNpY10uIEFuZCBpZiB0aGVyZSBpcwogICAgIGEgc3ludGF4IGVycm9yLCBpdCBzaG91bGQgcmFpc2UgYSBTeW50YXhFcnJvciBbc3ludGF4IGVycm9yXS4KIAogICAgICIiIgogCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnc3BhbScKKyAgICAgICAgc2VsZi5maWxlcGF0aCA9IG9zLnBhdGguam9pbignaGFtJywgc2VsZi5uYW1lICsgJy5weScpCisgICAgICAgIHNlbGYubG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZXBhdGgpCisKICAgICBkZWYgdGVzdF9sb2FkX21vZHVsZV9BUEkoc2VsZik6Ci0gICAgICAgICMgSWYgZnVsbG5hbWUgaXMgbm90IHNwZWNpZmllZCB0aGF0IGFzc3VtZSBzZWxmLm5hbWUgaXMgZGVzaXJlZC4KLSAgICAgICAgY2xhc3MgVGVzdGVyTWl4aW4oaW1wb3J0bGliLmFiYy5Mb2FkZXIpOgotICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKTogcmV0dXJuIGZ1bGxuYW1lCi0gICAgICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKTogcmV0dXJuICc8bW9kdWxlPicKKyAgICAgICAgY2xhc3MgVGVzdGVyKHNlbGYuYWJjLkZpbGVMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgXyk6IHJldHVybiAnYXR0ciA9IDQyJworICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgXyk6IHJldHVybiBGYWxzZQogCi0gICAgICAgIGNsYXNzIFRlc3RlcihpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIsIFRlc3Rlck1peGluKToKLSAgICAgICAgICAgIGRlZiBnZXRfY29kZShzZWxmLCBfKTogcGFzcwotICAgICAgICAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgXyk6IHBhc3MKLSAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIF8pOiBwYXNzCi0KLSAgICAgICAgbmFtZSA9ICdtb2RfbmFtZScKLSAgICAgICAgbG9hZGVyID0gVGVzdGVyKG5hbWUsICdzb21lX3BhdGgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGxvYWRlci5sb2FkX21vZHVsZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGxvYWRlci5sb2FkX21vZHVsZShOb25lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKGxvYWRlci5uYW1lICsgJ1hYWCcpCisgICAgICAgIGxvYWRlciA9IFRlc3RlcignYmxhaCcsICdibGFoLnB5JykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubG9hZCwgJ2JsYWgnKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgpICAjIFNob3VsZCBub3QgcmFpc2UgYW4gZXhjZXB0aW9uLgogCiAgICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX0FQSShzZWxmKToKICAgICAgICAgIyBJZiBmdWxsbmFtZSBpcyBub3Qgc2V0IHRoZW4gYXNzdW1lIHNlbGYucGF0aCBpcyBkZXNpcmVkLgotICAgICAgICBjbGFzcyBUZXN0ZXIoaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyKToKKyAgICAgICAgY2xhc3MgVGVzdGVyKHNlbGYuYWJjLkZpbGVMb2FkZXIpOgogICAgICAgICAgICAgZGVmIGdldF9jb2RlKHNlbGYsIF8pOiBwYXNzCiAgICAgICAgICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBfKTogcGFzcwogICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgXyk6IHBhc3MKQEAgLTYxLDExICs2MSwyMSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKICAgICAgICAgICAgIGxvYWRlci5nZXRfZmlsZW5hbWUobmFtZSArICdYWFgnKQogCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIG90aGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZXBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkZXIsIG90aGVyKQorCisgICAgZGVmIHRlc3RfaW5lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfJyArIHNlbGYubmFtZSwgc2VsZi5maWxlcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmxvYWRlciwgb3RoZXIpCisKICAgICAjIFtiYXNpY10KICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ190ZW1wJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3RlbXAnLCAnX19maWxlX18nOiBtYXBwaW5nWydfdGVtcCddLAogICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJyd9CkBAIC03NCw5ICs4NCwxMSBAQAogCiAgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3BrZy5fX2luaXRfXycpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3BrZycsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nWydfcGtnLl9faW5pdF9fJ10pCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ19wa2cnKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdfcGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3BrZycsICdfX2ZpbGVfXyc6IG1hcHBpbmdbJ19wa2cuX19pbml0X18nXSwKICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFtvcy5wYXRoLmRpcm5hbWUobWFwcGluZ1snX3BrZy5fX2luaXRfXyddKV0sCkBAIC04Nyw5ICs5OSwxMSBAQAogCiAgICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6CiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ19wa2cuX19pbml0X18nLCAnX3BrZy5tb2QnKWFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3BrZy5tb2QnLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3BrZy5tb2QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbJ19wa2cubW9kJ10pCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ19wa2cubW9kJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ19wa2cubW9kJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19wa2cubW9kJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3BrZy5tb2QnLCAnX19maWxlX18nOiBtYXBwaW5nWydfcGtnLm1vZCddLAogICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJ19wa2cnfQpAQCAtMTAyLDEzICsxMTYsMTcgQEAKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgbW9kdWxlX2lkID0gaWQobW9kdWxlKQogICAgICAgICAgICAgbW9kdWxlX2RpY3RfaWQgPSBpZChtb2R1bGUuX19kaWN0X18pCiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1snX3RlbXAnXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoInRlc3RpbmdfdmFyID0gNDJcbiIpCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Rlc3RpbmdfdmFyJywgbW9kdWxlLl9fZGljdF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICIndGVzdGluZ192YXInIG5vdCBpbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInswfSIuZm9ybWF0KGxpc3QobW9kdWxlLl9fZGljdF9fLmtleXMoKSkpKQpAQCAtMTIyLDE0ICsxNDAsMjAgQEAKICAgICAgICAgdmFsdWUgPSAnPHRlc3Q+JwogICAgICAgICBuYW1lID0gJ190ZW1wJwogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG5hbWUpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBvcmlnX21vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBvcmlnX21vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJpYnV0ZXM6CiAgICAgICAgICAgICAgICAgc2V0YXR0cihvcmlnX21vZHVsZSwgYXR0ciwgdmFsdWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tuYW1lXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJysrKyBiYWQgc3ludGF4ICsrKycpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6Ci0gICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG9yaWdfbW9kdWxlKQorICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIob3JpZ19tb2R1bGUsIGF0dHIpLCB2YWx1ZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQogICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIob3JpZ19tb2R1bGUsIGF0dHIpLCB2YWx1ZSkKIApAQCAtMTM4LDkgKzE2MiwxMSBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1snX3RlbXAnXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJz0nKQotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpOgotICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQorICAgICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignX3RlbXAnLCBzeXMubW9kdWxlcykKIAogICAgIGRlZiB0ZXN0X2ZpbGVfZnJvbV9lbXB0eV9zdHJpbmdfZGlyKHNlbGYpOgpAQCAtMTUxLDE0ICsxNzcsMTYgQEAKICAgICAgICAgICAgIGZpbGUud3JpdGUoIiMgdGVzdCBmaWxlIGZvciBpbXBvcnRsaWIiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX3RlbXAnKToKLSAgICAgICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBmaWxlX3BhdGgpCi0gICAgICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCisgICAgICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBmaWxlX3BhdGgpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX3BhdGgsIG1vZC5fX2ZpbGVfXykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcGF0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuX19jYWNoZWRfXykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluayhmaWxlX3BhdGgpCi0gICAgICAgICAgICBweWNhY2hlID0gb3MucGF0aC5kaXJuYW1lKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpKQorICAgICAgICAgICAgcHljYWNoZSA9IG9zLnBhdGguZGlybmFtZShzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9wYXRoKSkKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHB5Y2FjaGUpOgogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocHljYWNoZSkKIApAQCAtMTY3LDcgKzE5NSw3IEBACiAgICAgICAgICMgdHJ1bmNhdGVkIHJhdGhlciB0aGFuIHJhaXNlIGFuIE92ZXJmbG93RXJyb3IuCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHNvdXJjZSA9IG1hcHBpbmdbJ190ZW1wJ10KLSAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKICAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCJ4ID0gNSIpCiAgICAgICAgICAgICB0cnk6CkBAIC0xNzgsMjAgKzIwNiw0OCBAQAogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZ2V0YXR0cihlcnJubywgJ0VPVkVSRkxPVycsIE5vbmUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNhbm5vdCBzZXQgbW9kaWZpY2F0aW9uIHRpbWUgdG8gbGFyZ2UgaW50ZWdlciAoe30pIi5mb3JtYXQoZSkpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICAjIFBFUCA0NTEKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ190ZW1wJykKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKCdfdGVtcCcsIGxvYWRlcikKKyAgICAgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS54LCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGNvbXBpbGVkKSkKKyAgICAgICAgICAgIG9zLnVubGluayhjb21waWxlZCkKKyAgICAgICAgICAgICMgUEVQIDMwMgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZCA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKSAjIFhYWAogICAgICAgICAgICAgIyBTYW5pdHkgY2hlY2tzLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuX19jYWNoZWRfXywgY29tcGlsZWQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC54LCA1KQogICAgICAgICAgICAgIyBUaGUgcHljIGZpbGUgd2FzIGNyZWF0ZWQuCi0gICAgICAgICAgICBvcy5zdGF0KGNvbXBpbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGNvbXBpbGVkKSkKKworICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ2dvb2QgbmFtZScsIHt9KQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdiYWQgbmFtZScpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ2JhZCBuYW1lJywgbG9hZGVyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgnYmFkIG5hbWUnKQorCitGcm96ZW5fU2ltcGxlVGVzdCwgU291cmNlX1NpbXBsZVRlc3QgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU2ltcGxlVGVzdCwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSwgYWJjPWltcG9ydGxpYl9hYmMsCisgICAgICAgIHV0aWw9aW1wb3J0bGliX3V0aWwpCiAKIAotY2xhc3MgQmFkQnl0ZWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEJhZEJ5dGVjb2RlVGVzdDoKIAogICAgIGRlZiBpbXBvcnRfKHNlbGYsIGZpbGUsIG1vZHVsZV9uYW1lKToKICAgICAgICAgbG9hZGVyID0gc2VsZi5sb2FkZXIobW9kdWxlX25hbWUsIGZpbGUpCi0gICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAjIFhYWCBDaGFuZ2UgdG8gdXNlIGV4ZWNfbW9kdWxlKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUobW9kdWxlX25hbWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlX25hbWUsIHN5cy5tb2R1bGVzKQogCiAgICAgZGVmIG1hbmlwdWxhdGVfYnl0ZWNvZGUoc2VsZiwgbmFtZSwgbWFwcGluZywgbWFuaXB1bGF0b3IsICosCkBAIC0yMDQsNyArMjYwLDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgIGlmIG5vdCBkZWxfc291cmNlOgotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKQorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MudW5saW5rKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gbWFrZV9sZWdhY3lfcHljKG1hcHBpbmdbbmFtZV0pCkBAIC0yOTAsMTAgKzM0NiwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiJ1x4MDBceDAwXHgwMFx4MDAnICsgYmNbNDpdKQogICAgICAgICAgICAgdGVzdCgnX3RlbXAnLCBtYXBwaW5nLCBiY19wYXRoKQogCitjbGFzcyBCYWRCeXRlY29kZVRlc3RQRVA0NTEoQmFkQnl0ZWNvZGVUZXN0KToKIAotY2xhc3MgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0KEJhZEJ5dGVjb2RlVGVzdCk6CisgICAgZGVmIGltcG9ydF8oc2VsZiwgZmlsZSwgbW9kdWxlX25hbWUpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLmxvYWRlcihtb2R1bGVfbmFtZSwgZmlsZSkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2R1bGVfbmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIobW9kdWxlX25hbWUsIGxvYWRlcikKKyAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKIAotICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyCitjbGFzcyBCYWRCeXRlY29kZVRlc3RQRVAzMDIoQmFkQnl0ZWNvZGVUZXN0KToKKworICAgIGRlZiBpbXBvcnRfKHNlbGYsIGZpbGUsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5sb2FkZXIobW9kdWxlX25hbWUsIGZpbGUpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZV9uYW1lLCBzeXMubW9kdWxlcykKKworCitjbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3Q6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMubG9hZGVyID0gY2xzLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyCiAKICAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCiAgICAgZGVmIHRlc3RfZW1wdHlfZmlsZShzZWxmKToKQEAgLTMzMiw3ICs0MDcsOCBAQAogICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nW25hbWVdLCBuYW1lKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyYicpIGFzIGJ5dGVjb2RlX2ZpbGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlY29kZV9maWxlLnJlYWQoNCksIGltcC5nZXRfbWFnaWMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5NQUdJQ19OVU1CRVIpCiAKICAgICAgICAgc2VsZi5fdGVzdF9iYWRfbWFnaWModGVzdCkKIApAQCAtMzgyLDEzICs0NTgsMTMgQEAKICAgICAgICAgemVyb3MgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyK2InKSBhcyBieXRlY29kZV9maWxlOgogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUuc2Vlayg0KQogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUud3JpdGUoemVyb3MpCiAgICAgICAgICAgICBzZWxmLmltcG9ydF8obWFwcGluZ1snX3RlbXAnXSwgJ190ZW1wJykKICAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUobWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBpbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCisgICAgICAgICAgICBzb3VyY2VfdGltZXN0YW1wID0gc2VsZi5pbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3JiJykgYXMgYnl0ZWNvZGVfZmlsZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLnNlZWsoNCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwgc291cmNlX3RpbWVzdGFtcCkKQEAgLTQwMCw3ICs0NzYsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICAjIENyZWF0ZSBieXRlY29kZSB0aGF0IHdpbGwgbmVlZCB0byBiZSByZS1jcmVhdGVkLgogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3IrYicpIGFzIGJ5dGVjb2RlX2ZpbGU6CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS5zZWVrKDApCiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS53cml0ZShiJ1x4MDBceDAwXHgwMFx4MDAnKQpAQCAtNDA4LDE2ICs0ODQsMzQgQEAKICAgICAgICAgICAgIG9zLmNobW9kKGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIElPRXJyb3IhCisgICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIE9TRXJyb3IhCiAgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbJ190ZW1wJ10sICdfdGVtcCcpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICMgTWFrZSB3cml0YWJsZSBmb3IgZXZlbnR1YWwgY2xlYW4tdXAuCiAgICAgICAgICAgICAgICAgb3MuY2htb2QoYnl0ZWNvZGVfcGF0aCwgc3RhdC5TX0lXVVNSKQogCitjbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVA0NTEoCisgICAgICAgIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdCwgQmFkQnl0ZWNvZGVUZXN0UEVQNDUxKToKKyAgICBwYXNzCiAKLWNsYXNzIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QoQmFkQnl0ZWNvZGVUZXN0KToKK0Zyb3plbl9Tb3VyY2VCYWRCeXRlY29kZVBFUDQ1MSwgU291cmNlX1NvdXJjZUJhZEJ5dGVjb2RlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSwKKyAgICAgICAgYWJjPWltcG9ydGxpYl9hYmMsIHV0aWw9aW1wb3J0bGliX3V0aWwpCiAKLSAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIKK2NsYXNzIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDMwMigKKyAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0LCBCYWRCeXRlY29kZVRlc3RQRVAzMDIpOgorICAgIHBhc3MKKworRnJvemVuX1NvdXJjZUJhZEJ5dGVjb2RlUEVQMzAyLCBTb3VyY2VfU291cmNlQmFkQnl0ZWNvZGVQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQMzAyLCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5LAorICAgICAgICBhYmM9aW1wb3J0bGliX2FiYywgdXRpbD1pbXBvcnRsaWJfdXRpbCkKKworCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0OgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLmxvYWRlciA9IGNscy5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIKIAogICAgIGRlZiB0ZXN0X2VtcHR5X2ZpbGUoc2VsZik6CiAgICAgICAgIGRlZiB0ZXN0KG5hbWUsIG1hcHBpbmcsIGJ5dGVjb2RlX3BhdGgpOgpAQCAtNDcyLDE0ICs1NjYsMjIgQEAKICAgICBkZWYgdGVzdF9ub25fY29kZV9tYXJzaGFsKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X25vbl9jb2RlX21hcnNoYWwoZGVsX3NvdXJjZT1UcnVlKQogCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQNDUxKFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QsCisgICAgICAgIEJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSk6CisgICAgcGFzcwogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChTaW1wbGVUZXN0LAotICAgICAgICAgICAgICAgICBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QsCi0gICAgICAgICAgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QKLSAgICAgICAgICAgICAgICApCitGcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQNDUxLCBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVA0NTEsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQorCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQMzAyKFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QsCisgICAgICAgIEJhZEJ5dGVjb2RlVGVzdFBFUDMwMik6CisgICAgcGFzcworCitGcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQMzAyLCBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVAzMDIsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weQppbmRleCA4ZTQ5ODY4Li40NzMyOTdiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDkgKzEsMTAgQEAKIGZyb20gLi4gaW1wb3J0IGFiYworZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBlcnJubwotaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHN0YXQKQEAgLTM5LDE0ICs0MCwxNSBAQAogICAgICIiIgogCiAgICAgZGVmIGdldF9maW5kZXIoc2VsZiwgcm9vdCk6Ci0gICAgICAgIGxvYWRlcl9kZXRhaWxzID0gWyhtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpXQotICAgICAgICByZXR1cm4gbWFjaGluZXJ5LkZpbGVGaW5kZXIocm9vdCwgKmxvYWRlcl9kZXRhaWxzKQorICAgICAgICBsb2FkZXJfZGV0YWlscyA9IFsoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpXQorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcihyb290LCAqbG9hZGVyX2RldGFpbHMpCiAKICAgICBkZWYgaW1wb3J0XyhzZWxmLCByb290LCBtb2R1bGUpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRfZmluZGVyKHJvb3QpLmZpbmRfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5nZXRfZmluZGVyKHJvb3QpCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kKGZpbmRlciwgbW9kdWxlLCBsb2FkZXJfb25seT1UcnVlKQogCiAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3QsIGNyZWF0ZT1Ob25lLCAqLCBjb21waWxlXz1Ob25lLCB1bmxpbms9Tm9uZSk6CiAgICAgICAgICIiIlRlc3QgdGhlIGZpbmRpbmcgb2YgJ3Rlc3QnIHdpdGggdGhlIGNyZWF0aW9uIG9mIG1vZHVsZXMgbGlzdGVkIGluCkBAIC0xMjQsMjAgKzEyNiwyMCBAQAogCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nX2Zvcl9kaXIoc2VsZik6CiAgICAgICAgICMgVGhlIGVtcHR5IHN0cmluZyBmcm9tIHN5cy5wYXRoIG1lYW5zIHRvIHNlYXJjaCBpbiB0aGUgY3dkLgotICAgICAgICBmaW5kZXIgPSBtYWNoaW5lcnkuRmlsZUZpbmRlcignJywgKG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIoJycsIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKICAgICAgICAgd2l0aCBvcGVuKCdtb2QucHknLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlLndyaXRlKCIjIHRlc3QgZmlsZSBmb3IgaW1wb3J0bGliIikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKCdtb2QnKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5fZmluZChmaW5kZXIsICdtb2QnLCBsb2FkZXJfb25seT1UcnVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobG9hZGVyLCAnbG9hZF9tb2R1bGUnKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluaygnbW9kLnB5JykKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRhdGVfY2FjaGVzKHNlbGYpOgogICAgICAgICAjIGludmFsaWRhdGVfY2FjaGVzKCkgc2hvdWxkIHJlc2V0IHRoZSBtdGltZS4KLSAgICAgICAgZmluZGVyID0gbWFjaGluZXJ5LkZpbGVGaW5kZXIoJycsIChtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKCcnLCAoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCiAgICAgICAgIGZpbmRlci5fcGF0aF9tdGltZSA9IDQyCiAgICAgICAgIGZpbmRlci5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZGVyLl9wYXRoX210aW1lLCAtMSkKQEAgLTE0Nyw4ICsxNDksMTAgQEAKICAgICAgICAgbW9kID0gJ21vZCcKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhtb2QpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICBmaW5kZXIgPSBzZWxmLmdldF9maW5kZXIobWFwcGluZ1snLnJvb3QnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGZpbmRlci5maW5kX21vZHVsZShtb2QpKQotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmaW5kZXIuZmluZF9tb2R1bGUobW9kKSkKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5fZmluZChmaW5kZXIsICdtb2QnLCBsb2FkZXJfb25seT1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoZm91bmQpCisgICAgICAgIGZvdW5kID0gc2VsZi5fZmluZChmaW5kZXIsICdtb2QnLCBsb2FkZXJfb25seT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmb3VuZCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAogICAgICAgICAgICAgJ29zLmNobW9kKCkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbmVlZGVkIGFyZ3VtZW50cyB1bmRlciBXaW5kb3dzJykKQEAgLTE3MiwyMCArMTc2LDU3IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwLCB0ZW1wZGlyKQogICAgICAgICBvcy5jaG1vZCh0ZW1wZGlyLm5hbWUsIHN0YXQuU19JV1VTUiB8IHN0YXQuU19JWFVTUikKICAgICAgICAgZmluZGVyID0gc2VsZi5nZXRfZmluZGVyKHRlbXBkaXIubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgW10pLCBmaW5kZXIuZmluZF9sb2FkZXIoJ2RvZXNub3RleGlzdCcpKQorICAgICAgICBmb3VuZCA9IHNlbGYuX2ZpbmQoZmluZGVyLCAnZG9lc25vdGV4aXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgc2VsZi5OT1RfRk9VTkQpCiAKICAgICBkZWYgdGVzdF9pZ25vcmVfZmlsZShzZWxmKToKICAgICAgICAgIyBJZiBhIGRpcmVjdG9yeSBnb3QgY2hhbmdlZCB0byBhIGZpbGUgZnJvbSB1bmRlcm5lYXRoIHVzLCB0aGVuIGRvbid0CiAgICAgICAgICMgd29ycnkgYWJvdXQgbG9va2luZyBmb3Igc3VibW9kdWxlcy4KICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSBhcyBmaWxlX29iajoKICAgICAgICAgICAgIGZpbmRlciA9IHNlbGYuZ2V0X2ZpbmRlcihmaWxlX29iai5uYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgW10pLCBmaW5kZXIuZmluZF9sb2FkZXIoJ2RvZXNub3RleGlzdCcpKQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLl9maW5kKGZpbmRlciwgJ2RvZXNub3RleGlzdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzZWxmLk5PVF9GT1VORCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChGaW5kZXJUZXN0cykKK2NsYXNzIEZpbmRlclRlc3RzUEVQNDUxKEZpbmRlclRlc3RzKToKKworICAgIE5PVF9GT1VORCA9IE5vbmUKKworICAgIGRlZiBfZmluZChzZWxmLCBmaW5kZXIsIG5hbWUsIGxvYWRlcl9vbmx5PUZhbHNlKToKKyAgICAgICAgc3BlYyA9IGZpbmRlci5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyIGlmIHNwZWMgaXMgbm90IE5vbmUgZWxzZSBzcGVjCisKK0Zyb3plbl9GaW5kZXJUZXN0c1BFUDQ1MSwgU291cmNlX0ZpbmRlclRlc3RzUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEZpbmRlclRlc3RzUEVQNDUxLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCisKK2NsYXNzIEZpbmRlclRlc3RzUEVQNDIwKEZpbmRlclRlc3RzKToKKworICAgIE5PVF9GT1VORCA9IChOb25lLCBbXSkKKworICAgIGRlZiBfZmluZChzZWxmLCBmaW5kZXIsIG5hbWUsIGxvYWRlcl9vbmx5PUZhbHNlKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBsb2FkZXJfcG9ydGlvbnMgPSBmaW5kZXIuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgICAgIHJldHVybiBsb2FkZXJfcG9ydGlvbnNbMF0gaWYgbG9hZGVyX29ubHkgZWxzZSBsb2FkZXJfcG9ydGlvbnMKKworRnJvemVuX0ZpbmRlclRlc3RzUEVQNDIwLCBTb3VyY2VfRmluZGVyVGVzdHNQRVA0MjAgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHNQRVA0MjAsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKworY2xhc3MgRmluZGVyVGVzdHNQRVAzMDIoRmluZGVyVGVzdHMpOgorCisgICAgTk9UX0ZPVU5EID0gTm9uZQorCisgICAgZGVmIF9maW5kKHNlbGYsIGZpbmRlciwgbmFtZSwgbG9hZGVyX29ubHk9RmFsc2UpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSkKKworRnJvemVuX0ZpbmRlclRlc3RzUEVQMzAyLCBTb3VyY2VfRmluZGVyVGVzdHNQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHNQRVAzMDIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkKaW5kZXggNmE3ODc5Mi4uOTJkYTc3MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weQpAQCAtMSwxNyArMSwxOCBAQAorZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKLWltcG9ydCBpbXAKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIFBhdGhIb29rVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBQYXRoSG9va1Rlc3Q6CiAKICAgICAiIiJUZXN0IHRoZSBwYXRoIGhvb2sgZm9yIHNvdXJjZS4iIiIKIAogICAgIGRlZiBwYXRoX2hvb2soc2VsZik6Ci0gICAgICAgIHJldHVybiBtYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soKG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCiAKICAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdkdW1teScpIGFzIG1hcHBpbmc6CkBAIC0yMiwxMSArMjMsOCBAQAogICAgICAgICAjIFRoZSBlbXB0eSBzdHJpbmcgcmVwcmVzZW50cyB0aGUgY3dkLgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLnBhdGhfaG9vaygpKCcnKSwgJ2ZpbmRfbW9kdWxlJykpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoUGF0aEhvb2tUZXN0KQorRnJvemVuX1BhdGhIb29rVGVzdCwgU291cmNlX1BhdGhIb29rdGVzdCA9IHV0aWwudGVzdF9ib3RoKFBhdGhIb29rVGVzdCwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKaW5kZXggYmEwMmI0NC4uYzYyZGZhMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQpAQCAtMSwxOSArMSwyNCBAQAorZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiAjIEJlY2F1c2Ugc3lzLnBhdGggZ2V0cyBlc3NlbnRpYWxseSBibGFua2VkLCBuZWVkIHRvIGhhdmUgdW5pY29kZWRhdGEgYWxyZWFkeQogIyBpbXBvcnRlZCBmb3IgdGhlIHBhcnNlciB0byB1c2UuCiBpbXBvcnQgdW5pY29kZWRhdGEKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCiAKIAogQ09ESU5HX1JFID0gcmUuY29tcGlsZShyJ15bIFx0XGZdKiMuKmNvZGluZ1s6PV1bIFx0XSooWy1cdy5dKyknLCByZS5BU0NJSSkKIAogCi1jbGFzcyBFbmNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRW5jb2RpbmdUZXN0OgogCiAgICAgIiIiUEVQIDMxMjAgbWFrZXMgVVRGLTggdGhlIGRlZmF1bHQgZW5jb2RpbmcgZm9yIHNvdXJjZSBjb2RlCiAgICAgW2RlZmF1bHQgZW5jb2RpbmddLgpAQCAtMzUsOSArNDAsOSBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKHNlbGYubW9kdWxlX25hbWUpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tzZWxmLm1vZHVsZV9uYW1lXSwgJ3diJykgYXMgZmlsZToKICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKHNvdXJjZSkKLSAgICAgICAgICAgIGxvYWRlciA9IF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nW3NlbGYubW9kdWxlX25hbWVdKQotICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZChsb2FkZXIpCiAKICAgICBkZWYgY3JlYXRlX3NvdXJjZShzZWxmLCBlbmNvZGluZyk6CiAgICAgICAgIGVuY29kaW5nX2xpbmUgPSAiIyBjb2Rpbmc9ezB9Ii5mb3JtYXQoZW5jb2RpbmcpCkBAIC04NCw4ICs4OSwyOSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKToKICAgICAgICAgICAgIHNlbGYucnVuX3Rlc3Qoc291cmNlKQogCitjbGFzcyBFbmNvZGluZ1Rlc3RQRVA0NTEoRW5jb2RpbmdUZXN0KToKIAotY2xhc3MgTGluZUVuZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBsb2FkKHNlbGYsIGxvYWRlcik6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm1vZHVsZV9uYW1lLCBsb2FkZXIpCisgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgIHJldHVybiBtb2R1bGUKKworRnJvemVuX0VuY29kaW5nVGVzdFBFUDQ1MSwgU291cmNlX0VuY29kaW5nVGVzdFBFUDQ1MSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBFbmNvZGluZ1Rlc3RQRVA0NTEsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKK2NsYXNzIEVuY29kaW5nVGVzdFBFUDMwMihFbmNvZGluZ1Rlc3QpOgorCisgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisKK0Zyb3plbl9FbmNvZGluZ1Rlc3RQRVAzMDIsIFNvdXJjZV9FbmNvZGluZ1Rlc3RQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRW5jb2RpbmdUZXN0UEVQMzAyLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCisKK2NsYXNzIExpbmVFbmRpbmdUZXN0OgogCiAgICAgciIiIlNvdXJjZSB3cml0dGVuIHdpdGggdGhlIHRocmVlIHR5cGVzIG9mIGxpbmUgZW5kaW5ncyAoXG4sIFxyXG4sIFxyKQogICAgIG5lZWQgdG8gYmUgcmVhZGFibGUgW2NyXVtjcmxmXVtsZl0uIiIiCkBAIC05Nyw5ICsxMjMsOSBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG1vZHVsZV9uYW1lKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgd2l0aCBvcGVuKG1hcHBpbmdbbW9kdWxlX25hbWVdLCAnd2InKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoc291cmNlKQotICAgICAgICAgICAgbG9hZGVyID0gX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKG1vZHVsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbbW9kdWxlX25hbWVdKQotICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIobW9kdWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbbW9kdWxlX25hbWVdKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZChsb2FkZXIsIG1vZHVsZV9uYW1lKQogCiAgICAgIyBbY3JdCiAgICAgZGVmIHRlc3RfY3Ioc2VsZik6CkBAIC0xMTMsMTEgKzEzOSwyNyBAQAogICAgIGRlZiB0ZXN0X2xmKHNlbGYpOgogICAgICAgICBzZWxmLnJ1bl90ZXN0KGInXG4nKQogCitjbGFzcyBMaW5lRW5kaW5nVGVzdFBFUDQ1MShMaW5lRW5kaW5nVGVzdCk6CiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEVuY29kaW5nVGVzdCwgTGluZUVuZGluZ1Rlc3QpCisgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyLCBtb2R1bGVfbmFtZSk6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobW9kdWxlX25hbWUpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9sb2FkZXIobW9kdWxlX25hbWUsIGxvYWRlcikKKyAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCitGcm96ZW5fTGluZUVuZGluZ1Rlc3RQRVA0NTEsIFNvdXJjZV9MaW5lRW5kaW5nVGVzdFBFUDQ1MSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBMaW5lRW5kaW5nVGVzdFBFUDQ1MSwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworY2xhc3MgTGluZUVuZGluZ1Rlc3RQRVAzMDIoTGluZUVuZGluZ1Rlc3QpOgorCisgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyLCBtb2R1bGVfbmFtZSk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKworRnJvemVuX0xpbmVFbmRpbmdUZXN0UEVQMzAyLCBTb3VyY2VfTGluZUVuZGluZ1Rlc3RQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTGluZUVuZGluZ1Rlc3RQRVAzMDIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQppbmRleCBhZTY1NjYzLi42M2NkMjVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQpAQCAtMiw3ICsyLDYgQEAKIGltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZXJybm8KIGltcG9ydCBmdW5jdG9vbHMKLWltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYWJjLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKaW5kZXggYzYyMGMzNy4uMDliNzI5NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKQEAgLTEsOSArMSwyMyBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGFiYwotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQoraW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBpbnNwZWN0CitpbXBvcnQgaW8KK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKK2ltcG9ydCB3YXJuaW5ncwogCitmcm9tIC4gaW1wb3J0IHV0aWwKIAorZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX2FiYywgc291cmNlX2FiYyA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLmFiYycpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCisKKyMjIyMjIEluaGVyaXRhbmNlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBjbGFzcyBJbmhlcml0YW5jZVRlc3RzOgogCiAgICAgIiIiVGVzdCB0aGF0IHRoZSBzcGVjaWZpZWQgY2xhc3MgaXMgYSBzdWJjbGFzcy9zdXBlcmNsYXNzIG9mIHRoZSBleHBlY3RlZApAQCAtMTQsOCArMjgsMTkgQEAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5zdXBlcmNsYXNzZXMgPSBbZ2V0YXR0cihzZWxmLmFiYywgY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNsYXNzX25hbWUgaW4gc2VsZi5zdXBlcmNsYXNzX25hbWVzXQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzdWJjbGFzc19uYW1lcycpOgorICAgICAgICAgICAgIyBCZWNhdXNlIHRlc3Quc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCkgY3JlYXRlcyBhIG5ldworICAgICAgICAgICAgIyBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBwZXIgbW9kdWxlLCBpbmhlcml0YW5jZSBjaGVja3MgZmFpbCB3aGVuCisgICAgICAgICAgICAjIGNoZWNraW5nIGFjcm9zcyBtb2R1bGUgYm91bmRhcmllcyAoaS5lLiB0aGUgX2Jvb3RzdHJhcCBpbiBhYmMgaXMKKyAgICAgICAgICAgICMgbm90IHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gbWFjaGluZXJ5KS4gVGhhdCBtZWFucyBzdGVhbGluZyBvbmUgb2YKKyAgICAgICAgICAgICMgdGhlIG1vZHVsZXMgZnJvbSB0aGUgb3RoZXIgdG8gbWFrZSBzdXJlIHRoZSBzYW1lIGluc3RhbmNlIGlzIHVzZWQuCisgICAgICAgICAgICBzZWxmLnN1YmNsYXNzZXMgPSBbZ2V0YXR0cihzZWxmLmFiYy5tYWNoaW5lcnksIGNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjbGFzc19uYW1lIGluIHNlbGYuc3ViY2xhc3NfbmFtZXNdCiAgICAgICAgIGFzc2VydCBzZWxmLnN1YmNsYXNzZXMgb3Igc2VsZi5zdXBlcmNsYXNzZXMsIHNlbGYuX19jbGFzc19fCi0gICAgICAgIHNlbGYuX190ZXN0ID0gZ2V0YXR0cihhYmMsIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICB0ZXN0aW5nID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18ucGFydGl0aW9uKCdfJylbMl0KKyAgICAgICAgc2VsZi5fX3Rlc3QgPSBnZXRhdHRyKHNlbGYuYWJjLCB0ZXN0aW5nKQogCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3NlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGV4cGVjdGVkIHN1YmNsYXNzZXMgaW5oZXJpdC4KQEAgLTI5LDc1ICs1NCw4OTggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNlbGYuX190ZXN0LCBzdXBlcmNsYXNzKSwKICAgICAgICAgICAgICAgICJ7MH0gaXMgbm90IGEgc3VwZXJjbGFzcyBvZiB7MX0iLmZvcm1hdChzdXBlcmNsYXNzLCBzZWxmLl9fdGVzdCkpCiAKK2RlZiBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoYmFzZV9jbGFzcyk6CisgICAgZGVmIHNldF9mcm96ZW4obnMpOgorICAgICAgICBuc1snYWJjJ10gPSBmcm96ZW5fYWJjCisgICAgZGVmIHNldF9zb3VyY2UobnMpOgorICAgICAgICBuc1snYWJjJ10gPSBzb3VyY2VfYWJjCiAKLWNsYXNzIE1ldGFQYXRoRmluZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuRmluZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuUGF0aEZpbmRlciwgbWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlcl0KLQotCi1jbGFzcyBQYXRoRW50cnlGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5GaW5kZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuRmlsZUZpbmRlcl0KLQotCi1jbGFzcyBMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3ViY2xhc3NlcyA9IFthYmMuUHlMb2FkZXJdCi0KLQotY2xhc3MgUmVzb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5Mb2FkZXJdCi0KLQotY2xhc3MgSW5zcGVjdExvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkxvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW2FiYy5QeUxvYWRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcl0KLQotCi1jbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5JbnNwZWN0TG9hZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbYWJjLlB5TG9hZGVyXQotCi0KLWNsYXNzIEZpbGVMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5SZXNvdXJjZUxvYWRlciwgYWJjLkV4ZWN1dGlvbkxvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW21hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLCBtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXJdCi0KLQotY2xhc3MgU291cmNlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuUmVzb3VyY2VMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcl0KLQotCi1jbGFzcyBQeUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkxvYWRlciwgYWJjLlJlc291cmNlTG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyXQotCi0KLWNsYXNzIFB5UHljTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuUHlMb2FkZXJdCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKICAgICBjbGFzc2VzID0gW10KLSAgICBmb3IgY2xhc3NfIGluIGdsb2JhbHMoKS52YWx1ZXMoKToKLSAgICAgICAgaWYgKGluc3BlY3QuaXNjbGFzcyhjbGFzc18pIGFuZAotICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoY2xhc3NfLCB1bml0dGVzdC5UZXN0Q2FzZSkgYW5kCi0gICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhjbGFzc18sIEluaGVyaXRhbmNlVGVzdHMpKToKLSAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKGNsYXNzXykKLSAgICBydW5fdW5pdHRlc3QoKmNsYXNzZXMpCisgICAgZm9yIHByZWZpeCwgbnNfc2V0IGluIFsoJ0Zyb3plbicsIHNldF9mcm96ZW4pLCAoJ1NvdXJjZScsIHNldF9zb3VyY2UpXToKKyAgICAgICAgY2xhc3Nlcy5hcHBlbmQodHlwZXMubmV3X2NsYXNzKCdfJy5qb2luKFtwcmVmaXgsIGJhc2VfY2xhc3MuX19uYW1lX19dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiYXNlX2NsYXNzLCB1bml0dGVzdC5UZXN0Q2FzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2JvZHk9bnNfc2V0KSkKKyAgICByZXR1cm4gY2xhc3NlcworCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ0ZpbmRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0J1aWx0aW5JbXBvcnRlcicsICdGcm96ZW5JbXBvcnRlcicsICdQYXRoRmluZGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAnV2luZG93c1JlZ2lzdHJ5RmluZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoTWV0YVBhdGhGaW5kZXIpCitGcm96ZW5fTWV0YVBhdGhGaW5kZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfTWV0YVBhdGhGaW5kZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBQYXRoRW50cnlGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnRmluZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnRmlsZUZpbmRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKFBhdGhFbnRyeUZpbmRlcikKK0Zyb3plbl9QYXRoRW50cnlGaW5kZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfUGF0aEVudHJ5RmluZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgUmVzb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoUmVzb3VyY2VMb2FkZXIpCitGcm96ZW5fUmVzb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfUmVzb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ0xvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0J1aWx0aW5JbXBvcnRlcicsICdGcm96ZW5JbXBvcnRlcicsICdFeHRlbnNpb25GaWxlTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoSW5zcGVjdExvYWRlcikKK0Zyb3plbl9JbnNwZWN0TG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0luc3BlY3RMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnSW5zcGVjdExvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0V4dGVuc2lvbkZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhFeGVjdXRpb25Mb2FkZXIpCitGcm96ZW5fRXhlY3V0aW9uTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0V4ZWN1dGlvbkxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEZpbGVMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnUmVzb3VyY2VMb2FkZXInLCAnRXhlY3V0aW9uTG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnU291cmNlRmlsZUxvYWRlcicsICdTb3VyY2VsZXNzRmlsZUxvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKEZpbGVMb2FkZXIpCitGcm96ZW5fRmlsZUxvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9GaWxlTG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgU291cmNlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ1Jlc291cmNlTG9hZGVyJywgJ0V4ZWN1dGlvbkxvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ1NvdXJjZUZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhTb3VyY2VMb2FkZXIpCitGcm96ZW5fU291cmNlTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX1NvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisjIyMjIyBEZWZhdWx0IHJldHVybiB2YWx1ZXMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZGVmIG1ha2VfYWJjX3N1YmNsYXNzZXMoYmFzZV9jbGFzcyk6CisgICAgY2xhc3NlcyA9IFtdCisgICAgZm9yIGtpbmQsIGFiYyBpbiBbKCdGcm96ZW4nLCBmcm96ZW5fYWJjKSwgKCdTb3VyY2UnLCBzb3VyY2VfYWJjKV06CisgICAgICAgIG5hbWUgPSAnXycuam9pbihba2luZCwgYmFzZV9jbGFzcy5fX25hbWVfX10pCisgICAgICAgIGJhc2VfY2xhc3NlcyA9IGJhc2VfY2xhc3MsIGdldGF0dHIoYWJjLCBiYXNlX2NsYXNzLl9fbmFtZV9fKQorICAgICAgICBjbGFzc2VzLmFwcGVuZCh0eXBlcy5uZXdfY2xhc3MobmFtZSwgYmFzZV9jbGFzc2VzKSkKKyAgICByZXR1cm4gY2xhc3NlcworCitkZWYgbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoYmFzZV9jbGFzcywgdGVzdF9jbGFzcyk6CisgICAgZnJvemVuX2NsYXNzLCBzb3VyY2VfY2xhc3MgPSBtYWtlX2FiY19zdWJjbGFzc2VzKGJhc2VfY2xhc3MpCisgICAgdGVzdHMgPSBbXQorICAgIGZvciBwcmVmaXgsIGNsYXNzX2luX3Rlc3QgaW4gWygnRnJvemVuJywgZnJvemVuX2NsYXNzKSwgKCdTb3VyY2UnLCBzb3VyY2VfY2xhc3MpXToKKyAgICAgICAgZGVmIHNldF9ucyhucyk6CisgICAgICAgICAgICBuc1snaW5zJ10gPSBjbGFzc19pbl90ZXN0KCkKKyAgICAgICAgdGVzdHMuYXBwZW5kKHR5cGVzLm5ld19jbGFzcygnXycuam9pbihbcHJlZml4LCB0ZXN0X2NsYXNzLl9fbmFtZV9fXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2JvZHk9c2V0X25zKSkKKyAgICByZXR1cm4gdGVzdHMKKworCitjbGFzcyBNZXRhUGF0aEZpbmRlcjoKKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aCk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoKQorCitGcm96ZW5fTVBGLCBTb3VyY2VfTVBGID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhNZXRhUGF0aEZpbmRlcikKKworCitjbGFzcyBNZXRhUGF0aEZpbmRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9maW5kX21vZHVsZShzZWxmKToKKyAgICAgICAgIyBEZWZhdWx0IHNob3VsZCByZXR1cm4gTm9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5pbnMuZmluZF9tb2R1bGUoJ3NvbWV0aGluZycsIE5vbmUpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CisgICAgICAgICMgQ2FsbGluZyB0aGUgbWV0aG9kIGlzIGEgbm8tb3AuCisgICAgICAgIHNlbGYuaW5zLmludmFsaWRhdGVfY2FjaGVzKCkKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKE1ldGFQYXRoRmluZGVyLCBNZXRhUGF0aEZpbmRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fTVBGRGVmYXVsdFRlc3RzLCBTb3VyY2VfTVBGRGVmYXVsdFRlc3RzID0gdGVzdHMKKworCitjbGFzcyBQYXRoRW50cnlGaW5kZXI6CisKKyAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5maW5kX2xvYWRlcihmdWxsbmFtZSkKKworRnJvemVuX1BFRiwgU291cmNlX1BFRiA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoUGF0aEVudHJ5RmluZGVyKQorCisKK2NsYXNzIFBhdGhFbnRyeUZpbmRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9maW5kX2xvYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgW10pLCBzZWxmLmlucy5maW5kX2xvYWRlcignc29tZXRoaW5nJykpCisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5pbnMuZmluZF9tb2R1bGUoJ3NvbWV0aGluZycpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGJlIGEgbm8tb3AuCisgICAgICAgIHNlbGYuaW5zLmludmFsaWRhdGVfY2FjaGVzKCkKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKFBhdGhFbnRyeUZpbmRlciwgUGF0aEVudHJ5RmluZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9QRUZEZWZhdWx0VGVzdHMsIFNvdXJjZV9QRUZEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIExvYWRlcjoKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQorCisKK0Zyb3plbl9MLCBTb3VyY2VfTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoTG9hZGVyKQorCisKK2NsYXNzIExvYWRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9sb2FkX21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5sb2FkX21vZHVsZSgnc29tZXRoaW5nJykKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLm1vZHVsZV9yZXByKG1vZCkKKyAgICAgICAgb3JpZ2luYWxfcmVwciA9IHJlcHIobW9kKQorICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYuaW5zCisgICAgICAgICMgU2hvdWxkIHN0aWxsIHJldHVybiBhIHByb3BlciByZXByLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihtb2QpKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoTG9hZGVyLCBMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX0xEZWZhdWx0VGVzdHMsIFNvdXJjZUxEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFJlc291cmNlTG9hZGVyKExvYWRlcik6CisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCisKKworRnJvemVuX1JMLCBTb3VyY2VfUkwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKFJlc291cmNlTG9hZGVyKQorCisKK2NsYXNzIFJlc291cmNlTG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2dldF9kYXRhKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMuZ2V0X2RhdGEoJy9zb21lL3BhdGgnKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoUmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9STERlZmF1bHRUZXN0cywgU291cmNlX1JMRGVmYXVsdFRlc3RzID0gdGVzdHMKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlcik6CisKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmlzX3BhY2thZ2UoZnVsbG5hbWUpCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9zb3VyY2UoZnVsbG5hbWUpCisKKworRnJvemVuX0lMLCBTb3VyY2VfSUwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKEluc3BlY3RMb2FkZXIpCisKKworY2xhc3MgSW5zcGVjdExvYWRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmlzX3BhY2thZ2UoJ2JsYWgnKQorCisgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5nZXRfc291cmNlKCdibGFoJykKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKEluc3BlY3RMb2FkZXIsIEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX0lMRGVmYXVsdFRlc3RzLCBTb3VyY2VfSUxEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbnNwZWN0TG9hZGVyKToKKworICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisKK0Zyb3plbl9FTCwgU291cmNlX0VMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhFeGVjdXRpb25Mb2FkZXIpCisKKworY2xhc3MgRXhlY3V0aW9uTG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5nZXRfZmlsZW5hbWUoJ2JsYWgnKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoRXhlY3V0aW9uTG9hZGVyLCBJbnNwZWN0TG9hZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9FTERlZmF1bHRUZXN0cywgU291cmNlX0VMRGVmYXVsdHNUZXN0cyA9IHRlc3RzCisKKyMjIyMjIE1ldGFQYXRoRmluZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyRmluZE1vZHVsZVRlc3RzOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRlcihjbHMsIHNwZWMpOgorICAgICAgICBjbGFzcyBNZXRhUGF0aFNwZWNGaW5kZXIoY2xzLmFiYy5NZXRhUGF0aEZpbmRlcik6CisKKyAgICAgICAgICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKToKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxlZF9mb3IgPSBmdWxsbmFtZSwgcGF0aAorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICAgICAgcmV0dXJuIE1ldGFQYXRoU3BlY0ZpbmRlcigpCisKKyAgICBkZWYgdGVzdF9ub19zcGVjKHNlbGYpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLmZpbmRlcihOb25lKQorICAgICAgICBwYXRoID0gWydhJywgJ2InLCAnYyddCisgICAgICAgIG5hbWUgPSAnYmxhaCcKKyAgICAgICAgZm91bmQgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZm91bmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgZmluZGVyLmNhbGxlZF9mb3JbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgZmluZGVyLmNhbGxlZF9mb3JbMV0pCisKKyAgICBkZWYgdGVzdF9zcGVjKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBvYmplY3QoKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoJ2JsYWgnLCBsb2FkZXIpCisgICAgICAgIGZpbmRlciA9IHNlbGYuZmluZGVyKHNwZWMpCisgICAgICAgIGZvdW5kID0gZmluZGVyLmZpbmRfbW9kdWxlKCdibGFoJywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb3VuZCwgc3BlYy5sb2FkZXIpCisKKworRnJvemVuX01QRkZpbmRNb2R1bGVUZXN0cywgU291cmNlX01QRkZpbmRNb2R1bGVUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBNZXRhUGF0aEZpbmRlckZpbmRNb2R1bGVUZXN0cywKKyAgICAgICAgYWJjPShmcm96ZW5fYWJjLCBzb3VyY2VfYWJjKSwKKyAgICAgICAgdXRpbD0oZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsKSkKKworIyMjIyMgUGF0aEVudHJ5RmluZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgUGF0aEVudHJ5RmluZGVyRmluZExvYWRlclRlc3RzOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRlcihjbHMsIHNwZWMpOgorICAgICAgICBjbGFzcyBQYXRoRW50cnlTcGVjRmluZGVyKGNscy5hYmMuUGF0aEVudHJ5RmluZGVyKToKKworICAgICAgICAgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbGVkX2ZvciA9IGZ1bGxuYW1lCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgICAgICByZXR1cm4gUGF0aEVudHJ5U3BlY0ZpbmRlcigpCisKKyAgICBkZWYgdGVzdF9ub19zcGVjKHNlbGYpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLmZpbmRlcihOb25lKQorICAgICAgICBuYW1lID0gJ2JsYWgnCisgICAgICAgIGZvdW5kID0gZmluZGVyLmZpbmRfbG9hZGVyKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZvdW5kWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBmb3VuZFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBmaW5kZXIuY2FsbGVkX2ZvcikKKworICAgIGRlZiB0ZXN0X3NwZWNfd2l0aF9sb2FkZXIoc2VsZik6CisgICAgICAgIGxvYWRlciA9IG9iamVjdCgpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcignYmxhaCcsIGxvYWRlcikKKyAgICAgICAgZmluZGVyID0gc2VsZi5maW5kZXIoc3BlYykKKyAgICAgICAgZm91bmQgPSBmaW5kZXIuZmluZF9sb2FkZXIoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvdW5kWzBdLCBzcGVjLmxvYWRlcikKKworICAgIGRlZiB0ZXN0X3NwZWNfd2l0aF9wb3J0aW9ucyhzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ2JsYWgnLCBOb25lKQorICAgICAgICBwYXRocyA9IFsnYScsICdiJywgJ2MnXQorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gcGF0aHMKKyAgICAgICAgZmluZGVyID0gc2VsZi5maW5kZXIoc3BlYykKKyAgICAgICAgZm91bmQgPSBmaW5kZXIuZmluZF9sb2FkZXIoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmb3VuZFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRocywgZm91bmRbMV0pCisKKworRnJvemVuX1BFRkZpbmRMb2FkZXJUZXN0cywgU291cmNlX1BFRkZpbmRMb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBQYXRoRW50cnlGaW5kZXJGaW5kTG9hZGVyVGVzdHMsCisgICAgICAgIGFiYz0oZnJvemVuX2FiYywgc291cmNlX2FiYyksCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksCisgICAgICAgIHV0aWw9KGZyb3plbl91dGlsLCBzb3VyY2VfdXRpbCkpCisKKworIyMjIyMgTG9hZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NsYXNzIExvYWRlckxvYWRNb2R1bGVUZXN0czoKKworICAgIGRlZiBsb2FkZXIoc2VsZik6CisgICAgICAgIGNsYXNzIFNwZWNMb2FkZXIoc2VsZi5hYmMuTG9hZGVyKToKKyAgICAgICAgICAgIGZvdW5kID0gTm9uZQorICAgICAgICAgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mb3VuZCA9IG1vZHVsZQorCisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICAgICAgICAgIiIiRm9yY2Ugc29tZSBub24tZGVmYXVsdCBtb2R1bGUgc3RhdGUgdG8gYmUgc2V0LiIiIgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIFNwZWNMb2FkZXIoKQorCisgICAgZGVmIHRlc3RfZnJlc2goc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYubG9hZGVyKCkKKyAgICAgICAgbmFtZSA9ICdibGFoJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmZvdW5kCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzW25hbWVdLCBtb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBtb2R1bGUuX19sb2FkZXJfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIG1vZHVsZS5fX3NwZWNfXy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgbW9kdWxlLl9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIG1vZHVsZS5fX3NwZWNfXy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShtb2R1bGUuX19wYXRoX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG1vZHVsZS5fX3BhdGhfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zKQorCisgICAgZGVmIHRlc3RfcmVsb2FkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ2JsYWgnCisgICAgICAgIGxvYWRlciA9IHNlbGYubG9hZGVyKCkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIpCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQorICAgICAgICAgICAgZm91bmQgPSBsb2FkZXIuZm91bmQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm91bmQsIHN5cy5tb2R1bGVzW25hbWVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUsIHN5cy5tb2R1bGVzW25hbWVdKQorCisKK0Zyb3plbl9Mb2FkZXJMb2FkTW9kdWxlVGVzdHMsIFNvdXJjZV9Mb2FkZXJMb2FkTW9kdWxlVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTG9hZGVyTG9hZE1vZHVsZVRlc3RzLAorICAgICAgICBhYmM9KGZyb3plbl9hYmMsIHNvdXJjZV9hYmMpLAorICAgICAgICB1dGlsPShmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwpKQorCisKKyMjIyMjIEluc3BlY3RMb2FkZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjbGFzcyBJbnNwZWN0TG9hZGVyU291cmNlVG9Db2RlVGVzdHM6CisKKyAgICBkZWYgc291cmNlX3RvX21vZHVsZShzZWxmLCBkYXRhLCBwYXRoPU5vbmUpOgorICAgICAgICAiIiJIZWxwIHdpdGggc291cmNlX3RvX2NvZGUoKSB0ZXN0cy4iIiIKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZShkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZShkYXRhLCBwYXRoKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfc291cmNlKHNlbGYpOgorICAgICAgICAjIFNpbmNlIGNvbXBpbGUoKSBjYW4gaGFuZGxlIHN0cmluZ3MsIHNvIHNob3VsZCBzb3VyY2VfdG9fY29kZSgpLgorICAgICAgICBzb3VyY2UgPSAnYXR0ciA9IDQyJworICAgICAgICBtb2R1bGUgPSBzZWxmLnNvdXJjZV90b19tb2R1bGUoc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdhdHRyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfYnl0ZXMoc2VsZik6CisgICAgICAgICMgU2luY2UgY29tcGlsZSgpIGNhbiBoYW5kbGUgYnl0ZXMsIHNvIHNob3VsZCBzb3VyY2VfdG9fY29kZSgpLgorICAgICAgICBzb3VyY2UgPSBiJ2F0dHIgPSA0MicKKyAgICAgICAgbW9kdWxlID0gc2VsZi5zb3VyY2VfdG9fbW9kdWxlKHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnYXR0cicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlX3BhdGgoc2VsZik6CisgICAgICAgICMgU3BlY2lmeWluZyBhIHBhdGggc2hvdWxkIHNldCBpdCBmb3IgdGhlIGNvZGUgb2JqZWN0LgorICAgICAgICBwYXRoID0gJ3BhdGgvdG8vc29tZXdoZXJlJworICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgIGNvZGUgPSBsb2FkZXIuc291cmNlX3RvX2NvZGUoJycsIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgcGF0aCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlX25vX3BhdGgoc2VsZik6CisgICAgICAgICMgTm90IHNldHRpbmcgYSBwYXRoIHNob3VsZCBzdGlsbCB3b3JrIGFuZCBiZSBzZXQgdG8gPHN0cmluZz4gc2luY2UgdGhhdAorICAgICAgICAjIGlzIGEgcHJlLWV4aXN0aW5nIHByYWN0aWNlIGFzIGEgZGVmYXVsdCB0byBjb21waWxlKCkuCisgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZSgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCAnPHN0cmluZz4nKQorCisKK2NsYXNzIEZyb3plbl9JTFNvdXJjZVRvQ29kZVRlc3RzKEluc3BlY3RMb2FkZXJTb3VyY2VUb0NvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9JTAorCitjbGFzcyBTb3VyY2VfSUxTb3VyY2VUb0NvZGVUZXN0cyhJbnNwZWN0TG9hZGVyU291cmNlVG9Db2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfSUwKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyR2V0Q29kZVRlc3RzOgorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CisgICAgICAgICMgVGVzdCBzdWNjZXNzLgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcywgJ2dldF9zb3VyY2UnKSBhcyBtb2NrZWQ6CisgICAgICAgICAgICBtb2NrZWQucmV0dXJuX3ZhbHVlID0gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9zb3VyY2VfaXNfTm9uZShzZWxmKToKKyAgICAgICAgIyBJZiBnZXRfc291cmNlKCkgaXMgTm9uZSB0aGVuIHRoaXMgc2hvdWxkIGJlIE5vbmUuCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MsICdnZXRfc291cmNlJykgYXMgbW9ja2VkOgorICAgICAgICAgICAgbW9ja2VkLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjb2RlKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfc291cmNlX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBzb3VyY2UgdGhlbiB0aGVyZSBpcyBubyBjb2RlIG9iamVjdC4KKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisKKworY2xhc3MgRnJvemVuX0lMR2V0Q29kZVRlc3RzKEluc3BlY3RMb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fSUwKKworY2xhc3MgU291cmNlX0lMR2V0Q29kZVRlc3RzKEluc3BlY3RMb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfSUwKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyTG9hZE1vZHVsZVRlc3RzOgorCisgICAgIiIiVGVzdCBJbnNwZWN0TG9hZGVyLmxvYWRfbW9kdWxlKCkuIiIiCisKKyAgICBtb2R1bGVfbmFtZSA9ICdibGFoJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnVubG9hZChzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxvYWQsIHNlbGYubW9kdWxlX25hbWUpCisKKyAgICBkZWYgbW9ja19nZXRfY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzLCAnZ2V0X2NvZGUnKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfSW1wb3J0RXJyb3Ioc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2NvZGUoKSByYWlzZXMgSW1wb3J0RXJyb3IsIGl0IHNob3VsZCBwcm9wYWdhdGUuCisgICAgICAgIHdpdGggc2VsZi5tb2NrX2dldF9jb2RlKCkgYXMgbW9ja2VkX2dldF9jb2RlOgorICAgICAgICAgICAgbW9ja2VkX2dldF9jb2RlLnNpZGVfZWZmZWN0ID0gSW1wb3J0RXJyb3IKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX05vbmUoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2NvZGUoKSByZXR1cm5zIE5vbmUsIHJhaXNlIEltcG9ydEVycm9yLgorICAgICAgICB3aXRoIHNlbGYubW9ja19nZXRfY29kZSgpIGFzIG1vY2tlZF9nZXRfY29kZToKKyAgICAgICAgICAgIG1vY2tlZF9nZXRfY29kZS5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmV0dXJuZWQoc2VsZik6CisgICAgICAgICMgVGhlIGxvYWRlZCBtb2R1bGUgc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAgICBjb2RlID0gY29tcGlsZSgnYXR0ciA9IDQyJywgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYubW9ja19nZXRfY29kZSgpIGFzIG1vY2tlZF9nZXRfY29kZToKKyAgICAgICAgICAgIG1vY2tlZF9nZXRfY29kZS5yZXR1cm5fdmFsdWUgPSBjb2RlCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLCBzeXMubW9kdWxlc1tzZWxmLm1vZHVsZV9uYW1lXSkKKworCitjbGFzcyBGcm96ZW5fSUxMb2FkTW9kdWxlVGVzdHMoSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9JTAorCitjbGFzcyBTb3VyY2VfSUxMb2FkTW9kdWxlVGVzdHMoSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9JTAorCisKKyMjIyMjIEV4ZWN1dGlvbkxvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjbGFzcyBFeGVjdXRpb25Mb2FkZXJHZXRDb2RlVGVzdHM6CisKKyAgICBkZWYgbW9ja19tZXRob2RzKHNlbGYsICosIGdldF9zb3VyY2U9RmFsc2UsIGdldF9maWxlbmFtZT1GYWxzZSk6CisgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQsIGZpbGVuYW1lX21vY2tfY29udGV4dCA9IE5vbmUsIE5vbmUKKyAgICAgICAgaWYgZ2V0X3NvdXJjZToKKyAgICAgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQgPSBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfc291cmNlJykKKyAgICAgICAgaWYgZ2V0X2ZpbGVuYW1lOgorICAgICAgICAgICAgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZmlsZW5hbWUnKQorICAgICAgICByZXR1cm4gc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0CisKKyAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKKyAgICAgICAgcGF0aCA9ICdibGFoLnB5JworICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0LCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgPSBzZWxmLm1vY2tfbWV0aG9kcygKKyAgICAgICAgICAgICAgICBnZXRfc291cmNlPVRydWUsIGdldF9maWxlbmFtZT1UcnVlKQorICAgICAgICB3aXRoIHNvdXJjZV9tb2NrX2NvbnRleHQgYXMgc291cmNlX21vY2ssIGZpbGVuYW1lX21vY2tfY29udGV4dCBhcyBuYW1lX21vY2s6CisgICAgICAgICAgICBzb3VyY2VfbW9jay5yZXR1cm5fdmFsdWUgPSAnYXR0ciA9IDQyJworICAgICAgICAgICAgbmFtZV9tb2NrLnJldHVybl92YWx1ZSA9IHBhdGgKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgcGF0aCkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX3NvdXJjZV9pc19Ob25lKHNlbGYpOgorICAgICAgICAjIElmIGdldF9zb3VyY2UoKSBpcyBOb25lIHRoZW4gdGhpcyBzaG91bGQgYmUgTm9uZS4KKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgXyA9IHNlbGYubW9ja19tZXRob2RzKGdldF9zb3VyY2U9VHJ1ZSkKKyAgICAgICAgd2l0aCBzb3VyY2VfbW9ja19jb250ZXh0IGFzIG1vY2tlZDoKKyAgICAgICAgICAgIG1vY2tlZC5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjb2RlKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfc291cmNlX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBzb3VyY2UgdGhlbiB0aGVyZSBpcyBubyBjb2RlIG9iamVjdC4KKyAgICAgICAgbG9hZGVyID0gc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX25vX3BhdGgoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2ZpbGVuYW1lKCkgcmFpc2VzIEltcG9ydEVycm9yIHRoZW4gc2ltcGx5IHNraXAgc2V0dGluZyB0aGUgcGF0aAorICAgICAgICAjIG9uIHRoZSBjb2RlIG9iamVjdC4KKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gc2VsZi5tb2NrX21ldGhvZHMoCisgICAgICAgICAgICAgICAgZ2V0X3NvdXJjZT1UcnVlLCBnZXRfZmlsZW5hbWU9VHJ1ZSkKKyAgICAgICAgd2l0aCBzb3VyY2VfbW9ja19jb250ZXh0IGFzIHNvdXJjZV9tb2NrLCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgYXMgbmFtZV9tb2NrOgorICAgICAgICAgICAgc291cmNlX21vY2sucmV0dXJuX3ZhbHVlID0gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIG5hbWVfbW9jay5zaWRlX2VmZmVjdCA9IEltcG9ydEVycm9yCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICc8c3RyaW5nPicpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKworY2xhc3MgRnJvemVuX0VMR2V0Q29kZVRlc3RzKEV4ZWN1dGlvbkxvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzID0gRnJvemVuX0VMCisKK2NsYXNzIFNvdXJjZV9FTEdldENvZGVUZXN0cyhFeGVjdXRpb25Mb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBFeGVjdXRpb25Mb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9FTAorCisKKyMjIyMjIFNvdXJjZUxvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjbGFzcyBTb3VyY2VMb2FkZXI6CisKKyAgICAjIEdsb2JhbHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBmb3IgYWxsIG1vZHVsZXMuCisgICAgc291cmNlID0gKGIiXyA9ICc6Oicuam9pbihbX19uYW1lX18sIF9fZmlsZV9fLCBfX2NhY2hlZF9fLCBfX3BhY2thZ2VfXywgIgorICAgICAgICAgICAgICBiInJlcHIoX19sb2FkZXJfXyldKSIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCAhPSBzZWxmLnBhdGg6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQorCisgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLnBhdGgKKworICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgorICAgICAgICByZXR1cm4gJzxtb2R1bGU+JworCisKK0Zyb3plbl9Tb3VyY2VPbmx5TCwgU291cmNlX1NvdXJjZU9ubHlMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhTb3VyY2VMb2FkZXIpCisKKworY2xhc3MgU291cmNlTG9hZGVyKFNvdXJjZUxvYWRlcik6CisKKyAgICBzb3VyY2VfbXRpbWUgPSAxCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgbWFnaWM9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18ocGF0aCkKKyAgICAgICAgc2VsZi5ieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5zb3VyY2Vfc2l6ZSA9IGxlbihzZWxmLnNvdXJjZSkKKyAgICAgICAgaWYgbWFnaWMgaXMgTm9uZToKKyAgICAgICAgICAgIG1hZ2ljID0gc2VsZi51dGlsLk1BR0lDX05VTUJFUgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KG1hZ2ljKQorICAgICAgICBkYXRhLmV4dGVuZChzZWxmLmluaXQuX3dfbG9uZyhzZWxmLnNvdXJjZV9tdGltZSkpCisgICAgICAgIGRhdGEuZXh0ZW5kKHNlbGYuaW5pdC5fd19sb25nKHNlbGYuc291cmNlX3NpemUpKQorICAgICAgICBjb2RlX29iamVjdCA9IGNvbXBpbGUoc2VsZi5zb3VyY2UsIHNlbGYucGF0aCwgJ2V4ZWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250X2luaGVyaXQ9VHJ1ZSkKKyAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCisgICAgICAgIHNlbGYuYnl0ZWNvZGUgPSBieXRlcyhkYXRhKQorICAgICAgICBzZWxmLndyaXR0ZW4gPSB7fQorCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoID09IHNlbGYucGF0aDoKKyAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCisgICAgICAgIGVsaWYgcGF0aCA9PSBzZWxmLmJ5dGVjb2RlX3BhdGg6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ieXRlY29kZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorCisgICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggIT0gc2VsZi5wYXRoOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICByZXR1cm4geydtdGltZSc6IHNlbGYuc291cmNlX210aW1lLCAnc2l6ZSc6IHNlbGYuc291cmNlX3NpemV9CisKKyAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSk6CisgICAgICAgIHNlbGYud3JpdHRlbltwYXRoXSA9IGJ5dGVzKGRhdGEpCisgICAgICAgIHJldHVybiBwYXRoID09IHNlbGYuYnl0ZWNvZGVfcGF0aAorCisKK0Zyb3plbl9TTCwgU291cmNlX1NMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhTb3VyY2VMb2FkZXIpCitGcm96ZW5fU0wudXRpbCA9IGZyb3plbl91dGlsCitTb3VyY2VfU0wudXRpbCA9IHNvdXJjZV91dGlsCitGcm96ZW5fU0wuaW5pdCA9IGZyb3plbl9pbml0CitTb3VyY2VfU0wuaW5pdCA9IHNvdXJjZV9pbml0CisKKworY2xhc3MgU291cmNlTG9hZGVyVGVzdEhhcm5lc3M6CisKKyAgICBkZWYgc2V0VXAoc2VsZiwgKiwgaXNfcGFja2FnZT1UcnVlLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYucGFja2FnZSA9ICdwa2cnCisgICAgICAgIGlmIGlzX3BhY2thZ2U6CisgICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5wYWNrYWdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2R1bGVfbmFtZSA9ICdtb2QnCisgICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnLicuam9pbihbJ21vZCcsICdweSddKSkKKyAgICAgICAgICAgIHNlbGYubmFtZSA9ICcuJy5qb2luKFtzZWxmLnBhY2thZ2UsIG1vZHVsZV9uYW1lXSkKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubG9hZGVyX21vY2soc2VsZi5wYXRoLCAqKmt3YXJncykKKworICAgIGRlZiB2ZXJpZnlfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc2VsZi5wYWNrYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBzZWxmLmxvYWRlcikKKyAgICAgICAgdmFsdWVzID0gbW9kdWxlLl8uc3BsaXQoJzo6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF0sIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMV0sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMl0sIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1szXSwgc2VsZi5wYWNrYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1s0XSwgcmVwcihzZWxmLmxvYWRlcikpCisKKyAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QpOgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKHNlbGYubmFtZSkKKyAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gc2VsZi5wYXRoCisgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gc2VsZi5jYWNoZWQKKyAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gc2VsZi5wYWNrYWdlCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZi5sb2FkZXIKKyAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW10KKyAgICAgICAgZXhlYyhjb2RlX29iamVjdCwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQorCisKK2NsYXNzIFNvdXJjZU9ubHlMb2FkZXJUZXN0cyhTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyk6CisKKyAgICAiIiJUZXN0IGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyIGZvciBzb3VyY2Utb25seSBsb2FkaW5nLgorCisgICAgUmVsb2FkIHRlc3RpbmcgaXMgc3Vic3VtZWQgYnkgdGhlIHRlc3RzIGZvcgorICAgIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyLgorCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9nZXRfc291cmNlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGUgc291cmNlIGNvZGUgaXMgcmV0dXJuZWQgYXMgYSBzdHJpbmcuCisgICAgICAgICMgSWYgYW4gT1NFcnJvciBpcyByYWlzZWQgYnkgZ2V0X2RhdGEgdGhlbiByYWlzZSBJbXBvcnRFcnJvci4KKyAgICAgICAgZXhwZWN0ZWRfc291cmNlID0gc2VsZi5sb2FkZXIuc291cmNlLmRlY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKSwgZXhwZWN0ZWRfc291cmNlKQorICAgICAgICBkZWYgcmFpc2VfT1NFcnJvcihwYXRoKToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEgPSByYWlzZV9PU0Vycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIHNlbGYubmFtZSkKKworICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgICMgUHJvcGVybHkgZGV0ZWN0IHdoZW4gbG9hZGluZyBhIHBhY2thZ2UuCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSkpCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lICsgJy5fX2luaXRfXycpKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoZSBjb2RlIG9iamVjdCBpcyBjcmVhdGVkLgorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGUgY29tcGlsZWQgY29kZSBvYmplY3QuCisgICAgICAgIGNvZGUgPSBzZWxmLmxvYWRlci5zb3VyY2VfdG9fY29kZShzZWxmLmxvYWRlci5zb3VyY2UsIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlKQorCisgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgTG9hZGluZyBhIG1vZHVsZSBzaG91bGQgc2V0IF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywKKyAgICAgICAgIyBfX3BhdGhfXyAoZm9yIHBhY2thZ2VzKSwgX19maWxlX18sIGFuZCBfX2NhY2hlZF9fLgorICAgICAgICAjIFRoZSBtb2R1bGUgc2hvdWxkIGFsc28gYmUgcHV0IGludG8gc3lzLm1vZHVsZXMuCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6CisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5uYW1lKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGF0aF9fLCBbb3MucGF0aC5kaXJuYW1lKHNlbGYucGF0aCldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIHN5cy5tb2R1bGVzKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9zZXR0aW5ncyhzZWxmKToKKyAgICAgICAgIyBfX3BhY2thZ2VfXyBuZWVkcyB0byBiZSBzZXQsIHdoaWxlIF9fcGF0aF9fIGlzIHNldCBvbiBpZiB0aGUgbW9kdWxlCisgICAgICAgICMgaXMgYSBwYWNrYWdlLgorICAgICAgICAjIFRlc3RpbmcgdGhlIHZhbHVlcyBmb3IgYSBwYWNrYWdlIGFyZSBjb3ZlcmVkIGJ5IHRlc3RfbG9hZF9tb2R1bGUuCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCisKKyAgICBkZWYgdGVzdF9nZXRfc291cmNlX2VuY29kaW5nKHNlbGYpOgorICAgICAgICAjIFNvdXJjZSBpcyBjb25zaWRlcmVkIGVuY29kZWQgaW4gVVRGLTggYnkgZGVmYXVsdCB1bmxlc3Mgb3RoZXJ3aXNlCisgICAgICAgICMgc3BlY2lmaWVkIGJ5IGFuIGVuY29kaW5nIGxpbmUuCisgICAgICAgIHNvdXJjZSA9ICJfID0gJ8O8JyIKKyAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKyAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBsYXRpbi0xXG5fID0gw7wiCisgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworCitjbGFzcyBGcm96ZW5fU291cmNlT25seUxUZXN0cyhTb3VyY2VPbmx5TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IEZyb3plbl9Tb3VyY2VPbmx5TAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VfU291cmNlT25seUxUZXN0cyhTb3VyY2VPbmx5TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IFNvdXJjZV9Tb3VyY2VPbmx5TAorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUsICJzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlIikKK2NsYXNzIFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgorCisgICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcidzIHVzZSBvZiBieXRlY29kZS4KKworICAgIFNvdXJjZS1vbmx5IHRlc3RpbmcgaGFuZGxlZCBieSBTb3VyY2VPbmx5TG9hZGVyVGVzdHMuCisKKyAgICAiIiIKKworICAgIGRlZiB2ZXJpZnlfY29kZShzZWxmLCBjb2RlX29iamVjdCwgKiwgYnl0ZWNvZGVfd3JpdHRlbj1GYWxzZSk6CisgICAgICAgIHN1cGVyKCkudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisgICAgICAgIGlmIGJ5dGVjb2RlX3dyaXR0ZW46CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQorICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShzZWxmLnV0aWwuTUFHSUNfTlVNQkVSKQorICAgICAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX210aW1lKSkKKyAgICAgICAgICAgIGRhdGEuZXh0ZW5kKHNlbGYuaW5pdC5fd19sb25nKHNlbGYubG9hZGVyLnNvdXJjZV9zaXplKSkKKyAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci53cml0dGVuW3NlbGYuY2FjaGVkXSwgYnl0ZXMoZGF0YSkpCisKKyAgICBkZWYgdGVzdF9jb2RlX3dpdGhfZXZlcnl0aGluZyhzZWxmKToKKyAgICAgICAgIyBXaGVuIGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsuCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQorCisgICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6CisgICAgICAgICMgSWYgbm8gYnl0ZWNvZGUgZXhpc3RzIHRoZW4gbW92ZSBvbiB0byB0aGUgc291cmNlLgorICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCisgICAgICAgICMgU2FuaXR5IGNoZWNrCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisKKyAgICBkZWYgdGVzdF9jb2RlX2JhZF90aW1lc3RhbXAoc2VsZik6CisgICAgICAgICMgQnl0ZWNvZGUgaXMgb25seSB1c2VkIHdoZW4gdGhlIHRpbWVzdGFtcCBtYXRjaGVzIHRoZSBzb3VyY2UgRVhBQ1RMWS4KKyAgICAgICAgZm9yIHNvdXJjZV9tdGltZSBpbiAoMCwgMik6CisgICAgICAgICAgICBhc3NlcnQgc291cmNlX210aW1lICE9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQorICAgICAgICAgICAgb3JpZ2luYWwgPSBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IHNvdXJjZV9tdGltZQorICAgICAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCisgICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQorICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisgICAgICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUgPSBvcmlnaW5hbAorCisgICAgZGVmIHRlc3RfY29kZV9iYWRfbWFnaWMoc2VsZik6CisgICAgICAgICMgU2tpcCBvdmVyIGJ5dGVjb2RlIHdpdGggYSBiYWQgbWFnaWMgbnVtYmVyLgorICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCisgICAgICAgICMgSWYgYnl0ZWNvZGUgaXMgdXNlZCB0aGVuIEVPRkVycm9yIHdvdWxkIGJlIHJhaXNlZCBieSBtYXJzaGFsLgorICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCwgYnl0ZWNvZGVfd3JpdHRlbj1UcnVlKQorCisgICAgZGVmIHRlc3RfZG9udF93cml0ZV9ieXRlY29kZShzZWxmKToKKyAgICAgICAgIyBCeXRlY29kZSBpcyBub3Qgd3JpdHRlbiBpZiBzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlLgorICAgICAgICAjIENhbiBhc3N1bWUgaXQgaXMgZmFsc2UgYWxyZWFkeSB0aGFua3MgdG8gdGhlIHNraXBJZiBjbGFzcyBkZWNvcmF0b3IuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuYnl0ZWNvZGVfcGF0aCA9ICI8ZG9lcyBub3QgZXhpc3Q+IgorICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQorCisgICAgZGVmIHRlc3Rfbm9fc2V0X2RhdGEoc2VsZik6CisgICAgICAgICMgSWYgc2V0X2RhdGEgaXMgbm90IGRlZmluZWQsIG9uZSBjYW4gc3RpbGwgcmVhZCBieXRlY29kZS4KKyAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQorICAgICAgICBvcmlnaW5hbF9zZXRfZGF0YSA9IHNlbGYubG9hZGVyLl9fY2xhc3NfXy5tcm8oKVsxXS5zZXRfZGF0YQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5sb2FkZXIuX19jbGFzc19fLm1ybygpWzFdLnNldF9kYXRhCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmxvYWRlci5fX2NsYXNzX18ubXJvKClbMV0uc2V0X2RhdGEgPSBvcmlnaW5hbF9zZXRfZGF0YQorCisgICAgZGVmIHRlc3Rfc2V0X2RhdGFfcmFpc2VzX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgUmFpc2luZyBOb3RJbXBsZW1lbnRlZEVycm9yIG9yIE9TRXJyb3IgaXMgb2theSBmb3Igc2V0X2RhdGEuCisgICAgICAgIGRlZiByYWlzZV9leGNlcHRpb24oZXhjKToKKyAgICAgICAgICAgIGRlZiBjbG9zdXJlKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcmFpc2UgZXhjCisgICAgICAgICAgICByZXR1cm4gY2xvc3VyZQorCisgICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKKyAgICAgICAgc2VsZi5sb2FkZXIuc2V0X2RhdGEgPSByYWlzZV9leGNlcHRpb24oTm90SW1wbGVtZW50ZWRFcnJvcikKKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKworY2xhc3MgRnJvemVuX1NMQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJCeXRlY29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbG9hZGVyX21vY2sgPSBGcm96ZW5fU0wKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworY2xhc3MgU291cmNlU0xCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IFNvdXJjZV9TTAorICAgIGluaXQgPSBzb3VyY2VfaW5pdAorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzOgorCisgICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2UoKS4iIiIKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGhhdmUgbm8gcHJvYmxlbXMgd2l0aCBVVEYtOCB0ZXh0LgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKKyAgICAgICAgc291cmNlID0gJ3ggPSAiw7wiJworICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVkX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBEZWNvZGluZyBzaG91bGQgd29yay4KKyAgICAgICAgbmFtZSA9ICdtb2QnCisgICAgICAgIG1vY2sgPSBzZWxmLlNvdXJjZU9ubHlMb2FkZXJNb2NrKCJtb2QuZmlsZSIpCisgICAgICAgIHNvdXJjZSA9ICIjIGNvZGluZzogTGF0aW4tMVxueD0nw7wnIgorICAgICAgICBhc3NlcnQgc291cmNlLmVuY29kZSgnbGF0aW4tMScpICE9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykKKyAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF91bml2ZXJzYWxfbmV3bGluZXMoc2VsZik6CisgICAgICAgICMgUEVQIDMwMiBzYXlzIHVuaXZlcnNhbCBuZXdsaW5lcyBzaG91bGQgYmUgdXNlZC4KKyAgICAgICAgbmFtZSA9ICdtb2QnCisgICAgICAgIG1vY2sgPSBzZWxmLlNvdXJjZU9ubHlMb2FkZXJNb2NrKCdtb2QuZmlsZScpCisgICAgICAgIHNvdXJjZSA9ICJ4ID0gNDJcclxueSA9IC0xM1xyXG4iCisgICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBleHBlY3QgPSBpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIFRydWUpLmRlY29kZShzb3VyY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfc291cmNlKG5hbWUpLCBleHBlY3QpCisKKworY2xhc3MgRnJvemVuX1NvdXJjZU9ubHlMR2V0U291cmNlVGVzdHMoU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBTb3VyY2VPbmx5TG9hZGVyTW9jayA9IEZyb3plbl9Tb3VyY2VPbmx5TAorCitjbGFzcyBTb3VyY2VfU291cmNlT25seUxHZXRTb3VyY2VUZXN0cyhTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIFNvdXJjZU9ubHlMb2FkZXJNb2NrID0gU291cmNlX1NvdXJjZU9ubHlMCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hcGkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQppbmRleCBiMWE1ODk0Li43NDQwMDFiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQpAQCAtMSwxNCArMSwxOCBAQAogZnJvbSAuIGltcG9ydCB1dGlsCi1pbXBvcnQgaW1wCi1pbXBvcnQgaW1wb3J0bGliCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CisKK2Zyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKK2ltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIAogCi1jbGFzcyBJbXBvcnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBJbXBvcnRNb2R1bGVUZXN0czoKIAogICAgICIiIlRlc3QgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUuIiIiCiAKQEAgLTE2LDcgKzIwLDcgQEAKICAgICAgICAgIyBUZXN0IGltcG9ydGluZyBhIHRvcC1sZXZlbCBtb2R1bGUuCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAndG9wX2xldmVsJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMjYsNyArMzAsNyBAQAogICAgICAgICBuYW1lID0gJ3swfS5tb2QnLmZvcm1hdChwa2dfbmFtZSkKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBuYW1lKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9zaGFsbG93X3JlbGF0aXZlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMzgsMTcgKzQyLDE3IEBACiAgICAgICAgIHJlbGF0aXZlX25hbWUgPSAnLnswfScuZm9ybWF0KG1vZHVsZV9uYW1lKQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKHBrZ19sb25nX25hbWUsIGFic29sdXRlX25hbWUpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBhYnNvbHV0ZV9uYW1lKQogCiAgICAgZGVmIHRlc3RfZGVlcF9yZWxhdGl2ZV9wYWNrYWdlX2ltcG9ydChzZWxmKToKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmIuX19pbml0X18nLCAnYS5jJ10KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2EnKQotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdhLmInKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuLmMnLCAnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYScpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ2EuYicpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy4uYycsICdhLmInKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnYS5jJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX2ltcG9ydF93aXRoX3BhY2thZ2Uoc2VsZik6CkBAIC01OSwxNSArNjMsMTUgQEAKICAgICAgICAgbmFtZSA9ICd7MH0ubW9kJy5mb3JtYXQocGtnX25hbWUpCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUocGtnX25hbWUpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUocGtnX25hbWUpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRfd29fcGFja2FnZShzZWxmKToKICAgICAgICAgIyBSZWxhdGl2ZSBpbXBvcnRzIGNhbm5vdCBoYXBwZW4gd2l0aG91dCB0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IGJlaW5nCiAgICAgICAgICMgc2V0LgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLnN1cHBvcnQnKQorICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy5zdXBwb3J0JykKIAogCiAgICAgZGVmIHRlc3RfbG9hZGVkX29uY2Uoc2VsZik6CkBAIC03Niw3ICs4MCw3IEBACiAgICAgICAgICMgbW9kdWxlIGN1cnJlbnRseSBiZWluZyBpbXBvcnRlZC4KICAgICAgICAgYl9sb2FkX2NvdW50ID0gMAogICAgICAgICBkZWYgbG9hZF9hKCk6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCdhLmInKQogICAgICAgICBkZWYgbG9hZF9iKCk6CiAgICAgICAgICAgICBub25sb2NhbCBiX2xvYWRfY291bnQKICAgICAgICAgICAgIGJfbG9hZF9jb3VudCArPSAxCkBAIC04NCwxMSArODgsMTcgQEAKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmInXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCptb2R1bGVzLCBtb2R1bGVfY29kZT1jb2RlKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYS5iJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiX2xvYWRfY291bnQsIDEpCiAKK2NsYXNzIEZyb3plbl9JbXBvcnRNb2R1bGVUZXN0cyhJbXBvcnRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAogCi1jbGFzcyBGaW5kTG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU291cmNlX0ltcG9ydE1vZHVsZVRlc3RzKEltcG9ydE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisKKworY2xhc3MgRmluZExvYWRlclRlc3RzOgogCiAgICAgY2xhc3MgRmFrZU1ldGFGaW5kZXI6CiAgICAgICAgIEBzdGF0aWNtZXRob2QKQEAgLTk4LDI5ICsxMDgsNTEgQEAKICAgICAgICAgIyBJZiBhIG1vZHVsZSB3aXRoIF9fbG9hZGVyX18gaXMgaW4gc3lzLm1vZHVsZXMsIHRoZW4gcmV0dXJuIGl0LgogICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICBsb2FkZXIgPSAnYSBsb2FkZXIhJwogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBmb3VuZCA9IGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIGZvdW5kID0gc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgZm91bmQpCiAKICAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19sb2FkZXJfaXNfTm9uZShzZWxmKToKICAgICAgICAgIyBJZiBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fIGlzIE5vbmUsIHJhaXNlIFZhbHVlRXJyb3IuCiAgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gTm9uZQogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmZpbmRfbG9hZGVyKG5hbWUpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19sb2FkZXJfaXNfbm90X3NldChzZWxmKToKKyAgICAgICAgIyBTaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAjIElzc3VlICMxNzA5OQorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKIAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CiAgICAgICAgICMgUmV0dXJuIHRoZSBsb2FkZXIgZm91bmQgb24gc3lzLm1ldGFfcGF0aC4KICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIE5vbmUpLCBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSkpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSksIHNlbGYuaW5pdC5maW5kX2xvYWRlcihuYW1lKSkKIAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3NfcGF0aChzZWxmKToKICAgICAgICAgIyBTZWFyY2hpbmcgb24gYSBwYXRoIHNob3VsZCB3b3JrLgpAQCAtMTI4LDE1ICsxNjAsMjAwIEBACiAgICAgICAgIHBhdGggPSAncGF0aCB0byBzb21lIHBsYWNlJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgcGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSwgcGF0aCkpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUsIHBhdGgpKQogCiAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKICAgICAgICAgIyBOb25lIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZSB0byBmaW5kIGEgbG9hZGVyLgotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbXBvcnRsaWIuZmluZF9sb2FkZXIoJ25ldmVyZ29pbmd0b2ZpbmR0aGlzbW9kdWxlJykpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5pbml0LmZpbmRfbG9hZGVyKCduZXZlcmdvaW5ndG9maW5kdGhpc21vZHVsZScpKQorCitjbGFzcyBGcm96ZW5fRmluZExvYWRlclRlc3RzKEZpbmRMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorCitjbGFzcyBTb3VyY2VfRmluZExvYWRlclRlc3RzKEZpbmRMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBzb3VyY2VfaW5pdAogCiAKLWNsYXNzIEludmFsaWRhdGVDYWNoZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFJlbG9hZFRlc3RzOgorCisgICAgIiIiVGVzdCBtb2R1bGUgcmVsb2FkaW5nIGZvciBidWlsdGluIGFuZCBleHRlbnNpb24gbW9kdWxlcy4iIiIKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9tb2R1bGVzKHNlbGYpOgorICAgICAgICBmb3IgbW9kIGluICgndG9rZW5pemUnLCAndGltZScsICdtYXJzaGFsJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtb2R1bGU9bW9kKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuQ2xlYW5JbXBvcnQobW9kKToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobW9kKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgZGVmIGNvZGUoKToKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKSgndG9wX2xldmVsJykKKyAgICAgICAgICAgIG1vZHVsZS5zcGFtID0gMworICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ3RvcF9sZXZlbCddID0gbW9kdWxlCisgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsndG9wX2xldmVsJzogY29kZX0pCisgICAgICAgIHdpdGggbW9jazoKKyAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbC5zcGFtLCAzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVsb2FkZWQuc3BhbSwgMykKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9taXNzaW5nX2xvYWRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCd0eXBlcycpOgorICAgICAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgICAgICBsb2FkZXIgPSB0eXBlcy5fX2xvYWRlcl9fCisgICAgICAgICAgICBkZWwgdHlwZXMuX19sb2FkZXJfXworICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKHR5cGVzKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCB0eXBlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbJ3R5cGVzJ10sIHR5cGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWxvYWRlZC5fX2xvYWRlcl9fLnBhdGgsIGxvYWRlci5wYXRoKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2xvYWRlcl9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCd0eXBlcycpOgorICAgICAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgICAgICB0eXBlcy5fX2xvYWRlcl9fID0gTm9uZQorICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZCh0eXBlcykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChyZWxvYWRlZC5fX2xvYWRlcl9fLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgdHlwZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzWyd0eXBlcyddLCB0eXBlcykKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9sb2NhdGlvbl9jaGFuZ2VkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChOb25lKSBhcyBjd2Q6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnc3BhbScpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5EaXJzT25TeXNQYXRoKGN3ZCk6CisgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgYXMgYSBwbGFpbiBtb2R1bGUuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lICsgJy5weScpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nOiBjYWNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2RvY19fJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fYnVpbHRpbnNfXyc6IF9fYnVpbHRpbnNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LmNyZWF0ZV9lbXB0eV9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IG5zLnBvcCgnX19sb2FkZXJfXycpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBucy5wb3AoJ19fc3BlY19fJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIucGF0aCwgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucywgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgICAgICAgICAgIyBDaGFuZ2UgdG8gYSBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICAgICAgICAgICAgICBpbml0X3BhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgICAgICAgICBjYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19maWxlX18nOiBpbml0X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2NhY2hlZF9fJzogY2FjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbb3MucGF0aC5kaXJuYW1lKGluaXRfcGF0aCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19kb2NfXyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5zX18nOiBfX2J1aWx0aW5zX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKHBhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgbnMgPSB2YXJzKHJlbG9hZGVkKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gbnMucG9wKCdfX3NwZWNfXycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIucGF0aCwgaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX25hbWVzcGFjZV9jaGFuZ2VkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChOb25lKSBhcyBjd2Q6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnc3BhbScpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5EaXJzT25TeXNQYXRoKGN3ZCk6CisgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgYXMgYSBuYW1lc3BhY2UgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmFkX3BhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lLCAnX19pbml0LnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGJhZF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19kb2NfXyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGJhZF9wYXRoLCAndycpIGFzIGluaXRfZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfZmlsZS53cml0ZSgnZWdncyA9IE5vbmUnKQorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBucyA9IHZhcnMobW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBwYXRoID0gbnMucG9wKCdfX3BhdGhfXycpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBucy5wb3AoJ19fc3BlY19fJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXIsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobG9hZGVyLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoW29zLnBhdGguZGlybmFtZShiYWRfcGF0aCldKSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGEgTmFtZXNwYWNlTG9hZGVyCisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIucGF0aAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgICAgICAgICAgICAgICAgICAjIENoYW5nZSB0byBhIHJlZ3VsYXIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogaW5pdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19jYWNoZWRfXyc6IGNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW29zLnBhdGguZGlybmFtZShpbml0X3BhdGgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19idWlsdGluc19fJzogX19idWlsdGluc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWdncyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKGJhZF9wYXRoLCBpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhyZWxvYWRlZCkKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbnMucG9wKCdfX2xvYWRlcl9fJykKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IG5zLnBvcCgnX19zcGVjX18nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLnBhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfc3VibW9kdWxlKHNlbGYpOgorICAgICAgICAjIFNlZSAjMTk4NTEuCisgICAgICAgIG5hbWUgPSAnc3BhbScKKyAgICAgICAgc3VibmFtZSA9ICdoYW0nCisgICAgICAgIHdpdGggdXRpbC50ZW1wX21vZHVsZShuYW1lLCBwa2c9VHJ1ZSkgYXMgcGtnX2RpcjoKKyAgICAgICAgICAgIGZ1bGxuYW1lLCBfID0gdXRpbC5zdWJtb2R1bGUobmFtZSwgc3VibmFtZSwgcGtnX2RpcikKKyAgICAgICAgICAgIGhhbSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKGZ1bGxuYW1lKQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKGhhbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGhhbSkKKworCitjbGFzcyBGcm96ZW5fUmVsb2FkVGVzdHMoUmVsb2FkVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworY2xhc3MgU291cmNlX1JlbG9hZFRlc3RzKFJlbG9hZFRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworY2xhc3MgSW52YWxpZGF0ZUNhY2hlVGVzdHM6CiAKICAgICBkZWYgdGVzdF9tZXRob2RfY2FsbGVkKHNlbGYpOgogICAgICAgICAjIElmIGRlZmluZWQgdGhlIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkLgpAQCAtMTU1LDQ4ICszNzIsNjUgQEAKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuX19kZWxpdGVtX18oa2V5KSkKICAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVba2V5XSA9IHBhdGhfaW5zCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHN5cy5tZXRhX3BhdGgucmVtb3ZlKG1ldGFfaW5zKSkKLSAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ldGFfaW5zLmNhbGxlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdGhfaW5zLmNhbGxlZCkKIAogICAgIGRlZiB0ZXN0X21ldGhvZF9sYWNraW5nKHNlbGYpOgogICAgICAgICAjIFRoZXJlIHNob3VsZCBiZSBubyBpc3N1ZXMgaWYgdGhlIG1ldGhvZCBpcyBub3QgZGVmaW5lZC4KICAgICAgICAga2V5ID0gJ2dvYmJsZWRlZWdvb2snCi0gICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW2tleV0gPSBpbXAuTnVsbEltcG9ydGVyKCdhYmMnKQorICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtrZXldID0gTm9uZQogICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5fX2RlbGl0ZW1fXyhrZXkpKQotICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKSAgIyBTaG91bGRuJ3QgdHJpZ2dlciBhbiBleGNlcHRpb24uCisgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpICAjIFNob3VsZG4ndCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbi4KKworY2xhc3MgRnJvemVuX0ludmFsaWRhdGVDYWNoZVRlc3RzKEludmFsaWRhdGVDYWNoZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IGZyb3plbl9pbml0CisKK2NsYXNzIFNvdXJjZV9JbnZhbGlkYXRlQ2FjaGVUZXN0cyhJbnZhbGlkYXRlQ2FjaGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBzb3VyY2VfaW5pdAogCiAKIGNsYXNzIEZyb3plbkltcG9ydGxpYlRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X25vX2Zyb3plbl9pbXBvcnRsaWIoc2VsZik6CiAgICAgICAgICMgU2hvdWxkIGJlIGFibGUgdG8gaW1wb3J0IHcvbyBfZnJvemVuX2ltcG9ydGxpYiBiZWluZyBkZWZpbmVkLgotICAgICAgICBtb2R1bGUgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2ltcG9ydGxpYicsIGJsb2NrZWQ9WydfZnJvemVuX2ltcG9ydGxpYiddKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UobW9kdWxlLl9fbG9hZGVyX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIpKQorICAgICAgICAjIENhbid0IGRvIGFuIGlzaW5zdGFuY2UoKSBjaGVjayBzaW5jZSBzZXBhcmF0ZSBjb3BpZXMgb2YgaW1wb3J0bGliCisgICAgICAgICMgbWF5IGhhdmUgYmVlbiB1c2VkIGZvciBpbXBvcnQsIHNvIGp1c3QgY2hlY2sgdGhlIG5hbWUgaXMgbm90IGZvciB0aGUKKyAgICAgICAgIyBmcm96ZW4gbG9hZGVyLgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNvdXJjZV9pbml0Ll9fbG9hZGVyX18uX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGcm96ZW5JbXBvcnRlcicpCiAKIAotY2xhc3MgU3RhcnR1cFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFN0YXJ0dXBUZXN0czoKIAogICAgIGRlZiB0ZXN0X2V2ZXJ5b25lX2hhc19fX2xvYWRlcl9fKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxNzA5ODogYWxsIG1vZHVsZXMgc2hvdWxkIGhhdmUgX19sb2FkZXJfXyBkZWZpbmVkLgogICAgICAgICBmb3IgbmFtZSwgbW9kdWxlIGluIHN5cy5tb2R1bGVzLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1vZHVsZSwgdHlwZXMuTW9kdWxlVHlwZSk6Ci0gICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0bGliLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18pCi0gICAgICAgICAgICAgICAgZWxpZiBpbXAuaXNfZnJvemVuKG5hbWUpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcG9ydGxpYi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmFtZT1uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn0gbGFja3MgYSBfX2xvYWRlcl9fIGF0dHJpYnV0ZScuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUobmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vZHVsZS5fX2xvYWRlcl9fLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmZpbmRfbW9kdWxlKG5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2R1bGUuX19sb2FkZXJfXywgTm9uZSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoSW1wb3J0TW9kdWxlVGVzdHMsCi0gICAgICAgICAgICAgICAgIEZpbmRMb2FkZXJUZXN0cywKLSAgICAgICAgICAgICAgICAgSW52YWxpZGF0ZUNhY2hlVGVzdHMsCi0gICAgICAgICAgICAgICAgIEZyb3plbkltcG9ydGxpYlRlc3RzLAotICAgICAgICAgICAgICAgICBTdGFydHVwVGVzdHMpCisgICAgZGVmIHRlc3RfZXZlcnlvbmVfaGFzX19fc3BlY19fKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSwgbW9kdWxlIGluIHN5cy5tb2R1bGVzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1vZHVsZSwgdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmFtZT1uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnX19zcGVjX18nKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKG5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2R1bGUuX19zcGVjX18sIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUobmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vZHVsZS5fX3NwZWNfXywgTm9uZSkKKworY2xhc3MgRnJvemVuX1N0YXJ0dXBUZXN0cyhTdGFydHVwVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisKK2NsYXNzIFNvdXJjZV9TdGFydHVwVGVzdHMoU3RhcnR1cFRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbG9ja3MucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5CmluZGV4IGMzNzNiMTEuLmRjOTdiYTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbG9ja3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weQpAQCAtMSw0ICsxLDggQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK2Zyb3plbl9ib290c3RyYXAgPSBmcm96ZW5faW5pdC5fYm9vdHN0cmFwCitzb3VyY2VfYm9vdHN0cmFwID0gc291cmNlX2luaXQuX2Jvb3RzdHJhcAorCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC0xMywxNCArMTcsOSBAQAogZWxzZToKICAgICBmcm9tIHRlc3QgaW1wb3J0IGxvY2tfdGVzdHMKIAotCi1Mb2NrVHlwZSA9IF9ib290c3RyYXAuX01vZHVsZUxvY2sKLURlYWRsb2NrRXJyb3IgPSBfYm9vdHN0cmFwLl9EZWFkbG9ja0Vycm9yCi0KLQogaWYgdGhyZWFkaW5nIGlzIG5vdCBOb25lOgotICAgIGNsYXNzIE1vZHVsZUxvY2tBc1JMb2NrVGVzdHMobG9ja190ZXN0cy5STG9ja1Rlc3RzKToKLSAgICAgICAgbG9ja3R5cGUgPSBzdGF0aWNtZXRob2QobGFtYmRhOiBMb2NrVHlwZSgic29tZV9sb2NrIikpCisgICAgY2xhc3MgTW9kdWxlTG9ja0FzUkxvY2tUZXN0czoKKyAgICAgICAgbG9ja3R5cGUgPSBjbGFzc21ldGhvZChsYW1iZGEgY2xzOiBjbHMuTG9ja1R5cGUoInNvbWVfbG9jayIpKQogCiAgICAgICAgICMgX2lzX293bmVkKCkgdW5zdXBwb3J0ZWQKICAgICAgICAgdGVzdF9faXNfb3duZWQgPSBOb25lCkBAIC0zNCwxMyArMzMsMjEgQEAKICAgICAgICAgIyBfcmVsZWFzZV9zYXZlKCkgdW5zdXBwb3J0ZWQKICAgICAgICAgdGVzdF9yZWxlYXNlX3NhdmVfdW5hY3F1aXJlZCA9IE5vbmUKIAorICAgIGNsYXNzIEZyb3plbl9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKE1vZHVsZUxvY2tBc1JMb2NrVGVzdHMsIGxvY2tfdGVzdHMuUkxvY2tUZXN0cyk6CisgICAgICAgIExvY2tUeXBlID0gZnJvemVuX2Jvb3RzdHJhcC5fTW9kdWxlTG9jaworCisgICAgY2xhc3MgU291cmNlX01vZHVsZUxvY2tBc1JMb2NrVGVzdHMoTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywgbG9ja190ZXN0cy5STG9ja1Rlc3RzKToKKyAgICAgICAgTG9ja1R5cGUgPSBzb3VyY2VfYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisKIGVsc2U6Ci0gICAgY2xhc3MgTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgRnJvemVuX01vZHVsZUxvY2tBc1JMb2NrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBwYXNzCisKKyAgICBjbGFzcyBTb3VyY2VfTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBhc3MKIAogCi1AdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICJ0aHJlYWRzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IikKLWNsYXNzIERlYWRsb2NrQXZvaWRhbmNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRGVhZGxvY2tBdm9pZGFuY2VUZXN0czoKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgdHJ5OgpAQCAtNTUsNyArNjIsNyBAQAogCiAgICAgZGVmIHJ1bl9kZWFkbG9ja19hdm9pZGFuY2VfdGVzdChzZWxmLCBjcmVhdGVfZGVhZGxvY2spOgogICAgICAgICBOTE9DS1MgPSAxMAotICAgICAgICBsb2NrcyA9IFtMb2NrVHlwZShzdHIoaSkpIGZvciBpIGluIHJhbmdlKE5MT0NLUyldCisgICAgICAgIGxvY2tzID0gW3NlbGYuTG9ja1R5cGUoc3RyKGkpKSBmb3IgaSBpbiByYW5nZShOTE9DS1MpXQogICAgICAgICBwYWlycyA9IFsobG9ja3NbaV0sIGxvY2tzWyhpKzEpJU5MT0NLU10pIGZvciBpIGluIHJhbmdlKE5MT0NLUyldCiAgICAgICAgIGlmIGNyZWF0ZV9kZWFkbG9jazoKICAgICAgICAgICAgIE5USFJFQURTID0gTkxPQ0tTCkBAIC02Nyw3ICs3NCw3IEBACiAgICAgICAgICAgICAiIiJUcnkgdG8gYWNxdWlyZSB0aGUgbG9jay4gUmV0dXJuIFRydWUgb24gc3VjY2VzcywgRmFsc2Ugb24gZGVhZGxvY2suIiIiCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbG9jay5hY3F1aXJlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBEZWFkbG9ja0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IHNlbGYuRGVhZGxvY2tFcnJvcjoKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKQEAgLTk5LDMwICsxMDYsNTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLmNvdW50KChUcnVlLCBGYWxzZSkpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMuY291bnQoKFRydWUsIFRydWUpKSwgbGVuKHJlc3VsdHMpKQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICJ0aHJlYWRzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IikKK2NsYXNzIEZyb3plbl9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzKERlYWRsb2NrQXZvaWRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBMb2NrVHlwZSA9IGZyb3plbl9ib290c3RyYXAuX01vZHVsZUxvY2sKKyAgICBEZWFkbG9ja0Vycm9yID0gZnJvemVuX2Jvb3RzdHJhcC5fRGVhZGxvY2tFcnJvcgogCi1jbGFzcyBMaWZldGltZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgInRocmVhZHMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorY2xhc3MgU291cmNlX0RlYWRsb2NrQXZvaWRhbmNlVGVzdHMoRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIExvY2tUeXBlID0gc291cmNlX2Jvb3RzdHJhcC5fTW9kdWxlTG9jaworICAgIERlYWRsb2NrRXJyb3IgPSBzb3VyY2VfYm9vdHN0cmFwLl9EZWFkbG9ja0Vycm9yCisKKworY2xhc3MgTGlmZXRpbWVUZXN0czoKIAogICAgIGRlZiB0ZXN0X2xvY2tfbGlmZXRpbWUoc2VsZik6CiAgICAgICAgIG5hbWUgPSAieHl6enkiCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQotICAgICAgICBsb2NrID0gX2Jvb3RzdHJhcC5fZ2V0X21vZHVsZV9sb2NrKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCisgICAgICAgIGxvY2sgPSBzZWxmLmJvb3RzdHJhcC5fZ2V0X21vZHVsZV9sb2NrKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihsb2NrKQogICAgICAgICBkZWwgbG9jawogICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIF9ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3cigpKQogCiAgICAgZGVmIHRlc3RfYWxsX2xvY2tzKHNlbGYpOgogICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCisKK2NsYXNzIEZyb3plbl9MaWZldGltZVRlc3RzKExpZmV0aW1lVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBib290c3RyYXAgPSBmcm96ZW5fYm9vdHN0cmFwCisKK2NsYXNzIFNvdXJjZV9MaWZldGltZVRlc3RzKExpZmV0aW1lVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBib290c3RyYXAgPSBzb3VyY2VfYm9vdHN0cmFwCiAKIAogQHN1cHBvcnQucmVhcF90aHJlYWRzCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBEZWFkbG9ja0F2b2lkYW5jZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIExpZmV0aW1lVGVzdHMpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRnJvemVuX01vZHVsZUxvY2tBc1JMb2NrVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlX01vZHVsZUxvY2tBc1JMb2NrVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRnJvemVuX0RlYWRsb2NrQXZvaWRhbmNlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlX0RlYWRsb2NrQXZvaWRhbmNlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRnJvemVuX0xpZmV0aW1lVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlX0xpZmV0aW1lVGVzdHMpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3Rfc3BlYy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3Rfc3BlYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU0MWY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9zcGVjLnB5CkBAIC0wLDAgKzEsOTU3IEBACitmcm9tIC4gaW1wb3J0IHV0aWwKKworZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX2Jvb3RzdHJhcCA9IGZyb3plbl9pbml0Ll9ib290c3RyYXAKK3NvdXJjZV9ib290c3RyYXAgPSBzb3VyY2VfaW5pdC5fYm9vdHN0cmFwCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKK2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorCitpbXBvcnQgb3MucGF0aAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IENsZWFuSW1wb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworCisKKworY2xhc3MgVGVzdExvYWRlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPU5vbmUsIGlzX3BhY2thZ2U9Tm9uZSk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5wYWNrYWdlID0gaXNfcGFja2FnZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxUZXN0TG9hZGVyIG9iamVjdD4nCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUgPT0gJ2dldF9maWxlbmFtZScgYW5kIHNlbGYucGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZmlsZW5hbWUKKyAgICAgICAgaWYgbmFtZSA9PSAnaXNfcGFja2FnZSc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faXNfcGFja2FnZQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorCisgICAgZGVmIF9nZXRfZmlsZW5hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLnBhdGgKKworICAgIGRlZiBfaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGFja2FnZQorCisKK2NsYXNzIE5ld0xvYWRlcihUZXN0TG9hZGVyKToKKworICAgIEVHR1MgPSAxCisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgbW9kdWxlLmVnZ3MgPSBzZWxmLkVHR1MKKworCitjbGFzcyBMZWdhY3lMb2FkZXIoVGVzdExvYWRlcik6CisKKyAgICBIQU0gPSAtMQorCisgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKKworICAgICAgICBAZnJvemVuX3V0aWwubW9kdWxlX2Zvcl9sb2FkZXIKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICBtb2R1bGUuaGFtID0gc2VsZi5IQU0KKyAgICAgICAgICAgIHJldHVybiBtb2R1bGUKKworCitjbGFzcyBNb2R1bGVTcGVjVGVzdHM6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICdzcGFtJworICAgICAgICBzZWxmLnBhdGggPSAnc3BhbS5weScKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLnNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYubG9jX3NwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1zZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9jX3NwZWMuX3NldF9maWxlYXR0ciA9IFRydWUKKworICAgIGRlZiB0ZXN0X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfbm9fbG9hZGVyKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlciwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9pc19wYWNrYWdlX2ZhbHNlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPUZhbHNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2lzX3BhY2thZ2VfdHJ1ZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3RfaGFzX2xvY2F0aW9uX3NldHRlcihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPSdzb21ld2hlcmUnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorICAgICAgICBzcGVjLmhhc19sb2NhdGlvbiA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIG90aGVyID0gdHlwZShzeXMuaW1wbGVtZW50YXRpb24pKG5hbWU9c2VsZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfbG9jYXRpb249RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3BlYyA9PSBvdGhlcikKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5X2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBvdGhlciA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKShuYW1lPXNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfbG9jYXRpb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkPXNlbGYuY2FjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvY19zcGVjLCBvdGhlcikKKworICAgIGRlZiB0ZXN0X2luZXF1YWxpdHkoc2VsZik6CisgICAgICAgIG90aGVyID0gdHlwZShzeXMuaW1wbGVtZW50YXRpb24pKG5hbWU9J2hhbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19sb2NhdGlvbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuc3BlYywgb3RoZXIpCisKKyAgICBkZWYgdGVzdF9pbmVxdWFsaXR5X2luY29tcGxldGUoc2VsZik6CisgICAgICAgIG90aGVyID0gdHlwZShzeXMuaW1wbGVtZW50YXRpb24pKG5hbWU9c2VsZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuc3BlYywgb3RoZXIpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygnc3BhbS5lZ2dzJywgc2VsZi5sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnBhcmVudCwgJ3NwYW0nKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygnc3BhbS5lZ2dzJywgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMucGFyZW50LCAnc3BhbS5lZ2dzJykKKworICAgICMgY2FjaGVkCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfc2V0KHNlbGYpOgorICAgICAgICBiZWZvcmUgPSBzZWxmLnNwZWMuY2FjaGVkCisgICAgICAgIHNlbGYuc3BlYy5jYWNoZWQgPSAndGhlcmUnCisgICAgICAgIGFmdGVyID0gc2VsZi5zcGVjLmNhY2hlZAorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYmVmb3JlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFmdGVyLCAndGhlcmUnKQorCisgICAgZGVmIHRlc3RfY2FjaGVkX25vX29yaWdpbihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2FjaGVkX3dpdGhfb3JpZ2luX25vdF9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPXNlbGYucGF0aCkKKworICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2FjaGVkX3NvdXJjZShzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2Nfc3BlYy5jYWNoZWQsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfY2FjaGVkX3NvdXJjZV91bmtub3duX3N1ZmZpeChzZWxmKToKKyAgICAgICAgc2VsZi5sb2Nfc3BlYy5vcmlnaW4gPSAnc3BhbS5zcGFtc3BhbXNwYW0nCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLmxvY19zcGVjLmNhY2hlZCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zb3VyY2VfbWlzc2luZ19jYWNoZV90YWcoc2VsZik6CisgICAgICAgIG9yaWdpbmFsID0gc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZworICAgICAgICBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWNoZWQgPSBzZWxmLmxvY19zcGVjLmNhY2hlZAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyA9IG9yaWdpbmFsCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjYWNoZWQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfc291cmNlbGVzcyhzZWxmKToKKyAgICAgICAgc2VsZi5sb2Nfc3BlYy5vcmlnaW4gPSAnc3BhbS5weWMnCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvY19zcGVjLmNhY2hlZCwgJ3NwYW0ucHljJykKKworCitjbGFzcyBGcm96ZW5fTW9kdWxlU3BlY1Rlc3RzKE1vZHVsZVNwZWNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKworCitjbGFzcyBTb3VyY2VfTW9kdWxlU3BlY1Rlc3RzKE1vZHVsZVNwZWNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKKworCitjbGFzcyBNb2R1bGVTcGVjTWV0aG9kc1Rlc3RzOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnc3BhbScKKyAgICAgICAgc2VsZi5wYXRoID0gJ3NwYW0ucHknCisgICAgICAgIHNlbGYuY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmxvY19zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49c2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvY19zcGVjLl9zZXRfZmlsZWF0dHIgPSBUcnVlCisKKyAgICAjIGluaXRfbW9kdWxlX2F0dHJzCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRycyhzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKHNlbGYubmFtZSkKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBzcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3NwZWNfXywgc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19jYWNoZWRfXycpKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfcGFja2FnZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKHNlbGYubmFtZSkKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFsnc3BhbScsICdoYW0nXQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3BhdGhfXywgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJykpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19sb2NhdGlvbihzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKHNlbGYubmFtZSkKKyAgICAgICAgc3BlYyA9IHNlbGYubG9jX3NwZWMKKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBzcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3NwZWNfXywgc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBzcGVjLm9yaWdpbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19jYWNoZWRfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc3BlYy5vcmlnaW4pKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfZGlmZmVyZW50X25hbWUoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKSgnZWdncycpCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2RpZmZlcmVudF9zcGVjKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQorICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCdlZ2dzJywgb2JqZWN0KCkpCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19zcGVjX18sIHNwZWMpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19hbHJlYWR5X3NldChzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKCdoYW0uZWdncycpCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gb2JqZWN0KCkKKyAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gJ2hhbScKKyAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gWydlZ2dzJ10KKyAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gJ2hhbS9lZ2dzL19faW5pdF9fLnB5JworICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShtb2R1bGUuX19maWxlX18pCisgICAgICAgIG9yaWdpbmFsID0gdmFycyhtb2R1bGUpLmNvcHkoKQorICAgICAgICBzcGVjID0gc2VsZi5sb2Nfc3BlYworICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gWycnXQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIG9yaWdpbmFsWydfX2xvYWRlcl9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBvcmlnaW5hbFsnX19wYWNrYWdlX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19wYXRoX18sIG9yaWdpbmFsWydfX3BhdGhfXyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgb3JpZ2luYWxbJ19fZmlsZV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sIG9yaWdpbmFsWydfX2NhY2hlZF9fJ10pCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19pbW11dGFibGUoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IG9iamVjdCgpCisgICAgICAgIHNwZWMgPSBzZWxmLmxvY19zcGVjCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbJyddCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fbmFtZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19zcGVjX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19jYWNoZWRfXycpKQorCisgICAgIyBjcmVhdGUoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlKHNlbGYpOgorICAgICAgICBjcmVhdGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuY3JlYXRlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19uYW1lX18sIHNlbGYuc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19zcGVjX18sIHNlbGYuc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19jYWNoZWRfXycpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fbG9hZGVyKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikoKQorICAgICAgICBjbGFzcyBDcmVhdGluZ0xvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IENyZWF0aW5nTG9hZGVyKCkKKyAgICAgICAgY3JlYXRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmNyZWF0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLCBtb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX25hbWVfXywgc2VsZi5zcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2NhY2hlZF9fJykpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9sb2FkZXJfbm90X2hhbmRsZWQoc2VsZik6CisgICAgICAgIGNsYXNzIENyZWF0aW5nTG9hZGVyKFRlc3RMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGNyZWF0ZV9tb2R1bGUoc2VsZiwgc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IENyZWF0aW5nTG9hZGVyKCkKKyAgICAgICAgY3JlYXRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmNyZWF0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fbmFtZV9fLCBzZWxmLnNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fY2FjaGVkX18nKSkKKworICAgICMgZXhlYygpCisKKyAgICBkZWYgdGVzdF9leGVjKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgbW9kdWxlID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuY3JlYXRlKCkKKyAgICAgICAgc3lzLm1vZHVsZXNbc2VsZi5uYW1lXSA9IG1vZHVsZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnZWdncycpKQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5lZ2dzLCAxKQorCisgICAgIyBsb2FkKCkKKworICAgIGRlZiB0ZXN0X2xvYWQoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgaW5zdGFsbGVkID0gc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZWdncywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWQsIGluc3RhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvYWRfcmVwbGFjZWQoc2VsZik6CisgICAgICAgIHJlcGxhY2VtZW50ID0gb2JqZWN0KCkKKyAgICAgICAgY2xhc3MgUmVwbGFjaW5nTG9hZGVyKFRlc3RMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbbW9kdWxlLl9fbmFtZV9fXSA9IHJlcGxhY2VtZW50CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBSZXBsYWNpbmdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgaW5zdGFsbGVkID0gc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWQsIHJlcGxhY2VtZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGluc3RhbGxlZCwgcmVwbGFjZW1lbnQpCisKKyAgICBkZWYgdGVzdF9sb2FkX2ZhaWxlZChzZWxmKToKKyAgICAgICAgY2xhc3MgRmFpbGVkTG9hZGVyKFRlc3RMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBGYWlsZWRMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5zcGVjLm5hbWUsIHN5cy5tb2R1bGVzKQorCisgICAgZGVmIHRlc3RfbG9hZF9mYWlsZWRfcmVtb3ZlZChzZWxmKToKKyAgICAgICAgY2xhc3MgRmFpbGVkTG9hZGVyKFRlc3RMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZHVsZS5fX25hbWVfX10KKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IEZhaWxlZExvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihzZWxmLnNwZWMubmFtZSwgc3lzLm1vZHVsZXMpCisKKyAgICBkZWYgdGVzdF9sb2FkX2xlZ2FjeShzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IExlZ2FjeUxvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuaGFtLCAtMSkKKworICAgIGRlZiB0ZXN0X2xvYWRfbGVnYWN5X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBMZWdhY3lMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorCisgICAgZGVmIHRlc3RfbG9hZF9sZWdhY3lfYXR0cmlidXRlc19pbW11dGFibGUoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IG9iamVjdCgpCisgICAgICAgIGNsYXNzIEltbXV0YWJsZUxvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IEltbXV0YWJsZUxvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdLCBtb2R1bGUpCisKKyAgICAjIHJlbG9hZCgpCisKKyAgICBkZWYgdGVzdF9yZWxvYWQoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVnZ3MsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGxvYWRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnN0YWxsZWQsIGxvYWRlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9tb2RpZmllZChzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBsb2FkZWQuZWdncyA9IDIKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZWdncywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbG9hZGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2V4dHJhX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgbG9hZGVkLmF2YWlsYWJsZSA9IEZhbHNlCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9hZGVkLmF2YWlsYWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbG9hZGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2luaXRfbW9kdWxlX2F0dHJzKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGxvYWRlZC5fX25hbWVfXyA9ICdoYW0nCisgICAgICAgICAgICBkZWwgbG9hZGVkLl9fbG9hZGVyX18KKyAgICAgICAgICAgIGRlbCBsb2FkZWQuX19wYWNrYWdlX18KKyAgICAgICAgICAgIGRlbCBsb2FkZWQuX19zcGVjX18KKyAgICAgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLl9fbmFtZV9fLCBzZWxmLnNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihsb2FkZWQsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobG9hZGVkLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGxvYWRlZCwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9sZWdhY3koc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBMZWdhY3lMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmhhbSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGxvYWRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnN0YWxsZWQsIGxvYWRlZCkKKworCitjbGFzcyBGcm96ZW5fTW9kdWxlU3BlY01ldGhvZHNUZXN0cyhNb2R1bGVTcGVjTWV0aG9kc1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gZnJvemVuX2Jvb3RzdHJhcAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworCitjbGFzcyBTb3VyY2VfTW9kdWxlU3BlY01ldGhvZHNUZXN0cyhNb2R1bGVTcGVjTWV0aG9kc1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gc291cmNlX2Jvb3RzdHJhcAorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKworCitjbGFzcyBNb2R1bGVSZXByVGVzdHM6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubW9kdWxlID0gdHlwZShvcykoJ3NwYW0nKQorICAgICAgICBzZWxmLnNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCdzcGFtJywgVGVzdExvYWRlcigpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fbG9hZGVyX19fbW9kdWxlX3JlcHIoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJldHVybiAnPGRlbGljaW91cyB7fT4nLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisgICAgICAgIHNlbGYubW9kdWxlLl9fbG9hZGVyX18gPSBMb2FkZXIoKQorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxkZWxpY2lvdXMgc3BhbT4nKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fbG9hZGVyX19fbW9kdWxlX3JlcHJfYmFkKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KKyAgICAgICAgc2VsZi5tb2R1bGUuX19sb2FkZXJfXyA9IExvYWRlcigpCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8bW9kdWxlIHshcn0gKDxUZXN0TG9hZGVyIG9iamVjdD4pPicuZm9ybWF0KCdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19zcGVjX18oc2VsZik6CisgICAgICAgIG9yaWdpbiA9ICdpbiBhIGhvbGUsIGluIHRoZSBncm91bmQnCisgICAgICAgIHNlbGYuc3BlYy5vcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgc2VsZi5tb2R1bGUuX19zcGVjX18gPSBzZWxmLnNwZWMKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsICc8bW9kdWxlIHshcn0gKHt9KT4nLmZvcm1hdCgnc3BhbScsIG9yaWdpbikpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19zcGVjX19fbG9jYXRpb24oc2VsZik6CisgICAgICAgIGxvY2F0aW9uID0gJ2luX2FfZ2FsYXh5X2Zhcl9mYXJfYXdheS5weScKKyAgICAgICAgc2VsZi5zcGVjLm9yaWdpbiA9IGxvY2F0aW9uCisgICAgICAgIHNlbGYuc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorICAgICAgICBzZWxmLm1vZHVsZS5fX3NwZWNfXyA9IHNlbGYuc3BlYworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdCgnc3BhbScsIGxvY2F0aW9uKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX3NwZWNfX19ub19vcmlnaW4oc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5tb2R1bGUuX19zcGVjX18gPSBzZWxmLnNwZWMKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSAoPFRlc3RMb2FkZXIgb2JqZWN0Pik+Jy5mb3JtYXQoJ3NwYW0nKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX3NwZWNfX19ub19vcmlnaW5fbm9fbG9hZGVyKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTm9uZQorICAgICAgICBzZWxmLm1vZHVsZS5fX3NwZWNfXyA9IHNlbGYuc3BlYworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfT4nLmZvcm1hdCgnc3BhbScpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX25vX25hbWUoc2VsZik6CisgICAgICAgIGRlbCBzZWxmLm1vZHVsZS5fX25hbWVfXworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfT4nLmZvcm1hdCgnPycpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3dpdGhfZmlsZShzZWxmKToKKyAgICAgICAgZmlsZW5hbWUgPSAnZS9pL2UvaS9vL3NwYW0ucHknCisgICAgICAgIHNlbGYubW9kdWxlLl9fZmlsZV9fID0gZmlsZW5hbWUKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSBmcm9tIHshcn0+Jy5mb3JtYXQoJ3NwYW0nLCBmaWxlbmFtZSkpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfbm9fZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5tb2R1bGUuX19sb2FkZXJfXyA9IFRlc3RMb2FkZXIoKQorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9ICg8VGVzdExvYWRlciBvYmplY3Q+KT4nLmZvcm1hdCgnc3BhbScpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX25vX2ZpbGVfbm9fbG9hZGVyKHNlbGYpOgorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfT4nLmZvcm1hdCgnc3BhbScpKQorCisKK2NsYXNzIEZyb3plbl9Nb2R1bGVSZXByVGVzdHMoTW9kdWxlUmVwclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gZnJvemVuX2Jvb3RzdHJhcAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworCitjbGFzcyBTb3VyY2VfTW9kdWxlUmVwclRlc3RzKE1vZHVsZVJlcHJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworY2xhc3MgRmFjdG9yeVRlc3RzOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnc3BhbScKKyAgICAgICAgc2VsZi5wYXRoID0gJ3NwYW0ucHknCisgICAgICAgIHNlbGYuY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5maWxlbG9hZGVyID0gVGVzdExvYWRlcihzZWxmLnBhdGgpCisgICAgICAgIHNlbGYucGtnbG9hZGVyID0gVGVzdExvYWRlcihzZWxmLnBhdGgsIFRydWUpCisKKyAgICAjIHNwZWNfZnJvbV9sb2FkZXIoKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9kZWZhdWx0X3dpdGhfYmFkX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIGxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfb3JpZ2luKHNlbGYpOgorICAgICAgICBvcmlnaW4gPSAnc29tZXdoZXJlIG92ZXIgdGhlIHJhaW5ib3cnCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPW9yaWdpbikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgb3JpZ2luKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2VfZmFsc2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1GYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX3RydWUoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9vcmlnaW5fYW5kX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIG9yaWdpbiA9ICd3aGVyZSB0aGUgc3RyZWV0cyBoYXZlIG5vIG5hbWUnCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPW9yaWdpbiwgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBvcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2Vfd2l0aF9sb2FkZXJfZmFsc2Uoc2VsZik6CisgICAgICAgIGxvYWRlciA9IFRlc3RMb2FkZXIoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX3dpdGhfbG9hZGVyX3RydWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IFRlc3RMb2FkZXIoaXNfcGFja2FnZT1UcnVlKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9kZWZhdWx0X3dpdGhfZmlsZV9sb2FkZXIoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX2ZhbHNlX3dpdGhfZmlsZWxvYWRlcihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1GYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX3RydWVfd2l0aF9maWxlbG9hZGVyKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmZpbGVsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgICMgc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fZGVmYXVsdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5tYWNoaW5lcnkgaXMgc291cmNlX21hY2hpbmVyeToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdub3Qgc3VyZSB3aHkgdGhpcyBpcyBicmVha2luZy4uLicpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNwZWMubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlci5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIucGF0aCwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2RlZmF1bHRfd2l0aG91dF9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fZGVmYXVsdF9iYWRfc3VmZml4KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgJ3NwYW0uZWdncycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fbG9hZGVyX25vX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9sb2FkZXJfbm9fbG9jYXRpb25fbm9fZ2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sICc8dW5rbm93bj4nKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2xvYWRlcl9ub19sb2NhdGlvbl9iYWRfZ2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXI6CisgICAgICAgICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBsb2FkZXI9bG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgJzx1bmtub3duPicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9ub25lKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZW1wdHkoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9W10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfbm90X2VtcHR5KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVsnZWdncyddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFsnZWdncyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYucGtnbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYucGtnbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZGVmYXVsdF9ub3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9kZWZhdWx0X25vX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX2RlZmF1bHRfYmFkX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGxvYWRlciA9IExvYWRlcigpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisKK2NsYXNzIEZyb3plbl9GYWN0b3J5VGVzdHMoRmFjdG9yeVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCisKK2NsYXNzIFNvdXJjZV9GYWN0b3J5VGVzdHMoRmFjdG9yeVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5CmluZGV4IGVmYzg5NzcuLmIyODIzYzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkKQEAgLTEsMjMgKzEsNjYgQEAKIGZyb20gaW1wb3J0bGliIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCi1pbXBvcnQgaW1wCitmcm96ZW5faW5pdCwgc291cmNlX2luaXQgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCitmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorCitpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncwogCiAKLWNsYXNzIE1vZHVsZUZvckxvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIERlY29kZVNvdXJjZUJ5dGVzVGVzdHM6CisKKyAgICBzb3VyY2UgPSAic3RyaW5nID0nw7wnIgorCisgICAgZGVmIHRlc3RfdXQ4X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNlbGYuc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5kZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyksIHNlbGYuc291cmNlKQorCisgICAgZGVmIHRlc3Rfc3BlY2lmaWVkX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSAnIyBjb2Rpbmc9bGF0aW4tMVxuJyArIHNlbGYuc291cmNlCisgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICBhc3NlcnQgc291cmNlX2J5dGVzICE9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF91bml2ZXJzYWxfbmV3bGluZXMoc2VsZik6CisgICAgICAgIHNvdXJjZSA9ICdcclxuJy5qb2luKFtzZWxmLnNvdXJjZSwgc2VsZi5zb3VyY2VdKQorICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLmpvaW4oW3NlbGYuc291cmNlLCBzZWxmLnNvdXJjZV0pKQorCitGcm96ZW5fRGVjb2RlU291cmNlQnl0ZXNUZXN0cywgU291cmNlX0RlY29kZVNvdXJjZUJ5dGVzVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBEZWNvZGVTb3VyY2VCeXRlc1Rlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQorCisKK2NsYXNzIE1vZHVsZUZvckxvYWRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyLiIiIgogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1vZHVsZV9mb3JfbG9hZGVyKGNscywgZnVuYyk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgcmV0dXJuIGNscy51dGlsLm1vZHVsZV9mb3JfbG9hZGVyKGZ1bmMpCisKKyAgICBkZWYgdGVzdF93YXJuaW5nKHNlbGYpOgorICAgICAgICAjIFNob3VsZCByYWlzZSBhIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgd2hlbiB1c2VkLgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Vycm9yJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIGZ1bmMgPSBzZWxmLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIobGFtYmRhIHg6IHgpCisKICAgICBkZWYgcmV0dXJuX21vZHVsZShzZWxmLCBuYW1lKToKLSAgICAgICAgZnhuID0gdXRpbC5tb2R1bGVfZm9yX2xvYWRlcihsYW1iZGEgc2VsZiwgbW9kdWxlOiBtb2R1bGUpCisgICAgICAgIGZ4biA9IHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIobGFtYmRhIHNlbGYsIG1vZHVsZTogbW9kdWxlKQogICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG5hbWUpCiAKICAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHNlbGYsIG5hbWUpOgogICAgICAgICBkZWYgdG9fd3JhcChzZWxmLCBtb2R1bGUpOgogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLSAgICAgICAgZnhuID0gdXRpbC5tb2R1bGVfZm9yX2xvYWRlcih0b193cmFwKQorICAgICAgICBmeG4gPSBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyKHRvX3dyYXApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ4bihzZWxmLCBuYW1lKQogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0zNSwxMiArNzgsMjMgQEAKIAogICAgIGRlZiB0ZXN0X3JlbG9hZChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgYSBtb2R1bGUgaXMgcmV1c2VkIGlmIGFscmVhZHkgaW4gc3lzLm1vZHVsZXMuCisgICAgICAgIGNsYXNzIEZha2VMb2FkZXI6CisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgQHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIKKyAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKICAgICAgICAgbmFtZSA9ICdhLmIuYycKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ2EuYi5jJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYS5iLmMnKQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IDQyCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IDQyCiAgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgcmV0dXJuZWRfbW9kdWxlID0gc2VsZi5yZXR1cm5fbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBsb2FkZXIgPSBGYWtlTG9hZGVyKCkKKyAgICAgICAgICAgIHJldHVybmVkX21vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZXR1cm5lZF9tb2R1bGUsIHN5cy5tb2R1bGVzW25hbWVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19sb2FkZXJfXywgbG9hZGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9uZXdfbW9kdWxlX2ZhaWx1cmUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGEgbW9kdWxlIGlzIHJlbW92ZWQgZnJvbSBzeXMubW9kdWxlcyBpZiBhZGRlZCBidXQgYW4KQEAgLTUzLDcgKzEwNyw3IEBACiAgICAgZGVmIHRlc3RfcmVsb2FkX2ZhaWx1cmUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGEgZmFpbHVyZSBvbiByZWxvYWQgbGVhdmVzIHRoZSBtb2R1bGUgaW4tcGxhY2UuCiAgICAgICAgIG5hbWUgPSAnYS5iLmMnCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCiAgICAgICAgICAgICBzZWxmLnJhaXNlX2V4Y2VwdGlvbihuYW1lKQpAQCAtNjEsNyArMTE1LDcgQEAKIAogICAgIGRlZiB0ZXN0X2RlY29yYXRvcl9hdHRycyhzZWxmKToKICAgICAgICAgZGVmIGZ4bihzZWxmLCBtb2R1bGUpOiBwYXNzCi0gICAgICAgIHdyYXBwZWQgPSB1dGlsLm1vZHVsZV9mb3JfbG9hZGVyKGZ4bikKKyAgICAgICAgd3JhcHBlZCA9IHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIoZnhuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZWQuX19uYW1lX18sIGZ4bi5fX25hbWVfXykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fcXVhbG5hbWVfXywgZnhuLl9fcXVhbG5hbWVfXykKIApAQCAtODcsNyArMTQxLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLl9wa2cgPSBpc19wYWNrYWdlCiAgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGtnCi0gICAgICAgICAgICBAdXRpbC5tb2R1bGVfZm9yX2xvYWRlcgorICAgICAgICAgICAgQHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIKICAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgogICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKIApAQCAtMTA3LDggKzE2MSwxMSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgbG9hZGVyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIG5hbWUpCiAKK0Zyb3plbl9Nb2R1bGVGb3JMb2FkZXJUZXN0cywgU291cmNlX01vZHVsZUZvckxvYWRlclRlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTW9kdWxlRm9yTG9hZGVyVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKLWNsYXNzIFNldFBhY2thZ2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIFNldFBhY2thZ2VUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIudXRpbC5zZXRfcGFja2FnZS4iIiIKIApAQCAtMTE2LDM0ICsxNzMsMzYgQEAKICAgICAgICAgIiIiVmVyaWZ5IHRoZSBtb2R1bGUgaGFzIHRoZSBleHBlY3RlZCB2YWx1ZSBmb3IgX19wYWNrYWdlX18gYWZ0ZXIKICAgICAgICAgcGFzc2luZyB0aHJvdWdoIHNldF9wYWNrYWdlLiIiIgogICAgICAgICBmeG4gPSBsYW1iZGE6IG1vZHVsZQotICAgICAgICB3cmFwcGVkID0gdXRpbC5zZXRfcGFja2FnZShmeG4pCi0gICAgICAgIHdyYXBwZWQoKQorICAgICAgICB3cmFwcGVkID0gc2VsZi51dGlsLnNldF9wYWNrYWdlKGZ4bikKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICB3cmFwcGVkKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIG1vZHVsZS5fX3BhY2thZ2VfXykKIAogICAgIGRlZiB0ZXN0X3RvcF9sZXZlbChzZWxmKToKICAgICAgICAgIyBfX3BhY2thZ2VfXyBzaG91bGQgYmUgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgYSB0b3AtbGV2ZWwgbW9kdWxlLgogICAgICAgICAjIEltcGxpY2l0bHkgdGVzdHMgd2hlbiBwYWNrYWdlIGlzIHNldCB0byBOb25lLgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgnbW9kdWxlJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnbW9kdWxlJykKICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gTm9uZQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICcnKQogCiAgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKICAgICAgICAgIyBUZXN0IHNldHRpbmcgX19wYWNrYWdlX18gZm9yIGEgcGFja2FnZS4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ3BrZycpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ3BrZycpCiAgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFsnPHBhdGg+J10KICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gTm9uZQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICdwa2cnKQogCiAgICAgZGVmIHRlc3Rfc3VibW9kdWxlKHNlbGYpOgogICAgICAgICAjIFRlc3QgX19wYWNrYWdlX18gZm9yIGEgbW9kdWxlIGluIGEgcGFja2FnZS4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ3BrZy5tb2QnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdwa2cubW9kJykKICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gTm9uZQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICdwa2cnKQogCiAgICAgZGVmIHRlc3Rfc2V0dGluZ19pZl9taXNzaW5nKHNlbGYpOgogICAgICAgICAjIF9fcGFja2FnZV9fIHNob3VsZCBiZSBzZXQgaWYgaXQgaXMgbWlzc2luZy4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ21vZCcpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZCcpCiAgICAgICAgIGlmIGhhc2F0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nKToKICAgICAgICAgICAgIGRlbGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nKQogICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsICcnKQpAQCAtMTUxLDU4ICsyMTAsMzgzIEBACiAgICAgZGVmIHRlc3RfbGVhdmluZ19hbG9uZShzZWxmKToKICAgICAgICAgIyBJZiBfX3BhY2thZ2VfXyBpcyBzZXQgYW5kIG5vdCBOb25lIHRoZW4gbGVhdmUgaXQgYWxvbmUuCiAgICAgICAgIGZvciB2YWx1ZSBpbiAoVHJ1ZSwgRmFsc2UpOgotICAgICAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ21vZCcpCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdtb2QnKQogICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gdmFsdWUKICAgICAgICAgICAgIHNlbGYudmVyaWZ5KG1vZHVsZSwgdmFsdWUpCiAKICAgICBkZWYgdGVzdF9kZWNvcmF0b3JfYXR0cnMoc2VsZik6CiAgICAgICAgIGRlZiBmeG4obW9kdWxlKTogcGFzcwotICAgICAgICB3cmFwcGVkID0gdXRpbC5zZXRfcGFja2FnZShmeG4pCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgd3JhcHBlZCA9IHNlbGYudXRpbC5zZXRfcGFja2FnZShmeG4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlZC5fX25hbWVfXywgZnhuLl9fbmFtZV9fKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZWQuX19xdWFsbmFtZV9fLCBmeG4uX19xdWFsbmFtZV9fKQogCitGcm96ZW5fU2V0UGFja2FnZVRlc3RzLCBTb3VyY2VfU2V0UGFja2FnZVRlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU2V0UGFja2FnZVRlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQogCi1jbGFzcyBSZXNvbHZlTmFtZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgU2V0TG9hZGVyVGVzdHM6CisKKyAgICAiIiJUZXN0cyBpbXBvcnRsaWIudXRpbC5zZXRfbG9hZGVyKCkuIiIiCisKKyAgICBjbGFzcyBEdW1teUxvYWRlcjoKKyAgICAgICAgQHV0aWwuc2V0X2xvYWRlcgorICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZQorCisgICAgZGVmIHRlc3Rfbm9fYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLkR1bW15TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgbG9hZGVyLm1vZHVsZS5fX2xvYWRlcl9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbG9hZGVyLmxvYWRfbW9kdWxlKCdibGFoJykuX19sb2FkZXJfXykKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9pc19Ob25lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLkR1bW15TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBsb2FkZXIubW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIGxvYWRlci5sb2FkX21vZHVsZSgnYmxhaCcpLl9fbG9hZGVyX18pCisKKyAgICBkZWYgdGVzdF9ub3RfcmVzZXQoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYuRHVtbXlMb2FkZXIoKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGxvYWRlci5tb2R1bGUuX19sb2FkZXJfXyA9IDQyCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgbG9hZGVyLmxvYWRfbW9kdWxlKCdibGFoJykuX19sb2FkZXJfXykKKworY2xhc3MgRnJvemVuX1NldExvYWRlclRlc3RzKFNldExvYWRlclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgRHVtbXlMb2FkZXI6CisgICAgICAgIEBmcm96ZW5fdXRpbC5zZXRfbG9hZGVyCisgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKK2NsYXNzIFNvdXJjZV9TZXRMb2FkZXJUZXN0cyhTZXRMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIER1bW15TG9hZGVyOgorICAgICAgICBAc291cmNlX3V0aWwuc2V0X2xvYWRlcgorICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZQorCisKK2NsYXNzIFJlc29sdmVOYW1lVGVzdHM6CiAKICAgICAiIiJUZXN0cyBpbXBvcnRsaWIudXRpbC5yZXNvbHZlX25hbWUoKS4iIiIKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlKHNlbGYpOgogICAgICAgICAjIGJhY29uCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhY29uJywgdXRpbC5yZXNvbHZlX25hbWUoJ2JhY29uJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhY29uJywgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnYmFjb24nLCBOb25lKSkKIAogICAgIGRlZiB0ZXN0X2Fib3NsdXRlX3dpdGhpbl9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIGJhY29uIGluIHNwYW0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCB1dGlsLnJlc29sdmVfbmFtZSgnYmFjb24nLCAnc3BhbScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYWNvbicsIHNlbGYudXRpbC5yZXNvbHZlX25hbWUoJ2JhY29uJywgJ3NwYW0nKSkKIAogICAgIGRlZiB0ZXN0X25vX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgLmJhY29uIGluICcnCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICB1dGlsLnJlc29sdmVfbmFtZSgnLmJhY29uJywgJycpCisgICAgICAgICAgICBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnJykKIAogICAgIGRlZiB0ZXN0X2luX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgLmJhY29uIGluIHNwYW0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3BhbS5lZ2dzLmJhY29uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlc29sdmVfbmFtZSgnLmJhY29uJywgJ3NwYW0uZWdncycpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5yZXNvbHZlX25hbWUoJy5iYWNvbicsICdzcGFtLmVnZ3MnKSkKIAogICAgIGRlZiB0ZXN0X290aGVyX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgLi5iYWNvbiBpbiBzcGFtLmJhY29uCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NwYW0uYmFjb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0uZWdncycpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5yZXNvbHZlX25hbWUoJy4uYmFjb24nLCAnc3BhbS5lZ2dzJykpCiAKICAgICBkZWYgdGVzdF9lc2NhcGUoc2VsZik6CiAgICAgICAgICMgLi5iYWNvbiBpbiBzcGFtCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICB1dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtJykKKyAgICAgICAgICAgIHNlbGYudXRpbC5yZXNvbHZlX25hbWUoJy4uYmFjb24nLCAnc3BhbScpCisKK0Zyb3plbl9SZXNvbHZlTmFtZVRlc3RzLCBTb3VyY2VfUmVzb2x2ZU5hbWVUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFJlc29sdmVOYW1lVGVzdHMsCisgICAgICAgIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICAgICAgTW9kdWxlRm9yTG9hZGVyVGVzdHMsCi0gICAgICAgICAgICBTZXRQYWNrYWdlVGVzdHMsCi0gICAgICAgICAgICBSZXNvbHZlTmFtZVRlc3RzCi0gICAgICAgICkKK2NsYXNzIEZpbmRTcGVjVGVzdHM6CisKKyAgICBjbGFzcyBGYWtlTWV0YUZpbmRlcjoKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZmluZF9zcGVjKG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOiByZXR1cm4gbmFtZSwgcGF0aCwgdGFyZ2V0CisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIGxvYWRlciA9ICdhIGxvYWRlciEnCisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIpCisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGxvYWRlcgorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi51dGlsLmZpbmRfc3BlYyhuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgc3BlYykKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX3dpdGhvdXRfX19sb2FkZXJfXyhzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIGRlbCBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICAgICAgbG9hZGVyID0gJ2EgbG9hZGVyIScKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKG5hbWUsIGxvYWRlcikKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYudXRpbC5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHNwZWMpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19zcGVjX2lzX05vbmUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBOb25lCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLnV0aWwuZmluZF9zcGVjKG5hbWUpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19sb2FkZXJfaXNfTm9uZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKG5hbWUsIE5vbmUpCisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLnV0aWwuZmluZF9zcGVjKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzcGVjKQorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfc3BlY19pc19ub3Rfc2V0KHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBtb2R1bGUuX19zcGVjX18KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLnV0aWwuZmluZF9zcGVjKG5hbWUpCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3V0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIE5vbmUsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLmZpbmRfc3BlYyhuYW1lKSkKKworIyAgICBkZWYgdGVzdF9zdWNjZXNzX3BhdGgoc2VsZik6CisjICAgICAgICAjIFNlYXJjaGluZyBvbiBhIHBhdGggc2hvdWxkIHdvcmsuCisjICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworIyAgICAgICAgcGF0aCA9ICdwYXRoIHRvIHNvbWUgcGxhY2UnCisjICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorIyAgICAgICAgICAgIHdpdGggdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuRmFrZU1ldGFGaW5kZXJdKToKKyMgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgcGF0aCwgTm9uZSksCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLmZpbmRfc3BlYyhuYW1lLCBwYXRoKSkKKworICAgIGRlZiB0ZXN0X25vdGhpbmcoc2VsZik6CisgICAgICAgICMgTm9uZSBpcyByZXR1cm5lZCB1cG9uIGZhaWx1cmUgdG8gZmluZCBhIGxvYWRlci4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi51dGlsLmZpbmRfc3BlYygnbmV2ZXJnb2luZ3RvZmluZHRoaXNtb2R1bGUnKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfc3VibW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHN1Ym5hbWUgPSAnaGFtJworICAgICAgICB3aXRoIHRlc3RfdXRpbC50ZW1wX21vZHVsZShuYW1lLCBwa2c9VHJ1ZSkgYXMgcGtnX2RpcjoKKyAgICAgICAgICAgIGZ1bGxuYW1lLCBfID0gdGVzdF91dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQorICAgICAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5maW5kX3NwZWMoZnVsbG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHNwZWMsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGZ1bGxuYW1lLCBzb3J0ZWQoc3lzLm1vZHVsZXMpKQorICAgICAgICAgICAgIyBFbnN1cmUgc3VjY2Vzc2l2ZSBjYWxscyBiZWhhdmUgdGhlIHNhbWUuCisgICAgICAgICAgICBzcGVjX2FnYWluID0gc2VsZi51dGlsLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlY19hZ2Fpbiwgc3BlYykKKworICAgIGRlZiB0ZXN0X2ZpbmRfc3VibW9kdWxlX3BhcmVudF9hbHJlYWR5X2ltcG9ydGVkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHN1Ym5hbWUgPSAnaGFtJworICAgICAgICB3aXRoIHRlc3RfdXRpbC50ZW1wX21vZHVsZShuYW1lLCBwa2c9VHJ1ZSkgYXMgcGtnX2RpcjoKKyAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBmdWxsbmFtZSwgXyA9IHRlc3RfdXRpbC5zdWJtb2R1bGUobmFtZSwgc3VibmFtZSwgcGtnX2RpcikKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuZmluZF9zcGVjKGZ1bGxuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzcGVjLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzb3J0ZWQoc3lzLm1vZHVsZXMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmdWxsbmFtZSwgc29ydGVkKHN5cy5tb2R1bGVzKSkKKyAgICAgICAgICAgICMgRW5zdXJlIHN1Y2Nlc3NpdmUgY2FsbHMgYmVoYXZlIHRoZSBzYW1lLgorICAgICAgICAgICAgc3BlY19hZ2FpbiA9IHNlbGYudXRpbC5maW5kX3NwZWMoZnVsbG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWNfYWdhaW4sIHNwZWMpCisKKyAgICBkZWYgdGVzdF9maW5kX3JlbGF0aXZlX21vZHVsZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICBzdWJuYW1lID0gJ2hhbScKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudGVtcF9tb2R1bGUobmFtZSwgcGtnPVRydWUpIGFzIHBrZ19kaXI6CisgICAgICAgICAgICBmdWxsbmFtZSwgXyA9IHRlc3RfdXRpbC5zdWJtb2R1bGUobmFtZSwgc3VibmFtZSwgcGtnX2RpcikKKyAgICAgICAgICAgIHJlbG5hbWUgPSAnLicgKyBzdWJuYW1lCisgICAgICAgICAgICBzcGVjID0gc2VsZi51dGlsLmZpbmRfc3BlYyhyZWxuYW1lLCBuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzcGVjLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzb3J0ZWQoc3lzLm1vZHVsZXMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmdWxsbmFtZSwgc29ydGVkKHN5cy5tb2R1bGVzKSkKKyAgICAgICAgICAgICMgRW5zdXJlIHN1Y2Nlc3NpdmUgY2FsbHMgYmVoYXZlIHRoZSBzYW1lLgorICAgICAgICAgICAgc3BlY19hZ2FpbiA9IHNlbGYudXRpbC5maW5kX3NwZWMoZnVsbG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWNfYWdhaW4sIHNwZWMpCisKKyAgICBkZWYgdGVzdF9maW5kX3JlbGF0aXZlX21vZHVsZV9taXNzaW5nX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc3BhbScKKyAgICAgICAgc3VibmFtZSA9ICdoYW0nCisgICAgICAgIHdpdGggdGVzdF91dGlsLnRlbXBfbW9kdWxlKG5hbWUsIHBrZz1UcnVlKSBhcyBwa2dfZGlyOgorICAgICAgICAgICAgZnVsbG5hbWUsIF8gPSB0ZXN0X3V0aWwuc3VibW9kdWxlKG5hbWUsIHN1Ym5hbWUsIHBrZ19kaXIpCisgICAgICAgICAgICByZWxuYW1lID0gJy4nICsgc3VibmFtZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLnV0aWwuZmluZF9zcGVjKHJlbG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGZ1bGxuYW1lLCBzb3J0ZWQoc3lzLm1vZHVsZXMpKQorCisKK2NsYXNzIEZyb3plbl9GaW5kU3BlY1Rlc3RzKEZpbmRTcGVjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKK2NsYXNzIFNvdXJjZV9GaW5kU3BlY1Rlc3RzKEZpbmRTcGVjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworY2xhc3MgTWFnaWNOdW1iZXJUZXN0czoKKworICAgIGRlZiB0ZXN0X2xlbmd0aChzZWxmKToKKyAgICAgICAgIyBTaG91bGQgYmUgNCBieXRlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi51dGlsLk1BR0lDX05VTUJFUiksIDQpCisKKyAgICBkZWYgdGVzdF9pbmNvcnBvcmF0ZXNfcm4oc2VsZik6CisgICAgICAgICMgVGhlIG1hZ2ljIG51bWJlciB1c2VzIFxyXG4gdG8gY29tZSBvdXQgd3Jvbmcgd2hlbiBzcGxpdHRpbmcgb24gbGluZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnV0aWwuTUFHSUNfTlVNQkVSLmVuZHN3aXRoKGInXHJcbicpKQorCitGcm96ZW5fTWFnaWNOdW1iZXJUZXN0cywgU291cmNlX01hZ2ljTnVtYmVyVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBNYWdpY051bWJlclRlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQorCisKK2NsYXNzIFBFUDMxNDdUZXN0czoKKworICAgICIiIlRlc3RzIG9mIFBFUCAzMTQ3LXJlbGF0ZWQgZnVuY3Rpb25zOiBjYWNoZV9mcm9tX3NvdXJjZSBhbmQgc291cmNlX2Zyb21fY2FjaGUuIiIiCisKKyAgICB0YWcgPSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIG5vdCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIG5vdCBiZSBOb25lJykKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIFBFUCAzMTQ3CisgICAgICAgICMgZGVmaW5lZCAucHljIGZpbGUgKGkuZS4gdW5kZXIgX19weWNhY2hlX18pLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXgucHknKQorICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfbm9fY2FjaGVfdGFnKHNlbGYpOgorICAgICAgICAjIE5vIGNhY2hlIHRhZyBtZWFucyBOb3RJbXBsZW1lbnRlZEVycm9yLgorICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKHN5cy5pbXBsZW1lbnRhdGlvbiwgJ2NhY2hlX3RhZycsIE5vbmUpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ3doYXRldmVyLnB5JykKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX25vX2RvdChzZWxmKToKKyAgICAgICAgIyBEaXJlY3Rvcnkgd2l0aCBhIGRvdCwgZmlsZW5hbWUgd2l0aG91dCBkb3QuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2Zvby5iYXInLCAnZmlsZScpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vLmJhcicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZXt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgVHJ1ZSksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX29wdGltaXplZChzZWxmKToKKyAgICAgICAgIyBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIFBFUCAzMTQ3CisgICAgICAgICMgZGVmaW5lZCAucHlvIGZpbGUgKGkuZS4gdW5kZXIgX19weWNhY2hlX18pLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXgucHknKQorICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdXgue30ucHlvJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBGYWxzZSksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX2N3ZChzZWxmKToKKyAgICAgICAgcGF0aCA9ICdmb28ucHknCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignX19weWNhY2hlX18nLCAnZm9vLnt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgVHJ1ZSksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX292ZXJyaWRlKHNlbGYpOgorICAgICAgICAjIFdoZW4gZGVidWdfb3ZlcnJpZGUgaXMgbm90IE5vbmUsIGl0IGNhbiBiZSBhbnkgdHJ1ZS1pc2ggb3IgZmFsc2UtaXNoCisgICAgICAgICMgdmFsdWUuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6LnB5JykKKyAgICAgICAgcGFydGlhbF9leHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmF6Lnt9LnB5Jy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBbXSksIHBhcnRpYWxfZXhwZWN0ICsgJ28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBbMTddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsX2V4cGVjdCArICdjJykKKyAgICAgICAgIyBIb3dldmVyIGlmIHRoZSBib29sLWlzaG5lc3MgY2FuJ3QgYmUgZGV0ZXJtaW5lZCwgdGhlIGV4Y2VwdGlvbgorICAgICAgICAjIHByb3BhZ2F0ZXMuCisgICAgICAgIGNsYXNzIEJlYXJpc2g6CisgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6IHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJy9mb28vYmFyL2Jhei5weScsIEJlYXJpc2goKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLnNlcCA9PSAnXFwnIGFuZCBvcy5hbHRzZXAgPT0gJy8nLAorICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgbWVhbmluZ2Z1bCBvbmx5IHdoZXJlIG9zLmFsdHNlcCBpcyBkZWZpbmVkJykKKyAgICBkZWYgdGVzdF9zZXBfYWx0c2VwX2FuZF9zZXBfY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgV2luZG93cyBwYXRoIGFuZCBQRVAgMzE0NyB3aGVyZSBzZXAgaXMgcmlnaHQgb2YgYWx0c2VwLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCdcXGZvb1xcYmFyXFxiYXovcXV4LnB5JywgVHJ1ZSksCisgICAgICAgICAgICAnXFxmb29cXGJhclxcYmF6XFxfX3B5Y2FjaGVfX1xccXV4Lnt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgbm90IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgdG8gbm90IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnTm9uZScpCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGUoc2VsZik6CisgICAgICAgICMgR2l2ZW4gdGhlIHBhdGggdG8gYSBQRVAgMzE0NyBkZWZpbmVkIC5weWMgZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvCisgICAgICAgICMgaXRzIHNvdXJjZS4gIFRoaXMgdGVzdHMgdGhlIGdvb2QgcGF0aC4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9ub19jYWNoZV90YWcoc2VsZik6CisgICAgICAgICMgSWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lLCByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdibGFoJywgJ19fcHljYWNoZV9fJywgJ3doYXRldmVyLnB5YycpCisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIoc3lzLmltcGxlbWVudGF0aW9uLCAnY2FjaGVfdGFnJywgTm9uZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZShwYXRoKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfYmFkX3BhdGgoc2VsZik6CisgICAgICAgICMgV2hlbiB0aGUgcGF0aCB0byBhIHB5YyBmaWxlIGlzIG5vdCBpbiBQRVAgMzE0NyBmb3JtYXQsIGEgVmFsdWVFcnJvcgorICAgICAgICAjIGlzIHJhaXNlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsICcvZm9vL2Jhci9iYXpxdXgucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX25vX3NsYXNoKHNlbGYpOgorICAgICAgICAjIE5vIHNsYXNoZXMgYXQgYWxsIGluIHBhdGggLT4gVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJ2Zvby5jcHl0aG9uLTMyLnB5YycpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV90b29fZmV3X2RvdHMoc2VsZik6CisgICAgICAgICMgVG9vIGZldyBkb3RzIGluIGZpbmFsIHBhdGggY29tcG9uZW50IC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsICdfX3B5Y2FjaGVfXy9mb28ucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX3Rvb19tYW55X2RvdHMoc2VsZik6CisgICAgICAgICMgVG9vIG1hbnkgZG90cyBpbiBmaW5hbCBwYXRoIGNvbXBvbmVudCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLAorICAgICAgICAgICAgJ19fcHljYWNoZV9fL2Zvby5jcHl0aG9uLTMyLmZvby5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfbm9fX3B5Y2FjaGVfXyhzZWxmKToKKyAgICAgICAgIyBBbm90aGVyIHByb2JsZW0gd2l0aCB0aGUgcGF0aCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLAorICAgICAgICAgICAgJy9mb28vYmFyL2Zvby5jcHl0aG9uLTMyLmZvby5weWMnKQorCitGcm96ZW5fUEVQMzE0N1Rlc3RzLCBTb3VyY2VfUEVQMzE0N1Rlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUEVQMzE0N1Rlc3RzLAorICAgICAgICB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3Rfd2luZG93cy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3Rfd2luZG93cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmI0YWRjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF93aW5kb3dzLnB5CkBAIC0wLDAgKzEsMjkgQEAKK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwgJ3JlcXVpcmVzIFdpbmRvd3MnKQorY2xhc3MgV2luZG93c1JlZ2lzdHJ5RmluZGVyVGVzdHM6CisKKyAgICAjIFhYWCBOZWVkIGEgdGVzdCB0aGF0IGZpbmRzIHRoZSBzcGVjIHZpYSB0aGUgcmVnaXN0cnkuCisKKyAgICBkZWYgdGVzdF9maW5kX3NwZWNfbWlzc2luZyhzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlci5maW5kX3NwZWMoJ3NwYW0nKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9maW5kX21vZHVsZV9taXNzaW5nKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5XaW5kb3dzUmVnaXN0cnlGaW5kZXIuZmluZF9tb2R1bGUoJ3NwYW0nKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgTm9uZSkKKworCitjbGFzcyBGcm96ZW5fV2luZG93c1JlZ2lzdHJ5RmluZGVyVGVzdHMoV2luZG93c1JlZ2lzdHJ5RmluZGVyVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKworCitjbGFzcyBTb3VyY2VfV2luZG93c1JlZ2lzdHJ5RmluZGVyVGVzdHMoV2luZG93c1JlZ2lzdHJ5RmluZGVyVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi91dGlsLnB5CmluZGV4IGVmMzJmN2QuLjg4NWNlYzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weQpAQCAtMSw5ICsxLDMxIEBACiBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCi1pbXBvcnQgaW1wCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgdXRpbCwgaW52YWxpZGF0ZV9jYWNoZXMKIGltcG9ydCBvcy5wYXRoCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCisKKworZGVmIGltcG9ydF9pbXBvcnRsaWIobW9kdWxlX25hbWUpOgorICAgICIiIkltcG9ydCBhIG1vZHVsZSBmcm9tIGltcG9ydGxpYiBib3RoIHcvIGFuZCB3L28gX2Zyb3plbl9pbXBvcnRsaWIuIiIiCisgICAgZnJlc2ggPSAoJ2ltcG9ydGxpYicsKSBpZiAnLicgaW4gbW9kdWxlX25hbWUgZWxzZSAoKQorICAgIGZyb3plbiA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICBzb3VyY2UgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUobW9kdWxlX25hbWUsIGZyZXNoPWZyZXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja2VkPSgnX2Zyb3plbl9pbXBvcnRsaWInLCkpCisgICAgcmV0dXJuIGZyb3plbiwgc291cmNlCisKKworZGVmIHRlc3RfYm90aCh0ZXN0X2NsYXNzLCAqKmt3YXJncyk6CisgICAgZnJvemVuX3Rlc3RzID0gdHlwZXMubmV3X2NsYXNzKCdGcm96ZW5fJyt0ZXN0X2NsYXNzLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpKQorICAgIHNvdXJjZV90ZXN0cyA9IHR5cGVzLm5ld19jbGFzcygnU291cmNlXycrdGVzdF9jbGFzcy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSkKKyAgICBmcm96ZW5fdGVzdHMuX19tb2R1bGVfXyA9IHNvdXJjZV90ZXN0cy5fX21vZHVsZV9fID0gdGVzdF9jbGFzcy5fX21vZHVsZV9fCisgICAgZm9yIGF0dHIsIChmcm96ZW5fdmFsdWUsIHNvdXJjZV92YWx1ZSkgaW4ga3dhcmdzLml0ZW1zKCk6CisgICAgICAgIHNldGF0dHIoZnJvemVuX3Rlc3RzLCBhdHRyLCBmcm96ZW5fdmFsdWUpCisgICAgICAgIHNldGF0dHIoc291cmNlX3Rlc3RzLCBhdHRyLCBzb3VyY2VfdmFsdWUpCisgICAgcmV0dXJuIGZyb3plbl90ZXN0cywgc291cmNlX3Rlc3RzCiAKIAogQ0FTRV9JTlNFTlNJVElWRV9GUyA9IFRydWUKQEAgLTI0LDYgKzQ2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVzIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIikodGVzdCkKIAogCitkZWYgc3VibW9kdWxlKHBhcmVudCwgbmFtZSwgcGtnX2RpciwgY29udGVudD0nJyk6CisgICAgcGF0aCA9IG9zLnBhdGguam9pbihwa2dfZGlyLCBuYW1lICsgJy5weScpCisgICAgd2l0aCBvcGVuKHBhdGgsICd3JykgYXMgc3ViZmlsZToKKyAgICAgICAgc3ViZmlsZS53cml0ZShjb250ZW50KQorICAgIHJldHVybiAne30ue30nLmZvcm1hdChwYXJlbnQsIG5hbWUpLCBwYXRoCisKKwogQGNvbnRleHRtYW5hZ2VyCiBkZWYgdW5jYWNoZSgqbmFtZXMpOgogICAgICIiIlVuY2FjaGUgYSBtb2R1bGUgZnJvbSBzeXMubW9kdWxlcy4KQEAgLTQ5LDYgKzc4LDMxIEBACiAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIHRlbXBfbW9kdWxlKG5hbWUsIGNvbnRlbnQ9JycsICosIHBrZz1GYWxzZSk6CisgICAgY29uZmxpY3RzID0gW24gZm9yIG4gaW4gc3lzLm1vZHVsZXMgaWYgbi5wYXJ0aXRpb24oJy4nKVswXSA9PSBuYW1lXQorICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChOb25lKSBhcyBjd2Q6CisgICAgICAgIHdpdGggdW5jYWNoZShuYW1lLCAqY29uZmxpY3RzKToKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5EaXJzT25TeXNQYXRoKGN3ZCk6CisgICAgICAgICAgICAgICAgaW52YWxpZGF0ZV9jYWNoZXMoKQorCisgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lKQorICAgICAgICAgICAgICAgIGlmIHBrZzoKKyAgICAgICAgICAgICAgICAgICAgbW9kcGF0aCA9IG9zLnBhdGguam9pbihsb2NhdGlvbiwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtb2RwYXRoID0gbG9jYXRpb24gKyAnLnB5JworICAgICAgICAgICAgICAgICAgICBpZiBjb250ZW50IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgbW9kdWxlIGZpbGUgZ2V0cyBjcmVhdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9ICcnCisgICAgICAgICAgICAgICAgaWYgY29udGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBub3QgYSBuYW1lc3BhY2UgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4obW9kcGF0aCwgJ3cnKSBhcyBtb2RmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZmlsZS53cml0ZShjb250ZW50KQorICAgICAgICAgICAgICAgIHlpZWxkIGxvY2F0aW9uCisKKwogQGNvbnRleHRtYW5hZ2VyCiBkZWYgaW1wb3J0X3N0YXRlKCoqa3dhcmdzKToKICAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gbWFuYWdlIHRoZSB2YXJpb3VzIGltcG9ydGVycyBhbmQgc3RvcmVkIHN0YXRlIGluIHRoZQpAQCAtODAsOSArMTM0LDkgQEAKICAgICAgICAgICAgIHNldGF0dHIoc3lzLCBhdHRyLCB2YWx1ZSkKIAogCi1jbGFzcyBtb2NrX21vZHVsZXM6CitjbGFzcyBfSW1wb3J0ZXJNb2NrOgogCi0gICAgIiIiQSBtb2NrIGltcG9ydGVyL2xvYWRlci4iIiIKKyAgICAiIiJCYXNlIGNsYXNzIHRvIGhlbHAgd2l0aCBjcmVhdGluZyBpbXBvcnRlciBtb2Nrcy4iIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbmFtZXMsIG1vZHVsZV9jb2RlPXt9KToKICAgICAgICAgc2VsZi5tb2R1bGVzID0ge30KQEAgLTk4LDcgKzE1Miw3IEBACiAgICAgICAgICAgICAgICAgcGFja2FnZSA9IG5hbWUucnNwbGl0KCcuJywgMSlbMF0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGFja2FnZSA9IGltcG9ydF9uYW1lCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShpbXBvcnRfbmFtZSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoaW1wb3J0X25hbWUpCiAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKICAgICAgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9ICc8bW9jayBfX2ZpbGVfXz4nCiAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBwYWNrYWdlCkBAIC0xMTIsNiArMTY2LDE5IEBACiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOgogICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVzW25hbWVdCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl91bmNhY2hlID0gdW5jYWNoZSgqc2VsZi5tb2R1bGVzLmtleXMoKSkKKyAgICAgICAgc2VsZi5fdW5jYWNoZS5fX2VudGVyX18oKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6CisgICAgICAgIHNlbGYuX3VuY2FjaGUuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKKworCitjbGFzcyBtb2NrX21vZHVsZXMoX0ltcG9ydGVyTW9jayk6CisKKyAgICAiIiJJbXBvcnRlciBtb2NrIHVzaW5nIFBFUCAzMDIgQVBJcy4iIiIKKwogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKICAgICAgICAgaWYgZnVsbG5hbWUgbm90IGluIHNlbGYubW9kdWxlczoKICAgICAgICAgICAgIHJldHVybiBOb25lCkBAIC0xMzEsMTAgKzE5OCwyOCBAQAogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlc1tmdWxsbmFtZV0KIAotICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX3VuY2FjaGUgPSB1bmNhY2hlKCpzZWxmLm1vZHVsZXMua2V5cygpKQotICAgICAgICBzZWxmLl91bmNhY2hlLl9fZW50ZXJfXygpCi0gICAgICAgIHJldHVybiBzZWxmCitjbGFzcyBtb2NrX3NwZWMoX0ltcG9ydGVyTW9jayk6CiAKLSAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKLSAgICAgICAgc2VsZi5fdW5jYWNoZS5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQorICAgICIiIkltcG9ydGVyIG1vY2sgdXNpbmcgUEVQIDQ1MSBBUElzLiIiIgorCisgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCBwYXJlbnQ9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubW9kdWxlc1tmdWxsbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaXNfcGFja2FnZSA9IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKQorICAgICAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbigKKyAgICAgICAgICAgICAgICBmdWxsbmFtZSwgbW9kdWxlLl9fZmlsZV9fLCBsb2FkZXI9c2VsZiwKKyAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1nZXRhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJywgTm9uZSkpCisgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgaWYgc3BlYy5uYW1lIG5vdCBpbiBzZWxmLm1vZHVsZXM6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVzW3NwZWMubmFtZV0KKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLm1vZHVsZV9jb2RlW21vZHVsZS5fX3NwZWNfXy5uYW1lXSgpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW5kZXgucHkgYi9MaWIvdGVzdC90ZXN0X2luZGV4LnB5CmluZGV4IDg3ODU3MTEuLmEyYWMzMjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW5kZXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbmRleC5weQpAQCAtODEsNyArODEsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgYmFkX2ludCA9IEJhZEludCgpCi0gICAgICAgIG4gPSBvcGVyYXRvci5pbmRleChiYWRfaW50KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIG4gPSBvcGVyYXRvci5pbmRleChiYWRfaW50KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIDEpCiAKICAgICAgICAgYmFkX2ludCA9IEJhZEludDIoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CmluZGV4IDVjYmVjOWIuLjNmMjA0MTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKQEAgLTEsMjIgKzEsMzEgQEAKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IGlvCitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgb3MKK2Zyb20gb3MucGF0aCBpbXBvcnQgbm9ybWNhc2UKK2ltcG9ydCBfcGlja2xlCiBpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcworaW1wb3J0IHVuaWNvZGVkYXRhCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBpbnNwZWN0Ci1pbXBvcnQgbGluZWNhY2hlCi1pbXBvcnQgZGF0ZXRpbWUKLWltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IG9zCi1pbXBvcnQgc2h1dGlsCi1mcm9tIG9zLnBhdGggaW1wb3J0IG5vcm1jYXNlCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgRGlyc09uU3lzUGF0aAordHJ5OgorICAgIGZyb20gY29uY3VycmVudC5mdXR1cmVzIGltcG9ydCBUaHJlYWRQb29sRXhlY3V0b3IKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBUaHJlYWRQb29sRXhlY3V0b3IgPSBOb25lCiAKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgRGlyc09uU3lzUGF0aCwgY3B5dGhvbl9vbmx5Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgTUlTU0lOR19DX0RPQ1NUUklOR1MKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKIGZyb20gdGVzdCBpbXBvcnQgaW5zcGVjdF9mb2RkZXIgYXMgbW9kCiBmcm9tIHRlc3QgaW1wb3J0IGluc3BlY3RfZm9kZGVyMiBhcyBtb2QyCiAKLSMgQyBtb2R1bGUgZm9yIHRlc3RfZmluZHNvdXJjZV9iaW5hcnkKLWltcG9ydCB1bmljb2RlZGF0YQogCiAjIEZ1bmN0aW9ucyB0ZXN0ZWQgaW4gdGhpcyBzdWl0ZToKICMgaXNtb2R1bGUsIGlzY2xhc3MsIGlzbWV0aG9kLCBpc2Z1bmN0aW9uLCBpc3RyYWNlYmFjaywgaXNmcmFtZSwgaXNjb2RlLApAQCAtMTIwLDcgKzEyOSw2IEBACiAgICAgZGVmIHRlc3RfZ2V0X3Nsb3RfbWVtYmVycyhzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgX19zbG90c19fID0gKCJhIiwgImIiKQotCiAgICAgICAgIHggPSBDKCkKICAgICAgICAgeC5hID0gNDIKICAgICAgICAgbWVtYmVycyA9IGRpY3QoaW5zcGVjdC5nZXRtZW1iZXJzKHgpKQpAQCAtMzEwLDYgKzMxOCwxNiBAQAogICAgIGRlZiB0ZXN0X2dldGZpbGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRmaWxlKG1vZC5TdHVwaWRHaXQpLCBtb2QuX19maWxlX18pCiAKKyAgICBkZWYgdGVzdF9nZXRmaWxlX2NsYXNzX3dpdGhvdXRfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBDTSh0eXBlKToKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fbW9kdWxlX18oY2xzKToKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1DTSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGluc3BlY3QuZ2V0ZmlsZShDKQorCiAgICAgZGVmIHRlc3RfZ2V0bW9kdWxlX3JlY3Vyc2lvbihzZWxmKToKICAgICAgICAgZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQogICAgICAgICBuYW1lID0gJ19faW5zcGVjdF9kdW1teScKQEAgLTQxOCwxNCArNDM2LDE0IEBACiAgICAgICAgICAgICB1bmljb2RlZGF0YS5fX2ZpbGVfX1stNDpdIGluICgiLnB5YyIsICIucHlvIiksCiAgICAgICAgICJ1bmljb2RlZGF0YSBpcyBub3QgYW4gZXh0ZXJuYWwgYmluYXJ5IG1vZHVsZSIpCiAgICAgZGVmIHRlc3RfZmluZHNvdXJjZV9iaW5hcnkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCB1bmljb2RlZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCB1bmljb2RlZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIHVuaWNvZGVkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIHVuaWNvZGVkYXRhKQogCiAgICAgZGVmIHRlc3RfZmluZHNvdXJjZV9jb2RlX2luX2xpbmVjYWNoZShzZWxmKToKICAgICAgICAgbGluZXMgPSBbIng9MSJdCiAgICAgICAgIGNvID0gY29tcGlsZShsaW5lc1swXSwgIl9keW5hbWljYWxseV9jcmVhdGVkX2ZpbGUiLCAiZXhlYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgY28pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCBjbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCBjbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIGNvKQogICAgICAgICBsaW5lY2FjaGUuY2FjaGVbY28uY29fZmlsZW5hbWVdID0gKDEsIE5vbmUsIGxpbmVzLCBjby5jb19maWxlbmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmZpbmRzb3VyY2UoY28pLCAobGluZXMsMCkpCkBAIC00NjMsMTMgKzQ4MSwxMyBAQAogICAgIEEgYnJva2VuIGRhdGEgZGVzY3JpcHRvci4gU2VlIGJ1ZyAjMTc4NS4KICAgICAiIiIKICAgICBkZWYgX19nZXRfXygqYXJncyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0X18gZGF0YSBkZXNjcmlwdG9ycyIpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJicm9rZW4gZGF0YSBkZXNjcmlwdG9yIikKIAogICAgIGRlZiBfX3NldF9fKCphcmdzKToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCiAKICAgICBkZWYgX19nZXRhdHRyX18oKmFyZ3MpOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldGF0dHJfXyBkYXRhIGRlc2NyaXB0b3JzIikKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImJyb2tlbiBkYXRhIGRlc2NyaXB0b3IiKQogCiAKIGNsYXNzIF9Ccm9rZW5NZXRob2REZXNjcmlwdG9yKG9iamVjdCk6CkBAIC00NzcsMTAgKzQ5NSwxMCBAQAogICAgIEEgYnJva2VuIG1ldGhvZCBkZXNjcmlwdG9yLiBTZWUgYnVnICMxNzg1LgogICAgICIiIgogICAgIGRlZiBfX2dldF9fKCphcmdzKToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRfXyBtZXRob2QgZGVzY3JpcHRvcnMiKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYnJva2VuIG1ldGhvZCBkZXNjcmlwdG9yIikKIAogICAgIGRlZiBfX2dldGF0dHJfXygqYXJncyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0YXR0cl9fIG1ldGhvZCBkZXNjcmlwdG9ycyIpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJicm9rZW4gbWV0aG9kIGRlc2NyaXB0b3IiKQogCiAKICMgSGVscGVyIGZvciB0ZXN0aW5nIGNsYXNzaWZ5X2NsYXNzX2F0dHJzLgpAQCAtNTU5LDYgKzU3Nyw0OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3NfZT1bJ2FyZyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZD0nKCosIGFyZyknKQogCisgICAgZGVmIHRlc3RfZ2V0ZnVsbGFyZ3NwZWNfc2lnbmF0dXJlX2F0dHIoc2VsZik6CisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNwYW1fcGFyYW0gPSBpbnNwZWN0LlBhcmFtZXRlcignc3BhbScsIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgdGVzdC5fX3NpZ25hdHVyZV9fID0gaW5zcGVjdC5TaWduYXR1cmUocGFyYW1ldGVycz0oc3BhbV9wYXJhbSwpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RnVsbEFyZ1NwZWNFcXVhbHModGVzdCwgYXJnc19lPVsnc3BhbSddLCBmb3JtYXR0ZWQ9JyhzcGFtKScpCisKKyAgICBkZWYgdGVzdF9nZXRmdWxsYXJnc3BlY19zaWduYXR1cmVfYW5ub3Moc2VsZik6CisgICAgICAgIGRlZiB0ZXN0KGE6J3NwYW0nKSAtPiAnaGFtJzogcGFzcworICAgICAgICBzcGVjID0gaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyh0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuX19hbm5vdGF0aW9uc19fLCBzcGVjLmFubm90YXRpb25zKQorCisgICAgICAgIGRlZiB0ZXN0KCk6IHBhc3MKKyAgICAgICAgc3BlYyA9IGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWModGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0Ll9fYW5ub3RhdGlvbnNfXywgc3BlYy5hbm5vdGF0aW9ucykKKworICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9nZXRmdWxsYXJnc3BlY19idWlsdGluX21ldGhvZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RnVsbEFyZ1NwZWNFcXVhbHMoX3BpY2tsZS5QaWNrbGVyLmR1bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc19lPVsnc2VsZicsICdvYmonXSwgZm9ybWF0dGVkPScoc2VsZiwgb2JqKScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGdWxsQXJnU3BlY0VxdWFscyhfcGlja2xlLlBpY2tsZXIoaW8uQnl0ZXNJTygpKS5kdW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NfZT1bJ3NlbGYnLCAnb2JqJ10sIGZvcm1hdHRlZD0nKHNlbGYsIG9iaiknKQorCisgICAgQGNweXRob25fb25seQorICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9nZXRmdWxsYWdyc3BlY19idWlsdGluX2Z1bmMoc2VsZik6CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgYnVpbHRpbiA9IF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfd2l0aF9kZWZhdWx0cworICAgICAgICBzcGVjID0gaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhidWlsdGluKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuZGVmYXVsdHNbMF0sICdhdm9jYWRvJykKKworICAgIEBjcHl0aG9uX29ubHkKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3RfZ2V0ZnVsbGFncnNwZWNfYnVpbHRpbl9mdW5jX25vX3NpZ25hdHVyZShzZWxmKToKKyAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICBidWlsdGluID0gX3Rlc3RjYXBpLmRvY3N0cmluZ19ub19zaWduYXR1cmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhidWlsdGluKQogCiAgICAgZGVmIHRlc3RfZ2V0YXJnc3BlY19tZXRob2Qoc2VsZik6CiAgICAgICAgIGNsYXNzIEEob2JqZWN0KToKQEAgLTU4OCw2ICs2NDksMTAgQEAKICAgICAgICAgICAgIG1kID0gX0Jyb2tlbk1ldGhvZERlc2NyaXB0b3IoKQogCiAgICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhBKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdfX25ld19fJywgJ21ldGhvZCcsIG9iamVjdCksIGF0dHJzLCAnbWlzc2luZyBfX25ld19fJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ19faW5pdF9fJywgJ21ldGhvZCcsIG9iamVjdCksIGF0dHJzLCAnbWlzc2luZyBfX2luaXRfXycpCisKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdjJywgJ2NsYXNzIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgY2xhc3MgbWV0aG9kJykKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3AnLCAncHJvcGVydHknLCBBKSwgYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKQEAgLTY1MCw2ICs3MTUsODggQEAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYnVpbHRpbiwgdHlwZSk6CiAgICAgICAgICAgICAgICAgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhidWlsdGluKQogCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfRHluYW1pY0NsYXNzQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2hhbSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc3BhbScKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBWQShtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgaGFtKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnZWdncycKKyAgICAgICAgc2hvdWxkX2ZpbmRfZGNhID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ2hhbScsICdkYXRhJywgVkEsIFZBLl9fZGljdF9fWydoYW0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZF9kY2EsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoVkEpKQorICAgICAgICBzaG91bGRfZmluZF9nYSA9IGluc3BlY3QuQXR0cmlidXRlKCdoYW0nLCAnZGF0YScsIE1ldGEsICdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZF9nYSwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhWQSkpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9tZXRhY2xhc3NfY2xhc3NfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZmlzaCA9ICdzbGFwJworICAgICAgICAgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlc19fJywgJ19fbmFtZV9fJywgJ2Zpc2gnXQorICAgICAgICBjbGFzcyBDbGFzcyhtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNob3VsZF9maW5kID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ2Zpc2gnLCAnZGF0YScsIE1ldGEsICdzbGFwJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZCwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDbGFzcykpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9WaXJ0dWFsQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdCT09NJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J0JPT00nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHIobmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzaG91bGRfZmluZCA9IGluc3BlY3QuQXR0cmlidXRlKCdCT09NJywgJ2RhdGEnLCBNZXRhLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZCwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDbGFzcykpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9WaXJ0dWFsQXR0cmlidXRlX211bHRpX2NsYXNzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGExKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdvbmUnXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nb25lJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMih0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndHdvJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3R3byc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTMoTWV0YTEsIE1ldGEyKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc29ydGVkKHNldChbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ3RocmVlJ10gKworICAgICAgICAgICAgICAgICAgICBNZXRhMS5fX2Rpcl9fKGNscykgKyBNZXRhMi5fX2Rpcl9fKGNscykpKSkKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3RocmVlJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDMKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBDbGFzczEobWV0YWNsYXNzPU1ldGExKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQ2xhc3MyKENsYXNzMSwgbWV0YWNsYXNzPU1ldGEzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzaG91bGRfZmluZDEgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnb25lJywgJ2RhdGEnLCBNZXRhMSwgMSkKKyAgICAgICAgc2hvdWxkX2ZpbmQyID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ3R3bycsICdkYXRhJywgTWV0YTIsIDIpCisgICAgICAgIHNob3VsZF9maW5kMyA9IGluc3BlY3QuQXR0cmlidXRlKCd0aHJlZScsICdkYXRhJywgTWV0YTMsIDMpCisgICAgICAgIGNjYSA9IGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoQ2xhc3MyKQorICAgICAgICBmb3Igc2YgaW4gKHNob3VsZF9maW5kMSwgc2hvdWxkX2ZpbmQyLCBzaG91bGRfZmluZDMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZiwgY2NhKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfY2xhc3NfYXR0cnNfd2l0aF9idWdneV9kaXIoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX25hbWVfXycsICdtaXNzaW5nJ10KKyAgICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGF0dHJzID0gW2FbMF0gZm9yIGEgaW4gaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDKV0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWlzc2luZycsIGF0dHJzKQorCiAgICAgZGVmIHRlc3RfZ2V0bWVtYmVyc19kZXNjcmlwdG9ycyhzZWxmKToKICAgICAgICAgY2xhc3MgQShvYmplY3QpOgogICAgICAgICAgICAgZGQgPSBfQnJva2VuRGF0YURlc2NyaXB0b3IoKQpAQCAtNjkzLDYgKzg0MCwyOCBAQAogICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIGIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhiKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2YnLCBiLmYpLCBpbnNwZWN0LmdldG1lbWJlcnMoYiwgaW5zcGVjdC5pc21ldGhvZCkpCiAKKyAgICBkZWYgdGVzdF9nZXRtZW1iZXJzX1ZpcnR1YWxBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oY2xzLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdlZ2dzJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzY3JhbWJsZWQnCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgQShtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgZWdncyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdlZ2dzJywgJ3NjcmFtYmxlZCcpLCBpbnNwZWN0LmdldG1lbWJlcnMoQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdlZ2dzJywgJ3NwYW0nKSwgaW5zcGVjdC5nZXRtZW1iZXJzKEEoKSkpCisKKyAgICBkZWYgdGVzdF9nZXRtZW1iZXJzX3dpdGhfYnVnZ3lfZGlyKHNlbGYpOgorICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19uYW1lX18nLCAnbWlzc2luZyddCisgICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhdHRycyA9IFthWzBdIGZvciBhIGluIGluc3BlY3QuZ2V0bWVtYmVycyhDKV0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWlzc2luZycsIGF0dHJzKQorCiAKIF9nbG9iYWxfcmVmID0gb2JqZWN0KCkKIGNsYXNzIFRlc3RHZXRDbG9zdXJlVmFycyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMDgwLDYgKzEyNDksMTUgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoVGhpbmcsICd4JyksIFRoaW5nLngpCiAKKyAgICBkZWYgdGVzdF9jbGFzc1ZpcnR1YWxBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIFRoaW5nKG9iamVjdCk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgeChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5feAorICAgICAgICAgICAgX3ggPSBvYmplY3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhUaGluZywgJ3gnKSwgVGhpbmcuX19kaWN0X19bJ3gnXSkKKwogICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9jbGFzc2F0dHJpYnV0ZShzZWxmKToKICAgICAgICAgY2xhc3MgVGhpbmcob2JqZWN0KToKICAgICAgICAgICAgIHggPSBvYmplY3QoKQpAQCAtMTM5MCwxMSArMTU2OCwxMyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFMoKSksICcoKScpCiAKLSAgICAgICAgZGVmIHRlc3QocG8sIHBrLCAqYXJncywga28sICoqa3dhcmdzKToKKyAgICAgICAgZGVmIHRlc3QocG8sIHBrLCBwb2Q9NDIsIHBrZD0xMDAsICphcmdzLCBrbywgKiprd2FyZ3MpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZSh0ZXN0KQogICAgICAgICBwbyA9IHNpZy5wYXJhbWV0ZXJzWydwbyddLnJlcGxhY2Uoa2luZD1QLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgcG9kID0gc2lnLnBhcmFtZXRlcnNbJ3BvZCddLnJlcGxhY2Uoa2luZD1QLlBPU0lUSU9OQUxfT05MWSkKICAgICAgICAgcGsgPSBzaWcucGFyYW1ldGVyc1sncGsnXQorICAgICAgICBwa2QgPSBzaWcucGFyYW1ldGVyc1sncGtkJ10KICAgICAgICAgYXJncyA9IHNpZy5wYXJhbWV0ZXJzWydhcmdzJ10KICAgICAgICAga28gPSBzaWcucGFyYW1ldGVyc1sna28nXQogICAgICAgICBrd2FyZ3MgPSBzaWcucGFyYW1ldGVyc1sna3dhcmdzJ10KQEAgLTE0MTcsNiArMTU5NywxNSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2R1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZScpOgogICAgICAgICAgICAgUygocG8sIHBrLCBhcmdzLCBrd2FyZ3MyLCBrbykpCiAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdmb2xsb3dzIGRlZmF1bHQgYXJndW1lbnQnKToKKyAgICAgICAgICAgIFMoKHBvZCwgcG8pKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnZm9sbG93cyBkZWZhdWx0IGFyZ3VtZW50Jyk6CisgICAgICAgICAgICBTKChwbywgcGtkLCBwaykpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdmb2xsb3dzIGRlZmF1bHQgYXJndW1lbnQnKToKKyAgICAgICAgICAgIFMoKHBrZCwgcGspKQorCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2ltbXV0YWJpbGl0eShzZWxmKToKICAgICAgICAgZGVmIHRlc3QoYSk6CiAgICAgICAgICAgICBwYXNzCkBAIC0xNDYxLDE5ICsxNjUwLDk1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2t3YXJncycsIC4uLiwgaW50LCAidmFyX2tleXdvcmQiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKLSAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fYnVpbHRpbl9mdW5jdGlvbihzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScpOgotICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUodHlwZSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScpOgotICAgICAgICAgICAgIyBzdXBwb3J0IGZvciAnd3JhcHBlcl9kZXNjcmlwdG9yJwotICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUodHlwZS5fX2NhbGxfXykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScpOgotICAgICAgICAgICAgIyBzdXBwb3J0IGZvciAnbWV0aG9kLXdyYXBwZXInCi0gICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZShtaW4uX19jYWxsX18pCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubyBzaWduYXR1cmUgZm91bmQgZm9yIGJ1aWx0aW4gZnVuY3Rpb24nKToKLSAgICAgICAgICAgICMgc3VwcG9ydCBmb3IgJ21ldGhvZC13cmFwcGVyJwotICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUobWluKQorICAgIEBjcHl0aG9uX29ubHkKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2J1aWx0aW5zKHNlbGYpOgorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisKKyAgICAgICAgZGVmIHRlc3RfdW5ib3VuZF9tZXRob2Qobyk6CisgICAgICAgICAgICAiIiJVc2UgdGhpcyB0byB0ZXN0IHVuYm91bmQgbWV0aG9kcyAodGhpbmdzIHRoYXQgc2hvdWxkIGhhdmUgYSBzZWxmKSIiIgorICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUobykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNpZ25hdHVyZSwgaW5zcGVjdC5TaWduYXR1cmUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNpZ25hdHVyZS5wYXJhbWV0ZXJzLnZhbHVlcygpKVswXS5uYW1lLCAnc2VsZicpCisgICAgICAgICAgICByZXR1cm4gc2lnbmF0dXJlCisKKyAgICAgICAgZGVmIHRlc3RfY2FsbGFibGUobyk6CisgICAgICAgICAgICAiIiJVc2UgdGhpcyB0byB0ZXN0IGJvdW5kIG1ldGhvZHMgb3Igbm9ybWFsIGNhbGxhYmxlcyAodGhpbmdzIHRoYXQgZG9uJ3QgZXhwZWN0IHNlbGYpIiIiCisgICAgICAgICAgICBzaWduYXR1cmUgPSBpbnNwZWN0LnNpZ25hdHVyZShvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2lnbmF0dXJlLCBpbnNwZWN0LlNpZ25hdHVyZSkpCisgICAgICAgICAgICBpZiBzaWduYXR1cmUucGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxpc3Qoc2lnbmF0dXJlLnBhcmFtZXRlcnMudmFsdWVzKCkpWzBdLm5hbWUsICdzZWxmJykKKyAgICAgICAgICAgIHJldHVybiBzaWduYXR1cmUKKworICAgICAgICBzaWduYXR1cmUgPSB0ZXN0X2NhbGxhYmxlKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfd2l0aF9kZWZhdWx0cykKKyAgICAgICAgZGVmIHAobmFtZSk6IHJldHVybiBzaWduYXR1cmUucGFyYW1ldGVyc1tuYW1lXS5kZWZhdWx0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgncycpLCAnYXZvY2FkbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnYicpLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdkJyksIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnaScpLCAzNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCduJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgndCcpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ2YnKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnbG9jYWwnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdzeXMnKSwgc3lzLm1heHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnZXhwJyksIHN5cy5tYXhzaXplIC0gMSkKKworICAgICAgICB0ZXN0X2NhbGxhYmxlKG9iamVjdCkKKworICAgICAgICAjIG5vcm1hbCBtZXRob2QKKyAgICAgICAgIyAoUHlNZXRob2REZXNjcl9UeXBlLCAibWV0aG9kX2Rlc2NyaXB0b3IiKQorICAgICAgICB0ZXN0X3VuYm91bmRfbWV0aG9kKF9waWNrbGUuUGlja2xlci5kdW1wKQorICAgICAgICBkID0gX3BpY2tsZS5QaWNrbGVyKGlvLlN0cmluZ0lPKCkpCisgICAgICAgIHRlc3RfY2FsbGFibGUoZC5kdW1wKQorCisgICAgICAgICMgc3RhdGljIG1ldGhvZAorICAgICAgICB0ZXN0X2NhbGxhYmxlKHN0ci5tYWtldHJhbnMpCisgICAgICAgIHRlc3RfY2FsbGFibGUoJ2FiYycubWFrZXRyYW5zKQorCisgICAgICAgICMgY2xhc3MgbWV0aG9kCisgICAgICAgIHRlc3RfY2FsbGFibGUoZGljdC5mcm9ta2V5cykKKyAgICAgICAgdGVzdF9jYWxsYWJsZSh7fS5mcm9ta2V5cykKKworICAgICAgICAjIHdyYXBwZXIgYXJvdW5kIHNsb3QgKFB5V3JhcHBlckRlc2NyX1R5cGUsICJ3cmFwcGVyX2Rlc2NyaXB0b3IiKQorICAgICAgICB0ZXN0X3VuYm91bmRfbWV0aG9kKHR5cGUuX19jYWxsX18pCisgICAgICAgIHRlc3RfdW5ib3VuZF9tZXRob2QoaW50Ll9fYWRkX18pCisgICAgICAgIHRlc3RfY2FsbGFibGUoKDMpLl9fYWRkX18pCisKKyAgICAgICAgIyBfUHlNZXRob2RXcmFwcGVyX1R5cGUKKyAgICAgICAgIyBzdXBwb3J0IGZvciAnbWV0aG9kLXdyYXBwZXInCisgICAgICAgIHRlc3RfY2FsbGFibGUobWluLl9fY2FsbF9fKQorCisgICAgICAgICMgVGhpcyBkb2Vzbid0IHdvcmsgbm93LgorICAgICAgICAjIChXZSBkb24ndCBoYXZlIGEgdmFsaWQgc2lnbmF0dXJlIGZvciAidHlwZSIgaW4gMy40KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgIm5vIHNpZ25hdHVyZSBmb3VuZCIpOgorICAgICAgICAgICAgY2xhc3MgVGhpc1dvcmtzTm93OgorICAgICAgICAgICAgICAgIF9fY2FsbF9fID0gdHlwZQorICAgICAgICAgICAgdGVzdF9jYWxsYWJsZShUaGlzV29ya3NOb3coKSkKKworICAgIEBjcHl0aG9uX29ubHkKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2RlY29yYXRlZF9idWlsdGlucyhzZWxmKToKKyAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICBmdW5jID0gX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzCisKKyAgICAgICAgZGVmIGRlY29yYXRvcihmdW5jKToKKyAgICAgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICAgICAgICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncykgLT4gaW50OgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVyCisKKyAgICAgICAgZGVjb3JhdGVkX2Z1bmMgPSBkZWNvcmF0b3IoZnVuYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKGZ1bmMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKGRlY29yYXRlZF9mdW5jKSkKKworICAgIEBjcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fYnVpbHRpbnNfbm9fc2lnbmF0dXJlKHNlbGYpOgorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnbm8gc2lnbmF0dXJlIGZvdW5kIGZvciBidWlsdGluJyk6CisgICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZShfdGVzdGNhcGkuZG9jc3RyaW5nX25vX3NpZ25hdHVyZSkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9ub25fZnVuY3Rpb24oc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdpcyBub3QgYSBjYWxsYWJsZSBvYmplY3QnKToKQEAgLTE0ODIsMTggKzE3NDcsOTcgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ2lzIG5vdCBhIFB5dGhvbiBmdW5jdGlvbicpOgogICAgICAgICAgICAgaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9mdW5jdGlvbig0MikKIAotICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9tZXRob2Qoc2VsZik6Ci0gICAgICAgIGNsYXNzIFRlc3Q6Ci0gICAgICAgICAgICBkZWYgZm9vKHNlbGYsIGFyZzEsIGFyZzI9MSkgLT4gaW50OgorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9mcm9tX2J1aWx0aW5fZXJyb3JzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnaXMgbm90IGEgUHl0aG9uIGJ1aWx0aW4nKToKKyAgICAgICAgICAgIGluc3BlY3QuU2lnbmF0dXJlLmZyb21fYnVpbHRpbig0MikKKworICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9mcm9tX2Z1bmN0aW9ubGlrZV9vYmplY3Qoc2VsZik6CisgICAgICAgIGRlZiBmdW5jKGEsYiwgKmFyZ3MsIGt3b25seT1UcnVlLCBrd29ubHlyZXEsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBmdW5jbGlrZToKKyAgICAgICAgICAgICMgSGFzIHRvIGJlIGNhbGxhYmxlLCBhbmQgaGF2ZSBjb3JyZWN0CisgICAgICAgICAgICAjIF9fY29kZV9fLCBfX2Fubm90YXRpb25zX18sIF9fZGVmYXVsdHNfXywgX19uYW1lX18sCisgICAgICAgICAgICAjIGFuZCBfX2t3ZGVmYXVsdHNfXyBhdHRyaWJ1dGVzCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jKToKKyAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZV9fID0gZnVuYy5fX25hbWVfXworICAgICAgICAgICAgICAgIHNlbGYuX19jb2RlX18gPSBmdW5jLl9fY29kZV9fCisgICAgICAgICAgICAgICAgc2VsZi5fX2Fubm90YXRpb25zX18gPSBmdW5jLl9fYW5ub3RhdGlvbnNfXworICAgICAgICAgICAgICAgIHNlbGYuX19kZWZhdWx0c19fID0gZnVuYy5fX2RlZmF1bHRzX18KKyAgICAgICAgICAgICAgICBzZWxmLl9fa3dkZWZhdWx0c19fID0gZnVuYy5fX2t3ZGVmYXVsdHNfXworICAgICAgICAgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKworICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnVuYygqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2lnX2Z1bmMgPSBpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2Z1bmN0aW9uKGZ1bmMpCisKKyAgICAgICAgc2lnX2Z1bmNsaWtlID0gaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9mdW5jdGlvbihmdW5jbGlrZShmdW5jKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWdfZnVuY2xpa2UsIHNpZ19mdW5jKQorCisgICAgICAgIHNpZ19mdW5jbGlrZSA9IGluc3BlY3Quc2lnbmF0dXJlKGZ1bmNsaWtlKGZ1bmMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ19mdW5jbGlrZSwgc2lnX2Z1bmMpCisKKyAgICAgICAgIyBJZiBvYmplY3QgaXMgbm90IGEgZHVjayB0eXBlIG9mIGZ1bmN0aW9uLCB0aGVuCisgICAgICAgICMgc2lnbmF0dXJlIHdpbGwgdHJ5IHRvIGdldCBhIHNpZ25hdHVyZSBmb3IgaXRzICdfX2NhbGxfXycKKyAgICAgICAgIyBtZXRob2QKKyAgICAgICAgZmwgPSBmdW5jbGlrZShmdW5jKQorICAgICAgICBkZWwgZmwuX19kZWZhdWx0c19fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoZmwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhcmdzJywgLi4uLCAuLi4sICJ2YXJfcG9zaXRpb25hbCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgInZhcl9rZXl3b3JkIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKworICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9mdW5jdGlvbmxpa2VfY2xhc3Moc2VsZik6CisgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGR1Y2sgdHlwZSBmdW5jdGlvbi1saWtlIG9iamVjdHMsCisgICAgICAgICMgbm90IGNsYXNzZXMuCisKKyAgICAgICAgZGVmIGZ1bmMoYSxiLCAqYXJncywga3dvbmx5PVRydWUsIGt3b25seXJlcSwgKiprd2FyZ3MpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIGZ1bmNsaWtlOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcmtlcik6CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIG1ldGggPSBUZXN0KCkuZm9vCisgICAgICAgICAgICBfX25hbWVfXyA9IGZ1bmMuX19uYW1lX18KKyAgICAgICAgICAgIF9fY29kZV9fID0gZnVuYy5fX2NvZGVfXworICAgICAgICAgICAgX19hbm5vdGF0aW9uc19fID0gZnVuYy5fX2Fubm90YXRpb25zX18KKyAgICAgICAgICAgIF9fZGVmYXVsdHNfXyA9IGZ1bmMuX19kZWZhdWx0c19fCisgICAgICAgICAgICBfX2t3ZGVmYXVsdHNfXyA9IGZ1bmMuX19rd2RlZmF1bHRzX18KIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKG1ldGgpLAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnaXMgbm90IGEgUHl0aG9uIGZ1bmN0aW9uJyk6CisgICAgICAgICAgICBpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2Z1bmN0aW9uKGZ1bmNsaWtlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKGZ1bmNsaWtlKSksICcobWFya2VyKScpCisKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fbWV0aG9kKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKCphcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgbTEoc2VsZiwgYXJnMSwgYXJnMj0xKSAtPiBpbnQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIG0yKCphcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgX19jYWxsX18oKiwgYSk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoVGVzdCgpLm0xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYXJnMScsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2FyZzInLCAxLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCkpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShUZXN0KCkubTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhcmdzJywgLi4uLCAuLi4sICJ2YXJfcG9zaXRpb25hbCIpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShUZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYXJncycsIC4uLiwgLi4uLCAidmFyX3Bvc2l0aW9uYWwiKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnaW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlJyk6CisgICAgICAgICAgICBzZWxmLnNpZ25hdHVyZShUZXN0KCkpCisKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fY2xhc3NtZXRob2Qoc2VsZik6CiAgICAgICAgIGNsYXNzIFRlc3Q6CiAgICAgICAgICAgICBAY2xhc3NtZXRob2QKQEAgLTE2ODcsNiArMjAzMSwzOCBAQAogICAgICAgICBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKF9mb28pLmJpbmQoMTIsIDE0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9mb28oKmJhLmFyZ3MsICoqYmEua3dhcmdzKSwgKDEyLCAxNCwgMTMpKQogCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX3BhcnRpYWxtZXRob2Qoc2VsZik6CisgICAgICAgIGZyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsbWV0aG9kCisKKyAgICAgICAgY2xhc3MgU3BhbToKKyAgICAgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaGFtID0gcGFydGlhbG1ldGhvZCh0ZXN0KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAiaGFzIGluY29ycmVjdCBhcmd1bWVudHMiKToKKyAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKFNwYW0uaGFtKQorCisgICAgICAgIGNsYXNzIFNwYW06CisgICAgICAgICAgICBkZWYgdGVzdChpdCwgYSwgKiwgYykgLT4gJ3NwYW0nOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGhhbSA9IHBhcnRpYWxtZXRob2QodGVzdCwgYz0xKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoU3BhbS5oYW0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdpdCcsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vcl9rZXl3b3JkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EnLCAuLi4sIC4uLiwgJ3Bvc2l0aW9uYWxfb3Jfa2V5d29yZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgMSwgLi4uLCAna2V5d29yZF9vbmx5JykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoU3BhbSgpLmhhbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgJ3Bvc2l0aW9uYWxfb3Jfa2V5d29yZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgMSwgLi4uLCAna2V5d29yZF9vbmx5JykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbScpKQorCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2Zha2VfcGFydGlhbG1ldGhvZChzZWxmKToKKyAgICAgICAgZGVmIGZvbyhhKTogcGFzcworICAgICAgICBmb28uX3BhcnRpYWxtZXRob2QgPSAnc3BhbScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSksICcoYSknKQorCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2RlY29yYXRlZChzZWxmKToKICAgICAgICAgaW1wb3J0IGZ1bmN0b29scwogCkBAIC0xNzM2LDYgKzIxMTIsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYicsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAorICAgICAgICAjIFRlc3Qgd2UgaGFuZGxlIF9fc2lnbmF0dXJlX18gcGFydHdheSBkb3duIHRoZSB3cmFwcGVyIHN0YWNrCisgICAgICAgIGRlZiB3cmFwcGVkX2Zvb19jYWxsKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdyYXBwZWRfZm9vX2NhbGwuX193cmFwcGVkX18gPSBGb28uX19jYWxsX18KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHdyYXBwZWRfZm9vX2NhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fY2xhc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSk6CkBAIC0xODE3LDYgKzIyMDQsNDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYmFyJywgMiwgLi4uLCAia2V5d29yZF9vbmx5IikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihNSVNTSU5HX0NfRE9DU1RSSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zIHJlcXVpcmVzIGRvY3N0cmluZ3MiKQorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9jbGFzc193aXRob3V0X2luaXQoc2VsZik6CisgICAgICAgICMgVGVzdCBjbGFzc2VzIHdpdGhvdXQgdXNlci1kZWZpbmVkIF9faW5pdF9fIG9yIF9fbmV3X18KKyAgICAgICAgY2xhc3MgQzogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShDKSksICcoKScpCisgICAgICAgIGNsYXNzIEQoQyk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoRCkpLCAnKCknKQorCisgICAgICAgICMgVGVzdCBtZXRhLWNsYXNzZXMgd2l0aG91dCB1c2VyLWRlZmluZWQgX19pbml0X18gb3IgX19uZXdfXworICAgICAgICBjbGFzcyBDKHR5cGUpOiBwYXNzCisgICAgICAgIGNsYXNzIEQoQyk6IHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjYWxsYWJsZS4qaXMgbm90IHN1cHBvcnRlZCIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShDKSwgTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjYWxsYWJsZS4qaXMgbm90IHN1cHBvcnRlZCIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShEKSwgTm9uZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fYnVpbHRpbl9jbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoX3BpY2tsZS5QaWNrbGVyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyhmaWxlLCBwcm90b2NvbD1Ob25lLCBmaXhfaW1wb3J0cz1UcnVlKScpCisKKyAgICAgICAgY2xhc3MgUChfcGlja2xlLlBpY2tsZXIpOiBwYXNzCisgICAgICAgIGNsYXNzIEVtcHR5VHJhaXQ6IHBhc3MKKyAgICAgICAgY2xhc3MgUDIoRW1wdHlUcmFpdCwgUCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoUCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICcoZmlsZSwgcHJvdG9jb2w9Tm9uZSwgZml4X2ltcG9ydHM9VHJ1ZSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShQMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICcoZmlsZSwgcHJvdG9jb2w9Tm9uZSwgZml4X2ltcG9ydHM9VHJ1ZSknKQorCisgICAgICAgIGNsYXNzIFAzKFAyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcGFtKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKFAzKSksICcoc3BhbSknKQorCisgICAgICAgIGNsYXNzIE1ldGFQKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fY2FsbF9fKGNscywgZm9vLCBiYXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgUDQoUDIsIG1ldGFjbGFzcz1NZXRhUCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKFA0KSksICcoZm9vLCBiYXIpJykKKwogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9jYWxsYWJsZV9vYmplY3RzKHNlbGYpOgogICAgICAgICBjbGFzcyBGb286CiAgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgYSk6CkBAIC0xODM4LDE4ICsyMjY4LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKLSAgICAgICAgY2xhc3MgVG9GYWlsOgotICAgICAgICAgICAgX19jYWxsX18gPSB0eXBlCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAibm90IHN1cHBvcnRlZCBieSBzaWduYXR1cmUiKToKLSAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKFRvRmFpbCgpKQotCi0KICAgICAgICAgY2xhc3MgV3JhcHBlZDoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgV3JhcHBlZC5fX3dyYXBwZWRfXyA9IGxhbWJkYSBhOiBOb25lCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoV3JhcHBlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisgICAgICAgICMgd3JhcHBlciBsb29wOgorICAgICAgICBXcmFwcGVkLl9fd3JhcHBlZF9fID0gV3JhcHBlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgc2VsZi5zaWduYXR1cmUoV3JhcHBlZCkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9sYW1iZGFzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKChsYW1iZGEgYT0xMDogYSkpLApAQCAtMTkyMyw2ICsyMzUxLDcgQEAKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9zdHJfcG9zaXRpb25hbF9vbmx5KHNlbGYpOgogICAgICAgICBQID0gaW5zcGVjdC5QYXJhbWV0ZXIKKyAgICAgICAgUyA9IGluc3BlY3QuU2lnbmF0dXJlCiAKICAgICAgICAgZGVmIHRlc3QoYV9wbywgKiwgYiwgKiprd2FyZ3MpOgogICAgICAgICAgICAgcmV0dXJuIGFfcG8sIGt3YXJncwpAQCAtMTkzMywxNCArMjM2MiwyMCBAQAogICAgICAgICB0ZXN0Ll9fc2lnbmF0dXJlX18gPSBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPW5ld19wYXJhbXMpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUodGVzdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICcoPGFfcG8+LCAqLCBiLCAqKmt3YXJncyknKQorICAgICAgICAgICAgICAgICAgICAgICAgICcoYV9wbywgLywgKiwgYiwgKiprd2FyZ3MpJykKIAotICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZSh0ZXN0KQotICAgICAgICBuZXdfcGFyYW1zID0gbGlzdChzaWcucGFyYW1ldGVycy52YWx1ZXMoKSkKLSAgICAgICAgbmV3X3BhcmFtc1swXSA9IG5ld19wYXJhbXNbMF0ucmVwbGFjZShuYW1lPU5vbmUpCi0gICAgICAgIHRlc3QuX19zaWduYXR1cmVfXyA9IHNpZy5yZXBsYWNlKHBhcmFtZXRlcnM9bmV3X3BhcmFtcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUodGVzdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICcoPDA+LCAqLCBiLCAqKmt3YXJncyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihTKHBhcmFtZXRlcnM9W1AoJ2ZvbycsIFAuUE9TSVRJT05BTF9PTkxZKV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnKGZvbywgLyknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFMocGFyYW1ldGVycz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAoJ2ZvbycsIFAuUE9TSVRJT05BTF9PTkxZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCgnYmFyJywgUC5WQVJfS0VZV09SRCldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyhmb28sIC8sICoqYmFyKScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoUyhwYXJhbWV0ZXJzPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCgnZm9vJywgUC5QT1NJVElPTkFMX09OTFkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQKCdiYXInLCBQLlZBUl9QT1NJVElPTkFMKV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnKGZvbywgLywgKmJhciknKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3JlcGxhY2VfYW5ubyhzZWxmKToKICAgICAgICAgZGVmIHRlc3QoKSAtPiA0MjoKQEAgLTE5NzksMTAgKzI0MTQsMTMgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3QgYSB2YWxpZCBwYXJhbWV0ZXIgbmFtZScpOgogICAgICAgICAgICAgaW5zcGVjdC5QYXJhbWV0ZXIoJzEnLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlZBUl9LRVlXT1JEKQogCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub24tcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcicpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnbmFtZSBtdXN0IGJlIGEgc3RyJyk6CiAgICAgICAgICAgICBpbnNwZWN0LlBhcmFtZXRlcihOb25lLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlZBUl9LRVlXT1JEKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lJyk6CisgICAgICAgICAgICBpbnNwZWN0LlBhcmFtZXRlcignJCcsIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuVkFSX0tFWVdPUkQpCisKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdjYW5ub3QgaGF2ZSBkZWZhdWx0IHZhbHVlcycpOgogICAgICAgICAgICAgaW5zcGVjdC5QYXJhbWV0ZXIoJ2EnLCBkZWZhdWx0PTQyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1pbnNwZWN0LlBhcmFtZXRlci5WQVJfS0VZV09SRCkKQEAgLTIwMzEsNyArMjQ2OSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDIubmFtZSwgJ2JhcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocDIsIHApCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3QgYSB2YWxpZCBwYXJhbWV0ZXIgbmFtZScpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lIGlzIGEgcmVxdWlyZWQgYXR0cmlidXRlJyk6CiAgICAgICAgICAgICBwMiA9IHAyLnJlcGxhY2UobmFtZT1wMi5lbXB0eSkKIAogICAgICAgICBwMiA9IHAyLnJlcGxhY2UobmFtZT0nZm9vJywgZGVmYXVsdD1Ob25lKQpAQCAtMjA1MywxNCArMjQ5MiwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAyLCBwKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3BhcmFtZXRlcl9wb3NpdGlvbmFsX29ubHkoc2VsZik6Ci0gICAgICAgIHAgPSBpbnNwZWN0LlBhcmFtZXRlcihOb25lLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICc8PicpCi0KLSAgICAgICAgcCA9IHAucmVwbGFjZShuYW1lPScxJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICc8MT4nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnbmFtZSBtdXN0IGJlIGEgc3RyJyk6CisgICAgICAgICAgICBpbnNwZWN0LlBhcmFtZXRlcihOb25lLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9wYXJhbWV0ZXJfaW1tdXRhYmlsaXR5KHNlbGYpOgotICAgICAgICBwID0gaW5zcGVjdC5QYXJhbWV0ZXIoTm9uZSwga2luZD1pbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisgICAgICAgIHAgPSBpbnNwZWN0LlBhcmFtZXRlcignc3BhbScsIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgcC5mb28gPSAnYmFyJwpAQCAtMjI1OCw2ICsyNjk0LDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYWxsKHRlc3QsIDEsIDIsIDQsIDUsIGJhcj02KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgMiwgNCwgNSwgNiwge30pKQogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYWxsKHRlc3QsIDEsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAyLCAzLCA0MiwgNTAsIHt9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2FsbCh0ZXN0LCAxLCAyLCBmb289NCwgYmFyPTUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAyLCAzLCA0LCA1LCB7fSkpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgImJ1dCB3YXMgcGFzc2VkIGFzIGEga2V5d29yZCIpOgorICAgICAgICAgICAgc2VsZi5jYWxsKHRlc3QsIDEsIDIsIGZvbz00LCBiYXI9NSwgY19wbz0xMCkKKwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAicGFyYW1ldGVyIGlzIHBvc2l0aW9uYWwgb25seSIpOgogICAgICAgICAgICAgc2VsZi5jYWxsKHRlc3QsIDEsIDIsIGNfcG89NCkKIApAQCAtMjI3NCw2ICsyNzE5LDIyIEBACiAgICAgICAgIGJhID0gc2lnLmJpbmQoMSwgc2VsZj0yLCBiPTMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmEuYXJncywgKDEsIDIsIDMpKQogCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2JpbmRfdmFyYXJnX25hbWUoc2VsZik6CisgICAgICAgIGRlZiB0ZXN0KGEsICphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhLCBhcmdzCisgICAgICAgIHNpZyA9IGluc3BlY3Quc2lnbmF0dXJlKHRlc3QpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgInRvbyBtYW55IGtleXdvcmQgYXJndW1lbnRzIik6CisgICAgICAgICAgICBzaWcuYmluZChhPTAsIGFyZ3M9MSkKKworICAgICAgICBkZWYgdGVzdCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MsIGt3YXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2FsbCh0ZXN0LCBhcmdzPTEpLCAoKCksIHsnYXJncyc6IDF9KSkKKworICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZSh0ZXN0KQorICAgICAgICBiYSA9IHNpZy5iaW5kKGFyZ3M9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYS5hcmd1bWVudHMsIHsna3dhcmdzJzogeydhcmdzJzogMX19KQorCiAKIGNsYXNzIFRlc3RCb3VuZEFyZ3VtZW50cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2JvdW5kX2FyZ3VtZW50c191bmhhc2hhYmxlKHNlbGYpOgpAQCAtMjMwMSw2ICsyNzYyLDE2OCBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGJhLCBiYTQpCiAKIAorY2xhc3MgVGVzdFNpZ25hdHVyZVByaXZhdGVIZWxwZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfZ2V0X2JvdW5kX3BhcmFtKHNlbGYpOgorICAgICAgICBnZXR0ZXIgPSBpbnNwZWN0Ll9zaWduYXR1cmVfZ2V0X2JvdW5kX3BhcmFtCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXR0ZXIoJygkc2VsZiknKSwgJ3NlbGYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldHRlcignKCRzZWxmLCBvYmopJyksICdzZWxmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXR0ZXIoJygkY2xzLCAvLCBvYmopJyksICdjbHMnKQorCisgICAgZGVmIF9zdHJpcF9ub25fcHl0aG9uX3N5bnRheChzZWxmLCBpbnB1dCwKKyAgICAgICAgY2xlYW5fc2lnbmF0dXJlLCBzZWxmX3BhcmFtZXRlciwgbGFzdF9wb3NpdGlvbmFsX29ubHkpOgorICAgICAgICBjb21wdXRlZF9jbGVhbl9zaWduYXR1cmUsIFwKKyAgICAgICAgICAgIGNvbXB1dGVkX3NlbGZfcGFyYW1ldGVyLCBcCisgICAgICAgICAgICBjb21wdXRlZF9sYXN0X3Bvc2l0aW9uYWxfb25seSA9IFwKKyAgICAgICAgICAgIGluc3BlY3QuX3NpZ25hdHVyZV9zdHJpcF9ub25fcHl0aG9uX3N5bnRheChpbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wdXRlZF9jbGVhbl9zaWduYXR1cmUsIGNsZWFuX3NpZ25hdHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wdXRlZF9zZWxmX3BhcmFtZXRlciwgc2VsZl9wYXJhbWV0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcHV0ZWRfbGFzdF9wb3NpdGlvbmFsX29ubHksIGxhc3RfcG9zaXRpb25hbF9vbmx5KQorCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3N0cmlwX25vbl9weXRob25fc3ludGF4KHNlbGYpOgorICAgICAgICBzZWxmLl9zdHJpcF9ub25fcHl0aG9uX3N5bnRheCgKKyAgICAgICAgICAgICIoJG1vZHVsZSwgLywgcGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsICIgKworICAgICAgICAgICAgICAgICJlZmZlY3RpdmVfaWRzPUZhbHNlLFxuICAgICAgIGZvbGxvd19zeW1saW5rcz1UcnVlKSIsCisgICAgICAgICAgICAiKG1vZHVsZSwgcGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsICIgKworICAgICAgICAgICAgICAgICJlZmZlY3RpdmVfaWRzPUZhbHNlLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkiLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDApCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICAiKCRtb2R1bGUsIHdvcmQsIHNhbHQsIC8pIiwKKyAgICAgICAgICAgICIobW9kdWxlLCB3b3JkLCBzYWx0KSIsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMikKKworICAgICAgICBzZWxmLl9zdHJpcF9ub25fcHl0aG9uX3N5bnRheCgKKyAgICAgICAgICAgICIoeCwgeT1Ob25lLCB6PU5vbmUsIC8pIiwKKyAgICAgICAgICAgICIoeCwgeT1Ob25lLCB6PU5vbmUpIiwKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAyKQorCisgICAgICAgIHNlbGYuX3N0cmlwX25vbl9weXRob25fc3ludGF4KAorICAgICAgICAgICAgIih4LCB5PU5vbmUsIHo9Tm9uZSkiLAorICAgICAgICAgICAgIih4LCB5PU5vbmUsIHo9Tm9uZSkiLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICAiKHgsXG4gICAgeT1Ob25lLFxuICAgICAgeiA9IE5vbmUgICkiLAorICAgICAgICAgICAgIih4LCB5PU5vbmUsIHo9Tm9uZSkiLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBOb25lKQorCisKK2NsYXNzIFRlc3RVbndyYXAodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdW53cmFwX29uZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gYSArIGIKKyAgICAgICAgd3JhcHBlciA9IGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT0yMCkoZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnNwZWN0LnVud3JhcCh3cmFwcGVyKSwgZnVuYykKKworICAgIGRlZiB0ZXN0X3Vud3JhcF9zZXZlcmFsKHNlbGYpOgorICAgICAgICBkZWYgZnVuYyhhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICB3cmFwcGVyID0gZnVuYworICAgICAgICBmb3IgX18gaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgQGZ1bmN0b29scy53cmFwcyh3cmFwcGVyKQorICAgICAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3JhcHBlci5fX3dyYXBwZWRfXywgZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnNwZWN0LnVud3JhcCh3cmFwcGVyKSwgZnVuYykKKworICAgIGRlZiB0ZXN0X3N0b3Aoc2VsZik6CisgICAgICAgIGRlZiBmdW5jMShhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMxKQorICAgICAgICBkZWYgZnVuYzIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jMikKKyAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZnVuYzIuc3RvcF9oZXJlID0gMQorICAgICAgICB1bndyYXBwZWQgPSBpbnNwZWN0LnVud3JhcCh3cmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wPShsYW1iZGEgZjogaGFzYXR0cihmLCAic3RvcF9oZXJlIikpKQorICAgICAgICBzZWxmLmFzc2VydElzKHVud3JhcHBlZCwgZnVuYzIpCisKKyAgICBkZWYgdGVzdF9jeWNsZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMxKCk6IHBhc3MKKyAgICAgICAgZnVuYzEuX193cmFwcGVkX18gPSBmdW5jMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgaW5zcGVjdC51bndyYXAoZnVuYzEpCisKKyAgICAgICAgZGVmIGZ1bmMyKCk6IHBhc3MKKyAgICAgICAgZnVuYzIuX193cmFwcGVkX18gPSBmdW5jMQorICAgICAgICBmdW5jMS5fX3dyYXBwZWRfXyA9IGZ1bmMyCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnd3JhcHBlciBsb29wJyk6CisgICAgICAgICAgICBpbnNwZWN0LnVud3JhcChmdW5jMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd3cmFwcGVyIGxvb3AnKToKKyAgICAgICAgICAgIGluc3BlY3QudW53cmFwKGZ1bmMyKQorCisgICAgZGVmIHRlc3RfdW5oYXNoYWJsZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMoKTogcGFzcworICAgICAgICBmdW5jLl9fd3JhcHBlZF9fID0gTm9uZQorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lCisgICAgICAgICAgICBfX3dyYXBwZWRfXyA9IGZ1bmMKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5zcGVjdC51bndyYXAoQygpKSkKKworY2xhc3MgVGVzdE1haW4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X29ubHlfc291cmNlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndW5pdHRlc3QnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5pdHRlc3QnKQorICAgICAgICBsaW5lcyA9IG91dC5kZWNvZGUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgIyBpZ25vcmUgdGhlIGZpbmFsIG5ld2xpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1s6LTFdLCBpbnNwZWN0LmdldHNvdXJjZShtb2R1bGUpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoVGhyZWFkUG9vbEV4ZWN1dG9yIGlzIE5vbmUsCisgICAgICAgICAgICAndGhyZWFkcyByZXF1aXJlZCB0byB0ZXN0IF9fcXVhbG5hbWVfXyBmb3Igc291cmNlIGZpbGVzJykKKyAgICBkZWYgdGVzdF9xdWFsbmFtZV9zb3VyY2Uoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ2luc3BlY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jdXJyZW50LmZ1dHVyZXM6VGhyZWFkUG9vbEV4ZWN1dG9yJykKKyAgICAgICAgbGluZXMgPSBvdXQuZGVjb2RlKCkuc3BsaXRsaW5lcygpCisgICAgICAgICMgaWdub3JlIHRoZSBmaW5hbCBuZXdsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXNbOi0xXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LmdldHNvdXJjZShUaHJlYWRQb29sRXhlY3V0b3IpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5zKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndW5pdHRlc3QnKQorICAgICAgICBfLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAnaW5zcGVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMnKQorICAgICAgICBsaW5lcyA9IGVyci5kZWNvZGUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWyJDYW4ndCBnZXQgaW5mbyBmb3IgYnVpbHRpbiBtb2R1bGVzLiJdKQorCisgICAgZGVmIHRlc3RfZGV0YWlscyhzZWxmKToKKyAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ3VuaXR0ZXN0JykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnaW5zcGVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuaXR0ZXN0JywgJy0tZGV0YWlscycpCisgICAgICAgIG91dHB1dCA9IG91dC5kZWNvZGUoKQorICAgICAgICAjIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgb24gdGhlIG91dHB1dAorICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZS5fX25hbWVfXywgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZS5fX2ZpbGVfXywgb3V0cHV0KQorICAgICAgICBpZiBub3Qgc3lzLmZsYWdzLm9wdGltaXplOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUuX19jYWNoZWRfXywgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCisKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KAogICAgICAgICBUZXN0RGVjb3JhdG9ycywgVGVzdFJldHJpZXZpbmdTb3VyY2VDb2RlLCBUZXN0T25lbGluZXJzLCBUZXN0QnVnZ3lDYXNlcywKQEAgLTIzMDgsNyArMjkzMSw4IEBACiAgICAgICAgIFRlc3RHZXRjYWxsYXJnc0Z1bmN0aW9ucywgVGVzdEdldGNhbGxhcmdzTWV0aG9kcywKICAgICAgICAgVGVzdEdldGNhbGxhcmdzVW5ib3VuZE1ldGhvZHMsIFRlc3RHZXRhdHRyU3RhdGljLCBUZXN0R2V0R2VuZXJhdG9yU3RhdGUsCiAgICAgICAgIFRlc3ROb0VPTCwgVGVzdFNpZ25hdHVyZU9iamVjdCwgVGVzdFNpZ25hdHVyZUJpbmQsIFRlc3RQYXJhbWV0ZXJPYmplY3QsCi0gICAgICAgIFRlc3RCb3VuZEFyZ3VtZW50cywgVGVzdEdldENsb3N1cmVWYXJzCisgICAgICAgIFRlc3RCb3VuZEFyZ3VtZW50cywgVGVzdFNpZ25hdHVyZVByaXZhdGVIZWxwZXJzLCBUZXN0R2V0Q2xvc3VyZVZhcnMsCisgICAgICAgIFRlc3RVbndyYXAsIFRlc3RNYWluCiAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbnQucHkgYi9MaWIvdGVzdC90ZXN0X2ludC5weQppbmRleCBjNDg5NTEwLi5lOTQ2MDJlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ludC5weQpAQCAtMjI4LDYgKzIyOCw0NyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgYmFzZT0xMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIGJhc2U9MCkKIAorICAgIGRlZiB0ZXN0X2ludF9iYXNlX2xpbWl0cyhzZWxmKToKKyAgICAgICAgIiIiVGVzdGluZyB0aGUgc3VwcG9ydGVkIGxpbWl0cyBvZiB0aGUgaW50KCkgYmFzZSBwYXJhbWV0ZXIuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwJywgNSksIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgMzcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCAtOTA5KSAgIyBBbiBvbGQgbWFnaWMgdmFsdWUgYmFzZSBmcm9tIFB5dGhvbiAyLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgYmFzZT0wLSgyKioyMzQpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgYmFzZT0yKioyMzQpCisgICAgICAgICMgQmFzZXMgMiB0aHJvdWdoIDM2IGFyZSBzdXBwb3J0ZWQuCisgICAgICAgIGZvciBiYXNlIGluIHJhbmdlKDIsMzcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzAnLCBiYXNlPWJhc2UpLCAwKQorCisgICAgZGVmIHRlc3RfaW50X2Jhc2VfYmFkX3R5cGVzKHNlbGYpOgorICAgICAgICAiIiJOb3QgaW50ZWdlciB0eXBlcyBhcmUgbm90IHZhbGlkIGJhc2VzOyBpc3N1ZTE2NzcyLiIiIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCA1LjUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDUuMCkKKworICAgIGRlZiB0ZXN0X2ludF9iYXNlX2luZGV4YWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTXlJbmRleGFibGUob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKyAgICAgICAgIyBDaGVjayBvdXQgb2YgcmFuZ2UgYmFzZXMuCisgICAgICAgIGZvciBiYXNlIGluIDIqKjEwMCwgLTIqKjEwMCwgMSwgMzc6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGludCgnNDMnLCBiYXNlKQorCisgICAgICAgICMgQ2hlY2sgaW4tcmFuZ2UgYmFzZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDEnLCBiYXNlPU15SW5kZXhhYmxlKDIpKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMScsIGJhc2U9TXlJbmRleGFibGUoMTApKSwgMTAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAxJywgYmFzZT1NeUluZGV4YWJsZSgzNikpLCAxICsgMzYqKjIpCisKICAgICBkZWYgdGVzdF9ub25fbnVtZXJpY19pbnB1dF90eXBlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHBvc3NpYmxlIG5vbi1udW1lcmljIHR5cGVzIGZvciB0aGUgYXJndW1lbnQgeCwgaW5jbHVkaW5nCiAgICAgICAgICMgc3ViY2xhc3NlcyBvZiB0aGUgZXhwbGljaXRseSBkb2N1bWVudGVkIGFjY2VwdGVkIHR5cGVzLgpAQCAtMzU5LDE1ICs0MDAsMTggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgICAgIGJhZF9pbnQgPSBCYWRJbnQoKQotICAgICAgICBuID0gaW50KGJhZF9pbnQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgbiA9IGludChiYWRfaW50KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIDEpCiAKICAgICAgICAgYmFkX2ludCA9IEJhZEludDIoKQotICAgICAgICBuID0gaW50KGJhZF9pbnQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgbiA9IGludChiYWRfaW50KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIDEpCiAKICAgICAgICAgYmFkX2ludCA9IFRydW5jUmV0dXJuc0JhZEludCgpCi0gICAgICAgIG4gPSBpbnQoYmFkX2ludCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBuID0gaW50KGJhZF9pbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMSkKIAogICAgICAgICBnb29kX2ludCA9IFRydW5jUmV0dXJuc0ludFN1YmNsYXNzKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW8ucHkgYi9MaWIvdGVzdC90ZXN0X2lvLnB5CmluZGV4IGFjNmQ0NzguLjI2NzUzN2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pby5weQpAQCAtMzUsNiArMzUsNyBAQAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUsIFVzZXJMaXN0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY3ljbGUsIGNvdW50CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiAKIGltcG9ydCBjb2RlY3MKIGltcG9ydCBpbyAgIyBDIGltcGxlbWVudGF0aW9uIG9mIGlvCkBAIC0xNjQsNyArMTY1LDcgQEAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gMQotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogCiBjbGFzcyBDQ2xvc2VGYWlsdXJlSU8oQ2xvc2VGYWlsdXJlSU8sIGlvLlJhd0lPQmFzZSk6CiAgICAgcGFzcwpAQCAtNTk1LDkgKzU5Niw5IEBACiAgICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CiAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICBmLmZsdXNoID0gYmFkX2ZsdXNoCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGYuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKQEAgLTc1Nyw3ICs3NTgsNyBAQAogICAgICAgICBpZiBzOgogICAgICAgICAgICAgIyBUaGUgZGVzdHJ1Y3RvciAqbWF5KiBoYXZlIHByaW50ZWQgYW4gdW5yYWlzYWJsZSBlcnJvciwgY2hlY2sgaXQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuc3BsaXRsaW5lcygpKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBJT0Vycm9yOiAiKSwgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBPU0Vycm9yOiAiKSwgcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKCIgaWdub3JlZCIpLCBzKQogCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKQEAgLTc3MywyMiArNzc0LDIyIEBACiAgICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CiAgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKICAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICAgICAgcmF3LmZsdXNoID0gYmFkX2ZsdXNoCiAgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0X2Nsb3NlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgogICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2ZsdXNoJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2ZsdXNoJykKICAgICAgICAgZGVmIGJhZF9jbG9zZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignY2xvc2UnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY2xvc2UnKQogICAgICAgICByYXcuY2xvc2UgPSBiYWRfY2xvc2UKICAgICAgICAgYiA9IHNlbGYudHAocmF3KQogICAgICAgICBiLmZsdXNoID0gYmFkX2ZsdXNoCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgZXJyOiAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgZXJyOiAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgICAgICBiLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXhjZXB0aW9uLmFyZ3MsICgnY2xvc2UnLCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXy5hcmdzLCAoJ2ZsdXNoJywpKQpAQCAtODI4LDYgKzgyOSwxNCBAQAogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZnNpemUyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YoYnVmaW8pLCBzaXplICsgYnVmc2l6ZTIpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9idWZmZXJfZnJlZWluZyhzZWxmKSA6CisgICAgICAgIGJ1ZnNpemUgPSA0MDk2CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZnNpemUpCisgICAgICAgIHNpemUgPSBzeXMuZ2V0c2l6ZW9mKGJ1ZmlvKSAtIGJ1ZnNpemUKKyAgICAgICAgYnVmaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YoYnVmaW8pLCBzaXplKQogCiBjbGFzcyBCdWZmZXJlZFJlYWRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UsIENvbW1vbkJ1ZmZlcmVkVGVzdHMpOgogICAgIHJlYWRfbW9kZSA9ICJyYiIKQEAgLTEwMTIsOCArMTAyMSw4IEBACiAgICAgZGVmIHRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKToKICAgICAgICAgcmF3aW8gPSBzZWxmLk1pc2JlaGF2ZWRSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnNlZWssIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnRlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnNlZWssIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnRlbGwpCiAKICAgICBkZWYgdGVzdF9ub19leHRyYW5lb3VzX3JlYWQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzk1NTA7IHdoZW4gdGhlIHJhdyBJTyBvYmplY3QgaGFzIHNhdGlzZmllZCB0aGUgcmVhZCByZXF1ZXN0LApAQCAtMTA2NCwxNyArMTA3MywxOCBAQAogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCiAgICAgICAgICMgX3B5aW8uQnVmZmVyZWRSZWFkZXIgc2VlbXMgdG8gaW1wbGVtZW50IHJlYWRpbmcgZGlmZmVyZW50LCBzbyB0aGF0CiAgICAgICAgICMgY2hlY2tpbmcgdGhpcyBpcyBub3Qgc28gZWFzeS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8ucmVhZCwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnJlYWQsIDEwKQogCiAgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uKHNlbGYpOgogICAgICAgICAjIEMgQnVmZmVyZWRSZWFkZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLgogICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbnRvIGdjLmdhcmJhZ2UgaW5zdGVhZAotICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKLSAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCi0gICAgICAgIGYuZiA9IGYKLSAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQotICAgICAgICBkZWwgZgotICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSZXNvdXJjZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQorICAgICAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICAgICBmLmYgPSBmCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgICAgICBkZWwgZgorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCiAKICAgICBkZWYgdGVzdF9hcmdzX2Vycm9yKHNlbGYpOgpAQCAtMTMyNyw5ICsxMzM3LDkgQEAKICAgICBkZWYgdGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpOgogICAgICAgICByYXdpbyA9IHNlbGYuTWlzYmVoYXZlZFJhd0lPKCkKICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvLCA1KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5zZWVrLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby50ZWxsKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby53cml0ZSwgYiJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby5zZWVrLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby50ZWxsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby53cml0ZSwgYiJhYmNkZWYiKQogCiAgICAgZGVmIHRlc3RfbWF4X2J1ZmZlcl9zaXplX3JlbW92YWwoc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKQEAgLTEzMzgsMTEgKzEzNDgsMTEgQEAKICAgICBkZWYgdGVzdF93cml0ZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBkZWYgYmFkX3dyaXRlKGIpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICAgICAgcmF3LndyaXRlID0gYmFkX3dyaXRlCiAgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKICAgICAgICAgYi53cml0ZShiJ3NwYW0nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuY2xvc2VkKQogCiAKQEAgLTEzNzMsMTMgKzEzODMsMTQgQEAKICAgICAgICAgIyBDIEJ1ZmZlcmVkV3JpdGVyIG9iamVjdHMgYXJlIGNvbGxlY3RlZCwgYW5kIGNvbGxlY3RpbmcgdGhlbSBmbHVzaGVzCiAgICAgICAgICMgYWxsIGRhdGEgdG8gZGlzay4KICAgICAgICAgIyBUaGUgUHl0aG9uIHZlcnNpb24gaGFzIF9fZGVsX18sIHNvIGl0IGVuZHMgaW50byBnYy5nYXJiYWdlIGluc3RlYWQKLSAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCi0gICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQotICAgICAgICBmLndyaXRlKGIiMTIzeHh4IikKLSAgICAgICAgZi54ID0gZgotICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCi0gICAgICAgIGRlbCBmCi0gICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJlc291cmNlV2FybmluZykpOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCisgICAgICAgICAgICBmID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgICAgIGYud3JpdGUoYiIxMjN4eHgiKQorICAgICAgICAgICAgZi54ID0gZgorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICAgICAgZGVsIGYKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiMTIzeHh4IikKQEAgLTE0MjYsMTQgKzE0MzcsMTQgQEAKICAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLnRwLCBOb3RSZWFkYWJsZSgpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLnRwLCBOb3RSZWFkYWJsZSgpLCBzZWxmLk1vY2tSYXdJTygpKQogCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Jfd2l0aF9ub3Rfd3JpdGVhYmxlKHNlbGYpOgogICAgICAgICBjbGFzcyBOb3RXcml0ZWFibGUoTW9ja1Jhd0lPKToKICAgICAgICAgICAgIGRlZiB3cml0YWJsZShzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLnRwLCBzZWxmLk1vY2tSYXdJTygpLCBOb3RXcml0ZWFibGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi50cCwgc2VsZi5Nb2NrUmF3SU8oKSwgTm90V3JpdGVhYmxlKCkpCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgogICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLkJ5dGVzSU8oYiJhYmNkZWYiKSwgc2VsZi5Nb2NrUmF3SU8oKSkKQEAgLTE5NTUsNiArMTk2NiwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuX19pbml0X18sIGIsIG5ld2xpbmU9NDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuX19pbml0X18sIGIsIG5ld2xpbmU9J3h5enp5JykKIAorICAgIGRlZiB0ZXN0X25vbl90ZXh0X2VuY29kaW5nX2NvZGVjc19hcmVfcmVqZWN0ZWQoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoZSBjb25zdHJ1Y3RvciBjb21wbGFpbnMgaWYgcGFzc2VkIGEgY29kZWMgdGhhdCBpc24ndAorICAgICAgICAjIG1hcmtlZCBhcyBhIHRleHQgZW5jb2RpbmcKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjA0MDQKKyAgICAgICAgciA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgImlzIG5vdCBhIHRleHQgZW5jb2RpbmciKToKKyAgICAgICAgICAgIHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iaGV4IikKKwogICAgIGRlZiB0ZXN0X2RldGFjaChzZWxmKToKICAgICAgICAgciA9IHNlbGYuQnl0ZXNJTygpCiAgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHIpCkBAIC0yMjAwLDcgKzIyMjAsNyBAQAogICAgICAgICBpZiBzOgogICAgICAgICAgICAgIyBUaGUgZGVzdHJ1Y3RvciAqbWF5KiBoYXZlIHByaW50ZWQgYW4gdW5yYWlzYWJsZSBlcnJvciwgY2hlY2sgaXQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuc3BsaXRsaW5lcygpKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBJT0Vycm9yOiAiKSwgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBPU0Vycm9yOiAiKSwgcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKCIgaWdub3JlZCIpLCBzKQogCiAgICAgIyBTeXN0ZW1hdGljIHRlc3RzIG9mIHRoZSB0ZXh0IEkvTyBBUEkKQEAgLTIyNzIsNyArMjI5Miw3IEBACiAgICAgICAgIGYuc2VlaygwKQogICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCAiXHhmZlxuIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGYudGVsbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYudGVsbCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcDIpCiAgICAgICAgIGYuY2xvc2UoKQogCkBAIC0yMzc2LDcgKzIzOTYsNyBAQAogICAgICAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoVW5SZWFkYWJsZSgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0eHQucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdHh0LnJlYWQpCiAKICAgICBkZWYgdGVzdF9yZWFkX29uZV9ieV9vbmUoc2VsZik6CiAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYiJBQVxyXG5CQiIpKQpAQCAtMjU1MSw5ICsyNTcxLDkgQEAKICAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKICAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICAgICAgdHh0LmZsdXNoID0gYmFkX2ZsdXNoCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHR4dC5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB0eHQuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR4dC5jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKQEAgLTI2MDcsMTkgKzI2MjcsNjQgQEAKIAogICAgIGRlZiB0ZXN0X2lsbGVnYWxfZGVjb2RlcihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTcxMDYKKyAgICAgICAgIyBCeXBhc3MgdGhlIGVhcmx5IGVuY29kaW5nIGNoZWNrIGFkZGVkIGluIGlzc3VlIDIwNDA0CisgICAgICAgIGRlZiBfbWFrZV9pbGxlZ2FsX3dyYXBwZXIoKToKKyAgICAgICAgICAgIHF1b3ByaSA9IGNvZGVjcy5sb29rdXAoInF1b3ByaSIpCisgICAgICAgICAgICBxdW9wcmkuX2lzX3RleHRfZW5jb2RpbmcgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYidhYWFhYWEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9J1xuJywgZW5jb2Rpbmc9InF1b3ByaSIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHF1b3ByaS5faXNfdGV4dF9lbmNvZGluZyA9IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gdAogICAgICAgICAjIENyYXNoIHdoZW4gZGVjb2RlciByZXR1cm5zIG5vbi1zdHJpbmcKLSAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYidhYWFhYWEnKSwgbmV3bGluZT0nXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSdxdW9wcmlfY29kZWMnKQorICAgICAgICB0ID0gX21ha2VfaWxsZWdhbF93cmFwcGVyKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnJlYWQsIDEpCi0gICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKGInYWFhYWFhJyksIG5ld2xpbmU9J1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0ncXVvcHJpX2NvZGVjJykKKyAgICAgICAgdCA9IF9tYWtlX2lsbGVnYWxfd3JhcHBlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5yZWFkbGluZSkKLSAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYidhYWFhYWEnKSwgbmV3bGluZT0nXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSdxdW9wcmlfY29kZWMnKQorICAgICAgICB0ID0gX21ha2VfaWxsZWdhbF93cmFwcGVyKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnJlYWQpCiAKKyAgICBkZWYgX2NoZWNrX2NyZWF0ZV9hdF9zaHV0ZG93bihzZWxmLCAqKmt3YXJncyk6CisgICAgICAgICMgSXNzdWUgIzIwMDM3OiBjcmVhdGluZyBhIFRleHRJT1dyYXBwZXIgYXQgc2h1dGRvd24KKyAgICAgICAgIyBzaG91bGRuJ3QgY3Jhc2ggdGhlIGludGVycHJldGVyLgorICAgICAgICBpb21vZCA9IHNlbGYuaW8uX19uYW1lX18KKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgY29kZWNzCisgICAgICAgICAgICBpbXBvcnQge2lvbW9kfSBhcyBpbworCisgICAgICAgICAgICAjIEF2b2lkIGxvb2tpbmcgdXAgY29kZWNzIGF0IHNodXRkb3duCisgICAgICAgICAgICBjb2RlY3MubG9va3VwKCd1dGYtOCcpCisKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1ZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBpby5UZXh0SU9XcmFwcGVyKHNlbGYuYnVmLCAqKntrd2FyZ3N9KQorICAgICAgICAgICAgICAgICAgICBwcmludCgib2siKQorICAgICAgICAgICAgYyA9IEMoKQorICAgICAgICAgICAgIiIiLmZvcm1hdChpb21vZD1pb21vZCwga3dhcmdzPWt3YXJncykKKyAgICAgICAgcmV0dXJuIGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9hdF9zaHV0ZG93bl93aXRob3V0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLl9jaGVja19jcmVhdGVfYXRfc2h1dGRvd24oKQorICAgICAgICBpZiBlcnI6CisgICAgICAgICAgICAjIENhbiBlcnJvciBvdXQgd2l0aCBhIFJ1bnRpbWVFcnJvciBpZiB0aGUgbW9kdWxlIHN0YXRlCisgICAgICAgICAgICAjIGlzbid0IGZvdW5kLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLnNodXRkb3duX2Vycm9yLCBlcnIuZGVjb2RlKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvayIsIG91dC5kZWNvZGUoKS5zdHJpcCgpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2F0X3NodXRkb3duX3dpdGhfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuX2NoZWNrX2NyZWF0ZV9hdF9zaHV0ZG93bihlbmNvZGluZz0ndXRmLTgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPSdzdHJpY3QnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib2siLCBvdXQuZGVjb2RlKCkuc3RyaXAoKSkKKwogCiBjbGFzcyBDVGV4dElPV3JhcHBlclRlc3QoVGV4dElPV3JhcHBlclRlc3QpOgorICAgIGlvID0gaW8KKyAgICBzaHV0ZG93bl9lcnJvciA9ICJSdW50aW1lRXJyb3I6IGNvdWxkIG5vdCBmaW5kIGlvIG1vZHVsZSBzdGF0ZSIKIAogICAgIGRlZiB0ZXN0X2luaXRpYWxpemF0aW9uKHNlbGYpOgogICAgICAgICByID0gc2VsZi5CeXRlc0lPKGIiXHhjM1x4YTlcblxuIikKQEAgLTI2MzQsMTQgKzI2OTksMTUgQEAKICAgICAgICAgIyBDIFRleHRJT1dyYXBwZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLCBhbmQgY29sbGVjdGluZyB0aGVtIGZsdXNoZXMKICAgICAgICAgIyBhbGwgZGF0YSB0byBkaXNrLgogICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbiBnYy5nYXJiYWdlIGluc3RlYWQuCi0gICAgICAgIHJhd2lvID0gaW8uRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFdyaXRlcihyYXdpbykKLSAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQotICAgICAgICB0LndyaXRlKCI0NTZkZWYiKQotICAgICAgICB0LnggPSB0Ci0gICAgICAgIHdyID0gd2Vha3JlZi5yZWYodCkKLSAgICAgICAgZGVsIHQKLSAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUmVzb3VyY2VXYXJuaW5nKSk6CisgICAgICAgICAgICByYXdpbyA9IGlvLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHJhd2lvKQorICAgICAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICAgICAgdC53cml0ZSgiNDU2ZGVmIikKKyAgICAgICAgICAgIHQueCA9IHQKKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYodCkKKyAgICAgICAgICAgIGRlbCB0CisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiIjQ1NmRlZiIpCkBAIC0yNjYyLDcgKzI3MjgsOSBAQAogCiAKIGNsYXNzIFB5VGV4dElPV3JhcHBlclRlc3QoVGV4dElPV3JhcHBlclRlc3QpOgotICAgIHBhc3MKKyAgICBpbyA9IHB5aW8KKyAgICAjc2h1dGRvd25fZXJyb3IgPSAiTG9va3VwRXJyb3I6IHVua25vd24gZW5jb2Rpbmc6IGFzY2lpIgorICAgIHNodXRkb3duX2Vycm9yID0gIlR5cGVFcnJvcjogJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IGl0ZXJhYmxlIgogCiAKIGNsYXNzIEluY3JlbWVudGFsTmV3bGluZURlY29kZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTI4MDEsNyArMjg2OSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5tb2RlLCAid2IiKQogICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiVSIpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIlUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgICAgICAgICAgICBzdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmJ1ZmZlci5uYW1lLCAgICAgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIucmF3Lm5hbWUsIHN1cHBvcnQuVEVTVEZOKQpAQCAtMjkzMSw3ICszMDAwLDcgQEAKICAgICAgICAgICAgIGZvciBmZCBpbiBmZHM6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUJBREY6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cF9mZHMpCkBAIC0zMDk3LDE1ICszMTY2LDE4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpbyA9IHNlbGYuaW8ub3Blbih3LCAqKmZkb3Blbl9rd2FyZ3MpCiAgICAgICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQogICAgICAgICAgICAgIyBGaWxsIHRoZSBwaXBlIGVub3VnaCB0aGF0IHRoZSB3cml0ZSB3aWxsIGJlIGJsb2NraW5nLgogICAgICAgICAgICAgIyBJdCB3aWxsIGJlIGludGVycnVwdGVkIGJ5IHRoZSB0aW1lciBhcm1lZCBhYm92ZS4gIFNpbmNlIHRoZQogICAgICAgICAgICAgIyBvdGhlciB0aHJlYWQgaGFzIHJlYWQgb25lIGJ5dGUsIHRoZSBsb3ctbGV2ZWwgd3JpdGUgd2lsbAogICAgICAgICAgICAgIyByZXR1cm4gd2l0aCBhIHN1Y2Nlc3NmdWwgKHBhcnRpYWwpIHJlc3VsdCByYXRoZXIgdGhhbiBhbiBFSU5UUi4KICAgICAgICAgICAgICMgVGhlIGJ1ZmZlcmVkIElPIGxheWVyIG11c3QgY2hlY2sgZm9yIHBlbmRpbmcgc2lnbmFsCiAgICAgICAgICAgICAjIGhhbmRsZXJzLCB3aGljaCBpbiB0aGlzIGNhc2Ugd2lsbCBpbnZva2UgYWxhcm1faW50ZXJydXB0KCkuCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpby53cml0ZSwgaXRlbSAqIChzdXBwb3J0LlBJUEVfTUFYX1NJWkUgLy8gbGVuKGl0ZW0pICsgMSkpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW8ud3JpdGUsIGl0ZW0gKiAoc3VwcG9ydC5QSVBFX01BWF9TSVpFIC8vIGxlbihpdGVtKSArIDEpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKICAgICAgICAgICAgIHQuam9pbigpCiAgICAgICAgICAgICAjIFdlIGdvdCBvbmUgYnl0ZSwgZ2V0IGFub3RoZXIgb25lIGFuZCBjaGVjayB0aGF0IGl0IGlzbid0IGEKICAgICAgICAgICAgICMgcmVwZWF0IG9mIHRoZSBmaXJzdCBvbmUuCkBAIC0zMTE5LDcgKzMxOTEsNyBAQAogICAgICAgICAgICAgIyBidWZmZXIsIGFuZCBibG9jayBhZ2Fpbi4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB3aW8uY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQkFERjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKIApAQCAtMzI0Nyw3ICszMzE5LDcgQEAKICAgICAgICAgICAgICMgYnVmZmVyLCBhbmQgY291bGQgYmxvY2sgKGluIGNhc2Ugb2YgZmFpbHVyZSkuCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2lvLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUJBREY6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkgYi9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CmluZGV4IDUzMWM5YWYuLmVmZTlmNTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQpAQCAtOCw3ICs4LDcgQEAKIAogdHJ5OgogICAgIHR0eSA9IG9wZW4oIi9kZXYvdHR5IiwgInJiIikKLWV4Y2VwdCBJT0Vycm9yOgorZXhjZXB0IE9TRXJyb3I6CiAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlVuYWJsZSB0byBvcGVuIC9kZXYvdHR5IikKIGVsc2U6CiAgICAgIyBTa2lwIGlmIGFub3RoZXIgcHJvY2VzcyBpcyBpbiBmb3JlZ3JvdW5kCkBAIC04Niw4ICs4Niw2IEBACiAgICAgICAgICAgICBvcy5jbG9zZShtZmQpCiAgICAgICAgICAgICBvcy5jbG9zZShzZmQpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoSW9jdGxUZXN0cykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkgYi9MaWIvdGVzdC90ZXN0X2lwYWRkcmVzcy5weQppbmRleCA1YmZjZjQxLi5mMjk0N2I5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lwYWRkcmVzcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lwYWRkcmVzcy5weQpAQCAtMTM1OCw2ICsxMzU4LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX25ldHdvcmsoCiAgICAgICAgICAgICAgICAgJzEyNy40Mi4wLjAvMTYnKS5pc19sb29wYmFjaykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzEyOC4wLjAuMCcpLmlzX2xvb3BiYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMDAuNjQuMC4wLzEwJykuaXNfcHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzEwMC42NC4wLjAvMTAnKS5pc19nbG9iYWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxOTIuMC4yLjEyOC8yNScpLmlzX3ByaXZhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTkyLjAuMy4wLzI0JykuaXNfZ2xvYmFsKQogCiAgICAgICAgICMgdGVzdCBhZGRyZXNzZXMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHJlc3MuaXBfYWRkcmVzcygnMC4wLjAuMCcpLmlzX3Vuc3BlY2lmaWVkKQpAQCAtMTQyMyw2ICsxNDMxLDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCc6OjEnKS5pc191bnNwZWNpZmllZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzo6LzEyNycpLmlzX3Vuc3BlY2lmaWVkKQogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMjAwMTo6MS8xMjgnKS5pc19wcml2YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzIwMDo6MS8xMjgnKS5pc19nbG9iYWwpCiAgICAgICAgICMgdGVzdCBhZGRyZXNzZXMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHJlc3MuaXBfYWRkcmVzcygnZmZmZjo6JykuaXNfbXVsdGljYXN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkcmVzcy5pcF9hZGRyZXNzKDIqKjEyOCAtIDEpLmlzX211bHRpY2FzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXRlcmxlbi5weSBiL0xpYi90ZXN0L3Rlc3RfaXRlcmxlbi5weQppbmRleCA5MTAxZjZjLi4xNTJmNWZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5CkBAIC00NSwzMSArNDUsMjEgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSBpdGVydG9vbHMgaW1wb3J0IHJlcGVhdAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKLWZyb20gYnVpbHRpbnMgaW1wb3J0IGxlbiBhcyBfbGVuCitmcm9tIG9wZXJhdG9yIGltcG9ydCBsZW5ndGhfaGludAogCiBuID0gMTAKIAotZGVmIGxlbihvYmopOgotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIF9sZW4ob2JqKQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgbm90ZTogdGhpcyBpcyBhbiBpbnRlcm5hbCB1bmRvY3VtZW50ZWQgQVBJLAotICAgICAgICAgICAgIyBkb24ndCByZWx5IG9uIGl0IGluIHlvdXIgb3duIHByb2dyYW1zCi0gICAgICAgICAgICByZXR1cm4gb2JqLl9fbGVuZ3RoX2hpbnRfXygpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgogCiBjbGFzcyBUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9uczoKIAogICAgIGRlZiB0ZXN0X2ludmFyaWFudChzZWxmKToKICAgICAgICAgaXQgPSBzZWxmLml0CiAgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKDEsIG4rMSkpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIGkpCiAgICAgICAgICAgICBuZXh0KGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKIAogY2xhc3MgVGVzdFRlbXBvcmFyaWx5SW1tdXRhYmxlKFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zKToKIApAQCAtNzgsMTIgKzY4LDEyIEBACiAgICAgICAgICMgbGVuZ3RoIGltbXV0YWJpbGl0eSAgZHVyaW5nIGl0ZXJhdGlvbgogCiAgICAgICAgIGl0ID0gc2VsZi5pdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuKQogICAgICAgICBuZXh0KGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4tMSkKICAgICAgICAgc2VsZi5tdXRhdGUoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG5leHQsIGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogCiAjIyAtLS0tLS0tIENvbmNyZXRlIFR5cGUgVGVzdHMgLS0tLS0tLQogCkBAIC05MiwxMCArODIsNiBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5pdCA9IHJlcGVhdChOb25lLCBuKQogCi0gICAgZGVmIHRlc3Rfbm9fbGVuX2Zvcl9pbmZpbml0ZV9yZXBlYXQoc2VsZik6Ci0gICAgICAgICMgVGhlIHJlcGVhdCgpIG9iamVjdCBjYW4gYWxzbyBiZSBpbmZpbml0ZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxlbiwgcmVwZWF0KE5vbmUpKQotCiBjbGFzcyBUZXN0WHJhbmdlKFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xNjcsMTQgKzE1MywxNSBAQAogICAgICAgICBpdCA9IGl0ZXIoZCkKICAgICAgICAgbmV4dChpdCkKICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuIC0gMikKICAgICAgICAgZC5hcHBlbmQobikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuLTEpICAjIGdyb3cgd2l0aCBhcHBlbmQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4gLSAxKSAgIyBncm93IHdpdGggYXBwZW5kCiAgICAgICAgIGRbMTpdID0gW10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pCiAgICAgICAgIGQuZXh0ZW5kKHJhbmdlKDIwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKKwogCiBjbGFzcyBUZXN0TGlzdFJldmVyc2VkKFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTE4NiwzMiArMTczLDQxIEBACiAgICAgICAgIGl0ID0gcmV2ZXJzZWQoZCkKICAgICAgICAgbmV4dChpdCkKICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuIC0gMikKICAgICAgICAgZC5hcHBlbmQobikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuLTIpICAjIGlnbm9yZSBhcHBlbmQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4gLSAyKSAgIyBpZ25vcmUgYXBwZW5kCiAgICAgICAgIGRbMTpdID0gW10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pICAjIGNvbmZpcm0gaW52YXJpYW50CiAgICAgICAgIGQuZXh0ZW5kKHJhbmdlKDIwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKIAogIyMgLS0gQ2hlY2sgdG8gbWFrZSBzdXJlIGV4Y2VwdGlvbnMgYXJlIG5vdCBzdXBwcmVzc2VkIGJ5IF9fbGVuZ3RoX2hpbnRfXygpCiAKIAogY2xhc3MgQmFkTGVuKG9iamVjdCk6Ci0gICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisKICAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdoZWxsbycpCiAKKwogY2xhc3MgQmFkTGVuZ3RoSGludChvYmplY3QpOgotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorCiAgICAgZGVmIF9fbGVuZ3RoX2hpbnRfXyhzZWxmKToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdoZWxsbycpCiAKKwogY2xhc3MgTm9uZUxlbmd0aEhpbnQob2JqZWN0KToKLSAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKwogICAgIGRlZiBfX2xlbmd0aF9oaW50X18oc2VsZik6Ci0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCiAKIGNsYXNzIFRlc3RMZW5ndGhIaW50RXhjZXB0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKaW5kZXggNTE0YTZiNy4uMjFmMWJkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKQEAgLTEwLDYgKzEwLDggQEAKIGltcG9ydCBjb3B5CiBpbXBvcnQgcGlja2xlCiBmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCitpbXBvcnQgc3lzCitpbXBvcnQgc3RydWN0CiBtYXhzaXplID0gc3VwcG9ydC5NQVhfUHlfc3NpemVfdAogbWluc2l6ZSA9IC1tYXhzaXplLTEKIApAQCAtMTcyOSw5ICsxNzMxLDggQEAKIGNsYXNzIExlbmd0aFRyYW5zcGFyZW5jeSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6Ci0gICAgICAgIGZyb20gdGVzdC50ZXN0X2l0ZXJsZW4gaW1wb3J0IGxlbgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXBlYXQoTm9uZSwgNTApKSwgNTApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCByZXBlYXQoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQocmVwZWF0KE5vbmUsIDUwKSksIDUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lKSwgMTIpLCAxMikKIAogY2xhc3MgUmVncmVzc2lvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTgwOCw2ICsxODA5LDQ0IEBACiAgICAgICAgICAgICAgICAgIyB3ZSBleHBlY3QgdHlwZSBlcnJvcnMgYmVjYXVzZSBvZiB3cm9uZyBhcmd1bWVudCBjb3VudAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oImRvZXMgbm90IHRha2Uga2V5d29yZCBhcmd1bWVudHMiLCBlcnIuYXJnc1swXSkKIAorQHN1cHBvcnQuY3B5dGhvbl9vbmx5CitjbGFzcyBTaXplb2ZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc3NpemVfdCA9IHN0cnVjdC5jYWxjc2l6ZSgnbicpCisKKyAgICBjaGVja19zaXplb2YgPSBzdXBwb3J0LmNoZWNrX3NpemVvZgorCisgICAgZGVmIHRlc3RfcHJvZHVjdF9zaXplb2Yoc2VsZik6CisgICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnM1BpJykKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgorICAgICAgICBjaGVjayhwcm9kdWN0KCdhYicsICcxMicpLCBiYXNlc2l6ZSArIDIgKiBzZWxmLnNzaXplX3QpCisgICAgICAgIGNoZWNrKHByb2R1Y3QoKigoJ2FiYycsKSAqIDEwKSksIGJhc2VzaXplICsgMTAgKiBzZWxmLnNzaXplX3QpCisKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnNfc2l6ZW9mKHNlbGYpOgorICAgICAgICBiYXNlc2l6ZSA9IHN1cHBvcnQuY2FsY29ianNpemUoJzNQbmknKQorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfc2l6ZW9mCisgICAgICAgIGNoZWNrKGNvbWJpbmF0aW9ucygnYWJjZCcsIDMpLCBiYXNlc2l6ZSArIDMgKiBzZWxmLnNzaXplX3QpCisgICAgICAgIGNoZWNrKGNvbWJpbmF0aW9ucyhyYW5nZSgxMCksIDQpLCBiYXNlc2l6ZSArIDQgKiBzZWxmLnNzaXplX3QpCisKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudF9zaXplb2Yoc2VsZik6CisgICAgICAgIGN3ciA9IGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50CisgICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnM1BuaScpCisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgY2hlY2soY3dyKCdhYmNkJywgMyksIGJhc2VzaXplICsgMyAqIHNlbGYuc3NpemVfdCkKKyAgICAgICAgY2hlY2soY3dyKHJhbmdlKDEwKSwgNCksIGJhc2VzaXplICsgNCAqIHNlbGYuc3NpemVfdCkKKworICAgIGRlZiB0ZXN0X3Blcm11dGF0aW9uc19zaXplb2Yoc2VsZik6CisgICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnNFBuaScpCisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgY2hlY2socGVybXV0YXRpb25zKCdhYmNkJyksCisgICAgICAgICAgICAgIGJhc2VzaXplICsgNCAqIHNlbGYuc3NpemVfdCArIDQgKiBzZWxmLnNzaXplX3QpCisgICAgICAgIGNoZWNrKHBlcm11dGF0aW9ucygnYWJjZCcsIDMpLAorICAgICAgICAgICAgICBiYXNlc2l6ZSArIDQgKiBzZWxmLnNzaXplX3QgKyAzICogc2VsZi5zc2l6ZV90KQorICAgICAgICBjaGVjayhwZXJtdXRhdGlvbnMoJ2FiY2RlJywgMyksCisgICAgICAgICAgICAgIGJhc2VzaXplICsgNSAqIHNlbGYuc3NpemVfdCArIDMgKiBzZWxmLnNzaXplX3QpCisgICAgICAgIGNoZWNrKHBlcm11dGF0aW9ucyhyYW5nZSgxMCksIDQpLAorICAgICAgICAgICAgICBiYXNlc2l6ZSArIDEwICogc2VsZi5zc2l6ZV90ICsgNCAqIHNlbGYuc3NpemVfdCkKKwogCiBsaWJyZWZ0ZXN0ID0gIiIiIERvY3Rlc3QgZm9yIGV4YW1wbGVzIGluIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZTogbGliaXRlcnRvb2xzLnRleAogCkBAIC0yMDQzLDcgKzIwODIsOCBAQAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIHRlc3RfY2xhc3NlcyA9IChUZXN0QmFzaWNPcHMsIFRlc3RWYXJpb3VzSXRlcmF0b3JBcmdzLCBUZXN0R0MsCiAgICAgICAgICAgICAgICAgICAgIFJlZ3Jlc3Npb25UZXN0cywgTGVuZ3RoVHJhbnNwYXJlbmN5LAotICAgICAgICAgICAgICAgICAgICBTdWJjbGFzc1dpdGhLd2FyZ3NUZXN0LCBUZXN0RXhhbXBsZXMpCisgICAgICAgICAgICAgICAgICAgIFN1YmNsYXNzV2l0aEt3YXJnc1Rlc3QsIFRlc3RFeGFtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgU2l6ZW9mVGVzdCkKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQogCiAgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkKaW5kZXggZDIzZTI4NS4uMzVjMDJkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2RlY29kZS5weQpAQCAtMSw1ICsxLDUgQEAKIGltcG9ydCBkZWNpbWFsCi1mcm9tIGlvIGltcG9ydCBTdHJpbmdJTworZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8sIEJ5dGVzSU8KIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiBmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CiAKQEAgLTcwLDUgKzcwLDI2IEBACiAgICAgICAgIG1zZyA9ICdlc2NhcGUnCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCBzKQogCisgICAgZGVmIHRlc3RfaW52YWxpZF9pbnB1dF90eXBlKHNlbGYpOgorICAgICAgICBtc2cgPSAndGhlIEpTT04gb2JqZWN0IG11c3QgYmUgc3RyJworICAgICAgICBmb3IgdmFsdWUgaW4gWzEsIDMuMTQsIGInYnl0ZXMnLCBiJ1x4ZmZceDAwJywgW10sIHt9LCBOb25lXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2csIHNlbGYubG9hZHMsIHZhbHVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgc2VsZi5qc29uLmxvYWQoQnl0ZXNJTyhiJ1sxLDIsM10nKSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ193aXRoX3V0ZjhfYm9tKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTg5NTgKKyAgICAgICAgYm9tX2pzb24gPSAiWzEsMiwzXSIuZW5jb2RlKCd1dGYtOC1zaWcnKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9hZHMoYm9tX2pzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JPTScsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5qc29uLmxvYWQoU3RyaW5nSU8oYm9tX2pzb24pKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCT00nLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgQk9NIGlzIG5vdCBkZXRlY3RlZCBpbiB0aGUgbWlkZGxlIG9mIGEgc3RyaW5nCisgICAgICAgIGJvbV9pbl9zdHIgPSAnInt9IicuZm9ybWF0KCcnLmVuY29kZSgndXRmLTgtc2lnJykuZGVjb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYm9tX2luX3N0ciksICdcdWZlZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuanNvbi5sb2FkKFN0cmluZ0lPKGJvbV9pbl9zdHIpKSwgJ1x1ZmVmZicpCisKIGNsYXNzIFRlc3RQeURlY29kZShUZXN0RGVjb2RlLCBQeVRlc3QpOiBwYXNzCiBjbGFzcyBUZXN0Q0RlY29kZShUZXN0RGVjb2RlLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2VudW0ucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbnVtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZjQxNDgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbnVtLnB5CkBAIC0wLDAgKzEsMTIwIEBACitmcm9tIGVudW0gaW1wb3J0IEVudW0sIEludEVudW0KK2Zyb20gbWF0aCBpbXBvcnQgaXNuYW4KK2Zyb20gdGVzdC50ZXN0X2pzb24gaW1wb3J0IFB5VGVzdCwgQ1Rlc3QKKworU01BTEwgPSAxCitCSUcgPSAxPDwzMgorSFVHRSA9IDE8PDY0CitSRUFMTFlfSFVHRSA9IDE8PDk2CisKK2NsYXNzIEJpZ051bShJbnRFbnVtKToKKyAgICBzbWFsbCA9IFNNQUxMCisgICAgYmlnID0gQklHCisgICAgaHVnZSA9IEhVR0UKKyAgICByZWFsbHlfaHVnZSA9IFJFQUxMWV9IVUdFCisKK0UgPSAyLjcxODI4MQorUEkgPSAzLjE0MTU5MworVEFVID0gMiAqIFBJCisKK2NsYXNzIEZsb2F0TnVtKGZsb2F0LCBFbnVtKToKKyAgICBlID0gRQorICAgIHBpID0gUEkKKyAgICB0YXUgPSBUQVUKKworSU5GID0gZmxvYXQoJ2luZicpCitORUdfSU5GID0gZmxvYXQoJy1pbmYnKQorTkFOID0gZmxvYXQoJ25hbicpCisKK2NsYXNzIFdpZXJkTnVtKGZsb2F0LCBFbnVtKToKKyAgICBpbmYgPSBJTkYKKyAgICBuZWdfaW5mID0gTkVHX0lORgorICAgIG5hbiA9IE5BTgorCitjbGFzcyBUZXN0RW51bToKKworICAgIGRlZiB0ZXN0X2Zsb2F0cyhzZWxmKToKKyAgICAgICAgZm9yIGVudW0gaW4gRmxvYXROdW06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoZW51bSksIHJlcHIoZW51bS52YWx1ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorCisgICAgZGVmIHRlc3Rfd2VpcmRfZmxvYXRzKHNlbGYpOgorICAgICAgICBmb3IgZW51bSwgZXhwZWN0ZWQgaW4gemlwKFdpZXJkTnVtLCAoJ0luZmluaXR5JywgJy1JbmZpbml0eScsICdOYU4nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoZW51bSksIGV4cGVjdGVkKQorICAgICAgICAgICAgaWYgbm90IGlzbmFuKGVudW0pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oZmxvYXQoc2VsZi5kdW1wcyhlbnVtKSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpKSkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgIGZvciBlbnVtIGluIEJpZ051bToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhlbnVtKSwgc3RyKGVudW0udmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisKKyAgICBkZWYgdGVzdF9saXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMobGlzdChCaWdOdW0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoW1NNQUxMLCBCSUcsIEhVR0UsIFJFQUxMWV9IVUdFXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGxpc3QoQmlnTnVtKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoQmlnTnVtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGxpc3QoRmxvYXROdW0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoW0UsIFBJLCBUQVVdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMobGlzdChGbG9hdE51bSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KEZsb2F0TnVtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGxpc3QoV2llcmROdW0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdbSW5maW5pdHksIC1JbmZpbml0eSwgTmFOXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGxpc3QoV2llcmROdW0pKSlbOjJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoV2llcmROdW0pWzoyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KFdpZXJkTnVtKSkpWzJdKSkKKworICAgIGRlZiB0ZXN0X2RpY3Rfa2V5cyhzZWxmKToKKyAgICAgICAgcywgYiwgaCwgciA9IEJpZ051bQorICAgICAgICBlLCBwLCB0ID0gRmxvYXROdW0KKyAgICAgICAgaSwgaiwgbiA9IFdpZXJkTnVtCisgICAgICAgIGQgPSB7CisgICAgICAgICAgICBzOid0aW55JywgYjonbGFyZ2UnLCBoOidsYXJnZXInLCByOidsYXJnZXN0JywKKyAgICAgICAgICAgIGU6IkV1bGVyJ3MgbnVtYmVyIiwgcDoncGknLCB0Oid0YXUnLAorICAgICAgICAgICAgaTonSW5maW5pdHknLCBqOictSW5maW5pdHknLCBuOidOYU4nLAorICAgICAgICAgICAgfQorICAgICAgICBuZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoU01BTEwpXSwgJ3RpbnknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3N0cihCSUcpXSwgJ2xhcmdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoSFVHRSldLCAnbGFyZ2VyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoUkVBTExZX0hVR0UpXSwgJ2xhcmdlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3JlcHIoRSldLCAiRXVsZXIncyBudW1iZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3JlcHIoUEkpXSwgJ3BpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtyZXByKFRBVSldLCAndGF1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnSW5maW5pdHknXSwgJ0luZmluaXR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnLUluZmluaXR5J10sICctSW5maW5pdHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydOYU4nXSwgJ05hTicpCisKKyAgICBkZWYgdGVzdF9kaWN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZCA9IGRpY3QoCisgICAgICAgICAgICAgICAgdGlueT1CaWdOdW0uc21hbGwsCisgICAgICAgICAgICAgICAgbGFyZ2U9QmlnTnVtLmJpZywKKyAgICAgICAgICAgICAgICBsYXJnZXI9QmlnTnVtLmh1Z2UsCisgICAgICAgICAgICAgICAgbGFyZ2VzdD1CaWdOdW0ucmVhbGx5X2h1Z2UsCisgICAgICAgICAgICAgICAgZT1GbG9hdE51bS5lLAorICAgICAgICAgICAgICAgIHBpPUZsb2F0TnVtLnBpLAorICAgICAgICAgICAgICAgIHRhdT1GbG9hdE51bS50YXUsCisgICAgICAgICAgICAgICAgaT1XaWVyZE51bS5pbmYsCisgICAgICAgICAgICAgICAgaj1XaWVyZE51bS5uZWdfaW5mLAorICAgICAgICAgICAgICAgIG49V2llcmROdW0ubmFuLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgbmQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ3RpbnknXSwgU01BTEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2xhcmdlJ10sIEJJRykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnbGFyZ2VyJ10sIEhVR0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2xhcmdlc3QnXSwgUkVBTExZX0hVR0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2UnXSwgRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsncGknXSwgUEkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ3RhdSddLCBUQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2knXSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydqJ10sIE5FR19JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihuZFsnbiddKSkKKworY2xhc3MgVGVzdFB5RW51bShUZXN0RW51bSwgUHlUZXN0KTogcGFzcworY2xhc3MgVGVzdENFbnVtKFRlc3RFbnVtLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5CmluZGV4IDNkZDg3N2EuLjdjYWFmZGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZmFpbC5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gdGVzdC50ZXN0X2pzb24gaW1wb3J0IFB5VGVzdCwgQ1Rlc3QKK2ltcG9ydCByZQogCiAjIDIwMDctMTAtMDUKIEpTT05ET0NTID0gWwpAQCAtMTAwLDYgKzEwMSw5NCBAQAogICAgICAgICAjVGhpcyBpcyBmb3IgcHl0aG9uIGVuY29kZXIKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmR1bXBzLCBkYXRhLCBpbmRlbnQ9VHJ1ZSkKIAorICAgIGRlZiB0ZXN0X3RydW5jYXRlZF9pbnB1dChzZWxmKToKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnJywgJ0V4cGVjdGluZyB2YWx1ZScsIDApLAorICAgICAgICAgICAgKCdbJywgJ0V4cGVjdGluZyB2YWx1ZScsIDEpLAorICAgICAgICAgICAgKCdbNDInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAzKSwKKyAgICAgICAgICAgICgnWzQyLCcsICdFeHBlY3RpbmcgdmFsdWUnLCA0KSwKKyAgICAgICAgICAgICgnWyInLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCdbInNwYW0nLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCdbInNwYW0iJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ1sic3BhbSIsJywgJ0V4cGVjdGluZyB2YWx1ZScsIDgpLAorICAgICAgICAgICAgKCd7JywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxKSwKKyAgICAgICAgICAgICgneyInLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCd7InNwYW0nLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCd7InNwYW0iJywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ3sic3BhbSI6JywgJ0V4cGVjdGluZyB2YWx1ZScsIDgpLAorICAgICAgICAgICAgKCd7InNwYW0iOjQyJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMTApLAorICAgICAgICAgICAgKCd7InNwYW0iOjQyLCcsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMTEpLAorICAgICAgICBdCisgICAgICAgIHRlc3RfY2FzZXMgKz0gWworICAgICAgICAgICAgKCciJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAwKSwKKyAgICAgICAgICAgICgnInNwYW0nLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDApLAorICAgICAgICBdCisgICAgICAgIGZvciBkYXRhLCBtc2csIGlkeCBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgIHInXnswfTogbGluZSAxIGNvbHVtbiB7MX0gXChjaGFyIHsyfVwpJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHJlLmVzY2FwZShtc2cpLCBpZHggKyAxLCBpZHgpLAorICAgICAgICAgICAgICAgIHNlbGYubG9hZHMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF91bmV4cGVjdGVkX2RhdGEoc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJ1ssJywgJ0V4cGVjdGluZyB2YWx1ZScsIDEpLAorICAgICAgICAgICAgKCd7InNwYW0iOlt9JywgJ0V4cGVjdGluZyB2YWx1ZScsIDkpLAorICAgICAgICAgICAgKCdbNDI6JywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMyksCisgICAgICAgICAgICAoJ1s0MiAic3BhbSInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCA0KSwKKyAgICAgICAgICAgICgnWzQyLF0nLCAnRXhwZWN0aW5nIHZhbHVlJywgNCksCisgICAgICAgICAgICAoJ3sic3BhbSI6WzQyfScsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDExKSwKKyAgICAgICAgICAgICgnWyJdJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgnWyJzcGFtIjonLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCA3KSwKKyAgICAgICAgICAgICgnWyJzcGFtIixdJywgJ0V4cGVjdGluZyB2YWx1ZScsIDgpLAorICAgICAgICAgICAgKCd7OicsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ3ssJywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxKSwKKyAgICAgICAgICAgICgnezQyJywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxKSwKKyAgICAgICAgICAgICgnW3tdJywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAyKSwKKyAgICAgICAgICAgICgneyJzcGFtIiwnLCAiRXhwZWN0aW5nICc6JyBkZWxpbWl0ZXIiLCA3KSwKKyAgICAgICAgICAgICgneyJzcGFtIn0nLCAiRXhwZWN0aW5nICc6JyBkZWxpbWl0ZXIiLCA3KSwKKyAgICAgICAgICAgICgnW3sic3BhbSJdJywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgOCksCisgICAgICAgICAgICAoJ3sic3BhbSI6fScsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgnW3sic3BhbSI6XScsICdFeHBlY3RpbmcgdmFsdWUnLCA5KSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0MiAiaGFtIicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDExKSwKKyAgICAgICAgICAgICgnW3sic3BhbSI6NDJdJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMTEpLAorICAgICAgICAgICAgKCd7InNwYW0iOjQyLH0nLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDExKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZGF0YSwgbXNnLCBpZHggaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICByJ157MH06IGxpbmUgMSBjb2x1bW4gezF9IFwoY2hhciB7Mn1cKScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUobXNnKSwgaWR4ICsgMSwgaWR4KSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorCisgICAgZGVmIHRlc3RfZXh0cmFfZGF0YShzZWxmKToKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnW11dJywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgICAgICgne319JywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgICAgICgnW10sW10nLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICAgICAgKCd7fSx7fScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgIF0KKyAgICAgICAgdGVzdF9jYXNlcyArPSBbCisgICAgICAgICAgICAoJzQyLCJzcGFtIicsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJyJzcGFtIiw0MicsICdFeHRyYSBkYXRhJywgNiksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIG1zZywgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideezB9OiBsaW5lIDEgY29sdW1uIHsxfSAtIGxpbmUgMSBjb2x1bW4gezJ9JworICAgICAgICAgICAgICAgIHInIFwoY2hhciB7M30gLSB7NH1cKScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUobXNnKSwgaWR4ICsgMSwgbGVuKGRhdGEpICsgMSwgaWR4LCBsZW4oZGF0YSkpLAorICAgICAgICAgICAgICAgIHNlbGYubG9hZHMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9saW5lY29sKHNlbGYpOgorICAgICAgICB0ZXN0X2Nhc2VzID0gWworICAgICAgICAgICAgKCchJywgMSwgMSwgMCksCisgICAgICAgICAgICAoJyAhJywgMSwgMiwgMSksCisgICAgICAgICAgICAoJ1xuIScsIDIsIDEsIDEpLAorICAgICAgICAgICAgKCdcbiAgXG5cbiAgICAgIScsIDQsIDYsIDEwKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZGF0YSwgbGluZSwgY29sLCBpZHggaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICByJ15FeHBlY3RpbmcgdmFsdWU6IGxpbmUgezB9IGNvbHVtbiB7MX0nCisgICAgICAgICAgICAgICAgcicgXChjaGFyIHsyfVwpJCcuZm9ybWF0KGxpbmUsIGNvbCwgaWR4KSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQogCiBjbGFzcyBUZXN0UHlGYWlsKFRlc3RGYWlsLCBQeVRlc3QpOiBwYXNzCiBjbGFzcyBUZXN0Q0ZhaWwoVGVzdEZhaWwsIENUZXN0KTogcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfaW5kZW50LnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfaW5kZW50LnB5CmluZGV4IGE0ZDRkMjAuLmUwNzg1NmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9pbmRlbnQucHkKQEAgLTMyLDYgKzMyLDggQEAKICAgICAgICAgZDEgPSBzZWxmLmR1bXBzKGgpCiAgICAgICAgIGQyID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9Miwgc29ydF9rZXlzPVRydWUsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpCiAgICAgICAgIGQzID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9J1x0Jywgc29ydF9rZXlzPVRydWUsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpCisgICAgICAgIGQ0ID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9Miwgc29ydF9rZXlzPVRydWUpCisgICAgICAgIGQ1ID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9J1x0Jywgc29ydF9rZXlzPVRydWUpCiAKICAgICAgICAgaDEgPSBzZWxmLmxvYWRzKGQxKQogICAgICAgICBoMiA9IHNlbGYubG9hZHMoZDIpCkBAIC00Miw2ICs0NCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDMsIGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGV4cGVjdC5leHBhbmR0YWJzKDIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQzLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDQsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQ1LCBkMykKIAogICAgIGRlZiB0ZXN0X2luZGVudDAoc2VsZik6CiAgICAgICAgIGggPSB7MzogMX0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZC5weSBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk5ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9rZXl3b3JkLnB5CkBAIC0wLDAgKzEsMTM4IEBACitpbXBvcnQga2V5d29yZAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBmaWxlY21wCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGV4dHdyYXAKKworS0VZV09SRF9GSUxFICAgICAgICAgICAgID0gc3VwcG9ydC5maW5kZmlsZSgna2V5d29yZC5weScpCitHUkFNTUFSX0ZJTEUgICAgICAgICAgICAgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uJywgJy4uJywgJ1B5dGhvbicsICdncmFtaW5pdC5jJykKK1RFU1RfUFlfRklMRSAgICAgICAgICAgICA9ICdrZXl3b3JkX3Rlc3QucHknCitHUkFNTUFSX1RFU1RfRklMRSAgICAgICAgPSAnZ3JhbWluaXRfdGVzdC5jJworUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTID0gJ21pbmltYWxfa2V5d29yZC5weScKK05PTkVYSVNURU5UX0ZJTEUgICAgICAgICA9ICdub3RfaGVyZS50eHQnCisKKworY2xhc3MgVGVzdF9pc2tleXdvcmQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RydWVfaXNfYV9rZXl3b3JkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5d29yZC5pc2tleXdvcmQoJ1RydWUnKSkKKworICAgIGRlZiB0ZXN0X3VwcGVyY2FzZV90cnVlX2lzX25vdF9hX2tleXdvcmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5d29yZC5pc2tleXdvcmQoJ1RSVUUnKSkKKworICAgIGRlZiB0ZXN0X25vbmVfdmFsdWVfaXNfbm90X2Ffa2V5d29yZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrZXl3b3JkLmlza2V5d29yZChOb25lKSkKKworICAgICMgVGhpcyBpcyBwcm9iYWJseSBhbiBhY2NpZGVudCBvZiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgYnV0IHNob3VsZCBiZQorICAgICMgcHJlc2VydmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgIGRlZiB0ZXN0X2NoYW5naW5nX3RoZV9rd2xpc3RfZG9lc19ub3RfYWZmZWN0X2lza2V5d29yZChzZWxmKToKKyAgICAgICAgb2xkbGlzdCA9IGtleXdvcmQua3dsaXN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZXRhdHRyLCBrZXl3b3JkLCAna3dsaXN0Jywgb2xkbGlzdCkKKyAgICAgICAga2V5d29yZC5rd2xpc3QgPSBbJ2l0cycsICdhbGwnLCAnZWdncycsICdiZWFucycsICdhbmQnLCAnYScsICdzbGljZSddCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5d29yZC5pc2tleXdvcmQoJ2VnZ3MnKSkKKworCitjbGFzcyBUZXN0S2V5d29yZEdlbmVyYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoc2VsZiwgc291cmNlX2ZpbGUsIGRlc3RfZmlsZSk6CisgICAgICAgIHdpdGggb3Blbihzb3VyY2VfZmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBsaW5lcyA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgIG5sID0gbGluZXNbMF1bbGVuKGxpbmVzWzBdLnN0cmlwKCkpOl0KKyAgICAgICAgd2l0aCBvcGVuKGRlc3RfZmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKGxpbmVzWzpsaW5lcy5pbmRleChiIiMtLXN0YXJ0IGtleXdvcmRzLS0iICsgbmwpICsgMV0pCisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKGxpbmVzW2xpbmVzLmluZGV4KGIiIy0tZW5kIGtleXdvcmRzLS0iICsgbmwpOl0pCisKKyAgICBkZWYgX2dlbmVyYXRlX2tleXdvcmRzKHNlbGYsIGdyYW1tYXJfZmlsZSwgdGFyZ2V0X2tleXdvcmRfcHlfZmlsZSk6CisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWVdPUkRfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9rZXl3b3JkX3B5X2ZpbGVdLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRlcnIgPSBwcm9jLmNvbW11bmljYXRlKClbMV0KKyAgICAgICAgcmV0dXJuIHByb2MucmV0dXJuY29kZSwgc3RkZXJyCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBvcy5wYXRoLmV4aXN0cyhHUkFNTUFSX0ZJTEUpLAorICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Qgb25seSB3b3JrcyBmcm9tIHNvdXJjZSBidWlsZCBkaXJlY3RvcnknKQorICAgIGRlZiB0ZXN0X3JlYWxfZ3JhbW1hcl9hbmRfa2V5d29yZF9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgYicnKSwgc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMoR1JBTU1BUl9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX1BZX0ZJTEUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpKQorCisgICAgZGVmIHRlc3RfZ3JhbW1hcihzZWxmKToKKyAgICAgICAgc2VsZi5fY29weV9maWxlX3dpdGhvdXRfZ2VuZXJhdGVkX2tleXdvcmRzKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFRFU1RfUFlfRklMRSkKKyAgICAgICAgd2l0aCBvcGVuKEdSQU1NQVJfVEVTVF9GSUxFLCAndycpIGFzIGZwOgorICAgICAgICAgICAgIyBTb21lIG9mIHRoZXNlIGFyZSBwcm9iYWJseSBpbXBsZW1lbnRhdGlvbiBhY2NpZGVudHMuCisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgezIsIDF9LAorICAgICAgICAgICAgICAgICAgICB7MTEsICJlbmNvZGluZ19kZWNsIiwgMCwgMiwgc3RhdGVzXzc5LAorICAgICAgICAgICAgICAgICAgICAgIlwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCIKKyAgICAgICAgICAgICAgICAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJqZWxsbyJ9LAorICAgICAgICAgICAgICAgICAgICB7MzI2LCAwfSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJ0dXJuaXAifSwKKyAgICAgICAgICAgICAgICBcdHsxLCAiVGhpcyBvbmUgaXMgdGFiIGluZGVudGVkIgorICAgICAgICAgICAgICAgICAgICB7Mjc4LCAwfSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJjcmF6eSBidXQgbGVnYWwiCisgICAgICAgICAgICAgICAgImFsc28gbGVnYWwiIHsxLCAiCisgICAgICAgICAgICAgICAgICAgIHsxLCAiY29udGludWUifSwKKyAgICAgICAgICAgICAgICAgICB7MSwgImxlbW9uIn0sCisgICAgICAgICAgICAgICAgICAgICB7MSwgInRvbWF0byJ9LAorICAgICAgICAgICAgICAgIHsxLCAid2lnaWkifSwKKyAgICAgICAgICAgICAgICAgICAgezEsICdubyBnb29kJ30KKyAgICAgICAgICAgICAgICAgICAgezI4MywgMH0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAgInRvbyBtYW55IHNwYWNlcyJ9IiIiKSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBHUkFNTUFSX1RFU1RfRklMRSkKKyAgICAgICAgc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMoR1JBTU1BUl9URVNUX0ZJTEUsIFRFU1RfUFlfRklMRSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAiICAgICAgICAnVGhpcyBvbmUgaXMgdGFiIGluZGVudGVkJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2Fsc28gbGVnYWwnLCIsCisgICAgICAgICAgICAiICAgICAgICAnY29udGludWUnLCIsCisgICAgICAgICAgICAiICAgICAgICAnY3JhenkgYnV0IGxlZ2FsJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2plbGxvJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2xlbW9uJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ3RvbWF0bycsIiwKKyAgICAgICAgICAgICIgICAgICAgICd0dXJuaXAnLCIsCisgICAgICAgICAgICAiICAgICAgICAnd2lnaWknLCIsCisgICAgICAgICAgICBdCisgICAgICAgIHdpdGggb3BlbihURVNUX1BZX0ZJTEUpIGFzIGZwOgorICAgICAgICAgICAgbGluZXMgPSBmcC5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgIHN0YXJ0ID0gbGluZXMuaW5kZXgoIiMtLXN0YXJ0IGtleXdvcmRzLS0iKSArIDEKKyAgICAgICAgZW5kID0gbGluZXMuaW5kZXgoIiMtLWVuZCBrZXl3b3Jkcy0tIikKKyAgICAgICAgYWN0dWFsID0gbGluZXNbc3RhcnQ6ZW5kXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9ncmFtbWFyX3Jlc3VsdHNfaW5fbm9fa2V5d29yZHMoc2VsZik6CisgICAgICAgIHNlbGYuX2NvcHlfZmlsZV93aXRob3V0X2dlbmVyYXRlZF9rZXl3b3JkcyhLRVlXT1JEX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9GSUxFX1dJVEhPVVRfS0VZV09SRFMpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTKQorICAgICAgICBzaHV0aWwuY29weWZpbGUoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCBiJycpLCBzZWxmLl9nZW5lcmF0ZV9rZXl3b3Jkcyhvcy5kZXZudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX1BZX0ZJTEUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoVEVTVF9QWV9GSUxFLCBQWV9GSUxFX1dJVEhPVVRfS0VZV09SRFMpKQorCisgICAgZGVmIHRlc3Rfa2V5d29yZHNfcHlfd2l0aG91dF9tYXJrZXJzX3Byb2R1Y2VzX2Vycm9yKHNlbGYpOgorICAgICAgICByYywgc3RkZXJyID0gc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMob3MuZGV2bnVsbCwgb3MuZGV2bnVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChzdGRlcnIsIGInZG9lcyBub3QgY29udGFpbiBmb3JtYXQgbWFya2VycycpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2dyYW1tYXJfZmlsZV9wcm9kdWNlc19lcnJvcihzZWxmKToKKyAgICAgICAgcmMsIHN0ZGVyciA9IHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKE5PTkVYSVNURU5UX0ZJTEUsIEtFWVdPUkRfRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChzdGRlcnIsIGInKD9tcyknICsgTk9ORVhJU1RFTlRfRklMRS5lbmNvZGUoKSkKKworICAgIGRlZiB0ZXN0X21pc3Npbmdfa2V5d29yZHNfcHlfZmlsZV9wcm9kdWNlc19lcnJvcihzZWxmKToKKyAgICAgICAgcmMsIHN0ZGVyciA9IHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKG9zLmRldm51bGwsIE5PTkVYSVNURU5UX0ZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RkZXJyLCBiJyg/bXMpJyArIE5PTkVYSVNURU5UX0ZJTEUuZW5jb2RlKCkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkgYi9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5CmluZGV4IDZjMmZmMDAuLjdmMzE1ZDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9rZXl3b3Jkb25seWFyZy5weQpAQCAtMTc0LDYgKzE3NCwxOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBfX2EKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCkuZigpLCA0MikKIAorICAgIGRlZiB0ZXN0X2RlZmF1bHRfZXZhbHVhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgMTY5NjcKKyAgICAgICAgYSA9IDQyCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBkZWYgZih2PWEsIHg9YiwgKiwgeT1jLCB6PWQpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyLmV4Y2VwdGlvbiksICJuYW1lICdiJyBpcyBub3QgZGVmaW5lZCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBmID0gbGFtYmRhIHY9YSwgeD1iLCAqLCB5PWMsIHo9ZDogTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIuZXhjZXB0aW9uKSwgIm5hbWUgJ2InIGlzIG5vdCBkZWZpbmVkIikKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KEtleXdvcmRPbmx5QXJnVGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5IGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKaW5kZXggZTVlNjA1OC4uYmFmZGViYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgY2xpZW50LnNldGJsb2NraW5nKEZhbHNlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHNlcnZlclNvY2tldC5nZXRzb2NrbmFtZSgpWzFdKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgI3JhaXNlIEFzc2VydGlvbkVycm9yKCJDb25uZWN0IHNob3VsZCBoYXZlIHJhaXNlZCBFSU5QUk9HUkVTUyIpCkBAIC0xODUsNiArMTg1LDMzIEBACiAgICAgICAgIGIuY2xvc2UoKQogICAgICAgICBrcS5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgb3Blbl9maWxlID0gb3BlbihfX2ZpbGVfXywgInJiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9wZW5fZmlsZS5jbG9zZSkKKyAgICAgICAgZmQgPSBvcGVuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAga3F1ZXVlID0gc2VsZWN0LmtxdWV1ZSgpCisKKyAgICAgICAgIyB0ZXN0IGZpbGVubygpIG1ldGhvZCBhbmQgY2xvc2VkIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoa3F1ZXVlLmZpbGVubygpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa3F1ZXVlLmNsb3NlZCkKKworICAgICAgICAjIHRlc3QgY2xvc2UoKQorICAgICAgICBrcXVldWUuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoa3F1ZXVlLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwga3F1ZXVlLmZpbGVubykKKworICAgICAgICAjIGNsb3NlKCkgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZQorICAgICAgICBrcXVldWUuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9ucyBtdXN0IGZhaWwgd2l0aCBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCAuLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBrcXVldWUuY29udHJvbCwgTm9uZSwgNCkKKworICAgIGRlZiB0ZXN0X2ZkX25vbl9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAga3F1ZXVlID0gc2VsZWN0LmtxdWV1ZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChrcXVldWUuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGtxdWV1ZS5maWxlbm8oKSksIEZhbHNlKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0S1F1ZXVlKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CmluZGV4IDYzZWU2OTcuLjViMjc2ZTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgICAgICMgU2Vla2luZyBpcyBub3QgZW5vdWdoIG9mIGEgdGVzdDogeW91IG11c3Qgd3JpdGUgYW5kIGZsdXNoLCB0b28hCiAgICAgICAgICAgICBmLndyaXRlKGIneCcpCiAgICAgICAgICAgICBmLmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhcmdlZmlsZSBzdXBwb3J0IikKICAgICAgICAgZmluYWxseToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9sb2NhbGUucHkKaW5kZXggNzYzNDdiNy4uYWI5OTBhZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb2NhbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb2NhbGUucHkKQEAgLTM3MSw3ICszNzEsOCBAQAogCiAgICAgZGVmIHRlc3RfbG9jYWxlX2FsaWFzKHNlbGYpOgogICAgICAgICBmb3IgbG9jYWxlbmFtZSwgYWxpYXMgaW4gbG9jYWxlLmxvY2FsZV9hbGlhcy5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5jaGVjayhsb2NhbGVuYW1lLCBhbGlhcykKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGxvY2FsZT0obG9jYWxlbmFtZSwgYWxpYXMpKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrKGxvY2FsZW5hbWUsIGFsaWFzKQogCiAgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJycsICcnKQpAQCAtMzgzLDYgKzM4NCw3IEBACiAgICAgZGVmIHRlc3RfZW5nbGlzaChzZWxmKToKICAgICAgICAgc2VsZi5jaGVjaygnZW4nLCAnZW5fVVMuSVNPODg1OS0xJykKICAgICAgICAgc2VsZi5jaGVjaygnRU4nLCAnZW5fVVMuSVNPODg1OS0xJykKKyAgICAgICAgc2VsZi5jaGVjaygnZW4uaXNvODg1OTEnLCAnZW5fVVMuSVNPODg1OS0xJykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMnLCAnZW5fVVMuSVNPODg1OS0xJykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fdXMnLCAnZW5fVVMuSVNPODg1OS0xJykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fR0InLCAnZW5fR0IuSVNPODg1OS0xJykKQEAgLTM5MSw3ICszOTMsMTAgQEAKICAgICAgICAgc2VsZi5jaGVjaygnZW5fVVM6VVRGLTgnLCAnZW5fVVMuVVRGLTgnKQogICAgICAgICBzZWxmLmNoZWNrKCdlbl9VUy5JU084ODU5LTEnLCAnZW5fVVMuSVNPODg1OS0xJykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMuVVMtQVNDSUknLCAnZW5fVVMuSVNPODg1OS0xJykKKyAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMuODg1OTEnLCAnZW5fVVMuSVNPODg1OS0xJykKKyAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMuODg1OTE1JywgJ2VuX1VTLklTTzg4NTktMTUnKQogICAgICAgICBzZWxmLmNoZWNrKCdlbmdsaXNoJywgJ2VuX0VOLklTTzg4NTktMScpCisgICAgICAgIHNlbGYuY2hlY2soJ2VuZ2xpc2hfdWsuYXNjaWknLCAnZW5fR0IuSVNPODg1OS0xJykKIAogICAgIGRlZiB0ZXN0X2h5cGhlbmF0ZWRfZW5jb2Rpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJ2F6X0FaLmlzbzg4NTk5ZScsICdhel9BWi5JU084ODU5LTlFJykKQEAgLTQxMSwxMCArNDE2LDEyIEBACiAgICAgZGVmIHRlc3RfZXVyb19tb2RpZmllcihzZWxmKToKICAgICAgICAgc2VsZi5jaGVjaygnZGVfREVAZXVybycsICdkZV9ERS5JU084ODU5LTE1JykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMuSVNPODg1OS0xNUBldXJvJywgJ2VuX1VTLklTTzg4NTktMTUnKQorICAgICAgICBzZWxmLmNoZWNrKCdkZV9ERS51dGY4QGV1cm8nLCAnZGVfREUuVVRGLTgnKQogCiAgICAgZGVmIHRlc3RfbGF0aW5fbW9kaWZpZXIoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJ2JlX0JZLlVURi04QGxhdGluJywgJ2JlX0JZLlVURi04QGxhdGluJykKICAgICAgICAgc2VsZi5jaGVjaygnc3JfUlMuVVRGLThAbGF0aW4nLCAnc3JfUlMuVVRGLThAbGF0aW4nKQorICAgICAgICBzZWxmLmNoZWNrKCdzcl9SUy5VVEYtOEBsYXRuJywgJ3NyX1JTLlVURi04QGxhdGluJykKIAogICAgIGRlZiB0ZXN0X3ZhbGVuY2lhX21vZGlmaWVyKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCdjYV9FUy5VVEYtOEB2YWxlbmNpYScsICdjYV9FUy5VVEYtOEB2YWxlbmNpYScpCkBAIC00MzUsNiArNDQyLDM5IEBACiAgICAgICAgIHNlbGYuY2hlY2soJ3NkX0lOJywgJ3NkX0lOLlVURi04JykKICAgICAgICAgc2VsZi5jaGVjaygnc2QnLCAnc2RfSU4uVVRGLTgnKQogCisgICAgZGVmIHRlc3RfZXVjX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5ldWMnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5ldWNqcCcsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2tvX2tyLmV1YycsICdrb19LUi5ldWNLUicpCisgICAgICAgIHNlbGYuY2hlY2soJ2tvX2tyLmV1Y2tyJywgJ2tvX0tSLmV1Y0tSJykKKyAgICAgICAgc2VsZi5jaGVjaygnemhfY24uZXVjJywgJ3poX0NOLmV1Y0NOJykKKyAgICAgICAgc2VsZi5jaGVjaygnemhfdHcuZXVjJywgJ3poX1RXLmV1Y1RXJykKKyAgICAgICAgc2VsZi5jaGVjaygnemhfdHcuZXVjdHcnLCAnemhfVFcuZXVjVFcnKQorCisgICAgZGVmIHRlc3RfamFwYW5lc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ2phJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamEuamlzJywgJ2phX0pQLkpJUzcnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYS5zamlzJywgJ2phX0pQLlNKSVMnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcCcsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmFqZWMnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5ldWMnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5ldWNqcCcsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmlzby0yMDIyLWpwJywgJ2phX0pQLkpJUzcnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5pc28yMDIyanAnLCAnamFfSlAuSklTNycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmppcycsICdqYV9KUC5KSVM3JykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAuamlzNycsICdqYV9KUC5KSVM3JykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAubXNjb2RlJywgJ2phX0pQLlNKSVMnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5wY2snLCAnamFfSlAuU0pJUycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLnNqaXMnLCAnamFfSlAuU0pJUycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLnVqaXMnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC51dGY4JywgJ2phX0pQLlVURi04JykKKyAgICAgICAgc2VsZi5jaGVjaygnamFwYW4nLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYXBhbmVzZScsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phcGFuZXNlLWV1YycsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phcGFuZXNlLmV1YycsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phcGFuZXNlLnNqaXMnLCAnamFfSlAuU0pJUycpCisgICAgICAgIHNlbGYuY2hlY2soJ2pwX2pwJywgJ2phX0pQLmV1Y0pQJykKKwogCiBjbGFzcyBUZXN0TWlzY2VsbGFuZW91cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZ2V0cHJlZmVycmVkZW5jb2Rpbmcoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKaW5kZXggZjM0MTcyYS4uZTcyYjAzNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQpAQCAtMjQsNiArMjQsNyBAQAogaW1wb3J0IGxvZ2dpbmcuY29uZmlnCiAKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBjb25maWdwYXJzZXIKIGltcG9ydCBkYXRldGltZQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IGlvCkBAIC0zOCw2ICszOSw3IEBACiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKGNhcHR1cmVkX3N0ZG91dCwgcnVuX3dpdGhfbG9jYWxlLCBydW5fdW5pdHRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLCByZXF1aXJlc196bGliLCBUZXN0SGFuZGxlciwgTWF0Y2hlcikKIGltcG9ydCB0ZXh0d3JhcApAQCAtNTYsNyArNTgsOSBAQAogICAgIGltcG9ydCBzbXRwZAogICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZSwgcGFyc2VfcXMKICAgICBmcm9tIHNvY2tldHNlcnZlciBpbXBvcnQgKFRocmVhZGluZ1VEUFNlcnZlciwgRGF0YWdyYW1SZXF1ZXN0SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ1RDUFNlcnZlciwgU3RyZWFtUmVxdWVzdEhhbmRsZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIsIFN0cmVhbVJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nVW5peFN0cmVhbVNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ1VuaXhEYXRhZ3JhbVNlcnZlcikKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiB0cnk6CkBAIC03MywxMyArNzcsMTIgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBwYXNzCiAKLQogY2xhc3MgQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgbG9nZ2luZyB0ZXN0cy4iIiIKIAogICAgIGxvZ19mb3JtYXQgPSAiJShuYW1lKXMgLT4gJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHcuXSspIC0+IChbXHddKyk6IChbXGRdKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3Ll0rKSAtPiAoXHcrKTogKFxkKykkIgogICAgIG1lc3NhZ2VfbnVtID0gMAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtOTEsNyArOTQsOCBAQAogICAgICAgICAgICAgc2VsZi5zYXZlZF9oYW5kbGVycyA9IGxvZ2dpbmcuX2hhbmRsZXJzLmNvcHkoKQogICAgICAgICAgICAgc2VsZi5zYXZlZF9oYW5kbGVyX2xpc3QgPSBsb2dnaW5nLl9oYW5kbGVyTGlzdFs6XQogICAgICAgICAgICAgc2VsZi5zYXZlZF9sb2dnZXJzID0gc2F2ZWRfbG9nZ2VycyA9IGxvZ2dlcl9kaWN0LmNvcHkoKQotICAgICAgICAgICAgc2VsZi5zYXZlZF9sZXZlbF9uYW1lcyA9IGxvZ2dpbmcuX2xldmVsTmFtZXMuY29weSgpCisgICAgICAgICAgICBzZWxmLnNhdmVkX25hbWVfdG9fbGV2ZWwgPSBsb2dnaW5nLl9uYW1lVG9MZXZlbC5jb3B5KCkKKyAgICAgICAgICAgIHNlbGYuc2F2ZWRfbGV2ZWxfdG9fbmFtZSA9IGxvZ2dpbmcuX2xldmVsVG9OYW1lLmNvcHkoKQogICAgICAgICAgICAgc2VsZi5sb2dnZXJfc3RhdGVzID0gbG9nZ2VyX3N0YXRlcyA9IHt9CiAgICAgICAgICAgICBmb3IgbmFtZSBpbiBzYXZlZF9sb2dnZXJzOgogICAgICAgICAgICAgICAgIGxvZ2dlcl9zdGF0ZXNbbmFtZV0gPSBnZXRhdHRyKHNhdmVkX2xvZ2dlcnNbbmFtZV0sCkBAIC0xMzMsOCArMTM3LDEwIEBACiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuc2V0TGV2ZWwoc2VsZi5vcmlnaW5hbF9sb2dnaW5nX2xldmVsKQogICAgICAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvZ2dpbmcuX2xldmVsTmFtZXMuY2xlYXIoKQotICAgICAgICAgICAgbG9nZ2luZy5fbGV2ZWxOYW1lcy51cGRhdGUoc2VsZi5zYXZlZF9sZXZlbF9uYW1lcykKKyAgICAgICAgICAgIGxvZ2dpbmcuX2xldmVsVG9OYW1lLmNsZWFyKCkKKyAgICAgICAgICAgIGxvZ2dpbmcuX2xldmVsVG9OYW1lLnVwZGF0ZShzZWxmLnNhdmVkX2xldmVsX3RvX25hbWUpCisgICAgICAgICAgICBsb2dnaW5nLl9uYW1lVG9MZXZlbC5jbGVhcigpCisgICAgICAgICAgICBsb2dnaW5nLl9uYW1lVG9MZXZlbC51cGRhdGUoc2VsZi5zYXZlZF9uYW1lX3RvX2xldmVsKQogICAgICAgICAgICAgbG9nZ2luZy5faGFuZGxlcnMuY2xlYXIoKQogICAgICAgICAgICAgbG9nZ2luZy5faGFuZGxlcnMudXBkYXRlKHNlbGYuc2F2ZWRfaGFuZGxlcnMpCiAgICAgICAgICAgICBsb2dnaW5nLl9oYW5kbGVyTGlzdFs6XSA9IHNlbGYuc2F2ZWRfaGFuZGxlcl9saXN0CkBAIC0xNDgsMTIgKzE1NCwxMiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQogCi0gICAgZGVmIGFzc2VydF9sb2dfbGluZXMoc2VsZiwgZXhwZWN0ZWRfdmFsdWVzLCBzdHJlYW09Tm9uZSk6CisgICAgZGVmIGFzc2VydF9sb2dfbGluZXMoc2VsZiwgZXhwZWN0ZWRfdmFsdWVzLCBzdHJlYW09Tm9uZSwgcGF0PU5vbmUpOgogICAgICAgICAiIiJNYXRjaCB0aGUgY29sbGVjdGVkIGxvZyBsaW5lcyBhZ2FpbnN0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24KICAgICAgICAgc2VsZi5leHBlY3RlZF9sb2dfcGF0LCBhbmQgY29tcGFyZSB0aGUgZXh0cmFjdGVkIGdyb3VwIHZhbHVlcyB0bwogICAgICAgICB0aGUgZXhwZWN0ZWRfdmFsdWVzIGxpc3Qgb2YgdHVwbGVzLiIiIgogICAgICAgICBzdHJlYW0gPSBzdHJlYW0gb3Igc2VsZi5zdHJlYW0KLSAgICAgICAgcGF0ID0gcmUuY29tcGlsZShzZWxmLmV4cGVjdGVkX2xvZ19wYXQpCisgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUocGF0IG9yIHNlbGYuZXhwZWN0ZWRfbG9nX3BhdCkKICAgICAgICAgYWN0dWFsX2xpbmVzID0gc3RyZWFtLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFjdHVhbF9saW5lcyksIGxlbihleHBlY3RlZF92YWx1ZXMpKQogICAgICAgICBmb3IgYWN0dWFsLCBleHBlY3RlZCBpbiB6aXAoYWN0dWFsX2xpbmVzLCBleHBlY3RlZF92YWx1ZXMpOgpAQCAtNDI4LDcgKzQzNCw3IEBACiAgICAgIiIiVGVzdCB2YXJpb3VzIGZpbHRlcmluZyBwb3NzaWJpbGl0aWVzIHdpdGggY3VzdG9tIGxvZ2dpbmcgbGV2ZWxzLiIiIgogCiAgICAgIyBTa2lwIHRoZSBsb2dnZXIgbmFtZSBncm91cC4KLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChbXHddKyk6IChbXGRdKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKQEAgLTU1OCw3ICs1NjQsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5mYWNpbGl0eSwgaC5MT0dfVVNFUikKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaC51bml4c29ja2V0KQogICAgICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjogIyBzeXNsb2dkIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjIHN5c2xvZ2QgbWlnaHQgbm90IGJlIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ0dFVCcsICdQT1NUJywgJ1BVVCcpOgogICAgICAgICAgICAgaWYgbWV0aG9kID09ICdQVVQnOgpAQCAtNTgzLDYgKzU4OSw3IEBACiAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSh0cmllcyk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRpb25fdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDA0ICogcmFuZG9tLnJhbmRpbnQoMCwgNCkpCkBAIC01OTAsNiArNTk3LDkgQEAKICAgICAgICAgZGVsX2NvdW50ID0gNTAwCiAgICAgICAgIGxvZ19jb3VudCA9IDUwMAogCisgICAgICAgIHNlbGYuaGFuZGxlX3RpbWUgPSBOb25lCisgICAgICAgIHNlbGYuZGVsZXRpb25fdGltZSA9IE5vbmUKKwogICAgICAgICBmb3IgZGVsYXkgaW4gKEZhbHNlLCBUcnVlKToKICAgICAgICAgICAgIGZkLCBmbiA9IHRlbXBmaWxlLm1rc3RlbXAoJy5sb2cnLCAndGVzdF9sb2dnaW5nLTMtJykKICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQpAQCAtNjAzLDcgKzYxMywxNCBAQAogICAgICAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKGxvZ19jb3VudCk6CiAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMDUpCiAgICAgICAgICAgICAgICAgICAgIHIgPSBsb2dnaW5nLm1ha2VMb2dSZWNvcmQoeydtc2cnOiAndGVzdGluZycgfSkKLSAgICAgICAgICAgICAgICAgICAgaC5oYW5kbGUocikKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBoLmhhbmRsZShyKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0RlbGV0ZWQgYXQgJXMsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcGVuZWQgYXQgJXMnICUgKHNlbGYuZGVsZXRpb25fdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3RpbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcmVtb3Zlci5qb2luKCkKICAgICAgICAgICAgICAgICBoLmNsb3NlKCkKQEAgLTY0NSw0MSArNjYyLDYgQEAKICMgLS0gaWYgaXQgcHJvdmVzIHRvIGJlIG9mIHdpZGVyIHV0aWxpdHkgdGhhbiBqdXN0IHRlc3RfbG9nZ2luZwogCiBpZiB0aHJlYWRpbmc6Ci0gICAgY2xhc3MgVGVzdFNNVFBDaGFubmVsKHNtdHBkLlNNVFBDaGFubmVsKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoaXMgZGVyaXZlZCBjbGFzcyBoYXMgaGFkIHRvIGJlIGNyZWF0ZWQgYmVjYXVzZSBzbXRwZCBkb2VzIG5vdAotICAgICAgICBzdXBwb3J0IHVzZSBvZiBjdXN0b20gY2hhbm5lbCBtYXBzLCBhbHRob3VnaCB0aGV5IGFyZSBhbGxvd2VkIGJ5Ci0gICAgICAgIGFzeW5jb3JlJ3MgZGVzaWduLiBJc3N1ZSAjMTE5NTkgaGFzIGJlZW4gcmFpc2VkIHRvIGFkZHJlc3MgdGhpcywKLSAgICAgICAgYW5kIGlmIHJlc29sdmVkIHNhdGlzZmFjdG9yaWx5LCBzb21lIG9mIHRoaXMgY29kZSBjYW4gYmUgcmVtb3ZlZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGNvbm4sIGFkZHIsIHNvY2ttYXApOgotICAgICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uLCBzb2NrbWFwKQotICAgICAgICAgICAgc2VsZi5zbXRwX3NlcnZlciA9IHNlcnZlcgotICAgICAgICAgICAgc2VsZi5jb25uID0gY29ubgotICAgICAgICAgICAgc2VsZi5hZGRyID0gYWRkcgotICAgICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBOb25lCi0gICAgICAgICAgICBzZWxmLnJlY2VpdmVkX2xpbmVzID0gW10KLSAgICAgICAgICAgIHNlbGYuc210cF9zdGF0ZSA9IHNlbGYuQ09NTUFORAotICAgICAgICAgICAgc2VsZi5zZWVuX2dyZWV0aW5nID0gJycKLSAgICAgICAgICAgIHNlbGYubWFpbGZyb20gPSBOb25lCi0gICAgICAgICAgICBzZWxmLnJjcHR0b3MgPSBbXQotICAgICAgICAgICAgc2VsZi5yZWNlaXZlZF9kYXRhID0gJycKLSAgICAgICAgICAgIHNlbGYuZnFkbiA9IHNvY2tldC5nZXRmcWRuKCkKLSAgICAgICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYucGVlciA9IGNvbm4uZ2V0cGVlcm5hbWUoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgIyBhIHJhY2UgY29uZGl0aW9uICBtYXkgb2NjdXIgaWYgdGhlIG90aGVyIGVuZCBpcyBjbG9zaW5nCi0gICAgICAgICAgICAgICAgIyBiZWZvcmUgd2UgY2FuIGdldCB0aGUgcGVlcm5hbWUKLSAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSAhPSBlcnJuby5FTk9UQ09OTjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHNlbGYucHVzaCgnMjIwICVzICVzJyAlIChzZWxmLmZxZG4sIHNtdHBkLl9fdmVyc2lvbl9fKSkKLSAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYidcclxuJykKLSAgICAgICAgICAgIHNlbGYuZXh0ZW5kZWRfc210cCA9IEZhbHNlCi0KLQogICAgIGNsYXNzIFRlc3RTTVRQU2VydmVyKHNtdHBkLlNNVFBTZXJ2ZXIpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgdGVzdCBTTVRQIHNlcnZlci4KQEAgLTcwMCwzNyArNjgyLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA6ZnVuYzpgYXN5bmNvcmUubG9vcGAuIFRoaXMgYXZvaWRzIGNoYW5naW5nIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgOm1vZDpgYXN5bmNvcmVgIG1vZHVsZSdzIGdsb2JhbCBzdGF0ZS4KICAgICAgICAgIiIiCi0gICAgICAgIGNoYW5uZWxfY2xhc3MgPSBUZXN0U01UUENoYW5uZWwKIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkciwgaGFuZGxlciwgcG9sbF9pbnRlcnZhbCwgc29ja21hcCk6Ci0gICAgICAgICAgICBzZWxmLl9sb2NhbGFkZHIgPSBhZGRyCi0gICAgICAgICAgICBzZWxmLl9yZW1vdGVhZGRyID0gTm9uZQotICAgICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBOb25lCi0gICAgICAgICAgICBzZWxmLnNvY2ttYXAgPSBzb2NrbWFwCi0gICAgICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIG1hcD1zb2NrbWFwKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZygwKQotICAgICAgICAgICAgICAgIHNlbGYuc2V0X3NvY2tldChzb2NrLCBtYXA9c29ja21hcCkKLSAgICAgICAgICAgICAgICAjIHRyeSB0byByZS11c2UgYSBzZXJ2ZXIgcG9ydCBpZiBwb3NzaWJsZQotICAgICAgICAgICAgICAgIHNlbGYuc2V0X3JldXNlX2FkZHIoKQotICAgICAgICAgICAgICAgIHNlbGYuYmluZChhZGRyKQotICAgICAgICAgICAgICAgIHNlbGYucG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQotICAgICAgICAgICAgICAgIHNlbGYubGlzdGVuKDUpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHNtdHBkLlNNVFBTZXJ2ZXIuX19pbml0X18oc2VsZiwgYWRkciwgTm9uZSwgbWFwPXNvY2ttYXApCisgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCiAgICAgICAgICAgICBzZWxmLl9oYW5kbGVyID0gaGFuZGxlcgogICAgICAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQogICAgICAgICAgICAgc2VsZi5wb2xsX2ludGVydmFsID0gcG9sbF9pbnRlcnZhbAogCi0gICAgICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgY29ubiwgYWRkcik6Ci0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIFJlZGVmaW5lZCBvbmx5IGJlY2F1c2UgdGhlIGJhc2UgY2xhc3MgZG9lcyBub3QgcGFzcyBpbiBhCi0gICAgICAgICAgICBtYXAsIGZvcmNpbmcgdXNlIG9mIGEgZ2xvYmFsIGluIDptb2Q6YGFzeW5jb3JlYC4KLSAgICAgICAgICAgICIiIgotICAgICAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLnNvY2ttYXApCi0KICAgICAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIERlbGVnYXRlcyB0byB0aGUgaGFuZGxlciBwYXNzZWQgaW4gdG8gdGhlIHNlcnZlcidzIGNvbnN0cnVjdG9yLgpAQCAtNzYxLDggKzcyMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmZ1bmM6YGFzeW5jb3JlLmxvb3BgLgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYXN5bmNvcmUubG9vcChwb2xsX2ludGVydmFsLCBtYXA9c2VsZi5zb2NrbWFwKQotICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvcjoKKyAgICAgICAgICAgICAgICBhc3luY29yZS5sb29wKHBvbGxfaW50ZXJ2YWwsIG1hcD1zZWxmLl9tYXApCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjIE9uIEZyZWVCU0QgOCwgY2xvc2luZyB0aGUgc2VydmVyIHJlcGVhdGFibHkKICAgICAgICAgICAgICAgICAjIHJhaXNlcyB0aGlzIGVycm9yLiBXZSBzd2FsbG93IGl0IGlmIHRoZQogICAgICAgICAgICAgICAgICMgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4KQEAgLTg2OSw3ICs4MjgsNyBAQAogICAgICAgICAgICAgICAgIHNvY2ssIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQogICAgICAgICAgICAgICAgIGlmIHNlbGYuc3NsY3R4OgogICAgICAgICAgICAgICAgICAgICBzb2NrID0gc2VsZi5zc2xjdHgud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgIyBzb2NrZXQgZXJyb3JzIGFyZSBzaWxlbmNlZCBieSB0aGUgY2FsbGVyLCBwcmludCB0aGVtIGhlcmUKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJHb3QgYW4gZXJyb3I6XG4lc1xuIiAlIGUpCiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTkwNiw2ICs4NjUsOSBAQAogICAgICAgICAgICAgc3VwZXIoVGVzdFRDUFNlcnZlciwgc2VsZikuc2VydmVyX2JpbmQoKQogICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQogCisgICAgY2xhc3MgVGVzdFVuaXhTdHJlYW1TZXJ2ZXIoVGVzdFRDUFNlcnZlcik6CisgICAgICAgIGFkZHJlc3NfZmFtaWx5ID0gc29ja2V0LkFGX1VOSVgKKwogICAgIGNsYXNzIFRlc3RVRFBTZXJ2ZXIoQ29udHJvbE1peGluLCBUaHJlYWRpbmdVRFBTZXJ2ZXIpOgogICAgICAgICAiIiIKICAgICAgICAgQSBVRFAgc2VydmVyIHdoaWNoIGlzIGNvbnRyb2xsYWJsZSB1c2luZyA6Y2xhc3M6YENvbnRyb2xNaXhpbmAuCkBAIC05MzUsNyArODk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgZGF0YToKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcihEZWxlZ2F0aW5nVURQUmVxdWVzdEhhbmRsZXIsIHNlbGYpLmZpbmlzaCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLl9jbG9zZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTk1Myw2ICs5MTUsOSBAQAogICAgICAgICAgICAgc3VwZXIoVGVzdFVEUFNlcnZlciwgc2VsZikuc2VydmVyX2Nsb3NlKCkKICAgICAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKIAorICAgIGNsYXNzIFRlc3RVbml4RGF0YWdyYW1TZXJ2ZXIoVGVzdFVEUFNlcnZlcik6CisgICAgICAgIGFkZHJlc3NfZmFtaWx5ID0gc29ja2V0LkFGX1VOSVgKKwogIyAtIGVuZCBvZiBzZXJ2ZXJfaGVscGVyIHNlY3Rpb24KIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKQEAgLTk5MSw3ICs5NTYsNyBAQAogICAgICIiIlRlc3RzIGZvciB0aGUgTWVtb3J5SGFuZGxlci4iIiIKIAogICAgICMgRG8gbm90IGJvdGhlciB3aXRoIGEgbG9nZ2VyIG5hbWUgZ3JvdXAuCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCkBAIC0xMDQ0LDcgKzEwMDksNyBAQAogCiAgICAgIiIiUmVhZGluZyBsb2dnaW5nIGNvbmZpZyBmcm9tIGEgLmluaS1zdHlsZSBjb25maWcgZmlsZS4iIiIKIAotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3XSspIFwrXCsgKFtcd10rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihcdyspIFwrXCsgKFx3KykkIgogCiAgICAgIyBjb25maWcwIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KICAgICBjb25maWcwID0gIiIiCkBAIC0xMjkyLDYgKzEyNTcsMjQgQEAKICAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKIAorICAgIGRlZiB0ZXN0X2NvbmZpZzBfdXNpbmdfY3Bfb2soc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIGZpbGUgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIGZpbGUgPSBpby5TdHJpbmdJTyh0ZXh0d3JhcC5kZWRlbnQoc2VsZi5jb25maWcwKSkKKyAgICAgICAgICAgIGNwID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgICAgICBjcC5yZWFkX2ZpbGUoZmlsZSkKKyAgICAgICAgICAgIGxvZ2dpbmcuY29uZmlnLmZpbGVDb25maWcoY3ApCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICAjIFdvbid0IG91dHB1dCBhbnl0aGluZworICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgICMgT3V0cHV0cyBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKICAgICBkZWYgdGVzdF9jb25maWcxX29rKHNlbGYsIGNvbmZpZz1jb25maWcxKToKICAgICAgICAgIyBBIGNvbmZpZyBmaWxlIGRlZmluaW5nIGEgc3ViLXBhcnNlciBhcyB3ZWxsLgogICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKQEAgLTEzODEsNyArMTM2NCw3IEBACiAKICAgICBkZWYgdGVzdF9sb2dnZXJfZGlzYWJsaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmRpc2FibGVfdGVzdCkKLSAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdzb21lX3ByaXN0aW5lX2xvZ2dlcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9nZ2VyLmRpc2FibGVkKQogICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmRpc2FibGVfdGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ2dlci5kaXNhYmxlZCkKQEAgLTEzOTQsMTcgKzEzNzcsMjMgQEAKIAogICAgICIiIlRlc3QgZm9yIFNvY2tldEhhbmRsZXIgb2JqZWN0cy4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFRDUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBUQ1Agc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBTb2NrZXRIYW5kbGVyCiAgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgYWRkciA9ICgnbG9jYWxob3N0JywgMCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBUZXN0VENQU2VydmVyKGFkZHIsIHNlbGYuaGFuZGxlX3NvY2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDEpCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gc2VsZi5zZXJ2ZXJfY2xhc3Moc2VsZi5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3NvY2tldCwgMC4wMSkKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAgICAgICAgc2VydmVyLnJlYWR5LndhaXQoKQotICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlcignbG9jYWxob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBvcnQpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscygnbG9jYWxob3N0Jywgc2VydmVyLnBvcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGhjbHMoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCBOb25lKQogICAgICAgICBzZWxmLmxvZ19vdXRwdXQgPSAnJwogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXSkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuc29ja19oZGxyKQpAQCAtMTQ0NCwzNSArMTQzMyw2OSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9nX291dHB1dCwgInNwYW1cbmVnZ3NcbiIpCiAKICAgICBkZWYgdGVzdF9ub3NlcnZlcihzZWxmKToKKyAgICAgICAgIyBBdm9pZCB0aW1pbmctcmVsYXRlZCBmYWlsdXJlcyBkdWUgdG8gU29ja2V0SGFuZGxlcidzIG93biBoYXJkLXdpcmVkCisgICAgICAgICMgb25lLXNlY29uZCB0aW1lb3V0IG9uIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigpIChpc3N1ZSAjMTYyNjQpLgorICAgICAgICBzZWxmLnNvY2tfaGRsci5yZXRyeVN0YXJ0ID0gMi41CiAgICAgICAgICMgS2lsbCB0aGUgc2VydmVyCiAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoMi4wKQotICAgICAgICAjVGhlIGxvZ2dpbmcgY2FsbCBzaG91bGQgdHJ5IHRvIGNvbm5lY3QsIHdoaWNoIHNob3VsZCBmYWlsCisgICAgICAgICMgVGhlIGxvZ2dpbmcgY2FsbCBzaG91bGQgdHJ5IHRvIGNvbm5lY3QsIHdoaWNoIHNob3VsZCBmYWlsCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRGVsaWJlcmF0ZSBtaXN0YWtlJykKICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKICAgICAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuZXhjZXB0aW9uKCdOZXZlciBzZW50JykKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5lcnJvcignTmV2ZXIgc2VudCwgZWl0aGVyJykKICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSA+IG5vdykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSwgbm93KQogICAgICAgICB0aW1lLnNsZWVwKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSAtIG5vdyArIDAuMDAxKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmVycm9yKCdOb3IgdGhpcycpCiAKK2RlZiBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpOgorICAgIGZkLCBmbiA9IHRlbXBmaWxlLm1rc3RlbXAocHJlZml4PSd0ZXN0X2xvZ2dpbmdfJywgc3VmZml4PScuc29jaycpCisgICAgb3MuY2xvc2UoZmQpCisgICAgIyBqdXN0IG5lZWQgYSBuYW1lIC0gZmlsZSBjYW4ndCBiZSBwcmVzZW50LCBvciB3ZSdsbCBnZXQgYW4KKyAgICAjICdhZGRyZXNzIGFscmVhZHkgaW4gdXNlJyBlcnJvci4KKyAgICBvcy5yZW1vdmUoZm4pCisgICAgcmV0dXJuIGZuCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBVbml4U29ja2V0SGFuZGxlclRlc3QoU29ja2V0SGFuZGxlclRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgU29ja2V0SGFuZGxlciB3aXRoIHVuaXggc29ja2V0cy4iIiIKKworICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVuaXhTdHJlYW1TZXJ2ZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgYmFzZSBjbGFzcworICAgICAgICBzZWxmLmFkZHJlc3MgPSBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpCisgICAgICAgIFNvY2tldEhhbmRsZXJUZXN0LnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIFNvY2tldEhhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBEYXRhZ3JhbUhhbmRsZXJUZXN0KEJhc2VUZXN0KToKIAogICAgICIiIlRlc3QgZm9yIERhdGFncmFtSGFuZGxlci4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVEUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBVRFAgc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBEYXRhZ3JhbUhhbmRsZXIKICAgICAgICAgcG9pbnRpbmcgdG8gdGhhdCBzZXJ2ZXIncyBhZGRyZXNzIGFuZCBwb3J0LiIiIgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQotICAgICAgICBhZGRyID0gKCdsb2NhbGhvc3QnLCAwKQotICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IFRlc3RVRFBTZXJ2ZXIoYWRkciwgc2VsZi5oYW5kbGVfZGF0YWdyYW0sIDAuMDEpCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gc2VsZi5zZXJ2ZXJfY2xhc3Moc2VsZi5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGFncmFtLCAwLjAxKQogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQogICAgICAgICBzZXJ2ZXIucmVhZHkud2FpdCgpCi0gICAgICAgIHNlbGYuc29ja19oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIoJ2xvY2FsaG9zdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBvcnQpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLkRhdGFncmFtSGFuZGxlcgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgdHVwbGUpOgorICAgICAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBoY2xzKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscyhzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIE5vbmUpCiAgICAgICAgIHNlbGYubG9nX291dHB1dCA9ICcnCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5zb2NrX2hkbHIpCkBAIC0xNTA3LDIxICsxNTMwLDQ0IEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFVuaXhEYXRhZ3JhbUhhbmRsZXJUZXN0KERhdGFncmFtSGFuZGxlclRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgRGF0YWdyYW1IYW5kbGVyIHVzaW5nIFVuaXggc29ja2V0cy4iIiIKKworICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVuaXhEYXRhZ3JhbVNlcnZlcgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIG92ZXJyaWRlIHRoZSBkZWZpbml0aW9uIGluIHRoZSBiYXNlIGNsYXNzCisgICAgICAgIHNlbGYuYWRkcmVzcyA9IF9nZXRfdGVtcF9kb21haW5fc29ja2V0KCkKKyAgICAgICAgRGF0YWdyYW1IYW5kbGVyVGVzdC5zZXRVcChzZWxmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBEYXRhZ3JhbUhhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBTeXNMb2dIYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAKICAgICAiIiJUZXN0IGZvciBTeXNMb2dIYW5kbGVyIHVzaW5nIFVEUC4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVEUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBVRFAgc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBTeXNMb2dIYW5kbGVyCiAgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgYWRkciA9ICgnbG9jYWxob3N0JywgMCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBUZXN0VURQU2VydmVyKGFkZHIsIHNlbGYuaGFuZGxlX2RhdGFncmFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wMSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBzZWxmLnNlcnZlcl9jbGFzcyhzZWxmLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YWdyYW0sIDAuMDEpCiAgICAgICAgIHNlcnZlci5zdGFydCgpCiAgICAgICAgIHNlcnZlci5yZWFkeS53YWl0KCkKLSAgICAgICAgc2VsZi5zbF9oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyKCgnbG9jYWxob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucG9ydCkpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIHNlbGYuc2xfaGRsciA9IGhjbHMoKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNsX2hkbHIgPSBoY2xzKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcykKICAgICAgICAgc2VsZi5sb2dfb3V0cHV0ID0gJycKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0pCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLnNsX2hkbHIpCkBAIC0xNTU5LDYgKzE2MDUsMjMgQEAKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgVW5peFN5c0xvZ0hhbmRsZXJUZXN0KFN5c0xvZ0hhbmRsZXJUZXN0KToKKworICAgICIiIlRlc3QgZm9yIFN5c0xvZ0hhbmRsZXIgd2l0aCBVbml4IHNvY2tldHMuIiIiCisKKyAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVbml4RGF0YWdyYW1TZXJ2ZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgYmFzZSBjbGFzcworICAgICAgICBzZWxmLmFkZHJlc3MgPSBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpCisgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBIVFRQSGFuZGxlclRlc3QoQmFzZVRlc3QpOgogICAgICIiIlRlc3QgZm9yIEhUVFBIYW5kbGVyLiIiIgogCkBAIC0xNzc5LDcgKzE4NDIsNyBAQAogICAgICAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaCkKICAgICAgICAgICAgIHMgPSBzdHJlYW0uZ2V0dmFsdWUoKQogICAgICAgICAgICAgaC5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5maW5kKCJVc2VyV2FybmluZzogSSdtIHdhcm5pbmcgeW91Li4uXG4iKSA+IDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocy5maW5kKCJVc2VyV2FybmluZzogSSdtIHdhcm5pbmcgeW91Li4uXG4iKSwgMCkKIAogICAgICAgICAgICAgI1NlZSBpZiBhbiBleHBsaWNpdCBmaWxlIHVzZXMgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBhX2ZpbGUgPSBpby5TdHJpbmdJTygpCkBAIC0xODE3LDcgKzE4ODAsNyBAQAogCiAgICAgIiIiUmVhZGluZyBsb2dnaW5nIGNvbmZpZyBmcm9tIGEgZGljdGlvbmFyeS4iIiIKIAotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3XSspIFwrXCsgKFtcd10rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihcdyspIFwrXCsgKFx3KykkIgogCiAgICAgIyBjb25maWcwIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KICAgICBjb25maWcwID0gewpAQCAtMjM4OSw2ICsyNDUyLDMyIEBACiAgICAgICAgIH0sCiAgICAgfQogCisgICAgIyBBcyBjb25maWcwLCBidXQgd2l0aCBwcm9wZXJ0aWVzCisgICAgY29uZmlnMTQgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgICAgICcuJzogeworICAgICAgICAgICAgICAgICAgICAnZm9vJzogJ2JhcicsCisgICAgICAgICAgICAgICAgICAgICd0ZXJtaW5hdG9yJzogJyFcbicsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgIH0sCisgICAgfQorCiAgICAgb3V0X29mX29yZGVyID0gewogICAgICAgICAidmVyc2lvbiI6IDEsCiAgICAgICAgICJmb3JtYXR0ZXJzIjogewpAQCAtMjY1NiwxMSArMjc0NSwyMCBAQAogICAgIGRlZiB0ZXN0X2NvbmZpZzEzX2ZhaWx1cmUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMTMpCiAKKyAgICBkZWYgdGVzdF9jb25maWcxNF9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzE0KQorICAgICAgICAgICAgaCA9IGxvZ2dpbmcuX2hhbmRsZXJzWydoYW5kMSddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZm9vLCAnYmFyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC50ZXJtaW5hdG9yLCAnIVxuJykKKyAgICAgICAgICAgIGxvZ2dpbmcud2FybmluZygnRXhjbGFtYXRpb24nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dHB1dC5nZXR2YWx1ZSgpLmVuZHN3aXRoKCdFeGNsYW1hdGlvbiFcbicpKQorCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnbGlzdGVuKCkgbmVlZHMgdGhyZWFkaW5nIHRvIHdvcmsnKQotICAgIGRlZiBzZXR1cF92aWFfbGlzdGVuZXIoc2VsZiwgdGV4dCk6CisgICAgZGVmIHNldHVwX3ZpYV9saXN0ZW5lcihzZWxmLCB0ZXh0LCB2ZXJpZnk9Tm9uZSk6CiAgICAgICAgIHRleHQgPSB0ZXh0LmVuY29kZSgidXRmLTgiKQogICAgICAgICAjIEFzayBmb3IgYSByYW5kb21seSBhc3NpZ25lZCBwb3J0IChieSB1c2luZyBwb3J0IDApCi0gICAgICAgIHQgPSBsb2dnaW5nLmNvbmZpZy5saXN0ZW4oMCkKKyAgICAgICAgdCA9IGxvZ2dpbmcuY29uZmlnLmxpc3RlbigwLCB2ZXJpZnkpCiAgICAgICAgIHQuc3RhcnQoKQogICAgICAgICB0LnJlYWR5LndhaXQoKQogICAgICAgICAjIE5vdyBnZXQgdGhlIHBvcnQgYWxsb2NhdGVkCkBAIC0yNzIwLDYgKzI4MTgsNjkgQEAKICAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RfbGlzdGVuX3ZlcmlmeShzZWxmKToKKworICAgICAgICBkZWYgdmVyaWZ5X2ZhaWwoc3R1ZmYpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBkZWYgdmVyaWZ5X3JldmVyc2Uoc3R1ZmYpOgorICAgICAgICAgICAgcmV0dXJuIHN0dWZmWzo6LTFdCisKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgIHRvX3NlbmQgPSB0ZXh0d3JhcC5kZWRlbnQoQ29uZmlnRmlsZVRlc3QuY29uZmlnMSkKKyAgICAgICAgIyBGaXJzdCwgc3BlY2lmeSBhIHZlcmlmaWNhdGlvbiBmdW5jdGlvbiB0aGF0IHdpbGwgZmFpbC4KKyAgICAgICAgIyBXZSBleHBlY3QgdG8gc2VlIG5vIG91dHB1dCwgc2luY2Ugb3VyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgIyBuZXZlciB0b29rIGVmZmVjdC4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcih0b19zZW5kLCB2ZXJpZnlfZmFpbCkKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaGFzIHRoZSBzdHVmZiB3ZSBsb2dnZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgIF0sIHBhdD1yIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIpCisKKyAgICAgICAgIyBOb3csIHBlcmZvcm0gbm8gdmVyaWZpY2F0aW9uLiBPdXIgY29uZmlndXJhdGlvbgorICAgICAgICAjIHNob3VsZCB0YWtlIGVmZmVjdC4KKworICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRvX3NlbmQpICAgICMgbm8gdmVyaWZ5IGNhbGxhYmxlIHNwZWNpZmllZAorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMycpLAorICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBzdGlsbCBoYXMgdGhlIHN0dWZmIHdlIGxvZ2dlZCBiZWZvcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgIF0sIHBhdD1yIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIpCisKKyAgICAgICAgIyBOb3csIHBlcmZvcm0gdmVyaWZpY2F0aW9uIHdoaWNoIHRyYW5zZm9ybXMgdGhlIGJ5dGVzLgorCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIodG9fc2VuZFs6Oi0xXSwgdmVyaWZ5X3JldmVyc2UpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICc1JyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzYnKSwKKyAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IHN0aWxsIGhhcyB0aGUgc3R1ZmYgd2UgbG9nZ2VkIGJlZm9yZS4KKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgXSwgcGF0PXIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIikKKwogICAgIGRlZiB0ZXN0X291dF9vZl9vcmRlcihzZWxmKToKICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5vdXRfb2Zfb3JkZXIpCiAgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLmdldExvZ2dlcignbXltb2R1bGUnKS5oYW5kbGVyc1swXQpAQCAtMjc3OSwxNCArMjk0MCwxNCBAQAogICAgICAgICBsMiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZWYuZ2hpJykKICAgICAgICAgYzEgPSByLmdldENoaWxkKCd4eXonKQogICAgICAgICBjMiA9IHIuZ2V0Q2hpbGQoJ3V2dy54eXonKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzEgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ3h5eicpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ3V2dy54eXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMSwgbG9nZ2luZy5nZXRMb2dnZXIoJ3h5eicpKQorICAgICAgICBzZWxmLmFzc2VydElzKGMyLCBsb2dnaW5nLmdldExvZ2dlcigndXZ3Lnh5eicpKQogICAgICAgICBjMSA9IGwxLmdldENoaWxkKCdkZWYnKQogICAgICAgICBjMiA9IGMxLmdldENoaWxkKCdnaGknKQogICAgICAgICBjMyA9IGwxLmdldENoaWxkKCdkZWYuZ2hpJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMxIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZi5naGknKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGMzKQorICAgICAgICBzZWxmLmFzc2VydElzKGMxLCBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZicpKQorICAgICAgICBzZWxmLmFzc2VydElzKGMyLCBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZi5naGknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMiwgYzMpCiAKIAogY2xhc3MgRGVyaXZlZExvZ1JlY29yZChsb2dnaW5nLkxvZ1JlY29yZCk6CkBAIC0yODI5LDcgKzI5OTAsNyBAQAogCiBjbGFzcyBRdWV1ZUhhbmRsZXJUZXN0KEJhc2VUZXN0KToKICAgICAjIERvIG5vdCBib3RoZXIgd2l0aCBhIGxvZ2dlciBuYW1lIGdyb3VwLgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQpAQCAtMzEyMywxMyArMzI4NCwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcwIC0gcmVsZWFzZScsIHNlbGYuY2FsbGVkWy0xXSkKIAogICAgIGRlZiB0ZXN0X3dpdGhfaW9lcnJvcl9pbl9hY3F1aXJlKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2FjcXVpcmUnLCBJT0Vycm9yKQorICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2FjcXVpcmUnLCBPU0Vycm9yKQogCiAgICAgZGVmIHRlc3Rfd2l0aF9pb2Vycm9yX2luX2ZsdXNoKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2ZsdXNoJywgSU9FcnJvcikKKyAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdmbHVzaCcsIE9TRXJyb3IpCiAKICAgICBkZWYgdGVzdF93aXRoX2lvZXJyb3JfaW5fY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnY2xvc2UnLCBJT0Vycm9yKQorICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2Nsb3NlJywgT1NFcnJvcikKIAogICAgIGRlZiB0ZXN0X3dpdGhfdmFsdWVlcnJvcl9pbl9hY3F1aXJlKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2FjcXVpcmUnLCBWYWx1ZUVycm9yKQpAQCAtMzIzNSw2ICszMzk2LDI1IEBACiAgICAgICAgIGxvZ2dpbmcuc2V0TG9nZ2VyQ2xhc3MobG9nZ2luZy5Mb2dnZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2luZy5nZXRMb2dnZXJDbGFzcygpLCBsb2dnaW5nLkxvZ2dlcikKIAorICAgIGRlZiB0ZXN0X2xvZ2dpbmdfYXRfc2h1dGRvd24oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIwMDM3CisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IGxvZ2dpbmcKKworICAgICAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic29tZSBlcnJvciIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigiZXhjZXB0aW9uIGluIF9fZGVsX18iKQorCisgICAgICAgICAgICBhID0gQSgpIiIiCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKyAgICAgICAgZXJyID0gZXJyLmRlY29kZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImV4Y2VwdGlvbiBpbiBfX2RlbF9fIiwgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJWYWx1ZUVycm9yOiBzb21lIGVycm9yIiwgZXJyKQorCisKIGNsYXNzIExvZ1JlY29yZFRlc3QoQmFzZVRlc3QpOgogICAgIGRlZiB0ZXN0X3N0cl9yZXAoc2VsZik6CiAgICAgICAgIHIgPSBsb2dnaW5nLm1ha2VMb2dSZWNvcmQoe30pCkBAIC0zMzUyLDYgKzM1MzIsMTIgQEAKICAgICAgICAgICAgICAgICAiRVJST1I6cm9vdDpMb2cgYW4gZXJyb3IiKQogCiAgICAgZGVmIHRlc3RfZmlsZW5hbWUoc2VsZik6CisKKyAgICAgICAgZGVmIGNsZWFudXAoaDEsIGgyLCBmbik6CisgICAgICAgICAgICBoMS5jbG9zZSgpCisgICAgICAgICAgICBoMi5jbG9zZSgpCisgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisKICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0ndGVzdC5sb2cnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvZ2dpbmcucm9vdC5oYW5kbGVycyksIDEpCkBAIC0zMzU5LDE3ICszNTQ1LDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoYW5kbGVyLCBsb2dnaW5nLkZpbGVIYW5kbGVyKQogCiAgICAgICAgIGV4cGVjdGVkID0gbG9nZ2luZy5GaWxlSGFuZGxlcigndGVzdC5sb2cnLCAnYScpCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChleHBlY3RlZC5jbG9zZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLnN0cmVhbS5tb2RlLCBleHBlY3RlZC5zdHJlYW0ubW9kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLnN0cmVhbS5uYW1lLCBleHBlY3RlZC5zdHJlYW0ubmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXAsIGhhbmRsZXIsIGV4cGVjdGVkLCAndGVzdC5sb2cnKQogCiAgICAgZGVmIHRlc3RfZmlsZW1vZGUoc2VsZik6CisKKyAgICAgICAgZGVmIGNsZWFudXAoaDEsIGgyLCBmbik6CisgICAgICAgICAgICBoMS5jbG9zZSgpCisgICAgICAgICAgICBoMi5jbG9zZSgpCisgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisKICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0ndGVzdC5sb2cnLCBmaWxlbW9kZT0nd2InKQogCiAgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLnJvb3QuaGFuZGxlcnNbMF0KICAgICAgICAgZXhwZWN0ZWQgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKCd0ZXN0LmxvZycsICd3YicpCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChleHBlY3RlZC5jbG9zZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLnN0cmVhbS5tb2RlLCBleHBlY3RlZC5zdHJlYW0ubW9kZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXAsIGhhbmRsZXIsIGV4cGVjdGVkLCAndGVzdC5sb2cnKQogCiAgICAgZGVmIHRlc3Rfc3RyZWFtKHNlbGYpOgogICAgICAgICBzdHJlYW0gPSBpby5TdHJpbmdJTygpCkBAIC0zODI1LDYgKzQwMTcsNjMgQEAKICAgICAgICAgYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgc2VsZi5mbiwgJ1c3JywgZGVsYXk9VHJ1ZSkKIAorICAgIGRlZiB0ZXN0X2NvbXB1dGVfcm9sbG92ZXJfZGFpbHlfYXR0aW1lKHNlbGYpOgorICAgICAgICBjdXJyZW50VGltZSA9IDAKKyAgICAgICAgYXRUaW1lID0gZGF0ZXRpbWUudGltZSgxMiwgMCwgMCkKKyAgICAgICAgcmggPSBsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcigKKyAgICAgICAgICAgIHNlbGYuZm4sIHdoZW49J01JRE5JR0hUJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgdXRjPVRydWUsCisgICAgICAgICAgICBhdFRpbWU9YXRUaW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhY3R1YWwgPSByaC5jb21wdXRlUm9sbG92ZXIoY3VycmVudFRpbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgY3VycmVudFRpbWUgKyAxMiAqIDYwICogNjApCisKKyAgICAgICAgICAgIGFjdHVhbCA9IHJoLmNvbXB1dGVSb2xsb3ZlcihjdXJyZW50VGltZSArIDEzICogNjAgKiA2MCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBjdXJyZW50VGltZSArIDM2ICogNjAgKiA2MCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJoLmNsb3NlKCkKKworICAgICNAdW5pdHRlc3Quc2tpcElmKFRydWUsICdUZW1wb3JhcmlseSBza2lwcGVkIHdoaWxlIGZhaWx1cmVzIGludmVzdGlnYXRlZC4nKQorICAgIGRlZiB0ZXN0X2NvbXB1dGVfcm9sbG92ZXJfd2Vla2x5X2F0dGltZShzZWxmKToKKyAgICAgICAgY3VycmVudFRpbWUgPSBpbnQodGltZS50aW1lKCkpCisgICAgICAgIHRvZGF5ID0gY3VycmVudFRpbWUgLSBjdXJyZW50VGltZSAlIDg2NDAwCisKKyAgICAgICAgYXRUaW1lID0gZGF0ZXRpbWUudGltZSgxMiwgMCwgMCkKKworICAgICAgICB3ZGF5ID0gdGltZS5nbXRpbWUodG9kYXkpLnRtX3dkYXkKKyAgICAgICAgZm9yIGRheSBpbiByYW5nZSg3KToKKyAgICAgICAgICAgIHJoID0gbG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIoCisgICAgICAgICAgICAgICAgc2VsZi5mbiwgd2hlbj0nVyVkJyAlIGRheSwgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgdXRjPVRydWUsCisgICAgICAgICAgICAgICAgYXRUaW1lPWF0VGltZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiB3ZGF5ID4gZGF5OgorICAgICAgICAgICAgICAgICAgICAjIFRoZSByb2xsb3ZlciBkYXkgaGFzIGFscmVhZHkgcGFzc2VkIHRoaXMgd2Vlaywgc28gd2UKKyAgICAgICAgICAgICAgICAgICAgIyBnbyBvdmVyIGludG8gbmV4dCB3ZWVrCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gKDcgLSB3ZGF5ICsgZGF5KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gKGRheSAtIHdkYXkpCisgICAgICAgICAgICAgICAgIyBBdCB0aGlzIHBvaW50IGV4cGVjdGVkIGlzIGluIGRheXMgZnJvbSBub3csIGNvbnZlcnQgdG8gc2Vjb25kcworICAgICAgICAgICAgICAgIGV4cGVjdGVkICo9IDI0ICogNjAgKiA2MAorICAgICAgICAgICAgICAgICMgQWRkIGluIHRoZSByb2xsb3ZlciB0aW1lCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKz0gMTIgKiA2MCAqIDYwCisgICAgICAgICAgICAgICAgIyBBZGQgaW4gYWRqdXN0bWVudCBmb3IgdG9kYXkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCArPSB0b2RheQorICAgICAgICAgICAgICAgIGFjdHVhbCA9IHJoLmNvbXB1dGVSb2xsb3Zlcih0b2RheSkKKyAgICAgICAgICAgICAgICBpZiBhY3R1YWwgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdmYWlsZWQgaW4gdGltZXpvbmU6ICVkJyAlIHRpbWUudGltZXpvbmUpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCdsb2NhbCB2YXJzOiAlcycgJSBsb2NhbHMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgaWYgZGF5ID09IHdkYXk6CisgICAgICAgICAgICAgICAgICAgICMgZ29lcyBpbnRvIGZvbGxvd2luZyB3ZWVrCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IDcgKiAyNCAqIDYwICogNjAKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSByaC5jb21wdXRlUm9sbG92ZXIodG9kYXkgKyAxMyAqIDYwICogNjApCisgICAgICAgICAgICAgICAgaWYgYWN0dWFsICE9IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnZmFpbGVkIGluIHRpbWV6b25lOiAlZCcgJSB0aW1lLnRpbWV6b25lKQorICAgICAgICAgICAgICAgICAgICBwcmludCgnbG9jYWwgdmFyczogJXMnICUgbG9jYWxzKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICByaC5jbG9zZSgpCisKKwogZGVmIHNlY3MoKiprdyk6CiAgICAgcmV0dXJuIGRhdGV0aW1lLnRpbWVkZWx0YSgqKmt3KSAvLyBkYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz0xKQogCkBAIC0zODgzLDcgKzQxMzIsNyBAQAogICAgICAgICBoLmhhbmRsZShyKQogICAgICAgICBoLmNsb3NlKCkKICAgICAgICAgIyBOb3cgc2VlIGlmIHRoZSBldmVudCBpcyByZWNvcmRlZAotICAgICAgICBzZWxmLmFzc2VydFRydWUobnVtX3JlY3MgPCB3aW4zMmV2dGxvZy5HZXROdW1iZXJPZkV2ZW50TG9nUmVjb3JkcyhlbGgpKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobnVtX3JlY3MsIHdpbjMyZXZ0bG9nLkdldE51bWJlck9mRXZlbnRMb2dSZWNvcmRzKGVsaCkpCiAgICAgICAgIGZsYWdzID0gd2luMzJldnRsb2cuRVZFTlRMT0dfQkFDS1dBUkRTX1JFQUQgfCBcCiAgICAgICAgICAgICAgICAgd2luMzJldnRsb2cuRVZFTlRMT0dfU0VRVUVOVElBTF9SRUFECiAgICAgICAgIGZvdW5kID0gRmFsc2UKQEAgLTM5MTYsNyArNDE2NSw4IEBACiAgICAgICAgICAgICAgICAgIFNNVFBIYW5kbGVyVGVzdCwgRmlsZUhhbmRsZXJUZXN0LCBSb3RhdGluZ0ZpbGVIYW5kbGVyVGVzdCwKICAgICAgICAgICAgICAgICAgTGFzdFJlc29ydFRlc3QsIExvZ1JlY29yZFRlc3QsIEV4Y2VwdGlvblRlc3QsCiAgICAgICAgICAgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LCBIVFRQSGFuZGxlclRlc3QsIE5URXZlbnRMb2dIYW5kbGVyVGVzdCwKLSAgICAgICAgICAgICAgICAgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyVGVzdAorICAgICAgICAgICAgICAgICBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0LCBVbml4U29ja2V0SGFuZGxlclRlc3QsCisgICAgICAgICAgICAgICAgIFVuaXhEYXRhZ3JhbUhhbmRsZXJUZXN0LCBVbml4U3lzTG9nSGFuZGxlclRlc3QKICAgICAgICAgICAgICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvbmcucHkgYi9MaWIvdGVzdC90ZXN0X2xvbmcucHkKaW5kZXggM2Y5YzFlMi4uMTMxNTJlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb25nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKDI1NikudG9fYnl0ZXMsIDEsICdiaWcnLCBzaWduZWQ9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKDI1NikudG9fYnl0ZXMsIDEsICdsaXR0bGUnLCBzaWduZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgyNTYpLnRvX2J5dGVzLCAxLCAnbGl0dGxlJywgc2lnbmVkPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgtMSkudG9fYnl0ZXMsIDIsICdiaWcnLCBzaWduZWQ9RmFsc2UpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoLTEpLnRvX2J5dGVzLCAyLCAnYmlnJywgc2lnbmVkPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoLTEpLnRvX2J5dGVzLCAyLCAnbGl0dGxlJywgc2lnbmVkPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwKS50b19ieXRlcygwLCAnYmlnJyksIGInJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSkudG9fYnl0ZXMoNSwgJ2JpZycpLCBiJ1x4MDBceDAwXHgwMFx4MDBceDAxJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbHptYS5weSBiL0xpYi90ZXN0L3Rlc3RfbHptYS5weQppbmRleCAxNjBiMGU4Li4zZTczZDdmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2x6bWEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sem1hLnB5CkBAIC0zODMsNiArMzgzLDggQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKCksICJ3IikgYXMgZjoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKCksICJ4IikgYXMgZjoKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKCksICJhIikgYXMgZjoKICAgICAgICAgICAgIHBhc3MKIApAQCAtNDEwLDEzICs0MTIsMjkgQEAKICAgICAgICAgICAgIHdpdGggTFpNQUZpbGUoVEVTVEZOLCAiYWIiKToKICAgICAgICAgICAgICAgICBwYXNzCiAKKyAgICBkZWYgdGVzdF9pbml0X3dpdGhfeF9tb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIGZvciBtb2RlIGluICgieCIsICJ4YiIpOgorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIHdpdGggTFpNQUZpbGUoVEVTVEZOLCBtb2RlKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShURVNURk4sIG1vZGUpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdF9pbml0X2JhZF9tb2RlKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgKDMsICJ4IikpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAiIikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ4IikKKyAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ4dCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAieCsiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgInJ4IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ3eCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAicnQiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgpAQCAtNjk4LDYgKzcxNiwyMCBAQAogICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWls6MTI4XSkpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQogCisgICAgZGVmIHRlc3RfcmVhZF90cnVuY2F0ZWQoc2VsZik6CisgICAgICAgICMgRHJvcCBzdHJlYW0gZm9vdGVyOiBDUkMgKDQgYnl0ZXMpLCBpbmRleCBzaXplICg0IGJ5dGVzKSwKKyAgICAgICAgIyBmbGFncyAoMiBieXRlcykgYW5kIG1hZ2ljIG51bWJlciAoMiBieXRlcykuCisgICAgICAgIHRydW5jYXRlZCA9IENPTVBSRVNTRURfWFpbOi0xMl0KKyAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQorICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKGxlbihJTlBVVCkpLCBJTlBVVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisgICAgICAgICMgSW5jb21wbGV0ZSAxMi1ieXRlIGhlYWRlci4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTIpOgorICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKICAgICBkZWYgdGVzdF9yZWFkX2JhZF9hcmdzKHNlbGYpOgogICAgICAgICBmID0gTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSkKICAgICAgICAgZi5jbG9zZSgpCkBAIC0xMDQxLDggKzEwNzMsNiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgbHptYS5vcGVuKFRFU1RGTiwgIiIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBsem1hLm9wZW4oVEVTVEZOLCAieCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBsem1hLm9wZW4oVEVTVEZOLCAicmJ0IikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGx6bWEub3BlbihURVNURk4sICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCkBAIC0xMDkxLDYgKzExMjEsMTYgQEAKICAgICAgICAgICAgIHdpdGggbHptYS5vcGVuKGJpbywgInJ0IiwgbmV3bGluZT0iXHIiKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoKSwgW3RleHRdKQogCisgICAgZGVmIHRlc3RfeF9tb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIGZvciBtb2RlIGluICgieCIsICJ4YiIsICJ4dCIpOgorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIHdpdGggbHptYS5vcGVuKFRFU1RGTiwgbW9kZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggbHptYS5vcGVuKFRFU1RGTiwgbW9kZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKwogCiBjbGFzcyBNaXNjZWxsYW5lb3VzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkgYi9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKaW5kZXggNWU5ZTMwYS4uZDQwNTA5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQpAQCAtNTk2LDcgKzU5Niw3IEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIFRlc3RNYWlsYm94LnNldFVwKHNlbGYpCi0gICAgICAgIGlmIG9zLm5hbWUgaW4gKCdudCcsICdvczInKSBvciBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CisgICAgICAgIGlmIChvcy5uYW1lID09ICdudCcpIG9yIChzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbicpOgogICAgICAgICAgICAgc2VsZi5fYm94LmNvbG9uID0gJyEnCiAKICAgICBkZWYgYXNzZXJ0TWFpbGJveEVtcHR5KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5IGIvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CmluZGV4IDBiMTQxMzcuLjA2OGM0NzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKQEAgLTIyLDM3ICsyMiwxMyBAQAogCiBjbGFzcyBJbnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgSGVscGVyTWl4aW4pOgogICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6Ci0gICAgICAgICMgVGVzdCB0aGUgZnVsbCByYW5nZSBvZiBQeXRob24gaW50cy4KLSAgICAgICAgbiA9IHN5cy5tYXhzaXplCisgICAgICAgICMgVGVzdCBhIHJhbmdlIG9mIFB5dGhvbiBpbnRzIGxhcmdlciB0aGFuIHRoZSBtYWNoaW5lIHdvcmQgc2l6ZS4KKyAgICAgICAgbiA9IHN5cy5tYXhzaXplICoqIDIKICAgICAgICAgd2hpbGUgbjoKICAgICAgICAgICAgIGZvciBleHBlY3RlZCBpbiAoLW4sIG4pOgogICAgICAgICAgICAgICAgIHNlbGYuaGVscGVyKGV4cGVjdGVkKQogICAgICAgICAgICAgbiA9IG4gPj4gMQogCi0gICAgZGVmIHRlc3RfaW50NjQoc2VsZik6Ci0gICAgICAgICMgU2ltdWxhdGUgaW50IG1hcnNoYWxpbmcgb24gYSA2NC1iaXQgYm94LiAgVGhpcyBpcyBtb3N0IGludGVyZXN0aW5nIGlmCi0gICAgICAgICMgd2UncmUgcnVubmluZyB0aGUgdGVzdCBvbiBhIDMyLWJpdCBib3gsIG9mIGNvdXJzZS4KLQotICAgICAgICBkZWYgdG9fbGl0dGxlX2VuZGlhbl9zdHJpbmcodmFsdWUsIG5ieXRlcyk6Ci0gICAgICAgICAgICBiID0gYnl0ZWFycmF5KCkKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5ieXRlcyk6Ci0gICAgICAgICAgICAgICAgYi5hcHBlbmQodmFsdWUgJiAweGZmKQotICAgICAgICAgICAgICAgIHZhbHVlID4+PSA4Ci0gICAgICAgICAgICByZXR1cm4gYgotCi0gICAgICAgIG1heGludDY0ID0gKDEgPDwgNjMpIC0gMQotICAgICAgICBtaW5pbnQ2NCA9IC1tYXhpbnQ2NC0xCi0KLSAgICAgICAgZm9yIGJhc2UgaW4gbWF4aW50NjQsIG1pbmludDY0LCAtbWF4aW50NjQsIC0obWluaW50NjQgPj4gMSk6Ci0gICAgICAgICAgICB3aGlsZSBiYXNlOgotICAgICAgICAgICAgICAgIHMgPSBiJ0knICsgdG9fbGl0dGxlX2VuZGlhbl9zdHJpbmcoYmFzZSwgOCkKLSAgICAgICAgICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBnb3QpCi0gICAgICAgICAgICAgICAgaWYgYmFzZSA9PSAtMTogICMgYSBmaXhlZC1wb2ludCBmb3Igc2hpZnRpbmcgcmlnaHQgMQotICAgICAgICAgICAgICAgICAgICBiYXNlID0gMAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGJhc2UgPj49IDEKLQogICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CiAgICAgICAgIGZvciBiIGluIChUcnVlLCBGYWxzZSk6CiAgICAgICAgICAgICBzZWxmLmhlbHBlcihiKQpAQCAtMTk5LDEwICsxNzUsMTQgQEAKICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIHRlc3RfbG9hZHNfcmVjdXJzaW9uKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xvYWRzXzJ4X2NvZGUoc2VsZik6CiAgICAgICAgIHMgPSBiJ2MnICsgKGInWCcgKiA0KjQpICsgYid7JyAqIDIqKjIwCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hcnNoYWwubG9hZHMsIHMpCiAKKyAgICBkZWYgdGVzdF9sb2Fkc19yZWN1cnNpb24oc2VsZik6CisgICAgICAgIHMgPSBiJ2MnICsgKGInWCcgKiA0KjUpICsgYid7JyAqIDIqKjIwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hcnNoYWwubG9hZHMsIHMpCisKICAgICBkZWYgdGVzdF9yZWN1cnNpb25fbGltaXQoc2VsZik6CiAgICAgICAgICMgQ3JlYXRlIGEgZGVlcGx5IG5lc3RlZCBzdHJ1Y3R1cmUuCiAgICAgICAgIGhlYWQgPSBsYXN0ID0gW10KQEAgLTI4MCwxNSArMjYwLDIwIEBACiAKICAgICBkZWYgdGVzdF9iYWRfcmVhZGVyKHNlbGYpOgogICAgICAgICBjbGFzcyBCYWRSZWFkZXIoaW8uQnl0ZXNJTyk6Ci0gICAgICAgICAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKLSAgICAgICAgICAgICAgICBiID0gc3VwZXIoKS5yZWFkKG4pCisgICAgICAgICAgICBkZWYgcmVhZGludG8oc2VsZiwgYnVmKToKKyAgICAgICAgICAgICAgICBuID0gc3VwZXIoKS5yZWFkaW50byhidWYpCiAgICAgICAgICAgICAgICAgaWYgbiBpcyBub3QgTm9uZSBhbmQgbiA+IDQ6Ci0gICAgICAgICAgICAgICAgICAgIGIgKz0gYicgJyAqIDEwKio2Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGIKKyAgICAgICAgICAgICAgICAgICAgbiArPSAxMCoqNgorICAgICAgICAgICAgICAgIHJldHVybiBuCiAgICAgICAgIGZvciB2YWx1ZSBpbiAoMS4wLCAxaiwgYicwMTIzNDU2Nzg5JywgJzAxMjM0NTY3ODknKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hcnNoYWwubG9hZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhZFJlYWRlcihtYXJzaGFsLmR1bXBzKHZhbHVlKSkpCiAKKyAgICBkZWYgX3Rlc3RfZW9mKHNlbGYpOgorICAgICAgICBkYXRhID0gbWFyc2hhbC5kdW1wcygoImhlbGxvIiwgImRvbGx5IiwgTm9uZSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihkYXRhKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgbWFyc2hhbC5sb2FkcywgZGF0YVswOiBpXSkKKwogTEFSR0VfU0laRSA9IDIqKjMxCiBwb2ludGVyX3NpemUgPSA4IGlmIHN5cy5tYXhzaXplID4gMHhGRkZGRkZGRiBlbHNlIDQKIApAQCAtMzMzLDYgKzMxOCwxMjIgQEAKICAgICBkZWYgdGVzdF9ieXRlYXJyYXkoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHNlbGYuY2hlY2tfdW5tYXJzaGFsbGFibGUoYnl0ZWFycmF5KHNpemUpKQogCitkZWYgQ29sbGVjdE9iamVjdElEcyhpZHMsIG9iaik6CisgICAgIiIiQ29sbGVjdCBvYmplY3QgaWRzIHNlZW4gaW4gYSBzdHJ1Y3R1cmUiIiIKKyAgICBpZiBpZChvYmopIGluIGlkczoKKyAgICAgICAgcmV0dXJuCisgICAgaWRzLmFkZChpZChvYmopKQorICAgIGlmIGlzaW5zdGFuY2Uob2JqLCAobGlzdCwgdHVwbGUsIHNldCwgZnJvemVuc2V0KSk6CisgICAgICAgIGZvciBlIGluIG9iajoKKyAgICAgICAgICAgIENvbGxlY3RPYmplY3RJRHMoaWRzLCBlKQorICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGRpY3QpOgorICAgICAgICBmb3IgaywgdiBpbiBvYmouaXRlbXMoKToKKyAgICAgICAgICAgIENvbGxlY3RPYmplY3RJRHMoaWRzLCBrKQorICAgICAgICAgICAgQ29sbGVjdE9iamVjdElEcyhpZHMsIHYpCisgICAgcmV0dXJuIGxlbihpZHMpCisKK2NsYXNzIEluc3RhbmNpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgSGVscGVyTWl4aW4pOgorICAgIGludG9iaiA9IDEyMzMyMQorICAgIGZsb2F0b2JqID0gMS4yMzQ1CisgICAgc3Ryb2JqID0gImFiY2RlIiozCisgICAgZGljdG9iaiA9IHsiaGVsbG8iOmZsb2F0b2JqLCAiZ29vZGJ5ZSI6ZmxvYXRvYmosIGZsb2F0b2JqOiJoZWxsbyJ9CisKKyAgICBkZWYgaGVscGVyMyhzZWxmLCByc2FtcGxlLCByZWN1cnNpdmU9RmFsc2UsIHNpbXBsZT1GYWxzZSk6CisgICAgICAgICN3ZSBoYXZlIHR3byBpbnN0YW5jZXMKKyAgICAgICAgc2FtcGxlID0gKHJzYW1wbGUsIHJzYW1wbGUpCisKKyAgICAgICAgbjAgPSBDb2xsZWN0T2JqZWN0SURzKHNldCgpLCBzYW1wbGUpCisKKyAgICAgICAgczMgPSBtYXJzaGFsLmR1bXBzKHNhbXBsZSwgMykKKyAgICAgICAgbjMgPSBDb2xsZWN0T2JqZWN0SURzKHNldCgpLCBtYXJzaGFsLmxvYWRzKHMzKSkKKworICAgICAgICAjc2FtZSBudW1iZXIgb2YgaW5zdGFuY2VzIGdlbmVyYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4zLCBuMCkKKworICAgICAgICBpZiBub3QgcmVjdXJzaXZlOgorICAgICAgICAgICAgI2NhbiBjb21wYXJlIHdpdGggdmVyc2lvbiAyCisgICAgICAgICAgICBzMiA9IG1hcnNoYWwuZHVtcHMoc2FtcGxlLCAyKQorICAgICAgICAgICAgbjIgPSBDb2xsZWN0T2JqZWN0SURzKHNldCgpLCBtYXJzaGFsLmxvYWRzKHMyKSkKKyAgICAgICAgICAgICNvbGQgZm9ybWF0IGdlbmVyYXRlZCBtb3JlIGluc3RhbmNlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKG4yLCBuMCkKKworICAgICAgICAgICAgI2lmIGNvbXBsZXggb2JqZWN0cyBhcmUgaW4gdGhlcmUsIG9sZCBmb3JtYXQgaXMgbGFyZ2VyCisgICAgICAgICAgICBpZiBub3Qgc2ltcGxlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oczIpLCBsZW4oczMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChsZW4oczIpLCBsZW4oczMpKQorCisgICAgZGVmIHRlc3RJbnQoc2VsZik6CisgICAgICAgIHNlbGYuaGVscGVyKHNlbGYuaW50b2JqKQorICAgICAgICBzZWxmLmhlbHBlcjMoc2VsZi5pbnRvYmosIHNpbXBsZT1UcnVlKQorCisgICAgZGVmIHRlc3RGbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5oZWxwZXIoc2VsZi5mbG9hdG9iaikKKyAgICAgICAgc2VsZi5oZWxwZXIzKHNlbGYuZmxvYXRvYmopCisKKyAgICBkZWYgdGVzdFN0cihzZWxmKToKKyAgICAgICAgc2VsZi5oZWxwZXIoc2VsZi5zdHJvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLnN0cm9iaikKKworICAgIGRlZiB0ZXN0RGljdChzZWxmKToKKyAgICAgICAgc2VsZi5oZWxwZXIoc2VsZi5kaWN0b2JqKQorICAgICAgICBzZWxmLmhlbHBlcjMoc2VsZi5kaWN0b2JqKQorCisgICAgZGVmIHRlc3RNb2R1bGUoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihfX2ZpbGVfXywgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGNvZGUgPSBmLnJlYWQoKQorICAgICAgICBpZiBfX2ZpbGVfXy5lbmRzd2l0aCgiLnB5Iik6CisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShjb2RlLCBfX2ZpbGVfXywgImV4ZWMiKQorICAgICAgICBzZWxmLmhlbHBlcihjb2RlKQorICAgICAgICBzZWxmLmhlbHBlcjMoY29kZSkKKworICAgIGRlZiB0ZXN0UmVjdXJzaW9uKHNlbGYpOgorICAgICAgICBkID0gZGljdChzZWxmLmRpY3RvYmopCisgICAgICAgIGRbInNlbGYiXSA9IGQKKyAgICAgICAgc2VsZi5oZWxwZXIzKGQsIHJlY3Vyc2l2ZT1UcnVlKQorICAgICAgICBsID0gW3NlbGYuZGljdG9ial0KKyAgICAgICAgbC5hcHBlbmQobCkKKyAgICAgICAgc2VsZi5oZWxwZXIzKGwsIHJlY3Vyc2l2ZT1UcnVlKQorCitjbGFzcyBDb21wYXRpYmlsaXR5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBfdGVzdChzZWxmLCB2ZXJzaW9uKToKKyAgICAgICAgd2l0aCBvcGVuKF9fZmlsZV9fLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgY29kZSA9IGYucmVhZCgpCisgICAgICAgIGlmIF9fZmlsZV9fLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGNvZGUsIF9fZmlsZV9fLCAiZXhlYyIpCisgICAgICAgIGRhdGEgPSBtYXJzaGFsLmR1bXBzKGNvZGUsIHZlcnNpb24pCisgICAgICAgIG1hcnNoYWwubG9hZHMoZGF0YSkKKworICAgIGRlZiB0ZXN0MFRvMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgwKQorCisgICAgZGVmIHRlc3QxVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDEpCisKKyAgICBkZWYgdGVzdDJUbzMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoMikKKworICAgIGRlZiB0ZXN0M1RvMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgzKQorCitjbGFzcyBJbnRlcm5pbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgSGVscGVyTWl4aW4pOgorICAgIHN0cm9iaiA9ICJ0aGlzIGlzIGFuIGludGVybmVkIHN0cmluZyIKKyAgICBzdHJvYmogPSBzeXMuaW50ZXJuKHN0cm9iaikKKworICAgIGRlZiB0ZXN0SW50ZXJuKHNlbGYpOgorICAgICAgICBzID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHNlbGYuc3Ryb2JqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZWxmLnN0cm9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChzKSwgaWQoc2VsZi5zdHJvYmopKQorICAgICAgICBzMiA9IHN5cy5pbnRlcm4ocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChzMiksIGlkKHMpKQorCisgICAgZGVmIHRlc3ROb0ludGVybihzZWxmKToKKyAgICAgICAgcyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhzZWxmLnN0cm9iaiwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2VsZi5zdHJvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQocyksIGlkKHNlbGYuc3Ryb2JqKSkKKyAgICAgICAgczIgPSBzeXMuaW50ZXJuKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoczIpLCBpZChzKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoSW50VGVzdENhc2UsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5IGIvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQppbmRleCA0ZmE5YTE5Li45ZWYyOTNlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKQEAgLTUyMCwxMiArNTIwLDEyIEBACiAgICAgZGVmIHRlc3RfcmVsYXRpdmVfc2VlayhzZWxmKToKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIC0xLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAzLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAtMywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgLTEsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIDEsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIC0xLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAzLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAtMywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgLTEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIDEsIDIpCiAKICAgICBkZWYgdGVzdF90ZXh0aW9fcHJvcGVydGllcyhzZWxmKToKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5IGIvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CmluZGV4IGJmMGVhYWQuLmU3ZGY4YTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQorKysgYi9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkKQEAgLTM1Miw2ICszNTIsMTUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoTFswXSwgYikKIAorICAgIGRlZiB0ZXN0X3JldmVyc2VkKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIGFzbGlzdCA9IGxpc3QocmV2ZXJzZWQobS50b2xpc3QoKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQobSkpLCBhc2xpc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQobSkpLCBsaXN0KG1bOjotMV0pKQorCisKICMgVmFyaWF0aW9ucyBvbiBzb3VyY2Ugb2JqZWN0cyBmb3IgdGhlIGJ1ZmZlcjogYnl0ZXMtbGlrZSBvYmplY3RzLCB0aGVuIGFycmF5cwogIyB3aXRoIGl0ZW1zaXplID4gMS4KICMgTk9URTogc3VwcG9ydCBmb3IgbXVsdGktZGltZW5zaW9uYWwgb2JqZWN0cyBpcyB1bmltcGxlbWVudGVkLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5IGIvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5CmluZGV4IDExM2M3ZmQuLmExNTE2YzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWluaWRvbS5weQorKysgYi9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkKQEAgLTM2MCw2ICszNjAsMTUgQEAKICAgICAgICAgICAgICAgICBhbmQgZWwuZ2V0QXR0cmlidXRlKCJzcGFtMiIpID09ICJiYW0yIikKICAgICAgICAgZG9tLnVubGluaygpCiAKKyAgICBkZWYgdGVzdEdldEF0dHJMaXN0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdEdldEF0dHJWYWx1ZXMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0R2V0QXR0ckxlbmd0aChzZWxmKToKKyAgICAgICAgcGFzcworCiAgICAgZGVmIHRlc3RHZXRBdHRyaWJ1dGUoc2VsZik6CiAgICAgICAgIGRvbSA9IERvY3VtZW50KCkKICAgICAgICAgY2hpbGQgPSBkb20uYXBwZW5kQ2hpbGQoCkBAIC0zODAsNiArMzg5LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGlsZDIuZ2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cucHl0aG9uLm9yZyIsICJtaXNzaW5nIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCiAKKyAgICBkZWYgdGVzdEdldEF0dHJpYnV0ZU5vZGUoc2VsZik6IHBhc3MKKwogICAgIGRlZiB0ZXN0R2V0RWxlbWVudHNCeVRhZ05hbWVOUyhzZWxmKToKICAgICAgICAgZD0iIiI8Zm9vIHhtbG5zOm1pbmlkb209J2h0dHA6Ly9weXhtbC5zZi5uZXQvbWluaWRvbSc+CiAgICAgICAgIDxtaW5pZG9tOm15ZWxlbS8+CkBAIC00NTAsNiArNDYxLDggQEAKICAgICAgICAgc2VsZi5jb25maXJtKHN0cihub2RlKSA9PSByZXByKG5vZGUpKQogICAgICAgICBkb20udW5saW5rKCkKIAorICAgIGRlZiB0ZXN0VGV4dE5vZGVSZXByKHNlbGYpOiBwYXNzCisKICAgICBkZWYgdGVzdFdyaXRlWE1MKHNlbGYpOgogICAgICAgICBzdHIgPSAnPD94bWwgdmVyc2lvbj0iMS4wIiA/PjxhIGI9ImMiLz4nCiAgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKHN0cikKQEAgLTUxMyw2ICs1MjYsMTQgQEAKICAgICAgICAgICAgICAgICBhbmQgcGkubG9jYWxOYW1lIGlzIE5vbmUKICAgICAgICAgICAgICAgICBhbmQgcGkubmFtZXNwYWNlVVJJID09IHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFKQogCisgICAgZGVmIHRlc3RQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25SZXByKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFRleHRSZXByKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFdyaXRlVGV4dChzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3REb2N1bWVudEVsZW1lbnQoc2VsZik6IHBhc3MKKwogICAgIGRlZiB0ZXN0VG9vTWFueURvY3VtZW50RWxlbWVudHMoc2VsZik6CiAgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQogICAgICAgICBlbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoImV4dHJhIikKQEAgLTUyMSw2ICs1NDIsMjYgQEAKICAgICAgICAgZWxlbS51bmxpbmsoKQogICAgICAgICBkb2MudW5saW5rKCkKIAorICAgIGRlZiB0ZXN0Q3JlYXRlRWxlbWVudE5TKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdENyZWF0ZUF0dHJpYnV0ZU5TKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlU3RyaW5nKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdENvbW1lbnQoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RJdGVtKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0SXRlbXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RJdGVtTlMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RLZXlzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0S2V5c05TKHNlbGYpOiBwYXNzCisKICAgICBkZWYgdGVzdFJlbW92ZU5hbWVkSXRlbShzZWxmKToKICAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MgYT0nJy8+IikKICAgICAgICAgZSA9IGRvYy5kb2N1bWVudEVsZW1lbnQKQEAgLTU0MCw2ICs1ODEsMzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1sLmRvbS5Ob3RGb3VuZEVyciwgYXR0cnMucmVtb3ZlTmFtZWRJdGVtTlMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8veG1sLnB5dGhvbi5vcmcvIiwgImIiKQogCisgICAgZGVmIHRlc3RBdHRyTGlzdFZhbHVlcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdExlbmd0aChzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdF9fZ2V0aXRlbV9fKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0X19zZXRpdGVtX18oc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0U2V0QXR0clZhbHVlYW5kTm9kZVZhbHVlKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlRWxlbWVudChzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZUF0dHJpYnV0ZXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VFbGVtZW50TmFtZXNwYWNlcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZUF0dHJpYnV0ZU5hbWVzcGFjZXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25zKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdENoaWxkTm9kZXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0Rmlyc3RDaGlsZChzZWxmKTogcGFzcworCiAgICAgZGVmIHRlc3RIYXNDaGlsZE5vZGVzKHNlbGYpOgogICAgICAgICBkb20gPSBwYXJzZVN0cmluZygiPGRvYz48Zm9vLz48L2RvYz4iKQogICAgICAgICBkb2MgPSBkb20uZG9jdW1lbnRFbGVtZW50CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21tYXAucHkgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKaW5kZXggODk5ZGY4ZC4uNmNhNWUxYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQpAQCAtMSwxMSArMSwxMiBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChURVNURk4sIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZSwgdW5saW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlcywgXzJHLCBfNEcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzLCBfMkcsIF80RywgZ2NfY29sbGVjdCkKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzeXMKK2ltcG9ydCB3ZWFrcmVmCiAKICMgU2tpcCB0ZXN0IGlmIHdlIGNhbid0IGltcG9ydCBtbWFwLgogbW1hcCA9IGltcG9ydF9tb2R1bGUoJ21tYXAnKQpAQCAtMjQ1LDcgKzI0Niw3IEBACiAKICAgICBkZWYgdGVzdF9iYWRfZmlsZV9kZXNjKHNlbGYpOgogICAgICAgICAjIFRyeSBvcGVuaW5nIGEgYmFkIGZpbGUgZGVzY3JpcHRvci4uLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtbWFwLmVycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQogCiAgICAgZGVmIHRlc3RfdG91Z2hlcl9maW5kKHNlbGYpOgogICAgICAgICAjIERvIGEgdG91Z2hlciAuZmluZCgpIHRlc3QuICBTRiBidWcgNTE1OTQzIHBvaW50ZWQgb3V0IHRoYXQsIGluIDIuMiwKQEAgLTY1NSw3ICs2NTYsNyBAQAogICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDApCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtLnJlc2l6ZSgwKSAjIHdpbGwgcmFpc2UgV2luZG93c0Vycm9yCisgICAgICAgICAgICBtLnJlc2l6ZSgwKSAjIHdpbGwgcmFpc2UgT1NFcnJvcgogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKQEAgLTY3MSw3ICs2NzIsNyBAQAogICAgICAgICAjIHBhcmFtZXRlcnMgdG8gX2dldF9vc2ZoYW5kbGUuCiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhtbWFwLmVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgbSA9IG1tYXAubW1hcChzLmZpbGVubygpLCAxMCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHMuY2xvc2UoKQpAQCAtNjgyLDE0ICs2ODMsMjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uY2xvc2VkKQogCiAgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQgdGhlIElPRXJyb3IgZ2V0cyBwYXNzZWQgdGhyb3VnaAorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgT1NFcnJvciBnZXRzIHBhc3NlZCB0aHJvdWdoCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBleGM6CiAgICAgICAgICAgICB3aXRoIG1tYXAubW1hcCgtMSwgMTApIGFzIG06Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgSU9FcnJvciwKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBPU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIGV4Y2VwdGlvbiByYWlzZWQgaW4gY29udGV4dCBtYW5hZ2VyIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKKyAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgorICAgICAgICAjIENoZWNrIG1tYXAgb2JqZWN0cyBhcmUgd2Vha3JlZmFibGUKKyAgICAgICAgbW0gPSBtbWFwLm1tYXAoLTEsIDE2KQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKG1tKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIG1tKQorICAgICAgICBkZWwgbW0KKyAgICAgICAgZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKwogY2xhc3MgTGFyZ2VNbWFwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtNzA3LDcgKzcxNyw3IEBACiAgICAgICAgICAgICBmLnNlZWsobnVtX3plcm9lcykKICAgICAgICAgICAgIGYud3JpdGUodGFpbCkKICAgICAgICAgICAgIGYuZmx1c2goKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIE92ZXJmbG93RXJyb3IpOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIE92ZXJmbG93RXJyb3IpOgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGxhcmdlZmlsZSBzdXBwb3J0IikKICAgICAgICAgcmV0dXJuIGYKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKaW5kZXggZTVhMjUyNS4uMTIzMDI5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKQEAgLTEsNiArMSw4IEBACiAjIFRlc3QgdGhlIG1vZHVsZSB0eXBlCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBnY19jb2xsZWN0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCiBpbXBvcnQgc3lzCiBNb2R1bGVUeXBlID0gdHlwZShzeXMpCkBAIC0zMyw3ICszNSwxMiBAQAogICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLCB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogTm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vLl9fbG9hZGVyX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vLl9fcGFja2FnZV9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvby5fX3NwZWNfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lfSkKIAogICAgIGRlZiB0ZXN0X2FzY2lpX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgIyBBU0NJSSBkb2NzdHJpbmcKQEAgLTQxLDcgKzQ4LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MifSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fc3BlY19fIjogTm9uZX0pCiAKICAgICBkZWYgdGVzdF91bmljb2RlX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgIyBVbmljb2RlIGRvY3N0cmluZwpAQCAtNDksNyArNTgsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sICJmb29kb2NcdTEyMzQiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvY1x1MTIzNCJ9KQorICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jXHUxMjM0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbG9hZGVyX18iOiBOb25lLCAiX19wYWNrYWdlX18iOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lfSkKIAogICAgIGRlZiB0ZXN0X3JlaW5pdChzZWxmKToKICAgICAgICAgIyBSZWluaXRpYWxpemF0aW9uIHNob3VsZCBub3QgcmVwbGFjZSB0aGUgX19kaWN0X18KQEAgLTYxLDEwICs3MiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uYmFyLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jIiwgImJhciI6IDQyfSkKKyAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MiLCAiYmFyIjogNDIsCisgICAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IE5vbmUsICJfX3BhY2thZ2VfXyI6IE5vbmUsICJfX3NwZWNfXyI6IE5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9vLl9fZGljdF9fIGlzIGQpCiAKLSAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCiAgICAgZGVmIHRlc3RfZG9udF9jbGVhcl9kaWN0KHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZSA3MTQwLgogICAgICAgICBkZWYgZigpOgpAQCAtODksNiArMTAwLDE0IEBACiAgICAgICAgIGdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc3Ryb3llZCwgWzFdKQogCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgbSA9IE1vZHVsZVR5cGUoImZvbyIpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBtKQorICAgICAgICBkZWwgbQorICAgICAgICBnY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfbWluaW1hbChzZWxmKToKICAgICAgICAgIyByZXBycyB3aGVuIG1vZHVsZXMgaGF2ZSBubyBfX2ZpbGVfXywgX19uYW1lX18sIG9yIF9fbG9hZGVyX18KICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCkBAIC0xMTAsMTMgKzEyOSwxOSBAQAogICAgICAgICBtLl9fZmlsZV9fID0gJy90bXAvZm9vLnB5JwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8bW9kdWxlICc/JyBmcm9tICcvdG1wL2Zvby5weSc+IikKIAorICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfbG9hZGVyX2FzX05vbmUoc2VsZik6CisgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQorICAgICAgICBhc3NlcnQgbS5fX2xvYWRlcl9fIGlzIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG0pLCAiPG1vZHVsZSAnZm9vJz4iKQorCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9iYXJlX2xvYWRlcl9idXRfbm9fbmFtZShzZWxmKToKICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCiAgICAgICAgIGRlbCBtLl9fbmFtZV9fCiAgICAgICAgICMgWWVzLCBhIGNsYXNzIG5vdCBhbiBpbnN0YW5jZS4KICAgICAgICAgbS5fX2xvYWRlcl9fID0gQmFyZUxvYWRlcgorICAgICAgICBsb2FkZXJfcmVwciA9IHJlcHIoQmFyZUxvYWRlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkJhcmVMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoe30pPiIuZm9ybWF0KGxvYWRlcl9yZXByKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfZnVsbF9sb2FkZXJfYnV0X25vX25hbWUoc2VsZik6CiAgICAgICAgICMgbS5fX2xvYWRlcl9fLm1vZHVsZV9yZXByKCkgd2lsbCBmYWlsIGJlY2F1c2UgdGhlIG1vZHVsZSBoYXMgbm8KQEAgLTEyNiwxNSArMTUxLDE3IEBACiAgICAgICAgIGRlbCBtLl9fbmFtZV9fCiAgICAgICAgICMgWWVzLCBhIGNsYXNzIG5vdCBhbiBpbnN0YW5jZS4KICAgICAgICAgbS5fX2xvYWRlcl9fID0gRnVsbExvYWRlcgorICAgICAgICBsb2FkZXJfcmVwciA9IHJlcHIoRnVsbExvYWRlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkZ1bGxMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoe30pPiIuZm9ybWF0KGxvYWRlcl9yZXByKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfYmFyZV9sb2FkZXIoc2VsZik6CiAgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQogICAgICAgICAjIFllcywgYSBjbGFzcyBub3QgYW4gaW5zdGFuY2UuCiAgICAgICAgIG0uX19sb2FkZXJfXyA9IEJhcmVMb2FkZXIKKyAgICAgICAgbW9kdWxlX3JlcHIgPSByZXByKEJhcmVMb2FkZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnZm9vJyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkJhcmVMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICdmb28nICh7fSk+Ii5mb3JtYXQobW9kdWxlX3JlcHIpKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9mdWxsX2xvYWRlcihzZWxmKToKICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCkBAIC0xNjQsOCArMTkxLDI1IEBACiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl9zb3VyY2Uoc2VsZik6CiAgICAgICAgIHIgPSByZXByKHVuaXR0ZXN0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbOjI1XSwgIjxtb2R1bGUgJ3VuaXR0ZXN0JyBmcm9tICciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbLTEzOl0sICJfX2luaXRfXy5weSc+IikKKyAgICAgICAgc3RhcnRzX3dpdGggPSAiPG1vZHVsZSAndW5pdHRlc3QnIGZyb20gJyIKKyAgICAgICAgZW5kc193aXRoID0gIl9faW5pdF9fLnB5Jz4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocls6bGVuKHN0YXJ0c193aXRoKV0sIHN0YXJ0c193aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9IGRvZXMgbm90IHN0YXJ0IHdpdGggeyFyfScuZm9ybWF0KHIsIHN0YXJ0c193aXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWy1sZW4oZW5kc193aXRoKTpdLCBlbmRzX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn0gZG9lcyBub3QgZW5kIHdpdGggeyFyfScuZm9ybWF0KHIsIGVuZHNfd2l0aCkpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfZmluYWxpemF0aW9uX2F0X3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIE1vZHVsZSBnbG9iYWxzIGFuZCBidWlsdGlucyBzaG91bGQgc3RpbGwgYmUgYXZhaWxhYmxlIGR1cmluZyBzaHV0ZG93bgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsICJmcm9tIHRlc3QgaW1wb3J0IGZpbmFsX2EiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycikKKyAgICAgICAgbGluZXMgPSBvdXQuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGxpbmVzKSwgeworICAgICAgICAgICAgYiJ4ID0gYSIsCisgICAgICAgICAgICBiInggPSBiIiwKKyAgICAgICAgICAgIGIiZmluYWxfYS54ID0gYSIsCisgICAgICAgICAgICBiImZpbmFsX2IueCA9IGIiLAorICAgICAgICAgICAgYiJsZW4gPSBsZW4iLAorICAgICAgICAgICAgYiJzaHV0aWwucm10cmVlID0gcm10cmVlIn0pCiAKICAgICAjIGZyb3plbiBhbmQgbmFtZXNwYWNlIG1vZHVsZSByZXBycyBhcmUgdGVzdGVkIGluIGltcG9ydGxpYi4KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKaW5kZXggNjg4OTE4NC4uZWE1OTJjNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CkBAIC0xNzUsNTcgKzE3NSwyOCBAQAogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoVEVTVEZOKQogCiBjbGFzcyBUZXN0X1N0cmVhbVdyaXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaWYgbGVuKCdcVTAwMDEyMzQ1JykgPT0gMjogIyBVQ1MyCi0gICAgICAgIGRlZiB0ZXN0X2diMTgwMzAoc2VsZik6Ci0gICAgICAgICAgICBzPSBpby5CeXRlc0lPKCkKLSAgICAgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCdnYjE4MDMwJykocykKLSAgICAgICAgICAgIGMud3JpdGUoJzEyMycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjMnKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceDkwN1x4OTU5JykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzBdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHg5MDdceDk1OScpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1sxXSArICdcVTAwMDEyMzQ1JyArICdcdWFjMDBcdTAwYWMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHg5MDdceDk1OVx4OTA3XHg5NTlceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGMucmVzZXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCisgICAgZGVmIHRlc3RfZ2IxODAzMChzZWxmKToKKyAgICAgICAgcz0gaW8uQnl0ZXNJTygpCisgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCdnYjE4MDMwJykocykKKyAgICAgICAgYy53cml0ZSgnMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKKyAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4OTA3XHg5NTknKQorICAgICAgICBjLndyaXRlKCdcdWFjMDBcdTAwYWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICBiJzEyM1x4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCiAKLSAgICAgICAgZGVmIHRlc3RfdXRmXzgoc2VsZik6Ci0gICAgICAgICAgICBzPSBpby5CeXRlc0lPKCkKLSAgICAgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCd1dGYtOCcpKHMpCi0gICAgICAgICAgICBjLndyaXRlKCcxMjMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHhmMFx4OTJceDhkXHg4NScpCi0KLSAgICAgICAgICAgICMgUHl0aG9uIHV0Zi04IGNvZGVjIGNhbid0IGJ1ZmZlciBzdXJyb2dhdGUgcGFpcnMgeWV0LgotICAgICAgICAgICAgaWYgMDoKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1swXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceGYwXHg5Mlx4OGRceDg1JykKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1sxXSArICdcVTAwMDEyMzQ1JyArICdcdWFjMDBcdTAwYWMnKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhYycpCi0gICAgICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JwotICAgICAgICAgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjJykKLSAgICAgICAgICAgICAgICBjLnJlc2V0KCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCi0gICAgICAgICAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWNceGVkXHhhMFx4ODgnKQotICAgICAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzFdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhY1x4ZWRceGEwXHg4OFx4ZWRceGJkXHg4NScpCi0KLSAgICBlbHNlOiAjIFVDUzQKLSAgICAgICAgcGFzcworICAgIGRlZiB0ZXN0X3V0Zl84KHNlbGYpOgorICAgICAgICBzPSBpby5CeXRlc0lPKCkKKyAgICAgICAgYyA9IGNvZGVjcy5nZXR3cml0ZXIoJ3V0Zi04JykocykKKyAgICAgICAgYy53cml0ZSgnMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKKyAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4ZjBceDkyXHg4ZFx4ODUnKQorICAgICAgICBjLndyaXRlKCdcdWFjMDBcdTAwYWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NScKKyAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWMnKQogCiAgICAgZGVmIHRlc3Rfc3RyZWFtd3JpdGVyX3N0cndyaXRlKHNlbGYpOgogICAgICAgICBzID0gaW8uQnl0ZXNJTygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3JrLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmY0ZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yay5weQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nCisKK3Rlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLmluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QoZ2xvYmFscygpLCAnZm9yaycpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNhMDRhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlci5weQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nCisKK3Rlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLmluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QoZ2xvYmFscygpLCAnZm9ya3NlcnZlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19tYWluX2hhbmRsaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfbWFpbl9oYW5kbGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWE4ZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfbWFpbl9oYW5kbGluZy5weQpAQCAtMCwwICsxLDI4NSBAQAorIyB0ZXN0cyBfX21haW5fXyBtb2R1bGUgaGFuZGxpbmcgaW4gbXVsdGlwcm9jZXNzaW5nCisKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgemlwaW1wb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBweV9jb21waWxlCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0ICgKKyAgICBtYWtlX3BrZywgbWFrZV9zY3JpcHQsIG1ha2VfemlwX3BrZywgbWFrZV96aXBfc2NyaXB0LAorICAgIGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZSwgdGVtcF9kaXIsCisgICAgc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbikKKworIyBTa2lwIHRlc3RzIGlmIF9tdWx0aXByb2Nlc3Npbmcgd2Fzbid0IGJ1aWx0LgorX211bHRpcHJvY2Vzc2luZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnX211bHRpcHJvY2Vzc2luZycpCisjIExvb2sgdXAgd2hpY2ggc3RhcnQgbWV0aG9kcyBhcmUgYXZhaWxhYmxlIHRvIHRlc3QKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK0FWQUlMQUJMRV9TVEFSVF9NRVRIT0RTID0gc2V0KG11bHRpcHJvY2Vzc2luZy5nZXRfYWxsX3N0YXJ0X21ldGhvZHMoKSkKKwordmVyYm9zZSA9IHN1cHBvcnQudmVyYm9zZQorCit0ZXN0X3NvdXJjZSA9ICIiIlwKKyMgbXVsdGlwcm9jZXNzaW5nIGluY2x1ZGVzIGFsbCBzb3J0cyBvZiBzaGVuYW5pZ2FucyB0byBtYWtlIF9fbWFpbl9fCisjIGF0dHJpYnV0ZXMgYWNjZXNzaWJsZSBpbiB0aGUgc3VicHJvY2VzcyBpbiBhIHBpY2tsZSBjb21wYXRpYmxlIHdheS4KKworIyBXZSBydW4gdGhlICJkb2Vzbid0IHdvcmsgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIiBleGFtcGxlIGZyb20KKyMgdGhlIGRvY3MgdG8gbWFrZSBzdXJlIGl0ICpkb2VzKiB3b3JrIGZyb20gYW4gZXhlY3V0ZWQgX19tYWluX18sCisjIHJlZ2FyZGxlc3Mgb2YgdGhlIGludm9jYXRpb24gbWVjaGFuaXNtCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbCwgc2V0X3N0YXJ0X21ldGhvZAorCisjIFdlIHVzZSB0aGlzIF9fbWFpbl9fIGRlZmluZWQgZnVuY3Rpb24gaW4gdGhlIG1hcCBjYWxsIGJlbG93IGluIG9yZGVyIHRvCisjIGNoZWNrIHRoYXQgbXVsdGlwcm9jZXNzaW5nIGluIGNvcnJlY3RseSBydW5uaW5nIHRoZSB1bmd1YXJkZWQKKyMgY29kZSBpbiBjaGlsZCBwcm9jZXNzZXMgYW5kIHRoZW4gbWFraW5nIGl0IGF2YWlsYWJsZSBhcyBfX21haW5fXworZGVmIGYoeCk6CisgICAgcmV0dXJuIHgqeAorCisjIENoZWNrIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydHMKK2lmICJjaGVja19zaWJsaW5nIiBpbiBfX2ZpbGVfXzoKKyAgICAjIFdlJ3JlIGluc2lkZSBhIHBhY2thZ2UgYW5kIG5vdCBpbiBhIF9fbWFpbl9fLnB5IGZpbGUKKyAgICAjIHNvIG1ha2Ugc3VyZSBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzIHdvcmsgY29ycmVjdGx5CisgICAgZnJvbSAuIGltcG9ydCBzaWJsaW5nCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3RhcnRfbWV0aG9kID0gc3lzLmFyZ3ZbMV0KKyAgICBzZXRfc3RhcnRfbWV0aG9kKHN0YXJ0X21ldGhvZCkKKyAgICBwID0gUG9vbCg1KQorICAgIHJlc3VsdHMgPSBbXQorICAgIHAubWFwX2FzeW5jKGYsIFsxLCAyLCAzXSwgY2FsbGJhY2s9cmVzdWx0cy5leHRlbmQpCisgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIDEwICMgdXAgdG8gMTAgcyB0byByZXBvcnQgdGhlIHJlc3VsdHMKKyAgICB3aGlsZSBub3QgcmVzdWx0czoKKyAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorICAgICAgICBpZiB0aW1lLnRpbWUoKSA+IGRlYWRsaW5lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcmVzdWx0cyIpCisgICAgcmVzdWx0cy5zb3J0KCkKKyAgICBwcmludChzdGFydF9tZXRob2QsICItPiIsIHJlc3VsdHMpCisiIiIKKwordGVzdF9zb3VyY2VfbWFpbl9za2lwcGVkX2luX2NoaWxkcmVuID0gIiIiXAorIyBfX21haW5fXy5weSBmaWxlcyBoYXZlIGFuIGltcGxpZWQgImlmIF9fbmFtZV9fID09ICdfX21haW5fXyciIHNvCisjIG11bHRpcHJvY2Vzc2luZyBzaG91bGQgYWx3YXlzIHNraXAgcnVubmluZyB0aGVtIGluIGNoaWxkIHByb2Nlc3NlcworCisjIFRoaXMgbWVhbnMgd2UgY2FuJ3QgdXNlIF9fbWFpbl9fIGRlZmluZWQgZnVuY3Rpb25zIGluIGNoaWxkIHByb2Nlc3NlcywKKyMgc28gd2UganVzdCB1c2UgImludCIgYXMgYSBwYXNzdGhyb3VnaCBvcGVyYXRpb24gYmVsb3cKKworaWYgX19uYW1lX18gIT0gIl9fbWFpbl9fIjoKKyAgICByYWlzZSBSdW50aW1lRXJyb3IoIlNob3VsZCBvbmx5IGJlIGNhbGxlZCBhcyBfX21haW5fXyEiKQorCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wsIHNldF9zdGFydF9tZXRob2QKKworc3RhcnRfbWV0aG9kID0gc3lzLmFyZ3ZbMV0KK3NldF9zdGFydF9tZXRob2Qoc3RhcnRfbWV0aG9kKQorcCA9IFBvb2woNSkKK3Jlc3VsdHMgPSBbXQorcC5tYXBfYXN5bmMoaW50LCBbMSwgNCwgOV0sIGNhbGxiYWNrPXJlc3VsdHMuZXh0ZW5kKQorZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIDEwICMgdXAgdG8gMTAgcyB0byByZXBvcnQgdGhlIHJlc3VsdHMKK3doaWxlIG5vdCByZXN1bHRzOgorICAgIHRpbWUuc2xlZXAoMC4wNSkKKyAgICBpZiB0aW1lLnRpbWUoKSA+IGRlYWRsaW5lOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciByZXN1bHRzIikKK3Jlc3VsdHMuc29ydCgpCitwcmludChzdGFydF9tZXRob2QsICItPiIsIHJlc3VsdHMpCisiIiIKKworIyBUaGVzZSBoZWxwZXJzIHdlcmUgY29waWVkIGZyb20gdGVzdF9jbWRfbGluZV9zY3JpcHQgJiB0d2Vha2VkIGEgYml0Li4uCisKK2RlZiBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXRlc3Rfc291cmNlLCBvbWl0X3N1ZmZpeD1GYWxzZSk6CisgICAgdG9fcmV0dXJuID0gbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgb21pdF9zdWZmaXgpCisgICAgIyBIYWNrIHRvIGNoZWNrIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydHMKKyAgICBpZiBzY3JpcHRfYmFzZW5hbWUgPT0gImNoZWNrX3NpYmxpbmciOgorICAgICAgICBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCAic2libGluZyIsICIiKQorICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgcmV0dXJuIHRvX3JldHVybgorCitkZWYgX21ha2VfdGVzdF96aXBfcGtnKHppcF9kaXIsIHppcF9iYXNlbmFtZSwgcGtnX25hbWUsIHNjcmlwdF9iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXRlc3Rfc291cmNlLCBkZXB0aD0xKToKKyAgICB0b19yZXR1cm4gPSBtYWtlX3ppcF9wa2coemlwX2RpciwgemlwX2Jhc2VuYW1lLCBwa2dfbmFtZSwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIGRlcHRoKQorICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgcmV0dXJuIHRvX3JldHVybgorCisjIFRoZXJlJ3Mgbm8gZWFzeSB3YXkgdG8gcGFzcyB0aGUgc2NyaXB0IGRpcmVjdG9yeSBpbiB0byBnZXQKKyMgLW0gdG8gd29yayAoYXZvaWRpbmcgdGhhdCBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgbWFraW5nCisjIGRpcmVjdG9yaWVzIGFuZCB6aXBmaWxlcyBleGVjdXRhYmxlISkKKyMgU28gd2UgZmFrZSBpdCBmb3IgdGVzdGluZyBwdXJwb3NlcyB3aXRoIGEgY3VzdG9tIGxhdW5jaCBzY3JpcHQKK2xhdW5jaF9zb3VyY2UgPSAiIiJcCitpbXBvcnQgc3lzLCBvcy5wYXRoLCBydW5weQorc3lzLnBhdGguaW5zZXJ0KDAsICVzKQorcnVucHkuX3J1bl9tb2R1bGVfYXNfbWFpbiglcikKKyIiIgorCitkZWYgX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIG1vZHVsZV9uYW1lLCBwYXRoPU5vbmUpOgorICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAgICAgcGF0aCA9ICJvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIgorICAgIGVsc2U6CisgICAgICAgIHBhdGggPSByZXByKHBhdGgpCisgICAgc291cmNlID0gbGF1bmNoX3NvdXJjZSAlIChwYXRoLCBtb2R1bGVfbmFtZSkKKyAgICB0b19yZXR1cm4gPSBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKKyAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgIHJldHVybiB0b19yZXR1cm4KKworY2xhc3MgTXVsdGlQcm9jZXNzaW5nQ21kTGluZU1peGluKCk6CisgICAgbWF4RGlmZiA9IE5vbmUgIyBTaG93IGZ1bGwgdHJhY2ViYWNrcyBvbiBzdWJwcm9jZXNzIGZhaWx1cmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdGFydF9tZXRob2Qgbm90IGluIEFWQUlMQUJMRV9TVEFSVF9NRVRIT0RTOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgc3RhcnQgbWV0aG9kIG5vdCBhdmFpbGFibGUiICUgc2VsZi5zdGFydF9tZXRob2QpCisKKyAgICBkZWYgX2NoZWNrX291dHB1dChzZWxmLCBzY3JpcHRfbmFtZSwgZXhpdF9jb2RlLCBvdXQsIGVycik6CisgICAgICAgIGlmIHZlcmJvc2UgPiAxOgorICAgICAgICAgICAgcHJpbnQoIk91dHB1dCBmcm9tIHRlc3Qgc2NyaXB0ICVyOiIgJSBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHByaW50KG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0X2NvZGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmRlY29kZSgndXRmLTgnKSwgJycpCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiJXMgLT4gWzEsIDQsIDldIiAlIHNlbGYuc3RhcnRfbWV0aG9kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmRlY29kZSgndXRmLTgnKS5zdHJpcCgpLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIF9jaGVja19zY3JpcHQoc2VsZiwgc2NyaXB0X25hbWUsICpjbWRfbGluZV9zd2l0Y2hlcyk6CisgICAgICAgIGlmIG5vdCBfX2RlYnVnX186CisgICAgICAgICAgICBjbWRfbGluZV9zd2l0Y2hlcyArPSAoJy0nICsgJ08nICogc3lzLmZsYWdzLm9wdGltaXplLCkKKyAgICAgICAgcnVuX2FyZ3MgPSBjbWRfbGluZV9zd2l0Y2hlcyArIChzY3JpcHRfbmFtZSwgc2VsZi5zdGFydF9tZXRob2QpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKnJ1bl9hcmdzLCBfX2lzb2xhdGVkPUZhbHNlKQorICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQsIGVycikKKworICAgIGRlZiB0ZXN0X2Jhc2ljX3NjcmlwdChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lKQorCisgICAgZGVmIHRlc3RfYmFzaWNfc2NyaXB0X25vX3N1ZmZpeChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbWl0X3N1ZmZpeD1UcnVlKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lKQorCisgICAgZGVmIHRlc3RfaXB5dGhvbl93b3JrYXJvdW5kKHNlbGYpOgorICAgICAgICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIElQeXRob24gbGF1bmNoIHNjcmlwdCBhcmUgbWlzc2luZyB0aGUKKyAgICAgICAgIyBfX25hbWVfXyA9ICJfX21haW5fXyIgZ3VhcmQsIGFuZCBtdWx0aXByb2Nlc3NpbmcgaGFzIGxvbmcgaGFkCisgICAgICAgICMgYSB3b3JrYXJvdW5kIGZvciB0aGF0IGNhc2UKKyAgICAgICAgIyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2lweXRob24vaXB5dGhvbi9pc3N1ZXMvNDY5OAorICAgICAgICBzb3VyY2UgPSB0ZXN0X3NvdXJjZV9tYWluX3NraXBwZWRfaW5fY2hpbGRyZW4KKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdpcHl0aG9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNjcmlwdF9ub19zdWZmaXggPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnaXB5dGhvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbWl0X3N1ZmZpeD1UcnVlKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9ub19zdWZmaXgpCisKKyAgICBkZWYgdGVzdF9zY3JpcHRfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnc2NyaXB0JykKKyAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgcHljX2ZpbGUgPSBzdXBwb3J0Lm1ha2VfbGVnYWN5X3B5YyhzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChweWNfZmlsZSkKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgc291cmNlID0gc2VsZi5tYWluX2luX2NoaWxkcmVuX3NvdXJjZQorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2NvbXBpbGVkKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSBzZWxmLm1haW5faW5fY2hpbGRyZW5fc291cmNlCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQorICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBweWNfZmlsZSA9IHN1cHBvcnQubWFrZV9sZWdhY3lfcHljKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIpCisKKyAgICBkZWYgdGVzdF96aXBmaWxlKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSBzZWxmLm1haW5faW5fY2hpbGRyZW5fc291cmNlCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lKQorCisgICAgZGVmIHRlc3RfemlwZmlsZV9jb21waWxlZChzZWxmKToKKyAgICAgICAgc291cmNlID0gc2VsZi5tYWluX2luX2NoaWxkcmVuX3NvdXJjZQorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBjb21waWxlZF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2luX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ2NoZWNrX3NpYmxpbmcnKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X3BrZy5jaGVja19zaWJsaW5nJykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlX2luX3ppcGZpbGUoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gX21ha2VfdGVzdF96aXBfcGtnKHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsICd0ZXN0X3BrZycsICdzY3JpcHQnKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cuc2NyaXB0JywgemlwX25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfaW5fc3VicGFja2FnZV9pbl96aXBmaWxlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwX3BrZyhzY3JpcHRfZGlyLCAndGVzdF96aXAnLCAndGVzdF9wa2cnLCAnc2NyaXB0JywgZGVwdGg9MikKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnLnRlc3RfcGtnLnNjcmlwdCcsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgc291cmNlID0gc2VsZi5tYWluX2luX2NoaWxkcmVuX3NvdXJjZQorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdfX21haW5fXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2UpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX2NvbXBpbGVkKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSBzZWxmLm1haW5faW5fY2hpbGRyZW5fc291cmNlCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ19fbWFpbl9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHB5Y19maWxlID0gc3VwcG9ydC5tYWtlX2xlZ2FjeV9weWMoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUpCisKKyMgVGVzdCBhbGwgc3VwcG9ydGVkIHN0YXJ0IG1ldGhvZHMgKHNldHVwQ2xhc3Mgc2tpcHMgYXMgYXBwcm9wcmlhdGUpCisKK2NsYXNzIFNwYXduQ21kTGluZVRlc3QoTXVsdGlQcm9jZXNzaW5nQ21kTGluZU1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc3RhcnRfbWV0aG9kID0gJ3NwYXduJworICAgIG1haW5faW5fY2hpbGRyZW5fc291cmNlID0gdGVzdF9zb3VyY2VfbWFpbl9za2lwcGVkX2luX2NoaWxkcmVuCisKK2NsYXNzIEZvcmtDbWRMaW5lVGVzdChNdWx0aVByb2Nlc3NpbmdDbWRMaW5lTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzdGFydF9tZXRob2QgPSAnZm9yaycKKyAgICBtYWluX2luX2NoaWxkcmVuX3NvdXJjZSA9IHRlc3Rfc291cmNlCisKK2NsYXNzIEZvcmtTZXJ2ZXJDbWRMaW5lVGVzdChNdWx0aVByb2Nlc3NpbmdDbWRMaW5lTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzdGFydF9tZXRob2QgPSAnZm9ya3NlcnZlcicKKyAgICBtYWluX2luX2NoaWxkcmVuX3NvdXJjZSA9IHRlc3Rfc291cmNlX21haW5fc2tpcHBlZF9pbl9jaGlsZHJlbgorCitkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICBzdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3Npbmdfc3Bhd24ucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzRhZTllCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3Npbmdfc3Bhd24ucHkKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZworCit0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZy5pbnN0YWxsX3Rlc3RzX2luX21vZHVsZV9kaWN0KGdsb2JhbHMoKSwgJ3NwYXduJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkgYi9MaWIvdGVzdC90ZXN0X25hbWVzcGFjZV9wa2dzLnB5CmluZGV4IDcwNjdiMTIuLjY2Mzk2MTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9uYW1lc3BhY2VfcGtncy5weQpAQCAtMSw3ICsxLDEwIEBACi1pbXBvcnQgc3lzCiBpbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgaW1wb3J0bGliLmFiYworaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKIGltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliIGltcG9ydCB1dGlsCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CkBAIC0yODYsOSArMjg5LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhX3Rlc3QuYXR0ciwgJ2luIG1vZHVsZScpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdCgqTmFtZXNwYWNlUGFja2FnZVRlc3QuX19zdWJjbGFzc2VzX18oKSkKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkKaW5kZXggMWQ1MjcxMy4uNzFhNGVjMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ubnRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weQpAQCAtMjY2LDcgKzI2Niw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VydmVyLmhlbHAoKQotICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIFRydWUKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5IGIvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CmluZGV4IDI4ZWRlMzQuLmFiMmVlYjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdGRhdGEgPSBvcGVuX3VybHJlc291cmNlKFRFU1REQVRBVVJMLCBlbmNvZGluZz0idXRmLTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrPWNoZWNrX3ZlcnNpb24pCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIiArIFRFU1REQVRBVVJMKQogICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdGRhdGEuY2xvc2UpCiAgICAgICAgIGZvciBsaW5lIGluIHRlc3RkYXRhOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkgYi9MaWIvdGVzdC90ZXN0X250cGF0aC5weQppbmRleCBlOWUxZDcxLi4wMDBmYzc1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X250cGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X250cGF0aC5weQpAQCAtMzA2LDYgKzMwNiw0MCBAQAogICAgICAgICAgICAgICAgICAgICAjIGRpYWxvZ3MgKCM0ODA0KQogICAgICAgICAgICAgICAgICAgICBudHBhdGguc2FtZW9wZW5maWxlKC0xLCAtMSkKIAorICAgIGRlZiB0ZXN0X2lzbW91bnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIkM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJjOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJDOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJcXFxcLlxcYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFwuXFxDOlxcIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJDOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiImM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJDOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXC5cXGM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXC5cXEM6XFwiKSkKKworICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShudHBhdGguaXNtb3VudChkKSkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBjdXJyZW50IGZvbGRlciBpc24ndCB0aGUgcm9vdCBmb2xkZXIKKyAgICAgICAgICAgICMgKG9yIGFueSBvdGhlciB2b2x1bWUgcm9vdCkuIFRoZSBkcml2ZS1yZWxhdGl2ZQorICAgICAgICAgICAgIyBsb2NhdGlvbnMgYmVsb3cgY2Fubm90IHRoZW4gcmVmZXIgdG8gbW91bnQgcG9pbnRzCisgICAgICAgICAgICAjCisgICAgICAgICAgICBkcml2ZSwgcGF0aCA9IG50cGF0aC5zcGxpdGRyaXZlKHN5cy5leGVjdXRhYmxlKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2Qob3MucGF0aC5kaXJuYW1lKHN5cy5leGVjdXRhYmxlKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShudHBhdGguaXNtb3VudChkcml2ZS5sb3dlcigpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGRyaXZlLnVwcGVyKCkpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFxsb2NhbGhvc3RcXGMkIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFxsb2NhbGhvc3RcXGMkXFwiKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXGxvY2FsaG9zdFxcYyQiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIlxcXFxsb2NhbGhvc3RcXGMkXFwiKSkKIAogY2xhc3MgTnRDb21tb25UZXN0KHRlc3RfZ2VuZXJpY3BhdGguQ29tbW9uVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHBhdGhtb2R1bGUgPSBudHBhdGgKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQppbmRleCA2Mzg0MzcwLi40Nzg1MTA3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CkBAIC00LDcgKzQsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBpZiBub3QgaGFzYXR0cihvcywgIm9wZW5wdHkiKToKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTm8gb3BlbnB0eSgpIGF2YWlsYWJsZS4iKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy5vcGVucHR5KCkgbm90IGF2YWlsYWJsZS4iKQogCiAKIGNsYXNzIE9wZW5wdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CmluZGV4IGZhNjA4YjkuLmFiNThhOTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQpAQCAtMSw4ICsxLDEwIEBACi1pbXBvcnQgb3BlcmF0b3IKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAorcHlfb3BlcmF0b3IgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ29wZXJhdG9yJywgYmxvY2tlZD1bJ19vcGVyYXRvciddKQorY19vcGVyYXRvciA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnb3BlcmF0b3InLCBmcmVzaD1bJ19vcGVyYXRvciddKQorCiBjbGFzcyBTZXExOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsc3QpOgogICAgICAgICBzZWxmLmxzdCA9IGxzdApAQCAtMzIsOCArMzQsOSBAQAogICAgICAgICByZXR1cm4gb3RoZXIgKiBzZWxmLmxzdAogCiAKLWNsYXNzIE9wZXJhdG9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgT3BlcmF0b3JUZXN0Q2FzZToKICAgICBkZWYgdGVzdF9sdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0LCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubHQoMSwgMCkpCkBAIC00NCw2ICs0Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sdCgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfbGUoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmxlKDEsIDApKQpAQCAtNTQsNiArNTgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubGUoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCkBAIC02Nyw2ICs3Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZXEoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X25lKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCkBAIC04MCw2ICs4Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZ2Uoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2UoMSwgMCkpCkBAIC05MCw2ICs5Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ2UoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2d0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ3QsIDFqLCAyaikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmd0KDEsIDApKQpAQCAtMTAwLDIyICsxMDgsMjYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5ndCgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfYWJzKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFicywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5hYnMoLTEpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmFicygxKSwgMSkKIAogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hZGQsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hZGQoMywgNCkgPT0gNykKIAogICAgIGRlZiB0ZXN0X2JpdHdpc2VfYW5kKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYW5kXykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuYW5kXygweGYsIDB4YSkgPT0gMHhhKQogCiAgICAgZGVmIHRlc3RfY29uY2F0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbmNhdCgncHknLCAndGhvbicpID09ICdweXRob24nKQpAQCAtMTI1LDEyICsxMzcsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQsIDEzLCAyOSkKIAogICAgIGRlZiB0ZXN0X2NvdW50T2Yoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb3VudE9mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvdW50T2YsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb3VudE9mKFsxLCAyLCAxLCAzLCAxLCA0XSwgMykgPT0gMSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvdW50T2YoWzEsIDIsIDEsIDMsIDEsIDRdLCA1KSA9PSAwKQogCiAgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gWzQsIDMsIDIsIDFdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsaXRlbSwgYSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhLCBOb25lKQpAQCAtMTM4LDMzICsxNTIsMzkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gWzQsIDIsIDFdKQogCiAgICAgZGVmIHRlc3RfZmxvb3JkaXYoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmZsb29yZGl2KDUsIDIpID09IDIpCiAKICAgICBkZWYgdGVzdF90cnVlZGl2KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IudHJ1ZWRpdiwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IudHJ1ZWRpdig1LCAyKSA9PSAyLjUpCiAKICAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSByYW5nZSgxMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIGEsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZXRpdGVtKGEsIDIpID09IDIpCiAKICAgICBkZWYgdGVzdF9pbmRleE9mKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleE9mLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaW5kZXhPZihbNCwgMywgMiwgMV0sIDMpID09IDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YsIFs0LCAzLCAyLCAxXSwgMCkKIAogICAgIGRlZiB0ZXN0X2ludmVydChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbnZlcnQsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaW52KDQpLCAtNSkKIAogICAgIGRlZiB0ZXN0X2xzaGlmdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubHNoaWZ0KDUsIDEpID09IDEwKQpAQCAtMTcyLDE2ICsxOTIsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IubHNoaWZ0LCAyLCAtMSkKIAogICAgIGRlZiB0ZXN0X21vZChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tb2QsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubW9kKDUsIDIpID09IDEpCiAKICAgICBkZWYgdGVzdF9tdWwoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubXVsLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubXVsKDUsIDIpID09IDEwKQogCiAgICAgZGVmIHRlc3RfbmVnKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmVnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm5lZywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5uZWcoNSksIC01KQpAQCAtMTkwLDExICsyMTMsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5uZWcoLTApLCAwKQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV9vcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5vcl8sIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5vcl8oMHhhLCAweDUpID09IDB4ZikKIAogICAgIGRlZiB0ZXN0X3BvcyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3MsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IucG9zKDUpLCA1KQpAQCAtMjAzLDE0ICsyMjgsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3MoLTApLCAwKQogCiAgICAgZGVmIHRlc3RfcG93KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3coMyw1KSwgMyoqNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX3Bvd19fKDMsNSksIDMqKjUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgMSwgMiwgMykKIAogICAgIGRlZiB0ZXN0X3JzaGlmdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucnNoaWZ0KDUsIDEpID09IDIpCkBAIC0yMTgsMTIgKzI0NCwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIDIsIC0xKQogCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb250YWlucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb250YWlucywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbnRhaW5zKHJhbmdlKDQpLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5jb250YWlucyhyYW5nZSg0KSwgNSkpCiAKICAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBsaXN0KHJhbmdlKDMpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSwgTm9uZSwgTm9uZSkKQEAgLTIzMiwxMSArMjYwLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEsIDQsIDIpCiAKICAgICBkZWYgdGVzdF9zdWIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zdWIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc3ViLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iuc3ViKDUsIDIpID09IDMpCiAKICAgICBkZWYgdGVzdF90cnV0aChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTI0OCwxMSArMjc4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IudHJ1dGgoW10pKQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV94b3Ioc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IueG9yLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IueG9yKDB4YiwgMHhjKSA9PSAweDcpCiAKICAgICBkZWYgdGVzdF9pcyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gYiA9ICd4eXpwZHEnCiAgICAgICAgIGMgPSBhWzozXSArIGJbMzpdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNfKQpAQCAtMjYwLDYgKzI5Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNfKGEsYykpCiAKICAgICBkZWYgdGVzdF9pc19ub3Qoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IGIgPSAneHl6cGRxJwogICAgICAgICBjID0gYVs6M10gKyBiWzM6XQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzX25vdCkKQEAgLTI2Nyw2ICszMDAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNfbm90KGEsYykpCiAKICAgICBkZWYgdGVzdF9hdHRyZ2V0dGVyKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGEgPSBBKCkKQEAgLTMxNiw2ICszNTAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksICgnYXJ0aHVyJywgJ3Rob21hcycsICdqb2huc29uJykpCiAKICAgICBkZWYgdGVzdF9pdGVtZ2V0dGVyKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSAnQUJDREUnCiAgICAgICAgIGYgPSBvcGVyYXRvci5pdGVtZ2V0dGVyKDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgJ0MnKQpAQCAtMzUwLDEyICszODUsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pdGVtZ2V0dGVyKDIsICd4JywgNSksIGRhdGEpCiAKICAgICBkZWYgdGVzdF9tZXRob2RjYWxsZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tZXRob2RjYWxsZXIpCiAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICBkZWYgZm9vKHNlbGYsICphcmdzLCAqKmt3ZHMpOgogICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWzBdICsgYXJnc1sxXQogICAgICAgICAgICAgZGVmIGJhcihzZWxmLCBmPTQyKToKICAgICAgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICAgICAgZGVmIGJheigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICAgICByZXR1cm4ga3dkc1snbmFtZSddLCBrd2RzWydzZWxmJ10KICAgICAgICAgYSA9IEEoKQogICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdmb28nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBmLCBhKQpAQCAtMzY2LDggKzQwNCwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEsIGEpCiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2JhcicsIGY9NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCA1KQorICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdiYXonLCBuYW1lPSdzcGFtJywgc2VsZj0nZWdncycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgKCdzcGFtJywgJ2VnZ3MnKSkKIAogICAgIGRlZiB0ZXN0X2lucGxhY2Uoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9faWFkZF9fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gImlhZGQiCiAgICAgICAgICAgICBkZWYgX19pYW5kX18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWFuZCIKQEAgLTM5NiwzNyArNDM3LDQ4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXRydWVkaXYgKGMsIDUpLCAiaXRydWVkaXYiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLml4b3IgICAgIChjLCA1KSwgIml4b3IiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmljb25jYXQgIChjLCBjKSwgImlhZGQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWFkZF9fICAgICAoYywgNSksICJpYWRkIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lhbmRfXyAgICAgKGMsIDUpLCAiaWFuZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pZmxvb3JkaXZfXyhjLCA1KSwgImlmbG9vcmRpdiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pbHNoaWZ0X18gIChjLCA1KSwgImlsc2hpZnQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faW1vZF9fICAgICAoYywgNSksICJpbW9kIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2ltdWxfXyAgICAgKGMsIDUpLCAiaW11bCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pb3JfXyAgICAgIChjLCA1KSwgImlvciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pcG93X18gICAgIChjLCA1KSwgImlwb3ciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXJzaGlmdF9fICAoYywgNSksICJpcnNoaWZ0IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lzdWJfXyAgICAgKGMsIDUpLCAiaXN1YiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pdHJ1ZWRpdl9fIChjLCA1KSwgIml0cnVlZGl2IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2l4b3JfXyAgICAgKGMsIDUpLCAiaXhvciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pY29uY2F0X18gIChjLCBjKSwgImlhZGQiKQogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgaW1wb3J0IHN5cwotICAgIHRlc3RfY2xhc3NlcyA9ICgKLSAgICAgICAgT3BlcmF0b3JUZXN0Q2FzZSwKLSAgICApCisgICAgZGVmIHRlc3RfbGVuZ3RoX2hpbnQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKIAotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgICAgICAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHR5cGUoc2VsZi52YWx1ZSkgaXMgdHlwZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi52YWx1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCiAKLSAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKLSAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKLSAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNvdW50cykpOgotICAgICAgICAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKLSAgICAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBwcmludChjb3VudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoW10sIDIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KGl0ZXIoWzEsIDIsIDNdKSksIDMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKDIpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKE5vdEltcGxlbWVudGVkKSwgNCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoWChUeXBlRXJyb3IpLCAxMiksIDEyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBvcGVyYXRvci5sZW5ndGhfaGludChYKCJhYmMiKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoLTIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKExvb2t1cEVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoTG9va3VwRXJyb3IpKQorCisgICAgZGVmIHRlc3RfZHVuZGVyX2lzX29yaWdpbmFsKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCisKKyAgICAgICAgbmFtZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBkaXIob3BlcmF0b3IpIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoJ18nKV0KKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBvcmlnID0gZ2V0YXR0cihvcGVyYXRvciwgbmFtZSkKKyAgICAgICAgICAgIGR1bmRlciA9IGdldGF0dHIob3BlcmF0b3IsICdfXycgKyBuYW1lLnN0cmlwKCdfJykgKyAnX18nLCBOb25lKQorICAgICAgICAgICAgaWYgZHVuZGVyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZHVuZGVyLCBvcmlnKQorCitjbGFzcyBQeU9wZXJhdG9yVGVzdENhc2UoT3BlcmF0b3JUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHB5X29wZXJhdG9yCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfb3BlcmF0b3IsICdyZXF1aXJlcyBfb3BlcmF0b3InKQorY2xhc3MgQ09wZXJhdG9yVGVzdENhc2UoT3BlcmF0b3JUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IGNfb3BlcmF0b3IKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weSBiL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKaW5kZXggZWFlZTUwNC4uM2M4YzYxMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CkBAIC03MzAsNyArNzMwLDcgQEAKICAgICBkZWYgdGVzdF9zaG9ydF9hbmRfbG9uZ19vcHRpb25fc3BsaXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgInh5eiIsICItLWZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICd4eXonLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IFsiYmFyIl19LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCiAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fc3BsaXRfbG9uZ19vcHRpb25fYXBwZW5kKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLWZvbz1iYXIiLCAiLWIiLCAiMTIzIiwgIi0tZm9vIiwgImJheiJdLApAQCAtNzQwLDE1ICs3NDAsMTUgQEAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fc3BsaXRfb25lX3Bvc2l0aW9uYWxfYXJnKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYSIsICJmb28iLCAiYmFyIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiZm9vIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBOb25lfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiYmFyIl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJiYXIiXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9jb25zdW1lc19zZXBhcmF0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgIi0tIiwgImZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICItLSIsICdib28nOiBOb25lLCAnZm9vJzogTm9uZX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSkKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiLS0iLCAiLS1mb28iLCAiYmFyIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiLS0iLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IFsiYmFyIl19LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCiAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fam9pbmVkX2FuZF9zZXBhcmF0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hYiIsICItLSIsICItLWZvbyIsICJiYXIiXSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkgYi9MaWIvdGVzdC90ZXN0X29zLnB5CmluZGV4IGQ3MGEwYWUuLjUwMjQwOTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcy5weQpAQCAtMjQsNiArMjQsOSBAQAogaW1wb3J0IHN0YXQKIGltcG9ydCBsb2NhbGUKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBkZWNpbWFsCitpbXBvcnQgZnJhY3Rpb25zCitpbXBvcnQgcGlja2xlCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMzIsNiArMzUsMTAgQEAKICAgICBpbXBvcnQgcmVzb3VyY2UKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICByZXNvdXJjZSA9IE5vbmUKK3RyeToKKyAgICBpbXBvcnQgZmNudGwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmY250bCA9IE5vbmUKIAogZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIApAQCAtMjU2LDYgKzI2MywxMyBAQAogICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0YXRfYXR0cmlidXRlcyhmbmFtZSkKIAorICAgIGRlZiB0ZXN0X3N0YXRfcmVzdWx0X3BpY2tsZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gb3Muc3RhdChzZWxmLmZuYW1lKQorICAgICAgICBwID0gcGlja2xlLmR1bXBzKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1x4MDNjb3NcbnN0YXRfcmVzdWx0XG4nLCBwKQorICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHVucGlja2xlZCkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzdGF0dmZzJyksICd0ZXN0IG5lZWRzIG9zLnN0YXR2ZnMoKScpCiAgICAgZGVmIHRlc3Rfc3RhdHZmc19hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0yNjMsNyArMjc3LDcgQEAKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICMgT24gQXRoZU9TLCBnbGliYyBhbHdheXMgcmV0dXJucyBFTk9TWVMKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1lTOgotICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2dsaWJjIGFsd2F5cyByZXR1cm5zIEVOT1NZUyBvbiBBdGhlT1MnKQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ29zLnN0YXR2ZnMoKSBmYWlsZWQgd2l0aCBFTk9TWVMnKQogCiAgICAgICAgICMgTWFrZSBzdXJlIGRpcmVjdCBhY2Nlc3Mgd29ya3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZl9iZnJlZSwgcmVzdWx0WzNdKQpAQCAtMzAwLDYgKzMxNCwyMSBAQAogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcGFzcwogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3N0YXR2ZnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZCBvcy5zdGF0dmZzKCkiKQorICAgIGRlZiB0ZXN0X3N0YXR2ZnNfcmVzdWx0X3BpY2tsZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gb3Muc3RhdHZmcyhzZWxmLmZuYW1lKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgIyBPbiBBdGhlT1MsIGdsaWJjIGFsd2F5cyByZXR1cm5zIEVOT1NZUworICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnb3Muc3RhdHZmcygpIGZhaWxlZCB3aXRoIEVOT1NZUycpCisKKyAgICAgICAgcCA9IHBpY2tsZS5kdW1wcyhyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidceDAzY29zXG5zdGF0dmZzX3Jlc3VsdFxuJywgcCkKKyAgICAgICAgdW5waWNrbGVkID0gcGlja2xlLmxvYWRzKHApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB1bnBpY2tsZWQpCisKICAgICBkZWYgdGVzdF91dGltZV9kaXIoc2VsZik6CiAgICAgICAgIGRlbHRhID0gMTAwMDAwMAogICAgICAgICBzdCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pCkBAIC00NzgsOSArNTA3LDkgQEAKICAgICAgICAgIyBWZXJpZnkgdGhhdCBhbiBvcGVuIGZpbGUgY2FuIGJlIHN0YXQnZWQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Muc3RhdChyImM6XHBhZ2VmaWxlLnN5cyIpCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gMjogIyBmaWxlIGRvZXMgbm90IGV4aXN0OyBjYW5ub3QgcnVuIHRlc3QKLSAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KHInYzpccGFnZWZpbGUuc3lzIGRvZXMgbm90IGV4aXN0JykKKyAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdChyJ2M6XHBhZ2VmaWxlLnN5cyBkb2VzIG5vdCBleGlzdCcpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvdWxkIG5vdCBzdGF0IHBhZ2VmaWxlLnN5cyIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKQEAgLTg3Niw2ICs5MDUsMTcgQEAKICAgICAgICAgb3MubWFrZWRpcnMocGF0aCwgbW9kZT1tb2RlLCBleGlzdF9vaz1UcnVlKQogICAgICAgICBvcy51bWFzayhvbGRfbWFzaykKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdjaG93bicpLCAndGVzdCBuZWVkcyBvcy5jaG93bicpCisgICAgZGVmIHRlc3RfY2hvd25fdWlkX2dpZF9hcmd1bWVudHNfbXVzdF9iZV9pbmRleChzZWxmKToKKyAgICAgICAgc3RhdCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHVpZCA9IHN0YXQuc3RfdWlkCisgICAgICAgIGdpZCA9IHN0YXQuc3RfZ2lkCisgICAgICAgIGZvciB2YWx1ZSBpbiAoLTEuMCwgLTFqLCBkZWNpbWFsLkRlY2ltYWwoLTEpLCBmcmFjdGlvbnMuRnJhY3Rpb24oLTIsIDIpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3MuY2hvd24sIHN1cHBvcnQuVEVTVEZOLCB2YWx1ZSwgZ2lkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5jaG93biwgc3VwcG9ydC5URVNURk4sIHVpZCwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG9zLmNob3duKHN1cHBvcnQuVEVTVEZOLCB1aWQsIGdpZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG9zLmNob3duKHN1cHBvcnQuVEVTVEZOLCAtMSwgLTEpKQorCiAgICAgZGVmIHRlc3RfZXhpc3Rfb2tfc19pc2dpZF9kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sICdkaXIxJykKICAgICAgICAgU19JU0dJRCA9IHN0YXQuU19JU0dJRApAQCAtMTEzMywyNyArMTE3MywyNyBAQAogQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCiBjbGFzcyBXaW4zMkVycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5yZW5hbWUsIHN1cHBvcnQuVEVTVEZOLCBzdXBwb3J0LlRFU1RGTisiLmJhayIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnJlbmFtZSwgc3VwcG9ydC5URVNURk4sIHN1cHBvcnQuVEVTVEZOKyIuYmFrIikKIAogICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5yZW1vdmUsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5yZW1vdmUsIHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfY2hkaXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MuY2hkaXIsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5jaGRpciwgc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9ta2RpcihzZWxmKToKICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5ta2Rpciwgc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5ta2Rpciwgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIG9zLnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X3V0aW1lKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLnV0aW1lLCBzdXBwb3J0LlRFU1RGTiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MudXRpbWUsIHN1cHBvcnQuVEVTVEZOLCBOb25lKQogCiAgICAgZGVmIHRlc3RfY2htb2Qoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MuY2htb2QsIHN1cHBvcnQuVEVTVEZOLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5jaG1vZCwgc3VwcG9ydC5URVNURk4sIDApCiAKIGNsYXNzIFRlc3RJbnZhbGlkRkQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHNpbmdsZXMgPSBbImZjaGRpciIsICJkdXAiLCAiZmRvcGVuIiwgImZkYXRhc3luYyIsICJmc3RhdCIsCkBAIC0xMjg3LDQxICsxMzI3LDU3IEBACiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHVpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXR1aWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0dWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHVpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldHVpZCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0dWlkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRnaWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0Z2lkKCknKQogICAgIGRlZiB0ZXN0X3NldGdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0Z2lkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0Z2lkLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRnaWQsIDE8PDMyKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldGV1aWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0ZXVpZCgpJykKICAgICBkZWYgdGVzdF9zZXRldWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGV1aWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRldWlkLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRldWlkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRlZ2lkJyksICd0ZXN0IG5lZWRzIG9zLnNldGVnaWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0ZWdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0ZWdpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldGVnaWQsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldGVnaWQsIDE8PDMyKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHJldWlkJyksICd0ZXN0IG5lZWRzIG9zLnNldHJldWlkKCknKQogICAgIGRlZiB0ZXN0X3NldHJldWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHJldWlkLCAwLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0cmV1aWQsIDAsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJldWlkLCAxPDwzMiwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmV1aWQsIDAsIDE8PDMyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHJldWlkJyksICd0ZXN0IG5lZWRzIG9zLnNldHJldWlkKCknKQorICAgIGRlZiB0ZXN0X3NldHJldWlkX25lZzEoc2VsZik6CisgICAgICAgICMgTmVlZHMgdG8gYWNjZXB0IC0xLiAgV2UgcnVuIHRoaXMgaW4gYSBzdWJwcm9jZXNzIHRvIGF2b2lkCisgICAgICAgICMgYWx0ZXJpbmcgdGhlIHRlc3QgcnVubmVyJ3MgcHJvY2VzcyBzdGF0ZSAoaXNzdWU4MDQ1KS4KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZXVpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRyZWdpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRyZWdpZCgpJykKICAgICBkZWYgdGVzdF9zZXRyZWdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0cmVnaWQsIDAsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRyZWdpZCwgMCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmVnaWQsIDE8PDMyLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRyZWdpZCwgMCwgMTw8MzIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0cmVnaWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0cmVnaWQoKScpCisgICAgZGVmIHRlc3Rfc2V0cmVnaWRfbmVnMShzZWxmKToKKyAgICAgICAgIyBOZWVkcyB0byBhY2NlcHQgLTEuICBXZSBydW4gdGhpcyBpbiBhIHN1YnByb2Nlc3MgdG8gYXZvaWQKKyAgICAgICAgIyBhbHRlcmluZyB0aGUgdGVzdCBydW5uZXIncyBwcm9jZXNzIHN0YXRlIChpc3N1ZTgwNDUpLgorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWworICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICdpbXBvcnQgb3Msc3lzO29zLnNldHJlZ2lkKC0xLC0xKTtzeXMuZXhpdCgwKSddKQorCiBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiUG9zaXggc3BlY2lmaWMgdGVzdHMiKQogY2xhc3MgUGVwMzgzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE1MTEsNiArMTU2Nyw1MiBAQAogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQorY2xhc3MgV2luMzJMaXN0ZGlyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgbGlzdGRpciBvbiBXaW5kb3dzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgIGRpcl9uYW1lID0gJ1NVQiVkJyAlIGkKKyAgICAgICAgICAgIGRpcl9wYXRoID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCBkaXJfbmFtZSkKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9ICdGSUxFJWQnICUgaQorICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCBmaWxlX25hbWUpCisgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJfcGF0aCkKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJJJ20gJXMgYW5kIHByb3VkIG9mIGl0LiBCbGFtZSB0ZXN0X29zLlxuIiAlIGZpbGVfcGF0aCkKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocy5leHRlbmQoW2Rpcl9uYW1lLCBmaWxlX25hbWVdKQorICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMuc29ydCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9saXN0ZGlyX25vX2V4dGVuZGVkX3BhdGgoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2hlbiB0aGUgcGF0aCBpcyBub3QgYW4gImV4dGVuZGVkIiBwYXRoLiIiIgorICAgICAgICAjIHVuaWNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzb3J0ZWQob3MubGlzdGRpcihzdXBwb3J0LlRFU1RGTikpLAorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocykKKyAgICAgICAgIyBieXRlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKG9zLmZzZW5jb2RlKHN1cHBvcnQuVEVTVEZOKSkpLAorICAgICAgICAgICAgICAgIFtvcy5mc2VuY29kZShwYXRoKSBmb3IgcGF0aCBpbiBzZWxmLmNyZWF0ZWRfcGF0aHNdKQorCisgICAgZGVmIHRlc3RfbGlzdGRpcl9leHRlbmRlZF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdoZW4gdGhlIHBhdGggc3RhcnRzIHdpdGggJ1xcXFw/XFwnLiIiIgorICAgICAgICAjIFNlZTogaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM2NTI0Nyh2PXZzLjg1KS5hc3B4I21heHBhdGgKKyAgICAgICAgIyB1bmljb2RlCisgICAgICAgIHBhdGggPSAnXFxcXD9cXCcgKyBvcy5wYXRoLmFic3BhdGgoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIocGF0aCkpLAorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocykKKyAgICAgICAgIyBieXRlcworICAgICAgICBwYXRoID0gYidcXFxcP1xcJyArIG9zLmZzZW5jb2RlKG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIocGF0aCkpLAorICAgICAgICAgICAgICAgIFtvcy5mc2VuY29kZShwYXRoKSBmb3IgcGF0aCBpbiBzZWxmLmNyZWF0ZWRfcGF0aHNdKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQogQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluawogY2xhc3MgV2luMzJTeW1saW5rVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGZpbGVsaW5rID0gJ2ZpbGVsaW5rdGVzdCcKQEAgLTIxNzUsNiArMjI3NywxOTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQogCiAKK2NsYXNzIE9TRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjbGFzcyBTdHIoc3RyKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmJ5dGVzX2ZpbGVuYW1lcyA9IFtdCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMgPSBbXQorICAgICAgICBpZiBzdXBwb3J0LlRFU1RGTl9VTkVOQ09EQUJMRSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlY29kZWQgPSBzdXBwb3J0LlRFU1RGTl9VTkVOQ09EQUJMRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVjb2RlZCA9IHN1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMuYXBwZW5kKGRlY29kZWQpCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMuYXBwZW5kKFN0cihkZWNvZGVkKSkKKyAgICAgICAgaWYgc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBlbmNvZGVkID0gc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVuY29kZWQgPSBvcy5mc2VuY29kZShzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5ieXRlc19maWxlbmFtZXMuYXBwZW5kKGVuY29kZWQpCisgICAgICAgIHNlbGYuYnl0ZXNfZmlsZW5hbWVzLmFwcGVuZChtZW1vcnl2aWV3KGVuY29kZWQpKQorCisgICAgICAgIHNlbGYuZmlsZW5hbWVzID0gc2VsZi5ieXRlc19maWxlbmFtZXMgKyBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzCisKKyAgICBkZWYgdGVzdF9vc2Vycm9yX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBmdW5jcyA9IFsKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MuY2hkaXIsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MuY2htb2QsIDBvNzc3KSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubHN0YXQsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Mub3Blbiwgb3MuT19SRE9OTFkpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5ybWRpciwpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5zdGF0LCksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnVubGluaywpLAorICAgICAgICBdCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgZnVuY3MuZXh0ZW5kKCgKKyAgICAgICAgICAgICAgICAoc2VsZi5ieXRlc19maWxlbmFtZXMsIG9zLnJlbmFtZSwgYiJkc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5ieXRlc19maWxlbmFtZXMsIG9zLnJlcGxhY2UsIGIiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLnJlbmFtZSwgImRzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5yZXBsYWNlLCAiZHN0IiksCisgICAgICAgICAgICAgICAgIyBJc3N1ZSAjMTY0MTQ6IERvbid0IHRlc3QgdW5kZWNvZGFibGUgbmFtZXMgd2l0aCBsaXN0ZGlyKCkKKyAgICAgICAgICAgICAgICAjIGJlY2F1c2Ugb2YgYSBXaW5kb3dzIGJ1Zy4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBXaXRoIHRoZSBBTlNJIGNvZGUgcGFnZSA5MzIsIG9zLmxpc3RkaXIoYidceGU3JykgcmV0dXJuIGFuCisgICAgICAgICAgICAgICAgIyBlbXB0eSBsaXN0IChpbnN0ZWFkIG9mIGZhaWxpbmcpLCB3aGVyZWFzIG9zLmxpc3RkaXIoYidceGZmJykKKyAgICAgICAgICAgICAgICAjIHJhaXNlcyBhIEZpbGVOb3RGb3VuZEVycm9yLiBJdCBsb29rcyBsaWtlIGEgV2luZG93cyBidWc6CisgICAgICAgICAgICAgICAgIyBiJ1x4ZTcnIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgRmluZEZpcnN0RmlsZUEoYidceGU3JykKKyAgICAgICAgICAgICAgICAjIGZhaWxzIHdpdGggRVJST1JfRklMRV9OT1RfRk9VTkQgKDIpLCBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgIyBFUlJPUl9QQVRIX05PVF9GT1VORCAoMykuCisgICAgICAgICAgICAgICAgKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLmxpc3RkaXIsKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdW5jcy5leHRlbmQoKAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubGlzdGRpciwpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MucmVuYW1lLCAiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5yZXBsYWNlLCAiZHN0IiksCisgICAgICAgICAgICApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiY2hvd24iKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmNob3duLCAwLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxjaG93biIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGNob3duLCAwLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInRydW5jYXRlIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy50cnVuY2F0ZSwgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJjaGZsYWdzIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5jaGZsYWdzLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxjaGZsYWdzIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5sY2hmbGFncywgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJjaHJvb3QiKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmNocm9vdCwpKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGluayIpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmJ5dGVzX2ZpbGVuYW1lcywgb3MubGluaywgYiJkc3QiKSkKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLmxpbmssICJkc3QiKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGluaywgImRzdCIpKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGlzdHhhdHRyIik6CisgICAgICAgICAgICBmdW5jcy5leHRlbmQoKAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubGlzdHhhdHRyLCksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5nZXR4YXR0ciwgInVzZXIudGVzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Muc2V0eGF0dHIsICJ1c2VyLnRlc3QiLCBiJ3VzZXInKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnJlbW92ZXhhdHRyLCAidXNlci50ZXN0IiksCisgICAgICAgICAgICApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGNobW9kIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5sY2htb2QsIDBvNzc3KSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInJlYWRsaW5rIik6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLnJlYWRsaW5rLCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLnJlYWRsaW5rLCkpCisKKyAgICAgICAgZm9yIGZpbGVuYW1lcywgZnVuYywgKmZ1bmNfYXJncyBpbiBmdW5jczoKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZ1bmMobmFtZSwgKmZ1bmNfYXJncykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLmZpbGVuYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gZXhjZXB0aW9uIHRocm93biBieSB7fSIuZm9ybWF0KGZ1bmMpKQorCitjbGFzcyBDUFVDb3VudFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jcHVfY291bnQoc2VsZik6CisgICAgICAgIGNwdXMgPSBvcy5jcHVfY291bnQoKQorICAgICAgICBpZiBjcHVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNwdXMsIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihjcHVzLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IGRldGVybWluZSB0aGUgbnVtYmVyIG9mIENQVXMiKQorCisKK2NsYXNzIEZESW5oZXJpdGFuY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZ2V0X3NldF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBGYWxzZSkKKworICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoZmNudGwgaXMgTm9uZSwgIm5lZWQgZmNudGwiKQorICAgIGRlZiB0ZXN0X2dldF9pbmhlcml0YWJsZV9jbG9leGVjKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIEZhbHNlKQorCisgICAgICAgICMgY2xlYXIgRkRfQ0xPRVhFQyBmbGFnCisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpCisgICAgICAgIGZsYWdzICY9IH5mY250bC5GRF9DTE9FWEVDCisgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZELCBmbGFncykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9zZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZEX0NMT0VYRUMpCisKKyAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCkKKworICAgIGRlZiB0ZXN0X29wZW4oc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgRmFsc2UpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAncGlwZScpLCAibmVlZCBvcy5waXBlKCkiKQorICAgIGRlZiB0ZXN0X3BpcGUoc2VsZik6CisgICAgICAgIHJmZCwgd2ZkID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcmZkKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHdmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUocmZkKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKHdmZCksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfZHVwKHNlbGYpOgorICAgICAgICBmZDEgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZDEpCisKKyAgICAgICAgZmQyID0gb3MuZHVwKGZkMSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkMiksIEZhbHNlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2R1cDInKSwgIm5lZWQgb3MuZHVwMigpIikKKyAgICBkZWYgdGVzdF9kdXAyKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorCisgICAgICAgICMgaW5oZXJpdGFibGUgYnkgZGVmYXVsdAorICAgICAgICBmZDIgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZHVwMihmZCwgZmQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQyKSwgVHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkMikKKworICAgICAgICAjIGZvcmNlIG5vbi1pbmhlcml0YWJsZQorICAgICAgICBmZDMgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZHVwMihmZCwgZmQzLCBpbmhlcml0YWJsZT1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkMyksIEZhbHNlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQzKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ29wZW5wdHknKSwgIm5lZWQgb3Mub3BlbnB0eSgpIikKKyAgICBkZWYgdGVzdF9vcGVucHR5KHNlbGYpOgorICAgICAgICBtYXN0ZXJfZmQsIHNsYXZlX2ZkID0gb3Mub3BlbnB0eSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgbWFzdGVyX2ZkKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHNsYXZlX2ZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoc2xhdmVfZmQpLCBGYWxzZSkKKworCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKQEAgLTIxOTIsNiArMjQ4NSw3IEBACiAgICAgICAgIFBvc2l4VWlkR2lkVGVzdHMsCiAgICAgICAgIFBlcDM4M1Rlc3RzLAogICAgICAgICBXaW4zMktpbGxUZXN0cywKKyAgICAgICAgV2luMzJMaXN0ZGlyVGVzdHMsCiAgICAgICAgIFdpbjMyU3ltbGlua1Rlc3RzLAogICAgICAgICBOb25Mb2NhbFN5bWxpbmtUZXN0cywKICAgICAgICAgRlNFbmNvZGluZ1Rlc3RzLApAQCAtMjIwNCw3ICsyNDk4LDEwIEBACiAgICAgICAgIEV4dGVuZGVkQXR0cmlidXRlVGVzdHMsCiAgICAgICAgIFdpbjMyRGVwcmVjYXRlZEJ5dGVzQVBJLAogICAgICAgICBUZXJtc2l6ZVRlc3RzLAorICAgICAgICBPU0Vycm9yVGVzdHMsCiAgICAgICAgIFJlbW92ZURpcnNUZXN0cywKKyAgICAgICAgQ1BVQ291bnRUZXN0cywKKyAgICAgICAgRkRJbmhlcml0YW5jZVRlc3RzLAogICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkgYi9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CmluZGV4IDM5MDhhMDUuLmM5ZTJhMjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQpAQCAtNDQsNyArNDQsNyBAQAogICAgIGRlZiBwbGF5X3NvdW5kX2ZpbGUoc2VsZiwgZGF0YSwgcmF0ZSwgc3NpemUsIG5jaGFubmVscyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRzcCA9IG9zc2F1ZGlvZGV2Lm9wZW4oJ3cnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIGlmIG1zZy5hcmdzWzBdIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVOT0VOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChtc2cpCkBAIC0xOTAsNyArMTkwLDcgQEAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0cnk6CiAgICAgICAgIGRzcCA9IG9zc2F1ZGlvZGV2Lm9wZW4oJ3cnKQotICAgIGV4Y2VwdCAob3NzYXVkaW9kZXYuZXJyb3IsIElPRXJyb3IpIGFzIG1zZzoKKyAgICBleGNlcHQgKG9zc2F1ZGlvZGV2LmVycm9yLCBPU0Vycm9yKSBhcyBtc2c6CiAgICAgICAgIGlmIG1zZy5hcmdzWzBdIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVOT0VOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0RFViwgZXJybm8uRUJVU1kpOgogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QobXNnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wYXRobGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wYXRobGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNjhmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3BhdGhsaWIucHkKQEAgLTAsMCArMSwxODQwIEBACitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBwYXRobGliCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKKworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitURVNURk4gPSBzdXBwb3J0LlRFU1RGTgorCit0cnk6CisgICAgaW1wb3J0IGdycCwgcHdkCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ3JwID0gcHdkID0gTm9uZQorCisKK2NsYXNzIF9CYXNlRmxhdm91clRlc3Qob2JqZWN0KToKKworICAgIGRlZiBfY2hlY2tfcGFyc2VfcGFydHMoc2VsZiwgYXJnLCBleHBlY3RlZCk6CisgICAgICAgIGYgPSBzZWxmLmZsYXZvdXIucGFyc2VfcGFydHMKKyAgICAgICAgc2VwID0gc2VsZi5mbGF2b3VyLnNlcAorICAgICAgICBhbHRzZXAgPSBzZWxmLmZsYXZvdXIuYWx0c2VwCisgICAgICAgIGFjdHVhbCA9IGYoW3gucmVwbGFjZSgnLycsIHNlcCkgZm9yIHggaW4gYXJnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICBpZiBhbHRzZXA6CisgICAgICAgICAgICBhY3R1YWwgPSBmKFt4LnJlcGxhY2UoJy8nLCBhbHRzZXApIGZvciB4IGluIGFyZ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9wYXJ0c19jb21tb24oc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfcGFyc2VfcGFydHMKKyAgICAgICAgc2VwID0gc2VsZi5mbGF2b3VyLnNlcAorICAgICAgICAjIFVuYW5jaG9yZWQgcGFydHMKKyAgICAgICAgY2hlY2soW10sICAgICAgICAgICAgICAgICAgICgnJywgJycsIFtdKSkKKyAgICAgICAgY2hlY2soWydhJ10sICAgICAgICAgICAgICAgICgnJywgJycsIFsnYSddKSkKKyAgICAgICAgY2hlY2soWydhLyddLCAgICAgICAgICAgICAgICgnJywgJycsIFsnYSddKSkKKyAgICAgICAgY2hlY2soWydhJywgJ2InXSwgICAgICAgICAgICgnJywgJycsIFsnYScsICdiJ10pKQorICAgICAgICAjIEV4cGFuc2lvbgorICAgICAgICBjaGVjayhbJ2EvYiddLCAgICAgICAgICAgICAgKCcnLCAnJywgWydhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnYS9iLyddLCAgICAgICAgICAgICAoJycsICcnLCBbJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWydhJywgJ2IvYycsICdkJ10sICAgICgnJywgJycsIFsnYScsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgIyBDb2xsYXBzaW5nIGFuZCBzdHJpcHBpbmcgZXhjZXNzIHNsYXNoZXMKKyAgICAgICAgY2hlY2soWydhJywgJ2IvL2MnLCAnZCddLCAgICgnJywgJycsIFsnYScsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgY2hlY2soWydhJywgJ2IvYy8nLCAnZCddLCAgICgnJywgJycsIFsnYScsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgIyBFbGltaW5hdGluZyBzdGFuZGFsb25lIGRvdHMKKyAgICAgICAgY2hlY2soWycuJ10sICAgICAgICAgICAgICAgICgnJywgJycsIFtdKSkKKyAgICAgICAgY2hlY2soWycuJywgJy4nLCAnYiddLCAgICAgICgnJywgJycsIFsnYiddKSkKKyAgICAgICAgY2hlY2soWydhJywgJy4nLCAnYiddLCAgICAgICgnJywgJycsIFsnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnLicsICcuJ10sICAgICAgKCcnLCAnJywgWydhJ10pKQorICAgICAgICAjIFRoZSBmaXJzdCBwYXJ0IGlzIGFuY2hvcmVkCisgICAgICAgIGNoZWNrKFsnL2EvYiddLCAgICAgICAgICAgICAoJycsIHNlcCwgW3NlcCwgJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWycvYScsICdiJ10sICAgICAgICAgICgnJywgc2VwLCBbc2VwLCAnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJy9hLycsICdiJ10sICAgICAgICAgKCcnLCBzZXAsIFtzZXAsICdhJywgJ2InXSkpCisgICAgICAgICMgSWdub3JpbmcgcGFydHMgYmVmb3JlIGFuIGFuY2hvcmVkIHBhcnQKKyAgICAgICAgY2hlY2soWydhJywgJy9iJywgJ2MnXSwgICAgICgnJywgc2VwLCBbc2VwLCAnYicsICdjJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnL2InLCAnL2MnXSwgICAgKCcnLCBzZXAsIFtzZXAsICdjJ10pKQorCisKK2NsYXNzIFBvc2l4Rmxhdm91clRlc3QoX0Jhc2VGbGF2b3VyVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGZsYXZvdXIgPSBwYXRobGliLl9wb3NpeF9mbGF2b3VyCisKKyAgICBkZWYgdGVzdF9wYXJzZV9wYXJ0cyhzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLl9jaGVja19wYXJzZV9wYXJ0cworICAgICAgICAjIENvbGxhcHNpbmcgb2YgZXhjZXNzIGxlYWRpbmcgc2xhc2hlcywgZXhjZXB0IGZvciB0aGUgZG91YmxlLXNsYXNoCisgICAgICAgICMgc3BlY2lhbCBjYXNlLgorICAgICAgICBjaGVjayhbJy8vYScsICdiJ10sICAgICAgICAgICAgICgnJywgJy8vJywgWycvLycsICdhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnLy8vYScsICdiJ10sICAgICAgICAgICAgKCcnLCAnLycsIFsnLycsICdhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnLy8vL2EnLCAnYiddLCAgICAgICAgICAgKCcnLCAnLycsIFsnLycsICdhJywgJ2InXSkpCisgICAgICAgICMgUGF0aHMgd2hpY2ggbG9vayBsaWtlIE5UIHBhdGhzIGFyZW4ndCB0cmVhdGVkIHNwZWNpYWxseQorICAgICAgICBjaGVjayhbJ2M6YSddLCAgICAgICAgICAgICAgICAgICgnJywgJycsIFsnYzphJ10pKQorICAgICAgICBjaGVjayhbJ2M6XFxhJ10sICAgICAgICAgICAgICAgICgnJywgJycsIFsnYzpcXGEnXSkpCisgICAgICAgIGNoZWNrKFsnXFxhJ10sICAgICAgICAgICAgICAgICAgKCcnLCAnJywgWydcXGEnXSkpCisKKyAgICBkZWYgdGVzdF9zcGxpdHJvb3Qoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZsYXZvdXIuc3BsaXRyb290CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignJyksICgnJywgJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdhJyksICgnJywgJycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYS9iJyksICgnJywgJycsICdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdhL2IvJyksICgnJywgJycsICdhL2IvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignL2EnKSwgKCcnLCAnLycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignL2EvYicpLCAoJycsICcvJywgJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy9hL2IvJyksICgnJywgJy8nLCAnYS9iLycpKQorICAgICAgICAjIFRoZSByb290IGlzIGNvbGxhcHNlZCB3aGVuIHRoZXJlIGFyZSByZWR1bmRhbnQgc2xhc2hlcworICAgICAgICAjIGV4Y2VwdCB3aGVuIHRoZXJlIGFyZSBleGFjdGx5IHR3byBsZWFkaW5nIHNsYXNoZXMsIHdoaWNoCisgICAgICAgICMgaXMgYSBzcGVjaWFsIGNhc2UgaW4gUE9TSVguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignLy9hJyksICgnJywgJy8vJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvLy9hJyksICgnJywgJy8nLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy8vL2EvYicpLCAoJycsICcvJywgJ2EvYicpKQorICAgICAgICAjIFBhdGhzIHdoaWNoIGxvb2sgbGlrZSBOVCBwYXRocyBhcmVuJ3QgdHJlYXRlZCBzcGVjaWFsbHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOi9hL2InKSwgKCcnLCAnJywgJ2M6L2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcL2EvYicpLCAoJycsICcnLCAnXFwvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxhXFxiJyksICgnJywgJycsICdcXGFcXGInKSkKKworCitjbGFzcyBOVEZsYXZvdXJUZXN0KF9CYXNlRmxhdm91clRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBmbGF2b3VyID0gcGF0aGxpYi5fd2luZG93c19mbGF2b3VyCisKKyAgICBkZWYgdGVzdF9wYXJzZV9wYXJ0cyhzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLl9jaGVja19wYXJzZV9wYXJ0cworICAgICAgICAjIEZpcnN0IHBhcnQgaXMgYW5jaG9yZWQKKyAgICAgICAgY2hlY2soWydjOiddLCAgICAgICAgICAgICAgICAgICAoJ2M6JywgJycsIFsnYzonXSkpCisgICAgICAgIGNoZWNrKFsnYzpcXCddLCAgICAgICAgICAgICAgICAgKCdjOicsICdcXCcsIFsnYzpcXCddKSkKKyAgICAgICAgY2hlY2soWydcXCddLCAgICAgICAgICAgICAgICAgICAoJycsICdcXCcsIFsnXFwnXSkpCisgICAgICAgIGNoZWNrKFsnYzphJ10sICAgICAgICAgICAgICAgICAgKCdjOicsICcnLCBbJ2M6JywgJ2EnXSkpCisgICAgICAgIGNoZWNrKFsnYzpcXGEnXSwgICAgICAgICAgICAgICAgKCdjOicsICdcXCcsIFsnYzpcXCcsICdhJ10pKQorICAgICAgICBjaGVjayhbJ1xcYSddLCAgICAgICAgICAgICAgICAgICgnJywgJ1xcJywgWydcXCcsICdhJ10pKQorICAgICAgICAjIFVOQyBwYXRocworICAgICAgICBjaGVjayhbJ1xcXFxhXFxiJ10sICAgICAgICAgICAgICgnXFxcXGFcXGInLCAnXFwnLCBbJ1xcXFxhXFxiXFwnXSkpCisgICAgICAgIGNoZWNrKFsnXFxcXGFcXGJcXCddLCAgICAgICAgICAgKCdcXFxcYVxcYicsICdcXCcsIFsnXFxcXGFcXGJcXCddKSkKKyAgICAgICAgY2hlY2soWydcXFxcYVxcYlxcYyddLCAgICAgICAgICAoJ1xcXFxhXFxiJywgJ1xcJywgWydcXFxcYVxcYlxcJywgJ2MnXSkpCisgICAgICAgICMgU2Vjb25kIHBhcnQgaXMgYW5jaG9yZWQsIHNvIHRoYXQgdGhlIGZpcnN0IHBhcnQgaXMgaWdub3JlZAorICAgICAgICBjaGVjayhbJ2EnLCAnWjpiJywgJ2MnXSwgICAgICAgICgnWjonLCAnJywgWydaOicsICdiJywgJ2MnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdaOlxcYicsICdjJ10sICAgICAgKCdaOicsICdcXCcsIFsnWjpcXCcsICdiJywgJ2MnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdcXGInLCAnYyddLCAgICAgICAgKCcnLCAnXFwnLCBbJ1xcJywgJ2InLCAnYyddKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgY2hlY2soWydhJywgJ1xcXFxiXFxjJywgJ2QnXSwgICAoJ1xcXFxiXFxjJywgJ1xcJywgWydcXFxcYlxcY1xcJywgJ2QnXSkpCisgICAgICAgICMgQ29sbGFwc2luZyBhbmQgc3RyaXBwaW5nIGV4Y2VzcyBzbGFzaGVzCisgICAgICAgIGNoZWNrKFsnYScsICdaOlxcXFxiXFxcXGNcXCcsICdkXFwnXSwgKCdaOicsICdcXCcsIFsnWjpcXCcsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgY2hlY2soWydhJywgJ1xcXFxiXFxjXFxcXCcsICdkJ10sICgnXFxcXGJcXGMnLCAnXFwnLCBbJ1xcXFxiXFxjXFwnLCAnZCddKSkKKyAgICAgICAgIyBFeHRlbmRlZCBwYXRocworICAgICAgICBjaGVjayhbJ1xcXFw/XFxjOlxcJ10sICAgICAgICAgICgnXFxcXD9cXGM6JywgJ1xcJywgWydcXFxcP1xcYzpcXCddKSkKKyAgICAgICAgY2hlY2soWydcXFxcP1xcYzpcXGEnXSwgICAgICAgICAoJ1xcXFw/XFxjOicsICdcXCcsIFsnXFxcXD9cXGM6XFwnLCAnYSddKSkKKyAgICAgICAgIyBFeHRlbmRlZCBVTkMgcGF0aHMgKGZvcm1hdCBpcyAiXFw/XFVOQ1xzZXJ2ZXJcc2hhcmUiKQorICAgICAgICBjaGVjayhbJ1xcXFw/XFxVTkNcXGJcXGMnXSwgICAgICgnXFxcXD9cXFVOQ1xcYlxcYycsICdcXCcsIFsnXFxcXD9cXFVOQ1xcYlxcY1xcJ10pKQorICAgICAgICBjaGVjayhbJ1xcXFw/XFxVTkNcXGJcXGNcXGQnXSwgICgnXFxcXD9cXFVOQ1xcYlxcYycsICdcXCcsIFsnXFxcXD9cXFVOQ1xcYlxcY1xcJywgJ2QnXSkpCisKKyAgICBkZWYgdGVzdF9zcGxpdHJvb3Qoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZsYXZvdXIuc3BsaXRyb290CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignJyksICgnJywgJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdhJyksICgnJywgJycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYVxcYicpLCAoJycsICcnLCAnYVxcYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcYScpLCAoJycsICdcXCcsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxhXFxiJyksICgnJywgJ1xcJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOmFcXGInKSwgKCdjOicsICcnLCAnYVxcYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2M6XFxhXFxiJyksICgnYzonLCAnXFwnLCAnYVxcYicpKQorICAgICAgICAjIFJlZHVuZGFudCBzbGFzaGVzIGluIHRoZSByb290IGFyZSBjb2xsYXBzZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYScpLCAoJycsICdcXCcsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXFxcYS9iJyksICgnJywgJ1xcJywgJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2M6XFxcXGEnKSwgKCdjOicsICdcXCcsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYzpcXFxcXFxhL2InKSwgKCdjOicsICdcXCcsICdhL2InKSkKKyAgICAgICAgIyBWYWxpZCBVTkMgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYVxcYicpLCAoJ1xcXFxhXFxiJywgJ1xcJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxhXFxiXFwnKSwgKCdcXFxcYVxcYicsICdcXCcsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYVxcYlxcY1xcZCcpLCAoJ1xcXFxhXFxiJywgJ1xcJywgJ2NcXGQnKSkKKyAgICAgICAgIyBUaGVzZSBhcmUgbm9uLVVOQyBwYXRocyAoYWNjb3JkaW5nIHRvIG50cGF0aC5weSBhbmQgdGVzdF9udHBhdGgpCisgICAgICAgICMgSG93ZXZlciwgY29tbWFuZC5jb20gc2F5cyBzdWNoIHBhdGhzIGFyZSBpbnZhbGlkLCBzbyBpdCdzCisgICAgICAgICMgZGlmZmljdWx0IHRvIGtub3cgd2hhdCB0aGUgcmlnaHQgc2VtYW50aWNzIGFyZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxcXGFcXGInKSwgKCcnLCAnXFwnLCAnYVxcYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxhJyksICgnJywgJ1xcJywgJ2EnKSkKKworCisjCisjIFRlc3RzIGZvciB0aGUgcHVyZSBjbGFzc2VzCisjCisKK2NsYXNzIF9CYXNlUHVyZVBhdGhUZXN0KG9iamVjdCk6CisKKyAgICAjIGtleXMgYXJlIGNhbm9uaWNhbCBwYXRocywgdmFsdWVzIGFyZSBsaXN0IG9mIHR1cGxlcyBvZiBhcmd1bWVudHMKKyAgICAjIHN1cHBvc2VkIHRvIHByb2R1Y2UgZXF1YWwgcGF0aHMKKyAgICBlcXVpdmFsZW5jZXMgPSB7CisgICAgICAgICdhL2InOiBbCisgICAgICAgICAgICAoJ2EnLCAnYicpLCAoJ2EvJywgJ2InKSwgKCdhJywgJ2IvJyksICgnYS8nLCAnYi8nKSwKKyAgICAgICAgICAgICgnYS9iLycsKSwgKCdhLy9iJywpLCAoJ2EvL2IvLycsKSwKKyAgICAgICAgICAgICMgZW1wdHkgY29tcG9uZW50cyBnZXQgcmVtb3ZlZAorICAgICAgICAgICAgKCcnLCAnYScsICdiJyksICgnYScsICcnLCAnYicpLCAoJ2EnLCAnYicsICcnKSwKKyAgICAgICAgICAgIF0sCisgICAgICAgICcvYi9jL2QnOiBbCisgICAgICAgICAgICAoJ2EnLCAnL2IvYycsICdkJyksICgnYScsICcvLy9iLy9jJywgJ2QvJyksCisgICAgICAgICAgICAoJy9hJywgJy9iL2MnLCAnZCcpLAorICAgICAgICAgICAgIyBlbXB0eSBjb21wb25lbnRzIGdldCByZW1vdmVkCisgICAgICAgICAgICAoJy8nLCAnYicsICcnLCAnYy9kJyksICgnLycsICcnLCAnYi9jL2QnKSwgKCcnLCAnL2IvYy9kJyksCisgICAgICAgICAgICBdLAorICAgIH0KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCdhJykKKyAgICAgICAgc2VsZi5mbGF2b3VyID0gcC5fZmxhdm91cgorICAgICAgICBzZWxmLnNlcCA9IHNlbGYuZmxhdm91ci5zZXAKKyAgICAgICAgc2VsZi5hbHRzZXAgPSBzZWxmLmZsYXZvdXIuYWx0c2VwCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwLCBQKQorICAgICAgICBQKCdhJywgJ2InLCAnYycpCisgICAgICAgIFAoJy9hJywgJ2InLCAnYycpCisgICAgICAgIFAoJ2EvYi9jJykKKyAgICAgICAgUCgnL2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKFAoJ2EnKSksIFAoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKFAoJ2EnKSwgJ2InKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUChQKCdhJyksIFAoJ2InKSksIFAoJ2EvYicpKQorCisgICAgZGVmIHRlc3Rfam9pbl9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iJykKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHBwKSwgdHlwZShwKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjJywgJ2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aChQKCdjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jJykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvYycpKQorCisgICAgZGVmIHRlc3RfZGl2X2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgam9pbnBhdGgoKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYicpCisgICAgICAgIHBwID0gcCAvICdjJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocHApLCB0eXBlKHApKQorICAgICAgICBwcCA9IHAgLyAnYy9kJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gcCAvICdjJyAvICdkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gJ2MnIC8gcCAvICdkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdjL2EvYi9kJykpCisgICAgICAgIHBwID0gcCAvIFAoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYycpKQorICAgICAgICBwcCA9IHAvICcvYycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnL2MnKSkKKworICAgIGRlZiBfY2hlY2tfc3RyKHNlbGYsIGV4cGVjdGVkLCBhcmdzKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgZXhwZWN0ZWQucmVwbGFjZSgnLycsIHNlbGYuc2VwKSkKKworICAgIGRlZiB0ZXN0X3N0cl9jb21tb24oc2VsZik6CisgICAgICAgICMgQ2Fub25pY2FsaXplZCBwYXRocyByb3VuZHRyaXAKKyAgICAgICAgZm9yIHBhdGhzdHIgaW4gKCdhJywgJ2EvYicsICdhL2IvYycsICcvJywgJy9hL2InLCAnL2EvYi9jJyk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19zdHIocGF0aHN0ciwgKHBhdGhzdHIsKSkKKyAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIHRoZSBlbXB0eSBwYXRoCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cignLicsICgnJywpKQorICAgICAgICAjIE90aGVyIHRlc3RzIGZvciBzdHIoKSBhcmUgaW4gdGVzdF9lcXVpdmFsZW5jZXMoKQorCisgICAgZGVmIHRlc3RfYXNfcG9zaXhfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgZm9yIHBhdGhzdHIgaW4gKCdhJywgJ2EvYicsICdhL2IvYycsICcvJywgJy9hL2InLCAnL2EvYi9jJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAocGF0aHN0cikuYXNfcG9zaXgoKSwgcGF0aHN0cikKKyAgICAgICAgIyBPdGhlciB0ZXN0cyBmb3IgYXNfcG9zaXgoKSBhcmUgaW4gdGVzdF9lcXVpdmFsZW5jZXMoKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXNfY29tbW9uKHNlbGYpOgorICAgICAgICBzZXAgPSBvcy5mc2VuY29kZShzZWxmLnNlcCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoUCgnYS9iJykpLCBiJ2EnICsgc2VwICsgYidiJykKKworICAgIGRlZiB0ZXN0X2FzX3VyaV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgUCgnYScpLmFzX3VyaSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCkuYXNfdXJpKCkKKworICAgIGRlZiB0ZXN0X3JlcHJfY29tbW9uKHNlbGYpOgorICAgICAgICBmb3IgcGF0aHN0ciBpbiAoJ2EnLCAnYS9iJywgJ2EvYi9jJywgJy8nLCAnL2EvYicsICcvYS9iL2MnKToKKyAgICAgICAgICAgIHAgPSBzZWxmLmNscyhwYXRoc3RyKQorICAgICAgICAgICAgY2xzbmFtZSA9IHAuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICByID0gcmVwcihwKQorICAgICAgICAgICAgIyBUaGUgcmVwcigpIGlzIGluIHRoZSBmb3JtIENsYXNzTmFtZSgiZm9yd2FyZC1zbGFzaGVzIHBhdGgiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuc3RhcnRzd2l0aChjbHNuYW1lICsgJygnKSwgcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLmVuZHN3aXRoKCcpJyksIHIpCisgICAgICAgICAgICBpbm5lciA9IHJbbGVuKGNsc25hbWUpICsgMSA6IC0xXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGlubmVyKSwgcC5hc19wb3NpeCgpKQorICAgICAgICAgICAgIyBUaGUgcmVwcigpIHJvdW5kdHJpcHMKKyAgICAgICAgICAgIHEgPSBldmFsKHIsIHBhdGhsaWIuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHEuX19jbGFzc19fLCBwLl9fY2xhc3NfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSwgcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihxKSwgcikKKworICAgIGRlZiB0ZXN0X2VxX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJyksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLCBQKCdhJywgJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdhL2InKSwgUCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2EvYicpLCBQKCcvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYS9iJyksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCcvYS9iJyksIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCksIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCksICIiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoKSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgpLCBpbnQpCisKKyAgICBkZWYgdGVzdF9tYXRjaF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhJykubWF0Y2gsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhJykubWF0Y2gsICcuJykKKyAgICAgICAgIyBTaW1wbGUgcmVsYXRpdmUgcGF0dGVybgorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYi5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdhL2IucHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2EvYi5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYS5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi9weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EucHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHkvYycpLm1hdGNoKCdiLnB5JykpCisgICAgICAgICMgV2lsY2FyZCByZWxhdGl2ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdiLnB5JykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2EvYi5weScpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLnB5JykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLnB5YycpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi4vcHknKS5tYXRjaCgnKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHkvYycpLm1hdGNoKCcqLnB5JykpCisgICAgICAgICMgTXVsdGktcGFydCByZWxhdGl2ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdhYi9jLnB5JykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9kL2FiL2MucHknKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EucHknKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9kYWIvYy5weScpLm1hdGNoKCdhKi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYWIvYy5weS9kJykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgIyBBYnNvbHV0ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhL2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYS9iLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgICMgTXVsdGktcGFydCBhYnNvbHV0ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLnB5JykubWF0Y2goJy9hLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYWIucHknKS5tYXRjaCgnL2EvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hL2IvYy5weScpLm1hdGNoKCcvYS8qLnB5JykpCisKKyAgICBkZWYgdGVzdF9vcmRlcmluZ19jb21tb24oc2VsZik6CisgICAgICAgICMgT3JkZXJpbmcgaXMgdHVwbGUtYWxpa2UKKyAgICAgICAgZGVmIGFzc2VydExlc3MoYSwgYik6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihiLCBhKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgYSA9IFAoJ2EnKQorICAgICAgICBiID0gUCgnYS9iJykKKyAgICAgICAgYyA9IFAoJ2FiYycpCisgICAgICAgIGQgPSBQKCdiJykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBiKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGMpCisgICAgICAgIGFzc2VydExlc3MoYSwgZCkKKyAgICAgICAgYXNzZXJ0TGVzcyhiLCBjKQorICAgICAgICBhc3NlcnRMZXNzKGMsIGQpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBhID0gUCgnL2EnKQorICAgICAgICBiID0gUCgnL2EvYicpCisgICAgICAgIGMgPSBQKCcvYWJjJykKKyAgICAgICAgZCA9IFAoJy9iJykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBiKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGMpCisgICAgICAgIGFzc2VydExlc3MoYSwgZCkKKyAgICAgICAgYXNzZXJ0TGVzcyhiLCBjKQorICAgICAgICBhc3NlcnRMZXNzKGMsIGQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFAoKSA8IHt9CisKKyAgICBkZWYgdGVzdF9wYXJ0c19jb21tb24oc2VsZik6CisgICAgICAgICMgYHBhcnRzYCByZXR1cm5zIGEgdHVwbGUKKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2InKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKCdhJywgJ2InKSkKKyAgICAgICAgIyBUaGUgb2JqZWN0IGdldHMgcmV1c2VkCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocGFydHMsIHAucGFydHMpCisgICAgICAgICMgV2hlbiB0aGUgcGF0aCBpcyBhYnNvbHV0ZSwgdGhlIGFuY2hvciBpcyBhIHNlcGFyYXRlIHBhcnQKKyAgICAgICAgcCA9IFAoJy9hL2InKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKHNlcCwgJ2EnLCAnYicpKQorCisgICAgZGVmIHRlc3RfZXF1aXZhbGVuY2VzKHNlbGYpOgorICAgICAgICBmb3IgaywgdHVwbGVzIGluIHNlbGYuZXF1aXZhbGVuY2VzLml0ZW1zKCk6CisgICAgICAgICAgICBjYW5vbiA9IGsucmVwbGFjZSgnLycsIHNlbGYuc2VwKQorICAgICAgICAgICAgcG9zaXggPSBrLnJlcGxhY2Uoc2VsZi5zZXAsICcvJykKKyAgICAgICAgICAgIGlmIGNhbm9uICE9IHBvc2l4OgorICAgICAgICAgICAgICAgIHR1cGxlcyA9IHR1cGxlcyArIFsKKyAgICAgICAgICAgICAgICAgICAgdHVwbGUocGFydC5yZXBsYWNlKCcvJywgc2VsZi5zZXApIGZvciBwYXJ0IGluIHQpCisgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIHR1cGxlcworICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgdHVwbGVzLmFwcGVuZCgocG9zaXgsICkpCisgICAgICAgICAgICBwY2Fub24gPSBzZWxmLmNscyhjYW5vbikKKyAgICAgICAgICAgIGZvciB0IGluIHR1cGxlczoKKyAgICAgICAgICAgICAgICBwID0gc2VsZi5jbHMoKnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBwY2Fub24sICJmYWlsZWQgd2l0aCBhcmdzIHt9Ii5mb3JtYXQodCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHApLCBoYXNoKHBjYW5vbikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIGNhbm9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hc19wb3NpeCgpLCBwb3NpeCkKKworICAgIGRlZiB0ZXN0X3BhcmVudF9jb21tb24oc2VsZik6CisgICAgICAgICMgUmVsYXRpdmUKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudCwgUCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgpKQorICAgICAgICAjIEFuY2hvcmVkCisgICAgICAgIHAgPSBQKCcvYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LCBQKCcvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCcvYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnLycpKQorCisgICAgZGVmIHRlc3RfcGFyZW50c19jb21tb24oc2VsZik6CisgICAgICAgICMgUmVsYXRpdmUKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2IvYycpCisgICAgICAgIHBhciA9IHAucGFyZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclswXSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzJdLCBQKCcuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnYS9iJyksIFAoJ2EnKSwgUCgnLicpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclstMV0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclszXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwYXJbMF0gPSBwCisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgcCA9IFAoJy9hL2IvYycpCisgICAgICAgIHBhciA9IHAucGFyZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclswXSwgUCgnL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsxXSwgUCgnL2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMl0sIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCcvYS9iJyksIFAoJy9hJyksIFAoJy8nKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbM10KKworICAgIGRlZiB0ZXN0X2RyaXZlX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuZHJpdmUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5kcml2ZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuZHJpdmUsICcnKQorCisgICAgZGVmIHRlc3Rfcm9vdF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLnJvb3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLnJvb3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5yb290LCBzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLnJvb3QsIHNlcCkKKworICAgIGRlZiB0ZXN0X2FuY2hvcl9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLmFuY2hvciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuYW5jaG9yLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuYW5jaG9yLCBzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLmFuY2hvciwgc2VwKQorCisgICAgZGVmIHRlc3RfbmFtZV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4nKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi8uJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLm5hbWUsICdiLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLnB5JykubmFtZSwgJ2IucHknKQorCisgICAgZGVmIHRlc3Rfc3VmZml4X2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuLicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLy4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS8uaGdyYycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS8uaGcucmMnKS5zdWZmaXgsICcucmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IudGFyLmd6Jykuc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisKKyAgICBkZWYgdGVzdF9zdWZmaXhlc19jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi8uJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS5zdWZmaXhlcywgWycucHknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhnLnJjJykuc3VmZml4ZXMsIFsnLnJjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvLmhnLnJjJykuc3VmZml4ZXMsIFsnLnJjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi50YXIuZ3onKS5zdWZmaXhlcywgWycudGFyJywgJy5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXhlcywgW10pCisKKyAgICBkZWYgdGVzdF9zdGVtX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLicpLnN0ZW0sICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4uJykuc3RlbSwgJy4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3RlbSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZ3JjJykuc3RlbSwgJy5oZ3JjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZy5yYycpLnN0ZW0sICcuaGcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi50YXIuZ3onKS5zdGVtLCAnYi50YXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpCisKKyAgICBkZWYgdGVzdF93aXRoX25hbWVfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCcvYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJy9hL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL0RvdCBlbmRpbmcuJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCcvYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcnKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy4nKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy8nKS53aXRoX25hbWUsICdkLnhtbCcpCisKKyAgICBkZWYgdGVzdF93aXRoX3N1ZmZpeF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnL2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnL2EvYi5neicpKQorICAgICAgICAjIFBhdGggZG9lc24ndCBoYXZlIGEgImZpbGVuYW1lIiBjb21wb25lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnJykud2l0aF9zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcuJykud2l0aF9zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcvJykud2l0aF9zdWZmaXgsICcuZ3onKQorICAgICAgICAjIEludmFsaWQgc3VmZml4CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfc3VmZml4LCAnZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhL2InKS53aXRoX3N1ZmZpeCwgJy8nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhL2InKS53aXRoX3N1ZmZpeCwgJy8uZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhL2InKS53aXRoX3N1ZmZpeCwgJ2MvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfc3VmZml4LCAnLmMvLmQnKQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfdG9fY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcC5yZWxhdGl2ZV90bykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBiJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgpKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnJyksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYScpKSwgUCgnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2EnKSwgUCgnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2EvJyksIFAoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2EvYicpKSwgUCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2EvYicpLCBQKCkpCisgICAgICAgICMgV2l0aCBzZXZlcmFsIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdhJywgJ2InKSwgUCgpKQorICAgICAgICAjIFVucmVsYXRlZCBwYXRocworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2EvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvYScpKQorICAgICAgICBwID0gUCgnL2EvYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvJykpLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvJyksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnL2EnKSksIFAoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvYScpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnL2EvJyksIFAoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy9hL2InKSksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvYS9iJyksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9hL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYScpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJy9hL2InKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGR1bXBlZCA9IHBpY2tsZS5kdW1wcyhwLCBwcm90bykKKyAgICAgICAgICAgIHBwID0gcGlja2xlLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocHAuX19jbGFzc19fLCBwLl9fY2xhc3NfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gocHApLCBoYXNoKHApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocHApLCBzdHIocCkpCisKKworY2xhc3MgUHVyZVBvc2l4UGF0aFRlc3QoX0Jhc2VQdXJlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlB1cmVQb3NpeFBhdGgKKworICAgIGRlZiB0ZXN0X3Jvb3Qoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5yb290LCAnLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy8vYS9iJykucm9vdCwgJy8nKQorICAgICAgICAjIFBPU0lYIHNwZWNpYWwgY2FzZSBmb3IgdHdvIGxlYWRpbmcgc2xhc2hlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iJykucm9vdCwgJy8vJykKKworICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdhL2InKSwgUCgnQS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EnKSwgUCgnLy8vYScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJy9hJyksIFAoJy8vYScpKQorCisgICAgZGVmIHRlc3RfYXNfdXJpKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuYXNfdXJpKCksICdmaWxlOi8vLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5jJykuYXNfdXJpKCksICdmaWxlOi8vL2EvYi5jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJSNjJykuYXNfdXJpKCksICdmaWxlOi8vL2EvYiUyNSUyM2MnKQorCisgICAgZGVmIHRlc3RfYXNfdXJpX25vbl9hc2NpaShzZWxmKToKKyAgICAgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlX2Zyb21fYnl0ZXMKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmZzZW5jb2RlKCdceGU5JykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlxceGU5IGNhbm5vdCBiZSBlbmNvZGVkIHRvIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iXHhlOScpLmFzX3VyaSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlOi8vL2EvYicgKyBxdW90ZV9mcm9tX2J5dGVzKG9zLmZzZW5jb2RlKCdceGU5JykpKQorCisgICAgZGVmIHRlc3RfbWF0Y2goc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ0EucHknKS5tYXRjaCgnYS5QWScpKQorCisgICAgZGVmIHRlc3RfaXNfYWJzb2x1dGUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9hL2InKS5pc19hYnNvbHV0ZSgpKQorCisgICAgZGVmIHRlc3RfaXNfcmVzZXJ2ZWQoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnL2Zvby9iYXInKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvZGV2L2Nvbi9QUk4vTlVMJykuaXNfcmVzZXJ2ZWQoKSkKKworICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnLy9hJykKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9hL2InKSkKKyAgICAgICAgcHAgPSBQKCcvYScpLmpvaW5wYXRoKCcvL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvL2MnKSkKKyAgICAgICAgcHAgPSBQKCcvL2EnKS5qb2lucGF0aCgnL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvYycpKQorCisgICAgZGVmIHRlc3RfZGl2KHNlbGYpOgorICAgICAgICAjIEJhc2ljYWxseSB0aGUgc2FtZSBhcyBqb2lucGF0aCgpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnLy9hJykKKyAgICAgICAgcHAgPSBwIC8gJ2InCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy8vYS9iJykpCisgICAgICAgIHBwID0gUCgnL2EnKSAvICcvL2MnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy8vYycpKQorICAgICAgICBwcCA9IFAoJy8vYScpIC8gJy9jJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvYycpKQorCisKK2NsYXNzIFB1cmVXaW5kb3dzUGF0aFRlc3QoX0Jhc2VQdXJlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlB1cmVXaW5kb3dzUGF0aAorCisgICAgZXF1aXZhbGVuY2VzID0gX0Jhc2VQdXJlUGF0aFRlc3QuZXF1aXZhbGVuY2VzLmNvcHkoKQorICAgIGVxdWl2YWxlbmNlcy51cGRhdGUoeworICAgICAgICAnYzphJzogWyAoJ2M6JywgJ2EnKSwgKCdjOicsICdhLycpLCAoJy8nLCAnYzonLCAnYScpIF0sCisgICAgICAgICdjOi9hJzogWworICAgICAgICAgICAgKCdjOi8nLCAnYScpLCAoJ2M6JywgJy8nLCAnYScpLCAoJ2M6JywgJy9hJyksCisgICAgICAgICAgICAoJy96JywgJ2M6LycsICdhJyksICgnLy94L3knLCAnYzovJywgJ2EnKSwKKyAgICAgICAgICAgIF0sCisgICAgICAgICcvL2EvYi8nOiBbICgnLy9hL2InLCkgXSwKKyAgICAgICAgJy8vYS9iL2MnOiBbCisgICAgICAgICAgICAoJy8vYS9iJywgJ2MnKSwgKCcvL2EvYi8nLCAnYycpLAorICAgICAgICAgICAgXSwKKyAgICB9KQorCisgICAgZGVmIHRlc3Rfc3RyKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoJ2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICdhXFxiXFxjJykKKyAgICAgICAgcCA9IHNlbGYuY2xzKCdjOi9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnYzpcXGFcXGJcXGMnKQorICAgICAgICBwID0gc2VsZi5jbHMoJy8vYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICdcXFxcYVxcYlxcJykKKyAgICAgICAgcCA9IHNlbGYuY2xzKCcvL2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICdcXFxcYVxcYlxcYycpCisgICAgICAgIHAgPSBzZWxmLmNscygnLy9hL2IvYy9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICdcXFxcYVxcYlxcY1xcZCcpCisKKyAgICBkZWYgdGVzdF9lcShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKSwgUCgnYzphL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLCBQKCdjOicsICdhJywgJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdjOmEvYicpLCBQKCdkOmEvYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2M6YS9iJyksIFAoJ2M6L2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJy9hL2InKSwgUCgnYzovYS9iJykpCisgICAgICAgICMgQ2FzZS1pbnNlbnNpdGl2aXR5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9CJyksIFAoJ0EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ0M6YS9CJyksIFAoJ2M6QS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9Tb21lL1NIQVJFL2EvQicpLCBQKCcvL3NvbUUvc2hhcmUvQS9iJykpCisKKyAgICBkZWYgdGVzdF9hc191cmkoc2VsZik6CisgICAgICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCBxdW90ZV9mcm9tX2J5dGVzCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgUCgnL2EvYicpLmFzX3VyaSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCdjOmEvYicpLmFzX3VyaSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuYXNfdXJpKCksICdmaWxlOi8vL2M6LycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLmMnKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYzovYS9iLmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYiUjYycpLmFzX3VyaSgpLCAnZmlsZTovLy9jOi9hL2IlMjUlMjNjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2JceGU5JykuYXNfdXJpKCksICdmaWxlOi8vL2M6L2EvYiVDMyVBOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9zb21lL3NoYXJlLycpLmFzX3VyaSgpLCAnZmlsZTovL3NvbWUvc2hhcmUvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL3NvbWUvc2hhcmUvYS9iLmMnKS5hc191cmkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovL3NvbWUvc2hhcmUvYS9iLmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vc29tZS9zaGFyZS9hL2IlI2NceGU5JykuYXNfdXJpKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGU6Ly9zb21lL3NoYXJlL2EvYiUyNSUyM2MlQzMlQTknKQorCisgICAgZGVmIHRlc3RfbWF0Y2hfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgIyBBYnNvbHV0ZSBwYXR0ZXJucworICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYi5weScpLm1hdGNoKCdjOioucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6L2IucHknKS5tYXRjaCgnYzovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2Q6L2IucHknKS5tYXRjaCgnYzovKi5weScpKSAgIyB3cm9uZyBkcml2ZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLnB5JykubWF0Y2goJ2M6Ki5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnYzovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6Yi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6Yi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2IucHknKS5tYXRjaCgnYzoqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2IucHknKS5tYXRjaCgnYzovKi5weScpKQorICAgICAgICAjIFVOQyBwYXR0ZXJucworICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9zb21lL3NoYXJlL2EucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vc29tZS9zaGFyZS9hLnB5JykubWF0Y2goJy8vc29tZS9zaGFyZS8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnLy9vdGhlci9zaGFyZS9hLnB5JykubWF0Y2goJy8vc29tZS9zaGFyZS8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnLy9zb21lL3NoYXJlL2EvYi5weScpLm1hdGNoKCcvL3NvbWUvc2hhcmUvKi5weScpKQorICAgICAgICAjIENhc2UtaW5zZW5zaXRpdml0eQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnQi5weScpLm1hdGNoKCdiLlBZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9hL0IuUHknKS5tYXRjaCgnQzovQS8qLnBZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL1NvbWUvU2hhcmUvQi5QeScpLm1hdGNoKCcvL3NvbUUvc2hhckUvKi5wWScpKQorCisgICAgZGVmIHRlc3Rfb3JkZXJpbmdfY29tbW9uKHNlbGYpOgorICAgICAgICAjIENhc2UtaW5zZW5zaXRpdml0eQorICAgICAgICBkZWYgYXNzZXJ0T3JkZXJlZEVxdWFsKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGIsIGEpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYzpBL2InKQorICAgICAgICBxID0gUCgnQzphL0InKQorICAgICAgICBhc3NlcnRPcmRlcmVkRXF1YWwocCwgcSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwIDwgcSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwID4gcSkKKyAgICAgICAgcCA9IFAoJy8vc29tZS9TaGFyZS9BL2InKQorICAgICAgICBxID0gUCgnLy9Tb21lL1NIQVJFL2EvQicpCisgICAgICAgIGFzc2VydE9yZGVyZWRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPiBxKQorCisgICAgZGVmIHRlc3RfcGFydHMoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYzphL2InKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKCdjOicsICdhJywgJ2InKSkKKyAgICAgICAgcCA9IFAoJ2M6L2EvYicpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ2M6XFwnLCAnYScsICdiJykpCisgICAgICAgIHAgPSBQKCcvL2EvYi9jL2QnKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKCdcXFxcYVxcYlxcJywgJ2MnLCAnZCcpKQorCisgICAgZGVmIHRlc3RfcGFyZW50KHNlbGYpOgorICAgICAgICAjIEFuY2hvcmVkCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnejphL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJ3o6YS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCd6OmEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6OicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6OicpKQorICAgICAgICBwID0gUCgnejovYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LCBQKCd6Oi9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJ3o6L2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6Oi8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnejovJykpCisgICAgICAgIHAgPSBQKCcvL2EvYi9jL2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LCBQKCcvL2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCcvL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJy8vYS9iJykpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRzKHNlbGYpOgorICAgICAgICAjIEFuY2hvcmVkCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnejphL2IvJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCd6OmEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJ3o6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnejphJyksIFAoJ3o6JyldKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWzJdCisgICAgICAgIHAgPSBQKCd6Oi9hL2IvJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCd6Oi9hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCd6Oi8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCd6Oi9hJyksIFAoJ3o6LycpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclsyXQorICAgICAgICBwID0gUCgnLy9hL2IvYy9kJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCcvL2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCcvL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGFyKSwgW1AoJy8vYS9iL2MnKSwgUCgnLy9hL2InKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbMl0KKworICAgIGRlZiB0ZXN0X2RyaXZlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLmRyaXZlLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLycpLmRyaXZlLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iJykuZHJpdmUsICdcXFxcYVxcYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2IvJykuZHJpdmUsICdcXFxcYVxcYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2IvYy9kJykuZHJpdmUsICdcXFxcYVxcYicpCisKKyAgICBkZWYgdGVzdF9yb290KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLnJvb3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykucm9vdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IvJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYicpLnJvb3QsICdcXCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2IvJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi9jL2QnKS5yb290LCAnXFwnKQorCisgICAgZGVmIHRlc3RfYW5jaG9yKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLmFuY2hvciwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLmFuY2hvciwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5hbmNob3IsICdjOlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IvJykuYW5jaG9yLCAnYzpcXCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2InKS5hbmNob3IsICdcXFxcYVxcYlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi8nKS5hbmNob3IsICdcXFxcYVxcYlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi9jL2QnKS5hbmNob3IsICdcXFxcYVxcYlxcJykKKworICAgIGRlZiB0ZXN0X25hbWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6JykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iLnB5JykubmFtZSwgJ2IucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLm5hbWUsICdiLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL015LnB5L1NoYXJlLnBocCcpLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwL2EvYicpLm5hbWUsICdiJykKKworICAgIGRlZiB0ZXN0X3N1ZmZpeChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6LycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5zdWZmaXgsICcucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphLy5oZ3JjJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZ3JjJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZy5yYycpLnN1ZmZpeCwgJy5yYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IudGFyLmd6Jykuc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IudGFyLmd6Jykuc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL015LnB5L1NoYXJlLnBocC9hL2InKS5zdWZmaXgsICcnKQorCisgICAgZGVmIHRlc3Rfc3VmZml4ZXMoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6Jykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6LycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5zdWZmaXhlcywgWycucHknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IucHknKS5zdWZmaXhlcywgWycucHknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhncmMnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS8uaGdyYycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhnLnJjJykuc3VmZml4ZXMsIFsnLnJjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS8uaGcucmMnKS5zdWZmaXhlcywgWycucmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi50YXIuZ3onKS5zdWZmaXhlcywgWycudGFyJywgJy5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi50YXIuZ3onKS5zdWZmaXhlcywgWycudGFyJywgJy5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwL2EvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeGVzLCBbXSkKKworICAgIGRlZiB0ZXN0X3N0ZW0oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6Jykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzouJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzouLicpLnN0ZW0sICcuLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5zdGVtLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5zdGVtLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphLy5oZ3JjJykuc3RlbSwgJy5oZ3JjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhnLnJjJykuc3RlbSwgJy5oZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IudGFyLmd6Jykuc3RlbSwgJ2IudGFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpCisKKyAgICBkZWYgdGVzdF93aXRoX25hbWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCdjOmEvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6L2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvRG90IGVuZGluZy4nKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6YS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvRG90IGVuZGluZy4nKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6L2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzonKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6LycpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLy9NeS9TaGFyZScpLndpdGhfbmFtZSwgJ2QueG1sJykKKworICAgIGRlZiB0ZXN0X3dpdGhfc3VmZml4KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYzphL2IuZ3onKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJ2M6L2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iLnB5Jykud2l0aF9zdWZmaXgoJy5neicpLCBQKCdjOmEvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYzovYS9iLmd6JykpCisgICAgICAgICMgUGF0aCBkb2Vzbid0IGhhdmUgYSAiZmlsZW5hbWUiIGNvbXBvbmVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcnKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy4nKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy8nKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy8vTXkvU2hhcmUnKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgICMgSW52YWxpZCBzdWZmaXgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJ2d6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJy8nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnLy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdcXC5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdjOi5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdjL2QnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnY1xcZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICcuYy9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJy5jXFxkJykKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3RvKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ0M6Rm9vL0JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOicpKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6JyksIFAoJ0Zvby9CYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6Zm9PJykpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOmZvTycpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOmZvTy8nKSwgUCgnQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOmZvTy9iYVInKSksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOmZvTy9iYVInKSwgUCgpKQorICAgICAgICAjIFVucmVsYXRlZCBwYXRocworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdkOicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvRm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6L0ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdDOkZvby9CYXIvQmF6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6Rm9vL0JheicpKQorICAgICAgICBwID0gUCgnQzovRm9vL0JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOicpKSwgUCgnL0Zvby9CYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOicpLCBQKCcvRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwLnJlbGF0aXZlX3RvKFAoJ2M6JykpKSwgJ1xcRm9vXFxCYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwLnJlbGF0aXZlX3RvKCdjOicpKSwgJ1xcRm9vXFxCYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzovJykpLCBQKCdGb28vQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYzovJyksIFAoJ0Zvby9CYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6L2ZvTycpKSwgUCgnQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYzovZm9PJyksIFAoJ0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6L2ZvTy8nKSwgUCgnQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOi9mb08vYmFSJykpLCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYzovZm9PL2JhUicpLCBQKCkpCisgICAgICAgICMgVW5yZWxhdGVkIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6L0JheicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdDOi9Gb28vQmFyL0JheicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdDOi9Gb28vQmF6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6Rm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6LycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9Gb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnLy9DL0ZvbycpKQorICAgICAgICAjIFVOQyBwYXRocworICAgICAgICBwID0gUCgnLy9TZXJ2ZXIvU2hhcmUvRm9vL0JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvL3NFcnZlci9zSGFyZScpKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy8vc0VydmVyL3NIYXJlJyksIFAoJ0Zvby9CYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvL3NFcnZlci9zSGFyZS8nKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnLy9zRXJ2ZXIvc0hhcmUvRm9vJykpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvL3NFcnZlci9zSGFyZS9Gb28nKSwgUCgnQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnLy9zRXJ2ZXIvc0hhcmUvRm9vLycpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8vc0VydmVyL3NIYXJlL0Zvby9CYXInKSksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvL3NFcnZlci9zSGFyZS9Gb28vQmFyJyksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL1NlcnZlci9TaGFyZS9Gb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzovU2VydmVyL1NoYXJlL0ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvL3ovU2hhcmUvRm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy8vU2VydmVyL3ovRm9vJykpCisKKyAgICBkZWYgdGVzdF9pc19hYnNvbHV0ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgICMgVW5kZXIgTlQsIG9ubHkgcGF0aHMgd2l0aCBib3RoIGEgZHJpdmUgYW5kIGEgcm9vdCBhcmUgYWJzb2x1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCkuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6JykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdjOmEnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6YS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9hL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgIyBVTkMgcGF0aHMgYXJlIGFic29sdXRlIGJ5IGRlZmluaXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EvYi9jJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iL2MvZCcpLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ0M6L2EvYicpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgneC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnQzovYS9iL3gveScpKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJy94L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdDOi94L3knKSkKKyAgICAgICAgIyBKb2luaW5nIHdpdGggYSBkaWZmZXJlbnQgZHJpdmUgPT4gdGhlIGZpcnN0IHBhdGggaXMgaWdub3JlZCwgZXZlbgorICAgICAgICAjIGlmIHRoZSBzZWNvbmQgcGF0aCBpcyByZWxhdGl2ZS4KKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdEOngveScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ0Q6eC95JykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnRDoveC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnRDoveC95JykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnLy9ob3N0L3NoYXJlL3gveScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy8vaG9zdC9zaGFyZS94L3knKSkKKyAgICAgICAgIyBKb2luaW5nIHdpdGggdGhlIHNhbWUgZHJpdmUgPT4gdGhlIGZpcnN0IHBhdGggaXMgYXBwZW5kZWQgdG8gaWYKKyAgICAgICAgIyB0aGUgc2Vjb25kIHBhdGggaXMgcmVsYXRpdmUuCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnYzp4L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdDOi9hL2IveC95JykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnYzoveC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnQzoveC95JykpCisKKyAgICBkZWYgdGVzdF9kaXYoc2VsZik6CisgICAgICAgICMgQmFzaWNhbGx5IHRoZSBzYW1lIGFzIGpvaW5wYXRoKCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdDOi9hL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAneC95JywgUCgnQzovYS9iL3gveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAneCcgLyAneScsIFAoJ0M6L2EvYi94L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJy94L3knLCBQKCdDOi94L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJy94JyAvICd5JywgUCgnQzoveC95JykpCisgICAgICAgICMgSm9pbmluZyB3aXRoIGEgZGlmZmVyZW50IGRyaXZlID0+IHRoZSBmaXJzdCBwYXRoIGlzIGlnbm9yZWQsIGV2ZW4KKyAgICAgICAgIyBpZiB0aGUgc2Vjb25kIHBhdGggaXMgcmVsYXRpdmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICdEOngveScsIFAoJ0Q6eC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICdEOicgLyAneC95JywgUCgnRDp4L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ0Q6L3gveScsIFAoJ0Q6L3gveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnRDonIC8gJy94L3knLCBQKCdEOi94L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJy8vaG9zdC9zaGFyZS94L3knLCBQKCcvL2hvc3Qvc2hhcmUveC95JykpCisgICAgICAgICMgSm9pbmluZyB3aXRoIHRoZSBzYW1lIGRyaXZlID0+IHRoZSBmaXJzdCBwYXRoIGlzIGFwcGVuZGVkIHRvIGlmCisgICAgICAgICMgdGhlIHNlY29uZCBwYXRoIGlzIHJlbGF0aXZlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnYzp4L3knLCBQKCdDOi9hL2IveC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICdjOi94L3knLCBQKCdDOi94L3knKSkKKworICAgIGRlZiB0ZXN0X2lzX3Jlc2VydmVkKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnLycpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy9mb28vYmFyJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdjb24nKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ05VTCcpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnTlVMLnR4dCcpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnY29tMScpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnY29tOS5iYXInKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCdiYXIuY29tOScpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnbHB0MScpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnbHB0OS5iYXInKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCdiYXIubHB0OScpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgICMgT25seSB0aGUgbGFzdCBjb21wb25lbnQgbWF0dGVycworICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCdjOi9OVUwvY29uL2JheicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgICMgVU5DIHBhdGhzIGFyZSBuZXZlciByZXNlcnZlZAorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvL215L3NoYXJlL251bC9jb24vYXV4JykuaXNfcmVzZXJ2ZWQoKSkKKworCitjbGFzcyBQdXJlUGF0aFRlc3QoX0Jhc2VQdXJlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlB1cmVQYXRoCisKKyAgICBkZWYgdGVzdF9jb25jcmV0ZV9jbGFzcyhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHApLAorICAgICAgICAgICAgcGF0aGxpYi5QdXJlV2luZG93c1BhdGggaWYgb3MubmFtZSA9PSAnbnQnIGVsc2UgcGF0aGxpYi5QdXJlUG9zaXhQYXRoKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW50X2ZsYXZvdXJzX3VuZXF1YWwoc2VsZik6CisgICAgICAgIHAgPSBwYXRobGliLlB1cmVQb3NpeFBhdGgoJ2EnKQorICAgICAgICBxID0gcGF0aGxpYi5QdXJlV2luZG93c1BhdGgoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAsIHEpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbnRfZmxhdm91cnNfdW5vcmRlcmVkKHNlbGYpOgorICAgICAgICBwID0gcGF0aGxpYi5QdXJlUG9zaXhQYXRoKCdhJykKKyAgICAgICAgcSA9IHBhdGhsaWIuUHVyZVdpbmRvd3NQYXRoKCdhJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcCA8IHEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcCA8PSBxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHAgPiBxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHAgPj0gcQorCisKKyMKKyMgVGVzdHMgZm9yIHRoZSBjb25jcmV0ZSBjbGFzc2VzCisjCisKKyMgTWFrZSBzdXJlIGFueSBzeW1ib2xpYyBsaW5rcyBpbiB0aGUgYmFzZSB0ZXN0IHBhdGggYXJlIHJlc29sdmVkCitCQVNFID0gb3MucGF0aC5yZWFscGF0aChURVNURk4pCitqb2luID0gbGFtYmRhICp4OiBvcy5wYXRoLmpvaW4oQkFTRSwgKngpCityZWxfam9pbiA9IGxhbWJkYSAqeDogb3MucGF0aC5qb2luKFRFU1RGTiwgKngpCisKK2RlZiBzeW1saW5rX3NraXBfcmVhc29uKCk6CisgICAgaWYgbm90IHBhdGhsaWIuc3VwcG9ydHNfc3ltbGlua3M6CisgICAgICAgIHJldHVybiAibm8gc3lzdGVtIHN1cHBvcnQgZm9yIHN5bWxpbmtzIgorICAgIHRyeToKKyAgICAgICAgb3Muc3ltbGluayhfX2ZpbGVfXywgQkFTRSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICByZXR1cm4gc3RyKGUpCisgICAgZWxzZToKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoQkFTRSkKKyAgICByZXR1cm4gTm9uZQorCitzeW1saW5rX3NraXBfcmVhc29uID0gc3ltbGlua19za2lwX3JlYXNvbigpCisKK29ubHlfbnQgPSB1bml0dGVzdC5za2lwSWYob3MubmFtZSAhPSAnbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCByZXF1aXJlcyBhIFdpbmRvd3MtY29tcGF0aWJsZSBzeXN0ZW0nKQorb25seV9wb3NpeCA9IHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzIGEgUE9TSVgtY29tcGF0aWJsZSBzeXN0ZW0nKQord2l0aF9zeW1saW5rcyA9IHVuaXR0ZXN0LnNraXBJZihzeW1saW5rX3NraXBfcmVhc29uLCBzeW1saW5rX3NraXBfcmVhc29uKQorCisKK0Bvbmx5X3Bvc2l4CitjbGFzcyBQb3NpeFBhdGhBc1B1cmVUZXN0KFB1cmVQb3NpeFBhdGhUZXN0KToKKyAgICBjbHMgPSBwYXRobGliLlBvc2l4UGF0aAorCitAb25seV9udAorY2xhc3MgV2luZG93c1BhdGhBc1B1cmVUZXN0KFB1cmVXaW5kb3dzUGF0aFRlc3QpOgorICAgIGNscyA9IHBhdGhsaWIuV2luZG93c1BhdGgKKworCitjbGFzcyBfQmFzZVBhdGhUZXN0KG9iamVjdCk6CisgICAgIiIiVGVzdHMgZm9yIHRoZSBGUy1hY2Nlc3NpbmcgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBQYXRoIGNsYXNzZXMuIiIiCisKKyAgICAjIChCQVNFKQorICAgICMgIHwKKyAgICAjICB8LS0gZGlyQS8KKyAgICAjICAgICAgIHwtLSBsaW5rQyAtPiAiLi4vZGlyQiIKKyAgICAjICB8LS0gZGlyQi8KKyAgICAjICB8ICAgIHwtLSBmaWxlQgorICAgICMgICAgICAgfC0tIGxpbmtEIC0+ICIuLi9kaXJCIgorICAgICMgIHwtLSBkaXJDLworICAgICMgIHwgICAgfC0tIGZpbGVDCisgICAgIyAgfCAgICB8LS0gZmlsZUQKKyAgICAjICB8LS0gZmlsZUEKKyAgICAjICB8LS0gbGlua0EgLT4gImZpbGVBIgorICAgICMgIHwtLSBsaW5rQiAtPiAiZGlyQiIKKyAgICAjCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9zLm1rZGlyKEJBU0UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaHV0aWwucm10cmVlLCBCQVNFKQorICAgICAgICBvcy5ta2Rpcihqb2luKCdkaXJBJykpCisgICAgICAgIG9zLm1rZGlyKGpvaW4oJ2RpckInKSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyQycpKQorICAgICAgICBvcy5ta2Rpcihqb2luKCdkaXJDJywgJ2RpckQnKSkKKyAgICAgICAgd2l0aCBvcGVuKGpvaW4oJ2ZpbGVBJyksICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIidGhpcyBpcyBmaWxlIEFcbiIpCisgICAgICAgIHdpdGggb3Blbihqb2luKCdkaXJCJywgJ2ZpbGVCJyksICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIidGhpcyBpcyBmaWxlIEJcbiIpCisgICAgICAgIHdpdGggb3Blbihqb2luKCdkaXJDJywgJ2ZpbGVDJyksICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIidGhpcyBpcyBmaWxlIENcbiIpCisgICAgICAgIHdpdGggb3Blbihqb2luKCdkaXJDJywgJ2RpckQnLCAnZmlsZUQnKSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiJ0aGlzIGlzIGZpbGUgRFxuIikKKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICAjIFJlbGF0aXZlIHN5bWxpbmtzCisgICAgICAgICAgICBvcy5zeW1saW5rKCdmaWxlQScsIGpvaW4oJ2xpbmtBJykpCisgICAgICAgICAgICBvcy5zeW1saW5rKCdub24tZXhpc3RpbmcnLCBqb2luKCdicm9rZW5MaW5rJykpCisgICAgICAgICAgICBzZWxmLmRpcmxpbmsoJ2RpckInLCBqb2luKCdsaW5rQicpKQorICAgICAgICAgICAgc2VsZi5kaXJsaW5rKG9zLnBhdGguam9pbignLi4nLCAnZGlyQicpLCBqb2luKCdkaXJBJywgJ2xpbmtDJykpCisgICAgICAgICAgICAjIFRoaXMgb25lIGdvZXMgdXB3YXJkcyBidXQgZG9lc24ndCBjcmVhdGUgYSBsb29wCisgICAgICAgICAgICBzZWxmLmRpcmxpbmsob3MucGF0aC5qb2luKCcuLicsICdkaXJCJyksIGpvaW4oJ2RpckInLCAnbGlua0QnKSkKKworICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTM3NzIKKyAgICAgICAgZGVmIGRpcmxpbmsoc2VsZiwgc3JjLCBkZXN0KToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkZXN0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PVRydWUpCisgICAgZWxzZToKKyAgICAgICAgZGVmIGRpcmxpbmsoc2VsZiwgc3JjLCBkZXN0KToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkZXN0KQorCisgICAgZGVmIGFzc2VydFNhbWUoc2VsZiwgcGF0aF9hLCBwYXRoX2IpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5zYW1lZmlsZShzdHIocGF0aF9hKSwgc3RyKHBhdGhfYikpLAorICAgICAgICAgICAgICAgICAgICAgICAgIiVyIGFuZCAlciBkb24ndCBwb2ludCB0byB0aGUgc2FtZSBmaWxlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAocGF0aF9hLCBwYXRoX2IpKQorCisgICAgZGVmIGFzc2VydEZpbGVOb3RGb3VuZChzZWxmLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorCisgICAgZGVmIF90ZXN0X2N3ZChzZWxmLCBwKToKKyAgICAgICAgcSA9IHNlbGYuY2xzKG9zLmdldGN3ZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBzdHIocSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShwKSwgdHlwZShxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuaXNfYWJzb2x1dGUoKSkKKworICAgIGRlZiB0ZXN0X2N3ZChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzLmN3ZCgpCisgICAgICAgIHNlbGYuX3Rlc3RfY3dkKHApCisKKyAgICBkZWYgdGVzdF9lbXB0eV9wYXRoKHNlbGYpOgorICAgICAgICAjIFRoZSBlbXB0eSBwYXRoIHBvaW50cyB0byAnLicKKyAgICAgICAgcCA9IHNlbGYuY2xzKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RhdCgpLCBvcy5zdGF0KCcuJykpCisKKyAgICBkZWYgdGVzdF9leGlzdHMoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgKHAgLyAnZGlyQScpLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIChwIC8gJ2ZpbGVBJykuZXhpc3RzKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdsaW5rQScpLmV4aXN0cygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdsaW5rQicpLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCAocCAvICdmb28nKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnL3h5enp5JykuZXhpc3RzKCkpCisKKyAgICBkZWYgdGVzdF9vcGVuX2NvbW1vbihzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHdpdGggKHAgLyAnZmlsZUEnKS5vcGVuKCdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBpby5UZXh0SU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgInRoaXMgaXMgZmlsZSBBXG4iKQorICAgICAgICB3aXRoIChwIC8gJ2ZpbGVBJykub3BlbigncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGlvLkJ1ZmZlcmVkSU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKS5zdHJpcCgpLCBiInRoaXMgaXMgZmlsZSBBIikKKyAgICAgICAgd2l0aCAocCAvICdmaWxlQScpLm9wZW4oJ3JiJywgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgaW8uUmF3SU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKS5zdHJpcCgpLCBiInRoaXMgaXMgZmlsZSBBIikKKworICAgIGRlZiB0ZXN0X2l0ZXJkaXIoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBpdCA9IHAuaXRlcmRpcigpCisgICAgICAgIHBhdGhzID0gc2V0KGl0KQorICAgICAgICBleHBlY3RlZCA9IFsnZGlyQScsICdkaXJCJywgJ2RpckMnLCAnZmlsZUEnXQorICAgICAgICBpZiBub3Qgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIGV4cGVjdGVkICs9IFsnbGlua0EnLCAnbGlua0InLCAnYnJva2VuTGluayddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMsIHsgUChCQVNFLCBxKSBmb3IgcSBpbiBleHBlY3RlZCB9KQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9pdGVyZGlyX3N5bWxpbmsoc2VsZik6CisgICAgICAgICMgX19pdGVyX18gb24gYSBzeW1saW5rIHRvIGEgZGlyZWN0b3J5CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFLCAnbGlua0InKQorICAgICAgICBwYXRocyA9IHNldChwLml0ZXJkaXIoKSkKKyAgICAgICAgZXhwZWN0ZWQgPSB7IFAoQkFTRSwgJ2xpbmtCJywgcSkgZm9yIHEgaW4gWydmaWxlQicsICdsaW5rRCddIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRocywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pdGVyZGlyX25vZGlyKHNlbGYpOgorICAgICAgICAjIF9faXRlcl9fIG9uIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIGRpcmVjdG9yeQorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ2ZpbGVBJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG5leHQocC5pdGVyZGlyKCkpCisgICAgICAgICMgRU5PRU5UIG9yIEVJTlZBTCB1bmRlciBXaW5kb3dzLCBFTk9URElSIG90aGVyd2lzZQorICAgICAgICAjIChzZWUgaXNzdWUgIzEyODAyKQorICAgICAgICBzZWxmLmFzc2VydEluKGNtLmV4Y2VwdGlvbi5lcnJubywgKGVycm5vLkVOT1RESVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PRU5ULCBlcnJuby5FSU5WQUwpKQorCisgICAgZGVmIHRlc3RfZ2xvYl9jb21tb24oc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2soZ2xvYiwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZ2xvYiksIHsgUChCQVNFLCBxKSBmb3IgcSBpbiBleHBlY3RlZCB9KQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLmdsb2IoImZpbGVBIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5JdGVyYXRvcikKKyAgICAgICAgX2NoZWNrKGl0LCBbImZpbGVBIl0pCisgICAgICAgIF9jaGVjayhwLmdsb2IoImZpbGVCIiksIFtdKQorICAgICAgICBfY2hlY2socC5nbG9iKCJkaXIqL2ZpbGUqIiksIFsiZGlyQi9maWxlQiIsICJkaXJDL2ZpbGVDIl0pCisgICAgICAgIGlmIHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqQSIpLCBbJ2RpckEnLCAnZmlsZUEnXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIipBIiksIFsnZGlyQScsICdmaWxlQScsICdsaW5rQSddKQorICAgICAgICBpZiBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKkIvKiIpLCBbJ2RpckIvZmlsZUInXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIipCLyoiKSwgWydkaXJCL2ZpbGVCJywgJ2RpckIvbGlua0QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpbmtCL2ZpbGVCJywgJ2xpbmtCL2xpbmtEJ10pCisgICAgICAgIGlmIHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqL2ZpbGVCIiksIFsnZGlyQi9maWxlQiddKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKi9maWxlQiIpLCBbJ2RpckIvZmlsZUInLCAnbGlua0IvZmlsZUInXSkKKworICAgIGRlZiB0ZXN0X3JnbG9iX2NvbW1vbihzZWxmKToKKyAgICAgICAgZGVmIF9jaGVjayhnbG9iLCBleHBlY3RlZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChnbG9iKSwgeyBQKEJBU0UsIHEpIGZvciBxIGluIGV4cGVjdGVkIH0pCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBpdCA9IHAucmdsb2IoImZpbGVBIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5JdGVyYXRvcikKKyAgICAgICAgIyBYWFggY2Fubm90IHRlc3QgYmVjYXVzZSBvZiBzeW1saW5rIGxvb3BzIGluIHRoZSB0ZXN0IHNldHVwCisgICAgICAgICNfY2hlY2soaXQsIFsiZmlsZUEiXSkKKyAgICAgICAgI19jaGVjayhwLnJnbG9iKCJmaWxlQiIpLCBbImRpckIvZmlsZUIiXSkKKyAgICAgICAgI19jaGVjayhwLnJnbG9iKCIqL2ZpbGVBIiksIFsiIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiKi9maWxlQiIpLCBbImRpckIvZmlsZUIiXSkKKyAgICAgICAgI19jaGVjayhwLnJnbG9iKCJmaWxlKiIpLCBbImZpbGVBIiwgImRpckIvZmlsZUIiXSkKKyAgICAgICAgIyBObyBzeW1saW5rIGxvb3BzIGhlcmUKKyAgICAgICAgcCA9IFAoQkFTRSwgImRpckMiKQorICAgICAgICBfY2hlY2socC5yZ2xvYigiZmlsZSoiKSwgWyJkaXJDL2ZpbGVDIiwgImRpckMvZGlyRC9maWxlRCJdKQorICAgICAgICBfY2hlY2socC5yZ2xvYigiKi8qIiksIFsiZGlyQy9kaXJEL2ZpbGVEIl0pCisKKyAgICBkZWYgdGVzdF9nbG9iX2RvdGRvdChzZWxmKToKKyAgICAgICAgIyAiLi4iIGlzIG5vdCBzcGVjaWFsIGluIGdsb2JzCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLmdsb2IoIi4uIikpLCB7IFAoQkFTRSwgIi4uIikgfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCJkaXJBLy4uL2ZpbGUqIikpLCB7IFAoQkFTRSwgImRpckEvLi4vZmlsZUEiKSB9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLmdsb2IoIi4uL3h5enp5IikpLCBzZXQoKSkKKworICAgIGRlZiBfY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShzZWxmLCBwLCBleHBlY3RlZCk6CisgICAgICAgIHEgPSBwLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEsIGV4cGVjdGVkKQorCisgICAgZGVmIF9jaGVja19yZXNvbHZlX2Fic29sdXRlKHNlbGYsIHAsIGV4cGVjdGVkKToKKyAgICAgICAgcSA9IHAucmVzb2x2ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSwgZXhwZWN0ZWQpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X3Jlc29sdmVfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2ZvbycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBwLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorICAgICAgICAjIFRoZXNlIGFyZSBhbGwgcmVsYXRpdmUgc3ltbGlua3MKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2RpckInLCAnZmlsZUInKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX3JlbGF0aXZlKHAsIHApCisgICAgICAgIHAgPSBQKEJBU0UsICdsaW5rQScpCisgICAgICAgIHNlbGYuX2NoZWNrX3Jlc29sdmVfcmVsYXRpdmUocCwgUChCQVNFLCAnZmlsZUEnKSkKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2RpckEnLCAnbGlua0MnLCAnZmlsZUInKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX3JlbGF0aXZlKHAsIFAoQkFTRSwgJ2RpckInLCAnZmlsZUInKSkKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2RpckInLCAnbGlua0QnLCAnZmlsZUInKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX3JlbGF0aXZlKHAsIFAoQkFTRSwgJ2RpckInLCAnZmlsZUInKSkKKyAgICAgICAgIyBOb3cgY3JlYXRlIGFic29sdXRlIHN5bWxpbmtzCisgICAgICAgIGQgPSB0ZW1wZmlsZS5ta2R0ZW1wKHN1ZmZpeD0nLWRpckQnKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2h1dGlsLnJtdHJlZSwgZCkKKyAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmpvaW4oZCksIGpvaW4oJ2RpckEnLCAnbGlua1gnKSkKKyAgICAgICAgb3Muc3ltbGluayhqb2luKCdkaXJCJyksIG9zLnBhdGguam9pbihkLCAnbGlua1knKSkKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2RpckEnLCAnbGlua1gnLCAnbGlua1knLCAnZmlsZUInKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX2Fic29sdXRlKHAsIFAoQkFTRSwgJ2RpckInLCAnZmlsZUInKSkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfcmVzb2x2ZV9kb3Qoc2VsZik6CisgICAgICAgICMgU2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS85L3BhdGhyZXNvbHZlLWZhaWxzLW9uLWNvbXBsZXgtc3ltbGlua3MKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuZGlybGluaygnLicsIGpvaW4oJzAnKSkKKyAgICAgICAgc2VsZi5kaXJsaW5rKG9zLnBhdGguam9pbignMCcsICcwJyksIGpvaW4oJzEnKSkKKyAgICAgICAgc2VsZi5kaXJsaW5rKG9zLnBhdGguam9pbignMScsICcxJyksIGpvaW4oJzInKSkKKyAgICAgICAgcSA9IHAgLyAnMicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnJlc29sdmUoKSwgcCkKKworICAgIGRlZiB0ZXN0X3dpdGgoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBpdCA9IHAuaXRlcmRpcigpCisgICAgICAgIGl0MiA9IHAuaXRlcmRpcigpCisgICAgICAgIG5leHQoaXQyKQorICAgICAgICB3aXRoIHA6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgcGF0aAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgaXQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLm9wZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVzb2x2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5hYnNvbHV0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5fX2VudGVyX18pCisKKyAgICBkZWYgdGVzdF9jaG1vZChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICBtb2RlID0gcC5zdGF0KCkuc3RfbW9kZQorICAgICAgICAjIENsZWFyIHdyaXRhYmxlIGJpdAorICAgICAgICBuZXdfbW9kZSA9IG1vZGUgJiB+MG8yMjIKKyAgICAgICAgcC5jaG1vZChuZXdfbW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKS5zdF9tb2RlLCBuZXdfbW9kZSkKKyAgICAgICAgIyBTZXQgd3JpdGFibGUgYml0CisgICAgICAgIG5ld19tb2RlID0gbW9kZSB8IDBvMjIyCisgICAgICAgIHAuY2htb2QobmV3X21vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGF0KCkuc3RfbW9kZSwgbmV3X21vZGUpCisKKyAgICAjIFhYWCBhbHNvIG5lZWQgYSB0ZXN0IGZvciBsY2htb2QKKworICAgIGRlZiB0ZXN0X3N0YXQoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdmaWxlQScKKyAgICAgICAgc3QgPSBwLnN0YXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RhdCgpLCBzdCkKKyAgICAgICAgIyBDaGFuZ2UgZmlsZSBtb2RlIGJ5IGZsaXBwaW5nIHdyaXRlIGJpdAorICAgICAgICBwLmNobW9kKHN0LnN0X21vZGUgXiAwbzIyMikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuY2htb2QsIHN0LnN0X21vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocC5zdGF0KCksIHN0KQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9sc3RhdChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpLyAnbGlua0EnCisgICAgICAgIHN0ID0gcC5zdGF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdCwgcC5sc3RhdCgpKQorCisgICAgZGVmIHRlc3RfbHN0YXRfbm9zeW1saW5rKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIHN0ID0gcC5zdGF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdCwgcC5sc3RhdCgpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MocHdkLCAidGhlIHB3ZCBtb2R1bGUgaXMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorICAgIGRlZiB0ZXN0X293bmVyKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIHVpZCA9IHAuc3RhdCgpLnN0X3VpZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lID0gcHdkLmdldHB3dWlkKHVpZCkucHdfbmFtZQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KAorICAgICAgICAgICAgICAgICJ1c2VyICVkIGRvZXNuJ3QgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgc3lzdGVtIGRhdGFiYXNlIiAlIHVpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBwLm93bmVyKCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhncnAsICJ0aGUgZ3JwIG1vZHVsZSBpcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCisgICAgZGVmIHRlc3RfZ3JvdXAoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdmaWxlQScKKyAgICAgICAgZ2lkID0gcC5zdGF0KCkuc3RfZ2lkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUgPSBncnAuZ2V0Z3JnaWQoZ2lkKS5ncl9uYW1lCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoCisgICAgICAgICAgICAgICAgImdyb3VwICVkIGRvZXNuJ3QgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgc3lzdGVtIGRhdGFiYXNlIiAlIGdpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBwLmdyb3VwKCkpCisKKyAgICBkZWYgdGVzdF91bmxpbmsoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdmaWxlQScKKyAgICAgICAgcC51bmxpbmsoKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHAudW5saW5rKQorCisgICAgZGVmIHRlc3Rfcm1kaXIoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdkaXJBJworICAgICAgICBmb3IgcSBpbiBwLml0ZXJkaXIoKToKKyAgICAgICAgICAgIHEudW5saW5rKCkKKyAgICAgICAgcC5ybWRpcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHAuc3RhdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC51bmxpbmspCisKKyAgICBkZWYgdGVzdF9yZW5hbWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBwID0gUCAvICdmaWxlQScKKyAgICAgICAgc2l6ZSA9IHAuc3RhdCgpLnN0X3NpemUKKyAgICAgICAgIyBSZW5hbWluZyB0byBhbm90aGVyIHBhdGgKKyAgICAgICAgcSA9IFAgLyAnZGlyQScgLyAnZmlsZUFBJworICAgICAgICBwLnJlbmFtZShxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuc3RhdCgpLnN0X3NpemUsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHAuc3RhdCkKKyAgICAgICAgIyBSZW5hbWluZyB0byBhIHN0ciBvZiBhIHJlbGF0aXZlIHBhdGgKKyAgICAgICAgciA9IHJlbF9qb2luKCdmaWxlQUFBJykKKyAgICAgICAgcS5yZW5hbWUocikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHIpLnN0X3NpemUsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHEuc3RhdCkKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBwID0gUCAvICdmaWxlQScKKyAgICAgICAgc2l6ZSA9IHAuc3RhdCgpLnN0X3NpemUKKyAgICAgICAgIyBSZXBsYWNpbmcgYSBub24tZXhpc3RpbmcgcGF0aAorICAgICAgICBxID0gUCAvICdkaXJBJyAvICdmaWxlQUEnCisgICAgICAgIHAucmVwbGFjZShxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuc3RhdCgpLnN0X3NpemUsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHAuc3RhdCkKKyAgICAgICAgIyBSZXBsYWNpbmcgYW5vdGhlciAoZXhpc3RpbmcpIHBhdGgKKyAgICAgICAgciA9IHJlbF9qb2luKCdkaXJCJywgJ2ZpbGVCJykKKyAgICAgICAgcS5yZXBsYWNlKHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChyKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChxLnN0YXQpCisKKyAgICBkZWYgdGVzdF90b3VjaF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBwID0gUCAvICduZXdmaWxlQScKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmV4aXN0cygpKQorICAgICAgICBwLnRvdWNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHN0ID0gcC5zdGF0KCkKKyAgICAgICAgb2xkX210aW1lID0gc3Quc3RfbXRpbWUKKyAgICAgICAgb2xkX210aW1lX25zID0gc3Quc3RfbXRpbWVfbnMKKyAgICAgICAgIyBSZXdpbmQgdGhlIG10aW1lIHN1ZmZpY2llbnRseSBmYXIgaW4gdGhlIHBhc3QgdG8gd29yayBhcm91bmQKKyAgICAgICAgIyBmaWxlc3lzdGVtLXNwZWNpZmljIHRpbWVzdGFtcCBncmFudWxhcml0eS4KKyAgICAgICAgb3MudXRpbWUoc3RyKHApLCAob2xkX210aW1lIC0gMTAsIG9sZF9tdGltZSAtIDEwKSkKKyAgICAgICAgIyBUaGUgZmlsZSBtdGltZSBzaG91bGQgYmUgcmVmcmVzaGVkIGJ5IGNhbGxpbmcgdG91Y2goKSBhZ2FpbgorICAgICAgICBwLnRvdWNoKCkKKyAgICAgICAgc3QgPSBwLnN0YXQoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdC5zdF9tdGltZV9ucywgb2xkX210aW1lX25zKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdC5zdF9tdGltZSwgb2xkX210aW1lKQorICAgICAgICAjIE5vdyB3aXRoIGV4aXN0X29rPUZhbHNlCisgICAgICAgIHAgPSBQIC8gJ25ld2ZpbGVCJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuZXhpc3RzKCkpCisgICAgICAgIHAudG91Y2gobW9kZT0wbzcwMCwgZXhpc3Rfb2s9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBwLnRvdWNoLCBleGlzdF9vaz1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3RvdWNoX25vY2hhbmdlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnZmlsZUEnCisgICAgICAgIHAudG91Y2goKQorICAgICAgICB3aXRoIHAub3BlbigncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKS5zdHJpcCgpLCBiInRoaXMgaXMgZmlsZSBBIikKKworICAgIGRlZiB0ZXN0X21rZGlyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnbmV3ZGlyQScKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmV4aXN0cygpKQorICAgICAgICBwLm1rZGlyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2RpcigpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5ta2RpcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FRVhJU1QpCisKKyAgICBkZWYgdGVzdF9ta2Rpcl9wYXJlbnRzKHNlbGYpOgorICAgICAgICAjIENyZWF0aW5nIGEgY2hhaW4gb2YgZGlyZWN0b3JpZXMKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UsICduZXdkaXJCJywgJ25ld2RpckMnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuZXhpc3RzKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBwLm1rZGlyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKyAgICAgICAgcC5ta2RpcihwYXJlbnRzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19kaXIoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIocGFyZW50cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUVYSVNUKQorICAgICAgICAjIHRlc3QgYG1vZGVgIGFyZworICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKHAuc3RhdCgpLnN0X21vZGUpICMgZGVmYXVsdCBtb2RlCisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFLCAnbmV3ZGlyRCcsICduZXdkaXJFJykKKyAgICAgICAgcC5ta2RpcigwbzU1NSwgcGFyZW50cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuaXNfZGlyKCkpCisgICAgICAgIGlmIG9zLm5hbWUgIT0gJ250JzoKKyAgICAgICAgICAgICMgdGhlIGRpcmVjdG9yeSdzIHBlcm1pc3Npb25zIGZvbGxvdyB0aGUgbW9kZSBhcmd1bWVudAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUocC5zdGF0KCkuc3RfbW9kZSksIDBvNzU1NSAmIG1vZGUpCisgICAgICAgICMgdGhlIHBhcmVudCdzIHBlcm1pc3Npb25zIGZvbGxvdyB0aGUgZGVmYXVsdCBwcm9jZXNzIHNldHRpbmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHAucGFyZW50LnN0YXQoKS5zdF9tb2RlKSwgbW9kZSkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3Rfc3ltbGlua190byhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHRhcmdldCA9IFAgLyAnZmlsZUEnCisgICAgICAgICMgU3ltbGlua2luZyBhIHBhdGggdGFyZ2V0CisgICAgICAgIGxpbmsgPSBQIC8gJ2RpckEnIC8gJ2xpbmtBQScKKyAgICAgICAgbGluay5zeW1saW5rX3RvKHRhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5rLnN0YXQoKSwgdGFyZ2V0LnN0YXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsaW5rLmxzdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgICMgU3ltbGlua2luZyBhIHN0ciB0YXJnZXQKKyAgICAgICAgbGluayA9IFAgLyAnZGlyQScgLyAnbGlua0FBQScKKyAgICAgICAgbGluay5zeW1saW5rX3RvKHN0cih0YXJnZXQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmsuc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxpbmsubHN0YXQoKSwgdGFyZ2V0LnN0YXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsaW5rLmlzX2RpcigpKQorICAgICAgICAjIFN5bWxpbmtpbmcgdG8gYSBkaXJlY3RvcnkKKyAgICAgICAgdGFyZ2V0ID0gUCAvICdkaXJCJworICAgICAgICBsaW5rID0gUCAvICdkaXJBJyAvICdsaW5rQUFBQScKKyAgICAgICAgbGluay5zeW1saW5rX3RvKHRhcmdldCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmsuc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxpbmsubHN0YXQoKSwgdGFyZ2V0LnN0YXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmsuaXNfZGlyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaXN0KGxpbmsuaXRlcmRpcigpKSkKKworICAgIGRlZiB0ZXN0X2lzX2RpcihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoUCAvICdkaXJBJykuaXNfZGlyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19kaXIoKSkKKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2xpbmtBJykuaXNfZGlyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnbGlua0InKS5pc19kaXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAvICdicm9rZW5MaW5rJykuaXNfZGlyKCkpCisKKyAgICBkZWYgdGVzdF9pc19maWxlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2ZpbGVBJykuaXNfZmlsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19maWxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfZmlsZSgpKQorICAgICAgICBpZiBub3Qgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoUCAvICdsaW5rQScpLmlzX2ZpbGUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbGlua0InKS5pc19maWxlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQLyAnYnJva2VuTGluaycpLmlzX2ZpbGUoKSkKKworICAgIGRlZiB0ZXN0X2lzX3N5bWxpbmsoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfc3ltbGluaygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19zeW1saW5rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfc3ltbGluaygpKQorICAgICAgICBpZiBub3Qgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoUCAvICdsaW5rQScpLmlzX3N5bWxpbmsoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoUCAvICdsaW5rQicpLmlzX3N5bWxpbmsoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoUC8gJ2Jyb2tlbkxpbmsnKS5pc19zeW1saW5rKCkpCisKKyAgICBkZWYgdGVzdF9pc19maWZvX2ZhbHNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2ZpZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdkaXJBJykuaXNfZmlmbygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX2ZpZm8oKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJta2ZpZm8iKSwgIm9zLm1rZmlmbygpIHJlcXVpcmVkIikKKyAgICBkZWYgdGVzdF9pc19maWZvX3RydWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFLCAnbXlmaWZvJykKKyAgICAgICAgb3MubWtmaWZvKHN0cihQKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAuaXNfZmlmbygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19maWxlKCkpCisKKyAgICBkZWYgdGVzdF9pc19zb2NrZXRfZmFsc2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX3NvY2tldCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX3NvY2tldCgpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIiksICJVbml4IHNvY2tldHMgcmVxdWlyZWQiKQorICAgIGRlZiB0ZXN0X2lzX3NvY2tldF90cnVlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSwgJ215c29jaycpCisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrLmJpbmQoc3RyKFApKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgIkFGX1VOSVggcGF0aCB0b28gbG9uZyIgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNhbm5vdCBiaW5kIFVuaXggc29ja2V0OiAiICsgc3RyKGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUC5pc19zb2NrZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX2ZpZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX2ZpbGUoKSkKKworICAgIGRlZiB0ZXN0X2lzX2Jsb2NrX2RldmljZV9mYWxzZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19ibG9ja19kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdkaXJBJykuaXNfYmxvY2tfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfYmxvY2tfZGV2aWNlKCkpCisKKyAgICBkZWYgdGVzdF9pc19jaGFyX2RldmljZV9mYWxzZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19jaGFyX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19jaGFyX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX2NoYXJfZGV2aWNlKCkpCisKKyAgICBkZWYgdGVzdF9pc19jaGFyX2RldmljZV90cnVlKHNlbGYpOgorICAgICAgICAjIFVuZGVyIFVuaXgsIC9kZXYvbnVsbCBzaG91bGQgZ2VuZXJhbGx5IGJlIGEgY2hhciBkZXZpY2UKKyAgICAgICAgUCA9IHNlbGYuY2xzKCcvZGV2L251bGwnKQorICAgICAgICBpZiBub3QgUC5leGlzdHMoKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIi9kZXYvbnVsbCByZXF1aXJlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQLmlzX2NoYXJfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19ibG9ja19kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX2ZpbGUoKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nX2NvbW1vbihzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UsICdmaWxlQScpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgwLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZHVtcGVkID0gcGlja2xlLmR1bXBzKHAsIHByb3RvKQorICAgICAgICAgICAgcHAgPSBwaWNrbGUubG9hZHMoZHVtcGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcC5zdGF0KCksIHAuc3RhdCgpKQorCisgICAgZGVmIHRlc3RfcGFydHNfaW50ZXJuaW5nKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJy91c3IvYmluL2ZvbycpCisgICAgICAgIHEgPSBQKCcvdXNyL2xvY2FsL2JpbicpCisgICAgICAgICMgJ3VzcicKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwLnBhcnRzWzFdLCBxLnBhcnRzWzFdKQorICAgICAgICAjICdiaW4nCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocC5wYXJ0c1syXSwgcS5wYXJ0c1szXSkKKworICAgIGRlZiBfY2hlY2tfY29tcGxleF9zeW1saW5rcyhzZWxmLCBsaW5rMF90YXJnZXQpOgorICAgICAgICAjIFRlc3Qgc29sdmluZyBhIG5vbi1sb29waW5nIGNoYWluIG9mIHN5bWxpbmtzIChpc3N1ZSAjMTk4ODcpCisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmRpcmxpbmsob3MucGF0aC5qb2luKCdsaW5rMCcsICdsaW5rMCcpLCBqb2luKCdsaW5rMScpKQorICAgICAgICBzZWxmLmRpcmxpbmsob3MucGF0aC5qb2luKCdsaW5rMScsICdsaW5rMScpLCBqb2luKCdsaW5rMicpKQorICAgICAgICBzZWxmLmRpcmxpbmsob3MucGF0aC5qb2luKCdsaW5rMicsICdsaW5rMicpLCBqb2luKCdsaW5rMycpKQorICAgICAgICBzZWxmLmRpcmxpbmsobGluazBfdGFyZ2V0LCBqb2luKCdsaW5rMCcpKQorCisgICAgICAgICMgUmVzb2x2ZSBhYnNvbHV0ZSBwYXRocworICAgICAgICBwID0gKFAgLyAnbGluazAnKS5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgQkFTRSkKKyAgICAgICAgcCA9IChQIC8gJ2xpbmsxJykucmVzb2x2ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIEJBU0UpCisgICAgICAgIHAgPSAoUCAvICdsaW5rMicpLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorICAgICAgICBwID0gKFAgLyAnbGluazMnKS5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgQkFTRSkKKworICAgICAgICAjIFJlc29sdmUgcmVsYXRpdmUgcGF0aHMKKyAgICAgICAgb2xkX3BhdGggPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihCQVNFKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0gc2VsZi5jbHMoJ2xpbmswJykucmVzb2x2ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgQkFTRSkKKyAgICAgICAgICAgIHAgPSBzZWxmLmNscygnbGluazEnKS5yZXNvbHZlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorICAgICAgICAgICAgcCA9IHNlbGYuY2xzKCdsaW5rMicpLnJlc29sdmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIEJBU0UpCisgICAgICAgICAgICBwID0gc2VsZi5jbHMoJ2xpbmszJykucmVzb2x2ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgQkFTRSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9wYXRoKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9jb21wbGV4X3N5bWxpbmtzX2Fic29sdXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19jb21wbGV4X3N5bWxpbmtzKEJBU0UpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X2NvbXBsZXhfc3ltbGlua3NfcmVsYXRpdmUoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2NvbXBsZXhfc3ltbGlua3MoJy4nKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9jb21wbGV4X3N5bWxpbmtzX3JlbGF0aXZlX2RvdF9kb3Qoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2NvbXBsZXhfc3ltbGlua3Mob3MucGF0aC5qb2luKCdkaXJBJywgJy4uJykpCisKKworY2xhc3MgUGF0aFRlc3QoX0Jhc2VQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuUGF0aAorCisgICAgZGVmIHRlc3RfY29uY3JldGVfY2xhc3Moc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscygnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShwKSwKKyAgICAgICAgICAgIHBhdGhsaWIuV2luZG93c1BhdGggaWYgb3MubmFtZSA9PSAnbnQnIGVsc2UgcGF0aGxpYi5Qb3NpeFBhdGgpCisKKyAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9mbGF2b3VyKHNlbGYpOgorICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwYXRobGliLlBvc2l4UGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBhdGhsaWIuV2luZG93c1BhdGgpCisKKworQG9ubHlfcG9zaXgKK2NsYXNzIFBvc2l4UGF0aFRlc3QoX0Jhc2VQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuUG9zaXhQYXRoCisKKyAgICBkZWYgX2NoZWNrX3N5bWxpbmtfbG9vcChzZWxmLCAqYXJncyk6CisgICAgICAgIHBhdGggPSBzZWxmLmNscygqYXJncykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgcHJpbnQocGF0aC5yZXNvbHZlKCkpCisKKyAgICBkZWYgdGVzdF9vcGVuX21vZGUoc2VsZik6CisgICAgICAgIG9sZF9tYXNrID0gb3MudW1hc2soMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnVtYXNrLCBvbGRfbWFzaykKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHdpdGggKHAgLyAnbmV3X2ZpbGUnKS5vcGVuKCd3YicpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzdCA9IG9zLnN0YXQoam9pbignbmV3X2ZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIDBvNjY2KQorICAgICAgICBvcy51bWFzaygwbzAyMikKKyAgICAgICAgd2l0aCAocCAvICdvdGhlcl9uZXdfZmlsZScpLm9wZW4oJ3diJyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHN0ID0gb3Muc3RhdChqb2luKCdvdGhlcl9uZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG82NDQpCisKKyAgICBkZWYgdGVzdF90b3VjaF9tb2RlKHNlbGYpOgorICAgICAgICBvbGRfbWFzayA9IG9zLnVtYXNrKDApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy51bWFzaywgb2xkX21hc2spCisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICAocCAvICduZXdfZmlsZScpLnRvdWNoKCkKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzY2NikKKyAgICAgICAgb3MudW1hc2soMG8wMjIpCisgICAgICAgIChwIC8gJ290aGVyX25ld19maWxlJykudG91Y2goKQorICAgICAgICBzdCA9IG9zLnN0YXQoam9pbignb3RoZXJfbmV3X2ZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIDBvNjQ0KQorICAgICAgICAocCAvICdtYXNrZWRfbmV3X2ZpbGUnKS50b3VjaChtb2RlPTBvNzUwKQorICAgICAgICBzdCA9IG9zLnN0YXQoam9pbignbWFza2VkX25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzc1MCkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfcmVzb2x2ZV9sb29wKHNlbGYpOgorICAgICAgICAjIExvb3AgZGV0ZWN0aW9uIGZvciBicm9rZW4gc3ltbGlua3MgdW5kZXIgUE9TSVgKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgICMgTG9vcHMgd2l0aCByZWxhdGl2ZSBzeW1saW5rcworICAgICAgICBvcy5zeW1saW5rKCdsaW5rWC9pbnNpZGUnLCBqb2luKCdsaW5rWCcpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtYJykKKyAgICAgICAgb3Muc3ltbGluaygnbGlua1knLCBqb2luKCdsaW5rWScpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtZJykKKyAgICAgICAgb3Muc3ltbGluaygnbGlua1ovLi4vbGlua1onLCBqb2luKCdsaW5rWicpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtaJykKKyAgICAgICAgIyBMb29wcyB3aXRoIGFic29sdXRlIHN5bWxpbmtzCisgICAgICAgIG9zLnN5bWxpbmsoam9pbignbGlua1UvaW5zaWRlJyksIGpvaW4oJ2xpbmtVJykpCisgICAgICAgIHNlbGYuX2NoZWNrX3N5bWxpbmtfbG9vcChCQVNFLCAnbGlua1UnKQorICAgICAgICBvcy5zeW1saW5rKGpvaW4oJ2xpbmtWJyksIGpvaW4oJ2xpbmtWJykpCisgICAgICAgIHNlbGYuX2NoZWNrX3N5bWxpbmtfbG9vcChCQVNFLCAnbGlua1YnKQorICAgICAgICBvcy5zeW1saW5rKGpvaW4oJ2xpbmtXLy4uL2xpbmtXJyksIGpvaW4oJ2xpbmtXJykpCisgICAgICAgIHNlbGYuX2NoZWNrX3N5bWxpbmtfbG9vcChCQVNFLCAnbGlua1cnKQorCisgICAgZGVmIHRlc3RfZ2xvYihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UpCisgICAgICAgIGdpdmVuID0gc2V0KHAuZ2xvYigiRklMRWEiKSkKKyAgICAgICAgZXhwZWN0ID0gc2V0KCkgaWYgbm90IHN1cHBvcnQuZnNfaXNfY2FzZV9pbnNlbnNpdGl2ZShCQVNFKSBlbHNlIGdpdmVuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2l2ZW4sIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCJGSUxFYSoiKSksIHNldCgpKQorCisgICAgZGVmIHRlc3Rfcmdsb2Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFLCAiZGlyQyIpCisgICAgICAgIGdpdmVuID0gc2V0KHAucmdsb2IoIkZJTEVkIikpCisgICAgICAgIGV4cGVjdCA9IHNldCgpIGlmIG5vdCBzdXBwb3J0LmZzX2lzX2Nhc2VfaW5zZW5zaXRpdmUoQkFTRSkgZWxzZSBnaXZlbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpdmVuLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAucmdsb2IoIkZJTEVkKiIpKSwgc2V0KCkpCisKKworQG9ubHlfbnQKK2NsYXNzIFdpbmRvd3NQYXRoVGVzdChfQmFzZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5XaW5kb3dzUGF0aAorCisgICAgZGVmIHRlc3RfZ2xvYihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAuZ2xvYigiRklMRWEiKSksIHsgUChCQVNFLCAiZmlsZUEiKSB9KQorCisgICAgZGVmIHRlc3Rfcmdsb2Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFLCAiZGlyQyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAucmdsb2IoIkZJTEVkIikpLCB7IFAoQkFTRSwgImRpckMvZGlyRC9maWxlRCIpIH0pCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGRiLnB5IGIvTGliL3Rlc3QvdGVzdF9wZGIucHkKaW5kZXggMDMwODRlNC4uNzQyNTNiMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZGIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZGIucHkKQEAgLTEsOSArMSw5IEBACiAjIEEgdGVzdCBzdWl0ZSBmb3IgcGRiOyBub3QgdmVyeSBjb21wcmVoZW5zaXZlIGF0IHRoZSBtb21lbnQuCiAKIGltcG9ydCBkb2N0ZXN0Ci1pbXBvcnQgaW1wCiBpbXBvcnQgcGRiCiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0ZXh0d3JhcApAQCAtMjA1LDcgKzIwNSw4IEBACiAgICAgLi4uICAgICAnZW5hYmxlIDEnLAogICAgIC4uLiAgICAgJ2NsZWFyIDEnLAogICAgIC4uLiAgICAgJ2NvbW1hbmRzIDInLAotICAgIC4uLiAgICAgJ3ByaW50IDQyJywKKyAgICAuLi4gICAgICdwICI0MiInLAorICAgIC4uLiAgICAgJ3ByaW50KCI0MiIsIDcqNiknLCAgICAgIyBJc3N1ZSAxODc2NCAobm90IGFib3V0IGJyZWFrcG9pbnRzKQogICAgIC4uLiAgICAgJ2VuZCcsCiAgICAgLi4uICAgICAnY29udGludWUnLCAgIyB3aWxsIHN0b3AgYXQgYnJlYWtwb2ludCAyIChsaW5lIDQpCiAgICAgLi4uICAgICAnY2xlYXInLCAgICAgIyBjbGVhciBhbGwhCkBAIC0yNTIsMTEgKzI1MywxMyBAQAogICAgIChQZGIpIGNsZWFyIDEKICAgICBEZWxldGVkIGJyZWFrcG9pbnQgMSBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjMKICAgICAoUGRiKSBjb21tYW5kcyAyCi0gICAgKGNvbSkgcHJpbnQgNDIKKyAgICAoY29tKSBwICI0MiIKKyAgICAoY29tKSBwcmludCgiNDIiLCA3KjYpCiAgICAgKGNvbSkgZW5kCiAgICAgKFBkYikgY29udGludWUKICAgICAxCi0gICAgNDIKKyAgICAnNDInCisgICAgNDIgNDIKICAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT4oNCl0ZXN0X2Z1bmN0aW9uKCkKICAgICAtPiBwcmludCgyKQogICAgIChQZGIpIGNsZWFyCkBAIC00NjQsNyArNDY3LDcgQEAKIAogCiAjIE1vZHVsZSBmb3IgdGVzdGluZyBza2lwcGluZyBvZiBtb2R1bGUgdGhhdCBtYWtlcyBhIGNhbGxiYWNrCi1tb2QgPSBpbXAubmV3X21vZHVsZSgnbW9kdWxlX3RvX3NraXAnKQorbW9kID0gdHlwZXMuTW9kdWxlVHlwZSgnbW9kdWxlX3RvX3NraXAnKQogZXhlYygnZGVmIGZvb19wb255KGNhbGxiYWNrKTogeCA9IDE7IGNhbGxiYWNrKCk7IHJldHVybiBOb25lJywgbW9kLl9fZGljdF9fKQogCiAKQEAgLTU5Nyw2ICs2MDAsMzExIEBACiAgICAgKFBkYikgY29udGludWUKICAgICAiIiIKIAorZGVmIHRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50KCk6CisgICAgIiIiVGVzdCB0aGF0IHBkYiBzdG9wcyBhZnRlciBhIG5leHQvdW50aWwvcmV0dXJuIGlzc3VlZCBhdCBhIHJldHVybiBkZWJ1ZyBldmVudC4KKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbl8yKCk6CisgICAgLi4uICAgICB4ID0gMQorICAgIC4uLiAgICAgeCA9IDIKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb25fMigpCisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC4uLiAgICAgZW5kID0gMQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnYnJlYWsgdGVzdF9mdW5jdGlvbl8yJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZScsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZScsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICd1bnRpbCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFsxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiB0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIChQZGIpIGJyZWFrIHRlc3RfZnVuY3Rpb25fMgorICAgIEJyZWFrcG9pbnQgMSBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPjoxCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMV0+KDQpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAoUGRiKSBjb250aW51ZQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT4oMil0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC0+IHggPSAxCisgICAgKFBkYikgcmV0dXJuCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT4oMyl0ZXN0X2Z1bmN0aW9uXzIoKS0+Tm9uZQorICAgIC0+IHggPSAyCisgICAgKFBkYikgdW50aWwKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMV0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAoUGRiKSBjb250aW51ZQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT4oMil0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC0+IHggPSAxCisgICAgKFBkYikgcmV0dXJuCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT4oMyl0ZXN0X2Z1bmN0aW9uXzIoKS0+Tm9uZQorICAgIC0+IHggPSAyCisgICAgKFBkYikgcmV0dXJuCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig2KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGVuZCA9IDEKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCitkZWYgdGVzdF9wZGJfbmV4dF9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIHNraXAgdW53aW5kbmcgc3RhY2sgb24geWllbGQgZm9yIGdlbmVyYXRvcnMgZm9yICJuZXh0IiBjb21tYW5kCisKKyAgICA+Pj4gZGVmIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICB5aWVsZCAwCisgICAgLi4uICAgICByZXR1cm4gMQorICAgIC4uLiAgICAgeWllbGQgMgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBpdCA9IHRlc3RfZ2VuKCkKKyAgICAuLi4gICAgIHRyeToKKyAgICAuLi4gICAgICAgICBhc3NlcnQgbmV4dChpdCkgPT0gMAorICAgIC4uLiAgICAgICAgIG5leHQoaXQpCisgICAgLi4uICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBleDoKKyAgICAuLi4gICAgICAgICBhc3NlcnQgZXgudmFsdWUgPT0gMQorICAgIC4uLiAgICAgcHJpbnQoImZpbmlzaGVkIikKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJ10pOgorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGl0ID0gdGVzdF9nZW4oKQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDQpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gdHJ5OgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gYXNzZXJ0IG5leHQoaXQpID09IDAKKyAgICAoUGRiKSBzdGVwCisgICAgLS1DYWxsLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMF0+KDEpdGVzdF9nZW4oKQorICAgIC0+IGRlZiB0ZXN0X2dlbigpOgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMF0+KDIpdGVzdF9nZW4oKQorICAgIC0+IHlpZWxkIDAKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigzKXRlc3RfZ2VuKCkKKyAgICAtPiByZXR1cm4gMQorICAgIChQZGIpIHN0ZXAKKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigzKXRlc3RfZ2VuKCktPjEKKyAgICAtPiByZXR1cm4gMQorICAgIChQZGIpIHN0ZXAKKyAgICBTdG9wSXRlcmF0aW9uOiAxCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig2KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IG5leHQoaXQpCisgICAgKFBkYikgY29udGludWUKKyAgICBmaW5pc2hlZAorICAgICIiIgorCitkZWYgdGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvcigpOgorICAgICIiIlRlc3Rpbmcgbm8gdW53aW5kbmcgc3RhY2sgb24geWllbGQgZm9yIGdlbmVyYXRvcnMKKyAgICAgICBmb3IgInJldHVybiIgY29tbWFuZAorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKyAgICAuLi4gICAgIHlpZWxkIDIKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgaXQgPSB0ZXN0X2dlbigpCisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgYXNzZXJ0IG5leHQoaXQpID09IDAKKyAgICAuLi4gICAgICAgICBuZXh0KGl0KQorICAgIC4uLiAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXg6CisgICAgLi4uICAgICAgICAgYXNzZXJ0IGV4LnZhbHVlID09IDEKKyAgICAuLi4gICAgIHByaW50KCJmaW5pc2hlZCIpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdyZXR1cm4nLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJ10pOgorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gaXQgPSB0ZXN0X2dlbigpCisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRyeToKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gYXNzZXJ0IG5leHQoaXQpID09IDAKKyAgICAoUGRiKSBzdGVwCisgICAgLS1DYWxsLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMSl0ZXN0X2dlbigpCisgICAgLT4gZGVmIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgcmV0dXJuCisgICAgU3RvcEl0ZXJhdGlvbjogMQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig2KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IG5leHQoaXQpCisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig3KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oOCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBhc3NlcnQgZXgudmFsdWUgPT0gMQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgZmluaXNoZWQKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvcigpOgorICAgICIiIlRlc3Rpbmcgbm8gdW53aW5kbmcgc3RhY2sgb24geWllbGQgZm9yIGdlbmVyYXRvcnMKKyAgICAgICBmb3IgInVudGlsIiBjb21tYW5kIGlmIHRhcmdldCBicmVha3BvaW5nIGlzIG5vdCByZWFjaGVkCisKKyAgICA+Pj4gZGVmIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICB5aWVsZCAwCisgICAgLi4uICAgICB5aWVsZCAxCisgICAgLi4uICAgICB5aWVsZCAyCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICAgICAgcHJpbnQoaSkKKyAgICAuLi4gICAgIHByaW50KCJmaW5pc2hlZCIpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICd1bnRpbCA0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl91bnRpbF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gZm9yIGkgaW4gdGVzdF9nZW4oKToKKyAgICAoUGRiKSBzdGVwCisgICAgLS1DYWxsLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigxKXRlc3RfZ2VuKCkKKyAgICAtPiBkZWYgdGVzdF9nZW4oKToKKyAgICAoUGRiKSB1bnRpbCA0CisgICAgMAorICAgIDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPig0KXRlc3RfZ2VuKCkKKyAgICAtPiB5aWVsZCAyCisgICAgKFBkYikgc3RlcAorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPig0KXRlc3RfZ2VuKCktPjIKKyAgICAtPiB5aWVsZCAyCisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl91bnRpbF9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDQpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoaSkKKyAgICAoUGRiKSBjb250aW51ZQorICAgIDIKKyAgICBmaW5pc2hlZAorICAgICIiIgorCitkZWYgdGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcCgpOgorICAgICIiIlRoZSBuZXh0IGNvbW1hbmQgb24gcmV0dXJuaW5nIGZyb20gYSBnZW5lcmF0b3IgY29udHJvbGVkIGJ5IGEgZm9yIGxvb3AuCisKKyAgICA+Pj4gZGVmIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICB5aWVsZCAwCisgICAgLi4uICAgICByZXR1cm4gMQorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgICAgIHByaW50KCd2YWx1ZScsIGkpCisgICAgLi4uICAgICB4ID0gMTIzCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydicmVhayB0ZXN0X2dlbicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJ10pOgorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3BbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gZm9yIGkgaW4gdGVzdF9nZW4oKToKKyAgICAoUGRiKSBicmVhayB0ZXN0X2dlbgorICAgIEJyZWFrcG9pbnQgNiBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3BbMF0+OjEKKyAgICAoUGRiKSBjb250aW51ZQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzBdPigyKXRlc3RfZ2VuKCkKKyAgICAtPiB5aWVsZCAwCisgICAgKFBkYikgbmV4dAorICAgIHZhbHVlIDAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFswXT4oMyl0ZXN0X2dlbigpCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBuZXh0CisgICAgSW50ZXJuYWwgU3RvcEl0ZXJhdGlvbjogMQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHggPSAxMjMKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCitkZWYgdGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yKCk6CisgICAgIiIiVGhlIG5leHQgY29tbWFuZCBpbiBhIGdlbmVyYXRvciB3aXRoIGEgc3ViaXRlcmF0b3IuCisKKyAgICA+Pj4gZGVmIHRlc3Rfc3ViZ2VuZXJhdG9yKCk6CisgICAgLi4uICAgICB5aWVsZCAwCisgICAgLi4uICAgICByZXR1cm4gMQorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeCA9IHlpZWxkIGZyb20gdGVzdF9zdWJnZW5lcmF0b3IoKQorICAgIC4uLiAgICAgcmV0dXJuIHgKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgZm9yIGkgaW4gdGVzdF9nZW4oKToKKyAgICAuLi4gICAgICAgICBwcmludCgndmFsdWUnLCBpKQorICAgIC4uLiAgICAgeCA9IDEyMworCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnbmV4dCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnbmV4dCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnbmV4dCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzJdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvclsxXT4oMSl0ZXN0X2dlbigpCisgICAgLT4gZGVmIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfc3ViaXRlcmF0b3JbMV0+KDIpdGVzdF9nZW4oKQorICAgIC0+IHggPSB5aWVsZCBmcm9tIHRlc3Rfc3ViZ2VuZXJhdG9yKCkKKyAgICAoUGRiKSBuZXh0CisgICAgdmFsdWUgMAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfc3ViaXRlcmF0b3JbMV0+KDMpdGVzdF9nZW4oKQorICAgIC0+IHJldHVybiB4CisgICAgKFBkYikgbmV4dAorICAgIEludGVybmFsIFN0b3BJdGVyYXRpb246IDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzJdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfc3ViaXRlcmF0b3JbMl0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4geCA9IDEyMworICAgIChQZGIpIGNvbnRpbnVlCisgICAgIiIiCisKIAogY2xhc3MgUGRiVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC02MTcsNiArOTI1LDM2IEBACiAgICAgICAgIHN0ZGVyciA9IHN0ZGVyciBhbmQgYnl0ZXMuZGVjb2RlKHN0ZGVycikKICAgICAgICAgcmV0dXJuIHN0ZG91dCwgc3RkZXJyCiAKKyAgICBkZWYgX2Fzc2VydF9maW5kX2Z1bmN0aW9uKHNlbGYsIGZpbGVfY29udGVudCwgZnVuY19uYW1lLCBleHBlY3RlZCk6CisgICAgICAgIGZpbGVfY29udGVudCA9IHRleHR3cmFwLmRlZGVudChmaWxlX2NvbnRlbnQpCisKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGZpbGVfY29udGVudCkKKworICAgICAgICBleHBlY3RlZCA9IE5vbmUgaWYgbm90IGV4cGVjdGVkIGVsc2UgKAorICAgICAgICAgICAgZXhwZWN0ZWRbMF0sIHN1cHBvcnQuVEVTVEZOLCBleHBlY3RlZFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGV4cGVjdGVkLCBwZGIuZmluZF9mdW5jdGlvbihmdW5jX25hbWUsIHN1cHBvcnQuVEVTVEZOKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZnVuY3Rpb25fZW1wdHlfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2ZpbmRfZnVuY3Rpb24oJycsICdmb28nLCBOb25lKQorCisgICAgZGVmIHRlc3RfZmluZF9mdW5jdGlvbl9mb3VuZChzZWxmKToKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2ZpbmRfZnVuY3Rpb24oCisgICAgICAgICAgICAiIiJcCisgICAgICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBkZWYgYmFyKCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBkZWYgcXV1eCgpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIiwKKyAgICAgICAgICAgICdiYXInLAorICAgICAgICAgICAgKCdiYXInLCA0KSwKKyAgICAgICAgKQorCiAgICAgZGVmIHRlc3RfaXNzdWU3OTY0KHNlbGYpOgogICAgICAgICAjIG9wZW4gdGhlIGZpbGUgYXMgYmluYXJ5IHNvIHdlIGNhbiBmb3JjZSBcclxuIG5ld2xpbmUKICAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkgYi9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQppbmRleCAxY2FjZGVhLi41MDI1NzkyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQpAQCAtNSw0NCArNSwyOCBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIG1hdGggaW1wb3J0IGNvcHlzaWduCiAKLWRlZiBkaXNhc3NlbWJsZShmdW5jKToKLSAgICBmID0gU3RyaW5nSU8oKQotICAgIHRtcCA9IHN5cy5zdGRvdXQKLSAgICBzeXMuc3Rkb3V0ID0gZgotICAgIHRyeToKLSAgICAgICAgZGlzLmRpcyhmdW5jKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHN5cy5zdGRvdXQgPSB0bXAKLSAgICByZXN1bHQgPSBmLmdldHZhbHVlKCkKLSAgICBmLmNsb3NlKCkKLSAgICByZXR1cm4gcmVzdWx0Citmcm9tIHRlc3QuYnl0ZWNvZGVfaGVscGVyIGltcG9ydCBCeXRlY29kZVRlc3RDYXNlCiAKLWRlZiBkaXNfc2luZ2xlKGxpbmUpOgotICAgIHJldHVybiBkaXNhc3NlbWJsZShjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykpCi0KLQotY2xhc3MgVGVzdFRyYW5mb3Jtcyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBUZXN0VHJhbmZvcm1zKEJ5dGVjb2RlVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfdW5vdChzZWxmKToKICAgICAgICAgIyBVTkFSWV9OT1QgUE9QX0pVTVBfSUZfRkFMU0UgIC0tPiAgUE9QX0pVTVBfSUZfVFJVRScKICAgICAgICAgZGVmIHVub3QoeCk6CiAgICAgICAgICAgICBpZiBub3QgeCA9PSAyOgogICAgICAgICAgICAgICAgIGRlbCB4Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKHVub3QpCi0gICAgICAgIGZvciBlbGVtIGluICgnVU5BUllfTk9UJywgJ1BPUF9KVU1QX0lGX0ZBTFNFJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKLSAgICAgICAgZm9yIGVsZW0gaW4gKCdQT1BfSlVNUF9JRl9UUlVFJywpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZSh1bm90LCAnVU5BUllfTk9UJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKHVub3QsICdQT1BfSlVNUF9JRl9GQUxTRScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZSh1bm90LCAnUE9QX0pVTVBfSUZfVFJVRScpCiAKICAgICBkZWYgdGVzdF9lbGltX2ludmVyc2lvbl9vZl9pc19vcl9pbihzZWxmKToKLSAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCdub3QgYSBpcyBiJywgJyhpcyBub3QpJywpLAotICAgICAgICAgICAgKCdub3QgYSBpbiBiJywgJyhub3QgaW4pJywpLAotICAgICAgICAgICAgKCdub3QgYSBpcyBub3QgYicsICcoaXMpJywpLAotICAgICAgICAgICAgKCdub3QgYSBub3QgaW4gYicsICcoaW4pJywpLAorICAgICAgICBmb3IgbGluZSwgY21wX29wIGluICgKKyAgICAgICAgICAgICgnbm90IGEgaXMgYicsICdpcyBub3QnLCksCisgICAgICAgICAgICAoJ25vdCBhIGluIGInLCAnbm90IGluJywpLAorICAgICAgICAgICAgKCdub3QgYSBpcyBub3QgYicsICdpcycsKSwKKyAgICAgICAgICAgICgnbm90IGEgbm90IGluIGInLCAnaW4nLCksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0NPTVBBUkVfT1AnLCBjbXBfb3ApCiAKICAgICBkZWYgdGVzdF9nbG9iYWxfYXNfY29uc3RhbnQoc2VsZik6CiAgICAgICAgICMgTE9BRF9HTE9CQUwgTm9uZS9UcnVlL0ZhbHNlICAtLT4gIExPQURfQ09OU1QgTm9uZS9UcnVlL0ZhbHNlCkBAIC01NiwxNyArNDAsMTQgQEAKICAgICAgICAgZGVmIGgoeCk6CiAgICAgICAgICAgICBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIHgKLSAgICAgICAgZm9yIGZ1bmMsIG5hbWUgaW4gKChmLCAnTm9uZScpLCAoZywgJ1RydWUnKSwgKGgsICdGYWxzZScpKToKLSAgICAgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGZ1bmMpCi0gICAgICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfR0xPQkFMJywpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgYXNtKQotICAgICAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0NPTlNUJywgJygnK25hbWUrJyknKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgZm9yIGZ1bmMsIGVsZW0gaW4gKChmLCBOb25lKSwgKGcsIFRydWUpLCAoaCwgRmFsc2UpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmdW5jLCAnTE9BRF9HTE9CQUwnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGZ1bmMsICdMT0FEX0NPTlNUJywgZWxlbSkKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgICdBZGRpbmcgYSBkb2NzdHJpbmcgbWFkZSB0aGlzIHRlc3QgZmFpbCBpbiBQeTIuNS4wJwogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgc2VsZi5hc3NlcnRJbignTE9BRF9DT05TVCcsIGRpc2Fzc2VtYmxlKGYpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdMT0FEX0dMT0JBTCcsIGRpc2Fzc2VtYmxlKGYpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0xPQURfR0xPQkFMJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGYsICdMT0FEX0NPTlNUJywgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3doaWxlX29uZShzZWxmKToKICAgICAgICAgIyBTa2lwIG92ZXI6ICBMT0FEX0NPTlNUIHRydWVjb25zdCAgUE9QX0pVTVBfSUZfRkFMU0UgeHgKQEAgLTc0LDExICs1NSwxMCBAQAogICAgICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByZXR1cm4gbGlzdAotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQogICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfQ09OU1QnLCAnUE9QX0pVTVBfSUZfRkFMU0UnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsIGVsZW0pCiAgICAgICAgIGZvciBlbGVtIGluICgnSlVNUF9BQlNPTFVURScsKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGYsIGVsZW0pCiAKICAgICBkZWYgdGVzdF9wYWNrX3VucGFjayhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKApAQCAtODYsMjggKzY2LDMwIEBACiAgICAgICAgICAgICAoJ2EsIGIgPSBhLCBiJywgJ1JPVF9UV08nLCksCiAgICAgICAgICAgICAoJ2EsIGIsIGMgPSBhLCBiLCBjJywgJ1JPVF9USFJFRScsKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVU5QQUNLX1RVUExFJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwnJywnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCBlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9UVVBMRScpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ1VOUEFDS19UVVBMRScpCiAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX3R1cGxlc19vZl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnYSA9IDEsMiwzJywgJygoMSwgMiwgMykpJyksCi0gICAgICAgICAgICAoJygiYSIsImIiLCJjIiknLCAiKCgnYScsICdiJywgJ2MnKSkiKSwKLSAgICAgICAgICAgICgnYSxiLGMgPSAxLDIsMycsICcoKDEsIDIsIDMpKScpLAotICAgICAgICAgICAgKCcoTm9uZSwgMSwgTm9uZSknLCAnKChOb25lLCAxLCBOb25lKSknKSwKLSAgICAgICAgICAgICgnKCgxLCAyKSwgMywgNCknLCAnKCgoMSwgMiksIDMsIDQpKScpLAorICAgICAgICAgICAgKCdhID0gMSwyLDMnLCAoMSwgMiwgMykpLAorICAgICAgICAgICAgKCcoImEiLCJiIiwiYyIpJywgKCdhJywgJ2InLCAnYycpKSwKKyAgICAgICAgICAgICgnYSxiLGMgPSAxLDIsMycsICgxLCAyLCAzKSksCisgICAgICAgICAgICAoJyhOb25lLCAxLCBOb25lKScsIChOb25lLCAxLCBOb25lKSksCisgICAgICAgICAgICAoJygoMSwgMiksIDMsIDQpJywgKCgxLCAyKSwgMywgNCkpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfVFVQTEUnLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCcnLCdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfVFVQTEUnKQogCiAgICAgICAgICMgTG9uZyB0dXBsZXMgc2hvdWxkIGJlIGZvbGRlZCB0b28uCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUocmVwcih0dXBsZShyYW5nZSgxMDAwMCkpKSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUocmVwcih0dXBsZShyYW5nZSgxMDAwMCkpKSwnJywnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9UVVBMRScpCiAgICAgICAgICMgT25lIExPQURfQ09OU1QgZm9yIHRoZSB0dXBsZSwgb25lIGZvciB0aGUgTm9uZSByZXR1cm4gdmFsdWUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uY291bnQoJ0xPQURfQ09OU1QnKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfVFVQTEUnLCBhc20pCisgICAgICAgIGxvYWRfY29uc3RzID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdMT0FEX0NPTlNUJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9hZF9jb25zdHMpLCAyKQogCiAgICAgICAgICMgQnVnIDEwNTM4MTk6ICBUdXBsZSBvZiBjb25zdGFudHMgbWlzaWRlbnRpZmllZCB3aGVuIHByZXNlbnRlZCB3aXRoOgogICAgICAgICAjIC4gLiAuIG9wY29kZV93aXRoX2FyZyAxMDAgICB1bmFyeV9vcGNvZGUgICBCVUlMRF9UVVBMRSAxICAuIC4gLgpAQCAtMTI5LDE0ICsxMTEsMTQgQEAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX2xpc3RzX29mX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAogICAgICAgICAgICAgIyBpbi9ub3QgaW4gY29uc3RhbnRzIHdpdGggQlVJTERfTElTVCBzaG91bGQgYmUgZm9sZGVkIHRvIGEgdHVwbGU6Ci0gICAgICAgICAgICAoJ2EgaW4gWzEsMiwzXScsICcoMSwgMiwgMyknKSwKLSAgICAgICAgICAgICgnYSBub3QgaW4gWyJhIiwiYiIsImMiXScsICIoKCdhJywgJ2InLCAnYycpKSIpLAotICAgICAgICAgICAgKCdhIGluIFtOb25lLCAxLCBOb25lXScsICcoKE5vbmUsIDEsIE5vbmUpKScpLAotICAgICAgICAgICAgKCdhIG5vdCBpbiBbKDEsIDIpLCAzLCA0XScsICcoKCgxLCAyKSwgMywgNCkpJyksCisgICAgICAgICAgICAoJ2EgaW4gWzEsMiwzXScsICgxLCAyLCAzKSksCisgICAgICAgICAgICAoJ2Egbm90IGluIFsiYSIsImIiLCJjIl0nLCAoJ2EnLCAnYicsICdjJykpLAorICAgICAgICAgICAgKCdhIGluIFtOb25lLCAxLCBOb25lXScsIChOb25lLCAxLCBOb25lKSksCisgICAgICAgICAgICAoJ2Egbm90IGluIFsoMSwgMiksIDMsIDRdJywgKCgxLCAyKSwgMywgNCkpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfTElTVCcsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX0xJU1QnKQogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl9zZXRzX29mX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKApAQCAtMTQ3LDE4ICsxMjksOSBAQAogICAgICAgICAgICAgKCdhIG5vdCBpbiB7KDEsIDIpLCAzLCA0fScsIGZyb3plbnNldCh7KDEsIDIpLCAzLCA0fSkpLAogICAgICAgICAgICAgKCdhIGluIHsxLCAyLCAzLCAzLCAyLCAxfScsIGZyb3plbnNldCh7MSwgMiwgM30pKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9TRVQnLCBhc20pCi0KLSAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIGZyb3plbnNldCAnZWxlbScgaXMgaW4gdGhlIGRpc2Fzc2VtYmx5Ci0gICAgICAgICAgICAjIFRoZSBvcmRlcmluZyBvZiB0aGUgZWxlbWVudHMgaW4gcmVwciggZnJvemVuc2V0ICkgaXNuJ3QKLSAgICAgICAgICAgICMgZ3VhcmFudGVlZCwgc28gd2UganVtcCB0aHJvdWdoIHNvbWUgaG9vcHMgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZQotICAgICAgICAgICAgIyB0aGUgZnJvemVuc2V0IHdlIGV4cGVjdDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Zyb3plbnNldCcsIGFzbSkKLSAgICAgICAgICAgICMgRXh0cmFjdCB0aGUgZnJvemVuc2V0IGxpdGVyYWwgZnJvbSB0aGUgZGlzYXNzZW1ibHk6Ci0gICAgICAgICAgICBtID0gcmUubWF0Y2gocicuKihmcm96ZW5zZXRcKHsuKn1cKSkuKicsIGFzbSwgcmUuRE9UQUxMKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwobS5ncm91cCgxKSksIGVsZW0pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX1NFVCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQogCiAgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHJlc3VsdGluZyBjb2RlIGFjdHVhbGx5IHdvcmtzOgogICAgICAgICBkZWYgZihhKToKQEAgLTE3Niw5OCArMTQ5LDEwMyBAQAogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl9iaW5vcHNfb25fY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJ2EgPSAyKzMrNCcsICcoOSknKSwgICAgICAgICAgICAgICAgICAgIyBjaGFpbmVkIGZvbGQKLSAgICAgICAgICAgICgnIkAiKjQnLCAiKCdAQEBAJykiKSwgICAgICAgICAgICAgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKLSAgICAgICAgICAgICgnYT0iYWJjIiArICJkZWYiJywgIignYWJjZGVmJykiKSwgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKLSAgICAgICAgICAgICgnYSA9IDMqKjQnLCAnKDgxKScpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBwb3dlcgotICAgICAgICAgICAgKCdhID0gMyo0JywgJygxMiknKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG11bHRpcGx5Ci0gICAgICAgICAgICAoJ2EgPSAxMy8vNCcsICcoMyknKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgZmxvb3IgZGl2aWRlCi0gICAgICAgICAgICAoJ2EgPSAxNCU0JywgJygyKScpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgbW9kdWxvCi0gICAgICAgICAgICAoJ2EgPSAyKzMnLCAnKDUpJyksICAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYWRkCi0gICAgICAgICAgICAoJ2EgPSAxMy00JywgJyg5KScpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgc3VidHJhY3QKLSAgICAgICAgICAgICgnYSA9ICgxMiwxMylbMV0nLCAnKDEzKScpLCAgICAgICAgICAgICAjIGJpbmFyeSBzdWJzY3IKLSAgICAgICAgICAgICgnYSA9IDEzIDw8IDInLCAnKDUyKScpLCAgICAgICAgICAgICAgICAjIGJpbmFyeSBsc2hpZnQKLSAgICAgICAgICAgICgnYSA9IDEzID4+IDInLCAnKDMpJyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSByc2hpZnQKLSAgICAgICAgICAgICgnYSA9IDEzICYgNycsICcoNSknKSwgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBhbmQKLSAgICAgICAgICAgICgnYSA9IDEzIF4gNycsICcoMTApJyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSB4b3IKLSAgICAgICAgICAgICgnYSA9IDEzIHwgNycsICcoMTUpJyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSBvcgorICAgICAgICAgICAgKCdhID0gMiszKzQnLCA5KSwgICAgICAgICAgICAgICAgICAgIyBjaGFpbmVkIGZvbGQKKyAgICAgICAgICAgICgnIkAiKjQnLCAnQEBAQCcpLCAgICAgICAgICAgICAgICAgICMgY2hlY2sgc3RyaW5nIG9wcworICAgICAgICAgICAgKCdhPSJhYmMiICsgImRlZiInLCAnYWJjZGVmJyksICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCisgICAgICAgICAgICAoJ2EgPSAzKio0JywgODEpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBwb3dlcgorICAgICAgICAgICAgKCdhID0gMyo0JywgMTIpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgbXVsdGlwbHkKKyAgICAgICAgICAgICgnYSA9IDEzLy80JywgMyksICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGZsb29yIGRpdmlkZQorICAgICAgICAgICAgKCdhID0gMTQlNCcsIDIpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgbW9kdWxvCisgICAgICAgICAgICAoJ2EgPSAyKzMnLCA1KSwgICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBhZGQKKyAgICAgICAgICAgICgnYSA9IDEzLTQnLCA5KSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IHN1YnRyYWN0CisgICAgICAgICAgICAoJ2EgPSAoMTIsMTMpWzFdJywgMTMpLCAgICAgICAgICAgICAjIGJpbmFyeSBzdWJzY3IKKyAgICAgICAgICAgICgnYSA9IDEzIDw8IDInLCA1MiksICAgICAgICAgICAgICAgICMgYmluYXJ5IGxzaGlmdAorICAgICAgICAgICAgKCdhID0gMTMgPj4gMicsIDMpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcnNoaWZ0CisgICAgICAgICAgICAoJ2EgPSAxMyAmIDcnLCA1KSwgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBhbmQKKyAgICAgICAgICAgICgnYSA9IDEzIF4gNycsIDEwKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHhvcgorICAgICAgICAgICAgKCdhID0gMTMgfCA3JywgMTUpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgb3IKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZXycsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnQklOQVJZXycpKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdW5mb2xkYWJsZXMgYXJlIHNraXBwZWQKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnYT0yKyJiIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJygyKScsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiKCdiJykiLCBhc20pCisgICAgICAgIGNvZGUgPSBjb21waWxlKCdhPTIrImIiJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAyKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAnYicpCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCBsYXJnZSBzZXF1ZW5jZXMgZG8gbm90IHJlc3VsdCBmcm9tIGZvbGRpbmcKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnYT0ieCIqMTAwMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJygxMDAwKScsIGFzbSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJ2E9IngiKjEwMDAnLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIDEwMDApCiAKICAgICBkZWYgdGVzdF9iaW5hcnlfc3Vic2NyX29uX3VuaWNvZGUoc2VsZik6CiAgICAgICAgICMgdmFsaWQgY29kZSBnZXQgb3B0aW1pemVkCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJyJmb28iWzBdJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiKCdmJykiLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV9TVUJTQ1InLCBhc20pCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJyJcdTAwNjFcdWZmZmYiWzFdJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiKCdcXHVmZmZmJykiLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV9TVUJTQ1InLCBhc20pCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJyJcVTAwMDEyMzQ1YWJjZGVmIlszXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignYycpIiwgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnImZvbyJbMF0nLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsICdmJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCSU5BUllfU1VCU0NSJykKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJcdTAwNjFcdWZmZmYiWzFdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAnXHVmZmZmJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsJ0JJTkFSWV9TVUJTQ1InKQorCisgICAgICAgICMgV2l0aCBQRVAgMzkzLCBub24tQk1QIGNoYXIgZ2V0IG9wdGltaXplZAorICAgICAgICBjb2RlID0gY29tcGlsZSgnIlxVMDAwMTIzNDUiWzBdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAnXFUwMDAxMjM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQklOQVJZX1NVQlNDUicpCiAKICAgICAgICAgIyBpbnZhbGlkIGNvZGUgZG9lc24ndCBnZXQgb3B0aW1pemVkCiAgICAgICAgICMgb3V0IG9mIHJhbmdlCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJyJmdXUiWzEwXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JJTkFSWV9TVUJTQ1InLCBhc20pCisgICAgICAgIGNvZGUgPSBjb21waWxlKCciZnV1IlsxMF0nLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnQklOQVJZX1NVQlNDUicpCiAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX3VuYXJ5b3BzX29uX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCctMC41JywgJygtMC41KScpLCAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgbmVnYXRpdmUKLSAgICAgICAgICAgICgnLTAuMCcsICcoLTAuMCknKSwgICAgICAgICAgICAgICAgICAgICAjIC0wLjAKLSAgICAgICAgICAgICgnLSgxLjAtMS4wKScsJygtMC4wKScpLCAgICAgICAgICAgICAgICAjIC0wLjAgYWZ0ZXIgZm9sZGluZwotICAgICAgICAgICAgKCctMCcsICcoMCknKSwgICAgICAgICAgICAgICAgICAgICAgICAgICMgLTAKLSAgICAgICAgICAgICgnfi0yJywgJygxKScpLCAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAotICAgICAgICAgICAgKCcrMScsICcoMSknKSwgICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgcG9zaXRpdmUKKyAgICAgICAgICAgICgnLTAuNScsIC0wLjUpLCAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgbmVnYXRpdmUKKyAgICAgICAgICAgICgnLTAuMCcsIC0wLjApLCAgICAgICAgICAgICAgICAgICAgICMgLTAuMAorICAgICAgICAgICAgKCctKDEuMC0xLjApJywgLTAuMCksICAgICAgICAgICAgICAgIyAtMC4wIGFmdGVyIGZvbGRpbmcKKyAgICAgICAgICAgICgnLTAnLCAwKSwgICAgICAgICAgICAgICAgICAgICAgICAgICMgLTAKKyAgICAgICAgICAgICgnfi0yJywgMSksICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgaW52ZXJ0CisgICAgICAgICAgICAoJysxJywgMSksICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IHBvc2l0aXZlCiAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVU5BUllfJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKKyAgICAgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdVTkFSWV8nKSkKIAogICAgICAgICAjIENoZWNrIHRoYXQgLTAuMCB3b3JrcyBhZnRlciBtYXJzaGFsaW5nCiAgICAgICAgIGRlZiBuZWd6ZXJvKCk6CiAgICAgICAgICAgICByZXR1cm4gLSgxLjAtMS4wKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOQVJZXycsIGRpc2Fzc2VtYmxlKG5lZ3plcm8pKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weXNpZ24oMS4wLCBuZWd6ZXJvKCkpIDwgMCkKKyAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnVU5BUllfJykpCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB1bmZvbGRhYmxlcyBhcmUgc2tpcHBlZAotICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJy0iYWJjIicsICIoJ2FiYycpIiksICAgICAgICAgICAgICAgICAgIyB1bmFyeSBuZWdhdGl2ZQotICAgICAgICAgICAgKCd+ImFiYyInLCAiKCdhYmMnKSIpLCAgICAgICAgICAgICAgICAgICMgdW5hcnkgaW52ZXJ0CisgICAgICAgIGZvciBsaW5lLCBlbGVtLCBvcG5hbWUgaW4gKAorICAgICAgICAgICAgKCctImFiYyInLCAnYWJjJywgJ1VOQVJZX05FR0FUSVZFJyksCisgICAgICAgICAgICAoJ34iYWJjIicsICdhYmMnLCAnVU5BUllfSU5WRVJUJyksCiAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignVU5BUllfJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCBvcG5hbWUpCiAKICAgICBkZWYgdGVzdF9lbGltX2V4dHJhX3JldHVybihzZWxmKToKICAgICAgICAgIyBSRVRVUk4gTE9BRF9DT05TVCBOb25lIFJFVFVSTiAgLS0+ICBSRVRVUk4KICAgICAgICAgZGVmIGYoeCk6CiAgICAgICAgICAgICByZXR1cm4geAotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdMT0FEX0NPTlNUJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCcoTm9uZSknLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0xPQURfQ09OU1QnLCBOb25lKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAxKQogCiAgICAgZGVmIHRlc3RfZWxpbV9qdW1wX3RvX3JldHVybihzZWxmKToKICAgICAgICAgIyBKVU1QX0ZPUldBUkQgdG8gUkVUVVJOIC0tPiAgUkVUVVJOCiAgICAgICAgIGRlZiBmKGNvbmQsIHRydWVfdmFsdWUsIGZhbHNlX3ZhbHVlKToKICAgICAgICAgICAgIHJldHVybiB0cnVlX3ZhbHVlIGlmIGNvbmQgZWxzZSBmYWxzZV92YWx1ZQotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfQUJTT0xVVEUnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCAyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfRk9SV0FSRCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9BQlNPTFVURScpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnUkVUVVJOX1ZBTFVFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDIpCiAKICAgICBkZWYgdGVzdF9lbGltX2p1bXBfYWZ0ZXJfcmV0dXJuMShzZWxmKToKICAgICAgICAgIyBFbGltaW5hdGUgZGVhZCBjb2RlOiBqdW1wcyBpbW1lZGlhdGVseSBhZnRlciByZXR1cm5zIGNhbid0IGJlIHJlYWNoZWQKQEAgLTI4MCw0OCArMjU4LDUzIEBACiAgICAgICAgICAgICAgICAgaWYgY29uZDE6IHJldHVybiA0CiAgICAgICAgICAgICAgICAgcmV0dXJuIDUKICAgICAgICAgICAgIHJldHVybiA2Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfRk9SV0FSRCcsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9BQlNPTFVURScsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9GT1JXQVJEJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0FCU09MVVRFJykKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdSRVRVUk5fVkFMVUUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgNikKIAogICAgIGRlZiB0ZXN0X2VsaW1fanVtcF9hZnRlcl9yZXR1cm4yKHNlbGYpOgogICAgICAgICAjIEVsaW1pbmF0ZSBkZWFkIGNvZGU6IGp1bXBzIGltbWVkaWF0ZWx5IGFmdGVyIHJldHVybnMgY2FuJ3QgYmUgcmVhY2hlZAogICAgICAgICBkZWYgZihjb25kMSwgY29uZDIpOgogICAgICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICAgICBpZiBjb25kMTogcmV0dXJuIDQKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfRk9SV0FSRCcpCiAgICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIG9uZSBqdW1wIGZvciB0aGUgd2hpbGUgbG9vcC4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnSlVNUF9BQlNPTFVURScpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMikKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdKVU1QX0FCU09MVVRFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDEpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnUkVUVVJOX1ZBTFVFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDIpCiAKICAgICBkZWYgdGVzdF9tYWtlX2Z1bmN0aW9uX2RvZXNudF9iYWlsKHNlbGYpOgogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgZGVmIGcoKS0+MSsxOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJldHVybiBnCi0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV9BREQnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnQklOQVJZX0FERCcpCiAKICAgICBkZWYgdGVzdF9jb25zdGFudF9mb2xkaW5nKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxMTI0NDogYWdncmVzc2l2ZSBjb25zdGFudCBmb2xkaW5nLgogICAgICAgICBleHBycyA9IFsKLSAgICAgICAgICAgICIzICogLTUiLAotICAgICAgICAgICAgIi0zICogNSIsCi0gICAgICAgICAgICAiMiAqICgzICogNCkiLAotICAgICAgICAgICAgIigyICogMykgKiA0IiwKLSAgICAgICAgICAgICIoLTEsIDIsIDMpIiwKLSAgICAgICAgICAgICIoMSwgLTIsIDMpIiwKLSAgICAgICAgICAgICIoMSwgMiwgLTMpIiwKLSAgICAgICAgICAgICIoMSwgMiwgLTMpICogNiIsCi0gICAgICAgICAgICAibGFtYmRhIHg6IHggaW4geygzICogLTUpICsgKC0xIC0gNiksICgxLCAtMiwgMykgKiAyLCBOb25lfSIsCisgICAgICAgICAgICAnMyAqIC01JywKKyAgICAgICAgICAgICctMyAqIDUnLAorICAgICAgICAgICAgJzIgKiAoMyAqIDQpJywKKyAgICAgICAgICAgICcoMiAqIDMpICogNCcsCisgICAgICAgICAgICAnKC0xLCAyLCAzKScsCisgICAgICAgICAgICAnKDEsIC0yLCAzKScsCisgICAgICAgICAgICAnKDEsIDIsIC0zKScsCisgICAgICAgICAgICAnKDEsIDIsIC0zKSAqIDYnLAorICAgICAgICAgICAgJ2xhbWJkYSB4OiB4IGluIHsoMyAqIC01KSArICgtMSAtIDYpLCAoMSwgLTIsIDMpICogMiwgTm9uZX0nLAogICAgICAgICBdCiAgICAgICAgIGZvciBlIGluIGV4cHJzOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVU5BUllfJywgYXNtLCBlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZXycsIGFzbSwgZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEXycsIGFzbSwgZSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdVTkFSWV8nKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdCSU5BUllfJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnQlVJTERfJykpCisKIAogY2xhc3MgVGVzdEJ1Z2xldHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zNDMsNyArMzI2LDcgQEAKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQogCiAgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCi0gICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50Jyk6CiAgICAgICAgIGltcG9ydCBnYwogICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CiAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKaW5kZXggN2YxMDQ3Mi4uYjg1YTI2YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKQEAgLTE1LDEyICsxNSwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUobW9kdWxlLmRpZ2VzdF9zaXplIGlzIE5vbmUgb3IgbW9kdWxlLmRpZ2VzdF9zaXplID4gMCkKICAgICAgICAgc2VsZi5jaGVja19vYmplY3QobW9kdWxlLm5ldywgbW9kdWxlLmRpZ2VzdF9zaXplLCBrZXkpCiAKLSAgICBkZWYgY2hlY2tfb2JqZWN0KHNlbGYsIGNscywgZGlnZXN0X3NpemUsIGtleSk6CisgICAgZGVmIGNoZWNrX29iamVjdChzZWxmLCBjbHMsIGRpZ2VzdF9zaXplLCBrZXksIGRpZ2VzdG1vZD1Ob25lKToKICAgICAgICAgaWYga2V5IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgb2JqMSA9IGNscyhrZXkpCi0gICAgICAgICAgICBvYmoyID0gY2xzKGtleSwgYidzdHJpbmcnKQotICAgICAgICAgICAgaDEgPSBjbHMoa2V5LCBiJ3N0cmluZycpLmRpZ2VzdCgpCi0gICAgICAgICAgICBvYmozID0gY2xzKGtleSkKKyAgICAgICAgICAgIGlmIGRpZ2VzdG1vZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRpZ2VzdG1vZCA9IG1kNQorICAgICAgICAgICAgb2JqMSA9IGNscyhrZXksIGRpZ2VzdG1vZD1kaWdlc3Rtb2QpCisgICAgICAgICAgICBvYmoyID0gY2xzKGtleSwgYidzdHJpbmcnLCBkaWdlc3Rtb2Q9ZGlnZXN0bW9kKQorICAgICAgICAgICAgaDEgPSBjbHMoa2V5LCBiJ3N0cmluZycsIGRpZ2VzdG1vZD1kaWdlc3Rtb2QpLmRpZ2VzdCgpCisgICAgICAgICAgICBvYmozID0gY2xzKGtleSwgZGlnZXN0bW9kPWRpZ2VzdG1vZCkKICAgICAgICAgICAgIG9iajMudXBkYXRlKGInc3RyaW5nJykKICAgICAgICAgICAgIGgyID0gb2JqMy5kaWdlc3QoKQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNjMucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI2My5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0YWUzODYuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAyNjMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jIC0qLSBjb2Rpbmc6IGtvaTgtciAtKi0KLQotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLQotY2xhc3MgUEVQMjYzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9wZXAyNjMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAi8MnUz84iLmVuY29kZSgidXRmLTgiKSwKLSAgICAgICAgICAgIGInXHhkMFx4OWZceGQwXHhiOFx4ZDFceDgyXHhkMFx4YmVceGQwXHhiZCcKLSAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgIlzwIi5lbmNvZGUoInV0Zi04IiksCi0gICAgICAgICAgICBiJ1xcXHhkMFx4OWYnCi0gICAgICAgICkKLQotICAgIGRlZiB0ZXN0X2NvbXBpbGVzdHJpbmcoc2VsZik6Ci0gICAgICAgICMgc2VlICMxODgyCi0gICAgICAgIGMgPSBjb21waWxlKGIiXG4jIGNvZGluZzogdXRmLThcbnUgPSAnXHhjM1x4YjMnXG4iLCAiZHVtbXkiLCAiZXhlYyIpCi0gICAgICAgIGQgPSB7fQotICAgICAgICBleGVjKGMsIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsndSddLCAnXHhmMycpCi0KLSAgICBkZWYgdGVzdF9pc3N1ZTIzMDEoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbXBpbGUoYiIjIGNvZGluZzogY3A5MzJcbnByaW50ICdceDk0XHg0ZSciLCAiZHVtbXkiLCAiZXhlYyIpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyB2OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnRleHQsICJwcmludCAnXHU1ZTc0J1xuIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgpCi0KLSAgICBkZWYgdGVzdF9pc3N1ZTQ2MjYoc2VsZik6Ci0gICAgICAgIGMgPSBjb21waWxlKCIjIGNvZGluZz1sYXRpbi0xXG5cdTAwYzYgPSAnXHUwMGM2JyIsICJkdW1teSIsICJleGVjIikKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGV4ZWMoYywgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydceGM2J10sICdceGM2JykKLQotICAgIGRlZiB0ZXN0X2lzc3VlMzI5NyhzZWxmKToKLSAgICAgICAgYyA9IGNvbXBpbGUoImEsIGIgPSAnXFUwMDAxMDEwRicsICdcXFUwMDAxMDEwRiciLCAiZHVtbXkiLCAiZXhlYyIpCi0gICAgICAgIGQgPSB7fQotICAgICAgICBleGVjKGMsIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCBkWydiJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRbJ2EnXSksIGxlbihkWydiJ10pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY2lpKGRbJ2EnXSksIGFzY2lpKGRbJ2InXSkpCi0KLSAgICBkZWYgdGVzdF9pc3N1ZTc4MjAoc2VsZik6Ci0gICAgICAgICMgRW5zdXJlIHRoYXQgY2hlY2tfYm9tKCkgcmVzdG9yZXMgYWxsIGJ5dGVzIGluIHRoZSByaWdodCBvcmRlciBpZgotICAgICAgICAjIGNoZWNrX2JvbSgpIGZhaWxzIGluIHB5ZGVidWcgbW9kZTogYSBidWZmZXIgc3RhcnRzIHdpdGggdGhlIGZpcnN0Ci0gICAgICAgICMgYnl0ZSBvZiBhIHZhbGlkIEJPTSwgYnV0IG5leHQgYnl0ZXMgYXJlIGRpZmZlcmVudAotCi0gICAgICAgICMgb25lIGJ5dGUgaW4gY29tbW9uIHdpdGggdGhlIFVURi0xNi1MRSBCT00KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsIGInXHhmZlx4MjAnKQotCi0gICAgICAgICMgdHdvIGJ5dGVzIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtOCBCT00KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsIGInXHhlZlx4YmJceDIwJykKLQotICAgIGRlZiB0ZXN0X2Vycm9yX21lc3NhZ2Uoc2VsZik6Ci0gICAgICAgIGNvbXBpbGUoYicjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6Ci0gICAgICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdpc28tODg1OS0xNScpOgotICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLAotICAgICAgICAgICAgICAgICAgICAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ0JPTScpOgotICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLAotICAgICAgICAgICAgICAgICAgICAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2Zha2UnKToKLSAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ0JPTScpOgotICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUEVQMjYzVGVzdCkKLQotaWYgX19uYW1lX189PSJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkKaW5kZXggNGIxNmNiYi4uOWJhZTZkYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkKQEAgLTk5LDEwICs5OSw2IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhwZWN0ZWRfZXhjZXB0aW9uKSBhcyBjOgogICAgICAgICAgICAgZm4oZmlsZW5hbWUpCiAgICAgICAgIGV4Y19maWxlbmFtZSA9IGMuZXhjZXB0aW9uLmZpbGVuYW1lCi0gICAgICAgICMgbGlzdGRpciBtYXkgYXBwZW5kIGEgd2lsZGNhcmQgdG8gdGhlIGZpbGVuYW1lCi0gICAgICAgIGlmIGZuIGlzIG9zLmxpc3RkaXIgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICAgICAgZXhjX2ZpbGVuYW1lLCBfLCB3aWxkY2FyZCA9IGV4Y19maWxlbmFtZS5ycGFydGl0aW9uKG9zLnNlcCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lsZGNhcmQsICcqLionKQogICAgICAgICBpZiBjaGVja19maWxlbmFtZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjX2ZpbGVuYW1lLCBmaWxlbmFtZSwgIkZ1bmN0aW9uICclcyglYSkgZmFpbGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggYmFkIGZpbGVuYW1lIGluIHRoZSBleGNlcHRpb246ICVhIiAlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDMxNTEucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDMxNTEucHkKaW5kZXggMjc5MmMxMC4uN2Q0YTVkOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzMTUxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMzE1MS5weQpAQCAtMTU3LDggKzE1Nyw2IEBACiAgICAgICAgIGUuY2hhcmFjdGVyc193cml0dGVuID0gNQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuY2hhcmFjdGVyc193cml0dGVuLCA1KQogCi0gICAgIyBYWFggVk1TRXJyb3Igbm90IHRlc3RlZAotCiAKIGNsYXNzIEV4cGxpY2l0U3ViY2xhc3NpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQppbmRleCA1NThjZGI1Li43Yzk4YzQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQpAQCAtMSw3ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgd2FybmluZ3MKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGltcG9ydCBvcwogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgc3lzdGVtIGFzIHBsYXRmb3JtX3N5c3RlbQogCkBAIC0xODAsOCArMTc5LDYgQEAKICAgICAgICAgIyBDYXRjaGluZyBhIHN0cmluZyBpcyBiYWQuCiAgICAgICAgIHNlbGYuY2F0Y2hfZmFpbHMoInNwYW0iKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvbkNsYXNzVGVzdHMsIFVzYWdlVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlja2xlLnB5IGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKaW5kZXggZmJlOTZhYy4uMGIyZmUxZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKQEAgLTgzLDEzICs4MywxNyBAQAogCiAKIGNsYXNzIFB5RGlzcGF0Y2hUYWJsZVRlc3RzKEFic3RyYWN0RGlzcGF0Y2hUYWJsZVRlc3RzKToKKwogICAgIHBpY2tsZXJfY2xhc3MgPSBwaWNrbGUuX1BpY2tsZXIKKwogICAgIGRlZiBnZXRfZGlzcGF0Y2hfdGFibGUoc2VsZik6CiAgICAgICAgIHJldHVybiBwaWNrbGUuZGlzcGF0Y2hfdGFibGUuY29weSgpCiAKIAogY2xhc3MgUHlDaGFpbkRpc3BhdGNoVGFibGVUZXN0cyhBYnN0cmFjdERpc3BhdGNoVGFibGVUZXN0cyk6CisKICAgICBwaWNrbGVyX2NsYXNzID0gcGlja2xlLl9QaWNrbGVyCisKICAgICBkZWYgZ2V0X2Rpc3BhdGNoX3RhYmxlKHNlbGYpOgogICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuQ2hhaW5NYXAoe30sIHBpY2tsZS5kaXNwYXRjaF90YWJsZSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wa2cucHkgYi9MaWIvdGVzdC90ZXN0X3BrZy5weQppbmRleCAzNTVlZmU3Li45ODgzMDAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BrZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BrZy5weQpAQCAtMTk5LDE0ICsxOTksMTQgQEAKICAgICAgICAgaW1wb3J0IHQ1CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnZm9vJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsICd0NSddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnX19zcGVjX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vJywgJ3N0cmluZycsICd0NSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDUuZm9vKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdzdHJpbmcnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fc3BlY19fJywgJ3N0cmluZyddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDUuc3RyaW5nKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdzcGFtJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3NwZWNfXycsICdzcGFtJ10pCiAKICAgICBkZWYgdGVzdF82KHNlbGYpOgogICAgICAgICBoaWVyID0gWwpAQCAtMjIyLDE0ICsyMjIsMTUgQEAKICAgICAgICAgaW1wb3J0IHQ2CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19hbGxfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXyddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3NwZWNfXyddKQogICAgICAgICBzID0gIiIiCiAgICAgICAgICAgICBpbXBvcnQgdDYKICAgICAgICAgICAgIGZyb20gdDYgaW1wb3J0ICoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fYWxsX18nLCAnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXycsICdlZ2dzJywgJ2hhbScsICdzcGFtJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nLCAnX19zcGVjX18nLCAnZWdncycsICdoYW0nLCAnc3BhbSddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoKSwgWydlZ2dzJywgJ2hhbScsICdzZWxmJywgJ3NwYW0nLCAndDYnXSkKICAgICAgICAgICAgICIiIgogICAgICAgICBzZWxmLnJ1bl9jb2RlKHMpCkBAIC0yNTYsMTggKzI1NywxOSBAQAogICAgICAgICBpbXBvcnQgdDcgYXMgdGFzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0YXMpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXyddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBmcm9tIHQ3IGltcG9ydCBzdWIgYXMgc3VicGFyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcihzdWJwYXIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXyddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKICAgICAgICAgZnJvbSB0Ny5zdWIgaW1wb3J0IHN1YnN1YiBhcyBzdWJzdWJzdWIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHN1YnN1YnN1YikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnc3BhbSddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnX19zcGVjX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbSddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWJzdWIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CmluZGV4IGE4NDI2YjUuLjM3MGIyYWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSBpbXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCitmcm9tIGltcG9ydGxpYi51dGlsIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY3JlYXRlX2VtcHR5X2ZpbGUKIAogY2xhc3MgVGVzdEltcG9ydCh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkKaW5kZXggMGRiNGZjNi4uN2ExY2Q0MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weQpAQCAtMSwxMiArMSwxMyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgdW5sb2FkLCBjaGVja193YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wCiBpbXBvcnQgaW1wb3J0bGliCitmcm9tIGltcG9ydGxpYi51dGlsIGltcG9ydCBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbgogaW1wb3J0IHBrZ3V0aWwKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHR5cGVzCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgemlwZmlsZQogCkBAIC0xMDMsMjMgKzEwNCwyMCBAQAogY2xhc3MgUGtndXRpbFBFUDMwMlRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGNsYXNzIE15VGVzdExvYWRlcihvYmplY3QpOgotICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgIyBDcmVhdGUgYW4gZW1wdHkgbW9kdWxlCi0gICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLCBpbXAubmV3X21vZHVsZShmdWxsbmFtZSkpCi0gICAgICAgICAgICBtb2QuX19maWxlX18gPSAiPCVzPiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwotICAgICAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgICAgICAjIE1ha2UgaXQgYSBwYWNrYWdlCi0gICAgICAgICAgICBtb2QuX19wYXRoX18gPSBbXQorICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kKToKICAgICAgICAgICAgICMgQ291bnQgaG93IG1hbnkgdGltZXMgdGhlIG1vZHVsZSBpcyByZWxvYWRlZAotICAgICAgICAgICAgbW9kLl9fZGljdF9fWydsb2FkcyddID0gbW9kLl9fZGljdF9fLmdldCgnbG9hZHMnLDApICsgMQotICAgICAgICAgICAgcmV0dXJuIG1vZAorICAgICAgICAgICAgbW9kLl9fZGljdF9fWydsb2FkcyddID0gbW9kLl9fZGljdF9fLmdldCgnbG9hZHMnLCAwKSArIDEKIAogICAgICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CiAgICAgICAgICAgICByZXR1cm4gIkhlbGxvLCB3b3JsZCEiCiAKICAgICBjbGFzcyBNeVRlc3RJbXBvcnRlcihvYmplY3QpOgotICAgICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICAgICByZXR1cm4gUGtndXRpbFBFUDMwMlRlc3RzLk15VGVzdExvYWRlcigpCisgICAgICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAgICAgbG9hZGVyID0gUGtndXRpbFBFUDMwMlRlc3RzLk15VGVzdExvYWRlcigpCisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwlcz4nICUgbG9hZGVyLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9bG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVtdKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzeXMubWV0YV9wYXRoLmluc2VydCgwLCBzZWxmLk15VGVzdEltcG9ydGVyKCkpCkBAIC0yMDAsNiArMTk4LDggQEAKICAgICAgICAgZGlybmFtZSA9IHNlbGYuY3JlYXRlX2luaXQocGtnbmFtZSkKICAgICAgICAgcGF0aGl0ZW0gPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgcGtnbmFtZSkKICAgICAgICAgZnVsbG5hbWUgPSAne30ue30nLmZvcm1hdChwa2duYW1lLCBtb2RuYW1lKQorICAgICAgICBzeXMubW9kdWxlcy5wb3AoZnVsbG5hbWUsIE5vbmUpCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcChwa2duYW1lLCBOb25lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zdWJtb2R1bGUoZGlybmFtZSwgcGtnbmFtZSwgbW9kbmFtZSwgMCkKIApAQCAtMjA4LDExICsyMDgsMTkgQEAKICAgICAgICAgICAgIGltcG9ydGVycyA9IGxpc3QoaXRlcl9pbXBvcnRlcnMoZnVsbG5hbWUpKQogICAgICAgICAgICAgZXhwZWN0ZWRfaW1wb3J0ZXIgPSBnZXRfaW1wb3J0ZXIocGF0aGl0ZW0pCiAgICAgICAgICAgICBmb3IgZmluZGVyIGluIGltcG9ydGVyczoKKyAgICAgICAgICAgICAgICBzcGVjID0gcGtndXRpbC5fZ2V0X3NwZWMoZmluZGVyLCBmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbG9hZGVyLmxvYWRlcgorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBGb3Igbm93IHdlIHN0aWxsIGFsbG93IHJhdyBsb2FkZXJzIGZyb20KKyAgICAgICAgICAgICAgICAgICAgIyBmaW5kX21vZHVsZSgpLgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpbmRlciwgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZGVyLCBleHBlY3RlZF9pbXBvcnRlcikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmluZGVyLmZpbmRfbW9kdWxlKHBrZ25hbWUpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBrZ3V0aWwuX2dldF9zcGVjKGZpbmRlciwgcGtnbmFtZSkpCiAKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgogICAgICAgICAgICAgICAgIGxpc3QoaXRlcl9pbXBvcnRlcnMoJ2ludmFsaWQubW9kdWxlJykpCkBAIC0yMjIsOCArMjMwLDExIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpcm5hbWUpCiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snc3BhbSddCi0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3NwYW0uZWdncyddCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydzcGFtJ10KKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3NwYW0uZWdncyddCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogCiAKICAgICBkZWYgdGVzdF9taXhlZF9uYW1lc3BhY2Uoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQppbmRleCA5ZTg2YjNkLi5iYjdjYzE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKQEAgLTEsOTQgKzEsOTUgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHBsaXN0bGliCiBpbXBvcnQgb3MKIGltcG9ydCBkYXRldGltZQoraW1wb3J0IGNvZGVjcworaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBzdHJ1Y3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwogCitBTExfRk9STUFUUz0ocGxpc3RsaWIuRk1UX1hNTCwgcGxpc3RsaWIuRk1UX0JJTkFSWSkKIAotIyBUaGlzIHRlc3QgZGF0YSB3YXMgZ2VuZXJhdGVkIHRocm91Z2ggQ29jb2EncyBOU0RpY3Rpb25hcnkgY2xhc3MKLVRFU1REQVRBID0gYiIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iIFwKLSJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0gICAgICAgIDxrZXk+YURhdGU8L2tleT4KLSAgICAgICAgPGRhdGU+MjAwNC0xMC0yNlQxMDozMzozM1o8L2RhdGU+Ci0gICAgICAgIDxrZXk+YURpY3Q8L2tleT4KLSAgICAgICAgPGRpY3Q+Ci0gICAgICAgICAgICAgICAgPGtleT5hRmFsc2VWYWx1ZTwva2V5PgotICAgICAgICAgICAgICAgIDxmYWxzZS8+Ci0gICAgICAgICAgICAgICAgPGtleT5hVHJ1ZVZhbHVlPC9rZXk+Ci0gICAgICAgICAgICAgICAgPHRydWUvPgotICAgICAgICAgICAgICAgIDxrZXk+YVVuaWNvZGVWYWx1ZTwva2V5PgotICAgICAgICAgICAgICAgIDxzdHJpbmc+TVx4YzNceGE0c3NpZywgTWFceGMzXHg5Zjwvc3RyaW5nPgotICAgICAgICAgICAgICAgIDxrZXk+YW5vdGhlclN0cmluZzwva2V5PgotICAgICAgICAgICAgICAgIDxzdHJpbmc+Jmx0O2hlbGxvICZhbXA7ICdoaScgdGhlcmUhJmd0Ozwvc3RyaW5nPgotICAgICAgICAgICAgICAgIDxrZXk+ZGVlcGVyRGljdDwva2V5PgotICAgICAgICAgICAgICAgIDxkaWN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGtleT5hPC9rZXk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xNzwvaW50ZWdlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxrZXk+Yjwva2V5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHJlYWw+MzIuNTwvcmVhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxrZXk+Yzwva2V5PgotICAgICAgICAgICAgICAgICAgICAgICAgPGFycmF5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4yPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPnRleHQ8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJyYXk+Ci0gICAgICAgICAgICAgICAgPC9kaWN0PgotICAgICAgICA8L2RpY3Q+Ci0gICAgICAgIDxrZXk+YUZsb2F0PC9rZXk+Ci0gICAgICAgIDxyZWFsPjAuNTwvcmVhbD4KLSAgICAgICAgPGtleT5hTGlzdDwva2V5PgotICAgICAgICA8YXJyYXk+Ci0gICAgICAgICAgICAgICAgPHN0cmluZz5BPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgPHN0cmluZz5CPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgPGludGVnZXI+MTI8L2ludGVnZXI+Ci0gICAgICAgICAgICAgICAgPHJlYWw+MzIuNTwvcmVhbD4KLSAgICAgICAgICAgICAgICA8YXJyYXk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgPGludGVnZXI+MjwvaW50ZWdlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjM8L2ludGVnZXI+Ci0gICAgICAgICAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPGtleT5hU3RyaW5nPC9rZXk+Ci0gICAgICAgIDxzdHJpbmc+RG9vZGFoPC9zdHJpbmc+Ci0gICAgICAgIDxrZXk+YW5FbXB0eURpY3Q8L2tleT4KLSAgICAgICAgPGRpY3QvPgotICAgICAgICA8a2V5PmFuRW1wdHlMaXN0PC9rZXk+Ci0gICAgICAgIDxhcnJheS8+Ci0gICAgICAgIDxrZXk+YW5JbnQ8L2tleT4KLSAgICAgICAgPGludGVnZXI+NzI4PC9pbnRlZ2VyPgotICAgICAgICA8a2V5Pm5lc3RlZERhdGE8L2tleT4KLSAgICAgICAgPGFycmF5PgotICAgICAgICAgICAgICAgIDxkYXRhPgotICAgICAgICAgICAgICAgIFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXp4c2IzUnpJRzltSUdKcGJtRnllU0JuZFc1cgotICAgICAgICAgICAgICAgIFBnQUJBZ004Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNQotICAgICAgICAgICAgICAgIElHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTBjeUJ2WmlCaQotICAgICAgICAgICAgICAgIGFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSegotICAgICAgICAgICAgICAgIElHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRAotICAgICAgICAgICAgICAgIFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXc9PQotICAgICAgICAgICAgICAgIDwvZGF0YT4KLSAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPGtleT5zb21lRGF0YTwva2V5PgotICAgICAgICA8ZGF0YT4KLSAgICAgICAgUEdKcGJtRnllU0JuZFc1clBnPT0KLSAgICAgICAgPC9kYXRhPgotICAgICAgICA8a2V5PnNvbWVNb3JlRGF0YTwva2V5PgotICAgICAgICA8ZGF0YT4KLSAgICAgICAgUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTTgKLSAgICAgICAgYkc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHMKLSAgICAgICAgYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHYKLSAgICAgICAgZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTAKLSAgICAgICAgY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXc9PQotICAgICAgICA8L2RhdGE+Ci0gICAgICAgIDxrZXk+XHhjM1x4ODViZW5yYWE8L2tleT4KLSAgICAgICAgPHN0cmluZz5UaGF0IHdhcyBhIHVuaWNvZGUga2V5Ljwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KLSIiIi5yZXBsYWNlKGIiICIgKiA4LCBiIlx0IikgICMgQXBwbGUgYXMgd2VsbCBhcyBwbGlzdGxpYi5weSBvdXRwdXQgaGFyZCB0YWJzCisjIFRoZSB0ZXN0ZGF0YSBpcyBnZW5lcmF0ZWQgdXNpbmcgTWFjL1Rvb2xzL3BsaXN0bGliX2dlbmVyYXRlX3Rlc3RkYXRhLnB5CisjICh3aGljaCB1c2luZyBQeU9iakMgdG8gY29udHJvbCB0aGUgQ29jb2EgY2xhc3NlcyBmb3IgZ2VuZXJhdGluZyBwbGlzdHMpCitURVNUREFUQT17CisgICAgcGxpc3RsaWIuRk1UX1hNTDogYmluYXNjaWkuYTJiX2Jhc2U2NChiJycnCisgICAgICAgIFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQQ0ZFVDBOVQorICAgICAgICBXVkJGSUhCc2FYTjBJRkJWUWt4SlF5QWlMUzh2UVhCd2JHVXZMMFJVUkNCUVRFbFRWQ0F4TGpBdkwwVk8KKyAgICAgICAgSWlBaWFIUjBjRG92TDNkM2R5NWhjSEJzWlM1amIyMHZSRlJFY3k5UWNtOXdaWEowZVV4cGMzUXRNUzR3CisgICAgICAgIExtUjBaQ0krQ2p4d2JHbHpkQ0IyWlhKemFXOXVQU0l4TGpBaVBnbzhaR2xqZEQ0S0NUeHJaWGsrWVVKcAorICAgICAgICBaMGx1ZER3dmEyVjVQZ29KUEdsdWRHVm5aWEkrT1RJeU16TTNNakF6TmpnMU5EYzNOVGMyTkR3dmFXNTAKKyAgICAgICAgWldkbGNqNEtDVHhyWlhrK1lVSnBaMGx1ZERJOEwydGxlVDRLQ1R4cGJuUmxaMlZ5UGpreU1qTXpOekl3CisgICAgICAgIE16WTROVFEzTnpVNE5USThMMmx1ZEdWblpYSStDZ2s4YTJWNVBtRkVZWFJsUEM5clpYaytDZ2s4WkdGMAorICAgICAgICBaVDR5TURBMExURXdMVEkyVkRFd09qTXpPak16V2p3dlpHRjBaVDRLQ1R4clpYaytZVVJwWTNROEwydGwKKyAgICAgICAgZVQ0S0NUeGthV04wUGdvSkNUeHJaWGsrWVVaaGJITmxWbUZzZFdVOEwydGxlVDRLQ1FrOFptRnNjMlV2CisgICAgICAgIFBnb0pDVHhyWlhrK1lWUnlkV1ZXWVd4MVpUd3ZhMlY1UGdvSkNUeDBjblZsTHo0S0NRazhhMlY1UG1GVgorICAgICAgICBibWxqYjJSbFZtRnNkV1U4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QazNEcEhOemFXY3NJRTFodzU4OEwzTjAKKyAgICAgICAgY21sdVp6NEtDUWs4YTJWNVBtRnViM1JvWlhKVGRISnBibWM4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QaVpzCisgICAgICAgIGREdG9aV3hzYnlBbVlXMXdPeUFuYUdrbklIUm9aWEpsSVNabmREczhMM04wY21sdVp6NEtDUWs4YTJWNQorICAgICAgICBQbVJsWlhCbGNrUnBZM1E4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWhQQzlyWlhrK0Nna0oKKyAgICAgICAgQ1R4cGJuUmxaMlZ5UGpFM1BDOXBiblJsWjJWeVBnb0pDUWs4YTJWNVBtSThMMnRsZVQ0S0NRa0pQSEpsCisgICAgICAgIFlXdytNekl1TlR3dmNtVmhiRDRLQ1FrSlBHdGxlVDVqUEM5clpYaytDZ2tKQ1R4aGNuSmhlVDRLQ1FrSgorICAgICAgICBDVHhwYm5SbFoyVnlQakU4TDJsdWRHVm5aWEkrQ2drSkNRazhhVzUwWldkbGNqNHlQQzlwYm5SbFoyVnkKKyAgICAgICAgUGdvSkNRa0pQSE4wY21sdVp6NTBaWGgwUEM5emRISnBibWMrQ2drSkNUd3ZZWEp5WVhrK0Nna0pQQzlrCisgICAgICAgIGFXTjBQZ29KUEM5a2FXTjBQZ29KUEd0bGVUNWhSbXh2WVhROEwydGxlVDRLQ1R4eVpXRnNQakF1TlR3dgorICAgICAgICBjbVZoYkQ0S0NUeHJaWGsrWVV4cGMzUThMMnRsZVQ0S0NUeGhjbkpoZVQ0S0NRazhjM1J5YVc1blBrRTgKKyAgICAgICAgTDNOMGNtbHVaejRLQ1FrOGMzUnlhVzVuUGtJOEwzTjBjbWx1Wno0S0NRazhhVzUwWldkbGNqNHhNand2CisgICAgICAgIGFXNTBaV2RsY2o0S0NRazhjbVZoYkQ0ek1pNDFQQzl5WldGc1Bnb0pDVHhoY25KaGVUNEtDUWtKUEdsdQorICAgICAgICBkR1ZuWlhJK01Ud3ZhVzUwWldkbGNqNEtDUWtKUEdsdWRHVm5aWEkrTWp3dmFXNTBaV2RsY2o0S0NRa0oKKyAgICAgICAgUEdsdWRHVm5aWEkrTXp3dmFXNTBaV2RsY2o0S0NRazhMMkZ5Y21GNVBnb0pQQzloY25KaGVUNEtDVHhyCisgICAgICAgIFpYaytZVTVsWjJGMGFYWmxRbWxuU1c1MFBDOXJaWGsrQ2drOGFXNTBaV2RsY2o0dE9EQXdNREF3TURBdworICAgICAgICBNREE4TDJsdWRHVm5aWEkrQ2drOGEyVjVQbUZPWldkaGRHbDJaVWx1ZER3dmEyVjVQZ29KUEdsdWRHVm4KKyAgICAgICAgWlhJK0xUVThMMmx1ZEdWblpYSStDZ2s4YTJWNVBtRlRkSEpwYm1jOEwydGxlVDRLQ1R4emRISnBibWMrCisgICAgICAgIFJHOXZaR0ZvUEM5emRISnBibWMrQ2drOGEyVjVQbUZ1Ulcxd2RIbEVhV04wUEM5clpYaytDZ2s4WkdsagorICAgICAgICBkQzgrQ2drOGEyVjVQbUZ1Ulcxd2RIbE1hWE4wUEM5clpYaytDZ2s4WVhKeVlYa3ZQZ29KUEd0bGVUNWgKKyAgICAgICAgYmtsdWREd3ZhMlY1UGdvSlBHbHVkR1ZuWlhJK056STRQQzlwYm5SbFoyVnlQZ29KUEd0bGVUNXVaWE4wCisgICAgICAgIFpXUkVZWFJoUEM5clpYaytDZ2s4WVhKeVlYaytDZ2tKUEdSaGRHRStDZ2tKVUVkNGRtUklUV2RpTWxsbgorICAgICAgICBXVzFzZFZsWVNqVkpSMlF4WW0xekswRkJSVU5CZW5oellqTlNla2xIT1cxSlIwcHdZbTFHZVdWVFFtNWsKKyAgICAgICAgVnpWeUNna0pVR2RCUWtGblRUaGlSemt3WTNsQ2RscHBRbWxoVnpWb1kyNXJaMW96Vm5WaGVqUkJRVkZKCisgICAgICAgIFJGQkhlSFprU0UxbllqSlpaMWx0YkhWWldFbzFDZ2tKU1Vka01XSnRjeXRCUVVWRFFYcDRjMkl6VW5wSgorICAgICAgICBSemx0U1VkS2NHSnRSbmxsVTBKdVpGYzFjbEJuUVVKQlowMDRZa2M1TUdONVFuWmFhVUpwQ2drSllWYzEKKyAgICAgICAgYUdOdWEyZGFNMVoxWVhvMFFVRlJTVVJRUjNoMlpFaE5aMkl5V1dkWmJXeDFXVmhLTlVsSFpERmliWE1yCisgICAgICAgIFFVRkZRMEY2ZUhOaU0xSjZDZ2tKU1VjNWJVbEhTbkJpYlVaNVpWTkNibVJYTlhKUVowRkNRV2ROT0dKSAorICAgICAgICBPVEJqZVVKMldtbENhV0ZYTldoamJtdG5Xak5XZFdGNk5FRkJVVWxFQ2drSlVFZDRkbVJJVFdkaU1sbG4KKyAgICAgICAgV1cxc2RWbFlTalZKUjJReFltMXpLMEZCUlVOQmR6MDlDZ2tKUEM5a1lYUmhQZ29KUEM5aGNuSmhlVDRLCisgICAgICAgIENUeHJaWGsrYzI5dFpVUmhkR0U4TDJ0bGVUNEtDVHhrWVhSaFBnb0pVRWRLY0dKdFJubGxVMEp1WkZjMQorICAgICAgICBjbEJuUFQwS0NUd3ZaR0YwWVQ0S0NUeHJaWGsrYzI5dFpVMXZjbVZFWVhSaFBDOXJaWGsrQ2drOFpHRjAKKyAgICAgICAgWVQ0S0NWQkhlSFprU0UxbllqSlpaMWx0YkhWWldFbzFTVWRrTVdKdGN5dEJRVVZEUVhwNGMySXpVbnBKCisgICAgICAgIFJ6bHRTVWRLY0dKdFJubGxVMEp1WkZjMWNsQm5RVUpCWjAwNENnbGlSemt3WTNsQ2RscHBRbWxoVnpWbworICAgICAgICBZMjVyWjFvelZuVmhlalJCUVZGSlJGQkhlSFprU0UxbllqSlpaMWx0YkhWWldFbzFTVWRrTVdKdGN5dEIKKyAgICAgICAgUVVWRFFYcDRjd29KWWpOU2VrbEhPVzFKUjBwd1ltMUdlV1ZUUW01a1Z6VnlVR2RCUWtGblRUaGlSemt3CisgICAgICAgIFkzbENkbHBwUW1saFZ6Vm9ZMjVyWjFvelZuVmhlalJCUVZGSlJGQkhlSFlLQ1dSSVRXZGlNbGxuV1cxcworICAgICAgICBkVmxZU2pWSlIyUXhZbTF6SzBGQlJVTkJlbmh6WWpOU2VrbEhPVzFKUjBwd1ltMUdlV1ZUUW01a1Z6VnkKKyAgICAgICAgVUdkQlFrRm5UVGhpUnprd0NnbGplVUoyV21sQ2FXRlhOV2hqYm10bldqTldkV0Y2TkVGQlVVbEVVRWQ0CisgICAgICAgIGRtUklUV2RpTWxsbldXMXNkVmxZU2pWSlIyUXhZbTF6SzBGQlJVTkJkejA5Q2drOEwyUmhkR0UrQ2drOAorICAgICAgICBhMlY1UHNPRlltVnVjbUZoUEM5clpYaytDZ2s4YzNSeWFXNW5QbFJvWVhRZ2QyRnpJR0VnZFc1cFkyOWsKKyAgICAgICAgWlNCclpYa3VQQzl6ZEhKcGJtYytDand2WkdsamRENEtQQzl3YkdsemRENEsnJycpLAorICAgIHBsaXN0bGliLkZNVF9CSU5BUlk6IGJpbmFzY2lpLmEyYl9iYXNlNjQoYicnJworICAgICAgICBZbkJzYVhOME1ERGZFQkFCQWdNRUJRWUhDQWtLQ3d3TkRnOFFFUklURkNncEx6QXhNak0wTlRjMk9GZGgKKyAgICAgICAgUW1sblNXNTBXR0ZDYVdkSmJuUXlWV0ZFWVhSbFZXRkVhV04wVm1GR2JHOWhkRlZoVEdsemRGOFFEMkZPCisgICAgICAgIFpXZGhkR2wyWlVKcFowbHVkRnhoVG1WbllYUnBkbVZKYm5SWFlWTjBjbWx1WjF0aGJrVnRjSFI1UkdsagorICAgICAgICBkRnRoYmtWdGNIUjVUR2x6ZEZWaGJrbHVkRnB1WlhOMFpXUkVZWFJoV0hOdmJXVkVZWFJoWEhOdmJXVk4KKyAgICAgICAgYjNKbFJHRjBZV2NBeFFCaUFHVUFiZ0J5QUdFQVlSTi8vLy8vLy8vLzFCUUFBQUFBQUFBQUFJQUFBQUFBCisgICAgICAgIEFBQXNNMEdjdVgzMEFBQUExUlVXRnhnWkdoc2NIUjViWVVaaGJITmxWbUZzZFdWYVlWUnlkV1ZXWVd4MQorICAgICAgICBaVjFoVlc1cFkyOWtaVlpoYkhWbFhXRnViM1JvWlhKVGRISnBibWRhWkdWbGNHVnlSR2xqZEFnSmF3Qk4KKyAgICAgICAgQU9RQWN3QnpBR2tBWndBc0FDQUFUUUJoQU45ZkVCVThhR1ZzYkc4Z0ppQW5hR2tuSUhSb1pYSmxJVDdUCisgICAgICAgIEh5QWhJaU1rVVdGUllsRmpFQkVqUUVCQUFBQUFBQUNqSlNZbkVBRVFBbFIwWlhoMEl6L2dBQUFBQUFBQQorICAgICAgICBwU29yTENNdFVVRlJRaEFNb3lVbUxoQURFLy8vLysxZm9PQUFFLy8vLy8vLy8vLzdWa1J2YjJSaGFOQ2cKKyAgICAgICAgRVFMWW9UWlBFUG84Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1CisgICAgICAgIFlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdgorICAgICAgICBaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHMKKyAgICAgICAgYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBCisgICAgICAgIEFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbgorICAgICAgICBkVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFRUeGlhVzVoY25rZ1ozVnUKKyAgICAgICAgYXo1ZkVCZFVhR0YwSUhkaGN5QmhJSFZ1YVdOdlpHVWdhMlY1TGdBSUFDc0FNd0E4QUVJQVNBQlBBRlVBCisgICAgICAgIFp3QjBBSHdBaUFDVUFKb0FwUUN1QUxzQXlnRFRBT1FBN1FENEFRUUJEd0VkQVNzQk5nRTNBVGdCVHdGbgorICAgICAgICBBVzRCY0FGeUFYUUJkZ0YvQVlNQmhRR0hBWXdCbFFHYkFaMEJud0doQWFVQnB3R3dBYmtCd0FIQkFjSUIKKyAgICAgICAgeFFISEFzUUMwZ0FBQUFBQUFBSUJBQUFBQUFBQUFEa0FBQUFBQUFBQUFBQUFBQUFBQUFMcycnJyksCit9CiAKIAogY2xhc3MgVGVzdFBsaXN0bGliKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTk5LDEyICsxMDAsMTYgQEAKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgZGVmIF9jcmVhdGUoc2VsZiwgZm10PU5vbmUpOgogICAgICAgICBwbCA9IGRpY3QoCiAgICAgICAgICAgICBhU3RyaW5nPSJEb29kYWgiLAogICAgICAgICAgICAgYUxpc3Q9WyJBIiwgIkIiLCAxMiwgMzIuNSwgWzEsIDIsIDNdXSwKICAgICAgICAgICAgIGFGbG9hdCA9IDAuNSwKICAgICAgICAgICAgIGFuSW50ID0gNzI4LAorICAgICAgICAgICAgYUJpZ0ludCA9IDIgKiogNjMgLSA0NCwKKyAgICAgICAgICAgIGFCaWdJbnQyID0gMiAqKiA2MyArIDQ0LAorICAgICAgICAgICAgYU5lZ2F0aXZlSW50ID0gLTUsCisgICAgICAgICAgICBhTmVnYXRpdmVCaWdJbnQgPSAtODAwMDAwMDAwMDAsCiAgICAgICAgICAgICBhRGljdD1kaWN0KAogICAgICAgICAgICAgICAgIGFub3RoZXJTdHJpbmc9IjxoZWxsbyAmICdoaScgdGhlcmUhPiIsCiAgICAgICAgICAgICAgICAgYVVuaWNvZGVWYWx1ZT0nTVx4ZTRzc2lnLCBNYVx4ZGYnLApAQCAtMTEyLDkgKzExNyw5IEBACiAgICAgICAgICAgICAgICAgYUZhbHNlVmFsdWU9RmFsc2UsCiAgICAgICAgICAgICAgICAgZGVlcGVyRGljdD1kaWN0KGE9MTcsIGI9MzIuNSwgYz1bMSwgMiwgInRleHQiXSksCiAgICAgICAgICAgICApLAotICAgICAgICAgICAgc29tZURhdGEgPSBwbGlzdGxpYi5EYXRhKGIiPGJpbmFyeSBndW5rPiIpLAotICAgICAgICAgICAgc29tZU1vcmVEYXRhID0gcGxpc3RsaWIuRGF0YShiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwKSwKLSAgICAgICAgICAgIG5lc3RlZERhdGEgPSBbcGxpc3RsaWIuRGF0YShiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwKV0sCisgICAgICAgICAgICBzb21lRGF0YSA9IGIiPGJpbmFyeSBndW5rPiIsCisgICAgICAgICAgICBzb21lTW9yZURhdGEgPSBiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwLAorICAgICAgICAgICAgbmVzdGVkRGF0YSA9IFtiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwXSwKICAgICAgICAgICAgIGFEYXRlID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwNCwgMTAsIDI2LCAxMCwgMzMsIDMzKSwKICAgICAgICAgICAgIGFuRW1wdHlEaWN0ID0gZGljdCgpLAogICAgICAgICAgICAgYW5FbXB0eUxpc3QgPSBsaXN0KCkKQEAgLTEyOSw0OSArMTM0LDIxNSBAQAogCiAgICAgZGVmIHRlc3RfaW8oc2VsZik6CiAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKLSAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbCwgc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIHBsaXN0bGliLmR1bXAocGwsIGZwKQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkKGZwKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKIAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgcGxpc3RsaWIuZHVtcCwgcGwsICdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBwbGlzdGxpYi5sb2FkLCAnZmlsZW5hbWUnKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF90eXBlKHNlbGYpOgorICAgICAgICBwbCA9IFsgb2JqZWN0KCkgXQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBsaXN0bGliLmR1bXBzLCBwbCwgZm10PWZtdCkKKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgZm9yIHBsIGluIFswLCAyKio4LTEsIDIqKjgsIDIqKjE2LTEsIDIqKjE2LCAyKiozMi0xLCAyKiozMiwKKyAgICAgICAgICAgICAgICAgICAyKio2My0xLCAyKio2NC0xLCAxLCAtMioqNjNdOgorICAgICAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwbD1wbCwgZm10PWZtdCk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBsMiwgaW50KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsLCBwbDIpCisgICAgICAgICAgICAgICAgICAgIGRhdGEyID0gcGxpc3RsaWIuZHVtcHMocGwyLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGRhdGEyKQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICBmb3IgcGwgaW4gKDIgKiogNjQgKyAxLCAyICoqIDEyNy0xLCAtMioqNjQsIC0yICoqIDEyNyk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocGw9cGwsIGZtdD1mbXQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwbGlzdGxpYi5kdW1wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGwsIGZtdD1mbXQpCisKICAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKICAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBkYXRhID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMocGwpCi0gICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhkYXRhKQorICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwpCisgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShwbCwgcGxpc3RsaWIuX0ludGVybmFsRGljdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQotICAgICAgICBkYXRhMiA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsMikKKyAgICAgICAgZGF0YTIgPSBwbGlzdGxpYi5kdW1wcyhwbDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZGF0YTIpCiAKICAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9hcnJheShzZWxmKToKLSAgICAgICAgZGF0YSA9IFtbW1tbW1tbeyd0ZXN0JzogcGxpc3RsaWIuRGF0YShiJ2FhYWFhYScpfV1dXV1dXV1dCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKGRhdGEpKSwgZGF0YSkKKyAgICAgICAgZGF0YSA9IFtbW1tbW1tbeyd0ZXN0JzogYidhYWFhYWEnfV1dXV1dXV1dCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHMoZGF0YSkpLCBkYXRhKQogCiAgICAgZGVmIHRlc3RfaW5kZW50YXRpb25fZGljdChzZWxmKToKLSAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IHsnMyc6IHsnNCc6IHsnNSc6IHsnNic6IHsnNyc6IHsnOCc6IHsnOSc6IHBsaXN0bGliLkRhdGEoYidhYWFhYWEnKX19fX19fX19fQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhkYXRhKSksIGRhdGEpCisgICAgICAgIGRhdGEgPSB7JzEnOiB7JzInOiB7JzMnOiB7JzQnOiB7JzUnOiB7JzYnOiB7JzcnOiB7JzgnOiB7JzknOiBiJ2FhYWFhYSd9fX19fX19fX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5sb2FkcyhwbGlzdGxpYi5kdW1wcyhkYXRhKSksIGRhdGEpCiAKICAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9kaWN0X21peChzZWxmKToKLSAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IFt7JzMnOiBbW1tbW3sndGVzdCc6IHBsaXN0bGliLkRhdGEoYidhYWFhYWEnKX1dXV1dXX1dfX0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMocGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMoZGF0YSkpLCBkYXRhKQorICAgICAgICBkYXRhID0geycxJzogeycyJzogW3snMyc6IFtbW1tbeyd0ZXN0JzogYidhYWFhYWEnfV1dXV1dfV19fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKGRhdGEpKSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X2FwcGxlZm9ybWF0dGluZyhzZWxmKToKLSAgICAgICAgcGwgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoVEVTVERBVEEpCi0gICAgICAgIGRhdGEgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBURVNUREFUQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorICAgICAgICBmb3IgdXNlX2J1aWx0aW5fdHlwZXMgaW4gKFRydWUsIEZhbHNlKToKKyAgICAgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCwgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMpOgorICAgICAgICAgICAgICAgICAgICBwbCA9IHBsaXN0bGliLmxvYWRzKFRFU1REQVRBW2ZtdF0sCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcykKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIFRFU1REQVRBW2ZtdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorCiAKICAgICBkZWYgdGVzdF9hcHBsZWZvcm1hdHRpbmdmcm9tbGl0ZXJhbChzZWxmKToKLSAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoVEVTVERBVEEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZShmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKFRFU1REQVRBW2ZtdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpLAorICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQogCiAgICAgZGVmIHRlc3RfYnl0ZXNpbyhzZWxmKToKLSAgICAgICAgZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwotICAgICAgICBiID0gQnl0ZXNJTygpCi0gICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKLSAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbCwgYikKLSAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KEJ5dGVzSU8oYi5nZXR2YWx1ZSgpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgYiA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcChwbCwgYiwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkKEJ5dGVzSU8oYi5nZXR2YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisKKyAgICBkZWYgdGVzdF9rZXlzb3J0X2J5dGVzaW8oc2VsZik6CisgICAgICAgIHBsID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBwbFsnYiddID0gMQorICAgICAgICBwbFsnYSddID0gMgorICAgICAgICBwbFsnYyddID0gMworCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICBmb3Igc29ydF9rZXlzIGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCwgc29ydF9rZXlzPXNvcnRfa2V5cyk6CisgICAgICAgICAgICAgICAgICAgIGIgPSBCeXRlc0lPKCkKKworICAgICAgICAgICAgICAgICAgICBwbGlzdGxpYi5kdW1wKHBsLCBiLCBmbXQ9Zm10LCBzb3J0X2tleXM9c29ydF9rZXlzKQorICAgICAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkKEJ5dGVzSU8oYi5nZXR2YWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpY3RfdHlwZT1jb2xsZWN0aW9ucy5PcmRlcmVkRGljdCkKKworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisgICAgICAgICAgICAgICAgICAgIGlmIHNvcnRfa2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwbDIua2V5cygpKSwgWydhJywgJ2InLCAnYyddKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBsMi5rZXlzKCkpLCBbJ2InLCAnYScsICdjJ10pCisKKyAgICBkZWYgdGVzdF9rZXlzb3J0KHNlbGYpOgorICAgICAgICBwbCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgcGxbJ2InXSA9IDEKKyAgICAgICAgcGxbJ2EnXSA9IDIKKyAgICAgICAgcGxbJ2MnXSA9IDMKKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgZm9yIHNvcnRfa2V5cyBpbiAoRmFsc2UsIFRydWUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQsIHNvcnRfa2V5cz1zb3J0X2tleXMpOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQsIHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEsIGRpY3RfdHlwZT1jb2xsZWN0aW9ucy5PcmRlcmVkRGljdCkKKworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisgICAgICAgICAgICAgICAgICAgIGlmIHNvcnRfa2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwbDIua2V5cygpKSwgWydhJywgJ2InLCAnYyddKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBsMi5rZXlzKCkpLCBbJ2InLCAnYScsICdjJ10pCisKKyAgICBkZWYgdGVzdF9rZXlzX25vX3N0cmluZyhzZWxmKToKKyAgICAgICAgcGwgPSB7IDQyOiAnYU51bWJlcicgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBsaXN0bGliLmR1bXBzLCBwbCwgZm10PWZtdCkKKworICAgICAgICAgICAgICAgIGIgPSBCeXRlc0lPKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBsaXN0bGliLmR1bXAsIHBsLCBiLCBmbXQ9Zm10KQorCisgICAgZGVmIHRlc3Rfc2tpcGtleXMoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgNDI6ICdhTnVtYmVyJywKKyAgICAgICAgICAgICdzbmFrZSc6ICdhV29yZCcsCisgICAgICAgIH0KKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKAorICAgICAgICAgICAgICAgICAgICBwbCwgZm10PWZtdCwgc2tpcGtleXM9VHJ1ZSwgc29ydF9rZXlzPUZhbHNlKQorCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeydzbmFrZSc6ICdhV29yZCd9KQorCisgICAgICAgICAgICAgICAgZnAgPSBCeXRlc0lPKCkKKyAgICAgICAgICAgICAgICBwbGlzdGxpYi5kdW1wKAorICAgICAgICAgICAgICAgICAgICBwbCwgZnAsIGZtdD1mbXQsIHNraXBrZXlzPVRydWUsIHNvcnRfa2V5cz1GYWxzZSkKKyAgICAgICAgICAgICAgICBkYXRhID0gZnAuZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGZwLmdldHZhbHVlKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHsnc25ha2UnOiAnYVdvcmQnfSkKKworICAgIGRlZiB0ZXN0X3R1cGxlX21lbWJlcnMoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgJ2ZpcnN0JzogKDEsIDIpLAorICAgICAgICAgICAgJ3NlY29uZCc6ICgxLCAyKSwKKyAgICAgICAgICAgICd0aGlyZCc6ICgzLCA0KSwKKyAgICAgICAgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeworICAgICAgICAgICAgICAgICAgICAnZmlyc3QnOiBbMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICdzZWNvbmQnOiBbMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICd0aGlyZCc6IFszLCA0XSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocGwyWydmaXJzdCddLCBwbDJbJ3NlY29uZCddKQorCisgICAgZGVmIHRlc3RfbGlzdF9tZW1iZXJzKHNlbGYpOgorICAgICAgICBwbCA9IHsKKyAgICAgICAgICAgICdmaXJzdCc6IFsxLCAyXSwKKyAgICAgICAgICAgICdzZWNvbmQnOiBbMSwgMl0sCisgICAgICAgICAgICAndGhpcmQnOiBbMywgNF0sCisgICAgICAgIH0KKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHsKKyAgICAgICAgICAgICAgICAgICAgJ2ZpcnN0JzogWzEsIDJdLAorICAgICAgICAgICAgICAgICAgICAnc2Vjb25kJzogWzEsIDJdLAorICAgICAgICAgICAgICAgICAgICAndGhpcmQnOiBbMywgNF0sCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHBsMlsnZmlyc3QnXSwgcGwyWydzZWNvbmQnXSkKKworICAgIGRlZiB0ZXN0X2RpY3RfbWVtYmVycyhzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICAnZmlyc3QnOiB7J2EnOiAxfSwKKyAgICAgICAgICAgICdzZWNvbmQnOiB7J2EnOiAxfSwKKyAgICAgICAgICAgICd0aGlyZCc6IHsnYic6IDIgfSwKKyAgICAgICAgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeworICAgICAgICAgICAgICAgICAgICAnZmlyc3QnOiB7J2EnOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgJ3NlY29uZCc6IHsnYSc6IDF9LAorICAgICAgICAgICAgICAgICAgICAndGhpcmQnOiB7J2InOiAyIH0sCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHBsMlsnZmlyc3QnXSwgcGwyWydzZWNvbmQnXSkKIAogICAgIGRlZiB0ZXN0X2NvbnRyb2xjaGFyYWN0ZXJzKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMjgpOgpAQCAtMTc5LDI1ICszNTAsMjcgQEAKICAgICAgICAgICAgIHRlc3RTdHJpbmcgPSAic3RyaW5nIGNvbnRhaW5pbmcgJXMiICUgYwogICAgICAgICAgICAgaWYgaSA+PSAzMiBvciBjIGluICJcclxuXHQiOgogICAgICAgICAgICAgICAgICMgXHIsIFxuIGFuZCBcdCBhcmUgdGhlIG9ubHkgbGVnYWwgY29udHJvbCBjaGFycyBpbiBYTUwKLSAgICAgICAgICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyh0ZXN0U3RyaW5nKQorICAgICAgICAgICAgICAgIHBsaXN0bGliLmR1bXBzKHRlc3RTdHJpbmcsIGZtdD1wbGlzdGxpYi5GTVRfWE1MKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsaXN0bGliLmR1bXBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RTdHJpbmcpCiAKICAgICBkZWYgdGVzdF9ub25kaWN0cm9vdChzZWxmKToKLSAgICAgICAgdGVzdDEgPSAiYWJjIgotICAgICAgICB0ZXN0MiA9IFsxLCAyLCAzLCAiYWJjIl0KLSAgICAgICAgcmVzdWx0MSA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyh0ZXN0MSkpCi0gICAgICAgIHJlc3VsdDIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMocGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXModGVzdDIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QxLCByZXN1bHQxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QyLCByZXN1bHQyKQorICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgdGVzdDEgPSAiYWJjIgorICAgICAgICAgICAgICAgIHRlc3QyID0gWzEsIDIsIDMsICJhYmMiXQorICAgICAgICAgICAgICAgIHJlc3VsdDEgPSBwbGlzdGxpYi5sb2FkcyhwbGlzdGxpYi5kdW1wcyh0ZXN0MSwgZm10PWZtdCkpCisgICAgICAgICAgICAgICAgcmVzdWx0MiA9IHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKHRlc3QyLCBmbXQ9Zm10KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QxLCByZXN1bHQxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDIsIHJlc3VsdDIpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkYXJyYXkoc2VsZik6CiAgICAgICAgIGZvciBpIGluIFsiPGtleT5rZXkgaW5zaWRlIGFuIGFycmF5PC9rZXk+IiwKICAgICAgICAgICAgICAgICAgICI8a2V5PmtleSBpbnNpZGUgYW4gYXJyYXkyPC9rZXk+PHJlYWw+MzwvcmVhbD4iLAogICAgICAgICAgICAgICAgICAgIjx0cnVlLz48a2V5PmtleSBpbnNpZGUgYW4gYXJyYXkzPC9rZXk+Il06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiPHBsaXN0PjxhcnJheT4lczwvYXJyYXk+PC9wbGlzdD4iJWkpLmVuY29kZSgpKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZGRpY3Qoc2VsZik6CkBAIC0yMDYsMjIgKzM3OSwxMzAgQEAKICAgICAgICAgICAgICAgICAgICI8c3RyaW5nPm1pc3Npbmcga2V5PC9zdHJpbmc+IiwKICAgICAgICAgICAgICAgICAgICI8a2V5PmsxPC9rZXk+PHN0cmluZz52MTwvc3RyaW5nPjxyZWFsPjUuMzwvcmVhbD4iCiAgICAgICAgICAgICAgICAgICAiPGtleT5rMTwva2V5PjxrZXk+azI8L2tleT48c3RyaW5nPmRvdWJsZSBrZXk8L3N0cmluZz4iXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI8cGxpc3Q+PGRpY3Q+JXM8L2RpY3Q+PC9wbGlzdD4iJWkpLmVuY29kZSgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIubG9hZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjxwbGlzdD48YXJyYXk+PGRpY3Q+JXM8L2RpY3Q+PC9hcnJheT48L3BsaXN0PiIlaSkuZW5jb2RlKCkpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkaW50ZWdlcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8cGxpc3Q+PGludGVnZXI+bm90IGludGVnZXI8L2ludGVnZXI+PC9wbGlzdD4iKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZHJlYWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIubG9hZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPHBsaXN0PjxpbnRlZ2VyPm5vdCByZWFsPC9pbnRlZ2VyPjwvcGxpc3Q+IikKIAorICAgIGRlZiB0ZXN0X3htbF9lbmNvZGluZ3Moc2VsZik6CisgICAgICAgIGJhc2UgPSBURVNUREFUQVtwbGlzdGxpYi5GTVRfWE1MXQorCisgICAgICAgIGZvciB4bWxfZW5jb2RpbmcsIGVuY29kaW5nLCBib20gaW4gWworICAgICAgICAgICAgICAgICAgICAoYid1dGYtOCcsICd1dGYtOCcsIGNvZGVjcy5CT01fVVRGOCksCisgICAgICAgICAgICAgICAgICAgIChiJ3V0Zi0xNicsICd1dGYtMTYtbGUnLCBjb2RlY3MuQk9NX1VURjE2X0xFKSwKKyAgICAgICAgICAgICAgICAgICAgKGIndXRmLTE2JywgJ3V0Zi0xNi1iZScsIGNvZGVjcy5CT01fVVRGMTZfQkUpLAorICAgICAgICAgICAgICAgICAgICAjIEV4cGF0IGRvZXMgbm90IHN1cHBvcnQgVVRGLTMyCisgICAgICAgICAgICAgICAgICAgICMoYid1dGYtMzInLCAndXRmLTMyLWxlJywgY29kZWNzLkJPTV9VVEYzMl9MRSksCisgICAgICAgICAgICAgICAgICAgICMoYid1dGYtMzInLCAndXRmLTMyLWJlJywgY29kZWNzLkJPTV9VVEYzMl9CRSksCisgICAgICAgICAgICAgICAgXToKKworICAgICAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoZm10PXBsaXN0bGliLkZNVF9YTUwpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgZGF0YSA9IGJhc2UucmVwbGFjZShiJ1VURi04JywgeG1sX2VuY29kaW5nKQorICAgICAgICAgICAgICAgIGRhdGEgPSBib20gKyBkYXRhLmRlY29kZSgndXRmLTgnKS5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisKKworY2xhc3MgVGVzdFBsaXN0bGliRGVwcmVjYXRlZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW9fZGVwcmVjYXRlZChzZWxmKToKKyAgICAgICAgcGxfaW4gPSB7CisgICAgICAgICAgICAna2V5JzogNDIsCisgICAgICAgICAgICAnc3ViJzogeworICAgICAgICAgICAgICAgICdrZXknOiA5LAorICAgICAgICAgICAgICAgICdhbHQnOiAndmFsdWUnLAorICAgICAgICAgICAgICAgICdkYXRhJzogYididWZmZXInLAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBsX291dCA9IHBsaXN0bGliLl9JbnRlcm5hbERpY3QoeworICAgICAgICAgICAgJ2tleSc6IDQyLAorICAgICAgICAgICAgJ3N1Yic6IHBsaXN0bGliLl9JbnRlcm5hbERpY3QoeworICAgICAgICAgICAgICAgICdrZXknOiA5LAorICAgICAgICAgICAgICAgICdhbHQnOiAndmFsdWUnLAorICAgICAgICAgICAgICAgICdkYXRhJzogcGxpc3RsaWIuRGF0YShiJ2J1ZmZlcicpLAorICAgICAgICAgICAgfSkKKyAgICAgICAgfSkKKworICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGxfaW4sIHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxfb3V0LCBwbDIpCisKKyAgICAgICAgb3MudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0KHBsX2luLCBmcCkKKworICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICdyYicpIGFzIGZwOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KGZwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxfb3V0LCBwbDIpCisKKyAgICBkZWYgdGVzdF9ieXRlc19kZXByZWNhdGVkKHNlbGYpOgorICAgICAgICBwbCA9IHsKKyAgICAgICAgICAgICdrZXknOiA0MiwKKyAgICAgICAgICAgICdzdWInOiB7CisgICAgICAgICAgICAgICAgJ2tleSc6IDksCisgICAgICAgICAgICAgICAgJ2FsdCc6ICd2YWx1ZScsCisgICAgICAgICAgICAgICAgJ2RhdGEnOiBiJ2J1ZmZlcicsCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMocGwpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGwyLCBwbGlzdGxpYi5fSW50ZXJuYWxEaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgcGxpc3RsaWIuX0ludGVybmFsRGljdCgKKyAgICAgICAgICAgIGtleT00MiwKKyAgICAgICAgICAgIHN1Yj1wbGlzdGxpYi5fSW50ZXJuYWxEaWN0KAorICAgICAgICAgICAgICAgIGtleT05LAorICAgICAgICAgICAgICAgIGFsdD0ndmFsdWUnLAorICAgICAgICAgICAgICAgIGRhdGE9cGxpc3RsaWIuRGF0YShiJ2J1ZmZlcicpLAorICAgICAgICAgICAgKQorICAgICAgICApKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgZGF0YTIgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZGF0YTIpCisKKyAgICBkZWYgdGVzdF9kYXRhb2JqZWN0X2RlcHJlY2F0ZWQoc2VsZik6CisgICAgICAgIGluX2RhdGEgPSB7ICdrZXknOiBwbGlzdGxpYi5EYXRhKGInaGVsbG8nKSB9CisgICAgICAgIG91dF9kYXRhID0geyAna2V5JzogYidoZWxsbycgfQorCisgICAgICAgIGJ1ZiA9IHBsaXN0bGliLmR1bXBzKGluX2RhdGEpCisKKyAgICAgICAgY3VyID0gcGxpc3RsaWIubG9hZHMoYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ciwgb3V0X2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3VyLCBpbl9kYXRhKQorCisgICAgICAgIGN1ciA9IHBsaXN0bGliLmxvYWRzKGJ1ZiwgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3VyLCBvdXRfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIsIGluX2RhdGEpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBjdXIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoYnVmKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGN1ciwgb3V0X2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLCBpbl9kYXRhKQorCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UGxpc3RsaWIpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFBsaXN0bGliLCBUZXN0UGxpc3RsaWJEZXByZWNhdGVkKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BvbGwucHkgYi9MaWIvdGVzdC90ZXN0X3BvbGwucHkKaW5kZXggYTA3YTcxOS4uYTBhMzMyYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQpAQCAtMSw2ICsxLDcgQEAKICMgVGVzdCBjYXNlIGZvciB0aGUgb3MucG9sbCgpIGZ1bmN0aW9uCiAKIGltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCByYW5kb20KIGltcG9ydCBzZWxlY3QKIHRyeToKQEAgLTE0LDcgKzE1LDcgQEAKIHRyeToKICAgICBzZWxlY3QucG9sbAogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJzZWxlY3QucG9sbCBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3BvbGwiKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJzZWxlY3QucG9sbCBub3QgZGVmaW5lZCIpCiAKIAogZGVmIGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIGZsYWcpOgpAQCAtNzUsMTMgKzc2LDExIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZzLCBbTVNHXSAqIE5VTV9QSVBFUykKIAotICAgIGRlZiBwb2xsX3VuaXRfdGVzdHMoc2VsZik6CisgICAgZGVmIHRlc3RfcG9sbF91bml0X3Rlc3RzKHNlbGYpOgogICAgICAgICAjIHJldHVybnMgTlZBTCBmb3IgaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IKLSAgICAgICAgRkQgPSA0MgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5jbG9zZShGRCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgIEZELCB3ID0gb3MucGlwZSgpCisgICAgICAgIG9zLmNsb3NlKEZEKQorICAgICAgICBvcy5jbG9zZSh3KQogICAgICAgICBwID0gc2VsZWN0LnBvbGwoKQogICAgICAgICBwLnJlZ2lzdGVyKEZEKQogICAgICAgICByID0gcC5wb2xsKCkKQEAgLTEyNCw3ICsxMjMsOSBAQAogCiAgICAgZGVmIHRlc3RfcG9sbDIoc2VsZik6CiAgICAgICAgIGNtZCA9ICdmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBlY2hvIHRlc3RpbmcuLi47IHNsZWVwIDE7IGRvbmUnCi0gICAgICAgIHAgPSBvcy5wb3BlbihjbWQsICdyJykKKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZzaXplPTApCisgICAgICAgIHAgPSBwcm9jLnN0ZG91dAogICAgICAgICBwb2xsc3RlciA9IHNlbGVjdC5wb2xsKCkKICAgICAgICAgcG9sbHN0ZXIucmVnaXN0ZXIoIHAsIHNlbGVjdC5QT0xMSU4gKQogICAgICAgICBmb3IgdG91dCBpbiAoMCwgMTAwMCwgMjAwMCwgNDAwMCwgODAwMCwgMTYwMDApICsgKC0xLCkqMTA6CkBAIC0xMzQsNyArMTM1LDcgQEAKICAgICAgICAgICAgIGZkLCBmbGFncyA9IGZkbGlzdFswXQogICAgICAgICAgICAgaWYgZmxhZ3MgJiBzZWxlY3QuUE9MTEhVUDoKICAgICAgICAgICAgICAgICBsaW5lID0gcC5yZWFkbGluZSgpCi0gICAgICAgICAgICAgICAgaWYgbGluZSAhPSAiIjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lICE9IGIiIjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnJvcjogcGlwZSBzZWVtcyB0byBiZSBjbG9zZWQsIGJ1dCBzdGlsbCByZXR1cm5zIGRhdGEnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKQEAgLTE0Miw2ICsxNDMsNyBAQAogICAgICAgICAgICAgICAgIGxpbmUgPSBwLnJlYWRsaW5lKCkKICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGIndGVzdGluZy4uLlxuJykKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIGZyb20gc2VsZWN0LnBvbGw6ICVzJyAlIGZkbGlzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9wbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKaW5kZXggNTgwOWJlNi4uZDA3NmZjMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKQEAgLTE4LDYgKzE4LDE5IEBACiBIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKIFBPUlQgPSAwCiAKK1NVUFBPUlRTX1NTTCA9IEZhbHNlCitpZiBoYXNhdHRyKHBvcGxpYiwgJ1BPUDNfU1NMJyk6CisgICAgaW1wb3J0IHNzbAorICAgIGZyb20gc3NsIGltcG9ydCBIQVNfU05JCisKKyAgICBTVVBQT1JUU19TU0wgPSBUcnVlCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsICJrZXljZXJ0My5wZW0iKQorICAgIENBRklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwgInB5Y2FjZXJ0LnBlbSIpCitlbHNlOgorICAgIEhBU19TTkkgPSBGYWxzZQorCityZXF1aXJlc19zc2wgPSBza2lwVW5sZXNzKFNVUFBPUlRTX1NTTCwgJ1NTTCBub3Qgc3VwcG9ydGVkJykKKwogIyB0aGUgZHVtbXkgZGF0YSByZXR1cm5lZCBieSBzZXJ2ZXIgd2hlbiBMSVNUIGFuZCBSRVRSIGNvbW1hbmRzIGFyZSBpc3N1ZWQKIExJU1RfUkVTUCA9IGInMSAxXHJcbjIgMlxyXG4zIDNcclxuNCA0XHJcbjUgNVxyXG4uXHJcbicKIFJFVFJfUkVTUCA9IGIiIiJGcm9tOiBwb3N0bWFzdGVyQHB5dGhvbi5vcmdcCkBAIC0zMywxMSArNDYsMTUgQEAKIAogY2xhc3MgRHVtbXlQT1AzSGFuZGxlcihhc3luY2hhdC5hc3luY19jaGF0KToKIAorICAgIENBUEFTID0geydVSURMJzogW10sICdJTVBMRU1FTlRBVElPTic6IFsncHl0aG9uLXRlc3RsaWItcG9wLXNlcnZlciddfQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgogICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCiAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYiJcclxuIikKICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQogICAgICAgICBzZWxmLnB1c2goJytPSyBkdW1teSBwb3AzIHNlcnZlciByZWFkeS4gPHRpbWVzdGFtcD4nKQorICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBGYWxzZQorICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IEZhbHNlCiAKICAgICBkZWYgY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmluX2J1ZmZlci5hcHBlbmQoZGF0YSkKQEAgLTExMiw2ICsxMjksNjUgQEAKICAgICAgICAgc2VsZi5wdXNoKCcrT0sgY2xvc2luZy4nKQogICAgICAgICBzZWxmLmNsb3NlX3doZW5fZG9uZSgpCiAKKyAgICBkZWYgX2dldF9jYXBhcyhzZWxmKToKKyAgICAgICAgX2NhcGFzID0gZGljdChzZWxmLkNBUEFTKQorICAgICAgICBpZiBub3Qgc2VsZi50bHNfYWN0aXZlIGFuZCBTVVBQT1JUU19TU0w6CisgICAgICAgICAgICBfY2FwYXNbJ1NUTFMnXSA9IFtdCisgICAgICAgIHJldHVybiBfY2FwYXMKKworICAgIGRlZiBjbWRfY2FwYShzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyBDYXBhYmlsaXR5IGxpc3QgZm9sbG93cycpCisgICAgICAgIGlmIHNlbGYuX2dldF9jYXBhcygpOgorICAgICAgICAgICAgZm9yIGNhcCwgcGFyYW1zIGluIHNlbGYuX2dldF9jYXBhcygpLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgX2xuID0gW2NhcF0KKyAgICAgICAgICAgICAgICBpZiBwYXJhbXM6CisgICAgICAgICAgICAgICAgICAgIF9sbi5leHRlbmQocGFyYW1zKQorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnICcuam9pbihfbG4pKQorICAgICAgICBzZWxmLnB1c2goJy4nKQorCisgICAgaWYgU1VQUE9SVFNfU1NMOgorCisgICAgICAgIGRlZiBjbWRfc3RscyhzZWxmLCBhcmcpOgorICAgICAgICAgICAgaWYgc2VsZi50bHNfYWN0aXZlIGlzIEZhbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicpCisgICAgICAgICAgICAgICAgdGxzX3NvY2sgPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrZXQsIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9RmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc29ja2V0KHRsc19zb2NrKQorICAgICAgICAgICAgICAgIHNlbGYudGxzX2FjdGl2ZSA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5fZG9fdGxzX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnLUVSUiBDb21tYW5kIG5vdCBwZXJtaXR0ZWQgd2hlbiBUTFMgYWN0aXZlJykKKworICAgICAgICBkZWYgX2RvX3Rsc19oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX0VPRjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYudGxzX3N0YXJ0aW5nID0gRmFsc2UKKworICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLnRsc19zdGFydGluZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb190bHNfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0LmhhbmRsZV9yZWFkKHNlbGYpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY2xvc2UoKQogCiBjbGFzcyBEdW1teVBPUDNTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlciwgdGhyZWFkaW5nLlRocmVhZCk6CiAKQEAgLTIzNiwxOSArMzEyLDQzIEBACiAgICAgICAgIHNlbGYuY2xpZW50LnVpZGwoKQogICAgICAgICBzZWxmLmNsaWVudC51aWRsKCdmb28nKQogCisgICAgZGVmIHRlc3RfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0lNUExFTUVOVEFUSU9OJyBpbiBjYXBhLmtleXMoKSkKKwogICAgIGRlZiB0ZXN0X3F1aXQoc2VsZik6CiAgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5xdWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3ApCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuY2xpZW50LnNvY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuY2xpZW50LmZpbGUpCiAKKyAgICBAcmVxdWlyZXNfc3NsCisgICAgZGVmIHRlc3Rfc3Rsc19jYXBhKHNlbGYpOgorICAgICAgICBjYXBhID0gc2VsZi5jbGllbnQuY2FwYSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU1RMUycgaW4gY2FwYS5rZXlzKCkpCiAKLVNVUFBPUlRTX1NTTCA9IEZhbHNlCi1pZiBoYXNhdHRyKHBvcGxpYiwgJ1BPUDNfU1NMJyk6Ci0gICAgaW1wb3J0IHNzbAorICAgIEByZXF1aXJlc19zc2wKKyAgICBkZWYgdGVzdF9zdGxzKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IGInK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicKKyAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsIGV4cGVjdGVkKQogCi0gICAgU1VQUE9SVFNfU1NMID0gVHJ1ZQotICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLCAia2V5Y2VydC5wZW0iKQorICAgIEByZXF1aXJlc19zc2wKKyAgICBAc2tpcFVubGVzcyhIQVNfU05JLCAnTm8gU05JIHN1cHBvcnQgaW4gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3Rfc3Rsc19jb250ZXh0KHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IGInK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENBRklMRSkKKyAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgY3R4LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5DZXJ0aWZpY2F0ZUVycm9yKToKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5zdGxzKGNvbnRleHQ9Y3R4KQorICAgICAgICBzZWxmLmNsaWVudCA9IHBvcGxpYi5QT1AzKCJsb2NhbGhvc3QiLCBzZWxmLnNlcnZlci5wb3J0LCB0aW1lb3V0PTMpCisgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5zdGxzKGNvbnRleHQ9Y3R4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsIGV4cGVjdGVkKQorCisKK2lmIFNVUFBPUlRTX1NTTDoKIAogICAgIGNsYXNzIER1bW15UE9QM19TU0xIYW5kbGVyKER1bW15UE9QM0hhbmRsZXIpOgogCkBAIC0yNjAsMzUgKzM2MCwxMyBAQAogICAgICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCiAgICAgICAgICAgICBzZWxmLnNldF9zb2NrZXQoc3NsX3NvY2tldCkKICAgICAgICAgICAgICMgTXVzdCB0cnkgaGFuZHNoYWtlIGJlZm9yZSBjYWxsaW5nIHB1c2goKQotICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQorICAgICAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi50bHNfc3RhcnRpbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9kb190bHNfaGFuZHNoYWtlKCkKICAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYiJcclxuIikKICAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KICAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIGR1bW15IHBvcDMgc2VydmVyIHJlYWR5LiA8dGltZXN0YW1wPicpCiAKLSAgICAgICAgZGVmIF9kb19zc2xfaGFuZHNoYWtlKHNlbGYpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmRvX2hhbmRzaGFrZSgpCi0gICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGVycjoKLSAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IEZhbHNlCi0KLSAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5fc3NsX2FjY2VwdGluZzoKLSAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfaGFuZHNoYWtlKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgRHVtbXlQT1AzSGFuZGxlci5oYW5kbGVfcmVhZChzZWxmKQotCi1yZXF1aXJlc19zc2wgPSBza2lwVW5sZXNzKFNVUFBPUlRTX1NTTCwgJ1NTTCBub3Qgc3VwcG9ydGVkJykKIAogQHJlcXVpcmVzX3NzbAogY2xhc3MgVGVzdFBPUDNfU1NMQ2xhc3MoVGVzdFBPUDNDbGFzcyk6CkBAIC0zMDYsMjAgKzM4NCw2MCBAQAogICAgIGRlZiB0ZXN0X2NvbnRleHQoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG9wbGliLlBPUDNfU1NMLCBzZWxmLnNlcnZlci5ob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG9wbGliLlBPUDNfU1NMLCBzZWxmLnNlcnZlci5ob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBjZXJ0ZmlsZT1DRVJURklMRSwgY29udGV4dD1jdHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucG9ydCwgY2VydGZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3BsaWIuUE9QM19TU0wsIHNlbGYuc2VydmVyLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKIAogICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKICAgICAgICAgc2VsZi5jbGllbnQgPSBwb3BsaWIuUE9QM19TU0woc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jdHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jdHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQogICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuY2xpZW50LnNvY2suY29udGV4dCwgY3R4KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGllbnQubm9vcCgpLnN0YXJ0c3dpdGgoYicrT0snKSkKIAorICAgIGRlZiB0ZXN0X3N0bHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHBvcGxpYi5lcnJvcl9wcm90bywgc2VsZi5jbGllbnQuc3RscykKKworICAgIHRlc3Rfc3Rsc19jb250ZXh0ID0gdGVzdF9zdGxzCisKKyAgICBkZWYgdGVzdF9zdGxzX2NhcGEoc2VsZik6CisgICAgICAgIGNhcGEgPSBzZWxmLmNsaWVudC5jYXBhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnU1RMUycgaW4gY2FwYS5rZXlzKCkpCisKKworQHJlcXVpcmVzX3NzbAorY2xhc3MgVGVzdFBPUDNfVExTQ2xhc3MoVGVzdFBPUDNDbGFzcyk6CisgICAgIyByZXBlYXQgcHJldmlvdXMgdGVzdHMgYnkgdXNpbmcgcG9wbGliLlBPUDMuc3RscygpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlQT1AzU2VydmVyKChIT1NULCBQT1JUKSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmNsaWVudCA9IHBvcGxpYi5QT1AzKHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQsIHRpbWVvdXQ9MykKKyAgICAgICAgc2VsZi5jbGllbnQuc3RscygpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2xpZW50LmZpbGUgaXMgbm90IE5vbmUgYW5kIHNlbGYuY2xpZW50LnNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisgICAgICAgICAgICBleGNlcHQgcG9wbGliLmVycm9yX3Byb3RvOgorICAgICAgICAgICAgICAgICMgaGFwcGVucyBpbiB0aGUgdGVzdF90b29fbG9uZ19saW5lcyBjYXNlOyB0aGUgb3ZlcmxvbmcKKyAgICAgICAgICAgICAgICAjIHJlc3BvbnNlIHdpbGwgYmUgdHJlYXRlZCBhcyByZXNwb25zZSB0byBRVUlUIGFuZCByYWlzZQorICAgICAgICAgICAgICAgICMgdGhpcyBleGNlcHRpb24KKyAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHRlc3Rfc3RscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC5zdGxzKQorCisgICAgdGVzdF9zdGxzX2NvbnRleHQgPSB0ZXN0X3N0bHMKKworICAgIGRlZiB0ZXN0X3N0bHNfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGInU1RMUycgaW4gY2FwYS5rZXlzKCkpCisKIAogY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKIApAQCAtMzc3LDcgKzQ5NSw3IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0cyA9IFtUZXN0UE9QM0NsYXNzLCBUZXN0VGltZW91dHMsCi0gICAgICAgICAgICAgVGVzdFBPUDNfU1NMQ2xhc3NdCisgICAgICAgICAgICAgVGVzdFBPUDNfU1NMQ2xhc3MsIFRlc3RQT1AzX1RMU0NsYXNzXQogICAgIHRocmVhZF9pbmZvID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAgICAgdHJ5OgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CmluZGV4IDk0MDhlNWMuLjAwOWYyOWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQpAQCAtNjAzLDggKzYwMywxMCBAQAogICAgICAgICByLCB3ID0gb3MucGlwZTIob3MuT19DTE9FWEVDfG9zLk9fTk9OQkxPQ0spCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwociwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwodywgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUodykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChyLCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bCh3LCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCiAgICAgICAgICMgdHJ5IHJlYWRpbmcgZnJvbSBhbiBlbXB0eSBwaXBlOiB0aGlzIHNob3VsZCBmYWlsLCBub3QgYmxvY2sKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MucmVhZCwgciwgMSkKICAgICAgICAgIyB0cnkgYSB3cml0ZSBiaWcgZW5vdWdoIHRvIGZpbGwtdXAgdGhlIHBpcGU6IHRoaXMgc2hvdWxkIGVpdGhlcgpAQCAtNjUyLDcgKzY1NCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0LnN0X2ZsYWdzIHwgc3RhdC5VRl9JTU1VVEFCTEUsIG5ld19zdC5zdF9mbGFncykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9wZW4odGFyZ2V0X2ZpbGUsICd3KycpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVQRVJNKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcG9zaXguY2hmbGFncyh0YXJnZXRfZmlsZSwgc3Quc3RfZmxhZ3MpCkBAIC03MTAsNDEgKzcxMiwzOSBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2dldGN3ZCcpLCAndGVzdCBuZWVkcyBwb3NpeC5nZXRjd2QoKScpCiAgICAgZGVmIHRlc3RfZ2V0Y3dkX2xvbmdfcGF0aG5hbWVzKHNlbGYpOgotICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZ2V0Y3dkJyk6Ci0gICAgICAgICAgICBkaXJuYW1lID0gJ2dldGN3ZC10ZXN0LWRpcmVjdG9yeS0wMTIzNDU2Nzg5YWJjZGVmLTAxMjM0NTY3ODkwYWJjZGVmJwotICAgICAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGJhc2VfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikgKyAnLmdldGN3ZCcKKyAgICAgICAgZGlybmFtZSA9ICdnZXRjd2QtdGVzdC1kaXJlY3RvcnktMDEyMzQ1Njc4OWFiY2RlZi0wMTIzNDU2Nzg5MGFiY2RlZicKKyAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgYmFzZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKSArICcuZ2V0Y3dkJwogCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoYmFzZV9wYXRoKQotICAgICAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSMgICAgICAgICAgICAgICBKdXN0IHJldHVybmluZyBub3RoaW5nIGluc3RlYWQgb2YgdGhlIFNraXBUZXN0IGV4Y2VwdGlvbiwKLSMgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLgotIyAgICAgICAgICAgICAgIElzIHRoYXQgb2s/Ci0jICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCi0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1rZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyAgSnVzdCByZXR1cm5pbmcgbm90aGluZyBpbnN0ZWFkIG9mIHRoZSBTa2lwVGVzdCBleGNlcHRpb24sIGJlY2F1c2UKKyAgICAgICAgICAgICMgIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLiAgSXMgdGhhdCBvaz8KKyAgICAgICAgICAgICMgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCisgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihkaXJuYW1lKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibWtkaXIgY2Fubm90IGNyZWF0ZSBkaXJlY3Rvcnkgc3VmZmljaWVudGx5IGRlZXAgZm9yIGdldGN3ZCB0ZXN0IikKKyAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJta2RpciBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBzdWZmaWNpZW50bHkgZGVlcCBmb3IgZ2V0Y3dkIHRlc3QiKQogCi0gICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmdldGN3ZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3BhdGhfbGVuZ3RoIDwgMTAyNzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcignLi4nKQotICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudF9wYXRoX2xlbmd0aCA8IDEwMjc6CisgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoJy4uJykKKyAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKIAotICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lKQorICAgICAgICAgICAgX2NyZWF0ZV9hbmRfZG9fZ2V0Y3dkKGRpcm5hbWUpCiAKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3MuY2hkaXIoY3VyZGlyKQotICAgICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKGN1cmRpcikKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdnZXRncm91cGxpc3QnKSwgInRlc3QgbmVlZHMgcG9zaXguZ2V0Z3JvdXBsaXN0KCkiKQogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocHdkLCAnZ2V0cHd1aWQnKSwgInRlc3QgbmVlZHMgcHdkLmdldHB3dWlkKCkiKQpAQCAtMTEyMSw2ICsxMTIxLDIzIEBACiAgICAgICAgICAgICAgICAgIyBodHRwOi8vbGlzdHMuZnJlZWJzZC5vcmcvcGlwZXJtYWlsL2ZyZWVic2QtYW1kNjQvMjAxMi1KYW51YXJ5LzAxNDMzMi5odG1sCiAgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk9TRXJyb3IgcmFpc2VkISIpCiAKKyAgICBkZWYgdGVzdF9wYXRoX2Vycm9yMihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgZnVuY3Rpb25zIHRoYXQgY2FsbCBwYXRoX2Vycm9yMigpLCBwcm92aWRpbmcgdHdvIGZpbGVuYW1lcyBpbiB0aGVpciBleGNlcHRpb25zLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIG5hbWUgaW4gKCJyZW5hbWUiLCAicmVwbGFjZSIsICJsaW5rIiwgInN5bWxpbmsiKToKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gZ2V0YXR0cihvcywgbmFtZSwgTm9uZSkKKworICAgICAgICAgICAgaWYgZnVuY3Rpb246CisgICAgICAgICAgICAgICAgZm9yIGRzdCBpbiAoIm5vb2RseTIiLCBzdXBwb3J0LlRFU1RGTik6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCdkb2Vzbm90ZXhpc3RmaWxlbmFtZScsIGRzdCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIidkb2Vzbm90ZXhpc3RmaWxlbmFtZScgLT4gJ3t9JyIuZm9ybWF0KGRzdCksIHN0cihlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJObyB2YWxpZCBwYXRoX2Vycm9yMigpIHRlc3QgZm9yIG9zLiIgKyBuYW1lKQorCiBjbGFzcyBQb3NpeEdyb3Vwc1Rlc3Rlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5CmluZGV4IDBlN2Q4NjYuLjQxMjg0OWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5CkBAIC0xODYsNjMgKzE4Niw2IEBACiAgICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfY3JlYXRlX2ZpbGUoZmlsZW5hbWUpOgotICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKGInZm9vJykKLQotICAgIGRlZiB0ZXN0X3NhbWVmaWxlKHNlbGYpOgotICAgICAgICB0ZXN0X2ZuID0gc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lZmlsZSh0ZXN0X2ZuLCB0ZXN0X2ZuKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguc2FtZWZpbGUpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKAotICAgICAgICBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksCi0gICAgICAgICJwb3NpeHBhdGguc2FtZWZpbGUgZG9lcyBub3Qgd29yayBvbiBsaW5rcyBpbiBXaW5kb3dzIikKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAic3ltbGluayIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHN5bWxpbmsgaW1wbGVtZW50YXRpb24iKQotICAgIGRlZiB0ZXN0X3NhbWVmaWxlX29uX2xpbmtzKHNlbGYpOgotICAgICAgICB0ZXN0X2ZuMSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjEpCi0KLSAgICAgICAgb3Muc3ltbGluayh0ZXN0X2ZuMSwgdGVzdF9mbjIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZWZpbGUodGVzdF9mbjEsIHRlc3RfZm4yKSkKLSAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQotCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4yKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvc2l4cGF0aC5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQotCi0KLSAgICBkZWYgdGVzdF9zYW1lc3RhdChzZWxmKToKLSAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4pCi0gICAgICAgIHRlc3RfZm5zID0gW3Rlc3RfZm5dKjIKLSAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZXN0YXQoKnN0YXRzKSkKLQotICAgIEB1bml0dGVzdC5za2lwSWYoCi0gICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKLSAgICAgICAgInBvc2l4cGF0aC5zYW1lc3RhdCBkb2VzIG5vdCB3b3JrIG9uIGxpbmtzIGluIFdpbmRvd3MiKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJzeW1saW5rIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3Npbmcgc3ltbGluayBpbXBsZW1lbnRhdGlvbiIpCi0gICAgZGVmIHRlc3Rfc2FtZXN0YXRfb25fbGlua3Moc2VsZik6Ci0gICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgdGVzdF9mbjIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMSkKLSAgICAgICAgdGVzdF9mbnMgPSAodGVzdF9mbjEsIHRlc3RfZm4yKQotICAgICAgICBvcy5zeW1saW5rKCp0ZXN0X2ZucykKLSAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZXN0YXQoKnN0YXRzKSkKLSAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQotCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4yKQotICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3NpeHBhdGguc2FtZXN0YXQoKnN0YXRzKSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5zYW1lc3RhdCkKLQogICAgIGRlZiB0ZXN0X2lzbW91bnQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzbW91bnQoIi8iKSwgVHJ1ZSkKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgpAQCAtNTk1LDExICs1MzgsNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuZ2V0Y3dkYiA9IHJlYWxfZ2V0Y3dkYgogCi0gICAgZGVmIHRlc3Rfc2FtZW9wZW5maWxlKHNlbGYpOgotICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHdpdGggb3BlbihmbmFtZSwgIndiIikgYXMgYSwgb3BlbihmbmFtZSwgIndiIikgYXMgYjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZW9wZW5maWxlKGEuZmlsZW5vKCksIGIuZmlsZW5vKCkpKQotCiAKIGNsYXNzIFBvc2l4Q29tbW9uVGVzdCh0ZXN0X2dlbmVyaWNwYXRoLkNvbW1vblRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBwYXRobW9kdWxlID0gcG9zaXhwYXRoCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BwcmludC5weSBiL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CmluZGV4IGE4NTI5OGUuLjNkMzY0YzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CkBAIC0xLDMgKzEsNSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKwogaW1wb3J0IHBwcmludAogaW1wb3J0IHRlc3Quc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CkBAIC01MzAsNiArNTMyLDU0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZGljdC5mcm9ta2V5cyhrZXlzLCAwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3slcjogMCwgJXI6IDB9JyAlIHR1cGxlKHNvcnRlZChrZXlzLCBrZXk9aWQpKSkKIAorICAgIGRlZiB0ZXN0X3N0cl93cmFwKHNlbGYpOgorICAgICAgICAjIHBwcmludCB0cmllcyB0byB3cmFwIHN0cmluZ3MgaW50ZWxsaWdlbnRseQorICAgICAgICBmb3ggPSAndGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciBhIGxhenkgZG9nJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGZveCwgd2lkdGg9MjApLCAiIiJcCisndGhlIHF1aWNrIGJyb3duICcKKydmb3gganVtcGVkIG92ZXIgJworJ2EgbGF6eSBkb2cnIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHsnYSc6IDEsICdiJzogZm94LCAnYyc6IDJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPTI2KSwgIiIiXAoreydhJzogMSwKKyAnYic6ICd0aGUgcXVpY2sgYnJvd24gJworICAgICAgJ2ZveCBqdW1wZWQgb3ZlciAnCisgICAgICAnYSBsYXp5IGRvZycsCisgJ2MnOiAyfSIiIikKKyAgICAgICAgIyBXaXRoIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzCisgICAgICAgICMgLSBcbiBhbHdheXMgdHJpZ2dlcnMgYSBuZXcgbGluZSBpbiB0aGUgcHByaW50CisgICAgICAgICMgLSBcdCBhbmQgXG4gYXJlIGVzY2FwZWQKKyAgICAgICAgIyAtIG5vbi1BU0NJSSBpcyBhbGxvd2VkCisgICAgICAgICMgLSBhbiBhcG9zdHJvcGhlIGRvZXNuJ3QgZGlzcnVwdCB0aGUgcHByaW50CisgICAgICAgIHNwZWNpYWwgPSAiUG9ydG9ucyBkaXggYm9ucyBcIndoaXNreXNcIlxuw6AgbCdhdm9jYXQgZ291amF0XHQgcXVpIGZ1bWFpdCBhdSB6b28iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoc3BlY2lhbCwgd2lkdGg9MjApLCAiIiJcCisnUG9ydG9ucyBkaXggYm9ucyAnCisnIndoaXNreXMiXFxuJworIsOgIGwnYXZvY2F0ICIKKydnb3VqYXRcXHQgcXVpICcKKydmdW1haXQgYXUgem9vJyIiIikKKyAgICAgICAgIyBBbiB1bndyYXBwYWJsZSBzdHJpbmcgaXMgZm9ybWF0dGVkIGFzIGl0cyByZXByCisgICAgICAgIHVud3JhcHBhYmxlID0gIngiICogMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQodW53cmFwcGFibGUsIHdpZHRoPTgwKSwgcmVwcih1bndyYXBwYWJsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoJycpLCAiJyciKQorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHBwcmludCBpcyBhIHVzYWJsZSByZXByCisgICAgICAgIHNwZWNpYWwgKj0gMTAKKyAgICAgICAgZm9yIHdpZHRoIGluIHJhbmdlKDMsIDQwKToKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IHBwcmludC5wZm9ybWF0KHNwZWNpYWwsIHdpZHRoPXdpZHRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIoIiArIGZvcm1hdHRlZCArICIpIiksIHNwZWNpYWwpCisKKyAgICBkZWYgdGVzdF9jb21wYWN0KHNlbGYpOgorICAgICAgICBvID0gKFtsaXN0KHJhbmdlKGkgKiBpKSkgZm9yIGkgaW4gcmFuZ2UoNSldICsKKyAgICAgICAgICAgICBbbGlzdChyYW5nZShpKSkgZm9yIGkgaW4gcmFuZ2UoNildKQorICAgICAgICBleHBlY3RlZCA9ICIiIlwKK1tbXSwgWzBdLCBbMCwgMSwgMiwgM10sCisgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdLAorIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywKKyAgMTQsIDE1XSwKKyBbXSwgWzBdLCBbMCwgMV0sIFswLCAxLCAyXSwgWzAsIDEsIDIsIDNdLAorIFswLCAxLCAyLCAzLCA0XV0iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChvLCB3aWR0aD00OCwgY29tcGFjdD1UcnVlKSwgZXhwZWN0ZWQpCisKIAogY2xhc3MgRG90dGVkUHJldHR5UHJpbnRlcihwcHJpbnQuUHJldHR5UHJpbnRlcik6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkgYi9MaWIvdGVzdC90ZXN0X3ByaW50LnB5CmluZGV4IDlkNmRiZWEuLjdlZWEzNDkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcmludC5weQpAQCAtMSw2MiArMSw1NSBAQAotIiIiVGVzdCBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgcHJpbnQgZnVuY3Rpb24uCi0iIiIKLQotIyBJbiAyLjYsIHRoaXMgZ2l2ZXMgdXMgdGhlIGJlaGF2aW9yIHdlIHdhbnQuICBJbiAzLjAsIGl0IGhhcwotIyAgbm8gZnVuY3Rpb24sIGJ1dCBpdCBzdGlsbCBtdXN0IHBhcnNlIGNvcnJlY3RseS4KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KLQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAKLXRyeToKLSAgICAjIDMueAotICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyAyLngKLSAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIE5vdERlZmluZWQgPSBvYmplY3QoKQogCiAjIEEgZGlzcGF0Y2ggdGFibGUgYWxsIDggY29tYmluYXRpb25zIG9mIHByb3ZpZGluZwotIyAgc2VwLCBlbmQsIGFuZCBmaWxlCisjIHNlcCwgZW5kLCBhbmQgZmlsZS4KICMgSSB1c2UgdGhpcyBtYWNoaW5lcnkgc28gdGhhdCBJJ20gbm90IGp1c3QgcGFzc2luZyBkZWZhdWx0Ci0jICB2YWx1ZXMgdG8gcHJpbnQsIEknbSBlaXRoZXIgcGFzc2luZyBvciBub3QgcGFzc2luZyBpbiB0aGUKLSMgIGFyZ3VtZW50cworIyB2YWx1ZXMgdG8gcHJpbnQsIEknbSBlaXRoZXIgcGFzc2luZyBvciBub3QgcGFzc2luZyBpbiB0aGUKKyMgYXJndW1lbnRzLgogZGlzcGF0Y2ggPSB7CiAgICAgKEZhbHNlLCBGYWxzZSwgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KCphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludCgqYXJncyksCiAgICAgKEZhbHNlLCBGYWxzZSwgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZmlsZT1maWxlLCAqYXJncyksCiAgICAgKEZhbHNlLCBUcnVlLCAgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChlbmQ9ZW5kLCAqYXJncyksCiAgICAgKEZhbHNlLCBUcnVlLCAgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCiAgICAgKFRydWUsICBGYWxzZSwgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCAqYXJncyksCiAgICAgKFRydWUsICBGYWxzZSwgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZmlsZT1maWxlLCAqYXJncyksCiAgICAgKFRydWUsICBUcnVlLCAgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCAqYXJncyksCiAgICAgKFRydWUsICBUcnVlLCAgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCi0gICAgfQorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorfQorCiAKICMgQ2xhc3MgdXNlZCB0byB0ZXN0IF9fc3RyX18gYW5kIHByaW50CiBjbGFzcyBDbGFzc1dpdGhfX3N0cl9fOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKICAgICAgICAgc2VsZi54ID0geAorCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLngKIAotY2xhc3MgVGVzdFByaW50KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgY2hlY2soc2VsZiwgZXhwZWN0ZWQsIGFyZ3MsCi0gICAgICAgICAgICBzZXA9Tm90RGVmaW5lZCwgZW5kPU5vdERlZmluZWQsIGZpbGU9Tm90RGVmaW5lZCk6Ci0gICAgICAgICMgQ2FwdHVyZSBzeXMuc3Rkb3V0IGluIGEgU3RyaW5nSU8uICBDYWxsIHByaW50IHdpdGggYXJncywKLSAgICAgICAgIyAgYW5kIHdpdGggc2VwLCBlbmQsIGFuZCBmaWxlLCBpZiB0aGV5J3JlIGRlZmluZWQuICBSZXN1bHQKLSAgICAgICAgIyAgbXVzdCBtYXRjaCBleHBlY3RlZC4KIAotICAgICAgICAjIExvb2sgdXAgdGhlIGFjdHVhbCBmdW5jdGlvbiB0byBjYWxsLCBiYXNlZCBvbiBpZiBzZXAsIGVuZCwgYW5kIGZpbGUKLSAgICAgICAgIyAgYXJlIGRlZmluZWQKK2NsYXNzIFRlc3RQcmludCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgcHJpbnQgZnVuY3Rpb24uIiIiCisKKyAgICBkZWYgY2hlY2soc2VsZiwgZXhwZWN0ZWQsIGFyZ3MsCisgICAgICAgICAgICAgIHNlcD1Ob3REZWZpbmVkLCBlbmQ9Tm90RGVmaW5lZCwgZmlsZT1Ob3REZWZpbmVkKToKKyAgICAgICAgIyBDYXB0dXJlIHN5cy5zdGRvdXQgaW4gYSBTdHJpbmdJTy4gIENhbGwgcHJpbnQgd2l0aCBhcmdzLAorICAgICAgICAjIGFuZCB3aXRoIHNlcCwgZW5kLCBhbmQgZmlsZSwgaWYgdGhleSdyZSBkZWZpbmVkLiAgUmVzdWx0CisgICAgICAgICMgbXVzdCBtYXRjaCBleHBlY3RlZC4KKworICAgICAgICAjIExvb2sgdXAgdGhlIGFjdHVhbCBmdW5jdGlvbiB0byBjYWxsLCBiYXNlZCBvbiBpZiBzZXAsIGVuZCwKKyAgICAgICAgIyBhbmQgZmlsZSBhcmUgZGVmaW5lZC4KICAgICAgICAgZm4gPSBkaXNwYXRjaFsoc2VwIGlzIG5vdCBOb3REZWZpbmVkLAogICAgICAgICAgICAgICAgICAgICAgICBlbmQgaXMgbm90IE5vdERlZmluZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgbm90IE5vdERlZmluZWQpXQpAQCAtNjksNyArNjIsNyBAQAogICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYpOgogICAgICAgICBkZWYgeChleHBlY3RlZCwgYXJncywgc2VwPU5vdERlZmluZWQsIGVuZD1Ob3REZWZpbmVkKToKICAgICAgICAgICAgICMgUnVuIHRoZSB0ZXN0IDIgd2F5czogbm90IHVzaW5nIGZpbGUsIGFuZCB1c2luZwotICAgICAgICAgICAgIyAgZmlsZSBkaXJlY3RlZCB0byBhIFN0cmluZ0lPCisgICAgICAgICAgICAjIGZpbGUgZGlyZWN0ZWQgdG8gYSBTdHJpbmdJTy4KIAogICAgICAgICAgICAgc2VsZi5jaGVjayhleHBlY3RlZCwgYXJncywgc2VwPXNlcCwgZW5kPWVuZCkKIApAQCAtMTAxLDExICs5NCw2IEBACiAgICAgICAgIHgoJypcbicsIChDbGFzc1dpdGhfX3N0cl9fKCcqJyksKSkKICAgICAgICAgeCgnYWJjIDFcbicsIChDbGFzc1dpdGhfX3N0cl9fKCdhYmMnKSwgMSkpCiAKLSMgICAgICAgICMgMi54IHVuaWNvZGUgdGVzdHMKLSMgICAgICAgIHgodScxIDJcbicsICgnMScsIHUnMicpKQotIyAgICAgICAgeCh1J3VcMTIzNFxuJywgKHUndVwxMjM0JywpKQotIyAgICAgICAgeCh1JyAgYWJjIDFcbicsICgnICcsIENsYXNzV2l0aF9fc3RyX18odSdhYmMnKSwgMSkpCi0KICAgICAgICAgIyBlcnJvcnMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcmludCwgJycsIHNlcD0zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByaW50LCAnJywgZW5kPTMpCkBAIC0xMTMsMTIgKzEwMSwxNCBAQAogCiAgICAgZGVmIHRlc3RfcHJpbnRfZmx1c2goc2VsZik6CiAgICAgICAgICMgb3BlcmF0aW9uIG9mIHRoZSBmbHVzaCBmbGFnCi0gICAgICAgIGNsYXNzIGZpbGVsaWtlKCk6CisgICAgICAgIGNsYXNzIGZpbGVsaWtlOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdHRlbiA9ICcnCiAgICAgICAgICAgICAgICAgc2VsZi5mbHVzaGVkID0gMAorCiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgc3RyKToKICAgICAgICAgICAgICAgICBzZWxmLndyaXR0ZW4gKz0gc3RyCisKICAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgICAgICAgICBzZWxmLmZsdXNoZWQgKz0gMQogCkBAIC0xMzAsMTUgKzEyMCwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmx1c2hlZCwgMikKIAogICAgICAgICAjIGVuc3VyZSBleGNlcHRpb25zIGZyb20gZmx1c2ggYXJlIHBhc3NlZCB0aHJvdWdoCi0gICAgICAgIGNsYXNzIG5vZmx1c2goKToKKyAgICAgICAgY2xhc3Mgbm9mbHVzaDoKICAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBzdHIpOgogICAgICAgICAgICAgICAgIHBhc3MKKwogICAgICAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHByaW50LCAxLCBmaWxlPW5vZmx1c2goKSwgZmx1c2g9VHJ1ZSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQcmludCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5CmluZGV4IGNkN2VjNTguLjFmYzNjNDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkKQEAgLTMsOSArMywxMSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHBzdGF0cwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKIGZyb20gZGlmZmxpYiBpbXBvcnQgdW5pZmllZF9kaWZmCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCB1bmxpbmsKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKIAogaW1wb3J0IHByb2ZpbGUKIGZyb20gdGVzdC5wcm9maWxlZSBpbXBvcnQgdGVzdGZ1bmMsIHRpbWVyCkBAIC0xNCw5ICsxNiwxMyBAQAogY2xhc3MgUHJvZmlsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgcHJvZmlsZXJjbGFzcyA9IHByb2ZpbGUuUHJvZmlsZQorICAgIHByb2ZpbGVybW9kdWxlID0gcHJvZmlsZQogICAgIG1ldGhvZG5hbWVzID0gWydwcmludF9zdGF0cycsICdwcmludF9jYWxsZXJzJywgJ3ByaW50X2NhbGxlZXMnXQogICAgIGV4cGVjdGVkX21heF9vdXRwdXQgPSAnOjAobWF4KScKIAorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKwogICAgIGRlZiBnZXRfZXhwZWN0ZWRfb3V0cHV0KHNlbGYpOgogICAgICAgICByZXR1cm4gX1Byb2ZpbGVPdXRwdXQKIApAQCAtNzQsNiArODAsMTkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5leHBlY3RlZF9tYXhfb3V0cHV0LCByZXMsCiAgICAgICAgICAgICAgICAgIlByb2ZpbGluZyB7MCFyfSBkaWRuJ3QgcmVwb3J0IG1heDpcbnsxfSIuZm9ybWF0KHN0bXQsIHJlcykpCiAKKyAgICBkZWYgdGVzdF9ydW4oc2VsZik6CisgICAgICAgIHdpdGggc2lsZW50KCk6CisgICAgICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bigiaW50KCcxJykiKQorICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bigiaW50KCcxJykiLCBmaWxlbmFtZT1URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhURVNURk4pKQorCisgICAgZGVmIHRlc3RfcnVuY3R4KHNlbGYpOgorICAgICAgICB3aXRoIHNpbGVudCgpOgorICAgICAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW5jdHgoInRlc3RmdW5jKCkiLCBnbG9iYWxzKCksIGxvY2FscygpKQorICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bmN0eCgidGVzdGZ1bmMoKSIsIGdsb2JhbHMoKSwgbG9jYWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9VEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKKwogCiBkZWYgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQoZmlsZW5hbWUsIGNscyk6CiAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yc3RyaXAoJ2NvJykKQEAgLTk1LDYgKzExNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICBtZXRob2QsIHJlc3VsdHNbaSsxXSkpCiAgICAgICAgIGYud3JpdGUoJ1xuaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjpcbiAgICBtYWluKClcbicpCiAKK0Bjb250ZXh0bWFuYWdlcgorZGVmIHNpbGVudCgpOgorICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICB0cnk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFByb2ZpbGVUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wdHkucHkgYi9MaWIvdGVzdC90ZXN0X3B0eS5weQppbmRleCAyOTI5N2Y4Li44OTE2ODYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B0eS5weQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgICAgICAgICAgICAjI2RlYnVnKCJSZWFkaW5nIGZyb20gbWFzdGVyX2ZkIG5vdyB0aGF0IHRoZSBjaGlsZCBoYXMgZXhpdGVkIikKICAgICAgICAgICAgICMjdHJ5OgogICAgICAgICAgICAgIyMgICAgczEgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgMTAyNCkKLSAgICAgICAgICAgICMjZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgIyNleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMjICAgIHBhc3MKICAgICAgICAgICAgICMjZWxzZToKICAgICAgICAgICAgICMjICAgIHJhaXNlIFRlc3RGYWlsZWQoIlJlYWQgZnJvbSBtYXN0ZXJfZmQgZGlkIG5vdCByYWlzZSBleGNlcHRpb24iKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5CmluZGV4IGYzYzFhNmEuLjE1NGMwOGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkKQEAgLTEsNyArMSw5IEBACi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcwogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogCkBAIC0xMyw3ICsxNSw3IEBACiAgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgIHNlbGYuc291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfdGVzdC5weScpCiAgICAgICAgIHNlbGYucHljX3BhdGggPSBzZWxmLnNvdXJjZV9wYXRoICsgJ2MnCi0gICAgICAgIHNlbGYuY2FjaGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoKQorICAgICAgICBzZWxmLmNhY2hlX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoKQogICAgICAgICBzZWxmLmN3ZF9kcml2ZSA9IG9zLnBhdGguc3BsaXRkcml2ZShvcy5nZXRjd2QoKSlbMF0KICAgICAgICAgIyBJbiB0aGVzZSB0ZXN0cyB3ZSBjb21wdXRlIHJlbGF0aXZlIHBhdGhzLiAgV2hlbiB1c2luZyBXaW5kb3dzLCB0aGUKICAgICAgICAgIyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHBhdGggYW5kIHRoZSAnc2VsZi5zb3VyY2VfcGF0aCcgbWlnaHQgYmUKQEAgLTM1LDYgKzM3LDI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLnB5Y19wYXRoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLmNhY2hlX3BhdGgpKQogCisgICAgZGVmIHRlc3RfZG9fbm90X292ZXJ3cml0ZV9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgIyBJbiB0aGUgZmFjZSBvZiBhIGNmaWxlIGFyZ3VtZW50IGJlaW5nIGEgc3ltbGluaywgYmFpbCBvdXQuCisgICAgICAgICMgSXNzdWUgIzE3MjIyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc2VsZi5weWNfcGF0aCArICcuYWN0dWFsJywgc2VsZi5weWNfcGF0aCkKKyAgICAgICAgZXhjZXB0IChOb3RJbXBsZW1lbnRlZEVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25lZWQgdG8gYmUgYWJsZSB0byBjcmVhdGUgYSBzeW1saW5rIGZvciBhIGZpbGUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNsaW5rKHNlbGYucHljX3BhdGgpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYucHljX3BhdGgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5kZXZudWxsKSBvciBvcy5wYXRoLmlzZmlsZShvcy5kZXZudWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBvcy5kZXZudWxsIGFuZCBmb3IgaXQgdG8gYmUgYSBub24tcmVndWxhciBmaWxlJykKKyAgICBkZWYgdGVzdF9kb19ub3Rfb3ZlcndyaXRlX25vbnJlZ3VsYXJfZmlsZXMoc2VsZik6CisgICAgICAgICMgSW4gdGhlIGZhY2Ugb2YgYSBjZmlsZSBhcmd1bWVudCBiZWluZyBhIG5vbi1yZWd1bGFyIGZpbGUsIGJhaWwgb3V0LgorICAgICAgICAjIElzc3VlICMxNzIyMgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCwgb3MuZGV2bnVsbCkKKwogICAgIGRlZiB0ZXN0X2NhY2hlX3BhdGgoc2VsZik6CiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKQEAgLTU0LDggKzc2LDIyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLnB5Y19wYXRoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLmNhY2hlX3BhdGgpKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUHlDb21waWxlVGVzdHMpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKG9zLCAnZ2V0ZXVpZCcpIGFuZCBvcy5nZXRldWlkKCkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICdub24tcm9vdCB1c2VyIHJlcXVpcmVkJykKKyAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywKKyAgICAgICAgICAgICAgICAgICAgICdjYW5ub3QgY29udHJvbCBkaXJlY3RvcnkgcGVybWlzc2lvbnMgb24gV2luZG93cycpCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uc19wcm9wYWdhdGUoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgZXhjZXB0aW9ucyByYWlzZWQgdGhhbmtzIHRvIGlzc3VlcyB3aXRoIHdyaXRpbmcKKyAgICAgICAgIyBieXRlY29kZS4KKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTcyNDQKKyAgICAgICAgbW9kZSA9IG9zLnN0YXQoc2VsZi5kaXJlY3RvcnkpCisgICAgICAgIG9zLmNobW9kKHNlbGYuZGlyZWN0b3J5LCBzdGF0LlNfSVJFQUQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYucHljX3BhdGgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaG1vZChzZWxmLmRpcmVjdG9yeSwgbW9kZS5zdF9tb2RlKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5IGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKaW5kZXggZTgzOTg5ZS4uODhhZmY4OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdweWNsYnInKQogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdhc3QnKQogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdkb2N0ZXN0JywgaWdub3JlPSgiVGVzdFJlc3VsdHMiLCAiX1Nwb29mT3V0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRvY1Rlc3RDYXNlIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEb2NUZXN0Q2FzZSIsICdfRG9jVGVzdFN1aXRlJykpCiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2RpZmZsaWInLCBpZ25vcmU9KCJNYXRjaCIsKSkKIAogICAgIGRlZiB0ZXN0X2RlY29yYXRvcnMoc2VsZik6CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgY20oJ3JhbmRvbScsIGlnbm9yZT0oJ1JhbmRvbScsKSkgICMgZnJvbSBfcmFuZG9tIGltcG9ydCBSYW5kb20gYXMgQ29yZUdlbmVyYXRvcgogICAgICAgICBjbSgnY2dpJywgaWdub3JlPSgnbG9nJywpKSAgICAgICMgc2V0IHdpdGggPSBpbiBtb2R1bGUKICAgICAgICAgY20oJ3BpY2tsZScpCi0gICAgICAgIGNtKCdhaWZjJywgaWdub3JlPSgnb3BlbmZwJywpKSAgIyBzZXQgd2l0aCA9IGluIG1vZHVsZQorICAgICAgICBjbSgnYWlmYycsIGlnbm9yZT0oJ29wZW5mcCcsICdfYWlmY19wYXJhbXMnKSkgICMgc2V0IHdpdGggPSBpbiBtb2R1bGUKICAgICAgICAgY20oJ3NyZV9wYXJzZScsIGlnbm9yZT0oJ2R1bXAnLCkpICMgZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqCiAgICAgICAgIGNtKCdwZGInKQogICAgICAgICBjbSgncHlkb2MnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weSBiL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKaW5kZXggNDNmNDE2My4uMTA1MTE2YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CkBAIC0xMSw2ICsxMSw3IEBACiBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgdGVzdC5zdXBwb3J0CiBpbXBvcnQgdGltZQoraW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB4bWwuZXRyZWUKIGltcG9ydCB0ZXh0d3JhcApAQCAtMjAsNyArMjEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0ICgKICAgICBURVNURk4sIHJtdHJlZSwKICAgICByZWFwX2NoaWxkcmVuLCByZWFwX3RocmVhZHMsIGNhcHR1cmVkX291dHB1dCwgY2FwdHVyZWRfc3Rkb3V0LAotICAgIGNhcHR1cmVkX3N0ZGVyciwgdW5saW5rCisgICAgY2FwdHVyZWRfc3RkZXJyLCB1bmxpbmssIHJlcXVpcmVzX2RvY3N0cmluZ3MKICkKIGZyb20gdGVzdCBpbXBvcnQgcHlkb2NfbW9kCiAKQEAgLTI5LDEwICszMCw2IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogCi0jIEp1c3QgaW4gY2FzZSBzeXMubW9kdWxlc1sidGVzdCJdIGhhcyB0aGUgb3B0aW9uYWwgYXR0cmlidXRlIF9fbG9hZGVyX18uCi1pZiBoYXNhdHRyKHB5ZG9jX21vZCwgIl9fbG9hZGVyX18iKToKLSAgICBkZWwgcHlkb2NfbW9kLl9fbG9hZGVyX18KLQogaWYgdGVzdC5zdXBwb3J0LkhBVkVfRE9DU1RSSU5HUzoKICAgICBleHBlY3RlZF9kYXRhX2RvY3N0cmluZ3MgPSAoCiAgICAgICAgICdkaWN0aW9uYXJ5IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMgKGlmIGRlZmluZWQpJywKQEAgLTIxMiw2ICsyMDksNzUgQEAKICMgb3V0cHV0IHBhdHRlcm4gZm9yIG1vZHVsZSB3aXRoIGJhZCBpbXBvcnRzCiBiYWRpbXBvcnRfcGF0dGVybiA9ICJwcm9ibGVtIGluICVzIC0gSW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCAlciIKIAorZXhwZWN0ZWRfZHluYW1pY2F0dHJpYnV0ZV9wYXR0ZXJuID0gIiIiCitIZWxwIG9uIGNsYXNzIERBIGluIG1vZHVsZSAlczoKKworY2xhc3MgREEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgZGVzY3JpcHRvcnMgZGVmaW5lZCBoZXJlOgorIHxceDIwXHgyMAorIHwgIF9fZGljdF9fJXMKKyB8XHgyMFx4MjAKKyB8ICBfX3dlYWtyZWZfXyVzCisgfFx4MjBceDIwCisgfCAgaGFtCisgfFx4MjBceDIwCisgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YToKKyB8XHgyMFx4MjAKKyB8ICBoYW0gPSAnc3BhbScKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjEgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ2xhc3MgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzcyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhOgorIHxceDIwXHgyMAorIHwgIExJRkUgPSA0MgorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMiA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczEgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMyA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczIgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczIoQ2xhc3MxKQorIHwgIE1ldGhvZCByZXNvbHV0aW9uIG9yZGVyOgorIHwgICAgICBDbGFzczIKKyB8ICAgICAgQ2xhc3MxCisgfCAgICAgIGJ1aWx0aW5zLm9iamVjdAorIHxceDIwXHgyMAorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEzOgorIHxceDIwXHgyMAorIHwgIHRocmVlID0gMworIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEyOgorIHxceDIwXHgyMAorIHwgIHR3byA9IDIKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX21pc3NpbmdhdHRyaWJ1dGVfcGF0dGVybiA9ICIiIgorSGVscCBvbiBjbGFzcyBDIGluIG1vZHVsZSAlczoKKworY2xhc3MgQyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6CisgfFx4MjBceDIwCisgfCAgaGVyZSA9ICdwcmVzZW50IScKKyIiIi5zdHJpcCgpCisKIGRlZiBydW5fcHlkb2MobW9kdWxlX25hbWUsICphcmdzLCAqKmVudik6CiAgICAgIiIiCiAgICAgUnVucyBweWRvYyBvbiB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gUmV0dXJucyB0aGUgc3RyaXBwZWQKQEAgLTQyMSw2ICs0ODcsMzggQEAKICAgICAgICAgICAgIHN5bm9wc2lzID0gcHlkb2Muc3lub3BzaXMoVEVTVEZOLCB7fSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lub3BzaXMsICdsaW5lIDE6IGhceGU5JykKIAorICAgIGRlZiB0ZXN0X3N5bm9wc2lzX3NvdXJjZWxlc3Moc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gb3MuX19kb2NfXy5zcGxpdGxpbmVzKClbMF0KKyAgICAgICAgZmlsZW5hbWUgPSBvcy5fX2NhY2hlZF9fCisgICAgICAgIHN5bm9wc2lzID0gcHlkb2Muc3lub3BzaXMoZmlsZW5hbWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeW5vcHNpcywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zcGxpdGRvY193aXRoX2Rlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICBleGFtcGxlX3N0cmluZyA9ICJJIEFtIEEgRG9jXG5cblxuSGVyZSBpcyBteSBkZXNjcmlwdGlvbiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweWRvYy5zcGxpdGRvYyhleGFtcGxlX3N0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdJIEFtIEEgRG9jJywgJ1xuSGVyZSBpcyBteSBkZXNjcmlwdGlvbicpKQorCisgICAgZGVmIHRlc3RfaXNfb2JqZWN0X29yX21ldGhvZChzZWxmKToKKyAgICAgICAgZG9jID0gcHlkb2MuRG9jKCkKKyAgICAgICAgIyBCb3VuZCBNZXRob2QKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB5ZG9jLl9pc19zb21lX21ldGhvZChkb2MuZmFpbCkpCisgICAgICAgICMgTWV0aG9kIERlc2NyaXB0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB5ZG9jLl9pc19zb21lX21ldGhvZChpbnQuX19hZGRfXykpCisgICAgICAgICMgU3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHlkb2MuX2lzX3NvbWVfbWV0aG9kKCJJIGFtIG5vdCBhIG1ldGhvZCIpKQorCisgICAgZGVmIHRlc3RfaXNfcGFja2FnZV93aGVuX25vdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC50ZW1wX2N3ZCgpIGFzIHRlc3RfZGlyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShweWRvYy5pc3BhY2thZ2UodGVzdF9kaXIpKQorCisgICAgZGVmIHRlc3RfaXNfcGFja2FnZV93aGVuX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfY3dkKCkgYXMgdGVzdF9kaXI6CisgICAgICAgICAgICBpbml0X3BhdGggPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICdfX2luaXRfXy5weScpCisgICAgICAgICAgICBvcGVuKGluaXRfcGF0aCwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHlkb2MuaXNwYWNrYWdlKHRlc3RfZGlyKSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShpbml0X3BhdGgpCisKICAgICBkZWYgdGVzdF9hbGxtZXRob2RzKHNlbGYpOgogICAgICAgICAjIGlzc3VlIDE3NDc2OiBhbGxtZXRob2RzIHdhcyBubyBsb25nZXIgcmV0dXJuaW5nIHVuYm91bmQgbWV0aG9kcy4KICAgICAgICAgIyBUaGlzIHRlc3QgaXMgYSBiaXQgZnJhZ2lsZSBpbiB0aGUgZmFjZSBvZiBjaGFuZ2VzIHRvIG9iamVjdCBhbmQgdHlwZSwKQEAgLTUwOSw2ICs2MDcsNTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKSwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmdldHZhbHVlKCksICcnKQogCisgICAgZGVmIHRlc3RfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgIyBTZWUgSGVscGVyLmxpc3Rtb2R1bGVzKCkuCisgICAgICAgIG51bV9oZWFkZXJfbGluZXMgPSAyCisgICAgICAgIG51bV9tb2R1bGVfbGluZXNfbWluID0gNSAgIyBQbGF5aW5nIGl0IHNhZmUuCisgICAgICAgIG51bV9mb290ZXJfbGluZXMgPSAzCisgICAgICAgIGV4cGVjdGVkID0gbnVtX2hlYWRlcl9saW5lcyArIG51bV9tb2R1bGVfbGluZXNfbWluICsgbnVtX2Zvb3Rlcl9saW5lcworCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcignbW9kdWxlcycpCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgbnVtX2xpbmVzID0gbGVuKHJlc3VsdC5zcGxpdGxpbmVzKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobnVtX2xpbmVzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X21vZHVsZXNfc2VhcmNoKHNlbGYpOgorICAgICAgICAjIFNlZSBIZWxwZXIubGlzdG1vZHVsZXMoKS4KKyAgICAgICAgZXhwZWN0ZWQgPSAncHlkb2MgLSAnCisKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBoZWxwX2lvOgorICAgICAgICAgICAgaGVscGVyKCdtb2R1bGVzIHB5ZG9jJykKKyAgICAgICAgcmVzdWx0ID0gaGVscF9pby5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgcmVzdWx0KQorCisgICAgQHVuaXR0ZXN0LnNraXAoJ3NvbWUgYnVpbGRib3RzIGFyZSBub3QgY29vcGVyYXRpbmcgKCMyMDEyMyknKQorICAgIGRlZiB0ZXN0X21vZHVsZXNfc2VhcmNoX2J1aWx0aW4oc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ2djIC0gJworCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgaGVscF9pbzoKKyAgICAgICAgICAgIGhlbHBlcignbW9kdWxlcyBnYXJiYWdlJykKKyAgICAgICAgcmVzdWx0ID0gaGVscF9pby5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zdGFydHN3aXRoKGV4cGVjdGVkKSkKKworICAgIGRlZiB0ZXN0X2ltcG9ydGZpbGUoc2VsZik6CisgICAgICAgIGxvYWRlZF9weWRvYyA9IHB5ZG9jLmltcG9ydGZpbGUocHlkb2MuX19maWxlX18pCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChsb2FkZWRfcHlkb2MsIHB5ZG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZF9weWRvYy5fX25hbWVfXywgJ3B5ZG9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWRfcHlkb2MuX19maWxlX18sIHB5ZG9jLl9fZmlsZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZF9weWRvYy5fX3NwZWNfXywgcHlkb2MuX19zcGVjX18pCisKIAogY2xhc3MgVGVzdERlc2NyaXB0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTU0NCw2ICs2ODksMTMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHB5ZG9jLmxvY2F0ZShuYW1lKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBweWRvYy5yZW5kZXJfZG9jLCBuYW1lKQogCisgICAgQHJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9idWlsdGluX3NpZ25hdHVyZXMoc2VsZik6CisgICAgICAgICMgdGVzdCBwcm9kdWNpbmcgc2lnbmF0dXJlcyBmcm9tIGJ1aWx0aW5zCisgICAgICAgIHN0YXRfc2lnID0gcHlkb2MucmVuZGVyX2RvYyhvcy5zdGF0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLnBsYWluKHN0YXRfc2lnKS5zcGxpdGxpbmVzKClbMl0sCisgICAgICAgICAgICAnc3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpJykKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgUHlkb2NTZXJ2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTYxNSw2ICs3NjcsMTI4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHB5ZG9jLkhlbHBlci5rZXl3b3JkcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkKGtleXdvcmQua3dsaXN0KSkKIAorY2xhc3MgUHlkb2NXaXRoTWV0YUNsYXNzZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihzeXMsICdnZXR0cmFjZScpIGFuZCBzeXMuZ2V0dHJhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICd0cmFjZSBmdW5jdGlvbiBpbnRyb2R1Y2VzIF9fbG9jYWxzX18gdW5leHBlY3RlZGx5JykKKyAgICBkZWYgdGVzdF9EeW5hbWljQ2xhc3NBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnaGFtJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzcGFtJworICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIERBKG1ldGFjbGFzcz1NZXRhKToKKyAgICAgICAgICAgIEB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiBoYW0oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdlZ2dzJworICAgICAgICBleHBlY3RlZF90ZXh0X2RhdGFfZG9jc3RyaW5ncyA9IHR1cGxlKCdcbiB8ICAgICAgJyArIHMgaWYgcyBlbHNlICcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzIGluIGV4cGVjdGVkX2RhdGFfZG9jc3RyaW5ncykKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKERBKQorICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfZHluYW1pY2F0dHJpYnV0ZV9wYXR0ZXJuICUgKAorICAgICAgICAgICAgICAgIChfX25hbWVfXywpICsgZXhwZWN0ZWRfdGV4dF9kYXRhX2RvY3N0cmluZ3NbOjJdKQorICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJlc3VsdCAhPSBleHBlY3RlZF90ZXh0OgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihzeXMsICdnZXR0cmFjZScpIGFuZCBzeXMuZ2V0dHJhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICd0cmFjZSBmdW5jdGlvbiBpbnRyb2R1Y2VzIF9fbG9jYWxzX18gdW5leHBlY3RlZGx5JykKKyAgICBkZWYgdGVzdF92aXJ0dWFsQ2xhc3NBdHRyaWJ1dGVXaXRoT25lTWV0YShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAnTElGRSddCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSdMSUZFJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyKG5hbWUpCisgICAgICAgIGNsYXNzIENsYXNzKG1ldGFjbGFzcz1NZXRhKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKENsYXNzKQorICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMSAlIF9fbmFtZV9fCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X3ZpcnR1YWxDbGFzc0F0dHJpYnV0ZVdpdGhUd29NZXRhKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhMSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAnb25lJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J29uZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTIodHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ3R3byddCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSd0d28nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIE1ldGEzKE1ldGExLCBNZXRhMik6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KHNvcnRlZChzZXQoCisgICAgICAgICAgICAgICAgICAgIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndGhyZWUnXSArCisgICAgICAgICAgICAgICAgICAgIE1ldGExLl9fZGlyX18oY2xzKSArIE1ldGEyLl9fZGlyX18oY2xzKSkpKQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0ndGhyZWUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMworICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIENsYXNzMShtZXRhY2xhc3M9TWV0YTEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDbGFzczIoQ2xhc3MxLCBtZXRhY2xhc3M9TWV0YTMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmYWlsMSA9IGZhaWwyID0gRmFsc2UKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKENsYXNzMSkKKyAgICAgICAgZXhwZWN0ZWRfdGV4dDEgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4yICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0MSA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0MSAhPSBleHBlY3RlZF90ZXh0MToKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQxLCByZXN1bHQxKQorICAgICAgICAgICAgZmFpbDEgPSBUcnVlCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihDbGFzczIpCisgICAgICAgIGV4cGVjdGVkX3RleHQyID0gZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMyAlIF9fbmFtZV9fCisgICAgICAgIHJlc3VsdDIgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJlc3VsdDIgIT0gZXhwZWN0ZWRfdGV4dDI6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0MiwgcmVzdWx0MikKKyAgICAgICAgICAgIGZhaWwyID0gVHJ1ZQorICAgICAgICBpZiBmYWlsMSBvciBmYWlsMjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIoc3lzLCAnZ2V0dHJhY2UnKSBhbmQgc3lzLmdldHRyYWNlKCksCisgICAgICAgICAgICAgICAgICAgICAndHJhY2UgZnVuY3Rpb24gaW50cm9kdWNlcyBfX2xvY2Fsc19fIHVuZXhwZWN0ZWRseScpCisgICAgZGVmIHRlc3RfYnVnZ3lfZGlyKHNlbGYpOgorICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19uYW1lX18nLCAnbWlzc2luZycsICdoZXJlJ10KKyAgICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBoZXJlID0gJ3ByZXNlbnQhJworICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQykKKyAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX21pc3NpbmdhdHRyaWJ1dGVfcGF0dGVybiAlIF9fbmFtZV9fCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisKIEByZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICB0cnk6CkBAIC02MjQsNiArODk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeWRvY1NlcnZlclRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlkb2NVcmxIYW5kbGVyVGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0SGVscGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5ZG9jV2l0aE1ldGFDbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICBmaW5hbGx5OgogICAgICAgICByZWFwX2NoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZG9tLnB5IGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKaW5kZXggYTQ3NTIwNy4uMzdhMjIyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKQEAgLTEsOCArMSwxMCBAQAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jawogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHRpbWUKIGltcG9ydCBwaWNrbGUKIGltcG9ydCB3YXJuaW5ncworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKIGZyb20gbWF0aCBpbXBvcnQgbG9nLCBleHAsIHBpLCBmc3VtLCBzaW4KIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCkBAIC00NCw2ICs0Niw0OCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNlZWQsIDEsIDIsIDMsIDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHlwZShzZWxmLmdlbiksIFtdKQogCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5fdXJhbmRvbScpICMgb3MudXJhbmRvbQorICAgIGRlZiB0ZXN0X3NlZWRfd2hlbl9yYW5kb21uZXNzX3NvdXJjZV9ub3RfZm91bmQoc2VsZiwgdXJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBSYW5kb20uc2VlZCgpIHVzZXMgdGltZS50aW1lKCkgd2hlbiBhbiBvcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljCisgICAgICAgICMgcmFuZG9tbmVzcyBzb3VyY2UgaXMgbm90IGZvdW5kLiBUbyB0ZXN0IHRoaXMgb24gbWFjaGluZXMgd2VyZSBpdAorICAgICAgICAjIGV4aXN0cywgcnVuIHRoZSBhYm92ZSB0ZXN0LCB0ZXN0X3NlZWRhcmdzKCksIGFnYWluIGFmdGVyIG1vY2tpbmcKKyAgICAgICAgIyBvcy51cmFuZG9tKCkgc28gdGhhdCBpdCByYWlzZXMgdGhlIGV4Y2VwdGlvbiBleHBlY3RlZCB3aGVuIHRoZQorICAgICAgICAjIHJhbmRvbW5lc3Mgc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCisgICAgICAgIHVyYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgc2VsZi50ZXN0X3NlZWRhcmdzKCkKKworICAgIGRlZiB0ZXN0X3NodWZmbGUoc2VsZik6CisgICAgICAgIHNodWZmbGUgPSBzZWxmLmdlbi5zaHVmZmxlCisgICAgICAgIGxzdCA9IFtdCisgICAgICAgIHNodWZmbGUobHN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgW10pCisgICAgICAgIGxzdCA9IFszN10KKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbMzddKQorICAgICAgICBzZXFzID0gW2xpc3QocmFuZ2UobikpIGZvciBuIGluIHJhbmdlKDEwKV0KKyAgICAgICAgc2h1ZmZsZWRfc2VxcyA9IFtsaXN0KHJhbmdlKG4pKSBmb3IgbiBpbiByYW5nZSgxMCldCisgICAgICAgIGZvciBzaHVmZmxlZF9zZXEgaW4gc2h1ZmZsZWRfc2VxczoKKyAgICAgICAgICAgIHNodWZmbGUoc2h1ZmZsZWRfc2VxKQorICAgICAgICBmb3IgKHNlcSwgc2h1ZmZsZWRfc2VxKSBpbiB6aXAoc2Vxcywgc2h1ZmZsZWRfc2Vxcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCBsZW4oc2h1ZmZsZWRfc2VxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlcSksIHNldChzaHVmZmxlZF9zZXEpKQorICAgICAgICAjIFRoZSBhYm92ZSB0ZXN0cyBhbGwgd291bGQgcGFzcyBpZiB0aGUgc2h1ZmZsZSB3YXMgYQorICAgICAgICAjIG5vLW9wLiBUaGUgZm9sbG93aW5nIG5vbi1kZXRlcm1pbmlzdGljIHRlc3QgY292ZXJzIHRoYXQuICBJdAorICAgICAgICAjIGFzc2VydHMgdGhhdCB0aGUgc2h1ZmZsZWQgc2VxdWVuY2Ugb2YgMTAwMCBkaXN0aW5jdCBlbGVtZW50cworICAgICAgICAjIG11c3QgYmUgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIG9uZS4gQWx0aG91Z2ggdGhlcmUgaXMKKyAgICAgICAgIyBtYXRoZW1hdGljYWxseSBhIG5vbi16ZXJvIHByb2JhYmlsaXR5IHRoYXQgdGhpcyBjb3VsZAorICAgICAgICAjIGFjdHVhbGx5IGhhcHBlbiBpbiBhIGdlbnVpbmVseSByYW5kb20gc2h1ZmZsZSwgaXQgaXMKKyAgICAgICAgIyBjb21wbGV0ZWx5IG5lZ2xpZ2libGUsIGdpdmVuIHRoYXQgdGhlIG51bWJlciBvZiBwb3NzaWJsZQorICAgICAgICAjIHBlcm11dGF0aW9ucyBvZiAxMDAwIG9iamVjdHMgaXMgMTAwMCEgKGZhY3RvcmlhbCBvZiAxMDAwKSwKKyAgICAgICAgIyB3aGljaCBpcyBjb25zaWRlcmFibHkgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBhdG9tcyBpbiB0aGUKKyAgICAgICAgIyB1bml2ZXJzZS4uLgorICAgICAgICBsc3QgPSBsaXN0KHJhbmdlKDEwMDApKQorICAgICAgICBzaHVmZmxlZF9sc3QgPSBsaXN0KHJhbmdlKDEwMDApKQorICAgICAgICBzaHVmZmxlKHNodWZmbGVkX2xzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzdCAhPSBzaHVmZmxlZF9sc3QpCisgICAgICAgIHNodWZmbGUobHN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHN0ICE9IHNodWZmbGVkX2xzdCkKKwogICAgIGRlZiB0ZXN0X2Nob2ljZShzZWxmKToKICAgICAgICAgY2hvaWNlID0gc2VsZi5nZW4uY2hvaWNlCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CkBAIC02Myw2ICsxMDcsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odW5pcSksIGspCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pcSA8PSBzZXQocG9wdWxhdGlvbikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZW4uc2FtcGxlKFtdLCAwKSwgW10pICAjIHRlc3QgZWRnZSBjYXNlIE49PWs9PTAKKyAgICAgICAgIyBFeGNlcHRpb24gcmFpc2VkIGlmIHNpemUgb2Ygc2FtcGxlIGV4Y2VlZHMgdGhhdCBvZiBwb3B1bGF0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZ2VuLnNhbXBsZSwgcG9wdWxhdGlvbiwgTisxKQogCiAgICAgZGVmIHRlc3Rfc2FtcGxlX2Rpc3RyaWJ1dGlvbihzZWxmKToKICAgICAgICAgIyBGb3IgdGhlIGVudGlyZSBhbGxvd2FibGUgcmFuZ2Ugb2YgMCA8PSBrIDw9IE4sIHZhbGlkYXRlIHRoYXQKQEAgLTIwMyw2ICsyNDksMjUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHJhbmdlKHN0YXJ0LHN0b3ApKSwKICAgICAgICAgICAgICAgICBzZXQoW3NlbGYuZ2VuLnJhbmRyYW5nZShzdGFydCxzdG9wKSBmb3IgaSBpbiByYW5nZSgxMDApXSkpCiAKKyAgICBkZWYgdGVzdF9yYW5kcmFuZ2Vfbm9udW5pdF9zdGVwKHNlbGYpOgorICAgICAgICByaW50ID0gc2VsZi5nZW4ucmFuZHJhbmdlKDAsIDEwLCAyKQorICAgICAgICBzZWxmLmFzc2VydEluKHJpbnQsICgwLCAyLCA0LCA2LCA4KSkKKyAgICAgICAgcmludCA9IHNlbGYuZ2VuLnJhbmRyYW5nZSgwLCAyLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJpbnQsIDApCisKKyAgICBkZWYgdGVzdF9yYW5kcmFuZ2VfZXJyb3JzKHNlbGYpOgorICAgICAgICByYWlzZXMgPSBwYXJ0aWFsKHNlbGYuYXNzZXJ0UmFpc2VzLCBWYWx1ZUVycm9yLCBzZWxmLmdlbi5yYW5kcmFuZ2UpCisgICAgICAgICMgRW1wdHkgcmFuZ2UKKyAgICAgICAgcmFpc2VzKDMsIDMpCisgICAgICAgIHJhaXNlcygtNzIxKQorICAgICAgICByYWlzZXMoMCwgMTAwLCAtMTIpCisgICAgICAgICMgTm9uLWludGVnZXIgc3RhcnQvc3RvcAorICAgICAgICByYWlzZXMoMy4xNDE1OSkKKyAgICAgICAgcmFpc2VzKDAsIDIuNzE4MjgpCisgICAgICAgICMgWmVybyBhbmQgbm9uLWludGVnZXIgc3RlcAorICAgICAgICByYWlzZXMoMCwgNDIsIDApCisgICAgICAgIHJhaXNlcygwLCA0MiwgMy4xNDE1OSkKKwogICAgIGRlZiB0ZXN0X2dlbnJhbmRiaXRzKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSByYW5nZXMKICAgICAgICAgZm9yIGsgaW4gcmFuZ2UoMSwgMTAwMCk6CkBAIC0yNzIsNiArMzM3LDE2IEBACiAgICAgICAgICMgTGFzdCBlbGVtZW50IHMvYiBhbiBpbnQgYWxzbwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNldHN0YXRlLCAoMiwgKDAsKSo2MjQrKCdhJywpLCBOb25lKSkKIAorICAgICAgICAjIExpdHRsZSB0cmljayB0byBtYWtlICJ0dXBsZSh4ICUgKDIqKjMyKSBmb3IgeCBpbiBpbnRlcm5hbHN0YXRlKSIKKyAgICAgICAgIyByYWlzZSBWYWx1ZUVycm9yLiBJIGNhbm5vdCB0aGluayBvZiBhIHNpbXBsZSB3YXkgdG8gYWNoaWV2ZSB0aGlzLCBzbworICAgICAgICAjIEkgYW0gb3B0aW5nIGZvciB1c2luZyBhIGdlbmVyYXRvciBhcyB0aGUgbWlkZGxlIGFyZ3VtZW50IG9mIHNldHN0YXRlCisgICAgICAgICMgd2hpY2ggYXR0ZW1wdHMgdG8gY2FzdCBhIE5hTiB0byBpbnRlZ2VyLgorICAgICAgICBzdGF0ZV92YWx1ZXMgPSBzZWxmLmdlbi5nZXRzdGF0ZSgpWzFdCisgICAgICAgIHN0YXRlX3ZhbHVlcyA9IGxpc3Qoc3RhdGVfdmFsdWVzKQorICAgICAgICBzdGF0ZV92YWx1ZXNbLTFdID0gZmxvYXQoJ25hbicpCisgICAgICAgIHN0YXRlID0gKGludCh4KSBmb3IgeCBpbiBzdGF0ZV92YWx1ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2V0c3RhdGUsICgyLCBzdGF0ZSwgTm9uZSkpCisKICAgICBkZWYgdGVzdF9yZWZlcmVuY2VJbXBsZW1lbnRhdGlvbihzZWxmKToKICAgICAgICAgIyBDb21wYXJlIHRoZSBweXRob24gaW1wbGVtZW50YXRpb24gd2l0aCByZXN1bHRzIGZyb20gdGhlIG9yaWdpbmFsCiAgICAgICAgICMgY29kZS4gIENyZWF0ZSAyMDAwIDUzLWJpdCBwcmVjaXNpb24gcmFuZG9tIGZsb2F0cy4gIENvbXBhcmUgb25seQpAQCAtNDExLDYgKzQ4NiwzOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBudW1iaXRzKSAgICAgICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTEpKSAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCiAKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmFuZG9tLlJhbmRvbS5yYW5kb20nKQorICAgIGRlZiB0ZXN0X3JhbmRiZWxvd19vdmVycmlkZW5fcmFuZG9tKHNlbGYsIHJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBSYW5kb20uX3JhbmRiZWxvdygpIGNhbiBvbmx5IHVzZSByYW5kb20oKSB3aGVuIHRoZSBidWlsdC1pbiBvbmUKKyAgICAgICAgIyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ1dCBubyBuZXcgZ2V0cmFuZGJpdHMoKSBtZXRob2Qgd2FzIHN1cHBsaWVkLgorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IHJhbmRvbS5TeXN0ZW1SYW5kb20oKS5yYW5kb20KKyAgICAgICAgbWF4c2l6ZSA9IDE8PHJhbmRvbS5CUEYKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBVc2VyV2FybmluZykKKyAgICAgICAgICAgICMgUG9wdWxhdGlvbiByYW5nZSB0b28gbGFyZ2UgKG4gPj0gbWF4c2l6ZSkKKyAgICAgICAgICAgIHNlbGYuZ2VuLl9yYW5kYmVsb3cobWF4c2l6ZSsxLCBtYXhzaXplID0gbWF4c2l6ZSkKKyAgICAgICAgc2VsZi5nZW4uX3JhbmRiZWxvdyg1NjQwLCBtYXhzaXplID0gbWF4c2l6ZSkKKworICAgICAgICAjIFRoaXMgbWlnaHQgYmUgZ29pbmcgdG9vIGZhciB0byB0ZXN0IGEgc2luZ2xlIGxpbmUsIGJ1dCBiZWNhdXNlIG9mIG91cgorICAgICAgICAjIG5vYmxlIGFpbSBvZiBhY2hpZXZpbmcgMTAwJSB0ZXN0IGNvdmVyYWdlIHdlIG5lZWQgdG8gd3JpdGUgYSBjYXNlIGluCisgICAgICAgICMgd2hpY2ggdGhlIGZvbGxvd2luZyBsaW5lIGluIFJhbmRvbS5fcmFuZGJlbG93KCkgZ2V0cyBleGVjdXRlZDoKKyAgICAgICAgIworICAgICAgICAjIHJlbSA9IG1heHNpemUgJSBuCisgICAgICAgICMgbGltaXQgPSAobWF4c2l6ZSAtIHJlbSkgLyBtYXhzaXplCisgICAgICAgICMgciA9IHJhbmRvbSgpCisgICAgICAgICMgd2hpbGUgciA+PSBsaW1pdDoKKyAgICAgICAgIyAgICAgciA9IHJhbmRvbSgpICMgPD09ICpUaGlzIGxpbmUqIDw9PTwKKyAgICAgICAgIworICAgICAgICAjIFRoZXJlZm9yZSwgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHdoaWxlIGxvb3AgaXMgZXhlY3V0ZWQgYXQgbGVhc3QKKyAgICAgICAgIyBvbmNlLCB3ZSBuZWVkIHRvIG1vY2sgcmFuZG9tKCkgc28gdGhhdCBpdCByZXR1cm5zIGEgbnVtYmVyIGdyZWF0ZXIKKyAgICAgICAgIyB0aGFuICdsaW1pdCcgdGhlIGZpcnN0IHRpbWUgaXQgZ2V0cyBjYWxsZWQuCisKKyAgICAgICAgbiA9IDQyCisgICAgICAgIGVwc2lsb24gPSAwLjAxCisgICAgICAgIGxpbWl0ID0gKG1heHNpemUgLSAobWF4c2l6ZSAlIG4pKSAvIG1heHNpemUKKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbbGltaXQgKyBlcHNpbG9uLCBsaW1pdCAtIGVwc2lsb25dCisgICAgICAgIHNlbGYuZ2VuLl9yYW5kYmVsb3cobiwgbWF4c2l6ZSA9IG1heHNpemUpCisKICAgICBkZWYgdGVzdF9yYW5kcmFuZ2VfYnVnXzE1OTA4OTEoc2VsZik6CiAgICAgICAgIHN0YXJ0ID0gMTAwMDAwMDAwMDAwMAogICAgICAgICBzdG9wID0gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMApAQCAtNTI4LDYgKzYzNSwxMDYgQEAKICAgICAgICAgcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSgwLCAxZTE1KQogICAgICAgICByYW5kb20udm9ubWlzZXN2YXJpYXRlKDAsIDFlMTAwKQogCisgICAgZGVmIHRlc3RfZ2FtbWF2YXJpYXRlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBCb3RoIGFscGhhIGFuZCBiZXRhIG11c3QgYmUgPiAwLjAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDAsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDEsIC0zKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5SYW5kb20ucmFuZG9tJykKKyAgICBkZWYgdGVzdF9nYW1tYXZhcmlhdGVfZnVsbF9jb2RlX2NvdmVyYWdlKHNlbGYsIHJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHBvc3NpYmlsaXRpZXMgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyBvZiByYW5kb20uZ2FtbWF2YXJpYXRlKCksIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgJ2FscGhhJy4gV2hhdCB3ZQorICAgICAgICAjIGFyZSBnb2luZyB0byBkbyBoZXJlIGlzIHRvIGZpeCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHJhbmRvbSgpIHRvCisgICAgICAgICMgZ2VuZXJhdGUgdGVzdCBjYXNlcyB0aGF0IHByb3ZpZGUgMTAwJSBsaW5lIGNvdmVyYWdlIG9mIHRoZSBtZXRob2QuCisKKyAgICAgICAgIyAjMTogYWxwaGEgPiAxLjA6IHdlIHdhbnQgdGhlIGZpcnN0IHJhbmRvbSBudW1iZXIgdG8gYmUgb3V0c2lkZSB0aGUKKyAgICAgICAgIyBbMWUtNywgLjk5OTk5OTldIHJhbmdlLCBzbyB0aGF0IHRoZSBjb250aW51ZSBzdGF0ZW1lbnQgZXhlY3V0ZXMKKyAgICAgICAgIyBvbmNlLiBUaGUgdmFsdWVzIG9mIHUxIGFuZCB1MiB3aWxsIGJlIDAuNSBhbmQgMC4zLCByZXNwZWN0aXZlbHkuCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gWzFlLTgsIDAuNSwgMC4zXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoMS4xLCAyLjMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDIuNTMpCisKKyAgICAgICAgIyAjMjogYWxwaGEgPT0gMTogZmlyc3QgcmFuZG9tIG51bWJlciBsZXNzIHRoYW4gMWUtNyB0byB0aGF0IHRoZSBib2R5CisgICAgICAgICMgb2YgdGhlIHdoaWxlIGxvb3AgZXhlY3V0ZXMgb25jZS4gVGhlbiByYW5kb20ucmFuZG9tKCkgcmV0dXJucyAwLjQ1LAorICAgICAgICAjIHdoaWNoIGNhdXNlcyB3aGlsZSB0byBzdG9wIGxvb3BpbmcgYW5kIHRoZSBhbGdvcml0aG0gdG8gdGVybWluYXRlLgorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFsxZS04LCAwLjQ1XQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoMS4wLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJldHVybmVkX3ZhbHVlLCAyLjUwNzMxNDE2NjEyMzgwMykKKworICAgICAgICAjICMzOiAwIDwgYWxwaGEgPCAxLiBUaGlzIGlzIHRoZSBtb3N0IGNvbXBsZXggcmVnaW9uIG9mIGNvZGUgdG8gY292ZXIsCisgICAgICAgICMgYXMgdGhlcmUgYXJlIG11bHRpcGxlIGlmLWVsc2Ugc3RhdGVtZW50cy4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlCisgICAgICAgICMgc291cmNlIGNvZGUsIGFuZCBkZXRlcm1pbmUgdGhlIHZhbHVlcyB0aGF0IHdlIG5lZWQgYWNjb3JkaW5nbHk6CisgICAgICAgICMKKyAgICAgICAgIyB3aGlsZSAxOgorICAgICAgICAjICAgICB1ID0gcmFuZG9tKCkKKyAgICAgICAgIyAgICAgYiA9IChfZSArIGFscGhhKS9fZQorICAgICAgICAjICAgICBwID0gYip1CisgICAgICAgICMgICAgIGlmIHAgPD0gMS4wOiAjIDw9PT0gKEEpCisgICAgICAgICMgICAgICAgICB4ID0gcCAqKiAoMS4wL2FscGhhKQorICAgICAgICAjICAgICBlbHNlOiAjIDw9PT0gKEIpCisgICAgICAgICMgICAgICAgICB4ID0gLV9sb2coKGItcCkvYWxwaGEpCisgICAgICAgICMgICAgIHUxID0gcmFuZG9tKCkKKyAgICAgICAgIyAgICAgaWYgcCA+IDEuMDogIyA8PT09IChDKQorICAgICAgICAjICAgICAgICAgaWYgdTEgPD0geCAqKiAoYWxwaGEgLSAxLjApOiAjIDw9PT0gKEQpCisgICAgICAgICMgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyAgICAgZWxpZiB1MSA8PSBfZXhwKC14KTogIyA8PT09IChFKQorICAgICAgICAjICAgICAgICAgYnJlYWsKKyAgICAgICAgIyByZXR1cm4geCAqIGJldGEKKyAgICAgICAgIworICAgICAgICAjIEZpcnN0LCB3ZSB3YW50IChBKSB0byBiZSBUcnVlLiBGb3IgdGhhdCB3ZSBuZWVkIHRoYXQ6CisgICAgICAgICMgYipyYW5kb20oKSA8PSAxLjAKKyAgICAgICAgIyByMSA9IHJhbmRvbSgpIDw9IDEuMCAvIGIKKyAgICAgICAgIworICAgICAgICAjIFdlIG5vdyBnZXQgdG8gdGhlIHNlY29uZCBpZi1lbHNlIGJyYW5jaCwgYW5kIGhlcmUsIHNpbmNlIHAgPD0gMS4wLAorICAgICAgICAjIChDKSBpcyBGYWxzZSBhbmQgd2UgdGFrZSB0aGUgZWxpZiBicmFuY2gsIChFKS4gRm9yIGl0IHRvIGJlIFRydWUsCisgICAgICAgICMgc28gdGhhdCB0aGUgYnJlYWsgaXMgZXhlY3V0ZWQsIHdlIG5lZWQgdGhhdDoKKyAgICAgICAgIyByMiA9IHJhbmRvbSgpIDw9IF9leHAoLXgpCisgICAgICAgICMgcjIgPD0gX2V4cCgtKHAgKiogKDEuMC9hbHBoYSkpKQorICAgICAgICAjIHIyIDw9IF9leHAoLSgoYipyMSkgKiogKDEuMC9hbHBoYSkpKQorCisgICAgICAgIF9lID0gcmFuZG9tLl9lCisgICAgICAgIF9leHAgPSByYW5kb20uX2V4cAorICAgICAgICBfbG9nID0gcmFuZG9tLl9sb2cKKyAgICAgICAgYWxwaGEgPSAwLjM1CisgICAgICAgIGJldGEgPSAxLjQ1CisgICAgICAgIGIgPSAoX2UgKyBhbHBoYSkvX2UKKyAgICAgICAgZXBzaWxvbiA9IDAuMDEKKworICAgICAgICByMSA9IDAuODg1OTI5NjQ0MTU2NiAjIDEuMCAvIGIKKyAgICAgICAgcjIgPSAwLjM2Nzg3OTQ0MTE3MTQgIyBfZXhwKC0oKGIqcjEpICoqICgxLjAvYWxwaGEpKSkKKworICAgICAgICAjIFRoZXNlIGZvdXIgInJhbmRvbSIgdmFsdWVzIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHRyYWNlOgorICAgICAgICAjIChBKSBUcnVlLCAoRSkgRmFsc2UgLS0+IFtuZXh0IGl0ZXJhdGlvbiBvZiB3aGlsZV0KKyAgICAgICAgIyAoQSkgVHJ1ZSwgKEUpIFRydWUgLS0+IFt3aGlsZSBsb29wIGJyZWFrc10KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbcjEsIHIyICsgZXBzaWxvbiwgcjEsIHIyXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoYWxwaGEsIGJldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDEuNDQ5OTk5OTk5OTk5NzU0NCkKKworICAgICAgICAjIExldCdzIG5vdyBtYWtlIChBKSBiZSBGYWxzZS4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgd2hlbiB3ZSBnZXQgdG8gdGhlCisgICAgICAgICMgc2Vjb25kIGlmLWVsc2UgJ3AnIGlzIGdyZWF0ZXIgdGhhbiAxLCBzbyAoQykgZXZhbHVhdGVzIHRvIFRydWUuIFdlCisgICAgICAgICMgbm93IGVuY291bnRlciBhIHNlY29uZCBpZiBzdGF0ZW1lbnQsIChEKSwgd2hpY2ggaW4gb3JkZXIgdG8gZXhlY3V0ZQorICAgICAgICAjIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjoKKyAgICAgICAgIyByMiA8PSB4ICoqIChhbHBoYSAtIDEuMCkKKyAgICAgICAgIyByMiA8PSAoLV9sb2coKGItcCkvYWxwaGEpKSAqKiAoYWxwaGEgLSAxLjApCisgICAgICAgICMgcjIgPD0gKC1fbG9nKChiLShiKnIxKSkvYWxwaGEpKSAqKiAoYWxwaGEgLSAxLjApCisgICAgICAgIHIxID0gMC44OTU5Mjk2NDQxNTY2ICMgKDEuMCAvIGIpICsgZXBzaWxvbiAtLSBzbyB0aGF0IChBKSBpcyBGYWxzZQorICAgICAgICByMiA9IDAuOTQ0NTQwMDQwODg5ODE0MQorCisgICAgICAgICMgQW5kIHRoZXNlIGZvdXIgdmFsdWVzIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHRyYWNlOgorICAgICAgICAjIChCKSBhbmQgKEMpIFRydWUsIChEKSBGYWxzZSAtLT4gW25leHQgaXRlcmF0aW9uIG9mIHdoaWxlXQorICAgICAgICAjIChCKSBhbmQgKEMpIFRydWUsIChEKSBUcnVlIFt3aGlsZSBsb29wIGJyZWFrc10KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbcjEsIHIyICsgZXBzaWxvbiwgcjEsIHIyXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoYWxwaGEsIGJldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDEuNTgzMDM0OTU2MTc2MDc4MSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdyYW5kb20uUmFuZG9tLmdhbW1hdmFyaWF0ZScpCisgICAgZGVmIHRlc3RfYmV0YXZhcmlhdGVfcmV0dXJuX3plcm8oc2VsZiwgZ2FtbWF2YXJpYXRlX21vY2spOgorICAgICAgICAjIGJldGF2YXJpYXRlKCkgcmV0dXJucyB6ZXJvIHdoZW4gdGhlIEdhbW1hIGRpc3RyaWJ1dGlvbgorICAgICAgICAjIHRoYXQgaXQgdXNlcyBpbnRlcm5hbGx5IHJldHVybnMgdGhpcyBzYW1lIHZhbHVlLgorICAgICAgICBnYW1tYXZhcmlhdGVfbW9jay5yZXR1cm5fdmFsdWUgPSAwLjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLjAsIHJhbmRvbS5iZXRhdmFyaWF0ZSgyLjcxODI4LCAzLjE0MTU5KSkKIAogY2xhc3MgVGVzdE1vZHVsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RNYWdpY0NvbnN0YW50cyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkgYi9MaWIvdGVzdC90ZXN0X3JhbmdlLnB5CmluZGV4IDJhMTNiZmUuLmQ5ZDRjZjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5nZS5weQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIElOKCkpCiAKICAgICAgICAgIyBUZXN0IHVzZSBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcyBpbiBzbGljZSBpbmRpY2VzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMTApWzpJKDUpXSksIGxpc3QocmFuZ2UoNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEwKVs6SSg1KV0sIHJhbmdlKDUpKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKICAgICAgICAgICAgIHJhbmdlKDAsIDEwKVs6SVgoKV0KQEAgLTM1Myw5ICszNTMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICgxMywgMjEsIDMpLCAoLTIsIDIsIDIpLCAoMioqNjUsIDIqKjY1KzIpXQogICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgIGZvciB0IGluIHRlc3RjYXNlczoKLSAgICAgICAgICAgICAgICByID0gcmFuZ2UoKnQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMociwgcHJvdG8pKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHIpKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCB0ZXN0PXQpOgorICAgICAgICAgICAgICAgICAgICByID0gcmFuZ2UoKnQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHIsIHByb3RvKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocikpCiAKICAgICBkZWYgdGVzdF9pdGVyYXRvcl9waWNrbGluZyhzZWxmKToKICAgICAgICAgdGVzdGNhc2VzID0gWygxMywpLCAoMCwgMTEpLCAoLTIyLCAxMCksICgyMCwgMywgLTEpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmUucHkKaW5kZXggMWM2ZjQ1ZC4uYTIyOWUyMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CkBAIC0zLDEwICszLDEyIEBACiBpbXBvcnQgaW8KIGltcG9ydCByZQogZnJvbSByZSBpbXBvcnQgU2Nhbm5lcgoraW1wb3J0IHNyZV9jb21waWxlCiBpbXBvcnQgc3JlX2NvbnN0YW50cwogaW1wb3J0IHN5cwogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKICMgTWlzYyB0ZXN0cyBmcm9tIFRpbSBQZXRlcnMnIHJlLmRvYwpAQCAtMTUsMTAgKzE3LDI2IEBACiAjIHdoYXQgeW91J3JlIGRvaW5nLiBTb21lIG9mIHRoZXNlIHRlc3RzIHdlcmUgY2FyZWZ1bGx5IG1vZGVsZWQgdG8KICMgY292ZXIgbW9zdCBvZiB0aGUgY29kZS4KIAotaW1wb3J0IHVuaXR0ZXN0CitjbGFzcyBTKHN0cik6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmV0dXJuIFMoc3VwZXIoKS5fX2dldGl0ZW1fXyhpbmRleCkpCisKK2NsYXNzIEIoYnl0ZXMpOgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJldHVybiBCKHN1cGVyKCkuX19nZXRpdGVtX18oaW5kZXgpKQogCiBjbGFzcyBSZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBhc3NlcnRUeXBlZEVxdWFsKHNlbGYsIGFjdHVhbCwgZXhwZWN0LCBtc2c9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3QsIG1zZykKKyAgICAgICAgZGVmIHJlY3Vyc2UoYWN0dWFsLCBleHBlY3QpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3QsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgICAgIGZvciB4LCB5IGluIHppcChhY3R1YWwsIGV4cGVjdCk6CisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2UoeCwgeSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGFjdHVhbCksIHR5cGUoZXhwZWN0KSwgbXNnKQorICAgICAgICByZWN1cnNlKGFjdHVhbCwgZXhwZWN0KQorCiAgICAgZGVmIHRlc3Rfa2VlcF9idWZmZXIoc2VsZik6CiAgICAgICAgICMgU2VlIGJ1ZyAxNDIxMgogICAgICAgICBiID0gYnl0ZWFycmF5KGIneCcpCkBAIC01Myw2ICs3MSwxNSBAQAogICAgICAgICByZXR1cm4gc3RyKGludF92YWx1ZSArIDEpCiAKICAgICBkZWYgdGVzdF9iYXNpY19yZV9zdWIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoJ3knLCAnYScsICd4eXonKSwgJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoJ3knLCBTKCdhJyksIFMoJ3h5eicpKSwgJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoYid5JywgYidhJywgYid4eXonKSwgYid4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIEIoYidhJyksIEIoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnN1YihiJ3knLCBieXRlYXJyYXkoYidhJyksIGJ5dGVhcnJheShiJ3h5eicpKSwgYid4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIG1lbW9yeXZpZXcoYidhJyksIG1lbW9yeXZpZXcoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgZm9yIHkgaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Yih5LCAnYScsICd4JXN6JyAlIHkpLCAneGF6JykKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigiKD9pKWIrIiwgIngiLCAiYmJiYiBCQkJCIiksICd4IHgnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YihyJ1xkKycsIHNlbGYuYnVtcF9udW0sICcwOC4yIC0yIDIzeDk5eScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICc5LjMgLTMgMjR4MTAweScpCkBAIC0yMTAsMTAgKzIzNywyOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Ym4oImIqIiwgIngiLCAieHl6IiwgMiksICgneHh4eXonLCAyKSkKIAogICAgIGRlZiB0ZXN0X3JlX3NwbGl0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6IiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJycsICdjJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIjoqIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsICI6YTpiOjpjIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10pCisgICAgICAgIGZvciBzdHJpbmcgaW4gIjphOmI6OmMiLCBTKCI6YTpiOjpjIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoIjoiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJ2EnLCAnYicsICcnLCAnYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KCI6KiIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnYScsICdiJywgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdCgiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10pCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGIiOmE6Yjo6YyIsIEIoYiI6YTpiOjpjIiksIGJ5dGVhcnJheShiIjphOmI6OmMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiIjphOmI6OmMiKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoYiI6Iiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYicnLCBiJ2EnLCBiJ2InLCBiJycsIGInYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiOioiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJycsIGInYScsIGInYicsIGInYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2InJywgYic6JywgYidhJywgYic6JywgYidiJywgYic6OicsIGInYyddKQorICAgICAgICBmb3IgYSwgYiwgYyBpbiAoIlx4ZTBceGRmXHhlNyIsICJcdTA0MzBcdTA0MzFcdTA0MzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlxVMDAwMWQ0OWNcVTAwMDFkNDllXFUwMDAxZDRiNSIpOgorICAgICAgICAgICAgc3RyaW5nID0gIjolczolczo6JXMiICUgKGEsIGIsIGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6Iiwgc3RyaW5nKSwgWycnLCBhLCBiLCAnJywgY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6KiIsIHN0cmluZyksIFsnJywgYSwgYiwgY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoOiopIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsIGEsICc6JywgYiwgJzo6JywgY10pCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKD86OiopIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDopKiIsICI6YTpiOjpjIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6JywgJ2MnXSkKQEAgLTIzNSwyMiArMjgxLDUzIEBACiAKICAgICBkZWYgdGVzdF9yZV9maW5kYWxsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIjorIiwgImFiYyIpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCI6KyIsICJhOmI6OmM6OjpkIiksIFsiOiIsICI6OiIsICI6OjoiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoOispIiwgImE6Yjo6Yzo6OmQiKSwgWyI6IiwgIjo6IiwgIjo6OiJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIig6KSg6KikiLCAiYTpiOjpjOjo6ZCIpLCBbKCI6IiwgIiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI6IiwgIjoiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiOiIsICI6OiIpXSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAiYTpiOjpjOjo6ZCIsIFMoImE6Yjo6Yzo6OmQiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCI6KyIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyI6IiwgIjo6IiwgIjo6OiJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLmZpbmRhbGwoIig6KykiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiOiIsICI6OiIsICI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCIoOikoOiopIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCI6IiwgIiIpLCAoIjoiLCAiOiIpLCAoIjoiLCAiOjoiKV0pCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGIiYTpiOjpjOjo6ZCIsIEIoYiJhOmI6OmM6OjpkIiksIGJ5dGVhcnJheShiImE6Yjo6Yzo6OmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiImE6Yjo6Yzo6OmQiKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIjorIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYiI6IiwgYiI6OiIsIGIiOjo6Il0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIig6KykiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiIjoiLCBiIjo6IiwgYiI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKGIiKDopKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhiIjoiLCBiIiIpLCAoYiI6IiwgYiI6IiksIChiIjoiLCBiIjo6IildKQorICAgICAgICBmb3IgeCBpbiAoIlx4ZTAiLCAiXHUwNDMwIiwgIlxVMDAwMWQ0OWMiKToKKyAgICAgICAgICAgIHh4ID0geCAqIDIKKyAgICAgICAgICAgIHh4eCA9IHggKiAzCisgICAgICAgICAgICBzdHJpbmcgPSAiYSVzYiVzYyVzZCIgJSAoeCwgeHgsIHh4eCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiJXMrIiAlIHgsIHN0cmluZyksIFt4LCB4eCwgeHh4XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKCVzKykiICUgeCwgc3RyaW5nKSwgW3gsIHh4LCB4eHhdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoJXMpKCVzKikiICUgKHgsIHgpLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHgsICIiKSwgKHgsIHgpLCAoeCwgeHgpXSkKIAogICAgIGRlZiB0ZXN0X2J1Z18xMTc2MTIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbChyIihhfChiKSkiLCAiYWJhIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWygiYSIsICIiKSwoImIiLCAiYiIpLCgiYSIsICIiKV0pCiAKICAgICBkZWYgdGVzdF9yZV9tYXRjaChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYScsICdhJykuZ3JvdXBzKCksICgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoYSknLCAnYScpLmdyb3VwcygpLCAoJ2EnLCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDApLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEpLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEsIDEpLCAoJ2EnLCAnYScpKQorICAgICAgICBmb3Igc3RyaW5nIGluICdhJywgUygnYScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYScsIHN0cmluZykuZ3JvdXBzKCksICgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cHMoKSwgKCdhJywpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgwKSwgJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgxKSwgJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgxLCAxKSwgKCdhJywgJ2EnKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiBiJ2EnLCBCKGInYScpLCBieXRlYXJyYXkoYidhJyksIG1lbW9yeXZpZXcoYidhJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInYScsIHN0cmluZykuZ3JvdXBzKCksICgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXBzKCksIChiJ2EnLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInKGEpJywgc3RyaW5nKS5ncm91cCgwKSwgYidhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYicoYSknLCBzdHJpbmcpLmdyb3VwKDEpLCBiJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXAoMSwgMSksIChiJ2EnLCBiJ2EnKSkKKyAgICAgICAgZm9yIGEgaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGEsIGEpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXBzKCksIChhLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoJXMpJyAlIGEsIGEpLmdyb3VwKDApLCBhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKCVzKScgJSBhLCBhKS5ncm91cCgxKSwgYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXAoMSwgMSksIChhLCBhKSkKIAogICAgICAgICBwYXQgPSByZS5jb21waWxlKCcoKGEpfChiKSkoYyk/JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2EnKS5ncm91cHMoKSwgKCdhJywgJ2EnLCBOb25lLCBOb25lKSkKQEAgLTI3Miw2ICszNDksMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2InLCBOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2FjJykuZ3JvdXAoMSwgJ2IyJywgMyksICgnYScsIE5vbmUsICdjJykpCiAKKyAgICBkZWYgdGVzdF9yZV9mdWxsbWF0Y2goc2VsZik6CisgICAgICAgICMgSXNzdWUgMTYyMDM6IFByb3Bvc2FsOiBhZGQgcmUuZnVsbG1hdGNoKCkgbWV0aG9kLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImEiLCAiYSIpLnNwYW4oKSwgKDAsIDEpKQorICAgICAgICBmb3Igc3RyaW5nIGluICJhYiIsIFMoImFiIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImF8YWIiLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDIpKQorICAgICAgICBmb3Igc3RyaW5nIGluIGIiYWIiLCBCKGIiYWIiKSwgYnl0ZWFycmF5KGIiYWIiKSwgbWVtb3J5dmlldyhiImFiIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChiciJhfGFiIiwgc3RyaW5nKS5zcGFuKCksICgwLCAyKSkKKyAgICAgICAgZm9yIGEsIGIgaW4gIlx4ZTBceGRmIiwgIlx1MDQzMFx1MDQzMSIsICJcVTAwMDFkNDljXFUwMDAxZDQ5ZSI6CisgICAgICAgICAgICByID0gciIlc3wlcyIgJSAoYSwgYSArIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyLCBhICsgYikuc3BhbigpLCAoMCwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiLio/JCIsICJhYmMiKS5zcGFuKCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociIuKj8iLCAiYWJjIikuc3BhbigpLCAoMCwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYS4qP2IiLCAiYWIiKS5zcGFuKCksICgwLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhLio/YiIsICJhYmIiKS5zcGFuKCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhLio/YiIsICJheHhiIikuc3BhbigpLCAoMCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLmZ1bGxtYXRjaChyImErIiwgImFiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLmZ1bGxtYXRjaChyImFiYyQiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiYWJjXFoiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiKD9tKWFiYyQiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhYig/PWMpY2QiLCAiYWJjZCIpLnNwYW4oKSwgKDAsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImFiKD88PWIpY2QiLCAiYWJjZCIpLnNwYW4oKSwgKDAsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyIig/PWF8YWIpYWIiLCAiYWIiKS5zcGFuKCksICgwLCAyKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmUuY29tcGlsZShyImJjIikuZnVsbG1hdGNoKCJhYmNkIiwgcG9zPTEsIGVuZHBvcz0zKS5zcGFuKCksICgxLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlLmNvbXBpbGUociIuKj8kIikuZnVsbG1hdGNoKCJhYmNkIiwgcG9zPTEsIGVuZHBvcz0zKS5zcGFuKCksICgxLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlLmNvbXBpbGUociIuKj8iKS5mdWxsbWF0Y2goImFiY2QiLCBwb3M9MSwgZW5kcG9zPTMpLnNwYW4oKSwgKDEsIDMpKQorCiAgICAgZGVmIHRlc3RfcmVfZ3JvdXByZWZfZXhpc3RzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKFwoKT8oW14oKV0rKSg/KDEpXCkpJCcsICcoYSknKS5ncm91cHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoJygnLCAnYScpKQpAQCAtMTA1Myw2ICsxMTYwLDI4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5jb21waWxlKHBhdHRlcm4sIHJlLlMpLmZpbmRhbGwoYid4eXonKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJ3h5eiddLCBtc2c9cGF0dGVybikKIAorICAgIGRlZiB0ZXN0X21hdGNoX3JlcHIoc2VsZik6CisgICAgICAgIGZvciBzdHJpbmcgaW4gJ1thYnJhY2FkYWJyYV0nLCBTKCdbYWJyYWNhZGFicmFdJyk6CisgICAgICAgICAgICBtID0gcmUuc2VhcmNoKHInKC4rKSguKj8pXDEnLCBzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgxLCAxMiksIG1hdGNoPSdhYnJhY2FkYWJyYSc+IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKG0pLl9fbW9kdWxlX18sIHR5cGUobSkuX19xdWFsbmFtZV9fKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAoYidbYWJyYWNhZGFicmFdJywgQihiJ1thYnJhY2FkYWJyYV0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInW2FicmFjYWRhYnJhXScpLAorICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KGInW2FicmFjYWRhYnJhXScpKToKKyAgICAgICAgICAgIG0gPSByZS5zZWFyY2gocmInKC4rKSguKj8pXDEnLCBzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgxLCAxMiksIG1hdGNoPWInYWJyYWNhZGFicmEnPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShtKS5fX21vZHVsZV9fLCB0eXBlKG0pLl9fcXVhbG5hbWVfXykpCisKKyAgICAgICAgZmlyc3QsIHNlY29uZCA9IGxpc3QocmUuZmluZGl0ZXIoIihhYSl8KGJiKSIsICJhYSBiYiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmlyc3QpLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgwLCAyKSwgbWF0Y2g9J2FhJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShzZWNvbmQpLl9fbW9kdWxlX18sIHR5cGUoZmlyc3QpLl9fcXVhbG5hbWVfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWNvbmQpLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgzLCA1KSwgbWF0Y2g9J2JiJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShzZWNvbmQpLl9fbW9kdWxlX18sIHR5cGUoc2Vjb25kKS5fX3F1YWxuYW1lX18pKQorCiAKICAgICBkZWYgdGVzdF9idWdfMjUzNyhzZWxmKToKICAgICAgICAgIyBpc3N1ZSAyNTM3OiBlbXB0eSBzdWJtYXRjaGVzCkBAIC0xMDc3LDYgKzEyMDYsODMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2xpdGVyYWwgMTAyICcsICdsaXRlcmFsIDExMSAnLCAnbGl0ZXJhbCAxMTEgJ10pCiAKIAorY2xhc3MgUGF0dGVyblJlcHJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNoZWNrKHNlbGYsIHBhdHRlcm4sIGV4cGVjdGVkKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHJlLmNvbXBpbGUocGF0dGVybikpLCBleHBlY3RlZCkKKworICAgIGRlZiBjaGVja19mbGFncyhzZWxmLCBwYXR0ZXJuLCBmbGFncywgZXhwZWN0ZWQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocmUuY29tcGlsZShwYXR0ZXJuLCBmbGFncykpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3dpdGhvdXRfZmxhZ3Moc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3JhbmRvbSBwYXR0ZXJuJywKKyAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nKSIpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfZmxhZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCByZS5JR05PUkVDQVNFLAorICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJywgcmUuSUdOT1JFQ0FTRSkiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZmxhZ3Moc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgcmUuSXxyZS5TfHJlLlgsCisgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nLCAiCisgICAgICAgICAgICAicmUuSUdOT1JFQ0FTRXxyZS5ET1RBTEx8cmUuVkVSQk9TRSkiKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9mbGFnKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIHJlLlUsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJykiKQorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIHJlLkl8cmUuU3xyZS5VLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmUuSUdOT1JFQ0FTRXxyZS5ET1RBTEwpIikKKworICAgIGRlZiB0ZXN0X2lubGluZV9mbGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnKD9pKXBhdHRlcm4nLAorICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCcoP2kpcGF0dGVybicsIHJlLklHTk9SRUNBU0UpIikKKworICAgIGRlZiB0ZXN0X3Vua25vd25fZmxhZ3Moc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgMHgxMjMwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJywgMHgxMjMwMDApIikKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCAweDEyMzAwMHxyZS5JLAorICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJywgcmUuSUdOT1JFQ0FTRXwweDEyMzAwMCkiKQorCisgICAgZGVmIHRlc3RfYnl0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soYidieXRlcyBwYXR0ZXJuJywKKyAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZShiJ2J5dGVzIHBhdHRlcm4nKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoYidieXRlcyBwYXR0ZXJuJywgcmUuQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZShiJ2J5dGVzIHBhdHRlcm4nLCByZS5BU0NJSSkiKQorCisgICAgZGVmIHRlc3RfcXVvdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdyYW5kb20gImRvdWJsZSBxdW90ZWQiIHBhdHRlcm4nLAorICAgICAgICAgICAgJycncmUuY29tcGlsZSgncmFuZG9tICJkb3VibGUgcXVvdGVkIiBwYXR0ZXJuJyknJycpCisgICAgICAgIHNlbGYuY2hlY2soInJhbmRvbSAnc2luZ2xlIHF1b3RlZCcgcGF0dGVybiIsCisgICAgICAgICAgICAnJydyZS5jb21waWxlKCJyYW5kb20gJ3NpbmdsZSBxdW90ZWQnIHBhdHRlcm4iKScnJykKKyAgICAgICAgc2VsZi5jaGVjaygnJydib3RoICdzaW5nbGUnIGFuZCAiZG91YmxlIiBxdW90ZXMnJycsCisgICAgICAgICAgICAnJydyZS5jb21waWxlKCdib3RoIFxcJ3NpbmdsZVxcJyBhbmQgImRvdWJsZSIgcXVvdGVzJyknJycpCisKKyAgICBkZWYgdGVzdF9sb25nX3BhdHRlcm4oc2VsZik6CisgICAgICAgIHBhdHRlcm4gPSAnVmVyeSAlc3BhdHRlcm4nICUgKCdsb25nICcgKiAxMDAwKQorICAgICAgICByID0gcmVwcihyZS5jb21waWxlKHBhdHRlcm4pKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobGVuKHIpLCAzMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocls6MzBdLCAicmUuY29tcGlsZSgnVmVyeSBsb25nIGxvbmcgbG9uIikKKyAgICAgICAgciA9IHJlcHIocmUuY29tcGlsZShwYXR0ZXJuLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGxlbihyKSwgMzAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbOjMwXSwgInJlLmNvbXBpbGUoJ1ZlcnkgbG9uZyBsb25nIGxvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoclstMTY6XSwgIiwgcmUuSUdOT1JFQ0FTRSkiKQorCisKK2NsYXNzIEltcGxlbWVudGF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSByZSBtb2R1bGUuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9vdmVybGFwX3RhYmxlKHNlbGYpOgorICAgICAgICBmID0gc3JlX2NvbXBpbGUuX2dlbmVyYXRlX292ZXJsYXBfdGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCIiKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiYSIpLCBbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiYWJjZCIpLCBbMCwgMCwgMCwgMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiYWFhYSIpLCBbMCwgMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiYWJhYmJhIiksIFswLCAwLCAxLCAyLCAwLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCJhYmNhYmRhYyIpLCBbMCwgMCwgMCwgMSwgMiwgMCwgMSwgMF0pCisKKwogZGVmIHJ1bl9yZV90ZXN0cygpOgogICAgIGZyb20gdGVzdC5yZV90ZXN0cyBpbXBvcnQgdGVzdHMsIFNVQ0NFRUQsIEZBSUwsIFNZTlRBWF9FUlJPUgogICAgIGlmIHZlcmJvc2U6CkBAIC0xMjA2LDcgKzE0MTIsNyBAQAogCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoUmVUZXN0cykKKyAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCiAgICAgcnVuX3JlX3Rlc3RzKCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVncnRlc3QucHkgYi9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOThhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5CkBAIC0wLDAgKzEsMjc1IEBACisiIiIKK1Rlc3RzIG9mIHJlZ3J0ZXN0LnB5LgorIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGZhdWx0aGFuZGxlcgoraW1wb3J0IGdldG9wdAoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdCwgc3VwcG9ydAorCitjbGFzcyBQYXJzZUFyZ3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IHJlZ3J0ZXN0J3MgYXJndW1lbnQgcGFyc2luZy4iIiIKKworICAgIGRlZiBjaGVja0Vycm9yKHNlbGYsIGFyZ3MsIG1zZyk6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBlcnIsIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgcmVncnRlc3QuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtc2csIGVyci5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLWgnLCAnLS1oZWxwJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXQsIFwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgICAgICByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdSdW4gUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMuJywgb3V0LmdldHZhbHVlKCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgImZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlcigpIHJlcXVpcmVkIikKKyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS10aW1lb3V0JywgJzQuMiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRpbWVvdXQsIDQuMikKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10aW1lb3V0J10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXRpbWVvdXQnLCAnZm9vJ10sICdpbnZhbGlkIGZsb2F0IHZhbHVlJykKKworICAgIGRlZiB0ZXN0X3dhaXQoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXdhaXQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLndhaXQpCisKKyAgICBkZWYgdGVzdF9zbGF2ZWFyZ3Moc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXNsYXZlYXJncycsICdbW10sIHt9XSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnNsYXZlYXJncywgJ1tbXSwge31dJykKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS1zbGF2ZWFyZ3MnXSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9zdGFydChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVMnLCAnLS1zdGFydCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnN0YXJ0LCAnZm9vJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfdmVyYm9zZShzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy12J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMSkKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy12dnYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAzKQorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS12ZXJib3NlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMSkKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdmVyYm9zZSddICogMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAzKQorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDApCisKKyAgICBkZWYgdGVzdF92ZXJib3NlMihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXcnLCAnLS12ZXJib3NlMic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy52ZXJib3NlMikKKworICAgIGRlZiB0ZXN0X3ZlcmJvc2UzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctVycsICctLXZlcmJvc2UzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnZlcmJvc2UzKQorCisgICAgZGVmIHRlc3RfcXVpZXQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1xJywgJy0tcXVpZXQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3Rfc2xvdyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW8nLCAnLS1zbG93JzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnByaW50X3Nsb3cpCisKKyAgICBkZWYgdGVzdF9oZWFkZXIoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLWhlYWRlciddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuaGVhZGVyKQorCisgICAgZGVmIHRlc3RfcmFuZG9taXplKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctcicsICctLXJhbmRvbWl6ZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5yYW5kb21pemUpCisKKyAgICBkZWYgdGVzdF9yYW5kc2VlZChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcmFuZHNlZWQnLCAnMTIzNDUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5yYW5kb21fc2VlZCwgMTIzNDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5yYW5kb21pemUpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tcmFuZHNlZWQnXSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tcmFuZHNlZWQnLCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9mcm9tZmlsZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLWYnLCAnLS1mcm9tZmlsZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmZyb21maWxlLCAnZm9vJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJywgJy1zJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9leGNsdWRlKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICcteCcsICctLWV4Y2x1ZGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZXhjbHVkZSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXMnLCAnLS1zaW5nbGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuc2luZ2xlKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnLWYnLCAnZm9vJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9tYXRjaChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW0nLCAnLS1tYXRjaCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdwYXR0ZXJuJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5tYXRjaF90ZXN0cywgJ3BhdHRlcm4nKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9mYWlsZmFzdChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUcnLCAnLS1mYWlsZmFzdCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICctdiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mYWlsZmFzdCkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICctVyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mYWlsZmFzdCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICctRy8tLWZhaWxmYXN0IG5lZWRzIGVpdGhlciAtdiBvciAtVycpCisKKyAgICBkZWYgdGVzdF91c2Uoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy11JywgJy0tdXNlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2d1aSxuZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy51c2VfcmVzb3VyY2VzLCBbJ2d1aScsICduZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZ3VpLG5vbmUsbmV0d29yayddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgWyduZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsaXN0KHJlZ3J0ZXN0LlJFU09VUkNFX05BTUVTKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkLnJlbW92ZSgnZ3VpJykKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdhbGwsLWd1aSddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbyddLCAnaW52YWxpZCByZXNvdXJjZScpCisKKyAgICBkZWYgdGVzdF9tZW1saW1pdChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLU0nLCAnLS1tZW1saW1pdCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc0RyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMubWVtbGltaXQsICc0RycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3Rlc3RkaXIoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXRlc3RkaXInLCAnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudGVzdGRpciwgb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsICdmb28nKSkKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10ZXN0ZGlyJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfcnVubGVha3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1MJywgJy0tcnVubGVha3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucnVubGVha3MpCisKKyAgICBkZWYgdGVzdF9odW50cmxlYWtzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctUicsICctLWh1bnRybGVha3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnOiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDUsIDQsICdyZWZsb2cudHh0JykpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNjonXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmh1bnRybGVha3MsICg2LCA0LCAncmVmbG9nLnR4dCcpKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzozJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNSwgMywgJ3JlZmxvZy50eHQnKSkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc2OjM6bGVha3MubG9nJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNiwgMywgJ2xlYWtzLmxvZycpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICc2J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkcyAyIG9yIDMgY29sb24tc2VwYXJhdGVkIGFyZ3VtZW50cycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb286J10sICdpbnZhbGlkIGh1bnRybGVha3MgdmFsdWUnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnNjpmb28nXSwgJ2ludmFsaWQgaHVudHJsZWFrcyB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9tdWx0aXByb2Nlc3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1qJywgJy0tbXVsdGlwcm9jZXNzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzInXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9tcCwgMikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1UJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1sJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1NJywgJzRHJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9jb3ZlcmFnZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVQnLCAnLS1jb3ZlcmFnZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy50cmFjZSkKKworICAgIGRlZiB0ZXN0X2NvdmVyZGlyKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctRCcsICctLWNvdmVyZGlyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2ZvbyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuY292ZXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgJ2ZvbycpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9ub2NvdmVyZGlyKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctTicsICctLW5vY292ZXJkaXInOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShucy5jb3ZlcmRpcikKKworICAgIGRlZiB0ZXN0X3RocmVzaG9sZChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXQnLCAnLS10aHJlc2hvbGQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnMTAwMCddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudGhyZXNob2xkLCAxMDAwKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb28nXSwgJ2ludmFsaWQgaW50IHZhbHVlJykKKworICAgIGRlZiB0ZXN0X25vd2luZG93cyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW4nLCAnLS1ub3dpbmRvd3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMubm93aW5kb3dzKQorCisgICAgZGVmIHRlc3RfZm9yZXZlcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUYnLCAnLS1mb3JldmVyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmZvcmV2ZXIpCisKKworICAgIGRlZiB0ZXN0X3VucmVjb2duaXplZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS14eHgnXSwgJ3VzYWdlOicpCisKKyAgICBkZWYgdGVzdF9sb25nX29wdGlvbl9fcGFydGlhbChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcXVpJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5xdWlldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3RfdHdvX29wdGlvbnMoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aWV0JywgJy0tZXhjbHVkZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmV4Y2x1ZGUpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fd2l0aF9lbXB0eV9zdHJpbmdfdmFsdWUoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXN0YXJ0JywgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnN0YXJ0LCAnJykKKworICAgIGRlZiB0ZXN0X2FyZyhzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmFyZ3MsIFsnZm9vJ10pCisKKyAgICBkZWYgdGVzdF9vcHRpb25fYW5kX2FyZyhzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcXVpZXQnLCAnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5xdWlldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmFyZ3MsIFsnZm9vJ10pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weQppbmRleCBjMjMzYjFkLi5hZTY3ZjA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZXBybGliLnB5CkBAIC0zLDExICszLDExIEBACiAgIE5pY2sgTWF0aGV3c29uCiAiIiIKIAotaW1wb3J0IGltcAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjcmVhdGVfZW1wdHlfZmlsZSwgdmVyYm9zZQpAQCAtMjQ4LDcgKzI0OCw4IEBACiAgICAgICAgIHNvdXJjZV9wYXRoX2xlbiArPSAyICogKGxlbihzZWxmLmxvbmduYW1lKSArIDEpCiAgICAgICAgICMgYSBwYXRoIHNlcGFyYXRvciArIGBtb2R1bGVfbmFtZWAgKyAiLnB5IgogICAgICAgICBzb3VyY2VfcGF0aF9sZW4gKz0gbGVuKG1vZHVsZV9uYW1lKSArIDEgKyBsZW4oIi5weSIpCi0gICAgICAgIGNhY2hlZF9wYXRoX2xlbiA9IHNvdXJjZV9wYXRoX2xlbiArIGxlbihpbXAuY2FjaGVfZnJvbV9zb3VyY2UoIngucHkiKSkgLSBsZW4oIngucHkiKQorICAgICAgICBjYWNoZWRfcGF0aF9sZW4gPSAoc291cmNlX3BhdGhfbGVuICsKKyAgICAgICAgICAgIGxlbihpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgieC5weSIpKSAtIGxlbigieC5weSIpKQogICAgICAgICBpZiBvcy5uYW1lID09ICdudCcgYW5kIGNhY2hlZF9wYXRoX2xlbiA+PSAyNTg6CiAgICAgICAgICAgICAjIFVuZGVyIFdpbmRvd3MsIHRoZSBtYXggcGF0aCBsZW4gaXMgMjYwIGluY2x1ZGluZyBDJ3MgdGVybWluYXRpbmcKICAgICAgICAgICAgICMgTlVMIGNoYXJhY3Rlci4KQEAgLTI1OSw2ICsyNjAsNyBAQAogICAgICAgICAgICAgcHJpbnQoImNhY2hlZF9wYXRoX2xlbiA9IiwgY2FjaGVkX3BhdGhfbGVuKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCiAgICAgICAgIHNlbGYuX2NoZWNrX3BhdGhfbGltaXRhdGlvbnMoc2VsZi5wa2duYW1lKQogICAgICAgICBjcmVhdGVfZW1wdHlfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zdWJwa2duYW1lLCBzZWxmLnBrZ25hbWUgKyAnLnB5JykpCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5IGIvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weQppbmRleCAwY2Y2MWNiLi4yZWNhZTBmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKQEAgLTEsMyArMSw2IEBACitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHN5cworaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHRpbWUKQEAgLTYxLDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoLjEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW1pdF9zZXQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICAgICAgaWYgbGltaXRfc2V0OgpAQCAtMTI5LDYgKzEzMiwzMyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGFnZXNpemUsIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGFnZXNpemUsIDApCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ2xpbnV4JywgJ3Rlc3QgcmVxdWlyZXMgTGludXgnKQorICAgIGRlZiB0ZXN0X2xpbnV4X2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgZm9yIGF0dHIgaW4gWydNU0dRVUVVRScsICdOSUNFJywgJ1JUUFJJTycsICdSVFRJTUUnLCAnU0lHUEVORElORyddOgorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLnN1cHByZXNzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2V0YXR0cihyZXNvdXJjZSwgJ1JMSU1JVF8nICsgYXR0ciksIGludCkKKworICAgIEBzdXBwb3J0LnJlcXVpcmVzX2ZyZWVic2RfdmVyc2lvbig5KQorICAgIGRlZiB0ZXN0X2ZyZWVic2RfY29udGFudHMoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluIFsnU1dBUCcsICdTQlNJWkUnLCAnTlBUUyddOgorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLnN1cHByZXNzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2V0YXR0cihyZXNvdXJjZSwgJ1JMSU1JVF8nICsgYXR0ciksIGludCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocmVzb3VyY2UsICdwcmxpbWl0JyksICdubyBwcmxpbWl0JykKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19saW51eF92ZXJzaW9uKDIsIDYsIDM2KQorICAgIGRlZiB0ZXN0X3BybGltaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVzb3VyY2UucHJsaW1pdCkKKyAgICAgICAgaWYgb3MuZ2V0ZXVpZCgpICE9IDA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQZXJtaXNzaW9uRXJyb3IsIHJlc291cmNlLnBybGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCByZXNvdXJjZS5STElNSVRfQVMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb2Nlc3NMb29rdXBFcnJvciwgcmVzb3VyY2UucHJsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIHJlc291cmNlLlJMSU1JVF9BUykKKyAgICAgICAgbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0FTKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc291cmNlLnBybGltaXQoMCwgcmVzb3VyY2UuUkxJTUlUX0FTKSwgbGltaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzb3VyY2UucHJsaW1pdCgwLCByZXNvdXJjZS5STElNSVRfQVMsIGxpbWl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCkKKworCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUmVzb3VyY2VUZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5IGIvTGliL3Rlc3QvdGVzdF9ydW5weS5weQppbmRleCAyZGRiYTM0Li43ODZiODEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKQEAgLTUsNyArNSw3IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgcmUKIGltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYiwgaW1wb3J0bGliLm1hY2hpbmVyeSwgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBweV9jb21waWxlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKAogICAgIGZvcmdldCwgbWFrZV9sZWdhY3lfcHljLCBydW5fdW5pdHRlc3QsIHVubG9hZCwgdmVyYm9zZSwgbm9fdHJhY2luZywKQEAgLTQ3LDYgKzQ3LDcgQEAKICAgICAiX19jYWNoZWRfXyI6IE5vbmUsCiAgICAgIl9fcGFja2FnZV9fIjogTm9uZSwKICAgICAiX19kb2NfXyI6IE5vbmUsCisgICAgIl9fc3BlY19fIjogTm9uZQogfQogZXhhbXBsZV9uYW1lc3BhY2UgPSAgewogICAgICJzeXMiOiBzeXMsCkBAIC02NywxMSArNjgsMTkgQEAKICAgICAjIHRlc3Rpbmcgb2NjdXJzIGF0IHRob3NlIHVwcGVyIGxheWVycyBhcyB3ZWxsLCBub3QganVzdCBhdCB0aGUgdXRpbGl0eQogICAgICMgbGF5ZXIKIAorICAgICMgRmlndXJpbmcgb3V0IHRoZSBsb2FkZXIgZGV0YWlscyBpbiBhZHZhbmNlIGlzIGhhcmQgdG8gZG8sIHNvIHdlIHNraXAKKyAgICAjIGNoZWNraW5nIHRoZSBmdWxsIGRldGFpbHMgb2YgbG9hZGVyIGFuZCBsb2FkZXJfc3RhdGUKKyAgICBDSEVDS0VEX1NQRUNfQVRUUklCVVRFUyA9IFsibmFtZSIsICJwYXJlbnQiLCAib3JpZ2luIiwgImNhY2hlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhc19sb2NhdGlvbiIsICJzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyJdCisKICAgICBkZWYgYXNzZXJ0TmFtZXNwYWNlTWF0Y2hlcyhzZWxmLCByZXN1bHRfbnMsIGV4cGVjdGVkX25zKToKICAgICAgICAgIiIiQ2hlY2sgdHdvIG5hbWVzcGFjZXMgbWF0Y2guCiAKICAgICAgICAgICAgSWdub3JlcyBhbnkgdW5zcGVjaWZpZWQgaW50ZXJwcmV0ZXIgY3JlYXRlZCBuYW1lcwogICAgICAgICAiIiIKKyAgICAgICAgIyBBdm9pZCBzaWRlIGVmZmVjdHMKKyAgICAgICAgcmVzdWx0X25zID0gcmVzdWx0X25zLmNvcHkoKQorICAgICAgICBleHBlY3RlZF9ucyA9IGV4cGVjdGVkX25zLmNvcHkoKQogICAgICAgICAjIEltcGxzIGFyZSBwZXJtaXR0ZWQgdG8gYWRkIGV4dHJhIG5hbWVzLCBzbyBmaWx0ZXIgdGhlbSBvdXQKICAgICAgICAgZm9yIGsgaW4gbGlzdChyZXN1bHRfbnMpOgogICAgICAgICAgICAgaWYgay5zdGFydHN3aXRoKCJfXyIpIGFuZCBrLmVuZHN3aXRoKCJfXyIpOgpAQCAtNzksNyArODgsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X25zLnBvcChrKQogICAgICAgICAgICAgICAgIGlmIGsgbm90IGluIGV4cGVjdGVkX25zWyJuZXN0ZWQiXToKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X25zWyJuZXN0ZWQiXS5wb3AoaykKLSAgICAgICAgIyBEb24ndCB1c2UgZGlyZWN0IGRpY3QgY29tcGFyaXNvbiAtIHRoZSBkaWZmcyBhcmUgdG9vIGhhcmQgdG8gZGVidWcKKyAgICAgICAgIyBTcGVjIGVxdWFsaXR5IGluY2x1ZGVzIHRoZSBsb2FkZXIsIHNvIHdlIHRha2UgdGhlIHNwZWMgb3V0IG9mIHRoZQorICAgICAgICAjIHJlc3VsdCBuYW1lc3BhY2UgYW5kIGNoZWNrIHRoYXQgc2VwYXJhdGVseQorICAgICAgICByZXN1bHRfc3BlYyA9IHJlc3VsdF9ucy5wb3AoIl9fc3BlY19fIikKKyAgICAgICAgZXhwZWN0ZWRfc3BlYyA9IGV4cGVjdGVkX25zLnBvcCgiX19zcGVjX18iKQorICAgICAgICBpZiBleHBlY3RlZF9zcGVjIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXN1bHRfc3BlYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSWYgYW4gZXhwZWN0ZWQgbG9hZGVyIGlzIHNldCwgd2UganVzdCBjaGVjayB3ZSBnb3QgdGhlIHJpZ2h0CisgICAgICAgICAgICAjIHR5cGUsIHJhdGhlciB0aGFuIGNoZWNraW5nIGZvciBmdWxsIGVxdWFsaXR5CisgICAgICAgICAgICBpZiBleHBlY3RlZF9zcGVjLmxvYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0X3NwZWMubG9hZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZXhwZWN0ZWRfc3BlYy5sb2FkZXIpKQorICAgICAgICAgICAgZm9yIGF0dHIgaW4gc2VsZi5DSEVDS0VEX1NQRUNfQVRUUklCVVRFUzoKKyAgICAgICAgICAgICAgICBrID0gIl9fc3BlY19fLiIgKyBhdHRyCisgICAgICAgICAgICAgICAgYWN0dWFsID0gKGssIGdldGF0dHIocmVzdWx0X3NwZWMsIGF0dHIpKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gKGssIGdldGF0dHIoZXhwZWN0ZWRfc3BlYywgYXR0cikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICAjIEZvciB0aGUgcmVzdCwgd2Ugc3RpbGwgZG9uJ3QgdXNlIGRpcmVjdCBkaWN0IGNvbXBhcmlzb24gb24gdGhlCisgICAgICAgICMgbmFtZXNwYWNlLCBhcyB0aGUgZGlmZnMgYXJlIHRvbyBoYXJkIHRvIGRlYnVnIGlmIGFueXRoaW5nIGJyZWFrcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChyZXN1bHRfbnMpLCBzZXQoZXhwZWN0ZWRfbnMpKQogICAgICAgICBmb3IgayBpbiByZXN1bHRfbnM6CiAgICAgICAgICAgICBhY3R1YWwgPSAoaywgcmVzdWx0X25zW2tdKQpAQCAtMTMwLDEyICsxNTcsMTYgQEAKICAgICAgICAgbW9kX2ZuYW1lID0gIlNvbWUgb3RoZXIgbm9uc2Vuc2UiCiAgICAgICAgIG1vZF9sb2FkZXIgPSAiTm93IHlvdSdyZSBqdXN0IGJlaW5nIHNpbGx5IgogICAgICAgICBtb2RfcGFja2FnZSA9ICcnICMgVHJlYXQgYXMgYSB0b3AgbGV2ZWwgbW9kdWxlCisgICAgICAgIG1vZF9zcGVjID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKG1vZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49bW9kX2ZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9bW9kX2xvYWRlcikKICAgICAgICAgZXhwZWN0ZWRfbnMgPSBleGFtcGxlX25hbWVzcGFjZS5jb3B5KCkKICAgICAgICAgZXhwZWN0ZWRfbnMudXBkYXRlKHsKICAgICAgICAgICAgICJfX25hbWVfXyI6IG1vZF9uYW1lLAogICAgICAgICAgICAgIl9fZmlsZV9fIjogbW9kX2ZuYW1lLAogICAgICAgICAgICAgIl9fbG9hZGVyX18iOiBtb2RfbG9hZGVyLAogICAgICAgICAgICAgIl9fcGFja2FnZV9fIjogbW9kX3BhY2thZ2UsCisgICAgICAgICAgICAiX19zcGVjX18iOiBtb2Rfc3BlYywKICAgICAgICAgICAgICJydW5fYXJndjAiOiBtb2RfZm5hbWUsCiAgICAgICAgICAgICAicnVuX25hbWVfaW5fc3lzX21vZHVsZXMiOiBUcnVlLAogICAgICAgICAgICAgIm1vZHVsZV9pbl9zeXNfbW9kdWxlcyI6IFRydWUsCkBAIC0xNDQsOSArMTc1LDcgQEAKICAgICAgICAgICAgIHJldHVybiBfcnVuX21vZHVsZV9jb2RlKGV4YW1wbGVfc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9nbG9iYWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfZm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kX3BhY2thZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rfc3BlYykKICAgICAgICAgc2VsZi5jaGVja19jb2RlX2V4ZWN1dGlvbihjcmVhdGVfbnMsIGV4cGVjdGVkX25zKQogCiAjIFRPRE86IFVzZSBzZWxmLmFkZENsZWFudXAgdG8gZ2V0IHJpZCBvZiBhIGxvdCBvZiB0cnktZmluYWxseSBibG9ja3MKQEAgLTE3NiwzMSArMjA1LDQzIEBACiAgICAgZGVmIHRlc3RfbGlicmFyeV9tb2R1bGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuX21vZHVsZSgicnVucHkiKVsiX19uYW1lX18iXSwgInJ1bnB5IikKIAotICAgIGRlZiBfYWRkX3BrZ19kaXIoc2VsZiwgcGtnX2Rpcik6CisgICAgZGVmIF9hZGRfcGtnX2RpcihzZWxmLCBwa2dfZGlyLCBuYW1lc3BhY2U9RmFsc2UpOgogICAgICAgICBvcy5ta2Rpcihwa2dfZGlyKQorICAgICAgICBpZiBuYW1lc3BhY2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBwa2dfZm5hbWUgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgIl9faW5pdF9fLnB5IikKICAgICAgICAgY3JlYXRlX2VtcHR5X2ZpbGUocGtnX2ZuYW1lKQogICAgICAgICByZXR1cm4gcGtnX2ZuYW1lCiAKLSAgICBkZWYgX21ha2VfcGtnKHNlbGYsIHNvdXJjZSwgZGVwdGgsIG1vZF9iYXNlPSJydW5weV90ZXN0Iik6CisgICAgZGVmIF9tYWtlX3BrZyhzZWxmLCBzb3VyY2UsIGRlcHRoLCBtb2RfYmFzZT0icnVucHlfdGVzdCIsCisgICAgICAgICAgICAgICAgICAgICAqLCBuYW1lc3BhY2U9RmFsc2UsIHBhcmVudF9uYW1lc3BhY2VzPUZhbHNlKToKKyAgICAgICAgIyBFbmZvcmNlIGEgY291cGxlIG9mIGludGVybmFsIHNhbml0eSBjaGVja3Mgb24gdGVzdCBjYXNlcworICAgICAgICBpZiAobmFtZXNwYWNlIG9yIHBhcmVudF9uYW1lc3BhY2VzKSBhbmQgbm90IGRlcHRoOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW4ndCBtYXJrIHRvcCBsZXZlbCBtb2R1bGUgYXMgYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVzcGFjZSBwYWNrYWdlIikKICAgICAgICAgcGtnX25hbWUgPSAiX19ydW5weV9wa2dfXyIKICAgICAgICAgdGVzdF9mbmFtZSA9IG1vZF9iYXNlK29zLmV4dHNlcCsicHkiCiAgICAgICAgIHBrZ19kaXIgPSBzdWJfZGlyID0gb3MucGF0aC5yZWFscGF0aCh0ZW1wZmlsZS5ta2R0ZW1wKCkpCiAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBQYWNrYWdlIHRyZWUgaW46Iiwgc3ViX2RpcikKICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHBrZ19kaXIpCiAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBVcGRhdGVkIHN5cy5wYXRoOiIsIHN5cy5wYXRoWzBdKQotICAgICAgICBmb3IgaSBpbiByYW5nZShkZXB0aCk6Ci0gICAgICAgICAgICBzdWJfZGlyID0gb3MucGF0aC5qb2luKHN1Yl9kaXIsIHBrZ19uYW1lKQotICAgICAgICAgICAgcGtnX2ZuYW1lID0gc2VsZi5fYWRkX3BrZ19kaXIoc3ViX2RpcikKLSAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBOZXh0IGxldmVsIGluOiIsIHN1Yl9kaXIpCi0gICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIiAgQ3JlYXRlZDoiLCBwa2dfZm5hbWUpCisgICAgICAgIGlmIGRlcHRoOgorICAgICAgICAgICAgbmFtZXNwYWNlX2ZsYWdzID0gW3BhcmVudF9uYW1lc3BhY2VzXSAqIGRlcHRoCisgICAgICAgICAgICBuYW1lc3BhY2VfZmxhZ3NbLTFdID0gbmFtZXNwYWNlCisgICAgICAgICAgICBmb3IgbmFtZXNwYWNlX2ZsYWcgaW4gbmFtZXNwYWNlX2ZsYWdzOgorICAgICAgICAgICAgICAgIHN1Yl9kaXIgPSBvcy5wYXRoLmpvaW4oc3ViX2RpciwgcGtnX25hbWUpCisgICAgICAgICAgICAgICAgcGtnX2ZuYW1lID0gc2VsZi5fYWRkX3BrZ19kaXIoc3ViX2RpciwgbmFtZXNwYWNlX2ZsYWcpCisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCIgIE5leHQgbGV2ZWwgaW46Iiwgc3ViX2RpcikKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIiAgQ3JlYXRlZDoiLCBwa2dfZm5hbWUpCiAgICAgICAgIG1vZF9mbmFtZSA9IG9zLnBhdGguam9pbihzdWJfZGlyLCB0ZXN0X2ZuYW1lKQogICAgICAgICBtb2RfZmlsZSA9IG9wZW4obW9kX2ZuYW1lLCAidyIpCiAgICAgICAgIG1vZF9maWxlLndyaXRlKHNvdXJjZSkKICAgICAgICAgbW9kX2ZpbGUuY2xvc2UoKQogICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIiAgQ3JlYXRlZDoiLCBtb2RfZm5hbWUpCiAgICAgICAgIG1vZF9uYW1lID0gKHBrZ19uYW1lKyIuIikqZGVwdGggKyBtb2RfYmFzZQotICAgICAgICByZXR1cm4gcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZQorICAgICAgICBtb2Rfc3BlYyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG1vZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9mbmFtZSkKKyAgICAgICAgcmV0dXJuIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUsIG1vZF9zcGVjCiAKICAgICBkZWYgX2RlbF9wa2coc2VsZiwgdG9wLCBkZXB0aCwgbW9kX25hbWUpOgogICAgICAgICBmb3IgZW50cnkgaW4gbGlzdChzeXMubW9kdWxlcyk6CkBAIC0yMzAsMTkgKzI3MSwyOSBAQAogICAgIGRlZiBfZml4X25zX2Zvcl9sZWdhY3lfcHljKHNlbGYsIG5zLCBhbHRlcl9zeXMpOgogICAgICAgICBjaGFyX3RvX2FkZCA9ICJjIiBpZiBfX2RlYnVnX18gZWxzZSAibyIKICAgICAgICAgbnNbIl9fZmlsZV9fIl0gKz0gY2hhcl90b19hZGQKKyAgICAgICAgbnNbIl9fY2FjaGVkX18iXSA9IG5zWyJfX2ZpbGVfXyJdCisgICAgICAgIHNwZWMgPSBuc1siX19zcGVjX18iXQorICAgICAgICBuZXdfc3BlYyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNwZWMubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1siX19maWxlX18iXSkKKyAgICAgICAgbnNbIl9fc3BlY19fIl0gPSBuZXdfc3BlYwogICAgICAgICBpZiBhbHRlcl9zeXM6CiAgICAgICAgICAgICBuc1sicnVuX2FyZ3YwIl0gKz0gY2hhcl90b19hZGQKIAogCi0gICAgZGVmIF9jaGVja19tb2R1bGUoc2VsZiwgZGVwdGgsIGFsdGVyX3N5cz1GYWxzZSk6Ci0gICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCi0gICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhleGFtcGxlX3NvdXJjZSwgZGVwdGgpKQorICAgIGRlZiBfY2hlY2tfbW9kdWxlKHNlbGYsIGRlcHRoLCBhbHRlcl9zeXM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiwgbmFtZXNwYWNlPUZhbHNlLCBwYXJlbnRfbmFtZXNwYWNlcz1GYWxzZSk6CisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUsIG1vZF9zcGVjID0gKAorICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coZXhhbXBsZV9zb3VyY2UsIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlPW5hbWVzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF9uYW1lc3BhY2VzPXBhcmVudF9uYW1lc3BhY2VzKSkKICAgICAgICAgZm9yZ2V0KG1vZF9uYW1lKQogICAgICAgICBleHBlY3RlZF9ucyA9IGV4YW1wbGVfbmFtZXNwYWNlLmNvcHkoKQogICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewogICAgICAgICAgICAgIl9fbmFtZV9fIjogbW9kX25hbWUsCiAgICAgICAgICAgICAiX19maWxlX18iOiBtb2RfZm5hbWUsCisgICAgICAgICAgICAiX19jYWNoZWRfXyI6IG1vZF9zcGVjLmNhY2hlZCwKICAgICAgICAgICAgICJfX3BhY2thZ2VfXyI6IG1vZF9uYW1lLnJwYXJ0aXRpb24oIi4iKVswXSwKKyAgICAgICAgICAgICJfX3NwZWNfXyI6IG1vZF9zcGVjLAogICAgICAgICB9KQogICAgICAgICBpZiBhbHRlcl9zeXM6CiAgICAgICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewpAQCAtMjY5LDE2ICszMjAsMjEgQEAKICAgICAgICAgICAgIHNlbGYuX2RlbF9wa2cocGtnX2RpciwgZGVwdGgsIG1vZF9uYW1lKQogICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIk1vZHVsZSBleGVjdXRlZCBzdWNjZXNzZnVsbHkiKQogCi0gICAgZGVmIF9jaGVja19wYWNrYWdlKHNlbGYsIGRlcHRoLCBhbHRlcl9zeXM9RmFsc2UpOgotICAgICAgICBwa2dfZGlyLCBtb2RfZm5hbWUsIG1vZF9uYW1lID0gKAotICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coZXhhbXBsZV9zb3VyY2UsIGRlcHRoLCAiX19tYWluX18iKSkKKyAgICBkZWYgX2NoZWNrX3BhY2thZ2Uoc2VsZiwgZGVwdGgsIGFsdGVyX3N5cz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKiwgbmFtZXNwYWNlPUZhbHNlLCBwYXJlbnRfbmFtZXNwYWNlcz1GYWxzZSk6CisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUsIG1vZF9zcGVjID0gKAorICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coZXhhbXBsZV9zb3VyY2UsIGRlcHRoLCAiX19tYWluX18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlPW5hbWVzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF9uYW1lc3BhY2VzPXBhcmVudF9uYW1lc3BhY2VzKSkKICAgICAgICAgcGtnX25hbWUgPSBtb2RfbmFtZS5ycGFydGl0aW9uKCIuIilbMF0KICAgICAgICAgZm9yZ2V0KG1vZF9uYW1lKQogICAgICAgICBleHBlY3RlZF9ucyA9IGV4YW1wbGVfbmFtZXNwYWNlLmNvcHkoKQogICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewogICAgICAgICAgICAgIl9fbmFtZV9fIjogbW9kX25hbWUsCiAgICAgICAgICAgICAiX19maWxlX18iOiBtb2RfZm5hbWUsCisgICAgICAgICAgICAiX19jYWNoZWRfXyI6IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1vZF9mbmFtZSksCiAgICAgICAgICAgICAiX19wYWNrYWdlX18iOiBwa2dfbmFtZSwKKyAgICAgICAgICAgICJfX3NwZWNfXyI6IG1vZF9zcGVjLAogICAgICAgICB9KQogICAgICAgICBpZiBhbHRlcl9zeXM6CiAgICAgICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewpAQCAtMzM0LDcgKzM5MCw3IEBACiBmcm9tIC4gaW1wb3J0IHNpYmxpbmcKIGZyb20gLi51bmNsZS5jb3VzaW4gaW1wb3J0IG5lcGhldwogIiIiCi0gICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUsIG1vZF9zcGVjID0gKAogICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coY29udGVudHMsIGRlcHRoKSkKICAgICAgICAgaWYgcnVuX25hbWUgaXMgTm9uZToKICAgICAgICAgICAgIGV4cGVjdGVkX25hbWUgPSBtb2RfbmFtZQpAQCAtMzczLDExICs0MjksMzEgQEAKICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiVGVzdGluZyBwYWNrYWdlIGRlcHRoOiIsIGRlcHRoKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfbW9kdWxlKGRlcHRoKQogCisgICAgZGVmIHRlc3RfcnVuX21vZHVsZV9pbl9uYW1lc3BhY2VfcGFja2FnZShzZWxmKToKKyAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDEsIDQpOgorICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCisgICAgICAgICAgICBzZWxmLl9jaGVja19tb2R1bGUoZGVwdGgsIG5hbWVzcGFjZT1UcnVlLCBwYXJlbnRfbmFtZXNwYWNlcz1UcnVlKQorCiAgICAgZGVmIHRlc3RfcnVuX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSgxLCA0KToKICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiVGVzdGluZyBwYWNrYWdlIGRlcHRoOiIsIGRlcHRoKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGFja2FnZShkZXB0aCkKIAorICAgIGRlZiB0ZXN0X3J1bl9wYWNrYWdlX2luX25hbWVzcGFjZV9wYWNrYWdlKHNlbGYpOgorICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMSwgNCk6CisgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIlRlc3RpbmcgcGFja2FnZSBkZXB0aDoiLCBkZXB0aCkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3BhY2thZ2UoZGVwdGgsIHBhcmVudF9uYW1lc3BhY2VzPVRydWUpCisKKyAgICBkZWYgdGVzdF9ydW5fbmFtZXNwYWNlX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSgxLCA0KToKKyAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiVGVzdGluZyBwYWNrYWdlIGRlcHRoOiIsIGRlcHRoKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGFja2FnZShkZXB0aCwgbmFtZXNwYWNlPVRydWUpCisKKyAgICBkZWYgdGVzdF9ydW5fbmFtZXNwYWNlX3BhY2thZ2VfaW5fbmFtZXNwYWNlX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSgxLCA0KToKKyAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiVGVzdGluZyBwYWNrYWdlIGRlcHRoOiIsIGRlcHRoKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGFja2FnZShkZXB0aCwgbmFtZXNwYWNlPVRydWUsIHBhcmVudF9uYW1lc3BhY2VzPVRydWUpCisKICAgICBkZWYgdGVzdF9ydW5fbW9kdWxlX2FsdGVyX3N5cyhzZWxmKToKICAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDQpOgogICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCkBAIC00MDEsMTQgKzQ3NywxNiBAQAogICAgIGRlZiB0ZXN0X3J1bl9uYW1lKHNlbGYpOgogICAgICAgICBkZXB0aCA9IDEKICAgICAgICAgcnVuX25hbWUgPSAiQW5kIG5vdyBmb3Igc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IgotICAgICAgICBwa2dfZGlyLCBtb2RfZm5hbWUsIG1vZF9uYW1lID0gKAorICAgICAgICBwa2dfZGlyLCBtb2RfZm5hbWUsIG1vZF9uYW1lLCBtb2Rfc3BlYyA9ICgKICAgICAgICAgICAgICAgIHNlbGYuX21ha2VfcGtnKGV4YW1wbGVfc291cmNlLCBkZXB0aCkpCiAgICAgICAgIGZvcmdldChtb2RfbmFtZSkKICAgICAgICAgZXhwZWN0ZWRfbnMgPSBleGFtcGxlX25hbWVzcGFjZS5jb3B5KCkKICAgICAgICAgZXhwZWN0ZWRfbnMudXBkYXRlKHsKICAgICAgICAgICAgICJfX25hbWVfXyI6IHJ1bl9uYW1lLAogICAgICAgICAgICAgIl9fZmlsZV9fIjogbW9kX2ZuYW1lLAorICAgICAgICAgICAgIl9fY2FjaGVkX18iOiBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShtb2RfZm5hbWUpLAogICAgICAgICAgICAgIl9fcGFja2FnZV9fIjogbW9kX25hbWUucnBhcnRpdGlvbigiLiIpWzBdLAorICAgICAgICAgICAgIl9fc3BlY19fIjogbW9kX3NwZWMsCiAgICAgICAgIH0pCiAgICAgICAgIGRlZiBjcmVhdGVfbnMoaW5pdF9nbG9iYWxzKToKICAgICAgICAgICAgIHJldHVybiBydW5fbW9kdWxlKG1vZF9uYW1lLCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lKQpAQCAtNDM3LDcgKzUxNSw3IEBACiAgICAgICAgIHBrZ19uYW1lID0gIi4iLmpvaW4oW2Jhc2VfbmFtZV0gKiBtYXhfZGVwdGgpCiAgICAgICAgIGV4cGVjdGVkX3BhY2thZ2VzLmFkZChwa2dfbmFtZSkKICAgICAgICAgZXhwZWN0ZWRfbW9kdWxlcy5hZGQocGtnX25hbWUgKyAiLnJ1bnB5X3Rlc3QiKQotICAgICAgICBwa2dfZGlyLCBtb2RfZm5hbWUsIG1vZF9uYW1lID0gKAorICAgICAgICBwa2dfZGlyLCBtb2RfZm5hbWUsIG1vZF9uYW1lLCBtb2Rfc3BlYyA9ICgKICAgICAgICAgICAgICAgIHNlbGYuX21ha2VfcGtnKCIiLCBtYXhfZGVwdGgpKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5fZGVsX3BrZywgcGtnX2RpciwgbWF4X2RlcHRoLCBtb2RfbmFtZSkKICAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDIsIG1heF9kZXB0aCsxKToKQEAgLTQ1NSwyMSArNTMzLDM5IEBACiBjbGFzcyBSdW5QYXRoVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIENvZGVFeGVjdXRpb25NaXhpbik6CiAgICAgIiIiVW5pdCB0ZXN0cyBmb3IgcnVucHkucnVuX3BhdGgiIiIKIAotICAgIGRlZiBfbWFrZV90ZXN0X3NjcmlwdChzZWxmLCBzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZT1Ob25lKToKKyAgICBkZWYgX21ha2VfdGVzdF9zY3JpcHQoc2VsZiwgc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9Tm9uZSwgb21pdF9zdWZmaXg9RmFsc2UpOgogICAgICAgICBpZiBzb3VyY2UgaXMgTm9uZToKICAgICAgICAgICAgIHNvdXJjZSA9IGV4YW1wbGVfc291cmNlCi0gICAgICAgIHJldHVybiBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKKyAgICAgICAgcmV0dXJuIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgb21pdF9zdWZmaXgpCiAKICAgICBkZWYgX2NoZWNrX3NjcmlwdChzZWxmLCBzY3JpcHRfbmFtZSwgZXhwZWN0ZWRfbmFtZSwgZXhwZWN0ZWRfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hcmd2MCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYXJndjAsIG1vZF9uYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0X3NwZWM9VHJ1ZSwgY2hlY2tfbG9hZGVyPVRydWUpOgogICAgICAgICAjIEZpcnN0IGNoZWNrIGlzIHdpdGhvdXQgcnVuX25hbWUKICAgICAgICAgZGVmIGNyZWF0ZV9ucyhpbml0X2dsb2JhbHMpOgogICAgICAgICAgICAgcmV0dXJuIHJ1bl9wYXRoKHNjcmlwdF9uYW1lLCBpbml0X2dsb2JhbHMpCiAgICAgICAgIGV4cGVjdGVkX25zID0gZXhhbXBsZV9uYW1lc3BhY2UuY29weSgpCisgICAgICAgIGlmIG1vZF9uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBzcGVjX25hbWUgPSBleHBlY3RlZF9uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGVjX25hbWUgPSBtb2RfbmFtZQorICAgICAgICBpZiBleHBlY3Rfc3BlYzoKKyAgICAgICAgICAgIG1vZF9zcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc3BlY19uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlKQorICAgICAgICAgICAgbW9kX2NhY2hlZCA9IG1vZF9zcGVjLmNhY2hlZAorICAgICAgICAgICAgaWYgbm90IGNoZWNrX2xvYWRlcjoKKyAgICAgICAgICAgICAgICBtb2Rfc3BlYy5sb2FkZXIgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2Rfc3BlYyA9IG1vZF9jYWNoZWQgPSBOb25lCisKICAgICAgICAgZXhwZWN0ZWRfbnMudXBkYXRlKHsKICAgICAgICAgICAgICJfX25hbWVfXyI6IGV4cGVjdGVkX25hbWUsCiAgICAgICAgICAgICAiX19maWxlX18iOiBleHBlY3RlZF9maWxlLAorICAgICAgICAgICAgIl9fY2FjaGVkX18iOiBtb2RfY2FjaGVkLAogICAgICAgICAgICAgIl9fcGFja2FnZV9fIjogIiIsCisgICAgICAgICAgICAiX19zcGVjX18iOiBtb2Rfc3BlYywKICAgICAgICAgICAgICJydW5fYXJndjAiOiBleHBlY3RlZF9hcmd2MCwKICAgICAgICAgICAgICJydW5fbmFtZV9pbl9zeXNfbW9kdWxlcyI6IFRydWUsCiAgICAgICAgICAgICAibW9kdWxlX2luX3N5c19tb2R1bGVzIjogVHJ1ZSwKQEAgLTQ3OSw2ICs1NzUsMTIgQEAKICAgICAgICAgcnVuX25hbWUgPSAicHJvdmUuaXNzdWUxNTIzMC5pcy5maXhlZCIKICAgICAgICAgZGVmIGNyZWF0ZV9ucyhpbml0X2dsb2JhbHMpOgogICAgICAgICAgICAgcmV0dXJuIHJ1bl9wYXRoKHNjcmlwdF9uYW1lLCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lKQorICAgICAgICBpZiBleHBlY3Rfc3BlYyBhbmQgbW9kX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIG1vZF9zcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24ocnVuX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGUpCisgICAgICAgICAgICBpZiBub3QgY2hlY2tfbG9hZGVyOgorICAgICAgICAgICAgICAgIG1vZF9zcGVjLmxvYWRlciA9IE5vbmUKKyAgICAgICAgICAgIGV4cGVjdGVkX25zWyJfX3NwZWNfXyJdID0gbW9kX3NwZWMKICAgICAgICAgZXhwZWN0ZWRfbnNbIl9fbmFtZV9fIl0gPSBydW5fbmFtZQogICAgICAgICBleHBlY3RlZF9uc1siX19wYWNrYWdlX18iXSA9IHJ1bl9uYW1lLnJwYXJ0aXRpb24oIi4iKVswXQogICAgICAgICBzZWxmLmNoZWNrX2NvZGVfZXhlY3V0aW9uKGNyZWF0ZV9ucywgZXhwZWN0ZWRfbnMpCkBAIC00OTIsNyArNTk0LDE1IEBACiAgICAgICAgICAgICBtb2RfbmFtZSA9ICdzY3JpcHQnCiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCiAgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X25hbWUsICI8cnVuX3BhdGg+Iiwgc2NyaXB0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsIGV4cGVjdF9zcGVjPUZhbHNlKQorCisgICAgZGVmIHRlc3RfYmFzaWNfc2NyaXB0X25vX3N1ZmZpeChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdzY3JpcHQnCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb21pdF9zdWZmaXg9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSwgIjxydW5fcGF0aD4iLCBzY3JpcHRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgZXhwZWN0X3NwZWM9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9zY3JpcHRfY29tcGlsZWQoc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgpAQCAtNTAxLDE0ICs2MTEsMTQgQEAKICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKICAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChjb21waWxlZF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGNvbXBpbGVkX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZWRfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZF9uYW1lLCBleHBlY3Rfc3BlYz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCAiPHJ1bl9wYXRoPiIsIHNjcmlwdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9kaXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpciwgbW9kX25hbWU9bW9kX25hbWUpCiAKICAgICBkZWYgdGVzdF9kaXJlY3RvcnlfY29tcGlsZWQoc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgpAQCAtNTE5LDcgKzYyOSw3IEBACiAgICAgICAgICAgICBpZiBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6CiAgICAgICAgICAgICAgICAgbGVnYWN5X3B5YyA9IG1ha2VfbGVnYWN5X3B5YyhzY3JpcHRfbmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X2RpciwgIjxydW5fcGF0aD4iLCBsZWdhY3lfcHljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfZGlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfZGlyLCBtb2RfbmFtZT1tb2RfbmFtZSkKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9lcnJvcihzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01MzMsNyArNjQzLDggQEAKICAgICAgICAgICAgIG1vZF9uYW1lID0gJ19fbWFpbl9fJwogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQogICAgICAgICAgICAgemlwX25hbWUsIGZuYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQotICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGZuYW1lLCB6aXBfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSwgIjxydW5fcGF0aD4iLCBmbmFtZSwgemlwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kX25hbWU9bW9kX25hbWUsIGNoZWNrX2xvYWRlcj1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X3ppcGZpbGVfY29tcGlsZWQoc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgpAQCAtNTQyLDcgKzY1Myw4IEBACiAgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCiAgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZF9uYW1lKQotICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGZuYW1lLCB6aXBfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSwgIjxydW5fcGF0aD4iLCBmbmFtZSwgemlwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kX25hbWU9bW9kX25hbWUsIGNoZWNrX2xvYWRlcj1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X3ppcGZpbGVfZXJyb3Ioc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgpAQCAtNTc1LDEyICs2ODcsNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbJ3MnXSwgIm5vbi1BU0NJSTogaFx4ZTkiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoCi0gICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkxheWVyVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgIFJ1bk1vZHVsZVRlc3RDYXNlLAotICAgICAgICAgICAgICAgICBSdW5QYXRoVGVzdENhc2UKLSAgICAgICAgICAgICAgICAgKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5IGIvTGliL3Rlc3QvdGVzdF9zY2hlZC5weQppbmRleCA3OWZhN2QzLi5mZThlNzg1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkKQEAgLTE5NSw4ICsxOTUsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFtdKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0Q2FzZSkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zY29wZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKaW5kZXggMjZjZTA0Mi4uYjMyNTU0NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zY29wZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CkBAIC03MTUsNiArNzE1LDE5IEBACiAgICAgICAgIGRlZiBiKCk6CiAgICAgICAgICAgICBnbG9iYWwgYQogCisgICAgZGVmIHRlc3RDbGFzc05hbWVzcGFjZU92ZXJyaWRlc0Nsb3N1cmUoc2VsZik6CisgICAgICAgICMgU2VlICMxNzg1My4KKyAgICAgICAgeCA9IDQyCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBsb2NhbHMoKVsieCJdID0gNDMKKyAgICAgICAgICAgIHkgPSB4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC55LCA0MykKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIGxvY2FscygpWyJ4Il0gPSA0MworICAgICAgICAgICAgZGVsIHgKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKFgsICJ4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgNDIpCisKICAgICBAY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RDZWxsTGVhayhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxNzkyNy4KQEAgLTc0MywxMCArNzU2LDYgQEAKICAgICAgICAgZGVsIHRlc3RlcgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWYoKSkKIAotICAgIGRlZiB0ZXN0X19DbGFzc19fR2xvYmFsKHNlbGYpOgotICAgICAgICBzID0gImNsYXNzIFg6XG4gICAgZ2xvYmFsIF9fY2xhc3NfX1xuICAgIGRlZiBmKHNlbGYpOiBzdXBlcigpIgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXhlYywgcykKLQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFNjb3BlVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CmluZGV4IGRkYjlhMGYuLjhmOWExYzkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CkBAIC01LDcgKzUsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAotQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ29zMicsICdyaXNjb3MnKSwKK0B1bml0dGVzdC5za2lwSWYoKHN5cy5wbGF0Zm9ybVs6M109PSd3aW4nKSwKICAgICAgICAgICAgICAgICAgImNhbid0IGVhc2lseSB0ZXN0IG9uIHRoaXMgc3lzdGVtIikKIGNsYXNzIFNlbGVjdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW2ZkXSwgW10sIFtdLCAwKQotICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXJybm8sIGVycm5vLkVCQURGKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4Y2VwdGlvbiBub3QgcmFpc2VkIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0b3JzLnB5IGIvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlZGQ3NgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0b3JzLnB5CkBAIC0wLDAgKzEsNDUzIEBACitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCit0cnk6CisgICAgZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgdGltZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyB0aW1lCit0cnk6CisgICAgaW1wb3J0IHJlc291cmNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcmVzb3VyY2UgPSBOb25lCisKKworaWYgaGFzYXR0cihzb2NrZXQsICdzb2NrZXRwYWlyJyk6CisgICAgc29ja2V0cGFpciA9IHNvY2tldC5zb2NrZXRwYWlyCitlbHNlOgorICAgIGRlZiBzb2NrZXRwYWlyKGZhbWlseT1zb2NrZXQuQUZfSU5FVCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPTApOgorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bykgYXMgbDoKKyAgICAgICAgICAgIGwuYmluZCgoc3VwcG9ydC5IT1NULCAwKSkKKyAgICAgICAgICAgIGwubGlzdGVuKDMpCisgICAgICAgICAgICBjID0gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGMuY29ubmVjdChsLmdldHNvY2tuYW1lKCkpCisgICAgICAgICAgICAgICAgY2FkZHIgPSBjLmdldHNvY2tuYW1lKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBhLCBhZGRyID0gbC5hY2NlcHQoKQorICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHRoYXQgd2UndmUgZ290IHRoZSBjb3JyZWN0IGNsaWVudAorICAgICAgICAgICAgICAgICAgICBpZiBhZGRyID09IGNhZGRyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMsIGEKKyAgICAgICAgICAgICAgICAgICAgYS5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorCisKK2RlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKKyAgICBtYXRjaCA9IFtdCisgICAgZm9yIGtleSwgZXZlbnRzIGluIHJlYWR5OgorICAgICAgICBpZiBldmVudHMgJiBmbGFnOgorICAgICAgICAgICAgbWF0Y2guYXBwZW5kKGtleS5maWxlb2JqKQorICAgIHJldHVybiBtYXRjaAorCisKK2NsYXNzIEJhc2VTZWxlY3RvclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBtYWtlX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKyAgICAgICAgcmV0dXJuIHJkLCB3cgorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAiZGF0YSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShrZXksIHNlbGVjdG9ycy5TZWxlY3RvcktleSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZmlsZW9iaiwgcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmZkLCByZC5maWxlbm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZXZlbnRzLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZGF0YSwgImRhdGEiKQorCisgICAgICAgICMgcmVnaXN0ZXIgYW4gdW5rbm93biBldmVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJlZ2lzdGVyLCAwLCA5OTk5OTkpCisKKyAgICAgICAgIyByZWdpc3RlciBhbiBpbnZhbGlkIEZECisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMucmVnaXN0ZXIsIC0xMCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgIyByZWdpc3RlciB0d2ljZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5yZWdpc3RlciwgcmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICMgcmVnaXN0ZXIgdGhlIHNhbWUgRkQsIGJ1dCB3aXRoIGEgZGlmZmVyZW50IG9iamVjdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5yZWdpc3RlciwgcmQuZmlsZW5vKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgZGVmIHRlc3RfdW5yZWdpc3RlcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHMudW5yZWdpc3RlcihyZCkKKworICAgICAgICAjIHVucmVnaXN0ZXIgYW4gdW5rbm93biBmaWxlIG9iagorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy51bnJlZ2lzdGVyLCA5OTk5OTkpCisKKyAgICAgICAgIyB1bnJlZ2lzdGVyIHR3aWNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnVucmVnaXN0ZXIsIHJkKQorCisgICAgZGVmIHRlc3RfdW5yZWdpc3Rlcl9hZnRlcl9mZF9jbG9zZShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorICAgICAgICByLCB3ID0gcmQuZmlsZW5vKCksIHdyLmZpbGVubygpCisgICAgICAgIHMucmVnaXN0ZXIociwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHMucmVnaXN0ZXIodywgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICByZC5jbG9zZSgpCisgICAgICAgIHdyLmNsb3NlKCkKKyAgICAgICAgcy51bnJlZ2lzdGVyKHIpCisgICAgICAgIHMudW5yZWdpc3Rlcih3KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAicmVxdWlyZXMgcG9zaXgiKQorICAgIGRlZiB0ZXN0X3VucmVnaXN0ZXJfYWZ0ZXJfZmRfY2xvc2VfYW5kX3JldXNlKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisgICAgICAgIHIsIHcgPSByZC5maWxlbm8oKSwgd3IuZmlsZW5vKCkKKyAgICAgICAgcy5yZWdpc3RlcihyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy5yZWdpc3Rlcih3LCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgIHJkMiwgd3IyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorICAgICAgICByZC5jbG9zZSgpCisgICAgICAgIHdyLmNsb3NlKCkKKyAgICAgICAgb3MuZHVwMihyZDIuZmlsZW5vKCksIHIpCisgICAgICAgIG9zLmR1cDIod3IyLmZpbGVubygpLCB3KQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgdykKKyAgICAgICAgcy51bnJlZ2lzdGVyKHIpCisgICAgICAgIHMudW5yZWdpc3Rlcih3KQorCisgICAgZGVmIHRlc3RfdW5yZWdpc3Rlcl9hZnRlcl9zb2NrZXRfY2xvc2Uoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgcmQuY2xvc2UoKQorICAgICAgICB3ci5jbG9zZSgpCisgICAgICAgIHMudW5yZWdpc3RlcihyZCkKKyAgICAgICAgcy51bnJlZ2lzdGVyKHdyKQorCisgICAgZGVmIHRlc3RfbW9kaWZ5KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKworICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAjIG1vZGlmeSBldmVudHMKKyAgICAgICAga2V5MiA9IHMubW9kaWZ5KHJkLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmV2ZW50cywga2V5Mi5ldmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5Miwgcy5nZXRfa2V5KHJkKSkKKworICAgICAgICBzLnVucmVnaXN0ZXIocmQpCisKKyAgICAgICAgIyBtb2RpZnkgZGF0YQorICAgICAgICBkMSA9IG9iamVjdCgpCisgICAgICAgIGQyID0gb2JqZWN0KCkKKworICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgZDEpCisgICAgICAgIGtleTIgPSBzLm1vZGlmeShyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5ldmVudHMsIGtleTIuZXZlbnRzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5kYXRhLCBrZXkyLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5Miwgcy5nZXRfa2V5KHJkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkyLmRhdGEsIGQyKQorCisgICAgICAgICMgbW9kaWZ5IHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMubW9kaWZ5LCA5OTk5OTksIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICMgbW9kaWZ5IHVzZSBhIHNob3J0Y3V0CisgICAgICAgIGQzID0gb2JqZWN0KCkKKyAgICAgICAgcy5yZWdpc3RlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHMudW5yZWdpc3RlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgcy5tb2RpZnkocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCBkMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLnVucmVnaXN0ZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisKKyAgICAgICAgcy5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIHJkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCB3cikKKworICAgIGRlZiB0ZXN0X2dldF9rZXkoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAiZGF0YSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LCBzLmdldF9rZXkocmQpKQorCisgICAgICAgICMgdW5rbm93biBmaWxlIG9iagorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCA5OTk5OTkpCisKKyAgICBkZWYgdGVzdF9nZXRfbWFwKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKworICAgICAgICBrZXlzID0gcy5nZXRfbWFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrZXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihrZXlzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGtleXMpLCBbXSkKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsICJkYXRhIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZCwga2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXksIGtleXNbcmRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihrZXlzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGtleXMpLCBbcmQuZmlsZW5vKCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoa2V5cy52YWx1ZXMoKSksIFtrZXldKQorCisgICAgICAgICMgdW5rbm93biBmaWxlIG9iagorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIGtleXNbOTk5OTk5XQorCisgICAgICAgICMgUmVhZC1vbmx5IG1hcHBpbmcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZGVsIGtleXNbcmRdCisKKyAgICBkZWYgdGVzdF9zZWxlY3Qoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICB3cl9rZXkgPSBzLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisKKyAgICAgICAgcmVzdWx0ID0gcy5zZWxlY3QoKQorICAgICAgICBmb3Iga2V5LCBldmVudHMgaW4gcmVzdWx0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoa2V5LCBzZWxlY3RvcnMuU2VsZWN0b3JLZXkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2ZW50cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXZlbnRzICYgfihzZWxlY3RvcnMuRVZFTlRfUkVBRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsod3Jfa2V5LCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpXSwgcmVzdWx0KQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKworICAgICAgICB3aXRoIHMgYXMgc2VsOgorICAgICAgICAgICAgc2VsLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHNlbC5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIHJkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCB3cikKKworICAgIGRlZiB0ZXN0X2ZpbGVubyhzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICBpZiBoYXNhdHRyKHMsICdmaWxlbm8nKToKKyAgICAgICAgICAgIGZkID0gcy5maWxlbm8oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZmQsIGludCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChmZCwgMCkKKworICAgIGRlZiB0ZXN0X3NlbGVjdG9yKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIE5VTV9TT0NLRVRTID0gMTIKKyAgICAgICAgTVNHID0gYiIgVGhpcyBpcyBhIHRlc3QuIgorICAgICAgICBNU0dfTEVOID0gbGVuKE1TRykKKyAgICAgICAgcmVhZGVycyA9IFtdCisgICAgICAgIHdyaXRlcnMgPSBbXQorICAgICAgICByMncgPSB7fQorICAgICAgICB3MnIgPSB7fQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKE5VTV9TT0NLRVRTKToKKyAgICAgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKyAgICAgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICAgICAgcmVhZGVycy5hcHBlbmQocmQpCisgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZCh3cikKKyAgICAgICAgICAgIHIyd1tyZF0gPSB3cgorICAgICAgICAgICAgdzJyW3dyXSA9IHJkCisKKyAgICAgICAgYnVmcyA9IFtdCisKKyAgICAgICAgd2hpbGUgd3JpdGVyczoKKyAgICAgICAgICAgIHJlYWR5ID0gcy5zZWxlY3QoKQorICAgICAgICAgICAgcmVhZHlfd3JpdGVycyA9IGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgIGlmIG5vdCByZWFkeV93cml0ZXJzOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gc29ja2V0cyByZWFkeSBmb3Igd3JpdGluZyIpCisgICAgICAgICAgICB3ciA9IHJhbmRvbS5jaG9pY2UocmVhZHlfd3JpdGVycykKKyAgICAgICAgICAgIHdyLnNlbmQoTVNHKQorCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgcmVhZHkgPSBzLnNlbGVjdCgpCisgICAgICAgICAgICAgICAgcmVhZHlfcmVhZGVycyA9IGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICAgICAgaWYgcmVhZHlfcmVhZGVyczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAjIHRoZXJlIG1pZ2h0IGJlIGEgZGVsYXkgYmV0d2VlbiB0aGUgd3JpdGUgdG8gdGhlIHdyaXRlIGVuZCBhbmQKKyAgICAgICAgICAgICAgICAjIHRoZSByZWFkIGVuZCBpcyByZXBvcnRlZCByZWFkeQorICAgICAgICAgICAgICAgIHNsZWVwKDAuMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBzb2NrZXRzIHJlYWR5IGZvciByZWFkaW5nIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3cyclt3cl1dLCByZWFkeV9yZWFkZXJzKQorICAgICAgICAgICAgcmQgPSByZWFkeV9yZWFkZXJzWzBdCisgICAgICAgICAgICBidWYgPSByZC5yZWN2KE1TR19MRU4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCBNU0dfTEVOKQorICAgICAgICAgICAgYnVmcy5hcHBlbmQoYnVmKQorICAgICAgICAgICAgcy51bnJlZ2lzdGVyKHIyd1tyZF0pCisgICAgICAgICAgICBzLnVucmVnaXN0ZXIocmQpCisgICAgICAgICAgICB3cml0ZXJzLnJlbW92ZShyMndbcmRdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmcywgW01TR10gKiBOVU1fU09DS0VUUykKKworICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihzLnNlbGVjdCgwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHMuc2VsZWN0KC0xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh0aW1lKCkgLSB0LCAwLjUpCisKKyAgICAgICAgcy51bnJlZ2lzdGVyKHdyKQorICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHRpbWUoKSAtIHQsIDAuNSkKKworICAgICAgICB0MCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDEpKQorICAgICAgICB0MSA9IHRpbWUoKQorICAgICAgICBkdCA9IHQxIC0gdDAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuOCA8PSBkdCA8PSAxLjYsIGR0KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICJhbGFybSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzaWduYWwuYWxhcm0oKSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9zZWxlY3RfaW50ZXJydXB0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKworICAgICAgICBvcmlnX2Fscm1faGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGxhbWJkYSAqYXJnczogTm9uZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNpZ25hbC5zaWduYWwsIHNpZ25hbC5TSUdBTFJNLCBvcmlnX2Fscm1faGFuZGxlcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNpZ25hbC5hbGFybSwgMCkKKworICAgICAgICBzaWduYWwuYWxhcm0oMSkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDIpKQorICAgICAgICBzZWxmLmFzc2VydExlc3ModGltZSgpIC0gdCwgMi41KQorCisKK2NsYXNzIFNjYWxhYmxlU2VsZWN0b3JNaXhJbjoKKworICAgICMgc2VlIGlzc3VlICMxODk2MyBmb3Igd2h5IGl0J3Mgc2tpcHBlZCBvbiBvbGRlciBPUyBYIHZlcnNpb25zCisgICAgQHN1cHBvcnQucmVxdWlyZXNfbWFjX3ZlcigxMCwgNSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhyZXNvdXJjZSwgIlRlc3QgbmVlZHMgcmVzb3VyY2UgbW9kdWxlIikKKyAgICBkZWYgdGVzdF9hYm92ZV9mZF9zZXRzaXplKHNlbGYpOgorICAgICAgICAjIEEgc2NhbGFibGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIGhhdmUgbm8gcHJvYmxlbSB3aXRoIG1vcmUgdGhhbgorICAgICAgICAjIEZEX1NFVFNJWkUgZmlsZSBkZXNjcmlwdG9ycy4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgdmFsdWUsIHdlIGp1c3QKKyAgICAgICAgIyB0cnkgdG8gc2V0IHRoZSBzb2Z0IFJMSU1JVF9OT0ZJTEUgdG8gdGhlIGhhcmQgUkxJTUlUX05PRklMRSBjZWlsaW5nLgorICAgICAgICBzb2Z0LCBoYXJkID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9OT0ZJTEUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfTk9GSUxFLCAoaGFyZCwgaGFyZCkpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzb3VyY2Uuc2V0cmxpbWl0LCByZXNvdXJjZS5STElNSVRfTk9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2Z0LCBoYXJkKSkKKyAgICAgICAgICAgIE5VTV9GRFMgPSBoYXJkCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICBOVU1fRkRTID0gc29mdAorCisgICAgICAgICMgZ3VhcmQgZm9yIGFscmVhZHkgYWxsb2NhdGVkIEZEcyAoc3RkaW4sIHN0ZG91dC4uLikKKyAgICAgICAgTlVNX0ZEUyAtPSAzMgorCisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNX0ZEUyAvLyAyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIHRvbyBtYW55IEZEcywgc2tpcCAtIG5vdGUgdGhhdCB3ZSBzaG91bGQgb25seSBjYXRjaCBFTUZJTEUKKyAgICAgICAgICAgICAgICAjIGhlcmUsIGJ1dCBhcHBhcmVudGx5ICpCU0QgYW5kIFNvbGFyaXMgY2FuIGZhaWwgdXBvbiBjb25uZWN0KCkKKyAgICAgICAgICAgICAgICAjIG9yIGJpbmQoKSB3aXRoIEVBRERSTk9UQVZBSUwsIHNvIGxldCdzIGJlIHNhZmUKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJGRCBsaW1pdCByZWFjaGVkIikKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TUEM6CisgICAgICAgICAgICAgICAgICAgICMgdGhpcyBjYW4gYmUgcmFpc2VkIGJ5IGVwb2xsIGlmIHdlIGdvIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgIyBmcy5lcG9sbC5tYXhfdXNlcl93YXRjaGVzIHN5c2N0bAorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJGRCBsaW1pdCByZWFjaGVkIikKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlVNX0ZEUyAvLyAyLCBsZW4ocy5zZWxlY3QoKSkpCisKKworY2xhc3MgRGVmYXVsdFNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UpOgorCisgICAgU0VMRUNUT1IgPSBzZWxlY3RvcnMuRGVmYXVsdFNlbGVjdG9yCisKKworY2xhc3MgU2VsZWN0U2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSk6CisKKyAgICBTRUxFQ1RPUiA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyksCisgICAgICAgICAgICAgICAgICAgICAiVGVzdCBuZWVkcyBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yIikKK2NsYXNzIFBvbGxTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlLCBTY2FsYWJsZVNlbGVjdG9yTWl4SW4pOgorCisgICAgU0VMRUNUT1IgPSBnZXRhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicsIE5vbmUpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3RvcnMsICdFcG9sbFNlbGVjdG9yJyksCisgICAgICAgICAgICAgICAgICAgICAiVGVzdCBuZWVkcyBzZWxlY3RvcnMuRXBvbGxTZWxlY3RvciIpCitjbGFzcyBFcG9sbFNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UsIFNjYWxhYmxlU2VsZWN0b3JNaXhJbik6CisKKyAgICBTRUxFQ1RPUiA9IGdldGF0dHIoc2VsZWN0b3JzLCAnRXBvbGxTZWxlY3RvcicsIE5vbmUpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3RvcnMsICdLcXVldWVTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLktxdWV1ZVNlbGVjdG9yKSIpCitjbGFzcyBLcXVldWVTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlLCBTY2FsYWJsZVNlbGVjdG9yTWl4SW4pOgorCisgICAgU0VMRUNUT1IgPSBnZXRhdHRyKHNlbGVjdG9ycywgJ0txdWV1ZVNlbGVjdG9yJywgTm9uZSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbRGVmYXVsdFNlbGVjdG9yVGVzdENhc2UsIFNlbGVjdFNlbGVjdG9yVGVzdENhc2UsCisgICAgICAgICAgICAgUG9sbFNlbGVjdG9yVGVzdENhc2UsIEVwb2xsU2VsZWN0b3JUZXN0Q2FzZSwKKyAgICAgICAgICAgICBLcXVldWVTZWxlY3RvclRlc3RDYXNlXQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKyAgICBzdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5IGIvTGliL3Rlc3QvdGVzdF9zZXQucHkKaW5kZXggYzBiY2EyZi4uYmZlZjYyMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZXQucHkKQEAgLTg0OCw4ICs4NDgsNiBAQAogICAgICAgICBmb3IgdiBpbiBzZWxmLnNldDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgc2VsZi52YWx1ZXMpCiAgICAgICAgIHNldGl0ZXIgPSBpdGVyKHNlbGYuc2V0KQotICAgICAgICAjIG5vdGU6IF9fbGVuZ3RoX2hpbnRfXyBpcyBhbiBpbnRlcm5hbCB1bmRvY3VtZW50ZWQgQVBJLAotICAgICAgICAjIGRvbid0IHJlbHkgb24gaXQgaW4geW91ciBvd24gcHJvZ3JhbXMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXRpdGVyLl9fbGVuZ3RoX2hpbnRfXygpLCBsZW4oc2VsZi5zZXQpKQogCiAgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5CmluZGV4IDEzYzEyNjUuLmJkNTFkODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5CkBAIC0xNDgsNiArMTQ4LDE5IEBACiAgICAgICAgIHAyID0gZFtlbmNvZGVka2V5XQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAxLCBwMikgICMgV3JpdGUgY3JlYXRlcyBuZXcgb2JqZWN0IGluIHN0b3JlCiAKKyAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICBkMSA9IHt9CisgICAgICAgIHdpdGggc2hlbHZlLlNoZWxmKGQxLCBwcm90b2NvbD0yLCB3cml0ZWJhY2s9RmFsc2UpIGFzIHM6CisgICAgICAgICAgICBzWydrZXkxJ10gPSBbMSwyLDMsNF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCBbMSwyLDMsNF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGVuLCBzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzWydrZXkxJ10KKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0Nsb3NlZCBzaGVsZiBzaG91bGQgbm90IGZpbmQgYSBrZXknKQogCiBmcm9tIHRlc3QgaW1wb3J0IG1hcHBpbmdfdGVzdHMKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkgYi9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQppbmRleCBjM2ZiOGE3Li5hNDgzZmUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQpAQCAtMTgsNyArMTgsOCBAQAogICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwgdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgZ2V0X2FyY2hpdmVfZm9ybWF0cywgRXJyb3IsIHVucGFja19hcmNoaXZlLAogICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCBSZWdpc3RyeUVycm9yLAotICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyX3VucGFja19mb3JtYXQsIGdldF91bnBhY2tfZm9ybWF0cykKKyAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCBnZXRfdW5wYWNrX2Zvcm1hdHMsCisgICAgICAgICAgICAgICAgICAgIFNhbWVGaWxlRXJyb3IpCiBpbXBvcnQgdGFyZmlsZQogaW1wb3J0IHdhcm5pbmdzCiAKQEAgLTc0NiwxMyArNzQ3LDEzIEBACiAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCBkc3RfZGlyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQoc3JjX2Rpcikuc3RfbW9kZSwgb3Muc3RhdChkc3RfZGlyKS5zdF9tb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQob3MucGF0aC5qb2luKHNyY19kaXIsICdwZXJtaXNzaXZlLnR4dCcpKS5zdF9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQob3MucGF0aC5qb2luKGRzdF9kaXIsICdwZXJtaXNzaXZlLnR4dCcpKS5zdF9tb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KG9zLnBhdGguam9pbihkc3RfZGlyLCAncGVybWlzc2l2ZS50eHQnKSkuc3RfbW9kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KG9zLnBhdGguam9pbihzcmNfZGlyLCAncmVzdHJpY3RpdmUudHh0JykpLnN0X21vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ3Jlc3RyaWN0aXZlLnR4dCcpKS5zdF9tb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KG9zLnBhdGguam9pbihkc3RfZGlyLCAncmVzdHJpY3RpdmUudHh0JykpLnN0X21vZGUpCiAgICAgICAgIHJlc3RyaWN0aXZlX3N1YmRpcl9kc3QgPSBvcy5wYXRoLmpvaW4oZHN0X2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnNwbGl0KHJlc3RyaWN0aXZlX3N1YmRpcilbMV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChyZXN0cmljdGl2ZV9zdWJkaXIpLnN0X21vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChyZXN0cmljdGl2ZV9zdWJkaXJfZHN0KS5zdF9tb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHJlc3RyaWN0aXZlX3N1YmRpcl9kc3QpLnN0X21vZGUpCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywgJ3RlbXBvcmFyaWx5IGRpc2FibGVkIG9uIFdpbmRvd3MnKQogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdsaW5rJyksICdyZXF1aXJlcyBvcy5saW5rJykKQEAgLTc2NSw3ICs3NjYsNyBAQAogICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUoJ2NoZWRkYXInKQogICAgICAgICAgICAgb3MubGluayhzcmMsIGRzdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5TYW1lRmlsZUVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQogICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdjaGVkZGFyJykKICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCkBAIC03ODUsNyArNzg2LDcgQEAKICAgICAgICAgICAgICMgdG8gVEVTVEZOL1RFU1RGTi9jaGVlc2UsIHdoaWxlIGl0IHNob3VsZCBwb2ludCBhdAogICAgICAgICAgICAgIyBURVNURk4vY2hlZXNlLgogICAgICAgICAgICAgb3Muc3ltbGluaygnY2hlZXNlJywgZHN0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLlNhbWVGaWxlRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCiAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2NoZWRkYXInKQogICAgICAgICAgICAgb3MucmVtb3ZlKGRzdCkKQEAgLTEyOTMsNiArMTI5NCwxNiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocnYpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfZmlsZShzcmNfZmlsZSksIHJlYWRfZmlsZShkc3RfZmlsZSkpCiAKKyAgICBkZWYgdGVzdF9jb3B5ZmlsZV9zYW1lX2ZpbGUoc2VsZik6CisgICAgICAgICMgY29weWZpbGUoKSBzaG91bGQgcmFpc2UgU2FtZUZpbGVFcnJvciBpZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbgorICAgICAgICAjIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgc3JjX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNyY19maWxlID0gb3MucGF0aC5qb2luKHNyY19kaXIsICdmb28nKQorICAgICAgICB3cml0ZV9maWxlKHNyY19maWxlLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU2FtZUZpbGVFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmNfZmlsZSwgc3JjX2ZpbGUpCisgICAgICAgICMgQnV0IEVycm9yIHNob3VsZCB3b3JrIHRvbywgdG8gc3RheSBiYWNrd2FyZCBjb21wYXRpYmxlLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmNfZmlsZSwgc3JjX2ZpbGUpCisKICAgICBkZWYgdGVzdF9jb3B5dHJlZV9yZXR1cm5fdmFsdWUoc2VsZik6CiAgICAgICAgICMgY29weXRyZWUgcmV0dXJucyBpdHMgZGVzdGluYXRpb24gcGF0aC4KICAgICAgICAgc3JjX2RpciA9IHNlbGYubWtkdGVtcCgpCkBAIC0xNjAxLDcgKzE2MTIsNyBAQAogICAgICAgICAgICAgc2VsZi5fZXhpdGVkX3dpdGggPSBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiCiAgICAgICAgICAgICBpZiBzZWxmLl9yYWlzZV9pbl9leGl0OgogICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlZCA9IFRydWUKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDYW5ub3QgY2xvc2UiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNhbm5vdCBjbG9zZSIpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3VwcHJlc3NfYXRfZXhpdAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtMTYxNSwxMiArMTYyNiwxMiBAQAogICAgIGRlZiB0ZXN0X3dfc291cmNlX29wZW5fZmFpbHMoc2VsZik6CiAgICAgICAgIGRlZiBfb3BlbihmaWxlbmFtZSwgbW9kZT0ncicpOgogICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ3NyY2ZpbGUnOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ0Nhbm5vdCBvcGVuICJzcmNmaWxlIicpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignQ2Fubm90IG9wZW4gInNyY2ZpbGUiJykKICAgICAgICAgICAgIGFzc2VydCAwICAjIHNob3VsZG4ndCByZWFjaCBoZXJlLgogCiAgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzaHV0aWwuY29weWZpbGUsICdzcmNmaWxlJywgJ2Rlc3RmaWxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCAnc3JjZmlsZScsICdkZXN0ZmlsZScpCiAKICAgICBkZWYgdGVzdF93X2Rlc3Rfb3Blbl9mYWlscyhzZWxmKToKIApAQCAtMTYzMCwxNCArMTY0MSwxNCBAQAogICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ3NyY2ZpbGUnOgogICAgICAgICAgICAgICAgIHJldHVybiBzcmNmaWxlCiAgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnZGVzdGZpbGUnOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ0Nhbm5vdCBvcGVuICJkZXN0ZmlsZSInKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ0Nhbm5vdCBvcGVuICJkZXN0ZmlsZSInKQogICAgICAgICAgICAgYXNzZXJ0IDAgICMgc2hvdWxkbid0IHJlYWNoIGhlcmUuCiAKICAgICAgICAgc2VsZi5fc2V0X3NodXRpbF9vcGVuKF9vcGVuKQogCiAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSgnc3JjZmlsZScsICdkZXN0ZmlsZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9lbnRlcmVkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMF0gaXMgSU9FcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIE9TRXJyb3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMV0uYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0Nhbm5vdCBvcGVuICJkZXN0ZmlsZSInLCkpCiAKQEAgLTE2NTksNyArMTY3MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9lbnRlcmVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVzdGZpbGUuX2VudGVyZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXN0ZmlsZS5fcmFpc2VkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMF0gaXMgSU9FcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIE9TRXJyb3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMV0uYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0Nhbm5vdCBjbG9zZScsKSkKIApAQCAtMTY3Nyw3ICsxNjg4LDcgQEAKIAogICAgICAgICBzZWxmLl9zZXRfc2h1dGlsX29wZW4oX29wZW4pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlLCAnc3JjZmlsZScsICdkZXN0ZmlsZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9lbnRlcmVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVzdGZpbGUuX2VudGVyZWQpCkBAIC0xNzQ4LDkgKzE3NTksNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RTaHV0aWwsIFRlc3RNb3ZlLCBUZXN0Q29weUZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVGVybXNpemVUZXN0cywgVGVzdFdoaWNoKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CmluZGV4IDE5MWQ0Y2YuLmE2ZjJjNjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CkBAIC0xNSw5ICsxNSw2IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogCi1pZiBzeXMucGxhdGZvcm0gaW4gKCdvczInLCAncmlzY29zJyk6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbid0IHRlc3Qgc2lnbmFsIG9uICVzIiAlIHN5cy5wbGF0Zm9ybSkKLQogCiBjbGFzcyBIYW5kbGVyQkNhbGxlZChFeGNlcHRpb24pOgogICAgIHBhc3MKQEAgLTM2LDcgKzMzLDcgQEAKIGRlZiBpZ25vcmluZ19laW50cihfX2Z1bmMsICphcmdzLCAqKmt3YXJncyk6CiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gX19mdW5jKCphcmdzLCAqKmt3YXJncykKLSAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUlOVFI6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICByZXR1cm4gTm9uZQpAQCAtMjc4LDYgKzI3NSw1NyBAQAogCiAgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKIAorICAgIGRlZiB0ZXN0X3dha2V1cF93cml0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTYxMDU6IHdyaXRlKCkgZXJyb3JzIGluIHRoZSBDIHNpZ25hbCBoYW5kbGVyIHNob3VsZCBub3QKKyAgICAgICAgIyBwYXNzIHNpbGVudGx5LgorICAgICAgICAjIFVzZSBhIHN1YnByb2Nlc3MgdG8gaGF2ZSBvbmx5IG9uZSB0aHJlYWQuCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgaW1wb3J0IGZjbnRsCisgICAgICAgIGltcG9ydCBvcworICAgICAgICBpbXBvcnQgc2lnbmFsCisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZGVycgorCisgICAgICAgIGRlZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUpOgorICAgICAgICAgICAgMS8wCisKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKHIsIGZjbnRsLkZfR0VURkwsIDApCisgICAgICAgIGZjbnRsLmZjbnRsKHIsIGZjbnRsLkZfU0VURkwsIGZsYWdzIHwgb3MuT19OT05CTE9DSykKKworICAgICAgICAjIFNldCB3YWtldXBfZmQgYSByZWFkLW9ubHkgZmlsZSBkZXNjcmlwdG9yIHRvIHRyaWdnZXIgdGhlIGVycm9yCisgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKHIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyOgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoNS4wKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAjIEFuIGlnbm9yZWQgZXhjZXB0aW9uIHNob3VsZCBoYXZlIGJlZW4gcHJpbnRlZCBvdXQgb24gc3RkZXJyCisgICAgICAgICAgICBlcnIgPSBlcnIuZ2V0dmFsdWUoKQorICAgICAgICAgICAgaWYgKCdFeGNlcHRpb24gaWdub3JlZCB3aGVuIHRyeWluZyB0byB3cml0ZSB0byB0aGUgc2lnbmFsIHdha2V1cCBmZCcKKyAgICAgICAgICAgICAgICBub3QgaW4gZXJyKToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihlcnIpCisgICAgICAgICAgICBpZiAoJ09TRXJyb3I6IFtFcnJubyAlZF0nICUgZXJybm8uRUJBREYpIG5vdCBpbiBlcnI6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlplcm9EaXZpc2lvbkVycm9yIG5vdCByYWlzZWQiKQorICAgICAgICAiIiIKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy53cml0ZShyLCBiJ3gnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIk9TIGRvZXNuJ3QgcmVwb3J0IHdyaXRlKCkgZXJyb3Igb24gdGhlIHJlYWQgZW5kIG9mIGEgcGlwZSIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jbG9zZShyKQorICAgICAgICAgICAgb3MuY2xvc2UodykKKworICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisKICAgICBkZWYgdGVzdF93YWtldXBfZmRfZWFybHkoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfd2FrZXVwKCIiImRlZiB0ZXN0KCk6CiAgICAgICAgICAgICBpbXBvcnQgc2VsZWN0CkBAIC0zMTUsMTAgKzM2MywxMCBAQAogICAgICAgICAgICAgIyBXZSBhdHRlbXB0IHRvIGdldCBhIHNpZ25hbCBkdXJpbmcgdGhlIHNlbGVjdCBjYWxsCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbcmVhZF0sIFtdLCBbXSwgVElNRU9VVF9GVUxMKQotICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJzZWxlY3QuZXJyb3Igbm90IHJhaXNlZCIpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJPU0Vycm9yIG5vdCByYWlzZWQiKQogICAgICAgICAgICAgYWZ0ZXJfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICBkdCA9IGFmdGVyX3RpbWUgLSBiZWZvcmVfdGltZQogICAgICAgICAgICAgaWYgZHQgPj0gVElNRU9VVF9IQUxGOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaXRlLnB5IGIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CmluZGV4IGYzYmQxNjguLjJkMjE0ZjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NpdGUucHkKQEAgLTIzMCwxMSArMjMwLDcgQEAKICAgICAgICAgc2l0ZS5QUkVGSVhFUyA9IFsneG94byddCiAgICAgICAgIGRpcnMgPSBzaXRlLmdldHNpdGVwYWNrYWdlcygpCiAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDEpCi0gICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnTGliJywgJ3NpdGUtcGFja2FnZXMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCB3YW50ZWQpCi0gICAgICAgIGVsaWYgKHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIiBhbmQKKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIiBhbmQKICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiUFlUSE9ORlJBTUVXT1JLIikpOgogICAgICAgICAgICAgIyBPUyBYIGZyYW1ld29yayBidWlsZHMKICAgICAgICAgICAgIHNpdGUuUFJFRklYRVMgPSBbJ1B5dGhvbi5mcmFtZXdvcmsnXQpAQCAtNDMyLDUgKzQyOCwzOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIDIwMCwgbXNnPSJDYW4ndCBmaW5kICIgKyB1cmwpCiAKIAorY2xhc3MgU3RhcnR1cEltcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0YXJ0dXBfaW1wb3J0cyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3RzIGNoZWNrcyB3aGljaCBtb2R1bGVzIGFyZSBsb2FkZWQgYnkgUHl0aG9uIHdoZW4gaXQKKyAgICAgICAgIyBpbml0aWFsbHkgc3RhcnRzIHVwb24gc3RhcnR1cC4KKyAgICAgICAgcG9wZW4gPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1JJywgJy12JywgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgcHJpbnQoc2V0KHN5cy5tb2R1bGVzKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LmRlY29kZSgndXRmLTgnKQorICAgICAgICBzdGRlcnIgPSBzdGRlcnIuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIG1vZHVsZXMgPSBldmFsKHN0ZG91dCkKKworICAgICAgICBzZWxmLmFzc2VydEluKCdzaXRlJywgbW9kdWxlcykKKworICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTIwNQorICAgICAgICByZV9tb2RzID0geydyZScsICdfc3JlJywgJ3NyZV9jb21waWxlJywgJ3NyZV9jb25zdGFudHMnLCAnc3JlX3BhcnNlJ30KKyAgICAgICAgIyBfb3N4X3N1cHBvcnQgdXNlcyB0aGUgcmUgbW9kdWxlIGluIG1hbnkgcGxhY3MKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2R1bGVzLmludGVyc2VjdGlvbihyZV9tb2RzKSwgc3RkZXJyKQorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU5NTQ4CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xvY2FsZScsIG1vZHVsZXMsIHN0ZGVycikKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTkyMDkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2NvcHlyZWcnLCBtb2R1bGVzLCBzdGRlcnIpCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5MjE4PgorICAgICAgICBjb2xsZWN0aW9uX21vZHMgPSB7J19jb2xsZWN0aW9ucycsICdjb2xsZWN0aW9ucycsICdmdW5jdG9vbHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlYXBxJywgJ2l0ZXJ0b29scycsICdrZXl3b3JkJywgJ29wZXJhdG9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXBybGliJywgJ3R5cGVzJywgJ3dlYWtyZWYnfQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1vZHVsZXMuaW50ZXJzZWN0aW9uKGNvbGxlY3Rpb25fbW9kcyksIHN0ZGVycikKKworCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbGljZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKaW5kZXggMmRmOTI3MS4uOTIwM2Q1ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbGljZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5CkBAIC00LDggKzQsNzAgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSBwaWNrbGUgaW1wb3J0IGxvYWRzLCBkdW1wcwogCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBzeXMKIAorCitkZWYgZXZhbHVhdGVfc2xpY2VfaW5kZXgoYXJnKToKKyAgICAiIiIKKyAgICBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhIHNsaWNlIGFyZ3VtZW50IHRvIGFuIGludGVnZXIsIGFuZCByYWlzZQorICAgIFR5cGVFcnJvciB3aXRoIGEgc3VpdGFibGUgbWVzc2FnZSBvbiBmYWlsdXJlLgorCisgICAgIiIiCisgICAgaWYgaGFzYXR0cihhcmcsICdfX2luZGV4X18nKToKKyAgICAgICAgcmV0dXJuIG9wZXJhdG9yLmluZGV4KGFyZykKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAic2xpY2UgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yICIKKyAgICAgICAgICAgICJOb25lIG9yIGhhdmUgYW4gX19pbmRleF9fIG1ldGhvZCIpCisKK2RlZiBzbGljZV9pbmRpY2VzKHNsaWNlLCBsZW5ndGgpOgorICAgICIiIgorICAgIFJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHNsaWNlLmluZGljZXMgbWV0aG9kLgorCisgICAgIiIiCisgICAgIyBDb21wdXRlIHN0ZXAgYW5kIGxlbmd0aCBhcyBpbnRlZ2Vycy4KKyAgICBsZW5ndGggPSBvcGVyYXRvci5pbmRleChsZW5ndGgpCisgICAgc3RlcCA9IDEgaWYgc2xpY2Uuc3RlcCBpcyBOb25lIGVsc2UgZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2xpY2Uuc3RlcCkKKworICAgICMgUmFpc2UgVmFsdWVFcnJvciBmb3IgbmVnYXRpdmUgbGVuZ3RoIG9yIHplcm8gc3RlcC4KKyAgICBpZiBsZW5ndGggPCAwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJsZW5ndGggc2hvdWxkIG5vdCBiZSBuZWdhdGl2ZSIpCisgICAgaWYgc3RlcCA9PSAwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzbGljZSBzdGVwIGNhbm5vdCBiZSB6ZXJvIikKKworICAgICMgRmluZCBsb3dlciBhbmQgdXBwZXIgYm91bmRzIGZvciBzdGFydCBhbmQgc3RvcC4KKyAgICBsb3dlciA9IC0xIGlmIHN0ZXAgPCAwIGVsc2UgMAorICAgIHVwcGVyID0gbGVuZ3RoIC0gMSBpZiBzdGVwIDwgMCBlbHNlIGxlbmd0aAorCisgICAgIyBDb21wdXRlIHN0YXJ0LgorICAgIGlmIHNsaWNlLnN0YXJ0IGlzIE5vbmU6CisgICAgICAgIHN0YXJ0ID0gdXBwZXIgaWYgc3RlcCA8IDAgZWxzZSBsb3dlcgorICAgIGVsc2U6CisgICAgICAgIHN0YXJ0ID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2xpY2Uuc3RhcnQpCisgICAgICAgIHN0YXJ0ID0gbWF4KHN0YXJ0ICsgbGVuZ3RoLCBsb3dlcikgaWYgc3RhcnQgPCAwIGVsc2UgbWluKHN0YXJ0LCB1cHBlcikKKworICAgICMgQ29tcHV0ZSBzdG9wLgorICAgIGlmIHNsaWNlLnN0b3AgaXMgTm9uZToKKyAgICAgICAgc3RvcCA9IGxvd2VyIGlmIHN0ZXAgPCAwIGVsc2UgdXBwZXIKKyAgICBlbHNlOgorICAgICAgICBzdG9wID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2xpY2Uuc3RvcCkKKyAgICAgICAgc3RvcCA9IG1heChzdG9wICsgbGVuZ3RoLCBsb3dlcikgaWYgc3RvcCA8IDAgZWxzZSBtaW4oc3RvcCwgdXBwZXIpCisKKyAgICByZXR1cm4gc3RhcnQsIHN0b3AsIHN0ZXAKKworCisjIENsYXNzIHByb3ZpZGluZyBhbiBfX2luZGV4X18gbWV0aG9kLiAgVXNlZCBmb3IgdGVzdGluZyBzbGljZS5pbmRpY2VzLgorCitjbGFzcyBNeUluZGV4YWJsZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworCiBjbGFzcyBTbGljZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CkBAIC03NSw2ICsxMzcsMjIgQEAKICAgICAgICAgcyA9IHNsaWNlKG9iaikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RvcCBpcyBvYmopCiAKKyAgICBkZWYgY2hlY2tfaW5kaWNlcyhzZWxmLCBzbGljZSwgbGVuZ3RoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWN0dWFsID0gc2xpY2UuaW5kaWNlcyhsZW5ndGgpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgYWN0dWFsID0gInZhbHVlZXJyb3IiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc2xpY2VfaW5kaWNlcyhzbGljZSwgbGVuZ3RoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGV4cGVjdGVkID0gInZhbHVlZXJyb3IiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKworICAgICAgICBpZiBsZW5ndGggPj0gMCBhbmQgc2xpY2Uuc3RlcCAhPSAwOgorICAgICAgICAgICAgYWN0dWFsID0gcmFuZ2UoKnNsaWNlLmluZGljZXMobGVuZ3RoKSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gcmFuZ2UobGVuZ3RoKVtzbGljZV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKwogICAgIGRlZiB0ZXN0X2luZGljZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSAgICAgICAgICAgKS5pbmRpY2VzKDEwKSwgKDAsIDEwLCAgMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSwgIE5vbmUsICAyKS5pbmRpY2VzKDEwKSwgKDAsIDEwLCAgMikpCkBAIC0xMDgsNyArMTg2LDQxIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKDEwKSlbOjpzeXMubWF4c2l6ZSAtIDFdLCBbMF0pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2xpY2UoTm9uZSkuaW5kaWNlcywgMTw8MTAwKQorICAgICAgICAjIENoZWNrIGEgdmFyaWV0eSBvZiBzdGFydCwgc3RvcCwgc3RlcCBhbmQgbGVuZ3RoIHZhbHVlcywgaW5jbHVkaW5nCisgICAgICAgICMgdmFsdWVzIGV4Y2VlZGluZyBzeXMubWF4c2l6ZSAoc2VlIGlzc3VlICMxNDc5NCkuCisgICAgICAgIHZhbHMgPSBbTm9uZSwgLTIqKjEwMCwgLTIqKjMwLCAtNTMsIC03LCAtMSwgMCwgMSwgNywgNTMsIDIqKjMwLCAyKioxMDBdCisgICAgICAgIGxlbmd0aHMgPSBbMCwgMSwgNywgNTMsIDIqKjMwLCAyKioxMDBdCisgICAgICAgIGZvciBzbGljZV9hcmdzIGluIGl0ZXJ0b29scy5wcm9kdWN0KHZhbHMsIHJlcGVhdD0zKToKKyAgICAgICAgICAgIHMgPSBzbGljZSgqc2xpY2VfYXJncykKKyAgICAgICAgICAgIGZvciBsZW5ndGggaW4gbGVuZ3RoczoKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2luZGljZXMocywgbGVuZ3RoKQorICAgICAgICBzZWxmLmNoZWNrX2luZGljZXMoc2xpY2UoMCwgMTAsIDEpLCAtMykKKworICAgICAgICAjIE5lZ2F0aXZlIGxlbmd0aCBzaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoTm9uZSkuaW5kaWNlcygtMSkKKworICAgICAgICAjIFplcm8gc3RlcCBzaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMCwgMTAsIDApLmluZGljZXMoNSkKKworICAgICAgICAjIFVzaW5nIGEgc3RhcnQsIHN0b3Agb3Igc3RlcCBvciBsZW5ndGggdGhhdCBjYW4ndCBiZSBpbnRlcnByZXRlZCBhcyBhbgorICAgICAgICAjIGludGVnZXIgc2hvdWxkIGdpdmUgYSBUeXBlRXJyb3IgLi4uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAuMCwgMTAsIDEpLmluZGljZXMoNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMCwgMTAuMCwgMSkuaW5kaWNlcyg1KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLCAxMCwgMS4wKS5pbmRpY2VzKDUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLCAxKS5pbmRpY2VzKDUuMCkKKworICAgICAgICAjIC4uLiBidXQgaXQgc2hvdWxkIGJlIGZpbmUgdG8gdXNlIGEgY3VzdG9tIGNsYXNzIHRoYXQgcHJvdmlkZXMgaW5kZXguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgMTAsIDEpLmluZGljZXMoNSksICgwLCA1LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShNeUluZGV4YWJsZSgwKSwgMTAsIDEpLmluZGljZXMoNSksICgwLCA1LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgwLCBNeUluZGV4YWJsZSgxMCksIDEpLmluZGljZXMoNSksICgwLCA1LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgwLCAxMCwgTXlJbmRleGFibGUoMSkpLmluZGljZXMoNSksICgwLCA1LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgwLCAxMCwgMSkuaW5kaWNlcyhNeUluZGV4YWJsZSg1KSksICgwLCA1LCAxKSkKIAogICAgIGRlZiB0ZXN0X3NldHNsaWNlX3dpdGhvdXRfZ2V0c2xpY2Uoc2VsZik6CiAgICAgICAgIHRtcCA9IFtdCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKaW5kZXggM2JiYzZiNy4uM2Y3YjliNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQpAQCAtMjIyLDcgKzIyMiw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAuc291cmNlX2FkZHJlc3MsICgnMTI3LjAuMC4xJywgcG9ydCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAubG9jYWxfaG9zdG5hbWUsICdsb2NhbGhvc3QnKQogICAgICAgICAgICAgc210cC5xdWl0KCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUFERFJJTlVTRToKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjb3VsZG4ndCBiaW5kIHRvIHBvcnQgJWQiICUgcG9ydCkKICAgICAgICAgICAgIHJhaXNlCkBAIC01MjQsMTIgKzUyNCw2IEBACiAKIGNsYXNzIE5vbkNvbm5lY3RpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNtdHBsaWIuc29ja2V0ID0gbW9ja19zb2NrZXQKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc210cGxpYi5zb2NrZXQgPSBzb2NrZXQKLQogICAgIGRlZiB0ZXN0Tm90Q29ubmVjdGVkKHNlbGYpOgogICAgICAgICAjIFRlc3QgdmFyaW91cyBvcGVyYXRpb25zIG9uIGFuIHVuY29ubmVjdGVkIFNNVFAgb2JqZWN0IHRoYXQKICAgICAgICAgIyBzaG91bGQgcmFpc2UgZXhjZXB0aW9ucyAoYXQgcHJlc2VudCB0aGUgYXR0ZW1wdCBpbiBTTVRQLnNlbmQKQEAgLTU0MSwxMCArNTM1LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHAuc2VuZCwgJ3Rlc3QgbXNnJykKIAogICAgIGRlZiB0ZXN0Tm9ubnVtZXJpY1BvcnQoc2VsZik6Ci0gICAgICAgICMgY2hlY2sgdGhhdCBub24tbnVtZXJpYyBwb3J0IHJhaXNlcyBzb2NrZXQuZXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobW9ja19zb2NrZXQuZXJyb3IsIHNtdHBsaWIuU01UUCwKKyAgICAgICAgIyBjaGVjayB0aGF0IG5vbi1udW1lcmljIHBvcnQgcmFpc2VzIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc210cGxpYi5TTVRQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWxob3N0IiwgImJvZ3VzIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobW9ja19zb2NrZXQuZXJyb3IsIHNtdHBsaWIuU01UUCwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc210cGxpYi5TTVRQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWxob3N0OmJvZ3VzIikKIAogCkBAIC04NTIsNiArODQ2LDE1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNpbV9hdXRoX2NyZWRlbnRpYWxzWydjcmFtLW1kNSddLCBzdHIoZXJyKSkKICAgICAgICAgc210cC5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdEFVVEhfbXVsdGlwbGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IG11bHRpcGxlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYXJlIHRyaWVkLgorICAgICAgICBzZWxmLnNlcnYuYWRkX2ZlYXR1cmUoIkFVVEggQk9HVVMgUExBSU4gTE9HSU4gQ1JBTS1NRDUiKQorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MTUpCisgICAgICAgIHRyeTogc210cC5sb2dpbihzaW1fYXV0aFswXSwgc2ltX2F1dGhbMV0pCisgICAgICAgIGV4Y2VwdCBzbXRwbGliLlNNVFBBdXRoZW50aWNhdGlvbkVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2ltX2F1dGhfbG9naW5fcGFzc3dvcmQsIHN0cihlcnIpKQorICAgICAgICBzbXRwLmNsb3NlKCkKKwogICAgIGRlZiB0ZXN0X3dpdGhfc3RhdGVtZW50KHNlbGYpOgogICAgICAgICB3aXRoIHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQpIGFzIHNtdHA6CiAgICAgICAgICAgICBjb2RlLCBtZXNzYWdlID0gc210cC5ub29wKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weQppbmRleCBlOTdjZjM2Li43ZjlkYjJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NtdHBuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5CkBAIC0xLDIzICsxLDM1IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHNtdHBsaWIKK2ltcG9ydCBzb2NrZXQKIAogc3NsID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCJzc2wiKQogCiBzdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKIAorZGVmIGNoZWNrX3NzbF92ZXJpZml5KGhvc3QsIHBvcnQpOgorICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpKSBhcyBzb2NrOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfaG9zdG5hbWU9aG9zdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCiAKIGNsYXNzIFNtdHBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICB0ZXN0U2VydmVyID0gJ3NtdHAuZ21haWwuY29tJwogICAgIHJlbW90ZVBvcnQgPSAyNQotICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogCiAgICAgZGVmIHRlc3RfY29ubmVjdF9zdGFydHRscyhzZWxmKToKICAgICAgICAgc3VwcG9ydC5nZXRfYXR0cmlidXRlKHNtdHBsaWIsICdTTVRQX1NTTCcpCisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYudGVzdFNlcnZlcik6CiAgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFAoc2VsZi50ZXN0U2VydmVyLCBzZWxmLnJlbW90ZVBvcnQpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VydmVyLnN0YXJ0dGxzKGNvbnRleHQ9c2VsZi5jb250ZXh0KQorICAgICAgICAgICAgICAgIHNlcnZlci5zdGFydHRscyhjb250ZXh0PWNvbnRleHQpCiAgICAgICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09ICdTVEFSVFRMUyBleHRlbnNpb24gbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIuJzoKICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Quc2tpcChlLmFyZ3NbMF0pCkBAIC0zMCw3ICs0Miw3IEBACiBjbGFzcyBTbXRwU1NMVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgdGVzdFNlcnZlciA9ICdzbXRwLmdtYWlsLmNvbScKICAgICByZW1vdGVQb3J0ID0gNDY1Ci0gICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgY2FuX3ZlcmlmeSA9IGNoZWNrX3NzbF92ZXJpZml5KHRlc3RTZXJ2ZXIsIHJlbW90ZVBvcnQpCiAKICAgICBkZWYgdGVzdF9jb25uZWN0KHNlbGYpOgogICAgICAgICBzdXBwb3J0LmdldF9hdHRyaWJ1dGUoc210cGxpYiwgJ1NNVFBfU1NMJykKQEAgLTQ3LDkgKzU5LDE5IEBACiAgICAgICAgICAgICBzZXJ2ZXIucXVpdCgpCiAKICAgICBkZWYgdGVzdF9jb25uZWN0X3VzaW5nX3NzbGNvbnRleHQoc2VsZik6CisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogICAgICAgICBzdXBwb3J0LmdldF9hdHRyaWJ1dGUoc210cGxpYiwgJ1NNVFBfU1NMJykKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLnRlc3RTZXJ2ZXIpOgotICAgICAgICAgICAgc2VydmVyID0gc210cGxpYi5TTVRQX1NTTChzZWxmLnRlc3RTZXJ2ZXIsIHNlbGYucmVtb3RlUG9ydCwgY29udGV4dD1zZWxmLmNvbnRleHQpCisgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFBfU1NMKHNlbGYudGVzdFNlcnZlciwgc2VsZi5yZW1vdGVQb3J0LCBjb250ZXh0PWNvbnRleHQpCisgICAgICAgICAgICBzZXJ2ZXIuZWhsbygpCisgICAgICAgICAgICBzZXJ2ZXIucXVpdCgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhjYW5fdmVyaWZ5LCAiU1NMIGNlcnRpZmljYXRlIGNhbid0IGJlIHZlcmlmaWVkIikKKyAgICBkZWYgdGVzdF9jb25uZWN0X3VzaW5nX3NzbGNvbnRleHRfdmVyaWZpZWQoc2VsZik6CisgICAgICAgIHN1cHBvcnQuZ2V0X2F0dHJpYnV0ZShzbXRwbGliLCAnU01UUF9TU0wnKQorICAgICAgICBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKQorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYudGVzdFNlcnZlcik6CisgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFBfU1NMKHNlbGYudGVzdFNlcnZlciwgc2VsZi5yZW1vdGVQb3J0LCBjb250ZXh0PWNvbnRleHQpCiAgICAgICAgICAgICBzZXJ2ZXIuZWhsbygpCiAgICAgICAgICAgICBzZXJ2ZXIucXVpdCgpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5IGIvTGliL3Rlc3QvdGVzdF9zbmRoZHIucHkKaW5kZXggMTAwNDY4OC4uNWUwYWJlMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbmRoZHIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbmRoZHIucHkKQEAgLTEyLDcgKzEyLDcgQEAKICAgICAgICAgICAgICgnc25kaGRyLmhjb20nLCAoJ2hjb20nLCAyMjA1MC4wLCAxLCAtMSwgOCkpLAogICAgICAgICAgICAgKCdzbmRoZHIuc25kdCcsICgnc25kdCcsIDQ0MTAwLCAxLCA1LCA4KSksCiAgICAgICAgICAgICAoJ3NuZGhkci52b2MnLCAoJ3ZvYycsIDAsIDEsIC0xLCA4KSksCi0gICAgICAgICAgICAoJ3NuZGhkci53YXYnLCAoJ3dhdicsIDQ0MTAwLCAyLCAtMSwgMTYpKSwKKyAgICAgICAgICAgICgnc25kaGRyLndhdicsICgnd2F2JywgNDQxMDAsIDIsIDUsIDE2KSksCiAgICAgICAgICk6CiAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbmRmaWxlKGZpbGVuYW1lLCBzdWJkaXI9InNuZGhkcmRhdGEiKQogICAgICAgICAgICAgd2hhdCA9IHNuZGhkci53aGF0KGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkgYi9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQppbmRleCA0NTBhZWUxLi5lOTRmNTM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQpAQCAtMSw2ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHVuaXR0ZXN0LmNhc2UgaW1wb3J0IF9FeHBlY3RlZEZhaWx1cmUKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgaW8KQEAgLTIxLDEzICsyMCwxMyBAQAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHN0cnVjdAogdHJ5OgotICAgIGltcG9ydCBmY250bAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZjbnRsID0gRmFsc2UKLXRyeToKICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlwcm9jZXNzaW5nID0gRmFsc2UKK3RyeToKKyAgICBpbXBvcnQgZmNudGwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmY250bCA9IE5vbmUKIAogSE9TVCA9IHN1cHBvcnQuSE9TVAogTVNHID0gJ01pY2hhZWwgR2lsZml4IHdhcyBoZXJlXHUxMjM0XHJcbicuZW5jb2RlKCd1dGYtOCcpICMjIHRlc3QgdW5pY29kZSBzdHJpbmcgYW5kIGNhcnJpYWdlIHJldHVybgpAQCAtNDMsNyArNDIsNyBAQAogICAgICIiIkNoZWNrIHdoZXRoZXIgQ0FOIHNvY2tldHMgYXJlIHN1cHBvcnRlZCBvbiB0aGlzIGhvc3QuIiIiCiAgICAgdHJ5OgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIHNvY2tldC5lcnJvciwgT1NFcnJvcik6CisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIGVsc2U6CiAgICAgICAgIHMuY2xvc2UoKQpAQCAtMTE4LDEyICsxMTcsNDIgQEAKICAgICBpbnRlcmZhY2UgPSAndmNhbjAnCiAgICAgYnVmc2l6ZSA9IDEyOAogCisgICAgIiIiVGhlIENBTiBmcmFtZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiA8bGludXgvY2FuLmg+OgorCisgICAgc3RydWN0IGNhbl9mcmFtZSB7CisgICAgICAgIGNhbmlkX3QgY2FuX2lkOyAgLyogMzIgYml0IENBTl9JRCArIEVGRi9SVFIvRVJSIGZsYWdzICovCisgICAgICAgIF9fdTggICAgY2FuX2RsYzsgLyogZGF0YSBsZW5ndGggY29kZTogMCAuLiA4ICovCisgICAgICAgIF9fdTggICAgZGF0YVs4XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisgICAgfTsKKyAgICAiIiIKKyAgICBjYW5fZnJhbWVfZm10ID0gIj1JQjN4OHMiCisgICAgY2FuX2ZyYW1lX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoY2FuX2ZyYW1lX2ZtdCkKKworICAgICIiIlRoZSBCcm9hZGNhc3QgTWFuYWdlbWVudCBDb21tYW5kIGZyYW1lIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgICAgaW4gPGxpbnV4L2Nhbi9iY20uaD46CisKKyAgICBzdHJ1Y3QgYmNtX21zZ19oZWFkIHsKKyAgICAgICAgX191MzIgb3Bjb2RlOworICAgICAgICBfX3UzMiBmbGFnczsKKyAgICAgICAgX191MzIgY291bnQ7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIGl2YWwxLCBpdmFsMjsKKyAgICAgICAgY2FuaWRfdCBjYW5faWQ7CisgICAgICAgIF9fdTMyIG5mcmFtZXM7CisgICAgICAgIHN0cnVjdCBjYW5fZnJhbWUgZnJhbWVzWzBdOworICAgIH0KKworICAgIGBiY21fbXNnX2hlYWRgIG11c3QgYmUgOCBieXRlcyBhbGlnbmVkIGJlY2F1c2Ugb2YgdGhlIGBmcmFtZXNgIG1lbWJlciAoc2VlCisgICAgYHN0cnVjdCBjYW5fZnJhbWVgIGRlZmluaXRpb24pLiBNdXN0IHVzZSBuYXRpdmUgbm90IHN0YW5kYXJkIHR5cGVzIGZvciBwYWNraW5nLgorICAgICIiIgorICAgIGJjbV9jbWRfbXNnX2ZtdCA9ICJAM0k0bDJJIgorICAgIGJjbV9jbWRfbXNnX2ZtdCArPSAieCIgKiAoc3RydWN0LmNhbGNzaXplKGJjbV9jbWRfbXNnX2ZtdCkgJSA4KQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnMuY2xvc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucy5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25ldHdvcmsgaW50ZXJmYWNlIGAlc2AgZG9lcyBub3QgZXhpc3QnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJmYWNlKQogCkBAIC0yMzksOSArMjY4LDYgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGVzdF9mdW5jIG11c3QgYmUgYSBjYWxsYWJsZSBmdW5jdGlvbiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RfZnVuYygpCi0gICAgICAgIGV4Y2VwdCBfRXhwZWN0ZWRGYWlsdXJlOgotICAgICAgICAgICAgIyBXZSBkZWxpYmVyYXRlbHkgaWdub3JlIGV4cGVjdGVkIGZhaWx1cmVzCi0gICAgICAgICAgICBwYXNzCiAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChlKQogICAgICAgICBmaW5hbGx5OgpAQCAtMjkyLDcgKzMxOCw3IEBACiAgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNsaS5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgc2tpcFRlc3Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaGVyZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGluIHRoZQogICAgICAgICAgICAgIyBzZXJ2ZXIgaW5zdGVhZAogICAgICAgICAgICAgcGFzcwpAQCAtNTQwLDExICs1NjYsNyBAQAogY2xhc3MgSW5ldDZUZXN0QmFzZShJbmV0VGVzdEJhc2UpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIElQdjYgc29ja2V0IHRlc3RzLiIiIgogCi0gICAgIyBEb24ndCB1c2UgImxvY2FsaG9zdCIgaGVyZSAtIGl0IG1heSBub3QgaGF2ZSBhbiBJUHY2IGFkZHJlc3MKLSAgICAjIGFzc2lnbmVkIHRvIGl0IGJ5IGRlZmF1bHQgKGUuZy4gaW4gL2V0Yy9ob3N0cyksIGFuZCBpZiBzb21lb25lCi0gICAgIyBoYXMgYXNzaWduZWQgaXQgYW4gSVB2NC1tYXBwZWQgYWRkcmVzcywgdGhlbiBpdCdzIHVubGlrZWx5IHRvCi0gICAgIyB3b3JrIHdpdGggdGhlIGZ1bGwgSVB2NiBBUEkuCi0gICAgaG9zdCA9ICI6OjEiCisgICAgaG9zdCA9IHN1cHBvcnQuSE9TVHY2CiAKIGNsYXNzIFVEUDZUZXN0QmFzZShJbmV0NlRlc3RCYXNlKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciBVRFAtb3Zlci1JUHY2IHRlc3RzLiIiIgpAQCAtNjA1LDcgKzYyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZvciBvYmogaW4gYXJnc10KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKmNhbGxhcmdzKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIFhYWDogY2hlY2sgZXJybm8/CiAgICAgICAgICAgICBlcnIgPSBzdHIoZSkKICAgICAgICAgZWxzZToKQEAgLTYyMyw4ICs2NDUsMTcgQEAKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihzKS5zdGFydHN3aXRoKCI8c29ja2V0LnNvY2tldCBvYmplY3QiKSkKKyAgICAgICAgd2l0aCBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZmQ9JWknICUgcy5maWxlbm8oKSwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZhbWlseT0lcycgJSBzb2NrZXQuQUZfSU5FVCwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3R5cGU9JXMnICUgc29ja2V0LlNPQ0tfU1RSRUFNLCByZXByKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncHJvdG89MCcsIHJlcHIocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdyYWRkcicsIHJlcHIocykpCisgICAgICAgICAgICBzLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xhZGRyJywgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyKHMuZ2V0c29ja25hbWUoKSksIHJlcHIocykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1tjbG9zZWRdJywgcmVwcihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGFkZHInLCByZXByKHMpKQogCiAgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKQEAgLTY0MiwxMSArNjczLDExIEBACiAgICAgZGVmIHRlc3RTb2NrZXRFcnJvcihzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHNvY2tldCBtb2R1bGUgZXhjZXB0aW9ucwogICAgICAgICBtc2cgPSAiRXJyb3IgcmFpc2luZyBzb2NrZXQgZXhjZXB0aW9uICglcykuIgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuZXJyb3InKToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdPU0Vycm9yJyk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuaGVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBtc2c9bXNnICUgJ3NvY2tldC5nYWllcnJvcicpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1tc2cgJSAnc29ja2V0LmdhaWVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZ2FpZXJyb3IKIAogICAgIGRlZiB0ZXN0U2VuZHRvRXJyb3JzKHNlbGYpOgpAQCAtNzA5LDEzICs3NDAsMTMgQEAKICAgICAgICAgaG9zdG5hbWUgPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpcCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3RuYW1lKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25hbWUgbG9va3VwIGZhaWx1cmUnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXAuZmluZCgnLicpID49IDAsICJFcnJvciByZXNvbHZpbmcgaG9zdCB0byBpcC4iKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBobmFtZSwgYWxpYXNlcywgaXBhZGRycyA9IHNvY2tldC5nZXRob3N0YnlhZGRyKGlwKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgYSBzaW1pbGFyIHByb2JsZW0gYXMgYWJvdmU7IHNraXAgdGhpcyB0ZXN0CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCduYW1lIGxvb2t1cCBmYWlsdXJlJykKICAgICAgICAgYWxsX2hvc3RfbmFtZXMgPSBbaG9zdG5hbWUsIGhuYW1lXSArIGFsaWFzZXMKQEAgLTcyMywxMyArNzU0LDI3IEBACiAgICAgICAgIGlmIG5vdCBmcWhuIGluIGFsbF9ob3N0X25hbWVzOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0ZXN0aW5nIGhvc3QgcmVzb2x1dGlvbiBtZWNoYW5pc21zLiAoZnFkbjogJXMsIGFsbDogJXMpIiAlIChmcWhuLCByZXByKGFsbF9ob3N0X25hbWVzKSkpCiAKKyAgICBkZWYgdGVzdF9ob3N0X3Jlc29sdXRpb24oc2VsZik6CisgICAgICAgIGZvciBhZGRyIGluIFsnMC4xLjEufjEnLCAnMSsuMS4xLjEnLCAnOjoxcScsICc6OjE6OjInLAorICAgICAgICAgICAgICAgICAgICAgJzE6MToxOjE6MToxOjE6MToxJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrZXQuZ2V0aG9zdGJ5bmFtZSwgYWRkcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5nZXRob3N0YnlhZGRyLCBhZGRyKQorCisgICAgICAgIGZvciBhZGRyIGluIFtzdXBwb3J0LkhPU1QsICcxMC4wLjAuMScsICcyNTUuMjU1LjI1NS4yNTUnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ja2V0LmdldGhvc3RieW5hbWUoYWRkciksIGFkZHIpCisKKyAgICAgICAgIyB3ZSBkb24ndCB0ZXN0IHN1cHBvcnQuSE9TVHY2IGJlY2F1c2UgdGhlcmUncyBhIGNoYW5jZSBpdCBkb2Vzbid0IGhhdmUKKyAgICAgICAgIyBhIG1hdGNoaW5nIG5hbWUgZW50cnkgKGUuZy4gJ2lwNi1sb2NhbGhvc3QnKQorICAgICAgICBmb3IgaG9zdCBpbiBbc3VwcG9ydC5IT1NUXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaG9zdCwgc29ja2V0LmdldGhvc3RieWFkZHIoaG9zdClbMl0pCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ3NldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5zZXRob3N0bmFtZSgpIikKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ2dldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5nZXRob3N0bmFtZSgpIikKICAgICBkZWYgdGVzdF9zZXRob3N0bmFtZShzZWxmKToKICAgICAgICAgb2xkaG4gPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0aG9zdG5hbWUoJ25ldycpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBFUk06CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBzaG91bGQgYmUgcnVuIGFzIHJvb3QiKQogICAgICAgICAgICAgZWxzZToKQEAgLTc2Myw4ICs4MDgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuaWZfbmFtZWluZGV4KCkgbm90IGF2YWlsYWJsZS4nKQogICAgIGRlZiB0ZXN0SW52YWxpZEludGVyZmFjZU5hbWVJbmRleChzZWxmKToKICAgICAgICAgIyB0ZXN0IG5vbmV4aXN0ZW50IGludGVyZmFjZSBpbmRleC9uYW1lCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2tldC5pZl9uYW1ldG9pbmRleCwgJ19ERUFEQkVFRicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5pZl9pbmRleHRvbmFtZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmlmX25hbWV0b2luZGV4LCAnX0RFQURCRUVGJykKICAgICAgICAgIyB0ZXN0IHdpdGggaW52YWxpZCB2YWx1ZXMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAnX0RFQURCRUVGJykKQEAgLTc4Niw3ICs4MzEsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIE9uIHNvbWUgdmVyc2lvbnMsIHRoaXMgY3Jhc2hlcyB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgICAgICAgICBzb2NrZXQuZ2V0bmFtZWluZm8oKCd4JywgMCwgMCwgMCksIDApCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3ROdG9IKHNlbGYpOgpAQCAtODMzLDE3ICs4NzgsMTcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwb3J0ID0gc29ja2V0LmdldHNlcnZieW5hbWUoc2VydmljZSwgJ3RjcCcpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgIyBUcnkgc2FtZSBjYWxsIHdpdGggb3B0aW9uYWwgcHJvdG9jb2wgb21pdHRlZAogICAgICAgICBwb3J0MiA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UpCiAgICAgICAgIGVxKHBvcnQsIHBvcnQyKQogICAgICAgICAjIFRyeSB1ZHAsIGJ1dCBkb24ndCBiYXJmIGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdWRwcG9ydCA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UsICd1ZHAnKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHVkcHBvcnQgPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBlcSh1ZHBwb3J0LCBwb3J0KQpAQCAtODk5LDcgKzk0NCw3IEBACiAgICAgICAgIGcgPSBsYW1iZGEgYTogaW5ldF9wdG9uKEFGX0lORVQsIGEpCiAKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBmdW5jLGE6IHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgKHNvY2tldC5lcnJvciwgVmFsdWVFcnJvciksIGZ1bmMsIGEKKyAgICAgICAgICAgIChPU0Vycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQogICAgICAgICApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1x4MDBceDAwXHgwMFx4MDAnLCBmKCcwLjAuMC4wJykpCkBAIC05MzIsOSArOTc3LDE3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnSVB2NiBub3QgYXZhaWxhYmxlJykKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY291bGQgbm90IGltcG9ydCBuZWVkZWQgc3ltYm9scyBmcm9tIHNvY2tldCcpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW5ldF9wdG9uKEFGX0lORVQ2LCAnOjonKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yID09IDEwMDIyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdJUHY2IG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWQnKQorCiAgICAgICAgIGYgPSBsYW1iZGEgYTogaW5ldF9wdG9uKEFGX0lORVQ2LCBhKQogICAgICAgICBhc3NlcnRJbnZhbGlkID0gbGFtYmRhIGE6IHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgKHNvY2tldC5lcnJvciwgVmFsdWVFcnJvciksIGYsIGEKKyAgICAgICAgICAgIChPU0Vycm9yLCBWYWx1ZUVycm9yKSwgZiwgYQogICAgICAgICApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1x4MDAnICogMTYsIGYoJzo6JykpCkBAIC05ODMsNyArMTAzNiw3IEBACiAgICAgICAgIGZyb20gc29ja2V0IGltcG9ydCBpbmV0X250b2EgYXMgZiwgaW5ldF9udG9wLCBBRl9JTkVUCiAgICAgICAgIGcgPSBsYW1iZGEgYTogaW5ldF9udG9wKEFGX0lORVQsIGEpCiAgICAgICAgIGFzc2VydEludmFsaWQgPSBsYW1iZGEgZnVuYyxhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmdW5jLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGZ1bmMsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEuMC4xLjAnLCBmKGInXHgwMVx4MDBceDAxXHgwMCcpKQpAQCAtMTAxMCw5ICsxMDYzLDE3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnSVB2NiBub3QgYXZhaWxhYmxlJykKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY291bGQgbm90IGltcG9ydCBuZWVkZWQgc3ltYm9scyBmcm9tIHNvY2tldCcpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCBiJ1x4MDAnICogMTYpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUud2luZXJyb3IgPT0gMTAwMjI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ0lQdjYgbWlnaHQgbm90IGJlIHN1cHBvcnRlZCcpCisKICAgICAgICAgZiA9IGxhbWJkYSBhOiBpbmV0X250b3AoQUZfSU5FVDYsIGEpCiAgICAgICAgIGFzc2VydEludmFsaWQgPSBsYW1iZGEgYTogc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICAoc29ja2V0LmVycm9yLCBWYWx1ZUVycm9yKSwgZiwgYQorICAgICAgICAgICAgKE9TRXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCiAgICAgICAgICkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc6OicsIGYoYidceDAwJyAqIDE2KSkKQEAgLTEwNDAsNyArMTEwMSw3IEBACiAgICAgICAgICMgQXQgbGVhc3QgZm9yIGVDb3MuICBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgUy8zOTAgdG8gcGFzcy4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbXlfaXBfYWRkciA9IHNvY2tldC5nZXRob3N0YnluYW1lKHNvY2tldC5nZXRob3N0bmFtZSgpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25hbWUgbG9va3VwIGZhaWx1cmUnKQogICAgICAgICBzZWxmLmFzc2VydEluKG5hbWVbMF0sICgiMC4wLjAuMCIsIG15X2lwX2FkZHIpLCAnJXMgaW52YWxpZCcgJSBuYW1lWzBdKQpAQCAtMTA2NywxMyArMTEyOCwxOSBAQAogICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzb2NrLnNldHRpbWVvdXQoMSkKICAgICAgICAgc29jay5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kLCBiInNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrLnNlbmQsIGIic3BhbSIpCiAKICAgICBkZWYgdGVzdE5ld0F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgICMgdGVzdGluZyAuZmFtaWx5LCAudHlwZSBhbmQgLnByb3RvY29sCisKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmZhbWlseSwgc29ja2V0LkFGX0lORVQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay50eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIGlmIGhhc2F0dHIoc29ja2V0LCAnU09DS19DTE9FWEVDJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNvY2sudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tldC5TT0NLX1NUUkVBTSB8IHNvY2tldC5TT0NLX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09DS19TVFJFQU0pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnByb3RvLCAwKQogICAgICAgICBzb2NrLmNsb3NlKCkKIApAQCAtMTEyNiw5ICsxMTkzLDEyIEBACiAgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCA4MCkKICAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUpCiAgICAgICAgICMgdGVzdCBmYW1pbHkgYW5kIHNvY2t0eXBlIGZpbHRlcnMKLSAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgc29ja2V0LkFGX0lORVQpCi0gICAgICAgIGZvciBmYW1pbHksIF8sIF8sIF8sIF8gaW4gaW5mb3M6CisgICAgICAgIGluZm9zID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIDgwLCBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBfLCBfLCBfIGluIGluZm9zOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYW1pbHksIHNvY2tldC5BRl9JTkVUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZmFtaWx5KSwgJ0FkZHJlc3NGYW1pbHkuQUZfSU5FVCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHR5cGUpLCAnU29ja2V0VHlwZS5TT0NLX1NUUkVBTScpCiAgICAgICAgIGluZm9zID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIDAsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgZm9yIF8sIHNvY2t0eXBlLCBfLCBfLCBfIGluIGluZm9zOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrdHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQpAQCAtMTE3Niw3ICsxMjQ2LDcgQEAKIAogICAgIGRlZiB0ZXN0X2dldG5hbWVpbmZvKHNlbGYpOgogICAgICAgICAjIG9ubHkgSVAgYWRkcmVzc2VzIGFyZSBhbGxvd2VkCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29ja2V0LmdldG5hbWVpbmZvLCAoJ21haWwucHl0aG9uLm9yZycsMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5nZXRuYW1laW5mbywgKCdtYWlsLnB5dGhvbi5vcmcnLDApLCAwKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldHdvcmsgaXMgbm90IGVuYWJsZWQnKQpAQCAtMTI5MSwxMCArMTM2MSwzMSBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuSVBWNl9FTkFCTEVELCAnSVB2NiByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiAgICAgZGVmIHRlc3RfZmxvd2luZm8oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2tldC5nZXRuYW1laW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKCc6OjEnLDAsIDB4ZmZmZmZmZmYpLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VwcG9ydC5IT1NUdjYsIDAsIDB4ZmZmZmZmZmYpLCAwKQogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzLmJpbmQsICgnOjoxJywgMCwgLTEwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHMuYmluZCwgKHN1cHBvcnQuSE9TVHY2LCAwLCAtMTApKQogCisgICAgZGVmIHRlc3Rfc3RyX2Zvcl9lbnVtcyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgQUZfKiBhbmQgU09DS18qIGNvbnN0YW50cyBoYXZlIGVudW0tbGlrZSBzdHJpbmcKKyAgICAgICAgIyByZXBycy4KKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzLmZhbWlseSksICdBZGRyZXNzRmFtaWx5LkFGX0lORVQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocy50eXBlKSwgJ1NvY2tldFR5cGUuU09DS19TVFJFQU0nKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsICdXaWxsIG5vdCB3b3JrIG9uIFdpbmRvd3MnKQorICAgIGRlZiB0ZXN0X3Vrbm93bl9zb2NrZXRfZmFtaWx5X3JlcHIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdoZW4gY3JlYXRlZCB3aXRoIGEgZmFtaWx5IHRoYXQncyBub3Qgb25lIG9mIHRoZSBrbm93bgorICAgICAgICAjIEFGXyovU09DS18qIGNvbnN0YW50cywgc29ja2V0LmZhbWlseSBqdXN0IHJldHVybnMgdGhlIG51bWJlci4KKyAgICAgICAgIworICAgICAgICAjIFRvIGRvIHRoaXMgd2UgZm9vbCBzb2NrZXQuc29ja2V0IGludG8gYmVsaWV2aW5nIGl0IGFscmVhZHkgaGFzIGFuCisgICAgICAgICMgb3BlbiBmZCBiZWNhdXNlIG9uIHRoaXMgcGF0aCBpdCBkb2Vzbid0IGFjdHVhbGx5IHZlcmlmeSB0aGUgZmFtaWx5IGFuZAorICAgICAgICAjIHR5cGUgYW5kIHBvcHVsYXRlcyB0aGUgc29ja2V0IG9iamVjdC4KKyAgICAgICAgIworICAgICAgICAjIE9uIFdpbmRvd3MgdGhpcyB0cmljayB3b24ndCB3b3JrLCBzbyB0aGUgdGVzdCBpcyBza2lwcGVkLgorICAgICAgICBmZCwgXyA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoZmFtaWx5PTQyNDI0LCB0eXBlPTEzMzMxLCBmaWxlbm89ZmQpIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmFtaWx5LCA0MjQyNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy50eXBlLCAxMzMzMSkKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9TT0NLRVRfQ0FOLCAnU29ja2V0Q2FuIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJhc2ljQ0FOVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMzA0LDEwICsxMzk1LDM1IEBACiAgICAgICAgIHNvY2tldC5QRl9DQU4KICAgICAgICAgc29ja2V0LkNBTl9SQVcKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RCQ01Db25zdGFudHMoc2VsZik6CisgICAgICAgIHNvY2tldC5DQU5fQkNNCisKKyAgICAgICAgIyBvcGNvZGVzCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1NFVFVQICAgICAjIGNyZWF0ZSAoY3ljbGljKSB0cmFuc21pc3Npb24gdGFzaworICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9ERUxFVEUgICAgIyByZW1vdmUgKGN5Y2xpYykgdHJhbnNtaXNzaW9uIHRhc2sKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfUkVBRCAgICAgICMgcmVhZCBwcm9wZXJ0aWVzIG9mIChjeWNsaWMpIHRyYW5zbWlzc2lvbiB0YXNrCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1NFTkQgICAgICAjIHNlbmQgb25lIENBTiBmcmFtZQorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9TRVRVUCAgICAgIyBjcmVhdGUgUlggY29udGVudCBmaWx0ZXIgc3Vic2NyaXB0aW9uCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX0RFTEVURSAgICAjIHJlbW92ZSBSWCBjb250ZW50IGZpbHRlciBzdWJzY3JpcHRpb24KKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfUkVBRCAgICAgICMgcmVhZCBwcm9wZXJ0aWVzIG9mIFJYIGNvbnRlbnQgZmlsdGVyIHN1YnNjcmlwdGlvbgorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9TVEFUVVMgICAgIyByZXBseSB0byBUWF9SRUFEIHJlcXVlc3QKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfRVhQSVJFRCAgICMgbm90aWZpY2F0aW9uIG9uIHBlcmZvcm1lZCB0cmFuc21pc3Npb25zIChjb3VudD0wKQorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9TVEFUVVMgICAgIyByZXBseSB0byBSWF9SRUFEIHJlcXVlc3QKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfVElNRU9VVCAgICMgY3ljbGljIG1lc3NhZ2UgaXMgYWJzZW50CisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX0NIQU5HRUQgICAjIHVwZGF0ZWQgQ0FOIGZyYW1lIChkZXRlY3RlZCBjb250ZW50IGNoYW5nZSkKKwogICAgIGRlZiB0ZXN0Q3JlYXRlU29ja2V0KHNlbGYpOgogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LlBGX0NBTiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuQ0FOX1JBVykgYXMgczoKICAgICAgICAgICAgIHBhc3MKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RDcmVhdGVCQ01Tb2NrZXQoc2VsZik6CisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19ER1JBTSwgc29ja2V0LkNBTl9CQ00pIGFzIHM6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdEJpbmRBbnkoc2VsZik6CiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKSBhcyBzOgogICAgICAgICAgICAgcy5iaW5kKCgnJywgKSkKQEAgLTEzMTUsNyArMTQzMSw3IEBACiAgICAgZGVmIHRlc3RUb29Mb25nSW50ZXJmYWNlTmFtZShzZWxmKToKICAgICAgICAgIyBtb3N0IHN5c3RlbXMgbGltaXQgSUZOQU1TSVogdG8gMTYsIHRha2UgMTAyNCB0byBiZSBzdXJlCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKSBhcyBzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzb2NrZXQuZXJyb3IsICdpbnRlcmZhY2UgbmFtZSB0b28gbG9uZycsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KE9TRXJyb3IsICdpbnRlcmZhY2UgbmFtZSB0b28gbG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYmluZCwgKCd4JyAqIDEwMjQsKSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX1JBV19MT09QQkFDSyIpLApAQCAtMTM0MCwxOSArMTQ1Niw4IEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9TT0NLRVRfQ0FOLCAnU29ja2V0Q2FuIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKLUB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBDQU5UZXN0KFRocmVhZGVkQ0FOU29ja2V0VGVzdCk6CiAKLSAgICAiIiJUaGUgQ0FOIGZyYW1lIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIDxsaW51eC9jYW4uaD46Ci0KLSAgICBzdHJ1Y3QgY2FuX2ZyYW1lIHsKLSAgICAgICAgY2FuaWRfdCBjYW5faWQ7ICAvKiAzMiBiaXQgQ0FOX0lEICsgRUZGL1JUUi9FUlIgZmxhZ3MgKi8KLSAgICAgICAgX191OCAgICBjYW5fZGxjOyAvKiBkYXRhIGxlbmd0aCBjb2RlOiAwIC4uIDggKi8KLSAgICAgICAgX191OCAgICBkYXRhWzhdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKLSAgICB9OwotICAgICIiIgotICAgIGNhbl9mcmFtZV9mbXQgPSAiPUlCM3g4cyIKLQogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CiAgICAgICAgIFRocmVhZGVkQ0FOU29ja2V0VGVzdC5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPW1ldGhvZE5hbWUpCiAKQEAgLTE0MDEsNiArMTUwNiw0NiBAQAogICAgICAgICBzZWxmLmNmMiA9IHNlbGYuYnVpbGRfY2FuX2ZyYW1lKDB4MTIsIGInXHg5OVx4MjJceDMzJykKICAgICAgICAgc2VsZi5jbGkuc2VuZChzZWxmLmNmMikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIF90ZXN0QkNNKHNlbGYpOgorICAgICAgICBjZiwgYWRkciA9IHNlbGYuY2xpLnJlY3Zmcm9tKHNlbGYuYnVmc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNmLCBjZikKKyAgICAgICAgY2FuX2lkLCBjYW5fZGxjLCBkYXRhID0gc2VsZi5kaXNzZWN0X2Nhbl9mcmFtZShjZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNhbl9pZCwgY2FuX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGF0YSwgZGF0YSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RCQ00oc2VsZik6CisgICAgICAgIGJjbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LlBGX0NBTiwgc29ja2V0LlNPQ0tfREdSQU0sIHNvY2tldC5DQU5fQkNNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoYmNtLmNsb3NlKQorICAgICAgICBiY20uY29ubmVjdCgoc2VsZi5pbnRlcmZhY2UsKSkKKyAgICAgICAgc2VsZi5jYW5faWQgPSAweDEyMworICAgICAgICBzZWxmLmRhdGEgPSBieXRlcyhbMHhjMCwgMHhmZiwgMHhlZV0pCisgICAgICAgIHNlbGYuY2YgPSBzZWxmLmJ1aWxkX2Nhbl9mcmFtZShzZWxmLmNhbl9pZCwgc2VsZi5kYXRhKQorICAgICAgICBvcGNvZGUgPSBzb2NrZXQuQ0FOX0JDTV9UWF9TRU5ECisgICAgICAgIGZsYWdzID0gMAorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgaXZhbDFfc2Vjb25kcyA9IGl2YWwxX3VzZWMgPSBpdmFsMl9zZWNvbmRzID0gaXZhbDJfdXNlYyA9IDAKKyAgICAgICAgYmNtX2Nhbl9pZCA9IDB4MDIyMgorICAgICAgICBuZnJhbWVzID0gMQorICAgICAgICBhc3NlcnQgbGVuKHNlbGYuY2YpID09IDE2CisgICAgICAgIGhlYWRlciA9IHN0cnVjdC5wYWNrKHNlbGYuYmNtX2NtZF9tc2dfZm10LAorICAgICAgICAgICAgICAgICAgICBvcGNvZGUsCisgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgaXZhbDFfc2Vjb25kcywKKyAgICAgICAgICAgICAgICAgICAgaXZhbDFfdXNlYywKKyAgICAgICAgICAgICAgICAgICAgaXZhbDJfc2Vjb25kcywKKyAgICAgICAgICAgICAgICAgICAgaXZhbDJfdXNlYywKKyAgICAgICAgICAgICAgICAgICAgYmNtX2Nhbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgbmZyYW1lcywKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBoZWFkZXJfcGx1c19mcmFtZSA9IGhlYWRlciArIHNlbGYuY2YKKyAgICAgICAgYnl0ZXNfc2VudCA9IGJjbS5zZW5kKGhlYWRlcl9wbHVzX2ZyYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzX3NlbnQsIGxlbihoZWFkZXJfcGx1c19mcmFtZSkpCisKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9TT0NLRVRfUkRTLCAnUkRTIHNvY2tldHMgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgQmFzaWNSRFNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE2MjMsNyArMTc2OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZiwgZmlsZW5vKQogICAgICAgICAjIGNsaV9jb25uIGNhbm5vdCBiZSB1c2VkIGFueW1vcmUuLi4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2xpX2Nvbm4uX2Nsb3NlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9jb25uLnJlY3YsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKICAgICAgICAgc2VsZi5jbGlfY29ubi5jbG9zZSgpCiAgICAgICAgICMgLi4uYnV0IHdlIGNhbiBjcmVhdGUgYW5vdGhlciBzb2NrZXQgdXNpbmcgdGhlIChzdGlsbCBvcGVuKQogICAgICAgICAjIGZpbGUgZGVzY3JpcHRvcgpAQCAtMTk5Miw3ICsyMTM3LDcgQEAKICAgICBkZWYgX3Rlc3RTZW5kbXNnRXhjZXNzQ21zZ1JlamVjdChzZWxmKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc29ja2V0LCAiQ01TR19TUEFDRSIpOgogICAgICAgICAgICAgIyBDYW4gb25seSBzZW5kIG9uZSBpdGVtCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgICAgIHNlbGYuc2VuZG1zZ1RvU2VydmVyKFtNU0ddLCBbKDAsIDAsIGIiIiksICgwLCAwLCBiIiIpXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNtLmV4Y2VwdGlvbi5lcnJubykKICAgICAgICAgc2VsZi5zZW5kVG9TZXJ2ZXIoYiJkb25lIikKQEAgLTIwMDMsNyArMjE0OCw3IEBACiAKICAgICBkZWYgX3Rlc3RTZW5kbXNnQWZ0ZXJDbG9zZShzZWxmKToKICAgICAgICAgc2VsZi5jbGlfc29jay5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zZW5kbXNnVG9TZXJ2ZXIsIFtNU0ddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLnNlbmRtc2dUb1NlcnZlciwgW01TR10pCiAKIAogY2xhc3MgU2VuZG1zZ1N0cmVhbVRlc3RzKFNlbmRtc2dUZXN0cyk6CkBAIC0yMDQ3LDcgKzIxOTIsNyBAQAogICAgIEB0ZXN0U2VuZG1zZ0RvbnRXYWl0LmNsaWVudF9za2lwCiAgICAgZGVmIF90ZXN0U2VuZG1zZ0RvbnRXYWl0KHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZG1zZ1RvU2VydmVyKFtiImEiKjUxMl0sIFtdLCBzb2NrZXQuTVNHX0RPTlRXQUlUKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjbS5leGNlcHRpb24uZXJybm8sCkBAIC0yMDY3LDkgKzIyMTIsOSBAQAogICAgICAgICBwYXNzCiAKICAgICBkZWYgX3Rlc3RTZW5kbXNnTm9EZXN0QWRkcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9zb2NrLnNlbmRtc2csCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX3NvY2suc2VuZG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgW01TR10pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5jbGlfc29jay5zZW5kbXNnLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9zb2NrLnNlbmRtc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtNU0ddLCBbXSwgMCwgTm9uZSkKIAogCkBAIC0yMTU1LDcgKzIzMDAsNyBAQAogICAgIGRlZiB0ZXN0UmVjdm1zZ0FmdGVyQ2xvc2Uoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCByZWN2bXNnW19pbnRvXSgpIGZhaWxzIG9uIGEgY2xvc2VkIHNvY2tldC4KICAgICAgICAgc2VsZi5zZXJ2X3NvY2suY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuZG9SZWN2bXNnLCBzZWxmLnNlcnZfc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5kb1JlY3Ztc2csIHNlbGYuc2Vydl9zb2NrLCAxMDI0KQogCiAgICAgZGVmIF90ZXN0UmVjdm1zZ0FmdGVyQ2xvc2Uoc2VsZik6CiAgICAgICAgIHBhc3MKQEAgLTI2MDYsNyArMjc1MSw3IEBACiAgICAgICAgICMgY2FsbCBmYWlscywganVzdCBzZW5kIG1zZyB3aXRoIG5vIGFuY2lsbGFyeSBkYXRhLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYnl0ZXMgPSBzZWxmLnNlbmRtc2dUb1NlcnZlcihbbXNnXSwgYW5jZGF0YSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBDaGVjayB0aGF0IGl0IHdhcyB0aGUgc3lzdGVtIGNhbGwgdGhhdCBmYWlsZWQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLmVycm5vLCBpbnQpCiAgICAgICAgICAgICBuYnl0ZXMgPSBzZWxmLnNlbmRtc2dUb1NlcnZlcihbbXNnXSkKQEAgLTI5ODQsNyArMzEyOSw3IEBACiAgICAgICAgICAgICAgICAgICBhcnJheS5hcnJheSgiaSIsIFtzZWxmLnRyYWZmaWNfY2xhc3NdKS50b2J5dGVzKCkgKyBiIlx4MDAiKSwKICAgICAgICAgICAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUExJTUlULAogICAgICAgICAgICAgICAgICAgYXJyYXkuYXJyYXkoImkiLCBbc2VsZi5ob3BfbGltaXRdKSldKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5lcnJubywgaW50KQogICAgICAgICAgICAgbmJ5dGVzID0gc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoCiAgICAgICAgICAgICAgICAgW01TR10sCkBAIC0zNDQyLDEwICszNTg3LDEwIEBACiAgICAgICAgIHNlbGYuc2Vydi5zZXR0aW1lb3V0KHNlbGYudGltZW91dCkKIAogICAgIGRlZiBjaGVja0ludGVycnVwdGVkUmVjdihzZWxmLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAjIENoZWNrIHRoYXQgZnVuYygqYXJncywgKiprd2FyZ3MpIHJhaXNlcyBzb2NrZXQuZXJyb3Igd2l0aCBhbgorICAgICAgICAjIENoZWNrIHRoYXQgZnVuYygqYXJncywgKiprd2FyZ3MpIHJhaXNlcyBPU0Vycm9yIHdpdGggYW4KICAgICAgICAgIyBlcnJubyBvZiBFSU5UUiB3aGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLgogICAgICAgICBzZWxmLnNldEFsYXJtKHNlbGYuYWxhcm1fdGltZSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShjbS5leGNlcHRpb24sIHNvY2tldC50aW1lb3V0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVFIpCkBAIC0zNTAyLDkgKzM2NDcsOSBAQAogCiAgICAgZGVmIGNoZWNrSW50ZXJydXB0ZWRTZW5kKHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncyksIHJ1biBpbiBhIGxvb3AsIHJhaXNlcwotICAgICAgICAjIHNvY2tldC5lcnJvciB3aXRoIGFuIGVycm5vIG9mIEVJTlRSIHdoZW4gaW50ZXJydXB0ZWQgYnkgYQorICAgICAgICAjIE9TRXJyb3Igd2l0aCBhbiBlcnJubyBvZiBFSU5UUiB3aGVuIGludGVycnVwdGVkIGJ5IGEKICAgICAgICAgIyBzaWduYWwuCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgc2VsZi5zZXRBbGFybShzZWxmLmFsYXJtX3RpbWUpCiAgICAgICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCkBAIC0zNjAzLDcgKzM3NDgsNyBAQAogICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc2Vydi5hY2NlcHQoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZW5kID0gdGltZS50aW1lKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChlbmQgLSBzdGFydCkgPCAxLjAsICJFcnJvciBzZXR0aW5nIG5vbi1ibG9ja2luZyBtb2RlLiIpCkBAIC0zNjM4LDcgKzM3ODMsNyBAQAogICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc2Vydi5hY2NlcHQoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZW5kID0gdGltZS50aW1lKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChlbmQgLSBzdGFydCkgPCAxLjAsICJFcnJvciBjcmVhdGluZyB3aXRoIG5vbi1ibG9ja2luZyBtb2RlLiIpCkBAIC0zNjY4LDcgKzM4MTMsNyBAQAogICAgICAgICBzZWxmLnNlcnYuc2V0YmxvY2tpbmcoMCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXJyb3IgdHJ5aW5nIHRvIGRvIG5vbi1ibG9ja2luZyBhY2NlcHQuIikKQEAgLTM2OTgsNyArMzg0Myw3IEBACiAgICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoMCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbXNnID0gY29ubi5yZWN2KGxlbihNU0cpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXJyb3IgdHJ5aW5nIHRvIGRvIG5vbi1ibG9ja2luZyByZWN2LiIpCkBAIC0zNzgxLDcgKzM5MjYsNyBAQAogICAgICAgICAjIEZpcnN0IHJlYWQgcmFpc2VzIGEgdGltZW91dAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCwgc2VsZi5yZWFkX2ZpbGUucmVhZCwgMSkKICAgICAgICAgIyBTZWNvbmQgcmVhZCBpcyBkaXNhbGxvd2VkCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY3R4OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGN0eDoKICAgICAgICAgICAgIHNlbGYucmVhZF9maWxlLnJlYWQoMSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigiY2Fubm90IHJlYWQgZnJvbSB0aW1lZCBvdXQgb2JqZWN0Iiwgc3RyKGN0eC5leGNlcHRpb24pKQogCkBAIC0zODczLDcgKzQwMTgsNyBAQAogICAgICAgICBzZWxmLnJlYWRfZmlsZS5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYucmVhZF9maWxlLmZpbGVubykKICAgICAgICAgc2VsZi5jbGlfY29ubi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5jbGlfY29ubi5nZXRzb2NrbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfY29ubi5nZXRzb2NrbmFtZSkKIAogICAgIGRlZiBfdGVzdFJlYWxDbG9zZShzZWxmKToKICAgICAgICAgcGFzcwpAQCAtMzkxMCw3ICs0MDU1LDcgQEAKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX3JhaXNlX2VpbnRyKCk6Ci0gICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnJuby5FSU5UUiwgImludGVycnVwdGVkIikKKyAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FSU5UUiwgImludGVycnVwdGVkIikKIAogICAgIGRlZiBfdGV4dGlvd3JhcF9tb2NrX3NvY2tldChzZWxmLCBtb2NrLCBidWZmZXJpbmc9LTEpOgogICAgICAgICByYXcgPSBzb2NrZXQuU29ja2V0SU8obW9jaywgInIiKQpAQCAtNDAyMiw3ICs0MTY3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIHNlbGYucmVhZF9tc2cpCiAgICAgICAgICMgLi4udW50aWwgdGhlIGZpbGUgaXMgaXRzZWxmIGNsb3NlZAogICAgICAgICBzZWxmLnJlYWRfZmlsZS5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5jbGlfY29ubi5yZWN2LCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9jb25uLnJlY3YsIDEwMjQpCiAKICAgICBkZWYgX3Rlc3RNYWtlZmlsZUNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLndyaXRlX2ZpbGUud3JpdGUoc2VsZi53cml0ZV9tc2cpCkBAIC00MTcxLDcgKzQzMTYsNyBAQAogICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKICAgICAgICAgY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xpLmNsb3NlKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjbGkuY29ubmVjdCgoSE9TVCwgcG9ydCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQ09OTlJFRlVTRUQpCiAKQEAgLTQxNzksNyArNDMyNCw3IEBACiAgICAgICAgICMgSXNzdWUgIzk3OTI6IGVycm9ycyByYWlzZWQgYnkgY3JlYXRlX2Nvbm5lY3Rpb24oKSBzaG91bGQgaGF2ZQogICAgICAgICAjIGEgcHJvcGVyIGVycm5vIGF0dHJpYnV0ZS4KICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgcG9ydCkpCiAKICAgICAgICAgIyBJc3N1ZSAjMTYyNTc6IGNyZWF0ZV9jb25uZWN0aW9uKCkgY2FsbHMgZ2V0YWRkcmluZm8oKSBhZ2FpbnN0CkBAIC00MzI3LDcgKzQ0NzIsNyBAQAogICAgICAgICAgICAgZm9vID0gc2VsZi5zZXJ2LmFjY2VwdCgpCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHRpbWVvdXQgaW5zdGVhZCBvZiBlcnJvciAoVENQKSIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgb2sgPSBUcnVlCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIChUQ1ApIikKQEAgLTQzODQsNyArNDUyOSw3IEBACiAgICAgICAgICAgICBmb28gPSBzZWxmLnNlcnYucmVjdigxMDI0KQogICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB0aW1lb3V0IGluc3RlYWQgb2YgZXJyb3IgKFVEUCkiKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG9rID0gVHJ1ZQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAoVURQKSIpCkBAIC00Mzk0LDEwICs0NTM5LDEwIEBACiBjbGFzcyBUZXN0RXhjZXB0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdEV4Y2VwdGlvblRyZWUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5lcnJvciwgRXhjZXB0aW9uKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmhlcnJvciwgc29ja2V0LmVycm9yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmdhaWVycm9yLCBzb2NrZXQuZXJyb3IpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQudGltZW91dCwgc29ja2V0LmVycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoT1NFcnJvciwgRXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmhlcnJvciwgT1NFcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5nYWllcnJvciwgT1NFcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC50aW1lb3V0LCBPU0Vycm9yKSkKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdsaW51eCcsICdMaW51eCBzcGVjaWZpYyB0ZXN0JykKIGNsYXNzIFRlc3RMaW51eEFic3RyYWN0TmFtZXNwYWNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQ0MjQsNyArNDU2OSw3IEBACiAgICAgZGVmIHRlc3ROYW1lT3ZlcmZsb3coc2VsZik6CiAgICAgICAgIGFkZHJlc3MgPSAiXHgwMCIgKyAiaCIgKiBzZWxmLlVOSVhfUEFUSF9NQVgKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHMuYmluZCwgYWRkcmVzcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHMuYmluZCwgYWRkcmVzcykKIAogICAgIGRlZiB0ZXN0U3RyTmFtZShzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGF0IGFuIGFic3RyYWN0IG5hbWUgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZy4KQEAgLTQ2ODEsNyArNDgyNiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLl9jbG9zZWQpCiAgICAgICAgICMgZXhjZXB0aW9uIGluc2lkZSB3aXRoIGJsb2NrCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2suc2VuZGFsbCwgYidmb28nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLl9jbG9zZWQpCiAKICAgICBkZWYgdGVzdENyZWF0ZUNvbm5lY3Rpb25CYXNlKHNlbGYpOgpAQCAtNDcwOSwxOSArNDg1NCw3NiBAQAogICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzKSBhcyBzb2NrOgogICAgICAgICAgICAgc29jay5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLl9jbG9zZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2suc2VuZGFsbCwgYidmb28nKQogCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiU09DS19DTE9FWEVDIiksCi0gICAgICAgICAgICAgICAgICAgICAiU09DS19DTE9FWEVDIG5vdCBkZWZpbmVkIikKLUB1bml0dGVzdC5za2lwVW5sZXNzKGZjbnRsLCAibW9kdWxlIGZjbnRsIG5vdCBhdmFpbGFibGUiKQotY2xhc3MgQ2xvZXhlY0NvbnN0YW50VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBJbmhlcml0YW5jZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiU09DS19DTE9FWEVDIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNPQ0tfQ0xPRVhFQyBub3QgZGVmaW5lZCIpCiAgICAgQHN1cHBvcnQucmVxdWlyZXNfbGludXhfdmVyc2lvbigyLCA2LCAyOCkKICAgICBkZWYgdGVzdF9TT0NLX0NMT0VYRUMoc2VsZik6CiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0NLX1NUUkVBTSB8IHNvY2tldC5TT0NLX0NMT0VYRUMpIGFzIHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy50eXBlICYgc29ja2V0LlNPQ0tfQ0xPRVhFQykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChzLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuZ2V0X2luaGVyaXRhYmxlKCkpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9kdXAoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgbmV3c29jayA9IHNvY2suZHVwKCkKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBuZXdzb2NrOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3c29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9zZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgc29jay5zZXRfaW5oZXJpdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgVHJ1ZSkKKworICAgICAgICAgICAgc29jay5zZXRfaW5oZXJpdGFibGUoRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihmY250bCBpcyBOb25lLCAibmVlZCBmY250bCIpCisgICAgZGVmIHRlc3RfZ2V0X2luaGVyaXRhYmxlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorCisgICAgICAgICAgICAjIGNsZWFyIEZEX0NMT0VYRUMgZmxhZworICAgICAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkKKyAgICAgICAgICAgIGZsYWdzICY9IH5mY250bC5GRF9DTE9FWEVDCisgICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGRCwgZmxhZ3MpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoZmNudGwgaXMgTm9uZSwgIm5lZWQgZmNudGwiKQorICAgIGRlZiB0ZXN0X3NldF9pbmhlcml0YWJsZV9jbG9leGVjKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY250bC5GRF9DTE9FWEVDKQorCisgICAgICAgICAgICBzb2NrLnNldF9pbmhlcml0YWJsZShUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKQorCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgInNvY2tldHBhaXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZCBzb2NrZXQuc29ja2V0cGFpcigpIikKKyAgICBkZWYgdGVzdF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICBzMSwgczIgPSBzb2NrZXQuc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzMS5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMyLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMi5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX05PTkJMT0NLIiksCkBAIC00ODkwLDcgKzUwOTIsNyBAQAogICAgICAgICBOZXR3b3JrQ29ubmVjdGlvbkF0dHJpYnV0ZXNUZXN0LAogICAgICAgICBOZXR3b3JrQ29ubmVjdGlvbkJlaGF2aW91clRlc3QsCiAgICAgICAgIENvbnRleHRNYW5hZ2Vyc1Rlc3QsCi0gICAgICAgIENsb2V4ZWNDb25zdGFudFRlc3QsCisgICAgICAgIEluaGVyaXRhbmNlVGVzdCwKICAgICAgICAgTm9uYmxvY2tDb25zdGFudFRlc3QKICAgICBdKQogICAgIHRlc3RzLmFwcGVuZChCYXNpY1NvY2tldFBhaXJUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkgYi9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQppbmRleCA1OWQ4ZTVkLi4wNjE3YjMwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQpAQCAtMiw4ICsyLDggQEAKIFRlc3Qgc3VpdGUgZm9yIHNvY2tldHNlcnZlci4KICIiIgogCitpbXBvcnQgX2ltcCBhcyBpbXAKIGltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgaW1wCiBpbXBvcnQgb3MKIGltcG9ydCBzZWxlY3QKIGltcG9ydCBzaWduYWwKQEAgLTI5LDcgKzI5LDcgQEAKIEhBVkVfVU5JWF9TT0NLRVRTID0gaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIikKIHJlcXVpcmVzX3VuaXhfc29ja2V0cyA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9VTklYX1NPQ0tFVFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBVbml4IHNvY2tldHMnKQotSEFWRV9GT1JLSU5HID0gaGFzYXR0cihvcywgImZvcmsiKSBhbmQgb3MubmFtZSAhPSAib3MyIgorSEFWRV9GT1JLSU5HID0gaGFzYXR0cihvcywgImZvcmsiKQogcmVxdWlyZXNfZm9ya2luZyA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9GT1JLSU5HLCAncmVxdWlyZXMgZm9ya2luZycpCiAKIGRlZiBzaWduYWxfYWxhcm0obik6CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIGZvciBmbiBpbiBzZWxmLnRlc3RfZmlsZXM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBzZWxmLnRlc3RfZmlsZXNbOl0gPSBbXQogCkBAIC05NiwyMSArOTYsNyBAQAogICAgICAgICAgICAgIyBYWFg6IFdlIG5lZWQgYSB3YXkgdG8gdGVsbCBBRl9VTklYIHRvIHBpY2sgaXRzIG93biBuYW1lCiAgICAgICAgICAgICAjIGxpa2UgQUZfSU5FVCBwcm92aWRlcyBwb3J0PT0wLgogICAgICAgICAgICAgZGlyID0gTm9uZQotICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgICAgICBkaXIgPSAnXHNvY2tldCcKICAgICAgICAgICAgIGZuID0gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD0ndW5peF9zb2NrZXQuJywgZGlyPWRpcikKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgICAgICAgICAgIyBBRl9VTklYIHNvY2tldCBuYW1lcyBvbiBPUy8yIHJlcXVpcmUgYSBzcGVjaWZpYyBwcmVmaXgKLSAgICAgICAgICAgICAgICAjIHdoaWNoIGNhbid0IGluY2x1ZGUgYSBkcml2ZSBsZXR0ZXIgYW5kIG11c3QgYWxzbyB1c2UKLSAgICAgICAgICAgICAgICAjIGJhY2tzbGFzaGVzIGFzIGRpcmVjdG9yeSBzZXBhcmF0b3JzCi0gICAgICAgICAgICAgICAgaWYgZm5bMV0gPT0gJzonOgotICAgICAgICAgICAgICAgICAgICBmbiA9IGZuWzI6XQotICAgICAgICAgICAgICAgIGlmIGZuWzBdIGluIChvcy5zZXAsIG9zLmFsdHNlcCk6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gZm5bMTpdCi0gICAgICAgICAgICAgICAgaWYgb3Muc2VwID09ICcvJzoKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmbi5yZXBsYWNlKG9zLnNlcCwgb3MuYWx0c2VwKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gZm4ucmVwbGFjZShvcy5hbHRzZXAsIG9zLnNlcCkKICAgICAgICAgICAgIHNlbGYudGVzdF9maWxlcy5hcHBlbmQoZm4pCiAgICAgICAgICAgICByZXR1cm4gZm4KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDlkMmIzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKQEAgLTAsMCArMSwxMzUgQEAKKyMgLSotIGNvZGluZzoga29pOC1yIC0qLQorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHVubGluaywgdW5sb2FkCitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworY2xhc3MgU291cmNlRW5jb2RpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BlcDI2MyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICLwydTPziIuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAgICAgYidceGQwXHg5Zlx4ZDBceGI4XHhkMVx4ODJceGQwXHhiZVx4ZDBceGJkJworICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAiXPAiLmVuY29kZSgidXRmLTgiKSwKKyAgICAgICAgICAgIGInXFxceGQwXHg5ZicKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfY29tcGlsZXN0cmluZyhzZWxmKToKKyAgICAgICAgIyBzZWUgIzE4ODIKKyAgICAgICAgYyA9IGNvbXBpbGUoYiJcbiMgY29kaW5nOiB1dGYtOFxudSA9ICdceGMzXHhiMydcbiIsICJkdW1teSIsICJleGVjIikKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGV4ZWMoYywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyd1J10sICdceGYzJykKKworICAgIGRlZiB0ZXN0X2lzc3VlMjMwMShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tcGlsZShiIiMgY29kaW5nOiBjcDkzMlxucHJpbnQgJ1x4OTRceDRlJyIsICJkdW1teSIsICJleGVjIikKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIHY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudGV4dCwgInByaW50ICdcdTVlNzQnXG4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKworICAgIGRlZiB0ZXN0X2lzc3VlNDYyNihzZWxmKToKKyAgICAgICAgYyA9IGNvbXBpbGUoIiMgY29kaW5nPWxhdGluLTFcblx1MDBjNiA9ICdcdTAwYzYnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ1x4YzYnXSwgJ1x4YzYnKQorCisgICAgZGVmIHRlc3RfaXNzdWUzMjk3KHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZSgiYSwgYiA9ICdcVTAwMDEwMTBGJywgJ1xcVTAwMDEwMTBGJyIsICJkdW1teSIsICJleGVjIikKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGV4ZWMoYywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIGRbJ2InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZFsnYSddKSwgbGVuKGRbJ2InXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNjaWkoZFsnYSddKSwgYXNjaWkoZFsnYiddKSkKKworICAgIGRlZiB0ZXN0X2lzc3VlNzgyMChzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBjaGVja19ib20oKSByZXN0b3JlcyBhbGwgYnl0ZXMgaW4gdGhlIHJpZ2h0IG9yZGVyIGlmCisgICAgICAgICMgY2hlY2tfYm9tKCkgZmFpbHMgaW4gcHlkZWJ1ZyBtb2RlOiBhIGJ1ZmZlciBzdGFydHMgd2l0aCB0aGUgZmlyc3QKKyAgICAgICAgIyBieXRlIG9mIGEgdmFsaWQgQk9NLCBidXQgbmV4dCBieXRlcyBhcmUgZGlmZmVyZW50CisKKyAgICAgICAgIyBvbmUgYnl0ZSBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTE2LUxFIEJPTQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgYidceGZmXHgyMCcpCisKKyAgICAgICAgIyB0d28gYnl0ZXMgaW4gY29tbW9uIHdpdGggdGhlIFVURi04IEJPTQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgYidceGVmXHhiYlx4MjAnKQorCisgICAgZGVmIHRlc3RfZXJyb3JfbWVzc2FnZShzZWxmKToKKyAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCisgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmZcbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogdXRmLTggLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2Zha2UnKToKKyAgICAgICAgICAgIGNvbXBpbGUoYicjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2lzby04ODU5LTE1Jyk6CisgICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsCisgICAgICAgICAgICAgICAgICAgICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnQk9NJyk6CisgICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsCisgICAgICAgICAgICAgICAgICAgICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgorICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnQk9NJyk6CisgICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorCisgICAgZGVmIHRlc3RfYmFkX2NvZGluZyhzZWxmKToKKyAgICAgICAgbW9kdWxlX25hbWUgPSAnYmFkX2NvZGluZycKKyAgICAgICAgc2VsZi52ZXJpZnlfYmFkX21vZHVsZShtb2R1bGVfbmFtZSkKKworICAgIGRlZiB0ZXN0X2JhZF9jb2RpbmcyKHNlbGYpOgorICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nMicKKyAgICAgICAgc2VsZi52ZXJpZnlfYmFkX21vZHVsZShtb2R1bGVfbmFtZSkKKworICAgIGRlZiB2ZXJpZnlfYmFkX21vZHVsZShzZWxmLCBtb2R1bGVfbmFtZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBfX2ltcG9ydF9fLCAndGVzdC4nICsgbW9kdWxlX25hbWUpCisKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aCwgbW9kdWxlX25hbWUgKyAnLnB5JykKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgIGJ5dGVzID0gZnAucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBieXRlcywgZmlsZW5hbWUsICdleGVjJykKKworICAgIGRlZiB0ZXN0X2V4ZWNfdmFsaWRfY29kaW5nKHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhiJyMgY29kaW5nOiBjcDk0OVxuYSA9ICJceGFhXHhhNyJcbicsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCAnXHUzMDQ3JykKKworICAgIGRlZiB0ZXN0X2ZpbGVfcGFyc2Uoc2VsZik6CisgICAgICAgICMgaXNzdWUxMTM0OiBhbGwgZW5jb2RpbmdzIG91dHNpZGUgbGF0aW4tMSBhbmQgdXRmLTggZmFpbCBvbgorICAgICAgICAjIG11bHRpbGluZSBzdHJpbmdzIGFuZCBsb25nIGxpbmVzICg+NTEyIGNvbHVtbnMpCisgICAgICAgIHVubG9hZChURVNURk4pCisgICAgICAgIGZpbGVuYW1lID0gVEVTVEZOICsgIi5weSIKKyAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IiwgZW5jb2Rpbmc9ImNwMTI1MiIpCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIjIC0qLSBjb2Rpbmc6IGNwMTI1MiAtKi1cbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiJycnQSBzaG9ydCBzdHJpbmdcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiJycnXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIidBIHZlcnkgbG9uZyBzdHJpbmcgJXMnXG4iICUgKCJYIiAqIDEwMDApKQorCisgICAgICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICAgICAgX19pbXBvcnRfXyhURVNURk4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKyAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSkKKyAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICJjIikKKyAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICJvIikKKyAgICAgICAgICAgIHVubG9hZChURVNURk4pCisKKyAgICBkZWYgdGVzdF9lcnJvcl9mcm9tX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTYyODkKKyAgICAgICAgaW5wdXQgPSAiIyBjb2Rpbmc6IGFzY2lpXG5cTntTTk9XTUFOfSIuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpIGFzIGM6CisgICAgICAgICAgICBjb21waWxlKGlucHV0LCAiPHN0cmluZz4iLCAiZXhlYyIpCisgICAgICAgIGV4cGVjdGVkID0gIidhc2NpaScgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGUgMHhlMiBpbiBwb3NpdGlvbiAxNjogIiBcCisgICAgICAgICAgICAgICAgICAgIm9yZGluYWwgbm90IGluIHJhbmdlKDEyOCkiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmV4Y2VwdGlvbi5hcmdzWzBdLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWMuZXhjZXB0aW9uLmFyZ3NbMF0pCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5IGIvTGliL3Rlc3QvdGVzdF9zc2wucHkKaW5kZXggOWZjNjAyNy4uMGRjMDRjMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zc2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zc2wucHkKQEAgLTYsNiArNiw3IEBACiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgdGltZQoraW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgZ2MKIGltcG9ydCBvcwogaW1wb3J0IGVycm5vCkBAIC0xNywxOSArMTgsMTUgQEAKIGltcG9ydCB3ZWFrcmVmCiBpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCBmdW5jdG9vbHMKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKIAogc3NsID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCJzc2wiKQogCi1QUk9UT0NPTFMgPSBbCi0gICAgc3NsLlBST1RPQ09MX1NTTHYzLAotICAgIHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MQotXQotaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgotICAgIFBST1RPQ09MUy5hcHBlbmQoc3NsLlBST1RPQ09MX1NTTHYyKQotCitQUk9UT0NPTFMgPSBzb3J0ZWQoc3NsLl9QUk9UT0NPTF9OQU1FUykKIEhPU1QgPSBzdXBwb3J0LkhPU1QKIAotZGF0YV9maWxlID0gbGFtYmRhIG5hbWU6IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBuYW1lKQorZGVmIGRhdGFfZmlsZSgqbmFtZSk6CisgICAgcmV0dXJuIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqbmFtZSkKIAogIyBUaGUgY3VzdG9tIGtleSBhbmQgY2VydGlmaWNhdGUgZmlsZXMgdXNlZCBpbiB0ZXN0X3NzbCBhcmUgZ2VuZXJhdGVkCiAjIHVzaW5nIExpYi90ZXN0L21ha2Vfc3NsX2NlcnRzLnB5LgpAQCAtNDcsNiArNDQsMTcgQEAKIEtFWV9QQVNTV09SRCA9ICJzb21lcGFzcyIKIENBUEFUSCA9IGRhdGFfZmlsZSgiY2FwYXRoIikKIEJZVEVTX0NBUEFUSCA9IG9zLmZzZW5jb2RlKENBUEFUSCkKK0NBRklMRV9ORVVST05JTyA9IGRhdGFfZmlsZSgiY2FwYXRoIiwgIjRlMTI5NWEzLjAiKQorQ0FGSUxFX0NBQ0VSVCA9IGRhdGFfZmlsZSgiY2FwYXRoIiwgIjVlZDM2Zjk5LjAiKQorCisKKyMgZW1wdHkgQ1JMCitDUkxGSUxFID0gZGF0YV9maWxlKCJyZXZvY2F0aW9uLmNybCIpCisKKyMgVHdvIGtleXMgYW5kIGNlcnRzIHNpZ25lZCBieSB0aGUgc2FtZSBDQSAoZm9yIFNOSSB0ZXN0cykKK1NJR05FRF9DRVJURklMRSA9IGRhdGFfZmlsZSgia2V5Y2VydDMucGVtIikKK1NJR05FRF9DRVJURklMRTIgPSBkYXRhX2ZpbGUoImtleWNlcnQ0LnBlbSIpCitTSUdOSU5HX0NBID0gZGF0YV9maWxlKCJweWNhY2VydC5wZW0iKQogCiBTVk5fUFlUSE9OX09SR19ST09UX0NFUlQgPSBkYXRhX2ZpbGUoImh0dHBzX3N2bl9weXRob25fb3JnX3Jvb3QucGVtIikKIApAQCAtNjAsNiArNjgsNyBAQAogREhGSUxFID0gZGF0YV9maWxlKCJkaDUxMi5wZW0iKQogQllURVNfREhGSUxFID0gb3MuZnNlbmNvZGUoREhGSUxFKQogCisKIGRlZiBoYW5kbGVfZXJyb3IocHJlZml4KToKICAgICBleGNfZm9ybWF0ID0gJyAnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oKnN5cy5leGNfaW5mbygpKSkKICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC03Myw2ICs4MiwyMyBAQAogICAgICMgMC45LjdoIG9yIGhpZ2hlcgogICAgIHJldHVybiBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8gPj0gKDAsIDksIDcsIDgsIDE1KQogCitkZWYgaGF2ZV92ZXJpZnlfZmxhZ3MoKToKKyAgICAjIDAuOS44IG9yIGhpZ2hlcgorICAgIHJldHVybiBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8gPj0gKDAsIDksIDgsIDAsIDE1KQorCitkZWYgYXNuMXRpbWUoY2VydF90aW1lKToKKyAgICAjIFNvbWUgdmVyc2lvbnMgb2YgT3BlblNTTCBpZ25vcmUgc2Vjb25kcywgc2VlICMxODIwNworICAgICMgMC45LjguaQorICAgIGlmIHNzbC5fT1BFTlNTTF9BUElfVkVSU0lPTiA9PSAoMCwgOSwgOCwgOSwgMTUpOgorICAgICAgICBmbXQgPSAiJWIgJWQgJUg6JU06JVMgJVkgR01UIgorICAgICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lLnN0cnB0aW1lKGNlcnRfdGltZSwgZm10KQorICAgICAgICBkdCA9IGR0LnJlcGxhY2Uoc2Vjb25kPTApCisgICAgICAgIGNlcnRfdGltZSA9IGR0LnN0cmZ0aW1lKGZtdCkKKyAgICAgICAgIyAlZCBhZGRzIGxlYWRpbmcgemVybyBidXQgQVNOMV9USU1FX3ByaW50KCkgdXNlcyBsZWFkaW5nIHNwYWNlCisgICAgICAgIGlmIGNlcnRfdGltZVs0XSA9PSAiMCI6CisgICAgICAgICAgICBjZXJ0X3RpbWUgPSBjZXJ0X3RpbWVbOjRdICsgIiAiICsgY2VydF90aW1lWzU6XQorCisgICAgcmV0dXJuIGNlcnRfdGltZQogCiAjIElzc3VlICM5NDE1OiBVYnVudHUgaGlqYWNrcyB0aGVpciBPcGVuU1NMIGFuZCBmb3JjZWZ1bGx5IGRpc2FibGVzIFNTTHYyCiBkZWYgc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbChmdW5jKToKQEAgLTkwLDE0ICsxMTYsMTIgQEAKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gZnVuYwogCituZWVkc19zbmkgPSB1bml0dGVzdC5za2lwVW5sZXNzKHNzbC5IQVNfU05JLCAiU05JIHN1cHBvcnQgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorCiAKIGNsYXNzIEJhc2ljU29ja2V0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfY29uc3RhbnRzKHNlbGYpOgotICAgICAgICAjc3NsLlBST1RPQ09MX1NTTHYyCi0gICAgICAgIHNzbC5QUk9UT0NPTF9TU0x2MjMKLSAgICAgICAgc3NsLlBST1RPQ09MX1NTTHYzCi0gICAgICAgIHNzbC5QUk9UT0NPTF9UTFN2MQogICAgICAgICBzc2wuQ0VSVF9OT05FCiAgICAgICAgIHNzbC5DRVJUX09QVElPTkFMCiAgICAgICAgIHNzbC5DRVJUX1JFUVVJUkVECkBAIC0xNzksOCArMjAzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnb3JnYW5pemF0aW9uTmFtZScsICdQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbicpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnbG9jYWxob3N0JyksKSkKICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydub3RBZnRlciddLCAnT2N0ICA1IDIzOjAxOjU2IDIwMjAgR01UJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydub3RCZWZvcmUnXSwgJ09jdCAgOCAyMzowMTo1NiAyMDEwIEdNVCcpCisgICAgICAgICMgTm90ZSB0aGUgbmV4dCB0aHJlZSBhc3NlcnRzIHdpbGwgZmFpbCBpZiB0aGUga2V5cyBhcmUgcmVnZW5lcmF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydub3RBZnRlciddLCBhc24xdGltZSgnT2N0ICA1IDIzOjAxOjU2IDIwMjAgR01UJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnbm90QmVmb3JlJ10sIGFzbjF0aW1lKCdPY3QgIDggMjM6MDE6NTYgMjAxMCBHTVQnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydzZXJpYWxOdW1iZXInXSwgJ0Q3QzczODE5MTlBRkMyNEUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ3N1YmplY3QnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnY291bnRyeU5hbWUnLCAnWFknKSwpLApAQCAtMTk4LDYgKzIyMywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICgoJ0ROUycsICdwcm9qZWN0cy5kZXZlbG9wZXIubm9raWEuY29tJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ3Byb2plY3RzLmZvcnVtLm5va2lhLmNvbScpKQogICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAjIGV4dHJhIE9DU1AgYW5kIEFJQSBmaWVsZHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydPQ1NQJ10sICgnaHR0cDovL29jc3AudmVyaXNpZ24uY29tJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ2NhSXNzdWVycyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnaHR0cDovL1NWUkludGwtRzMtYWlhLnZlcmlzaWduLmNvbS9TVlJJbnRsRzMuY2VyJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ2NybERpc3RyaWJ1dGlvblBvaW50cyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnaHR0cDovL1NWUkludGwtRzMtY3JsLnZlcmlzaWduLmNvbS9TVlJJbnRsRzMuY3JsJywpKQogCiAgICAgZGVmIHRlc3RfcGFyc2VfY2VydF9DVkVfMjAxM180MjM4KHNlbGYpOgogICAgICAgICBwID0gc3NsLl9zc2wuX3Rlc3RfZGVjb2RlX2NlcnQoTlVMTEJZVEVDRVJUKQpAQCAtMjgwLDE1ICszMTEsMTUgQEAKIAogICAgIGRlZiB0ZXN0X3dyYXBwZWRfdW5jb25uZWN0ZWQoc2VsZik6CiAgICAgICAgICMgTWV0aG9kcyBvbiBhbiB1bmNvbm5lY3RlZCBTU0xTb2NrZXQgcHJvcGFnYXRlIHRoZSBvcmlnaW5hbAotICAgICAgICAjIHNvY2tldC5lcnJvciByYWlzZSBieSB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgorICAgICAgICAjIE9TRXJyb3IgcmFpc2UgYnkgdGhlIHVuZGVybHlpbmcgc29ja2V0IG9iamVjdC4KICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCiAgICAgICAgIHdpdGggc3NsLndyYXBfc29ja2V0KHMpIGFzIHNzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2LCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2X2ludG8sIGJ5dGVhcnJheShiJ3gnKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdmZyb20sIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3Zmcm9tX2ludG8sIGJ5dGVhcnJheShiJ3gnKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3Muc2VuZCwgYid4JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3Muc2VuZHRvLCBiJ3gnLCAoJzAuMC4wLjAnLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnJlY3YsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5yZWN2X2ludG8sIGJ5dGVhcnJheShiJ3gnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnJlY3Zmcm9tLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdmZyb21faW50bywgYnl0ZWFycmF5KGIneCcpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3Muc2VuZCwgYid4JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnNlbmR0bywgYid4JywgKCcwLjAuMC4wJywgMCkpCiAKICAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgogICAgICAgICAjIElzc3VlICM4NTI0OiB3aGVuIGNyZWF0aW5nIGFuIFNTTCBzb2NrZXQsIHRoZSB0aW1lb3V0IG9mIHRoZQpAQCAtMzEzLDE1ICszNDQsMTUgQEAKICAgICAgICAgd2l0aCBzc2wud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSwgY2VydGZpbGU9Q0VSVEZJTEUpIGFzIHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjYW4ndCBjb25uZWN0IGluIHNlcnZlci1zaWRlIG1vZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0LCAoSE9TVCwgODA4MCkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1XUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1DRVJURklMRSwga2V5ZmlsZT1XUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1XUk9OR0NFUlQsIGtleWZpbGU9V1JPTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQpAQCAtNDkzLDYgKzUyNCwxMTQgQEAKICAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ociwgc3RyKGNtLndhcm5pbmcuYXJnc1swXSkpCiAKKyAgICBkZWYgdGVzdF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoc2VsZik6CisgICAgICAgIHBhdGhzID0gc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhdGhzKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhdGhzLCBzc2wuRGVmYXVsdFZlcmlmeVBhdGhzKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9ESVIiXSA9IENBUEFUSAorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9GSUxFIl0gPSBDRVJURklMRQorICAgICAgICAgICAgcGF0aHMgPSBzc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FmaWxlLCBDRVJURklMRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FwYXRoLCBDQVBBVEgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3Mgc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2VudW1fY2VydGlmaWNhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3NsLmVudW1fY2VydGlmaWNhdGVzKCJDQSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3NsLmVudW1fY2VydGlmaWNhdGVzKCJST09UIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuZW51bV9jZXJ0aWZpY2F0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgc3NsLmVudW1fY2VydGlmaWNhdGVzLCAiIikKKworICAgICAgICB0cnVzdF9vaWRzID0gc2V0KCkKKyAgICAgICAgZm9yIHN0b3JlbmFtZSBpbiAoIkNBIiwgIlJPT1QiKToKKyAgICAgICAgICAgIHN0b3JlID0gc3NsLmVudW1fY2VydGlmaWNhdGVzKHN0b3JlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdG9yZSwgbGlzdCkKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIHN0b3JlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtZW50LCB0dXBsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbGVtZW50KSwgMykKKyAgICAgICAgICAgICAgICBjZXJ0LCBlbmMsIHRydXN0ID0gZWxlbWVudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjZXJ0LCBieXRlcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVuYywgeyJ4NTA5X2FzbiIsICJwa2NzXzdfYXNuIn0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRydXN0LCAoc2V0LCBib29sKSkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRydXN0LCBzZXQpOgorICAgICAgICAgICAgICAgICAgICB0cnVzdF9vaWRzLnVwZGF0ZSh0cnVzdCkKKworICAgICAgICBzZXJ2ZXJBdXRoID0gIjEuMy42LjEuNS41LjcuMy4xIgorICAgICAgICBzZWxmLmFzc2VydEluKHNlcnZlckF1dGgsIHRydXN0X29pZHMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3Mgc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2VudW1fY3JscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNzbC5lbnVtX2NybHMoIkNBIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLmVudW1fY3JscykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBzc2wuZW51bV9jcmxzLCAiIikKKworICAgICAgICBjcmxzID0gc3NsLmVudW1fY3JscygiQ0EiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY3JscywgbGlzdCkKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gY3JsczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtZW50LCB0dXBsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVsZW1lbnQpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVsZW1lbnRbMF0sIGJ5dGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtZW50WzFdLCB7Ing1MDlfYXNuIiwgInBrY3NfN19hc24ifSkKKworCisgICAgZGVmIHRlc3RfYXNuMW9iamVjdChzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAoMTI5LCAnc2VydmVyQXV0aCcsICdUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMScpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0KCcxLjMuNi4xLjUuNS43LjMuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwubmlkLCAxMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLnNob3J0bmFtZSwgJ3NlcnZlckF1dGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5sb25nbmFtZSwgJ1RMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwub2lkLCAnMS4zLjYuMS41LjUuNy4zLjEnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsLCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5fQVNOMU9iamVjdCwgJ3NlcnZlckF1dGgnKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkKDEyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsLCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkLCAtMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJ1bmtub3duIE5JRCAxMDAwMDAiKToKKyAgICAgICAgICAgIHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkKDEwMDAwMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb2JqID0gc3NsLl9BU04xT2JqZWN0LmZyb21uaWQoaSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9iai5uaWQsIGludCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLnNob3J0bmFtZSwgc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmoubG9uZ25hbWUsIHN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLm9pZCwgKHN0ciwgdHlwZShOb25lKSkpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0LmZyb21uYW1lKCdUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbCwgc3NsLl9BU04xT2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5fQVNOMU9iamVjdC5mcm9tbmFtZSgnc2VydmVyQXV0aCcpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJzEuMy42LjEuNS41LjcuMy4xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAidW5rbm93biBvYmplY3QgJ3NlcnZlcmF1dGgnIik6CisgICAgICAgICAgICBzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJ3NlcnZlcmF1dGgnKQorCisgICAgZGVmIHRlc3RfcHVycG9zZV9lbnVtKHNlbGYpOgorICAgICAgICB2YWwgPSBzc2wuX0FTTjFPYmplY3QoJzEuMy42LjEuNS41LjcuMy4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRILCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEgsIHZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5uaWQsIDEyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5zaG9ydG5hbWUsICdzZXJ2ZXJBdXRoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4zLjEnKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdCgnMS4zLjYuMS41LjUuNy4zLjInKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgsIHNzbC5fQVNOMU9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5DTElFTlRfQVVUSCwgdmFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILm5pZCwgMTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILnNob3J0bmFtZSwgJ2NsaWVudEF1dGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILm9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMicpCisKICAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9kdGxzKHNlbGYpOgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQpAQCAtNTA5LDExICs2NDgsOCBAQAogCiAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgotICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyKQotICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjMpCi0gICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgZm9yIHByb3RvY29sIGluIFBST1RPQ09MUzoKKyAgICAgICAgICAgIHNzbC5TU0xDb250ZXh0KHByb3RvY29sKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNzbC5TU0xDb250ZXh0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuU1NMQ29udGV4dCwgLTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5TU0xDb250ZXh0LCA0MikKQEAgLTU1MCw3ICs2ODYsNyBAQAogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICBjdHgub3B0aW9ucyA9IDAKIAotICAgIGRlZiB0ZXN0X3ZlcmlmeShzZWxmKToKKyAgICBkZWYgdGVzdF92ZXJpZnlfbW9kZShzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICAjIERlZmF1bHQgdmFsdWUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX05PTkUpCkBAIC01NjUsMTMgKzcwMSwzMiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gNDIKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhdmVfdmVyaWZ5X2ZsYWdzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgInZlcmlmeV9mbGFncyBuZWVkIE9wZW5TU0wgPiAwLjkuOCIpCisgICAgZGVmIHRlc3RfdmVyaWZ5X2ZsYWdzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICMgZGVmYXVsdCB2YWx1ZSBieSBPcGVuU1NMCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9mbGFncywgc3NsLlZFUklGWV9ERUZBVUxUKQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYpCisgICAgICAgIGN0eC52ZXJpZnlfZmxhZ3MgPSBzc2wuVkVSSUZZX0NSTF9DSEVDS19DSEFJTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfQ1JMX0NIRUNLX0NIQUlOKQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9ERUZBVUxUCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9mbGFncywgc3NsLlZFUklGWV9ERUZBVUxUKQorICAgICAgICAjIHN1cHBvcnRzIGFueSB2YWx1ZQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRiB8IHNzbC5WRVJJRllfWDUwOV9TVFJJQ1QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYgfCBzc2wuVkVSSUZZX1g1MDlfU1RSSUNUKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gTm9uZQorCiAgICAgZGVmIHRlc3RfbG9hZF9jZXJ0X2NoYWluKHNlbGYpOgogICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCiAgICAgICAgICMgQ29tYmluZWQga2V5IGFuZCBjZXJ0IGluIGEgc2luZ2xlIGZpbGUKICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSwga2V5ZmlsZT1DRVJURklMRSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF9jZXJ0X2NoYWluLCBrZXlmaWxlPUNFUlRGSUxFKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihXUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJQRU0gbGliIik6CkBAIC02NTUsOCArODEwLDggQEAKICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhCWVRFU19DRVJURklMRSkKICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGU9QllURVNfQ0VSVEZJTEUsIGNhcGF0aD1Ob25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucywgTm9uZSwgTm9uZSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhXUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJQRU0gbGliIik6CkBAIC02NjcsNiArODIyLDY0IEBACiAgICAgICAgICMgSXNzdWUgIzEwOTg5OiBjcmFzaCBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IHR5cGUgaXMgaW52YWxpZAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMsIE5vbmUsIFRydWUpCiAKKyAgICBkZWYgdGVzdF9sb2FkX3ZlcmlmeV9jYWRhdGEoc2VsZik6CisgICAgICAgICMgdGVzdCBjYWRhdGEKKyAgICAgICAgd2l0aCBvcGVuKENBRklMRV9DQUNFUlQpIGFzIGY6CisgICAgICAgICAgICBjYWNlcnRfcGVtID0gZi5yZWFkKCkKKyAgICAgICAgY2FjZXJ0X2RlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChjYWNlcnRfcGVtKQorICAgICAgICB3aXRoIG9wZW4oQ0FGSUxFX05FVVJPTklPKSBhcyBmOgorICAgICAgICAgICAgbmV1cm9uaW9fcGVtID0gZi5yZWFkKCkKKyAgICAgICAgbmV1cm9uaW9fZGVyID0gc3NsLlBFTV9jZXJ0X3RvX0RFUl9jZXJ0KG5ldXJvbmlvX3BlbSkKKworICAgICAgICAjIHRlc3QgUEVNCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDApCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNhY2VydF9wZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAxKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1uZXVyb25pb19wZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorICAgICAgICAjIGNlcnQgYWxyZWFkeSBpbiBoYXNoIHRhYmxlCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPW5ldXJvbmlvX3BlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyBjb21iaW5lZAorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbWJpbmVkID0gIlxuIi5qb2luKChjYWNlcnRfcGVtLCBuZXVyb25pb19wZW0pKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jb21iaW5lZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyB3aXRoIGp1bmsgYXJvdW5kIHRoZSBjZXJ0cworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbWJpbmVkID0gWyJoZWFkIiwgY2FjZXJ0X3BlbSwgIm90aGVyIiwgbmV1cm9uaW9fcGVtLCAiYWdhaW4iLAorICAgICAgICAgICAgICAgICAgICBuZXVyb25pb19wZW0sICJ0YWlsIl0KKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9IlxuIi5qb2luKGNvbWJpbmVkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyB0ZXN0IERFUgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNhY2VydF9kZXIpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPW5ldXJvbmlvX2RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisgICAgICAgICMgY2VydCBhbHJlYWR5IGluIGhhc2ggdGFibGUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y2FjZXJ0X2RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyBjb21iaW5lZAorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbWJpbmVkID0gYiIiLmpvaW4oKGNhY2VydF9kZXIsIG5ldXJvbmlvX2RlcikpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNvbWJpbmVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMikKKworICAgICAgICAjIGVycm9yIGNhc2VzCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBjYWRhdGE9b2JqZWN0KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJubyBzdGFydCBsaW5lIik6CisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT0iYnJva2VuIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIm5vdCBlbm91Z2ggZGF0YSIpOgorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9YiJicm9rZW4iKQorCisKICAgICBkZWYgdGVzdF9sb2FkX2RoX3BhcmFtcyhzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICBjdHgubG9hZF9kaF9wYXJhbXMoREhGSUxFKQpAQCAtNzE0LDYgKzkyNywxNTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9lY2RoX2N1cnZlLCAiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9lY2RoX2N1cnZlLCBiImZvbyIpCiAKKyAgICBAbmVlZHNfc25pCisgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisKKyAgICAgICAgIyBzZXRfc2VydmVybmFtZV9jYWxsYmFjayBleHBlY3RzIGEgY2FsbGFibGUsIG9yIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaywgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLCBjdHgpCisKKyAgICAgICAgZGVmIGR1bW15Y2FsbGJhY2soc29jaywgc2VydmVybmFtZSwgY3R4KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKE5vbmUpCisgICAgICAgIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhkdW1teWNhbGxiYWNrKQorCisgICAgQG5lZWRzX3NuaQorICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFja19yZWZjeWNsZShzZWxmKToKKyAgICAgICAgIyBSZWZlcmVuY2UgY3ljbGVzIHRocm91Z2ggdGhlIHNlcnZlcm5hbWUgY2FsbGJhY2sgYXJlIGRldGVjdGVkCisgICAgICAgICMgYW5kIGNsZWFyZWQuCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgZGVmIGR1bW15Y2FsbGJhY2soc29jaywgc2VydmVybmFtZSwgY3R4LCBjeWNsZT1jdHgpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soZHVtbXljYWxsYmFjaykKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihjdHgpCisgICAgICAgIGRlbCBjdHgsIGR1bW15Y2FsbGJhY2sKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NlcnRfc3RvcmVfc3RhdHMoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpLAorICAgICAgICAgICAgeyd4NTA5X2NhJzogMCwgJ2NybCc6IDAsICd4NTA5JzogMH0pCisgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDAsICdjcmwnOiAwLCAneDUwOSc6IDB9KQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAwLCAnY3JsJzogMCwgJ3g1MDknOiAxfSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhTVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDEsICdjcmwnOiAwLCAneDUwOSc6IDJ9KQorCisgICAgZGVmIHRlc3RfZ2V0X2NhX2NlcnRzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgIyBDRVJURklMRSBpcyBub3QgZmxhZ2dlZCBhcyBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IENBOlRSVUUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X2NhX2NlcnRzKCksIFtdKQorICAgICAgICAjIGJ1dCBTVk5fUFlUSE9OX09SR19ST09UX0NFUlQgaXMgYSBDQSBjZXJ0CisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoKSwKKyAgICAgICAgICAgIFt7J2lzc3Vlcic6ICgoKCdvcmdhbml6YXRpb25OYW1lJywgJ1Jvb3QgQ0EnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbmFsVW5pdE5hbWUnLCAnaHR0cDovL3d3dy5jYWNlcnQub3JnJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ0NBIENlcnQgU2lnbmluZyBBdXRob3JpdHknKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2VtYWlsQWRkcmVzcycsICdzdXBwb3J0QGNhY2VydC5vcmcnKSwpKSwKKyAgICAgICAgICAgICAgJ25vdEFmdGVyJzogYXNuMXRpbWUoJ01hciAyOSAxMjoyOTo0OSAyMDMzIEdNVCcpLAorICAgICAgICAgICAgICAnbm90QmVmb3JlJzogYXNuMXRpbWUoJ01hciAzMCAxMjoyOTo0OSAyMDAzIEdNVCcpLAorICAgICAgICAgICAgICAnc2VyaWFsTnVtYmVyJzogJzAwJywKKyAgICAgICAgICAgICAgJ2NybERpc3RyaWJ1dGlvblBvaW50cyc6ICgnaHR0cHM6Ly93d3cuY2FjZXJ0Lm9yZy9yZXZva2UuY3JsJywpLAorICAgICAgICAgICAgICAnc3ViamVjdCc6ICgoKCdvcmdhbml6YXRpb25OYW1lJywgJ1Jvb3QgQ0EnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJ2h0dHA6Ly93d3cuY2FjZXJ0Lm9yZycpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eScpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2VtYWlsQWRkcmVzcycsICdzdXBwb3J0QGNhY2VydC5vcmcnKSwpKSwKKyAgICAgICAgICAgICAgJ3ZlcnNpb24nOiAzfV0pCisKKyAgICAgICAgd2l0aCBvcGVuKFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkgYXMgZjoKKyAgICAgICAgICAgIHBlbSA9IGYucmVhZCgpCisgICAgICAgIGRlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChwZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cyhUcnVlKSwgW2Rlcl0pCisKKyAgICBkZWYgdGVzdF9sb2FkX2RlZmF1bHRfY2VydHMoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF9kZWZhdWx0X2NlcnRzKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRIKQorICAgICAgICBjdHgubG9hZF9kZWZhdWx0X2NlcnRzKCkKKworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCisKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cywgJ1NFUlZFUl9BVVRIJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kZWZhdWx0X2NvbnRleHQoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgucHJvdG9jb2wsIHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3R4LmNoZWNrX2hvc3RuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisKKyAgICAgICAgd2l0aCBvcGVuKFNJR05JTkdfQ0EpIGFzIGY6CisgICAgICAgICAgICBjYWRhdGEgPSBmLnJlYWQoKQorICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChjYWZpbGU9U0lHTklOR19DQSwgY2FwYXRoPUNBUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FkYXRhPWNhZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgucHJvdG9jb2wsIHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisKKyAgICAgICAgY3R4ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisKKyAgICBkZWYgdGVzdF9fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4Lm9wdGlvbnMgJiBzc2wuT1BfTk9fU1NMdjIsIHNzbC5PUF9OT19TU0x2MikKKworICAgICAgICBjdHggPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisKKyAgICAgICAgY3R4ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN0eC5jaGVja19ob3N0bmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIGN0eCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHB1cnBvc2U9c3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgZGVmIHRlc3RfY2hlY2tfaG9zdG5hbWUoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisKKyAgICAgICAgIyBSZXF1aXJlcyBDRVJUX1JFUVVJUkVEIG9yIENFUlRfT1BUSU9OQUwKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN0eC5jaGVja19ob3N0bmFtZSkKKworICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9PUFRJT05BTAorICAgICAgICBjdHguY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdHguY2hlY2tfaG9zdG5hbWUpCisKKyAgICAgICAgIyBDYW5ub3Qgc2V0IENFUlRfTk9ORSB3aXRoIGNoZWNrX2hvc3RuYW1lIGVuYWJsZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX05PTkUKKyAgICAgICAgY3R4LmNoZWNrX2hvc3RuYW1lID0gRmFsc2UKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisKIAogY2xhc3MgU1NMRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTkxOSw2ICsxMjg0LDI4IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfY29ubmVjdF9jYWRhdGEoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihDQUZJTEVfQ0FDRVJUKSBhcyBmOgorICAgICAgICAgICAgcGVtID0gZi5yZWFkKCkKKyAgICAgICAgZGVyID0gc3NsLlBFTV9jZXJ0X3RvX0RFUl9jZXJ0KHBlbSkKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9cGVtKQorICAgICAgICAgICAgd2l0aCBjdHgud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkpIGFzIHM6CisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCkKKworICAgICAgICAgICAgIyBzYW1lIHdpdGggREVSCisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWRlcikKKyAgICAgICAgICAgIHdpdGggY3R4LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKSBhcyBzOgorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gIm50IiwgIkNhbid0IHVzZSBhIHNvY2tldCBhcyBhIGZpbGUgdW5kZXIgV2luZG93cyIpCiAgICAgZGVmIHRlc3RfbWFrZWZpbGVfY2xvc2Uoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzUyMzg6IGNyZWF0aW5nIGEgZmlsZS1saWtlIG9iamVjdCB3aXRoIG1ha2VmaWxlKCkgc2hvdWxkbid0CkBAIC0xMDMxLDYgKzE0MTgsMzYgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9nZXRfY2FfY2VydHNfY2FwYXRoKHNlbGYpOgorICAgICAgICAjIGNhcGF0aCBjZXJ0cyBhcmUgbG9hZGVkIG9uIHJlcXVlc3QKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYXBhdGg9Q0FQQVRIKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X2NhX2NlcnRzKCksIFtdKQorICAgICAgICAgICAgcyA9IGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkKKyAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY3R4LmdldF9jYV9jZXJ0cygpKSwgMSkKKworICAgIEBuZWVkc19zbmkKKyAgICBkZWYgdGVzdF9jb250ZXh0X3NldGdldChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBjb250ZXh0IG9mIGEgY29ubmVjdGVkIHNvY2tldCBjYW4gYmUgcmVwbGFjZWQuCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBjdHgxID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY3R4MiA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgICAgIHdpdGggY3R4MS53cmFwX3NvY2tldChzKSBhcyBzczoKKyAgICAgICAgICAgICAgICBzcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3MuY29udGV4dCwgY3R4MSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNzLl9zc2xvYmouY29udGV4dCwgY3R4MSkKKyAgICAgICAgICAgICAgICBzcy5jb250ZXh0ID0gY3R4MgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3MuY29udGV4dCwgY3R4MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNzLl9zc2xvYmouY29udGV4dCwgY3R4MikKIAogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKQEAgLTExNTgsNyArMTU3NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6IHJlYWQgJXIgKCVzKSwgc2VuZGluZyBiYWNrICVyICglcykuLi5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChtc2csIGN0eXBlLCBtc2cubG93ZXIoKSwgY3R5cGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUobXNnLmxvd2VyKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIuY2hhdHR5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9lcnJvcigiVGVzdCBzZXJ2ZXIgZmFpbHVyZTpcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKQEAgLTEyNjgsNyArMTY4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTM3MiwxOSArMTc4OSwxOSBAQAogICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5TU0xFcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgeDoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbnNvY2tldC5lcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHg6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuT1NFcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgaWYgeC5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcSU9FcnJvciBpcyAlc1xuIiAlIHN0cih4KSkKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXE9TRXJyb3IgaXMgJXNcbiIgJSBzdHIoeCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJVc2Ugb2YgaW52YWxpZCBjZXJ0IHNob3VsZCBoYXZlIGZhaWxlZCEiKQogCiAgICAgZGVmIHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsIGluZGF0YT1iIkZPT1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlLCBzbmlfbmFtZT1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIExhdW5jaCBhIHNlcnZlciwgY29ubmVjdCBhIGNsaWVudCB0byBpdCBhbmQgdHJ5IHZhcmlvdXMgcmVhZHMKICAgICAgICAgYW5kIHdyaXRlcy4KQEAgLTEzOTQsNyArMTgxMSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9Y2hhdHR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSkKICAgICAgICAgd2l0aCBzZXJ2ZXI6Ci0gICAgICAgICAgICB3aXRoIGNsaWVudF9jb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgIHdpdGggY2xpZW50X2NvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c25pX25hbWUpIGFzIHM6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCiAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBbaW5kYXRhLCBieXRlYXJyYXkoaW5kYXRhKSwgbWVtb3J5dmlldyhpbmRhdGEpXToKICAgICAgICAgICAgICAgICAgICAgaWYgY29ubmVjdGlvbmNoYXR0eToKQEAgLTE0MTgsNiArMTgzNiw3IEBACiAgICAgICAgICAgICAgICAgc3RhdHMudXBkYXRlKHsKICAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzaW9uJzogcy5jb21wcmVzc2lvbigpLAogICAgICAgICAgICAgICAgICAgICAnY2lwaGVyJzogcy5jaXBoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BlZXJjZXJ0Jzogcy5nZXRwZWVyY2VydCgpLAogICAgICAgICAgICAgICAgICAgICAnY2xpZW50X25wbl9wcm90b2NvbCc6IHMuc2VsZWN0ZWRfbnBuX3Byb3RvY29sKCkKICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQpAQCAtMTQ0MywxMiArMTg2MiwxNSBAQAogICAgICAgICBjbGllbnRfY29udGV4dC5vcHRpb25zIHw9IGNsaWVudF9vcHRpb25zCiAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc2VydmVyX3Byb3RvY29sKQogICAgICAgICBzZXJ2ZXJfY29udGV4dC5vcHRpb25zIHw9IHNlcnZlcl9vcHRpb25zCisKKyAgICAgICAgIyBOT1RFOiB3ZSBtdXN0IGVuYWJsZSAiQUxMIiBjaXBoZXJzIG9uIHRoZSBjbGllbnQsIG90aGVyd2lzZSBhbgorICAgICAgICAjIFNTTHYyMyBjbGllbnQgd2lsbCBzZW5kIGFuIFNTTHYzIGhlbGxvIChyYXRoZXIgdGhhbiBTU0x2MikKKyAgICAgICAgIyBzdGFydGluZyBmcm9tIE9wZW5TU0wgMS4wLjAgKHNlZSBpc3N1ZSAjODMyMikuCisgICAgICAgIGlmIGNsaWVudF9jb250ZXh0LnByb3RvY29sID09IHNzbC5QUk9UT0NPTF9TU0x2MjM6CisgICAgICAgICAgICBjbGllbnRfY29udGV4dC5zZXRfY2lwaGVycygiQUxMIikKKwogICAgICAgICBmb3IgY3R4IGluIChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQpOgogICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gY2VydHNyZXFzCi0gICAgICAgICAgICAjIE5PVEU6IHdlIG11c3QgZW5hYmxlICJBTEwiIGNpcGhlcnMsIG90aGVyd2lzZSBhbiBTU0x2MjMgY2xpZW50Ci0gICAgICAgICAgICAjIHdpbGwgc2VuZCBhbiBTU0x2MyBoZWxsbyAocmF0aGVyIHRoYW4gU1NMdjIpIHN0YXJ0aW5nIGZyb20KLSAgICAgICAgICAgICMgT3BlblNTTCAxLjAuMCAoc2VlIGlzc3VlICM4MzIyKS4KLSAgICAgICAgICAgIGN0eC5zZXRfY2lwaGVycygiQUxMIikKICAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCiAgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQogICAgICAgICB0cnk6CkBAIC0xNDU5LDcgKzE4ODEsNyBAQAogICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgogICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3M6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3Mgb3IgZS5lcnJubyAhPSBlcnJuby5FQ09OTlJFU0VUOgogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGVsc2U6CkBAIC0xNDc4LDEwICsxOTAwLDExIEBACiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQogICAgICAgICAgICAgZm9yIHByb3RvY29sIGluIFBST1RPQ09MUzoKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQocHJvdG9jb2wpCi0gICAgICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCi0gICAgICAgICAgICAgICAgc2VydmVyX3BhcmFtc190ZXN0KGNvbnRleHQsIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG9jb2w9c3NsLl9QUk9UT0NPTF9OQU1FU1twcm90b2NvbF0pOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQocHJvdG9jb2wpCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY29udGV4dCwgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUpCiAKICAgICAgICAgZGVmIHRlc3RfZ2V0cGVlcmNlcnQoc2VsZik6CiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC0xNDkyLDggKzE5MTUsMTQgQEAKICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQogICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9Y29udGV4dCwgY2hhdHR5PUZhbHNlKQogICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6Ci0gICAgICAgICAgICAgICAgcyA9IGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKQorICAgICAgICAgICAgICAgIHMgPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSkKICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAjIGdldHBlZXJjZXJ0KCkgcmFpc2UgVmFsdWVFcnJvciB3aGlsZSB0aGUgaGFuZHNoYWtlIGlzbid0CisgICAgICAgICAgICAgICAgIyBkb25lLgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHMuZG9faGFuZHNoYWtlKCkKICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQogICAgICAgICAgICAgICAgIGNpcGhlciA9IHMuY2lwaGVyKCkKQEAgLTE1MTUsNiArMTk0NCw4NyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhiZWZvcmUsIGFmdGVyKQogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhdmVfdmVyaWZ5X2ZsYWdzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcmlmeV9mbGFncyBuZWVkIE9wZW5TU0wgPiAwLjkuOCIpCisgICAgICAgIGRlZiB0ZXN0X2NybF9jaGVjayhzZWxmKToKKyAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRSkKKworICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU0lHTklOR19DQSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGV4dC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfREVGQVVMVCkKKworICAgICAgICAgICAgIyBWRVJJRllfREVGQVVMVCBzaG91bGQgcGFzcworICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsIGNoYXR0eT1UcnVlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQorCisgICAgICAgICAgICAjIFZFUklGWV9DUkxfQ0hFQ0tfTEVBRiB3aXRob3V0IGEgbG9hZGVkIENSTCBmaWxlIGZhaWxzCisgICAgICAgICAgICBjb250ZXh0LnZlcmlmeV9mbGFncyB8PSBzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGCisKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2VydGlmaWNhdGUgdmVyaWZ5IGZhaWxlZCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisKKyAgICAgICAgICAgICMgbm93IGxvYWQgYSBDUkwgZmlsZS4gVGhlIENSTCBmaWxlIGlzIHNpZ25lZCBieSB0aGUgQ0EuCisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDUkxGSUxFKQorCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCwgIkNhbid0IGdldCBwZWVyIGNlcnRpZmljYXRlLiIpCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9jaGVja19ob3N0bmFtZShzZWxmKToKKyAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRSkKKworICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY29udGV4dC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKFNJR05JTkdfQ0EpCisKKyAgICAgICAgICAgICMgY29ycmVjdCBob3N0bmFtZSBzaG91bGQgdmVyaWZ5CisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9ImxvY2FsaG9zdCIpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0LCAiQ2FuJ3QgZ2V0IHBlZXIgY2VydGlmaWNhdGUuIikKKworICAgICAgICAgICAgIyBpbmNvcnJlY3QgaG9zdG5hbWUgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsIGNoYXR0eT1UcnVlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSJpbnZhbGlkIikgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5DZXJ0aWZpY2F0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lICdpbnZhbGlkJyBkb2Vzbid0IG1hdGNoICdsb2NhbGhvc3QnIik6CisgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKworICAgICAgICAgICAgIyBtaXNzaW5nIHNlcnZlcl9ob3N0bmFtZSBhcmcgc2hvdWxkIGNhdXNlIGFuIGV4Y2VwdGlvbiwgdG9vCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGVja19ob3N0bmFtZSByZXF1aXJlcyBzZXJ2ZXJfaG9zdG5hbWUiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JhcF9zb2NrZXQocykKKwogICAgICAgICBkZWYgdGVzdF9lbXB0eV9jZXJ0KHNlbGYpOgogICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB3aXRoIGFuIGVtcHR5IGNlcnQgZmlsZSIiIgogICAgICAgICAgICAgYmFkX2NlcnRfdGVzdChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCkBAIC0xNTMzLDcgKzIwNDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZGtleS5wZW0iKSkKIAogICAgICAgICBkZWYgdGVzdF9ydWRlX3NodXRkb3duKHNlbGYpOgotICAgICAgICAgICAgIiIiQSBicnV0YWwgc2h1dGRvd24gb2YgYW4gU1NMIHNlcnZlciBzaG91bGQgcmFpc2UgYW4gSU9FcnJvcgorICAgICAgICAgICAgIiIiQSBicnV0YWwgc2h1dGRvd24gb2YgYW4gU1NMIHNlcnZlciBzaG91bGQgcmFpc2UgYW4gT1NFcnJvcgogICAgICAgICAgICAgaW4gdGhlIGNsaWVudCB3aGVuIGF0dGVtcHRpbmcgaGFuZHNoYWtlLgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBsaXN0ZW5lcl9yZWFkeSA9IHRocmVhZGluZy5FdmVudCgpCkBAIC0xNTYxLDcgKzIwNzEsNyBAQAogICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcl9nb25lLndhaXQoKQogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfc29jayA9IHNzbC53cmFwX3NvY2tldChjKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Nvbm5lY3RpbmcgdG8gY2xvc2VkIFNTTCBzb2NrZXQgc2hvdWxkIGhhdmUgZmFpbGVkJykKQEAgLTE2MDQsNyArMjExNCw3IEBACiAgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYyLCBUcnVlKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoc3NsLlNTTEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIHg6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgeDoKICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGZhaWxzIG9uIHNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlblNTTCAoMC45LjdsLCBmb3IgaW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoCkBAIC0xNjY0LDYgKzIxNzQsNDkgQEAKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19UTFN2MSkKIAorICAgICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAorICAgICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNzbCwgIlBST1RPQ09MX1RMU3YxXzEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRMUyB2ZXJzaW9uIDEuMSBub3Qgc3VwcG9ydGVkLiIpCisgICAgICAgIGRlZiB0ZXN0X3Byb3RvY29sX3Rsc3YxXzEoc2VsZik6CisgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHRvIGEgVExTdjEuMSBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zLgorICAgICAgICAgICAgICAgVGVzdGluZyBhZ2FpbnN0IG9sZGVyIFRMUyB2ZXJzaW9ucy4iIiIKKyAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzEsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBUcnVlKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1NTTHYyLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1RMU3YxXzEpCisKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjFfMSwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1RMU3YxLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBGYWxzZSkKKworCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc3NsLCAiUFJPVE9DT0xfVExTdjFfMiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVExTIHZlcnNpb24gMS4yIG5vdCBzdXBwb3J0ZWQuIikKKyAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfdGxzdjFfMihzZWxmKToKKyAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYSBUTFN2MS4yIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMuCisgICAgICAgICAgICAgICBUZXN0aW5nIGFnYWluc3Qgb2xkZXIgVExTIHZlcnNpb25zLiIiIgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxXzIsIFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX29wdGlvbnM9c3NsLk9QX05PX1NTTHYzfHNzbC5PUF9OT19TU0x2MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fU1NMdjN8c3NsLk9QX05PX1NTTHYyLCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9TU0x2MiwgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19UTFN2MV8yKQorCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxXzIsIFRydWUpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9UTFN2MSwgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1RMU3YxXzIsIEZhbHNlKQorCiAgICAgICAgIGRlZiB0ZXN0X3N0YXJ0dGxzKHNlbGYpOgogICAgICAgICAgICAgIiIiU3dpdGNoaW5nIGZyb20gY2xlYXIgdGV4dCB0byBlbmNyeXB0ZWQgYW5kIGJhY2sgYWdhaW4uIiIiCiAgICAgICAgICAgICBtc2dzID0gKGIibXNnIDEiLCBiIk1TRyAyIiwgYiJTVEFSVFRMUyIsIGIiTVNHIDMiLCBiIm1zZyA0IiwgYiJFTkRUTFMiLCBiIm1zZyA1IiwgYiJtc2cgNiIpCkBAIC0xNzI0LDcgKzIyNzcsNyBAQAogCiAgICAgICAgIGRlZiB0ZXN0X3NvY2tldHNlcnZlcihzZWxmKToKICAgICAgICAgICAgICIiIlVzaW5nIGEgU29ja2V0U2VydmVyIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIFNTTCBjb25uZWN0aW9ucy4iIiIKLSAgICAgICAgICAgIHNlcnZlciA9IG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIENFUlRGSUxFKQorICAgICAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgY2VydGZpbGU9Q0VSVEZJTEUpCiAgICAgICAgICAgICAjIHRyeSB0byBjb25uZWN0CiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQpAQCAtMTk4MCw2ICsyNTMzLDIwIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVtb3RlLCBzc2wuU1NMU29ja2V0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZWVyLCBjbGllbnRfYWRkcikKIAorICAgICAgICBkZWYgdGVzdF9nZXRwZWVyY2VydF9lbm90Y29ubihzZWxmKToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgc29jazoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICBzb2NrLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PVENPTk4pCisKKyAgICAgICAgZGVmIHRlc3RfZG9faGFuZHNoYWtlX2Vub3Rjb25uKHNlbGYpOgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzb2NrOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHNvY2suZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PVENPTk4pCisKICAgICAgICAgZGVmIHRlc3RfZGVmYXVsdF9jaXBoZXJzKHNlbGYpOgogICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCiAgICAgICAgICAgICB0cnk6CkBAIC0xOTkxLDcgKzI1NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1NTTHYyMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSkgYXMgc2VydmVyOgogICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6Ci0gICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKE9TRXJyb3IsIHNzbC5TU0xFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJubyBzaGFyZWQgY2lwaGVyIiwgc3RyKHNlcnZlci5jb25uX2Vycm9yc1swXSkpCiAKQEAgLTIxMjQsNiArMjY5MSwxMjQgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHN0YXRzWydzZXJ2ZXJfbnBuX3Byb3RvY29scyddKSBlbHNlICdub3RoaW5nJwogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyX3Jlc3VsdCwgZXhwZWN0ZWQsIG1zZyAlIChzZXJ2ZXJfcmVzdWx0LCAic2VydmVyIikpCiAKKyAgICAgICAgZGVmIHNuaV9jb250ZXh0cyhzZWxmKToKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRSkKKyAgICAgICAgICAgIG90aGVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBvdGhlcl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihTSUdORURfQ0VSVEZJTEUyKQorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBjbGllbnRfY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjbGllbnRfY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU0lHTklOR19DQSkKKyAgICAgICAgICAgIHJldHVybiBzZXJ2ZXJfY29udGV4dCwgb3RoZXJfY29udGV4dCwgY2xpZW50X2NvbnRleHQKKworICAgICAgICBkZWYgY2hlY2tfY29tbW9uX25hbWUoc2VsZiwgc3RhdHMsIG5hbWUpOgorICAgICAgICAgICAgY2VydCA9IHN0YXRzWydwZWVyY2VydCddCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCgoJ2NvbW1vbk5hbWUnLCBuYW1lKSwpLCBjZXJ0WydzdWJqZWN0J10pCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICBjYWxscyA9IFtdCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCwgb3RoZXJfY29udGV4dCwgY2xpZW50X2NvbnRleHQgPSBzZWxmLnNuaV9jb250ZXh0cygpCisKKyAgICAgICAgICAgIGRlZiBzZXJ2ZXJuYW1lX2NiKHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgICAgICBjYWxscy5hcHBlbmQoKHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpKQorICAgICAgICAgICAgICAgIGlmIHNlcnZlcl9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzc2xfc29jay5jb250ZXh0ID0gb3RoZXJfY29udGV4dAorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soc2VydmVybmFtZV9jYikKKworICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgICMgVGhlIGhvc3RuYW1lIHdhcyBmZXRjaGVkIHByb3Blcmx5LCBhbmQgdGhlIGNlcnRpZmljYXRlIHdhcworICAgICAgICAgICAgIyBjaGFuZ2VkIGZvciB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFsoInN1cGVybWVzc2FnZSIsIHNlcnZlcl9jb250ZXh0KV0pCisgICAgICAgICAgICAjIENFUlRGSUxFNCB3YXMgc2VsZWN0ZWQKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29tbW9uX25hbWUoc3RhdHMsICdmYWtlaG9zdG5hbWUnKQorCisgICAgICAgICAgICBjYWxscyA9IFtdCisgICAgICAgICAgICAjIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBzZXJ2ZXJfbmFtZT1Ob25lCisgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPU5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbKE5vbmUsIHNlcnZlcl9jb250ZXh0KV0pCisgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbW1vbl9uYW1lKHN0YXRzLCAnbG9jYWxob3N0JykKKworICAgICAgICAgICAgIyBDaGVjayBkaXNhYmxpbmcgdGhlIGNhbGxiYWNrCisgICAgICAgICAgICBjYWxscyA9IFtdCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhOb25lKQorCisgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdub3RmdW5ueScpCisgICAgICAgICAgICAjIENlcnRpZmljYXRlIGRpZG4ndCBjaGFuZ2UKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29tbW9uX25hbWUoc3RhdHMsICdsb2NhbGhvc3QnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgW10pCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfYWxlcnQoc2VsZik6CisgICAgICAgICAgICAjIFJldHVybmluZyBhIFRMUyBhbGVydCBpcyByZWZsZWN0ZWQgdG8gdGhlIGNvbm5lY3RpbmcgY2xpZW50CisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCwgb3RoZXJfY29udGV4dCwgY2xpZW50X2NvbnRleHQgPSBzZWxmLnNuaV9jb250ZXh0cygpCisKKyAgICAgICAgICAgIGRlZiBjYl9yZXR1cm5pbmdfYWxlcnQoc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzc2wuQUxFUlRfREVTQ1JJUFRJT05fQUNDRVNTX0RFTklFRAorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soY2JfcmV0dXJuaW5nX2FsZXJ0KQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlYXNvbiwgJ1RMU1YxX0FMRVJUX0FDQ0VTU19ERU5JRUQnKQorCisgICAgICAgIEBuZWVkc19zbmkKKyAgICAgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrX3JhaXNpbmcoc2VsZik6CisgICAgICAgICAgICAjIFJhaXNpbmcgZmFpbHMgdGhlIGNvbm5lY3Rpb24gd2l0aCBhIFRMUyBoYW5kc2hha2UgZmFpbHVyZSBhbGVydC4KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIGNiX3JhaXNpbmcoc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soY2JfcmFpc2luZykKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpIGFzIGNtLCBcCisgICAgICAgICAgICAgICAgIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J3N1cGVybWVzc2FnZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZWFzb24sICdTU0xWM19BTEVSVF9IQU5EU0hBS0VfRkFJTFVSRScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJaZXJvRGl2aXNpb25FcnJvciIsIHN0ZGVyci5nZXR2YWx1ZSgpKQorCisgICAgICAgIEBuZWVkc19zbmkKKyAgICAgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrX3dyb25nX3JldHVybl90eXBlKHNlbGYpOgorICAgICAgICAgICAgIyBSZXR1cm5pbmcgdGhlIHdyb25nIHJldHVybiB0eXBlIHRlcm1pbmF0ZXMgdGhlIFRMUyBjb25uZWN0aW9uCisgICAgICAgICAgICAjIHdpdGggYW4gaW50ZXJuYWwgZXJyb3IgYWxlcnQuCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCwgb3RoZXJfY29udGV4dCwgY2xpZW50X2NvbnRleHQgPSBzZWxmLnNuaV9jb250ZXh0cygpCisKKyAgICAgICAgICAgIGRlZiBjYl93cm9uZ19yZXR1cm5fdHlwZShzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb28iCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl93cm9uZ19yZXR1cm5fdHlwZSkKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpIGFzIGNtLCBcCisgICAgICAgICAgICAgICAgIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J3N1cGVybWVzc2FnZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZWFzb24sICdUTFNWMV9BTEVSVF9JTlRFUk5BTF9FUlJPUicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJUeXBlRXJyb3IiLCBzdGRlcnIuZ2V0dmFsdWUoKSkKKworICAgICAgICBkZWYgdGVzdF9yZWFkX3dyaXRlX2FmdGVyX2Nsb3NlX3JhaXNlc192YWx1ZXJyb3Ioc2VsZik6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVEZJTEUpCisgICAgICAgICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PWNvbnRleHQsIGNoYXR0eT1GYWxzZSkKKworICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgcyA9IGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKQorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5yZWFkLCAxMDI0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMud3JpdGUsIGInaGVsbG8nKQorCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1GYWxzZSk6CiAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgpAQCAtMjE0MywxMCArMjgyOCwxNiBAQAogICAgICAgICAgICAgKHNzbC5PUEVOU1NMX1ZFUlNJT04sIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTykpCiAgICAgICAgIHByaW50KCIgICAgICAgICAgdW5kZXIgJXMiICUgcGxhdCkKICAgICAgICAgcHJpbnQoIiAgICAgICAgICBIQVNfU05JID0gJXIiICUgc3NsLkhBU19TTkkpCisgICAgICAgIHByaW50KCIgICAgICAgICAgT1BfQUxMID0gMHglOHgiICUgc3NsLk9QX0FMTCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQoIiAgICAgICAgICBPUF9OT19UTFN2MV8xID0gMHglOHgiICUgc3NsLk9QX05PX1RMU3YxXzEpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKIAogICAgIGZvciBmaWxlbmFtZSBpbiBbCiAgICAgICAgIENFUlRGSUxFLCBTVk5fUFlUSE9OX09SR19ST09UX0NFUlQsIEJZVEVTX0NFUlRGSUxFLAogICAgICAgICBPTkxZQ0VSVCwgT05MWUtFWSwgQllURVNfT05MWUNFUlQsIEJZVEVTX09OTFlLRVksCisgICAgICAgIFNJR05FRF9DRVJURklMRSwgU0lHTkVEX0NFUlRGSUxFMiwgU0lHTklOR19DQSwKICAgICAgICAgQkFEQ0VSVCwgQkFES0VZLCBFTVBUWUNFUlRdOgogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgogICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKCJDYW4ndCByZWFkIGNlcnRpZmljYXRlIGZpbGUgJXIiICUgZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0YXQucHkgYi9MaWIvdGVzdC90ZXN0X3N0YXQucHkKaW5kZXggZWIzZjA3YS4uYWY2Y2VkNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdGF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weQpAQCAtMSw5ICsxLDEzIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBvcwotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfZnJlc2hfbW9kdWxlCi1pbXBvcnQgc3RhdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgaW1wb3J0X2ZyZXNoX21vZHVsZQogCi1jbGFzcyBUZXN0RmlsZW1vZGUodW5pdHRlc3QuVGVzdENhc2UpOgorY19zdGF0ID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgnc3RhdCcsIGZyZXNoPVsnX3N0YXQnXSkKK3B5X3N0YXQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdzdGF0JywgYmxvY2tlZD1bJ19zdGF0J10pCisKK2NsYXNzIFRlc3RGaWxlbW9kZToKKyAgICBzdGF0bW9kID0gTm9uZQorCiAgICAgZmlsZV9mbGFncyA9IHsnU0ZfQVBQRU5EJywgJ1NGX0FSQ0hJVkVEJywgJ1NGX0lNTVVUQUJMRScsICdTRl9OT1VOTElOSycsCiAgICAgICAgICAgICAgICAgICAnU0ZfU05BUFNIT1QnLCAnVUZfQVBQRU5EJywgJ1VGX0NPTVBSRVNTRUQnLCAnVUZfSElEREVOJywKICAgICAgICAgICAgICAgICAgICdVRl9JTU1VVEFCTEUnLCAnVUZfTk9EVU1QJywgJ1VGX05PVU5MSU5LJywgJ1VGX09QQVFVRSd9CkBAIC02MywxNyArNjcsMTcgQEAKICAgICAgICAgICAgIHN0X21vZGUgPSBvcy5sc3RhdChmbmFtZSkuc3RfbW9kZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3RfbW9kZSA9IG9zLnN0YXQoZm5hbWUpLnN0X21vZGUKLSAgICAgICAgbW9kZXN0ciA9IHN0YXQuZmlsZW1vZGUoc3RfbW9kZSkKKyAgICAgICAgbW9kZXN0ciA9IHNlbGYuc3RhdG1vZC5maWxlbW9kZShzdF9tb2RlKQogICAgICAgICByZXR1cm4gc3RfbW9kZSwgbW9kZXN0cgogCiAgICAgZGVmIGFzc2VydFNfSVMoc2VsZiwgbmFtZSwgbW9kZSk6CiAgICAgICAgICMgdGVzdCBmb3JtYXQsIGxzdHJpcCBpcyBmb3IgU19JRklGTwotICAgICAgICBmbXQgPSBnZXRhdHRyKHN0YXQsICJTX0lGIiArIG5hbWUubHN0cmlwKCJGIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lGTVQobW9kZSksIGZtdCkKKyAgICAgICAgZm10ID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsICJTX0lGIiArIG5hbWUubHN0cmlwKCJGIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSUZNVChtb2RlKSwgZm10KQogICAgICAgICAjIHRlc3QgdGhhdCBqdXN0IG9uZSBmdW5jdGlvbiByZXR1cm5zIHRydWUKICAgICAgICAgdGVzdG5hbWUgPSAiU19JUyIgKyBuYW1lCiAgICAgICAgIGZvciBmdW5jbmFtZSBpbiBzZWxmLmZvcm1hdF9mdW5jczoKLSAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHN0YXQsIGZ1bmNuYW1lLCBOb25lKQorICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBmdW5jbmFtZSwgTm9uZSkKICAgICAgICAgICAgIGlmIGZ1bmMgaXMgTm9uZToKICAgICAgICAgICAgICAgICBpZiBmdW5jbmFtZSA9PSB0ZXN0bmFtZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihmdW5jbmFtZSkKQEAgLTkxLDM1ICs5NSwzNSBAQAogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyLCAnLXJ3eC0tLS0tLScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSV1hVKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JTU9ERShzdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0bW9kLlNfSVJXWFUpCiAKICAgICAgICAgICAgIG9zLmNobW9kKFRFU1RGTiwgMG8wNzApCiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctLS0tcnd4LS0tJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJXWEcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lNT0RFKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JUldYRykKIAogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzAwNykKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0ciwgJy0tLS0tLS1yd3gnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3RfbW9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUldYTykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdG1vZC5TX0lSV1hPKQogCiAgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIDBvNDQ0KQogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyLCAnLXItLXItLXItLScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdF9tb2RlKSwgMG80NDQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lNT0RFKHN0X21vZGUpLCAwbzQ0NCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9zLmNobW9kKFRFU1RGTiwgMG83MDApCiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHJbOjNdLCAnLXJ3JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lGTVQoc3RfbW9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JRlJFRykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSUZNVChzdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0bW9kLlNfSUZSRUcpCiAKICAgICBkZWYgdGVzdF9kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgIG9zLm1rZGlyKFRFU1RGTikKQEAgLTE2NSwyNSArMTY5LDM0IEBACiAKICAgICBkZWYgdGVzdF9tb2R1bGVfYXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5zdGF0X3N0cnVjdC5pdGVtcygpOgotICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHN0YXQsIGtleSkKKyAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIG1vZHZhbHVlLCBrZXkpCiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYucGVybWlzc2lvbl9iaXRzLml0ZW1zKCk6Ci0gICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc3RhdCwga2V5KQorICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgbW9kdmFsdWUsIGtleSkKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmZpbGVfZmxhZ3M6Ci0gICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc3RhdCwga2V5KQorICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHZhbHVlLCBpbnQpCiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi5mb3JtYXRzOgotICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHN0YXQsIGtleSkKKyAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R2YWx1ZSwgaW50KQogICAgICAgICBmb3Iga2V5IGluIHNlbGYuZm9ybWF0X2Z1bmNzOgotICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoc3RhdCwga2V5KQorICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoZnVuYykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoMCksIDApCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChUZXN0RmlsZW1vZGUpCitjbGFzcyBUZXN0RmlsZW1vZGVDU3RhdChUZXN0RmlsZW1vZGUsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzdGF0bW9kID0gY19zdGF0CisKKyAgICBmb3JtYXRzID0gVGVzdEZpbGVtb2RlLmZvcm1hdHMgfCB7J1NfSUZET09SJywgJ1NfSUZQT1JUJywgJ1NfSUZXSFQnfQorICAgIGZvcm1hdF9mdW5jcyA9IFRlc3RGaWxlbW9kZS5mb3JtYXRfZnVuY3MgfCB7J1NfSVNET09SJywgJ1NfSVNQT1JUJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTX0lTV0hUJ30KKworCitjbGFzcyBUZXN0RmlsZW1vZGVQeVN0YXQoVGVzdEZpbGVtb2RlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc3RhdG1vZCA9IHB5X3N0YXQKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0YXRpc3RpY3MucHkgYi9MaWIvdGVzdC90ZXN0X3N0YXRpc3RpY3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY1YzlhNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RhdGlzdGljcy5weQpAQCAtMCwwICsxLDE1NzQgQEAKKyIiIlRlc3Qgc3VpdGUgZm9yIHN0YXRpc3RpY3MgbW9kdWxlLCBpbmNsdWRpbmcgaGVscGVyIE51bWVyaWNUZXN0Q2FzZSBhbmQKK2FwcHJveF9lcXVhbCBmdW5jdGlvbi4KKworIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGRlY2ltYWwKK2ltcG9ydCBkb2N0ZXN0CitpbXBvcnQgbWF0aAoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCitmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24KKworCisjIE1vZHVsZSB0byBiZSB0ZXN0ZWQuCitpbXBvcnQgc3RhdGlzdGljcworCisKKyMgPT09IEhlbHBlciBmdW5jdGlvbnMgYW5kIGNsYXNzID09PQorCitkZWYgX2NhbGNfZXJyb3JzKGFjdHVhbCwgZXhwZWN0ZWQpOgorICAgICIiIlJldHVybiB0aGUgYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9ycyBiZXR3ZWVuIHR3byBudW1iZXJzLgorCisgICAgPj4+IF9jYWxjX2Vycm9ycygxMDAsIDc1KQorICAgICgyNSwgMC4yNSkKKyAgICA+Pj4gX2NhbGNfZXJyb3JzKDEwMCwgMTAwKQorICAgICgwLCAwLjApCisKKyAgICBSZXR1cm5zIHRoZSAoYWJzb2x1dGUgZXJyb3IsIHJlbGF0aXZlIGVycm9yKSBiZXR3ZWVuIHRoZSB0d28gYXJndW1lbnRzLgorICAgICIiIgorICAgIGJhc2UgPSBtYXgoYWJzKGFjdHVhbCksIGFicyhleHBlY3RlZCkpCisgICAgYWJzX2VyciA9IGFicyhhY3R1YWwgLSBleHBlY3RlZCkKKyAgICByZWxfZXJyID0gYWJzX2Vyci9iYXNlIGlmIGJhc2UgZWxzZSBmbG9hdCgnaW5mJykKKyAgICByZXR1cm4gKGFic19lcnIsIHJlbF9lcnIpCisKKworZGVmIGFwcHJveF9lcXVhbCh4LCB5LCB0b2w9MWUtMTIsIHJlbD0xZS03KToKKyAgICAiIiJhcHByb3hfZXF1YWwoeCwgeSBbLCB0b2wgWywgcmVsXV0pID0+IFRydWV8RmFsc2UKKworICAgIFJldHVybiBUcnVlIGlmIG51bWJlcnMgeCBhbmQgeSBhcmUgYXBwcm94aW1hdGVseSBlcXVhbCwgdG8gd2l0aGluIHNvbWUKKyAgICBtYXJnaW4gb2YgZXJyb3IsIG90aGVyd2lzZSByZXR1cm4gRmFsc2UuIE51bWJlcnMgd2hpY2ggY29tcGFyZSBlcXVhbAorICAgIHdpbGwgYWxzbyBjb21wYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuCisKKyAgICB4IGlzIGFwcHJveGltYXRlbHkgZXF1YWwgdG8geSBpZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gaXMgbGVzcyB0aGFuCisgICAgYW4gYWJzb2x1dGUgZXJyb3IgdG9sIG9yIGEgcmVsYXRpdmUgZXJyb3IgcmVsLCB3aGljaGV2ZXIgaXMgYmlnZ2VyLgorCisgICAgSWYgZ2l2ZW4sIGJvdGggdG9sIGFuZCByZWwgbXVzdCBiZSBmaW5pdGUsIG5vbi1uZWdhdGl2ZSBudW1iZXJzLiBJZiBub3QKKyAgICBnaXZlbiwgZGVmYXVsdCB2YWx1ZXMgYXJlIHRvbD0xZS0xMiBhbmQgcmVsPTFlLTcuCisKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEuMjU4OSwgMS4yNTg3LCB0b2w9MC4wMDAzLCByZWw9MCkKKyAgICBUcnVlCisgICAgPj4+IGFwcHJveF9lcXVhbCgxLjI1ODksIDEuMjU4NywgdG9sPTAuMDAwMSwgcmVsPTApCisgICAgRmFsc2UKKworICAgIEFic29sdXRlIGVycm9yIGlzIGRlZmluZWQgYXMgYWJzKHgteSk7IGlmIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCisgICAgdG9sLCB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFwcHJveGltYXRlbHkgZXF1YWwuCisKKyAgICBSZWxhdGl2ZSBlcnJvciBpcyBkZWZpbmVkIGFzIGFicygoeC15KS94KSBvciBhYnMoKHgteSkveSksIHdoaWNoZXZlciBpcworICAgIHNtYWxsZXIsIHByb3ZpZGVkIHggb3IgeSBhcmUgbm90IHplcm8uIElmIHRoYXQgZmlndXJlIGlzIGxlc3MgdGhhbiBvcgorICAgIGVxdWFsIHRvIHJlbCwgeCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcHByb3hpbWF0ZWx5IGVxdWFsLgorCisgICAgQ29tcGxleCBudW1iZXJzIGFyZSBub3QgZGlyZWN0bHkgc3VwcG9ydGVkLiBJZiB5b3Ugd2lzaCB0byBjb21wYXJlIHRvCisgICAgY29tcGxleCBudW1iZXJzLCBleHRyYWN0IHRoZWlyIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBhbmQgY29tcGFyZSB0aGVtCisgICAgaW5kaXZpZHVhbGx5LgorCisgICAgTkFOcyBhbHdheXMgY29tcGFyZSB1bmVxdWFsLCBldmVuIHdpdGggdGhlbXNlbHZlcy4gSW5maW5pdGllcyBjb21wYXJlCisgICAgYXBwcm94aW1hdGVseSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgc2lnbiAoYm90aCBwb3NpdGl2ZSBvciBib3RoCisgICAgbmVnYXRpdmUpLiBJbmZpbml0aWVzIHdpdGggZGlmZmVyZW50IHNpZ25zIGNvbXBhcmUgdW5lcXVhbDsgc28gZG8KKyAgICBjb21wYXJpc29ucyBvZiBpbmZpbml0aWVzIHdpdGggZmluaXRlIG51bWJlcnMuCisgICAgIiIiCisgICAgaWYgdG9sIDwgMCBvciByZWwgPCAwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdlcnJvciB0b2xlcmFuY2VzIG11c3QgYmUgbm9uLW5lZ2F0aXZlJykKKyAgICAjIE5BTnMgYXJlIG5ldmVyIGVxdWFsIHRvIGFueXRoaW5nLCBhcHByb3hpbWF0ZWx5IG9yIG90aGVyd2lzZS4KKyAgICBpZiBtYXRoLmlzbmFuKHgpIG9yIG1hdGguaXNuYW4oeSk6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgICMgTnVtYmVycyB3aGljaCBjb21wYXJlIGVxdWFsIGFsc28gY29tcGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLgorICAgIGlmIHggPT0geToKKyAgICAgICAgIyBUaGlzIGluY2x1ZGVzIHRoZSBjYXNlIG9mIHR3byBpbmZpbml0aWVzIHdpdGggdGhlIHNhbWUgc2lnbi4KKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBpZiBtYXRoLmlzaW5mKHgpIG9yIG1hdGguaXNpbmYoeSk6CisgICAgICAgICMgVGhpcyBpbmNsdWRlcyB0aGUgY2FzZSBvZiB0d28gaW5maW5pdGllcyBvZiBvcHBvc2l0ZSBzaWduLCBvcgorICAgICAgICAjIG9uZSBpbmZpbml0eSBhbmQgb25lIGZpbml0ZSBudW1iZXIuCisgICAgICAgIHJldHVybiBGYWxzZQorICAgICMgVHdvIGZpbml0ZSBudW1iZXJzLgorICAgIGFjdHVhbF9lcnJvciA9IGFicyh4IC0geSkKKyAgICBhbGxvd2VkX2Vycm9yID0gbWF4KHRvbCwgcmVsKm1heChhYnMoeCksIGFicyh5KSkpCisgICAgcmV0dXJuIGFjdHVhbF9lcnJvciA8PSBhbGxvd2VkX2Vycm9yCisKKworIyBUaGlzIGNsYXNzIGV4aXN0cyBvbmx5IGFzIHNvbWV3aGVyZSB0byBzdGljayBhIGRvY3N0cmluZyBjb250YWluaW5nCisjIGRvY3Rlc3RzLiBUaGUgZm9sbG93aW5nIGRvY3N0cmluZyBhbmQgdGVzdHMgd2VyZSBvcmlnaW5hbGx5IGluIGEgc2VwYXJhdGUKKyMgbW9kdWxlLiBOb3cgdGhhdCBpdCBoYXMgYmVlbiBtZXJnZWQgaW4gaGVyZSwgSSBuZWVkIHNvbWV3aGVyZSB0byBoYW5nIHRoZS4KKyMgZG9jc3RyaW5nLiBVbHRpbWF0ZWx5LCB0aGlzIGNsYXNzIHdpbGwgZGllLCBhbmQgdGhlIGluZm9ybWF0aW9uIGJlbG93IHdpbGwKKyMgZWl0aGVyIGJlY29tZSByZWR1bmRhbnQsIG9yIGJlIG1vdmVkIGludG8gbW9yZSBhcHByb3ByaWF0ZSBwbGFjZXMuCitjbGFzcyBfRG9Ob3RoaW5nOgorICAgICIiIgorICAgIFdoZW4gZG9pbmcgbnVtZXJpYyB3b3JrLCBlc3BlY2lhbGx5IHdpdGggZmxvYXRzLCBleGFjdCBlcXVhbGl0eSBpcyBvZnRlbgorICAgIG5vdCB3aGF0IHlvdSB3YW50LiBEdWUgdG8gcm91bmQtb2ZmIGVycm9yLCBpdCBpcyBvZnRlbiBhIGJhZCBpZGVhIHRvIHRyeQorICAgIHRvIGNvbXBhcmUgZmxvYXRzIHdpdGggZXF1YWxpdHkuIEluc3RlYWQgdGhlIHVzdWFsIHByb2NlZHVyZSBpcyB0byB0ZXN0CisgICAgdGhlbSB3aXRoIHNvbWUgKGhvcGVmdWxseSBzbWFsbCEpIGFsbG93YW5jZSBmb3IgZXJyb3IuCisKKyAgICBUaGUgYGBhcHByb3hfZXF1YWxgYCBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgZWl0aGVyIGFuIGFic29sdXRlCisgICAgZXJyb3IgdG9sZXJhbmNlLCBvciBhIHJlbGF0aXZlIGVycm9yLCBvciBib3RoLgorCisgICAgQWJzb2x1dGUgZXJyb3IgdG9sZXJhbmNlcyBhcmUgc2ltcGxlLCBidXQgeW91IG5lZWQgdG8ga25vdyB0aGUgbWFnbml0dWRlCisgICAgb2YgdGhlIHF1YW50aXRpZXMgYmVpbmcgY29tcGFyZWQ6CisKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NSwgMTIuMzQ2LCB0b2w9MWUtMykKKyAgICBUcnVlCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDVlNiwgMTIuMzQ2ZTYsIHRvbD0xZS0zKSAgIyB0b2wgaXMgdG9vIHNtYWxsLgorICAgIEZhbHNlCisKKyAgICBSZWxhdGl2ZSBlcnJvcnMgYXJlIG1vcmUgc3VpdGFibGUgd2hlbiB0aGUgdmFsdWVzIHlvdSBhcmUgY29tcGFyaW5nIGNhbgorICAgIHZhcnkgaW4gbWFnbml0dWRlOgorCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDUsIDEyLjM0NiwgcmVsPTFlLTQpCisgICAgVHJ1ZQorICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1ZTYsIDEyLjM0NmU2LCByZWw9MWUtNCkKKyAgICBUcnVlCisKKyAgICBidXQgYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbiBvZiByZWxhdGl2ZSBlcnJvciB0ZXN0aW5nIGNhbiBydW4gaW50byB0cm91YmxlCisgICAgYXJvdW5kIHplcm8uCisKKyAgICBJZiB5b3Ugc3VwcGx5IGJvdGggYW4gYWJzb2x1dGUgdG9sZXJhbmNlIGFuZCBhIHJlbGF0aXZlIGVycm9yLCB0aGUKKyAgICBjb21wYXJpc29uIHN1Y2NlZWRzIGlmIGVpdGhlciBpbmRpdmlkdWFsIHRlc3Qgc3VjY2VlZHM6CisKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NWU2LCAxMi4zNDZlNiwgdG9sPTFlLTMsIHJlbD0xZS00KQorICAgIFRydWUKKworICAgICIiIgorICAgIHBhc3MKKworCisKKyMgV2UgcHJlZmVyIHRoaXMgZm9yIHRlc3RpbmcgbnVtZXJpYyB2YWx1ZXMgdGhhdCBtYXkgbm90IGJlIGV4YWN0bHkgZXF1YWwsCisjIGFuZCBhdm9pZCB1c2luZyBUZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbCwgYmVjYXVzZSBpdCBzdWNrcyA6LSkKKworY2xhc3MgTnVtZXJpY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJVbml0IHRlc3QgY2xhc3MgZm9yIG51bWVyaWMgd29yay4KKworICAgIFRoaXMgc3ViY2xhc3NlcyBUZXN0Q2FzZS4gSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIG1ldGhvZAorICAgIGBgVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWxgYCwgIGBgYXNzZXJ0QXBwcm94RXF1YWxgYCBpcyBwcm92aWRlZC4KKyAgICAiIiIKKyAgICAjIEJ5IGRlZmF1bHQsIHdlIGV4cGVjdCBleGFjdCBlcXVhbGl0eSwgdW5sZXNzIG92ZXJyaWRkZW4uCisgICAgdG9sID0gcmVsID0gMAorCisgICAgZGVmIGFzc2VydEFwcHJveEVxdWFsKAorICAgICAgICAgICAgc2VsZiwgZmlyc3QsIHNlY29uZCwgdG9sPU5vbmUsIHJlbD1Ob25lLCBtc2c9Tm9uZQorICAgICAgICAgICAgKToKKyAgICAgICAgIiIiVGVzdCBwYXNzZXMgaWYgYGBmaXJzdGBgIGFuZCBgYHNlY29uZGBgIGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLgorCisgICAgICAgIFRoaXMgdGVzdCBwYXNzZXMgaWYgYGBmaXJzdGBgIGFuZCBgYHNlY29uZGBgIGFyZSBlcXVhbCB0bworICAgICAgICB3aXRoaW4gYGB0b2xgYCwgYW4gYWJzb2x1dGUgZXJyb3IsIG9yIGBgcmVsYGAsIGEgcmVsYXRpdmUgZXJyb3IuCisKKyAgICAgICAgSWYgZWl0aGVyIGBgdG9sYGAgb3IgYGByZWxgYCBhcmUgTm9uZSBvciBub3QgZ2l2ZW4sIHRoZXkgZGVmYXVsdCB0bworICAgICAgICB0ZXN0IGF0dHJpYnV0ZXMgb2YgdGhlIHNhbWUgbmFtZSAoYnkgZGVmYXVsdCwgMCkuCisKKyAgICAgICAgVGhlIG9iamVjdHMgbWF5IGJlIGVpdGhlciBudW1iZXJzLCBvciBzZXF1ZW5jZXMgb2YgbnVtYmVycy4gU2VxdWVuY2VzCisgICAgICAgIGFyZSB0ZXN0ZWQgZWxlbWVudC1ieS1lbGVtZW50LgorCisgICAgICAgID4+PiBjbGFzcyBNeVRlc3QoTnVtZXJpY1Rlc3RDYXNlKToKKyAgICAgICAgLi4uICAgICBkZWYgdGVzdF9udW1iZXIoc2VsZik6CisgICAgICAgIC4uLiAgICAgICAgIHggPSAxLjAvNgorICAgICAgICAuLi4gICAgICAgICB5ID0gc3VtKFt4XSo2KQorICAgICAgICAuLi4gICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHksIDEuMCwgdG9sPTFlLTE1KQorICAgICAgICAuLi4gICAgIGRlZiB0ZXN0X3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAuLi4gICAgICAgICBhID0gWzEuMDAxLCAxLjAwMWUtMTAsIDEuMDAxZTEwXQorICAgICAgICAuLi4gICAgICAgICBiID0gWzEuMCwgMWUtMTAsIDFlMTBdCisgICAgICAgIC4uLiAgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoYSwgYiwgcmVsPTFlLTMpCisgICAgICAgIC4uLgorICAgICAgICA+Pj4gaW1wb3J0IHVuaXR0ZXN0CisgICAgICAgID4+PiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTyAgIyBTdXBwcmVzcyB0ZXN0IHJ1bm5lciBvdXRwdXQuCisgICAgICAgID4+PiBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tVGVzdENhc2UoTXlUZXN0KQorICAgICAgICA+Pj4gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtPVN0cmluZ0lPKCkpLnJ1bihzdWl0ZSkKKyAgICAgICAgPHVuaXR0ZXN0LnJ1bm5lci5UZXh0VGVzdFJlc3VsdCBydW49MiBlcnJvcnM9MCBmYWlsdXJlcz0wPgorCisgICAgICAgICIiIgorICAgICAgICBpZiB0b2wgaXMgTm9uZToKKyAgICAgICAgICAgIHRvbCA9IHNlbGYudG9sCisgICAgICAgIGlmIHJlbCBpcyBOb25lOgorICAgICAgICAgICAgcmVsID0gc2VsZi5yZWwKKyAgICAgICAgaWYgKAorICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoZmlyc3QsIGNvbGxlY3Rpb25zLlNlcXVlbmNlKSBhbmQKKyAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHNlY29uZCwgY29sbGVjdGlvbnMuU2VxdWVuY2UpCisgICAgICAgICAgICApOgorICAgICAgICAgICAgY2hlY2sgPSBzZWxmLl9jaGVja19hcHByb3hfc2VxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjaGVjayA9IHNlbGYuX2NoZWNrX2FwcHJveF9udW0KKyAgICAgICAgY2hlY2soZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIG1zZykKKworICAgIGRlZiBfY2hlY2tfYXBwcm94X3NlcShzZWxmLCBmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgbXNnKToKKyAgICAgICAgaWYgbGVuKGZpcnN0KSAhPSBsZW4oc2Vjb25kKToKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gKAorICAgICAgICAgICAgICAgICJzZXF1ZW5jZXMgZGlmZmVyIGluIGxlbmd0aDogJWQgaXRlbXMgIT0gJWQgaXRlbXMiCisgICAgICAgICAgICAgICAgJSAobGVuKGZpcnN0KSwgbGVuKHNlY29uZCkpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKyAgICAgICAgZm9yIGksIChhLGUpIGluIGVudW1lcmF0ZSh6aXAoZmlyc3QsIHNlY29uZCkpOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfYXBwcm94X251bShhLCBlLCB0b2wsIHJlbCwgbXNnLCBpKQorCisgICAgZGVmIF9jaGVja19hcHByb3hfbnVtKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBtc2csIGlkeD1Ob25lKToKKyAgICAgICAgaWYgYXBwcm94X2VxdWFsKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsKToKKyAgICAgICAgICAgICMgVGVzdCBwYXNzZXMuIFJldHVybiBlYXJseSwgd2UgYXJlIGRvbmUuCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAjIE90aGVyd2lzZSB3ZSBmYWlsZWQuCisgICAgICAgIHN0YW5kYXJkTXNnID0gc2VsZi5fbWFrZV9zdGRfZXJyX21zZyhmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgaWR4KQorICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCisgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9tYWtlX3N0ZF9lcnJfbXNnKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBpZHgpOgorICAgICAgICAjIENyZWF0ZSB0aGUgc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBmb3IgYXBwcm94X2VxdWFsIGZhaWx1cmVzLgorICAgICAgICBhc3NlcnQgZmlyc3QgIT0gc2Vjb25kCisgICAgICAgIHRlbXBsYXRlID0gKAorICAgICAgICAgICAgJyAgJXIgIT0gJXJcbicKKyAgICAgICAgICAgICcgIHZhbHVlcyBkaWZmZXIgYnkgbW9yZSB0aGFuIHRvbD0lciBhbmQgcmVsPSVyXG4nCisgICAgICAgICAgICAnICAtPiBhYnNvbHV0ZSBlcnJvciA9ICVyXG4nCisgICAgICAgICAgICAnICAtPiByZWxhdGl2ZSBlcnJvciA9ICVyJworICAgICAgICAgICAgKQorICAgICAgICBpZiBpZHggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBoZWFkZXIgPSAnbnVtZXJpYyBzZXF1ZW5jZXMgZmlyc3QgZGlmZmVyIGF0IGluZGV4ICVkLlxuJyAlIGlkeAorICAgICAgICAgICAgdGVtcGxhdGUgPSBoZWFkZXIgKyB0ZW1wbGF0ZQorICAgICAgICAjIENhbGN1bGF0ZSBhY3R1YWwgZXJyb3JzOgorICAgICAgICBhYnNfZXJyLCByZWxfZXJyID0gX2NhbGNfZXJyb3JzKGZpcnN0LCBzZWNvbmQpCisgICAgICAgIHJldHVybiB0ZW1wbGF0ZSAlIChmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgYWJzX2VyciwgcmVsX2VycikKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PQorIyA9PT0gVGVzdCB0aGUgaGVscGVycyA9PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09CisKKworIyAtLS0gVGVzdHMgZm9yIGFwcHJveF9lcXVhbCAtLS0KKworY2xhc3MgQXBwcm94RXF1YWxTeW1tZXRyeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBzeW1tZXRyeSBvZiBhcHByb3hfZXF1YWwuCisKKyAgICBkZWYgdGVzdF9yZWxhdGl2ZV9zeW1tZXRyeShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGFwcHJveF9lcXVhbCB0cmVhdHMgcmVsYXRpdmUgZXJyb3Igc3ltbWV0cmljYWxseS4KKyAgICAgICAgIyAoYS1iKS9hIGlzIHVzdWFsbHkgbm90IGVxdWFsIHRvIChhLWIpL2IuIEVuc3VyZSB0aGF0IHRoaXMKKyAgICAgICAgIyBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgIworICAgICAgICAjICAgTm90ZTogdGhlIHJlYXNvbiBmb3IgdGhpcyB0ZXN0IGlzIHRoYXQgYW4gZWFybHkgdmVyc2lvbgorICAgICAgICAjICAgb2YgYXBwcm94X2VxdWFsIHdhcyBub3Qgc3ltbWV0cmljLiBBIHJlbGF0aXZlIGVycm9yIHRlc3QKKyAgICAgICAgIyAgIHdvdWxkIHBhc3MsIG9yIGZhaWwsIGRlcGVuZGluZyBvbiB3aGljaCB2YWx1ZSB3YXMgcGFzc2VkCisgICAgICAgICMgICBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgICAgICMKKyAgICAgICAgYXJnczEgPSBbMjQ1NiwgMzcuOCwgLTEyLjQ1LCBEZWNpbWFsKCcyLjU0JyksIEZyYWN0aW9uKDE3LCA1NCldCisgICAgICAgIGFyZ3MyID0gWzI0NTksIDM3LjIsIC0xMi40MSwgRGVjaW1hbCgnMi41OScpLCBGcmFjdGlvbigxNSwgNTQpXQorICAgICAgICBhc3NlcnQgbGVuKGFyZ3MxKSA9PSBsZW4oYXJnczIpCisgICAgICAgIGZvciBhLCBiIGluIHppcChhcmdzMSwgYXJnczIpOgorICAgICAgICAgICAgc2VsZi5kb19yZWxhdGl2ZV9zeW1tZXRyeShhLCBiKQorCisgICAgZGVmIGRvX3JlbGF0aXZlX3N5bW1ldHJ5KHNlbGYsIGEsIGIpOgorICAgICAgICBhLCBiID0gbWluKGEsIGIpLCBtYXgoYSwgYikKKyAgICAgICAgYXNzZXJ0IGEgPCBiCisgICAgICAgIGRlbHRhID0gYiAtIGEgICMgVGhlIGFic29sdXRlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdmFsdWVzLgorICAgICAgICByZWxfZXJyMSwgcmVsX2VycjIgPSBhYnMoZGVsdGEvYSksIGFicyhkZWx0YS9iKQorICAgICAgICAjIENob29zZSBhbiBlcnJvciBtYXJnaW4gaGFsZndheSBiZXR3ZWVuIHRoZSB0d28uCisgICAgICAgIHJlbCA9IChyZWxfZXJyMSArIHJlbF9lcnIyKS8yCisgICAgICAgICMgTm93IHNlZSB0aGF0IHZhbHVlcyBhIGFuZCBiIGNvbXBhcmUgYXBwcm94IGVxdWFsIHJlZ2FyZGxlc3Mgb2YKKyAgICAgICAgIyB3aGljaCBpcyBnaXZlbiBmaXJzdC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChhLCBiLCB0b2w9MCwgcmVsPXJlbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoYiwgYSwgdG9sPTAsIHJlbD1yZWwpKQorCisgICAgZGVmIHRlc3Rfc3ltbWV0cnkoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGFwcHJveF9lcXVhbChhLCBiKSA9PSBhcHByb3hfZXF1YWwoYiwgYSkKKyAgICAgICAgYXJncyA9IFstMjMsIC0yLCA1LCAxMDcsIDkzNTY4XQorICAgICAgICBkZWx0YSA9IDIKKyAgICAgICAgZm9yIGEgaW4gYXJnczoKKyAgICAgICAgICAgIGZvciB0eXBlXyBpbiAoaW50LCBmbG9hdCwgRGVjaW1hbCwgRnJhY3Rpb24pOgorICAgICAgICAgICAgICAgIHggPSB0eXBlXyhhKSoxMDAKKyAgICAgICAgICAgICAgICB5ID0geCArIGRlbHRhCisgICAgICAgICAgICAgICAgciA9IGFicyhkZWx0YS9tYXgoeCwgeSkpCisgICAgICAgICAgICAgICAgIyBUaGVyZSBhcmUgZml2ZSBjYXNlcyB0byBjaGVjazoKKyAgICAgICAgICAgICAgICAjIDEpIGFjdHVhbCBlcnJvciA8PSB0b2wsIDw9IHJlbAorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9ZGVsdGEsIHJlbD1yKQorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9ZGVsdGErMSwgcmVsPTIqcikKKyAgICAgICAgICAgICAgICAjIDIpIGFjdHVhbCBlcnJvciA+IHRvbCwgPiByZWwKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLTEsIHJlbD1yLzIpCisgICAgICAgICAgICAgICAgIyAzKSBhY3R1YWwgZXJyb3IgPD0gdG9sLCA+IHJlbAorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9ZGVsdGEsIHJlbD1yLzIpCisgICAgICAgICAgICAgICAgIyA0KSBhY3R1YWwgZXJyb3IgPiB0b2wsIDw9IHJlbAorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9ZGVsdGEtMSwgcmVsPXIpCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YS0xLCByZWw9MipyKQorICAgICAgICAgICAgICAgICMgNSkgZXhhY3QgZXF1YWxpdHkgdGVzdAorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB4LCB0b2w9MCwgcmVsPTApCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD0wLCByZWw9MCkKKworICAgIGRlZiBkb19zeW1tZXRyeV90ZXN0KHNlbGYsIGEsIGIsIHRvbCwgcmVsKToKKyAgICAgICAgdGVtcGxhdGUgPSAiYXBwcm94X2VxdWFsIGNvbXBhcmlzb25zIGRvbid0IG1hdGNoIGZvciAlciIKKyAgICAgICAgZmxhZzEgPSBhcHByb3hfZXF1YWwoYSwgYiwgdG9sLCByZWwpCisgICAgICAgIGZsYWcyID0gYXBwcm94X2VxdWFsKGIsIGEsIHRvbCwgcmVsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYWcxLCBmbGFnMiwgdGVtcGxhdGUuZm9ybWF0KChhLCBiLCB0b2wsIHJlbCkpKQorCisKK2NsYXNzIEFwcHJveEVxdWFsRXhhY3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgdGhlIGFwcHJveF9lcXVhbCBmdW5jdGlvbiB3aXRoIGV4YWN0bHkgZXF1YWwgdmFsdWVzLgorICAgICMgRXF1YWwgdmFsdWVzIHNob3VsZCBjb21wYXJlIGFzIGFwcHJveGltYXRlbHkgZXF1YWwuCisgICAgIyBUZXN0IGNhc2VzIGZvciBleGFjdGx5IGVxdWFsIHZhbHVlcywgd2hpY2ggc2hvdWxkIGNvbXBhcmUgYXBwcm94CisgICAgIyBlcXVhbCByZWdhcmRsZXNzIG9mIHRoZSBlcnJvciB0b2xlcmFuY2VzIGdpdmVuLgorCisgICAgZGVmIGRvX2V4YWN0bHlfZXF1YWxfdGVzdChzZWxmLCB4LCB0b2wsIHJlbCk6CisgICAgICAgIHJlc3VsdCA9IGFwcHJveF9lcXVhbCh4LCB4LCB0b2w9dG9sLCByZWw9cmVsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LCAnZXF1YWxpdHkgZmFpbHVyZSBmb3IgeD0lcicgJSB4KQorICAgICAgICByZXN1bHQgPSBhcHByb3hfZXF1YWwoLXgsIC14LCB0b2w9dG9sLCByZWw9cmVsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LCAnZXF1YWxpdHkgZmFpbHVyZSBmb3IgeD0lcicgJSAteCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgaW50IHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbC4KKyAgICAgICAgZm9yIG4gaW4gWzQyLCAxOTc0MCwgMTQ5NzQsIDIzMCwgMTc5NSwgNzAwMjQ1LCAzNjU4N106CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChuLCAwLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIGZsb2F0IHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbC4KKyAgICAgICAgZm9yIHggaW4gWzAuNDIsIDEuOTc0MCwgMTQ5Ny40LCAyMy4wLCAxNzkuNSwgNzAuMDI0NSwgMzYuNTg3XToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KHgsIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgRnJhY3Rpb24gdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZm9yIGYgaW4gW0YoMSwgMiksIEYoMCksIEYoNSwgMyksIEYoOSwgNyksIEYoMzUsIDM2KSwgRigzLCA3KV06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChmLCAwLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgRGVjaW1hbCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGZvciBkIGluIG1hcChELCAiOC4yIDMxLjI3NCA5MTIuMDQgMTYuNzQ1IDEuMjA0NyIuc3BsaXQoKSk6CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChkLCAwLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9hYnNvbHV0ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGZvciBuIGluIFsxNiwgMTAxMywgMTM3MiwgMTE5OCwgOTcxLCA0XToKKyAgICAgICAgICAgICMgVGVzdCBhcyBpbnRzLgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QobiwgMC4wMSwgMCkKKyAgICAgICAgICAgICMgVGVzdCBhcyBmbG9hdHMuCisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChuLzEwLCAwLjAxLCAwKQorICAgICAgICAgICAgIyBUZXN0IGFzIEZyYWN0aW9ucy4KKyAgICAgICAgICAgIGYgPSBGcmFjdGlvbihuLCAxMjM0KQorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoZiwgMC4wMSwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfYWJzb2x1dGVfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBlcXVhbCBEZWNpbWFsIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbCB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChEZWNpbWFsKCIzLjU3MSIpLCBEZWNpbWFsKCIwLjAxIiksIDApCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KC1EZWNpbWFsKCI4MS4zOTcxIiksIERlY2ltYWwoIjAuMDEiKSwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfcmVsYXRpdmUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbCB3aXRoIGEgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIGZvciB4IGluIFs4MzQ3LCAxMDEuMywgLTc5MTAuMjgsIEZyYWN0aW9uKDUsIDIxKV06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdCh4LCAwLCAwLjAxKQorICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChEZWNpbWFsKCIxMS42OCIpLCAwLCBEZWNpbWFsKCIwLjAxIikpCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2JvdGgoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIHZhbHVlcyBhcmUgZXF1YWwgd2hlbiBib3RoIHRvbCBhbmQgcmVsIGFyZSBnaXZlbi4KKyAgICAgICAgZm9yIHggaW4gWzQxMDE3LCAxNi43NDIsIC04MTMuMDIsIEZyYWN0aW9uKDMsIDgpXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KHgsIDAuMSwgMC4wMSkKKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoRCgiNy4yIiksIEQoIjAuMSIpLCBEKCIwLjAxIikpCisKKworY2xhc3MgQXBwcm94RXF1YWxVbmVxdWFsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBVbmVxdWFsIHZhbHVlcyBzaG91bGQgY29tcGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2VzLgorICAgICMgVGVzdCBjYXNlcyBmb3IgdW5lcXVhbCB2YWx1ZXMsIHdpdGggZXhhY3QgZXF1YWxpdHkgdGVzdC4KKworICAgIGRlZiBkb19leGFjdGx5X3VuZXF1YWxfdGVzdChzZWxmLCB4KToKKyAgICAgICAgZm9yIGEgaW4gKHgsIC14KToKKyAgICAgICAgICAgIHJlc3VsdCA9IGFwcHJveF9lcXVhbChhLCBhKzEsIHRvbD0wLCByZWw9MCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LCAnaW5lcXVhbGl0eSBmYWlsdXJlIGZvciB4PSVyJyAlIGEpCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X3VuZXF1YWxfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHVuZXF1YWwgaW50IHZhbHVlcyBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlLgorICAgICAgICBmb3IgbiBpbiBbOTUxLCA1NzIzMDUsIDQ3OCwgOTE3LCAxNzI0MF06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KG4pCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X3VuZXF1YWxfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdW5lcXVhbCBmbG9hdCB2YWx1ZXMgYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZS4KKyAgICAgICAgZm9yIHggaW4gWzkuNTEsIDU3MjMuMDUsIDQ3LjgsIDkuMTcsIDE3LjI0XToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV91bmVxdWFsX3Rlc3QoeCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfdW5lcXVhbF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHVuZXF1YWwgRnJhY3Rpb25zIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBmb3IgZiBpbiBbRigxLCA1KSwgRig3LCA5KSwgRigxMiwgMTEpLCBGKDEwMSwgOTkwMjMpXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV91bmVxdWFsX3Rlc3QoZikKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfdW5lcXVhbF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdW5lcXVhbCBEZWNpbWFscyBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlLgorICAgICAgICBmb3IgZCBpbiBtYXAoRGVjaW1hbCwgIjMuMTQxNSAyOTguMTIgMy40NyAxOC45OTYgMC4wMDI0NSIuc3BsaXQoKSk6CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KGQpCisKKworY2xhc3MgQXBwcm94RXF1YWxJbmV4YWN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBJbmV4YWN0IHRlc3QgY2FzZXMgZm9yIGFwcHJveF9lcnJvci4KKyAgICAjIFRlc3QgY2FzZXMgd2hlbiBjb21wYXJpbmcgdHdvIHZhbHVlcyB0aGF0IGFyZSBub3QgZXhhY3RseSBlcXVhbC4KKworICAgICMgPT09IEFic29sdXRlIGVycm9yIHRlc3RzID09PQorCisgICAgZGVmIGRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChzZWxmLCB4LCBkZWx0YSk6CisgICAgICAgIHRlbXBsYXRlID0gIlRlc3QgZmFpbHVyZSBmb3IgeD17IXJ9LCB5PXshcn0iCisgICAgICAgIGZvciB5IGluICh4ICsgZGVsdGEsIHggLSBkZWx0YSk6CisgICAgICAgICAgICBtc2cgPSB0ZW1wbGF0ZS5mb3JtYXQoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoeCwgeSwgdG9sPTIqZGVsdGEsIHJlbD0wKSwgbXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwoeCwgeSwgdG9sPWRlbHRhLzIsIHJlbD0wKSwgbXNnKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2Fic29sdXRlX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBpbnRzIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGZvciBuIGluIFstMTA3MzcsIC0xOTc1LCAtNywgLTIsIDAsIDEsIDksIDM3LCA0MjMsIDk4NzQsIDIzNzg5MTEwXToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KG4sIDEwKQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QobiwgMikKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9hYnNvbHV0ZV9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBmbG9hdHMgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZm9yIHggaW4gWy0yODQuMTI2LCAtOTcuMSwgLTMuNCwgLTIuMTUsIDAuNSwgMS4wLCA3LjgsIDQuMjMsIDM4MTcuNF06CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdCh4LCAxLjUpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdCh4LCAwLjAxKQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoeCwgMC4wMDAxKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2Fic29sdXRlX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIEZyYWN0aW9ucyB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBkZWx0YSA9IEZyYWN0aW9uKDEsIDI5KQorICAgICAgICBudW1lcmF0b3JzID0gWy04NCwgLTE1LCAtMiwgLTEsIDAsIDEsIDUsIDE3LCAyMywgMzQsIDcxXQorICAgICAgICBmb3IgZiBpbiAoRnJhY3Rpb24obiwgMjkpIGZvciBuIGluIG51bWVyYXRvcnMpOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoZiwgZGVsdGEpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChmLCBmbG9hdChkZWx0YSkpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBEZWNpbWFscyB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBkZWx0YSA9IERlY2ltYWwoIjAuMDEiKQorICAgICAgICBmb3IgZCBpbiBtYXAoRGVjaW1hbCwgIjEuMCAzLjUgMzYuMDggNjEuNzkgNzkxMi4zNjQ4Ii5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KGQsIGRlbHRhKQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoLWQsIGRlbHRhKQorCisgICAgZGVmIHRlc3RfY3Jvc3NfemVybyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciB0aGUgY2FzZSBvZiB0aGUgdHdvIHZhbHVlcyBoYXZpbmcgb3Bwb3NpdGUgc2lnbnMuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoMWUtNSwgLTFlLTUsIHRvbD0xZS00LCByZWw9MCkpCisKKyAgICAjID09PSBSZWxhdGl2ZSBlcnJvciB0ZXN0cyA9PT0KKworICAgIGRlZiBkb19hcHByb3hfZXF1YWxfcmVsX3Rlc3Qoc2VsZiwgeCwgZGVsdGEpOgorICAgICAgICB0ZW1wbGF0ZSA9ICJUZXN0IGZhaWx1cmUgZm9yIHg9eyFyfSwgeT17IXJ9IgorICAgICAgICBmb3IgeSBpbiAoeCooMStkZWx0YSksIHgqKDEtZGVsdGEpKToKKyAgICAgICAgICAgIG1zZyA9IHRlbXBsYXRlLmZvcm1hdCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCh4LCB5LCB0b2w9MCwgcmVsPTIqZGVsdGEpLCBtc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbCh4LCB5LCB0b2w9MCwgcmVsPWRlbHRhLzIpLCBtc2cpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIGludHMgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDY0LCA0NywgdG9sPTAsIHJlbD0wLjM2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCg2NCwgNDcsIHRvbD0wLCByZWw9MC4zNykpCisgICAgICAgICMgLS0tCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNDQ5LCA1MTIsIHRvbD0wLCByZWw9MC4xMjUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDQ0OCwgNTEyLCB0b2w9MCwgcmVsPTAuMTI1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwoNDQ3LCA1MTIsIHRvbD0wLCByZWw9MC4xMjUpKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX3JlbGF0aXZlX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIGZsb2F0cyB3aXRoIGEgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIGZvciB4IGluIFstMTc4LjM0LCAtMC4xLCAwLjEsIDEuMCwgMzYuOTcsIDI4NDcuMTM2LCA5MTQ1LjA3NF06CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdCh4LCAwLjAyKQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoeCwgMC4wMDAxKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX3JlbGF0aXZlX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIEZyYWN0aW9ucyB3aXRoIGEgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkZWx0YSA9IEZyYWN0aW9uKDMsIDgpCisgICAgICAgIGZvciBmIGluIFtGKDMsIDg0KSwgRigxNywgMzApLCBGKDQ5LCA1MCksIEYoOTIsIDg1KV06CisgICAgICAgICAgICBmb3IgZCBpbiAoZGVsdGEsIGZsb2F0KGRlbHRhKSk6CisgICAgICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoZiwgZCkKKyAgICAgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdCgtZiwgZCkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9yZWxhdGl2ZV9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIERlY2ltYWxzIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgZm9yIGQgaW4gbWFwKERlY2ltYWwsICIwLjAyIDEuMCA1LjcgMTMuNjcgOTQuMTM4IDkxMDI3LjkzMjEiLnNwbGl0KCkpOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoZCwgRGVjaW1hbCgiMC4wMDEiKSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KC1kLCBEZWNpbWFsKCIwLjA1IikpCisKKyAgICAjID09PSBCb3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvciB0ZXN0cyA9PT0KKworICAgICMgVGhlcmUgYXJlIGZvdXIgY2FzZXMgdG8gY29uc2lkZXI6CisgICAgIyAgIDEpIGFjdHVhbCBlcnJvciA8PSBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvcgorICAgICMgICAyKSBhY3R1YWwgZXJyb3IgPD0gYWJzb2x1dGUgZXJyb3IgYnV0ID4gcmVsYXRpdmUgZXJyb3IKKyAgICAjICAgMykgYWN0dWFsIGVycm9yIDw9IHJlbGF0aXZlIGVycm9yIGJ1dCA+IGFic29sdXRlIGVycm9yCisgICAgIyAgIDQpIGFjdHVhbCBlcnJvciA+IGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yCisKKyAgICBkZWYgZG9fY2hlY2tfYm90aChzZWxmLCBhLCBiLCB0b2wsIHJlbCwgdG9sX2ZsYWcsIHJlbF9mbGFnKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLmFzc2VydFRydWUgaWYgdG9sX2ZsYWcgZWxzZSBzZWxmLmFzc2VydEZhbHNlCisgICAgICAgIGNoZWNrKGFwcHJveF9lcXVhbChhLCBiLCB0b2w9dG9sLCByZWw9MCkpCisgICAgICAgIGNoZWNrID0gc2VsZi5hc3NlcnRUcnVlIGlmIHJlbF9mbGFnIGVsc2Ugc2VsZi5hc3NlcnRGYWxzZQorICAgICAgICBjaGVjayhhcHByb3hfZXF1YWwoYSwgYiwgdG9sPTAsIHJlbD1yZWwpKQorICAgICAgICBjaGVjayA9IHNlbGYuYXNzZXJ0VHJ1ZSBpZiAodG9sX2ZsYWcgb3IgcmVsX2ZsYWcpIGVsc2Ugc2VsZi5hc3NlcnRGYWxzZQorICAgICAgICBjaGVjayhhcHByb3hfZXF1YWwoYSwgYiwgdG9sPXRvbCwgcmVsPXJlbCkpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYm90aDEoc2VsZik6CisgICAgICAgICMgVGVzdCBhY3R1YWwgZXJyb3IgPD0gYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIHNlbGYuZG9fY2hlY2tfYm90aCg3Ljk1NSwgNy45NTIsIDAuMDA0LCAzLjhlLTQsIFRydWUsIFRydWUpCisgICAgICAgIHNlbGYuZG9fY2hlY2tfYm90aCgtNy4zODcsIC03LjM4NiwgMC4wMDIsIDAuMDAwMiwgVHJ1ZSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoMihzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA8PSBhYnNvbHV0ZSBlcnJvciBidXQgPiByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDcuOTU1LCA3Ljk1MiwgMC4wMDQsIDMuN2UtNCwgVHJ1ZSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYm90aDMoc2VsZik6CisgICAgICAgICMgVGVzdCBhY3R1YWwgZXJyb3IgPD0gcmVsYXRpdmUgZXJyb3IgYnV0ID4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIHNlbGYuZG9fY2hlY2tfYm90aCg3Ljk1NSwgNy45NTIsIDAuMDAxLCAzLjhlLTQsIEZhbHNlLCBUcnVlKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2JvdGg0KHNlbGYpOgorICAgICAgICAjIFRlc3QgYWN0dWFsIGVycm9yID4gYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIHNlbGYuZG9fY2hlY2tfYm90aCgyLjc4LCAyLjc1LCAwLjAxLCAwLjAwMSwgRmFsc2UsIEZhbHNlKQorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoOTcxLjQ0LCA5NzEuNDcsIDAuMDIsIDNlLTUsIEZhbHNlLCBGYWxzZSkKKworCitjbGFzcyBBcHByb3hFcXVhbFNwZWNpYWxzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IGFwcHJveF9lcXVhbCB3aXRoIE5BTnMgYW5kIElORnMgYW5kIHplcm9lcy4KKworICAgIGRlZiB0ZXN0X2luZihzZWxmKToKKyAgICAgICAgZm9yIHR5cGVfIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBpbmYgPSB0eXBlXygnaW5mJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoaW5mLCBpbmYpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChpbmYsIGluZiwgMCwgMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGluZiwgaW5mLCAxLCAwLjAxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoLWluZiwgLWluZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbChpbmYsIC1pbmYpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwoaW5mLCAxMDAwKSkKKworICAgIGRlZiB0ZXN0X25hbihzZWxmKToKKyAgICAgICAgZm9yIHR5cGVfIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBuYW4gPSB0eXBlXygnbmFuJykKKyAgICAgICAgICAgIGZvciBvdGhlciBpbiAobmFuLCB0eXBlXygnaW5mJyksIDEwMDApOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKG5hbiwgb3RoZXIpKQorCisgICAgZGVmIHRlc3RfZmxvYXRfemVyb2VzKHNlbGYpOgorICAgICAgICBuemVybyA9IG1hdGguY29weXNpZ24oMC4wLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChuemVybywgMC4wLCB0b2w9MC4xLCByZWw9MC4xKSkKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfemVyb2VzKHNlbGYpOgorICAgICAgICBuemVybyA9IERlY2ltYWwoIi0wLjAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKG56ZXJvLCBEZWNpbWFsKDApLCB0b2w9MC4xLCByZWw9MC4xKSkKKworCitjbGFzcyBUZXN0QXBwcm94RXF1YWxFcnJvcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBlcnJvciBjb25kaXRpb25zIG9mIGFwcHJveF9lcXVhbC4KKworICAgIGRlZiB0ZXN0X2JhZF90b2woc2VsZik6CisgICAgICAgICMgVGVzdCBuZWdhdGl2ZSB0b2wgcmFpc2VzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhcHByb3hfZXF1YWwsIDEwMCwgMTAwLCAtMSwgMC4xKQorCisgICAgZGVmIHRlc3RfYmFkX3JlbChzZWxmKToKKyAgICAgICAgIyBUZXN0IG5lZ2F0aXZlIHJlbCByYWlzZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGFwcHJveF9lcXVhbCwgMTAwLCAxMDAsIDEsIC0wLjEpCisKKworIyAtLS0gVGVzdHMgZm9yIE51bWVyaWNUZXN0Q2FzZSAtLS0KKworIyBUaGUgZm9ybWF0dGluZyByb3V0aW5lIHRoYXQgZ2VuZXJhdGVzIHRoZSBlcnJvciBtZXNzYWdlcyBpcyBjb21wbGV4IGVub3VnaAorIyB0aGF0IGl0IHRvbyBuZWVkcyB0ZXN0aW5nLgorCitjbGFzcyBUZXN0TnVtZXJpY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZSBleGFjdCB3b3JkaW5nIG9mIE51bWVyaWNUZXN0Q2FzZSBlcnJvciBtZXNzYWdlcyBpcyAqbm90KiBndWFyYW50ZWVkLAorICAgICMgYnV0IHdlIG5lZWQgdG8gZ2l2ZSB0aGVtIHNvbWUgc29ydCBvZiB0ZXN0IHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlCisgICAgIyBnZW5lcmF0ZWQgY29ycmVjdGx5LiBBcyBhIGNvbXByb21pc2UsIHdlIGxvb2sgZm9yIHNwZWNpZmljIHN1YnN0cmluZ3MKKyAgICAjIHRoYXQgYXJlIGV4cGVjdGVkIHRvIGJlIGZvdW5kIGV2ZW4gaWYgdGhlIG92ZXJhbGwgZXJyb3IgbWVzc2FnZSBjaGFuZ2VzLgorCisgICAgZGVmIGRvX3Rlc3Qoc2VsZiwgYXJncyk6CisgICAgICAgIGFjdHVhbF9tc2cgPSBOdW1lcmljVGVzdENhc2UuX21ha2Vfc3RkX2Vycl9tc2coKmFyZ3MpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5nZW5lcmF0ZV9zdWJzdHJpbmdzKCphcmdzKQorICAgICAgICBmb3Igc3Vic3RyaW5nIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJzdHJpbmcsIGFjdHVhbF9tc2cpCisKKyAgICBkZWYgdGVzdF9udW1lcmljdGVzdGNhc2VfaXNfdGVzdGNhc2Uoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoYXQgTnVtZXJpY1Rlc3RDYXNlIGFjdHVhbGx5IGlzIGEgVGVzdENhc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE51bWVyaWNUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpKQorCisgICAgZGVmIHRlc3RfZXJyb3JfbXNnX251bWVyaWMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgZXJyb3IgbWVzc2FnZSBnZW5lcmF0ZWQgZm9yIG51bWVyaWMgY29tcGFyaXNvbnMuCisgICAgICAgIGFyZ3MgPSAoMi41LCA0LjAsIDAuNSwgMC4yNSwgTm9uZSkKKyAgICAgICAgc2VsZi5kb190ZXN0KGFyZ3MpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9tc2dfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgZXJyb3IgbWVzc2FnZSBnZW5lcmF0ZWQgZm9yIHNlcXVlbmNlIGNvbXBhcmlzb25zLgorICAgICAgICBhcmdzID0gKDMuNzUsIDguMjUsIDEuMjUsIDAuNSwgNykKKyAgICAgICAgc2VsZi5kb190ZXN0KGFyZ3MpCisKKyAgICBkZWYgZ2VuZXJhdGVfc3Vic3RyaW5ncyhzZWxmLCBmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgaWR4KToKKyAgICAgICAgIiIiUmV0dXJuIHN1YnN0cmluZ3Mgd2UgZXhwZWN0IHRvIHNlZSBpbiBlcnJvciBtZXNzYWdlcy4iIiIKKyAgICAgICAgYWJzX2VyciwgcmVsX2VyciA9IF9jYWxjX2Vycm9ycyhmaXJzdCwgc2Vjb25kKQorICAgICAgICBzdWJzdHJpbmdzID0gWworICAgICAgICAgICAgICAgICd0b2w9JXInICUgdG9sLAorICAgICAgICAgICAgICAgICdyZWw9JXInICUgcmVsLAorICAgICAgICAgICAgICAgICdhYnNvbHV0ZSBlcnJvciA9ICVyJyAlIGFic19lcnIsCisgICAgICAgICAgICAgICAgJ3JlbGF0aXZlIGVycm9yID0gJXInICUgcmVsX2VyciwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIGlmIGlkeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN1YnN0cmluZ3MuYXBwZW5kKCdkaWZmZXIgYXQgaW5kZXggJWQnICUgaWR4KQorICAgICAgICByZXR1cm4gc3Vic3RyaW5ncworCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjID09PSBUZXN0cyBmb3IgdGhlIHN0YXRpc3RpY3MgbW9kdWxlID09PQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitjbGFzcyBHbG9iYWxzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gc3RhdGlzdGljcworICAgIGV4cGVjdGVkX21ldGFkYXRhID0gWyJfX2RvY19fIiwgIl9fYWxsX18iXQorCisgICAgZGVmIHRlc3RfbWV0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9mIG1ldGFkYXRhLgorICAgICAgICBmb3IgbWV0YSBpbiBzZWxmLmV4cGVjdGVkX21ldGFkYXRhOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5tb2R1bGUsIG1ldGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBub3QgcHJlc2VudCIgJSBtZXRhKQorCisgICAgZGVmIHRlc3RfY2hlY2tfYWxsKHNlbGYpOgorICAgICAgICAjIENoZWNrIGV2ZXJ5dGhpbmcgaW4gX19hbGxfXyBleGlzdHMgYW5kIGlzIHB1YmxpYy4KKyAgICAgICAgbW9kdWxlID0gc2VsZi5tb2R1bGUKKyAgICAgICAgZm9yIG5hbWUgaW4gbW9kdWxlLl9fYWxsX186CisgICAgICAgICAgICAjIE5vIHByaXZhdGUgbmFtZXMgaW4gX19hbGxfXzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobmFtZS5zdGFydHN3aXRoKCJfIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcml2YXRlIG5hbWUgIiVzIiBpbiBfX2FsbF9fJyAlIG5hbWUpCisgICAgICAgICAgICAjIEFuZCBhbnl0aGluZyBpbiBfX2FsbF9fIG11c3QgZXhpc3Q6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsIG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaXNzaW5nIG5hbWUgIiVzIiBpbiBfX2FsbF9fJyAlIG5hbWUpCisKKworY2xhc3MgRG9jVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PTyBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2RvY190ZXN0cyhzZWxmKToKKyAgICAgICAgZmFpbGVkLCB0cmllZCA9IGRvY3Rlc3QudGVzdG1vZChzdGF0aXN0aWNzKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIodHJpZWQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmFpbGVkLCAwKQorCitjbGFzcyBTdGF0aXN0aWNzRXJyb3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9oYXNfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBlcnJtc2cgPSAoCisgICAgICAgICAgICAgICAgIkV4cGVjdGVkIFN0YXRpc3RpY3NFcnJvciB0byBiZSBhIFZhbHVlRXJyb3IsIGJ1dCBnb3QgYSIKKyAgICAgICAgICAgICAgICAiIHN1YmNsYXNzIG9mICVyIGluc3RlYWQuIgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3RhdGlzdGljcywgJ1N0YXRpc3RpY3NFcnJvcicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgVmFsdWVFcnJvciksCisgICAgICAgICAgICAgICAgZXJybXNnICUgc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IuX19iYXNlX18KKyAgICAgICAgICAgICAgICApCisKKworIyA9PT0gVGVzdHMgZm9yIHByaXZhdGUgdXRpbGl0eSBmdW5jdGlvbnMgPT09CisKK2NsYXNzIEV4YWN0UmF0aW9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgX2V4YWN0X3JhdGlvIHV0aWxpdHkuCisKKyAgICBkZWYgdGVzdF9pbnQoc2VsZik6CisgICAgICAgIGZvciBpIGluICgtMjAsIC0zLCAwLCA1LCA5OSwgMTAqKjIwKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oaSksIChpLCAxKSkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9uKHNlbGYpOgorICAgICAgICBudW1lcmF0b3JzID0gKC01LCAxLCAxMiwgMzgpCisgICAgICAgIGZvciBuIGluIG51bWVyYXRvcnM6CisgICAgICAgICAgICBmID0gRnJhY3Rpb24obiwgMzcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKGYpLCAobiwgMzcpKQorCisgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oMC4xMjUpLCAoMSwgOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oMS4xMjUpLCAoOSwgOCkpCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTEwMCwgMTAwKSBmb3IgXyBpbiByYW5nZSgxMDApXQorICAgICAgICBmb3IgeCBpbiBkYXRhOgorICAgICAgICAgICAgbnVtLCBkZW4gPSBzdGF0aXN0aWNzLl9leGFjdF9yYXRpbyh4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBudW0vZGVuKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbChzZWxmKToKKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgX2V4YWN0X3JhdGlvID0gc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZXhhY3RfcmF0aW8oRCgiMC4xMjUiKSksICgxMjUsIDEwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9leGFjdF9yYXRpbyhEKCIxMi4zNDUiKSksICgxMjM0NSwgMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2V4YWN0X3JhdGlvKEQoIi0xLjk4IikpLCAoLTE5OCwgMTAwKSkKKworCitjbGFzcyBEZWNpbWFsVG9SYXRpb1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBfZGVjaW1hbF90b19yYXRpbyBwcml2YXRlIGZ1bmN0aW9uLgorCisgICAgZGVmIHRlc3RTcGVjaWFsc1JhaXNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBOQU5zIGFuZCBJTkZzIHJhaXNlIFZhbHVlRXJyb3IuCisgICAgICAgICMgTm9uLXNwZWNpYWwgdmFsdWVzIGFyZSBjb3ZlcmVkIGJ5IF9leGFjdF9yYXRpbyBhYm92ZS4KKyAgICAgICAgZm9yIGQgaW4gKERlY2ltYWwoJ05BTicpLCBEZWNpbWFsKCdzTkFOJyksIERlY2ltYWwoJ0lORicpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8sIGQpCisKKyAgICBkZWYgdGVzdF9zaWduKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2lnbiBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseS4KKyAgICAgICAgbnVtYmVycyA9IFtEZWNpbWFsKCI5Ljg3NjVlMTIiKSwgRGVjaW1hbCgiOS44NzY1ZS0xMiIpXQorICAgICAgICBmb3IgZCBpbiBudW1iZXJzOgorICAgICAgICAgICAgIyBGaXJzdCB0ZXN0IHBvc2l0aXZlIGRlY2ltYWxzLgorICAgICAgICAgICAgYXNzZXJ0IGQgPiAwCisgICAgICAgICAgICBudW0sIGRlbiA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG51bSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkZW4sIDApCisgICAgICAgICAgICAjIFRoZW4gdGVzdCBuZWdhdGl2ZSBkZWNpbWFscy4KKyAgICAgICAgICAgIG51bSwgZGVuID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbygtZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG51bSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkZW4sIDApCisKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV9leHBvbmVudChzZWxmKToKKyAgICAgICAgIyBUZXN0IHJlc3VsdCB3aGVuIHRoZSBleHBvbmVudCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgdCA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMC4xMjM0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgKDEyMzQsIDEwMDAwKSkKKworICAgIGRlZiB0ZXN0X3Bvc2l0aXZlX2V4cG9uZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgcmVzdWx0cyB3aGVuIHRoZSBleHBvbmVudCBpcyBwb3NpdGl2ZS4KKyAgICAgICAgdCA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMS4yMzRlNyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsICgxMjM0MDAwMCwgMSkpCisKKyAgICBkZWYgdGVzdF9yZWdyZXNzaW9uXzIwNTM2KHNlbGYpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaXNzdWUgMjA1MzYuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDUzNgorICAgICAgICB0ID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbyhEZWNpbWFsKCIxZTIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCAoMTAwLCAxKSkKKyAgICAgICAgdCA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMS40N2U1IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgKDE0NzAwMCwgMSkpCisKKworY2xhc3MgQ2hlY2tUeXBlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IF9jaGVja190eXBlIHByaXZhdGUgZnVuY3Rpb24uCisKKyAgICBkZWYgdGVzdF9hbGxvd2VkKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhIHR5cGUgd2hpY2ggc2hvdWxkIGJlIGFsbG93ZWQgaXMgYWxsb3dlZC4KKyAgICAgICAgYWxsb3dlZCA9IHNldChbaW50LCBmbG9hdF0pCisgICAgICAgIHN0YXRpc3RpY3MuX2NoZWNrX3R5cGUoaW50LCBhbGxvd2VkKQorICAgICAgICBzdGF0aXN0aWNzLl9jaGVja190eXBlKGZsb2F0LCBhbGxvd2VkKQorCisgICAgZGVmIHRlc3Rfbm90X2FsbG93ZWQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGEgdHlwZSB3aGljaCBzaG91bGQgbm90IGJlIGFsbG93ZWQgcmFpc2VzLgorICAgICAgICBhbGxvd2VkID0gc2V0KFtpbnQsIGZsb2F0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdGF0aXN0aWNzLl9jaGVja190eXBlLCBEZWNpbWFsLCBhbGxvd2VkKQorCisgICAgZGVmIHRlc3RfYWRkX3RvX2FsbG93ZWQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGEgc2Vjb25kIHR5cGUgd2lsbCBiZSBhZGRlZCB0byB0aGUgYWxsb3dlZCBzZXQuCisgICAgICAgIGFsbG93ZWQgPSBzZXQoW2ludF0pCisgICAgICAgIHN0YXRpc3RpY3MuX2NoZWNrX3R5cGUoZmxvYXQsIGFsbG93ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsb3dlZCwgc2V0KFtpbnQsIGZsb2F0XSkpCisKKworIyA9PT0gVGVzdHMgZm9yIHB1YmxpYyBmdW5jdGlvbnMgPT09CisKK2NsYXNzIFVuaXZhcmlhdGVDb21tb25NaXhpbjoKKyAgICAjIENvbW1vbiB0ZXN0cyBmb3IgbW9zdCB1bml2YXJpYXRlIGZ1bmN0aW9ucyB0aGF0IHRha2UgYSBkYXRhIGFyZ3VtZW50LgorCisgICAgZGVmIHRlc3Rfbm9fYXJncyhzZWxmKToKKyAgICAgICAgIyBGYWlsIGlmIGdpdmVuIG5vIGFyZ3VtZW50cy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9kYXRhKHNlbGYpOgorICAgICAgICAjIEZhaWwgd2hlbiB0aGUgZGF0YSBhcmd1bWVudCAoZmlyc3QgYXJndW1lbnQpIGlzIGVtcHR5LgorICAgICAgICBmb3IgZW1wdHkgaW4gKFtdLCAoKSwgaXRlcihbXSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZW1wdHkpCisKKyAgICBkZWYgcHJlcGFyZV9kYXRhKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gaW50IGRhdGEgZm9yIHZhcmlvdXMgdGVzdHMuIiIiCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICAgICAgd2hpbGUgZGF0YSA9PSBzb3J0ZWQoZGF0YSk6CisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHRlc3Rfbm9faW5wbGFjZV9tb2RpZmljYXRpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGl0cyBpbnB1dCBkYXRhLgorICAgICAgICBkYXRhID0gc2VsZi5wcmVwYXJlX2RhdGEoKQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpICE9IDEgICMgTmVjZXNzYXJ5IHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCisgICAgICAgIGFzc2VydCBkYXRhICE9IHNvcnRlZChkYXRhKQorICAgICAgICBzYXZlZCA9IGRhdGFbOl0KKyAgICAgICAgYXNzZXJ0IGRhdGEgaXMgbm90IHNhdmVkCisgICAgICAgIF8gPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoZGF0YSwgc2F2ZWQsICJkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIikKKworICAgIGRlZiB0ZXN0X29yZGVyX2RvZXNudF9tYXR0ZXIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBvcmRlciBvZiBkYXRhIHBvaW50cyBkb2Vzbid0IGNoYW5nZSB0aGUgcmVzdWx0LgorCisgICAgICAgICMgQ0FVVElPTjogZHVlIHRvIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycywgdGhlIHJlc3VsdCBhY3R1YWxseQorICAgICAgICAjIG1heSBkZXBlbmQgb24gdGhlIG9yZGVyLiBDb25zaWRlciB0aGlzIHRlc3QgcmVwcmVzZW50aW5nIGFuIGlkZWFsLgorICAgICAgICAjIFRvIGF2b2lkIHRoaXMgdGVzdCBmYWlsaW5nLCBvbmx5IHRlc3Qgd2l0aCBleGFjdCB2YWx1ZXMgc3VjaCBhcyBpbnRzCisgICAgICAgICMgb3IgRnJhY3Rpb25zLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDMsIDMsIDQsIDUsIDZdKjEwMAorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBhY3R1YWwgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQorCisgICAgZGVmIHRlc3RfdHlwZV9vZl9kYXRhX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSB0eXBlIG9mIGl0ZXJhYmxlIGRhdGEgZG9lc24ndCBlZmZlY3QgdGhlIHJlc3VsdC4KKyAgICAgICAgY2xhc3MgTXlMaXN0KGxpc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNeVR1cGxlKHR1cGxlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGdlbmVyYXRvcihkYXRhKToKKyAgICAgICAgICAgIHJldHVybiAob2JqIGZvciBvYmogaW4gZGF0YSkKKyAgICAgICAgZGF0YSA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgZm9yIGtpbmQgaW4gKGxpc3QsIHR1cGxlLCBpdGVyLCBNeUxpc3QsIE15VHVwbGUsIGdlbmVyYXRvcik6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoa2luZChkYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JhbmdlX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGZ1bmN0aW9ucyB3b3JrIHdpdGggcmFuZ2Ugb2JqZWN0cy4KKyAgICAgICAgZGF0YSA9IHJhbmdlKDIwLCA1MCwgMykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMobGlzdChkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYmFkX2FyZ190eXBlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZnVuY3Rpb24gcmFpc2VzIHdoZW4gZ2l2ZW4gZGF0YSBvZiB0aGUgd3JvbmcgdHlwZS4KKworICAgICAgICAjIERvbid0IHJvbGwgdGhlIGZvbGxvd2luZyBpbnRvIGEgbG9vcCBsaWtlIHRoaXM6CisgICAgICAgICMgICBmb3IgYmFkIGluIGxpc3Rfb2ZfYmFkOgorICAgICAgICAjICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoYmFkKQorICAgICAgICAjCisgICAgICAgICMgU2luY2UgYXNzZXJ0UmFpc2VzIGRvZXNuJ3Qgc2hvdyB0aGUgYXJndW1lbnRzIHRoYXQgY2F1c2VkIHRoZSB0ZXN0CisgICAgICAgICMgZmFpbHVyZSwgaXQgaXMgdmVyeSBkaWZmaWN1bHQgdG8gZGVidWcgdGhlc2UgdGVzdCBmYWlsdXJlcyB3aGVuIHRoZQorICAgICAgICAjIGZvbGxvd2luZyBhcmUgaW4gYSBsb29wLgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoMjMpCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoNDIuMCkKKyAgICAgICAgc2VsZi5jaGVja19mb3JfdHlwZV9lcnJvcihvYmplY3QoKSkKKworICAgIGRlZiBjaGVja19mb3JfdHlwZV9lcnJvcihzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCAqYXJncykKKworICAgIGRlZiB0ZXN0X3R5cGVfb2ZfZGF0YV9lbGVtZW50KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoZSB0eXBlIG9mIGRhdGEgZWxlbWVudHMgZG9lc24ndCBhZmZlY3QgdGhlIG51bWVyaWMgcmVzdWx0LgorICAgICAgICAjIFRoaXMgaXMgYSB3ZWFrZXIgdGVzdCB0aGFuIFVuaXZhcmlhdGVUeXBlTWl4aW4udGVzdFR5cGVzQ29uc2VydmVkLAorICAgICAgICAjIGJlY2F1c2UgaXQgY2hlY2tzIHRoZSBudW1lcmljIHJlc3VsdCBieSBlcXVhbGl0eSwgYnV0IG5vdCBieSB0eXBlLgorICAgICAgICBjbGFzcyBNeUZsb2F0KGZsb2F0KToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3RydWVkaXZfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX2FkZF9fKG90aGVyKSkKKyAgICAgICAgICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgICAgIHJhdyA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMocmF3KQorICAgICAgICBmb3Iga2luZCBpbiAoZmxvYXQsIE15RmxvYXQsIERlY2ltYWwsIEZyYWN0aW9uKToKKyAgICAgICAgICAgIGRhdGEgPSBba2luZCh4KSBmb3IgeCBpbiByYXddCisgICAgICAgICAgICByZXN1bHQgPSB0eXBlKGV4cGVjdGVkKShzZWxmLmZ1bmMoZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKworY2xhc3MgVW5pdmFyaWF0ZVR5cGVNaXhpbjoKKyAgICAiIiJNaXhpbiBjbGFzcyBmb3IgdHlwZS1jb25zZXJ2aW5nIGZ1bmN0aW9ucy4KKworICAgIFRoaXMgbWl4aW4gY2xhc3MgaG9sZHMgdGVzdChzKSBmb3IgZnVuY3Rpb25zIHdoaWNoIGNvbnNlcnZlIHRoZSB0eXBlIG9mCisgICAgaW5kaXZpZHVhbCBkYXRhIHBvaW50cy4gRS5nLiB0aGUgbWVhbiBvZiBhIGxpc3Qgb2YgRnJhY3Rpb25zIHNob3VsZCBpdHNlbGYKKyAgICBiZSBhIEZyYWN0aW9uLgorCisgICAgTm90IGFsbCB0ZXN0cyB0byBkbyB3aXRoIHR5cGVzIG5lZWQgZ28gaW4gdGhpcyBjbGFzcy4gT25seSB0aG9zZSB0aGF0CisgICAgcmVseSBvbiB0aGUgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBzYW1lIHR5cGUgYXMgaXRzIGlucHV0IGRhdGEuCisgICAgIiIiCisgICAgZGVmIHRlc3RfdHlwZXNfY29uc2VydmVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmdW5jdGlvbnMga2VlcHMgdGhlIHNhbWUgdHlwZSBhcyB0aGVpciBkYXRhIHBvaW50cy4KKyAgICAgICAgIyAoRXhjbHVkZXMgbWl4ZWQgZGF0YSB0eXBlcy4pIFRoaXMgb25seSB0ZXN0cyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuCisgICAgICAgICMgcmVzdWx0LCBub3QgdGhlIHZhbHVlLgorICAgICAgICBjbGFzcyBNeUZsb2F0KGZsb2F0KToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3RydWVkaXZfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3N1Yl9fKG90aGVyKSkKKyAgICAgICAgICAgIGRlZiBfX3JzdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3JzdWJfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19wb3dfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3Bvd19fKG90aGVyKSkKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKShzdXBlcigpLl9fYWRkX18ob3RoZXIpKQorICAgICAgICAgICAgX19yYWRkX18gPSBfX2FkZF9fCisKKyAgICAgICAgZGF0YSA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBEZWNpbWFsLCBGcmFjdGlvbiwgTXlGbG9hdCk6CisgICAgICAgICAgICBkID0gW2tpbmQoeCkgZm9yIHggaW4gZGF0YV0KKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHJlc3VsdCksIGtpbmQpCisKKworY2xhc3MgVGVzdFN1bShOdW1lcmljVGVzdENhc2UsIFVuaXZhcmlhdGVDb21tb25NaXhpbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0IGNhc2VzIGZvciBzdGF0aXN0aWNzLl9zdW0oKSBmdW5jdGlvbi4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5fc3VtCisKKyAgICBkZWYgdGVzdF9lbXB0eV9kYXRhKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIHRlc3QgZm9yIGVtcHR5IGRhdGEuCisgICAgICAgIGZvciBkYXRhIGluIChbXSwgKCksIGl0ZXIoW10pKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMjMpLCAyMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIuMyksIDIuMykKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFsxLCA1LCAzLCAtNCwgLTgsIDIwLCA0MiwgMV0pLCA2MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoWzQsIDIsIDMsIC04LCA3XSwgMTAwMCksIDEwMDgpCisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFswLjI1XSoyMCksIDUuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoWzAuMTI1LCAwLjI1LCAwLjUsIDAuNzVdLCAxLjUpLCAzLjEyNSkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFtGcmFjdGlvbigxLCAxMDAwKV0qNTAwKSwgRnJhY3Rpb24oMSwgMikpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCIwLjAwMSIpLCBEKCI1LjI0NiIpLCBEKCIxLjcwMiIpLCBEKCItMC4wMjUiKSwKKyAgICAgICAgICAgICAgICBEKCIzLjk3NCIpLCBEKCIyLjMyOCIpLCBEKCI0LjYxNyIpLCBEKCIyLjg0MyIpLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIERlY2ltYWwoIjIwLjY4NiIpKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV93aXRoX21hdGhfZnN1bShzZWxmKToKKyAgICAgICAgIyBDb21wYXJlIHdpdGggdGhlIG1hdGguZnN1bSBmdW5jdGlvbi4KKyAgICAgICAgIyBJZGVhbGx5IHdlIG91Z2h0IHRvIGdldCB0aGUgZXhhY3Qgc2FtZSByZXN1bHQsIGJ1dCBzb21ldGltZXMKKyAgICAgICAgIyB3ZSBkaWZmZXIgYnkgYSB2ZXJ5IHNsaWdodCBhbW91bnQgOi0oCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTEwMCwgMTAwMCkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBtYXRoLmZzdW0oZGF0YSksIHJlbD0yZS0xNikKKworICAgIGRlZiB0ZXN0X3N0YXJ0X2FyZ3VtZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgb3B0aW9uYWwgc3RhcnQgYXJndW1lbnQgd29ya3MgY29ycmVjdGx5LgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKDEsIDEwMDApIGZvciBfIGluIHJhbmdlKDEwMCldCisgICAgICAgIHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KzQyLCBzZWxmLmZ1bmMoZGF0YSwgNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQtMjMsIHNlbGYuZnVuYyhkYXRhLCAtMjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQrMWUyMCwgc2VsZi5mdW5jKGRhdGEsIDFlMjApKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nc19mYWlsKHNlbGYpOgorICAgICAgICAjIFN1bSBvZiBzdHJpbmdzIHNob3VsZCBmYWlsLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgWzEsIDIsIDNdLCAnOTk5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzLCAnOTk5J10pCisKKyAgICBkZWYgdGVzdF9ieXRlc19mYWlsKHNlbGYpOgorICAgICAgICAjIFN1bSBvZiBieXRlcyBzaG91bGQgZmFpbC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzXSwgYic5OTknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgWzEsIDIsIDMsIGInOTk5J10pCisKKyAgICBkZWYgdGVzdF9taXhlZF9zdW0oc2VsZik6CisgICAgICAgICMgTWl4ZWQgaW5wdXQgdHlwZXMgYXJlIG5vdCAoY3VycmVudGx5KSBhbGxvd2VkLgorICAgICAgICAjIENoZWNrIHRoYXQgbWl4ZWQgZGF0YSB0eXBlcyBmYWlsLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgWzEsIDIuMCwgRnJhY3Rpb24oMSwgMildKQorICAgICAgICAjIEFuZCBzbyBkb2VzIG1peGVkIHN0YXJ0IGFyZ3VtZW50LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgWzEsIDIuMF0sIERlY2ltYWwoMSkpCisKKworY2xhc3MgU3VtVG9ydHVyZVRlc3QoTnVtZXJpY1Rlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90b3J0dXJlKHNlbGYpOgorICAgICAgICAjIFRpbSBQZXRlcnMnIHRvcnR1cmUgdGVzdCBmb3Igc3VtLCBhbmQgdmFyaWFudHMgb2Ygc2FtZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9zdW0oWzEsIDFlMTAwLCAxLCAtMWUxMDBdKjEwMDAwKSwgMjAwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9zdW0oWzFlMTAwLCAxLCAxLCAtMWUxMDBdKjEwMDAwKSwgMjAwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbCgKKyAgICAgICAgICAgIHN0YXRpc3RpY3MuX3N1bShbMWUtMTAwLCAxLCAxZS0xMDAsIC0xXSoxMDAwMCksIDIuMGUtOTYsIHJlbD01ZS0xNgorICAgICAgICAgICAgKQorCisKK2NsYXNzIFN1bVNwZWNpYWxWYWx1ZXMoTnVtZXJpY1Rlc3RDYXNlKToKKyAgICAjIFRlc3QgdGhhdCBzdW0gd29ya3MgY29ycmVjdGx5IHdpdGggSUVFRS03NTQgc3BlY2lhbCB2YWx1ZXMuCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgIGZvciB0eXBlXyBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgbmFuID0gdHlwZV8oJ25hbicpCisgICAgICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIG5hbiwgMl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocmVzdWx0KSwgdHlwZV8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIGNoZWNrX2luZmluaXR5KHNlbGYsIHgsIGluZik6CisgICAgICAgICIiIkNoZWNrIHggaXMgYW4gaW5maW5pdHkgb2YgdGhlIHNhbWUgdHlwZSBhbmQgc2lnbiBhcyBpbmYuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKHgpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoeCksIHR5cGUoaW5mKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ID4gMCwgaW5mID4gMCkKKyAgICAgICAgYXNzZXJ0IHggPT0gaW5mCisKKyAgICBkZWYgZG9fdGVzdF9pbmYoc2VsZiwgaW5mKToKKyAgICAgICAgIyBBZGRpbmcgYSBzaW5nbGUgaW5maW5pdHkgZ2l2ZXMgaW5maW5pdHkuCisgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgMiwgaW5mLCAzXSkKKyAgICAgICAgc2VsZi5jaGVja19pbmZpbml0eShyZXN1bHQsIGluZikKKyAgICAgICAgIyBBZGRpbmcgdHdvIGluZmluaXRpZXMgb2YgdGhlIHNhbWUgc2lnbiBhbHNvIGdpdmVzIGluZmluaXR5LgorICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIDIsIGluZiwgMywgaW5mLCA0XSkKKyAgICAgICAgc2VsZi5jaGVja19pbmZpbml0eShyZXN1bHQsIGluZikKKworICAgIGRlZiB0ZXN0X2Zsb2F0X2luZihzZWxmKToKKyAgICAgICAgaW5mID0gZmxvYXQoJ2luZicpCisgICAgICAgIGZvciBzaWduIGluICgrMSwgLTEpOgorICAgICAgICAgICAgc2VsZi5kb190ZXN0X2luZihzaWduKmluZikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfaW5mKHNlbGYpOgorICAgICAgICBpbmYgPSBEZWNpbWFsKCdpbmYnKQorICAgICAgICBmb3Igc2lnbiBpbiAoKzEsIC0xKToKKyAgICAgICAgICAgIHNlbGYuZG9fdGVzdF9pbmYoc2lnbippbmYpCisKKyAgICBkZWYgdGVzdF9mbG9hdF9taXNtYXRjaGVkX2luZnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGFkZGluZyB0d28gaW5maW5pdGllcyBvZiBvcHBvc2l0ZSBzaWduIGdpdmVzIGEgTkFOLgorICAgICAgICBpbmYgPSBmbG9hdCgnaW5mJykKKyAgICAgICAgcmVzdWx0ID0gc3RhdGlzdGljcy5fc3VtKFsxLCAyLCBpbmYsIDMsIC1pbmYsIDRdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF9taXNtYXRjaGVkX2luZnNfdG9fbmFuKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIERlY2ltYWwgSU5GcyB3aXRoIG9wcG9zaXRlIHNpZ24gcmV0dXJucyBOQU4uCisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGRhdGEgPSBbMSwgMiwgaW5mLCAzLCAtaW5mLCA0XQorICAgICAgICB3aXRoIGRlY2ltYWwubG9jYWxjb250ZXh0KGRlY2ltYWwuRXh0ZW5kZWRDb250ZXh0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHN0YXRpc3RpY3MuX3N1bShkYXRhKSkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX21pc21hdGNoZWRfaW5mc190b19uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCBhZGRpbmcgRGVjaW1hbCBJTkZzIHdpdGggb3Bwb3NpdGUgc2lnbiByYWlzZXMgSW52YWxpZE9wZXJhdGlvbi4KKyAgICAgICAgaW5mID0gRGVjaW1hbCgnaW5mJykKKyAgICAgICAgZGF0YSA9IFsxLCAyLCBpbmYsIDMsIC1pbmYsIDRdCisgICAgICAgIHdpdGggZGVjaW1hbC5sb2NhbGNvbnRleHQoZGVjaW1hbC5CYXNpY0NvbnRleHQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uLCBzdGF0aXN0aWNzLl9zdW0sIGRhdGEpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX3NuYW5fcmFpc2VzKHNlbGYpOgorICAgICAgICAjIEFkZGluZyBzTkFOIHNob3VsZCByYWlzZSBJbnZhbGlkT3BlcmF0aW9uLgorICAgICAgICBzTkFOID0gRGVjaW1hbCgnc05BTicpCisgICAgICAgIGRhdGEgPSBbMSwgc05BTiwgMl0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uLCBzdGF0aXN0aWNzLl9zdW0sIGRhdGEpCisKKworIyA9PT0gVGVzdHMgZm9yIGF2ZXJhZ2VzID09PQorCitjbGFzcyBBdmVyYWdlTWl4aW4oVW5pdmFyaWF0ZUNvbW1vbk1peGluKToKKyAgICAjIE1peGluIGNsYXNzIGhvbGRpbmcgY29tbW9uIHRlc3RzIGZvciBhdmVyYWdlcy4KKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBBdmVyYWdlIG9mIGEgc2luZ2xlIHZhbHVlIGlzIHRoZSB2YWx1ZSBpdHNlbGYuCisgICAgICAgIGZvciB4IGluICgyMywgNDIuNSwgMS4zZTE1LCBGcmFjdGlvbigxNSwgMTkpLCBEZWNpbWFsKCcwLjI4JykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoW3hdKSwgeCkKKworICAgIGRlZiB0ZXN0X3JlcGVhdGVkX3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBUaGUgYXZlcmFnZSBvZiBhIHNpbmdsZSByZXBlYXRlZCB2YWx1ZSBpcyB0aGUgdmFsdWUgaXRzZWxmLgorICAgICAgICBmb3IgeCBpbiAoMy41LCAxNywgMi41ZTE1LCBGcmFjdGlvbig2MSwgNjcpLCBEZWNpbWFsKCc0Ljk3MTInKSk6CisgICAgICAgICAgICBmb3IgY291bnQgaW4gKDIsIDUsIDEwLCAyMCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IFt4XSpjb3VudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCB4KQorCisKK2NsYXNzIFRlc3RNZWFuKE51bWVyaWNUZXN0Q2FzZSwgQXZlcmFnZU1peGluLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVhbgorCisgICAgZGVmIHRlc3RfdG9ydHVyZV9wZXAoc2VsZik6CisgICAgICAgICMgIlRvcnR1cmUgVGVzdCIgZnJvbSBQRVAtNDUwLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMWUxMDAsIDEsIDMsIC0xZTEwMF0pLCAxKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbnRzLgorICAgICAgICBkYXRhID0gWzAsIDEsIDIsIDMsIDMsIDMsIDQsIDUsIDUsIDYsIDcsIDcsIDcsIDcsIDgsIDldCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0LjgxMjUpCisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggZmxvYXRzLgorICAgICAgICBkYXRhID0gWzE3LjI1LCAxOS43NSwgMjAuMCwgMjEuNSwgMjEuNzUsIDIzLjI1LCAyNS4xMjUsIDI3LjVdCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAyMi4wMTU2MjUpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbnRzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoIjEuNjM0IiksIEQoIjIuNTE3IiksIEQoIjMuOTEyIiksIEQoIjQuMDcyIiksIEQoIjUuODEzIildCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCIzLjU4OTYiKSkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgMiksIEYoMiwgMyksIEYoMywgNCksIEYoNCwgNSksIEYoNSwgNiksIEYoNiwgNyksIEYoNywgOCldCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDE0NzksIDE5NjApKQorCisgICAgZGVmIHRlc3RfaW5mKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGluZmluaXRpZXMuCisgICAgICAgIHJhdyA9IFsxLCAzLCA1LCA3LCA5XSAgIyBVc2Ugb25seSBpbnRzLCB0byBhdm9pZCBUeXBlRXJyb3IgbGF0ZXIuCisgICAgICAgIGZvciBraW5kIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBmb3Igc2lnbiBpbiAoMSwgLTEpOgorICAgICAgICAgICAgICAgIGluZiA9IGtpbmQoImluZiIpKnNpZ24KKyAgICAgICAgICAgICAgICBkYXRhID0gcmF3ICsgW2luZl0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2luZihyZXN1bHQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBpbmYpCisKKyAgICBkZWYgdGVzdF9taXNtYXRjaGVkX2luZnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggaW5maW5pdGllcyBvZiBvcHBvc2l0ZSBzaWduLgorICAgICAgICBkYXRhID0gWzIsIDQsIDYsIGZsb2F0KCdpbmYnKSwgMSwgMywgNSwgZmxvYXQoJy1pbmYnKV0KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggTkFOcy4KKyAgICAgICAgcmF3ID0gWzEsIDMsIDUsIDcsIDldICAjIFVzZSBvbmx5IGludHMsIHRvIGF2b2lkIFR5cGVFcnJvciBsYXRlci4KKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIGluZiA9IGtpbmQoIm5hbiIpCisgICAgICAgICAgICBkYXRhID0gcmF3ICsgW2luZl0KKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X2JpZ19kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIGEgbGFyZ2UgY29uc3RhbnQgdG8gZXZlcnkgZGF0YSBwb2ludC4KKyAgICAgICAgYyA9IDFlOQorICAgICAgICBkYXRhID0gWzMuNCwgNC41LCA0LjksIDYuNywgNi44LCA3LjIsIDguMCwgOC4xLCA5LjRdCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpICsgYworICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgIT0gYworICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoW3grYyBmb3IgeCBpbiBkYXRhXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZG91YmxlZF9kYXRhKHNlbGYpOgorICAgICAgICAjIE1lYW4gb2YgW2EsYixjLi4uel0gc2hvdWxkIGJlIHNhbWUgYXMgZm9yIFthLGEsYixiLGMsYy4uLnosel0uCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTMsIDUpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBhY3R1YWwgPSBzZWxmLmZ1bmMoZGF0YSoyKQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yZWdyZXNzaW9uXzIwNTYxKHNlbGYpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaXNzdWUgMjA1NjEuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDU2MQorICAgICAgICBkID0gRGVjaW1hbCgnMWU0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLm1lYW4oW2RdKSwgZCkKKworCitjbGFzcyBUZXN0TWVkaWFuKE51bWVyaWNUZXN0Q2FzZSwgQXZlcmFnZU1peGluKToKKyAgICAjIENvbW1vbiB0ZXN0cyBmb3IgbWVkaWFuIGFuZCBhbGwgbWVkaWFuLiogZnVuY3Rpb25zLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW4KKworICAgIGRlZiBwcmVwYXJlX2RhdGEoc2VsZik6CisgICAgICAgICIiIk92ZXJsb2FkIG1ldGhvZCBmcm9tIFVuaXZhcmlhdGVDb21tb25NaXhpbi4iIiIKKyAgICAgICAgZGF0YSA9IHN1cGVyKCkucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgaWYgbGVuKGRhdGEpJTIgIT0gMToKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKDIpCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgdGVzdF9ldmVuX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd2l0aCBhbiBldmVuIG51bWJlciBvZiBpbnQgZGF0YSBwb2ludHMuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgNCwgNSwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMuNSkKKworICAgIGRlZiB0ZXN0X29kZF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdpdGggYW4gb2RkIG51bWJlciBvZiBpbnQgZGF0YSBwb2ludHMuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgNCwgNSwgNiwgOV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQpCisKKyAgICBkZWYgdGVzdF9vZGRfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdvcmtzIHdpdGggYW4gb2RkIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNyksIEYoMiwgNyksIEYoMywgNyksIEYoNCwgNyksIEYoNSwgNyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDMsIDcpKQorCisgICAgZGVmIHRlc3RfZXZlbl9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNyksIEYoMiwgNyksIEYoMywgNyksIEYoNCwgNyksIEYoNSwgNyksIEYoNiwgNyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDEsIDIpKQorCisgICAgZGVmIHRlc3Rfb2RkX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdvcmtzIHdpdGggYW4gb2RkIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCcyLjUnKSwgRCgnMy4xJyksIEQoJzQuMicpLCBEKCc1LjcnKSwgRCgnNS44JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCc0LjInKSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCcxLjInKSwgRCgnMi41JyksIEQoJzMuMScpLCBEKCc0LjInKSwgRCgnNS43JyksIEQoJzUuOCcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgnMy42NScpKQorCisKK2NsYXNzIFRlc3RNZWRpYW5EYXRhVHlwZShOdW1lcmljVGVzdENhc2UsIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdCBjb25zZXJ2YXRpb24gb2YgZGF0YSBlbGVtZW50IHR5cGUgZm9yIG1lZGlhbi4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuCisKKyAgICBkZWYgcHJlcGFyZV9kYXRhKHNlbGYpOgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxNSkpCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHdoaWxlIGRhdGEgPT0gc29ydGVkKGRhdGEpOgorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworCitjbGFzcyBUZXN0TWVkaWFuTG93KFRlc3RNZWRpYW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW5fbG93CisKKyAgICBkZWYgdGVzdF9ldmVuX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fbG93IHdpdGggYW4gZXZlbiBudW1iZXIgb2YgaW50cy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMykKKworICAgIGRlZiB0ZXN0X2V2ZW5fZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2xvdyB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA3KSwgRigyLCA3KSwgRigzLCA3KSwgRig0LCA3KSwgRig1LCA3KSwgRig2LCA3KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoMywgNykpCisKKyAgICBkZWYgdGVzdF9ldmVuX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2xvdyB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzEuMScpLCBEKCcyLjInKSwgRCgnMy4zJyksIEQoJzQuNCcpLCBEKCc1LjUnKSwgRCgnNi42JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCczLjMnKSkKKworCitjbGFzcyBUZXN0TWVkaWFuSGlnaChUZXN0TWVkaWFuLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuX2hpZ2gKKworICAgIGRlZiB0ZXN0X2V2ZW5faW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9oaWdoIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgaW50cy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNCkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2hpZ2ggd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNyksIEYoMiwgNyksIEYoMywgNyksIEYoNCwgNyksIEYoNSwgNyksIEYoNiwgNyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDQsIDcpKQorCisgICAgZGVmIHRlc3RfZXZlbl9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9oaWdoIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnMS4xJyksIEQoJzIuMicpLCBEKCczLjMnKSwgRCgnNC40JyksIEQoJzUuNScpLCBEKCc2LjYnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoJzQuNCcpKQorCisKK2NsYXNzIFRlc3RNZWRpYW5Hcm91cGVkKFRlc3RNZWRpYW4pOgorICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZC4KKyAgICAjIERvZXNuJ3QgY29uc2VydmUgZGF0YSBlbGVtZW50IHR5cGVzLCBzbyBkb24ndCB1c2UgVGVzdE1lZGlhblR5cGUuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbl9ncm91cGVkCisKKyAgICBkZWYgdGVzdF9vZGRfbnVtYmVyX3JlcGVhdGVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuLmdyb3VwZWQgd2l0aCByZXBlYXRlZCBtZWRpYW4gdmFsdWVzLgorICAgICAgICBkYXRhID0gWzEyLCAxMywgMTQsIDE0LCAxNCwgMTUsIDE1XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMTQpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFsxMiwgMTMsIDE0LCAxNCwgMTQsIDE0LCAxNV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDEzLjg3NSkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzUsIDEwLCAxMCwgMTUsIDIwLCAyMCwgMjAsIDIwLCAyNSwgMjUsIDMwXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCA1KSwgMTkuMzc1KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMTYsIDE4LCAxOCwgMTgsIDE4LCAyMCwgMjAsIDIwLCAyMiwgMjIsIDIyLCAyNCwgMjQsIDI2LCAyOF0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMiksIDIwLjY2NjY2NjY3LCB0b2w9MWUtOCkKKworICAgIGRlZiB0ZXN0X2V2ZW5fbnVtYmVyX3JlcGVhdGVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuLmdyb3VwZWQgd2l0aCByZXBlYXRlZCBtZWRpYW4gdmFsdWVzLgorICAgICAgICBkYXRhID0gWzUsIDEwLCAxMCwgMTUsIDIwLCAyMCwgMjAsIDI1LCAyNSwgMzBdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDUpLCAxOS4xNjY2NjY2NywgdG9sPTFlLTgpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFsyLCAzLCA0LCA0LCA0LCA1XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMy44MzMzMzMzMywgdG9sPTFlLTgpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFsyLCAzLCAzLCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA2LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNC41KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMywgNCwgNCwgNCwgNSwgNSwgNSwgNSwgNiwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQuNzUpCisKKyAgICBkZWYgdGVzdF9yZXBlYXRlZF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgbWV0aG9kIGZyb20gQXZlcmFnZU1peGluLgorICAgICAgICAjIFlldCBhZ2FpbiwgZmFpbHVyZSBvZiBtZWRpYW5fZ3JvdXBlZCB0byBjb25zZXJ2ZSB0aGUgZGF0YSB0eXBlCisgICAgICAgICMgY2F1c2VzIG1lIGhlYWRhY2hlcyA6LSgKKyAgICAgICAgZm9yIHggaW4gKDUuMywgNjgsIDQuM2UxNywgRnJhY3Rpb24oMjksIDEwMSksIERlY2ltYWwoJzMyLjk3MTQnKSk6CisgICAgICAgICAgICBmb3IgY291bnQgaW4gKDIsIDUsIDEwLCAyMCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IFt4XSpjb3VudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBmbG9hdCh4KSkKKworICAgIGRlZiB0ZXN0X29kZF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3b3JrcyB3aXRoIGFuIG9kZCBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDUsIDQpLCBGKDksIDQpLCBGKDEzLCA0KSwgRigxMywgNCksIEYoMTcsIDQpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMy4wKQorCisgICAgZGVmIHRlc3RfZXZlbl9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRig1LCA0KSwgRig5LCA0KSwgRigxMywgNCksIEYoMTMsIDQpLCBGKDE3LCA0KSwgRigxNywgNCldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzLjI1KQorCisgICAgZGVmIHRlc3Rfb2RkX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd29ya3Mgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzUuNScpLCBEKCc2LjUnKSwgRCgnNi41JyksIEQoJzcuNScpLCBEKCc4LjUnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDYuNzUpCisKKyAgICBkZWYgdGVzdF9ldmVuX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCc1LjUnKSwgRCgnNS41JyksIEQoJzYuNScpLCBEKCc2LjUnKSwgRCgnNy41JyksIEQoJzguNScpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNi41KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbRCgnNS41JyksIEQoJzUuNScpLCBEKCc2LjUnKSwgRCgnNy41JyksIEQoJzcuNScpLCBEKCc4LjUnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDcuMCkKKworICAgIGRlZiB0ZXN0X2ludGVydmFsKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd2l0aCBpbnRlcnZhbCBhcmd1bWVudC4KKyAgICAgICAgZGF0YSA9IFsyLjI1LCAyLjUsIDIuNSwgMi43NSwgMi43NSwgMy4wLCAzLjAsIDMuMjUsIDMuNSwgMy43NV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMC4yNSksIDIuODc1KQorICAgICAgICBkYXRhID0gWzIuMjUsIDIuNSwgMi41LCAyLjc1LCAyLjc1LCAyLjc1LCAzLjAsIDMuMCwgMy4yNSwgMy41LCAzLjc1XQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAwLjI1KSwgMi44MzMzMzMzMywgdG9sPTFlLTgpCisgICAgICAgIGRhdGEgPSBbMjIwLCAyMjAsIDI0MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyODAsIDI4MCwgMzAwLCAzMjAsIDM0MF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMjApLCAyNjUuMCkKKworCitjbGFzcyBUZXN0TW9kZShOdW1lcmljVGVzdENhc2UsIEF2ZXJhZ2VNaXhpbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0IGNhc2VzIGZvciB0aGUgZGlzY3JldGUgdmVyc2lvbiBvZiBtb2RlLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tb2RlCisKKyAgICBkZWYgcHJlcGFyZV9kYXRhKHNlbGYpOgorICAgICAgICAiIiJPdmVybG9hZCBtZXRob2QgZnJvbSBVbml2YXJpYXRlQ29tbW9uTWl4aW4uIiIiCisgICAgICAgICMgTWFrZSBzdXJlIHRlc3QgZGF0YSBoYXMgZXhhY3RseSBvbmUgbW9kZS4KKyAgICAgICAgcmV0dXJuIFsxLCAxLCAxLCAxLCAzLCA0LCA3LCA5LCAwLCA4LCAyXQorCisgICAgZGVmIHRlc3RfcmFuZ2VfZGF0YShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSB0ZXN0IGZyb20gVW5pdmFyaWF0ZUNvbW1vbk1peGluLgorICAgICAgICBkYXRhID0gcmFuZ2UoMjAsIDUwLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBkYXRhKQorCisgICAgZGVmIHRlc3Rfbm9taW5hbF9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgbW9kZSB3aXRoIG5vbWluYWwgZGF0YS4KKyAgICAgICAgZGF0YSA9ICdhYmNiZGInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAnYicpCisgICAgICAgIGRhdGEgPSAnZmUgZmkgZm8gZnVtIGZpIGZpJy5zcGxpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAnZmknKQorCisgICAgZGVmIHRlc3RfZGlzY3JldGVfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IG1vZGUgd2l0aCBkaXNjcmV0ZSBudW1lcmljIGRhdGEuCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgZCA9IGRhdGEgKyBbaV0KKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkKSwgaSkKKworICAgIGRlZiB0ZXN0X2JpbW9kYWxfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IG1vZGUgd2l0aCBiaW1vZGFsIGRhdGEuCisgICAgICAgIGRhdGEgPSBbMSwgMSwgMiwgMiwgMiwgMiwgMywgNCwgNSwgNiwgNiwgNiwgNiwgNywgOCwgOSwgOV0KKyAgICAgICAgYXNzZXJ0IGRhdGEuY291bnQoMikgPT0gZGF0YS5jb3VudCg2KSA9PSA0CisgICAgICAgICMgQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZGF0YSkKKworICAgIGRlZiB0ZXN0X3VuaXF1ZV9kYXRhX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgVGVzdCBtb2RlIGV4Y2VwdGlvbiB3aGVuIGRhdGEgcG9pbnRzIGFyZSBhbGwgdW5pcXVlLgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9ub25lX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IG1vZGUgcmFpc2VzIFR5cGVFcnJvciBpZiBnaXZlbiBOb25lIGFzIGRhdGEuCisKKyAgICAgICAgIyBUaGlzIHRlc3QgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIG1vZGUgdXNlcworICAgICAgICAjIGNvbGxlY3Rpb25zLkNvdW50ZXIsIHdoaWNoIGFjY2VwdHMgTm9uZSBhbmQgcmV0dXJucyBhbiBlbXB0eSBkaWN0LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NvdW50ZXJfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYSBDb3VudGVyIGlzIHRyZWF0ZWQgbGlrZSBhbnkgb3RoZXIgaXRlcmFibGUuCisgICAgICAgIGRhdGEgPSBjb2xsZWN0aW9ucy5Db3VudGVyKFsxLCAxLCAxLCAyXSkKKyAgICAgICAgIyBTaW5jZSB0aGUga2V5cyBvZiB0aGUgY291bnRlciBhcmUgdHJlYXRlZCBhcyBkYXRhIHBvaW50cywgbm90IHRoZQorICAgICAgICAjIGNvdW50cywgdGhpcyBzaG91bGQgcmFpc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGRhdGEpCisKKworCisjID09PSBUZXN0cyBmb3IgdmFyaWFuY2VzIGFuZCBzdGFuZGFyZCBkZXZpYXRpb25zID09PQorCitjbGFzcyBWYXJpYW5jZVN0ZGV2TWl4aW4oVW5pdmFyaWF0ZUNvbW1vbk1peGluKToKKyAgICAjIE1peGluIGNsYXNzIGhvbGRpbmcgY29tbW9uIHRlc3RzIGZvciB2YXJpYW5jZSBhbmQgc3RkIGRldi4KKworICAgICMgU3ViY2xhc3NlcyBzaG91bGQgaW5oZXJpdCBmcm9tIHRoaXMgYmVmb3JlIE51bWVyaWNUZXN0Q2xhc3MsIGluIG9yZGVyCisgICAgIyB0byBzZWUgdGhlIHJlbCBhdHRyaWJ1dGUgYmVsb3cuIFNlZSB0ZXN0U2hpZnREYXRhIGZvciBhbiBleHBsYW5hdGlvbi4KKworICAgIHJlbCA9IDFlLTEyCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgRGV2aWF0aW9uIG9mIGEgc2luZ2xlIHZhbHVlIGlzIHplcm8uCisgICAgICAgIGZvciB4IGluICgxMSwgMTkuOCwgNC42ZTE0LCBGcmFjdGlvbigyMSwgMzQpLCBEZWNpbWFsKCc4LjM5MicpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFt4XSksIDApCisKKyAgICBkZWYgdGVzdF9yZXBlYXRlZF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgVGhlIGRldmlhdGlvbiBvZiBhIHNpbmdsZSByZXBlYXRlZCB2YWx1ZSBpcyB6ZXJvLgorICAgICAgICBmb3IgeCBpbiAoNy4yLCA0OSwgOC4xZTE1LCBGcmFjdGlvbigzLCA3KSwgRGVjaW1hbCgnNjIuNDgwMicpKToKKyAgICAgICAgICAgIGZvciBjb3VudCBpbiAoMiwgMywgNSwgMTUpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBbeF0qY291bnQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMCkKKworICAgIGRlZiB0ZXN0X2RvbWFpbl9lcnJvcl9yZWdyZXNzaW9uKHNlbGYpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBkb21haW4gZXJyb3IgZXhjZXB0aW9uLgorICAgICAgICAjIChUaGFua3MgdG8gR2VyZW15IENvbmRyYS4pCisgICAgICAgIGRhdGEgPSBbMC4xMjM0NTY3ODkwMTIzNDVdKjEwMDAwCisgICAgICAgICMgQWxsIHRoZSBpdGVtcyBhcmUgaWRlbnRpY2FsLCBzbyB2YXJpYW5jZSBzaG91bGQgYmUgZXhhY3RseSB6ZXJvLgorICAgICAgICAjIFdlIGFsbG93IHNvbWUgc21hbGwgcm91bmQtb2ZmIGVycm9yLCBidXQgbm90IG11Y2guCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHJlc3VsdCwgMC4wLCB0b2w9NWUtMTcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHJlc3VsdCwgMCkgICMgQSBuZWdhdGl2ZSByZXN1bHQgbXVzdCBmYWlsLgorCisgICAgZGVmIHRlc3Rfc2hpZnRfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgc2hpZnRpbmcgdGhlIGRhdGEgYnkgYSBjb25zdGFudCBhbW91bnQgZG9lcyBub3QgYWZmZWN0CisgICAgICAgICMgdGhlIHZhcmlhbmNlIG9yIHN0ZGV2LiBPciBhdCBsZWFzdCBub3QgbXVjaC4KKworICAgICAgICAjIER1ZSB0byByb3VuZGluZywgdGhpcyB0ZXN0IHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGlkZWFsLiBXZSBhbGxvdworICAgICAgICAjIHNvbWUgdG9sZXJhbmNlIGF3YXkgZnJvbSAibm8gY2hhbmdlIGF0IGFsbCIgYnkgc2V0dGluZyB0b2wgYW5kL29yIHJlbAorICAgICAgICAjIGF0dHJpYnV0ZXMuIFN1YmNsYXNzZXMgbWF5IHNldCB0aWdodGVyIG9yIGxvb3NlciBlcnJvciB0b2xlcmFuY2VzLgorICAgICAgICByYXcgPSBbMS4wMywgMS4yNywgMS45NCwgMi4wNCwgMi41OCwgMy4xNCwgNC43NSwgNC45OCwgNS40MiwgNi43OF0KKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMocmF3KQorICAgICAgICAjIERvbid0IHNldCBzaGlmdCB0b28gaGlnaCwgdGhlIGJpZ2dlciBpdCBpcywgdGhlIG1vcmUgcm91bmRpbmcgZXJyb3IuCisgICAgICAgIHNoaWZ0ID0gMWU1CisgICAgICAgIGRhdGEgPSBbeCArIHNoaWZ0IGZvciB4IGluIHJhd10KKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfc2hpZnRfZGF0YV9leGFjdChzZWxmKToKKyAgICAgICAgIyBMaWtlIHRlc3Rfc2hpZnRfZGF0YSwgYnV0IHJlc3VsdCBpcyBhbHdheXMgZXhhY3QuCisgICAgICAgIHJhdyA9IFsxLCAzLCAzLCA0LCA1LCA3LCA5LCAxMCwgMTEsIDE2XQorICAgICAgICBhc3NlcnQgYWxsKHg9PWludCh4KSBmb3IgeCBpbiByYXcpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKHJhdykKKyAgICAgICAgc2hpZnQgPSAxMCoqOQorICAgICAgICBkYXRhID0gW3ggKyBzaGlmdCBmb3IgeCBpbiByYXddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2l0ZXJfbGlzdF9zYW1lKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBpdGVyIGRhdGEgYW5kIGxpc3QgZGF0YSBnaXZlIHRoZSBzYW1lIHJlc3VsdC4KKworICAgICAgICAjIFRoaXMgaXMgYW4gZXhwbGljaXQgdGVzdCB0aGF0IGl0ZXJhdG9ycyBhbmQgbGlzdHMgYXJlIHRyZWF0ZWQgdGhlCisgICAgICAgICMgc2FtZTsganVzdGlmaWNhdGlvbiBmb3IgdGhpcyB0ZXN0IG92ZXIgYW5kIGFib3ZlIHRoZSBzaW1pbGFyIHRlc3QKKyAgICAgICAgIyBpbiBVbml2YXJpYXRlQ29tbW9uTWl4aW4gaXMgdGhhdCBhbiBlYXJsaWVyIGRlc2lnbiBoYWQgdmFyaWFuY2UgYW5kCisgICAgICAgICMgZnJpZW5kcyBzd2FwIGJldHdlZW4gb25lLSBhbmQgdHdvLXBhc3MgYWxnb3JpdGhtcywgd2hpY2ggd291bGQKKyAgICAgICAgIyBzb21ldGltZXMgZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cy4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMywgOCkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGl0ZXIoZGF0YSkpLCBleHBlY3RlZCkKKworCitjbGFzcyBUZXN0UFZhcmlhbmNlKFZhcmlhbmNlU3RkZXZNaXhpbiwgTnVtZXJpY1Rlc3RDYXNlLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3RzIGZvciBwb3B1bGF0aW9uIHZhcmlhbmNlLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5wdmFyaWFuY2UKKworICAgIGRlZiB0ZXN0X2V4YWN0X3VuaWZvcm0oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgdmFyaWFuY2UgYWdhaW5zdCBhbiBleGFjdCByZXN1bHQgZm9yIHVuaWZvcm0gZGF0YS4KKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTAwMDApKQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBleHBlY3RlZCA9ICgxMDAwMCoqMiAtIDEpLzEyICAjIEV4YWN0IHZhbHVlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgcG9wdWxhdGlvbiB2YXJpYW5jZSB3aXRoIGludCBkYXRhLgorICAgICAgICBkYXRhID0gWzQsIDcsIDEzLCAxNl0KKyAgICAgICAgZXhhY3QgPSAyMi41CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleGFjdCkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHBvcHVsYXRpb24gdmFyaWFuY2Ugd2l0aCBGcmFjdGlvbiBkYXRhLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDQpLCBGKDEsIDQpLCBGKDMsIDQpLCBGKDcsIDQpXQorICAgICAgICBleGFjdCA9IEYoMywgOCkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleGFjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgRnJhY3Rpb24pCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHBvcHVsYXRpb24gdmFyaWFuY2Ugd2l0aCBEZWNpbWFsIGRhdGEuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgiMTIuMSIpLCBEKCIxMi4yIiksIEQoIjEyLjUiKSwgRCgiMTIuOSIpXQorICAgICAgICBleGFjdCA9IEQoJzAuMDk2ODc1JykKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleGFjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgRGVjaW1hbCkKKworCitjbGFzcyBUZXN0VmFyaWFuY2UoVmFyaWFuY2VTdGRldk1peGluLCBOdW1lcmljVGVzdENhc2UsIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdHMgZm9yIHNhbXBsZSB2YXJpYW5jZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MudmFyaWFuY2UKKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSBtZXRob2QgZnJvbSBWYXJpYW5jZVN0ZGV2TWl4aW4uCisgICAgICAgIGZvciB4IGluICgzNSwgMjQuNywgOC4yZTE1LCBGcmFjdGlvbigxOSwgMzApLCBEZWNpbWFsKCc0LjIwODQnKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBbeF0pCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2FtcGxlIHZhcmlhbmNlIHdpdGggaW50IGRhdGEuCisgICAgICAgIGRhdGEgPSBbNCwgNywgMTMsIDE2XQorICAgICAgICBleGFjdCA9IDMwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleGFjdCkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHNhbXBsZSB2YXJpYW5jZSB3aXRoIEZyYWN0aW9uIGRhdGEuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNCksIEYoMSwgNCksIEYoMywgNCksIEYoNywgNCldCisgICAgICAgIGV4YWN0ID0gRigxLCAyKQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4YWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBGcmFjdGlvbikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2FtcGxlIHZhcmlhbmNlIHdpdGggRGVjaW1hbCBkYXRhLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoMiksIEQoMiksIEQoNyksIEQoOSldCisgICAgICAgIGV4YWN0ID0gNCpEKCc5LjUnKS9EKDMpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhhY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIERlY2ltYWwpCisKKworY2xhc3MgVGVzdFBTdGRldihWYXJpYW5jZVN0ZGV2TWl4aW4sIE51bWVyaWNUZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBmb3IgcG9wdWxhdGlvbiBzdGFuZGFyZCBkZXZpYXRpb24uCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLnBzdGRldgorCisgICAgZGVmIHRlc3RfY29tcGFyZV90b192YXJpYW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgc3RkZXYgaXMsIGluIGZhY3QsIHRoZSBzcXVhcmUgcm9vdCBvZiB2YXJpYW5jZS4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMTcsIDI0KSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZXhwZWN0ZWQgPSBtYXRoLnNxcnQoc3RhdGlzdGljcy5wdmFyaWFuY2UoZGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworCitjbGFzcyBUZXN0U3RkZXYoVmFyaWFuY2VTdGRldk1peGluLCBOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdHMgZm9yIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24uCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLnN0ZGV2CisKKyAgICBkZWYgdGVzdF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgbWV0aG9kIGZyb20gVmFyaWFuY2VTdGRldk1peGluLgorICAgICAgICBmb3IgeCBpbiAoODEsIDIwMy43NCwgMy45ZTE0LCBGcmFjdGlvbig1LCAyMSksIERlY2ltYWwoJzM1LjcxOScpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIFt4XSkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfdG9fdmFyaWFuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHN0ZGV2IGlzLCBpbiBmYWN0LCB0aGUgc3F1YXJlIHJvb3Qgb2YgdmFyaWFuY2UuCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTIsIDkpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IG1hdGguc3FydChzdGF0aXN0aWNzLnZhcmlhbmNlKGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKworIyA9PT0gUnVuIHRlc3RzID09PQorCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBpZ25vcmUpOgorICAgICIiIlVzZWQgZm9yIGRvY3Rlc3QvdW5pdHRlc3QgaW50ZWdyYXRpb24uIiIiCisgICAgdGVzdHMuYWRkVGVzdHMoZG9jdGVzdC5Eb2NUZXN0U3VpdGUoKSkKKyAgICByZXR1cm4gdGVzdHMKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKaW5kZXggNGYzOWNjNy4uNzcyY2QwNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CkBAIC0xODIsMTUgKzE4MiwxNSBAQAogICAgIGEgZGF0ZSBiZWZvcmUgMTkwMCBpcyBwYXNzZWQgd2l0aCBhIGZvcm1hdCBzdHJpbmcgY29udGFpbmluZyAiJXkiCiAgICAgIiIiCiAKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIk9ubHkgYXBwbGllcyB0byBXaW5kb3dzIikKLSAgICBkZWYgdGVzdF95X2JlZm9yZV8xOTAwX3dpbihzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDE4OTksIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIkRvZXNuJ3QgYXBwbHkgb24gV2luZG93cyIpCi0gICAgZGVmIHRlc3RfeV9iZWZvcmVfMTkwMF9ub253aW4oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIleSIsICgxODk5LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwKSksICI5OSIpCisgICAgZGVmIHRlc3RfeV9iZWZvcmVfMTkwMChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTM2NzQsICMxOTYzNAorICAgICAgICB0ID0gKDE4OTksIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApCisgICAgICAgIGlmIChzeXMucGxhdGZvcm0gPT0gIndpbjMyIgorICAgICAgICBvciBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgoImFpeCIsICJzdW5vcyIsICJzb2xhcmlzIikpKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgdGltZS5zdHJmdGltZSgiJXkiLCB0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLnN0cmZ0aW1lKCIleSIsIHQpLCAiOTkiKQogCiAgICAgZGVmIHRlc3RfeV8xOTAwKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKApAQCAtMjAwLDggKzIwMCw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIleSIsICgyMDEzLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwKSksICIxMyIpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChTdHJmdGltZVRlc3QsIFkxOTAwVGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RydG9kLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkKaW5kZXggYzU5NzlmYy4uNDFiNmU1ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkKQEAgLTI0OCw3ICsyNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAiZXhwZWN0ZWQgVmFsdWVFcnJvciIKIAotICAgIEB0ZXN0LnN1cHBvcnQuYmlnbWVtdGVzdChzaXplPXRlc3Quc3VwcG9ydC5fMkcrMTAsIG1lbXVzZT00LCBkcnlfcnVuPUZhbHNlKQorICAgIEB0ZXN0LnN1cHBvcnQuYmlnbWVtdGVzdChzaXplPXRlc3Quc3VwcG9ydC5fMkcrMTAsIG1lbXVzZT0zLCBkcnlfcnVuPUZhbHNlKQogICAgIGRlZiB0ZXN0X292ZXJzaXplZF9kaWdpdF9zdHJpbmdzKHNlbGYsIG1heHNpemUpOgogICAgICAgICAjIElucHV0IHN0cmluZyB3aG9zZSBsZW5ndGggZG9lc24ndCBmaXQgaW4gYW4gSU5ULgogICAgICAgICBzID0gIjEuIiArICIxIiAqIG1heHNpemUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkKaW5kZXggNTBjYWUwNS4uMDEwN2VlYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkKQEAgLTEsNCArMSw2IEBACitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBhYmMKIGltcG9ydCBhcnJheQoraW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzeXMKQEAgLTYsNyArOCw2IEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogSVNCSUdFTkRJQU4gPSBzeXMuYnl0ZW9yZGVyID09ICJiaWciCi1JUzMyQklUID0gc3lzLm1heHNpemUgPT0gMHg3ZmZmZmZmZgogCiBpbnRlZ2VyX2NvZGVzID0gJ2InLCAnQicsICdoJywgJ0gnLCAnaScsICdJJywgJ2wnLCAnTCcsICdxJywgJ1EnLCAnbicsICdOJwogYnl0ZW9yZGVycyA9ICcnLCAnQCcsICc9JywgJzwnLCAnPicsICchJwpAQCAtNDg5LDcgKzQ5MCw3IEBACiAgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKICAgICAgICAgY2xhc3MgRXhwbG9kaW5nQm9vbChvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fYm9vbF9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAgICAgICAgIGZvciBwcmVmaXggaW4gdHVwbGUoIjw+IT0iKSsoJycsKToKICAgICAgICAgICAgIGZhbHNlID0gKCksIFtdLCBbXSwgJycsIDAKICAgICAgICAgICAgIHRydWUgPSBbMV0sICd0ZXN0JywgNSwgLTEsIDB4ZmZmZmZmZmYrMSwgMHhmZmZmZmZmZi8yCkBAIC01MjAsMTAgKzUyMSwxMCBAQAogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2socHJlZml4ICsgJz8nLCBFeHBsb2RpbmdCb29sKCkpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBJT0Vycm9yOiBzdHJ1Y3QucGFjayglciwgIgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgT1NFcnJvcjogc3RydWN0LnBhY2soJXIsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGxvZGluZ0Jvb2woKSkiICUgKHByZWZpeCArICc/JykpCiAKICAgICAgICAgZm9yIGMgaW4gW2InXHgwMScsIGInXHg3ZicsIGInXHhmZicsIGInXHgwZicsIGInXHhmMCddOgpAQCAtNTM2LDEwICs1MzcsNiBAQAogICAgICAgICBodWdlY291bnQyID0gJ3t9Ynt9SCcuZm9ybWF0KHN5cy5tYXhzaXplLy8yLCBzeXMubWF4c2l6ZS8vMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QuY2FsY3NpemUsIGh1Z2Vjb3VudDIpCiAKLSAgICBpZiBJUzMyQklUOgotICAgICAgICBkZWYgdGVzdF9jcmFzaGVyKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTWVtb3J5RXJyb3IsIHN0cnVjdC5wYWNrLCAiMzU3OTEzOTQxYiIsICJhIikKLQogICAgIGRlZiB0ZXN0X3RyYWlsaW5nX2NvdW50ZXIoc2VsZik6CiAgICAgICAgIHN0b3JlID0gYXJyYXkuYXJyYXkoJ2InLCBiJyAnKjEwMCkKIApAQCAtNTc2LDcgKzU3Myw3IEBACiAgICAgICAgICMgVGhlIHNpemUgb2YgJ1B5U3RydWN0T2JqZWN0JwogICAgICAgICB0b3RhbHNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplKCcybjNQJykKICAgICAgICAgIyBUaGUgc2l6ZSB0YWtlbiB1cCBieSB0aGUgJ2Zvcm1hdGNvZGUnIGR5bmFtaWMgYXJyYXkKLSAgICAgICAgdG90YWxzaXplICs9IHN0cnVjdC5jYWxjc2l6ZSgnUDJuMFAnKSAqIChudW1iZXJfb2ZfY29kZXMgKyAxKQorICAgICAgICB0b3RhbHNpemUgKz0gc3RydWN0LmNhbGNzaXplKCdQM24wUCcpICogKG51bWJlcl9vZl9jb2RlcyArIDEpCiAgICAgICAgIHN1cHBvcnQuY2hlY2tfc2l6ZW9mKHNlbGYsIHN0cnVjdC5TdHJ1Y3QoZm9ybWF0X3N0ciksIHRvdGFsc2l6ZSkKIAogICAgIEBzdXBwb3J0LmNweXRob25fb25seQpAQCAtNTg3LDE0ICs1ODQsODQgQEAKICAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJ0InICogMTIzNCwgMTIzNCkKICAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJ2ZkJywgMikKICAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJ3h4eHh4eHh4eHh4eHh4JywgMCkKLSAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzEwMEgnLCAxMDApCisgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcxMDBIJywgMSkKICAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzE4N3MnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMjBwJywgMSkKICAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzBzJywgMSkKICAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzBjJywgMCkKIAorCitjbGFzcyBVbnBhY2tJdGVyYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciBpdGVyYXRpdmUgdW5wYWNraW5nIChzdHJ1Y3QuU3RydWN0Lml0ZXJfdW5wYWNrKS4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdChzZWxmKToKKyAgICAgICAgZGVmIF9jaGVja19pdGVyYXRvcihpdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXQsIGFiYy5JdGVyYXRvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgYWJjLkl0ZXJhYmxlKQorICAgICAgICBzID0gc3RydWN0LlN0cnVjdCgnPmliY3AnKQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2soYiIiKQorICAgICAgICBfY2hlY2tfaXRlcmF0b3IoaXQpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhiIjEyMzQ1NjciKQorICAgICAgICBfY2hlY2tfaXRlcmF0b3IoaXQpCisgICAgICAgICMgV3JvbmcgYnl0ZXMgbGVuZ3RoCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yKToKKyAgICAgICAgICAgIHMuaXRlcl91bnBhY2soYiIxMjM0NTYiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvcik6CisgICAgICAgICAgICBzLml0ZXJfdW5wYWNrKGIiMTIzNDU2NzgiKQorICAgICAgICAjIFplcm8tbGVuZ3RoIHN0cnVjdAorICAgICAgICBzID0gc3RydWN0LlN0cnVjdCgnPicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yKToKKyAgICAgICAgICAgIHMuaXRlcl91bnBhY2soYiIiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvcik6CisgICAgICAgICAgICBzLml0ZXJfdW5wYWNrKGIiMTIiKQorCisgICAgZGVmIHRlc3RfaXRlcmF0ZShzZWxmKToKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz5JQicpCisgICAgICAgIGIgPSBieXRlcyhyYW5nZSgxLCAxNikpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwMTAyMDMwNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDA2MDcwODA5LCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDBiMGMwZDBlLCAxNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKworICAgIGRlZiB0ZXN0X2FyYml0cmFyeV9idWZmZXIoc2VsZik6CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+SUInKQorICAgICAgICBiID0gYnl0ZXMocmFuZ2UoMSwgMTEpKQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2sobWVtb3J5dmlldyhiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDEwMjAzMDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwNjA3MDgwOSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisKKyAgICBkZWYgdGVzdF9sZW5ndGhfaGludChzZWxmKToKKyAgICAgICAgbGggPSBvcGVyYXRvci5sZW5ndGhfaGludAorICAgICAgICBzID0gc3RydWN0LlN0cnVjdCgnPklCJykKKyAgICAgICAgYiA9IGJ5dGVzKHJhbmdlKDEsIDE2KSkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAzKQorICAgICAgICBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMikKKyAgICAgICAgbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDEpCisgICAgICAgIG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDApCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfZnVuYyhzZWxmKToKKyAgICAgICAgIyBTYW5pdHkgY2hlY2sgZm9yIHRoZSBnbG9iYWwgc3RydWN0Lml0ZXJfdW5wYWNrKCkKKyAgICAgICAgaXQgPSBzdHJ1Y3QuaXRlcl91bnBhY2soJz5JQicsIGJ5dGVzKHJhbmdlKDEsIDExKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDAxMDIwMzA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDYwNzA4MDksIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChTdHJ1Y3RUZXN0KQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5CmluZGV4IGE4OWU5NTUuLjM1M2QwZWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5CkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICMgb3Muc3RhdCgpIGdpdmVzIGEgY29tcGxpY2F0ZWQgc3RydWN0IHNlcXVlbmNlLgogICAgICAgICBzdCA9IG9zLnN0YXQoX19maWxlX18pCiAgICAgICAgIHJlcCA9IHJlcHIoc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuc3RhcnRzd2l0aChvcy5uYW1lICsgIi5zdGF0X3Jlc3VsdCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwLnN0YXJ0c3dpdGgoIm9zLnN0YXRfcmVzdWx0IikpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0X21vZGU9IiwgcmVwKQogICAgICAgICBzZWxmLmFzc2VydEluKCJzdF9pbm89IiwgcmVwKQogICAgICAgICBzZWxmLmFzc2VydEluKCJzdF9kZXY9IiwgcmVwKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CmluZGV4IGY1YTcwYTMuLjQ2ZTAxMmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKQEAgLTExLDYgKzExLDcgQEAKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRpbWUKIGltcG9ydCByZQoraW1wb3J0IHNlbGVjdG9ycwogaW1wb3J0IHN5c2NvbmZpZwogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgc2VsZWN0CkBAIC0xOSwxMCArMjAsNiBAQAogaW1wb3J0IHRleHR3cmFwCiAKIHRyeToKLSAgICBpbXBvcnQgcmVzb3VyY2UKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICByZXNvdXJjZSA9IE5vbmUKLXRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQpAQCAtMTYyLDggKzE1OSwyOCBAQAogICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0JERkwnLCBvdXRwdXQpCiAKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3RkaW5fYXJnKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGNhbiBiZSBjYWxsZWQgd2l0aCBzdGRpbiBzZXQgdG8gYSBmaWxlCisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0Zi5jbG9zZSkKKyAgICAgICAgdGYud3JpdGUoYidwZWFyJykKKyAgICAgICAgdGYuc2VlaygwKQorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkudXBwZXIoKSkiXSwKKyAgICAgICAgICAgICAgICBzdGRpbj10ZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BFQVInLCBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfaW5wdXRfYXJnKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGNhbiBiZSBjYWxsZWQgd2l0aCBpbnB1dCBzZXQgdG8gYSBzdHJpbmcKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpLnVwcGVyKCkpIl0sCisgICAgICAgICAgICAgICAgaW5wdXQ9YidwZWFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BFQVInLCBvdXRwdXQpCisKICAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3Rkb3V0X2FyZyhzZWxmKToKLSAgICAgICAgIyBjaGVja19vdXRwdXQoKSBmdW5jdGlvbiBzdGRlcnIgcmVkaXJlY3RlZCB0byBzdGRvdXQKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSByZWZ1c2VzIHRvIGFjY2VwdCAnc3Rkb3V0JyBhcmd1bWVudAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQoJ3dpbGwgbm90IGJlIHJ1bicpIl0sCkBAIC0xNzEsNiArMTg4LDIwIEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igd2hlbiBzdGRvdXQgYXJnIHN1cHBsaWVkLiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N0ZG91dCcsIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCiAKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3RkaW5fd2l0aF9pbnB1dF9hcmcoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgcmVmdXNlcyB0byBhY2NlcHQgJ3N0ZGluJyB3aXRoICdpbnB1dCcKKyAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRmLmNsb3NlKQorICAgICAgICB0Zi53cml0ZShiJ3BlYXInKQorICAgICAgICB0Zi5zZWVrKDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCgnd2lsbCBub3QgYmUgcnVuJykiXSwKKyAgICAgICAgICAgICAgICAgICAgc3RkaW49dGYsIGlucHV0PWInaGFyZScpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igd2hlbiBzdGRpbiBhbmQgaW5wdXQgYXJncyBzdXBwbGllZC4iKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzdGRpbicsIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lucHV0JywgYy5leGNlcHRpb24uYXJnc1swXSkKKwogICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF90aW1lb3V0KHNlbGYpOgogICAgICAgICAjIGNoZWNrX291dHB1dCgpIGZ1bmN0aW9uIHdpdGggdGltZW91dCBhcmcKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLlRpbWVvdXRFeHBpcmVkKSBhcyBjOgpAQCAtODUzLDggKzg4NCw5IEBACiAgICAgICAgICMKICAgICAgICAgIyBVVEYtMTYgYW5kIFVURi0zMi1CRSBhcmUgc3VmZmljaWVudCB0byBjaGVjayBib3RoIHdpdGggQk9NIGFuZAogICAgICAgICAjIHdpdGhvdXQsIGFuZCBVVEYtMTYgYW5kIFVURi0zMi4KKyAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBbJ3V0Zi0xNicsICd1dGYtMzItYmUnXToKLSAgICAgICAgICAgIG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZworICAgICAgICAgICAgb2xkX2dldHByZWZlcnJlZGVuY29kaW5nID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcKICAgICAgICAgICAgICMgSW5kaXJlY3RseSB2aWEgaW8uVGV4dElPV3JhcHBlciwgUG9wZW4oKSBkZWZhdWx0cyB0bwogICAgICAgICAgICAgIyBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpIGFuZCBlYXJsaWVyIGluIFB5dGhvbiAzLjIgdG8KICAgICAgICAgICAgICMgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkuCkBAIC04NjUsNyArODk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcpCiAgICAgICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlXQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGdldHByZWZlcnJlZGVuY29kaW5nCisgICAgICAgICAgICAgICAgX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBnZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgICAgICMgV2Ugc2V0IHN0ZGluIHRvIGJlIG5vbi1Ob25lIGJlY2F1c2UsIGFzIG9mIHRoaXMgd3JpdGluZywKICAgICAgICAgICAgICAgICAjIGEgZGlmZmVyZW50IGNvZGUgcGF0aCBpcyB1c2VkIHdoZW4gdGhlIG51bWJlciBvZiBwaXBlcyBpcwogICAgICAgICAgICAgICAgICMgemVybyBvciBvbmUuCkBAIC04NzQsNyArOTA2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKICAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKGlucHV0PScnKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBvbGRfZ2V0cHJlZmVycmVkZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICcxXG4yXG4zXG40JykKIAogICAgIGRlZiB0ZXN0X25vX2xlYWtpbmcoc2VsZik6CkBAIC05ODIsOCArMTAxNCw3IEBACiAgICAgICAgICMgdmFsdWUgZm9yIHRoYXQgbGltaXQsIGJ1dCBXaW5kb3dzIGhhcyAyMDQ4LCBzbyB3ZSBsb29wCiAgICAgICAgICMgMTAyNCB0aW1lcyAoZWFjaCBjYWxsIGxlYWtlZCB0d28gZmRzKS4KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAyNCk6Ci0gICAgICAgICAgICAjIFdpbmRvd3MgcmFpc2VzIElPRXJyb3IuICBPdGhlcnMgcmFpc2UgT1NFcnJvci4KLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRW52aXJvbm1lbnRFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgYzoKICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsnbm9uZXhpc3RpbmdfaV9ob3BlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKQEAgLTExMTQsNDcgKzExNDUsNiBAQAogICAgICAgICBmZHNfYWZ0ZXJfZXhjZXB0aW9uID0gb3MubGlzdGRpcihmZF9kaXJlY3RvcnkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRzX2JlZm9yZV9wb3BlbiwgZmRzX2FmdGVyX2V4Y2VwdGlvbikKIAotCi0jIGNvbnRleHQgbWFuYWdlcgotY2xhc3MgX1N1cHByZXNzQ29yZUZpbGVzKG9iamVjdCk6Ci0gICAgIiIiVHJ5IHRvIHByZXZlbnQgY29yZSBmaWxlcyBmcm9tIGJlaW5nIGNyZWF0ZWQuIiIiCi0gICAgb2xkX2xpbWl0ID0gTm9uZQotCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgIiIiVHJ5IHRvIHNhdmUgcHJldmlvdXMgdWxpbWl0LCB0aGVuIHNldCBpdCB0byAoMCwgMCkuIiIiCi0gICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYub2xkX2xpbWl0ID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFKQotICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgKDAsIDApKQotICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCByZXNvdXJjZS5lcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlICdDcmFzaCBSZXBvcnRlcicgb24gT1NYIHdhcyBjb25maWd1cmVkCi0gICAgICAgICAgICAjIGluICdEZXZlbG9wZXInIG1vZGUgYW5kIHdhcm4gdGhhdCBpdCB3aWxsIGdldCB0cmlnZ2VyZWQKLSAgICAgICAgICAgICMgd2hlbiBpdCBpcy4KLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgdXNlZCBpbiB0ZXN0cwotICAgICAgICAgICAgIyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG5leHQgbWFuYWdlci4KLSAgICAgICAgICAgIHZhbHVlID0gc3VicHJvY2Vzcy5Qb3BlbihbJy91c3IvYmluL2RlZmF1bHRzJywgJ3JlYWQnLAotICAgICAgICAgICAgICAgICAgICAnY29tLmFwcGxlLkNyYXNoUmVwb3J0ZXInLCAnRGlhbG9nVHlwZSddLAotICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgICAgICBpZiB2YWx1ZS5zdHJpcCgpID09IGInZGV2ZWxvcGVyJzoKLSAgICAgICAgICAgICAgICBwcmludCgidGhpcyB0ZXN0cyB0cmlnZ2VycyB0aGUgQ3Jhc2ggUmVwb3J0ZXIsICIKLSAgICAgICAgICAgICAgICAgICAgICAidGhhdCBpcyBpbnRlbnRpb25hbCIsIGVuZD0nJykKLSAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLQotICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgICIiIlJldHVybiBjb3JlIGZpbGUgYmVoYXZpb3IgdG8gZGVmYXVsdC4iIiIKLSAgICAgICAgaWYgc2VsZi5vbGRfbGltaXQgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiByZXNvdXJjZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsIHNlbGYub2xkX2xpbWl0KQotICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCByZXNvdXJjZS5lcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0KIEB1bml0dGVzdC5za2lwSWYobXN3aW5kb3dzLCAiUE9TSVggc3BlY2lmaWMgdGVzdHMiKQogY2xhc3MgUE9TSVhQcm9jZXNzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKIApAQCAtMTI0Myw3ICsxMjMzLDcgQEAKIAogICAgIGRlZiB0ZXN0X3J1bl9hYm9ydChzZWxmKToKICAgICAgICAgIyByZXR1cm5jb2RlIGhhbmRsZXMgc2lnbmFsIHRlcm1pbmF0aW9uCi0gICAgICAgIHdpdGggX1N1cHByZXNzQ29yZUZpbGVzKCk6CisgICAgICAgIHdpdGggc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBvczsgb3MuYWJvcnQoKSddKQogICAgICAgICAgICAgcC53YWl0KCkKQEAgLTEyNjYsNyArMTI1Niw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbj1yYWlzZV9pdCkKLSAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5fcG9zaXhzdWJwcm9jZXNzLAogICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgYSBWYWx1ZUVycm9yIGZyb20gdGhlIHByZWV4ZWNfZm4iKQpAQCAtMTMwNiw5ICsxMjk2LDEwIEBACiAgICAgICAgICIiIklzc3VlMTYxNDA6IERvbid0IGRvdWJsZSBjbG9zZSBwaXBlcyBvbiBwcmVleGVjIGVycm9yLiIiIgogCiAgICAgICAgIGRlZiByYWlzZV9pdCgpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJmb3JjZSB0aGUgX2V4ZWN1dGVfY2hpbGQoKSBlcnJwaXBlX2RhdGEgcGF0aC4iKQorICAgICAgICAgICAgcmFpc2Ugc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJmb3JjZSB0aGUgX2V4ZWN1dGVfY2hpbGQoKSBlcnJwaXBlX2RhdGEgcGF0aC4iKQogCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvcik6CiAgICAgICAgICAgICBzZWxmLl9UZXN0RXhlY3V0ZUNoaWxkUG9wZW4oCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwYXNzIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCkBAIC0xNTA3LDE2ICsxNDk4LDI4IEBACiAgICAgICAgICMgVGVybWluYXRpbmcgYSBkZWFkIHByb2Nlc3MKICAgICAgICAgc2VsZi5fa2lsbF9kZWFkX3Byb2Nlc3MoJ3Rlcm1pbmF0ZScpCiAKKyAgICBkZWYgX3NhdmVfZmRzKHNlbGYsIHNhdmVfZmRzKToKKyAgICAgICAgZmRzID0gW10KKyAgICAgICAgZm9yIGZkIGluIHNhdmVfZmRzOgorICAgICAgICAgICAgaW5oZXJpdGFibGUgPSBvcy5nZXRfaW5oZXJpdGFibGUoZmQpCisgICAgICAgICAgICBzYXZlZCA9IG9zLmR1cChmZCkKKyAgICAgICAgICAgIGZkcy5hcHBlbmQoKGZkLCBzYXZlZCwgaW5oZXJpdGFibGUpKQorICAgICAgICByZXR1cm4gZmRzCisKKyAgICBkZWYgX3Jlc3RvcmVfZmRzKHNlbGYsIGZkcyk6CisgICAgICAgIGZvciBmZCwgc2F2ZWQsIGluaGVyaXRhYmxlIGluIGZkczoKKyAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIGZkLCBpbmhlcml0YWJsZT1pbmhlcml0YWJsZSkKKyAgICAgICAgICAgIG9zLmNsb3NlKHNhdmVkKQorCiAgICAgZGVmIGNoZWNrX2Nsb3NlX3N0ZF9mZHMoc2VsZiwgZmRzKToKICAgICAgICAgIyBJc3N1ZSAjOTkwNTogdGVzdCB0aGF0IHN1YnByb2Nlc3MgcGlwZXMgc3RpbGwgd29yayBwcm9wZXJseSB3aXRoCiAgICAgICAgICMgc29tZSBzdGFuZGFyZCBmZHMgY2xvc2VkCiAgICAgICAgIHN0ZGluID0gMAotICAgICAgICBuZXdmZHMgPSBbXQotICAgICAgICBmb3IgYSBpbiBmZHM6Ci0gICAgICAgICAgICBiID0gb3MuZHVwKGEpCi0gICAgICAgICAgICBuZXdmZHMuYXBwZW5kKGIpCi0gICAgICAgICAgICBpZiBhID09IDA6Ci0gICAgICAgICAgICAgICAgc3RkaW4gPSBiCisgICAgICAgIHNhdmVkX2ZkcyA9IHNlbGYuX3NhdmVfZmRzKGZkcykKKyAgICAgICAgZm9yIGZkLCBzYXZlZCwgaW5oZXJpdGFibGUgaW4gc2F2ZWRfZmRzOgorICAgICAgICAgICAgaWYgZmQgPT0gMDoKKyAgICAgICAgICAgICAgICBzdGRpbiA9IHNhdmVkCisgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKQEAgLTE1MzEsMTAgKzE1MzQsNyBAQAogICAgICAgICAgICAgZXJyID0gc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKGVycikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG91dCwgZXJyKSwgKGInYXBwbGUnLCBiJ29yYW5nZScpKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZm9yIGIsIGEgaW4gemlwKG5ld2ZkcywgZmRzKToKLSAgICAgICAgICAgICAgICBvcy5kdXAyKGIsIGEpCi0gICAgICAgICAgICBmb3IgYiBpbiBuZXdmZHM6Ci0gICAgICAgICAgICAgICAgb3MuY2xvc2UoYikKKyAgICAgICAgICAgIHNlbGYuX3Jlc3RvcmVfZmRzKHNhdmVkX2ZkcykKIAogICAgIGRlZiB0ZXN0X2Nsb3NlX2ZkXzAoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMF0pCkBAIC0xNTk1LDcgKzE1OTUsNyBAQAogICAgICAgICAgICAgb3MubHNlZWsodGVtcF9mZHNbMV0sIDAsIDApCiAKICAgICAgICAgICAgICMgbW92ZSB0aGUgc3RhbmRhcmQgZmlsZSBkZXNjcmlwdG9ycyBvdXQgb2YgdGhlIHdheQotICAgICAgICAgICAgc2F2ZWRfZmRzID0gW29zLmR1cChmZCkgZm9yIGZkIGluIHJhbmdlKDMpXQorICAgICAgICAgICAgc2F2ZWRfZmRzID0gc2VsZi5fc2F2ZV9mZHMocmFuZ2UoMykpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgIyBkdXBsaWNhdGUgdGhlIGZpbGUgb2JqZWN0cyBvdmVyIHRoZSBzdGFuZGFyZCBmZCdzCiAgICAgICAgICAgICAgICAgZm9yIGZkLCB0ZW1wX2ZkIGluIGVudW1lcmF0ZSh0ZW1wX2Zkcyk6CkBAIC0xNjExLDEwICsxNjExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXRlbXBfZmRzWzBdKQogICAgICAgICAgICAgICAgIHAud2FpdCgpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICMgcmVzdG9yZSB0aGUgb3JpZ2luYWwgZmQncyB1bmRlcm5lYXRoIHN5cy5zdGRpbiwgZXRjLgotICAgICAgICAgICAgICAgIGZvciBzdGQsIHNhdmVkIGluIGVudW1lcmF0ZShzYXZlZF9mZHMpOgotICAgICAgICAgICAgICAgICAgICBvcy5kdXAyKHNhdmVkLCBzdGQpCi0gICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKHNhdmVkKQorICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3RvcmVfZmRzKHNhdmVkX2ZkcykKIAogICAgICAgICAgICAgZm9yIGZkIGluIHRlbXBfZmRzOgogICAgICAgICAgICAgICAgIG9zLmxzZWVrKGZkLCAwLCAwKQpAQCAtMTYzOCw3ICsxNjM1LDcgQEAKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm5hbWUpCiAKICAgICAgICAgICAgICMgc2F2ZSBhIGNvcHkgb2YgdGhlIHN0YW5kYXJkIGZpbGUgZGVzY3JpcHRvcnMKLSAgICAgICAgICAgIHNhdmVkX2ZkcyA9IFtvcy5kdXAoZmQpIGZvciBmZCBpbiByYW5nZSgzKV0KKyAgICAgICAgICAgIHNhdmVkX2ZkcyA9IHNlbGYuX3NhdmVfZmRzKHJhbmdlKDMpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgZHVwbGljYXRlIHRoZSB0ZW1wIGZpbGVzIG92ZXIgdGhlIHN0YW5kYXJkIGZkJ3MgMCwgMSwgMgogICAgICAgICAgICAgICAgIGZvciBmZCwgdGVtcF9mZCBpbiBlbnVtZXJhdGUodGVtcF9mZHMpOgpAQCAtMTY2NCw5ICsxNjYxLDcgQEAKICAgICAgICAgICAgICAgICBvdXQgPSBvcy5yZWFkKHN0ZG91dF9ubywgMTAyNCkKICAgICAgICAgICAgICAgICBlcnIgPSBzdXBwb3J0LnN0cmlwX3B5dGhvbl9zdGRlcnIob3MucmVhZChzdGRlcnJfbm8sIDEwMjQpKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBmb3Igc3RkLCBzYXZlZCBpbiBlbnVtZXJhdGUoc2F2ZWRfZmRzKToKLSAgICAgICAgICAgICAgICAgICAgb3MuZHVwMihzYXZlZCwgc3RkKQotICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShzYXZlZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9yZXN0b3JlX2ZkcyhzYXZlZF9mZHMpCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiImdvdCBTVERJTiIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiJlcnIiKQpAQCAtMTY5OCw0MCArMTY5Myw0NyBAQAogICAgICAgICAgICAgIyBQdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMga2VlcHMgdGhlIG1lc3NhZ2UKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHN1YnByb2Nlc3MuX3Bvc2l4c3VicHJvY2VzcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICJzdXJyb2dhdGU6XHVEQ2ZmIikKLSAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAjIF9wb3NpeHN1YnByb2Nlc3MgdXNlcyBhIGRlZmF1bHQgbWVzc2FnZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc3VicHJvY2Vzcy5fcG9zaXhzdWJwcm9jZXNzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgIkV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBwcmVleGVjX2ZuLiIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igb3IgUnVudGltZUVycm9yIikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgVmFsdWVFcnJvciBvciBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvciIpCiAKICAgICBkZWYgdGVzdF91bmRlY29kYWJsZV9lbnYoc2VsZik6CiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluICgoJ3Rlc3QnLCAnYWJjXHVEQ0ZGJyksICgndGVzdFx1RENGRicsICc0MicpKToKKyAgICAgICAgICAgIGVuY29kZWRfdmFsdWUgPSB2YWx1ZS5lbmNvZGUoImFzY2lpIiwgInN1cnJvZ2F0ZWVzY2FwZSIpCisKICAgICAgICAgICAgICMgdGVzdCBzdHIgd2l0aCBzdXJyb2dhdGVzCiAgICAgICAgICAgICBzY3JpcHQgPSAiaW1wb3J0IG9zOyBwcmludChhc2NpaShvcy5nZXRlbnYoJXMpKSkiICUgcmVwcihrZXkpCiAgICAgICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICAgICAgZW52W2tleV0gPSB2YWx1ZQotICAgICAgICAgICAgIyBVc2UgQyBsb2NhbGUgdG8gZ2V0IGFzY2lpIGZvciB0aGUgbG9jYWxlIGVuY29kaW5nIHRvIGZvcmNlCisgICAgICAgICAgICAjIFVzZSBDIGxvY2FsZSB0byBnZXQgQVNDSUkgZm9yIHRoZSBsb2NhbGUgZW5jb2RpbmcgdG8gZm9yY2UKICAgICAgICAgICAgICMgc3Vycm9nYXRlLWVzY2FwaW5nIG9mIFx4RkYgaW4gdGhlIGNoaWxkIHByb2Nlc3M7IG90aGVyd2lzZSBpdCBjYW4KICAgICAgICAgICAgICMgYmUgZGVjb2RlZCBhcy1pcyBpZiB0aGUgZGVmYXVsdCBsb2NhbGUgaXMgbGF0aW4tMS4KICAgICAgICAgICAgIGVudlsnTENfQUxMJ10gPSAnQycKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJhaXgiKToKKyAgICAgICAgICAgICAgICAjIE9uIEFJWCwgdGhlIEMgbG9jYWxlIHVzZXMgdGhlIExhdGluMSBlbmNvZGluZworICAgICAgICAgICAgICAgIGRlY29kZWRfdmFsdWUgPSBlbmNvZGVkX3ZhbHVlLmRlY29kZSgibGF0aW4xIiwgInN1cnJvZ2F0ZWVzY2FwZSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgT24gb3RoZXIgVU5JWGVzLCB0aGUgQyBsb2NhbGUgdXNlcyB0aGUgQVNDSUkgZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBkZWNvZGVkX3ZhbHVlID0gdmFsdWUKICAgICAgICAgICAgIHN0ZG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAogICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgc2NyaXB0XSwKICAgICAgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcChiJ1xuXHInKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZGVjb2RlKCdhc2NpaScpLCBhc2NpaSh2YWx1ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5kZWNvZGUoJ2FzY2lpJyksIGFzY2lpKGRlY29kZWRfdmFsdWUpKQogCiAgICAgICAgICAgICAjIHRlc3QgYnl0ZXMKICAgICAgICAgICAgIGtleSA9IGtleS5lbmNvZGUoImFzY2lpIiwgInN1cnJvZ2F0ZWVzY2FwZSIpCi0gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmVuY29kZSgiYXNjaWkiLCAic3Vycm9nYXRlZXNjYXBlIikKICAgICAgICAgICAgIHNjcmlwdCA9ICJpbXBvcnQgb3M7IHByaW50KGFzY2lpKG9zLmdldGVudmIoJXMpKSkiICUgcmVwcihrZXkpCiAgICAgICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQotICAgICAgICAgICAgZW52W2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgZW52W2tleV0gPSBlbmNvZGVkX3ZhbHVlCiAgICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsIHNjcmlwdF0sCiAgICAgICAgICAgICAgICAgZW52PWVudikKICAgICAgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoYidcblxyJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkodmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZGVjb2RlKCdhc2NpaScpLCBhc2NpaShlbmNvZGVkX3ZhbHVlKSkKIAogICAgIGRlZiB0ZXN0X2J5dGVzX3Byb2dyYW0oc2VsZik6CiAgICAgICAgIGFic19wcm9ncmFtID0gb3MuZnNlbmNvZGUoc3lzLmV4ZWN1dGFibGUpCkBAIC0xODM3LDYgKzE4MzksOSBAQAogICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKICAgICAgICAgICAgIG9wZW5fZmRzLmFkZChmZCkKIAorICAgICAgICBmb3IgZmQgaW4gb3Blbl9mZHM6CisgICAgICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmQsIFRydWUpCisKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCBmZF9zdGF0dXNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBjbG9zZV9mZHM9RmFsc2UpCiAgICAgICAgIG91dHB1dCwgaWdub3JlZCA9IHAuY29tbXVuaWNhdGUoKQpAQCAtMTg4MSw2ICsxODg2LDggQEAKICAgICAgICAgICAgIGZkcyA9IG9zLnBpcGUoKQogICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZHNbMF0pCiAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkc1sxXSkKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZHNbMF0sIFRydWUpCisgICAgICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmRzWzFdLCBUcnVlKQogICAgICAgICAgICAgb3Blbl9mZHMudXBkYXRlKGZkcykKIAogICAgICAgICBmb3IgZmQgaW4gb3Blbl9mZHM6CkBAIC0xOTAzLDYgKzE5MTAsMzIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1GYWxzZSwgcGFzc19mZHM9KGZkLCApKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ292ZXJyaWRpbmcgY2xvc2VfZmRzJywgc3RyKGNvbnRleHQud2FybmluZykpCiAKKyAgICBkZWYgdGVzdF9wYXNzX2Zkc19pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgc2NyaXB0ID0gc3VwcG9ydC5maW5kZmlsZSgiZmRfc3RhdHVzLnB5Iiwgc3ViZGlyPSJzdWJwcm9jZXNzZGF0YSIpCisKKyAgICAgICAgaW5oZXJpdGFibGUsIG5vbl9pbmhlcml0YWJsZSA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGluaGVyaXRhYmxlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIG5vbl9pbmhlcml0YWJsZSkKKyAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGluaGVyaXRhYmxlLCBUcnVlKQorICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUobm9uX2luaGVyaXRhYmxlLCBGYWxzZSkKKyAgICAgICAgcGFzc19mZHMgPSAoaW5oZXJpdGFibGUsIG5vbl9pbmhlcml0YWJsZSkKKyAgICAgICAgYXJncyA9IFtzeXMuZXhlY3V0YWJsZSwgc2NyaXB0XQorICAgICAgICBhcmdzICs9IGxpc3QobWFwKHN0ciwgcGFzc19mZHMpKQorCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGNsb3NlX2Zkcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2Zkcz1wYXNzX2ZkcykKKyAgICAgICAgb3V0cHV0LCBpZ25vcmVkID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIGZkcyA9IHNldChtYXAoaW50LCBvdXRwdXQuc3BsaXQoYicsJykpKQorCisgICAgICAgICMgdGhlIGluaGVyaXRhYmxlIGZpbGUgZGVzY3JpcHRvciBtdXN0IGJlIGluaGVyaXRlZCwgc28gaXRzIGluaGVyaXRhYmxlCisgICAgICAgICMgZmxhZyBtdXN0IGJlIHNldCBpbiB0aGUgY2hpbGQgcHJvY2VzcyBhZnRlciBmb3JrKCkgYW5kIGJlZm9yZSBleGVjKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZHMsIHNldChwYXNzX2ZkcyksICJvdXRwdXQ9JWEiICUgb3V0cHV0KQorCisgICAgICAgICMgaW5oZXJpdGFibGUgZmxhZyBtdXN0IG5vdCBiZSBjaGFuZ2VkIGluIHRoZSBwYXJlbnQgcHJvY2VzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShpbmhlcml0YWJsZSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKG5vbl9pbmhlcml0YWJsZSksIEZhbHNlKQorCiAgICAgZGVmIHRlc3Rfc3Rkb3V0X3N0ZGluX2FyZV9zaW5nbGVfaW5vdXRfZmQoc2VsZik6CiAgICAgICAgIHdpdGggaW8ub3Blbihvcy5kZXZudWxsLCAicisiKSBhcyBpbm91dDoKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5leGl0KDApIl0sCkBAIC0xOTkwLDcgKzIwMjMsNyBAQAogICAgICAgICAjIGxldCBzb21lIHRpbWUgZm9yIHRoZSBwcm9jZXNzIHRvIGV4aXQsIGFuZCBjcmVhdGUgYSBuZXcgUG9wZW46IHRoaXMKICAgICAgICAgIyBzaG91bGQgdHJpZ2dlciB0aGUgd2FpdCgpIG9mIHAKICAgICAgICAgdGltZS5zbGVlcCgwLjIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRW52aXJvbm1lbnRFcnJvcikgYXMgYzoKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjOgogICAgICAgICAgICAgd2l0aCBzdWJwcm9jZXNzLlBvcGVuKFsnbm9uZXhpc3RpbmdfaV9ob3BlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKSBhcyBwcm9jOgpAQCAtMjE3NSwxNSArMjIwOCwxNiBAQAogICAgICAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKIAogCi1AdW5pdHRlc3Quc2tpcFVubGVzcyhnZXRhdHRyKHN1YnByb2Nlc3MsICdfaGFzX3BvbGwnLCBGYWxzZSksCi0gICAgICAgICAgICAgICAgICAgICAicG9sbCBzeXN0ZW0gY2FsbCBub3Qgc3VwcG9ydGVkIikKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyksCisgICAgICAgICAgICAgICAgICAgICAiVGVzdCBuZWVkcyBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yIikKIGNsYXNzIFByb2Nlc3NUZXN0Q2FzZU5vUG9sbChQcm9jZXNzVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VicHJvY2Vzcy5faGFzX3BvbGwgPSBGYWxzZQorICAgICAgICBzZWxmLm9yaWdfc2VsZWN0b3IgPSBzdWJwcm9jZXNzLl9Qb3BlblNlbGVjdG9yCisgICAgICAgIHN1YnByb2Nlc3MuX1BvcGVuU2VsZWN0b3IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IKICAgICAgICAgUHJvY2Vzc1Rlc3RDYXNlLnNldFVwKHNlbGYpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHN1YnByb2Nlc3MuX2hhc19wb2xsID0gVHJ1ZQorICAgICAgICBzdWJwcm9jZXNzLl9Qb3BlblNlbGVjdG9yID0gc2VsZi5vcmlnX3NlbGVjdG9yCiAgICAgICAgIFByb2Nlc3NUZXN0Q2FzZS50ZWFyRG93bihzZWxmKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VuYXUucHkgYi9MaWIvdGVzdC90ZXN0X3N1bmF1LnB5CmluZGV4IDE2NTUzMTcuLjBmNDEzNGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VuYXUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdW5hdS5weQpAQCAtMSw2ICsxLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4KIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBhdWRpb3Rlc3RzCitmcm9tIGF1ZGlvb3AgaW1wb3J0IGJ5dGVzd2FwCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3VuYXUKIApAQCAtNDYsNiArNDcsMzEgQEAKICAgICAgICIiIikKIAogCitjbGFzcyBTdW5hdVBDTTI0VGVzdChTdW5hdVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1wY20yNC5hdScKKyAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKKyAgICBuY2hhbm5lbHMgPSAyCisgICAgc2FtcHdpZHRoID0gMworICAgIGZyYW1lcmF0ZSA9IDExMDI1CisgICAgbmZyYW1lcyA9IDQ4CisgICAgY29tcHR5cGUgPSAnTk9ORScKKyAgICBjb21wbmFtZSA9ICdub3QgY29tcHJlc3NlZCcKKyAgICBmcmFtZXMgPSBieXRlcy5mcm9taGV4KCIiIlwKKyAgICAgIDAyMkQ2NUZGRUI5RCA0QjVBMEYwMEZBNTQgMzExM0MzMDRFRTJCIDgwRENENjA4NDMwMyBcCisgICAgICBDQkRFQzAwNkIyNjEgNDhBOTk4MDNGMkY4IEJGRTgyNDAxQjA3RCAwMzZCRkJGRTdCNUQgXAorICAgICAgQjg1NzU2RkEzRUM5IEI0QjA1NUYzNTAyQiAyOTk4MzBFQkNCNjIgMUE1Q0E3RTZEOTlBIFwKKyAgICAgIEVERkEzRUU0OTFCRCBDNjI1RUJFMjc4ODQgMEUwNUE5RTBCNkNGIEVGMjkyOUUwMjkyMiBcCisgICAgICA1NzU4RDhFMjcwNjcgRkIzNTU3RTgzRTE2IDEzNzdCRkVGODQwMiBEODJDNUJGNzI3MkEgXAorICAgICAgOTc4RjE2RkI3NzQ1IEY1Rjg2NUZDMTAxMyAwODY2MzVGQjlDNEUgREYzMEZDRkI0MEVFIFwKKyAgICAgIDExN0ZFMEZBMzQzOCAzRUU2QjhGQjVBQzMgQkM3N0EzRkNCMkY0IDY2RDZEQUZGNUYzMiBcCisgICAgICBDRjEzQjkwNDEyNzUgNDMxRDY5MDk3QThDIEMxQkI2MDBFQzc0RSA1MTIwQjkxMkEyQkEgXAorICAgICAgRUVERjY0MTc1NEMwIDgyMDcwMDE2NjRCNyA3RkZGRkYxNDQ1M0YgODAwMDAwMTI5NEU2IFwKKyAgICAgIDQ5OUMxQjBFQjNCMiA1MkI3M0UwREJDQTAgRUZCMkIyMEY1RkQ4IENFM0NEQjBGQkUxMiBcCisgICAgICBFNEI0OUMwQ0VBMkQgNjM0NEE4MEE1QTdDIDA4QzhGRTBBMUZGRSAyQkI5ODYwQjBBMEUgXAorICAgICAgNTE0ODZGMEU0NEUxIDhCQ0M2NDExM0IwNSBCNkY0RUMwRUVCMzYgNDQxMzE3MEE1QjQ4IFwKKyAgICAgICIiIikKKworCiBjbGFzcyBTdW5hdVBDTTMyVGVzdChTdW5hdVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1wY20zMi5hdScKICAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKQEAgLTg5LDcgKzExNSw3IEBACiAgICAgICBFNTA0MENCQyA2MTdDMEEzQyAwOEJDMEEzQyAyQzdDMEIzQyA1MTdDMEUzQyA4QTg0MTBGQyBCNjg0MEVCQyA0NTdDMEEzQyBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDIpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKaW5kZXggODgwOGM0Ny4uZTk5Y2E5ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKQEAgLTEsMTkgKzEsMjYgQEAKICIiIkRvIGEgbWluaW1hbCB0ZXN0IG9mIGFsbCB0aGUgbW9kdWxlcyB0aGF0IGFyZW4ndCBvdGhlcndpc2UgdGVzdGVkLiIiIgotCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKIGNsYXNzIFRlc3RVbnRlc3RlZE1vZHVsZXModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2F0X2xlYXN0X2ltcG9ydF91bnRlc3RlZF9tb2R1bGVzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3VudGVzdGVkX21vZHVsZXNfY2FuX2JlX2ltcG9ydGVkKHNlbGYpOgorICAgICAgICB1bnRlc3RlZCA9ICgnYmRiJywgJ2VuY29kaW5ncycsICdmb3JtYXR0ZXInLAorICAgICAgICAgICAgICAgICAgICAnbnR1cmwycGF0aCcsICd0YWJuYW5ueScpCiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncyhxdWlldD1UcnVlKToKLSAgICAgICAgICAgIGltcG9ydCBiZGIKLSAgICAgICAgICAgIGltcG9ydCBjZ2l0YgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gdW50ZXN0ZWQ6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3Rlc3QudGVzdF97fScuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdDoKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3t9IGhhcyB0ZXN0cyBldmVuIHRob3VnaCB0ZXN0X3N1bmRyeSBjbGFpbXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ290aGVyd2lzZScuZm9ybWF0KG5hbWUpKQogCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmJjcHBjb21waWxlcgogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jY29tcGlsZXIKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY3lnd2luY2NvbXBpbGVyCi0gICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmVteGNjb21waWxlcgogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5maWxlbGlzdAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgogICAgICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMubXN2Y2NvbXBpbGVyCkBAIC0zOSwyNiArNDYsMTQgQEAKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5zZGlzdAogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLnVwbG9hZAogCi0gICAgICAgICAgICBpbXBvcnQgZW5jb2RpbmdzCi0gICAgICAgICAgICBpbXBvcnQgZm9ybWF0dGVyCiAgICAgICAgICAgICBpbXBvcnQgaHRtbC5lbnRpdGllcwotICAgICAgICAgICAgaW1wb3J0IGtleXdvcmQKLSAgICAgICAgICAgIGltcG9ydCBtYWlsY2FwCi0gICAgICAgICAgICBpbXBvcnQgbnR1cmwycGF0aAotICAgICAgICAgICAgaW1wb3J0IG9zMmVteHBhdGgKLSAgICAgICAgICAgIGltcG9ydCBwc3RhdHMKLSAgICAgICAgICAgIGltcG9ydCBweV9jb21waWxlCi0gICAgICAgICAgICBpbXBvcnQgc25kaGRyCi0gICAgICAgICAgICBpbXBvcnQgdGFibmFubnkKKwogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCB0dHkgICAgICMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzCisgICAgICAgICAgICAgICAgaW1wb3J0IHR0eSAgIyBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCJza2lwcGluZyB0dHkiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0VW50ZXN0ZWRNb2R1bGVzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9zdXBlci5weQppbmRleCAxZTI3MmVlLi4zN2ZjMmQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwZXIucHkKQEAgLTQ0LDYgKzQ0LDExIEBACiAKIGNsYXNzIFRlc3RTdXBlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgVGhpcyBmaXhlcyB0aGUgZGFtYWdlIHRoYXQgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyBkb2VzLgorICAgICAgICBub25sb2NhbCBfX2NsYXNzX18KKyAgICAgICAgX19jbGFzc19fID0gVGVzdFN1cGVyCisKICAgICBkZWYgdGVzdF9iYXNpY3Nfd29ya2luZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkuZigpLCAnQUJDRCcpCiAKQEAgLTgxLDggKzg2LDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5mKCksICdBRScpCiAKLSAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCi0gICAgZGVmIHRlc3RfX19jbGFzc19fX3NldChzZWxmKToKKyAgICBkZWYgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyhzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzEyMzcwCiAgICAgICAgIGNsYXNzIFgoQSk6CiAgICAgICAgICAgICBkZWYgZihzZWxmKToKQEAgLTkxLDYgKzk1LDMxIEBACiAgICAgICAgIHggPSBYKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmYoKSwgJ0EnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCA0MTMpCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICB4ID0gX19jbGFzc19fCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIF9fY2xhc3NfXworICAgICAgICBzZWxmLmFzc2VydElzKFgueCwgdHlwZShzZWxmKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGVjKCIiImNsYXNzIFg6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAgICAgX19jbGFzc19fIiIiLCBnbG9iYWxzKCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZS5leGNlcHRpb24pLCBOYW1lRXJyb3IpICMgTm90IFVuYm91bmRMb2NhbEVycm9yCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBnbG9iYWwgX19jbGFzc19fCisgICAgICAgICAgICBfX2NsYXNzX18gPSA0MgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBfX2NsYXNzX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxzKClbIl9fY2xhc3NfXyJdLCA0MikKKyAgICAgICAgZGVsIGdsb2JhbHMoKVsiX19jbGFzc19fIl0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19jbGFzc19fIiwgWC5fX2RpY3RfXykKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIG5vbmxvY2FsIF9fY2xhc3NfXworICAgICAgICAgICAgX19jbGFzc19fID0gNDIKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19jbGFzc19fLCA0MikKIAogICAgIGRlZiB0ZXN0X19fY2xhc3NfX19pbnN0YW5jZW1ldGhvZChzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzE0ODU3CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKaW5kZXggNTkxMzA0NC4uNzBlNjM5NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQpAQCAtMzA0LDYgKzMwNCw3IEBACiAgICAgIyBhcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MKICAgICAjIGNhbl9zeW1saW5rCiAgICAgIyBza2lwX3VubGVzc19zeW1saW5rCisgICAgIyBTdXBwcmVzc0NyYXNoUmVwb3J0CiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQppbmRleCA1OTI2YjY5Li5hOWQzNjI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQpAQCAtMzMsNyArMzMsNyBAQAogCiA+Pj4gTm9uZSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIGtleXdvcmQKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8ga2V5d29yZAogCiBJdCdzIGEgc3ludGF4IGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgdHVwbGUuICBXaHkgaXNuJ3QgaXQgYW4KIGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgbGlzdD8gIEl0IHdpbGwgYWx3YXlzIHJhaXNlIHNvbWUgZXJyb3IgYXQKQEAgLTIzMyw3ICsyMzMsNyBAQAogU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbgogPj4+IE5vbmUgKz0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8ga2V5d29yZAorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBrZXl3b3JkCiA+Pj4gZigpICs9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXMucHkgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQppbmRleCBjMTUyM2RiLi5lMjVmMjk2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQpAQCAtNiw2ICs2LDkgQEAKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgZ2MKK2ltcG9ydCBzeXNjb25maWcKK2ltcG9ydCBwbGF0Zm9ybQogCiAjIGNvdW50IHRoZSBudW1iZXIgb2YgdGVzdCBydW5zLCB1c2VkIHRvIGNyZWF0ZSB1bmlxdWUKICMgc3RyaW5ncyB0byBpbnRlcm4gaW4gdGVzdF9pbnRlcm4oKQpAQCAtMjQ4LDcgKzI1MSw3IEBACiAKICAgICAgICAgICAgIHN5cy5zZXRyZWN1cnNpb25saW1pdCglZCkKICAgICAgICAgICAgIGYoKSIiIikKLSAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgogICAgICAgICAgICAgZm9yIGkgaW4gKDUwLCAxMDAwKToKICAgICAgICAgICAgICAgICBzdWIgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgY29kZSAlIGldLAogICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQpAQCAtNDI5LDcgKzQzMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzeXMuaW50X2luZm8uc2l6ZW9mX2RpZ2l0KSwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhleHZlcnNpb24sIGludCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzeXMuaGFzaF9pbmZvKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3lzLmhhc2hfaW5mbyksIDkpCiAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzeXMuaGFzaF9pbmZvLm1vZHVsdXMsIDIqKnN5cy5oYXNoX2luZm8ud2lkdGgpCiAgICAgICAgICMgc3lzLmhhc2hfaW5mby5tb2R1bHVzIHNob3VsZCBiZSBhIHByaW1lOyB3ZSBkbyBhIHF1aWNrCiAgICAgICAgICMgcHJvYmFibGUgcHJpbWFsaXR5IHRlc3QgKGRvZXNuJ3QgZXhjbHVkZSB0aGUgcG9zc2liaWxpdHkgb2YKQEAgLTQ0NCw2ICs0NDcsMjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oYXNoX2luZm8uaW5mLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuaGFzaF9pbmZvLm5hbiwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhhc2hfaW5mby5pbWFnLCBpbnQpCisgICAgICAgIGFsZ28gPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlB5X0hBU0hfQUxHT1JJVEhNIikKKyAgICAgICAgaWYgc3lzLmhhc2hfaW5mby5hbGdvcml0aG0gaW4geyJmbnYiLCAic2lwaGFzaDI0In06CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN5cy5oYXNoX2luZm8uaGFzaF9iaXRzLCB7MzIsIDY0fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3lzLmhhc2hfaW5mby5zZWVkX2JpdHMsIHszMiwgNjQsIDEyOH0pCisKKyAgICAgICAgICAgIGlmIGFsZ28gPT0gMToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLCAic2lwaGFzaDI0IikKKyAgICAgICAgICAgIGVsaWYgYWxnbyA9PSAyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmhhc2hfaW5mby5hbGdvcml0aG0sICJmbnYiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLCB7ImZudiIsICJzaXBoYXNoMjQifSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUFlfSEFTSF9FWFRFUk5BTAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGdvLCAwKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzeXMuaGFzaF9pbmZvLmN1dG9mZiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHN5cy5oYXNoX2luZm8uY3V0b2ZmLCA4KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMubWF4c2l6ZSwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLm1heHVuaWNvZGUsIGludCkKQEAgLTQ4MSw3ICs1MDAsNyBAQAogICAgIGRlZiB0ZXN0X3RocmVhZF9pbmZvKHNlbGYpOgogICAgICAgICBpbmZvID0gc3lzLnRocmVhZF9pbmZvCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGluZm8pLCAzKQotICAgICAgICBzZWxmLmFzc2VydEluKGluZm8ubmFtZSwgKCdudCcsICdvczInLCAncHRocmVhZCcsICdzb2xhcmlzJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5mby5uYW1lLCAoJ250JywgJ3B0aHJlYWQnLCAnc29sYXJpcycsIE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydEluKGluZm8ubG9jaywgKCdzZW1hcGhvcmUnLCAnbXV0ZXgrY29uZCcsIE5vbmUpKQogCiAgICAgZGVmIHRlc3RfNDM1ODEoc2VsZik6CkBAIC01MTQsNyArNTMzLDcgQEAKICAgICAgICAgYXR0cnMgPSAoImRlYnVnIiwKICAgICAgICAgICAgICAgICAgImluc3BlY3QiLCAiaW50ZXJhY3RpdmUiLCAib3B0aW1pemUiLCAiZG9udF93cml0ZV9ieXRlY29kZSIsCiAgICAgICAgICAgICAgICAgICJub191c2VyX3NpdGUiLCAibm9fc2l0ZSIsICJpZ25vcmVfZW52aXJvbm1lbnQiLCAidmVyYm9zZSIsCi0gICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIpCisgICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIsICJpc29sYXRlZCIpCiAgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLmZsYWdzLCBhdHRyKSwgYXR0cikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShnZXRhdHRyKHN5cy5mbGFncywgYXR0cikpLCBpbnQsIGF0dHIpCkBAIC01NDMsNiArNTYyLDQyIEBACiAgICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJz8nKQogCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gImFzY2lpIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludChjaHIoMHhhMikpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVbmljb2RlRW5jb2RlRXJyb3I6JywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKHJiIidceGEyJyIsIGVycikKKworICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICJhc2NpaToiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGEyKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1VuaWNvZGVFbmNvZGVFcnJvcjonLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmIiJ1x4YTInIiwgZXJyKQorCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gIjpzdXJyb2dhdGVlc2NhcGUiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGRjYmQpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYidceGJkJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgT1Mgc3VwcG9ydCBvZiBub24tQVNDSUkgZW5jb2RpbmdzJykKKyAgICBkZWYgdGVzdF9pb2VuY29kaW5nX25vbmFzY2lpKHNlbGYpOgorICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24pCisKKyAgICAgICAgZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAiIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmludCglYSknICUgdGVzdC5zdXBwb3J0LkZTX05PTkFTQ0lJXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKKyAgICAgICAgb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIG9zLmZzZW5jb2RlKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSkpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5iYXNlX3ByZWZpeCAhPSBzeXMucHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgJ1Rlc3QgaXMgbm90IHZlbnYtY29tcGF0aWJsZScpCiAgICAgZGVmIHRlc3RfZXhlY3V0YWJsZShzZWxmKToKQEAgLTYxMCw2ICs2NjUsMzkgQEAKICAgICAgICAgcmV0LCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKmFyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJmcmVlIFB5RGljdE9iamVjdHMiLCBlcnIpCiAKKyAgICAgICAgIyBUaGUgZnVuY3Rpb24gaGFzIG5vIHBhcmFtZXRlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5fZGVidWdtYWxsb2NzdGF0cywgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc3lzLCAiZ2V0YWxsb2NhdGVkYmxvY2tzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInN5cy5nZXRhbGxvY2F0ZWRibG9ja3MgdW5hdmFpbGFibGUgb24gdGhpcyBidWlsZCIpCisgICAgZGVmIHRlc3RfZ2V0YWxsb2NhdGVkYmxvY2tzKHNlbGYpOgorICAgICAgICAjIFNvbWUgc2FuaXR5IGNoZWNrcworICAgICAgICB3aXRoX3B5bWFsbG9jID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX1BZTUFMTE9DJykKKyAgICAgICAgYSA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoYSksIGludCkKKyAgICAgICAgaWYgd2l0aF9weW1hbGxvYzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihhLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBXaGVuIFdJVEhfUFlNQUxMT0MgaXNuJ3QgYXZhaWxhYmxlLCB3ZSBkb24ndCBrbm93IGFueXRoaW5nCisgICAgICAgICAgICAjIGFib3V0IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uOiB0aGUgZnVuY3Rpb24gbWlnaHQKKyAgICAgICAgICAgICMgcmV0dXJuIDAgb3Igc29tZXRoaW5nIGdyZWF0ZXIuCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChhLCAwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdoaWxlIHdlIGNvdWxkIGltYWdpbmUgYSBQeXRob24gc2Vzc2lvbiB3aGVyZSB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAjIG11bHRpcGxlIGJ1ZmZlciBvYmplY3RzIHdvdWxkIGV4Y2VlZCB0aGUgc2hhcmluZyBvZiByZWZlcmVuY2VzLAorICAgICAgICAgICAgIyBpdCBpcyB1bmxpa2VseSB0byBoYXBwZW4gaW4gYSBub3JtYWwgdGVzdCBydW4uCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoYSwgc3lzLmdldHRvdGFscmVmY291bnQoKSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBnZXR0b3RhbHJlZmNvdW50KCkgbm90IGF2YWlsYWJsZQorICAgICAgICAgICAgcGFzcworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgYiA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChiLCBhKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgYyA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKQorICAgICAgICBzZWxmLmFzc2VydEluKGMsIHJhbmdlKGIgLSA1MCwgYiArIDUwKSkKKworCiBAdGVzdC5zdXBwb3J0LmNweXRob25fb25seQogY2xhc3MgU2l6ZW9mVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTY1NSw3ICs3NDMsNyBAQAogICAgICAgICBzYW1wbGVzID0gW2InJywgYid1JyoxMDAwMDBdCiAgICAgICAgIGZvciBzYW1wbGUgaW4gc2FtcGxlczoKICAgICAgICAgICAgIHggPSBieXRlYXJyYXkoc2FtcGxlKQotICAgICAgICAgICAgY2hlY2soeCwgdnNpemUoJ2luUCcpICsgeC5fX2FsbG9jX18oKSkKKyAgICAgICAgICAgIGNoZWNrKHgsIHZzaXplKCduMlBpJykgKyB4Ll9fYWxsb2NfXygpKQogICAgICAgICAjIGJ5dGVhcnJheV9pdGVyYXRvcgogICAgICAgICBjaGVjayhpdGVyKGJ5dGVhcnJheSgpKSwgc2l6ZSgnblAnKSkKICAgICAgICAgIyBjZWxsCkBAIC03MzQsNyArODIyLDcgQEAKICAgICAgICAgbmZyZWVzID0gbGVuKHguZl9jb2RlLmNvX2ZyZWV2YXJzKQogICAgICAgICBleHRyYXMgPSB4LmZfY29kZS5jb19zdGFja3NpemUgKyB4LmZfY29kZS5jb19ubG9jYWxzICtcCiAgICAgICAgICAgICAgICAgICBuY2VsbHMgKyBuZnJlZXMgLSAxCi0gICAgICAgIGNoZWNrKHgsIHZzaXplKCcxMlAzaScgKyBDT19NQVhCTE9DS1MqJzNpJyArICdQJyArIGV4dHJhcyonUCcpKQorICAgICAgICBjaGVjayh4LCB2c2l6ZSgnMTJQM2ljJyArIENPX01BWEJMT0NLUyonM2knICsgJ1AnICsgZXh0cmFzKidQJykpCiAgICAgICAgICMgZnVuY3Rpb24KICAgICAgICAgZGVmIGZ1bmMoKTogcGFzcwogICAgICAgICBjaGVjayhmdW5jLCBzaXplKCcxMlAnKSkKQEAgLTc4MCw3ICs4NjgsNyBAQAogICAgICAgICAjIG1lbW9yeXZpZXcKICAgICAgICAgY2hlY2sobWVtb3J5dmlldyhiJycpLCBzaXplKCdQbmluIDJQMm4yaTVQIDNjUG4nKSkKICAgICAgICAgIyBtb2R1bGUKLSAgICAgICAgY2hlY2sodW5pdHRlc3QsIHNpemUoJ1BuUCcpKQorICAgICAgICBjaGVjayh1bml0dGVzdCwgc2l6ZSgnUG5QUFAnKSkKICAgICAgICAgIyBOb25lCiAgICAgICAgIGNoZWNrKE5vbmUsIHNpemUoJycpKQogICAgICAgICAjIE5vdEltcGxlbWVudGVkVHlwZQpAQCAtODM0LDExICs5MjIsMTEgQEAKICAgICAgICAgY2hlY2soKDEsMiwzKSwgdnNpemUoJycpICsgMypzZWxmLlApCiAgICAgICAgICMgdHlwZQogICAgICAgICAjIHN0YXRpYyB0eXBlOiBQeVR5cGVPYmplY3QKLSAgICAgICAgcyA9IHZzaXplKCdQMm4xNVBsNFBuOVBuMTFQSScpCisgICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUElQJykKICAgICAgICAgY2hlY2soaW50LCBzKQogICAgICAgICAjIChQeVR5cGVPYmplY3QgKyBQeU51bWJlck1ldGhvZHMgKyBQeU1hcHBpbmdNZXRob2RzICsKICAgICAgICAgIyAgUHlTZXF1ZW5jZU1ldGhvZHMgKyBQeUJ1ZmZlclByb2NzICsgNFApCi0gICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUEknKSArIHN0cnVjdC5jYWxjc2l6ZSgnMzRQIDNQIDEwUCAyUCA0UCcpCisgICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUElQJykgKyBzdHJ1Y3QuY2FsY3NpemUoJzM0UCAzUCAxMFAgMlAgNFAnKQogICAgICAgICAjIFNlcGFyYXRlIGJsb2NrIGZvciBQeURpY3RLZXlzT2JqZWN0IHdpdGggNCBlbnRyaWVzCiAgICAgICAgIHMgKz0gc3RydWN0LmNhbGNzaXplKCIyblBuIikgKyA0KnN0cnVjdC5jYWxjc2l6ZSgibjJQIikKICAgICAgICAgIyBjbGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkgYi9MaWIvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQppbmRleCAwM2Y2N2ZkLi44MDRjNDQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQpAQCAtNSw3ICs1LDcgQEAKIGltcG9ydCBzaHV0aWwKIGZyb20gY29weSBpbXBvcnQgY29weQogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssIGNoZWNrX3dhcm5pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQsIHNraXBfdW5sZXNzX3N5bWxpbmspCiAKIGltcG9ydCBzeXNjb25maWcKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY29uZmlnX2gpLCBjb25maWdfaCkKIAogICAgIGRlZiB0ZXN0X2dldF9zY2hlbWVfbmFtZXMoc2VsZik6Ci0gICAgICAgIHdhbnRlZCA9ICgnbnQnLCAnbnRfdXNlcicsICdvczInLCAnb3MyX2hvbWUnLCAnb3N4X2ZyYW1ld29ya191c2VyJywKKyAgICAgICAgd2FudGVkID0gKCdudCcsICdudF91c2VyJywgJ29zeF9mcmFtZXdvcmtfdXNlcicsCiAgICAgICAgICAgICAgICAgICAncG9zaXhfaG9tZScsICdwb3NpeF9wcmVmaXgnLCAncG9zaXhfdXNlcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3NjaGVtZV9uYW1lcygpLCB3YW50ZWQpCiAKQEAgLTMwNSwxNCArMzA1LDEzIEBACiAgICAgICAgIGlmICdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnIGluIGVudjoKICAgICAgICAgICAgIGRlbCBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnLCAndycpIGFzIGRldm51bGxfZnA6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbCi0gICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAotICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZudWxsX2ZwLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKICAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHRlc3RfcGxhdGZvcm0uZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCkBAIC0zMjUsMjAgKzMyNCwxOSBAQAogICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjEnCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnKSBhcyBkZXZfbnVsbDoKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKLSAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCi0gICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgc3RkZXJyPWRldl9udWxsLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCi0gICAgICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKLSAgICAgICAgICAgIHRlc3RfcGxhdGZvcm0gPSB0ZXN0X3BsYXRmb3JtLmRlY29kZSgndXRmLTgnKQotICAgICAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWworICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCwKKyAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHRlc3RfcGxhdGZvcm0gPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICB0ZXN0X3BsYXRmb3JtID0gdGVzdF9wbGF0Zm9ybS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15X3BsYXRmb3JtLCB0ZXN0X3BsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteV9wbGF0Zm9ybSwgdGVzdF9wbGF0Zm9ybSkKIAogICAgIGRlZiB0ZXN0X3NyY2RpcihzZWxmKToKICAgICAgICAgIyBTZWUgSXNzdWVzICMxNTMyMiwgIzE1MzY0LgpAQCAtMzcxLDYgKzM2OSwyNiBAQAogICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2Rpciwgc3JjZGlyMikKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIsICdTTycpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT192YWx1ZShzZWxmKToKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09faW5fdmFycyhzZWxmKToKKyAgICAgICAgdmFycyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh2YXJzWydTTyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnNbJ1NPJ10sIHZhcnNbJ0VYVF9TVUZGSVgnXSkKKwogCiBjbGFzcyBNYWtlZmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXNsb2cucHkgYi9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weQppbmRleCA0ZTc2MjFlNS4uYjdmZDJiZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXNsb2cucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNsb2cucHkKQEAgLTMyLDYgKzMyLDEwIEBACiAgICAgZGVmIHRlc3RfbG9nX3VwdG8oc2VsZik6CiAgICAgICAgIHN5c2xvZy5MT0dfVVBUTyhzeXNsb2cuTE9HX0lORk8pCiAKKyAgICBkZWYgdGVzdF9vcGVubG9nX25vYXJncyhzZWxmKToKKyAgICAgICAgc3lzbG9nLm9wZW5sb2coKQorICAgICAgICBzeXNsb2cuc3lzbG9nKCd0ZXN0IG1lc3NhZ2UgZnJvbSBweXRob24gdGVzdF9zeXNsb2cnKQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQppbmRleCBhZDZmMzIwLi5hYjg4YmU0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CkBAIC03LDcgKzcsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGFyZmlsZQogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgogCiAjIENoZWNrIGZvciBvdXIgY29tcHJlc3Npb24gbW9kdWxlcy4KIHRyeToKQEAgLTI3LDExICsyNywxMyBAQAogICAgIHJldHVybiBtZDUoZGF0YSkuaGV4ZGlnZXN0KCkKIAogVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikgKyAiLXRhcmRpciIKK3RhcmV4dGRpciA9IFRFTVBESVIgKyAnLWV4dHJhY3QtdGVzdCcKIHRhcm5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCJ0ZXN0dGFyLnRhciIpCiBnemlwbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuZ3oiKQogYnoybmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuYnoyIikKIHh6bmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIueHoiKQogdG1wbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidG1wLnRhciIpCitkb3RsZXNzbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhciIpCiAKIG1kNV9yZWd0eXBlID0gIjY1ZjQ3N2M4MThhZDllMTVmN2ZlYWIwYzZkMzc3NDJmIgogbWQ1X3NwYXJzZSA9ICJhNTRmYmM0Y2E0ZjQzOTlhOTBlMWIyNzE2NDAxMmZjNiIKQEAgLTI2OSw3ICsyNzEsNyBAQAogICAgICAgICAjID9ydy1yLS1yLS0gdGFyZmlsZS90YXJmaWxlICAgICA3MDExIDIwMDMtMDEtMDYgMDc6MTk6NDMgdXN0YXIvY29udHR5cGUKICAgICAgICAgIyA/cnctci0tci0tIHRhcmZpbGUvdGFyZmlsZSAgICAgNzAxMSAyMDAzLTAxLTA2IDA3OjE5OjQzIHVzdGFyL3JlZ3R5cGUKICAgICAgICAgIyAuLi4KLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXQsIChicictcnctci0tci0tIHRhcmZpbGUvdGFyZmlsZVxzKzcwMTEgJworICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dCwgKGJyJ1w/cnctci0tci0tIHRhcmZpbGUvdGFyZmlsZVxzKzcwMTEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJ1xkezR9LVxkXGQtXGRcZFxzK1xkXGQ6XGRcZDpcZFxkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicid1c3Rhci9cdyt0eXBlID9ccj9cbicpICogMikKICAgICAgICAgIyBNYWtlIHN1cmUgaXQgcHJpbnRzIHRoZSBzb3VyY2Ugb2YgbGluayB3aXRoIHZlcmJvc2UgZmxhZwpAQCAtMzE3LDEyICszMTksNyBAQAogICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF90YXJmaWxlKHNlbGYpOgogICAgICAgICAjIFRlc3QgZm9yIGlzc3VlMTE1MTM6IHByZXZlbnQgbm9uLWV4aXN0ZW50IGd6aXBwZWQgdGFyZmlsZXMgcmFpc2luZwogICAgICAgICAjIG11bHRpcGxlIGV4Y2VwdGlvbnMuCi0gICAgICAgIHRlc3QgPSAneHh4JwotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgJ3wnIGluIHNlbGYubW9kZToKLSAgICAgICAgICAgICMgSXNzdWUgIzIwMzg0OiBPbiBXaW5kb3dzIG9zLm9wZW4oKSBlcnJvciBtZXNzYWdlIGRvZXNuJ3QKLSAgICAgICAgICAgICMgY29udGFpbiBmaWxlIG5hbWUuCi0gICAgICAgICAgICB0ZXN0ID0gJycKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEZpbGVOb3RGb3VuZEVycm9yLCB0ZXN0KToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEZpbGVOb3RGb3VuZEVycm9yLCAieHh4Iik6CiAgICAgICAgICAgICB0YXJmaWxlLm9wZW4oInh4eCIsIHNlbGYubW9kZSkKIAogICAgIGRlZiB0ZXN0X251bGxfdGFyZmlsZShzZWxmKToKQEAgLTE4NDUsNiArMTg0MiwxNzEgQEAKICAgICAgICAgICAgIHRhcmZpbGUuaXRuKDB4MTAwMDAwMDAwMDAsIDYsIHRhcmZpbGUuR05VX0ZPUk1BVCkKIAogCitjbGFzcyBDb21tYW5kTGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRhcmZpbGVjbWQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKCctbScsICd0YXJmaWxlJywgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICAgICAgcmV0dXJuIG91dC5yZXBsYWNlKG9zLmxpbmVzZXAuZW5jb2RlKCksIGInXG4nKQorCisgICAgZGVmIHRhcmZpbGVjbWRfZmFpbHVyZShzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAndGFyZmlsZScsICphcmdzKQorCisgICAgZGVmIG1ha2Vfc2ltcGxlX3RhcmZpbGUoc2VsZiwgdGFyX25hbWUpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCB0YXJfbmFtZSkKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFyX25hbWUsICd3JykgYXMgdGY6CisgICAgICAgICAgICBmb3IgdGFyZGF0YSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICB0Zi5hZGQodGFyZGF0YSwgYXJjbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHRhcmRhdGEpKQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kKHNlbGYpOgorICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgZm9yIG9wdCBpbiAnLXQnLCAnLS10ZXN0JzoKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0YXJfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIGZvciB0YXJfbmFtZSBpbiB0ZXN0dGFybmFtZXM6CisgICAgICAgICAgICBmb3Igb3B0IGluICctdicsICctLXZlcmJvc2UnOgorICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsICctdCcsIHRhcl9uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidpcyBhIHRhciBhcmNoaXZlLlxuJywgb3V0KQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kX2ludmFsaWRfZmlsZShzZWxmKToKKyAgICAgICAgemlwbmFtZSA9IHN1cHBvcnQuZmluZGZpbGUoJ3ppcGRpci56aXAnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLnRhcmZpbGVjbWRfZmFpbHVyZSgnLXQnLCB6aXBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKGInIGlzIG5vdCBhIHRhciBhcmNoaXZlLicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKworICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QodGFyX25hbWU9dGFyX25hbWUpOgorICAgICAgICAgICAgICAgIHdpdGggb3Blbih0YXJfbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4odG1wbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YVs6NTExXSkKKyAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi50YXJmaWxlY21kX2ZhaWx1cmUoJy10JywgdG1wbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfbGlzdF9jb21tYW5kKHNlbGYpOgorICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHQ6CisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFyX25hbWUsICdyJykgYXMgdGY6CisgICAgICAgICAgICAgICAgICAgIHRmLmxpc3QodmVyYm9zZT1GYWxzZSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gdC5nZXR2YWx1ZSgpLmVuY29kZSgnYXNjaWknLCAnYmFja3NsYXNocmVwbGFjZScpCisgICAgICAgICAgICBmb3Igb3B0IGluICctbCcsICctLWxpc3QnOgorICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsIHRhcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05JT0VOQ09ESU5HPSdhc2NpaScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfbGlzdF9jb21tYW5kX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIGZvciB0YXJfbmFtZSBpbiB0ZXN0dGFybmFtZXM6CisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgdDoKKyAgICAgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0YXJfbmFtZSwgJ3InKSBhcyB0ZjoKKyAgICAgICAgICAgICAgICAgICAgdGYubGlzdCh2ZXJib3NlPVRydWUpCisgICAgICAgICAgICBleHBlY3RlZCA9IHQuZ2V0dmFsdWUoKS5lbmNvZGUoJ2FzY2lpJywgJ2JhY2tzbGFzaHJlcGxhY2UnKQorICAgICAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLWwnLCB0YXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OSU9FTkNPRElORz0nYXNjaWknKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2xpc3RfY29tbWFuZF9pbnZhbGlkX2ZpbGUoc2VsZik6CisgICAgICAgIHppcG5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCd6aXBkaXIuemlwJykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi50YXJmaWxlY21kX2ZhaWx1cmUoJy1sJywgemlwbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJyBpcyBub3QgYSB0YXIgYXJjaGl2ZS4nLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZChzZWxmKToKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyksCisgICAgICAgICAgICAgICAgIHN1cHBvcnQuZmluZGZpbGUoJ3Rva2VuaXplX3Rlc3RzLW5vLWNvZGluZy1jb29raWUtJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQtdXRmOC1ib20tc2lnLW9ubHkudHh0JyldCisgICAgICAgIGZvciBvcHQgaW4gJy1jJywgJy0tY3JlYXRlJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0bXBuYW1lLCAqZmlsZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgICAgIHRhci5nZXRtZW1iZXJzKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodG1wbmFtZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb21tYW5kX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIGZpbGVzID0gW3N1cHBvcnQuZmluZGZpbGUoJ3Rva2VuaXplX3Rlc3RzLnR4dCcpLAorICAgICAgICAgICAgICAgICBzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy1uby1jb2RpbmctY29va2llLScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kLXV0ZjgtYm9tLXNpZy1vbmx5LnR4dCcpXQorICAgICAgICBmb3Igb3B0IGluICctdicsICctLXZlcmJvc2UnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsICctYycsIHRtcG5hbWUsICpmaWxlcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInIGZpbGUgY3JlYXRlZC4nLCBvdXQpCisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRtcG5hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF9kb3RsZXNzX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKCctYycsIGRvdGxlc3NuYW1lLCAqZmlsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oZG90bGVzc25hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhkb3RsZXNzbmFtZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb21tYW5kX2RvdF9zdGFydGVkX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICB0YXJfbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAiLnRlc3R0YXIiKQorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKCctYycsIHRhcl9uYW1lLCAqZmlsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFyX25hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0YXJfbmFtZSkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfY29tbWFuZChzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX3NpbXBsZV90YXJmaWxlKHRtcG5hbWUpCisgICAgICAgIGZvciBvcHQgaW4gJy1lJywgJy0tZXh0cmFjdCc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKHRhcmV4dGRpcik6CisgICAgICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsIHRtcG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGFyZXh0ZGlyKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9jb21tYW5kX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9zaW1wbGVfdGFyZmlsZSh0bXBuYW1lKQorICAgICAgICBmb3Igb3B0IGluICctdicsICctLXZlcmJvc2UnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0YXJleHRkaXIpOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLWUnLCB0bXBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgZmlsZSBpcyBleHRyYWN0ZWQuJywgb3V0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZSh0YXJleHRkaXIpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X2NvbW1hbmRfZGlmZmVyZW50X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX3NpbXBsZV90YXJmaWxlKHRtcG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0YXJleHRkaXIpOgorICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWUnLCB0bXBuYW1lLCAnc3BhbWRpcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGFyZXh0ZGlyKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9jb21tYW5kX2ludmFsaWRfZmlsZShzZWxmKToKKyAgICAgICAgemlwbmFtZSA9IHN1cHBvcnQuZmluZGZpbGUoJ3ppcGRpci56aXAnKQorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGFyZXh0ZGlyKToKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctZScsIHppcG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgaXMgbm90IGEgdGFyIGFyY2hpdmUuJywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisKIGNsYXNzIENvbnRleHRNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKQEAgLTE4NTMsMjAgKzIwMTUsMjAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKIAogICAgIGRlZiB0ZXN0X2Nsb3NlZChzZWxmKToKLSAgICAgICAgIyBUaGUgX19lbnRlcl9fKCkgbWV0aG9kIGlzIHN1cHBvc2VkIHRvIHJhaXNlIElPRXJyb3IKKyAgICAgICAgIyBUaGUgX19lbnRlcl9fKCkgbWV0aG9kIGlzIHN1cHBvc2VkIHRvIHJhaXNlIE9TRXJyb3IKICAgICAgICAgIyBpZiB0aGUgVGFyRmlsZSBvYmplY3QgaXMgYWxyZWFkeSBjbG9zZWQuCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lKQogICAgICAgICB0YXIuY2xvc2UoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgogICAgICAgICAgICAgd2l0aCB0YXI6CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgotICAgICAgICAjIFRlc3QgaWYgdGhlIElPRXJyb3IgZXhjZXB0aW9uIGlzIHBhc3NlZCB0aHJvdWdoIHByb3Blcmx5LgorICAgICAgICAjIFRlc3QgaWYgdGhlIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHBhc3NlZCB0aHJvdWdoIHByb3Blcmx5LgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbikgYXMgZXhjOgogICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFybmFtZSkgYXMgdGFyOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIElPRXJyb3IsCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBleGNlcHRpb24gcmFpc2VkIGluIGNvbnRleHQgbWFuYWdlciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKQEAgLTE5NzIsNiArMjEzNCw4IEBACiAgICAgc3VwcG9ydC51bmxpbmsoVEVNUERJUikKICAgICBvcy5tYWtlZGlycyhURU1QRElSKQogCisgICAgZ2xvYmFsIHRlc3R0YXJuYW1lcworICAgIHRlc3R0YXJuYW1lcyA9IFt0YXJuYW1lXQogICAgIHdpdGggb3Blbih0YXJuYW1lLCAicmIiKSBhcyBmb2JqOgogICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKIApAQCAtMTk3OSw2ICsyMTQzLDcgQEAKICAgICBmb3IgYyBpbiBHemlwVGVzdCwgQnoyVGVzdCwgTHptYVRlc3Q6CiAgICAgICAgIGlmIGMub3BlbjoKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKGMudGFybmFtZSkKKyAgICAgICAgICAgIHRlc3R0YXJuYW1lcy5hcHBlbmQoYy50YXJuYW1lKQogICAgICAgICAgICAgd2l0aCBjLm9wZW4oYy50YXJuYW1lLCAid2IiKSBhcyB0YXI6CiAgICAgICAgICAgICAgICAgdGFyLndyaXRlKGRhdGEpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGNsLnB5IGIvTGliL3Rlc3QvdGVzdF90Y2wucHkKaW5kZXggZGRhMGM3YS4uYzBjNjM0MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90Y2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90Y2wucHkKQEAgLTUwMyw0MCArNTAzLDYgQEAKICAgICAgICAgZm9yIGFyZywgcmVzIGluIHRlc3RjYXNlczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXQoYXJnKSwgcmVzLCBtc2c9YXJnKQogCi0gICAgZGVmIHRlc3RfbWVyZ2Uoc2VsZik6Ci0gICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJ21lcmdlIGlzIGRlcHJlY2F0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgotICAgICAgICAgICAgbWVyZ2UgPSBzZWxmLmludGVycC50ay5tZXJnZQotICAgICAgICAgICAgY2FsbCA9IHNlbGYuaW50ZXJwLnRrLmNhbGwKLSAgICAgICAgICAgIHRlc3RjYXNlcyA9IFsKLSAgICAgICAgICAgICAgICAoKCksICcnKSwKLSAgICAgICAgICAgICAgICAoKCdhJywpLCAnYScpLAotICAgICAgICAgICAgICAgICgoMiwpLCAnMicpLAotICAgICAgICAgICAgICAgICgoJycsKSwgJ3t9JyksCi0gICAgICAgICAgICAgICAgKCd7JywgJ1xceycpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAnYicsICdjJyksICdhIGIgYycpLAotICAgICAgICAgICAgICAgICgoJyAnLCAnXHQnLCAnXHInLCAnXG4nKSwgJ3sgfSB7XHR9IHtccn0ge1xufScpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAnICcsICdjJyksICdhIHsgfSBjJyksCi0gICAgICAgICAgICAgICAgKCgnYScsICfigqwnKSwgJ2Eg4oKsJyksCi0gICAgICAgICAgICAgICAgKCgnYScsICdcVTAwMDEwNGEyJyksICdhIFxVMDAwMTA0YTInKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgYidceGUyXHg4Mlx4YWMnKSwgJ2Eg4oKsJyksCi0gICAgICAgICAgICAgICAgKCgnYScsICgnYicsICdjJykpLCAnYSB7YiBjfScpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAyKSwgJ2EgMicpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAzLjQpLCAnYSAzLjQnKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgKDIsIDMuNCkpLCAnYSB7MiAzLjR9JyksCi0gICAgICAgICAgICAgICAgKCgpLCAnJyksCi0gICAgICAgICAgICAgICAgKChjYWxsKCdsaXN0JywgMSwgJzInLCAoMy40LCkpLCksICd7MSAyIDMuNH0nKSwKLSAgICAgICAgICAgIF0KLSAgICAgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKLSAgICAgICAgICAgICAgICB0ZXN0Y2FzZXMgKz0gWwotICAgICAgICAgICAgICAgICAgICAoKGNhbGwoJ2RpY3QnLCAnY3JlYXRlJywgMTIsICdcdTIwYWMnLCBiJ1x4ZTJceDgyXHhhYycsICgzLjQsKSksKSwKLSAgICAgICAgICAgICAgICAgICAgICd7MTIg4oKsIOKCrCAzLjR9JyksCi0gICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgZm9yIGFyZ3MsIHJlcyBpbiB0ZXN0Y2FzZXM6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXJnZSgqYXJncyksIHJlcywgbXNnPWFyZ3MpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIG1lcmdlLCBiJ1x4ODAnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBtZXJnZSwgJ1x1ZGM4MCcpCi0KIAogY2xhc3MgQmlnbWVtVGNsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKaW5kZXggYzlmMmNjYi4uZWUxYzM1NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKQEAgLTEsMTAgKzEsOSBAQAogaW1wb3J0IHNvY2tldAotaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNlbGVjdG9ycwogaW1wb3J0IHRlbG5ldGxpYgogaW1wb3J0IHRpbWUKIGltcG9ydCBjb250ZXh0bGliCiAKLWltcG9ydCB1bml0dGVzdAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogdGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQpAQCAtMTEyLDQwICsxMTEsMzcgQEAKICAgICAgICAgc2VsZi5fbWVzc2FnZXMgKz0gb3V0LmdldHZhbHVlKCkKICAgICAgICAgcmV0dXJuCiAKLWRlZiBtb2NrX3NlbGVjdCgqc19hcmdzKToKLSAgICBibG9jayA9IEZhbHNlCi0gICAgZm9yIGwgaW4gc19hcmdzOgotICAgICAgICBmb3IgZm9iIGluIGw6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZvYiwgVGVsbmV0QWxpa2UpOgotICAgICAgICAgICAgICAgIGJsb2NrID0gZm9iLnNvY2suYmxvY2sKLSAgICBpZiBibG9jazoKLSAgICAgICAgcmV0dXJuIFtbXSwgW10sIFtdXQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBzX2FyZ3MKLQotY2xhc3MgTW9ja1BvbGxlcihvYmplY3QpOgotICAgIHRlc3RfY2FzZSA9IE5vbmUgICMgU2V0IGR1cmluZyBUZXN0Q2FzZSBzZXRVcC4KK2NsYXNzIE1vY2tTZWxlY3RvcihzZWxlY3RvcnMuQmFzZVNlbGVjdG9yKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fZmlsZV9vYmpzID0gW10KKyAgICAgICAgc2VsZi5rZXlzID0ge30KIAotICAgIGRlZiByZWdpc3RlcihzZWxmLCBmZCwgZXZlbnRtYXNrKToKLSAgICAgICAgc2VsZi50ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZShoYXNhdHRyKGZkLCAnZmlsZW5vJyksIGZkKQotICAgICAgICBzZWxmLnRlc3RfY2FzZS5hc3NlcnRFcXVhbChldmVudG1hc2ssIHNlbGVjdC5QT0xMSU58c2VsZWN0LlBPTExQUkkpCi0gICAgICAgIHNlbGYuX2ZpbGVfb2Jqcy5hcHBlbmQoZmQpCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJlc29sdXRpb24oc2VsZik6CisgICAgICAgIHJldHVybiAxZS0zCiAKLSAgICBkZWYgcG9sbChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgIGtleSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleShmaWxlb2JqLCAwLCBldmVudHMsIGRhdGEpCisgICAgICAgIHNlbGYua2V5c1tmaWxlb2JqXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2V5cy5wb3AoZmlsZW9iaikKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKICAgICAgICAgYmxvY2sgPSBGYWxzZQotICAgICAgICBmb3IgZm9iIGluIHNlbGYuX2ZpbGVfb2JqczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm9iLCBUZWxuZXRBbGlrZSk6Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSBmb2Iuc29jay5ibG9jaworICAgICAgICBmb3IgZmlsZW9iaiBpbiBzZWxmLmtleXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGVvYmosIFRlbG5ldEFsaWtlKToKKyAgICAgICAgICAgICAgICBibG9jayA9IGZpbGVvYmouc29jay5ibG9jaworICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGlmIGJsb2NrOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gemlwKHNlbGYuX2ZpbGVfb2JqcywgW3NlbGVjdC5QT0xMSU5dKmxlbihzZWxmLl9maWxlX29ianMpKQorICAgICAgICAgICAgcmV0dXJuIFsoa2V5LCBrZXkuZXZlbnRzKSBmb3Iga2V5IGluIHNlbGYua2V5cy52YWx1ZXMoKV0KIAotICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZkKToKLSAgICAgICAgc2VsZi5fZmlsZV9vYmpzLnJlbW92ZShmZCkKKyAgICBkZWYgZ2V0X21hcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2V5cworCiAKIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCiBkZWYgdGVzdF9zb2NrZXQocmVhZHMpOgpAQCAtMTU5LDcgKzE1NSw3IEBACiAgICAgICAgIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbiA9IG9sZF9jb25uCiAgICAgcmV0dXJuCiAKLWRlZiB0ZXN0X3RlbG5ldChyZWFkcz0oKSwgY2xzPVRlbG5ldEFsaWtlLCB1c2VfcG9sbD1Ob25lKToKK2RlZiB0ZXN0X3RlbG5ldChyZWFkcz0oKSwgY2xzPVRlbG5ldEFsaWtlKToKICAgICAnJycgcmV0dXJuIGEgdGVsbmV0bGliLlRlbG5ldCBvYmplY3QgdGhhdCB1c2VzIGEgU29ja2V0U3R1YiB3aXRoCiAgICAgICAgIHJlYWRzIHF1ZXVlZCB1cCB0byBiZSByZWFkICcnJwogICAgIGZvciB4IGluIHJlYWRzOgpAQCAtMTY3LDI5ICsxNjMsMTQgQEAKICAgICB3aXRoIHRlc3Rfc29ja2V0KHJlYWRzKToKICAgICAgICAgdGVsbmV0ID0gY2xzKCdkdW1teScsIDApCiAgICAgICAgIHRlbG5ldC5fbWVzc2FnZXMgPSAnJyAjIGRlYnVnbGV2ZWwgb3V0cHV0Ci0gICAgICAgIGlmIHVzZV9wb2xsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgdXNlX3BvbGwgYW5kIG5vdCB0ZWxuZXQuX2hhc19wb2xsOgotICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdzZWxlY3QucG9sbCgpIHJlcXVpcmVkLicpCi0gICAgICAgICAgICB0ZWxuZXQuX2hhc19wb2xsID0gdXNlX3BvbGwKICAgICByZXR1cm4gdGVsbmV0CiAKLQogY2xhc3MgRXhwZWN0QW5kUmVhZFRlc3RDYXNlKFRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYub2xkX3NlbGVjdCA9IHNlbGVjdC5zZWxlY3QKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IG1vY2tfc2VsZWN0Ci0gICAgICAgIHNlbGYub2xkX3BvbGwgPSBGYWxzZQotICAgICAgICBpZiBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKToKLSAgICAgICAgICAgIHNlbGYub2xkX3BvbGwgPSBzZWxlY3QucG9sbAotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBNb2NrUG9sbGVyCi0gICAgICAgICAgICBNb2NrUG9sbGVyLnRlc3RfY2FzZSA9IHNlbGYKLQorICAgICAgICBzZWxmLm9sZF9zZWxlY3RvciA9IHRlbG5ldGxpYi5fVGVsbmV0U2VsZWN0b3IKKyAgICAgICAgdGVsbmV0bGliLl9UZWxuZXRTZWxlY3RvciA9IE1vY2tTZWxlY3RvcgogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaWYgc2VsZi5vbGRfcG9sbDoKLSAgICAgICAgICAgIE1vY2tQb2xsZXIudGVzdF9jYXNlID0gTm9uZQotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBzZWxmLm9sZF9wb2xsCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBzZWxmLm9sZF9zZWxlY3QKLQorICAgICAgICB0ZWxuZXRsaWIuX1RlbG5ldFNlbGVjdG9yID0gc2VsZi5vbGRfc2VsZWN0b3IKIAogY2xhc3MgUmVhZFRlc3RzKEV4cGVjdEFuZFJlYWRUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVhZF91bnRpbChzZWxmKToKQEAgLTIwOCwyMiArMTg5LDYgQEAKICAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKGInbWF0Y2gnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdCkKIAotICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfd2l0aF9wb2xsKHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGVsbmV0LnJlYWRfdW50aWwoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPVRydWUpCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBzZWxlY3QoKSBjYWxsLicpCi0gICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF91bnRpbChiJ21hdGNoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQotCi0gICAgZGVmIHRlc3RfcmVhZF91bnRpbF93aXRoX3NlbGVjdChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5zZWxlY3QoKSB0byBpbXBsZW1lbnQgdGVsbmV0LnJlYWRfdW50aWwoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPUZhbHNlKQotICAgICAgICBpZiBzZWxmLm9sZF9wb2xsOgotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBwb2xsKCkgY2FsbC4nKQotICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoYidtYXRjaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKIAogICAgIGRlZiB0ZXN0X3JlYWRfYWxsKHNlbGYpOgogICAgICAgICAiIiIKQEAgLTQyNywyMyArMzkyLDYgQEAKICAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoW2InbWF0Y2gnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQogCi0gICAgZGVmIHRlc3RfZXhwZWN0X3dpdGhfcG9sbChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRlbG5ldC5leHBlY3QoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPVRydWUpCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBzZWxlY3QoKSBjYWxsLicpCi0gICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFtiJ21hdGNoJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKLQotICAgIGRlZiB0ZXN0X2V4cGVjdF93aXRoX3NlbGVjdChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5zZWxlY3QoKSB0byBpbXBsZW1lbnQgdGVsbmV0LmV4cGVjdCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9RmFsc2UpCi0gICAgICAgIGlmIHNlbGYub2xkX3BvbGw6Ci0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHBvbGwoKSBjYWxsLicpCi0gICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFtiJ21hdGNoJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKLQogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJhbFRlc3RzLCBSZWFkVGVzdHMsIFdyaXRlVGVzdHMsIE9wdGlvblRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKaW5kZXggNWE5NzAzNS4uY2YyYWUwOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CkBAIC0zNyw3ICszNyw3IEBACiAjIENvbW1vbiBmdW5jdGlvbmFsaXR5LgogY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIHN0cl9jaGVjayA9IHJlLmNvbXBpbGUociJbYS16QS1aMC05Xy1dezZ9JCIpCisgICAgc3RyX2NoZWNrID0gcmUuY29tcGlsZShyIl5bYS16MC05Xy1dezh9JCIpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuX3dhcm5pbmdzX21hbmFnZXIgPSBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCkKQEAgLTY0LDcgKzY0LDcgQEAKIAogICAgICAgICBuYmFzZSA9IG5iYXNlW2xlbihwcmUpOmxlbihuYmFzZSktbGVuKHN1ZildCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnN0cl9jaGVjay5tYXRjaChuYmFzZSksCi0gICAgICAgICAgICAgICAgICAgICAicmFuZG9tIHN0cmluZyAnJXMnIGRvZXMgbm90IG1hdGNoIC9eW2EtekEtWjAtOV8tXXs2fSQvIgorICAgICAgICAgICAgICAgICAgICAgInJhbmRvbSBzdHJpbmcgJyVzJyBkb2VzIG5vdCBtYXRjaCBeW2EtejAtOV8tXXs4fSQiCiAgICAgICAgICAgICAgICAgICAgICAlIG5iYXNlKQogCiAKQEAgLTE1Myw3ICsxNTMsNyBAQAogICAgICAgICAgICAgICAgICMgdmlhIGFueSBidWdzIGFib3ZlCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0tJTEwpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIG9zLmNsb3NlKHJlYWRfZmQpCiAgICAgICAgICAgICBvcy5jbG9zZSh3cml0ZV9mZCkKQEAgLTE5Miw3ICsxOTIsNyBAQAogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZGlybmFtZSA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBvcy5lcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuY3VyZGlyCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlybmFtZSwgY2FuZCkKQEAgLTMzMiw3ICszMzIsNyBAQAogICAgICAgICBmaWxlID0gc2VsZi5kb19jcmVhdGUoKQogICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZmlsZS5uYW1lKS5zdF9tb2RlKQogICAgICAgICBleHBlY3RlZCA9IDBvNjAwCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgICMgVGhlcmUncyBubyBkaXN0aW5jdGlvbiBhbW9uZyAndXNlcicsICdncm91cCcgYW5kICd3b3JsZCc7CiAgICAgICAgICAgICAjIHJlcGxpY2F0ZSB0aGUgJ3VzZXInIGJpdHMuCiAgICAgICAgICAgICB1c2VyID0gZXhwZWN0ZWQgPj4gNgpAQCAtMzQ5LDYgKzM0OSw3IEBACiAgICAgICAgICAgICB2PSJxIgogCiAgICAgICAgIGZpbGUgPSBzZWxmLmRvX2NyZWF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZpbGUuZmQpLCBGYWxzZSkKICAgICAgICAgZmQgPSAiJWQiICUgZmlsZS5mZAogCiAgICAgICAgIHRyeToKQEAgLTM2NSw3ICszNjYsNyBAQAogICAgICAgICAjIE9uIFdpbmRvd3MgYSBzcGF3biogL3BhdGgvIHdpdGggZW1iZWRkZWQgc3BhY2VzIHNob3VsZG4ndCBiZSBxdW90ZWQsCiAgICAgICAgICMgYnV0IGFuIGFyZyB3aXRoIGVtYmVkZGVkIHNwYWNlcyBzaG91bGQgYmUgZGVjb3JhdGVkIHdpdGggZG91YmxlCiAgICAgICAgICMgcXVvdGVzIG9uIGVhY2ggZW5kCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIGRlY29yYXRlZCA9ICciJXMiJyAlIHN5cy5leGVjdXRhYmxlCiAgICAgICAgICAgICB0ZXN0ZXIgPSAnIiVzIicgJSB0ZXN0ZXIKICAgICAgICAgZWxzZToKQEAgLTQ3NSw2ICs0NzYsMjAgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBiKQogCisgICAgZGVmIHRlc3RfY2FzZV9zZW5zaXRpdmUoc2VsZik6CisgICAgICAgICMgZ2V0dGVtcGRpciBzaG91bGQgbm90IGZsYXR0ZW4gaXRzIGNhc2UKKyAgICAgICAgIyBldmVuIG9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbQorICAgICAgICBjYXNlX3NlbnNpdGl2ZV90ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgiLVRlbXAiKQorICAgICAgICBfdGVtcGRpciwgdGVtcGZpbGUudGVtcGRpciA9IHRlbXBmaWxlLnRlbXBkaXIsIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICAgICAgIyBGYWtlIHRoZSBmaXJzdCBlbnYgdmFyIHdoaWNoIGlzIGNoZWNrZWQgYXMgYSBjYW5kaWRhdGUKKyAgICAgICAgICAgICAgICBlbnZbIlRNUERJUiJdID0gY2FzZV9zZW5zaXRpdmVfdGVtcGRpcgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVtcGZpbGUuZ2V0dGVtcGRpcigpLCBjYXNlX3NlbnNpdGl2ZV90ZW1wZGlyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGVtcGZpbGUudGVtcGRpciA9IF90ZW1wZGlyCisgICAgICAgICAgICBzdXBwb3J0LnJtZGlyKGNhc2Vfc2Vuc2l0aXZlX3RlbXBkaXIpCisKIAogY2xhc3MgVGVzdE1rc3RlbXAoQmFzZVRlc3RDYXNlKToKICAgICAiIiJUZXN0IG1rc3RlbXAoKS4iIiIKQEAgLTU2Myw3ICs1NzgsNyBAQAogICAgICAgICAgICAgbW9kZSA9IHN0YXQuU19JTU9ERShvcy5zdGF0KGRpcikuc3RfbW9kZSkKICAgICAgICAgICAgIG1vZGUgJj0gMG83NzcgIyBNYXNrIG9mZiBzdGlja3kgYml0cyBpbmhlcml0ZWQgZnJvbSAvdG1wCiAgICAgICAgICAgICBleHBlY3RlZCA9IDBvNzAwCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsICdvczJlbXgnKToKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgICAgICMgVGhlcmUncyBubyBkaXN0aW5jdGlvbiBhbW9uZyAndXNlcicsICdncm91cCcgYW5kICd3b3JsZCc7CiAgICAgICAgICAgICAgICAgIyByZXBsaWNhdGUgdGhlICd1c2VyJyBiaXRzLgogICAgICAgICAgICAgICAgIHVzZXIgPSBleHBlY3RlZCA+PiA2CkBAIC0xMTM5LDggKzExNTQsOSBAQAogICAgIGRlZiB0ZXN0X2RlbF9vbl9zaHV0ZG93bihzZWxmKToKICAgICAgICAgIyBBIFRlbXBvcmFyeURpcmVjdG9yeSBtYXkgYmUgY2xlYW5lZCB1cCBkdXJpbmcgc2h1dGRvd24KICAgICAgICAgd2l0aCBzZWxmLmRvX2NyZWF0ZSgpIGFzIGRpcjoKLSAgICAgICAgICAgIGZvciBtb2QgaW4gKCdvcycsICdzaHV0aWwnLCAnc3lzJywgJ3RlbXBmaWxlJywgJ3dhcm5pbmdzJyk6CisgICAgICAgICAgICBmb3IgbW9kIGluICgnYnVpbHRpbnMnLCAnb3MnLCAnc2h1dGlsJywgJ3N5cycsICd0ZW1wZmlsZScsICd3YXJuaW5ncycpOgogICAgICAgICAgICAgICAgIGNvZGUgPSAiIiJpZiBUcnVlOgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgYnVpbHRpbnMKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IG9zCiAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzaHV0aWwKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cwpAQCAtMTE2NSw2ICsxMTgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVtcG9yYXJ5RGlyZWN0b3J5ICVzIGV4aXN0cyBhZnRlciBjbGVhbnVwIiAlIHRtcF9uYW1lKQogICAgICAgICAgICAgICAgIGVyciA9IGVyci5kZWNvZGUoJ3V0Zi04JywgJ2JhY2tzbGFzaHJlcGxhY2UnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkV4Y2VwdGlvbiAiLCBlcnIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiUmVzb3VyY2VXYXJuaW5nOiBJbXBsaWNpdGx5IGNsZWFuaW5nIHVwIiwgZXJyKQogCiAgICAgZGVmIHRlc3Rfd2FybmluZ3Nfb25fY2xlYW51cChzZWxmKToKICAgICAgICAgIyBSZXNvdXJjZVdhcm5pbmcgd2lsbCBiZSB0cmlnZ2VyZWQgYnkgX19kZWxfXwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weSBiL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKaW5kZXggYzg2ZjVjZi4uMWJiYTc3ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CkBAIC05LDkgKzksOCBAQAogIwogCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCi1mcm9tIHRleHR3cmFwIGltcG9ydCBUZXh0V3JhcHBlciwgd3JhcCwgZmlsbCwgZGVkZW50LCBpbmRlbnQKK2Zyb20gdGV4dHdyYXAgaW1wb3J0IFRleHRXcmFwcGVyLCB3cmFwLCBmaWxsLCBkZWRlbnQsIGluZGVudCwgc2hvcnRlbgogCiAKIGNsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC00MzAsNiArNDI5LDkwIEBACiAgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCA3LCBbImFhIFx4ZTRceGU0LSIsICJceGU0XHhlNCJdKQogCiAKK2NsYXNzIE1heExpbmVzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKyAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyAgSSdtIGdsYWQgdG8gaGVhciBpdCEiCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyBbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTApCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyBbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTEpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IGFyZSBbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDgwLCBbc2VsZi50ZXh0XSwgbWF4X2xpbmVzPTEpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gIEknbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImdsYWQgdG8gaGVhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIml0ISJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTYpCisKKyAgICBkZWYgdGVzdF9zcGFjZXMoc2VsZik6CisgICAgICAgICMgc3RyaXAgc3BhY2VzIGJlZm9yZSBwbGFjZWhvbGRlcgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IGFyZSB5b3UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzIGZpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJkYXk/IFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9NCkKKyAgICAgICAgIyBwbGFjZWhvbGRlciBhdCB0aGUgc3RhcnQgb2YgbGluZQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MikKKyAgICAgICAgIyBmaW5hbCBzcGFjZXMKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCArICcgJyAqIDEwLCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IGFyZSB5b3UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzIGZpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJkYXk/ICBJJ20iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJnbGFkIHRvIGhlYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJpdCEiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz02KQorCisgICAgZGVmIHRlc3RfcGxhY2Vob2xkZXIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsby4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTEsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nLi4uJykKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUuLi4iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yLAorICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Jy4uLicpCisgICAgICAgICMgbG9uZyBwbGFjZWhvbGRlciBhbmQgaW5kZW50YXRpb24KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHdyYXAoc2VsZi50ZXh0LCAxNiwgaW5pdGlhbF9pbmRlbnQ9JyAgICAnLAorICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSwgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB3cmFwKHNlbGYudGV4dCwgMTYsIHN1YnNlcXVlbnRfaW5kZW50PScgICAgJywKKyAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIsIHBsYWNlaG9sZGVyPScgW3RydW5jYXRlZF0uLi4nKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiICAgIEhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgW3RydW5jYXRlZF0uLi4iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9pbmRlbnQ9JyAgICAnLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudF9pbmRlbnQ9JyAgJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScgW3RydW5jYXRlZF0uLi4nKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiICBbdHJ1bmNhdGVkXS4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTEsCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2luZGVudD0nICAnLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudF9pbmRlbnQ9JyAgICAnLAorICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDgwLCBbc2VsZi50ZXh0XSwgcGxhY2Vob2xkZXI9Jy4nICogMTAwMCkKKworCiBjbGFzcyBMb25nV29yZFRlc3RDYXNlIChCYXNlVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi53cmFwcGVyID0gVGV4dFdyYXBwZXIoKQpAQCAtNDkwLDYgKzU3MywxNCBAQAogICAgICAgICByZXN1bHQgPSB3cmFwKHNlbGYudGV4dCwgd2lkdGg9MzAsIGJyZWFrX2xvbmdfd29yZHM9MCkKICAgICAgICAgc2VsZi5jaGVjayhyZXN1bHQsIGV4cGVjdCkKIAorICAgIGRlZiB0ZXN0X21heF9saW5lc19sb25nKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnRGlkIHlvdSBzYXkgJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnInN1cGVyY2FsaWZyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWdpbGlzdGljZXhwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnWy4uLl0nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz00KQorCiAKIGNsYXNzIEluZGVudFRlc3RDYXNlcyhCYXNlVGVzdENhc2UpOgogCkBAIC03NzcsMTIgKzg2OCw2MiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRlbnQodGV4dCwgcHJlZml4LCBwcmVkaWNhdGUpLCBleHBlY3QpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFdyYXBUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvbmdXb3JkVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRlbnRUZXN0Q2FzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWRlbnRUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGVudFRlc3RDYXNlKQorY2xhc3MgU2hvcnRlblRlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tfc2hvcnRlbihzZWxmLCB0ZXh0LCB3aWR0aCwgZXhwZWN0LCAqKmt3YXJncyk6CisgICAgICAgIHJlc3VsdCA9IHNob3J0ZW4odGV4dCwgd2lkdGgsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICAjIFNpbXBsZSBjYXNlOiBqdXN0IHdvcmRzLCBzcGFjZXMsIGFuZCBhIGJpdCBvZiBwdW5jdHVhdGlvbgorICAgICAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyBJJ20gZ2xhZCB0byBoZWFyIGl0ISIKKworICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgMTgsICJIZWxsbyB0aGVyZSwgWy4uLl0iKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpIC0gMSwKKyAgICAgICAgICAgICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gIgorICAgICAgICAgICAgIkknbSBnbGFkIHRvIFsuLi5dIikKKworICAgIGRlZiB0ZXN0X3BsYWNlaG9sZGVyKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyBJJ20gZ2xhZCB0byBoZWFyIGl0ISIKKworICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgMTcsICJIZWxsbyB0aGVyZSwkJCIsIHBsYWNlaG9sZGVyPSckJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxOCwgIkhlbGxvIHRoZXJlLCBob3ckJCIsIHBsYWNlaG9sZGVyPSckJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxOCwgIkhlbGxvIHRoZXJlLCAkJCIsIHBsYWNlaG9sZGVyPScgJCQnKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpLCB0ZXh0LCBwbGFjZWhvbGRlcj0nJCQnKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpIC0gMSwKKyAgICAgICAgICAgICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gIgorICAgICAgICAgICAgIkknbSBnbGFkIHRvIGhlYXIkJCIsIHBsYWNlaG9sZGVyPSckJCcpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiIiwgNiwgIiIpCisKKyAgICBkZWYgdGVzdF93aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICAjIFdoaXRlc3BhY2UgY29sbGFwc2luZworICAgICAgICB0ZXh0ID0gIiIiCisgICAgICAgICAgICBUaGlzIGlzIGEgIHBhcmFncmFwaCB0aGF0ICBhbHJlYWR5IGhhcworICAgICAgICAgICAgbGluZSBicmVha3MgYW5kIFx0IHRhYnMgdG9vLiIiIgorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgNjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIGEgcGFyYWdyYXBoIHRoYXQgYWxyZWFkeSBoYXMgbGluZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJicmVha3MgYW5kIHRhYnMgdG9vLiIpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCA2MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgaXMgYSBwYXJhZ3JhcGggdGhhdCBhbHJlYWR5IGhhcyBsaW5lICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJyZWFrcyBhbmQgWy4uLl0iKQorCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiaGVsbG8gICAgICB3b3JsZCEgICIsIDEyLCAiaGVsbG8gd29ybGQhIikKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJoZWxsbyAgICAgIHdvcmxkISAgIiwgMTEsICJoZWxsbyBbLi4uXSIpCisgICAgICAgICMgVGhlIGxlYWRpbmcgc3BhY2UgaXMgdHJpbW1lZCBmcm9tIHRoZSBwbGFjZWhvbGRlcgorICAgICAgICAjIChpdCB3b3VsZCBiZSB1Z2x5IG90aGVyd2lzZSkuCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiaGVsbG8gICAgICB3b3JsZCEgICIsIDEwLCAiWy4uLl0iKQorCisgICAgZGVmIHRlc3Rfd2lkdGhfdG9vX3NtYWxsX2Zvcl9wbGFjZWhvbGRlcihzZWxmKToKKyAgICAgICAgc2hvcnRlbigieCIgKiAyMCwgd2lkdGg9OCwgcGxhY2Vob2xkZXI9IiguLi4uLi4pIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNob3J0ZW4oIngiICogMjAsIHdpZHRoPTgsIHBsYWNlaG9sZGVyPSIoLi4uLi4uLikiKQorCisgICAgZGVmIHRlc3RfZmlyc3Rfd29yZF90b29fbG9uZ19idXRfcGxhY2Vob2xkZXJfZml0cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJIZWxsb28iLCA1LCAiWy4uLl0iKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKaW5kZXggNTQzNzI4MS4uNjE0NDkwMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgdGhyZWFkLnN0YWNrX3NpemUoMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuc3RhY2tfc2l6ZSgpLCAwLCAic3RhY2tfc2l6ZSBub3QgcmVzZXQgdG8gZGVmYXVsdCIpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgbm90IGluICgibnQiLCAib3MyIiwgInBvc2l4IiksICd0ZXN0IG1lYW50IGZvciBudCwgb3MyLCBhbmQgcG9zaXgnKQorICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSBub3QgaW4gKCJudCIsICJwb3NpeCIpLCAndGVzdCBtZWFudCBmb3IgbnQgYW5kIHBvc2l4JykKICAgICBkZWYgdGVzdF9udF9hbmRfcG9zaXhfc3RhY2tfc2l6ZShzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGhyZWFkLnN0YWNrX3NpemUoNDA5NikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKaW5kZXggNmMyOTY1Yi4uYzdiZmVhMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKQEAgLTUsOCArNSw4IEBACiAjIGNvbXBsYWlucyBzZXZlcmFsIHRpbWVzIGFib3V0IG1vZHVsZSByYW5kb20gaGF2aW5nIG5vIGF0dHJpYnV0ZQogIyByYW5kcmFuZ2UsIGFuZCB0aGVuIFB5dGhvbiBoYW5ncy4KIAoraW1wb3J0IF9pbXAgYXMgaW1wCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCkBAIC01Nyw3ICs1Nyw3IEBACiB9CiAKIGNsYXNzIEZpbmRlcjoKLSAgICAiIiJBIGR1bW15IGZpbmRlciB0byBkZXRlY3QgY29uY3VycmVudCBhY2Nlc3MgdG8gaXRzIGZpbmRfbW9kdWxlKCkKKyAgICAiIiJBIGR1bW15IGZpbmRlciB0byBkZXRlY3QgY29uY3VycmVudCBhY2Nlc3MgdG8gaXRzIGZpbmRfc3BlYygpCiAgICAgbWV0aG9kLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtNjUsOCArNjUsOCBAQAogICAgICAgICBzZWxmLnggPSAwCiAgICAgICAgIHNlbGYubG9jayA9IHRocmVhZGluZy5Mb2NrKCkKIAotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICAjIFNpbXVsYXRlIHNvbWUgdGhyZWFkLXVuc2FmZSBiZWhhdmlvdXIuIElmIGNhbGxzIHRvIGZpbmRfbW9kdWxlKCkKKyAgICBkZWYgZmluZF9zcGVjKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAjIFNpbXVsYXRlIHNvbWUgdGhyZWFkLXVuc2FmZSBiZWhhdmlvdXIuIElmIGNhbGxzIHRvIGZpbmRfc3BlYygpCiAgICAgICAgICMgYXJlIHByb3Blcmx5IHNlcmlhbGl6ZWQsIGB4YCB3aWxsIGVuZCB1cCB0aGUgc2FtZSBhcyBgbnVtY2FsbHNgLgogICAgICAgICAjIE90aGVyd2lzZSBub3QuCiAgICAgICAgIGFzc2VydCBpbXAubG9ja19oZWxkKCkKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAiIiJBIGR1bW15IGZpbmRlciB3aGljaCBmbHVzaGVzIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlIHdoZW4gaXQgZ2V0cwogICAgIGNhbGxlZC4iIiIKIAotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBuYW1lLCBwYXRoPU5vbmUpOgorICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CiAgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKIAogCkBAIC0xNDUsMTMgKzE0NSwxMyBAQAogICAgICAgICAjIGRlZGljYXRlZCBtZXRhX3BhdGggZW50cnkuCiAgICAgICAgIGZsdXNoaW5nX2ZpbmRlciA9IEZsdXNoaW5nRmluZGVyKCkKICAgICAgICAgZGVmIHBhdGhfaG9vayhwYXRoKToKLSAgICAgICAgICAgIGZpbmRlci5maW5kX21vZHVsZSgnJykKKyAgICAgICAgICAgIGZpbmRlci5maW5kX3NwZWMoJycpCiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgogICAgICAgICBzeXMucGF0aF9ob29rcy5pbnNlcnQoMCwgcGF0aF9ob29rKQogICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChmbHVzaGluZ19maW5kZXIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgRmx1c2ggdGhlIGNhY2hlIGEgZmlyc3QgdGltZQotICAgICAgICAgICAgZmx1c2hpbmdfZmluZGVyLmZpbmRfbW9kdWxlKCcnKQorICAgICAgICAgICAgZmx1c2hpbmdfZmluZGVyLmZpbmRfc3BlYygnJykKICAgICAgICAgICAgIG51bXRlc3RzID0gc2VsZi5jaGVja19wYXJhbGxlbF9tb2R1bGVfaW5pdCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZmluZGVyLm51bWNhbGxzLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5kZXIueCwgZmluZGVyLm51bWNhbGxzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGluZy5weQppbmRleCAxMWM4OTc5Li43MTcwZjYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZGluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGluZy5weQpAQCAtMTcsMTMgKzE3LDE4IEBACiBpbXBvcnQgb3MKIGZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKIGltcG9ydCBzdWJwcm9jZXNzCi10cnk6Ci0gICAgaW1wb3J0IF90ZXN0Y2FwaQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIF90ZXN0Y2FwaSA9IE5vbmUKIAogZnJvbSB0ZXN0IGltcG9ydCBsb2NrX3Rlc3RzCiAKKworIyBCZXR3ZWVuIGZvcmsoKSBhbmQgZXhlYygpLCBvbmx5IGFzeW5jLXNhZmUgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIChpc3N1ZXMKKyMgIzEyMzE2IGFuZCAjMTE4NzApLCBhbmQgZm9yaygpIGZyb20gYSB3b3JrZXIgdGhyZWFkIGlzIGtub3duIHRvIHRyaWdnZXIKKyMgcHJvYmxlbXMgd2l0aCBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIChpc3N1ZSAjMzg2Myk6IHNraXAgcHJvYmxlbWF0aWMgdGVzdHMKKyMgb24gcGxhdGZvcm1zIGtub3duIHRvIGJlaGF2ZSBiYWRseS4KK3BsYXRmb3Jtc190b19za2lwID0gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKKyAgICAgICAgICAgICAgICAgICAgICdocC11eDExJykKKworCiAjIEEgdHJpdmlhbCBtdXRhYmxlIGNvdW50ZXIuCiBjbGFzcyBDb3VudGVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtMTAzLDcgKzEwOCw3IEBACiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCgnd2FpdGluZyBmb3IgYWxsIHRhc2tzIHRvIGNvbXBsZXRlJykKICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgIHQuam9pbihOVU1UQVNLUykKKyAgICAgICAgICAgIHQuam9pbigpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQuaXNfYWxpdmUoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodC5pZGVudCwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5pZGVudCBpcyBOb25lKQpAQCAtNDcxLDYgKzQ3NiwxMjcgQEAKICAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQocGlkLCAwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQogCisgICAgZGVmIHRlc3RfbWFpbl90aHJlYWQoc2VsZik6CisgICAgICAgIG1haW4gPSB0aHJlYWRpbmcubWFpbl90aHJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haW4ubmFtZSwgJ01haW5UaHJlYWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haW4uaWRlbnQsIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haW4uaWRlbnQsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKworICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0aHJlYWRpbmcubWFpbl90aHJlYWQoKS5pZGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgIHRoID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdGguc3RhcnQoKQorICAgICAgICB0aC5qb2luKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJ0ZXN0IG5lZWRzIG9zLmZvcmsoKSIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3dhaXRwaWQnKSwgInRlc3QgbmVlZHMgb3Mud2FpdHBpZCgpIikKKyAgICBkZWYgdGVzdF9tYWluX3RocmVhZF9hZnRlcl9mb3JrKHNlbGYpOgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcywgdGhyZWFkaW5nCisKKyAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAgICAgbWFpbiA9IHRocmVhZGluZy5tYWluX3RocmVhZCgpCisgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5uYW1lKQorICAgICAgICAgICAgICAgIHByaW50KG1haW4uaWRlbnQgPT0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAiIiIKKyAgICAgICAgXywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgIGRhdGEgPSBvdXQuZGVjb2RlKCkucmVwbGFjZSgnXHInLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiTWFpblRocmVhZFxuVHJ1ZVxuVHJ1ZVxuIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgInRlc3QgbmVlZHMgb3MuZm9yaygpIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnd2FpdHBpZCcpLCAidGVzdCBuZWVkcyBvcy53YWl0cGlkKCkiKQorICAgIGRlZiB0ZXN0X21haW5fdGhyZWFkX2FmdGVyX2ZvcmtfZnJvbV9ub25tYWluX3RocmVhZChzZWxmKToKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MsIHRocmVhZGluZywgc3lzCisKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAgICAgICAgIG1haW4gPSB0aHJlYWRpbmcubWFpbl90aHJlYWQoKQorICAgICAgICAgICAgICAgICAgICBwcmludChtYWluLm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG1haW4uaWRlbnQgPT0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG1haW4uaWRlbnQgPT0gdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICAgICAgICAgICAgICAjIHN0ZG91dCBpcyBmdWxseSBidWZmZXJlZCBiZWNhdXNlIG5vdCBhIHR0eSwKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBoYXZlIHRvIGZsdXNoIGJlZm9yZSBleGl0LgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKHBpZCwgMCkKKworICAgICAgICAgICAgdGggPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICAgICAgdGguc3RhcnQoKQorICAgICAgICAgICAgdGguam9pbigpCisgICAgICAgICIiIgorICAgICAgICBfLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKyAgICAgICAgZGF0YSA9IG91dC5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJUaHJlYWQtMVxuVHJ1ZVxuVHJ1ZVxuIikKKworICAgIGRlZiB0ZXN0X3RzdGF0ZV9sb2NrKHNlbGYpOgorICAgICAgICAjIFRlc3QgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIFRocmVhZCBvYmplY3RzLgorICAgICAgICBzdGFydGVkID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgZmluaXNoID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgc3RhcnRlZC5hY3F1aXJlKCkKKyAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc3RhcnRlZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIGZpbmlzaC5hY3F1aXJlKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgIyBUaGUgdHN0YXRlIGxvY2sgaXMgTm9uZSB1bnRpbCB0aGUgdGhyZWFkIGlzIHN0YXJ0ZWQKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fdHN0YXRlX2xvY2ssIE5vbmUpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5pc19hbGl2ZSgpKQorICAgICAgICAjIFRoZSB0c3RhdGUgbG9jayBjYW4ndCBiZSBhY3F1aXJlZCB3aGVuIHRoZSB0aHJlYWQgaXMgcnVubmluZworICAgICAgICAjIChvciBzdXNwZW5kZWQpLgorICAgICAgICB0c3RhdGVfbG9jayA9IHQuX3RzdGF0ZV9sb2NrCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHN0YXRlX2xvY2suYWNxdWlyZSh0aW1lb3V0PTApLCBGYWxzZSkKKyAgICAgICAgZmluaXNoLnJlbGVhc2UoKQorICAgICAgICAjIFdoZW4gdGhlIHRocmVhZCBlbmRzLCB0aGUgc3RhdGVfbG9jayBjYW4gYmUgc3VjY2Vzc2Z1bGx5CisgICAgICAgICMgYWNxdWlyZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0c3RhdGVfbG9jay5hY3F1aXJlKHRpbWVvdXQ9NSksIEZhbHNlKQorICAgICAgICAjIEJ1dCBpc19hbGl2ZSgpIGlzIHN0aWxsIFRydWU6ICB3ZSBob2xkIF90c3RhdGVfbG9jayBub3csIHdoaWNoCisgICAgICAgICMgcHJldmVudHMgaXNfYWxpdmUoKSBmcm9tIGtub3dpbmcgdGhlIHRocmVhZCdzIGVuZC1vZi1saWZlIEMgY29kZQorICAgICAgICAjIGlzIGRvbmUuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmlzX2FsaXZlKCkpCisgICAgICAgICMgTGV0IGlzX2FsaXZlKCkgZmluZCBvdXQgdGhlIEMgY29kZSBpcyBkb25lLgorICAgICAgICB0c3RhdGVfbG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmlzX2FsaXZlKCkpCisgICAgICAgICMgQW5kIHZlcmlmeSB0aGUgdGhyZWFkIGRpc3Bvc2VkIG9mIF90c3RhdGVfbG9jay4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuX3RzdGF0ZV9sb2NrIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZXByX3N0b3BwZWQoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgInN0b3BwZWQiIHNob3dzIHVwIGluIHJlcHIoVGhyZWFkKSBhcHByb3ByaWF0ZWx5LgorICAgICAgICBzdGFydGVkID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgZmluaXNoID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgc3RhcnRlZC5hY3F1aXJlKCkKKyAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc3RhcnRlZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIGZpbmlzaC5hY3F1aXJlKCkKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJzdGFydGVkIiwgcmVwcih0KSkKKyAgICAgICAgZmluaXNoLnJlbGVhc2UoKQorICAgICAgICAjICJzdG9wcGVkIiBzaG91bGQgYXBwZWFyIGluIHRoZSByZXByIGluIGEgcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZS4KKyAgICAgICAgIyBJbXBsZW1lbnRhdGlvbiBkZXRhaWw6ICBhcyBvZiB0aGlzIHdyaXRpbmcsIHRoYXQncyB0cml2aWFsbHkgdHJ1ZQorICAgICAgICAjIGlmIC5qb2luKCkgaXMgY2FsbGVkLCBhbmQgYWxtb3N0IHRyaXZpYWxseSB0cnVlIGlmIC5pc19hbGl2ZSgpIGlzCisgICAgICAgICMgY2FsbGVkLiAgVGhlIGRldGFpbCB3ZSdyZSB0ZXN0aW5nIGhlcmUgaXMgdGhhdCAic3RvcHBlZCIgc2hvd3MgdXAKKyAgICAgICAgIyAiYWxsIG9uIGl0cyBvd24iLgorICAgICAgICBMT09LSU5HX0ZPUiA9ICJzdG9wcGVkIgorICAgICAgICBmb3IgaSBpbiByYW5nZSg1MDApOgorICAgICAgICAgICAgaWYgTE9PS0lOR19GT1IgaW4gcmVwcih0KToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICBzZWxmLmFzc2VydEluKExPT0tJTkdfRk9SLCByZXByKHQpKSAjIHdlIHdhaXRlZCBhdCBsZWFzdCA1IHNlY29uZHMKIAogICAgIGRlZiB0ZXN0X0JvdW5kZWRTZW1hcGhvcmVfbGltaXQoc2VsZik6CiAgICAgICAgICMgQm91bmRlZFNlbWFwaG9yZSBzaG91bGQgcmFpc2UgVmFsdWVFcnJvciBpZiByZWxlYXNlZCB0b28gb2Z0ZW4uCkBAIC00OTAsMTQgKzYxNiw0OCBAQAogICAgICAgICAgICAgICAgIHQuam9pbigpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBicy5yZWxlYXNlKQogCi1jbGFzcyBUaHJlYWRKb2luT25TaHV0ZG93bihCYXNlVGVzdENhc2UpOgorICAgIEBjcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9mcmFtZV90c3RhdGVfdHJhY2luZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTQ0MzI6IENyYXNoIHdoZW4gYSBnZW5lcmF0b3IgaXMgY3JlYXRlZCBpbiBhIEMgdGhyZWFkIHRoYXQgaXMKKyAgICAgICAgIyBkZXN0cm95ZWQgd2hpbGUgdGhlIGdlbmVyYXRvciBpcyBzdGlsbCB1c2VkLiBUaGUgaXNzdWUgd2FzIHRoYXQgYQorICAgICAgICAjIGdlbmVyYXRvciBjb250YWlucyBhIGZyYW1lLCBhbmQgdGhlIGZyYW1lIGtlcHQgYSByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgICMgUHl0aG9uIHN0YXRlIG9mIHRoZSBkZXN0cm95ZWQgQyB0aHJlYWQuIFRoZSBjcmFzaCBvY2N1cnMgd2hlbiBhIHRyYWNlCisgICAgICAgICMgZnVuY3Rpb24gaXMgc2V0dXAuCiAKLSAgICAjIEJldHdlZW4gZm9yaygpIGFuZCBleGVjKCksIG9ubHkgYXN5bmMtc2FmZSBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgKGlzc3VlcwotICAgICMgIzEyMzE2IGFuZCAjMTE4NzApLCBhbmQgZm9yaygpIGZyb20gYSB3b3JrZXIgdGhyZWFkIGlzIGtub3duIHRvIHRyaWdnZXIKLSAgICAjIHByb2JsZW1zIHdpdGggc29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoaXNzdWUgIzM4NjMpOiBza2lwIHByb2JsZW1hdGljIHRlc3RzCi0gICAgIyBvbiBwbGF0Zm9ybXMga25vd24gdG8gYmVoYXZlIGJhZGx5LgotICAgIHBsYXRmb3Jtc190b19za2lwID0gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnb3MyZW14JywgJ2hwLXV4MTEnKQorICAgICAgICBkZWYgbm9vcF90cmFjZShmcmFtZSwgZXZlbnQsIGFyZyk6CisgICAgICAgICAgICAjIG5vIG9wZXJhdGlvbgorICAgICAgICAgICAgcmV0dXJuIG5vb3BfdHJhY2UKKworICAgICAgICBkZWYgZ2VuZXJhdG9yKCk6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHlpZWxkICJnZW5lcmVhdG9yIgorCisgICAgICAgIGRlZiBjYWxsYmFjaygpOgorICAgICAgICAgICAgaWYgY2FsbGJhY2suZ2VuIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY2FsbGJhY2suZ2VuID0gZ2VuZXJhdG9yKCkKKyAgICAgICAgICAgIHJldHVybiBuZXh0KGNhbGxiYWNrLmdlbikKKyAgICAgICAgY2FsbGJhY2suZ2VuID0gTm9uZQorCisgICAgICAgIG9sZF90cmFjZSA9IHN5cy5nZXR0cmFjZSgpCisgICAgICAgIHN5cy5zZXR0cmFjZShub29wX3RyYWNlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEluc3RhbGwgYSB0cmFjZSBmdW5jdGlvbgorICAgICAgICAgICAgdGhyZWFkaW5nLnNldHRyYWNlKG5vb3BfdHJhY2UpCisKKyAgICAgICAgICAgICMgQ3JlYXRlIGEgZ2VuZXJhdG9yIGluIGEgQyB0aHJlYWQgd2hpY2ggZXhpdHMgYWZ0ZXIgdGhlIGNhbGwKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgICAgIF90ZXN0Y2FwaS5jYWxsX2luX3RlbXBvcmFyeV9jX3RocmVhZChjYWxsYmFjaykKKworICAgICAgICAgICAgIyBDYWxsIHRoZSBnZW5lcmF0b3IgaW4gYSBkaWZmZXJlbnQgUHl0aG9uIHRocmVhZCwgY2hlY2sgdGhhdCB0aGUKKyAgICAgICAgICAgICMgZ2VuZXJhdG9yIGRpZG4ndCBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXN0cm95ZWQgdGhyZWFkIHN0YXRlCisgICAgICAgICAgICBmb3IgdGVzdCBpbiByYW5nZSgzKToKKyAgICAgICAgICAgICAgICAjIFRoZSB0cmFjZSBmdW5jdGlvbiBpcyBzdGlsbCBjYWxsZWQgaGVyZQorICAgICAgICAgICAgICAgIGNhbGxiYWNrKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zZXR0cmFjZShvbGRfdHJhY2UpCisKKworY2xhc3MgVGhyZWFkSm9pbk9uU2h1dGRvd24oQmFzZVRlc3RDYXNlKToKIAogICAgIGRlZiBfcnVuX2FuZF9qb2luKHNlbGYsIHNjcmlwdCk6CiAgICAgICAgIHNjcmlwdCA9ICIiImlmIDE6CkBAIC01NzAsMTQ0ICs3MzAsOCBAQAogICAgICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3J1bl9hbmRfam9pbihzY3JpcHQpCiAKLSAgICBkZWYgYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNlbGYsIHNjcmlwdCwgZXhwZWN0ZWRfb3V0cHV0KToKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBzY3JpcHQpCi0gICAgICAgIGRhdGEgPSBvdXQuZGVjb2RlKCkucmVwbGFjZSgnXHInLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9vdXRwdXQpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAibmVlZHMgb3MuZm9yaygpIikKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQotICAgIGRlZiB0ZXN0XzRfam9pbmluZ19hY3Jvc3NfZm9ya19pbl93b3JrZXJfdGhyZWFkKHNlbGYpOgotICAgICAgICAjIFRoZXJlIHVzZWQgdG8gYmUgYSBwb3NzaWJsZSBkZWFkbG9jayB3aGVuIGZvcmtpbmcgZnJvbSBhIGNoaWxkCi0gICAgICAgICMgdGhyZWFkLiAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2NjQzLgotCi0gICAgICAgICMgVGhlIHNjcmlwdCB0YWtlcyB0aGUgZm9sbG93aW5nIHN0ZXBzOgotICAgICAgICAjIC0gVGhlIG1haW4gdGhyZWFkIGluIHRoZSBwYXJlbnQgcHJvY2VzcyBzdGFydHMgYSBuZXcgdGhyZWFkIGFuZCB0aGVuCi0gICAgICAgICMgICB0cmllcyB0byBqb2luIGl0LgotICAgICAgICAjIC0gVGhlIGpvaW4gb3BlcmF0aW9uIGFjcXVpcmVzIHRoZSBMb2NrIGluc2lkZSB0aGUgdGhyZWFkJ3MgX2Jsb2NrCi0gICAgICAgICMgICBDb25kaXRpb24uICAoU2VlIHRocmVhZGluZy5weTpUaHJlYWQuam9pbigpLikKLSAgICAgICAgIyAtIFdlIHN0dWIgb3V0IHRoZSBhY3F1aXJlIG1ldGhvZCBvbiB0aGUgY29uZGl0aW9uIHRvIGZvcmNlIGl0IHRvIHdhaXQKLSAgICAgICAgIyAgIHVudGlsIHRoZSBjaGlsZCB0aHJlYWQgZm9ya3MuICAoU2VlIExPQ0sgQUNRVUlSRUQgSEVSRSkKLSAgICAgICAgIyAtIFRoZSBjaGlsZCB0aHJlYWQgZm9ya3MuICAoU2VlIExPQ0sgSEVMRCBhbmQgV09SS0VSIFRIUkVBRCBGT1JLUwotICAgICAgICAjICAgSEVSRSkKLSAgICAgICAgIyAtIFRoZSBtYWluIHRocmVhZCBvZiB0aGUgcGFyZW50IHByb2Nlc3MgZW50ZXJzIENvbmRpdGlvbi53YWl0KCksCi0gICAgICAgICMgICB3aGljaCByZWxlYXNlcyB0aGUgbG9jayBvbiB0aGUgY2hpbGQgdGhyZWFkLgotICAgICAgICAjIC0gVGhlIGNoaWxkIHByb2Nlc3MgcmV0dXJucy4gIFdpdGhvdXQgdGhlIG5lY2Vzc2FyeSBmaXgsIHdoZW4gdGhlCi0gICAgICAgICMgICBtYWluIHRocmVhZCBvZiB0aGUgY2hpbGQgcHJvY2VzcyAod2hpY2ggdXNlZCB0byBiZSB0aGUgY2hpbGQgdGhyZWFkCi0gICAgICAgICMgICBpbiB0aGUgcGFyZW50IHByb2Nlc3MpIGF0dGVtcHRzIHRvIGV4aXQsIGl0IHdpbGwgdHJ5IHRvIGFjcXVpcmUgdGhlCi0gICAgICAgICMgICBsb2NrIGluIHRoZSBUaHJlYWQuX2Jsb2NrIENvbmRpdGlvbiBvYmplY3QgYW5kIGhhbmcsIGJlY2F1c2UgdGhlCi0gICAgICAgICMgICBsb2NrIHdhcyBoZWxkIGFjcm9zcyB0aGUgZm9yay4KLQotICAgICAgICBzY3JpcHQgPSAiIiJpZiAxOgotICAgICAgICAgICAgaW1wb3J0IG9zLCB0aW1lLCB0aHJlYWRpbmcKLQotICAgICAgICAgICAgZmluaXNoX2pvaW4gPSBGYWxzZQotICAgICAgICAgICAgc3RhcnRfZm9yayA9IEZhbHNlCi0KLSAgICAgICAgICAgIGRlZiB3b3JrZXIoKToKLSAgICAgICAgICAgICAgICAjIFdhaXQgdW50aWwgdGhpcyB0aHJlYWQncyBsb2NrIGlzIGFjcXVpcmVkIGJlZm9yZSBmb3JraW5nIHRvCi0gICAgICAgICAgICAgICAgIyBjcmVhdGUgdGhlIGRlYWRsb2NrLgotICAgICAgICAgICAgICAgIGdsb2JhbCBmaW5pc2hfam9pbgotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzdGFydF9mb3JrOgotICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0gICAgICAgICAgICAgICAgIyBMT0NLIEhFTEQ6IE1haW4gdGhyZWFkIGhvbGRzIGxvY2sgYWNyb3NzIHRoaXMgY2FsbC4KLSAgICAgICAgICAgICAgICBjaGlsZHBpZCA9IG9zLmZvcmsoKQotICAgICAgICAgICAgICAgIGZpbmlzaF9qb2luID0gVHJ1ZQotICAgICAgICAgICAgICAgIGlmIGNoaWxkcGlkICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgUGFyZW50IHByb2Nlc3MganVzdCB3YWl0cyBmb3IgY2hpbGQuCi0gICAgICAgICAgICAgICAgICAgIG9zLndhaXRwaWQoY2hpbGRwaWQsIDApCi0gICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIHNob3VsZCBqdXN0IHJldHVybi4KLQotICAgICAgICAgICAgdyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXdvcmtlcikKLQotICAgICAgICAgICAgIyBTdHViIG91dCB0aGUgcHJpdmF0ZSBjb25kaXRpb24gdmFyaWFibGUncyBsb2NrIGFjcXVpcmUgbWV0aG9kLgotICAgICAgICAgICAgIyBUaGlzIGFjcXVpcmVzIHRoZSBsb2NrIGFuZCB0aGVuIHdhaXRzIHVudGlsIHRoZSBjaGlsZCBoYXMgZm9ya2VkCi0gICAgICAgICAgICAjIGJlZm9yZSByZXR1cm5pbmcsIHdoaWNoIHdpbGwgcmVsZWFzZSB0aGUgbG9jayBzb29uIGFmdGVyLiAgSWYKLSAgICAgICAgICAgICMgc29tZW9uZSBlbHNlIHRyaWVzIHRvIGZpeCB0aGlzIHRlc3QgY2FzZSBieSBhY3F1aXJpbmcgdGhpcyBsb2NrCi0gICAgICAgICAgICAjIGJlZm9yZSBmb3JraW5nIGluc3RlYWQgb2YgcmVzZXR0aW5nIGl0LCB0aGUgdGVzdCBjYXNlIHdpbGwKLSAgICAgICAgICAgICMgZGVhZGxvY2sgd2hlbiBpdCBzaG91bGRuJ3QuCi0gICAgICAgICAgICBjb25kaXRpb24gPSB3Ll9ibG9jawotICAgICAgICAgICAgb3JpZ19hY3F1aXJlID0gY29uZGl0aW9uLmFjcXVpcmUKLSAgICAgICAgICAgIGNhbGxfY291bnRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICAgICAgICAgIGNhbGxfY291bnQgPSAwCi0gICAgICAgICAgICBkZWYgbXlfYWNxdWlyZSgpOgotICAgICAgICAgICAgICAgIGdsb2JhbCBjYWxsX2NvdW50Ci0gICAgICAgICAgICAgICAgZ2xvYmFsIHN0YXJ0X2ZvcmsKLSAgICAgICAgICAgICAgICBvcmlnX2FjcXVpcmUoKSAgIyBMT0NLIEFDUVVJUkVEIEhFUkUKLSAgICAgICAgICAgICAgICBzdGFydF9mb3JrID0gVHJ1ZQotICAgICAgICAgICAgICAgIGlmIGNhbGxfY291bnQgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgbm90IGZpbmlzaF9qb2luOgotICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAgIyBXT1JLRVIgVEhSRUFEIEZPUktTIEhFUkUKLSAgICAgICAgICAgICAgICB3aXRoIGNhbGxfY291bnRfbG9jazoKLSAgICAgICAgICAgICAgICAgICAgY2FsbF9jb3VudCArPSAxCi0gICAgICAgICAgICBjb25kaXRpb24uYWNxdWlyZSA9IG15X2FjcXVpcmUKLQotICAgICAgICAgICAgdy5zdGFydCgpCi0gICAgICAgICAgICB3LmpvaW4oKQotICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiBtYWluJykKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydFNjcmlwdEhhc091dHB1dChzY3JpcHQsICJlbmQgb2YgbWFpblxuIikKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCi0gICAgZGVmIHRlc3RfNV9jbGVhcl93YWl0ZXJfbG9ja3NfdG9fYXZvaWRfY3Jhc2goc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBhIHNwYXduZWQgdGhyZWFkIHRoYXQgZm9ya3MgZG9lc24ndCBzZWdmYXVsdCBvbiBjZXJ0YWluCi0gICAgICAgICMgcGxhdGZvcm1zLCBuYW1lbHkgT1MgWC4gIFRoaXMgdXNlZCB0byBoYXBwZW4gaWYgdGhlcmUgd2FzIGEgd2FpdGVyCi0gICAgICAgICMgbG9jayBpbiB0aGUgdGhyZWFkJ3MgY29uZGl0aW9uIHZhcmlhYmxlJ3Mgd2FpdGVycyBsaXN0LiAgRXZlbiB0aG91Z2gKLSAgICAgICAgIyB3ZSBrbm93IHRoZSBsb2NrIHdpbGwgYmUgaGVsZCBhY3Jvc3MgdGhlIGZvcmssIGl0IGlzIG5vdCBzYWZlIHRvCi0gICAgICAgICMgcmVsZWFzZSBsb2NrcyBoZWxkIGFjcm9zcyBmb3JrcyBvbiBhbGwgcGxhdGZvcm1zLCBzbyByZWxlYXNpbmcgdGhlCi0gICAgICAgICMgd2FpdGVyIGxvY2sgY2F1c2VkIGEgc2VnZmF1bHQgb24gT1MgWC4gIEZ1cnRoZXJtb3JlLCBzaW5jZSBsb2NrcyBvbgotICAgICAgICAjIE9TIFggYXJlIChhcyBvZiB0aGlzIHdyaXRpbmcpIGltcGxlbWVudGVkIHdpdGggYSBtdXRleCArIGNvbmRpdGlvbgotICAgICAgICAjIHZhcmlhYmxlIGluc3RlYWQgb2YgYSBzZW1hcGhvcmUsIHdoaWxlIHdlIGtub3cgdGhhdCB0aGUgUHl0aG9uLWxldmVsCi0gICAgICAgICMgbG9jayB3aWxsIGJlIGFjcXVpcmVkLCB3ZSBjYW4ndCBrbm93IGlmIHRoZSBpbnRlcm5hbCBtdXRleCB3aWxsIGJlCi0gICAgICAgICMgYWNxdWlyZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGZvcmsuCi0KLSAgICAgICAgc2NyaXB0ID0gIiIiaWYgVHJ1ZToKLSAgICAgICAgICAgIGltcG9ydCBvcywgdGltZSwgdGhyZWFkaW5nCi0KLSAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBGYWxzZQotCi0gICAgICAgICAgICBkZWYgd29ya2VyKCk6Ci0gICAgICAgICAgICAgICAgIyBXYWl0IHVudGlsIHRoZSBtYWluIHRocmVhZCBoYXMgYXR0ZW1wdGVkIHRvIGpvaW4gdGhpcyB0aHJlYWQKLSAgICAgICAgICAgICAgICAjIGJlZm9yZSBjb250aW51aW5nLgotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzdGFydF9mb3JrOgotICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0gICAgICAgICAgICAgICAgY2hpbGRwaWQgPSBvcy5mb3JrKCkKLSAgICAgICAgICAgICAgICBpZiBjaGlsZHBpZCAhPSAwOgotICAgICAgICAgICAgICAgICAgICAjIFBhcmVudCBwcm9jZXNzIGp1c3Qgd2FpdHMgZm9yIGNoaWxkLgotICAgICAgICAgICAgICAgICAgICAoY3BpZCwgcmMpID0gb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGNwaWQgPT0gY2hpbGRwaWQKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHJjID09IDAKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiB3b3JrZXIgdGhyZWFkJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgc2hvdWxkIGp1c3QgcmV0dXJuLgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgIHcgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrZXIpCi0KLSAgICAgICAgICAgICMgU3R1YiBvdXQgdGhlIHByaXZhdGUgY29uZGl0aW9uIHZhcmlhYmxlJ3MgX3JlbGVhc2Vfc2F2ZSBtZXRob2QuCi0gICAgICAgICAgICAjIFRoaXMgcmVsZWFzZXMgdGhlIGNvbmRpdGlvbidzIGxvY2sgYW5kIGZsaXBzIHRoZSBnbG9iYWwgdGhhdAotICAgICAgICAgICAgIyBjYXVzZXMgdGhlIHdvcmtlciB0byBmb3JrLiAgQXQgdGhpcyBwb2ludCwgdGhlIHByb2JsZW1hdGljIHdhaXRlcgotICAgICAgICAgICAgIyBsb2NrIGhhcyBiZWVuIGFjcXVpcmVkIG9uY2UgYnkgdGhlIHdhaXRlciBhbmQgaGFzIGJlZW4gcHV0IG9udG8KLSAgICAgICAgICAgICMgdGhlIHdhaXRlcnMgbGlzdC4KLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IHcuX2Jsb2NrCi0gICAgICAgICAgICBvcmlnX3JlbGVhc2Vfc2F2ZSA9IGNvbmRpdGlvbi5fcmVsZWFzZV9zYXZlCi0gICAgICAgICAgICBkZWYgbXlfcmVsZWFzZV9zYXZlKCk6Ci0gICAgICAgICAgICAgICAgZ2xvYmFsIHN0YXJ0X2ZvcmsKLSAgICAgICAgICAgICAgICBvcmlnX3JlbGVhc2Vfc2F2ZSgpCi0gICAgICAgICAgICAgICAgIyBXYWl0ZXIgbG9jayBoZWxkIGhlcmUsIGNvbmRpdGlvbiBsb2NrIHJlbGVhc2VkLgotICAgICAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBUcnVlCi0gICAgICAgICAgICBjb25kaXRpb24uX3JlbGVhc2Vfc2F2ZSA9IG15X3JlbGVhc2Vfc2F2ZQotCi0gICAgICAgICAgICB3LnN0YXJ0KCkKLSAgICAgICAgICAgIHcuam9pbigpCi0gICAgICAgICAgICBwcmludCgnZW5kIG9mIG1haW4gdGhyZWFkJykKLSAgICAgICAgICAgICIiIgotICAgICAgICBvdXRwdXQgPSAiZW5kIG9mIHdvcmtlciB0aHJlYWRcbmVuZCBvZiBtYWluIHRocmVhZFxuIgotICAgICAgICBzZWxmLmFzc2VydFNjcmlwdEhhc091dHB1dChzY3JpcHQsIG91dHB1dCkKLQotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCi0gICAgZGVmIHRlc3RfNl9kYWVtb25fdGhyZWFkcyhzZWxmKToKKyAgICBkZWYgdGVzdF80X2RhZW1vbl90aHJlYWRzKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgYSBkYWVtb24gdGhyZWFkIGNhbm5vdCBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIgb24gc2h1dGRvd24KICAgICAgICAgIyBieSBtYW5pcHVsYXRpbmcgaW50ZXJuYWwgc3RydWN0dXJlcyB0aGF0IGFyZSBiZWluZyBkaXNwb3NlZCBvZiBpbgogICAgICAgICAjIHRoZSBtYWluIHRocmVhZC4KQEAgLTc3Myw0NSArNzk3LDExMSBAQAogICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgICAgICAgdC5qb2luKCkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQorICAgIGRlZiB0ZXN0X2NsZWFyX3RocmVhZHNfc3RhdGVzX2FmdGVyX2Zvcmsoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE3MDk0OiBjaGVjayB0aGF0IHRocmVhZHMgc3RhdGVzIGFyZSBjbGVhcmVkIGFmdGVyIGZvcmsoKQorCisgICAgICAgICMgc3RhcnQgYSBidW5jaCBvZiB0aHJlYWRzCisgICAgICAgIHRocmVhZHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxNik6CisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhIDogdGltZS5zbGVlcCgwLjMpKQorICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodCkKKyAgICAgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCB0aHJlYWRzIHN0YXRlcyBoYXZlIGJlZW4gY2xlYXJlZAorICAgICAgICAgICAgaWYgbGVuKHN5cy5fY3VycmVudF9mcmFtZXMoKSkgPT0gMToKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgXywgc3RhdHVzID0gb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cykKKworICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKworCitjbGFzcyBTdWJpbnRlcnBUaHJlYWRpbmdUZXN0cyhCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdGhyZWFkc19qb2luKHNlbGYpOgorICAgICAgICAjIE5vbi1kYWVtb24gdGhyZWFkcyBzaG91bGQgYmUgam9pbmVkIGF0IHN1YmludGVycHJldGVyIHNodXRkb3duCisgICAgICAgICMgKGlzc3VlICMxODgwOCkKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgdykKKyAgICAgICAgY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgICAgICAgICBpbXBvcnQgdGltZQorCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgICMgU2xlZXAgYSBiaXQgc28gdGhhdCB0aGUgdGhyZWFkIGlzIHN0aWxsIHJ1bm5pbmcgd2hlbgorICAgICAgICAgICAgICAgICMgUHlfRW5kSW50ZXJwcmV0ZXIgaXMgY2FsbGVkLgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wNSkKKyAgICAgICAgICAgICAgICBvcy53cml0ZSglZCwgYiJ4IikKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIiAlICh3LCkKKyAgICAgICAgcmV0ID0gdGVzdC5zdXBwb3J0LnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgICMgVGhlIHRocmVhZCB3YXMgam9pbmVkIHByb3Blcmx5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQociwgMSksIGIieCIpCisKKyAgICBkZWYgdGVzdF90aHJlYWRzX2pvaW5fMihzZWxmKToKKyAgICAgICAgIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBkZWxheSBnZXRzIGludHJvZHVjZWQgYWZ0ZXIgdGhlIHRocmVhZCdzCisgICAgICAgICMgUHl0aG9uIGNvZGUgcmV0dXJuZWQgYnV0IGJlZm9yZSB0aGUgdGhyZWFkIHN0YXRlIGlzIGRlbGV0ZWQuCisgICAgICAgICMgVG8gYWNoaWV2ZSB0aGlzLCB3ZSByZWdpc3RlciBhIHRocmVhZC1sb2NhbCBvYmplY3Qgd2hpY2ggc2xlZXBzCisgICAgICAgICMgYSBiaXQgd2hlbiBkZWFsbG9jYXRlZC4KKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgdykKKyAgICAgICAgY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgICAgICAgICBpbXBvcnQgdGltZQorCisgICAgICAgICAgICBjbGFzcyBTbGVlcGVyOgorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCisKKyAgICAgICAgICAgIHRscyA9IHRocmVhZGluZy5sb2NhbCgpCisKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgIyBTbGVlcCBhIGJpdCBzbyB0aGF0IHRoZSB0aHJlYWQgaXMgc3RpbGwgcnVubmluZyB3aGVuCisgICAgICAgICAgICAgICAgIyBQeV9FbmRJbnRlcnByZXRlciBpcyBjYWxsZWQuCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorICAgICAgICAgICAgICAgIHRscy54ID0gU2xlZXBlcigpCisgICAgICAgICAgICAgICAgb3Mud3JpdGUoJWQsIGIieCIpCisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKS5zdGFydCgpCisgICAgICAgICAgICAiIiIgJSAodywpCisgICAgICAgIHJldCA9IHRlc3Quc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAwKQorICAgICAgICAjIFRoZSB0aHJlYWQgd2FzIGpvaW5lZCBwcm9wZXJseS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5yZWFkKHIsIDEpLCBiIngiKQorCiAgICAgQGNweXRob25fb25seQotICAgIEB1bml0dGVzdC5za2lwSWYoX3Rlc3RjYXBpIGlzIE5vbmUsICJuZWVkIF90ZXN0Y2FwaSBtb2R1bGUiKQotICAgIGRlZiB0ZXN0X2ZyYW1lX3RzdGF0ZV90cmFjaW5nKHNlbGYpOgotICAgICAgICAjIElzc3VlICMxNDQzMjogQ3Jhc2ggd2hlbiBhIGdlbmVyYXRvciBpcyBjcmVhdGVkIGluIGEgQyB0aHJlYWQgdGhhdCBpcwotICAgICAgICAjIGRlc3Ryb3llZCB3aGlsZSB0aGUgZ2VuZXJhdG9yIGlzIHN0aWxsIHVzZWQuIFRoZSBpc3N1ZSB3YXMgdGhhdCBhCi0gICAgICAgICMgZ2VuZXJhdG9yIGNvbnRhaW5zIGEgZnJhbWUsIGFuZCB0aGUgZnJhbWUga2VwdCBhIHJlZmVyZW5jZSB0byB0aGUKLSAgICAgICAgIyBQeXRob24gc3RhdGUgb2YgdGhlIGRlc3Ryb3llZCBDIHRocmVhZC4gVGhlIGNyYXNoIG9jY3VycyB3aGVuIGEgdHJhY2UKLSAgICAgICAgIyBmdW5jdGlvbiBpcyBzZXR1cC4KKyAgICBkZWYgdGVzdF9kYWVtb25fdGhyZWFkc19mYXRhbF9lcnJvcihzZWxmKToKKyAgICAgICAgc3ViaW50ZXJwX2NvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcworICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZworICAgICAgICAgICAgaW1wb3J0IHRpbWUKIAotICAgICAgICBkZWYgbm9vcF90cmFjZShmcmFtZSwgZXZlbnQsIGFyZyk6Ci0gICAgICAgICAgICAjIG5vIG9wZXJhdGlvbgotICAgICAgICAgICAgcmV0dXJuIG5vb3BfdHJhY2UKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGRhZW1vbiB0aHJlYWQgaXMgc3RpbGwgcnVubmluZyB3aGVuCisgICAgICAgICAgICAgICAgIyBQeV9FbmRJbnRlcnByZXRlciBpcyBjYWxsZWQuCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYsIGRhZW1vbj1UcnVlKS5zdGFydCgpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgc2NyaXB0ID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCiAKLSAgICAgICAgZGVmIGdlbmVyYXRvcigpOgotICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICB5aWVsZCAiZ2VuZXJlYXRvciIKLQotICAgICAgICBkZWYgY2FsbGJhY2soKToKLSAgICAgICAgICAgIGlmIGNhbGxiYWNrLmdlbiBpcyBOb25lOgotICAgICAgICAgICAgICAgIGNhbGxiYWNrLmdlbiA9IGdlbmVyYXRvcigpCi0gICAgICAgICAgICByZXR1cm4gbmV4dChjYWxsYmFjay5nZW4pCi0gICAgICAgIGNhbGxiYWNrLmdlbiA9IE5vbmUKLQotICAgICAgICBvbGRfdHJhY2UgPSBzeXMuZ2V0dHJhY2UoKQotICAgICAgICBzeXMuc2V0dHJhY2Uobm9vcF90cmFjZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBJbnN0YWxsIGEgdHJhY2UgZnVuY3Rpb24KLSAgICAgICAgICAgIHRocmVhZGluZy5zZXR0cmFjZShub29wX3RyYWNlKQotCi0gICAgICAgICAgICAjIENyZWF0ZSBhIGdlbmVyYXRvciBpbiBhIEMgdGhyZWFkIHdoaWNoIGV4aXRzIGFmdGVyIHRoZSBjYWxsCi0gICAgICAgICAgICBfdGVzdGNhcGkuY2FsbF9pbl90ZW1wb3JhcnlfY190aHJlYWQoY2FsbGJhY2spCi0KLSAgICAgICAgICAgICMgQ2FsbCB0aGUgZ2VuZXJhdG9yIGluIGEgZGlmZmVyZW50IFB5dGhvbiB0aHJlYWQsIGNoZWNrIHRoYXQgdGhlCi0gICAgICAgICAgICAjIGdlbmVyYXRvciBkaWRuJ3Qga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgZGVzdHJveWVkIHRocmVhZCBzdGF0ZQotICAgICAgICAgICAgZm9yIHRlc3QgaW4gcmFuZ2UoMyk6Ci0gICAgICAgICAgICAgICAgIyBUaGUgdHJhY2UgZnVuY3Rpb24gaXMgc3RpbGwgY2FsbGVkIGhlcmUKLSAgICAgICAgICAgICAgICBjYWxsYmFjaygpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc2V0dHJhY2Uob2xkX3RyYWNlKQorICAgICAgICAgICAgX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoJXIpCisgICAgICAgICAgICAiIiIgJSAoc3ViaW50ZXJwX2NvZGUsKQorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoIi1jIiwgc2NyaXB0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJGYXRhbCBQeXRob24gZXJyb3I6IFB5X0VuZEludGVycHJldGVyOiAiCisgICAgICAgICAgICAgICAgICAgICAgIm5vdCB0aGUgbGFzdCB0aHJlYWQiLCBlcnIuZGVjb2RlKCkpCiAKIAogY2xhc3MgVGhyZWFkaW5nRXhjZXB0aW9uVGVzdHMoQmFzZVRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weQppbmRleCBmOTc1YTc1Li5iMTAwNGU2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CkBAIC04LDcgKzgsNyBAQAogdGhyZWFkID0gaW1wb3J0X21vZHVsZSgnX3RocmVhZCcpCiBpbXBvcnQgdGltZQogCi1pZiBzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ29zMicpIG9yIHN5cy5wbGF0Zm9ybT09J3Jpc2Nvcyc6CitpZiAoc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJyk6CiAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbid0IHRlc3Qgc2lnbmFsIG9uICVzIiAlIHN5cy5wbGF0Zm9ybSkKIAogcHJvY2Vzc19waWQgPSBvcy5nZXRwaWQoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF90aW1lLnB5CmluZGV4IDFhNGQ4NzMuLmI4NzIxYTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGltZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RpbWUucHkKQEAgLTM3MSw2ICszNzEsMTQgQEAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHRpbWUsICdtb25vdG9uaWMnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnbmVlZCB0aW1lLm1vbm90b25pYycpCiAgICAgZGVmIHRlc3RfbW9ub3RvbmljKHNlbGYpOgorICAgICAgICAjIG1vbm90b25pYygpIHNob3VsZCBub3QgZ28gYmFja3dhcmQKKyAgICAgICAgdGltZXMgPSBbdGltZS5tb25vdG9uaWMoKSBmb3IgbiBpbiByYW5nZSgxMDApXQorICAgICAgICB0MSA9IHRpbWVzWzBdCisgICAgICAgIGZvciB0MiBpbiB0aW1lc1sxOl06CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCh0MiwgdDEsICJ0aW1lcz0lcyIgJSB0aW1lcykKKyAgICAgICAgICAgIHQxID0gdDIKKworICAgICAgICAjIG1vbm90b25pYygpIGluY2x1ZGVzIHRpbWUgZWxhcHNlZCBkdXJpbmcgYSBzbGVlcAogICAgICAgICB0MSA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICAgICAgIHQyID0gdGltZS5tb25vdG9uaWMoKQpAQCAtMzc5LDYgKzM4Nyw3IEBACiAgICAgICAgICMgSXNzdWUgIzIwMTAxOiBPbiBzb21lIFdpbmRvd3MgbWFjaGluZXMsIGR0IG1heSBiZSBzbGlnaHRseSBsb3cKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuNDUgPD0gZHQgPD0gMS4wLCBkdCkKIAorICAgICAgICAjIG1vbm90b25pYygpIGlzIGEgbW9ub3RvbmljIGJ1dCBub24gYWRqdXN0YWJsZSBjbG9jawogICAgICAgICBpbmZvID0gdGltZS5nZXRfY2xvY2tfaW5mbygnbW9ub3RvbmljJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluZm8ubW9ub3RvbmljKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8uYWRqdXN0YWJsZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQppbmRleCBkY2YyMDFiLi43MDNjNDNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAgICAgIHNvY2suY29ubmVjdCgod2hpdGVob2xlKSkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FQ09OTlJFRlVTRUQ6CiAgICAgICAgICAgICAgICAgc2tpcCA9IEZhbHNlCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy5weQppbmRleCBmOTcxNTE1Li4xYmY3ZDU0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Rvb2xzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMucHkKQEAgLTYsNiArNiw3IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHN5cworaW1wb3J0IGltcG9ydGxpYi5fYm9vdHN0cmFwCiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCkBAIC00MDUsOCArNDA2LDggQEAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzY3JpcHRzZGlyLCAncGRlcHMucHknKQotICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ3BkZXBzJywgcGF0aCkKLSAgICAgICAgc2VsZi5wZGVwcyA9IGxvYWRlci5sb2FkX21vZHVsZSgpCisgICAgICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbigncGRlcHMnLCBwYXRoKQorICAgICAgICBzZWxmLnBkZXBzID0gaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmxvYWQoKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CkBAIC00MzAsOCArNDMxLDggQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzY3JpcHRzZGlyLCAnZ3Byb2YyaHRtbC5weScpCi0gICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignZ3Byb2YyaHRtbCcsIHBhdGgpCi0gICAgICAgIHNlbGYuZ3Byb2YgPSBsb2FkZXIubG9hZF9tb2R1bGUoKQorICAgICAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oJ2dwcm9mMmh0bWwnLCBwYXRoKQorICAgICAgICBzZWxmLmdwcm9mID0gaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmxvYWQoKQogICAgICAgICBvbGRhcmd2ID0gc3lzLmFyZ3YKICAgICAgICAgZGVmIGZpeHVwKCk6CiAgICAgICAgICAgICBzeXMuYXJndiA9IG9sZGFyZ3YKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKaW5kZXggYzM4YzY1Yi4uYzI5NTU2MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKQEAgLTE3MiwzMiArMTcyLDc2IEBACiAKIGNsYXNzIFRyYWNlYmFja0Zvcm1hdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBzb21lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ2JsYWgnKQorCiAgICAgQGNweXRob25fb25seQotICAgIGRlZiB0ZXN0X3RyYWNlYmFja19mb3JtYXQoc2VsZik6CisgICAgZGVmIGNoZWNrX3RyYWNlYmFja19mb3JtYXQoc2VsZiwgY2xlYW51cF9mdW5jPU5vbmUpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgdHJhY2ViYWNrX3ByaW50CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdibGFoJykKKyAgICAgICAgICAgIHNlbGYuc29tZV9leGNlcHRpb24oKQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICB0eXBlXywgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIGNsZWFudXBfZnVuYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIENsZWFyIHRoZSBpbm5lciBmcmFtZXMsIG5vdCB0aGlzIG9uZQorICAgICAgICAgICAgICAgIGNsZWFudXBfZnVuYyh0Yi50Yl9uZXh0KQogICAgICAgICAgICAgdHJhY2ViYWNrX2ZtdCA9ICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF90Yih0YikpCiAgICAgICAgICAgICBmaWxlXyA9IFN0cmluZ0lPKCkKICAgICAgICAgICAgIHRyYWNlYmFja19wcmludCh0YiwgZmlsZV8pCiAgICAgICAgICAgICBweXRob25fZm10ICA9IGZpbGVfLmdldHZhbHVlKCkKKyAgICAgICAgICAgICMgQ2FsbCBhbGwgX3RiIGFuZCBfZXhjIGZ1bmN0aW9ucworICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHRic3RkZXJyOgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF90Yih0YikKKyAgICAgICAgICAgIHRiZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF90Yih0YiwgZmlsZT10YmZpbGUpCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgZXhjc3RkZXJyOgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgZXhjZm10ID0gdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgICAgICAgICAgZXhjZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1leGNmaWxlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoInVuYWJsZSB0byBjcmVhdGUgdGVzdCB0cmFjZWJhY2sgc3RyaW5nIikKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IFB5dGhvbiBhbmQgdGhlIHRyYWNlYmFjayBtb2R1bGUgZm9ybWF0IHRoZSBzYW1lIHRoaW5nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrX2ZtdCwgcHl0aG9uX2ZtdCkKKyAgICAgICAgIyBOb3cgdmVyaWZ5IHRoZSBfdGIgZnVuYyBvdXRwdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YnN0ZGVyci5nZXR2YWx1ZSgpLCB0YmZpbGUuZ2V0dmFsdWUoKSkKKyAgICAgICAgIyBOb3cgdmVyaWZ5IHRoZSBfZXhjIGZ1bmMgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjc3RkZXJyLmdldHZhbHVlKCksIGV4Y2ZpbGUuZ2V0dmFsdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNmbXQsIGV4Y2ZpbGUuZ2V0dmFsdWUoKSkKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSB0cmFjZWJhY2sgaXMgcHJvcGVybHkgaW5kZW50ZWQuCiAgICAgICAgIHRiX2xpbmVzID0gcHl0aG9uX2ZtdC5zcGxpdGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGJfbGluZXMpLCAzKQotICAgICAgICBiYW5uZXIsIGxvY2F0aW9uLCBzb3VyY2VfbGluZSA9IHRiX2xpbmVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRiX2xpbmVzKSwgNSkKKyAgICAgICAgYmFubmVyID0gdGJfbGluZXNbMF0KKyAgICAgICAgbG9jYXRpb24sIHNvdXJjZV9saW5lID0gdGJfbGluZXNbLTI6XQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFubmVyLnN0YXJ0c3dpdGgoJ1RyYWNlYmFjaycpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jYXRpb24uc3RhcnRzd2l0aCgnICBGaWxlJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb3VyY2VfbGluZS5zdGFydHN3aXRoKCcgICAgcmFpc2UnKSkKIAorICAgIGRlZiB0ZXN0X3RyYWNlYmFja19mb3JtYXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdHJhY2ViYWNrX2Zvcm1hdCgpCisKKyAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0X3dpdGhfY2xlYXJlZF9mcmFtZXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCB0cmFjZWJhY2sgZm9ybWF0dGluZyBhbHNvIHdvcmtzIHdpdGggYSBjbGVhcigpZWQgZnJhbWUKKyAgICAgICAgZGVmIGNsZWFudXBfdGIodGIpOgorICAgICAgICAgICAgdGIudGJfZnJhbWUuY2xlYXIoKQorICAgICAgICBzZWxmLmNoZWNrX3RyYWNlYmFja19mb3JtYXQoY2xlYW51cF90YikKKworICAgIGRlZiB0ZXN0X3N0YWNrX2Zvcm1hdChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgX3N0YWNrIGZ1bmN0aW9ucy4gTm90ZSB3ZSBoYXZlIHRvIHVzZSBfZ2V0ZnJhbWUoMSkgdG8KKyAgICAgICAgIyBjb21wYXJlIHRoZW0gd2l0aG91dCB0aGlzIGZyYW1lIGFwcGVhcmluZyBpbiB0aGUgb3V0cHV0CisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzdHN0ZGVycjoKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhzeXMuX2dldGZyYW1lKDEpKQorICAgICAgICBzdGZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhzeXMuX2dldGZyYW1lKDEpLCBmaWxlPXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHN0ZGVyci5nZXR2YWx1ZSgpLCBzdGZpbGUuZ2V0dmFsdWUoKSkKKworICAgICAgICBzdGZtdCA9IHRyYWNlYmFjay5mb3JtYXRfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0c3RkZXJyLmdldHZhbHVlKCksICIiLmpvaW4oc3RmbXQpKQorCiAKIGNhdXNlX21lc3NhZ2UgPSAoCiAgICAgIlxuVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSAiCkBAIC0zNzAsNiArNDE0LDM2IEBACiAgICAgICAgIHJldHVybiBzLmdldHZhbHVlKCkKIAogCitjbGFzcyBNaXNjVHJhY2ViYWNrQ2FzZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMKKyAgICAjIENoZWNrIG5vbi1wcmludGluZyBmdW5jdGlvbnMgaW4gdHJhY2ViYWNrIG1vZHVsZQorICAgICMKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG1pZGRsZSgpCisgICAgICAgIGRlZiBtaWRkbGUoKToKKyAgICAgICAgICAgIGlubmVyKCkKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBpID0gMQorICAgICAgICAgICAgMS8wCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0ZXIoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICB0eXBlXywgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKKworICAgICAgICAjIEluaXRpYWwgYXNzZXJ0aW9uOiB0aGVyZSdzIG9uZSBsb2NhbCBpbiB0aGUgaW5uZXIgZnJhbWUuCisgICAgICAgIGlubmVyX2ZyYW1lID0gdGIudGJfbmV4dC50Yl9uZXh0LnRiX25leHQudGJfZnJhbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaW5uZXJfZnJhbWUuZl9sb2NhbHMpLCAxKQorCisgICAgICAgICMgQ2xlYXIgdHJhY2ViYWNrIGZyYW1lcworICAgICAgICB0cmFjZWJhY2suY2xlYXJfZnJhbWVzKHRiKQorCisgICAgICAgICMgTG9jYWwgdmFyaWFibGUgZGljdCBzaG91bGQgbm93IGJlIGVtcHR5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbm5lcl9mcmFtZS5mX2xvY2FscyksIDApCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChfX25hbWVfXykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90cmFjZW1hbGxvYy5weSBiL0xpYi90ZXN0L3Rlc3RfdHJhY2VtYWxsb2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QyMzMzZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2VtYWxsb2MucHkKQEAgLTAsMCArMSw3OTggQEAKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0cmFjZW1hbGxvYworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IHBhdGNoCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCitFTVBUWV9TVFJJTkdfU0laRSA9IHN5cy5nZXRzaXplb2YoYicnKQorCitkZWYgZ2V0X2ZyYW1lcyhuZnJhbWUsIGxpbmVub19kZWx0YSk6CisgICAgZnJhbWVzID0gW10KKyAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMSkKKyAgICBmb3IgaW5kZXggaW4gcmFuZ2UobmZyYW1lKToKKyAgICAgICAgY29kZSA9IGZyYW1lLmZfY29kZQorICAgICAgICBsaW5lbm8gPSBmcmFtZS5mX2xpbmVubyArIGxpbmVub19kZWx0YQorICAgICAgICBmcmFtZXMuYXBwZW5kKChjb2RlLmNvX2ZpbGVuYW1lLCBsaW5lbm8pKQorICAgICAgICBsaW5lbm9fZGVsdGEgPSAwCisgICAgICAgIGZyYW1lID0gZnJhbWUuZl9iYWNrCisgICAgICAgIGlmIGZyYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiB0dXBsZShmcmFtZXMpCisKK2RlZiBhbGxvY2F0ZV9ieXRlcyhzaXplKToKKyAgICBuZnJhbWUgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkKKyAgICBieXRlc19sZW4gPSAoc2l6ZSAtIEVNUFRZX1NUUklOR19TSVpFKQorICAgIGZyYW1lcyA9IGdldF9mcmFtZXMobmZyYW1lLCAxKQorICAgIGRhdGEgPSBiJ3gnICogYnl0ZXNfbGVuCisgICAgcmV0dXJuIGRhdGEsIHRyYWNlbWFsbG9jLlRyYWNlYmFjayhmcmFtZXMpCisKK2RlZiBjcmVhdGVfc25hcHNob3RzKCk6CisgICAgdHJhY2ViYWNrX2xpbWl0ID0gMgorCisgICAgcmF3X3RyYWNlcyA9IFsKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKworICAgICAgICAoMiwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorCisgICAgICAgICg2NiwgKCgnYi5weScsIDEpLCkpLAorCisgICAgICAgICg3LCAoKCc8dW5rbm93bj4nLCAwKSwpKSwKKyAgICBdCisgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy5TbmFwc2hvdChyYXdfdHJhY2VzLCB0cmFjZWJhY2tfbGltaXQpCisKKyAgICByYXdfdHJhY2VzMiA9IFsKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKworICAgICAgICAoMiwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoNTAwMCwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorCisgICAgICAgICg0MDAsICgoJ2MucHknLCA1NzgpLCkpLAorICAgIF0KKyAgICBzbmFwc2hvdDIgPSB0cmFjZW1hbGxvYy5TbmFwc2hvdChyYXdfdHJhY2VzMiwgdHJhY2ViYWNrX2xpbWl0KQorCisgICAgcmV0dXJuIChzbmFwc2hvdCwgc25hcHNob3QyKQorCitkZWYgZnJhbWUoZmlsZW5hbWUsIGxpbmVubyk6CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jLl9GcmFtZSgoZmlsZW5hbWUsIGxpbmVubykpCisKK2RlZiB0cmFjZWJhY2soKmZyYW1lcyk6CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jLlRyYWNlYmFjayhmcmFtZXMpCisKK2RlZiB0cmFjZWJhY2tfbGluZW5vKGZpbGVuYW1lLCBsaW5lbm8pOgorICAgIHJldHVybiB0cmFjZWJhY2soKGZpbGVuYW1lLCBsaW5lbm8pKQorCitkZWYgdHJhY2ViYWNrX2ZpbGVuYW1lKGZpbGVuYW1lKToKKyAgICByZXR1cm4gdHJhY2ViYWNrX2xpbmVubyhmaWxlbmFtZSwgMCkKKworCitjbGFzcyBUZXN0VHJhY2VtYWxsb2NFbmFibGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRyYWNlbWFsbG9jIG11c3QgYmUgc3RvcHBlZCBiZWZvcmUgdGhlIHRlc3QiKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorCisgICAgZGVmIHRlc3RfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeShzZWxmKToKKyAgICAgICAgZGF0YSA9IFthbGxvY2F0ZV9ieXRlcygxMjMpIGZvciBjb3VudCBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgc2l6ZSA9IHRyYWNlbWFsbG9jLmdldF90cmFjZW1hbGxvY19tZW1vcnkoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzaXplLCAwKQorCisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIHNpemUyID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUyLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzaXplMiwgc2l6ZSkKKworICAgIGRlZiB0ZXN0X2dldF9vYmplY3RfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICB0cmFjZW1hbGxvYy5jbGVhcl90cmFjZXMoKQorICAgICAgICBvYmpfc2l6ZSA9IDEyMzQ1CisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrLCBvYmpfdHJhY2ViYWNrKQorCisgICAgZGVmIHRlc3Rfc2V0X3RyYWNlYmFja19saW1pdChzZWxmKToKKyAgICAgICAgb2JqX3NpemUgPSAxMAorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0cmFjZW1hbGxvYy5zdGFydCwgLTEpCisKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDEwKQorICAgICAgICBvYmoyLCBvYmoyX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmoyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cmFjZWJhY2spLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2ssIG9iajJfdHJhY2ViYWNrKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCgxKQorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cmFjZWJhY2spLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjaywgb2JqX3RyYWNlYmFjaykKKworICAgIGRlZiBmaW5kX3RyYWNlKHNlbGYsIHRyYWNlcywgdHJhY2ViYWNrKToKKyAgICAgICAgZm9yIHRyYWNlIGluIHRyYWNlczoKKyAgICAgICAgICAgIGlmIHRyYWNlWzFdID09IHRyYWNlYmFjay5fZnJhbWVzOgorICAgICAgICAgICAgICAgIHJldHVybiB0cmFjZQorCisgICAgICAgIHNlbGYuZmFpbCgidHJhY2Ugbm90IGZvdW5kIikKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZXMoc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIG9ial9zaXplID0gMTIzNDUKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisKKyAgICAgICAgdHJhY2VzID0gdHJhY2VtYWxsb2MuX2dldF90cmFjZXMoKQorICAgICAgICB0cmFjZSA9IHNlbGYuZmluZF90cmFjZSh0cmFjZXMsIG9ial90cmFjZWJhY2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyYWNlLCB0dXBsZSkKKyAgICAgICAgc2l6ZSwgdHJhY2ViYWNrID0gdHJhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBvYmpfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2ssIG9ial90cmFjZWJhY2suX2ZyYW1lcykKKworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZW1hbGxvYy5fZ2V0X3RyYWNlcygpLCBbXSkKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZXNfaW50ZXJuX3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgIyBkdW1teSB3cmFwcGVycyB0byBnZXQgbW9yZSB1c2VmdWwgYW5kIGlkZW50aWNhbCBmcmFtZXMgaW4gdGhlIHRyYWNlYmFjaworICAgICAgICBkZWYgYWxsb2NhdGVfYnl0ZXMyKHNpemUpOgorICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlX2J5dGVzKHNpemUpCisgICAgICAgIGRlZiBhbGxvY2F0ZV9ieXRlczMoc2l6ZSk6CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVfYnl0ZXMyKHNpemUpCisgICAgICAgIGRlZiBhbGxvY2F0ZV9ieXRlczQoc2l6ZSk6CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVfYnl0ZXMzKHNpemUpCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0d28gaWRlbnRpY2FsIHRyYWNlYmFja3MgYXJlIG5vdCBkdXBsaWNhdGVkCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCg0KQorICAgICAgICBvYmpfc2l6ZSA9IDEyMworICAgICAgICBvYmoxLCBvYmoxX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzNChvYmpfc2l6ZSkKKyAgICAgICAgb2JqMiwgb2JqMl90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlczQob2JqX3NpemUpCisKKyAgICAgICAgdHJhY2VzID0gdHJhY2VtYWxsb2MuX2dldF90cmFjZXMoKQorCisgICAgICAgIHRyYWNlMSA9IHNlbGYuZmluZF90cmFjZSh0cmFjZXMsIG9iajFfdHJhY2ViYWNrKQorICAgICAgICB0cmFjZTIgPSBzZWxmLmZpbmRfdHJhY2UodHJhY2VzLCBvYmoyX3RyYWNlYmFjaykKKyAgICAgICAgc2l6ZTEsIHRyYWNlYmFjazEgPSB0cmFjZTEKKyAgICAgICAgc2l6ZTIsIHRyYWNlYmFjazIgPSB0cmFjZTIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2syLCB0cmFjZWJhY2sxKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyYWNlYmFjazIsIHRyYWNlYmFjazEpCisKKyAgICBkZWYgdGVzdF9nZXRfdHJhY2VkX21lbW9yeShzZWxmKToKKyAgICAgICAgIyBQeXRob24gYWxsb2NhdGVzIHNvbWUgaW50ZXJuYWxzIG9iamVjdHMsIHNvIHRoZSB0ZXN0IG11c3QgdG9sZXJhdGUKKyAgICAgICAgIyBhIHNtYWxsIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZXhwZWN0ZWQgc2l6ZSBhbmQgdGhlIHJlYWwgdXNhZ2UKKyAgICAgICAgbWF4X2Vycm9yID0gMjA0OAorCisgICAgICAgICMgYWxsb2NhdGUgb25lIG9iamVjdAorICAgICAgICBvYmpfc2l6ZSA9IDEwMjQgKiAxMDI0CisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICBzaXplLCBwZWFrX3NpemUgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2VkX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUsIG9ial9zaXplKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChwZWFrX3NpemUsIHNpemUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc2l6ZSAtIG9ial9zaXplLCBtYXhfZXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHBlYWtfc2l6ZSAtIHNpemUsIG1heF9lcnJvcikKKworICAgICAgICAjIGRlc3Ryb3kgdGhlIG9iamVjdAorICAgICAgICBvYmogPSBOb25lCisgICAgICAgIHNpemUyLCBwZWFrX3NpemUyID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKQorICAgICAgICBzZWxmLmFzc2VydExlc3Moc2l6ZTIsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUgLSBzaXplMiwgb2JqX3NpemUgLSBtYXhfZXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBlYWtfc2l6ZTIsIHBlYWtfc2l6ZSkKKworICAgICAgICAjIGNsZWFyX3RyYWNlcygpIG11c3QgcmVzZXQgdHJhY2VkIG1lbW9yeSBjb3VudGVycworICAgICAgICB0cmFjZW1hbGxvYy5jbGVhcl90cmFjZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCksICgwLCAwKSkKKworICAgICAgICAjIGFsbG9jYXRlIGFub3RoZXIgb2JqZWN0CisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICBzaXplLCBwZWFrX3NpemUgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2VkX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUsIG9ial9zaXplKQorCisgICAgICAgICMgc3RvcCgpIGFsc28gcmVzZXRzIHRyYWNlZCBtZW1vcnkgY291bnRlcnMKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKSwgKDAsIDApKQorCisgICAgZGVmIHRlc3RfY2xlYXJfdHJhY2VzKHNlbGYpOgorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcygxMjMpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHJhY2ViYWNrKQorCisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIHRyYWNlYmFjazIgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYWNlYmFjazIpCisKKyAgICBkZWYgdGVzdF9pc190cmFjaW5nKHNlbGYpOgorICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpCisKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RhcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3Qoc2VsZik6CisgICAgICAgIG9iaiwgc291cmNlID0gYWxsb2NhdGVfYnl0ZXMoMTIzKQorCisgICAgICAgICMgdGFrZSBhIHNuYXBzaG90CisgICAgICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisKKyAgICAgICAgIyB3cml0ZSBvbiBkaXNrCisgICAgICAgIHNuYXBzaG90LmR1bXAoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgIyBsb2FkIGZyb20gZGlzaworICAgICAgICBzbmFwc2hvdDIgPSB0cmFjZW1hbGxvYy5TbmFwc2hvdC5sb2FkKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90Mi50cmFjZXMsIHNuYXBzaG90LnRyYWNlcykKKworICAgICAgICAjIHRyYWNlbWFsbG9jIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgdG8gdGFrZSBhIHNuYXBzaG90CisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgY206CisgICAgICAgICAgICB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBtdXN0IGJlIHRyYWNpbmcgbWVtb3J5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsb2NhdGlvbnMgdG8gdGFrZSBhIHNuYXBzaG90IikKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X3NhdmVfYXR0cihzZWxmKToKKyAgICAgICAgIyB0YWtlIGEgc25hcHNob3Qgd2l0aCBhIG5ldyBhdHRyaWJ1dGUKKyAgICAgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICAgICAgc25hcHNob3QudGVzdF9hdHRyID0gIm5ldyIKKyAgICAgICAgc25hcHNob3QuZHVtcChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKworICAgICAgICAjIGxvYWQoKSBzaG91bGQgcmVjcmVhdGVzIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgc25hcHNob3QyID0gdHJhY2VtYWxsb2MuU25hcHNob3QubG9hZChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdDIudGVzdF9hdHRyLCAibmV3IikKKworICAgIGRlZiBmb3JrX2NoaWxkKHNlbGYpOgorICAgICAgICBpZiBub3QgdHJhY2VtYWxsb2MuaXNfdHJhY2luZygpOgorICAgICAgICAgICAgcmV0dXJuIDIKKworICAgICAgICBvYmpfc2l6ZSA9IDEyMzQ1CisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgICAgIGlmIHRyYWNlYmFjayBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDMKKworICAgICAgICAjIGV2ZXJ5dGhpbmcgaXMgZmluZQorICAgICAgICByZXR1cm4gMAorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgJ25lZWQgb3MuZm9yaygpJykKKyAgICBkZWYgdGVzdF9mb3JrKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgdHJhY2VtYWxsb2MgaXMgc3RpbGwgd29ya2luZyBhZnRlciBmb3JrCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICBpZiBub3QgcGlkOgorICAgICAgICAgICAgIyBjaGlsZAorICAgICAgICAgICAgZXhpdGNvZGUgPSAxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhpdGNvZGUgPSBzZWxmLmZvcmtfY2hpbGQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5fZXhpdChleGl0Y29kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBpZDIsIHN0YXR1cyA9IG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLldJRkVYSVRFRChzdGF0dXMpKQorICAgICAgICAgICAgZXhpdGNvZGUgPSBvcy5XRVhJVFNUQVRVUyhzdGF0dXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXRjb2RlLCAwKQorCisKK2NsYXNzIFRlc3RTbmFwc2hvdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWF4RGlmZiA9IDQwMDAKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zbmFwc2hvdChzZWxmKToKKyAgICAgICAgcmF3X3RyYWNlcyA9IFsoNSwgKCgnYS5weScsIDIpLCkpXQorCisgICAgICAgIHdpdGggY29udGV4dGxpYi5FeGl0U3RhY2soKSBhcyBzdGFjazoKKyAgICAgICAgICAgIHN0YWNrLmVudGVyX2NvbnRleHQocGF0Y2gub2JqZWN0KHRyYWNlbWFsbG9jLCAnaXNfdHJhY2luZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9VHJ1ZSkpCisgICAgICAgICAgICBzdGFjay5lbnRlcl9jb250ZXh0KHBhdGNoLm9iamVjdCh0cmFjZW1hbGxvYywgJ2dldF90cmFjZWJhY2tfbGltaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPTUpKQorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChwYXRjaC5vYmplY3QodHJhY2VtYWxsb2MsICdfZ2V0X3RyYWNlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9cmF3X3RyYWNlcykpCisKKyAgICAgICAgICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90LnRyYWNlYmFja19saW1pdCwgNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNuYXBzaG90LnRyYWNlcyksIDEpCisgICAgICAgICAgICB0cmFjZSA9IHNuYXBzaG90LnRyYWNlc1swXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZS5zaXplLCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odHJhY2UudHJhY2ViYWNrKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2UudHJhY2ViYWNrWzBdLmZpbGVuYW1lLCAnYS5weScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLnRyYWNlYmFja1swXS5saW5lbm8sIDIpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfdHJhY2VzKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIGZpbHRlcjEgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJiLnB5IikKKyAgICAgICAgZmlsdGVyMiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYS5weSIsIDIpCisgICAgICAgIGZpbHRlcjMgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImEucHkiLCA1KQorCisgICAgICAgIG9yaWdpbmFsX3RyYWNlcyA9IGxpc3Qoc25hcHNob3QudHJhY2VzLl90cmFjZXMpCisKKyAgICAgICAgIyBleGNsdWRlIGIucHkKKyAgICAgICAgc25hcHNob3QzID0gc25hcHNob3QuZmlsdGVyX3RyYWNlcygoZmlsdGVyMSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90My50cmFjZXMuX3RyYWNlcywgWworICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDIsICgoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICg3LCAoKCc8dW5rbm93bj4nLCAwKSwpKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIGZpbHRlcl90cmFjZXMoKSBtdXN0IG5vdCB0b3VjaCB0aGUgb3JpZ2luYWwgc25hcHNob3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdC50cmFjZXMuX3RyYWNlcywgb3JpZ2luYWxfdHJhY2VzKQorCisgICAgICAgICMgb25seSBpbmNsdWRlIHR3byBsaW5lcyBvZiBhLnB5CisgICAgICAgIHNuYXBzaG90NCA9IHNuYXBzaG90My5maWx0ZXJfdHJhY2VzKChmaWx0ZXIyLCBmaWx0ZXIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdDQudHJhY2VzLl90cmFjZXMsIFsKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgyLCAoKCdhLnB5JywgNSksICgnYi5weScsIDQpKSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBObyBmaWx0ZXI6IGp1c3QgZHVwbGljYXRlIHRoZSBzbmFwc2hvdAorICAgICAgICBzbmFwc2hvdDUgPSBzbmFwc2hvdC5maWx0ZXJfdHJhY2VzKCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHNuYXBzaG90NSwgc25hcHNob3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc25hcHNob3Q1LnRyYWNlcywgc25hcHNob3QudHJhY2VzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90NS50cmFjZXMsIHNuYXBzaG90LnRyYWNlcykKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X2dyb3VwX2J5X2xpbmUoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgdGJfMCA9IHRyYWNlYmFja19saW5lbm8oJzx1bmtub3duPicsIDApCisgICAgICAgIHRiX2FfMiA9IHRyYWNlYmFja19saW5lbm8oJ2EucHknLCAyKQorICAgICAgICB0Yl9hXzUgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgNSkKKyAgICAgICAgdGJfYl8xID0gdHJhY2ViYWNrX2xpbmVubygnYi5weScsIDEpCisgICAgICAgIHRiX2NfNTc4ID0gdHJhY2ViYWNrX2xpbmVubygnYy5weScsIDU3OCkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlIGFuZCBsaW5lCisgICAgICAgIHN0YXRzMSA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ2xpbmVubycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMxLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYl8xLCA2NiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV8yLCAzMCwgMyksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfMCwgNywgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV81LCAyLCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlIGFuZCBsaW5lICgyKQorICAgICAgICBzdGF0czIgPSBzbmFwc2hvdDIuc3RhdGlzdGljcygnbGluZW5vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czIsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hXzUsIDUwMDIsIDIpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2NfNTc4LCA0MDAsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfMiwgMzAsIDMpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgZGlmZiBwZXIgZmlsZSBhbmQgbGluZQorICAgICAgICBzdGF0aXN0aWNzID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QsICdsaW5lbm8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYV81LCA1MDAyLCA1MDAwLCAyLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfY181NzgsIDQwMCwgNDAwLCAxLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYl8xLCAwLCAtNjYsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfMCwgMCwgLTcsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYV8yLCAzMCwgMCwgMywgMCksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdF9ncm91cF9ieV9maWxlKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHRiXzAgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJzx1bmtub3duPicpCisgICAgICAgIHRiX2EgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJ2EucHknKQorICAgICAgICB0Yl9iID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCdiLnB5JykKKyAgICAgICAgdGJfYyA9IHRyYWNlYmFja19maWxlbmFtZSgnYy5weScpCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZQorICAgICAgICBzdGF0czEgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMxLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYiwgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2EsIDMyLCA0KSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl8wLCA3LCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlICgyKQorICAgICAgICBzdGF0czIgPSBzbmFwc2hvdDIuc3RhdGlzdGljcygnZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2EsIDUwMzIsIDUpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2MsIDQwMCwgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBkaWZmIHBlciBmaWxlCisgICAgICAgIGRpZmYgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdCwgJ2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2EsIDUwMzIsIDUwMDAsIDUsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9jLCA0MDAsIDQwMCwgMSwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2IsIDAsIC02NiwgMCwgLTEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl8wLCAwLCAtNywgMCwgLTEpLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3RfZ3JvdXBfYnlfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZQorICAgICAgICB0YjEgPSB0cmFjZWJhY2soKCdhLnB5JywgMiksICgnYi5weScsIDQpKQorICAgICAgICB0YjIgPSB0cmFjZWJhY2soKCdhLnB5JywgNSksICgnYi5weScsIDQpKQorICAgICAgICB0YjMgPSB0cmFjZWJhY2soKCdiLnB5JywgMSkpCisgICAgICAgIHRiNCA9IHRyYWNlYmFjaygoJzx1bmtub3duPicsIDApKQorICAgICAgICBzdGF0czEgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCd0cmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMSwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMywgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMSwgMzAsIDMpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiNCwgNywgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGIyLCAyLCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlICgyKQorICAgICAgICB0YjUgPSB0cmFjZWJhY2soKCdjLnB5JywgNTc4KSkKKyAgICAgICAgc3RhdHMyID0gc25hcHNob3QyLnN0YXRpc3RpY3MoJ3RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMyLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGIyLCA1MDAyLCAyKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjUsIDQwMCwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGIxLCAzMCwgMyksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBkaWZmIHBlciBmaWxlCisgICAgICAgIGRpZmYgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdCwgJ3RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0YjIsIDUwMDIsIDUwMDAsIDIsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0YjUsIDQwMCwgNDAwLCAxLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGIzLCAwLCAtNjYsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGI0LCAwLCAtNywgMCwgLTEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0YjEsIDMwLCAwLCAzLCAwKSwKKyAgICAgICAgXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdC5zdGF0aXN0aWNzLCAndHJhY2ViYWNrJywgY3VtdWxhdGl2ZT1UcnVlKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3RfZ3JvdXBfYnlfY3VtdWxhdGl2ZShzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICB0Yl8wID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCc8dW5rbm93bj4nKQorICAgICAgICB0Yl9hID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCdhLnB5JykKKyAgICAgICAgdGJfYiA9IHRyYWNlYmFja19maWxlbmFtZSgnYi5weScpCisgICAgICAgIHRiX2FfMiA9IHRyYWNlYmFja19saW5lbm8oJ2EucHknLCAyKQorICAgICAgICB0Yl9hXzUgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgNSkKKyAgICAgICAgdGJfYl8xID0gdHJhY2ViYWNrX2xpbmVubygnYi5weScsIDEpCisgICAgICAgIHRiX2JfNCA9IHRyYWNlYmFja19saW5lbm8oJ2IucHknLCA0KQorCisgICAgICAgICMgcGVyIGZpbGUKKyAgICAgICAgc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdmaWxlbmFtZScsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9iLCA5OCwgNSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYSwgMzIsIDQpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiXzAsIDcsIDEpLAorICAgICAgICBdKQorCisgICAgICAgICMgcGVyIGxpbmUKKyAgICAgICAgc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdsaW5lbm8nLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYl8xLCA2NiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYl80LCAzMiwgNCksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV8yLCAzMCwgMyksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfMCwgNywgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV81LCAyLCAxKSwKKyAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3RyYWNlX2Zvcm1hdChzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICB0cmFjZSA9IHNuYXBzaG90LnRyYWNlc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0cmFjZSksICdhLnB5OjI6IDEwIEInKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZS50cmFjZWJhY2sKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodHJhY2ViYWNrKSwgJ2EucHk6MicpCisgICAgICAgIGZyYW1lID0gdHJhY2ViYWNrWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGZyYW1lKSwgJ2EucHk6MicpCisKKyAgICBkZWYgdGVzdF9zdGF0aXN0aWNfZm9ybWF0KHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHN0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnbGluZW5vJykKKyAgICAgICAgc3RhdCA9IHN0YXRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHN0YXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdiLnB5OjE6IHNpemU9NjYgQiwgY291bnQ9MSwgYXZlcmFnZT02NiBCJykKKworICAgIGRlZiB0ZXN0X3N0YXRpc3RpY19kaWZmX2Zvcm1hdChzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICBzdGF0cyA9IHNuYXBzaG90Mi5jb21wYXJlX3RvKHNuYXBzaG90LCAnbGluZW5vJykKKyAgICAgICAgc3RhdCA9IHN0YXRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHN0YXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhLnB5OjU6IHNpemU9NTAwMiBCICgrNTAwMCBCKSwgY291bnQ9MiAoKzEpLCBhdmVyYWdlPTI1MDEgQicpCisKKyAgICBkZWYgdGVzdF9zbGljZXMoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdC50cmFjZXNbOjJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzbmFwc2hvdC50cmFjZXNbMF0sIHNuYXBzaG90LnRyYWNlc1sxXSkpCisKKyAgICAgICAgdHJhY2ViYWNrID0gc25hcHNob3QudHJhY2VzWzBdLnRyYWNlYmFjaworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFja1s6Ml0sCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRyYWNlYmFja1swXSwgdHJhY2ViYWNrWzFdKSkKKworCitjbGFzcyBUZXN0RmlsdGVycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWF4RGlmZiA9IDIwNDgKKworICAgIGRlZiB0ZXN0X2ZpbHRlcl9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICAjIHRlc3QgZGVmYXVsdCB2YWx1ZXMKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmluY2x1c2l2ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZpbGVuYW1lX3BhdHRlcm4sICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLmxpbmVubykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsbF9mcmFtZXMsIEZhbHNlKQorCisgICAgICAgICMgdGVzdCBjdXN0b20gdmFsdWVzCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJ0ZXN0LnB5IiwgMTIzLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaW5jbHVzaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZpbGVuYW1lX3BhdHRlcm4sICJ0ZXN0LnB5IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmxpbmVubywgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxsX2ZyYW1lcywgVHJ1ZSkKKworICAgICAgICAjIHBhcmFtZXRlcnMgcGFzc2VkIGJ5IGtleXdvcmQKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihpbmNsdXNpdmU9RmFsc2UsIGZpbGVuYW1lX3BhdHRlcm49InRlc3QucHkiLCBsaW5lbm89MTIzLCBhbGxfZnJhbWVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pbmNsdXNpdmUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmlsZW5hbWVfcGF0dGVybiwgInRlc3QucHkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubGluZW5vLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGxfZnJhbWVzLCBUcnVlKQorCisgICAgICAgICMgcmVhZC1vbmx5IGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgZiwgImZpbGVuYW1lX3BhdHRlcm4iLCAiYWJjIikKKworICAgIGRlZiB0ZXN0X2ZpbHRlcl9tYXRjaChzZWxmKToKKyAgICAgICAgIyBmaWx0ZXIgd2l0aG91dCBsaW5lIG51bWJlcgorICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDEwKSkKKworICAgICAgICAjIGZpbHRlciB3aXRoIGxpbmUgbnVtYmVyID4gMAorICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJhYmMiLCA1KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDEwKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiYWJjIiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDEwKSkKKworICAgICAgICAjIGZpbHRlciB3aXRoIGxpbmUgbnVtYmVyIDAKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYWJjIiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImFiYyIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfbWF0Y2hfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGRlZiBmbm1hdGNoKGluY2x1c2l2ZSwgZmlsZW5hbWUsIHBhdHRlcm4pOgorICAgICAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihpbmNsdXNpdmUsIHBhdHRlcm4pCisgICAgICAgICAgICByZXR1cm4gZi5fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goVHJ1ZSwgImFiYyIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKFRydWUsICIxMjM1NiIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKFRydWUsICI8dW5rbm93bj4iLCAiYWJjIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKEZhbHNlLCAiYWJjIiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChGYWxzZSwgIjEyMzU2IiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChGYWxzZSwgIjx1bmtub3duPiIsICJhYmMiKSkKKworICAgIGRlZiB0ZXN0X2ZpbHRlcl9tYXRjaF9maWxlbmFtZV9qb2tlcihzZWxmKToKKyAgICAgICAgZGVmIGZubWF0Y2goZmlsZW5hbWUsIHBhdHRlcm4pOgorICAgICAgICAgICAgZmlsdGVyID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsIHBhdHRlcm4pCisgICAgICAgICAgICByZXR1cm4gZmlsdGVyLl9tYXRjaF9mcmFtZShmaWxlbmFtZSwgMCkKKworICAgICAgICAjIGVtcHR5IHN0cmluZworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCcnLCAnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCcnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCcnLCAnKicpKQorCisgICAgICAgICMgbm8gKgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYWJjJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYycsICdhYmNkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJ2RlZicpKQorCisgICAgICAgICMgYSoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhKicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYWJjJywgJ2FiYyonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnYionKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnYWJjZConKSkKKworICAgICAgICAjIGEqYgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYWJjJywgJ2EqYycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYWJjZGN4JywgJ2EqY3gnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmInLCAnYSpjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjZGNlJywgJ2EqY3gnKSkKKworICAgICAgICAjIGEqYipjCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmNkZScsICdhKmMqZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYWJjYmRlZmVnJywgJ2EqYmQqZWcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmNkZCcsICdhKmMqZScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiY2JkZWZlZicsICdhKmJkKmVnJykpCisKKyAgICAgICAgIyByZXBsYWNlIC5weWMgYW5kIC5weW8gc3VmZml4IHdpdGggLnB5CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLnB5YycsICdhLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLnB5bycsICdhLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLnB5JywgJ2EucHljJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLnB5JywgJ2EucHlvJykpCisKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgIyBjYXNlIGluc2Vuc2l0aXZlCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYUJDJywgJ0FCYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FCY0RlJywgJ0FiKmRFJykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLnB5YycsICdhLlBZJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5QWU8nLCAnYS5weScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EucHknLCAnYS5QWUMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLlBZJywgJ2EucHlvJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGNhc2Ugc2Vuc2l0aXZlCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FCQycsICdBQmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYUJjRGUnLCAnQWIqZEUnKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhLnB5YycsICdhLlBZJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2EuUFlPJywgJ2EucHknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5weScsICdhLlBZQycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhLlBZJywgJ2EucHlvJykpCisKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgIyBub3JtYWxpemUgYWx0ZXJuYXRlIHNlcGFyYXRvciAiLyIgdG8gdGhlIHN0YW5kYXJkIHNlcGFyYXRvciAiXCIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKHInYS9iJywgcidhXGInKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKHInYVxiJywgcidhL2InKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKHInYS9iXGMnLCByJ2FcYi9jJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2EvYi9jJywgcidhXGJcYycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB0aGVyZSBpcyBubyBhbHRlcm5hdGUgc2VwYXJhdG9yCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2gocidhL2InLCByJ2FcYicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKHInYVxiJywgcidhL2InKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2EvYlxjJywgcidhXGIvYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKHInYS9iL2MnLCByJ2FcYlxjJykpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfbWF0Y2hfdHJhY2Uoc2VsZik6CisgICAgICAgIHQxID0gKCgiYS5weSIsIDIpLCAoImIucHkiLCAzKSkKKyAgICAgICAgdDIgPSAoKCJiLnB5IiwgNCksICgiYi5weSIsIDUpKQorICAgICAgICB0MyA9ICgoImMucHkiLCA1KSwgKCc8dW5rbm93bj4nLCAwKSkKKyAgICAgICAgdW5rbm93biA9ICgoJzx1bmtub3duPicsIDApLCkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJiLnB5IiwgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYi5weSIsIGFsbF9mcmFtZXM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImIucHkiLCBhbGxfZnJhbWVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiYi5weSIsIGFsbF9mcmFtZXM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICI8dW5rbm93bj4iLCBhbGxfZnJhbWVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICI8dW5rbm93bj4iLCBhbGxfZnJhbWVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiPHVua25vd24+IiwgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKworY2xhc3MgVGVzdENvbW1hbmRMaW5lKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9lbnZfdmFyKHNlbGYpOgorICAgICAgICAjIG5vdCB0cmFjaW5nIGJ5IGRlZmF1bHQKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgdHJhY2VtYWxsb2M7IHByaW50KHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKSknCisgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ0ZhbHNlJykKKworICAgICAgICAjIFBZVEhPTiogZW52aXJvbm1lbnQgdmFyaWFibGVzIG11c3QgYmUgaWdub3JlZCB3aGVuIC1FIG9wdGlvbiBpcworICAgICAgICAjIHByZXNlbnQKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgdHJhY2VtYWxsb2M7IHByaW50KHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKSknCisgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1FJywgJy1jJywgY29kZSwgUFlUSE9OVFJBQ0VNQUxMT0M9JzEnKQorICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGInRmFsc2UnKQorCisgICAgICAgICMgdHJhY2luZyBhdCBzdGFydHVwCisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpJworICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsIFBZVEhPTlRSQUNFTUFMTE9DPScxJykKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ1RydWUnKQorCisgICAgICAgICMgc3RhcnQgYW5kIHNldCB0aGUgbnVtYmVyIG9mIGZyYW1lcworICAgICAgICBjb2RlID0gJ2ltcG9ydCB0cmFjZW1hbGxvYzsgcHJpbnQodHJhY2VtYWxsb2MuZ2V0X3RyYWNlYmFja19saW1pdCgpKScKKyAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCBQWVRIT05UUkFDRU1BTExPQz0nMTAnKQorICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGInMTAnKQorCisgICAgZGVmIHRlc3RfZW52X3Zhcl9pbnZhbGlkKHNlbGYpOgorICAgICAgICBmb3IgbmZyYW1lIGluICgtMSwgMCwgMioqMzApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmZyYW1lPW5mcmFtZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgICAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywgJ3Bhc3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OVFJBQ0VNQUxMT0M9c3RyKG5mcmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidQWVRIT05UUkFDRU1BTExPQzogaW52YWxpZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIgb2YgZnJhbWVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIpCisKKyAgICBkZWYgdGVzdF9zeXNfeG9wdGlvbnMoc2VsZik6CisgICAgICAgIGZvciB4b3B0aW9ucywgbmZyYW1lIGluICgKKyAgICAgICAgICAgICgndHJhY2VtYWxsb2MnLCAxKSwKKyAgICAgICAgICAgICgndHJhY2VtYWxsb2M9MScsIDEpLAorICAgICAgICAgICAgKCd0cmFjZW1hbGxvYz0xNScsIDE1KSwKKyAgICAgICAgKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHhvcHRpb25zPXhvcHRpb25zLCBuZnJhbWU9bmZyYW1lKToKKyAgICAgICAgICAgICAgICBjb2RlID0gJ2ltcG9ydCB0cmFjZW1hbGxvYzsgcHJpbnQodHJhY2VtYWxsb2MuZ2V0X3RyYWNlYmFja19saW1pdCgpKScKKyAgICAgICAgICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctWCcsIHhvcHRpb25zLCAnLWMnLCBjb2RlKQorICAgICAgICAgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBzdHIobmZyYW1lKS5lbmNvZGUoJ2FzY2lpJykpCisKKyAgICBkZWYgdGVzdF9zeXNfeG9wdGlvbnNfaW52YWxpZChzZWxmKToKKyAgICAgICAgZm9yIG5mcmFtZSBpbiAoLTEsIDAsIDIqKjMwKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5mcmFtZT1uZnJhbWUpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAoJy1YJywgJ3RyYWNlbWFsbG9jPSVzJyAlIG5mcmFtZSwgJy1jJywgJ3Bhc3MnKQorICAgICAgICAgICAgICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoKmFyZ3MpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYictWCB0cmFjZW1hbGxvYz1ORlJBTUU6IGludmFsaWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVtYmVyIG9mIGZyYW1lcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdFRyYWNlbWFsbG9jRW5hYmxlZCwKKyAgICAgICAgVGVzdFNuYXBzaG90LAorICAgICAgICBUZXN0RmlsdGVycywKKyAgICAgICAgVGVzdENvbW1hbmRMaW5lLAorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90eXBlcy5weSBiL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKaW5kZXggM2VlNGM2Yi4uZWMxMDc1MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90eXBlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CkBAIC0yLDYgKzIsNyBAQAogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBydW5fd2l0aF9sb2NhbGUKIGltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IHBpY2tsZQogaW1wb3J0IGxvY2FsZQogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCkBAIC0xMDc3LDkgKzEwNzgsMTkgQEAKICAgICAgICAgbnMyID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkKICAgICAgICAgbnMyLnggPSAic3BhbSIKICAgICAgICAgbnMyLl95ID0gNQorICAgICAgICBuYW1lID0gIm5hbWVzcGFjZSIKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMxKSwgIm5hbWVzcGFjZSh3PTMsIHg9MSwgeT0yKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLCAibmFtZXNwYWNlKF95PTUsIHg9J3NwYW0nKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczEpLCAie25hbWV9KHc9MywgeD0xLCB5PTIpIi5mb3JtYXQobmFtZT1uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMiksICJ7bmFtZX0oX3k9NSwgeD0nc3BhbScpIi5mb3JtYXQobmFtZT1uYW1lKSkKKworICAgIGRlZiB0ZXN0X2VxdWFsKHNlbGYpOgorICAgICAgICBuczEgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoeD0xKQorICAgICAgICBuczIgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKQorICAgICAgICBuczIueCA9IDEKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpLCB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuczEsIG5zMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChuczIsIHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpKQogCiAgICAgZGVmIHRlc3RfbmVzdGVkKHNlbGYpOgogICAgICAgICBuczEgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoYT0xLCBiPTIpCkBAIC0xMTE3LDExICsxMTI4LDEyIEBACiAgICAgICAgIG5zMS5zcGFtID0gbnMxCiAgICAgICAgIG5zMi5zcGFtID0gbnMzCiAgICAgICAgIG5zMy5zcGFtID0gbnMyCisgICAgICAgIG5hbWUgPSAibmFtZXNwYWNlIgorICAgICAgICByZXByMSA9ICJ7bmFtZX0oYz0nY29va2llJywgc3BhbT17bmFtZX0oLi4uKSkiLmZvcm1hdChuYW1lPW5hbWUpCisgICAgICAgIHJlcHIyID0gIntuYW1lfShzcGFtPXtuYW1lfShzcGFtPXtuYW1lfSguLi4pLCB4PTEpKSIuZm9ybWF0KG5hbWU9bmFtZSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZXNwYWNlKGM9J2Nvb2tpZScsIHNwYW09bmFtZXNwYWNlKC4uLikpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVzcGFjZShzcGFtPW5hbWVzcGFjZShzcGFtPW5hbWVzcGFjZSguLi4pLCB4PTEpKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczEpLCByZXByMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMiksIHJlcHIyKQogCiAgICAgZGVmIHRlc3RfYXNfZGljdChzZWxmKToKICAgICAgICAgbnMgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2Uoc3BhbT0nc3BhbXNwYW1zcGFtJykKQEAgLTExNDQsNiArMTE1NiwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoc3BhbSksIFNwYW0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFycyhzcGFtKSwgeydoYW0nOiA4LCAnZWdncyc6IDl9KQogCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBucyA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZShicmVha2Zhc3Q9InNwYW0iLCBsdW5jaD0ic3BhbSIpCisKKyAgICAgICAgZm9yIHByb3RvY29sIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwbmFtZSA9ICJwcm90b2NvbCB7fSIuZm9ybWF0KHByb3RvY29sKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5zX3BpY2tsZWQgPSBwaWNrbGUuZHVtcHMobnMsIHByb3RvY29sKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihwbmFtZSkgZnJvbSBlCisgICAgICAgICAgICBuc19yb3VuZHRyaXAgPSBwaWNrbGUubG9hZHMobnNfcGlja2xlZCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucywgbnNfcm91bmR0cmlwLCBwbmFtZSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFR5cGVzVGVzdHMsIE1hcHBpbmdQcm94eVRlc3RzLCBDbGFzc0NyZWF0aW9uVGVzdHMsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Vjbi5weSBiL0xpYi90ZXN0L3Rlc3RfdWNuLnB5CmluZGV4IGRlNzE2ODAuLmJlN2U5Y2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdWNuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdWNuLnB5CkBAIC0xNzcsNyArMTc3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdGRhdGEgPSBzdXBwb3J0Lm9wZW5fdXJscmVzb3VyY2UodXJsLCBlbmNvZGluZz0idXRmLTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2s9Y2hlY2tfdmVyc2lvbikKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCByZXRyaWV2ZSAiICsgdXJsKQogICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdGRhdGEuY2xvc2UpCiAgICAgICAgIGZvciBsaW5lIGluIHRlc3RkYXRhOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CmluZGV4IGMyZWRlMDcuLjdlNzA5MTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKQEAgLTcsNiArNyw3IEBACiAiIiIjIgogaW1wb3J0IF9zdHJpbmcKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdApAQCAtMzEsNiArMzIsMTYgQEAKICAgICAgICAgcmV0dXJuIE5vbmUKIGNvZGVjcy5yZWdpc3RlcihzZWFyY2hfZnVuY3Rpb24pCiAKK2RlZiBkdXBsaWNhdGVfc3RyaW5nKHRleHQpOgorICAgICIiIgorICAgIFRyeSB0byBnZXQgYSBmcmVzaCBjbG9uZSBvZiB0aGUgc3BlY2lmaWVkIHRleHQ6CisgICAgbmV3IG9iamVjdCB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEuCisKKyAgICBUaGlzIGlzIGEgYmVzdC1lZmZvcnQ6IGxhdGluMSBzaW5nbGUgbGV0dGVycyBhbmQgdGhlIGVtcHR5CisgICAgc3RyaW5nICgnJykgYXJlIHNpbmdsZXRvbnMgYW5kIGNhbm5vdCBiZSBjbG9uZWQuCisgICAgIiIiCisgICAgcmV0dXJuIHRleHQuZW5jb2RlKCkuZGVjb2RlKCkKKwogY2xhc3MgVW5pY29kZVRlc3Qoc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QsCiAgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdCwKICAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVRlc3QsCkBAIC04NjMsMTEgKzg3NCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmR9Jy5mb3JtYXQoRygnZGF0YScpKSwgJ0coZGF0YSknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFzfScuZm9ybWF0KEcoJ2RhdGEnKSksICdzdHJpbmcgaXMgZGF0YScpCiAKLSAgICAgICAgbXNnID0gJ29iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0IHN0cmluZyBpcyBkZXByZWNhdGVkJwotICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nKSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeMTB9Jy5mb3JtYXQoRSgnZGF0YScpKSwgJyBFKGRhdGEpICAnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEwc30nLmZvcm1hdChFKCdkYXRhJykpLCAnIEUoZGF0YSkgICcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDo+MTVzfScuZm9ybWF0KEcoJ2RhdGEnKSksICcgc3RyaW5nIGlzIGRhdGEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICd7MDpeMTB9Jy5mb3JtYXQsIEUoJ2RhdGEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnezA6XjEwc30nLmZvcm1hdCwgRSgnZGF0YScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICd7MDo+MTVzfScuZm9ybWF0LCBHKCdkYXRhJykpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiezA6ZGF0ZTogJVktJW0tJWR9Ii5mb3JtYXQoSSh5ZWFyPTIwMDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg9OCwKQEAgLTkwMyw3ICs5MTIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAiLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgInswLn0iLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswLn0iLmZvcm1hdCwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgInswW30iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswW30iLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswW30iLmZvcm1hdCwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCAgICJ7MF19Ii5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MC5bXX0iLmZvcm1hdCwgMCkKQEAgLTk1NSw2ICs5NjQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W3t9XX0iLmZvcm1hdCh7Int9IjogNX0pLCAiNSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbe31dfSIuZm9ybWF0KHsie30iIDogImEifSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie1t7XX0iLmZvcm1hdCh7InsiIDogImEifSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie1t9XX0iLmZvcm1hdCh7In0iIDogImEifSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie1tbXX0iLmZvcm1hdCh7IlsiIDogImEifSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie1shXX0iLmZvcm1hdCh7IiEiIDogImEifSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInthe31ifSIuZm9ybWF0LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInthe2J9Ii5mb3JtYXQsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAie1t9Ii5mb3JtYXQsIDQyKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjB4ezowezpkfVh9Ii5mb3JtYXQoMHgwLDE2KSwgIjB4MDAwMDAwMDAwMDAwMDAwMCIpCiAKICAgICBkZWYgdGVzdF9mb3JtYXRfbWFwKHNlbGYpOgpAQCAtMTEwOCw2ICsxMTI2LDY3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyUuMXMnICUgImFceGU5XHUyMGFjIiwgJ2EnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclLjJzJyAlICJhXHhlOVx1MjBhYyIsICdhXHhlOScpCiAKKyAgICAgICAgI2lzc3VlIDE5OTk1CisgICAgICAgIGNsYXNzIFBzdWVkb0ludDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IGludCh2YWx1ZSkKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisgICAgICAgIGNsYXNzIFBzdWVkb0Zsb2F0OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gZmxvYXQodmFsdWUpCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYudmFsdWUpCisgICAgICAgIHBpID0gUHN1ZWRvRmxvYXQoMy4xNDE1KQorICAgICAgICBsZXR0ZXJfbSA9IFBzdWVkb0ludCgxMDkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyV4JyAlIDQyLCAnMmEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclWCcgJSAxNSwgJ0YnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclbycgJSA5LCAnMTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclYycgJSAxMDksICdtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJXgnICUgbGV0dGVyX20sICc2ZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVYJyAlIGxldHRlcl9tLCAnNkQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclbycgJSBsZXR0ZXJfbSwgJzE1NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVjJyAlIGxldHRlcl9tLCAnbScpCisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLCAnJXgnLl9fbW9kX18sIHBpKSwKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsICcleCcuX19tb2RfXywgMy4xNCksCisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLCAnJVgnLl9fbW9kX18sIDIuMTEpLAorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgJyVvJy5fX21vZF9fLCAxLjc5KSwKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsICclYycuX19tb2RfXywgcGkpLAorCisgICAgZGVmIHRlc3RfZm9ybWF0dGluZ193aXRoX2VudW0oc2VsZik6CisgICAgICAgICMgaXNzdWUxODc4MAorICAgICAgICBpbXBvcnQgZW51bQorICAgICAgICBjbGFzcyBGbG9hdChmbG9hdCwgZW51bS5FbnVtKToKKyAgICAgICAgICAgIFBJID0gMy4xNDE1OTI2CisgICAgICAgIGNsYXNzIEludChlbnVtLkludEVudW0pOgorICAgICAgICAgICAgSURFUyA9IDE1CisgICAgICAgIGNsYXNzIFN0cihzdHIsIGVudW0uRW51bSk6CisgICAgICAgICAgICBBQkMgPSAnYWJjJworICAgICAgICAjIFRlc3RpbmcgVW5pY29kZSBmb3JtYXR0aW5nIHN0cmluZ3MuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiJXMsICVzIiAlIChTdHIuQUJDLCBTdHIuQUJDKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU3RyLkFCQywgU3RyLkFCQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiVzLCAlcywgJWQsICVpLCAldSwgJWYsICU1LjJmIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoU3RyLkFCQywgU3RyLkFCQywKKyAgICAgICAgICAgICAgICAgICAgICAgICBJbnQuSURFUywgSW50LklERVMsIEludC5JREVTLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0LlBJLCBGbG9hdC5QSSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ci5BQkMsIFN0ci5BQkMsIDE1LCAxNSwgMTUsIDMuMTQxNTkzLCAgMy4xNCcpCisKKyAgICAgICAgIyBmb3JtYXR0aW5nIGpvYnMgZGVsZWdhdGVkIGZyb20gdGhlIHN0cmluZyBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pcy4uLicgJSB7J2Zvbyc6U3RyLkFCQ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLlN0ci5BQkMuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylzLi4uJyAlIHsnZm9vJzpJbnQuSURFU30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLkludC5JREVTLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28paS4uLicgJSB7J2Zvbyc6SW50LklERVN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi4xNS4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKWQuLi4nICUgeydmb28nOkludC5JREVTfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbyl1Li4uJyAlIHsnZm9vJzpJbnQuSURFUywgJ2RlZic6RmxvYXQuUEl9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi4xNS4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKWYuLi4nICUgeydmb28nOkZsb2F0LlBJLCdkZWYnOjEyM30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLjMuMTQxNTkzLi4uJykKKwogICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmdfaHVnZV9wcmVjaXNpb24oc2VsZik6CiAgICAgICAgIGZvcm1hdF9zdHJpbmcgPSAiJS57fWYiLmZvcm1hdChzeXMubWF4c2l6ZSArIDEpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CkBAIC0xNzg4LDEwICsxODY3LDEwIEBACiAgICAgICAgICMgMC0xMjcKICAgICAgICAgcyA9IGJ5dGVzKHJhbmdlKDEyOCkpCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiAoCi0gICAgICAgICAgICAnY3AwMzcnLCAnY3AxMDI2JywKKyAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLCAnY3AyNzMnLAogICAgICAgICAgICAgJ2NwNDM3JywgJ2NwNTAwJywgJ2NwNzIwJywgJ2NwNzM3JywgJ2NwNzc1JywgJ2NwODUwJywKICAgICAgICAgICAgICdjcDg1MicsICdjcDg1NScsICdjcDg1OCcsICdjcDg2MCcsICdjcDg2MScsICdjcDg2MicsCi0gICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLAorICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywgJ2NwMTEyNScsCiAgICAgICAgICAgICAnaXNvODg1OV8xMCcsICdpc284ODU5XzEzJywgJ2lzbzg4NTlfMTQnLCAnaXNvODg1OV8xNScsCiAgICAgICAgICAgICAnaXNvODg1OV8yJywgJ2lzbzg4NTlfMycsICdpc284ODU5XzQnLCAnaXNvODg1OV81JywgJ2lzbzg4NTlfNicsCiAgICAgICAgICAgICAnaXNvODg1OV83JywgJ2lzbzg4NTlfOScsICdrb2k4X3InLCAnbGF0aW5fMScsCkBAIC0xODE2LDEwICsxODk1LDEwIEBACiAgICAgICAgICMgMTI4LTI1NQogICAgICAgICBzID0gYnl0ZXMocmFuZ2UoMTI4LCAyNTYpKQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKAotICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsCisgICAgICAgICAgICAnY3AwMzcnLCAnY3AxMDI2JywgJ2NwMjczJywKICAgICAgICAgICAgICdjcDQzNycsICdjcDUwMCcsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsCiAgICAgICAgICAgICAnY3A4NTInLCAnY3A4NTUnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAotICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywKKyAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsICdjcDExMjUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMTAnLCAnaXNvODg1OV8xMycsICdpc284ODU5XzE0JywgJ2lzbzg4NTlfMTUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMicsICdpc284ODU5XzQnLCAnaXNvODg1OV81JywKICAgICAgICAgICAgICdpc284ODU5XzknLCAna29pOF9yJywgJ2xhdGluXzEnLApAQCAtMjAxMCw5ICsyMDg5LDEwIEBACiAgICAgIyBUZXN0IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkKICAgICBkZWYgdGVzdF9mcm9tX2Zvcm1hdChzZWxmKToKICAgICAgICAgc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjdHlwZXMnKQotICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgKHB5dGhvbmFwaSwgcHlfb2JqZWN0LAorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgKAorICAgICAgICAgICAgcHl0aG9uYXBpLCBweV9vYmplY3QsIHNpemVvZiwKICAgICAgICAgICAgIGNfaW50LCBjX2xvbmcsIGNfbG9uZ2xvbmcsIGNfc3NpemVfdCwKLSAgICAgICAgICAgIGNfdWludCwgY191bG9uZywgY191bG9uZ2xvbmcsIGNfc2l6ZV90KQorICAgICAgICAgICAgY191aW50LCBjX3Vsb25nLCBjX3Vsb25nbG9uZywgY19zaXplX3QsIGNfdm9pZF9wKQogICAgICAgICBuYW1lID0gIlB5VW5pY29kZV9Gcm9tRm9ybWF0IgogICAgICAgICBfUHlVbmljb2RlX0Zyb21Gb3JtYXQgPSBnZXRhdHRyKHB5dGhvbmFwaSwgbmFtZSkKICAgICAgICAgX1B5VW5pY29kZV9Gcm9tRm9ybWF0LnJlc3R5cGUgPSBweV9vYmplY3QKQEAgLTIwMjMsOSArMjEwMywxMyBAQAogICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gYXJncykKICAgICAgICAgICAgIHJldHVybiBfUHlVbmljb2RlX0Zyb21Gb3JtYXQoZm9ybWF0LCAqY2FyZ3MpCiAKKyAgICAgICAgZGVmIGNoZWNrX2Zvcm1hdChleHBlY3RlZCwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgICAgICB0ZXh0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoZm9ybWF0LCAqYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHRleHQpCisKICAgICAgICAgIyBhc2NpaSBmb3JtYXQsIG5vbi1hc2NpaSBhcmd1bWVudAotICAgICAgICB0ZXh0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoYidhc2NpaVx4N2Y9JVUnLCAndW5pY29kZVx4ZTknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdhc2NpaVx4N2Y9dW5pY29kZVx4ZTknKQorICAgICAgICBjaGVja19mb3JtYXQoJ2FzY2lpXHg3Zj11bmljb2RlXHhlOScsCisgICAgICAgICAgICAgICAgICAgICBiJ2FzY2lpXHg3Zj0lVScsICd1bmljb2RlXHhlOScpCiAKICAgICAgICAgIyBub24tYXNjaWkgZm9ybWF0LCBhc2NpaSBhcmd1bWVudDogZW5zdXJlIHRoYXQgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkKICAgICAgICAgIyByYWlzZXMgYW4gZXJyb3IKQEAgLTIwMzUsNjQgKzIxMTksMjA1IEBACiAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbUZvcm1hdCwgYid1bmljb2RlXHhlOT0lcycsICdhc2NpaScpCiAKICAgICAgICAgIyB0ZXN0ICIlYyIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJywgY19pbnQoMHhhYmNkKSksICdcdWFiY2QnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWMnLCBjX2ludCgweDEwZmZmZikpLCAnXFUwMDEwZmZmZicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHVhYmNkJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWMnLCBjX2ludCgweGFiY2QpKQorICAgICAgICBjaGVja19mb3JtYXQoJ1xVMDAxMGZmZmYnLAorICAgICAgICAgICAgICAgICAgICAgYiclYycsIGNfaW50KDB4MTBmZmZmKSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yKToKICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWMnLCBjX2ludCgweDExMDAwMCkpCiAgICAgICAgICMgSXNzdWUgIzE4MTgzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJWMnLCBjX2ludCgweDEwMDAwKSwgY19pbnQoMHgxMDAwMDApKSwKLSAgICAgICAgICAgICdcVTAwMDEwMDAwXFUwMDEwMDAwMCcpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXFUwMDAxMDAwMFxVMDAxMDAwMDAnLAorICAgICAgICAgICAgICAgICAgICAgYiclYyVjJywgY19pbnQoMHgxMDAwMCksIGNfaW50KDB4MTAwMDAwKSkKIAogICAgICAgICAjIHRlc3QgIiUiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJyksICclJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUlJyksICclJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUlcycpLCAnJXMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInWyUlXScpLCAnWyVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUlJXMnLCBiJ2FiYycpLCAnJWFiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJScsCisgICAgICAgICAgICAgICAgICAgICBiJyUnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUnLAorICAgICAgICAgICAgICAgICAgICAgYiclJScpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJXMnLAorICAgICAgICAgICAgICAgICAgICAgYiclJXMnKQorICAgICAgICBjaGVja19mb3JtYXQoJ1slXScsCisgICAgICAgICAgICAgICAgICAgICBiJ1slJV0nKQorICAgICAgICBjaGVja19mb3JtYXQoJyVhYmMnLAorICAgICAgICAgICAgICAgICAgICAgYiclJSVzJywgYidhYmMnKQorCisgICAgICAgICMgdHJ1bmNhdGVkIHN0cmluZworICAgICAgICBjaGVja19mb3JtYXQoJ2FiYycsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM3MnLCBiJ2FiY2RlZicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnYWJjW1x1ZmZmZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNXMnLCAnYWJjW1x1MjBhY10nLmVuY29kZSgndXRmOCcpKQorICAgICAgICBjaGVja19mb3JtYXQoIidcXHUyMGFjQUJDJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyVBJywgJ1x1MjBhY0FCQycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgiJ1xcdTIwIiwKKyAgICAgICAgICAgICAgICAgICAgIGInJS41QScsICdcdTIwYWNBQkNERUYnKQorICAgICAgICBjaGVja19mb3JtYXQoIidcdTIwYWNBQkMnIiwKKyAgICAgICAgICAgICAgICAgICAgIGInJVInLCAnXHUyMGFjQUJDJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXHUyMGFjQSIsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1InLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1MnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1UnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1YnLCAnXHUyMGFjQUJDREVGJywgTm9uZSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhYmNbXHVmZmZkJywKKyAgICAgICAgICAgICAgICAgICAgIGInJS41VicsIE5vbmUsICdhYmNbXHUyMGFjXScuZW5jb2RlKCd1dGY4JykpCisKKyAgICAgICAgIyBmb2xsb3dpbmcgdGVzdHMgY29tZXMgZnJvbSAjNzMzMAorICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVTCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVTJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yUycsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJTJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlUgorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgJ2FiYyciLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU4UicsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9J2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjNSJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuM1InLCAnYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVBCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICAnYWJjJyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JThBJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0nYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuM0EnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgJ2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4zQScsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJXMKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgYWJjIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNXMnLCBiJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4ycycsIGInYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4ycycsIGInYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVVCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVVJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJVJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlVgorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VicsICdhYmMnLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVicsICdhYmMnLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICBhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuMlYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAxMjMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VicsIE5vbmUsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPTEyIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjJWJywgTm9uZSwgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgMTIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJWJywgTm9uZSwgYicxMjMnKQogCiAgICAgICAgICMgdGVzdCBpbnRlZ2VyIGZvcm1hdHMgKCVpLCAlZCwgJXUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclMDNpJywgY19pbnQoMTApKSwgJzAxMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclMC40aScsIGNfaW50KDEwKSksICcwMDEwJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVpJywgY19pbnQoLTEyMykpLCAnLTEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclbGknLCBjX2xvbmcoLTEyMykpLCAnLTEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclbGxpJywgY19sb25nbG9uZygtMTIzKSksICctMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyV6aScsIGNfc3NpemVfdCgtMTIzKSksICctMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcwMTAnLAorICAgICAgICAgICAgICAgICAgICAgYiclMDNpJywgY19pbnQoMTApKQorICAgICAgICBjaGVja19mb3JtYXQoJzAwMTAnLAorICAgICAgICAgICAgICAgICAgICAgYiclMC40aScsIGNfaW50KDEwKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWknLCBjX2ludCgtMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWxpJywgY19sb25nKC0xMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclbGxpJywgY19sb25nbG9uZygtMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJXppJywgY19zc2l6ZV90KC0xMjMpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclZCcsIGNfaW50KC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxkJywgY19sb25nKC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxsZCcsIGNfbG9uZ2xvbmcoLTEyMykpLCAnLTEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclemQnLCBjX3NzaXplX3QoLTEyMykpLCAnLTEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVkJywgY19pbnQoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsZCcsIGNfbG9uZygtMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWxsZCcsIGNfbG9uZ2xvbmcoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyV6ZCcsIGNfc3NpemVfdCgtMTIzKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJXUnLCBjX3VpbnQoMTIzKSksICcxMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWx1JywgY191bG9uZygxMjMpKSwgJzEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclbGx1JywgY191bG9uZ2xvbmcoMTIzKSksICcxMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJXp1JywgY19zaXplX3QoMTIzKSksICcxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyV1JywgY191aW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWx1JywgY191bG9uZygxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsbHUnLCBjX3Vsb25nbG9uZygxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyV6dScsIGNfc2l6ZV90KDEyMykpCisKKyAgICAgICAgIyB0ZXN0IGxvbmcgb3V0cHV0CisgICAgICAgIG1pbl9sb25nbG9uZyA9IC0oMiAqKiAoOCAqIHNpemVvZihjX2xvbmdsb25nKSAtIDEpKQorICAgICAgICBtYXhfbG9uZ2xvbmcgPSAtbWluX2xvbmdsb25nIC0gMQorICAgICAgICBjaGVja19mb3JtYXQoc3RyKG1pbl9sb25nbG9uZyksCisgICAgICAgICAgICAgICAgICAgICBiJyVsbGQnLCBjX2xvbmdsb25nKG1pbl9sb25nbG9uZykpCisgICAgICAgIGNoZWNrX2Zvcm1hdChzdHIobWF4X2xvbmdsb25nKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJWxsZCcsIGNfbG9uZ2xvbmcobWF4X2xvbmdsb25nKSkKKyAgICAgICAgbWF4X3Vsb25nbG9uZyA9IDIgKiogKDggKiBzaXplb2YoY191bG9uZ2xvbmcpKSAtIDEKKyAgICAgICAgY2hlY2tfZm9ybWF0KHN0cihtYXhfdWxvbmdsb25nKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJWxsdScsIGNfdWxvbmdsb25nKG1heF91bG9uZ2xvbmcpKQorICAgICAgICBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVwJywgY192b2lkX3AoLTEpKQorCisgICAgICAgICMgdGVzdCBwYWRkaW5nICh3aWR0aCBhbmQvb3IgcHJlY2lzaW9uKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAsICcwJyksCisgICAgICAgICAgICAgICAgICAgICBiJyUwMTBpJywgY19pbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCksCisgICAgICAgICAgICAgICAgICAgICBiJyUxMDBpJywgY19pbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDBpJywgY19pbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDgwLCAnMCcpLnJqdXN0KDEwMCksCisgICAgICAgICAgICAgICAgICAgICBiJyUxMDAuODBpJywgY19pbnQoMTIzKSkKKworICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAsICcwJyksCisgICAgICAgICAgICAgICAgICAgICBiJyUwMTB1JywgY191aW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwdScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclLjEwMHUnLCBjX3VpbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDgwLCAnMCcpLnJqdXN0KDEwMCksCisgICAgICAgICAgICAgICAgICAgICBiJyUxMDAuODB1JywgY191aW50KDEyMykpCisKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclMDEweCcsIGNfaW50KDB4MTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCksCisgICAgICAgICAgICAgICAgICAgICBiJyUxMDB4JywgY19pbnQoMHgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclLjEwMHgnLCBjX2ludCgweDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCg4MCwgJzAnKS5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwLjgweCcsIGNfaW50KDB4MTIzKSkKIAogICAgICAgICAjIHRlc3QgJUEKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJSVBOiVBJywgJ2FiY1x4ZTlcdWFiY2RcVTAwMTBmZmZmJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCByIiVBOidhYmNceGU5XHVhYmNkXFUwMDEwZmZmZiciKQorICAgICAgICBjaGVja19mb3JtYXQociIlQTonYWJjXHhlOVx1YWJjZFxVMDAxMGZmZmYnIiwKKyAgICAgICAgICAgICAgICAgICAgIGInJSVBOiVBJywgJ2FiY1x4ZTlcdWFiY2RcVTAwMTBmZmZmJykKIAogICAgICAgICAjIHRlc3QgJVYKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGIncmVwcj0lVicsICdhYmMnLCBiJ3h5eicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgJ3JlcHI9YWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdyZXByPWFiYycsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JVYnLCAnYWJjJywgYid4eXonKQogCiAgICAgICAgICMgVGVzdCBzdHJpbmcgZGVjb2RlIGZyb20gcGFyYW1ldGVyIG9mICVzIHVzaW5nIHV0Zi04LgogICAgICAgICAjIGInXHhlNFx4YmFceGJhXHhlNlx4YjBceDkxJyBpcyB1dGYtOCBlbmNvZGVkIGJ5dGUgc2VxdWVuY2Ugb2YKICAgICAgICAgIyAnXHU0ZWJhXHU2YzExJwotICAgICAgICB0ZXh0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoYidyZXByPSVWJywgTm9uZSwgYidceGU0XHhiYVx4YmFceGU2XHhiMFx4OTEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPVx1NGViYVx1NmMxMScpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgncmVwcj1cdTRlYmFcdTZjMTEnLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVWJywgTm9uZSwgYidceGU0XHhiYVx4YmFceGU2XHhiMFx4OTEnKQogCiAgICAgICAgICNUZXN0IHJlcGxhY2UgZXJyb3IgaGFuZGxlci4KLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGIncmVwcj0lVicsIE5vbmUsIGInYWJjXHhmZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgJ3JlcHI9YWJjXHVmZmZkJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdyZXByPWFiY1x1ZmZmZCcsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JVYnLCBOb25lLCBiJ2FiY1x4ZmYnKQogCiAgICAgICAgICMgbm90IHN1cHBvcnRlZDogY29weSB0aGUgcmF3IGZvcm1hdCBzdHJpbmcuIHRoZXNlIHRlc3RzIGFyZSBqdXN0IGhlcmUKICAgICAgICAgIyB0byBjaGVjayBmb3IgY3Jhc2hzIGFuZCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgYXMgc3BlY2lmaWNhdGlvbnMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUxJXMnLCBiJ2FiYycpLCAnJXMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJTFhYmMnKSwgJyUxYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUraScsIGNfaW50KDEwKSksICclK2knKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJS4lcycsIGInYWJjJyksICclLiVzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclcycsCisgICAgICAgICAgICAgICAgICAgICBiJyUxJXMnLCBiJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJTFhYmMnLAorICAgICAgICAgICAgICAgICAgICAgYiclMWFiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJStpJywKKyAgICAgICAgICAgICAgICAgICAgIGInJStpJywgY19pbnQoMTApKQorICAgICAgICBjaGVja19mb3JtYXQoJyUuJXMnLAorICAgICAgICAgICAgICAgICAgICAgYiclLiVzJywgYidhYmMnKQogCiAgICAgIyBUZXN0IFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKQEAgLTIyMjAsNiArMjQ0NSw4MCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYWJjLCBhYmNkZWYpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYmNkZWYuZGVjb2RlKCd1bmljb2RlX2ludGVybmFsJyksIHRleHQpCiAKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzYxNQorICAgICAgICBOID0gMTAKKyAgICAgICAgYXNjaWkgPSAnYScgKiBOCisgICAgICAgIGFzY2lpMiA9ICd6JyAqIE4KKyAgICAgICAgbGF0aW4gPSAnXHg4MCcgKiBOCisgICAgICAgIGxhdGluMiA9ICdceGZmJyAqIE4KKyAgICAgICAgYm1wID0gJ1x1MDEwMCcgKiBOCisgICAgICAgIGJtcDIgPSAnXHVmZmZmJyAqIE4KKyAgICAgICAgYXN0cmFsID0gJ1xVMDAxMDAwMDAnICogTgorICAgICAgICBhc3RyYWwyID0gJ1xVMDAxMGZmZmYnICogTgorICAgICAgICBzdHJpbmdzID0gKAorICAgICAgICAgICAgYXNjaWksIGFzY2lpMiwKKyAgICAgICAgICAgIGxhdGluLCBsYXRpbjIsCisgICAgICAgICAgICBibXAsIGJtcDIsCisgICAgICAgICAgICBhc3RyYWwsIGFzdHJhbDIpCisgICAgICAgIGZvciB0ZXh0MSwgdGV4dDIgaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhzdHJpbmdzLCAyKToKKyAgICAgICAgICAgIGVxdWFsID0gKHRleHQxIGlzIHRleHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0MSA9PSB0ZXh0MiwgZXF1YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQxICE9IHRleHQyLCBub3QgZXF1YWwpCisKKyAgICAgICAgICAgIGlmIGVxdWFsOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXh0MSA8PSB0ZXh0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGV4dDEgPj0gdGV4dDIpCisKKyAgICAgICAgICAgICAgICAjIHRleHQxIGlzIHRleHQyOiBkdXBsaWNhdGUgc3RyaW5ncyB0byBza2lwIHRoZSAic3RyMSA9PSBzdHIyIgorICAgICAgICAgICAgICAgICMgb3B0aW1pemF0aW9uIGluIHVuaWNvZGVfY29tcGFyZV9lcSgpIGFuZCByZWFsbHkgY29tcGFyZQorICAgICAgICAgICAgICAgICMgY2hhcmFjdGVyIHBlciBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBjb3B5MSA9IGR1cGxpY2F0ZV9zdHJpbmcodGV4dDEpCisgICAgICAgICAgICAgICAgY29weTIgPSBkdXBsaWNhdGVfc3RyaW5nKHRleHQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoY29weTEsIGNvcHkyKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkxID09IGNvcHkyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29weTEgIT0gY29weTIpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weTEgPD0gY29weTIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkyID49IGNvcHkyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGJtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzY2lpID49IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXNjaWkgPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluIDwgbGF0aW4yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGF0aW4gPCBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsYXRpbiA8IGFzdHJhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxhdGluID49IGxhdGluMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsYXRpbiA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgYXNjaWkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShibXAgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGxhdGluKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBhc3RyYWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN0cmFsIDwgYXN0cmFsMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJhbCA+PSBhc3RyYWwyKQorCiAKIGNsYXNzIFN0cmluZ01vZHVsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9wYXJzZXIoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQppbmRleCA5OWFhMDAzLi43MDdiMzBlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKQEAgLTIxLDcgKzIxLDcgQEAKIGNsYXNzIFVuaWNvZGVNZXRob2RzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcwotICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnYmY3YTc4ZjFhNTMyNDIxYjUwMzM2MDAxMDJlMjNhOTIwNDRkYmJhOScKKyAgICBleHBlY3RlZGNoZWNrc3VtID0gJ2U3NGU4NzhkZTcxYjZlNzgwZmZhYzI3MTc4NWMzY2I1OGY2MjUxZjMnCiAKICAgICBkZWYgdGVzdF9tZXRob2RfY2hlY2tzdW0oc2VsZik6CiAgICAgICAgIGggPSBoYXNobGliLnNoYTEoKQpAQCAtODAsNyArODAsNyBAQAogY2xhc3MgVW5pY29kZUZ1bmN0aW9uc1Rlc3QoVW5pY29kZURhdGFiYXNlVGVzdCk6CiAKICAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcwotICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnMTdmZTJmMTJiNzg4ZTRmZmY1NDc5YjQ2OWM0NDA0YmI2ZWNmODQxZicKKyAgICBleHBlY3RlZGNoZWNrc3VtID0gJ2YwYjc0ZDI2Nzc2MzMxY2M3YmRjM2E0Njk4ZjAzN2Q3M2YyY2VlMmInCiAgICAgZGVmIHRlc3RfZnVuY3Rpb25fY2hlY2tzdW0oc2VsZik6CiAgICAgICAgIGRhdGEgPSBbXQogICAgICAgICBoID0gaGFzaGxpYi5zaGExKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKaW5kZXggMmRlYzRlOS4uMWE0MDU2NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKQEAgLTE2LDYgKzE2LDcgQEAKIGZyb20gYmFzZTY0IGltcG9ydCBiNjRlbmNvZGUKIGltcG9ydCBjb2xsZWN0aW9ucwogCisKIGRlZiBoZXhlc2NhcGUoY2hhcik6CiAgICAgIiIiRXNjYXBlIGNoYXIgYXMgUkZDIDIzOTYgc3BlY2lmaWVzIiIiCiAgICAgaGV4X3JlcHIgPSBoZXgob3JkKGNoYXIpKVsyOl0udXBwZXIoKQpAQCAtMjM4LDcgKzIzOSw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tfcmVhZChiIjEuMSIpCiAKICAgICBkZWYgdGVzdF9yZWFkX2JvZ3VzKHNlbGYpOgotICAgICAgICAjIHVybG9wZW4oKSBzaG91bGQgcmFpc2UgSU9FcnJvciBmb3IgbWFueSBlcnJvciBjb2Rlcy4KKyAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIE9TRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCiAgICAgICAgIHNlbGYuZmFrZWh0dHAoYicnJ0hUVFAvMS4xIDQwMSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZAogRGF0ZTogV2VkLCAwMiBKYW4gMjAwOCAwMzowMzo1NCBHTVQKIFNlcnZlcjogQXBhY2hlLzEuMy4zMyAoRGViaWFuIEdOVS9MaW51eCkgbW9kX3NzbC8yLjguMjIgT3BlblNTTC8wLjkuN2UKQEAgLTI0NiwxMiArMjQ3LDEyIEBACiBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xCiAnJycpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybG9wZW4sICJodHRwOi8vcHl0aG9uLm9yZy8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdXJsb3BlbiwgImh0dHA6Ly9weXRob24ub3JnLyIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZF9yZWRpcmVjdChzZWxmKToKLSAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIElPRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCisgICAgICAgICMgdXJsb3BlbigpIHNob3VsZCByYWlzZSBPU0Vycm9yIGZvciBtYW55IGVycm9yIGNvZGVzLgogICAgICAgICBzZWxmLmZha2VodHRwKGInJydIVFRQLzEuMSAzMDIgRm91bmQKIERhdGU6IFdlZCwgMDIgSmFuIDIwMDggMDM6MDM6NTQgR01UCiBTZXJ2ZXI6IEFwYWNoZS8xLjMuMzMgKERlYmlhbiBHTlUvTGludXgpIG1vZF9zc2wvMi44LjIyIE9wZW5TU0wvMC45LjdlCkBAIC0yNjYsMTkgKzI2NywyMCBAQAogICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X3NvY2tldChzZWxmKToKLSAgICAgICAgIyB1cmxvcGVuKCkgcmFpc2VzIElPRXJyb3IgaWYgdGhlIHVuZGVybHlpbmcgc29ja2V0IGRvZXMgbm90IHNlbmQgYW55CisgICAgICAgICMgdXJsb3BlbigpIHJhaXNlcyBPU0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBkb2VzIG5vdCBzZW5kIGFueQogICAgICAgICAjIGRhdGEuICgjMTY4MDIzMCkKICAgICAgICAgc2VsZi5mYWtlaHR0cChiJycpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybG9wZW4sICJodHRwOi8vc29tZXRoaW5nIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHVybG9wZW4sICJodHRwOi8vc29tZXRoaW5nIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCiAKICAgICBkZWYgdGVzdF9taXNzaW5nX2xvY2FsZmlsZShzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciAjMTA4MzYKLSAgICAgICAgIyAzLjMgLSBVUkxFcnJvciBpcyBub3QgY2FwdHVyZWQsIGV4cGxpY2l0IElPRXJyb3IgaXMgcmFpc2VkLgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvcikgYXMgZToKICAgICAgICAgICAgIHVybG9wZW4oJ2ZpbGU6Ly9sb2NhbGhvc3QvYS9maWxlL3doaWNoL2RvZXNub3QvZXhpc3RzLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5leGNlcHRpb24ucmVhc29uKQogCiAgICAgZGVmIHRlc3RfZmlsZV9ub3RleGlzdHMoc2VsZik6CiAgICAgICAgIGZkLCB0bXBfZmlsZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQpAQCAtMjkxLDIwICsyOTMsMjEgQEAKICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICAgICAgb3MudW5saW5rKHRtcF9maWxlKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHRtcF9maWxlKSkKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpOgogICAgICAgICAgICAgdXJsb3Blbih0bXBfZmlsZXVybCkKIAogICAgIGRlZiB0ZXN0X2Z0cF9ub2hvc3Qoc2VsZik6CiAgICAgICAgIHRlc3RfZnRwX3VybCA9ICdmdHA6Ly8vcGF0aCcKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICB1cmxvcGVuKHRlc3RfZnRwX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlLmV4Y2VwdGlvbi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLnJlYXNvbikKIAogICAgIGRlZiB0ZXN0X2Z0cF9ub25leGlzdGluZyhzZWxmKToKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICB1cmxvcGVuKCdmdHA6Ly9sb2NhbGhvc3QvYS9maWxlL3doaWNoL2RvZXNub3QvZXhpc3RzLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlLmV4Y2VwdGlvbi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLnJlYXNvbikKIAogCiAgICAgZGVmIHRlc3RfdXNlcnBhc3NfaW51cmwoc2VsZik6CkBAIC0zNDEsNiArMzQ0LDc5IEBACiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIoKQogCitjbGFzcyB1cmxvcGVuX0RhdGFUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1cmxvcGVuKCkgb3BlbmluZyBhIGRhdGEgVVJMLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIHRleHQgY29udGFpbmluZyBVUkwgc3BlY2lhbC0gYW5kIHVuaWNvZGUtY2hhcmFjdGVycworICAgICAgICBzZWxmLnRleHQgPSAidGVzdCBkYXRhIFVSTHMgOjssJT0mIFx1MDBmNiBcdTAwYzQgIgorICAgICAgICAjIDJ4MSBwaXhlbCBSR0IgUE5HIGltYWdlIHdpdGggb25lIGJsYWNrIGFuZCBvbmUgd2hpdGUgcGl4ZWwKKyAgICAgICAgc2VsZi5pbWFnZSA9ICgKKyAgICAgICAgICAgIGInXHg4OVBOR1xyXG5ceDFhXG5ceDAwXHgwMFx4MDBccklIRFJceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBceDAwJworICAgICAgICAgICAgYidceDAxXHgwOFx4MDJceDAwXHgwMFx4MDB7QFx4ZThceGRkXHgwMFx4MDBceDAwXHgwMXNSR0JceDAwXHhhZScKKyAgICAgICAgICAgIGInXHhjZVx4MWNceGU5XHgwMFx4MDBceDAwXHgwZklEQVRceDA4XHhkN2NgYGBceGY4XHhmZlx4ZmY/XHgwMCcKKyAgICAgICAgICAgIGInXHgwNlx4MDFceDAyXHhmZVxuby9ceDFlXHgwMFx4MDBceDAwXHgwMElFTkRceGFlQmBceDgyJykKKworICAgICAgICBzZWxmLnRleHRfdXJsID0gKAorICAgICAgICAgICAgImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PVVURi04LHRlc3QlMjBkYXRhJTIwVVJMcyUyMCUzQSUzQiUyQyUyNSUzIgorICAgICAgICAgICAgIkQlMjYlMjAlQzMlQjYlMjAlQzMlODQlMjAiKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NCA9ICgKKyAgICAgICAgICAgICJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1JU08tODg1OS0xO2Jhc2U2NCxkR1Z6ZENCa1lYUmhJRlZTVEhNZ09qcyIKKyAgICAgICAgICAgICJzSlQwbUlQWWd4Q0ElM0QiKQorICAgICAgICAjIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMIHRoYXQgY29udGFpbnMgaWdub3JhYmxlIHNwYWNlcywKKyAgICAgICAgIyBzdWNoIGFzICJcbiIsICIgIiwgIiUwQSIsIGFuZCAiJTIwIi4KKyAgICAgICAgc2VsZi5pbWFnZV91cmwgPSAoCisgICAgICAgICAgICAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBSUFBQUFCQ0FJQUFBQjdcbiIKKyAgICAgICAgICAgICJRT2pkQUFBQUFYTlNSMElBcnM0YzZRQUFBQTlKUkVGVUNOZGolMEFZR0JnJTJCUC8vUHdBR0FRTCUyQkNtOCAiCisgICAgICAgICAgICAidkhnQUFBQUJKUlU1RXJrSmdnZyUzRCUzRCUwQSUyMCIpCisKKyAgICAgICAgc2VsZi50ZXh0X3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLnRleHRfdXJsKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigKKyAgICAgICAgICAgIHNlbGYudGV4dF91cmxfYmFzZTY0KQorICAgICAgICBzZWxmLmltYWdlX3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLmltYWdlX3VybCkKKworICAgIGRlZiB0ZXN0X2ludGVyZmFjZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgb2JqZWN0IHJldHVybmVkIGJ5IHVybG9wZW4oKSBoYXMgdGhlIHNwZWNpZmllZCBtZXRob2RzCisgICAgICAgIGZvciBhdHRyIGluICgicmVhZCIsICJyZWFkbGluZSIsICJyZWFkbGluZXMiLAorICAgICAgICAgICAgICAgICAgICAgImNsb3NlIiwgImluZm8iLCAiZ2V0dXJsIiwgImdldGNvZGUiLCAiX19pdGVyX18iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYudGV4dF91cmxfcmVzcCwgYXR0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSB1cmxvcGVuKCkgbGFja3MgJXMgYXR0cmlidXRlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cikKKworICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRleHRfdXJsX3Jlc3AuaW5mbygpLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9iYXNlNjRfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ0lTTy04ODU5LTEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5pbmZvKClbJ2NvbnRlbnQtbGVuZ3RoJ10sCisgICAgICAgICAgICBzdHIobGVuKHNlbGYuaW1hZ2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJkYXRhOiwiKS5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ1VTLUFTQ0lJJyldKQorCisgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dF91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi50ZXh0X3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLmdldHVybCgpLAorICAgICAgICAgICAgc2VsZi50ZXh0X3VybF9iYXNlNjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi5pbWFnZV91cmwpCisKKyAgICBkZWYgdGVzdF9yZWFkX3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpKVsnY2hhcnNldCddKSwgc2VsZi50ZXh0KQorCisgICAgZGVmIHRlc3RfcmVhZF90ZXh0X2Jhc2U2NChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfYmFzZTY0X3Jlc3AuaW5mbygpLmdldF9wYXJhbXMoKSlbJ2NoYXJzZXQnXSksCisgICAgICAgICAgICBzZWxmLnRleHQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2ltYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW1hZ2VfdXJsX3Jlc3AucmVhZCgpLCBzZWxmLmltYWdlKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19jb21tYShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcix1cmxsaWIucmVxdWVzdC51cmxvcGVuLCdkYXRhOnRleHQvcGxhaW4nKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9iYXNlNjRfZGF0YShzZWxmKToKKyAgICAgICAgIyBtaXNzaW5nIHBhZGRpbmcgY2hhcmFjdGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsdXJsbGliLnJlcXVlc3QudXJsb3BlbiwnZGF0YTo7YmFzZTY0LENnPScpCisKIGNsYXNzIHVybHJldHJpZXZlX0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCB1cmxsaWIudXJscmV0cmlldmUoKSBvbiBsb2NhbCBmaWxlcyIiIgogCkBAIC0xMjkxLDYgKzEzNjcsNyBAQAogIyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRwLmZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCiAjICAgICAgICAgZnRwLmNsb3NlKCkKIAorCiBjbGFzcyBSZXF1ZXN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlVuaXQgdGVzdHMgZm9yIHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QuIiIiCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQppbmRleCAzNTU5YjFiLi5iMzJiNDA5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CkBAIC0xMSw2ICsxMSw3IEBACiAjIFRoZSBwcm94eSBieXBhc3MgbWV0aG9kIGltcG9ydGVkIGJlbG93IGhhcyBsb2dpYyBzcGVjaWZpYyB0byB0aGUgT1NYCiAjIHByb3h5IGNvbmZpZyBkYXRhIHN0cnVjdHVyZSBidXQgaXMgdGVzdGFibGUgb24gYWxsIHBsYXRmb3Jtcy4KIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IFJlcXVlc3QsIE9wZW5lckRpcmVjdG9yLCBfcHJveHlfYnlwYXNzX21hY29zeF9zeXNjb25mCitmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UKIGltcG9ydCB1cmxsaWIuZXJyb3IKIAogIyBYWFgKQEAgLTExOCw2ICsxMTksMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVxLmdldF9oZWFkZXIoIk5vdC10aGVyZSIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJOb3QtdGhlcmUiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCiAKKyAgICAgICAgcmVxLnJlbW92ZV9oZWFkZXIoIlNwYW0tZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVxLmhhc19oZWFkZXIoIlNwYW0tZWdncyIpKQorCisgICAgICAgIHJlcS5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iLCAiRWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXEuaGFzX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKSkKKworICAgICAgICByZXEucmVtb3ZlX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlcS5oYXNfaGVhZGVyKCJVbnJlZGlyZWN0ZWQtc3BhbSIpKQorCiAKICAgICBkZWYgdGVzdF9wYXNzd29yZF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICBtZ3IgPSB1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3IoKQpAQCAtMzExLDggKzMyMSw3IEBACiAgICAgICAgIGlmIGJvZHk6CiAgICAgICAgICAgICBzZWxmLmRhdGEgPSBib2R5CiAgICAgICAgIGlmIHNlbGYucmFpc2Vfb25fZW5kaGVhZGVyczoKLSAgICAgICAgICAgIGltcG9ydCBzb2NrZXQKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICBkZWYgZ2V0cmVzcG9uc2Uoc2VsZik6CiAgICAgICAgIHJldHVybiBNb2NrSFRUUFJlc3BvbnNlKE1vY2tGaWxlKCksIHt9LCAyMDAsICJPSyIpCiAKQEAgLTU5NywyNyArNjA2LDYgQEAKICAgICAgICAgICAgICAgICBpZiBhcmdzWzFdIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYXJnc1sxXSwgTW9ja1Jlc3BvbnNlKQogCi0gICAgZGVmIHRlc3RfbWV0aG9kX2RlcHJlY2F0aW9ucyhzZWxmKToKLSAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpCi0KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuYWRkX2RhdGEoImRhdGEiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfZGF0YSgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmhhc19kYXRhKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X2hvc3QoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfc2VsZWN0b3IoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5pc191bnZlcmlmaWFibGUoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfb3JpZ2luX3JlcV9ob3N0KCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X3R5cGUoKQotCi0KIGRlZiBzYW5lcGF0aG5hbWUydXJsKHBhdGgpOgogICAgIHRyeToKICAgICAgICAgcGF0aC5lbmNvZGUoInV0Zi04IikKQEAgLTgxMiw3ICs4MDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJGb28iLCAiYmFyIiksICgiU3BhbSIsICJlZ2dzIildKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwLmRhdGEsIGRhdGEpCiAKLSAgICAgICAgIyBjaGVjayBzb2NrZXQuZXJyb3IgY29udmVydGVkIHRvIFVSTEVycm9yCisgICAgICAgICMgY2hlY2sgT1NFcnJvciBjb252ZXJ0ZWQgdG8gVVJMRXJyb3IKICAgICAgICAgaHR0cC5yYWlzZV9vbl9lbmRoZWFkZXJzID0gVHJ1ZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IsIGguZG9fb3BlbiwgaHR0cCwgcmVxKQogCkBAIC05MTcsNiArOTA1LDM2IEBACiAgICAgICAgICAgICBwX2RzX3JlcSA9IGguZG9fcmVxdWVzdF8oZHNfcmVxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwX2RzX3JlcS51bnJlZGlyZWN0ZWRfaGRyc1siSG9zdCJdLCJleGFtcGxlLmNvbSIpCiAKKyAgICBkZWYgdGVzdF9mdWxsX3VybF9zZXR0ZXIoc2VsZik6CisgICAgICAgICMgQ2hlY2tzIHRvIGVuc3VyZSB0aGF0IGNvbXBvbmVudHMgYXJlIHNldCBjb3JyZWN0bHkgYWZ0ZXIgc2V0dGluZyB0aGUKKyAgICAgICAgIyBmdWxsX3VybCBvZiBhIFJlcXVlc3Qgb2JqZWN0CisKKyAgICAgICAgdXJscyA9IFsKKyAgICAgICAgICAgICdodHRwOi8vZXhhbXBsZS5jb20/Zm9vPWJhciNiYXonLAorICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyJnNwYW09ZWdncyNiYXNoJywKKyAgICAgICAgICAgICdodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAgICBdCisKKyAgICAgICAgIyB0ZXN0aW5nIGEgcmV1c2FibGUgcmVxdWVzdCBpbnN0YW5jZSwgYnV0IHRoZSB1cmwgcGFyYW1ldGVyIGlzCisgICAgICAgICMgcmVxdWlyZWQsIHNvIGp1c3QgdXNlIGEgZHVtbXkgb25lIHRvIGluc3RhbnRpYXRlCisgICAgICAgIHIgPSBSZXF1ZXN0KCdodHRwOi8vZXhhbXBsZS5jb20nKQorICAgICAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICAgICByLmZ1bGxfdXJsID0gdXJsCisgICAgICAgICAgICBwYXJzZWQgPSB1cmxwYXJzZSh1cmwpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXRfZnVsbF91cmwoKSwgdXJsKQorICAgICAgICAgICAgIyBmdWxsX3VybCBzZXR0ZXIgdXNlcyBzcGxpdHRhZyB0byBzcGxpdCBpbnRvIGNvbXBvbmVudHMuCisgICAgICAgICAgICAjIHNwbGl0dGFnIHNldHMgdGhlIGZyYWdtZW50IGFzIE5vbmUgd2hpbGUgdXJscGFyc2Ugc2V0cyBpdCB0byAnJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmZyYWdtZW50IG9yICcnLCBwYXJzZWQuZnJhZ21lbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlKHIuZ2V0X2Z1bGxfdXJsKCkpLnF1ZXJ5LCBwYXJzZWQucXVlcnkpCisKKyAgICBkZWYgdGVzdF9mdWxsX3VybF9kZWxldGVyKHNlbGYpOgorICAgICAgICByID0gUmVxdWVzdCgnaHR0cDovL3d3dy5leGFtcGxlLmNvbScpCisgICAgICAgIGRlbCByLmZ1bGxfdXJsCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHIuZnVsbF91cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHIuZnJhZ21lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5zZWxlY3RvciwgJycpCisKICAgICBkZWYgdGVzdF9maXhwYXRoX2luX3dlaXJkdXJscyhzZWxmKToKICAgICAgICAgIyBJc3N1ZTQ0OTM6IHVybGxpYjIgdG8gc3VwcGx5ICcvJyB3aGVuIHRvIHVybHMgd2hlcmUgcGF0aCBkb2VzIG5vdAogICAgICAgICAjIHN0YXJ0IHdpdGgnLycKQEAgLTE0MTcsNiArMTQzNSwyMSBAQAogICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCBNeUhUVFBIYW5kbGVyKQogICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCBNeU90aGVySFRUUEhhbmRsZXIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCByZXF1aXJlcyBuZXR3b3JrIGFjY2VzcycpCisgICAgZGVmIHRlc3RfaXNzdWUxNjQ2NChzZWxmKToKKyAgICAgICAgb3BlbmVyID0gdXJsbGliLnJlcXVlc3QuYnVpbGRfb3BlbmVyKCkKKyAgICAgICAgcmVxdWVzdCA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVxdWVzdC5kYXRhKQorCisgICAgICAgIG9wZW5lci5vcGVuKHJlcXVlc3QsICIxIi5lbmNvZGUoInVzLWFzY2lpIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIxIiwgcmVxdWVzdC5kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxIiwgcmVxdWVzdC5nZXRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIpKQorCisgICAgICAgIG9wZW5lci5vcGVuKHJlcXVlc3QsICIxMjM0NTY3ODkwIi5lbmNvZGUoInVzLWFzY2lpIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIxMjM0NTY3ODkwIiwgcmVxdWVzdC5kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMCIsIHJlcXVlc3QuZ2V0X2hlYWRlcigiQ29udGVudC1sZW5ndGgiKSkKKwogICAgIGRlZiB0ZXN0X0hUVFBFcnJvcl9pbnRlcmZhY2Uoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBJc3N1ZSAxMzIxMSByZXZlYWxzIHRoYXQgSFRUUEVycm9yIGRpZG4ndCBpbXBsZW1lbnQgdGhlIFVSTEVycm9yCkBAIC0xNDI4LDIzICsxNDYxLDMxIEBACiAgICAgICAgIGVyciA9IHVybGxpYi5lcnJvci5IVFRQRXJyb3IodXJsLCBjb2RlLCBtc2csIGhkcnMsIGZwKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnIsICdyZWFzb24nKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIucmVhc29uLCAnc29tZXRoaW5nIGJhZCBoYXBwZW5lZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVyciwgJ2hkcnMnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuaGRycywgJ0NvbnRlbnQtTGVuZ3RoOiA0MicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVyciwgJ2hlYWRlcnMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuaGVhZGVycywgJ0NvbnRlbnQtTGVuZ3RoOiA0MicpCiAgICAgICAgIGV4cGVjdGVkX2Vycm1zZyA9ICdIVFRQIEVycm9yICVzOiAlcycgJSAoZXJyLmNvZGUsIGVyci5tc2cpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksIGV4cGVjdGVkX2Vycm1zZykKIAotCiBjbGFzcyBSZXF1ZXN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIFB1dFJlcXVlc3QoUmVxdWVzdCk6CisgICAgICAgIG1ldGhvZD0nUFVUJwogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmdldCA9IFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIpCiAgICAgICAgIHNlbGYucG9zdCA9IFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJYLVRlc3QiOiAidGVzdCJ9KQorICAgICAgICBzZWxmLmhlYWQgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iLCBtZXRob2Q9J0hFQUQnKQorICAgICAgICBzZWxmLnB1dCA9IHNlbGYuUHV0UmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIikKKyAgICAgICAgc2VsZi5mb3JjZV9wb3N0ID0gc2VsZi5QdXRSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iLAorICAgICAgICAgICAgbWV0aG9kPSJQT1NUIikKIAogICAgIGRlZiB0ZXN0X21ldGhvZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYucG9zdC5nZXRfbWV0aG9kKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkdFVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiSEVBRCIsIHNlbGYuaGVhZC5nZXRfbWV0aG9kKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBVVCIsIHNlbGYucHV0LmdldF9tZXRob2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYuZm9yY2VfcG9zdC5nZXRfbWV0aG9kKCkpCiAKICAgICBkZWYgdGVzdF9kYXRhKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZ2V0LmRhdGEpCkBAIC0xNDUzLDYgKzE0OTQsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZ2V0LmRhdGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBPU1QiLCBzZWxmLmdldC5nZXRfbWV0aG9kKCkpCiAKKyAgICAjIGlzc3VlIDE2NDY0CisgICAgIyBpZiB3ZSBjaGFuZ2UgZGF0YSB3ZSBuZWVkIHRvIHJlbW92ZSBjb250ZW50LWxlbmd0aCBoZWFkZXIKKyAgICAjIChjYXVzZSBpdCdzIG1vc3QgcHJvYmFibHkgY2FsY3VsYXRlZCBmb3IgcHJldmlvdXMgdmFsdWUpCisgICAgZGVmIHRlc3Rfc2V0dGluZ19kYXRhX3Nob3VsZF9yZW1vdmVfY29udGVudF9sZW5ndGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgIHNlbGYuZ2V0LmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRyc1siQ29udGVudC1sZW5ndGgiXSkKKyAgICAgICAgc2VsZi5nZXQuZGF0YSA9ICJzcGFtIgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzKQorCisgICAgIyBpc3N1ZSAxNzQ4NSBzYW1lIGZvciBkZWxldGluZyBkYXRhLgorICAgIGRlZiB0ZXN0X2RlbGV0aW5nX2RhdGFfc2hvdWxkX3JlbW92ZV9jb250ZW50X2xlbmd0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgc2VsZi5nZXQuZGF0YSA9ICdmb28nCisgICAgICAgIHNlbGYuZ2V0LmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnNbIkNvbnRlbnQtbGVuZ3RoIl0pCisgICAgICAgIGRlbCBzZWxmLmdldC5kYXRhCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnMpCisKICAgICBkZWYgdGVzdF9nZXRfZnVsbF91cmwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXQuZ2V0X2Z1bGxfdXJsKCkpCkBAIC0xNDk0LDIxICsxNTU0LDEzIEBACiAgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfZnVsbF91cmwoKSwgdXJsKQogCi0gICAgZGVmIHRlc3RfSFRUUEVycm9yX2ludGVyZmFjZV9jYWxsKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgSXNzdWUgMTU3MDEgLSBIVFRQRXJyb3IgaW50ZXJmYWNlIGhhcyBpbmZvIG1ldGhvZCBhdmFpbGFibGUgZnJvbSBVUkxFcnJvcgotICAgICAgICAiIiIKLSAgICAgICAgZXJyID0gdXJsbGliLnJlcXVlc3QuSFRUUEVycm9yKG1zZz0ic29tZXRoaW5nIGJhZCBoYXBwZW5lZCIsIHVybD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlPU5vbmUsIGhkcnM9J0NvbnRlbnQtTGVuZ3RoOjQyJywgZnA9Tm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAncmVhc29uJykpCi0gICAgICAgIGFzc2VydCBoYXNhdHRyKGVyciwgJ3JlYXNvbicpCi0gICAgICAgIGFzc2VydCBoYXNhdHRyKGVyciwgJ2luZm8nKQotICAgICAgICBhc3NlcnQgY2FsbGFibGUoZXJyLmluZm8pCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVyci5pbmZvKCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnIuaW5mbyBjYWxsIGZhaWxlZC4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5pbmZvKCksICJDb250ZW50LUxlbmd0aDo0MiIpCisgICAgZGVmIHRlc3RfdXJsX2Z1bGx1cmxfZ2V0X2Z1bGxfdXJsKHNlbGYpOgorICAgICAgICB1cmxzID0gWydodHRwOi8vZG9jcy5weXRob24ub3JnJywKKyAgICAgICAgICAgICAgICAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3VybGxpYjIuaHRtbCNPSycsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy8/cXM9cXVlcnkjZnJhZ21lbnQ9dHJ1ZScgXQorICAgICAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICAgICByZXEgPSBSZXF1ZXN0KHVybCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9mdWxsX3VybCgpLCByZXEuZnVsbF91cmwpCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfdXJsbGliMgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CmluZGV4IDMxYzYzOGYuLjgzNjI2ZjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKQEAgLTcsNyArNywxMCBAQAogaW1wb3J0IGhhc2hsaWIKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogdGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQotCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKIAogaGVyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKICMgU2VsZi1zaWduZWQgY2VydCBmaWxlIGZvciAnbG9jYWxob3N0JwpAQCAtMTUsNiArMTgsNyBAQAogIyBTZWxmLXNpZ25lZCBjZXJ0IGZpbGUgZm9yICdmYWtlaG9zdG5hbWUnCiBDRVJUX2Zha2Vob3N0bmFtZSA9IG9zLnBhdGguam9pbihoZXJlLCAna2V5Y2VydDIucGVtJykKIAorCiAjIExvb3BiYWNrIGh0dHAgc2VydmVyIGluZnJhc3RydWN0dXJlCiAKIGNsYXNzIExvb3BiYWNrSHR0cFNlcnZlcihodHRwLnNlcnZlci5IVFRQU2VydmVyKToKQEAgLTM4NywxNCArMzkxLDE0IEBACiAgICAgICAgIGhhbmRsZXIucG9ydCA9IHBvcnQKICAgICAgICAgcmV0dXJuIGhhbmRsZXIKIAotICAgIGRlZiBzdGFydF9odHRwc19zZXJ2ZXIoc2VsZiwgcmVzcG9uc2VzPU5vbmUsIGNlcnRmaWxlPUNFUlRfbG9jYWxob3N0KToKKyAgICBkZWYgc3RhcnRfaHR0cHNfc2VydmVyKHNlbGYsIHJlc3BvbnNlcz1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHVybGxpYi5yZXF1ZXN0LCAnSFRUUFNIYW5kbGVyJyk6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdzc2wgc3VwcG9ydCByZXF1aXJlZCcpCiAgICAgICAgIGZyb20gdGVzdC5zc2xfc2VydmVycyBpbXBvcnQgbWFrZV9odHRwc19zZXJ2ZXIKICAgICAgICAgaWYgcmVzcG9uc2VzIGlzIE5vbmU6CiAgICAgICAgICAgICByZXNwb25zZXMgPSBbKDIwMCwgW10sIGIid2UgY2FyZSBhIGJpdCIpXQogICAgICAgICBoYW5kbGVyID0gR2V0UmVxdWVzdEhhbmRsZXIocmVzcG9uc2VzKQotICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZT1jZXJ0ZmlsZSwgaGFuZGxlcl9jbGFzcz1oYW5kbGVyKQorICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBoYW5kbGVyX2NsYXNzPWhhbmRsZXIsICoqa3dhcmdzKQogICAgICAgICBoYW5kbGVyLnBvcnQgPSBzZXJ2ZXIucG9ydAogICAgICAgICByZXR1cm4gaGFuZGxlcgogCkBAIC00ODQsNiArNDg4LDIxIEBACiAgICAgICAgICAgICBzZWxmLnVybG9wZW4oImh0dHBzOi8vbG9jYWxob3N0OiVzL2JpemFycmUiICUgaGFuZGxlci5wb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNhZGVmYXVsdD1UcnVlKQogCisgICAgZGVmIHRlc3RfaHR0cHNfc25pKHNlbGYpOgorICAgICAgICBpZiBzc2wgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNzbCBtb2R1bGUgcmVxdWlyZWQiKQorICAgICAgICBpZiBub3Qgc3NsLkhBU19TTkk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJTTkkgc3VwcG9ydCByZXF1aXJlZCBpbiBPcGVuU1NMIikKKyAgICAgICAgc25pX25hbWUgPSBOb25lCisgICAgICAgIGRlZiBjYl9zbmkoc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgbm9ubG9jYWwgc25pX25hbWUKKyAgICAgICAgICAgIHNuaV9uYW1lID0gc2VydmVyX25hbWUKKyAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl9zbmkpCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X2h0dHBzX3NlcnZlcihjb250ZXh0PWNvbnRleHQsIGNlcnRmaWxlPUNFUlRfbG9jYWxob3N0KQorICAgICAgICBzZWxmLnVybG9wZW4oImh0dHBzOi8vbG9jYWxob3N0OiVzIiAlIGhhbmRsZXIucG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmlfbmFtZSwgImxvY2FsaG9zdCIpCisKICAgICBkZWYgdGVzdF9zZW5kaW5nX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X3NlcnZlcigpCiAgICAgICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QoImh0dHA6Ly9sb2NhbGhvc3Q6JXMvIiAlIGhhbmRsZXIucG9ydCwKQEAgLTUzMCw3ICs1NDksNyBAQAogICAgICAgICAjIHNvIHdlIHJ1biB0aGUgdGVzdCBvbmx5IHdoZW4gLXVuZXR3b3JrLy11YWxsIGlzIHNwZWNpZmllZCB0bwogICAgICAgICAjIG1pdGlnYXRlIHRoZSBwcm9ibGVtIGEgYml0IChzZWUgIzE3NTY0KQogICAgICAgICBzdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHaXZlbiB0aGF0IGJvdGggVmVyaVNpZ24gYW5kIHZhcmlvdXMgSVNQcyBoYXZlIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHBhc3Qgb3IgYXJlIHByZXNlbnRseSBoaWphY2tpbmcgdmFyaW91cyBpbnZhbGlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9tYWluIG5hbWUgcmVxdWVzdHMgaW4gYW4gYXR0ZW1wdCB0byBib29zdCB0cmFmZmljCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKaW5kZXggNDk4MWMyNC4uNzg4OTFmZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQpAQCAtMTIsNiArMTIsOCBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHNzbCA9IE5vbmUKIAorc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCisKIFRJTUVPVVQgPSA2MCAgIyBzZWNvbmRzCiAKIApAQCAtMTYyLDYgKzE2NCwxNCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0dXJsKCksCiAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCNnbG9zc2FyeSIpCiAKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF91cmxfd2l0aGZyYWcoc2VsZik6CisgICAgICAgIHJlZGlyZWN0X3VybF93aXRoX2ZyYWcgPSAiaHR0cDovL2JpdGx5LmNvbS91cmxsaWJyZWRpcmVjdHRlc3QiCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQocmVkaXJlY3RfdXJsX3dpdGhfZnJhZyk6CisgICAgICAgICAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHJlZGlyZWN0X3VybF93aXRoX2ZyYWcpCisgICAgICAgICAgICByZXMgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmdldHVybCgpLAorICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvZ2xvc3NhcnkuaHRtbCN0ZXJtLWdsb2JhbC1pbnRlcnByZXRlci1sb2NrIikKKwogICAgIGRlZiB0ZXN0X2N1c3RvbV9oZWFkZXJzKHNlbGYpOgogICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgpAQCAtMjE0LDcgKzIyNCw3IEBACiAgICAgICAgICAgICAgICAgZGVidWcodXJsKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZiA9IHVybG9wZW4odXJsLCByZXEsIFRJTUVPVVQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyKQogICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3RlZF9lcnI6CiAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAoIkRpZG4ndCBnZXQgZXhwZWN0ZWQgZXJyb3IocykgJXMgZm9yICVzICVzLCBnb3QgJXM6ICVzIiAlCkBAIC0zMjgsMzUgKzMzOCw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAuZnAucmF3Ll9zb2NrLmdldHRpbWVvdXQoKSwgNjApCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLCAicmVxdWlyZXMgU1NMIHN1cHBvcnQiKQotY2xhc3MgSFRUUFNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9zbmkoc2VsZik6Ci0gICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3QgZGlzYWJsZWQgLSB0ZXN0IHNlcnZlciBuZWVkZWQiKQotICAgICAgICAjIENoZWNrcyB0aGF0IFNlcnZlciBOYW1lIEluZGljYXRpb24gd29ya3MsIGlmIHN1cHBvcnRlZCBieSB0aGUKLSAgICAgICAgIyBPcGVuU1NMIGxpbmtlZCB0by4KLSAgICAgICAgIyBUaGUgc3NsIG1vZHVsZSBpdHNlbGYgZG9lc24ndCBoYXZlIHNlcnZlci1zaWRlIHN1cHBvcnQgZm9yIFNOSSwKLSAgICAgICAgIyBzbyB3ZSByZWx5IG9uIGEgdGhpcmQtcGFydHkgdGVzdCBzaXRlLgotICAgICAgICBleHBlY3Rfc25pID0gc3NsLkhBU19TTkkKLSAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgiWFhYIik6Ci0gICAgICAgICAgICB1ID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiWFhYIikKLSAgICAgICAgICAgIGNvbnRlbnRzID0gdS5yZWFkYWxsKCkKLSAgICAgICAgICAgIGlmIGV4cGVjdF9zbmk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiIkdyZWF0IiwgY29udGVudHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiIlVuZm9ydHVuYXRlbHkiLCBjb250ZW50cykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiIkdyZWF0IiwgY29udGVudHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiIlVuZm9ydHVuYXRlbHkiLCBjb250ZW50cykKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQXV0aFRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBTVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJOZXR3b3JrVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VTb2NrZXRUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVvdXRUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQppbmRleCA0ZTBiN2JkLi42MzQ3YzU0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQpAQCAtMTIxLDE2ICsxMjEsMTUgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgVGhpcyBoYXBwZW5zIHdpdGggc29tZSBvdmVyemVhbG91cyBETlMgcHJvdmlkZXJzIHN1Y2ggYXMgT3BlbkROUwogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgc2hvdWxkIG5vdCByZXNvbHZlIGZvciB0ZXN0IHRvIHdvcmsiICUgYm9ndXNfZG9tYWluKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNGIHBhdGNoIDgwOTkxNTogIEluIFNlcCAyMDAzLCBWZXJpU2lnbiBzdGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgaGlnaGphY2tpbmcgaW52YWxpZCAuY29tIGFuZCAubmV0IGFkZHJlc3NlcyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJvb3N0IHRyYWZmaWMgdG8gdGhlaXIgb3duIHNpdGUuICBUaGlzIHRlc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGFydGVkIGZhaWxpbmcgdGhlbi4gIE9uZSBob3BlcyB0aGUgLmludmFsaWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb21haW4gd2lsbCBiZSBzcGFyZWQgdG8gc2VydmUgaXRzIGRlZmluZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwdXJwb3NlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVybGxpYi51cmxvcGVuLCAiaHR0cDovL3d3dy5zYWRmbGtqc2FzYWRmLmNvbS8iKQotICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC51cmxvcGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3NhZGZsa2pzYXNmLmkubnZhbGkuZC8iKQorICAgICAgICBmYWlsdXJlX2V4cGxhbmF0aW9uID0gKCdvcGVuaW5nIGFuIGludmFsaWQgVVJMIGRpZCBub3QgcmFpc2UgT1NFcnJvcjsgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYW4gYmUgY2F1c2VkIGJ5IGEgYnJva2VuIEROUyBzZXJ2ZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoZS5nLiByZXR1cm5zIDQwNCBvciBoaWphY2tzIHBhZ2UpJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtc2c9ZmFpbHVyZV9leHBsYW5hdGlvbik6CisgICAgICAgICAgICAjIFNGIHBhdGNoIDgwOTkxNTogIEluIFNlcCAyMDAzLCBWZXJpU2lnbiBzdGFydGVkIGhpZ2hqYWNraW5nCisgICAgICAgICAgICAjIGludmFsaWQgLmNvbSBhbmQgLm5ldCBhZGRyZXNzZXMgdG8gYm9vc3QgdHJhZmZpYyB0byB0aGVpciBvd24KKyAgICAgICAgICAgICMgc2l0ZS4gIFRoaXMgdGVzdCBzdGFydGVkIGZhaWxpbmcgdGhlbi4gIE9uZSBob3BlcyB0aGUgLmludmFsaWQKKyAgICAgICAgICAgICMgZG9tYWluIHdpbGwgYmUgc3BhcmVkIHRvIHNlcnZlIGl0cyBkZWZpbmVkIHB1cnBvc2UuCisgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJodHRwOi8vc2FkZmxranNhc2YuaS5udmFsaS5kLyIpCiAKIAogY2xhc3MgdXJscmV0cmlldmVOZXR3b3JrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weSBiL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKaW5kZXggZDY3Y2YyNS4uMzkzNDgxMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CkBAIC04NjMsNiArODYzLDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEucGF0aCwgJzg2My0xMjM0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXJhbXMsICdwaG9uZS1jb250ZXh0PSsxLTkxNC01NTUnKQogCisgICAgZGVmIHRlc3RfdW53cmFwKHNlbGYpOgorICAgICAgICB1cmwgPSB1cmxsaWIucGFyc2UudW53cmFwKCc8VVJMOnR5cGU6Ly9ob3N0L3BhdGg+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmwsICd0eXBlOi8vaG9zdC9wYXRoJykKKworICAgIGRlZiB0ZXN0X1F1b3Rlcl9yZXByKHNlbGYpOgorICAgICAgICBxdW90ZXIgPSB1cmxsaWIucGFyc2UuUXVvdGVyKHVybGxpYi5wYXJzZS5fQUxXQVlTX1NBRkUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1F1b3RlcicsIHJlcHIocXVvdGVyKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVXJsUGFyc2VUZXN0Q2FzZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkgYi9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CmluZGV4IDEzN2M0NDUuLjJjYTk5MjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQpAQCAtNDUsNyArNDUsOCBAQAogICAgICAgICAjIFRlc3QgX19yZXByX18KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodTApLCBzdHIoZDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodTEpLCByZXByKGQxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUyKSwgcmVwcihkMikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVwcih1MiksICgieydvbmUnOiAxLCAndHdvJzogMn0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInsndHdvJzogMiwgJ29uZSc6IDF9IikpCiAKICAgICAgICAgIyBUZXN0IHJpY2ggY29tcGFyaXNvbiBhbmQgX19sZW5fXwogICAgICAgICBhbGwgPSBbZDAsIGQxLCBkMiwgdSwgdTAsIHUxLCB1MiwgdXUsIHV1MCwgdXUxLCB1dTJdCkBAIC04OSw5ICs5MCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobTJhLCBtMikKIAogICAgICAgICAjIFRlc3Qga2V5cywgaXRlbXMsIHZhbHVlcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLmtleXMoKSwgZDIua2V5cygpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLml0ZW1zKCksIGQyLml0ZW1zKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh1Mi52YWx1ZXMoKSksIGxpc3QoZDIudmFsdWVzKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh1Mi5rZXlzKCkpLCBzb3J0ZWQoZDIua2V5cygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodTIuaXRlbXMoKSksIHNvcnRlZChkMi5pdGVtcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodTIudmFsdWVzKCkpLCBzb3J0ZWQoZDIudmFsdWVzKCkpKQogCiAgICAgICAgICMgVGVzdCAiaW4iLgogICAgICAgICBmb3IgaSBpbiB1Mi5rZXlzKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ZlbnYucHkgYi9MaWIvdGVzdC90ZXN0X3ZlbnYucHkKaW5kZXggMGZhZTg4Yi4uMTA4NGE5OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF92ZW52LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdmVudi5weQpAQCAtNSw2ICs1LDcgQEAKIExpY2Vuc2VkIHRvIHRoZSBQU0YgdW5kZXIgYSBjb250cmlidXRvciBhZ3JlZW1lbnQuCiAiIiIKIAoraW1wb3J0IGVuc3VyZXBpcAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHNodXRpbApAQCAtMTIsMTAgKzEzLDI4IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoY2FwdHVyZWRfc3Rkb3V0LCBjYXB0dXJlZF9zdGRlcnIsIHJ1bl91bml0dGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuX3N5bWxpbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbl9zeW1saW5rLCBFbnZpcm9ubWVudFZhckd1YXJkKQoraW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB2ZW52CiAKKyMgcGlwIGN1cnJlbnRseSByZXF1aXJlcyBzc2wgc3VwcG9ydCwgc28gd2UgZW5zdXJlIHdlIGhhbmRsZQorIyBpdCBiZWluZyBtaXNzaW5nIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3NDQpCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKKworc2tpcEluVmVudiA9IHVuaXR0ZXN0LnNraXBJZihzeXMucHJlZml4ICE9IHN5cy5iYXNlX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3Qgbm90IGFwcHJvcHJpYXRlIGluIGEgdmVudicpCisKKyMgb3MucGF0aC5leGlzdHMoJ251bCcpIGlzIEZhbHNlOiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjA1NDEKK2lmIG9zLmRldm51bGwubG93ZXIoKSA9PSAnbnVsJzoKKyAgICBmYWlsc09uV2luZG93cyA9IHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorZWxzZToKKyAgICBkZWYgZmFpbHNPbldpbmRvd3MoZik6CisgICAgICAgIHJldHVybiBmCisKIGNsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciB2ZW52IHRlc3RzLiIiIgogCkBAIC04Myw4ICsxMDIsNyBAQAogICAgICAgICAgICAgcHJpbnQoJyAgICAlcicgJSBvcy5saXN0ZGlyKGJkKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZuKSwgJ0ZpbGUgJXIgc2hvdWxkIGV4aXN0LicgJSBmbikKIAotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnByZWZpeCAhPSBzeXMuYmFzZV9wcmVmaXgsICdUZXN0IG5vdCBhcHByb3ByaWF0ZSAnCi0gICAgICAgICAgICAgICAgICAgICAnaW4gYSB2ZW52JykKKyAgICBAc2tpcEluVmVudgogICAgIGRlZiB0ZXN0X3ByZWZpeGVzKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB0aGF0IHRoZSBwcmVmaXggdmFsdWVzIGFyZSBhcyBleHBlY3RlZC4KQEAgLTEwOSwxMyArMTI3LDY4IEBACiAgICAgICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZXhwZWN0ZWQuZW5jb2RlKCkpCiAKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgRU5WX1NVQkRJUlMgPSAoCisgICAgICAgICAgICAoJ1NjcmlwdHMnLCksCisgICAgICAgICAgICAoJ0luY2x1ZGUnLCksCisgICAgICAgICAgICAoJ0xpYicsKSwKKyAgICAgICAgICAgICgnTGliJywgJ3NpdGUtcGFja2FnZXMnKSwKKyAgICAgICAgKQorICAgIGVsc2U6CisgICAgICAgIEVOVl9TVUJESVJTID0gKAorICAgICAgICAgICAgKCdiaW4nLCksCisgICAgICAgICAgICAoJ2luY2x1ZGUnLCksCisgICAgICAgICAgICAoJ2xpYicsKSwKKyAgICAgICAgICAgICgnbGliJywgJ3B5dGhvbiVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdKSwKKyAgICAgICAgICAgICgnbGliJywgJ3B5dGhvbiVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLCAnc2l0ZS1wYWNrYWdlcycpLAorICAgICAgICApCisKKyAgICBkZWYgY3JlYXRlX2NvbnRlbnRzKHNlbGYsIHBhdGhzLCBmaWxlbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgc29tZSBmaWxlcyBpbiB0aGUgZW52aXJvbm1lbnQgd2hpY2ggYXJlIHVucmVsYXRlZAorICAgICAgICB0byB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciBzdWJkaXJzIGluIHBhdGhzOgorICAgICAgICAgICAgZCA9IG9zLnBhdGguam9pbihzZWxmLmVudl9kaXIsICpzdWJkaXJzKQorICAgICAgICAgICAgb3MubWtkaXIoZCkKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKGQsIGZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoYidTdGlsbCBoZXJlPycpCisKICAgICBkZWYgdGVzdF9vdmVyd3JpdGVfZXhpc3Rpbmcoc2VsZik6CiAgICAgICAgICIiIgotICAgICAgICBUZXN0IGNvbnRyb2wgb2Ygb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgZW52aXJvbm1lbnQgZGlyZWN0b3J5LgorICAgICAgICBUZXN0IGNyZWF0aW5nIGVudmlyb25tZW50IGluIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIpCisgICAgICAgIHNlbGYuY3JlYXRlX2NvbnRlbnRzKHNlbGYuRU5WX1NVQkRJUlMsICdmb28nKQorICAgICAgICB2ZW52LmNyZWF0ZShzZWxmLmVudl9kaXIpCisgICAgICAgIGZvciBzdWJkaXJzIGluIHNlbGYuRU5WX1NVQkRJUlM6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihzZWxmLmVudl9kaXIsICooc3ViZGlycyArICgnZm9vJywpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmbikpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYidTdGlsbCBoZXJlPycpCisKICAgICAgICAgYnVpbGRlciA9IHZlbnYuRW52QnVpbGRlcihjbGVhcj1UcnVlKQogICAgICAgICBidWlsZGVyLmNyZWF0ZShzZWxmLmVudl9kaXIpCisgICAgICAgIGZvciBzdWJkaXJzIGluIHNlbGYuRU5WX1NVQkRJUlM6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihzZWxmLmVudl9kaXIsICooc3ViZGlycyArICgnZm9vJywpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZm4pKQorCisgICAgZGVmIGNsZWFyX2RpcmVjdG9yeShzZWxmLCBwYXRoKToKKyAgICAgICAgZm9yIGZuIGluIG9zLmxpc3RkaXIocGF0aCk6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihwYXRoLCBmbikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZuKSBvciBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZuKToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGZuKQorCisgICAgZGVmIHRlc3RfdW5vdmVyd3JpdGFibGVfZmFpbHMoc2VsZik6CisgICAgICAgICNjcmVhdGUgYSBmaWxlIGNsYXNoaW5nIHdpdGggZGlyZWN0b3JpZXMgaW4gdGhlIGVudiBkaXIKKyAgICAgICAgZm9yIHBhdGhzIGluIHNlbGYuRU5WX1NVQkRJUlNbOjNdOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqcGF0aHMpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksIHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIpCisgICAgICAgICAgICBzZWxmLmNsZWFyX2RpcmVjdG9yeShzZWxmLmVudl9kaXIpCiAKICAgICBkZWYgdGVzdF91cGdyYWRlKHNlbGYpOgogICAgICAgICAiIiIKQEAgLTE2Miw4ICsyMzUsNyBAQAogICAgICMgcnVuIHRoZSB0ZXN0LCB0aGUgcHl2ZW52LmNmZyBpbiB0aGUgdmVudiBjcmVhdGVkIGluIHRoZSB0ZXN0IHdpbGwKICAgICAjIHBvaW50IHRvIHRoZSB2ZW52IGJlaW5nIHVzZWQgdG8gcnVuIHRoZSB0ZXN0LCBhbmQgd2UgbG9zZSB0aGUgbGluawogICAgICMgdG8gdGhlIHNvdXJjZSBidWlsZCAtIHNvIFB5dGhvbiBjYW4ndCBpbml0aWFsaXNlIHByb3Blcmx5LgotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnByZWZpeCAhPSBzeXMuYmFzZV9wcmVmaXgsICdUZXN0IG5vdCBhcHByb3ByaWF0ZSAnCi0gICAgICAgICAgICAgICAgICAgICAnaW4gYSB2ZW52JykKKyAgICBAc2tpcEluVmVudgogICAgIGRlZiB0ZXN0X2V4ZWN1dGFibGUoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBUZXN0IHRoYXQgdGhlIHN5cy5leGVjdXRhYmxlIHZhbHVlIGlzIGFzIGV4cGVjdGVkLgpAQCAtMTkyLDggKzI2NCwxMjkgQEAKICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZW52cHkuZW5jb2RlKCkpCiAKKworQHNraXBJblZlbnYKK2NsYXNzIEVuc3VyZVBpcFRlc3QoQmFzZVRlc3QpOgorICAgICIiIlRlc3QgdmVudiBtb2R1bGUgaW5zdGFsbGF0aW9uIG9mIHBpcC4iIiIKKyAgICBkZWYgYXNzZXJ0X3BpcF9ub3RfaW5zdGFsbGVkKHNlbGYpOgorICAgICAgICBlbnZweSA9IG9zLnBhdGguam9pbihvcy5wYXRoLnJlYWxwYXRoKHNlbGYuZW52X2RpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmluZGlyLCBzZWxmLmV4ZSkKKyAgICAgICAgdHJ5X2ltcG9ydCA9ICd0cnk6XG4gaW1wb3J0IHBpcFxuZXhjZXB0IEltcG9ydEVycm9yOlxuIHByaW50KCJPSyIpJworICAgICAgICBjbWQgPSBbZW52cHksICctYycsIHRyeV9pbXBvcnRdCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgIyBXZSBmb3JjZSBldmVyeXRoaW5nIHRvIHRleHQsIHNvIHVuaXR0ZXN0IGdpdmVzIHRoZSBkZXRhaWxlZCBkaWZmCisgICAgICAgICMgaWYgd2UgZ2V0IHVuZXhwZWN0ZWQgcmVzdWx0cworICAgICAgICBlcnIgPSBlcnIuZGVjb2RlKCJsYXRpbi0xIikgIyBGb3JjZSB0byB0ZXh0LCBwcmV2ZW50IGRlY29kaW5nIGVycm9ycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgIiIpCisgICAgICAgIG91dCA9IG91dC5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksICJPSyIpCisKKworICAgIGRlZiB0ZXN0X25vX3BpcF9ieV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZW52X2RpcikKKyAgICAgICAgc2VsZi5ydW5fd2l0aF9jYXB0dXJlKHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BpcF9ub3RfaW5zdGFsbGVkKCkKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X25vX3BpcChzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmVudl9kaXIpCisgICAgICAgIHNlbGYucnVuX3dpdGhfY2FwdHVyZSh2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyLCB3aXRoX3BpcD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcGlwX25vdF9pbnN0YWxsZWQoKQorCisgICAgQGZhaWxzT25XaW5kb3dzCisgICAgZGVmIHRlc3RfZGV2bnVsbF9leGlzdHNfYW5kX2lzX2VtcHR5KHNlbGYpOgorICAgICAgICAjIEZpeCBmb3IgaXNzdWUgIzIwMDUzIHVzZXMgb3MuZGV2bnVsbCB0byBmb3JjZSBhIGNvbmZpZyBmaWxlIHRvCisgICAgICAgICMgYXBwZWFyIGVtcHR5LiBIb3dldmVyIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDU0MSBtZWFucworICAgICAgICAjIHRoYXQgZG9lc24ndCBjdXJyZW50bHkgd29yayBwcm9wZXJseSBvbiBXaW5kb3dzLiBPbmNlIHRoYXQgaXMKKyAgICAgICAgIyBmaXhlZCwgdGhlICJ3aW5fbG9jYXRpb24iIHBhcnQgb2YgdGVzdF93aXRoX3BpcCBzaG91bGQgYmUgcmVzdG9yZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLmRldm51bGwpKQorICAgICAgICB3aXRoIG9wZW4ob3MuZGV2bnVsbCwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiIikKKworICAgICMgUmVxdWVzdGluZyBwaXAgZmFpbHMgd2l0aG91dCBTU0wgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTc0NCkKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCBlbnN1cmVwaXAuX01JU1NJTkdfU1NMX01FU1NBR0UpCisgICAgZGVmIHRlc3Rfd2l0aF9waXAoc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICB3aXRoIEVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnZ2YXJzOgorICAgICAgICAgICAgIyBwaXAncyBjcm9zcy12ZXJzaW9uIGNvbXBhdGliaWxpdHkgbWF5IHRyaWdnZXIgZGVwcmVjYXRpb24KKyAgICAgICAgICAgICMgd2FybmluZ3MgaW4gY3VycmVudCB2ZXJzaW9ucyBvZiBQeXRob24uIEVuc3VyZSByZWxhdGVkCisgICAgICAgICAgICAjIGVudmlyb25tZW50IHNldHRpbmdzIGRvbid0IGNhdXNlIHZlbnYgdG8gZmFpbC4KKyAgICAgICAgICAgIGVudnZhcnNbIlBZVEhPTldBUk5JTkdTIl0gPSAiZSIKKyAgICAgICAgICAgICMgZW5zdXJlcGlwIGlzIGRpZmZlcmVudCBlbm91Z2ggZnJvbSBhIG5vcm1hbCBwaXAgaW52b2NhdGlvbgorICAgICAgICAgICAgIyB0aGF0IHdlIHdhbnQgdG8gZW5zdXJlIGl0IGlnbm9yZXMgdGhlIG5vcm1hbCBwaXAgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICMgdmFyaWFibGUgc2V0dGluZ3MuIFdlIHNldCBQSVBfTk9fSU5TVEFMTCBoZXJlIHNwZWNpZmljYWxseQorICAgICAgICAgICAgIyB0byBjaGVjayB0aGF0IGVuc3VyZXBpcCAoYW5kIGhlbmNlIHZlbnYpIGlnbm9yZXMgaXQuCisgICAgICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3MzQKKyAgICAgICAgICAgIGVudnZhcnNbIlBJUF9OT19JTlNUQUxMIl0gPSAiMSIKKyAgICAgICAgICAgICMgQWxzbyBjaGVjayB0aGF0IHdlIGlnbm9yZSB0aGUgcGlwIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIwMDUzCisgICAgICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIGhvbWVfZGlyOgorICAgICAgICAgICAgICAgIGVudnZhcnNbIkhPTUUiXSA9IGhvbWVfZGlyCisgICAgICAgICAgICAgICAgYmFkX2NvbmZpZyA9ICJbZ2xvYmFsXVxubm8taW5zdGFsbD0xIgorICAgICAgICAgICAgICAgICMgV3JpdGUgdG8gYm90aCBjb25maWcgZmlsZSBuYW1lcyBvbiBhbGwgcGxhdGZvcm1zIHRvIHJlZHVjZQorICAgICAgICAgICAgICAgICMgY3Jvc3MtcGxhdGZvcm0gdmFyaWF0aW9uIGluIHRlc3QgY29kZSBiZWhhdmlvdXIKKyAgICAgICAgICAgICAgICB3aW5fbG9jYXRpb24gPSAoInBpcCIsICJwaXAuaW5pIikKKyAgICAgICAgICAgICAgICBwb3NpeF9sb2NhdGlvbiA9ICgiLnBpcCIsICJwaXAuY29uZiIpCisgICAgICAgICAgICAgICAgIyBTa2lwcyB3aW5fbG9jYXRpb24gZHVlIHRvIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDU0MQorICAgICAgICAgICAgICAgIGZvciBkaXJuYW1lLCBmbmFtZSBpbiAocG9zaXhfbG9jYXRpb24sKToKKyAgICAgICAgICAgICAgICAgICAgZGlycGF0aCA9IG9zLnBhdGguam9pbihob21lX2RpciwgZGlybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIoZGlycGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZnBhdGggPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShiYWRfY29uZmlnKQorCisgICAgICAgICAgICAgICAgIyBBY3R1YWxseSBydW4gdGhlIGNyZWF0ZSBjb21tYW5kIHdpdGggYWxsIHRoYXQgdW5oZWxwZnVsCisgICAgICAgICAgICAgICAgIyBjb25maWcgaW4gcGxhY2UgdG8gZW5zdXJlIHdlIGlnbm9yZSBpdAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW5fd2l0aF9jYXB0dXJlKHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoX3BpcD1UcnVlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIG91dHB1dCB0aGlzIHByb2R1Y2VzIGNhbiBiZSBhIGxpdHRsZSBoYXJkIHRvIHJlYWQsCisgICAgICAgICAgICAgICAgICAgICMgYnV0IGF0IGxlYXN0IGl0IGhhcyBhbGwgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgZGV0YWlscyA9IGV4Yy5vdXRwdXQuZGVjb2RlKGVycm9ycz0icmVwbGFjZSIpCisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJ7fVxuXG4qKlN1YnByb2Nlc3MgT3V0cHV0Kipcbnt9IgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwobXNnLmZvcm1hdChleGMsIGRldGFpbHMpKQorICAgICAgICAjIEVuc3VyZSBwaXAgaXMgYXZhaWxhYmxlIGluIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50CisgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVhbHBhdGgoc2VsZi5lbnZfZGlyKSwgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQorICAgICAgICBjbWQgPSBbZW52cHksICctSW0nLCAncGlwJywgJy0tdmVyc2lvbiddCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIFdlIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gdGV4dCwgc28gdW5pdHRlc3QgZ2l2ZXMgdGhlIGRldGFpbGVkIGRpZmYKKyAgICAgICAgIyBpZiB3ZSBnZXQgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAiIikKKyAgICAgICAgb3V0ID0gb3V0LmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgZXhwZWN0ZWRfdmVyc2lvbiA9ICJwaXAge30iLmZvcm1hdChlbnN1cmVwaXAudmVyc2lvbigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dFs6bGVuKGV4cGVjdGVkX3ZlcnNpb24pXSwgZXhwZWN0ZWRfdmVyc2lvbikKKyAgICAgICAgZW52X2RpciA9IG9zLmZzZW5jb2RlKHNlbGYuZW52X2RpcikuZGVjb2RlKCJsYXRpbi0xIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihlbnZfZGlyLCBvdXQpCisKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3MjgKKyAgICAgICAgIyBDaGVjayB0aGUgcHJpdmF0ZSB1bmluc3RhbGwgY29tbWFuZCBwcm92aWRlZCBmb3IgdGhlIFdpbmRvd3MKKyAgICAgICAgIyBpbnN0YWxsZXJzIHdvcmtzIChhdCBsZWFzdCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQpCisgICAgICAgIGNtZCA9IFtlbnZweSwgJy1JbScsICdlbnN1cmVwaXAuX3VuaW5zdGFsbCddCisgICAgICAgIHdpdGggRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudnZhcnM6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIFdlIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gdGV4dCwgc28gdW5pdHRlc3QgZ2l2ZXMgdGhlIGRldGFpbGVkIGRpZmYKKyAgICAgICAgIyBpZiB3ZSBnZXQgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAiIikKKyAgICAgICAgIyBCZWluZyBmYWlybHkgc3BlY2lmaWMgcmVnYXJkaW5nIHRoZSBleHBlY3RlZCBiZWhhdmlvdXIgZm9yIHRoZQorICAgICAgICAjIGluaXRpYWwgYnVuZGxpbmcgcGhhc2UgaW4gUHl0aG9uIDMuNC4gSWYgdGhlIG91dHB1dCBjaGFuZ2VzIGluCisgICAgICAgICMgZnV0dXJlIHBpcCB2ZXJzaW9ucywgdGhpcyB0ZXN0IGNhbiBsaWtlbHkgYmUgcmVsYXhlZCBmdXJ0aGVyLgorICAgICAgICBvdXQgPSBvdXQuZGVjb2RlKCJsYXRpbi0xIikgIyBGb3JjZSB0byB0ZXh0LCBwcmV2ZW50IGRlY29kaW5nIGVycm9ycworICAgICAgICBzZWxmLmFzc2VydEluKCJTdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQgcGlwIiwgb3V0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJTdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQgc2V0dXB0b29scyIsIG91dCkKKyAgICAgICAgIyBDaGVjayBwaXAgaXMgbm93IGdvbmUgZnJvbSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLmFzc2VydF9waXBfbm90X2luc3RhbGxlZCgpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChCYXNpY1Rlc3QpCisgICAgcnVuX3VuaXR0ZXN0KEJhc2ljVGVzdCwgRW5zdXJlUGlwVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YWl0My5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKaW5kZXggYmQwNmM4ZC4uZjZhMDY1ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YWl0My5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5CkBAIC03LDE1ICs3LDExIEBACiBmcm9tIHRlc3QuZm9ya193YWl0IGltcG9ydCBGb3JrV2FpdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbgogCi10cnk6Ci0gICAgb3MuZm9yawotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy5mb3JrIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3Rfd2FpdDMiKQoraWYgbm90IGhhc2F0dHIob3MsICdmb3JrJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLmZvcmsgbm90IGRlZmluZWQiKQogCi10cnk6Ci0gICAgb3Mud2FpdDMKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3Mud2FpdDMgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIpCitpZiBub3QgaGFzYXR0cihvcywgJ3dhaXQzJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLndhaXQzIG5vdCBkZWZpbmVkIikKIAogY2xhc3MgV2FpdDNUZXN0KEZvcmtXYWl0KToKICAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKaW5kZXggMTAwNzZhZi4uZWVjMmMyNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CkBAIC0zMjksNiArMzI5LDE5IEBACiAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLl9fbmFtZV9fID0gbW9kdWxlX25hbWUKICAgICAgICAgICAgIHN5cy5hcmd2ID0gYXJndgogCisgICAgZGVmIHRlc3Rfd2Fybl9leHBsaWNpdF9ub25fYXNjaWlfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gKCJub25hc2NpaVx4ZTlcdTIwYWMiLCAic3Vycm9nYXRlXHVkYzgwIik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5mc2VuY29kZShmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQoInRleHQiLCBVc2VyV2FybmluZywgZmlsZW5hbWUsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5maWxlbmFtZSwgZmlsZW5hbWUpCisKICAgICBkZWYgdGVzdF93YXJuX2V4cGxpY2l0X3R5cGVfZXJyb3JzKHNlbGYpOgogICAgICAgICAjIHdhcm5fZXhwbGljaXQoKSBzaG91bGQgZXJyb3Igb3V0IGdyYWNlZnVsbHkgaWYgaXQgaXMgZ2l2ZW4gb2JqZWN0cwogICAgICAgICAjIG9mIHRoZSB3cm9uZyB0eXBlcy4KQEAgLTc2Niw2ICs3NzksMjUgQEAKICAgICAgICAgICAgICMgVXNlIC1XIHRvIGxvYWQgd2FybmluZ3MgbW9kdWxlIGF0IHN0YXJ0dXAKICAgICAgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgJ3Bhc3MnLCAnLVcnLCAnYWx3YXlzJywgUFlUSE9OUEFUSD1jd2QpCiAKK2NsYXNzIEZpbmFsaXphdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbmFsaXphdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTk0MjE6IHdhcm5pbmdzLndhcm4oKSBzaG91bGQgbm90IGNyYXNoCisgICAgICAgICMgZHVyaW5nIFB5dGhvbiBmaW5hbGl6YXRpb24KKyAgICAgICAgY29kZSA9ICIiIgoraW1wb3J0IHdhcm5pbmdzCit3YXJuID0gd2FybmluZ3Mud2FybgorCitjbGFzcyBBOgorICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICB3YXJuKCJ0ZXN0IikKKworYT1BKCkKKyAgICAgICAgIiIiCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKyAgICAgICAgIyBub3RlOiAiX19tYWluX18iIGZpbGVuYW1lIGlzIG5vdCBjb3JyZWN0LCBpdCBzaG91bGQgYmUgdGhlIG5hbWUKKyAgICAgICAgIyBvZiB0aGUgc2NyaXB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJ19fbWFpbl9fOjc6IFVzZXJXYXJuaW5nOiB0ZXN0JykKKwogCiBkZWYgc2V0VXBNb2R1bGUoKToKICAgICBweV93YXJuaW5ncy5vbmNlcmVnaXN0cnkuY2xlYXIoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YXZlLnB5IGIvTGliL3Rlc3QvdGVzdF93YXZlLnB5CmluZGV4IGY2NDIwMWYuLjNlZmY3NzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhdmUucHkKQEAgLTEsNiArMSw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgYXVkaW90ZXN0cworZnJvbSBhdWRpb29wIGltcG9ydCBieXRlc3dhcAogaW1wb3J0IHN5cwogaW1wb3J0IHdhdmUKIApAQCAtOCw5ICs5LDYgQEAKIGNsYXNzIFdhdmVUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLAogICAgICAgICAgICAgICAgYXVkaW90ZXN0cy5BdWRpb1Rlc3RzV2l0aFNvdXJjZUZpbGUpOgogICAgIG1vZHVsZSA9IHdhdmUKLSAgICB0ZXN0X3Vuc2Vla2FibGVfd3JpdGUgPSBOb25lCi0gICAgdGVzdF91bnNlZWthYmxlX292ZXJmbG93ZWRfd3JpdGUgPSBOb25lCi0gICAgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlID0gTm9uZQogCiAKIGNsYXNzIFdhdmVQQ004VGVzdChXYXZlVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDgsMTMgKzQ2LDcgQEAKICAgICAgIEU0QjUwQ0VCIDYzNDQwQTVBIDA4Q0EwQTFGIDJCQkEwQjBCIDUxNDYwRTQ3IDhCQ0IxMTNDIEI2RjUwRUVBIDQ0MTUwQTU5IFwKICAgICAgICIiIikKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBmcmFtZXMgPSBhdWRpb3Rlc3RzLmJ5dGVzd2FwMihmcmFtZXMpCi0KLSAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgotICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCi0gICAgICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoc2VsZik6Ci0gICAgICAgICAgICBzdXBlcigpLnRlc3RfdW5zZWVrYWJsZV9pbmNvbXBsZXRlZF93cml0ZSgpCi0KKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAyKQogCiAKIGNsYXNzIFdhdmVQQ00yNFRlc3QoV2F2ZVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTgxLDcgKzczLDcgQEAKICAgICAgIDUxNDg2RjBFNDRFMSA4QkNDNjQxMTNCMDUgQjZGNEVDMEVFQjM2IDQ0MTMxNzBBNUI0OCBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDMoZnJhbWVzKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDMpCiAKIAogY2xhc3MgV2F2ZVBDTTMyVGVzdChXYXZlVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTA4LDEyICsxMDAsNyBAQAogICAgICAgNTE0ODZGODAwRTQ0RTE5MCA4QkNDNjQ4MDExM0IwNTgwIEI2RjRFQzAwMEVFQjM2MzAgNDQxMzE3ODAwQTVCNDhBMCBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDQoZnJhbWVzKQotCi0gICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQotICAgICAgICBkZWYgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgotICAgICAgICAgICAgc3VwZXIoKS50ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDQpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weSBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQppbmRleCA4NWFiNzE3Li5jY2NiNTE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CkBAIC03LDExICs3LDE1IEBACiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGNvcHkKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHNjcmlwdF9oZWxwZXIKIAogIyBVc2VkIGluIFJlZmVyZW5jZXNUZXN0Q2FzZS50ZXN0X3JlZl9jcmVhdGVkX2R1cmluZ19kZWwoKSAuCiByZWZfZnJvbV9kZWwgPSBOb25lCiAKKyMgVXNlZCBieSBGaW5hbGl6ZVRlc3RDYXNlIGFzIGEgZ2xvYmFsIHRoYXQgbWF5IGJlIHJlcGxhY2VkIGJ5IE5vbmUKKyMgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc2h1dHMgZG93bi4KK19nbG9iYWxfdmFyID0gJ2Zvb2JhcicKKwogY2xhc3MgQzoKICAgICBkZWYgbWV0aG9kKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC00Nyw2ICs1MSwxMSBAQAogICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuYXJnKQorICAgIGRlZiBzb21lX21ldGhvZChzZWxmKToKKyAgICAgICAgcmV0dXJuIDQKKyAgICBkZWYgb3RoZXJfbWV0aG9kKHNlbGYpOgorICAgICAgICByZXR1cm4gNQorCiAKIGNsYXNzIFJlZkN5Y2xlOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTc5NCw2ICs4MDMsMzAgQEAKICAgICAgICAgZGVsIHJvb3QKICAgICAgICAgZ2MuY29sbGVjdCgpCiAKKyAgICBkZWYgdGVzdF9jYWxsYmFja19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHggPSBPYmplY3QoMSkKKyAgICAgICAgY2FsbGJhY2sgPSBsYW1iZGEgcmVmOiBOb25lCisgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZih4LCBjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWYxLl9fY2FsbGJhY2tfXywgY2FsbGJhY2spCisKKyAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZjIuX19jYWxsYmFja19fKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfYXR0cmlidXRlX2FmdGVyX2RlbGV0aW9uKHNlbGYpOgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKHgsIHNlbGYuY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlZi5fX2NhbGxiYWNrX18pCisgICAgICAgIGRlbCB4CisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZi5fX2NhbGxiYWNrX18pCisKKyAgICBkZWYgdGVzdF9zZXRfY2FsbGJhY2tfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIGNhbGxiYWNrID0gbGFtYmRhIHJlZjogTm9uZQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYoeCwgY2FsbGJhY2spCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgcmVmMS5fX2NhbGxiYWNrX18gPSBsYW1iZGEgcmVmOiBOb25lCisKIAogY2xhc3MgU3ViY2xhc3NhYmxlV2Vha3JlZlRlc3RDYXNlKFRlc3RCYXNlKToKIApAQCAtODk4LDYgKzkzMSwxNDAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNiY2FsbGVkLCAwKQogCiAKK2NsYXNzIFdlYWtNZXRob2RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBPYmplY3Qgc3ViY2xhc3Mgb3ZlcnJpZGluZyBgc29tZV9tZXRob2RgLiIiIgorICAgICAgICBjbGFzcyBDKE9iamVjdCk6CisgICAgICAgICAgICBkZWYgc29tZV9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDYKKyAgICAgICAgcmV0dXJuIEMKKworICAgIGRlZiB0ZXN0X2FsaXZlKHNlbGYpOgorICAgICAgICBvID0gT2JqZWN0KDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIHdlYWtyZWYuUmVmZXJlbmNlVHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIoKSwgdHlwZShvLnNvbWVfbWV0aG9kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCkuX19zZWxmX18sIG8pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLl9fZnVuY19fLCBvLnNvbWVfbWV0aG9kLl9fZnVuY19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSgpLCA0KQorCisgICAgZGVmIHRlc3Rfb2JqZWN0X2RlYWQoc2VsZik6CisgICAgICAgIG8gPSBPYmplY3QoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kKQorICAgICAgICBkZWwgbworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9tZXRob2RfZGVhZChzZWxmKToKKyAgICAgICAgQyA9IHNlbGYuX3N1YmNsYXNzKCkKKyAgICAgICAgbyA9IEMoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kKQorICAgICAgICBkZWwgQy5zb21lX21ldGhvZAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja193aGVuX29iamVjdF9kZWFkKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FsbGJhY2sgYmVoYXZpb3VyIHdoZW4gb2JqZWN0IGRpZXMgZmlyc3QuCisgICAgICAgIEMgPSBzZWxmLl9zdWJjbGFzcygpCisgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgZGVmIGNiKGFyZyk6CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJnKQorICAgICAgICBvID0gQygxKQorICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICBkZWwgbworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgW3JdKQorICAgICAgICAjIENhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIG9uY2UuCisgICAgICAgIEMuc29tZV9tZXRob2QgPSBPYmplY3Quc29tZV9tZXRob2QKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3doZW5fbWV0aG9kX2RlYWQoc2VsZik6CisgICAgICAgICMgVGVzdCBjYWxsYmFjayBiZWhhdmlvdXIgd2hlbiBtZXRob2QgZGllcyBmaXJzdC4KKyAgICAgICAgQyA9IHNlbGYuX3N1YmNsYXNzKCkKKyAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICBkZWYgY2IoYXJnKToKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChhcmcpCisgICAgICAgIG8gPSBDKDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCwgY2IpCisgICAgICAgIGRlbCBDLnNvbWVfbWV0aG9kCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbcl0pCisgICAgICAgICMgQ2FsbGJhY2sgaXMgb25seSBjYWxsZWQgb25jZS4KKyAgICAgICAgZGVsIG8KKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X25vX2N5Y2xlcyhzZWxmKToKKyAgICAgICAgIyBBIFdlYWtNZXRob2QgZG9lc24ndCBjcmVhdGUgYW55IHJlZmVyZW5jZSBjeWNsZSB0byBpdHNlbGYuCisgICAgICAgIG8gPSBPYmplY3QoMSkKKyAgICAgICAgZGVmIGNiKF8pOgorICAgICAgICAgICAgcGFzcworICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHIpCisgICAgICAgIGRlbCByCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBkZWYgX2VxKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSAhPSBiKQorICAgICAgICBkZWYgX25lKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgIT0gYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSA9PSBiKQorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHkgPSBPYmplY3QoMSkKKyAgICAgICAgYSA9IHdlYWtyZWYuV2Vha01ldGhvZCh4LnNvbWVfbWV0aG9kKQorICAgICAgICBiID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkuc29tZV9tZXRob2QpCisgICAgICAgIGMgPSB3ZWFrcmVmLldlYWtNZXRob2QoeC5vdGhlcl9tZXRob2QpCisgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5vdGhlcl9tZXRob2QpCisgICAgICAgICMgT2JqZWN0cyBlcXVhbCwgc2FtZSBtZXRob2QKKyAgICAgICAgX2VxKGEsIGIpCisgICAgICAgIF9lcShjLCBkKQorICAgICAgICAjIE9iamVjdHMgZXF1YWwsIGRpZmZlcmVudCBtZXRob2QKKyAgICAgICAgX25lKGEsIGMpCisgICAgICAgIF9uZShhLCBkKQorICAgICAgICBfbmUoYiwgYykKKyAgICAgICAgX25lKGIsIGQpCisgICAgICAgICMgT2JqZWN0cyB1bmVxdWFsLCBzYW1lIG9yIGRpZmZlcmVudCBtZXRob2QKKyAgICAgICAgeiA9IE9iamVjdCgyKQorICAgICAgICBlID0gd2Vha3JlZi5XZWFrTWV0aG9kKHouc29tZV9tZXRob2QpCisgICAgICAgIGYgPSB3ZWFrcmVmLldlYWtNZXRob2Qoei5vdGhlcl9tZXRob2QpCisgICAgICAgIF9uZShhLCBlKQorICAgICAgICBfbmUoYSwgZikKKyAgICAgICAgX25lKGIsIGUpCisgICAgICAgIF9uZShiLCBmKQorICAgICAgICBkZWwgeCwgeSwgegorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgIyBEZWFkIFdlYWtNZXRob2RzIGNvbXBhcmUgYnkgaWRlbnRpdHkKKyAgICAgICAgcmVmcyA9IGEsIGIsIGMsIGQsIGUsIGYKKyAgICAgICAgZm9yIHEgaW4gcmVmczoKKyAgICAgICAgICAgIGZvciByIGluIHJlZnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxID09IHIsIHEgaXMgcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEgIT0gciwgcSBpcyBub3QgcikKKworICAgIGRlZiB0ZXN0X2hhc2hpbmcoc2VsZik6CisgICAgICAgICMgQWxpdmUgV2Vha01ldGhvZHMgYXJlIGhhc2hhYmxlIGlmIHRoZSB1bmRlcmx5aW5nIG9iamVjdCBpcworICAgICAgICAjIGhhc2hhYmxlLgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHkgPSBPYmplY3QoMSkKKyAgICAgICAgYSA9IHdlYWtyZWYuV2Vha01ldGhvZCh4LnNvbWVfbWV0aG9kKQorICAgICAgICBiID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkuc29tZV9tZXRob2QpCisgICAgICAgIGMgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5vdGhlcl9tZXRob2QpCisgICAgICAgICMgU2luY2UgV2Vha01ldGhvZCBvYmplY3RzIGFyZSBlcXVhbCwgdGhlIGhhc2hlcyBzaG91bGQgYmUgZXF1YWwuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGFzaChiKSkKKyAgICAgICAgaGEgPSBoYXNoKGEpCisgICAgICAgICMgRGVhZCBXZWFrTWV0aG9kcyByZXRhaW4gdGhlaXIgb2xkIGhhc2ggdmFsdWUKKyAgICAgICAgZGVsIHgsIHkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChiKSwgaGEpCisgICAgICAgICMgSWYgaXQgd2Fzbid0IGhhc2hlZCB3aGVuIGFsaXZlLCBhIGRlYWQgV2Vha01ldGhvZCBjYW5ub3QgYmUgaGFzaGVkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGMpCisKKwogY2xhc3MgTWFwcGluZ1Rlc3RDYXNlKFRlc3RCYXNlKToKIAogICAgIENPVU5UID0gMTAKQEAgLTEzODUsNiArMTU1MiwxNTEgQEAKICAgICBkZWYgX3JlZmVyZW5jZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX19yZWYuY29weSgpCiAKKworY2xhc3MgRmluYWxpemVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBBOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KHNlbGYpOgorICAgICAgICAjIHdlIGNyZWF0ZSBubyByZWYtY3ljbGVzIHNvIGluIENQeXRob24gbm8gZ2Mgc2hvdWxkIGJlIG5lZWRlZAorICAgICAgICBpZiBzeXMuaW1wbGVtZW50YXRpb24ubmFtZSAhPSAnY3B5dGhvbic6CisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfZmluYWxpemUoc2VsZik6CisgICAgICAgIGRlZiBhZGQoeCx5LHopOgorICAgICAgICAgICAgcmVzLmFwcGVuZCh4ICsgeSArIHopCisgICAgICAgICAgICByZXR1cm4geCArIHkgKyB6CisKKyAgICAgICAgYSA9IHNlbGYuQSgpCisKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZiA9IHdlYWtyZWYuZmluYWxpemUoYSwgYWRkLCA2NywgNDMsIHo9ODkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgKGEsIGFkZCwgKDY3LDQzKSwgeyd6Jzo4OX0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgMTk5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5kZXRhY2goKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxOTldKQorCisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIGYgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIGFkZCwgNjcsIDQzLCA4OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgKGEsIGFkZCwgKDY3LDQzLDg5KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIChhLCBhZGQsICg2Nyw0Myw4OSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbXSkKKworICAgICAgICByZXMgPSBbXQorICAgICAgICBmID0gd2Vha3JlZi5maW5hbGl6ZShhLCBhZGQsIHg9NjcsIHk9NDMsIHo9ODkpCisgICAgICAgIGRlbCBhCisgICAgICAgIHNlbGYuX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbMTk5XSkKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBhID0gc2VsZi5BKCkKKyAgICAgICAgcmVzID0gW10KKworICAgICAgICBmMSA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2YxJykKKyAgICAgICAgZjIgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmMicpCisgICAgICAgIGYzID0gd2Vha3JlZi5maW5hbGl6ZShhLCByZXMuYXBwZW5kLCAnZjMnKQorICAgICAgICBmNCA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2Y0JykKKyAgICAgICAgZjUgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmNScpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgZmluYWxpemVycyBjYW4ga2VlcCB0aGVtc2VsdmVzIGFsaXZlCisgICAgICAgIGRlbCBmMSwgZjQKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZjIuYWxpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMy5hbGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGY1LmFsaXZlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmNS5kZXRhY2goKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmNS5hbGl2ZSkKKworICAgICAgICBmNSgpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IHVucmVnaXN0ZXJlZAorICAgICAgICByZXMuYXBwZW5kKCdBJykKKyAgICAgICAgZjMoKSAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjMuYWxpdmUpCisgICAgICAgIHJlcy5hcHBlbmQoJ0InKQorICAgICAgICBmMygpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IGNhbGxlZAorICAgICAgICByZXMuYXBwZW5kKCdDJykKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjID0+IHJlcy5hcHBlbmQoJ2Y0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgPT4gcmVzLmFwcGVuZCgnZjEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYyLmFsaXZlKQorICAgICAgICByZXMuYXBwZW5kKCdEJykKKyAgICAgICAgZjIoKSAgICAgICAgICAgICAgICAgICAgICAgIyBub3RoaW5nIGJlY2F1c2UgcHJldmlvdXNseSBjYWxsZWQgYnkgZ2MKKworICAgICAgICBleHBlY3RlZCA9IFsnQScsICdmMycsICdCJywgJ0MnLCAnZjQnLCAnZjInLCAnZjEnLCAnRCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2FsbF9mcmVlZChzZWxmKToKKyAgICAgICAgIyB3ZSB3YW50IGEgd2Vha3JlZmFibGUgc3ViY2xhc3Mgb2Ygd2Vha3JlZi5maW5hbGl6ZQorICAgICAgICBjbGFzcyBNeUZpbmFsaXplcih3ZWFrcmVmLmZpbmFsaXplKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhID0gc2VsZi5BKCkKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICByZXMuYXBwZW5kKDEyMykKKyAgICAgICAgZiA9IE15RmluYWxpemVyKGEsIGNhbGxiYWNrKQorCisgICAgICAgIHdyX2NhbGxiYWNrID0gd2Vha3JlZi5yZWYoY2FsbGJhY2spCisgICAgICAgIHdyX2YgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICBkZWwgY2FsbGJhY2ssIGYKKworICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cl9jYWxsYmFjaygpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cl9mKCkpCisKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyX2NhbGxiYWNrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyX2YoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxMjNdKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHJ1bl9pbl9jaGlsZChjbHMpOgorICAgICAgICBkZWYgZXJyb3IoKToKKyAgICAgICAgICAgICMgQ3JlYXRlIGFuIGF0ZXhpdCBmaW5hbGl6ZXIgZnJvbSBpbnNpZGUgYSBmaW5hbGl6ZXIgY2FsbGVkCisgICAgICAgICAgICAjIGF0IGV4aXQuICBUaGlzIHNob3VsZCBiZSB0aGUgbmV4dCB0byBiZSBydW4uCisgICAgICAgICAgICBnMSA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBwcmludCwgJ2cxJykKKyAgICAgICAgICAgIHByaW50KCdmMyBlcnJvcicpCisgICAgICAgICAgICAxLzAKKworICAgICAgICAjIGNscyBzaG91bGQgc3RheSBhbGl2ZSB0aWxsIGF0ZXhpdCBjYWxsYmFja3MgcnVuCisgICAgICAgIGYxID0gd2Vha3JlZi5maW5hbGl6ZShjbHMsIHByaW50LCAnZjEnLCBfZ2xvYmFsX3ZhcikKKyAgICAgICAgZjIgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmMicsIF9nbG9iYWxfdmFyKQorICAgICAgICBmMyA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBlcnJvcikKKyAgICAgICAgZjQgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmNCcsIF9nbG9iYWxfdmFyKQorCisgICAgICAgIGFzc2VydCBmMS5hdGV4aXQgPT0gVHJ1ZQorICAgICAgICBmMi5hdGV4aXQgPSBGYWxzZQorICAgICAgICBhc3NlcnQgZjMuYXRleGl0ID09IFRydWUKKyAgICAgICAgYXNzZXJ0IGY0LmF0ZXhpdCA9PSBUcnVlCisKKyAgICBkZWYgdGVzdF9hdGV4aXQoc2VsZik6CisgICAgICAgIHByb2cgPSAoJ2Zyb20gdGVzdC50ZXN0X3dlYWtyZWYgaW1wb3J0IEZpbmFsaXplVGVzdENhc2U7JysKKyAgICAgICAgICAgICAgICAnRmluYWxpemVUZXN0Q2FzZS5ydW5faW5fY2hpbGQoKScpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBwcm9nKQorICAgICAgICBvdXQgPSBvdXQuZGVjb2RlKCdhc2NpaScpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgWydmNCBmb29iYXInLCAnZjMgZXJyb3InLCAnZzEnLCAnZjEgZm9vYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiJ1plcm9EaXZpc2lvbkVycm9yJyBpbiBlcnIpCisKKwogbGlicmVmdGVzdCA9ICIiIiBEb2N0ZXN0IGZvciBleGFtcGxlcyBpbiB0aGUgbGlicmFyeSByZWZlcmVuY2U6IHdlYWtyZWYucnN0CiAKID4+PiBpbXBvcnQgd2Vha3JlZgpAQCAtMTQ3MywxMCArMTc4NSwxMiBAQAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBSZWZlcmVuY2VzVGVzdENhc2UsCisgICAgICAgIFdlYWtNZXRob2RUZXN0Q2FzZSwKICAgICAgICAgTWFwcGluZ1Rlc3RDYXNlLAogICAgICAgICBXZWFrVmFsdWVEaWN0aW9uYXJ5VGVzdENhc2UsCiAgICAgICAgIFdlYWtLZXlEaWN0aW9uYXJ5VGVzdENhc2UsCiAgICAgICAgIFN1YmNsYXNzYWJsZVdlYWtyZWZUZXN0Q2FzZSwKKyAgICAgICAgRmluYWxpemVUZXN0Q2FzZSwKICAgICAgICAgKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3Qoc3lzLm1vZHVsZXNbX19uYW1lX19dKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CmluZGV4IGNiNGNkZTkuLmVmNGNlNTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CkBAIC04LDcgKzgsNyBAQAogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgbWFjaGluZQogCiAjIERvIHRoaXMgZmlyc3Qgc28gdGVzdCB3aWxsIGJlIHNraXBwZWQgaWYgbW9kdWxlIGRvZXNuJ3QgZXhpc3QKLXN1cHBvcnQuaW1wb3J0X21vZHVsZSgnd2lucmVnJykKK3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnd2lucmVnJywgcmVxdWlyZWRfb249Wyd3aW4nXSkKICMgTm93IGltcG9ydCBldmVyeXRoaW5nCiBmcm9tIHdpbnJlZyBpbXBvcnQgKgogCkBAIC01NywxMyArNTcsMTMgQEAKICAgICBkZWYgZGVsZXRlX3RyZWUoc2VsZiwgcm9vdCwgc3Via2V5KToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaGtleSA9IE9wZW5LZXkocm9vdCwgc3Via2V5LCBLRVlfQUxMX0FDQ0VTUykKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIHN1YmtleSBkb2VzIG5vdCBleGlzdAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3Vic3Via2V5ID0gRW51bUtleShoa2V5LCAwKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICMgbm8gbW9yZSBzdWJrZXlzCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHNlbGYuZGVsZXRlX3RyZWUoaGtleSwgc3Vic3Via2V5KQpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgICAgICBRdWVyeUluZm9LZXkoaW50X3N1Yl9rZXkpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkl0IGFwcGVhcnMgdGhlIENsb3NlS2V5KCkgZnVuY3Rpb24gZG9lcyAiCiAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBjbG9zZSB0aGUgYWN0dWFsIGtleSEiKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgLi4uIGFuZCBjbG9zZSB0aGF0IGtleSB0aGF0IHdheSA6LSkKICAgICAgICAgaW50X2tleSA9IGludChrZXkpCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgIFF1ZXJ5SW5mb0tleShpbnRfa2V5KQogICAgICAgICAgICAgc2VsZi5mYWlsKCJJdCBhcHBlYXJzIHRoZSBrZXkuQ2xvc2UoKSBmdW5jdGlvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgImRvZXMgbm90IGNsb3NlIHRoZSBhY3R1YWwga2V5ISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfcmVhZF90ZXN0X2RhdGEoc2VsZiwgcm9vdF9rZXksIHN1YmtleXN0cj0ic3ViX2tleSIsIE9wZW5LZXk9T3BlbktleSk6CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gRW51bVZhbHVlKHN1Yl9rZXksIGluZGV4KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSBpbiB0ZXN0X2RhdGEsIFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkbid0IHJlYWQgYmFjayB0aGUgY29ycmVjdCB0ZXN0IGRhdGEiKQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIEVudW1LZXkoa2V5LCAxKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJXYXMgYWJsZSB0byBnZXQgYSBzZWNvbmQga2V5IHdoZW4gSSBvbmx5IGhhdmUgb25lISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBrZXkuQ2xvc2UoKQpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICAjIFNob3VsZG50IGJlIGFibGUgdG8gZGVsZXRlIGl0IHR3aWNlIQogICAgICAgICAgICAgRGVsZXRlS2V5KGtleSwgc3Via2V5c3RyKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJEZWxldGluZyB0aGUga2V5IHR3aWNlIHN1Y2NlZWRlZCIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAga2V5LkNsb3NlKCkKICAgICAgICAgRGVsZXRlS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGtleSA9IE9wZW5LZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvdWxkIG9wZW4gdGhlIG5vbi1leGlzdGVudCBrZXkiKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOiAjIFVzZSB0aGlzIGVycm9yIG5hbWUgdGhpcyB0aW1lCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjIFVzZSB0aGlzIGVycm9yIG5hbWUgdGhpcyB0aW1lCiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgX3Rlc3RfYWxsKHNlbGYsIHJvb3Rfa2V5LCBzdWJrZXlzdHI9InN1Yl9rZXkiKToKQEAgLTIzMCw3ICsyMzAsNyBAQAogCiAgICAgZGVmIHRlc3RfaW5leGlzdGFudF9yZW1vdGVfcmVnaXN0cnkoc2VsZik6CiAgICAgICAgIGNvbm5lY3QgPSBsYW1iZGE6IENvbm5lY3RSZWdpc3RyeSgiYWJjZGVmZ2hpamtsIiwgSEtFWV9DVVJSRU5UX1VTRVIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY29ubmVjdCkKIAogICAgIGRlZiB0ZXN0RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKHNlbGYpOgogICAgICAgICByID0gRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKCIld2luZGlyJVxcdGVzdCIpCkBAIC0yNDIsOCArMjQyLDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBDb25uZWN0UmVnaXN0cnkoTm9uZSwgSEtFWV9MT0NBTF9NQUNISU5FKSBhcyBoOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaC5oYW5kbGUsIDApCi0gICAgICAgICAgICAgICAgcmFpc2UgV2luZG93c0Vycm9yCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oYW5kbGUsIDApCiAKICAgICBkZWYgdGVzdF9jaGFuZ2luZ192YWx1ZShzZWxmKToKQEAgLTQwNyw3ICs0MDcsNyBAQAogICAgICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF82NEtFWSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcGVuX2ZhaWwpCiAKICAgICAgICAgICAgICMgTm93IGV4cGxpY2l0bHkgb3BlbiB0aGUgNjQtYml0IHZlcnNpb24gb2YgdGhlIGtleQogICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCkBAIC00NDcsNyArNDQ3LDcgQEAKICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9wZW5fZmFpbCkKIAogICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIDMyLWJpdCBrZXkgaXMgYWN0dWFsbHkgdGhlcmUKICAgICAgICAgICAgIHdpdGggT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5IGIvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQppbmRleCAwNjlhZGMzLi44MzYxOGI2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAga2V5ID0gd2lucmVnLk9wZW5LZXlFeCh3aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsCiAgICAgICAgICAgICAgICAgIkFwcEV2ZW50c1xTY2hlbWVzXEFwcHNcLkRlZmF1bHRcezB9XC5EZWZhdWx0Ii5mb3JtYXQoc291bmQpKQogICAgICAgICByZXR1cm4gd2lucmVnLkVudW1WYWx1ZShrZXksIDApWzFdICE9ICIiCi0gICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKIGNsYXNzIEJlZXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKaW5kZXggN2JkOGEyYy4uODk5NzFmMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKQEAgLTEwLDYgKzEwLDcgQEAKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCiAKQEAgLTI0MCw3ICsyNDEsNiBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuWE1MLCBFVC5mcm9tc3RyaW5nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVULlBJLCBFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuWE1MUGFyc2VyLCBFVC5YTUxUcmVlQnVpbGRlcikKIAogICAgIGRlZiB0ZXN0X3NpbXBsZW9wcyhzZWxmKToKICAgICAgICAgIyBCYXNpYyBtZXRob2Qgc2FuaXR5IGNoZWNrcy4KQEAgLTQzMywxNSArNDMzLDYgQEAKICAgICAgICAgICAgICAgICAnICAgPGVtcHR5LWVsZW1lbnQgLz5cbicKICAgICAgICAgICAgICAgICAnPC9yb290PicpCiAKLSAgICAgICAgcGFyc2VyID0gRVQuWE1MVHJlZUJ1aWxkZXIoKSAjIDEuMiBjb21wYXRpYmlsaXR5Ci0gICAgICAgIHBhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgIHNlbGYuc2VyaWFsaXplX2NoZWNrKHBhcnNlci5jbG9zZSgpLAotICAgICAgICAgICAgICAgICc8cm9vdD5cbicKLSAgICAgICAgICAgICAgICAnICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD5cbicKLSAgICAgICAgICAgICAgICAnICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsXG4nCi0gICAgICAgICAgICAgICAgJyAgIDxlbXB0eS1lbGVtZW50IC8+XG4nCi0gICAgICAgICAgICAgICAgJzwvcm9vdD4nKQotCiAgICAgICAgIHRhcmdldCA9IEVULlRyZWVCdWlsZGVyKCkKICAgICAgICAgcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD10YXJnZXQpCiAgICAgICAgIHBhcnNlci5mZWVkKGRhdGEpCkBAIC03MDYsOSArNjk3LDkgQEAKICAgICAgICAgICAgICdpc284ODU5LTEzJywgJ2lzbzg4NTktMTQnLCAnaXNvODg1OS0xNScsICdpc284ODU5LTE2JywKICAgICAgICAgICAgICdjcDQzNycsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsICdjcDg1MicsCiAgICAgICAgICAgICAnY3A4NTUnLCAnY3A4NTYnLCAnY3A4NTcnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAotICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywgJ2NwODY5JywgJ2NwODc0JywgJ2NwMTAwNicsICdjcDEyNTAnLAotICAgICAgICAgICAgJ2NwMTI1MScsICdjcDEyNTInLCAnY3AxMjUzJywgJ2NwMTI1NCcsICdjcDEyNTUnLCAnY3AxMjU2JywKLSAgICAgICAgICAgICdjcDEyNTcnLCAnY3AxMjU4JywKKyAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsICdjcDg2OScsICdjcDg3NCcsICdjcDEwMDYnLCAnY3AxMTI1JywKKyAgICAgICAgICAgICdjcDEyNTAnLCAnY3AxMjUxJywgJ2NwMTI1MicsICdjcDEyNTMnLCAnY3AxMjU0JywgJ2NwMTI1NScsCisgICAgICAgICAgICAnY3AxMjU2JywgJ2NwMTI1NycsICdjcDEyNTgnLAogICAgICAgICAgICAgJ21hYy1jeXJpbGxpYycsICdtYWMtZ3JlZWsnLCAnbWFjLWljZWxhbmQnLCAnbWFjLWxhdGluMicsCiAgICAgICAgICAgICAnbWFjLXJvbWFuJywgJ21hYy10dXJraXNoJywKICAgICAgICAgICAgICdpc28yMDIyLWpwJywgJ2lzbzIwMjItanAtMScsICdpc28yMDIyLWpwLTInLCAnaXNvMjAyMi1qcC0yMDA0JywKQEAgLTk2NCw2ICs5NTUsMTYwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJpYWxpemVkLCBleHBlY3RlZCkKIAogCitjbGFzcyBYTUxQdWxsUGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2ZlZWQoc2VsZiwgcGFyc2VyLCBkYXRhLCBjaHVua19zaXplPU5vbmUpOgorICAgICAgICBpZiBjaHVua19zaXplIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCBjaHVua19zaXplKToKKyAgICAgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhW2k6aStjaHVua19zaXplXSkKKworICAgIGRlZiBhc3NlcnRfZXZlbnRfdGFncyhzZWxmLCBwYXJzZXIsIGV4cGVjdGVkKToKKyAgICAgICAgZXZlbnRzID0gcGFyc2VyLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGFjdGlvbiwgZWxlbS50YWcpIGZvciBhY3Rpb24sIGVsZW0gaW4gZXZlbnRzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV94bWwoc2VsZik6CisgICAgICAgIGZvciBjaHVua19zaXplIGluIChOb25lLCAxLCA1KToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNodW5rX3NpemU9Y2h1bmtfc2l6ZSk6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHJvb3Q+XG4gIDxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbFxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIsIGNodW5rX3NpemUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsKKyAgICAgICAgICAgICAgICAgICAgKCdlbmQnLCAnZWxlbWVudCcpLAorICAgICAgICAgICAgICAgICAgICAoJ2VuZCcsICdlbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAncm9vdCcpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2ZlZWRfd2hpbGVfaXRlcmF0aW5nKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKCkKKyAgICAgICAgaXQgPSBwYXJzZXIucmVhZF9ldmVudHMoKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuICA8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50PlxuIikKKyAgICAgICAgYWN0aW9uLCBlbGVtID0gbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYWN0aW9uLCBlbGVtLnRhZyksICgnZW5kJywgJ2VsZW1lbnQnKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iKQorICAgICAgICBhY3Rpb24sIGVsZW0gPSBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhY3Rpb24sIGVsZW0udGFnKSwgKCdlbmQnLCAncm9vdCcpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24pOgorICAgICAgICAgICAgbmV4dChpdCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV94bWxfd2l0aF9ucyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8IS0tIGNvbW1lbnQgLS0+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPHJvb3QgeG1sbnM9J25hbWVzcGFjZSc+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ3tuYW1lc3BhY2V9ZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVtcHR5LWVsZW1lbnQvPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsKKyAgICAgICAgICAgICgnZW5kJywgJ3tuYW1lc3BhY2V9ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdlbmQnLCAne25hbWVzcGFjZX1lbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAne25hbWVzcGFjZX1yb290JyldKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X25zX2V2ZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCdzdGFydC1ucycsICdlbmQtbnMnKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8IS0tIGNvbW1lbnQgLS0+XG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290IHhtbG5zPSduYW1lc3BhY2UnPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxpc3QocGFyc2VyLnJlYWRfZXZlbnRzKCkpLAorICAgICAgICAgICAgWygnc3RhcnQtbnMnLCAoJycsICduYW1lc3BhY2UnKSldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsXG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhcnNlci5yZWFkX2V2ZW50cygpKSwgWygnZW5kLW5zJywgTm9uZSldKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2V2ZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPHJvb3QvPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorCisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCAnZW5kJykpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ3Jvb3QnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdlbGVtZW50JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIjxlbGVtZW50IHhtbG5zPSdmb28nPnRleHQ8ZW1wdHktZWxlbWVudC8+PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnZW5kJywgJ3tmb299ZW1wdHktZWxlbWVudCcpLAorICAgICAgICAgICAgKCdlbmQnLCAne2Zvb31lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD4iKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ2VuZCcsICdyb290JyldKQorCisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ3Jvb3QnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdlbGVtZW50JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIjxlbGVtZW50IHhtbG5zPSdmb28nPnRleHQ8ZW1wdHktZWxlbWVudC8+PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5jbG9zZSgpKQorCisgICAgZGVmIHRlc3RfZXZlbnRzX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBldmVudHMgY2FuIGJlIHNvbWUgc2VxdWVuY2UgdGhhdCdzIG5vdCBqdXN0IGEgdHVwbGUgb3IgbGlzdAorICAgICAgICBldmVudHNldCA9IHsnZW5kJywgJ3N0YXJ0J30KKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9ZXZlbnRzZXQpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGZvbz5iYXI8L2Zvbz4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnc3RhcnQnLCAnZm9vJyksICgnZW5kJywgJ2ZvbycpXSkKKworICAgICAgICBjbGFzcyBEdW1teUl0ZXI6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5ldmVudHMgPSBpdGVyKFsnc3RhcnQnLCAnZW5kJywgJ3N0YXJ0LW5zJ10pCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChzZWxmLmV2ZW50cykKKworICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKGV2ZW50cz1EdW1teUl0ZXIoKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8Zm9vPmJhcjwvZm9vPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdmb28nKSwgKCdlbmQnLCAnZm9vJyldKQorCisKKyAgICBkZWYgdGVzdF91bmtub3duX2V2ZW50KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCdzdGFydCcsICdlbmQnLCAnYm9ndXMnKSkKKworCiAjCiAjIHhpbmNsdWRlIHRlc3RzIChzYW1wbGVzIGZyb20gYXBwZW5kaXggQyBvZiB0aGUgeGluY2x1ZGUgc3BlY2lmaWNhdGlvbikKIApAQCAtMTMwNSw3ICsxNDUwLDcgQEAKICAgICAgICAgIyBEb24ndCBjcmFzaCB3aGVuIHVzaW5nIGN1c3RvbSBlbnRpdGllcy4KIAogICAgICAgICBFTlRJVElFUyA9IHsncnNxdW8nOiAnXHUyMDE5JywgJ2xzcXVvJzogJ1x1MjAxOCd9Ci0gICAgICAgIHBhcnNlciA9IEVULlhNTFRyZWVCdWlsZGVyKCkKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKICAgICAgICAgcGFyc2VyLmVudGl0eS51cGRhdGUoRU5USVRJRVMpCiAgICAgICAgIHBhcnNlci5mZWVkKCIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uIFNZU1RFTSAicGFwLXYxNS0yMDAxLTAxLTMxLmR0ZCIgW10+CkBAIC0xNjQzLDYgKzE3ODgsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbmQoJy4vdGFnW2xhc3QoKS0xXScpLmF0dHJpYlsnY2xhc3MnXSwgJ2MnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZmluZCgnLi90YWdbbGFzdCgpLTJdJykuYXR0cmliWydjbGFzcyddLCAnYicpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ1hQYXRoJywgZS5maW5kLCAnLi90YWdbMF0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1stMV0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1tsYXN0KCktMF0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1tsYXN0KCkrMV0nKQorCiAgICAgZGVmIHRlc3RfZmluZGFsbChzZWxmKToKICAgICAgICAgZSA9IEVULlhNTChTQU1QTEVfWE1MKQogICAgICAgICBlWzJdID0gRVQuWE1MKFNBTVBMRV9TRUNUSU9OKQpAQCAtMTkwMiw3ICsyMDUyLDcgQEAKICAgICAgICAgIyBNaW1pY2sgU2ltcGxlVEFMJ3MgYmVoYXZpb3VyIChpc3N1ZSAjMTYwODkpOiBib3RoIHZlcnNpb25zIG9mCiAgICAgICAgICMgVHJlZUJ1aWxkZXIgc2hvdWxkIGJlIGFibGUgdG8gY29wZSB3aXRoIGEgc3ViY2xhc3Mgb2YgdGhlCiAgICAgICAgICMgcHVyZSBQeXRob24gRWxlbWVudCBjbGFzcy4KLSAgICAgICAgYmFzZSA9IEVULl9FbGVtZW50CisgICAgICAgIGJhc2UgPSBFVC5fRWxlbWVudF9QeQogICAgICAgICAjIE5vdCBmcm9tIGEgQyBleHRlbnNpb24KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fbW9kdWxlX18sICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQogICAgICAgICAjIEZvcmNlIHNvbWUgbXVsdGlwbGUgaW5oZXJpdGFuY2Ugd2l0aCBhIEMgY2xhc3MgdG8gbWFrZSB0aGluZ3MKQEAgLTIyNjEsNiArMjQxMSwxOCBAQAogICAgICAgICAgICAgRVQudG9zdHJpbmcocm9vdCwgJ3V0Zi0xNicpLAogICAgICAgICAgICAgYicnLmpvaW4oRVQudG9zdHJpbmdsaXN0KHJvb3QsICd1dGYtMTYnKSkpCiAKKyAgICBkZWYgdGVzdF9zaG9ydF9lbXB0eV9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgcm9vdCA9IEVULmZyb21zdHJpbmcoJzx0YWc+YTx4IC8+Yjx5PjwveT5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJyksCisgICAgICAgICAgICAnPHRhZz5hPHggLz5iPHkgLz5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJywgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSksCisgICAgICAgICAgICAnPHRhZz5hPHggLz5iPHkgLz5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJywgc2hvcnRfZW1wdHlfZWxlbWVudHM9RmFsc2UpLAorICAgICAgICAgICAgJzx0YWc+YTx4PjwveD5iPHk+PC95PmM8L3RhZz4nKQorCiAKIGNsYXNzIFBhcnNlRXJyb3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zdWJjbGFzcyhzZWxmKToKQEAgLTIzMjYsOCArMjQ4OCwxMSBAQAogCiAgICAgIyBUZXN0IHRoYXQgdGhlIEMgYWNjZWxlcmF0b3Igd2FzIG5vdCBpbXBvcnRlZCBmb3IgcHlFVAogICAgIGRlZiB0ZXN0X2NvcnJlY3RfaW1wb3J0X3B5RVQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlFVC5FbGVtZW50Ll9fbW9kdWxlX18sICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5RVQuU3ViRWxlbWVudC5fX21vZHVsZV9fLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJykKKyAgICAgICAgIyBUaGUgdHlwZSBvZiBtZXRob2RzIGRlZmluZWQgaW4gUHl0aG9uIGNvZGUgaXMgdHlwZXMuRnVuY3Rpb25UeXBlLAorICAgICAgICAjIHdoaWxlIHRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgX2VsZW1lbnR0cmVlIGlzCisgICAgICAgICMgPGNsYXNzICd3cmFwcGVyX2Rlc2NyaXB0b3InPgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHlFVC5FbGVtZW50Ll9faW5pdF9fLCB0eXBlcy5GdW5jdGlvblR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShweUVULlhNTFBhcnNlci5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIzOTcsNiArMjU2Miw3IEBACiAgICAgICAgIEVsZW1lbnRJdGVyVGVzdCwKICAgICAgICAgVHJlZUJ1aWxkZXJUZXN0LAogICAgICAgICBYTUxQYXJzZXJUZXN0LAorICAgICAgICBYTUxQdWxsUGFyc2VyVGVzdCwKICAgICAgICAgQnVnc1Rlc3QsCiAgICAgICAgIF0KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKaW5kZXggZDA0YjdkYy4uODE2YWE4NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHN5cywgc3RydWN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBpbXBvcnRfZnJlc2hfbW9kdWxlCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCiBjRVQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCd4bWwuZXRyZWUuRWxlbWVudFRyZWUnLApAQCAtMzEsMTQgKzMyLDIyIEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoY0VULCAncmVxdWlyZXMgX2VsZW1lbnR0cmVlJykKK0BzdXBwb3J0LmNweXRob25fb25seQogY2xhc3MgVGVzdEFjY2VsZXJhdG9ySW1wb3J0ZWQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGVzdCB0aGF0IHRoZSBDIGFjY2VsZXJhdG9yIHdhcyBpbXBvcnRlZCwgYXMgZXhwZWN0ZWQKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVQoc2VsZik6CisgICAgICAgICMgU3ViRWxlbWVudCBpcyBhIGZ1bmN0aW9uIHNvIGl0IHJldGFpbnMgX2VsZW1lbnR0cmVlIGFzIGl0cyBtb2R1bGUuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VULlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVRfYWxpYXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VUX2FsaWFzLlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKKyAgICBkZWYgdGVzdF9wYXJzZXJfY29tZXNfZnJvbV9DKHNlbGYpOgorICAgICAgICAjIFRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbiBQeXRob24gY29kZSBpcyB0eXBlcy5GdW5jdGlvblR5cGUsCisgICAgICAgICMgd2hpbGUgdGhlIHR5cGUgb2YgbWV0aG9kcyBkZWZpbmVkIGluc2lkZSBfZWxlbWVudHRyZWUgaXMKKyAgICAgICAgIyA8Y2xhc3MgJ3dyYXBwZXJfZGVzY3JpcHRvcic+CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShjRVQuRWxlbWVudC5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQorCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKGNFVCwgJ3JlcXVpcmVzIF9lbGVtZW50dHJlZScpCiBAc3VwcG9ydC5jcHl0aG9uX29ubHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKaW5kZXggY2M1MjI1OS4uOTliM2VkYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKQEAgLTE1LDYgKzE1LDEwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogdHJ5OgorICAgIGltcG9ydCBnemlwCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ3ppcCA9IE5vbmUKK3RyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQpAQCAtMjE2LDcgKzIyMCw3IEBACiAgICAgICAgICAgICB4bWxycGMuY2xpZW50LlNlcnZlclByb3h5KCdodHRwczovL2xvY2FsaG9zdDo5OTk5JykuYmFkX2Z1bmN0aW9uKCkKICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc19zc2wsICJ4bWxycGMgY2xpZW50J3MgZXJyb3Igd2l0aCBTU0wgc3VwcG9ydCIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc19zc2wpCiAKIGNsYXNzIEhlbHBlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM3Niw2ICszODAsMTEgQEAKICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2Rpdic6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdUaGlzIGlzIHRoZSBkaXYgZnVuY3Rpb24nCiAKKyAgICAgICAgY2xhc3MgRml4dHVyZToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXREYXRhKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICc0MicKKwogICAgIGRlZiBteV9mdW5jdGlvbigpOgogICAgICAgICAnJydUaGlzIGlzIG15IGZ1bmN0aW9uJycnCiAgICAgICAgIHJldHVybiBUcnVlCkBAIC00MDcsNyArNDE2LDggQEAKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihwb3cpCiAgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24obGFtYmRhIHgseTogeCt5LCAnYWRkJykKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihteV9mdW5jdGlvbikKLSAgICAgICAgc2Vydi5yZWdpc3Rlcl9pbnN0YW5jZShUZXN0SW5zdGFuY2VDbGFzcygpKQorICAgICAgICB0ZXN0SW5zdGFuY2UgPSBUZXN0SW5zdGFuY2VDbGFzcygpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfaW5zdGFuY2UodGVzdEluc3RhbmNlLCBhbGxvd19kb3R0ZWRfbmFtZXM9VHJ1ZSkKICAgICAgICAgZXZ0LnNldCgpCiAKICAgICAgICAgIyBoYW5kbGUgdXAgdG8gJ251bXJlcXVlc3RzJyByZXF1ZXN0cwpAQCAtNTAwLDcgKzUxMCw3IEBACiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBleGNfbWVzcyA9IGUuaGVhZGVycy5nZXQoJ1gtZXhjZXB0aW9uJykKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICMgSWdub3JlIHNvY2tldC5lcnJvcnMgaGVyZS4KKyAgICAgICAgIyBJZ25vcmUgT1NFcnJvcnMgaGVyZS4KICAgICAgICAgZXhjX21lc3MgPSBzdHIoZSkKIAogICAgIGlmIGV4Y19tZXNzIGFuZCAndGVtcG9yYXJpbHkgdW5hdmFpbGFibGUnIGluIGV4Y19tZXNzLmxvd2VyKCk6CkBAIC01MTUsNyArNTI1LDcgQEAKICAgICAgICAgZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcChzZWxmKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKS5teV9mdW5jdGlvbigpCi0gICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChyZWFzb24pCkBAIC01NTMsNyArNTYzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNTY2LDcgKzU3Niw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZGQoc3RhcnRfc3RyaW5nLCBlbmRfc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc3RyaW5nICsgZW5kX3N0cmluZykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC01ODcsMTIgKzU5NywxMyBAQAogICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24xKHNlbGYpOgogICAgICAgICBleHBlY3RlZF9tZXRob2RzID0gc2V0KFsncG93JywgJ2RpdicsICdteV9mdW5jdGlvbicsICdhZGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLmxpc3RNZXRob2RzJywgJ3N5c3RlbS5tZXRob2RIZWxwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5tZXRob2RTaWduYXR1cmUnLCAnc3lzdGVtLm11bHRpY2FsbCddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLm1ldGhvZFNpZ25hdHVyZScsICdzeXN0ZW0ubXVsdGljYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpeHR1cmUnXSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBtZXRoID0gcC5zeXN0ZW0ubGlzdE1ldGhvZHMoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobWV0aCksIGV4cGVjdGVkX21ldGhvZHMpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjA1LDcgKzYxNiw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIGRpdmhlbHAgPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdkaXYnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZoZWxwLCAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02MTksNyArNjMwLDcgQEAKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgbXlmdW5jdGlvbiA9IHAuc3lzdGVtLm1ldGhvZEhlbHAoJ215X2Z1bmN0aW9uJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlmdW5jdGlvbiwgJ1RoaXMgaXMgbXkgZnVuY3Rpb24nKQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTYzMiw3ICs2NDMsNyBAQAogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBkaXZzaWcgPSBwLnN5c3RlbS5tZXRob2RTaWduYXR1cmUoJ2RpdicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdnNpZywgJ3NpZ25hdHVyZXMgbm90IHN1cHBvcnRlZCcpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjQ5LDcgKzY2MCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZF9yZXN1bHQsIDIrMykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93X3Jlc3VsdCwgNioqOCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2X3Jlc3VsdCwgMTI3Ly80MikKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02NzAsNyArNjgxLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnJlc3VsdHNbMF1bJ2ZhdWx0U3RyaW5nJ10sCiAgICAgICAgICAgICAgICAgJzxjbGFzcyBcJ0V4Y2VwdGlvblwnPjptZXRob2QgInRoaXNfaXNfbm90X2V4aXN0cyIgJwogICAgICAgICAgICAgICAgICdpcyBub3Qgc3VwcG9ydGVkJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02ODYsNiArNjk3LDEyIEBACiAgICAgICAgICMgVGhpcyBhdm9pZHMgd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0aW1lb3V0LgogICAgICAgICBzZWxmLnRlc3Rfc2ltcGxlMSgpCiAKKyAgICBkZWYgdGVzdF9hbGxvd19kb3R0ZWRfbmFtZXNfdHJ1ZShzZWxmKToKKyAgICAgICAgIyBYWFggYWxzbyBuZWVkIGFsbG93X2RvdHRlZF9uYW1lc19mYWxzZSB0ZXN0LgorICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly8lczolZC9SUEMyIiAlIChBRERSLCBQT1JUKSkKKyAgICAgICAgZGF0YSA9IHNlcnZlci5GaXh0dXJlLmdldERhdGEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICc0MicpCisKICAgICBkZWYgdGVzdF91bmljb2RlX2hvc3Qoc2VsZik6CiAgICAgICAgIHNlcnZlciA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgiaHR0cDovLyVzOiVkL1JQQzIiICUgKEFERFIsIFBPUlQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5hZGQoImEiLCAiXHhlOSIpLCAiYVx4ZTkiKQpAQCAtNzkzLDYgKzgxMCw3IEBACiAKICNBIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgZ3ppcCBlbmNvZGluZyB3b3JrcyBpbiBib3RoIGRpcmVjdGlvbnMKICMoZm9yIGEgcmVxdWVzdCBhbmQgdGhlIHJlc3BvbnNlKQorQHVuaXR0ZXN0LnNraXBJZihnemlwIGlzIE5vbmUsICdyZXF1aXJlcyBnemlwJykKIGNsYXNzIEd6aXBTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgogICAgICNhIHJlcXVlc3QgaGFuZGxlciB0aGF0IHN1cHBvcnRzIGtlZXAtYWxpdmUgYW5kIGxvZ3MgcmVxdWVzdHMgaW50byBhCiAgICAgI2NsYXNzIHZhcmlhYmxlCkBAIC05MjMsNyArOTQxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtOTM2LDcgKzk1NCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgcC5wb3coNiw4KQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKSBhbmQgaGFzYXR0cihlLCAiaGVhZGVycyIpOgogICAgICAgICAgICAgICAgICMgVGhlIHR3byBzZXJ2ZXItc2lkZSBlcnJvciBoZWFkZXJzIHNob3VsZG4ndCBiZSBzZW50IGJhY2sgaW4gdGhpcyBjYXNlCkBAIC05NTYsNyArOTc0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBwLnBvdyg2LDgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpIGFuZCBoYXNhdHRyKGUsICJoZWFkZXJzIik6CiAgICAgICAgICAgICAgICAgIyBXZSBzaG91bGQgZ2V0IGVycm9yIGluZm8gaW4gdGhlIHJlc3BvbnNlCkBAIC0xMDg0LDIzICsxMTAyLDEzIEBACiAKIEBzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgotICAgIHhtbHJwY190ZXN0cyA9IFtYTUxSUENUZXN0Q2FzZSwgSGVscGVyVGVzdENhc2UsIERhdGVUaW1lVGVzdENhc2UsCi0gICAgICAgICBCaW5hcnlUZXN0Q2FzZSwgRmF1bHRUZXN0Q2FzZV0KLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoU2ltcGxlU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTEpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTIpCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgZ3ppcAotICAgICAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEd6aXBTZXJ2ZXJUZXN0Q2FzZSkKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MgI2d6aXAgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChNdWx0aVBhdGhTZXJ2ZXJUZXN0Q2FzZSkKLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNlcnZlclByb3h5VGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChGYWlsaW5nU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChDR0lIYW5kbGVyVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLAorICAgICAgICAgICAgQmluYXJ5VGVzdENhc2UsIEZhdWx0VGVzdENhc2UsIFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlLAorICAgICAgICAgICAgU2ltcGxlU2VydmVyVGVzdENhc2UsIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMSwKKyAgICAgICAgICAgIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMiwgR3ppcFNlcnZlclRlc3RDYXNlLAorICAgICAgICAgICAgTXVsdGlQYXRoU2VydmVyVGVzdENhc2UsIFNlcnZlclByb3h5VGVzdENhc2UsIEZhaWxpbmdTZXJ2ZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgIENHSUhhbmRsZXJUZXN0Q2FzZSkKIAotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp4bWxycGNfdGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weSBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weQppbmRleCA3N2Y2NmVhLi5iNjBiODJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGNfbmV0LnB5CkBAIC03LDMxICs3LDcgQEAKIAogaW1wb3J0IHhtbHJwYy5jbGllbnQgYXMgeG1scnBjbGliCiAKLWNsYXNzIEN1cnJlbnRUaW1lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9jdXJyZW50X3RpbWUoc2VsZik6Ci0gICAgICAgICMgR2V0IHRoZSBjdXJyZW50IHRpbWUgZnJvbSB4bWxycGMuY29tLiAgVGhpcyBjb2RlIGV4ZXJjaXNlcwotICAgICAgICAjIHRoZSBtaW5pbWFsIEhUVFAgZnVuY3Rpb25hbGl0eSBpbiB4bWxycGNsaWIuCi0gICAgICAgIHNlbGYuc2tpcFRlc3QoInRpbWUueG1scnBjLmNvbSBpcyB1bnJlbGlhYmxlIikKLSAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vdGltZS54bWxycGMuY29tL1JQQzIiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0MCA9IHNlcnZlci5jdXJyZW50VGltZS5nZXRDdXJyZW50VGltZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5ldHdvcmsgZXJyb3I6ICVzIiAlIGUpCi0KLSAgICAgICAgIyBQZXJmb3JtIGEgbWluaW1hbCBzYW5pdHkgY2hlY2sgb24gdGhlIHJlc3VsdCwganVzdCB0byBiZSBzdXJlCi0gICAgICAgICMgdGhlIHJlcXVlc3QgbWVhbnMgd2hhdCB3ZSB0aGluayBpdCBtZWFucy4KLSAgICAgICAgdDEgPSB4bWxycGNsaWIuRGF0ZVRpbWUoKQotCi0gICAgICAgIGR0MCA9IHhtbHJwY2xpYi5fZGF0ZXRpbWVfdHlwZSh0MC52YWx1ZSkKLSAgICAgICAgZHQxID0geG1scnBjbGliLl9kYXRldGltZV90eXBlKHQxLnZhbHVlKQotICAgICAgICBpZiBkdDAgPiBkdDE6Ci0gICAgICAgICAgICBkZWx0YSA9IGR0MCAtIGR0MQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVsdGEgPSBkdDEgLSBkdDAKLSAgICAgICAgIyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzeXN0ZW0gdGltZSBoZXJlIGFuZCB0aGUgc3lzdGVtCi0gICAgICAgICMgdGltZSBvbiB0aGUgc2VydmVyIHNob3VsZCBub3QgYmUgdG9vIGJpZy4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlbHRhLmRheXMgPD0gMSkKK2NsYXNzIFB5dGhvbkJ1aWxkZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9weXRob25fYnVpbGRlcnMoc2VsZik6CiAgICAgICAgICMgR2V0IHRoZSBsaXN0IG9mIGJ1aWxkZXJzIGZyb20gdGhlIFhNTFJQQyBidWlsZGJvdCBpbnRlcmZhY2UgYXQKQEAgLTM5LDcgKzE1LDcgQEAKICAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vYnVpbGRib3QucHl0aG9uLm9yZy9hbGwveG1scnBjLyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGJ1aWxkZXJzID0gc2VydmVyLmdldEFsbEJ1aWxkZXJzKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibmV0d29yayBlcnJvcjogJXMiICUgZSkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc2VydmVyKCdjbG9zZScpKCkpCiAKQEAgLTUxLDcgKzI3LDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucmVxdWlyZXMoIm5ldHdvcmsiKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEN1cnJlbnRUaW1lVGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQeXRob25CdWlsZGVyc1Rlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQppbmRleCAxMmEwZjcxLi4xYmVmNTc1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CkBAIC0xLDcgKzEsNyBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHRpbWUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzdHJ1Y3QKQEAgLTE0LDcgKzE0LDcgQEAKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChURVNURk4sIGZpbmRmaWxlLCB1bmxpbmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzX3psaWIsIHJlcXVpcmVzX2J6MiwgcmVxdWlyZXNfbHptYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWRfc3Rkb3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQsIGNoZWNrX3dhcm5pbmdzKQogCiBURVNURk4yID0gVEVTVEZOICsgIjIiCiBURVNURk5ESVIgPSBURVNURk4gKyAiZCIKQEAgLTM1LDYgKzM1LDEwIEBACiAgICAgICAgIHlpZWxkIGYKICAgICAgICAgdGVzdC5hc3NlcnRGYWxzZShmLmNsb3NlZCkKIAorZGVmIG9wZW5VKHppcGZwLCBmbik6CisgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICByZXR1cm4gemlwZnAub3BlbihmbiwgJ3JVJykKKwogY2xhc3MgQWJzdHJhY3RUZXN0c1dpdGhTb3VyY2VGaWxlOgogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CkBAIC01MzcsMTIgKzU0MSwxMiBAQAogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfU1RPUkVECiAKICAgICBkZWYgbGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PUZhbHNlKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGUsIFRFU1RGTiwgImFub3RoZXIubmFtZSIpCiAKICAgICBkZWYgbGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdDIoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbiwgYWxsb3daaXA2ND1GYWxzZSkgYXMgemlwZnA6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcGZwLndyaXRlc3RyLCAiYW5vdGhlci5uYW1lIiwgc2VsZi5kYXRhKQogCkBAIC01ODgsNyArNTkyLDcgQEAKICAgICAgICAgICAgICAgICBpZiBvcy5hbHRzZXAgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHBhdGhfc3BsaXQuZXh0ZW5kKGZuLnNwbGl0KG9zLmFsdHNlcCkpCiAgICAgICAgICAgICAgICAgaWYgJ19fcHljYWNoZV9fJyBpbiBwYXRoX3NwbGl0OgotICAgICAgICAgICAgICAgICAgICBmbiA9IGltcC5zb3VyY2VfZnJvbV9jYWNoZShmbikKKyAgICAgICAgICAgICAgICAgICAgZm4gPSBpbXBvcnRsaWIudXRpbC5zb3VyY2VfZnJvbV9jYWNoZShmbikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBmbiA9IGZuWzotMV0KIApAQCAtNjIyLDYgKzYyNiwzNCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZEluKCdlbWFpbC9fX2luaXRfXy5weScsIG5hbWVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZEluKCdlbWFpbC9taW1lL3RleHQucHknLCBuYW1lcykKIAorICAgIGRlZiB0ZXN0X3dyaXRlX2ZpbHRlcmVkX3B5dGhvbl9wYWNrYWdlKHNlbGYpOgorICAgICAgICBpbXBvcnQgdGVzdAorICAgICAgICBwYWNrYWdlZGlyID0gb3MucGF0aC5kaXJuYW1lKHRlc3QuX19maWxlX18pCisKKyAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKKworICAgICAgICAgICAgIyBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgdGVzdCBmb2xkZXIgZ2l2ZXMgZXJyb3IgbWVzc2FnZXMKKyAgICAgICAgICAgICMgKG9uIHRoZSBiYWRzeW50YXhfLi4uIGZpbGVzKQorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyByZXBvcnRTSU86CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyKQorICAgICAgICAgICAgcmVwb3J0U3RyID0gcmVwb3J0U0lPLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU3ludGF4RXJyb3InIGluIHJlcG9ydFN0cikKKworICAgICAgICAgICAgIyB0aGVuIGNoZWNrIHRoYXQgdGhlIGZpbHRlciB3b3JrcyBvbiB0aGUgd2hvbGUgcGFja2FnZQorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyByZXBvcnRTSU86CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyLCBmaWx0ZXJmdW5jPWxhbWJkYSB3aGF0ZXZlcjogRmFsc2UpCisgICAgICAgICAgICByZXBvcnRTdHIgPSByZXBvcnRTSU8uZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTeW50YXhFcnJvcicgbm90IGluIHJlcG9ydFN0cikKKworICAgICAgICAgICAgIyB0aGVuIGNoZWNrIHRoYXQgdGhlIGZpbHRlciB3b3JrcyBvbiBpbmRpdmlkdWFsIGZpbGVzCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHJlcG9ydFNJTywgc2VsZi5hc3NlcnRXYXJucyhVc2VyV2FybmluZyk6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyLCBmaWx0ZXJmdW5jPWxhbWJkYSBmbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCcgbm90IGluIGZuKQorICAgICAgICAgICAgcmVwb3J0U3RyID0gcmVwb3J0U0lPLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGlmIHJlcG9ydFN0cjoKKyAgICAgICAgICAgICAgICBwcmludChyZXBvcnRTdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1N5bnRheEVycm9yJyBub3QgaW4gcmVwb3J0U3RyKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfd2l0aF9vcHRpbWl6YXRpb24oc2VsZik6CiAgICAgICAgIGltcG9ydCBlbWFpbAogICAgICAgICBwYWNrYWdlZGlyID0gb3MucGF0aC5kaXJuYW1lKGVtYWlsLl9fZmlsZV9fKQpAQCAtNjMxLDcgKzY2Myw3IEBACiAgICAgICAgIGV4dCA9ICcucHlvJyBpZiBvcHRsZXZlbCA9PSAxIGVsc2UgJy5weWMnCiAKICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgXAotICAgICAgICAgICAgICAgICB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIsIG9wdGltaXplPW9wdGxldmVsKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIsIG9wdGltaXplPW9wdGxldmVsKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpcikKIAogICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCkBAIC02NjEsNiArNjkzLDI2IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTjIpCiAKKyAgICBkZWYgdGVzdF93cml0ZV9weXRob25fZGlyZWN0b3J5X2ZpbHRlcmVkKHNlbGYpOgorICAgICAgICBvcy5ta2RpcihURVNURk4yKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QxLnB5IiksICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoInByaW50KDQyKVxuIikKKworICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMi5weSIpLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MiAqIDQyKVxuIikKKworICAgICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KFRFU1RGTjIsIGZpbHRlcmZ1bmM9bGFtYmRhIGZuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgZm4uZW5kc3dpdGgoJ21vZDIucHknKSkKKworICAgICAgICAgICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWRJbignbW9kMS5weScsIG5hbWVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21vZDIucHknLCBuYW1lcykKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfbm9uX3B5ZmlsZShzZWxmKToKICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKQEAgLTc2NCwyNSArODE2LDI1IEBACiAgICAgZGVmIHRlc3RfZXh0cmFjdF9oYWNrZXJzX2FyY25hbWVzX3dpbmRvd3Nfb25seShzZWxmKToKICAgICAgICAgIiIiVGVzdCBjb21iaW5hdGlvbiBvZiBwYXRoIGZpeGluZyBhbmQgd2luZG93cyBuYW1lIHNhbml0aXphdGlvbi4iIiIKICAgICAgICAgd2luZG93c19oYWNrbmFtZXMgPSBbCi0gICAgICAgICAgICAgICAgKHInLi5cZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLi5cL2Zvb1wvYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidmb28vXC4uXC9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ2Zvb1wvLi4vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzpmb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidDOi9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidDOi8vZm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzpcZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ1xcY29ua3lcbW91bnRwb2ludFxmb29cYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicvLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInXFxcY29ua3lcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vY29ua3kvL21vdW50cG9pbnQvZm9vL2JhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXGNvbmt5XFxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLy8/L0M6L2Zvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ1xcP1xDOlxmb29cYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidDOi8uLi9DOi9mb28vYmFyJywgJ0NfL2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidhOmJcYzxkPmV8ZiJnP2gqaScsICdiL2NfZF9lX2ZfZ19oX2knKSwKLSAgICAgICAgICAgICAgICAoJy4uLy4uL2Zvby4uLy4uL2JhLi5yJywgJ2Zvby9iYS4ucicpLAorICAgICAgICAgICAgKHInLi5cZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocicuLlwvZm9vXC9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInZm9vL1wuLlwvYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ2Zvb1wvLi4vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOmZvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzovZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOi8vZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOlxmb29cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ1xcY29ua3lcbW91bnRwb2ludFxmb29cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJy8vL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ1xcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJy8vY29ua3kvL21vdW50cG9pbnQvZm9vL2JhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ1xcY29ua3lcXG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJy8vPy9DOi9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ1xcP1xDOlxmb29cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6Ly4uL0M6L2Zvby9iYXInLCAnQ18vZm9vL2JhcicpLAorICAgICAgICAgICAgKHInYTpiXGM8ZD5lfGYiZz9oKmknLCAnYi9jX2RfZV9mX2dfaF9pJyksCisgICAgICAgICAgICAoJy4uLy4uL2Zvby4uLy4uL2JhLi5yJywgJ2Zvby9iYS4ucicpLAogICAgICAgICBdCiAgICAgICAgIHNlbGYuX3Rlc3RfZXh0cmFjdF9oYWNrZXJzX2FyY25hbWVzKHdpbmRvd3NfaGFja25hbWVzKQogCkBAIC04NjAsNiArOTEyLDE3IEBACiAgICAgICAgICAgICAgICAgZGF0YSArPSB6aXBmcC5yZWFkKGluZm8pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGRhdGEsIHtiImZvb2JhciIsIGIiYmFyZm9vIn0pCiAKKyAgICBkZWYgdGVzdF91bml2ZXJzYWxfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIGYgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCdzcGFtLnR4dCcsIGInYWJhYmFnYWxhbWFnYScpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBtb2RlIGluICdVJywgJ3JVJzoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICAgICAgemlwb3BlbiA9IHppcGZwLm9wZW4oJ3NwYW0udHh0JywgbW9kZSkKKyAgICAgICAgICAgICAgICB6aXBvcGVuLmNsb3NlKCkKKwogICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9yZWFkYWhlYWRzKHNlbGYpOgogICAgICAgICBmID0gaW8uQnl0ZXNJTygpCiAKQEAgLTg2OSw3ICs5MzIsNyBAQAogCiAgICAgICAgIGRhdGEyID0gYicnCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICdyJykgYXMgemlwZnAsIFwKLSAgICAgICAgICAgICB6aXBmcC5vcGVuKFRFU1RGTiwgJ3JVJykgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICBvcGVuVSh6aXBmcCwgVEVTVEZOKSBhcyB6aXBvcGVuOgogICAgICAgICAgICAgZm9yIGxpbmUgaW4gemlwb3BlbjoKICAgICAgICAgICAgICAgICBkYXRhMiArPSBsaW5lCiAKQEAgLTkxMCwxMCArOTczLDEwIEBACiAgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfdmVyc2lvbihzZWxmKToKICAgICAgICAgIyBGaWxlIGhhcyBhbiBleHRyYWN0X3ZlcnNpb24gb2YgMTIwCiAgICAgICAgIGRhdGEgPSAoYidQS1x4MDNceDA0eFx4MDBceDAwXHgwMFx4MDBceDAwIXBceGExQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAweFBLXHgwMVx4MDJ4XHgwM3hceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiJ1x4MDAhcFx4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwJwotICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2JwotICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwL1x4MDBceDAwXHgwMFx4MWZceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAweFBLXHgwMVx4MDJ4XHgwM3hceDAwXHgwMFx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwMCFwXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDAnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDgwXHgwMVx4MDBceDAwXHgwMFx4MDB4UEtceDA1XHgwNicKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwL1x4MDBceDAwXHgwMFx4MWZceDAwXHgwMFx4MDBceDAwXHgwMCcpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgemlwZmlsZS5aaXBGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpby5CeXRlc0lPKGRhdGEpLCAncicpCkBAIC05NDYsNyArMTAwOSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgJ2EnKSBhcyB6ZjoKICAgICAgICAgICAgICAgICB6Zi53cml0ZXN0cihmaWxlbmFtZSwgY29udGVudCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdDb3VsZCBub3QgYXBwZW5kIGRhdGEgdG8gYSBub24tZXhpc3RlbnQgemlwIGZpbGUuJykKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKQEAgLTEwMTgsNyArMTA4MSw3IEBACiAgICAgICAgIGZwLnNlZWsoMCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZpbGUuaXNfemlwZmlsZShmcCkpCiAKLSAgICBkZWYgdGVzdF9ub25fZXhpc3RlbnRfZmlsZV9yYWlzZXNfSU9FcnJvcihzZWxmKToKKyAgICBkZWYgdGVzdF9ub25fZXhpc3RlbnRfZmlsZV9yYWlzZXNfT1NFcnJvcihzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUgd2UgZG9uJ3QgcmFpc2UgYW4gQXR0cmlidXRlRXJyb3Igd2hlbiBhIHBhcnRpYWxseS1jb25zdHJ1Y3RlZAogICAgICAgICAjIFppcEZpbGUgaW5zdGFuY2UgaXMgZmluYWxpemVkOyB0aGlzIHRlc3RzIGZvciByZWdyZXNzaW9uIG9uIFNGIHRyYWNrZXIKICAgICAgICAgIyBidWcgIzQwMzg3MS4KQEAgLTEwMzAsNyArMTA5Myw3IEBACiAgICAgICAgICMgaXQgaXMgaWdub3JlZCwgYnV0IHRoZSB1c2VyIHNob3VsZCBiZSBzdWZmaWNpZW50bHkgYW5ub3llZCBieQogICAgICAgICAjIHRoZSBtZXNzYWdlIG9uIHRoZSBvdXRwdXQgdGhhdCByZWdyZXNzaW9uIHdpbGwgYmUgbm90aWNlZAogICAgICAgICAjIHF1aWNrbHkuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTikKIAogICAgIGRlZiB0ZXN0X2VtcHR5X2ZpbGVfcmFpc2VzX0JhZFppcEZpbGUoc2VsZik6CiAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3cnKQpAQCAtMTA5OSwxMSArMTE2MiwxMSBAQAogICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX2NvbXByZXNzaW9uKHNlbGYpOgogICAgICAgICAjIGRhdGEgaXMgZGVjbGFyZWQgYXMgc2hydW5rLCBidXQgYWN0dWFsbHkgZGVmbGF0ZWQKICAgICAgICAgZGF0YSA9IChiJ1BLXHgwM1x4MDQuXHgwMFx4MDBceDAwXHgwMVx4MDBceGU0Q1x4YTFAXHgwMFx4MDBceDAwJwotICAgICAgICBiJ1x4MDBceDAyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDB4XHgwM1x4MDBQS1x4MDEnCi0gICAgICAgIGInXHgwMi5ceDAzLlx4MDBceDAwXHgwMFx4MDFceDAwXHhlNENceGExQFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGInXHg4MFx4MDFceDAwXHgwMFx4MDBceDAweFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMCcKLSAgICAgICAgYicvXHgwMFx4MDBceDAwIVx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDB4XHgwM1x4MDBQS1x4MDEnCisgICAgICAgICAgICAgICAgYidceDAyLlx4MDMuXHgwMFx4MDBceDAwXHgwMVx4MDBceGU0Q1x4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHg4MFx4MDFceDAwXHgwMFx4MDBceDAweFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMCcKKyAgICAgICAgICAgICAgICBiJy9ceDAwXHgwMFx4MDAhXHgwMFx4MDBceDAwXHgwMFx4MDAnKQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKGRhdGEpLCAncicpIGFzIHppcGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB6aXBmLm9wZW4sICd4JykKIApAQCAtMTIxOCw3ICsxMjgxLDcgQEAKICAgICBkZWYgdGVzdF9vcGVuX2VtcHR5X2ZpbGUoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMTcxMDcwMzogQ2hlY2sgdGhhdCBvcGVuaW5nIGEgZmlsZSB3aXRoIGxlc3MgdGhhbiAyMiBieXRlcwogICAgICAgICAjIHJhaXNlcyBhIEJhZFppcEZpbGUgZXhjZXB0aW9uIChyYXRoZXIgdGhhbiB0aGUgcHJldmlvdXNseSB1bmhlbHBmdWwKLSAgICAgICAgIyBJT0Vycm9yKQorICAgICAgICAjIE9TRXJyb3IpCiAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3cnKQogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5CYWRaaXBGaWxlLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTiwgJ3InKQpAQCAtMTI2Niw1NyArMTMyOSw1NyBAQAogY2xhc3MgU3RvcmVkQmFkQ3JjVGVzdHMoQWJzdHJhY3RCYWRDcmNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfU1RPUkVECiAgICAgemlwX3dpdGhfYmFkX2NyYyA9ICgKLSAgICAgICAgICAgIGInUEtcMDAzXDAwNFwwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzpyJwotICAgICAgICAgICAgYidcMjUzXDM3N1xmXDBcMFwwXGZcMFwwXDBcMDA1XDBcMFwwMDBhZicKLSAgICAgICAgICAgIGInaWxlaGVsbG8sQXdvcmxkUCcKLSAgICAgICAgICAgIGInS1wwMDFcMDAyXDAyNFwwMDNcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6JwotICAgICAgICAgICAgYidyXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMFwwJwotICAgICAgICAgICAgYidcMFwwXDBcMFwwXDBcMFwyMDBcMDAxXDBcMFwwXDAwMGFmaScKLSAgICAgICAgICAgIGInbGVQS1wwMDVcMDA2XDBcMFwwXDBcMDAxXDBcMDAxXDAwMDNcMDAwJwotICAgICAgICAgICAgYidcMFwwL1wwXDBcMFwwXDAnKQorICAgICAgICBiJ1BLXDAwM1wwMDRcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6cicKKyAgICAgICAgYidcMjUzXDM3N1xmXDBcMFwwXGZcMFwwXDBcMDA1XDBcMFwwMDBhZicKKyAgICAgICAgYidpbGVoZWxsbyxBd29ybGRQJworICAgICAgICBiJ0tcMDAxXDAwMlwwMjRcMDAzXDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OicKKyAgICAgICAgYidyXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMFwwJworICAgICAgICBiJ1wwXDBcMFwwXDBcMFwwXDIwMFwwMDFcMFwwXDBcMDAwYWZpJworICAgICAgICBiJ2xlUEtcMDA1XDAwNlwwXDBcMFwwXDAwMVwwXDAwMVwwMDAzXDAwMCcKKyAgICAgICAgYidcMFwwL1wwXDBcMFwwXDAnKQogCiBAcmVxdWlyZXNfemxpYgogY2xhc3MgRGVmbGF0ZUJhZENyY1Rlc3RzKEFic3RyYWN0QmFkQ3JjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX0RFRkxBVEVECiAgICAgemlwX3dpdGhfYmFkX2NyYyA9ICgKLSAgICAgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMFx4MDBceDA4XHgwMG59XHgwYz1GQScKLSAgICAgICAgICAgIGInS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKLSAgICAgICAgICAgIGInaWxlXHhjYkhceGNkXHhjOVx4YzlXKFx4Y2YvXHhjYUlceGM5XHhhMCcKLSAgICAgICAgICAgIGInPVx4MTNceDAwUEtceDAxXHgwMlx4MTRceDAzXHgxNFx4MDBceDAwXHgwMFx4MDhceDAwbicKLSAgICAgICAgICAgIGInfVx4MGM9RkFLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNScKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDgwXHgwMVx4MDBceDAwXHgwMCcKLSAgICAgICAgICAgIGInXHgwMGFmaWxlUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCcKLSAgICAgICAgICAgIGInXHgwMVx4MDAzXHgwMFx4MDBceDAwM1x4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDBceDAwXHgwMFx4MDhceDAwbn1ceDBjPUZBJworICAgICAgICBiJ0tFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCisgICAgICAgIGInaWxlXHhjYkhceGNkXHhjOVx4YzlXKFx4Y2YvXHhjYUlceGM5XHhhMCcKKyAgICAgICAgYic9XHgxM1x4MDBQS1x4MDFceDAyXHgxNFx4MDNceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBuJworICAgICAgICBiJ31ceDBjPUZBS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDUnCisgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDgwXHgwMVx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDAwYWZpbGVQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwJworICAgICAgICBiJ1x4MDFceDAwM1x4MDBceDAwXHgwMDNceDAwXHgwMFx4MDBceDAwXHgwMCcpCiAKIEByZXF1aXJlc19iejIKIGNsYXNzIEJ6aXAyQmFkQ3JjVGVzdHMoQWJzdHJhY3RCYWRDcmNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfQlpJUDIKICAgICB6aXBfd2l0aF9iYWRfY3JjID0gKAotICAgICAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDNceDAwXHgwMFx4MGNceDAwbnVceDBjPUZBJwotICAgICAgICAgICAgYidLRThceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJwotICAgICAgICAgICAgYidpbGVCWmg5MUFZJlNZXHhkNFx4YThceGNhJwotICAgICAgICAgICAgYidceDdmXHgwMFx4MDBceDBmXHgxMVx4ODBAXHgwMFx4MDZEXHg5MFx4ODAgXHgwMCBceGE1JwotICAgICAgICAgICAgYidQXHhkOSFceDAzXHgwM1x4MTNceDEzXHgxM1x4ODlceGE5XHhhOVx4YzJ1NTpceDlmJwotICAgICAgICAgICAgYidceDhiXHhiOSJceDljKEhqVGU/XHg4MFBLXHgwMVx4MDJceDE0JwotICAgICAgICAgICAgYidceDAzXHgxNFx4MDNceDAwXHgwMFx4MGNceDAwbnVceDBjPUZBS0U4JwotICAgICAgICAgICAgYidceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICAgICAgYidceDAwIFx4ODBceDgwXHg4MVx4MDBceDAwXHgwMFx4MDBhZmlsZVBLJwotICAgICAgICAgICAgYidceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwM1x4MDBceDAwXHgwMFtceDAwJwotICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDNceDAwXHgwMFx4MGNceDAwbnVceDBjPUZBJworICAgICAgICBiJ0tFOFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCisgICAgICAgIGInaWxlQlpoOTFBWSZTWVx4ZDRceGE4XHhjYScKKyAgICAgICAgYidceDdmXHgwMFx4MDBceDBmXHgxMVx4ODBAXHgwMFx4MDZEXHg5MFx4ODAgXHgwMCBceGE1JworICAgICAgICBiJ1BceGQ5IVx4MDNceDAzXHgxM1x4MTNceDEzXHg4OVx4YTlceGE5XHhjMnU1Olx4OWYnCisgICAgICAgIGInXHg4Ylx4YjkiXHg5YyhIalRlP1x4ODBQS1x4MDFceDAyXHgxNCcKKyAgICAgICAgYidceDAzXHgxNFx4MDNceDAwXHgwMFx4MGNceDAwbnVceDBjPUZBS0U4JworICAgICAgICBiJ1x4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgIGInXHgwMCBceDgwXHg4MFx4ODFceDAwXHgwMFx4MDBceDAwYWZpbGVQSycKKyAgICAgICAgYidceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwM1x4MDBceDAwXHgwMFtceDAwJworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDAnKQogCiBAcmVxdWlyZXNfbHptYQogY2xhc3MgTHptYUJhZENyY1Rlc3RzKEFic3RyYWN0QmFkQ3JjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX0xaTUEKICAgICB6aXBfd2l0aF9iYWRfY3JjID0gKAotICAgICAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDNceDAwXHgwMFx4MGVceDAwbnVceDBjPUZBJwotICAgICAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJwotICAgICAgICAgICAgYidpbGVcdFx4MDRceDA1XHgwMF1ceDAwXHgwMFx4MDBceDA0XHgwMDRceDE5SScKLSAgICAgICAgICAgIGInXHhlZVx4OGRceGU5XHgxN1x4ODk6M2BcdHEhLjhceDAwUEsnCi0gICAgICAgICAgICBiJ1x4MDFceDAyXHgxNFx4MDNceDE0XHgwM1x4MDBceDAwXHgwZVx4MDBudVx4MGM9RkEnCi0gICAgICAgICAgICBiJ0tFXHgxYlx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWwnCi0gICAgICAgICAgICBiJ2VQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAzXHgwMFx4MDAnCi0gICAgICAgICAgICBiJ1x4MDA+XHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwM1x4MDBceDAwXHgwZVx4MDBudVx4MGM9RkEnCisgICAgICAgIGInS0VceDFiXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKKyAgICAgICAgYidpbGVcdFx4MDRceDA1XHgwMF1ceDAwXHgwMFx4MDBceDA0XHgwMDRceDE5SScKKyAgICAgICAgYidceGVlXHg4ZFx4ZTlceDE3XHg4OTozYFx0cSEuOFx4MDBQSycKKyAgICAgICAgYidceDAxXHgwMlx4MTRceDAzXHgxNFx4MDNceDAwXHgwMFx4MGVceDAwbnVceDBjPUZBJworICAgICAgICBiJ0tFXHgxYlx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMCBceDgwXHg4MFx4ODFceDAwXHgwMFx4MDBceDAwYWZpbCcKKyAgICAgICAgYidlUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwM1x4MDBceDAwJworICAgICAgICBiJ1x4MDA+XHgwMFx4MDBceDAwXHgwMFx4MDAnKQogCiAKIGNsYXNzIERlY3J5cHRpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMzI1LDIyICsxMzg4LDIyIEBACiAgICAgWklQIGZpbGUuIiIiCiAKICAgICBkYXRhID0gKAotICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMFx4MWFceDAwJwotICAgIGInXHgwMFx4MDBceDA4XHgwMFx4MDBceDAwdGVzdC50eHRceGZhXHgxMFx4YTBnbHl8XHhmYS1ceGM1XHhjMD1ceGY5eScKLSAgICBiJ1x4MThceGUwXHhhOHJceGIzWn1MZ1x4YmNceGFlXHhmOXxceDliXHgxOVx4ZTRceDhiXHhiYVx4YmIpXHg4Y1x4YjBceGRibCcKLSAgICBiJ1BLXHgwMVx4MDJceDE0XHgwMFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMCcKLSAgICBiJ1x4MWFceDAwXHgwMFx4MDBceDA4XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwIFx4MDBceGI2XHg4MScKLSAgICBiJ1x4MDBceDAwXHgwMFx4MDB0ZXN0LnR4dFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDZceDAwJwotICAgIGInXHgwMFx4MDBMXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKKyAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDBceDAxXHgwMFx4MDBceDAwblx4OTJpLiN5XHhlZj8mXHgwMFx4MDBceDAwXHgxYVx4MDAnCisgICAgICAgIGInXHgwMFx4MDBceDA4XHgwMFx4MDBceDAwdGVzdC50eHRceGZhXHgxMFx4YTBnbHl8XHhmYS1ceGM1XHhjMD1ceGY5eScKKyAgICAgICAgYidceDE4XHhlMFx4YThyXHhiM1p9TGdceGJjXHhhZVx4Zjl8XHg5Ylx4MTlceGU0XHg4Ylx4YmFceGJiKVx4OGNceGIwXHhkYmwnCisgICAgICAgIGInUEtceDAxXHgwMlx4MTRceDAwXHgxNFx4MDBceDAxXHgwMFx4MDBceDAwblx4OTJpLiN5XHhlZj8mXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MWFceDAwXHgwMFx4MDBceDA4XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwIFx4MDBceGI2XHg4MScKKyAgICAgICAgYidceDAwXHgwMFx4MDBceDAwdGVzdC50eHRQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDA2XHgwMCcKKyAgICAgICAgYidceDAwXHgwMExceDAwXHgwMFx4MDBceDAwXHgwMCcgKQogICAgIGRhdGEyID0gKAotICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHRceDAwXHgwOFx4MDBceGNmfTM4eHVceGFhXHhiMlx4MTRceDAwXHgwMFx4MDBceDAwXHgwMicKLSAgICBiJ1x4MDBceDAwXHgwNFx4MDBceDE1XHgwMHplcm9VVFx0XHgwMFx4MDNceGQ2XHg4Ylx4OTJHXHhkYVx4OGJceDkyR1V4XHgwNCcKLSAgICBiJ1x4MDBceGU4XHgwM1x4ZThceDAzXHhjNzxNXHhiNWFceGNlWFx4YTNZJlx4OGJ7b0VceGQ3XHg5ZFx4OGNceDk4XHgwMlx4YzAnCi0gICAgYidQS1x4MDdceDA4eHVceGFhXHhiMlx4MTRceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwUEtceDAxXHgwMlx4MTdceDAzJwotICAgIGInXHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDAnCi0gICAgYidceDA0XHgwMFxyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhhNFx4ODFceDAwXHgwMFx4MDBceDAwemUnCi0gICAgYidyb1VUXHgwNVx4MDBceDAzXHhkNlx4OGJceDkyR1V4XHgwMFx4MDBQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDEnCi0gICAgYidceDAwXHgwMVx4MDA/XHgwMFx4MDBceDAwW1x4MDBceDAwXHgwMFx4MDBceDAwJyApCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHRceDAwXHgwOFx4MDBceGNmfTM4eHVceGFhXHhiMlx4MTRceDAwXHgwMFx4MDBceDAwXHgwMicKKyAgICAgICAgYidceDAwXHgwMFx4MDRceDAwXHgxNVx4MDB6ZXJvVVRcdFx4MDBceDAzXHhkNlx4OGJceDkyR1x4ZGFceDhiXHg5MkdVeFx4MDQnCisgICAgICAgIGInXHgwMFx4ZThceDAzXHhlOFx4MDNceGM3PE1ceGI1YVx4Y2VYXHhhM1kmXHg4YntvRVx4ZDdceDlkXHg4Y1x4OThceDAyXHhjMCcKKyAgICAgICAgYidQS1x4MDdceDA4eHVceGFhXHhiMlx4MTRceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwUEtceDAxXHgwMlx4MTdceDAzJworICAgICAgICBiJ1x4MTRceDAwXHRceDAwXHgwOFx4MDBceGNmfTM4eHVceGFhXHhiMlx4MTRceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJworICAgICAgICBiJ1x4MDRceDAwXHJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceGE0XHg4MVx4MDBceDAwXHgwMFx4MDB6ZScKKyAgICAgICAgYidyb1VUXHgwNVx4MDBceDAzXHhkNlx4OGJceDkyR1V4XHgwMFx4MDBQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDEnCisgICAgICAgIGInXHgwMFx4MDFceDAwP1x4MDBceDAwXHgwMFtceDAwXHgwMFx4MDBceDAwXHgwMCcgKQogCiAgICAgcGxhaW4gPSBiJ3ppcGZpbGUucHkgZW5jcnlwdGlvbiB0ZXN0JwogICAgIHBsYWluMiA9IGInXHgwMCcqNTEyCkBAIC0xNTk5LDcgKzE2NjIsNyBAQAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CiAgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgIHppcGRhdGEgPSBmcC5yZWFkKCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJjZGF0YVtzZXBdLCB6aXBkYXRhKQogCkBAIC0xNjEzLDcgKzE2NzYsNyBAQAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CiAgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgICAgIHdpdGggb3BlblUoemlwZnAsIGZuKSBhcyB6aXBvcGVuOgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gYicnCiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkID0gemlwb3Blbi5yZWFkbGluZSgpCkBAIC0xNjM4LDcgKzE3MDEsNyBAQAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CiAgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgICAgIHdpdGggb3BlblUoemlwZnAsIGZuKSBhcyB6aXBvcGVuOgogICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVfZ2VuOgogICAgICAgICAgICAgICAgICAgICAgICAgbGluZWRhdGEgPSB6aXBvcGVuLnJlYWRsaW5lKCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZWRhdGEsIGxpbmUgKyBiJ1xuJykKQEAgLTE2NTMsNyArMTcxNiw3IEBACiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKICAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIGZwOgorICAgICAgICAgICAgICAgIHdpdGggb3BlblUoemlwZnAsIGZuKSBhcyBmcDoKICAgICAgICAgICAgICAgICAgICAgemlwbGluZXMgPSBmcC5yZWFkbGluZXMoKQogICAgICAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBsaW5lcyk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArIGInXG4nKQpAQCAtMTY2OCw3ICsxNzMxLDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgZnA6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuVSh6aXBmcCwgZm4pIGFzIGZwOgogICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgZnApOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgYidcbicpCiAKQEAgLTE3MDIsNiArMTc2NSw1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX0xaTUEKIAotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkgYi9MaWIvdGVzdC90ZXN0X3ppcGZpbGU2NC5weQppbmRleCBhOGZiN2FiLi40OThkNDY0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGU2NC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGZpbGU2NC5weQpAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgZGVmIHppcFRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgogICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUuCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24sIGFsbG93WmlwNjQ9VHJ1ZSkKKyAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIEl0IHdpbGwgY29udGFpbiBlbm91Z2ggY29waWVzIG9mIHNlbGYuZGF0YSB0byByZWFjaCBhYm91dCA2R0Igb2YKICAgICAgICAgIyByYXcgZGF0YSB0byBzdG9yZS4KQEAgLTkyLDcgKzkyLDcgQEAKICAgICBkZWYgdGVzdE1vcmVUaGFuNjRrRmlsZXMoc2VsZik6CiAgICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IG1vcmUgdGhhbiA2NGsgZmlsZXMgY2FuIGJlIGFkZGVkIHRvIGFuIGFyY2hpdmUsCiAgICAgICAgICMgYW5kIHRoYXQgdGhlIHJlc3VsdGluZyBhcmNoaXZlIGNhbiBiZSByZWFkIHByb3Blcmx5IGJ5IFppcEZpbGUKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQorICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIsIGFsbG93WmlwNjQ9RmFsc2UpCiAgICAgICAgIHppcGYuZGVidWcgPSAxMDAKICAgICAgICAgbnVtZmlsZXMgPSAoMSA8PCAxNikgKiAzLy8yCiAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bWZpbGVzKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKaW5kZXggMzc2MDNiOS4uMWUzNTFjOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKQEAgLTEsMTMgKzEsMTIgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IG1hcnNoYWwKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC50ZXN0X2ltcG9ydGhvb2tzIGltcG9ydCBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSwgdGVzdF9zcmMsIHRlc3RfY28KIAogZnJvbSB6aXBmaWxlIGltcG9ydCBaaXBGaWxlLCBaaXBJbmZvLCBaSVBfU1RPUkVELCBaSVBfREVGTEFURUQKIApAQCAtMTcsNiArMTYsMTQgQEAKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgaW8KIGZyb20gdHJhY2ViYWNrIGltcG9ydCBleHRyYWN0X3RiLCBleHRyYWN0X3N0YWNrLCBwcmludF90YgorCit0ZXN0X3NyYyA9ICIiIlwKK2RlZiBnZXRfbmFtZSgpOgorICAgIHJldHVybiBfX25hbWVfXworZGVmIGdldF9maWxlKCk6CisgICAgcmV0dXJuIF9fZmlsZV9fCisiIiIKK3Rlc3RfY28gPSBjb21waWxlKHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCiByYWlzZV9zcmMgPSAnZGVmIGRvX3JhaXNlKCk6IHJhaXNlIFR5cGVFcnJvclxuJwogCiBkZWYgbWFrZV9weWMoY28sIG10aW1lLCBzaXplKToKQEAgLTI3LDcgKzM0LDggQEAKICAgICAgICAgICAgIG10aW1lID0gaW50KG10aW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbXRpbWUgPSBpbnQoLTB4MTAwMDAwMDAwICsgaW50KG10aW1lKSkKLSAgICBweWMgPSBpbXAuZ2V0X21hZ2ljKCkgKyBzdHJ1Y3QucGFjaygiPGlpIiwgaW50KG10aW1lKSwgc2l6ZSAmIDB4RkZGRkZGRkYpICsgZGF0YQorICAgIHB5YyA9IChpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIgKworICAgICAgICBzdHJ1Y3QucGFjaygiPGlpIiwgaW50KG10aW1lKSwgc2l6ZSAmIDB4RkZGRkZGRkYpICsgZGF0YSkKICAgICByZXR1cm4gcHljCiAKIGRlZiBtb2R1bGVfcGF0aF90b19kb3R0ZWRfbmFtZShwYXRoKToKQEAgLTQyLDEwICs1MCwyNyBAQAogVEVTVFBBQ0syID0gInppcHRlc3RwYWNrYWdlMiIKIFRFTVBfWklQID0gb3MucGF0aC5hYnNwYXRoKCJqdW5rOTUxNDIuemlwIikKIAotcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVE1PRCArICcucHknKQorcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShURVNUTU9EICsgJy5weScpCiBweWNfZXh0ID0gKCcucHljJyBpZiBfX2RlYnVnX18gZWxzZSAnLnB5bycpCiAKIAorY2xhc3MgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhdGggPSBzeXMucGF0aFs6XQorICAgICAgICBzZWxmLm1ldGFfcGF0aCA9IHN5cy5tZXRhX3BhdGhbOl0KKyAgICAgICAgc2VsZi5wYXRoX2hvb2tzID0gc3lzLnBhdGhfaG9va3NbOl0KKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQorICAgICAgICBzZWxmLm1vZHVsZXNfYmVmb3JlID0gc3VwcG9ydC5tb2R1bGVzX3NldHVwKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnBhdGgKKyAgICAgICAgc3lzLm1ldGFfcGF0aFs6XSA9IHNlbGYubWV0YV9wYXRoCisgICAgICAgIHN5cy5wYXRoX2hvb2tzWzpdID0gc2VsZi5wYXRoX2hvb2tzCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgc3VwcG9ydC5tb2R1bGVzX2NsZWFudXAoKnNlbGYubW9kdWxlc19iZWZvcmUpCisKKwogY2xhc3MgVW5jb21wcmVzc2VkWmlwSW1wb3J0VGVzdENhc2UoSW1wb3J0SG9va3NCYXNlVGVzdENhc2UpOgogCiAgICAgY29tcHJlc3Npb24gPSBaSVBfU1RPUkVECkBAIC0xOTYsNiArMjIxLDcgQEAKICAgICAgICAgICAgIGZvciBuYW1lLCAobXRpbWUsIGRhdGEpIGluIGZpbGVzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgemluZm8gPSBaaXBJbmZvKG5hbWUsIHRpbWUubG9jYWx0aW1lKG10aW1lKSkKICAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgorICAgICAgICAgICAgICAgIHppbmZvLmNvbW1lbnQgPSBiInNwYW0iCiAgICAgICAgICAgICAgICAgei53cml0ZXN0cih6aW5mbywgZGF0YSkKICAgICAgICAgICAgIHouY2xvc2UoKQogCkBAIC0yNDUsNiArMjcxLDcgQEAKICAgICAgICAgICAgIGZvciBuYW1lLCAobXRpbWUsIGRhdGEpIGluIGZpbGVzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgemluZm8gPSBaaXBJbmZvKG5hbWUsIHRpbWUubG9jYWx0aW1lKG10aW1lKSkKICAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgorICAgICAgICAgICAgICAgIHppbmZvLmNvbW1lbnQgPSBiImVnZ3MiCiAgICAgICAgICAgICAgICAgei53cml0ZXN0cih6aW5mbywgZGF0YSkKICAgICAgICAgICAgIHouY2xvc2UoKQogCkBAIC00NTksNyArNDg2LDcgQEAKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHoubG9hZF9tb2R1bGUsICdhYmMnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHouZ2V0X2NvZGUsICdhYmMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgei5nZXRfZGF0YSwgJ2FiYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB6LmdldF9kYXRhLCAnYWJjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmdldF9zb3VyY2UsICdhYmMnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHouaXNfcGFja2FnZSwgJ2FiYycpCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQppbmRleCBmN2YzMzk4Li44NGJhNWUwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKQEAgLTIyNywxMyArMjI3LDE1IEBACiAgICAgICAgICAgICBwID0gc3Bhd25fcHl0aG9uKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgcC5zdGRpbi53cml0ZShiJ2xcbicpCiAgICAgICAgICAgICBkYXRhID0ga2lsbF9weXRob24ocCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2NyaXB0X25hbWUuZW5jb2RlKCd1dGYtOCcpLCBkYXRhKQorICAgICAgICAgICAgIyBiZGIvcGRiIGFwcGxpZXMgbm9ybWNhc2UgdG8gaXRzIGZpbGVuYW1lIGJlZm9yZSBkaXNwbGF5aW5nCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGgubm9ybWNhc2Uoc2NyaXB0X25hbWUuZW5jb2RlKCd1dGYtOCcpKSwgZGF0YSkKICAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChkLCAidGVzdF96aXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsICdfX21haW5fXy5weScpCiAgICAgICAgICAgICBwID0gc3Bhd25fcHl0aG9uKHppcF9uYW1lKQogICAgICAgICAgICAgcC5zdGRpbi53cml0ZShiJ2xcbicpCiAgICAgICAgICAgICBkYXRhID0ga2lsbF9weXRob24ocCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocnVuX25hbWUuZW5jb2RlKCd1dGYtOCcpLCBkYXRhKQorICAgICAgICAgICAgIyBiZGIvcGRiIGFwcGxpZXMgbm9ybWNhc2UgdG8gaXRzIGZpbGVuYW1lIGJlZm9yZSBkaXNwbGF5aW5nCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGgubm9ybWNhc2UocnVuX25hbWUuZW5jb2RlKCd1dGYtOCcpKSwgZGF0YSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5IGIvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weQppbmRleCA5MmViZDk1Li5hZmU1MGQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5CisrKyBiL0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkKQEAgLTExLDcgKzExLDcgQEAKIAogICAgIHRyeToKICAgICAgICAgb3Mud3JpdGUoZmQsIGIiYmxhdCIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIFN1Y2Nlc3MgLS0gY291bGQgbm90IHdyaXRlIHRvIGZkLgogICAgICAgICBzeXMuZXhpdCgwKQogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGV4dHdyYXAucHkgYi9MaWIvdGV4dHdyYXAucHkKaW5kZXggNzAyNGQ0ZC4uMjQ4OTE4MCAxMDA2NDQKLS0tIGEvTGliL3RleHR3cmFwLnB5CisrKyBiL0xpYi90ZXh0d3JhcC5weQpAQCAtNyw3ICs3LDcgQEAKIAogaW1wb3J0IHJlCiAKLV9fYWxsX18gPSBbJ1RleHRXcmFwcGVyJywgJ3dyYXAnLCAnZmlsbCcsICdkZWRlbnQnLCAnaW5kZW50J10KK19fYWxsX18gPSBbJ1RleHRXcmFwcGVyJywgJ3dyYXAnLCAnZmlsbCcsICdkZWRlbnQnLCAnaW5kZW50JywgJ3Nob3J0ZW4nXQogCiAjIEhhcmRjb2RlIHRoZSByZWNvZ25pemVkIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byB0aGUgVVMtQVNDSUkKICMgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLiAgVGhlIG1haW4gcmVhc29uIGZvciBkb2luZyB0aGlzIGlzIHRoYXQgaW4KQEAgLTYyLDYgKzYyLDEwIEBACiAgICAgICAgIGNvbXBvdW5kIHdvcmRzLgogICAgICAgZHJvcF93aGl0ZXNwYWNlIChkZWZhdWx0OiB0cnVlKQogICAgICAgICBEcm9wIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgZnJvbSBsaW5lcy4KKyAgICAgIG1heF9saW5lcyAoZGVmYXVsdDogTm9uZSkKKyAgICAgICAgVHJ1bmNhdGUgd3JhcHBlZCBsaW5lcy4KKyAgICAgIHBsYWNlaG9sZGVyIChkZWZhdWx0OiAnIFsuLi5dJykKKyAgICAgICAgQXBwZW5kIHRvIHRoZSBsYXN0IGxpbmUgb2YgdHJ1bmNhdGVkIHRleHQuCiAgICAgIiIiCiAKICAgICB1bmljb2RlX3doaXRlc3BhY2VfdHJhbnMgPSB7fQpAQCAtMTA0LDcgKzEwOCwxMCBAQAogICAgICAgICAgICAgICAgICBicmVha19sb25nX3dvcmRzPVRydWUsCiAgICAgICAgICAgICAgICAgIGRyb3Bfd2hpdGVzcGFjZT1UcnVlLAogICAgICAgICAgICAgICAgICBicmVha19vbl9oeXBoZW5zPVRydWUsCi0gICAgICAgICAgICAgICAgIHRhYnNpemU9OCk6CisgICAgICAgICAgICAgICAgIHRhYnNpemU9OCwKKyAgICAgICAgICAgICAgICAgKiwKKyAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPU5vbmUsCisgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScgWy4uLl0nKToKICAgICAgICAgc2VsZi53aWR0aCA9IHdpZHRoCiAgICAgICAgIHNlbGYuaW5pdGlhbF9pbmRlbnQgPSBpbml0aWFsX2luZGVudAogICAgICAgICBzZWxmLnN1YnNlcXVlbnRfaW5kZW50ID0gc3Vic2VxdWVudF9pbmRlbnQKQEAgLTExNSw2ICsxMjIsOCBAQAogICAgICAgICBzZWxmLmRyb3Bfd2hpdGVzcGFjZSA9IGRyb3Bfd2hpdGVzcGFjZQogICAgICAgICBzZWxmLmJyZWFrX29uX2h5cGhlbnMgPSBicmVha19vbl9oeXBoZW5zCiAgICAgICAgIHNlbGYudGFic2l6ZSA9IHRhYnNpemUKKyAgICAgICAgc2VsZi5tYXhfbGluZXMgPSBtYXhfbGluZXMKKyAgICAgICAgc2VsZi5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyCiAKIAogICAgICMgLS0gUHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMjMsNiArMjMyLDEzIEBACiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgaWYgc2VsZi53aWR0aCA8PSAwOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB3aWR0aCAlciAobXVzdCBiZSA+IDApIiAlIHNlbGYud2lkdGgpCisgICAgICAgIGlmIHNlbGYubWF4X2xpbmVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5tYXhfbGluZXMgPiAxOgorICAgICAgICAgICAgICAgIGluZGVudCA9IHNlbGYuc3Vic2VxdWVudF9pbmRlbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5kZW50ID0gc2VsZi5pbml0aWFsX2luZGVudAorICAgICAgICAgICAgaWYgbGVuKGluZGVudCkgKyBsZW4oc2VsZi5wbGFjZWhvbGRlci5sc3RyaXAoKSkgPiBzZWxmLndpZHRoOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBsYWNlaG9sZGVyIHRvbyBsYXJnZSBmb3IgbWF4IHdpZHRoIikKIAogICAgICAgICAjIEFycmFuZ2UgaW4gcmV2ZXJzZSBvcmRlciBzbyBpdGVtcyBjYW4gYmUgZWZmaWNpZW50bHkgcG9wcGVkCiAgICAgICAgICMgZnJvbSBhIHN0YWNrIG9mIGNodWNrcy4KQEAgLTI2NSwxOCArMjgxLDQ3IEBACiAgICAgICAgICAgICAjIGZpdCBvbiAqYW55KiBsaW5lIChub3QganVzdCB0aGlzIG9uZSkuCiAgICAgICAgICAgICBpZiBjaHVua3MgYW5kIGxlbihjaHVua3NbLTFdKSA+IHdpZHRoOgogICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9sb25nX3dvcmQoY2h1bmtzLCBjdXJfbGluZSwgY3VyX2xlbiwgd2lkdGgpCisgICAgICAgICAgICAgICAgY3VyX2xlbiA9IHN1bShtYXAobGVuLCBjdXJfbGluZSkpCiAKICAgICAgICAgICAgICMgSWYgdGhlIGxhc3QgY2h1bmsgb24gdGhpcyBsaW5lIGlzIGFsbCB3aGl0ZXNwYWNlLCBkcm9wIGl0LgogICAgICAgICAgICAgaWYgc2VsZi5kcm9wX3doaXRlc3BhY2UgYW5kIGN1cl9saW5lIGFuZCBjdXJfbGluZVstMV0uc3RyaXAoKSA9PSAnJzoKKyAgICAgICAgICAgICAgICBjdXJfbGVuIC09IGxlbihjdXJfbGluZVstMV0pCiAgICAgICAgICAgICAgICAgZGVsIGN1cl9saW5lWy0xXQogCi0gICAgICAgICAgICAjIENvbnZlcnQgY3VycmVudCBsaW5lIGJhY2sgdG8gYSBzdHJpbmcgYW5kIHN0b3JlIGl0IGluIGxpc3QKLSAgICAgICAgICAgICMgb2YgYWxsIGxpbmVzIChyZXR1cm4gdmFsdWUpLgogICAgICAgICAgICAgaWYgY3VyX2xpbmU6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcnLmpvaW4oY3VyX2xpbmUpKQorICAgICAgICAgICAgICAgIGlmIChzZWxmLm1heF9saW5lcyBpcyBOb25lIG9yCisgICAgICAgICAgICAgICAgICAgIGxlbihsaW5lcykgKyAxIDwgc2VsZi5tYXhfbGluZXMgb3IKKyAgICAgICAgICAgICAgICAgICAgKG5vdCBjaHVua3Mgb3IKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHJvcF93aGl0ZXNwYWNlIGFuZAorICAgICAgICAgICAgICAgICAgICAgbGVuKGNodW5rcykgPT0gMSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIG5vdCBjaHVua3NbMF0uc3RyaXAoKSkgYW5kIGN1cl9sZW4gPD0gd2lkdGgpOgorICAgICAgICAgICAgICAgICAgICAjIENvbnZlcnQgY3VycmVudCBsaW5lIGJhY2sgdG8gYSBzdHJpbmcgYW5kIHN0b3JlIGl0IGluCisgICAgICAgICAgICAgICAgICAgICMgbGlzdCBvZiBhbGwgbGluZXMgKHJldHVybiB2YWx1ZSkuCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyAnJy5qb2luKGN1cl9saW5lKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBjdXJfbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJfbGluZVstMV0uc3RyaXAoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGVuICsgbGVuKHNlbGYucGxhY2Vob2xkZXIpIDw9IHdpZHRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGluZS5hcHBlbmQoc2VsZi5wbGFjZWhvbGRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgJycuam9pbihjdXJfbGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9sZW4gLT0gbGVuKGN1cl9saW5lWy0xXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjdXJfbGluZVstMV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfbGluZSA9IGxpbmVzWy0xXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4ocHJldl9saW5lKSArIGxlbihzZWxmLnBsYWNlaG9sZGVyKSA8PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53aWR0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzWy0xXSA9IHByZXZfbGluZSArIHNlbGYucGxhY2Vob2xkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyBzZWxmLnBsYWNlaG9sZGVyLmxzdHJpcCgpKQorICAgICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIHJldHVybiBsaW5lcwogCisgICAgZGVmIF9zcGxpdF9jaHVua3Moc2VsZiwgdGV4dCk6CisgICAgICAgIHRleHQgPSBzZWxmLl9tdW5nZV93aGl0ZXNwYWNlKHRleHQpCisgICAgICAgIHJldHVybiBzZWxmLl9zcGxpdCh0ZXh0KQogCiAgICAgIyAtLSBQdWJsaWMgaW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjg5LDggKzMzNCw3IEBACiAgICAgICAgIGFuZCBhbGwgb3RoZXIgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgbmV3bGluZSkgYXJlCiAgICAgICAgIGNvbnZlcnRlZCB0byBzcGFjZS4KICAgICAgICAgIiIiCi0gICAgICAgIHRleHQgPSBzZWxmLl9tdW5nZV93aGl0ZXNwYWNlKHRleHQpCi0gICAgICAgIGNodW5rcyA9IHNlbGYuX3NwbGl0KHRleHQpCisgICAgICAgIGNodW5rcyA9IHNlbGYuX3NwbGl0X2NodW5rcyh0ZXh0KQogICAgICAgICBpZiBzZWxmLmZpeF9zZW50ZW5jZV9lbmRpbmdzOgogICAgICAgICAgICAgc2VsZi5fZml4X3NlbnRlbmNlX2VuZGluZ3MoY2h1bmtzKQogICAgICAgICByZXR1cm4gc2VsZi5fd3JhcF9jaHVua3MoY2h1bmtzKQpAQCAtMzMyLDYgKzM3NiwyMSBAQAogICAgIHcgPSBUZXh0V3JhcHBlcih3aWR0aD13aWR0aCwgKiprd2FyZ3MpCiAgICAgcmV0dXJuIHcuZmlsbCh0ZXh0KQogCitkZWYgc2hvcnRlbih0ZXh0LCB3aWR0aCwgKiprd2FyZ3MpOgorICAgICIiIkNvbGxhcHNlIGFuZCB0cnVuY2F0ZSB0aGUgZ2l2ZW4gdGV4dCB0byBmaXQgaW4gdGhlIGdpdmVuIHdpZHRoLgorCisgICAgVGhlIHRleHQgZmlyc3QgaGFzIGl0cyB3aGl0ZXNwYWNlIGNvbGxhcHNlZC4gIElmIGl0IHRoZW4gZml0cyBpbgorICAgIHRoZSAqd2lkdGgqLCBpdCBpcyByZXR1cm5lZCBhcyBpcy4gIE90aGVyd2lzZSwgYXMgbWFueSB3b3JkcworICAgIGFzIHBvc3NpYmxlIGFyZSBqb2luZWQgYW5kIHRoZW4gdGhlIHBsYWNlaG9sZGVyIGlzIGFwcGVuZGVkOjoKKworICAgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gIHdvcmxkISIsIHdpZHRoPTEyKQorICAgICAgICAnSGVsbG8gd29ybGQhJworICAgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gIHdvcmxkISIsIHdpZHRoPTExKQorICAgICAgICAnSGVsbG8gWy4uLl0nCisgICAgIiIiCisgICAgdyA9IFRleHRXcmFwcGVyKHdpZHRoPXdpZHRoLCBtYXhfbGluZXM9MSwgKiprd2FyZ3MpCisgICAgcmV0dXJuIHcuZmlsbCgnICcuam9pbih0ZXh0LnN0cmlwKCkuc3BsaXQoKSkpCisKIAogIyAtLSBMb29zZWx5IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0xpYi90aHJlYWRpbmcucHkgYi9MaWIvdGhyZWFkaW5nLnB5CmluZGV4IDYyNWM5YjkuLmQ5MDdjODkgMTAwNjQ0Ci0tLSBhL0xpYi90aHJlYWRpbmcucHkKKysrIGIvTGliL3RocmVhZGluZy5weQpAQCAtMTAsNiArMTAsMTEgQEAKICAgICBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgX3RpbWUKIGZyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjIGFzIF9mb3JtYXRfZXhjCiBmcm9tIF93ZWFrcmVmc2V0IGltcG9ydCBXZWFrU2V0Citmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaXNsaWNlIGFzIF9pc2xpY2UKK3RyeToKKyAgICBmcm9tIF9jb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUgYXMgX2RlcXVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUgYXMgX2RlcXVlCiAKICMgTm90ZSByZWdhcmRpbmcgUEVQIDggY29tcGxpYW50IG5hbWVzCiAjICBUaGlzIHRocmVhZGluZyBtb2RlbCB3YXMgb3JpZ2luYWxseSBpbnNwaXJlZCBieSBKYXZhLCBhbmQgaW5oZXJpdGVkCkBAIC0yOCw2ICszMyw3IEBACiAjIFJlbmFtZSBzb21lIHN0dWZmIHNvICJmcm9tIHRocmVhZGluZyBpbXBvcnQgKiIgaXMgc2FmZQogX3N0YXJ0X25ld190aHJlYWQgPSBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQKIF9hbGxvY2F0ZV9sb2NrID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrCitfc2V0X3NlbnRpbmVsID0gX3RocmVhZC5fc2V0X3NlbnRpbmVsCiBnZXRfaWRlbnQgPSBfdGhyZWFkLmdldF9pZGVudAogVGhyZWFkRXJyb3IgPSBfdGhyZWFkLmVycm9yCiB0cnk6CkBAIC0xMzIsNyArMTM4LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIG1lID0gZ2V0X2lkZW50KCkKICAgICAgICAgaWYgc2VsZi5fb3duZXIgPT0gbWU6Ci0gICAgICAgICAgICBzZWxmLl9jb3VudCA9IHNlbGYuX2NvdW50ICsgMQorICAgICAgICAgICAgc2VsZi5fY291bnQgKz0gMQogICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgcmMgPSBzZWxmLl9ibG9jay5hY3F1aXJlKGJsb2NraW5nLCB0aW1lb3V0KQogICAgICAgICBpZiByYzoKQEAgLTIyNCw3ICsyMzAsNyBAQAogICAgICAgICAgICAgc2VsZi5faXNfb3duZWQgPSBsb2NrLl9pc19vd25lZAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuX3dhaXRlcnMgPSBbXQorICAgICAgICBzZWxmLl93YWl0ZXJzID0gX2RlcXVlKCkKIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9sb2NrLl9fZW50ZXJfXygpCkBAIC0zMzIsMTQgKzMzOCwxNCBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IHNlbGYuX2lzX293bmVkKCk6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCBub3RpZnkgb24gdW4tYWNxdWlyZWQgbG9jayIpCi0gICAgICAgIF9fd2FpdGVycyA9IHNlbGYuX3dhaXRlcnMKLSAgICAgICAgd2FpdGVycyA9IF9fd2FpdGVyc1s6bl0KLSAgICAgICAgaWYgbm90IHdhaXRlcnM6CisgICAgICAgIGFsbF93YWl0ZXJzID0gc2VsZi5fd2FpdGVycworICAgICAgICB3YWl0ZXJzX3RvX25vdGlmeSA9IF9kZXF1ZShfaXNsaWNlKGFsbF93YWl0ZXJzLCBuKSkKKyAgICAgICAgaWYgbm90IHdhaXRlcnNfdG9fbm90aWZ5OgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGZvciB3YWl0ZXIgaW4gd2FpdGVyczoKKyAgICAgICAgZm9yIHdhaXRlciBpbiB3YWl0ZXJzX3RvX25vdGlmeToKICAgICAgICAgICAgIHdhaXRlci5yZWxlYXNlKCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBfX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKKyAgICAgICAgICAgICAgICBhbGxfd2FpdGVycy5yZW1vdmUod2FpdGVyKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogCkBAIC00MTQsNyArNDIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHNlbGYuX2NvbmQud2FpdCh0aW1lb3V0KQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHNlbGYuX3ZhbHVlIC0gMQorICAgICAgICAgICAgICAgIHNlbGYuX3ZhbHVlIC09IDEKICAgICAgICAgICAgICAgICByYyA9IFRydWUKICAgICAgICAgcmV0dXJuIHJjCiAKQEAgLTQyOCw3ICs0MzQsNyBAQAogCiAgICAgICAgICIiIgogICAgICAgICB3aXRoIHNlbGYuX2NvbmQ6Ci0gICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHNlbGYuX3ZhbHVlICsgMQorICAgICAgICAgICAgc2VsZi5fdmFsdWUgKz0gMQogICAgICAgICAgICAgc2VsZi5fY29uZC5ub3RpZnkoKQogCiAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHQsIHYsIHRiKToKQEAgLTcyMywxNSArNzI5LDEzIEBACiBfY291bnRlciA9IDAKIGRlZiBfbmV3bmFtZSh0ZW1wbGF0ZT0iVGhyZWFkLSVkIik6CiAgICAgZ2xvYmFsIF9jb3VudGVyCi0gICAgX2NvdW50ZXIgPSBfY291bnRlciArIDEKKyAgICBfY291bnRlciArPSAxCiAgICAgcmV0dXJuIHRlbXBsYXRlICUgX2NvdW50ZXIKIAogIyBBY3RpdmUgdGhyZWFkIGFkbWluaXN0cmF0aW9uCiBfYWN0aXZlX2xpbWJvX2xvY2sgPSBfYWxsb2NhdGVfbG9jaygpCiBfYWN0aXZlID0ge30gICAgIyBtYXBzIHRocmVhZCBpZCB0byBUaHJlYWQgb2JqZWN0CiBfbGltYm8gPSB7fQotCi0jIEZvciBkZWJ1ZyBhbmQgbGVhayB0ZXN0aW5nCiBfZGFuZ2xpbmcgPSBXZWFrU2V0KCkKIAogIyBNYWluIGNsYXNzIGZvciB0aHJlYWRzCkBAIC03OTAsMjggKzc5NCwzNSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBjdXJyZW50X3RocmVhZCgpLmRhZW1vbgogICAgICAgICBzZWxmLl9pZGVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5fdHN0YXRlX2xvY2sgPSBOb25lCiAgICAgICAgIHNlbGYuX3N0YXJ0ZWQgPSBFdmVudCgpCi0gICAgICAgIHNlbGYuX3N0b3BwZWQgPSBGYWxzZQotICAgICAgICBzZWxmLl9ibG9jayA9IENvbmRpdGlvbihMb2NrKCkpCisgICAgICAgIHNlbGYuX2lzX3N0b3BwZWQgPSBGYWxzZQogICAgICAgICBzZWxmLl9pbml0aWFsaXplZCA9IFRydWUKICAgICAgICAgIyBzeXMuc3RkZXJyIGlzIG5vdCBzdG9yZWQgaW4gdGhlIGNsYXNzIGxpa2UKICAgICAgICAgIyBzeXMuZXhjX2luZm8gc2luY2UgaXQgY2FuIGJlIGNoYW5nZWQgYmV0d2VlbiBpbnN0YW5jZXMKICAgICAgICAgc2VsZi5fc3RkZXJyID0gX3N5cy5zdGRlcnIKKyAgICAgICAgIyBGb3IgZGVidWdnaW5nIGFuZCBfYWZ0ZXJfZm9yaygpCiAgICAgICAgIF9kYW5nbGluZy5hZGQoc2VsZikKIAotICAgIGRlZiBfcmVzZXRfaW50ZXJuYWxfbG9ja3Moc2VsZik6CisgICAgZGVmIF9yZXNldF9pbnRlcm5hbF9sb2NrcyhzZWxmLCBpc19hbGl2ZSk6CiAgICAgICAgICMgcHJpdmF0ZSEgIENhbGxlZCBieSBfYWZ0ZXJfZm9yaygpIHRvIHJlc2V0IG91ciBpbnRlcm5hbCBsb2NrcyBhcwogICAgICAgICAjIHRoZXkgbWF5IGJlIGluIGFuIGludmFsaWQgc3RhdGUgbGVhZGluZyB0byBhIGRlYWRsb2NrIG9yIGNyYXNoLgotICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdfYmxvY2snKTogICMgRHVtbXlUaHJlYWQgZGVsZXRlcyBfYmxvY2sKLSAgICAgICAgICAgIHNlbGYuX2Jsb2NrLl9faW5pdF9fKCkKICAgICAgICAgc2VsZi5fc3RhcnRlZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoKQorICAgICAgICBpZiBpc19hbGl2ZToKKyAgICAgICAgICAgIHNlbGYuX3NldF90c3RhdGVfbG9jaygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSB0aHJlYWQgaXNuJ3QgYWxpdmUgYWZ0ZXIgZm9yazogaXQgZG9lc24ndCBoYXZlIGEgdHN0YXRlCisgICAgICAgICAgICAjIGFueW1vcmUuCisgICAgICAgICAgICBzZWxmLl9pc19zdG9wcGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fdHN0YXRlX2xvY2sgPSBOb25lCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIGFzc2VydCBzZWxmLl9pbml0aWFsaXplZCwgIlRocmVhZC5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIgogICAgICAgICBzdGF0dXMgPSAiaW5pdGlhbCIKICAgICAgICAgaWYgc2VsZi5fc3RhcnRlZC5pc19zZXQoKToKICAgICAgICAgICAgIHN0YXR1cyA9ICJzdGFydGVkIgotICAgICAgICBpZiBzZWxmLl9zdG9wcGVkOgorICAgICAgICBzZWxmLmlzX2FsaXZlKCkgIyBlYXN5IHdheSB0byBnZXQgLl9pc19zdG9wcGVkIHNldCB3aGVuIGFwcHJvcHJpYXRlCisgICAgICAgIGlmIHNlbGYuX2lzX3N0b3BwZWQ6CiAgICAgICAgICAgICBzdGF0dXMgPSAic3RvcHBlZCIKICAgICAgICAgaWYgc2VsZi5fZGFlbW9uaWM6CiAgICAgICAgICAgICBzdGF0dXMgKz0gIiBkYWVtb24iCkBAIC04ODQsOSArODk1LDE4IEBACiAgICAgZGVmIF9zZXRfaWRlbnQoc2VsZik6CiAgICAgICAgIHNlbGYuX2lkZW50ID0gZ2V0X2lkZW50KCkKIAorICAgIGRlZiBfc2V0X3RzdGF0ZV9sb2NrKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0IGEgbG9jayBvYmplY3Qgd2hpY2ggd2lsbCBiZSByZWxlYXNlZCBieSB0aGUgaW50ZXJwcmV0ZXIgd2hlbgorICAgICAgICB0aGUgdW5kZXJseWluZyB0aHJlYWQgc3RhdGUgKHNlZSBweXN0YXRlLmgpIGdldHMgZGVsZXRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrID0gX3NldF9zZW50aW5lbCgpCisgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrLmFjcXVpcmUoKQorCiAgICAgZGVmIF9ib290c3RyYXBfaW5uZXIoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX3NldF9pZGVudCgpCisgICAgICAgICAgICBzZWxmLl9zZXRfdHN0YXRlX2xvY2soKQogICAgICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6CiAgICAgICAgICAgICAgICAgX2FjdGl2ZVtzZWxmLl9pZGVudF0gPSBzZWxmCkBAIC05NDEsNyArOTYxLDYgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKLSAgICAgICAgICAgICAgICBzZWxmLl9zdG9wKCkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICMgV2UgZG9uJ3QgY2FsbCBzZWxmLl9kZWxldGUoKSBiZWNhdXNlIGl0IGFsc28KICAgICAgICAgICAgICAgICAgICAgIyBncmFicyBfYWN0aXZlX2xpbWJvX2xvY2suCkBAIC05NTAsMTAgKzk2OSwyNyBAQAogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgX3N0b3Aoc2VsZik6Ci0gICAgICAgIHNlbGYuX2Jsb2NrLmFjcXVpcmUoKQotICAgICAgICBzZWxmLl9zdG9wcGVkID0gVHJ1ZQotICAgICAgICBzZWxmLl9ibG9jay5ub3RpZnlfYWxsKCkKLSAgICAgICAgc2VsZi5fYmxvY2sucmVsZWFzZSgpCisgICAgICAgICMgQWZ0ZXIgY2FsbGluZyAuX3N0b3AoKSwgLmlzX2FsaXZlKCkgcmV0dXJucyBGYWxzZSBhbmQgLmpvaW4oKSByZXR1cm5zCisgICAgICAgICMgaW1tZWRpYXRlbHkuICAuX3RzdGF0ZV9sb2NrIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIGNhbGxpbmcgLl9zdG9wKCkuCisgICAgICAgICMKKyAgICAgICAgIyBOb3JtYWwgY2FzZTogIEMgY29kZSBhdCB0aGUgZW5kIG9mIHRoZSB0aHJlYWQncyBsaWZlCisgICAgICAgICMgKHJlbGVhc2Vfc2VudGluZWwgaW4gX3RocmVhZG1vZHVsZS5jKSByZWxlYXNlcyAuX3RzdGF0ZV9sb2NrLCBhbmQKKyAgICAgICAgIyB0aGF0J3MgZGV0ZWN0ZWQgYnkgb3VyIC5fd2FpdF9mb3JfdHN0YXRlX2xvY2soKSwgY2FsbGVkIGJ5IC5qb2luKCkKKyAgICAgICAgIyBhbmQgLmlzX2FsaXZlKCkuICBBbnkgbnVtYmVyIG9mIHRocmVhZHMgX21heV8gY2FsbCAuX3N0b3AoKQorICAgICAgICAjIHNpbXVsdGFuZW91c2x5IChmb3IgZXhhbXBsZSwgaWYgbXVsdGlwbGUgdGhyZWFkcyBhcmUgYmxvY2tlZCBpbgorICAgICAgICAjIC5qb2luKCkgY2FsbHMpLCBhbmQgdGhleSdyZSBub3Qgc2VyaWFsaXplZC4gIFRoYXQncyBoYXJtbGVzcyAtCisgICAgICAgICMgdGhleSdsbCBqdXN0IG1ha2UgcmVkdW5kYW50IHJlYmluZGluZ3Mgb2YgLl9pc19zdG9wcGVkIGFuZAorICAgICAgICAjIC5fdHN0YXRlX2xvY2suICBPYnNjdXJlOiAgd2UgcmViaW5kIC5fdHN0YXRlX2xvY2sgbGFzdCBzbyB0aGF0IHRoZQorICAgICAgICAjICJhc3NlcnQgc2VsZi5faXNfc3RvcHBlZCIgaW4gLl93YWl0X2Zvcl90c3RhdGVfbG9jaygpIGFsd2F5cyB3b3JrcworICAgICAgICAjICh0aGUgYXNzZXJ0IGlzIGV4ZWN1dGVkIG9ubHkgaWYgLl90c3RhdGVfbG9jayBpcyBOb25lKS4KKyAgICAgICAgIworICAgICAgICAjIFNwZWNpYWwgY2FzZTogIF9tYWluX3RocmVhZCByZWxlYXNlcyAuX3RzdGF0ZV9sb2NrIHZpYSB0aGlzCisgICAgICAgICMgbW9kdWxlJ3MgX3NodXRkb3duKCkgZnVuY3Rpb24uCisgICAgICAgIGxvY2sgPSBzZWxmLl90c3RhdGVfbG9jaworICAgICAgICBpZiBsb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBsb2NrLmxvY2tlZCgpCisgICAgICAgIHNlbGYuX2lzX3N0b3BwZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrID0gTm9uZQogCiAgICAgZGVmIF9kZWxldGUoc2VsZik6CiAgICAgICAgICJSZW1vdmUgY3VycmVudCB0aHJlYWQgZnJvbSB0aGUgZGljdCBvZiBjdXJyZW50bHkgcnVubmluZyB0aHJlYWRzLiIKQEAgLTEwMjEsMjAgKzEwNTcsMjYgQEAKICAgICAgICAgaWYgc2VsZiBpcyBjdXJyZW50X3RocmVhZCgpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJjYW5ub3Qgam9pbiBjdXJyZW50IHRocmVhZCIpCiAKLSAgICAgICAgc2VsZi5fYmxvY2suYWNxdWlyZSgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5fc3RvcHBlZDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmxvY2sud2FpdCgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRlYWRsaW5lID0gX3RpbWUoKSArIHRpbWVvdXQKLSAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5fc3RvcHBlZDoKLSAgICAgICAgICAgICAgICAgICAgZGVsYXkgPSBkZWFkbGluZSAtIF90aW1lKCkKLSAgICAgICAgICAgICAgICAgICAgaWYgZGVsYXkgPD0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jsb2NrLndhaXQoZGVsYXkpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLl9ibG9jay5yZWxlYXNlKCkKKyAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfdHN0YXRlX2xvY2soKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB0aGUgYmVoYXZpb3Igb2YgYSBuZWdhdGl2ZSB0aW1lb3V0IGlzbid0IGRvY3VtZW50ZWQsIGJ1dAorICAgICAgICAgICAgIyBoaXN0b3JpY2FsbHkgLmpvaW4odGltZW91dD14KSBmb3IgeDwwIGhhcyBhY3RlZCBhcyBpZiB0aW1lb3V0PTAKKyAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKHRpbWVvdXQ9bWF4KHRpbWVvdXQsIDApKQorCisgICAgZGVmIF93YWl0X2Zvcl90c3RhdGVfbG9jayhzZWxmLCBibG9jaz1UcnVlLCB0aW1lb3V0PS0xKToKKyAgICAgICAgIyBJc3N1ZSAjMTg4MDg6IHdhaXQgZm9yIHRoZSB0aHJlYWQgc3RhdGUgdG8gYmUgZ29uZS4KKyAgICAgICAgIyBBdCB0aGUgZW5kIG9mIHRoZSB0aHJlYWQncyBsaWZlLCBhZnRlciBhbGwga25vd2xlZGdlIG9mIHRoZSB0aHJlYWQKKyAgICAgICAgIyBpcyByZW1vdmVkIGZyb20gQyBkYXRhIHN0cnVjdHVyZXMsIEMgY29kZSByZWxlYXNlcyBvdXIgX3RzdGF0ZV9sb2NrLgorICAgICAgICAjIFRoaXMgbWV0aG9kIHBhc3NlcyBpdHMgYXJndW1lbnRzIHRvIF90c3RhdGVfbG9jay5hcXVpcmUoKS4KKyAgICAgICAgIyBJZiB0aGUgbG9jayBpcyBhY3F1aXJlZCwgdGhlIEMgY29kZSBpcyBkb25lLCBhbmQgc2VsZi5fc3RvcCgpIGlzCisgICAgICAgICMgY2FsbGVkLiAgVGhhdCBzZXRzIC5faXNfc3RvcHBlZCB0byBUcnVlLCBhbmQgLl90c3RhdGVfbG9jayB0byBOb25lLgorICAgICAgICBsb2NrID0gc2VsZi5fdHN0YXRlX2xvY2sKKyAgICAgICAgaWYgbG9jayBpcyBOb25lOiAgIyBhbHJlYWR5IGRldGVybWluZWQgdGhhdCB0aGUgQyBjb2RlIGlzIGRvbmUKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLl9pc19zdG9wcGVkCisgICAgICAgIGVsaWYgbG9jay5hY3F1aXJlKGJsb2NrLCB0aW1lb3V0KToKKyAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgICAgICBzZWxmLl9zdG9wKCkKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBuYW1lKHNlbGYpOgpAQCAtMTA3Myw3ICsxMTE1LDEwIEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIGFzc2VydCBzZWxmLl9pbml0aWFsaXplZCwgIlRocmVhZC5fX2luaXRfXygpIG5vdCBjYWxsZWQiCi0gICAgICAgIHJldHVybiBzZWxmLl9zdGFydGVkLmlzX3NldCgpIGFuZCBub3Qgc2VsZi5fc3RvcHBlZAorICAgICAgICBpZiBzZWxmLl9pc19zdG9wcGVkIG9yIG5vdCBzZWxmLl9zdGFydGVkLmlzX3NldCgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKEZhbHNlKQorICAgICAgICByZXR1cm4gbm90IHNlbGYuX2lzX3N0b3BwZWQKIAogICAgIGlzQWxpdmUgPSBpc19hbGl2ZQogCkBAIC0xMTQ5LDI1ICsxMTk0LDEyIEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmLCBuYW1lPSJNYWluVGhyZWFkIiwgZGFlbW9uPUZhbHNlKQorICAgICAgICBzZWxmLl9zZXRfdHN0YXRlX2xvY2soKQogICAgICAgICBzZWxmLl9zdGFydGVkLnNldCgpCiAgICAgICAgIHNlbGYuX3NldF9pZGVudCgpCiAgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgogICAgICAgICAgICAgX2FjdGl2ZVtzZWxmLl9pZGVudF0gPSBzZWxmCiAKLSAgICBkZWYgX2V4aXRmdW5jKHNlbGYpOgotICAgICAgICBzZWxmLl9zdG9wKCkKLSAgICAgICAgdCA9IF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpCi0gICAgICAgIHdoaWxlIHQ6Ci0gICAgICAgICAgICB0LmpvaW4oKQotICAgICAgICAgICAgdCA9IF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpCi0gICAgICAgIHNlbGYuX2RlbGV0ZSgpCi0KLWRlZiBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKToKLSAgICBmb3IgdCBpbiBlbnVtZXJhdGUoKToKLSAgICAgICAgaWYgbm90IHQuZGFlbW9uIGFuZCB0LmlzX2FsaXZlKCk6Ci0gICAgICAgICAgICByZXR1cm4gdAotICAgIHJldHVybiBOb25lCi0KIAogIyBEdW1teSB0aHJlYWQgY2xhc3MgdG8gcmVwcmVzZW50IHRocmVhZHMgbm90IHN0YXJ0ZWQgaGVyZS4KICMgVGhlc2UgYXJlbid0IGdhcmJhZ2UgY29sbGVjdGVkIHdoZW4gdGhleSBkaWUsIG5vciBjYW4gdGhleSBiZSB3YWl0ZWQgZm9yLgpAQCAtMTE4MiwxMSArMTIxNCw2IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZiwgbmFtZT1fbmV3bmFtZSgiRHVtbXktJWQiKSwgZGFlbW9uPVRydWUpCiAKLSAgICAgICAgIyBUaHJlYWQuX2Jsb2NrIGNvbnN1bWVzIGFuIE9TLWxldmVsIGxvY2tpbmcgcHJpbWl0aXZlLCB3aGljaAotICAgICAgICAjIGNhbiBuZXZlciBiZSB1c2VkIGJ5IGEgX0R1bW15VGhyZWFkLiAgU2luY2UgYSBfRHVtbXlUaHJlYWQKLSAgICAgICAgIyBpbnN0YW5jZSBpcyBpbW1vcnRhbCwgdGhhdCdzIGJhZCwgc28gcmVsZWFzZSB0aGlzIHJlc291cmNlLgotICAgICAgICBkZWwgc2VsZi5fYmxvY2sKLQogICAgICAgICBzZWxmLl9zdGFydGVkLnNldCgpCiAgICAgICAgIHNlbGYuX3NldF9pZGVudCgpCiAgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgpAQCAtMTI0OCw3ICsxMjc1LDQwIEBACiAjIGFuZCBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIGludGVycHJldGVyCiAjIChQeV9NYWluKSBhcyB0aHJlYWRpbmcuX3NodXRkb3duLgogCi1fc2h1dGRvd24gPSBfTWFpblRocmVhZCgpLl9leGl0ZnVuYworX21haW5fdGhyZWFkID0gX01haW5UaHJlYWQoKQorCitkZWYgX3NodXRkb3duKCk6CisgICAgIyBPYnNjdXJlOiAgb3RoZXIgdGhyZWFkcyBtYXkgYmUgd2FpdGluZyB0byBqb2luIF9tYWluX3RocmVhZC4gIFRoYXQncworICAgICMgZHViaW91cywgYnV0IHNvbWUgY29kZSBkb2VzIGl0LiAgV2UgY2FuJ3Qgd2FpdCBmb3IgQyBjb2RlIHRvIHJlbGVhc2UKKyAgICAjIHRoZSBtYWluIHRocmVhZCdzIHRzdGF0ZV9sb2NrIC0gdGhhdCB3b24ndCBoYXBwZW4gdW50aWwgdGhlIGludGVycHJldGVyCisgICAgIyBpcyBuZWFybHkgZGVhZC4gIFNvIHdlIHJlbGVhc2UgaXQgaGVyZS4gIE5vdGUgdGhhdCBqdXN0IGNhbGxpbmcgX3N0b3AoKQorICAgICMgaXNuJ3QgZW5vdWdoOiAgb3RoZXIgdGhyZWFkcyBtYXkgYWxyZWFkeSBiZSB3YWl0aW5nIG9uIF90c3RhdGVfbG9jay4KKyAgICB0bG9jayA9IF9tYWluX3RocmVhZC5fdHN0YXRlX2xvY2sKKyAgICAjIFRoZSBtYWluIHRocmVhZCBpc24ndCBmaW5pc2hlZCB5ZXQsIHNvIGl0cyB0aHJlYWQgc3RhdGUgbG9jayBjYW4ndCBoYXZlCisgICAgIyBiZWVuIHJlbGVhc2VkLgorICAgIGFzc2VydCB0bG9jayBpcyBub3QgTm9uZQorICAgIGFzc2VydCB0bG9jay5sb2NrZWQoKQorICAgIHRsb2NrLnJlbGVhc2UoKQorICAgIF9tYWluX3RocmVhZC5fc3RvcCgpCisgICAgdCA9IF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpCisgICAgd2hpbGUgdDoKKyAgICAgICAgdC5qb2luKCkKKyAgICAgICAgdCA9IF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpCisgICAgX21haW5fdGhyZWFkLl9kZWxldGUoKQorCitkZWYgX3BpY2tTb21lTm9uRGFlbW9uVGhyZWFkKCk6CisgICAgZm9yIHQgaW4gZW51bWVyYXRlKCk6CisgICAgICAgIGlmIG5vdCB0LmRhZW1vbiBhbmQgdC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHQKKyAgICByZXR1cm4gTm9uZQorCitkZWYgbWFpbl90aHJlYWQoKToKKyAgICAiIiJSZXR1cm4gdGhlIG1haW4gdGhyZWFkIG9iamVjdC4KKworICAgIEluIG5vcm1hbCBjb25kaXRpb25zLCB0aGUgbWFpbiB0aHJlYWQgaXMgdGhlIHRocmVhZCBmcm9tIHdoaWNoIHRoZQorICAgIFB5dGhvbiBpbnRlcnByZXRlciB3YXMgc3RhcnRlZC4KKyAgICAiIiIKKyAgICByZXR1cm4gX21haW5fdGhyZWFkCiAKICMgZ2V0IHRocmVhZC1sb2NhbCBpbXBsZW1lbnRhdGlvbiwgZWl0aGVyIGZyb20gdGhlIHRocmVhZAogIyBtb2R1bGUsIG9yIGZyb20gdGhlIHB5dGhvbiBmYWxsYmFjawpAQCAtMTI2NiwyNSArMTMyNiwzMSBAQAogCiAgICAgIyBSZXNldCBfYWN0aXZlX2xpbWJvX2xvY2ssIGluIGNhc2Ugd2UgZm9ya2VkIHdoaWxlIHRoZSBsb2NrIHdhcyBoZWxkCiAgICAgIyBieSBhbm90aGVyIChub24tZm9ya2VkKSB0aHJlYWQuICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODc0OTAwCi0gICAgZ2xvYmFsIF9hY3RpdmVfbGltYm9fbG9jaworICAgIGdsb2JhbCBfYWN0aXZlX2xpbWJvX2xvY2ssIF9tYWluX3RocmVhZAogICAgIF9hY3RpdmVfbGltYm9fbG9jayA9IF9hbGxvY2F0ZV9sb2NrKCkKIAogICAgICMgZm9yaygpIG9ubHkgY29waWVkIHRoZSBjdXJyZW50IHRocmVhZDsgY2xlYXIgcmVmZXJlbmNlcyB0byBvdGhlcnMuCiAgICAgbmV3X2FjdGl2ZSA9IHt9CiAgICAgY3VycmVudCA9IGN1cnJlbnRfdGhyZWFkKCkKKyAgICBfbWFpbl90aHJlYWQgPSBjdXJyZW50CiAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6Ci0gICAgICAgIGZvciB0aHJlYWQgaW4gX2VudW1lcmF0ZSgpOgorICAgICAgICAjIERhbmdsaW5nIHRocmVhZCBpbnN0YW5jZXMgbXVzdCBzdGlsbCBoYXZlIHRoZWlyIGxvY2tzIHJlc2V0LAorICAgICAgICAjIGJlY2F1c2Ugc29tZW9uZSBtYXkgam9pbigpIHRoZW0uCisgICAgICAgIHRocmVhZHMgPSBzZXQoX2VudW1lcmF0ZSgpKQorICAgICAgICB0aHJlYWRzLnVwZGF0ZShfZGFuZ2xpbmcpCisgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKICAgICAgICAgICAgICMgQW55IGxvY2svY29uZGl0aW9uIHZhcmlhYmxlIG1heSBiZSBjdXJyZW50bHkgbG9ja2VkIG9yIGluIGFuCiAgICAgICAgICAgICAjIGludmFsaWQgc3RhdGUsIHNvIHdlIHJlaW5pdGlhbGl6ZSB0aGVtLgotICAgICAgICAgICAgdGhyZWFkLl9yZXNldF9pbnRlcm5hbF9sb2NrcygpCiAgICAgICAgICAgICBpZiB0aHJlYWQgaXMgY3VycmVudDoKICAgICAgICAgICAgICAgICAjIFRoZXJlIGlzIG9ubHkgb25lIGFjdGl2ZSB0aHJlYWQuIFdlIHJlc2V0IHRoZSBpZGVudCB0bwogICAgICAgICAgICAgICAgICMgaXRzIG5ldyB2YWx1ZSBzaW5jZSBpdCBjYW4gaGF2ZSBjaGFuZ2VkLgorICAgICAgICAgICAgICAgIHRocmVhZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoVHJ1ZSkKICAgICAgICAgICAgICAgICBpZGVudCA9IGdldF9pZGVudCgpCiAgICAgICAgICAgICAgICAgdGhyZWFkLl9pZGVudCA9IGlkZW50CiAgICAgICAgICAgICAgICAgbmV3X2FjdGl2ZVtpZGVudF0gPSB0aHJlYWQKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBBbGwgdGhlIG90aGVycyBhcmUgYWxyZWFkeSBzdG9wcGVkLgorICAgICAgICAgICAgICAgIHRocmVhZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoRmFsc2UpCiAgICAgICAgICAgICAgICAgdGhyZWFkLl9zdG9wKCkKIAogICAgICAgICBfbGltYm8uY2xlYXIoKQpkaWZmIC0tZ2l0IGEvTGliL3RpbWVpdC5weSBiL0xpYi90aW1laXQucHkKaW5kZXggNGY3ZDI4Zi4uZWFkMjAzMCAxMDA3NTUKLS0tIGEvTGliL3RpbWVpdC5weQorKysgYi9MaWIvdGltZWl0LnB5CkBAIC0zMSwzOCArMzEsMjkgQEAKIElmIC1uIGlzIG5vdCBnaXZlbiwgYSBzdWl0YWJsZSBudW1iZXIgb2YgbG9vcHMgaXMgY2FsY3VsYXRlZCBieSB0cnlpbmcKIHN1Y2Nlc3NpdmUgcG93ZXJzIG9mIDEwIHVudGlsIHRoZSB0b3RhbCB0aW1lIGlzIGF0IGxlYXN0IDAuMiBzZWNvbmRzLgogCi1UaGUgZGlmZmVyZW5jZSBpbiBkZWZhdWx0IHRpbWVyIGZ1bmN0aW9uIGlzIGJlY2F1c2Ugb24gV2luZG93cywKLWNsb2NrKCkgaGFzIG1pY3Jvc2Vjb25kIGdyYW51bGFyaXR5IGJ1dCB0aW1lKCkncyBncmFudWxhcml0eSBpcyAxLzYwdGgKLW9mIGEgc2Vjb25kOyBvbiBVbml4LCBjbG9jaygpIGhhcyAxLzEwMHRoIG9mIGEgc2Vjb25kIGdyYW51bGFyaXR5IGFuZAotdGltZSgpIGlzIG11Y2ggbW9yZSBwcmVjaXNlLiAgT24gZWl0aGVyIHBsYXRmb3JtLCB0aGUgZGVmYXVsdCB0aW1lcgotZnVuY3Rpb25zIG1lYXN1cmUgd2FsbCBjbG9jayB0aW1lLCBub3QgdGhlIENQVSB0aW1lLiAgVGhpcyBtZWFucyB0aGF0Ci1vdGhlciBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgc2FtZSBjb21wdXRlciBtYXkgaW50ZXJmZXJlIHdpdGggdGhlCi10aW1pbmcuICBUaGUgYmVzdCB0aGluZyB0byBkbyB3aGVuIGFjY3VyYXRlIHRpbWluZyBpcyBuZWNlc3NhcnkgaXMgdG8KLXJlcGVhdCB0aGUgdGltaW5nIGEgZmV3IHRpbWVzIGFuZCB1c2UgdGhlIGJlc3QgdGltZS4gIFRoZSAtciBvcHRpb24gaXMKLWdvb2QgZm9yIHRoaXM7IHRoZSBkZWZhdWx0IG9mIDMgcmVwZXRpdGlvbnMgaXMgcHJvYmFibHkgZW5vdWdoIGluIG1vc3QKLWNhc2VzLiAgT24gVW5peCwgeW91IGNhbiB1c2UgY2xvY2soKSB0byBtZWFzdXJlIENQVSB0aW1lLgotCiBOb3RlOiB0aGVyZSBpcyBhIGNlcnRhaW4gYmFzZWxpbmUgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIGV4ZWN1dGluZyBhCi1wYXNzIHN0YXRlbWVudC4gIFRoZSBjb2RlIGhlcmUgZG9lc24ndCB0cnkgdG8gaGlkZSBpdCwgYnV0IHlvdSBzaG91bGQKLWJlIGF3YXJlIG9mIGl0LiAgVGhlIGJhc2VsaW5lIG92ZXJoZWFkIGNhbiBiZSBtZWFzdXJlZCBieSBpbnZva2luZyB0aGUKLXByb2dyYW0gd2l0aG91dCBhcmd1bWVudHMuCitwYXNzIHN0YXRlbWVudC4gIEl0IGRpZmZlcnMgYmV0d2VlbiB2ZXJzaW9ucy4gIFRoZSBjb2RlIGhlcmUgZG9lc24ndCB0cnkKK3RvIGhpZGUgaXQsIGJ1dCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mIGl0LiAgVGhlIGJhc2VsaW5lIG92ZXJoZWFkIGNhbiBiZQorbWVhc3VyZWQgYnkgaW52b2tpbmcgdGhlIHByb2dyYW0gd2l0aG91dCBhcmd1bWVudHMuCiAKLVRoZSBiYXNlbGluZSBvdmVyaGVhZCBkaWZmZXJzIGJldHdlZW4gUHl0aG9uIHZlcnNpb25zISAgQWxzbywgdG8KLWZhaXJseSBjb21wYXJlIG9sZGVyIFB5dGhvbiB2ZXJzaW9ucyB0byBQeXRob24gMi4zLCB5b3UgbWF5IHdhbnQgdG8KLXVzZSBweXRob24gLU8gZm9yIHRoZSBvbGRlciB2ZXJzaW9ucyB0byBhdm9pZCB0aW1pbmcgU0VUX0xJTkVOTwotaW5zdHJ1Y3Rpb25zLgorQ2xhc3NlczoKKworICAgIFRpbWVyCisKK0Z1bmN0aW9uczoKKworICAgIHRpbWVpdChzdHJpbmcsIHN0cmluZykgLT4gZmxvYXQKKyAgICByZXBlYXQoc3RyaW5nLCBzdHJpbmcpIC0+IGxpc3QKKyAgICBkZWZhdWx0X3RpbWVyKCkgLT4gZmxvYXQKKwogIiIiCiAKIGltcG9ydCBnYwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLXRyeToKLSAgICBpbXBvcnQgaXRlcnRvb2xzCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBNdXN0IGJlIGFuIG9sZGVyIFB5dGhvbiB2ZXJzaW9uIChzZWUgdGltZWl0KCkgYmVsb3cpCi0gICAgaXRlcnRvb2xzID0gTm9uZQoraW1wb3J0IGl0ZXJ0b29scwogCi1fX2FsbF9fID0gWyJUaW1lciJdCitfX2FsbF9fID0gWyJUaW1lciIsICJ0aW1laXQiLCAicmVwZWF0IiwgImRlZmF1bHRfdGltZXIiXQogCiBkdW1teV9zcmNfbmFtZSA9ICI8dGltZWl0LXNyYz4iCiBkZWZhdWx0X251bWJlciA9IDEwMDAwMDAKQEAgLTE4MCwxMCArMTcxLDcgQEAKICAgICAgICAgdG8gb25lIG1pbGxpb24uICBUaGUgbWFpbiBzdGF0ZW1lbnQsIHRoZSBzZXR1cCBzdGF0ZW1lbnQgYW5kCiAgICAgICAgIHRoZSB0aW1lciBmdW5jdGlvbiB0byBiZSB1c2VkIGFyZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgaXRlcnRvb2xzOgotICAgICAgICAgICAgaXQgPSBpdGVydG9vbHMucmVwZWF0KE5vbmUsIG51bWJlcikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGl0ID0gW05vbmVdICogbnVtYmVyCisgICAgICAgIGl0ID0gaXRlcnRvb2xzLnJlcGVhdChOb25lLCBudW1iZXIpCiAgICAgICAgIGdjb2xkID0gZ2MuaXNlbmFibGVkKCkKICAgICAgICAgZ2MuZGlzYWJsZSgpCiAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL19faW5pdF9fLnB5IGIvTGliL3RraW50ZXIvX19pbml0X18ucHkKaW5kZXggMmY0Y2NlOS4uZDczNTJlYSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvX19pbml0X18ucHkKKysrIGIvTGliL3RraW50ZXIvX19pbml0X18ucHkKQEAgLTIxOTIsNDUgKzIxOTIsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAnaW52b2tlJykKIAotCi0jIEluZGljZXM6Ci0jIFhYWCBJIGRvbid0IGxpa2UgdGhlc2UgLS0gdGFrZSB0aGVtIGF3YXkKLWRlZiBBdEVuZCgpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXRFbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICByZXR1cm4gJ2VuZCcKLQotCi1kZWYgQXRJbnNlcnQoKmFyZ3MpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXRJbnNlcnQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICBzID0gJ2luc2VydCcKLSAgICBmb3IgYSBpbiBhcmdzOgotICAgICAgICBpZiBhOiBzID0gcyArICgnICcgKyBhKQotICAgIHJldHVybiBzCi0KLQotZGVmIEF0U2VsRmlyc3QoKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0U2VsRmlyc3Qgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICByZXR1cm4gJ3NlbC5maXJzdCcKLQotCi1kZWYgQXRTZWxMYXN0KCk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdFNlbExhc3Qgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICByZXR1cm4gJ3NlbC5sYXN0JwotCi0KLWRlZiBBdCh4LCB5PU5vbmUpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICBpZiB5IGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiAnQCVyJyAlICh4LCkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gJ0AlciwlcicgJSAoeCwgeSkKLQotCiBjbGFzcyBDYW52YXMoV2lkZ2V0LCBYVmlldywgWVZpZXcpOgogICAgICIiIkNhbnZhcyB3aWRnZXQgdG8gZGlzcGxheSBncmFwaGljYWwgZWxlbWVudHMgbGlrZSBsaW5lcyBvciB0ZXh0LiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9LCAqKmt3KToKQEAgLTI5NjEsMTEgKzI5MjIsMTEgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgJ3RleHQnLCBjbmYsIGt3KQotICAgIGRlZiBiYm94KHNlbGYsICphcmdzKToKKyAgICBkZWYgYmJveChzZWxmLCBpbmRleCk6CiAgICAgICAgICIiIlJldHVybiBhIHR1cGxlIG9mICh4LHksd2lkdGgsaGVpZ2h0KSB3aGljaCBnaXZlcyB0aGUgYm91bmRpbmcKLSAgICAgICAgYm94IG9mIHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIGNoYXJhY3RlciBhdCB0aGUgaW5kZXggaW4gQVJHUy4iIiIKKyAgICAgICAgYm94IG9mIHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIGNoYXJhY3RlciBhdCB0aGUgZ2l2ZW4gaW5kZXguIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKAotICAgICAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAnYmJveCcpICsgYXJncykpIG9yIE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2Jib3gnLCBpbmRleCkpIG9yIE5vbmUKICAgICBkZWYgdGtfdGV4dFNlbGVjdFRvKHNlbGYsIGluZGV4KToKICAgICAgICAgc2VsZi50ay5jYWxsKCd0a190ZXh0U2VsZWN0VG8nLCBzZWxmLl93LCBpbmRleCkKICAgICBkZWYgdGtfdGV4dEJhY2tzcGFjZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL2ZpbGVkaWFsb2cucHkgYi9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5CmluZGV4IDNmZmIyNTIuLmE3MWFmYjIgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL2ZpbGVkaWFsb2cucHkKKysrIGIvTGliL3RraW50ZXIvZmlsZWRpYWxvZy5weQpAQCAtMTY2LDcgKzE2Niw3IEBACiAgICAgICAgIGRpciwgcGF0ID0gc2VsZi5nZXRfZmlsdGVyKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYubWFzdGVyLmJlbGwoKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gZGlyCkBAIC0yMDksNyArMjA5LDcgQEAKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMoZGlyKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcHdkID0gTm9uZQogICAgICAgICAgICAgaWYgcHdkOgogICAgICAgICAgICAgICAgIGRpciA9IG9zLnBhdGguam9pbihwd2QsIGRpcikKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3Rfd2lkZ2V0cy5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3Rfd2lkZ2V0cy5weQppbmRleCA2ZWY3NzUwLi40N2UyODFmIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF93aWRnZXRzLnB5CkBAIC02MzEsOCArNjMxLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2lkZ2V0LmJib3goJ2VuZCcpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCB3aWRnZXQuYmJveCwgJ25vaW5kZXgnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCB3aWRnZXQuYmJveCwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94LCAnMS4xJywgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2lkZ2V0LmJib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2lkZ2V0LmJib3gsICcxLjEnLCAnZW5kJykKIAogCiBAYWRkX3N0YW5kYXJkX29wdGlvbnMoUGl4ZWxTaXplVGVzdHMsIFN0YW5kYXJkT3B0aW9uc1Rlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rva2VuLnB5IGIvTGliL3Rva2VuLnB5CmluZGV4IDMxZmFlMGEuLjc0NzBjOGMgMTAwNjQ0Ci0tLSBhL0xpYi90b2tlbi5weQorKysgYi9MaWIvdG9rZW4ucHkKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgb3V0RmlsZU5hbWUgPSBhcmdzWzFdCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4oaW5GaWxlTmFtZSkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJJL08gZXJyb3I6ICVzXG4iICUgc3RyKGVycikpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgbGluZXMgPSBmcC5yZWFkKCkuc3BsaXQoIlxuIikKQEAgLTExMiw3ICsxMTIsNyBAQAogICAgICMgbG9hZCB0aGUgb3V0cHV0IHNrZWxldG9uIGZyb20gdGhlIHRhcmdldDoKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihvdXRGaWxlTmFtZSkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJL08gZXJyb3I6ICVzXG4iICUgc3RyKGVycikpCiAgICAgICAgIHN5cy5leGl0KDIpCiAgICAgZm9ybWF0ID0gZnAucmVhZCgpLnNwbGl0KCJcbiIpCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICBmb3JtYXRbc3RhcnQ6ZW5kXSA9IGxpbmVzCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4ob3V0RmlsZU5hbWUsICd3JykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJL08gZXJyb3I6ICVzXG4iICUgc3RyKGVycikpCiAgICAgICAgIHN5cy5leGl0KDQpCiAgICAgZnAud3JpdGUoIlxuIi5qb2luKGZvcm1hdCkpCmRpZmYgLS1naXQgYS9MaWIvdG9rZW5pemUucHkgYi9MaWIvdG9rZW5pemUucHkKaW5kZXggMjk0YmY5YS4uNzc4NWM5OCAxMDA2NDQKLS0tIGEvTGliL3Rva2VuaXplLnB5CisrKyBiL0xpYi90b2tlbml6ZS5weQpAQCAtNjczLDcgKzY3Myw3IEBACiAgICAgICAgIGVycm9yKGVyci5hcmdzWzBdLCBmaWxlbmFtZSwgKGxpbmUsIGNvbHVtbikpCiAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGVycjoKICAgICAgICAgZXJyb3IoZXJyLCBmaWxlbmFtZSkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBlcnJvcihlcnIpCiAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICBwcmludCgiaW50ZXJydXB0ZWRcbiIpCmRpZmYgLS1naXQgYS9MaWIvdHJhY2UucHkgYi9MaWIvdHJhY2UucHkKaW5kZXggYzA5YjM2NS4uMDlmZTllZSAxMDA3NTUKLS0tIGEvTGliL3RyYWNlLnB5CisrKyBiL0xpYi90cmFjZS5weQpAQCAtMjM4LDcgKzIzOCw3IEBACiAgICAgICAgICAgICAgICAgY291bnRzLCBjYWxsZWRmdW5jcywgY2FsbGVycyA9IFwKICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkKG9wZW4oc2VsZi5pbmZpbGUsICdyYicpKQogICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlKHNlbGYuX19jbGFzc19fKGNvdW50cywgY2FsbGVkZnVuY3MsIGNhbGxlcnMpKQotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvciwgVmFsdWVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvciwgVmFsdWVFcnJvcikgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50KCgiU2tpcHBpbmcgY291bnRzIGZpbGUgJXI6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmluZmlsZSwgZXJyKSksIGZpbGU9c3lzLnN0ZGVycikKIApAQCAtMzQ4LDcgKzM0OCw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcGlja2xlLmR1bXAoKHNlbGYuY291bnRzLCBzZWxmLmNhbGxlZGZ1bmNzLCBzZWxmLmNhbGxlcnMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4oc2VsZi5vdXRmaWxlLCAnd2InKSwgMSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBwcmludCgiQ2FuJ3Qgc2F2ZSBjb3VudHMgZmlsZXMgYmVjYXVzZSAlcyIgJSBlcnIsIGZpbGU9c3lzLnN0ZGVycikKIAogICAgIGRlZiB3cml0ZV9yZXN1bHRzX2ZpbGUoc2VsZiwgcGF0aCwgbGluZXMsIGxub3RhYiwgbGluZXNfaGl0LCBlbmNvZGluZz1Ob25lKToKQEAgLTM1Niw3ICszNTYsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG91dGZpbGUgPSBvcGVuKHBhdGgsICJ3IiwgZW5jb2Rpbmc9ZW5jb2RpbmcpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcHJpbnQoKCJ0cmFjZTogQ291bGQgbm90IG9wZW4gJXIgZm9yIHdyaXRpbmc6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItIHNraXBwaW5nIiAlIChwYXRoLCBlcnIpKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgcmV0dXJuIDAsIDAKQEAgLTQzNyw3ICs0MzcsNyBAQAogICAgICAgICB3aXRoIHRva2VuaXplLm9wZW4oZmlsZW5hbWUpIGFzIGY6CiAgICAgICAgICAgICBwcm9nID0gZi5yZWFkKCkKICAgICAgICAgICAgIGVuY29kaW5nID0gZi5lbmNvZGluZwotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHByaW50KCgiTm90IHByaW50aW5nIGNvdmVyYWdlIGRhdGEgZm9yICVyOiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBlcnIpKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICByZXR1cm4ge30KQEAgLTgwMiw3ICs4MDIsNyBAQAogICAgICAgICAgICAgICAgICdfX2NhY2hlZF9fJzogTm9uZSwKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHQucnVuY3R4KGNvZGUsIGdsb2JzLCBnbG9icykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBfZXJyX2V4aXQoIkNhbm5vdCBydW4gZmlsZSAlciBiZWNhdXNlOiAlcyIgJSAoc3lzLmFyZ3ZbMF0sIGVycikpCiAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgogICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3RyYWNlYmFjay5weSBiL0xpYi90cmFjZWJhY2sucHkKaW5kZXggZjMzZmNlZC4uZmFmNTkzYSAxMDA2NDQKLS0tIGEvTGliL3RyYWNlYmFjay5weQorKysgYi9MaWIvdHJhY2ViYWNrLnB5CkBAIC0yLDI2ICsyLDMyIEBACiAKIGltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCBzeXMKK2ltcG9ydCBvcGVyYXRvcgogCiBfX2FsbF9fID0gWydleHRyYWN0X3N0YWNrJywgJ2V4dHJhY3RfdGInLCAnZm9ybWF0X2V4Y2VwdGlvbicsCiAgICAgICAgICAgICdmb3JtYXRfZXhjZXB0aW9uX29ubHknLCAnZm9ybWF0X2xpc3QnLCAnZm9ybWF0X3N0YWNrJywKICAgICAgICAgICAgJ2Zvcm1hdF90YicsICdwcmludF9leGMnLCAnZm9ybWF0X2V4YycsICdwcmludF9leGNlcHRpb24nLAotICAgICAgICAgICAncHJpbnRfbGFzdCcsICdwcmludF9zdGFjaycsICdwcmludF90YiddCisgICAgICAgICAgICdwcmludF9sYXN0JywgJ3ByaW50X3N0YWNrJywgJ3ByaW50X3RiJywKKyAgICAgICAgICAgJ2NsZWFyX2ZyYW1lcyddCiAKLWRlZiBfcHJpbnQoZmlsZSwgc3RyPScnLCB0ZXJtaW5hdG9yPSdcbicpOgotICAgIGZpbGUud3JpdGUoc3RyK3Rlcm1pbmF0b3IpCisjCisjIEZvcm1hdHRpbmcgYW5kIHByaW50aW5nIGxpc3RzIG9mIHRyYWNlYmFjayBsaW5lcy4KKyMKIAorZGVmIF9mb3JtYXRfbGlzdF9pdGVyKGV4dHJhY3RlZF9saXN0KToKKyAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiBleHRyYWN0ZWRfbGlzdDoKKyAgICAgICAgaXRlbSA9ICcgIEZpbGUgInt9IiwgbGluZSB7fSwgaW4ge31cbicuZm9ybWF0KGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpCisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICBpdGVtID0gaXRlbSArICcgICAge31cbicuZm9ybWF0KGxpbmUuc3RyaXAoKSkKKyAgICAgICAgeWllbGQgaXRlbQogCiBkZWYgcHJpbnRfbGlzdChleHRyYWN0ZWRfbGlzdCwgZmlsZT1Ob25lKToKICAgICAiIiJQcmludCB0aGUgbGlzdCBvZiB0dXBsZXMgYXMgcmV0dXJuZWQgYnkgZXh0cmFjdF90YigpIG9yCiAgICAgZXh0cmFjdF9zdGFjaygpIGFzIGEgZm9ybWF0dGVkIHN0YWNrIHRyYWNlIHRvIHRoZSBnaXZlbiBmaWxlLiIiIgogICAgIGlmIGZpbGUgaXMgTm9uZToKICAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKLSAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiBleHRyYWN0ZWRfbGlzdDoKLSAgICAgICAgX3ByaW50KGZpbGUsCi0gICAgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxlbmFtZSxsaW5lbm8sbmFtZSkpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICBfcHJpbnQoZmlsZSwgJyAgICAlcycgJSBsaW5lLnN0cmlwKCkpCisgICAgZm9yIGl0ZW0gaW4gX2Zvcm1hdF9saXN0X2l0ZXIoZXh0cmFjdGVkX2xpc3QpOgorICAgICAgICBwcmludChpdGVtLCBmaWxlPWZpbGUsIGVuZD0iIikKIAogZGVmIGZvcm1hdF9saXN0KGV4dHJhY3RlZF9saXN0KToKICAgICAiIiJGb3JtYXQgYSBsaXN0IG9mIHRyYWNlYmFjayBlbnRyeSB0dXBsZXMgZm9yIHByaW50aW5nLgpAQCAtMzMsMTQgKzM5LDQ0IEBACiAgICAgdGhlIHN0cmluZ3MgbWF5IGNvbnRhaW4gaW50ZXJuYWwgbmV3bGluZXMgYXMgd2VsbCwgZm9yIHRob3NlIGl0ZW1zCiAgICAgd2hvc2Ugc291cmNlIHRleHQgbGluZSBpcyBub3QgTm9uZS4KICAgICAiIiIKLSAgICBsaXN0ID0gW10KLSAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiBleHRyYWN0ZWRfbGlzdDoKLSAgICAgICAgaXRlbSA9ICcgIEZpbGUgIiVzIiwgbGluZSAlZCwgaW4gJXNcbicgJSAoZmlsZW5hbWUsbGluZW5vLG5hbWUpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICBpdGVtID0gaXRlbSArICcgICAgJXNcbicgJSBsaW5lLnN0cmlwKCkKLSAgICAgICAgbGlzdC5hcHBlbmQoaXRlbSkKLSAgICByZXR1cm4gbGlzdAorICAgIHJldHVybiBsaXN0KF9mb3JtYXRfbGlzdF9pdGVyKGV4dHJhY3RlZF9saXN0KSkKIAorIworIyBQcmludGluZyBhbmQgRXh0cmFjdGluZyBUcmFjZWJhY2tzLgorIworCisjIGV4dHJhY3RvciB0YWtlcyBjdXJyIGFuZCBuZWVkcyB0byByZXR1cm4gYSB0dXBsZSBvZjoKKyMgLSBGcmFtZSBvYmplY3QKKyMgLSBMaW5lIG51bWJlcgorIyAtIE5leHQgaXRlbSAoc2FtZSB0eXBlIGFzIGN1cnIpCisjIEluIHByYWN0aWNlLCBjdXJyIGlzIGVpdGhlciBhIHRyYWNlYmFjayBvciBhIGZyYW1lLgorZGVmIF9leHRyYWN0X3RiX29yX3N0YWNrX2l0ZXIoY3VyciwgbGltaXQsIGV4dHJhY3Rvcik6CisgICAgaWYgbGltaXQgaXMgTm9uZToKKyAgICAgICAgbGltaXQgPSBnZXRhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0JywgTm9uZSkKKworICAgIG4gPSAwCisgICAgd2hpbGUgY3VyciBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKKyAgICAgICAgZiwgbGluZW5vLCBuZXh0X2l0ZW0gPSBleHRyYWN0b3IoY3VycikKKyAgICAgICAgY28gPSBmLmZfY29kZQorICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCisgICAgICAgIG5hbWUgPSBjby5jb19uYW1lCisKKyAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCisgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKKworICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZSA9IE5vbmUKKworICAgICAgICB5aWVsZCAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkKKyAgICAgICAgY3VyciA9IG5leHRfaXRlbQorICAgICAgICBuICs9IDEKKworZGVmIF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0KToKKyAgICByZXR1cm4gX2V4dHJhY3RfdGJfb3Jfc3RhY2tfaXRlcigKKyAgICAgICAgICAgICAgICB0YiwgbGltaXQsCisgICAgICAgICAgICAgICAgb3BlcmF0b3IuYXR0cmdldHRlcigidGJfZnJhbWUiLCAidGJfbGluZW5vIiwgInRiX25leHQiKSkKIAogZGVmIHByaW50X3RiKHRiLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUpOgogICAgICIiIlByaW50IHVwIHRvICdsaW1pdCcgc3RhY2sgdHJhY2UgZW50cmllcyBmcm9tIHRoZSB0cmFjZWJhY2sgJ3RiJy4KQEAgLTUwLDI5ICs4NiwxMSBAQAogICAgICdmaWxlJyBzaG91bGQgYmUgYW4gb3BlbiBmaWxlIG9yIGZpbGUtbGlrZSBvYmplY3Qgd2l0aCBhIHdyaXRlKCkKICAgICBtZXRob2QuCiAgICAgIiIiCi0gICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIGlmIGxpbWl0IGlzIE5vbmU6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnKToKLSAgICAgICAgICAgIGxpbWl0ID0gc3lzLnRyYWNlYmFja2xpbWl0Ci0gICAgbiA9IDAKLSAgICB3aGlsZSB0YiBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgZiA9IHRiLnRiX2ZyYW1lCi0gICAgICAgIGxpbmVubyA9IHRiLnRiX2xpbmVubwotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKLSAgICAgICAgX3ByaW50KGZpbGUsCi0gICAgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKSkKLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLSAgICAgICAgaWYgbGluZTogX3ByaW50KGZpbGUsICcgICAgJyArIGxpbmUuc3RyaXAoKSkKLSAgICAgICAgdGIgPSB0Yi50Yl9uZXh0Ci0gICAgICAgIG4gPSBuKzEKKyAgICBwcmludF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0PWxpbWl0KSwgZmlsZT1maWxlKQogCiBkZWYgZm9ybWF0X3RiKHRiLCBsaW1pdD1Ob25lKToKICAgICAiIiJBIHNob3J0aGFuZCBmb3IgJ2Zvcm1hdF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0KSknLiIiIgotICAgIHJldHVybiBmb3JtYXRfbGlzdChleHRyYWN0X3RiKHRiLCBsaW1pdCkpCisgICAgcmV0dXJuIGZvcm1hdF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0PWxpbWl0KSkKIAogZGVmIGV4dHJhY3RfdGIodGIsIGxpbWl0PU5vbmUpOgogICAgICIiIlJldHVybiBsaXN0IG9mIHVwIHRvIGxpbWl0IHByZS1wcm9jZXNzZWQgZW50cmllcyBmcm9tIHRyYWNlYmFjay4KQEAgLTg1LDI2ICsxMDMsMTEgQEAKICAgICBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIHN0cmlwcGVkOyBpZiB0aGUgc291cmNlIGlzIG5vdAogICAgIGF2YWlsYWJsZSBpdCBpcyBOb25lLgogICAgICIiIgotICAgIGlmIGxpbWl0IGlzIE5vbmU6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnKToKLSAgICAgICAgICAgIGxpbWl0ID0gc3lzLnRyYWNlYmFja2xpbWl0Ci0gICAgbGlzdCA9IFtdCi0gICAgbiA9IDAKLSAgICB3aGlsZSB0YiBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgZiA9IHRiLnRiX2ZyYW1lCi0gICAgICAgIGxpbmVubyA9IHRiLnRiX2xpbmVubwotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLSAgICAgICAgaWYgbGluZTogbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICBlbHNlOiBsaW5lID0gTm9uZQotICAgICAgICBsaXN0LmFwcGVuZCgoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkpCi0gICAgICAgIHRiID0gdGIudGJfbmV4dAotICAgICAgICBuID0gbisxCi0gICAgcmV0dXJuIGxpc3QKKyAgICByZXR1cm4gbGlzdChfZXh0cmFjdF90Yl9pdGVyKHRiLCBsaW1pdD1saW1pdCkpCiAKKyMKKyMgRXhjZXB0aW9uIGZvcm1hdHRpbmcgYW5kIG91dHB1dC4KKyMKIAogX2NhdXNlX21lc3NhZ2UgPSAoCiAgICAgIlxuVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSAiCkBAIC0xMzIsOSArMTM1LDIzIEBACiAgICAgaXRzLmFwcGVuZChbKGV4YywgY3VzdG9tX3RiIG9yIGV4Yy5fX3RyYWNlYmFja19fKV0pCiAgICAgIyBpdGVydG9vbHMuY2hhaW4gaXMgaW4gYW4gZXh0ZW5zaW9uIG1vZHVsZSBhbmQgbWF5IGJlIHVuYXZhaWxhYmxlCiAgICAgZm9yIGl0IGluIGl0czoKLSAgICAgICAgZm9yIHggaW4gaXQ6Ci0gICAgICAgICAgICB5aWVsZCB4CisgICAgICAgIHlpZWxkIGZyb20gaXQKIAorZGVmIF9mb3JtYXRfZXhjZXB0aW9uX2l0ZXIoZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKToKKyAgICBpZiBjaGFpbjoKKyAgICAgICAgdmFsdWVzID0gX2l0ZXJfY2hhaW4odmFsdWUsIHRiKQorICAgIGVsc2U6CisgICAgICAgIHZhbHVlcyA9IFsodmFsdWUsIHRiKV0KKworICAgIGZvciB2YWx1ZSwgdGIgaW4gdmFsdWVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgIyBUaGlzIGlzIGEgY2F1c2UvY29udGV4dCBtZXNzYWdlIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIHZhbHVlICsgJ1xuJworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgdGI6CisgICAgICAgICAgICB5aWVsZCAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJworICAgICAgICAgICAgeWllbGQgZnJvbSBfZm9ybWF0X2xpc3RfaXRlcihfZXh0cmFjdF90Yl9pdGVyKHRiLCBsaW1pdD1saW1pdCkpCisgICAgICAgIHlpZWxkIGZyb20gX2Zvcm1hdF9leGNlcHRpb25fb25seV9pdGVyKHR5cGUodmFsdWUpLCB2YWx1ZSkKIAogZGVmIHByaW50X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIlByaW50IGV4Y2VwdGlvbiB1cCB0byAnbGltaXQnIHN0YWNrIHRyYWNlIGVudHJpZXMgZnJvbSAndGInIHRvICdmaWxlJy4KQEAgLTE0OSwyMCArMTY2LDggQEAKICAgICAiIiIKICAgICBpZiBmaWxlIGlzIE5vbmU6CiAgICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCi0gICAgaWYgY2hhaW46Ci0gICAgICAgIHZhbHVlcyA9IF9pdGVyX2NoYWluKHZhbHVlLCB0YikKLSAgICBlbHNlOgotICAgICAgICB2YWx1ZXMgPSBbKHZhbHVlLCB0YildCi0gICAgZm9yIHZhbHVlLCB0YiBpbiB2YWx1ZXM6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6Ci0gICAgICAgICAgICBfcHJpbnQoZmlsZSwgdmFsdWUpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiB0YjoKLSAgICAgICAgICAgIF9wcmludChmaWxlLCAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOicpCi0gICAgICAgICAgICBwcmludF90Yih0YiwgbGltaXQsIGZpbGUpCi0gICAgICAgIGxpbmVzID0gZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHR5cGUodmFsdWUpLCB2YWx1ZSkKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBfcHJpbnQoZmlsZSwgbGluZSwgJycpCisgICAgZm9yIGxpbmUgaW4gX2Zvcm1hdF9leGNlcHRpb25faXRlcihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pOgorICAgICAgICBwcmludChsaW5lLCBmaWxlPWZpbGUsIGVuZD0iIikKIAogZGVmIGZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQ9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiRm9ybWF0IGEgc3RhY2sgdHJhY2UgYW5kIHRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24uCkBAIC0xNzMsMjAgKzE3OCw3IEBACiAgICAgdGhlc2UgbGluZXMgYXJlIGNvbmNhdGVuYXRlZCBhbmQgcHJpbnRlZCwgZXhhY3RseSB0aGUgc2FtZSB0ZXh0IGlzCiAgICAgcHJpbnRlZCBhcyBkb2VzIHByaW50X2V4Y2VwdGlvbigpLgogICAgICIiIgotICAgIGxpc3QgPSBbXQotICAgIGlmIGNoYWluOgotICAgICAgICB2YWx1ZXMgPSBfaXRlcl9jaGFpbih2YWx1ZSwgdGIpCi0gICAgZWxzZToKLSAgICAgICAgdmFsdWVzID0gWyh2YWx1ZSwgdGIpXQotICAgIGZvciB2YWx1ZSwgdGIgaW4gdmFsdWVzOgotICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgotICAgICAgICAgICAgbGlzdC5hcHBlbmQodmFsdWUgKyAnXG4nKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgdGI6Ci0gICAgICAgICAgICBsaXN0LmFwcGVuZCgnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJykKLSAgICAgICAgICAgIGxpc3QuZXh0ZW5kKGZvcm1hdF90Yih0YiwgbGltaXQpKQotICAgICAgICBsaXN0LmV4dGVuZChmb3JtYXRfZXhjZXB0aW9uX29ubHkodHlwZSh2YWx1ZSksIHZhbHVlKSkKLSAgICByZXR1cm4gbGlzdAorICAgIHJldHVybiBsaXN0KF9mb3JtYXRfZXhjZXB0aW9uX2l0ZXIoZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKSkKIAogZGVmIGZvcm1hdF9leGNlcHRpb25fb25seShldHlwZSwgdmFsdWUpOgogICAgICIiIkZvcm1hdCB0aGUgZXhjZXB0aW9uIHBhcnQgb2YgYSB0cmFjZWJhY2suCkBAIC0yMDQsMTAgKzE5NiwxNCBAQAogICAgIHN0cmluZyBpbiB0aGUgbGlzdC4KIAogICAgICIiIgorICAgIHJldHVybiBsaXN0KF9mb3JtYXRfZXhjZXB0aW9uX29ubHlfaXRlcihldHlwZSwgdmFsdWUpKQorCitkZWYgX2Zvcm1hdF9leGNlcHRpb25fb25seV9pdGVyKGV0eXBlLCB2YWx1ZSk6CiAgICAgIyBHcmFjZWZ1bGx5IGhhbmRsZSAodGhlIHdheSBQeXRob24gMi40IGFuZCBlYXJsaWVyIGRpZCkgdGhlIGNhc2Ugb2YKICAgICAjIGJlaW5nIGNhbGxlZCB3aXRoIChOb25lLCBOb25lKS4KICAgICBpZiBldHlwZSBpcyBOb25lOgotICAgICAgICByZXR1cm4gW19mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKV0KKyAgICAgICAgeWllbGQgX2Zvcm1hdF9maW5hbF9leGNfbGluZShldHlwZSwgdmFsdWUpCisgICAgICAgIHJldHVybgogCiAgICAgc3R5cGUgPSBldHlwZS5fX25hbWVfXwogICAgIHNtb2QgPSBldHlwZS5fX21vZHVsZV9fCkBAIC0yMTUsMjcgKzIxMSwyNyBAQAogICAgICAgICBzdHlwZSA9IHNtb2QgKyAnLicgKyBzdHlwZQogCiAgICAgaWYgbm90IGlzc3ViY2xhc3MoZXR5cGUsIFN5bnRheEVycm9yKToKLSAgICAgICAgcmV0dXJuIFtfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKHN0eXBlLCB2YWx1ZSldCisgICAgICAgIHlpZWxkIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoc3R5cGUsIHZhbHVlKQorICAgICAgICByZXR1cm4KIAogICAgICMgSXQgd2FzIGEgc3ludGF4IGVycm9yOyBzaG93IGV4YWN0bHkgd2hlcmUgdGhlIHByb2JsZW0gd2FzIGZvdW5kLgotICAgIGxpbmVzID0gW10KICAgICBmaWxlbmFtZSA9IHZhbHVlLmZpbGVuYW1lIG9yICI8c3RyaW5nPiIKICAgICBsaW5lbm8gPSBzdHIodmFsdWUubGluZW5vKSBvciAnPycKLSAgICBsaW5lcy5hcHBlbmQoJyAgRmlsZSAiJXMiLCBsaW5lICVzXG4nICUgKGZpbGVuYW1lLCBsaW5lbm8pKQorICAgIHlpZWxkICcgIEZpbGUgInt9IiwgbGluZSB7fVxuJy5mb3JtYXQoZmlsZW5hbWUsIGxpbmVubykKKwogICAgIGJhZGxpbmUgPSB2YWx1ZS50ZXh0CiAgICAgb2Zmc2V0ID0gdmFsdWUub2Zmc2V0CiAgICAgaWYgYmFkbGluZSBpcyBub3QgTm9uZToKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXNcbicgJSBiYWRsaW5lLnN0cmlwKCkpCisgICAgICAgIHlpZWxkICcgICAge31cbicuZm9ybWF0KGJhZGxpbmUuc3RyaXAoKSkKICAgICAgICAgaWYgb2Zmc2V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgY2FyZXRzcGFjZSA9IGJhZGxpbmUucnN0cmlwKCdcbicpCiAgICAgICAgICAgICBvZmZzZXQgPSBtaW4obGVuKGNhcmV0c3BhY2UpLCBvZmZzZXQpIC0gMQogICAgICAgICAgICAgY2FyZXRzcGFjZSA9IGNhcmV0c3BhY2VbOm9mZnNldF0ubHN0cmlwKCkKICAgICAgICAgICAgICMgbm9uLXNwYWNlIHdoaXRlc3BhY2UgKGxpa2VzIHRhYnMpIG11c3QgYmUga2VwdCBmb3IgYWxpZ25tZW50CiAgICAgICAgICAgICBjYXJldHNwYWNlID0gKChjLmlzc3BhY2UoKSBhbmQgYyBvciAnICcpIGZvciBjIGluIGNhcmV0c3BhY2UpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlc15cbicgJSAnJy5qb2luKGNhcmV0c3BhY2UpKQorICAgICAgICAgICAgeWllbGQgJyAgICB7fV5cbicuZm9ybWF0KCcnLmpvaW4oY2FyZXRzcGFjZSkpCiAgICAgbXNnID0gdmFsdWUubXNnIG9yICI8bm8gZGV0YWlsIGF2YWlsYWJsZT4iCi0gICAgbGluZXMuYXBwZW5kKCIlczogJXNcbiIgJSAoc3R5cGUsIG1zZykpCi0gICAgcmV0dXJuIGxpbmVzCisgICAgeWllbGQgInt9OiB7fVxuIi5mb3JtYXQoc3R5cGUsIG1zZykKIAogZGVmIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKToKICAgICB2YWx1ZXN0ciA9IF9zb21lX3N0cih2YWx1ZSkKQEAgLTI1MSwzOCArMjQ3LDM0IEBACiAgICAgZXhjZXB0OgogICAgICAgICByZXR1cm4gJzx1bnByaW50YWJsZSAlcyBvYmplY3Q+JyAlIHR5cGUodmFsdWUpLl9fbmFtZV9fCiAKLQogZGVmIHByaW50X2V4YyhsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIlNob3J0aGFuZCBmb3IgJ3ByaW50X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCksIGxpbWl0LCBmaWxlKScuIiIiCi0gICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIHRyeToKLSAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHByaW50X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgZmlsZSwgY2hhaW4pCi0gICAgZmluYWxseToKLSAgICAgICAgZXR5cGUgPSB2YWx1ZSA9IHRiID0gTm9uZQotCisgICAgcHJpbnRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQ9bGltaXQsIGZpbGU9ZmlsZSwgY2hhaW49Y2hhaW4pCiAKIGRlZiBmb3JtYXRfZXhjKGxpbWl0PU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIkxpa2UgcHJpbnRfZXhjKCkgYnV0IHJldHVybiBhIHN0cmluZy4iIiIKLSAgICB0cnk6Ci0gICAgICAgIGV0eXBlLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQotICAgICAgICByZXR1cm4gJycuam9pbigKLSAgICAgICAgICAgIGZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKSkKLSAgICBmaW5hbGx5OgotICAgICAgICBldHlwZSA9IHZhbHVlID0gdGIgPSBOb25lCi0KKyAgICByZXR1cm4gIiIuam9pbihmb3JtYXRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQ9bGltaXQsIGNoYWluPWNoYWluKSkKIAogZGVmIHByaW50X2xhc3QobGltaXQ9Tm9uZSwgZmlsZT1Ob25lLCBjaGFpbj1UcnVlKToKICAgICAiIiJUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciAncHJpbnRfZXhjZXB0aW9uKHN5cy5sYXN0X3R5cGUsCiAgICAgc3lzLmxhc3RfdmFsdWUsIHN5cy5sYXN0X3RyYWNlYmFjaywgbGltaXQsIGZpbGUpJy4iIiIKICAgICBpZiBub3QgaGFzYXR0cihzeXMsICJsYXN0X3R5cGUiKToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gbGFzdCBleGNlcHRpb24iKQotICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKICAgICBwcmludF9leGNlcHRpb24oc3lzLmxhc3RfdHlwZSwgc3lzLmxhc3RfdmFsdWUsIHN5cy5sYXN0X3RyYWNlYmFjaywKICAgICAgICAgICAgICAgICAgICAgbGltaXQsIGZpbGUsIGNoYWluKQogCisjCisjIFByaW50aW5nIGFuZCBFeHRyYWN0aW5nIFN0YWNrcy4KKyMKKworZGVmIF9leHRyYWN0X3N0YWNrX2l0ZXIoZiwgbGltaXQ9Tm9uZSk6CisgICAgcmV0dXJuIF9leHRyYWN0X3RiX29yX3N0YWNrX2l0ZXIoCisgICAgICAgICAgICAgICAgZiwgbGltaXQsIGxhbWJkYSBmOiAoZiwgZi5mX2xpbmVubywgZi5mX2JhY2spKQorCitkZWYgX2dldF9zdGFjayhmKToKKyAgICBpZiBmIGlzIE5vbmU6CisgICAgICAgIGYgPSBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfYmFjaworICAgIHJldHVybiBmCiAKIGRlZiBwcmludF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSk6CiAgICAgIiIiUHJpbnQgYSBzdGFjayB0cmFjZSBmcm9tIGl0cyBpbnZvY2F0aW9uIHBvaW50LgpAQCAtMjkxLDIxICsyODMsMTEgQEAKICAgICBzdGFjayBmcmFtZSBhdCB3aGljaCB0byBzdGFydC4gVGhlIG9wdGlvbmFsICdsaW1pdCcgYW5kICdmaWxlJwogICAgIGFyZ3VtZW50cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHByaW50X2V4Y2VwdGlvbigpLgogICAgICIiIgotICAgIGlmIGYgaXMgTm9uZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgZiA9IHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawotICAgIHByaW50X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCksIGZpbGUpCisgICAgcHJpbnRfbGlzdChleHRyYWN0X3N0YWNrKF9nZXRfc3RhY2soZiksIGxpbWl0PWxpbWl0KSwgZmlsZT1maWxlKQogCiBkZWYgZm9ybWF0X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiU2hvcnRoYW5kIGZvciAnZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpJy4iIiIKLSAgICBpZiBmIGlzIE5vbmU6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGYgPSBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLSAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpCisgICAgcmV0dXJuIGZvcm1hdF9saXN0KGV4dHJhY3Rfc3RhY2soX2dldF9zdGFjayhmKSwgbGltaXQ9bGltaXQpKQogCiBkZWYgZXh0cmFjdF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUpOgogICAgICIiIkV4dHJhY3QgdGhlIHJhdyB0cmFjZWJhY2sgZnJvbSB0aGUgY3VycmVudCBzdGFjayBmcmFtZS4KQEAgLTMxNiwyNyArMjk4LDE2IEBACiAgICAgbGluZSBudW1iZXIsIGZ1bmN0aW9uIG5hbWUsIHRleHQpLCBhbmQgdGhlIGVudHJpZXMgYXJlIGluIG9yZGVyCiAgICAgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0IHN0YWNrIGZyYW1lLgogICAgICIiIgotICAgIGlmIGYgaXMgTm9uZToKKyAgICBzdGFjayA9IGxpc3QoX2V4dHJhY3Rfc3RhY2tfaXRlcihfZ2V0X3N0YWNrKGYpLCBsaW1pdD1saW1pdCkpCisgICAgc3RhY2sucmV2ZXJzZSgpCisgICAgcmV0dXJuIHN0YWNrCisKK2RlZiBjbGVhcl9mcmFtZXModGIpOgorICAgICJDbGVhciBhbGwgcmVmZXJlbmNlcyB0byBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIGZyYW1lcyBvZiBhIHRyYWNlYmFjay4iCisgICAgd2hpbGUgdGIgaXMgbm90IE5vbmU6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGYgPSBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLSAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0Jyk6Ci0gICAgICAgICAgICBsaW1pdCA9IHN5cy50cmFjZWJhY2tsaW1pdAotICAgIGxpc3QgPSBbXQotICAgIG4gPSAwCi0gICAgd2hpbGUgZiBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgbGluZW5vID0gZi5mX2xpbmVubwotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLSAgICAgICAgaWYgbGluZTogbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICBlbHNlOiBsaW5lID0gTm9uZQotICAgICAgICBsaXN0LmFwcGVuZCgoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkpCi0gICAgICAgIGYgPSBmLmZfYmFjawotICAgICAgICBuID0gbisxCi0gICAgbGlzdC5yZXZlcnNlKCkKLSAgICByZXR1cm4gbGlzdAorICAgICAgICAgICAgdGIudGJfZnJhbWUuY2xlYXIoKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgIyBJZ25vcmUgdGhlIGV4Y2VwdGlvbiByYWlzZWQgaWYgdGhlIGZyYW1lIGlzIHN0aWxsIGV4ZWN1dGluZy4KKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CmRpZmYgLS1naXQgYS9MaWIvdHJhY2VtYWxsb2MucHkgYi9MaWIvdHJhY2VtYWxsb2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA3NTk0NgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90cmFjZW1hbGxvYy5weQpAQCAtMCwwICsxLDQ2MyBAQAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2VxdWVuY2UKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB0b3RhbF9vcmRlcmluZworaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcGlja2xlCisKKyMgSW1wb3J0IHR5cGVzIGFuZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gQworZnJvbSBfdHJhY2VtYWxsb2MgaW1wb3J0ICoKK2Zyb20gX3RyYWNlbWFsbG9jIGltcG9ydCBfZ2V0X29iamVjdF90cmFjZWJhY2ssIF9nZXRfdHJhY2VzCisKKworZGVmIF9mb3JtYXRfc2l6ZShzaXplLCBzaWduKToKKyAgICBmb3IgdW5pdCBpbiAoJ0InLCAnS2lCJywgJ01pQicsICdHaUInLCAnVGlCJyk6CisgICAgICAgIGlmIGFicyhzaXplKSA8IDEwMCBhbmQgdW5pdCAhPSAnQic6CisgICAgICAgICAgICAjIDMgZGlnaXRzICh4eC54IFVOSVQpCisgICAgICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgICAgIHJldHVybiAiJSsuMWYgJXMiICUgKHNpemUsIHVuaXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAiJS4xZiAlcyIgJSAoc2l6ZSwgdW5pdCkKKyAgICAgICAgaWYgYWJzKHNpemUpIDwgMTAgKiAxMDI0IG9yIHVuaXQgPT0gJ1RpQic6CisgICAgICAgICAgICAjIDQgb3IgNSBkaWdpdHMgKHh4eHggVU5JVCkKKyAgICAgICAgICAgIGlmIHNpZ246CisgICAgICAgICAgICAgICAgcmV0dXJuICIlKy4wZiAlcyIgJSAoc2l6ZSwgdW5pdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlLjBmICVzIiAlIChzaXplLCB1bml0KQorICAgICAgICBzaXplIC89IDEwMjQKKworCitjbGFzcyBTdGF0aXN0aWM6CisgICAgIiIiCisgICAgU3RhdGlzdGljIGRpZmZlcmVuY2Ugb24gbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gdHdvIFNuYXBzaG90IGluc3RhbmNlLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCd0cmFjZWJhY2snLCAnc2l6ZScsICdjb3VudCcpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2ViYWNrLCBzaXplLCBjb3VudCk6CisgICAgICAgIHNlbGYudHJhY2ViYWNrID0gdHJhY2ViYWNrCisgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKKyAgICAgICAgc2VsZi5jb3VudCA9IGNvdW50CisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKChzZWxmLnRyYWNlYmFjaywgc2VsZi5zaXplLCBzZWxmLmNvdW50KSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYudHJhY2ViYWNrID09IG90aGVyLnRyYWNlYmFjaworICAgICAgICAgICAgICAgIGFuZCBzZWxmLnNpemUgPT0gb3RoZXIuc2l6ZQorICAgICAgICAgICAgICAgIGFuZCBzZWxmLmNvdW50ID09IG90aGVyLmNvdW50KQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHRleHQgPSAoIiVzOiBzaXplPSVzLCBjb3VudD0laSIKKyAgICAgICAgICAgICAgICAgJSAoc2VsZi50cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgIF9mb3JtYXRfc2l6ZShzZWxmLnNpemUsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCkpCisgICAgICAgIGlmIHNlbGYuY291bnQ6CisgICAgICAgICAgICBhdmVyYWdlID0gc2VsZi5zaXplIC8gc2VsZi5jb3VudAorICAgICAgICAgICAgdGV4dCArPSAiLCBhdmVyYWdlPSVzIiAlIF9mb3JtYXRfc2l6ZShhdmVyYWdlLCBGYWxzZSkKKyAgICAgICAgcmV0dXJuIHRleHQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgnPFN0YXRpc3RpYyB0cmFjZWJhY2s9JXIgc2l6ZT0laSBjb3VudD0laT4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi50cmFjZWJhY2ssIHNlbGYuc2l6ZSwgc2VsZi5jb3VudCkpCisKKyAgICBkZWYgX3NvcnRfa2V5KHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuc2l6ZSwgc2VsZi5jb3VudCwgc2VsZi50cmFjZWJhY2spCisKKworY2xhc3MgU3RhdGlzdGljRGlmZjoKKyAgICAiIiIKKyAgICBTdGF0aXN0aWMgZGlmZmVyZW5jZSBvbiBtZW1vcnkgYWxsb2NhdGlvbnMgYmV0d2VlbiBhbiBvbGQgYW5kIGEgbmV3CisgICAgU25hcHNob3QgaW5zdGFuY2UuCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCd0cmFjZWJhY2snLCAnc2l6ZScsICdzaXplX2RpZmYnLCAnY291bnQnLCAnY291bnRfZGlmZicpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2ViYWNrLCBzaXplLCBzaXplX2RpZmYsIGNvdW50LCBjb3VudF9kaWZmKToKKyAgICAgICAgc2VsZi50cmFjZWJhY2sgPSB0cmFjZWJhY2sKKyAgICAgICAgc2VsZi5zaXplID0gc2l6ZQorICAgICAgICBzZWxmLnNpemVfZGlmZiA9IHNpemVfZGlmZgorICAgICAgICBzZWxmLmNvdW50ID0gY291bnQKKyAgICAgICAgc2VsZi5jb3VudF9kaWZmID0gY291bnRfZGlmZgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaCgoc2VsZi50cmFjZWJhY2ssIHNlbGYuc2l6ZSwgc2VsZi5zaXplX2RpZmYsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50LCBzZWxmLmNvdW50X2RpZmYpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi50cmFjZWJhY2sgPT0gb3RoZXIudHJhY2ViYWNrCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuc2l6ZSA9PSBvdGhlci5zaXplCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuc2l6ZV9kaWZmID09IG90aGVyLnNpemVfZGlmZgorICAgICAgICAgICAgICAgIGFuZCBzZWxmLmNvdW50ID09IG90aGVyLmNvdW50CisgICAgICAgICAgICAgICAgYW5kIHNlbGYuY291bnRfZGlmZiA9PSBvdGhlci5jb3VudF9kaWZmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHRleHQgPSAoIiVzOiBzaXplPSVzICglcyksIGNvdW50PSVpICglK2kpIgorICAgICAgICAgICAgICAgICUgKHNlbGYudHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgIF9mb3JtYXRfc2l6ZShzZWxmLnNpemUsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICBfZm9ybWF0X3NpemUoc2VsZi5zaXplX2RpZmYsIFRydWUpLAorICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQsCisgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudF9kaWZmKSkKKyAgICAgICAgaWYgc2VsZi5jb3VudDoKKyAgICAgICAgICAgIGF2ZXJhZ2UgPSBzZWxmLnNpemUgLyBzZWxmLmNvdW50CisgICAgICAgICAgICB0ZXh0ICs9ICIsIGF2ZXJhZ2U9JXMiICUgX2Zvcm1hdF9zaXplKGF2ZXJhZ2UsIEZhbHNlKQorICAgICAgICByZXR1cm4gdGV4dAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCc8U3RhdGlzdGljRGlmZiB0cmFjZWJhY2s9JXIgc2l6ZT0laSAoJStpKSBjb3VudD0laSAoJStpKT4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi50cmFjZWJhY2ssIHNlbGYuc2l6ZSwgc2VsZi5zaXplX2RpZmYsCisgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCwgc2VsZi5jb3VudF9kaWZmKSkKKworICAgIGRlZiBfc29ydF9rZXkoc2VsZik6CisgICAgICAgIHJldHVybiAoYWJzKHNlbGYuc2l6ZV9kaWZmKSwgc2VsZi5zaXplLAorICAgICAgICAgICAgICAgIGFicyhzZWxmLmNvdW50X2RpZmYpLCBzZWxmLmNvdW50LAorICAgICAgICAgICAgICAgIHNlbGYudHJhY2ViYWNrKQorCisKK2RlZiBfY29tcGFyZV9ncm91cGVkX3N0YXRzKG9sZF9ncm91cCwgbmV3X2dyb3VwKToKKyAgICBzdGF0aXN0aWNzID0gW10KKyAgICBmb3IgdHJhY2ViYWNrLCBzdGF0IGluIG5ld19ncm91cC5pdGVtcygpOgorICAgICAgICBwcmV2aW91cyA9IG9sZF9ncm91cC5wb3AodHJhY2ViYWNrLCBOb25lKQorICAgICAgICBpZiBwcmV2aW91cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0YXQgPSBTdGF0aXN0aWNEaWZmKHRyYWNlYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUsIHN0YXQuc2l6ZSAtIHByZXZpb3VzLnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5jb3VudCwgc3RhdC5jb3VudCAtIHByZXZpb3VzLmNvdW50KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdCA9IFN0YXRpc3RpY0RpZmYodHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSwgc3RhdC5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuY291bnQsIHN0YXQuY291bnQpCisgICAgICAgIHN0YXRpc3RpY3MuYXBwZW5kKHN0YXQpCisKKyAgICBmb3IgdHJhY2ViYWNrLCBzdGF0IGluIG9sZF9ncm91cC5pdGVtcygpOgorICAgICAgICBzdGF0ID0gU3RhdGlzdGljRGlmZih0cmFjZWJhY2ssIDAsIC1zdGF0LnNpemUsIDAsIC1zdGF0LmNvdW50KQorICAgICAgICBzdGF0aXN0aWNzLmFwcGVuZChzdGF0KQorICAgIHJldHVybiBzdGF0aXN0aWNzCisKKworQHRvdGFsX29yZGVyaW5nCitjbGFzcyBGcmFtZToKKyAgICAiIiIKKyAgICBGcmFtZSBvZiBhIHRyYWNlYmFjay4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoIl9mcmFtZSIsKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgc2VsZi5fZnJhbWUgPSBmcmFtZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZnJhbWVbMF0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsaW5lbm8oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9mcmFtZVsxXQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWUgPT0gb3RoZXIuX2ZyYW1lKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWUgPCBvdGhlci5fZnJhbWUpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2ZyYW1lKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXM6JXMiICUgKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZW5vKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxGcmFtZSBmaWxlbmFtZT0lciBsaW5lbm89JXI+IiAlIChzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVubykKKworCitAdG90YWxfb3JkZXJpbmcKK2NsYXNzIFRyYWNlYmFjayhTZXF1ZW5jZSk6CisgICAgIiIiCisgICAgU2VxdWVuY2Ugb2YgRnJhbWUgaW5zdGFuY2VzIHNvcnRlZCBmcm9tIHRoZSBtb3N0IHJlY2VudCBmcmFtZQorICAgIHRvIHRoZSBvbGRlc3QgZnJhbWUuCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCJfZnJhbWVzIiwpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWVzKToKKyAgICAgICAgU2VxdWVuY2UuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fZnJhbWVzID0gZnJhbWVzCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9mcmFtZXMpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGluZGV4LCBzbGljZSk6CisgICAgICAgICAgICByZXR1cm4gdHVwbGUoRnJhbWUodHJhY2UpIGZvciB0cmFjZSBpbiBzZWxmLl9mcmFtZXNbaW5kZXhdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1lKHNlbGYuX2ZyYW1lc1tpbmRleF0pCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgcmV0dXJuIGZyYW1lLl9mcmFtZSBpbiBzZWxmLl9mcmFtZXMKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fZnJhbWVzKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWVzID09IG90aGVyLl9mcmFtZXMpCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9mcmFtZXMgPCBvdGhlci5fZnJhbWVzKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZlswXSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8VHJhY2ViYWNrICVyPiIgJSAodHVwbGUoc2VsZiksKQorCisKK2RlZiBnZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopOgorICAgICIiIgorICAgIEdldCB0aGUgdHJhY2ViYWNrIHdoZXJlIHRoZSBQeXRob24gb2JqZWN0ICpvYmoqIHdhcyBhbGxvY2F0ZWQuCisgICAgUmV0dXJuIGEgVHJhY2ViYWNrIGluc3RhbmNlLgorCisgICAgUmV0dXJuIE5vbmUgaWYgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyBub3QgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IKKyAgICBkaWQgbm90IHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBvYmplY3QuCisgICAgIiIiCisgICAgZnJhbWVzID0gX2dldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICBpZiBmcmFtZXMgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBUcmFjZWJhY2soZnJhbWVzKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgVHJhY2U6CisgICAgIiIiCisgICAgVHJhY2Ugb2YgYSBtZW1vcnkgYmxvY2suCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCJfdHJhY2UiLCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZSk6CisgICAgICAgIHNlbGYuX3RyYWNlID0gdHJhY2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhY2VbMF0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0cmFjZWJhY2soc2VsZik6CisgICAgICAgIHJldHVybiBUcmFjZWJhY2soc2VsZi5fdHJhY2VbMV0pCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl90cmFjZSA9PSBvdGhlci5fdHJhY2UpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX3RyYWNlKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXM6ICVzIiAlIChzZWxmLnRyYWNlYmFjaywgX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZSwgRmFsc2UpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCI8VHJhY2Ugc2l6ZT0lcywgdHJhY2ViYWNrPSVyPiIKKyAgICAgICAgICAgICAgICAlIChfZm9ybWF0X3NpemUoc2VsZi5zaXplLCBGYWxzZSksIHNlbGYudHJhY2ViYWNrKSkKKworCitjbGFzcyBfVHJhY2VzKFNlcXVlbmNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2VzKToKKyAgICAgICAgU2VxdWVuY2UuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fdHJhY2VzID0gdHJhY2VzCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl90cmFjZXMpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGluZGV4LCBzbGljZSk6CisgICAgICAgICAgICByZXR1cm4gdHVwbGUoVHJhY2UodHJhY2UpIGZvciB0cmFjZSBpbiBzZWxmLl90cmFjZXNbaW5kZXhdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRyYWNlKHNlbGYuX3RyYWNlc1tpbmRleF0pCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHRyYWNlKToKKyAgICAgICAgcmV0dXJuIHRyYWNlLl90cmFjZSBpbiBzZWxmLl90cmFjZXMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYuX3RyYWNlcyA9PSBvdGhlci5fdHJhY2VzKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxUcmFjZXMgbGVuPSVzPiIgJSBsZW4oc2VsZikKKworCitkZWYgX25vcm1hbGl6ZV9maWxlbmFtZShmaWxlbmFtZSk6CisgICAgZmlsZW5hbWUgPSBvcy5wYXRoLm5vcm1jYXNlKGZpbGVuYW1lKQorICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCgnLnB5YycsICcucHlvJykpOgorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lWzotMV0KKyAgICByZXR1cm4gZmlsZW5hbWUKKworCitjbGFzcyBGaWx0ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluY2x1c2l2ZSwgZmlsZW5hbWVfcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgbGluZW5vPU5vbmUsIGFsbF9mcmFtZXM9RmFsc2UpOgorICAgICAgICBzZWxmLmluY2x1c2l2ZSA9IGluY2x1c2l2ZQorICAgICAgICBzZWxmLl9maWxlbmFtZV9wYXR0ZXJuID0gX25vcm1hbGl6ZV9maWxlbmFtZShmaWxlbmFtZV9wYXR0ZXJuKQorICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworICAgICAgICBzZWxmLmFsbF9mcmFtZXMgPSBhbGxfZnJhbWVzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZmlsZW5hbWVfcGF0dGVybihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVuYW1lX3BhdHRlcm4KKworICAgIGRlZiBfX21hdGNoX2ZyYW1lKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pOgorICAgICAgICBmaWxlbmFtZSA9IF9ub3JtYWxpemVfZmlsZW5hbWUoZmlsZW5hbWUpCisgICAgICAgIGlmIG5vdCBmbm1hdGNoLmZubWF0Y2goZmlsZW5hbWUsIHNlbGYuX2ZpbGVuYW1lX3BhdHRlcm4pOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHNlbGYubGluZW5vIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIChsaW5lbm8gPT0gc2VsZi5saW5lbm8pCisKKyAgICBkZWYgX21hdGNoX2ZyYW1lKHNlbGYsIGZpbGVuYW1lLCBsaW5lbm8pOgorICAgICAgICByZXR1cm4gc2VsZi5fX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCBsaW5lbm8pIF4gKG5vdCBzZWxmLmluY2x1c2l2ZSkKKworICAgIGRlZiBfbWF0Y2hfdHJhY2ViYWNrKHNlbGYsIHRyYWNlYmFjayk6CisgICAgICAgIGlmIHNlbGYuYWxsX2ZyYW1lczoKKyAgICAgICAgICAgIGlmIGFueShzZWxmLl9fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgICAgICAgICAgICBmb3IgZmlsZW5hbWUsIGxpbmVubyBpbiB0cmFjZWJhY2spOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmluY2x1c2l2ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gKG5vdCBzZWxmLmluY2x1c2l2ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8gPSB0cmFjZWJhY2tbMF0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9tYXRjaF9mcmFtZShmaWxlbmFtZSwgbGluZW5vKQorCisKK2NsYXNzIFNuYXBzaG90OgorICAgICIiIgorICAgIFNuYXBzaG90IG9mIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2VzLCB0cmFjZWJhY2tfbGltaXQpOgorICAgICAgICBzZWxmLnRyYWNlcyA9IF9UcmFjZXModHJhY2VzKQorICAgICAgICBzZWxmLnRyYWNlYmFja19saW1pdCA9IHRyYWNlYmFja19saW1pdAorCisgICAgZGVmIGR1bXAoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgV3JpdGUgdGhlIHNuYXBzaG90IGludG8gYSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIHBpY2tsZS5kdW1wKHNlbGYsIGZwLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbG9hZChmaWxlbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBMb2FkIGEgc25hcHNob3QgZnJvbSBhIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkKGZwKQorCisgICAgZGVmIF9maWx0ZXJfdHJhY2Uoc2VsZiwgaW5jbHVkZV9maWx0ZXJzLCBleGNsdWRlX2ZpbHRlcnMsIHRyYWNlKToKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VbMV0KKyAgICAgICAgaWYgaW5jbHVkZV9maWx0ZXJzOgorICAgICAgICAgICAgaWYgbm90IGFueSh0cmFjZV9maWx0ZXIuX21hdGNoX3RyYWNlYmFjayh0cmFjZWJhY2spCisgICAgICAgICAgICAgICAgICAgICAgIGZvciB0cmFjZV9maWx0ZXIgaW4gaW5jbHVkZV9maWx0ZXJzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgZXhjbHVkZV9maWx0ZXJzOgorICAgICAgICAgICAgaWYgYW55KG5vdCB0cmFjZV9maWx0ZXIuX21hdGNoX3RyYWNlYmFjayh0cmFjZWJhY2spCisgICAgICAgICAgICAgICAgICAgZm9yIHRyYWNlX2ZpbHRlciBpbiBleGNsdWRlX2ZpbHRlcnMpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGZpbHRlcl90cmFjZXMoc2VsZiwgZmlsdGVycyk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgYSBuZXcgU25hcHNob3QgaW5zdGFuY2Ugd2l0aCBhIGZpbHRlcmVkIHRyYWNlcyBzZXF1ZW5jZSwgZmlsdGVycworICAgICAgICBpcyBhIGxpc3Qgb2YgRmlsdGVyIGluc3RhbmNlcy4gIElmIGZpbHRlcnMgaXMgYW4gZW1wdHkgbGlzdCwgcmV0dXJuIGEKKyAgICAgICAgbmV3IFNuYXBzaG90IGluc3RhbmNlIHdpdGggYSBjb3B5IG9mIHRoZSB0cmFjZXMuCisgICAgICAgICIiIgorICAgICAgICBpZiBmaWx0ZXJzOgorICAgICAgICAgICAgaW5jbHVkZV9maWx0ZXJzID0gW10KKyAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVycyA9IFtdCisgICAgICAgICAgICBmb3IgdHJhY2VfZmlsdGVyIGluIGZpbHRlcnM6CisgICAgICAgICAgICAgICAgaWYgdHJhY2VfZmlsdGVyLmluY2x1c2l2ZToKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9maWx0ZXJzLmFwcGVuZCh0cmFjZV9maWx0ZXIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXJzLmFwcGVuZCh0cmFjZV9maWx0ZXIpCisgICAgICAgICAgICBuZXdfdHJhY2VzID0gW3RyYWNlIGZvciB0cmFjZSBpbiBzZWxmLnRyYWNlcy5fdHJhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2ZpbHRlcl90cmFjZShpbmNsdWRlX2ZpbHRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZSldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXdfdHJhY2VzID0gc2VsZi50cmFjZXMuX3RyYWNlcy5jb3B5KCkKKyAgICAgICAgcmV0dXJuIFNuYXBzaG90KG5ld190cmFjZXMsIHNlbGYudHJhY2ViYWNrX2xpbWl0KQorCisgICAgZGVmIF9ncm91cF9ieShzZWxmLCBrZXlfdHlwZSwgY3VtdWxhdGl2ZSk6CisgICAgICAgIGlmIGtleV90eXBlIG5vdCBpbiAoJ3RyYWNlYmFjaycsICdmaWxlbmFtZScsICdsaW5lbm8nKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24ga2V5X3R5cGU6ICVyIiAlIChrZXlfdHlwZSwpKQorICAgICAgICBpZiBjdW11bGF0aXZlIGFuZCBrZXlfdHlwZSBub3QgaW4gKCdsaW5lbm8nLCAnZmlsZW5hbWUnKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImN1bXVsYXRpdmUgbW9kZSBjYW5ub3QgYnkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGtleSB0eXBlICVyIiAlIGtleV90eXBlKQorCisgICAgICAgIHN0YXRzID0ge30KKyAgICAgICAgdHJhY2ViYWNrcyA9IHt9CisgICAgICAgIGlmIG5vdCBjdW11bGF0aXZlOgorICAgICAgICAgICAgZm9yIHRyYWNlIGluIHNlbGYudHJhY2VzLl90cmFjZXM6CisgICAgICAgICAgICAgICAgc2l6ZSwgdHJhY2VfdHJhY2ViYWNrID0gdHJhY2UKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja3NbdHJhY2VfdHJhY2ViYWNrXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5X3R5cGUgPT0gJ3RyYWNlYmFjayc6CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSB0cmFjZV90cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXlfdHlwZSA9PSAnbGluZW5vJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyA9IHRyYWNlX3RyYWNlYmFja1s6MV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZTogIyBrZXlfdHlwZSA9PSAnZmlsZW5hbWUnOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gKCh0cmFjZV90cmFjZWJhY2tbMF1bMF0sIDApLCkKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gVHJhY2ViYWNrKGZyYW1lcykKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrc1t0cmFjZV90cmFjZWJhY2tdID0gdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdGF0ID0gc3RhdHNbdHJhY2ViYWNrXQorICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUgKz0gc2l6ZQorICAgICAgICAgICAgICAgICAgICBzdGF0LmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHN0YXRzW3RyYWNlYmFja10gPSBTdGF0aXN0aWModHJhY2ViYWNrLCBzaXplLCAxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjdW11bGF0aXZlIHN0YXRpc3RpY3MKKyAgICAgICAgICAgIGZvciB0cmFjZSBpbiBzZWxmLnRyYWNlcy5fdHJhY2VzOgorICAgICAgICAgICAgICAgIHNpemUsIHRyYWNlX3RyYWNlYmFjayA9IHRyYWNlCisgICAgICAgICAgICAgICAgZm9yIGZyYW1lIGluIHRyYWNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gdHJhY2ViYWNrc1tmcmFtZV0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5X3R5cGUgPT0gJ2xpbmVubyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gKGZyYW1lLCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6ICMga2V5X3R5cGUgPT0gJ2ZpbGVuYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSAoKGZyYW1lWzBdLCAwKSwpCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sgPSBUcmFjZWJhY2soZnJhbWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrc1tmcmFtZV0gPSB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdCA9IHN0YXRzW3RyYWNlYmFja10KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSArPSBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHNbdHJhY2ViYWNrXSA9IFN0YXRpc3RpYyh0cmFjZWJhY2ssIHNpemUsIDEpCisgICAgICAgIHJldHVybiBzdGF0cworCisgICAgZGVmIHN0YXRpc3RpY3Moc2VsZiwga2V5X3R5cGUsIGN1bXVsYXRpdmU9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgR3JvdXAgc3RhdGlzdGljcyBieSBrZXlfdHlwZS4gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgU3RhdGlzdGljCisgICAgICAgIGluc3RhbmNlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGdyb3VwZWQgPSBzZWxmLl9ncm91cF9ieShrZXlfdHlwZSwgY3VtdWxhdGl2ZSkKKyAgICAgICAgc3RhdGlzdGljcyA9IGxpc3QoZ3JvdXBlZC52YWx1ZXMoKSkKKyAgICAgICAgc3RhdGlzdGljcy5zb3J0KHJldmVyc2U9VHJ1ZSwga2V5PVN0YXRpc3RpYy5fc29ydF9rZXkpCisgICAgICAgIHJldHVybiBzdGF0aXN0aWNzCisKKyAgICBkZWYgY29tcGFyZV90byhzZWxmLCBvbGRfc25hcHNob3QsIGtleV90eXBlLCBjdW11bGF0aXZlPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIHdpdGggYW4gb2xkIHNuYXBzaG90IG9sZF9zbmFwc2hvdC4gR2V0CisgICAgICAgIHN0YXRpc3RpY3MgYXMgYSBzb3J0ZWQgbGlzdCBvZiBTdGF0aXN0aWNEaWZmIGluc3RhbmNlcywgZ3JvdXBlZCBieQorICAgICAgICBncm91cF9ieS4KKyAgICAgICAgIiIiCisgICAgICAgIG5ld19ncm91cCA9IHNlbGYuX2dyb3VwX2J5KGtleV90eXBlLCBjdW11bGF0aXZlKQorICAgICAgICBvbGRfZ3JvdXAgPSBvbGRfc25hcHNob3QuX2dyb3VwX2J5KGtleV90eXBlLCBjdW11bGF0aXZlKQorICAgICAgICBzdGF0aXN0aWNzID0gX2NvbXBhcmVfZ3JvdXBlZF9zdGF0cyhvbGRfZ3JvdXAsIG5ld19ncm91cCkKKyAgICAgICAgc3RhdGlzdGljcy5zb3J0KHJldmVyc2U9VHJ1ZSwga2V5PVN0YXRpc3RpY0RpZmYuX3NvcnRfa2V5KQorICAgICAgICByZXR1cm4gc3RhdGlzdGljcworCisKK2RlZiB0YWtlX3NuYXBzaG90KCk6CisgICAgIiIiCisgICAgVGFrZSBhIHNuYXBzaG90IG9mIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uCisgICAgIiIiCisgICAgaWYgbm90IGlzX3RyYWNpbmcoKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbG9jYXRpb25zIHRvIHRha2UgYSBzbmFwc2hvdCIpCisgICAgdHJhY2VzID0gX2dldF90cmFjZXMoKQorICAgIHRyYWNlYmFja19saW1pdCA9IGdldF90cmFjZWJhY2tfbGltaXQoKQorICAgIHJldHVybiBTbmFwc2hvdCh0cmFjZXMsIHRyYWNlYmFja19saW1pdCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGUucHkgYi9MaWIvdHVydGxlLnB5CmluZGV4IGM2ZWJmYTUuLmFiN2I2YmEgMTAwNjQ0Ci0tLSBhL0xpYi90dXJ0bGUucHkKKysrIGIvTGliL3R1cnRsZS5weQpAQCAtMzg0MywxOCArMzg0MywxOCBAQAogICAgICAgICBrZXkgPSAiVHVydGxlLiIrbWV0aG9kbmFtZQogICAgICAgICBkb2NzZGljdFtrZXldID0gZXZhbChrZXkpLl9fZG9jX18KIAotICAgIGYgPSBvcGVuKCIlcy5weSIgJSBmaWxlbmFtZSwidyIpCi0gICAga2V5cyA9IHNvcnRlZChbeCBmb3IgeCBpbiBkb2NzZGljdC5rZXlzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHguc3BsaXQoJy4nKVsxXSBub3QgaW4gX2FsaWFzX2xpc3RdKQotICAgIGYud3JpdGUoJ2RvY3NkaWN0ID0ge1xuXG4nKQotICAgIGZvciBrZXkgaW4ga2V5c1s6LTFdOgorICAgIHdpdGggb3BlbigiJXMucHkiICUgZmlsZW5hbWUsInciKSBhcyBmOgorICAgICAgICBrZXlzID0gc29ydGVkKFt4IGZvciB4IGluIGRvY3NkaWN0LmtleXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHguc3BsaXQoJy4nKVsxXSBub3QgaW4gX2FsaWFzX2xpc3RdKQorICAgICAgICBmLndyaXRlKCdkb2NzZGljdCA9IHtcblxuJykKKyAgICAgICAgZm9yIGtleSBpbiBrZXlzWzotMV06CisgICAgICAgICAgICBmLndyaXRlKCclcyA6XG4nICUgcmVwcihrZXkpKQorICAgICAgICAgICAgZi53cml0ZSgnICAgICAgICAiIiIlc1xuIiIiLFxuXG4nICUgZG9jc2RpY3Rba2V5XSkKKyAgICAgICAga2V5ID0ga2V5c1stMV0KICAgICAgICAgZi53cml0ZSgnJXMgOlxuJyAlIHJlcHIoa2V5KSkKLSAgICAgICAgZi53cml0ZSgnICAgICAgICAiIiIlc1xuIiIiLFxuXG4nICUgZG9jc2RpY3Rba2V5XSkKLSAgICBrZXkgPSBrZXlzWy0xXQotICAgIGYud3JpdGUoJyVzIDpcbicgJSByZXByKGtleSkpCi0gICAgZi53cml0ZSgnICAgICAgICAiIiIlc1xuIiIiXG5cbicgJSBkb2NzZGljdFtrZXldKQotICAgIGYud3JpdGUoIn1cbiIpCi0gICAgZi5jbG9zZSgpCisgICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIlxuXG4nICUgZG9jc2RpY3Rba2V5XSkKKyAgICAgICAgZi53cml0ZSgifVxuIikKKyAgICAgICAgZi5jbG9zZSgpCiAKIGRlZiByZWFkX2RvY3N0cmluZ3MobGFuZyk6CiAgICAgIiIiUmVhZCBpbiBkb2NzdHJpbmdzIGZyb20gbGFuZy1zcGVjaWZpYyBkb2NzdHJpbmcgZGljdGlvbmFyeS4KZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5IGIvTGliL3R1cnRsZWRlbW8vX19tYWluX18ucHkKaW5kZXggY2JmM2FlYi4uYTE0Njg0YyAxMDA3NTUKLS0tIGEvTGliL3R1cnRsZWRlbW8vX19tYWluX18ucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vX19tYWluX18ucHkKQEAgLTYsNyArNiw3IEBACiBmcm9tIGlkbGVsaWIuUGVyY29sYXRvciBpbXBvcnQgUGVyY29sYXRvcgogZnJvbSBpZGxlbGliLkNvbG9yRGVsZWdhdG9yIGltcG9ydCBDb2xvckRlbGVnYXRvcgogZnJvbSBpZGxlbGliLnRleHRWaWV3IGltcG9ydCB2aWV3X2ZpbGUgIyBUZXh0Vmlld2VyCi1mcm9tIGltcCBpbXBvcnQgcmVsb2FkCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgcmVsb2FkCiAKIGltcG9ydCB0dXJ0bGUKIGltcG9ydCB0aW1lCmRpZmYgLS1naXQgYS9MaWIvdHlwZXMucHkgYi9MaWIvdHlwZXMucHkKaW5kZXggY2ZkMDllYS4uN2U0ZmVjMiAxMDA2NDQKLS0tIGEvTGliL3R5cGVzLnB5CisrKyBiL0xpYi90eXBlcy5weQpAQCAtOTksMyArOTksNjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIGEgKG5vbi1zdHJpY3QpIHN1YmNsYXNzICIKICAgICAgICAgICAgICAgICAgICAgICAgICJvZiB0aGUgbWV0YWNsYXNzZXMgb2YgYWxsIGl0cyBiYXNlcyIpCiAgICAgcmV0dXJuIHdpbm5lcgorCitjbGFzcyBEeW5hbWljQ2xhc3NBdHRyaWJ1dGU6CisgICAgIiIiUm91dGUgYXR0cmlidXRlIGFjY2VzcyBvbiBhIGNsYXNzIHRvIF9fZ2V0YXR0cl9fLgorCisgICAgVGhpcyBpcyBhIGRlc2NyaXB0b3IsIHVzZWQgdG8gZGVmaW5lIGF0dHJpYnV0ZXMgdGhhdCBhY3QgZGlmZmVyZW50bHkgd2hlbgorICAgIGFjY2Vzc2VkIHRocm91Z2ggYW4gaW5zdGFuY2UgYW5kIHRocm91Z2ggYSBjbGFzcy4gIEluc3RhbmNlIGFjY2VzcyByZW1haW5zCisgICAgbm9ybWFsLCBidXQgYWNjZXNzIHRvIGFuIGF0dHJpYnV0ZSB0aHJvdWdoIGEgY2xhc3Mgd2lsbCBiZSByb3V0ZWQgdG8gdGhlCisgICAgY2xhc3MncyBfX2dldGF0dHJfXyBtZXRob2Q7IHRoaXMgaXMgZG9uZSBieSByYWlzaW5nIEF0dHJpYnV0ZUVycm9yLgorCisgICAgVGhpcyBhbGxvd3Mgb25lIHRvIGhhdmUgcHJvcGVydGllcyBhY3RpdmUgb24gYW4gaW5zdGFuY2UsIGFuZCBoYXZlIHZpcnR1YWwKKyAgICBhdHRyaWJ1dGVzIG9uIHRoZSBjbGFzcyB3aXRoIHRoZSBzYW1lIG5hbWUgKHNlZSBFbnVtIGZvciBhbiBleGFtcGxlKS4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZ2V0PU5vbmUsIGZzZXQ9Tm9uZSwgZmRlbD1Ob25lLCBkb2M9Tm9uZSk6CisgICAgICAgIHNlbGYuZmdldCA9IGZnZXQKKyAgICAgICAgc2VsZi5mc2V0ID0gZnNldAorICAgICAgICBzZWxmLmZkZWwgPSBmZGVsCisgICAgICAgICMgbmV4dCB0d28gbGluZXMgbWFrZSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgYWN0IHRoZSBzYW1lIGFzIHByb3BlcnR5CisgICAgICAgIHNlbGYuX19kb2NfXyA9IGRvYyBvciBmZ2V0Ll9fZG9jX18KKyAgICAgICAgc2VsZi5vdmVyd3JpdGVfZG9jID0gZG9jIGlzIE5vbmUKKyAgICAgICAgIyBzdXBwb3J0IGZvciBhYnN0cmFjdCBtZXRob2RzCisgICAgICAgIHNlbGYuX19pc2Fic3RyYWN0bWV0aG9kX18gPSBib29sKGdldGF0dHIoZmdldCwgJ19faXNhYnN0cmFjdG1ldGhvZF9fJywgRmFsc2UpKQorCisgICAgZGVmIF9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyY2xhc3M9Tm9uZSk6CisgICAgICAgIGlmIGluc3RhbmNlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9faXNhYnN0cmFjdG1ldGhvZF9fOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigpCisgICAgICAgIGVsaWYgc2VsZi5mZ2V0IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigidW5yZWFkYWJsZSBhdHRyaWJ1dGUiKQorICAgICAgICByZXR1cm4gc2VsZi5mZ2V0KGluc3RhbmNlKQorCisgICAgZGVmIF9fc2V0X18oc2VsZiwgaW5zdGFuY2UsIHZhbHVlKToKKyAgICAgICAgaWYgc2VsZi5mc2V0IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiY2FuJ3Qgc2V0IGF0dHJpYnV0ZSIpCisgICAgICAgIHNlbGYuZnNldChpbnN0YW5jZSwgdmFsdWUpCisKKyAgICBkZWYgX19kZWxldGVfXyhzZWxmLCBpbnN0YW5jZSk6CisgICAgICAgIGlmIHNlbGYuZmRlbCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImNhbid0IGRlbGV0ZSBhdHRyaWJ1dGUiKQorICAgICAgICBzZWxmLmZkZWwoaW5zdGFuY2UpCisKKyAgICBkZWYgZ2V0dGVyKHNlbGYsIGZnZXQpOgorICAgICAgICBmZG9jID0gZmdldC5fX2RvY19fIGlmIHNlbGYub3ZlcndyaXRlX2RvYyBlbHNlIE5vbmUKKyAgICAgICAgcmVzdWx0ID0gdHlwZShzZWxmKShmZ2V0LCBzZWxmLmZzZXQsIHNlbGYuZmRlbCwgZmRvYyBvciBzZWxmLl9fZG9jX18pCisgICAgICAgIHJlc3VsdC5vdmVyd3JpdGVfZG9jID0gc2VsZi5vdmVyd3JpdGVfZG9jCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBzZXR0ZXIoc2VsZiwgZnNldCk6CisgICAgICAgIHJlc3VsdCA9IHR5cGUoc2VsZikoc2VsZi5mZ2V0LCBmc2V0LCBzZWxmLmZkZWwsIHNlbGYuX19kb2NfXykKKyAgICAgICAgcmVzdWx0Lm92ZXJ3cml0ZV9kb2MgPSBzZWxmLm92ZXJ3cml0ZV9kb2MKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGRlbGV0ZXIoc2VsZiwgZmRlbCk6CisgICAgICAgIHJlc3VsdCA9IHR5cGUoc2VsZikoc2VsZi5mZ2V0LCBzZWxmLmZzZXQsIGZkZWwsIHNlbGYuX19kb2NfXykKKyAgICAgICAgcmVzdWx0Lm92ZXJ3cml0ZV9kb2MgPSBzZWxmLm92ZXJ3cml0ZV9kb2MKKyAgICAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5IGIvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5CmluZGV4IDc5OGViYzAuLjI2NjMxNzggMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9fX21haW5fXy5weQorKysgYi9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkKQEAgLTEzLDcgKzEzLDYgQEAKIAogX191bml0dGVzdCA9IFRydWUKIAotZnJvbSAubWFpbiBpbXBvcnQgbWFpbiwgVGVzdFByb2dyYW0sIFVTQUdFX0FTX01BSU4KLVRlc3RQcm9ncmFtLlVTQUdFID0gVVNBR0VfQVNfTUFJTgorZnJvbSAubWFpbiBpbXBvcnQgbWFpbiwgVGVzdFByb2dyYW0KIAogbWFpbihtb2R1bGU9Tm9uZSkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9jYXNlLnB5IGIvTGliL3VuaXR0ZXN0L2Nhc2UucHkKaW5kZXggZjU2YWY1NS4uODdmYjAyYiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L2Nhc2UucHkKKysrIGIvTGliL3VuaXR0ZXN0L2Nhc2UucHkKQEAgLTMsMTQgKzMsMTYgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBkaWZmbGliCitpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHBwcmludAogaW1wb3J0IHJlCiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbnRleHRsaWIKIAogZnJvbSAuIGltcG9ydCByZXN1bHQKIGZyb20gLnV0aWwgaW1wb3J0IChzdHJjbGFzcywgc2FmZV9yZXByLCBfY291bnRfZGlmZl9hbGxfcHVycG9zZSwKLSAgICAgICAgICAgICAgICAgICBfY291bnRfZGlmZl9oYXNoYWJsZSkKKyAgICAgICAgICAgICAgICAgICBfY291bnRfZGlmZl9oYXNoYWJsZSwgX2NvbW1vbl9zaG9ydGVuX3JlcHIpCiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKQEAgLTI2LDE3ICsyOCwxMSBAQAogICAgIGluc3RlYWQgb2YgcmFpc2luZyB0aGlzIGRpcmVjdGx5LgogICAgICIiIgogCi1jbGFzcyBfRXhwZWN0ZWRGYWlsdXJlKEV4Y2VwdGlvbik6CitjbGFzcyBfU2hvdWxkU3RvcChFeGNlcHRpb24pOgogICAgICIiIgotICAgIFJhaXNlIHRoaXMgd2hlbiBhIHRlc3QgaXMgZXhwZWN0ZWQgdG8gZmFpbC4KLQotICAgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgIFRoZSB0ZXN0IHNob3VsZCBzdG9wLgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4Y19pbmZvKToKLSAgICAgICAgc3VwZXIoX0V4cGVjdGVkRmFpbHVyZSwgc2VsZikuX19pbml0X18oKQotICAgICAgICBzZWxmLmV4Y19pbmZvID0gZXhjX2luZm8KLQogY2xhc3MgX1VuZXhwZWN0ZWRTdWNjZXNzKEV4Y2VwdGlvbik6CiAgICAgIiIiCiAgICAgVGhlIHRlc3Qgd2FzIHN1cHBvc2VkIHRvIGZhaWwsIGJ1dCBpdCBkaWRuJ3QhCkBAIC00NCwxMyArNDAsNDMgQEAKIAogCiBjbGFzcyBfT3V0Y29tZShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVzdWx0PU5vbmUpOgorICAgICAgICBzZWxmLmV4cGVjdGluZ19mYWlsdXJlID0gRmFsc2UKKyAgICAgICAgc2VsZi5yZXN1bHQgPSByZXN1bHQKKyAgICAgICAgc2VsZi5yZXN1bHRfc3VwcG9ydHNfc3VidGVzdHMgPSBoYXNhdHRyKHJlc3VsdCwgImFkZFN1YlRlc3QiKQogICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBUcnVlCi0gICAgICAgIHNlbGYuc2tpcHBlZCA9IE5vbmUKLSAgICAgICAgc2VsZi51bmV4cGVjdGVkU3VjY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5za2lwcGVkID0gW10KICAgICAgICAgc2VsZi5leHBlY3RlZEZhaWx1cmUgPSBOb25lCiAgICAgICAgIHNlbGYuZXJyb3JzID0gW10KLSAgICAgICAgc2VsZi5mYWlsdXJlcyA9IFtdCisKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiB0ZXN0UGFydEV4ZWN1dG9yKHNlbGYsIHRlc3RfY2FzZSwgaXNUZXN0PUZhbHNlKToKKyAgICAgICAgb2xkX3N1Y2Nlc3MgPSBzZWxmLnN1Y2Nlc3MKKyAgICAgICAgc2VsZi5zdWNjZXNzID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgU2tpcFRlc3QgYXMgZToKKyAgICAgICAgICAgIHNlbGYuc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnNraXBwZWQuYXBwZW5kKCh0ZXN0X2Nhc2UsIHN0cihlKSkpCisgICAgICAgIGV4Y2VwdCBfU2hvdWxkU3RvcDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgaWYgc2VsZi5leHBlY3RpbmdfZmFpbHVyZToKKyAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkRmFpbHVyZSA9IGV4Y19pbmZvCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKCh0ZXN0X2Nhc2UsIGV4Y19pbmZvKSkKKyAgICAgICAgICAgICMgZXhwbGljaXRseSBicmVhayBhIHJlZmVyZW5jZSBjeWNsZToKKyAgICAgICAgICAgICMgZXhjX2luZm8gLT4gZnJhbWUgLT4gZXhjX2luZm8KKyAgICAgICAgICAgIGV4Y19pbmZvID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5yZXN1bHRfc3VwcG9ydHNfc3VidGVzdHMgYW5kIHNlbGYuc3VjY2VzczoKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoKHRlc3RfY2FzZSwgTm9uZSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBzZWxmLnN1Y2Nlc3MgYW5kIG9sZF9zdWNjZXNzCiAKIAogZGVmIF9pZChvYmopOgpAQCAtODgsMjIgKzExNCwyNiBAQAogICAgICAgICByZXR1cm4gc2tpcChyZWFzb24pCiAgICAgcmV0dXJuIF9pZAogCi0KLWRlZiBleHBlY3RlZEZhaWx1cmUoZnVuYyk6Ci0gICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQotICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgcmFpc2UgX0V4cGVjdGVkRmFpbHVyZShzeXMuZXhjX2luZm8oKSkKLSAgICAgICAgcmFpc2UgX1VuZXhwZWN0ZWRTdWNjZXNzCi0gICAgcmV0dXJuIHdyYXBwZXIKK2RlZiBleHBlY3RlZEZhaWx1cmUodGVzdF9pdGVtKToKKyAgICB0ZXN0X2l0ZW0uX191bml0dGVzdF9leHBlY3RpbmdfZmFpbHVyZV9fID0gVHJ1ZQorICAgIHJldHVybiB0ZXN0X2l0ZW0KIAogCi1jbGFzcyBfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQob2JqZWN0KToKK2NsYXNzIF9CYXNlVGVzdENhc2VDb250ZXh0OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSk6CisgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCisKKyAgICBkZWYgX3JhaXNlRmFpbHVyZShzZWxmLCBzdGFuZGFyZE1zZyk6CisgICAgICAgIG1zZyA9IHNlbGYudGVzdF9jYXNlLl9mb3JtYXRNZXNzYWdlKHNlbGYubXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgcmFpc2Ugc2VsZi50ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKworY2xhc3MgX0Fzc2VydFJhaXNlc0Jhc2VDb250ZXh0KF9CYXNlVGVzdENhc2VDb250ZXh0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZCwgdGVzdF9jYXNlLCBjYWxsYWJsZV9vYmo9Tm9uZSwKICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXg9Tm9uZSk6CisgICAgICAgIF9CYXNlVGVzdENhc2VDb250ZXh0Ll9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSkKICAgICAgICAgc2VsZi5leHBlY3RlZCA9IGV4cGVjdGVkCiAgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCiAgICAgICAgIGlmIGNhbGxhYmxlX29iaiBpcyBub3QgTm9uZToKQEAgLTExOCwxMCArMTQ4LDYgQEAKICAgICAgICAgc2VsZi5leHBlY3RlZF9yZWdleCA9IGV4cGVjdGVkX3JlZ2V4CiAgICAgICAgIHNlbGYubXNnID0gTm9uZQogCi0gICAgZGVmIF9yYWlzZUZhaWx1cmUoc2VsZiwgc3RhbmRhcmRNc2cpOgotICAgICAgICBtc2cgPSBzZWxmLnRlc3RfY2FzZS5fZm9ybWF0TWVzc2FnZShzZWxmLm1zZywgc3RhbmRhcmRNc2cpCi0gICAgICAgIHJhaXNlIHNlbGYudGVzdF9jYXNlLmZhaWx1cmVFeGNlcHRpb24obXNnKQotCiAgICAgZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBjYWxsYWJsZV9vYmosIGFyZ3MsIGt3YXJncyk6CiAgICAgICAgICIiIgogICAgICAgICBJZiBjYWxsYWJsZV9vYmogaXMgTm9uZSwgYXNzZXJ0UmFpc2VzL1dhcm5zIGlzIGJlaW5nIHVzZWQgYXMgYQpAQCAtMTM1LDcgKzE2MSw2IEBACiAgICAgICAgICAgICBjYWxsYWJsZV9vYmooKmFyZ3MsICoqa3dhcmdzKQogCiAKLQogY2xhc3MgX0Fzc2VydFJhaXNlc0NvbnRleHQoX0Fzc2VydFJhaXNlc0Jhc2VDb250ZXh0KToKICAgICAiIiJBIGNvbnRleHQgbWFuYWdlciB1c2VkIHRvIGltcGxlbWVudCBUZXN0Q2FzZS5hc3NlcnRSYWlzZXMqIG1ldGhvZHMuIiIiCiAKQEAgLTIxNyw2ICsyNDIsNzQgQEAKICAgICAgICAgICAgIHNlbGYuX3JhaXNlRmFpbHVyZSgie30gbm90IHRyaWdnZXJlZCIuZm9ybWF0KGV4Y19uYW1lKSkKIAogCisKK19Mb2dnaW5nV2F0Y2hlciA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoIl9Mb2dnaW5nV2F0Y2hlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsicmVjb3JkcyIsICJvdXRwdXQiXSkKKworCitjbGFzcyBfQ2FwdHVyaW5nSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgorICAgICIiIgorICAgIEEgbG9nZ2luZyBoYW5kbGVyIGNhcHR1cmluZyBhbGwgKHJhdyBhbmQgZm9ybWF0dGVkKSBsb2dnaW5nIG91dHB1dC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYud2F0Y2hlciA9IF9Mb2dnaW5nV2F0Y2hlcihbXSwgW10pCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6CisgICAgICAgIHNlbGYud2F0Y2hlci5yZWNvcmRzLmFwcGVuZChyZWNvcmQpCisgICAgICAgIG1zZyA9IHNlbGYuZm9ybWF0KHJlY29yZCkKKyAgICAgICAgc2VsZi53YXRjaGVyLm91dHB1dC5hcHBlbmQobXNnKQorCisKKworY2xhc3MgX0Fzc2VydExvZ3NDb250ZXh0KF9CYXNlVGVzdENhc2VDb250ZXh0KToKKyAgICAiIiJBIGNvbnRleHQgbWFuYWdlciB1c2VkIHRvIGltcGxlbWVudCBUZXN0Q2FzZS5hc3NlcnRMb2dzKCkuIiIiCisKKyAgICBMT0dHSU5HX0ZPUk1BVCA9ICIlKGxldmVsbmFtZSlzOiUobmFtZSlzOiUobWVzc2FnZSlzIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSwgbG9nZ2VyX25hbWUsIGxldmVsKToKKyAgICAgICAgX0Jhc2VUZXN0Q2FzZUNvbnRleHQuX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKQorICAgICAgICBzZWxmLmxvZ2dlcl9uYW1lID0gbG9nZ2VyX25hbWUKKyAgICAgICAgaWYgbGV2ZWw6CisgICAgICAgICAgICBzZWxmLmxldmVsID0gbG9nZ2luZy5fbmFtZVRvTGV2ZWwuZ2V0KGxldmVsLCBsZXZlbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICAgICAgc2VsZi5tc2cgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYubG9nZ2VyX25hbWUsIGxvZ2dpbmcuTG9nZ2VyKToKKyAgICAgICAgICAgIGxvZ2dlciA9IHNlbGYubG9nZ2VyID0gc2VsZi5sb2dnZXJfbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyID0gc2VsZi5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihzZWxmLmxvZ2dlcl9uYW1lKQorICAgICAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcihzZWxmLkxPR0dJTkdfRk9STUFUKQorICAgICAgICBoYW5kbGVyID0gX0NhcHR1cmluZ0hhbmRsZXIoKQorICAgICAgICBoYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgICAgIHNlbGYud2F0Y2hlciA9IGhhbmRsZXIud2F0Y2hlcgorICAgICAgICBzZWxmLm9sZF9oYW5kbGVycyA9IGxvZ2dlci5oYW5kbGVyc1s6XQorICAgICAgICBzZWxmLm9sZF9sZXZlbCA9IGxvZ2dlci5sZXZlbAorICAgICAgICBzZWxmLm9sZF9wcm9wYWdhdGUgPSBsb2dnZXIucHJvcGFnYXRlCisgICAgICAgIGxvZ2dlci5oYW5kbGVycyA9IFtoYW5kbGVyXQorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwoc2VsZi5sZXZlbCkKKyAgICAgICAgbG9nZ2VyLnByb3BhZ2F0ZSA9IEZhbHNlCisgICAgICAgIHJldHVybiBoYW5kbGVyLndhdGNoZXIKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0Yik6CisgICAgICAgIHNlbGYubG9nZ2VyLmhhbmRsZXJzID0gc2VsZi5vbGRfaGFuZGxlcnMKKyAgICAgICAgc2VsZi5sb2dnZXIucHJvcGFnYXRlID0gc2VsZi5vbGRfcHJvcGFnYXRlCisgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKHNlbGYub2xkX2xldmVsKQorICAgICAgICBpZiBleGNfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgbGV0IHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBwYXNzIHRocm91Z2gKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBsZW4oc2VsZi53YXRjaGVyLnJlY29yZHMpID09IDA6CisgICAgICAgICAgICBzZWxmLl9yYWlzZUZhaWx1cmUoCisgICAgICAgICAgICAgICAgIm5vIGxvZ3Mgb2YgbGV2ZWwge30gb3IgaGlnaGVyIHRyaWdnZXJlZCBvbiB7fSIKKyAgICAgICAgICAgICAgICAuZm9ybWF0KGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKHNlbGYubGV2ZWwpLCBzZWxmLmxvZ2dlci5uYW1lKSkKKworCiBjbGFzcyBUZXN0Q2FzZShvYmplY3QpOgogICAgICIiIkEgY2xhc3Mgd2hvc2UgaW5zdGFuY2VzIGFyZSBzaW5nbGUgdGVzdCBjYXNlcy4KIApAQCAtMjcwLDcgKzM2Myw3IEBACiAgICAgICAgICAgIG5vdCBoYXZlIGEgbWV0aG9kIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdGVzdE1ldGhvZE5hbWUgPSBtZXRob2ROYW1lCi0gICAgICAgIHNlbGYuX291dGNvbWVGb3JEb0NsZWFudXBzID0gTm9uZQorICAgICAgICBzZWxmLl9vdXRjb21lID0gTm9uZQogICAgICAgICBzZWxmLl90ZXN0TWV0aG9kRG9jID0gJ05vIHRlc3QnCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RNZXRob2QgPSBnZXRhdHRyKHNlbGYsIG1ldGhvZE5hbWUpCkBAIC0yODMsNiArMzc2LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3Rlc3RNZXRob2REb2MgPSB0ZXN0TWV0aG9kLl9fZG9jX18KICAgICAgICAgc2VsZi5fY2xlYW51cHMgPSBbXQorICAgICAgICBzZWxmLl9zdWJ0ZXN0ID0gTm9uZQogCiAgICAgICAgICMgTWFwIHR5cGVzIHRvIGN1c3RvbSBhc3NlcnRFcXVhbCBmdW5jdGlvbnMgdGhhdCB3aWxsIGNvbXBhcmUKICAgICAgICAgIyBpbnN0YW5jZXMgb2Ygc2FpZCB0eXBlIGluIG1vcmUgZGV0YWlsIHRvIGdlbmVyYXRlIGEgbW9yZSB1c2VmdWwKQEAgLTM3MCw0NCArNDY0LDgwIEBACiAgICAgICAgIHJldHVybiAiPCVzIHRlc3RNZXRob2Q9JXM+IiAlIFwKICAgICAgICAgICAgICAgIChzdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQogCi0gICAgZGVmIF9hZGRTa2lwKHNlbGYsIHJlc3VsdCwgcmVhc29uKToKKyAgICBkZWYgX2FkZFNraXAoc2VsZiwgcmVzdWx0LCB0ZXN0X2Nhc2UsIHJlYXNvbik6CiAgICAgICAgIGFkZFNraXAgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZFNraXAnLCBOb25lKQogICAgICAgICBpZiBhZGRTa2lwIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgYWRkU2tpcChzZWxmLCByZWFzb24pCisgICAgICAgICAgICBhZGRTa2lwKHRlc3RfY2FzZSwgcmVhc29uKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkU2tpcCBtZXRob2QsIHNraXBzIG5vdCByZXBvcnRlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nLCAyKQotICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHRlc3RfY2FzZSkKIAotICAgIGRlZiBfZXhlY3V0ZVRlc3RQYXJ0KHNlbGYsIGZ1bmN0aW9uLCBvdXRjb21lLCBpc1Rlc3Q9RmFsc2UpOgorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHN1YlRlc3Qoc2VsZiwgbXNnPU5vbmUsICoqcGFyYW1zKToKKyAgICAgICAgIiIiUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgd2lsbCByZXR1cm4gdGhlIGVuY2xvc2VkIGJsb2NrCisgICAgICAgIG9mIGNvZGUgaW4gYSBzdWJ0ZXN0IGlkZW50aWZpZWQgYnkgdGhlIG9wdGlvbmFsIG1lc3NhZ2UgYW5kCisgICAgICAgIGtleXdvcmQgcGFyYW1ldGVycy4gIEEgZmFpbHVyZSBpbiB0aGUgc3VidGVzdCBtYXJrcyB0aGUgdGVzdAorICAgICAgICBjYXNlIGFzIGZhaWxlZCBidXQgcmVzdW1lcyBleGVjdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgZW5jbG9zZWQKKyAgICAgICAgYmxvY2ssIGFsbG93aW5nIGZ1cnRoZXIgdGVzdCBjb2RlIHRvIGJlIGV4ZWN1dGVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX291dGNvbWUucmVzdWx0X3N1cHBvcnRzX3N1YnRlc3RzOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwYXJlbnQgPSBzZWxmLl9zdWJ0ZXN0CisgICAgICAgIGlmIHBhcmVudCBpcyBOb25lOgorICAgICAgICAgICAgcGFyYW1zX21hcCA9IGNvbGxlY3Rpb25zLkNoYWluTWFwKHBhcmFtcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcmFtc19tYXAgPSBwYXJlbnQucGFyYW1zLm5ld19jaGlsZChwYXJhbXMpCisgICAgICAgIHNlbGYuX3N1YnRlc3QgPSBfU3ViVGVzdChzZWxmLCBtc2csIHBhcmFtc19tYXApCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZ1bmN0aW9uKCkKLSAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IFNraXBUZXN0IGFzIGU6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgb3V0Y29tZS5za2lwcGVkID0gc3RyKGUpCi0gICAgICAgIGV4Y2VwdCBfVW5leHBlY3RlZFN1Y2Nlc3M6Ci0gICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgaWYgaXNUZXN0OgotICAgICAgICAgICAgICAgIG91dGNvbWUudW5leHBlY3RlZFN1Y2Nlc3MgPSBleGNfaW5mbwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvdXRjb21lLmVycm9ycy5hcHBlbmQoZXhjX2luZm8pCi0gICAgICAgIGV4Y2VwdCBfRXhwZWN0ZWRGYWlsdXJlOgotICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIGlmIGlzVGVzdDoKLSAgICAgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSA9IGV4Y19pbmZvCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChleGNfaW5mbykKLSAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbjoKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBvdXRjb21lLmZhaWx1cmVzLmFwcGVuZChzeXMuZXhjX2luZm8oKSkKLSAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5fb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYuX3N1YnRlc3QsIGlzVGVzdD1UcnVlKToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgaWYgbm90IHNlbGYuX291dGNvbWUuc3VjY2VzczoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9vdXRjb21lLnJlc3VsdAorICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZSBhbmQgcmVzdWx0LmZhaWxmYXN0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBfU2hvdWxkU3RvcAorICAgICAgICAgICAgZWxpZiBzZWxmLl9vdXRjb21lLmV4cGVjdGVkRmFpbHVyZToKKyAgICAgICAgICAgICAgICAjIElmIHRoZSB0ZXN0IGlzIGV4cGVjdGluZyBhIGZhaWx1cmUsIHdlIHJlYWxseSB3YW50IHRvCisgICAgICAgICAgICAgICAgIyBzdG9wIG5vdyBhbmQgcmVnaXN0ZXIgdGhlIGV4cGVjdGVkIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgcmFpc2UgX1Nob3VsZFN0b3AKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3N1YnRlc3QgPSBwYXJlbnQKKworICAgIGRlZiBfZmVlZEVycm9yc1RvUmVzdWx0KHNlbGYsIHJlc3VsdCwgZXJyb3JzKToKKyAgICAgICAgZm9yIHRlc3QsIGV4Y19pbmZvIGluIGVycm9yczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdCwgX1N1YlRlc3QpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWJUZXN0KHRlc3QudGVzdF9jYXNlLCB0ZXN0LCBleGNfaW5mbykKKyAgICAgICAgICAgIGVsaWYgZXhjX2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhleGNfaW5mb1swXSwgc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUodGVzdCwgZXhjX2luZm8pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHRlc3QsIGV4Y19pbmZvKQorCisgICAgZGVmIF9hZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgcmVzdWx0LCBleGNfaW5mbyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZSA9IHJlc3VsdC5hZGRFeHBlY3RlZEZhaWx1cmUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkRXhwZWN0ZWRGYWlsdXJlIG1ldGhvZCwgcmVwb3J0aW5nIGFzIHBhc3NlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCBleGNfaW5mbykKKworICAgIGRlZiBfYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZiwgcmVzdWx0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3MgPSByZXN1bHQuYWRkVW5leHBlY3RlZFN1Y2Nlc3MKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkVW5leHBlY3RlZFN1Y2Nlc3MgbWV0aG9kLCByZXBvcnRpbmcgYXMgZmFpbHVyZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHBhc3MgYW4gYWN0dWFsIGV4Y2VwdGlvbiBhbmQgdHJhY2ViYWNrIHRvIGFkZEZhaWx1cmUsCisgICAgICAgICAgICAjIG90aGVyd2lzZSB0aGUgbGVnYWN5IHJlc3VsdCBjYW4gY2hva2UuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgX1VuZXhwZWN0ZWRTdWNjZXNzIGZyb20gTm9uZQorICAgICAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpCiAKICAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdD1Ob25lKToKICAgICAgICAgb3JpZ19yZXN1bHQgPSByZXN1bHQKQEAgLTQyNiw0NiArNTU2LDM4IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2tpcF93aHkgPSAoZ2V0YXR0cihzZWxmLl9fY2xhc3NfXywgJ19fdW5pdHRlc3Rfc2tpcF93aHlfXycsICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGdldGF0dHIodGVzdE1ldGhvZCwgJ19fdW5pdHRlc3Rfc2tpcF93aHlfXycsICcnKSkKLSAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgc2tpcF93aHkpCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkU2tpcChyZXN1bHQsIHNlbGYsIHNraXBfd2h5KQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICByZXN1bHQuc3RvcFRlc3Qoc2VsZikKICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleHBlY3RpbmdfZmFpbHVyZSA9IGdldGF0dHIodGVzdE1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX3VuaXR0ZXN0X2V4cGVjdGluZ19mYWlsdXJlX18iLCBGYWxzZSkKKyAgICAgICAgb3V0Y29tZSA9IF9PdXRjb21lKHJlc3VsdCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0Y29tZSA9IF9PdXRjb21lKCkKLSAgICAgICAgICAgIHNlbGYuX291dGNvbWVGb3JEb0NsZWFudXBzID0gb3V0Y29tZQorICAgICAgICAgICAgc2VsZi5fb3V0Y29tZSA9IG91dGNvbWUKIAotICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHNlbGYuc2V0VXAsIG91dGNvbWUpCisgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNldFVwKCkKICAgICAgICAgICAgIGlmIG91dGNvbWUuc3VjY2VzczoKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQodGVzdE1ldGhvZCwgb3V0Y29tZSwgaXNUZXN0PVRydWUpCi0gICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHNlbGYudGVhckRvd24sIG91dGNvbWUpCisgICAgICAgICAgICAgICAgb3V0Y29tZS5leHBlY3RpbmdfZmFpbHVyZSA9IGV4cGVjdGluZ19mYWlsdXJlCisgICAgICAgICAgICAgICAgd2l0aCBvdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZiwgaXNUZXN0PVRydWUpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCkKKyAgICAgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGluZ19mYWlsdXJlID0gRmFsc2UKKyAgICAgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZWFyRG93bigpCiAKICAgICAgICAgICAgIHNlbGYuZG9DbGVhbnVwcygpCisgICAgICAgICAgICBmb3IgdGVzdCwgcmVhc29uIGluIG91dGNvbWUuc2tpcHBlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgdGVzdCwgcmVhc29uKQorICAgICAgICAgICAgc2VsZi5fZmVlZEVycm9yc1RvUmVzdWx0KHJlc3VsdCwgb3V0Y29tZS5lcnJvcnMpCiAgICAgICAgICAgICBpZiBvdXRjb21lLnN1Y2Nlc3M6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgb3V0Y29tZS5za2lwcGVkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgb3V0Y29tZS5za2lwcGVkKQotICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmVycm9yczoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIGV4Y19pbmZvKQotICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBleGNfaW5mbykKLSAgICAgICAgICAgICAgICBpZiBvdXRjb21lLnVuZXhwZWN0ZWRTdWNjZXNzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IGdldGF0dHIocmVzdWx0LCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCBOb25lKQotICAgICAgICAgICAgICAgICAgICBpZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgaWYgZXhwZWN0aW5nX2ZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkRXhwZWN0ZWRGYWlsdXJlKHJlc3VsdCwgb3V0Y29tZS5leHBlY3RlZEZhaWx1cmUpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoc2VsZiwgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcykKLQotICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBhZGRFeHBlY3RlZEZhaWx1cmUgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZEV4cGVjdGVkRmFpbHVyZScsIE5vbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGFkZEV4cGVjdGVkRmFpbHVyZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRlc3RSZXN1bHQgaGFzIG5vIGFkZEV4cGVjdGVkRmFpbHVyZSBtZXRob2QsIHJlcG9ydGluZyBhcyBwYXNzZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRVbmV4cGVjdGVkU3VjY2VzcyhyZXN1bHQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQpAQCAtNDc0LDE0ICs1OTYsMjMgQEAKICAgICAgICAgICAgICAgICBpZiBzdG9wVGVzdFJ1biBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc3RvcFRlc3RSdW4oKQogCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlczoKKyAgICAgICAgICAgICMgb3V0Y29tZS5lcnJvcnMgLT4gZnJhbWUgLT4gb3V0Y29tZSAtPiBvdXRjb21lLmVycm9ycworICAgICAgICAgICAgIyBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSAtPiBmcmFtZSAtPiBvdXRjb21lIC0+IG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBvdXRjb21lLmVycm9ycy5jbGVhcigpCisgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSA9IE5vbmUKKworICAgICAgICAgICAgIyBjbGVhciB0aGUgb3V0Y29tZSwgbm8gbW9yZSBuZWVkZWQKKyAgICAgICAgICAgIHNlbGYuX291dGNvbWUgPSBOb25lCisKICAgICBkZWYgZG9DbGVhbnVwcyhzZWxmKToKICAgICAgICAgIiIiRXhlY3V0ZSBhbGwgY2xlYW51cCBmdW5jdGlvbnMuIE5vcm1hbGx5IGNhbGxlZCBmb3IgeW91IGFmdGVyCiAgICAgICAgIHRlYXJEb3duLiIiIgotICAgICAgICBvdXRjb21lID0gc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgb3IgX091dGNvbWUoKQorICAgICAgICBvdXRjb21lID0gc2VsZi5fb3V0Y29tZSBvciBfT3V0Y29tZSgpCiAgICAgICAgIHdoaWxlIHNlbGYuX2NsZWFudXBzOgogICAgICAgICAgICAgZnVuY3Rpb24sIGFyZ3MsIGt3YXJncyA9IHNlbGYuX2NsZWFudXBzLnBvcCgpCi0gICAgICAgICAgICBwYXJ0ID0gbGFtYmRhOiBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQocGFydCwgb3V0Y29tZSkKKyAgICAgICAgICAgIHdpdGggb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKIAogICAgICAgICAjIHJldHVybiB0aGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogICAgICAgICAjIGV2ZW4gdGhvdWdoIHdlIG5vIGxvbmdlciB1cyBpdCBpbnRlcm5hbGx5CkBAIC02MDAsNiArNzMxLDI4IEBACiAgICAgICAgIGNvbnRleHQgPSBfQXNzZXJ0V2FybnNDb250ZXh0KGV4cGVjdGVkX3dhcm5pbmcsIHNlbGYsIGNhbGxhYmxlX29iaikKICAgICAgICAgcmV0dXJuIGNvbnRleHQuaGFuZGxlKCdhc3NlcnRXYXJucycsIGNhbGxhYmxlX29iaiwgYXJncywga3dhcmdzKQogCisgICAgZGVmIGFzc2VydExvZ3Moc2VsZiwgbG9nZ2VyPU5vbmUsIGxldmVsPU5vbmUpOgorICAgICAgICAiIiJGYWlsIHVubGVzcyBhIGxvZyBtZXNzYWdlIG9mIGxldmVsICpsZXZlbCogb3IgaGlnaGVyIGlzIGVtaXR0ZWQKKyAgICAgICAgb24gKmxvZ2dlcl9uYW1lKiBvciBpdHMgY2hpbGRyZW4uICBJZiBvbWl0dGVkLCAqbGV2ZWwqIGRlZmF1bHRzIHRvCisgICAgICAgIElORk8gYW5kICpsb2dnZXIqIGRlZmF1bHRzIHRvIHRoZSByb290IGxvZ2dlci4KKworICAgICAgICBUaGlzIG1ldGhvZCBtdXN0IGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIsIGFuZCB3aWxsIHlpZWxkCisgICAgICAgIGEgcmVjb3JkaW5nIG9iamVjdCB3aXRoIHR3byBhdHRyaWJ1dGVzOiBgb3V0cHV0YCBhbmQgYHJlY29yZHNgLgorICAgICAgICBBdCB0aGUgZW5kIG9mIHRoZSBjb250ZXh0IG1hbmFnZXIsIHRoZSBgb3V0cHV0YCBhdHRyaWJ1dGUgd2lsbAorICAgICAgICBiZSBhIGxpc3Qgb2YgdGhlIG1hdGNoaW5nIGZvcm1hdHRlZCBsb2cgbWVzc2FnZXMgYW5kIHRoZQorICAgICAgICBgcmVjb3Jkc2AgYXR0cmlidXRlIHdpbGwgYmUgYSBsaXN0IG9mIHRoZSBjb3JyZXNwb25kaW5nIExvZ1JlY29yZAorICAgICAgICBvYmplY3RzLgorCisgICAgICAgIEV4YW1wbGU6OgorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygnZm9vJywgbGV2ZWw9J0lORk8nKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vJykuaW5mbygnZmlyc3QgbWVzc2FnZScpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2Zvby5iYXInKS5lcnJvcignc2Vjb25kIG1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX0Fzc2VydExvZ3NDb250ZXh0KHNlbGYsIGxvZ2dlciwgbGV2ZWwpCisKICAgICBkZWYgX2dldEFzc2VydEVxdWFsaXR5RnVuYyhzZWxmLCBmaXJzdCwgc2Vjb25kKToKICAgICAgICAgIiIiR2V0IGEgZGV0YWlsZWQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgdGhlIHR5cGVzIG9mIHRoZSB0d28gYXJncy4KIApAQCAtNjI5LDcgKzc4Miw3IEBACiAgICAgZGVmIF9iYXNlQXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgogICAgICAgICAiIiJUaGUgZGVmYXVsdCBhc3NlcnRFcXVhbCBpbXBsZW1lbnRhdGlvbiwgbm90IHR5cGUgc3BlY2lmaWMuIiIiCiAgICAgICAgIGlmIG5vdCBmaXJzdCA9PSBzZWNvbmQ6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGZpcnN0KSwgc2FmZV9yZXByKHNlY29uZCkpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSBfY29tbW9uX3Nob3J0ZW5fcmVwcihmaXJzdCwgc2Vjb25kKQogICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQogICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKIApAQCAtNzY0LDE0ICs5MTcsOSBAQAogICAgICAgICAgICAgaWYgc2VxMSA9PSBzZXEyOgogICAgICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgICAgICBzZXExX3JlcHIgPSBzYWZlX3JlcHIoc2VxMSkKLSAgICAgICAgICAgIHNlcTJfcmVwciA9IHNhZmVfcmVwcihzZXEyKQotICAgICAgICAgICAgaWYgbGVuKHNlcTFfcmVwcikgPiAzMDoKLSAgICAgICAgICAgICAgICBzZXExX3JlcHIgPSBzZXExX3JlcHJbOjMwXSArICcuLi4nCi0gICAgICAgICAgICBpZiBsZW4oc2VxMl9yZXByKSA+IDMwOgotICAgICAgICAgICAgICAgIHNlcTJfcmVwciA9IHNlcTJfcmVwcls6MzBdICsgJy4uLicKLSAgICAgICAgICAgIGVsZW1lbnRzID0gKHNlcV90eXBlX25hbWUuY2FwaXRhbGl6ZSgpLCBzZXExX3JlcHIsIHNlcTJfcmVwcikKLSAgICAgICAgICAgIGRpZmZlcmluZyA9ICclc3MgZGlmZmVyOiAlcyAhPSAlc1xuJyAlIGVsZW1lbnRzCisgICAgICAgICAgICBkaWZmZXJpbmcgPSAnJXNzIGRpZmZlcjogJXMgIT0gJXNcbicgJSAoCisgICAgICAgICAgICAgICAgICAgIChzZXFfdHlwZV9uYW1lLmNhcGl0YWxpemUoKSwpICsKKyAgICAgICAgICAgICAgICAgICAgX2NvbW1vbl9zaG9ydGVuX3JlcHIoc2VxMSwgc2VxMikpCiAKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG1pbihsZW4xLCBsZW4yKSk6CiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtOTI5LDcgKzEwNzcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZDIsIGRpY3QsICdTZWNvbmQgYXJndW1lbnQgaXMgbm90IGEgZGljdGlvbmFyeScpCiAKICAgICAgICAgaWYgZDEgIT0gZDI6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGQxLCBUcnVlKSwgc2FmZV9yZXByKGQyLCBUcnVlKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIF9jb21tb25fc2hvcnRlbl9yZXByKGQxLCBkMikKICAgICAgICAgICAgIGRpZmYgPSAoJ1xuJyArICdcbicuam9pbihkaWZmbGliLm5kaWZmKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZDEpLnNwbGl0bGluZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGQyKS5zcGxpdGxpbmVzKCkpKSkKQEAgLTEwMTMsOCArMTE2MSw3IEBACiAgICAgICAgICAgICBpZiBsZW4oZmlyc3RsaW5lcykgPT0gMSBhbmQgZmlyc3Quc3RyaXAoJ1xyXG4nKSA9PSBmaXJzdDoKICAgICAgICAgICAgICAgICBmaXJzdGxpbmVzID0gW2ZpcnN0ICsgJ1xuJ10KICAgICAgICAgICAgICAgICBzZWNvbmRsaW5lcyA9IFtzZWNvbmQgKyAnXG4nXQotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgKHNhZmVfcmVwcihmaXJzdCwgVHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCwgVHJ1ZSkpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSBfY29tbW9uX3Nob3J0ZW5fcmVwcihmaXJzdCwgc2Vjb25kKQogICAgICAgICAgICAgZGlmZiA9ICdcbicgKyAnJy5qb2luKGRpZmZsaWIubmRpZmYoZmlyc3RsaW5lcywgc2Vjb25kbGluZXMpKQogICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2Uoc3RhbmRhcmRNc2csIGRpZmYpCiAgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKQEAgLTEyMTIsMyArMTM1OSwzOSBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc2NyaXB0aW9uCiAgICAgICAgIGRvYyA9IHNlbGYuX3Rlc3RGdW5jLl9fZG9jX18KICAgICAgICAgcmV0dXJuIGRvYyBhbmQgZG9jLnNwbGl0KCJcbiIpWzBdLnN0cmlwKCkgb3IgTm9uZQorCisKK2NsYXNzIF9TdWJUZXN0KFRlc3RDYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UsIG1lc3NhZ2UsIHBhcmFtcyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9tZXNzYWdlID0gbWVzc2FnZQorICAgICAgICBzZWxmLnRlc3RfY2FzZSA9IHRlc3RfY2FzZQorICAgICAgICBzZWxmLnBhcmFtcyA9IHBhcmFtcworICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24gPSB0ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbgorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInN1YnRlc3RzIGNhbm5vdCBiZSBydW4gZGlyZWN0bHkiKQorCisgICAgZGVmIF9zdWJEZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBpZiBzZWxmLl9tZXNzYWdlOgorICAgICAgICAgICAgcGFydHMuYXBwZW5kKCJbe31dIi5mb3JtYXQoc2VsZi5fbWVzc2FnZSkpCisgICAgICAgIGlmIHNlbGYucGFyYW1zOgorICAgICAgICAgICAgcGFyYW1zX2Rlc2MgPSAnLCAnLmpvaW4oCisgICAgICAgICAgICAgICAgInt9PXshcn0iLmZvcm1hdChrLCB2KQorICAgICAgICAgICAgICAgIGZvciAoaywgdikgaW4gc29ydGVkKHNlbGYucGFyYW1zLml0ZW1zKCkpKQorICAgICAgICAgICAgcGFydHMuYXBwZW5kKCIoe30pIi5mb3JtYXQocGFyYW1zX2Rlc2MpKQorICAgICAgICByZXR1cm4gIiAiLmpvaW4ocGFydHMpIG9yICcoPHN1YnRlc3Q+KScKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuICJ7fSB7fSIuZm9ybWF0KHNlbGYudGVzdF9jYXNlLmlkKCksIHNlbGYuX3N1YkRlc2NyaXB0aW9uKCkpCisKKyAgICBkZWYgc2hvcnREZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSBzdWJ0ZXN0LCBvciBOb25lIGlmIG5vCisgICAgICAgIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHByb3ZpZGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGVzdF9jYXNlLnNob3J0RGVzY3JpcHRpb24oKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAie30ge30iLmZvcm1hdChzZWxmLnRlc3RfY2FzZSwgc2VsZi5fc3ViRGVzY3JpcHRpb24oKSkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9sb2FkZXIucHkgYi9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5CmluZGV4IDlhYjI2YzEuLjgwOGM1MGUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9sb2FkZXIucHkKKysrIGIvTGliL3VuaXR0ZXN0L2xvYWRlci5weQpAQCAtMzQsNiArMzQsMTQgQEAKICAgICBUZXN0Q2xhc3MgPSB0eXBlKGNsYXNzbmFtZSwgKGNhc2UuVGVzdENhc2UsKSwgYXR0cnMpCiAgICAgcmV0dXJuIHN1aXRlQ2xhc3MoKFRlc3RDbGFzcyhtZXRob2RuYW1lKSwpKQogCitkZWYgX21ha2Vfc2tpcHBlZF90ZXN0KG1ldGhvZG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcyk6CisgICAgQGNhc2Uuc2tpcChzdHIoZXhjZXB0aW9uKSkKKyAgICBkZWYgdGVzdFNraXBwZWQoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICBhdHRycyA9IHttZXRob2RuYW1lOiB0ZXN0U2tpcHBlZH0KKyAgICBUZXN0Q2xhc3MgPSB0eXBlKCJNb2R1bGVTa2lwcGVkIiwgKGNhc2UuVGVzdENhc2UsKSwgYXR0cnMpCisgICAgcmV0dXJuIHN1aXRlQ2xhc3MoKFRlc3RDbGFzcyhtZXRob2RuYW1lKSwpKQorCiBkZWYgX2p5dGhvbl9hd2FyZV9zcGxpdGV4dChwYXRoKToKICAgICBpZiBwYXRoLmxvd2VyKCkuZW5kc3dpdGgoJyRweS5jbGFzcycpOgogICAgICAgICByZXR1cm4gcGF0aFs6LTldCkBAIC01Myw4ICs2MSw5IEBACiAgICAgZGVmIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmLCB0ZXN0Q2FzZUNsYXNzKToKICAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0ZXN0Q2FzZUNsYXNzIiIiCiAgICAgICAgIGlmIGlzc3ViY2xhc3ModGVzdENhc2VDbGFzcywgc3VpdGUuVGVzdFN1aXRlKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdCBjYXNlcyBzaG91bGQgbm90IGJlIGRlcml2ZWQgZnJvbSBUZXN0U3VpdGUuIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgTWF5YmUgeW91IG1lYW50IHRvIGRlcml2ZSBmcm9tIFRlc3RDYXNlPyIpCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlRlc3QgY2FzZXMgc2hvdWxkIG5vdCBiZSBkZXJpdmVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0U3VpdGUuIE1heWJlIHlvdSBtZWFudCB0byBkZXJpdmUgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RDYXNlPyIpCiAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBzZWxmLmdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcykKICAgICAgICAgaWYgbm90IHRlc3RDYXNlTmFtZXMgYW5kIGhhc2F0dHIodGVzdENhc2VDbGFzcywgJ3J1blRlc3QnKToKICAgICAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBbJ3J1blRlc3QnXQpAQCAtMTY5LDYgKzE3OCw5IEBACiAgICAgICAgIFRoZSBwYXR0ZXJuIGlzIGRlbGliZXJhdGVseSBub3Qgc3RvcmVkIGFzIGEgbG9hZGVyIGF0dHJpYnV0ZSBzbyB0aGF0CiAgICAgICAgIHBhY2thZ2VzIGNhbiBjb250aW51ZSBkaXNjb3ZlcnkgdGhlbXNlbHZlcy4gdG9wX2xldmVsX2RpciBpcyBzdG9yZWQgc28KICAgICAgICAgbG9hZF90ZXN0cyBkb2VzIG5vdCBuZWVkIHRvIHBhc3MgdGhpcyBhcmd1bWVudCBpbiB0byBsb2FkZXIuZGlzY292ZXIoKS4KKworICAgICAgICBQYXRocyBhcmUgc29ydGVkIGJlZm9yZSBiZWluZyBpbXBvcnRlZCB0byBlbnN1cmUgcmVwcm9kdWNpYmxlIGV4ZWN1dGlvbgorICAgICAgICBvcmRlciBldmVuIG9uIGZpbGVzeXN0ZW1zIHdpdGggbm9uLWFscGhhYmV0aWNhbCBvcmRlcmluZyBsaWtlIGV4dDMvNC4KICAgICAgICAgIiIiCiAgICAgICAgIHNldF9pbXBsaWNpdF90b3AgPSBGYWxzZQogICAgICAgICBpZiB0b3BfbGV2ZWxfZGlyIGlzIE5vbmUgYW5kIHNlbGYuX3RvcF9sZXZlbF9kaXIgaXMgbm90IE5vbmU6CkBAIC0xODksNiArMjAxLDggQEAKICAgICAgICAgc2VsZi5fdG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbF9kaXIKIAogICAgICAgICBpc19ub3RfaW1wb3J0YWJsZSA9IEZhbHNlCisgICAgICAgIGlzX25hbWVzcGFjZSA9IEZhbHNlCisgICAgICAgIHRlc3RzID0gW10KICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmFic3BhdGgoc3RhcnRfZGlyKSk6CiAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3RhcnRfZGlyKQogICAgICAgICAgICAgaWYgc3RhcnRfZGlyICE9IHRvcF9sZXZlbF9kaXI6CkBAIC0yMDIsMTUgKzIxNiw1MiBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0aGVfbW9kdWxlID0gc3lzLm1vZHVsZXNbc3RhcnRfZGlyXQogICAgICAgICAgICAgICAgIHRvcF9wYXJ0ID0gc3RhcnRfZGlyLnNwbGl0KCcuJylbMF0KLSAgICAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKCh0aGVfbW9kdWxlLl9fZmlsZV9fKSkpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoCisgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZSgodGhlX21vZHVsZS5fX2ZpbGVfXykpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBsb29rIGZvciBuYW1lc3BhY2UgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3BlYyA9IHRoZV9tb2R1bGUuX19zcGVjX18KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BlYyA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICBpZiBzcGVjIGFuZCBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19uYW1lc3BhY2UgPSBUcnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiB0aGVfbW9kdWxlLl9fcGF0aF9fOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm90IHNldF9pbXBsaWNpdF90b3AgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgcGF0aC5zdGFydHN3aXRoKHRvcF9sZXZlbF9kaXIpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RvcF9sZXZlbF9kaXIgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aC5zcGxpdCh0aGVfbW9kdWxlLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCIuIiwgb3MucGF0aC5zZXApKVswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYuX2ZpbmRfdGVzdHMocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlPVRydWUpKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHRoZV9tb2R1bGUuX19uYW1lX18gaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBidWlsdGluIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdDYW4gbm90IHVzZSBidWlsdGluIG1vZHVsZXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcyBkb3R0ZWQgbW9kdWxlIG5hbWVzJykgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvblwndCBrbm93IGhvdyB0byBkaXNjb3ZlciBmcm9tIHshcn0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0aGVfbW9kdWxlKSkgZnJvbSBOb25lCisKICAgICAgICAgICAgICAgICBpZiBzZXRfaW1wbGljaXRfdG9wOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gc2VsZi5fZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZSh0b3BfcGFydCkKLSAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHRvcF9sZXZlbF9kaXIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc19uYW1lc3BhY2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZSh0b3BfcGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5wYXRoLnJlbW92ZSh0b3BfbGV2ZWxfZGlyKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHRvcF9sZXZlbF9kaXIpCiAKICAgICAgICAgaWYgaXNfbm90X2ltcG9ydGFibGU6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignU3RhcnQgZGlyZWN0b3J5IGlzIG5vdCBpbXBvcnRhYmxlOiAlcicgJSBzdGFydF9kaXIpCiAKLSAgICAgICAgdGVzdHMgPSBsaXN0KHNlbGYuX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKKyAgICAgICAgaWYgbm90IGlzX25hbWVzcGFjZToKKyAgICAgICAgICAgIHRlc3RzID0gbGlzdChzZWxmLl9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybikpCiAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3ModGVzdHMpCiAKICAgICBkZWYgX2dldF9kaXJlY3RvcnlfY29udGFpbmluZ19tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgpAQCAtMjQzLDkgKzI5NCw5IEBACiAgICAgICAgICMgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gdXNlIGFsdGVybmF0aXZlIG1hdGNoaW5nIHN0cmF0ZWd5CiAgICAgICAgIHJldHVybiBmbm1hdGNoKHBhdGgsIHBhdHRlcm4pCiAKLSAgICBkZWYgX2ZpbmRfdGVzdHMoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICBkZWYgX2ZpbmRfdGVzdHMoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9RmFsc2UpOgogICAgICAgICAiIiJVc2VkIGJ5IGRpc2NvdmVyeS4gWWllbGRzIHRlc3Qgc3VpdGVzIGl0IGxvYWRzLiIiIgotICAgICAgICBwYXRocyA9IG9zLmxpc3RkaXIoc3RhcnRfZGlyKQorICAgICAgICBwYXRocyA9IHNvcnRlZChvcy5saXN0ZGlyKHN0YXJ0X2RpcikpCiAKICAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6CiAgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oc3RhcnRfZGlyLCBwYXRoKQpAQCAtMjU5LDYgKzMxMCw4IEBACiAgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuX2dldF9uYW1lX2Zyb21fcGF0aChmdWxsX3BhdGgpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBjYXNlLlNraXBUZXN0IGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX3NraXBwZWRfdGVzdChuYW1lLCBlLCBzZWxmLnN1aXRlQ2xhc3MpCiAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICB5aWVsZCBfbWFrZV9mYWlsZWRfaW1wb3J0X3Rlc3QobmFtZSwgc2VsZi5zdWl0ZUNsYXNzKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0yNzQsNyArMzI3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZyAlIChtb2RfbmFtZSwgbW9kdWxlX2RpciwgZXhwZWN0ZWRfZGlyKSkKICAgICAgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkKICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihmdWxsX3BhdGgpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZnVsbF9wYXRoLCAnX19pbml0X18ucHknKSk6CisgICAgICAgICAgICAgICAgaWYgKG5vdCBuYW1lc3BhY2UgYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZnVsbF9wYXRoLCAnX19pbml0X18ucHknKSkpOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICAgICAgbG9hZF90ZXN0cyA9IE5vbmUKQEAgLTI5MSw4ICszNDUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0cyBsb2FkZWQgZnJvbSBwYWNrYWdlIGZpbGUKICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3RzCiAgICAgICAgICAgICAgICAgICAgICMgcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX2ZpbmRfdGVzdHMoZnVsbF9wYXRoLCBwYXR0ZXJuKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5kX3Rlc3RzKGZ1bGxfcGF0aCwgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZT1uYW1lc3BhY2UpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgbG9hZF90ZXN0cyhzZWxmLCB0ZXN0cywgcGF0dGVybikKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9tYWluLnB5IGIvTGliL3VuaXR0ZXN0L21haW4ucHkKaW5kZXggZWFkNjQ5My4uMTgwZGY4NiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L21haW4ucHkKKysrIGIvTGliL3VuaXR0ZXN0L21haW4ucHkKQEAgLTEsNyArMSw3IEBACiAiIiJVbml0dGVzdCBtYWluIHByb2dyYW0iIiIKIAogaW1wb3J0IHN5cwotaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBvcwogCiBmcm9tIC4gaW1wb3J0IGxvYWRlciwgcnVubmVyCkBAIC05LDUzICs5LDIwIEBACiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKLUZBSUxGQVNUICAgICA9ICIgIC1mLCAtLWZhaWxmYXN0ICAgU3RvcCBvbiBmaXJzdCBmYWlsdXJlXG4iCi1DQVRDSEJSRUFLICAgPSAiICAtYywgLS1jYXRjaCAgICAgIENhdGNoIGNvbnRyb2wtQyBhbmQgZGlzcGxheSByZXN1bHRzXG4iCi1CVUZGRVJPVVRQVVQgPSAiICAtYiwgLS1idWZmZXIgICAgIEJ1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdCBydW5zXG4iCi0KLVVTQUdFX0FTX01BSU4gPSAiIiJcCi1Vc2FnZTogJShwcm9nTmFtZSlzIFtvcHRpb25zXSBbdGVzdHNdCi0KLU9wdGlvbnM6Ci0gIC1oLCAtLWhlbHAgICAgICAgU2hvdyB0aGlzIG1lc3NhZ2UKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotICAtcSwgLS1xdWlldCAgICAgIE1pbmltYWwgb3V0cHV0Ci0lKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMKK01BSU5fRVhBTVBMRVMgPSAiIiJcCiBFeGFtcGxlczoKLSAgJShwcm9nTmFtZSlzIHRlc3RfbW9kdWxlICAgICAgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSB0ZXN0X21vZHVsZQotICAlKHByb2dOYW1lKXMgbW9kdWxlLlRlc3RDbGFzcyAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIG1vZHVsZS5UZXN0Q2xhc3MKLSAgJShwcm9nTmFtZSlzIG1vZHVsZS5DbGFzcy50ZXN0X21ldGhvZCAgLSBydW4gc3BlY2lmaWVkIHRlc3QgbWV0aG9kCi0KLVt0ZXN0c10gY2FuIGJlIGEgbGlzdCBvZiBhbnkgbnVtYmVyIG9mIHRlc3QgbW9kdWxlcywgY2xhc3NlcyBhbmQgdGVzdAotbWV0aG9kcy4KLQotQWx0ZXJuYXRpdmUgVXNhZ2U6ICUocHJvZ05hbWUpcyBkaXNjb3ZlciBbb3B0aW9uc10KLQotT3B0aW9uczoKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzICAtcyBkaXJlY3RvcnkgICAgIERpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KQotICAtcCBwYXR0ZXJuICAgICAgIFBhdHRlcm4gdG8gbWF0Y2ggdGVzdCBmaWxlcyAoJ3Rlc3QqLnB5JyBkZWZhdWx0KQotICAtdCBkaXJlY3RvcnkgICAgIFRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdCB0bwotICAgICAgICAgICAgICAgICAgIHN0YXJ0IGRpcmVjdG9yeSkKLQotRm9yIHRlc3QgZGlzY292ZXJ5IGFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcAotbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LgorICAlKHByb2cpcyB0ZXN0X21vZHVsZSAgICAgICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gdGVzdF9tb2R1bGUKKyAgJShwcm9nKXMgbW9kdWxlLlRlc3RDbGFzcyAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIG1vZHVsZS5UZXN0Q2xhc3MKKyAgJShwcm9nKXMgbW9kdWxlLkNsYXNzLnRlc3RfbWV0aG9kICAtIHJ1biBzcGVjaWZpZWQgdGVzdCBtZXRob2QKICIiIgogCi1VU0FHRV9GUk9NX01PRFVMRSA9ICIiIlwKLVVzYWdlOiAlKHByb2dOYW1lKXMgW29wdGlvbnNdIFt0ZXN0XSBbLi4uXQotCi1PcHRpb25zOgotICAtaCwgLS1oZWxwICAgICAgIFNob3cgdGhpcyBtZXNzYWdlCi0gIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZSBvdXRwdXQKLSAgLXEsIC0tcXVpZXQgICAgICBNaW5pbWFsIG91dHB1dAotJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzCitNT0RVTEVfRVhBTVBMRVMgPSAiIiJcCiBFeGFtcGxlczoKLSAgJShwcm9nTmFtZSlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcnVuIGRlZmF1bHQgc2V0IG9mIHRlc3RzCi0gICUocHJvZ05hbWUpcyBNeVRlc3RTdWl0ZSAgICAgICAgICAgICAgICAgICAtIHJ1biBzdWl0ZSAnTXlUZXN0U3VpdGUnCi0gICUocHJvZ05hbWUpcyBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcgICAgICAtIHJ1biBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcKLSAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UgICAgICAgICAgICAgICAgICAgIC0gcnVuIGFsbCAndGVzdConIHRlc3QgbWV0aG9kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNeVRlc3RDYXNlCisgICUocHJvZylzICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBydW4gZGVmYXVsdCBzZXQgb2YgdGVzdHMKKyAgJShwcm9nKXMgTXlUZXN0U3VpdGUgICAgICAgICAgICAgICAtIHJ1biBzdWl0ZSAnTXlUZXN0U3VpdGUnCisgICUocHJvZylzIE15VGVzdENhc2UudGVzdFNvbWV0aGluZyAgLSBydW4gTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nCisgICUocHJvZylzIE15VGVzdENhc2UgICAgICAgICAgICAgICAgLSBydW4gYWxsICd0ZXN0KicgdGVzdCBtZXRob2RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNeVRlc3RDYXNlCiAiIiIKIAogZGVmIF9jb252ZXJ0X25hbWUobmFtZSk6CkBAIC04MiwxMCArNDksMTEgQEAKICAgICAiIiJBIGNvbW1hbmQtbGluZSBwcm9ncmFtIHRoYXQgcnVucyBhIHNldCBvZiB0ZXN0czsgdGhpcyBpcyBwcmltYXJpbHkKICAgICAgICBmb3IgbWFraW5nIHRlc3QgbW9kdWxlcyBjb252ZW5pZW50bHkgZXhlY3V0YWJsZS4KICAgICAiIiIKLSAgICBVU0FHRSA9IFVTQUdFX0ZST01fTU9EVUxFCi0KICAgICAjIGRlZmF1bHRzIGZvciB0ZXN0aW5nCisgICAgbW9kdWxlPU5vbmUKKyAgICB2ZXJib3NpdHkgPSAxCiAgICAgZmFpbGZhc3QgPSBjYXRjaGJyZWFrID0gYnVmZmVyID0gcHJvZ05hbWUgPSB3YXJuaW5ncyA9IE5vbmUKKyAgICBfZGlzY292ZXJ5X3BhcnNlciA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGU9J19fbWFpbl9fJywgZGVmYXVsdFRlc3Q9Tm9uZSwgYXJndj1Ob25lLAogICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyPU5vbmUsIHRlc3RMb2FkZXI9bG9hZGVyLmRlZmF1bHRUZXN0TG9hZGVyLApAQCAtMTI3LDQ0ICs5NSw0NyBAQAogICAgIGRlZiB1c2FnZUV4aXQoc2VsZiwgbXNnPU5vbmUpOgogICAgICAgICBpZiBtc2c6CiAgICAgICAgICAgICBwcmludChtc2cpCi0gICAgICAgIHVzYWdlID0geydwcm9nTmFtZSc6IHNlbGYucHJvZ05hbWUsICdjYXRjaGJyZWFrJzogJycsICdmYWlsZmFzdCc6ICcnLAotICAgICAgICAgICAgICAgICAnYnVmZmVyJzogJyd9Ci0gICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgIT0gRmFsc2U6Ci0gICAgICAgICAgICB1c2FnZVsnZmFpbGZhc3QnXSA9IEZBSUxGQVNUCi0gICAgICAgIGlmIHNlbGYuY2F0Y2hicmVhayAhPSBGYWxzZToKLSAgICAgICAgICAgIHVzYWdlWydjYXRjaGJyZWFrJ10gPSBDQVRDSEJSRUFLCi0gICAgICAgIGlmIHNlbGYuYnVmZmVyICE9IEZhbHNlOgotICAgICAgICAgICAgdXNhZ2VbJ2J1ZmZlciddID0gQlVGRkVST1VUUFVUCi0gICAgICAgIHByaW50KHNlbGYuVVNBR0UgJSB1c2FnZSkKKyAgICAgICAgaWYgc2VsZi5fZGlzY292ZXJ5X3BhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICBzZWxmLl9wcmludF9oZWxwKCkKICAgICAgICAgc3lzLmV4aXQoMikKIAorICAgIGRlZiBfcHJpbnRfaGVscChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBzZWxmLm1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgcHJpbnQoc2VsZi5fbWFpbl9wYXJzZXIuZm9ybWF0X2hlbHAoKSkKKyAgICAgICAgICAgIHByaW50KE1BSU5fRVhBTVBMRVMgJSB7J3Byb2cnOiBzZWxmLnByb2dOYW1lfSkKKyAgICAgICAgICAgIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludChzZWxmLl9tYWluX3BhcnNlci5mb3JtYXRfaGVscCgpKQorICAgICAgICAgICAgcHJpbnQoTU9EVUxFX0VYQU1QTEVTICUgeydwcm9nJzogc2VsZi5wcm9nTmFtZX0pCisKICAgICBkZWYgcGFyc2VBcmdzKHNlbGYsIGFyZ3YpOgotICAgICAgICBpZiAoKGxlbihhcmd2KSA+IDEgYW5kIGFyZ3ZbMV0ubG93ZXIoKSA9PSAnZGlzY292ZXInKSBvcgotICAgICAgICAgICAgKGxlbihhcmd2KSA9PSAxIGFuZCBzZWxmLm1vZHVsZSBpcyBOb25lKSk6Ci0gICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsyOl0pCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICBpZiBzZWxmLm1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgbGVuKGFyZ3YpID4gMSBhbmQgYXJndlsxXS5sb3dlcigpID09ICdkaXNjb3Zlcic6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fZGlzY292ZXJ5KGFyZ3ZbMjpdKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5fbWFpbl9wYXJzZXIucGFyc2VfYXJncyhhcmd2WzE6XSwgc2VsZikKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRlc3RzOgorICAgICAgICAgICAgICAgICMgdGhpcyBhbGxvd3MgInB5dGhvbiAtbSB1bml0dGVzdCAtdiIgdG8gc3RpbGwgd29yayBmb3IKKyAgICAgICAgICAgICAgICAjIHRlc3QgZGlzY292ZXJ5LgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShbXSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21haW5fcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0sIHNlbGYpCiAKLSAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0T3B0UGFyc2VyKCkKLSAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3ZbMTpdKQotICAgICAgICBzZWxmLl9zZXRBdHRyaWJ1dGVzRnJvbU9wdGlvbnMob3B0aW9ucykKLQotICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5tb2R1bGUgaXMgTm9uZToKLSAgICAgICAgICAgICMgdGhpcyBhbGxvd3MgInB5dGhvbiAtbSB1bml0dGVzdCAtdiIgdG8gc3RpbGwgd29yayBmb3IKLSAgICAgICAgICAgICMgdGVzdCBkaXNjb3ZlcnkuIFRoaXMgbWVhbnMgLWMgLyAtYiAvIC12IC8gLWYgb3B0aW9ucyB3aWxsCi0gICAgICAgICAgICAjIGJlIGhhbmRsZWQgdHdpY2UsIHdoaWNoIGlzIGhhcm1sZXNzIGJ1dCBub3QgaWRlYWwuCi0gICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsxOl0pCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5kZWZhdWx0VGVzdCBpcyBOb25lOgotICAgICAgICAgICAgIyBjcmVhdGVUZXN0cyB3aWxsIGxvYWQgdGVzdHMgZnJvbSBzZWxmLm1vZHVsZQotICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBOb25lCi0gICAgICAgIGVsaWYgbGVuKGFyZ3MpID4gMDoKLSAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gX2NvbnZlcnRfbmFtZXMoYXJncykKKyAgICAgICAgaWYgc2VsZi50ZXN0czoKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gX2NvbnZlcnRfbmFtZXMoc2VsZi50ZXN0cykKICAgICAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgICAgICAgIyB0byBzdXBwb3J0IHB5dGhvbiAtbSB1bml0dGVzdCAuLi4KICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSA9IE5vbmUKLSAgICAgICAgZWxzZToKKyAgICAgICAgZWxpZiBzZWxmLmRlZmF1bHRUZXN0IGlzIE5vbmU6CisgICAgICAgICAgICAjIGNyZWF0ZVRlc3RzIHdpbGwgbG9hZCB0ZXN0cyBmcm9tIHNlbGYubW9kdWxlCisgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IE5vbmUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuZGVmYXVsdFRlc3QsIHN0cik6CiAgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IChzZWxmLmRlZmF1bHRUZXN0LCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gbGlzdChzZWxmLmRlZmF1bHRUZXN0KQogICAgICAgICBzZWxmLmNyZWF0ZVRlc3RzKCkKIAogICAgIGRlZiBjcmVhdGVUZXN0cyhzZWxmKToKQEAgLTE3NCw3NiArMTQ1LDg0IEBACiAgICAgICAgICAgICBzZWxmLnRlc3QgPSBzZWxmLnRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYudGVzdE5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSkKIAotICAgIGRlZiBfZ2V0T3B0UGFyc2VyKHNlbGYpOgotICAgICAgICBpbXBvcnQgb3B0cGFyc2UKLSAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKLSAgICAgICAgcGFyc2VyLnByb2cgPSBzZWxmLnByb2dOYW1lCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLCBkZXN0PSd2ZXJib3NlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVmVyYm9zZSBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcsIGRlc3Q9J3F1aWV0JywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUXVpZXQgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBkZWYgX2luaXRBcmdQYXJzZXJzKHNlbGYpOgorICAgICAgICBwYXJlbnRfcGFyc2VyID0gc2VsZi5fZ2V0UGFyZW50QXJnUGFyc2VyKCkKKyAgICAgICAgc2VsZi5fbWFpbl9wYXJzZXIgPSBzZWxmLl9nZXRNYWluQXJnUGFyc2VyKHBhcmVudF9wYXJzZXIpCisgICAgICAgIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIgPSBzZWxmLl9nZXREaXNjb3ZlcnlBcmdQYXJzZXIocGFyZW50X3BhcnNlcikKIAotICAgICAgICBpZiBzZWxmLmZhaWxmYXN0ICE9IEZhbHNlOgotICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1mJywgJy0tZmFpbGZhc3QnLCBkZXN0PSdmYWlsZmFzdCcsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTdG9wIG9uIGZpcnN0IGZhaWwgb3IgZXJyb3InLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrICE9IEZhbHNlOgotICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY2F0Y2gnLCBkZXN0PSdjYXRjaGJyZWFrJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NhdGNoIGN0cmwtQyBhbmQgZGlzcGxheSByZXN1bHRzIHNvIGZhcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgICAgICBpZiBzZWxmLmJ1ZmZlciAhPSBGYWxzZToKLSAgICAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYicsICctLWJ1ZmZlcicsIGRlc3Q9J2J1ZmZlcicsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCdWZmZXIgc3Rkb3V0IGFuZCBzdGRlcnIgZHVyaW5nIHRlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgZGVmIF9nZXRQYXJlbnRBcmdQYXJzZXIoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGRlc3Q9J3ZlcmJvc2l0eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVmVyYm9zZSBvdXRwdXQnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgZGVzdD0ndmVyYm9zaXR5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdRdWlldCBvdXRwdXQnKQorCisgICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmFpbGZhc3QnLCBkZXN0PSdmYWlsZmFzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1N0b3Agb24gZmlyc3QgZmFpbCBvciBlcnJvcicpCisgICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYycsICctLWNhdGNoJywgZGVzdD0nY2F0Y2hicmVhaycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NhdGNoIGN0cmwtQyBhbmQgZGlzcGxheSByZXN1bHRzIHNvIGZhcicpCisgICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLmJ1ZmZlciBpcyBOb25lOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1idWZmZXInLCBkZXN0PSdidWZmZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCdWZmZXIgc3Rkb3V0IGFuZCBzdGRlcnIgZHVyaW5nIHRlc3RzJykKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gRmFsc2UKKwogICAgICAgICByZXR1cm4gcGFyc2VyCiAKLSAgICBkZWYgX3NldEF0dHJpYnV0ZXNGcm9tT3B0aW9ucyhzZWxmLCBvcHRpb25zKToKLSAgICAgICAgIyBvbmx5IHNldCBvcHRpb25zIGZyb20gdGhlIHBhcnNpbmcgaGVyZQotICAgICAgICAjIGlmIHRoZXkgd2VyZW4ndCBzZXQgZXhwbGljaXRseSBpbiB0aGUgY29uc3RydWN0b3IKLSAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5mYWlsZmFzdCA9IG9wdGlvbnMuZmFpbGZhc3QKLSAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBvcHRpb25zLmNhdGNoYnJlYWsKLSAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gb3B0aW9ucy5idWZmZXIKKyAgICBkZWYgX2dldE1haW5BcmdQYXJzZXIoc2VsZiwgcGFyZW50KToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgcGFyc2VyLnByb2cgPSBzZWxmLnByb2dOYW1lCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwID0gc2VsZi5fcHJpbnRfaGVscAogCi0gICAgICAgIGlmIG9wdGlvbnMudmVyYm9zZToKLSAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMgotICAgICAgICBlbGlmIG9wdGlvbnMucXVpZXQ6Ci0gICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDAKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgndGVzdHMnLCBuYXJncz0nKicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nYSBsaXN0IG9mIGFueSBudW1iZXIgb2YgdGVzdCBtb2R1bGVzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzZXMgYW5kIHRlc3QgbWV0aG9kcy4nKQogCi0gICAgZGVmIF9hZGREaXNjb3ZlcnlPcHRpb25zKHNlbGYsIHBhcnNlcik6Ci0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXN0YXJ0LWRpcmVjdG9yeScsIGRlc3Q9J3N0YXJ0JywgZGVmYXVsdD0nLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KSIpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBhdHRlcm4nLCBkZXN0PSdwYXR0ZXJuJywgZGVmYXVsdD0ndGVzdCoucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXR0ZXJuIHRvIG1hdGNoIHRlc3RzICgndGVzdCoucHknIGRlZmF1bHQpIikKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0tdG9wLWxldmVsLWRpcmVjdG9yeScsIGRlc3Q9J3RvcCcsIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVG9wIGxldmVsIGRpcmVjdG9yeSBvZiBwcm9qZWN0IChkZWZhdWx0cyB0byBzdGFydCBkaXJlY3RvcnkpJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZGVmIF9nZXREaXNjb3ZlcnlBcmdQYXJzZXIoc2VsZiwgcGFyZW50KToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgcGFyc2VyLnByb2cgPSAnJXMgZGlzY292ZXInICUgc2VsZi5wcm9nTmFtZQorICAgICAgICBwYXJzZXIuZXBpbG9nID0gKCdGb3IgdGVzdCBkaXNjb3ZlcnkgYWxsIHRlc3QgbW9kdWxlcyBtdXN0IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3QuJykKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXN0YXJ0LWRpcmVjdG9yeScsIGRlc3Q9J3N0YXJ0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEaXJlY3RvcnkgdG8gc3RhcnQgZGlzY292ZXJ5ICgnLicgZGVmYXVsdCkiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsICctLXBhdHRlcm4nLCBkZXN0PSdwYXR0ZXJuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXR0ZXJuIHRvIG1hdGNoIHRlc3RzICgndGVzdCoucHknIGRlZmF1bHQpIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10b3AtbGV2ZWwtZGlyZWN0b3J5JywgZGVzdD0ndG9wJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHRzIHRvICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydCBkaXJlY3RvcnkpJykKKyAgICAgICAgZm9yIGFyZyBpbiAoJ3N0YXJ0JywgJ3BhdHRlcm4nLCAndG9wJyk6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KGFyZywgbmFyZ3M9Jz8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorCisgICAgICAgIHJldHVybiBwYXJzZXIKIAogICAgIGRlZiBfZG9fZGlzY292ZXJ5KHNlbGYsIGFyZ3YsIExvYWRlcj1Ob25lKToKLSAgICAgICAgaWYgTG9hZGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICBMb2FkZXIgPSBsYW1iZGE6IHNlbGYudGVzdExvYWRlcgorICAgICAgICBzZWxmLnN0YXJ0ID0gJy4nCisgICAgICAgIHNlbGYucGF0dGVybiA9ICd0ZXN0Ki5weScKKyAgICAgICAgc2VsZi50b3AgPSBOb25lCisgICAgICAgIGlmIGFyZ3YgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIGhhbmRsZSBjb21tYW5kIGxpbmUgYXJncyBmb3IgdGVzdCBkaXNjb3ZlcnkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIGZvciB0ZXN0aW5nCisgICAgICAgICAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICAgICAgc2VsZi5fZGlzY292ZXJ5X3BhcnNlci5wYXJzZV9hcmdzKGFyZ3YsIHNlbGYpCiAKLSAgICAgICAgIyBoYW5kbGUgY29tbWFuZCBsaW5lIGFyZ3MgZm9yIHRlc3QgZGlzY292ZXJ5Ci0gICAgICAgIHNlbGYucHJvZ05hbWUgPSAnJXMgZGlzY292ZXInICUgc2VsZi5wcm9nTmFtZQotICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRPcHRQYXJzZXIoKQotICAgICAgICBzZWxmLl9hZGREaXNjb3ZlcnlPcHRpb25zKHBhcnNlcikKLQotICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMzoKLSAgICAgICAgICAgIHNlbGYudXNhZ2VFeGl0KCkKLQotICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gemlwKCgnc3RhcnQnLCAncGF0dGVybicsICd0b3AnKSwgYXJncyk6Ci0gICAgICAgICAgICBzZXRhdHRyKG9wdGlvbnMsIG5hbWUsIHZhbHVlKQotCi0gICAgICAgIHNlbGYuX3NldEF0dHJpYnV0ZXNGcm9tT3B0aW9ucyhvcHRpb25zKQotCi0gICAgICAgIHN0YXJ0X2RpciA9IG9wdGlvbnMuc3RhcnQKLSAgICAgICAgcGF0dGVybiA9IG9wdGlvbnMucGF0dGVybgotICAgICAgICB0b3BfbGV2ZWxfZGlyID0gb3B0aW9ucy50b3AKLQotICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQotICAgICAgICBzZWxmLnRlc3QgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyLCBwYXR0ZXJuLCB0b3BfbGV2ZWxfZGlyKQorICAgICAgICBsb2FkZXIgPSBzZWxmLnRlc3RMb2FkZXIgaWYgTG9hZGVyIGlzIE5vbmUgZWxzZSBMb2FkZXIoKQorICAgICAgICBzZWxmLnRlc3QgPSBsb2FkZXIuZGlzY292ZXIoc2VsZi5zdGFydCwgc2VsZi5wYXR0ZXJuLCBzZWxmLnRvcCkKIAogICAgIGRlZiBydW5UZXN0cyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L21vY2sucHkgYi9MaWIvdW5pdHRlc3QvbW9jay5weQppbmRleCAwNzM4NjlhLi44Yjc2NTAzIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvbW9jay5weQorKysgYi9MaWIvdW5pdHRlc3QvbW9jay5weQpAQCAtMjcsNyArMjcsNyBAQAogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBwcHJpbnQKIGltcG9ydCBzeXMKLWZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzLCBwYXJ0aWFsCiAKIAogQmFzZUV4Y2VwdGlvbnMgPSAoQmFzZUV4Y2VwdGlvbiwpCkBAIC02Niw1NSArNjYsNDUgQEAKICkKIAogCi1kZWYgX2dldHNpZ25hdHVyZShmdW5jLCBza2lwZmlyc3QsIGluc3RhbmNlPUZhbHNlKToKLSAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHR5cGUpIGFuZCBub3QgaW5zdGFuY2U6CitkZWYgX2dldF9zaWduYXR1cmVfb2JqZWN0KGZ1bmMsIGFzX2luc3RhbmNlLCBlYXRfc2VsZik6CisgICAgIiIiCisgICAgR2l2ZW4gYW4gYXJiaXRyYXJ5LCBwb3NzaWJseSBjYWxsYWJsZSBvYmplY3QsIHRyeSB0byBjcmVhdGUgYSBzdWl0YWJsZQorICAgIHNpZ25hdHVyZSBvYmplY3QuCisgICAgUmV0dXJuIGEgKHJlZHVjZWQgZnVuYywgc2lnbmF0dXJlKSB0dXBsZSwgb3IgTm9uZS4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHR5cGUpIGFuZCBub3QgYXNfaW5zdGFuY2U6CisgICAgICAgICMgSWYgaXQncyBhIHR5cGUgYW5kIHNob3VsZCBiZSBtb2RlbGxlZCBhcyBhIHR5cGUsIHVzZSBfX2luaXRfXy4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnVuYyA9IGZ1bmMuX19pbml0X18KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNraXBmaXJzdCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgU2tpcCB0aGUgYHNlbGZgIGFyZ3VtZW50IGluIF9faW5pdF9fCisgICAgICAgIGVhdF9zZWxmID0gVHJ1ZQogICAgIGVsaWYgbm90IGlzaW5zdGFuY2UoZnVuYywgRnVuY3Rpb25UeXBlcyk6Ci0gICAgICAgICMgZm9yIGNsYXNzZXMgd2hlcmUgaW5zdGFuY2UgaXMgVHJ1ZSB3ZSBlbmQgdXAgaGVyZSB0b28KKyAgICAgICAgIyBJZiB3ZSByZWFsbHkgd2FudCB0byBtb2RlbCBhbiBpbnN0YW5jZSBvZiB0aGUgcGFzc2VkIHR5cGUsCisgICAgICAgICMgX19jYWxsX18gc2hvdWxkIGJlIGxvb2tlZCB1cCwgbm90IF9faW5pdF9fLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmdW5jID0gZnVuYy5fX2NhbGxfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBpZiBlYXRfc2VsZjoKKyAgICAgICAgc2lnX2Z1bmMgPSBwYXJ0aWFsKGZ1bmMsIE5vbmUpCisgICAgZWxzZToKKyAgICAgICAgc2lnX2Z1bmMgPSBmdW5jCiAgICAgdHJ5OgotICAgICAgICBhcmdzcGVjID0gaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhmdW5jKQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICMgQyBmdW5jdGlvbiAvIG1ldGhvZCwgcG9zc2libHkgaW5oZXJpdGVkIG9iamVjdCgpLl9faW5pdF9fCi0gICAgICAgIHJldHVybgotCi0gICAgcmVnYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHksIGt3b25seWRlZiwgYW5uID0gYXJnc3BlYwotCi0KLSAgICAjIGluc3RhbmNlIG1ldGhvZHMgYW5kIGNsYXNzbWV0aG9kcyBuZWVkIHRvIGxvc2UgdGhlIHNlbGYgYXJndW1lbnQKLSAgICBpZiBnZXRhdHRyKGZ1bmMsICdfX3NlbGZfXycsIE5vbmUpIGlzIG5vdCBOb25lOgotICAgICAgICByZWdhcmdzID0gcmVnYXJnc1sxOl0KLSAgICBpZiBza2lwZmlyc3Q6Ci0gICAgICAgICMgdGhpcyBjb25kaXRpb24gYW5kIHRoZSBhYm92ZSBvbmUgYXJlIG5ldmVyIGJvdGggVHJ1ZSAtIHdoeT8KLSAgICAgICAgcmVnYXJncyA9IHJlZ2FyZ3NbMTpdCi0KLSAgICBzaWduYXR1cmUgPSBpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoCi0gICAgICAgIHJlZ2FyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywKLSAgICAgICAga3dvbmx5LCBrd29ubHlkZWYsIGFubiwgZm9ybWF0dmFsdWU9bGFtYmRhIHZhbHVlOiAiIikKLSAgICByZXR1cm4gc2lnbmF0dXJlWzE6LTFdLCBmdW5jCisgICAgICAgIHJldHVybiBmdW5jLCBpbnNwZWN0LnNpZ25hdHVyZShzaWdfZnVuYykKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgIyBDZXJ0YWluIGNhbGxhYmxlIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGluc3BlY3Quc2lnbmF0dXJlKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKIAogCiBkZWYgX2NoZWNrX3NpZ25hdHVyZShmdW5jLCBtb2NrLCBza2lwZmlyc3QsIGluc3RhbmNlPUZhbHNlKToKLSAgICBpZiBub3QgX2NhbGxhYmxlKGZ1bmMpOgorICAgIHNpZyA9IF9nZXRfc2lnbmF0dXJlX29iamVjdChmdW5jLCBpbnN0YW5jZSwgc2tpcGZpcnN0KQorICAgIGlmIHNpZyBpcyBOb25lOgogICAgICAgICByZXR1cm4KLQotICAgIHJlc3VsdCA9IF9nZXRzaWduYXR1cmUoZnVuYywgc2tpcGZpcnN0LCBpbnN0YW5jZSkKLSAgICBpZiByZXN1bHQgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuCi0gICAgc2lnbmF0dXJlLCBmdW5jID0gcmVzdWx0Ci0KLSAgICAjIGNhbid0IHVzZSBzZWxmIGJlY2F1c2UgInNlbGYiIGlzIGNvbW1vbiBhcyBhbiBhcmd1bWVudCBuYW1lCi0gICAgIyB1bmZvcnR1bmF0ZWx5IGV2ZW4gbm90IGluIHRoZSBmaXJzdCBwbGFjZQotICAgIHNyYyA9ICJsYW1iZGEgX21vY2tfc2VsZiwgJXM6IE5vbmUiICUgc2lnbmF0dXJlCi0gICAgY2hlY2tzaWcgPSBldmFsKHNyYywge30pCisgICAgZnVuYywgc2lnID0gc2lnCisgICAgZGVmIGNoZWNrc2lnKF9tb2NrX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNpZy5iaW5kKCphcmdzLCAqKmt3YXJncykKICAgICBfY29weV9mdW5jX2RldGFpbHMoZnVuYywgY2hlY2tzaWcpCiAgICAgdHlwZShtb2NrKS5fbW9ja19jaGVja19zaWcgPSBjaGVja3NpZwogCkBAIC0xMjIsMTEgKzExMiwyNCBAQAogZGVmIF9jb3B5X2Z1bmNfZGV0YWlscyhmdW5jLCBmdW5jb3B5KToKICAgICBmdW5jb3B5Ll9fbmFtZV9fID0gZnVuYy5fX25hbWVfXwogICAgIGZ1bmNvcHkuX19kb2NfXyA9IGZ1bmMuX19kb2NfXworICAgIHRyeToKKyAgICAgICAgZnVuY29weS5fX3RleHRfc2lnbmF0dXJlX18gPSBmdW5jLl9fdGV4dF9zaWduYXR1cmVfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcwogICAgICMgd2UgZXhwbGljaXRseSBkb24ndCBjb3B5IGZ1bmMuX19kaWN0X18gaW50byB0aGlzIGNvcHkgYXMgaXQgd291bGQKICAgICAjIGV4cG9zZSBvcmlnaW5hbCBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIG1vY2tlZAotICAgIGZ1bmNvcHkuX19tb2R1bGVfXyA9IGZ1bmMuX19tb2R1bGVfXwotICAgIGZ1bmNvcHkuX19kZWZhdWx0c19fID0gZnVuYy5fX2RlZmF1bHRzX18KLSAgICBmdW5jb3B5Ll9fa3dkZWZhdWx0c19fID0gZnVuYy5fX2t3ZGVmYXVsdHNfXworICAgIHRyeToKKyAgICAgICAgZnVuY29weS5fX21vZHVsZV9fID0gZnVuYy5fX21vZHVsZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICBmdW5jb3B5Ll9fZGVmYXVsdHNfXyA9IGZ1bmMuX19kZWZhdWx0c19fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICBmdW5jb3B5Ll9fa3dkZWZhdWx0c19fID0gZnVuYy5fX2t3ZGVmYXVsdHNfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcwogCiAKIGRlZiBfY2FsbGFibGUob2JqKToKQEAgLTE2NiwxNSArMTY5LDEyIEBACiAgICAgICAgIHJldHVybgogCiAgICAgc2tpcGZpcnN0ID0gaXNpbnN0YW5jZShvcmlnaW5hbCwgdHlwZSkKLSAgICByZXN1bHQgPSBfZ2V0c2lnbmF0dXJlKG9yaWdpbmFsLCBza2lwZmlyc3QsIGluc3RhbmNlKQorICAgIHJlc3VsdCA9IF9nZXRfc2lnbmF0dXJlX29iamVjdChvcmlnaW5hbCwgaW5zdGFuY2UsIHNraXBmaXJzdCkKICAgICBpZiByZXN1bHQgaXMgTm9uZToKLSAgICAgICAgIyB3YXMgYSBDIGZ1bmN0aW9uIChlLmcuIG9iamVjdCgpLl9faW5pdF9fICkgdGhhdCBjYW4ndCBiZSBtb2NrZWQKICAgICAgICAgcmV0dXJuCi0KLSAgICBzaWduYXR1cmUsIGZ1bmMgPSByZXN1bHQKLQotICAgIHNyYyA9ICJsYW1iZGEgJXM6IE5vbmUiICUgc2lnbmF0dXJlCi0gICAgY2hlY2tzaWcgPSBldmFsKHNyYywge30pCisgICAgZnVuYywgc2lnID0gcmVzdWx0CisgICAgZGVmIGNoZWNrc2lnKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNpZy5iaW5kKCphcmdzLCAqKmt3YXJncykKICAgICBfY29weV9mdW5jX2RldGFpbHMoZnVuYywgY2hlY2tzaWcpCiAKICAgICBuYW1lID0gb3JpZ2luYWwuX19uYW1lX18KQEAgLTM2OCw3ICszNjgsNyBAQAogICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgICAgIHNlbGYsIHNwZWM9Tm9uZSwgd3JhcHM9Tm9uZSwgbmFtZT1Ob25lLCBzcGVjX3NldD1Ob25lLAogICAgICAgICAgICAgcGFyZW50PU5vbmUsIF9zcGVjX3N0YXRlPU5vbmUsIF9uZXdfbmFtZT0nJywgX25ld19wYXJlbnQ9Tm9uZSwKLSAgICAgICAgICAgICoqa3dhcmdzCisgICAgICAgICAgICBfc3BlY19hc19pbnN0YW5jZT1GYWxzZSwgX2VhdF9zZWxmPU5vbmUsICoqa3dhcmdzCiAgICAgICAgICk6CiAgICAgICAgIGlmIF9uZXdfcGFyZW50IGlzIE5vbmU6CiAgICAgICAgICAgICBfbmV3X3BhcmVudCA9IHBhcmVudApAQCAtMzgyLDggKzM4MiwxMCBAQAogICAgICAgICBpZiBzcGVjX3NldCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNwZWMgPSBzcGVjX3NldAogICAgICAgICAgICAgc3BlY19zZXQgPSBUcnVlCisgICAgICAgIGlmIF9lYXRfc2VsZiBpcyBOb25lOgorICAgICAgICAgICAgX2VhdF9zZWxmID0gcGFyZW50IGlzIG5vdCBOb25lCiAKLSAgICAgICAgc2VsZi5fbW9ja19hZGRfc3BlYyhzcGVjLCBzcGVjX3NldCkKKyAgICAgICAgc2VsZi5fbW9ja19hZGRfc3BlYyhzcGVjLCBzcGVjX3NldCwgX3NwZWNfYXNfaW5zdGFuY2UsIF9lYXRfc2VsZikKIAogICAgICAgICBfX2RpY3RfX1snX21vY2tfY2hpbGRyZW4nXSA9IHt9CiAgICAgICAgIF9fZGljdF9fWydfbW9ja193cmFwcyddID0gd3JhcHMKQEAgLTQyOCwyMCArNDMwLDI2IEBACiAgICAgICAgIHNlbGYuX21vY2tfYWRkX3NwZWMoc3BlYywgc3BlY19zZXQpCiAKIAotICAgIGRlZiBfbW9ja19hZGRfc3BlYyhzZWxmLCBzcGVjLCBzcGVjX3NldCk6CisgICAgZGVmIF9tb2NrX2FkZF9zcGVjKHNlbGYsIHNwZWMsIHNwZWNfc2V0LCBfc3BlY19hc19pbnN0YW5jZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX2VhdF9zZWxmPUZhbHNlKToKICAgICAgICAgX3NwZWNfY2xhc3MgPSBOb25lCisgICAgICAgIF9zcGVjX3NpZ25hdHVyZSA9IE5vbmUKIAogICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lIGFuZCBub3QgX2lzX2xpc3Qoc3BlYyk6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNwZWMsIHR5cGUpOgogICAgICAgICAgICAgICAgIF9zcGVjX2NsYXNzID0gc3BlYwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBfc3BlY19jbGFzcyA9IF9nZXRfY2xhc3Moc3BlYykKKyAgICAgICAgICAgIHJlcyA9IF9nZXRfc2lnbmF0dXJlX29iamVjdChzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zcGVjX2FzX2luc3RhbmNlLCBfZWF0X3NlbGYpCisgICAgICAgICAgICBfc3BlY19zaWduYXR1cmUgPSByZXMgYW5kIHJlc1sxXQogCiAgICAgICAgICAgICBzcGVjID0gZGlyKHNwZWMpCiAKICAgICAgICAgX19kaWN0X18gPSBzZWxmLl9fZGljdF9fCiAgICAgICAgIF9fZGljdF9fWydfc3BlY19jbGFzcyddID0gX3NwZWNfY2xhc3MKICAgICAgICAgX19kaWN0X19bJ19zcGVjX3NldCddID0gc3BlY19zZXQKKyAgICAgICAgX19kaWN0X19bJ19zcGVjX3NpZ25hdHVyZSddID0gX3NwZWNfc2lnbmF0dXJlCiAgICAgICAgIF9fZGljdF9fWydfbW9ja19tZXRob2RzJ10gPSBzcGVjCiAKIApAQCAtNjk1LDcgKzcwMyw2IEBACiAgICAgICAgIHNlbGYuX21vY2tfY2hpbGRyZW5bbmFtZV0gPSBfZGVsZXRlZAogCiAKLQogICAgIGRlZiBfZm9ybWF0X21vY2tfY2FsbF9zaWduYXR1cmUoc2VsZiwgYXJncywga3dhcmdzKToKICAgICAgICAgbmFtZSA9IHNlbGYuX21vY2tfbmFtZSBvciAnbW9jaycKICAgICAgICAgcmV0dXJuIF9mb3JtYXRfY2FsbF9zaWduYXR1cmUobmFtZSwgYXJncywga3dhcmdzKQpAQCAtNzExLDYgKzcxOCwyOCBAQAogICAgICAgICByZXR1cm4gbWVzc2FnZSAlIChleHBlY3RlZF9zdHJpbmcsIGFjdHVhbF9zdHJpbmcpCiAKIAorICAgIGRlZiBfY2FsbF9tYXRjaGVyKHNlbGYsIF9jYWxsKToKKyAgICAgICAgIiIiCisgICAgICAgIEdpdmVuIGEgY2FsbCAob3Igc2ltcGx5IGEgKGFyZ3MsIGt3YXJncykgdHVwbGUpLCByZXR1cm4gYQorICAgICAgICBjb21wYXJpc29uIGtleSBzdWl0YWJsZSBmb3IgbWF0Y2hpbmcgd2l0aCBvdGhlciBjYWxscy4KKyAgICAgICAgVGhpcyBpcyBhIGJlc3QgZWZmb3J0IG1ldGhvZCB3aGljaCByZWxpZXMgb24gdGhlIHNwZWMncyBzaWduYXR1cmUsCisgICAgICAgIGlmIGF2YWlsYWJsZSwgb3IgZmFsbHMgYmFjayBvbiB0aGUgYXJndW1lbnRzIHRoZW1zZWx2ZXMuCisgICAgICAgICIiIgorICAgICAgICBzaWcgPSBzZWxmLl9zcGVjX3NpZ25hdHVyZQorICAgICAgICBpZiBzaWcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBsZW4oX2NhbGwpID09IDI6CisgICAgICAgICAgICAgICAgbmFtZSA9ICcnCisgICAgICAgICAgICAgICAgYXJncywga3dhcmdzID0gX2NhbGwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSwgYXJncywga3dhcmdzID0gX2NhbGwKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSwgc2lnLmJpbmQoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJldHVybiBlLndpdGhfdHJhY2ViYWNrKE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gX2NhbGwKKworCiAgICAgZGVmIGFzc2VydF9jYWxsZWRfd2l0aChfbW9ja19zZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAiIiJhc3NlcnQgdGhhdCB0aGUgbW9jayB3YXMgY2FsbGVkIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuCiAKQEAgLTcyMSw5ICs3NTAsMTQgQEAKICAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZm9ybWF0X21vY2tfY2FsbF9zaWduYXR1cmUoYXJncywga3dhcmdzKQogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0V4cGVjdGVkIGNhbGw6ICVzXG5Ob3QgY2FsbGVkJyAlIChleHBlY3RlZCwpKQogCi0gICAgICAgIGlmIHNlbGYuY2FsbF9hcmdzICE9IChhcmdzLCBrd2FyZ3MpOgorICAgICAgICBkZWYgX2Vycm9yX21lc3NhZ2UoKToKICAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdF9tb2NrX2ZhaWx1cmVfbWVzc2FnZShhcmdzLCBrd2FyZ3MpCi0gICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihtc2cpCisgICAgICAgICAgICByZXR1cm4gbXNnCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fY2FsbF9tYXRjaGVyKChhcmdzLCBrd2FyZ3MpKQorICAgICAgICBhY3R1YWwgPSBzZWxmLl9jYWxsX21hdGNoZXIoc2VsZi5jYWxsX2FyZ3MpCisgICAgICAgIGlmIGV4cGVjdGVkICE9IGFjdHVhbDoKKyAgICAgICAgICAgIGNhdXNlID0gZXhwZWN0ZWQgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgRXhjZXB0aW9uKSBlbHNlIE5vbmUKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKF9lcnJvcl9tZXNzYWdlKCkpIGZyb20gY2F1c2UKIAogCiAgICAgZGVmIGFzc2VydF9jYWxsZWRfb25jZV93aXRoKF9tb2NrX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CkBAIC03NDcsMTggKzc4MSwyMSBAQAogCiAgICAgICAgIElmIGBhbnlfb3JkZXJgIGlzIFRydWUgdGhlbiB0aGUgY2FsbHMgY2FuIGJlIGluIGFueSBvcmRlciwgYnV0CiAgICAgICAgIHRoZXkgbXVzdCBhbGwgYXBwZWFyIGluIGBtb2NrX2NhbGxzYC4iIiIKKyAgICAgICAgZXhwZWN0ZWQgPSBbc2VsZi5fY2FsbF9tYXRjaGVyKGMpIGZvciBjIGluIGNhbGxzXQorICAgICAgICBjYXVzZSA9IGV4cGVjdGVkIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIEV4Y2VwdGlvbikgZWxzZSBOb25lCisgICAgICAgIGFsbF9jYWxscyA9IF9DYWxsTGlzdChzZWxmLl9jYWxsX21hdGNoZXIoYykgZm9yIGMgaW4gc2VsZi5tb2NrX2NhbGxzKQogICAgICAgICBpZiBub3QgYW55X29yZGVyOgotICAgICAgICAgICAgaWYgY2FsbHMgbm90IGluIHNlbGYubW9ja19jYWxsczoKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkIG5vdCBpbiBhbGxfY2FsbHM6CiAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICdDYWxscyBub3QgZm91bmQuXG5FeHBlY3RlZDogJXJcbicKICAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbDogJXInICUgKGNhbGxzLCBzZWxmLm1vY2tfY2FsbHMpCi0gICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkgZnJvbSBjYXVzZQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgYWxsX2NhbGxzID0gbGlzdChzZWxmLm1vY2tfY2FsbHMpCisgICAgICAgIGFsbF9jYWxscyA9IGxpc3QoYWxsX2NhbGxzKQogCiAgICAgICAgIG5vdF9mb3VuZCA9IFtdCi0gICAgICAgIGZvciBrYWxsIGluIGNhbGxzOgorICAgICAgICBmb3Iga2FsbCBpbiBleHBlY3RlZDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBhbGxfY2FsbHMucmVtb3ZlKGthbGwpCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKQEAgLTc2Niw3ICs4MDMsNyBAQAogICAgICAgICBpZiBub3RfZm91bmQ6CiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKICAgICAgICAgICAgICAgICAnJXIgbm90IGFsbCBmb3VuZCBpbiBjYWxsIGxpc3QnICUgKHR1cGxlKG5vdF9mb3VuZCksKQotICAgICAgICAgICAgKQorICAgICAgICAgICAgKSBmcm9tIGNhdXNlCiAKIAogICAgIGRlZiBhc3NlcnRfYW55X2NhbGwoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTc3NSwxMiArODEyLDE0IEBACiAgICAgICAgIFRoZSBhc3NlcnQgcGFzc2VzIGlmIHRoZSBtb2NrIGhhcyAqZXZlciogYmVlbiBjYWxsZWQsIHVubGlrZQogICAgICAgICBgYXNzZXJ0X2NhbGxlZF93aXRoYCBhbmQgYGFzc2VydF9jYWxsZWRfb25jZV93aXRoYCB0aGF0IG9ubHkgcGFzcyBpZgogICAgICAgICB0aGUgY2FsbCBpcyB0aGUgbW9zdCByZWNlbnQgb25lLiIiIgotICAgICAgICBrYWxsID0gY2FsbCgqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGlmIGthbGwgbm90IGluIHNlbGYuY2FsbF9hcmdzX2xpc3Q6CisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fY2FsbF9tYXRjaGVyKChhcmdzLCBrd2FyZ3MpKQorICAgICAgICBhY3R1YWwgPSBbc2VsZi5fY2FsbF9tYXRjaGVyKGMpIGZvciBjIGluIHNlbGYuY2FsbF9hcmdzX2xpc3RdCisgICAgICAgIGlmIGV4cGVjdGVkIG5vdCBpbiBhY3R1YWw6CisgICAgICAgICAgICBjYXVzZSA9IGV4cGVjdGVkIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIEV4Y2VwdGlvbikgZWxzZSBOb25lCiAgICAgICAgICAgICBleHBlY3RlZF9zdHJpbmcgPSBzZWxmLl9mb3JtYXRfbW9ja19jYWxsX3NpZ25hdHVyZShhcmdzLCBrd2FyZ3MpCiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKICAgICAgICAgICAgICAgICAnJXMgY2FsbCBub3QgZm91bmQnICUgZXhwZWN0ZWRfc3RyaW5nCi0gICAgICAgICAgICApCisgICAgICAgICAgICApIGZyb20gY2F1c2UKIAogCiAgICAgZGVmIF9nZXRfY2hpbGRfbW9jayhzZWxmLCAqKmt3KToKQEAgLTg1MCwxMSArODg5LDEyIEBACiAgICAgICAgIHNlbGYgPSBfbW9ja19zZWxmCiAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQogICAgICAgICBzZWxmLmNhbGxfY291bnQgKz0gMQotICAgICAgICBzZWxmLmNhbGxfYXJncyA9IF9DYWxsKChhcmdzLCBrd2FyZ3MpLCB0d289VHJ1ZSkKLSAgICAgICAgc2VsZi5jYWxsX2FyZ3NfbGlzdC5hcHBlbmQoX0NhbGwoKGFyZ3MsIGt3YXJncyksIHR3bz1UcnVlKSkKLQogICAgICAgICBfbmV3X25hbWUgPSBzZWxmLl9tb2NrX25ld19uYW1lCiAgICAgICAgIF9uZXdfcGFyZW50ID0gc2VsZi5fbW9ja19uZXdfcGFyZW50CisKKyAgICAgICAgX2NhbGwgPSBfQ2FsbCgoYXJncywga3dhcmdzKSwgdHdvPVRydWUpCisgICAgICAgIHNlbGYuY2FsbF9hcmdzID0gX2NhbGwKKyAgICAgICAgc2VsZi5jYWxsX2FyZ3NfbGlzdC5hcHBlbmQoX2NhbGwpCiAgICAgICAgIHNlbGYubW9ja19jYWxscy5hcHBlbmQoX0NhbGwoKCcnLCBhcmdzLCBrd2FyZ3MpKSkKIAogICAgICAgICBzZWVuID0gc2V0KCkKQEAgLTkwOSw4ICs5NDksNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgICAgICAgICAgcmV0X3ZhbCA9IGVmZmVjdCgqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICAgICBpZiByZXRfdmFsIGlzIERFRkFVTFQ6Ci0gICAgICAgICAgICAgICAgcmV0X3ZhbCA9IHNlbGYucmV0dXJuX3ZhbHVlCiAKICAgICAgICAgaWYgKHNlbGYuX21vY2tfd3JhcHMgaXMgbm90IE5vbmUgYW5kCiAgICAgICAgICAgICAgc2VsZi5fbW9ja19yZXR1cm5fdmFsdWUgaXMgREVGQVVMVCk6CkBAIC0yMDMwLDYgKzIwNjgsOCBAQAogICAgIGVsaWYgc3BlYyBpcyBOb25lOgogICAgICAgICAjIE5vbmUgd2UgbW9jayB3aXRoIGEgbm9ybWFsIG1vY2sgd2l0aG91dCBhIHNwZWMKICAgICAgICAgX2t3YXJncyA9IHt9CisgICAgaWYgX2t3YXJncyBhbmQgaW5zdGFuY2U6CisgICAgICAgIF9rd2FyZ3NbJ19zcGVjX2FzX2luc3RhbmNlJ10gPSBUcnVlCiAKICAgICBfa3dhcmdzLnVwZGF0ZShrd2FyZ3MpCiAKQEAgLTIwOTYsMTAgKzIxMzYsMTIgQEAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3BlYywgRnVuY3Rpb25UeXBlcyk6CiAgICAgICAgICAgICAgICAgcGFyZW50ID0gbW9jay5tb2NrCiAKLSAgICAgICAgICAgIG5ldyA9IE1hZ2ljTW9jayhwYXJlbnQ9cGFyZW50LCBuYW1lPWVudHJ5LCBfbmV3X25hbWU9ZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ld19wYXJlbnQ9cGFyZW50LCAqKmt3YXJncykKLSAgICAgICAgICAgIG1vY2suX21vY2tfY2hpbGRyZW5bZW50cnldID0gbmV3CiAgICAgICAgICAgICBza2lwZmlyc3QgPSBfbXVzdF9za2lwKHNwZWMsIGVudHJ5LCBpc190eXBlKQorICAgICAgICAgICAga3dhcmdzWydfZWF0X3NlbGYnXSA9IHNraXBmaXJzdAorICAgICAgICAgICAgbmV3ID0gTWFnaWNNb2NrKHBhcmVudD1wYXJlbnQsIG5hbWU9ZW50cnksIF9uZXdfbmFtZT1lbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmV3X3BhcmVudD1wYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgICAgICAgICBtb2NrLl9tb2NrX2NoaWxkcmVuW2VudHJ5XSA9IG5ldwogICAgICAgICAgICAgX2NoZWNrX3NpZ25hdHVyZShvcmlnaW5hbCwgbmV3LCBza2lwZmlyc3Q9c2tpcGZpcnN0KQogCiAgICAgICAgICMgc28gZnVuY3Rpb25zIGNyZWF0ZWQgd2l0aCBfc2V0X3NpZ25hdHVyZSBiZWNvbWUgaW5zdGFuY2UgYXR0cmlidXRlcywKQEAgLTIxMTMsNiArMjE1NSwxMCBAQAogCiAKIGRlZiBfbXVzdF9za2lwKHNwZWMsIGVudHJ5LCBpc190eXBlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gd2hldGhlciB3ZSBzaG91bGQgc2tpcCB0aGUgZmlyc3QgYXJndW1lbnQgb24gc3BlYydzIGBlbnRyeWAKKyAgICBhdHRyaWJ1dGUuCisgICAgIiIiCiAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc3BlYywgdHlwZSk6CiAgICAgICAgIGlmIGVudHJ5IGluIGdldGF0dHIoc3BlYywgJ19fZGljdF9fJywge30pOgogICAgICAgICAgICAgIyBpbnN0YW5jZSBhdHRyaWJ1dGUgLSBzaG91bGRuJ3Qgc2tpcApAQCAtMjEyNSw3ICsyMTcxLDEyIEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgKHN0YXRpY21ldGhvZCwgY2xhc3NtZXRob2QpKToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gaXNfdHlwZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZ2V0YXR0cihyZXN1bHQsICdfX2dldF9fJywgTm9uZSksIE1ldGhvZFdyYXBwZXJUeXBlcyk6CisgICAgICAgICAgICAjIE5vcm1hbCBtZXRob2QgPT4gc2tpcCBpZiBsb29rZWQgdXAgb24gdHlwZQorICAgICAgICAgICAgIyAoaWYgbG9va2VkIHVwIG9uIGluc3RhbmNlLCBzZWxmIGlzIGFscmVhZHkgc2tpcHBlZCkKKyAgICAgICAgICAgIHJldHVybiBpc190eXBlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICMgc2hvdWxkbid0IGdldCBoZXJlIHVubGVzcyBmdW5jdGlvbiBpcyBhIGR5bmFtaWNhbGx5IHByb3ZpZGVkIGF0dHJpYnV0ZQogICAgICMgWFhYWCB1bnRlc3RlZCBiZWhhdmlvdXIKQEAgLTIxNTksOSArMjIxMCwzMSBAQAogICAgIHR5cGUoQU5ZLl9fZXFfXyksCiApCiAKK01ldGhvZFdyYXBwZXJUeXBlcyA9ICgKKyAgICB0eXBlKEFOWS5fX2VxX18uX19nZXRfXyksCispCisKIAogZmlsZV9zcGVjID0gTm9uZQogCitkZWYgX2l0ZXJhdGVfcmVhZF9kYXRhKHJlYWRfZGF0YSk6CisgICAgIyBIZWxwZXIgZm9yIG1vY2tfb3BlbjoKKyAgICAjIFJldHJpZXZlIGxpbmVzIGZyb20gcmVhZF9kYXRhIHZpYSBhIGdlbmVyYXRvciBzbyB0aGF0IHNlcGFyYXRlIGNhbGxzIHRvCisgICAgIyByZWFkbGluZSwgcmVhZCwgYW5kIHJlYWRsaW5lcyBhcmUgcHJvcGVybHkgaW50ZXJsZWF2ZWQKKyAgICBkYXRhX2FzX2xpc3QgPSBbJ3t9XG4nLmZvcm1hdChsKSBmb3IgbCBpbiByZWFkX2RhdGEuc3BsaXQoJ1xuJyldCisKKyAgICBpZiBkYXRhX2FzX2xpc3RbLTFdID09ICdcbic6CisgICAgICAgICMgSWYgdGhlIGxhc3QgbGluZSBlbmRlZCBpbiBhIG5ld2xpbmUsIHRoZSBsaXN0IGNvbXByZWhlbnNpb24gd2lsbCBoYXZlIGFuCisgICAgICAgICMgZXh0cmEgZW50cnkgdGhhdCdzIGp1c3QgYSBuZXdsaW5lLiAgUmVtb3ZlIHRoaXMuCisgICAgICAgIGRhdGFfYXNfbGlzdCA9IGRhdGFfYXNfbGlzdFs6LTFdCisgICAgZWxzZToKKyAgICAgICAgIyBJZiB0aGVyZSB3YXNuJ3QgYW4gZXh0cmEgbmV3bGluZSBieSBpdHNlbGYsIHRoZW4gdGhlIGZpbGUgYmVpbmcKKyAgICAgICAgIyBlbXVsYXRlZCBkb2Vzbid0IGhhdmUgYSBuZXdsaW5lIHRvIGVuZCB0aGUgbGFzdCBsaW5lICByZW1vdmUgdGhlCisgICAgICAgICMgbmV3bGluZSB0aGF0IG91ciBuYWl2ZSBmb3JtYXQoKSBhZGRlZAorICAgICAgICBkYXRhX2FzX2xpc3RbLTFdID0gZGF0YV9hc19saXN0Wy0xXVs6LTFdCisKKyAgICBmb3IgbGluZSBpbiBkYXRhX2FzX2xpc3Q6CisgICAgICAgIHlpZWxkIGxpbmUKIAogZGVmIG1vY2tfb3Blbihtb2NrPU5vbmUsIHJlYWRfZGF0YT0nJyk6CiAgICAgIiIiCkBAIC0yMTcyLDkgKzIyNDUsMjcgQEAKICAgICBkZWZhdWx0KSB0aGVuIGEgYE1hZ2ljTW9ja2Agd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UsIHdpdGggdGhlIEFQSSBsaW1pdGVkCiAgICAgdG8gbWV0aG9kcyBvciBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBvbiBzdGFuZGFyZCBmaWxlIGhhbmRsZXMuCiAKLSAgICBgcmVhZF9kYXRhYCBpcyBhIHN0cmluZyBmb3IgdGhlIGByZWFkYCBtZXRob2Qgb2YgdGhlIGZpbGUgaGFuZGxlIHRvIHJldHVybi4KLSAgICBUaGlzIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LgorICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgYHJlYWRgIG1ldGhvZGRsaW5lYCwgYW5kIGByZWFkbGluZXNgIG9mIHRoZQorICAgIGZpbGUgaGFuZGxlIHRvIHJldHVybi4gIFRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuCiAgICAgIiIiCisgICAgZGVmIF9yZWFkbGluZXNfc2lkZV9lZmZlY3QoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUKKyAgICAgICAgcmV0dXJuIGxpc3QoX2RhdGEpCisKKyAgICBkZWYgX3JlYWRfc2lkZV9lZmZlY3QoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZQorICAgICAgICByZXR1cm4gJycuam9pbihfZGF0YSkKKworICAgIGRlZiBfcmVhZGxpbmVfc2lkZV9lZmZlY3QoKToKKyAgICAgICAgaWYgaGFuZGxlLnJlYWRsaW5lLnJldHVybl92YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgeWllbGQgaGFuZGxlLnJlYWRsaW5lLnJldHVybl92YWx1ZQorICAgICAgICBmb3IgbGluZSBpbiBfZGF0YToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworCiAgICAgZ2xvYmFsIGZpbGVfc3BlYwogICAgIGlmIGZpbGVfc3BlYyBpcyBOb25lOgogICAgICAgICBpbXBvcnQgX2lvCkBAIC0yMTg0LDkgKzIyNzUsMTggQEAKICAgICAgICAgbW9jayA9IE1hZ2ljTW9jayhuYW1lPSdvcGVuJywgc3BlYz1vcGVuKQogCiAgICAgaGFuZGxlID0gTWFnaWNNb2NrKHNwZWM9ZmlsZV9zcGVjKQotICAgIGhhbmRsZS53cml0ZS5yZXR1cm5fdmFsdWUgPSBOb25lCiAgICAgaGFuZGxlLl9fZW50ZXJfXy5yZXR1cm5fdmFsdWUgPSBoYW5kbGUKLSAgICBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUgPSByZWFkX2RhdGEKKworICAgIF9kYXRhID0gX2l0ZXJhdGVfcmVhZF9kYXRhKHJlYWRfZGF0YSkKKworICAgIGhhbmRsZS53cml0ZS5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgIGhhbmRsZS5yZWFkbGluZS5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUgPSBOb25lCisKKyAgICBoYW5kbGUucmVhZC5zaWRlX2VmZmVjdCA9IF9yZWFkX3NpZGVfZWZmZWN0CisgICAgaGFuZGxlLnJlYWRsaW5lLnNpZGVfZWZmZWN0ID0gX3JlYWRsaW5lX3NpZGVfZWZmZWN0KCkKKyAgICBoYW5kbGUucmVhZGxpbmVzLnNpZGVfZWZmZWN0ID0gX3JlYWRsaW5lc19zaWRlX2VmZmVjdAogCiAgICAgbW9jay5yZXR1cm5fdmFsdWUgPSBoYW5kbGUKICAgICByZXR1cm4gbW9jawpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weSBiL0xpYi91bml0dGVzdC9yZXN1bHQucHkKaW5kZXggOTdlNTQyNi4uYjk2N2E2MCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weQorKysgYi9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5CkBAIC0xMjEsNiArMTIxLDIyIEBACiAgICAgICAgIHNlbGYuZmFpbHVyZXMuYXBwZW5kKCh0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCiAgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IFRydWUKIAorICAgIEBmYWlsZmFzdAorICAgIGRlZiBhZGRTdWJUZXN0KHNlbGYsIHRlc3QsIHN1YnRlc3QsIGVycik6CisgICAgICAgICIiIkNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgc3VidGVzdC4KKyAgICAgICAgJ2VycicgaXMgTm9uZSBpZiB0aGUgc3VidGVzdCBlbmRlZCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBpdCdzIGEKKyAgICAgICAgdHVwbGUgb2YgdmFsdWVzIGFzIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpLgorICAgICAgICAiIiIKKyAgICAgICAgIyBCeSBkZWZhdWx0LCB3ZSBkb24ndCBkbyBhbnl0aGluZyB3aXRoIHN1Y2Nlc3NmdWwgc3VidGVzdHMsIGJ1dAorICAgICAgICAjIG1vcmUgc29waGlzdGljYXRlZCB0ZXN0IHJlc3VsdHMgbWlnaHQgd2FudCB0byByZWNvcmQgdGhlbS4KKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhlcnJbMF0sIHRlc3QuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgZXJyb3JzID0gc2VsZi5mYWlsdXJlcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnJvcnMgPSBzZWxmLmVycm9ycworICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3VidGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQorICAgICAgICAgICAgc2VsZi5fbWlycm9yT3V0cHV0ID0gVHJ1ZQorCiAgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6CiAgICAgICAgICJDYWxsZWQgd2hlbiBhIHRlc3QgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiCiAgICAgICAgIHBhc3MKQEAgLTE0MCwxMSArMTU2LDE2IEBACiAgICAgICAgIHNlbGYudW5leHBlY3RlZFN1Y2Nlc3Nlcy5hcHBlbmQodGVzdCkKIAogICAgIGRlZiB3YXNTdWNjZXNzZnVsKHNlbGYpOgotICAgICAgICAiVGVsbHMgd2hldGhlciBvciBub3QgdGhpcyByZXN1bHQgd2FzIGEgc3VjY2VzcyIKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmLmZhaWx1cmVzKSA9PSBsZW4oc2VsZi5lcnJvcnMpID09IDAKKyAgICAgICAgIiIiVGVsbHMgd2hldGhlciBvciBub3QgdGhpcyByZXN1bHQgd2FzIGEgc3VjY2Vzcy4iIiIKKyAgICAgICAgIyBUaGUgaGFzYXR0ciBjaGVjayBpcyBmb3IgdGVzdF9yZXN1bHQncyBPbGRSZXN1bHQgdGVzdC4gIFRoYXQKKyAgICAgICAgIyB3YXkgdGhpcyBtZXRob2Qgd29ya3Mgb24gb2JqZWN0cyB0aGF0IGxhY2sgdGhlIGF0dHJpYnV0ZS4KKyAgICAgICAgIyAod2hlcmUgd291bGQgc3VjaCByZXN1bHQgaW50YW5jZXMgY29tZSBmcm9tPyBvbGQgc3RvcmVkIHBpY2tsZXM/KQorICAgICAgICByZXR1cm4gKChsZW4oc2VsZi5mYWlsdXJlcykgPT0gbGVuKHNlbGYuZXJyb3JzKSA9PSAwKSBhbmQKKyAgICAgICAgICAgICAgICAobm90IGhhc2F0dHIoc2VsZiwgJ3VuZXhwZWN0ZWRTdWNjZXNzZXMnKSBvcgorICAgICAgICAgICAgICAgICBsZW4oc2VsZi51bmV4cGVjdGVkU3VjY2Vzc2VzKSA9PSAwKSkKIAogICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICAiSW5kaWNhdGVzIHRoYXQgdGhlIHRlc3RzIHNob3VsZCBiZSBhYm9ydGVkIgorICAgICAgICAiIiJJbmRpY2F0ZXMgdGhhdCB0aGUgdGVzdHMgc2hvdWxkIGJlIGFib3J0ZWQuIiIiCiAgICAgICAgIHNlbGYuc2hvdWxkU3RvcCA9IFRydWUKIAogICAgIGRlZiBfZXhjX2luZm9fdG9fc3RyaW5nKHNlbGYsIGVyciwgdGVzdCk6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3Qvc3VpdGUucHkgYi9MaWIvdW5pdHRlc3Qvc3VpdGUucHkKaW5kZXggY2RlNWQzOC4uNDk5N2Q4MSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3N1aXRlLnB5CisrKyBiL0xpYi91bml0dGVzdC9zdWl0ZS5weQpAQCAtMTYsOCArMTYsMTEgQEAKIGNsYXNzIEJhc2VUZXN0U3VpdGUob2JqZWN0KToKICAgICAiIiJBIHNpbXBsZSB0ZXN0IHN1aXRlIHRoYXQgZG9lc24ndCBwcm92aWRlIGNsYXNzIG9yIG1vZHVsZSBzaGFyZWQgZml4dHVyZXMuCiAgICAgIiIiCisgICAgX2NsZWFudXAgPSBUcnVlCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdHM9KCkpOgogICAgICAgICBzZWxmLl90ZXN0cyA9IFtdCisgICAgICAgIHNlbGYuX3JlbW92ZWRfdGVzdHMgPSAwCiAgICAgICAgIHNlbGYuYWRkVGVzdHModGVzdHMpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CkBAIC0zNSw5ICszOCwxMCBAQAogICAgICAgICByZXR1cm4gaXRlcihzZWxmLl90ZXN0cykKIAogICAgIGRlZiBjb3VudFRlc3RDYXNlcyhzZWxmKToKLSAgICAgICAgY2FzZXMgPSAwCisgICAgICAgIGNhc2VzID0gc2VsZi5fcmVtb3ZlZF90ZXN0cwogICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgotICAgICAgICAgICAgY2FzZXMgKz0gdGVzdC5jb3VudFRlc3RDYXNlcygpCisgICAgICAgICAgICBpZiB0ZXN0OgorICAgICAgICAgICAgICAgIGNhc2VzICs9IHRlc3QuY291bnRUZXN0Q2FzZXMoKQogICAgICAgICByZXR1cm4gY2FzZXMKIAogICAgIGRlZiBhZGRUZXN0KHNlbGYsIHRlc3QpOgpAQCAtNTcsMTIgKzYxLDI4IEBACiAgICAgICAgICAgICBzZWxmLmFkZFRlc3QodGVzdCkKIAogICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0KToKLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZjoKKyAgICAgICAgZm9yIGluZGV4LCB0ZXN0IGluIGVudW1lcmF0ZShzZWxmKToKICAgICAgICAgICAgIGlmIHJlc3VsdC5zaG91bGRTdG9wOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICB0ZXN0KHJlc3VsdCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2NsZWFudXA6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlVGVzdEF0SW5kZXgoaW5kZXgpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAorICAgIGRlZiBfcmVtb3ZlVGVzdEF0SW5kZXgoc2VsZiwgaW5kZXgpOgorICAgICAgICAiIiJTdG9wIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIFRlc3RDYXNlIGF0IGluZGV4LiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0ID0gc2VsZi5fdGVzdHNbaW5kZXhdCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAjIHN1cHBvcnQgZm9yIHN1aXRlIGltcGxlbWVudGF0aW9ucyB0aGF0IGhhdmUgb3ZlcnJpZGVuIHNlbGYuX3Rlc3RzCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFNvbWUgdW5pdHRlc3QgdGVzdHMgYWRkIG5vbiBUZXN0Q2FzZS9UZXN0U3VpdGUgb2JqZWN0cyB0bworICAgICAgICAgICAgIyB0aGUgc3VpdGUuCisgICAgICAgICAgICBpZiBoYXNhdHRyKHRlc3QsICdjb3VudFRlc3RDYXNlcycpOgorICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZWRfdGVzdHMgKz0gdGVzdC5jb3VudFRlc3RDYXNlcygpCisgICAgICAgICAgICBzZWxmLl90ZXN0c1tpbmRleF0gPSBOb25lCisKICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgIHJldHVybiBzZWxmLnJ1bigqYXJncywgKiprd2RzKQogCkBAIC04Nyw3ICsxMDcsNyBAQAogICAgICAgICBpZiBnZXRhdHRyKHJlc3VsdCwgJ190ZXN0UnVuRW50ZXJlZCcsIEZhbHNlKSBpcyBGYWxzZToKICAgICAgICAgICAgIHJlc3VsdC5fdGVzdFJ1bkVudGVyZWQgPSB0b3BMZXZlbCA9IFRydWUKIAotICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICBmb3IgaW5kZXgsIHRlc3QgaW4gZW51bWVyYXRlKHNlbGYpOgogICAgICAgICAgICAgaWYgcmVzdWx0LnNob3VsZFN0b3A6CiAgICAgICAgICAgICAgICAgYnJlYWsKIApAQCAtMTA2LDYgKzEyNiw5IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRlc3QuZGVidWcoKQogCisgICAgICAgICAgICBpZiBzZWxmLl9jbGVhbnVwOgorICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZVRlc3RBdEluZGV4KGluZGV4KQorCiAgICAgICAgIGlmIHRvcExldmVsOgogICAgICAgICAgICAgc2VsZi5fdGVhckRvd25QcmV2aW91c0NsYXNzKE5vbmUsIHJlc3VsdCkKICAgICAgICAgICAgIHNlbGYuX2hhbmRsZU1vZHVsZVRlYXJEb3duKHJlc3VsdCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L19fbWFpbl9fLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkMDU5MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKKworZGVmIGxvYWRfdGVzdHMobG9hZGVyLCBzdGFuZGFyZF90ZXN0cywgcGF0dGVybik6CisgICAgIyB0b3AgbGV2ZWwgZGlyZWN0b3J5IGNhY2hlZCBvbiBsb2FkZXIgaW5zdGFuY2UKKyAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICBwYXR0ZXJuID0gcGF0dGVybiBvciAidGVzdF8qLnB5IgorICAgICMgV2UgYXJlIGluc2lkZSB1bml0dGVzdC50ZXN0LCBzbyB0aGUgdG9wLWxldmVsIGlzIHR3byBub3RjaGVzIHVwCisgICAgdG9wX2xldmVsX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUodGhpc19kaXIpKQorICAgIHBhY2thZ2VfdGVzdHMgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyPXRoaXNfZGlyLCBwYXR0ZXJuPXBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BfbGV2ZWxfZGlyPXRvcF9sZXZlbF9kaXIpCisgICAgc3RhbmRhcmRfdGVzdHMuYWRkVGVzdHMocGFja2FnZV90ZXN0cykKKyAgICByZXR1cm4gc3RhbmRhcmRfdGVzdHMKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKaW5kZXggZGJlNGRkYy4uMDJlOGYzYSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJQcm9ibGVtIGhhc2hpbmcgJXMgYW5kICVzOiAlcyIgJSAob2JqXzEsIG9ial8yLCBlKSkKIAogCi1jbGFzcyBMb2dnaW5nUmVzdWx0KHVuaXR0ZXN0LlRlc3RSZXN1bHQpOgorY2xhc3MgX0Jhc2VMb2dnaW5nUmVzdWx0KHVuaXR0ZXN0LlRlc3RSZXN1bHQpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2cpOgogICAgICAgICBzZWxmLl9ldmVudHMgPSBsb2cKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBkZWYgc3RhcnRUZXN0UnVuKHNlbGYpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdGFydFRlc3RSdW4nKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5zdGFydFRlc3RSdW4oKQorICAgICAgICBzdXBlcigpLnN0YXJ0VGVzdFJ1bigpCiAKICAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0b3BUZXN0JykKQEAgLTYwLDcgKzYwLDcgQEAKIAogICAgIGRlZiBzdG9wVGVzdFJ1bihzZWxmKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RvcFRlc3RSdW4nKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5zdG9wVGVzdFJ1bigpCisgICAgICAgIHN1cGVyKCkuc3RvcFRlc3RSdW4oKQogCiAgICAgZGVmIGFkZEZhaWx1cmUoc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRGYWlsdXJlJykKQEAgLTY4LDcgKzY4LDcgQEAKIAogICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU3VjY2VzcycpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFN1Y2Nlc3MoKmFyZ3MpCisgICAgICAgIHN1cGVyKCkuYWRkU3VjY2VzcygqYXJncykKIAogICAgIGRlZiBhZGRFcnJvcihzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEVycm9yJykKQEAgLTc2LDE1ICs3NiwzOSBAQAogCiAgICAgZGVmIGFkZFNraXAoc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTa2lwJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkU2tpcCgqYXJncykKKyAgICAgICAgc3VwZXIoKS5hZGRTa2lwKCphcmdzKQogCiAgICAgZGVmIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEV4cGVjdGVkRmFpbHVyZScpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZEV4cGVjdGVkRmFpbHVyZSgqYXJncykKKyAgICAgICAgc3VwZXIoKS5hZGRFeHBlY3RlZEZhaWx1cmUoKmFyZ3MpCiAKICAgICBkZWYgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRVbmV4cGVjdGVkU3VjY2VzcycpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFVuZXhwZWN0ZWRTdWNjZXNzKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZFVuZXhwZWN0ZWRTdWNjZXNzKCphcmdzKQorCisKK2NsYXNzIExlZ2FjeUxvZ2dpbmdSZXN1bHQoX0Jhc2VMb2dnaW5nUmVzdWx0KToKKyAgICAiIiIKKyAgICBBIGxlZ2FjeSBUZXN0UmVzdWx0IGltcGxlbWVudGF0aW9uLCB3aXRob3V0IGFuIGFkZFN1YlRlc3QgbWV0aG9kLAorICAgIHdoaWNoIHJlY29yZHMgaXRzIG1ldGhvZCBjYWxscy4KKyAgICAiIiIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhZGRTdWJUZXN0KHNlbGYpOgorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorCisKK2NsYXNzIExvZ2dpbmdSZXN1bHQoX0Jhc2VMb2dnaW5nUmVzdWx0KToKKyAgICAiIiIKKyAgICBBIFRlc3RSZXN1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggcmVjb3JkcyBpdHMgbWV0aG9kIGNhbGxzLgorICAgICIiIgorCisgICAgZGVmIGFkZFN1YlRlc3Qoc2VsZiwgdGVzdCwgc3VidGVzdCwgZXJyKToKKyAgICAgICAgaWYgZXJyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTdWJUZXN0U3VjY2VzcycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTdWJUZXN0RmFpbHVyZScpCisgICAgICAgIHN1cGVyKCkuYWRkU3ViVGVzdCh0ZXN0LCBzdWJ0ZXN0LCBlcnIpCiAKIAogY2xhc3MgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4ob2JqZWN0KToKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weQppbmRleCA3OTMxY2FkLi5hZjA4ZDVhIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5CkBAIC0zNjEsMyArMzYxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnXiJyZWdleCIgZG9lcyBub3QgbWF0Y2ggImZvbyIkJywgJ15vb3BzJCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ14icmVnZXgiIGRvZXMgbm90IG1hdGNoICJmb28iJCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ14icmVnZXgiIGRvZXMgbm90IG1hdGNoICJmb28iIDogb29wcyQnXSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKaW5kZXggNzU1MzJmNC4uMGJmMWEyMiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5CkBAIC0yODIsMyArMjgyLDcgQEAKICAgICAiaWYgdGhyZWFkcyBoYXZlIGJlZW4gdXNlZCIpCiBjbGFzcyBUZXN0QnJlYWtTaWduYWxEZWZhdWx0KFRlc3RCcmVhayk6CiAgICAgaW50X2hhbmRsZXIgPSBzaWduYWwuU0lHX0RGTAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKaW5kZXggYjhjYjBjNy4uMzYzMzkwYSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weQpAQCAtMSw4ICsxLDEwIEBACitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGRpZmZsaWIKIGltcG9ydCBwcHJpbnQKIGltcG9ydCBwaWNrbGUKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBpbnNwZWN0CkBAIC0xMyw5ICsxNSwxNSBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gLnN1cHBvcnQgaW1wb3J0ICgKLSAgICBUZXN0RXF1YWxpdHksIFRlc3RIYXNoaW5nLCBMb2dnaW5nUmVzdWx0LAorICAgIFRlc3RFcXVhbGl0eSwgVGVzdEhhc2hpbmcsIExvZ2dpbmdSZXN1bHQsIExlZ2FjeUxvZ2dpbmdSZXN1bHQsCiAgICAgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4KICkKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRlcnIKKworCitsb2dfZm9vID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpCitsb2dfZm9vYmFyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2Zvby5iYXInKQorbG9nX3F1dXggPSBsb2dnaW5nLmdldExvZ2dlcigncXV1eCcpCiAKIAogY2xhc3MgVGVzdChvYmplY3QpOgpAQCAtMjk3LDYgKzMwNSw5OCBAQAogCiAgICAgICAgIEZvbygndGVzdCcpLnJ1bigpCiAKKyAgICBkZWYgX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzKHNlbGYsIHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZF9ldmVudHMpOgorICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBbMSwgMiwgM106CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9aSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsdXJlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBqIGluIFsyLCAzXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChqPWopOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpICogaiA9PSA2OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnRlc3QnKQorICAgICAgICAgICAgICAgIDEgLyAwCisKKyAgICAgICAgIyBPcmRlciBpcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAjIGk9MSA9PiBzdWJ0ZXN0IGZhaWx1cmUKKyAgICAgICAgIyBpPTIsIGo9MiA9PiBzdWJ0ZXN0IHN1Y2Nlc3MKKyAgICAgICAgIyBpPTIsIGo9MyA9PiBzdWJ0ZXN0IGVycm9yCisgICAgICAgICMgaT0zLCBqPTIgPT4gc3VidGVzdCBlcnJvcgorICAgICAgICAjIGk9Mywgaj0zID0+IHN1YnRlc3Qgc3VjY2VzcworICAgICAgICAjIHRvcGxldmVsID0+IGVycm9yCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZF9ldmVudHMpCisKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fc3VidGVzdHMoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdEZhaWx1cmUnLCAnYWRkU3ViVGVzdFN1Y2Nlc3MnLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdEZhaWx1cmUnLCAnYWRkU3ViVGVzdEZhaWx1cmUnLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdFN1Y2Nlc3MnLCAnYWRkRXJyb3InLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLl9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0cyhyZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fc3VidGVzdHNfbGVnYWN5KHNlbGYpOgorICAgICAgICAjIFdpdGggYSBsZWdhY3kgcmVzdWx0IG9iamVjdCAod2l0aG91dCBhIGFkZFN1YlRlc3QgbWV0aG9kKSwKKyAgICAgICAgIyB0ZXh0IGV4ZWN1dGlvbiBzdG9wcyBhZnRlciB0aGUgZmlyc3Qgc3VidGVzdCBmYWlsdXJlLgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMZWdhY3lMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZEZhaWx1cmUnLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLl9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0cyhyZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3Moc2VsZiwgcmVzdWx0LCBldmVudHMsIGV4cGVjdGVkX2V2ZW50cyk6CisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIGZvciBpIGluIFsxLCAyXToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT1pKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBqIGluIFsyLCAzXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChqPWopOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkX2V2ZW50cykKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgIyBUaGUgNiBzdWJ0ZXN0IHN1Y2Nlc3NlcyBhcmUgaW5kaXZpZHVhbGx5IHJlY29yZGVkLCBpbiBhZGRpdGlvbgorICAgICAgICAjIHRvIHRoZSB3aG9sZSB0ZXN0IHN1Y2Nlc3MuCisgICAgICAgIGV4cGVjdGVkID0gKFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nXQorICAgICAgICAgICAgICAgICAgICArIDYgKiBbJ2FkZFN1YlRlc3RTdWNjZXNzJ10KKyAgICAgICAgICAgICAgICAgICAgKyBbJ2FkZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5fY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2VzcyhyZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2Vzc19sZWdhY3koc2VsZik6CisgICAgICAgICMgV2l0aCBhIGxlZ2FjeSByZXN1bHQsIG9ubHkgdGhlIHdob2xlIHRlc3Qgc3VjY2VzcyBpcyByZWNvcmRlZC4KKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTGVnYWN5TG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWNjZXNzJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5fY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2VzcyhyZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fc3VidGVzdHNfZmFpbGZhc3Qoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICByZXN1bHQuZmFpbGZhc3QgPSBUcnVlCisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT0xKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsdXJlJykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPTIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWx1cmUnKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RGYWlsdXJlJywgJ3N0b3BUZXN0J10KKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCiAgICAgIyAiVGhpcyBjbGFzcyBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhlIHRlc3QoKSBtZXRob2QuCiAgICAgIyBJZiBhIHRlc3QgZnJhbWV3b3JrIG5lZWRzIHRvIHVzZSBhIHNwZWNpYWxpemVkIGV4Y2VwdGlvbiwgcG9zc2libHkgdG8KICAgICAjIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGl0IG11c3Qgc3ViY2xhc3MgdGhpcyBleGNlcHRpb24gaW4KQEAgLTcyOSwxOCArODI5LDE4IEBACiAKICAgICAgICAgIyBzZXQgYSBsb3dlciB0aHJlc2hvbGQgdmFsdWUgYW5kIGFkZCBhIGNsZWFudXAgdG8gcmVzdG9yZSBpdAogICAgICAgICBvbGRfdGhyZXNob2xkID0gc2VsZi5fZGlmZlRocmVzaG9sZAotICAgICAgICBzZWxmLl9kaWZmVGhyZXNob2xkID0gMioqOAorICAgICAgICBzZWxmLl9kaWZmVGhyZXNob2xkID0gMioqNQogICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzZXRhdHRyKHNlbGYsICdfZGlmZlRocmVzaG9sZCcsIG9sZF90aHJlc2hvbGQpKQogCiAgICAgICAgICMgdW5kZXIgdGhlIHRocmVzaG9sZDogZGlmZiBtYXJrZXIgKF4pIGluIGVycm9yIG1lc3NhZ2UKLSAgICAgICAgcyA9ICd4JyAqICgyKio3KQorICAgICAgICBzID0gJ3gnICogKDIqKjQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdiJykKICAgICAgICAgc2VsZi5hc3NlcnRJbignXicsIHN0cihjbS5leGNlcHRpb24pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAnYScsIHMgKyAnYScpCiAKICAgICAgICAgIyBvdmVyIHRoZSB0aHJlc2hvbGQ6IGRpZmYgbm90IHVzZWQgYW5kIG1hcmtlciAoXikgbm90IGluIGVycm9yIG1lc3NhZ2UKLSAgICAgICAgcyA9ICd4JyAqICgyKio5KQorICAgICAgICBzID0gJ3gnICogKDIqKjYpCiAgICAgICAgICMgaWYgdGhlIHBhdGggdGhhdCB1c2VzIGRpZmZsaWIgaXMgdGFrZW4sIF90cnVuY2F0ZU1lc3NhZ2Ugd2lsbCBiZQogICAgICAgICAjIGNhbGxlZCAtLSByZXBsYWNlIGl0IHdpdGggZXhwbG9kaW5nVHJ1bmNhdGlvbiB0byB2ZXJpZnkgdGhhdCB0aGlzCiAgICAgICAgICMgZG9lc24ndCBoYXBwZW4KQEAgLTc1Nyw2ICs4NTcsMzUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJyVyICE9ICVyJyAlIChzMSwgczIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAnYScsIHMgKyAnYScpCiAKKyAgICBkZWYgdGVzdEFzc2VydEVxdWFsX3Nob3J0ZW4oc2VsZik6CisgICAgICAgICMgc2V0IGEgbG93ZXIgdGhyZXNob2xkIHZhbHVlIGFuZCBhZGQgYSBjbGVhbnVwIHRvIHJlc3RvcmUgaXQKKyAgICAgICAgb2xkX3RocmVzaG9sZCA9IHNlbGYuX2RpZmZUaHJlc2hvbGQKKyAgICAgICAgc2VsZi5fZGlmZlRocmVzaG9sZCA9IDAKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc2V0YXR0cihzZWxmLCAnX2RpZmZUaHJlc2hvbGQnLCBvbGRfdGhyZXNob2xkKSkKKworICAgICAgICBzID0gJ3gnICogMTAwCisgICAgICAgIHMxLCBzMiA9IHMgKyAnYScsIHMgKyAnYicKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczIpCisgICAgICAgIGMgPSAneHh4eFszNSBjaGFyc10nICsgJ3gnICogNjEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgIiclc2EnICE9ICclc2InIiAlIChjLCBjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2EnKQorCisgICAgICAgIHAgPSAneScgKiA1MAorICAgICAgICBzMSwgczIgPSBzICsgJ2EnICsgcCwgcyArICdiJyArIHAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczIpCisgICAgICAgIGMgPSAneHh4eFs4NSBjaGFyc114eHh4eHh4eHh4eCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgIiclc2ElcycgIT0gJyVzYiVzJyIgJSAoYywgcCwgYywgcCkpCisKKyAgICAgICAgcCA9ICd5JyAqIDEwMAorICAgICAgICBzMSwgczIgPSBzICsgJ2EnICsgcCwgcyArICdiJyArIHAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczIpCisgICAgICAgIGMgPSAneHh4eFs5MSBjaGFyc114eHh4eCcKKyAgICAgICAgZCA9ICd5JyAqIDQwICsgJ1s1NiBjaGFyc115eXl5JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAiJyVzYSVzJyAhPSAnJXNiJXMnIiAlIChjLCBkLCBjLCBkKSkKKwogICAgIGRlZiB0ZXN0QXNzZXJ0Q291bnRFcXVhbChzZWxmKToKICAgICAgICAgYSA9IG9iamVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChbMSwgMiwgM10sIFszLCAyLCAxXSkKQEAgLTExNTksNiArMTI4OCw5NCBAQAogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFJ1bnRpbWVXYXJuaW5nLCAibysiKToKICAgICAgICAgICAgICAgICAgICAgX3J1bnRpbWVfd2FybigiYmFyeiIpCiAKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiBhc3NlcnROb1N0ZGVycihzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRlcnIoKSBhcyBidWY6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5nZXR2YWx1ZSgpLCAiIikKKworICAgIGRlZiBhc3NlcnRMb2dSZWNvcmRzKHNlbGYsIHJlY29yZHMsIG1hdGNoZXMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWNvcmRzKSwgbGVuKG1hdGNoZXMpKQorICAgICAgICBmb3IgcmVjLCBtYXRjaCBpbiB6aXAocmVjb3JkcywgbWF0Y2hlcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVjLCBsb2dnaW5nLkxvZ1JlY29yZCkKKyAgICAgICAgICAgIGZvciBrLCB2IGluIG1hdGNoLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHJlYywgayksIHYpCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NEZWZhdWx0cyhzZWxmKToKKyAgICAgICAgIyBkZWZhdWx0czogcm9vdCBsb2dnZXIsIGxldmVsIElORk8KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygpIGFzIGNtOgorICAgICAgICAgICAgICAgIGxvZ19mb28uaW5mbygiMSIpCisgICAgICAgICAgICAgICAgbG9nX2Zvb2Jhci5kZWJ1ZygiMiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWyJJTkZPOmZvbzoxIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydExvZ1JlY29yZHMoY20ucmVjb3JkcywgW3snbmFtZSc6ICdmb28nfV0pCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NUd29NYXRjaGluZ01lc3NhZ2VzKHNlbGYpOgorICAgICAgICAjIFNhbWUsIGJ1dCB3aXRoIHR3byBtYXRjaGluZyBsb2cgbWVzc2FnZXMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygpIGFzIGNtOgorICAgICAgICAgICAgICAgIGxvZ19mb28uaW5mbygiMSIpCisgICAgICAgICAgICAgICAgbG9nX2Zvb2Jhci5kZWJ1ZygiMiIpCisgICAgICAgICAgICAgICAgbG9nX3F1dXgud2FybmluZygiMyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWyJJTkZPOmZvbzoxIiwgIldBUk5JTkc6cXV1eDozIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydExvZ1JlY29yZHMoY20ucmVjb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3snbmFtZSc6ICdmb28nfSwgeyduYW1lJzogJ3F1dXgnfV0pCisKKyAgICBkZWYgY2hlY2tBc3NlcnRMb2dzUGVyTGV2ZWwoc2VsZiwgbGV2ZWwpOgorICAgICAgICAjIENoZWNrIGxldmVsIGZpbHRlcmluZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKGxldmVsPWxldmVsKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dfZm9vLndhcm5pbmcoIjEiKQorICAgICAgICAgICAgICAgIGxvZ19mb29iYXIuZXJyb3IoIjIiKQorICAgICAgICAgICAgICAgIGxvZ19xdXV4LmNyaXRpY2FsKCIzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbIkVSUk9SOmZvby5iYXI6MiIsICJDUklUSUNBTDpxdXV4OjMiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TG9nUmVjb3JkcyhjbS5yZWNvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeyduYW1lJzogJ2Zvby5iYXInfSwgeyduYW1lJzogJ3F1dXgnfV0pCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NQZXJMZXZlbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja0Fzc2VydExvZ3NQZXJMZXZlbChsb2dnaW5nLkVSUk9SKQorICAgICAgICBzZWxmLmNoZWNrQXNzZXJ0TG9nc1BlckxldmVsKCdFUlJPUicpCisKKyAgICBkZWYgY2hlY2tBc3NlcnRMb2dzUGVyTG9nZ2VyKHNlbGYsIGxvZ2dlcik6CisgICAgICAgICMgQ2hlY2sgcGVyLWxvZ2dlciBmaXRlcmluZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKGxldmVsPSdERUJVRycpIGFzIG91dGVyX2NtOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKGxvZ2dlciwgbGV2ZWw9J0RFQlVHJykgYXMgY206CisgICAgICAgICAgICAgICAgICAgIGxvZ19mb28uaW5mbygiMSIpCisgICAgICAgICAgICAgICAgICAgIGxvZ19mb29iYXIuZGVidWcoIjIiKQorICAgICAgICAgICAgICAgICAgICBsb2dfcXV1eC53YXJuaW5nKCIzIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWyJJTkZPOmZvbzoxIiwgIkRFQlVHOmZvby5iYXI6MiJdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TG9nUmVjb3JkcyhjbS5yZWNvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3snbmFtZSc6ICdmb28nfSwgeyduYW1lJzogJ2Zvby5iYXInfV0pCisgICAgICAgICAgICAjIFRoZSBvdXRlciBjYXRjaGFsbCBjYXVnaHQgdGhlIHF1dXggbG9nCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dGVyX2NtLm91dHB1dCwgWyJXQVJOSU5HOnF1dXg6MyJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzUGVyTG9nZ2VyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrQXNzZXJ0TG9nc1BlckxvZ2dlcihsb2dnaW5nLmdldExvZ2dlcignZm9vJykpCisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTG9nZ2VyKCdmb28nKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRmFpbHVyZU5vTG9ncyhzZWxmKToKKyAgICAgICAgIyBGYWlsdXJlIGR1ZSB0byBubyBsb2dzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc0ZhaWx1cmVMZXZlbFRvb0hpZ2goc2VsZik6CisgICAgICAgICMgRmFpbHVyZSBkdWUgdG8gbGV2ZWwgdG9vIGhpZ2gKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobGV2ZWw9J1dBUk5JTkcnKToKKyAgICAgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc0ZhaWx1cmVNaXNtYXRjaGluZ0xvZ2dlcihzZWxmKToKKyAgICAgICAgIyBGYWlsdXJlIGR1ZSB0byBtaXNtYXRjaGluZyBsb2dnZXIgKGFuZCB0aGUgbG9nZ2VkIG1lc3NhZ2UgaXMKKyAgICAgICAgIyBwYXNzZWQgdGhyb3VnaCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoJ3F1dXgnLCBsZXZlbD0nRVJST1InKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygnZm9vJyk6CisgICAgICAgICAgICAgICAgICAgIGxvZ19xdXV4LmVycm9yKCIxIikKKwogICAgIGRlZiB0ZXN0RGVwcmVjYXRlZE1ldGhvZE5hbWVzKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB0aGF0IHRoZSBkZXByZWNhdGVkIG1ldGhvZHMgcmFpc2UgYSBEZXByZWNhdGlvbldhcm5pbmcuIFNlZSAjOTQyNC4KQEAgLTEzMTMsMyArMTUzMCwzMyBAQAogICAgICAgICB3aXRoIHN1cHBvcnQuZGlzYWJsZV9nYygpOgogICAgICAgICAgICAgZGVsIGNhc2UKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod3IoKSkKKworICAgIGRlZiB0ZXN0X25vX2V4Y2VwdGlvbl9sZWFrKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxOTg4MDogVGVzdENhc2UucnVuKCkgc2hvdWxkIG5vdCBrZWVwIGEgcmVmZXJlbmNlCisgICAgICAgICMgdG8gdGhlIGV4Y2VwdGlvbgorICAgICAgICBjbGFzcyBNeUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICAgICAgICAgbmluc3RhbmNlID0gMAorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgTXlFeGNlcHRpb24ubmluc3RhbmNlICs9IDEKKyAgICAgICAgICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZikKKworICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgTXlFeGNlcHRpb24ubmluc3RhbmNlIC09IDEKKworICAgICAgICBjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdDEoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgTXlFeGNlcHRpb24oKQorCisgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBkZWYgdGVzdDIoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgTXlFeGNlcHRpb24oKQorCisgICAgICAgIGZvciBtZXRob2RfbmFtZSBpbiAoJ3Rlc3QxJywgJ3Rlc3QyJyk6CisgICAgICAgICAgICB0ZXN0Y2FzZSA9IFRlc3RDYXNlKG1ldGhvZF9uYW1lKQorICAgICAgICAgICAgdGVzdGNhc2UucnVuKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTXlFeGNlcHRpb24ubmluc3RhbmNlLCAwKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5CmluZGV4IGNjYzdkYjIuLjZiN2IxMjggMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5CkBAIC0xLDEyICsxLDE1IEBACiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgYnVpbHRpbnMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBpbXBvcnQgdW5pdHRlc3QKIAogCiBjbGFzcyBUZXN0YWJsZVRlc3RQcm9ncmFtKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKToKLSAgICBtb2R1bGUgPSAnX19tYWluX18nCisgICAgbW9kdWxlID0gTm9uZQogICAgIGV4aXQgPSBUcnVlCiAgICAgZGVmYXVsdFRlc3QgPSBmYWlsZmFzdCA9IGNhdGNoYnJlYWsgPSBidWZmZXIgPSBOb25lCiAgICAgdmVyYm9zaXR5ID0gMQpAQCAtNDYsOSArNDksOSBAQAogICAgICAgICBkZWYgcmVzdG9yZV9pc2RpcigpOgogICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IG9yaWdpbmFsX2lzZGlyCiAKLSAgICAgICAgcGF0aF9saXN0cyA9IFtbJ3Rlc3QxLnB5JywgJ3Rlc3QyLnB5JywgJ25vdF9hX3Rlc3QucHknLCAndGVzdF9kaXInLAorICAgICAgICBwYXRoX2xpc3RzID0gW1sndGVzdDIucHknLCAndGVzdDEucHknLCAnbm90X2FfdGVzdC5weScsICd0ZXN0X2RpcicsCiAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LmZvbycsICd0ZXN0LW5vdC1hLW1vZHVsZS5weScsICdhbm90aGVyX2RpciddLAotICAgICAgICAgICAgICAgICAgICAgIFsndGVzdDMucHknLCAndGVzdDQucHknLCBdXQorICAgICAgICAgICAgICAgICAgICAgIFsndGVzdDQucHknLCAndGVzdDMucHknLCBdXQogICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIHBhdGg6IHBhdGhfbGlzdHMucG9wKDApCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2xpc3RkaXIpCiAKQEAgLTcwLDYgKzczLDggQEAKICAgICAgICAgbG9hZGVyLl90b3BfbGV2ZWxfZGlyID0gdG9wX2xldmVsCiAgICAgICAgIHN1aXRlID0gbGlzdChsb2FkZXIuX2ZpbmRfdGVzdHModG9wX2xldmVsLCAndGVzdCoucHknKSkKIAorICAgICAgICAjIFRoZSB0ZXN0IHN1aXRlcyBmb3VuZCBzaG91bGQgYmUgc29ydGVkIGFscGhhYmV0aWNhbGx5IGZvciByZWxpYWJsZQorICAgICAgICAjIGV4ZWN1dGlvbiBvcmRlci4KICAgICAgICAgZXhwZWN0ZWQgPSBbbmFtZSArICcgbW9kdWxlIHRlc3RzJyBmb3IgbmFtZSBpbgogICAgICAgICAgICAgICAgICAgICAoJ3Rlc3QxJywgJ3Rlc3QyJyldCiAgICAgICAgIGV4cGVjdGVkLmV4dGVuZChbKCd0ZXN0X2Rpci4lcycgJSBuYW1lKSArICcgbW9kdWxlIHRlc3RzJyBmb3IgbmFtZSBpbgpAQCAtMTMyLDYgKzEzNyw3IEBACiAgICAgICAgICMgYW5kIGRpcmVjdGx5IGZyb20gdGhlIHRlc3RfZGlyZWN0b3J5MiBwYWNrYWdlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydsb2FkX3Rlc3RzJywgJ3Rlc3RfZGlyZWN0b3J5MicgKyAnIG1vZHVsZSB0ZXN0cyddKQorICAgICAgICAjIFRoZSB0ZXN0IG1vZHVsZSBwYXRocyBzaG91bGQgYmUgc29ydGVkIGZvciByZWxpYWJsZSBleGVjdXRpb24gb3JkZXIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUucGF0aHMsIFsndGVzdF9kaXJlY3RvcnknLCAndGVzdF9kaXJlY3RvcnkyJ10pCiAKICAgICAgICAgIyBsb2FkX3Rlc3RzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2Ugd2l0aCBsb2FkZXIsIHRlc3RzIGFuZCBwYXR0ZXJuCkBAIC0xNjksNyArMTc1LDcgQEAKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNkaXIpCiAKICAgICAgICAgX2ZpbmRfdGVzdHNfYXJncyA9IFtdCi0gICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pOgorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9Tm9uZSk6CiAgICAgICAgICAgICBfZmluZF90ZXN0c19hcmdzLmFwcGVuZCgoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKICAgICAgICAgICAgIHJldHVybiBbJ3Rlc3RzJ10KICAgICAgICAgbG9hZGVyLl9maW5kX3Rlc3RzID0gX2ZpbmRfdGVzdHMKQEAgLTE4NCwxMSArMTkwLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZmluZF90ZXN0c19hcmdzLCBbKHN0YXJ0X2RpciwgJ3BhdHRlcm4nKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4odG9wX2xldmVsX2Rpciwgc3lzLnBhdGgpCiAKLSAgICBkZWYgdGVzdF9kaXNjb3Zlcl93aXRoX21vZHVsZXNfdGhhdF9mYWlsX3RvX2ltcG9ydChzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KKyAgICBkZWYgc2V0dXBfaW1wb3J0X2lzc3VlX3Rlc3RzKHNlbGYsIGZha2VmaWxlKToKICAgICAgICAgbGlzdGRpciA9IG9zLmxpc3RkaXIKLSAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBfOiBbJ3Rlc3RfdGhpc19kb2VzX25vdF9leGlzdC5weSddCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgXzogW2Zha2VmaWxlXQogICAgICAgICBpc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQogICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGxhbWJkYSBfOiBUcnVlCiAgICAgICAgIG9yaWdfc3lzX3BhdGggPSBzeXMucGF0aFs6XQpAQCAtMTk4LDYgKzIwMiwxMSBAQAogICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBvcmlnX3N5c19wYXRoCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlKQogCisgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVzX3RoYXRfZmFpbF90b19pbXBvcnQoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHNlbGYuc2V0dXBfaW1wb3J0X2lzc3VlX3Rlc3RzKCd0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QucHknKQorCiAgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCcuJykKICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5nZXRjd2QoKSwgc3lzLnBhdGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKQEAgLTIwNiw2MiArMjE1LDc0IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgogICAgICAgICAgICAgdGVzdC50ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QoKQogCisgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVfdGhhdF9yYWlzZXNfU2tpcFRlc3Rfb25faW1wb3J0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBkZWYgX2dldF9tb2R1bGVfZnJvbV9uYW1lKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NraXBwZXJvbycpCisgICAgICAgIGxvYWRlci5fZ2V0X21vZHVsZV9mcm9tX25hbWUgPSBfZ2V0X21vZHVsZV9mcm9tX25hbWUKKworICAgICAgICBzZWxmLnNldHVwX2ltcG9ydF9pc3N1ZV90ZXN0cygndGVzdF9za2lwX2R1bW15LnB5JykKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LnNraXBwZWQpLCAxKQorCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX3BhcnNlQXJncyhzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQogCiAgICAgICAgIGFyZ3MgPSBbXQotICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgotICAgICAgICAgICAgYXJncy5leHRlbmQoYXJndikKLSAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gZG9fZGlzY292ZXJ5CisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGFyZ3MuYXBwZW5kCiAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJywgJ2Rpc2NvdmVyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW1tdXSkKIAorICAgICAgICBhcmdzWzpdID0gW10KICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnZGlzY292ZXInLCAnZm9vJywgJ2JhciddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFsnZm9vJywgJ2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbJ2ZvbycsICdiYXInXV0pCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZGlzY292ZXJfYnlfZGVmYXVsdChzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQotICAgICAgICBwcm9ncmFtLm1vZHVsZSA9IE5vbmUKIAotICAgICAgICBzZWxmLmNhbGxlZCA9IEZhbHNlCi0gICAgICAgIGRlZiBkb19kaXNjb3ZlcnkoYXJndik6Ci0gICAgICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJndiwgW10pCi0gICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGRvX2Rpc2NvdmVyeQorICAgICAgICBhcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gYXJncy5hcHBlbmQKICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5idWZmZXIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uY2F0Y2hicmVhaywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5mYWlsZmFzdCwgRmFsc2UpCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZGlzY292ZXJfYnlfZGVmYXVsdF93aXRoX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKLSAgICAgICAgcHJvZ3JhbS5tb2R1bGUgPSBOb25lCiAKLSAgICAgICAgYXJncyA9IFsnc29tZXRoaW5nJywgJy12JywgJy1iJywgJy12JywgJy1jJywgJy1mJ10KLSAgICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQotICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgotICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3YsIGFyZ3NbMTpdKQotICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBkb19kaXNjb3ZlcnkKLSAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2FsbGVkKQorICAgICAgICBhcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gYXJncy5hcHBlbmQKKyAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnLXYnLCAnLWInLCAnLXYnLCAnLWMnLCAnLWYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbW11dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udmVyYm9zaXR5LCAyKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uYnVmZmVyLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uY2F0Y2hicmVhaywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmZhaWxmYXN0LCBUcnVlKQogCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZG9fZGlzY292ZXJ5X3Rvb19tYW55X2FyZ3VtZW50cyhzZWxmKToKLSAgICAgICAgY2xhc3MgU3RvcChFeGNlcHRpb24pOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBkZWYgdXNhZ2VFeGl0KCk6Ci0gICAgICAgICAgICByYWlzZSBTdG9wCi0KICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQotICAgICAgICBwcm9ncmFtLnVzYWdlRXhpdCA9IHVzYWdlRXhpdAogICAgICAgICBwcm9ncmFtLnRlc3RMb2FkZXIgPSBOb25lCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVyciwgXAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpIGFzIGNtOgogICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCiAgICAgICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJncywgKDIsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndXNhZ2U6Jywgc3RkZXJyLmdldHZhbHVlKCkpCiAKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kb19kaXNjb3ZlcnlfdXNlc19kZWZhdWx0X2xvYWRlcihzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9pbml0QXJnUGFyc2VycygpCiAKICAgICAgICAgY2xhc3MgTG9hZGVyKG9iamVjdCk6CiAgICAgICAgICAgICBhcmdzID0gW10KQEAgLTQxNyw3ICs0MzgsNyBAQAogICAgICAgICBleHBlY3RlZFBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKHVuaXR0ZXN0LnRlc3QuX19maWxlX18pKQogCiAgICAgICAgIHNlbGYud2FzUnVuID0gRmFsc2UKLSAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybik6CisgICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4sIG5hbWVzcGFjZT1Ob25lKToKICAgICAgICAgICAgIHNlbGYud2FzUnVuID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydF9kaXIsIGV4cGVjdGVkUGF0aCkKICAgICAgICAgICAgIHJldHVybiB0ZXN0cwpAQCAtNDI3LDUgKzQ0OCw3OSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLl90ZXN0cywgdGVzdHMpCiAKIAorICAgIGRlZiB0ZXN0X2Rpc2NvdmVyeV9mcm9tX2RvdHRlZF9wYXRoX2J1aWx0aW5fbW9kdWxlcyhzZWxmKToKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBsaXN0ZGlyID0gb3MubGlzdGRpcgorICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIF86IFsndGVzdF90aGlzX2RvZXNfbm90X2V4aXN0LnB5J10KKyAgICAgICAgaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKKyAgICAgICAgaXNkaXIgPSBvcy5wYXRoLmlzZGlyCisgICAgICAgIG9zLnBhdGguaXNkaXIgPSBsYW1iZGEgXzogRmFsc2UKKyAgICAgICAgb3JpZ19zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIGRlZiByZXN0b3JlKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGlzZmlsZQorICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IGlzZGlyCisgICAgICAgICAgICBvcy5saXN0ZGlyID0gbGlzdGRpcgorICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBvcmlnX3N5c19wYXRoCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGxvYWRlci5kaXNjb3Zlcignc3lzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQ2FuIG5vdCB1c2UgYnVpbHRpbiBtb2R1bGVzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXMgZG90dGVkIG1vZHVsZSBuYW1lcycpCisKKyAgICBkZWYgdGVzdF9kaXNjb3ZlcnlfZnJvbV9kb3R0ZWRfbmFtZXNwYWNlX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBvcmlnX2ltcG9ydCA9IF9faW1wb3J0X18KKyAgICAgICAgcGFja2FnZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ3BhY2thZ2UnKQorICAgICAgICBwYWNrYWdlLl9fcGF0aF9fID0gWycvYScsICcvYiddCisgICAgICAgIHBhY2thZ2UuX19zcGVjX18gPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoCisgICAgICAgICAgIGxvYWRlcj1Ob25lLAorICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1bJy9hJywgJy9iJ10KKyAgICAgICAgKQorCisgICAgICAgIGRlZiBfaW1wb3J0KHBhY2thZ2VuYW1lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbcGFja2FnZW5hbWVdID0gcGFja2FnZQorICAgICAgICAgICAgcmV0dXJuIHBhY2thZ2UKKworICAgICAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICAgICAgYnVpbHRpbnMuX19pbXBvcnRfXyA9IG9yaWdfaW1wb3J0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQorICAgICAgICBidWlsdGlucy5fX2ltcG9ydF9fID0gX2ltcG9ydAorCisgICAgICAgIF9maW5kX3Rlc3RzX2FyZ3MgPSBbXQorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9Tm9uZSk6CisgICAgICAgICAgICBfZmluZF90ZXN0c19hcmdzLmFwcGVuZCgoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgIHJldHVybiBbJyVzL3Rlc3RzJyAlIHN0YXJ0X2Rpcl0KKworICAgICAgICBsb2FkZXIuX2ZpbmRfdGVzdHMgPSBfZmluZF90ZXN0cworICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJ3BhY2thZ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLCBbJy9hL3Rlc3RzJywgJy9iL3Rlc3RzJ10pCisKKyAgICBkZWYgdGVzdF9kaXNjb3ZlcnlfZmFpbGVkX2Rpc2NvdmVyeShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHBhY2thZ2UgPSB0eXBlcy5Nb2R1bGVUeXBlKCdwYWNrYWdlJykKKyAgICAgICAgb3JpZ19pbXBvcnQgPSBfX2ltcG9ydF9fCisKKyAgICAgICAgZGVmIF9pbXBvcnQocGFja2FnZW5hbWUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBzeXMubW9kdWxlc1twYWNrYWdlbmFtZV0gPSBwYWNrYWdlCisgICAgICAgICAgICByZXR1cm4gcGFja2FnZQorCisgICAgICAgIGRlZiBjbGVhbnVwKCk6CisgICAgICAgICAgICBidWlsdGlucy5fX2ltcG9ydF9fID0gb3JpZ19pbXBvcnQKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisgICAgICAgIGJ1aWx0aW5zLl9faW1wb3J0X18gPSBfaW1wb3J0CisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbG9hZGVyLmRpc2NvdmVyKCdwYWNrYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9uXCd0IGtub3cgaG93IHRvIGRpc2NvdmVyIGZyb20geyFyfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHBhY2thZ2UpKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkKaW5kZXggOWNlNWVlMy4uZDdmZTA3YSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weQpAQCAtMTQyLDMgKzE0Miw3IEBACiAgICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSwgZGVzY3JpcHRpb249ZGVzYykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Quc2hvcnREZXNjcmlwdGlvbigpLCAidGhpcyB0ZXN0cyBmb28iKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfbG9hZGVyLnB5CmluZGV4IGZjZDJlMDcuLmI2MmExYjUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfbG9hZGVyLnB5CkBAIC0xMzA2LDMgKzEzMDYsNyBAQAogICAgIGRlZiB0ZXN0X3N1aXRlQ2xhc3NfX2RlZmF1bHRfdmFsdWUoc2VsZik6CiAgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQogICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlci5zdWl0ZUNsYXNzLCB1bml0dGVzdC5UZXN0U3VpdGUpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weQppbmRleCA4YTRiM2ZhLi4zMjk0Mjk4IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5CkBAIC0yLDYgKzIsNyBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKIApAQCAtNjQsNiArNjUsNDEgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3MoCiAgICAgICAgICAgICAgICAgW3NlbGYubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3RfVGVzdFByb2dyYW0uRm9vQmFyKV0pCiAKKyAgICAgICAgZGVmIGxvYWRUZXN0c0Zyb21OYW1lcyhzZWxmLCBuYW1lcywgbW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3MoCisgICAgICAgICAgICAgICAgW3NlbGYubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3RfVGVzdFByb2dyYW0uRm9vQmFyKV0pCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0VGVzdF93aXRoX3N0cmluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgRmFrZVJ1bm5lcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3QgPSB0ZXN0CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBvbGRfYXJndiA9IHN5cy5hcmd2CisgICAgICAgIHN5cy5hcmd2ID0gWydmYWtldGVzdCddCisgICAgICAgIHJ1bm5lciA9IEZha2VSdW5uZXIoKQorICAgICAgICBwcm9ncmFtID0gdW5pdHRlc3QuVGVzdFByb2dyYW0odGVzdFJ1bm5lcj1ydW5uZXIsIGV4aXQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VGVzdD0ndW5pdHRlc3QudGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0TG9hZGVyPXNlbGYuRm9vQmFyTG9hZGVyKCkpCisgICAgICAgIHN5cy5hcmd2ID0gb2xkX2FyZ3YKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VuaXR0ZXN0LnRlc3QnLCksIHByb2dyYW0udGVzdE5hbWVzKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdFRlc3Rfd2l0aF9pdGVyYWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgRmFrZVJ1bm5lcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3QgPSB0ZXN0CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBvbGRfYXJndiA9IHN5cy5hcmd2CisgICAgICAgIHN5cy5hcmd2ID0gWydmYWtldGVzdCddCisgICAgICAgIHJ1bm5lciA9IEZha2VSdW5uZXIoKQorICAgICAgICBwcm9ncmFtID0gdW5pdHRlc3QuVGVzdFByb2dyYW0oCisgICAgICAgICAgICB0ZXN0UnVubmVyPXJ1bm5lciwgZXhpdD1GYWxzZSwKKyAgICAgICAgICAgIGRlZmF1bHRUZXN0PVsndW5pdHRlc3QudGVzdCcsICd1bml0dGVzdC50ZXN0MiddLAorICAgICAgICAgICAgdGVzdExvYWRlcj1zZWxmLkZvb0JhckxvYWRlcigpKQorICAgICAgICBzeXMuYXJndiA9IG9sZF9hcmd2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyd1bml0dGVzdC50ZXN0JywgJ3VuaXR0ZXN0LnRlc3QyJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGVzdE5hbWVzKQogCiAgICAgZGVmIHRlc3RfTm9uRXhpdChzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IHVuaXR0ZXN0Lm1haW4oZXhpdD1GYWxzZSwKQEAgLTE1MSwyMCArMTg3LDM4IEBACiAgICAgICAgICAgICBpZiBhdHRyID09ICdjYXRjaCcgYW5kIG5vdCBoYXNJbnN0YWxsSGFuZGxlcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogCisgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIE5vbmUpCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIEZhbHNlKQorCisgICAgICAgICAgICBmYWxzZSA9IFtdCisgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIGZhbHNlKQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBmYWxzZSkKKworICAgICAgICAgICAgdHJ1ZSA9IFs0Ml0KKyAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgdHJ1ZSkKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgdHJ1ZSkKKwogICAgICAgICAgICAgc2hvcnRfb3B0ID0gJy0lcycgJSBhcmdbMF0KICAgICAgICAgICAgIGxvbmdfb3B0ID0gJy0tJXMnICUgYXJnCiAgICAgICAgICAgICBmb3Igb3B0IGluIHNob3J0X29wdCwgbG9uZ19vcHQ6CiAgICAgICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBOb25lKQotCiAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIocHJvZ3JhbSwgYXR0cikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBUcnVlKQogCi0gICAgICAgICAgICBmb3Igb3B0IGluIHNob3J0X29wdCwgbG9uZ19vcHQ6Ci0gICAgICAgICAgICAgICAgbm90X25vbmUgPSBvYmplY3QoKQotICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgbm90X25vbmUpCisgICAgICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBGYWxzZSkKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyLCBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzLCAoMiwpKQogCi0gICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBub3Rfbm9uZSkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIFRydWUpCisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVyciwgXAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJncywgKDIsKSkKIAogICAgIGRlZiB0ZXN0V2FybmluZyhzZWxmKToKICAgICAgICAgIiIiVGVzdCB0aGUgd2FybmluZ3MgYXJndW1lbnQiIiIKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkKaW5kZXggN2Q0MDcyNS4uNDg5ZmUxNyAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkKQEAgLTIyNyw2ICsyMjcsNDAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXN0X2Nhc2UsIHRlc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmb3JtYXR0ZWRfZXhjLCBzdHIpCiAKKyAgICBkZWYgdGVzdF9hZGRTdWJUZXN0KHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBub25sb2NhbCBzdWJ0ZXN0CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm9vPTEpOgorICAgICAgICAgICAgICAgICAgICBzdWJ0ZXN0ID0gc2VsZi5fc3VidGVzdAorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhjX2luZm9fdHVwbGUgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgICAgICAjIFJlZ2lzdGVyIGFuIGVycm9yIGJ5IGhhbmQgKHRvIGNoZWNrIHRoZSBBUEkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWJUZXN0KHRlc3QsIHN1YnRlc3QsIGV4Y19pbmZvX3R1cGxlKQorICAgICAgICAgICAgICAgICAgICAjIE5vdyB0cmlnZ2VyIGEgZmFpbHVyZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNvbWUgcmVjb2duaXphYmxlIGZhaWx1cmUiKQorCisgICAgICAgIHN1YnRlc3QgPSBOb25lCisgICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisKKyAgICAgICAgdGVzdF9jYXNlLCBmb3JtYXR0ZWRfZXhjID0gcmVzdWx0LmVycm9yc1swXQorICAgICAgICBzZWxmLmFzc2VydElzKHRlc3RfY2FzZSwgc3VidGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiWmVyb0RpdmlzaW9uRXJyb3IiLCBmb3JtYXR0ZWRfZXhjKQorICAgICAgICB0ZXN0X2Nhc2UsIGZvcm1hdHRlZF9leGMgPSByZXN1bHQuZmFpbHVyZXNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXN0X2Nhc2UsIHN1YnRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInNvbWUgcmVjb2duaXphYmxlIGZhaWx1cmUiLCBmb3JtYXR0ZWRfZXhjKQorCiAgICAgZGVmIHRlc3RHZXREZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCkBAIC0yMzQsNiArMjY4LDM3IEBACiAgICAgICAgICAgICAgICAgJ3Rlc3RHZXREZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgKCcgKyBfX25hbWVfXyArCiAgICAgICAgICAgICAgICAgJy5UZXN0X1Rlc3RSZXN1bHQpJykKIAorICAgIGRlZiB0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm9vPTEsIGJhcj0yKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAoJyArIF9fbmFtZV9fICsKKyAgICAgICAgICAgICAgICAgICAgJy5UZXN0X1Rlc3RSZXN1bHQpIChiYXI9MiwgZm9vPTEpJykKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoJ3NvbWUgbWVzc2FnZScpOgorICAgICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nICgnICsgX19uYW1lX18gKworICAgICAgICAgICAgICAgICAgICAnLlRlc3RfVGVzdFJlc3VsdCkgW3NvbWUgbWVzc2FnZV0nKQorCisgICAgZGVmIHRlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nQW5kUGFyYW1zKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nQW5kUGFyYW1zICcKKyAgICAgICAgICAgICAgICAgICAgJygnICsgX19uYW1lX18gKyAnLlRlc3RfVGVzdFJlc3VsdCkgKDxzdWJ0ZXN0PiknKQorCisgICAgZGVmIHRlc3RHZXROZXN0ZWRTdWJUZXN0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChiYXI9Mik6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RHZXROZXN0ZWRTdWJUZXN0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpIChiYXI9MiwgZm9vPTEpJykKKwogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCiAgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyhzZWxmKToKQEAgLTI0Nyw2ICszMTIsMTggQEAKIAogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCiAgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBkb2NzdHJpbmcuIiIiCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xLCBiYXI9Mik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICgndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nICcKKyAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKVxuJworICAgICAgICAgICAgICAgICdUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLicpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgZGVmIHRlc3RHZXREZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcoc2VsZik6CiAgICAgICAgICIiIlRlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgZG9jc3RyaW5nLgogICAgICAgICBUaGUgc2Vjb25kIGxpbmUgb2YgdGhlIGRvY3N0cmluZy4KQEAgLTI1OSw2ICszMzYsMjEgQEAKICAgICAgICAgICAgICAgICAnVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciAnCiAgICAgICAgICAgICAgICAgJ2RvY3N0cmluZy4nKSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aE11bHRpTGluZURvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciBkb2NzdHJpbmcuCisgICAgICAgIFRoZSBzZWNvbmQgbGluZSBvZiB0aGUgZG9jc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm9vPTEsIGJhcj0yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgKCd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aE11bHRpTGluZURvY3N0cmluZyAnCisgICAgICAgICAgICAgICAgJygnICsgX19uYW1lX18gKyAnLlRlc3RfVGVzdFJlc3VsdCkgKGJhcj0yLCBmb289MSlcbicKKyAgICAgICAgICAgICAgICAnVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciAnCisgICAgICAgICAgICAgICAgJ2RvY3N0cmluZy4nKSkKKwogICAgIGRlZiB0ZXN0U3RhY2tGcmFtZVRyaW1taW5nKHNlbGYpOgogICAgICAgICBjbGFzcyBGcmFtZShvYmplY3QpOgogICAgICAgICAgICAgY2xhc3MgdGJfZnJhbWUob2JqZWN0KToKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9ydW5uZXIucHkKaW5kZXggZTIyZTZiYy4uZWYxYzFhZjkgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CkBAIC01LDYgKzUsNyBAQAogaW1wb3J0IHN1YnByb2Nlc3MKIAogaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0LmNhc2UgaW1wb3J0IF9PdXRjb21lCiAKIGZyb20gLnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdSZXN1bHQsIFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuCiAKQEAgLTQyLDEyICs0Myw4IEBACiAgICAgICAgICAgICBkZWYgdGVzdE5vdGhpbmcoc2VsZik6CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGNsYXNzIE1vY2tPdXRjb21lKG9iamVjdCk6Ci0gICAgICAgICAgICBzdWNjZXNzID0gVHJ1ZQotICAgICAgICAgICAgZXJyb3JzID0gW10KLQogICAgICAgICB0ZXN0ID0gVGVzdGFibGVUZXN0KCd0ZXN0Tm90aGluZycpCi0gICAgICAgIHRlc3QuX291dGNvbWVGb3JEb0NsZWFudXBzID0gTW9ja091dGNvbWUKKyAgICAgICAgb3V0Y29tZSA9IHRlc3QuX291dGNvbWUgPSBfT3V0Y29tZSgpCiAKICAgICAgICAgZXhjMSA9IEV4Y2VwdGlvbignZm9vJykKICAgICAgICAgZXhjMiA9IEV4Y2VwdGlvbignYmFyJykKQEAgLTYxLDkgKzU4LDEwIEBACiAgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMikKIAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRlc3QuZG9DbGVhbnVwcygpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKE1vY2tPdXRjb21lLnN1Y2Nlc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0Y29tZS5zdWNjZXNzKQogCi0gICAgICAgIChUeXBlMSwgaW5zdGFuY2UxLCBfKSwgKFR5cGUyLCBpbnN0YW5jZTIsIF8pID0gcmV2ZXJzZWQoTW9ja091dGNvbWUuZXJyb3JzKQorICAgICAgICAoKF8sIChUeXBlMSwgaW5zdGFuY2UxLCBfKSksCisgICAgICAgICAoXywgKFR5cGUyLCBpbnN0YW5jZTIsIF8pKSkgPSByZXZlcnNlZChvdXRjb21lLmVycm9ycykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoVHlwZTEsIGluc3RhbmNlMSksIChFeGNlcHRpb24sIGV4YzEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChUeXBlMiwgaW5zdGFuY2UyKSwgKEV4Y2VwdGlvbiwgZXhjMikpCiAKQEAgLTM0MSwzICszMzksNyBAQAogICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQogICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihmKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLnN0cmVhbS5zdHJlYW0gaXMgZikKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NldHVwcy5weQppbmRleCBiOGQ1YWE0Li4zOTJmOTVlIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NldHVwcy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NldHVwcy5weQpAQCAtNDk0LDE0ICs0OTQsMTMgQEAKICAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKICAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCiAKLSAgICAgICAgX3N1aXRlID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3QpCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICAgICAgc3VpdGUuYWRkVGVzdChfc3VpdGUpCi0KICAgICAgICAgbWVzc2FnZXMgPSAoJ3NldFVwTW9kdWxlJywgJ3RlYXJEb3duTW9kdWxlJywgJ3NldFVwQ2xhc3MnLCAndGVhckRvd25DbGFzcycsICd0ZXN0X3NvbWV0aGluZycpCiAgICAgICAgIGZvciBwaGFzZSwgbXNnIGluIGVudW1lcmF0ZShtZXNzYWdlcyk6CisgICAgICAgICAgICBfc3VpdGUgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdCkKKyAgICAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtfc3VpdGVdKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgbXNnKToKICAgICAgICAgICAgICAgICBzdWl0ZS5kZWJ1ZygpCiAKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5CmluZGV4IDk1MjI0MGUuLjMxNGE3YTQgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weQpAQCAtMjksNiArMjksMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCiAKKyAgICBkZWYgdGVzdF9za2lwcGluZ19zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NraXBfbWUoc2VsZik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYT0xKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYj0yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNraXAgMSIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNraXAgMiIpCisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic2tpcCAzIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3Rfc2tpcF9tZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsnc3RhcnRUZXN0JywgJ2FkZFNraXAnLCAnYWRkU2tpcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZFNraXAnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LnNraXBwZWQpLCAzKQorICAgICAgICBzdWJ0ZXN0LCBtc2cgPSByZXN1bHQuc2tpcHBlZFswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgInNraXAgMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJ0ZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzdWJ0ZXN0LCB0ZXN0KQorICAgICAgICBzdWJ0ZXN0LCBtc2cgPSByZXN1bHQuc2tpcHBlZFsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgInNraXAgMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJ0ZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzdWJ0ZXN0LCB0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkWzJdLCAodGVzdCwgInNraXAgMyIpKQorCiAgICAgZGVmIHRlc3Rfc2tpcHBpbmdfZGVjb3JhdG9ycyhzZWxmKToKICAgICAgICAgb3BfdGFibGUgPSAoKHVuaXR0ZXN0LnNraXBVbmxlc3MsIEZhbHNlLCBUcnVlKSwKICAgICAgICAgICAgICAgICAgICAgKHVuaXR0ZXN0LnNraXBJZiwgVHJ1ZSwgRmFsc2UpKQpAQCAtOTUsNiArMTIwLDMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmV4cGVjdGVkRmFpbHVyZXNbMF1bMF0sIHRlc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQogCisgICAgZGVmIHRlc3RfZXhwZWN0ZWRfZmFpbHVyZV9zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgIyBBIGZhaWx1cmUgaW4gYW55IHN1YnRlc3QgY291bnRzIGFzIHRoZSBleHBlY3RlZCBmYWlsdXJlIG9mIHRoZQorICAgICAgICAjIHdob2xlIHRlc3QuCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBkZWYgdGVzdF9kaWUoc2VsZik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG9uZSBzdWNjZWVkcworICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJoZWxwIG1lISIpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG9uZSBkb2Vzbid0IGdldCBleGVjdXRlZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBjb21lIGhlcmUiKQorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9kaWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywgJ2FkZFN1YlRlc3RTdWNjZXNzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZEV4cGVjdGVkRmFpbHVyZScsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlcyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVzdWx0LmV4cGVjdGVkRmFpbHVyZXNbMF1bMF0sIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorCiAgICAgZGVmIHRlc3RfdW5leHBlY3RlZF9zdWNjZXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQpAQCAtMTA4LDcgKzE1OCwzMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywgJ3N0b3BUZXN0J10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmZhaWx1cmVzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzLCBbdGVzdF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKKyAgICBkZWYgdGVzdF91bmV4cGVjdGVkX3N1Y2Nlc3Nfc3VidGVzdHMoc2VsZik6CisgICAgICAgICMgU3VjY2VzcyBpbiBhbGwgc3VidGVzdHMgY291bnRzIGFzIHRoZSB1bmV4cGVjdGVkIHN1Y2Nlc3Mgb2YKKyAgICAgICAgIyB0aGUgd2hvbGUgdGVzdC4KKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0X2RpZShzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgb25lIHN1Y2NlZWRzCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICAjIFNvIGRvZXMgdGhpcyBvbmUKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9kaWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RTdWNjZXNzJywgJ2FkZFN1YlRlc3RTdWNjZXNzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmZhaWx1cmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzLCBbdGVzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKIAogICAgIGRlZiB0ZXN0X3NraXBfZG9lc250X3J1bl9zZXR1cChzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE0NywzICsyMjEsNyBAQAogICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdF0pCiAgICAgICAgIHN1aXRlLnJ1bihyZXN1bHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNraXBwZWQsIFsodGVzdCwgInRlc3RpbmciKV0pCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5CmluZGV4IDJkYjk3OGQuLjM4MzExY2EgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weQpAQCAtMSw2ICsxLDggQEAKIGltcG9ydCB1bml0dGVzdAogCitpbXBvcnQgZ2MKIGltcG9ydCBzeXMKK2ltcG9ydCB3ZWFrcmVmCiBmcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0LCBUZXN0RXF1YWxpdHkKIAogCkBAIC00OSw2ICs1MSw5IEBACiAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKIAogICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKICAgICAjIC4uLgpAQCAtNjEsNiArNjYsOSBAQAogICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbXSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKIAogICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKICAgICAjIC4uLgpAQCAtODIsNiArOTAsMTQgQEAKICAgICAgICAgc3VpdGVfMyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShzZXQoc3VpdGVfMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMy5jb3VudFRlc3RDYXNlcygpLCAyKQogCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHN1aXRlXzEucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8xLmNvdW50VGVzdENhc2VzKCksIDIpCisgICAgICAgIHN1aXRlXzIucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8yLmNvdW50VGVzdENhc2VzKCksIDIpCisgICAgICAgIHN1aXRlXzMucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8zLmNvdW50VGVzdENhc2VzKCksIDIpCisKICAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCiAgICAgIyAuLi4KICAgICAjICJJZiB0ZXN0cyBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBpbmRpdmlkdWFsIHRlc3QgY2FzZXMKQEAgLTk3LDYgKzExMyw5IEBACiAKICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUodGVzdHMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQorICAgICAgICAjIGNvdW50VGVzdENhc2VzKCkgc3RpbGwgd29ya3MgYWZ0ZXIgdGVzdHMgYXJlIHJ1bgorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDIpCiAKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgIyMjIC9UZXN0cyBmb3IgVGVzdFN1aXRlLl9faW5pdF9fCkBAIC0xNDMsNiArMTYyLDkgQEAKICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKHRlc3QxLCB0ZXN0MikpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQorICAgICAgICAjIGNvdW50VGVzdENhc2VzKCkgc3RpbGwgd29ya3MgYWZ0ZXIgdGVzdHMgYXJlIHJ1bgorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDIpCiAKICAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4KICAgICAjIC4uLnRoaXMgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFRlc3RTdWl0ZSBjbGFzcywgd2hpY2ggY2FuCkBAIC0xNjAsNiArMTgyLDEwIEBACiAgICAgICAgIHBhcmVudCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgodGVzdDMsIGNoaWxkLCBUZXN0MSgndGVzdDEnKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJlbnQuY291bnRUZXN0Q2FzZXMoKSwgNCkKKyAgICAgICAgIyBjb3VudFRlc3RDYXNlcygpIHN0aWxsIHdvcmtzIGFmdGVyIHRlc3RzIGFyZSBydW4KKyAgICAgICAgcGFyZW50LnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyZW50LmNvdW50VGVzdENhc2VzKCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hpbGQuY291bnRUZXN0Q2FzZXMoKSwgMikKIAogICAgICMgIlJ1biB0aGUgdGVzdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VpdGUsIGNvbGxlY3RpbmcgdGhlIHJlc3VsdCBpbnRvCiAgICAgIyB0aGUgdGVzdCByZXN1bHQgb2JqZWN0IHBhc3NlZCBhcyByZXN1bHQuIgpAQCAtMjE4LDYgKzI0NCw5IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdF0pCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKIAogICAgICMgIkFkZCBhIC4uLiBUZXN0U3VpdGUgdG8gdGhlIHN1aXRlIgogICAgIGRlZiB0ZXN0X2FkZFRlc3RfX1Rlc3RTdWl0ZShzZWxmKToKQEAgLTIzMSw2ICsyNjAsOSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3N1aXRlXzJdKQorICAgICAgICAjIGNvdW50VGVzdENhc2VzKCkgc3RpbGwgd29ya3MgYWZ0ZXIgdGVzdHMgYXJlIHJ1bgorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCiAKICAgICAjICJBZGQgYWxsIHRoZSB0ZXN0cyBmcm9tIGFuIGl0ZXJhYmxlIG9mIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKICAgICAjIGluc3RhbmNlcyB0byB0aGlzIHRlc3Qgc3VpdGUuIgpAQCAtMzAwLDcgKzMzMiw1NCBAQAogICAgICAgICAjIHdoZW4gdGhlIGJ1ZyBpcyBmaXhlZCB0aGlzIGxpbmUgd2lsbCBub3QgY3Jhc2gKICAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKIAorICAgIGRlZiB0ZXN0X3JlbW92ZV90ZXN0X2F0X2luZGV4KHNlbGYpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKIAorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc3VpdGUuX3Rlc3RzID0gWzEsIDIsIDNdCisgICAgICAgIHN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleCgxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIE5vbmUsIDNdLCBzdWl0ZS5fdGVzdHMpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfdGVzdF9hdF9pbmRleF9ub3RfaW5kZXhhYmxlKHNlbGYpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlLl90ZXN0cyA9IE5vbmUKKworICAgICAgICAjIGlmIF9yZW1vdmVBdEluZGV4IHJhaXNlcyBmb3Igbm9uaXRlcmFibGVzIHRoaXMgbmV4dCBsaW5lIHdpbGwgYnJlYWsKKyAgICAgICAgc3VpdGUuX3JlbW92ZVRlc3RBdEluZGV4KDIpCisKKyAgICBkZWYgYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bihzZWxmLCBUZXN0U3VpdGVDbGFzcyk6CisgICAgICAgIGlmIG5vdCB1bml0dGVzdC5CYXNlVGVzdFN1aXRlLl9jbGVhbnVwOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlN1aXRlIGNsZWFudXAgaXMgZGlzYWJsZWQiKQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9ub3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0X25vdGhpbmcnKQorICAgICAgICB3cmVmID0gd2Vha3JlZi5yZWYodGVzdCkKKworICAgICAgICBzdWl0ZSA9IFRlc3RTdWl0ZUNsYXNzKFt3cmVmKCldKQorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorCisgICAgICAgIGRlbCB0ZXN0CisKKyAgICAgICAgIyBmb3IgdGhlIGJlbmVmaXQgb2Ygbm9uLXJlZmVyZW5jZSBjb3VudGluZyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5fdGVzdHMsIFtOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3JlZigpKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuX0Jhc2VUZXN0U3VpdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bih1bml0dGVzdC5CYXNlVGVzdFN1aXRlKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuKHVuaXR0ZXN0LlRlc3RTdWl0ZSkKIAogICAgIGRlZiB0ZXN0X2Jhc2V0ZXN0c3VpdGUoc2VsZik6CiAgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzQzLDYgKzQyMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQogCiAKICAgICBkZWYgdGVzdF9vdmVycmlkaW5nX2NhbGwoc2VsZik6CkBAIC0zNjMsNiArNDQzLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuX3Rlc3RSdW5FbnRlcmVkKQogCiAKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL19fbWFpbl9fLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjNjMzYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKKworZGVmIGxvYWRfdGVzdHMobG9hZGVyLCBzdGFuZGFyZF90ZXN0cywgcGF0dGVybik6CisgICAgIyB0b3AgbGV2ZWwgZGlyZWN0b3J5IGNhY2hlZCBvbiBsb2FkZXIgaW5zdGFuY2UKKyAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICBwYXR0ZXJuID0gcGF0dGVybiBvciAidGVzdCoucHkiCisgICAgIyBXZSBhcmUgaW5zaWRlIHVuaXR0ZXN0LnRlc3QudGVzdG1vY2ssIHNvIHRoZSB0b3AtbGV2ZWwgaXMgdGhyZWUgbm90Y2hlcyB1cAorICAgIHRvcF9sZXZlbF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZSh0aGlzX2RpcikpKQorICAgIHBhY2thZ2VfdGVzdHMgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyPXRoaXNfZGlyLCBwYXR0ZXJuPXBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BfbGV2ZWxfZGlyPXRvcF9sZXZlbF9kaXIpCisgICAgc3RhbmRhcmRfdGVzdHMuYWRkVGVzdHMocGFja2FnZV90ZXN0cykKKyAgICByZXR1cm4gc3RhbmRhcmRfdGVzdHMKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGNhbGxhYmxlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGNhbGxhYmxlLnB5CmluZGV4IDdiMmRkMDAuLjUzOTBhNGUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0Y2FsbGFibGUucHkKQEAgLTE0NSwzICsxNDUsNyBAQAogICAgICAgICBtb2NrLndpYmJsZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrLndpYmJsZSwgJ3NvbWUnLCAgJ2FyZ3MnKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RoZWxwZXJzLnB5CmluZGV4IGEzNjJhMmYuLjFkYmMwYjYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RoZWxwZXJzLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RoZWxwZXJzLnB5CkBAIC0zMzcsOSArMzM3LDEwIEBACiAKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgotICAgICAgICBmb3Igc3BlYyBpbiAoU29tZUNsYXNzLCBTb21lQ2xhc3MoKSk6Ci0gICAgICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKHNwZWMpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zb21lY2xhc3NfbW9jayhtb2NrKQorICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKFNvbWVDbGFzcykKKyAgICAgICAgc2VsZi5fY2hlY2tfc29tZWNsYXNzX21vY2sobW9jaykKKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhTb21lQ2xhc3MoKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc29tZWNsYXNzX21vY2sobW9jaykKIAogCiAgICAgZGVmIHRlc3RfY3JlYXRlX2F1dG9zcGVjX3JldHVybl92YWx1ZShzZWxmKToKQEAgLTU3NiwxMCArNTc3LDEwIEBACiAKICAgICBkZWYgdGVzdF9zcGVjX2luaGVyaXRhbmNlX2Zvcl9jbGFzc2VzKHNlbGYpOgogICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBhKHNlbGYpOgorICAgICAgICAgICAgZGVmIGEoc2VsZiwgeCk6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgY2xhc3MgQmFyKG9iamVjdCk6Ci0gICAgICAgICAgICAgICAgZGVmIGYoc2VsZik6CisgICAgICAgICAgICAgICAgZGVmIGYoc2VsZiwgeSk6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBjbGFzc19tb2NrID0gY3JlYXRlX2F1dG9zcGVjKEZvbykKQEAgLTU4NywyNiArNTg4LDMwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoY2xhc3NfbW9jaywgY2xhc3NfbW9jaygpKQogCiAgICAgICAgIGZvciB0aGlzX21vY2sgaW4gY2xhc3NfbW9jaywgY2xhc3NfbW9jaygpOgotICAgICAgICAgICAgdGhpc19tb2NrLmEoKQotICAgICAgICAgICAgdGhpc19tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGhpc19tb2NrLmEsICdmb28nKQorICAgICAgICAgICAgdGhpc19tb2NrLmEoeD01KQorICAgICAgICAgICAgdGhpc19tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKHg9NSkKKyAgICAgICAgICAgIHRoaXNfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCg1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0aGlzX21vY2suYSwgJ2ZvbycsICdiYXInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIHRoaXNfbW9jaywgJ2InKQogCiAgICAgICAgIGluc3RhbmNlX21vY2sgPSBjcmVhdGVfYXV0b3NwZWMoRm9vKCkpCi0gICAgICAgIGluc3RhbmNlX21vY2suYSgpCi0gICAgICAgIGluc3RhbmNlX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGluc3RhbmNlX21vY2suYSwgJ2ZvbycpCisgICAgICAgIGluc3RhbmNlX21vY2suYSg1KQorICAgICAgICBpbnN0YW5jZV9tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKDUpCisgICAgICAgIGluc3RhbmNlX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoeD01KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGluc3RhbmNlX21vY2suYSwgJ2ZvbycsICdiYXInKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgaW5zdGFuY2VfbW9jaywgJ2InKQogCiAgICAgICAgICMgVGhlIHJldHVybiB2YWx1ZSBpc24ndCBpc24ndCBjYWxsYWJsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGluc3RhbmNlX21vY2spCiAKLSAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZigpCi0gICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZig2KQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mLmFzc2VydF9jYWxsZWRfd2l0aCg2KQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mLmFzc2VydF9jYWxsZWRfd2l0aCh5PTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBpbnN0YW5jZV9tb2NrLkJhciwgJ2cnKQogCi0gICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZigpCi0gICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZi5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mLmFzc2VydF9jYWxsZWRfd2l0aCg2KQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHk9NikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIGluc3RhbmNlX21vY2suQmFyKCksICdnJykKIAogCkBAIC02NjMsMTIgKzY2OCwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2spCiAgICAgICAgIG1vY2soMSwgMikKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgYj0yKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTEsIGI9MikKIAogICAgICAgICBmLmYgPSBmCiAgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrLmYpCiAgICAgICAgIG1vY2suZigzLCA0KQogICAgICAgICBtb2NrLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDMsIDQpCisgICAgICAgIG1vY2suZi5hc3NlcnRfY2FsbGVkX3dpdGgoYT0zLCBiPTQpCiAKIAogICAgIGRlZiB0ZXN0X3NraXBfYXR0cmlidXRlZXJyb3JzKHNlbGYpOgpAQCAtNzA0LDkgKzcxMiwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2spCiAgICAgICAgIG1vY2soMSkKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgxKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGE9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgsIDIpCiAKICAgICAgICAgbW9jayg0LCA1KQogICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCg0LCA1KQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTQsIGI9NSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoLCBhPTUsIGI9NCkKIAogCiAgICAgZGVmIHRlc3RfY2xhc3Nfd2l0aF9ub19pbml0KHNlbGYpOgpAQCAtNzE5LDI0ICs3MzEsMjcgQEAKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9jYWxsYWJsZShzZWxmKToKICAgICAgICAgY2xhc3MgQ2FsbGFibGUob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgYSk6CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoQ2FsbGFibGUpCi0gICAgICAgIG1vY2soKQotICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKyAgICAgICAgbW9jaygxLCAyKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDEsIDIpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoeD0xLCB5PTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jaywgJ2EnKQogCi0gICAgICAgIGluc3RhbmNlID0gbW9jaygpCisgICAgICAgIGluc3RhbmNlID0gbW9jaygxLCAyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGluc3RhbmNlKQogICAgICAgICBpbnN0YW5jZShhPSdhJykKKyAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoJ2EnKQogICAgICAgICBpbnN0YW5jZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPSdhJykKICAgICAgICAgaW5zdGFuY2UoJ2EnKQogICAgICAgICBpbnN0YW5jZS5hc3NlcnRfY2FsbGVkX3dpdGgoJ2EnKQorICAgICAgICBpbnN0YW5jZS5hc3NlcnRfY2FsbGVkX3dpdGgoYT0nYScpCiAKLSAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhDYWxsYWJsZSgpKQorICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKENhbGxhYmxlKDEsIDIpKQogICAgICAgICBtb2NrKGE9J2EnKQogICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGE9J2EnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2spCkBAIC03NzksNyArNzk0LDExIEBACiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGEgPSBjcmVhdGVfYXV0b3NwZWMoRm9vKQorICAgICAgICBhLmYoMTApCisgICAgICAgIGEuZi5hc3NlcnRfY2FsbGVkX3dpdGgoMTApCisgICAgICAgIGEuZi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZj0xMCkKICAgICAgICAgYS5mKHNlbGY9MTApCisgICAgICAgIGEuZi5hc3NlcnRfY2FsbGVkX3dpdGgoMTApCiAgICAgICAgIGEuZi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZj0xMCkKIAogCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5CmluZGV4IGNlZjU0MDUuLjIwY2M2NTQgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5CkBAIC0yNSw2ICsyNSwxOCBAQAogICAgIF9fbmV4dF9fID0gbmV4dAogCiAKK2NsYXNzIFNvbWV0aGluZyhvYmplY3QpOgorICAgIGRlZiBtZXRoKHNlbGYsIGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjbWV0aChjbHMsIGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc21ldGgoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgcGFzcworCiAKIGNsYXNzIE1vY2tUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjczLDYgKzI4NSw0MyBAQAogICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzLCBhPSdmaXNoJywgYj0nbm90aGluZycpCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfd2l0aF9mdW5jdGlvbl9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgZihhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9ZikKKworICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTEsIGI9MiwgYz0zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorICAgICAgICAjIEV4cGVjdGVkIGNhbGwgZG9lc24ndCBtYXRjaCB0aGUgc3BlYydzIHNpZ25hdHVyZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGU9OCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbi5fX2NhdXNlX18sIFR5cGVFcnJvcikKKworCisgICAgZGVmIHRlc3RfYXNzZXJ0X2NhbGxlZF93aXRoX21ldGhvZF9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrKG1vY2spOgorICAgICAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMpCisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTEsIGI9MiwgYz0zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYj0zLCBjPTIpCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcoKS5tZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcuY21ldGgpCisgICAgICAgIF9jaGVjayhtb2NrKQorICAgICAgICBtb2NrID0gTW9jayhzcGVjPVNvbWV0aGluZygpLmNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcuc21ldGgpCisgICAgICAgIF9jaGVjayhtb2NrKQorICAgICAgICBtb2NrID0gTW9jayhzcGVjPVNvbWV0aGluZygpLnNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKworCiAgICAgZGVmIHRlc3RfYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKICAgICAgICAgbW9jaygpCkBAIC0yOTcsNiArMzQ2LDI5IEBACiAgICAgICAgICkKIAogCisgICAgZGVmIHRlc3RfYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgxLCAyLCAzKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGE9MSwgYj0yLCBjPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBiPTMsIGM9MikKKyAgICAgICAgIyBFeHBlY3RlZCBjYWxsIGRvZXNuJ3QgbWF0Y2ggdGhlIHNwZWMncyBzaWduYXR1cmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcikgYXMgY206CisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGU9OCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbi5fX2NhdXNlX18sIFR5cGVFcnJvcikKKyAgICAgICAgIyBNb2NrIGNhbGxlZCBtb3JlIHRoYW4gb25jZSA9PiBhbHdheXMgZmFpbHMKKyAgICAgICAgbW9jayg0LCA1LCA2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDUsIDYpCisKKwogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9hY2Nlc3NfcmV0dXJuc19tb2NrcyhzZWxmKToKICAgICAgICAgbW9jayA9IE1vY2soKQogICAgICAgICBzb21ldGhpbmcgPSBtb2NrLnNvbWV0aGluZwpAQCAtOTk1LDYgKzEwNjcsMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICkKIAogCisgICAgZGVmIHRlc3RfYXNzZXJ0X2hhc19jYWxsc193aXRoX2Z1bmN0aW9uX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBmKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1mKQorCisgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2soNCwgNSwgYz02LCBkPTcpCisgICAgICAgIG1vY2soMTAsIDExLCBjPTEyKQorICAgICAgICBjYWxscyA9IFsKKyAgICAgICAgICAgICgnJywgKDEsIDIsIDMpLCB7fSksCisgICAgICAgICAgICAoJycsICg0LCA1LCA2KSwgeydkJzogN30pLAorICAgICAgICAgICAgKCgxMCwgMTEsIDEyKSwge30pLAorICAgICAgICAgICAgXQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMpCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxscywgYW55X29yZGVyPVRydWUpCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1sxOl0pCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1sxOl0sIGFueV9vcmRlcj1UcnVlKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbOi0xXSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0sIGFueV9vcmRlcj1UcnVlKQorICAgICAgICAjIFJldmVyc2VkIG9yZGVyCisgICAgICAgIGNhbGxzID0gbGlzdChyZXZlcnNlZChjYWxscykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMsIGFueV9vcmRlcj1UcnVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1sxOl0pCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1sxOl0sIGFueV9vcmRlcj1UcnVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1s6LTFdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbOi0xXSwgYW55X29yZGVyPVRydWUpCisKKwogICAgIGRlZiB0ZXN0X2Fzc2VydF9hbnlfY2FsbChzZWxmKToKICAgICAgICAgbW9jayA9IE1vY2soKQogICAgICAgICBtb2NrKDEsIDIpCkBAIC0xMDIxLDYgKzExMjYsMjYgQEAKICAgICAgICAgKQogCiAKKyAgICBkZWYgdGVzdF9hc3NlcnRfYW55X2NhbGxfd2l0aF9mdW5jdGlvbl9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgZihhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9ZikKKworICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrKDQsIDUsIGM9NiwgZD03KQorICAgICAgICBtb2NrLmFzc2VydF9hbnlfY2FsbCgxLCAyLCAzKQorICAgICAgICBtb2NrLmFzc2VydF9hbnlfY2FsbChhPTEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrLmFzc2VydF9hbnlfY2FsbCg0LCA1LCA2LCA3KQorICAgICAgICBtb2NrLmFzc2VydF9hbnlfY2FsbChhPTQsIGI9NSwgYz02LCBkPTcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9hbnlfY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYj0zLCBjPTIpCisgICAgICAgICMgRXhwZWN0ZWQgY2FsbCBkb2Vzbid0IG1hdGNoIHRoZSBzcGVjJ3Mgc2lnbmF0dXJlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoZT04KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY20uZXhjZXB0aW9uLl9fY2F1c2VfXywgVHlwZUVycm9yKQorCisKICAgICBkZWYgdGVzdF9tb2NrX2NhbGxzX2NyZWF0ZV9hdXRvc3BlYyhzZWxmKToKICAgICAgICAgZGVmIGYoYSwgYik6CiAgICAgICAgICAgICBwYXNzCkBAIC0xMTc3LDIwICsxMzAyLDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5tZXRob2RfY2FsbHMsIFtdKQogCiAKLSAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfZGVsZXRpb24oc2VsZik6Ci0gICAgICAgICMgdGhpcyBiZWhhdmlvdXIgaXNuJ3QgKnVzZWZ1bCosIGJ1dCBhdCBsZWFzdCBpdCdzIG5vdyB0ZXN0ZWQuLi4KLSAgICAgICAgZm9yIEtsYXNzIGluIE1vY2ssIE1hZ2ljTW9jaywgTm9uQ2FsbGFibGVNYWdpY01vY2ssIE5vbkNhbGxhYmxlTW9jazoKLSAgICAgICAgICAgIG0gPSBLbGFzcygpCi0gICAgICAgICAgICBvcmlnaW5hbCA9IG0uZm9vCi0gICAgICAgICAgICBtLmZvbyA9IDMKLSAgICAgICAgICAgIGRlbCBtLmZvbwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZvbywgb3JpZ2luYWwpCi0KLSAgICAgICAgICAgIG5ldyA9IG0uZm9vID0gTW9jaygpCi0gICAgICAgICAgICBkZWwgbS5mb28KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5mb28sIG5ldykKLQotCiAgICAgZGVmIHRlc3RfbW9ja19wYXJlbnRzKHNlbGYpOgogICAgICAgICBmb3IgS2xhc3MgaW4gTW9jaywgTWFnaWNNb2NrOgogICAgICAgICAgICAgbSA9IEtsYXNzKCkKQEAgLTEyNTQsNyArMTM2NSw4IEBACiAKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9kZWxldGlvbihzZWxmKToKLSAgICAgICAgZm9yIG1vY2sgaW4gTW9jaygpLCBNYWdpY01vY2soKToKKyAgICAgICAgZm9yIG1vY2sgaW4gKE1vY2soKSwgTWFnaWNNb2NrKCksIE5vbkNhbGxhYmxlTWFnaWNNb2NrKCksCisgICAgICAgICAgICAgICAgICAgICBOb25DYWxsYWJsZU1vY2soKSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2NrLCAnbScpKQogCiAgICAgICAgICAgICBkZWwgbW9jay5tCkBAIC0xMjc0LDYgKzEzODYsNSBAQAogICAgICAgICAgICAgbW9jay5mb28KIAogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkKaW5kZXggYzEwOTFiNC4uYzFiYzM0ZiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RwYXRjaC5weQpAQCAtMTc4MCw2ICsxNzgwLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcy5wYXRoLCBwYXRoKQogCiAKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHdpdGgucHkKaW5kZXggMGEwY2ZhZC4uZjU0ZTA1MSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHdpdGgucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHdpdGgucHkKQEAgLTE3Miw1ICsxNzIsODggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICdmb28nKQogCiAKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9kYXRhKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgcmVhZGxpbmUgd2lsbCByZXR1cm4gYWxsIHRoZSBsaW5lcyBmcm9tIHRoZSBmYWtlIGZpbGUKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXpcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgbGluZTEgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGxpbmUyID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICBsaW5lMyA9IGgucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxLCAnZm9vXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUyLCAnYmFyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUzLCAnYmF6XG4nKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCB3ZSBwcm9wZXJseSBlbXVsYXRlIGEgZmlsZSB0aGF0IGRvZXNuJ3QgZW5kIGluIGEgbmV3bGluZQorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICByZXN1bHQgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICdmb28nKQorCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXNfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZW11bGF0aW5nIGEgZmlsZSB0aGF0IGVuZHMgaW4gYSBuZXdsaW5lIGNoYXJhY3RlciB3b3JrcworICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJhelxuJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICByZXN1bHQgPSBoLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ2Zvb1xuJywgJ2JhclxuJywgJ2JhelxuJ10pCisKKyAgICAgICAgIyBUZXN0IHRoYXQgZmlsZXMgd2l0aG91dCBhIGZpbmFsIG5ld2xpbmUgd2lsbCBhbHNvIGJlIGNvcnJlY3RseQorICAgICAgICAjIGVtdWxhdGVkCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6JykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICByZXN1bHQgPSBoLnJlYWRsaW5lcygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFsnZm9vXG4nLCAnYmFyXG4nLCAnYmF6J10pCisKKworICAgIGRlZiB0ZXN0X21vY2tfb3Blbl9yZWFkX3dpdGhfYXJndW1lbnQoc2VsZik6CisgICAgICAgICMgQXQgb25lIHBvaW50IGNhbGxpbmcgcmVhZCB3aXRoIGFuIGFyZ3VtZW50IHdhcyBicm9rZW4KKyAgICAgICAgIyBmb3IgbW9ja3MgcmV0dXJuZWQgYnkgbW9ja19vcGVuCisgICAgICAgIHNvbWVfZGF0YSA9ICdmb29cbmJhclxuYmF6JworICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT1zb21lX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jaygpLnJlYWQoMTApLCBzb21lX2RhdGEpCisKKworICAgIGRlZiB0ZXN0X2ludGVybGVhdmVkX3JlYWRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBjYWxsaW5nIHJlYWQsIHJlYWRsaW5lLCBhbmQgcmVhZGxpbmVzIHB1bGxzIGRhdGEKKyAgICAgICAgIyBzZXF1ZW50aWFsbHkgZnJvbSB0aGUgZGF0YSB3ZSBwcmVsb2FkIHdpdGgKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXpcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgbGluZTEgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHJlc3QgPSBoLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZTEsICdmb29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdCwgWydiYXJcbicsICdiYXpcbiddKQorCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIGxpbmUxID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICByZXN0ID0gaC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMSwgJ2Zvb1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN0LCAnYmFyXG5iYXpcbicpCisKKworICAgIGRlZiB0ZXN0X292ZXJyaWRpbmdfcmV0dXJuX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2ZvbycpCisgICAgICAgIGhhbmRsZSA9IG1vY2soKQorCisgICAgICAgIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZSA9ICdiYXInCisgICAgICAgIGhhbmRsZS5yZWFkbGluZS5yZXR1cm5fdmFsdWUgPSAnYmFyJworICAgICAgICBoYW5kbGUucmVhZGxpbmVzLnJldHVybl92YWx1ZSA9IFsnYmFyJ10KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkKCksICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkbGluZSgpLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZGxpbmVzKCksIFsnYmFyJ10pCisKKyAgICAgICAgIyBjYWxsIHJlcGVhdGVkbHkgdG8gY2hlY2sgdGhhdCBhIFN0b3BJdGVyYXRpb24gaXMgbm90IHByb3BhZ2F0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZGxpbmUoKSwgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lKCksICdiYXInKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdXRpbC5weSBiL0xpYi91bml0dGVzdC91dGlsLnB5CmluZGV4IGNjZGYwYjguLmFlZTQ5OGYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC91dGlsLnB5CisrKyBiL0xpYi91bml0dGVzdC91dGlsLnB5CkBAIC0xLDEwICsxLDQ3IEBACiAiIiJWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zLiIiIgogCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlLCBPcmRlcmVkRGljdAorZnJvbSBvcy5wYXRoIGltcG9ydCBjb21tb25wcmVmaXgKIAogX191bml0dGVzdCA9IFRydWUKIAogX01BWF9MRU5HVEggPSA4MAorX1BMQUNFSE9MREVSX0xFTiA9IDEyCitfTUlOX0JFR0lOX0xFTiA9IDUKK19NSU5fRU5EX0xFTiA9IDUKK19NSU5fQ09NTU9OX0xFTiA9IDUKK19NSU5fRElGRl9MRU4gPSBfTUFYX0xFTkdUSCAtIFwKKyAgICAgICAgICAgICAgIChfTUlOX0JFR0lOX0xFTiArIF9QTEFDRUhPTERFUl9MRU4gKyBfTUlOX0NPTU1PTl9MRU4gKworICAgICAgICAgICAgICAgIF9QTEFDRUhPTERFUl9MRU4gKyBfTUlOX0VORF9MRU4pCithc3NlcnQgX01JTl9ESUZGX0xFTiA+PSAwCisKK2RlZiBfc2hvcnRlbihzLCBwcmVmaXhsZW4sIHN1ZmZpeGxlbik6CisgICAgc2tpcCA9IGxlbihzKSAtIHByZWZpeGxlbiAtIHN1ZmZpeGxlbgorICAgIGlmIHNraXAgPiBfUExBQ0VIT0xERVJfTEVOOgorICAgICAgICBzID0gJyVzWyVkIGNoYXJzXSVzJyAlIChzWzpwcmVmaXhsZW5dLCBza2lwLCBzW2xlbihzKSAtIHN1ZmZpeGxlbjpdKQorICAgIHJldHVybiBzCisKK2RlZiBfY29tbW9uX3Nob3J0ZW5fcmVwcigqYXJncyk6CisgICAgYXJncyA9IHR1cGxlKG1hcChzYWZlX3JlcHIsIGFyZ3MpKQorICAgIG1heGxlbiA9IG1heChtYXAobGVuLCBhcmdzKSkKKyAgICBpZiBtYXhsZW4gPD0gX01BWF9MRU5HVEg6CisgICAgICAgIHJldHVybiBhcmdzCisKKyAgICBwcmVmaXggPSBjb21tb25wcmVmaXgoYXJncykKKyAgICBwcmVmaXhsZW4gPSBsZW4ocHJlZml4KQorCisgICAgY29tbW9uX2xlbiA9IF9NQVhfTEVOR1RIIC0gXAorICAgICAgICAgICAgICAgICAobWF4bGVuIC0gcHJlZml4bGVuICsgX01JTl9CRUdJTl9MRU4gKyBfUExBQ0VIT0xERVJfTEVOKQorICAgIGlmIGNvbW1vbl9sZW4gPiBfTUlOX0NPTU1PTl9MRU46CisgICAgICAgIGFzc2VydCBfTUlOX0JFR0lOX0xFTiArIF9QTEFDRUhPTERFUl9MRU4gKyBfTUlOX0NPTU1PTl9MRU4gKyBcCisgICAgICAgICAgICAgICAobWF4bGVuIC0gcHJlZml4bGVuKSA8IF9NQVhfTEVOR1RICisgICAgICAgIHByZWZpeCA9IF9zaG9ydGVuKHByZWZpeCwgX01JTl9CRUdJTl9MRU4sIGNvbW1vbl9sZW4pCisgICAgICAgIHJldHVybiB0dXBsZShwcmVmaXggKyBzW3ByZWZpeGxlbjpdIGZvciBzIGluIGFyZ3MpCisKKyAgICBwcmVmaXggPSBfc2hvcnRlbihwcmVmaXgsIF9NSU5fQkVHSU5fTEVOLCBfTUlOX0NPTU1PTl9MRU4pCisgICAgcmV0dXJuIHR1cGxlKHByZWZpeCArIF9zaG9ydGVuKHNbcHJlZml4bGVuOl0sIF9NSU5fRElGRl9MRU4sIF9NSU5fRU5EX0xFTikKKyAgICAgICAgICAgICAgICAgZm9yIHMgaW4gYXJncykKKwogZGVmIHNhZmVfcmVwcihvYmosIHNob3J0PUZhbHNlKToKICAgICB0cnk6CiAgICAgICAgIHJlc3VsdCA9IHJlcHIob2JqKQpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9lcnJvci5weSBiL0xpYi91cmxsaWIvZXJyb3IucHkKaW5kZXggYjcxMmViYi4uNDViNzE2OSAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi9lcnJvci5weQorKysgYi9MaWIvdXJsbGliL2Vycm9yLnB5CkBAIC0xLDYgKzEsNiBAQAogIiIiRXhjZXB0aW9uIGNsYXNzZXMgcmFpc2VkIGJ5IHVybGxpYi4KIAotVGhlIGJhc2UgZXhjZXB0aW9uIGNsYXNzIGlzIFVSTEVycm9yLCB3aGljaCBpbmhlcml0cyBmcm9tIElPRXJyb3IuICBJdAorVGhlIGJhc2UgZXhjZXB0aW9uIGNsYXNzIGlzIFVSTEVycm9yLCB3aGljaCBpbmhlcml0cyBmcm9tIE9TRXJyb3IuICBJdAogZG9lc24ndCBkZWZpbmUgYW55IGJlaGF2aW9yIG9mIGl0cyBvd24sIGJ1dCBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsCiBleGNlcHRpb25zIGRlZmluZWQgaW4gdGhpcyBwYWNrYWdlLgogCkBAIC0xNywxMSArMTcsMTEgQEAKIAogCiAjIGRvIHRoZXNlIGVycm9yIGNsYXNzZXMgbWFrZSBzZW5zZT8KLSMgbWFrZSBzdXJlIGFsbCBvZiB0aGUgSU9FcnJvciBzdHVmZiBpcyBvdmVycmlkZGVuLiAgd2UganVzdCB3YW50IHRvIGJlCisjIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIE9TRXJyb3Igc3R1ZmYgaXMgb3ZlcnJpZGRlbi4gIHdlIGp1c3Qgd2FudCB0byBiZQogIyBzdWJ0eXBlcy4KIAotY2xhc3MgVVJMRXJyb3IoSU9FcnJvcik6Ci0gICAgIyBVUkxFcnJvciBpcyBhIHN1Yi10eXBlIG9mIElPRXJyb3IsIGJ1dCBpdCBkb2Vzbid0IHNoYXJlIGFueSBvZgorY2xhc3MgVVJMRXJyb3IoT1NFcnJvcik6CisgICAgIyBVUkxFcnJvciBpcyBhIHN1Yi10eXBlIG9mIE9TRXJyb3IsIGJ1dCBpdCBkb2Vzbid0IHNoYXJlIGFueSBvZgogICAgICMgdGhlIGltcGxlbWVudGF0aW9uLiAgbmVlZCB0byBvdmVycmlkZSBfX2luaXRfXyBhbmQgX19zdHJfXy4KICAgICAjIEl0IHNldHMgc2VsZi5hcmdzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgRW52aXJvbm1lbnRFcnJvcgogICAgICMgc3ViY2xhc3NlcywgYnV0IGFyZ3MgZG9lc24ndCBoYXZlIHRoZSB0eXBpY2FsIGZvcm1hdCB3aXRoIGVycm5vIGluCkBAIC02MSw5ICs2MSwxMyBAQAogICAgIGRlZiByZWFzb24oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm1zZwogCi0gICAgZGVmIGluZm8oc2VsZik6CisgICAgQHByb3BlcnR5CisgICAgZGVmIGhlYWRlcnMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmhkcnMKIAorICAgIEBoZWFkZXJzLnNldHRlcgorICAgIGRlZiBoZWFkZXJzKHNlbGYsIGhlYWRlcnMpOgorICAgICAgICBzZWxmLmhkcnMgPSBoZWFkZXJzCiAKICMgZXhjZXB0aW9uIHJhaXNlZCB3aGVuIGRvd25sb2FkZWQgc2l6ZSBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aAogY2xhc3MgQ29udGVudFRvb1Nob3J0RXJyb3IoVVJMRXJyb3IpOgpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9wYXJzZS5weSBiL0xpYi91cmxsaWIvcGFyc2UucHkKaW5kZXggOTc1YzZmZi4uMmJhMzk5MSAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi9wYXJzZS5weQorKysgYi9MaWIvdXJsbGliL3BhcnNlLnB5CkBAIC04NDYsNyArODQ2LDYgQEAKICAgICAiIiJzcGxpdHR5cGUoJ3R5cGU6b3BhcXVlc3RyaW5nJykgLS0+ICd0eXBlJywgJ29wYXF1ZXN0cmluZycuIiIiCiAgICAgZ2xvYmFsIF90eXBlcHJvZwogICAgIGlmIF90eXBlcHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3R5cGVwcm9nID0gcmUuY29tcGlsZSgnXihbXi86XSspOicpCiAKICAgICBtYXRjaCA9IF90eXBlcHJvZy5tYXRjaCh1cmwpCkBAIC04NjAsNyArODU5LDYgQEAKICAgICAiIiJzcGxpdGhvc3QoJy8vaG9zdFs6cG9ydF0vcGF0aCcpIC0tPiAnaG9zdFs6cG9ydF0nLCAnL3BhdGgnLiIiIgogICAgIGdsb2JhbCBfaG9zdHByb2cKICAgICBpZiBfaG9zdHByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9ob3N0cHJvZyA9IHJlLmNvbXBpbGUoJ14vLyhbXi8/XSopKC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfaG9zdHByb2cubWF0Y2godXJsKQpAQCAtODc3LDcgKzg3NSw2IEBACiAgICAgIiIic3BsaXR1c2VyKCd1c2VyWzpwYXNzd2RdQGhvc3RbOnBvcnRdJykgLS0+ICd1c2VyWzpwYXNzd2RdJywgJ2hvc3RbOnBvcnRdJy4iIiIKICAgICBnbG9iYWwgX3VzZXJwcm9nCiAgICAgaWYgX3VzZXJwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfdXNlcnByb2cgPSByZS5jb21waWxlKCdeKC4qKUAoLiopJCcpCiAKICAgICBtYXRjaCA9IF91c2VycHJvZy5tYXRjaChob3N0KQpAQCAtODg5LDcgKzg4Niw2IEBACiAgICAgIiIic3BsaXRwYXNzd2QoJ3VzZXI6cGFzc3dkJykgLT4gJ3VzZXInLCAncGFzc3dkJy4iIiIKICAgICBnbG9iYWwgX3Bhc3N3ZHByb2cKICAgICBpZiBfcGFzc3dkcHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3Bhc3N3ZHByb2cgPSByZS5jb21waWxlKCdeKFteOl0qKTooLiopJCcscmUuUykKIAogICAgIG1hdGNoID0gX3Bhc3N3ZHByb2cubWF0Y2godXNlcikKQEAgLTkwMiw3ICs4OTgsNiBAQAogICAgICIiInNwbGl0cG9ydCgnaG9zdDpwb3J0JykgLS0+ICdob3N0JywgJ3BvcnQnLiIiIgogICAgIGdsb2JhbCBfcG9ydHByb2cKICAgICBpZiBfcG9ydHByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9wb3J0cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopOihbMC05XSopJCcpCiAKICAgICBtYXRjaCA9IF9wb3J0cHJvZy5tYXRjaChob3N0KQpAQCAtOTIwLDcgKzkxNSw2IEBACiAgICAgUmV0dXJuIE5vbmUgaWYgJzonIGJ1dCBub3QgYSB2YWxpZCBudW1iZXIuIiIiCiAgICAgZ2xvYmFsIF9ucG9ydHByb2cKICAgICBpZiBfbnBvcnRwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfbnBvcnRwcm9nID0gcmUuY29tcGlsZSgnXiguKik6KC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfbnBvcnRwcm9nLm1hdGNoKGhvc3QpCkBAIC05MzksNyArOTMzLDYgQEAKICAgICAiIiJzcGxpdHF1ZXJ5KCcvcGF0aD9xdWVyeScpIC0tPiAnL3BhdGgnLCAncXVlcnknLiIiIgogICAgIGdsb2JhbCBfcXVlcnlwcm9nCiAgICAgaWYgX3F1ZXJ5cHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3F1ZXJ5cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopXD8oW14/XSopJCcpCiAKICAgICBtYXRjaCA9IF9xdWVyeXByb2cubWF0Y2godXJsKQpAQCAtOTUxLDcgKzk0NCw2IEBACiAgICAgIiIic3BsaXR0YWcoJy9wYXRoI3RhZycpIC0tPiAnL3BhdGgnLCAndGFnJy4iIiIKICAgICBnbG9iYWwgX3RhZ3Byb2cKICAgICBpZiBfdGFncHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3RhZ3Byb2cgPSByZS5jb21waWxlKCdeKC4qKSMoW14jXSopJCcpCiAKICAgICBtYXRjaCA9IF90YWdwcm9nLm1hdGNoKHVybCkKQEAgLTk2OSw3ICs5NjEsNiBAQAogICAgICIiInNwbGl0dmFsdWUoJ2F0dHI9dmFsdWUnKSAtLT4gJ2F0dHInLCAndmFsdWUnLiIiIgogICAgIGdsb2JhbCBfdmFsdWVwcm9nCiAgICAgaWYgX3ZhbHVlcHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3ZhbHVlcHJvZyA9IHJlLmNvbXBpbGUoJ14oW149XSopPSguKikkJykKIAogICAgIG1hdGNoID0gX3ZhbHVlcHJvZy5tYXRjaChhdHRyKQpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9yZXF1ZXN0LnB5IGIvTGliL3VybGxpYi9yZXF1ZXN0LnB5CmluZGV4IGVmNjJhY2MuLjU5OTVjYmUgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvcmVxdWVzdC5weQorKysgYi9MaWIvdXJsbGliL3JlcXVlc3QucHkKQEAgLTE4LDcgKzE4LDcgQEAKIHVybGxpYi4gIHBhc3MgdGhlIHVybCBhbmQgb3B0aW9uYWxseSBkYXRhIHRvIHBvc3QgdG8gYW4gSFRUUCBVUkwsIGFuZAogZ2V0IGEgZmlsZS1saWtlIG9iamVjdCBiYWNrLiAgT25lIGRpZmZlcmVuY2UgaXMgdGhhdCB5b3UgY2FuIGFsc28gcGFzcwogYSBSZXF1ZXN0IGluc3RhbmNlIGluc3RlYWQgb2YgVVJMLiAgUmFpc2VzIGEgVVJMRXJyb3IgKHN1YmNsYXNzIG9mCi1JT0Vycm9yKTsgZm9yIEhUVFAgZXJyb3JzLCByYWlzZXMgYW4gSFRUUEVycm9yLCB3aGljaCBjYW4gYWxzbyBiZQorT1NFcnJvcik7IGZvciBIVFRQIGVycm9ycywgcmFpc2VzIGFuIEhUVFBFcnJvciwgd2hpY2ggY2FuIGFsc28gYmUKIHRyZWF0ZWQgYXMgYSB2YWxpZCByZXNwb25zZS4KIAogYnVpbGRfb3BlbmVyIC0tIEZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBPcGVuZXJEaXJlY3RvciBpbnN0YW5jZS4KQEAgLTEwMyw3ICsxMDMsOCBAQAogZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0ICgKICAgICB1cmxwYXJzZSwgdXJsc3BsaXQsIHVybGpvaW4sIHVud3JhcCwgcXVvdGUsIHVucXVvdGUsCiAgICAgc3BsaXR0eXBlLCBzcGxpdGhvc3QsIHNwbGl0cG9ydCwgc3BsaXR1c2VyLCBzcGxpdHBhc3N3ZCwKLSAgICBzcGxpdGF0dHIsIHNwbGl0cXVlcnksIHNwbGl0dmFsdWUsIHNwbGl0dGFnLCB0b19ieXRlcywgdXJsdW5wYXJzZSkKKyAgICBzcGxpdGF0dHIsIHNwbGl0cXVlcnksIHNwbGl0dmFsdWUsIHNwbGl0dGFnLCB0b19ieXRlcywKKyAgICB1bnF1b3RlX3RvX2J5dGVzLCB1cmx1bnBhcnNlKQogZnJvbSB1cmxsaWIucmVzcG9uc2UgaW1wb3J0IGFkZGluZm91cmwsIGFkZGNsb3NlaG9vawogCiAjIGNoZWNrIGZvciBTU0wKQEAgLTEyMSw3ICsxMjIsNyBAQAogICAgICdIVFRQUGFzc3dvcmRNZ3InLCAnSFRUUFBhc3N3b3JkTWdyV2l0aERlZmF1bHRSZWFsbScsCiAgICAgJ0Fic3RyYWN0QmFzaWNBdXRoSGFuZGxlcicsICdIVFRQQmFzaWNBdXRoSGFuZGxlcicsICdQcm94eUJhc2ljQXV0aEhhbmRsZXInLAogICAgICdBYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVyJywgJ0hUVFBEaWdlc3RBdXRoSGFuZGxlcicsICdQcm94eURpZ2VzdEF1dGhIYW5kbGVyJywKLSAgICAnSFRUUEhhbmRsZXInLCAnRmlsZUhhbmRsZXInLCAnRlRQSGFuZGxlcicsICdDYWNoZUZUUEhhbmRsZXInLAorICAgICdIVFRQSGFuZGxlcicsICdGaWxlSGFuZGxlcicsICdGVFBIYW5kbGVyJywgJ0NhY2hlRlRQSGFuZGxlcicsICdEYXRhSGFuZGxlcicsCiAgICAgJ1Vua25vd25IYW5kbGVyJywgJ0hUVFBFcnJvclByb2Nlc3NvcicsCiAgICAgIyBGdW5jdGlvbnMKICAgICAndXJsb3BlbicsICdpbnN0YWxsX29wZW5lcicsICdidWlsZF9vcGVuZXInLApAQCAtMTQwLDEzICsxNDEsOSBAQAogICAgIGlmIGNhZmlsZSBvciBjYXBhdGggb3IgY2FkZWZhdWx0OgogICAgICAgICBpZiBub3QgX2hhdmVfc3NsOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU1NMIHN1cHBvcnQgbm90IGF2YWlsYWJsZScpCi0gICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCi0gICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAotICAgICAgICBpZiBjYWZpbGUgb3IgY2FwYXRoOgotICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlLCBjYXBhdGgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWZpbGU9Y2FmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYXRoPWNhcGF0aCkKICAgICAgICAgaHR0cHNfaGFuZGxlciA9IEhUVFBTSGFuZGxlcihjb250ZXh0PWNvbnRleHQsIGNoZWNrX2hvc3RuYW1lPVRydWUpCiAgICAgICAgIG9wZW5lciA9IGJ1aWxkX29wZW5lcihodHRwc19oYW5kbGVyKQogICAgIGVsaWYgX29wZW5lciBpcyBOb25lOgpAQCAtMjI3LDcgKzIyNCw3IEBACiAgICAgZm9yIHRlbXBfZmlsZSBpbiBfdXJsX3RlbXBmaWxlczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKHRlbXBfZmlsZSkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVsIF91cmxfdGVtcGZpbGVzWzpdCkBAIC0yNTgsMjQgKzI1NSw2MCBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIGRhdGE9Tm9uZSwgaGVhZGVycz17fSwKICAgICAgICAgICAgICAgICAgb3JpZ2luX3JlcV9ob3N0PU5vbmUsIHVudmVyaWZpYWJsZT1GYWxzZSwKICAgICAgICAgICAgICAgICAgbWV0aG9kPU5vbmUpOgotICAgICAgICAjIHVud3JhcCgnPFVSTDp0eXBlOi8vaG9zdC9wYXRoPicpIC0tPiAndHlwZTovL2hvc3QvcGF0aCcKLSAgICAgICAgc2VsZi5mdWxsX3VybCA9IHVud3JhcCh1cmwpCi0gICAgICAgIHNlbGYuZnVsbF91cmwsIHNlbGYuZnJhZ21lbnQgPSBzcGxpdHRhZyhzZWxmLmZ1bGxfdXJsKQotICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuZnVsbF91cmwgPSB1cmwKICAgICAgICAgc2VsZi5oZWFkZXJzID0ge30KKyAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycyA9IHt9CisgICAgICAgIHNlbGYuX2RhdGEgPSBOb25lCisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKICAgICAgICAgc2VsZi5fdHVubmVsX2hvc3QgPSBOb25lCiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGhlYWRlcnMuaXRlbXMoKToKICAgICAgICAgICAgIHNlbGYuYWRkX2hlYWRlcihrZXksIHZhbHVlKQotICAgICAgICBzZWxmLnVucmVkaXJlY3RlZF9oZHJzID0ge30KICAgICAgICAgaWYgb3JpZ2luX3JlcV9ob3N0IGlzIE5vbmU6CiAgICAgICAgICAgICBvcmlnaW5fcmVxX2hvc3QgPSByZXF1ZXN0X2hvc3Qoc2VsZikKICAgICAgICAgc2VsZi5vcmlnaW5fcmVxX2hvc3QgPSBvcmlnaW5fcmVxX2hvc3QKICAgICAgICAgc2VsZi51bnZlcmlmaWFibGUgPSB1bnZlcmlmaWFibGUKLSAgICAgICAgc2VsZi5tZXRob2QgPSBtZXRob2QKKyAgICAgICAgaWYgbWV0aG9kOgorICAgICAgICAgICAgc2VsZi5tZXRob2QgPSBtZXRob2QKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmdWxsX3VybChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mcmFnbWVudDoKKyAgICAgICAgICAgIHJldHVybiAne30je30nLmZvcm1hdChzZWxmLl9mdWxsX3VybCwgc2VsZi5mcmFnbWVudCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Z1bGxfdXJsCisKKyAgICBAZnVsbF91cmwuc2V0dGVyCisgICAgZGVmIGZ1bGxfdXJsKHNlbGYsIHVybCk6CisgICAgICAgICMgdW53cmFwKCc8VVJMOnR5cGU6Ly9ob3N0L3BhdGg+JykgLS0+ICd0eXBlOi8vaG9zdC9wYXRoJworICAgICAgICBzZWxmLl9mdWxsX3VybCA9IHVud3JhcCh1cmwpCisgICAgICAgIHNlbGYuX2Z1bGxfdXJsLCBzZWxmLmZyYWdtZW50ID0gc3BsaXR0YWcoc2VsZi5fZnVsbF91cmwpCiAgICAgICAgIHNlbGYuX3BhcnNlKCkKIAorICAgIEBmdWxsX3VybC5kZWxldGVyCisgICAgZGVmIGZ1bGxfdXJsKHNlbGYpOgorICAgICAgICBzZWxmLl9mdWxsX3VybCA9IE5vbmUKKyAgICAgICAgc2VsZi5mcmFnbWVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZWxlY3RvciA9ICcnCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGF0YShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RhdGEKKworICAgIEBkYXRhLnNldHRlcgorICAgIGRlZiBkYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBkYXRhICE9IHNlbGYuX2RhdGE6CisgICAgICAgICAgICBzZWxmLl9kYXRhID0gZGF0YQorICAgICAgICAgICAgIyBpc3N1ZSAxNjQ2NAorICAgICAgICAgICAgIyBpZiB3ZSBjaGFuZ2UgZGF0YSB3ZSBuZWVkIHRvIHJlbW92ZSBjb250ZW50LWxlbmd0aCBoZWFkZXIKKyAgICAgICAgICAgICMgKGNhdXNlIGl0J3MgbW9zdCBwcm9iYWJseSBjYWxjdWxhdGVkIGZvciBwcmV2aW91cyB2YWx1ZSkKKyAgICAgICAgICAgIGlmIHNlbGYuaGFzX2hlYWRlcigiQ29udGVudC1sZW5ndGgiKToKKyAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikKKworICAgIEBkYXRhLmRlbGV0ZXIKKyAgICBkZWYgZGF0YShzZWxmKToKKyAgICAgICAgc2VsZi5kYXRhID0gTm9uZQorCiAgICAgZGVmIF9wYXJzZShzZWxmKToKLSAgICAgICAgc2VsZi50eXBlLCByZXN0ID0gc3BsaXR0eXBlKHNlbGYuZnVsbF91cmwpCisgICAgICAgIHNlbGYudHlwZSwgcmVzdCA9IHNwbGl0dHlwZShzZWxmLl9mdWxsX3VybCkKICAgICAgICAgaWYgc2VsZi50eXBlIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHVybCB0eXBlOiAlciIgJSBzZWxmLmZ1bGxfdXJsKQogICAgICAgICBzZWxmLmhvc3QsIHNlbGYuc2VsZWN0b3IgPSBzcGxpdGhvc3QocmVzdCkKQEAgLTI4NCw2MiArMzE3LDExIEBACiAKICAgICBkZWYgZ2V0X21ldGhvZChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGluZGljYXRpbmcgdGhlIEhUVFAgcmVxdWVzdCBtZXRob2QuIiIiCi0gICAgICAgIGlmIHNlbGYubWV0aG9kIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubWV0aG9kCi0gICAgICAgIGVsaWYgc2VsZi5kYXRhIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuICJQT1NUIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICJHRVQiCisgICAgICAgIGRlZmF1bHRfbWV0aG9kID0gIlBPU1QiIGlmIHNlbGYuZGF0YSBpcyBub3QgTm9uZSBlbHNlICJHRVQiCisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsICdtZXRob2QnLCBkZWZhdWx0X21ldGhvZCkKIAogICAgIGRlZiBnZXRfZnVsbF91cmwoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZnJhZ21lbnQ6Ci0gICAgICAgICAgICByZXR1cm4gJyVzIyVzJyAlIChzZWxmLmZ1bGxfdXJsLCBzZWxmLmZyYWdtZW50KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnVsbF91cmwKLQotICAgICMgQmVnaW4gZGVwcmVjYXRlZCBtZXRob2RzCi0KLSAgICBkZWYgYWRkX2RhdGEoc2VsZiwgZGF0YSk6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmFkZF9kYXRhIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCi0KLSAgICBkZWYgaGFzX2RhdGEoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0Lmhhc19kYXRhIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5kYXRhIGlzIG5vdCBOb25lCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF9kYXRhIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5kYXRhCi0KLSAgICBkZWYgZ2V0X3R5cGUoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF90eXBlIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi50eXBlCi0KLSAgICBkZWYgZ2V0X2hvc3Qoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF9ob3N0IG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5ob3N0Ci0KLSAgICBkZWYgZ2V0X3NlbGVjdG9yKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfc2VsZWN0b3IgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLnNlbGVjdG9yCi0KLSAgICBkZWYgaXNfdW52ZXJpZmlhYmxlKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5pc191bnZlcmlmaWFibGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLnVudmVyaWZpYWJsZQotCi0gICAgZGVmIGdldF9vcmlnaW5fcmVxX2hvc3Qoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF9vcmlnaW5fcmVxX2hvc3QgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLm9yaWdpbl9yZXFfaG9zdAotCi0gICAgIyBFbmQgZGVwcmVjYXRlZCBtZXRob2RzCisgICAgICAgIHJldHVybiBzZWxmLmZ1bGxfdXJsCiAKICAgICBkZWYgc2V0X3Byb3h5KHNlbGYsIGhvc3QsIHR5cGUpOgogICAgICAgICBpZiBzZWxmLnR5cGUgPT0gJ2h0dHBzJyBhbmQgbm90IHNlbGYuX3R1bm5lbF9ob3N0OgpAQCAtMzY5LDYgKzM1MSwxMCBAQAogICAgICAgICAgICAgaGVhZGVyX25hbWUsCiAgICAgICAgICAgICBzZWxmLnVucmVkaXJlY3RlZF9oZHJzLmdldChoZWFkZXJfbmFtZSwgZGVmYXVsdCkpCiAKKyAgICBkZWYgcmVtb3ZlX2hlYWRlcihzZWxmLCBoZWFkZXJfbmFtZSk6CisgICAgICAgIHNlbGYuaGVhZGVycy5wb3AoaGVhZGVyX25hbWUsIE5vbmUpCisgICAgICAgIHNlbGYudW5yZWRpcmVjdGVkX2hkcnMucG9wKGhlYWRlcl9uYW1lLCBOb25lKQorCiAgICAgZGVmIGhlYWRlcl9pdGVtcyhzZWxmKToKICAgICAgICAgaGRycyA9IHNlbGYudW5yZWRpcmVjdGVkX2hkcnMuY29weSgpCiAgICAgICAgIGhkcnMudXBkYXRlKHNlbGYuaGVhZGVycykKQEAgLTUzMSw3ICs1MTcsOCBAQAogICAgIG9wZW5lciA9IE9wZW5lckRpcmVjdG9yKCkKICAgICBkZWZhdWx0X2NsYXNzZXMgPSBbUHJveHlIYW5kbGVyLCBVbmtub3duSGFuZGxlciwgSFRUUEhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBEZWZhdWx0RXJyb3JIYW5kbGVyLCBIVFRQUmVkaXJlY3RIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICBGVFBIYW5kbGVyLCBGaWxlSGFuZGxlciwgSFRUUEVycm9yUHJvY2Vzc29yXQorICAgICAgICAgICAgICAgICAgICAgICBGVFBIYW5kbGVyLCBGaWxlSGFuZGxlciwgSFRUUEVycm9yUHJvY2Vzc29yLAorICAgICAgICAgICAgICAgICAgICAgICBEYXRhSGFuZGxlcl0KICAgICBpZiBoYXNhdHRyKGh0dHAuY2xpZW50LCAiSFRUUFNDb25uZWN0aW9uIik6CiAgICAgICAgIGRlZmF1bHRfY2xhc3Nlcy5hcHBlbmQoSFRUUFNIYW5kbGVyKQogICAgIHNraXAgPSBzZXQoKQpAQCAtMTI0Niw3ICsxMjMzLDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoLnJlcXVlc3QocmVxLmdldF9tZXRob2QoKSwgcmVxLnNlbGVjdG9yLCByZXEuZGF0YSwgaGVhZGVycykKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgogICAgICAgICAgICAgaC5jbG9zZSgpCiAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcihlcnIpCiAgICAgICAgIGVsc2U6CkBAIC0xNDUxLDcgKzE0MzgsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGhvc3QgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShob3N0KQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcmFpc2UgVVJMRXJyb3IobXNnKQogICAgICAgICBwYXRoLCBhdHRycyA9IHNwbGl0YXR0cihyZXEuc2VsZWN0b3IpCiAgICAgICAgIGRpcnMgPSBwYXRoLnNwbGl0KCcvJykKQEAgLTE1MzcsNiArMTUyNCwzNiBAQAogICAgICAgICBzZWxmLmNhY2hlLmNsZWFyKCkKICAgICAgICAgc2VsZi50aW1lb3V0LmNsZWFyKCkKIAorY2xhc3MgRGF0YUhhbmRsZXIoQmFzZUhhbmRsZXIpOgorICAgIGRlZiBkYXRhX29wZW4oc2VsZiwgcmVxKToKKyAgICAgICAgIyBkYXRhIFVSTHMgYXMgc3BlY2lmaWVkIGluIFJGQyAyMzk3LgorICAgICAgICAjCisgICAgICAgICMgaWdub3JlcyBQT1NUZWQgZGF0YQorICAgICAgICAjCisgICAgICAgICMgc3ludGF4OgorICAgICAgICAjIGRhdGF1cmwgICA6PSAiZGF0YToiIFsgbWVkaWF0eXBlIF0gWyAiO2Jhc2U2NCIgXSAiLCIgZGF0YQorICAgICAgICAjIG1lZGlhdHlwZSA6PSBbIHR5cGUgIi8iIHN1YnR5cGUgXSAqKCAiOyIgcGFyYW1ldGVyICkKKyAgICAgICAgIyBkYXRhICAgICAgOj0gKnVybGNoYXIKKyAgICAgICAgIyBwYXJhbWV0ZXIgOj0gYXR0cmlidXRlICI9IiB2YWx1ZQorICAgICAgICB1cmwgPSByZXEuZnVsbF91cmwKKworICAgICAgICBzY2hlbWUsIGRhdGEgPSB1cmwuc3BsaXQoIjoiLDEpCisgICAgICAgIG1lZGlhdHlwZSwgZGF0YSA9IGRhdGEuc3BsaXQoIiwiLDEpCisKKyAgICAgICAgIyBldmVuIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMcyBtaWdodCBiZSBxdW90ZWQgc28gdW5xdW90ZSBpbiBhbnkgY2FzZToKKyAgICAgICAgZGF0YSA9IHVucXVvdGVfdG9fYnl0ZXMoZGF0YSkKKyAgICAgICAgaWYgbWVkaWF0eXBlLmVuZHN3aXRoKCI7YmFzZTY0Iik6CisgICAgICAgICAgICBkYXRhID0gYmFzZTY0LmRlY29kZWJ5dGVzKGRhdGEpCisgICAgICAgICAgICBtZWRpYXR5cGUgPSBtZWRpYXR5cGVbOi03XQorCisgICAgICAgIGlmIG5vdCBtZWRpYXR5cGU6CisgICAgICAgICAgICBtZWRpYXR5cGUgPSAidGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJIgorCisgICAgICAgIGhlYWRlcnMgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKCJDb250ZW50LXR5cGU6ICVzXG5Db250ZW50LWxlbmd0aDogJWRcbiIgJQorICAgICAgICAgICAgKG1lZGlhdHlwZSwgbGVuKGRhdGEpKSkKKworICAgICAgICByZXR1cm4gYWRkaW5mb3VybChpby5CeXRlc0lPKGRhdGEpLCBoZWFkZXJzLCB1cmwpCisKIAogIyBDb2RlIG1vdmUgZnJvbSB0aGUgb2xkIHVybGxpYiBtb2R1bGUKIApAQCAtMTY2MCwyMCArMTY3NywyMCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsIG5hbWUpKHVybCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgbmFtZSkodXJsLCBkYXRhKQotICAgICAgICBleGNlcHQgSFRUUEVycm9yOgorICAgICAgICBleGNlcHQgKEhUVFBFcnJvciwgVVJMRXJyb3IpOgogICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdzb2NrZXQgZXJyb3InLCBtc2cpLndpdGhfdHJhY2ViYWNrKHN5cy5leGNfaW5mbygpWzJdKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdzb2NrZXQgZXJyb3InLCBtc2cpLndpdGhfdHJhY2ViYWNrKHN5cy5leGNfaW5mbygpWzJdKQogCiAgICAgZGVmIG9wZW5fdW5rbm93bihzZWxmLCBmdWxsdXJsLCBkYXRhPU5vbmUpOgogICAgICAgICAiIiJPdmVycmlkYWJsZSBpbnRlcmZhY2UgdG8gb3BlbiB1bmtub3duIFVSTCB0eXBlLiIiIgogICAgICAgICB0eXBlLCB1cmwgPSBzcGxpdHR5cGUoZnVsbHVybCkKLSAgICAgICAgcmFpc2UgSU9FcnJvcigndXJsIGVycm9yJywgJ3Vua25vd24gdXJsIHR5cGUnLCB0eXBlKQorICAgICAgICByYWlzZSBPU0Vycm9yKCd1cmwgZXJyb3InLCAndW5rbm93biB1cmwgdHlwZScsIHR5cGUpCiAKICAgICBkZWYgb3Blbl91bmtub3duX3Byb3h5KHNlbGYsIHByb3h5LCBmdWxsdXJsLCBkYXRhPU5vbmUpOgogICAgICAgICAiIiJPdmVycmlkYWJsZSBpbnRlcmZhY2UgdG8gb3BlbiB1bmtub3duIFVSTCB0eXBlLiIiIgogICAgICAgICB0eXBlLCB1cmwgPSBzcGxpdHR5cGUoZnVsbHVybCkKLSAgICAgICAgcmFpc2UgSU9FcnJvcigndXJsIGVycm9yJywgJ2ludmFsaWQgcHJveHkgZm9yICVzJyAlIHR5cGUsIHByb3h5KQorICAgICAgICByYWlzZSBPU0Vycm9yKCd1cmwgZXJyb3InLCAnaW52YWxpZCBwcm94eSBmb3IgJXMnICUgdHlwZSwgcHJveHkpCiAKICAgICAjIEV4dGVybmFsIGludGVyZmFjZQogICAgIGRlZiByZXRyaWV2ZShzZWxmLCB1cmwsIGZpbGVuYW1lPU5vbmUsIHJlcG9ydGhvb2s9Tm9uZSwgZGF0YT1Ob25lKToKQEAgLTE2ODksNyArMTcwNiw3IEBACiAgICAgICAgICAgICAgICAgaGRycyA9IGZwLmluZm8oKQogICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gdXJsMnBhdGhuYW1lKHNwbGl0aG9zdCh1cmwxKVsxXSksIGhkcnMKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZwID0gc2VsZi5vcGVuKHVybCwgZGF0YSkKICAgICAgICAgdHJ5OgpAQCAtMTc4Miw3ICsxNzk5LDcgQEAKICAgICAgICAgICAgICAgICBpZiBwcm94eV9ieXBhc3MocmVhbGhvc3QpOgogICAgICAgICAgICAgICAgICAgICBob3N0ID0gcmVhbGhvc3QKIAotICAgICAgICBpZiBub3QgaG9zdDogcmFpc2UgSU9FcnJvcignaHR0cCBlcnJvcicsICdubyBob3N0IGdpdmVuJykKKyAgICAgICAgaWYgbm90IGhvc3Q6IHJhaXNlIE9TRXJyb3IoJ2h0dHAgZXJyb3InLCAnbm8gaG9zdCBnaXZlbicpCiAKICAgICAgICAgaWYgcHJveHlfcGFzc3dkOgogICAgICAgICAgICAgcHJveHlfcGFzc3dkID0gdW5xdW90ZShwcm94eV9wYXNzd2QpCkBAIC0xODU1LDcgKzE4NzIsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5odHRwX2Vycm9yX2RlZmF1bHQodXJsLCBmcCwgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzKQogCiAgICAgZGVmIGh0dHBfZXJyb3JfZGVmYXVsdChzZWxmLCB1cmwsIGZwLCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMpOgotICAgICAgICAiIiJEZWZhdWx0IGVycm9yIGhhbmRsZXI6IGNsb3NlIHRoZSBjb25uZWN0aW9uIGFuZCByYWlzZSBJT0Vycm9yLiIiIgorICAgICAgICAiIiJEZWZhdWx0IGVycm9yIGhhbmRsZXI6IGNsb3NlIHRoZSBjb25uZWN0aW9uIGFuZCByYWlzZSBPU0Vycm9yLiIiIgogICAgICAgICBmcC5jbG9zZSgpCiAgICAgICAgIHJhaXNlIEhUVFBFcnJvcih1cmwsIGVycmNvZGUsIGVycm1zZywgaGVhZGVycywgTm9uZSkKIApAQCAtMTk4Miw3ICsxOTk5LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgW3R5cGUsIGRhdGFdID0gdXJsLnNwbGl0KCcsJywgMSkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdkYXRhIGVycm9yJywgJ2JhZCBkYXRhIFVSTCcpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdkYXRhIGVycm9yJywgJ2JhZCBkYXRhIFVSTCcpCiAgICAgICAgIGlmIG5vdCB0eXBlOgogICAgICAgICAgICAgdHlwZSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknCiAgICAgICAgIHNlbWkgPSB0eXBlLnJmaW5kKCc7JykKQEAgLTI0MzEsNyArMjQ0OCw3IEBACiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBob3N0SVAgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShob3N0b25seSkKICAgICAgICAgICAgICAgICAgICAgaG9zdElQID0gaXAybnVtKGhvc3RJUCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBiYXNlID0gaXAybnVtKG0uZ3JvdXAoMSkpCkBAIC0yNTE3LDcgKzI1MzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcHJveGllc1snaHR0cHMnXSA9ICdodHRwczovLyVzJyAlIHByb3h5U2VydmVyCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm94aWVzWydmdHAnXSA9ICdmdHA6Ly8lcycgJSBwcm94eVNlcnZlcgogICAgICAgICAgICAgaW50ZXJuZXRTZXR0aW5ncy5DbG9zZSgpCi0gICAgICAgIGV4Y2VwdCAoV2luZG93c0Vycm9yLCBWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgICAjIEVpdGhlciByZWdpc3RyeSBrZXkgbm90IGZvdW5kIGV0Yywgb3IgdGhlIHZhbHVlIGluIGFuCiAgICAgICAgICAgICAjIHVuZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAgICAgIyBwcm94aWVzIGFscmVhZHkgc2V0IHVwIHRvIGJlIGVtcHR5IHNvIG5vdGhpbmcgdG8gZG8KQEAgLTI1NDcsNyArMjU2NCw3IEBACiAgICAgICAgICAgICBwcm94eU92ZXJyaWRlID0gc3RyKHdpbnJlZy5RdWVyeVZhbHVlRXgoaW50ZXJuZXRTZXR0aW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb3h5T3ZlcnJpZGUnKVswXSkKICAgICAgICAgICAgICMgXl5eXiBSZXR1cm5lZCBhcyBVbmljb2RlIGJ1dCBwcm9ibGVtcyBpZiBub3QgY29udmVydGVkIHRvIEFTQ0lJCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgaWYgbm90IHByb3h5RW5hYmxlIG9yIG5vdCBwcm94eU92ZXJyaWRlOgogICAgICAgICAgICAgcmV0dXJuIDAKQEAgLTI1NTgsMTMgKzI1NzUsMTMgQEAKICAgICAgICAgICAgIGFkZHIgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShyYXdIb3N0KQogICAgICAgICAgICAgaWYgYWRkciAhPSByYXdIb3N0OgogICAgICAgICAgICAgICAgIGhvc3QuYXBwZW5kKGFkZHIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcWRuID0gc29ja2V0LmdldGZxZG4ocmF3SG9zdCkKICAgICAgICAgICAgIGlmIGZxZG4gIT0gcmF3SG9zdDoKICAgICAgICAgICAgICAgICBob3N0LmFwcGVuZChmcWRuKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBtYWtlIGEgY2hlY2sgdmFsdWUgbGlzdCBmcm9tIHRoZSByZWdpc3RyeSBlbnRyeTogcmVwbGFjZSB0aGUKICAgICAgICAgIyAnPGxvY2FsPicgc3RyaW5nIGJ5IHRoZSBsb2NhbGhvc3QgZW50cnkgYW5kIHRoZSBjb3JyZXNwb25kaW5nCmRpZmYgLS1naXQgYS9MaWIvdXVpZC5weSBiL0xpYi91dWlkLnB5CmluZGV4IDk5NDYwNDIuLmE0ZTU1MzIgMTAwNjQ0Ci0tLSBhL0xpYi91dWlkLnB5CisrKyBiL0xpYi91dWlkLnB5CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgIGlmIGxlbihieXRlcykgIT0gMTY6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYnl0ZXMgaXMgbm90IGEgMTYtY2hhciBzdHJpbmcnKQogICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnl0ZXMsIGJ5dGVzXyksIHJlcHIoYnl0ZXMpCi0gICAgICAgICAgICBpbnQgPSBpbnRfKCgnJTAyeCcqMTYpICUgdHVwbGUoYnl0ZXMpLCAxNikKKyAgICAgICAgICAgIGludCA9IGludF8uZnJvbV9ieXRlcyhieXRlcywgYnl0ZW9yZGVyPSdiaWcnKQogICAgICAgICBpZiBmaWVsZHMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBsZW4oZmllbGRzKSAhPSA2OgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ZpZWxkcyBpcyBub3QgYSA2LXR1cGxlJykKQEAgLTMyMSw4ICszMjEsOSBAQAogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIHRyeToKLSAgICAgICAgIyBMQ19BTEwgdG8gZW5zdXJlIEVuZ2xpc2ggb3V0cHV0LCAyPi9kZXYvbnVsbCB0bwotICAgICAgICAjIHByZXZlbnQgb3V0cHV0IG9uIHN0ZGVycgorICAgICAgICAjIExDX0FMTCB0byBlbnN1cmUgRW5nbGlzaCBvdXRwdXQsIDI+L2Rldi9udWxsIHRvIHByZXZlbnQgb3V0cHV0IG9uCisgICAgICAgICMgc3RkZXJyIChOb3RlOiB3ZSBkb24ndCBoYXZlIGFuIGV4YW1wbGUgd2hlcmUgdGhlIHdvcmRzIHdlIHNlYXJjaCBmb3IKKyAgICAgICAgIyBhcmUgYWN0dWFsbHkgbG9jYWxpemVkLCBidXQgaW4gdGhlb3J5IHNvbWUgc3lzdGVtIGNvdWxkIGRvIHNvLikKICAgICAgICAgY21kID0gJ0xDX0FMTD1DICVzICVzIDI+L2Rldi9udWxsJyAlIChleGVjdXRhYmxlLCBhcmdzKQogICAgICAgICB3aXRoIG9zLnBvcGVuKGNtZCkgYXMgcGlwZToKICAgICAgICAgICAgIGZvciBsaW5lIGluIHBpcGU6CkBAIC0zMzksNyArMzQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRhc2hlcy4gVGhlc2Ugc2hvdWxkIGJlIGlnbm9yZWQgaW4gZmF2b3Igb2YgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVhbCBNQUMgYWRkcmVzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogCiBkZWYgX2lmY29uZmlnX2dldG5vZGUoKToKQEAgLTM4MCw3ICszODEsNyBAQAogICAgIGZvciBkaXIgaW4gZGlyczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcGlwZSA9IG9zLnBvcGVuKG9zLnBhdGguam9pbihkaXIsICdpcGNvbmZpZycpICsgJyAvYWxsJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZvciBsaW5lIGluIHBpcGU6CmRpZmYgLS1naXQgYS9MaWIvdmVudi9fX2luaXRfXy5weSBiL0xpYi92ZW52L19faW5pdF9fLnB5CmluZGV4IDM2MDYzNzAuLjNiNWY1ZmEgMTAwNjQ0Ci0tLSBhL0xpYi92ZW52L19faW5pdF9fLnB5CisrKyBiL0xpYi92ZW52L19faW5pdF9fLnB5CkBAIC0yNCwxMCArMjQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZC4KICAgLS11cGdyYWRlICAgICAgICAgICAgIFVwZ3JhZGUgdGhlIGVudmlyb25tZW50IGRpcmVjdG9yeSB0byB1c2UgdGhpcyB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICBvZiBQeXRob24sIGFzc3VtaW5nIFB5dGhvbiBoYXMgYmVlbiB1cGdyYWRlZCBpbi1wbGFjZS4KKyAgLS13aXRob3V0LXBpcCAgICAgICAgIFNraXBzIGluc3RhbGxpbmcgb3IgdXBncmFkaW5nIHBpcCBpbiB0aGUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgKHBpcCBpcyBib290c3RyYXBwZWQgYnkgZGVmYXVsdCkKICIiIgogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCBzeXNjb25maWcKIGltcG9ydCB0eXBlcwpAQCAtNTYsMTQgKzU5LDE3IEBACiAgICAgOnBhcmFtIHN5bWxpbmtzOiBJZiBUcnVlLCBhdHRlbXB0IHRvIHN5bWxpbmsgcmF0aGVyIHRoYW4gY29weSBmaWxlcyBpbnRvCiAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIGVudmlyb25tZW50LgogICAgIDpwYXJhbSB1cGdyYWRlOiBJZiBUcnVlLCB1cGdyYWRlIGFuIGV4aXN0aW5nIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgOnBhcmFtIHdpdGhfcGlwOiBJZiBUcnVlLCBlbnN1cmUgcGlwIGlzIGluc3RhbGxlZCBpbiB0aGUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsCi0gICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB1cGdyYWRlPUZhbHNlKToKKyAgICAgICAgICAgICAgICAgc3ltbGlua3M9RmFsc2UsIHVwZ3JhZGU9RmFsc2UsIHdpdGhfcGlwPUZhbHNlKToKICAgICAgICAgc2VsZi5zeXN0ZW1fc2l0ZV9wYWNrYWdlcyA9IHN5c3RlbV9zaXRlX3BhY2thZ2VzCiAgICAgICAgIHNlbGYuY2xlYXIgPSBjbGVhcgogICAgICAgICBzZWxmLnN5bWxpbmtzID0gc3ltbGlua3MKICAgICAgICAgc2VsZi51cGdyYWRlID0gdXBncmFkZQorICAgICAgICBzZWxmLndpdGhfcGlwID0gd2l0aF9waXAKIAogICAgIGRlZiBjcmVhdGUoc2VsZiwgZW52X2Rpcik6CiAgICAgICAgICIiIgpAQCAtNzYsMTAgKzgyLDIwIEBACiAgICAgICAgIGNvbnRleHQgPSBzZWxmLmVuc3VyZV9kaXJlY3RvcmllcyhlbnZfZGlyKQogICAgICAgICBzZWxmLmNyZWF0ZV9jb25maWd1cmF0aW9uKGNvbnRleHQpCiAgICAgICAgIHNlbGYuc2V0dXBfcHl0aG9uKGNvbnRleHQpCisgICAgICAgIGlmIHNlbGYud2l0aF9waXA6CisgICAgICAgICAgICBzZWxmLl9zZXR1cF9waXAoY29udGV4dCkKICAgICAgICAgaWYgbm90IHNlbGYudXBncmFkZToKICAgICAgICAgICAgIHNlbGYuc2V0dXBfc2NyaXB0cyhjb250ZXh0KQogICAgICAgICAgICAgc2VsZi5wb3N0X3NldHVwKGNvbnRleHQpCiAKKyAgICBkZWYgY2xlYXJfZGlyZWN0b3J5KHNlbGYsIHBhdGgpOgorICAgICAgICBmb3IgZm4gaW4gb3MubGlzdGRpcihwYXRoKToKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHBhdGgsIGZuKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZm4pIG9yIG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoZm4pOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZm4pCisKICAgICBkZWYgZW5zdXJlX2RpcmVjdG9yaWVzKHNlbGYsIGVudl9kaXIpOgogICAgICAgICAiIiIKICAgICAgICAgQ3JlYXRlIHRoZSBkaXJlY3RvcmllcyBmb3IgdGhlIGVudmlyb25tZW50LgpAQCAtOTEsMTEgKzEwNywxMSBAQAogICAgICAgICBkZWYgY3JlYXRlX2lmX25lZWRlZChkKToKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkKToKICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhkKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzbGluayhkKSBvciBvcy5wYXRoLmlzZmlsZShkKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcicgJSBkKQogCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGVudl9kaXIpIGFuZCBub3QgKHNlbGYuY2xlYXIgb3Igc2VsZi51cGdyYWRlKToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0RpcmVjdG9yeSBleGlzdHM6ICVzJyAlIGVudl9kaXIpCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGVudl9kaXIpIGFuZCBzZWxmLmNsZWFyOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShlbnZfZGlyKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9kaXJlY3RvcnkoZW52X2RpcikKICAgICAgICAgY29udGV4dCA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpCiAgICAgICAgIGNvbnRleHQuZW52X2RpciA9IGVudl9kaXIKICAgICAgICAgY29udGV4dC5lbnZfbmFtZSA9IG9zLnBhdGguc3BsaXQoZW52X2RpcilbMV0KQEAgLTIxNiw2ICsyMzIsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNyYywgZHN0KQogICAgICAgICAgICAgICAgICAgICBicmVhawogCisgICAgZGVmIF9zZXR1cF9waXAoc2VsZiwgY29udGV4dCk6CisgICAgICAgICIiIkluc3RhbGxzIG9yIHVwZ3JhZGVzIHBpcCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQiIiIKKyAgICAgICAgIyBXZSBydW4gZW5zdXJlcGlwIGluIGlzb2xhdGVkIG1vZGUgdG8gYXZvaWQgc2lkZSBlZmZlY3RzIGZyb20KKyAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJzLCB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGFueXRoaW5nIGVsc2UKKyAgICAgICAgIyBpbnRlbmRlZCBmb3IgdGhlIGdsb2JhbCBQeXRob24gZW52aXJvbm1lbnQKKyAgICAgICAgY21kID0gW2NvbnRleHQuZW52X2V4ZSwgJy1JbScsICdlbnN1cmVwaXAnLCAnLS11cGdyYWRlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1kZWZhdWx0LXBpcCddCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCiAgICAgZGVmIHNldHVwX3NjcmlwdHMoc2VsZiwgY29udGV4dCk6CiAgICAgICAgICIiIgogICAgICAgICBTZXQgdXAgc2NyaXB0cyBpbnRvIHRoZSBjcmVhdGVkIGVudmlyb25tZW50IGZyb20gYSBkaXJlY3RvcnkuCkBAIC0yNTMsNyArMjc4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nIHByb2Nlc3NlZC4KICAgICAgICAgIiIiCiAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9ESVJfXycsIGNvbnRleHQuZW52X2RpcikKLSAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX05BTUVfXycsIGNvbnRleHQucHJvbXB0KQorICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfTkFNRV9fJywgY29udGV4dC5lbnZfbmFtZSkKKyAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX1BST01QVF9fJywgY29udGV4dC5wcm9tcHQpCiAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9CSU5fTkFNRV9fJywgY29udGV4dC5iaW5fbmFtZSkKICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX1BZVEhPTl9fJywgY29udGV4dC5lbnZfZXhlKQogICAgICAgICByZXR1cm4gdGV4dApAQCAtMzA4LDcgKzMzNCw4IEBACiAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5bW9kZShzcmNmaWxlLCBkc3RmaWxlKQogCiAKLWRlZiBjcmVhdGUoZW52X2Rpciwgc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLCBzeW1saW5rcz1GYWxzZSk6CitkZWYgY3JlYXRlKGVudl9kaXIsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9RmFsc2UsIHdpdGhfcGlwPUZhbHNlKToKICAgICAiIiIKICAgICBDcmVhdGUgYSB2aXJ0dWFsIGVudmlyb25tZW50IGluIGEgZGlyZWN0b3J5LgogCkBAIC0zMjQsOSArMzUxLDExIEBACiAgICAgICAgICAgICAgICAgICByYWlzZWQuCiAgICAgOnBhcmFtIHN5bWxpbmtzOiBJZiBUcnVlLCBhdHRlbXB0IHRvIHN5bWxpbmsgcmF0aGVyIHRoYW4gY29weSBmaWxlcyBpbnRvCiAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIGVudmlyb25tZW50LgorICAgIDpwYXJhbSB3aXRoX3BpcDogSWYgVHJ1ZSwgZW5zdXJlIHBpcCBpcyBpbnN0YWxsZWQgaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50CiAgICAgIiIiCiAgICAgYnVpbGRlciA9IEVudkJ1aWxkZXIoc3lzdGVtX3NpdGVfcGFja2FnZXM9c3lzdGVtX3NpdGVfcGFja2FnZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyPWNsZWFyLCBzeW1saW5rcz1zeW1saW5rcykKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcj1jbGVhciwgc3ltbGlua3M9c3ltbGlua3MsIHdpdGhfcGlwPXdpdGhfcGlwKQogICAgIGJ1aWxkZXIuY3JlYXRlKGVudl9kaXIpCiAKIGRlZiBtYWluKGFyZ3M9Tm9uZSk6CkBAIC0zNjAsMjggKzM4OSw0MCBAQAogICAgICAgICAgICAgdXNlX3N5bWxpbmtzID0gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHVzZV9zeW1saW5rcyA9IFRydWUKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zeW1saW5rcycsIGRlZmF1bHQ9dXNlX3N5bWxpbmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3N5bWxpbmtzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcnkgdG8gdXNlIHN5bWxpbmtzIHJhdGhlciB0aGFuIGNvcGllcywgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doZW4gc3ltbGlua3MgYXJlIG5vdCB0aGUgZGVmYXVsdCBmb3IgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBwbGF0Zm9ybS4nKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXN5bWxpbmtzJywgZGVmYXVsdD11c2Vfc3ltbGlua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdzeW1saW5rcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcnkgdG8gdXNlIHN5bWxpbmtzIHJhdGhlciB0aGFuIGNvcGllcywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hlbiBzeW1saW5rcyBhcmUgbm90IHRoZSBkZWZhdWx0IGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgcGxhdGZvcm0uJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWNvcGllcycsIGRlZmF1bHQ9bm90IHVzZV9zeW1saW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBkZXN0PSdzeW1saW5rcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcnkgdG8gdXNlIGNvcGllcyByYXRoZXIgdGhhbiBzeW1saW5rcywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXZlbiB3aGVuIHN5bWxpbmtzIGFyZSB0aGUgZGVmYXVsdCBmb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHBsYXRmb3JtLicpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY2xlYXInLCBkZWZhdWx0PUZhbHNlLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2NsZWFyJywgaGVscD0nRGVsZXRlIHRoZSBlbnZpcm9ubWVudCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXJlY3RvcnkgaWYgaXQgYWxyZWFkeSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGlzdHMuIElmIG5vdCBzcGVjaWZpZWQgYW5kICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBkaXJlY3RvcnkgZXhpc3RzLCBhbiBlcnJvcicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpcyByYWlzZWQuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdjbGVhcicsIGhlbHA9J0RlbGV0ZSB0aGUgY29udGVudHMgb2YgdGhlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vudmlyb25tZW50IGRpcmVjdG9yeSBpZiBpdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbHJlYWR5IGV4aXN0cywgYmVmb3JlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vudmlyb25tZW50IGNyZWF0aW9uLicpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdXBncmFkZScsIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ndXBncmFkZScsIGhlbHA9J1VwZ3JhZGUgdGhlIGVudmlyb25tZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpcmVjdG9yeSB0byB1c2UgdGhpcyB2ZXJzaW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mIFB5dGhvbiwgYXNzdW1pbmcgUHl0aG9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhcyBiZWVuIHVwZ3JhZGVkIGluLXBsYWNlLicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0td2l0aG91dC1waXAnLCBkZXN0PSd3aXRoX3BpcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1UcnVlLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTa2lwcyBpbnN0YWxsaW5nIG9yIHVwZ3JhZGluZyBwaXAgaW4gdGhlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aXJ0dWFsIGVudmlyb25tZW50IChwaXAgaXMgYm9vdHN0cmFwcGVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdieSBkZWZhdWx0KScpCiAgICAgICAgIG9wdGlvbnMgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQogICAgICAgICBpZiBvcHRpb25zLnVwZ3JhZGUgYW5kIG9wdGlvbnMuY2xlYXI6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd5b3UgY2Fubm90IHN1cHBseSAtLXVwZ3JhZGUgYW5kIC0tY2xlYXIgdG9nZXRoZXIuJykKICAgICAgICAgYnVpbGRlciA9IEVudkJ1aWxkZXIoc3lzdGVtX3NpdGVfcGFja2FnZXM9b3B0aW9ucy5zeXN0ZW1fc2l0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI9b3B0aW9ucy5jbGVhciwgc3ltbGlua3M9b3B0aW9ucy5zeW1saW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZT1vcHRpb25zLnVwZ3JhZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyPW9wdGlvbnMuY2xlYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPW9wdGlvbnMuc3ltbGlua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGU9b3B0aW9ucy51cGdyYWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoX3BpcD1vcHRpb25zLndpdGhfcGlwKQogICAgICAgICBmb3IgZCBpbiBvcHRpb25zLmRpcnM6CiAgICAgICAgICAgICBidWlsZGVyLmNyZWF0ZShkKQogCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL250L0FjdGl2YXRlLnBzMSBiL0xpYi92ZW52L3NjcmlwdHMvbnQvQWN0aXZhdGUucHMxCmluZGV4IDFjNWVmOTguLmIxNWRlY2IgMTAwNjQ0Ci0tLSBhL0xpYi92ZW52L3NjcmlwdHMvbnQvQWN0aXZhdGUucHMxCisrKyBiL0xpYi92ZW52L3NjcmlwdHMvbnQvQWN0aXZhdGUucHMxCkBAIC0xLDI1ICsxLDQwIEBACitmdW5jdGlvbiBnbG9iYWw6ZGVhY3RpdmF0ZSAoW3N3aXRjaF0kTm9uRGVzdHJ1Y3RpdmUpIHsNCisgICAgIyBSZXZlcnQgdG8gb3JpZ2luYWwgdmFsdWVzDQorICAgIGlmIChUZXN0LVBhdGggZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCkgew0KKyAgICAgICAgY29weS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQgZnVuY3Rpb246cHJvbXB0DQorICAgICAgICByZW1vdmUtaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUDQorICAgIH0NCisNCisgICAgaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUpIHsNCisgICAgICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUgZW52OlBZVEhPTkhPTUUNCisgICAgICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQ0KKyAgICB9DQorDQorICAgIGlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QQVRIKSB7DQorICAgICAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIIGVudjpQQVRIDQorICAgICAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEgNCisgICAgfQ0KKw0KKyAgICBpZiAoVGVzdC1QYXRoIGVudjpWSVJUVUFMX0VOVikgew0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZW52OlZJUlRVQUxfRU5WDQorICAgIH0NCisNCisgICAgaWYgKCEkTm9uRGVzdHJ1Y3RpdmUpIHsNCisgICAgICAgICMgU2VsZiBkZXN0cnVjdCENCisgICAgICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOmRlYWN0aXZhdGUNCisgICAgfQ0KK30NCisNCitkZWFjdGl2YXRlIC1ub25kZXN0cnVjdGl2ZQ0KKwogJGVudjpWSVJUVUFMX0VOVj0iX19WRU5WX0RJUl9fIg0KIA0KLSMgUmV2ZXJ0IHRvIG9yaWdpbmFsIHZhbHVlcw0KLWlmIChUZXN0LVBhdGggZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCkgew0KLSAgICBjb3B5LWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCBmdW5jdGlvbjpwcm9tcHQNCi0gICAgcmVtb3ZlLWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVA0KLX0NCi0NCi1pZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSkgew0KLSAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FIGVudjpQWVRIT05IT01FDQotICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQ0KLX0NCi0NCi1pZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCkgew0KLSAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIIGVudjpQQVRIDQotICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSA0KLX0NCi0NCiAjIFNldCB0aGUgcHJvbXB0IHRvIGluY2x1ZGUgdGhlIGVudiBuYW1lDQorIyBNYWtlIHN1cmUgX09MRF9WSVJUVUFMX1BST01QVCBpcyBnbG9iYWwNCitmdW5jdGlvbiBnbG9iYWw6X09MRF9WSVJUVUFMX1BST01QVCB7IiJ9DQogY29weS1pdGVtIGZ1bmN0aW9uOnByb21wdCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUDQotZnVuY3Rpb24gcHJvbXB0IHsNCi0gICAgV3JpdGUtSG9zdCAtTm9OZXdsaW5lIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4gJ1tfX1ZFTlZfTkFNRV9fXScNCitmdW5jdGlvbiBnbG9iYWw6cHJvbXB0IHsNCisgICAgV3JpdGUtSG9zdCAtTm9OZXdsaW5lIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4gJ19fVkVOVl9QUk9NUFRfXycNCiAgICAgX09MRF9WSVJUVUFMX1BST01QVA0KIH0NCiANCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL250L0RlYWN0aXZhdGUucHMxIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9EZWFjdGl2YXRlLnBzMQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxZTk2Yi4uMDAwMDAwMAotLS0gYS9MaWIvdmVudi9zY3JpcHRzL250L0RlYWN0aXZhdGUucHMxCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBSZXZlcnQgdG8gb3JpZ2luYWwgdmFsdWVzDQotaWYgKFRlc3QtUGF0aCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUKSB7DQotICAgIGNvcHktaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUIGZ1bmN0aW9uOnByb21wdA0KLSAgICByZW1vdmUtaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUgZW52OlBZVEhPTkhPTUUNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QQVRIKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEggZW52OlBBVEgNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52OlZJUlRVQUxfRU5WKSB7DQotICAgIHJlbW92ZS1pdGVtIGVudjpWSVJUVUFMX0VOVg0KLX0NCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL250L2FjdGl2YXRlLmJhdCBiL0xpYi92ZW52L3NjcmlwdHMvbnQvYWN0aXZhdGUuYmF0CmluZGV4IDNjZWJlMjYuLjllYWIxNDcgMTAwNjQ0Ci0tLSBhL0xpYi92ZW52L3NjcmlwdHMvbnQvYWN0aXZhdGUuYmF0CisrKyBiL0xpYi92ZW52L3NjcmlwdHMvbnQvYWN0aXZhdGUuYmF0CkBAIC0xNCw3ICsxNCw3IEBACiApDQogDQogc2V0ICJfT0xEX1ZJUlRVQUxfUFJPTVBUPSVQUk9NUFQlIg0KLXNldCAiUFJPTVBUPV9fVkVOVl9OQU1FX18lUFJPTVBUJSINCitzZXQgIlBST01QVD1fX1ZFTlZfUFJPTVBUX18lUFJPTVBUJSINCiANCiBpZiBkZWZpbmVkIFBZVEhPTkhPTUUgKA0KICAgICBzZXQgIl9PTERfVklSVFVBTF9QWVRIT05IT01FPSVQWVRIT05IT01FJSINCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZQppbmRleCBjMjQxNDUwLi43YmJmZmQ5IDEwMDY0NAotLS0gYS9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlCisrKyBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUKQEAgLTU0LDggKzU0LDggQEAKIAogaWYgWyAteiAiJFZJUlRVQUxfRU5WX0RJU0FCTEVfUFJPTVBUIiBdIDsgdGhlbgogICAgIF9PTERfVklSVFVBTF9QUzE9IiRQUzEiCi0gICAgaWYgWyAieF9fVkVOVl9OQU1FX18iICE9IHggXSA7IHRoZW4KLQlQUzE9Il9fVkVOVl9OQU1FX18kUFMxIgorICAgIGlmIFsgInhfX1ZFTlZfUFJPTVBUX18iICE9IHggXSA7IHRoZW4KKwlQUzE9Il9fVkVOVl9QUk9NUFRfXyRQUzEiCiAgICAgZWxzZQogICAgIGlmIFsgImBiYXNlbmFtZSBcIiRWSVJUVUFMX0VOVlwiYCIgPSAiX18iIF0gOyB0aGVuCiAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBBc3BlbiBtYWdpYyBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5jc2ggYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmNzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQ3OWUwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5jc2gKQEAgLTAsMCArMSwzNyBAQAorIyBUaGlzIGZpbGUgbXVzdCBiZSB1c2VkIHdpdGggInNvdXJjZSBiaW4vYWN0aXZhdGUuY3NoIiAqZnJvbSBjc2gqLgorIyBZb3UgY2Fubm90IHJ1biBpdCBkaXJlY3RseS4KKyMgQ3JlYXRlZCBieSBEYXZpZGUgRGkgQmxhc2kgPGRhdmlkZWRiQGdtYWlsLmNvbT4uCisjIFBvcnRlZCB0byBQeXRob24gMy4zIHZlbnYgYnkgQW5kcmV3IFN2ZXRsb3YgPGFuZHJldy5zdmV0bG92QGdtYWlsLmNvbT4KKworYWxpYXMgZGVhY3RpdmF0ZSAndGVzdCAkP19PTERfVklSVFVBTF9QQVRIICE9IDAgJiYgc2V0ZW52IFBBVEggIiRfT0xEX1ZJUlRVQUxfUEFUSCIgJiYgdW5zZXQgX09MRF9WSVJUVUFMX1BBVEg7IHJlaGFzaDsgdGVzdCAkP19PTERfVklSVFVBTF9QUk9NUFQgIT0gMCAmJiBzZXQgcHJvbXB0PSIkX09MRF9WSVJUVUFMX1BST01QVCIgJiYgdW5zZXQgX09MRF9WSVJUVUFMX1BST01QVDsgdW5zZXRlbnYgVklSVFVBTF9FTlY7IHRlc3QgIlwhOioiICE9ICJub25kZXN0cnVjdGl2ZSIgJiYgdW5hbGlhcyBkZWFjdGl2YXRlJworCisjIFVuc2V0IGlycmVsYXZlbnQgdmFyaWFibGVzLgorZGVhY3RpdmF0ZSBub25kZXN0cnVjdGl2ZQorCitzZXRlbnYgVklSVFVBTF9FTlYgIl9fVkVOVl9ESVJfXyIKKworc2V0IF9PTERfVklSVFVBTF9QQVRIPSIkUEFUSCIKK3NldGVudiBQQVRIICIkVklSVFVBTF9FTlYvX19WRU5WX0JJTl9OQU1FX186JFBBVEgiCisKKworc2V0IF9PTERfVklSVFVBTF9QUk9NUFQ9IiRwcm9tcHQiCisKK2lmICghICIkP1ZJUlRVQUxfRU5WX0RJU0FCTEVfUFJPTVBUIikgdGhlbgorICAgIGlmICgiX19WRU5WX05BTUVfXyIgIT0gIiIpIHRoZW4KKyAgICAgICAgc2V0IGVudl9uYW1lID0gIl9fVkVOVl9OQU1FX18iCisgICAgZWxzZQorICAgICAgICBpZiAoYGJhc2VuYW1lICJWSVJUVUFMX0VOViJgID09ICJfXyIpIHRoZW4KKyAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBBc3BlbiBtYWdpYyBkaXJlY3RvcmllcworICAgICAgICAgICAgIyBzZWUgaHR0cDovL3d3dy56ZXRhZGV2LmNvbS9zb2Z0d2FyZS9hc3Blbi8KKyAgICAgICAgICAgIHNldCBlbnZfbmFtZSA9IGBiYXNlbmFtZSBcYGRpcm5hbWUgIiRWSVJUVUFMX0VOViJcYGAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0IGVudl9uYW1lID0gYGJhc2VuYW1lICIkVklSVFVBTF9FTlYiYAorICAgICAgICBlbmRpZgorICAgIGVuZGlmCisgICAgc2V0IHByb21wdCA9ICJbJGVudl9uYW1lXSAkcHJvbXB0IgorICAgIHVuc2V0IGVudl9uYW1lCitlbmRpZgorCithbGlhcyBweWRvYyBweXRob24gLW0gcHlkb2MKKworcmVoYXNoCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmZpc2ggYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmZpc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzOTFhYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuZmlzaApAQCAtMCwwICsxLDc0IEBACisjIFRoaXMgZmlsZSBtdXN0IGJlIHVzZWQgd2l0aCAiLiBiaW4vYWN0aXZhdGUuZmlzaCIgKmZyb20gZmlzaCogKGh0dHA6Ly9maXNoc2hlbGwub3JnKQorIyB5b3UgY2Fubm90IHJ1biBpdCBkaXJlY3RseQorCitmdW5jdGlvbiBkZWFjdGl2YXRlICAtZCAiRXhpdCB2aXJ0dWFsZW52IGFuZCByZXR1cm4gdG8gbm9ybWFsIHNoZWxsIGVudmlyb25tZW50IgorICAgICMgcmVzZXQgb2xkIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgIGlmIHRlc3QgLW4gIiRfT0xEX1ZJUlRVQUxfUEFUSCIKKyAgICAgICAgc2V0IC1neCBQQVRIICRfT0xEX1ZJUlRVQUxfUEFUSAorICAgICAgICBzZXQgLWUgX09MRF9WSVJUVUFMX1BBVEgKKyAgICBlbmQKKyAgICBpZiB0ZXN0IC1uICIkX09MRF9WSVJUVUFMX1BZVEhPTkhPTUUiCisgICAgICAgIHNldCAtZ3ggUFlUSE9OSE9NRSAkX09MRF9WSVJUVUFMX1BZVEhPTkhPTUUKKyAgICAgICAgc2V0IC1lIF9PTERfVklSVFVBTF9QWVRIT05IT01FCisgICAgZW5kCisKKyAgICBpZiB0ZXN0IC1uICIkX09MRF9GSVNIX1BST01QVF9PVkVSUklERSIKKyAgICAgICAgZnVuY3Rpb25zIC1lIGZpc2hfcHJvbXB0CisgICAgICAgIHNldCAtZSBfT0xEX0ZJU0hfUFJPTVBUX09WRVJSSURFCisgICAgICAgIC4gKCBiZWdpbgorICAgICAgICAgICAgICAgIHByaW50ZiAiZnVuY3Rpb24gZmlzaF9wcm9tcHRcblx0IyIKKyAgICAgICAgICAgICAgICBmdW5jdGlvbnMgX29sZF9maXNoX3Byb21wdAorICAgICAgICAgICAgZW5kIHwgcHN1YiApCisgICAgICAgIGZ1bmN0aW9ucyAtZSBfb2xkX2Zpc2hfcHJvbXB0CisgICAgZW5kCisKKyAgICBzZXQgLWUgVklSVFVBTF9FTlYKKyAgICBpZiB0ZXN0ICIkYXJndlsxXSIgIT0gIm5vbmRlc3RydWN0aXZlIgorICAgICAgICAjIFNlbGYgZGVzdHJ1Y3QhCisgICAgICAgIGZ1bmN0aW9ucyAtZSBkZWFjdGl2YXRlCisgICAgZW5kCitlbmQKKworIyB1bnNldCBpcnJlbGF2ZW50IHZhcmlhYmxlcworZGVhY3RpdmF0ZSBub25kZXN0cnVjdGl2ZQorCitzZXQgLWd4IFZJUlRVQUxfRU5WICJfX1ZFTlZfRElSX18iCisKK3NldCAtZ3ggX09MRF9WSVJUVUFMX1BBVEggJFBBVEgKK3NldCAtZ3ggUEFUSCAiJFZJUlRVQUxfRU5WL19fVkVOVl9CSU5fTkFNRV9fIiAkUEFUSAorCisjIHVuc2V0IFBZVEhPTkhPTUUgaWYgc2V0CitpZiBzZXQgLXEgUFlUSE9OSE9NRQorICAgIHNldCAtZ3ggX09MRF9WSVJUVUFMX1BZVEhPTkhPTUUgJFBZVEhPTkhPTUUKKyAgICBzZXQgLWUgUFlUSE9OSE9NRQorZW5kCisKK2lmIHRlc3QgLXogIiRWSVJUVUFMX0VOVl9ESVNBQkxFX1BST01QVCIKKyAgICAjIGZpc2ggdXNlcyBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgYW4gZW52IHZhciB0byBnZW5lcmF0ZSB0aGUgcHJvbXB0LgorCisgICAgIyBzYXZlIHRoZSBjdXJyZW50IGZpc2hfcHJvbXB0IGZ1bmN0aW9uIGFzIHRoZSBmdW5jdGlvbiBfb2xkX2Zpc2hfcHJvbXB0CisgICAgLiAoIGJlZ2luCisgICAgICAgICAgICBwcmludGYgImZ1bmN0aW9uIF9vbGRfZmlzaF9wcm9tcHRcblx0IyIKKyAgICAgICAgICAgIGZ1bmN0aW9ucyBmaXNoX3Byb21wdAorICAgICAgICBlbmQgfCBwc3ViICkKKworICAgICMgd2l0aCB0aGUgb3JpZ2luYWwgcHJvbXB0IGZ1bmN0aW9uIHJlbmFtZWQsIHdlIGNhbiBvdmVycmlkZSB3aXRoIG91ciBvd24uCisgICAgZnVuY3Rpb24gZmlzaF9wcm9tcHQKKyAgICAgICAgIyBQcm9tcHQgb3ZlcnJpZGU/CisgICAgICAgIGlmIHRlc3QgLW4gIl9fVkVOVl9QUk9NUFRfXyIKKyAgICAgICAgICAgIHByaW50ZiAiJXMlcyVzIiAiX19WRU5WX1BST01QVF9fIiAoc2V0X2NvbG9yIG5vcm1hbCkgKF9vbGRfZmlzaF9wcm9tcHQpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisgICAgICAgICMgLi4uT3RoZXJ3aXNlLCBwcmVwZW5kIGVudgorICAgICAgICBzZXQgLWwgX2NoZWNrYmFzZSAoYmFzZW5hbWUgIiRWSVJUVUFMX0VOViIpCisgICAgICAgIGlmIHRlc3QgJF9jaGVja2Jhc2UgPSAiX18iCisgICAgICAgICAgICAjIHNwZWNpYWwgY2FzZSBmb3IgQXNwZW4gbWFnaWMgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICMgc2VlIGh0dHA6Ly93d3cuemV0YWRldi5jb20vc29mdHdhcmUvYXNwZW4vCisgICAgICAgICAgICBwcmludGYgIiVzWyVzXSVzICVzIiAoc2V0X2NvbG9yIC1iIGJsdWUgd2hpdGUpIChiYXNlbmFtZSAoZGlybmFtZSAiJFZJUlRVQUxfRU5WIikpIChzZXRfY29sb3Igbm9ybWFsKSAoX29sZF9maXNoX3Byb21wdCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmICIlcyglcyklcyVzIiAoc2V0X2NvbG9yIC1iIGJsdWUgd2hpdGUpIChiYXNlbmFtZSAiJFZJUlRVQUxfRU5WIikgKHNldF9jb2xvciBub3JtYWwpIChfb2xkX2Zpc2hfcHJvbXB0KQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIHNldCAtZ3ggX09MRF9GSVNIX1BST01QVF9PVkVSUklERSAiJFZJUlRVQUxfRU5WIgorZW5kCmRpZmYgLS1naXQgYS9MaWIvd2FybmluZ3MucHkgYi9MaWIvd2FybmluZ3MucHkKaW5kZXggZWRiYmI1ZS4uYTQyN2UzNSAxMDA2NDQKLS0tIGEvTGliL3dhcm5pbmdzLnB5CisrKyBiL0xpYi93YXJuaW5ncy5weQpAQCAtMSw5ICsxLDUgQEAKICIiIlB5dGhvbiBwYXJ0IG9mIHRoZSB3YXJuaW5ncyBzdWJzeXN0ZW0uIiIiCiAKLSMgTm90ZTogZnVuY3Rpb24gbGV2ZWwgaW1wb3J0cyBzaG91bGQgKm5vdCogYmUgdXNlZAotIyBpbiB0aGlzIG1vZHVsZSBhcyBpdCBtYXkgY2F1c2UgaW1wb3J0IGxvY2sgZGVhZGxvY2suCi0jIFNlZSBidWcgNjgzNjU4LgotaW1wb3J0IGxpbmVjYWNoZQogaW1wb3J0IHN5cwogCiBfX2FsbF9fID0gWyJ3YXJuIiwgInNob3d3YXJuaW5nIiwgImZvcm1hdHdhcm5pbmciLCAiZmlsdGVyd2FybmluZ3MiLApAQCAtMTYsMTEgKzEyLDEyIEBACiAgICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCiAgICAgdHJ5OgogICAgICAgICBmaWxlLndyaXRlKGZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGxpbmUpKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzICMgdGhlIGZpbGUgKHByb2JhYmx5IHN0ZGVycikgaXMgaW52YWxpZCAtIHRoaXMgd2FybmluZyBnZXRzIGxvc3QuCiAKIGRlZiBmb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBsaW5lPU5vbmUpOgogICAgICIiIkZ1bmN0aW9uIHRvIGZvcm1hdCBhIHdhcm5pbmcgdGhlIHN0YW5kYXJkIHdheS4iIiIKKyAgICBpbXBvcnQgbGluZWNhY2hlCiAgICAgcyA9ICAiJXM6JXM6ICVzOiAlc1xuIiAlIChmaWxlbmFtZSwgbGluZW5vLCBjYXRlZ29yeS5fX25hbWVfXywgbWVzc2FnZSkKICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubykgaWYgbGluZSBpcyBOb25lIGVsc2UgbGluZQogICAgIGlmIGxpbmU6CkBAIC0yMzMsNiArMjMwLDcgQEAKIAogICAgICMgUHJpbWUgdGhlIGxpbmVjYWNoZSBmb3IgZm9ybWF0dGluZywgaW4gY2FzZSB0aGUKICAgICAjICJmaWxlIiBpcyBhY3R1YWxseSBpbiBhIHppcGZpbGUgb3Igc29tZXRoaW5nLgorICAgIGltcG9ydCBsaW5lY2FjaGUKICAgICBsaW5lY2FjaGUuZ2V0bGluZXMoZmlsZW5hbWUsIG1vZHVsZV9nbG9iYWxzKQogCiAgICAgaWYgYWN0aW9uID09ICJlcnJvciI6CmRpZmYgLS1naXQgYS9MaWIvd2F2ZS5weSBiL0xpYi93YXZlLnB5CmluZGV4IDRhMjIzNDUuLmI1NjM5NWUgMTAwNjQ0Ci0tLSBhL0xpYi93YXZlLnB5CisrKyBiL0xpYi93YXZlLnB5CkBAIC0xOCw3ICsxOCw3IEBACiAgICAgICBnZXRjb21wdHlwZSgpICAgLS0gcmV0dXJucyBjb21wcmVzc2lvbiB0eXBlICgnTk9ORScgZm9yIGxpbmVhciBzYW1wbGVzKQogICAgICAgZ2V0Y29tcG5hbWUoKSAgIC0tIHJldHVybnMgaHVtYW4tcmVhZGFibGUgdmVyc2lvbiBvZgogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uIHR5cGUgKCdub3QgY29tcHJlc3NlZCcgbGluZWFyIHNhbXBsZXMpCi0gICAgICBnZXRwYXJhbXMoKSAgICAgLS0gcmV0dXJucyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQorICAgICAgZ2V0cGFyYW1zKCkgICAgIC0tIHJldHVybnMgYSBuYW1lZHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgIGFib3ZlIGluIHRoZSBhYm92ZSBvcmRlcgogICAgICAgZ2V0bWFya2VycygpICAgIC0tIHJldHVybnMgTm9uZSAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICBhaWZjIG1vZHVsZSkKQEAgLTgyLDE1ICs4MiwxNCBAQAogCiBfYXJyYXlfZm10cyA9IE5vbmUsICdiJywgJ2gnLCBOb25lLCAnaScKIAoraW1wb3J0IGF1ZGlvb3AKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzeXMKIGZyb20gY2h1bmsgaW1wb3J0IENodW5rCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCiAKLWRlZiBfYnl0ZXN3YXAzKGRhdGEpOgotICAgIGJhID0gYnl0ZWFycmF5KGRhdGEpCi0gICAgYmFbOjozXSA9IGRhdGFbMjo6M10KLSAgICBiYVsyOjozXSA9IGRhdGFbOjozXQotICAgIHJldHVybiBieXRlcyhiYSkKK193YXZlX3BhcmFtcyA9IG5hbWVkdHVwbGUoJ193YXZlX3BhcmFtcycsCisgICAgICAgICAgICAgICAgICAgICAnbmNoYW5uZWxzIHNhbXB3aWR0aCBmcmFtZXJhdGUgbmZyYW1lcyBjb21wdHlwZSBjb21wbmFtZScpCiAKIGNsYXNzIFdhdmVfcmVhZDoKICAgICAiIiJWYXJpYWJsZXMgdXNlZCBpbiB0aGlzIGNsYXNzOgpAQCAtMTY5LDYgKzE2OCwxMyBAQAogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtMjA3LDkgKzIxMyw5IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9jb21wbmFtZQogCiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksIFwKLSAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLCBcCi0gICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX3dhdmVfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKSkKIAogICAgIGRlZiBnZXRtYXJrZXJzKHNlbGYpOgogICAgICAgICByZXR1cm4gTm9uZQpAQCAtMjMyLDI5ICsyMzgsOSBAQAogICAgICAgICAgICAgc2VsZi5fZGF0YV9zZWVrX25lZWRlZCA9IDAKICAgICAgICAgaWYgbmZyYW1lcyA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIGInJwotICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggaW4gKDIsIDQpIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgotICAgICAgICAgICAgIyB1bmZvcnR1bmF0ZWx5IHRoZSBmcm9tZmlsZSgpIG1ldGhvZCBkb2VzIG5vdCB0YWtlCi0gICAgICAgICAgICAjIHNvbWV0aGluZyB0aGF0IG9ubHkgbG9va3MgbGlrZSBhIGZpbGUgb2JqZWN0LCBzbwotICAgICAgICAgICAgIyB3ZSBoYXZlIHRvIHJlYWNoIGludG8gdGhlIGlubmFyZHMgb2YgdGhlIGNodW5rIG9iamVjdAotICAgICAgICAgICAgaW1wb3J0IGFycmF5Ci0gICAgICAgICAgICBjaHVuayA9IHNlbGYuX2RhdGFfY2h1bmsKLSAgICAgICAgICAgIGRhdGEgPSBhcnJheS5hcnJheShfYXJyYXlfZm10c1tzZWxmLl9zYW1wd2lkdGhdKQotICAgICAgICAgICAgYXNzZXJ0IGRhdGEuaXRlbXNpemUgPT0gc2VsZi5fc2FtcHdpZHRoCi0gICAgICAgICAgICBuaXRlbXMgPSBuZnJhbWVzICogc2VsZi5fbmNoYW5uZWxzCi0gICAgICAgICAgICBpZiBuaXRlbXMgKiBzZWxmLl9zYW1wd2lkdGggPiBjaHVuay5jaHVua3NpemUgLSBjaHVuay5zaXplX3JlYWQ6Ci0gICAgICAgICAgICAgICAgbml0ZW1zID0gKGNodW5rLmNodW5rc2l6ZSAtIGNodW5rLnNpemVfcmVhZCkgLy8gc2VsZi5fc2FtcHdpZHRoCi0gICAgICAgICAgICBkYXRhLmZyb21maWxlKGNodW5rLmZpbGUuZmlsZSwgbml0ZW1zKQotICAgICAgICAgICAgIyAidGVsbCIgZGF0YSBjaHVuayBob3cgbXVjaCB3YXMgcmVhZAotICAgICAgICAgICAgY2h1bmsuc2l6ZV9yZWFkID0gY2h1bmsuc2l6ZV9yZWFkICsgbml0ZW1zICogc2VsZi5fc2FtcHdpZHRoCi0gICAgICAgICAgICAjIGRvIHRoZSBzYW1lIGZvciB0aGUgb3V0ZXJtb3N0IGNodW5rCi0gICAgICAgICAgICBjaHVuayA9IGNodW5rLmZpbGUKLSAgICAgICAgICAgIGNodW5rLnNpemVfcmVhZCA9IGNodW5rLnNpemVfcmVhZCArIG5pdGVtcyAqIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgZGF0YS5ieXRlc3dhcCgpCi0gICAgICAgICAgICBkYXRhID0gZGF0YS50b2J5dGVzKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9kYXRhX2NodW5rLnJlYWQobmZyYW1lcyAqIHNlbGYuX2ZyYW1lc2l6ZSkKLSAgICAgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCA9PSAzIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgotICAgICAgICAgICAgICAgIGRhdGEgPSBfYnl0ZXN3YXAzKGRhdGEpCisgICAgICAgIGRhdGEgPSBzZWxmLl9kYXRhX2NodW5rLnJlYWQobmZyYW1lcyAqIHNlbGYuX2ZyYW1lc2l6ZSkKKyAgICAgICAgaWYgc2VsZi5fc2FtcHdpZHRoICE9IDEgYW5kIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6CisgICAgICAgICAgICBkYXRhID0gYXVkaW9vcC5ieXRlc3dhcChkYXRhLCBzZWxmLl9zYW1wd2lkdGgpCiAgICAgICAgIGlmIHNlbGYuX2NvbnZlcnQgYW5kIGRhdGE6CiAgICAgICAgICAgICBkYXRhID0gc2VsZi5fY29udmVydChkYXRhKQogICAgICAgICBzZWxmLl9zb3VuZHBvcyA9IHNlbGYuX3NvdW5kcG9zICsgbGVuKGRhdGEpIC8vIChzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9zYW1wd2lkdGgpCkBAIC0zMjgsNiArMzE0LDEyIEBACiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuY2xvc2UoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtNDAyLDggKzM5NCw4IEBACiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX25jaGFubmVscyBvciBub3Qgc2VsZi5fc2FtcHdpZHRoIG9yIG5vdCBzZWxmLl9mcmFtZXJhdGU6CiAgICAgICAgICAgICByYWlzZSBFcnJvcignbm90IGFsbCBwYXJhbWV0ZXJzIHNldCcpCi0gICAgICAgIHJldHVybiBzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLCBcCi0gICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMsIHNlbGYuX2NvbXB0eXBlLCBzZWxmLl9jb21wbmFtZQorICAgICAgICByZXR1cm4gX3dhdmVfcGFyYW1zKHNlbGYuX25jaGFubmVscywgc2VsZi5fc2FtcHdpZHRoLCBzZWxmLl9mcmFtZXJhdGUsCisgICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMsIHNlbGYuX2NvbXB0eXBlLCBzZWxmLl9jb21wbmFtZSkKIAogICAgIGRlZiBzZXRtYXJrKHNlbGYsIGlkLCBwb3MsIG5hbWUpOgogICAgICAgICByYWlzZSBFcnJvcignc2V0bWFyaygpIG5vdCBzdXBwb3J0ZWQnKQpAQCAtNDE4LDI0ICs0MTAsMTYgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX25mcmFtZXN3cml0dGVuCiAKICAgICBkZWYgd3JpdGVmcmFtZXNyYXcoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhkYXRhKS5jYXN0KCdCJykKICAgICAgICAgc2VsZi5fZW5zdXJlX2hlYWRlcl93cml0dGVuKGxlbihkYXRhKSkKICAgICAgICAgbmZyYW1lcyA9IGxlbihkYXRhKSAvLyAoc2VsZi5fc2FtcHdpZHRoICogc2VsZi5fbmNoYW5uZWxzKQogICAgICAgICBpZiBzZWxmLl9jb252ZXJ0OgogICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2NvbnZlcnQoZGF0YSkKLSAgICAgICAgaWYgc2VsZi5fc2FtcHdpZHRoIGluICgyLCA0KSBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgICAgIGltcG9ydCBhcnJheQotICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KF9hcnJheV9mbXRzW3NlbGYuX3NhbXB3aWR0aF0pCi0gICAgICAgICAgICBhLmZyb21ieXRlcyhkYXRhKQotICAgICAgICAgICAgZGF0YSA9IGEKLSAgICAgICAgICAgIGFzc2VydCBkYXRhLml0ZW1zaXplID09IHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgZGF0YS5ieXRlc3dhcCgpCi0gICAgICAgICAgICBkYXRhLnRvZmlsZShzZWxmLl9maWxlKQotICAgICAgICAgICAgc2VsZi5fZGF0YXdyaXR0ZW4gPSBzZWxmLl9kYXRhd3JpdHRlbiArIGxlbihkYXRhKSAqIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgc2VsZi5fc2FtcHdpZHRoID09IDMgYW5kIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IF9ieXRlc3dhcDMoZGF0YSkKLSAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoZGF0YSkKLSAgICAgICAgICAgIHNlbGYuX2RhdGF3cml0dGVuID0gc2VsZi5fZGF0YXdyaXR0ZW4gKyBsZW4oZGF0YSkKKyAgICAgICAgaWYgc2VsZi5fc2FtcHdpZHRoICE9IDEgYW5kIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6CisgICAgICAgICAgICBkYXRhID0gYXVkaW9vcC5ieXRlc3dhcChkYXRhLCBzZWxmLl9zYW1wd2lkdGgpCisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5fZGF0YXdyaXR0ZW4gKz0gbGVuKGRhdGEpCiAgICAgICAgIHNlbGYuX25mcmFtZXN3cml0dGVuID0gc2VsZi5fbmZyYW1lc3dyaXR0ZW4gKyBuZnJhbWVzCiAKICAgICBkZWYgd3JpdGVmcmFtZXMoc2VsZiwgZGF0YSk6CkBAIC00NzYsMTQgKzQ2MCwxOCBAQAogICAgICAgICBpZiBub3Qgc2VsZi5fbmZyYW1lczoKICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMgPSBpbml0bGVuZ3RoIC8vIChzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9zYW1wd2lkdGgpCiAgICAgICAgIHNlbGYuX2RhdGFsZW5ndGggPSBzZWxmLl9uZnJhbWVzICogc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoCi0gICAgICAgIHNlbGYuX2Zvcm1fbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2Zvcm1fbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5fZm9ybV9sZW5ndGhfcG9zID0gTm9uZQogICAgICAgICBzZWxmLl9maWxlLndyaXRlKHN0cnVjdC5wYWNrKCc8TDRzNHNMSEhMTEhINHMnLAogICAgICAgICAgICAgMzYgKyBzZWxmLl9kYXRhbGVuZ3RoLCBiJ1dBVkUnLCBiJ2ZtdCAnLCAxNiwKICAgICAgICAgICAgIFdBVkVfRk9STUFUX1BDTSwgc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9mcmFtZXJhdGUsCiAgICAgICAgICAgICBzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9mcmFtZXJhdGUgKiBzZWxmLl9zYW1wd2lkdGgsCiAgICAgICAgICAgICBzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9zYW1wd2lkdGgsCiAgICAgICAgICAgICBzZWxmLl9zYW1wd2lkdGggKiA4LCBiJ2RhdGEnKSkKLSAgICAgICAgc2VsZi5fZGF0YV9sZW5ndGhfcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKKyAgICAgICAgaWYgc2VsZi5fZm9ybV9sZW5ndGhfcG9zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZGF0YV9sZW5ndGhfcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShzdHJ1Y3QucGFjaygnPEwnLCBzZWxmLl9kYXRhbGVuZ3RoKSkKICAgICAgICAgc2VsZi5faGVhZGVyd3JpdHRlbiA9IFRydWUKIApkaWZmIC0tZ2l0IGEvTGliL3dlYWtyZWYucHkgYi9MaWIvd2Vha3JlZi5weQppbmRleCBmY2I2Yjc0Li5mNmE0MGNhIDEwMDY0NAotLS0gYS9MaWIvd2Vha3JlZi5weQorKysgYi9MaWIvd2Vha3JlZi5weQpAQCAtMjEsMTMgKzIxLDY5IEBACiBmcm9tIF93ZWFrcmVmc2V0IGltcG9ydCBXZWFrU2V0LCBfSXRlcmF0aW9uR3VhcmQKIAogaW1wb3J0IGNvbGxlY3Rpb25zICAjIEltcG9ydCBhZnRlciBfd2Vha3JlZiB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnQuCitpbXBvcnQgc3lzCitpbXBvcnQgaXRlcnRvb2xzCiAKIFByb3h5VHlwZXMgPSAoUHJveHlUeXBlLCBDYWxsYWJsZVByb3h5VHlwZSkKIAogX19hbGxfXyA9IFsicmVmIiwgInByb3h5IiwgImdldHdlYWtyZWZjb3VudCIsICJnZXR3ZWFrcmVmcyIsCiAgICAgICAgICAgICJXZWFrS2V5RGljdGlvbmFyeSIsICJSZWZlcmVuY2VUeXBlIiwgIlByb3h5VHlwZSIsCiAgICAgICAgICAgICJDYWxsYWJsZVByb3h5VHlwZSIsICJQcm94eVR5cGVzIiwgIldlYWtWYWx1ZURpY3Rpb25hcnkiLAotICAgICAgICAgICAiV2Vha1NldCJdCisgICAgICAgICAgICJXZWFrU2V0IiwgIldlYWtNZXRob2QiLCAiZmluYWxpemUiXQorCisKK2NsYXNzIFdlYWtNZXRob2QocmVmKToKKyAgICAiIiIKKyAgICBBIGN1c3RvbSBgd2Vha3JlZi5yZWZgIHN1YmNsYXNzIHdoaWNoIHNpbXVsYXRlcyBhIHdlYWsgcmVmZXJlbmNlIHRvCisgICAgYSBib3VuZCBtZXRob2QsIHdvcmtpbmcgYXJvdW5kIHRoZSBsaWZldGltZSBwcm9ibGVtIG9mIGJvdW5kIG1ldGhvZHMuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAiX2Z1bmNfcmVmIiwgIl9tZXRoX3R5cGUiLCAiX2FsaXZlIiwgIl9fd2Vha3JlZl9fIgorCisgICAgZGVmIF9fbmV3X18oY2xzLCBtZXRoLCBjYWxsYmFjaz1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2JqID0gbWV0aC5fX3NlbGZfXworICAgICAgICAgICAgZnVuYyA9IG1ldGguX19mdW5jX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBib3VuZCBtZXRob2QsIG5vdCB7fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHR5cGUobWV0aCkpKSBmcm9tIE5vbmUKKyAgICAgICAgZGVmIF9jYihhcmcpOgorICAgICAgICAgICAgIyBUaGUgc2VsZi13ZWFrcmVmIHRyaWNrIGlzIG5lZWRlZCB0byBhdm9pZCBjcmVhdGluZyBhIHJlZmVyZW5jZQorICAgICAgICAgICAgIyBjeWNsZS4KKyAgICAgICAgICAgIHNlbGYgPSBzZWxmX3dyKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2FsaXZlOgorICAgICAgICAgICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiBjYWxsYmFjayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soc2VsZikKKyAgICAgICAgc2VsZiA9IHJlZi5fX25ld19fKGNscywgb2JqLCBfY2IpCisgICAgICAgIHNlbGYuX2Z1bmNfcmVmID0gcmVmKGZ1bmMsIF9jYikKKyAgICAgICAgc2VsZi5fbWV0aF90eXBlID0gdHlwZShtZXRoKQorICAgICAgICBzZWxmLl9hbGl2ZSA9IFRydWUKKyAgICAgICAgc2VsZl93ciA9IHJlZihzZWxmKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgorICAgICAgICBvYmogPSBzdXBlcigpLl9fY2FsbF9fKCkKKyAgICAgICAgZnVuYyA9IHNlbGYuX2Z1bmNfcmVmKCkKKyAgICAgICAgaWYgb2JqIGlzIE5vbmUgb3IgZnVuYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX21ldGhfdHlwZShmdW5jLCBvYmopCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgV2Vha01ldGhvZCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxpdmUgb3Igbm90IG90aGVyLl9hbGl2ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiBpcyBvdGhlcgorICAgICAgICAgICAgcmV0dXJuIHJlZi5fX2VxX18oc2VsZiwgb3RoZXIpIGFuZCBzZWxmLl9mdW5jX3JlZiA9PSBvdGhlci5fZnVuY19yZWYKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgV2Vha01ldGhvZCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxpdmUgb3Igbm90IG90aGVyLl9hbGl2ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiBpcyBub3Qgb3RoZXIKKyAgICAgICAgICAgIHJldHVybiByZWYuX19uZV9fKHNlbGYsIG90aGVyKSBvciBzZWxmLl9mdW5jX3JlZiAhPSBvdGhlci5fZnVuY19yZWYKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIF9faGFzaF9fID0gcmVmLl9faGFzaF9fCiAKIAogY2xhc3MgV2Vha1ZhbHVlRGljdGlvbmFyeShjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CkBAIC0xNTMsOCArMjA5LDcgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgd2l0aCBfSXRlcmF0aW9uR3VhcmQoc2VsZik6Ci0gICAgICAgICAgICBmb3Igd3IgaW4gc2VsZi5kYXRhLnZhbHVlcygpOgotICAgICAgICAgICAgICAgIHlpZWxkIHdyCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuZGF0YS52YWx1ZXMoKQogCiAgICAgZGVmIHZhbHVlcyhzZWxmKToKICAgICAgICAgd2l0aCBfSXRlcmF0aW9uR3VhcmQoc2VsZik6CkBAIC0zODMsMyArNDM4LDE0MCBAQAogICAgICAgICAgICAgICAgIGRbcmVmKGtleSwgc2VsZi5fcmVtb3ZlKV0gPSB2YWx1ZQogICAgICAgICBpZiBsZW4oa3dhcmdzKToKICAgICAgICAgICAgIHNlbGYudXBkYXRlKGt3YXJncykKKworCitjbGFzcyBmaW5hbGl6ZToKKyAgICAiIiJDbGFzcyBmb3IgZmluYWxpemF0aW9uIG9mIHdlYWtyZWZhYmxlIG9iamVjdHMKKworICAgIGZpbmFsaXplKG9iaiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKSByZXR1cm5zIGEgY2FsbGFibGUgZmluYWxpemVyCisgICAgb2JqZWN0IHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gb2JqIGlzIGdhcmJhZ2UgY29sbGVjdGVkLiBUaGUKKyAgICBmaXJzdCB0aW1lIHRoZSBmaW5hbGl6ZXIgaXMgY2FsbGVkIGl0IGV2YWx1YXRlcyBmdW5jKCphcmcsICoqa3dhcmdzKQorICAgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIEFmdGVyIHRoaXMgdGhlIGZpbmFsaXplciBpcyBkZWFkLCBhbmQKKyAgICBjYWxsaW5nIGl0IGp1c3QgcmV0dXJucyBOb25lLgorCisgICAgV2hlbiB0aGUgcHJvZ3JhbSBleGl0cyBhbnkgcmVtYWluaW5nIGZpbmFsaXplcnMgZm9yIHdoaWNoIHRoZQorICAgIGF0ZXhpdCBhdHRyaWJ1dGUgaXMgdHJ1ZSB3aWxsIGJlIHJ1biBpbiByZXZlcnNlIG9yZGVyIG9mIGNyZWF0aW9uLgorICAgIEJ5IGRlZmF1bHQgYXRleGl0IGlzIHRydWUuCisgICAgIiIiCisKKyAgICAjIEZpbmFsaXplciBvYmplY3RzIGRvbid0IGhhdmUgYW55IHN0YXRlIG9mIHRoZWlyIG93bi4gIFRoZXkgYXJlCisgICAgIyBqdXN0IHVzZWQgYXMga2V5cyB0byBsb29rdXAgX0luZm8gb2JqZWN0cyBpbiB0aGUgcmVnaXN0cnkuICBUaGlzCisgICAgIyBlbnN1cmVzIHRoYXQgdGhleSBjYW5ub3QgYmUgcGFydCBvZiBhIHJlZi1jeWNsZS4KKworICAgIF9fc2xvdHNfXyA9ICgpCisgICAgX3JlZ2lzdHJ5ID0ge30KKyAgICBfc2h1dGRvd24gPSBGYWxzZQorICAgIF9pbmRleF9pdGVyID0gaXRlcnRvb2xzLmNvdW50KCkKKyAgICBfZGlydHkgPSBGYWxzZQorICAgIF9yZWdpc3RlcmVkX3dpdGhfYXRleGl0ID0gRmFsc2UKKworICAgIGNsYXNzIF9JbmZvOgorICAgICAgICBfX3Nsb3RzX18gPSAoIndlYWtyZWYiLCAiZnVuYyIsICJhcmdzIiwgImt3YXJncyIsICJhdGV4aXQiLCAiaW5kZXgiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3JlZ2lzdGVyZWRfd2l0aF9hdGV4aXQ6CisgICAgICAgICAgICAjIFdlIG1heSByZWdpc3RlciB0aGUgZXhpdCBmdW5jdGlvbiBtb3JlIHRoYW4gb25jZSBiZWNhdXNlCisgICAgICAgICAgICAjIG9mIGEgdGhyZWFkIHJhY2UsIGJ1dCB0aGF0IGlzIGhhcm1sZXNzCisgICAgICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5fZXhpdGZ1bmMpCisgICAgICAgICAgICBmaW5hbGl6ZS5fcmVnaXN0ZXJlZF93aXRoX2F0ZXhpdCA9IFRydWUKKyAgICAgICAgaW5mbyA9IHNlbGYuX0luZm8oKQorICAgICAgICBpbmZvLndlYWtyZWYgPSByZWYob2JqLCBzZWxmKQorICAgICAgICBpbmZvLmZ1bmMgPSBmdW5jCisgICAgICAgIGluZm8uYXJncyA9IGFyZ3MKKyAgICAgICAgaW5mby5rd2FyZ3MgPSBrd2FyZ3Mgb3IgTm9uZQorICAgICAgICBpbmZvLmF0ZXhpdCA9IFRydWUKKyAgICAgICAgaW5mby5pbmRleCA9IG5leHQoc2VsZi5faW5kZXhfaXRlcikKKyAgICAgICAgc2VsZi5fcmVnaXN0cnlbc2VsZl0gPSBpbmZvCisgICAgICAgIGZpbmFsaXplLl9kaXJ0eSA9IFRydWUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBfPU5vbmUpOgorICAgICAgICAiIiJJZiBhbGl2ZSB0aGVuIG1hcmsgYXMgZGVhZCBhbmQgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKTsKKyAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBOb25lIiIiCisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5wb3Aoc2VsZiwgTm9uZSkKKyAgICAgICAgaWYgaW5mbyBhbmQgbm90IHNlbGYuX3NodXRkb3duOgorICAgICAgICAgICAgcmV0dXJuIGluZm8uZnVuYygqaW5mby5hcmdzLCAqKihpbmZvLmt3YXJncyBvciB7fSkpCisKKyAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAiIiJJZiBhbGl2ZSB0aGVuIG1hcmsgYXMgZGVhZCBhbmQgcmV0dXJuIChvYmosIGZ1bmMsIGFyZ3MsIGt3YXJncyk7CisgICAgICAgIG90aGVyd2lzZSByZXR1cm4gTm9uZSIiIgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIG9iaiA9IGluZm8gYW5kIGluZm8ud2Vha3JlZigpCisgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZSBhbmQgc2VsZi5fcmVnaXN0cnkucG9wKHNlbGYsIE5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIChvYmosIGluZm8uZnVuYywgaW5mby5hcmdzLCBpbmZvLmt3YXJncyBvciB7fSkKKworICAgIGRlZiBwZWVrKHNlbGYpOgorICAgICAgICAiIiJJZiBhbGl2ZSB0aGVuIHJldHVybiAob2JqLCBmdW5jLCBhcmdzLCBrd2FyZ3MpOworICAgICAgICBvdGhlcndpc2UgcmV0dXJuIE5vbmUiIiIKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICBvYmogPSBpbmZvIGFuZCBpbmZvLndlYWtyZWYoKQorICAgICAgICBpZiBvYmogaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gKG9iaiwgaW5mby5mdW5jLCBpbmZvLmFyZ3MsIGluZm8ua3dhcmdzIG9yIHt9KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFsaXZlKHNlbGYpOgorICAgICAgICAiIiJXaGV0aGVyIGZpbmFsaXplciBpcyBhbGl2ZSIiIgorICAgICAgICByZXR1cm4gc2VsZiBpbiBzZWxmLl9yZWdpc3RyeQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGF0ZXhpdChzZWxmKToKKyAgICAgICAgIiIiV2hldGhlciBmaW5hbGl6ZXIgc2hvdWxkIGJlIGNhbGxlZCBhdCBleGl0IiIiCisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgcmV0dXJuIGJvb2woaW5mbykgYW5kIGluZm8uYXRleGl0CisKKyAgICBAYXRleGl0LnNldHRlcgorICAgIGRlZiBhdGV4aXQoc2VsZiwgdmFsdWUpOgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIGlmIGluZm86CisgICAgICAgICAgICBpbmZvLmF0ZXhpdCA9IGJvb2wodmFsdWUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgb2JqID0gaW5mbyBhbmQgaW5mby53ZWFrcmVmKCkKKyAgICAgICAgaWYgb2JqIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gJzwlcyBvYmplY3QgYXQgJSN4OyBkZWFkPicgJSAodHlwZShzZWxmKS5fX25hbWVfXywgaWQoc2VsZikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJzwlcyBvYmplY3QgYXQgJSN4OyBmb3IgJXIgYXQgJSN4PicgJSBcCisgICAgICAgICAgICAgICAgKHR5cGUoc2VsZikuX19uYW1lX18sIGlkKHNlbGYpLCB0eXBlKG9iaikuX19uYW1lX18sIGlkKG9iaikpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3NlbGVjdF9mb3JfZXhpdChjbHMpOgorICAgICAgICAjIFJldHVybiBsaXZlIGZpbmFsaXplcnMgbWFya2VkIGZvciBleGl0LCBvbGRlc3QgZmlyc3QKKyAgICAgICAgTCA9IFsoZixpKSBmb3IgKGYsaSkgaW4gY2xzLl9yZWdpc3RyeS5pdGVtcygpIGlmIGkuYXRleGl0XQorICAgICAgICBMLnNvcnQoa2V5PWxhbWJkYSBpdGVtOml0ZW1bMV0uaW5kZXgpCisgICAgICAgIHJldHVybiBbZiBmb3IgKGYsaSkgaW4gTF0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZXhpdGZ1bmMoY2xzKToKKyAgICAgICAgIyBBdCBzaHV0ZG93biBpbnZva2UgZmluYWxpemVycyBmb3Igd2hpY2ggYXRleGl0IGlzIHRydWUuCisgICAgICAgICMgVGhpcyBpcyBjYWxsZWQgb25jZSBhbGwgb3RoZXIgbm9uLWRhZW1vbmljIHRocmVhZHMgaGF2ZSBiZWVuCisgICAgICAgICMgam9pbmVkLgorICAgICAgICByZWVuYWJsZV9nYyA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGNscy5fcmVnaXN0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICAgICAgaWYgZ2MuaXNlbmFibGVkKCk6CisgICAgICAgICAgICAgICAgICAgIHJlZW5hYmxlX2djID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKyAgICAgICAgICAgICAgICBwZW5kaW5nID0gTm9uZQorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGlmIHBlbmRpbmcgaXMgTm9uZSBvciBmaW5hbGl6ZS5fZGlydHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nID0gY2xzLl9zZWxlY3RfZm9yX2V4aXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUuX2RpcnR5ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBlbmRpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmID0gcGVuZGluZy5wb3AoKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGdjIGlzIGRpc2FibGVkLCBzbyAoYXNzdW1pbmcgbm8gZGFlbW9uaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhyZWFkcykgdGhlIGZvbGxvd2luZyBpcyB0aGUgb25seSBsaW5lIGluCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgZnVuY3Rpb24gd2hpY2ggbWlnaHQgdHJpZ2dlciBjcmVhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIyBvZiBhIG5ldyBmaW5hbGl6ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZiBub3QgaW4gY2xzLl9yZWdpc3RyeQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBwcmV2ZW50IGFueSBtb3JlIGZpbmFsaXplcnMgZnJvbSBleGVjdXRpbmcgZHVyaW5nIHNodXRkb3duCisgICAgICAgICAgICBmaW5hbGl6ZS5fc2h1dGRvd24gPSBUcnVlCisgICAgICAgICAgICBpZiByZWVuYWJsZV9nYzoKKyAgICAgICAgICAgICAgICBnYy5lbmFibGUoKQpkaWZmIC0tZ2l0IGEvTGliL3dlYmJyb3dzZXIucHkgYi9MaWIvd2ViYnJvd3Nlci5weQppbmRleCA5NDVlZGE0Li45ZTQ3MDg0IDEwMDc1NQotLS0gYS9MaWIvd2ViYnJvd3Nlci5weQorKysgYi9MaWIvd2ViYnJvd3Nlci5weQpAQCAtMiwxMyArMiwxMSBAQAogIiIiSW50ZXJmYWNlcyBmb3IgbGF1bmNoaW5nIGFuZCByZW1vdGVseSBjb250cm9sbGluZyBXZWIgYnJvd3NlcnMuIiIiCiAjIE1haW50YWluZWQgYnkgR2VvcmcgQnJhbmRsLgogCi1pbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHNobGV4CitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCi1pbXBvcnQgc3RhdAogaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCB0aW1lCiAKIF9fYWxsX18gPSBbIkVycm9yIiwgIm9wZW4iLCAib3Blbl9uZXciLCAib3Blbl9uZXdfdGFiIiwgImdldCIsICJyZWdpc3RlciJdCiAKQEAgLTgzLDcgKzgxLDcgQEAKIAogICAgICIiIgogICAgIGNtZCA9IGJyb3dzZXIuc3BsaXQoKVswXQotICAgIGlmIG5vdCBfaXNjb21tYW5kKGNtZCk6CisgICAgaWYgbm90IHNodXRpbC53aGljaChjbWQpOgogICAgICAgICByZXR1cm4gW05vbmUsIE5vbmVdCiAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoY21kKQogICAgIHRyeToKQEAgLTEwMiwzOCArMTAwLDYgQEAKICAgICByZXR1cm4gW05vbmUsIE5vbmVdCiAKIAotaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAid2luIjoKLSAgICBkZWYgX2lzZXhlY3V0YWJsZShjbWQpOgotICAgICAgICBjbWQgPSBjbWQubG93ZXIoKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjbWQpIGFuZCBjbWQuZW5kc3dpdGgoKCIuZXhlIiwgIi5iYXQiKSk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBmb3IgZXh0IGluICIuZXhlIiwgIi5iYXQiOgotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kICsgZXh0KToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLWVsc2U6Ci0gICAgZGVmIF9pc2V4ZWN1dGFibGUoY21kKToKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kKToKLSAgICAgICAgICAgIG1vZGUgPSBvcy5zdGF0KGNtZClbc3RhdC5TVF9NT0RFXQotICAgICAgICAgICAgaWYgbW9kZSAmIHN0YXQuU19JWFVTUiBvciBtb2RlICYgc3RhdC5TX0lYR1JQIG9yIG1vZGUgJiBzdGF0LlNfSVhPVEg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLWRlZiBfaXNjb21tYW5kKGNtZCk6Ci0gICAgIiIiUmV0dXJuIFRydWUgaWYgY21kIGlzIGV4ZWN1dGFibGUgb3IgY2FuIGJlIGZvdW5kIG9uIHRoZSBleGVjdXRhYmxlCi0gICAgc2VhcmNoIHBhdGguIiIiCi0gICAgaWYgX2lzZXhlY3V0YWJsZShjbWQpOgotICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHBhdGggPSBvcy5lbnZpcm9uLmdldCgiUEFUSCIpCi0gICAgaWYgbm90IHBhdGg6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIGZvciBkIGluIHBhdGguc3BsaXQob3MucGF0aHNlcCk6Ci0gICAgICAgIGV4ZSA9IG9zLnBhdGguam9pbihkLCBjbWQpCi0gICAgICAgIGlmIF9pc2V4ZWN1dGFibGUoZXhlKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgcmV0dXJuIEZhbHNlCi0KLQogIyBHZW5lcmFsIHBhcmVudCBjbGFzc2VzCiAKIGNsYXNzIEJhc2VCcm93c2VyKG9iamVjdCk6CkBAIC00MTgsMTEgKzM4NCwxMSBAQAogICAgICAgICAgICAgIyBuZWVkIHRvIFBJTkcgZWFjaCBvbmUgdW50aWwgd2UgZmluZCBvbmUgdGhhdCdzIGxpdmUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoZm4pCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBubyBnb29kOyBhdHRlbXB0IHRvIGNsZWFuIGl0IG91dCwgYnV0IGRvbid0IGZhaWw6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm4pCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHMKQEAgLTQ1MywyMiArNDE5LDIyIEBACiBkZWYgcmVnaXN0ZXJfWF9icm93c2VycygpOgogCiAgICAgIyB1c2UgeGRnLW9wZW4gaWYgYXJvdW5kCi0gICAgaWYgX2lzY29tbWFuZCgieGRnLW9wZW4iKToKKyAgICBpZiBzaHV0aWwud2hpY2goInhkZy1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ4ZGctb3BlbiIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJ4ZGctb3BlbiIpKQogCiAgICAgIyBUaGUgZGVmYXVsdCBHTk9NRTMgYnJvd3NlcgotICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIF9pc2NvbW1hbmQoImd2ZnMtb3BlbiIpOgorICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIHNodXRpbC53aGljaCgiZ3Zmcy1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJndmZzLW9wZW4iLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigiZ3Zmcy1vcGVuIikpCiAKICAgICAjIFRoZSBkZWZhdWx0IEdOT01FIGJyb3dzZXIKLSAgICBpZiAiR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiBpbiBvcy5lbnZpcm9uIGFuZCBfaXNjb21tYW5kKCJnbm9tZS1vcGVuIik6CisgICAgaWYgIkdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgaW4gb3MuZW52aXJvbiBhbmQgc2h1dGlsLndoaWNoKCJnbm9tZS1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJnbm9tZS1vcGVuIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoImdub21lLW9wZW4iKSkKIAogICAgICMgVGhlIGRlZmF1bHQgS0RFIGJyb3dzZXIKLSAgICBpZiAiS0RFX0ZVTExfU0VTU0lPTiIgaW4gb3MuZW52aXJvbiBhbmQgX2lzY29tbWFuZCgia2ZtY2xpZW50Iik6CisgICAgaWYgIktERV9GVUxMX1NFU1NJT04iIGluIG9zLmVudmlyb24gYW5kIHNodXRpbC53aGljaCgia2ZtY2xpZW50Iik6CiAgICAgICAgIHJlZ2lzdGVyKCJrZm1jbGllbnQiLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia2ZtY2xpZW50IikpCiAKLSAgICBpZiBfaXNjb21tYW5kKCJ4LXd3dy1icm93c2VyIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ4LXd3dy1icm93c2VyIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ4LXd3dy1icm93c2VyIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoIngtd3d3LWJyb3dzZXIiKSkKIAogICAgICMgVGhlIE1vemlsbGEvTmV0c2NhcGUgYnJvd3NlcnMKQEAgLTQ3NiwzOSArNDQyLDM5IEBACiAgICAgICAgICAgICAgICAgICAgICJtb3ppbGxhLWZpcmViaXJkIiwgImZpcmViaXJkIiwKICAgICAgICAgICAgICAgICAgICAgImljZXdlYXNlbCIsICJpY2VhcGUiLAogICAgICAgICAgICAgICAgICAgICAic2VhbW9ua2V5IiwgIm1vemlsbGEiLCAibmV0c2NhcGUiKToKLSAgICAgICAgaWYgX2lzY29tbWFuZChicm93c2VyKToKKyAgICAgICAgaWYgc2h1dGlsLndoaWNoKGJyb3dzZXIpOgogICAgICAgICAgICAgcmVnaXN0ZXIoYnJvd3NlciwgTm9uZSwgTW96aWxsYShicm93c2VyKSkKIAogICAgICMgS29ucXVlcm9yL2tmbSwgdGhlIEtERSBicm93c2VyLgotICAgIGlmIF9pc2NvbW1hbmQoImtmbSIpOgorICAgIGlmIHNodXRpbC53aGljaCgia2ZtIik6CiAgICAgICAgIHJlZ2lzdGVyKCJrZm0iLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia2ZtIikpCi0gICAgZWxpZiBfaXNjb21tYW5kKCJrb25xdWVyb3IiKToKKyAgICBlbGlmIHNodXRpbC53aGljaCgia29ucXVlcm9yIik6CiAgICAgICAgIHJlZ2lzdGVyKCJrb25xdWVyb3IiLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia29ucXVlcm9yIikpCiAKICAgICAjIEdub21lJ3MgR2FsZW9uIGFuZCBFcGlwaGFueQogICAgIGZvciBicm93c2VyIGluICgiZ2FsZW9uIiwgImVwaXBoYW55Iik6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIEdhbGVvbihicm93c2VyKSkKIAogICAgICMgU2tpcHN0b25lLCBhbm90aGVyIEd0ay9Nb3ppbGxhIGJhc2VkIGJyb3dzZXIKLSAgICBpZiBfaXNjb21tYW5kKCJza2lwc3RvbmUiKToKKyAgICBpZiBzaHV0aWwud2hpY2goInNraXBzdG9uZSIpOgogICAgICAgICByZWdpc3Rlcigic2tpcHN0b25lIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoInNraXBzdG9uZSIpKQogCiAgICAgIyBHb29nbGUgQ2hyb21lL0Nocm9taXVtIGJyb3dzZXJzCiAgICAgZm9yIGJyb3dzZXIgaW4gKCJnb29nbGUtY2hyb21lIiwgImNocm9tZSIsICJjaHJvbWl1bSIsICJjaHJvbWl1bS1icm93c2VyIik6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIENocm9tZShicm93c2VyKSkKIAogICAgICMgT3BlcmEsIHF1aXRlIHBvcHVsYXIKLSAgICBpZiBfaXNjb21tYW5kKCJvcGVyYSIpOgorICAgIGlmIHNodXRpbC53aGljaCgib3BlcmEiKToKICAgICAgICAgcmVnaXN0ZXIoIm9wZXJhIiwgTm9uZSwgT3BlcmEoIm9wZXJhIikpCiAKICAgICAjIE5leHQsIE1vc2FpYyAtLSBvbGQgYnV0IHN0aWxsIGluIHVzZS4KLSAgICBpZiBfaXNjb21tYW5kKCJtb3NhaWMiKToKKyAgICBpZiBzaHV0aWwud2hpY2goIm1vc2FpYyIpOgogICAgICAgICByZWdpc3RlcigibW9zYWljIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoIm1vc2FpYyIpKQogCiAgICAgIyBHcmFpbCwgdGhlIFB5dGhvbiBicm93c2VyLiBEb2VzIGFueWJvZHkgc3RpbGwgdXNlIGl0PwotICAgIGlmIF9pc2NvbW1hbmQoImdyYWlsIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJncmFpbCIpOgogICAgICAgICByZWdpc3RlcigiZ3JhaWwiLCBHcmFpbCwgTm9uZSkKIAogIyBQcmVmZXIgWCBicm93c2VycyBpZiBwcmVzZW50CkBAIC01MTcsMTggKzQ4MywxOCBAQAogCiAjIEFsc28gdHJ5IGNvbnNvbGUgYnJvd3NlcnMKIGlmIG9zLmVudmlyb24uZ2V0KCJURVJNIik6Ci0gICAgaWYgX2lzY29tbWFuZCgid3d3LWJyb3dzZXIiKToKKyAgICBpZiBzaHV0aWwud2hpY2goInd3dy1icm93c2VyIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ3d3ctYnJvd3NlciIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJ3d3ctYnJvd3NlciIpKQogICAgICMgVGhlIExpbmtzL2VsaW5rcyBicm93c2VycyA8aHR0cDovL2FydGF4Lmthcmxpbi5tZmYuY3VuaS5jei9+bWlrdWxhcy9saW5rcy8+Ci0gICAgaWYgX2lzY29tbWFuZCgibGlua3MiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImxpbmtzIik6CiAgICAgICAgIHJlZ2lzdGVyKCJsaW5rcyIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJsaW5rcyIpKQotICAgIGlmIF9pc2NvbW1hbmQoImVsaW5rcyIpOgorICAgIGlmIHNodXRpbC53aGljaCgiZWxpbmtzIik6CiAgICAgICAgIHJlZ2lzdGVyKCJlbGlua3MiLCBOb25lLCBFbGlua3MoImVsaW5rcyIpKQogICAgICMgVGhlIEx5bnggYnJvd3NlciA8aHR0cDovL2x5bnguaXNjLm9yZy8+LCA8aHR0cDovL2x5bnguYnJvd3Nlci5vcmcvPgotICAgIGlmIF9pc2NvbW1hbmQoImx5bngiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImx5bngiKToKICAgICAgICAgcmVnaXN0ZXIoImx5bngiLCBOb25lLCBHZW5lcmljQnJvd3NlcigibHlueCIpKQogICAgICMgVGhlIHczbSBicm93c2VyIDxodHRwOi8vdzNtLnNvdXJjZWZvcmdlLm5ldC8+Ci0gICAgaWYgX2lzY29tbWFuZCgidzNtIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ3M20iKToKICAgICAgICAgcmVnaXN0ZXIoInczbSIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJ3M20iKSkKIAogIwpAQCAtNTQwLDcgKzUwNiw3IEBACiAgICAgICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT1UcnVlKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUodXJsKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICMgW0Vycm9yIDIyXSBObyBhcHBsaWNhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAogICAgICAgICAgICAgICAgICMgZmlsZSBmb3IgdGhpcyBvcGVyYXRpb246ICc8VVJMPicKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTU1OCw3ICs1MjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcm5ldCBFeHBsb3JlclxcSUVYUExPUkUuRVhFIikKICAgICBmb3IgYnJvd3NlciBpbiAoImZpcmVmb3giLCAiZmlyZWJpcmQiLCAic2VhbW9ua2V5IiwgIm1vemlsbGEiLAogICAgICAgICAgICAgICAgICAgICAibmV0c2NhcGUiLCAib3BlcmEiLCBpZXhwbG9yZSk6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKGJyb3dzZXIpKQogCiAjCkBAIC02NDQsMTcgKzYxMCw2IEBACiAgICAgcmVnaXN0ZXIoIk1hY09TWCIsIE5vbmUsIE1hY09TWE9TQVNjcmlwdCgnZGVmYXVsdCcpLCAtMSkKIAogCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQgZm9yIE9TLzIKLSMKLQotaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAib3MyIiBhbmQgX2lzY29tbWFuZCgibmV0c2NhcGUiKToKLSAgICBfdHJ5b3JkZXIgPSBbXQotICAgIF9icm93c2VycyA9IHt9Ci0gICAgcmVnaXN0ZXIoIm9zMm5ldHNjYXBlIiwgTm9uZSwKLSAgICAgICAgICAgICBHZW5lcmljQnJvd3NlcihbInN0YXJ0IiwgIm5ldHNjYXBlIiwgIiVzIl0pLCAtMSkKLQotCiAjIE9LLCBub3cgdGhhdCB3ZSBrbm93IHdoYXQgdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSBvcmRlcnMgZm9yIGVhY2gKICMgcGxhdGZvcm0gYXJlLCBhbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZW0gd2l0aCB0aGUgQlJPV1NFUiB2YXJpYWJsZS4KIGlmICJCUk9XU0VSIiBpbiBvcy5lbnZpcm9uOgpkaWZmIC0tZ2l0IGEvTGliL3dzZ2lyZWYvX19pbml0X18ucHkgYi9MaWIvd3NnaXJlZi9fX2luaXRfXy5weQppbmRleCA0NmM1NzlmLi4xZWZiYmEwIDEwMDY0NAotLS0gYS9MaWIvd3NnaXJlZi9fX2luaXRfXy5weQorKysgYi9MaWIvd3NnaXJlZi9fX2luaXRfXy5weQpAQCAtMSw0ICsxLDQgQEAKLSIiIndzZ2lyZWYgLS0gYSBXU0dJIChQRVAgMzMzKSBSZWZlcmVuY2UgTGlicmFyeQorIiIid3NnaXJlZiAtLSBhIFdTR0kgKFBFUCAzMzMzKSBSZWZlcmVuY2UgTGlicmFyeQogCiBDdXJyZW50IENvbnRlbnRzOgogCmRpZmYgLS1naXQgYS9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkgYi9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkKaW5kZXggZjA3NGFiOS4uODFlMmRmNyAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5CisrKyBiL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weQpAQCAtOTA1LDExICs5MDUsOCBAQAogICAgICAgICBidWlsZGVyID0gRXhwYXRCdWlsZGVyKCkKIAogICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgc3RyKToKLSAgICAgICAgZnAgPSBvcGVuKGZpbGUsICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGUsICdyYicpIGFzIGZwOgogICAgICAgICAgICAgcmVzdWx0ID0gYnVpbGRlci5wYXJzZUZpbGUoZnApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgZWxzZToKICAgICAgICAgcmVzdWx0ID0gYnVpbGRlci5wYXJzZUZpbGUoZmlsZSkKICAgICByZXR1cm4gcmVzdWx0CkBAIC05MzksMTEgKzkzNiw4IEBACiAgICAgICAgIGJ1aWxkZXIgPSBGcmFnbWVudEJ1aWxkZXIoY29udGV4dCkKIAogICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgc3RyKToKLSAgICAgICAgZnAgPSBvcGVuKGZpbGUsICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGUsICdyYicpIGFzIGZwOgogICAgICAgICAgICAgcmVzdWx0ID0gYnVpbGRlci5wYXJzZUZpbGUoZnApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgZWxzZToKICAgICAgICAgcmVzdWx0ID0gYnVpbGRlci5wYXJzZUZpbGUoZmlsZSkKICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5IGIvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weQppbmRleCA3MWVlYjA1Li45NjM0NzBlIDEwMDY0NAotLS0gYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5CisrKyBiL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkKQEAgLTcxLDggKzcxLDggQEAKICMgQHJldHVybiBUaGUgZXhwYW5kZWQgcmVzb3VyY2UuICBJZiB0aGUgcGFyc2UgbW9kZSBpcyAieG1sIiwgdGhpcwogIyAgICBpcyBhbiBFbGVtZW50VHJlZSBpbnN0YW5jZS4gIElmIHRoZSBwYXJzZSBtb2RlIGlzICJ0ZXh0IiwgdGhpcwogIyAgICBpcyBhIFVuaWNvZGUgc3RyaW5nLiAgSWYgdGhlIGxvYWRlciBmYWlscywgaXQgY2FuIHJldHVybiBOb25lCi0jICAgIG9yIHJhaXNlIGFuIElPRXJyb3IgZXhjZXB0aW9uLgotIyBAdGhyb3dzIElPRXJyb3IgSWYgdGhlIGxvYWRlciBmYWlscyB0byBsb2FkIHRoZSByZXNvdXJjZS4KKyMgICAgb3IgcmFpc2UgYW4gT1NFcnJvciBleGNlcHRpb24uCisjIEB0aHJvd3MgT1NFcnJvciBJZiB0aGUgbG9hZGVyIGZhaWxzIHRvIGxvYWQgdGhlIHJlc291cmNlLgogCiBkZWYgZGVmYXVsdF9sb2FkZXIoaHJlZiwgcGFyc2UsIGVuY29kaW5nPU5vbmUpOgogICAgIGlmIHBhcnNlID09ICJ4bWwiOgpAQCAtOTQsNyArOTQsNyBAQAogIyAgICAgdGhhdCBpbXBsZW1lbnRzIHRoZSBzYW1lIGludGVyZmFjZSBhcyA8Yj5kZWZhdWx0X2xvYWRlcjwvYj4uCiAjIEB0aHJvd3MgRmF0YWxJbmNsdWRlRXJyb3IgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRvIGluY2x1ZGUgYSBnaXZlbgogIyAgICAgcmVzb3VyY2UsIG9yIGlmIHRoZSB0cmVlIGNvbnRhaW5zIG1hbGZvcm1lZCBYSW5jbHVkZSBlbGVtZW50cy4KLSMgQHRocm93cyBJT0Vycm9yIElmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBsb2FkIGEgZ2l2ZW4gcmVzb3VyY2UuCisjIEB0aHJvd3MgT1NFcnJvciBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdG8gbG9hZCBhIGdpdmVuIHJlc291cmNlLgogCiBkZWYgaW5jbHVkZShlbGVtLCBsb2FkZXI9Tm9uZSk6CiAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CmRpZmYgLS1naXQgYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5IGIvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQppbmRleCBlNzAxNWM3Li5kOTE0ZGRiIDEwMDY0NAotLS0gYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CisrKyBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKQEAgLTEwNSwxNCArMTA1LDEyIEBACiBkZWYgcHJlcGFyZV9zdGFyKG5leHQsIHRva2VuKToKICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CiAgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKLSAgICAgICAgICAgIGZvciBlIGluIGVsZW06Ci0gICAgICAgICAgICAgICAgeWllbGQgZQorICAgICAgICAgICAgeWllbGQgZnJvbSBlbGVtCiAgICAgcmV0dXJuIHNlbGVjdAogCiBkZWYgcHJlcGFyZV9zZWxmKG5leHQsIHRva2VuKToKICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6Ci0gICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKLSAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICAgICAgeWllbGQgZnJvbSByZXN1bHQKICAgICByZXR1cm4gc2VsZWN0CiAKIGRlZiBwcmVwYXJlX2Rlc2NlbmRhbnQobmV4dCwgdG9rZW4pOgpAQCAtMTc2LDcgKzE3NCw3IEBACiAgICAgICAgICAgICAgICAgaWYgZWxlbS5nZXQoa2V5KSA9PSB2YWx1ZToKICAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQogICAgICAgICByZXR1cm4gc2VsZWN0Ci0gICAgaWYgc2lnbmF0dXJlID09ICItIiBhbmQgbm90IHJlLm1hdGNoKCJcZCskIiwgcHJlZGljYXRlWzBdKToKKyAgICBpZiBzaWduYXR1cmUgPT0gIi0iIGFuZCBub3QgcmUubWF0Y2goIlwtP1xkKyQiLCBwcmVkaWNhdGVbMF0pOgogICAgICAgICAjIFt0YWddCiAgICAgICAgIHRhZyA9IHByZWRpY2F0ZVswXQogICAgICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CkBAIC0xODQsNyArMTgyLDcgQEAKICAgICAgICAgICAgICAgICBpZiBlbGVtLmZpbmQodGFnKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQogICAgICAgICByZXR1cm4gc2VsZWN0Ci0gICAgaWYgc2lnbmF0dXJlID09ICItPSciIGFuZCBub3QgcmUubWF0Y2goIlxkKyQiLCBwcmVkaWNhdGVbMF0pOgorICAgIGlmIHNpZ25hdHVyZSA9PSAiLT0nIiBhbmQgbm90IHJlLm1hdGNoKCJcLT9cZCskIiwgcHJlZGljYXRlWzBdKToKICAgICAgICAgIyBbdGFnPSd2YWx1ZSddCiAgICAgICAgIHRhZyA9IHByZWRpY2F0ZVswXQogICAgICAgICB2YWx1ZSA9IHByZWRpY2F0ZVstMV0KQEAgLTE5OCw3ICsxOTYsMTAgQEAKICAgICBpZiBzaWduYXR1cmUgPT0gIi0iIG9yIHNpZ25hdHVyZSA9PSAiLSgpIiBvciBzaWduYXR1cmUgPT0gIi0oKS0iOgogICAgICAgICAjIFtpbmRleF0gb3IgW2xhc3QoKV0gb3IgW2xhc3QoKS1pbmRleF0KICAgICAgICAgaWYgc2lnbmF0dXJlID09ICItIjoKKyAgICAgICAgICAgICMgW2luZGV4XQogICAgICAgICAgICAgaW5kZXggPSBpbnQocHJlZGljYXRlWzBdKSAtIDEKKyAgICAgICAgICAgIGlmIGluZGV4IDwgMDoKKyAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiWFBhdGggcG9zaXRpb24gPj0gMSBleHBlY3RlZCIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBwcmVkaWNhdGVbMF0gIT0gImxhc3QiOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bnN1cHBvcnRlZCBmdW5jdGlvbiIpCkBAIC0yMDcsNiArMjA4LDggQEAKICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbnQocHJlZGljYXRlWzJdKSAtIDEKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoInVuc3VwcG9ydGVkIGV4cHJlc3Npb24iKQorICAgICAgICAgICAgICAgIGlmIGluZGV4ID4gLTI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJYUGF0aCBvZmZzZXQgZnJvbSBsYXN0KCkgbXVzdCBiZSBuZWdhdGl2ZSIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGluZGV4ID0gLTEKICAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKaW5kZXggYThlNTcyOS4uZDllOTgwNyAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CkBAIC0xLDI4ICsxLDQ3IEBACisiIiJMaWdodHdlaWdodCBYTUwgc3VwcG9ydCBmb3IgUHl0aG9uLgorCisgWE1MIGlzIGFuIGluaGVyZW50bHkgaGllcmFyY2hpY2FsIGRhdGEgZm9ybWF0LCBhbmQgdGhlIG1vc3QgbmF0dXJhbCB3YXkgdG8KKyByZXByZXNlbnQgaXQgaXMgd2l0aCBhIHRyZWUuICBUaGlzIG1vZHVsZSBoYXMgdHdvIGNsYXNzZXMgZm9yIHRoaXMgcHVycG9zZToKKworICAgIDEuIEVsZW1lbnRUcmVlIHJlcHJlc2VudHMgdGhlIHdob2xlIFhNTCBkb2N1bWVudCBhcyBhIHRyZWUgYW5kCisKKyAgICAyLiBFbGVtZW50IHJlcHJlc2VudHMgYSBzaW5nbGUgbm9kZSBpbiB0aGlzIHRyZWUuCisKKyBJbnRlcmFjdGlvbnMgd2l0aCB0aGUgd2hvbGUgZG9jdW1lbnQgKHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8vZnJvbSBmaWxlcykgYXJlCisgdXN1YWxseSBkb25lIG9uIHRoZSBFbGVtZW50VHJlZSBsZXZlbC4gIEludGVyYWN0aW9ucyB3aXRoIGEgc2luZ2xlIFhNTCBlbGVtZW50CisgYW5kIGl0cyBzdWItZWxlbWVudHMgYXJlIGRvbmUgb24gdGhlIEVsZW1lbnQgbGV2ZWwuCisKKyBFbGVtZW50IGlzIGEgZmxleGlibGUgY29udGFpbmVyIG9iamVjdCBkZXNpZ25lZCB0byBzdG9yZSBoaWVyYXJjaGljYWwgZGF0YQorIHN0cnVjdHVyZXMgaW4gbWVtb3J5LiBJdCBjYW4gYmUgZGVzY3JpYmVkIGFzIGEgY3Jvc3MgYmV0d2VlbiBhIGxpc3QgYW5kIGEKKyBkaWN0aW9uYXJ5LiAgRWFjaCBFbGVtZW50IGhhcyBhIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdDoKKworICAgICd0YWcnIC0gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZWxlbWVudCdzIG5hbWUuCisKKyAgICAnYXR0cmlidXRlcycgLSBhIFB5dGhvbiBkaWN0aW9uYXJ5IHN0b3JpbmcgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLgorCisgICAgJ3RleHQnIC0gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZWxlbWVudCdzIHRleHQgY29udGVudC4KKworICAgICd0YWlsJyAtIGFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIHRleHQgYWZ0ZXIgdGhlIGVsZW1lbnQncyBlbmQgdGFnLgorCisgICAgQW5kIGEgbnVtYmVyIG9mIGNoaWxkIGVsZW1lbnRzIHN0b3JlZCBpbiBhIFB5dGhvbiBzZXF1ZW5jZS4KKworIFRvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIEVsZW1lbnQgY29uc3RydWN0b3IsCisgb3IgdGhlIFN1YkVsZW1lbnQgZmFjdG9yeSBmdW5jdGlvbi4KKworIFlvdSBjYW4gYWxzbyB1c2UgdGhlIEVsZW1lbnRUcmVlIGNsYXNzIHRvIHdyYXAgYW4gZWxlbWVudCBzdHJ1Y3R1cmUKKyBhbmQgY29udmVydCBpdCB0byBhbmQgZnJvbSBYTUwuCisKKyIiIgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCiAjCiAjIEVsZW1lbnRUcmVlCi0jICRJZDogRWxlbWVudFRyZWUucHkgMzQ0MCAyMDA4LTA3LTE4IDE0OjQ1OjAxWiBmcmVkcmlrICQKLSMKLSMgbGlnaHQtd2VpZ2h0IFhNTCBzdXBwb3J0IGZvciBQeXRob24gMi4zIGFuZCBsYXRlci4KLSMKLSMgaGlzdG9yeSAoc2luY2UgMS4yLjYpOgotIyAyMDA1LTExLTEyIGZsICAgYWRkZWQgdG9zdHJpbmdsaXN0L2Zyb21zdHJpbmdsaXN0IGhlbHBlcnMKLSMgMjAwNi0wNy0wNSBmbCAgIG1lcmdlZCBpbiBzZWxlY3RlZCBjaGFuZ2VzIGZyb20gdGhlIDEuMyBzYW5kYm94Ci0jIDIwMDYtMDctMDUgZmwgICByZW1vdmVkIHN1cHBvcnQgZm9yIDIuMSBhbmQgZWFybGllcgotIyAyMDA3LTA2LTIxIGZsICAgYWRkZWQgZGVwcmVjYXRpb24vZnV0dXJlIHdhcm5pbmdzCi0jIDIwMDctMDgtMjUgZmwgICBhZGRlZCBkb2N0eXBlIGhvb2ssIGFkZGVkIHBhcnNlciB2ZXJzaW9uIGF0dHJpYnV0ZSBldGMKLSMgMjAwNy0wOC0yNiBmbCAgIGFkZGVkIG5ldyBzZXJpYWxpemVyIGNvZGUgKGJldHRlciBuYW1lc3BhY2UgaGFuZGxpbmcsIGV0YykKLSMgMjAwNy0wOC0yNyBmbCAgIHdhcm4gZm9yIGJyb2tlbiAvdGFnIHNlYXJjaGVzIG9uIHRyZWUgbGV2ZWwKLSMgMjAwNy0wOS0wMiBmbCAgIGFkZGVkIGh0bWwvdGV4dCBtZXRob2RzIHRvIHNlcmlhbGl6ZXIgKGV4cGVyaW1lbnRhbCkKLSMgMjAwNy0wOS0wNSBmbCAgIGFkZGVkIG1ldGhvZCBhcmd1bWVudCB0byB0b3N0cmluZy90b3N0cmluZ2xpc3QKLSMgMjAwNy0wOS0wNiBmbCAgIGltcHJvdmVkIGVycm9yIGhhbmRsaW5nCi0jIDIwMDctMDktMTMgZmwgICBhZGRlZCBpdGVydGV4dCwgaXRlcmZpbmQ7IGFzc29ydGVkIGNsZWFudXBzCi0jIDIwMDctMTItMTUgZmwgICBhZGRlZCBDMTROIGhvb2tzLCBjb3B5IG1ldGhvZCAoZXhwZXJpbWVudGFsKQotIwogIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCBieSBGcmVkcmlrIEx1bmRoLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgZnJlZHJpa0BweXRob253YXJlLmNvbQogIyBodHRwOi8vd3d3LnB5dGhvbndhcmUuY29tCi0jCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRoZSBFbGVtZW50VHJlZSB0b29sa2l0IGlzCiAjCkBAIC01MSw5ICs3MCw2IEBACiAjIE9GIFRISVMgU09GVFdBUkUuCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KLQogX19hbGxfXyA9IFsKICAgICAjIHB1YmxpYyBzeW1ib2xzCiAgICAgIkNvbW1lbnQiLApAQCAtNjksMzQgKzg1LDEyIEBACiAgICAgIlRyZWVCdWlsZGVyIiwKICAgICAiVkVSU0lPTiIsCiAgICAgIlhNTCIsICJYTUxJRCIsCi0gICAgIlhNTFBhcnNlciIsICJYTUxUcmVlQnVpbGRlciIsCisgICAgIlhNTFBhcnNlciIsCiAgICAgInJlZ2lzdGVyX25hbWVzcGFjZSIsCiAgICAgXQogCiBWRVJTSU9OID0gIjEuMy4wIgogCi0jIwotIyBUaGUgPGI+RWxlbWVudDwvYj4gdHlwZSBpcyBhIGZsZXhpYmxlIGNvbnRhaW5lciBvYmplY3QsIGRlc2lnbmVkIHRvCi0jIHN0b3JlIGhpZXJhcmNoaWNhbCBkYXRhIHN0cnVjdHVyZXMgaW4gbWVtb3J5LiBUaGUgdHlwZSBjYW4gYmUKLSMgZGVzY3JpYmVkIGFzIGEgY3Jvc3MgYmV0d2VlbiBhIGxpc3QgYW5kIGEgZGljdGlvbmFyeS4KLSMgPHA+Ci0jIEVhY2ggZWxlbWVudCBoYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggaXQ6Ci0jIDx1bD4KLSMgPGxpPmEgPGk+dGFnPC9pPi4gVGhpcyBpcyBhIHN0cmluZyBpZGVudGlmeWluZyB3aGF0IGtpbmQgb2YgZGF0YQotIyB0aGlzIGVsZW1lbnQgcmVwcmVzZW50cyAodGhlIGVsZW1lbnQgdHlwZSwgaW4gb3RoZXIgd29yZHMpLjwvbGk+Ci0jIDxsaT5hIG51bWJlciBvZiA8aT5hdHRyaWJ1dGVzPC9pPiwgc3RvcmVkIGluIGEgUHl0aG9uIGRpY3Rpb25hcnkuPC9saT4KLSMgPGxpPmEgPGk+dGV4dDwvaT4gc3RyaW5nLjwvbGk+Ci0jIDxsaT5hbiBvcHRpb25hbCA8aT50YWlsPC9pPiBzdHJpbmcuPC9saT4KLSMgPGxpPmEgbnVtYmVyIG9mIDxpPmNoaWxkIGVsZW1lbnRzPC9pPiwgc3RvcmVkIGluIGEgUHl0aG9uIHNlcXVlbmNlPC9saT4KLSMgPC91bD4KLSMKLSMgVG8gY3JlYXRlIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHVzZSB0aGUge0BsaW5rICNFbGVtZW50fSBjb25zdHJ1Y3RvcgotIyBvciB0aGUge0BsaW5rICNTdWJFbGVtZW50fSBmYWN0b3J5IGZ1bmN0aW9uLgotIyA8cD4KLSMgVGhlIHtAbGluayAjRWxlbWVudFRyZWV9IGNsYXNzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYW4gZWxlbWVudAotIyBzdHJ1Y3R1cmUsIGFuZCBjb252ZXJ0IGl0IGZyb20gYW5kIHRvIFhNTC4KLSMjCi0KIGltcG9ydCBzeXMKIGltcG9ydCByZQogaW1wb3J0IHdhcm5pbmdzCkBAIC0xMDYsODEgKzEwMCw2OCBAQAogZnJvbSAuIGltcG9ydCBFbGVtZW50UGF0aAogCiAKLSMjCi0jIFBhcnNlciBlcnJvci4gIFRoaXMgaXMgYSBzdWJjbGFzcyBvZiA8Yj5TeW50YXhFcnJvcjwvYj4uCi0jIDxwPgotIyBJbiBhZGRpdGlvbiB0byB0aGUgZXhjZXB0aW9uIHZhbHVlLCBhbiBleGNlcHRpb24gaW5zdGFuY2UgY29udGFpbnMgYQotIyBzcGVjaWZpYyBleGNlcHRpb24gY29kZSBpbiB0aGUgPGI+Y29kZTwvYj4gYXR0cmlidXRlLCBhbmQgdGhlIGxpbmUgYW5kCi0jIGNvbHVtbiBvZiB0aGUgZXJyb3IgaW4gdGhlIDxiPnBvc2l0aW9uPC9iPiBhdHRyaWJ1dGUuCi0KIGNsYXNzIFBhcnNlRXJyb3IoU3ludGF4RXJyb3IpOgorICAgICIiIkFuIGVycm9yIHdoZW4gcGFyc2luZyBhbiBYTUwgZG9jdW1lbnQuCisKKyAgICBJbiBhZGRpdGlvbiB0byBpdHMgZXhjZXB0aW9uIHZhbHVlLCBhIFBhcnNlRXJyb3IgY29udGFpbnMKKyAgICB0d28gZXh0cmEgYXR0cmlidXRlczoKKyAgICAgICAgJ2NvZGUnICAgICAtIHRoZSBzcGVjaWZpYyBleGNlcHRpb24gY29kZQorICAgICAgICAncG9zaXRpb24nIC0gdGhlIGxpbmUgYW5kIGNvbHVtbiBvZiB0aGUgZXJyb3IKKworICAgICIiIgogICAgIHBhc3MKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIwotIyBDaGVja3MgaWYgYW4gb2JqZWN0IGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBlbGVtZW50IG9iamVjdC4KLSMKLSMgQHBhcmFtIEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0jIEByZXR1cm4gQSB0cnVlIHZhbHVlIGlmIHRoaXMgaXMgYW4gZWxlbWVudCBvYmplY3QuCi0jIEBkZWZyZXR1cm4gZmxhZwogCiBkZWYgaXNlbGVtZW50KGVsZW1lbnQpOgotICAgICMgRklYTUU6IG5vdCBzdXJlIGFib3V0IHRoaXM7Ci0gICAgIyBpc2luc3RhbmNlKGVsZW1lbnQsIEVsZW1lbnQpIG9yIGxvb2sgZm9yIHRhZy9hdHRyaWIvdGV4dCBhdHRyaWJ1dGVzCisgICAgIiIiUmV0dXJuIFRydWUgaWYgKmVsZW1lbnQqIGFwcGVhcnMgdG8gYmUgYW4gRWxlbWVudC4iIiIKICAgICByZXR1cm4gaGFzYXR0cihlbGVtZW50LCAndGFnJykKIAotIyMKLSMgRWxlbWVudCBjbGFzcy4gIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgRWxlbWVudCBpbnRlcmZhY2UsIGFuZAotIyBwcm92aWRlcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGludGVyZmFjZS4KLSMgPHA+Ci0jIFRoZSBlbGVtZW50IG5hbWUsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlCi0jIGVpdGhlciBBU0NJSSBzdHJpbmdzIChvcmRpbmFyeSBQeXRob24gc3RyaW5ncyBjb250YWluaW5nIG9ubHkgNy1iaXQKLSMgQVNDSUkgY2hhcmFjdGVycykgb3IgVW5pY29kZSBzdHJpbmdzLgotIwotIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCi0jIEBwYXJhbSBhdHRyaWIgQW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuCi0jIEBwYXJhbSAqKmV4dHJhIEFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCi0jIEBzZWUgRWxlbWVudAotIyBAc2VlIFN1YkVsZW1lbnQKLSMgQHNlZSBDb21tZW50Ci0jIEBzZWUgUHJvY2Vzc2luZ0luc3RydWN0aW9uCiAKIGNsYXNzIEVsZW1lbnQ6Ci0gICAgIyA8dGFnIGF0dHJpYj50ZXh0PGNoaWxkLz4uLi48L3RhZz50YWlsCisgICAgIiIiQW4gWE1MIGVsZW1lbnQuCiAKLSAgICAjIwotICAgICMgKEF0dHJpYnV0ZSkgRWxlbWVudCB0YWcuCisgICAgVGhpcyBjbGFzcyBpcyB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFbGVtZW50IGludGVyZmFjZS4KKworICAgIEFuIGVsZW1lbnQncyBsZW5ndGggaXMgaXRzIG51bWJlciBvZiBzdWJlbGVtZW50cy4gIFRoYXQgbWVhbnMgaWYgeW91CisgICAgeW91IHdhbnQgdG8gY2hlY2sgaWYgYW4gZWxlbWVudCBpcyB0cnVseSBlbXB0eSwgeW91IHNob3VsZCBjaGVjayBCT1RICisgICAgaXRzIGxlbmd0aCBBTkQgaXRzIHRleHQgYXR0cmlidXRlLgorCisgICAgVGhlIGVsZW1lbnQgdGFnLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZSBlaXRoZXIKKyAgICBieXRlcyBvciBzdHJpbmdzLgorCisgICAgKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZS4gICphdHRyaWIqIGlzIGFuIG9wdGlvbmFsIGRpY3Rpb25hcnkgY29udGFpbmluZworICAgIGVsZW1lbnQgYXR0cmlidXRlcy4gKmV4dHJhKiBhcmUgYWRkaXRpb25hbCBlbGVtZW50IGF0dHJpYnV0ZXMgZ2l2ZW4gYXMKKyAgICBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgIEV4YW1wbGUgZm9ybToKKyAgICAgICAgPHRhZyBhdHRyaWI+dGV4dDxjaGlsZC8+Li4uPC90YWc+dGFpbAorCisgICAgIiIiCiAKICAgICB0YWcgPSBOb25lCi0KLSAgICAjIwotICAgICMgKEF0dHJpYnV0ZSkgRWxlbWVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeS4gIFdoZXJlIHBvc3NpYmxlLCB1c2UKLSAgICAjIHtAbGluayAjRWxlbWVudC5nZXR9LAotICAgICMge0BsaW5rICNFbGVtZW50LnNldH0sCi0gICAgIyB7QGxpbmsgI0VsZW1lbnQua2V5c30sIGFuZAotICAgICMge0BsaW5rICNFbGVtZW50Lml0ZW1zfSB0byBhY2Nlc3MKLSAgICAjIGVsZW1lbnQgYXR0cmlidXRlcy4KKyAgICAiIiJUaGUgZWxlbWVudCdzIG5hbWUuIiIiCiAKICAgICBhdHRyaWIgPSBOb25lCi0KLSAgICAjIwotICAgICMgKEF0dHJpYnV0ZSkgVGV4dCBiZWZvcmUgZmlyc3Qgc3ViZWxlbWVudC4gIFRoaXMgaXMgZWl0aGVyIGEKLSAgICAjIHN0cmluZyBvciB0aGUgdmFsdWUgTm9uZS4gIE5vdGUgdGhhdCBpZiB0aGVyZSB3YXMgbm8gdGV4dCwgdGhpcwotICAgICMgYXR0cmlidXRlIG1heSBiZSBlaXRoZXIgTm9uZSBvciBhbiBlbXB0eSBzdHJpbmcsIGRlcGVuZGluZyBvbgotICAgICMgdGhlIHBhcnNlci4KKyAgICAiIiJEaWN0aW9uYXJ5IG9mIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcy4iIiIKIAogICAgIHRleHQgPSBOb25lCisgICAgIiIiCisgICAgVGV4dCBiZWZvcmUgZmlyc3Qgc3ViZWxlbWVudC4gVGhpcyBpcyBlaXRoZXIgYSBzdHJpbmcgb3IgdGhlIHZhbHVlIE5vbmUuCisgICAgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIG5vIHRleHQsIHRoaXMgYXR0cmlidXRlIG1heSBiZSBlaXRoZXIKKyAgICBOb25lIG9yIHRoZSBlbXB0eSBzdHJpbmcsIGRlcGVuZGluZyBvbiB0aGUgcGFyc2VyLgogCi0gICAgIyMKLSAgICAjIChBdHRyaWJ1dGUpIFRleHQgYWZ0ZXIgdGhpcyBlbGVtZW50J3MgZW5kIHRhZywgYnV0IGJlZm9yZSB0aGUKLSAgICAjIG5leHQgc2libGluZyBlbGVtZW50J3Mgc3RhcnQgdGFnLiAgVGhpcyBpcyBlaXRoZXIgYSBzdHJpbmcgb3IKLSAgICAjIHRoZSB2YWx1ZSBOb25lLiAgTm90ZSB0aGF0IGlmIHRoZXJlIHdhcyBubyB0ZXh0LCB0aGlzIGF0dHJpYnV0ZQotICAgICMgbWF5IGJlIGVpdGhlciBOb25lIG9yIGFuIGVtcHR5IHN0cmluZywgZGVwZW5kaW5nIG9uIHRoZSBwYXJzZXIuCisgICAgIiIiCiAKLSAgICB0YWlsID0gTm9uZSAjIHRleHQgYWZ0ZXIgZW5kIHRhZywgaWYgYW55CisgICAgdGFpbCA9IE5vbmUKKyAgICAiIiIKKyAgICBUZXh0IGFmdGVyIHRoaXMgZWxlbWVudCdzIGVuZCB0YWcsIGJ1dCBiZWZvcmUgdGhlIG5leHQgc2libGluZyBlbGVtZW50J3MKKyAgICBzdGFydCB0YWcuICBUaGlzIGlzIGVpdGhlciBhIHN0cmluZyBvciB0aGUgdmFsdWUgTm9uZS4gIE5vdGUgdGhhdCBpZiB0aGVyZQorICAgIHdhcyBubyB0ZXh0LCB0aGlzIGF0dHJpYnV0ZSBtYXkgYmUgZWl0aGVyIE5vbmUgb3IgYW4gZW1wdHkgc3RyaW5nLAorICAgIGRlcGVuZGluZyBvbiB0aGUgcGFyc2VyLgogCi0gICAgIyBjb25zdHJ1Y3RvcgorICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhZywgYXR0cmliPXt9LCAqKmV4dHJhKToKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXR0cmliLCBkaWN0KToKQEAgLTE5NSwzNiArMTc2LDMwIEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIjxFbGVtZW50ICVzIGF0IDB4JXg+IiAlIChyZXByKHNlbGYudGFnKSwgaWQoc2VsZikpCiAKLSAgICAjIwotICAgICMgQ3JlYXRlcyBhIG5ldyBlbGVtZW50IG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoaXMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIEVsZW1lbnQgdGFnLgotICAgICMgQHBhcmFtIGF0dHJpYiBFbGVtZW50IGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGEgZGljdGlvbmFyeS4KLSAgICAjIEByZXR1cm4gQSBuZXcgZWxlbWVudCBpbnN0YW5jZS4KLQogICAgIGRlZiBtYWtlZWxlbWVudChzZWxmLCB0YWcsIGF0dHJpYik6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBlbGVtZW50IHdpdGggdGhlIHNhbWUgdHlwZS4KKworICAgICAgICAqdGFnKiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBlbGVtZW50IG5hbWUuCisgICAgICAgICphdHRyaWIqIGlzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBlbGVtZW50IGF0dHJpYnV0ZXMuCisKKyAgICAgICAgRG8gbm90IGNhbGwgdGhpcyBtZXRob2QsIHVzZSB0aGUgU3ViRWxlbWVudCBmYWN0b3J5IGZ1bmN0aW9uIGluc3RlYWQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyh0YWcsIGF0dHJpYikKIAotICAgICMjCi0gICAgIyAoRXhwZXJpbWVudGFsKSBDb3BpZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gIFRoaXMgY3JlYXRlcyBhCi0gICAgIyBzaGFsbG93IGNvcHk7IHN1YmVsZW1lbnRzIHdpbGwgYmUgc2hhcmVkIHdpdGggdGhlIG9yaWdpbmFsIHRyZWUuCi0gICAgIwotICAgICMgQHJldHVybiBBIG5ldyBlbGVtZW50IGluc3RhbmNlLgotCiAgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgICIiIlJldHVybiBjb3B5IG9mIGN1cnJlbnQgZWxlbWVudC4KKworICAgICAgICBUaGlzIGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkuIFN1YmVsZW1lbnRzIHdpbGwgYmUgc2hhcmVkIHdpdGggdGhlCisgICAgICAgIG9yaWdpbmFsIHRyZWUuCisKKyAgICAgICAgIiIiCiAgICAgICAgIGVsZW0gPSBzZWxmLm1ha2VlbGVtZW50KHNlbGYudGFnLCBzZWxmLmF0dHJpYikKICAgICAgICAgZWxlbS50ZXh0ID0gc2VsZi50ZXh0CiAgICAgICAgIGVsZW0udGFpbCA9IHNlbGYudGFpbAogICAgICAgICBlbGVtWzpdID0gc2VsZgogICAgICAgICByZXR1cm4gZWxlbQogCi0gICAgIyMKLSAgICAjIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWJlbGVtZW50cy4gIE5vdGUgdGhhdCB0aGlzIG9ubHkgY291bnRzCi0gICAgIyBmdWxsIGVsZW1lbnRzOyB0byBjaGVjayBpZiB0aGVyZSdzIGFueSBjb250ZW50IGluIGFuIGVsZW1lbnQsIHlvdQotICAgICMgaGF2ZSB0byBjaGVjayBib3RoIHRoZSBsZW5ndGggYW5kIHRoZSA8Yj50ZXh0PC9iPiBhdHRyaWJ1dGUuCi0gICAgIwotICAgICMgQHJldHVybiBUaGUgbnVtYmVyIG9mIHN1YmVsZW1lbnRzLgotCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fY2hpbGRyZW4pCiAKQEAgLTIzNiwyMyArMjExLDkgQEAKICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9jaGlsZHJlbikgIT0gMCAjIGVtdWxhdGUgb2xkIGJlaGF2aW91ciwgZm9yIG5vdwogCi0gICAgIyMKLSAgICAjIFJldHVybnMgdGhlIGdpdmVuIHN1YmVsZW1lbnQsIGJ5IGluZGV4LgotICAgICMKLSAgICAjIEBwYXJhbSBpbmRleCBXaGF0IHN1YmVsZW1lbnQgdG8gcmV0dXJuLgotICAgICMgQHJldHVybiBUaGUgZ2l2ZW4gc3ViZWxlbWVudC4KLSAgICAjIEBleGNlcHRpb24gSW5kZXhFcnJvciBJZiB0aGUgZ2l2ZW4gZWxlbWVudCBkb2VzIG5vdCBleGlzdC4KLQogICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9jaGlsZHJlbltpbmRleF0KIAotICAgICMjCi0gICAgIyBSZXBsYWNlcyB0aGUgZ2l2ZW4gc3ViZWxlbWVudCwgYnkgaW5kZXguCi0gICAgIwotICAgICMgQHBhcmFtIGluZGV4IFdoYXQgc3ViZWxlbWVudCB0byByZXBsYWNlLgotICAgICMgQHBhcmFtIGVsZW1lbnQgVGhlIG5ldyBlbGVtZW50IHZhbHVlLgotICAgICMgQGV4Y2VwdGlvbiBJbmRleEVycm9yIElmIHRoZSBnaXZlbiBlbGVtZW50IGRvZXMgbm90IGV4aXN0LgotCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGluZGV4LCBlbGVtZW50KToKICAgICAgICAgIyBpZiBpc2luc3RhbmNlKGluZGV4LCBzbGljZSk6CiAgICAgICAgICMgICAgIGZvciBlbHQgaW4gZWxlbWVudDoKQEAgLTI2MSw3NiArMjIyLDYyIEBACiAgICAgICAgICMgICAgIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW5baW5kZXhdID0gZWxlbWVudAogCi0gICAgIyMKLSAgICAjIERlbGV0ZXMgdGhlIGdpdmVuIHN1YmVsZW1lbnQsIGJ5IGluZGV4LgotICAgICMKLSAgICAjIEBwYXJhbSBpbmRleCBXaGF0IHN1YmVsZW1lbnQgdG8gZGVsZXRlLgotICAgICMgQGV4Y2VwdGlvbiBJbmRleEVycm9yIElmIHRoZSBnaXZlbiBlbGVtZW50IGRvZXMgbm90IGV4aXN0LgotCiAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KToKICAgICAgICAgZGVsIHNlbGYuX2NoaWxkcmVuW2luZGV4XQogCi0gICAgIyMKLSAgICAjIEFkZHMgYSBzdWJlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhpcyBlbGVtZW50LiAgSW4gZG9jdW1lbnQgb3JkZXIsCi0gICAgIyB0aGUgbmV3IGVsZW1lbnQgd2lsbCBhcHBlYXIgYWZ0ZXIgdGhlIGxhc3QgZXhpc3Rpbmcgc3ViZWxlbWVudCAob3IKLSAgICAjIGRpcmVjdGx5IGFmdGVyIHRoZSB0ZXh0LCBpZiBpdCdzIHRoZSBmaXJzdCBzdWJlbGVtZW50KSwgYnV0IGJlZm9yZQotICAgICMgdGhlIGVuZCB0YWcgZm9yIHRoaXMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBhZGQuCisgICAgZGVmIGFwcGVuZChzZWxmLCBzdWJlbGVtZW50KToKKyAgICAgICAgIiIiQWRkICpzdWJlbGVtZW50KiB0byB0aGUgZW5kIG9mIHRoaXMgZWxlbWVudC4KIAotICAgIGRlZiBhcHBlbmQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KGVsZW1lbnQpCi0gICAgICAgIHNlbGYuX2NoaWxkcmVuLmFwcGVuZChlbGVtZW50KQorICAgICAgICBUaGUgbmV3IGVsZW1lbnQgd2lsbCBhcHBlYXIgaW4gZG9jdW1lbnQgb3JkZXIgYWZ0ZXIgdGhlIGxhc3QgZXhpc3RpbmcKKyAgICAgICAgc3ViZWxlbWVudCAob3IgZGlyZWN0bHkgYWZ0ZXIgdGhlIHRleHQsIGlmIGl0J3MgdGhlIGZpcnN0IHN1YmVsZW1lbnQpLAorICAgICAgICBidXQgYmVmb3JlIHRoZSBlbmQgdGFnIGZvciB0aGlzIGVsZW1lbnQuCiAKLSAgICAjIwotICAgICMgQXBwZW5kcyBzdWJlbGVtZW50cyBmcm9tIGEgc2VxdWVuY2UuCi0gICAgIwotICAgICMgQHBhcmFtIGVsZW1lbnRzIEEgc2VxdWVuY2Ugb2JqZWN0IHdpdGggemVybyBvciBtb3JlIGVsZW1lbnRzLgotICAgICMgQHNpbmNlIDEuMworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoc3ViZWxlbWVudCkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4uYXBwZW5kKHN1YmVsZW1lbnQpCiAKICAgICBkZWYgZXh0ZW5kKHNlbGYsIGVsZW1lbnRzKToKKyAgICAgICAgIiIiQXBwZW5kIHN1YmVsZW1lbnRzIGZyb20gYSBzZXF1ZW5jZS4KKworICAgICAgICAqZWxlbWVudHMqIGlzIGEgc2VxdWVuY2Ugd2l0aCB6ZXJvIG9yIG1vcmUgZWxlbWVudHMuCisKKyAgICAgICAgIiIiCiAgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgogICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW4uZXh0ZW5kKGVsZW1lbnRzKQogCi0gICAgIyMKLSAgICAjIEluc2VydHMgYSBzdWJlbGVtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGlzIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIGluZGV4IFdoZXJlIHRvIGluc2VydCB0aGUgbmV3IHN1YmVsZW1lbnQuCi0KLSAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCBlbGVtZW50KToKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4uaW5zZXJ0KGluZGV4LCBlbGVtZW50KQorICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsIHN1YmVsZW1lbnQpOgorICAgICAgICAiIiJJbnNlcnQgKnN1YmVsZW1lbnQqIGF0IHBvc2l0aW9uICppbmRleCouIiIiCisgICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KHN1YmVsZW1lbnQpCisgICAgICAgIHNlbGYuX2NoaWxkcmVuLmluc2VydChpbmRleCwgc3ViZWxlbWVudCkKIAogICAgIGRlZiBfYXNzZXJ0X2lzX2VsZW1lbnQoc2VsZiwgZSk6CiAgICAgICAgICMgTmVlZCB0byByZWZlciB0byB0aGUgYWN0dWFsIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiwgbm90IHRoZQogICAgICAgICAjIHNoYWRvd2luZyBDIGltcGxlbWVudGF0aW9uLgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBfRWxlbWVudCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIF9FbGVtZW50X1B5KToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZXhwZWN0ZWQgYW4gRWxlbWVudCwgbm90ICVzJyAlIHR5cGUoZSkuX19uYW1lX18pCiAKLSAgICAjIwotICAgICMgUmVtb3ZlcyBhIG1hdGNoaW5nIHN1YmVsZW1lbnQuICBVbmxpa2UgdGhlIDxiPmZpbmQ8L2I+IG1ldGhvZHMsCi0gICAgIyB0aGlzIG1ldGhvZCBjb21wYXJlcyBlbGVtZW50cyBiYXNlZCBvbiBpZGVudGl0eSwgbm90IG9uIHRhZwotICAgICMgdmFsdWUgb3IgY29udGVudHMuICBUbyByZW1vdmUgc3ViZWxlbWVudHMgYnkgb3RoZXIgbWVhbnMsIHRoZQotICAgICMgZWFzaWVzdCB3YXkgaXMgb2Z0ZW4gdG8gdXNlIGEgbGlzdCBjb21wcmVoZW5zaW9uIHRvIHNlbGVjdCB3aGF0Ci0gICAgIyBlbGVtZW50cyB0byBrZWVwLCBhbmQgdXNlIHNsaWNlIGFzc2lnbm1lbnQgdG8gdXBkYXRlIHRoZSBwYXJlbnQKLSAgICAjIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIGVsZW1lbnQgV2hhdCBlbGVtZW50IHRvIHJlbW92ZS4KLSAgICAjIEBleGNlcHRpb24gVmFsdWVFcnJvciBJZiBhIG1hdGNoaW5nIGVsZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLgorICAgIGRlZiByZW1vdmUoc2VsZiwgc3ViZWxlbWVudCk6CisgICAgICAgICIiIlJlbW92ZSBtYXRjaGluZyBzdWJlbGVtZW50LgogCi0gICAgZGVmIHJlbW92ZShzZWxmLCBlbGVtZW50KToKKyAgICAgICAgVW5saWtlIHRoZSBmaW5kIG1ldGhvZHMsIHRoaXMgbWV0aG9kIGNvbXBhcmVzIGVsZW1lbnRzIGJhc2VkIG9uCisgICAgICAgIGlkZW50aXR5LCBOT1QgT04gdGFnIHZhbHVlIG9yIGNvbnRlbnRzLiAgVG8gcmVtb3ZlIHN1YmVsZW1lbnRzIGJ5CisgICAgICAgIG90aGVyIG1lYW5zLCB0aGUgZWFzaWVzdCB3YXkgaXMgdG8gdXNlIGEgbGlzdCBjb21wcmVoZW5zaW9uIHRvCisgICAgICAgIHNlbGVjdCB3aGF0IGVsZW1lbnRzIHRvIGtlZXAsIGFuZCB0aGVuIHVzZSBzbGljZSBhc3NpZ25tZW50IHRvIHVwZGF0ZQorICAgICAgICB0aGUgcGFyZW50IGVsZW1lbnQuCisKKyAgICAgICAgVmFsdWVFcnJvciBpcyByYWlzZWQgaWYgYSBtYXRjaGluZyBlbGVtZW50IGNvdWxkIG5vdCBiZSBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCi0gICAgICAgIHNlbGYuX2NoaWxkcmVuLnJlbW92ZShlbGVtZW50KQotCi0gICAgIyMKLSAgICAjIChEZXByZWNhdGVkKSBSZXR1cm5zIGFsbCBzdWJlbGVtZW50cy4gIFRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQKLSAgICAjIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMKLSAgICAjIEByZXR1cm4gQSBsaXN0IG9mIHN1YmVsZW1lbnRzLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCisgICAgICAgIHNlbGYuX2NoaWxkcmVuLnJlbW92ZShzdWJlbGVtZW50KQogCiAgICAgZGVmIGdldGNoaWxkcmVuKHNlbGYpOgorICAgICAgICAiIiIoRGVwcmVjYXRlZCkgUmV0dXJuIGFsbCBzdWJlbGVtZW50cy4KKworICAgICAgICBFbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICAiVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gICIKICAgICAgICAgICAgICJVc2UgJ2xpc3QoZWxlbSknIG9yIGl0ZXJhdGlvbiBvdmVyIGVsZW0gaW5zdGVhZC4iLApAQCAtMzM4LDEzMSArMjg1LDEyOCBAQAogICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fY2hpbGRyZW4KIAotICAgICMjCi0gICAgIyBGaW5kcyB0aGUgZmlyc3QgbWF0Y2hpbmcgc3ViZWxlbWVudCwgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQgb3IgTm9uZQotCiAgICAgZGVmIGZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIEZpbmRzIHRleHQgZm9yIHRoZSBmaXJzdCBtYXRjaGluZyBzdWJlbGVtZW50LCBieSB0YWcgbmFtZSBvciBwYXRoLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBwYXJhbSBkZWZhdWx0IFdoYXQgdG8gcmV0dXJuIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgZm91bmQuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgdGhlCi0gICAgIyAgICAgZGVmYXVsdCB2YWx1ZSBubyBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudAotICAgICMgICAgIGlzIGZvdW5kLCBidXQgaGFzIG5vIHRleHQgY29udGVudCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbgotICAgICMgICAgIGVtcHR5IHN0cmluZy4KLSAgICAjIEBkZWZyZXR1cm4gc3RyaW5nCi0KICAgICBkZWYgZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdD1Ob25lLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIHRleHQgZm9yIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKmRlZmF1bHQqIGlzIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gdGV4dCBjb250ZW50IG9mIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIGRlZmF1bHQgdmFsdWUgaWYKKyAgICAgICAgbm9uZSB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgYW4gZWxlbWVudCBpcyBmb3VuZCBoYXZpbmcgbm8gdGV4dAorICAgICAgICBjb250ZW50LCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvciBvdGhlciBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKLSAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCi0KICAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cyBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybnMgbGlzdCBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cyBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmRhbGwoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9yIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAotICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIyBAZGVmcmV0dXJuIGEgZ2VuZXJhdGVkIHNlcXVlbmNlIG9mIEVsZW1lbnQgaW5zdGFuY2VzCi0KICAgICBkZWYgaXRlcmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gYW4gaXRlcmFibGUgeWllbGRpbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguaXRlcmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBSZXNldHMgYW4gZWxlbWVudC4gIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbGwgc3ViZWxlbWVudHMsIGNsZWFycwotICAgICMgYWxsIGF0dHJpYnV0ZXMsIGFuZCBzZXRzIHRoZSA8Yj50ZXh0PC9iPiBhbmQgPGI+dGFpbDwvYj4gYXR0cmlidXRlcwotICAgICMgdG8gTm9uZS4KLQogICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgIiIiUmVzZXQgZWxlbWVudC4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIHN1YmVsZW1lbnRzLCBjbGVhcnMgYWxsIGF0dHJpYnV0ZXMsIGFuZCBzZXRzCisgICAgICAgIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMgdG8gTm9uZS4KKworICAgICAgICAiIiIKICAgICAgICAgc2VsZi5hdHRyaWIuY2xlYXIoKQogICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IFtdCiAgICAgICAgIHNlbGYudGV4dCA9IHNlbGYudGFpbCA9IE5vbmUKIAotICAgICMjCi0gICAgIyBHZXRzIGFuIGVsZW1lbnQgYXR0cmlidXRlLiAgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWIuZ2V0PC9iPiwgYnV0Ci0gICAgIyBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlIHRoaXMgYSBiaXQgbW9yZSBlZmZpY2llbnRseS4KLSAgICAjCi0gICAgIyBAcGFyYW0ga2V5IFdoYXQgYXR0cmlidXRlIHRvIGxvb2sgZm9yLgotICAgICMgQHBhcmFtIGRlZmF1bHQgV2hhdCB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgotICAgICMgQHJldHVybiBUaGUgYXR0cmlidXRlIHZhbHVlLCBvciB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgdGhlCi0gICAgIyAgICAgYXR0cmlidXRlIHdhcyBub3QgZm91bmQuCi0gICAgIyBAZGVmcmV0dXJuIHN0cmluZyBvciBOb25lCi0KICAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiR2V0IGVsZW1lbnQgYXR0cmlidXRlLgorCisgICAgICAgIEVxdWl2YWxlbnQgdG8gYXR0cmliLmdldCwgYnV0IHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBoYW5kbGUgdGhpcyBhCisgICAgICAgIGJpdCBtb3JlIGVmZmljaWVudGx5LiAgKmtleSogaXMgd2hhdCBhdHRyaWJ1dGUgdG8gbG9vayBmb3IsIGFuZAorICAgICAgICAqZGVmYXVsdCogaXMgd2hhdCB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgorCisgICAgICAgIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYXR0cmlidXRlIHZhbHVlLCBvciB0aGUgZGVmYXVsdCBpZgorICAgICAgICBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuYXR0cmliLmdldChrZXksIGRlZmF1bHQpCiAKLSAgICAjIwotICAgICMgU2V0cyBhbiBlbGVtZW50IGF0dHJpYnV0ZS4gIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliW2tleV0gPSB2YWx1ZTwvYj4sCi0gICAgIyBidXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhbmRsZSB0aGlzIGEgYml0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAgIwotICAgICMgQHBhcmFtIGtleSBXaGF0IGF0dHJpYnV0ZSB0byBzZXQuCi0gICAgIyBAcGFyYW0gdmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZS4KLQogICAgIGRlZiBzZXQoc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIlNldCBlbGVtZW50IGF0dHJpYnV0ZS4KKworICAgICAgICBFcXVpdmFsZW50IHRvIGF0dHJpYltrZXldID0gdmFsdWUsIGJ1dCBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlCisgICAgICAgIHRoaXMgYSBiaXQgbW9yZSBlZmZpY2llbnRseS4gICprZXkqIGlzIHdoYXQgYXR0cmlidXRlIHRvIHNldCwgYW5kCisgICAgICAgICp2YWx1ZSogaXMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB0byBzZXQgaXQgdG8uCisKKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuYXR0cmliW2tleV0gPSB2YWx1ZQogCi0gICAgIyMKLSAgICAjIEdldHMgYSBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcy4gIFRoZSBuYW1lcyBhcmUgcmV0dXJuZWQgaW4gYW4KLSAgICAjIGFyYml0cmFyeSBvcmRlciAoanVzdCBsaWtlIGZvciBhbiBvcmRpbmFyeSBQeXRob24gZGljdGlvbmFyeSkuCi0gICAgIyBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYi5rZXlzKCk8L2I+LgotICAgICMKLSAgICAjIEByZXR1cm4gQSBsaXN0IG9mIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIHN0cmluZ3MKLQogICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAiIiJHZXQgbGlzdCBvZiBhdHRyaWJ1dGUgbmFtZXMuCisKKyAgICAgICAgTmFtZXMgYXJlIHJldHVybmVkIGluIGFuIGFyYml0cmFyeSBvcmRlciwganVzdCBsaWtlIGFuIG9yZGluYXJ5CisgICAgICAgIFB5dGhvbiBkaWN0LiAgRXF1aXZhbGVudCB0byBhdHRyaWIua2V5cygpCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmF0dHJpYi5rZXlzKCkKIAotICAgICMjCi0gICAgIyBHZXRzIGVsZW1lbnQgYXR0cmlidXRlcywgYXMgYSBzZXF1ZW5jZS4gIFRoZSBhdHRyaWJ1dGVzIGFyZQotICAgICMgcmV0dXJuZWQgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLiAgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWIuaXRlbXMoKTwvYj4uCi0gICAgIwotICAgICMgQHJldHVybiBBIGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSB0dXBsZXMgZm9yIGFsbCBhdHRyaWJ1dGVzLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIChzdHJpbmcsIHN0cmluZykgdHVwbGVzCi0KICAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgICIiIkdldCBlbGVtZW50IGF0dHJpYnV0ZXMgYXMgYSBzZXF1ZW5jZS4KKworICAgICAgICBUaGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQgaW4gYXJiaXRyYXJ5IG9yZGVyLiAgRXF1aXZhbGVudCB0bworICAgICAgICBhdHRyaWIuaXRlbXMoKS4KKworICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIChuYW1lLCB2YWx1ZSkgdHVwbGVzLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5hdHRyaWIuaXRlbXMoKQogCi0gICAgIyMKLSAgICAjIENyZWF0ZXMgYSB0cmVlIGl0ZXJhdG9yLiAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhpcyBlbGVtZW50Ci0gICAgIyBhbmQgYWxsIHN1YmVsZW1lbnRzLCBpbiBkb2N1bWVudCBvcmRlciwgYW5kIHJldHVybnMgYWxsIGVsZW1lbnRzCi0gICAgIyB3aXRoIGEgbWF0Y2hpbmcgdGFnLgotICAgICMgPHA+Ci0gICAgIyBJZiB0aGUgdHJlZSBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbiwgbmV3IG9yIHJlbW92ZWQKLSAgICAjIGVsZW1lbnRzIG1heSBvciBtYXkgbm90IGJlIGluY2x1ZGVkLiAgVG8gZ2V0IGEgc3RhYmxlIHNldCwgdXNlIHRoZQotICAgICMgbGlzdCgpIGZ1bmN0aW9uIG9uIHRoZSBpdGVyYXRvciwgYW5kIGxvb3Agb3ZlciB0aGUgcmVzdWx0aW5nIGxpc3QuCi0gICAgIwotICAgICMgQHBhcmFtIHRhZyBXaGF0IHRhZ3MgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykuCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGluZyBlbGVtZW50cy4KLSAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKLQogICAgIGRlZiBpdGVyKHNlbGYsIHRhZz1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIHRyZWUgaXRlcmF0b3IuCisKKyAgICAgICAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhlIGVsZW1lbnQgYW5kIGFsbCBzdWJlbGVtZW50cyBpbiBkb2N1bWVudAorICAgICAgICBvcmRlciwgcmV0dXJuaW5nIGFsbCBlbGVtZW50cyB3aXRoIGEgbWF0Y2hpbmcgdGFnLgorCisgICAgICAgIElmIHRoZSB0cmVlIHN0cnVjdHVyZSBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLCBuZXcgb3IgcmVtb3ZlZAorICAgICAgICBlbGVtZW50cyBtYXkgb3IgbWF5IG5vdCBiZSBpbmNsdWRlZC4gIFRvIGdldCBhIHN0YWJsZSBzZXQsIHVzZSB0aGUKKyAgICAgICAgbGlzdCgpIGZ1bmN0aW9uIG9uIHRoZSBpdGVyYXRvciwgYW5kIGxvb3Agb3ZlciB0aGUgcmVzdWx0aW5nIGxpc3QuCisKKyAgICAgICAgKnRhZyogaXMgd2hhdCB0YWdzIHRvIGxvb2sgZm9yIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGluZyBlbGVtZW50cy4KKworICAgICAgICAiIiIKICAgICAgICAgaWYgdGFnID09ICIqIjoKICAgICAgICAgICAgIHRhZyA9IE5vbmUKICAgICAgICAgaWYgdGFnIGlzIE5vbmUgb3Igc2VsZi50YWcgPT0gdGFnOgogICAgICAgICAgICAgeWllbGQgc2VsZgogICAgICAgICBmb3IgZSBpbiBzZWxmLl9jaGlsZHJlbjoKLSAgICAgICAgICAgIGZvciBlIGluIGUuaXRlcih0YWcpOgotICAgICAgICAgICAgICAgIHlpZWxkIGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZS5pdGVyKHRhZykKIAogICAgICMgY29tcGF0aWJpbGl0eQogICAgIGRlZiBnZXRpdGVyYXRvcihzZWxmLCB0YWc9Tm9uZSk6CkBAIC00NzQsNzggKzQxOCw2NyBAQAogICAgICAgICApCiAgICAgICAgIHJldHVybiBsaXN0KHNlbGYuaXRlcih0YWcpKQogCi0gICAgIyMKLSAgICAjIENyZWF0ZXMgYSB0ZXh0IGl0ZXJhdG9yLiAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhpcyBlbGVtZW50Ci0gICAgIyBhbmQgYWxsIHN1YmVsZW1lbnRzLCBpbiBkb2N1bWVudCBvcmRlciwgYW5kIHJldHVybnMgYWxsIGlubmVyCi0gICAgIyB0ZXh0LgotICAgICMKLSAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3IgY29udGFpbmluZyBhbGwgaW5uZXIgdGV4dC4KLSAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKLQogICAgIGRlZiBpdGVydGV4dChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHRleHQgaXRlcmF0b3IuCisKKyAgICAgICAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhlIGVsZW1lbnQgYW5kIGFsbCBzdWJlbGVtZW50cyBpbiBkb2N1bWVudAorICAgICAgICBvcmRlciwgcmV0dXJuaW5nIGFsbCBpbm5lciB0ZXh0LgorCisgICAgICAgICIiIgogICAgICAgICB0YWcgPSBzZWxmLnRhZwogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0YWcsIHN0cikgYW5kIHRhZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBzZWxmLnRleHQ6CiAgICAgICAgICAgICB5aWVsZCBzZWxmLnRleHQKICAgICAgICAgZm9yIGUgaW4gc2VsZjoKLSAgICAgICAgICAgIGZvciBzIGluIGUuaXRlcnRleHQoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzCisgICAgICAgICAgICB5aWVsZCBmcm9tIGUuaXRlcnRleHQoKQogICAgICAgICAgICAgaWYgZS50YWlsOgogICAgICAgICAgICAgICAgIHlpZWxkIGUudGFpbAogCi0jIGNvbXBhdGliaWxpdHkKLV9FbGVtZW50ID0gX0VsZW1lbnRJbnRlcmZhY2UgPSBFbGVtZW50Ci0KLSMjCi0jIFN1YmVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbGVtZW50IGluc3RhbmNlLCBhbmQKLSMgYXBwZW5kcyBpdCB0byBhbiBleGlzdGluZyBlbGVtZW50LgotIyA8cD4KLSMgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUKLSMgZWl0aGVyIDgtYml0IEFTQ0lJIHN0cmluZ3Mgb3IgVW5pY29kZSBzdHJpbmdzLgotIwotIyBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgZWxlbWVudC4KLSMgQHBhcmFtIHRhZyBUaGUgc3ViZWxlbWVudCBuYW1lLgotIyBAcGFyYW0gYXR0cmliIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnksIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLgotIyBAcGFyYW0gKipleHRyYSBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgotIyBAcmV0dXJuIEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAogCiBkZWYgU3ViRWxlbWVudChwYXJlbnQsIHRhZywgYXR0cmliPXt9LCAqKmV4dHJhKToKKyAgICAiIiJTdWJlbGVtZW50IGZhY3Rvcnkgd2hpY2ggY3JlYXRlcyBhbiBlbGVtZW50IGluc3RhbmNlLCBhbmQgYXBwZW5kcyBpdAorICAgIHRvIGFuIGV4aXN0aW5nIHBhcmVudC4KKworICAgIFRoZSBlbGVtZW50IHRhZywgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUgZWl0aGVyCisgICAgYnl0ZXMgb3IgVW5pY29kZSBzdHJpbmdzLgorCisgICAgKnBhcmVudCogaXMgdGhlIHBhcmVudCBlbGVtZW50LCAqdGFnKiBpcyB0aGUgc3ViZWxlbWVudHMgbmFtZSwgKmF0dHJpYiogaXMKKyAgICBhbiBvcHRpb25hbCBkaXJlY3RvcnkgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMsICpleHRyYSogYXJlCisgICAgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAgIiIiCiAgICAgYXR0cmliID0gYXR0cmliLmNvcHkoKQogICAgIGF0dHJpYi51cGRhdGUoZXh0cmEpCiAgICAgZWxlbWVudCA9IHBhcmVudC5tYWtlZWxlbWVudCh0YWcsIGF0dHJpYikKICAgICBwYXJlbnQuYXBwZW5kKGVsZW1lbnQpCiAgICAgcmV0dXJuIGVsZW1lbnQKIAotIyMKLSMgQ29tbWVudCBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwKLSMgZWxlbWVudCB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgY29tbWVudCBieSB0aGUgc3RhbmRhcmQKLSMgc2VyaWFsaXplci4KLSMgPHA+Ci0jIFRoZSBjb21tZW50IHN0cmluZyBjYW4gYmUgZWl0aGVyIGFuIDgtYml0IEFTQ0lJIHN0cmluZyBvciBhIFVuaWNvZGUKLSMgc3RyaW5nLgotIwotIyBAcGFyYW0gdGV4dCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tZW50IHN0cmluZy4KLSMgQHJldHVybiBBbiBlbGVtZW50IGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBjb21tZW50LgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAogZGVmIENvbW1lbnQodGV4dD1Ob25lKToKKyAgICAiIiJDb21tZW50IGVsZW1lbnQgZmFjdG9yeS4KKworICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudCB3aGljaCB0aGUgc3RhbmRhcmQgc2VyaWFsaXplcgorICAgIHNlcmlhbGl6ZXMgYXMgYW4gWE1MIGNvbW1lbnQuCisKKyAgICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWVudCBzdHJpbmcuCisKKyAgICAiIiIKICAgICBlbGVtZW50ID0gRWxlbWVudChDb21tZW50KQogICAgIGVsZW1lbnQudGV4dCA9IHRleHQKICAgICByZXR1cm4gZWxlbWVudAogCi0jIwotIyBQSSBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudAotIyB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBieSB0aGUgc3RhbmRhcmQKLSMgc2VyaWFsaXplci4KLSMKLSMgQHBhcmFtIHRhcmdldCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSB0YXJnZXQuCi0jIEBwYXJhbSB0ZXh0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBJIGNvbnRlbnRzLCBpZiBhbnkuCi0jIEByZXR1cm4gQW4gZWxlbWVudCBpbnN0YW5jZSwgcmVwcmVzZW50aW5nIGEgUEkuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAogCiBkZWYgUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRhcmdldCwgdGV4dD1Ob25lKToKKyAgICAiIiJQcm9jZXNzaW5nIEluc3RydWN0aW9uIGVsZW1lbnQgZmFjdG9yeS4KKworICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudCB3aGljaCB0aGUgc3RhbmRhcmQgc2VyaWFsaXplcgorICAgIHNlcmlhbGl6ZXMgYXMgYW4gWE1MIGNvbW1lbnQuCisKKyAgICAqdGFyZ2V0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLCAqdGV4dCogaXMgYQorICAgIHN0cmluZyBjb250YWluaW5nIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGNvbnRlbnRzLCBpZiBhbnkuCisKKyAgICAiIiIKICAgICBlbGVtZW50ID0gRWxlbWVudChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCiAgICAgZWxlbWVudC50ZXh0ID0gdGFyZ2V0CiAgICAgaWYgdGV4dDoKQEAgLTU1NCwxNyArNDg3LDIxIEBACiAKIFBJID0gUHJvY2Vzc2luZ0luc3RydWN0aW9uCiAKLSMjCi0jIFFOYW1lIHdyYXBwZXIuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYSBRTmFtZSBhdHRyaWJ1dGUgdmFsdWUsIGluCi0jIG9yZGVyIHRvIGdldCBwcm9wZXIgbmFtZXNwYWNlIGhhbmRsaW5nIG9uIG91dHB1dC4KLSMKLSMgQHBhcmFtIHRleHQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgUU5hbWUgdmFsdWUsIGluIHRoZSBmb3JtIHt1cml9bG9jYWwsCi0jICAgICBvciwgaWYgdGhlIHRhZyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIFVSSSBwYXJ0IG9mIGEgUU5hbWUuCi0jIEBwYXJhbSB0YWcgT3B0aW9uYWwgdGFnLiAgSWYgZ2l2ZW4sIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcwotIyAgICAgYW4gVVJJLCBhbmQgdGhpcyBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcyBhIGxvY2FsIG5hbWUuCi0jIEByZXR1cm4gQW4gb3BhcXVlIG9iamVjdCwgcmVwcmVzZW50aW5nIHRoZSBRTmFtZS4KIAogY2xhc3MgUU5hbWU6CisgICAgIiIiUXVhbGlmaWVkIG5hbWUgd3JhcHBlci4KKworICAgIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gd3JhcCBhIFFOYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpbiBvcmRlciB0byBnZXQKKyAgICBwcm9wZXIgbmFtZXNwYWNlIGhhbmRpbmcgb24gb3V0cHV0LgorCisgICAgKnRleHRfb3JfdXJpKiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBRTmFtZSB2YWx1ZSBlaXRoZXIgaW4gdGhlIGZvcm0KKyAgICB7dXJpfWxvY2FsLCBvciBpZiB0aGUgdGFnIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgVVJJIHBhcnQgb2YgYSBRTmFtZS4KKworICAgICp0YWcqIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHdoaWNoIGlmIGdpdmVuLCB3aWxsIG1ha2UgdGhlIGZpcnN0CisgICAgYXJndW1lbnQgKHRleHRfb3JfdXJpKSBiZSBpbnRlcnByZXRlZCBhcyBhIFVSSSwgYW5kIHRoaXMgYXJndW1lbnQgKHRhZykKKyAgICBiZSBpbnRlcnByZXRlZCBhcyBhIGxvY2FsIG5hbWUuCisKKyAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dF9vcl91cmksIHRhZz1Ob25lKToKICAgICAgICAgaWYgdGFnOgogICAgICAgICAgICAgdGV4dF9vcl91cmkgPSAieyVzfSVzIiAlICh0ZXh0X29yX3VyaSwgdGFnKQpAQCAtNjAyLDYzICs1MzksNjUgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIwotIyBFbGVtZW50VHJlZSB3cmFwcGVyIGNsYXNzLiAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGVudGlyZSBlbGVtZW50Ci0jIGhpZXJhcmNoeSwgYW5kIGFkZHMgc29tZSBleHRyYSBzdXBwb3J0IGZvciBzZXJpYWxpemF0aW9uIHRvIGFuZCBmcm9tCi0jIHN0YW5kYXJkIFhNTC4KLSMKLSMgQHBhcmFtIGVsZW1lbnQgT3B0aW9uYWwgcm9vdCBlbGVtZW50LgotIyBAa2V5cGFyYW0gZmlsZSBPcHRpb25hbCBmaWxlIGhhbmRsZSBvciBmaWxlIG5hbWUuICBJZiBnaXZlbiwgdGhlCi0jICAgICB0cmVlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoaXMgWE1MIGZpbGUuCiAKIGNsYXNzIEVsZW1lbnRUcmVlOgorICAgICIiIkFuIFhNTCBlbGVtZW50IGhpZXJhcmNoeS4KIAorICAgIFRoaXMgY2xhc3MgYWxzbyBwcm92aWRlcyBzdXBwb3J0IGZvciBzZXJpYWxpemF0aW9uIHRvIGFuZCBmcm9tCisgICAgc3RhbmRhcmQgWE1MLgorCisgICAgKmVsZW1lbnQqIGlzIGFuIG9wdGlvbmFsIHJvb3QgZWxlbWVudCBub2RlLAorICAgICpmaWxlKiBpcyBhbiBvcHRpb25hbCBmaWxlIGhhbmRsZSBvciBmaWxlIG5hbWUgb2YgYW4gWE1MIGZpbGUgd2hvc2UKKyAgICBjb250ZW50cyB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdHJlZSB3aXRoLgorCisgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnQ9Tm9uZSwgZmlsZT1Ob25lKToKICAgICAgICAgIyBhc3NlcnQgZWxlbWVudCBpcyBOb25lIG9yIGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9yb290ID0gZWxlbWVudCAjIGZpcnN0IG5vZGUKICAgICAgICAgaWYgZmlsZToKICAgICAgICAgICAgIHNlbGYucGFyc2UoZmlsZSkKIAotICAgICMjCi0gICAgIyBHZXRzIHRoZSByb290IGVsZW1lbnQgZm9yIHRoaXMgdHJlZS4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBnZXRyb290KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gcm9vdCBlbGVtZW50IG9mIHRoaXMgdHJlZS4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QKIAotICAgICMjCi0gICAgIyBSZXBsYWNlcyB0aGUgcm9vdCBlbGVtZW50IGZvciB0aGlzIHRyZWUuICBUaGlzIGRpc2NhcmRzIHRoZQotICAgICMgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdHJlZSwgYW5kIHJlcGxhY2VzIGl0IHdpdGggdGhlIGdpdmVuCi0gICAgIyBlbGVtZW50LiAgVXNlIHdpdGggY2FyZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gZWxlbWVudCBBbiBlbGVtZW50IGluc3RhbmNlLgotCiAgICAgZGVmIF9zZXRyb290KHNlbGYsIGVsZW1lbnQpOgorICAgICAgICAiIiJSZXBsYWNlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHRyZWUuCisKKyAgICAgICAgVGhpcyB3aWxsIGRpc2NhcmQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHRyZWUgYW5kIHJlcGxhY2UgaXQKKyAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gZWxlbWVudC4gIFVzZSB3aXRoIGNhcmUhCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9yb290ID0gZWxlbWVudAogCi0gICAgIyMKLSAgICAjIExvYWRzIGFuIGV4dGVybmFsIFhNTCBkb2N1bWVudCBpbnRvIHRoaXMgZWxlbWVudCB0cmVlLgotICAgICMKLSAgICAjIEBwYXJhbSBzb3VyY2UgQSBmaWxlIG5hbWUgb3IgZmlsZSBvYmplY3QuICBJZiBhIGZpbGUgb2JqZWN0IGlzCi0gICAgIyAgICAgZ2l2ZW4sIGl0IG9ubHkgaGFzIHRvIGltcGxlbWVudCBhIDxiPnJlYWQobik8L2I+IG1ldGhvZC4KLSAgICAjIEBrZXlwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSAgICAjICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSAgICAjIEByZXR1cm4gVGhlIGRvY3VtZW50IHJvb3QgZWxlbWVudC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotICAgICMgQGV4Y2VwdGlvbiBQYXJzZUVycm9yIElmIHRoZSBwYXJzZXIgZmFpbHMgdG8gcGFyc2UgdGhlIGRvY3VtZW50LgotCiAgICAgZGVmIHBhcnNlKHNlbGYsIHNvdXJjZSwgcGFyc2VyPU5vbmUpOgorICAgICAgICAiIiJMb2FkIGV4dGVybmFsIFhNTCBkb2N1bWVudCBpbnRvIGVsZW1lbnQgdHJlZS4KKworICAgICAgICAqc291cmNlKiBpcyBhIGZpbGUgbmFtZSBvciBmaWxlIG9iamVjdCwgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyCisgICAgICAgIGluc3RhbmNlIHRoYXQgZGVmYXVsdHMgdG8gWE1MUGFyc2VyLgorCisgICAgICAgIFBhcnNlRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBwYXJzZXIgZmFpbHMgdG8gcGFyc2UgdGhlIGRvY3VtZW50LgorCisgICAgICAgIFJldHVybnMgdGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc291cmNlIGRvY3VtZW50LgorCisgICAgICAgICIiIgogICAgICAgICBjbG9zZV9zb3VyY2UgPSBGYWxzZQogICAgICAgICBpZiBub3QgaGFzYXR0cihzb3VyY2UsICJyZWFkIik6CiAgICAgICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZSwgInJiIikKICAgICAgICAgICAgIGNsb3NlX3NvdXJjZSA9IFRydWUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgbm90IHBhcnNlcjoKLSAgICAgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCi0gICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgaWYgcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBJZiBubyBwYXJzZXIgd2FzIHNwZWNpZmllZCwgY3JlYXRlIGEgZGVmYXVsdCBYTUxQYXJzZXIKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIoKQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIocGFyc2VyLCAnX3BhcnNlX3dob2xlJyk6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIGRlZmF1bHQgWE1MUGFyc2VyLCB3aGVuIGl0IGNvbWVzIGZyb20gYW4gYWNjZWxlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICMgY2FuIGRlZmluZSBhbiBpbnRlcm5hbCBfcGFyc2Vfd2hvbGUgQVBJIGZvciBlZmZpY2llbmN5LgorICAgICAgICAgICAgICAgICAgICAjIEl0IGNhbiBiZSB1c2VkIHRvIHBhcnNlIHRoZSB3aG9sZSBzb3VyY2Ugd2l0aG91dCBmZWVkaW5nCisgICAgICAgICAgICAgICAgICAgICMgaXQgd2l0aCBjaHVua3MuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuX3BhcnNlX3dob2xlKHNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkKDY1NTM2KQogICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgICAgICBicmVhawpAQCAtNjY5LDE1ICs2MDgsMTUgQEAKICAgICAgICAgICAgIGlmIGNsb3NlX3NvdXJjZToKICAgICAgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQogCi0gICAgIyMKLSAgICAjIENyZWF0ZXMgYSB0cmVlIGl0ZXJhdG9yIGZvciB0aGUgcm9vdCBlbGVtZW50LiAgVGhlIGl0ZXJhdG9yIGxvb3BzCi0gICAgIyBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGlzIHRyZWUsIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgV2hhdCB0YWdzIHRvIGxvb2sgZm9yIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yLgotICAgICMgQGRlZnJldHVybiBpdGVyYXRvcgotCiAgICAgZGVmIGl0ZXIoc2VsZiwgdGFnPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgYW5kIHJldHVybiB0cmVlIGl0ZXJhdG9yIGZvciB0aGUgcm9vdCBlbGVtZW50LgorCisgICAgICAgIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGlzIHRyZWUsIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICp0YWcqIGlzIGEgc3RyaW5nIHdpdGggdGhlIHRhZyBuYW1lIHRvIGl0ZXJhdGUgb3ZlcgorICAgICAgICAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKS4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5pdGVyKHRhZykKIApAQCAtNjkxLDE1ICs2MzAsMTcgQEAKICAgICAgICAgKQogICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXIodGFnKSkKIAotICAgICMjCi0gICAgIyBTYW1lIGFzIGdldHJvb3QoKS5maW5kKHBhdGgpLCBzdGFydGluZyBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQgb3IgTm9uZQotCiAgICAgZGVmIGZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgU2FtZSBhcyBnZXRyb290KCkuZmluZChwYXRoKSwgd2hpY2ggaXMgRWxlbWVudC5maW5kKCkKKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKQEAgLTcxMSwxOSArNjUyLDE3IEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5maW5kKHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgU2FtZSBhcyBnZXRyb290KCkuZmluZHRleHQocGF0aCksIHN0YXJ0aW5nIGF0IHRoZSByb290IG9mIHRoZSB0cmVlLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBwYXJhbSBkZWZhdWx0IFdoYXQgdG8gcmV0dXJuIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgZm91bmQuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgdGhlCi0gICAgIyAgICAgZGVmYXVsdCB2YWx1ZSBubyBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudAotICAgICMgICAgIGlzIGZvdW5kLCBidXQgaGFzIG5vIHRleHQgY29udGVudCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbgotICAgICMgICAgIGVtcHR5IHN0cmluZy4KLSAgICAjIEBkZWZyZXR1cm4gc3RyaW5nCi0KICAgICBkZWYgZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdD1Ob25lLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICBTYW1lIGFzIGdldHJvb3QoKS5maW5kdGV4dChwYXRoKSwgIHdoaWNoIGlzIEVsZW1lbnQuZmluZHRleHQoKQorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gIi4iICsgcGF0aApAQCAtNzM1LDE2ICs2NzQsMTcgQEAKICAgICAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmR0ZXh0KHBhdGgsIGRlZmF1bHQsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgU2FtZSBhcyBnZXRyb290KCkuZmluZGFsbChwYXRoKSwgc3RhcnRpbmcgYXQgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvciBpdGVyYXRvciBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKLSAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCi0KICAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cyBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmRhbGwocGF0aCksIHdoaWNoIGlzIEVsZW1lbnQuZmluZGFsbCgpLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiBsaXN0IGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCkBAIC03NTYsMTcgKzY5NiwxNyBAQAogICAgICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZGFsbChwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLml0ZXJmaW5kKHBhdGgpLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBvciBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKLSAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMgQGRlZnJldHVybiBhIGdlbmVyYXRlZCBzZXF1ZW5jZSBvZiBFbGVtZW50IGluc3RhbmNlcwotCiAgICAgZGVmIGl0ZXJmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgU2FtZSBhcyBnZXRyb290KCkuaXRlcmZpbmQocGF0aCksIHdoaWNoIGlzIGVsZW1lbnQuaXRlcmZpbmQoKQorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiBhbiBpdGVyYWJsZSB5aWVsZGluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKQEAgLTc3OCwyNiArNzE4LDM1IEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5pdGVyZmluZChwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIFdyaXRlcyB0aGUgZWxlbWVudCB0cmVlIHRvIGEgZmlsZSwgYXMgWE1MLgotICAgICMKLSAgICAjIEBkZWYgd3JpdGUoZmlsZSwgKipvcHRpb25zKQotICAgICMgQHBhcmFtIGZpbGUgQSBmaWxlIG5hbWUsIG9yIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciB3cml0aW5nLgotICAgICMgQHBhcmFtICoqb3B0aW9ucyBPcHRpb25zLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KLSAgICAjIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgotICAgICMgICAgIFVzZSAidW5pY29kZSIgdG8gcmV0dXJuIGEgVW5pY29kZSBzdHJpbmcuCi0gICAgIyBAa2V5cGFyYW0geG1sX2RlY2xhcmF0aW9uIENvbnRyb2xzIGlmIGFuIFhNTCBkZWNsYXJhdGlvbiBzaG91bGQKLSAgICAjICAgICBiZSBhZGRlZCB0byB0aGUgZmlsZS4gIFVzZSBGYWxzZSBmb3IgbmV2ZXIsIFRydWUgZm9yIGFsd2F5cywKLSAgICAjICAgICBOb25lIGZvciBvbmx5IGlmIG5vdCBVUy1BU0NJSSBvciBVVEYtOCBvciBVbmljb2RlLiAgTm9uZSBpcyBkZWZhdWx0LgotICAgICMgQGtleXBhcmFtIGRlZmF1bHRfbmFtZXNwYWNlIFNldHMgdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSAoZm9yICJ4bWxucyIpLgotICAgICMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKLSAgICAjICAgICAiYzE0biI7IGRlZmF1bHQgaXMgInhtbCIpLgotCiAgICAgZGVmIHdyaXRlKHNlbGYsIGZpbGVfb3JfZmlsZW5hbWUsCiAgICAgICAgICAgICAgIGVuY29kaW5nPU5vbmUsCiAgICAgICAgICAgICAgIHhtbF9kZWNsYXJhdGlvbj1Ob25lLAogICAgICAgICAgICAgICBkZWZhdWx0X25hbWVzcGFjZT1Ob25lLAotICAgICAgICAgICAgICBtZXRob2Q9Tm9uZSk6CisgICAgICAgICAgICAgIG1ldGhvZD1Ob25lLCAqLAorICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKToKKyAgICAgICAgIiIiV3JpdGUgZWxlbWVudCB0cmVlIHRvIGEgZmlsZSBhcyBYTUwuCisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICpmaWxlX29yX2ZpbGVuYW1lKiAtLSBmaWxlIG5hbWUgb3IgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHdyaXRpbmcKKworICAgICAgICAgICplbmNvZGluZyogLS0gdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdDogVVMtQVNDSUkpCisKKyAgICAgICAgICAqeG1sX2RlY2xhcmF0aW9uKiAtLSBib29sIGluZGljYXRpbmcgaWYgYW4gWE1MIGRlY2xhcmF0aW9uIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBvdXRwdXQuIElmIE5vbmUsIGFuIFhNTCBkZWNsYXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFkZGVkIGlmIGVuY29kaW5nIElTIE5PVCBlaXRoZXIgb2Y6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVMtQVNDSUksIFVURi04LCBvciBVbmljb2RlCisKKyAgICAgICAgICAqZGVmYXVsdF9uYW1lc3BhY2UqIC0tIHNldHMgdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSAoZm9yICJ4bWxucyIpCisKKyAgICAgICAgICAqbWV0aG9kKiAtLSBlaXRoZXIgInhtbCIgKGRlZmF1bHQpLCAiaHRtbCwgInRleHQiLCBvciAiYzE0biIKKworICAgICAgICAgICpzaG9ydF9lbXB0eV9lbGVtZW50cyogLS0gY29udHJvbHMgdGhlIGZvcm1hdHRpbmcgb2YgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbiBubyBjb250ZW50LiBJZiBUcnVlIChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhleSBhcmUgZW1pdHRlZCBhcyBhIHNpbmdsZSBzZWxmLWNsb3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnLCBvdGhlcndpc2UgdGhleSBhcmUgZW1pdHRlZCBhcyBhIHBhaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHN0YXJ0L2VuZCB0YWdzCisKKyAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBtZXRob2Q6CiAgICAgICAgICAgICBtZXRob2QgPSAieG1sIgogICAgICAgICBlbGlmIG1ldGhvZCBub3QgaW4gX3NlcmlhbGl6ZToKQEAgLTgyNSw3ICs3NzQsOCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBxbmFtZXMsIG5hbWVzcGFjZXMgPSBfbmFtZXNwYWNlcyhzZWxmLl9yb290LCBkZWZhdWx0X25hbWVzcGFjZSkKICAgICAgICAgICAgICAgICBzZXJpYWxpemUgPSBfc2VyaWFsaXplW21ldGhvZF0KLSAgICAgICAgICAgICAgICBzZXJpYWxpemUod3JpdGUsIHNlbGYuX3Jvb3QsIHFuYW1lcywgbmFtZXNwYWNlcykKKyAgICAgICAgICAgICAgICBzZXJpYWxpemUod3JpdGUsIHNlbGYuX3Jvb3QsIHFuYW1lcywgbmFtZXNwYWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAKICAgICBkZWYgd3JpdGVfYzE0bihzZWxmLCBmaWxlKToKICAgICAgICAgIyBseG1sLmV0cmVlIGNvbXBhdGliaWxpdHkuICB1c2Ugb3V0cHV0IG1ldGhvZCBpbnN0ZWFkCkBAIC05NDcsNyArODk3LDggQEAKICAgICAgICAgICAgIGFkZF9xbmFtZSh0ZXh0LnRleHQpCiAgICAgcmV0dXJuIHFuYW1lcywgbmFtZXNwYWNlcwogCi1kZWYgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcyk6CitkZWYgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcywKKyAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cywgKiprd2FyZ3MpOgogICAgIHRhZyA9IGVsZW0udGFnCiAgICAgdGV4dCA9IGVsZW0udGV4dAogICAgIGlmIHRhZyBpcyBDb21tZW50OgpAQCAtOTYwLDcgKzkxMSw4IEBACiAgICAgICAgICAgICBpZiB0ZXh0OgogICAgICAgICAgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEodGV4dCkpCiAgICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgotICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUpCisgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGUsIHFuYW1lcywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1zaG9ydF9lbXB0eV9lbGVtZW50cykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHdyaXRlKCI8IiArIHRhZykKICAgICAgICAgICAgIGl0ZW1zID0gbGlzdChlbGVtLml0ZW1zKCkpCkBAIC05ODIsMTIgKzkzNCwxMyBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgdiA9IF9lc2NhcGVfYXR0cmliKHYpCiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCIgJXM9XCIlc1wiIiAlIChxbmFtZXNba10sIHYpKQotICAgICAgICAgICAgaWYgdGV4dCBvciBsZW4oZWxlbSk6CisgICAgICAgICAgICBpZiB0ZXh0IG9yIGxlbihlbGVtKSBvciBub3Qgc2hvcnRfZW1wdHlfZWxlbWVudHM6CiAgICAgICAgICAgICAgICAgd3JpdGUoIj4iKQogICAgICAgICAgICAgICAgIGlmIHRleHQ6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEodGV4dCkpCiAgICAgICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKLSAgICAgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGUsIHFuYW1lcywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGUsIHFuYW1lcywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgICAgICAgICAgICAgd3JpdGUoIjwvIiArIHRhZyArICI+IikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgd3JpdGUoIiAvPiIpCkBAIC0xMDAyLDcgKzk1NSw3IEBACiBleGNlcHQgTmFtZUVycm9yOgogICAgIHBhc3MKIAotZGVmIF9zZXJpYWxpemVfaHRtbCh3cml0ZSwgZWxlbSwgcW5hbWVzLCBuYW1lc3BhY2VzKToKK2RlZiBfc2VyaWFsaXplX2h0bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcywgKiprd2FyZ3MpOgogICAgIHRhZyA9IGVsZW0udGFnCiAgICAgdGV4dCA9IGVsZW0udGV4dAogICAgIGlmIHRhZyBpcyBDb21tZW50OgpAQCAtMTA2NiwxOCArMTAxOSwxOSBAQAogIyAgICJjMTRuIjogX3NlcmlhbGl6ZV9jMTRuLAogfQogCi0jIwotIyBSZWdpc3RlcnMgYSBuYW1lc3BhY2UgcHJlZml4LiAgVGhlIHJlZ2lzdHJ5IGlzIGdsb2JhbCwgYW5kIGFueQotIyBleGlzdGluZyBtYXBwaW5nIGZvciBlaXRoZXIgdGhlIGdpdmVuIHByZWZpeCBvciB0aGUgbmFtZXNwYWNlIFVSSQotIyB3aWxsIGJlIHJlbW92ZWQuCi0jCi0jIEBwYXJhbSBwcmVmaXggTmFtZXNwYWNlIHByZWZpeC4KLSMgQHBhcmFtIHVyaSBOYW1lc3BhY2UgdXJpLiAgVGFncyBhbmQgYXR0cmlidXRlcyBpbiB0aGlzIG5hbWVzcGFjZQotIyAgICAgd2lsbCBiZSBzZXJpYWxpemVkIHdpdGggdGhlIGdpdmVuIHByZWZpeCwgaWYgYXQgYWxsIHBvc3NpYmxlLgotIyBAZXhjZXB0aW9uIFZhbHVlRXJyb3IgSWYgdGhlIHByZWZpeCBpcyByZXNlcnZlZCwgb3IgaXMgb3RoZXJ3aXNlCi0jICAgICBpbnZhbGlkLgogCiBkZWYgcmVnaXN0ZXJfbmFtZXNwYWNlKHByZWZpeCwgdXJpKToKKyAgICAiIiJSZWdpc3RlciBhIG5hbWVzcGFjZSBwcmVmaXguCisKKyAgICBUaGUgcmVnaXN0cnkgaXMgZ2xvYmFsLCBhbmQgYW55IGV4aXN0aW5nIG1hcHBpbmcgZm9yIGVpdGhlciB0aGUKKyAgICBnaXZlbiBwcmVmaXggb3IgdGhlIG5hbWVzcGFjZSBVUkkgd2lsbCBiZSByZW1vdmVkLgorCisgICAgKnByZWZpeCogaXMgdGhlIG5hbWVzcGFjZSBwcmVmaXgsICp1cmkqIGlzIGEgbmFtZXNwYWNlIHVyaS4gVGFncyBhbmQKKyAgICBhdHRyaWJ1dGVzIGluIHRoaXMgbmFtZXNwYWNlIHdpbGwgYmUgc2VyaWFsaXplZCB3aXRoIHByZWZpeCBpZiBwb3NzaWJsZS4KKworICAgIFZhbHVlRXJyb3IgaXMgcmFpc2VkIGlmIHByZWZpeCBpcyByZXNlcnZlZCBvciBpcyBpbnZhbGlkLgorCisgICAgIiIiCiAgICAgaWYgcmUubWF0Y2goIm5zXGQrJCIsIHByZWZpeCk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByZWZpeCBmb3JtYXQgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSIpCiAgICAgZm9yIGssIHYgaW4gbGlzdChfbmFtZXNwYWNlX21hcC5pdGVtcygpKToKQEAgLTExNTMsNDAgKzExMDcsMjcgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIwotIyBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKLSMgc3ViZWxlbWVudHMuICBJZiBlbmNvZGluZyBpcyAidW5pY29kZSIsIHRoZSByZXR1cm4gdHlwZSBpcyBhIHN0cmluZzsKLSMgb3RoZXJ3aXNlIGl0IGlzIGEgYnl0ZXMgYXJyYXkuCi0jCi0jIEBwYXJhbSBlbGVtZW50IEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgotIyAgICAgVXNlICJ1bmljb2RlIiB0byByZXR1cm4gYSBVbmljb2RlIHN0cmluZy4KLSMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKLSMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCi0jIEByZXR1cm4gQW4gKG9wdGlvbmFsbHkpIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgotIyBAZGVmcmV0dXJuIHN0cmluZworZGVmIHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lLCAqLAorICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpOgorICAgICIiIkdlbmVyYXRlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBYTUwgZWxlbWVudC4KIAotZGVmIHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lKToKKyAgICBBbGwgc3ViZWxlbWVudHMgYXJlIGluY2x1ZGVkLiAgSWYgZW5jb2RpbmcgaXMgInVuaWNvZGUiLCBhIHN0cmluZworICAgIGlzIHJldHVybmVkLiBPdGhlcndpc2UgYSBieXRlc3RyaW5nIGlzIHJldHVybmVkLgorCisgICAgKmVsZW1lbnQqIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UsICplbmNvZGluZyogaXMgYW4gb3B0aW9uYWwgb3V0cHV0CisgICAgZW5jb2RpbmcgZGVmYXVsdGluZyB0byBVUy1BU0NJSSwgKm1ldGhvZCogaXMgYW4gb3B0aW9uYWwgb3V0cHV0IHdoaWNoIGNhbgorICAgIGJlIG9uZSBvZiAieG1sIiAoZGVmYXVsdCksICJodG1sIiwgInRleHQiIG9yICJjMTRuIi4KKworICAgIFJldHVybnMgYW4gKG9wdGlvbmFsbHkpIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgorCisgICAgIiIiCiAgICAgc3RyZWFtID0gaW8uU3RyaW5nSU8oKSBpZiBlbmNvZGluZyA9PSAndW5pY29kZScgZWxzZSBpby5CeXRlc0lPKCkKLSAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kKQorICAgIEVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN0cmVhbSwgZW5jb2RpbmcsIG1ldGhvZD1tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgcmV0dXJuIHN0cmVhbS5nZXR2YWx1ZSgpCiAKLSMjCi0jIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAotIyBzdWJlbGVtZW50cy4KLSMKLSMgQHBhcmFtIGVsZW1lbnQgQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGtleXBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuCi0jICAgICBVc2UgInVuaWNvZGUiIHRvIHJldHVybiBhIFVuaWNvZGUgc3RyaW5nLgotIyBAa2V5cGFyYW0gbWV0aG9kIE9wdGlvbmFsIG91dHB1dCBtZXRob2QgKCJ4bWwiLCAiaHRtbCIsICJ0ZXh0IiBvcgotIyAgICAgImMxNG4iOyBkZWZhdWx0IGlzICJ4bWwiKS4KLSMgQHJldHVybiBBIHNlcXVlbmNlIG9iamVjdCBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KLSMgQGRlZnJldHVybiBzZXF1ZW5jZQotIyBAc2luY2UgMS4zCi0KIGNsYXNzIF9MaXN0RGF0YVN0cmVhbShpby5CdWZmZXJlZElPQmFzZSk6Ci0gICAgIiIiIEFuIGF1eGlsaWFyeSBzdHJlYW0gYWNjdW11bGF0aW5nIGludG8gYSBsaXN0IHJlZmVyZW5jZQotICAgICIiIgorICAgICIiIkFuIGF1eGlsaWFyeSBzdHJlYW0gYWNjdW11bGF0aW5nIGludG8gYSBsaXN0IHJlZmVyZW5jZS4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbHN0KToKICAgICAgICAgc2VsZi5sc3QgPSBsc3QKIApAQCAtMTIwMiwyMiArMTE0MywyNSBAQAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICByZXR1cm4gbGVuKHNlbGYubHN0KQogCi1kZWYgdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lKToKK2RlZiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9Tm9uZSwgbWV0aG9kPU5vbmUsICosCisgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpOgogICAgIGxzdCA9IFtdCiAgICAgc3RyZWFtID0gX0xpc3REYXRhU3RyZWFtKGxzdCkKLSAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kKQorICAgIEVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN0cmVhbSwgZW5jb2RpbmcsIG1ldGhvZD1tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgcmV0dXJuIGxzdAogCi0jIwotIyBXcml0ZXMgYW4gZWxlbWVudCB0cmVlIG9yIGVsZW1lbnQgc3RydWN0dXJlIHRvIHN5cy5zdGRvdXQuICBUaGlzCi0jIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seS4KLSMgPHA+Ci0jIFRoZSBleGFjdCBvdXRwdXQgZm9ybWF0IGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIEluIHRoaXMKLSMgdmVyc2lvbiwgaXQncyB3cml0dGVuIGFzIGFuIG9yZGluYXJ5IFhNTCBmaWxlLgotIwotIyBAcGFyYW0gZWxlbSBBbiBlbGVtZW50IHRyZWUgb3IgYW4gaW5kaXZpZHVhbCBlbGVtZW50LgogCiBkZWYgZHVtcChlbGVtKToKKyAgICAiIiJXcml0ZSBlbGVtZW50IHRyZWUgb3IgZWxlbWVudCBzdHJ1Y3R1cmUgdG8gc3lzLnN0ZG91dC4KKworICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgorCisgICAgKmVsZW0qIGlzIGVpdGhlciBhbiBFbGVtZW50VHJlZSwgb3IgYSBzaW5nbGUgRWxlbWVudC4gIFRoZSBleGFjdCBvdXRwdXQKKyAgICBmb3JtYXQgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LiAgSW4gdGhpcyB2ZXJzaW9uLCBpdCdzIHdyaXR0ZW4gYXMgYW4KKyAgICBvcmRpbmFyeSBYTUwgZmlsZS4KKworICAgICIiIgogICAgICMgZGVidWdnaW5nCiAgICAgaWYgbm90IGlzaW5zdGFuY2UoZWxlbSwgRWxlbWVudFRyZWUpOgogICAgICAgICBlbGVtID0gRWxlbWVudFRyZWUoZWxlbSkKQEAgLTEyMjksMTQ0ICsxMTczLDE2OSBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBwYXJzaW5nCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgaW50byBhbiBlbGVtZW50IHRyZWUuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBbiBFbGVtZW50VHJlZSBpbnN0YW5jZQogCiBkZWYgcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiUGFyc2UgWE1MIGRvY3VtZW50IGludG8gZWxlbWVudCB0cmVlLgorCisgICAgKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLAorICAgICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZSBkZWZhdWx0aW5nIHRvIFhNTFBhcnNlci4KKworICAgIFJldHVybiBhbiBFbGVtZW50VHJlZSBpbnN0YW5jZS4KKworICAgICIiIgogICAgIHRyZWUgPSBFbGVtZW50VHJlZSgpCiAgICAgdHJlZS5wYXJzZShzb3VyY2UsIHBhcnNlcikKICAgICByZXR1cm4gdHJlZQogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHksIGFuZCByZXBvcnRzCi0jIHdoYXQncyBnb2luZyBvbiB0byB0aGUgdXNlci4KLSMKLSMgQHBhcmFtIHNvdXJjZSBBIGZpbGVuYW1lIG9yIGZpbGUgb2JqZWN0IGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEBwYXJhbSBldmVudHMgQSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIElmIG9taXR0ZWQsIG9ubHkgImVuZCIKLSMgICAgIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEEgKGV2ZW50LCBlbGVtKSBpdGVyYXRvci4KIAogZGVmIGl0ZXJwYXJzZShzb3VyY2UsIGV2ZW50cz1Ob25lLCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiSW5jcmVtZW50YWxseSBwYXJzZSBYTUwgZG9jdW1lbnQgaW50byBFbGVtZW50VHJlZS4KKworICAgIFRoaXMgY2xhc3MgYWxzbyByZXBvcnRzIHdoYXQncyBnb2luZyBvbiB0byB0aGUgdXNlciBiYXNlZCBvbiB0aGUKKyAgICAqZXZlbnRzKiBpdCBpcyBpbml0aWFsaXplZCB3aXRoLiAgVGhlIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzCisgICAgInN0YXJ0IiwgImVuZCIsICJzdGFydC1ucyIgYW5kICJlbmQtbnMiICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0CisgICAgZGV0YWlsZWQgbmFtZXNwYWNlIGluZm9ybWF0aW9uKS4gIElmICpldmVudHMqIGlzIG9taXR0ZWQsIG9ubHkKKyAgICAiZW5kIiBldmVudHMgYXJlIHJlcG9ydGVkLgorCisgICAgKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLCAqZXZlbnRzKiBpcworICAgIGEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2ssICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4KKworICAgIFJldHVybnMgYW4gaXRlcmF0b3IgcHJvdmlkaW5nIChldmVudCwgZWxlbSkgcGFpcnMuCisKKyAgICAiIiIKICAgICBjbG9zZV9zb3VyY2UgPSBGYWxzZQogICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgInJlYWQiKToKICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICJyYiIpCiAgICAgICAgIGNsb3NlX3NvdXJjZSA9IFRydWUKLSAgICBpZiBub3QgcGFyc2VyOgotICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgcmV0dXJuIF9JdGVyUGFyc2VJdGVyYXRvcihzb3VyY2UsIGV2ZW50cywgcGFyc2VyLCBjbG9zZV9zb3VyY2UpCiAKKworY2xhc3MgWE1MUHVsbFBhcnNlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudHM9Tm9uZSwgKiwgX3BhcnNlcj1Ob25lKToKKyAgICAgICAgIyBUaGUgX3BhcnNlciBhcmd1bWVudCBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIG11c3Qgbm90IGJlIHJlbGllZAorICAgICAgICAjIHVwb24gaW4gdXNlciBjb2RlLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3NzQxIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgIyBfZWxlbWVudHRyZWUuYyBleHBlY3RzIGEgbGlzdCwgbm90IGEgZGVxdWUKKyAgICAgICAgc2VsZi5fZXZlbnRzX3F1ZXVlID0gW10KKyAgICAgICAgc2VsZi5faW5kZXggPSAwCisgICAgICAgIHNlbGYuX3BhcnNlciA9IF9wYXJzZXIgb3IgWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQorICAgICAgICAjIHdpcmUgdXAgdGhlIHBhcnNlciBmb3IgZXZlbnQgcmVwb3J0aW5nCisgICAgICAgIGlmIGV2ZW50cyBpcyBOb25lOgorICAgICAgICAgICAgZXZlbnRzID0gKCJlbmQiLCkKKyAgICAgICAgc2VsZi5fcGFyc2VyLl9zZXRldmVudHMoc2VsZi5fZXZlbnRzX3F1ZXVlLCBldmVudHMpCisKKyAgICBkZWYgZmVlZChzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiRmVlZCBlbmNvZGVkIGRhdGEgdG8gcGFyc2VyLiIiIgorICAgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZlZWQoKSBjYWxsZWQgYWZ0ZXIgZW5kIG9mIHN0cmVhbSIpCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fZXZlbnRzX3F1ZXVlLmFwcGVuZChleGMpCisKKyAgICBkZWYgX2Nsb3NlX2FuZF9yZXR1cm5fcm9vdChzZWxmKToKKyAgICAgICAgIyBpdGVycGFyc2UgbmVlZHMgdGhpcyB0byBzZXQgaXRzIHJvb3QgYXR0cmlidXRlIHByb3Blcmx5IDooCisgICAgICAgIHJvb3QgPSBzZWxmLl9wYXJzZXIuY2xvc2UoKQorICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCisgICAgICAgIHJldHVybiByb290CisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkZpbmlzaCBmZWVkaW5nIGRhdGEgdG8gcGFyc2VyLgorCisgICAgICAgIFVubGlrZSBYTUxQYXJzZXIsIGRvZXMgbm90IHJldHVybiB0aGUgcm9vdCBlbGVtZW50LiBVc2UKKyAgICAgICAgcmVhZF9ldmVudHMoKSB0byBjb25zdW1lIGVsZW1lbnRzIGZyb20gWE1MUHVsbFBhcnNlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2Nsb3NlX2FuZF9yZXR1cm5fcm9vdCgpCisKKyAgICBkZWYgcmVhZF9ldmVudHMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIGN1cnJlbnRseSBhdmFpbGFibGUgKGV2ZW50LCBlbGVtKSBwYWlycy4KKworICAgICAgICBFdmVudHMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIGludGVybmFsIGV2ZW50IHF1ZXVlIGFzIHRoZXkgYXJlCisgICAgICAgIHJldHJpZXZlZCBmcm9tIHRoZSBpdGVyYXRvci4KKyAgICAgICAgIiIiCisgICAgICAgIGV2ZW50cyA9IHNlbGYuX2V2ZW50c19xdWV1ZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLl9pbmRleAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRzW3NlbGYuX2luZGV4XQorICAgICAgICAgICAgICAgICMgQXZvaWQgcmV0YWluaW5nIHJlZmVyZW5jZXMgdG8gcGFzdCBldmVudHMKKyAgICAgICAgICAgICAgICBldmVudHNbc2VsZi5faW5kZXhdID0gTm9uZQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGluZGV4ICs9IDEKKyAgICAgICAgICAgICMgQ29tcGFjdCB0aGUgbGlzdCBpbiBhIE8oMSkgYW1vcnRpemVkIGZhc2hpb24KKyAgICAgICAgICAgICMgQXMgbm90ZWQgYWJvdmUsIF9lbGVtZW50cmVlLmMgbmVlZHMgYSBsaXN0LCBub3QgYSBkZXF1ZQorICAgICAgICAgICAgaWYgaW5kZXggKiAyID49IGxlbihldmVudHMpOgorICAgICAgICAgICAgICAgIGV2ZW50c1s6aW5kZXhdID0gW10KKyAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSBpbmRleAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICByYWlzZSBldmVudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBldmVudAorCisKIGNsYXNzIF9JdGVyUGFyc2VJdGVyYXRvcjoKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIGV2ZW50cywgcGFyc2VyLCBjbG9zZV9zb3VyY2U9RmFsc2UpOgorICAgICAgICAjIFVzZSB0aGUgaW50ZXJuYWwsIHVuZG9jdW1lbnRlZCBfcGFyc2VyIGFyZ3VtZW50IGZvciBub3c7IFdoZW4gdGhlCisgICAgICAgICMgcGFyc2VyIGFyZ3VtZW50IG9mIGl0ZXJwYXJzZSBpcyByZW1vdmVkLCB0aGlzIGNhbiBiZSBraWxsZWQuCisgICAgICAgIHNlbGYuX3BhcnNlciA9IFhNTFB1bGxQYXJzZXIoZXZlbnRzPWV2ZW50cywgX3BhcnNlcj1wYXJzZXIpCiAgICAgICAgIHNlbGYuX2ZpbGUgPSBzb3VyY2UKICAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSA9IGNsb3NlX3NvdXJjZQotICAgICAgICBzZWxmLl9ldmVudHMgPSBbXQotICAgICAgICBzZWxmLl9pbmRleCA9IDAKLSAgICAgICAgc2VsZi5fZXJyb3IgPSBOb25lCiAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QgPSBOb25lCi0gICAgICAgIHNlbGYuX3BhcnNlciA9IHBhcnNlcgotICAgICAgICAjIHdpcmUgdXAgdGhlIHBhcnNlciBmb3IgZXZlbnQgcmVwb3J0aW5nCi0gICAgICAgIHBhcnNlciA9IHNlbGYuX3BhcnNlci5fcGFyc2VyCi0gICAgICAgIGFwcGVuZCA9IHNlbGYuX2V2ZW50cy5hcHBlbmQKLSAgICAgICAgaWYgZXZlbnRzIGlzIE5vbmU6Ci0gICAgICAgICAgICBldmVudHMgPSBbImVuZCJdCi0gICAgICAgIGZvciBldmVudCBpbiBldmVudHM6Ci0gICAgICAgICAgICBpZiBldmVudCA9PSAic3RhcnQiOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQotICAgICAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGF0dHJpYl9pbiwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PXNlbGYuX3BhcnNlci5fc3RhcnRfbGlzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBzdGFydCh0YWcsIGF0dHJpYl9pbikpKQotICAgICAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgYXR0cmliX2luLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ9c2VsZi5fcGFyc2VyLl9zdGFydCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBzdGFydCh0YWcsIGF0dHJpYl9pbikpKQotICAgICAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gImVuZCI6Ci0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ9c2VsZi5fcGFyc2VyLl9lbmQpOgotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBlbmQodGFnKSkpCi0gICAgICAgICAgICAgICAgcGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgZWxpZiBldmVudCA9PSAic3RhcnQtbnMiOgotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgdXJpLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCk6Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIChwcmVmaXggb3IgIiIsIHVyaSBvciAiIikpKQotICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgZWxpZiBldmVudCA9PSAiZW5kLW5zIjoKLSAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kKToKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgTm9uZSkpCi0gICAgICAgICAgICAgICAgcGFyc2VyLkVuZE5hbWVzcGFjZURlY2xIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGV2ZW50ICVyIiAlIGV2ZW50KQogCiAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGl0ZW0gPSBzZWxmLl9ldmVudHNbc2VsZi5faW5kZXhdCi0gICAgICAgICAgICAgICAgc2VsZi5faW5kZXggKz0gMQotICAgICAgICAgICAgICAgIHJldHVybiBpdGVtCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBpZiBzZWxmLl9lcnJvcjoKLSAgICAgICAgICAgICAgICBlID0gc2VsZi5fZXJyb3IKLSAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IE5vbmUKLSAgICAgICAgICAgICAgICByYWlzZSBlCi0gICAgICAgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBzZWxmLl9wYXJzZXIucmVhZF9ldmVudHMoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQKKyAgICAgICAgICAgIGlmIHNlbGYuX3BhcnNlci5fcGFyc2VyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdAogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlX2ZpbGU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KICAgICAgICAgICAgICMgbG9hZCBldmVudCBidWZmZXIKLSAgICAgICAgICAgIGRlbCBzZWxmLl9ldmVudHNbOl0KLSAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gMAotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2ZpbGUucmVhZCgxNjM4NCkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9maWxlLnJlYWQoMTYgKiAxMDI0KQogICAgICAgICAgICAgaWYgZGF0YToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBleGMKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIuZmVlZChkYXRhKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gc2VsZi5fcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHNlbGYuX3BhcnNlci5fY2xvc2VfYW5kX3JldHVybl9yb290KCkKIAogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LiAgVGhpcyBmdW5jdGlvbiBjYW4KLSMgYmUgdXNlZCB0byBlbWJlZCAiWE1MIGxpdGVyYWxzIiBpbiBQeXRob24gY29kZS4KLSMKLSMgQHBhcmFtIHNvdXJjZSBBIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAogZGVmIFhNTCh0ZXh0LCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiUGFyc2UgWE1MIGRvY3VtZW50IGZyb20gc3RyaW5nIGNvbnN0YW50LgorCisgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBlbWJlZCAiWE1MIExpdGVyYWxzIiBpbiBQeXRob24gY29kZS4KKworICAgICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLCAqcGFyc2VyKiBpcyBhbgorICAgIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZSwgZGVmYXVsdGluZyB0byB0aGUgc3RhbmRhcmQgWE1MUGFyc2VyLgorCisgICAgUmV0dXJucyBhbiBFbGVtZW50IGluc3RhbmNlLgorCisgICAgIiIiCiAgICAgaWYgbm90IHBhcnNlcjoKICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIHBhcnNlci5mZWVkKHRleHQpCiAgICAgcmV0dXJuIHBhcnNlci5jbG9zZSgpCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHN0cmluZyBjb25zdGFudCwgYW5kIGFsc28gcmV0dXJucwotIyBhIGRpY3Rpb25hcnkgd2hpY2ggbWFwcyBmcm9tIGVsZW1lbnQgaWQ6cyB0byBlbGVtZW50cy4KLSMKLSMgQHBhcmFtIHNvdXJjZSBBIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgYW4gRWxlbWVudCBpbnN0YW5jZSBhbmQgYSBkaWN0aW9uYXJ5LgotIyBAZGVmcmV0dXJuIChFbGVtZW50LCBkaWN0aW9uYXJ5KQogCiBkZWYgWE1MSUQodGV4dCwgcGFyc2VyPU5vbmUpOgorICAgICIiIlBhcnNlIFhNTCBkb2N1bWVudCBmcm9tIHN0cmluZyBjb25zdGFudCBmb3IgaXRzIElEcy4KKworICAgICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLCAqcGFyc2VyKiBpcyBhbgorICAgIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZSwgZGVmYXVsdGluZyB0byB0aGUgc3RhbmRhcmQgWE1MUGFyc2VyLgorCisgICAgUmV0dXJucyBhbiAoRWxlbWVudCwgZGljdCkgdHVwbGUsIGluIHdoaWNoIHRoZQorICAgIGRpY3QgbWFwcyBlbGVtZW50IGlkOnMgdG8gZWxlbWVudHMuCisKKyAgICAiIiIKICAgICBpZiBub3QgcGFyc2VyOgogICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgcGFyc2VyLmZlZWQodGV4dCkKQEAgLTEzNzgsMjcgKzEzNDcsMTggQEAKICAgICAgICAgICAgIGlkc1tpZF0gPSBlbGVtCiAgICAgcmV0dXJuIHRyZWUsIGlkcwogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgY29uc3RhbnQuICBTYW1lIGFzIHtAbGluayAjWE1MfS4KLSMKLSMgQGRlZiBmcm9tc3RyaW5nKHRleHQpCi0jIEBwYXJhbSBzb3VyY2UgQSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQorIyBQYXJzZSBYTUwgZG9jdW1lbnQgZnJvbSBzdHJpbmcgY29uc3RhbnQuICBBbGlhcyBmb3IgWE1MKCkuCiBmcm9tc3RyaW5nID0gWE1MCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHNlcXVlbmNlIG9mIHN0cmluZyBmcmFnbWVudHMuCi0jCi0jIEBwYXJhbSBzZXF1ZW5jZSBBIGxpc3Qgb3Igb3RoZXIgc2VxdWVuY2UgY29udGFpbmluZyBYTUwgZGF0YSBmcmFnbWVudHMuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAotIyBAc2luY2UgMS4zCi0KIGRlZiBmcm9tc3RyaW5nbGlzdChzZXF1ZW5jZSwgcGFyc2VyPU5vbmUpOgorICAgICIiIlBhcnNlIFhNTCBkb2N1bWVudCBmcm9tIHNlcXVlbmNlIG9mIHN0cmluZyBmcmFnbWVudHMuCisKKyAgICAqc2VxdWVuY2UqIGlzIGEgbGlzdCBvZiBvdGhlciBzZXF1ZW5jZSwgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyCisgICAgaW5zdGFuY2UsIGRlZmF1bHRpbmcgdG8gdGhlIHN0YW5kYXJkIFhNTFBhcnNlci4KKworICAgIFJldHVybnMgYW4gRWxlbWVudCBpbnN0YW5jZS4KKworICAgICIiIgogICAgIGlmIG5vdCBwYXJzZXI6CiAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICBmb3IgdGV4dCBpbiBzZXF1ZW5jZToKQEAgLTE0MDcsMTkgKzEzNjcsMjAgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIwotIyBHZW5lcmljIGVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIuICBUaGlzIGJ1aWxkZXIgY29udmVydHMgYSBzZXF1ZW5jZQotIyBvZiB7QGxpbmsgI1RyZWVCdWlsZGVyLnN0YXJ0fSwge0BsaW5rICNUcmVlQnVpbGRlci5kYXRhfSwgYW5kIHtAbGluawotIyAjVHJlZUJ1aWxkZXIuZW5kfSBtZXRob2QgY2FsbHMgdG8gYSB3ZWxsLWZvcm1lZCBlbGVtZW50IHN0cnVjdHVyZS4KLSMgPHA+Ci0jIFlvdSBjYW4gdXNlIHRoaXMgY2xhc3MgdG8gYnVpbGQgYW4gZWxlbWVudCBzdHJ1Y3R1cmUgdXNpbmcgYSBjdXN0b20gWE1MCi0jIHBhcnNlciwgb3IgYSBwYXJzZXIgZm9yIHNvbWUgb3RoZXIgWE1MLWxpa2UgZm9ybWF0LgotIwotIyBAcGFyYW0gZWxlbWVudF9mYWN0b3J5IE9wdGlvbmFsIGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeQotIyAgICBpcyBjYWxsZWQgdG8gY3JlYXRlIG5ldyBFbGVtZW50IGluc3RhbmNlcywgYXMgbmVjZXNzYXJ5LgogCiBjbGFzcyBUcmVlQnVpbGRlcjoKKyAgICAiIiJHZW5lcmljIGVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIuCiAKKyAgICBUaGlzIGJ1aWxkZXIgY29udmVydHMgYSBzZXF1ZW5jZSBvZiBzdGFydCwgZGF0YSwgYW5kIGVuZCBtZXRob2QKKyAgICBjYWxscyB0byBhIHdlbGwtZm9ybWVkIGVsZW1lbnQgc3RydWN0dXJlLgorCisgICAgWW91IGNhbiB1c2UgdGhpcyBjbGFzcyB0byBidWlsZCBhbiBlbGVtZW50IHN0cnVjdHVyZSB1c2luZyBhIGN1c3RvbSBYTUwKKyAgICBwYXJzZXIsIG9yIGEgcGFyc2VyIGZvciBzb21lIG90aGVyIFhNTC1saWtlIGZvcm1hdC4KKworICAgICplbGVtZW50X2ZhY3RvcnkqIGlzIGFuIG9wdGlvbmFsIGVsZW1lbnQgZmFjdG9yeSB3aGljaCBpcyBjYWxsZWQKKyAgICB0byBjcmVhdGUgbmV3IEVsZW1lbnQgaW5zdGFuY2VzLCBhcyBuZWNlc3NhcnkuCisKKyAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudF9mYWN0b3J5PU5vbmUpOgogICAgICAgICBzZWxmLl9kYXRhID0gW10gIyBkYXRhIGNvbGxlY3RvcgogICAgICAgICBzZWxmLl9lbGVtID0gW10gIyBlbGVtZW50IHN0YWNrCkBAIC0xNDI5LDE0ICsxMzkwLDggQEAKICAgICAgICAgICAgIGVsZW1lbnRfZmFjdG9yeSA9IEVsZW1lbnQKICAgICAgICAgc2VsZi5fZmFjdG9yeSA9IGVsZW1lbnRfZmFjdG9yeQogCi0gICAgIyMKLSAgICAjIEZsdXNoZXMgdGhlIGJ1aWxkZXIgYnVmZmVycywgYW5kIHJldHVybnMgdGhlIHRvcGxldmVsIGRvY3VtZW50Ci0gICAgIyBlbGVtZW50LgotICAgICMKLSAgICAjIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJGbHVzaCBidWlsZGVyIGJ1ZmZlcnMgYW5kIHJldHVybiB0b3BsZXZlbCBkb2N1bWVudCBFbGVtZW50LiIiIgogICAgICAgICBhc3NlcnQgbGVuKHNlbGYuX2VsZW0pID09IDAsICJtaXNzaW5nIGVuZCB0YWdzIgogICAgICAgICBhc3NlcnQgc2VsZi5fbGFzdCBpcyBub3QgTm9uZSwgIm1pc3NpbmcgdG9wbGV2ZWwgZWxlbWVudCIKICAgICAgICAgcmV0dXJuIHNlbGYuX2xhc3QKQEAgLTE0NTMsMjQgKzE0MDgsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGFzdC50ZXh0ID0gdGV4dAogICAgICAgICAgICAgc2VsZi5fZGF0YSA9IFtdCiAKLSAgICAjIwotICAgICMgQWRkcyB0ZXh0IHRvIHRoZSBjdXJyZW50IGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIGRhdGEgQSBzdHJpbmcuICBUaGlzIHNob3VsZCBiZSBlaXRoZXIgYW4gOC1iaXQgc3RyaW5nCi0gICAgIyAgICBjb250YWluaW5nIEFTQ0lJIHRleHQsIG9yIGEgVW5pY29kZSBzdHJpbmcuCi0KICAgICBkZWYgZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiQWRkIHRleHQgdG8gY3VycmVudCBlbGVtZW50LiIiIgogICAgICAgICBzZWxmLl9kYXRhLmFwcGVuZChkYXRhKQogCi0gICAgIyMKLSAgICAjIE9wZW5zIGEgbmV3IGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIHRhZyBUaGUgZWxlbWVudCBuYW1lLgotICAgICMgQHBhcmFtIGF0dHJpYiBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuCi0gICAgIyBAcmV0dXJuIFRoZSBvcGVuZWQgZWxlbWVudC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIHN0YXJ0KHNlbGYsIHRhZywgYXR0cnMpOgorICAgICAgICAiIiJPcGVuIG5ldyBlbGVtZW50IGFuZCByZXR1cm4gaXQuCisKKyAgICAgICAgKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZSwgKmF0dHJzKiBpcyBhIGRpY3QgY29udGFpbmluZyBlbGVtZW50CisgICAgICAgIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2ZsdXNoKCkKICAgICAgICAgc2VsZi5fbGFzdCA9IGVsZW0gPSBzZWxmLl9mYWN0b3J5KHRhZywgYXR0cnMpCiAgICAgICAgIGlmIHNlbGYuX2VsZW06CkBAIC0xNDc5LDE0ICsxNDI3LDEyIEBACiAgICAgICAgIHNlbGYuX3RhaWwgPSAwCiAgICAgICAgIHJldHVybiBlbGVtCiAKLSAgICAjIwotICAgICMgQ2xvc2VzIHRoZSBjdXJyZW50IGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIHRhZyBUaGUgZWxlbWVudCBuYW1lLgotICAgICMgQHJldHVybiBUaGUgY2xvc2VkIGVsZW1lbnQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBlbmQoc2VsZiwgdGFnKToKKyAgICAgICAgIiIiQ2xvc2UgYW5kIHJldHVybiBjdXJyZW50IEVsZW1lbnQuCisKKyAgICAgICAgKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZS4KKworICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZmx1c2goKQogICAgICAgICBzZWxmLl9sYXN0ID0gc2VsZi5fZWxlbS5wb3AoKQogICAgICAgICBhc3NlcnQgc2VsZi5fbGFzdC50YWcgPT0gdGFnLFwKQEAgLTE0OTUsMjAgKzE0NDEsMTggQEAKICAgICAgICAgc2VsZi5fdGFpbCA9IDEKICAgICAgICAgcmV0dXJuIHNlbGYuX2xhc3QKIAotIyMKLSMgRWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlciBmb3IgWE1MIHNvdXJjZSBkYXRhLCBiYXNlZCBvbiB0aGUKLSMgPGI+ZXhwYXQ8L2I+IHBhcnNlci4KLSMKLSMgQGtleXBhcmFtIHRhcmdldCBUYXJnZXQgb2JqZWN0LiAgSWYgb21pdHRlZCwgdGhlIGJ1aWxkZXIgdXNlcyBhbgotIyAgICAgaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIHtAbGluayAjVHJlZUJ1aWxkZXJ9IGNsYXNzLgotIyBAa2V5cGFyYW0gaHRtbCBQcmVkZWZpbmUgSFRNTCBlbnRpdGllcy4gIFRoaXMgZmxhZyBpcyBub3Qgc3VwcG9ydGVkCi0jICAgICBieSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KLSMgQGtleXBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIGVuY29kaW5nLiAgSWYgZ2l2ZW4sIHRoZSB2YWx1ZSBvdmVycmlkZXMKLSMgICAgIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhlIFhNTCBmaWxlLgotIyBAc2VlICNFbGVtZW50VHJlZQotIyBAc2VlICNUcmVlQnVpbGRlcgogCisjIGFsc28gc2VlIEVsZW1lbnRUcmVlIGFuZCBUcmVlQnVpbGRlcgogY2xhc3MgWE1MUGFyc2VyOgorICAgICIiIkVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIgZm9yIFhNTCBzb3VyY2UgZGF0YSBiYXNlZCBvbiB0aGUgZXhwYXQgcGFyc2VyLgorCisgICAgKmh0bWwqIGFyZSBwcmVkZWZpbmVkIEhUTUwgZW50aXRpZXMgKG5vdCBzdXBwb3J0ZWQgY3VycmVudGx5KSwKKyAgICAqdGFyZ2V0KiBpcyBhbiBvcHRpb25hbCB0YXJnZXQgb2JqZWN0IHdoaWNoIGRlZmF1bHRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZQorICAgIHN0YW5kYXJkIFRyZWVCdWlsZGVyIGNsYXNzLCAqZW5jb2RpbmcqIGlzIGFuIG9wdGlvbmFsIGVuY29kaW5nIHN0cmluZworICAgIHdoaWNoIGlmIGdpdmVuLCBvdmVycmlkZXMgdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgWE1MIGZpbGU6CisgICAgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cworCisgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaHRtbD0wLCB0YXJnZXQ9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSk6CiAgICAgICAgIHRyeToKQEAgLTE1NDEsMTkgKzE0ODUsMTAgQEAKICAgICAgICAgICAgIHBhcnNlci5Db21tZW50SGFuZGxlciA9IHRhcmdldC5jb21tZW50CiAgICAgICAgIGlmIGhhc2F0dHIodGFyZ2V0LCAncGknKToKICAgICAgICAgICAgIHBhcnNlci5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyID0gdGFyZ2V0LnBpCi0gICAgICAgICMgbGV0IGV4cGF0IGRvIHRoZSBidWZmZXJpbmcsIGlmIHN1cHBvcnRlZAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgIyB1c2UgbmV3LXN0eWxlIGF0dHJpYnV0ZSBoYW5kbGluZywgaWYgc3VwcG9ydGVkCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSAxCi0gICAgICAgICAgICBwYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMgPSAxCi0gICAgICAgICAgICBpZiBoYXNhdHRyKHRhcmdldCwgJ3N0YXJ0Jyk6Ci0gICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzZWxmLl9zdGFydF9saXN0Ci0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBDb25maWd1cmUgcHlleHBhdDogYnVmZmVyaW5nLCBuZXctc3R5bGUgYXR0cmlidXRlIGhhbmRsaW5nLgorICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCisgICAgICAgIHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSAxCisgICAgICAgIHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IDEKICAgICAgICAgc2VsZi5fZG9jdHlwZSA9IE5vbmUKICAgICAgICAgc2VsZi5lbnRpdHkgPSB7fQogICAgICAgICB0cnk6CkBAIC0xNTYxLDYgKzE0OTYsMzkgQEAKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcGFzcyAjIHVua25vd24KIAorICAgIGRlZiBfc2V0ZXZlbnRzKHNlbGYsIGV2ZW50c19xdWV1ZSwgZXZlbnRzX3RvX3JlcG9ydCk6CisgICAgICAgICMgSW50ZXJuYWwgQVBJIGZvciBYTUxQdWxsUGFyc2VyCisgICAgICAgICMgZXZlbnRzX3RvX3JlcG9ydDogYSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgZHVyaW5nIHBhcnNpbmcgKHNhbWUgYXMKKyAgICAgICAgIyB0aGUgKmV2ZW50cyogb2YgWE1MUHVsbFBhcnNlcidzIGNvbnN0cnVjdG9yLgorICAgICAgICAjIGV2ZW50c19xdWV1ZTogYSBsaXN0IG9mIGFjdHVhbCBwYXJzaW5nIGV2ZW50cyB0aGF0IHdpbGwgYmUgcG9wdWxhdGVkCisgICAgICAgICMgYnkgdGhlIHVuZGVybHlpbmcgcGFyc2VyLgorICAgICAgICAjCisgICAgICAgIHBhcnNlciA9IHNlbGYuX3BhcnNlcgorICAgICAgICBhcHBlbmQgPSBldmVudHNfcXVldWUuYXBwZW5kCisgICAgICAgIGZvciBldmVudF9uYW1lIGluIGV2ZW50c190b19yZXBvcnQ6CisgICAgICAgICAgICBpZiBldmVudF9uYW1lID09ICJzdGFydCI6CisgICAgICAgICAgICAgICAgcGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IDEKKyAgICAgICAgICAgICAgICBwYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMgPSAxCisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBhdHRyaWJfaW4sIGV2ZW50PWV2ZW50X25hbWUsIGFwcGVuZD1hcHBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ9c2VsZi5fc3RhcnQpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBzdGFydCh0YWcsIGF0dHJpYl9pbikpKQorICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgorICAgICAgICAgICAgZWxpZiBldmVudF9uYW1lID09ICJlbmQiOgorICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgZXZlbnQ9ZXZlbnRfbmFtZSwgYXBwZW5kPWFwcGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ9c2VsZi5fZW5kKToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgZW5kKHRhZykpKQorICAgICAgICAgICAgICAgIHBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsaWYgZXZlbnRfbmFtZSA9PSAic3RhcnQtbnMiOgorICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgdXJpLCBldmVudD1ldmVudF9uYW1lLCBhcHBlbmQ9YXBwZW5kKToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgKHByZWZpeCBvciAiIiwgdXJpIG9yICIiKSkpCisgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbGlmIGV2ZW50X25hbWUgPT0gImVuZC1ucyI6CisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCBldmVudD1ldmVudF9uYW1lLCBhcHBlbmQ9YXBwZW5kKToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgTm9uZSkpCisgICAgICAgICAgICAgICAgcGFyc2VyLkVuZE5hbWVzcGFjZURlY2xIYW5kbGVyID0gaGFuZGxlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGV2ZW50ICVyIiAlIGV2ZW50X25hbWUpCisKICAgICBkZWYgX3JhaXNlZXJyb3Ioc2VsZiwgdmFsdWUpOgogICAgICAgICBlcnIgPSBQYXJzZUVycm9yKHZhbHVlKQogICAgICAgICBlcnIuY29kZSA9IHZhbHVlLmNvZGUKQEAgLTE1NzgsMjEgKzE1NDYsMTYgQEAKICAgICAgICAgICAgIHNlbGYuX25hbWVzW2tleV0gPSBuYW1lCiAgICAgICAgIHJldHVybiBuYW1lCiAKLSAgICBkZWYgX3N0YXJ0KHNlbGYsIHRhZywgYXR0cmliX2luKToKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHRhZywgYXR0cl9saXN0KToKKyAgICAgICAgIyBIYW5kbGVyIGZvciBleHBhdCdzIFN0YXJ0RWxlbWVudEhhbmRsZXIuIFNpbmNlIG9yZGVyZWRfYXR0cmlidXRlcworICAgICAgICAjIGlzIHNldCwgdGhlIGF0dHJpYnV0ZXMgYXJlIHJlcG9ydGVkIGFzIGEgbGlzdCBvZiBhbHRlcm5hdGluZworICAgICAgICAjIGF0dHJpYnV0ZSBuYW1lLHZhbHVlLgogICAgICAgICBmaXhuYW1lID0gc2VsZi5fZml4bmFtZQogICAgICAgICB0YWcgPSBmaXhuYW1lKHRhZykKICAgICAgICAgYXR0cmliID0ge30KLSAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYXR0cmliX2luLml0ZW1zKCk6Ci0gICAgICAgICAgICBhdHRyaWJbZml4bmFtZShrZXkpXSA9IHZhbHVlCi0gICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5zdGFydCh0YWcsIGF0dHJpYikKLQotICAgIGRlZiBfc3RhcnRfbGlzdChzZWxmLCB0YWcsIGF0dHJpYl9pbik6Ci0gICAgICAgIGZpeG5hbWUgPSBzZWxmLl9maXhuYW1lCi0gICAgICAgIHRhZyA9IGZpeG5hbWUodGFnKQotICAgICAgICBhdHRyaWIgPSB7fQotICAgICAgICBpZiBhdHRyaWJfaW46Ci0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oYXR0cmliX2luKSwgMik6Ci0gICAgICAgICAgICAgICAgYXR0cmliW2ZpeG5hbWUoYXR0cmliX2luW2ldKV0gPSBhdHRyaWJfaW5baSsxXQorICAgICAgICBpZiBhdHRyX2xpc3Q6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oYXR0cl9saXN0KSwgMik6CisgICAgICAgICAgICAgICAgYXR0cmliW2ZpeG5hbWUoYXR0cl9saXN0W2ldKV0gPSBhdHRyX2xpc3RbaSsxXQogICAgICAgICByZXR1cm4gc2VsZi50YXJnZXQuc3RhcnQodGFnLCBhdHRyaWIpCiAKICAgICBkZWYgX2VuZChzZWxmLCB0YWcpOgpAQCAtMTY1MCwxNSArMTYxMywxMyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvY3R5cGUobmFtZSwgcHViaWQsIHN5c3RlbVsxOi0xXSkKICAgICAgICAgICAgICAgICBzZWxmLl9kb2N0eXBlID0gTm9uZQogCi0gICAgIyMKLSAgICAjIChEZXByZWNhdGVkKSBIYW5kbGVzIGEgZG9jdHlwZSBkZWNsYXJhdGlvbi4KLSAgICAjCi0gICAgIyBAcGFyYW0gbmFtZSBEb2N0eXBlIG5hbWUuCi0gICAgIyBAcGFyYW0gcHViaWQgUHVibGljIGlkZW50aWZpZXIuCi0gICAgIyBAcGFyYW0gc3lzdGVtIFN5c3RlbSBpZGVudGlmaWVyLgotCiAgICAgZGVmIGRvY3R5cGUoc2VsZiwgbmFtZSwgcHViaWQsIHN5c3RlbSk6Ci0gICAgICAgICIiIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiIiIgorICAgICAgICAiIiIoRGVwcmVjYXRlZCkgIEhhbmRsZSBkb2N0eXBlIGRlY2xhcmF0aW9uCisKKyAgICAgICAgKm5hbWUqIGlzIHRoZSBEb2N0eXBlIG5hbWUsICpwdWJpZCogaXMgdGhlIHB1YmxpYyBpZGVudGlmaWVyLAorICAgICAgICBhbmQgKnN5c3RlbSogaXMgdGhlIHN5c3RlbSBpZGVudGlmaWVyLgorCisgICAgICAgICIiIgogICAgICAgICB3YXJuaW5ncy53YXJuKAogICAgICAgICAgICAgIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiAgRGVmaW5lIGRvY3R5cGUoKSAiCiAgICAgICAgICAgICAibWV0aG9kIG9uIHRoZSBUcmVlQnVpbGRlciB0YXJnZXQuIiwKQEAgLTE2NjgsMjQgKzE2MjksMTUgQEAKICAgICAjIHNlbnRpbmVsLCBpZiBkb2N0eXBlIGlzIHJlZGVmaW5lZCBpbiBhIHN1YmNsYXNzCiAgICAgX19kb2N0eXBlID0gZG9jdHlwZQogCi0gICAgIyMKLSAgICAjIEZlZWRzIGRhdGEgdG8gdGhlIHBhcnNlci4KLSAgICAjCi0gICAgIyBAcGFyYW0gZGF0YSBFbmNvZGVkIGRhdGEuCi0KICAgICBkZWYgZmVlZChzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiRmVlZCBlbmNvZGVkIGRhdGEgdG8gcGFyc2VyLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnBhcnNlci5QYXJzZShkYXRhLCAwKQogICAgICAgICBleGNlcHQgc2VsZi5fZXJyb3IgYXMgdjoKICAgICAgICAgICAgIHNlbGYuX3JhaXNlZXJyb3IodikKIAotICAgICMjCi0gICAgIyBGaW5pc2hlcyBmZWVkaW5nIGRhdGEgdG8gdGhlIHBhcnNlci4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEFuIGVsZW1lbnQgc3RydWN0dXJlLgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkZpbmlzaCBmZWVkaW5nIGRhdGEgdG8gcGFyc2VyIGFuZCByZXR1cm4gZWxlbWVudCBzdHJ1Y3R1cmUuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKCIiLCAxKSAjIGVuZCBvZiBkYXRhCiAgICAgICAgIGV4Y2VwdCBzZWxmLl9lcnJvciBhcyB2OgpAQCAtMTcwNCwxMDMgKzE2NTYsMTIgQEAKIAogIyBJbXBvcnQgdGhlIEMgYWNjZWxlcmF0b3JzCiB0cnk6CisgICAgIyBFbGVtZW50IGlzIGdvaW5nIHRvIGJlIHNoYWRvd2VkIGJ5IHRoZSBDIGltcGxlbWVudGF0aW9uLiBXZSBuZWVkIHRvIGtlZXAKKyAgICAjIHRoZSBQeXRob24gdmVyc2lvbiBvZiBpdCBhY2Nlc3NpYmxlIGZvciBzb21lICJjcmVhdGl2ZSIgYnkgZXh0ZXJuYWwgY29kZQorICAgICMgKHNlZSB0ZXN0cykKKyAgICBfRWxlbWVudF9QeSA9IEVsZW1lbnQKKwogICAgICMgRWxlbWVudCwgU3ViRWxlbWVudCwgUGFyc2VFcnJvciwgVHJlZUJ1aWxkZXIsIFhNTFBhcnNlcgogICAgIGZyb20gX2VsZW1lbnR0cmVlIGltcG9ydCAqCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwotZWxzZToKLSAgICAjIE92ZXJ3cml0ZSAnRWxlbWVudFRyZWUucGFyc2UnIGFuZCAnaXRlcnBhcnNlJyB0byB1c2UgdGhlIEMgWE1MUGFyc2VyCi0KLSAgICBjbGFzcyBFbGVtZW50VHJlZShFbGVtZW50VHJlZSk6Ci0gICAgICAgIGRlZiBwYXJzZShzZWxmLCBzb3VyY2UsIHBhcnNlcj1Ob25lKToKLSAgICAgICAgICAgIGNsb3NlX3NvdXJjZSA9IEZhbHNlCi0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzb3VyY2UsICdyZWFkJyk6Ci0gICAgICAgICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICdyYicpCi0gICAgICAgICAgICAgICAgY2xvc2Vfc291cmNlID0gVHJ1ZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIHBhcnNlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzb3VyY2UucmVhZCg2NTUzNikKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gcGFyc2VyLl9wYXJzZShzb3VyY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaWYgY2xvc2Vfc291cmNlOgotICAgICAgICAgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQotCi0gICAgY2xhc3MgaXRlcnBhcnNlOgotICAgICAgICAiIiJQYXJzZXMgYW4gWE1MIHNlY3Rpb24gaW50byBhbiBlbGVtZW50IHRyZWUgaW5jcmVtZW50YWxseS4KLQotICAgICAgICBSZXBvcnRzIHdoYXTigJlzIGdvaW5nIG9uIHRvIHRoZSB1c2VyLiAnc291cmNlJyBpcyBhIGZpbGVuYW1lIG9yIGZpbGUKLSAgICAgICAgb2JqZWN0IGNvbnRhaW5pbmcgWE1MIGRhdGEuICdldmVudHMnIGlzIGEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suCi0gICAgICAgIFRoZSBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncyAic3RhcnQiLCAiZW5kIiwgInN0YXJ0LW5zIiBhbmQKLSAgICAgICAgImVuZC1ucyIgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQgZGV0YWlsZWQgbmFtZXNwYWNlCi0gICAgICAgIGluZm9ybWF0aW9uKS4gSWYgJ2V2ZW50cycgaXMgb21pdHRlZCwgb25seSAiZW5kIiBldmVudHMgYXJlIHJlcG9ydGVkLgotICAgICAgICAncGFyc2VyJyBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuIElmIG5vdCBnaXZlbiwgdGhlIHN0YW5kYXJkCi0gICAgICAgIFhNTFBhcnNlciBwYXJzZXIgaXMgdXNlZC4gUmV0dXJucyBhbiBpdGVyYXRvciBwcm92aWRpbmcKLSAgICAgICAgKGV2ZW50LCBlbGVtKSBwYWlycy4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgcm9vdCA9IE5vbmUKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGV2ZW50cz1Ob25lLCBwYXJzZXI9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLl9jbG9zZV9maWxlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGZpbGUsICdyZWFkJyk6Ci0gICAgICAgICAgICAgICAgZmlsZSA9IG9wZW4oZmlsZSwgJ3JiJykKLSAgICAgICAgICAgICAgICBzZWxmLl9jbG9zZV9maWxlID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGUKLSAgICAgICAgICAgIHNlbGYuX2V2ZW50cyA9IFtdCi0gICAgICAgICAgICBzZWxmLl9pbmRleCA9IDAKLSAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gTm9uZQotICAgICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdCA9IE5vbmUKLSAgICAgICAgICAgIGlmIHBhcnNlciBpcyBOb25lOgotICAgICAgICAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKLSAgICAgICAgICAgIHNlbGYuX3BhcnNlciA9IHBhcnNlcgotICAgICAgICAgICAgc2VsZi5fcGFyc2VyLl9zZXRldmVudHMoc2VsZi5fZXZlbnRzLCBldmVudHMpCi0KLSAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBzZWxmLl9ldmVudHNbc2VsZi5faW5kZXhdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ICs9IDEKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0KLSAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Vycm9yOgotICAgICAgICAgICAgICAgICAgICBlID0gc2VsZi5fZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlIGUKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdAotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zZV9maWxlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgICAgICAgICAjIGxvYWQgZXZlbnQgYnVmZmVyCi0gICAgICAgICAgICAgICAgZGVsIHNlbGYuX2V2ZW50c1s6XQotICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gMAotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9maWxlLnJlYWQoMTYzODQpCi0gICAgICAgICAgICAgICAgaWYgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gZXhjCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHNlbGYuX3BhcnNlci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlciA9IE5vbmUKLQotICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotCi0jIGNvbXBhdGliaWxpdHkKLVhNTFRyZWVCdWlsZGVyID0gWE1MUGFyc2VyCi0KLSMgd29ya2Fyb3VuZCBjaXJjdWxhciBpbXBvcnQuCi10cnk6Ci0gICAgZnJvbSBFbGVtZW50QzE0TiBpbXBvcnQgX3NlcmlhbGl6ZV9jMTRuCi0gICAgX3NlcmlhbGl6ZVsiYzE0biJdID0gX3NlcmlhbGl6ZV9jMTRuCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3htbHJwYy9jbGllbnQucHkgYi9MaWIveG1scnBjL2NsaWVudC5weQppbmRleCA0NjFjMzAwLi4xMjM4YjliIDEwMDY0NAotLS0gYS9MaWIveG1scnBjL2NsaWVudC5weQorKysgYi9MaWIveG1scnBjL2NsaWVudC5weQpAQCAtMTA0NSw3ICsxMDQ1LDcgQEAKICAgICBnemYgPSBnemlwLkd6aXBGaWxlKG1vZGU9InJiIiwgZmlsZW9iaj1mKQogICAgIHRyeToKICAgICAgICAgZGVjb2RlZCA9IGd6Zi5yZWFkKCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBkYXRhIikKICAgICBmLmNsb3NlKCkKICAgICBnemYuY2xvc2UoKQpAQCAtMTEzMCw4ICsxMTMwLDkgQEAKICAgICAgICAgZm9yIGkgaW4gKDAsIDEpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNpbmdsZV9yZXF1ZXN0KGhvc3QsIGhhbmRsZXIsIHJlcXVlc3RfYm9keSwgdmVyYm9zZSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBpIG9yIGUuZXJybm8gbm90IGluIChlcnJuby5FQ09OTlJFU0VULCBlcnJuby5FQ09OTkFCT1JURUQsIGVycm5vLkVQSVBFKToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgaSBvciBlLmVycm5vIG5vdCBpbiAoZXJybm8uRUNPTk5SRVNFVCwgZXJybm8uRUNPTk5BQk9SVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVQSVBFKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGV4Y2VwdCBodHRwLmNsaWVudC5CYWRTdGF0dXNMaW5lOiAjY2xvc2UgYWZ0ZXIgd2Ugc2VudCByZXF1ZXN0CiAgICAgICAgICAgICAgICAgaWYgaToKQEAgLTEzODUsNyArMTM4Niw3IEBACiAgICAgICAgICMgZ2V0IHRoZSB1cmwKICAgICAgICAgdHlwZSwgdXJpID0gdXJsbGliLnBhcnNlLnNwbGl0dHlwZSh1cmkpCiAgICAgICAgIGlmIHR5cGUgbm90IGluICgiaHR0cCIsICJodHRwcyIpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigidW5zdXBwb3J0ZWQgWE1MLVJQQyBwcm90b2NvbCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJ1bnN1cHBvcnRlZCBYTUwtUlBDIHByb3RvY29sIikKICAgICAgICAgc2VsZi5fX2hvc3QsIHNlbGYuX19oYW5kbGVyID0gdXJsbGliLnBhcnNlLnNwbGl0aG9zdCh1cmkpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9faGFuZGxlcjoKICAgICAgICAgICAgIHNlbGYuX19oYW5kbGVyID0gIi9SUEMyIgpkaWZmIC0tZ2l0IGEvTGliL3htbHJwYy9zZXJ2ZXIucHkgYi9MaWIveG1scnBjL3NlcnZlci5weQppbmRleCBkMjdiZjVhLi4zMDRlMjE4IDEwMDY0NAotLS0gYS9MaWIveG1scnBjL3NlcnZlci5weQorKysgYi9MaWIveG1scnBjL3NlcnZlci5weQpAQCAtNTg0LDEzICs1ODQsNiBAQAogICAgICAgICBTaW1wbGVYTUxSUENEaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIGFsbG93X25vbmUsIGVuY29kaW5nLCB1c2VfYnVpbHRpbl90eXBlcykKICAgICAgICAgc29ja2V0c2VydmVyLlRDUFNlcnZlci5fX2luaXRfXyhzZWxmLCBhZGRyLCByZXF1ZXN0SGFuZGxlciwgYmluZF9hbmRfYWN0aXZhdGUpCiAKLSAgICAgICAgIyBbQnVnICMxMjIyNzkwXSBJZiBwb3NzaWJsZSwgc2V0IGNsb3NlLW9uLWV4ZWMgZmxhZzsgaWYgYQotICAgICAgICAjIG1ldGhvZCBzcGF3bnMgYSBzdWJwcm9jZXNzLCB0aGUgc3VicHJvY2VzcyBzaG91bGRuJ3QgaGF2ZQotICAgICAgICAjIHRoZSBsaXN0ZW5pbmcgc29ja2V0IG9wZW4uCi0gICAgICAgIGlmIGZjbnRsIGlzIG5vdCBOb25lIGFuZCBoYXNhdHRyKGZjbnRsLCAnRkRfQ0xPRVhFQycpOgotICAgICAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChzZWxmLmZpbGVubygpLCBmY250bC5GX0dFVEZEKQotICAgICAgICAgICAgZmxhZ3MgfD0gZmNudGwuRkRfQ0xPRVhFQwotICAgICAgICAgICAgZmNudGwuZmNudGwoc2VsZi5maWxlbm8oKSwgZmNudGwuRl9TRVRGRCwgZmxhZ3MpCiAKIGNsYXNzIE11bHRpUGF0aFhNTFJQQ1NlcnZlcihTaW1wbGVYTUxSUENTZXJ2ZXIpOgogICAgICIiIk11bHRpcGF0aCBYTUwtUlBDIFNlcnZlcgpkaWZmIC0tZ2l0IGEvTGliL3ppcGZpbGUucHkgYi9MaWIvemlwZmlsZS5weQppbmRleCBmZjY0YzkwLi43YjZiZDVmIDEwMDY0NAotLS0gYS9MaWIvemlwZmlsZS5weQorKysgYi9MaWIvemlwZmlsZS5weQpAQCAtNiw3ICs2LDcgQEAKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBzdGF0CkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGlmIF9FbmRSZWNEYXRhKGZwKToKICAgICAgICAgICAgIHJldHVybiBUcnVlICAgICAgICAgIyBmaWxlIGhhcyBjb3JyZWN0IG1hZ2ljIG51bWJlcgotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgcmV0dXJuIEZhbHNlCiAKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY2hlY2tfemlwZmlsZShmcCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHJldHVybiByZXN1bHQKIApAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBmcGluLnNlZWsob2Zmc2V0IC0gc2l6ZUVuZENlbnREaXI2NExvY2F0b3IsIDIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgSWYgdGhlIHNlZWsgZmFpbHMsIHRoZSBmaWxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBhIFpJUDY0CiAgICAgICAgICMgZW5kLW9mLWFyY2hpdmUgcmVjb3JkLCBzbyBqdXN0IHJldHVybiB0aGUgZW5kIHJlY29yZCB3ZSB3ZXJlIGdpdmVuLgogICAgICAgICByZXR1cm4gZW5kcmVjCkBAIC0yMTEsOCArMjExLDggQEAKICAgICBpZiBsZW4oZGF0YSkgIT0gc2l6ZUVuZENlbnREaXI2NDoKICAgICAgICAgcmV0dXJuIGVuZHJlYwogICAgIHNpZywgc3osIGNyZWF0ZV92ZXJzaW9uLCByZWFkX3ZlcnNpb24sIGRpc2tfbnVtLCBkaXNrX2RpciwgXAotICAgICAgICAgICAgZGlyY291bnQsIGRpcmNvdW50MiwgZGlyc2l6ZSwgZGlyb2Zmc2V0ID0gXAotICAgICAgICAgICAgc3RydWN0LnVucGFjayhzdHJ1Y3RFbmRBcmNoaXZlNjQsIGRhdGEpCisgICAgICAgIGRpcmNvdW50LCBkaXJjb3VudDIsIGRpcnNpemUsIGRpcm9mZnNldCA9IFwKKyAgICAgICAgc3RydWN0LnVucGFjayhzdHJ1Y3RFbmRBcmNoaXZlNjQsIGRhdGEpCiAgICAgaWYgc2lnICE9IHN0cmluZ0VuZEFyY2hpdmU2NDoKICAgICAgICAgcmV0dXJuIGVuZHJlYwogCkBAIC0yNDIsNyArMjQyLDcgQEAKICAgICAjIGZpbGUgaWYgdGhpcyBpcyB0aGUgY2FzZSkuCiAgICAgdHJ5OgogICAgICAgICBmcGluLnNlZWsoLXNpemVFbmRDZW50RGlyLCAyKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gTm9uZQogICAgIGRhdGEgPSBmcGluLnJlYWQoKQogICAgIGlmIChsZW4oZGF0YSkgPT0gc2l6ZUVuZENlbnREaXIgYW5kCkBAIC0yOTIsMjYgKzI5MiwyNiBAQAogICAgICIiIkNsYXNzIHdpdGggYXR0cmlidXRlcyBkZXNjcmliaW5nIGVhY2ggZmlsZSBpbiB0aGUgWklQIGFyY2hpdmUuIiIiCiAKICAgICBfX3Nsb3RzX18gPSAoCi0gICAgICAgICAgICAnb3JpZ19maWxlbmFtZScsCi0gICAgICAgICAgICAnZmlsZW5hbWUnLAotICAgICAgICAgICAgJ2RhdGVfdGltZScsCi0gICAgICAgICAgICAnY29tcHJlc3NfdHlwZScsCi0gICAgICAgICAgICAnY29tbWVudCcsCi0gICAgICAgICAgICAnZXh0cmEnLAotICAgICAgICAgICAgJ2NyZWF0ZV9zeXN0ZW0nLAotICAgICAgICAgICAgJ2NyZWF0ZV92ZXJzaW9uJywKLSAgICAgICAgICAgICdleHRyYWN0X3ZlcnNpb24nLAotICAgICAgICAgICAgJ3Jlc2VydmVkJywKLSAgICAgICAgICAgICdmbGFnX2JpdHMnLAotICAgICAgICAgICAgJ3ZvbHVtZScsCi0gICAgICAgICAgICAnaW50ZXJuYWxfYXR0cicsCi0gICAgICAgICAgICAnZXh0ZXJuYWxfYXR0cicsCi0gICAgICAgICAgICAnaGVhZGVyX29mZnNldCcsCi0gICAgICAgICAgICAnQ1JDJywKLSAgICAgICAgICAgICdjb21wcmVzc19zaXplJywKLSAgICAgICAgICAgICdmaWxlX3NpemUnLAotICAgICAgICAgICAgJ19yYXdfdGltZScsCi0gICAgICAgICkKKyAgICAgICAgJ29yaWdfZmlsZW5hbWUnLAorICAgICAgICAnZmlsZW5hbWUnLAorICAgICAgICAnZGF0ZV90aW1lJywKKyAgICAgICAgJ2NvbXByZXNzX3R5cGUnLAorICAgICAgICAnY29tbWVudCcsCisgICAgICAgICdleHRyYScsCisgICAgICAgICdjcmVhdGVfc3lzdGVtJywKKyAgICAgICAgJ2NyZWF0ZV92ZXJzaW9uJywKKyAgICAgICAgJ2V4dHJhY3RfdmVyc2lvbicsCisgICAgICAgICdyZXNlcnZlZCcsCisgICAgICAgICdmbGFnX2JpdHMnLAorICAgICAgICAndm9sdW1lJywKKyAgICAgICAgJ2ludGVybmFsX2F0dHInLAorICAgICAgICAnZXh0ZXJuYWxfYXR0cicsCisgICAgICAgICdoZWFkZXJfb2Zmc2V0JywKKyAgICAgICAgJ0NSQycsCisgICAgICAgICdjb21wcmVzc19zaXplJywKKyAgICAgICAgJ2ZpbGVfc2l6ZScsCisgICAgICAgICdfcmF3X3RpbWUnLAorICAgICkKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT0iTm9OYW1lIiwgZGF0ZV90aW1lPSgxOTgwLDEsMSwwLDAsMCkpOgogICAgICAgICBzZWxmLm9yaWdfZmlsZW5hbWUgPSBmaWxlbmFtZSAgICMgT3JpZ2luYWwgZmlsZSBuYW1lIGluIGFyY2hpdmUKQEAgLTM3Niw3ICszNzYsNyBAQAogICAgICAgICBpZiB6aXA2NDoKICAgICAgICAgICAgIGZtdCA9ICc8SEhRUScKICAgICAgICAgICAgIGV4dHJhID0gZXh0cmEgKyBzdHJ1Y3QucGFjayhmbXQsCi0gICAgICAgICAgICAgICAgICAgIDEsIHN0cnVjdC5jYWxjc2l6ZShmbXQpLTQsIGZpbGVfc2l6ZSwgY29tcHJlc3Nfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBzdHJ1Y3QuY2FsY3NpemUoZm10KS00LCBmaWxlX3NpemUsIGNvbXByZXNzX3NpemUpCiAgICAgICAgIGlmIGZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUIG9yIGNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVDoKICAgICAgICAgICAgIGlmIG5vdCB6aXA2NDoKICAgICAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUoIkZpbGVzaXplIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCkBAIC0zOTUsMTAgKzM5NSwxMCBAQAogICAgICAgICBzZWxmLmNyZWF0ZV92ZXJzaW9uID0gbWF4KG1pbl92ZXJzaW9uLCBzZWxmLmNyZWF0ZV92ZXJzaW9uKQogICAgICAgICBmaWxlbmFtZSwgZmxhZ19iaXRzID0gc2VsZi5fZW5jb2RlRmlsZW5hbWVGbGFncygpCiAgICAgICAgIGhlYWRlciA9IHN0cnVjdC5wYWNrKHN0cnVjdEZpbGVIZWFkZXIsIHN0cmluZ0ZpbGVIZWFkZXIsCi0gICAgICAgICAgICAgICAgIHNlbGYuZXh0cmFjdF92ZXJzaW9uLCBzZWxmLnJlc2VydmVkLCBmbGFnX2JpdHMsCi0gICAgICAgICAgICAgICAgIHNlbGYuY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwgQ1JDLAotICAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXh0cmFjdF92ZXJzaW9uLCBzZWxmLnJlc2VydmVkLCBmbGFnX2JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwgQ1JDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYSkpCiAgICAgICAgIHJldHVybiBoZWFkZXIgKyBmaWxlbmFtZSArIGV4dHJhCiAKICAgICBkZWYgX2VuY29kZUZpbGVuYW1lRmxhZ3Moc2VsZik6CkBAIC00NzUsMTMgKzQ3NSwxNSBAQAogICAgICAgICAgICAgICAgICAgICBjcmMgPSAoKGNyYyA+PiAxKSAmIDB4N0ZGRkZGRkYpCiAgICAgICAgICAgICB0YWJsZVtpXSA9IGNyYwogICAgICAgICByZXR1cm4gdGFibGUKLSAgICBjcmN0YWJsZSA9IF9HZW5lcmF0ZUNSQ1RhYmxlKCkKKyAgICBjcmN0YWJsZSA9IE5vbmUKIAogICAgIGRlZiBfY3JjMzIoc2VsZiwgY2gsIGNyYyk6CiAgICAgICAgICIiIkNvbXB1dGUgdGhlIENSQzMyIHByaW1pdGl2ZSBvbiBvbmUgYnl0ZS4iIiIKICAgICAgICAgcmV0dXJuICgoY3JjID4+IDgpICYgMHhmZmZmZmYpIF4gc2VsZi5jcmN0YWJsZVsoY3JjIF4gY2gpICYgMHhmZl0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwd2QpOgorICAgICAgICBpZiBfWmlwRGVjcnlwdGVyLmNyY3RhYmxlIGlzIE5vbmU6CisgICAgICAgICAgICBfWmlwRGVjcnlwdGVyLmNyY3RhYmxlID0gX1ppcERlY3J5cHRlci5fR2VuZXJhdGVDUkNUYWJsZSgpCiAgICAgICAgIHNlbGYua2V5MCA9IDMwNTQxOTg5NgogICAgICAgICBzZWxmLmtleTEgPSA1OTE3NTEwNDkKICAgICAgICAgc2VsZi5rZXkyID0gODc4MDgyMTkyCkBAIC01MTEsNyArNTEzLDcgQEAKICAgICBkZWYgX2luaXQoc2VsZik6CiAgICAgICAgIHByb3BzID0gbHptYS5fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKHsnaWQnOiBsem1hLkZJTFRFUl9MWk1BMX0pCiAgICAgICAgIHNlbGYuX2NvbXAgPSBsem1hLkxaTUFDb21wcmVzc29yKGx6bWEuRk9STUFUX1JBVywgZmlsdGVycz1bCi0gICAgICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLCBwcm9wcykKKyAgICAgICAgICAgIGx6bWEuX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhsem1hLkZJTFRFUl9MWk1BMSwgcHJvcHMpCiAgICAgICAgIF0pCiAgICAgICAgIHJldHVybiBzdHJ1Y3QucGFjaygnPEJCSCcsIDksIDQsIGxlbihwcm9wcykpICsgcHJvcHMKIApAQCAtNTQzLDggKzU0NSw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwogCiAgICAgICAgICAgICBzZWxmLl9kZWNvbXAgPSBsem1hLkxaTUFEZWNvbXByZXNzb3IobHptYS5GT1JNQVRfUkFXLCBmaWx0ZXJzPVsKLSAgICAgICAgICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWRbNDo0ICsgcHNpemVdKQorICAgICAgICAgICAgICAgIGx6bWEuX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhsem1hLkZJTFRFUl9MWk1BMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZFs0OjQgKyBwc2l6ZV0pCiAgICAgICAgICAgICBdKQogICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3VuY29uc3VtZWRbNCArIHBzaXplOl0KICAgICAgICAgICAgIGRlbCBzZWxmLl91bmNvbnN1bWVkCkBAIC01ODAsMTUgKzU4MiwxNSBAQAogICAgIGVsaWYgY29tcHJlc3Npb24gPT0gWklQX0RFRkxBVEVEOgogICAgICAgICBpZiBub3QgemxpYjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgemxpYiBtb2R1bGUiKQorICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIHpsaWIgbW9kdWxlIikKICAgICBlbGlmIGNvbXByZXNzaW9uID09IFpJUF9CWklQMjoKICAgICAgICAgaWYgbm90IGJ6MjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgYnoyIG1vZHVsZSIpCisgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgYnoyIG1vZHVsZSIpCiAgICAgZWxpZiBjb21wcmVzc2lvbiA9PSBaSVBfTFpNQToKICAgICAgICAgaWYgbm90IGx6bWE6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIGx6bWEgbW9kdWxlIikKKyAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSBsem1hIG1vZHVsZSIpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJUaGF0IGNvbXByZXNzaW9uIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIikKIApAQCAtNTk2LDcgKzU5OCw3IEBACiBkZWYgX2dldF9jb21wcmVzc29yKGNvbXByZXNzX3R5cGUpOgogICAgIGlmIGNvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEOgogICAgICAgICByZXR1cm4gemxpYi5jb21wcmVzc29iaih6bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwKLSAgICAgICAgICAgICB6bGliLkRFRkxBVEVELCAtMTUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWIuREVGTEFURUQsIC0xNSkKICAgICBlbGlmIGNvbXByZXNzX3R5cGUgPT0gWklQX0JaSVAyOgogICAgICAgICByZXR1cm4gYnoyLkJaMkNvbXByZXNzb3IoKQogICAgIGVsaWYgY29tcHJlc3NfdHlwZSA9PSBaSVBfTFpNQToKQEAgLTgzNiw4ICs4MzgsOCBAQAogICAgICAgICAgICAgbiA9IG1heChuLCBzZWxmLk1JTl9SRUFEX1NJWkUpCiAgICAgICAgICAgICBkYXRhID0gc2VsZi5fZGVjb21wcmVzc29yLmRlY29tcHJlc3MoZGF0YSwgbikKICAgICAgICAgICAgIHNlbGYuX2VvZiA9IChzZWxmLl9kZWNvbXByZXNzb3IuZW9mIG9yCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzX2xlZnQgPD0gMCBhbmQKLSAgICAgICAgICAgICAgICAgICAgbm90IHNlbGYuX2RlY29tcHJlc3Nvci51bmNvbnN1bWVkX3RhaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NfbGVmdCA8PSAwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9kZWNvbXByZXNzb3IudW5jb25zdW1lZF90YWlsKQogICAgICAgICAgICAgaWYgc2VsZi5fZW9mOgogICAgICAgICAgICAgICAgIGRhdGEgKz0gc2VsZi5fZGVjb21wcmVzc29yLmZsdXNoKCkKICAgICAgICAgZWxzZToKQEAgLTg3OCw3ICs4ODAsNyBAQAogY2xhc3MgWmlwRmlsZToKICAgICAiIiIgQ2xhc3Mgd2l0aCBtZXRob2RzIHRvIG9wZW4sIHJlYWQsIHdyaXRlLCBjbG9zZSwgbGlzdCB6aXAgZmlsZXMuCiAKLSAgICB6ID0gWmlwRmlsZShmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSkKKyAgICB6ID0gWmlwRmlsZShmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1UcnVlKQogCiAgICAgZmlsZTogRWl0aGVyIHRoZSBwYXRoIHRvIHRoZSBmaWxlLCBvciBhIGZpbGUtbGlrZSBvYmplY3QuCiAgICAgICAgICAgSWYgaXQgaXMgYSBwYXRoLCB0aGUgZmlsZSB3aWxsIGJlIG9wZW5lZCBhbmQgY2xvc2VkIGJ5IFppcEZpbGUuCkBAIC04OTQsNyArODk2LDcgQEAKICAgICBmcCA9IE5vbmUgICAgICAgICAgICAgICAgICAgIyBTZXQgaGVyZSBzaW5jZSBfX2RlbF9fIGNoZWNrcyBpdAogICAgIF93aW5kb3dzX2lsbGVnYWxfbmFtZV90cmFuc190YWJsZSA9IE5vbmUKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUpOgogICAgICAgICAiIiJPcGVuIHRoZSBaSVAgZmlsZSB3aXRoIG1vZGUgcmVhZCAiciIsIHdyaXRlICJ3IiBvciBhcHBlbmQgImEiLiIiIgogICAgICAgICBpZiBtb2RlIG5vdCBpbiAoInIiLCAidyIsICJhIik6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1ppcEZpbGUoKSByZXF1aXJlcyBtb2RlICJyIiwgInciLCBvciAiYSInKQpAQCAtOTE5LDcgKzkyMSw3IEBACiAgICAgICAgICAgICBtb2RlRGljdCA9IHsncicgOiAncmInLCAndyc6ICd3YicsICdhJyA6ICdyK2InfQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZnAgPSBpby5vcGVuKGZpbGUsIG1vZGVEaWN0W21vZGVdKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBtb2RlID09ICdhJzoKICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IGtleSA9ICd3JwogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwID0gaW8ub3BlbihmaWxlLCBtb2RlRGljdFttb2RlXSkKQEAgLTk3MCw3ICs5NzIsNyBAQAogICAgICAgICBmcCA9IHNlbGYuZnAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZW5kcmVjID0gX0VuZFJlY0RhdGEoZnApCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIEJhZFppcEZpbGUoIkZpbGUgaXMgbm90IGEgemlwIGZpbGUiKQogICAgICAgICBpZiBub3QgZW5kcmVjOgogICAgICAgICAgICAgcmFpc2UgQmFkWmlwRmlsZSgiRmlsZSBpcyBub3QgYSB6aXAgZmlsZSIpCkBAIC0xMDE4LDggKzEwMjAsOCBAQAogICAgICAgICAgICAgeC5jb21tZW50ID0gZnAucmVhZChjZW50ZGlyW19DRF9DT01NRU5UX0xFTkdUSF0pCiAgICAgICAgICAgICB4LmhlYWRlcl9vZmZzZXQgPSBjZW50ZGlyW19DRF9MT0NBTF9IRUFERVJfT0ZGU0VUXQogICAgICAgICAgICAgKHguY3JlYXRlX3ZlcnNpb24sIHguY3JlYXRlX3N5c3RlbSwgeC5leHRyYWN0X3ZlcnNpb24sIHgucmVzZXJ2ZWQsCi0gICAgICAgICAgICAgICAgeC5mbGFnX2JpdHMsIHguY29tcHJlc3NfdHlwZSwgdCwgZCwKLSAgICAgICAgICAgICAgICB4LkNSQywgeC5jb21wcmVzc19zaXplLCB4LmZpbGVfc2l6ZSkgPSBjZW50ZGlyWzE6MTJdCisgICAgICAgICAgICAgeC5mbGFnX2JpdHMsIHguY29tcHJlc3NfdHlwZSwgdCwgZCwKKyAgICAgICAgICAgICB4LkNSQywgeC5jb21wcmVzc19zaXplLCB4LmZpbGVfc2l6ZSkgPSBjZW50ZGlyWzE6MTJdCiAgICAgICAgICAgICBpZiB4LmV4dHJhY3RfdmVyc2lvbiA+IE1BWF9FWFRSQUNUX1ZFUlNJT046CiAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiemlwIGZpbGUgdmVyc2lvbiAlLjFmIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeC5leHRyYWN0X3ZlcnNpb24gLyAxMCkpCkBAIC0xMDI3LDcgKzEwMjksNyBAQAogICAgICAgICAgICAgIyBDb252ZXJ0IGRhdGUvdGltZSBjb2RlIHRvICh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW4sIHNlYykKICAgICAgICAgICAgIHguX3Jhd190aW1lID0gdAogICAgICAgICAgICAgeC5kYXRlX3RpbWUgPSAoIChkPj45KSsxOTgwLCAoZD4+NSkmMHhGLCBkJjB4MUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdD4+MTEsICh0Pj41KSYweDNGLCAodCYweDFGKSAqIDIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ+PjExLCAodD4+NSkmMHgzRiwgKHQmMHgxRikgKiAyICkKIAogICAgICAgICAgICAgeC5fZGVjb2RlRXh0cmEoKQogICAgICAgICAgICAgeC5oZWFkZXJfb2Zmc2V0ID0geC5oZWFkZXJfb2Zmc2V0ICsgY29uY2F0CkBAIC0xMTE5LDExICsxMTIxLDE1IEBACiAgICAgICAgICIiIlJldHVybiBmaWxlLWxpa2Ugb2JqZWN0IGZvciAnbmFtZScuIiIiCiAgICAgICAgIGlmIG1vZGUgbm90IGluICgiciIsICJVIiwgInJVIik6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ29wZW4oKSByZXF1aXJlcyBtb2RlICJyIiwgIlUiLCBvciAiclUiJykKKyAgICAgICAgaWYgJ1UnIGluIG1vZGU6CisgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIGlmIHB3ZCBhbmQgbm90IGlzaW5zdGFuY2UocHdkLCBieXRlcyk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInB3ZDogZXhwZWN0ZWQgYnl0ZXMsIGdvdCAlcyIgJSB0eXBlKHB3ZCkpCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gcmVhZCBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gcmVhZCBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAKICAgICAgICAgIyBPbmx5IG9wZW4gYSBuZXcgZmlsZSBmb3IgaW5zdGFuY2VzIHdoZXJlIHdlIHdlcmUgbm90CiAgICAgICAgICMgZ2l2ZW4gYSBmaWxlIG9iamVjdCBpbiB0aGUgY29uc3RydWN0b3IKQEAgLTEyOTYsNyArMTMwMiw3IEBACiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3dyaXRlKCkgcmVxdWlyZXMgbW9kZSAidyIgb3IgImEiJykKICAgICAgICAgaWYgbm90IHNlbGYuZnA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQogICAgICAgICBfY2hlY2tfY29tcHJlc3Npb24oemluZm8uY29tcHJlc3NfdHlwZSkKICAgICAgICAgaWYgemluZm8uZmlsZV9zaXplID4gWklQNjRfTElNSVQ6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxsb3daaXA2NDoKQEAgLTEzMDQsMTQgKzEzMTAsMTQgQEAKICAgICAgICAgaWYgemluZm8uaGVhZGVyX29mZnNldCA+IFpJUDY0X0xJTUlUOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsbG93WmlwNjQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKAotICAgICAgICAgICAgICAgICAgICAgICJaaXBmaWxlIHNpemUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKKyAgICAgICAgICAgICAgICAgICAgIlppcGZpbGUgc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGZpbGVuYW1lLCBhcmNuYW1lPU5vbmUsIGNvbXByZXNzX3R5cGU9Tm9uZSk6CiAgICAgICAgICIiIlB1dCB0aGUgYnl0ZXMgZnJvbSBmaWxlbmFtZSBpbnRvIHRoZSBhcmNoaXZlIHVuZGVyIHRoZSBuYW1lCiAgICAgICAgIGFyY25hbWUuIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQorICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKIAogICAgICAgICBzdCA9IG9zLnN0YXQoZmlsZW5hbWUpCiAgICAgICAgIGlzZGlyID0gc3RhdC5TX0lTRElSKHN0LnN0X21vZGUpCkBAIC0xMzU4LDcgKzEzNjQsNyBAQAogICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgPSAwCiAgICAgICAgICAgICAjIENvbXByZXNzZWQgc2l6ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gdW5jb21wcmVzc2VkIHNpemUKICAgICAgICAgICAgIHppcDY0ID0gc2VsZi5fYWxsb3daaXA2NCBhbmQgXAotICAgICAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgKiAxLjA1ID4gWklQNjRfTElNSVQKKyAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgKiAxLjA1ID4gWklQNjRfTElNSVQKICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcih6aXA2NCkpCiAgICAgICAgICAgICBmaWxlX3NpemUgPSAwCiAgICAgICAgICAgICB3aGlsZSAxOgpAQCAtMTQxMiw3ICsxNDE4LDcgQEAKIAogICAgICAgICBpZiBub3Qgc2VsZi5mcDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKKyAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSB0byBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAKICAgICAgICAgemluZm8uZmlsZV9zaXplID0gbGVuKGRhdGEpICAgICAgICAgICAgIyBVbmNvbXByZXNzZWQgc2l6ZQogICAgICAgICB6aW5mby5oZWFkZXJfb2Zmc2V0ID0gc2VsZi5mcC50ZWxsKCkgICAgIyBTdGFydCBvZiBoZWFkZXIgZGF0YQpAQCAtMTQzMiw3ICsxNDM4LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSB6aW5mby5maWxlX3NpemUKICAgICAgICAgemlwNjQgPSB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVCBvciBcCi0gICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUCisgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQKICAgICAgICAgaWYgemlwNjQgYW5kIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgogICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKCJGaWxlc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQogICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoemlwNjQpKQpAQCAtMTQ0MSw3ICsxNDQ3LDcgQEAKICAgICAgICAgICAgICMgV3JpdGUgQ1JDIGFuZCBmaWxlIHNpemVzIGFmdGVyIHRoZSBmaWxlIGRhdGEKICAgICAgICAgICAgIGZtdCA9ICc8TFFRJyBpZiB6aXA2NCBlbHNlICc8TExMJwogICAgICAgICAgICAgc2VsZi5mcC53cml0ZShzdHJ1Y3QucGFjayhmbXQsIHppbmZvLkNSQywgemluZm8uY29tcHJlc3Nfc2l6ZSwKLSAgICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSkpCiAgICAgICAgIHNlbGYuZnAuZmx1c2goKQogICAgICAgICBzZWxmLmZpbGVsaXN0LmFwcGVuZCh6aW5mbykKICAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3ppbmZvLmZpbGVuYW1lXSA9IHppbmZvCkBAIC0xNDY3LDcgKzE0NzMsNyBAQAogICAgICAgICAgICAgICAgICAgICBkb3N0aW1lID0gZHRbM10gPDwgMTEgfCBkdFs0XSA8PCA1IHwgKGR0WzVdIC8vIDIpCiAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gW10KICAgICAgICAgICAgICAgICAgICAgaWYgemluZm8uZmlsZV9zaXplID4gWklQNjRfTElNSVQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHppbmZvLmNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVDoKKyAgICAgICAgICAgICAgICAgICAgICAgb3IgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgogICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXBwZW5kKHppbmZvLmZpbGVfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmFwcGVuZCh6aW5mby5jb21wcmVzc19zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplID0gMHhmZmZmZmZmZgpAQCAtMTQ4Nyw4ICsxNDkzLDggQEAKICAgICAgICAgICAgICAgICAgICAgaWYgZXh0cmE6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIEFwcGVuZCBhIFpJUDY0IGZpZWxkIHRvIHRoZSBleHRyYSdzCiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kYXRhID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8SEgnICsgJ1EnKmxlbihleHRyYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDgqbGVuKGV4dHJhKSwgKmV4dHJhKSArIGV4dHJhX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEhIJyArICdRJypsZW4oZXh0cmEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDgqbGVuKGV4dHJhKSwgKmV4dHJhKSArIGV4dHJhX2RhdGEKIAogICAgICAgICAgICAgICAgICAgICAgICAgbWluX3ZlcnNpb24gPSBaSVA2NF9WRVJTSU9OCiAKQEAgLTE1MDIsMjEgKzE1MDgsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGZsYWdfYml0cyA9IHppbmZvLl9lbmNvZGVGaWxlbmFtZUZsYWdzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRkaXIgPSBzdHJ1Y3QucGFjayhzdHJ1Y3RDZW50cmFsRGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0NlbnRyYWxEaXIsIGNyZWF0ZV92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdDZW50cmFsRGlyLCBjcmVhdGVfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5jcmVhdGVfc3lzdGVtLCBleHRyYWN0X3ZlcnNpb24sIHppbmZvLnJlc2VydmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfYml0cywgemluZm8uY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oZmlsZW5hbWUpLCBsZW4oZXh0cmFfZGF0YSksIGxlbih6aW5mby5jb21tZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB6aW5mby5pbnRlcm5hbF9hdHRyLCB6aW5mby5leHRlcm5hbF9hdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBEZXByZWNhdGlvbldhcm5pbmc6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgoc3RydWN0Q2VudHJhbERpciwgc3RyaW5nQ2VudHJhbERpciwgY3JlYXRlX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5mbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHppbmZvLmZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbih6aW5mby5maWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoY2VudGRpcikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShmaWxlbmFtZSkKQEAgLTE1MzMsMjIgKzE1MzksMjIgQEAKICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUgPiBaSVA2NF9MSU1JVCk6CiAgICAgICAgICAgICAgICAgICAgICMgTmVlZCB0byB3cml0ZSB0aGUgWklQNjQgZW5kLW9mLWFyY2hpdmUgcmVjb3JkcwogICAgICAgICAgICAgICAgICAgICB6aXA2NGVuZHJlYyA9IHN0cnVjdC5wYWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdEVuZEFyY2hpdmU2NCwgc3RyaW5nRW5kQXJjaGl2ZTY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0LCA0NSwgNDUsIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0LCBzdHJpbmdFbmRBcmNoaXZlNjQsCisgICAgICAgICAgICAgICAgICAgICAgICA0NCwgNDUsIDQ1LCAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppcDY0ZW5kcmVjKQogCiAgICAgICAgICAgICAgICAgICAgIHppcDY0bG9jcmVjID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0TG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdFbmRBcmNoaXZlNjRMb2NhdG9yLCAwLCBwb3MyLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0TG9jYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0VuZEFyY2hpdmU2NExvY2F0b3IsIDAsIHBvczIsIDEpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemlwNjRsb2NyZWMpCiAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJDb3VudCA9IG1pbihjZW50RGlyQ291bnQsIDB4RkZGRikKICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUgPSBtaW4oY2VudERpclNpemUsIDB4RkZGRkZGRkYpCiAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJPZmZzZXQgPSBtaW4oY2VudERpck9mZnNldCwgMHhGRkZGRkZGRikKIAogICAgICAgICAgICAgICAgIGVuZHJlYyA9IHN0cnVjdC5wYWNrKHN0cnVjdEVuZEFyY2hpdmUsIHN0cmluZ0VuZEFyY2hpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0LCBsZW4oc2VsZi5fY29tbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgY2VudERpckNvdW50LCBjZW50RGlyQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQsIGxlbihzZWxmLl9jb21tZW50KSkKICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGVuZHJlYykKICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHNlbGYuX2NvbW1lbnQpCiAgICAgICAgICAgICAgICAgc2VsZi5mcC5mbHVzaCgpCkBAIC0xNTYzLDEyICsxNTY5LDEyIEBACiAgICAgIiIiQ2xhc3MgdG8gY3JlYXRlIFpJUCBhcmNoaXZlcyB3aXRoIFB5dGhvbiBsaWJyYXJ5IGZpbGVzIGFuZCBwYWNrYWdlcy4iIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwKLSAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1GYWxzZSwgb3B0aW1pemU9LTEpOgorICAgICAgICAgICAgICAgICBhbGxvd1ppcDY0PVRydWUsIG9wdGltaXplPS0xKToKICAgICAgICAgWmlwRmlsZS5fX2luaXRfXyhzZWxmLCBmaWxlLCBtb2RlPW1vZGUsIGNvbXByZXNzaW9uPWNvbXByZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9YWxsb3daaXA2NCkKICAgICAgICAgc2VsZi5fb3B0aW1pemUgPSBvcHRpbWl6ZQogCi0gICAgZGVmIHdyaXRlcHkoc2VsZiwgcGF0aG5hbWUsIGJhc2VuYW1lPSIiKToKKyAgICBkZWYgd3JpdGVweShzZWxmLCBwYXRobmFtZSwgYmFzZW5hbWU9IiIsIGZpbHRlcmZ1bmM9Tm9uZSk6CiAgICAgICAgICIiIkFkZCBhbGwgZmlsZXMgZnJvbSAicGF0aG5hbWUiIHRvIHRoZSBaSVAgYXJjaGl2ZS4KIAogICAgICAgICBJZiBwYXRobmFtZSBpcyBhIHBhY2thZ2UgZGlyZWN0b3J5LCBzZWFyY2ggdGhlIGRpcmVjdG9yeSBhbmQKQEAgLTE1NzksNyArMTU4NSwxNCBAQAogICAgICAgICBhcmNoaXZlLiAgQWRkZWQgbW9kdWxlcyBhcmUgYWx3YXlzIG1vZHVsZS5weW8gb3IgbW9kdWxlLnB5Yy4KICAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCBjb21waWxlIHRoZSBtb2R1bGUucHkgaW50byBtb2R1bGUucHljIGlmCiAgICAgICAgIG5lY2Vzc2FyeS4KKyAgICAgICAgSWYgZmlsdGVyZnVuYyhwYXRobmFtZSkgaXMgZ2l2ZW4sIGl0IGlzIGNhbGxlZCB3aXRoIGV2ZXJ5IGFyZ3VtZW50LgorICAgICAgICBXaGVuIGl0IGlzIEZhbHNlLCB0aGUgZmlsZSBvciBkaXJlY3RvcnkgaXMgc2tpcHBlZC4KICAgICAgICAgIiIiCisgICAgICAgIGlmIGZpbHRlcmZ1bmMgYW5kIG5vdCBmaWx0ZXJmdW5jKHBhdGhuYW1lKToKKyAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CisgICAgICAgICAgICAgICAgbGFiZWwgPSAncGF0aCcgaWYgb3MucGF0aC5pc2RpcihwYXRobmFtZSkgZWxzZSAnZmlsZScKKyAgICAgICAgICAgICAgICBwcmludCgnJXMgIiVzIiBza2lwcGVkIGJ5IGZpbHRlcmZ1bmMnICUgKGxhYmVsLCBwYXRobmFtZSkpCisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZGlyLCBuYW1lID0gb3MucGF0aC5zcGxpdChwYXRobmFtZSkKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRobmFtZSk6CiAgICAgICAgICAgICBpbml0bmFtZSA9IG9zLnBhdGguam9pbihwYXRobmFtZSwgIl9faW5pdF9fLnB5IikKQEAgLTE2MDQsMTAgKzE2MTcsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihwYXRoLCAiX19pbml0X18ucHkiKSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgcGFja2FnZSBkaXJlY3RvcnksIGFkZCBpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVweShwYXRoLCBiYXNlbmFtZSkgICMgUmVjdXJzaXZlIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlcHkocGF0aCwgYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmZ1bmM9ZmlsdGVyZnVuYykgICMgUmVjdXJzaXZlIGNhbGwKICAgICAgICAgICAgICAgICAgICAgZWxpZiBleHQgPT0gIi5weSI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWx0ZXJmdW5jIGFuZCBub3QgZmlsdGVyZnVuYyhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnZmlsZSAiJXMiIHNraXBwZWQgYnkgZmlsdGVyZnVuYycgJSBwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgYXJjbmFtZSA9IHNlbGYuX2dldF9jb2RlbmFtZShwYXRoWzA6LTNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiQWRkaW5nIiwgYXJjbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoZm5hbWUsIGFyY25hbWUpCkBAIC0xNjE5LDE1ICsxNjM3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aG5hbWUsIGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICByb290LCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICBpZiBleHQgPT0gIi5weSI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWx0ZXJmdW5jIGFuZCBub3QgZmlsdGVyZnVuYyhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnZmlsZSAiJXMiIHNraXBwZWQgYnkgZmlsdGVyZnVuYycgJSBwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgYXJjbmFtZSA9IHNlbGYuX2dldF9jb2RlbmFtZShwYXRoWzA6LTNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiQWRkaW5nIiwgYXJjbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoZm5hbWUsIGFyY25hbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBwYXRobmFtZVstMzpdICE9ICIucHkiOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAnRmlsZXMgYWRkZWQgd2l0aCB3cml0ZXB5KCkgbXVzdCBlbmQgd2l0aCAiLnB5IicpCisgICAgICAgICAgICAgICAgICAgICdGaWxlcyBhZGRlZCB3aXRoIHdyaXRlcHkoKSBtdXN0IGVuZCB3aXRoICIucHkiJykKICAgICAgICAgICAgIGZuYW1lLCBhcmNuYW1lID0gc2VsZi5fZ2V0X2NvZGVuYW1lKHBhdGhuYW1lWzA6LTNdLCBiYXNlbmFtZSkKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CiAgICAgICAgICAgICAgICAgcHJpbnQoIkFkZGluZyBmaWxlIiwgYXJjbmFtZSkKQEAgLTE2NTQsOCArMTY3Niw4IEBACiAgICAgICAgIGZpbGVfcHkgID0gcGF0aG5hbWUgKyAiLnB5IgogICAgICAgICBmaWxlX3B5YyA9IHBhdGhuYW1lICsgIi5weWMiCiAgICAgICAgIGZpbGVfcHlvID0gcGF0aG5hbWUgKyAiLnB5byIKLSAgICAgICAgcHljYWNoZV9weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgVHJ1ZSkKLSAgICAgICAgcHljYWNoZV9weW8gPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgRmFsc2UpCisgICAgICAgIHB5Y2FjaGVfcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgVHJ1ZSkKKyAgICAgICAgcHljYWNoZV9weW8gPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBGYWxzZSkKICAgICAgICAgaWYgc2VsZi5fb3B0aW1pemUgPT0gLTE6CiAgICAgICAgICAgICAjIGxlZ2FjeSBtb2RlOiB1c2Ugd2hhdGV2ZXIgZmlsZSBpcyBwcmVzZW50CiAgICAgICAgICAgICBpZiAob3MucGF0aC5pc2ZpbGUoZmlsZV9weW8pIGFuZApAQCAtMTc2NiwxMCArMTc4OCwxMCBAQAogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgICAgICAgICAgIGZvciBubSBpbiBvcy5saXN0ZGlyKHBhdGgpOgogICAgICAgICAgICAgICAgICAgICBhZGRUb1ppcCh6ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aCwgbm0pLCBvcy5wYXRoLmpvaW4oemlwcGF0aCwgbm0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aCwgbm0pLCBvcy5wYXRoLmpvaW4oemlwcGF0aCwgbm0pKQogICAgICAgICAgICAgIyBlbHNlOiBpZ25vcmUKIAotICAgICAgICB3aXRoIFppcEZpbGUoYXJnc1sxXSwgJ3cnLCBhbGxvd1ppcDY0PVRydWUpIGFzIHpmOgorICAgICAgICB3aXRoIFppcEZpbGUoYXJnc1sxXSwgJ3cnKSBhcyB6ZjoKICAgICAgICAgICAgIGZvciBzcmMgaW4gYXJnc1syOl06CiAgICAgICAgICAgICAgICAgYWRkVG9aaXAoemYsIHNyYywgb3MucGF0aC5iYXNlbmFtZShzcmMpKQogCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvUkVBRE1FLnR4dCBiL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CmluZGV4IDU2Yzc2OWEuLjBhNmI1NDQgMTAwNjQ0Ci0tLSBhL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CisrKyBiL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CkBAIC04LDcgKzgsNyBAQAogYW4gSW5zdGFsbGVyIHBhY2thZ2UgZnJvbSB0aGUgaW5zdGFsbGF0aW9uIHBsdXMgb3RoZXIgZmlsZXMgaW4gYGByZXNvdXJjZXNgYCAKIGFuZCBgYHNjcmlwdHNgYCBhbmQgcGxhY2VkIHRoYXQgb24gYSBgYC5kbWdgYCBkaXNrIGltYWdlLgogCi1BcyBvZiBQeXRob24gMy4zLjAsIFBTRiBwcmFjdGljZSBpcyB0byBidWlsZCB0d28gaW5zdGFsbGVyIHZhcmlhbnRzCitGb3IgUHl0aG9uIDMuNC4wLCBQU0YgcHJhY3RpY2UgaXMgdG8gYnVpbGQgdHdvIGluc3RhbGxlciB2YXJpYW50cwogZm9yIGVhY2ggcmVsZWFzZS4KIAogMS4gIDMyLWJpdC1vbmx5LCBpMzg2IGFuZCBQUEMgdW5pdmVyc2FsLCBjYXBhYmxlIG9uIHJ1bm5pbmcgb24gYWxsIG1hY2hpbmVzCkBAIC0yMiw4ICsyMiw4IEBACiAgICAgLSBidWlsZHMgdGhlIGZvbGxvd2luZyB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIAogICAgICAgICAqIE5DdXJzZXMgNS45IChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTUwMzcpCi0gICAgICAgICogU1FMaXRlIDMuNy4xMwotICAgICAgICAqIFhaIDUuMC4zCisgICAgICAgICogU1FMaXRlIDMuOC4xCisgICAgICAgICogWFogNS4wLjUKIAogICAgIC0gdXNlcyBzeXN0ZW0tc3VwcGxpZWQgdmVyc2lvbnMgb2YgdGhpcmQtcGFydHkgbGlicmFyaWVzCiAKQEAgLTU2LDE0ICs1NiwxNCBAQAogICAgIC0gYnVpbGRzIHRoZSBmb2xsb3dpbmcgdGhpcmQtcGFydHkgbGlicmFyaWVzCiAKICAgICAgICAgKiBOQ3Vyc2VzIDUuOSAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE1MDM3KQotICAgICAgICAqIFNRTGl0ZSAzLjcuMTMKLSAgICAgICAgKiBYWiA1LjAuMworICAgICAgICAqIFNRTGl0ZSAzLjguMQorICAgICAgICAqIFhaIDUuMC41CiAKICAgICAtIHVzZXMgc3lzdGVtLXN1cHBsaWVkIHZlcnNpb25zIG9mIHRoaXJkLXBhcnR5IGxpYnJhcmllcwogCiAgICAgICAgICogcmVhZGxpbmUgbW9kdWxlIGxpbmtzIHdpdGggQXBwbGUgQlNEIGVkaXRsaW5lIChsaWJlZGl0KQogCi0gICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBUY2wvVGsgOC41LjkgKG9yIGxhdGVyKSB0byBiZSBpbnN0YWxsZWQgZm9yIGJ1aWxkaW5nCisgICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBUY2wvVGsgOC41LjE1IChvciBsYXRlcikgdG8gYmUgaW5zdGFsbGVkIGZvciBidWlsZGluZwogCiAgICAgLSByZWNvbW1lbmRlZCBidWlsZCBlbnZpcm9ubWVudDoKIApkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weSBiL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKaW5kZXggZmQ1ZDVjMy4uMGFhZmNkMCAxMDA3NTUKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQorKysgYi9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CkBAIC0xOTMsNyArMTkzLDggQEAKIAogICAgIExUXzEwXzUgPSBib29sKERFUFRBUkdFVCA8ICcxMC41JykKIAotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKKyMgICBEaXNhYmxlIGZvciBub3cKKyAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA1KSk6CiAgICAgICAgIHJlc3VsdC5leHRlbmQoWwogICAgICAgICAgIGRpY3QoCiAgICAgICAgICAgICAgIG5hbWU9IlRjbCA4LjUuMTUiLApAQCAtMjM3LDkgKzIzOCw5IEBACiAgICAgaWYgZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDMpOgogICAgICAgICByZXN1bHQuZXh0ZW5kKFsKICAgICAgICAgICBkaWN0KAotICAgICAgICAgICAgICBuYW1lPSJYWiA1LjAuMyIsCi0gICAgICAgICAgICAgIHVybD0iaHR0cDovL3R1a2Fhbmkub3JnL3h6L3h6LTUuMC4zLnRhci5neiIsCi0gICAgICAgICAgICAgIGNoZWNrc3VtPSdmZWZlNTJmOWVjZDUyMWRlMmE4Y2UzOGMyMWEyNzU3NCcsCisgICAgICAgICAgICAgIG5hbWU9IlhaIDUuMC41IiwKKyAgICAgICAgICAgICAgdXJsPSJodHRwOi8vdHVrYWFuaS5vcmcveHoveHotNS4wLjUudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09JzE5ZDkyNGUwNjZiNmZmZjBiYzlkMTk4MWI0ZTUzMTk2JywKICAgICAgICAgICAgICAgY29uZmlndXJlX3ByZT1bCiAgICAgICAgICAgICAgICAgICAgICctLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZycsCiAgICAgICAgICAgICAgIF0KQEAgLTI4Miw5ICsyODMsOSBAQAogICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICApLAogICAgICAgICAgIGRpY3QoCi0gICAgICAgICAgICAgIG5hbWU9IlNRTGl0ZSAzLjcuMTMiLAotICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cuc3FsaXRlLm9yZy9zcWxpdGUtYXV0b2NvbmYtMzA3MTMwMC50YXIuZ3oiLAotICAgICAgICAgICAgICBjaGVja3N1bT0nYzk3ZGY0MDNlOGEzZDViNjdiYjQwOGZjZDZhYWJkOGUnLAorICAgICAgICAgICAgICBuYW1lPSJTUUxpdGUgMy44LjMiLAorICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cuc3FsaXRlLm9yZy8yMDE0L3NxbGl0ZS1hdXRvY29uZi0zMDgwMzAwLnRhci5neiIsCisgICAgICAgICAgICAgIGNoZWNrc3VtPScxMTU3Mjg3OGRjMGFjNzRhZTM3MDM2N2E0NjRhYjVjZicsCiAgICAgICAgICAgICAgIGV4dHJhX2NmbGFncz0oJy1PcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1EU1FMSVRFX0VOQUJMRV9GVFM0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLURTUUxJVEVfRU5BQkxFX0ZUUzNfUEFSRU5USEVTSVMgJwpAQCAtMzY0LDYgKzM2NSw3IEBACiAjIEluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgcGFja2FnZXMgaW5zaWRlIHRoZSAubXBrZy4KIGRlZiBwa2dfcmVjaXBlcygpOgogICAgIHVuc2VsZWN0ZWRfZm9yX3B5dGhvbjMgPSAoJ3NlbGVjdGVkJywgJ3Vuc2VsZWN0ZWQnKVtQWVRIT05fM10KKyAgICB1bnNlbGVjdGVkX2Zvcl9sdF9weXRob24zNCA9ICgnc2VsZWN0ZWQnLCAndW5zZWxlY3RlZCcpW2dldFZlcnNpb25UdXBsZSgpIDwgKDMsIDQpXQogICAgIHJlc3VsdCA9IFsKICAgICAgICAgZGljdCgKICAgICAgICAgICAgIG5hbWU9IlB5dGhvbkZyYW1ld29yayIsCkBAIC00MzIsMTAgKzQzNCwyNyBAQAogICAgICAgICAgICAgdG9wZGlyPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsiLAogICAgICAgICAgICAgc291cmNlPSIvZW1wdHktZGlyIiwKICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAotICAgICAgICAgICAgc2VsZWN0ZWQ9dW5zZWxlY3RlZF9mb3JfcHl0aG9uMywKKyAgICAgICAgICAgIHNlbGVjdGVkPXVuc2VsZWN0ZWRfZm9yX2x0X3B5dGhvbjM0LAogICAgICAgICApLAogICAgIF0KIAorICAgIGlmIGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KToKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgICAgbmFtZT0iUHl0aG9uSW5zdGFsbFBpcCIsCisgICAgICAgICAgICAgICAgbG9uZ19uYW1lPSJJbnN0YWxsIG9yIHVwZ3JhZGUgcGlwIiwKKyAgICAgICAgICAgICAgICByZWFkbWU9IiIiXAorICAgICAgICAgICAgICAgICAgICBUaGlzIHBhY2thZ2UgaW5zdGFsbHMgKG9yIHVwZ3JhZGVzIGZyb20gYW4gZWFybGllciB2ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICBwaXAsIGEgdG9vbCBmb3IgaW5zdGFsbGluZyBhbmQgbWFuYWdpbmcgUHl0aG9uIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICAgICAiIiIsCisgICAgICAgICAgICAgICAgcG9zdGZsaWdodD0ic2NyaXB0cy9wb3N0ZmxpZ2h0LmVuc3VyZXBpcCIsCisgICAgICAgICAgICAgICAgdG9wZGlyPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsiLAorICAgICAgICAgICAgICAgIHNvdXJjZT0iL2VtcHR5LWRpciIsCisgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9J3NlbGVjdGVkJywKKyAgICAgICAgICAgICkKKyAgICAgICAgKQorCiAgICAgaWYgREVQVEFSR0VUIDwgJzEwLjQnIGFuZCBub3QgUFlUSE9OXzM6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoCiAgICAgICAgICAgICBkaWN0KApAQCAtNDUzLDYgKzQ3Miw3IEBACiAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9dW5zZWxlY3RlZF9mb3JfcHl0aG9uMywKICAgICAgICAgICAgICkKICAgICAgICAgKQorCiAgICAgcmV0dXJuIHJlc3VsdAogCiBkZWYgZmF0YWwobXNnKToKQEAgLTU2NywyMCArNTg3LDYgQEAKICAgICAgICAgICAgICAgICAlIGZyYW1ld29ya3NbJ1RrJ10sCiAgICAgICAgICAgICBdCiAKLSAgICAjIEZvciAxMC42KyBidWlsZHMsIHdlIGJ1aWxkIHR3byB2ZXJzaW9ucyBvZiBfdGtpbnRlcjoKLSAgICAjICAgIC0gdGhlIHRyYWRpdGlvbmFsIHZlcnNpb24gKHJlbmFtZWQgdG8gX3RraW50ZXJfbGlicmFyeS5zbykgbGlua2VkCi0gICAgIyAgICAgICB3aXRoIC9MaWJyYXJ5L0ZyYW1ld29ya3Mve1RjbCxUa30uZnJhbWV3b3JrCi0gICAgIyAgICAtIHRoZSBkZWZhdWx0IHZlcnNpb24gbGlua2VkIHdpdGggb3VyIGJ1aWx0aW4gY29waWVzIG9mIFRjbCBhbmQgVGsKLSAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgIEVYUEVDVEVEX1NIQVJFRF9MSUJTWydfdGtpbnRlcl9saWJyYXJ5LnNvJ10gPSBcCi0gICAgICAgICAgICBFWFBFQ1RFRF9TSEFSRURfTElCU1snX3RraW50ZXIuc28nXQotICAgICAgICBFWFBFQ1RFRF9TSEFSRURfTElCU1snX3RraW50ZXIuc28nXSA9IFsKLSAgICAgICAgICAgICAgICAiL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLyVzL2xpYi9saWJ0Y2wlcy5keWxpYiIKLSAgICAgICAgICAgICAgICAgICAgJSAoZ2V0VmVyc2lvbigpLCBmcmFtZXdvcmtzWydUY2wnXSksCi0gICAgICAgICAgICAgICAgIi9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8lcy9saWIvbGlidGslcy5keWxpYiIKLSAgICAgICAgICAgICAgICAgICAgJSAoZ2V0VmVyc2lvbigpLCBmcmFtZXdvcmtzWydUayddKSwKLSAgICAgICAgICAgICAgICBdCi0KICAgICAjIFJlbW92ZSBpbmhlcml0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoaWNoIG1pZ2h0IGluZmx1ZW5jZSBidWlsZAogICAgIGVudmlyb25fdmFyX3ByZWZpeGVzID0gWydDUEFUSCcsICdDX0lOQ0xVREVfJywgJ0RZTERfJywgJ0xBTkcnLCAnTENfJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTERfJywgJ0xJQlJBUllfJywgJ1BBVEgnLCAnUFlUSE9OJ10KQEAgLTk1NSwzNCArOTYxLDE5IEBACiAgICAgcnVuQ29tbWFuZCgiJXMgLUMgLS1lbmFibGUtZnJhbWV3b3JrIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz0lcyAiCiAgICAgICAgICAgICAgICAiLS13aXRoLXVuaXZlcnNhbC1hcmNocz0lcyAiCiAgICAgICAgICAgICAgICAiJXMgIgorICAgICAgICAgICAgICAgIiVzICIKICAgICAgICAgICAgICAgICJMREZMQUdTPSctZyAtTCVzL2xpYnJhcmllcy91c3IvbG9jYWwvbGliJyAiCiAgICAgICAgICAgICAgICAiQ0ZMQUdTPSctZyAtSSVzL2xpYnJhcmllcy91c3IvbG9jYWwvaW5jbHVkZScgMj4mMSIlKAogICAgICAgICBzaGVsbFF1b3RlKG9zLnBhdGguam9pbihTUkNESVIsICdjb25maWd1cmUnKSksIHNoZWxsUXVvdGUoU0RLUEFUSCksCiAgICAgICAgIFVOSVZFUlNBTEFSQ0hTLAogICAgICAgICAoJyAnLCAnLS13aXRoLWNvbXB1dGVkLWdvdG9zICcpW1BZVEhPTl8zXSwKKyAgICAgICAgKCcgJywgJy0td2l0aG91dC1lbnN1cmVwaXAgJylbZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpXSwKICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSwKICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSkpCiAKICAgICBwcmludCgiUnVubmluZyBtYWtlIikKICAgICBydW5Db21tYW5kKCJtYWtlIikKIAotICAgICMgRm9yIGRlcGxveW1lbnQgdGFyZ2V0cyBvZiAxMC42IGFuZCBoaWdoZXIsIHdlIGJ1aWxkIG91ciBvd24gdmVyc2lvbgotICAgICMgb2YgVGNsIGFuZCBDb2NvYSBBcXVhIFRrIGxpYnMgYmVjYXVzZSB0aGUgQXBwbGUtc3VwcGxpZWQgVGsgOC41IGlzCi0gICAgIyBvdXQtb2YtZGF0ZSBhbmQgaGFzIGNyaXRpY2FsIGJ1Z3MuICBTYXZlIHRoZSBfdGtpbnRlci5zbyB0aGF0IHdhcwotICAgICMgbGlua2VkIHdpdGggL0xpYnJhcnkvRnJhbWV3b3Jrcy97VGNrLFRrfS5mcmFtZXdvcmsgYW5kIGJ1aWxkCi0gICAgIyBhbm90aGVyIF90a2ludGVyLnNvIGxpbmtlZCB3aXRoIG91ciBidWlsdGluIFRjbCBhbmQgVGsgbGlicy4KLSAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgIHJ1bkNvbW1hbmQoImZpbmQgYnVpbGQgLW5hbWUgJ190a2ludGVyLnNvJyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIC1leGVjZGlyIG12ICd7fScgX3RraW50ZXJfbGlicmFyeS5zbyBcOyIpCi0gICAgICAgIHByaW50KCJSdW5uaW5nIG1ha2UgdG8gYnVpbGQgYnVpbHRpbiBfdGtpbnRlciIpCi0gICAgICAgIHJ1bkNvbW1hbmQoIm1ha2UgVENMVEtfSU5DTFVERVM9Jy1JJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9pbmNsdWRlJyAiCi0gICAgICAgICAgICAgICAgIlRDTFRLX0xJQlM9Jy1MJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9saWIgLWx0Y2w4LjUgLWx0azguNSciJSgKLSAgICAgICAgICAgIHNoZWxsUXVvdGUoV09SS0RJUilbMTotMV0sCi0gICAgICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdKSkKLSAgICAgICAgIyBtYWtlIGEgY29weSB3aGljaCB3aWxsIGJlIG1vdmVkIHRvIGxpYi10a2ludGVyIGxhdGVyCi0gICAgICAgIHJ1bkNvbW1hbmQoImZpbmQgYnVpbGQgLW5hbWUgJ190a2ludGVyLnNvJyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIC1leGVjZGlyIGNwIC1wICd7fScgX3RraW50ZXJfYnVpbHRpbi5zbyBcOyIpCi0KICAgICBwcmludCgiUnVubmluZyBtYWtlIGluc3RhbGwiKQogICAgIHJ1bkNvbW1hbmQoIm1ha2UgaW5zdGFsbCBERVNURElSPSVzIiUoCiAgICAgICAgIHNoZWxsUXVvdGUocm9vdERpcikpKQpAQCAtMTAwNywyNyArOTk4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQeXRob24uZnJhbWV3b3JrJywgJ1ZlcnNpb25zJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiwgJ2xpYicsICdweXRob24lcyclKHZlcnNpb24sKSkKIAotICAgICMgSWYgd2UgbWFkZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBfdGtpbnRlciwgbW92ZSB0aGVtIHRvCi0gICAgIyB0aGVpciBvd24gZGlyZWN0b3JpZXMgdW5kZXIgcHl0aG9uIGxpYi4gIFRoaXMgYWxsb3dzCi0gICAgIyB1c2VycyB0byBzZWxlY3Qgd2hpY2ggdG8gaW1wb3J0IGJ5IG1hbmlwdWxhdGluZyBzeXMucGF0aAotICAgICMgZGlyZWN0bHkgb3Igd2l0aCBQWVRIT05QQVRILgotCi0gICAgaWYgKERFUFRBUkdFVCA+ICcxMC41JykgYW5kIChnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNCkpOgotICAgICAgICBUS0lOVEVSUyA9IFsnYnVpbHRpbicsICdsaWJyYXJ5J10KLSAgICAgICAgdGtpbnRlcl9tb3ZlcyA9IFsoJ190a2ludGVyXycgKyB0a24gKyAnLnNvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHBhdGhfdG9fbGliLCAnbGliLXRraW50ZXInLCB0a24pKQotICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0a24gaW4gVEtJTlRFUlNdCi0gICAgICAgICMgQ3JlYXRlIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcyB1bmRlciBsaWItdGtpbnRlci4KLSAgICAgICAgIyBUaGUgcGVybWlzc2lvbnMgYW5kIHVpZC9naWQgd2lsbCBiZSBmaXhlZCB1cCBuZXh0LgotICAgICAgICBmb3IgdGttIGluIHRraW50ZXJfbW92ZXM6Ci0gICAgICAgICAgICBvcy5tYWtlZGlycyh0a21bMV0pCi0KICAgICBwcmludCgiRml4IGZpbGUgbW9kZXMiKQogICAgIGZybURpciA9IG9zLnBhdGguam9pbihyb290RGlyLCAnTGlicmFyeScsICdGcmFtZXdvcmtzJywgJ1B5dGhvbi5mcmFtZXdvcmsnKQogICAgIGdpZCA9IGdycC5nZXRncm5hbSgnYWRtaW4nKS5ncl9naWQKIAogICAgIHNoYXJlZF9saWJfZXJyb3IgPSBGYWxzZQotICAgIG1vdmVzX2xpc3QgPSBbXQogICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoZnJtRGlyKToKICAgICAgICAgZm9yIGRuIGluIGRpcm5hbWVzOgogICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGRpcnBhdGgsIGRuKSwgU1RBVF8wbzc3NSkKQEAgLTEwNTMsMjUgKzEwMjgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzbCwgcCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfbGliX2Vycm9yID0gVHJ1ZQogCi0gICAgICAgICAgICAjIElmIHRoaXMgaXMgYSBfdGtpbnRlciB2YXJpYW50LCBtb3ZlIGl0IHRvIGl0cyBvd24gZGlyZWN0b3J5Ci0gICAgICAgICAgICAjIG5vdyB0aGF0IHdlIGhhdmUgZml4ZWQgaXRzIHBlcm1pc3Npb25zIGFuZCBjaGVja2VkIHRoYXQgaXQKLSAgICAgICAgICAgICMgd2FzIGxpbmtlZCBwcm9wZXJseS4gIFRoZSBkaXJlY3Rvcnkgd2FzIGNyZWF0ZWQgZWFybGllci4KLSAgICAgICAgICAgICMgVGhlIGZpbGVzIGFyZSBtb3ZlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gd2Fsa2VkCi0gICAgICAgICAgICAjIHNpbmNlIHRoZSBzaGFyZWQgbGlicmFyeSBjaGVja2luZyBkZXBlbmRzIG9uIHRoZSBmaWxlcwotICAgICAgICAgICAgIyBoYXZpbmcgdW5pcXVlIG5hbWVzLgotICAgICAgICAgICAgaWYgKERFUFRBUkdFVCA+ICcxMC41JykgYW5kIChnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNCkpOgotICAgICAgICAgICAgICAgIGZvciB0a20gaW4gdGtpbnRlcl9tb3ZlczoKLSAgICAgICAgICAgICAgICAgICAgaWYgZm4gPT0gdGttWzBdOgotICAgICAgICAgICAgICAgICAgICAgICAgbW92ZXNfbGlzdC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHAsIG9zLnBhdGguam9pbih0a21bMV0sICdfdGtpbnRlci5zbycpKSkKLQogICAgIGlmIHNoYXJlZF9saWJfZXJyb3I6CiAgICAgICAgIGZhdGFsKCJVbmV4cGVjdGVkIHNoYXJlZCBsaWJyYXJ5IGVycm9ycy4iKQogCi0gICAgIyBOb3cgZG8gdGhlIG1vdmVzLgotICAgIGZvciBtbCBpbiBtb3Zlc19saXN0OgotICAgICAgICBzaHV0aWwubW92ZShtbFswXSwgbWxbMV0pCi0KICAgICBpZiBQWVRIT05fMzoKICAgICAgICAgTERWRVJTSU9OPU5vbmUKICAgICAgICAgVkVSU0lPTj1Ob25lCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQKaW5kZXggMjEyZDk2My4uZTA2MWEwNiAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUudHh0CisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dApAQCAtMjgsNiArMjgsMzYgQEAKIGZvciBjdXJyZW50IGluZm9ybWF0aW9uIGFib3V0IHN1cHBvcnRlZCBhbmQgcmVjb21tZW5kZWQgdmVyc2lvbnMgb2YKIFRjbC9UayBmb3IgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbiBhbmQgb2YgTWFjIE9TIFguCiAKKyAgICAgICAgICAgICAgKipORVcqIEFzIG9mIFB5dGhvbiAzLjQuMGIxOgorCitOZXcgSW5zdGFsbGF0aW9uIE9wdGlvbnMgYW5kIERlZmF1bHRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBQeXRob24gaW5zdGFsbGVyIG5vdyBpbmNsdWRlcyBhbiBvcHRpb24gdG8gYXV0b21hdGljYWxseSBpbnN0YWxsCitvciB1cGdyYWRlIHBpcCwgYSB0b29sIGZvciBpbnN0YWxsaW5nIGFuZCBtYW5hZ2luZyBQeXRob24gcGFja2FnZXMuCitUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYW5kIG5vIEludGVybmV0IGFjY2VzcyBpcyByZXF1aXJlZC4KK0lmIHlvdSBkbyBub3Qgd2FudCB0aGUgaW5zdGFsbGVyIHRvIGRvIHRoaXMsIHNlbGVjdCB0aGUgIkN1c3RvbWl6ZSIKK29wdGlvbiBhdCB0aGUgIkluc3RhbGxhdGlvbiBUeXBlIiBzdGVwIGFuZCB1bmNoZWNrIHRoZSAiSW5zdGFsbCBvcgordWdwcmFkZSBwaXAiIG9wdGlvbi4KKworVG8gbWFrZSBpdCBlYXNpZXIgdG8gdXNlIHNjcmlwdHMgaW5zdGFsbGVkIGJ5IHRoaXJkLXBhcnR5IFB5dGhvbgorcGFja2FnZXMsIHdpdGggcGlwIG9yIGJ5IG90aGVyIG1lYW5zLCB0aGUgIlNoZWxsIHByb2ZpbGUgdXBkYXRlciIKK29wdGlvbiBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0LCBhcyBoYXMgYmVlbiB0aGUgY2FzZSB3aXRoIFB5dGhvbgorMi43LnggaW5zdGFsbGVycy4gWW91IGNhbiBhbHNvIHR1cm4gdGhpcyBvcHRpb24gb2ZmIGJ5IHNlbGVjdGluZworIkN1c3RvbWl6ZSIgYW5kIHVuY2hlY2tpbmcgdGhlICJTaGVsbCBwcm9maWxlIHVwZGF0ZXIiIG9wdGlvbi4gWW91CitjYW4gYWxzbyB1cGRhdGUgeW91ciBzaGVsbCBwcm9maWxlIGxhdGVyIGJ5IGxhdW5jaGluZyB0aGUgIlVwZGF0ZQorU2hlbGwgUHJvZmlsZSIgY29tbWFuZCBmb3VuZCBpbiB0aGUgL0FwcGxpY2F0aW9ucy9QeXRob24gJFZFUlNJT04KK2ZvbGRlci4gIFlvdSBtYXkgbmVlZCB0byBzdGFydCBhIG5ldyB0ZXJtaW5hbCB3aW5kb3cgZm9yIHRoZQorY2hhbmdlcyB0byB0YWtlIGVmZmVjdC4KKworUHl0aG9uLm9yZyBQeXRob24gJFZFUlNJT04gYW5kIDIuNy54IHZlcnNpb25zIGNhbiBib3RoIGJlIGluc3RhbGxlZCBhbmQKK3dpbGwgbm90IGNvbmZsaWN0LiBDb21tYW5kIG5hbWVzIGZvciBQeXRob24gMyBjb250YWluIGEgMyBpbiB0aGVtLAorcHl0aG9uMyAob3IgcHl0aG9uJFZFUlNJT04pLCBpZGxlMyAob3IgaWRsZSRWRVJTSU9OKSwgcGlwMyAob3IgcGlwJFZFUlNJT04pLCBldGMuCitQeXRob24gMi43IGNvbW1hbmQgbmFtZXMgY29udGFpbiBhIDIgb3Igbm8gZGlnaXQ6IHB5dGhvbjIgKG9yCitweXRob24yLjcgb3IgcHl0aG9uKSwgaWRsZTIgKG9yIGlkbGUyLjcgb3IgaWRsZSksIGV0Yy4gSWYgeW91IHdhbnQgdG8KK3VzZSBwaXAgd2l0aCBQeXRob24gMi43LngsIHlvdSB3aWxsIG5lZWQgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwgYQorc2VwYXJhdGUgY29weSBvZiBpdCBmcm9tIHRoZSBQeXRob24gUGFja2FnZSBJbmRleAorKGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkpLgogCiBVc2luZyB0aGlzIHZlcnNpb24gb2YgUHl0aG9uIG9uIE9TIFgKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZiBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKaW5kZXggMjM5ZDc2ZS4uODg2ZWJmZSAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgorKysgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCkBAIC0xLDUgKzEsNSBAQAoge1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMTg3XGNvY29hc3VicnRmNDAwCi1cY29jb2FzY3JlZW5mb250czF7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7fQorXGNvY29hc2NyZWVuZm9udHMxe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO1xmMVxmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyTmV3UFNNVDt9CiB7XGNvbG9ydGJsO1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CiBccGFwZXJ3MTE5MDVccGFwZXJoMTY4MzdcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzk2NDBcdmlld2gxMDYyMFx2aWV3a2luZDAKIFxwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDAKQEAgLTE2LDEzICsxNiwxNyBAQAogXGIgSURMRQogXGIwICBhbmQgYSBzZXQgb2YgcHJlLWJ1aWx0IGV4dGVuc2lvbiBtb2R1bGVzIHRoYXQgb3BlbiB1cCBzcGVjaWZpYyBNYWNpbnRvc2ggdGVjaG5vbG9naWVzIHRvIFB5dGhvbiBwcm9ncmFtcy5cCiBcCi1TZWUgdGhlIFJlYWRNZSBmaWxlIGFuZCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXAotXAogCi1cYiBOT1RFOiAKLVxiMCBUaGlzIHBhY2thZ2Ugd2lsbCBub3QgdXBkYXRlIHlvdXIgc2hlbGwgcHJvZmlsZSBieSBkZWZhdWx0LiAgRG91YmxlLWNsaWNrIAotXGIgVXBkYXRlIFNoZWxsIFByb2ZpbGUKLVxiMCAgYXQgYW55IHRpbWUgdG8gbWFrZSAkRlVMTF9WRVJTSU9OIHRoZSBkZWZhdWx0IFB5dGhvbiAzIHZlcnNpb24uICBUaGlzIHZlcnNpb24gY2FuIGNvLWV4aXN0IHdpdGggb3RoZXIgaW5zdGFsbGVkIHZlcnNpb25zIG9mIFB5dGhvbiAzIGFuZCBQeXRob24gMi5cCitcYiBORVcgZm9yIFB5dGhvbiAzLjQ6IAorXGIwIFRoaXMgcGFja2FnZSBub3cgdXBkYXRlcyB5b3VyIHNoZWxsIHByb2ZpbGUgYnkgZGVmYXVsdCB0byBtYWtlICRGVUxMX1ZFUlNJT04gdGhlIGRlZmF1bHQgUHl0aG9uIDMgdmVyc2lvbi4gIFRoaXMgdmVyc2lvbiBjYW4gY28tZXhpc3Qgd2l0aCBvdGhlciBpbnN0YWxsZWQgdmVyc2lvbnMgb2YgUHl0aG9uIDMgYW5kIFB5dGhvbiAyLiAgVGhpcyBwYWNrYWdlIGFsc28gaW5zdGFsbHMgYSB2ZXJzaW9uIG9mIAorXGYxIHBpcAorXGYwICwgdGhlIHJlY29tbWVuZGVkIHRvb2wgZm9yIGluc3RhbGxpbmcgYW5kIG1hbmFnaW5nIFB5dGhvbiBwYWNrYWdlcy4gICBUeXBlXAorXAorCQorXGYxIHBpcDMuNCAtLWhlbHAKK1xmMCBcCitcCitmb3IgYW4gb3ZlcnZpZXcuICBTZWUgdGhlIFJlYWRNZSBmaWxlIGFuZCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXAogXAogCiBcYiBJTVBPUlRBTlQ6CmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmVuc3VyZXBpcCBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiOTdjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmVuc3VyZXBpcApAQCAtMCwwICsxLDY1IEBACisjIS9iaW4vc2gKKyMKKyMgSW5zdGFsbC91cGdyYWRlIHBpcC4KKyMKKworUFlWRVI9IkBQWVZFUkAiCitQWU1BSk9SPSIzIgorRldLPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvJHtQWVZFUn0iCitSRUxGV0tCSU49Ii4uLy4uLy4uJHtGV0t9L2JpbiIKKwordW1hc2sgMDIyCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtbSBlbnN1cmVwaXAgLS11cGdyYWRlCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtV2kgXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIFwKKyAgICAtZiAteCBiYWRzeW50YXggXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtV2kgLU8gXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIFwKKyAgICAtZiAteCBiYWRzeW50YXggXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiCisKK2NoZ3JwIC1SIGFkbWluICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiICIke0ZXS30vYmluIgorY2htb2QgLVIgZyt3ICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiICIke0ZXS30vYmluIgorCisjIFdlIGRvIG5vdCBrbm93IGlmIHRoZSB1c2VyIHNlbGVjdGVkIHRoZSBQeXRob24gY29tbWFuZC1saW5lIHRvb2xzCisjIHBhY2thZ2UgdGhhdCBpbnN0YWxscyBzeW1saW5rcyB0byAvdXNyL2xvY2FsL2Jpbi4gIFNvIHdlIGFzc3VtZQorIyB0aGF0IHRoZSBjb21tYW5kLWxpbmUgdG9vbHMgcGFja2FnZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgb3Igd2FzCisjIG5vdCBzZWxlY3RlZCBhbmQgd2Ugd2lsbCBvbmx5IGluc3RhbGwgL3Vzci9sb2NhbC9iaW4gc3ltbGlua3MgZm9yCisjIHBpcCBldCBhbCBpZiB0aGVyZSBhcmUgL3Vzci9sb2NhbC9iaW4vcHl0aG9uKiBzeW1saW5rcyB0byBvdXIKKyMgZnJhbWV3b3JrIGJpbiBkaXJlY3RvcnkuCisKK2lmIFsgLWQgL3Vzci9sb2NhbC9iaW4gXSA7IHRoZW4KKyAgICAoCisgICAgICAgIGNkIC91c3IvbG9jYWwvYmluCisgICAgICAgICMgQ3JlYXRlIHBpcHgueSBhbmQgZWFzeV9pbnN0YWxsLXgueSBsaW5rcyBpZiAvdXNyL2xvY2FsL2Jpbi9weXRob254LnkKKyAgICAgICAgIyAgIGlzIGxpbmtlZCB0byB0aGlzIGZyYW1ld29yayB2ZXJzaW9uCisgICAgICAgIGlmIFsgIiQocmVhZGxpbmsgLW4gLi9weXRob24ke1BZVkVSfSkiID0gIiR7UkVMRldLQklOfS9weXRob24ke1BZVkVSfSIgXSA7IHRoZW4KKyAgICAgICAgICAgIGZvciBmbiBpbiAicGlwJHtQWVZFUn0iICJlYXN5X2luc3RhbGwtJHtQWVZFUn0iIDsKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgaWYgWyAtZSAiJHtSRUxGV0tCSU59LyR7Zm59IiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBybSAtZiAuLyR7Zm59CisgICAgICAgICAgICAgICAgICAgIGxuIC1zICIke1JFTEZXS0JJTn0vJHtmbn0iICIuLyR7Zm59IgorICAgICAgICAgICAgICAgICAgICBjaGdycCAtaCBhZG1pbiAiLi8ke2ZufSIKKyAgICAgICAgICAgICAgICAgICAgY2htb2QgLWggZyt3ICIuLyR7Zm59IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisgICAgICAgICMgQ3JlYXRlIHBpcHggbGluayBpZiAvdXNyL2xvY2FsL2Jpbi9weXRob254IGlzIGxpbmtlZCB0byB0aGlzIHZlcnNpb24KKyAgICAgICAgaWYgWyAiJChyZWFkbGluayAtbiAuL3B5dGhvbiR7UFlNQUpPUn0pIiA9ICIke1JFTEZXS0JJTn0vcHl0aG9uJHtQWU1BSk9SfSIgXSA7IHRoZW4KKyAgICAgICAgICAgIGZvciBmbiBpbiAicGlwJHtQWU1BSk9SfSIgOworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICBpZiBbIC1lICIke1JFTEZXS0JJTn0vJHtmbn0iIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHJtIC1mIC4vJHtmbn0KKyAgICAgICAgICAgICAgICAgICAgbG4gLXMgIiR7UkVMRldLQklOfS8ke2ZufSIgIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgICAgIGNoZ3JwIC1oIGFkbWluICIuLyR7Zm59IgorICAgICAgICAgICAgICAgICAgICBjaG1vZCAtaCBnK3cgIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICApCitmaQorZXhpdCAwCmRpZmYgLS1naXQgYS9NYWMvTWFrZWZpbGUuaW4gYi9NYWMvTWFrZWZpbGUuaW4KaW5kZXggNWNiNjY0ZC4uMDNlYzczOCAxMDA2NDQKLS0tIGEvTWFjL01ha2VmaWxlLmluCisrKyBiL01hYy9NYWtlZmlsZS5pbgpAQCAtMyw5ICszLDEzIEBACiAjIGNvbW1hbmRsaW5lIGluIHRoYXQgY2FzZS4KIAogVkVSU0lPTj1AVkVSU0lPTkAKK0FCSUZMQUdTPUBBQklGTEFHU0AKK0xEVkVSU0lPTj1ATERWRVJTSU9OQAorRU5TVVJFUElQPUBFTlNVUkVQSVBACiBidWlsZGRpciA9IC4uCiBzcmNkaXI9QHNyY2RpckAKIHByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAogTElCREVTVD0kKHByZWZpeCkvbGliL3B5dGhvbiQoVkVSU0lPTikKIFJVTlNIQVJFRD1AUlVOU0hBUkVEQAogQlVJTERFWEU9QEJVSUxERVhFRVhUQApAQCAtMjMsNyArMjcsNyBAQAogCiAKICMgVGhlc2UgYXJlIG5vcm1hbGx5IGdsaW1wc2VkIGZyb20gdGhlIHByZXZpb3VzIHNldAotYmluZGlyPSQocHJlZml4KS9iaW4KK0JJTkRJUj0JCUBiaW5kaXJACiBQWVRIT05BUFBTRElSPUBGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWEAvJChQWVRIT05GUkFNRVdPUkspICQoVkVSU0lPTikKIEFQUElOU1RBTExESVI9JChwcmVmaXgpL1Jlc291cmNlcy9QeXRob24uYXBwCiAKQEAgLTQ2LDE5ICs1MCw3IEBACiBBUFBTVUJESVJTPU1hY09TIFJlc291cmNlcwogY29tcGlsZWFsbD0kKHNyY2RpcikvLi4vTGliL2NvbXBpbGVhbGwucHkKIAotaW5zdGFsbGFwcHM6IGluc3RhbGxfUHl0aG9uIGluc3RhbGxfcHl0aG9udyBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyIGluc3RhbGxfSURMRQotCi1pbnN0YWxsX3B5dGhvbnc6IHB5dGhvbncKLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbncgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pIgotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udyAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uJChWRVJTSU9OKSIKLQlsbiAtc2YgcHl0aG9uJChWRVJTSU9OKSAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uMyIKLQlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTikgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnczIgotaWZuZXEgKCQoTElQT18zMkJJVF9GTEFHUyksKQotCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTiktMzIgcHl0aG9udwotCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pLTMyIHB5dGhvbncKLQlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTiktMzIJIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnczLTMyIgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pLTMyCSIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24zLTMyIgotZW5kaWYKK2luc3RhbGxhcHBzOiBpbnN0YWxsX1B5dGhvbiBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyIGluc3RhbGxfSURMRQogCiAjCiAjIEluc3RhbGwgdW5peCB0b29scyBpbiAvdXNyL2xvY2FsL2Jpbi4gVGhlc2UgYXJlIGp1c3QgYWxpYXNlcyBmb3IgdGhlIApAQCAtNjgsMjEgKzYwLDQ5IEBACiAJaWYgWyAhIC1kICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgXTsgdGhlbiAgXAogCQkkKElOU1RBTEwpIC1kIC1tICQoRElSTU9ERSkgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiA7XAogCWZpCi0JZm9yIGZuIGluIHB5dGhvbjMgcHl0aG9udzMgaWRsZTMgcHlkb2MzIHB5dGhvbjMtY29uZmlnIFwKLQkJICBweXRob24kKFZFUlNJT04pIHB5dGhvbnckKFZFUlNJT04pIGlkbGUkKFZFUlNJT04pIFwKLQkJICBweWRvYyQoVkVSU0lPTikgcHl0aG9uJChWRVJTSU9OKS1jb25maWcgMnRvMyBcCi0JCSAgMnRvMy0kKFZFUlNJT04pIHB5dmVudiBweXZlbnYtJChWRVJTSU9OKSA7XAorCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCWZvciBmbiBpbiBcCisJCQkydG8zIFwKKwkJCWlkbGUzIFwKKwkJCXB5ZG9jMyBcCisJCQlweXRob24zIFwKKwkJCXB5dGhvbjMtY29uZmlnIFwKKwkJCXB5dmVudiBcCisJCQk7IFwKIAlkbyBcCi0JCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCisJCXJtIC1mICQke2ZufSA7IFwKKwkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKIAlkb25lCi1pZm5lcSAoJChMSVBPXzMyQklUX0ZMQUdTKSwpCi0JZm9yIGZuIGluIHB5dGhvbjMtMzIgcHl0aG9udzMtMzIgXAotCQkgIHB5dGhvbiQoVkVSU0lPTiktMzIgcHl0aG9udyQoVkVSU0lPTiktMzIgO1wKLQlkbyBcCi0JCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCi0JZG9uZQotZW5kaWYKLQorCS1pZiB0ZXN0ICJ4JChWRVJTSU9OKSIgIT0gIngkKExEVkVSU0lPTikiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uJChWRVJTSU9OKS1jb25maWcgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQorCS1pZiB0ZXN0ICJ4JChMSVBPXzMyQklUX0ZMQUdTKSIgIT0gIngiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uMy0zMiBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCisJLWlmIHRlc3QgIngkKEVOU1VSRVBJUCkiICE9ICJ4bm8iICA7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlwaXAzIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKIAogIwogIyBMaWtlIGluc3RhbGx1bml4dG9vbHMsIGJ1dCBvbmx5IGluc3RhbGwgbGlua3MgdG8gdGhlIHZlcnNpb25lZCBiaW5hcmllcy4KQEAgLTkxLDIwICsxMTEsNTUgQEAKIAlpZiBbICEgLWQgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiBdOyB0aGVuICBcCiAJCSQoSU5TVEFMTCkgLWQgLW0gJChESVJNT0RFKSAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iIDtcCiAJZmkKLQlmb3IgZm4gaW4gcHl0aG9uJChWRVJTSU9OKSBweXRob253JChWRVJTSU9OKSBpZGxlJChWRVJTSU9OKSBcCi0JCSAgcHlkb2MkKFZFUlNJT04pIHB5dGhvbiQoVkVSU0lPTiktY29uZmlnIDJ0bzMtJChWRVJTSU9OKSBweXZlbnYtJChWRVJTSU9OKSA7XAorCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCWZvciBmbiBpbiBcCisJCQkydG8zLSQoVkVSU0lPTikgXAorCQkJaWRsZSQoVkVSU0lPTikgXAorCQkJcHlkb2MkKFZFUlNJT04pIFwKKwkJCXB5dGhvbiQoVkVSU0lPTikgXAorCQkJcHl0aG9uJChMRFZFUlNJT04pLWNvbmZpZyBcCisJCQlweXZlbnYtJChWRVJTSU9OKSBcCisJCQk7IFwKIAlkbyBcCi0JCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCisJCXJtIC1mICQke2ZufSA7XAorCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAogCWRvbmUKLWlmbmVxICgkKExJUE9fMzJCSVRfRkxBR1MpLCkKLQlmb3IgZm4gaW4gcHl0aG9uJChWRVJTSU9OKS0zMiBweXRob253JChWRVJTSU9OKS0zMiA7XAotCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKLQlkb25lCi1lbmRpZgorCS1pZiB0ZXN0ICJ4JChWRVJTSU9OKSIgIT0gIngkKExEVkVSU0lPTikiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uJChMRFZFUlNJT04pIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKKwktaWYgdGVzdCAieCQoTElQT18zMkJJVF9GTEFHUykiICE9ICJ4IjsgdGhlbiBcCisJCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCQlmb3IgZm4gaW4gXAorCQkJCXB5dGhvbiQoVkVSU0lPTiktMzIgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQorCS1pZiB0ZXN0ICJ4JChFTlNVUkVQSVApIiAhPSAieG5vIiAgOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJZWFzeV9pbnN0YWxsLSQoVkVSU0lPTikgXAorCQkJCXBpcCQoVkVSU0lPTikgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQogCiBweXRob253OiAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIE1ha2VmaWxlCi0JJChDQykgJChMREZMQUdTKSAtRFBZVEhPTkZSQU1FV09SSz0nIiQoUFlUSE9ORlJBTUVXT1JLKSInIC1vICRAICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgLUkuLiAtSSQoc3JjZGlyKS8uLi9JbmNsdWRlIC4uLyQoUFlUSE9ORlJBTUVXT1JLKS5mcmFtZXdvcmsvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSykKKwkkKENDKSAkKExERkxBR1MpIC1EUFlUSE9ORlJBTUVXT1JLPSciJChQWVRIT05GUkFNRVdPUkspIicgLW8gJEAgXAorCQkkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIC1JLi4gLUkkKHNyY2RpcikvLi4vSW5jbHVkZSBcCisJCS4uLyQoUFlUSE9ORlJBTUVXT1JLKS5mcmFtZXdvcmsvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSykKIAogaW5zdGFsbF9QeXRob25MYXVuY2hlcjoKIAljZCBQeXRob25MYXVuY2hlciAmJiBtYWtlIGluc3RhbGwgREVTVERJUj0kKERFU1RESVIpCmRpZmYgLS1naXQgYS9NYWMvUkVBRE1FIGIvTWFjL1JFQURNRQppbmRleCA4ZDRlYjNiLi4yNzc0ZDEwIDEwMDY0NAotLS0gYS9NYWMvUkVBRE1FCisrKyBiL01hYy9SRUFETUUKQEAgLTcsNyArNyw3IEBACiAgICAgUm9uYWxkIE91c3NvcmVuICgyMDEwLTA0KSwKICAgICBOZWQgRGVpbHkgKDIwMTItMDYpCiAKLTpWZXJzaW9uOiAzLjMuMAorOlZlcnNpb246IDMuNC4wCiAKIFRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgYSBxdWljayBvdmVydmlldyBvZiBzb21lIE1hYyBPUyBYIHNwZWNpZmljIGZlYXR1cmVzIGluCiB0aGUgUHl0aG9uIGRpc3RyaWJ1dGlvbi4KQEAgLTEwNiw2ICsxMDYsOCBAQAogCiAgICogYGBpbnRlbGBgOgkgIGBgaTM4NmBgLCBgYHg4Nl82NGBgCiAKKyAgKiBgYGludGVsLTMyYGA6IGBgaTM4NmBgCisKICAgKiBgYDMyLWJpdGBgOiAgIGBgcHBjYGAsIGBgaTM4NmBgCiAKICAgKiBgYDMtd2F5YGA6CSAgYGBpMzg2YGAsIGBgeDg2XzY0YGAsIGBgcHBjYGAKQEAgLTEzMiw3ICsxMzQsNyBAQAogCiAgICogMTAuNyBhbmQgMTAuOCBTREtzIHdpdGggWGNvZGUgNCBzdXBwb3J0IGBgaW50ZWxgYCBvbmx5CiAKLVRoZSBtYWtlZmlsZSBmb3IgYSBmcmFtZXdvcmsgYnVpbGQgd2lsbCBhbHNvIGluc3RhbGwgYGBweXRob24zLjMtMzJgYAorVGhlIG1ha2VmaWxlIGZvciBhIGZyYW1ld29yayBidWlsZCB3aWxsIGFsc28gaW5zdGFsbCBgYHB5dGhvbjMuNC0zMmBgCiBiaW5hcmllcyB3aGVuIHRoZSB1bml2ZXJzYWwgYXJjaGl0ZWN0dXJlIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSAzMi1iaXQKIGFyY2hpdGVjdHVyZSAodGhhdCBpcywgZm9yIGFsbCBmbGF2b3JzIGJ1dCBgYDY0LWJpdGBgKS4KIApAQCAtMTU2LDcgKzE1OCw3IEBACiBub3QgYXV0b21hdGljYWxseSBjYXJyeSB0aHJvdWdoIHRvIHN1YnByb2Nlc3NlcyBsYXVuY2hlZCBieSBwcm9ncmFtcyBhbmQgdGVzdHMKIHVuZGVyIHRoYXQgUHl0aG9uLiAgSWYgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgUHl0aG9uIGludGVycHJldGVycyBsYXVuY2hlZCBpbgogc3VicHJvY2Vzc2VzIGFsc28gcnVuIGluIDMyLWJpdC1tb2RlIGlmIHRoZSBtYWluIGludGVycHJldGVyIGRvZXMsIHVzZQotYSBgYHB5dGhvbjMuMy0zMmBgIGJpbmFyeSBhbmQgdXNlIHRoZSB2YWx1ZSBvZiBgYHN5cy5leGVjdXRhYmxlYGAgYXMgdGhlCithIGBgcHl0aG9uMy40LTMyYGAgYmluYXJ5IGFuZCB1c2UgdGhlIHZhbHVlIG9mIGBgc3lzLmV4ZWN1dGFibGVgYCBhcyB0aGUKIGBgc3VicHJvY2Vzc2BgIGBgUG9wZW5gYCBleGVjdXRhYmxlIHZhbHVlLgogCiAKQEAgLTE3Niw3ICsxNzgsNyBAQAogCiBBIHNlY29uZCByZWFzb24gZm9yIHVzaW5nIGZyYW1ld29ya3MgaXMgdGhhdCB0aGV5IHB1dCBQeXRob24tcmVsYXRlZCBpdGVtcyBpbgogb25seSB0d28gcGxhY2VzOiAiL0xpYnJhcnkvRnJhbWV3b3JrL1B5dGhvbi5mcmFtZXdvcmsiIGFuZCAKLSIvQXBwbGljYXRpb25zL1B5dGhvbiA8VkVSU0lPTj4iIHdoZXJlIGBgPFZFUlNJT04+YGAgY2FuIGJlIGUuZy4gIjMuMyIsCisiL0FwcGxpY2F0aW9ucy9QeXRob24gPFZFUlNJT04+IiB3aGVyZSBgYDxWRVJTSU9OPmBgIGNhbiBiZSBlLmcuICIzLjQiLAogIjIuNyIsIGV0Yy4gIFRoaXMgc2ltcGxpZmllcyBtYXR0ZXJzIGZvciB1c2VycyBpbnN0YWxsaW5nCiBQeXRob24gZnJvbSBhIGJpbmFyeSBkaXN0cmlidXRpb24gaWYgdGhleSB3YW50IHRvIGdldCByaWQgb2YgaXQgYWdhaW4uIE1vcmVvdmVyLAogZHVlIHRvIHRoZSB3YXkgZnJhbWV3b3JrcyB3b3JrLCBhIHVzZXIgd2l0aG91dCBhZG1pbiBwcml2aWxlZ2VzIGNhbiBpbnN0YWxsIGEKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjNhY2U0Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotIiIiU3VpdGUgSGVscCBJbmRleGluZyBUb29sIFN1aXRlOiBTcGVjaWFsIGV2ZW50cyB0aGF0IGp1c3QgdGhlIEhlbHAgSW5kZXhpbmcgVG9vbCBzdXBwb3J0cy4KLUxldmVsIDAsIHZlcnNpb24gMAotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdISVQgJwotCi1jbGFzcyBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzOgotCi0gICAgZGVmIHR1cm5fYW5jaG9yX2luZGV4aW5nKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJ0dXJuIGFuY2hvciBpbmRleGluZzogVHVybnMgYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZi4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFx4ZDJvblx4ZDMgb3IgXHhkMm9mZlx4ZDMsIHRvIHR1cm4gYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdISVQgJwotICAgICAgICBfc3ViY29kZSA9ICd0QW5jJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF90dXJuX3JlbW90ZV9yb290ID0gewotICAgICAgICAnd2l0aF9yb290X3VybCcgOiAnclVSTCcsCi0gICAgfQotCi0gICAgZGVmIHR1cm5fcmVtb3RlX3Jvb3Qoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInR1cm4gcmVtb3RlIHJvb3Q6IFR1cm4gdXNhZ2Ugb2YgcmVtb3RlIHJvb3QgZm9yIGNvbnRlbnQgb24gdGhlIHdlYiBvbiBvciBvZmYuIElmIHR1cm5pbmcgXHhkMm9uXHhkMywgc3VwcGx5IGEgc3RyaW5nIGFzIHNlY29uZCBwYXJhbWV0ZXIuCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBceGQyb25ceGQzIG9yIFx4ZDJvZmZceGQzLCB0byB0dXJuIHJlbW90ZSByb290IG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcm9vdF91cmw6IFRoZSByZW1vdGUgcm9vdCB0byB1c2UsIGluIHRoZSBmb3JtIG9mIFx4ZDJodHRwOi8vd3d3LmFwcGxlLmNvbS9oZWxwL1x4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3RSZW0nCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfdHVybl9yZW1vdGVfcm9vdCkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgdXNlX3Rva2VuaXplcihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIidXNlIHRva2VuaXplcjogVGVsbHMgdGhlIGluZGV4aW5nIHRvb2wgd2hpY2ggdG9rZW5pemVyIHRvIHVzZS4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFNwZWNpZnkgXHhkMkVuZ2xpc2hceGQzLCBceGQyRXVyb3BlYW5ceGQzLCBceGQySmFwYW5lc2VceGQzLCBceGQyS29yZWFuXHhkMywgb3IgXHhkMlNpbXBsZVx4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3VUb2snCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotY2xhc3MgYXBwbGljYXRpb24oYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJhcHBsaWNhdGlvbiAtIEFwcGxpY2F0aW9uIGNsYXNzICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLWNsYXNzIF9Qcm9wX2lkbGVTdGF0dXMoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImlkbGVTdGF0dXMgLSAgIiIiCi0gICAgd2hpY2ggPSAnc0lkbCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1hcHBsaWNhdGlvbi5fc3VwZXJjbGFzc25hbWVzID0gW10KLWFwcGxpY2F0aW9uLl9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2lkbGVTdGF0dXMnIDogX1Byb3BfaWRsZVN0YXR1cywKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci19Ci0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc0lkbCcgOiBfUHJvcF9pZGxlU3RhdHVzLAotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNmFlNzAuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIiIiU3VpdGUgTWlzY2VsbGFuZW91cyBTdGFuZGFyZHM6IFVzZWZ1bCBldmVudHMgdGhhdCBhcmVuXHhkNXQgaW4gYW55IG90aGVyIHN1aXRlCi1MZXZlbCAwLCB2ZXJzaW9uIDAKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnbWlzYycKLQotY2xhc3MgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzOgotCi0gICAgZGVmIHJldmVydChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIicmV2ZXJ0OiBSZXZlcnQgYW4gb2JqZWN0IHRvIHRoZSBtb3N0IHJlY2VudGx5IHNhdmVkIHZlcnNpb24KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IG9iamVjdCB0byByZXZlcnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnbWlzYycKLSAgICAgICAgX3N1YmNvZGUgPSAncnZydCcKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5ZmVlMC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvUmVxdWlyZWRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0iIiJTdWl0ZSBSZXF1aXJlZCBTdWl0ZTogVGVybXMgdGhhdCBldmVyeSBhcHBsaWNhdGlvbiBzaG91bGQgc3VwcG9ydAotTGV2ZWwgMSwgdmVyc2lvbiAxCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ3JlcWQnCi0KLWZyb20gU3RkU3VpdGVzLlJlcXVpcmVkX1N1aXRlIGltcG9ydCAqCi1jbGFzcyBSZXF1aXJlZF9TdWl0ZV9FdmVudHMoUmVxdWlyZWRfU3VpdGVfRXZlbnRzKToKLQotICAgIHBhc3MKLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwYjYzYS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvU3RhbmRhcmRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotIiIiU3VpdGUgU3RhbmRhcmQgU3VpdGU6IENvbW1vbiB0ZXJtcyBmb3IgbW9zdCBhcHBsaWNhdGlvbnMKLUxldmVsIDEsIHZlcnNpb24gMQotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdDb1JlJwotCi1mcm9tIFN0ZFN1aXRlcy5TdGFuZGFyZF9TdWl0ZSBpbXBvcnQgKgotY2xhc3MgU3RhbmRhcmRfU3VpdGVfRXZlbnRzKFN0YW5kYXJkX1N1aXRlX0V2ZW50cyk6Ci0KLSAgICBfYXJnbWFwX2Nsb3NlID0gewotICAgICAgICAnc2F2aW5nJyA6ICdzYXZvJywKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgfQotCi0gICAgZGVmIGNsb3NlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJjbG9zZTogQ2xvc2UgYW4gb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0cyB0byBjbG9zZQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHNhdmluZzogc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGNoYW5nZXMgc2hvdWxkIGJlIHNhdmVkIGJlZm9yZSBjbG9zaW5nCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgaW5fOiB0aGUgZmlsZSBpbiB3aGljaCB0byBzYXZlIHRoZSBvYmplY3QKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY2xvcycKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9jbG9zZSkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0gICAgICAgIGFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdzYXZvJywgX0VudW1fc2F2bykKLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBkYXRhX3NpemUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiImRhdGEgc2l6ZTogUmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIHNpemUgaXMgdG8gYmUgcmV0dXJuZWQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICBSZXR1cm5zOiB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGluIGJ5dGVzCi0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdkc2l6JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIGdldChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIiZ2V0OiBHZXQgdGhlIGRhdGEgZm9yIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIGlzIHRvIGJlIHJldHVybmVkCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgUmV0dXJuczogVGhlIGRhdGEgZnJvbSB0aGUgb2JqZWN0Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdnZXRkJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF9tYWtlID0gewotICAgICAgICAnbmV3JyA6ICdrb2NsJywKLSAgICAgICAgJ2F0JyA6ICdpbnNoJywKLSAgICAgICAgJ3dpdGhfZGF0YScgOiAnZGF0YScsCi0gICAgICAgICd3aXRoX3Byb3BlcnRpZXMnIDogJ3ByZHQnLAotICAgIH0KLQotICAgIGRlZiBtYWtlKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiIm1ha2U6IE1ha2UgYSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IG5ldzogdGhlIGNsYXNzIG9mIHRoZSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGF0OiB0aGUgbG9jYXRpb24gYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgd2l0aF9kYXRhOiB0aGUgaW5pdGlhbCBkYXRhIGZvciB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcHJvcGVydGllczogdGhlIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgIFJldHVybnM6IE9iamVjdCBzcGVjaWZpZXIgZm9yIHRoZSBuZXcgZWxlbWVudAotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY3JlbCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9tYWtlKQotICAgICAgICBpZiBfbm9fb2JqZWN0IGlzIG5vdCBOb25lOiByYWlzZSBUeXBlRXJyb3IoJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnKQotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgb3BlbihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIib3BlbjogT3BlbiB0aGUgc3BlY2lmaWVkIG9iamVjdChzKQotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBvcGVuLiBDYW4gYmUgYSBsaXN0IG9mIGZpbGVzIG9yIGFuIG9iamVjdCBzcGVjaWZpZXIuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2FldnQnCi0gICAgICAgIF9zdWJjb2RlID0gJ29kb2MnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgcHJpbnRfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJwcmludDogUHJpbnQgdGhlIHNwZWNpZmllZCBvYmplY3QocykKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IE9iamVjdHMgdG8gcHJpbnQuIENhbiBiZSBhIGxpc3Qgb2YgZmlsZXMgb3IgYW4gb2JqZWN0IHNwZWNpZmllci4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnYWV2dCcKLSAgICAgICAgX3N1YmNvZGUgPSAncGRvYycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2F2ZSA9IHsKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgICAgICdhcycgOiAnZmx0cCcsCi0gICAgfQotCi0gICAgZGVmIHNhdmUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNhdmU6IHNhdmUgYSBzZXQgb2Ygb2JqZWN0cwotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBzYXZlLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGluXzogdGhlIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgb2JqZWN0KHMpCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgYXM6IHRoZSBmaWxlIHR5cGUgb2YgdGhlIGRvY3VtZW50IGluIHdoaWNoIHRvIHNhdmUgdGhlIGRhdGEKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2F2ZScKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zYXZlKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2V0ID0gewotICAgICAgICAndG8nIDogJ2RhdGEnLAotICAgIH0KLQotICAgIGRlZiBzZXQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNldDogU2V0IGFuIG9iamVjdFx4ZDVzIGRhdGEKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3QgdG8gY2hhbmdlCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgdG86IHRoZSBuZXcgdmFsdWUKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2V0ZCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zZXQpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLWNsYXNzIGFwcGxpY2F0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiYXBwbGljYXRpb24gLSBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLSMgICAgICAgIGVsZW1lbnQgJ2N3aW4nIGFzIFsnaW5keCcsICduYW1lJywgJ3JlbGUnXQotIyAgICAgICAgZWxlbWVudCAnZG9jdScgYXMgWyduYW1lJ10KLQotY2xhc3Mgd2luZG93KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIid2luZG93IC0gQSBXaW5kb3cgIiIiCi0gICAgd2FudCA9ICdjd2luJwotY2xhc3MgX1Byb3BfYm91bmRzKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJib3VuZHMgLSB0aGUgYm91bmRhcnkgcmVjdGFuZ2xlIGZvciB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BibmQnCi0gICAgd2FudCA9ICdxZHJ0JwotY2xhc3MgX1Byb3BfY2xvc2VhYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJjbG9zZWFibGUgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIGNsb3NlIGJveD8gIiIiCi0gICAgd2hpY2ggPSAnaGNsYicKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9mbG9hdGluZyhhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiZmxvYXRpbmcgLSBEb2VzIHRoZSB3aW5kb3cgZmxvYXQ/ICIiIgotICAgIHdoaWNoID0gJ2lzZmwnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfaW5kZXgoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImluZGV4IC0gdGhlIG51bWJlciBvZiB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BpZHgnCi0gICAgd2FudCA9ICdsb25nJwotY2xhc3MgX1Byb3BfbW9kYWwoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiIm1vZGFsIC0gSXMgdGhlIHdpbmRvdyBtb2RhbD8gIiIiCi0gICAgd2hpY2ggPSAncG1vZCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9uYW1lKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJuYW1lIC0gdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncG5hbScKLSAgICB3YW50ID0gJ2l0eHQnCi1jbGFzcyBfUHJvcF9wb3NpdGlvbihhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicG9zaXRpb24gLSB1cHBlciBsZWZ0IGNvb3JkaW5hdGVzIG9mIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwcG9zJwotICAgIHdhbnQgPSAnUURwdCcKLWNsYXNzIF9Qcm9wX3Jlc2l6YWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicmVzaXphYmxlIC0gSXMgdGhlIHdpbmRvdyByZXNpemFibGU/ICIiIgotICAgIHdoaWNoID0gJ3Byc3onCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfdGl0bGVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ0aXRsZWQgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIHRpdGxlIGJhcj8gIiIiCi0gICAgd2hpY2ggPSAncHRpdCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF92aXNpYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ2aXNpYmxlIC0gaXMgdGhlIHdpbmRvdyB2aXNpYmxlPyAiIiIKLSAgICB3aGljaCA9ICdwdmlzJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3pvb21hYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tYWJsZSAtIElzIHRoZSB3aW5kb3cgem9vbWFibGU/ICIiIgotICAgIHdoaWNoID0gJ2lzem0nCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3Bfem9vbWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tZWQgLSBJcyB0aGUgd2luZG93IHpvb21lZD8gIiIiCi0gICAgd2hpY2ggPSAncHp1bScKLSAgICB3YW50ID0gJ2Jvb2wnCi0KLWNsYXNzIGRvY3VtZW50KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiZG9jdW1lbnQgLSBBIERvY3VtZW50ICIiIgotICAgIHdhbnQgPSAnZG9jdScKLWNsYXNzIF9Qcm9wX21vZGlmaWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJtb2RpZmllZCAtIEhhcyB0aGUgZG9jdW1lbnQgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdCBzYXZlPyAiIiIKLSAgICB3aGljaCA9ICdpbW9kJwotICAgIHdhbnQgPSAnYm9vbCcKLWFwcGxpY2F0aW9uLl9zdXBlcmNsYXNzbmFtZXMgPSBbXQotYXBwbGljYXRpb24uX3ByaXZwcm9wZGljdCA9IHsKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci0gICAgJ2RvY3VtZW50JyA6IGRvY3VtZW50LAotICAgICd3aW5kb3cnIDogd2luZG93LAotfQotd2luZG93Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotd2luZG93Ll9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2JvdW5kcycgOiBfUHJvcF9ib3VuZHMsCi0gICAgJ2Nsb3NlYWJsZScgOiBfUHJvcF9jbG9zZWFibGUsCi0gICAgJ2Zsb2F0aW5nJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpbmRleCcgOiBfUHJvcF9pbmRleCwKLSAgICAnbW9kYWwnIDogX1Byb3BfbW9kYWwsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLSAgICAncG9zaXRpb24nIDogX1Byb3BfcG9zaXRpb24sCi0gICAgJ3Jlc2l6YWJsZScgOiBfUHJvcF9yZXNpemFibGUsCi0gICAgJ3RpdGxlZCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3Zpc2libGUnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAnem9vbWFibGUnIDogX1Byb3Bfem9vbWFibGUsCi0gICAgJ3pvb21lZCcgOiBfUHJvcF96b29tZWQsCi19Ci13aW5kb3cuX3ByaXZlbGVtZGljdCA9IHsKLX0KLWRvY3VtZW50Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotZG9jdW1lbnQuX3ByaXZwcm9wZGljdCA9IHsKLSAgICAnbW9kaWZpZWQnIDogX1Byb3BfbW9kaWZpZWQsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLX0KLWRvY3VtZW50Ll9wcml2ZWxlbWRpY3QgPSB7Ci19Ci1fRW51bV9zYXZvID0gewotICAgICd5ZXMnIDogJ3llcyAnLCAgICAgIyBTYXZlIG9iamVjdHMgbm93Ci0gICAgJ25vJyA6ICdubyAgJywgICAgICAjIERvIG5vdCBzYXZlIG9iamVjdHMKLSAgICAnYXNrJyA6ICdhc2sgJywgICAgICMgQXNrIHRoZSB1c2VyIHdoZXRoZXIgdG8gc2F2ZQotfQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdjd2luJyA6IHdpbmRvdywKLSAgICAnZG9jdScgOiBkb2N1bWVudCwKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2hjbGInIDogX1Byb3BfY2xvc2VhYmxlLAotICAgICdpbW9kJyA6IF9Qcm9wX21vZGlmaWVkLAotICAgICdpc2ZsJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpc3ptJyA6IF9Qcm9wX3pvb21hYmxlLAotICAgICdwYm5kJyA6IF9Qcm9wX2JvdW5kcywKLSAgICAncGlkeCcgOiBfUHJvcF9pbmRleCwKLSAgICAncG1vZCcgOiBfUHJvcF9tb2RhbCwKLSAgICAncG5hbScgOiBfUHJvcF9uYW1lLAotICAgICdwcG9zJyA6IF9Qcm9wX3Bvc2l0aW9uLAotICAgICdwcnN6JyA6IF9Qcm9wX3Jlc2l6YWJsZSwKLSAgICAncHRpdCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3B2aXMnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAncHp1bScgOiBfUHJvcF96b29tZWQsCi19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc2F2bycgOiBfRW51bV9zYXZvLAotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzU5ZGY1Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSIiIgotUGFja2FnZSBnZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi0iIiIKLWltcG9ydCBhZXRvb2xzCi1FcnJvciA9IGFldG9vbHMuRXJyb3IKLWltcG9ydCBTdGFuZGFyZF9TdWl0ZQotaW1wb3J0IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZQotaW1wb3J0IG9kZHNfYW5kX2VuZHMKLWltcG9ydCBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcwotaW1wb3J0IFJlcXVpcmVkX1N1aXRlCi0KLQotX2NvZGVfdG9fbW9kdWxlID0gewotICAgICdDb1JlJyA6IFN0YW5kYXJkX1N1aXRlLAotICAgICdISVQgJyA6IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZSwKLSAgICAnT2RkcycgOiBvZGRzX2FuZF9lbmRzLAotICAgICdtaXNjJyA6IE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLAotICAgICdyZXFkJyA6IFJlcXVpcmVkX1N1aXRlLAotfQotCi0KLQotX2NvZGVfdG9fZnVsbG5hbWUgPSB7Ci0gICAgJ0NvUmUnIDogKCdIZWxwSW5kZXhpbmdUb29sLlN0YW5kYXJkX1N1aXRlJywgJ1N0YW5kYXJkX1N1aXRlJyksCi0gICAgJ0hJVCAnIDogKCdIZWxwSW5kZXhpbmdUb29sLkhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZScsICdIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUnKSwKLSAgICAnT2RkcycgOiAoJ0hlbHBJbmRleGluZ1Rvb2wub2Rkc19hbmRfZW5kcycsICdvZGRzX2FuZF9lbmRzJyksCi0gICAgJ21pc2MnIDogKCdIZWxwSW5kZXhpbmdUb29sLk1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJywgJ01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJyksCi0gICAgJ3JlcWQnIDogKCdIZWxwSW5kZXhpbmdUb29sLlJlcXVpcmVkX1N1aXRlJywgJ1JlcXVpcmVkX1N1aXRlJyksCi19Ci0KLWZyb20gU3RhbmRhcmRfU3VpdGUgaW1wb3J0ICoKLWZyb20gSGVscF9JbmRleGluZ19Ub29sX1N1aXRlIGltcG9ydCAqCi1mcm9tIG9kZHNfYW5kX2VuZHMgaW1wb3J0ICoKLWZyb20gTWlzY2VsbGFuZW91c19TdGFuZGFyZHMgaW1wb3J0ICoKLWZyb20gUmVxdWlyZWRfU3VpdGUgaW1wb3J0ICoKLQotZGVmIGdldGJhc2VjbGFzc2VzKHYpOgotICAgIGlmIG5vdCBnZXRhdHRyKHYsICdfcHJvcGRpY3QnLCBOb25lKToKLSAgICAgICAgdi5fcHJvcGRpY3QgPSB7fQotICAgICAgICB2Ll9lbGVtZGljdCA9IHt9Ci0gICAgICAgIGZvciBzdXBlcmNsYXNzbmFtZSBpbiBnZXRhdHRyKHYsICdfc3VwZXJjbGFzc25hbWVzJywgW10pOgotICAgICAgICAgICAgc3VwZXJjbGFzcyA9IGV2YWwoc3VwZXJjbGFzc25hbWUpCi0gICAgICAgICAgICBnZXRiYXNlY2xhc3NlcyhzdXBlcmNsYXNzKQotICAgICAgICAgICAgdi5fcHJvcGRpY3QudXBkYXRlKGdldGF0dHIoc3VwZXJjbGFzcywgJ19wcm9wZGljdCcsIHt9KSkKLSAgICAgICAgICAgIHYuX2VsZW1kaWN0LnVwZGF0ZShnZXRhdHRyKHN1cGVyY2xhc3MsICdfZWxlbWRpY3QnLCB7fSkpCi0gICAgICAgIHYuX3Byb3BkaWN0LnVwZGF0ZShnZXRhdHRyKHYsICdfcHJpdnByb3BkaWN0Jywge30pKQotICAgICAgICB2Ll9lbGVtZGljdC51cGRhdGUoZ2V0YXR0cih2LCAnX3ByaXZlbGVtZGljdCcsIHt9KSkKLQotaW1wb3J0IFN0ZFN1aXRlcwotCi0jCi0jIFNldCBwcm9wZXJ0eSBhbmQgZWxlbWVudCBkaWN0aW9uYXJpZXMgbm93IHRoYXQgYWxsIGNsYXNzZXMgaGF2ZSBiZWVuIGRlZmluZWQKLSMKLWdldGJhc2VjbGFzc2VzKHdpbmRvdykKLWdldGJhc2VjbGFzc2VzKGFwcGxpY2F0aW9uKQotZ2V0YmFzZWNsYXNzZXMoZG9jdW1lbnQpCi1nZXRiYXNlY2xhc3NlcyhhcHBsaWNhdGlvbikKLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2N3aW4nIDogd2luZG93LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdkb2N1JyA6IGRvY3VtZW50LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi0KLWNsYXNzIEhlbHBJbmRleGluZ1Rvb2woU3RhbmRhcmRfU3VpdGVfRXZlbnRzLAotICAgICAgICBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzLAotICAgICAgICBvZGRzX2FuZF9lbmRzX0V2ZW50cywKLSAgICAgICAgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzLAotICAgICAgICBSZXF1aXJlZF9TdWl0ZV9FdmVudHMsCi0gICAgICAgIGFldG9vbHMuVGFsa1RvKToKLSAgICBfc2lnbmF0dXJlID0gJ2hpdGknCi0KLSAgICBfbW9kdWxlTmFtZSA9ICdIZWxwSW5kZXhpbmdUb29sJwpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL29kZHNfYW5kX2VuZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZlY2I5NS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSIiIlN1aXRlIG9kZHMgYW5kIGVuZHM6IFRoaW5ncyB0aGF0IHNob3VsZCBiZSBpbiBzb21lIHN0YW5kYXJkIHN1aXRlLCBidXQgYXJlblx4ZDV0Ci1MZXZlbCAxLCB2ZXJzaW9uIDEKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnT2RkcycKLQotY2xhc3Mgb2Rkc19hbmRfZW5kc19FdmVudHM6Ci0KLSAgICBkZWYgc2VsZWN0KHNlbGYsIF9vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNlbGVjdDogU2VsZWN0IHRoZSBzcGVjaWZpZWQgb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHRvIHNlbGVjdAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdtaXNjJwotICAgICAgICBfc3ViY29kZSA9ICdzbGN0JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9SRUFETUUgYi9NYWMvVG9vbHMvRG9jL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0ZDUzZC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUluIHRoaXMgZGlyZWN0b3J5IHlvdSBjYW4gYnVpbGQgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGluIGEgZm9ybSB0aGF0Ci1pcyBzdWl0YWJsZSBmb3IgYWNjZXNzIHdpdGggQXBwbGUgSGVscCBWaWV3ZXIuIFRoaXMgd2lsbCBlbmFibGUgdGhlCi0iUHl0aG9uIERvY3VtZW50YXRpb24iIG1lbnUgZW50cmllcyBpbiB0aGUgTWFjUHl0aG9uIElERSBIZWxwIG1lbnUuCi0KLVVuZm9ydHVuYXRlbHkgdGhlIHByb2NlZHVyZSB0byBidWlsZCB0aGUgZG9jcyBpcyBub3QgdmVyeSBzdHJlYW1saW5lZC4KLQotRmlyc3QsIGVkaXQgc2V0dXAucHkuIEF0IHRoZSB0b3AsIGVkaXQgTUFKT1JfVkVSU0lPTiBhbmQgTUlOT1JfVkVSU0lPTiwKLWFuZCBjaGVjayB0aGF0IERFU1RESVIgbWFrZXMgc2Vuc2UuIFRoZSBkb2N1bWVudGF0aW9uIHdpbGwgYmUgaW5zdGFsbGVkCi1pbnNpZGUgUHl0aG9uSURFLmFwcC4KLQotSW4gRG9jQnVpbGQuaW5pdGlhbGl6ZV9vcHRpb25zLCBzZXQgc2VsZi5kb3dubG9hZCB0byBUcnVlIGlmIHlvdSB3YW50IHRvCi1kb3dubG9hZCB0aGUgZG9jcy4gU2V0IGl0IHRvIEZhbHNlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBkb2NzIGZyb20KLXRoZSBzb3VyY2UgdHJlZSwgYnV0IHRoaXMgcmVxdWlyZXMgTGFUZXggYW5kIGxvdHMgb2Ygb3RoZXIgc3R1ZmYuCi1Eb2FibGUsIGJ1dCBub3QgZWFzeS4KLQotU2Vjb25kLCBpZiB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGUgZG9jcyB5b3UgbWF5IG5lZWQgdG8gZG8gYSBjb3VwbGUKLW1vcmUgZWRpdHMuIFRoZSB3YXkgdGhlIGRvY3MgYXJlIHBhY2thZ2VkIHdpbGwgb2Z0ZW4gY2hhbmdlIGJldHdlZW4KLW1ham9yIHJlbGVhc2VzLiBGaWRkbGUgRG9jQnVpbGQuZG93bmxvYWREb2NzIHRvIG1ha2UgaXQgZG8gdGhlIHJpZ2h0Ci10aGluZyAoZG93bmxvYWQgdGhlIGRvY3MgZnJvbSBweXRob24ub3JnLCB1bnBhY2sgdGhlbSwgcmVuYW1lIHRoZQotZGlyZWN0b3J5IHRvICJidWlsZC9odG1sIikuCi0KLUFmdGVyIHRoZXNlIGVkaXRzIHlvdSBzaG91bGQgYmUgcmVhZHkgdG8gcm9sbC4gInB5dGhvbncgc2V0dXAucHkgYnVpbGQiCi1zaG91bGQgZG93bmxvYWQgYW5kIHVucGFjayAob3IgYnVpbGQpIHRoZSBkb2NzLiBOZXh0LCBpdCB3aWxsIGRvIHNvbWUKLW1hZ2ljIHRvIG1ha2UgdGhlIGRvY3MgaW5kZXhhYmxlLiBGaW5hbGx5LCBpdCB3aWxsIHJ1biB0aGUgQXBwbGUgSGVscAotSW5kZXhpbmcgVG9vbC4gKFRoaXMgbGFzdCBzdGVwIGlzIHRoZSByZWFzb24geW91IG11c3QgdXNlICJweXRob253IiBhcwotb3Bwb3NlZCB0byAicHl0aG9uIikuIFVzdWFsbHkgaXQgd2lsbCB0aW1lIG91dCB3aGlsZSB3YWl0aW5nIGZvciBBSElUIHRvCi1kbyBpdHMgd29yay4gV2FpdCB1bnRpbCBBSElUIGlzIGRvbmUuCi0KLU5vdyB5b3UncmUgcmVhZHkgdG8gaW5zdGFsbCB3aXRoICJweXRob24gc2V0dXAucHkgaW5zdGFsbCIuCi0KLUFmdGVyIHRoaXMgaXMgZG9uZSB0ZXN0IHlvdXIgd29yay4gRmlyZSB1cCBQeXRob25JREUsIGFuZCBjaGVjayB0aGF0Ci1IZWxwLT5QeXRob24gRG9jdW1lbnRhdGlvbiBicmluZ3MgdXAgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIEhlbHAgVmlld2VyLgotQWxzbyBvcGVuIGFuIElERSBlZGl0IHdpbmRvdywgdHlwZSBzb21ldGhpbmcgbGlrZSAiaW1wb3J0IHN5cyIsIHNlbGVjdAotImltcG9ydCIsIGFuZCB1c2UgSGVscC0+TG9va3VwIGluIFB5dGhvbiBEb2N1bWVudGF0aW9uIHRvIGNoZWNrIHRoYXQgdGhlCi1pbmRleCBoYXMgYmVlbiBnZW5lcmF0ZWQgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weSBiL01hYy9Ub29scy9Eb2Mvc2V0dXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNTE1MmMuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi0jIEJ1aWxkIGFuZCBpbnN0YWxsIGFuIEFwcGxlIEhlbHAgVmlld2VyIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgUHl0aG9uCi0jIGRvY3VtZW50YXRpb24gaW50byB0aGUgZnJhbWV3b3JrLgotIyBDb2RlIGJ5IEJpbGwgRmFuY2hlciwgd2l0aCBzb21lIG1vZGlmaWNhdGlvbnMgYnkgSmFjayBKYW5zZW4uCi0jCi0jIFlvdSBtdXN0IHJ1biB0aGlzIGFzIGEgdHdvLXN0ZXAgcHJvY2VzcwotIyAxLiBweXRob24gc2V0dXBEb2NzLnB5IGJ1aWxkCi0jIDIuIFdhaXQgZm9yIEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCB0byBmaW5pc2gKLSMgMy4gcHl0aG9uIHNldHVwRG9jcy5weSBpbnN0YWxsCi0jCi0jIFRvIGRvOgotIyAtIHRlc3Qgd2hldGhlciB0aGUgZG9jcyBhcmUgYXZhaWxhYmxlIGxvY2FsbHkgYmVmb3JlIGRvd25sb2FkaW5nCi0jIC0gZml4IGJ1aWxkRG9jc0Zyb21Tb3VyY2UKLSMgLSBHZXQgZG9jdW1lbnRhdGlvbiB2ZXJzaW9uIGZyb20gc3lzLnZlcnNpb24sIGZhbGxiYWNrIHRvIDIuMi4xCi0jIC0gU2VlIGlmIHdlIGNhbiBzb21laG93IGRldGVjdCB0aGF0IEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCBpcyBmaW5pc2hlZAotIyAtIGRhdGFfZmlsZXMgdG8gc2V0dXAoKSBkb2Vzbid0IHNlZW0gdGhlIHJpZ2h0IHdheSB0byBwYXNzIHRoZSBhcmd1bWVudHMKLSMKLWltcG9ydCBzeXMsIG9zLCByZQotZnJvbSBkaXN0dXRpbHMuY21kIGltcG9ydCBDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkIGltcG9ydCBidWlsZAotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKLWZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgY29weV9maWxlCi1mcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgY29weV90cmVlCi1mcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IGxvZwotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnLCBkZXBfdXRpbAotZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgY2hhbmdlX3Jvb3QKLWltcG9ydCBIZWxwSW5kZXhpbmdUb29sCi1pbXBvcnQgQ2FyYm9uLkZpbGUKLWltcG9ydCB0aW1lCi0KLU1BSk9SX1ZFUlNJT049JzIuNCcKLU1JTk9SX1ZFUlNJT049JzIuNC4xJwotREVTVERJUj0nL0FwcGxpY2F0aW9ucy9NYWNQeXRob24tJXMvUHl0aG9uSURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9QeXRob25Eb2N1bWVudGF0aW9uJyAlIE1BSk9SX1ZFUlNJT04KLQotY2xhc3MgRG9jQnVpbGQoYnVpbGQpOgotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIGJ1aWxkLmluaXRpYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBzZWxmLmJ1aWxkX2h0bWwgPSBOb25lCi0gICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IE5vbmUKLSAgICAgICAgc2VsZi5kb3dubG9hZCA9IDEKLSAgICAgICAgc2VsZi5kb2NfdmVyc2lvbiA9IE1JTk9SX1ZFUlNJT04gIyBPbmx5IG5lZWRlZCBpZiBkb3dubG9hZCBpcyB0cnVlCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgYnVpbGQuZmluYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2h0bWwgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfaHRtbCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Jhc2UsICdodG1sJykKLSAgICAgICAgaWYgc2VsZi5idWlsZF9kZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCAnUHl0aG9uRG9jdW1lbnRhdGlvbicpCi0KLSAgICBkZWYgc3Bhd24oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzcGF3bihhcmdzLCAxLCAgc2VsZi52ZXJib3NlLCBzZWxmLmRyeV9ydW4pCi0KLSAgICBkZWYgZG93bmxvYWREb2NzKHNlbGYpOgotICAgICAgICB3b3JrZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgIyBYWFggTm90ZTogdGhlIG5leHQgc3RyaW5ncyBtYXkgY2hhbmdlIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uCi0gICAgICAgIHVybCA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi9kb2MvJXMvaHRtbC0lcy50YXIuYnoyJyAlIFwKLSAgICAgICAgICAgICAgICAoc2VsZi5kb2NfdmVyc2lvbixzZWxmLmRvY192ZXJzaW9uKQotICAgICAgICB0YXJmaWxlID0gJ2h0bWwtJXMudGFyLmJ6MicgJSBzZWxmLmRvY192ZXJzaW9uCi0gICAgICAgIGRpcm5hbWUgPSAnUHl0aG9uLURvY3MtJXMnICUgc2VsZi5kb2NfdmVyc2lvbgotCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuYnVpbGRfaHRtbCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyVzOiBhbHJlYWR5IGV4aXN0cywgcGxlYXNlIHJlbW92ZSBhbmQgdHJ5IGFnYWluJyAlIHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLnNwYXduKCdjdXJsJywnLU8nLCB1cmwpCi0gICAgICAgIHNlbGYuc3Bhd24oJ3RhcicsICcteGpmJywgdGFyZmlsZSkKLSAgICAgICAgb3MucmVuYW1lKGRpcm5hbWUsICdodG1sJykKLSAgICAgICAgb3MuY2hkaXIod29ya2RpcikKLSMjICAgICAgICBwcmludCAiKiogUGxlYXNlIHVucGFjayAlcyIgJSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCB0YXJmaWxlKQotIyMgICAgICAgIHByaW50ICIqKiBVbnBhY2sgdGhlIGZpbGVzIGludG8gJXMiICUgc2VsZi5idWlsZF9odG1sCi0jIyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiWW91IG5lZWQgdG8gdW5wYWNrIHRoZSBkb2NzIG1hbnVhbGx5IgotCi0gICAgZGVmIGJ1aWxkRG9jc0Zyb21Tb3VyY2Uoc2VsZik6Ci0gICAgICAgIHNyY2RpciA9ICcuLi8uLi8uLicKLSAgICAgICAgZG9jZGlyID0gb3MucGF0aC5qb2luKHNyY2RpciwgJ0RvYycpCi0gICAgICAgIGh0bWxkaXIgPSBvcy5wYXRoLmpvaW4oZG9jZGlyLCAnaHRtbCcpCi0gICAgICAgIHNwYXduKCgnbWFrZScsJy0tZGlyZWN0b3J5JywgZG9jZGlyLCAnaHRtbCcpLCAxLCBzZWxmLnZlcmJvc2UsIHNlbGYuZHJ5X3J1bikKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9odG1sKQotICAgICAgICBjb3B5X3RyZWUoaHRtbGRpciwgc2VsZi5idWlsZF9odG1sKQotCi0gICAgZGVmIGVuc3VyZUh0bWwoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgaWYgc2VsZi5kb3dubG9hZDoKLSAgICAgICAgICAgICAgICBzZWxmLmRvd25sb2FkRG9jcygpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYnVpbGREb2NzRnJvbVNvdXJjZSgpCi0KLSAgICBkZWYgaGFja0luZGV4KHNlbGYpOgotICAgICAgICBpbmRfaHRtbCA9ICdpbmRleC5odG1sJwotICAgICAgICAjcHJpbnQgJ3NlbGYuYnVpbGRfZGVzdCA9Jywgc2VsZi5idWlsZF9kZXN0Ci0gICAgICAgIGhhY2tlZEluZGV4ID0gZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9kZXN0LCBpbmRfaHRtbCksJ3cnKQotICAgICAgICBvcmlnSW5kZXggPSBmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2h0bWwsaW5kX2h0bWwpKQotICAgICAgICByID0gcmUuY29tcGlsZSgnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uKjwvc3R5bGU+JywgcmUuRE9UQUxMKQotICAgICAgICBoYWNrZWRJbmRleC53cml0ZShyLnN1YignPE1FVEEgTkFNRT0iQXBwbGVUaXRsZSIgQ09OVEVOVD0iUHl0aG9uIERvY3VtZW50YXRpb24iPicsb3JpZ0luZGV4LnJlYWQoKSkpCi0KLSAgICBkZWYgaGFja0ZpbGUoc2VsZixkLGYpOgotICAgICAgICBvcmlnUGF0aCA9IG9zLnBhdGguam9pbihkLGYpCi0gICAgICAgIGFzc2VydChvcmlnUGF0aFs6bGVuKHNlbGYuYnVpbGRfaHRtbCldID09IHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgb3V0UGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsIGRbbGVuKHNlbGYuYnVpbGRfaHRtbCkrMTpdLCBmKQotICAgICAgICAobmFtZSwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoZikKLSAgICAgICAgaWYgb3MucGF0aC5pc2RpcihvcmlnUGF0aCk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChvdXRQYXRoKQotICAgICAgICBlbGlmIGV4dCA9PSAnLmh0bWwnOgotICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOiBwcmludCgnaGFja2luZyAlcyB0byAlcycgJSAob3JpZ1BhdGgsb3V0UGF0aCkpCi0gICAgICAgICAgICBoYWNrZWRGaWxlID0gZmlsZShvdXRQYXRoLCAndycpCi0gICAgICAgICAgICBvcmlnRmlsZSA9IGZpbGUob3JpZ1BhdGgsJ3InKQotICAgICAgICAgICAgaGFja2VkRmlsZS53cml0ZShzZWxmLnIuc3ViKCc8ZGw+PGR0PjxkZD4nLCBvcmlnRmlsZS5yZWFkKCkpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29weV9maWxlKG9yaWdQYXRoLCBvdXRQYXRoKQotCi0gICAgZGVmIGhhY2tIdG1sKHNlbGYpOgotICAgICAgICBzZWxmLnIgPSByZS5jb21waWxlKCc8ZGw+PGRkPicpCi0gICAgICAgIG9zLndhbGsoc2VsZi5idWlsZF9odG1sLCBzZWxmLnZpc2l0LCBOb25lKQotCi0gICAgZGVmIHZpc2l0KHNlbGYsIGR1bW15LCBkaXJuYW1lLCBmaWxlbmFtZXMpOgotICAgICAgICBmb3IgZiBpbiBmaWxlbmFtZXM6Ci0gICAgICAgICAgICBzZWxmLmhhY2tGaWxlKGRpcm5hbWUsIGYpCi0KLSAgICBkZWYgbWFrZUhlbHBJbmRleChzZWxmKToKLSAgICAgICAgYXBwID0gJy9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAnCi0gICAgICAgIHNlbGYuc3Bhd24oJ29wZW4nLCAnLWEnLCBhcHAgLCBzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgIHByaW50KCJQbGVhc2Ugd2FpdCB1bnRpbCBBcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wgZmluaXNoZXMgYmVmb3JlIGluc3RhbGxpbmciKQotCi0gICAgZGVmIG1ha2VIZWxwSW5kZXgoc2VsZik6Ci0gICAgICAgIGFwcCA9IEhlbHBJbmRleGluZ1Rvb2wuSGVscEluZGV4aW5nVG9vbChzdGFydD0xKQotICAgICAgICBhcHAub3BlbihDYXJib24uRmlsZS5GU1NwZWMoc2VsZi5idWlsZF9kZXN0KSkKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIHN0YXJ0Li4uIikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICMgVGhpcyBpcyBiYWQgZGVzaWduIGluIHRoZSBzdWl0ZSBnZW5lcmF0aW9uIGNvZGUhCi0gICAgICAgICAgICBpZGxlID0gYXBwLl9nZXQoSGVscEluZGV4aW5nVG9vbC5IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUuX1Byb3BfaWRsZVN0YXR1cygpKQotICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKLSAgICAgICAgICAgIGlmIG5vdCBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIGZpbmlzaC4uLiIpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgYmFkIGRlc2lnbiBpbiB0aGUgc3VpdGUgZ2VuZXJhdGlvbiBjb2RlIQotICAgICAgICAgICAgaWRsZSA9IGFwcC5fZ2V0KEhlbHBJbmRleGluZ1Rvb2wuSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLl9Qcm9wX2lkbGVTdGF0dXMoKSkKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCi0gICAgICAgICAgICBpZiBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLmVuc3VyZUh0bWwoKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW4ndCBmaW5kIHNvdXJjZSBmb2xkZXIgZm9yIGRvY3VtZW50YXRpb24uIikKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9kZXN0KQotICAgICAgICBpZiBkZXBfdXRpbC5uZXdlcihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9odG1sLCdpbmRleC5odG1sJyksIG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsJ2luZGV4Lmh0bWwnKSk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgICAgICBzZWxmLmhhY2tIdG1sKCkKLSAgICAgICAgICAgIHNlbGYuaGFja0luZGV4KCkKLSAgICAgICAgICAgIHNlbGYubWFrZUhlbHBJbmRleCgpCi0KLWNsYXNzIEFIVkRvY0luc3RhbGwoQ29tbWFuZCk6Ci0gICAgZGVzY3JpcHRpb24gPSAiaW5zdGFsbCBBcHBsZSBIZWxwIFZpZXdlciBodG1sIGZpbGVzIgotICAgIHVzZXJfb3B0aW9ucyA9IFsoJ2luc3RhbGwtZG9jPScsICdkJywKLSAgICAgICAgICAgICdkaXJlY3RvcnkgdG8gaW5zdGFsbCBIVE1MIHRyZWUnKSwKLSAgICAgICAgICAgICAoJ3Jvb3Q9JywgTm9uZSwKLSAgICAgICAgICAgICAiaW5zdGFsbCBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRoaXMgYWx0ZXJuYXRlIHJvb3QgZGlyZWN0b3J5IiksCi0gICAgICAgICAgICBdCi0KLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBOb25lCi0gICAgICAgIHNlbGYuaW5zdGFsbF9kb2MgPSBOb25lCi0gICAgICAgIHNlbGYucHJlZml4ID0gTm9uZQotICAgICAgICBzZWxmLnJvb3QgPSBOb25lCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgc2VsZi5zZXRfdW5kZWZpbmVkX29wdGlvbnMoJ2luc3RhbGwnLAotICAgICAgICAgICAgICAgICgncHJlZml4JywgJ3ByZWZpeCcpLAotICAgICAgICAgICAgICAgICgncm9vdCcsICdyb290JykpCi0jICAgICAgICAgICAgICAgaW1wb3J0IHBkYiA7IHBkYi5zZXRfdHJhY2UoKQotICAgICAgICBidWlsZF9jbWQgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGQnKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2Rlc3QgaXMgTm9uZToKLSAgICAgICAgICAgIGJ1aWxkX2NtZCA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZCcpCi0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBidWlsZF9jbWQuYnVpbGRfZGVzdAotICAgICAgICBpZiBzZWxmLmluc3RhbGxfZG9jIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmluc3RhbGxfZG9jID0gb3MucGF0aC5qb2luKHNlbGYucHJlZml4LCBERVNURElSKQotICAgICAgICBwcmludCgnSU5TVEFMTCcsIHNlbGYuYnVpbGRfZGVzdCwgJy0+Jywgc2VsZi5pbnN0YWxsX2RvYykKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIHByaW50KCJSdW5uaW5nIEluc3RhbGxlciIpCi0gICAgICAgIGluc3Rsb2MgPSBzZWxmLmluc3RhbGxfZG9jCi0gICAgICAgIGlmIHNlbGYucm9vdDoKLSAgICAgICAgICAgIGluc3Rsb2MgPSBjaGFuZ2Vfcm9vdChzZWxmLnJvb3QsIGluc3Rsb2MpCi0gICAgICAgIHNlbGYubWtwYXRoKGluc3Rsb2MpCi0gICAgICAgIGNvcHlfdHJlZShzZWxmLmJ1aWxkX2Rlc3QsIGluc3Rsb2MpCi0gICAgICAgIHByaW50KCJJbnN0YWxsYXRpb24gY29tcGxldGUiKQotCi1kZWYgbXVuZ2VWZXJzaW9uKGluZmlsZSwgb3V0ZmlsZSk6Ci0gICAgaSA9IGZpbGUoaW5maWxlLCdyJykKLSAgICBvID0gZmlsZShvdXRmaWxlLCd3JykKLSAgICBvLndyaXRlKHJlLnN1YignXCRcKFZFUlNJT05cKScsc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdWRVJTSU9OJyksaS5yZWFkKCkpKQotICAgIGkuY2xvc2UoKQotICAgIG8uY2xvc2UoKQotCi1kZWYgbWFpbigpOgotICAgICMgdHVybiBvZmYgd2FybmluZ3Mgd2hlbiBkZXByZWNhdGVkIG1vZHVsZXMgYXJlIGltcG9ydGVkCi0jIyAgICAgIGltcG9ydCB3YXJuaW5ncwotIyMgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIixjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCi0gICAgc2V0dXAobmFtZSA9ICdEb2N1bWVudGF0aW9uJywKLSAgICAgICAgICAgIHZlcnNpb24gPSAnJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0sCi0gICAgICAgICAgICBjbWRjbGFzcyA9IHsnaW5zdGFsbF9kYXRhJzpBSFZEb2NJbnN0YWxsLCAnYnVpbGQnOkRvY0J1aWxkfSwKLSAgICAgICAgICAgIGRhdGFfZmlsZXMgPSBbJ2R1bW15J10sCi0gICAgICAgICAgICApCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvYnVuZGxlYnVpbGRlci5weSBiL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CmluZGV4IDZjYzEzMGYuLmY1Njc5ZDMgMTAwNzU1Ci0tLSBhL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CisrKyBiL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CkBAIC0yNzAsNyArMjcwLDcgQEAKIGRlbCBfX2xvYWQKICIiIgogCi1NQVlNSVNTX01PRFVMRVMgPSBbJ21hYycsICdvczInLCAnbnQnLCAnbnRwYXRoJywgJ2RvcycsICdkb3NwYXRoJywKK01BWU1JU1NfTU9EVUxFUyA9IFsnbWFjJywgJ250JywgJ250cGF0aCcsICdkb3MnLCAnZG9zcGF0aCcsCiAgICAgJ3dpbjMyYXBpJywgJ2NlJywgJ193aW5yZWcnLCAnbnR1cmwycGF0aCcsICdzaXRlY3VzdG9taXplJywKICAgICAnb3JnLnB5dGhvbi5jb3JlJywgJ3Jpc2NvcycsICdyaXNjb3NlbnZpcm9uJywgJ3Jpc2Nvc3BhdGgnCiBdCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvcGxpc3RsaWJfZ2VuZXJhdGVfdGVzdGRhdGEucHkgYi9NYWMvVG9vbHMvcGxpc3RsaWJfZ2VuZXJhdGVfdGVzdGRhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDU3YjYxNwotLS0gL2Rldi9udWxsCisrKyBiL01hYy9Ub29scy9wbGlzdGxpYl9nZW5lcmF0ZV90ZXN0ZGF0YS5weQpAQCAtMCwwICsxLDEwMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCitmcm9tIENvY29hIGltcG9ydCBOU011dGFibGVEaWN0aW9uYXJ5LCBOU011dGFibGVBcnJheSwgTlNTdHJpbmcsIE5TRGF0ZSwgTlNOdW1iZXIKK2Zyb20gQ29jb2EgaW1wb3J0IE5TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiwgTlNQcm9wZXJ0eUxpc3RPcGVuU3RlcEZvcm1hdAorZnJvbSBDb2NvYSBpbXBvcnQgTlNQcm9wZXJ0eUxpc3RYTUxGb3JtYXRfdjFfMCwgTlNQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMAorZnJvbSBDb2NvYSBpbXBvcnQgQ0ZVVUlEQ3JlYXRlRnJvbVN0cmluZywgTlNOdWxsLCBOU1VVSUQsIENGUHJvcGVydHlMaXN0Q3JlYXRlRGF0YQorZnJvbSBDb2NvYSBpbXBvcnQgTlNVUkwKKworaW1wb3J0IGRhdGV0aW1lCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAoraW1wb3J0IGJpbmFzY2lpCisKK0ZPUk1BVFM9WworIyAgICAoJ29wZW5zdGVwJywgTlNQcm9wZXJ0eUxpc3RPcGVuU3RlcEZvcm1hdCksCisgICAgKCdwbGlzdGxpYi5GTVRfWE1MJywgTlNQcm9wZXJ0eUxpc3RYTUxGb3JtYXRfdjFfMCksCisgICAgKCdwbGlzdGxpYi5GTVRfQklOQVJZJywgTlNQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCksCitdCisKK2RlZiBuc3N0cih2YWx1ZSk6CisgICAgcmV0dXJuIE5TU3RyaW5nLmFsbG9jKCkuaW5pdFdpdGhTdHJpbmdfKHZhbHVlKQorCisKK2RlZiBtYWluKCk6CisgICAgcGwgPSBPcmRlcmVkRGljdCgpCisKKyAgICAjIE5vdGU6IHBsIGlzIGFuIE9yZGVyZWREaWN0IHRvIGNvbnRyb2wgdGhlIG9yZGVyCisgICAgIyBvZiBrZXlzLCBhbmQgaGVuY2UgaGF2ZSBzb21lIGNvbnRyb2wgb24gdGhlIHN0cnVjdHVyZQorICAgICMgb2YgdGhlIG91dHB1dCBmaWxlLgorICAgICMgTmV3IGtleXMgc2hvdWxkIGJlIGFkZGVkIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKworICAgIHNlY29uZHMgPSBkYXRldGltZS5kYXRldGltZSgyMDA0LCAxMCwgMjYsIDEwLCAzMywgMzMsIHR6aW5mbz1kYXRldGltZS50aW1lem9uZShkYXRldGltZS50aW1lZGVsdGEoMCkpKS50aW1lc3RhbXAoKQorICAgIHBsW25zc3RyKCdhQmlnSW50JyldID0gMiAqKiA2MyAtIDQ0CisgICAgcGxbbnNzdHIoJ2FCaWdJbnQyJyldID0gTlNOdW1iZXIubnVtYmVyV2l0aFVuc2lnbmVkTG9uZ0xvbmdfKDIgKiogNjMgKyA0NCkKKyAgICBwbFtuc3N0cignYURhdGUnKV0gPSBOU0RhdGUuZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzBfKHNlY29uZHMpCisKKyAgICBwbFtuc3N0cignYURpY3QnKV0gPSBkID0gT3JkZXJlZERpY3QoKQorICAgIGRbbnNzdHIoJ2FGYWxzZVZhbHVlJyldID0gRmFsc2UKKyAgICBkW25zc3RyKCdhVHJ1ZVZhbHVlJyldID0gVHJ1ZQorICAgIGRbbnNzdHIoJ2FVbmljb2RlVmFsdWUnKV0gPSAiTVx4ZTRzc2lnLCBNYVx4ZGYiCisgICAgZFtuc3N0cignYW5vdGhlclN0cmluZycpXSA9ICI8aGVsbG8gJiAnaGknIHRoZXJlIT4iCisgICAgZFtuc3N0cignZGVlcGVyRGljdCcpXSA9IGRkID0gT3JkZXJlZERpY3QoKQorICAgIGRkW25zc3RyKCdhJyldID0gMTcKKyAgICBkZFtuc3N0cignYicpXSA9IDMyLjUKKyAgICBkZFtuc3N0cignYycpXSA9IGEgPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorICAgIGEuYXBwZW5kKDEpCisgICAgYS5hcHBlbmQoMikKKyAgICBhLmFwcGVuZChuc3N0cigndGV4dCcpKQorCisgICAgcGxbbnNzdHIoJ2FGbG9hdCcpXSA9IDAuNQorCisgICAgcGxbbnNzdHIoJ2FMaXN0JyldID0gYSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisgICAgYS5hcHBlbmQobnNzdHIoJ0EnKSkKKyAgICBhLmFwcGVuZChuc3N0cignQicpKQorICAgIGEuYXBwZW5kKDEyKQorICAgIGEuYXBwZW5kKDMyLjUpCisgICAgYWEgPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorICAgIGEuYXBwZW5kKGFhKQorICAgIGFhLmFwcGVuZCgxKQorICAgIGFhLmFwcGVuZCgyKQorICAgIGFhLmFwcGVuZCgzKQorCisgICAgcGxbbnNzdHIoJ2FOZWdhdGl2ZUJpZ0ludCcpXSA9IC04MDAwMDAwMDAwMAorICAgIHBsW25zc3RyKCdhTmVnYXRpdmVJbnQnKV0gPSAtNQorICAgIHBsW25zc3RyKCdhU3RyaW5nJyldID0gbnNzdHIoJ0Rvb2RhaCcpCisKKyAgICBwbFtuc3N0cignYW5FbXB0eURpY3QnKV0gPSBOU011dGFibGVEaWN0aW9uYXJ5LmFsbG9jKCkuaW5pdCgpCisKKyAgICBwbFtuc3N0cignYW5FbXB0eUxpc3QnKV0gPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorCisgICAgcGxbbnNzdHIoJ2FuSW50JyldID0gNzI4CisKKyAgICBwbFtuc3N0cignbmVzdGVkRGF0YScpXSA9IGEgPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorICAgIGEuYXBwZW5kKGInJyc8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzJycnKQorCisKKyAgICBwbFtuc3N0cignc29tZURhdGEnKV0gPSBiJzxiaW5hcnkgZ3Vuaz4nCisKKyAgICBwbFtuc3N0cignc29tZU1vcmVEYXRhJyldID0gYicnJzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDMnJycKKworICAgIHBsW25zc3RyKCdceGM1YmVucmFhJyldID0gbnNzdHIoIlRoYXQgd2FzIGEgdW5pY29kZSBrZXkuIikKKworICAgIHByaW50KCJURVNUREFUQT17IikKKyAgICBmb3IgZm10X25hbWUsIGZtdF9rZXkgaW4gRk9STUFUUzoKKyAgICAgICAgZGF0YSwgZXJyb3IgPSBOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24uZGF0YVdpdGhQcm9wZXJ0eUxpc3RfZm9ybWF0X29wdGlvbnNfZXJyb3JfKAorICAgICAgICAgICAgcGwsIGZtdF9rZXksIDAsIE5vbmUpCisgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50KCJDYW5ub3Qgc2VyaWFsaXplIiwgZm10X25hbWUsIGVycm9yKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiICAgICVzOiBiaW5hc2NpaS5hMmJfYmFzZTY0KGInJydcbiAgICAgICAgJXMnJycpLCIlKGZtdF9uYW1lLCBfZW5jb2RlX2Jhc2U2NChieXRlcyhkYXRhKSkuZGVjb2RlKCdhc2NpaScpWzotMV0pKQorCisgICAgcHJpbnQoIn0iKQorICAgIHByaW50KCkKKworZGVmIF9lbmNvZGVfYmFzZTY0KHMsIG1heGxpbmVsZW5ndGg9NjApOgorICAgIG1heGJpbnNpemUgPSAobWF4bGluZWxlbmd0aC8vNCkqMworICAgIHBpZWNlcyA9IFtdCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBtYXhiaW5zaXplKToKKyAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgbWF4Ymluc2l6ZV0KKyAgICAgICAgcGllY2VzLmFwcGVuZChiaW5hc2NpaS5iMmFfYmFzZTY0KGNodW5rKSkKKyAgICByZXR1cm4gYicgICAgICAgICcuam9pbihwaWVjZXMpCisKK21haW4oKQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUucHJlLmluIGIvTWFrZWZpbGUucHJlLmluCmluZGV4IGZkY2EzOGUuLmJkNzlmYjMgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnByZS5pbgorKysgYi9NYWtlZmlsZS5wcmUuaW4KQEAgLTEyNyw3ICsxMjcsNiBAQAogIyBTeW1ib2xzIHVzZWQgZm9yIHVzaW5nIHNoYXJlZCBsaWJyYXJpZXMKIFNITElCX1NVRkZJWD0JQFNITElCX1NVRkZJWEAKIEVYVF9TVUZGSVg9CUBFWFRfU1VGRklYQAotU089CQkkKFNITElCX1NVRkZJWCkKIExEU0hBUkVEPQlATERTSEFSRURAICQoUFlfTERGTEFHUykKIEJMRFNIQVJFRD0JQEJMRFNIQVJFREAgJChQWV9MREZMQUdTKQogTERDWFhTSEFSRUQ9CUBMRENYWFNIQVJFREAKQEAgLTE0OSwxMiArMTQ4LDIxIEBACiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9QENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRACiBARVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVEBleHBvcnQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCiAKKyMgT3B0aW9uIHRvIGluc3RhbGwgdG8gc3RyaXAgYmluYXJpZXMKK1NUUklQRkxBRz0tcworCisjIEZsYWdzIHRvIGxpcG8gdG8gcHJvZHVjZSBhIDMyLWJpdC1vbmx5IHVuaXZlcnNhbCBleGVjdXRhYmxlCitMSVBPXzMyQklUX0ZMQUdTPUBMSVBPXzMyQklUX0ZMQUdTQAorCiAjIE9wdGlvbnMgdG8gZW5hYmxlIHByZWJpbmRpbmcgKGZvciBmYXN0IHN0YXJ0dXAgcHJpb3IgdG8gTWFjIE9TIFggMTAuMykKIE9USEVSX0xJQlRPT0xfT1BUPUBPVEhFUl9MSUJUT09MX09QVEAKIAogIyBFbnZpcm9ubWVudCB0byBydW4gc2hhcmVkIHB5dGhvbiB3aXRob3V0IGluc3RhbGxlZCBsaWJyYXJpZXMKIFJVTlNIQVJFRD0gICAgICAgQFJVTlNIQVJFREAKIAorIyBlbnN1cmVwaXAgb3B0aW9ucworRU5TVVJFUElQPSAgICAgIEBFTlNVUkVQSVBACisKICMgTW9kZXMgZm9yIGRpcmVjdG9yaWVzLCBleGVjdXRhYmxlcyBhbmQgZGF0YSBmaWxlcyBjcmVhdGVkIGJ5IHRoZQogIyBpbnN0YWxsIHByb2Nlc3MuICBEZWZhdWx0IHRvIHVzZXItb25seS13cml0YWJsZSBmb3IgYWxsIGZpbGUgdHlwZXMuCiBESVJNT0RFPQk3NTUKQEAgLTIxNiw2ICsyMjQsMTIgQEAKIFBST0ZJTEVfVEFTSz0JJChzcmNkaXIpL1Rvb2xzL3B5YmVuY2gvcHliZW5jaC5weSAtbiAyIC0td2l0aC1nYyAtLXdpdGgtc3lzY2hlY2sKICNQUk9GSUxFX1RBU0s9CSQoc3JjZGlyKS9MaWIvdGVzdC9yZWdydGVzdC5weQogCisjIHJlcG9ydCBmaWxlcyBmb3IgZ2NvdiAvIGxjb3YgY292ZXJhZ2UgcmVwb3J0CitDT1ZFUkFHRV9JTkZPPQkkKGFic19idWlsZGRpcikvY292ZXJhZ2UuaW5mbworQ09WRVJBR0VfUkVQT1JUPSQoYWJzX2J1aWxkZGlyKS9sY292LXJlcG9ydAorQ09WRVJBR0VfUkVQT1JUX09QVElPTlM9LS1uby1icmFuY2gtY292ZXJhZ2UgLS10aXRsZSAiQ1B5dGhvbiBsY292IHJlcG9ydCIKKworCiAjID09PSBEZWZpbml0aW9ucyBhZGRlZCBieSBtYWtlc2V0dXAgPT09CiAKIApAQCAtMzYxLDYgKzM3NSw3IEBACiAJCVB5dGhvbi9weWFyZW5hLm8gXAogCQlQeXRob24vcHljdHlwZS5vIFwKIAkJUHl0aG9uL3B5ZnBlLm8gXAorCQlQeXRob24vcHloYXNoLm8gXAogCQlQeXRob24vcHltYXRoLm8gXAogCQlQeXRob24vcHlzdGF0ZS5vIFwKIAkJUHl0aG9uL3B5dGhvbnJ1bi5vIFwKQEAgLTQ0NCw3ICs0NTksNyBAQAogCiAjIERlZmF1bHQgdGFyZ2V0CiBhbGw6CQlidWlsZF9hbGwKLWJ1aWxkX2FsbDoJJChCVUlMRFBZVEhPTikgb2xkc2hhcmVkbW9kcyBzaGFyZWRtb2RzIGdkYmhvb2tzIE1vZHVsZXMvX3Rlc3RlbWJlZAorYnVpbGRfYWxsOgkkKEJVSUxEUFlUSE9OKSBvbGRzaGFyZWRtb2RzIHNoYXJlZG1vZHMgZ2RiaG9va3MgTW9kdWxlcy9fdGVzdGVtYmVkIHB5dGhvbi1jb25maWcKIAogIyBDb21waWxlIGEgYmluYXJ5IHdpdGggZ2NjIHByb2ZpbGUgZ3VpZGVkIG9wdGltaXphdGlvbi4KIHByb2ZpbGUtb3B0OgpAQCAtNDY4LDExICs0ODMsNTMgQEAKIGJ1aWxkX2FsbF91c2VfcHJvZmlsZToKIAkkKE1BS0UpIGFsbCBDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtdXNlIC1mcHJvZmlsZS1jb3JyZWN0aW9uIgogCisjIENvbXBpbGUgYW5kIHJ1biB3aXRoIGdjb3YKKy5QSE9OWT1jb3ZlcmFnZSBjb3ZlcmFnZS1sY292IGNvdmVyYWdlLXJlcG9ydAogY292ZXJhZ2U6CiAJQGVjaG8gIkJ1aWxkaW5nIHdpdGggc3VwcG9ydCBmb3IgY292ZXJhZ2UgY2hlY2tpbmc6IgotCSQoTUFLRSkgY2xlYW4KKwkkKE1BS0UpIGNsZWFuIHByb2ZpbGUtcmVtb3ZhbAogCSQoTUFLRSkgYWxsIENGTEFHUz0iJChDRkxBR1MpIC1PMCAtcGcgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIiBMSUJTPSIkKExJQlMpIC1sZ2NvdiIKIAorY292ZXJhZ2UtbGNvdjoKKwlAZWNobyAiQ3JlYXRpbmcgQ292ZXJhZ2UgSFRNTCByZXBvcnQgd2l0aCBMQ09WOiIKKwlAcm0gLWYgJChDT1ZFUkFHRV9JTkZPKQorCUBybSAtcmYgJChDT1ZFUkFHRV9SRVBPUlQpCisJQGxjb3YgLS1jYXB0dXJlIC0tZGlyZWN0b3J5ICQoYWJzX2J1aWxkZGlyKSBcCisJICAgIC0tYmFzZS1kaXJlY3RvcnkgJChyZWFscGF0aCAkKGFic19idWlsZGRpcikpIFwKKwkgICAgLS1wYXRoICQocmVhbHBhdGggJChhYnNfc3JjZGlyKSkgXAorCSAgICAtLW91dHB1dC1maWxlICQoQ09WRVJBR0VfSU5GTykKKwk6ICMgcmVtb3ZlIDNyZCBwYXJ0eSBtb2R1bGVzIGFuZCBzeXN0ZW0gaGVhZGVycworCUBsY292IC0tcmVtb3ZlICQoQ09WRVJBR0VfSU5GTykgXAorCSAgICAnKi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpKi8qJyBcCisJICAgICcqL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvKicgXAorCSAgICAnKi9Nb2R1bGVzL2V4cGF0LyonIFwKKwkgICAgJyovTW9kdWxlcy96bGliLyonIFwKKwkgICAgJyovSW5jbHVkZS8qJyBcCisJICAgICcvdXNyL2luY2x1ZGUvKicgXAorCSAgICAnL3Vzci9sb2NhbC9pbmNsdWRlLyonIFwKKwkgICAgLS1vdXRwdXQtZmlsZSAkKENPVkVSQUdFX0lORk8pCisJQGdlbmh0bWwgJChDT1ZFUkFHRV9JTkZPKSAtLW91dHB1dC1kaXJlY3RvcnkgJChDT1ZFUkFHRV9SRVBPUlQpIFwKKwkgICAgJChDT1ZFUkFHRV9SRVBPUlRfT1BUSU9OUykKKwlAZWNobworCUBlY2hvICJsY292IHJlcG9ydCBhdCAkKENPVkVSQUdFX1JFUE9SVCkvaW5kZXguaHRtbCIKKwlAZWNobworCitjb3ZlcmFnZS1yZXBvcnQ6CisJOiAjIGZvcmNlIHJlYnVpbGRpbmcgb2YgcGFyc2VyIGFuZCBpbXBvcnRsaWIKKwlAdG91Y2ggJChHUkFNTUFSX0lOUFVUKQorCUB0b3VjaCAkKHNyY2RpcikvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CisJOiAjIGJ1aWxkIHdpdGggY292ZXJhZ2UgaW5mbworCSQoTUFLRSkgY292ZXJhZ2UKKwk6ICMgcnVuIHRlc3RzLCBpZ25vcmUgZmFpbHVyZXMKKwkkKFRFU1RSVU5ORVIpICQoVEVTVE9QVFMpIHx8IHRydWUKKwk6ICMgYnVpbGQgbGNvdiByZXBvcnQKKwkkKE1BS0UpIGNvdmVyYWdlLWxjb3YKKworIyBSdW4gIkFyZ3VtZW50IENsaW5pYyIgb3ZlciBhbGwgc291cmNlIGZpbGVzCisjIChkZXBlbmRzIG9uIHB5dGhvbiBoYXZpbmcgYWxyZWFkeSBiZWVuIGJ1aWx0KQorLlBIT05ZPWNsaW5pYworY2xpbmljOiAkKEJVSUxEUFlUSE9OKQorCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC4vVG9vbHMvY2xpbmljL2NsaW5pYy5weSAtLW1ha2UKIAogIyBCdWlsZCB0aGUgaW50ZXJwcmV0ZXIKICQoQlVJTERQWVRIT04pOglNb2R1bGVzL3B5dGhvbi5vICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoUFkzTElCUkFSWSkKQEAgLTY0Niw2ICs3MDMsOCBAQAogTW9kdWxlcy9fdGVzdGVtYmVkLm86ICQoc3JjZGlyKS9Nb2R1bGVzL190ZXN0ZW1iZWQuYwogCSQoTUFJTkNDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9fdGVzdGVtYmVkLmMKIAorTW9kdWxlcy9fc3JlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL19zcmUuYyAkKHNyY2RpcikvTW9kdWxlcy9zcmUuaCAkKHNyY2RpcikvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmggJChzcmNkaXIpL01vZHVsZXMvc3JlX2xpYi5oCisKIE1vZHVsZXMvcG9zaXhtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvcG9zaXhtb2R1bGUuYyAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5oCiAKIE1vZHVsZXMvZ3JwbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dycG1vZHVsZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmgKQEAgLTcxMywyNyArNzcyLDMxIEBACiAJCQkJJChzcmNkaXIpL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaAogCiBCWVRFU1RSX0RFUFMgPSBcCi0JCSQoc3JjZGlyKS9JbmNsdWRlL2J5dGVzX21ldGhvZHMuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9jb3VudC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2N0eXBlLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKIAotVU5JQ09ERV9ERVBTID0gJChCWVRFU1RSX0RFUFMpIFwKK1VOSUNPREVfREVQUyA9IFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY291bnQuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKIApAQCAtNzUxLDkgKzgxNCw2IEBACiAKIFB5dGhvbi9jZXZhbC5vOiAkKE9QQ09ERVRBUkdFVFNfSCkgJChzcmNkaXIpL1B5dGhvbi9jZXZhbF9naWwuaAogCi1QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUubzogJChzcmNkaXIpL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jIFwKLQkJCQkkKEJZVEVTVFJfREVQUykKLQogUHl0aG9uL2Zyb3plbi5vOiBQeXRob24vaW1wb3J0bGliLmgKIAogT2JqZWN0cy90eXBlb2JqZWN0Lm86IE9iamVjdHMvdHlwZXNsb3RzLmluYwpAQCAtODIzLDYgKzg4Myw3IEBACiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5ZGVidWcuaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5ZXJyb3JzLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weWZwZS5oIFwKKwkJJChzcmNkaXIpL0luY2x1ZGUvcHloYXNoLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weW1hdGguaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5Z2V0b3B0LmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weW1hY3JvLmggXApAQCAtOTAxLDE2ICs5NjIsMzggQEAKIAogUVVJQ0tURVNUT1BUUz0JJChURVNUT1BUUykgLXggdGVzdF9zdWJwcm9jZXNzIHRlc3RfaW8gdGVzdF9saWIydG8zIFwKIAkJdGVzdF9tdWx0aWJ5dGVjb2RlYyB0ZXN0X3VybGxpYjJfbG9jYWxuZXQgdGVzdF9pdGVydG9vbHMgXAotCQl0ZXN0X211bHRpcHJvY2Vzc2luZyB0ZXN0X21haWxib3ggdGVzdF9zb2NrZXQgdGVzdF9wb2xsIFwKKwkJdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yayB0ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3biBcCisJCXRlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXIgXAorCQl0ZXN0X21haWxib3ggdGVzdF9zb2NrZXQgdGVzdF9wb2xsIFwKIAkJdGVzdF9zZWxlY3QgdGVzdF96aXBmaWxlIHRlc3RfY29uY3VycmVudF9mdXR1cmVzCiBxdWlja3Rlc3Q6CWFsbCBwbGF0Zm9ybQogCQkkKFRFU1RSVU5ORVIpICQoUVVJQ0tURVNUT1BUUykKIAogCi1pbnN0YWxsOiBhbHRpbnN0YWxsIGJpbmluc3RhbGwgbWFuaW5zdGFsbAoraW5zdGFsbDogQEZSQU1FV09SS0lOU1RBTExGSVJTVEAgY29tbW9uaW5zdGFsbCBiaW5pbnN0YWxsIG1hbmluc3RhbGwgQEZSQU1FV09SS0lOU1RBTExMQVNUQAorCWlmIHRlc3QgIngkKEVOU1VSRVBJUCkiICE9ICJ4bm8iICA7IHRoZW4gXAorCQljYXNlICQoRU5TVVJFUElQKSBpbiBcCisJCQl1cGdyYWRlKSBlbnN1cmVwaXA9Ii0tdXBncmFkZSIgOzsgXAorCQkJaW5zdGFsbHwqKSBlbnN1cmVwaXA9IiIgOzsgXAorCQllc2FjOyBcCisJCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGVuc3VyZXBpcCBcCisJCQkkJGVuc3VyZXBpcCAtLXJvb3Q9JChERVNURElSKS8gOyBcCisJZmkKIAotYWx0aW5zdGFsbDoJQEZSQU1FV09SS0FMVElOU1RBTExGSVJTVEAgYWx0YmluaW5zdGFsbCBsaWJpbnN0YWxsIGluY2xpbnN0YWxsIGxpYmFpbnN0YWxsIFwKLSAgICAgICAgICAgICAgICBzaGFyZWRpbnN0YWxsIG9sZHNoYXJlZGluc3RhbGwgYWx0bWFuaW5zdGFsbCBARlJBTUVXT1JLQUxUSU5TVEFMTExBU1RACithbHRpbnN0YWxsOiBjb21tb25pbnN0YWxsCisJaWYgdGVzdCAieCQoRU5TVVJFUElQKSIgIT0gInhubyIgIDsgdGhlbiBcCisJCWNhc2UgJChFTlNVUkVQSVApIGluIFwKKwkJCXVwZ3JhZGUpIGVuc3VyZXBpcD0iLS1hbHRpbnN0YWxsIC0tdXBncmFkZSIgOzsgXAorCQkJaW5zdGFsbHwqKSBlbnN1cmVwaXA9Ii0tYWx0aW5zdGFsbCIgOzsgXAorCQllc2FjOyBcCisJCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGVuc3VyZXBpcCBcCisJCQkkJGVuc3VyZXBpcCAtLXJvb3Q9JChERVNURElSKS8gOyBcCisJZmkKKworY29tbW9uaW5zdGFsbDogIEBGUkFNRVdPUktBTFRJTlNUQUxMRklSU1RAIFwKKwkJYWx0YmluaW5zdGFsbCBsaWJpbnN0YWxsIGluY2xpbnN0YWxsIGxpYmFpbnN0YWxsIFwKKwkJc2hhcmVkaW5zdGFsbCBvbGRzaGFyZWRpbnN0YWxsIGFsdG1hbmluc3RhbGwgXAorCQlARlJBTUVXT1JLQUxUSU5TVEFMTExBU1RACiAKICMgSW5zdGFsbCBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQgYnkgU2V0dXAKIERFU1RESVJTPQkkKGV4ZWNfcHJlZml4KSAkKExJQkRJUikgJChCSU5MSUJERVNUKSAkKERFU1RTSEFSRUQpCkBAIC05MzUsNyArMTAxOCw3IEBACiAKICMgSW5zdGFsbCB0aGUgaW50ZXJwcmV0ZXIgd2l0aCAkKFZFUlNJT04pIGFmZml4ZWQKICMgVGhpcyBnb2VzIGludG8gJChleGVjX3ByZWZpeCkKLWFsdGJpbmluc3RhbGw6ICQoQlVJTERQWVRIT04pCithbHRiaW5pbnN0YWxsOiAkKEJVSUxEUFlUSE9OKSBARlJBTUVXT1JLUFlUSE9OV0AKIAlAZm9yIGkgaW4gJChCSU5ESVIpICQoTElCRElSKTsgXAogCWRvIFwKIAkJaWYgdGVzdCAhIC1kICQoREVTVERJUikkJGk7IHRoZW4gXApAQCAtOTQ0LDE0ICsxMDI3LDE4IEBACiAJCWVsc2UJdHJ1ZTsgXAogCQlmaTsgXAogCWRvbmUKLQkkKElOU1RBTExfUFJPR1JBTSkgJChCVUlMRFBZVEhPTikgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSkKKwlpZiB0ZXN0ICIkKFBZVEhPTkZSQU1FV09SS0RJUikiID0gIm5vLWZyYW1ld29yayIgOyB0aGVuIFwKKwkJJChJTlNUQUxMX1BST0dSQU0pICQoQlVJTERQWVRIT04pICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpOyBcCisJZWxzZSBcCisJCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgTWFjL3B5dGhvbncgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSk7IFwKKwlmaQogCS1pZiB0ZXN0ICIkKFZFUlNJT04pIiAhPSAiJChMRFZFUlNJT04pIjsgdGhlbiBcCiAJCWlmIHRlc3QgLWYgJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpIC1vIC1oICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKTsgXAogCQl0aGVuIHJtIC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKTsgXAogCQlmaTsgXAogCQkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgcHl0aG9uJChMRFZFUlNJT04pJChFWEUpIHB5dGhvbiQoVkVSU0lPTikkKEVYRSkpOyBcCiAJZmkKLQlpZiB0ZXN0IC1mICQoTERMSUJSQVJZKTsgdGhlbiBcCisJaWYgdGVzdCAtZiAkKExETElCUkFSWSkgJiYgdGVzdCAiJChQWVRIT05GUkFNRVdPUktESVIpIiA9ICJuby1mcmFtZXdvcmsiIDsgdGhlbiBcCiAJCWlmIHRlc3QgLW4gIiQoRExMTElCUkFSWSkiIDsgdGhlbiBcCiAJCQkkKElOU1RBTExfU0hBUkVEKSAkKERMTExJQlJBUlkpICQoREVTVERJUikkKEJJTkRJUik7IFwKIAkJZWxzZSBcCkBAIC05NjUsNiArMTA1MiwxMiBAQAogCQlmaTsgXAogCWVsc2UJdHJ1ZTsgXAogCWZpCisJaWYgdGVzdCAieCQoTElQT18zMkJJVF9GTEFHUykiICE9ICJ4IiA7IHRoZW4gXAorCQlybSAtZiAkKERFU1RESVIpJChCSU5ESVIpcHl0aG9uJChWRVJTSU9OKS0zMiQoRVhFKTsgXAorCQlsaXBvICQoTElQT18zMkJJVF9GTEFHUykgXAorCQkJLW91dHB1dCAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTiktMzIkKEVYRSkgXAorCQkJJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpOyBcCisJZmkKIAogYmluaW5zdGFsbDogYWx0YmluaW5zdGFsbAogCS1pZiB0ZXN0IC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uMyQoRVhFKSAtbyAtaCAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbjMkKEVYRSk7IFwKQEAgLTk5MCw2ICsxMDgzLDEwIEBACiAJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIC1zIDJ0bzMtJChWRVJTSU9OKSAydG8zKQogCS1ybSAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dmVudgogCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSAtcyBweXZlbnYtJChWRVJTSU9OKSBweXZlbnYpCisJaWYgdGVzdCAieCQoTElQT18zMkJJVF9GTEFHUykiICE9ICJ4IiA7IHRoZW4gXAorCQlybSAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbjMtMzIkKEVYRSk7IFwKKwkJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIC1zIHB5dGhvbiQoVkVSU0lPTiktMzIkKEVYRSkgcHl0aG9uMy0zMiQoRVhFKSkgXAorCWZpCiAKICMgSW5zdGFsbCB0aGUgdmVyc2lvbmVkIG1hbnVhbCBwYWdlCiBhbHRtYW5pbnN0YWxsOgpAQCAtMTA0Miw4ICsxMTM5LDExIEBACiAJCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50L2NoaWxkIFwKICAgICAgICAgICAgICAgICB0ZXN0L25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UgXAogICAgICAgICAgICAgICAgIHRlc3QvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QgXAorCQlhc3luY2lvIFwKKwkJdGVzdC90ZXN0X2FzeW5jaW8gXAogCQljb2xsZWN0aW9ucyBjb25jdXJyZW50IGNvbmN1cnJlbnQvZnV0dXJlcyBlbmNvZGluZ3MgXAogCQllbWFpbCBlbWFpbC9taW1lIHRlc3QvdGVzdF9lbWFpbCB0ZXN0L3Rlc3RfZW1haWwvZGF0YSBcCisJCWVuc3VyZXBpcCBlbnN1cmVwaXAvX2J1bmRsZWQgXAogCQlodG1sIGpzb24gdGVzdC90ZXN0X2pzb24gaHR0cCBkYm0geG1scnBjIFwKIAkJc3FsaXRlMyBzcWxpdGUzL3Rlc3QgXAogCQlsb2dnaW5nIGNzdiB3c2dpcmVmIHVybGxpYiBcCkBAIC0xMTYxLDEwICsxMjYxLDE5IEBACiAJZmk7IFwKIAljZCAkKHNyY2RpcikvTGliLyQoUExBVERJUik7ICQoUlVOU0hBUkVEKSAuL3JlZ2VuCiAKLXB5dGhvbi1jb25maWc6ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4KK3B5dGhvbi1jb25maWc6ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gTWlzYy9weXRob24tY29uZmlnLnNoCiAJIyBTdWJzdGl0dXRpb24gaGFwcGVucyBoZXJlLCBhcyB0aGUgY29tcGxldGVseS1leHBhbmRlZCBCSU5ESVIKIAkjIGlzIG5vdCBhdmFpbGFibGUgaW4gY29uZmlndXJlCi0Jc2VkIC1lICJzLEBFWEVOQU1FQCwkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpLCIgPCAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluID5weXRob24tY29uZmlnCisJc2VkIC1lICJzLEBFWEVOQU1FQCwkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpLCIgPCAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluID5weXRob24tY29uZmlnLnB5CisJIyBSZXBsYWNlIG1ha2VmaWxlIGNvbXBhdC4gdmFyaWFibGUgcmVmZXJlbmNlcyB3aXRoIHNoZWxsIHNjcmlwdCBjb21wYXQuIG9uZXM7ICQoVkFSKSAtPiAke1ZBUn0KKwlzZWQgLWUgJ3MsXCQkKFwoW0EtWmEtejAtOV9dKlwpKSxcJCRce1wxXH0sZycgPCBNaXNjL3B5dGhvbi1jb25maWcuc2ggPnB5dGhvbi1jb25maWcKKwkjIE9uIERhcndpbiwgYWx3YXlzIHVzZSB0aGUgcHl0aG9uIHZlcnNpb24gb2YgdGhlIHNjcmlwdCwgdGhlIHNoZWxsCisJIyB2ZXJzaW9uIGRvZXNuJ3QgdXNlIHRoZSBjb21waWxlciBjdXN0b21pemF0aW9ucyB0aGF0IGFyZSBwcm92aWRlZAorCSMgaW4gcHl0aG9uIChfb3N4X3N1cHBvcnQucHkpLgorCWlmIHRlc3QgYHVuYW1lIC1zYCA9IERhcndpbjsgdGhlbiBcCisJCWNwIHB5dGhvbi1jb25maWcucHkgcHl0aG9uLWNvbmZpZzsgXAorCWZpCisKIAogIyBJbnN0YWxsIHRoZSBpbmNsdWRlIGZpbGVzCiBJTkNMRElSU1RPTUFLRT0kKElOQ0xVREVESVIpICQoQ09ORklOQ0xVREVESVIpICQoSU5DTFVERVBZKSAkKENPTkZJTkNMVURFUFkpCkBAIC0xMjIyLDggKzEzMzEsOCBAQAogCSQoSU5TVEFMTF9EQVRBKSBNaXNjL3B5dGhvbi5wYyAkKERFU1RESVIpJChMSUJQQykvcHl0aG9uLSQoVkVSU0lPTikucGMKIAkkKElOU1RBTExfU0NSSVBUKSAkKHNyY2RpcikvTW9kdWxlcy9tYWtlc2V0dXAgJChERVNURElSKSQoTElCUEwpL21ha2VzZXR1cAogCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9pbnN0YWxsLXNoICQoREVTVERJUikkKExJQlBMKS9pbnN0YWxsLXNoCisJJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZy5weSAkKERFU1RESVIpJChMSUJQTCkvcHl0aG9uLWNvbmZpZy5weQogCSQoSU5TVEFMTF9TQ1JJUFQpIHB5dGhvbi1jb25maWcgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTiktY29uZmlnCi0Jcm0gcHl0aG9uLWNvbmZpZwogCUBpZiBbIC1zIE1vZHVsZXMvcHl0aG9uLmV4cCAtYSBcCiAJCSJgZWNobyAkKE1BQ0hERVApIHwgc2VkICdzL15cKC4uLlwpLiovXDEvJ2AiID0gImFpeCIgXTsgdGhlbiBcCiAJCWVjaG87IGVjaG8gIkluc3RhbGxpbmcgc3VwcG9ydCBmaWxlcyBmb3IgYnVpbGRpbmcgc2hhcmVkIGV4dGVuc2lvbiBtb2R1bGVzIG9uIEFJWDoiOyBcCkBAIC0xMzA1LDcgKzE0MTQsMTQgQEAKIGZyYW1ld29ya2luc3RhbGxhcHBzOgogCWNkIE1hYyAmJiAkKE1BS0UpIGluc3RhbGxhcHBzIERFU1RESVI9IiQoREVTVERJUikiCiAKLSMgVGhpcyBpbnN0YWxsIHRoZSB1bml4IHB5dGhvbiBhbmQgcHl0aG9udyB0b29scyBpbiAvdXNyL2xvY2FsL2JpbgorIyBCdWlsZCB0aGUgYm9vdHN0cmFwIGV4ZWN1dGFibGUgdGhhdCB3aWxsIHNwYXduIHRoZSBpbnRlcnByZXRlciBpbnNpZGUKKyMgYW4gYXBwIGJ1bmRsZSB3aXRoaW4gdGhlIGZyYW1ld29yay4gIFRoaXMgYWxsb3dzIHRoZSBpbnRlcnByZXRlciB0bworIyBydW4gT1MgWCBHVUkgQVBJcy4KK2ZyYW1ld29ya3B5dGhvbnc6CisJY2QgTWFjICYmICQoTUFLRSkgcHl0aG9udworCisjIFRoaXMgaW5zdGFsbHMgdGhlIHB5dGhvbiogYW5kIG90aGVyIGJpbiBzeW1saW5rcyBpbiAkcHJlZml4L2JpbiBvciBpbgorIyBhIGJpbiBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gdGhlIGZyYW1ld29yayByb290CiBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzOgogCWNkIE1hYyAmJiAkKE1BS0UpIGluc3RhbGx1bml4dG9vbHMgREVTVERJUj0iJChERVNURElSKSIKIApAQCAtMTQwMyw2ICsxNTE5LDggQEAKIAogcHJvZmlsZS1yZW1vdmFsOgogCWZpbmQgLiAtbmFtZSAnKi5nYz8/JyAtZXhlYyBybSAtZiB7fSAnOycKKwlybSAtZiAkKENPVkVSQUdFX0lORk8pCisJcm0gLXJmICQoQ09WRVJBR0VfUkVQT1JUKQogCiBjbG9iYmVyOiBjbGVhbiBwcm9maWxlLXJlbW92YWwKIAktcm0gLWYgJChCVUlMRFBZVEhPTikgJChQR0VOKSAkKExJQlJBUlkpICQoTERMSUJSQVJZKSAkKERMTExJQlJBUlkpIFwKQEAgLTE0MTAsNiArMTUyOCw3IEBACiAJCWNvbmZpZy5jYWNoZSBjb25maWcubG9nIHB5Y29uZmlnLmggTW9kdWxlcy9jb25maWcuYwogCS1ybSAtcmYgYnVpbGQgcGxhdGZvcm0KIAktcm0gLXJmICQoUFlUSE9ORlJBTUVXT1JLRElSKQorCS1ybSAtZiBweXRob24tY29uZmlnLnB5IHB5dGhvbi1jb25maWcKIAogIyBNYWtlIHRoaW5ncyBleHRyYSBjbGVhbiwgYmVmb3JlIG1ha2luZyBhIGRpc3RyaWJ1dGlvbjoKICMgcmVtb3ZlIGFsbCBnZW5lcmF0ZWQgZmlsZXMsIGV2ZW4gTWFrZWZpbGVbLnByZV0KQEAgLTE0ODEsNyArMTYwMCw3IEBACiAuUEhPTlk6IGZyYW1ld29ya2luc3RhbGwgZnJhbWV3b3JraW5zdGFsbGZyYW1ld29yayBmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlCiAuUEhPTlk6IGZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scwogLlBIT05ZOiBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIHJlY2hlY2sgYXV0b2NvbmYgY2xlYW4gY2xvYmJlciBkaXN0Y2xlYW4KLS5QSE9OWTogc21lbGx5IGZ1bm55IHBhdGNoY2hlY2sgdG91Y2ggYWx0bWFuaW5zdGFsbAorLlBIT05ZOiBzbWVsbHkgZnVubnkgcGF0Y2hjaGVjayB0b3VjaCBhbHRtYW5pbnN0YWxsIGNvbW1vbmluc3RhbGwKIC5QSE9OWTogZ2RiaG9va3MKIAogIyBJRiBZT1UgUFVUIEFOWVRISU5HIEhFUkUgSVQgV0lMTCBHTyBBV0FZCmRpZmYgLS1naXQgYS9NaXNjL0FDS1MgYi9NaXNjL0FDS1MKaW5kZXggYThiYjE2MS4uMTJiNWFiNSAxMDA2NDQKLS0tIGEvTWlzYy9BQ0tTCisrKyBiL01pc2MvQUNLUwpAQCAtNTYsNiArNTYsNyBAQAogRG9ub3ZhbiBCYWFyZGEKIEFybmUgQmFiZW5oYXVzZXJoZWlkZQogQXR0aWxhIEJhYm8KK01hdHQgQmFjaG1hbm4KIE1hcmNpbiBCYWNocnkKIEFsZm9uc28gQmFjaWVybwogRHdheW5lIEJhaWxleQpAQCAtMTIyLDYgKzEyMyw3IEBACiBNaWNoYWVsIEJpcnR3ZWxsCiBTdHVhcnQgQmlzaG9wCiBSb3kgQml4bGVyCitEYW5pZWwgQmxhY2sKIEpvbmF0aGFuIEJsYWNrCiBSZW5hdWQgQmxhbmNoCiBNaWtlIEJsYW5kCkBAIC0xMzksNiArMTQxLDcgQEAKIEZvcmVzdCBCb25kCiBHcmVnb3J5IEJvbmQKIE1hdGlhcyBCb3JkZXNlCitKb25hcyBCb3Jnc3Ryw7ZtCiBKdXJqZW4gQm9zCiBQZXRlciBCb3NjaAogRGFuIEJvc3dlbGwKQEAgLTE1Myw4ICsxNTYsMTAgQEAKIENocmlzdG9waGVyIEJyYW5ub24KIFRlcnJlbmNlIEJyYW5ub24KIEdlcm3DoW4gTS4gQnJhdm8KK1N2ZW4gQnJhdWNoCiBFcmlrIEJyYXkKIEJyaWFuIEJyYXppbAorRGVtaWFuIEJyZWNodAogRGF2ZSBCcmVubmFuCiBUb20gQnJpZGdtYW4KIEFudGhvbnkgQnJpZ2dzCkBAIC0xNzEsOSArMTc2LDExIEBACiBGcmFuY2lzY28gTWFydMOtbiBCcnVndcOpCiBJYW4gQnJ1bnRsZXR0CiBGbG9yaXMgQnJ1eW5vb2doZQorTWF0dCBCcnlhbnQKIFN0YW4gQnVicm91c2tpCiBFcmlrIGRlIEJ1ZWdlcgogSmFuLUhlaW4gQsO8aHJtYW4KK0xhcnMgQnVpdGluY2sKIERpY2sgQnVsdGVybWFuCiBCaWxsIEJ1bWdhcm5lcgogSmltbXkgQnVyZ2V0dApAQCAtMTkzLDYgKzIwMCw3IEBACiBNaWtlIENhcmx0b24KIFBpZXJyZSBDYXJyaWVyCiBUZXJyeSBDYXJyb2xsCitFZHdhcmQgQ2F0bXVyCiBMb3JlbnpvIE0uIENhdHVjY2kKIERvbm4gQ2F2ZQogQ2hhcmxlcyBDYXphYm9uCkBAIC0yMjcsNiArMjM1LDcgQEAKIENyYWlnIENpdHJvCiBHaWxsZXMgQ2l2YXJpbwogQ2hyaXMgQ2xhcmsKK0xhdXJpZSBDbGFyay1NaWNoYWxlawogTWlrZSBDbGFya3NvbgogQW5kcmV3IENsZWdnCiBCcmFkIENsZW1lbnRzCkBAIC0yODQsNiArMjkzLDcgQEAKIEpvbmF0aGFuIERhc3RlZWwKIFBpZXJyZS1ZdmVzIERhdmlkCiBBLiBKZXNzZSBKaXJ5dSBEYXZpcworTWVybGlqbiB2YW4gRGVlbgogSm9obiBEZUdvb2QKIE5lZCBEZWlseQogVmluY2VudCBEZWxmdApAQCAtMzE5LDExICszMjksMTMgQEAKIEpvaG4gRHVCb2lzCiBQYXVsIER1Ym9pcwogSmFjcXVlcyBEdWNhc3NlCitBbmRyZWkgRG9yaWFuIER1bWEKIEdyYWhhbSBEdW1wbGV0b24KIFF1aW5uIER1bmthbgogUm9iaW4gRHVubgogTHVrZSBEdW5zdGFuCiBWaXJnaWwgRHVwcmFzCitCcnVubyBEdXB1aXMKIEFuZHkgRHVzdG1hbgogR2FyeSBEdXphbgogRXVnZW5lIER2dXJlY2hlbnNraQpAQCAtMzMyLDYgKzM0NCw3IEBACiBXYWx0ZXIgRMO2cndhbGQKIEhhbnMgRWNrYXJkdAogUm9kb2xwaG8gRWNraGFyZHQKK1VscmljaCBFY2toYXJkdAogRGF2aWQgRWRlbHNvaG4KIEpvaG4gRWRtb25kcwogR3JhbnQgRWR3YXJkcwpAQCAtMzQ2LDYgKzM1OSw3IEBACiBEYXZpZCBFbHkKIEplZmYgRXBsZXIKIFRvbSBFcHBlcmx5CitHw7ZrY2VuIEVyYXNsYW4KIFN0b2ZmZWwgRXJhc211cwogSsO8cmdlbiBBLiBFcmhhcmQKIE1pY2hhZWwgRXJuc3QKQEAgLTQ0Miw2ICs0NTYsNyBAQAogTWF0dCBHaXVjYQogV2ltIEdsZW5uCiBNaWNoYWVsIEdvZGVyYmF1ZXIKK0plcm9lbiBWYW4gR29leQogQ2hyaXN0b3BoIEdvaGxrZQogVGltIEdvbGRlbgogR3VpbGhlcm1lIEdvbsOnYWx2ZXMKQEAgLTQ2MCw3ICs0NzUsNyBAQAogRGFnIEdydW5lYXUKIEZpbGlwIEdydXN6Y3p5xYRza2kKIFRob21hcyBHdWV0dGxlcgotQWppdGVzaCBHdXB0YQorQW51aiBHdXB0YQogTWljaGFlbCBHdXJhdmFnZQogTGFycyBHdXN0w6RiZWwKIFRob21hcyBHw7x0dGxlcgpAQCAtNDcxLDYgKzQ4Niw3IEBACiBSYXNtdXMgSGFobgogUGV0ZXIgSGFpZ2h0CiBWw6FjbGF2IEhhaXNtYW4KK1piaWduaWV3IEhhbGFzCiBXYWxrZXIgSGFsZSBJVgogQm9iIEhhbGxleQogSmVzc2UgSGFsbGlvCkBAIC00OTYsNiArNTEyLDcgQEAKIFJ5Y2hhcmRlIEhhd2tlcwogQmVuIEhheWRlbgogSm9jaGVuIEhheWVrCitUaW0gSGVhbmV5CiBIZW5yaWsgSGVpbWJ1ZXJnZXIKIENocmlzdGlhbiBIZWltZXMKIFRob21hcyBIZWxsZXIKQEAgLTYwMSw2ICs2MTgsNyBAQAogRnJlZHJpayBKb2hhbnNzb24KIEdyZWdvcnkgSy4gSm9obnNvbgogS2VudCBKb2huc29uCitNaWNoYWVsIEpvaG5zb24KIFNpbW9uIEpvaG5zdG9uCiBNYXR0IEpvaW5lcgogVGhvbWFzIEpvbGxhbnMKQEAgLTYyMCw2ICs2MzgsNyBAQAogU2FyYWggSy4KIFN1bm55IEsKIEJvaHVzbGF2IEthYnJkYQorQWxleGV5IEthY2hheWV2CiBCb2IgS2FobgogS3VydCBCLiBLYWlzZXIKIFRhbWl0byBLYWppeWFtYQpAQCAtNjQxLDYgKzY2MCw3IEBACiBNYWdudXMgS2Vzc2xlcgogTGF3cmVuY2UgS2VzdGVsb290CiBWaXZlayBLaGVyYQorRGhpcnUgS2hvbGlhCiBNYWRzIEtpaWxlcmljaAogSmFzb24gS2lsbGVuCiBKYW4gS2ltCkBAIC02OTcsNyArNzE3LDkgQEAKIEVybm8gS3V1c2VsYQogUm9zcyBMYWdlcndhbGwKIENhbWVyb24gTGFpcmQKK0RhdmlkIExhbQogVGhvbWFzIExhbWIKK1ZhbGVyaWUgTGFtYmVydAogSmVhbi1CYXB0aXN0ZSAiSmliYSIgTGFteQogUm9uYW4gTGFteQogVG9yc3RlbiBMYW5kc2Nob2ZmCkBAIC03MzUsOSArNzU3LDExIEBACiBNYXRldXN6IExlbmlrCiBKb2huIExlbnRvbgogS29zdHlhbnR5biBMZXNjaGVua28KK0Jlbm5vIExlc2xpZQogQ2hyaXN0b3BoZXIgVHVyIExlc25pZXdza2ktTGFhcwogQWxhaW4gTGV1ZnJveQogTWFyayBMZXZpbnNvbgorTWFyayBMZXZpdHQKIFdpbGxpYW0gTGV3aXMKIEFraXJhIExpCiBYdWFuamkgTGkKQEAgLTc2MSwxNCArNzg1LDE3IEBACiBBbm5lIExvcmQKIFRvbSBMb3JlZG8KIEp1c3RpbiBMb3ZlCitOZWQgSmFja3NvbiBMb3ZlbHkKIEphc29uIExvd2UKIFRvbnkgTG93bmRzCiBSYXkgTG95emFnYQorS2FuZy1IYW8gKEtlbm55KSBMdQogTHVrYXMgTHVlZwogTG9yZW4gTHVrZQogRnJlZHJpayBMdW5kaAogWmhvbmd5dWUgTHVvCiBNYXJrIEx1dHoKK1RhcmFzIEx5YXB1bgogSmltIEx5bmNoCiBNaWthZWwgTHluZ3ZpZwogTWFydGluIHZvbiBMw7Z3aXMKQEAgLTc3OSw5ICs4MDYsMTMgQEAKIFRpbSBNYWNLZW56aWUKIE5pY2sgTWFjbGFyZW4KIERvbiBNYWNNaWxsZW4KK1RvbWFzeiBNYcSHa293aWFrCiBTdGV2ZSBNYWpld3NraQorTWFyZWsgTWFqa293c2tpCiBHcnplZ29yeiBNYWthcmV3aWN6CiBEYXZpZCBNYWxjb2xtCitHcmVnIE1hbGNvbG0KK1dpbGxpYW0gTWFsbGFyZAogS2VuIE1hbmhlaW1lcgogVmxhZGltaXIgTWFyYW5nb3pvdgogQ29saW4gTWFyYwpAQCAtODA0LDcgKzgzNSw5IEBACiBEaWV0ZXIgTWF1cmVyCiBEYW5pZWwgTWF5CiBNYWRpc29uIE1heQorTHVjYXMgTWF5c3RyZQogQXJuYXVkIE1hemluCitNYXR0IE1jQ2x1cmUKIFJlYmVjY2EgTWNDcmVhcnkKIEtpcmsgTWNEb25hbGQKIENocmlzIE1jRG9ub3VnaApAQCAtODQ0LDYgKzg3Nyw3IEBACiBEYW1pZW4gTWlsbGVyCiBKYXNvbiBWLiBNaWxsZXIKIEpheSBULiBNaWxsZXIKK0thdGllIE1pbGxlcgogUm9tYW4gTWlsbmVyCiBKdWxpZW4gTWlvdHRlCiBBbmRyaWkgVi4gTWlzaGtvdnNreWkKQEAgLTg1Myw2ICs4ODcsNyBAQAogRmxvcmlhbiBNbGFkaXRzY2gKIERvdWcgTW9lbgogVGhlIERyYWdvbiBEZSBNb25zeW5lCitCYXN0aWVuIE1vbnRhZ25lCiBTa2lwIE1vbnRhbmFybwogUGV0ZXIgTW9vZHkKIFBhdWwgTW9vcmUKQEAgLTg2MCw2ICs4OTUsNyBAQAogQmVuIE1vcmdhbgogRGVyZWsgTW9ycgogSmFtZXMgQSBNb3JyaXNvbgorTWFydGluIE1vcnJpc29uCiBEZXJlayBNY1RhdmlzaCBNb3VuY2UKIEFsZXNzYW5kcm8gTW91cmEKIFBhYmxvIE1vdXpvCkBAIC04NzQsNiArOTEwLDcgQEAKIExvdWlzIE11bnJvCiBSLiBEYXZpZCBNdXJyYXkKIE1hdHRpIE3DpGtpCitKw7ZyZyBNw7xsbGVyCiBEYWxlIE5hZ2F0YQogSm9obiBOYWdsZQogVGFrYWhpcm8gTmFrYXlhbWEKQEAgLTkzNiw2ICs5NzMsNyBAQAogVG9kZCBSLiBQYWxtZXIKIEp1YW4gRGF2aWQgSWLDocOxZXogUGFsb21hcgogSmFuIFBhbHVzCitNYXRoaWFzIFBhbnplbmLDtmNrCiBNLiBQYXBpbGxvbgogUGV0ZXIgUGFyZW50ZQogQWxleGFuZHJlIFBhcmVudGVhdQpAQCAtOTQ0LDYgKzk4Miw3IEBACiBIZWlra2kgUGFydGFuZW4KIEhhcnJpIFBhc2FuZW4KIEdhw6tsIFBhc2dyaW1hdWQKK0FzaGlzaCBOaXRpbiBQYXRpbAogUmFuZHkgUGF1c2NoCiBTYW11ZWxlIFBlZHJvbmkKIEp1c3RpbiBQZWVsCkBAIC05NjIsOCArMTAwMSwxMCBAQAogQmVuamFtaW4gUGV0ZXJzb24KIEpvZSBQZXRlcnNvbgogQ2hyaXMgUGV0cmlsbGkKK1JvdW1lbiBQZXRyb3YKIEJqb3JuIFBldHRlcnNlbgogSnVzdGluIEQuIFBldHRpdAorRXNhIFBldWhhCiBSb25ueSBQZmFubnNjaG1pZHQKIEdlb2ZmIFBoaWxicmljawogR2F2cmllIFBoaWxpcHNvbgpAQCAtOTc3LDEyICsxMDE4LDE1IEBACiBGcmFuw6dvaXMgUGluYXJkCiBUb20gUGluY2tuZXkKIFphY2ggUGluY3VzCitaZXJvIFBpcmFldXMKIE1pY2hhZWwgUGlvdHJvd3NraQogQW50b2luZSBQaXRyb3UKIEplYW4tRnJhbsOnb2lzIFBpw6lyb25uZQogT2xlZyBQbGFraG90bnl1awogUmVtaSBQb2ludGVsCitBcmllbCBQb2xpYWsKIEd1aWxoZXJtZSBQb2xvCitJbGxpYSBQb2xvc3VraGluCiBNaWNoYWVsIFBvbXJhbmluZwogTWFydGluIFBvb2wKIEl1c3RpbiBQb3AKQEAgLTk5MywxOCArMTAzNywyMiBAQAogUGF1bCBQcmVzY29kCiBEb25vdmFuIFByZXN0b24KIFBhdWwgUHJpY2UKK0l1bGlpYSBQcm9za3VybmlhCiBKeXJraSBQdWxsaWFpbmVuCiBTdGV2ZSBQdXJjZWxsCiBFZHVhcmRvIFDDqXJlegogRmVybmFuZG8gUMOpcmV6CiBQaWVycmUgUXVlbnRlbAogQnJpYW4gUXVpbmxhbgorS2V2aW4gSmluZyBRaXUKIEFuZGVycyBRdmlzdAogVGhvbWFzIFJhY2hlbAorUmFtIFJhY2h1bQogSsOpcsO0bWUgUmFkaXgKIEJ1cnRvbiBSYWRvbnMKIEplZmYgUmFtbmFuaQogQnJvZGllIFJhbworU2Vua28gUmFzaWMKIEFudHRpIFJhc2luZW4KIE5pa29sYXVzIFJhdGgKIFNyaWRoYXIgUmF0bmFrdW1hcgpAQCAtMTAzNyw3ICsxMDg1LDcgQEAKIEplYW4tQ2xhdWRlIFJpbWJhdWx0CiBWbGFkIFJpc2N1dGlhCiBXZXMgUmlzaGVsCi1EYW4gUml0aQorRGFuaWVsIFJpdGkKIEp1YW4gTS4gQmVsbG8gUml2YXMKIERhdmlkZSBSaXp6bwogQW50aG9ueSBSb2FjaApAQCAtMTE2Nyw2ICsxMjE1LDcgQEAKIEtyYWdlbiBTaXRha2VyCiBNaWNoYWVsIFNsb2FuCiBOaWNrIFNsb2FuCitWw6FjbGF2IMWgbWlsYXVlcgogQ2hyaXN0b3BoZXIgU21pdGgKIEVyaWMgVi4gU21pdGgKIEdyZWdvcnkgUC4gU21pdGgKQEAgLTEyMDYsNiArMTI1NSw3IEBACiBTZXJoaXkgU3RvcmNoYWthCiBLZW4gU3RveAogRGFuIFN0cm9tYmVyZworRG9uYWxkIFN0dWZmdAogRGFuaWVsIFN0dXR6YmFjaAogQW5kcmVhcyBTdMO8aHJrCiBDb2xpbiBTdQpAQCAtMTIyMiw2ICsxMjcyLDcgQEAKIFDDqXRlciBTemFiw7MKIEFtaXIgU3pla2VseQogQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMKK0hpZGVha2kgVGFrYWhhc2hpCiBJbmRyYSBUYWxpcAogTmVpbCBUYWxsaW0KIEdlb2ZmIFRhbHZvbGEKQEAgLTEyMzMsNiArMTI4NCw3IEBACiBNb250eSBUYXlsb3IKIEFuYXRvbHkgVGVjaHRvbmlrCiBNaWtoYWlsIFRlcmVraG92CitWaWN0b3IgVGVycsOzbgogUmljaGFyZCBNLiBUZXcKIFRvYmlhcyBUaGVsZW4KIEbDqXZyeSBUaGliYXVsdApAQCAtMTI0MCw2ICsxMjkyLDcgQEAKIE5pY29sYXMgTS4gVGhpw6lyeQogSmFtZXMgVGhvbWFzCiBSb2JpbiBUaG9tYXMKK0JyaWFuIFRob3JuZQogU3RlcGhlbiBUaG9ybmUKIEplcmVteSBUaHVyZ29vZAogRXJpYyBUaWVkZW1hbm4KQEAgLTEzMTksNiArMTM3Miw3IEBACiBSb2RyaWdvIFN0ZWlubXVsbGVyIFdhbmRlcmxleQogS2UgV2FuZwogR3JlZyBXYXJkCitUb20gV2FyZGlsbAogWmFjaGFyeSBXYXJlCiBKb25hcyBXYWduZXIKIEJhcnJ5IFdhcnNhdwpAQCAtMTM0NCw2ICsxMzk4LDcgQEAKIEZlbGl4IFdpZW1hbm4KIEdlcnJ5IFdpZW5lcgogRnJhbmsgV2llcnpiaWNraQorU2FudG9zbyBXaWpheWEKIEJyeWNlICJab29rbyIgV2lsY294LU8nSGVhcm4KIFRpbW90aHkgV2lsZAogSmFrdWIgV2lsawpAQCAtMTM3Niw2ICsxNDMxLDcgQEAKIEdvcmRvbiBXb3JsZXkKIERhcnJlbiBXb3JyYWxsCiBUaG9tYXMgV291dGVycworRGFuaWVsIFdvem5pYWsKIEhlaWtvIFd1bmRyYW0KIERvdWcgV3lhdHQKIFJvYmVydCBYaWFvCkBAIC0xMzg4LDYgKzE0NDQsNyBAQAogRGFubnkgWW9vCiBSb3J5IFlvcmtlCiBHZW9yZ2UgWW9zaGlkYQorS2F6dWhpcm8gWW9zaGlkYQogTWFzYXp1bWkgWW9zaGlrYXdhCiBBcm5hdWQgWXNtYWwKIEJlcm5hcmQgWXVlCkBAIC0xNDAzLDQgKzE0NjAsNSBAQAogQ2hlbmcgWmhhbmcKIEthaSBaaHUKIFRhcmVrIFppYWTDqQorR2VubmFkaXkgWmxvYmluCiBQZXRlciDDhXN0cmFuZApkaWZmIC0tZ2l0IGEvTWlzYy9ISVNUT1JZIGIvTWlzYy9ISVNUT1JZCmluZGV4IDAxYzYzNWIuLjQyODA3NjQgMTAwNjQ0Ci0tLSBhL01pc2MvSElTVE9SWQorKysgYi9NaXNjL0hJU1RPUlkKQEAgLTMsMTMgKzMsNDExMCBAQAogCiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHJlbGVhc2UgbWVzc2FnZXMgZm9yIHByZXZpb3VzIFB5dGhvbiByZWxlYXNlcy4KIEFzIHlvdSByZWFkIG9uIHlvdSBnbyBiYWNrIHRvIHRoZSBkYXJrIGFnZXMgb2YgUHl0aG9uJ3MgaGlzdG9yeS4KLShOb3RlOiBuZXdzIGFib3V0IDIuNWMyIGFuZCBsYXRlciAyLjUgcmVsZWFzZXMgaXMgaW4gdGhlIE1pc2MvTkVXUwotZmlsZSBvZiB0aGUgcmVsZWFzZTI1LW1haW50IGJyYW5jaC4pCiAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wPworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI5LVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTYwNDY6IEZpeCBsb2FkaW5nIHNvdXJjZWxlc3MgbGVnYWN5IC5weW8gZmlsZXMuCisKKy0gSXNzdWUgIzE2MDYwOiBGaXggcmVmY291bnRpbmcgYnVnIHdoZW4gX190cnVuY19fIHJldHVybnMgYW4gb2JqZWN0CisgIHdob3NlIF9faW50X18gZ2l2ZXMgYSBub24taW50ZWdlci4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjAxMjogRml4IGEgcmVncmVzc2lvbiBpbiBweWV4cGF0LiBUaGUgcGFyc2VyJ3MgVXNlRm9yZWlnbkRURCgpCisgIG1ldGhvZCBkb2Vzbid0IHJlcXVpcmUgYW4gYXJndW1lbnQgYWdhaW4uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDIzLVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU5MDA6IEZpeCByZWZlcmVuY2UgbGVhayBpbiBQeVVuaWNvZGVfVHJhbnNsYXRlQ2hhcm1hcCgpLgorCistIElzc3VlICMxNTkyNjogRml4IGNyYXNoIGFmdGVyIG11bHRpcGxlIHJlaW5pdGlhbGl6YXRpb25zIG9mIHRoZSBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTU4OTU6IEZpeCBGSUxFIHBvaW50ZXIgbGVhayBpbiBvbmUgZXJyb3IgYnJhbmNoIG9mCisgIFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzKCkgd2hlbiBmaWxlbmFtZSBwb2ludHMgdG8gYSBweWMvcHlvIGZpbGUsIGNsb3NlaXQKKyAgaXMgZmFsc2UgYW4gYW5kIHNldF9tYWluX2xvYWRlcigpIGZhaWxzLgorCistIEZpeGVzIGZvciBhIGZldyBjcmFzaCBhbmQgbWVtb3J5IGxlYWsgcmVncmVzc2lvbnMgZm91bmQgYnkgQ292ZXJpdHkuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTU4ODI6IENoYW5nZSBfZGVjaW1hbCB0byBhY2NlcHQgYW55IGNvZWZmaWNpZW50IHR1cGxlIHdoZW4KKyAgY29uc3RydWN0aW5nIGluZmluaXRpZXMuIFRoaXMgaXMgZG9uZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgd2l0aCBkZWNpbWFsLnB5OiBJbmZpbml0eSBjb2VmZmljaWVudHMgYXJlIHVuZGVmaW5lZCBpbiBfZGVjaW1hbAorICAoaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzcGVjaWZpY2F0aW9uKS4KKworLSBJc3N1ZSAjMTU5MjU6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gZW1haWwudXRpbCB3aGVyZSB0aGUgcGFyc2VkYXRlKCkgYW5kCisgIHBhcnNlZGF0ZV90eigpIGZ1bmN0aW9ucyBkaWQgbm90IHJldHVybiBOb25lIGFueW1vcmUgd2hlbiB0aGUgYXJndW1lbnQgY291bGQKKyAgbm90IGJlIHBhcnNlZC4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1OTczOiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBjb21wYXJpbmcgZGF0ZXRpbWUgdGltZXpvbmUKKyAgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTU5Nzc6IEZpeCBtZW1vcnkgbGVhayBpbiBNb2R1bGVzL19zc2wuYyB3aGVuIHRoZSBmdW5jdGlvbgorICBfc2V0X25wbl9wcm90b2NvbHMoKSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRoYW5rcyB0byBEYW5pZWwgU29tbWVybWFubi4KKworLSBJc3N1ZSAjMTU5Njk6IGZhdWx0aGFuZGxlciBtb2R1bGU6IHJlbmFtZSBkdW1wX3RyYWNlYmFja3NfbGF0ZXIoKSB0bworICBkdW1wX3RyYWNlYmFja19sYXRlcigpIGFuZCBjYW5jZWxfZHVtcF90cmFjZWJhY2tzX2xhdGVyKCkgdG8KKyAgY2FuY2VsX2R1bXBfdHJhY2ViYWNrX2xhdGVyKCkuCisKKy0gX2RlY2ltYWwgbW9kdWxlOiB1c2Ugb25seSBDIDg5IHN0eWxlIGNvbW1lbnRzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIFJlbGVhc2UgQ2FuZGlkYXRlIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwOS1TZXAtMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEzOTkyOiBUaGUgdHJhc2hjYW4gbWVjaGFuaXNtIGlzIG5vdyB0aHJlYWQtc2FmZS4gIFRoaXMgZWxpbWluYXRlcworICBzcG9yYWRpYyBjcmFzaGVzIGluIG11bHRpLXRocmVhZCBwcm9ncmFtcyB3aGVuIHNldmVyYWwgbG9uZyBkZWFsbG9jYXRvcgorICBjaGFpbnMgcmFuIGNvbmN1cnJlbnRseSBhbmQgaW52b2x2ZWQgc3ViY2xhc3NlcyBvZiBidWlsdC1pbiBjb250YWluZXIKKyAgdHlwZXMuCisKKy0gSXNzdWUgIzE1Nzg0OiBNb2RpZnkgT1NFcnJvci5fX3N0cl9fKCkgdG8gYmV0dGVyIGRpc3Rpbmd1aXNoIGJldHdlZW4KKyAgZXJybm8gZXJyb3IgbnVtYmVycyBhbmQgV2luZG93cyBlcnJvciBudW1iZXJzLgorCistIElzc3VlICMxNTc4MTogRml4IHR3byBzbWFsbCByYWNlIGNvbmRpdGlvbnMgaW4gaW1wb3J0J3MgbW9kdWxlIGxvY2tpbmcuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTU4NDc6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYXJncGFyc2UsIHdoaWNoIGRpZCBub3QgYWNjZXB0IHR1cGxlcworICBhcyBhcmd1bWVudCBsaXN0cyBhbnltb3JlLgorCistIElzc3VlICMxNTgyODogUmVzdG9yZSBzdXBwb3J0IGZvciBDIGV4dGVuc2lvbnMgaW4gaW1wLmxvYWRfbW9kdWxlKCkuCisKKy0gSXNzdWUgIzE1MzQwOiBGaXggaW1wb3J0aW5nIHRoZSByYW5kb20gbW9kdWxlIHdoZW4gL2Rldi91cmFuZG9tIGNhbm5vdAorICBiZSBvcGVuZWQuICBUaGlzIHdhcyBhIHJlZ3Jlc3Npb24gY2F1c2VkIGJ5IHRoZSBoYXNoIHJhbmRvbWl6YXRpb24gcGF0Y2guCisKKy0gSXNzdWUgIzEwNjUwOiBEZXByZWNhdGUgdGhlIHdhdGNoZXhwIHBhcmFtZXRlciBvZiB0aGUgRGVjaW1hbC5xdWFudGl6ZSgpCisgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTU3ODU6IE1vZGlmeSB3aW5kb3cuZ2V0X3djaCgpIEFQSSBvZiB0aGUgY3Vyc2VzIG1vZHVsZTogcmV0dXJuCisgIGEgY2hhcmFjdGVyIGZvciBtb3N0IGtleXMsIGFuZCBhbiBpbnRlZ2VyIGZvciBzcGVjaWFsIGtleXMsIGluc3RlYWQgb2YKKyAgYWx3YXlzIHJldHVybmluZyBhbiBpbnRlZ2VyLiBTbyBpdCBpcyBub3cgcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggc3BlY2lhbAorICBrZXlzIGxpa2Uga2V5cGFkIGtleXMuCisKKy0gSXNzdWUgIzE0MjIzOiBGaXggd2luZG93LmFkZGNoKCkgb2YgdGhlIGN1cnNlcyBtb2R1bGUgZm9yIHNwZWNpYWwgY2hhcmFjdGVycworICBsaWtlIGN1cnNlcy5BQ1NfSExJTkU6IHRoZSBQeXRob24gZnVuY3Rpb24gYWRkY2goaW50KSBhbmQgYWRkY2goYnl0ZXMpIGlzIG5vdworICBjYWxsaW5nIHRoZSBDIGZ1bmN0aW9uIHdhZGRjaCgpL212d2FkZGNoKCkgKGFzIGl0IHdhcyBkb25lIGluIFB5dGhvbiAzLjIpLAorICBpbnN0ZWFkIG9mIHdhZGRfd2NoKCkvbXZ3YWRkX3djaCgpLiBUaGUgUHl0aG9uIGZ1bmN0aW9uIGFkZGNoKHN0cikgaXMgc3RpbGwKKyAgY2FsbGluZyB0aGUgQyBmdW5jdGlvbiB3YWRkX3djaCgpL212d2FkZF93Y2goKSBpZiB0aGUgUHl0aG9uIGN1cnNlcyBpcyBsaW5rZWQKKyAgdG8gbGlibmN1cnNlc3cuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNTgyMjogUmVhbGx5IGVuc3VyZSAydG8zIGdyYW1tYXIgcGlja2xlcyBhcmUgcHJvcGVybHkgaW5zdGFsbGVkCisgIChyZXBsYWNlcyBmaXhlcyBmb3IgSXNzdWUgIzE1NjQ1KS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTgxNDogVGhlIG1lbW9yeXZpZXcgZW5oYW5jZW1lbnRzIGluIDMuMy4wIGFjY2lkZW50YWxseSBwZXJtaXR0ZWQKKyAgdGhlIGhhc2hpbmcgb2YgbXVsdGktZGltZW5zaW9uYWwgbWVtb3J2aWV3cyBhbmQgbWVtb3J5dmlld3Mgd2l0aCBtdWx0aS1ieXRlCisgIGl0ZW0gZm9ybWF0cy4gVGhlIGludGVuZGVkIHJlc3RyaWN0aW9ucyBoYXZlIG5vdyBiZWVuIGRvY3VtZW50ZWQgLSB0aGV5CisgIHdpbGwgYmUgY29ycmVjdGx5IGVuZm9yY2VkIGluIDMuMy4xCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI1LUF1Zy0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU1NzM6IG1lbW9yeXZpZXcgY29tcGFyaXNvbnMgYXJlIG5vdyBwZXJmb3JtZWQgYnkgdmFsdWUgd2l0aCBmdWxsCisgIHN1cHBvcnQgZm9yIGFueSB2YWxpZCBzdHJ1Y3QgbW9kdWxlIGZvcm1hdCBkZWZpbml0aW9uLgorCistIElzc3VlICMxNTMxNjogV2hlbiBhbiBpdGVtIGluIHRoZSBmcm9tbGlzdCBmb3IgX19pbXBvcnRfXyBkb2Vzbid0IGV4aXN0LAorICBkb24ndCByYWlzZSBhbiBlcnJvciwgYnV0IGlmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYXMgcGFydCBvZiBhbiBpbXBvcnQgZG8KKyAgbGV0IHRoYXQgcHJvcGFnYXRlLgorCistIElzc3VlICMxNTc3ODogZW5zdXJlIHRoYXQgc3RyKEltcG9ydEVycm9yKG1zZykpIHJldHVybnMgYSBzdHIKKyAgZXZlbiB3aGVuIG1zZyBpc24ndCBhIHN0ci4KKworLSBJc3N1ZSAjMjA1MTogU291cmNlIGZpbGUgcGVybWlzc2lvbiBiaXRzIGFyZSBvbmNlIGFnYWluIGNvcnJlY3RseQorICBjb3BpZWQgdG8gdGhlIGNhY2hlZCBieXRlY29kZSBmaWxlLiAoVGhlIG1pZ3JhdGlvbiB0byBpbXBvcnRsaWIKKyAgcmVpbnRyb2R1Y2VkIHRoaXMgcHJvYmxlbSBiZWNhdXNlIHRoZXNlIHdhcyBubyByZWdyZXNzaW9uIHRlc3QuIEEgdGVzdAorICBoYXMgYmVlbiBhZGRlZCBhcyBwYXJ0IG9mIHRoaXMgcGF0Y2gpCisKKy0gSXNzdWUgIzE1NzYxOiBGaXggY3Jhc2ggd2hlbiBQWVRIT05FWEVDVVRBQkxFIGlzIHNldCBvbiBNYWMgT1MgWC4KKworLSBJc3N1ZSAjMTU3MjY6IEZpeCBpbmNvcnJlY3QgYm91bmRzIGNoZWNraW5nIGluIFB5U3RhdGVfRmluZE1vZHVsZS4KKyAgUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxNTYwNDogVXBkYXRlIHVzZXMgb2YgUHlPYmplY3RfSXNUcnVlKCkgdG8gY2hlY2sgZm9yIGFuZCBoYW5kbGUKKyAgZXJyb3JzIGNvcnJlY3RseS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0ODQ2OiBpbXBvcnRsaWIuRmlsZUZpbmRlciBub3cgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUKKyAgZGlyZWN0b3J5IGJlaW5nIHNlYXJjaGVkIGlzIHJlbW92ZWQgYWZ0ZXIgYSBwcmV2aW91cyBpbXBvcnQgYXR0ZW1wdAorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzEzMzcwOiBFbnN1cmUgdGhhdCBjdHlwZXMgd29ya3Mgb24gTWFjIE9TIFggd2hlbiBQeXRob24gaXMKKyAgY29tcGlsZWQgdXNpbmcgdGhlIGNsYW5nIGNvbXBpbGVyCisKKy0gSXNzdWUgIzEzMDcyOiBUaGUgYXJyYXkgbW9kdWxlJ3MgJ3UnIGZvcm1hdCBjb2RlIGlzIG5vdyBkZXByZWNhdGVkIGFuZAorICB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDQuMC4KKworLSBJc3N1ZSAjMTU1NDQ6IEZpeCBEZWNpbWFsLl9fZmxvYXRfXyB0byB3b3JrIHdpdGggcGF5bG9hZC1jYXJyeWluZyBOYU5zLgorCistIElzc3VlICMxNTI0OTogQnl0ZXNHZW5lcmF0b3Igbm93IGNvcnJlY3RseSBtYW5nbGVzIEZyb20gbGluZXMgKHdoZW4KKyAgcmVxdWVzdGVkKSBldmVuIGlmIHRoZSBib2R5IGNvbnRhaW5zIHVuZGVjb2RhYmxlIGJ5dGVzLgorCistIElzc3VlICMxNTc3NzogRml4IGEgcmVmbGVhayBpbiBfcG9zaXhzdWJwcm9jZXNzLgorCistIElzc3VlICMjNjY1MTk0OiBVcGRhdGUgZW1haWwudXRpbHMubG9jYWx0aW1lIHRvIHVzZSBkYXRldGltZS5hc3RpbWV6b25lIGFuZAorICBjb3JyZWN0bHkgaGFuZGxlIGhpc3RvcmljIGNoYW5nZXMgaW4gVVRDIG9mZnNldHMuCisKKy0gSXNzdWUgIzE1MTk5OiBGaXggSmF2YVNjcmlwdCdzIGRlZmF1bHQgTUlNRSB0eXBlIHRvIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQuCisgIFBhdGNoIGJ5IEJvaHVzbGF2IEthYnJkYS4KKworLSBJc3N1ZSAjMTI2NDM6IGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlIG5vdyByZXNwZWN0cyBzeXMuZXhjZXB0aG9vayB3aGVuCisgIGRpc3BsYXlpbmcgZXhjZXB0aW9ucyAoUGF0Y2ggYnkgQWFyb24gSWxlcykKKworLSBJc3N1ZSAjMTM1Nzk6IHN0cmluZy5Gb3JtYXR0ZXIgbm93IHVuZGVyc3RhbmRzIHRoZSAnYScgY29udmVyc2lvbiBzcGVjaWZpZXIuCisKKy0gSXNzdWUgIzE1NzkzOiBTdGFjayBjb3JydXB0aW9uIGluIHNzbC5SQU5EX2VnZCgpLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTU5NTogRml4IHN1YnByb2Nlc3MuUG9wZW4odW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgIGZvciBjZXJ0YWluIGxvY2FsZXMgKHV0Zi0xNiBhbmQgdXRmLTMyIGZhbWlseSkuIFBhdGNoIGJ5IENocmlzIEplcmRvbmVrLgorCistIElzc3VlICMxNTQ3NzogSW4gY21hdGggYW5kIG1hdGggbW9kdWxlcywgYWRkIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aG9zZQorICBzeXN0ZW0tc3VwcGxpZWQgbG9nMXAgZnVuY3Rpb24gZG9lc24ndCByZXNwZWN0IHNpZ25zIG9mIHplcm9zLgorCistIElzc3VlICMxNTcxNTogaW1wb3J0bGliLl9faW1wb3J0X18oKSB3aWxsIHNpbGVuY2UgYW4gSW1wb3J0RXJyb3Igd2hlbiB0aGUgdXNlCisgIG9mIGZyb21saXN0IGxlYWRzIHRvIGEgZmFpbGVkIGltcG9ydC4KKworLSBJc3N1ZSAjMTQ2Njk6IEZpeCBwaWNrbGluZyBvZiBjb25uZWN0aW9ucyBhbmQgc29ja2V0cyBvbiBNYWNPU1gKKyAgYnkgc2VuZGluZy9yZWNlaXZpbmcgYW4gYWNrbm93bGVkZ21lbnQgYWZ0ZXIgZmlsZSBkZXNjcmlwdG9yIHRyYW5zZmVyLgorICBUZXN0UGlja2xpbmdDb25uZWN0aW9uIGhhcyBiZWVuIHJlZW5hYmxlZCBmb3IgTWFjT1NYLgorCistIElzc3VlICMxMTA2MjogRml4IGFkZGluZyBhIG1lc3NhZ2UgZnJvbSBmaWxlIHRvIEJhYnlsIG1haWxib3guCisKKy0gSXNzdWUgIzE1NjQ2OiBQcmV2ZW50IGVxdWl2YWxlbnQgb2YgYSBmb3JrIGJvbWIgd2hlbiB1c2luZworICBtdWx0aXByb2Nlc3Npbmcgb24gV2luZG93cyB3aXRob3V0IHRoZSAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyIKKyAgaWRpb20uCisKKy0gSXNzdWUgIzE1Njc4OiBGaXggSURMRSBtZW51cyB3aGVuIHN0YXJ0ZWQgZnJvbSBPUyBYIGNvbW1hbmQgbGluZQorICAoMy4zLjBiMiByZWdyZXNzaW9uKS4KKworQyBBUEkKKy0tLS0tCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDY3NDogQWRkIGEgZGlzY3Vzc2lvbiBvZiB0aGUganNvbiBtb2R1bGUncyBzdGFuZGFyZCBjb21wbGlhbmNlLgorICBQYXRjaCBieSBDaHJpcyBSZWJlcnQuCisKKy0gQ3JlYXRlIGEgJ0NvbmN1cnJlbnQgRXhlY3V0aW9uJyBzZWN0aW9uIGluIHRoZSBkb2NzLCBhbmQgc3BsaXQgdXAgdGhlCisgICdPcHRpb25hbCBPcGVyYXRpbmcgU3lzdGVtIFNlcnZpY2VzJyBzZWN0aW9uIHRvIHVzZSBhIG1vcmUgdXNlci1jZW50cmljCisgIGNsYXNzaWZpY2F0aW9uIHNjaGVtZSAoc3BsaXR0aW5nIHRoZW0gYWNyb3NzIHRoZSBuZXcgQ0Ugc2VjdGlvbiwgSVBDIGFuZAorICB0ZXh0IHByb2Nlc3NpbmcpLiBPcGVyYXRpbmcgc3lzdGVtIGxpbWl0YXRvbnMgY2FuIGJlIHJlZmxlY3RlZCB3aXRoCisgIHRoZSBTcGhpbnggYGA6cGxhdGZvcm06YGAgdGFnLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgYXMgcGFydCBvZiB0aGUgVGFibGUgb2YKKyAgQ29udGVudHMuCisKKy0gSXNzdWUgIzQ5NjY6IEJyaW5nIHRoZSBzZXF1ZW5jZSBkb2NzIHVwIHRvIGRhdGUgZm9yIHRoZSBQeTNrIHRyYW5zaXRpb24KKyAgYW5kIHRoZSBtYW55IGxhbmd1YWdlIGVuaGFuY2VtZW50cyBzaW5jZSB0aGV5IHdlcmUgb3JpZ2luYWwgd3JpdHRlbgorCistIFRoZSAicGF0aCBpbXBvcnRlciIgbWlzbm9tZXIgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBFcmljIFNub3cncworICBtb3JlLWF3a3dhcmQtYnV0LWF0LWxlYXN0LW5vdC13cm9uZyBzdWdnZXN0aW9uIG9mICJwYXRoIGJhc2VkIGZpbmRlciIgaW4KKyAgdGhlIGltcG9ydCBzeXN0ZW0gcmVmZXJlbmNlIGRvY3MKKworLSBJc3N1ZSAjMTU2NDA6IERvY3VtZW50IGltcG9ydGxpYi5hYmMuRmluZGVyIGFzIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzE1NjMwOiBBZGQgYW4gZXhhbXBsZSBmb3IgImNvbnRpbnVlIiBzdG10IGluIHRoZSB0dXRvcmlhbC4gUGF0Y2ggYnkKKyAgRGFuaWVsIEVsbGlzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTU3NDc6IFpGUyBhbHdheXMgcmV0dXJucyBFT1BOT1RTVVBQIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlCisgIFVGX0lNTVVUQUJMRSBmbGFnICh2aWEgZWl0aGVyIGNoZmxhZ3Mgb3IgbGNoZmxhZ3MpOyByZWZhY3RvciBhZmZlY3RlZAorICB0ZXN0cyBpbiB0ZXN0X3Bvc2l4LnB5IHRvIGFjY291bnQgZm9yIHRoaXMuCisKKy0gSXNzdWUgIzE1Mjg1OiBSZWZhY3RvciB0aGUgYXBwcm9hY2ggZm9yIHRlc3RpbmcgY29ubmVjdCB0aW1lb3V0cyB1c2luZworICB0d28gZXh0ZXJuYWwgaG9zdHMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgdHlwZQorICBvZiB0ZXN0LgorCistIElzc3VlICMxNTc0MzogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1ldGhvZCB1c2FnZSBpbiB1cmxsaWIgdGVzdHMuIFBhdGNoIGJ5CisgIEplZmYgS251cHAuCisKKy0gSXNzdWUgIzE1NjE1OiBBZGQgc29tZSB0ZXN0cyBmb3IgdGhlIGpzb24gbW9kdWxlJ3MgaGFuZGxpbmcgb2YgaW52YWxpZAorICBpbnB1dCBkYXRhLiAgUGF0Y2ggYnkgS3VzaGFsIERhcy4KKworQnVpbGQKKy0tLS0tCisKKy0gT3V0cHV0IGxpYiBmaWxlcyBmb3IgUEdPIGJ1aWxkIGludG8gUEdPIGRpcmVjdG9yeS4KKworLSBQaWNrIHVwIDMyLWJpdCBsYXVuY2hlciBmcm9tIFBHTyBkaXJlY3Rvcnkgb24gNjQtYml0IFBHTyBidWlsZC4KKworLSBEcm9wIFBDXHB5dGhvbl9udC5oIGFzIGl0J3Mgbm90IHVzZWQuIEFkZCBpbnB1dCBkZXBlbmRlbmN5IG9uIGN1c3RvbQorICBidWlsZCBzdGVwLgorCistIElzc3VlICMxNTUxMTogRHJvcCBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIHB5dGhvbnh5LmxpYiBmcm9tIF9kZWNpbWFsCisgIGFtZDY0IGNvbmZpZ3VyYXRpb24uCisKKy0gQWRkIG1pc3NpbmcgUEdJL1BHTyBjb25maWd1cmF0aW9ucyBmb3IgcHl3bGF1bmNoZXIuCisKKy0gSXNzdWUgIzE1NjQ1OiBFbnN1cmUgMnRvMyBncmFtbWFyIHBpY2tsZXMgYXJlIHByb3Blcmx5IGluc3RhbGxlZC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBCZXRhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDEyLUF1Zy0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU1Njg6IEZpeCB0aGUgcmV0dXJuIHZhbHVlIG9mICJ5aWVsZCBmcm9tIiB3aGVuIFN0b3BJdGVyYXRpb24gaXMKKyAgcmFpc2VkIGJ5IGEgY3VzdG9tIGl0ZXJhdG9yLgorCistIElzc3VlICMxMzExOTogc3lzLnN0ZG91dCBhbmQgc3lzLnN0ZGVyciBhcmUgbm93IHVzaW5nICJcclxuIiBuZXdsaW5lIG9uCisgIFdpbmRvd3MsIGFzIFB5dGhvbiAyLgorCistIElzc3VlICMxNTUzNDogRml4IHRoZSBmYXN0LXNlYXJjaCBmdW5jdGlvbiBmb3Igbm9uLUFTQ0lJIFVuaWNvZGUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTU1MDg6IEZpeCB0aGUgZG9jc3RyaW5nIGZvciBfX2ltcG9ydF9fIHRvIGhhdmUgdGhlIHByb3BlciBkZWZhdWx0CisgIHZhbHVlIG9mIDAgZm9yICdsZXZlbCcgYW5kIHRvIG5vdCBtZW50aW9uIG5lZ2F0aXZlIGxldmVscyBzaW5jZSB0aGV5IGFyZSBub3QKKyAgc3VwcG9ydGVkLgorCistIElzc3VlICMxNTQyNTogRWxpbWluYXRlZCB0cmFjZWJhY2sgbm9pc2UgZnJvbSBtb3JlIHNpdHVhdGlvbnMgaW52b2x2aW5nCisgIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTQ1Nzg6IFN1cHBvcnQgbW9kdWxlcyByZWdpc3RlcmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGFnYWluLgorCistIElzc3VlICMxNTQ2NjogU3RvcCB1c2luZyBUWVBFX0lOVDY0IGluIG1hcnNoYWwsIHRvIG1ha2UgaW1wb3J0bGliLmggKGFuZCBvdGhlcgorICBieXRlIGNvZGUgZmlsZXMpIGVxdWFsIGJldHdlZW4gMzItYml0IGFuZCA2NC1iaXQgc3lzdGVtcy4KKworLSBJc3N1ZSAjMTY5MjMzNTogTW92ZSBpbml0aWFsIGV4Y2VwdGlvbiBhcmdzIGFzc2lnbm1lbnQgdG8KKyAgIkJhc2VFeGNlcHRpb24uX19uZXdfXyIgdG8gaGVscCBwaWNrbGluZyBvZiBuYWl2ZSBzdWJjbGFzc2VzLgorCistIElzc3VlICMxMjgzNDogRml4IFB5QnVmZmVyX1RvQ29udGlndW91cygpIGZvciBub24tY29udGlndW91cyBhcnJheXMuCisKKy0gSXNzdWUgIzE1NDU2OiBGaXggY29kZSBfX3NpemVvZl9fIGFmdGVyICMxMjM5OSBjaGFuZ2UuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxNTQwNDogUmVmbGVhayBpbiBQeU1ldGhvZE9iamVjdCByZXByLgorCistIElzc3VlICMxNTM5NDogQW4gaXNzdWUgaW4gUHlNb2R1bGVfQ3JlYXRlIHRoYXQgY2F1c2VkIHJlZmVyZW5jZXMgdG8gYmUgbGVha2VkCisgIG9uIHNvbWUgZXJyb3IgcGF0aHMgaGFzIGJlZW4gZml4ZWQuICBQYXRjaCBieSBKdWxpYSBMYXdhbGwuCisKKy0gSXNzdWUgIzE1MzY4OiBBbiBpc3N1ZSB0aGF0IGNhdXNlZCBieXRlY29kZSBnZW5lcmF0aW9uIHRvIGJlIG5vbi1kZXRlcm1pbmlzdGljCisgIGhhcyBiZWVuIGZpeGVkLgorCistIElzc3VlICMxNTIwMjogQ29uc2lzdGVudGx5IHVzZSB0aGUgbmFtZSAiZm9sbG93X3N5bWxpbmtzIiBmb3IgbmV3IHBhcmFtZXRlcnMKKyAgaW4gb3MgYW5kIHNodXRpbCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE1MzE0OiBfX21haW5fXy5fX2xvYWRlcl9fIGlzIG5vdyBzZXQgY29ycmVjdGx5IGR1cmluZyBpbnRlcnByZXRlcgorICBzdGFydHVwLgorCistIElzc3VlICMxNTExMTogV2hlbiBhIG1vZHVsZSBpbXBvcnRlZCB1c2luZyAnZnJvbSBpbXBvcnQnIGhhcyBhbiBJbXBvcnRFcnJvcgorICBpbnNpZGUgaXRzZWxmLCBkb24ndCBtYXNrIHRoYXQgZmFjdCBiZWhpbmQgYSBnZW5lcmljIEltcG9ydEVycm9yIGZvciB0aGUKKyAgbW9kdWxlIGl0c2VsZi4KKworLSBJc3N1ZSAjMTUyOTM6IEFkZCBHQyBzdXBwb3J0IHRvIHRoZSBBU1QgYmFzZSBub2RlIHR5cGUuCisKKy0gSXNzdWUgIzE1MjkxOiBGaXggYSBtZW1vcnkgbGVhayB3aGVyZSBBU1Qgbm9kZXMgd2hlcmUgbm90IHByb3Blcmx5CisgIGRlYWxsb2NhdGVkLgorCistIElzc3VlICMxNTExMDogRml4IHRoZSB0cmFjZWJhY2tzIGdlbmVyYXRlZCBieSAiaW1wb3J0IHh4eCIgdG8gbm90IHNob3cgdGhlCisgIGltcG9ydGxpYiBzdGFjayBmcmFtZXMuCisKKy0gSXNzdWUgIzE1MDIwOiBUaGUgcHJvZ3JhbSBuYW1lIHVzZWQgdG8gc2VhcmNoIGZvciBQeXRob24ncyBwYXRoIGlzIG5vdworICAicHl0aG9uMyIgdW5kZXIgVW5peCwgbm90ICJweXRob24iLgorCistIElzc3VlICMxNTAzMzogRml4IHRoZSBleGl0IHN0YXR1cyBidWcgd2hlbiBtb2R1bGVzIGludm9rZWQgdXNpbmcgLW0gc3dpdGgsCisgIHJldHVybiB0aGUgcHJvcGVyIGZhaWx1cmUgcmV0dXJuIHZhbHVlICgxKS4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSmVmZiBLbnVwcC4KKworLSBJc3N1ZSAjMTUyMjk6IEFuIE9TRXJyb3Igc3ViY2xhc3Mgd2hvc2UgX19pbml0X18gZG9lc24ndCBjYWxsIGJhY2sKKyAgT1NFcnJvci5fX2luaXRfXyBjb3VsZCBwcm9kdWNlIGluY29tcGxldGUgaW5zdGFuY2VzLCBsZWFkaW5nIHRvIGNyYXNoZXMgd2hlbgorICBjYWxsaW5nIHN0cigpIG9uIHRoZW0uCisKKy0gSXNzdWUgMTUzMDc6IFZpcnR1YWwgZW52aXJvbm1lbnRzIG5vdyB1c2Ugc3ltbGlua3Mgd2l0aCBmcmFtZXdvcmsgYnVpbGRzIG9uCisgIE1hYyBPUyBYLCBsaWtlIG90aGVyIFBPU0lYIGJ1aWxkcy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNTQyNDogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgYXJyYXkgb2JqZWN0cy4gIFBhdGNoIGJ5CisgIEx1ZHdpZyBIw6RobmUuCisKKy0gSXNzdWUgIzE1NTc2OiBBbGxvdyBleHRlbnNpb24gbW9kdWxlcyB0byBhY3QgYXMgYSBwYWNrYWdlJ3MgX19pbml0X18gbW9kdWxlLgorCistIElzc3VlICMxNTUwMjogSGF2ZSBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKSB3b3JrIG9uIHN5cy5tZXRhX3BhdGggaW5zdGVhZAorICBvZiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS4KKworLSBJc3N1ZSAjMTUxNjM6IFB5ZG9jIHNob3VsZG4ndCBsaXN0IF9fbG9hZGVyX18gYXMgbW9kdWxlIGRhdGEuCisKKy0gSXNzdWUgIzE1NDcxOiBEbyBub3QgdXNlIG11dGFibGUgb2JqZWN0cyBhcyBkZWZhdWx0cyBmb3IKKyAgaW1wb3J0bGliLl9faW1wb3J0X18oKS4KKworLSBJc3N1ZSAjMTU1NTk6IFRvIGF2b2lkIGEgcHJvYmxlbWF0aWMgZmFpbHVyZSBtb2RlIHdoZW4gcGFzc2VkIHRvIHRoZSBieXRlcworICBjb25zdHJ1Y3Rvciwgb2JqZWN0cyBpbiB0aGUgaXBhZGRyZXNzIG1vZHVsZSBubyBsb25nZXIgaW1wbGVtZW50IF9faW5kZXhfXworICAodGhleSBzdGlsbCBpbXBsZW1lbnQgX19pbnRfXyBhcyBhcHByb3ByaWF0ZSkKKworLSBJc3N1ZSAjMTU1NDY6IEZpeCBoYW5kbGluZyBvZiBwYXRob2xvZ2ljYWwgaW5wdXQgZGF0YSBpbiB0aGUgcGVlaygpIGFuZAorICByZWFkMSgpIG1ldGhvZHMgb2YgdGhlIEJaMkZpbGUsIEd6aXBGaWxlIGFuZCBMWk1BRmlsZSBjbGFzc2VzLgorCistIElzc3VlICMxMzA1MjogRml4IElETEUgY3Jhc2hpbmcgd2hlbiByZXBsYWNlIHN0cmluZyBpbiBTZWFyY2gvUmVwbGFjZSBkaWFsb2cKKyAgZW5kZWQgd2l0aCAnXCcuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjY1NTogSW5zdGVhZCBvZiByZXF1aXJpbmcgYSBjdXN0b20gdHlwZSwgb3Muc2NoZWRfZ2V0YWZmaW5pdHkgYW5kCisgIG9zLnNjaGVkX3NldGFmZmluaXR5IG5vdyB1c2UgcmVndWxhciBzZXRzIG9mIGludGVnZXJzIHRvIHJlcHJlc2VudCB0aGUgQ1BVcyBhCisgIHByb2Nlc3MgaXMgcmVzdHJpY3RlZCB0by4KKworLSBJc3N1ZSAjMTU1Mzg6IEZpeCBjb21waWxhdGlvbiBvZiB0aGUgZ2V0bmFtZWluZm8oKSAvIGdldGFkZHJpbmZvKCkgZW11bGF0aW9uCisgIGNvZGUuICBQYXRjaCBieSBQaGlsaXBwIEhhZ2VtZWlzdGVyLgorCistIElzc3VlICMxNTUxOTogUHJvcGVybHkgZXhwb3NlIFdpbmRvd3NSZWdpc3RyeUZpbmRlciBpbiBpbXBvcnRsaWIgKGFuZCB1c2UgdGhlCisgIGNvcnJlY3QgdGVybSBmb3IgaXQpLiBPcmlnaW5hbCBwYXRjaCBieSBFcmljIFNub3cuCisKKy0gSXNzdWUgIzE1NTAyOiBCcmluZyB0aGUgaW1wb3J0bGliIEFCQ3MgaW50byBsaW5lIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisgIGltcG9ydCBwcm90b2NvbHMgZ2l2ZW4gUEVQIDQyMC4gT3JpZ2luYWwgcGF0Y2ggYnkgRXJpYyBTbm93LgorCistIElzc3VlICMxNTQ5OTogTGF1bmNoaW5nIGEgd2ViYnJvd3NlciBpbiBVbml4IHVzZWQgdG8gc2xlZXAgZm9yIGEgZmV3IHNlY29uZHMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9uIEJhcmtvdnNreS4KKworLSBJc3N1ZSAjMTU0NjM6IFRoZSBmYXVsdGhhbmRsZXIgbW9kdWxlIHRydW5jYXRlcyBzdHJpbmdzIHRvIDUwMCBjaGFyYWN0ZXJzLAorICBpbnN0ZWFkIG9mIDEwMCwgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGxvbmcgZmlsZSBwYXRocy4KKworLSBJc3N1ZSAjNjA1NjogTWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHNldGJsb2NraW5nKFRydWUpIG9uIHRoZSBzb2NrZXRzIGl0CisgIHVzZXMuICBPcmlnaW5hbCBwYXRjaCBieSBKIERlcmVrIFdpbHNvbi4KKworLSBJc3N1ZSAjMTUzNjQ6IEZpeCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpIHRvIGJlIGFuIGFic29sdXRlIHBhdGguCisKKy0gSXNzdWUgIzE1MDQxOiBVcGRhdGUgInNlZSBhbHNvIiBsaXN0IGluIHRraW50ZXIgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTU0MTM6IG9zLnRpbWVzKCkgaGFkIGRpc2FwcGVhcmVkIHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE1NDAyOiBBbiBpc3N1ZSBpbiB0aGUgc3RydWN0IG1vZHVsZSB0aGF0IGNhdXNlZCBzeXMuZ2V0c2l6ZW9mIHRvCisgIHJldHVybiBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc3RydWN0LlN0cnVjdCBpbnN0YW5jZXMgaGFzIGJlZW4gZml4ZWQuICBJbml0aWFsCisgIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MjMyOiBXaGVuIG1hbmdsZV9mcm9tIGlzIFRydWUsIGVtYWlsLkdlbmVyYXRvciBub3cgY29ycmVjdGx5IG1hbmdsZXMKKyAgbGluZXMgdGhhdCBzdGFydCB3aXRoICdGcm9tICcgdGhhdCBvY2N1ciBpbiBhIE1JTUUgcHJlYW1ibGUgb3IgZXBpbG9ndWUuCisKKy0gSXNzdWUgIzE1MDk0OiBJbmNvcnJlY3RseSBwbGFjZWQgI2VuZGlmIGluIF90a2ludGVyLmMuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxMzkyMjogYXJncGFyc2Ugbm8gbG9uZ2VyIGluY29ycmVjdGx5IHN0cmlwcyAnLS0ncyB0aGF0IGFwcGVhciBhZnRlcgorICB0aGUgZmlyc3Qgb25lLgorCistIElzc3VlICMxMjM1MzogYXJncGFyc2Ugbm93IGNvcnJlY3RseSBoYW5kbGVzIG51bGwgYXJndW1lbnQgdmFsdWVzLgorCistIElzc3VlICMxMDAxNywgaXNzdWUgIzE0OTk4OiBGaXggVHlwZUVycm9yIHVzaW5nIHBwcmludCBvbiBkaWN0aW9uYXJpZXMgd2l0aAorICB1c2VyLWRlZmluZWQgdHlwZXMgYXMga2V5cyBvciBvdGhlciB1bm9yZGVyYWJsZSBrZXlzLgorCistIElzc3VlICMxNTM5NzogaW5zcGVjdC5nZXRtb2R1bGVuYW1lKCkgaXMgbm93IGJhc2VkIGRpcmVjdGx5IG9uIGltcG9ydGxpYiB2aWEgYQorICBuZXcgaW1wb3J0bGliLm1hY2hpbmVyeS5hbGxfc3VmZml4ZXMoKSBBUEkuCisKKy0gSXNzdWUgIzE0NjM1OiB0ZWxuZXRsaWIgd2lsbCB1c2UgcG9sbCgpIHJhdGhlciB0aGFuIHNlbGVjdCgpIHdoZW4gcG9zc2libGUgdG8KKyAgYXZvaWQgZmFpbGluZyBkdWUgdG8gdGhlIHNlbGVjdCgpIGZpbGUgZGVzY3JpcHRvciBsaW1pdC4KKworLSBJc3N1ZSAjMTUxODA6IENsYXJpZnkgcG9zaXhwYXRoLmpvaW4oKSBlcnJvciBtZXNzYWdlIHdoZW4gbWl4aW5nIHN0ciAmIGJ5dGVzLgorCistIElzc3VlICMxNTM0MzogcGtndXRpbCBub3cgaW5jbHVkZXMgYW4gaXRlcl9pbXBvcnRlcl9tb2R1bGVzIGltcGxlbWVudGF0aW9uIGZvcgorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgKHNpbWlsYXIgdG8gdGhlIHdheSBpdCBhbHJlYWR5IGhhbmRsZWQKKyAgemlwaW1wb3J0LnppcGltcG9ydGVyKS4KKworLSBJc3N1ZSAjMTUzMTQ6IHJ1bnB5IG5vdyBzZXRzIF9fbWFpbl9fLl9fbG9hZGVyX18gY29ycmVjdGx5LgorCistIElzc3VlICMxNTM1NzogVGhlIGltcG9ydCBlbXVsYXRpb24gaW4gcGtndXRpbCBpcyBub3cgZGVwcmVjYXRlZC4gcGtndXRpbCB1c2VzCisgIGltcG9ydGxpYiBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHRoZSBlbXVsYXRpb24uCisKKy0gSXNzdWUgIzE1MjMzOiBQeXRob24gbm93IGd1YXJhbnRlZXMgdGhhdCBjYWxsYWJsZXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBhdGV4aXQKKyAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGluIGEgZGV0ZXJtaW5pc3RpYyBvcmRlci4KKworLSBJc3N1ZSAjMTUyMzg6IHNodXRpbC5jb3B5c3RhdCBub3cgY29waWVzIExpbnV4ICJleHRlbmRlZCBhdHRyaWJ1dGVzIi4KKworLSBJc3N1ZSAjMTUyMzA6IHJ1bnB5LnJ1bl9wYXRoIG5vdyBjb3JyZWN0bHkgc2V0cyBfX3BhY2thZ2VfXyBhcyBkZXNjcmliZWQgaW4KKyAgdGhlIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzE1MzE1OiBTdXBwb3J0IFZTIDIwMTAgaW4gZGlzdHV0aWxzIGN5Z3dpbmNvbXBpbGVyLgorCistIElzc3VlICMxNTI5NDogRml4IGEgcmVncmVzc2lvbiBpbiBwa2d1dGlsLmV4dGVuZF9wYXRoKCkncyBoYW5kbGluZyBvZiBuZXN0ZWQKKyAgbmFtZXNwYWNlIHBhY2thZ2VzLgorCistIElzc3VlICMxNTA1NjogaW1wLmNhY2hlX2Zyb21fc291cmNlKCkgYW5kIHNvdXJjZV9mcm9tX2NhY2hlKCkgcmFpc2UKKyAgTm90SW1wbGVtZW50ZWRFcnJvciB3aGVuIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgc2V0IHRvIE5vbmUuCisKKy0gSXNzdWUgIzE1MjU2OiBHcmFtbWF0aWNhbCBtaXN0YWtlIGluIGV4Y2VwdGlvbiByYWlzZWQgYnkgaW1wLmZpbmRfbW9kdWxlKCkuCisKKy0gSXNzdWUgIzU5MzE6IHdzZ2lyZWYgZW52aXJvbiB2YXJpYWJsZSBTRVJWRVJfU09GVFdBUkUgd2lsbCBzcGVjaWZ5IGFuCisgIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHRlcm0gbGlrZSBDUHl0aG9uLCBKeXRob24gaW5zdGVhZCBvZiBnZW5lcmljICJQeXRob24iLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJtYXhfYnVmZmVyX3NpemUiIG9mIEJ1ZmZlcmVkV3JpdGVyIGFuZAorICBCdWZmZXJlZFJXUGFpciwgZnJvbSB0aGUgaW8gbW9kdWxlLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJ2ZXJzaW9uIiBvZiBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci4KKworLSBJc3N1ZSAjMTQ4MTQ6IEltcGxlbWVudCBtb3JlIGNvbnNpc3RlbnQgb3JkZXJpbmcgYW5kIHNvcnRpbmcgYmVoYXZpb3VyIGZvcgorICBpcGFkZHJlc3Mgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ4MTQ6IGlwYWRkcmVzcyBuZXR3b3JrIG9iamVjdHMgY29ycmVjdGx5IHJldHVybiBOb3RJbXBsZW1lbnRlZCB3aGVuCisgIGNvbXBhcmVkIHRvIGFyYml0cmFyeSBvYmplY3RzIGluc3RlYWQgb2YgcmFpc2luZyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzE0OTkwOiBDb3JyZWN0bHkgZmFpbCB3aXRoIFN5bnRheEVycm9yIG9uIGludmFsaWQgZW5jb2RpbmcgZGVjbGFyYXRpb24uCisKKy0gSXNzdWUgIzE0ODE0OiBpcGFkZHJlc3Mgbm93IHByb3ZpZGVzIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMgd2hlbgorICBjb25zdHJ1Y3RpbmcgaW5zdGFuY2VzIGRpcmVjdGx5IChjaGFuZ2VzIHBlcm1pdHRlZCBkdXJpbmcgYmV0YSBkdWUgdG8KKyAgcHJvdmlzaW9uYWwgQVBJIHN0YXR1cykuCisKKy0gSXNzdWUgIzE1MjQ3OiBGaWxlSU8gbm93IHJhaXNlcyBhbiBlcnJvciB3aGVuIGdpdmVuIGEgZmlsZSBkZXNjcmlwdG9yIHBvaW50aW5nCisgIHRvIGEgZGlyZWN0b3J5LgorCistIElzc3VlICMxNTI2MTogU3RvcCBvcy5zdGF0KGZkKSBjcmFzaGluZyBvbiBXaW5kb3dzIHdoZW4gZmQgbm90IG9wZW4uCisKKy0gSXNzdWUgIzE1MTY2OiBJbXBsZW1lbnQgaW1wLmdldF90YWcoKSB1c2luZyBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLgorCistIElzc3VlICMxNTIxMDogQ2F0Y2ggS2V5RXJyb3Igd2hlbiBpbXBvcnRsaWIuX19pbml0X18gY2FuJ3QgZmluZAorICBfZnJvemVuX2ltcG9ydGxpYiBpbiBzeXMubW9kdWxlcywgbm90IEltcG9ydEVycm9yLgorCistIElzc3VlICMxNTAzMDogaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlciBub3cgc3VwcG9ydHMgdGhlIG5ldyBzb3VyY2Ugc2l6ZQorICBoZWFkZXIgZmllbGQgaW4gLnB5YyBmaWxlcy4KKworLSBJc3N1ZSAjNTM0NjogUHJlc2VydmUgcGVybWlzc2lvbnMgb2YgbWJveCwgTU1ERiBhbmQgQmFieWwgbWFpbGJveCBmaWxlcyBvbgorICBmbHVzaCgpLgorCistIElzc3VlICMxMDU3MTogRml4IHRoZSAiLS1zaWduIiBvcHRpb24gb2YgZGlzdHV0aWxzJyB1cGxvYWQgY29tbWFuZC4gIFBhdGNoIGJ5CisgIEpha3ViIFdpbGsuCisKKy0gSXNzdWUgIzk1NTk6IElmIG1lc3NhZ2VzIHdlcmUgb25seSBhZGRlZCwgYSBuZXcgZmlsZSBpcyBubyBsb25nZXIgY3JlYXRlZCBhbmQKKyAgcmVuYW1lZCBvdmVyIHRoZSBvbGQgZmlsZSB3aGVuIGZsdXNoKCkgaXMgY2FsbGVkIG9uIGFuIG1ib3gsIE1NREYgb3IgQmFieWwKKyAgbWFpbGJveC4KKworLSBJc3N1ZSAxMDkyNDogRml4ZWQgY3J5cHQubWtzYWx0KCkgdG8gdXNlIGEgUk5HIHRoYXQgaXMgc3VpdGFibGUgZm9yCisgIGNyeXB0b2dyYXBoaWMgcHVycG9zZS4KKworLSBJc3N1ZSAjMTUxODQ6IEVuc3VyZSBjb25zaXN0ZW50IHJlc3VsdHMgb2YgT1MgWCBjb25maWd1cmF0aW9uIHRhaWxvcmluZyBmb3IKKyAgdW5pdmVyc2FsIGJ1aWxkcyBieSBmYWN0b3Jpbmcgb3V0IGNvbW1vbiBPUyBYLXNwZWNpZmljIGN1c3RvbWl6YXRpb25zIGZyb20KKyAgc3lzY29uZmlnLCBkaXN0dXRpbHMuc3lzY29uZmlnLCBkaXN0dXRpbHMudXRpbCwgYW5kIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyCisgIGludG8gYSBuZXcgbW9kdWxlIF9vc3hfc3VwcG9ydC4KKworQyBBUEkKKy0tLS0tCisKKy0gSXNzdWUgIzE1NjEwOiBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeCgpIG5vdyB1c2VzIGEgJ2xldmVsJyBvZiAwIGluc3RlYWQgb2YgLTEuCisKKy0gSXNzdWVzICMxNTE2OSwgIzE0NTk5OiBTdHJpcCBvdXQgdGhlIEMgaW1wbGVtZW50YXRpb24gb2YKKyAgaW1wLnNvdXJjZV9mcm9tX2NhY2hlKCkgdXNlZCBieSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSBhbmQKKyAgdXNlZCB0aGUgUHl0aG9uIGNvZGUgaW5zdGVhZC4gTGVhZHMgdG8gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoKSB0byBub3QKKyAgdHJ5IHRvIGluZmVyIHRoZSBzb3VyY2UgcGF0aCBmcm9tIHRoZSBieXRlY29kZSBwYXRoIGFzCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIGRvZXMuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTY3NjogTm93ICJtbWFwIiBjaGVjayBmb3IgZW1wdHkgZmlsZXMgYmVmb3JlIGRvaW5nIHRoZQorICBvZmZzZXQgY2hlY2suICBQYXRjaCBieSBTdGV2ZW4gV2lsbGlzLgorCistIElzc3VlICM2NDkzOiBBbiBpc3N1ZSBpbiBjdHlwZXMgb24gV2luZG93cyB0aGF0IGNhdXNlZCBzdHJ1Y3R1cmUgYml0ZmllbGRzCisgIG9mIHR5cGUgY3R5cGVzLmNfdWludDMyIGFuZCB3aWR0aCAzMiB0byBpbmNvcnJlY3RseSBiZSBzZXQgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzE1MTk0OiBVcGRhdGUgbGliZmZpIHRvIHRoZSAzLjAuMTEgcmVsZWFzZS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1NDU4OiBweXRob24tY29uZmlnIGdldHMgYSBuZXcgb3B0aW9uIC0tY29uZmlnZGlyIHRvIHByaW50IHRoZSAkTElCUEwKKyAgdmFsdWUuCisKKy0gTW92ZSBpbXBvcnRsaWIudGVzdC5iZW5jaG1hcmsgdG8gVG9vbHMvaW1wb3J0YmVuY2guCisKKy0gSXNzdWUgIzEyNjA1OiBUaGUgZ2RiIGhvb2tzIGZvciBkZWJ1Z2dpbmcgQ1B5dGhvbiAod2l0aGluIFRvb2xzL2dkYikgaGF2ZSBiZWVuCisgIGVuaGFuY2VkIHRvIHNob3cgaW5mb3JtYXRpb24gb24gbW9yZSBDIGZyYW1lcyByZWxldmFudCB0byBDUHl0aG9uIHdpdGhpbiB0aGUKKyAgInB5LWJ0IiBhbmQgInB5LWJ0LWZ1bGwiIGNvbW1hbmRzOgorCisgICogQyBmcmFtZXMgdGhhdCBhcmUgd2FpdGluZyBvbiB0aGUgR0lMCisgICogQyBmcmFtZXMgdGhhdCBhcmUgZ2FyYmFnZS1jb2xsZWN0aW5nCisgICogQyBmcmFtZXMgdGhhdCBhcmUgZHVlIHRvIHRoZSBpbnZvY2F0aW9uIG9mIGEgUHlDRnVuY3Rpb24KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTQ0NDogVXNlIHByb3BlciBzcGVsbGluZyBmb3Igbm9uLUFTQ0lJIGNvbnRyaWJ1dG9yIG5hbWVzLiAgUGF0Y2gKKyAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUyOTU6IFJlb3JnYW5pemUgYW5kIHJld3JpdGUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGltcG9ydCBzeXN0ZW0uCisKKy0gSXNzdWUgIzE1MjMwOiBDbGVhcmx5IGRvY3VtZW50IHNvbWUgb2YgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBydW5weSBtb2R1bGUgYW5kCisgIG51ZGdlIHJlYWRlcnMgdG93YXJkcyBpbXBvcnRsaWIgd2hlbiBhcHByb3ByaWF0ZS4KKworLSBJc3N1ZSAjMTUwNTM6IENvcHkgUHl0aG9uIDMuMyBpbXBvcnQgbG9jayBjaGFuZ2Ugbm90aWNlIHRvIGFsbCByZWxldmFudAorICBmdW5jdGlvbnMgaW4gaW1wIGluc3RlYWQgb2YganVzdCBhdCB0aGUgdG9wIG9mIHRoZSByZWxldmFudCBzZWN0aW9uLgorCistIElzc3VlICMxNTI4ODogTGluayB0byB0aGUgdGVybSAibG9hZGVyIiBpbiBub3RlcyBpbiBwa2d1dGlsIGFib3V0IGhvdyB0aGluZ3MKKyAgd29uJ3Qgd29yayBhcyBleHBlY3RlZCBpbiBQeXRob24gMy4zIGFuZCBtYXJrIHRoZSByZXF1aXNpdGUgZnVuY3Rpb25zIGFzCisgICJjaGFuZ2VkIiBzaW5jZSB0aGV5IHdpbGwgbm8gbG9uZ2VyIHdvcmsgd2l0aCBtb2R1bGVzIGRpcmVjdGx5IGltcG9ydGVkIGJ5CisgIGltcG9ydCBpdHNlbGYuCisKKy0gSXNzdWUgIzEzNTU3OiBDbGFyaWZ5IGVmZmVjdCBvZiBnaXZpbmcgdHdvIGRpZmZlcmVudCBuYW1lc3BhY2VzIHRvIGV4ZWMgb3IKKyAgZXhlY2ZpbGUoKS4KKworLSBJc3N1ZSAjMTUyNTA6IERvY3VtZW50IHRoYXQgZmlsZWNtcC5kaXJjbXAgY29tcGFyZXMgZmlsZXMgc2hhbGxvd2x5LiBQYXRjaAorICBjb250cmlidXRlZCBieSBDaHJpcyBKZXJkb25lay4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE1NDY3OiBNb3ZlIGhlbHBlcnMgZm9yIF9fc2l6ZW9mX18gdGVzdHMgaW50byB0ZXN0X3N1cHBvcnQuICBQYXRjaCBieQorICBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTMyMDogTWFrZSBpdGVyYXRpbmcgdGhlIGxpc3Qgb2YgdGVzdHMgdGhyZWFkLXNhZmUgd2hlbiBydW5uaW5nIHRlc3RzCisgIGluIG11bHRpcHJvY2VzcyBtb2RlLiBQYXRjaCBieSBDaHJpcyBKZXJkb25lay4KKworLSBJc3N1ZSAjMTUxNjg6IE1vdmUgaW1wb3J0bGliLnRlc3QgdG8gdGVzdC50ZXN0X2ltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTUwOTE6IFJlYWN0aXZhdGUgYSB0ZXN0IG9uIFVOSVggd2hpY2ggd2FzIGZhaWxpbmcgdGhhbmtzIHRvIGEKKyAgZm9yZ290dGVuIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpIGNhbGwuCisKKy0gSXNzdWUgIzE1MjMwOiBBZG9wdGVkIGEgbW9yZSBzeXN0ZW1hdGljIGFwcHJvYWNoIGluIHRoZSBydW5weSB0ZXN0cy4KKworLSBJc3N1ZSAjMTUzMDA6IEVuc3VyZSB0aGUgdGVtcG9yYXJ5IHRlc3Qgd29ya2luZyBkaXJlY3RvcmllcyBhcmUgaW4gdGhlIHNhbWUKKyAgcGFyZW50IGZvbGRlciB3aGVuIHJ1bm5pbmcgdGVzdHMgaW4gbXVsdGlwcm9jZXNzIG1vZGUgZnJvbSBhIFB5dGhvbiBidWlsZC4KKyAgUGF0Y2ggYnkgQ2hyaXMgSmVyZG9uZWsuCisKKy0gSXNzdWUgIzE1Mjg0OiBTa2lwIHtzZW5kLHJlY3Z9bXNnIHRlc3RzIGluIHRlc3Rfc29ja2V0IHdoZW4gSVB2NiBpcyBub3QKKyAgZW5hYmxlZC4gUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorCistIElzc3VlICMxNTI3NzogRml4IGEgcmVzb3VyY2UgbGVhayBpbiBzdXBwb3J0LnB5IHdoZW4gSVB2NiBpcyBkaXNhYmxlZC4gIFBhdGNoCisgIGJ5IEJyaWFuIEJyYXppbC4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzExNzE1OiBGaXggbXVsdGlhcmNoIGRldGVjdGlvbiB3aXRob3V0IGhhdmluZyBEZWJpYW4gZGV2ZWxvcG1lbnQgdG9vbHMKKyAgKGRwa2ctZGV2KSBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzE1MDM3OiBCdWlsZCBPUyBYIGluc3RhbGxlcnMgd2l0aCBsb2NhbCBjb3B5IG9mIG5jdXJzZXMgNS45IGxpYnJhcmllcworICB0byBhdm9pZCBjdXJzZXMudW5nZXRfd2NoIGJ1ZyBwcmVzZW50IGluIG9sZGVyIHZlcnNpb25zIG9mIG5jdXJzZXMgc3VjaCBhcworICB0aG9zZSBzaGlwcGVkIHdpdGggT1MgWC4KKworLSBJc3N1ZSAjMTU1NjA6IEZpeCBidWlsZGluZyBfc3FsaXRlMyBleHRlbnNpb24gb24gT1MgWCB3aXRoIGFuIFNESy4gIEFsc28sIGZvcgorICBPUyBYIGluc3RhbGxlcnMsIGVuc3VyZSBjb25zaXN0ZW50IHNxbGl0ZTMgYmVoYXZpb3IgYW5kIGZlYXR1cmUgYXZhaWxhYmlsaXR5CisgIGJ5IGJ1aWxkaW5nIGEgbG9jYWwgY29weSBvZiBsaWJzcWxpdGUzIHJhdGhlciB0aGFuIGRlcGVuZGluZyBvbiB0aGUgd2lkZSByYW5nZQorICBvZiB2ZXJzaW9ucyBzdXBwbGllZCB3aXRoIHZhcmlvdXMgT1MgWCByZWxlYXNlcy4KKworLSBJc3N1ZSAjODg0NzogRGlzYWJsZSBDT01EQVQgZm9sZGluZyBpbiBXaW5kb3dzIFBHTyBidWlsZHMuCisKKy0gSXNzdWUgIzE0MDE4OiBGaXggT1MgWCBUY2wvVGsgZnJhbWV3b3JrIGNoZWNraW5nIHdoZW4gdXNpbmcgT1MgWCBTREtzLgorCistIElzc3VlICMxNTQzMTogQWRkIF9mcmVlemVfaW1wb3J0bGliIHByb2plY3QgdG8gcmVnZW5lcmF0ZSBpbXBvcnRsaWIuaCBvbgorICBXaW5kb3dzLiBQYXRjaCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb24uCisKKy0gSXNzdWUgIzE0MTk3OiBGb3IgT1MgWCBmcmFtZXdvcmsgYnVpbGRzLCBlbnN1cmUgbGlua3MgdG8gdGhlIHNoYXJlZCBsaWJyYXJ5CisgIGFyZSBjcmVhdGVkIHdpdGggdGhlIHByb3BlciBBQkkgc3VmZml4LgorCistIElzc3VlICMxNDMzMDogRm9yIGNyb3NzIGJ1aWxkcywgZG9uJ3QgdXNlIGhvc3QgcHl0aG9uLCB1c2UgaG9zdCBzZWFyY2ggcGF0aHMKKyAgZm9yIGhvc3QgY29tcGlsZXIuCisKKy0gSXNzdWUgIzE1MjM1OiBBbGxvdyBCZXJrbGV5IERCIHZlcnNpb25zIHVwIHRvIDUuMyB0byBidWlsZCB0aGUgZGJtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTUyNjg6IFNlYXJjaCBjdXJzZXMuaCBpbiAvdXNyL2luY2x1ZGUvbmN1cnNlc3cuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQmV0YSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyNy1KdW4tMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gRml4IGEgKG1vc3QgbGlrZWx5KSB2ZXJ5IHJhcmUgbWVtb3J5IGxlYWsgd2hlbiBjYWxsaW5nIG1haW4oKSBhbmQgbm90IGJlaW5nCisgIGFibGUgdG8gZGVjb2RlIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50LgorCistIElzc3VlICMxNDgxNTogVXNlIFB5X3NzaXplX3QgaW5zdGVhZCBvZiBsb25nIGZvciB0aGUgb2JqZWN0IGhhc2gsIHRvCisgIHByZXNlcnZlIGFsbCA2NCBiaXRzIG9mIGhhc2ggb24gV2luNjQuCisKKy0gSXNzdWUgIzEyMjY4OiBGaWxlIHJlYWRsaW5lLCByZWFkbGluZXMgYW5kIHJlYWQoKSBvciByZWFkYWxsKCkgbWV0aG9kcworICBubyBsb25nZXIgbG9zZSBkYXRhIHdoZW4gYW4gdW5kZXJseWluZyByZWFkIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkLgorICBJT0Vycm9yIGlzIG5vIGxvbmdlciByYWlzZWQgZHVlIHRvIGEgcmVhZCBzeXN0ZW0gY2FsbCByZXR1cm5pbmcgRUlOVFIKKyAgZnJvbSB3aXRoaW4gdGhlc2UgbWV0aG9kcy4KKworLSBJc3N1ZSAjMTE2MjY6IEFkZCBfU2l6ZVQgZnVuY3Rpb25zIHRvIHN0YWJsZSBBQkkuCisKKy0gSXNzdWUgIzE1MTQ2OiBBZGQgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE1MTQyOiBGaXggcmVmZXJlbmNlIGxlYWsgd2hlbiBkZWFsbG9jYXRpbmcgaW5zdGFuY2VzIG9mIHR5cGVzCisgIGNyZWF0ZWQgdXNpbmcgUHlUeXBlX0Zyb21TcGVjKCkuCisKKy0gSXNzdWUgIzE1MDQyOiBBZGQgUHlTdGF0ZV9BZGRNb2R1bGUgYW5kIFB5U3RhdGVfUmVtb3ZlTW9kdWxlLiBBZGQgdmVyc2lvbgorICBndWFyZCBmb3IgUHlfTElNSVRFRF9BUEkgYWRkaXRpb25zLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzEwMDUzOiBEb24ndCBjbG9zZSBGRHMgd2hlbiBGaWxlSU8uX19pbml0X18gZmFpbHMuIExvb3NlbHkgYmFzZWQgb24KKyAgdGhlIHdvcmsgYnkgSGlyb2thenUgWWFtYW1vdG8uCisKKy0gSXNzdWUgIzE1MDk2OiBSZW1vdmVkIHN1cHBvcnQgZm9yIHVyJycgYXMgdGhlIHJhdyBub3RhdGlvbiBpc24ndAorICBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIueCdzIHJhdyB1bmljb2RlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzNzgzOiBHZW5lcmF0b3Igb2JqZWN0cyBub3cgdXNlIHRoZSBpZGVudGlmaWVyIEFQSXMgaW50ZXJuYWxseQorCistIElzc3VlICMxNDg3NDogUmVzdG9yZSBjaGFybWFwIGRlY29kaW5nIHNwZWVkIHRvIHByZS1QRVAgMzkzIGxldmVscy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUwMjY6IHV0Zi0xNiBlbmNvZGluZyBpcyBub3cgc2lnbmlmaWNhbnRseSBmYXN0ZXIgKHVwIHRvIDEweCkuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzExMDIyOiBvcGVuKCkgYW5kIGlvLlRleHRJT1dyYXBwZXIgYXJlIG5vdyBjYWxsaW5nCisgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkgaW5zdGVhZCBvZiBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKQorICBpbiB0ZXh0IG1vZGUgaWYgdGhlIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQuIERvbid0IGNoYW5nZSB0ZW1wb3JhcnkgdGhlCisgIGxvY2FsZSBlbmNvZGluZyB1c2luZyBsb2NhbGUuc2V0bG9jYWxlKCksIHVzZSB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcKKyAgaW5zdGVhZCBvZiB0aGUgdXNlciBwcmVmZXJyZWQgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE0NjczOiBBZGQgRXJpYyBTbm93J3Mgc3lzLmltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxNTAzODogT3B0aW1pemUgcHl0aG9uIExvY2tzIG9uIFdpbmRvd3MuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjOTgwMzogRG9uJ3QgY2xvc2UgSURMRSBvbiBzYXZpbmcgaWYgYnJlYWtwb2ludCBpcyBvcGVuLgorICBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTIyODg6IENvbnNpZGVyICcwJyBhbmQgJzAuMCcgYXMgdmFsaWQgaW5pdGlhbHZhbHVlCisgIGZvciB0a2ludGVyIFNpbXBsZURpYWxvZy4KKworLSBJc3N1ZSAjMTU1MTI6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIHBhcnNlci4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0Njk6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIGRlcXVlIG9iamVjdHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDg5OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBCeXRlc0lPIG9iamVjdHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDg3OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBidWZmZXJlZCBJL08gb2JqZWN0cy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU1MTQ6IENvcnJlY3QgX19zaXplb2ZfXyBzdXBwb3J0IGZvciBjcHVfc2V0LgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE4NzogQnVnZml4OiByZW1vdmUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIHRlc3Rfc2h1dGlsIHdhcyBsZWF2aW5nCisgIGJlaGluZC4KKworLSBJc3N1ZSAjMTUxNzc6IEFkZGVkIGRpcl9mZCBwYXJhbWV0ZXIgdG8gb3MuZndhbGsoKS4KKworLSBJc3N1ZSAjMTUxNzY6IENsYXJpZmllZCBiZWhhdmlvciwgZG9jdW1lbnRhdGlvbiwgYW5kIGltcGxlbWVudGF0aW9uCisgIG9mIG9zLmxpc3RkaXIoKS4KKworLSBJc3N1ZSAjMTUwNjE6IFJlLWltcGxlbWVudGVkIGhtYWMuY29tcGFyZV9kaWdlc3QoKSBpbiBDIHRvIHByZXZlbnQgZnVydGhlcgorICB0aW1pbmcgYW5hbHlzaXMgYW5kIHRvIHN1cHBvcnQgYWxsIGJ1ZmZlciBwcm90b2NvbCBhd2FyZSBvYmplY3RzIGFzIHdlbGwgYXMKKyAgQVNDSUkgb25seSBzdHIgaW5zdGFuY2VzIHNhZmVseS4KKworLSBJc3N1ZSAjMTUxNjQ6IENoYW5nZSByZXR1cm4gdmFsdWUgb2YgcGxhdGZvcm0udW5hbWUoKSBmcm9tIGEKKyAgcGxhaW4gdHVwbGUgdG8gYSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlLgorCistIFN1cHBvcnQgTWFnZWlhIExpbnV4IGluIHRoZSBwbGF0Zm9ybSBtb2R1bGUuCisKKy0gSXNzdWUgIzExNjc4OiBTdXBwb3J0IEFyY2ggbGludXggaW4gdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTUxMTg6IENoYW5nZSByZXR1cm4gdmFsdWUgb2Ygb3MudW5hbWUoKSBhbmQgb3MudGltZXMoKSBmcm9tCisgIHBsYWluIHR1cGxlcyB0byBpbW11dGFibGUgaXRlcmFibGUgb2JqZWN0cyB3aXRoIG5hbWVkIGF0dHJpYnV0ZXMKKyAgKHN0cnVjdHNlcSBvYmplY3RzKS4KKworLSBTcGVlZCB1cCBfZGVjaW1hbCBieSBhbm90aGVyIDEwLTE1JSBieSBjYWNoaW5nIHRoZSB0aHJlYWQgbG9jYWwgY29udGV4dAorICB0aGF0IHdhcyBsYXN0IGFjY2Vzc2VkLiBJbiB0aGUgcGkgYmVuY2htYXJrICg2NC1iaXQgcGxhdGZvcm0sIHByZWM9OSksCisgIF9kZWNpbWFsIGlzIG5vdyBvbmx5IDEuNXggc2xvd2VyIHRoYW4gZmxvYXQuCisKKy0gUmVtb3ZlIHRoZSBwYWNrYWdpbmcgbW9kdWxlLCB3aGljaCBpcyBub3QgcmVhZHkgZm9yIHByaW1lIHRpbWUuCisKKy0gSXNzdWUgIzE1MTU0OiBBZGQgImRpcl9mZCIgcGFyYW1ldGVyIHRvIG9zLnJtZGlyLCByZW1vdmUgInJtZGlyIgorICBwYXJhbWV0ZXIgZnJvbSBvcy5yZW1vdmUgLyBvcy51bmxpbmsuCisKKy0gSXNzdWUgIzQ0ODk6IEFkZCBhIHNodXRpbC5ybXRyZWUgdGhhdCBpc24ndCBzdXNjZXB0aWJsZSB0byBzeW1saW5rIGF0dGFja3MuCisgIEl0IGlzIHVzZWQgYXV0b21hdGljYWxseSBvbiBwbGF0Zm9ybXMgc3VwcG9ydGluZyB0aGUgbmVjZXNzYXJ5IG9zLm9wZW5hdCgpCisgIGFuZCBvcy51bmxpbmthdCgpIGZ1bmN0aW9ucy4gTWFpbiBjb2RlIGJ5IE1hcnRpbiB2b24gTMO2d2lzLgorCistIElzc3VlICMxNTE1NjogSFRNTFBhcnNlciBub3cgdXNlcyB0aGUgbmV3ICJodG1sLmVudGl0aWVzLmh0bWw1IiBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxMTExMzogYWRkIGEgbmV3ICJodG1sNSIgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBuYW1lZCBjaGFyYWN0ZXIKKyAgcmVmZXJlbmNlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MNSBzdGFuZGFyZCBhbmQgdGhlIGVxdWl2YWxlbnQgVW5pY29kZQorICBjaGFyYWN0ZXIocykgdG8gdGhlIGh0bWwuZW50aXRpZXMgbW9kdWxlLgorCistIElzc3VlICMxNTExNDogdGhlIHN0cmljdCBtb2RlIG9mIEhUTUxQYXJzZXIgYW5kIHRoZSBIVE1MUGFyc2VFcnJvciBleGNlcHRpb24KKyAgYXJlIGRlcHJlY2F0ZWQgbm93IHRoYXQgdGhlIHBhcnNlciBpcyBhYmxlIHRvIHBhcnNlIGludmFsaWQgbWFya3VwLgorCistIElzc3VlICMzNjY1OiBcdSBhbmQgXFUgZXNjYXBlcyBhcmUgbm93IHN1cHBvcnRlZCBpbiB1bmljb2RlIHJlZ3VsYXIKKyAgZXhwcmVzc2lvbnMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE1MzogQWRkZWQgaW5zcGVjdC5nZXRnZW5lcmF0b3Jsb2NhbHMgdG8gc2ltcGxpZnkgd2hpdGUgYm94CisgIHRlc3Rpbmcgb2YgZ2VuZXJhdG9yIHN0YXRlIHVwZGF0ZXMKKworLSBJc3N1ZSAjMTMwNjI6IEFkZGVkIGluc3BlY3QuZ2V0Y2xvc3VyZXZhcnMgdG8gc2ltcGxpZnkgdGVzdGluZyBzdGF0ZWZ1bAorICBjbG9zdXJlcworCistIElzc3VlICMxMTAyNDogRml4ZXMgYW5kIGFkZGl0aW9uYWwgdGVzdHMgZm9yIFRpbWUySW50ZXJuYWxkYXRlLgorCistIElzc3VlICMxNDYyNjogTGFyZ2UgcmVmYWN0b3Jpbmcgb2YgZnVuY3Rpb25zIC8gcGFyYW1ldGVycyBpbiB0aGUgb3MgbW9kdWxlLgorICBNYW55IGZ1bmN0aW9ucyBub3cgc3VwcG9ydCAiZGlyX2ZkIiBhbmQgImZvbGxvd19zeW1saW5rcyIgcGFyYW1ldGVyczsKKyAgc29tZSBhbHNvIHN1cHBvcnQgYWNjZXB0aW5nIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGluIHBsYWNlIG9mIGEgcGF0aAorICBzdHJpbmcuICBBZGRlZCBvcy5zdXBwb3J0XyogY29sbGVjdGlvbnMgYXMgTEJZTCBoZWxwZXJzLiAgUmVtb3ZlZCBtYW55CisgIGZ1bmN0aW9ucyBvbmx5IHByZXZpb3VzbHkgc2VlbiBpbiAzLjMgYWxwaGEgcmVsZWFzZXMgKG9mdGVuIHN0YXJ0aW5nIHdpdGgKKyAgImYiIG9yICJsIiwgb3IgZW5kaW5nIHdpdGggImF0IikuICBPcmlnaW5hbGx5IHN1Z2dlc3RlZCBieSBTZXJoaXkgU3RvcmNoYWthOworICBpbXBsZW1lbnRlZCBieSBMYXJyeSBIYXN0aW5ncy4KKworLSBJc3N1ZSAjMTUwMDg6IEltcGxlbWVudCBQRVAgMzYyICJTaWduYXR1cmUgT2JqZWN0cyIuCisgIFBhdGNoIGJ5IFl1cnkgU2VsaXZhbm92LgorCistIElzc3VlOiAjMTUxMzg6IGJhc2U2NC51cmxzYWZlX3tlbixkZX1jb2RlKCkgYXJlIG5vdyAzLTR4IGZhc3Rlci4KKworLSBJc3N1ZSAjNDQ0NTgyOiBBZGQgc2h1dGlsLndoaWNoLCBmb3IgZmluZGluZyBwcm9ncmFtcyBvbiB0aGUgc3lzdGVtIHBhdGguCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgRGVtYWluZSwgd2l0aCBsYXRlciBpdGVyYXRpb25zIGJ5IEphbiBLaWxsaWFuCisgIGFuZCBCcmlhbiBDdXJ0aW4uCisKKy0gSXNzdWUgIzE0ODM3OiBTU0wgZXJyb3JzIG5vdyBoYXZlIGBgbGlicmFyeWBgIGFuZCBgYHJlYXNvbmBgIGF0dHJpYnV0ZXMKKyAgZGVzY3JpYmluZyBwcmVjaXNlbHkgd2hhdCBoYXBwZW5lZCBhbmQgaW4gd2hpY2ggT3BlblNTTCBzdWJtb2R1bGUuICBUaGUKKyAgc3RyKCkgb2YgYSBTU0xFcnJvciBpcyBhbHNvIGVuaGFuY2VkIGFjY29yZGluZ2x5LgorCistIElzc3VlICM5NTI3OiBkYXRldGltZS5hc3RpbWV6b25lKCkgbWV0aG9kIHdpbGwgbm93IHN1cHBseSBhIGNsYXNzCisgIHRpbWV6b25lIGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN5c3RlbSBsb2NhbCB0aW1lem9uZSB3aGVuCisgIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTQ2NTM6IGVtYWlsLnV0aWxzLm1rdGltZV90eigpIG5vIGxvbmdlciByZWxpZXMgb24gc3lzdGVtCisgIG1rdGltZSgpIHdoZW4gdGltZXpvbmUgb2ZmZXN0IGlzIHN1cHBsaWVkLgorCistIElzc3VlICMxNDY4NDogemxpYi5jb21wcmVzc29iaigpIGFuZCB6bGliLmRlY29tcHJlc3NvYmooKSBub3cgc3VwcG9ydCB0aGUgdXNlCisgIG9mIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyaWVzLiBPcmlnaW5hbCBwYXRjaCBieSBTYW0gUnVzaGluZy4KKworLSBGaXggR3ppcEZpbGUncyBoYW5kbGluZyBvZiBmaWxlbmFtZXMgZ2l2ZW4gYXMgYnl0ZXMgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ3NzI6IFJldHVybiBkZXN0aW5hdGlvbiB2YWx1ZXMgZnJvbSBzb21lIHNodXRpbCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE1MDY0OiBJbXBsZW1lbnQgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIGZvciBtdWx0aXByb2Nlc3NpbmcgdHlwZXMKKworLSBJc3N1ZSAjMTUxMDE6IE1ha2UgcG9vbCBmaW5hbGl6ZXIgYXZvaWQgam9pbmluZyBjdXJyZW50IHRocmVhZC4KKworLSBJc3N1ZSAjMTQ2NTc6IFRoZSBmcm96ZW4gaW5zdGFuY2Ugb2YgaW1wb3J0bGliIHVzZWQgZm9yIGJvb3RzdHJhcCBpcyBub3cKKyAgYWxzbyB0aGUgbW9kdWxlIGltcG9ydGVkIGFzIGltcG9ydGxpYi5fYm9vdHN0cmFwLgorCistIElzc3VlICMxNDA1NTogQWRkIF9fc2l6ZW9mX18gc3VwcG9ydCB0byBfZWxlbWVudHRyZWUuCisKKy0gSXNzdWUgIzE1MDU0OiBBIGJ1ZyBpbiB0b2tlbml6ZS50b2tlbml6ZSB0aGF0IGNhdXNlZCBzdHJpbmcgbGl0ZXJhbHMKKyAgd2l0aCAnYicgcHJlZml4ZXMgdG8gYmUgaW5jb3JyZWN0bHkgdG9rZW5pemVkIGhhcyBiZWVuIGZpeGVkLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTAwNjogQWxsb3cgZXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIG5haXZlIGFuZCBhd2FyZQorICB0aW1lIG9yIGRhdGV0aW1lIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0OTgyOiBEb2N1bWVudCB0aGF0IHBrZ3V0aWwncyBpdGVyYXRpb24gZnVuY3Rpb25zIHJlcXVpcmUgdGhlCisgIG5vbi1zdGFuZGFyZCBpdGVyX21vZHVsZXMoKSBtZXRob2QgdG8gYmUgZGVmaW5lZCBieSBhbiBpbXBvcnRlciAoc29tZXRoaW5nCisgIHRoZSBpbXBvcnRsaWIgaW1wb3J0ZXJzIGRvIG5vdCBkZWZpbmUpLgorCistIElzc3VlICMxNTAzNjogTWFpbGJveCBubyBsb25nZXIgdGhyb3dzIGFuIGVycm9yIGlmIGEgZmx1c2ggaXMgZG9uZQorICBiZXR3ZWVuIG9wZXJhdGlvbnMgd2hlbiByZW1vdmluZyBvciBjaGFuZ2luZyBtdWx0aXBsZSBpdGVtcyBpbiBtYm94LAorICBNTURGLCBvciBCYWJ5bCBtYWlsYm94ZXMuCisKKy0gSXNzdWUgIzE0MDU5OiBJbXBsZW1lbnQgbXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIuCisKKy0gSXNzdWUgIzE1MDYxOiBUaGUgaW5hcHByb3ByaWF0ZWx5IG5hbWVkIGhtYWMuc2VjdXJlX2NvbXBhcmUgaGFzIGJlZW4KKyAgcmVuYW1lZCB0byBobWFjLmNvbXBhcmVfZGlnZXN0LCByZXN0cmljdGVkIHRvIG9wZXJhdGluZyBvbiBieXRlcyBpbnB1dHMKKyAgb25seSBhbmQgaGFkIGl0cyBkb2N1bWVudGF0aW9uIHVwZGF0ZWQgdG8gbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3QgYm90aCBpdHMKKyAgaW50ZW50IGFuZCBpdHMgbGltaXRhdGlvbnMKKworLSBJc3N1ZSAjMTM4NDE6IE1ha2UgY2hpbGQgcHJvY2Vzc2VzIGV4aXQgdXNpbmcgc3lzLmV4aXQoKSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNDkzNjogY3Vyc2VzX3BhbmVsIHdhcyBjb252ZXJ0ZWQgdG8gUEVQIDMxMjEgYW5kIFBFUCAzODQgQVBJLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE2Njc1NDY6IE9uIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHRtX3pvbmUgYW5kIHRtX2dtdG9mZiBmaWVsZHMKKyAgaW4gc3RydWN0IHRtLCB0aW1lLnN0cnVjdF90aW1lIG9iamVjdHMgcmV0dXJuZWQgYnkgdGltZS5nbXRpbWUoKSwKKyAgdGltZS5sb2NhbHRpbWUoKSBhbmQgdGltZS5zdHJwdGltZSgpIGZ1bmN0aW9ucyBub3cgaGF2ZSB0bV96b25lIGFuZAorICB0bV9nbXRvZmYgYXR0cmlidXRlcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFBhdWwgQm9kZGllLgorCistIFJlbmFtZSBhZGp1c3RlZCBhdHRyaWJ1dGUgdG8gYWRqdXN0YWJsZSBpbiB0aW1lLmdldF9jbG9ja19pbmZvKCkgcmVzdWx0LgorCistIElzc3VlICMzNTE4OiBSZW1vdmUgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgQmFzZU1hbmFnZXIuZnJvbV9hZGRyZXNzKCkKKyAgbWV0aG9kLgorCistIElzc3VlICMxMzg1NzogQWRkZWQgdGV4dHdyYXAuaW5kZW50KCkgZnVuY3Rpb24gKGluaXRpYWwgcGF0Y2ggYnkgRXpyYQorICBCZXJjaCkKKworLSBJc3N1ZSAjMjczNjogQWRkZWQgZGF0ZXRpbWUudGltZXN0YW1wKCkgbWV0aG9kLgorCistIElzc3VlICMxMzg1NDogTWFrZSBtdWx0aXByb2Nlc3NpbmcgcHJvcGVybHkgaGFuZGxlIG5vbi1pbnRlZ2VyCisgIG5vbi1zdHJpbmcgYXJndW1lbnQgdG8gU3lzdGVtRXhpdC4KKworLSBJc3N1ZSAjMTIxNTc6IE1ha2UgcG9vbC5tYXAoKSBlbXB0eSBpdGVyYWJsZXMgY29ycmVjdGx5LiAgSW5pdGlhbAorICBwYXRjaCBieSBtb3VhZC4KKworLSBJc3N1ZSAjMTE4MjM6IGRpc2Fzc2VtYmx5IG5vdyBzaG93cyBhcmd1bWVudCBjb3VudHMgb24gY2FsbHMgd2l0aCBrZXl3b3JkIGFyZ3MuCisKKy0gSXNzdWUgIzE0NzExOiBvcy5zdGF0X2Zsb2F0X3RpbWVzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4KKworLSBMWk1BRmlsZSBub3cgYWNjZXB0cyB0aGUgbW9kZXMgInJiIi8id2IiLyJhYiIgYXMgc3lub255bXMgb2YgInIiLyJ3Ii8iYSIuCisKKy0gVGhlIGJ6MiBhbmQgbHptYSBtb2R1bGVzIG5vdyBlYWNoIGNvbnRhaW4gYW4gb3BlbigpIGZ1bmN0aW9uLCBhbGxvd2luZworICBjb21wcmVzc2VkIGZpbGVzIHRvIHJlYWRpbHkgYmUgb3BlbmVkIGluIHRleHQgbW9kZSBhcyB3ZWxsIGFzIGJpbmFyeSBtb2RlLgorCistIEJaMkZpbGUuX19pbml0X18oKSBhbmQgTFpNQUZpbGUuX19pbml0X18oKSBub3cgYWNjZXB0IGEgZmlsZSBvYmplY3QgYXMgdGhlaXIKKyAgZmlyc3QgYXJndW1lbnQsIHJhdGhlciB0aGFuIHJlcXVpcmluZyBhIHNlcGFyYXRlICJmaWxlb2JqIiBhcmd1bWVudC4KKworLSBnemlwLm9wZW4oKSBub3cgYWNjZXB0cyBmaWxlIG9iamVjdHMgYXMgd2VsbCBhcyBmaWxlbmFtZXMuCisKKy0gSXNzdWUgIzE0OTkyOiBvcy5tYWtlZGlycyhwYXRoLCBleGlzdF9vaz1UcnVlKSB3b3VsZCByYWlzZSBhbiBPU0Vycm9yCisgIHdoZW4gdGhlIHBhdGggZXhpc3RlZCBhbmQgaGFkIHRoZSBTX0lTR0lEIG1vZGUgYml0IHNldCB3aGVuIGl0IHdhcworICBub3QgZXhwbGljaXRseSBhc2tlZCBmb3IuICBUaGlzIGlzIG5vIGxvbmdlciBhbiBleGNlcHRpb24gYXMgbWtkaXIKKyAgY2Fubm90IGNvbnRyb2wgaWYgdGhlIE9TIHNldHMgdGhhdCBiaXQgZm9yIGl0IG9yIG5vdC4KKworLSBJc3N1ZSAjMTQ5ODk6IE1ha2UgdGhlIENHSSBlbmFibGUgb3B0aW9uIHRvIGh0dHAuc2VydmVyIGF2YWlsYWJsZSB2aWEgY29tbWFuZAorICBsaW5lLgorCistIElzc3VlICMxNDk4NzogQWRkIGEgbWlzc2luZyBpbXBvcnQgc3RhdGVtZW50IHRvIGluc3BlY3QuCisKKy0gSXNzdWUgIzEwNzk6IGVtYWlsLmhlYWRlci5kZWNvZGVfaGVhZGVyIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGFsbCB0aGUgZXhhbXBsZXMKKyAgaW4gUkZDMjA0Ny4gIFRoZXJlIGlzIGEgbmVjZXNzYXJ5IHZpc2libGUgYmVoYXZpb3IgY2hhbmdlOiB0aGUgbGVhZGluZyBhbmQvb3IKKyAgdHJhaWxpbmcgd2hpdGVzcGFjZSBvbiBBU0NJSSBwYXJ0cyBpcyBub3cgcHJlc2VydmVkLgorCistIElzc3VlICMxNDk2OTogQmV0dGVyIGhhbmRsaW5nIG9mIGV4Y2VwdGlvbiBjaGFpbmluZyBpbiBjb250ZXh0bGliLkV4aXRTdGFjaworCistIElzc3VlICMxNDk2MjogVXBkYXRlIHRleHQgY29sb3JpbmcgaW4gSURMRSBzaGVsbCB3aW5kb3cgYWZ0ZXIgY2hhbmdpbmcKKyAgb3B0aW9ucy4gIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxNDk2MzogQ29udmVydCBjb250ZXh0bGliLkV4aXRTdGFjay5fX2V4aXRfXyB0byB1c2UgYW4gaXRlcmF0aXZlCisgIGFsZ29yaXRobSAoUGF0Y2ggYnkgQWxvbiBIb3JldikKKworLSBJc3N1ZSAjMTQ3ODU6IEFkZCBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKSB0byBoZWxwIGRlYnVnIGxvdy1sZXZlbCBtZW1vcnkKKyAgYWxsb2NhdGlvbiBpc3N1ZXMKKworLSBJc3N1ZSAjMTQ0NDM6IEVuc3VyZSB0aGF0IC5weSBmaWxlcyBhcmUgYnl0ZS1jb21waWxlZCB3aXRoIHRoZSBjb3JyZWN0IFB5dGhvbgorICBleGVjdXRhYmxlIHdpdGhpbiBiZGlzdF9ycG0gZXZlbiBvbiBvbGRlciB2ZXJzaW9ucyBvZiBSUE0KKworQy1BUEkKKy0tLS0tCisKKy0gSXNzdWUgIzEzNzgzOiBJbmFkdmVydGVudCBhZGRpdGlvbnMgdG8gdGhlIHB1YmxpYyBDIEFQSSBpbiB0aGUgUEVQIDM4MAorICBpbXBsZW1lbnRhdGlvbiBoYXZlIGVpdGhlciBiZWVuIHJlbW92ZWQgb3IgbWFya2VkIGFzIHByaXZhdGUgaW50ZXJmYWNlcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1MDAwOiBTdXBwb3J0IHRoZSAidW5pcXVlIiB4MzIgYXJjaGl0ZWN0dXJlIGluIF9wb3NpeHN1YnByb2Nlc3MuYy4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTA4MTogRG9jdW1lbnQgUHlTdGF0ZV9GaW5kTW9kdWxlLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE0ODE0OiBBZGRlZCBmaXJzdCBkcmFmdCBvZiBpcGFkZHJlc3MgbW9kdWxlIEFQSSByZWZlcmVuY2UKKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE0NzY5OiB0ZXN0X2NhcGkgbm93IGhhcyBTa2lwaXRlbVRlc3QsIHdoaWNoIGNsZXZlcmx5IGNoZWNrcworICBmb3IgInBhcml0eSIgYmV0d2VlbiBQeUFyZ19QYXJzZVR1cGxlKCkgYW5kIHRoZSBQeXRob24vZ2V0YXJncy5jIHN0YXRpYworICBmdW5jdGlvbiBza2lwaXRlbSgpIGZvciBhbGwgcG9zc2libGUgImZvcm1hdCB1bml0cyIuCisKKy0gdGVzdF9ubnRwbGliIG5vdyB0b2xlcmF0ZXMgYmVpbmcgcnVuIGZyb20gYmVoaW5kIE5OVFAgZ2F0ZXdheXMgdGhhdCBhZGQKKyAgIlgtQW50aXZpcnVzIiBoZWFkZXJzIHRvIGFydGljbGVzCisKKy0gSXNzdWUgIzE1MDQzOiB0ZXN0X2dkYiBpcyBub3cgc2tpcHBlZCBlbnRpcmVseSBpZiBnZGIgc2VjdXJpdHkgc2V0dGluZ3MKKyAgYmxvY2sgbG9hZGluZyBvZiB0aGUgZ2RiIGhvb2tzCisKKy0gSXNzdWUgIzE0OTYzOiBBZGQgdGVzdCBjYXNlcyBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nIGJlaGF2aW91cgorICBpbiBjb250ZXh0bGliLkV4aXRTdGFjayAoSW5pdGlhbCBwYXRjaCBieSBBbG9uIEhvcmV2KQorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTM1OTA6IEltcHJvdmUgc3VwcG9ydCBmb3IgT1MgWCBYY29kZSA0OgorICAgICogVHJ5IHRvIGF2b2lkIGJ1aWxkaW5nIFB5dGhvbiBvciBleHRlbnNpb24gbW9kdWxlcyB3aXRoIHByb2JsZW1hdGljCisgICAgICBsbHZtLWdjYyBjb21waWxlci4KKyAgICAqIFNpbmNlIFhjb2RlIDQgcmVtb3ZlcyBwcGMgc3VwcG9ydCwgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZHMgbm93CisgICAgICBjaGVjayBmb3IgcHBjIGNvbXBpbGVyIHN1cHBvcnQgYW5kIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBwYyBhbmQKKyAgICAgIHBwYzY0IGFyY2hzIHdoZW4gbm90IGF2YWlsYWJsZS4KKyAgICAqIFNpbmNlIFhjb2RlIDQgbm8gbG9uZ2VyIGluc3RhbGwgU0RLcyBpbiBkZWZhdWx0IGxvY2F0aW9ucywKKyAgICAgIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRzIG5vdyByZXZlcnQgdG8gdXNpbmcgaW5zdGFsbGVkIGhlYWRlcnMKKyAgICAgIGFuZCBsaWJzIGlmIHRoZSBTREsgdXNlZCB0byBidWlsZCB0aGUgaW50ZXJwcmV0ZXIgaXMgbm90CisgICAgICBhdmFpbGFibGUuCisgICAgKiBVcGRhdGUgLi9jb25maWd1cmUgdG8gdXNlIGJldHRlciBkZWZhdWx0cyBmb3IgdW5pdmVyc2FsIGJ1aWxkczsKKyAgICAgIGluIHBhcnRpY3VsYXIsIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz15ZXMgdXNlcyB0aGUgWGNvZGUgZGVmYXVsdAorICAgICAgU0RLIGFuZCAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzIG5vdyBkZWZhdWx0cyB0byAiaW50ZWwiIGlmIHBwYworICAgICAgbm90IGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTQyMjU6IEZpeCBVbmljb2RlIHN1cHBvcnQgZm9yIGN1cnNlcyAoIzEyNTY3KSBvbiBPUyBYCisKKy0gSXNzdWUgIzE0OTI4OiBGaXggaW1wb3J0bGliIGJvb3RzdHJhcCBpc3N1ZXMgYnkgdXNpbmcgYSBjdXN0b20gZXhlY3V0YWJsZQorICAoTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYikgdG8gYnVpbGQgUHl0aG9uL2ltcG9ydGxpYi5oLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDQ/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAzMS1NYXktMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0ODM1OiBNYWtlIHBsaXN0bGliIG91dHB1dCBlbXB0eSBhcnJheXMgJiBkaWN0cyBsaWtlIE9TIFguCisgIFBhdGNoIGJ5IFNpZG5leSBTYW4gTWFydMOtbi4KKworLSBJc3N1ZSAjMTQ3NDQ6IFVzZSB0aGUgbmV3IF9QeVVuaWNvZGVXcml0ZXIgaW50ZXJuYWwgQVBJIHRvIHNwZWVkIHVwCisgIHN0ciVhcmdzIGFuZCBzdHIuZm9ybWF0KGFyZ3MpLgorCistIElzc3VlICMxNDkzMDogTWFrZSBtZW1vcnl2aWV3IG9iamVjdHMgd2Vha3JlZmFibGUuCisKKy0gSXNzdWUgIzE0Nzc1OiBGaXggYSBwb3RlbnRpYWwgcXVhZHJhdGljIGRpY3QgYnVpbGQtdXAgZHVlIHRvIHRoZSBnYXJiYWdlCisgIGNvbGxlY3RvciByZXBlYXRlZGx5IHRyeWluZyB0byB1bnRyYWNrIGRpY3RzLgorCistIElzc3VlICMxNDg1NzogZml4IHJlZ3Jlc3Npb24gaW4gcmVmZXJlbmNlcyB0byBQRVAgMzEzNSBpbXBsaWNpdCBfX2NsYXNzX18KKyAgY2xvc3VyZSB2YXJpYWJsZSAoUmVvcGVucyBpc3N1ZSAjMTIzNzApCisKKy0gSXNzdWUgIzE0NzEyIChQRVAgNDA1KTogVmlydHVhbCBlbnZpcm9ubWVudHMuIEltcGxlbWVudGVkIGJ5IFZpbmF5IFNhamlwLgorCistIElzc3VlICMxNDY2MCAoUEVQIDQyMCk6IE5hbWVzcGFjZSBwYWNrYWdlcy4gSW1wbGVtZW50ZWQgYnkgRXJpYyBTbWl0aC4KKworLSBJc3N1ZSAjMTQ0OTQ6IEZpeCBfX2Z1dHVyZV9fLnB5IGFuZCBpdHMgZG9jdW1lbnRhdGlvbiB0byBub3RlIHRoYXQKKyAgYWJzb2x1dGUgaW1wb3J0cyBhcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaW4gMy4wIGluc3RlYWQgb2YgMi43LgorICBQYXRjaCBieSBTdmVuIE1hcm5hY2guCisKKy0gSXNzdWUgIzkyNjA6IEEgZmluZXItZ3JhaW5lZCBpbXBvcnQgbG9jay4gIE1vc3Qgb2YgdGhlIGltcG9ydCBzZXF1ZW5jZQorICBub3cgdXNlcyBwZXItbW9kdWxlIGxvY2tzIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwgaW1wb3J0IGxvY2ssIGVsaW1pbmF0aW5nCisgIHdlbGwta25vd24gaXNzdWVzIHdpdGggdGhyZWFkcyBhbmQgaW1wb3J0cy4KKworLSBJc3N1ZSAjMTQ2MjQ6IFVURi0xNiBkZWNvZGluZyBpcyBub3cgM3ggdG8gNHggZmFzdGVyIG9uIHZhcmlvdXMgaW5wdXRzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIGFzZGxfc2VxIGFuZCBhc2RsX2ludF9zZXEgYXJlIG5vdyBQeV9zc2l6ZV90IHNpemVkLgorCistIElzc3VlICMxNDEzMyAoUEVQIDQxNSk6IEltcGxlbWVudCBzdXBwcmVzc2lvbiBvZiBfX2NvbnRleHRfXyBkaXNwbGF5IHdpdGggYW4KKyAgYXR0cmlidXRlIG9uIEJhc2VFeGNlcHRpb24uIFRoaXMgcmVwbGFjZXMgdGhlIG9yaWdpbmFsIG1lY2hhbmlzbSBvZiBQRVAgNDA5LgorCistIElzc3VlICMxNDQxNzogTXV0YXRpbmcgYSBkaWN0IGR1cmluZyBsb29rdXAgbm93IHJlc3RhcnRzIHRoZSBsb29rdXAgaW5zdGVhZAorICBvZiByYWlzaW5nIGEgUnVudGltZUVycm9yICh1bmRvZXMgaXNzdWUgIzE0MjA1KS4KKworLSBJc3N1ZSAjMTQ3Mzg6IFNwZWVkLXVwIFVURi04IGRlY29kaW5nIG9uIG5vbi1BU0NJSSBkYXRhLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTQ3MDA6IEZpeCB0d28gYnJva2VuIGFuZCB1bmRlZmluZWQtYmVoYXZpb3VyLWluZHVjaW5nIG92ZXJmbG93IGNoZWNrcworICBpbiBvbGQtc3R5bGUgc3RyaW5nIGZvcm1hdHRpbmcuCisKKy0gSXNzdWUgIzE0NzA1OiBUaGUgUHlBcmdfUGFyc2UoKSBmYW1pbHkgb2YgZnVuY3Rpb25zIG5vdyBzdXBwb3J0IHRoZSAncCcgZm9ybWF0CisgIHVuaXQsIHdoaWNoIGFjY2VwdHMgYSAiYm9vbGVhbiBwcmVkaWNhdGUiIGFyZ3VtZW50LiAgSXQgY29udmVydHMgYW55IFB5dGhvbgorICB2YWx1ZSBpbnRvIGFuIGludGVnZXItLTAgaWYgaXQgaXMgImZhbHNlIiwgYW5kIDEgb3RoZXJ3aXNlLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0NjkwOiBVc2UgbW9ub3RvbmljIGNsb2NrIGluc3RlYWQgb2Ygc3lzdGVtIGNsb2NrIGluIHRoZSBzY2hlZCwKKyAgc3VicHJvY2VzcyBhbmQgdHJhY2UgbW9kdWxlcy4KKworLSBJc3N1ZSAjMTQ5NTg6IENoYW5nZSBJRExFIHN5c3RheCBoaWdobGlnaHRpbmcgdG8gcmVjb2duaXplIGFsbCBzdHJpbmcgYW5kCisgIGJ5dGUgbGl0ZXJhbHMgc3VwcG9ydGVkIGluIFB5dGhvbiAzLjMuCisKKy0gSXNzdWUgIzEwOTk3OiBQcmV2ZW50IGEgZHVwbGljYXRlIGVudHJ5IGluIElETEUncyAiUmVjZW50IEZpbGVzIiBtZW51LgorCistIElzc3VlICMxNDQ0MzogVGVsbCBycG1idWlsZCB0byB1c2UgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBQeXRob24gaW4KKyAgYmRpc3RfcnBtLiBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxNDkyOTogU3RvcCBJZGxlIDMueCBmcm9tIGNsb3Npbmcgb24gVW5pY29kZSBkZWNvZGUgZXJyb3JzIHdoZW4KKyAgZ3JlcHBpbmcuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjUxNTogZW1haWwgbm93IHJlZ2lzdGVycyBhIGRlZmVjdCBpZiBpdCBnZXRzIHRvIEVPRiB3aGlsZSBwYXJzaW5nCisgIGEgTUlNRSBwYXJ0IHdpdGhvdXQgc2VlaW5nIHRoZSBjbG9zaW5nIE1JTUUgYm91bmRhcnkuCisKKy0gSXNzdWUgIzEyNTEwOiBBdHRlbXB0aW5nIHRvIGdldCBpbnZhbGlkIHRvb2x0aXAgbm8gbG9uZ2VyIGNsb3NlcyBJZGxlLgorICBPdGhlciB0b29sdGlwc3MgaGF2ZSBiZWVuIGNvcnJlY3RlZCBvciBpbXByb3ZlZCBhbmQgdGhlIG51bWJlciBvZiB0ZXN0cworICBoYXMgYmVlbiB0cmlwbGVkLiBPcmlnaW5hbCBwYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTY3MjU2ODogZW1haWwgbm93IGFsd2F5cyBkZWNvZGVzIGJhc2U2NCBwYXlsb2FkcywgYWRkaW5nIHBhZGRpbmcgYW5kCisgIGlnbm9yaW5nIG5vbi1iYXNlNjQtYWxwaGFiZXQgY2hhcmFjdGVycyBpZiBuZWVkZWQsIGFuZCByZWdpc3RlcmluZyBkZWZlY3RzCisgIGZvciBhbnkgc3VjaCBwcm9ibGVtcy4KKworLSBJc3N1ZSAjMTQ5MjU6IGVtYWlsIG5vdyByZWdpc3RlcnMgYSBkZWZlY3Qgd2hlbiB0aGUgcGFyc2VyIGRlY2lkZXMgdGhhdCB0aGVyZQorICBpcyBhIG1pc3NpbmcgaGVhZGVyL2JvZHkgc2VwYXJhdG9yIGxpbmUuICBNYWxmb3JtZWRIZWFkZXJEZWZlY3QsIHdoaWNoIHRoZQorICBleGlzdGluZyBjb2RlIHdvdWxkIG5ldmVyIGFjdHVhbGx5IGdlbmVyYXRlLCBpcyBkZXByZWNhdGVkLgorCistIElzc3VlICMxMDM2NTogRmlsZSBvcGVuIGRpYWxvZyBub3cgd29ya3MgaW5zdGVhZCBvZiBjcmFzaGluZyBldmVuIHdoZW4KKyAgdGhlIHBhcmVudCB3aW5kb3cgaXMgY2xvc2VkIGJlZm9yZSB0aGUgZGlhbG9nLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjODczOTogVXBkYXRlZCBzbXRwZCB0byBzdXBwb3J0IFJGQyA1MzIxLCBhbmQgYWRkZWQgc3VwcG9ydCBmb3IgdGhlCisgIFJGQyAxODcwIFNJWkUgZXh0ZW5zaW9uLgorCistIElzc3VlICM2NjUxOTQ6IEFkZGVkIGEgbG9jYWx0aW1lIGZ1bmN0aW9uIHRvIGVtYWlsLnV0aWxzIHRvIHByb3ZpZGUgYW4KKyAgYXdhcmUgbG9jYWwgZGF0ZXRpbWUgZm9yIHVzZSBpbiBzZXR0aW5nIERhdGUgaGVhZGVycy4KKworLSBJc3N1ZSAjMTI1ODY6IEFkZGVkIG5ldyBwcm92aXNpb25hbCBwb2xpY2llcyB0aGF0IGltcGxlbWVudCBjb252ZW5pZW50CisgIHVuaWNvZGUgc3VwcG9ydCBmb3IgZW1haWwgaGVhZGVycy4gIFNlZSBXaGF0J3MgTmV3IGZvciBkZXRhaWxzLgorCistIElzc3VlICMxNDczMTogUmVmYWN0b3JlZCBlbWFpbCBQb2xpY3kgZnJhbWV3b3JrIHRvIHN1cHBvcnQgZnVsbCBiYWNrd2FyZAorICBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMiBieSBkZWZhdWx0IHlldCBhbGxvdyBmb3IgdGhlIGludHJvZHVjdGlvbiBvZgorICBuZXcgZmVhdHVyZXMgdGhyb3VnaCBuZXcgcG9saWNpZXMuICBOb3RlIHRoYXQgUG9saWN5Lm11c3RfYmVfN2JpdCBpcyByZW5hbWVkCisgIHRvIGN0ZV90eXBlLgorCistIElzc3VlICMxNDg3NjogVXNlIHVzZXItc2VsZWN0ZWQgZm9udCBmb3IgaGlnaGxpZ2h0IGNvbmZpZ3VyYXRpb24uCisKKy0gSXNzdWUgIzE0OTIwOiBGaXggdGhlIGhlbHAodXJsbGliLnBhcnNlKSBmYWlsdXJlIG9uIGxvY2FsZSBDIG9uIHRlcm1pbmFscy4KKyAgSGF2ZSBhc2NpaSBjaGFyYWN0ZXJzIGluIGhlbHAuCisKKy0gSXNzdWUgIzE0NTQ4OiBNYWtlIG11bHRpcHJvY2Vzc2luZyBmaW5hbGl6ZXJzIGNoZWNrIHBpZCBiZWZvcmUKKyAgcnVubmluZyB0byBjb3BlIHdpdGggcG9zc2liaWxpdHkgb2YgZ2MgcnVubmluZyBqdXN0IGFmdGVyIGZvcmsuCisKKy0gSXNzdWUgIzE0ODYzOiBVcGRhdGUgdGhlIGRvY3VtZW50YXRpb24gb2Ygb3MuZmRvcGVuKCkgdG8gcmVmbGVjdCB0aGUKKyAgZmFjdCB0aGF0IGl0J3Mgb25seSBhIHRoaW4gd3JhcHBlciBhcm91bmQgb3BlbigpIGFueW1vcmUuCisKKy0gSXNzdWUgIzE0MDM2OiBBZGQgYW4gYWRkaXRpb25hbCBjaGVjayB0byB2YWxpZGF0ZSB0aGF0IHBvcnQgaW4gdXJscGFyc2UgZG9lcworICBub3QgZ28gaW4gaWxsZWdhbCByYW5nZSBhbmQgcmV0dXJucyBOb25lLgorCistIElzc3VlICMxNDg2MjogQWRkIG1pc3NpbmcgbmFtZXMgdG8gb3MuX19hbGxfXworCistIElzc3VlICMxNDg3NTogVXNlIGZsb2F0KCdpbmYnKSBpbnN0ZWFkIG9mIGZsb2F0KCcxZTY2NjY2JykgaW4gdGhlIGpzb24gbW9kdWxlLgorCistIElzc3VlICMxMzU4NTogQWRkZWQgY29udGV4dGxpYi5FeGl0U3RhY2sKKworLSBQRVAgMzE0NCwgSXNzdWUgIzE0ODE0OiBBZGRlZCB0aGUgaXBhZGRyZXNzIG1vZHVsZQorCistIElzc3VlICMxNDQyNjogQ29ycmVjdCB0aGUgRGF0ZSBmb3JtYXQgaW4gRXhwaXJlcyBhdHRyaWJ1dGUgb2YgU2V0LUNvb2tpZQorICBIZWFkZXIgaW4gQ29va2llLnB5LgorCistIElzc3VlICMxNDU4ODogVGhlIHR5cGVzIG1vZHVsZSBub3cgcHJvdmlkZSBuZXdfY2xhc3MoKSBhbmQgcHJlcGFyZV9jbGFzcygpCisgIGZ1bmN0aW9ucyB0byBzdXBwb3J0IFBFUCAzMTE1IGNvbXBsaWFudCBkeW5hbWljIGNsYXNzIGNyZWF0aW9uLiBQYXRjaCBieQorICBEYW5pZWwgVXJiYW4gYW5kIE5pY2sgQ29naGxhbi4KKworLSBJc3N1ZSAjMTMxNTI6IEFsbG93IHRvIHNwZWNpZnkgYSBjdXN0b20gdGFic2l6ZSBmb3IgZXhwYW5kaW5nIHRhYnMgaW4KKyAgdGV4dHdyYXAuIFBhdGNoIGJ5IEpvaG4gRmV1ZXJzdGVpbi4KKworLSBJc3N1ZSAjMTQ3MjE6IFNlbmQgdGhlIGNvcnJlY3QgJ0NvbnRlbnQtbGVuZ3RoOiAwJyBoZWFkZXIgd2hlbiB0aGUgYm9keSBpcyBhbgorICBlbXB0eSBzdHJpbmcgJycuIEluaXRpYWwgUGF0Y2ggY29udHJpYnV0ZWQgYnkgQXJ2ZSBLbnVkc2VuLgorCistIElzc3VlICMxNDA3MjogRml4IHBhcnNpbmcgb2YgJ3RlbCcgVVJJcyBpbiB1cmxwYXJzZSBieSBtYWtpbmcgdGhlIGNoZWNrIGZvcgorICBwb3J0cyBzdHJpY3Rlci4KKworLSBJc3N1ZSAjOTM3NDogR2VuZXJpYyBwYXJzaW5nIG9mIHF1ZXJ5IGFuZCBmcmFnbWVudCBwb3J0aW9ucyBvZiB1cmwgZm9yIGFueQorICBzY2hlbWUuIFN1cHBvcnRlZCBib3RoIGJ5IFJGQzM5ODYgYW5kIFJGQzIzOTYuCisKKy0gSXNzdWUgIzE0Nzk4OiBGaXggdGhlIGZ1bmN0aW9ucyBpbiBweWNsYnIgdG8gcmFpc2UgYW4gSW1wb3J0RXJyb3IKKyAgd2hlbiB0aGUgZmlyc3QgcGFydCBvZiBhIGRvdHRlZCBuYW1lIGlzIG5vdCBhIHBhY2thZ2UuIFBhdGNoIGJ5CisgIFhhdmllciBkZSBHYXllLgorCistIElzc3VlICMxMjA5ODogbXVsdGlwcm9jZXNzaW5nIG9uIFdpbmRvd3Mgbm93IHN0YXJ0cyBjaGlsZCBwcm9jZXNzZXMKKyAgdXNpbmcgdGhlIHNhbWUgc3lzLmZsYWdzIGFzIHRoZSBjdXJyZW50IHByb2Nlc3MuICBJbml0aWFsIHBhdGNoIGJ5CisgIFNlcmdleSBNZXplbnRzZXYuCisKKy0gSXNzdWUgIzEzMDMxOiBTbWFsbCBzcGVlZC11cCBmb3IgdGFyZmlsZSB3aGVuIHVuemlwcGluZyB0YXJmaWxlcy4KKyAgUGF0Y2ggYnkgSnVzdGluIFBlZWwuCisKKy0gSXNzdWUgIzE0NzgwOiB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCkgbm93IGhhcyBhIGBgY2FkZWZhdWx0YGAgYXJndW1lbnQKKyAgdG8gdXNlIHRoZSBkZWZhdWx0IGNlcnRpZmljYXRlIHN0b3JlLiAgSW5pdGlhbCBwYXRjaCBieSBKYW1lcyBPYWtsZXkuCisKKy0gSXNzdWUgIzE0ODI5OiBGaXggYmlzZWN0IGFuZCByYW5nZSgpIGluZGV4aW5nIHdpdGggbGFyZ2UgaW5kaWNlcworICAoPj0gMiAqKiAzMikgdW5kZXIgNjQtYml0IFdpbmRvd3MuCisKKy0gSXNzdWUgIzE0NzMyOiBUaGUgX2NzdiBtb2R1bGUgbm93IHVzZXMgUEVQIDMxMjEgbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE0ODA5OiBBZGQgSFRUUCBzdGF0dXMgY29kZXMgaW50cm9kdWNlZCBieSBSRkMgNjU4NSB0byBodHRwLnNlcnZlcgorICBhbmQgaHR0cC5jbGllbnQuIFBhdGNoIGJ5IEV1bmdKdW4gWWkuCisKKy0gSXNzdWUgIzE0Nzc3OiB0a2ludGVyIG1heSByZXR1cm4gdW5kZWNvZGVkIFVURi04IGJ5dGVzIGFzIGEgc3RyaW5nIHdoZW4KKyAgYWNjZXNzaW5nIHRoZSBUayBjbGlwYm9hcmQuICBNb2RpZnkgY2xpcGJvYWRfZ2V0KCkgdG8gZmlyc3QgcmVxdWVzdCB0eXBlCisgIFVURjhfU1RSSU5HIHdoZW4gbm8gc3BlY2lmaWMgdHlwZSBpcyByZXF1ZXN0ZWQgaW4gYW4gWDExIHdpbmRvd2luZworICBlbnZpcm9ubWVudCwgZmFsbGluZyBiYWNrIHRvIHRoZSBjdXJyZW50IGRlZmF1bHQgdHlwZSBTVFJJTkcgaWYgdGhhdCBmYWlscy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzE0NzczOiBGaXggb3MuZndhbGsoKSBmYWlsaW5nIG9uIGRhbmdsaW5nIHN5bWxpbmtzLgorCistIElzc3VlICMxMjU0MTogQmUgbGVuaWVudCB3aXRoIHF1b3RlcyBhcm91bmQgUmVhbG0gZmllbGQgb2YgSFRUUCBCYXNpYworICBBdXRoZW50YXRpb24gaW4gdXJsbGliMi4KKworLSBJc3N1ZSAjMTQ4MDc6IG1vdmUgdW5kb2N1bWVudGVkIHRhcmZpbGUuZmlsZW1vZGUoKSB0byBzdGF0LmZpbGVtb2RlKCkgYW5kIGFkZAorICBkb2MgZW50cnkuIEFkZCB0YXJmaWxlLmZpbGVtb2RlIGFsaWFzIHdpdGggZGVwcmVjYXRpb24gd2FybmluZy4KKworLSBJc3N1ZSAjMTM4MTU6IFRhckZpbGUuZXh0cmFjdGZpbGUoKSBub3cgcmV0dXJucyBpby5CdWZmZXJlZFJlYWRlciBvYmplY3RzLgorCistIElzc3VlICMxNDUzMjogQWRkIGEgc2VjdXJlX2NvbXBhcmUoKSBoZWxwZXIgdG8gdGhlIGhtYWMgbW9kdWxlLCB0byBtaXRpZ2F0ZQorICB0aW1pbmcgYXR0YWNrcy4gUGF0Y2ggYnkgSm9uIE9iZXJoZWlkZS4KKworLSBBZGQgaW1wb3J0bGliLnV0aWwucmVzb2x2ZV9uYW1lKCkuCisKKy0gSXNzdWUgIzE0MzY2OiBTdXBwb3J0IGx6bWEgY29tcHJlc3Npb24gaW4gemlwIGZpbGVzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMzk1OTogSW50cm9kdWNlIGltcG9ydGxpYi5maW5kX2xvYWRlcigpIGFuZCBkb2N1bWVudAorICBpbXAuZmluZF9tb2R1bGUvbG9hZF9tb2R1bGUgYXMgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTQwODI6IHNodXRpbC5jb3B5MigpIG5vdyBjb3BpZXMgZXh0ZW5kZWQgYXR0cmlidXRlcywgaWYgcG9zc2libGUuCisgIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM5NTk6IE1ha2UgaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLmxvYWRfbW9kdWxlKCkvZ2V0X2ZpbGVuYW1lKCkgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5sb2FkX21vZHVsZSgpIGhhdmUgdGhlaXIgc2luZ2xlCisgIGFyZ3VtZW50IGJlIG9wdGlvbmFsLiBBbGxvd3MgZm9yIHRoZSByZXBsYWNlbWVudCAoYW5kIHRodXMgZGVwcmVjYXRpb24pIG9mCisgIGltcC5sb2FkX3NvdXJjZSgpL2xvYWRfcGFja2FnZSgpL2xvYWRfY29tcGlsZWQoKS4KKworLSBJc3N1ZSAjMTM5NTk6IGltcC5nZXRfc3VmZml4ZXMoKSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm91ciBvZiB0aGUgbmV3CisgIGF0dHJpYnV0ZXMgb24gaW1wb3J0bGliLm1hY2hpbmVyeTogU09VUkNFX1NVRkZJWEVTLCBERUJVR19CWVRFQ09ERV9TVUZGSVhFUywKKyAgT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTLCBCWVRFQ09ERV9TVUZGSVhFUywgYW5kIEVYVEVOU0lPTl9TVUZGSVhFUy4gVGhpcworICBsZWQgdG8gYW4gaW5kaXJlY3QgZGVwcmVjYXRpb24gb2YgaW5zcGVjdC5nZXRtb2R1bGVpbmZvKCkuCisKKy0gSXNzdWUgIzE0NjYyOiBQcmV2ZW50IHNodXRpbCBmYWlsdXJlcyBvbiBPUyBYIHdoZW4gZGVzdGluYXRpb24gZG9lcyBub3QKKyAgc3VwcG9ydCBjaGZsYWcgb3BlcmF0aW9ucy4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTQxNTc6IEZpeCB0aW1lLnN0cnB0aW1lIGZhaWxpbmcgd2l0aG91dCBhIHllYXIgb24gRmVicnVhcnkgMjl0aC4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxNDc1MzogTWFrZSBtdWx0aXByb2Nlc3NpbmcncyBoYW5kbGluZyBvZiBuZWdhdGl2ZSB0aW1lb3V0cworICB0aGUgc2FtZSBhcyBpdCB3YXMgaW4gUHl0aG9uIDMuMi4KKworLSBJc3N1ZSAjMTQ1ODM6IEZpeCBpbXBvcnRsaWIgYnVnIHdoZW4gYSBwYWNrYWdlJ3MgX19pbml0X18ucHkgd291bGQgZmlyc3QKKyAgaW1wb3J0IG9uZSBvZiBpdHMgbW9kdWxlcyB0aGVuIHJhaXNlIGFuIGVycm9yLgorCistIElzc3VlICMxNDc0MTogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3IgRWxsaXBzaXMgKCcuLi4nKSBpbiBwYXJzZXIgbW9kdWxlLgorCistIElzc3VlICMxNDY5NzogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3Igc2V0IGRpc3BsYXlzIGFuZCBzZXQgY29tcHJlaGVuc2lvbnMgaW4KKyAgcGFyc2VyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTQ3MDE6IEZpeCBtaXNzaW5nIHN1cHBvcnQgZm9yICdyYWlzZSAuLi4gZnJvbScgaW4gcGFyc2VyIG1vZHVsZS4KKworLSBBZGQgc3VwcG9ydCBmb3IgdGltZW91dHMgdG8gdGhlIGFjcXVpcmUoKSBtZXRob2RzIG9mCisgIG11bHRpcHJvY2Vzc2luZydzIGxvY2svc2VtYXBob3JlL2NvbmRpdGlvbiBwcm94aWVzLgorCistIElzc3VlICMxMzk4OTogQWRkIHN1cHBvcnQgZm9yIHRleHQgbW9kZSB0byBnemlwLm9wZW4oKS4KKworLSBJc3N1ZSAjMTQxMjc6IFRoZSBvcy5zdGF0KCkgcmVzdWx0IG9iamVjdCBub3cgcHJvdmlkZXMgdGhyZWUgYWRkaXRpb25hbAorICBmaWVsZHM6IHN0X2N0aW1lX25zLCBzdF9tdGltZV9ucywgYW5kIHN0X2F0aW1lX25zLCBwcm92aWRpbmcgdGhvc2UgdGltZXMgYXMgYW4KKyAgaW50ZWdlciB3aXRoIG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4gIFRoZSBmdW5jdGlvbnMgb3MudXRpbWUoKSwgb3MubHV0aW1lcygpLAorICBhbmQgb3MuZnV0aW1lcygpIG5vdyBhY2NlcHQgYSBuZXcgcGFyYW1ldGVyLCBucywgd2hpY2ggYWNjZXB0cyBtdGltZSBhbmQgYXRpbWUKKyAgYXMgaW50ZWdlcnMgd2l0aCBuYW5vc2Vjb25kIHJlc29sdXRpb24uCisKKy0gSXNzdWUgIzE0MTI3IGFuZCAjMTAxNDg6IHNodXRpbC5jb3B5c3RhdCBub3cgcHJlc2VydmVzIGV4YWN0IG10aW1lIGFuZCBhdGltZQorICBvbiBmaWxlc3lzdGVtcyBwcm92aWRpbmcgbmFub3NlY29uZCByZXNvbHV0aW9uLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTU6IEJyaW5nIFRvb2xzL3BhcnNlci91bnBhcnNlLnB5IHN1cHBvcnQgdXAgdG8gZGF0ZSB3aXRoCisgIHRoZSBQeXRob24gMy4zIEdyYW1tYXIuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNDQ3MjogVXBkYXRlIC5naXRpZ25vcmUuIFBhdGNoIGJ5IE1hdGVqIENlcGwuCisKKy0gVXBncmFkZSBXaW5kb3dzIGxpYnJhcnkgdmVyc2lvbnM6IGJ6aXAgMS4wLjYsIE9wZW5TU0wgMS4wLjFjLgorCistIElzc3VlICMxNDY5MzogVW5kZXIgbm9uLVdpbmRvd3MgcGxhdGZvcm1zLCBoYXNobGliJ3MgZmFsbGJhY2sgbW9kdWxlcyBhcmUKKyAgYWx3YXlzIGNvbXBpbGVkLCBldmVuIGlmIE9wZW5TU0wgaXMgcHJlc2VudCBhdCBidWlsZCB0aW1lLgorCistIElzc3VlICMxMzIxMDogV2luZG93cyBidWlsZCBub3cgdXNlcyBWUzIwMTAsIHBvcnRlZCBmcm9tIFZTMjAwOC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDU4ODogVGhlIGxhbmd1YWdlIHJlZmVyZW5jZSBub3cgYWNjdXJhdGVseSBkb2N1bWVudHMgdGhlIFB5dGhvbiAzCisgIGNsYXNzIGRlZmluaXRpb24gcHJvY2Vzcy4gUGF0Y2ggYnkgTmljayBDb2dobGFuLgorCistIElzc3VlICMxNDk0MzogQ29ycmVjdCBhIGRlZmF1bHQgYXJndW1lbnQgdmFsdWUgZm9yIHdpbnJlZy5PcGVuS2V5CisgIGFuZCBjb3JyZWN0bHkgbGlzdCB0aGUgYXJndW1lbnQgbmFtZXMgaW4gdGhlIGZ1bmN0aW9uJ3MgZXhwbGFuYXRpb24uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDAxLU1heS0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTk6IEZpeCBjYWxsaW5nIHRoZSBjbGFzc21ldGhvZCBkZXNjcmlwdG9yIGRpcmVjdGx5LgorCistIElzc3VlICMxNDQzMzogUHJldmVudCBtc3ZjcnQgY3Jhc2ggaW4gaW50ZXJhY3RpdmUgcHJvbXB0IHdoZW4gc3RkaW4gaXMgY2xvc2VkLgorCistIElzc3VlICMxNDUyMTogTWFrZSByZXN1bHQgb2YgZmxvYXQoJ25hbicpIGFuZCBmbG9hdCgnLW5hbicpIG1vcmUgY29uc2lzdGVudAorICBhY3Jvc3MgcGxhdGZvcm1zLgorCistIElzc3VlICMxNDY0NjogX19pbXBvcnRfXygpIHNldHMgX19sb2FkZXJfXyBpZiB0aGUgbG9hZGVyIGRpZCBub3QuCisKKy0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5tZXRhX3BhdGguIElmCisgIHN5cy5tZXRhX3BhdGggaXMgZm91bmQgdG8gYmUgZW1wdHksIHJhaXNlIEltcG9ydFdhcm5pbmcuCisKKy0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5wYXRoX2hvb2tzLiBJZgorICBzeXMucGF0aF9ob29rcyBpcyBmb3VuZCB0byBiZSBlbXB0eSwgYSB3YXJuaW5nIHdpbGwgYmUgcmFpc2VkLiBOb25lIGlzIG5vdworICBpbnNlcnRlZCBpbnRvIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlIGlmIG5vIGZpbmRlciB3YXMgZGlzY292ZXJlZC4gVGhpcyBhbHNvCisgIG1lYW5zIGltcC5OdWxsSW1wb3J0ZXIgaXMgbm8gbG9uZ2VyIGltcGxpY2l0bHkgdXNlZC4KKworLSBJc3N1ZSAjMTM5MDM6IEltcGxlbWVudCBQRVAgNDEyLiBJbmRpdmlkdWFsIGRpY3Rpb25hcnkgaW5zdGFuY2VzIGNhbiBub3cgc2hhcmUKKyAgdGhlaXIga2V5cyB3aXRoIG90aGVyIGRpY3Rpb25hcmllcy4gQ2xhc3NlcyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIHRvIHNoYXJlCisgIHRoZWlyIGluc3RhbmNlIGRpY3Rpb25hcnkga2V5cyBmb3IgaW1wcm92ZWQgbWVtb3J5IGFuZCBwZXJmb3JtYW5jZS4KKworLSBJc3N1ZSAjMTE2MDMgKGFnYWluKTogU2V0dGluZyBfX3JlcHJfXyB0byBfX3N0cl9fIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3IKKyAgd2hlbiByZXByKCkgb3Igc3RyKCkgaXMgY2FsbGVkIG9uIHN1Y2ggYW4gb2JqZWN0LgorCistIElzc3VlICMxNDY1ODogRml4IGJpbmRpbmcgYSBzcGVjaWFsIG1ldGhvZCB0byBhIGJ1aWx0aW4gaW1wbGVtZW50YXRpb24gb2YgYQorICBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuCisKKy0gSXNzdWUgIzE0NjMwOiBGaXggYSBtZW1vcnkgYWNjZXNzIGJ1ZyBmb3IgaW5zdGFuY2VzIG9mIGEgc3ViY2xhc3Mgb2YgaW50CisgIHdpdGggdmFsdWUgMC4KKworLSBJc3N1ZSAjMTQzMzk6IFNwZWVkIGltcHJvdmVtZW50cyB0byBiaW4sIG9jdCBhbmQgaGV4IGZ1bmN0aW9ucy4gIFBhdGNoIGJ5CisgIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0MDk4OiBOZXcgZnVuY3Rpb25zIFB5RXJyX0dldEV4Y0luZm8gYW5kIFB5RXJyX1NldEV4Y0luZm8uCisgIFBhdGNoIGJ5IFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzE0Mzg1OiBJdCBpcyBub3cgcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIHR5cGUgZm9yIHRoZSBfX2J1aWx0aW5zX18KKyAgbmFtZXNwYWNlLCBpbnN0ZWFkIG9mIGEgZGljdC4gSXQgY2FuIGJlIHVzZWQgZm9yIHNhbmRib3hpbmcgZm9yIGV4YW1wbGUuCisgIFJhaXNlIGFsc28gYSBOYW1lRXJyb3IgaW5zdGVhZCBvZiBJbXBvcnRFcnJvciBpZiBfX2J1aWxkX2NsYXNzX18gbmFtZSBpZiBub3QKKyAgZm91bmQgaW4gX19idWlsdGluc19fLgorCistIElzc3VlICMxMjU5OTogQmUgbW9yZSBzdHJpY3QgaW4gYWNjZXB0aW5nIE5vbmUgY29tcGFyZWQgdG8gYSBmYWxzZS1saWtlCisgIG9iamVjdCBmb3IgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci4KKworLSBJc3N1ZSAjMTQ2MTI6IEZpeCBqdW1waW5nIGFyb3VuZCB3aXRoIGJsb2NrcyBieSBzZXR0aW5nIGZfbGluZW5vLgorCistIElzc3VlICMxNDU5MjogQXR0ZW1wdGluZyBhIHJlbGF0aXZlIGltcG9ydCB3L28gX19wYWNrYWdlX18gb3IgX19uYW1lX18gc2V0IGluCisgIGdsb2JhbHMgcmFpc2VzIGEgS2V5RXJyb3IuCisKKy0gSXNzdWUgIzE0NjA3OiBGaXgga2V5d29yZC1vbmx5IGFyZ3VtZW50cyB3aGljaCBzdGFydGVkIHdpdGggYGBfX2BgLgorCistIElzc3VlICMxMDg1NDogVGhlIEltcG9ydEVycm9yIHJhaXNlZCB3aGVuIGFuIGV4dGVuc2lvbiBtb2R1bGUgb24gV2luZG93cworICBmYWlscyB0byBpbXBvcnQgbm93IHVzZXMgdGhlIG5ldyBwYXRoIGFuZCBuYW1lIGF0dHJpYnV0ZXMgZnJvbQorICBJc3N1ZSAjMTU1OTU0OS4KKworLSBJc3N1ZSAjMTM4ODk6IENoZWNrIGFuZCAoaWYgbmVjZXNzYXJ5KSBzZXQgRlBVIGNvbnRyb2wgd29yZCBiZWZvcmUgY2FsbGluZworICBhbnkgb2YgdGhlIGR0b2EuYyBzdHJpbmcgPC0+IGZsb2F0IGNvbnZlcnNpb24gZnVuY3Rpb25zLCBvbiBNU1ZDIGJ1aWxkcyBvZgorICBQeXRob24uICBUaGlzIGZpeGVzIGlzc3VlcyB3aGVuIGVtYmVkZGluZyBQeXRob24gaW4gYSBEZWxwaGkgYXBwLgorCistIF9faW1wb3J0X18oKSBub3cgbWF0Y2hlcyBQRVAgMzI4IGFuZCBkb2N1bWVudGF0aW9uIGJ5IGRlZmF1bHRpbmcgJ2luZGV4JyB0byAwCisgIGluc3RlYWQgb2YgLTEgYW5kIHJlbW92aW5nIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIHZhbHVlcy4KKworLSBJc3N1ZSAjMjM3NzogTWFrZSBpbXBvcnRsaWIgdGhlIGltcGxlbWVudGF0aW9uIG9mIF9faW1wb3J0X18oKS4KKworLSBJc3N1ZSAjMTU1OTU0OTogSW1wb3J0RXJyb3Igbm93IGhhcyAnbmFtZScgYW5kICdwYXRoJyBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNldAorICB1c2luZyBrZXl3b3JkIGFyZ3VtZW50cyB0byBpdHMgY29uc3RydWN0b3IuIFRoZXkgYXJlIGN1cnJlbnRseSBub3Qgc2V0IGJ5CisgIGltcG9ydCBhcyB0aGV5IGFyZSBtZWFudCBmb3IgdXNlIGJ5IGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTQ0NzQ6IFNhdmUgYW5kIHJlc3RvcmUgZXhjZXB0aW9uIHN0YXRlIGluIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKCkKKyAgd2hpbGUgd3JpdGluZyBlcnJvciBtZXNzYWdlIGlmIHRoZSB0aHJlYWQgbGVhdmVzIGEgdW5oYW5kbGVkIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTMwMTk6IEZpeCBwb3RlbnRpYWwgcmVmZXJlbmNlIGxlYWtzIGluIGJ5dGVhcnJheS5leHRlbmQoKS4gIFBhdGNoCisgIGJ5IFN1bWFuIFNhaGEuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTQ3Njg6IG9zLnBhdGguZXhwYW5kdXNlcignfi9hJykgZG9lc24ndCB3b3JrcyBjb3JyZWN0bHkgd2hlbiBIT01FIGlzICcvJy4KKworLSBJc3N1ZSAjMTQzNzE6IFN1cHBvcnQgYnppcDIgaW4gemlwZmlsZSBtb2R1bGUuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMzE4MzogRml4IHBkYiBza2lwcGluZyBmcmFtZXMgYWZ0ZXIgaGl0dGluZyBhIGJyZWFrcG9pbnQgYW5kIHJ1bm5pbmcKKyAgc3RlcC4gIFBhdGNoIGJ5IFhhdmllciBkZSBHYXllLgorCistIElzc3VlICMxNDY5NjogRml4IHBhcnNlciBtb2R1bGUgdG8gdW5kZXJzdGFuZCAnbm9ubG9jYWwnIGRlY2xhcmF0aW9ucy4KKworLSBJc3N1ZSAjMTA5NDE6IEZpeCBpbWFwbGliLkludGVybmFsZGF0ZTJ0dXBsZSB0byBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0IG5lYXIKKyAgdGhlIERTVCB0cmFuc2l0aW9uLiAgUGF0Y2ggYnkgSm9lIFBldGVyc29uLgorCistIElzc3VlICM5MTU0OiBGaXggcGFyc2VyIG1vZHVsZSB0byB1bmRlcnN0YW5kIGZ1bmN0aW9uIGFubm90YXRpb25zLgorCistIElzc3VlICM2MDg1OiBJbiBodHRwLnNlcnZlci5weSBTaW1wbGVIVFRQU2VydmVyLmFkZHJlc3Nfc3RyaW5nIHJldHVybnMgdGhlCisgIGNsaWVudCBpcCBhZGRyZXNzIGluc3RlYWQgY2xpZW50IGhvc3RuYW1lLiBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzE0MzA5OiBEZXByZWNhdGUgdGltZS5jbG9jaygpLCB1c2UgdGltZS5wZXJmX2NvdW50ZXIoKSBvcgorICB0aW1lLnByb2Nlc3NfdGltZSgpIGluc3RlYWQuCisKKy0gSXNzdWUgIzE0NDI4OiBJbXBsZW1lbnQgdGhlIFBFUCA0MTguIEFkZCB0aW1lLmdldF9jbG9ja19pbmZvKCksCisgIHRpbWUucGVyZl9jb3VudGVyKCkgYW5kIHRpbWUucHJvY2Vzc190aW1lKCkgZnVuY3Rpb25zLCBhbmQgcmVuYW1lCisgIHRpbWUuc3RlYWR5KCkgdG8gdGltZS5tb25vdG9uaWMoKS4KKworLSBJc3N1ZSAjMTQ2NDY6IGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyKCkgbm93IHNldHMgX19sb2FkZXJfXyBhbmQKKyAgX19wYWNrYWdlX18gKHdoZW4gcG9zc2libGUpLgorCistIElzc3VlICMxNDY2NDogSXQgaXMgbm93IHBvc3NpYmxlIHRvIHVzZSBAdW5pdHRlc3Quc2tpcHtJZixVbmxlc3N9IG9uIGEKKyAgdGVzdCBjbGFzcyB0aGF0IGRvZXNuJ3QgaW5oZXJpdCBmcm9tIFRlc3RDYXNlIChpLmUuIGEgbWl4aW4pLgorCistIElzc3VlICM0ODkyOiBtdWx0aXByb2Nlc3NpbmcgQ29ubmVjdGlvbnMgY2FuIG5vdyBiZSB0cmFuc2ZlcnJlZCBvdmVyCisgIG11bHRpcHJvY2Vzc2luZyBDb25uZWN0aW9ucy4gIFBhdGNoIGJ5IFJpY2hhcmQgT3Vka2VyayAoc2J0KS4KKworLSBJc3N1ZSAjMTQxNjA6IFRhckZpbGUuZXh0cmFjdGZpbGUoKSBmYWlsZWQgdG8gcmVzb2x2ZSBzeW1ib2xpYyBsaW5rcyB3aGVuCisgIHRoZSBsaW5rcyB3ZXJlIG5vdCBsb2NhdGVkIGluIGFuIGFyY2hpdmUgc3ViZGlyZWN0b3J5LgorCistIElzc3VlICMxNDYzODogcHlkb2Mgbm93IHRyZWF0cyBub24tc3RyaW5nIF9fbmFtZV9fIHZhbHVlcyBhcyBpZiB0aGV5CisgIHdlcmUgbWlzc2luZywgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGVycm9yLgorCistIElzc3VlICMxMzY4NDogRml4IGh0dHBsaWIgdHVubmVsIGlzc3VlIG9mIGluZmluaXRlIGxvb3BzIGZvciBjZXJ0YWluIHNpdGVzCisgIHdoaWNoIHNlbmQgRU9GIHdpdGhvdXQgdHJhaWxpbmcgXHJcbi4KKworLSBJc3N1ZSAjMTQ2MDU6IEFkZCBpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIsIGltcG9ydGxpYi5tYWNoaW5lcnkuKEZpbGVGaW5kZXIsCisgIFNvdXJjZUZpbGVMb2FkZXIsIFNvdXJjZWxlc3NGaWxlTG9hZGVyLCBFeHRlbnNpb25GaWxlTG9hZGVyKS4KKworLSBJc3N1ZSAjMTM5NTk6IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgpL3NvdXJjZV9mcm9tX2NhY2hlKCkgbm93IGZvbGxvdworICBvcy5wYXRoLmpvaW4oKS9zcGxpdCgpIHNlbWFudGljcyBmb3IgcGF0aCBtYW5pcHVsYXRpb24gaW5zdGVhZCBvZiBpdHMgcHJpb3IsCisgIGN1c3RvbSBzZW1hbnRpY3Mgb2YgY2FyaW5nIHRoZSByaWdodC1tb3N0IHBhdGggc2VwYXJhdG9yIGZvcndhcmQgaW4gcGF0aAorICBqb2luaW5nLgorCistIElzc3VlICMyMTkzOiBBbGxvdyAiOiIgY2hhcmFjdGVyIGluIENvb2tpZSBOQU1FIHZhbHVlcy4KKworLSBJc3N1ZSAjMTQ2Mjk6IHRva2VuaXplci5kZXRlY3RfZW5jb2Rpbmcgd2lsbCBzcGVjaWZ5IHRoZSBmaWxlbmFtZSBpbiB0aGUKKyAgU3ludGF4RXJyb3IgZXhjZXB0aW9uIGlmIGZvdW5kIGF0IHJlYWRsaW5lLl9fc2VsZl9fLm5hbWUuCisKKy0gSXNzdWUgIzE0NjI5OiBSYWlzZSBTeW50YXhFcnJvciBpbiB0b2tlbml6ZXIuZGV0ZWN0X2VuY29kaW5nIGlmIHRoZQorICBmaXJzdCB0d28gbGluZXMgaGF2ZSBub24tVVRGLTggY2hhcmFjdGVycyB3aXRob3V0IGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uLgorCistIElzc3VlICMxNDMwODogRml4IGFuIGV4Y2VwdGlvbiB3aGVuIGEgImR1bW15IiB0aHJlYWQgaXMgaW4gdGhlIHRocmVhZGluZworICBtb2R1bGUncyBhY3RpdmUgbGlzdCBhZnRlciBhIGZvcmsoKS4KKworLSBJc3N1ZSAjMTE3NTA6IFRoZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgc2NhdHRlcmVkIGluIHRoZSBfc3VicHJvY2VzcyBhbmQKKyAgX211bHRpcHJvY2Vzc2luZy53aW4zMiBtb2R1bGVzIG5vdyBsaXZlIGluIGEgc2luZ2xlIG1vZHVsZSAiX3dpbmFwaSIuCisgIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQwODc6IG11bHRpcHJvY2Vzc2luZzogYWRkIENvbmRpdGlvbi53YWl0X2ZvcigpLiBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0NTM4OiBIVE1MUGFyc2VyIGNhbiBub3cgcGFyc2UgY29ycmVjdGx5IHN0YXJ0IHRhZ3MgdGhhdCBjb250YWluCisgIGEgYmFyZSAnLycuCisKKy0gSXNzdWUgIzE0NDUyOiBTeXNMb2dIYW5kbGVyIG5vIGxvbmdlciBpbnNlcnRzIGEgVVRGLTggQk9NIGludG8gdGhlIG1lc3NhZ2UuCisKKy0gSXNzdWUgIzE0Mzg2OiBFeHBvc2UgdGhlIGRpY3RfcHJveHkgaW50ZXJuYWwgdHlwZSBhcyB0eXBlcy5NYXBwaW5nUHJveHlUeXBlLgorCistIElzc3VlICMxMzk1OTogTWFrZSBpbXAucmVsb2FkKCkgYWx3YXlzIHVzZSBhIG1vZHVsZSdzIF9fbG9hZGVyX18gdG8gcGVyZm9ybQorICB0aGUgcmVsb2FkLgorCistIElzc3VlICMxMzk1OTogQWRkIGltcC5weSBhbmQgcmVuYW1lIHRoZSBidWlsdC1pbiBtb2R1bGUgdG8gX2ltcCwgYWxsb3dpbmcgZm9yCisgIHJlLWltcGxlbWVudGluZyBwYXJ0cyBvZiB0aGUgbW9kdWxlIGluIHB1cmUgUHl0aG9uLgorCistIElzc3VlICMxMzQ5NjogRml4IHBvdGVudGlhbCBvdmVyZmxvdyBpbiBiaXNlY3QuYmlzZWN0IGFsZ29yaXRobSB3aGVuIGFwcGxpZWQKKyAgdG8gYSBjb2xsZWN0aW9uIG9mIHNpemUgPiBzeXMubWF4c2l6ZSAvIDIuCisKKy0gSGF2ZSBpbXBvcnRsaWIgdGFrZSBhZHZhbnRhZ2Ugb2YgSW1wb3J0RXJyb3IncyBuZXcgJ25hbWUnIGFuZCAncGF0aCcKKyAgYXR0cmlidXRlcy4KKworLSBJc3N1ZSAjMTQzOTk6IHppcGZpbGUgbm93IHJlY29nbml6ZXMgdGhhdCB0aGUgYXJjaGl2ZSBoYXMgYmVlbiBtb2RpZmllZCBldmVuCisgIGlmIG9ubHkgdGhlIGNvbW1lbnQgaXMgY2hhbmdlZC4gIEluIGFkZGl0aW9uLCB0aGUgVHlwZUVycm9yIHRoYXQgcmVzdWx0cyBmcm9tCisgIHRyeWluZyB0byBzZXQgYSBub24tYmluYXJ5IHZhbHVlIGFzIGEgY29tbWVudCBpcyBub3cgcmFpc2VkIGF0IHRoZSB0aW1lCisgIHRoZSBjb21tZW50IGlzIHNldCByYXRoZXIgdGhhbiBhdCB0aGUgdGltZSB0aGUgemlwZmlsZSBpcyB3cml0dGVuLgorCistIHRyYWNlLkNvdmVyYWdlUmVzdWx0cy5pc19pZ25vcmVkX2ZpbGVuYW1lKCkgbm93IGlnbm9yZXMgYW55IG5hbWUgdGhhdCBzdGFydHMKKyAgd2l0aCAiPCIgYW5kIGVuZHMgd2l0aCAiPiIgaW5zdGVhZCBvZiBzcGVjaWFsLWNhc2luZyAiPHN0cmluZz4iIGFuZAorICAiPGRvY3Rlc3QgIi4KKworLSBJc3N1ZSAjMTI1Mzc6IFRoZSBtYWlsYm94IG1vZHVsZSBubyBsb25nZXIgZGVwZW5kcyBvbiBrbm93bGVkZ2Ugb2YgaW50ZXJuYWwKKyAgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgZW1haWwgcGFja2FnZSBNZXNzYWdlIG9iamVjdC4KKworLSBJc3N1ZSAjNzk3ODogc29ja2V0c2VydmVyIG5vdyByZXN0YXJ0cyB0aGUgc2VsZWN0KCkgY2FsbCB3aGVuIEVJTlRSIGlzCisgIHJldHVybmVkLiAgVGhpcyBhdm9pZHMgY3Jhc2hpbmcgdGhlIHNlcnZlciBsb29wIHdoZW4gYSBzaWduYWwgaXMgcmVjZWl2ZWQuCisgIFBhdGNoIGJ5IEplcnp5IEtvemVyYS4KKworLSBJc3N1ZSAjMTQ1MjI6IEF2b2lkIGR1cGxpY2F0aW5nIHNvY2tldCBoYW5kbGVzIGluIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLgorICBQYXRjaCBieSBzYnQuCisKKy0gRG9uJ3QgUHlfREVDUkVGIE5VTEwgdmFyaWFibGUgaW4gaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlci4KKworLSBJc3N1ZSAjODUxNTogU2V0IF9fZmlsZV9fIHdoZW4gcnVuIGZpbGUgaW4gSURMRS4KKyAgSW5pdGlhbCBwYXRjaCBieSBCcnVjZSBGcmVkZXJpa3Nlbi4KKworLSBJc3N1ZSAjMTQ0OTY6IEZpeCB3cm9uZyBuYW1lIGluIGlkbGVsaWIvdGFiYmVkcGFnZXMucHkuCisgIFBhdGNoIGJ5IFBvcGEgQ2xhdWRpdS4KKworLSBJc3N1ZSAjMzAzMzogQWRkIGRpc3BsYXlvZiBwYXJhbWV0ZXIgdG8gdGtpbnRlciBmb250LiBQYXRjaCBieSBHdWlsaGVybWUgUG9sby4KKworLSBJc3N1ZSAjMTQ0ODI6IFJhaXNlIGEgVmFsdWVFcnJvciwgbm90IGEgTmFtZUVycm9yLCB3aGVuIHRyeWluZyB0byBjcmVhdGUKKyAgYSBtdWx0aXByb2Nlc3NpbmcgQ2xpZW50IG9yIExpc3RlbmVyIHdpdGggYW4gQUZfVU5JWCB0eXBlIGFkZHJlc3MgdW5kZXIKKyAgV2luZG93cy4gIFBhdGNoIGJ5IFBvcGEgQ2xhdWRpdS4KKworLSBJc3N1ZSAjODAyMzEwOiBHZW5lcmF0ZSBhbHdheXMgdW5pcXVlIHRraW50ZXIgZm9udCBuYW1lcyBpZiBub3QgZGlyZWN0bHkgcGFzc2VkLgorCistIElzc3VlICMxNDE1MTogUmFpc2UgYSBWYWx1ZUVycm9yLCBub3QgYSBOYW1lRXJyb3IsIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZQorICBhIG11bHRpcHJvY2Vzc2luZyBDbGllbnQgb3IgTGlzdGVuZXIgd2l0aCBhbiBBRl9QSVBFIHR5cGUgYWRkcmVzcyB1bmRlcgorICBub24tV2luZG93cyBwbGF0Zm9ybXMuICBQYXRjaCBieSBQb3BhIENsYXVkaXUuCisKKy0gSXNzdWUgIzE0NDkzOiBVc2UgZ3Zmcy1vcGVuIG9yIHhkZy1vcGVuIGluIHdlYmJyb3dzZXIuCisKK0J1aWxkCistLS0tLQorCistICJtYWtlIHRvdWNoIiB3aWxsIG5vdyB0b3VjaCBnZW5lcmF0ZWQgZmlsZXMgdGhhdCBhcmUgY2hlY2tlZCBpbnRvIE1lcmN1cmlhbCwKKyAgYWZ0ZXIgYSAiaGcgdXBkYXRlIiB3aGljaCBmYWlsZWQgdG8gYnJpbmcgdGhlIHRpbWVzdGFtcHMgaW50byB0aGUgcmlnaHQgb3JkZXIuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxNDAyNjogSW4gdGVzdF9jbWRfbGluZV9zY3JpcHQsIGNoZWNrIHRoYXQgc3lzLmFyZ3YgaXMgcG9wdWxhdGVkCisgIGNvcnJlY3RseSBmb3IgdGhlIHZhcmlvdXMgaW52b2NhdGlvbiBhcHByb2FjaGVzIChQYXRjaCBieSBKYXNvbiBZZW8pCisKKy0gSXNzdWUgIzE0MDMyOiBGaXggaW5jb3JyZWN0IHZhcmlhYmxlIG5hbWUgaW4gdGVzdF9jbWRfbGluZV9zY3JpcHQgZGVidWdnaW5nCisgIG1lc3NhZ2UgKFBhdGNoIGJ5IEphc29uIFllbykKKworLSBJc3N1ZSAjMTQ1ODk6IFVwZGF0ZSBjZXJ0aWZpY2F0ZSBjaGFpbiBmb3Igc2hhMjU2LnRicy1pbnRlcm5ldC5jb20sIGZpeGluZworICBhIHRlc3QgZmFpbHVyZSBpbiB0ZXN0X3NzbC4KKworLSBJc3N1ZSAjMTQzNTU6IFJlZ3J0ZXN0IG5vdyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgdW5pdHRlc3QgdGVzdCBsb2FkaW5nLCBhbmQKKyAgd2lsbCB1c2UgaXQgaWYgYSB0ZXN0IGZpbGUgY29udGFpbnMgbm8gYHRlc3RfbWFpbmAgbWV0aG9kLgorCitUb29scyAvIERlbW9zCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzM1NjE6IFRoZSBXaW5kb3dzIGluc3RhbGxlciBub3cgaGFzIGFuIG9wdGlvbiwgb2ZmIGJ5IGRlZmF1bHQsIGZvcgorICBwbGFjaW5nIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uIGludG8gdGhlIHN5c3RlbSAiUGF0aCIgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKy0gSXNzdWUgIzEzMTY1OiBzdHJpbmdiZW5jaCBpcyBub3cgYXZhaWxhYmxlIGluIHRoZSBUb29scy9zdHJpbmdiZW5jaCBmb2xkZXIuCisgIEl0IHVzZWQgdG8gbGl2ZSBpbiBpdHMgb3duIFNWTiBwcm9qZWN0LgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwMS1BcHItMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE2ODMzNjg6IG9iamVjdC5fX25ld19fIGFuZCBvYmplY3QuX19pbml0X18gcmFpc2UgYSBUeXBlRXJyb3IgaWYgdGhleQorICBhcmUgcGFzc2VkIGFyZ3VtZW50cyBhbmQgdGhlaXIgY29tcGxlbWVudGFyeSBtZXRob2QgaXMgbm90IG92ZXJyaWRkZW4uCisKKy0gSXNzdWUgIzE0Mzc4OiBGaXggY29tcGlsaW5nIGFzdC5JbXBvcnRGcm9tIG5vZGVzIHdpdGggYSAiX19mdXR1cmVfXyIgc3RyaW5nIGFzCisgIHRoZSBtb2R1bGUgbmFtZSB0aGF0IHdhcyBub3QgaW50ZXJuZWQuCisKKy0gSXNzdWUgIzE0MzMxOiBVc2Ugc2lnbmlmaWNhbnRseSBsZXNzIHN0YWNrIHNwYWNlIHdoZW4gaW1wb3J0aW5nIG1vZHVsZXMgYnkKKyAgYWxsb2NhdGluZyBwYXRoIGJ1ZmZlcnMgb24gdGhlIGhlYXAgaW5zdGVhZCBvZiB0aGUgc3RhY2suCisKKy0gSXNzdWUgIzE0MzM0OiBQcmV2ZW50IGluIGEgc2VnZmF1bHQgaW4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fIHdoZW4gaXQgd2FzIG5vdAorICBwYXNzZWQgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTQ2OTYyOTogQWxsb3cgY3ljbGVzIHRocm91Z2ggYW4gb2JqZWN0J3MgX19kaWN0X18gc2xvdCB0byBiZQorICBjb2xsZWN0ZWQuIChGb3IgZXhhbXBsZSBpZiBgYHguX19kaWN0X18gaXMgeGBgKS4KKworLSBJc3N1ZSAjMTQyMDU6IGRpY3QgbG9va3VwIHJhaXNlcyBhIFJ1bnRpbWVFcnJvciBpZiB0aGUgZGljdCBpcyBtb2RpZmllZAorICBkdXJpbmcgYSBsb29rdXAuCisKKy0gSXNzdWUgIzE0MjIwOiBXaGVuIGEgZ2VuZXJhdG9yIGlzIGRlbGVnYXRpbmcgdG8gYW5vdGhlciBpdGVyYXRvciB3aXRoIHRoZQorICB5aWVsZCBmcm9tIHN5bnRheCwgaXQgbmVlZHMgdG8gaGF2ZSBpdHMgYGBnaV9ydW5uaW5nYGAgZmxhZyBzZXQgdG8gVHJ1ZS4KKworLSBJc3N1ZSAjMTQ0MzU6IFJlbW92ZSBkZWRpY2F0ZWQgYmxvY2sgYWxsb2NhdG9yIGZyb20gZmxvYXRvYmplY3QuYyBhbmQgcmVseQorICBvbiB0aGUgUHlPYmplY3RfTWFsbG9jKCkgYXBpIGxpa2UgYWxsIG90aGVyIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0NDcxOiBGaXggYSBwb3NzaWJsZSBidWZmZXIgb3ZlcnJ1biBpbiB0aGUgd2lucmVnIG1vZHVsZS4KKworLSBJc3N1ZSAjMTQyODg6IEFsbG93IHRoZSBzZXJpYWxpemF0aW9uIG9mIGJ1aWx0aW4gaXRlcmF0b3JzCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTQzMDA6IFVuZGVyIFdpbmRvd3MsIHNvY2tldHMgY3JlYXRlZCB1c2luZyBzb2NrZXQuZHVwKCkgbm93IGFsbG93CisgIG92ZXJsYXBwZWQgSS9PLiAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxMzg3Mjogc29ja2V0LmRldGFjaCgpIG5vdyBtYXJrcyB0aGUgc29ja2V0IGNsb3NlZCAoYXMgbWlycm9yZWQKKyAgaW4gdGhlIHNvY2tldCByZXByKCkpLiAgUGF0Y2ggYnkgTWF0dCBKb2luZXIuCisKKy0gSXNzdWUgIzE0NDA2OiBGaXggYSByYWNlIGNvbmRpdGlvbiB3aGVuIHVzaW5nIGBgY29uY3VycmVudC5mdXR1cmVzLndhaXQoCisgIHJldHVybl93aGVuPUFMTF9DT01QTEVURUQpYGAuICBQYXRjaCBieSBNYXR0IEpvaW5lci4KKworLSBJc3N1ZSAjNTEzNjogZGVwcmVjYXRlIG9sZCwgdW51c2VkIGZ1bmN0aW9ucyBmcm9tIHRraW50ZXIuCisKKy0gSXNzdWUgIzE0NDA5OiBJRExFIG5vdyBwcm9wZXJseSBleGVjdXRlcyBjb21tYW5kcyBpbiB0aGUgU2hlbGwgd2luZG93CisgIHdoZW4gaXQgY2Fubm90IHJlYWQgdGhlIG5vcm1hbCBjb25maWcgZmlsZXMgb24gc3RhcnR1cCBhbmQKKyAgaGFzIHRvIHVzZSB0aGUgYnVpbHQtaW4gZGVmYXVsdCBrZXkgYmluZGluZ3MuCisgIFRoZXJlIHdhcyBwcmV2aW91c2x5IGEgYnVnIGluIG9uZSBvZiB0aGUgZGVmYXVsdHMuCisKKy0gSXNzdWUgIzE0NDE2OiBzeXNsb2cgbm93IGRlZmluZXMgdGhlIExPR19PREVMQVkgYW5kIExPR19BVVRIUFJJViBjb25zdGFudHMKKyAgaWYgdGhleSBhcmUgZGVmaW5lZCBpbiA8c3lzbG9nLmg+LgorCistIElETEUgY2FuIGJlIGxhdW5jaGVkIGFzIHB5dGhvbiAtbSBpZGxlbGliCisKKy0gSXNzdWUgIzE0Mjk1OiBBZGQgdW5pdHRlc3QubW9jaworCistIElzc3VlICM3NjUyOiBBZGQgLS13aXRoLXN5c3RlbS1saWJtcGRlYyBvcHRpb24gdG8gY29uZmlndXJlIGZvciBsaW5raW5nCisgIHRoZSBfZGVjaW1hbCBtb2R1bGUgYWdhaW5zdCBhbiBpbnN0YWxsZWQgbGlibXBkZWMuCisKKy0gSXNzdWUgIzE0MzgwOiBNSU1FVGV4dCBub3cgZGVmYXVsdHMgdG8gdXRmLTggd2hlbiBwYXNzZWQgbm9uLUFTQ0lJIHVuaWNvZGUKKyAgd2l0aCBubyBjaGFyc2V0IHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTAzNDA6IGFzeW5jb3JlIC0gcHJvcGVybHkgaGFuZGxlIEVJTlZBTCBpbiBkaXNwYXRjaGVyIGNvbnN0cnVjdG9yIG9uCisgIE9TWDsgYXZvaWQgdG8gY2FsbCBoYW5kbGVfY29ubmVjdCBpbiBjYXNlIG9mIGEgZGlzY29ubmVjdGVkIHNvY2tldCB3aGljaAorICB3YXMgbm90IG1lYW50IHRvIGNvbm5lY3QuCisKKy0gSXNzdWUgIzE0MjA0OiBUaGUgc3NsIG1vZHVsZSBub3cgaGFzIHN1cHBvcnQgZm9yIHRoZSBOZXh0IFByb3RvY29sCisgIE5lZ290aWF0aW9uIGV4dGVuc2lvbiwgaWYgYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIE9wZW5TU0wgbGlicmFyeS4KKyAgUGF0Y2ggYnkgQ29saW4gTWFyYy4KKworLSBJc3N1ZSAjMzAzNTogVW51c2VkIGZ1bmN0aW9ucyBmcm9tIHRraW50ZXIgYXJlIG1hcmtlZCBhcyBwZW5kaW5nIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzEyNzU3OiBGaXggdGhlIHNraXBwaW5nIG9mIGRvY3Rlc3RzIHdoZW4gcHl0aG9uIGlzIHJ1biB3aXRoIC1PTyBzbworICB0aGF0IGl0IHdvcmtzIGluIHVuaXR0ZXN0J3MgdmVyYm9zZSBtb2RlIGFzIHdlbGwgYXMgbm9uLXZlcmJvc2UgbW9kZS4KKworLSBJc3N1ZSAjNzY1MjogSW50ZWdyYXRlIHRoZSBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGxpYm1wZGVjIGxpYnJhcnkgdG8gc3BlZWQKKyAgdXAgdGhlIGRlY2ltYWwgbW9kdWxlLiBQZXJmb3JtYW5jZSBnYWlucyBvZiB0aGUgbmV3IEMgaW1wbGVtZW50YXRpb24gYXJlCisgIGJldHdlZW4gMTB4IGFuZCAxMDB4LCBkZXBlbmRpbmcgb24gdGhlIGFwcGxpY2F0aW9uLgorCistIElzc3VlICMzNTczOiBJRExFIGhhbmdzIHdoZW4gcGFzc2luZyBpbnZhbGlkIGNvbW1hbmQgbGluZSBhcmdzCisgIChkaXJlY3RvcnkoaWVzKSBpbnN0ZWFkIG9mIGZpbGUocykpIChQYXRjaCBieSBHdWlsaGVybWUgUG9sbykKKworLSBJc3N1ZSAjMTQyNjk6IFNNVFBEIG5vdyBjb25mb3JtcyB0byB0aGUgUkZDIGFuZCByZXF1aXJlcyBhIEhFTE8gY29tbWFuZAorICBiZWZvcmUgTUFJTCwgUkNQVCwgb3IgREFUQS4KKworLSBJc3N1ZSAjMTM2OTQ6IGFzeW5jaHJvbm91cyBjb25uZWN0IGluIGFzeW5jb3JlLmRpc3BhdGNoZXIgZG9lcyBub3Qgc2V0IGFkZHIKKyAgYXR0cmlidXRlLgorCistIElzc3VlICMxNDM0NDogZml4ZWQgdGhlIHJlcHIgb2YgZW1haWwucG9saWN5IG9iamVjdHMuCisKKy0gSXNzdWUgIzExNjg2OiBBZGRlZCBtaXNzaW5nIGVudHJpZXMgdG8gZW1haWwgcGFja2FnZSBfX2FsbF9fIGxpc3RzCisgIChtb3N0bHkgdGhlIG5ldyBCeXRlcyBjbGFzc2VzKS4KKworLSBJc3N1ZSAjMTQzMzU6IG11bHRpcHJvY2Vzc2luZydzIGN1c3RvbSBQaWNrbGVyIHN1YmNsYXNzIG5vdyBpbmhlcml0cyBmcm9tCisgIHRoZSBDLWFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uLiAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxMDQ4NDogRml4IHRoZSBDR0lIVFRQU2VydmVyJ3MgUEFUSF9JTkZPIGhhbmRsaW5nIHByb2JsZW0uCisKKy0gSXNzdWUgIzExMTk5OiBGaXggdGhlIHdpdGggdXJsbGliIHdoaWNoIGhhbmdzIG9uIHBhcnRpY3VsYXIgZnRwIHVybHMuCisKKy0gSW1wcm92ZSB0aGUgbWVtb3J5IHV0aWxpemF0aW9uIGFuZCBzcGVlZCBvZiBmdW5jdG9vbHMubHJ1X2NhY2hlLgorCistIElzc3VlICMxNDIyMjogVXNlIHRoZSBuZXcgdGltZS5zdGVhZHkoKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRpbWUudGltZSgpIGZvcgorICB0aW1lb3V0IGluIHF1ZXVlIGFuZCB0aHJlYWRpbmcgbW9kdWxlcyB0byBub3QgYmUgYWZmZWN0ZWQgb2Ygc3lzdGVtIHRpbWUKKyAgdXBkYXRlLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIGxpYjJ0bzMucHl0cmVlLkJhc2UuZ2V0X3ByZWZpeC9zZXRfcHJlZml4LgorCistIElzc3VlICMxNDIzNDogQ1ZFLTIwMTItMDg3NjogUmFuZG9taXplIGhhc2hlcyBvZiB4bWwgYXR0cmlidXRlcyBpbiB0aGUgaGFzaAorICB0YWJsZSBpbnRlcm5hbCB0byB0aGUgcHlleHBhdCBtb2R1bGUncyBjb3B5IG9mIHRoZSBleHBhdCBsaWJyYXJ5IHRvIGF2b2lkIGEKKyAgZGVuaWFsIG9mIHNlcnZpY2UgZHVlIHRvIGhhc2ggY29sbGlzaW9ucy4gIFBhdGNoIGJ5IERhdmlkIE1hbGNvbG0gd2l0aCBzb21lCisgIG1vZGlmaWNhdGlvbnMgYnkgdGhlIGV4cGF0IHByb2plY3QuCisKKy0gSXNzdWUgIzE0MjAwOiBJZGxlIHNoZWxsIGNyYXNoIG9uIHByaW50aW5nIG5vbi1CTVAgdW5pY29kZSBjaGFyYWN0ZXIuCisKKy0gSXNzdWUgIzEyODE4OiBmb3JtYXQgYWRkcmVzcyBubyBsb25nZXIgbmVlZGxlc3NseSBcIGVzY2FwZXMgKClzIGluIG5hbWVzIHdoZW4KKyAgdGhlIG5hbWUgZW5kcyB1cCBiZWluZyBxdW90ZWQuCisKKy0gSXNzdWUgIzE0MDYyOiBCeXRlc0dlbmVyYXRvciBub3cgY29ycmVjdGx5IGZvbGRzIEhlYWRlciBvYmplY3RzLAorICBpbmNsdWRpbmcgdXNpbmcgbGluZXNlcCB3aGVuIGZvbGRpbmcuCisKKy0gSXNzdWUgIzEzODM5OiBXaGVuIGludm9rZWQgb24gdGhlIGNvbW1hbmQtbGluZSwgdGhlIHBzdGF0cyBtb2R1bGUgbm93CisgIGFjY2VwdHMgc2V2ZXJhbCBmaWxlbmFtZXMgb2YgcHJvZmlsZSBzdGF0IGZpbGVzIGFuZCBtZXJnZXMgdGhlbSBhbGwuCisgIFBhdGNoIGJ5IE1hdHQgSm9pbmVyLgorCistIElzc3VlICMxNDI5MTogRW1haWwgbm93IGRlZmF1bHRzIHRvIHV0Zi04IGZvciBub24tQVNDSUkgdW5pY29kZSBoZWFkZXJzCisgIGluc3RlYWQgb2YgcmFpc2luZyBhbiBlcnJvci4gIFRoaXMgZml4ZXMgYSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIDIuNy4KKworLSBJc3N1ZSAjOTg5NzEyOiBTdXBwb3J0IHVzaW5nIFRrIHdpdGhvdXQgYSBtYWlubG9vcC4KKworLSBJc3N1ZSAjNTIxOTogUHJldmVudCBldmVudCBoYW5kbGVyIGNhc2NhZGUgaW4gSURMRS4KKworLSBJc3N1ZSAjMzgzNTogUmVmdXNlIHRvIHVzZSB1bnRocmVhZGVkIFRjbCBpbiB0aHJlYWRlZCBQeXRob24uCisKKy0gSXNzdWUgIzI4NDM6IEFkZCBuZXcgVGsgQVBJIHRvIFRraW50ZXIuCisKKy0gSXNzdWUgIzE0MTg0OiBJbmNyZWFzZSB0aGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciBzZWNvbmRhcnkgdGhyZWFkcyBvbgorICBNYWMgT1MgWCB0byBhdm9pZCBpbnRlcnByZXRlciBjcmFzaGVzIHdoZW4gdXNpbmcgdGhyZWFkcyBvbiAxMC43LgorCistIElzc3VlICMxNDE4MDogZGF0ZXRpbWUuZGF0ZS5mcm9tdGltZXN0YW1wKCksCisgIGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoKSBhbmQgZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgpCisgIG5vdyByYWlzZSBhbiBPU0Vycm9yIGluc3RlYWQgb2YgVmFsdWVFcnJvciBpZiBsb2NhbHRpbWUoKSBvciBnbXRpbWUoKSBmYWlsZWQuCisKKy0gSXNzdWUgIzE0MTgwOiB0aW1lLmN0aW1lKCksIGdtdGltZSgpLCB0aW1lLmxvY2FsdGltZSgpLAorICBkYXRldGltZS5kYXRlLmZyb210aW1lc3RhbXAoKSwgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgpIGFuZAorICBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKCkgbm93IHJhaXNlcyBhbiBPdmVyZmxvd0Vycm9yLCBpbnN0ZWFkIG9mCisgIGEgVmFsdWVFcnJvciwgaWYgdGhlIHRpbWVzdGFtcCBkb2VzIG5vdCBmaXQgaW4gdGltZV90LgorCistIElzc3VlICMxNDE4MDogZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgpIGFuZAorICBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKCkgbm93IHJvdW5kIG1pY3Jvc2Vjb25kcyB0b3dhcmRzIHplcm8KKyAgaW5zdGVhZCBvZiByb3VuZGluZyB0byBuZWFyZXN0IHdpdGggdGllcyBnb2luZyBhd2F5IGZyb20gemVyby4KKworLSBJc3N1ZSAjMTA1NDM6IEZpeCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSB3aXRoIEp5dGhvbiBieXRlY29kZSBmaWxlcy4KKworLSBJc3N1ZSAjMTE3ODg2MzogU2VwYXJhdGUgaW5pdGlhbGlzYXRpb24gZnJvbSBzZXR0aW5nIHdoZW4gaW5pdGlhbGl6aW5nCisgIFRraW50ZXIuVmFyaWFibGVzOyBoYXJtb25pemUgZXhjZXB0aW9ucyB0byBWYWx1ZUVycm9yOyBvbmx5IGRlbGV0ZSB2YXJpYWJsZXMKKyAgdGhhdCBoYXZlIG5vdCBiZWVuIGRlbGV0ZWQ7IGFzc2VydCB0aGF0IHZhcmlhYmxlIG5hbWVzIGFyZSBzdHJpbmdzLgorCistIElzc3VlICMxNDEwNDogSW1wbGVtZW50IHRpbWUubW9ub3RvbmljKCkgb24gTWFjIE9TIFgsIHBhdGNoIHdyaXR0ZW4gYnkKKyAgTmljaG9sYXMgUmlsZXkuCisKKy0gSXNzdWUgIzEzMzk0OiB0aGUgYWlmYyBtb2R1bGUgbm93IHVzZXMgd2FybmluZ3Mud2FybigpIHRvIHNpZ25hbCB3YXJuaW5ncy4KKworLSBJc3N1ZSAjMTQyNTI6IEZpeCBzdWJwcm9jZXNzLlBvcGVuLnRlcm1pbmF0ZSgpIHRvIG5vdCByYWlzZSBhbiBlcnJvciB1bmRlcgorICBXaW5kb3dzIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGFscmVhZHkgZXhpdGVkLgorCistIElzc3VlICMxNDIyMzogY3Vyc2VzLmFkZGNoKCkgaXMgbm8gbW9yZSBsaW1pdGVkIHRvIHRoZSByYW5nZSAwLTI1NSB3aGVuIHRoZQorICBQeXRob24gY3Vyc2VzIGlzIG5vdCBsaW5rZWQgdG8gbGlibmN1cnNlc3cuIEl0IHdhcyBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZAorICBpbiBQeXRob24gMy4zYTEuCisKKy0gSXNzdWUgIzE0MTY4OiBDaGVjayBmb3IgcHJlc2VuY2Ugb2YgRWxlbWVudC5fYXR0cnMgaW4gbWluaWRvbSBiZWZvcmUKKyAgYWNjZXNzaW5nIGl0LgorCistIElzc3VlICMxMjMyODogRml4IG11bHRpcHJvY2Vzc2luZydzIHVzZSBvZiBvdmVybGFwcGVkIEkvTyBvbiBXaW5kb3dzLgorICBBbHNvLCBhZGQgYSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi53YWl0KHJsaXN0LCB0aW1lb3V0PU5vbmUpIGZ1bmN0aW9uCisgIGZvciBwb2xsaW5nIG11bHRpcGxlIG9iamVjdHMgYXQgb25jZS4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQwMDc6IEFjY2VwdCBpbmNvbXBsZXRlIFRyZWVCdWlsZGVyIG9iamVjdHMgKG1pc3Npbmcgc3RhcnQsIGVuZCwKKyAgZGF0YSBvciBjbG9zZSBtZXRob2QpIGZvciB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIGFzIHdlbGwuCisgIERyb3AgdGhlIG5vLW9wIFRyZWVCdWlsZGVyKCkueG1sKCkgbWV0aG9kIGZyb20gdGhlIEMgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzE0MjEwOiBwZGIgbm93IGhhcyB0YWItY29tcGxldGlvbiBub3Qgb25seSBmb3IgY29tbWFuZCBuYW1lcywgYnV0CisgIGFsc28gZm9yIHRoZWlyIGFyZ3VtZW50cywgd2hlcmV2ZXIgcG9zc2libGUuCisKKy0gSXNzdWUgIzE0MzEwOiBTb2NrZXRzIGNhbiBub3cgYmUgd2l0aCBvdGhlciBwcm9jZXNzZXMgb24gV2luZG93cyB1c2luZworICB0aGUgYXBpIHNvY2tldC5zb2NrZXQuc2hhcmUoKSBhbmQgc29ja2V0LmZyb21zaGFyZSgpLgorCistIElzc3VlICMxMDU3NjogVGhlIGdjIG1vZHVsZSBub3cgaGFzIGEgJ2NhbGxiYWNrcycgbWVtYmVyIHRoYXQgd2lsbCBnZXQKKyAgY2FsbGVkIHdoZW4gZ2FyYmFnZSBjb2xsZWN0aW9uIHRha2VzIHBsYWNlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTQ1NTc6IEZpeCBleHRlbnNpb25zIGJ1aWxkIG9uIEhQLVVYLiBQYXRjaCBieSBBZGkgUm9pYmFuLgorCistIElzc3VlICMxNDM4NzogRG8gbm90IGluY2x1ZGUgYWNjdS5oIGZyb20gUHl0aG9uLmguCisKKy0gSXNzdWUgIzE0MzU5OiBPbmx5IHVzZSBPX0NMT0VYRUMgaW4gX3Bvc2l4bW9kdWxlLmMgaWYgaXQgaXMgZGVmaW5lZC4KKyAgQmFzZWQgb24gcGF0Y2ggZnJvbSBIZXJ2w6kgQ29hdGFuaGF5LgorCistIElzc3VlICMxNDMyMTogRG8gbm90IHJ1biBwZ2VuIGR1cmluZyB0aGUgYnVpbGQgaWYgZmlsZXMgYXJlIHVwIHRvIGRhdGUuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQwMzQ6IGFkZGVkIHRoZSBhcmdwYXJzZSB0dXRvcmlhbC4KKworLSBJc3N1ZSAjMTQzMjQ6IEZpeCBjb25maWd1cmUgdGVzdHMgZm9yIGNyb3NzIGJ1aWxkcy4KKworLSBJc3N1ZSAjMTQzMjc6IENhbGwgQUNfQ0FOT05JQ0FMX0hPU1QgaW4gY29uZmlndXJlLmFjIGFuZCBjaGVjayBpbgorICBjb25maWcue2d1ZXNzLHN1Yn0uIERvbid0IHVzZSB1bmFtZSBjYWxscyBmb3IgY3Jvc3MgYnVpbGRzLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjOTA0MTogQW4gaXNzdWUgaW4gY3R5cGVzLmNfbG9uZ2RvdWJsZSwgY3R5cGVzLmNfZG91YmxlLCBhbmQKKyAgY3R5cGVzLmNfZmxvYXQgdGhhdCBjYXVzZWQgYW4gaW5jb3JyZWN0IGV4Y2VwdGlvbiB0byBiZSByZXR1cm5lZCBpbiB0aGUKKyAgY2FzZSBvZiBvdmVyZmxvdyBoYXMgYmVlbiBmaXhlZC4KKworLSBJc3N1ZSAjMTQyMTI6IFRoZSByZSBtb2R1bGUgZGlkbid0IHJldGFpbiBhIHJlZmVyZW5jZSB0byBidWZmZXJzIGl0IHdhcworICBzY2FubmluZywgcmVzdWx0aW5nIGluIHNlZ2ZhdWx0cy4KKworLSBJc3N1ZSAjMTQyNTk6IFRoZSBmaW5kaXRlcigpIG1ldGhvZCBvZiByZSBvYmplY3RzIGRpZCBub3QgdGFrZSBhbnkKKyAga2V5d29yZCBhcmd1bWVudHMsIGNvbnRyYXJ5IHRvIHRoZSBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICMxMDE0MjogU3VwcG9ydCBmb3IgU0VFS19IT0xFL1NFRUtfREFUQSAoZm9yIGV4YW1wbGUsIHVuZGVyIFpGUykuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxNDQ0MjogQWRkIG1pc3NpbmcgZXJybm8gaW1wb3J0IGluIHRlc3Rfc210cGxpYi4KKworLSBJc3N1ZSAjODMxNTogKHBhcnRpYWwgZml4KSBweXRob24gLW0gdW5pdHRlc3QgdGVzdC50ZXN0X2VtYWlsIG5vdyB3b3Jrcy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBBbHBoYSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMDUtTWFyLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDE3MjogRml4IHJlZmVyZW5jZSBsZWFrIHdoZW4gbWFyc2hhbGxpbmcgYSBidWZmZXItbGlrZSBvYmplY3QKKyAgKG90aGVyIHRoYW4gYSBieXRlcyBvYmplY3QpLgorCistIElzc3VlICMxMzUyMTogZGljdC5zZXRkZWZhdWx0KCkgbm93IGRvZXMgb25seSBvbmUgbG9va3VwIGZvciB0aGUgZ2l2ZW4ga2V5LAorICBtYWtpbmcgaXQgImF0b21pYyIgZm9yIG1hbnkgcHVycG9zZXMuICBQYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIFBFUCA0MDksIElzc3VlICM2MjEwOiAicmFpc2UgWCBmcm9tIE5vbmUiIGlzIG5vdyBzdXBwb3J0ZWQgYXMgYSBtZWFucyBvZgorICBzdXBwcmVzc2luZyB0aGUgZGlzcGxheSBvZiB0aGUgY2hhaW5lZCBleGNlcHRpb24gY29udGV4dC4gVGhlIGNoYWluZWQKKyAgY29udGV4dCBzdGlsbCByZW1haW5zIGF2YWlsYWJsZSBhcyB0aGUgX19jb250ZXh0X18gYXR0cmlidXRlLgorCistIElzc3VlICMxMDE4MTogTmV3IG1lbW9yeXZpZXcgaW1wbGVtZW50YXRpb24gZml4ZXMgbXVsdGlwbGUgb3duZXJzaGlwCisgIGFuZCBsaWZldGltZSBpc3N1ZXMgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFB5X2J1ZmZlciBtZW1iZXJzICgjOTk5MCkKKyAgYXMgd2VsbCBhcyBjcmFzaGVzICgjODMwNSwgIzc0MzMpLiBNYW55IG5ldyBmZWF0dXJlcyBoYXZlIGJlZW4gYWRkZWQKKyAgKFNlZSB3aGF0c25ldy8zLjMpLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZCBleHRlbnNpdmVseS4KKyAgVGhlIG5kYXJyYXkgdGVzdCBvYmplY3QgZnJvbSBfdGVzdGJ1ZmZlci5jIGltcGxlbWVudHMgYWxsIGFzcGVjdHMgb2YKKyAgUEVQLTMxMTgsIHNvIGZ1cnRoZXIgZGV2ZWxvcG1lbnQgdG93YXJkcyB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24KKyAgb2YgdGhlIFBFUCBjYW4gcHJvY2VlZCBpbiBhIHRlc3QtZHJpdmVuIG1hbm5lci4KKworICBUaGFua3MgdG8gTmljayBDb2dobGFuLCBBbnRvaW5lIFBpdHJvdSBhbmQgUGF1bGkgVmlydGFuZW4gZm9yIHJldmlldworICBhbmQgbWFueSBpZGVhcy4KKworLSBJc3N1ZSAjMTI4MzQ6IEZpeCBpbmNvcnJlY3QgcmVzdWx0cyBvZiBtZW1vcnl2aWV3LnRvYnl0ZXMoKSBmb3IKKyAgbm9uLWNvbnRpZ3VvdXMgYXJyYXlzLgorCistIElzc3VlICM1MjMxOiBJbnRyb2R1Y2UgbWVtb3J5dmlldy5jYXN0KCkgbWV0aG9kIHRoYXQgYWxsb3dzIGNoYW5naW5nCisgIGZvcm1hdCBhbmQgc2hhcGUgd2l0aG91dCBtYWtpbmcgYSBjb3B5IG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KKworLSBJc3N1ZSAjMTQwODQ6IEZpeCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIHdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlIHdpdGggYQorICBiYWQgZW5jb2RpbmcuCisKKy0gVXBncmFkZSBVbmljb2RlIGRhdGEgdG8gVW5pY29kZSA2LjEuCisKKy0gSXNzdWUgIzE0MDQwOiBSZW1vdmUgcmFyZWx5IHVzZWQgZmlsZSBuYW1lIHN1ZmZpeGVzIGZvciBDIGV4dGVuc2lvbnMKKyAgKHVuZGVyIFBPU0lYIG1haW5seSkuCisKKy0gSXNzdWUgIzE0MDUxOiBBbGxvdyBhcmJpdHJhcnkgYXR0cmlidXRlcyB0byBiZSBzZXQgb2YgY2xhc3NtZXRob2QgYW5kCisgIHN0YXRpY21ldGhvZC4KKworLSBJc3N1ZSAjMTM3MDM6IG9DRVJULTIwMTEtMDAzOiBSYW5kb21pemUgaGFzaGVzIG9mIHN0ciBhbmQgYnl0ZXMgdG8gcHJvdGVjdAorICBhZ2FpbnN0IGRlbmlhbCBvZiBzZXJ2aWNlIGF0dGFja3MgZHVlIHRvIGhhc2ggY29sbGlzaW9ucyB3aXRoaW4gdGhlIGRpY3QgYW5kCisgIHNldCB0eXBlcy4gIFBhdGNoIGJ5IERhdmlkIE1hbGNvbG0sIGJhc2VkIG9uIHdvcmsgYnkgVmljdG9yIFN0aW5uZXIuCisKKy0gSXNzdWUgIzEzMDIwOiBGaXggYSByZWZlcmVuY2UgbGVhayB3aGVuIGFsbG9jYXRpbmcgYSBzdHJ1Y3RzZXF1ZW5jZSBvYmplY3QKKyAgZmFpbHMuICBQYXRjaCBieSBTdW1hbiBTYWhhLgorCistIElzc3VlICMxMzkwODogUmVhZHkgdHlwZXMgcmV0dXJuZWQgZnJvbSBQeVR5cGVfRnJvbVNwZWMuCisKKy0gSXNzdWUgIzExMjM1OiBGaXggT3ZlcmZsb3dFcnJvciB3aGVuIHRyeWluZyB0byBpbXBvcnQgYSBzb3VyY2UgZmlsZSB3aG9zZQorICBtb2RpZmljYXRpb24gdGltZSBkb2Vzbid0IGZpdCBpbiBhIDMyLWJpdCB0aW1lc3RhbXAuCisKKy0gSXNzdWUgIzEyNzA1OiBBIFN5bnRheEVycm9yIGV4Y2VwdGlvbiBpcyBub3cgcmFpc2VkIHdoZW4gYXR0ZW1wdGluZyB0bworICBjb21waWxlIG11bHRpcGxlIHN0YXRlbWVudHMgYXMgYSBzaW5nbGUgaW50ZXJhY3RpdmUgc3RhdGVtZW50LgorCistIEZpeCB0aGUgYnVpbHRpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gY29kZSB0byBzdG9yZSB0aGUgaW5pdCBmdW5jdGlvbiBmb3IKKyAgZnV0dXJlIHJlaW5pdGlhbGl6YXRpb24uCisKKy0gSXNzdWUgIzgwNTI6IFRoZSBwb3NpeCBzdWJwcm9jZXNzIG1vZHVsZSB3b3VsZCB0YWtlIGEgbG9uZyB0aW1lIGNsb3NpbmcKKyAgYWxsIHBvc3NpYmxlIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIGNoaWxkIHByb2Nlc3MgcmF0aGVyIHRoYW4ganVzdCBvcGVuCisgIGZpbGUgZGVzY3JpcHRvcnMuICBJdCBub3cgY2xvc2VzIG9ubHkgdGhlIG9wZW4gZmRzIGlmIHBvc3NpYmxlIGZvciB0aGUKKyAgZGVmYXVsdCBjbG9zZV9mZHM9VHJ1ZSBiZWhhdmlvci4KKworLSBJc3N1ZSAjMTM2Mjk6IFJlbnVtYmVyIHRoZSB0b2tlbnMgaW4gdG9rZW4uaCBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIGluZGV4ZXMKKyAgaW50byBfUHlQYXJzZXJfVG9rZW5OYW1lcy4KKworLSBJc3N1ZSAjMTM3NTI6IEFkZCBhIGNhc2Vmb2xkKCkgbWV0aG9kIHRvIHN0ci4KKworLSBJc3N1ZSAjMTM3NjE6IEFkZCBhICJmbHVzaCIga2V5d29yZCBhcmd1bWVudCB0byB0aGUgcHJpbnQoKSBmdW5jdGlvbiwKKyAgdXNlZCB0byBlbnN1cmUgZmx1c2hpbmcgdGhlIG91dHB1dCBzdHJlYW0uCisKKy0gSXNzdWUgIzEzNjQ1OiBweWMgZmlsZXMgbm93IGNvbnRhaW4gdGhlIHNpemUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlCisgIGNvZGUsIHRvIGF2b2lkIHRpbWVzdGFtcCBjb2xsaXNpb25zIChlc3BlY2lhbGx5IG9uIGZpbGVzeXN0ZW1zIHdpdGggYSBsb3cKKyAgdGltZXN0YW1wIHJlc29sdXRpb24pIHdoZW4gY2hlY2tpbmcgZm9yIGZyZXNobmVzcyBvZiB0aGUgYnl0ZWNvZGUuCisKKy0gUEVQIDM4MCwgSXNzdWUgIzExNjgyOiBBZGQgInlpZWxkIGZyb20gPHg+IiB0byBzdXBwb3J0IGVhc3kgZGVsZWdhdGlvbiB0bworICBzdWJnZW5lcmF0b3JzIChpbml0aWFsIHBhdGNoIGJ5IEdyZWcgRXdpbmcsIGludGVncmF0aW9uIGludG8gMy4zIGJ5CisgIFJlbmF1ZCBCbGFuY2gsIFJ5YW4gS2VsbHksIFpiaWduaWV3IErEmWRyemVqZXdza2ktU3ptZWsgYW5kIE5pY2sgQ29naGxhbikKKworLSBJc3N1ZSAjMTM3NDg6IFJhdyBieXRlcyBsaXRlcmFscyBjYW4gbm93IGJlIHdyaXR0ZW4gd2l0aCB0aGUgYGByYmBgIHByZWZpeAorICBhcyB3ZWxsIGFzIGBgYnJgYC4KKworLSBJc3N1ZSAjMTI3MzY6IFVzZSBmdWxsIHVuaWNvZGUgY2FzZSBtYXBwaW5ncyBmb3IgdXBwZXIsIGxvd2VyLCBhbmQgdGl0bGUgY2FzZS4KKworLSBJc3N1ZSAjMTI3NjA6IEFkZCBhIGNyZWF0ZSBtb2RlIHRvIG9wZW4oKS4gUGF0Y2ggYnkgRGF2aWQgVG93bnNoZW5kLgorCistIElzc3VlICMxMzczODogU2ltcGxpZnkgaW1wbGVtZW50YXRpb24gb2YgYnl0ZXMubG93ZXIoKSBhbmQgYnl0ZXMudXBwZXIoKS4KKworLSBJc3N1ZSAjMTM1Nzc6IEJ1aWx0LWluIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBub3cgaGF2ZSBhIF9fcXVhbG5hbWVfXy4KKyAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICM2Njk1OiBGdWxsIGdhcmJhZ2UgY29sbGVjdGlvbiBydW5zIG5vdyBjbGVhciB0aGUgZnJlZWxpc3Qgb2Ygc2V0CisgIG9iamVjdHMuICBJbml0aWFsIHBhdGNoIGJ5IE1hdHRoaWFzIFRyb2ZmYWVzLgorCistIEZpeCBPU0Vycm9yLl9faW5pdF9fIGFuZCBPU0Vycm9yLl9fbmV3X18gc28gdGhhdCBlYWNoIG9mIHRoZW0gY2FuIGJlCisgIG92ZXJyaWRlbiBhbmQgdGFrZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoZm9sbG93dXAgdG8gaXNzdWUgIzEyNTU1KS4KKworLSBGaXggdGhlIGZpeCBmb3IgaXNzdWUgIzEyMTQ5OiBpdCB3YXMgaW5jb3JyZWN0LCBhbHRob3VnaCBpdCBoYWQgdGhlIHNpZGUKKyAgZWZmZWN0IG9mIGFwcGVhcmluZyB0byByZXNvbHZlIHRoZSBpc3N1ZS4gIFRoYW5rcyB0byBNYXJrIFNoYW5ub24gZm9yCisgIG5vdGljaW5nLgorCistIElzc3VlICMxMzUwNTogUGlja2xlIGJ5dGVzIG9iamVjdHMgaW4gYSB3YXkgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgKKyAgUHl0aG9uIDIgd2hlbiB1c2luZyBwcm90b2NvbHMgPD0gMi4KKworLSBJc3N1ZSAjMTExNDc6IEZpeCBhbiB1bnVzZWQgYXJndW1lbnQgaW4gX1B5X0FOTk9UQVRFX01FTU9SWV9PUkRFUi4gIChGaXgKKyAgZ2l2ZW4gYnkgQ2FtcGJlbGwgQmFydG9uKS4KKworLSBJc3N1ZSAjMTM1MDM6IFVzZSBhIG1vcmUgZWZmaWNpZW50IHJlZHVjdGlvbiBmb3JtYXQgZm9yIGJ5dGVhcnJheXMgd2l0aAorICBwaWNrbGUgcHJvdG9jb2wgPj0gMy4gIFRoZSBvbGQgcmVkdWN0aW9uIGZvcm1hdCBpcyBrZXB0IHdpdGggb2xkZXIgcHJvdG9jb2xzCisgIGluIG9yZGVyIHRvIGFsbG93IHVucGlja2xpbmcgdW5kZXIgUHl0aG9uIDIuICBQYXRjaCBieSBJcm1lbiBkZSBKb25nLgorCistIElzc3VlICM3MTExOiBQeXRob24gY2FuIG5vdyBiZSBydW4gd2l0aG91dCBhIHN0ZGluLCBzdGRvdXQgb3Igc3RkZXJyCisgIHN0cmVhbS4gIEl0IHdhcyBhbHJlYWR5IHRoZSBjYXNlIHdpdGggUHl0aG9uIDIuICBIb3dldmVyLCB0aGUgY29ycmVzcG9uZGluZworICBzeXMgbW9kdWxlIGVudHJpZXMgYXJlIG5vdyBzZXQgdG8gTm9uZSAoaW5zdGVhZCBvZiBhbiB1bnVzYWJsZSBmaWxlIG9iamVjdCkuCisKKy0gSXNzdWUgIzExODQ5OiBFbnN1cmUgdGhhdCBmcmVlKClkIG1lbW9yeSBhcmVuYXMgYXJlIHJlYWxseSByZWxlYXNlZAorICBvbiBQT1NJWCBzeXN0ZW1zIHN1cHBvcnRpbmcgYW5vbnltb3VzIG1lbW9yeSBtYXBwaW5ncy4gIFBhdGNoIGJ5CisgIENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTM0NTI6IFB5VW5pY29kZV9FbmNvZGVEZWNpbWFsKCkgZG9lc24ndCBzdXBwb3J0IGVycm9yIGhhbmRsZXJzCisgIGRpZmZlcmVudCB0aGFuICJzdHJpY3QiIGFueW1vcmUuIFRoZSBjYWxsZXIgd2FzIHVuYWJsZSB0byBjb21wdXRlIHRoZQorICBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyOiBpdCBkZXBlbmRzIG9uIHRoZSBlcnJvciBoYW5kbGVyLgorCistIFBFUCAzMTU1IC8gaXNzdWUgIzEzNDQ4OiBRdWFsaWZpZWQgbmFtZSBmb3IgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLgorCistIElzc3VlICMxMzQzNjogRml4IGEgYm9ndXMgZXJyb3IgbWVzc2FnZSB3aGVuIGFuIEFTVCBvYmplY3Qgd2FzIHBhc3NlZAorICBhbiBpbnZhbGlkIGludGVnZXIgdmFsdWUuCisKKy0gSXNzdWUgIzEzNDExOiBtZW1vcnl2aWV3IG9iamVjdHMgYXJlIG5vdyBoYXNoYWJsZSB3aGVuIHRoZSB1bmRlcmx5aW5nCisgIG9iamVjdCBpcyBoYXNoYWJsZS4KKworLSBJc3N1ZSAjMTMzMzg6IEhhbmRsZSBhbGwgZW51bWVyYXRpb25zIGluIF9QeV9BTk5PVEFURV9NRU1PUllfT1JERVIKKyAgdG8gYWxsb3cgY29tcGlsaW5nIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggLVdzd2l0Y2gtZW51bSBvbiBnY2MuCisgIEluaXRpYWwgcGF0Y2ggYnkgRmxvcmlzIEJydXlub29naGUuCisKKy0gSXNzdWUgIzEwMjI3OiBBZGQgYW4gYWxsb2NhdGlvbiBjYWNoZSBmb3IgYSBzaW5nbGUgc2xpY2Ugb2JqZWN0LiAgUGF0Y2ggYnkKKyAgU3RlZmFuIEJlaG5lbC4KKworLSBJc3N1ZSAjMTMzOTM6IEJ1ZmZlcmVkUmVhZGVyLnJlYWQxKCkgbm93IGFza3MgdGhlIGZ1bGwgcmVxdWVzdGVkIHNpemUgdG8KKyAgdGhlIHJhdyBzdHJlYW0gaW5zdGVhZCBvZiBsaW1pdGluZyBpdHNlbGYgdG8gdGhlIGJ1ZmZlciBzaXplLgorCistIElzc3VlICMxMzM5MjogV3JpdGluZyBhIHB5YyBmaWxlIHNob3VsZCBub3cgYmUgYXRvbWljIHVuZGVyIFdpbmRvd3MgYXMgd2VsbC4KKworLSBJc3N1ZSAjMTMzMzM6IFRoZSBVVEYtNyBkZWNvZGVyIG5vdyBhY2NlcHRzIGxvbmUgc3Vycm9nYXRlcyAodGhlIGVuY29kZXIKKyAgYWxyZWFkeSBhY2NlcHRzIHRoZW0pLgorCistIElzc3VlICMxMzM4OTogRnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gcGFzc2VzIG5vdyBjbGVhciB0aGUgZnJlZWxpc3RzIGZvcgorICBsaXN0IGFuZCBkaWN0IG9iamVjdHMuICBUaGV5IGFscmVhZHkgY2xlYXJlZCBvdGhlciBmcmVlbGlzdHMgaW4gdGhlCisgIGludGVycHJldGVyLgorCistIElzc3VlICMxMzMyNzogUmVtb3ZlIHRoZSBuZWVkIGZvciBhbiBleHBsaWNpdCBOb25lIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQKKyAgdG8gb3MudXRpbWUsIG9zLmx1dGltZXMsIG9zLmZ1dGltZXMsIG9zLmZ1dGltZW5zLCBvcy5mdXRpbWVzYXQsIGluCisgIG9yZGVyIHRvIHVwZGF0ZSB0byB0aGUgY3VycmVudCB0aW1lLiBBbHNvIGFkZGVkIGtleXdvcmQgYXJndW1lbnQKKyAgaGFuZGxpbmcgdG8gb3MudXRpbWVuc2F0IGluIG9yZGVyIHRvIHJlbW92ZSB0aGUgbmVlZCBmb3IgZXhwbGljaXQgTm9uZS4KKworLSBJc3N1ZSAjMTMzNTA6IFNpbXBsaWZ5IHNvbWUgQyBjb2RlIGJ5IHJlcGxhY2luZyBtb3N0IHVzYWdlcyBvZgorICBQeVVuaWNvZGVfRm9ybWF0IGJ5IFB5VW5pY29kZV9Gcm9tRm9ybWF0LgorCistIElzc3VlICMxMzM0MjogaW5wdXQoKSB1c2VkIHRvIGlnbm9yZSBzeXMuc3RkaW4ncyBhbmQgc3lzLnN0ZG91dCdzIHVuaWNvZGUKKyAgZXJyb3IgaGFuZGxlciBpbiBpbnRlcmFjdGl2ZSBtb2RlICh3aGVuIGNhbGxpbmcgaW50byBQeU9TX1JlYWRsaW5lKCkpLgorCistIElzc3VlICM5ODk2OiBBZGQgc3RhcnQsIHN0b3AsIGFuZCBzdGVwIGF0dHJpYnV0ZXMgdG8gcmFuZ2Ugb2JqZWN0cy4KKworLSBJc3N1ZSAjMTMzNDM6IEZpeCBhIFN5c3RlbUVycm9yIHdoZW4gYSBsYW1iZGEgZXhwcmVzc2lvbiB1c2VzIGEgZ2xvYmFsCisgIHZhcmlhYmxlIGluIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50OiBgYGxhbWJkYSAqLAorICBhcmc9R0xPQkFMX05BTUU6IE5vbmVgYAorCistIElzc3VlICMxMjc5NzogQWRkZWQgY3VzdG9tIG9wZW5lciBwYXJhbWV0ZXIgdG8gYnVpbHRpbiBvcGVuKCkgYW5kCisgIEZpbGVJTy5vcGVuKCkuCisKKy0gSXNzdWUgIzEwNTE5OiBBdm9pZCB1bm5lY2Vzc2FyeSByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMgaW4KKyAgc2V0b2JqZWN0LmMuCisKKy0gSXNzdWUgIzEwMzYzOiBEZWFsbG9jYXRlIGdsb2JhbCBsb2NrcyBpbiBQeV9GaW5hbGl6ZSgpLgorCistIElzc3VlICMxMzAxODogRml4IHJlZmVyZW5jZSBsZWFrcyBpbiBlcnJvciBwYXRocyBpbiBkaWN0b2JqZWN0LmMuCisgIFBhdGNoIGJ5IFN1bWFuIFNhaGEuCisKKy0gSXNzdWUgIzEzMjAxOiBEZWZpbmUgJz09JyBhbmQgJyE9JyB0byBjb21wYXJlIHJhbmdlIG9iamVjdHMgYmFzZWQgb24KKyAgdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGV5IGRlZmluZSAoaW5zdGVhZCBvZiBjb21wYXJpbmcgYmFzZWQgb24KKyAgb2JqZWN0IGlkZW50aXR5KS4KKworLSBJc3N1ZSAjMTI5NDIzMjogSW4gYSBmZXcgY2FzZXMgaW52b2x2aW5nIG1ldGFjbGFzcyBpbmhlcml0YW5jZSwgdGhlCisgIGludGVycHJldGVyIHdvdWxkIHNvbWV0aW1lcyBpbnZva2UgdGhlIHdyb25nIG1ldGFjbGFzcyB3aGVuIGJ1aWxkaW5nIGEgbmV3CisgIGNsYXNzIG9iamVjdC4gVGhlc2UgY2FzZXMgbm93IGJlaGF2ZSBjb3JyZWN0bHkuIFBhdGNoIGJ5IERhbmllbCBVcmJhbi4KKworLSBJc3N1ZSAjMTI3NTM6IEFkZCBzdXBwb3J0IGZvciBVbmljb2RlIG5hbWUgYWxpYXNlcyBhbmQgbmFtZWQgc2VxdWVuY2VzLgorICBCb3RoIGBgdW5pY29kZWRhdGEubG9va3VwKClgYCBhbmQgJ1xOey4uLn0nIG5vdyByZXNvbHZlIGFsaWFzZXMsCisgIGFuZCBgYHVuaWNvZGVkYXRhLmxvb2t1cCgpYGAgcmVzb2x2ZXMgbmFtZWQgc2VxdWVuY2VzIHRvby4KKworLSBJc3N1ZSAjMTIxNzA6IFRoZSBjb3VudCgpLCBmaW5kKCksIHJmaW5kKCksIGluZGV4KCkgYW5kIHJpbmRleCgpIG1ldGhvZHMKKyAgb2YgYnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIG5vdyBhY2NlcHQgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NQorICBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC4gIFBhdGNoIGJ5IFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMjYwNDogVlRSQUNFIG1hY3JvIGV4cGFuZGVkIHRvIG5vLW9wIGluIF9zcmUuYyB0byBhdm9pZCBjb21waWxlcgorICB3YXJuaW5ncy4gUGF0Y2ggYnkgSm9zaCBUcmlwbGV0dCBhbmQgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEyMjgxOiBSZXdyaXRlIHRoZSBNQkNTIGNvZGVjIHRvIGhhbmRsZSBjb3JyZWN0bHkgcmVwbGFjZSBhbmQgaWdub3JlCisgIGVycm9yIGhhbmRsZXJzIG9uIGFsbCBXaW5kb3dzIHZlcnNpb25zLiBUaGUgTUJDUyBjb2RlYyBpcyBub3cgc3VwcG9ydGluZyBhbGwKKyAgZXJyb3IgaGFuZGxlcnMsIGluc3RlYWQgb2Ygb25seSByZXBsYWNlIHRvIGVuY29kZSBhbmQgaWdub3JlIHRvIGRlY29kZS4KKworLSBJc3N1ZSAjMTMxODg6IFdoZW4gY2FsbGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgdHJhY2ViYWNrIGFyZ3VtZW50LAorICBnZW5lcmF0b3IudGhyb3coKSBub3cgZ2V0cyB0aGUgdHJhY2ViYWNrIGZyb20gdGhlIHBhc3NlZCBleGNlcHRpb24ncworICBgYF9fdHJhY2ViYWNrX19gYCBhdHRyaWJ1dGUuICBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjMTMxNDY6IFdyaXRpbmcgYSBweWMgZmlsZSBpcyBub3cgYXRvbWljIHVuZGVyIFBPU0lYLgorCistIElzc3VlICM3ODMzOiBFeHRlbnNpb24gbW9kdWxlcyBidWlsdCB1c2luZyBkaXN0dXRpbHMgb24gV2luZG93cyB3aWxsIG5vCisgIGxvbmdlciBpbmNsdWRlIGEgIm1hbmlmZXN0IiB0byBwcmV2ZW50IHRoZW0gZmFpbGluZyBhdCBpbXBvcnQgdGltZSBpbiBzb21lCisgIGVtYmVkZGVkIHNpdHVhdGlvbnMuCisKKy0gUEVQIDMxNTEgLyBpc3N1ZSAjMTI1NTU6IHJld29ya2luZyB0aGUgT1MgYW5kIElPIGV4Y2VwdGlvbiBoaWVyYXJjaHkuCisKKy0gSXNzdWUgIzEzNTYwOiBBZGQgUHlVbmljb2RlX0RlY29kZUxvY2FsZSgpLCBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlQW5kU2l6ZSgpCisgIGFuZCBQeVVuaWNvZGVfRW5jb2RlTG9jYWxlKCkgZnVuY3Rpb25zIHRvIHRoZSBDIEFQSSB0byBkZWNvZGUvZW5jb2RlIGZyb20vdG8KKyAgdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nLgorCistIEFkZCBpbnRlcm5hbCBBUEkgZm9yIHN0YXRpYyBzdHJpbmdzIChfUHlfaWRlbnRpZmllciBldCBhbC4pLgorCistIElzc3VlICMxMzA2MzogdGhlIFdpbmRvd3MgZXJyb3IgRVJST1JfTk9fREFUQSAobnVtYmVyZWQgMjMyIGFuZCBkZXNjcmliZWQKKyAgYXMgIlRoZSBwaXBlIGlzIGJlaW5nIGNsb3NlZCIpIGlzIG5vdyBtYXBwZWQgdG8gUE9TSVggZXJybm8gRVBJUEUKKyAgKHByZXZpb3VzbHkgRUlOVkFMKS4KKworLSBJc3N1ZSAjMTI5MTE6IEZpeCBtZW1vcnkgY29uc3VtcHRpb24gd2hlbiBjYWxjdWxhdGluZyB0aGUgcmVwcigpIG9mIGh1Z2UKKyAgdHVwbGVzIG9yIGxpc3RzLgorCistIFBFUCAzOTM6IGZsZXhpYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbi4gVGhhbmtzIHRvIFRvcnN0ZW4gQmVja2VyIGZvciB0aGUKKyAgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiwgYW5kIFZpY3RvciBTdGlubmVyIGZvciB2YXJpb3VzIGJ1ZyBmaXhlcy4KKworLSBJc3N1ZSAjMTQwODE6IFRoZSAnc2VwJyBhbmQgJ21heHNwbGl0JyBwYXJhbWV0ZXIgdG8gc3RyLnNwbGl0LCBieXRlcy5zcGxpdCwKKyAgYW5kIGJ5dGVhcnJheS5zcGxpdCBtYXkgbm93IGJlIHBhc3NlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTMwMTI6IFRoZSAna2VlcGVuZHMnIHBhcmFtZXRlciB0byBzdHIuc3BsaXRsaW5lcyBtYXkgbm93IGJlIHBhc3NlZAorICBhcyBhIGtleXdvcmQgYXJndW1lbnQ6ICAibXlfc3RyaW5nLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkiLiAgVGhlIHNhbWUKKyAgY2hhbmdlIGFsc28gYXBwbGllcyB0byBieXRlcy5zcGxpdGxpbmVzIGFuZCBieXRlYXJyYXkuc3BsaXRsaW5lcy4KKworLSBJc3N1ZSAjNzczMjogRG9uJ3Qgb3BlbiBhIGRpcmVjdG9yeSBhcyBhIGZpbGUgYW55bW9yZSB3aGlsZSBpbXBvcnRpbmcgYQorICBtb2R1bGUuIElnbm9yZSB0aGUgZGlyZWNvdHJ5IGlmIGl0cyBuYW1lIG1hdGNocyB0aGUgbW9kdWxlIG5hbWUgKGUuZy4KKyAgIl9faW5pdF9fLnB5IikgYW5kIHJhaXNlIGEgSW1wb3J0RXJyb3IgaW5zdGVhZC4KKworLSBJc3N1ZSAjMTMwMjE6IE1pc3NpbmcgZGVjcmVmIG9uIGFuIGVycm9yIHBhdGguICBUaGFua3MgdG8gU3VtYW4gU2FoYSBmb3IKKyAgZmluZGluZyB0aGUgYnVnIGFuZCBwcm92aWRpbmcgYSBwYXRjaC4KKworLSBJc3N1ZSAjMTI5NzM6IEZpeCBvdmVyZmxvdyBjaGVja3MgdGhhdCByZWxpZWQgb24gdW5kZWZpbmVkIGJlaGF2aW91ciBpbgorICBsaXN0X3JlcGVhdCAobGlzdG9iamVjdC5jKSBhbmQgaXNsaWNlX25leHQgKGl0ZXJ0b29sc21vZHVsZS5jKS4gIFRoZXNlIGJ1Z3MKKyAgY2F1c2VkIHRlc3QgZmFpbHVyZXMgd2l0aCByZWNlbnQgdmVyc2lvbnMgb2YgQ2xhbmcuCisKKy0gSXNzdWUgIzEyOTA0OiBvcy51dGltZSwgb3MuZnV0aW1lcywgb3MubHV0aW1lcywgYW5kIG9zLmZ1dGltZXNhdCBub3cgd3JpdGUKKyAgYXRpbWUgYW5kIG10aW1lIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24gb24gbW9kZXJuIFBPU0lYIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTI4MDI6IHRoZSBXaW5kb3dzIGVycm9yIEVSUk9SX0RJUkVDVE9SWSAobnVtYmVyZWQgMjY3KSBpcyBub3cKKyAgbWFwcGVkIHRvIFBPU0lYIGVycm5vIEVOT1RESVIgKHByZXZpb3VzbHkgRUlOVkFMKS4KKworLSBJc3N1ZSAjOTIwMDogVGhlIHN0ci5pcyogbWV0aG9kcyBub3cgd29yayB3aXRoIHN0cmluZ3MgdGhhdCBjb250YWluIG5vbi1CTVAKKyAgY2hhcmFjdGVycyBldmVuIGluIG5hcnJvdyBVbmljb2RlIGJ1aWxkcy4KKworLSBJc3N1ZSAjMTI3OTE6IEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgZWFybHkgd2hlbiBhIGdlbmVyYXRvciBleGl0cyB3aXRoCisgIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTI3NzM6IE1ha2UgX19kb2NfXyBtdXRhYmxlIG9uIHVzZXItZGVmaW5lZCBjbGFzc2VzLgorCistIElzc3VlICMxMjc2NjogUmFpc2UgYSBWYWx1ZUVycm9yIHdoZW4gY3JlYXRpbmcgYSBjbGFzcyB3aXRoIGEgY2xhc3MgdmFyaWFibGUKKyAgdGhhdCBjb25mbGljdHMgd2l0aCBhIG5hbWUgaW4gX19zbG90c19fLgorCistIElzc3VlICMxMjI2NjogRml4IHN0ci5jYXBpdGFsaXplKCkgdG8gY29ycmVjdGx5IHVwcGVyY2FzZS9sb3dlcmNhc2UKKyAgdGl0bGVjYXNlZCBhbmQgY2FzZWQgbm9uLWxldHRlciBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxMjczMjogSW4gbmFycm93IHVuaWNvZGUgYnVpbGRzLCBhbGxvdyBVbmljb2RlIGlkZW50aWZpZXJzIHdoaWNoIGZhbGwKKyAgb3V0c2lkZSB0aGUgQk1QLgorCistIElzc3VlICMxMjU3NTogVmFsaWRhdGUgdXNlci1nZW5lcmF0ZWQgQVNUIGJlZm9yZSBpdCBpcyBjb21waWxlZC4KKworLSBNYWtlIHR5cGUoTm9uZSksIHR5cGUoRWxsaXBzaXMpLCBhbmQgdHlwZShOb3RJbXBsZW1lbnRlZCkgY2FsbGFibGUuIFRoZXkKKyAgcmV0dXJuIHRoZSByZXNwZWN0aXZlIHNpbmdsZXRvbiBpbnN0YW5jZXMuCisKKy0gRm9yYmlkIHN1bW1pbmcgYnl0ZXMgd2l0aCBzdW0oKS4KKworLSBWZXJpZnkgdGhlIHR5cGVzIG9mIEFTVCBzdHJpbmdzIGFuZCBpZGVudGlmaWVycyBwcm92aWRlZCBieSB0aGUgdXNlciBiZWZvcmUKKyAgY29tcGlsaW5nIHRoZW0uCisKKy0gSXNzdWUgIzEyNjQ3OiBUaGUgTm9uZSBvYmplY3Qgbm93IGhhcyBhIF9fYm9vbF9fKCkgbWV0aG9kIHRoYXQgcmV0dXJucyBGYWxzZS4KKyAgRm9ybWVybHksIGJvb2woTm9uZSkgcmV0dXJuZWQgRmFsc2Ugb25seSBiZWNhdXNlIG9mIHNwZWNpYWwgY2FzZSBsb2dpYworICBpbiBQeU9iamVjdF9Jc1RydWUoKS4KKworLSBJc3N1ZSAjMTI1Nzk6IHN0ci5mb3JtYXRfbWFwKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdXNlZCBvbiBhCisgIGZvcm1hdCBzdHJpbmcgdGhhdCBjb250YWlucyBwb3NpdGlvbmFsIGZpZWxkcy4gSW5pdGlhbCBwYXRjaCBieQorICBKdWxpYW4gQmVybWFuLgorCistIElzc3VlICMxMDI3MTogQWxsb3cgd2FybmluZ3Muc2hvd3dhcm5pbmcoKSBiZSBhbnkgY2FsbGFibGUuCisKKy0gSXNzdWUgIzExNjI3OiBGaXggc2VnZmF1bHQgd2hlbiBfX25ld19fIG9uIGEgZXhjZXB0aW9uIHJldHVybnMgYQorICBub24tZXhjZXB0aW9uIGNsYXNzLgorCistIElzc3VlICMxMjE0OTogVXBkYXRlIHRoZSBtZXRob2QgY2FjaGUgYWZ0ZXIgYSB0eXBlJ3MgZGljdGlvbmFyeSBnZXRzCisgIGNsZWFyZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiAgVGhpcyBmaXhlcyBhIHNlZ2ZhdWx0IHdoZW4gYW4gaW5zdGFuY2UKKyAgYW5kIGl0cyB0eXBlIGdldCBjYXVnaHQgaW4gYSByZWZlcmVuY2UgY3ljbGUsIGFuZCB0aGUgaW5zdGFuY2UncworICBkZWFsbG9jYXRvciBjYWxscyBvbmUgb2YgdGhlIG1ldGhvZHMgb24gdGhlIHR5cGUgKGUuZy4gd2hlbiBzdWJjbGFzc2luZworICBJT0Jhc2UpLiAgRGlhZ25vc2lzIGFuZCBwYXRjaCBieSBEYXZpZGUgUml6em8uCisKKy0gSXNzdWUgIzk2MTEsICM5MDE1OiBGaWxlSU8ucmVhZCgpIGNsYW1wcyB0aGUgbGVuZ3RoIHRvIElOVF9NQVggb24gV2luZG93cy4KKworLSBJc3N1ZSAjOTY0MjogVW5pZm9ybWl6ZSB0aGUgdGVzdHMgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgbWJjcyBjb2RlYywgYWRkCisgIGEgbmV3IEhBVkVfTUJDUyBkZWZpbmUuCisKKy0gSXNzdWUgIzk2NDI6IEZpeCBmaWxlc3lzdGVtIGVuY29kaW5nIGluaXRpYWxpemF0aW9uOiB1c2UgdGhlIEFOU0kgY29kZSBwYWdlCisgIG9uIFdpbmRvd3MgaWYgdGhlIG1iY3MgY29kZWMgaXMgbm90IGF2YWlsYWJsZSwgYW5kIGZhaWwgd2l0aCBhIGZhdGFsIGVycm9yIGlmCisgIHdlIGNhbm5vdCBnZXQgdGhlIGxvY2FsZSBlbmNvZGluZyAoaWYgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm90IGF2YWlsYWJsZSkKKyAgaW5zdGVhZCBvZiB1c2luZyBVVEYtOC4KKworLSBXaGVuIGEgZ2VuZXJhdG9yIHlpZWxkcywgZG8gbm90IHJldGFpbiB0aGUgY2FsbGVyJ3MgZXhjZXB0aW9uIHN0YXRlIG9uIHRoZQorICBnZW5lcmF0b3IuCisKKy0gSXNzdWUgIzEyNDc1OiBQcmV2ZW50IGdlbmVyYXRvcnMgZnJvbSBsZWFraW5nIHRoZWlyIGV4Y2VwdGlvbiBzdGF0ZSBpbnRvIHRoZQorICBjYWxsZXIncyBmcmFtZSBhcyB0aGV5IHJldHVybiBmb3IgdGhlIGxhc3QgdGltZS4KKworLSBJc3N1ZSAjMTIyOTE6IFlvdSBjYW4gbm93IGxvYWQgbXVsdGlwbGUgbWFyc2hhbGxlZCBvYmplY3RzIGZyb20gYSBzdHJlYW0sCisgIHdpdGggb3RoZXIgZGF0YSBpbnRlcmxlYXZlZCBiZXR3ZWVuIG1hcnNoYWxsZWQgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTIzNTY6IFdoZW4gcmVxdWlyZWQgcG9zaXRpb25hbCBvciBrZXl3b3JkLW9ubHkgYXJndW1lbnRzIGFyZSBub3QKKyAgZ2l2ZW4sIHByb2R1Y2UgYSBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIHdoaWNoIGluY2x1ZGVzIHRoZSBuYW1lKHMpIG9mIHRoZQorICBtaXNzaW5nIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTIzNzA6IEZpeCBzdXBlciB3aXRoIG5vIGFyZ3VtZW50cyB3aGVuIF9fY2xhc3NfXyBpcyBvdmVycmlkZW4gaW4gdGhlCisgIGNsYXNzIGJvZHkuCisKKy0gSXNzdWUgIzEyMDg0OiBvcy5zdGF0IG9uIFdpbmRvd3Mgbm93IHdvcmtzIHByb3Blcmx5IHdpdGggcmVsYXRpdmUgc3ltYm9saWMKKyAgbGlua3Mgd2hlbiBjYWxsZWQgZnJvbSBhbnkgZGlyZWN0b3J5LgorCistIExvb3NlbiB0eXBlIHJlc3RyaWN0aW9ucyBvbiB0aGUgX19kaXJfXyBtZXRob2QuIF9fZGlyX18gY2FuIG5vdyByZXR1cm4gYW55CisgIHNlcXVlbmNlLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIGxpc3QgYW5kIHNvcnRlZCBieSBkaXIoKS4KKworLSBJc3N1ZSAjMTIyNjU6IE1ha2UgZXJyb3IgbWVzc2FnZXMgcHJvZHVjZWQgYnkgcGFzc2luZyBhbiBpbnZhbGlkIHNldCBvZgorICBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiBtb3JlIGluZm9ybWF0aXZlLgorCistIElzc3VlICMxMjIyNTogU3RpbGwgYWxsb3cgUHl0aG9uIHRvIGJ1aWxkIGlmIFB5dGhvbiBpcyBub3QgaW4gaXRzIGhnIHJlcG8gb3IKKyAgbWVyY3VyaWFsIGlzIG5vdCBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzExOTU6IG15X2ZnZXRzKCkgbm93IGFsd2F5cyBjbGVhcnMgZXJyb3JzIGJlZm9yZSBjYWxsaW5nIGZnZXRzKCkuIEZpeAorICB0aGUgZm9sbG93aW5nIGNhc2U6IHN5cy5zdGRpbi5yZWFkKCkgc3RvcHBlZCB3aXRoIENUUkwrZCAoZW5kIG9mIGZpbGUpLAorICByYXdfaW5wdXQoKSBpbnRlcnJ1cHRlZCBieSBDVFJMK2MuCisKKy0gSXNzdWUgIzEyMjE2OiBBbGxvdyB1bmV4cGVjdGVkIEVPRiBlcnJvcnMgdG8gaGFwcGVuIG9uIGFueSBsaW5lIG9mIHRoZSBmaWxlLgorCistIElzc3VlICMxMjE5OTogVGhlIFRyeUV4Y2VwdCBhbmQgVHJ5RmluYWxseSBhbmQgQVNUIG5vZGVzIGhhdmUgYmVlbiB1bmlmaWVkCisgIGludG8gYSBUcnkgbm9kZS4KKworLSBJc3N1ZSAjOTY3MDogSW5jcmVhc2UgdGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3Igc2Vjb25kYXJ5IHRocmVhZHMgb24KKyAgTWFjIE9TIFggYW5kIEZyZWVCU0QgdG8gcmVkdWNlIHRoZSBjaGFuY2VzIG9mIGEgY3Jhc2ggaW5zdGVhZCBvZiBhCisgICJtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCIgUnVudGltZUVycm9yIGV4Y2VwdGlvbi4KKyAgKHBhdGNoIGJ5IFJvbmFsZCBPdXNzb3JlbikKKworLSBJc3N1ZSAjMTIxMDY6IFRoZSB1c2Ugb2YgdGhlIG11bHRpcGxlLXdpdGggc2hvcnRoYW5kIHN5bnRheCBpcyBub3cgcmVmbGVjdGVkCisgIGluIHRoZSBBU1QuCisKKy0gSXNzdWUgIzEyMTkwOiBUcnkgdG8gdXNlIHRoZSBzYW1lIGZpbGVuYW1lIG9iamVjdCB3aGVuIGNvbXBpbGluZyB1bm1hcnNoYWxsaW5nCisgIGEgY29kZSBvYmplY3RzIGluIHRoZSBzYW1lIGZpbGUuCisKKy0gSXNzdWUgIzEyMTY2OiBNb3ZlIGltcGxlbWVudGF0aW9ucyBvZiBkaXIoKSBzcGVjaWFsaXplZCBmb3IgdmFyaW91cyB0eXBlcyBpbnRvCisgIHRoZSBfX2Rpcl9fKCkgbWV0aG9kcyBvZiB0aG9zZSB0eXBlcy4KKworLSBJc3N1ZSAjNTcxNTogSW4gc29ja2V0c2VydmVyLCBjbG9zZSB0aGUgc2VydmVyIHNvY2tldCBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KKworLSBDb3JyZWN0IGxvb2t1cCBvZiBfX2Rpcl9fIG9uIG9iamVjdHMuIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBjYXVzZXMgZXJyb3JzCisgIGJlc2lkZXMgQXR0cmlidXRlRXJyb3IgZm91bmQgb24gbG9va3VwIHRvIGJlIHByb3BhZ2F0ZWQuCisKKy0gSXNzdWUgIzEyMDYwOiBVc2Ugc2lnX2F0b21pY190IHR5cGUgYW5kIHZvbGF0aWxlIGtleXdvcmQgaW4gdGhlIHNpZ25hbAorICBtb2R1bGUuIFBhdGNoIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxNzQ2NjU2OiBBZGRlZCB0aGUgaWZfbmFtZWluZGV4LCBpZl9pbmRleHRvbmFtZSwgaWZfbmFtZXRvaW5kZXgKKyAgbWV0aG9kcyB0byB0aGUgc29ja2V0IG1vZHVsZS4KKworLSBJc3N1ZSAjMTIwNDQ6IEZpeGVkIHN1YnByb2Nlc3MuUG9wZW4gd2hlbiB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyIHRvCisgIHdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGVuZCB3aGVuIGV4aXRpbmcgdGhlIGNvbnRleHQgdG8gYXZvaWQgdW5pbnRlbnRpb25hbGx5CisgIGxlYXZpbmcgem9tYmllIHByb2Nlc3NlcyBhcm91bmQuCisKKy0gSXNzdWUgIzExOTU6IEZpeCBpbnB1dCgpIGlmIGl0IGlzIGludGVycnVwdGVkIGJ5IENUUkwrZCBhbmQgdGhlbiBDVFJMK2MsCisgIGNsZWFyIHRoZSBlbmQtb2YtZmlsZSBpbmRpY2F0b3IgYWZ0ZXIgQ1RSTCtkLgorCistIElzc3VlICMxODU2OiBBdm9pZCBjcmFzaGVzIGFuZCBsb2NrdXBzIHdoZW4gZGFlbW9uIHRocmVhZHMgcnVuIHdoaWxlIHRoZQorICBpbnRlcnByZXRlciBpcyBzaHV0dGluZyBkb3duOyBpbnN0ZWFkLCB0aGVzZSB0aHJlYWRzIGFyZSBub3cga2lsbGVkIHdoZW4KKyAgdGhleSB0cnkgdG8gdGFrZSB0aGUgR0lMLgorCistIElzc3VlICM5NzU2OiBXaGVuIGNhbGxpbmcgYSBtZXRob2QgZGVzY3JpcHRvciBvciBhIHNsb3Qgd3JhcHBlciBkZXNjcmlwdG9yLAorICB0aGUgY2hlY2sgb2YgdGhlIG9iamVjdCB0eXBlIGRvZXNuJ3QgcmVhZCB0aGUgX19jbGFzc19fIGF0dHJpYnV0ZSBhbnltb3JlLgorICBGaXggYSBjcmFzaCBpZiBhIGNsYXNzIG92ZXJyaWRlIGl0cyBfX2NsYXNzX18gYXR0cmlidXRlIChlLmcuIGEgcHJveHkgb2YgdGhlCisgIHN0ciB0eXBlKS4gUGF0Y2ggd3JpdHRlbiBieSBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzEwNTE3OiBBZnRlciBmb3JrKCksIHJlaW5pdGlhbGl6ZSB0aGUgVExTIHVzZWQgYnkgdGhlIFB5R0lMU3RhdGVfKgorICBBUElzLCB0byBhdm9pZCBhIGNyYXNoIHdpdGggdGhlIHB0aHJlYWQgaW1wbGVtZW50YXRpb24gaW4gUkhFTCA1LiAgUGF0Y2gKKyAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMDkxNDogSW5pdGlhbGl6ZSBjb3JyZWN0bHkgdGhlIGZpbGVzeXN0ZW0gY29kZWMgd2hlbiBjcmVhdGluZyBhIG5ldworICBzdWJpbnRlcnByZXRlciB0byBmaXggYSBib290c3RyYXAgaXNzdWUgd2l0aCBjb2RlY3MgaW1wbGVtZW50ZWQgaW4gUHl0aG9uLCBhcworICB0aGUgSVNPLTg4NTktMTUgY29kZWMuCisKKy0gSXNzdWUgIzExOTE4OiBPUy8yIGFuZCBWTVMgYXJlIG5vIG1vcmUgc3VwcG9ydGVkIGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YKKyAgbWFpbnRhaW5lci4KKworLSBJc3N1ZSAjNjc4MDogZml4IHN0YXJ0cy9lbmRzd2l0aCBlcnJvciBtZXNzYWdlIHRvIG1lbnRpb24gdGhhdCB0dXBsZXMgYXJlCisgIGFjY2VwdGVkIHRvby4KKworLSBJc3N1ZSAjNTA1NzogZml4IGEgYnVnIGluIHRoZSBwZWVwaG9sZXIgdGhhdCBsZWQgdG8gbm9uLXBvcnRhYmxlIHB5YyBmaWxlcworICBiZXR3ZWVuIG5hcnJvdyBhbmQgd2lkZSBidWlsZHMgd2hpbGUgb3B0aW1pemluZyBCSU5BUllfU1VCU0NSIG9uIG5vbi1CTVAKKyAgY2hhcnMgKGUuZy4gIlxVMDAwMTIzNDUiWzBdKS4KKworLSBJc3N1ZSAjMTE4NDU6IEZpeCB0eXBvIGluIHJhbmdlb2JqZWN0LmMgdGhhdCBjYXVzZWQgYSBjcmFzaCBpbgorICBjb21wdXRlX3NsaWNlX2luZGljZXMuICBQYXRjaCBieSBEYW5pZWwgVXJiYW4uCisKKy0gSXNzdWUgIzU2NzM6IEFkZGVkIGEgYHRpbWVvdXRgIGtleXdvcmQgYXJndW1lbnQgdG8gc3VicHJvY2Vzcy5Qb3Blbi53YWl0LAorICBzdWJwcm9jZXNzLlBvcGVuLmNvbW11bmljYXRlZCwgc3VicHJvY2Vzcy5jYWxsLCBzdWJwcm9jZXNzLmNoZWNrX2NhbGwsIGFuZAorICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dC4gIElmIHRoZSBibG9ja2luZyBvcGVyYXRpb24gdGFrZXMgbW9yZSB0aGFuIGB0aW1lb3V0YAorICBzZWNvbmRzLCB0aGUgYHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWRgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKy0gSXNzdWUgIzExNjUwOiBQeU9TX1N0ZGlvUmVhZGxpbmUoKSByZXRyaWVzIGZnZXRzKCkgaWYgaXQgd2FzIGludGVycnVwdGVkCisgIChFSU5UUiksIGZvciBleGFtcGxlIGlmIHRoZSBwcm9ncmFtIGlzIHN0b3BwZWQgd2l0aCBDVFJMK3ogb24gTWFjIE9TIFguIFBhdGNoCisgIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuY29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzkzMTk6IEluY2x1ZGUgdGhlIGZpbGVuYW1lIGluICJOb24tVVRGOCBjb2RlIC4uLiIgc3ludGF4IGVycm9yLgorCistIElzc3VlICMxMDc4NTogU3RvcmUgdGhlIGZpbGVuYW1lIGFzIFVuaWNvZGUgaW4gdGhlIFB5dGhvbiBwYXJzZXIuCisKKy0gSXNzdWUgIzExNjE5OiBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGUoKSBkb2Vzbid0IGVuY29kZSB0aGUgcGF0aCB0byBieXRlcworICBvbiBXaW5kb3dzLgorCistIElzc3VlICMxMDk5ODogUmVtb3ZlIG1lbnRpb25zIG9mIC1RLCBzeXMuZmxhZ3MuZGl2aXNpb25fd2FybmluZyBhbmQKKyAgUHlfRGl2aXNpb25XYXJuaW5nRmxhZyBsZWZ0IG92ZXIgZnJvbSBQeXRob24gMi4KKworLSBJc3N1ZSAjMTEyNDQ6IFJlbW92ZSBhbiB1bm5lY2Vzc2FyeSBwZWVwaG9sZXIgY2hlY2sgdGhhdCB3YXMgcHJldmVudGluZworICBuZWdhdGl2ZSB6ZXJvcyBmcm9tIGJlaW5nIGNvbnN0YW50LWZvbGRlZCBwcm9wZXJseS4KKworLSBJc3N1ZSAjMTEzOTU6IGlvLkZpbGVJTygpLndyaXRlKCkgY2xhbXBzIHRoZSBkYXRhIGxlbmd0aCB0byAzMiw3NjcgYnl0ZXMgb24KKyAgV2luZG93cyBpZiB0aGUgZmlsZSBpcyBhIFRUWSB0byB3b3JrYXJvdW5kIGEgV2luZG93cyBidWcuIFRoZSBXaW5kb3dzIGNvbnNvbGUKKyAgcmV0dXJucyBhbiBlcnJvciAoMTI6IG5vdCBlbm91Z2ggc3BhY2UgZXJyb3IpIG9uIHdyaXRpbmcgaW50byBzdGRvdXQgaWYKKyAgc3Rkb3V0IG1vZGUgaXMgYmluYXJ5IGFuZCB0aGUgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiA2NiwwMDAgYnl0ZXMgKG9yIGxlc3MsCisgIGRlcGVuZGluZyBvbiBoZWFwIHVzYWdlKS4KKworLSBJc3N1ZSAjMTEzMjA6IGZpeCBib2d1cyBtZW1vcnkgbWFuYWdlbWVudCBpbiBNb2R1bGVzL2dldHBhdGguYywgbGVhZGluZyB0bworICBhIHBvc3NpYmxlIGNyYXNoIHdoZW4gY2FsbGluZyBQeV9TZXRQYXRoKCkuCisKKy0gSXNzdWUgIzExNDMyOiBBIGJ1ZyB3YXMgaW50cm9kdWNlZCBpbiBzdWJwcm9jZXNzLlBvcGVuIG9uIHBvc2l4IHN5c3RlbXMgd2l0aAorICAzLjIuMCB3aGVyZSB0aGUgc3Rkb3V0IG9yIHN0ZGVyciBmaWxlIGRlc2NyaXB0b3IgYmVpbmcgdGhlIHNhbWUgYXMgdGhlIHN0ZGluCisgIGZpbGUgZGVzY3JpcHRvciB3b3VsZCByYWlzZSBhbiBleGNlcHRpb24uIHdlYmJyb3dzZXIub3BlbiB3b3VsZCBmYWlsLiBmaXhlZC4KKworLSBJc3N1ZSAjOTg1NjogQ2hhbmdlIG9iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0IHN0cmluZworICB0byBiZSBhIERlcHJlY2F0aW9uV2FybmluZy4gSW4gMy4yIGl0IHdhcyBhIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcuCisgIEluIDMuNCBpdCB3aWxsIGJlIGEgVHlwZUVycm9yLgorCistIElzc3VlICMxMTI0NDogVGhlIHBlZXBob2xlIG9wdGltaXplciBpcyBub3cgYWJsZSB0byBjb25zdGFudC1mb2xkCisgIGFyYml0cmFyaWx5IGNvbXBsZXggZXhwcmVzc2lvbnMuICBUaGlzIGFsc28gZml4ZXMgYSAzLjIgcmVncmVzc2lvbiB3aGVyZQorICBvcGVyYXRpb25zIGludm9sdmluZyBuZWdhdGl2ZSBudW1iZXJzIHdlcmUgbm90IGNvbnN0YW50LWZvbGRlZC4KKworLSBJc3N1ZSAjMTE0NTA6IERvbid0IHRydW5jYXRlIGhnIHZlcnNpb24gaW5mbyBpbiBQeV9HZXRCdWlsZEluZm8oKSB3aGVuCisgIHRoZXJlIGFyZSBtYW55IHRhZ3MgKGUuZy4gd2hlbiB1c2luZyBtcSkuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExMzM1OiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIGxpc3Quc29ydCB3aGVuIHRoZSBrZXkgZnVuY3Rpb24KKyAgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjODkyMzogV2hlbiBhIHN0cmluZyBpcyBlbmNvZGVkIHRvIFVURi04IGluIHN0cmljdCBtb2RlLCB0aGUgcmVzdWx0IGlzCisgIGNhY2hlZCBpbnRvIHRoZSBvYmplY3QuIEV4YW1wbGVzOiBzdHIuZW5jb2RlKCksIHN0ci5lbmNvZGUoJ3V0Zi04JyksCisgIFB5VW5pY29kZV9Bc1VURjhTdHJpbmcoKSBhbmQgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh1bmljb2RlLCAidXRmLTgiLAorICBOVUxMKS4KKworLSBJc3N1ZSAjMTA4MzE6IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgc3VwcG9ydHMgJWxpLCAlbGxpIGFuZCAlemkgZm9ybWF0cy4KKworLSBJc3N1ZSAjMTA4Mjk6IFJlZmFjdG9yIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCksIHVzZSB0aGUgc2FtZSBmdW5jdGlvbiB0byBwYXJzZQorICB0aGUgZm9ybWF0IHN0cmluZyBpbiB0aGUgMyBzdGVwcywgZml4IGNyYXNocyBvbiBpbnZhbGlkIGZvcm1hdCBzdHJpbmdzLgorCistIElzc3VlICMxMzAwNzogd2hpY2hkYiBzaG91bGQgcmVjb2duaXplIGdkYm0gMS45IG1hZ2ljIG51bWJlcnMuCisKKy0gSXNzdWUgIzExMjQ2OiBGaXggUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVWIikgdG8gZGVjb2RlIHRoZSBieXRlIHN0cmluZyBmcm9tCisgIFVURi04ICh3aXRoIHJlcGxhY2UgZXJyb3IgaGFuZGxlcikgaW5zdGVhZCBvZiBJU08tODg1OS0xIChpbiBzdHJpY3QgbW9kZSkuCisgIFBhdGNoIHdyaXR0ZW4gYnkgUmF5IEFsbGVuLgorCistIElzc3VlICMxMTI4NjogUmFpc2UgYSBWYWx1ZUVycm9yIGZyb20gY2FsbGluZyBQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlciB3aXRoCisgIGEgYnVmZmVyIHN0cnVjdCBoYXZpbmcgYSBOVUxMIGRhdGEgcG9pbnRlci4KKworLSBJc3N1ZSAjMTEyNzI6IE9uIFdpbmRvd3MsIGlucHV0KCkgc3RyaXBzICdccicgKGFuZCBub3Qgb25seSAnXG4nKSwgYW5kCisgIHN5cy5zdGRpbiB1c2VzIHVuaXZlcnNhbCBuZXdsaW5lIChyZXBsYWNlICdcclxuJyBieSAnXG4nKS4KKworLSBJc3N1ZSAjMTE4Mjg6IHN0YXJ0c3dpdGggYW5kIGVuZHN3aXRoIG5vdyBhY2NlcHQgTm9uZSBhcyBzbGljZSBpbmRleC4KKyAgUGF0Y2ggYnkgVG9yc3RlbiBCZWNrZXIuCisKKy0gSXNzdWUgIzEwODMwOiBGaXggUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCIlYyIpIGZvciBub24tQk1QIGNoYXJhY3RlcnMgb24KKyAgbmFycm93IGJ1aWxkLgorCistIElzc3VlICMxMTE2ODogUmVtb3ZlIGZpbGVuYW1lIGRlYnVnIHZhcmlhYmxlIGZyb20gUHlFdmFsX0V2YWxGcmFtZUV4KCkuCisgIEl0IGVuY29kZWQgdGhlIFVuaWNvZGUgZmlsZW5hbWUgdG8gVVRGLTgsIGJ1dCB0aGUgZW5jb2RpbmcgZmFpbHMgb24KKyAgdW5kZWNvZGFibGUgZmlsZW5hbWUgKG9uIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzKSB3aGljaCByYWlzZXMgYW4gdW5leHBlY3RlZAorICBVbmljb2RlRW5jb2RlRXJyb3Igb24gcmVjdXJzaW9uIGxpbWl0LgorCistIElzc3VlICMxMTE4NzogUmVtb3ZlIGJvb3RzdHJhcCBjb2RlICh1c2UgQVNDSUkpIG9mCisgIFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcoKSwgaXQgd2FzIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIGZhbGxiYWNrICh1c2UgdGhlCisgIGxvY2FsZSBlbmNvZGluZykgaW4gUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdCgpLgorCistIENoZWNrIGZvciBOVUxMIHJlc3VsdCBpbiBQeVR5cGVfRnJvbVNwZWMuCisKKy0gSXNzdWUgIzEwNTE2OiBOZXcgY29weSgpIGFuZCBjbGVhcigpIG1ldGhvZHMgZm9yIGxpc3RzIGFuZCBieXRlYXJyYXlzLgorCistIElzc3VlICMxMTM4NjogYnl0ZWFycmF5LnBvcCgpIG5vdyB0aHJvd3MgSW5kZXhFcnJvciB3aGVuIHRoZSBieXRlYXJyYXkgaXMKKyAgZW1wdHksIGluc3RlYWQgb2YgT3ZlcmZsb3dFcnJvci4KKworLSBJc3N1ZSAjMTIzODA6IFRoZSByanVzdCwgbGp1c3QgYW5kIGNlbnRlciBtZXRob2RzIG9mIGJ5dGVzIGFuZCBieXRlYXJyYXkKKyAgbm93IGFjY2VwdCBhIGJ5dGVhcnJheSBhcmd1bWVudC4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNDE5NTogQW4gaXNzdWUgdGhhdCBjYXVzZWQgd2Vha3JlZi5XZWFrU2V0IGluc3RhbmNlcyB0byBpbmNvcnJlY3RseQorICByZXR1cm4gVHJ1ZSBmb3IgYSBXZWFrU2V0IGluc3RhbmNlICdhJyBpbiBib3RoICdhIDwgYScgYW5kICdhID4gYScgaGFzIGJlZW4KKyAgZml4ZWQuCisKKy0gSXNzdWUgIzE0MTY2OiBQaWNrbGVyIG9iamVjdHMgbm93IGhhdmUgYW4gb3B0aW9uYWwgYGBkaXNwYXRjaF90YWJsZWBgCisgIGF0dHJpYnV0ZSB3aGljaCBhbGxvd3MgdG8gc2V0IGN1c3RvbSBwZXItcGlja2xlciByZWR1Y3Rpb24gZnVuY3Rpb25zLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0MTc3OiBtYXJzaGFsLmxvYWRzKCkgbm93IHJhaXNlcyBUeXBlRXJyb3Igd2hlbiBnaXZlbiBhbiB1bmljb2RlCisgIHN0cmluZy4gIFBhdGNoIGJ5IEd1aWxoZXJtZSBHb27Dp2FsdmVzLgorCistIElzc3VlICMxMzU1MDogUmVtb3ZlIHRoZSBkZWJ1ZyBtYWNoaW5lcnkgZnJvbSB0aGUgdGhyZWFkaW5nIG1vZHVsZTogcmVtb3ZlCisgIHZlcmJvc2UgYXJndW1lbnRzIGZyb20gYWxsIHRocmVhZGluZyBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE0MTU5OiBGaXggdGhlIGxlbigpIG9mIHdlYWsgY29udGFpbmVycyAoV2Vha1NldCwgV2Vha0tleURpY3Rpb25hcnksCisgIFdlYWtWYWx1ZURpY3Rpb25hcnkpIHRvIHJldHVybiBhIGJldHRlciBhcHByb3hpbWF0aW9uIHdoZW4gc29tZSBvYmplY3RzCisgIGFyZSBkZWFkIG9yIGR5aW5nLiAgTW9yZW92ZXIsIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3cgTygxKSByYXRoZXIgdGhhbgorICBPKG4pLgorCistIElzc3VlICMxMzEyNTogU2lsZW5jZSBzcHVyaW91cyB0ZXN0X2xpYjJ0bzMgb3V0cHV0IHdoZW4gaW4gbm9uLXZlcmJvc2UgbW9kZS4KKyAgUGF0Y2ggYnkgTWlraGFpbCBOb3Zpa292LgorCistIElzc3VlICMxMTg0MTogRml4IGNvbXBhcmlzb24gYnVnIHdpdGggJ3JjJyB2ZXJzaW9ucyBpbiBwYWNrYWdpbmcudmVyc2lvbi4KKyAgUGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTM0NDc6IEFkZCBhIHRlc3QgZmlsZSB0byBob3N0IHJlZ3Jlc3Npb24gdGVzdHMgZm9yIGJ1Z3MgaW4gdGhlCisgIHNjcmlwdHMgZm91bmQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjNjg4NDogRml4IGxvbmctc3RhbmRpbmcgYnVncyB3aXRoIE1BTklGRVNULmluIHBhcnNpbmcgaW4gZGlzdHV0aWxzCisgIG9uIFdpbmRvd3MuICBBbHNvIGZpeGVkIGluIHBhY2thZ2luZy4KKworLSBJc3N1ZSAjODAzMzogc3FsaXRlMzogRml4IDY0LWJpdCBpbnRlZ2VyIGhhbmRsaW5nIGluIHVzZXIgZnVuY3Rpb25zCisgIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLiBJbml0aWFsIHBhdGNoIGJ5IFBoaWxpcHBlIERldmFsa2VuZWVyLgorCistIEhUTUxQYXJzZXIgaXMgbm93IGFibGUgdG8gaGFuZGxlIHNsYXNoZXMgaW4gdGhlIHN0YXJ0IHRhZy4KKworLSBJc3N1ZSAjMTM2NDE6IERlY29kaW5nIGZ1bmN0aW9ucyBpbiB0aGUgYmFzZTY0IG1vZHVsZSBub3cgYWNjZXB0IEFTQ0lJLW9ubHkKKyAgdW5pY29kZSBzdHJpbmdzLiAgUGF0Y2ggYnkgQ2F0YWxpbiBJYWNvYi4KKworLSBJc3N1ZSAjMTQwNDM6IFNwZWVkIHVwIGltcG9ydGxpYidzIF9GaWxlRmluZGVyIGJ5IGF0IGxlYXN0IDh4LCBhbmQgYWRkIGEKKyAgbmV3IGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpIGZ1bmN0aW9uLgorCistIElzc3VlICMxNDAwMTogQ1ZFLTIwMTItMDg0NTogeG1scnBjOiBGaXggYW4gZW5kbGVzcyBsb29wIGluCisgIFNpbXBsZVhNTFJQQ1NlcnZlciB1cG9uIG1hbGZvcm1lZCBQT1NUIHJlcXVlc3QuCisKKy0gSXNzdWUgIzEzOTYxOiBNb3ZlIGltcG9ydGxpYiBvdmVyIHRvIHVzaW5nIG9zLnJlcGxhY2UoKSBmb3IgYXRvbWljIHJlbmFtaW5nLgorCistIERvIGF3YXkgd2l0aCBhbWJpZ3VvdXMgbGV2ZWwgdmFsdWVzIChhcyBzdWdnZXN0ZWQgYnkgUEVQIDMyOCkgaW4KKyAgaW1wb3J0bGliLl9faW1wb3J0X18oKSBieSByYWlzaW5nIFZhbHVlRXJyb3Igd2hlbiBsZXZlbCA8IDAuCisKKy0gSXNzdWUgIzI0ODk6IHB0eS5zcGF3biBjb3VsZCBjb25zdW1lIDEwMCUgY3B1IHdoZW4gaXQgZW5jb3VudGVyZWQgYW4gRU9GLgorCistIElzc3VlICMxMzAxNDogRml4IGEgcG9zc2libGUgcmVmZXJlbmNlIGxlYWsgaW4gU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkuCisKKy0gSXNzdWUgIzEzNzc3OiBBZGQgUEZfU1lTVEVNIHNvY2tldHMgb24gT1MgWC4KKyAgUGF0Y2ggYnkgTWljaGFlbCBHb2RlcmJhdWVyLgorCistIElzc3VlICMxMzAxNTogRml4IGEgcG9zc2libGUgcmVmZXJlbmNlIGxlYWsgaW4gZGVmYXVsdGRpY3QuX19yZXByX18uCisgIFBhdGNoIGJ5IFN1bWFuIFNhaGEuCisKKy0gSXNzdWUgIzEzMjYxMTM6IGRpc3R1dGlscycgYW5kIHBhY2thZ2luZydzIGJ1aWxkX2V4dCBjb21tYW5kcyBvcHRpb24gbm93CisgIGNvcnJlY3RseSBwYXJzZXMgbXVsdGlwbGUgdmFsdWVzIChzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSBvciBjb21tYXMpIGdpdmVuCisgIHRvIHRoZWlyIC0tbGlicmFyaWVzIG9wdGlvbi4KKworLSBJc3N1ZSAjMTAyODc6IG5udHBsaWIgbm93IHF1ZXJpZXMgdGhlIHNlcnZlcidzIENBUEFCSUxJVElFUyBmaXJzdCBiZWZvcmUKKyAgc2VuZGluZyBNT0RFIFJFQURFUiwgYW5kIG9ubHkgc2VuZHMgaXQgaWYgbm90IGFscmVhZHkgaW4gUkVBREVSIG1vZGUuCisgIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM5OTM6IEhUTUxQYXJzZXIgaXMgbm93IGFibGUgdG8gaGFuZGxlIGJyb2tlbiBlbmQgdGFncyB3aGVuCisgIHN0cmljdD1GYWxzZS4KKworLSBJc3N1ZSAjMTM5MzA6IGxpYjJ0bzMgbm93IHN1cHBvcnRzIHdyaXRpbmcgY29udmVydGVkIG91dHB1dCBmaWxlcyB0byBhbm90aGVyCisgIGRpcmVjdG9yeSB0cmVlIGFzIHdlbGwgYXMgY29weWluZyB1bmNoYW5nZWQgZmlsZXMgYW5kIGFsdGVyaW5nIHRoZSBmaWxlCisgIHN1ZmZpeC4KKworLSBJc3N1ZSAjOTc1MDogRml4IHNxbGl0ZTMuQ29ubmVjdGlvbi5pdGVyZHVtcCBvbiB0YWJsZXMgYW5kIGZpZWxkcworICB3aXRoIGEgbmFtZSB0aGF0IGlzIGEga2V5d29yZCBvciBjb250YWlucyBxdW90ZXMuIFBhdGNoIGJ5IE1hcmtvCisgIEtvaHRhbGEuCisKKy0gSXNzdWUgIzEwMjg3OiBubnRwbGliIG5vdyBxdWVyaWVzIHRoZSBzZXJ2ZXIncyBDQVBBQklMSVRJRVMgYWdhaW4gYWZ0ZXIKKyAgYXV0aGVudGljYXRpbmcgKHNpbmNlIHRoZSByZXN1bHQgbWF5IGNoYW5nZSwgYWNjb3JkaW5nIHRvIFJGQyA0NjQzKS4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMzk4OTogRG9jdW1lbnQgdGhhdCBHemlwRmlsZSBkb2VzIG5vdCBzdXBwb3J0IHRleHQgbW9kZSwgYW5kIGdpdmUgYQorICBtb3JlIGhlbHBmdWwgZXJyb3IgbWVzc2FnZSB3aGVuIG9wZW5lZCB3aXRoIGFuIGludmFsaWQgbW9kZSBzdHJpbmcuCisKKy0gSXNzdWUgIzEzNTkwOiBPbiBPUyBYIDEwLjcgYW5kIDEwLjYgd2l0aCBYY29kZSA0LjIsIGJ1aWxkaW5nCisgIERpc3R1dGlscy1iYXNlZCBwYWNrYWdlcyB3aXRoIEMgZXh0ZW5zaW9uIG1vZHVsZXMgbWF5IGZhaWwgYmVjYXVzZQorICBBcHBsZSBoYXMgcmVtb3ZlZCBnY2MtNC4yLCB0aGUgdmVyc2lvbiB1c2VkIHRvIGJ1aWxkIHB5dGhvbi5vcmcKKyAgNjQtYml0LzMyLWJpdCBQeXRob25zLiAgSWYgdGhlIHVzZXIgZG9lcyBub3QgZXhwbGljaXRseSBvdmVycmlkZQorICB0aGUgZGVmYXVsdCBDIGNvbXBpbGVyIGJ5IHNldHRpbmcgdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlLAorICBEaXN0dXRpbHMgd2lsbCBub3cgYXR0ZW1wdCB0byBjb21waWxlIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggY2xhbmcKKyAgaWYgZ2NjLTQuMiBpcyByZXF1aXJlZCBidXQgbm90IGZvdW5kLiBBbHNvIGFzIGEgY29udmVuaWVuY2UsIGlmCisgIHRoZSB1c2VyIGRvZXMgZXhwbGljaXRseSBzZXQgQ0MsIHN1YnN0aXR1dGUgaXRzIHZhbHVlIGFzIHRoZSBkZWZhdWx0CisgIGNvbXBpbGVyIGluIHRoZSBEaXN0dXRpbHMgTERTSEFSRUQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmb3IgT1MgWC4KKyAgKE5vdGUsIHRoZSBweXRob24ub3JnIDMyLWJpdC1vbmx5IFB5dGhvbnMgdXNlIGdjYy00LjAgYW5kIHRoZSAxMC40dQorICBTREssIG5laXRoZXIgb2Ygd2hpY2ggYXJlIGF2YWlsYWJsZSBpbiBYY29kZSA0LiAgVGhpcyBjaGFuZ2UgZG9lcyBub3QKKyAgYXR0ZW1wdCB0byBvdmVycmlkZSBzZXR0aW5ncyB0byBzdXBwb3J0IHRoZWlyIHVzZSB3aXRoIFhjb2RlIDQuKQorCistIElzc3VlICMxMzk2MDogSFRNTFBhcnNlciBpcyBub3cgYWJsZSB0byBoYW5kbGUgYnJva2VuIGNvbW1lbnRzIHdoZW4KKyAgc3RyaWN0PUZhbHNlLgorCistIElzc3VlICMxMzkyMTogVW5kb2N1bWVudCBhbmQgY2xlYW4gdXAgc3FsaXRlMy5PcHRpbWl6ZWRVbmljb2RlLAorICB3aGljaCBpcyBvYnNvbGV0ZSBpbiBQeXRob24gMy54LiBJdCdzIG5vdyBhbGlhc2VkIHRvIHN0ciBmb3IKKyAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKy0gV2hlbiAnJyBpcyBhIHBhdGggKGUuZy4gaW4gc3lzLnBhdGgpLCBtYWtlIHN1cmUgX19maWxlX18gdXNlcyB0aGUgY3VycmVudAorICB3b3JraW5nIGRpcmVjdG9yeSBpbnN0ZWFkIG9mICcnIGluIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTM2MDk6IEFkZCB0d28gZnVuY3Rpb25zIHRvIHF1ZXJ5IHRoZSB0ZXJtaW5hbCBzaXplOgorICBvcy5nZXRfdGVybWluYWxfc2l6ZSAobG93IGxldmVsKSBhbmQgc2h1dGlsLmdldF90ZXJtaW5hbF9zaXplIChoaWdoIGxldmVsKS4KKyAgUGF0Y2ggYnkgWmJpZ25pZXcgSsSZZHJ6ZWpld3NraS1Tem1lay4KKworLSBJc3N1ZSAjMTM4NDU6IE9uIFdpbmRvd3MsIHRpbWUudGltZSgpIG5vdyB1c2VzIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCkKKyAgaW5zdGVhZCBvZiBmdGltZSgpIHRvIGhhdmUgYSByZXNvbHV0aW9uIG9mIDEwMCBucyBpbnN0ZWFkIG9mIDEgbXMgKHRoZSBjbG9jaworICBhY2N1cmFjeSBpcyBiZXR3ZWVuIDAuNSBtcyBhbmQgMTUgbXMpLgorCistIElzc3VlICMxMzg0NjogQWRkIHRpbWUubW9ub3RvbmljKCksIG1vbm90b25pYyBjbG9jay4KKworLSBJc3N1ZSAjODE4NDogbXVsdGlwcm9jZXNzaW5nOiBPbiBXaW5kb3dzLCBkb24ndCBzZXQgU09fUkVVU0VBRERSIG9uCisgIENvbm5lY3Rpb24gc29ja2V0cywgYW5kIHNldCBGSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRSBvbiBuYW1lZCBwaXBlcywgdG8KKyAgbWFrZSBzdXJlIHR3byBsaXN0ZW5lcnMgY2FuJ3QgYmluZCB0byB0aGUgc2FtZSBzb2NrZXQvcGlwZSAob3IgYW55IGV4aXN0aW5nCisgIHNvY2tldC9waXBlKS4KKworLSBJc3N1ZSAjMTA4MTE6IEZpeCByZWN1cnNpdmUgdXNhZ2Ugb2YgY3Vyc29ycy4gSW5zdGVhZCBvZiBjcmFzaGluZywKKyAgcmFpc2UgYSBQcm9ncmFtbWluZ0Vycm9yIG5vdy4KKworLSBJc3N1ZSAjMTA4ODE6IEZpeCB0ZXN0X3NpdGUgZmFpbHVyZSB3aXRoIE9TIFggZnJhbWV3b3JrIGJ1aWxkcy4KKworLSBJc3N1ZSAjOTY0NDM3OiBNYWtlIElETEUgaGVscCB3aW5kb3cgbm9uLW1vZGFsLgorICBQYXRjaCBieSBHdWlsaGVybWUgUG9sbyBhbmQgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzEzNzM0OiBBZGQgb3MuZndhbGsoKSwgYSBkaXJlY3Rvcnkgd2Fsa2luZyBmdW5jdGlvbiB5aWVsZGluZyBmaWxlCisgIGRlc2NyaXB0b3JzLgorCistIElzc3VlICMyOTQ1OiBNYWtlIHRoZSBkaXN0dXRpbHMgdXBsb2FkIGNvbW1hbmQgYXdhcmUgb2YgYmRpc3RfcnBtIHByb2R1Y3RzLgorCistIElzc3VlICMxMzcxMjogcHlzZXR1cCBjcmVhdGUgc2hvdWxkIG5vdCBjb252ZXJ0IHBhY2thZ2VfZGF0YSB0byBleHRyYV9maWxlcy4KKworLSBJc3N1ZSAjMTE4MDU6IHBhY2thZ2VfZGF0YSBpbiBzZXR1cC5jZmcgc2hvdWxkIGFsbG93IG1vcmUgdGhhbiBvbmUgdmFsdWUuCisKKy0gSXNzdWUgIzEzOTMzOiBJRExFIGF1dG8tY29tcGxldGUgZGlkIG5vdCB3b3JrIHdpdGggc29tZSBpbXBvcnRlZAorICBtb2R1bGUsIGxpa2UgaGFzaGxpYi4gIChQYXRjaCBieSBSb2dlciBTZXJ3eSkKKworLSBJc3N1ZSAjMTM5MDE6IFByZXZlbnQgdGVzdF9kaXN0dXRpbHMgZmFpbHVyZXMgb24gT1MgWCB3aXRoIC0tZW5hYmxlLXNoYXJlZC4KKworLSBJc3N1ZSAjMTM2NzY6IEhhbmRsZSBzdHJpbmdzIHdpdGggZW1iZWRkZWQgemVyb3MgY29ycmVjdGx5IGluIHNxbGl0ZTMuCisKKy0gSXNzdWUgIzEzNTA2OiBBZGQgJycgdG8gcGF0aCBmb3IgSURMRSBTaGVsbCB3aGVuIHN0YXJ0ZWQgYW5kIHJlc3RhcnRlZCB3aXRoIFJlc3RhcnQgU2hlbGwuCisgIE9yaWdpbmFsIHBhdGNoZXMgYnkgTWFyY28gU2NhdGFnbGluaSBhbmQgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzg4Mjg6IEFkZCBuZXcgZnVuY3Rpb24gb3MucmVwbGFjZSgpLCBmb3IgY3Jvc3MtcGxhdGZvcm0gcmVuYW1pbmcKKyAgd2l0aCBvdmVyd3JpdGluZy4KKworLSBJc3N1ZSAjMTM4NDg6IG9wZW4oKSBhbmQgdGhlIEZpbGVJTyBjb25zdHJ1Y3RvciBub3cgY2hlY2sgZm9yIE5VTAorICBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIG5hbWUuICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEzODA2OiBUaGUgc2l6ZSBjaGVjayBpbiBhdWRpb29wIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zIHdhcyB0b28KKyAgc3RyaWN0IGFuZCBjb3VsZCByZWplY3QgdmFsaWQgY29tcHJlc3NlZCBkYXRhLiAgUGF0Y2ggYnkgT2xlZyBQbGFraG90bnl1ay4KKworLSBJc3N1ZSAjMTM4MTI6IFdoZW4gYSBtdWx0aXByb2Nlc3NpbmcgUHJvY2VzcyBjaGlsZCByYWlzZXMgYW4gZXhjZXB0aW9uLAorICBmbHVzaCBzdGRlcnIgYWZ0ZXIgcHJpbnRpbmcgdGhlIGV4Y2VwdGlvbiB0cmFjZWJhY2suCisKKy0gSXNzdWUgIzEzODg1OiBDVkUtMjAxMS0zMzg5OiB0aGUgX3NzbCBtb2R1bGUgd291bGQgYWx3YXlzIGRpc2FibGUgdGhlIENCQworICBJViBhdHRhY2sgY291bnRlcm1lYXN1cmUuCisKKy0gSXNzdWUgIzEzODQ3OiB0aW1lLmxvY2FsdGltZSgpIGFuZCB0aW1lLmdtdGltZSgpIG5vdyByYWlzZSBhbiBPU0Vycm9yIGluc3RlYWQKKyAgb2YgVmFsdWVFcnJvciBvbiBmYWlsdXJlLiB0aW1lLmN0aW1lKCkgYW5kIHRpbWUuYXNjdGltZSgpIG5vdyByYWlzZXMgYW4KKyAgT1NFcnJvciBpZiBsb2NhbHRpbWUoKSBmYWlsZWQuIHRpbWUuY2xvY2soKSBub3cgcmFpc2VzIGEgUnVudGltZUVycm9yIGlmIHRoZQorICBwcm9jZXNzb3IgdGltZSB1c2VkIGlzIG5vdCBhdmFpbGFibGUgb3IgaXRzIHZhbHVlIGNhbm5vdCBiZSByZXByZXNlbnRlZAorCistIElzc3VlICMxMzg2MjogRml4IHNwdXJpb3VzIGZhaWx1cmUgaW4gdGVzdF96bGliIGR1ZSB0byBydW50aW1lL2NvbXBpbGUgdGltZQorICBtaW5vciB2ZXJzaW9ucyBub3QgbWF0Y2hpbmcuCisKKy0gSXNzdWUgIzEyODA0OiBGaXggdGVzdF9zb2NrZXQgYW5kIHRlc3RfdXJsbGliMm5ldCBmYWlsdXJlcyB3aGVuIHJ1bm5pbmcgdGVzdHMKKyAgb24gYSBzeXN0ZW0gd2l0aG91dCBpbnRlcm5ldCBhY2Nlc3MuCisKKy0gSXNzdWUgIzEzNzcyOiBJbiBvcy5zeW1saW5rKCkgdW5kZXIgV2luZG93cywgZG8gbm90IHRyeSB0byBndWVzcyB0aGUgbGluaworICB0YXJnZXQncyB0eXBlIChmaWxlIG9yIGRpcmVjdG9yeSkuICBUaGUgZGV0ZWN0aW9uIHdhcyBidWdneSBhbmQgbWFkZSB0aGUKKyAgY2FsbCBub24tYXRvbWljICh0aGVyZWZvcmUgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zKS4KKworLSBJc3N1ZSAjNjYzMTogRGlzYWxsb3cgcmVsYXRpdmUgZmlsZSBwYXRocyBpbiB1cmxsaWIgdXJsb3BlbiBtZXRob2RzLgorCistIElzc3VlICMxMzcyMjogQXZvaWQgc2lsZW5jaW5nIEltcG9ydEVycm9ycyB3aGVuIGluaXRpYWxpemluZyB0aGUgY29kZWNzCisgIHJlZ2lzdHJ5LgorCistIElzc3VlICMxMzc4MTogRml4IEd6aXBGaWxlIGJ1ZyB0aGF0IGNhdXNlZCBhbiBleGNlcHRpb24gdG8gYmUgcmFpc2VkIHdoZW4KKyAgb3BlbmluZyBmb3Igd3JpdGluZyB1c2luZyBhIGZpbGVvYmogcmV0dXJuZWQgYnkgb3MuZmRvcGVuKCkuCisKKy0gSXNzdWUgIzEzODAzOiBVbmRlciBTb2xhcmlzLCBkaXN0dXRpbHMgZG9lc24ndCBpbmNsdWRlIGJpdG5lc3MKKyAgaW4gdGhlIGRpcmVjdG9yeSBuYW1lLgorCistIElzc3VlICMxMDI3ODogQWRkIHRpbWUud2FsbGNsb2NrKCkgZnVuY3Rpb24sIG1vbm90b25pYyBjbG9jay4KKworLSBJc3N1ZSAjMTM4MDk6IEZpeCByZWdyZXNzaW9uIHdoZXJlIGJ6MiBtb2R1bGUgd291bGRuJ3Qgd29yayB3aGVuIHRocmVhZHMgYXJlCisgIGRpc2FibGVkLiBPcmlnaW5hbCBwYXRjaCBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KKworLSBJc3N1ZSAjMTM1ODk6IEZpeCBzb21lIHNlcmlhbGl6YXRpb24gcHJpbWl0aXZlcyBpbiB0aGUgYWlmYyBtb2R1bGUuCisgIFBhdGNoIGJ5IE9sZWcgUGxha2hvdG55dWsuCisKKy0gSXNzdWUgIzEzNjQyOiBVbnF1b3RlIGJlZm9yZSBiNjRlbmNvZGluZyB1c2VyOnBhc3N3b3JkIGR1cmluZyBCYXNpYworICBBdXRoZW50aWNhdGlvbi4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSm9vbmFzIEt1b3JpbGVodG8uCisKKy0gSXNzdWUgIzEzNzI2OiBGaXggdGhlIGFtYmlndW91cyAtUyBmbGFnIGluIHJlZ3J0ZXN0LiBJdCBpcyAtby8tLXNsb3cgZm9yIHNsb3cKKyAgdGVzdHMuCisKKy0gSXNzdWUgIzEyMzY0OiBGaXggYSBoYW5nIGluIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yLgorICBUaGUgaGFuZyB3b3VsZCBvY2N1ciB3aGVuIHJldHJpZXZpbmcgdGhlIHJlc3VsdCBvZiBhIHNjaGVkdWxlZCBmdXR1cmUgYWZ0ZXIKKyAgdGhlIGV4ZWN1dG9yIGhhZCBiZWVuIHNodXQgZG93bi4KKworLSBJc3N1ZSAjMTM1MDI6IHRocmVhZGluZzogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gRXZlbnQud2FpdCgpIHRoYXQgbWFkZSBpdAorICByZXR1cm4gRmFsc2Ugd2hlbiB0aGUgZXZlbnQgd2FzIHNldCBhbmQgY2xlYXJlZCByaWdodCBhZnRlci4KKworLSBJc3N1ZSAjOTk5MzogV2hlbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgb24gZGlmZmVyZW50IGZpbGVzeXN0ZW1zLAorICBhbmQgdGhlIHNvdXJjZSBpcyBhIHN5bWxpbmssIHNodXRpbC5tb3ZlKCkgbm93IHJlY3JlYXRlcyBhIHN5bWxpbmsgb24gdGhlCisgIGRlc3RpbmF0aW9uIGluc3RlYWQgb2YgY29weWluZyB0aGUgZmlsZSBjb250ZW50cy4gIFBhdGNoIGJ5IEpvbmF0aGFuIE5pZWhvZgorICBhbmQgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMjkyNjogRml4IGEgYnVnIGluIHRhcmZpbGUncyBsaW5rIGV4dHJhY3Rpb24uCisKKy0gSXNzdWUgIzEzNjk2OiBGaXggdGhlIDMwMiBSZWxhdGl2ZSBVUkwgUmVkaXJlY3Rpb24gcHJvYmxlbS4KKworLSBJc3N1ZSAjMTM2MzY6IFdlYWsgY2lwaGVycyBhcmUgbm93IGRpc2FibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHNzbCBtb2R1bGUKKyAgKGV4Y2VwdCB3aGVuIFNTTHYyIGlzIGV4cGxpY2l0bHkgYXNrZWQgZm9yKS4KKworLSBJc3N1ZSAjMTI3MTU6IEFkZCBhbiBvcHRpb25hbCBzeW1saW5rcyBhcmd1bWVudCB0byBzaHV0aWwgZnVuY3Rpb25zCisgIChjb3B5ZmlsZSwgY29weW1vZGUsIGNvcHlzdGF0LCBjb3B5LCBjb3B5MikuICBXaGVuIHRoYXQgcGFyYW1ldGVyIGlzCisgIHRydWUsIHN5bWxpbmtzIGFyZW4ndCBkZXJlZmVyZW5jZWQgYW5kIHRoZSBvcGVyYXRpb24gaW5zdGVhZCBhY3RzIG9uIHRoZQorICBzeW1saW5rIGl0c2VsZiAob3IgY3JlYXRlcyBvbmUsIGlmIHJlbGV2YW50KS4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBBZGQgYSBmbGFncyBwYXJhbWV0ZXIgdG8gc2VsZWN0LmVwb2xsLgorCistIElzc3VlICMxMzYyNjogQWRkIHN1cHBvcnQgZm9yIFNTTCBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFuZ2UsIHRocm91Z2ggdGhlCisgIFNTTENvbnRleHQubG9hZF9kaF9wYXJhbXMoKSBtZXRob2QgYW5kIHRoZSBzc2wuT1BfU0lOR0xFX0RIX1VTRSBvcHRpb24uCisKKy0gSXNzdWUgIzExMDA2OiBEb24ndCBpc3N1ZSBsb3cgbGV2ZWwgd2FybmluZyBpbiBzdWJwcm9jZXNzIHdoZW4gcGlwZTIoKSBmYWlscy4KKworLSBJc3N1ZSAjMTM2MjA6IFN1cHBvcnQgZm9yIENocm9tZSBicm93c2VyIGluIHdlYmJyb3dzZXIuICBQYXRjaCBjb250cmlidXRlZAorICBieSBBcm5hdWQgQ2FsbWV0dGVzLgorCistIElzc3VlICMxMTgyOTogRml4IGNvZGUgZXhlY3V0aW9uIGhvbGVzIGluIGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMgZm9yCisgIG1ldGFjbGFzc2VzIHdpdGggbWV0YWNsYXNzZXMuIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTI3MDg6IEFkZCBzdGFybWFwKCkgYW5kIHN0YXJtYXBfYXN5bmMoKSBtZXRob2RzIChzaW1pbGFyIHRvCisgIGl0ZXJ0b29scy5zdGFybWFwKCkpIHRvIG11bHRpcHJvY2Vzc2luZy5Qb29sLiAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxNzg1OiBGaXggaW5zcGVjdCBhbmQgcHlkb2Mgd2l0aCBtaXNiZWhhdmluZyBkZXNjcmlwdG9ycy4KKworLSBJc3N1ZSAjMTM2Mzc6ICJhMmIiIGZ1bmN0aW9ucyBpbiB0aGUgYmluYXNjaWkgbW9kdWxlIG5vdyBhY2NlcHQgQVNDSUktb25seQorICB1bmljb2RlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzNjM0OiBBZGQgc3VwcG9ydCBmb3IgcXVlcnlpbmcgYW5kIGRpc2FibGluZyBTU0wgY29tcHJlc3Npb24uCisKKy0gSXNzdWUgIzEzNjI3OiBBZGQgc3VwcG9ydCBmb3IgU1NMIEVsbGlwdGljIEN1cnZlLWJhc2VkIERpZmZpZS1IZWxsbWFuCisgIGtleSBleGNoYW5nZSwgdGhyb3VnaCB0aGUgU1NMQ29udGV4dC5zZXRfZWNkaF9jdXJ2ZSgpIG1ldGhvZCBhbmQgdGhlCisgIHNzbC5PUF9TSU5HTEVfRUNESF9VU0Ugb3B0aW9uLgorCistIElzc3VlICMxMzYzNTogQWRkIHNzbC5PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UsIHNvIHRoYXQgU1NMIHNlcnZlcnMKKyAgY2hvb3NlIHRoZSBjaXBoZXIgYmFzZWQgb24gdGhlaXIgb3duIHByZWZlcmVuY2VzLCByYXRoZXIgdGhhbiBvbiB0aGUKKyAgY2xpZW50J3MuCisKKy0gSXNzdWUgIzExODEzOiBGaXggaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyBmb3IgbW9kdWxlcy4gUGF0Y2ggYnkgQW5kcmVhcworICBTdMO8aHJrLgorCistIElzc3VlICM3NTAyOiBGaXggZXF1YWxpdHkgY29tcGFyaXNvbiBmb3IgRG9jVGVzdENhc2UgaW5zdGFuY2VzLiAgUGF0Y2ggYnkKKyAgQ8OpZHJpYyBLcmllci4KKworLSBJc3N1ZSAjMTE4NzA6IHRocmVhZGluZzogUHJvcGVybHkgcmVpbml0aWFsaXplIHRocmVhZHMgaW50ZXJuYWwgbG9ja3MgYW5kCisgIGNvbmRpdGlvbiB2YXJpYWJsZXMgdG8gYXZvaWQgZGVhZGxvY2tzIGluIGNoaWxkIHByb2Nlc3Nlcy4KKworLSBJc3N1ZSAjODAzNTogdXJsbGliOiBGaXggYSBidWcgd2hlcmUgdGhlIGNsaWVudCBjb3VsZCByZW1haW4gc3R1Y2sgYWZ0ZXIgYQorICByZWRpcmVjdGlvbiBvciBhbiBlcnJvci4KKworLSBJc3N1ZSAjMTM1NjA6IG9zLnN0cmVycm9yKCkgbm93IHVzZXMgdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nIGluc3RlYWQgb2YKKyAgVVRGLTguCisKKy0gSXNzdWUgIzgzNzM6IFRoZSBmaWxlc3lzdGVtIHBhdGggb2YgQUZfVU5JWCBzb2NrZXRzIG5vdyB1c2VzIHRoZSBmaWxlc3lzdGVtCisgIGVuY29kaW5nIGFuZCB0aGUgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIsIHJhdGhlciB0aGFuIFVURi04LiAgUGF0Y2gKKyAgYnkgRGF2aWQgV2F0c29uLgorCistIElzc3VlICMxMDM1MDogUmVhZCBhbmQgc2F2ZSBlcnJubyBiZWZvcmUgY2FsbGluZyBhIGZ1bmN0aW9uIHdoaWNoIG1pZ2h0CisgIG92ZXJ3cml0ZSBpdC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEhhbGx2YXJkIEIgRnVydXNldGguCisKKy0gSXNzdWUgIzExNjEwOiBJbnRyb2R1Y2UgYSBtb3JlIGdlbmVyYWwgd2F5IHRvIGRlY2xhcmUgYWJzdHJhY3QgcHJvcGVydGllcy4KKworLSBJc3N1ZSAjMTM1OTE6IEEgYnVnIGluIGltcG9ydGxpYiBoYXMgYmVlbiBmaXhlZCB0aGF0IGNhdXNlZCBpbXBvcnRfbW9kdWxlCisgIHRvIGxvYWQgYSBtb2R1bGUgdHdpY2UuCisKKy0gSXNzdWUgIzQ2MjU6IElmIElETEUgY2Fubm90IHdyaXRlIHRvIGl0cyByZWNlbnQgZmlsZSBvciBicmVha3BvaW50IGZpbGVzLAorICBkaXNwbGF5IGEgbWVzc2FnZSBwb3B1cCBhbmQgY29udGludWUgcmF0aGVyIHRoYW4gY3Jhc2guICBPcmlnaW5hbCBwYXRjaCBieQorICBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTM0NDkgc2NoZWQuc2NoZWR1bGVyLnJ1bigpIG1ldGhvZCBoYXMgYSBuZXcgImJsb2NraW5nIiBwYXJhbWV0ZXIgd2hpY2gKKyAgd2hlbiBzZXQgdG8gRmFsc2UgbWFrZXMgcnVuKCkgZXhlY3V0ZSB0aGUgc2NoZWR1bGVkIGV2ZW50cyBkdWUgdG8gZXhwaXJlCisgIHNvb25lc3QgKGlmIGFueSkgYW5kIHRoZW4gcmV0dXJuLiAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sw6AuCisKKy0gSXNzdWUgIzg2ODQgc2NoZWQuc2NoZWR1bGVyIGNsYXNzIGNhbiBiZSBzYWZlbHkgdXNlZCBpbiBtdWx0aS10aHJlYWRlZAorICBlbnZpcm9ubWVudHMuICBQYXRjaCBieSBKb3NpYWggQ2FybHNvbiBhbmQgR2lhbXBhb2xvIFJvZG9sw6AuCisKKy0gQWxpYXMgcmVzb3VyY2UuZXJyb3IgdG8gT1NFcnJvciBhbGEgUEVQIDMxNTEuCisKKy0gSXNzdWUgIzU2ODk6IEFkZCBzdXBwb3J0IGZvciBsem1hIGNvbXByZXNzaW9uIHRvIHRoZSB0YXJmaWxlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyNDg6IFR1cm4gMy4yJ3MgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyBpbnRvIDMuMydzCisgIERlcHJlY2F0aW9uV2FybmluZy4gIEl0IGNvdmVycyAnY2dpLmVzY2FwZScsICdpbXBvcnRsaWIuYWJjLlB5TG9hZGVyJywKKyAgJ2ltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXInLCAnbm50cGxpYi5OTlRQLnhndGl0bGUnLCAnbm50cGxpYi5OTlRQLnhwYXRoJywKKyAgYW5kIHByaXZhdGUgYXR0cmlidXRlcyBvZiAnc210cGQuU01UUENoYW5uZWwnLgorCistIElzc3VlICM1OTA1LCAjMTM1NjA6IHRpbWUuc3RyZnRpbWUoKSBpcyBub3cgdXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlCisgIGVuY29kaW5nLCBpbnN0ZWFkIG9mIFVURi04LCBpZiB0aGUgd2NzZnRpbWUoKSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorCistIElzc3VlICM4NjQxOiBVcGRhdGUgSURMRSAzIHN5bnRheCBjb2xvcmluZyB0byByZWNvZ25pemUgYiIuLiIgYW5kIG5vdCB1Ii4uIi4KKyAgUGF0Y2ggYnkgVGFsIEVpbmF0LgorCistIElzc3VlICMxMzQ2NDogQWRkIGEgcmVhZGludG8oKSBtZXRob2QgdG8gaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLiAgUGF0Y2gKKyAgYnkgSm9uIEt1aG4uCisKKy0gdGFyZmlsZS5weTogQ29ycmVjdGx5IGRldGVjdCBiemlwMiBjb21wcmVzc2VkIHN0cmVhbXMgd2l0aCBibG9ja3NpemVzCisgIG90aGVyIHRoYW4gOTAway4KKworLSBJc3N1ZSAjMTM0Mzk6IEZpeCBtYW55IGVycm9ycyBpbiB0dXJ0bGUgZG9jc3RyaW5ncy4KKworLSBJc3N1ZSAjNjcxNTogQWRkIGEgbW9kdWxlICdsem1hJyBmb3IgY29tcHJlc3Npb24gdXNpbmcgdGhlIExaTUEgYWxnb3JpdGhtLgorICBUaGFua3MgdG8gUGVyIMOYeXZpbmQgS2FybHNlbiBmb3IgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzEzNDg3OiBNYWtlIGluc3BlY3QuZ2V0bW9kdWxlIHJvYnVzdCBhZ2FpbnN0IGNoYW5nZXMgZG9uZSB0bworICBzeXMubW9kdWxlcyB3aGlsZSBpdCBpcyBpdGVyYXRpbmcgb3ZlciBpdC4KKworLSBJc3N1ZSAjMTI2MTg6IEZpeCBhIGJ1ZyB0aGF0IHByZXZlbnRlZCBweV9jb21waWxlIGZyb20gY3JlYXRpbmcgYnl0ZQorICBjb21waWxlZCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBJbml0aWFsIHBhdGNoIGJ5IFNqb2VyZCBkZSBWcmllcy4KKworLSBJc3N1ZSAjMTM0NDQ6IFdoZW4gc3Rkb3V0IGhhcyBiZWVuIGNsb3NlZCBleHBsaWNpdGx5LCB3ZSBzaG91bGQgbm90IGF0dGVtcHQKKyAgdG8gZmx1c2ggaXQgYXQgc2h1dGRvd24gYW5kIHByaW50IGFuIGVycm9yLgorCistIElzc3VlICMxMjU2NzogVGhlIGN1cnNlcyBtb2R1bGUgdXNlcyBVbmljb2RlIGZ1bmN0aW9ucyBmb3IgVW5pY29kZSBhcmd1bWVudHMKKyAgd2hlbiBpdCBpcyBsaW5rZWQgdG8gdGhlIG5jdXJzZXMgbGlicmFyeS4gSXQgZW5jb2RlcyBhbHNvIFVuaWNvZGUgc3RyaW5ncyB0bworICB0aGUgbG9jYWxlIGVuY29kaW5nIGluc3RlYWQgb2YgVVRGLTguCisKKy0gSXNzdWUgIzEyODU2OiBFbnN1cmUgY2hpbGQgcHJvY2Vzc2VzIGRvIG5vdCBpbmhlcml0IHRoZSBwYXJlbnQncyByYW5kb20KKyAgc2VlZCBmb3IgZmlsZW5hbWUgZ2VuZXJhdGlvbiBpbiB0aGUgdGVtcGZpbGUgbW9kdWxlLiAgUGF0Y2ggYnkgQnJpYW4KKyAgSGFycmluZy4KKworLSBJc3N1ZSAjOTk1NzogU3Bvb2xlZFRlbXBvcmFyeUZpbGUudHJ1bmNhdGUoKSBub3cgYWNjZXB0cyBhbiBvcHRpb25hbCBzaXplCisgIHBhcmFtZXRlciwgYXMgb3RoZXIgZmlsZS1saWtlIG9iamVjdHMuICBQYXRjaCBieSBSeWFuIEtlbGx5LgorCistIElzc3VlICMxMzQ1ODogRml4IGEgbWVtb3J5IGxlYWsgaW4gdGhlIHNzbCBtb2R1bGUgd2hlbiBkZWNvZGluZyBhCisgIGNlcnRpZmljYXRlIHdpdGggYSBzdWJqZWN0QWx0TmFtZS4gIFBhdGNoIGJ5IFJvYmVydCBYaWFvLgorCistIElzc3VlICMxMzQxNTogb3MudW5zZXRlbnYoKSBkb2Vzbid0IGlnbm9yZSBlcnJvcnMgYW55bW9yZS4KKworLSBJc3N1ZSAjMTMyNDU6IHNjaGVkLnNjaGVkdWxlciBjbGFzcyBjb25zdHJ1Y3RvcidzIHRpbWVmdW5jIGFuZAorICBkZWxheWZ1bmN0IHBhcmFtZXRlcnMgYXJlIG5vdyBvcHRpb25hbC4KKyAgc2NoZWR1bGVyLmVudGVyIGFuZCBzY2hlZHVsZXIuZW50ZXJhYnMgbWV0aG9kcyBnYWluZWQgYSBuZXcga3dhcmdzIHBhcmFtZXRlci4KKyAgUGF0Y2ggY29udHJpYnV0ZWQgYnkgQ2hyaXMgQ2xhcmsuCisKKy0gSXNzdWUgIzEyMzI4OiBVbmRlciBXaW5kb3dzLCByZWZhY3RvciBoYW5kbGluZyBvZiBDdHJsLUMgZXZlbnRzIGFuZAorICBtYWtlIF9tdWx0aXByb2Nlc3Npbmcud2luMzIuV2FpdEZvck11bHRpcGxlT2JqZWN0cyBpbnRlcnJ1cHRpYmxlIHdoZW4KKyAgdGhlIHdhaXRfZmxhZyBwYXJhbWV0ZXIgaXMgZmFsc2UuICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzEzMzIyOiBGaXggQnVmZmVyZWRXcml0ZXIud3JpdGUoKSB0byBlbnN1cmUgdGhhdCBCbG9ja2luZ0lPRXJyb3IgaXMKKyAgcmFpc2VkIHdoZW4gdGhlIHdyYXBwZWQgcmF3IGZpbGUgaXMgbm9uLWJsb2NraW5nIGFuZCB0aGUgd3JpdGUgd291bGQgYmxvY2suCisgIFByZXZpb3VzIGNvZGUgYXNzdW1lZCB0aGF0IHRoZSByYXcgd3JpdGUoKSB3b3VsZCByYWlzZSBCbG9ja2luZ0lPRXJyb3IsIGJ1dAorICBSYXdJT0Jhc2Uud3JpdGUoKSBpcyBkZWZpbmVkIHRvIHJldHVybmVkIE5vbmUgd2hlbiB0aGUgY2FsbCB3b3VsZCBibG9jay4KKyAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxMzM1ODogSFRNTFBhcnNlciBub3cgY2FsbHMgaGFuZGxlX2RhdGEgb25seSBvbmNlIGZvciBlYWNoIENEQVRBLgorCistIElzc3VlICM0MTQ3OiBtaW5pZG9tJ3MgdG9wcmV0dHl4bWwgbm8gbG9uZ2VyIGFkZHMgd2hpdGVzcGFjZSBhcm91bmQgYSB0ZXh0CisgIG5vZGUgd2hlbiBpdCBpcyB0aGUgb25seSBjaGlsZCBvZiBhbiBlbGVtZW50LiAgSW5pdGlhbCBwYXRjaCBieSBEYW4KKyAgS2VuaWdzYmVyZy4KKworLSBJc3N1ZSAjMTMzNzQ6IFRoZSBXaW5kb3dzIGJ5dGVzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIHRoZSBvcyBtb2R1bGUuIFVzZQorICBVbmljb2RlIGZpbGVuYW1lcyBpbnN0ZWFkIG9mIGJ5dGVzIGZpbGVuYW1lcyB0byBub3QgZGVwZW5kIG9uIHRoZSBBTlNJIGNvZGUKKyAgcGFnZSBhbnltb3JlIGFuZCB0byBzdXBwb3J0IGFueSBmaWxlbmFtZS4KKworLSBJc3N1ZSAjMTMyOTc6IFVzZSBieXRlcyB0eXBlIHRvIHNlbmQgYW5kIHJlY2VpdmUgYmluYXJ5IGRhdGEgdGhyb3VnaCBYTUxSUEMuCisKKy0gSXNzdWUgIzYzOTc6IFN1cHBvcnQgIi9kZXYvcG9sbCIgcG9sbGluZyBvYmplY3RzIGluIHNlbGVjdCBtb2R1bGUsCisgIHVuZGVyIFNvbGFyaXMgJiBkZXJpdmF0aXZlcy4KKworLSBJc3N1ZXMgIzE3NDU3NjEsICM3NTU2NzAsICMxMzM1NywgIzEyNjI5LCAjMTIwMDMxMzogSFRNTFBhcnNlciBub3cgY29ycmVjdGx5CisgIGhhbmRsZXMgbm9uLXZhbGlkIGF0dHJpYnV0ZXMsIGluY2x1ZGluZyBhZGphY2VudCBhbmQgdW5xdW90ZWQgYXR0cmlidXRlcy4KKworLSBJc3N1ZSAjMTMxOTM6IEZpeCBkaXN0dXRpbHMuZmlsZWxpc3QuRmlsZUxpc3QgYW5kIHBhY2thZ2luZy5tYW5pZmVzdC5NYW5pZmVzdAorICB1bmRlciBXaW5kb3dzLgorCistIElzc3VlICMxMzM4NDogUmVtb3ZlIHVubmVjZXNzYXJ5IF9fZnV0dXJlX18gaW1wb3J0IGluIExpYi9yYW5kb20ucHkKKworLSBJc3N1ZSAjMTMxNDk6IFNwZWVkIHVwIGFwcGVuZC1vbmx5IFN0cmluZ0lPIG9iamVjdHMuCisKKy0gSXNzdWUgIzEzMzczOiBtdWx0aXByb2Nlc3NpbmcuUXVldWUuZ2V0KCkgY291bGQgc29tZXRpbWVzIGJsb2NrIGluZGVmaW5pdGVseQorICB3aGVuIGNhbGxlZCB3aXRoIGEgdGltZW91dC4gIFBhdGNoIGJ5IEFybmF1ZCBZc21hbC4KKworLSBJc3N1ZSAjMTMyNTQ6IEZpeCBNYWlsZGlyIGluaXRpYWxpemF0aW9uIHNvIHRoYXQgbWFpbGRpciBjb250ZW50cworICBhcmUgcmVhZCBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzMwNjc6IGxvY2FsZS5zZXRsb2NhbGUoKSBub3cgcmFpc2VzIFR5cGVFcnJvciBpZiB0aGUgc2Vjb25kCisgIGFyZ3VtZW50IGlzIGFuIGludmFsaWQgaXRlcmFibGUuIEl0cyBkb2N1bWVudGF0aW9uIGFuZCBkb2NzdHJpbmcKKyAgd2VyZSBhbHNvIHVwZGF0ZWQuIEluaXRpYWwgcGF0Y2ggYnkgSnlya2kgUHVsbGlhaW5lbi4KKworLSBJc3N1ZSAjMTMxNDA6IEZpeCB0aGUgZGFlbW9uX3RocmVhZHMgYXR0cmlidXRlIG9mIFRocmVhZGluZ01peEluLgorCistIElzc3VlICMxMzMzOTogRml4IGNvbXBpbGUgZXJyb3IgaW4gcG9zaXhtb2R1bGUuYyBkdWUgdG8gbWlzc2luZyBzZW1pY29sb24uCisgIFRoYW5rcyB0byBSb2JlcnQgWGlhby4KKworLSBCeXRlIGNvbXBpbGF0aW9uIGluIHBhY2thZ2luZyBpcyBub3cgaXNvbGF0ZWQgZnJvbSB0aGUgY2FsbGluZyBQeXRob24gLUIgb3IKKyAgLU8gb3B0aW9ucywgaW5zdGVhZCBvZiBiZWluZyBkaXNhbGxvd2VkIHVuZGVyIC1CIG9yIGJ1Z2d5IHVuZGVyIC1PLgorCistIElzc3VlICMxMDU3MDogY3Vyc2VzLnB1dHAoKSBhbmQgY3Vyc2VzLnRwYXJtKCkgYXJlIG5vdyBleHBlY3RpbmcgYSBieXRlCisgIHN0cmluZywgaW5zdGVhZCBvZiBhIFVuaWNvZGUgc3RyaW5nLgorCistIElzc3VlICMxMzI5NTogaHR0cC5zZXJ2ZXIgbm93IHByb2R1Y2VzIHZhbGlkIEhUTUwgNC4wMSBzdHJpY3QuCisKKy0gSXNzdWUgIzI4OTI6IHByZXNlcnZlIGl0ZXJwYXJzZSBldmVudHMgaW4gY2FzZSBvZiBTeW50YXhFcnJvci4KKworLSBJc3N1ZSAjMTMyODc6IHVybGxpYi5yZXF1ZXN0IGFuZCB1cmxsaWIuZXJyb3Igbm93IGNvbnRhaW5zIGFuIF9fYWxsX18KKyAgYXR0cmlidXRlIHRvIGV4cG9zZSBvbmx5IHJlbGV2YW50IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4gIFBhdGNoIGJ5IEZsb3JlbnQKKyAgWGljbHVuYS4KKworLSBJc3N1ZSAjNjcwNjY0OiBGaXggSFRNTFBhcnNlciB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBjb250ZW50IG9mCisgIGBgPHNjcmlwdD4uLi48L3NjcmlwdD5gYCBhbmQgYGA8c3R5bGU+Li4uPC9zdHlsZT5gYC4KKworLSBJc3N1ZSAjMTA4MTc6IEZpeCB1cmxyZXRyaWV2ZSBmdW5jdGlvbiB0byByYWlzZSBDb250ZW50VG9vU2hvcnRFcnJvciBldmVuCisgIHdoZW4gcmVwb3J0aG9vayBpcyBOb25lLiBQYXRjaCBieSBKeXJraSBQdWxsaWFpbmVuLgorCistIElzc3VlICMxMzI5NjogRml4IElETEUgdG8gY2xlYXIgY29tcGlsZSBfX2Z1dHVyZV9fIGZsYWdzIG9uIHNoZWxsIHJlc3RhcnQuCisgIChQYXRjaCBieSBSb2dlciBTZXJ3eSkKKworLSBGaXggdGhlIHhtbHJwYy5jbGllbnQgdXNlciBhZ2VudCB0byByZXR1cm4gc29tZXRoaW5nIHNpbWlsYXIgdG8KKyAgdXJsbGliLnJlcXVlc3QgdXNlciBhZ2VudDogIlB5dGhvbi14bWxycGMvMy4zIi4KKworLSBJc3N1ZSAjMTMyOTM6IEJldHRlciBlcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIG1hcnNoYWwgYnl0ZXMgdXNpbmcKKyAgeG1scnBjLmNsaWVudC4KKworLSBJc3N1ZSAjMTMyOTE6IE5hbWVFcnJvciBpbiB4bWxycGMgcGFja2FnZS4KKworLSBJc3N1ZSAjMTMyNTg6IFVzZSBjYWxsYWJsZSgpIGJ1aWx0LWluIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgorCistIElzc3VlICMxMzI3MzogZml4IGEgYnVnIHRoYXQgcHJldmVudGVkIEhUTUxQYXJzZXIgdG8gcHJvcGVybHkgZGV0ZWN0IHNvbWUKKyAgdGFncyB3aGVuIHN0cmljdD1GYWxzZS4KKworLSBJc3N1ZSAjMTExODM6IEFkZCBmaW5lci1ncmFpbmVkIGV4Y2VwdGlvbnMgdG8gdGhlIHNzbCBtb2R1bGUsIHNvIHRoYXQKKyAgeW91IGRvbid0IGhhdmUgdG8gaW5zcGVjdCB0aGUgZXhjZXB0aW9uJ3MgYXR0cmlidXRlcyBpbiB0aGUgY29tbW9uIGNhc2UuCisKKy0gSXNzdWUgIzEzMjE2OiBBZGQgY3A2NTAwMSBjb2RlYywgdGhlIFdpbmRvd3MgVVRGLTggKENQX1VURjgpLgorCistIElzc3VlICMxMzIyNjogQWRkIFJUTERfeHh4IGNvbnN0YW50cyB0byB0aGUgb3MgbW9kdWxlLiBUaGVzZSBjb25zdGFudHMgY2FuIGJlCisgIHVzZWQgd2l0aCBzeXMuc2V0ZGxvcGVuZmxhZ3MoKS4KKworLSBJc3N1ZSAjMTAyNzg6IEFkZCBjbG9ja19nZXRyZXMoKSwgY2xvY2tfZ2V0dGltZSgpIGFuZCBDTE9DS194eHggY29uc3RhbnRzIHRvCisgIHRoZSB0aW1lIG1vZHVsZS4gdGltZS5jbG9ja19nZXR0aW1lKHRpbWUuQ0xPQ0tfTU9OT1RPTklDKSBwcm92aWRlcyBhCisgIG1vbm90b25pYyBjbG9jaworCistIElzc3VlICMxMDMzMjogbXVsdGlwcm9jZXNzaW5nOiBmaXggYSByYWNlIGNvbmRpdGlvbiB3aGVuIGEgUG9vbCBpcyBjbG9zZWQKKyAgYmVmb3JlIGFsbCB0YXNrcyBoYXZlIGNvbXBsZXRlZC4KKworLSBJc3N1ZSAjMTMyNTU6IHdyb25nIGRvY3N0cmluZ3MgaW4gYXJyYXkgbW9kdWxlLgorCistIElzc3VlICM4NTQwOiBSZW1vdmUgZGVwcmVjYXRlZCBDb250ZXh0Ll9jbGFtcCBhdHRyaWJ1dGUgaW4gRGVjaW1hbCBtb2R1bGUuCisKKy0gSXNzdWUgIzEzMjM1OiBBZGRlZCBEZXByZWNhdGlvbldhcm5pbmcgdG8gbG9nZ2luZy53YXJuKCkgbWV0aG9kIGFuZCBmdW5jdGlvbi4KKworLSBJc3N1ZSAjOTE2ODogbm93IHNtdHBkIGlzIGFibGUgdG8gYmluZCBwcml2aWxlZ2VkIHBvcnQuCisKKy0gSXNzdWUgIzEyNTI5OiBmaXggY2dpLnBhcnNlX2hlYWRlciBpc3N1ZSBvbiBzdHJpbmdzIHdpdGggZG91YmxlLXF1b3RlcyBhbmQKKyAgc2VtaWNvbG9ucyB0b2dldGhlci4gUGF0Y2ggYnkgQmVuIERhcm5lbGwgYW5kIFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMzIyNzogZnVuY3Rvb2xzLmxydV9jYWNoZSgpIG5vdyBoYXMgYSBvcHRpb24gdG8gZGlzdGluZ3Vpc2gKKyAgY2FsbHMgd2l0aCBkaWZmZXJlbnQgYXJndW1lbnQgdHlwZXMuCisKKy0gSXNzdWUgIzYwOTA6IHppcGZpbGUgcmFpc2VzIGEgVmFsdWVFcnJvciB3aGVuIGEgZG9jdW1lbnQgd2l0aCBhIHRpbWVzdGFtcAorICBlYXJsaWVyIHRoYW4gMTk4MCBpcyBwcm92aWRlZC4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMTUwOiBzeXNjb25maWcgbm8gbG9uZ2VyIHBhcnNlcyB0aGUgTWFrZWZpbGUgYW5kIGNvbmZpZy5oIGZpbGVzCisgIHdoZW4gaW1wb3J0ZWQsIGluc3RlYWQgZG9pbmcgaXQgYXQgYnVpbGQgdGltZS4gIFRoaXMgbWFrZXMgaW1wb3J0aW5nCisgIHN5c2NvbmZpZyBmYXN0ZXIgYW5kIHJlZHVjZXMgUHl0aG9uIHN0YXJ0dXAgdGltZSBieSAyMCUuCisKKy0gSXNzdWUgIzEyNDQ4OiBzbXRwbGliIG5vdyBmbHVzaGVzIHN0ZG91dCB3aGlsZSBydW5uaW5nIGBgcHl0aG9uIC1tIHNtdHBsaWJgYAorICBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSBwcm9tcHQgY29ycmVjdGx5LgorCistIElzc3VlICMxMjQ1NDogVGhlIG1haWxib3ggbW9kdWxlIGlzIG5vdyB1c2luZyBBU0NJSSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlCisgIGVuY29kaW5nLCB0byByZWFkIGFuZCB3cml0ZSAubWhfc2VxdWVuY2VzIGZpbGVzLgorCistIElzc3VlICMxMzE5NDogemxpYi5jb21wcmVzc29iaigpLmNvcHkoKSBhbmQgemxpYi5kZWNvbXByZXNzb2JqKCkuY29weSgpIGFyZQorICBub3cgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2NzMwMDc6IHVybGxpYi5yZXF1ZXN0IG5vdyBzdXBwb3J0cyBIRUFEIHJlcXVlc3QgdmlhIG5ldyBtZXRob2QgYXJndW1lbnQuCisgIFBhdGNoIGNvbnRyaWJ1dGlvbnMgYnkgRGF2aWQgU3RhbmVrLCBQYXRyaWNrIFdlc3RlcmhvZmYgYW5kIEV6aW8gTWVsb3R0aS4KKworLSBJc3N1ZSAjMTIzODY6IHBhY2thZ2luZyBkb2VzIG5vdCBmYWlsIGFueW1vcmUgd2hlbiB3cml0aW5nIHRoZSBSRVNPVVJDRVMKKyAgZmlsZS4KKworLSBJc3N1ZSAjMTMxNTg6IEZpeCBkZWNvZGluZyBhbmQgZW5jb2Rpbmcgb2YgR05VIHRhciBzcGVjaWZpYyBiYXNlLTI1NiBudW1iZXIKKyAgZmllbGRzIGluIHRhcmZpbGUuCisKKy0gSXNzdWUgIzEzMDI1OiBtaW1ldHlwZXMgaXMgbm93IHJlYWRpbmcgTUlNRSB0eXBlcyB1c2luZyB0aGUgVVRGLTggZW5jb2RpbmcsCisgIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZy4KKworLSBJc3N1ZSAjMTA2NTM6IE9uIFdpbmRvd3MsIHVzZSBzdHJmdGltZSgpIGluc3RlYWQgb2Ygd2NzZnRpbWUoKSBiZWNhdXNlCisgIHdjc2Z0aW1lKCkgZG9lc24ndCBmb3JtYXQgdGltZSB6b25lIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTMxNTA6IFRoZSB0b2tlbml6ZSBtb2R1bGUgZG9lc24ndCBjb21waWxlIGxhcmdlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAgYXQgc3RhcnR1cCBhbnltb3JlLgorCistIElzc3VlICMxMTE3MTogRml4IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lIHdoZW4gUHl0aG9uIHdhcworICBjb25maWd1cmVkIHdpdGggZGlmZmVyZW50IHByZWZpeCBhbmQgZXhlYy1wcmVmaXguCisKKy0gSXNzdWUgIzExMjU0OiBUZWFjaCBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyB0byBjb21waWxlIC5weWMgYW5kIC5weW8gZmlsZXMgaW4KKyAgUEVQIDMxNDctY29tcGxpYW50IF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLgorCistIElzc3VlICM3MzY3OiBGaXggcGtndXRpbC53YWxrX3BhdGhzIHRvIHNraXAgZGlyZWN0b3JpZXMgd2hvc2UKKyAgY29udGVudHMgY2Fubm90IGJlIHJlYWQuCisKKy0gSXNzdWUgIzMxNjM6IFRoZSBzdHJ1Y3QgbW9kdWxlIGdldHMgbmV3IGZvcm1hdCBjaGFyYWN0ZXJzICduJyBhbmQgJ04nCisgIHN1cHBvcnRpbmcgQyBpbnRlZ2VyIHR5cGVzIGBgc3NpemVfdGBgIGFuZCBgYHNpemVfdGBgLCByZXNwZWN0aXZlbHkuCisKKy0gSXNzdWUgIzEzMDk5OiBGaXggc3FsaXRlMy5DdXJzb3IubGFzdHJvd2lkIHVuZGVyIGEgVHVya2lzaCBsb2NhbGUuCisgIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzEzMDg3OiBCdWZmZXJlZFJlYWRlci5zZWVrKCkgbm93IGFsd2F5cyByYWlzZXMgVW5zdXBwb3J0ZWRPcGVyYXRpb24KKyAgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyB1bnNlZWthYmxlLCBldmVuIGlmIHRoZSBzZWVrIGNvdWxkIGJlCisgIHNhdGlzZmllZCB1c2luZyB0aGUgaW50ZXJuYWwgYnVmZmVyLiAgUGF0Y2ggYnkgSm9obiBPJ0Nvbm5vci4KKworLSBJc3N1ZSAjNzY4OTogQWxsb3cgcGlja2xpbmcgb2YgZHluYW1pY2FsbHkgY3JlYXRlZCBjbGFzc2VzIHdoZW4gdGhlaXIKKyAgbWV0YWNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCBjb3B5cmVnLiAgUGF0Y2ggYnkgTmljb2xhcyBNLiBUaGnDqXJ5IGFuZCBDcmFpZworICBDaXRyby4KKworLSBJc3N1ZSAjMTMwMzQ6IFdoZW4gZGVjb2Rpbmcgc29tZSBTU0wgY2VydGlmaWNhdGVzLCB0aGUgc3ViamVjdEFsdE5hbWUKKyAgZXh0ZW5zaW9uIGNvdWxkIGJlIHVucmVwb3J0ZWQuCisKKy0gSXNzdWUgIzk4NzE6IFByZXZlbnQgSURMRSAzIGNyYXNoIHdoZW4gZ2l2ZW4gYnl0ZSBzdGluZ3MKKyAgd2l0aCBpbnZhbGlkIGhleCBlc2NhcGUgc2VxdWVuY2VzLCBsaWtlIGInXHgwJy4KKyAgKE9yaWdpbmFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4pCisKKy0gSXNzdWUgIzEyMzA2OiBFeHBvc2UgdGhlIHJ1bnRpbWUgdmVyc2lvbiBvZiB0aGUgemxpYiBDIGxpYnJhcnkgYXMgYSBjb25zdGFudCwKKyAgWkxJQl9SVU5USU1FX1ZFUlNJT04sIGluIHRoZSB6bGliIG1vZHVsZS4gUGF0Y2ggYnkgVG9yc3RlbiBMYW5kc2Nob2ZmLgorCistIElzc3VlICMxMjk1OTogQWRkIGNvbGxlY3Rpb25zLkNoYWluTWFwIHRvIGNvbGxlY3Rpb25zLl9fYWxsX18uCisKKy0gSXNzdWUgIzg5MzM6IGRpc3R1dGlscycgUEtHLUlORk8gZmlsZXMgYW5kIHBhY2thZ2luZydzIE1FVEFEQVRBIGZpbGVzIHdpbGwKKyAgbm93IGNvcnJlY3RseSByZXBvcnQgTWV0YWRhdGEtVmVyc2lvbjogMS4xIGluc3RlYWQgb2YgMS4wIGlmIGEgQ2xhc3NpZmllciBvcgorICBEb3dubG9hZC1VUkwgZmllbGQgaXMgcHJlc2VudC4KKworLSBJc3N1ZSAjMTI1Njc6IEFkZCBjdXJzZXMudW5nZXRfd2NoKCkgZnVuY3Rpb24uIFB1c2ggYSBjaGFyYWN0ZXIgc28gdGhlIG5leHQKKyAgZ2V0X3djaCgpIHdpbGwgcmV0dXJuIGl0LgorCistIElzc3VlICM5NTYxOiBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyBub3cgd3JpdGVzIGVnZy1pbmZvIGZpbGVzIHVzaW5nIFVURi04LAorICBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzgyODY6IFRoZSBkaXN0dXRpbHMgY29tbWFuZCBzZGlzdCB3aWxsIHByaW50IGEgd2FybmluZyBtZXNzYWdlIGluc3RlYWQKKyAgb2YgY3Jhc2hpbmcgd2hlbiBhbiBpbnZhbGlkIHBhdGggaXMgZ2l2ZW4gaW4gdGhlIG1hbmlmZXN0IHRlbXBsYXRlLgorCistIElzc3VlICMxMjg0MTogdGFyZmlsZSB1bm5lY2Vzc2FyaWx5IGNoZWNrZWQgdGhlIGV4aXN0ZW5jZSBvZiBudW1lcmljYWwgdXNlcgorICBhbmQgZ3JvdXAgaWRzIG9uIGV4dHJhY3Rpb24uIElmIG9uZSBvZiB0aGVtIGRpZCBub3QgZXhpc3QgdGhlIHJlc3BlY3RpdmUgaWQKKyAgb2YgdGhlIGN1cnJlbnQgdXNlciAoaS5lLiByb290KSB3YXMgdXNlZCBmb3IgdGhlIGZpbGUgYW5kIG93bmVyc2hpcAorICBpbmZvcm1hdGlvbiB3YXMgbG9zdC4KKworLSBJc3N1ZSAjMTI4ODg6IEZpeCBhIGJ1ZyBpbiBIVE1MUGFyc2VyLnVuZXNjYXBlIHRoYXQgcHJldmVudGVkIGl0IHRvIGVzY2FwZQorICBtb3JlIHRoYW4gMTI4IGVudGl0aWVzLiAgUGF0Y2ggYnkgUGV0ZXIgT3R0ZW4uCisKKy0gSXNzdWUgIzEyODc4OiBFeHBvc2UgYSBfX2RpY3RfXyBhdHRyaWJ1dGUgb24gaW8uSU9CYXNlIGFuZCBpdHMgc3ViY2xhc3Nlcy4KKworLSBJc3N1ZSAjMTI2MzY6IElETEUgcmVhZHMgdGhlIGNvZGluZyBjb29raWUgd2hlbiBleGVjdXRpbmcgYSBQeXRob24gc2NyaXB0LgorCistIElzc3VlICMxMjQ5NDogT24gZXJyb3IsIGNhbGwoKSwgY2hlY2tfY2FsbCgpLCBjaGVja19vdXRwdXQoKSBhbmQKKyAgZ2V0c3RhdHVzb3V0cHV0KCkgZnVuY3Rpb25zIG9mIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBub3cga2lsbCB0aGUgcHJvY2VzcywKKyAgcmVhZCBpdHMgc3RhdHVzICh0byBhdm9pZCB6b21iaXMpIGFuZCBjbG9zZSBwaXBlcy4KKworLSBJc3N1ZSAjMTI3MjA6IEV4cG9zZSBsb3ctbGV2ZWwgTGludXggZXh0ZW5kZWQgZmlsZSBhdHRyaWJ1dGUgZnVuY3Rpb25zIGluIG9zLgorCistIElzc3VlICMxMDk0NjogVGhlIGRpc3R1dGlscyBjb21tYW5kcyBiZGlzdF9kdW1iLCBiZGlzdF93aW5pbnN0IGFuZCBiZGlzdF9tc2kKKyAgbm93IHJlc3BlY3QgYSAtLXNraXAtYnVpbGQgb3B0aW9uIGdpdmVuIHRvIGJkaXN0LiAgVGhlIHBhY2thZ2luZyBjb21tYW5kcworICB3ZXJlIGZpeGVkIHRvby4KKworLSBJc3N1ZSAjMTI4NDc6IEZpeCBhIGNyYXNoIHdpdGggbmVnYXRpdmUgUFVUIGFuZCBMT05HX0JJTlBVVCBhcmd1bWVudHMgaW4KKyAgdGhlIEMgcGlja2xlIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxMTU2NDogQXZvaWQgY3Jhc2hlcyB3aGVuIHRyeWluZyB0byBwaWNrbGUgaHVnZSBvYmplY3RzIG9yIGNvbnRhaW5lcnMKKyAgKG1vcmUgdGhhbiAyKiozMSBpdGVtcykuICBJbnN0ZWFkLCBpbiBtb3N0IGNhc2VzLCBhbiBPdmVyZmxvd0Vycm9yIGlzIHJhaXNlZC4KKworLSBJc3N1ZSAjMTIyODc6IEZpeCBhIHN0YWNrIGNvcnJ1cHRpb24gaW4gb3NzYXVkaW9kZXYgbW9kdWxlIHdoZW4gdGhlIEZEIGlzCisgIGdyZWF0ZXIgdGhhbiBGRF9TRVRTSVpFLgorCistIElzc3VlICMxMjgzOTogRml4IGNyYXNoIGluIHpsaWIgbW9kdWxlIGR1ZSB0byB2ZXJzaW9uIG1pc21hdGNoLgorICBGaXggYnkgUmljaGFyZCBNLiBUZXcuCisKKy0gSXNzdWUgIzk5MjM6IFRoZSBtYWlsY2FwIG1vZHVsZSBub3cgY29ycmVjdGx5IHVzZXMgdGhlIHBsYXRmb3JtIHBhdGgKKyAgc2VwYXJhdG9yIGZvciB0aGUgTUFJTENBUCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvbiBub24tUE9TSVggcGxhdGZvcm1zLgorCistIElzc3VlICMxMjgzNTogRm9sbG93IHVwIHRvICM2NTYwIHRoYXQgdW5jb25kaXRpb25hbGx5IHByZXZlbnRzIHVzZSBvZiB0aGUKKyAgdW5lbmNyeXB0ZWQgc2VuZG1zZy9yZWN2bXNnIEFQSXMgb24gU1NMIHdyYXBwZWQgc29ja2V0cy4gUGF0Y2ggYnkgRGF2aWQKKyAgV2F0c29uLgorCistIElzc3VlICMxMjgwMzogU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW4oKSBub3cgYWNjZXB0cyBhIHBhc3N3b3JkIGFyZ3VtZW50CisgIHRvIGJlIHVzZWQgaWYgdGhlIHByaXZhdGUga2V5IGlzIGVuY3J5cHRlZC4gIFBhdGNoIGJ5IEFkYW0gU2ltcGtpbnMuCisKKy0gSXNzdWUgIzExNjU3OiBGaXggc2VuZGluZyBmaWxlIGRlc2NyaXB0b3JzIG92ZXIgMjU1IG92ZXIgYSBtdWx0aXByb2Nlc3NpbmcKKyAgUGlwZS4KKworLSBJc3N1ZSAjMTI4MTE6IHRhYm5hbm55LmNoZWNrKCkgbm93IHByb21wdGx5IGNsb3NlcyBjaGVja2VkIGZpbGVzLiBQYXRjaCBieQorICBBbnRob255IEJyaWdncy4KKworLSBJc3N1ZSAjNjU2MDogVGhlIHNlbmRtc2cvcmVjdm1zZyBBUEkgaXMgbm93IGV4cG9zZWQgYnkgdGhlIHNvY2tldCBtb2R1bGUKKyAgd2hlbiBwcm92aWRlZCBieSB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSwgc3VwcG9ydGluZyBwcm9jZXNzaW5nIG9mCisgIGFuY2lsbGFyeSBkYXRhIGluIHB1cmUgUHl0aG9uIGNvZGUuIFBhdGNoIGJ5IERhdmlkIFdhdHNvbiBhbmQgSGVpa28gV3VuZHJhbS4KKworLSBJc3N1ZSAjMTIzMjY6IE9uIExpbnV4LCBzeXMucGxhdGZvcm0gZG9lc24ndCBjb250YWluIHRoZSBtYWpvciB2ZXJzaW9uCisgIGFueW1vcmUuIEl0IGlzIG5vdyBhbHdheXMgJ2xpbnV4JywgaW5zdGVhZCBvZiAnbGludXgyJyBvciAnbGludXgzJyBkZXBlbmRpbmcKKyAgb24gdGhlIExpbnV4IHZlcnNpb24gdXNlZCB0byBidWlsZCBQeXRob24uCisKKy0gSXNzdWUgIzEyMjEzOiBGaXggYSBidWZmZXJpbmcgYnVnIHdpdGggaW50ZXJsZWF2ZWQgcmVhZHMgYW5kIHdyaXRlcyB0aGF0CisgIGNvdWxkIGFwcGVhciBvbiBCdWZmZXJlZFJhbmRvbSBzdHJlYW1zLgorCistIElzc3VlICMxMjc3ODogUmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIEpTT04tZW5jb2RpbmcgYSBsYXJnZQorICBjb250YWluZXIgb2YgbWFueSBzbWFsbCBvYmplY3RzLgorCistIElzc3VlICMxMjY1MDogRml4IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBzdWJwcm9jZXNzLlBvcGVuIGNvdWxkIGxlYWsKKyAgcmVzb3VyY2VzIChGRC96b21iaWUpIHdoZW4ga2lsbGVkIGF0IHRoZSB3cm9uZyB0aW1lLgorCistIElzc3VlICMxMjc0NDogRml4IGluZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9mIGludGVnZXJzIGJldHdlZW4gMioqMzEgYW5kCisgIDIqKjYzIG9uIHN5c3RlbXMgd2l0aCBhIDY0LWJpdCBDICJsb25nIi4KKworLSBJc3N1ZSAjMTI2NDY6IEFkZCBhbiAnZW9mJyBhdHRyaWJ1dGUgdG8gemxpYi5EZWNvbXByZXNzLCB0byBtYWtlIGl0IGVhc2llciB0bworICBkZXRlY3QgdHJ1bmNhdGVkIGlucHV0IHN0cmVhbXMuCisKKy0gSXNzdWUgIzExNTEzOiBGaXggZXhjZXB0aW9uIGhhbmRsaW5nIGBgdGFyZmlsZS5UYXJGaWxlLmd6b3BlbigpYGAgd2hlbgorICB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLgorCistIElzc3VlICMxMjY4NzogRml4IGEgcG9zc2libGUgYnVmZmVyaW5nIGJ1ZyB3aGVuIHVucGlja2xpbmcgdGV4dCBtb2RlCisgIChwcm90b2NvbCAwLCBtb3N0bHkpIHBpY2tsZXMuCisKKy0gSXNzdWUgIzEwMDg3OiBGaXggdGhlIGh0bWwgb3V0cHV0IGZvcm1hdCBvZiB0aGUgY2FsZW5kYXIgbW9kdWxlLgorCistIElzc3VlICMxMjU0MDogUHJldmVudCB6b21iaWUgSURMRSBwcm9jZXNzZXMgb24gV2luZG93cyBkdWUgdG8gY2hhbmdlcworICBpbiBvcy5raWxsKCkuCisKKy0gSXNzdWUgIzEzMTIxOiBhZGQgc3VwcG9ydCBmb3IgaW5wbGFjZSBtYXRoIG9wZXJhdG9ycyB0byBjb2xsZWN0aW9ucy5Db3VudGVyLgorCistIEFkZCBzdXBwb3J0IGZvciB1bmFyeSBwbHVzIGFuZCB1bmFyeSBtaW51cyB0byBjb2xsZWN0aW9ucy5Db3VudGVyLgorCistIElzc3VlICMxMjY4MzogdXJscGFyc2UgdXBkYXRlZCB0byBpbmNsdWRlIHN2biBhcyBzY2hlbWVzIHRoYXQgdXNlcyByZWxhdGl2ZQorICBwYXRocy4gKHN2biBmcm9tIDEuNSBvbndhcmRzIHN1cHBvcnQgcmVsYXRpdmUgcGF0aCkuCisKKy0gSXNzdWUgIzEyNjU1OiBFeHBvc2UgZnVuY3Rpb25zIGZyb20gc2NoZWQuaCBpbiB0aGUgb3MgbW9kdWxlOiBzY2hlZF95aWVsZCgpLAorICBzY2hlZF9zZXRzY2hlZHVsZXIoKSwgc2NoZWRfZ2V0c2NoZWR1bGVyKCksIHNjaGVkX3NldHBhcmFtKCksCisgIHNjaGVkX2dldF9taW5fcHJpb3JpdHkoKSwgc2NoZWRfZ2V0X21heF9wcmlvcml0eSgpLCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwoKSwKKyAgc2NoZWRfZ2V0YWZmaW5pdHkoKSwgc2NoZWRfc2V0YWZmaW5pdHkoKS4KKworLSBBZGQgVGhyZWFkRXJyb3IgdG8gdGhyZWFkaW5nLl9fYWxsX18uCisKKy0gSXNzdWVzICMxMTEwNCwgIzg2ODg6IEZpeCB0aGUgYmVoYXZpb3Igb2YgZGlzdHV0aWxzJyBzZGlzdCBjb21tYW5kIHdpdGgKKyAgbWFudWFsbHktbWFpbnRhaW5lZCBNQU5JRkVTVCBmaWxlcy4KKworLSBJc3N1ZSAjMTEyODE6IHNtdHBsaWIuU1RNUCBnZXRzIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciwgd2hpY2ggYWRkcyB0aGUKKyAgYWJpbGl0eSB0byBiaW5kIHRvIHNwZWNpZmljIHNvdXJjZSBhZGRyZXNzIG9uIGEgbWFjaGluZSB3aXRoIG11bHRpcGxlCisgIGludGVyZmFjZXMuIFBhdGNoIGJ5IFBhdWxvIFNjYXJkaW5lLgorCistIElzc3VlICMxMjQ2NDogdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5LmNsZWFudXAoKSBzaG91bGQgbm90IGZvbGxvdworICBzeW1saW5rczogZml4IGl0LiBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjODg4NzogInB5ZG9jIHNvbWVidWlsdGluLnNvbWVtZXRob2QiIChvciBoZWxwKCdzb21lYnVpbHRpbi5zb21lbWV0aG9kJykKKyAgaW4gUHl0aG9uIGNvZGUpIG5vdyBmaW5kcyB0aGUgZG9jIG9mIHRoZSBtZXRob2QuCisKKy0gSXNzdWUgIzEwOTY4OiBSZW1vdmUgaW5kaXJlY3Rpb24gaW4gdGhyZWFkaW5nLiAgVGhlIHB1YmxpYyBuYW1lcyAoRXZlbnQsCisgIENvbmRpdGlvbiwgZXRjLikgdXNlZCB0byBiZSBmYWN0b3J5IGZ1bmN0aW9ucyByZXR1cm5pbmcgaW5zdGFuY2VzIG9mIGhpZGRlbgorICBjbGFzc2VzIChfRXZlbnQsIF9Db25kaXRpb24sIGV0Yy4pLCBiZWNhdXNlIChpZiBHdWlkbyByZWNhbGxzIGNvcnJlY3RseSkgdGhpcworICBjb2RlIHByZS1kYXRlcyB0aGUgYWJpbGl0eSB0byBzdWJjbGFzcyBleHRlbnNpb24gdHlwZXMuICBJdCBpcyBub3cgcG9zc2libGUKKyAgdG8gaW5oZXJpdCBmcm9tIHRoZXNlIGNsYXNzZXMgd2l0aG91dCBoYXZpbmcgdG8gaW1wb3J0IHRoZSBwcml2YXRlCisgIHVuZGVyc2NvcmVkIG5hbWVzIGxpa2UgbXVsdGlwcm9jZXNzaW5nIGRpZC4KKworLSBJc3N1ZSAjOTcyMzogQWRkIHNobGV4LnF1b3RlIGZ1bmN0aW9ucywgdG8gZXNjYXBlIGZpbGVuYW1lcyBhbmQgY29tbWFuZAorICBsaW5lcy4KKworLSBJc3N1ZSAjMTI2MDM6IEZpeCBweWRvYy5zeW5vcHNpcygpIG9uIGZpbGVzIHdpdGggbm9uLW5lZ2F0aXZlIHN0X210aW1lLgorCistIElzc3VlICMxMjUxNDogVXNlIHRyeS9maW5hbGx5IHRvIGFzc3VyZSB0aGUgdGltZWl0IG1vZHVsZSByZXN0b3JlcyBnYXJiYWdlCisgIGNvbGxlY3Rpb25zIHdoZW4gaXQgaXMgZG9uZS4KKworLSBJc3N1ZSAjMTI2MDc6IEluIHN1YnByb2Nlc3MsIGZpeCBpc3N1ZSB3aGVyZSBpZiBzdGRpbiwgc3Rkb3V0IG9yIHN0ZGVyciBpcworICBnaXZlbiBhcyBhIGxvdyBmZCwgaXQgZ2V0cyBvdmVyd3JpdHRlbi4KKworLSBJc3N1ZSAjMTI1OTA6IElETEUgZWRpdG9yIHdpbmRvdyBub3cgYWx3YXlzIGRpc3BsYXlzIHRoZSBmaXJzdCBsaW5lCisgIHdoZW4gb3BlbmluZyBhIGxvbmcgZmlsZS4gIFdpdGggVGsgOC41LCB0aGUgZmlyc3QgbGluZSB3YXMgaGlkZGVuLgorCistIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZXMpCisgIENvbm5lY3Rpb246Y2xvc2UgaGVhZGVyLgorCistIElzc3VlICMxMjEwMjogRG9jdW1lbnQgdGhhdCBidWZmZXJlZCBmaWxlcyBtdXN0IGJlIGZsdXNoZWQgYmVmb3JlIGJlaW5nIHVzZWQKKyAgd2l0aCBtbWFwLiBQYXRjaCBieSBTdGVmZmVuIERhb2RlIE51cnBtZXNvLgorCistIElzc3VlICMxMjU2MDogQnVpbGQgbGlicHl0aG9uLnNvIG9uIE9wZW5CU0QuIFBhdGNoIGJ5IFN0ZWZhbiBTcGVybGluZy4KKworLSBJc3N1ZSAjMTgxMzogRml4IGNvZGVjIGxvb2t1cCB1bmRlciBUdXJraXNoIGxvY2FsZXMuCisKKy0gSXNzdWUgIzEyNTkxOiBJbXByb3ZlIHN1cHBvcnQgb2YgInVuaXZlcnNhbCBuZXdsaW5lcyIgaW4gdGhlIHN1YnByb2Nlc3MKKyAgbW9kdWxlOiB0aGUgcGlwZWQgc3RyZWFtcyBjYW4gbm93IGJlIHByb3Blcmx5IHJlYWQgZnJvbSBvciB3cml0dGVuIHRvLgorCistIElzc3VlICMxMjU5MTogQWxsb3cgaW8uVGV4dElPV3JhcHBlciB0byB3b3JrIHdpdGggcmF3IElPIG9iamVjdHMgKHdpdGhvdXQKKyAgYSByZWFkMSgpIG1ldGhvZCksIGFuZCBhZGQgYSAqd3JpdGVfdGhyb3VnaCogcGFyYW1ldGVyIHRvIG1hbmRhdGUKKyAgdW5idWZmZXJlZCB3cml0ZXMuCisKKy0gSXNzdWUgIzEwODgzOiBGaXggc29ja2V0IGxlYWtzIGluIHVybGxpYi5yZXF1ZXN0IHdoZW4gdXNpbmcgRlRQLgorCistIElzc3VlICMxMjU5MjogTWFrZSBQeXRob24gYnVpbGQgb24gT3BlbkJTRCA1IChhbmQgZnV0dXJlIG1ham9yIHJlbGVhc2VzKS4KKworLSBJc3N1ZSAjMTIzNzI6IFBPU0lYIHNlbWFwaG9yZXMgYXJlIGJyb2tlbiBvbiBBSVg6IGRvbid0IHVzZSB0aGVtLgorCistIElzc3VlICMxMjU1MTogUHJvdmlkZSBhIGdldF9jaGFubmVsX2JpbmRpbmcoKSBtZXRob2Qgb24gU1NMIHNvY2tldHMgc28gYXMKKyAgdG8gZ2V0IGNoYW5uZWwgYmluZGluZyBkYXRhIGZvciB0aGUgY3VycmVudCBTU0wgc2Vzc2lvbiAob25seSB0aGUKKyAgInRscy11bmlxdWUiIGNoYW5uZWwgYmluZGluZyBpcyBpbXBsZW1lbnRlZCkuICBUaGlzIGFsbG93cyB0aGUgaW1wbGVtZW50YXRpb24KKyAgb2YgY2VydGFpbiBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIHN1Y2ggYXMgU0NSQU0tU0hBLTEtUExVUy4gIFBhdGNoIGJ5CisgIEphY2VrIEtvbmllY3pueS4KKworLSBJc3N1ZSAjNjY1MTk0OiBlbWFpbC51dGlscyBub3cgaGFzIGZvcm1hdF9kYXRldGltZSBhbmQgcGFyc2VkYXRlX3RvX2RhdGV0aW1lCisgIGZ1bmN0aW9ucywgYWxsb3dpbmcgZm9yIHJvdW5kIHRyaXBwaW5nIG9mIFJGQzI4MjIgZm9ybWF0IGRhdGVzLgorCistIElzc3VlICMxMjU3MTogQWRkIGEgcGxhdC1saW51eDMgZGlyZWN0b3J5IG1pcnJvcmluZyB0aGUgcGxhdC1saW51eDIKKyAgZGlyZWN0b3J5LCBzbyB0aGF0ICJpbXBvcnQgRExGQ04iIGFuZCBvdGhlciBzaW1pbGFyIGltcG9ydHMgd29yayBvbgorICBMaW51eCAzLjAuCisKKy0gSXNzdWUgIzc0ODQ6IHNtdHBsaWIgbm8gbG9uZ2VyIHB1dHMgPD4gYXJvdW5kIGFkZHJlc3NlcyBpbiBWUkZZIGFuZCBFWFBOCisgIGNvbW1hbmRzOyB0aGV5IGFyZW4ndCByZXF1aXJlZCBhbmQgaW4gZmFjdCBwb3N0Zml4IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IGZvcm0uCisKKy0gSXNzdWUgIzEyMjczOiBSZW1vdmUgYXN0Ll9fdmVyc2lvbl9fLiBBU1QgY2hhbmdlcyBjYW4gYmUgYWNjb3VudGVkIGZvciBieQorICBjaGVja2luZyBzeXMudmVyc2lvbl9pbmZvIG9yIHN5cy5fbWVyY3VyaWFsLgorCistIFNpbGVuY2Ugc3B1cmlvdXMgImJyb2tlbiBwaXBlIiB0cmFjZWJhY2tzIHdoZW4gc2h1dHRpbmcgZG93biBhCisgIFByb2Nlc3NQb29sRXhlY3V0b3IuCisKKy0gRml4IHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcyBpbiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcgorICBieSBqb2luaW5nIGFsbCBxdWV1ZXMgYW5kIHByb2Nlc3NlcyB3aGVuIHNodXRkb3duKCkgaXMgY2FsbGVkLgorCistIElzc3VlICMxMTYwMzogRml4IGEgY3Jhc2ggd2hlbiBfX3N0cl9fIGlzIHJlYm91bmQgYXMgX19yZXByX18uICBQYXRjaCBieQorICBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzExMzIxOiBGaXggYSBjcmFzaCB3aXRoIG11bHRpcGxlIGltcG9ydHMgb2YgdGhlIF9waWNrbGUgbW9kdWxlIHdoZW4KKyAgZW1iZWRkaW5nIFB5dGhvbi4gIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjNjc1NTogQWRkIGdldF93Y2goKSBtZXRob2QgdG8gY3Vyc2VzLndpbmRvdyBjbGFzcy4gUGF0Y2ggYnkgScOxaWdvCisgIFNlcm5hLgorCistIEFkZCBjZ2kuY2xvc2Vsb2coKSBmdW5jdGlvbiB0byBjbG9zZSB0aGUgbG9nIGZpbGUuCisKKy0gSXNzdWUgIzEyNTAyOiBhc3luY29yZTogZml4IHBvbGxpbmcgbG9vcCB3aXRoIEFGX1VOSVggc29ja2V0cy4KKworLSBJc3N1ZSAjNDM3NjogY3R5cGVzIG5vdyBzdXBwb3J0cyBuZXN0ZWQgc3RydWN0dXJlcyBpbiBhIGVuZGlhbiBkaWZmZXJlbnQgdGhhbgorICB0aGUgcGFyZW50IHN0cnVjdHVyZS4gUGF0Y2ggYnkgVmxhZCBSaXNjdXRpYS4KKworLSBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlIF9DSFVOS19TSVpFIGF0dHJpYnV0ZSBvZiBhCisgIFRleHRJT1dyYXBwZXIgdG8gYSBodWdlIHZhbHVlLCBub3QgVHlwZUVycm9yLgorCistIElzc3VlICMxMjUwNDogQ2xvc2UgZmlsZSBoYW5kbGVzIGluIGEgdGltZWx5IG1hbm5lciBpbiBwYWNrYWdpbmcuZGF0YWJhc2UuCisgIFRoaXMgZml4ZXMgYSBidWcgd2l0aCB0aGUgcmVtb3ZlICh1bmluc3RhbGwpIGZlYXR1cmUgb24gV2luZG93cy4KKworLSBJc3N1ZXMgIzEyMTY5IGFuZCAjMTA1MTA6IEZhY3RvciBvdXQgY29kZSB1c2VkIGJ5IHZhcmlvdXMgcGFja2FnaW5nIGNvbW1hbmRzCisgIHRvIG1ha2UgSFRUUCBQT1NUIHJlcXVlc3RzLCBhbmQgbWFrZSBzdXJlIGl0IHVzZXMgQ1JMRi4KKworLSBJc3N1ZSAjMTIwMTY6IE11bHRpYnl0ZSBDSksgZGVjb2RlcnMgbm93IHJlc3luY2hyb25pemUgZmFzdGVyLiBUaGV5IG9ubHkKKyAgaWdub3JlIHRoZSBmaXJzdCBieXRlIG9mIGFuIGludmFsaWQgYnl0ZSBzZXF1ZW5jZS4gRm9yIGV4YW1wbGUsCisgIGInXHhmZlxuJy5kZWNvZGUoJ2diMjMxMicsICdyZXBsYWNlJykgZ2l2ZXMgJ1x1ZmZmZFxuJyBpbnN0ZWFkIG9mICdcdWZmZmQnLgorCistIElzc3VlICMxMjQ1OTogdGltZS5zbGVlcCgpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIGlmIHRoZSBzbGVlcCBsZW5ndGggaXMKKyAgbmVnYXRpdmUsIGluc3RlYWQgb2YgYW4gaW5maW5pdGUgc2xlZXAgb24gV2luZG93cyBvciByYWlzaW5nIGFuIElPRXJyb3Igb24KKyAgTGludXggZm9yIGV4YW1wbGUsIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3VyIG9uIGFsbCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzEyNDUxOiBweWRvYzogaHRtbF9nZXRmaWxlKCkgbm93IHVzZXMgdG9rZW5pemUub3BlbigpIHRvIHN1cHBvcnQKKyAgUHl0aG9uIHNjcmlwdHMgdXNpbmcgYSBlbmNvZGluZyBkaWZmZXJlbnQgdGhhbiBVVEYtOCAocmVhZCB0aGUgY29kaW5nIGNvb2tpZQorICBvZiB0aGUgc2NyaXB0KS4KKworLSBJc3N1ZSAjMTI0OTM6IHN1YnByb2Nlc3M6IFBvcGVuLmNvbW11bmljYXRlKCkgbm93IGFsc28gaGFuZGxlcyBFSU5UUiBlcnJvcnMKKyAgaWYgdGhlIHByb2Nlc3MgaGFzIG9ubHkgb25lIHBpcGUuCisKKy0gSXNzdWUgIzEyNDY3OiB3YXJuaW5nczogZml4IGEgcmFjZSBjb25kaXRpb24gaWYgYSB3YXJuaW5nIGlzIGVtaXR0ZWQgYXQKKyAgc2h1dGRvd24sIGlmIGdsb2JhbHMoKVsnX19maWxlX18nXSBpcyBOb25lLgorCistIElzc3VlICMxMjQ1MTogcHlkb2M6IGltcG9ydGZpbGUoKSBub3cgb3BlbnMgdGhlIFB5dGhvbiBzY3JpcHQgaW4gYmluYXJ5IG1vZGUsCisgIGluc3RlYWQgb2YgdGV4dCBtb2RlIHVzaW5nIHRoZSBsb2NhbGUgZW5jb2RpbmcsIHRvIGF2b2lkIGVuY29kaW5nIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTI0NTE6IHJ1bnB5OiBydW5fcGF0aCgpIG5vdyBvcGVucyB0aGUgUHl0aG9uIHNjcmlwdCBpbiBiaW5hcnkgbW9kZSwKKyAgaW5zdGVhZCBvZiB0ZXh0IG1vZGUgdXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8gc3VwcG9ydCBvdGhlciBlbmNvZGluZ3MKKyAgdGhhbiBVVEYtOCAoc2NyaXB0cyB1c2luZyB0aGUgY29kaW5nIGNvb2tpZSkuCisKKy0gSXNzdWUgIzEyNDUxOiB4bWwuZG9tLnB1bGxkb206IHBhcnNlKCkgbm93IG9wZW5zIGZpbGVzIGluIGJpbmFyeSBtb2RlIGluc3RlYWQKKyAgb2YgdGhlIHRleHQgbW9kZSAodXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZykgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjE0NzogQWRqdXN0IHRoZSBuZXctaW4tMy4yIHNtdHBsaWIuc2VuZF9tZXNzYWdlIG1ldGhvZCBmb3IgYmV0dGVyCisgIGNvbmZvcm1hbmNlIHRvIHRoZSBSRkNzOiAgY29ycmVjdGx5IGhhbmRsZSBTZW5kZXIgYW5kIFJlc2VudC0gaGVhZGVycy4KKworLSBJc3N1ZSAjMTIzNTI6IEZpeCBhIGRlYWRsb2NrIGluIG11bHRpcHJvY2Vzc2luZy5IZWFwIHdoZW4gYSBibG9jayBpcyBmcmVlZCBieQorICB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igd2hpbGUgdGhlIEhlYXAgbG9jayBpcyBoZWxkLgorCistIElzc3VlICMxMjQ2MjogdGltZS5zbGVlcCgpIG5vdyBpbW1lZGlhdGVseSBjYWxscyB0aGUgKFB5dGhvbikgc2lnbmFsIGhhbmRsZXIKKyAgaWYgaXQgaXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIGluc3RlYWQgb2YgaGF2aW5nIHRvIHdhaXQgdW50aWwgdGhlIG5leHQKKyAgaW5zdHJ1Y3Rpb24uCisKKy0gSXNzdWUgIzEyNDQyOiBuZXcgc2h1dGlsLmRpc2tfdXNhZ2UgZnVuY3Rpb24sIHByb3ZpZGluZyB0b3RhbCwgdXNlZCBhbmQgZnJlZQorICBkaXNrIHNwYWNlIHN0YXRpc3RpY3MuCisKKy0gSXNzdWUgIzEyNDUxOiBUaGUgWEluY2x1ZGUgZGVmYXVsdCBsb2FkZXIgb2YgeG1sLmV0cmVlIG5vdyBkZWNvZGVzIGZpbGVzIGZyb20KKyAgVVRGLTggaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nIGlmIHRoZSBlbmNvZGluZyBpcyBub3Qgc3BlY2lmaWVkLiBJdCBub3cKKyAgYWxzbyBvcGVucyBYTUwgZmlsZXMgZm9yIHRoZSBwYXJzZXIgaW4gYmluYXJ5IG1vZGUgaW5zdGVhZCBvZiB0aGUgdGV4dCBtb2RlCisgIHRvIGF2b2lkIGVuY29kaW5nIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTI0NTE6IGRvY3Rlc3QuZGVidWdfc2NyaXB0KCkgZG9lc24ndCBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZQorICBhbnltb3JlIHRvIGF2b2lkIGVuY29kaW5nIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTI0NTE6IHB5ZG9jLnN5bm9wc2lzKCkgbm93IHJlYWRzIHRoZSBlbmNvZGluZyBjb29raWUgaWYgYXZhaWxhYmxlLAorICB0byByZWFkIHRoZSBQeXRob24gc2NyaXB0IGZyb20gdGhlIHJpZ2h0IGVuY29kaW5nLgorCistIElzc3VlICMxMjQ1MTogZGlzdHV0aWxzIG5vdyBvcGVucyB0aGUgc2V0dXAgc2NyaXB0IGluIGJpbmFyeSBtb2RlIHRvIHJlYWQgdGhlCisgIGVuY29kaW5nIGNvb2tpZSwgaW5zdGVhZCBvZiBvcGVuaW5nIGl0IGluIFVURi04LgorCistIElzc3VlICM5NTE2OiBPbiBNYWMgT1MgWCwgY2hhbmdlIERpc3R1dGlscyB0byBubyBsb25nZXIgZ2xvYmFsbHkgYXR0ZW1wdCB0bworICBjaGVjayBvciBzZXQgdGhlIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdGhlCisgIGludGVycHJldGVyIHByb2Nlc3MuICBUaGlzIGNvdWxkIGNhdXNlIGZhaWx1cmVzIGluIG5vbi1EaXN0dXRpbHMgc3VicHJvY2Vzc2VzCisgIGFuZCB3YXMgdW5yZWxpYWJsZSBzaW5jZSB0ZXN0cyBvciB1c2VyIHByb2dyYW1zIGNvdWxkIG1vZGlmeSB0aGUgaW50ZXJwcmV0ZXIKKyAgZW52aXJvbm1lbnQgYWZ0ZXIgRGlzdHV0aWxzIHNldCBpdC4gIEluc3RlYWQsIGhhdmUgRGlzdHV0aWxzIHNldCB0aGUKKyAgZGVwbG95bWVudCB0YXJnZXQgb25seSBpbiB0aGUgZW52aXJvbm1lbnQgb2YgZWFjaCBidWlsZCBzdWJwcm9jZXNzLiAgSXQgaXMKKyAgc3RpbGwgcG9zc2libGUgdG8gZ2xvYmFsbHkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYnkgc2V0dGluZworICBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgYmVmb3JlIGxhdW5jaGluZyB0aGUgaW50ZXJwcmV0ZXI7IGl0cyB2YWx1ZSBtdXN0IGJlCisgIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIGRlZmF1bHQgdmFsdWUsIHRoZSB2YWx1ZSB3aXRoIHdoaWNoIHRoZSBpbnRlcnByZXRlcgorICB3YXMgYnVpbHQuICBBbHNvLCBpbXBsZW1lbnQgdGhlIHNhbWUgaGFuZGxpbmcgaW4gcGFja2FnaW5nLgorCistIElzc3VlICMxMjQyMjogSW4gdGhlIGNvcHkgbW9kdWxlLCBkb24ndCBzdG9yZSBvYmplY3RzIHRoYXQgYXJlIHRoZWlyIG93biBjb3B5CisgIGluIHRoZSBtZW1vIGRpY3QuCisKKy0gSXNzdWUgIzEyMzAzOiBBZGQgc2lnd2FpdGluZm8oKSBhbmQgc2lndGltZWR3YWl0KCkgdG8gdGhlIHNpZ25hbCBtb2R1bGUuCisKKy0gSXNzdWUgIzEyNDA0OiBSZW1vdmUgQzg5IGluY29tcGF0aWJsZSBjb2RlIGZyb20gbW1hcCBtb2R1bGUuIFBhdGNoIGJ5IEFraXJhCisgIEtpdGFkYS4KKworLSBJc3N1ZSAjMTg3NDogZW1haWwgbm93IGRldGVjdHMgYW5kIHJlcG9ydHMgYXMgYSBkZWZlY3QgdGhlIHByZXNlbmNlIG9mCisgIGFueSBDVEUgb3RoZXIgdGhhbiA3Yml0LCA4Yml0LCBvciBiaW5hcnkgb24gYSBtdWx0aXBhcnQuCisKKy0gSXNzdWUgIzEyMzgzOiBGaXggc3VicHJvY2VzcyBtb2R1bGUgd2l0aCBlbnY9e306IGRvbid0IGNvcHkgdGhlIGVudmlyb25tZW50CisgIHZhcmlhYmxlcywgc3RhcnQgd2l0aCBhbiBlbXB0eSBlbnZpcm9ubWVudC4KKworLSBJc3N1ZSAjMTE2Mzc6IEZpeCBzdXBwb3J0IGZvciBpbXBvcnRpbmcgcGFja2FnaW5nIHNldHVwIGhvb2tzIGZyb20gdGhlCisgIHByb2plY3QgZGlyZWN0b3J5LgorCistIElzc3VlICM2NzcxOiBNb3ZlZCB0aGUgY3Vyc2VzLndyYXBwZXIgZnVuY3Rpb24gZnJvbSB0aGUgc2luZ2xlLWZ1bmN0aW9uCisgIHdyYXBwZXIgbW9kdWxlIGludG8gX19pbml0X18sIGVsaW1pbmF0aW5nIHRoZSBtb2R1bGUuICBTaW5jZSBfX2luaXRfXyB3YXMKKyAgYWxyZWFkeSBpbXBvcnRpbmcgdGhlIGZ1bmN0aW9uIHRvIGN1cnNlcy53cmFwcGVyLCB0aGVyZSBpcyBubyBBUEkgY2hhbmdlLgorCistIElzc3VlICMxMTU4NDogZW1haWwuaGVhZGVyLmRlY29kZV9oZWFkZXIgbm8gbG9uZ2VyIGZhaWxzIGlmIHRoZSBoZWFkZXIKKyAgcGFzc2VkIHRvIGl0IGlzIGEgSGVhZGVyIG9iamVjdCwgYW5kIEhlYWRlci9tYWtlX2hlYWRlciBubyBsb25nZXIgZmFpbAorICBpZiBnaXZlbiBiaW5hcnkgdW5rbm93bi04Yml0IGlucHV0LgorCistIElzc3VlICMxMTcwMDogbWFpbGJveCBwcm94eSBvYmplY3QgY2xvc2UgbWV0aG9kcyBjYW4gbm93IGJlIGNhbGxlZCBtdWx0aXBsZQorICB0aW1lcyB3aXRob3V0IGVycm9yLgorCistIElzc3VlICMxMTc2NzogQ29ycmVjdCBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBtYWlsYm94J3MgX19nZXRpdGVtX18gbWV0aG9kLgorCistIElzc3VlICMxMjEzMzogQWJzdHJhY3RIVFRQSGFuZGxlci5kb19vcGVuKCkgb2YgdXJsbGliLnJlcXVlc3QgY2xvc2VzIHRoZSBIVFRQCisgIGNvbm5lY3Rpb24gaWYgaXRzIGdldHJlc3BvbnNlKCkgbWV0aG9kIGZhaWxzIHdpdGggYSBzb2NrZXQgZXJyb3IuIFBhdGNoCisgIHdyaXR0ZW4gYnkgRXppbyBNZWxvdHRpLgorCistIElzc3VlICMxMjI0MDogQWxsb3cgbXVsdGlwbGUgc2V0dXAgaG9va3MgaW4gcGFja2FnaW5nJ3Mgc2V0dXAuY2ZnIGZpbGVzLgorICBPcmlnaW5hbCBwYXRjaCBieSBFcmlrIEJyYXkuCisKKy0gSXNzdWUgIzkyODQ6IEFsbG93IGluc3BlY3QuZmluZHNvdXJjZSgpIHRvIGZpbmQgdGhlIHNvdXJjZSBvZiBkb2N0ZXN0CisgIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTE1OTU6IEZpeCBhc3NvcnRlZCBidWdzIGluIHBhY2thZ2luZy51dGlsLmNmZ190b19hcmdzLCBhCisgIGNvbXBhdGliaWxpdHkgaGVscGVyIGZvciB0aGUgZGlzdHV0aWxzLXBhY2thZ2luZyB0cmFuc2l0aW9uLiAgT3JpZ2luYWwgcGF0Y2gKKyAgYnkgRXJpayBCcmF5LgorCistIElzc3VlICMxMjI4NzogSW4gb3NzYXVkaW9kZXYsIGNoZWNrIHRoYXQgdGhlIGRldmljZSBpc24ndCBjbG9zZWQgaW4gc2V2ZXJhbAorICBtZXRob2RzLgorCistIElzc3VlICMxMjAwOTogRml4ZWQgcmVncmVzc2lvbiBpbiBuZXRyYyBmaWxlIGNvbW1lbnQgaGFuZGxpbmcuCisKKy0gSXNzdWUgIzEyMjQ2OiBXYXJuIGFuZCBmYWlsIHdoZW4gdHJ5aW5nIHRvIGluc3RhbGwgYSB0aGlyZC1wYXJ0eSBwcm9qZWN0IGZyb20KKyAgYW4gdW5pbnN0YWxsZWQgUHl0aG9uIChidWlsdCBpbiBhIHNvdXJjZSBjaGVja291dCkuICBPcmlnaW5hbCBwYXRjaCBieQorICBUc2hlcGFuZyBMZWtob25raG9iZS4KKworLSBJc3N1ZSAjMTA2OTQ6IHppcGZpbGUgbm93IGlnbm9yZXMgZ2FyYmFnZSBhdCB0aGUgZW5kIG9mIGEgemlwZmlsZS4KKworLSBJc3N1ZSAjMTIyODM6IEZpeGVkIHJlZ3Jlc3Npb24gaW4gc210cGxpYiBxdW90aW5nIG9mIGxlYWRpbmcgZG90cyBpbiBEQVRBLgorCistIElzc3VlICMxMDQyNDogQXJncGFyc2Ugbm93IGluY2x1ZGVzIHRoZSBuYW1lcyBvZiB0aGUgbWlzc2luZyByZXF1aXJlZAorICBhcmd1bWVudHMgaW4gdGhlIG1pc3NpbmcgYXJndW1lbnRzIGVycm9yIG1lc3NhZ2UuCisKKy0gSXNzdWUgIzEyMTY4OiBTeXNMb2dIYW5kbGVyIG5vdyBhbGxvd3MgTlVMIHRlcm1pbmF0aW9uIHRvIGJlIGNvbnRyb2xsZWQgdXNpbmcKKyAgYSBuZXcgJ2FwcGVuZF9udWwnIGF0dHJpYnV0ZSBvbiB0aGUgaGFuZGxlci4KKworLSBJc3N1ZSAjMTE1ODM6IFNwZWVkIHVwIG9zLnBhdGguaXNkaXIgb24gV2luZG93cyBieSB1c2luZyBHZXRGaWxlQXR0cmlidXRlcworICBpbnN0ZWFkIG9mIG9zLnN0YXQuCisKKy0gSXNzdWUgIzEyMDIxOiBNYWtlIG1tYXAncyByZWFkKCkgbWV0aG9kIGFyZ3VtZW50IG9wdGlvbmFsLiBQYXRjaCBieSBQZXRyaQorICBMZWh0aW5lbi4KKworLSBJc3N1ZSAjOTIwNTogY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3Igbm93IGRldGVjdHMga2lsbGVkCisgIGNoaWxkcmVuIGFuZCByYWlzZXMgQnJva2VuUHJvY2Vzc1Bvb2wgaW4gc3VjaCBhIHNpdHVhdGlvbi4gIFByZXZpb3VzbHkgaXQKKyAgd291bGQgcmVsaWFibHkgZnJlZXplL2RlYWRsb2NrLgorCistIElzc3VlICMxMjA0MDogRXhwb3NlIGEgbmV3IGF0dHJpYnV0ZSBgYHNlbnRpbmVsYGAgb24gaW5zdGFuY2VzIG9mCisgIGBgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NgYC4gIEFsc28sIGZpeCBQcm9jZXNzLmpvaW4oKSB0byBub3QgdXNlIHBvbGxpbmcKKyAgYW55bW9yZSwgd2hlbiBnaXZlbiBhIHRpbWVvdXQuCisKKy0gSXNzdWUgIzExODkzOiBSZW1vdmUgb2Jzb2xldGUgaW50ZXJuYWwgd3JhcHBlciBjbGFzcyBgYFNTTEZha2VGaWxlYGAgaW4gdGhlCisgIHNtdHBsaWIgbW9kdWxlLiAgUGF0Y2ggYnkgQ2F0YWxpbiBJYWNvYi4KKworLSBJc3N1ZSAjMTIwODA6IEZpeCBhIERlY2ltYWwucG93ZXIoKSBjYXNlIHRoYXQgdG9vayBhbiB1bnJlYXNvbmFibHkgbG9uZyB0aW1lCisgIHRvIGNvbXB1dGUuCisKKy0gSXNzdWUgIzEyMjIxOiBSZW1vdmUgX192ZXJzaW9uX18gYXR0cmlidXRlcyBmcm9tIHB5ZXhwYXQsIHBpY2tsZSwgdGFyZmlsZSwKKyAgcHlkb2MsIHRraW50ZXIsIGFuZCB4bWwucGFyc2Vycy5leHBhdC4gVGhpcyB3ZXJlIHVzZWxlc3MgdmVyc2lvbiBjb25zdGFudHMKKyAgbGVmdCBvdmVyIGZyb20gdGhlIE1lcmN1cmlhbCB0cmFuc2l0aW9uCisKKy0gTmFtZWQgdHVwbGVzIG5vdyB3b3JrIGNvcnJlY3RseSB3aXRoIHZhcnMoKS4KKworLSBJc3N1ZSAjMTIwODU6IEZpeCBhbiBhdHRyaWJ1dGUgZXJyb3IgaW4gc3VicHJvY2Vzcy5Qb3BlbiBkZXN0cnVjdG9yIGlmIHRoZQorICBjb25zdHJ1Y3RvciBoYXMgZmFpbGVkLCBlLmcuIGJlY2F1c2Ugb2YgYW4gdW5kZWNsYXJlZCBrZXl3b3JkIGFyZ3VtZW50LiBQYXRjaAorICB3cml0dGVuIGJ5IE9sZWcgT3NobXlhbi4KKworLSBJc3N1ZSAjMTIwMjg6IE1ha2UgdGhyZWFkaW5nLl9nZXRfaWRlbnQoKSBwdWJsaWMsIHJlbmFtZSBpdCB0bworICB0aHJlYWRpbmcuZ2V0X2lkZW50KCkgYW5kIGRvY3VtZW50IGl0LiBUaGlzIGZ1bmN0aW9uIHdhcyBhbHJlYWR5IHVzZWQgdXNpbmcKKyAgX3RocmVhZC5nZXRfaWRlbnQoKS4KKworLSBJc3N1ZSAjMTIxNzE6IEluY3JlbWVudGFsRW5jb2Rlci5yZXNldCgpIG9mIENKSyBjb2RlY3MgKG11bHRpYnl0ZWNvZGVjKSBjYWxscworICBlbmNyZXNldCgpIGluc3RlYWQgb2YgZGVjcmVzZXQoKS4KKworLSBJc3N1ZSAjMTIyMTg6IFJlbW92ZWQgd3NnaXJlZi5lZ2ctaW5mby4KKworLSBJc3N1ZSAjMTIxOTY6IEFkZCBwaXBlMigpIHRvIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzk4NTA2NDogTWFrZSBwbGlzdGxpYiBtb3JlIHJlc2lsaWVudCB0byBmYXVsdHkgaW5wdXQgcGxpc3RzLgorICBQYXRjaCBieSBNaGVyIE1vdnNpc3lhbi4KKworLSBJc3N1ZSAjMTYyNTogQloyRmlsZSBhbmQgYnoyLmRlY29tcHJlc3MoKSBub3cgc3VwcG9ydCBtdWx0aS1zdHJlYW0gZmlsZXMuCisgIEluaXRpYWwgcGF0Y2ggYnkgTmlyIEFpZGVzLgorCistIElzc3VlICMxMjE3NTogQnVmZmVyZWRSZWFkZXIucmVhZCgtMSkgbm93IGNhbGxzIHJhdy5yZWFkYWxsKCkgaWYgYXZhaWxhYmxlLgorCistIElzc3VlICMxMjE3NTogRmlsZUlPLnJlYWRhbGwoKSBub3cgb25seSByZWFkcyB0aGUgZmlsZSBwb3NpdGlvbiBhbmQgc2l6ZQorICBvbmNlLgorCistIElzc3VlICMxMjE3NTogUmF3SU9CYXNlLnJlYWRhbGwoKSBub3cgcmV0dXJucyBOb25lIGlmIHJlYWQoKSByZXR1cm5zIE5vbmUuCisKKy0gSXNzdWUgIzEyMTc1OiBGaWxlSU8ucmVhZGFsbCgpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIGluc3RlYWQgb2YgYW4gSU9FcnJvcgorICBpZiB0aGUgZmlsZSBpcyBjbG9zZWQuCisKKy0gSXNzdWUgIzExMTA5OiBOZXcgc2VydmljZV9hY3Rpb24gbWV0aG9kIGZvciBCYXNlU2VydmVyLCB1c2VkIGJ5IEZvcmtpbmdNaXhJbgorICBjbGFzcyBmb3IgY2xlYW51cC4gSW5pdGlhbCBQYXRjaCBieSBKdXN0aW4gV2Fya2VudGluLgorCistIElzc3VlICMxMjA0NTogQXZvaWQgZHVwbGljYXRlIGV4ZWN1dGlvbiBvZiBjb21tYW5kIGluCisgIGN0eXBlcy51dGlsLl9nZXRfc29uYW1lKCkuICBQYXRjaCBieSBTaWppbiBKb3NlcGguCisKKy0gSXNzdWUgIzEwODE4OiBSZW1vdmUgdGhlIFRrIEdVSSBhbmQgdGhlIHNlcnZlKCkgZnVuY3Rpb24gb2YgdGhlIHB5ZG9jIG1vZHVsZSwKKyAgcHlkb2MgLWcgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yIGFuZCBpdCBoYXMgYSBuZXcgZW5oYW5jZWQgd2ViCisgIHNlcnZlci4KKworLSBJc3N1ZSAjMTQ0MTUzMDogSW4gaW1hcGxpYiwgcmVhZCB0aGUgZGF0YSBpbiBvbmUgY2h1bmsgdG8gc3BlZWQgdXAgbGFyZ2UKKyAgcmVhZHMgYW5kIHNpbXBsaWZ5IGNvZGUuCisKKy0gSXNzdWUgIzEyMDcwOiBGaXggdGhlIE1ha2VmaWxlIHBhcnNlciBvZiB0aGUgc3lzY29uZmlnIG1vZHVsZSB0byBoYW5kbGUKKyAgY29ycmVjdGx5IHJlZmVyZW5jZXMgdG8gImJvZ3VzIHZhcmlhYmxlIiAoZS5nLiAicHJlZml4PSQvb3B0L3B5dGhvbiIpLgorCistIElzc3VlICMxMjEwMDogRG9uJ3QgcmVzZXQgaW5jcmVtZW50YWwgZW5jb2RlcnMgb2YgQ0pLIGNvZGVjcyBhdCBlYWNoIGNhbGwgdG8KKyAgdGhlaXIgZW5jb2RlKCkgbWV0aG9kIGFueW1vcmUsIGJ1dCBjb250aW51ZSB0byBjYWxsIHRoZSByZXNldCgpIG1ldGhvZCBpZiB0aGUKKyAgZmluYWwgYXJndW1lbnQgaXMgVHJ1ZS4KKworLSBJc3N1ZSAjMTIwNDk6IEFkZCBSQU5EX2J5dGVzKCkgYW5kIFJBTkRfcHNldWRvX2J5dGVzKCkgZnVuY3Rpb25zIHRvIHRoZSBzc2wKKyAgbW9kdWxlLgorCistIElzc3VlICM2NTAxOiBvcy5kZXZpY2VfZW5jb2RpbmcoKSByZXR1cm5zIE5vbmUgb24gV2luZG93cyBpZiB0aGUgYXBwbGljYXRpb24KKyAgaGFzIG5vIGNvbnNvbGUuCisKKy0gSXNzdWUgIzEyMTA1OiBBZGQgT19DTE9FWEVDIHRvIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzEyMDc5OiBEZWNpbWFsKCdJbmZpbml0eScpLmZtYShEZWNpbWFsKCcwJyksICgzLjkxMjI0MzE4MTI2Nzg2ZSsxOSswaikpCisgIG5vdyByYWlzZXMgVHlwZUVycm9yIChyZWZsZWN0aW5nIHRoZSBpbnZhbGlkIHR5cGUgb2YgdGhlIDNyZCBhcmd1bWVudCkgcmF0aGVyCisgIHRoYW4gRGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uLgorCistIElzc3VlICMxMjEyNDogemlwaW1wb3J0IGRvZXNuJ3Qga2VlcCBhIHJlZmVyZW5jZSB0byB6bGliLmRlY29tcHJlc3MoKSBhbnltb3JlCisgIHRvIGJlIGFibGUgdG8gdW5sb2FkIHRoZSBtb2R1bGUuCisKKy0gQWRkIHRoZSBwYWNrYWdpbmcgbW9kdWxlLCBhbiBpbXByb3ZlZCBmb3JrIG9mIGRpc3R1dGlscyAoYWxzbyBrbm93biBhcworICBkaXN0dXRpbHMyKS4KKworLSBJc3N1ZSAjMTIwNjU6IGNvbm5lY3RfZXgoKSBvbiBhbiBTU0wgc29ja2V0IG5vdyByZXR1cm5zIHRoZSBvcmlnaW5hbCBlcnJubworICB3aGVuIHRoZSBzb2NrZXQncyB0aW1lb3V0IGV4cGlyZXMgKGl0IHVzZWQgdG8gcmV0dXJuIE5vbmUpLgorCistIElzc3VlICM4ODA5OiBUaGUgU01UUF9TU0wgY29uc3RydWN0b3IgYW5kIFNNVFAuc3RhcnR0bHMoKSBub3cgc3VwcG9ydAorICBwYXNzaW5nIGEgYGBjb250ZXh0YGAgYXJndW1lbnQgcG9pbnRpbmcgdG8gYW4gc3NsLlNTTENvbnRleHQgaW5zdGFuY2UuCisgIFBhdGNoIGJ5IEthc3VuIEhlcmF0aC4KKworLSBJc3N1ZSAjMTEwODg6IGRvbid0IGNyYXNoIHdoZW4gdXNpbmcgRjUgdG8gcnVuIGEgc2NyaXB0IGluIElETEUgb24gTWFjT1NYCisgIHdpdGggVGsgOC41LgorCistIElzc3VlICM5NTE2OiBJc3N1ZSAjOTUxNjogYXZvaWQgZXJyb3JzIGluIHN5c2NvbmZpZyB3aGVuIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICBpcyBzZXQgaW4gc2hlbGwuCisKKy0gSXNzdWUgIzg2NTA6IE1ha2UgemxpYiBtb2R1bGUgNjQtYml0IGNsZWFuLiBjb21wcmVzcygpLCBkZWNvbXByZXNzKCkgYW5kCisgIHRoZWlyIGluY3JlbWVudGFsIGNvdW50ZXJwYXJ0cyBub3cgcmFpc2UgT3ZlcmZsb3dFcnJvciBpZiBnaXZlbiBhbiBpbnB1dAorICBsYXJnZXIgdGhhbiA0R0IsIGluc3RlYWQgb2Ygc2lsZW50bHkgdHJ1bmNhdGluZyB0aGUgaW5wdXQgYW5kIHJldHVybmluZworICBhbiBpbmNvcnJlY3QgcmVzdWx0LgorCistIElzc3VlICMxMjA1MDogemxpYi5kZWNvbXByZXNzb2JqKCkuZGVjb21wcmVzcygpIG5vdyBjbGVhcnMgdGhlIHVuY29uc3VtZWRfdGFpbAorICBhdHRyaWJ1dGUgd2hlbiBjYWxsZWQgd2l0aG91dCBhIG1heF9sZW5ndGggYXJndW1lbnQuCisKKy0gSXNzdWUgIzEyMDYyOiBGaXggYSBmbHVzaGluZyBidWcgd2hlbiBkb2luZyBhIGNlcnRhaW4gdHlwZSBvZiBJL08gc2VxdWVuY2UKKyAgb24gYSBmaWxlIG9wZW5lZCBpbiByZWFkK3dyaXRlIG1vZGUgKG5hbWVseTogcmVhZGluZywgc2Vla2luZyBhIGJpdCBmb3J3YXJkLAorICB3cml0aW5nLCB0aGVuIHNlZWtpbmcgYmVmb3JlIHRoZSBwcmV2aW91cyB3cml0ZSBidXQgc3RpbGwgd2l0aGluIGJ1ZmZlcmVkCisgIGRhdGEsIGFuZCB3cml0aW5nIGFnYWluKS4KKworLSBJc3N1ZSAjOTk3MTogV3JpdGUgYW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlcmVkUmVhZGVyLnJlYWRpbnRvKCkuCisgIFBhdGNoIGJ5IEpvaG4gTydDb25ub3IuCisKKy0gSXNzdWUgIzEwMjg6IFRrIHJldHVybnMgaW52YWxpZCBVbmljb2RlIG51bGwgaW4gJUE6IFVuaWNvZGVEZWNvZGVFcnJvci4KKyAgV2l0aCBUayA8IDguNSBfdGtpbnRlci5jOlB5dGhvbkNtZCgpIHJhaXNlZCBVbmljb2RlRGVjb2RlRXJyb3IsIGNhdXNlZAorICBJRExFIHRvIGV4aXQuICBDb252ZXJ0ZWQgdG8gdmFsaWQgVW5pY29kZSBudWxsIGluIFB5dGhvbkNtZCgpLgorCistIElzc3VlICMxMTc5OTogdXJsbGliLnJlcXVlc3QgQXV0aGVudGljYXRpb24gSGFuZGxlcnMgd2lsbCByYWlzZSBhIFZhbHVlRXJyb3IKKyAgd2hlbiBwcmVzZW50ZWQgd2l0aCBhbiB1bnN1cHBvcnRlZCBBdXRoZW50aWNhdGlvbiBTY2hlbWUuIFBhdGNoIGNvbnRyaWJ1dGVkCisgIGJ5IFl1dmFsIEdyZWVuZmllbGQuCisKKy0gSXNzdWUgIzEwNDE5LCAjNjAxMTogYnVpbGRfc2NyaXB0cyBjb21tYW5kIG9mIGRpc3R1dGlscyBoYW5kbGVzIGNvcnJlY3RseQorICBub24tQVNDSUkgcGF0aCAocGF0aCB0byB0aGUgUHl0aG9uIGV4ZWN1dGFibGUpLiBPcGVuIGFuZCB3cml0ZSB0aGUgc2NyaXB0IGluCisgIGJpbmFyeSBtb2RlLCBidXQgZW5zdXJlIHRoYXQgdGhlIHNoZWJhbmcgaXMgZGVjb2RhYmxlIGZyb20gVVRGLTggYW5kIGZyb20gdGhlCisgIGVuY29kaW5nIG9mIHRoZSBzY3JpcHQuCisKKy0gSXNzdWUgIzg0OTg6IEluIHNvY2tldC5hY2NlcHQoKSwgYWxsb3cgdG8gc3BlY2lmeSAwIGFzIGEgYmFja2xvZyB2YWx1ZSBpbgorICBvcmRlciB0byBhY2NlcHQgZXhhY3RseSBvbmUgY29ubmVjdGlvbi4gIFBhdGNoIGJ5IERhbmllbCBFdmVycy4KKworLSBJc3N1ZSAjMTIwMTE6IHNpZ25hbC5zaWduYWwoKSBhbmQgc2lnbmFsLnNpZ2ludGVycnVwdCgpIHJhaXNlIGFuIE9TRXJyb3IsCisgIGluc3RlYWQgb2YgYSBSdW50aW1lRXJyb3I6IE9TRXJyb3IgaGFzIGFuIGVycm5vIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMzcwOTogYWRkIGEgZmx1c2hfaGVhZGVycyBtZXRob2QgdG8gQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwgd2hpY2gKKyAgbWFuYWdlcyB0aGUgc2VuZGluZyBvZiBoZWFkZXJzIHRvIG91dHB1dCBzdHJlYW0gYW5kIGZsdXNoaW5nIHRoZSBpbnRlcm5hbAorICBoZWFkZXJzIGJ1ZmZlci4gUGF0Y2ggY29udHJpYnV0aW9uIGJ5IEFuZHJldyBTY2hhYWYKKworLSBJc3N1ZSAjMTE3NDM6IFJld3JpdGUgbXVsdGlwcm9jZXNzaW5nIGNvbm5lY3Rpb24gY2xhc3NlcyBpbiBwdXJlIFB5dGhvbi4KKworLSBJc3N1ZSAjMTExNjQ6IFN0b3AgdHJ5aW5nIHRvIHVzZSBfeG1scGx1cyBpbiB0aGUgeG1sIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE4ODg6IEFkZCBsb2cyIGZ1bmN0aW9uIHRvIG1hdGggbW9kdWxlLiBQYXRjaCB3cml0dGVuIGJ5IE1hcmsKKyAgRGlja2luc29uLgorCistIElzc3VlICMxMjAxMjogc3NsLlBST1RPQ09MX1NTTHYyIGJlY29tZXMgb3B0aW9uYWwuCisKKy0gSXNzdWUgIzg0MDc6IFRoZSBzaWduYWwgaGFuZGxlciB3cml0ZXMgdGhlIHNpZ25hbCBudW1iZXIgYXMgYSBzaW5nbGUgYnl0ZQorICBpbnN0ZWFkIG9mIGEgbnVsIGJ5dGUgaW50byB0aGUgd2FrZXVwIGZpbGUgZGVzY3JpcHRvci4gU28gaXQgaXMgcG9zc2libGUgdG8KKyAgd2FpdCBtb3JlIHRoYW4gb25lIHNpZ25hbCBhbmQga25vdyB3aGljaCBzaWduYWxzIHdlcmUgcmFpc2VkLgorCistIElzc3VlICM4NDA3OiBBZGQgcHRocmVhZF9raWxsKCksIHNpZ3BlbmRpbmcoKSBhbmQgc2lnd2FpdCgpIGZ1bmN0aW9ucyB0byB0aGUKKyAgc2lnbmFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE5Mjc6IFNNVFBfU1NMIG5vdyB1c2VzIHBvcnQgNDY1IGJ5IGRlZmF1bHQgYXMgZG9jdW1lbnRlZC4gIFBhdGNoCisgIGJ5IEthc3VuIEhlcmF0aC4KKworLSBJc3N1ZSAjMTIwMDI6IGZ0cGxpYidzIGFib3J0KCkgbWV0aG9kIHJhaXNlcyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzExOTE2OiBBZGQgYSBudW1iZXIgb2YgTWFjT1NYIHNwZWNpZmljIGRlZmluaXRpb25zIHRvIHRoZSBlcnJubyBtb2R1bGUuCisgIFBhdGNoIGJ5IFBpZXJyZSBDYXJyaWVyLgorCistIElzc3VlICMxMTk5OTogZml4ZWQgc3BvcmFkaWMgc3luYyBmYWlsdXJlIG1haWxib3guTWFpbGRpciBkdWUgdG8gaXRzIHRyeWluZyB0bworICBkZXRlY3QgbXRpbWUgY2hhbmdlcyBieSBjb21wYXJpbmcgdG8gdGhlIHN5c3RlbSBjbG9jayBpbnN0ZWFkIG9mIHRvIHRoZQorICBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgbXRpbWUuCisKKy0gSXNzdWUgIzExMDcyOiBhZGRlZCBNTFNEIGNvbW1hbmQgKFJGQy0zNjU5KSBzdXBwb3J0IHRvIGZ0cGxpYi4KKworLSBJc3N1ZSAjODgwODogVGhlIElNQVA0X1NTTCBjb25zdHJ1Y3RvciBub3cgYWxsb3dzIHBhc3NpbmcgYW4gU1NMQ29udGV4dAorICBwYXJhbWV0ZXIgdG8gY29udHJvbCBwYXJhbWV0ZXJzIG9mIHRoZSBzZWN1cmUgY2hhbm5lbC4gIFBhdGNoIGJ5IFNpamluCisgIEpvc2VwaC4KKworLSBudHBhdGguc2FtZWZpbGUgZmFpbGVkIHRvIG5vdGljZSB0aGF0ICJhLnR4dCIgYW5kICJBLlRYVCIgcmVmZXIgdG8gdGhlIHNhbWUKKyAgZmlsZSBvbiBXaW5kb3dzIFhQLiBBcyBub3RpY2VkIGluIGlzc3VlICMxMDY4NC4KKworLSBJc3N1ZSAjMTIwMDA6IFdoZW4gYSBTU0wgY2VydGlmaWNhdGUgaGFzIGEgc3ViamVjdEFsdE5hbWUgd2l0aG91dCBhbnkKKyAgZE5TTmFtZSBlbnRyeSwgc3NsLm1hdGNoX2hvc3RuYW1lKCkgc2hvdWxkIHVzZSB0aGUgc3ViamVjdCdzIGNvbW1vbk5hbWUuCisgIFBhdGNoIGJ5IE5pY29sYXMgQmFyZWlsLgorCistIElzc3VlICMxMDc3NTogYXNzZXJ0UmFpc2VzLCBhc3NlcnRSYWlzZXNSZWdleCwgYXNzZXJ0V2FybnMsIGFuZAorICBhc3NlcnRXYXJuc1JlZ2V4IG5vdyBhY2NlcHQgYSBrZXl3b3JkIGFyZ3VtZW50ICdtc2cnIHdoZW4gdXNlZCBhcyBjb250ZXh0CisgIG1hbmFnZXJzLiAgSW5pdGlhbCBwYXRjaCBieSBXaW5zdG9uIEV3ZXJ0LgorCistIElzc3VlICMxMDY4NDogc2h1dGlsLm1vdmUgdXNlZCB0byBkZWxldGUgYSBmb2xkZXIgb24gY2FzZSBpbnNlbnNpdGl2ZQorICBmaWxlc3lzdGVtcyB3aGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5hbWUgd2hlcmUgdGhlIHNhbWUgZXhjZXB0CisgIGZvciB0aGUgY2FzZS4KKworLSBJc3N1ZSAjMTE2NDc6IG9iamVjdHMgY3JlYXRlZCB1c2luZyBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyIG5vdyBzdXBwb3J0CisgIG1vcmUgdGhhbiBvbmUgY2FsbCB0byB0aGUgZnVuY3Rpb24gd2hlbiB1c2VkIGFzIGEgZGVjb3JhdG9yLiBJbml0aWFsIHBhdGNoCisgIGJ5IFlzaiBSYXkuCisKKy0gSXNzdWUgIzExOTMwOiBSZW1vdmVkIGRlcHJlY2F0ZWQgdGltZS5hY2NlcHQyZHllYXIgdmFyaWFibGUuCisgIFJlbW92ZWQgeWVhciA+PSAxMDAwIHJlc3RyaWN0aW9uIGZyb20gZGF0ZXRpbWUuc3RyZnRpbWUuCisKKy0gbG9nZ2luZzogZG9uJ3QgZGVmaW5lIFF1ZXVlTGlzdGVuZXIgaWYgUHl0aG9uIGhhcyBubyB0aHJlYWQgc3VwcG9ydC4KKworLSBmdW5jdG9vbHMuY21wX3RvX2tleSgpIG5vdyB3b3JrcyB3aXRoIGNvbGxlY3Rpb25zLkhhc2hhYmxlKCkuCisKKy0gSXNzdWUgIzExMjc3OiBtbWFwLm1tYXAoKSBjYWxscyBmY250bChmZCwgRl9GVUxMRlNZTkMpIG9uIE1hYyBPUyBYIHRvIGdldAorICBhcm91bmQgYSBtbWFwIGJ1ZyB3aXRoIHNwYXJzZSBmaWxlcy4gUGF0Y2ggd3JpdHRlbiBieSBTdGVmZmVuIERhb2RlIE51cnBtZXNvLgorCistIElzc3VlICM4NDA3OiBBZGQgc2lnbmFsLnB0aHJlYWRfc2lnbWFzaygpIGZ1bmN0aW9uIHRvIGZldGNoIGFuZC9vciBjaGFuZ2UgdGhlCisgIHNpZ25hbCBtYXNrIG9mIHRoZSBjYWxsaW5nIHRocmVhZC4KKworLSBJc3N1ZSAjMTE4NTg6IGNvbmZpZ3BhcnNlci5FeHRlbmRlZEludGVycG9sYXRpb24gZXhwZWN0ZWQgbG93ZXItY2FzZSBzZWN0aW9uCisgIG5hbWVzLgorCistIElzc3VlICMxMTMyNDogQ29uZmlnUGFyc2VyKGludGVycG9sYXRpb249Tm9uZSkgbm93IHdvcmtzIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTE4MTE6IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKCkgaXMgbm93IElQdjYtY29tcGF0aWJsZS4gIFBhdGNoCisgIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTE3NjM6IGRvbid0IHVzZSBkaWZmbGliIGluIFRlc3RDYXNlLmFzc2VydE11bHRpTGluZUVxdWFsIGlmIHRoZQorICBzdHJpbmdzIGFyZSB0b28gbG9uZy4KKworLSBJc3N1ZSAjMTEyMzY6IGdldHBhc3MuZ2V0cGFzcyByZXNwb25kcyB0byBjdHJsLWMgb3IgY3RybC16IG9uIHRlcm1pbmFsLgorCistIElzc3VlICMxMTg1NjogU3BlZWQgdXAgcGFyc2luZyBvZiBKU09OIG51bWJlcnMuCisKKy0gSXNzdWUgIzExMDA1OiB0aHJlYWRpbmcuUkxvY2soKS5fcmVsZWFzZV9zYXZlKCkgcmFpc2VzIGEgUnVudGltZUVycm9yIGlmIHRoZQorICBsb2NrIHdhcyBub3QgYWNxdWlyZWQuCisKKy0gSXNzdWUgIzExMjU4OiBTcGVlZCB1cCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkoKSB1bmRlciBMaW51eCBieSBhIGZhY3RvcgorICBvZiA1IHRvIDEwLiAgSW5pdGlhbCBwYXRjaCBieSBKb25hcyBILgorCistIElzc3VlICMxMTM4MjogVHJpdmlhbCBzeXN0ZW0gY2FsbHMsIHN1Y2ggYXMgZHVwKCkgb3IgcGlwZSgpLCBuZWVkbid0CisgIHJlbGVhc2UgdGhlIEdJTC4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTEyMjM6IEFkZCB0aHJlYWRpbmcuX2luZm8oKSBmdW5jdGlvbiBwcm92aWRpbmcgaW5mb3JtYXRpb25zIGFib3V0CisgIHRoZSB0aHJlYWQgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzExNzMxOiBzaW1wbGlmeS9lbmhhbmNlIGVtYWlsIHBhcnNlci9nZW5lcmF0b3IgQVBJIGJ5IGludHJvZHVjaW5nCisgIHBvbGljeSBvYmplY3RzLgorCistIElzc3VlICMxMTc2ODogVGhlIHNpZ25hbCBoYW5kbGVyIG9mIHRoZSBzaWduYWwgbW9kdWxlIG9ubHkgY2FsbHMKKyAgUHlfQWRkUGVuZGluZ0NhbGwoKSBmb3IgdGhlIGZpcnN0IHNpZ25hbCB0byBmaXggYSBkZWFkbG9jayBvbiByZWVudHJhbnQgb3IKKyAgcGFyYWxsZWwgY2FsbHMuIFB5RXJyX1NldEludGVycnVwdCgpIHdyaXRlcyBhbHNvIGludG8gdGhlIHdha2UgdXAgZmlsZS4KKworLSBJc3N1ZSAjMTE0OTI6IGZpeCBzZXZlcmFsIGlzc3VlcyB3aXRoIGhlYWRlciBmb2xkaW5nIGluIHRoZSBlbWFpbCBwYWNrYWdlLgorCistIElzc3VlICMxMTg1MjogQWRkIG1pc3NpbmcgaW1wb3J0cyBhbmQgdXBkYXRlIHRlc3RzLgorCistIElzc3VlICMxMTg3NTogY29sbGVjdGlvbnMuT3JkZXJlZERpY3QncyBfX3JlZHVjZV9fIHdhcyB0ZW1wb3JhcmlseQorICBtdXRhdGluZyB0aGUgb2JqZWN0IGluc3RlYWQgb2YganVzdCB3b3JraW5nIG9uIGEgY29weS4KKworLSBJc3N1ZSAjMTE0Njc6IEZpeCB1cmxwYXJzZSBiZWhhdmlvciB3aGVuIGhhbmRsaW5nIHVybHMgd2hpY2ggY29udGFpbnMgc2NoZW1lCisgIHNwZWNpZmljIHBhcnQgb25seSBkaWdpdHMuIFBhdGNoIGJ5IFNhbnRvc28gV2lqYXlhLgorCistIGNvbGxlY3Rpb25zLkNvdW50ZXIoKS5jb3B5KCkgbm93IHdvcmtzIGNvcnJlY3RseSBmb3Igc3ViY2xhc3Nlcy4KKworLSBJc3N1ZSAjMTE0NzQ6IEZpeCB0aGUgYnVnIHdpdGggdXJsMnBhdGhuYW1lKCkgaGFuZGxpbmcgb2YgJy9DfC8nIG9uIFdpbmRvd3MuCisgIFBhdGNoIGJ5IFNhbnRvc28gV2lqYXlhLgorCistIElzc3VlICMxMTY4NDogY29tcGxldGUgZW1haWwucGFyc2VyIGJ5dGVzIEFQSSBieSBhZGRpbmcgQnl0ZXNIZWFkZXJQYXJzZXIuCisKKy0gVGhlIGJ6MiBtb2R1bGUgbm93IGhhbmRsZXMgNEdpQisgaW5wdXQgYnVmZmVycyBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzkyMzM6IEZpeCBqc29uLmxvYWRzKCd7fScpIHRvIHJldHVybiBhIGRpY3QgKGluc3RlYWQgb2YgYSBsaXN0KSwgd2hlbgorICBfanNvbiBpcyBub3QgYXZhaWxhYmxlLgorCistIElzc3VlICMxMTgzMDogUmVtb3ZlIHVubmVjZXNzYXJ5IGludHJvc3BlY3Rpb24gY29kZSBpbiB0aGUgZGVjaW1hbCBtb2R1bGUuCisKKy0gSXNzdWUgIzExNzAzOiB1cmxsaWIyLmdldHVybCgpIGRvZXMgbm90IHJldHVybiBjb3JyZWN0IHVybCB3aGVuIHRoZSBvcmlnaW5hbAorICB1cmwgY29udGFpbnMgI2ZyYWdtZW50LgorCistIElzc3VlICMxMDAxOTogRml4ZWQgcmVncmVzc2lvbiBpbiBqc29uIG1vZHVsZSB3aGVyZSBhbiBpbmRlbnQgb2YgMCBzdG9wcGVkCisgIGFkZGluZyBuZXdsaW5lcyBhbmQgYWN0ZWQgaW5zdGVhZCBsaWtlICdOb25lJy4KKworLSBJc3N1ZSAjMTExODY6IHB5ZG9jIGlnbm9yZXMgYSBtb2R1bGUgaWYgaXRzIG5hbWUgY29udGFpbnMgYSBzdXJyb2dhdGUKKyAgY2hhcmFjdGVyIGluIHRoZSBpbmRleCBvZiBtb2R1bGVzLgorCistIElzc3VlICMxMTgxNTogVXNlIGEgbGlnaHQtd2VpZ2h0IFNpbXBsZVF1ZXVlIGZvciB0aGUgcmVzdWx0IHF1ZXVlIGluCisgIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yLgorCistIElzc3VlICM1MTYyOiBUcmVhdCBzZXJ2aWNlcyBsaWtlIGZyb3plbiBleGVjdXRhYmxlcyB0byBhbGxvdyBjaGlsZCBzcGF3bmluZworICBmcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIG9uIFdpbmRvd3MuCisKKy0gbG9nZ2luZy5iYXNpY0NvbmZpZyBub3cgc3VwcG9ydHMgYW4gb3B0aW9uYWwgJ2hhbmRsZXJzJyBhcmd1bWVudCB0YWtpbmcgYW4KKyAgaXRlcmFibGUgb2YgaGFuZGxlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIHJvb3QgbG9nZ2VyLiBBZGRpdGlvbmFsIHBhcmFtZXRlcgorICBjaGVja3Mgd2VyZSBhbHNvIGFkZGVkIHRvIGJhc2ljQ29uZmlnLgorCistIElzc3VlICMxMTgxNDogRml4IGxpa2VseSB0eXBvIGluIG11bHRpcHJvY2Vzc2luZy5Qb29sLl90ZXJtaW5hdGUoKS4KKworLSBJc3N1ZSAjMTE3NDc6IEZpeCByYW5nZSBmb3JtYXR0aW5nIGluIGRpZmZsaWIuY29udGV4dF9kaWZmKCkgYW5kCisgIGRpZmZsaWIudW5pZmllZF9kaWZmKCkuCisKKy0gSXNzdWUgIzg0Mjg6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIG11bHRpcHJvY2Vzc2luZy5Qb29sIHdoZW4gdGVybWluYXRpbmcKKyAgd29ya2VyIHByb2Nlc3NlczogbmV3IHByb2Nlc3NlcyB3b3VsZCBiZSBzcGF3bmVkIHdoaWxlIHRoZSBwb29sIGlzIGJlaW5nCisgIHNodXQgZG93bi4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMjY1MDogcmUuZXNjYXBlKCkgbm8gbG9uZ2VyIGVzY2FwZXMgdGhlICdfJy4KKworLSBJc3N1ZSAjMTE3NTc6IHNlbGVjdC5zZWxlY3QoKSBub3cgcmFpc2VzIFZhbHVlRXJyb3Igd2hlbiBhIG5lZ2F0aXZlIHRpbWVvdXQKKyAgaXMgcGFzc2VkIChwcmV2aW91c2x5LCBhIHNlbGVjdC5lcnJvciB3aXRoIEVJTlZBTCB3b3VsZCBiZSByYWlzZWQpLiAgUGF0Y2gKKyAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICM3MzExOiBmaXggaHRtbC5wYXJzZXIgdG8gYWNjZXB0IG5vbi1BU0NJSSBhdHRyaWJ1dGUgdmFsdWVzLgorCistIElzc3VlICMxMTYwNTogZW1haWwucGFyc2VyLkJ5dGVzRmVlZFBhcnNlciB3YXMgaW5jb3JyZWN0bHkgY29udmVydGluZworICBtdWx0aXBhcnQgc3VicGFydHMgd2l0aCBhbiA4LWJpdCBDVEUgaW50byB1bmljb2RlIGluc3RlYWQgb2YgcHJlc2VydmluZyB0aGUKKyAgYnl0ZXMuCisKKy0gSXNzdWUgIzE2OTA2MDg6IGVtYWlsLnV0aWwuZm9ybWF0YWRkciBpcyBub3cgUkZDIDIwNDcgYXdhcmU6ICBpdCBub3cgaGFzIGEKKyAgY2hhcnNldCBwYXJhbWV0ZXIgdGhhdCBkZWZhdWx0cyB0byB1dGYtOCBhbmQgaXMgdXNlZCBhcyB0aGUgY2hhcnNldCBmb3IgUkZDCisgIDIwNDcgZW5jb2Rpbmcgd2hlbiB0aGUgcmVhbG5hbWUgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzEwOTYzOiBFbnN1cmUgdGhhdCBzdWJwcm9jZXNzLmNvbW11bmljYXRlKCkgbmV2ZXIgcmFpc2VzIEVQSVBFLgorCistIElzc3VlICMxMDc5MTogSW1wbGVtZW50IG1pc3NpbmcgbWV0aG9kIEd6aXBGaWxlLnJlYWQxKCksIGFsbG93aW5nIEd6aXBGaWxlCisgIHRvIGJlIHdyYXBwZWQgaW4gYSBUZXh0SU9XcmFwcGVyLiAgUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTcwNzogQWRkZWQgYSBmYXN0IEMgdmVyc2lvbiBvZiBmdW5jdG9vbHMuY21wX3RvX2tleSgpLgorICBQYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIElzc3VlICMxMTY4ODogQWRkIHNxbGl0ZTMuQ29ubmVjdGlvbi5zZXRfdHJhY2VfY2FsbGJhY2soKS4gIFBhdGNoIGJ5CisgIFRvcnN0ZW4gTGFuZHNjaG9mZi4KKworLSBJc3N1ZSAjMTE3NDY6IEZpeCBTU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbigpIHRvIGFjY2VwdCBlbGxpcHRpYyBjdXJ2ZQorICBwcml2YXRlIGtleXMuCisKKy0gSXNzdWUgIzU4NjM6IFJld3JpdGUgQloyRmlsZSBpbiBwdXJlIFB5dGhvbiwgYW5kIGFsbG93IGl0IHRvIGFjY2VwdAorICBmaWxlLWxpa2Ugb2JqZWN0cyB1c2luZyBhIG5ldyBgYGZpbGVvYmpgYCBjb25zdHJ1Y3RvciBhcmd1bWVudC4gIFBhdGNoIGJ5CisgIE5hZGVlbSBWYXdkYS4KKworLSB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRTYW1lRWxlbWVudHMgaGFzIGJlZW4gcmVtb3ZlZC4KKworLSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkgcmFpc2VzIGEgUnVudGltZUVycm9yIGlmIGluaXRmc2VuY29kaW5nKCkgd2FzIG5vdAorICBjYWxsZWQgeWV0OiBkZXRlY3QgYm9vdHN0cmFwIChzdGFydHVwKSBpc3N1ZXMgZWFybGllci4KKworLSBJc3N1ZSAjMTEzOTM6IEFkZCB0aGUgbmV3IGZhdWx0aGFuZGxlciBtb2R1bGUuCisKKy0gSXNzdWUgIzExNjE4OiBGaXggdGhlIHRpbWVvdXQgbG9naWMgaW4gdGhyZWFkaW5nLkxvY2suYWNxdWlyZSgpIHVuZGVyIFdpbmRvd3MuCisKKy0gUmVtb3ZlZCB0aGUgJ3N0cmljdCcgYXJndW1lbnQgdG8gZW1haWwucGFyc2VyLlBhcnNlciwgd2hpY2ggaGFzIGJlZW4KKyAgZGVwcmVjYXRlZCBzaW5jZSBQeXRob24gMi40LgorCistIElzc3VlICMxMTI1NjogRml4IGluc3BlY3QuZ2V0Y2FsbGFyZ3Mgb24gZnVuY3Rpb25zIHRoYXQgdGFrZSBvbmx5IGtleXdvcmQKKyAgYXJndW1lbnRzLgorCistIElzc3VlICMxMTY5NjogRml4IElEIGdlbmVyYXRpb24gaW4gbXNpbGliLgorCistIGl0ZXJ0b29scy5hY2N1bXVsYXRlIG5vdyBzdXBwb3J0cyBhbiBvcHRpb25hbCAqZnVuYyogYXJndW1lbnQgZm9yCisgIGEgdXNlci1zdXBwbGllZCBiaW5hcnkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzExNjkyOiBSZW1vdmUgdW5uZWNlc3NhcnkgZGVtbyBmdW5jdGlvbnMgaW4gc3VicHJvY2VzcyBtb2R1bGUuCisKKy0gSXNzdWUgIzk2OTY6IEZpeCBleGNlcHRpb24gaW5jb3JyZWN0bHkgcmFpc2VkIGJ5IHhkcmxpYi5QYWNrZXIucGFja19pbnQgd2hlbgorICB0cnlpbmcgdG8gcGFjayBhIG5lZ2F0aXZlIChpbi1yYW5nZSkgaW50ZWdlci4KKworLSBJc3N1ZSAjMTE2NzU6IG11bHRpcHJvY2Vzc2luZy5bUmF3XUFycmF5IG9iamVjdHMgY3JlYXRlZCBmcm9tIGFuIGludGVnZXIgc2l6ZQorICBhcmUgbm93IHplcm9lZCBvbiBjcmVhdGlvbi4gIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3VyIHNwZWNpZmllZCBieSB0aGUKKyAgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjNzYzOTogRml4IHNob3J0IGZpbGUgbmFtZSBnZW5lcmF0aW9uIGluIGJkaXN0X21zaQorCistIElzc3VlICMxMTY1OTogRml4IFJlc291cmNlV2FybmluZyBpbiB0ZXN0X3N1YnByb2Nlc3MgaW50cm9kdWNlZCBieSAjMTE0NTkuCisgIFBhdGNoIGJ5IEJlbiBIYXlkZW4uCisKKy0gSXNzdWUgIzExNjM1OiBEb24ndCB1c2UgcG9sbGluZyBpbiB3b3JrZXIgdGhyZWFkcyBhbmQgcHJvY2Vzc2VzIGxhdW5jaGVkIGJ5CisgIGNvbmN1cnJlbnQuZnV0dXJlcy4KKworLSBJc3N1ZSAjNjgxMTogQWxsb3cgaW1wb3J0bGliIHRvIGNoYW5nZSBhIGNvZGUgb2JqZWN0J3MgY29fZmlsZW5hbWUgYXR0cmlidXRlCisgIHRvIG1hdGNoIHRoZSBwYXRoIHRvIHdoZXJlIHRoZSBzb3VyY2UgY29kZSBjdXJyZW50bHkgaXMsIG5vdCB3aGVyZSB0aGUgY29kZQorICBvYmplY3Qgb3JpZ2luYWxseSBjYW1lIGZyb20uCisKKy0gSXNzdWUgIzg3NTQ6IEhhdmUgaW1wb3J0bGliIHVzZSB0aGUgcmVwciBvZiBhIG1vZHVsZSBuYW1lIGluIGVycm9yIG1lc3NhZ2VzLgorCistIElzc3VlICMxMTU5MTogUHJldmVudCAiaW1wb3J0IHNpdGUiIGZyb20gbW9kaWZ5aW5nIHN5cy5wYXRoIHdoZW4gcHl0aG9uCisgIHdhcyBzdGFydGVkIHdpdGggLVMuCisKKy0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIG5vdyBhZGRzIGEgX3NvdXJjZSBhdHRyaWJ1dGUgdG8gdGhlIGdlbmVyYXRlZAorICBjbGFzcy4gIFRoaXMgbWFrZSB0aGUgc291cmNlIG1vcmUgYWNjZXNzaWJsZSB0aGFuIHRoZSBvdXRkYXRlZAorICAidmVyYm9zZSIgb3B0aW9uIHdoaWNoIHByaW50cyB0byBzdGRvdXQgYnV0IGRvZXNuJ3QgbWFrZSB0aGUgc291cmNlCisgIHN0cmluZyBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzExMzcxOiBNYXJrIGdldG9wdCBlcnJvciBtZXNzYWdlcyBhcyBsb2NhbGl6YWJsZS4gIFBhdGNoIGJ5IEZpbGlwCisgIEdydXN6Y3p5xYRza2kuCisKKy0gSXNzdWUgIzExMzMzOiBBZGQgX19zbG90c19fIHRvIGNvbGxlY3Rpb25zIEFCQ3MuCisKKy0gSXNzdWUgIzExNjI4OiBjbXBfdG9fa2V5IGdlbmVyYXRlZCBjbGFzcyBzaG91bGQgdXNlIF9fc2xvdHNfXy4KKworLSBJc3N1ZSAjMTE2NjY6IGxldCBoZWxwKCkgZGlzcGxheSBuYW1lZCB0dXBsZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzCisgIHRoYXQgc3RhcnQgd2l0aCBhIGxlYWRpbmcgdW5kZXJzY29yZS4KKworLSBJc3N1ZSAjMTE2NjI6IE1ha2UgdXJsbGliIGFuZCB1cmxsaWIyIGlnbm9yZSByZWRpcmVjdGlvbnMgaWYgdGhlCisgIHNjaGVtZSBpcyBub3QgSFRUUCwgSFRUUFMgb3IgRlRQIChDVkUtMjAxMS0xNTIxKS4KKworLSBJc3N1ZSAjNTUzNzogRml4IHRpbWUyaXNveigpIGFuZCB0aW1lMm5ldHNjYXBlKCkgZnVuY3Rpb25zIG9mCisgIGh0dHBsaWIuY29va2llamFyIGZvciBleHBpcmF0aW9uIHllYXIgZ3JlYXRlciB0aGFuIDIwMzggb24gMzItYml0IHN5c3RlbXMuCisKKy0gSXNzdWUgIzQzOTE6IFVzZSBwcm9wZXIgZ2V0dGV4dCBwbHVyYWwgZm9ybXMgaW4gb3B0cGFyc2UuCisKKy0gSXNzdWUgIzExMTI3OiBSYWlzZSBhIFR5cGVFcnJvciB3aGVuIHRyeWluZyB0byBwaWNrbGUgYSBzb2NrZXQgb2JqZWN0LgorCistIElzc3VlICMxMTU2MzogQ29ubmVjdGlvbjpjbG9zZSBoZWFkZXIgaXMgc2VudCBieSByZXF1ZXN0cyB1c2luZyBVUkxPcGVuZXIKKyAgY2xhc3Mgd2hpY2ggaGVscHMgaW4gY2xvc2luZyBvZiBzb2NrZXRzIGFmdGVyIGNvbm5lY3Rpb24gaXMgb3Zlci4gUGF0Y2gKKyAgY29udHJpYnV0aW9ucyBieSBKZWZmIE1jTmVpbCBhbmQgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTQ1OTogQSBgYGJ1ZnNpemVgYCB2YWx1ZSBvZiAwIGluIHN1YnByb2Nlc3MuUG9wZW4oKSByZWFsbHkgY3JlYXRlcworICB1bmJ1ZmZlcmVkIHBpcGVzLCBzdWNoIHRoYXQgc2VsZWN0KCkgd29ya3MgcHJvcGVybHkgb24gdGhlbS4KKworLSBJc3N1ZSAjNTQyMTogRml4IG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZSB3aGVuIG9uZSBvZiBzb2NrZXQuc2VuZHRvKCkncworICBhcmd1bWVudHMgaGFzIHRoZSB3cm9uZyB0eXBlLiAgUGF0Y2ggYnkgTmlraXRhIFZldG9zaGtpbi4KKworLSBJc3N1ZSAjMTA4MTI6IEFkZCBzb21lIGV4dHJhIHBvc2l4IGZ1bmN0aW9ucyB0byB0aGUgb3MgbW9kdWxlLgorCistIElzc3VlICMxMDk3OTogdW5pdHRlc3Qgc3Rkb3V0IGJ1ZmZlcmluZyBub3cgd29ya3Mgd2l0aCBjbGFzcyBhbmQgbW9kdWxlCisgIHNldHVwIGFuZCB0ZWFyZG93bi4KKworLSBJc3N1ZSAjMTE1Nzc6IGZpeCBSZXNvdXJjZVdhcm5pbmcgdHJpZ2dlcmVkIGJ5IGltcHJvdmVkIGJpbmhleCB0ZXN0IGNvdmVyYWdlCisKKy0gSXNzdWUgIzExMjQzOiBmaXggdGhlIHBhcmFtZXRlciBxdWVyeWluZyBtZXRob2RzIG9mIE1lc3NhZ2UgdG8gd29yayBpZgorICB0aGUgaGVhZGVycyBjb250YWluIHVuLWVuY29kZWQgbm9uLUFTQ0lJIGRhdGEuCisKKy0gSXNzdWUgIzExNDAxOiBmaXggaGFuZGxpbmcgb2YgaGVhZGVycyB3aXRoIG5vIHZhbHVlOyB0aGlzIGZpeGVzIGEgcmVncmVzc2lvbgorICByZWxhdGl2ZSB0byBQeXRob24yIGFuZCB0aGUgcmVzdWx0IGlzIG5vdyB0aGUgc2FtZSBhcyBpdCB3YXMgaW4gUHl0aG9uMi4KKworLSBJc3N1ZSAjOTI5ODogYmFzZTY0IGJvZGllcyB3ZXJlbid0IGJlaW5nIGZvbGRlZCB0byBsaW5lIGxlbmd0aHMgbGVzcyB0aGFuIDc4LAorICB3aGljaCB3YXMgYSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIuICBVbmxpa2UgUHl0aG9uMiwgdGhlIGxhc3QgbGluZQorICBvZiB0aGUgZm9sZGVkIGJvZHkgbm93IGVuZHMgd2l0aCBhIGNhcnJpYWdlIHJldHVybi4KKworLSBJc3N1ZSAjMTE1NjA6IHNodXRpbC51bnBhY2tfYXJjaGl2ZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgdGhlIGZvcm1hdAorICBwYXJhbWV0ZXIuIFBhdGNoIGJ5IEV2YW4gRGFuZHJlYS4KKworLSBJc3N1ZSAjNTg3MDogQWRkIGBzdWJwcm9jZXNzLkRFVk5VTExgIGNvbnN0YW50LgorCistIElzc3VlICMxMTEzMzogZml4IHR3byBjYXNlcyB3aGVyZSBpbnNwZWN0LmdldGF0dHJfc3RhdGljIGNhbiB0cmlnZ2VyIGNvZGUKKyAgZXhlY3V0aW9uLiBQYXRjaCBieSBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzExNTY5OiB1c2UgYWJzb2x1dGUgcGF0aCB0byB0aGUgc3lzY3RsIGNvbW1hbmQgaW4gbXVsdGlwcm9jZXNzaW5nIHRvCisgIGVuc3VyZSB0aGF0IGl0IHdpbGwgYmUgZm91bmQgcmVnYXJkbGVzcyBvZiB0aGUgc2hlbGwgUEFUSC4gVGhpcyBlbnN1cmVzCisgIHRoYXQgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCB3b3JrcyBvbiBkZWZhdWx0IGluc3RhbGxzIG9mIE1hY09TWC4KKworLSBJc3N1ZSAjMTE1MDE6IGRpc3V0aWxzLmFyY2hpdmVfdXRpbHMubWFrZV96aXBmaWxlIG5vIGxvbmdlciBmYWlscyBpZiB6bGliIGlzCisgIG5vdCBpbnN0YWxsZWQuIEluc3RlYWQsIHRoZSB6aXBmaWxlLlpJUF9TVE9SRUQgY29tcHJlc3Npb24gaXMgdXNlZCB0byBjcmVhdGUKKyAgdGhlIFppcEZpbGUuIFBhdGNoIGJ5IE5hdGFsaWEgQi4gQmlkYXJ0LgorCistIElzc3VlICMxMTI4OTogYHNtdHAuU01UUGAgY2xhc3MgaXMgbm93IGEgY29udGV4dCBtYW5hZ2VyIHNvIGl0IGNhbiBiZSB1c2VkCisgIGluIGEgYHdpdGhgIHN0YXRlbWVudC4gIENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbGEuCisKKy0gSXNzdWUgIzExNTU0OiBGaXhlZCBzdXBwb3J0IGZvciBKYXBhbmVzZSBjb2RlY3M7IHByZXZpb3VzbHkgdGhlIGJvZHkgb3V0cHV0CisgIGVuY29kaW5nIHdhcyBub3QgZG9uZSBpZiBldWMtanAgb3Igc2hpZnQtamlzIHdhcyBzcGVjaWZpZWQgYXMgdGhlIGNoYXJzZXQuCisKKy0gSXNzdWUgIzExNTA5OiBTaWduaWZpY2FudGx5IGluY3JlYXNlIHRlc3QgY292ZXJhZ2Ugb2YgZmlsZWlucHV0LgorICBQYXRjaCBieSBEZW52ZXIgQ29uZXliZWFyZSBhdCBQeUNvbiAyMDExIFNwcmludHMuCisKKy0gSXNzdWUgIzExNDA3OiBgVGVzdENhc2UucnVuYCByZXR1cm5zIHRoZSByZXN1bHQgb2JqZWN0IHVzZWQgb3IgY3JlYXRlZC4KKyAgQ29udHJpYnV0ZWQgYnkgSmFuYXRoYW4gSGFydGxleS4KKworLSBJc3N1ZSAjMTE1MDA6IEZpeGVkIGEgYnVnIGluIHRoZSBPUyBYIHByb3h5IGJ5cGFzcyBjb2RlIGZvciBmdWxseSBxdWFsaWZpZWQKKyAgSVAgYWRkcmVzc2VzIGluIHRoZSBwcm94eSBleGNlcHRpb24gbGlzdC4KKworLSBJc3N1ZSAjMTE0OTE6IGRibS5lcnJvciBpcyBubyBsb25nZXIgcmFpc2VkIHdoZW4gZGJtLm9wZW4gaXMgY2FsbGVkIHdpdGgKKyAgdGhlICJuIiBhcyB0aGUgZmxhZyBhcmd1bWVudCBhbmQgdGhlIGZpbGUgZXhpc3RzLiBUaGUgYmVoYXZpb3IgbWF0Y2hlcworICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZ2VuZXJhbCBsb2dpYy4KKworLSBJc3N1ZSAjMTE2MjQ3NzogUG9zdGVsIFByaW5jaXBsZSBhZGp1c3RtZW50IHRvIGVtYWlsIGRhdGUgcGFyc2luZzogaGFuZGxlIHRoZQorICBmYWN0IHRoYXQgc29tZSBub24tY29tcGxpYW50IE1VQXMgdXNlICcuJyBpbnN0ZWFkIG9mICc6JyBpbiB0aW1lIHNwZWNzLgorCistIElzc3VlICMxMTEzMTogRml4IHNpZ24gb2YgemVybyBpbiBkZWNpbWFsLkRlY2ltYWwgcGx1cyBhbmQgbWludXMKKyAgb3BlcmF0aW9ucyB3aGVuIHRoZSByb3VuZGluZyBtb2RlIGlzIFJPVU5EX0ZMT09SLgorCistIElzc3VlICM5OTM1OiBTcGVlZCB1cCBwaWNrbGluZyBvZiBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkIGNsYXNzZXMuCisKKy0gSXNzdWUgIzU2MjI6IEZpeCBjdXJzZXMud3JhcHBlciB0byByYWlzZSBjb3JyZWN0IGV4Y2VwdGlvbiBpZiBjdXJzZXMKKyAgaW5pdGlhbGl6YXRpb24gZmFpbHMuCisKKy0gSXNzdWUgIzExNDA4OiBJbiB0aHJlYWRpbmcuTG9jay5hY3F1aXJlKCksIG9ubHkgY2FsbCBnZXR0aW1lb2ZkYXkoKSB3aGVuCisgIHJlYWxseSBuZWNlc3NhcnkuICBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzExMzkxOiBXcml0aW5nIHRvIGEgbW1hcCBvYmplY3QgY3JlYXRlZCB3aXRoCisgIGBgbW1hcC5QUk9UX1JFQUR8bW1hcC5QUk9UX0VYRUNgYCB3b3VsZCBzZWdmYXVsdCBpbnN0ZWFkIG9mIHJhaXNpbmcgYQorICBUeXBlRXJyb3IuICBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzk3OTU6IGFkZCBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgc3VwcG9ydCBmb3Igbm50cGxpYi5OTlRQIGNsYXNzLgorCistIElzc3VlICMxMTMwNjogbWFpbGJveCBpbiBjZXJ0YWluIGNhc2VzIGFkYXB0cyB0byBhbiBpbmFiaWxpdHkgdG8gb3BlbgorICBjZXJ0YWluIGZpbGVzIGluIHJlYWQtd3JpdGUgbW9kZS4gIFByZXZpb3VzbHkgaXQgZGV0ZWN0ZWQgdGhpcyBieQorICBjaGVja2luZyBmb3IgRUFDQ0VTLCBub3cgaXQgYWxzbyBjaGVja3MgZm9yIEVST0ZTLgorCistIElzc3VlICMxMTI2NTogYXN5bmNvcmUgbm93IGNvcnJlY3RseSBoYW5kbGVzIEVQSVBFLCBFQkFERiBhbmQgRUFHQUlOIGVycm9ycworICBvbiBhY2NlcHQoKSwgc2VuZCgpIGFuZCByZWN2KCkuCisKKy0gSXNzdWUgIzExMzc3OiBEZXByZWNhdGUgcGxhdGZvcm0ucG9wZW4oKSBhbmQgcmVpbXBsZW1lbnQgaXQgd2l0aCBvcy5wb3BlbigpLgorCistIElzc3VlICM4NTEzOiBPbiBVTklYLCBzdWJwcm9jZXNzIHN1cHBvcnRzIGJ5dGVzIGNvbW1hbmQgc3RyaW5nLgorCistIElzc3VlICMxMDg2NjogQWRkIHNvY2tldC5zZXRob3N0bmFtZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjMTExNDA6IExvY2sucmVsZWFzZSgpIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3Igd2hlbiBhdHRlbXB0aW5nCisgIHRvIHJlbGVhc2UgYW4gdW5hY3F1aXJlZCBsb2NrLCBhcyBjbGFpbWVkIGluIHRoZSB0aHJlYWRpbmcgZG9jdW1lbnRhdGlvbi4KKyAgVGhlIF90aHJlYWQuZXJyb3IgZXhjZXB0aW9uIGlzIG5vdyBhbiBhbGlhcyBvZiBSdW50aW1lRXJyb3IuICBQYXRjaCBieQorICBGaWxpcCBHcnVzemN6ecWEc2tpLiAgUGF0Y2ggZm9yIF9kdW1teV90aHJlYWQgYnkgQXltZXJpYyBBdWd1c3Rpbi4KKworLSBJc3N1ZSAjODU5NDogZnRwbGliIG5vdyBwcm92aWRlcyBhIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciB0byBzcGVjaWZ5IHdoaWNoCisgIChhZGRyZXNzLCBwb3J0KSB0byBiaW5kIHRvIGJlZm9yZSBjb25uZWN0aW5nLgorCistIElzc3VlICMxMTMyNjogQWRkIHRoZSBtaXNzaW5nIGNvbm5lY3RfZXgoKSBpbXBsZW1lbnRhdGlvbiBmb3IgU1NMIHNvY2tldHMsCisgIGFuZCBtYWtlIGl0IHdvcmsgZm9yIG5vbi1ibG9ja2luZyBjb25uZWN0cy4KKworLSBJc3N1ZSAjMTEyOTc6IEFkZCBjb2xsZWN0aW9ucy5DaGFpbk1hcCgpLgorCistIElzc3VlICMxMDc1NTogQWRkIHRoZSBwb3NpeC5mbGlzdGRpcigpIGZ1bmN0aW9uLiAgUGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzQ3NjE6IEFkZCB0aGUgYGAqYXQoKWBgIGZhbWlseSBvZiBmdW5jdGlvbnMgKG9wZW5hdCgpLCBldGMuKSB0byB0aGUKKyAgcG9zaXggbW9kdWxlLiAgUGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzczMjI6IFRyeWluZyB0byByZWFkIGZyb20gYSBzb2NrZXQncyBmaWxlLWxpa2Ugb2JqZWN0IGFmdGVyIGEgdGltZW91dAorICBvY2N1cnJlZCBub3cgcmFpc2VzIGFuIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbG9zaW5nIGRhdGEuCisKKy0gSXNzdWUgIzExMjkxOiBwb3BsaWIuUE9QIG5vIGxvbmdlciBzdXBwcmVzc2VzIGVycm9ycyBvbiBxdWl0KCkuCisKKy0gSXNzdWUgIzExMTc3OiBhc3luY29yZSdzIGNyZWF0ZV9zb2NrZXQoKSBhcmd1bWVudHMgY2FuIG5vdyBiZSBvbWl0dGVkLgorCistIElzc3VlICM2MDY0OiBBZGQgYSBgYGRhZW1vbmBgIGtleXdvcmQgYXJndW1lbnQgdG8gdGhlIHRocmVhZGluZy5UaHJlYWQKKyAgYW5kIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzIGNvbnN0cnVjdG9ycyBpbiBvcmRlciB0byBvdmVycmlkZSB0aGUKKyAgZGVmYXVsdCBiZWhhdmlvdXIgb2YgaW5oZXJpdGluZyB0aGUgZGFlbW9uaWMgcHJvcGVydHkgZnJvbSB0aGUgY3VycmVudAorICB0aHJlYWQvcHJvY2Vzcy4KKworLSBJc3N1ZSAjMTA5NTY6IEJ1ZmZlcmVkIEkvTyBjbGFzc2VzIHJldHJ5IHJlYWRpbmcgb3Igd3JpdGluZyBhZnRlciBhIHNpZ25hbAorICBoYXMgYXJyaXZlZCBhbmQgdGhlIGhhbmRsZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgorCistIElzc3VlICMxMDc4NDogTmV3IG9zLmdldHByaW9yaXR5KCkgYW5kIG9zLnNldHByaW9yaXR5KCkgZnVuY3Rpb25zLgorCistIElzc3VlICMxMTExNDogRml4IGNhdGFzdHJvcGhpYyBwZXJmb3JtYW5jZSBvZiB0ZWxsKCkgb24gdGV4dCBmaWxlcyAodXAKKyAgdG8gMTAwMHggZmFzdGVyIGluIHNvbWUgY2FzZXMpLiAgSXQgaXMgc3RpbGwgb25lIHRvIHR3byBvcmRlciBvZiBtYWduaXR1ZGVzCisgIHNsb3dlciB0aGFuIGJpbmFyeSB0ZWxsKCkuCisKKy0gSXNzdWUgIzEwODgyOiBBZGQgb3Muc2VuZGZpbGUgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzEwODY4OiBBbGxvdyB1c2FnZSBvZiB0aGUgcmVnaXN0ZXIgbWV0aG9kIG9mIGFuIEFCQyBhcyBhIGNsYXNzCisgIGRlY29yYXRvci4KKworLSBJc3N1ZSAjMTEyMjQ6IEZpeGVkIGEgcmVncmVzc2lvbiBpbiB0YXJmaWxlIHRoYXQgYWZmZWN0ZWQgdGhlIGZpbGUtbGlrZQorICBvYmplY3RzIHJldHVybmVkIGJ5IFRhckZpbGUuZXh0cmFjdGZpbGUoKSByZWdhcmRpbmcgcGVyZm9ybWFuY2UsIG1lbW9yeQorICBjb25zdW1wdGlvbiBhbmQgZmFpbHVyZXMgd2l0aCB0aGUgc3RyZWFtIGludGVyZmFjZS4KKworLSBJc3N1ZSAjMTA5MjQ6IEFkZGluZyBzYWx0IGFuZCBNb2R1bGFyIENyeXB0IEZvcm1hdCB0byBjcnlwdCBsaWJyYXJ5LgorICBNb3ZlZCBvbGQgQyB3cmFwcGVyIHRvIF9jcnlwdCwgYW5kIGFkZGVkIGEgUHl0aG9uIHdyYXBwZXIgd2l0aAorICBlbmhhbmNlZCBzYWx0IGdlbmVyYXRpb24gYW5kIHNpbXBsZXIgQVBJIGZvciBwYXNzd29yZCBnZW5lcmF0aW9uLgorCistIElzc3VlICMxMTA3NDogTWFrZSAndG9rZW5pemUnIHNvIGl0IGNhbiBiZSByZWxvYWRlZC4KKworLSBJc3N1ZSAjMTEwODU6IE1vdmVkIGNvbGxlY3Rpb25zIGFic3RyYWN0IGJhc2UgY2xhc3NlcyBpbnRvIGEgc2VwYXJhdGUKKyAgbW9kdWxlIGNhbGxlZCBjb2xsZWN0aW9ucy5hYmMsIGZvbGxvd2luZyB0aGUgcGF0dGVybiB1c2VkIGJ5IGltcG9ydGxpYi5hYmMuCisgIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdGhlIG5hbWVzIGFyZSBpbXBvcnRlZCBpbnRvIHRoZSBjb2xsZWN0aW9ucworICBtb2R1bGUuCisKKy0gSXNzdWUgIzQ2ODE6IEFsbG93IG1tYXAoKSB0byB3b3JrIG9uIGZpbGUgc2l6ZXMgYW5kIG9mZnNldHMgbGFyZ2VyIHRoYW4KKyAgNEdCLCBldmVuIG9uIDMyLWJpdCBidWlsZHMuICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLCBhZGFwdGVkIGZvcgorICAzMi1iaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTExNjk6IGNvbXBpbGVhbGwgbW9kdWxlIHVzZXMgcmVwcigpIHRvIGZvcm1hdCBmaWxlbmFtZXMgYW5kIHBhdGhzIHRvCisgIGVzY2FwZSBzdXJyb2dhdGUgY2hhcmFjdGVycyBhbmQgc2hvdyBzcGFjZXMuCisKKy0gSXNzdWUgIzExMDg5OiBGaXggcGVyZm9ybWFuY2UgaXNzdWUgbGltaXRpbmcgdGhlIHVzZSBvZiBDb25maWdQYXJzZXIoKQorICB3aXRoIGxhcmdlIGNvbmZpZyBmaWxlcy4KKworLSBJc3N1ZSAjMTAyNzY6IEZpeCB0aGUgcmVzdWx0cyBvZiB6bGliLmNyYzMyKCkgYW5kIHpsaWIuYWRsZXIzMigpIG9uIGJ1ZmZlcnMKKyAgbGFyZ2VyIHRoYW4gNEdCLiAgUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTM4ODogQWRkZWQgYSBjbGVhcigpIG1ldGhvZCB0byBNdXRhYmxlU2VxdWVuY2UKKworLSBJc3N1ZSAjMTExNzQ6IEFkZCBhcmdwYXJzZS5NZXRhdmFyVHlwZUhlbHBGb3JtYXR0ZXIsIHdoaWNoIHVzZXMgdHlwZSBuYW1lcworICBmb3IgdGhlIG5hbWVzIG9mIG9wdGlvbmFsIGFuZCBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpbiBoZWxwIG1lc3NhZ2VzLgorCistIElzc3VlICM5MzQ4OiBSYWlzZSBhbiBlYXJseSBlcnJvciBpZiBhcmdwYXJzZSBuYXJncyBhbmQgbWV0YXZhciBkb24ndCBtYXRjaC4KKworLSBJc3N1ZSAjODk4MjogSW1wcm92ZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGFyZ3BhcnNlIE5hbWVzcGFjZSBvYmplY3QuCisKKy0gSXNzdWUgIzkzNDM6IERvY3VtZW50IHRoYXQgYXJncGFyc2UgcGFyZW50IHBhcnNlcnMgbXVzdCBiZSBjb25maWd1cmVkIGJlZm9yZQorICB0aGVpciBjaGlsZHJlbi4KKworLSBJc3N1ZSAjOTAyNjogRml4IG9yZGVyIG9mIGFyZ3BhcnNlIHN1Yi1jb21tYW5kcyBpbiBoZWxwIG1lc3NhZ2VzLgorCistIElzc3VlICM5MzQ3OiBGaXggZm9ybWF0dGluZyBmb3IgdHVwbGVzIGluIGFyZ3BhcnNlIHR5cGU9IGVycm9yIG1lc3NhZ2VzLgorCistIElzc3VlICMxMjE5MTogQWRkZWQgc2h1dGlsLmNob3duKCkgdG8gY2hhbmdlIHVzZXIgYW5kL29yIGdyb3VwIG93bmVyIG9mIGEKKyAgZ2l2ZW4gcGF0aCBhbHNvIHNwZWNpZnlpbmcgdGhlaXIgbmFtZXMuCisKKy0gSXNzdWUgIzEzOTg4OiBUaGUgX2VsZW1lbnR0cmVlIGFjY2VsZXJhdG9yIGlzIHVzZWQgd2hlbmV2ZXIgYXZhaWxhYmxlLgorICBOb3cgeG1sLmV0cmVlLmNFbGVtZW50VHJlZSBiZWNvbWVzIGEgZGVwcmVjYXRlZCBhbGlhcyB0byBFbGVtZW50VHJlZS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzY4MDc6IFJ1biBtc2lzdXBwb3J0Lm1hayBlYXJsaWVyLgorCistIElzc3VlICMxMDU4MDogTWlub3IgZ3JhbW1hciBjaGFuZ2UgaW4gV2luZG93cyBpbnN0YWxsZXIuCisKKy0gSXNzdWUgIzEzMzI2OiBDbGVhbiBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyBjb3JyZWN0bHkgb24gT3BlbkJTRC4KKworLSBQRVAgMzkzOiB0aGUgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtd2lkZS11bmljb2RlIGlzIHJlbW92ZWQuCisKKy0gSXNzdWUgIzEyODUyOiBTZXQgX1hPUEVOX1NPVVJDRSB0byA3MDAsIGluc3RlYWQgb2YgNjAwLCB0byBnZXQgUE9TSVggMjAwOAorICBmdW5jdGlvbnMgb24gT3BlbkJTRCAoZS5nLiBmZG9wZW5kaXIpLgorCistIElzc3VlICMxMTg2MzogUmVtb3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBzeXN0ZW1zIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMgorICAoZm9sbG93aW5nIFBFUCAxMSkuICBUaGVzZSBzeXN0ZW1zIGFyZSBzeXN0ZW1zIHVzaW5nIE1hY2ggQyBUaHJlYWRzLAorICBTdW5PUyBsaWdodHdlaWdodCBwcm9jZXNzZXMsIEdOVSBwdGggdGhyZWFkcyBhbmQgSVJJWCB0aHJlYWRzLgorCistIElzc3VlICM4NzQ2OiBDb3JyZWN0IGZhdWx0eSBjb25maWd1cmUgY2hlY2tzIHNvIHRoYXQgb3MuY2hmbGFncygpIGFuZAorICBvcy5sY2hmbGFncygpIGFyZSBvbmNlIGFnYWluIGJ1aWx0IG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZXNlCisgIGZ1bmN0aW9ucyAoQlNEIGFuZCBPUyBYKS4gIEFsc28gYWRkIG5ldyBzdGF0IGZpbGUgZmxhZ3MgZm9yIE9TIFgKKyAgKFVGX0hJRERFTiBhbmQgVUZfQ09NUFJFU1NFRCkuCisKKy0gSXNzdWUgIzEwNjQ1OiBJbnN0YWxsaW5nIFB5dGhvbiBubyBsb25nZXIgY3JlYXRlcyBhCisgIFB5dGhvbi1YLlkuWi1weVguWS5lZ2ctaW5mbyBmaWxlIGluIHRoZSBsaWItZHlubG9hZCBkaXJlY3RvcnkuCisKKy0gRG8gbm90IGFjY2lkZW50YWxseSBpbmNsdWRlIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBzcWxpdGUuaCB0d2ljZSB3aGVuCisgIGJ1aWxkaW5nIHNxbGl0ZTMuCisKKy0gSXNzdWUgIzExMjE3OiBGb3IgNjQtYml0LzMyLWJpdCBNYWMgT1MgWCB1bml2ZXJzYWwgZnJhbWV3b3JrIGJ1aWxkcywKKyAgZW5zdXJlICJtYWtlIGluc3RhbGwiIGNyZWF0ZXMgc3ltbGlua3MgaW4gLS1wcmVmaXggYmluIGZvciB0aGUgIi0zMiIKKyAgZmlsZXMgaW4gdGhlIGZyYW1ld29yayBiaW4gZGlyZWN0b3J5IGxpa2UgdGhlIGluc3RhbGxlciBkb2VzLgorCistIElzc3VlICMxMTM0NzogVXNlIC0tbm8tYXMtbmVlZGVkIHdoZW4gbGlua2luZyBsaWJweXRob24zLnNvLgorCistIElzc3VlICMxMTQxMTogRml4ICdtYWtlIERFU1RESVI9JyB3aXRoIGEgcmVsYXRpdmUgZGVzdGluYXRpb24uCisKKy0gSXNzdWUgIzExMjY4OiBQcmV2ZW50IE1hYyBPUyBYIEluc3RhbGxlciBmYWlsdXJlIGlmIERvY3VtZW50YXRpb24KKyAgcGFja2FnZSBoYWQgcHJldmlvdXNseSBiZWVuIGluc3RhbGxlZC4KKworLSBJc3N1ZSAjMTE0OTU6IE9TRiBzdXBwb3J0IGlzIGVsaW1pbmF0ZWQuIEl0IHdhcyBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIuCisKKworSURMRQorLS0tLQorCistIElzc3VlICMxMTcxODogSURMRSdzIG9wZW4gbW9kdWxlIGRpYWxvZyBjb3VsZG4ndCBmaW5kIHRoZSBfX2luaXRfXy5weQorICBmaWxlIGluIGEgcGFja2FnZS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0MDUzOiBwYXRjaGNoZWNrLnB5ICgibWFrZSBwYXRjaGNoZWNrIikgbm93IHdvcmtzIHdpdGggTVEgcGF0Y2hlcy4KKyAgUGF0Y2ggYnkgRnJhbmNpc2NvIE1hcnTDrW4gQnJ1Z3XDqS4KKworLSBJc3N1ZSAjMTM5MzA6IDJ0bzMgaXMgbm93IGFibGUgdG8gd3JpdGUgaXRzIGNvbnZlcnRlZCBvdXRwdXQgZmlsZXMgdG8gYW5vdGhlcgorICBkaXJlY3RvcnkgdHJlZSBhcyB3ZWxsIGFzIGNvcHlpbmcgdW5jaGFuZ2VkIGZpbGVzIGFuZCBhbHRlcmluZyB0aGUgZmlsZQorICBzdWZmaXguICBTZWUgaXRzIG5ldyAtbywgLVcgYW5kIC0tYWRkLXN1ZmZpeCBvcHRpb25zLiAgVGhpcyBtYWtlcyBpdCBtb3JlCisgIHVzZWZ1bCBpbiBtYW55IGF1dG9tYXRlZCBjb2RlIHRyYW5zbGF0aW9uIHdvcmtmbG93cy4KKworLSBJc3N1ZSAjMTM2Mjg6IHB5dGhvbi1nZGIucHkgaXMgbm93IGFibGUgdG8gcmV0cmlldmUgbW9yZSBmcmFtZXMgaW4gdGhlIFB5dGhvbgorICB0cmFjZWJhY2sgaWYgUHl0aG9uIGlzIG9wdGltaXplZC4KKworLSBJc3N1ZSAjMTE5OTY6IGxpYnB5dGhvbiAoZ2RiKSwgcmVwbGFjZSAicHktYnQiIGNvbW1hbmQgYnkgInB5LWJ0LWZ1bGwiIGFuZAorICBhZGQgYSBzbWFydGVyICJweS1idCIgY29tbWFuZCBwcmludGluZyBhIGNsYXNzaWMgUHl0aG9uIHRyYWNlYmFjay4KKworLSBJc3N1ZSAjMTExNzk6IE1ha2UgY2NiZW5jaCB3b3JrIHVuZGVyIFB5dGhvbiAzLjEgYW5kIDIuNyBhZ2Fpbi4KKworLSBJc3N1ZSAjMTA2Mzk6IHJlaW5kZW50LnB5IG5vIGxvbmdlciBjb252ZXJ0cyBuZXdsaW5lcyBhbmQgd2lsbCByYWlzZQorICBhbiBlcnJvciBpZiBhdHRlbXB0aW5nIHRvIGNvbnZlcnQgYSBmaWxlIHdpdGggbWl4ZWQgbmV3bGluZXMuCisgICItLW5ld2xpbmUiIG9wdGlvbiBhZGRlZCB0byBzcGVjaWZ5IG5ldyBsaW5lIGNoYXJhY3Rlci4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEzODQwOiBUaGUgZXJyb3IgbWVzc2FnZSBwcm9kdWNlZCBieSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIKKyAgd2hlbiBnaXZlbiBhIFVuaWNvZGUgc3RyaW5nIGhhcyBiZWVuIGZpeGVkLgorCistIElzc3VlICM5OTc1OiBzb2NrZXQ6IEZpeCBpbmNvcnJlY3QgdXNlIG9mIGZsb3dpbmZvIGFuZCBzY29wZV9pZC4gUGF0Y2ggYnkKKyAgVmlsbW9zIE5lYmVoYWouCisKKy0gSXNzdWUgIzc3Nzc6IHNvY2tldDogQWRkIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFBGX1JEUykgc3VwcG9ydC4KKworLSBJc3N1ZSAjMTMxNTk6IEZpbGVJTyBhbmQgQloyQ29tcHJlc3Nvci9CWjJEZWNvbXByZXNzb3Igbm93IHVzZSBhIGxpbmVhci10aW1lCisgIGJ1ZmZlciBncm93dGggc3RyYXRlZ3kgaW5zdGVhZCBvZiBhIHF1YWRyYXRpYy10aW1lIG9uZS4KKworLSBJc3N1ZSAjMTAxNDE6IHNvY2tldDogQWRkIFNvY2tldENBTiAoUEZfQ0FOKSBzdXBwb3J0LiBJbml0aWFsIHBhdGNoIGJ5CisgIE1hdHRoaWFzIEZ1Y2hzLCB1cGRhdGVkIGJ5IFRpYWdvIEdvbsOnYWx2ZXMuCisKKy0gSXNzdWUgIzEzMDcwOiBGaXggYSBjcmFzaCB3aGVuIGEgVGV4dElPV3JhcHBlciBjYXVnaHQgaW4gYSByZWZlcmVuY2UgY3ljbGUKKyAgd291bGQgYmUgZmluYWxpemVkIGFmdGVyIHRoZSByZWZlcmVuY2UgdG8gaXRzIHVuZGVybHlpbmcgQnVmZmVyZWRSV1BhaXIncworICB3cml0ZXIgZ290IGNsZWFyZWQgYnkgdGhlIEdDLgorCistIElzc3VlICMxMjg4MTogY3R5cGVzOiBGaXggc2VnZmF1bHQgd2l0aCBsYXJnZSBzdHJ1Y3R1cmUgZmllbGQgbmFtZXMuCisKKy0gSXNzdWUgIzEzMDU4OiBvc3NhdWRpb2RldjogZml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgb24gZXJyb3IuIFBhdGNoIGJ5CisgIFRob21hcyBKYXJvc2NoLgorCistIElzc3VlICMxMzAxMzogY3R5cGVzOiBGaXggYSByZWZlcmVuY2UgbGVhayBpbiBQeUNBcnJheVR5cGVfZnJvbV9jdHlwZS4KKyAgVGhhbmtzIHRvIFN1bWFuIFNhaGEgZm9yIGZpbmRpbmcgdGhlIGJ1ZyBhbmQgcHJvdmlkaW5nIGEgcGF0Y2guCisKKy0gSXNzdWUgIzEzMDIyOiBGaXg6IF9tdWx0aXByb2Nlc3NpbmcucmVjdmZkKCkgZG9lc24ndCBjaGVjayB0aGF0CisgIGZpbGUgZGVzY3JpcHRvciB3YXMgYWN0dWFsbHkgcmVjZWl2ZWQuCisKKy0gSXNzdWUgIzExNzI3MTE6IEFkZCAnbG9uZyBsb25nJyBzdXBwb3J0IHRvIHRoZSBhcnJheSBtb2R1bGUuCisgIEluaXRpYWwgcGF0Y2ggYnkgT3JlbiBUaXJvc2ggYW5kIEhpcm9rYXp1IFlhbWFtb3RvLgorCistIElzc3VlICMxMjQ4MzogY3R5cGVzOiBGaXggYSBjcmFzaCB3aGVuIHRoZSBkZXN0cnVjdGlvbiBvZiBhIGNhbGxiYWNrCisgIG9iamVjdCB0cmlnZ2VycyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCisKKy0gSXNzdWUgIzEyOTUwOiBGaXggcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzIGluIG11bHRpcHJvY2Vzc2luZywgdW5kZXIKKyAgT3BlbkluZGlhbmEvSWxsdW1vcy4KKworLSBJc3N1ZSAjMTI3NjQ6IEZpeCBhIGNyYXNoIGluIGN0eXBlcyB3aGVuIHRoZSBuYW1lIG9mIGEgU3RydWN0dXJlIGZpZWxkIGlzIG5vdAorICBhIHN0cmluZy4KKworLSBJc3N1ZSAjMTEyNDE6IHN1YmNsYXNzZXMgb2YgY3R5cGVzLkFycmF5IGNhbiBub3cgYmUgc3ViY2xhc3NlZC4KKworLSBJc3N1ZSAjOTY1MTogRml4IGEgY3Jhc2ggd2hlbiBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIoMCkgd2FzIHBhc3NlZCB0bworICBzb21lIGZ1bmN0aW9ucyBsaWtlIGZpbGUud3JpdGUoKS4KKworLSBJc3N1ZSAjMTAzMDk6IERlZmluZSBfR05VX1NPVVJDRSBzbyB0aGF0IG1yZW1hcCgpIGdldHMgdGhlIHByb3BlcgorICBzaWduYXR1cmUuICBXaXRob3V0IHRoaXMsIGFyY2hpdGVjdHVyZXMgd2hlcmUgc2l6ZW9mIHZvaWQqICE9IHNpemVvZiBpbnQgYXJlCisgIGJyb2tlbi4gIFBhdGNoIGdpdmVuIGJ5IEhhbGx2YXJkIEIgRnVydXNldGguCisKKy0gSXNzdWUgIzEyMDUxOiBGaXggc2VnZmF1bHQgaW4ganNvbi5kdW1wcygpIHdoaWxlIGVuY29kaW5nIGhpZ2hseS1uZXN0ZWQKKyAgb2JqZWN0cyB1c2luZyB0aGUgQyBhY2NlbGVyYXRpb25zLgorCistIElzc3VlICMxMjAxNzogRml4IHNlZ2ZhdWx0IGluIGpzb24ubG9hZHMoKSB3aGlsZSBkZWNvZGluZyBoaWdobHktbmVzdGVkCisgIG9iamVjdHMgdXNpbmcgdGhlIEMgYWNjZWxlcmF0aW9ucy4KKworLSBJc3N1ZSAjMTgzODogUHJldmVudCBzZWdmYXVsdCBpbiBjdHlwZXMsIHdoZW4gX2FzX3BhcmFtZXRlcl8gb24gYSBjbGFzcyBpcyBzZXQKKyAgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTE2ODk6IEZpeCBhIHZhcmlhYmxlIHNjb3BpbmcgZXJyb3IgaW4gYW4gc3FsaXRlMyB0ZXN0CisKKy0gSXNzdWUgIzEzNzg2OiBSZW1vdmUgdW5pbXBsZW1lbnRlZCAndHJhY2UnIGxvbmcgb3B0aW9uIGZyb20gcmVncnRlc3QucHkuCisKKy0gSXNzdWUgIzEzNzI1OiBGaXggcmVncnRlc3QgdG8gcmVjb2duaXplIHRoZSBkb2N1bWVudGVkIC1kIGZsYWcuCisgIFBhdGNoIGJ5IEVybm8gVHVraWEuCisKKy0gSXNzdWUgIzEzMzA0OiBTa2lwIHRlc3QgY2FzZSBpZiB1c2VyIHNpdGUtcGFja2FnZXMgZGlzYWJsZWQgKC1zIG9yCisgIFBZVEhPTk5PVVNFUlNJVEUpLiAgKFBhdGNoIGJ5IENhcmwgTWV5ZXIpCisKKy0gSXNzdWUgIzU2NjE6IEFkZCBhIHRlc3QgZm9yIEVDT05OUkVTRVQvRVBJUEUgaGFuZGxpbmcgdG8gdGVzdF9hc3luY29yZS4gUGF0Y2gKKyAgYnkgWGF2aWVyIGRlIEdheWUuCisKKy0gSXNzdWUgIzEzMjE4OiBGaXggdGVzdF9zc2wgZmFpbHVyZXMgb24gRGViaWFuL1VidW50dS4KKworLSBSZS1lbmFibGUgbGliMnRvMydzIHRlc3RfcGFyc2VyLnB5IHRlc3RzLCB0aG91Z2ggd2l0aCBhbiBleHBlY3RlZCBmYWlsdXJlCisgIChzZWUgaXNzdWUgMTMxMjUpLgorCistIElzc3VlICMxMjY1NjogQWRkIHRlc3RzIGZvciBJUHY2IGFuZCBVbml4IHNvY2tldHMgdG8gdGVzdF9hc3luY29yZS4KKworLSBJc3N1ZSAjNjQ4NDogQWRkIHVuaXQgdGVzdHMgZm9yIG1haWxjYXAgbW9kdWxlIChwYXRjaCBieSBHcmVnb3J5IE5vZmkpCisKKy0gSXNzdWUgIzExNjUxOiBJbXByb3ZlIHRoZSBNYWtlZmlsZSB0ZXN0IHRhcmdldHMgdG8gcnVuIG1vcmUgb2YgdGhlIHRlc3Qgc3VpdGUKKyAgbW9yZSBxdWlja2x5LiBUaGUgLS1tdWx0aXByb2Nlc3Mgb3B0aW9uIGlzIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQsIHJlZHVjaW5nCisgIHRoZSBhbW91bnQgb2YgdGltZSBuZWVkZWQgdG8gcnVuIHRoZSB0ZXN0cy4gIm1ha2UgdGVzdCIgYW5kICJtYWtlIHF1aWNrdGVzdCIKKyAgbm93IGluY2x1ZGUgc29tZSByZXNvdXJjZS1pbnRlbnNpdmUgdGVzdHMsIGJ1dCBubyBsb25nZXIgcnVuIHRoZSB0ZXN0IHN1aXRlCisgIHR3aWNlIHRvIGNoZWNrIGZvciBidWdzIGluIC5weWMgZ2VuZXJhdGlvbi4gVG9vbHMvc2NyaXB0cy9ydW5fdGVzdC5weSBwcm92aWRlcworICBhbiBlYXN5IHBsYXRmb3JtLWluZGVwZW5kZW50IHdheSB0byBydW4gdGVzdCBzdWl0ZSB3aXRoIHNlbnNpYmxlIGRlZmF1bHRzLgorCistIElzc3VlICMxMjMzMTogVGhlIHRlc3Qgc3VpdGUgZm9yIHRoZSBwYWNrYWdpbmcgbW9kdWxlIGNhbiBub3cgcnVuIGZyb20gYW4KKyAgaW5zdGFsbGVkIFB5dGhvbi4KKworLSBJc3N1ZSAjMTIzMzE6IFRoZSB0ZXN0IHN1aXRlIGZvciBsaWIydG8zIGNhbiBub3cgcnVuIGZyb20gYW4gaW5zdGFsbGVkCisgIFB5dGhvbi4KKworLSBJc3N1ZSAjMTI2MjY6IEluIHJlZ3J0ZXN0LCBhbGxvdyB0byBmaWx0ZXIgdGVzdHMgdXNpbmcgYSBnbG9iIGZpbHRlcgorICB3aXRoIHRoZSBgYC1tYGAgKG9yIGBgLS1tYXRjaGBgKSBvcHRpb24uICBUaGlzIHdvcmtzIHdpdGggYWxsIHRlc3QgY2FzZXMKKyAgdXNpbmcgdGhlIHVuaXR0ZXN0IG1vZHVsZS4gIFRoaXMgaXMgdXNlZnVsIHdpdGggbG9uZyB0ZXN0IHN1aXRlcworICBzdWNoIGFzIHRlc3RfaW8gb3IgdGVzdF9zdWJwcm9jZXNzLgorCistIElzc3VlICMxMjYyNDogSXQgaXMgbm93IHBvc3NpYmxlIHRvIGZhaWwgYWZ0ZXIgdGhlIGZpcnN0IGZhaWx1cmUgd2hlbgorICBydW5uaW5nIGluIHZlcmJvc2UgbW9kZSAoYGAtdmBgIG9yIGBgLVdgYCksIGJ5IHVzaW5nIHRoZSBgYC0tZmFpbGZhc3RgYAorICAob3IgYGAtR2BgKSBvcHRpb24gdG8gcmVncnRlc3QuICBUaGlzIGlzIHVzZWZ1bCB3aXRoIGxvbmcgdGVzdCBzdWl0ZXMKKyAgc3VjaCBhcyB0ZXN0X2lvIG9yIHRlc3Rfc3VicHJvY2Vzcy4KKworLSBJc3N1ZSAjMTI1ODc6IENvcnJlY3QgZmF1bHR5IHRlc3QgZmlsZSBhbmQgcmVmZXJlbmNlIGluIHRlc3RfdG9rZW5pemUuCisgIChQYXRjaCBieSBSb2JlcnQgWGlhbykKKworLSBJc3N1ZSAjMTI1NzM6IEFkZCByZXNvdXJjZSBjaGVja3MgZm9yIGRhbmdsaW5nIFRocmVhZCBhbmQgUHJvY2VzcyBvYmplY3RzLgorCistIElzc3VlICMxMjU0OTogQ29ycmVjdCB0ZXN0X3BsYXRmb3JtIHRvIG5vdCBmYWlsIHdoZW4gT1MgWCByZXR1cm5zICd4ODZfNjQnCisgIGFzIHRoZSBwcm9jZXNzb3IgdHlwZSBvbiBzb21lIE1hYyBzeXN0ZW1zLgorCistIFNraXAgbmV0d29yayB0ZXN0cyB3aGVuIGdldGFkZHJpbmZvKCkgcmV0dXJucyBFQUlfQUdBSU4sIG1lYW5pbmcgYSB0ZW1wb3JhcnkKKyAgZmFpbHVyZSBpbiBuYW1lIHJlc29sdXRpb24uCisKKy0gSXNzdWUgIzExODEyOiBTb2x2ZSB0cmFuc2llbnQgc29ja2V0IGZhaWx1cmUgdG8gY29ubmVjdCB0byAnbG9jYWxob3N0JworICBpbiB0ZXN0X3RlbG5ldGxpYi5weS4KKworLSBTb2x2ZWQgYSBwb3RlbnRpYWwgZGVhZGxvY2sgaW4gdGVzdF90ZWxuZXRsaWIucHkuIFJlbGF0ZWQgdG8gaXNzdWUgIzExODEyLgorCistIEF2b2lkIGZhaWxpbmcgaW4gdGVzdF9yb2JvdHBhcnNlciB3aGVuIG11ZWJsZXNtb3JhbGVkYS5jb20gaXMgZmxha3kgYW5kCisgIGFuIG92ZXJ6ZWFsb3VzIEROUyBzZXJ2aWNlIChlLmcuIE9wZW5ETlMpIHJlZGlyZWN0cyB0byBhIHBsYWNlaG9sZGVyCisgIFdlYiBzaXRlLgorCistIEF2b2lkIGZhaWxpbmcgaW4gdGVzdF91cmxsaWJuZXQudGVzdF9iYWRfYWRkcmVzcyB3aGVuIHNvbWUgb3ZlcnplYWxvdXMKKyAgRE5TIHNlcnZpY2UgKGUuZy4gT3BlbkROUykgcmVzb2x2ZXMgYSBub24tZXhpc3RlbnQgZG9tYWluIG5hbWUuICBUaGUgdGVzdAorICBpcyBub3cgc2tpcHBlZCBpbnN0ZWFkLgorCistIElzc3VlICMxMjQ0MDogV2hlbiB0ZXN0aW5nIHdoZXRoZXIgc29tZSBiaXRzIGluIFNTTENvbnRleHQub3B0aW9ucyBjYW4gYmUKKyAgcmVzZXQsIGNoZWNrIHRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuU1NMIGhlYWRlcnMgUHl0aG9uIHdhcyBjb21waWxlZCBhZ2FpbnN0LAorICByYXRoZXIgdGhhbiB0aGUgcnVudGltZSB2ZXJzaW9uIG9mIHRoZSBPcGVuU1NMIGxpYnJhcnkuCisKKy0gSXNzdWUgIzExNTEyOiBBZGQgYSB0ZXN0IHN1aXRlIGZvciB0aGUgY2dpdGIgbW9kdWxlLiBQYXRjaCBieSBSb2JiaWUgQ2xlbW9ucy4KKworLSBJc3N1ZSAjMTI0OTc6IEluc3RhbGwgdGVzdC9kYXRhIHRvIHByZXZlbnQgZmFpbHVyZXMgb2YgdGhlIHZhcmlvdXMgY29kZWNtYXBzCisgIHRlc3RzLgorCistIElzc3VlICMxMjQ5NjogSW5zdGFsbCB0ZXN0L2NhcGF0aCBkaXJlY3RvcnkgdG8gcHJldmVudCB0ZXN0X2Nvbm5lY3RfY2FwYXRoCisgIHRlc3RjYXNlIGZhaWx1cmUgaW4gdGVzdF9zc2wuCisKKy0gSXNzdWUgIzEyNDY5OiBSdW4gd2FrZXVwIGFuZCBwZW5kaW5nIHNpZ25hbCB0ZXN0cyBpbiBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZQorICB0ZXN0IGluIGEgZnJlc2ggcHJvY2VzcyB3aXRoIG9ubHkgb25lIHRocmVhZCBhbmQgdG8gbm90IGNoYW5nZSBzaWduYWwKKyAgaGFuZGxpbmcgb2YgdGhlIHBhcmVudCBwcm9jZXNzLgorCistIElzc3VlICM4NzE2OiBBdm9pZCBjcmFzaGVzIGNhdXNlZCBieSBBcXVhIFRrIG9uIE9TWCB3aGVuIGF0dGVtcHRpbmcgdG8gcnVuCisgIHRlc3RfdGsgb3IgdGVzdF90dGtfZ3Vpb25seSB1bmRlciBhIHVzZXJuYW1lIHRoYXQgaXMgbm90IGN1cnJlbnRseSBsb2dnZWQKKyAgaW4gdG8gdGhlIGNvbnNvbGUgd2luZG93c2VydmVyIChhcyBtYXkgYmUgdGhlIGNhc2UgdW5kZXIgYnVpbGRib3Qgb3Igc3NoKS4KKworLSBJc3N1ZSAjMTI0MDc6IEV4cGxpY2l0bHkgc2tpcCB0ZXN0X2NhcGkuRW1iZWRkaW5nVGVzdCB1bmRlciBXaW5kb3dzLgorCistIElzc3VlICMxMjQwMDogcmVncnRlc3QgLVcgZG9lc24ndCByZXJ1biB0aGUgdGVzdHMgdHdpY2UgYW55bW9yZSwgYnV0IGNhcHR1cmVzCisgIHRoZSBvdXRwdXQgYW5kIGRpc3BsYXlzIGl0IG9uIGZhaWx1cmUgaW5zdGVhZC4gcmVncnRlc3QgLXYgZG9lc24ndCBwcmludCB0aGUKKyAgZXJyb3IgdHdpY2UgYW55bW9yZSBpZiB0aGVyZSBpcyBvbmx5IG9uZSBlcnJvci4KKworLSBJc3N1ZSAjMTIxNDE6IEluc3RhbGwgY29waWVzIG9mIHRlbXBsYXRlIEMgbW9kdWxlIGZpbGUgc28gdGhhdAorICB0ZXN0X2J1aWxkX2V4dCBvZiB0ZXN0X2Rpc3R1dGlscyBhbmQgdGVzdF9jb21tYW5kX2J1aWxkX2V4dCBvZgorICB0ZXN0X3BhY2thZ2luZyBhcmUgbm8gbG9uZ2VyIHNpbGVudGx5IHNraXBwZWQgd2hlbgorICBydW4gb3V0c2lkZSBvZiBhIGJ1aWxkIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjODc0NjogQWRkIGFkZGl0aW9uYWwgdGVzdHMgZm9yIG9zLmNoZmxhZ3MoKSBhbmQgb3MubGNoZmxhZ3MoKS4KKyAgUGF0Y2ggYnkgR2FycmV0dCBDb29wZXIuCisKKy0gSXNzdWUgIzEwNzM2OiBGaXggdGVzdF90dGsgdGVzdF93aWRnZXRzIGZhaWx1cmVzIHdpdGggQ29jb2EgVGsgOC41LjkKKyAgMi44ICsgIG9uIE1hYyBPUyBYLiAgKFBhdGNoIGJ5IFJvbmFsZCBPdXNzb3JlbikKKworLSBJc3N1ZSAjMTIwNTc6IEFkZCB0ZXN0cyBmb3IgSVNPIDIwMjIgY29kZWNzIChpc28yMDIyX2pwLCBpc28yMDIyX2pwXzIsCisgIGlzbzIwMjJfa3IpLgorCistIElzc3VlICMxMjA5NjogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gdGVzdF90aHJlYWRpbmcudGVzdF93YWl0Zm9yKCkuIFBhdGNoCisgIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTYxNDogaW1wb3J0IF9faGVsbG9fXyBwcmludHMgIkhlbGxvIFdvcmxkISIuIFBhdGNoIHdyaXR0ZW4gYnkKKyAgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICM1NzIzOiBJbXByb3ZlIGpzb24gdGVzdHMgdG8gYmUgZXhlY3V0ZWQgd2l0aCBhbmQgd2l0aG91dCBhY2NlbGVyYXRpb25zLgorCistIElzc3VlICMxMjA0MTogTWFrZSB0ZXN0X3dhaXQzIG1vcmUgcm9idXN0LgorCistIElzc3VlICMxMTg3MzogQ2hhbmdlIHJlZ2V4IGluIHRlc3RfY29tcGlsZWFsbCB0byBmaXggb2NjYXNpb25hbCBmYWlsdXJlcyB3aGVuCisgIHdoZW4gdGhlIHJhbmRvbWx5IGdlbmVyYXRlZCB0ZW1wb3JhcnkgcGF0aCBoYXBwZW5lZCB0byBtYXRjaCB0aGUgcmVnZXguCisKKy0gSXNzdWUgIzExOTU4OiBGaXggRlRQIHRlc3RzIGZvciBJUHY2LCBiaW5kIHRvICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIuCisgIFBhdGNoIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuY29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzg0MDcsICMxMTg1OTogRml4IHRlc3RzIG9mIHRlc3RfaW8gdXNpbmcgdGhyZWFkcyBhbmQgYW4gYWxhcm06IHVzZQorICBwdGhyZWFkX3NpZ21hc2soKSB0byBlbnN1cmUgdGhhdCB0aGUgU0lHQUxSTSBzaWduYWwgaXMgcmVjZWl2ZWQgYnkgdGhlIG1haW4KKyAgdGhyZWFkLgorCistIElzc3VlICMxMTgxMTogRmFjdG9yIG91dCBkZXRlY3Rpb24gb2YgSVB2NiBzdXBwb3J0IG9uIHRoZSBjdXJyZW50IGhvc3QKKyAgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIGFzIGBgdGVzdC5zdXBwb3J0LklQVjZfRU5BQkxFRGBgLiAgUGF0Y2ggYnkKKyAgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMDkxNDogQWRkIGEgbWluaW1hbCBlbWJlZGRpbmcgdGVzdCB0byB0ZXN0X2NhcGkuCisKKy0gSXNzdWUgIzExMjIzOiBTa2lwIHRlc3RfbG9ja19hY3F1aXJlX2ludGVycnVwdGlvbigpIGFuZAorICB0ZXN0X3Jsb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uKCkgb2YgdGVzdF90aHJlYWRzaWduYWxzIGlmIGEgdGhyZWFkIGxvY2sgaXMKKyAgaW1wbGVtZW50ZWQgdXNpbmcgYSBQT1NJWCBtdXRleCBhbmQgYSBQT1NJWCBjb25kaXRpb24gdmFyaWFibGUuIEEgUE9TSVgKKyAgY29uZGl0aW9uIHZhcmlhYmxlIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoZS5nLiBvbiBMaW51eCwgdGhlCisgIGZ1dGV4IHN5c3RlbSBjYWxsIGlzIHJlc3RhcnRlZCkuCisKKy0gSXNzdWUgIzExNzkwOiBGaXggc3BvcmFkaWMgZmFpbHVyZXMgaW4gdGVzdF9tdWx0aXByb2Nlc3NpbmcuV2l0aFByb2Nlc3Nlc1Rlc3RDb25kaXRpb24uCisKKy0gRml4IHBvc3NpYmxlICJmaWxlIGFscmVhZHkgZXhpc3RzIiBlcnJvciB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIGluIHBhcmFsbGVsLgorCistIElzc3VlICMxMTcxOTogRml4IG1lc3NhZ2UgYWJvdXQgdW5leHBlY3RlZCB0ZXN0X21zaWxpYiBza2lwIG9uIG5vbi1XaW5kb3dzCisgIHBsYXRmb3Jtcy4gUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTcyNzogQWRkIGEgLS10aW1lb3V0IG9wdGlvbiB0byByZWdydGVzdDogaWYgYSB0ZXN0IHRha2VzIG1vcmUgdGhhbgorICBUSU1FT1VUIHNlY29uZHMsIGR1bXBzIHRoZSB0cmFjZWJhY2sgb2YgYWxsIHRocmVhZHMgYW5kIGV4aXRzLgorCistIElzc3VlICMxMTY1MzogZml4IC1XIHdpdGggLWogaW4gcmVncnRlc3QuCisKKy0gVGhlIGVtYWlsIHRlc3Qgc3VpdGUgbm93IGxpdmVzIGluIHRoZSBMaWIvdGVzdC90ZXN0X2VtYWlsIHBhY2thZ2UuICBUaGUgdGVzdAorICBoYXJuZXNzIGNvZGUgaGFzIGFsc28gYmVlbiBtb2Rlcm5pemVkIHRvIGFsbG93IHVzZSBvZiBuZXcgdW5pdHRlc3QgZmVhdHVyZXMuCisKKy0gcmVncnRlc3Qgbm93IGRpc2NvdmVycyB0ZXN0IHBhY2thZ2VzIGFzIHdlbGwgYXMgdGVzdCBtb2R1bGVzLgorCistIElzc3VlICMxMTU3NzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIGJpbmhleC5weS4gUGF0Y2ggYnkgQXJrYWR5IEtvcGx5YXJvdi4KKworLSBOZXcgdGVzdF9jcmFzaGVycyBhZGRlZCB0byBleGVyY2lzZSB0aGUgc2NyaXB0cyBpbiB0aGUgTGliL3Rlc3QvY3Jhc2hlcnMKKyAgZGlyZWN0b3J5IGFuZCBjb25maXJtIHRoZXkgZmFpbCBhcyBleHBlY3RlZAorCistIElzc3VlICMxMTU3ODogYWRkZWQgdGVzdCBmb3IgdGhlIHRpbWVpdCBtb2R1bGUuICBQYXRjaCBieSBNaWNoYWVsIEhlbnJ5LgorCistIElzc3VlICMxMTUwMzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIHBvc2l4cGF0aC5weS4gUGF0Y2ggYnkgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICMxMTUwNTogaW1wcm92ZXMgdGVzdCBjb3ZlcmFnZSBvZiBzdHJpbmcucHksIGluY3JlYXNlcyBncmFudWxhcml0eSBvZgorICBzdHJpbmcuRm9ybWF0dGVyIHRlc3RzLiBJbml0aWFsIHBhdGNoIGJ5IEFsaWNpYSBBcmxlbi4KKworLSBJc3N1ZSAjMTE1NDg6IEltcHJvdmUgdGVzdCBjb3ZlcmFnZSBvZiB0aGUgc2h1dGlsIG1vZHVsZS4gUGF0Y2ggYnkKKyAgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICMxMTU1NDogUmVhY3RpdmF0ZWQgdGVzdF9lbWFpbF9jb2RlY3MuCisKKy0gSXNzdWUgIzExNTA1OiBpbXByb3ZlcyB0ZXN0IGNvdmVyYWdlIG9mIHN0cmluZy5weS4gUGF0Y2ggYnkgQWxpY2lhCisgIEFybGVuCisKKy0gSXNzdWUgIzExNDkwOiB0ZXN0X3N1YnByb2Nlc3M6dGVzdF9sZWFraW5nX2Zkc19vbl9lcnJvciBubyBsb25nZXIgZ2l2ZXMgYQorICBmYWxzZSBwb3NpdGl2ZSBpZiB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMgaW5hY2Nlc3NpYmxlLgorCistIElzc3VlICMxMTIyMzogRml4IHRlc3RfdGhyZWFkc2lnbmFscyB0byBmYWlsLCBub3QgaGFuZywgd2hlbiB0aGUKKyAgbm9uLXNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbiBvZiBsb2NrcyBpcyB1c2VkIHVuZGVyIFBPU0lYLgorCistIElzc3VlICMxMDkxMTogQWRkIHRlc3RzIG9uIENHSSB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiBQYXRjaCB3cml0dGVuIGJ5CisgIFBpZXJyZSBRdWVudGVsLgorCistIElzc3VlICM5OTMxOiBGaXggaGFuZ3MgaW4gR1VJIHRlc3RzIHVuZGVyIFdpbmRvd3MgaW4gY2VydGFpbiBjb25kaXRpb25zLgorICBQYXRjaCBieSBIaXJva2F6dSBZYW1hbW90by4KKworLSBJc3N1ZSAjMTA1MTI6IFByb3Blcmx5IGNsb3NlIHNvY2tldHMgdW5kZXIgdGVzdC50ZXN0X2NnaS4KKworLSBJc3N1ZSAjMTA5OTI6IE1ha2UgdGVzdHMgcGFzcyB1bmRlciBjb3ZlcmFnZS4KKworLSBJc3N1ZSAjMTA4MjY6IFByZXZlbnQgc3BvcmFkaWMgZmFpbHVyZSBpbiB0ZXN0X3N1YnByb2Nlc3Mgb24gU29sYXJpcyBkdWUKKyAgdG8gb3BlbiBkb29yIGZpbGVzLgorCistIElzc3VlICMxMDk5MDogUHJldmVudCB0ZXN0cyBmcm9tIGNsb2JiZXJpbmcgYSBzZXQgdHJhY2UgZnVuY3Rpb24uCisKK0MtQVBJCistLS0tLQorCistIEFkZCBQeU9iamVjdF9HZW5lcmljR2V0RGljdCBhbmQgUHlPYmplY3RfR2VuZXJpU2V0RGljdC4gVGhleSBhcmUgZ2VuZXJpYworICBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBnZXR0ZXIgYW5kIHNldHRlciBvZiBhIGBgX19kaWN0X19gYCBkZXNjcmlwdG9yIG9mIEMKKyAgdHlwZXMuCisKKy0gSXNzdWUgIzEzNzI3OiBBZGQgMyBtYWNyb3MgdG8gYWNjZXNzIFB5RGF0ZVRpbWVfRGVsdGEgbWVtYmVyczoKKyAgUHlEYXRlVGltZV9ERUxUQV9HRVRfREFZUywgUHlEYXRlVGltZV9ERUxUQV9HRVRfU0VDT05EUywKKyAgUHlEYXRlVGltZV9ERUxUQV9HRVRfTUlDUk9TRUNPTkRTLgorCistIElzc3VlICMxMDU0MjogQWRkIDQgbWFjcm9zIHRvIHdvcmsgd2l0aCBzdXJyb2dhdGVzOiBQeV9VTklDT0RFX0lTX1NVUlJPR0FURSwKKyAgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURSwgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFLAorICBQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFUy4KKworLSBJc3N1ZSAjMTI3MjQ6IEFkZCBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQgbWFjcm8gZm9yIHJldHVybmluZyBOb3RJbXBsZW1lbnRlZC4KKworLSBQWV9QQVRDSExFVkVMX1JFVklTSU9OIGhhcyBiZWVuIHJlbW92ZWQsIHNpbmNlIGl0J3MgbWVhbmluZ2xlc3Mgd2l0aAorICBNZXJjdXJpYWwuCisKKy0gSXNzdWUgIzEyMTczOiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwgaXMgbm93IGBjb25zdAorICBjaGFyICpgIGluc3RlYWQgb2YgYGNoYXIgKmAuCisKKy0gSXNzdWUgIzEyMzgwOiBQeUFyZ19QYXJzZVR1cGxlIG5vdyBhY2NlcHRzIGEgYnl0ZWFycmF5IGZvciB0aGUgJ2MnIGZvcm1hdC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlcyAjMTM0OTEgYW5kICMxMzk5NTogRml4IG1hbnkgZXJyb3JzIGluIHNxbGl0ZTMgZG9jdW1lbnRhdGlvbi4KKyAgSW5pdGlhbCBwYXRjaCBmb3IgIzEzNDkxIGJ5IEpvaGFubmVzIFZvZ2VsLgorCistIElzc3VlICMxMzQwMjogRG9jdW1lbnQgYWJzb2x1dGVuZXNzIG9mIHN5cy5leGVjdXRhYmxlLgorCistIElzc3VlICMxMzg4MzogUFlUSE9OQ0FTRU9LIGFsc28gd29ya3Mgb24gT1MgWC4KKworLSBJc3N1ZSAjOTAyMTogQWRkIGFuIGludHJvZHVjdGlvbiB0byB0aGUgY29weSBtb2R1bGUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjNjAwNTogRXhhbXBsZXMgaW4gdGhlIHNvY2tldCBsaWJyYXJ5IGRvY3VtZW50YXRpb24gdXNlIHNlbmRhbGwsIHdoZXJlCisgIHJlbGV2YW50LCBpbnN0ZWFkIHNlbmQgbWV0aG9kLgorCistIElzc3VlICMxMjc5ODogVXBkYXRlZCB0aGUgbWltZXR5cGVzIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzEyOTQ5OiBEb2N1bWVudCB0aGUga3dvbmx5YXJnY291bnQgYXJndW1lbnQgZm9yIHRoZSBQeUNvZGVfTmV3CisgIEMgQVBJIGZ1bmN0aW9uLgorCistIElzc3VlICMxMzUxMzogRml4IGlvLklPQmFzZSBkb2N1bWVudGF0aW9uIHRvIGNvcnJlY3RseSBsaW5rIHRvIHRoZQorICBpby5JT0Jhc2UucmVhZGxpbmUgbWV0aG9kIGluc3RlYWQgb2YgdGhlIHJlYWRsaW5lIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyMzc6IFJlb3JnYW5pc2Ugc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uIHRvIGVtcGhhc2lzZSBjb252ZW5pZW5jZQorICBmdW5jdGlvbnMgYW5kIHRoZSBtb3N0IGNvbW1vbmx5IG5lZWRlZCBhcmd1bWVudHMgdG8gUG9wZW4uCisKKy0gSXNzdWUgIzEzMTQxOiBEZW1vbnN0cmF0ZSByZWNvbW1lbmRlZCBzdHlsZSBmb3Igc29ja2V0c2VydmVyIGV4YW1wbGVzLgorCistIElzc3VlICMxMTgxODogRml4IHRlbXBmaWxlIGV4YW1wbGVzIGZvciBQeXRob24gMy4KKworCiBXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjI/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUwppbmRleCBiMjI2MDcyLi5hYzA4MjU1IDEwMDY0NAotLS0gYS9NaXNjL05FV1MKKysrIGIvTWlzYy9ORVdTCkBAIC0yLDI0ICsyLDMzIEBACiBQeXRob24gTmV3cwogKysrKysrKysrKysKIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjUgcmVsZWFzZSBjYW5kaWRhdGUgMT8KK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIHJlbGVhc2UgY2FuZGlkYXRlIDI/CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiBYWFhYLVhYLVhYKgorUmVsZWFzZSBkYXRlOiAyMDE0LTAyLTIzCiAKIENvcmUgYW5kIEJ1aWx0aW5zCiAtLS0tLS0tLS0tLS0tLS0tLQogCi0tIElzc3VlICMyMDU4ODogTWFrZSBQeXRob24tYXN0LmMgQzg5IGNvbXBsaWFudC4KKy0gSXNzdWUgIzIwMjYxOiBJbiBwaWNrbGUsIGxvb2t1cCBfX2dldG5ld2FyZ3NfXyBhbmQgX19nZXRuZXdhcmdzX2V4X18gb24gdGhlCisgIHR5cGUgb2YgdGhlIG9iamVjdC4KIAotLSBJc3N1ZSAjMjA0Mzc6IEZpeGVkIDIxIHBvdGVudGlhbCBidWdzIHdoZW4gZGVsZXRpbmcgb2JqZWN0cyByZWZlcmVuY2VzLgorLSBJc3N1ZSAjMjA2MTk6IEdpdmUgdGhlIEFTVCBub2RlcyBvZiBrZXl3b3JkLW9ubHkgYXJndW1lbnRzIGEgY29sdW1uIGFuZCBsaW5lCisgIG51bWJlci4KIAotLSBJc3N1ZSAjMjA1Mzg6IFVURi03IGluY3JlbWVudGFsIGRlY29kZXIgcHJvZHVjZWQgaW5jb25zaXN0YW50IHN0cmluZyB3aGVuCi0gIGlucHV0IHdhcyB0cnVuY2F0ZWQgaW4gQkFTRTY0IHNlY3Rpb24uCistIElzc3VlICMyMDUyNjogUmV2ZXJ0IGNoYW5nZXMgb2YgaXNzdWUgIzE5NDY2IHdoaWNoIGludHJvZHVjZXMgYSByZWdyZXNzaW9uOgorICBkb24ndCBjbGVhciBhbnltb3JlIHRoZSBzdGF0ZSBvZiBQeXRob24gdGhyZWFkcyBlYXJseSBkdXJpbmcgdGhlIFB5dGhvbgorICBzaHV0ZG93bi4KKworLSBJc3N1ZSAjMjA1OTU6IE1ha2UgZ2V0YXJncy5jIEM4OSBjb21wbGlhbnQuCiAKIExpYnJhcnkKIC0tLS0tLS0KIAorLSBJc3N1ZSAjMTk3NDQ6IHRoZSBlbnN1cmVwaXAgaW5zdGFsbGF0aW9uIHN0ZXAgbm93IGp1c3QgcHJpbnRzIGEgd2FybmluZyB0bworICBzdGRlcnIgcmF0aGVyIHRoYW4gZmFpbGluZyBvdXRyaWdodCBpZiBTU0wvVExTIGlzIHVuYXZhaWxhYmxlLiBUaGlzIGFsbG93cworICBsb2NhbCBpbnN0YWxsYXRpb24gb2YgUE9TSVggYnVpbGRzIHdpdGhvdXQgU1NML1RMUyBzdXBwb3J0LgorCiAtIElzc3VlICM2ODE1OiBvcy5wYXRoLmV4cGFuZHZhcnMoKSBub3cgc3VwcG9ydHMgbm9uLUFTQ0lJIGVudmlyb25tZW50CiAgIHZhcmlhYmxlcyBuYW1lcyBhbmQgdmFsdWVzLgogCkBAIC0zMSw2ICs0MCw1NSBAQAogLSBJc3N1ZSAjMTk4NTY6IHNodXRpbC5tb3ZlKCkgZmFpbGVkIHRvIG1vdmUgYSBkaXJlY3RvcnkgdG8gb3RoZXIgZGlyZWN0b3J5CiAgIG9uIFdpbmRvd3MgaWYgc291cmNlIG5hbWUgZW5kcyB3aXRoIG9zLmFsdHNlcC4KIAorVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzIwNjA1OiBNYWtlIHRlc3Rfc29ja2V0IGdldGFkZHJpbmZvIE9TIFggc2VnZmF1bHQgdGVzdCBtb3JlIHJvYnVzdC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCByZWxlYXNlIGNhbmRpZGF0ZSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE0LTAyLTEwCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxOTI1NTogVGhlIGJ1aWx0aW5zIG1vZHVsZSBpcyByZXN0b3JlZCB0byBpbml0aWFsIHZhbHVlIGJlZm9yZQorICBjbGVhbmluZyBvdGhlciBtb2R1bGVzLiAgVGhlIHN5cyBhbmQgYnVpbHRpbnMgbW9kdWxlcyBhcmUgY2xlYW5lZCBsYXN0LgorCistIElzc3VlICMyMDU4ODogTWFrZSBQeXRob24tYXN0LmMgQzg5IGNvbXBsaWFudC4KKworLSBJc3N1ZSAjMjA0Mzc6IEZpeGVkIDIyIHBvdGVudGlhbCBidWdzIHdoZW4gZGVsZXRpbmcgb2JqZWN0cyByZWZlcmVuY2VzLgorCistIElzc3VlICMyMDUwMDogRGlzcGxheWluZyBhbiBleGNlcHRpb24gYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24gbm8gbG9uZ2VyCisgIHJpc2tzIHRyaWdnZXJpbmcgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgaW4gUHlPYmplY3RfU3RyLgorCistIElzc3VlICMyMDUzODogVVRGLTcgaW5jcmVtZW50YWwgZGVjb2RlciBwcm9kdWNlZCBpbmNvbnNpc3RlbnQgc3RyaW5nIHdoZW4KKyAgaW5wdXQgd2FzIHRydW5jYXRlZCBpbiBCQVNFNjQgc2VjdGlvbi4KKworLSBJc3N1ZSAjMjA0MDQ6IGlvLlRleHRJT1dyYXBwZXIgKGFuZCBoZW5jZSB0aGUgb3BlbigpIGJ1aWx0aW4pIG5vdyB1c2VzIHRoZQorICBpbnRlcm5hbCBjb2RlYyBtYXJraW5nIHN5c3RlbSBhZGRlZCBmb3IgaXNzdWUgIzE5NjE5IHRvIHRocm93IExvb2t1cEVycm9yCisgIGZvciBrbm93biBub24tdGV4dCBlbmNvZGluZ3MgYXQgc3RyZWFtIGNvbnN0cnVjdGlvbiB0aW1lLiBUaGUgZXhpc3RpbmcKKyAgb3V0cHV0IHR5cGUgY2hlY2tzIHJlbWFpbiBpbiBwbGFjZSB0byBkZWFsIHdpdGggdW5tYXJrZWQgdGhpcmQgcGFydHkKKyAgY29kZWNzLgorCistIElzc3VlICMxNzE2MjogQWRkIFB5VHlwZV9HZXRTbG90LgorCistIElzc3VlICMyMDE2MjogRml4IGFuIGFsaWdubWVudCBpc3N1ZSBpbiB0aGUgc2lwaGFzaDI0KCkgaGFzaCBmdW5jdGlvbiB3aGljaAorICBjYXVzZWQgYSBjcmFzaCBvbiBQb3dlclBDIDY0LWJpdCAocHBjNjQpLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIwNTMwOiBUaGUgc2lnbmF0dXJlcyBmb3Igc2xvdCBidWlsdGlucyBoYXZlIGJlZW4gdXBkYXRlZAorICB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhleSBvbmx5IGFjY2VwdCBwb3NpdGlvbmFsLW9ubHkgYXJndW1lbnRzLgorCistIElzc3VlICMyMDUxNzogRnVuY3Rpb25zIGluIHRoZSBvcyBtb2R1bGUgdGhhdCBhY2NlcHQgdHdvIGZpbGVuYW1lcworICBub3cgcmVnaXN0ZXIgYm90aCBmaWxlbmFtZXMgaW4gdGhlIGV4Y2VwdGlvbiBvbiBmYWlsdXJlLgorCistIElzc3VlICMyMDU2MzogVGhlIGlwYWRkcmVzcyBtb2R1bGUgQVBJIGlzIG5vdyBjb25zaWRlcmVkIHN0YWJsZS4KKwogLSBJc3N1ZSAjMTQ5ODM6IGVtYWlsLmdlbmVyYXRvciBub3cgYWx3YXlzIGFkZHMgYSBsaW5lIGVuZCBhZnRlciBlYWNoIE1JTUUKICAgYm91bmRhcnkgbWFya2VyLCBpbnN0ZWFkIG9mIGRvaW5nIHNvIG9ubHkgd2hlbiB0aGVyZSBpcyBhbiBlcGlsb2d1ZS4gIFRoaXMKICAgZml4ZXMgYW4gUkZDIGNvbXBsaWFuY2UgYnVnIGFuZCBzb2x2ZXMgYW4gaXNzdWUgd2l0aCBzaWduZWQgTUlNRSBwYXJ0cy4KQEAgLTQ2LDkgKzEwNCwyMSBAQAogLSBJc3N1ZSAjMTk3NzI6IGVtYWlsLmdlbmVyYXRvciBubyBsb25nZXIgbXV0YXRlcyB0aGUgbWVzc2FnZSBvYmplY3Qgd2hlbgogICBkb2luZyBhIGRvd24tdHJhbnNmb3JtIGZyb20gOGJpdCB0byA3Yml0IENURXMuCiAKKy0gSXNzdWUgIzIwNTM2OiB0aGUgc3RhdGlzdGljcyBtb2R1bGUgbm93IGNvcnJlY3RseSBoYW5kbGUgRGVjaW1hbCBpbnN0YW5jZXMKKyAgd2l0aCBwb3NpdGl2ZSBleHBvbmVudHMKKwogLSBJc3N1ZSAjMTg4MDU6IHRoZSBuZXRtYXNrL2hvc3RtYXNrIHBhcnNpbmcgaW4gaXBhZGRyZXNzIG5vdyBtb3JlIHJlbGlhYmx5CiAgIGZpbHRlcnMgb3V0IGlsbGVnYWwgdmFsdWVzIGFuZCBjb3JyZWN0bHkgYWxsb3dzIGFueSB2YWxpZCBwcmVmaXggbGVuZ3RoLgogCistIElzc3VlICMyMDQ4MTogRm9yIGF0IGxlYXN0IFB5dGhvbiAzLjQsIHRoZSBzdGF0aXN0aWNzIG1vZHVsZSB3aWxsIHJlcXVpcmUKKyAgdGhhdCBhbGwgaW5wdXRzIGZvciBhIHNpbmdsZSBvcGVyYXRpb24gYmUgb2YgYSBzaW5nbGUgY29uc2lzdGVudCB0eXBlLCBvcgorICBlbHNlIGEgbWl4ZWQgb2YgaW50cyBhbmQgYSBzaW5nbGUgb3RoZXIgY29uc2lzdGVudCB0eXBlLiBUaGlzIGF2b2lkcworICBzb21lIGludGVyb3BlcmFiaWxpdHkgaXNzdWVzIHRoYXQgYXJvc2Ugd2l0aCB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2YKKyAgY29lcmNpbmcgdG8gYSBzdWl0YWJsZSBjb21tb24gdHlwZS4KKworLSBJc3N1ZSAjMjA0Nzg6IHRoZSBzdGF0aXN0aWNzIG1vZHVsZSBub3cgdHJlYXRzIGNvbGxlY3Rpb25zLkNvdW50ZXIgaW5wdXRzCisgIGxpa2UgYW55IG90aGVyIGl0ZXJhYmxlLgorCiAtIElzc3VlICMxNzM2OTogZ2V0X2ZpbGVuYW1lIHdhcyByYWlzaW5nIGFuIGV4Y2VwdGlvbiBpZiB0aGUgZmlsZW5hbWUKICAgcGFyYW1ldGVyJ3MgUkZDMjIzMSBlbmNvZGluZyB3YXMgYnJva2VuIGluIGNlcnRhaW4gd2F5cy4gIFRoaXMgd2FzCiAgIGEgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBweXRob24yLgpAQCAtNTcsNiArMTI3LDE0IEBACiAgIGRlbGV0ZWQsIGFuZCBpbWFwbGliIGRpZCBub3QgaGFuZGxlIHRoYXQgY2FzZSBncmFjZWZ1bGx5LiAgTm93IGl0CiAgIGhhbmRsZXMgdGhlICdieWUnIGNvcnJlY3RseS4KIAorLSBJc3N1ZSAjMjA1MzE6IFJldmVydCAzLjQgdmVyc2lvbiBvZiBmaXggZm9yICMxOTA2MywgYW5kIGFwcGx5IHRoZSAzLjMKKyAgdmVyc2lvbi4gIFRoYXQgaXMsIGRvICpub3QqIHJhaXNlIGFuIGVycm9yIGlmIHVuaWNvZGUgaXMgcGFzc2VkIHRvCisgIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfcGF5bG9hZC4KKworLSBJc3N1ZSAjMjA0NzY6IElmIGEgbm9uLWNvbXBhdDMyIHBvbGljeSBpcyB1c2VkIHdpdGggYW55IG9mIHRoZSBlbWFpbCBwYXJzZXJzLAorICBFbWFpbE1lc3NhZ2UgaXMgbm93IHVzZWQgYXMgdGhlIGZhY3RvcnkgY2xhc3MuICBUaGUgZmFjdG9yeSBjbGFzcyBzaG91bGQKKyAgcmVhbGx5IGNvbWUgZnJvbSB0aGUgcG9saWN5OyB0aGF0IHdpbGwgZ2V0IGZpeGVkIGluIDMuNS4KKwogLSBJc3N1ZSAjMTk5MjA6IFRhckZpbGUubGlzdCgpIG5vIGxvbmdlciBmYWlscyB3aGVuIG91dHB1dHMgYSBsaXN0aW5nCiAgIGNvbnRhaW5pbmcgbm9uLWVuY29kYWJsZSBjaGFyYWN0ZXJzLiAgQmFzZWQgb24gcGF0Y2ggYnkgVmFqcmFza3kgS29rLgogCkBAIC02NCw2ICsxNDIsOSBAQAogCiAtIElzc3VlICMxOTE4NjogUmVzdG9yZSBuYW1lc3BhY2luZyBvZiBleHBhdCBzeW1ib2xzIGluc2lkZSB0aGUgcHlleHBhdCBtb2R1bGUuCiAKKy0gSXNzdWUgIzIwMDUzOiBlbnN1cmVwaXAgKGFuZCBoZW5jZSB2ZW52KSBhcmUgbm8gbG9uZ2VyIGFmZmVjdGVkIGJ5IHRoZQorICBzZXR0aW5ncyBpbiB0aGUgZGVmYXVsdCBwaXAgY29uZmlndXJhdGlvbiBmaWxlLgorCiAtIElzc3VlICMyMDQyNjogV2hlbiBwYXNzaW5nIHRoZSByZS5ERUJVRyBmbGFnLCByZS5jb21waWxlKCkgZGlzcGxheXMgdGhlCiAgIGRlYnVnIG91dHB1dCBldmVyeSB0aW1lIGl0IGlzIGNhbGxlZCwgcmVnYXJkbGVzcyBvZiB0aGUgY29tcGlsYXRpb24gY2FjaGUuCiAKQEAgLTczLDE3ICsxNTQsNjIgQEAKIC0gSXNzdWUgIzIwNDM1OiBGaXggX3B5aW8uU3RyaW5nSU8uZ2V0dmFsdWUoKSB0byB0YWtlIGludG8gYWNjb3VudCBuZXdsaW5lCiAgIHRyYW5zbGF0aW9uIHNldHRpbmdzLgogCistIHRyYWNlbWFsbG9jOiBGaXggc2xpY2luZyB0cmFjZXMgYW5kIGZpeCBzbGljaW5nIGEgdHJhY2ViYWNrLgorCistIElzc3VlICMyMDM1NDogRml4IGFuIGFsaWdubWVudCBpc3N1ZSBpbiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIG9uIDY0LWJpdAorICBwbGF0Zm9ybXMuIEJ1ZyBzZWVuIG9uIDY0LWJpdCBMaW51eCB3aGVuIHVzaW5nICJtYWtlIHByb2ZpbGUtb3B0Ii4KKworLSBJc3N1ZSAjMTcxNTk6IGluc3BlY3Quc2lnbmF0dXJlIG5vdyBhY2NlcHRzIGR1Y2sgdHlwZXMgb2YgZnVuY3Rpb25zLAorICB3aGljaCBhZGRzIHN1cHBvcnQgZm9yIEN5dGhvbiBmdW5jdGlvbnMuIEluaXRpYWwgcGF0Y2ggYnkgU3RlZmFuIEJlaG5lbC4KKworLSBJc3N1ZSAjMTg4MDE6IEZpeCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzIHRvIGNvcnJlY3RseSBjbGFzc2lmeQorICBvYmplY3QuX19uZXdfXyBhbmQgb2JqZWN0Ll9faW5pdF9fLgorCistIEZpeGVkIGNtYXRoLmlzaW5mJ3MgbmFtZSBpbiBpdHMgYXJndW1lbnQgcGFyc2luZyBjb2RlLgorCistIElzc3VlICMyMDMxMSwgIzIwNDUyOiBwb2xsIGFuZCBlcG9sbCBub3cgcm91bmQgdGhlIHRpbWVvdXQgYXdheSBmcm9tIHplcm8sCisgIGluc3RlYWQgb2Ygcm91bmRpbmcgdG93YXJkcyB6ZXJvLCBpbiBzZWxlY3QgYW5kIHNlbGVjdG9ycyBtb2R1bGVzOgorICBzZWxlY3QuZXBvbGwucG9sbCgpLCBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yLnBvbGwoKSBhbmQKKyAgc2VsZWN0b3JzLkVwb2xsU2VsZWN0b3IucG9sbCgpLiBGb3IgZXhhbXBsZSwgYSB0aW1lb3V0IG9mIG9uZSBtaWNyb3NlY29uZAorICAoMWUtNikgaXMgbm93IHJvdW5kZWQgdG8gb25lIG1pbGxpc2Vjb25kaSAoMWUtMyksIGluc3RlYWQgb2YgYmVpbmcgcm91bmRlZCB0bworICB6ZXJvLiAgSG93ZXZlciwgdGhlIGdyYW51bGFyaXR5IHByb3BlcnR5IGFuZCBhc3luY2lvJ3MgcmVzb2x1dGlvbiBmZWF0dXJlCisgIHdlcmUgcmVtb3ZlZCBhZ2Fpbi4KKworLSBhc3luY2lvOiBTb21lIHJlZmFjdG9yaW5nOyB2YXJpb3VzIGZpeGVzOyBhZGQgd3JpdGUgZmxvdyBjb250cm9sIHRvCisgIHVuaXggcGlwZXM7IEZ1dHVyZS5zZXRfZXhjZXB0aW9uKCkgaW5zdGFudGlhdGVzIHRoZSBleGNlcHRpb24KKyAgYXJndW1lbnQgaWYgaXQgaXMgYSBjbGFzczsgaW1wcm92ZWQgcHJvYWN0b3IgcGlwZSB0cmFuc3BvcnQ7IHN1cHBvcnQKKyAgd2FpdF9mb3IoZiwgTm9uZSk7IGRvbid0IGxvZyBicm9rZW4vZGlzY29ubmVjdGVkIHBpcGVzOyB1c2UKKyAgVmFsdWVFcnJvciBpbnN0ZWFkIG9mIGFzc2VydCBmb3IgZm9yYmlkZGVuIHN1YnByb2Nlc3Nfe3NoZWxsLGV4ZWN9CisgIGFyZ3VtZW50czsgYWRkZWQgYSBjb252ZW5pZW5jZSBBUEkgZm9yIHN1YnByb2Nlc3MgbWFuYWdlbWVudDsgYWRkZWQKKyAgU3RyZWFtUmVhZGVyLmF0X2VvZigpOyBwcm9wZXJseSBoYW5kbGUgZHVwbGljYXRlIGNvcm91dGluZXMvZnV0dXJlcworICBpbiBnYXRoZXIoKSwgd2FpdCgpLCBhc19jb21wbGV0ZWQoKTsgdXNlIGEgYnl0ZWFycmF5IGZvciBidWZmZXJpbmcKKyAgaW4gU3RyZWFtUmVhZGVyOyBhbmQgbW9yZS4KKwogLSBJc3N1ZSAjMjAyODg6IGZpeCBoYW5kbGluZyBvZiBpbnZhbGlkIG51bWVyaWMgY2hhcnJlZnMgaW4gSFRNTFBhcnNlci4KIAogLSBJc3N1ZSAjMjA0MjQ6IFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBpby5TdHJpbmdJTyBub3cgc3VwcG9ydHMgbG9uZSBzdXJyb2dhdGVzLgogCistIElzc3VlICMyMDMwODogaW5zcGVjdC5zaWduYXR1cmUgbm93IHdvcmtzIG9uIGNsYXNzZXMgd2l0aG91dCB1c2VyLWRlZmluZWQKKyAgX19pbml0X18gb3IgX19uZXdfXyBtZXRob2RzLgorCistIElzc3VlICMyMDM3MjogaW5zcGVjdC5nZXRmaWxlIChhbmQgYSBidW5jaCBvZiBvdGhlciBpbnNwZWN0IGZ1bmN0aW9ucyB0aGF0CisgIHVzZSBpdCkgZG9lc24ndCBjcmFzaCB3aXRoIHVuZXhwZWN0ZWQgQXR0cmlidXRlRXJyb3Igb24gY2xhc3NlcyBkZWZpbmVkIGluIEMKKyAgd2l0aG91dCBfX21vZHVsZV9fLgorCistIElzc3VlICMyMDM1NjogaW5zcGVjdC5zaWduYXR1cmUgZm9ybWF0dGluZyB1c2VzICcvJyB0byBzZXBhcmF0ZQorICBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycyBmcm9tIG90aGVycy4KKworLSBJc3N1ZSAjMjAyMjM6IGluc3BlY3Quc2lnbmF0dXJlIG5vdyBzdXBwb3J0cyBtZXRob2RzIGRlZmluZWQgd2l0aAorICBmdW5jdG9vbHMucGFydGlhbG1ldGhvZHMuCisKIC0gSXNzdWUgIzE5NDU2OiBudHBhdGguam9pbigpIG5vdyBqb2lucyByZWxhdGl2ZSBwYXRocyBjb3JyZWN0bHkgd2hlbiBhIGRyaXZlCiAgIGlzIHByZXNlbnQuCiAKLS0gSXNzdWUgIzE5MDc3OiB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkgY2xlYW51cCBpcyBub3cgbW9zdCBsaWtlbHkKLSAgc3VjY2Vzc2Z1bCB3aGVuIGNhbGxlZCBkdXJpbmcgbnVsbGluZyBvdXQgb2YgbW9kdWxlcyBkdXJpbmcgc2h1dGRvd24uCi0gIE1pc2xlYWRpbmcgZXhjZXB0aW9uIG5vIGxvbmdlciByYWlzZWQgd2hlbiByZXNvdXJjZSB3YXJuaW5nIGlzIGVtaXR0ZWQKLSAgZHVyaW5nIHNodXRkb3duLgorLSBJc3N1ZSAjMTkwNzc6IHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSBjbGVhbnVwIG5vIGxvbmdlciBmYWlscyB3aGVuCisgIGNhbGxlZCBkdXJpbmcgc2h1dGRvd24uICBFbWl0dGluZyByZXNvdXJjZSB3YXJuaW5nIGluIF9fZGVsX18gbm8gbG9uZ2VyIGZhaWxzLgorICBPcmlnaW5hbCBwYXRjaCBieSBBbnRvaW5lIFBpdHJvdS4KKworLSBJc3N1ZSAjMjAzOTQ6IFNpbGVuY2UgQ292ZXJpdHkgd2FybmluZyBpbiBhdWRpb29wIG1vZHVsZS4KIAogLSBJc3N1ZSAjMjAzNjc6IEZpeCBiZWhhdmlvciBvZiBjb25jdXJyZW50LmZ1dHVyZXMuYXNfY29tcGxldGVkKCkgZm9yCiAgIGR1cGxpY2F0ZSBhcmd1bWVudHMuICBQYXRjaCBieSBHbGVubiBMYW5nZm9yZC4KQEAgLTkyLDYgKzIxOCwxOCBAQAogICBjb2RlY3MuU3RyZWFtUmVhZGVyIHJldHVybmVkIGluY29tcGxldGUgZGF0YSB3aGVuIHdlcmUgY2FsbGVkIGFmdGVyCiAgIHJlYWRsaW5lKCkgb3IgcmVhZChzaXplKS4gIEJhc2VkIG9uIHBhdGNoIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjLgogCistIElzc3VlICMyMDEwNTogdGhlIGNvZGVjIGV4Y2VwdGlvbiBjaGFpbmluZyBub3cgY29ycmVjdGx5IHNldHMgdGhlCisgIHRyYWNlYmFjayBvZiB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uIGFzIGl0cyBfX3RyYWNlYmFja19fIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMTc0ODE6IGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWMoKSBub3cgdXNlcyBpbnNwZWN0LnNpZ25hdHVyZSgpIEFQSS4KKworLSBJc3N1ZSAjMTUzMDQ6IGNvbmN1cnJlbnQuZnV0dXJlcy53YWl0KCkgY2FuIGJsb2NrIGZvcmV2ZXIgZXZlbiBpZgorICBGdXR1cmVzIGhhdmUgY29tcGxldGVkLiBQYXRjaCBieSBHbGVubiBMYW5nZm9yZC4KKworLSBJc3N1ZSAjMTQ0NTU6IHBsaXN0bGliOiBmaXggc2VyaWFsaXppbmcgaW50ZWdlcnMgaW50ZWdlcnMgaW4gdGhlIHJhbmdlCisgIG9mIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyBidXQgb3V0c2lkZSBvZiB0aGUgcmFuZ2Ugb2Ygc2lnbmVkIGxvbmcgbG9uZyBmb3IKKyAgYmluYXJ5IHBsaXN0IGZpbGVzLgorCiBJRExFCiAtLS0tCiAKQEAgLTEwNyw3ICsyNDUsNyBAQAogVGVzdHMKIC0tLS0tCiAKLS0gSXNzdWUgIzIwNTMyOiBUZXN0cyB3aGljaCB1c2UgX3Rlc3RjYXBpIGFyZSBub3cgbWFya2VkIGFzIENQeXRob24gb25seS4KKy0gSXNzdWUgIzIwNTMyOiBUZXN0cyB3aGljaCB1c2UgX3Rlc3RjYXBpIG5vdyBhcmUgbWFya2VkIGFzIENQeXRob24gb25seS4KIAogLSBJc3N1ZSAjMTk5MjA6IEFkZGVkIHRlc3RzIGZvciBUYXJGaWxlLmxpc3QoKS4gIEJhc2VkIG9uIHBhdGNoIGJ5IFZhanJhc2t5IEtvay4KIApAQCAtMTE2LDM0ICsyNTQsNzMgQEAKIAogLSBJc3N1ZSAjMjA0NzQ6IEZpeCB0ZXN0X3NvY2tldCAidW5leHBlY3RlZCBzdWNjZXNzIiBmYWlsdXJlcyBvbiBPUyBYIDEwLjcrLgogCi0tIElzc3VlICMyMDYwNTogTWFrZSB0ZXN0X3NvY2tldCBnZXRhZGRyaW5mbyBPUyBYIHNlZ2ZhdWx0IHRlc3QgbW9yZSByb2J1c3QuCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjA1MzA6IEFyZ3VtZW50IENsaW5pYydzIHNpZ25hdHVyZSBmb3JtYXQgaGFzIGJlZW4gcmV2aXNlZCBhZ2Fpbi4KKyAgVGhlIG5ldyBzeW50YXggaXMgaGlnaGx5IGh1bWFuIHJlYWRhYmxlIHdoaWxlIHN0aWxsIHByZXZlbnRpbmcgZmFsc2UKKyAgcG9zaXRpdmVzLiAgVGhlIHN5bnRheCBhbHNvIGV4dGVuZHMgUHl0aG9uIHN5bnRheCB0byBkZW5vdGUgInNlbGYiIGFuZAorICBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycywgYWxsb3dpbmcgaW5zcGVjdC5TaWduYXR1cmUgb2JqZWN0cyB0byBiZQorICB0b3RhbGx5IGFjY3VyYXRlIGZvciBhbGwgc3VwcG9ydGVkIGJ1aWx0aW5zIGluIFB5dGhvbiAzLjQuCisKKy0gSXNzdWUgIzIwNDU2OiBBcmd1bWVudCBDbGluaWMgbm93IG9ic2VydmVzIHRoZSBDIHByZXByb2Nlc3NvciBjb25kaXRpb25hbAorICBjb21waWxhdGlvbiBzdGF0ZW1lbnRzIG9mIHRoZSBDIGZpbGVzIGl0IHBhcnNlcy4gIFdoZW4gYSBDbGluaWMgYmxvY2sgaXMKKyAgaW5zaWRlIGEgY29uZGl0aW9uYWwgY29kZSwgaXQgYWRqdXN0cyBpdHMgb3V0cHV0IHRvIG1hdGNoLCBpbmNsdWRpbmcKKyAgYXV0b21hdGljYWxseSBnZW5lcmF0aW5nIGFuIGVtcHR5IG1ldGhvZGRlZiBtYWNyby4KKworLSBJc3N1ZSAjMjA0NTY6IENsb25lZCBmdW5jdGlvbnMgaW4gQXJndW1lbnQgQ2xpbmljIG5vdyB1c2UgdGhlIGNvcnJlY3QKKyAgbmFtZSwgbm90IHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0aGV5IHdlcmUgY2xvbmVkIGZyb20sIGZvciB0ZXh0CisgIHN0cmluZ3MgaW5zaWRlIGdlbmVyYXRlZCBjb2RlLgorCistIElzc3VlICMyMDQ1NjogRml4ZWQgQXJndW1lbnQgQ2xpbmljJ3MgdGVzdCBzdWl0ZSBhbmQgIi0tY29udmVydGVycyIgZmVhdHVyZS4KKworLSBJc3N1ZSAjMjA0NTY6IEFyZ3VtZW50IENsaW5pYyBub3cgYWxsb3dzIHNwZWNpZnlpbmcgZGlmZmVyZW50IG5hbWVzCisgIGZvciBhIHBhcmFtZXRlciBpbiBQeXRob24gYW5kIEMsIHVzaW5nICJhcyIgb24gdGhlIHBhcmFtZXRlciBsaW5lLgorCistIElzc3VlICMyMDMyNjogQXJndW1lbnQgQ2xpbmljIG5vdyB1c2VzIGEgc2ltcGxlLCB1bmlxdWUgc2lnbmF0dXJlIHRvCisgIGFubm90YXRlIHRleHQgc2lnbmF0dXJlcyBpbiBkb2NzdHJpbmdzLCByZXN1bHRpbmcgaW4gZmV3ZXIgZmFsc2UKKyAgcG9zaXRpdmVzLiAgInNlbGYiIHBhcmFtZXRlcnMgYXJlIGFsc28gZXhwbGljaXRseSBtYXJrZWQsIGFsbG93aW5nCisgIGluc3BlY3QuU2lnbmF0dXJlKCkgdG8gYXV0aG9yaXRhdGl2ZWx5IGRldGVjdCAoYW5kIHNraXApIHNhaWQgcGFyYW1ldGVycy4KKworLSBJc3N1ZSAjMjAzMjY6IEFyZ3VtZW50IENsaW5pYyBub3cgZ2VuZXJhdGVzIHNlcGFyYXRlIGNoZWNrc3VtcyBmb3IgdGhlCisgIGlucHV0IGFuZCBvdXRwdXQgc2VjdGlvbnMgb2YgdGhlIGJsb2NrLCBhbGxvd2luZyBleHRlcm5hbCB0b29scyB0byB2ZXJpZnkKKyAgdGhhdCB0aGUgaW5wdXQgaGFzIG5vdCBjaGFuZ2VkIChhbmQgdGh1cyB0aGUgb3V0cHV0IGlzIG5vdCBvdXQtb2YtZGF0ZSkuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMyMDQ2NTogVXBkYXRlIFNRTGl0ZSBzaGlwcGVkIHdpdGggT1MgWCBpbnN0YWxsZXIgdG8gMy44LjMuCisKK0MtQVBJCistLS0tLQorCistIElzc3VlICMyMDUxNzogQWRkZWQgbmV3IGZ1bmN0aW9ucyBhbGxvd2luZyBPU0Vycm9yIGV4Y2VwdGlvbnMgdG8gcmVmZXJlbmNlCisgIHR3byBmaWxlbmFtZXMgaW5zdGVhZCBvZiBvbmU6IFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoKSBhbmQKKyAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKCkuCiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAotLSBJc3N1ZSAjMjA0ODg6IEltcG9ydGxpYiBpcyBubyBsb25nZXIgKmFuKiBpbXBsZW1lbnRhdGlvbiBvZiBpbXBvcnQsIGl0J3MgKnRoZSoKLSAgaW1wbGVtZW50YXRpb24uCistIElzc3VlICMyMDQ4ODogQ2hhbmdlIHdvcmRpbmcgdG8gc2F5IGltcG9ydGxpYiBpcyAqdGhlKiBpbXBsZW1lbnRhdGlvbiBvZgorICBpbXBvcnQgaW5zdGVhZCBvZiBqdXN0ICphbiogaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzYzODY6IENsYXJpZnkgaW4gdGhlIHR1dG9yaWFsIHRoYXQgc3BlY2lmeWluZyBhIHN5bWxpbmsgdG8gZXhlY3V0ZQorICBtZWFucyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGVkIHNjcmlwdCBhbmQgbm90IHRoZSBzeW1saW5rIGlzCisgIGFkZGVkIHRvIHN5cy5wYXRoLgogCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy40PwotPT09PT09PT09PT09PT09PT09PT09PT09PT09CitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBCZXRhIDM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSpSZWxlYXNlIGRhdGU6IDA5LUZlYi0yMDE0KgotCi1MaWJyYXJ5Ci0tLS0tLS0tCi0KLS0gSXNzdWUgIzIwMzc0OiBGaXggYnVpbGQgd2FybmluZ3Mgb2YgdGhlIHJlYWRsaW5lIG1vZHVsZSB3aXRoIGxpYmVkaXQgb24gTWFjLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy40IHJlbGVhc2UgY2FuZGlkYXRlIDE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAyNi1KYW4tMjAxNCoKK1JlbGVhc2UgZGF0ZTogMjAxNC0wMS0yNgogCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMjAxODk6IEZvdXIgYWRkaXRpb25hbCBidWlsdGluIHR5cGVzIChQeVR5cGVPYmplY3QsCisgIFB5TWV0aG9kRGVzY3JfVHlwZSwgX1B5TWV0aG9kV3JhcHBlcl9UeXBlLCBhbmQgUHlXcmFwcGVyRGVzY3JfVHlwZSkKKyAgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIHByb3ZpZGUgaW50cm9zcGVjdGlvbiBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMuCisKIC0gSXNzdWUgIzE3ODI1OiBDdXJzb3IgIl4iIGlzIGNvcnJlY3RseSBwb3NpdGlvbmVkIGZvciBTeW50YXhFcnJvciBhbmQKICAgSW5kZW50YXRpb25FcnJvci4KIApAQCAtMTU4LDI5ICszMzUsMjYgQEAKICAgc291cmNlIGVuY29kaW5nIGRlY2xhcmF0aW9ucywgYW5kIGNhbiBiZSB1c2VkIHRvIG1ha2UgUHl0aG9uIGJhdGNoIGZpbGVzCiAgIG9uIFdpbmRvd3MuCiAKLS0gSXNzdWUgIzE3NDMyOiBEcm9wIFVDUzIgZnJvbSBuYW1lcyBvZiBVbmljb2RlIGZ1bmN0aW9ucyBpbiBweXRob24zLmRlZi4KLQotLSBJc3N1ZSAjMTk5Njk6IFB5Qnl0ZXNfRnJvbUZvcm1hdFYoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgaWYgIiVjIgotICBhcmd1bWVudCBpcyBub3QgaW4gcmFuZ2UgWzA7IDI1NV0uCi0KLS0gSXNzdWUgIzE0NDMyOiBHZW5lcmF0b3Igbm93IGNsZWFycyB0aGUgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIHRoZSB0aHJlYWQKLSAgc3RhdGUuIEZpeCBhIGNyYXNoIHdoZW4gYSBnZW5lcmF0b3IgaXMgY3JlYXRlZCBpbiBhIEMgdGhyZWFkIHRoYXQgaXMKLSAgZGVzdHJveWVkIHdoaWxlIHRoZSBnZW5lcmF0b3IgaXMgc3RpbGwgdXNlZC4gVGhlIGlzc3VlIHdhcyB0aGF0IGEgZ2VuZXJhdG9yCi0gIGNvbnRhaW5zIGEgZnJhbWUsIGFuZCB0aGUgZnJhbWUga2VwdCBhIHJlZmVyZW5jZSB0byB0aGUgUHl0aG9uIHN0YXRlIG9mIHRoZQotICBkZXN0cm95ZWQgQyB0aHJlYWQuIFRoZSBjcmFzaCBvY2N1cnMgd2hlbiBhIHRyYWNlIGZ1bmN0aW9uIGlzIHNldHVwLgotCi0tIElzc3VlICMxOTkzMjogRml4IHR5cG8gaW4gaW1wb3J0LmgsIG1pc3Npbmcgd2hpdGVzcGFjZXMgaW4gZnVuY3Rpb24gcHJvdG90eXBlcy4KLQotLSBJc3N1ZSAjMTk3Mjk6IEluIHN0ci5mb3JtYXQoKSwgZml4IHJlY3Vyc2l2ZSBleHBhbnNpb24gaW4gZm9ybWF0IHNwZWMuCi0KLS0gSXNzdWUgIzE5NjM4OiBGaXggcG9zc2libGUgY3Jhc2ggLyB1bmRlZmluZWQgYmVoYXZpb3VyIGZyb20gaHVnZSAobW9yZSB0aGFuIDIKLSAgYmlsbGlvbiBjaGFyYWN0ZXJzKSBpbnB1dCBzdHJpbmdzIGluIF9QeV9kZ19zdHJ0b2QuCi0KIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjMTYwNDI6IENWRS0yMDEzLTE3NTI6IHNtdHBsaWI6IExpbWl0IGFtb3VudCBvZiBkYXRhIHJlYWQgYnkKLSAgbGltaXRpbmcgdGhlIGNhbGwgdG8gcmVhZGxpbmUoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IENocmlzdGlhbiBIZWltZXMuCistIGFzeW5jaW86IFZhcmlvdXMgaW1wcm92ZW1lbnRzIGFuZCBzbWFsbCBjaGFuZ2VzIG5vdCBhbGwgY292ZXJlZCBieQorICBpc3N1ZXMgbGlzdGVkIGJlbG93LiAgRS5nLiB3YWl0X2ZvcigpIG5vdyBjYW5jZWxzIHRoZSBpbm5lciB0YXNrIGlmCisgIHRoZSB0aW1lb3V0IG9jY2N1cnM7IHR3ZWFrZWQgdGhlIHNldCBvZiBleHBvcnRlZCBzeW1ib2xzOyByZW5hbWVkCisgIEVtcHR5L0Z1bGwgdG8gUXVldWVFbXB0eS9RdWV1ZUZ1bGw7ICJ3aXRoICh5aWVsZCBmcm9tIGxvY2spIiBub3cKKyAgdXNlcyBhIHNlcGFyYXRlIGNvbnRleHQgbWFuYWdlcjsgcmVhZGV4YWN0bHkoKSByYWlzZXMgaWYgbm90IGVub3VnaAorICBkYXRhIHdhcyByZWFkOyBQVFkgc3VwcG9ydCB0d2Vha3MuCisKKy0gSXNzdWUgIzIwMzExOiBhc3luY2lvOiBBZGQgYSBncmFudWxhcml0eSBhdHRyaWJ1dGUgdG8gQmFzZUV2ZW50TG9vcDogbWF4aW11bQorICBiZXR3ZWVuIHRoZSByZXNvbHV0aW9uIG9mIHRoZSBCYXNlRXZlbnRMb29wLnRpbWUoKSBtZXRob2QgYW5kIHRoZSByZXNvbHV0aW9uCisgIG9mIHRoZSBzZWxlY3Rvci4gVGhlIGdyYW51YXJpbGl0eSBpcyB1c2VkIGluIHRoZSBzY2hlZHVsZXIgdG8gcm91bmQgdGltZSBhbmQKKyAgZGVhZGxpbmUuCisKKy0gSXNzdWUgIzIwMzExOiBzZWxlY3RvcnM6IEFkZCBhIHJlc29sdXRpb24gYXR0cmlidXRlIHRvIEJhc2VTZWxlY3Rvci4KKworLSBJc3N1ZSAjMjAxODk6IHVuaXR0ZXN0Lm1vY2sgbm93IG5vIGxvbmdlciBhc3N1bWVzIHRoYXQgYW55IG9iamVjdCBmb3IKKyAgd2hpY2ggaXQgY291bGQgZ2V0IGFuIGluc3BlY3QuU2lnbmF0dXJlIGlzIGEgY2FsbGFibGUgd3JpdHRlbiBpbiBQeXRob24uCisgIEZpeCBjb3VydGVzeSBvZiBNaWNoYWVsIEZvb3JkLgogCiAtIElzc3VlICMyMDMxNzogRXhpdFN0YWNrLl9fZXhpdF9fIGNvdWxkIGNyZWF0ZSBhIHNlbGYtcmVmZXJlbnRpYWwgbG9vcCBpZiBhbgogICBleGNlcHRpb24gcmFpc2VkIGJ5IGEgY2xlYW51cCBvcGVyYXRpb24gYWxyZWFkeSBoYWQgaXRzIGNvbnRleHQgc2V0CkBAIC0xOTMsNiArMzY3LDkgQEAKIC0gSXNzdWUgIzIwMjYyOiBXYXJuaW5ncyBhcmUgcmFpc2VkIG5vdyB3aGVuIGR1cGxpY2F0ZSBuYW1lcyBhcmUgYWRkZWQgaW4gdGhlCiAgIFpJUCBmaWxlIG9yIHRvbyBsb25nIFpJUCBmaWxlIGNvbW1lbnQgaXMgdHJ1bmNhdGVkLgogCistIElzc3VlICMyMDE2NTogVGhlIHVuaXR0ZXN0IG1vZHVsZSBubyBsb25nZXIgY29uc2lkZXJzIHRlc3RzIG1hcmtlZCB3aXRoCisgIEBleHBlY3RlZEZhaWx1cmUgc3VjY2Vzc2Z1bCBpZiB0aGV5IHBhc3MuCisKIC0gSXNzdWUgIzE4NTc0OiBBZGRlZCBtaXNzaW5nIG5ld2xpbmUgaW4gMTAwLUNvbnRpbnVlIHJlcGx5IGZyb20KICAgaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci4gUGF0Y2ggYnkgTmlrb2xhdXMgUmF0aC4KIApAQCAtMjI0LDcgKzQwMSw3IEBACiAtIElzc3VlICMxOTA5NzogUmFpc2UgdGhlIGNvcnJlY3QgRXhjZXB0aW9uIHdoZW4gY2dpLkZpZWxkU3RvcmFnZSBpcyBnaXZlbiBhbgogICBpbnZhbGlkIGZpbGVvYmouCiAKLS0gSXNzdWUgIzIwMjE3OiBGaXggYnVpbGQgaW4gU0NIRURfU1BPUkFESUMgaXMgZGVmaW5lZC4KKy0gSXNzdWUgIzIwMTUyOiBQb3J0ZWQgUHl0aG9uL2ltcG9ydC5jIG92ZXIgdG8gQXJndW1lbnQgQ2xpbmljLgogCiAtIElzc3VlICMxMzEwNzogYXJncGFyc2UgYW5kIG9wdHBhcnNlIG5vIGxvbmdlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gb3V0cHV0CiAgIGEgaGVscCBvbiBlbnZpcm9ubWVudCB3aXRoIHRvbyBzbWFsbCBDT0xVTU5TLiAgQmFzZWQgb24gcGF0Y2ggYnkKQEAgLTI0MiwyMCArNDE5LDIwNSBAQAogLSBJc3N1ZSAjMjAxMTM6IG9zLnJlYWR2KCkgYW5kIG9zLndyaXRldigpIG5vdyByYWlzZSBhbiBPU0Vycm9yIGV4Y2VwdGlvbiBvbgogICBlcnJvciBpbnN0ZWFkIG9mIHJldHVybmluZyAtMS4KIAorLSBJc3N1ZSAjMTk3MTk6IE1ha2UgaW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX21vZHVsZSgpLAorICBQYXRoRW50cnlGaW5kZXIuZmluZF9sb2FkZXIoKSwgYW5kIExvYWRlci5sb2FkX21vZHVsZSgpIHVzZSBQRVAgNDUxIEFQSXMgdG8KKyAgaGVscCB3aXRoIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LgorCistIElzc3VlICMyMDE0NDogaW5zcGVjdC5TaWduYXR1cmUgbm93IHN1cHBvcnRzIHBhcnNpbmcgc2ltcGxlIHN5bWJvbGljCisgIGNvbnN0YW50cyBhcyBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZXMgaW4gX190ZXh0X3NpZ25hdHVyZV9fLgorCiAtIElzc3VlICMyMDA3MjogRml4ZWQgbXVsdGlwbGUgZXJyb3JzIGluIHRraW50ZXIgd2l0aCB3YW50b2JqZWN0cyBpcyBGYWxzZS4KIAorLSBJc3N1ZSAjMjAyMjk6IEF2b2lkIHBsaXN0bGliIGRlcHJlY2F0aW9uIHdhcm5pbmcgaW4gcGxhdGZvcm0ubWFjX3ZlcigpLgorCistIElzc3VlICMxNDQ1NTogRml4IHNvbWUgcHJvYmxlbXMgd2l0aCB0aGUgbmV3IGJpbmFyeSBwbGlzdCBzdXBwb3J0IGluIHBsaXN0bGliLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzE3MzkwOiBBZGQgUHl0aG9uIHZlcnNpb24gdG8gSWRsZSBlZGl0b3Igd2luZG93IHRpdGxlIGJhci4KKyAgT3JpZ2luYWwgcGF0Y2hlcyBieSBFZG1vbmQgQnVybmV0dCBhbmQgS2VudCBKb2huc29uLgorCistIElzc3VlICMxODk2MDogSURMRSBub3cgaWdub3JlcyB0aGUgc291cmNlIGVuY29kaW5nIGRlY2xhcmF0aW9uIG9uIHRoZSBzZWNvbmQKKyAgbGluZSBpZiB0aGUgZmlyc3QgbGluZSBjb250YWlucyBhbnl0aGluZyBleGNlcHQgYSBjb21tZW50LgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjAzNTg6IFRlc3RzIGZvciBjdXJzZXMud2luZG93Lm92ZXJsYXkgYW5kIGN1cnNlcy53aW5kb3cub3ZlcndyaXRlCisgIG5vIGxvbmdlciBzcGVjaWZ5IG1pbntyb3csY29sfSA+IG1heHtyb3csY29sfS4KKworLSBJc3N1ZSAjMTk4MDQ6IFRoZSB0ZXN0X2ZpbmRfbWFjIHRlc3QgaW4gdGVzdF91dWlkIGlzIG5vdyBza2lwcGVkIGlmIHRoZQorICBpZmNvbmZpZyBleGVjdXRhYmxlIGlzIG5vdCBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE5ODg2OiBVc2UgYmV0dGVyIGVzdGltYXRlZCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBiaWdtZW0gdGVzdHMuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMyMDM5MDogQXJndW1lbnQgQ2xpbmljJ3MgImZpbGUiIG91dHB1dCBwcmVzZXQgbm93IGRlZmF1bHRzIHRvCisgICJ7ZGlybmFtZX0vY2xpbmljL3tiYXNlbmFtZX0uaCIuCisKKy0gSXNzdWUgIzIwMzkwOiBBcmd1bWVudCBDbGluaWMncyAiY2xhc3MiIGRpcmVjdGl2ZSBzeW50YXggaGFzIGJlZW4gZXh0ZW5kZWQKKyAgd2l0aCB0d28gbmV3IHJlcXVpcmVkICBhcmd1bWVudHM6ICJ0eXBlZGVmIiBhbmQgInR5cGVfb2JqZWN0Ii4KKworLSBJc3N1ZSAjMjAzOTA6IEFyZ3VtZW50IENsaW5pYzogSWYgX19uZXdfXyBvciBfX2luaXRfXyBmdW5jdGlvbnMgZGlkbid0IHVzZQorICBrd2FyZ3MgKG9yIGFyZ3MpLCB0aGUgUHlBcmdfTm9LZXl3b3JkcyAob3IgUHlBcmdfTm9Qb3NpdGlvbmFsKSBjYWxscworICBnZW5lcmF0ZWQgYXJlIG9ubHkgcnVuIHdoZW4gdGhlIHR5cGUgb2JqZWN0IGlzIGFuIGV4YWN0IG1hdGNoLgorCistIElzc3VlICMyMDM5MDogQXJndW1lbnQgQ2xpbmljIG5vdyBmYWlscyBpZiB5b3UgaGF2ZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFmdGVyCisgIG9wdGlvbmFsIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzIwMzkwOiBBcmd1bWVudCBDbGluaWMgY29udmVydGVycyBub3cgaGF2ZSBhIG5ldyB0ZW1wbGF0ZSB0aGV5IGNhbgorICBpbmplY3QgY29kZSBpbnRvOiAibW9kaWZpZXJzIi4gIENvZGUgcHV0IHRoZXJlIGlzIHJ1biBpbiB0aGUgcGFyc2luZworICBmdW5jdGlvbiBhZnRlciBhcmd1bWVudCBwYXJzaW5nIGJ1dCBiZWZvcmUgdGhlIGNhbGwgdG8gdGhlIGltcGwuCisKKy0gSXNzdWUgIzIwMzc2OiBBcmd1bWVudCBDbGluaWMgbm93IGVzY2FwZXMgYmFja3NsYXNoZXMgaW4gZG9jc3RyaW5ncy4KKworLSBJc3N1ZSAjMjAzODE6IEFyZ3VtZW50IENsaW5pYyBub3cgc2FuaXR5IGNoZWNrcyB0aGUgZGVmYXVsdCBhcmd1bWVudCB3aGVuCisgIGNfZGVmYXVsdCBpcyBhbHNvIHNwZWNpZmllZCwgcHJvdmlkaW5nIGEgbmljZSBmYWlsdXJlIG1lc3NhZ2UgZm9yCisgIGRpc2FsbG93ZWQgdmFsdWVzLgorCistIElzc3VlICMyMDE4OTogQXJndW1lbnQgQ2xpbmljIG5vdyBlbnN1cmVzIHRoYXQgcGFyc2VyIGZ1bmN0aW9ucyBmb3IKKyAgX19uZXdfXyBhcmUgYWx3YXlzIG9mIHR5cGUgbmV3ZnVuYywgdGhlIHR5cGUgb2YgdGhlIHRwX25ldyBzbG90LgorICBTaW1pbGFybHksIHBhcnNlciBmdW5jdGlvbnMgZm9yIF9faW5pdF9fIGFyZSBub3cgYWx3YXlzIG9mIHR5cGUgaW5pdHByb2MsCisgIHRoZSB0eXBlIG9mIHRwX2luaXQuCisKKy0gSXNzdWUgIzIwMTg5OiBBcmd1bWVudCBDbGluaWMgbm93IHN1cHByZXNzZXMgdGhlIGRvY3N0cmluZyBmb3IgX19uZXdfXworICBhbmQgX19pbml0X18gZnVuY3Rpb25zIGlmIG5vIGRvY3N0cmluZyBpcyBwcm92aWRlZCBpbiB0aGUgaW5wdXQuCisKKy0gSXNzdWUgIzIwMTg5OiBBcmd1bWVudCBDbGluaWMgbm93IHN1cHByZXNzZXMgdGhlICJzZWxmIiBwYXJhbWV0ZXIgaW4gdGhlCisgIGltcGwgZm9yIEBzdGF0aWNtZXRob2QgZnVuY3Rpb25zLgorCistIElzc3VlICMyMDI5NDogQXJndW1lbnQgQ2xpbmljIG5vdyBzdXBwb3J0cyBhcmd1bWVudCBwYXJzaW5nIGZvciBfX25ld19fIGFuZAorICBfX2luaXRfXyBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzIwMjk5OiBBcmd1bWVudCBDbGluaWMgY3VzdG9tIGNvbnZlcnRlcnMgbWF5IG5vdyBjaGFuZ2UgdGhlIGRlZmF1bHQKKyAgdmFsdWUgb2YgY19kZWZhdWx0IGFuZCBweV9kZWZhdWx0IHdpdGggYSBjbGFzcyBtZW1iZXIuCisKKy0gSXNzdWUgIzIwMjg3OiBBcmd1bWVudCBDbGluaWMncyBvdXRwdXQgaXMgbm93IGNvbmZpZ3VyYWJsZSwgYWxsb3dpbmcKKyAgZGVsYXlpbmcgaXRzIG91dHB1dCBvciBldmVuIHJlZGlyZWN0aW5nIGl0IHRvIGEgc2VwYXJhdGUgZmlsZS4KKworLSBJc3N1ZSAjMjAyMjY6IEFyZ3VtZW50IENsaW5pYyBub3cgcGVybWl0cyBzaW1wbGUgZXhwcmVzc2lvbnMKKyAgKGUuZy4gInN5cy5tYXhzaXplIC0gMSIpIGFzIGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzLgorCistIElzc3VlICMxOTkzNjogQWRkZWQgZXhlY3V0YWJsZSBiaXRzIG9yIHNoZWJhbmcgbGluZXMgdG8gUHl0aG9uIHNjcmlwdHMgd2hpY2gKKyAgcmVxdWlyZXMgdGhlbS4gIERpc2FibGUgZXhlY3V0YWJsZSBiaXRzIGFuZCBzaGViYW5nIGxpbmVzIGluIHRlc3QgYW5kCisgIGJlbmNobWFyayBmaWxlcyBpbiBvcmRlciB0byBwcmV2ZW50IHVzaW5nIGEgcmFuZG9tIHN5c3RlbSBweXRob24sIGFuZCBpbgorICBzb3VyY2UgZmlsZXMgb2YgbW9kdWxlcyB3aGljaCBkb24ndCBwcm92aWRlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UuICBGaXhlZAorICBzaGViYW5nIGxpbmVzIGluIHRoZSB1bml0dGVzdGd1aSBhbmQgY2hlY2twaXAgc2NyaXB0cy4KKworLSBJc3N1ZSAjMjAyNjg6IEFyZ3VtZW50IENsaW5pYyBub3cgc3VwcG9ydHMgY2xvbmluZyB0aGUgcGFyYW1ldGVycyBhbmQKKyAgcmV0dXJuIGNvbnZlcnRlciBvZiBleGlzdGluZyBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzIwMjI4OiBBcmd1bWVudCBDbGluaWMgbm93IGhhcyBzcGVjaWFsIHN1cHBvcnQgZm9yIGNsYXNzIHNwZWNpYWwKKyAgbWV0aG9kcy4KKworLSBJc3N1ZSAjMjAyMTQ6IEZpeGVkIGEgbnVtYmVyIG9mIHNtYWxsIGlzc3VlcyBhbmQgZG9jdW1lbnRhdGlvbiBlcnJvcnMgaW4KKyAgQXJndW1lbnQgQ2xpbmljIChzZWUgaXNzdWUgZm9yIGRldGFpbHMpLgorCistIElzc3VlICMyMDE5NjogRml4ZWQgYSBidWcgd2hlcmUgQXJndW1lbnQgQ2xpbmljIGRpZCBub3QgZ2VuZXJhdGUgY29ycmVjdAorICBwYXJzaW5nIGNvZGUgZm9yIGZ1bmN0aW9ucyB3aXRoIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzIHdoZXJlIGFsbCBhcmd1bWVudHMKKyAgYXJlIG9wdGlvbmFsLgorCistIElzc3VlICMxODk2MDogMnRvMyBhbmQgdGhlIGZpbmRub2NvZGluZy5weSBzY3JpcHQgbm93IGlnbm9yZSB0aGUgc291cmNlCisgIGVuY29kaW5nIGRlY2xhcmF0aW9uIG9uIHRoZSBzZWNvbmQgbGluZSBpZiB0aGUgZmlyc3QgbGluZSBjb250YWlucyBhbnl0aGluZworICBleGNlcHQgYSBjb21tZW50LgorCistIElzc3VlICMxOTcyMzogVGhlIG1hcmtlciBjb21tZW50cyBBcmd1bWVudCBDbGluaWMgdXNlcyBoYXZlIGJlZW4gY2hhbmdlZAorICB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LgorCistIElzc3VlICMyMDE1NzogV2hlbiBBcmd1bWVudCBDbGluaWMgcmVuYW1lcyBhIHBhcmFtZXRlciBiZWNhdXNlIGl0cyBuYW1lCisgIGNvbGxpZGVzIHdpdGggYSBDIGtleXdvcmQsIGl0IG5vIGxvbmdlciBleHBvc2VzIHRoYXQgcmVuYW1lIHRvIFB5QXJnX1BhcnNlLgorCistIElzc3VlICMyMDE0MTogSW1wcm92ZWQgQXJndW1lbnQgQ2xpbmljJ3Mgc3VwcG9ydCBmb3IgdGhlIFB5QXJnX1BhcnNlICJPISIKKyAgZm9ybWF0IHVuaXQuCisKKy0gSXNzdWUgIzIwMTQ0OiBBcmd1bWVudCBDbGluaWMgbm93IHN1cHBvcnRzIHNpbXBsZSBzeW1ib2xpYyBjb25zdGFudHMKKyAgYXMgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWVzLgorCistIElzc3VlICMyMDE0MzogVGhlIGxpbmUgbnVtYmVycyByZXBvcnRlZCBpbiBBcmd1bWVudCBDbGluaWMgZXJyb3JzIGFyZQorICBub3cgbW9yZSBhY2N1cmF0ZS4KKworLSBJc3N1ZSAjMjAxNDI6IFB5X2J1ZmZlciB2YXJpYWJsZXMgZ2VuZXJhdGVkIGJ5IEFyZ3VtZW50IENsaW5pYyBhcmUgbm93CisgIGluaXRpYWxpemVkIHdpdGggYSBkZWZhdWx0IHZhbHVlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTI4Mzc6IFNpbGVuY2UgYSB0YXV0b2xvZ2ljYWwgY29tcGFyaXNvbiB3YXJuaW5nIG9uIE9TIFggdW5kZXIgQ2xhbmcgaW4KKyAgc29ja2V0bW9kdWxlLmMuCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEJldGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE0LTAxLTA1CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNzQzMjogRHJvcCBVQ1MyIGZyb20gbmFtZXMgb2YgVW5pY29kZSBmdW5jdGlvbnMgaW4gcHl0aG9uMy5kZWYuCisKKy0gSXNzdWUgIzE5NTI2OiBFeGNsdWRlIGFsbCBuZXcgQVBJIGZyb20gdGhlIHN0YWJsZSBBQkkuIEV4Y2VwdGlvbnMgY2FuIGJlCisgIG1hZGUgaWYgYSBuZWVkIGlzIGRlbW9uc3RyYXRlZC4KKworLSBJc3N1ZSAjMTk5Njk6IFB5Qnl0ZXNfRnJvbUZvcm1hdFYoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgaWYgIiVjIgorICBhcmd1bWVudCBpcyBub3QgaW4gcmFuZ2UgWzA7IDI1NV0uCisKKy0gSXNzdWUgIzE5OTk1OiAlYywgJW8sICV4LCBhbmQgJVggbm93IGlzc3VlIGEgRGVwcmVjYXRpb25XYXJuaW5nIG9uIG5vbi1pbnRlZ2VyCisgIGlucHV0OyByZXdvcmRlZCBkb2NzIHRvIGNsYXJpZnkgdGhhdCBhbiBpbnRlZ2VyIHR5cGUgc2hvdWxkIGRlZmluZSBib3RoIF9faW50X18KKyAgYW5kIF9faW5kZXhfXy4KKworLSBJc3N1ZSAjMTk3ODc6IFB5VGhyZWFkX3NldF9rZXlfdmFsdWUoKSBub3cgYWx3YXlzIHNldCB0aGUgdmFsdWUuIEluIFB5dGhvbgorICAzLjMsIHRoZSBmdW5jdGlvbiBkaWQgbm90aGluZyBpZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzIChpZiB0aGUgY3VycmVudCB2YWx1ZQorICBpcyBhIG5vbi1OVUxMIHBvaW50ZXIpLgorCistIElzc3VlICMxNDQzMjogUmVtb3ZlIHRoZSB0aHJlYWQgc3RhdGUgZmllbGQgZnJvbSB0aGUgZnJhbWUgc3RydWN0dXJlLiBGaXggYQorICBjcmFzaCB3aGVuIGEgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgaW4gYSBDIHRocmVhZCB0aGF0IGlzIGRlc3Ryb3llZCB3aGlsZSB0aGUKKyAgZ2VuZXJhdG9yIGlzIHN0aWxsIHVzZWQuIFRoZSBpc3N1ZSB3YXMgdGhhdCBhIGdlbmVyYXRvciBjb250YWlucyBhIGZyYW1lLCBhbmQKKyAgdGhlIGZyYW1lIGtlcHQgYSByZWZlcmVuY2UgdG8gdGhlIFB5dGhvbiBzdGF0ZSBvZiB0aGUgZGVzdHJveWVkIEMgdGhyZWFkLiBUaGUKKyAgY3Jhc2ggb2NjdXJzIHdoZW4gYSB0cmFjZSBmdW5jdGlvbiBpcyBzZXR1cC4KKworLSBJc3N1ZSAjMTk1NzY6IFB5R0lMU3RhdGVfRW5zdXJlKCkgbm93IGluaXRpYWxpemVzIHRocmVhZHMuIEF0IHN0YXJ0dXAsIFB5dGhvbgorICBoYXMgbm8gY29uY3JldGUgR0lMLiBJZiBQeUdJTFN0YXRlX0Vuc3VyZSgpIGlzIGNhbGxlZCBmcm9tIGEgbmV3IHRocmVhZCBmb3IKKyAgdGhlIGZpcnN0IHRpbWUgYW5kIFB5RXZhbF9Jbml0VGhyZWFkcygpIHdhcyBub3QgY2FsbGVkIHlldCwgYSBHSUwgbmVlZHMgdG8gYmUKKyAgY3JlYXRlZC4KKworLSBJc3N1ZSAjMTc1NzY6IERlcHJlY2F0aW9uIHdhcm5pbmcgZW1pdHRlZCBub3cgd2hlbiBfX2ludF9fKCkgb3IgX19pbmRleF9fKCkKKyAgcmV0dXJuIG5vdCBpbnQgaW5zdGFuY2UuCisKKy0gSXNzdWUgIzE5OTMyOiBGaXggdHlwbyBpbiBpbXBvcnQuaCwgbWlzc2luZyB3aGl0ZXNwYWNlcyBpbiBmdW5jdGlvbiBwcm90b3R5cGVzLgorCistIElzc3VlICMxOTczNjogQWRkIG1vZHVsZS1sZXZlbCBzdGF0dmZzIGNvbnN0YW50cyBkZWZpbmVkIGZvciBHTlUvZ2xpYmMKKyAgYmFzZWQgc3lzdGVtcy4KKworLSBJc3N1ZSAjMjAwOTc6IEZpeCBiYWQgdXNlIG9mICJzZWxmIiBpbiBpbXBvcnRsaWIncyBXaW5kb3dzUmVnaXN0cnlGaW5kZXIuCisKKy0gSXNzdWUgIzE5NzI5OiBJbiBzdHIuZm9ybWF0KCksIGZpeCByZWN1cnNpdmUgZXhwYW5zaW9uIGluIGZvcm1hdCBzcGVjLgorCistIElzc3VlICMxOTYzODogRml4IHBvc3NpYmxlIGNyYXNoIC8gdW5kZWZpbmVkIGJlaGF2aW91ciBmcm9tIGh1Z2UgKG1vcmUgdGhhbiAyCisgIGJpbGxpb24gY2hhcmFjdGVycykgaW5wdXQgc3RyaW5ncyBpbiBfUHlfZGdfc3RydG9kLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIwMTU0OiBEZWFkbG9jayBpbiBhc3luY2lvLlN0cmVhbVJlYWRlci5yZWFkZXhhY3RseSgpLgorCistIElzc3VlICMxNjExMzogUmVtb3ZlIHNoYTMgbW9kdWxlIGFnYWluLgorCistIElzc3VlICMyMDExMTogcGF0aGxpYi5QYXRoLndpdGhfc3VmZml4KCkgbm93IHNhbml0eSBjaGVja3MgdGhlIGdpdmVuIHN1ZmZpeC4KKworLSBGaXggYnJlYWthZ2UgaW4gVGVzdFN1aXRlLmNvdW50VGVzdENhc2VzKCkgaW50cm9kdWNlZCBieSBpc3N1ZSAjMTE3OTguCisKIC0gSXNzdWUgIzIwMTA4OiBBdm9pZCBwYXJhbWV0ZXIgbmFtZSBjbGFzaCBpbiBpbnNwZWN0LmdldGNhbGxhcmdzKCkuCiAKLS0gSXNzdWUgIzEyNjkyOiBCYWNrcG9ydCB0aGUgZml4IGZvciBSZXNvdXJjZVdhcm5pbmcgaW4gdGVzdF91cmxsaWIybmV0LiBUaGlzCi0gIGFsc28gaGVscHMgaW4gY2xvc2luZyB0aGUgc29ja2V0IHdoZW4gQ29ubmVjdGlvbiBDbG9zZSBoZWFkZXIgaXMgbm90IHNlbnQuCistIElzc3VlICMxOTkxODogRml4IFB1cmVQYXRoLnJlbGF0aXZlX3RvKCkgdW5kZXIgV2luZG93cy4KIAogLSBJc3N1ZSAjMTk0MjI6IEV4cGxpY2l0bHkgZGlzYWxsb3cgbm9uLVNPQ0tfU1RSRUFNIHNvY2tldHMgaW4gdGhlIHNzbAogICBtb2R1bGUsIHJhdGhlciB0aGFuIHNpbGVudGx5IGxldCB0aGVtIGVtaXQgY2xlYXIgdGV4dCBkYXRhLgogCi0tIElzc3VlICMxODExNjogZ2V0cGFzcyB3YXMgYWx3YXlzIGdldHRpbmcgYW4gZXJyb3Igd2hlbiB0ZXN0aW5nIC9kZXYvdHR5LAotICBhbmQgdGh1cyB3YXMgYWx3YXlzIGZhbGxpbmcgYmFjayB0byBzdGRpbiwgYW5kIHdvdWxkIHRoZW4gcmFpc2UgYW4gZXhjZXB0aW9uCi0gIGlmIHN0ZGluIGNvdWxkIG5vdCBiZSB1c2VkIChzdWNoIGFzIC9kZXYvbnVsbCkuICBJdCBhbHNvIGxlYWtlZCBhbiBvcGVuIGZpbGUuCi0gIEFsbCBvZiB0aGVzZSBpc3N1ZXMgYXJlIG5vdyBmaXhlZC4KKy0gSXNzdWUgIzIwMDQ2OiBMb2NhbGUgYWxpYXMgdGFibGUgbm8gbG9uZ2VyIGNvbnRhaW5zIGVudGl0aWVzIHdoaWNoIGNhbiBiZQorICBjYWxjdWxhdGVkLiAgR2VuZXJhbGl6ZWQgc3VwcG9ydCBvZiB0aGUgZXVybyBtb2RpZmllci4KIAogLSBJc3N1ZSAjMjAwMjc6IEZpeGVkIGxvY2FsZSBhbGlhc2VzIGZvciBkZXZhbmFnYXJpIGxvY2FsZXMuCiAKQEAgLTI2NCwxNSArNjI2LDM3IEBACiAtIElzc3VlICMxOTAyMDogVGtpbnRlciBub3cgdXNlcyBzcGxpdGxpc3QoKSBpbnN0ZWFkIG9mIHNwbGl0KCkgaW4gY29uZmlndXJlCiAgIG1ldGhvZHMuCiAKLS0gRml4IFR5cGVFcnJvciBvbiAic2V0dXAucHkgdXBsb2FkIC0tc2hvdy1yZXNwb25zZSIuCistIElzc3VlICMxOTc0NDogZW5zdXJlcGlwIG5vdyBwcm92aWRlcyBhIGJldHRlciBlcnJvciBtZXNzYWdlIHdoZW4gUHl0aG9uIGlzCisgIGJ1aWx0IHdpdGhvdXQgU1NML1RMUyBzdXBwb3J0IChwaXAgY3VycmVudGx5IHJlcXVpcmVzIHRoYXQgc3VwcG9ydCB0byBydW4sCisgIGV2ZW4gaWYgb25seSBvcGVyYXRpbmcgd2l0aCBsb2NhbCB3aGVlbCBmaWxlcykKIAotLSBJc3N1ZSAjMTIyMjY6IEhUVFBTIGlzIG5vdyB1c2VkIGJ5IGRlZmF1bHQgd2hlbiBjb25uZWN0aW5nIHRvIFB5UEkuCistIElzc3VlICMxOTczNDogZW5zdXJlcGlwIG5vdyBpZ25vcmVzIGFsbCBwaXAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGF2b2lkCisgIG9kZCBiZWhhdmlvdXIgYmFzZWQgb24gdXNlciBjb25maWd1cmF0aW9uIHNldHRpbmdzCisKKy0gRml4IFR5cGVFcnJvciBvbiAic2V0dXAucHkgdXBsb2FkIC0tc2hvdy1yZXNwb25zZSIuCiAKIC0gSXNzdWUgIzIwMDQ1OiBGaXggInNldHVwLnB5IHJlZ2lzdGVyIC0tbGlzdC1jbGFzc2lmaWVycyIuCiAKIC0gSXNzdWUgIzE4ODc5OiBXaGVuIGEgbWV0aG9kIGlzIGxvb2tlZCB1cCBvbiBhIHRlbXBvcmFyeSBmaWxlLCBhdm9pZCBjbG9zaW5nCiAgIHRoZSBmaWxlIGJlZm9yZSB0aGUgbWV0aG9kIGlzIHBvc3NpYmx5IGNhbGxlZC4KIAorLSBJc3N1ZSAjMjAwMzc6IEF2b2lkIGNyYXNoZXMgd2hlbiBvcGVuaW5nIGEgdGV4dCBmaWxlIGxhdGUgYXQgaW50ZXJwcmV0ZXIKKyAgc2h1dGRvd24uCisKKy0gSXNzdWUgIzE5OTY3OiBUaGFua3MgdG8gdGhlIFBFUCA0NDIsIGFzeW5jaW8uRnV0dXJlIG5vdyB1c2VzIGEKKyAgZGVzdHJ1Y3RvciB0byBsb2cgdW5jYXVnaHQgZXhjZXB0aW9ucywgaW5zdGVhZCBvZiB0aGUgZGVkaWNhdGVkCisgIF9UcmFjZWJhY2tMb2dnZXIgY2xhc3MuCisKKy0gQWRkZWQgYSBUYXNrLmN1cnJlbnRfdGFzaygpIGNsYXNzIG1ldGhvZCB0byBhc3luY2lvLgorCistIElzc3VlICMxOTg1MDogU2V0IFNBX1JFU1RBUlQgaW4gYXN5bmNpbyB3aGVuIHJlZ2lzdGVyaW5nIGEgc2lnbmFsCisgIGhhbmRsZXIgdG8gbGltaXQgRUlOVFIgb2NjdXJyZW5jZXMuCisKKy0gSW1wbGVtZW50ZWQgd3JpdGUgZmxvdyBjb250cm9sIGluIGFzeW5jaW8gZm9yIHByb2FjdG9yIGV2ZW50IGxvb3AgKFdpbmRvd3MpLgorCistIENoYW5nZSB3cml0ZSBidWZmZXIgaW4gYXN5bmNpbyB1c2UgdG8gYXZvaWQgTyhOKioyKSBiZWhhdmlvci4gIE1ha2UKKyAgd3JpdGUoKS9zZW5kdG8oKSBhY2NlcHQgYnl0ZWFycmF5L21lbW9yeXZpZXcuCisKIC0gSXNzdWUgIzIwMDM0OiBVcGRhdGVkIGFsaWFzIG1hcHBpbmcgdG8gbW9zdCByZWNlbnQgbG9jYWxlLmFsaWFzIGZpbGUKICAgZnJvbSBYLm9yZyBkaXN0cmlidXRpb24gdXNpbmcgbWFrZWxvY2FsZWFsaWFzLnB5LgogCkBAIC0yOTIsNiArNjc2LDE5IEBACiAtIElzc3VlICMyMDAwNzogSFRUUFJlc3BvbnNlLnJlYWQoMCkgbm8gbW9yZSBwcmVtYXR1cmVseSBjbG9zZXMgY29ubmVjdGlvbi4KICAgT3JpZ2luYWwgcGF0Y2ggYnkgU2ltb24gU2FwaW4uCiAKKy0gSXNzdWUgIzE5OTQ2OiBtdWx0aXByb2Nlc3Npbmcgbm93IHVzZXMgcnVucHkgdG8gaW5pdGlhbGl6ZSBfX21haW5fXyBpbgorICBjaGlsZCBwcm9jZXNzZXMgd2hlbiBuZWNlc3NhcnksIGFsbG93aW5nIGl0IHRvIGNvcnJlY3RseSBoYW5kbGUgc2NyaXB0cworICB3aXRob3V0IHN1ZmZpeGVzIGFuZCBzdWJtb2R1bGVzIHRoYXQgdXNlIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydHMgb3IKKyAgb3RoZXJ3aXNlIHJlbHkgb24gcGFyZW50IG1vZHVsZXMgYmVpbmcgY29ycmVjdGx5IGltcG9ydGVkIHByaW9yIHRvCisgIGV4ZWN1dGlvbi4KKworLSBJc3N1ZSAjMTk5MjE6IFdoZW4gUGF0aC5ta2RpcigpIGlzIGNhbGxlZCB3aXRoIHBhcmVudHM9VHJ1ZSwgYW55IG1pc3NpbmcKKyAgcGFyZW50IGlzIGNyZWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCBwZXJtaXNzaW9ucywgaWdub3JpbmcgdGhlIG1vZGUgYXJndW1lbnQKKyAgKG1pbWlja2luZyB0aGUgUE9TSVggIm1rZGlyIC1wIiBjb21tYW5kKS4KKworLSBJc3N1ZSAjMTk4ODc6IEltcHJvdmUgdGhlIFBhdGgucmVzb2x2ZSgpIGFsZ29yaXRobSB0byBzdXBwb3J0IGNlcnRhaW4KKyAgc3ltbGluayBjaGFpbnMuCisKIC0gSXNzdWUgIzE5OTEyOiBGaXhlZCBudW1lcm91cyBidWdzIGluIG50cGF0aC5zcGxpdHVuYygpLgogCiAtIElzc3VlICMxOTkxMTogbnRwYXRoLnNwbGl0ZHJpdmUoKSBub3cgY29ycmVjdGx5IHByb2Nlc3NlcyB0aGUgJ8SwJyBjaGFyYWN0ZXIKQEAgLTMwMiw2ICs2OTksOSBAQAogCiAtIElzc3VlICMxOTYyMzogRml4ZWQgd3JpdGluZyB0byB1bnNlZWthYmxlIGZpbGVzIGluIHRoZSBhaWZjIG1vZHVsZS4KIAorLSBJc3N1ZSAjMTk5NDY6IG11bHRpcHJvY2Vzc2luZy5zcGF3biBub3cgcmFpc2VzIEltcG9ydEVycm9yIHdoZW4gdGhlIG1vZHVsZSB0bworICBiZSB1c2VkIGFzIHRoZSBtYWluIG1vZHVsZSBjYW5ub3QgYmUgaW1wb3J0ZWQuCisKIC0gSXNzdWUgIzE3OTE5OiBzZWxlY3QucG9sbC5yZWdpc3RlcigpIGFnYWluIHdvcmtzIHdpdGggcG9sbC5QT0xMTlZBTCBvbiBBSVguCiAgIEZpeGVkIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGV2ZW50bWFzayBwYXJhbWV0ZXIuCiAKQEAgLTMwOSwxMSArNzA5LDE2IEBACiAgIHBhY2thZ2Ugd291bGQgZ2VuZXJhdGUgYSBtZXNzYWdlIGNsYWltaW5nIHRoZSBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nCiAgIHdhcyA3Yml0LCBhbmQgcHJvZHVjZSBnYXJiYWdlIG91dHB1dCBmb3IgdGhlIGNvbnRlbnQuICBUaGlzIG5vdyB3b3Jrcy4KICAgQSBjb3VwbGUgb2Ygb3RoZXIgc2V0X3BheWxvYWQgbWlzaGFuZGxpbmdzIG9mIG5vbi1BU0NJSSBhcmUgYWxzbyBmaXhlZC4KKyAgSW4gYWRkaXRpb24sIGNhbGxpbmcgc2V0X3BheWxvYWQgd2l0aCBhIHN0cmluZyBhcmd1bWVudCB3aXRob3V0CisgIHNwZWNpZnlpbmcgYSBjaGFyc2V0IG5vdyByYWlzZXMgYW4gZXJyb3IgKHRoaXMgaXMgYSBuZXcgZXJyb3IgaW4gMy40KS4KIAotLSBJc3N1ZSAjMTcyMDA6IHRlbG5ldGxpYidzIHJlYWRfdW50aWwgYW5kIGV4cGVjdCB0aW1lb3V0IHdhcyBicm9rZW4gYnkgdGhlCi0gIGZpeCB0byBJc3N1ZSAjMTQ2MzUgaW4gUHl0aG9uIDMuMy4wIHRvIGJlIGludGVycHJldGVkIGFzIG1pbGxpc2Vjb25kcwotICBpbnN0ZWFkIG9mIHNlY29uZHMgd2hlbiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgc2VsZWN0LnBvbGwgKGllOiBldmVyeXdoZXJlKS4KLSAgSXQgaXMgbm93IHRyZWF0ZWQgYXMgc2Vjb25kcyBvbmNlIGFnYWluLgorLSBJc3N1ZSAjMTU0NzU6IEFkZCBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9ucyBmb3IgaXRlcnRvb2xzIG9iamVjdHMuCisKKy0gSXNzdWUgIzE5OTQ0OiBGaXggaW1wb3J0bGliLmZpbmRfc3BlYygpIHNvIGl0IGltcG9ydHMgcGFyZW50cyBhcyBuZWVkZWQKKyAgYW5kIG1vdmUgdGhlIGZ1bmN0aW9uIHRvIGltcG9ydGxpYi51dGlsLgorCistIElzc3VlICMxOTg4MDogRml4IGEgcmVmZXJlbmNlIGxlYWsgaW4gdW5pdHRlc3QuVGVzdENhc2UuIEV4cGxpY2l0bHkgYnJlYWsKKyAgcmVmZXJlbmNlIGN5Y2xlcyBiZXR3ZWVuIGZyYW1lcyBhbmQgdGhlIF9PdXRjb21lIGluc3RhbmNlLgogCiAtIElzc3VlICMxNzQyOTogcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uKCkgbm93IGRlY29kZXMgZmlsZXMgZnJvbSB0aGUgVVRGLTgKICAgZW5jb2Rpbmcgd2l0aCB0aGUgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIsIGluc3RlYWQgb2YgZGVjb2RpbmcgZnJvbSB0aGUKQEAgLTMyMSw2ICs3MjYsOSBAQAogICBwcm9iYWJseSB0aGUgZmlyc3QgbWFqb3IgZGlzdHJpYnV0aW9uIHJlbGVhc2Ugd2l0aCBhIG5vbi1BU0NJSSBuYW1lLiBQYXRjaAogICB3cml0dGVuIGJ5IFRvc2hpbyBLdXJhdG9taS4KIAorLSBJc3N1ZSAjMTkzNDM6IEV4cG9zZSBGcmVlQlNELXNwZWNpZmljIEFQSXMgaW4gcmVzb3VyY2UgbW9kdWxlLiAgT3JpZ2luYWwKKyAgcGF0Y2ggYnkgS29vYnMuCisKIC0gSXNzdWUgIzE5OTI5OiBDYWxsIG9zLnJlYWQgd2l0aCAzMjc2OCB3aXRoaW4gc3VicHJvY2Vzcy5Qb3Blbi5jb21tdW5pY2F0ZQogICByYXRoZXIgdGhhbiA0MDk2IGZvciBlZmZpY2llbmN5LiAgQSBtaWNyb2JlbmNobWFyayBzaG93cyBMaW51eCBhbmQgT1MgWAogICBib3RoIHVzaW5nIH41MCUgbGVzcyBjcHUgdGltZSB0aGlzIHdheS4KQEAgLTMyOCwyMSArNzM2LDczIEBACiAtIElzc3VlICMxOTUwNjogVXNlIGEgbWVtb3J5dmlldyB0byBhdm9pZCBhIGRhdGEgY29weSB3aGVuIHBpcGluZyBkYXRhCiAgIHRvIHN0ZGluIHdpdGhpbiBzdWJwcm9jZXNzLlBvcGVuLmNvbW11bmljYXRlLiAgNS0xMCUgbGVzcyBjcHUgdXNhZ2UuCiAKKy0gSXNzdWUgIzE5ODc2OiBzZWxlY3RvcnMgdW5yZWdpc3RlcigpIG5vIGxvbmdlciByYWlzZXMgVmFsdWVFcnJvciBvciBPU0Vycm9yCisgIGlmIHRoZSBGRCBpcyBjbG9zZWQgKGFzIGxvbmcgYXMgaXQgd2FzIHJlZ2lzdGVyZWQpLgorCistIElzc3VlICMxOTkwODogcGF0aGxpYiBub3cgam9pbnMgcmVsYXRpdmUgV2luZG93cyBwYXRocyBjb3JyZWN0bHkgd2hlbiBhIGRyaXZlCisgIGlzIHByZXNlbnQuICBPcmlnaW5hbCBwYXRjaCBieSBBbnRvaW5lIFBpdHJvdS4KKworLSBJc3N1ZSAjMTkyOTY6IFNpbGVuY2UgY29tcGlsZXIgd2FybmluZyBpbiBkYm1fb3BlbgorCistIElzc3VlICM2Nzg0OiBTdHJpbmdzIGZyb20gUHl0aG9uIDIgY2FuIG5vdyBiZSB1bnBpY2tsZWQgYXMgYnl0ZXMKKyAgb2JqZWN0cyBieSBzZXR0aW5nIHRoZSBlbmNvZGluZyBhcmd1bWVudCBvZiBVbnBpY2tsZXIgdG8gYmUgJ2J5dGVzJy4KKyAgSW5pdGlhbCBwYXRjaCBieSBNZXJsaWpuIHZhbiBEZWVuLgorCiAtIElzc3VlICMxOTgzOTogRml4IHJlZ3Jlc3Npb24gaW4gYnoyIG1vZHVsZSdzIGhhbmRsaW5nIG9mIG5vbi1iemlwMiBkYXRhIGF0CiAgIEVPRiwgYW5kIGFuYWxvZ291cyBidWcgaW4gbHptYSBtb2R1bGUuCiAKKy0gSXNzdWUgIzE5ODgxOiBGaXggcGlja2xpbmcgYnVnIHdoZXJlIGNwaWNrbGUgd291bGQgZW1pdCBiYWQgcGlja2xlIGRhdGEgZm9yCisgIGxhcmdlIGJ5dGVzIHN0cmluZyAoaS5lLiwgd2l0aCBzaXplIGdyZWF0ZXIgdGhhbiAyKiozMi0xKS4KKwogLSBJc3N1ZSAjMTkxMzg6IGRvY3Rlc3QncyBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTCBub3cgYWxsb3dzIGEgbWF0Y2ggd2hlbgogICBubyBleGNlcHRpb24gZGV0YWlsIGV4aXN0cyAobm8gY29sb24gZm9sbG93aW5nIHRoZSBleGNlcHRpb24ncyBuYW1lLCBvcgogICBhIGNvbG9uIGRvZXMgZm9sbG93IGJ1dCBubyB0ZXh0IGZvbGxvd3MgdGhlIGNvbG9uKS4KIAorLSBJc3N1ZSAjMTk5Mjc6IEFkZCBfX2VxX18gdG8gcGF0aC1iYXNlZCBsb2FkZXJzIGluIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTk4Mjc6IE9uIFVOSVgsIHNldGJsb2NraW5nKCkgYW5kIHNldHRpbWVvdXQoKSBtZXRob2RzIG9mCisgIHNvY2tldC5zb2NrZXQgY2FuIG5vdyBhdm9pZCBhIHNlY29uZCBzeXNjYWxsIGlmIHRoZSBpb2N0bCgpIGZ1bmN0aW9uIGNhbiBiZQorICB1c2VkLCBvciBpZiB0aGUgbm9uLWJsb2NraW5nIGZsYWcgb2YgdGhlIHNvY2tldCBpcyB1bmNoYW5nZWQuCisKKy0gSXNzdWUgIzE5Nzg1OiBzbXRwbGliIG5vdyBzdXBwb3J0cyBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZXJ2ZXIgbmFtZQorICBpbmRpY2F0aW9uIGZvciBUTFMvU1NMIGNvbm5lY3Rpb25zLgorCistIElzc3VlICMxOTc4NDogcG9wbGliIG5vdyBzdXBwb3J0cyBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZXJ2ZXIgbmFtZQorICBpbmRpY2F0aW9uIGZvciBUTFMvU1NMIGNvbm5lY3Rpb25zLgorCistIElzc3VlICMxOTc4Mzogbm50cGxpYiBub3cgc3VwcG9ydHMgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZSBhbmQgc2VydmVyIG5hbWUKKyAgaW5kaWNhdGlvbiBmb3IgVExTL1NTTCBjb25uZWN0aW9ucy4KKworLSBJc3N1ZSAjMTk3ODI6IGltYXBsaWIgbm93IHN1cHBvcnRzIFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIHNlcnZlciBuYW1lCisgIGluZGljYXRpb24gZm9yIFRMUy9TU0wgY29ubmVjdGlvbnMuCisKKy0gSXNzdWUgMjAxMjM6IEZpeCBweWRvYy5zeW5vcHNpcygpIGZvciAiYmluYXJ5IiBtb2R1bGVzLgorCiAtIElzc3VlICMxOTgzNDogU3VwcG9ydCB1bnBpY2tsaW5nIG9mIGV4Y2VwdGlvbnMgcGlja2xlZCBieSBQeXRob24gMi4KIAorLSBJc3N1ZSAjMTk3ODE6IGZ0cGxpYiBub3cgc3VwcG9ydHMgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZSBhbmQgc2VydmVyIG5hbWUKKyAgaW5kaWNhdGlvbiBmb3IgVExTL1NTTCBjb25uZWN0aW9ucy4KKworLSBJc3N1ZSAjMTk1MDk6IEFkZCBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIHRvIG1hdGNoIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUKKyAgd2l0aCBzZXJ2ZXJfaG9zdG5hbWUgb24gaGFuZHNoYWtlLgorCiAtIElzc3VlICMxNTc5ODogRml4ZWQgc3VicHJvY2Vzcy5Qb3BlbigpIHRvIG5vIGxvbmdlciBmYWlsIGlmIGZpbGUKICAgZGVzY3JpcHRvciAwLCAxIG9yIDIgaXMgY2xvc2VkLgogCistIElzc3VlICMxNzg5NzogT3B0aW1pemVkIHVucGlja2xlIHByZWZldGNoaW5nLgorCistIElzc3VlICMzNjkzOiBNYWtlIHRoZSBlcnJvciBtZXNzYWdlIG1vcmUgaGVscGZ1bCB3aGVuIHRoZSBhcnJheS5hcnJheSgpCisgIGNvbnN0cnVjdG9yIGlzIGdpdmVuIGEgc3RyLiBNb3ZlIHRoZSBhcnJheSBtb2R1bGUgdHlwZWNvZGUgZG9jdW1lbnRhdGlvbiB0bworICB0aGUgZG9jc3RyaW5nIG9mIHRoZSBjb25zdHJ1Y3Rvci4KKwogLSBJc3N1ZSAjMTkwODg6IEZpeGVkIGluY29ycmVjdCBjYWNoaW5nIG9mIHRoZSBjb3B5cmVnIG1vZHVsZSBpbgogICBvYmplY3QuX19yZWR1Y2VfXygpIGFuZCBvYmplY3QuX19yZWR1Y2VfZXhfXygpLgogCistIElzc3VlICMxOTY5ODogUmVtb3ZlZCBleGVjX21vZHVsZSgpIG1ldGhvZHMgZnJvbQorICBpbXBvcnRsaWIubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciBhbmQgRXh0ZW5zaW9uRmlsZUxvYWRlci4KKworLSBJc3N1ZSAjMTg4NjQ6IEFkZGVkIGEgc2V0dGVyIGZvciBNb2R1bGVTcGVjLmhhc19sb2NhdGlvbi4KKwogLSBGaXhlZCBfcGlja2xlLlVucGlja2xlciB0byBub3QgZmFpbCB3aGVuIGxvYWRpbmcgZW1wdHkgc3RyaW5ncyBhcwogICBwZXJzaXN0ZW50IElEcy4KIApAQCAtMzUyLDYgKzgxMiwxOSBAQAogLSBJc3N1ZSAjNjQ3NzogQWRkZWQgc3VwcG9ydCBmb3IgcGlja2xpbmcgdGhlIHR5cGVzIG9mIGJ1aWx0LWluIHNpbmdsZXRvbnMKICAgKGkuZS4sIEVsbGlwc2lzLCBOb3RJbXBsZW1lbnRlZCwgTm9uZSkuCiAKKy0gSXNzdWUgIzE5NzEzOiBBZGQgcmVtYWluaW5nIFBFUCA0NTEtcmVsYXRlZCBkZXByZWNhdGlvbnMgYW5kIG1vdmUgYXdheQorICBmcm9tIHVzaW5nIGZpbmRfbW9kdWxlL2ZpbmRfbG9hZXIvbG9hZF9tb2R1bGUuCisKKy0gSXNzdWUgIzE5NzA4OiBVcGRhdGUgcGtndXRpbCB0byB1c2UgdGhlIG5ldyBpbXBvcnRlciBBUElzLgorCistIElzc3VlICMxOTcwMzogVXBkYXRlIHB5ZG9jIHRvIHVzZSB0aGUgbmV3IGltcG9ydGVyIEFQSXMuCisKKy0gSXNzdWUgIzE5ODUxOiBGaXhlZCBhIHJlZ3Jlc3Npb24gaW4gcmVsb2FkaW5nIHN1Yi1tb2R1bGVzLgorCistIHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkgc2V0cyBPUF9OT19DT01QUkVTU0lPTiB0byBwcmV2ZW50IENSSU1FLgorCistIElzc3VlICMxOTgwMjogQWRkIHNvY2tldC5TT19QUklPUklUWS4KKwogLSBJc3N1ZSAjMTE1MDg6IEZpeGVkIHV1aWQuZ2V0bm9kZSgpIGFuZCB1dWlkLnV1aWQxKCkgb24gZW52aXJvbm1lbnQgd2l0aAogICB2aXJ0dWFsIGludGVyZmFjZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEtlbnQgRnJhemllci4KIApAQCAtMzYwLDU2ICs4MzMsOSBAQAogLSBJc3N1ZSAjMTk1NDU6IEF2b2lkIGNoYWluZWQgZXhjZXB0aW9ucyB3aGlsZSBwYXNzaW5nIHN0cmF5ICUgdG8KICAgdGltZS5zdHJwdGltZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCiAKLS0gSXNzdWUgIzE5NjMzOiBGaXhlZCB3cml0aW5nIG5vdCBjb21wcmVzc2VkIDE2LSBhbmQgMzItYml0IHdhdmUgZmlsZXMgb24KLSAgYmlnLWVuZGlhbiBwbGF0Zm9ybXMuCi0KLS0gSXNzdWUgIzE5NDQ5OiBpbiBjc3YncyB3cml0ZXJvdywgaGFuZGxlIG5vbi1zdHJpbmcga2V5cyB3aGVuIGdlbmVyYXRpbmcgdGhlCi0gIGVycm9yIG1lc3NhZ2UgdGhhdCBjZXJ0YWluIGtleXMgYXJlIG5vdCBpbiB0aGUgJ2ZpZWxkbmFtZXMnIGxpc3QuCi0KLS0gRml4IHRlc3Quc3VwcG9ydC5iaW5kX3BvcnQoKSB0byBub3QgY2F1c2UgYW4gZXJyb3Igd2hlbiBQeXRob24gd2FzIGNvbXBpbGVkCi0gIG9uIGEgc3lzdGVtIHdpdGggU09fUkVVU0VQT1JUIGRlZmluZWQgaW4gdGhlIGhlYWRlcnMgYnV0IHJ1biBvbiBhIHN5c3RlbQotICB3aXRoIGFuIE9TIGtlcm5lbCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhhdCByZWFzb25hYmx5IG5ldyBzb2NrZXQgb3B0aW9uLgotCi0tIEZpeCBjb21waWxhdGlvbiBlcnJvciB1bmRlciBnY2Mgb2YgdGhlIGN0eXBlcyBtb2R1bGUgYnVuZGxlZCBsaWJmZmkgZm9yIGFybS4KLQotLSBJc3N1ZSAjMTk1MjM6IENsb3NlZCBGaWxlSGFuZGxlciBsZWFrIHdoaWNoIG9jY3VycmVkIHdoZW4gZGVsYXkgd2FzIHNldC4KLQotLSBJc3N1ZSAjMTM2NzQ6IFByZXZlbnRlZCB0aW1lLnN0cmZ0aW1lIGZyb20gY3Jhc2hpbmcgb24gV2luZG93cyB3aGVuIGdpdmVuCi0gIGEgeWVhciBiZWZvcmUgMTkwMCBhbmQgYSBmb3JtYXQgb2YgJXkuCi0KLS0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjNjI4NjogUmVzdG9yZSB1c2Ugb2YgdXJsbGliIG92ZXIgaHR0cCBhbGxvd2luZyB1c2UKLSAgb2YgaHR0cF9wcm94eSBmb3IgRGlzdHV0aWxzIHVwbG9hZCBjb21tYW5kLCBhIGZlYXR1cmUgYWNjaWRlbnRhbGx5IGxvc3QKLSAgaW4gdGhlIHJvbGxiYWNrIG9mIGRpc3R1dGlsczIuCi0KLS0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjNzQ1NzogUmVzdG9yZSB0aGUgcmVhZF9wa2dfZmlsZSBtZXRob2QgdG8KLSAgZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uTWV0YWRhdGEgYWNjaWRlbnRhbGx5IHJlbW92ZWQgaW4gdGhlIHVuZG8gb2YKLSAgZGlzdHV0aWxzMi4KLQotLSBJc3N1ZSAjMTU3NTAyMDogRml4ZWQgc3VwcG9ydCBvZiAyNC1iaXQgd2F2ZSBmaWxlcyBvbiBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjMTk0ODA6IEhUTUxQYXJzZXIgbm93IGFjY2VwdHMgYWxsIHZhbGlkIHN0YXJ0LXRhZyBuYW1lcyBhcyBkZWZpbmVkCi0gIGJ5IHRoZSBIVE1MNSBzdGFuZGFyZC4KLQotLSBJc3N1ZSAjNjE1NzogRml4ZWQgdGtpbnRlci5UZXh0LmRlYnVnKCkuICBPcmlnaW5hbCBwYXRjaCBieSBHdWlsaGVybWUgUG9sby4KLQotLSBJc3N1ZSAjNjE2MDogVGhlIGJib3goKSBtZXRob2Qgb2YgdGtpbnRlci5TcGluYm94IG5vdyByZXR1cm5zIGEgdHVwbGUgb2YKLSAgaW50ZWdlcnMgaW5zdGVhZCBvZiBhIHN0cmluZy4gIEJhc2VkIG9uIHBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgotCi0tIElzc3VlICMxMDE5NzogUmV3b3JrIHN1YnByb2Nlc3MuZ2V0W3N0YXR1c11vdXRwdXQgdG8gdXNlIHN1YnByb2Nlc3MKLSAgZnVuY3Rpb25hbGl0eSBhbmQgdGh1cyB0byB3b3JrIG9uIFdpbmRvd3MuIFBhdGNoIGJ5IE5pY2sgQ29naGxhbi4KLQotLSBJc3N1ZSAjMTkyODY6IERpcmVjdG9yaWVzIGluIGBgcGFja2FnZV9kYXRhYGAgYXJlIG5vIGxvbmdlciBhZGRlZCB0bwotICB0aGUgZmlsZWxpc3QsIHByZXZlbnRpbmcgZmFpbHVyZSBvdXRsaW5lZCBpbiB0aGUgdGlja2V0LgotCiBJRExFCiAtLS0tCiAKLS0gSXNzdWUgIzE3MzkwOiBBZGQgUHl0aG9uIHZlcnNpb24gdG8gSWRsZSBlZGl0b3Igd2luZG93IHRpdGxlIGJhci4KLSAgT3JpZ2luYWwgcGF0Y2hlcyBieSBFZG1vbmQgQnVybmV0dCBhbmQgS2VudCBKb2huc29uLgotCi0tIElzc3VlICMxODk2MDogSURMRSBub3cgaWdub3JlcyB0aGUgc291cmNlIGVuY29kaW5nIGRlY2xhcmF0aW9uIG9uIHRoZSBzZWNvbmQKLSAgbGluZSBpZiB0aGUgZmlyc3QgbGluZSBjb250YWlucyBhbnl0aGluZyBleGNlcHQgYSBjb21tZW50LgotCiAtIElzc3VlICMyMDA1ODogc3lzLnN0ZGluLnJlYWRsaW5lKCkgaW4gSURMRSBub3cgYWx3YXlzIHJldHVybnMgb25seSBvbmUgbGluZS4KIAogLSBJc3N1ZSAjMTk0ODE6IHByaW50KCkgb2Ygc3RyaW5nIHN1YmNsYXNzIGluc3RhbmNlIGluIElETEUgbm8gbG9uZ2VyIGhhbmdzLgpAQCAtNDIwLDIxICs4NDYsMTcgQEAKIFRlc3RzCiAtLS0tLQogCi0tIElzc3VlICMxOTgwNDogVGhlIHRlc3RfZmluZF9tYWMgdGVzdCBpbiB0ZXN0X3V1aWQgaXMgbm93IHNraXBwZWQgaWYgdGhlCi0gIGlmY29uZmlnIGV4ZWN1dGFibGUgaXMgbm90IGF2YWlsYWJsZS4KLQotLSBJc3N1ZSAjMTk4ODY6IFVzZSBiZXR0ZXIgZXN0aW1hdGVkIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGJpZ21lbSB0ZXN0cy4KLQogLSBJc3N1ZSAjMjAwNTU6IEZpeCB0ZXN0X3NodXRpbCB1bmRlciBXaW5kb3dzIHdpdGggc3ltbGluayBwcml2aWxlZ2VzIGhlbGQuCiAgIFBhdGNoIGJ5IFZhanJhc2t5IEtvay4KIAorLSBJc3N1ZSAjMjAwNzA6IERvbid0IHJ1biB0ZXN0X3VybGxpYjJuZXQgd2hlbiBuZXR3b3JrIHJlc291cmNlcyBhcmUgbm90CisgIGVuYWJsZWQuCisKIC0gSXNzdWUgIzE5OTM4OiBSZS1lbmFibGVkIHRlc3RfYnVnXzEzMzM5ODIgaW4gdGVzdF9kaXMsIHdoaWNoIGhhZCBiZWVuCiAgIGRpc2FibGVkIHNpbmNlIDMuMCBkdWUgdG8gdGhlIGNoYW5nZXMgaW4gbGlzdGNvbXAgaGFuZGxpbmcuCiAKIC0gSXNzdWUgIzE5MzIwOiB0ZXN0X3RjbCBubyBsb25nZXIgZmFpbHMgd2hlbiB3YW50b2JqZWN0cyBpcyBmYWxzZS4KIAotLSBJc3N1ZSAjMTk2ODM6IFJlbW92ZWQgZW1wdHkgdGVzdHMgZnJvbSB0ZXN0X21pbmlkb20uICBQYXRjaCBieSBBaml0ZXNoIEd1cHRhLgotCiAtIElzc3VlICMxOTkxOTogRml4IGZsYWt5IFNTTCB0ZXN0LiBjb25uZWN0X2V4KCkgc29tZXRpbWVzIHJldHVybnMKICAgRVdPVUxEQkxPQ0sgb24gV2luZG93cyBvciBWTXMgaG9zdGVkIG9uIFdpbmRvd3MuCiAKQEAgLTQ0NCwyNiArODY2LDM1IEBACiAKIC0gSXNzdWUgIzE5OTI4OiBJbXBsZW1lbnRlZCBhIHRlc3QgZm9yIHJlcHIoKSBvZiBjZWxsIG9iamVjdHMuCiAKLS0gSXNzdWUgIzE5NTM1OiBGaXhlZCB0ZXN0X2RvY3htbHJwYyB3aGVuIHB5dGhvbiBpcyBydW4gd2l0aCAtT08uCistIElzc3VlICMxOTUzNTogRml4ZWQgdGVzdF9kb2N4bWxycGMsIHRlc3RfZnVuY3Rvb2xzLCB0ZXN0X2luc3BlY3QsIGFuZAorICB0ZXN0X3N0YXRpc3RpY3Mgd2hlbiBweXRob24gaXMgcnVuIHdpdGggLU9PLgogCiAtIElzc3VlICMxOTkyNjogUmVtb3ZlZCB1bm5lZWRlZCB0ZXN0X21haW4gZnJvbSB0ZXN0X2Fic3RyYWN0X251bWJlcnMuCiAgIFBhdGNoIGJ5IFZhanJhc2t5IEtvay4KIAorLSBJc3N1ZSAjMTk1NzI6IE1vcmUgc2tpcHBlZCB0ZXN0cyBleHBsaWNpdGx5IG1hcmtlZCBhcyBza2lwcGVkLgorCiAtIElzc3VlICMxOTU5NSwgIzE5OTg3OiBSZS1lbmFibGVkIGEgbG9uZy1kaXNhYmxlZCB0ZXN0IGluIHRlc3Rfd2luc291bmQuCiAKIC0gSXNzdWUgIzE5NTg4OiBGaXhlZCB0ZXN0cyBpbiB0ZXN0X3JhbmRvbSB0aGF0IHdlcmUgc2lsZW50bHkgc2tpcHBlZCBtb3N0CiAgIG9mIHRoZSB0aW1lLiAgUGF0Y2ggYnkgSnVsaWFuIEdpbmRpLgogCi0tIElzc3VlICMxOTU5NjogU2V0IHVudGVzdGFibGUgdGVzdHMgaW4gdGVzdF9pbXBvcnRsaWIgdG8gTm9uZSB0byBhdm9pZAotICByZXBvcnRpbmcgc3VjY2VzcyBvbiBlbXB0eSB0ZXN0cy4KK0J1aWxkCistLS0tLQogCi0tIElzc3VlICMxOTQ0MDogQ2xlYW4gdXAgdGVzdF9jYXBpIGJ5IHJlbW92aW5nIGFuIHVubmVjZXNzYXJ5IF9fZnV0dXJlX18KLSAgaW1wb3J0LCBjb252ZXJ0aW5nIGZyb20gdGVzdF9tYWluIHRvIHVuaXR0ZXN0Lm1haW4sIGFuZCBydW5uaW5nIHRoZQotICBfdGVzdGNhcGkgbW9kdWxlIHRlc3RzIHdpdGhpbiBhIHVuaXR0ZXN0IFRlc3RDYXNlLgorLSBJc3N1ZSAjMTk3Mjg6IEVuYWJsZSBwaXAgaW5zdGFsbGF0aW9uIGJ5IGRlZmF1bHQgb24gV2luZG93cy4KIAotLSBJc3N1ZSAjMTg3MDIsIDE5NTcyOiBBbGwgc2tpcHBlZCB0ZXN0cyBub3cgcmVwb3J0ZWQgYXMgc2tpcHBlZC4KKy0gSXNzdWUgIzE2MTM2OiBSZW1vdmUgVk1TIHN1cHBvcnQKIAotLSBJc3N1ZSAjMTkwODU6IEFkZGVkIGJhc2ljIHRlc3RzIGZvciBhbGwgdGtpbnRlciB3aWRnZXQgb3B0aW9ucy4KKy0gSXNzdWUgIzE4MjE1OiBBZGQgc2NyaXB0IFRvb2xzL3NzbC90ZXN0X211bHRpcGxlX3ZlcnNpb25zLnB5IHRvIGNvbXBpbGUgYW5kCisgIHJ1biBQeXRob24ncyB1bml0IHRlc3RzIHdpdGggbXVsdGlwbGUgdmVyc2lvbnMgb2YgT3BlblNTTC4KKworLSBJc3N1ZSAjMTk5MjI6IGRlZmluZSBfSU5DTFVERV9fU1REQ19BMV9TT1VSQ0UgaW4gSFAtVVggdG8gaW5jbHVkZSBtYnN0YXRlX3QKKyAgZm9yIG1icnRvd2MoKS4KKworLSBJc3N1ZSAjMTk3ODg6IGtpbGxfcHl0aG9uKF9kKS5leGUgaXMgbm93IHJ1biBhcyBhIFByZUJ1aWxkRXZlbnQgb24gdGhlCisgIHB5dGhvbmNvcmUgc3ViLXByb2plY3QuICBUaGlzIHNob3VsZCBwcmV2ZW50IGJ1aWxkIGVycm9ycyBkdWUgYSBwcmV2aW91cworICBidWlsZCdzIHB5dGhvbihfZCkuZXhlIHN0aWxsIHJ1bm5pbmcuCiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KQEAgLTQ3Nyw5ICs5MDgsNiBAQAogLSBJc3N1ZSAjMjAyNTM6IEZpeGVkIGEgdHlwbyBpbiB0aGUgaXBhZGRyZXNzIGRvY3MgdGhhdCBhZHZlcnRpc2VkIGFuCiAgIGlsbGVnYWwgYXR0cmlidXRlIG5hbWUuICBGb3VuZCBieSBJTkFEQSBOYW9raS4KIAotLSBJc3N1ZSAjMTk5NjM6IERvY3VtZW50IHRoYXQgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKSBubyBsb25nZXIgcmVxdWlyZXMKLSAgaW1wb3J0aW5nIHBhcmVudCBwYWNrYWdlcyBzZXBhcmF0ZWx5LgotCiAtIElzc3VlICMxODg0MDogSW50cm9kdWNlIHRoZSBqc29uIG1vZHVsZSBpbiB0aGUgdHV0b3JpYWwsIGFuZCBkZS1lbXBoYXNpemUKICAgdGhlIHBpY2tsZSBtb2R1bGUuCiAKQEAgLTQ4NywxNDkgKzkxNSwyOTMgQEAKIAogLSBJc3N1ZSAjMTk3OTU6IEltcHJvdmVkIG1hcmt1cCBvZiBUcnVlL0ZhbHNlIGNvbnN0YW50cy4KIAotLSBJc3N1ZSAjMTgzMjY6IENsYXJpZnkgdGhhdCBsaXN0LnNvcnQncyBhcmd1bWVudHMgYXJlIGtleXdvcmQtb25seS4gIEFsc28sCi0gIGF0dGVtcHQgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpbiB0aGUgZ2xvc3NhcnkgYnkgbm90IHNheWluZyB0aGVyZSBhcmUKLSAgZGlmZmVyZW50ICJ0eXBlcyIgb2YgYXJndW1lbnRzIGFuZCBwYXJhbWV0ZXJzLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTk3ODg6IGtpbGxfcHl0aG9uKF9kKS5leGUgaXMgbm93IHJ1biBhcyBhIFByZUJ1aWxkRXZlbnQgb24gdGhlCi0gIHB5dGhvbmNvcmUgc3ViLXByb2plY3QuICBUaGlzIHNob3VsZCBwcmV2ZW50IGJ1aWxkIGVycm9ycyBkdWUgYSBwcmV2aW91cwotICBidWlsZCdzIHB5dGhvbihfZCkuZXhlIHN0aWxsIHJ1bm5pbmcuCi0KLS0gQWRkIHdvcmthcm91bmQgZm9yIFZTIDIwMTAgbm1ha2UgY2xlYW4gaXNzdWUuIFZTIDIwMTAgZG9lc24ndCBzZXQgdXAgUEFUSAotICBmb3Igbm1ha2UuZXhlIGNvcnJlY3RseS4KLQogVG9vbHMvRGVtb3MKIC0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzE5OTM2OiBBZGRlZCBleGVjdXRhYmxlIGJpdHMgb3Igc2hlYmFuZyBsaW5lcyB0byBQeXRob24gc2NyaXB0cyB3aGljaAotICByZXF1aXJlcyB0aGVtLiAgRGlzYWJsZSBleGVjdXRhYmxlIGJpdHMgYW5kIHNoZWJhbmcgbGluZXMgaW4gdGVzdCBhbmQKLSAgYmVuY2htYXJrIGZpbGVzIGluIG9yZGVyIHRvIHByZXZlbnQgdXNpbmcgYSByYW5kb20gc3lzdGVtIHB5dGhvbiwgYW5kIGluCi0gIHNvdXJjZSBmaWxlcyBvZiBtb2R1bGVzIHdoaWNoIGRvbid0IHByb3ZpZGUgY29tbWFuZCBsaW5lIGludGVyZmFjZS4gIEZpeGVkCi0gIHNoZWJhbmcgbGluZSB0byB1c2UgcHl0aG9uMyBleGVjdXRhYmxlIGluIHRoZSB1bml0dGVzdGd1aSBzY3JpcHQuCistIElzc3VlICMxOTY1OTogQWRkZWQgZG9jdW1lbnRhdGlvbiBmb3IgQXJndW1lbnQgQ2xpbmljLgogCi0tIElzc3VlICMxODk2MDogMnRvMyBhbmQgdGhlIGZpbmRub2NvZGluZy5weSBzY3JpcHQgbm93IGlnbm9yZSB0aGUgc291cmNlCi0gIGVuY29kaW5nIGRlY2xhcmF0aW9uIG9uIHRoZSBzZWNvbmQgbGluZSBpZiB0aGUgZmlyc3QgbGluZSBjb250YWlucyBhbnl0aGluZwotICBleGNlcHQgYSBjb21tZW50LgorLSBJc3N1ZSAjMTk5NzY6IEFyZ3VtZW50IENsaW5pYyBNRVRIX05PQVJHUyBmdW5jdGlvbnMgbm93IGFsd2F5cworICB0YWtlIHR3byBwYXJhbWV0ZXJzLgogCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBCZXRhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4zPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDE3LU5vdi0yMDEzKgotCi1ObyBjaGFuZ2VzIGZyb20gcmVsZWFzZSBjYW5kaWRhdGUgMi4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMyByZWxlYXNlIGNhbmRpZGF0ZSAyPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMTEtTm92LTIwMTMqCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTkyMjc6IEFueSByZS1zZWVkaW5nIG9mIHRoZSBPcGVuU1NMIFJORyBvbiBmb3JrIGhhcyBiZWVuIHJlbW92ZWQ7Ci0gIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgT3BlblNTTCBpdHNlbGYgb3IgYnkgdGhlIGFwcGxpY2F0aW9uLgotCi0tIElzc3VlICMxOTQzNTogRml4IGRpcmVjdG9yeSB0cmF2ZXJzYWwgYXR0YWNrIG9uIENHSUh0dHBSZXF1ZXN0SGFuZGxlci4KLQotVGVzdHMKLS0tLS0tCi0KLS0gSXNzdWUgIzE4OTY0OiBGaXggdGVzdF90Y2wgd2hlbiBydW4gd2l0aCBUY2wvVGsgdmVyc2lvbnMgIDwgOC41LgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTU2NjM6IFJldmVydCBPUyBYIGluc3RhbGxlciBidWlsdC1pbiBUY2wvVGsgc3VwcG9ydCBmb3IgMy4zLjMuCi0gIFNvbWUgdGhpcmQtcGFydHkgcHJvamVjdHMsIHN1Y2ggYXMgTWF0cGxvdGxpYiBhbmQgUElML1BpbGxvdywKLSAgZGVwZW5kZWQgb24gYmVpbmcgYWJsZSB0byBidWlsZCB3aXRoIFRjbCBhbmQgVGsgZnJhbWV3b3JrcyBpbgotICAvTGlicmFyeS9GcmFtZXdvcmtzLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4zIHJlbGVhc2UgY2FuZGlkYXRlIDE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAyNy1PY3QtMjAxMyoKK1JlbGVhc2UgZGF0ZTogMjAxMy0xMS0yNAogCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBVc2UgdGhlIHJlcHIgb2YgYSBtb2R1bGUgbmFtZSBpbiBtb3JlIHBsYWNlcyBpbiBpbXBvcnQsIGVzcGVjaWFsbHkKKyAgZXhjZXB0aW9ucy4KKworLSBJc3N1ZSAjMTk2MTk6IHN0ci5lbmNvZGUsIGJ5dGVzLmRlY29kZSBhbmQgYnl0ZWFycmF5LmRlY29kZSBub3cgdXNlIGFuCisgIGludGVybmFsIEFQSSB0byB0aHJvdyBMb29rdXBFcnJvciBmb3Iga25vd24gbm9uLXRleHQgZW5jb2RpbmdzLCByYXRoZXIKKyAgdGhhbiBhdHRlbXB0aW5nIHRoZSBlbmNvZGluZyBvciBkZWNvZGluZyBvcGVyYXRpb24gYW5kIHRoZW4gdGhyb3dpbmcgYQorICBUeXBlRXJyb3IgZm9yIGFuIHVuZXhwZWN0ZWQgb3V0cHV0IHR5cGUuIChUaGUgbGF0dGVyIG1lY2hhbmlzbSByZW1haW5zCisgIGluIHBsYWNlIGZvciB0aGlyZCBwYXJ0eSBub24tdGV4dCBlbmNvZGluZ3MpCisKKy0gSXNzdWUgIzE5MTgzOiBJbXBsZW1lbnQgUEVQIDQ1NiAnc2VjdXJlIGFuZCBpbnRlcmNoYW5nZWFibGUgaGFzaCBhbGdvcml0aG0nLgorICBQeXRob24gbm93IHVzZXMgU2lwSGFzaDI0IG9uIGFsbCBtYWpvciBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzEyODkyOiBUaGUgdXRmLTE2KiBhbmQgdXRmLTMyKiBlbmNvZGVycyBubyBsb25nZXIgYWxsb3cgc3Vycm9nYXRlIGNvZGUKKyAgcG9pbnRzIChVK0Q4MDAtVStERkZGKSB0byBiZSBlbmNvZGVkLiAgVGhlIHV0Zi0zMiogZGVjb2RlcnMgbm8gbG9uZ2VyIGRlY29kZQorICBieXRlIHNlcXVlbmNlcyB0aGF0IGNvcnJlc3BvbmQgdG8gc3Vycm9nYXRlIGNvZGUgcG9pbnRzLiAgVGhlIHN1cnJvZ2F0ZXBhc3MKKyAgZXJyb3IgaGFuZGxlciBub3cgd29ya3Mgd2l0aCB0aGUgdXRmLTE2KiBhbmQgdXRmLTMyKiBjb2RlY3MuICBCYXNlZCBvbgorICBwYXRjaGVzIGJ5IFZpY3RvciBTdGlubmVyIGFuZCBLYW5nLUhhbyAoS2VubnkpIEx1LgorCistIElzc3VlICMxNzgwNjogQWRkZWQga2V5d29yZC1hcmd1bWVudCBzdXBwb3J0IGZvciAidGFic2l6ZSIgdG8KKyAgc3RyL2J5dGVzLmV4cGFuZHRhYnMoKS4KKworLSBJc3N1ZSAjMTc4Mjg6IE91dHB1dCB0eXBlIGVycm9ycyBpbiBzdHIuZW5jb2RlKCksIGJ5dGVzLmRlY29kZSgpIGFuZAorICBieXRlYXJyYXkuZGVjb2RlKCkgbm93IGRpcmVjdCB1c2VycyB0byBjb2RlY3MuZW5jb2RlKCkgb3IgY29kZWNzLmRlY29kZSgpCisgIGFzIGFwcHJvcHJpYXRlLgorCistIElzc3VlICMxNzgyODogVGhlIGludGVycHJldGVyIG5vdyBhdHRlbXB0cyB0byBjaGFpbiBlcnJvcnMgdGhhdCBvY2N1ciBpbgorICBjb2RlYyBwcm9jZXNzaW5nIHdpdGggYSByZXBsYWNlbWVudCBleGNlcHRpb24gb2YgdGhlIHNhbWUgdHlwZSB0aGF0CisgIGluY2x1ZGVzIHRoZSBjb2RlYyBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlLiBJdCBlbnN1cmVzIGl0IG9ubHkgZG9lcyB0aGlzCisgIHdoZW4gdGhlIGNyZWF0aW9uIG9mIHRoZSByZXBsYWNlbWVudCBleGNlcHRpb24gd29uJ3QgbG9zZSBhbnkgaW5mb3JtYXRpb24uCisKKy0gSXNzdWUgIzE5NDY2OiBDbGVhciB0aGUgZnJhbWVzIG9mIGRhZW1vbiB0aHJlYWRzIGVhcmxpZXIgZHVyaW5nIHRoZQorICBQeXRob24gc2h1dGRvd24gdG8gY2FsbCBvYmplY3RzIGRlc3RydWN0b3JzLiBTbyAidW5jbG9zZWQgZmlsZSIgcmVzb3VyY2UKKyAgd2FybmluZ3MgYXJlIG5vdyBjb3JyZXRseSBlbWl0dGVkIGZvciBkYWVtb24gdGhyZWFkcy4KKworLSBJc3N1ZSAjMTk1MTQ6IERlZHVwbGljYXRlIHNvbWUgX1B5X0lERU5USUZJRVIgZGVjbGFyYXRpb25zLgorICBQYXRjaCBieSBBbmRyZWkgRG9yaWFuIER1bWEuCisKKy0gSXNzdWUgIzE3OTM2OiBGaXggTyhuKioyKSBiZWhhdmlvdXIgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcgbWFueSBzdWJjbGFzc2VzCisgIG9mIGEgZ2l2ZW4gdHlwZS4KKworLSBJc3N1ZSAjMTk0Mjg6IHppcGltcG9ydCBub3cgaGFuZGxlcyBlcnJvcnMgd2hlbiByZWFkaW5nIHRydW5jYXRlZCBvciBpbnZhbGlkCisgIFpJUCBhcmNoaXZlLgorCistIElzc3VlICMxODQwODogQWRkIGEgbmV3IFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKCkgZnVuY3Rpb24gdG8gaGFuZGxlCisgIGV4Y2VwdGlvbnMgd2hlbiBtZXJnaW5nIGZhc3QgbG9jYWxzIGludG8gZl9sb2NhbHMgb2YgYSBmcmFtZS4KKyAgUHlFdmFsX0dldExvY2FscygpIG5vdyByYWlzZXMgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gTlVMTCBvbiBmYWlsdXJlLgorCistIElzc3VlICMxOTM2OTogT3B0aW1pemVkIHRoZSB1c2FnZSBvZiBfX2xlbmd0aF9oaW50X18oKS4KKwogLSBJc3N1ZSAjMTg2MDM6IEVuc3VyZSB0aGF0IFB5T1NfbXlzdHJpY21wIGFuZCBQeU9TX215c3RybmljbXAgYXJlIGluIHRoZQogICBQeXRob24gZXhlY3V0YWJsZSBhbmQgbm90IHJlbW92ZWQgYnkgdGhlIGxpbmtlcidzIG9wdGltaXplci4KIAotLSBJc3N1ZSAjMTkyNzk6IFVURi03IGRlY29kZXIgbm8gbW9yZSBwcm9kdWNlcyBpbGxlZ2FsIHN0cmluZ3MuCi0KLS0gRml4IG1hY3JvIGV4cGFuc2lvbiBvZiBfUHlFcnJfT0NDVVJSRUQoKSwgYW5kIG1ha2Ugc3VyZSB0byB1c2UgaXQgaW4gYXQKLSAgbGVhc3Qgb25lIHBsYWNlIHNvIGFzIHRvIGF2b2lkIHJlZ3Jlc3Npb25zLgotCi0tIElzc3VlICMxOTAxNDogbWVtb3J5dmlldy5jYXN0KCkgaXMgbm93IGFsbG93ZWQgb24gemVyby1sZW5ndGggdmlld3MuCi0KLS0gSXNzdWUgIzE5MDk4OiBQcmV2ZW50IG92ZXJmbG93IGluIHRoZSBjb21waWxlciB3aGVuIHRoZSByZWN1cnNpb24gbGltaXQgaXMgc2V0Ci0gIGFic3VyZGx5IGhpZ2guCi0KLS0gSXNzdWUgIzE4OTQyOiBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKSBvdXRwdXQgd2FzIGRhbWFnZWQgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTg2Njc6IEFkZCBtaXNzaW5nICJIQVZFX0ZDSE9XTkFUIiBzeW1ib2wgdG8gcG9zaXguX2hhdmVfZnVuY3Rpb25zLgotCi0tIElzc3VlICMxODM2ODogUHlPU19TdGRpb1JlYWRsaW5lKCkgbm8gbG9uZ2VyIGxlYWtzIG1lbW9yeSB3aGVuIHJlYWxsb2MoKQotICBmYWlscy4KLQotLSBJc3N1ZSAjMTY3NDE6IEZpeCBhbiBlcnJvciByZXBvcnRpbmcgaW4gaW50KCkuCi0KLS0gSXNzdWUgIzE3ODk5OiBGaXggcmFyZSBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBvcy5saXN0ZGlyKCkuCi0KLS0gSXNzdWUgIzE4NTUyOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgUHlBcmVuYV9BZGRQeU9iamVjdCgpIGluCi0gIG9iajJhc3Rfb2JqZWN0KCkuCi0KLS0gSXNzdWUgIzE4NTYwOiBGaXggcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBzdW0oKS4KLQotLSBJc3N1ZSAjMTU5MDU6IEZpeCB0aGVvcmV0aWNhbCBidWZmZXIgb3ZlcmZsb3cgaW4gaGFuZGxpbmcgb2Ygc3lzLmFyZ3ZbMF0sCi0gIHByZWZpeCBhbmQgZXhlY19wcmVmaXggaWYgdGhlIG9wZXJhdGlvbiBzeXN0ZW0gZG9lcyBub3Qgb2JleSBNQVhQQVRITEVOLgotCi0tIElzc3VlICMxODM0NDogRml4IHBvdGVudGlhbCByZWYtbGVha3MgaW4gX2J1ZmZlcmVkcmVhZGVyX3JlYWRfYWxsKCkuCi0KLS0gSXNzdWUgIzE3ODcyOiBGaXggYSBzZWdmYXVsdCBpbiBtYXJzaGFsLmxvYWQoKSB3aGVuIGlucHV0IHN0cmVhbSByZXR1cm5zCi0gIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCi0KLS0gSXNzdWUgIzE4NDI2OiBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIEMgZXh0ZW5zaW9uIGltcG9ydCB3aGVuCi0gIFB5TW9kdWxlX0dldERlZigpIHJldHVybnMgYW4gZXJyb3IuCi0KLS0gSXNzdWUgIzE4MzI4OiBSZW9yZGVyIG9wcyBpbiBQeVRocmVhZFN0YXRlX0RlbGV0ZSooKSBmdW5jdGlvbnMuIE5vdyB0aGUKLSAgdHN0YXRlIGlzIGZpcnN0IHJlbW92ZWQgZnJvbSBUTFMgYW5kIHRoZW4gZGVhbGxvY2F0ZWQuCi0KLS0gSXNzdWUgIzE4MTg0OiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpIGFuZCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSBub3cgcmFpc2UKLSAgT3ZlcmZsb3dFcnJvciB3aGVuIGFuIGFyZ3VtZW50IG9mICVjIGZvcm1hdCBpcyBvdXQgb2YgcmFuZ2UuCi0KLS0gSXNzdWUgIzE4MTM3OiBEZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBvbiBwcmVjaXNpb24gaW4gZmxvYXQuX19mb3JtYXRfXygpCi0gIGFuZCBjb21wbGV4Ll9fZm9ybWF0X18oKS4KLQotLSBJc3N1ZSAjMTgxODM6IEZpeCB2YXJpb3VzIHVuaWNvZGUgb3BlcmF0aW9ucyBvbiBzdHJpbmdzIHdpdGggbGFyZ2UgdW5pY29kZQotICBjb2RlcG9pbnRzLgotCi0tIElzc3VlICMxODE4MDogRml4IHJlZiBsZWFrIGluIF9QeUltcG9ydF9HZXREeW5Mb2FkV2luZG93cygpLgotCi0tIElzc3VlICMxODAzODogU3ludGF4RXJyb3IgcmFpc2VkIGR1cmluZyBjb21waWxhdGlvbiBzb3VyY2VzIHdpdGggaWxsZWdhbAotICBlbmNvZGluZyBub3cgYWx3YXlzIGNvbnRhaW5zIGFuIGVuY29kaW5nIG5hbWUuCi0KLS0gSXNzdWUgIzE3NjQ0OiBGaXggYSBjcmFzaCBpbiBzdHIuZm9ybWF0IHdoZW4gY3VybHkgYnJhY2VzIGFyZSB1c2VkIGluIHNxdWFyZQotICBicmFja2V0cy4KLQotLSBJc3N1ZSAjMTc5ODM6IFJhaXNlIGEgU3ludGF4RXJyb3IgZm9yIGEgYGBnbG9iYWwgX19jbGFzc19fYGAgc3RhdGVtZW50IGluIGEKLSAgY2xhc3MgYm9keS4KLQotLSBJc3N1ZSAjMTc5Mjc6IEZyYW1lIG9iamVjdHMga2VwdCBhcmd1bWVudHMgYWxpdmUgaWYgdGhleSBoYWQgYmVlbiBjb3BpZWQgaW50bwotICBhIGNlbGwsIGV2ZW4gaWYgdGhlIGNlbGwgd2FzIGNsZWFyZWQuCistIElzc3VlICMxOTMwNjogQWRkIGV4dHJhIGhpbnRzIHRvIHRoZSBmYXVsdGhhbmRsZXIgbW9kdWxlJ3Mgc3RhY2sKKyAgZHVtcHMgdGhhdCB0aGVzZSBhcmUgInVwc2lkZSBkb3duIi4KIAogTGlicmFyeQogLS0tLS0tLQogCi0tIElzc3VlICMxOTM5NTogUmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gYXR0ZW1wdGluZyB0byBwaWNrbGUgYSBiejIgb3IgbHptYQotICBjb21wcmVzc29yL2RlY29tcHJlc3NvciBvYmplY3QsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgcGlja2xlIHRoYXQgd291bGQKLSAgY2F1c2UgYSBzZWdmYXVsdCB3aGVuIGxvYWRlZCBhbmQgdXNlZC4KKy0gSXNzdWUgIzMxNTg6IGRvY3Rlc3QgY2FuIG5vdyBmaW5kIGRvY3Rlc3RzIGluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcworICB3cml0dGVuIGluIEMuCisKKy0gSXNzdWUgIzEzNDc3OiBBZGRlZCBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHRvIHRoZSB0YXJmaWxlIG1vZHVsZS4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTk2NzQ6IGluc3BlY3Quc2lnbmF0dXJlKCkgbm93IHByb2R1Y2VzIGEgY29ycmVjdCBzaWduYXR1cmUKKyAgZm9yIHNvbWUgYnVpbHRpbnMuCisKKy0gSXNzdWUgIzE5NzIyOiBBZGRlZCBvcGNvZGUuc3RhY2tfZWZmZWN0KCksIHdoaWNoCisgIGNvbXB1dGVzIHRoZSBzdGFjayBlZmZlY3Qgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgorCistIElzc3VlICMxOTczNTogSW1wbGVtZW50IHByaXZhdGUgZnVuY3Rpb24gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKSB0bworICBjcmVhdGUgU1NMQ29udGV4dCBvYmplY3RzIGluIFB5dGhvbidzIHN0ZGxpYiBtb2R1bGUuIEl0IHByb3ZpZGVzIGEgc2luZ2xlCisgIGNvbmZpZ3VyYXRpb24gcG9pbnQgYW5kIG1ha2VzIHVzZSBvZiBTU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cygpLgorCistIElzc3VlICMxNjIwMzogQWRkIHJlLmZ1bGxtYXRjaCgpIGZ1bmN0aW9uIGFuZCByZWdleC5mdWxsbWF0Y2goKSBtZXRob2QsCisgIHdoaWNoIGFuY2hvciB0aGUgcGF0dGVybiBhdCBib3RoIGVuZHMgb2YgdGhlIHN0cmluZyB0byBtYXRjaC4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxMzU5MjogSW1wcm92ZWQgdGhlIHJlcHIgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIG9iamVjdHMuCisgIEJhc2VkIG9uIHBhdGNoIGJ5IEh1Z28gTG9wZXMgVGF2YXJlcy4KKworLSBJc3N1ZSAjMTk2NDE6IEFkZGVkIHRoZSBhdWRpb29wLmJ5dGVzd2FwKCkgZnVuY3Rpb24gdG8gY29udmVydCBiaWctZW5kaWFuCisgIHNhbXBsZXMgdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYS4KKworLSBJc3N1ZSAjMTUyMDQ6IERlcHJlY2F0ZWQgdGhlICdVJyBtb2RlIGluIGZpbGUtbGlrZSBvYmplY3RzLgorCistIElzc3VlICMxNzgxMDogSW1wbGVtZW50IFBFUCAzMTU0LCBwaWNrbGUgcHJvdG9jb2wgNC4KKworLSBJc3N1ZSAjMTk2Njg6IEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBjcDExMjUgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE5Njg5OiBBZGQgc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSBmYWN0b3J5IGZ1bmN0aW9uLiBJdCBjcmVhdGVzCisgIGEgbmV3IFNTTENvbnRleHQgb2JqZWN0IHdpdGggc2VjdXJlIGRlZmF1bHQgc2V0dGluZ3MuCisKKy0gSXNzdWUgIzE5NzI3OiBvcy51dGltZSguLi4sIE5vbmUpIGlzIG5vdyBwb3RlbnRpYWxseSBtb3JlIHByZWNpc2UKKyAgdW5kZXIgV2luZG93cy4KKworLSBJc3N1ZSAjMTcyMDE6IFpJUDY0IGV4dGVuc2lvbnMgbm93IGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuICBQYXRjaCBieQorICBXaWxsaWFtIE1hbGxhcmQuCisKKy0gSXNzdWUgIzE5MjkyOiBBZGQgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMoKSB0byBsb2FkIGRlZmF1bHQgcm9vdCBDQQorICBjZXJ0aWZpY2F0ZXMgZnJvbSBkZWZhdWx0IHN0b3JlcyBvciBzeXN0ZW0gc3RvcmVzLiBCeSBkZWZhdWx0IHRoZSBtZXRob2QKKyAgbG9hZHMgQ0EgY2VydHMgZm9yIGF1dGhlbnRpY2F0aW9uIG9mIHNlcnZlciBjZXJ0cy4KKworLSBJc3N1ZSAjMTk2NzM6IEFkZCBwYXRobGliIHRvIHRoZSBzdGRsaWIgYXMgYSBwcm92aXNpb25hbCBtb2R1bGUgKFBFUCA0MjgpLgorCistIElzc3VlICMxNjU5NjogcGRiIGluIGEgZ2VuZXJhdG9yIG5vdyBwcm9wZXJseSBza2lwcyBvdmVyIHlpZWxkIGFuZAorICB5aWVsZCBmcm9tIHJhdGhlciB0aGFuIHN0ZXBwaW5nIG91dCBvZiB0aGUgZ2VuZXJhdG9yIGludG8gaXRzCisgIGNhbGxlci4gIChUaGlzIGlzIGVzc2VudGlhbCBmb3Igc3RlcHBpbmcgdGhyb3VnaCBhc3luY2lvIGNvcm91dGluZXMuKQorCistIElzc3VlICMxNzkxNjogQWRkZWQgZGlzLkJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKCkgYW5kCisgIGRpcy5CeXRlY29kZS5jdXJyZW50X29mZnNldCB0byBlYXNpbHkgZGlzcGxheSAiY3VycmVudCBpbnN0cnVjdGlvbiIKKyAgbWFya2VycyBpbiB0aGUgbmV3IGRpc2Fzc2VtYmx5IEFQSSAoUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKS4KKworLSBJc3N1ZSAjMTk1NTI6IHZlbnYgbm93IHN1cHBvcnRzIGJvb3RzdHJhcHBpbmcgcGlwIGludG8gdmlydHVhbCBlbnZpcm9ubWVudHMKKworLSBJc3N1ZSAjMTcxMzQ6IEZpbmFsaXplIGludGVyZmFjZSB0byBXaW5kb3dzJyBjZXJ0aWZpY2F0ZSBzdG9yZS4gQ2VydCBhbmQKKyAgQ1JMIGVudW1lcmF0aW9uIGFyZSBub3cgdHdvIGZ1bmN0aW9ucy4gZW51bV9jZXJ0aWZpY2F0ZXMoKSBhbHNvIHJldHVybnMKKyAgcHVycG9zZSBmbGFncyBhcyBzZXQgb2YgT0lEcy4KKworLSBJc3N1ZSAjMTk1NTU6IFJlc3RvcmUgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpLCAoYW5kIHRoZSBkaXN0dXRpbHMKKyAgZXF1aXZhbGVudCkgd2l0aCBhIERlcHJlY2F0aW9uV2FybmluZyBwb2ludGluZyBwZW9wbGUgYXQgJEVYVF9TVUZGSVguCisKKy0gSXNzdWUgIzg4MTM6IEFkZCBTU0xDb250ZXh0LnZlcmlmeV9mbGFncyB0byBjaGFuZ2UgdGhlIHZlcmlmaWNhdGlvbiBmbGFncworICBvZiB0aGUgY29udGV4dCBpbiBvcmRlciB0byBlbmFibGUgY2VydGlmaWNhdGlvbiByZXZvY2F0aW9uIGxpc3QgKENSTCkKKyAgY2hlY2tzIG9yIHN0cmljdCBYNTA5IHJ1bGVzLgorCistIElzc3VlICMxODI5NDogRml4IHRoZSB6bGliIG1vZHVsZSB0byBtYWtlIGl0IDY0LWJpdCBzYWZlLgorCistIElzc3VlICMxOTY4MjogRml4IGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCBvbGQgdmVyc2lvbiBvZiBPcGVuU1NMIHRoYXQKKyAgd2FzIGludHJvZHVjZWQgYnkgSXNzdWUgIzE4Mzc5LgorCistIElzc3VlICMxNDQ1NTogcGxpc3RsaWIgbm93IHN1cHBvcnRzIGJpbmFyeSBwbGlzdHMgYW5kIGhhcyBhbiB1cGRhdGVkIEFQSS4KKworLSBJc3N1ZSAjMTk2MzM6IEZpeGVkIHdyaXRpbmcgbm90IGNvbXByZXNzZWQgMTYtIGFuZCAzMi1iaXQgd2F2ZSBmaWxlcyBvbgorICBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTgzNzk6IFNTTFNvY2tldC5nZXRwZWVyY2VydCgpIHJldHVybnMgQ0EgaXNzdWVyIEFJQSBmaWVsZHMsIE9DU1AKKyAgYW5kIENSTCBkaXN0cmlidXRpb24gcG9pbnRzLgorCistIElzc3VlICMxODEzODogSW1wbGVtZW50IGNhZGF0YSBhcmd1bWVudCBvZiBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uKCkKKyAgdG8gbG9hZCBDQSBjZXJ0aWZpY2F0ZXMgYW5kIENSTCBmcm9tIG1lbW9yeS4gSXQgc3VwcG9ydHMgUEVNIGFuZCBERVIKKyAgZW5jb2RlZCBzdHJpbmdzLgorCistIElzc3VlICMxODc3NTogQWRkIG5hbWUgYW5kIGJsb2NrX3NpemUgYXR0cmlidXRlIHRvIEhNQUMgb2JqZWN0LiBUaGV5IG5vdworICBwcm92aWRlIHRoZSBzYW1lIEFQSSBlbGVtZW50cyBhcyBub24ta2V5ZWQgY3J5cHRvZ3JhcGhpYyBoYXNoIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTcyNzY6IE1ENSBhcyBkZWZhdWx0IGRpZ2VzdG1vZCBmb3IgSE1BQyBpcyBkZXByZWNhdGVkLiBUaGUgSE1BQworICBtb2R1bGUgc3VwcG9ydHMgZGlnZXN0bW9kIG5hbWVzLCBlLmcuIGhtYWMuSE1BQygnc2hhMScpLgorCistIElzc3VlICMxOTQ0OTogaW4gY3N2J3Mgd3JpdGVyb3csIGhhbmRsZSBub24tc3RyaW5nIGtleXMgd2hlbiBnZW5lcmF0aW5nIHRoZQorICBlcnJvciBtZXNzYWdlIHRoYXQgY2VydGFpbiBrZXlzIGFyZSBub3QgaW4gdGhlICdmaWVsZG5hbWVzJyBsaXN0LgorCistIElzc3VlICMxMzYzMzogQWRkZWQgYSBuZXcgY29udmVydF9jaGFycmVmcyBrZXl3b3JkIGFyZyB0byBIVE1MUGFyc2VyIHRoYXQsCisgIHdoZW4gVHJ1ZSwgYXV0b21hdGljYWxseSBjb252ZXJ0cyBhbGwgY2hhcmFjdGVyIHJlZmVyZW5jZXMuCisKKy0gSXNzdWUgIzI5Mjc6IEFkZGVkIHRoZSB1bmVzY2FwZSgpIGZ1bmN0aW9uIHRvIHRoZSBodG1sIG1vZHVsZS4KKworLSBJc3N1ZSAjODQwMjogQWRkZWQgdGhlIGVzY2FwZSgpIGZ1bmN0aW9uIHRvIHRoZSBnbG9iIG1vZHVsZS4KKworLSBJc3N1ZSAjMTc2MTg6IEFkZCBCYXNlODUgYW5kIEFzY2lpODUgZW5jb2RpbmcvZGVjb2RpbmcgdG8gdGhlIGJhc2U2NCBtb2R1bGUuCisKKy0gSXNzdWUgIzE5NjM0OiB0aW1lLnN0cmZ0aW1lKCIleSIpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIG9uIEFJWCB3aGVuIGdpdmVuIGEKKyAgeWVhciBiZWZvcmUgMTkwMC4KKworLSBGaXggdGVzdC5zdXBwb3J0LmJpbmRfcG9ydCgpIHRvIG5vdCBjYXVzZSBhbiBlcnJvciB3aGVuIFB5dGhvbiB3YXMgY29tcGlsZWQKKyAgb24gYSBzeXN0ZW0gd2l0aCBTT19SRVVTRVBPUlQgZGVmaW5lZCBpbiB0aGUgaGVhZGVycyBidXQgcnVuIG9uIGEgc3lzdGVtCisgIHdpdGggYW4gT1Mga2VybmVsIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGF0IHJlYXNvbmFibHkgbmV3IHNvY2tldCBvcHRpb24uCisKKy0gRml4IGNvbXBpbGF0aW9uIGVycm9yIHVuZGVyIGdjYyBvZiB0aGUgY3R5cGVzIG1vZHVsZSBidW5kbGVkIGxpYmZmaSBmb3IgYXJtLgorCistIElzc3VlICMxOTQ0ODogQWRkIHByaXZhdGUgQVBJIHRvIFNTTCBtb2R1bGUgdG8gbG9va3VwIEFTTi4xIG9iamVjdHMgYnkgT0lELAorICBOSUQsIHNob3J0IG5hbWUgYW5kIGxvbmcgbmFtZS4KKworLSBJc3N1ZSAjMTkyODI6IGRibS5vcGVuIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLiAoSW5pdGFsCisgIHBhdGNoIGJ5IENsYXVkaXUgUG9wYSkKKworLSBJc3N1ZSAjODMxMTogQWRkZWQgc3VwcG9ydCBmb3Igd3JpdGluZyBhbnkgYnl0ZXMtbGlrZSBvYmplY3RzIGluIHRoZSBhaWZjLAorICBzdW5hdSwgYW5kIHdhdmUgbW9kdWxlcy4KKworLSBJc3N1ZSAjNTIwMjogQWRkZWQgc3VwcG9ydCBmb3IgdW5zZWVrYWJsZSBmaWxlcyBpbiB0aGUgd2F2ZSBtb2R1bGUuCisKKy0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjMTE4MDogUmVzdG9yZSBnbG9iYWwgb3B0aW9uIHRvIGlnbm9yZQorICB+Ly5weWRpc3R1dGlscy5jZmcgaW4gRGlzdHV0aWxzLCBhY2NpZGVudGFsbHkgcmVtb3ZlZCBpbiBiYWNrb3V0IG9mCisgIGRpc3R1dGlsczIgY2hhbmdlcy4KKworLSBJc3N1ZSAjMTk1MjM6IENsb3NlZCBGaWxlSGFuZGxlciBsZWFrIHdoaWNoIG9jY3VycmVkIHdoZW4gZGVsYXkgd2FzIHNldC4KKworLSBJc3N1ZSAjMTk1NDQgYW5kICM2NTE2OiBSZXN0b3JlIHN1cHBvcnQgZm9yIC0tdXNlciBhbmQgLS1ncm91cCBwYXJhbWV0ZXJzIHRvCisgIHNkaXN0IGNvbW1hbmQgYWNjaWRlbnRhbGx5IHJvbGxlZCBiYWNrIGFzIHBhcnQgb2YgdGhlIGRpc3R1dGlsczIgcm9sbGJhY2suCisKKy0gSXNzdWUgIzEzNjc0OiBQcmV2ZW50ZWQgdGltZS5zdHJmdGltZSBmcm9tIGNyYXNoaW5nIG9uIFdpbmRvd3Mgd2hlbiBnaXZlbgorICBhIHllYXIgYmVmb3JlIDE5MDAgYW5kIGEgZm9ybWF0IG9mICV5LgorCistIElzc3VlICMxOTQwNjogaW1wbGVtZW50YXRpb24gb2YgdGhlIGVuc3VyZXBpcCBtb2R1bGUgKHBhcnQgb2YgUEVQIDQ1MykuCisgIFBhdGNoIGJ5IERvbmFsZCBTdHVmZnQgYW5kIE5pY2sgQ29naGxhbi4KKworLSBJc3N1ZSAjMTk1NDQgYW5kIElzc3VlICM2Mjg2OiBSZXN0b3JlIHVzZSBvZiB1cmxsaWIgb3ZlciBodHRwIGFsbG93aW5nIHVzZQorICBvZiBodHRwX3Byb3h5IGZvciBEaXN0dXRpbHMgdXBsb2FkIGNvbW1hbmQsIGEgZmVhdHVyZSBhY2NpZGVudGFsbHkgbG9zdAorICBpbiB0aGUgcm9sbGJhY2sgb2YgZGlzdHV0aWxzMi4KKworLSBJc3N1ZSAjMTk1NDQgYW5kIElzc3VlICM3NDU3OiBSZXN0b3JlIHRoZSByZWFkX3BrZ19maWxlIG1ldGhvZCB0bworICBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb25NZXRhZGF0YSBhY2NpZGVudGFsbHkgcmVtb3ZlZCBpbiB0aGUgdW5kbyBvZgorICBkaXN0dXRpbHMyLgorCistIElzc3VlICMxNjY4NTogQWRkZWQgc3VwcG9ydCBmb3IgYW55IGJ5dGVzLWxpa2Ugb2JqZWN0cyBpbiB0aGUgYXVkaW9vcCBtb2R1bGUuCisgIFJlbW92ZWQgc3VwcG9ydCBmb3Igc3RyaW5ncy4KKworLSBJc3N1ZSAjNzE3MTogQWRkIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2YgYGBpbmV0X250b3BgYCBhbmQgYGBpbmV0X3B0b25gYAorICB0byBzb2NrZXQgbW9kdWxlLiBQYXRjaCBieSBBdHN1byBJc2hpbW90by4KKworLSBJc3N1ZSAjMTkyNjE6IEFkZGVkIHN1cHBvcnQgZm9yIHdyaXRpbmcgMjQtYml0IHNhbXBsZXMgaW4gdGhlIHN1bmF1IG1vZHVsZS4KKworLSBJc3N1ZSAjMTA5Nzc5NzogQWRkZWQgQ1AyNzMgZW5jb2RpbmcsIHVzZWQgb24gSUJNIG1haW5mcmFtZXMgaW4KKyAgR2VybWFueSBhbmQgQXVzdHJpYS4gIE1hcHBpbmcgcHJvdmlkZWQgYnkgTWljaGFlbCBCaWVyZW5mZWxkLgorCistIElzc3VlICMxNTc1MDIwOiBGaXhlZCBzdXBwb3J0IG9mIDI0LWJpdCB3YXZlIGZpbGVzIG9uIGJpZy1lbmRpYW4gcGxhdGZvcm1zLgorCistIElzc3VlICMxOTM3ODogRml4ZWQgYSBudW1iZXIgb2YgY2FzZXMgaW4gdGhlIGRpcyBtb2R1bGUgd2hlcmUgdGhlIG5ldworICAiZmlsZSIgcGFyYW1ldGVyIHdhcyBub3QgYmVpbmcgaG9ub3VyZWQgY29ycmVjdGx5CisKKy0gSXNzdWUgIzE5Mzc4OiBSZW1vdmVkIHRoZSAiZGlzLkJ5dGVjb2RlLnNob3dfaW5mbyIgbWV0aG9kCisKKy0gSXNzdWUgIzE5Mzc4OiBSZW5hbWVkIHRoZSAiZGlzLkJ5dGVjb2RlLmRpc3BsYXlfY29kZSIgbWV0aG9kIHRvCisgICJkaXMuQnl0ZWNvZGUuZGlzIiBhbmQgY29udmVydGVkIGl0IHRvIHJldHVybmluZyBhIHN0cmluZyByYXRoZXIgdGhhbgorICBwcmludGluZyBvdXRwdXQuCisKKy0gSXNzdWUgIzE5Mzc4OiB0aGUgImxpbmVfb2Zmc2V0IiBwYXJhbWV0ZXIgaW4gdGhlIG5ldyAiZGlzLmdldF9pbnN0cnVjdGlvbnMiCisgIEFQSSBoYXMgYmVlbiByZW5hbWVkIHRvICJmaXJzdF9saW5lIiAoYW5kIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCB1c2FnZQorICBjaGFuZ2VkIGFjY29yZGluZ2x5KS4gVGhpcyBzaG91bGQgcmVkdWNlIGNvbmZ1c2lvbiB3aXRoIHRoZSBtb3JlIGNvbW1vbiB1c2UKKyAgb2YgIm9mZnNldCIgaW4gdGhlIGRpcyBkb2NzIHRvIHJlZmVyIHRvIGJ5dGVjb2RlIG9mZnNldHMuCisKKy0gSXNzdWUgIzE4Njc4OiBDb3JyZWN0ZWQgc3B3ZCBzdHJ1Y3QgbWVtYmVyIG5hbWVzIGluIHNwd2QgbW9kdWxlOgorICBzcF9uYW0tPnNwX25hbXAsIGFuZCBzcF9wd2QtPnNwX3B3ZHAuICBUaGUgb2xkIG5hbWVzIGFyZSBrZXB0IGFzIGV4dHJhCisgIHN0cnVjdHNlcSBtZW1iZXJzLCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworLSBJc3N1ZSAjNjE1NzogRml4ZWQgdGtpbnRlci5UZXh0LmRlYnVnKCkuICB0a2ludGVyLlRleHQuYmJveCgpIG5vdyByYWlzZXMKKyAgVHlwZUVycm9yIGluc3RlYWQgb2YgVGNsRXJyb3Igb24gd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4gIE9yaWdpbmFsIHBhdGNoCisgIGJ5IEd1aWxoZXJtZSBQb2xvLgorCistIElzc3VlICMxMDE5NzogUmV3b3JrIHN1YnByb2Nlc3MuZ2V0W3N0YXR1c11vdXRwdXQgdG8gdXNlIHN1YnByb2Nlc3MKKyAgZnVuY3Rpb25hbGl0eSBhbmQgdGh1cyB0byB3b3JrIG9uIFdpbmRvd3MuIFBhdGNoIGJ5IE5pY2sgQ29naGxhbgorCistIElzc3VlICM2MTYwOiBUaGUgYmJveCgpIG1ldGhvZCBvZiB0a2ludGVyLlNwaW5ib3ggbm93IHJldHVybnMgYSB0dXBsZSBvZgorICBpbnRlZ2VycyBpbnN0ZWFkIG9mIGEgc3RyaW5nLiAgQmFzZWQgb24gcGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCisKKy0gSXNzdWUgIzE5NDAzOiBjb250ZXh0bGliLnJlZGlyZWN0X3N0ZG91dCBpcyBub3cgcmVlbnRyYW50CisKKy0gSXNzdWUgIzE5Mjg2OiBEaXJlY3RvcmllcyBpbiBgYHBhY2thZ2VfZGF0YWBgIGFyZSBubyBsb25nZXIgYWRkZWQgdG8KKyAgdGhlIGZpbGVsaXN0LCBwcmV2ZW50aW5nIGZhaWx1cmUgb3V0bGluZWQgaW4gdGhlIHRpY2tldC4KKworLSBJc3N1ZSAjMTk0ODA6IEhUTUxQYXJzZXIgbm93IGFjY2VwdHMgYWxsIHZhbGlkIHN0YXJ0LXRhZyBuYW1lcyBhcyBkZWZpbmVkCisgIGJ5IHRoZSBIVE1MNSBzdGFuZGFyZC4KKworLSBJc3N1ZSAjMTUxMTQ6IFRoZSBodG1sLnBhcnNlciBtb2R1bGUgbm93IHJhaXNlcyBhIERlcHJlY2F0aW9uV2FybmluZyB3aGVuIHRoZQorICBzdHJpY3QgYXJndW1lbnQgb2YgSFRNTFBhcnNlciBvciB0aGUgSFRNTFBhcnNlci5lcnJvciBtZXRob2QgYXJlIHVzZWQuCisKKy0gSXNzdWUgIzE5NDEwOiBVbmRvIHRoZSBzcGVjaWFsLWNhc2luZyByZW1vdmFsIG9mICcnIGZvcgorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIuCisKKy0gSXNzdWUgIzE5NDI0OiBGaXggdGhlIHdhcm5pbmdzIG1vZHVsZSB0byBhY2NlcHQgZmlsZW5hbWUgY29udGFpbmluZyBzdXJyb2dhdGUKKyAgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTk0MzU6IEZpeCBkaXJlY3RvcnkgdHJhdmVyc2FsIGF0dGFjayBvbiBDR0lIdHRwUmVxdWVzdEhhbmRsZXIuCisKKy0gSXNzdWUgIzE5MjI3OiBSZW1vdmUgcHRocmVhZF9hdGZvcmsoKSBoYW5kbGVyLiBUaGUgaGFuZGxlciB3YXMgYWRkZWQgdG8KKyAgc29sdmUgIzE4NzQ3IGJ1dCBoYXMgY2F1c2VkIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTk0MjA6IEZpeCByZWZlcmVuY2UgbGVhayBpbiBtb2R1bGUgaW5pdGFsaXphdGlvbiBjb2RlIG9mCisgIF9oYXNob3BlbnNzbC5jCisKKy0gSXNzdWUgIzE5MzI5OiBPcHRpbWl6ZWQgY29tcGlsaW5nIGNoYXJzZXRzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAKIC0gSXNzdWUgIzE5MjI3OiBUcnkgdG8gZml4IGRlYWRsb2NrcyBjYXVzZWQgYnkgcmUtc2VlZGluZyB0aGVuIE9wZW5TU0wKICAgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9uIGZvcmsoKS4KQEAgLTY1MiwxMiArMTIyNCwzMCBAQAogLSBJc3N1ZSAjMTYwMzk6IENWRS0yMDEzLTE3NTI6IENoYW5nZSB1c2Ugb2YgcmVhZGxpbmUgaW4gaW1hcGxpYiBtb2R1bGUgdG8gbGltaXQKICAgbGluZSBsZW5ndGguICBQYXRjaCBieSBFbWlsIExpbmQuCiAKKy0gSXNzdWUgIzE5MzMwOiB0aGUgdW5uZWNlc3Nhcnkgd3JhcHBlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKyAgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBuZXcgY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXQgYW5kCisgIGNvbnRleHRsaWIuc3VwcHJlc3MgY29udGV4dCBtYW5hZ2Vycywgd2hpY2ggYWxzbyBlbnN1cmVzIHRoZXkgcHJvdmlkZQorICByZWFzb25hYmxlIGhlbHAoKSBvdXRwdXQgb24gaW5zdGFuY2VzCisKIC0gSXNzdWUgIzE5MzkzOiBGaXggc3ltdGFibGUuc3ltdGFibGUgZnVuY3Rpb24gdG8gbm90IGJlIGNvbmZ1c2VkIHdoZW4gdGhlcmUgYXJlCiAgIGZ1bmN0aW9ucyBvciBjbGFzc2VzIG5hbWVkICJ0b3AiLgogCistIElzc3VlICMxODY4NTogUmVzdG9yZSByZSBwZXJmb3JtYW5jZSB0byBwcmUtUEVQIDM5MyBsZXZlbHMuCisKIC0gSXNzdWUgIzE5MzM5OiB0ZWxuZXRsaWIgbW9kdWxlIGlzIG5vdyB1c2luZyB0aW1lLm1vbm90b25pYygpIHdoZW4gYXZhaWxhYmxlCiAgIHRvIGNvbXB1dGUgdGltZW91dC4KIAorLSBJc3N1ZSAjMTkzOTk6IGZpeCBzcG9yYWRpYyB0ZXN0X3N1YnByb2Nlc3MgZmFpbHVyZS4KKworLSBJc3N1ZSAjMTMyMzQ6IEZpeCBvcy5saXN0ZGlyIHRvIHdvcmsgd2l0aCBleHRlbmRlZCBwYXRocyBvbiBXaW5kb3dzLgorICBQYXRjaCBieSBTYW50b3NvIFdpamF5YS4KKworLSBJc3N1ZSAjMTkzNzU6IFRoZSBzaXRlIG1vZHVsZSBhZGRpbmcgYSAic2l0ZS1weXRob24iIGRpcmVjdG9yeSB0byBzeXMucGF0aCwKKyAgaWYgaXQgZXhpc3RzLCBpcyBub3cgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTkzNzk6IExhemlseSBpbXBvcnQgbGluZWNhY2hlIGluIHRoZSB3YXJuaW5ncyBtb2R1bGUsIHRvIG1ha2UKKyAgc3RhcnR1cCB3aXRoIHdhcm5pbmdzIGZhc3RlciB1bnRpbCBhIHdhcm5pbmcgZ2V0cyBwcmludGVkLgorCiAtIElzc3VlICMxOTI4ODogRml4ZWQgdGhlICJpbiIgb3BlcmF0b3Igb2YgZGJtLmdudSBkYXRhYmFzZXMgZm9yIHN0cmluZwogICBhcmd1bWVudC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzLgogCkBAIC02NjYsNTIgKzEyNTYsMjk5IEBACiAKIC0gSXNzdWUgIzE5MzI3OiBGaXhlZCB0aGUgd29ya2luZyBvZiByZWd1bGFyIGV4cHJlc3Npb25zIHdpdGggdG9vIGJpZyBjaGFyc2V0LgogCistIElzc3VlICMxNzQwMDogTmV3ICdpc19nbG9iYWwnIGF0dHJpYnV0ZSBmb3IgaXBhZGRyZXNzIHRvIHRlbGwgaWYgYW4gYWRkcmVzcworICBpcyBhbGxvY2F0ZWQgYnkgSUFOQSBmb3IgZ2xvYmFsIG9yIHByaXZhdGUgbmV0d29ya3MuCisKIC0gSXNzdWUgIzE5MzUwOiBJbmNyZWFzaW5nIHRoZSB0ZXN0IGNvdmVyYWdlIG9mIG1hY3VybDJwYXRoLiBQYXRjaCBieSBDb2xpbgogICBXaWxsaWFtcy4KIAorLSBJc3N1ZSAjMTkzNjU6IE9wdGltaXplZCB0aGUgcGFyc2luZyBvZiBsb25nIHJlcGxhY2VtZW50IHN0cmluZyBpbiByZS5zdWIqKCkKKyAgZnVuY3Rpb25zLgorCiAtIElzc3VlICMxOTM1MjogRml4IHVuaXR0ZXN0IGRpc2NvdmVyeSB3aGVuIGEgbW9kdWxlIGNhbiBiZSByZWFjaGVkCiAgIHRocm91Z2ggc2V2ZXJhbCBwYXRocyAoZS5nLiB1bmRlciBEZWJpYW4vVWJ1bnR1IHdpdGggdmlydHVhbGVudikuCiAKIC0gSXNzdWUgIzE1MjA3OiBGaXggbWltZXR5cGVzIHRvIHJlYWQgZnJvbSBjb3JyZWN0IHBhcnQgb2YgV2luZG93cyByZWdpc3RyeQogICBPcmlnaW5hbCBwYXRjaCBieSBEYXZlIENoYW1iZXJzCiAKKy0gSXNzdWUgIzE2NTk1OiBBZGQgcHJsaW1pdCgpIHRvIHJlc291cmNlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTkzMjQ6IEV4cG9zZSBMaW51eC1zcGVjaWZpYyBjb25zdGFudHMgaW4gcmVzb3VyY2UgbW9kdWxlLgorCistIElzc3VlICMxNzQwMDogaXBhZGRyZXNzIHNob3VsZCBtYWtlIGl0IGVhc3kgdG8gaWRlbnRpZnkgcmZjNjU5OCBhZGRyZXNzZXMuCisKKy0gTG9hZCBTU0wncyBlcnJvciBzdHJpbmdzIGluIGhhc2hsaWIuCisKKy0gSXNzdWUgIzE4NTI3OiBVcGdyYWRlIGludGVybmFsIGNvcHkgb2YgemxpYiB0byAxLjIuOC4KKworLSBJc3N1ZSAjMTkyNzQ6IEFkZCBhIGZpbHRlcmZ1bmMgcGFyYW1ldGVyIHRvIFB5WmlwRmlsZS53cml0ZXB5LgorCiAtIElzc3VlICM4OTY0OiBmaXggcGxhdGZvcm0uX3N5c192ZXJzaW9uIHRvIGhhbmRsZSBJcm9uUHl0aG9uIDIuNisuCiAgIFBhdGNoIGJ5IE1hcnRpbiBNYXR1c2lhay4KIAorLSBJc3N1ZSAjMTk0MTM6IFJlc3RvcmUgcHJlLTMuMyByZWxvYWQoKSBzZW1hbnRpY3Mgb2YgcmUtZmluZGluZyBtb2R1bGVzLgorCistIElzc3VlICMxODk1ODogSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvciBqc29uLmxvYWQocykgd2hpbGUgcGFzc2luZyBhIHN0cmluZworICB0aGF0IHN0YXJ0cyB3aXRoIGEgVVRGLTggQk9NLgorCistIElzc3VlICMxOTMwNzogSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvciBqc29uLmxvYWQocykgd2hpbGUgcGFzc2luZyBvYmplY3RzCisgIG9mIHRoZSB3cm9uZyB0eXBlLgorCiAtIElzc3VlICMxNjAzODogQ1ZFLTIwMTMtMTc1MjogZnRwbGliOiBMaW1pdCBhbW91bnQgb2YgZGF0YSByZWFkIGJ5CiAgIGxpbWl0aW5nIHRoZSBjYWxsIHRvIHJlYWRsaW5lKCkuICBPcmlnaW5hbCBwYXRjaCBieSBNaWNoYcWCCiAgIEphc3RyesSZYnNraSBhbmQgR2lhbXBhb2xvIFJvZG9sYS4KIAorLSBJc3N1ZSAjMTcwODc6IEltcHJvdmVkIHRoZSByZXByIGZvciByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggb2JqZWN0cy4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE5NjY0OiB0ZXN0X3VzZXJkaWN0J3MgcmVwciB0ZXN0IG5vIGxvbmdlciBkZXBlbmRzIG9uIHRoZSBvcmRlcgorICBvZiBkaWN0IGVsZW1lbnRzLgorCistIElzc3VlICMxOTQ0MDogQ2xlYW4gdXAgdGVzdF9jYXBpIGJ5IHJlbW92aW5nIGFuIHVubmVjZXNzYXJ5IF9fZnV0dXJlX18KKyAgaW1wb3J0LCBjb252ZXJ0aW5nIGZyb20gdGVzdF9tYWluIHRvIHVuaXR0ZXN0Lm1haW4sIGFuZCBydW5uaW5nIHRoZQorICBfdGVzdGNhcGkgbW9kdWxlIHRlc3RzIGFzIHN1YlRlc3RzIG9mIGEgdW5pdHRlc3QgVGVzdENhc2UgbWV0aG9kLgorCistIElzc3VlICMxOTM3ODogdGhlIG1haW4gZGlzIG1vZHVsZSB0ZXN0cyBhcmUgbm93IHJ1biB3aXRoIGJvdGggc3Rkb3V0CisgIHJlZGlyZWN0aW9uICphbmQqIHBhc3NpbmcgYW4gZXhwbGljaXQgZmlsZSBwYXJhbWV0ZXIKKworLSBJc3N1ZSAjMTkzNzg6IHJlbW92ZWQgdGhlIG5vdC1hY3R1YWxseS1oZWxwZnVsIGFzc2VydEluc3RydWN0aW9uTWF0Y2hlcworICBhbmQgYXNzZXJ0Qnl0ZWNvZGVFeGFjdGx5TWF0Y2hlcyBoZWxwZXJzIGZyb20gYnl0ZWNvZGVfaGVscGVyCisKKy0gSXNzdWUgIzE4NzAyOiBBbGwgc2tpcHBlZCB0ZXN0cyBub3cgcmVwb3J0ZWQgYXMgc2tpcHBlZC4KKworLSBJc3N1ZSAjMTk0Mzk6IGludGVycHJldGVyIGVtYmVkZGluZyB0ZXN0cyBhcmUgbm93IGV4ZWN1dGVkIG9uIFdpbmRvd3MKKyAgKFBhdGNoIGJ5IFphY2hhcnkgV2FyZSkKKworLSBJc3N1ZSAjMTkwODU6IEFkZGVkIGJhc2ljIHRlc3RzIGZvciBhbGwgdGtpbnRlciB3aWRnZXQgb3B0aW9ucy4KKworLSBJc3N1ZSAxOTM4NDogRml4IHRlc3RfcHlfY29tcGlsZSBmb3Igcm9vdCB1c2VyLCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTgzMjY6IENsYXJpZnkgdGhhdCBsaXN0LnNvcnQncyBhcmd1bWVudHMgYXJlIGtleXdvcmQtb25seS4gIEFsc28sCisgIGF0dGVtcHQgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpbiB0aGUgZ2xvc3NhcnkgYnkgbm90IHNheWluZyB0aGVyZSBhcmUKKyAgZGlmZmVyZW50ICJ0eXBlcyIgb2YgYXJndW1lbnRzIGFuZCBwYXJhbWV0ZXJzLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTkzNTg6ICJtYWtlIGNsaW5pYyIgbm93IHJ1bnMgdGhlIEFyZ3VtZW50IENsaW5pYyBwcmVwcm9jZXNzb3IKKyAgb3ZlciBhbGwgQ1B5dGhvbiBzb3VyY2UgZmlsZXMuCisKKy0gVXBkYXRlIFNRTGl0ZSB0byAzLjguMSwgeHogdG8gNS4wLjUsIGFuZCBUY2wvVGsgdG8gOC42LjEgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTY2MzI6IEVuYWJsZSBERVAgYW5kIEFTTFIgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTc3OTE6IERyb3AgUFJFRklYIGFuZCBFWEVDX1BSRUZJWCBkZWZpbml0aW9ucyBmcm9tIFBDL3B5Y29uZmlnLmgKKworLSBBZGQgd29ya2Fyb3VuZCBmb3IgVlMgMjAxMCBubWFrZSBjbGVhbiBpc3N1ZS4gVlMgMjAxMCBkb2Vzbid0IHNldCB1cCBQQVRICisgIGZvciBubWFrZS5leGUgY29ycmVjdGx5LgorCistIElzc3VlICMxOTU1MDogSW1wbGVtZW50IFdpbmRvd3MgaW5zdGFsbGVyIGNoYW5nZXMgb2YgUEVQIDQ1MyAoZW5zdXJlcGlwKS4KKworLSBJc3N1ZSAjMTk1MjA6IEZpeCBjb21waWxlciB3YXJuaW5nIGluIHRoZSBfc2hhMyBtb2R1bGUgb24gMzJiaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTkzNTY6IEF2b2lkIHVzaW5nIGEgQyB2YXJpYWJsZWQgbmFtZWQgIl9zZWxmIiwgaXQncyBhIHJlc2VydmVkCisgIHdvcmQgaW4gc29tZSBDIGNvbXBpbGVycy4KKworLSBJc3N1ZSAjMTU3OTI6IENvcnJlY3QgYnVpbGQgb3B0aW9ucyBvbiBXaW42NC4gUGF0Y2ggYnkgSmVyZW15IEtsb3RoLgorCistIElzc3VlICMxOTM3MzogQXBwbHkgdXBzdHJlYW0gY2hhbmdlIHRvIFRrIDguNS4xNSBmaXhpbmcgT1MgWCAxMC45CisgIHNjcmVlbiByZWZyZXNoIHByb2JsZW0gZm9yIE9TIFggaW5zdGFsbGVyIGJ1aWxkLgorCistIElzc3VlICMxOTY0OTogT24gT1MgWCwgdGhlIHNhbWUgc2V0IG9mIGZpbGUgbmFtZXMgYXJlIG5vdyBpbnN0YWxsZWQKKyAgaW4gYmluIGRpcmVjdG9yaWVzIGZvciBhbGwgY29uZmlndXJhdGlvbnM6IG5vbi1mcmFtZXdvcmsgdnMgZnJhbWV3b3JrLAorICBhbmQgc2luZ2xlIGFyY2ggdnMgdW5pdmVyc2FsIGJ1aWxkcy4gIHB5dGhvbngueS0zMiBpcyBub3cgYWx3YXlzCisgIGluc3RhbGxlZCBmb3IgNjQtYml0LzMyLWJpdCB1bml2ZXJzYWwgYnVpbGRzLiAgVGhlIG9ic29sZXRlIGFuZAorICB1bmRvY3VtZW50ZWQgcHl0aG9udyogc3ltbGlua3MgYXJlIG5vIGxvbmdlciBpbnN0YWxsZWQgYW55d2hlcmUuCisKKy0gSXNzdWUgIzE5NTUzOiBQRVAgNDUzIC0gIm1ha2UgaW5zdGFsbCIgYW5kICJtYWtlIGFsdGluc3RhbGwiIG5vdyBpbnN0YWxsIG9yCisgIHVwZ3JhZGUgcGlwIGJ5IGRlZmF1bHQsIHVzaW5nIHRoZSBidW5kbGVkIHBpcCBwcm92aWRlZCBieSB0aGUgbmV3IGVuc3VyZXBpcAorICBtb2R1bGUuICBBIG5ldyBjb25maWd1cmUgb3B0aW9uLCAtLXdpdGgtZW5zdXJlcGlwWz11cGdyYWRlfGluc3RhbGx8bm9dLCBpcworICBhdmFpbGFibGUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZW5zdXJlcGlwICItLXVwZ3JhZGUiIG9wdGlvbi4gIFRoZSBvcHRpb24KKyAgY2FuIGFsc28gYmUgc2V0IHdpdGggIm1ha2UgW2FsdF1pbnN0YWxsIEVOU1VSRVBJUD1bdXBncmFkZXxpbnN0YWxsXG5vXSIuCisKKy0gSXNzdWUgIzE5NTUxOiBQRVAgNDUzIC0gdGhlIE9TIFggaW5zdGFsbGVyIG5vdyBpbnN0YWxscyBwaXAgYnkgZGVmYXVsdC4KKworLSBVcGRhdGUgdGhpcmQtcGFydHkgbGlicmFyaWVzIGZvciBPUyBYIGluc3RhbGxlcnM6CisgICAgeHogNS4wLjMgLT4gNS4wLjUKKyAgICBTUUxpdGUgMy43LjEzIC0+IDMuOC4xCisKKy0gSXNzdWUgIzE1NjYzOiBSZXZlcnQgT1MgWCBpbnN0YWxsZXIgYnVpbHQtaW4gVGNsL1RrIHN1cHBvcnQgZm9yIDMuNC4wYjEuCisgIFNvbWUgdGhpcmQtcGFydHkgcHJvamVjdHMsIHN1Y2ggYXMgTWF0cGxvdGxpYiBhbmQgUElML1BpbGxvdywKKyAgZGVwZW5kZWQgb24gYmVpbmcgYWJsZSB0byBidWlsZCB3aXRoIFRjbCBhbmQgVGsgZnJhbWV3b3JrcyBpbgorICAvTGlicmFyeS9GcmFtZXdvcmtzLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTk3MzA6IEFyZ3VtZW50IENsaW5pYyBub3cgc3VwcG9ydHMgYWxsIHRoZSBleGlzdGluZyBQeUFyZworICAiZm9ybWF0IHVuaXRzIiBhcyBsZWdhY3kgY29udmVydGVycywgYXMgd2VsbCBhcyB0d28gbmV3IGZlYXR1cmVzOgorICAic2VsZiBjb252ZXJ0ZXJzIiBhbmQgdGhlICJ2ZXJzaW9uIiBkaXJlY3RpdmUuCisKKy0gSXNzdWUgIzE5NTUyOiBweXZlbnYgbm93IGJvb3RzdHJhcHMgcGlwIGludG8gdmlydHVhbCBlbnZpcm9ubWVudHMgYnkKKyAgZGVmYXVsdCAocGFzcyAtLXdpdGhvdXQtcGlwIHRvIHJlcXVlc3QgdGhlIG9sZCBiZWhhdmlvdXIpCisKKy0gSXNzdWUgIzE5MzkwOiBBcmd1bWVudCBDbGluaWMgbm8gbG9uZ2VyIGFjY2VwdHMgbWFsZm9ybWVkIFB5dGhvbgorICBhbmQgQyBpZHMuCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEFscGhhIDQ/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMTAtMjAKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE5MzAxOiBHaXZlIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGFyZSBleHBsaWNpdGx5IG1hcmtlZCBnbG9iYWwgYQorICBnbG9iYWwgcXVhbG5hbWUuCisKKy0gSXNzdWUgIzE5Mjc5OiBVVEYtNyBkZWNvZGVyIG5vIGxvbmdlciBwcm9kdWNlcyBpbGxlZ2FsIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE2NjEyOiBBZGQgIkFyZ3VtZW50IENsaW5pYyIsIGEgY29tcGlsZS10aW1lIHByZXByb2Nlc3NvciBmb3IKKyAgQyBmaWxlcyB0byBnZW5lcmF0ZSBhcmd1bWVudCBwYXJzaW5nIGNvZGUuICAoU2VlIFBFUCA0MzYuKQorCistIElzc3VlICMxODgxMDogU2hpZnQgc3RhdCBjYWxscyBpbiBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgc3VjaCB0aGF0CisgIHRoZSBjb2RlIGlzIG9wdGltaXN0aWMgdGhhdCBpZiBzb21ldGhpbmcgZXhpc3RzIGluIGEgZGlyZWN0b3J5IG5hbWVkIGV4YWN0bHkKKyAgbGlrZSB0aGUgcG9zc2libGUgcGFja2FnZSBiZWluZyBzZWFyY2hlZCBmb3IgdGhhdCBpdCdzIGluIGFjdHVhbGl0eSBhCisgIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTg0MTY6IGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlciBub3cgdHJlYXRzICcnIGFzIHRoZSBjd2QgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciBubyBsb25nZXIgc3BlY2lhbC1jYXNlcyAnJyB0byAnLicuIFRoaXMgbGVhZHMKKyAgdG8gbW9kdWxlcyBpbXBvcnRlZCBmcm9tIGN3ZCB0byBub3cgcG9zc2VzcyBhbiBhYnNvbHV0ZSBmaWxlIHBhdGggZm9yCisgIF9fZmlsZV9fICh0aGlzIGRvZXMgbm90IGFmZmVjdCBtb2R1bGVzIHNwZWNpZmllZCBieSBwYXRoIG9uIHRoZSBDTEkgYnV0IGl0CisgIGRvZXMgYWZmZWN0IC1tL3J1bnB5KS4gSXQgYWxzbyBhbGxvd3MgRmlsZUZpbmRlciB0byBiZSBtb3JlIGNvbnNpc3RlbnQgYnkgbm90CisgIGhhdmluZyBhbiBlZGdlIGNhc2UuCisKKy0gSXNzdWUgIzQ1NTU6IEFsbCBleHBvcnRlZCBDIHN5bWJvbHMgYXJlIG5vdyBwcmVmaXhlZCB3aXRoIGVpdGhlcgorICAiUHkiIG9yICJfUHkiLgorCistIElzc3VlICMxOTIxOTogU3BlZWQgdXAgbWFyc2hhbC5sb2FkcygpLCBhbmQgbWFrZSBweWMgZmlsZXMgc2xpZ2h0bHkKKyAgKDUlIHRvIDEwJSkgc21hbGxlci4KKworLSBJc3N1ZSAjMTkyMjE6IFVwZ3JhZGUgVW5pY29kZSBkYXRhYmFzZSB0byB2ZXJzaW9uIDYuMy4wLgorCistIElzc3VlICMxNjc0MjogVGhlIHJlc3VsdCBvZiB0aGUgQyBjYWxsYmFjayBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyIG11c3QKKyAgbm93IGJlIGEgc3RyaW5nIGFsbG9jYXRlZCBieSBQeU1lbV9SYXdNYWxsb2MoKSBvciBQeU1lbV9SYXdSZWFsbG9jKCkgKG9yIE5VTEwKKyAgaWYgYW4gZXJyb3Igb2NjdXJyZWQpLCBpbnN0ZWFkIG9mIGEgc3RyaW5nIGFsbG9jYXRlZCBieSBQeU1lbV9NYWxsb2MoKSBvcgorICBQeU1lbV9SZWFsbG9jKCkuCisKKy0gSXNzdWUgIzE5MTk5OiBSZW1vdmUgYGBQeVRocmVhZFN0YXRlLnRpY2tfY291bnRlcmBgIGZpZWxkCisKKy0gRml4IG1hY3JvIGV4cGFuc2lvbiBvZiBfUHlFcnJfT0NDVVJSRUQoKSwgYW5kIG1ha2Ugc3VyZSB0byB1c2UgaXQgaW4gYXQKKyAgbGVhc3Qgb25lIHBsYWNlIHNvIGFzIHRvIGF2b2lkIHJlZ3Jlc3Npb25zLgorCistIElzc3VlICMxOTA4NzogSW1wcm92ZSBieXRlYXJyYXkgYWxsb2NhdGlvbiBpbiBvcmRlciB0byBhbGxvdyBjaGVhcCBwb3BwaW5nCisgIG9mIGRhdGEgYXQgdGhlIGZyb250IChzbGljZSBkZWxldGlvbikuCisKKy0gSXNzdWUgIzE5MDE0OiBtZW1vcnl2aWV3LmNhc3QoKSBpcyBub3cgYWxsb3dlZCBvbiB6ZXJvLWxlbmd0aCB2aWV3cy4KKworLSBJc3N1ZSAjMTg2OTA6IG1lbW9yeXZpZXcgaXMgbm93IGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJlZCB3aXRoCisgIGNvbGxlY3Rpb25zLmFiYy5TZXF1ZW5jZQorCistIElzc3VlICMxOTA3ODogbWVtb3J5dmlldyBub3cgY29ycmVjdGx5IHN1cHBvcnRzIHRoZSByZXZlcnNlZCBidWlsdGluCisgIChQYXRjaCBieSBDbGF1ZGl1IFBvcGEpCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTc0NTc6IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IG5vdyB3b3JrcyB3aXRoIG5hbWVzcGFjZSBwYWNrYWdlcy4KKyAgUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCiAtIElzc3VlICMxODIzNTogRml4IHRoZSBzeXNjb25maWcgdmFyaWFibGVzIExEU0hBUkVEIGFuZCBCTERTSEFSRUQgdW5kZXIgQUlYLgogICBQYXRjaCBieSBEYXZpZCBFZGVsc29obi4KIAorLSBJc3N1ZSAjMTg2MDY6IEFkZCB0aGUgbmV3ICJzdGF0aXN0aWNzIiBtb2R1bGUgKFBFUCA0NTApLiAgQ29udHJpYnV0ZWQKKyAgYnkgU3RldmVuIEQnQXByYW5vLgorCistIElzc3VlICMxMjg2NjogVGhlIGF1ZGlvb3AgbW9kdWxlIG5vdyBzdXBwb3J0cyAyNC1iaXQgc2FtcGxlcy4KKworLSBJc3N1ZSAjMTkyNTQ6IFByb3ZpZGUgYW4gb3B0aW1pemVkIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwYmtkZjJfaG1hYy4KKworLSBJc3N1ZXMgIzE5MjAxLCAjMTkyMjIsICMxOTIyMzogQWRkICJ4IiBtb2RlIChleGNsdXNpdmUgY3JlYXRpb24pIGluIG9wZW5pbmcKKyAgZmlsZSB0byBiejIsIGd6aXAgYW5kIGx6bWEgbW9kdWxlcy4gUGF0Y2hlcyBieSBUaW0gSGVhbmV5IGFuZCBWYWpyYXNreSBLb2suCisKKy0gRml4IGEgcmVmZXJlbmNlIGNvdW50IGxlYWsgaW4gX3NyZS4KKworLSBJc3N1ZSAjMTkyNjI6IEluaXRpYWwgY2hlY2sgaW4gb2YgdGhlICdhc3luY2lvJyBwYWNrYWdlIChhLmsuYS4gVHVsaXAsCisgIGEuay5hLiBQRVAgMzE1NikuICBUaGVyZSBhcmUgbm8gZG9jcyB5ZXQsIGFuZCB0aGUgUEVQIGlzIHNsaWdodGx5CisgIG91dCBvZiBkYXRlIHdpdGggdGhlIGNvZGUuICBUaGlzIG1vZHVsZSB3aWxsIGhhdmUgKnByb3Zpc2lvbmFsKiBzdGF0dXMKKyAgaW4gUHl0aG9uIDMuNC4KKwogLSBJc3N1ZSAjMTkyNzY6IEZpeGVkIHRoZSB3YXZlIG1vZHVsZSBvbiA2NC1iaXQgYmlnLWVuZGlhbiBwbGF0Zm9ybXMuCiAKKy0gSXNzdWUgIzE5MjY2OiBSZW5hbWUgdGhlIG5ldy1pbi0zLjQgYGBjb250ZXh0bGliLmlnbm9yZWBgIGNvbnRleHQgbWFuYWdlcgorICB0byBgYGNvbnRleHRsaWIuc3VwcHJlc3NgYCBpbiBvcmRlciB0byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBleGlzdGluZworICBkZXNjcmlwdGlvbnMgb2YgdGhhdCBvcGVyYXRpb24gZWxzZXdoZXJlIGluIHRoZSBsYW5ndWFnZSBhbmQgc3RhbmRhcmQKKyAgbGlicmFyeSBkb2N1bWVudGF0aW9uIChQYXRjaCBieSBaZXJvIFBpcmFldXMpLgorCistIElzc3VlICMxODg5MTogQ29tcGxldGVkIHRoZSBuZXcgZW1haWwgcGFja2FnZSAocHJvdmlzaW9uYWwpIEFQSSBhZGRpdGlvbnMKKyAgYnkgYWRkaW5nIG5ldyBjbGFzc2VzIEVtYWlsTWVzc2FnZSwgTUlNRVBhcnQsIGFuZCBDb250ZW50TWFuYWdlci4KKworLSBJc3N1ZSAjMTgyODE6IFVudXNlZCBzdGF0IGNvbnN0YW50cyByZW1vdmVkIGZyb20gYHRhcmZpbGVgLgorCistIElzc3VlICMxODQ2ODogVGhlIHJlLnNwbGl0LCByZS5maW5kYWxsLCBhbmQgcmUuc3ViIGZ1bmN0aW9ucyBhbmQgdGhlIGdyb3VwKCkKKyAgYW5kIGdyb3VwcygpIG1ldGhvZHMgb2YgbWF0Y2ggb2JqZWN0IG5vdyBhbHdheXMgcmV0dXJuIGEgc3RyaW5nIG9yIGEgYnl0ZXMKKyAgb2JqZWN0LgorCistIElzc3VlICMxODcyNTogVGhlIHRleHR3cmFwIG1vZHVsZSBub3cgc3VwcG9ydHMgdHJ1bmNhdGluZyBtdWx0aWxpbmUgdGV4dC4KKwogLSBJc3N1ZSAjMTg3NzY6IGF0ZXhpdCBjYWxsYmFja3Mgbm93IGRpc3BsYXkgdGhlaXIgZnVsbCB0cmFjZWJhY2sgd2hlbiB0aGV5CiAgIHJhaXNlIGFuIGV4Y2VwdGlvbi4KIAogLSBJc3N1ZSAjMTc4Mjc6IEFkZCB0aGUgbWlzc2luZyBkb2N1bWVudGF0aW9uIGZvciBgYGNvZGVjcy5lbmNvZGVgYCBhbmQKICAgYGBjb2RlY3MuZGVjb2RlYGAuCiAKLS0gSXNzdWUgIzE4NDU4OiBQcmV2ZW50IGNyYXNoZXMgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBsaWJlZGl0LiAgSXRzIHJlYWRsaW5lCi0gIGVtdWxhdGlvbiBoYXMgY2hhbmdlZCBmcm9tIDAtYmFzZWQgaW5kZXhpbmcgdG8gMS1iYXNlZCBsaWtlIGdudSByZWFkbGluZS4KLSAgT3JpZ2luYWwgcGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuLgorLSBJc3N1ZSAjMTkyMTg6IFJlbmFtZSBjb2xsZWN0aW9ucy5hYmMgdG8gX2NvbGxlY3Rpb25zX2FiYyBpbiBvcmRlciB0bworICBzcGVlZCB1cCBpbnRlcnByZXRlciBzdGFydC4KIAotLSBJc3N1ZSAjMTg5MTk6IElmIHRoZSBjbG9zZSgpIG1ldGhvZCBvZiBhIHdyaXRlciBpbiB0aGUgc3VuYXUgb3Igd2F2ZSBtb2R1bGUKLSAgZmFpbGVkLCBzZWNvbmQgaW52b2NhdGlvbiBvZiBjbG9zZSgpIGFuZCBkZXN0cnVjdG9yIG5vIG1vcmUgcmFpc2UgYW4KLSAgZXhjZXB0aW9uLgorLSBJc3N1ZSAjMTg1ODI6IEFkZCAncGJrZGYyX2htYWMnIHRvIHRoZSBoYXNobGliIG1vZHVsZS4gSXQgaW1wbGVtZW50cyBQS0NTIzUKKyAgcGFzc3dvcmQtYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb25zIHdpdGggSE1BQyBhcyBwc2V1ZG9yYW5kb20gZnVuY3Rpb24uCiAKIC0gSXNzdWUgIzE5MTMxOiBUaGUgYWlmYyBtb2R1bGUgbm93IGNvcnJlY3RseSByZWFkcyBhbmQgd3JpdGVzIHNhbXB3aWR0aCBvZgogICBjb21wcmVzc2VkIHN0cmVhbXMuCiAKKy0gSXNzdWUgIzE5MjA5OiBSZW1vdmUgaW1wb3J0IG9mIGNvcHlyZWcgZnJvbSB0aGUgb3MgbW9kdWxlIHRvIHNwZWVkIHVwCisgIGludGVycHJldGVyIHN0YXJ0dXAuIHN0YXRfcmVzdWx0IGFuZCBzdGF0dmZzX3Jlc3VsdCBhcmUgbm93IGhhcmQtY29kZWQgdG8KKyAgcmVzaWRlIGluIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzE5MjA1OiBEb24ndCBpbXBvcnQgdGhlICdyZScgbW9kdWxlIGluIHNpdGUgYW5kIHN5c2NvbmZpZyBtb2R1bGUgdG8KKyAgdG8gc3BlZWQgdXAgaW50ZXJwcmV0ZXIgc3RhcnQuCisKKy0gSXNzdWUgIzk1NDg6IEFkZCBhIG1pbmltYWwgIl9ib290bG9jYWxlIiBtb2R1bGUgdGhhdCBpcyBpbXBvcnRlZCBieSB0aGUKKyAgX2lvIG1vZHVsZSBpbnN0ZWFkIG9mIHRoZSBmdWxsIGxvY2FsZSBtb2R1bGUuCisKKy0gSXNzdWUgIzE4NzY0OiByZW1vdmUgdGhlICdwcmludCcgYWxpYXMgZm9yIHRoZSBQREIgJ3AnIGNvbW1hbmQgc28gdGhhdCBpdCBubworICBsb25nZXIgc2hhZG93cyB0aGUgcHJpbnQgZnVuY3Rpb24uCisKIC0gSXNzdWUgIzE5MTU4OiAgYSByYXJlIHJhY2UgaW4gQm91bmRlZFNlbWFwaG9yZSBjb3VsZCBhbGxvdyAucmVsZWFzZSgpIHRvbwogICBvZnRlbi4KIAorLSBJc3N1ZSAjMTU4MDU6IEFkZCBjb250ZXh0bGliLnJlZGlyZWN0X3N0ZG91dCgpLgorCistIElzc3VlICMxODcxNjogRGVwcmVjYXRlIHRoZSBmb3JtYXR0ZXIgbW9kdWxlLgorCistIElzc3VlICMxMDcxMjogMnRvMyBoYXMgYSBuZXcgImFzc2VydHMiIGZpeGVyIHRoYXQgcmVwbGFjZXMgZGVwcmVjYXRlZCBuYW1lcworICBvZiB1bml0dGVzdCBtZXRob2RzIChlLmcuIGZhaWxVbmxlc3NFcXVhbCAtPiBhc3NlcnRFcXVhbCkuCisKIC0gSXNzdWUgIzE4MDM3OiAydG8zIG5vdyBlc2NhcGVzICdcdScgYW5kICdcVScgaW4gbmF0aXZlIHN0cmluZ3MuCiAKKy0gSXNzdWUgIzE3ODM5OiBiYXNlNjQuZGVjb2RlYnl0ZXMgYW5kIGJhc2U2NC5lbmNvZGVieXRlcyBub3cgYWNjZXB0IGFueQorICBvYmplY3QgdGhhdCBleHBvcnRzIGEgMSBkaW1lbnNpb25hbCBhcnJheSBvZiBieXRlcyAodGhpcyBtZWFucyB0aGUgc2FtZQorICBpcyBub3cgYWxzbyB0cnVlIGZvciBiYXNlNjRfY29kZWMpCisKKy0gSXNzdWUgIzE5MTMyOiBUaGUgcHByaW50IG1vZHVsZSBub3cgc3VwcG9ydHMgY29tcGFjdCBtb2RlLgorCiAtIElzc3VlICMxOTEzNzogVGhlIHBwcmludCBtb2R1bGUgbm93IGNvcnJlY3RseSBmb3JtYXRzIGluc3RhbmNlcyBvZiBzZXQgYW5kCiAgIGZyb3plbnNldCBzdWJjbGFzc2VzLgogCistIElzc3VlICMxMDA0MjogZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nIG5vdyBjb3JyZWN0bHkgaGFuZGxlcworICBOb3RJbXBsZW1lbnRlZCBiZWluZyByZXR1cm5lZCBieSB0aGUgdW5kZXJseWluZyBjb21wYXJpc29uIGZ1bmN0aW9uIChQYXRjaAorICBieSBLYXRpZSBNaWxsZXIpCisKIC0gSXNzdWUgIzE5MDkyOiBjb250ZXh0bGliLkV4aXRTdGFjayBub3cgY29ycmVjdGx5IHJlcmFpc2VzIGV4Y2VwdGlvbnMKICAgZnJvbSB0aGUgX19leGl0X18gY2FsbGJhY2tzIG9mIGlubmVyIGNvbnRleHQgbWFuYWdlcnMgKFBhdGNoIGJ5IEhydm9qZQogICBOaWvFoWnEhykKQEAgLTcxOSwxNSArMTU1Niw4OSBAQAogLSBJc3N1ZSAjMTI2NDE6IEF2b2lkIHBhc3NpbmcgIi1tbm8tY3lnd2luIiB0byB0aGUgbWluZ3czMiBjb21waWxlciwgZXhjZXB0CiAgIHdoZW4gbmVjZXNzYXJ5LiAgUGF0Y2ggYnkgT3NjYXIgQmVuamFtaW4uCiAKLS0gSXNzdWUgIzE4NTk0OiBUaGUgZmFzdCBwYXRoIGZvciBjb2xsZWN0aW9ucy5Db3VudGVyKCkgd2FzIG5ldmVyIHRha2VuCi0gIGR1ZSB0byBhbiBvdmVyLXJlc3RyaWN0aXZlIHR5cGUgY2hlY2suICBBbmQgdGhlIGZhbGxiYWNrIHBhdGggZGlkCi0gIG5vdCBpbXBsZW1lbnQgdGhlIHNhbWUgYWxnb3JpdGhtIGFzIHRoZSBwdXJlIHB5dGhvbiBjb2RlLgorLSBJc3N1ZSAjNTg0NTogSW4gc2l0ZS5weSwgb25seSBsb2FkIHJlYWRsaW5lIGhpc3RvcnkgZnJvbSB+Ly5weXRob25faGlzdG9yeQorICBpZiBubyBoaXN0b3J5IGhhcyBiZWVuIHJlYWQgYWxyZWFkeS4gIFRoaXMgYXZvaWRzIGRvdWJsZSB3cml0ZXMgdG8gdGhlCisgIGhpc3RvcnkgZmlsZSBhdCBzaHV0ZG93bi4KIAogLSBQcm9wZXJseSBpbml0aWFsaXplIGFsbCBmaWVsZHMgb2YgYSBTU0wgb2JqZWN0IGFmdGVyIGFsbG9jYXRpb24uCiAKKy0gSXNzdWUgIzE5MDk1OiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoKSBub3cgcmFpc2VzIFZhbHVlRXJyb3Igd2hlbiB0aGUKKyAgU1NMIGhhbmRzaGFrZSBoYXNuJ3QgYmVlbiBkb25lLgorCiAtIElzc3VlICM0MzY2OiBGaXggYnVpbGRpbmcgZXh0ZW5zaW9ucyBvbiBhbGwgcGxhdGZvcm1zIHdoZW4gLS1lbmFibGUtc2hhcmVkCiAgIGlzIHVzZWQuCiAKKy0gSXNzdWUgIzE5MDMwOiBGaXhlZCBgaW5zcGVjdC5nZXRtZW1iZXJzYCBhbmQgYGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnNgCisgIHRvIGF0dGVtcHQgYWN0aXZhdGluZyBkZXNjcmlwdG9ycyBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIGEgX19kaWN0X18gc2VhcmNoCisgIGZvciBmYXVsdHkgZGVzY3JpcHRvcnMuICBgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRyc2Agbm8gbG9uZ2VyIHJldHVybnMKKyAgQXR0cmlidXRlcyB3aG9zZSBob21lIGNsYXNzIGlzIE5vbmUuCisKK0MgQVBJCistLS0tLQorCistIElzc3VlICMxNzcyNjczOiBUaGUgdHlwZSBvZiBgY2hhcipgIGFyZ3VtZW50cyBub3cgY2hhbmdlZCB0byBgY29uc3QgY2hhcipgLgorCistIElzc3VlICMxNjEyOTogQWRkZWQgYSBgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZ2AgcHJlLWluaXRpYWxpemF0aW9uIEFQSQorICB0byBhbGxvdyBlbWJlZGRpbmcgYXBwbGljYXRpb25zIGxpa2UgQmxlbmRlciB0byBmb3JjZSBhIHBhcnRpY3VsYXIKKyAgZW5jb2RpbmcgYW5kIGVycm9yIGhhbmRsZXIgZm9yIHRoZSBzdGFuZGFyZCBJTyBzdHJlYW1zIChpbml0aWFsIHBhdGNoIGJ5CisgIEJhc3RpZW4gTW9udGFnbmUpCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxOTI3NTogRml4IHRlc3Rfc2l0ZSBvbiBBTUQ2NCBTbm93IExlb3BhcmQKKworLSBJc3N1ZSAjMTQ0MDc6IEZpeCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSBpbiB0ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy4KKworLSBJc3N1ZSAjMTg5MTk6IFVuaWZpZWQgYW5kIGV4dGVuZGVkIHRlc3RzIGZvciBhdWRpbyBtb2R1bGVzOiBhaWZjLCBzdW5hdSBhbmQKKyAgd2F2ZS4KKworLSBJc3N1ZSAjMTg3MTQ6IEFkZGVkIHRlc3RzIGZvciBgYHBkYi5maW5kX2Z1bmN0aW9uKClgYC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODc1ODogRml4ZWQgYW5kIGltcHJvdmVkIGNyb3NzLXJlZmVyZW5jZXMuCisKKy0gSXNzdWUgIzE4OTcyOiBNb2Rlcm5pemUgZW1haWwgZXhhbXBsZXMgYW5kIHVzZSB0aGUgYXJncGFyc2UgbW9kdWxlIGluIHRoZW0uCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxOTEzMDogQ29ycmVjdCBQQ2J1aWxkL3JlYWRtZS50eHQsIFB5dGhvbiAzLjMgYW5kIDMuNCByZXF1aXJlIFZTIDIwMTAuCisKKy0gSXNzdWUgIzE1NjYzOiBVcGRhdGUgT1MgWCAxMC42KyBpbnN0YWxsZXIgdG8gdXNlIFRjbC9UayA4LjUuMTUuCisKKy0gSXNzdWUgIzE0NDk5OiBGaXggc2V2ZXJhbCBwcm9ibGVtcyB3aXRoIE9TIFggdW5pdmVyc2FsIGJ1aWxkIHN1cHBvcnQ6CisgICAgMS4gcHBjIGFyY2ggZGV0ZWN0aW9uIGZvciBleHRlbnNpb24gbW9kdWxlIGJ1aWxkcyBicm9rZSB3aXRoIFhjb2RlIDUKKyAgICAyLiBwcGMgYXJjaCBkZXRlY3Rpb24gaW4gY29uZmlndXJlIGRpZCBub3Qgd29yayBvbiBPUyBYIDEwLjQKKyAgICAzLiAtc3lzcm9vdCBhbmQgLWFyY2ggZmxhZ3Mgd2VyZSB1bm5lY2Vzc2FyaWx5IGR1cGxpY2F0ZWQKKyAgICA0LiB0aGVyZSB3YXMgbm8gb2J2aW91cyB3YXkgdG8gY29uZmlndXJlIGFuIGludGVsLTMyIG9ubHkgYnVpbGQuCisKKy0gSXNzdWUgIzE5MDE5OiBDaGFuZ2UgdGhlIE9TIFggaW5zdGFsbGVyIGJ1aWxkIHNjcmlwdCB0byB1c2UgQ0ZMQUdTIGluc3RlYWQKKyAgb2YgT1BUIGZvciBzcGVjaWFsIGJ1aWxkIG9wdGlvbnMuICBCeSBzZXR0aW5nIE9QVCwgc29tZSBjb21waWxlci1zcGVjaWZpYworICBvcHRpb25zIGxpa2UgLWZ3cmFwdiB3ZXJlIG92ZXJyaWRkZW4gYW5kIHRodXMgbm90IHVzZWQsIHdoaWNoIGNvdWxkIHJlc3VsdAorICBpbiBicm9rZW4gaW50ZXJwcmV0ZXJzIHdoZW4gYnVpbGRpbmcgd2l0aCBjbGFuZy4KKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQWxwaGEgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxMy0wOS0yOQorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg4MTg6IFRoZSAiZW5jb2RpbmduYW1lIiBwYXJ0IG9mIFBZVEhPTklPRU5DT0RJTkcgaXMgbm93IG9wdGlvbmFsLgorCistIElzc3VlICMxOTA5ODogUHJldmVudCBvdmVyZmxvdyBpbiB0aGUgY29tcGlsZXIgd2hlbiB0aGUgcmVjdXJzaW9uIGxpbWl0IGlzIHNldAorICBhYnN1cmRseSBoaWdoLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE4OTI5OiBgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycygpYCBub3cgY29ycmVjdGx5IGZpbmRzIGNsYXNzCisgIGF0dHJpYnV0ZXMgcmV0dXJuZWQgYnkgYGRpcigpYCB0aGF0IGFyZSBsb2NhdGVkIGluIHRoZSBtZXRhY2xhc3MuCisKIC0gSXNzdWUgIzE4OTUwOiBGaXggbWlzY2VsbGFuZW91cyBidWdzIGluIHRoZSBzdW5hdSBtb2R1bGUuCiAgIEF1X3JlYWQucmVhZGZyYW1lcygpIG5vdyB1cGRhdGVzIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiBhbmQgcmVhZHMgY29ycmVjdAogICBudW1iZXIgb2YgZnJhbWVzIGZyb20gbXVsdGljaGFubmVsIHN0cmVhbS4gIEF1X3dyaXRlLndyaXRlZnJhbWVzcmF3KCkgbm93CkBAIC03MzUsMTcgKzE2NDYsMjkgQEAKICAgaW50ZWdlciAoYXMgaW4gUHl0aG9uIDIpLiAgQXVfcmVhZCBhbmQgQXVfd3JpdGUgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIGZpbGUKICAgb2JqZWN0IGlmIHN0YXJ0IGZpbGUgcG9zaXRpb24gaXMgbm90IGEgemVyby4KIAorLSBJc3N1ZSAjMTg1OTQ6IFRoZSBmYXN0IHBhdGggZm9yIGNvbGxlY3Rpb25zLkNvdW50ZXIoKSB3YXMgbmV2ZXIgdGFrZW4KKyAgZHVlIHRvIGFuIG92ZXItcmVzdHJpY3RpdmUgdHlwZSBjaGVjay4KKwogLSBJc3N1ZSAjMTkwNTM6IFppcEV4dEZpbGUucmVhZDEoKSB3aXRoIG5vbi16ZXJvIGFyZ3VtZW50IG5vIG1vcmUgcmV0dXJucyBlbXB0eQogICBieXRlcyB1bnRpbCBlbmQgb2YgZGF0YS4KIAotLSBJc3N1ZSAjMTkwMjg6IEZpeGVkIHRraW50ZXIuVGthcHAubWVyZ2UoKSBmb3Igbm9uLXN0cmluZyBhcmd1bWVudHMuCistIGxvZ2dpbmc6IGFkZGVkIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHMgdG8gU29ja2V0SGFuZGxlciBhbmQKKyAgRGF0YWdyYW1IYW5kbGVyLgorCistIElzc3VlICMxODk5NjogVGVzdENhc2UuYXNzZXJ0RXF1YWwoKSBub3cgbW9yZSBjbGV2ZXJseSBzaG9ydGVuIGRpZmZlcmluZworICBzdHJpbmdzIGluIGVycm9yIHJlcG9ydC4KKworLSBJc3N1ZSAjMTkwMzQ6IHJlcHIoKSBmb3IgdGtpbnRlci5UY2xfT2JqIG5vdyBleHBvc2VzIHN0cmluZyByZXBlcmVzZW50YXRpb24uCisKKy0gSXNzdWUgIzE4OTc4OiBgYHVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgYCBub3cgYWxsb3dzIHRoZSBtZXRob2QgdG8gYmUKKyAgaW5kaWNhdGVkIG9uIHRoZSBjbGFzcyBhbmQgbm8gbG9uZ2VyIHNldHMgaXQgdG8gTm9uZSBpbiBgYF9faW5pdF9fYGAuCisKKy0gSXNzdWUgIzE4NjI2OiB0aGUgaW5zcGVjdCBtb2R1bGUgbm93IG9mZmVycyBhIGJhc2ljIGNvbW1hbmQgbGluZQorICBpbnRyb3NwZWN0aW9uIGludGVyZmFjZSAoSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEpCiAKIC0gSXNzdWUgIzMwMTU6IEZpeGVkIHRraW50ZXIgd2l0aCB3YW50b2JqZWN0PUZhbHNlLiAgQW55IFRjbCBjb21tYW5kIGNhbGwKICAgcmV0dXJuZWQgZW1wdHkgc3RyaW5nLgogCi0tIElzc3VlICMxODA1MDogRml4ZWQgYW4gaW5jb21wYXRpYmlsaXR5IG9mIHRoZSByZSBtb2R1bGUgd2l0aCBQeXRob24gMy4zLjAKLSAgYmluYXJpZXMuCi0KIC0gSXNzdWUgIzE5MDM3OiBUaGUgbWFpbGJveCBtb2R1bGUgbm93IG1ha2VzIGFsbCBjaGFuZ2VzIHRvIG1haWxkaXIgZmlsZXMKICAgYmVmb3JlIG1vdmluZyB0aGVtIGludG8gcGxhY2UsIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIHByb2dyYW1zCiAgIHRoYXQgbWF5IGJlIGFjY2Vzc2luZyB0aGUgbWFpbGRpciBkaXJlY3RvcnkuCkBAIC03NTksNiArMTY4MiwxMiBAQAogLSBJc3N1ZSAjMTg4NzM6IFRoZSB0b2tlbml6ZSBtb2R1bGUgbm93IGRldGVjdHMgUHl0aG9uIHNvdXJjZSBjb2RlIGVuY29kaW5nCiAgIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KIAorLSBJc3N1ZSAjMTc3NjQ6IEVuYWJsZSBodHRwLnNlcnZlciB0byBiaW5kIHRvIGEgdXNlciBzcGVjaWZpZWQgbmV0d29yaworICBpbnRlcmZhY2UuICBQYXRjaCBjb250cmlidXRlZCBieSBNYWx0ZSBTd2FydC4KKworLSBJc3N1ZSAjMTg5Mzc6IEFkZCBhbiBhc3NlcnRMb2dzKCkgY29udGV4dCBtYW5hZ2VyIHRvIHVuaXR0ZXN0LlRlc3RDYXNlCisgIHRvIGVuc3VyZSB0aGF0IGEgYmxvY2sgb2YgY29kZSBlbWl0cyBhIG1lc3NhZ2UgdXNpbmcgdGhlIGxvZ2dpbmcgbW9kdWxlLgorCiAtIElzc3VlICMxNzMyNDogRml4IGh0dHAuc2VydmVyJ3MgcmVxdWVzdCBoYW5kbGluZyBjYXNlIG9uIHRyYWlsaW5nICcvJy4gUGF0Y2gKICAgY29udHJpYnV0ZWQgYnkgVmFqcmFza3kgS29rLgogCkBAIC03NjksMzMgKzE2OTgsMTY5IEBACiAgIGlmIGFsbCBuZWNlc3NhcnkgZnVuY3Rpb25zIGFyZSBhbHJlYWR5IGZvdW5kIGluIGxpYnV1aWQuCiAgIFBhdGNoIGJ5IEV2Z2VueSBTb2xvZ3Vib3YuCiAKKy0gVGhlIDplbnZ2YXI6YFBZVEhPTkZBVUxUSEFORExFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgbm93IG9ubHkgZW5hYmxlcyB0aGUKKyAgZmF1bHRoYW5kbGVyIG1vZHVsZSBpZiB0aGUgdmFyaWFibGUgaXMgbm9uLWVtcHR5LiBTYW1lIGJlaGF2aW91ciB0aGFuIG90aGVyCisgIHZhcmlhYmxlcyBsaWtlIDplbnZ2YXI6YFBZVEhPTkRPTlRXUklURUJZVEVDT0RFYC4KKworLSBJc3N1ZSAjMTU2NTUyNTogTmV3IGZ1bmN0aW9uIGBgdHJhY2ViYWNrLmNsZWFyX2ZyYW1lc2BgIHdpbGwgY2xlYXIKKyAgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiBhbGwgdGhlIHN0YWNrIGZyYW1lcyByZWZlcmVuY2VkIGJ5IGEgdHJhY2ViYWNrCisgIG9iamVjdC4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE4OTUyOiBGaXggcmVncmVzc2lvbiBpbiBzdXBwb3J0IGRhdGEgZG93bmxvYWRzIGludHJvZHVjZWQgd2hlbgorICB0ZXN0LnN1cHBvcnQgd2FzIGNvbnZlcnRlZCB0byBhIHBhY2thZ2UuIFJlZ3Jlc3Npb24gbm90aWNlZCBieSBaYWNoYXJ5CisgIFdhcmUuCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMTg4NzM6IElETEUgbm93IGRldGVjdHMgUHl0aG9uIHNvdXJjZSBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudAorICBsaW5lcy4KKworLSBJc3N1ZSAjMTg5ODg6IFRoZSAiVGFiIiBrZXkgbm93IHdvcmtzIHdoZW4gYSB3b3JkIGlzIGFscmVhZHkgYXV0b2NvbXBsZXRlZC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNzAwMzogVW5pZmllZCB0aGUgc2l6ZSBhcmd1bWVudCBuYW1lcyBpbiB0aGUgaW8gbW9kdWxlIHdpdGggY29tbW9uCisgIHByYWN0aWNlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTg1OTY6IFN1cHBvcnQgdGhlIHVzZSBvZiBhZGRyZXNzIHNhbml0eSBjaGVja2luZyBpbiByZWNlbnQgdmVyc2lvbnMKKyAgb2YgY2xhbmcgYW5kIEdDQyBieSBhcHByb3ByaWF0ZWx5IG1hcmtpbmcga25vd24gZmFsc2UgYWxhcm1zIGluIHRoZSBzbWFsbAorICBvYmplY3QgYWxsb2NhdG9yLiBQYXRjaCBjb250cmlidXRlZCBieSBEaGlydSBLaG9saWEuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxODg3MzogMnRvMyBhbmQgdGhlIGZpbmRub2NvZGluZy5weSBzY3JpcHQgbm93IGRldGVjdCBQeXRob24gc291cmNlCisgIGNvZGUgZW5jb2Rpbmcgb25seSBpbiBjb21tZW50IGxpbmVzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEFscGhhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMDktMDkKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4OTQyOiBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKSBvdXRwdXQgd2FzIGRhbWFnZWQgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTg3ODA6ICUtZm9ybWF0dGluZyBub3cgcHJpbnRzIHZhbHVlIGluc3RlYWQgb2Ygc3RyIGZvcgorICBpbnQgc3ViY2xhc3NlcyB3aGVuIHVzaW5nICVkLCAlaSwgYW5kICV1IGNvZGVzLgorCistIElzc3VlICMxODU3MTogSW1wbGVtZW50YXRpb24gb2YgdGhlIFBFUCA0NDY6IGZpbGUgZGVzY3JpcHRvcnMgYW5kIGZpbGUKKyAgaGFuZGxlcyBhcmUgbm93IGNyZWF0ZWQgbm9uLWluaGVyaXRhYmxlOyBhZGQgZnVuY3Rpb25zCisgIG9zLmdldC9zZXRfaW5oZXJpdGFibGUoKSwgb3MuZ2V0L3NldF9oYW5kbGVfaW5oZXJpdGFibGUoKSBhbmQKKyAgc29ja2V0LnNvY2tldC5nZXQvc2V0X2luaGVyaXRhYmxlKCkuCisKKy0gSXNzdWUgIzExNjE5OiBUaGUgcGFyc2VyIGFuZCB0aGUgaW1wb3J0IG1hY2hpbmVyeSBkbyBub3QgZW5jb2RlIFVuaWNvZGUKKyAgZmlsZW5hbWVzIGFueW1vcmUgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTg4MDg6IE5vbi1kYWVtb24gdGhyZWFkcyBhcmUgbm93IGF1dG9tYXRpY2FsbHkgam9pbmVkIHdoZW4KKyAgYSBzdWItaW50ZXJwcmV0ZXIgaXMgc2h1dGRvd24gKGl0IHdvdWxkIHByZXZpb3VzbHkgZHVtcCBhIGZhdGFsIGVycm9yKS4KKworLSBSZW1vdmUgc3VwcG9ydGluZyBmb3IgY29tcGlsaW5nIG9uIHN5c3RlbXMgd2l0aG91dCBnZXRjd2QoKS4KKworLSBJc3N1ZSAjMTg3NzQ6IFJlbW92ZSBsYXN0IGJpdHMgb2YgR05VIFBUSCB0aHJlYWQgY29kZSBhbmQgdGhyZWFkX3B0aC5oLgorCistIElzc3VlICMxODc3MTogQWRkIG9wdGltaXphdGlvbiB0byBzZXQgb2JqZWN0IGxvb2t1cHMgdG8gcmVkdWNlIHRoZSBjb3N0CisgIG9mIGhhc2ggY29sbGlzaW9ucy4gIFRoZSBjb3JlIGlkZWEgaXMgdG8gaW5zcGVjdCBhIHNlY29uZCBrZXkvaGFzaCBwYWlyCisgIGZvciBlYWNoIGNhY2hlIGxpbmUgcmV0cmlldmVkLgorCistIElzc3VlICMxNjEwNTogV2hlbiBhIHNpZ25hbCBoYW5kbGVyIGZhaWxzIHRvIHdyaXRlIHRvIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyAgcmVnaXN0ZXJlZCB3aXRoIGBgc2lnbmFsLnNldF93YWtldXBfZmQoKWBgLCByZXBvcnQgYW4gZXhjZXB0aW9uIGluc3RlYWQKKyAgb2YgaWdub3JpbmcgdGhlIGVycm9yLgorCistIElzc3VlICMxODcyMjogUmVtb3ZlIHVzZXMgb2YgdGhlICJyZWdpc3RlciIga2V5d29yZCBpbiBDIGNvZGUuCisKKy0gSXNzdWUgIzE4NjY3OiBBZGQgbWlzc2luZyAiSEFWRV9GQ0hPV05BVCIgc3ltYm9sIHRvIHBvc2l4Ll9oYXZlX2Z1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTY0OTk6IEFkZCBjb21tYW5kIGxpbmUgb3B0aW9uIGZvciBpc29sYXRlZCBtb2RlLgorCistIElzc3VlICMxNTMwMTogUGFyc2luZyBmZCwgdWlkLCBhbmQgZ2lkIHBhcmFtZXRlcnMgZm9yIGJ1aWx0aW5zCisgIGluIE1vZHVsZXMvcG9zaXhtb2R1bGUuYyBpcyBub3cgZmFyIG1vcmUgcm9idXN0LgorCistIElzc3VlICMxODM2ODogUHlPU19TdGRpb1JlYWRsaW5lKCkgbm8gbG9uZ2VyIGxlYWtzIG1lbW9yeSB3aGVuIHJlYWxsb2MoKQorICBmYWlsLgorCistIElzc3VlICMxNzkzNDogQWRkIGEgY2xlYXIoKSBtZXRob2QgdG8gZnJhbWUgb2JqZWN0cywgdG8gaGVscCBjbGVhbiB1cAorICBleHBlbnNpdmUgZGV0YWlscyAobG9jYWwgdmFyaWFibGVzKSBhbmQgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KKworLSBJc3N1ZSAjMTg3ODA6ICUtZm9ybWF0dGluZyBjb2RlcyAlZCwgJWksIGFuZCAldSBub3cgdHJlYXQgaW50LXN1YmNsYXNzZXMKKyAgYXMgaW50IChkaXNwbGF5cyB2YWx1ZSBvZiBpbnQtc3ViY2xhc3MgaW5zdGVhZCBvZiBzdHIoaW50LXN1YmNsYXNzKSApLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE4ODA4OiBUaHJlYWQuam9pbigpIG5vdyB3YWl0cyBmb3IgdGhlIHVuZGVybHlpbmcgdGhyZWFkIHN0YXRlIHRvCisgIGJlIGRlc3Ryb3llZCBiZWZvcmUgcmV0dXJuaW5nLiAgVGhpcyBwcmV2ZW50cyB1bnByZWRpY3RhYmxlIGFib3J0cyBpbgorICBQeV9FbmRJbnRlcnByZXRlcigpIHdoZW4gc29tZSBub24tZGFlbW9uIHRocmVhZHMgYXJlIHN0aWxsIHJ1bm5pbmcuCisKKy0gSXNzdWUgIzE4NDU4OiBQcmV2ZW50IGNyYXNoZXMgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBsaWJlZGl0LiAgSXRzIHJlYWRsaW5lCisgIGVtdWxhdGlvbiBoYXMgY2hhbmdlZCBmcm9tIDAtYmFzZWQgaW5kZXhpbmcgdG8gMS1iYXNlZCBsaWtlIGdudSByZWFkbGluZS4KKworLSBJc3N1ZSAjMTg4NTI6IEhhbmRsZSBjYXNlIG9mIGBgcmVhZGxpbmUuX19kb2NfX2BgIGJlaW5nIGBgTm9uZWBgIGluIHRoZSBuZXcKKyAgcmVhZGxpbmUgYWN0aXZhdGlvbiBjb2RlIGluIGBgc2l0ZS5weWBgLgorCiAtIElzc3VlICMxODY3MjogRml4ZWQgZm9ybWF0IHNwZWNpZmllcnMgZm9yIFB5X3NzaXplX3QgaW4gZGVidWdnaW5nIG91dHB1dCBpbgogICB0aGUgX3NyZSBtb2R1bGUuCiAKIC0gSXNzdWUgIzE4ODMwOiBpbnNwZWN0LmdldGNsYXNzdHJlZSgpIG5vIG1vcmUgcHJvZHVjZXMgZHVwbGljYXRlZCBlbnRyaWVzIGV2ZW4KICAgd2hlbiBpbnB1dCBsaXN0IGNvbnRhaW5zIGR1cGxpY2F0ZXMuCiAKKy0gSXNzdWUgIzE4ODc4OiBzdW5hdS5vcGVuIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLiAgQmFzZWQgb24KKyAgcGF0Y2hlcyBieSBDbGF1ZGl1IFBvcGEgYW5kIFIuIERhdmlkIE11cnJheS4KKwogLSBJc3N1ZSAjMTg5MDk6IEZpeCBfdGtpbnRlci50a2FwcC5pbnRlcnBhZGRyKCkgb24gV2luZG93cyA2NC1iaXQsIGRvbid0IGNhc3QKICAgNjQtYml0IHBvaW50ZXIgdG8gbG9uZyAoMzIgYml0cykuCiAKIC0gSXNzdWUgIzE4ODc2OiBUaGUgRmlsZUlPLm1vZGUgYXR0cmlidXRlIG5vdyBiZXR0ZXIgcmVmbGVjdHMgdGhlIGFjdHVhbCBtb2RlCiAgIHVuZGVyIHdoaWNoIHRoZSBmaWxlIHdhcyBvcGVuZWQuICBQYXRjaCBieSBFcmlrIEJyYXkuCiAKKy0gSXNzdWUgIzE2ODUzOiBBZGQgbmV3IHNlbGVjdG9ycyBtb2R1bGUuCisKKy0gSXNzdWUgIzE4ODgyOiBBZGQgdGhyZWFkaW5nLm1haW5fdGhyZWFkKCkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzE4OTAxOiBUaGUgc3VuYXUgZ2V0cGFyYW1zIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4KKyAgYSBwbGFpbiB0dXBsZS4gIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTc0ODc6IFRoZSByZXN1bHQgb2YgdGhlIHdhdmUgZ2V0cGFyYW1zIG1ldGhvZCBub3cgaXMgcGlja2xlYWJsZSBhZ2Fpbi4KKyAgUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIElzc3VlICMxODc1Njogb3MudXJhbmRvbSgpIG5vdyB1c2VzIGEgbGF6aWx5LW9wZW5lZCBwZXJzaXN0ZW50IGZpbGUKKyAgZGVzY3JpcHRvciwgc28gYXMgdG8gYXZvaWQgdXNpbmcgbWFueSBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gcnVuIGluCisgIHBhcmFsbGVsIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KKwogLSBJc3N1ZSAjMTg0MTg6IEFmdGVyIGZvcmsoKSwgcmVpbml0IGFsbCB0aHJlYWRzIHN0YXRlcywgbm90IG9ubHkgYWN0aXZlIG9uZXMuCiAgIFBhdGNoIGJ5IEEuIEplc3NlIEppcnl1IERhdmlzLgogCistIElzc3VlICMxNzk3NDogU3dpdGNoIHVuaXR0ZXN0IGZyb20gdXNpbmcgZ2V0b3B0IHRvIHVzaW5nIGFyZ3BhcnNlLgorCistIElzc3VlICMxMTc5ODogVGVzdFN1aXRlIG5vdyBkcm9wcyByZWZlcmVuY2VzIHRvIG93biB0ZXN0cyBhZnRlciBleGVjdXRpb24uCisKIC0gSXNzdWUgIzE2NjExOiBodHRwLmNvb2tpZSBub3cgY29ycmVjdGx5IHBhcnNlcyB0aGUgJ3NlY3VyZScgYW5kICdodHRwb25seScKICAgY29va2llIGZsYWdzLgogCiAtIElzc3VlICMxMTk3MzogRml4IGEgcHJvYmxlbSBpbiBrZXZlbnQuIFRoZSBmbGFncyBhbmQgZmZsYWdzIGZpZWxkcyBhcmUgbm93CiAgIHByb3Blcmx5IGhhbmRsZWQgYXMgdW5zaWduZWQuCiAKKy0gSXNzdWUgIzE4ODA3OiBgYHB5dmVudmBgIG5vdyB0YWtlcyBhIC0tY29waWVzIGFyZ3VtZW50IGFsbG93aW5nIGNvcGllcworICBpbnN0ZWFkIG9mIHN5bWxpbmtzIGV2ZW4gd2hlcmUgc3ltbGlua3MgYXJlIGF2YWlsYWJsZSBhbmQgdGhlIGRlZmF1bHQuCisKKy0gSXNzdWUgIzE4NTM4OiBgYHB5dGhvbiAtbSBkaXNgYCBub3cgdXNlcyBhcmdwYXJzZSBmb3IgYXJndW1lbnQgcHJvY2Vzc2luZy4KKyAgUGF0Y2ggYnkgTWljaGVsZSBPcnLDuS4KKworLSBJc3N1ZSAjMTgzOTQ6IENsb3NlIGNnaS5GaWVsZFN0b3JhZ2UncyBvcHRpb25hbCBmaWxlLgorCiAtIElzc3VlICMxNzcwMjogT24gZXJyb3IsIG9zLmVudmlyb25iIG5vdyByZW1vdmVzIHN1cHByZXNzIHRoZSBleGNlcHQgY29udGV4dAogICB3aGVuIHJhaXNpbmcgYSBuZXcgS2V5RXJyb3Igd2l0aCB0aGUgb3JpZ2luYWwga2V5LgogCi0tIElzc3VlICMxODc1NTogRml4ZWQgdGhlIGxvYWRlciB1c2VkIGluIGltcCB0byBhbGxvdyBnZXRfZGF0YSgpIHRvIGJlIGNhbGxlZAotICBtdWx0aXBsZSB0aW1lcy4KLQogLSBJc3N1ZSAjMTY4MDk6IEZpeGVkIHNvbWUgdGtpbnRlciBpbmNvbXBhYmlsaXRpZXMgd2l0aCBUY2wvVGsgOC42LgogCiAtIElzc3VlICMxNjgwOTogVGtpbnRlcidzIHNwbGl0bGlzdCgpIGFuZCBzcGxpdCgpIG1ldGhvZHMgbm93IGFjY2VwdCBUY2xfT2JqCkBAIC04MDQsNiArMTg2OSw5IEBACiAtIElzc3VlICMxODMyNDogc2V0X3BheWxvYWQgbm93IGNvcnJlY3RseSBoYW5kbGVzIGJpbmFyeSBpbnB1dC4gIFRoaXMgYWxzbwogICBzdXBlcnNlZGVzIHRoZSBwcmV2aW91cyBmaXhlcyBmb3IgIzE0MzYwLCAjMTcxNywgYW5kICMxNjU2NC4KIAorLSBJc3N1ZSAjMTg3OTQ6IEFkZCBhIGZpbGVubygpIG1ldGhvZCBhbmQgYSBjbG9zZWQgYXR0cmlidXRlIHRvIHNlbGVjdC5kZXZwb2xsCisgIG9iamVjdHMuCisKIC0gSXNzdWUgIzE3MTE5OiBGaXhlZCBpbnRlZ2VyIG92ZXJmbG93cyB3aGVuIHByb2Nlc3NpbmcgbGFyZ2Ugc3RyaW5ncyBhbmQgdHVwbGVzCiAgIGluIHRoZSB0a2ludGVyIG1vZHVsZS4KIApAQCAtODE0LDkgKzE4ODIsNiBAQAogLSBJc3N1ZSAjODg2NTogQ29uY3VycmVudCBpbnZvY2F0aW9uIG9mIHNlbGVjdC5wb2xsLnBvbGwoKSBub3cgcmFpc2VzIGEKICAgUnVudGltZUVycm9yIGV4Y2VwdGlvbi4gIFBhdGNoIGJ5IENocmlzdGlhbiBTY2h1YmVydC4KIAotLSBJc3N1ZSAjMTM0NjE6IEZpeCBhIGNyYXNoIGluIHRoZSBUZXh0SU9XcmFwcGVyLnRlbGwgbWV0aG9kIG9uIDY0LWJpdAotICBwbGF0Zm9ybXMuICBQYXRjaCBieSBZb2dlc2ggQ2hhdWRoYXJpLgotCiAtIElzc3VlICMxODc3NzogVGhlIHNzbCBtb2R1bGUgbm93IHVzZXMgdGhlIG5ldyBDUllQVE9fVEhSRUFESUQgQVBJIG9mCiAgIE9wZW5TU0wgMS4wLjArIGluc3RlYWQgb2YgdGhlIGRlcHJlY2F0ZWQgQ1JZUFRPIGlkIGNhbGxiYWNrIGZ1bmN0aW9uLgogCkBAIC04MzEsNTAgKzE4OTYsNjAxIEBACiAgIHN0cmluZ3MgZm9yIGBgcmZjODIyTmFtZWBgIChlbWFpbCksIGBgZE5TTmFtZWBgIChETlMpIGFuZAogICBgYHVuaWZvcm1SZXNvdXJjZUlkZW50aWZpZXJgYCAoVVJJKS4KIAorLSBJc3N1ZSAjMTg3MDE6IFJlbW92ZSBzdXBwb3J0IG9mIG9sZCBDUHl0aG9uIHZlcnNpb25zICg8My4wKSBmcm9tIEMgY29kZS4KKwogLSBJc3N1ZSAjMTg3NTY6IEltcHJvdmUgZXJyb3IgcmVwb3J0aW5nIGluIG9zLnVyYW5kb20oKSB3aGVuIHRoZSBmYWlsdXJlCiAgIGlzIGR1ZSB0byBzb21ldGhpbmcgZWxzZSB0aGFuIC9kZXYvdXJhbmRvbSBub3QgZXhpc3RpbmcgKGZvciBleGFtcGxlLAogICBleGhhdXN0aW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgbGltaXQpLgogCistIElzc3VlICMxODY3MzogQWRkIE9fVE1QRklMRSB0byBvcyBtb2R1bGUuIE9fVE1QRklMRSByZXF1aXJlcyBMaW51eCBrZXJuZWwKKyAgMy4xMSBvciBuZXdlci4gSXQncyBvbmx5IGRlZmluZWQgb24gc3lzdGVtIHdpdGggMy4xMSB1YXBpIGhlYWRlcnMsIHRvby4KKworLSBJc3N1ZSAjMTg1MzI6IENoYW5nZSB0aGUgYnVpbHRpbiBoYXNoIGFsZ29yaXRobXMnIG5hbWVzIHRvIGxvd2VyIGNhc2UgbmFtZXMKKyAgYXMgcHJvbWlzZWQgYnkgaGFzaGxpYidzIGRvY3VtZW50YXRpb24uCisKIC0gSXNzdWUgIzE4NDA1OiBJbXByb3ZlIHRoZSBlbnRyb3B5IG9mIGNyeXB0Lm1rc2FsdCgpLgogCistIElzc3VlICMxMjAxNTogVGhlIHRlbXBmaWxlIG1vZHVsZSBub3cgdXNlcyBhIHN1ZmZpeCBvZiA4IHJhbmRvbSBjaGFyYWN0ZXJzCisgIGluc3RlYWQgb2YgNiwgdG8gcmVkdWNlIHRoZSByaXNrIG9mIGZpbGVuYW1lIGNvbGxpc2lvbi4gVGhlIGVudHJvcHkgd2FzCisgIHJlZHVjZWQgd2hlbiB1cHBlcmNhc2UgbGV0dGVycyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgY2hhcnNldCB1c2VkIHRvIGdlbmVyYXRlCisgIHJhbmRvbSBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxODU4NTogQWRkIDpmdW5jOmB0ZXh0d3JhcC5zaG9ydGVuYCB0byBjb2xsYXBzZSBhbmQgdHJ1bmNhdGUgYQorICBwaWVjZSBvZiB0ZXh0IHRvIGEgZ2l2ZW4gbGVuZ3RoLgorCistIElzc3VlICMxODU5ODogVHdlYWsgZXhjZXB0aW9uIG1lc3NhZ2UgZm9yIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkgdG8KKyAgaW5jbHVkZSB0aGUgbW9kdWxlIG5hbWUgd2hlbiBhIGtleSBhcmd1bWVudCBpcyBtaXNzaW5nLgorCiAtIElzc3VlICMxOTE1MTogRml4IGRvY3N0cmluZyBhbmQgdXNlIG9mIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpIHRvCiAgIHJlZmxlY3QgMi10dXBsZXMuCiAKKy0gSXNzdWUgIzE5MTUyOiBBZGQgRXh0ZW5zaW9uRmlsZUxvYWRlci5nZXRfZmlsZW5hbWUoKS4KKwogLSBJc3N1ZSAjMTg2NzY6IENoYW5nZSAncG9zaXRpdmUnIHRvICdub24tbmVnYXRpdmUnIGluIHF1ZXVlLnB5IHB1dCBhbmQgZ2V0CiAgIGRvY3N0cmluZ3MgYW5kIFZhbHVlRXJyb3IgbWVzc2FnZXMuIFBhdGNoIGJ5IFpob25neXVlIEx1bwogCi0tIElzc3VlICMxODY4MTogRml4IGEgTmFtZUVycm9yIGluIGltcC5yZWxvYWQoKSAobm90aWNlZCBieSBXZWl6aGFvIExpKS4KKy0gRml4IHJlZmNvdW50aW5nIGlzc3VlIHdpdGggZXh0ZW5zaW9uIHR5cGVzIGluIHRraW50ZXIuCiAKIC0gSXNzdWUgIzgxMTI6IHhsbXJwYy5zZXJ2ZXIncyBEb2NYTUxSUENTZXJ2ZXIgc2VydmVyIG5vIGxvbmdlciByYWlzZXMgYW4gZXJyb3IKICAgaWYgbWV0aG9kcyBoYXZlIGFubm90YXRpb25zOyBpdCBub3cgY29ycmVjdGx5IGRpc3BsYXlzIHRoZSBhbm5vdGF0aW9ucy4KIAorLSBJc3N1ZSAjMTg2MDA6IEFkZGVkIHBvbGljeSBhcmd1bWVudCB0byBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nLAorICBhbmQgYXNfYnl0ZXMgYW5kIF9fYnl0ZXNfXyBtZXRob2RzIHRvIE1lc3NhZ2UuCisKKy0gSXNzdWUgIzE4NjcxOiBPdXRwdXQgbW9yZSBpbmZvcm1hdGlvbiB3aGVuIGxvZ2dpbmcgZXhjZXB0aW9ucyBvY2N1ci4KKworLSBJc3N1ZSAjMTg2MjE6IFByZXZlbnQgdGhlIHNpdGUgbW9kdWxlJ3MgcGF0Y2hlZCBidWlsdGlucyBmcm9tIGtlZXBpbmcKKyAgdG9vIG1hbnkgcmVmZXJlbmNlcyBhbGl2ZSBmb3IgdG9vIGxvbmcuCisKKy0gSXNzdWUgIzQ4ODU6IEFkZCB3ZWFrcmVmIHN1cHBvcnQgdG8gbW1hcCBvYmplY3RzLiAgUGF0Y2ggYnkgVmFsZXJpZSBMYW1iZXJ0LgorCistIElzc3VlICM4ODYwOiBGaXhlZCByb3VuZGluZyBpbiB0aW1lZGVsdGEgY29uc3RydWN0b3IuCisKKy0gSXNzdWUgIzE4ODQ5OiBGaXhlZCBhIFdpbmRvd3Mtc3BlY2lmaWMgdGVtcGZpbGUgYnVnIHdoZXJlIGNvbGxpc2lvbiB3aXRoIGFuCisgIGV4aXN0aW5nIGRpcmVjdG9yeSBjYXVzZWQgbWtzdGVtcCBhbmQgcmVsYXRlZCBBUElzIHRvIGZhaWwgaW5zdGVhZCBvZgorICByZXRyeWluZy4gUmVwb3J0IGFuZCBmaXggYnkgVmxhZCBTaGNoZXJiaW5hLgorCistIElzc3VlICMxODkyMDogYXJncGFyc2UncyBkZWZhdWx0IGRlc3RpbmF0aW9uIGZvciB0aGUgdmVyc2lvbiBhY3Rpb24gKC12LAorICAtLXZlcnNpb24pIGhhcyBhbHNvIGJlZW4gY2hhbmdlZCB0byBzdGRvdXQsIHRvIG1hdGNoIHRoZSBQeXRob24gZXhlY3V0YWJsZS4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE4NjIzOiBGYWN0b3Igb3V0IHRoZSBfU3VwcHJlc3NDb3JlRmlsZXMgY29udGV4dCBtYW5hZ2VyIGludG8KKyAgdGVzdC5zdXBwb3J0LiAgUGF0Y2ggYnkgVmFsZXJpZSBMYW1iZXJ0LgorCistIElzc3VlICMxMjAzNzogRml4IHRlc3RfZW1haWwgZm9yIGRlc2t0b3AgV2luZG93cy4KKworLSBJc3N1ZSAjMTU1MDc6IHRlc3Rfc3VicHJvY2VzcydzIHRlc3Rfc2VuZF9zaWduYWwgY291bGQgZmFpbCBpZiB0aGUgdGVzdAorICBydW5uZXIgd2VyZSBydW4gaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIHByb2Nlc3MgaW5oZXJpdGVkIGFuIGlnbm9yZQorICBzZXR0aW5nIGZvciBTSUdJTlQuICBSZXN0b3JlIHRoZSBTSUdJTlQgaGFuZGxlciB0byB0aGUgZGVzaXJlZAorICBLZXlib2FyZEludGVycnVwdCByYWlzaW5nIG9uZSBkdXJpbmcgdGhhdCB0ZXN0LgorCistIElzc3VlICMxNjc5OTogU3dpdGNoZWQgZnJvbSBnZXRvcHQgdG8gYXJncGFyc2Ugc3R5bGUgaW4gcmVncnRlc3QncyBhcmd1bWVudAorICBwYXJzaW5nLiAgQWRkZWQgbW9yZSB0ZXN0cyBmb3IgcmVncnRlc3QncyBhcmd1bWVudCBwYXJzaW5nLgorCistIElzc3VlICMxODc5MjogVXNlICIxMjcuMC4wLjEiIG9yICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIgYXMgbXVjaCBhcworICBwb3NzaWJsZSwgc2luY2UgImxvY2FsaG9zdCIgZ29lcyB0aHJvdWdoIGEgRE5TIGxvb2t1cCB1bmRlciByZWNlbnQgV2luZG93cworICB2ZXJzaW9ucy4KKworSURMRQorLS0tLQorCistIElzc3VlICMxODQ4OTogQWRkIHRlc3RzIGZvciBTZWFyY2hFbmdpbmUuIE9yaWdpbmFsIHBhdGNoIGJ5IFBoaWwgV2Vic3Rlci4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODc0MzogRml4IHJlZmVyZW5jZXMgdG8gbm9uLWV4aXN0YW50ICJTdHJpbmdJTyIgbW9kdWxlLgorCistIElzc3VlICMxODc4MzogUmVtb3ZlZCBleGlzdGluZyBtZW50aW9ucyBvZiBQeXRob24gbG9uZyB0eXBlIGluIGRvY3N0cmluZ3MsCisgIGVycm9yIG1lc3NhZ2VzIGFuZCBjb21tZW50cy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE1ODQ6IFByb3ZpZGUgY29uZmlndXJlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBzZWFyY2ggcGF0aHMgZm9yCisgIFRjbCBhbmQgVGsgd2hlbiBidWlsZGluZyBfdGtpbnRlci4KKworLSBJc3N1ZSAjMTU2NjM6IFRjbC9UayA4LjUuMTQgaXMgbm93IGluY2x1ZGVkIHdpdGggdGhlIE9TIFggMTAuNisgNjQtLzMyLWJpdAorICBpbnN0YWxsZXIuICBJdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYSB0aGlyZC1wYXJ0eSB2ZXJzaW9uIG9mCisgIFRjbC9UayA4LjUgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW1zIGluIHRoZSBBcHBsZS1zdXBwbGllZCBUY2wvVGsgOC41CisgIHNoaXBwZWQgaW4gT1MgWCAxMC42IGFuZCBsYXRlciByZWxlYXNlcy4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4OTIyOiBOb3cgVGhlIExpYi9zbXRwZC5weSBhbmQgVG9vbHMvaTE4bi9tc2dmbXQucHkgc2NyaXB0cyB3cml0ZQorICB0aGVpciB2ZXJzaW9uIHN0cmluZ3MgdG8gc3Rkb3V0LCBhbmQgbm90IHRvIHNkZXJyLgorCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTA4LTAzCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjc0MTogRml4IGFuIGVycm9yIHJlcG9ydGluZyBpbiBpbnQoKS4KKworLSBJc3N1ZSAjMTc4OTk6IEZpeCByYXJlIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIG9zLmxpc3RkaXIoKS4KKworLSBJc3N1ZSAjMTAyNDE6IENsZWFyIGV4dGVuc2lvbiBtb2R1bGUgZGljdCBjb3BpZXMgYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisgIFBhdGNoIGJ5IE5laWwgU2NoZW1lbmF1ZXIsIG1pbmltYWxseSBtb2RpZmllZC4KKworLSBJc3N1ZSAjOTAzNTogaXNtb3VudCBub3cgcmVjb2duaXNlcyB2b2x1bWVzIG1vdW50ZWQgYmVsb3cgYSBkcml2ZSByb290CisgIG9uIFdpbmRvd3MuIE9yaWdpbmFsIHBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIElzc3VlICMxODIxNDogSW1wcm92ZSBmaW5hbGl6YXRpb24gb2YgUHl0aG9uIG1vZHVsZXMgdG8gYXZvaWQgc2V0dGluZworICB0aGVpciBnbG9iYWxzIHRvIE5vbmUsIGluIG1vc3QgY2FzZXMuCisKKy0gSXNzdWUgIzE4MTEyOiBQRVAgNDQyIGltcGxlbWVudGF0aW9uIChzYWZlIG9iamVjdCBmaW5hbGl6YXRpb24pLgorCistIElzc3VlICMxODU1MjogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIFB5QXJlbmFfQWRkUHlPYmplY3QoKSBpbgorICBvYmoyYXN0X29iamVjdCgpLgorCistIElzc3VlICMxODU2MDogRml4IHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gc3VtKCkuCisKKy0gSXNzdWUgIzE4NTIwOiBBZGQgYSBuZXcgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoKSBmdW5jdGlvbiwgc2FtZSB0aGFuCisgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoKSBleGNlcHQgdGhhdCBpdCBoYXMgYSByZXR1cm4gdmFsdWUgKDAgb24gc3VjY2VzcywKKyAgLTEgb24gZXJyb3IpLgorCistIElzc3VlICMxNTkwNTogRml4IHRoZW9yZXRpY2FsIGJ1ZmZlciBvdmVyZmxvdyBpbiBoYW5kbGluZyBvZiBzeXMuYXJndlswXSwKKyAgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBpZiB0aGUgb3BlcmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBvYmV5IE1BWFBBVEhMRU4uCisKKy0gSXNzdWUgIzE4NDA4OiBGaXggbWFueSB2YXJpb3VzIGJ1Z3MgaW4gY29kZSBoYW5kbGluZyBlcnJvcnMsIGVzcGVjaWFsbHkKKyAgb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAoTWVtb3J5RXJyb3IpLgorCistIElzc3VlICMxODM0NDogRml4IHBvdGVudGlhbCByZWYtbGVha3MgaW4gX2J1ZmZlcmVkcmVhZGVyX3JlYWRfYWxsKCkuCisKKy0gSXNzdWUgIzE4MzQyOiBVc2UgdGhlIHJlcHIgb2YgYSBtb2R1bGUgbmFtZSB3aGVuIGFuIGltcG9ydCBmYWlscyB3aGVuIHVzaW5nCisgIGBgZnJvbSAuLi4gaW1wb3J0IC4uLmBgLgorCistIElzc3VlICMxNzg3MjogRml4IGEgc2VnZmF1bHQgaW4gbWFyc2hhbC5sb2FkKCkgd2hlbiBpbnB1dCBzdHJlYW0gcmV0dXJucworICBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLgorCistIElzc3VlICMxODMzODogYHB5dGhvbiAtLXZlcnNpb25gIG5vdyBwcmludHMgdmVyc2lvbiBzdHJpbmcgdG8gc3Rkb3V0LCBhbmQKKyAgbm90IHRvIHN0ZGVyci4gIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcgYW5kIE1pY2hhZWwgRGlja2Vucy4KKworLSBJc3N1ZSAjMTg0MjY6IEZpeCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gQyBleHRlbnNpb24gaW1wb3J0IHdoZW4KKyAgUHlNb2R1bGVfR2V0RGVmKCkgcmV0dXJucyBhbiBlcnJvci4KKworLSBJc3N1ZSAjMTcyMDY6IE9uIFdpbmRvd3MsIGluY3JlYXNlIHRoZSBzdGFjayBzaXplIGZyb20gMiBNQiB0byA0LjIgTUIgdG8gZml4CisgIGEgc3RhY2sgb3ZlcmZsb3cgaW4gdGhlIG1hcnNoYWwgbW9kdWxlIChmaXggYSBjcmFzaCBpbiB0ZXN0X21hcnNoYWwpLgorICBQYXRjaCB3cml0dGVuIGJ5IEplcmVteSBLbG90aC4KKworLSBJc3N1ZSAjMzMyOTogSW1wbGVtZW50IHRoZSBQRVAgNDQ1OiBBZGQgbmV3IEFQSXMgdG8gY3VzdG9taXplIFB5dGhvbiBtZW1vcnkKKyAgYWxsb2NhdG9ycy4KKworLSBJc3N1ZSAjMTgzMjg6IFJlb3JkZXIgb3BzIGluIFB5VGhyZWFkU3RhdGVfRGVsZXRlKigpIGZ1bmN0aW9ucy4gTm93IHRoZQorICB0c3RhdGUgaXMgZmlyc3QgcmVtb3ZlZCBmcm9tIFRMUyBhbmQgdGhlbiBkZWFsbG9jYXRlZC4KKworLSBJc3N1ZSAjMTM0ODM6IFVzZSBWaXJ0dWFsQWxsb2MgaW4gb2JtYWxsb2Mgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTgxODQ6IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgYW5kIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIG5vdyByYWlzZQorICBPdmVyZmxvd0Vycm9yIHdoZW4gYW4gYXJndW1lbnQgb2YgJWMgZm9ybWF0IGlzIG91dCBvZiByYW5nZS4KKworLSBJc3N1ZSAjMTgxMTE6IFRoZSBtaW4oKSBhbmQgbWF4KCkgZnVuY3Rpb25zIG5vdyBzdXBwb3J0IGEgZGVmYXVsdCBhcmd1bWVudAorICB0byBiZSByZXR1cm5lZCBpbnN0ZWFkIG9mIHJhaXNpbmcgYSBWYWx1ZUVycm9yIG9uIGFuIGVtcHR5IHNlcXVlbmNlLgorICAoQ29udHJpYnV0ZWQgYnkgSnVsaWFuIEJlcm1hbi4pCisKKy0gSXNzdWUgIzE4MTM3OiBEZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBvbiBwcmVjaXNpb24gaW4gZmxvYXQuX19mb3JtYXRfXygpCisgIGFuZCBjb21wbGV4Ll9fZm9ybWF0X18oKS4KKworLSBJc3N1ZSAjMTgxODM6IEZpeCB2YXJpb3VzIHVuaWNvZGUgb3BlcmF0aW9ucyBvbiBzdHJpbmdzIHdpdGggbGFyZ2UgdW5pY29kZQorICBjb2RlcG9pbnRzLgorCistIElzc3VlICMxODE4MDogRml4IHJlZiBsZWFrIGluIF9QeUltcG9ydF9HZXREeW5Mb2FkV2luZG93cygpLgorCistIElzc3VlICMxODAzODogU3ludGF4RXJyb3IgcmFpc2VkIGR1cmluZyBjb21waWxhdGlvbiBzb3VyY2VzIHdpdGggaWxsZWdhbAorICBlbmNvZGluZyBub3cgYWx3YXlzIGNvbnRhaW5zIGFuIGVuY29kaW5nIG5hbWUuCisKKy0gSXNzdWUgIzE3OTMxOiBSZXNvbHZlIGNvbmZ1c2lvbiBvbiBXaW5kb3dzIGJldHdlZW4gcGlkcyBhbmQgcHJvY2VzcworICBoYW5kbGVzLgorCistIFR3ZWFrIHRoZSBleGNlcHRpb24gbWVzc2FnZSB3aGVuIHRoZSBtYWdpYyBudW1iZXIgb3Igc2l6ZSB2YWx1ZSBpbiBhIGJ5dGVjb2RlCisgIGZpbGUgaXMgdHJ1bmNhdGVkLgorCistIElzc3VlICMxNzkzMjogRml4IGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgb24gV2luZG93cyA2NC1iaXQgaW4gaXRlcmF0b3JzOgorICBjaGFuZ2UgdGhlIEMgdHlwZSBvZiBzZXFpdGVyb2JqZWN0Lml0X2luZGV4IGZyb20gbG9uZyB0byBQeV9zc2l6ZV90LgorCistIElzc3VlICMxODA2NTogRG9uJ3Qgc2V0IF9fcGF0aF9fIHRvIHRoZSBwYWNrYWdlIG5hbWUgZm9yIGZyb3plbiBwYWNrYWdlcy4KKworLSBJc3N1ZSAjMTgwODg6IFdoZW4gcmVsb2FkaW5nIGEgbW9kdWxlLCB1bmNvbmRpdGlvbmFsbHkgcmVzZXQgYWxsIHJlbGV2YW50CisgIGF0dHJpYnV0ZXMgb24gdGhlIG1vZHVsZSAoZS5nLiBfX25hbWVfXywgX19sb2FkZXJfXywgX19wYWNrYWdlX18sIF9fZmlsZV9fLAorICBfX2NhY2hlZF9fKS4KKworLSBJc3N1ZSAjMTc5Mzc6IFRyeSBoYXJkZXIgdG8gY29sbGVjdCBjeWNsaWMgZ2FyYmFnZSBhdCBzaHV0ZG93bi4KKworLSBJc3N1ZSAjMTIzNzA6IFByZXZlbnQgY2xhc3MgYm9kaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgX19jbGFzc19fCisgIGNsb3N1cmUuCisKKy0gSXNzdWUgIzE3NjQ0OiBGaXggYSBjcmFzaCBpbiBzdHIuZm9ybWF0IHdoZW4gY3VybHkgYnJhY2VzIGFyZSB1c2VkIGluIHNxdWFyZQorICBicmFja2V0cy4KKworLSBJc3N1ZSAjMTcyMzc6IEZpeCBjcmFzaCBpbiB0aGUgQVNDSUkgZGVjb2RlciBvbiBtNjhrLgorCistIElzc3VlICMxNzkyNzogRnJhbWUgb2JqZWN0cyBrZXB0IGFyZ3VtZW50cyBhbGl2ZSBpZiB0aGV5IGhhZCBiZWVuCisgIGNvcGllZCBpbnRvIGEgY2VsbCwgZXZlbiBpZiB0aGUgY2VsbCB3YXMgY2xlYXJlZC4KKworLSBJc3N1ZSAjMTU0NTQ2MzogQXQgc2h1dGRvd24sIGRlZmVyIGZpbmFsaXphdGlvbiBvZiBjb2RlYyBtb2R1bGVzIHNvCisgIHRoYXQgc3RkZXJyIHJlbWFpbnMgdXNhYmxlLgorCistIElzc3VlICM3MzMwOiBJbXBsZW1lbnQgd2lkdGggYW5kIHByZWNpc2lvbiAoZXg6ICIlNS4zcyIpIGZvciB0aGUgZm9ybWF0CisgIHN0cmluZyBvZiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpIGZ1bmN0aW9uLCBvcmlnaW5hbCBwYXRjaCB3cml0dGVuIGJ5IFlzaiBSYXkuCisKKy0gSXNzdWUgIzE1NDU0NjM6IEdsb2JhbCB2YXJpYWJsZXMgY2F1Z2h0IGluIHJlZmVyZW5jZSBjeWNsZXMgYXJlIG5vdworICBnYXJiYWdlLWNvbGxlY3RlZCBhdCBzaHV0ZG93bi4KKworLSBJc3N1ZSAjMTcwOTQ6IENsZWFyIHN0YWxlIHRocmVhZCBzdGF0ZXMgYWZ0ZXIgZm9yaygpLiAgTm90ZSB0aGF0IHRoaXMKKyAgaXMgYSBwb3RlbnRpYWxseSBkaXNydXB0aXZlIGNoYW5nZSBzaW5jZSBpdCBtYXkgcmVsZWFzZSBzb21lIHN5c3RlbQorICByZXNvdXJjZXMgd2hpY2ggd291bGQgb3RoZXJ3aXNlIHJlbWFpbiBwZXJwZXR1YWxseSBhbGl2ZSAoZS5nLiBkYXRhYmFzZQorICBjb25uZWN0aW9ucyBrZXB0IGluIHRocmVhZC1sb2NhbCBzdG9yYWdlKS4KKworLSBJc3N1ZSAjMTc0MDg6IEF2b2lkIHVzaW5nIGFuIG9ic29sZXRlIGluc3RhbmNlIG9mIHRoZSBjb3B5cmVnIG1vZHVsZSB3aGVuCisgIHRoZSBpbnRlcnByZXRlciBpcyBzaHV0ZG93biBhbmQgdGhlbiBzdGFydGVkIGFnYWluLgorCistIElzc3VlICM1ODQ1OiBFbmFibGUgdGFiLWNvbXBsZXRpb24gaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIGJ5CisgIGRlZmF1bHQsIHRoYW5rcyB0byBhIG5ldyBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfXy4KKworLSBJc3N1ZSAjMTcxMTUsMTcxMTY6IE1vZHVsZSBpbml0aWFsaXphdGlvbiBub3cgaW5jbHVkZXMgc2V0dGluZyBfX3BhY2thZ2VfXyBhbmQKKyAgX19sb2FkZXJfXyBhdHRyaWJ1dGVzIHRvIE5vbmUuCisKKy0gSXNzdWUgIzE3ODUzOiBFbnN1cmUgbG9jYWxzIG9mIGEgY2xhc3MgdGhhdCBzaGFkb3cgZnJlZSB2YXJpYWJsZXMgYWx3YXlzIHdpbgorICBvdmVyIHRoZSBjbG9zdXJlcy4KKworLSBJc3N1ZSAjMTc4NjM6IEluIHRoZSBpbnRlcmFjdGl2ZSBjb25zb2xlLCBkb24ndCBsb29wIGZvcmV2ZXIgaWYgdGhlIGVuY29kaW5nCisgIGNhbid0IGJlIGZldGNoZWQgZnJvbSBzdGRpbi4KKworLSBJc3N1ZSAjMTc4Njc6IFJhaXNlIGFuIEltcG9ydEVycm9yIGlmIF9faW1wb3J0X18gaXMgbm90IGZvdW5kIGluIF9fYnVpbHRpbnNfXy4KKworLSBJc3N1ZSAjMTg2OTg6IEVuc3VyZSBpbXBvcnRsaWIucmVsb2FkKCkgcmV0dXJucyB0aGUgbW9kdWxlIG91dCBvZiBzeXMubW9kdWxlcy4KKworLSBJc3N1ZSAjMTc4NTc6IFByZXZlbnQgYnVpbGQgZmFpbHVyZXMgd2l0aCBwcmUtMy41LjAgdmVyc2lvbnMgb2Ygc3FsaXRlMywKKyAgc3VjaCBhcyB3YXMgc2hpcHBlZCB3aXRoIENlbnRvcyA1IGFuZCBNYWMgT1MgWCAxMC40LgorCistIElzc3VlICMxNzQxMzogc3lzLnNldHRyYWNlIGNhbGxiYWNrcyB3ZXJlIGJlaW5nIHBhc3NlZCBhIHN0cmluZyBpbnN0ZWFkIG9mIGFuCisgIGV4Y2VwdGlvbiBpbnN0YW5jZSBmb3IgdGhlICd2YWx1ZScgZWxlbWVudCBvZiB0aGUgYXJnIHR1cGxlIGlmIHRoZSBleGNlcHRpb24KKyAgb3JpZ2luYXRlZCBmcm9tIEMgY29kZTsgbm93IGFuIGV4Y2VwdGlvbiBpbnN0YW5jZSBpcyBhbHdheXMgcHJvdmlkZWQuCisKKy0gSXNzdWUgIzE3NzgyOiBGaXggdW5kZWZpbmVkIGJlaGF2aW91ciBvbiBwbGF0Zm9ybXMgd2hlcmUKKyAgYGBzdHJ1Y3QgdGltZXNwZWNgYCdzICJ0dl9uc2VjIiBtZW1iZXIgaXMgbm90IGEgQyBsb25nLgorCistIElzc3VlICMxNzcyMjogV2hlbiBsb29raW5nIHVwIF9fcm91bmRfXywgcmVzb2x2ZSBkZXNjcmlwdG9ycy4KKworLSBJc3N1ZSAjMTYwNjE6IFNwZWVkIHVwIHN0ci5yZXBsYWNlKCkgZm9yIHJlcGxhY2luZyAxLWNoYXJhY3RlciBzdHJpbmdzLgorCistIElzc3VlICMxNzcxNTogRml4IHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIHJhaXNpbmcgYW4gZXhjZXB0aW9uIGluIGEgX190cnVuY19fCisgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTc2NDM6IEFkZCBfX2NhbGxiYWNrX18gYXR0cmlidXRlIHRvIHdlYWtyZWYucmVmLgorCistIElzc3VlICMxNjQ0NzogRml4ZWQgcG90ZW50aWFsIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIHNldHRpbmcgX19uYW1lX18gb24gYQorICBjbGFzcy4KKworLSBJc3N1ZSAjMTc2Njk6IEZpeCBjcmFzaCBpbnZvbHZpbmcgZmluYWxpemF0aW9uIG9mIGdlbmVyYXRvcnMgdXNpbmcgeWllbGQgZnJvbS4KKworLSBJc3N1ZSAjMTQ0Mzk6IFB5dGhvbiBub3cgcHJpbnRzIHRoZSB0cmFjZWJhY2sgb24gcnVucHkgZmFpbHVyZSBhdCBzdGFydHVwLgorCistIElzc3VlICMxNzQ2OTogRml4IF9QeV9HZXRBbGxvY2F0ZWRCbG9ja3MoKSBhbmQgc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpCisgIHdoZW4gcnVubmluZyBvbiB2YWxncmluZC4KKworLSBJc3N1ZSAjMTc2MTk6IE1ha2UgaW5wdXQoKSBjaGVjayBmb3IgQ3RybC1DIGNvcnJlY3RseSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNzM1NzogQWRkIG1pc3NpbmcgdmVyYm9zaXR5IG1lc3NhZ2VzIGZvciAtdi8tdnYgdGhhdCB3ZXJlIGxvc3QgZHVyaW5nCisgIHRoZSBpbXBvcnRsaWIgdHJhbnNpdGlvbi4KKworLSBJc3N1ZSAjMTc2MTA6IERvbid0IHJlbHkgb24gbm9uLXN0YW5kYXJkIGJlaGF2aW9yIG9mIHRoZSBDIHFzb3J0KCkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzE3MzIzOiBUaGUgIltYIHJlZnMsIFkgYmxvY2tzXSIgcHJpbnRlZCBieSBkZWJ1ZyBidWlsZHMgaGFzIGJlZW4KKyAgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIEl0IGNhbiBiZSByZS1lbmFibGVkIHdpdGggdGhlIGAtWCBzaG93cmVmY291bnRgIG9wdGlvbi4KKworLSBJc3N1ZSAjMTczMjg6IEZpeCBwb3NzaWJsZSByZWZsZWFrIGluIGRpY3Quc2V0ZGVmYXVsdC4KKworLSBJc3N1ZSAjMTcyNzU6IENvcnJlY3RlZCBjbGFzcyBuYW1lIGluIGluaXQgZXJyb3IgbWVzc2FnZXMgb2YgdGhlIEMgdmVyc2lvbiBvZgorICBCdWZmZXJlZFdyaXRlciBhbmQgQnVmZmVyZWRSYW5kb20uCisKKy0gSXNzdWUgIzc5NjM6IEZpeGVkIG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZSB0aGF0IGlzc3VlZCB3aGVuIG9iamVjdCBpcworICBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzg3NDU6IFNtYWxsIHNwZWVkIHVwIHppcGltcG9ydCBvbiBXaW5kb3dzLiBQYXRjaCBieSBDYXRhbGluIElhY29iLgorCistIElzc3VlICM1MzA4OiBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gbWFyc2hhbGxpbmcgdG9vIGxhcmdlIG9iamVjdCAoYSBzZXF1ZW5jZQorICB3aXRoIHNpemUgPj0gMioqMzEpLCBpbnN0ZWFkIG9mIHByb2R1Y2luZyBpbGxlZ2FsIG1hcnNoYWwgZGF0YS4KKworLSBJc3N1ZSAjMTI5ODM6IEJ5dGVzIGxpdGVyYWxzIHdpdGggaW52YWxpZCBceCBlc2NhcGUgbm93IHJhaXNlIGEgU3ludGF4RXJyb3IKKyAgYW5kIGEgZnVsbCB0cmFjZWJhY2sgaW5jbHVkaW5nIGxpbmUgbnVtYmVyLgorCistIElzc3VlICMxNjk2NzogSW4gZnVuY3Rpb24gZGVmaW5pdGlvbiwgZXZhbHVhdGUgcG9zaXRpb25hbCBkZWZhdWx0cyBiZWZvcmUKKyAga2V5d29yZC1vbmx5IGRlZmF1bHRzLgorCistIElzc3VlICMxNzE3MzogUmVtb3ZlIHVzZXMgb2YgbG9jYWxlLWRlcGVuZGVudCBDIGZ1bmN0aW9ucyAoaXNhbHBoYSgpIGV0Yy4pCisgIGluIHRoZSBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTcxMzc6IFdoZW4gYW4gVW5pY29kZSBzdHJpbmcgaXMgcmVzaXplZCwgdGhlIGludGVybmFsIHdpZGUgY2hhcmFjdGVyCisgIHN0cmluZyAod3N0cikgZm9ybWF0IGlzIG5vdyBjbGVhcmVkLgorCistIElzc3VlICMxNzA0MzogVGhlIHVuaWNvZGUtaW50ZXJuYWwgZGVjb2RlciBubyBsb25nZXIgcmVhZCBwYXN0IHRoZSBlbmQgb2YKKyAgaW5wdXQgYnVmZmVyLgorCistIElzc3VlICMxNzA5ODogQWxsIG1vZHVsZXMgbm93IGhhdmUgX19sb2FkZXJfXyBzZXQgZXZlbiBpZiB0aGV5IHByZS1leGlzdCB0aGUKKyAgYm9vdHN0cmFwcGluZyBvZiBpbXBvcnRsaWIuCisKKy0gSXNzdWUgIzE2OTc5OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVncyBpbiB0aGUgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCisKKy0gSXNzdWUgIzE2NzcyOiBUaGUgYmFzZSBhcmd1bWVudCB0byB0aGUgaW50IGNvbnN0cnVjdG9yIG5vIGxvbmdlciBhY2NlcHRzCisgIGZsb2F0cywgb3Igb3RoZXIgbm9uLWludGVnZXIgb2JqZWN0cyB3aXRoIGFuIF9faW50X18gbWV0aG9kLiAgT2JqZWN0cworICB3aXRoIGFuIF9faW5kZXhfXyBtZXRob2QgYXJlIG5vdyBhY2NlcHRlZC4KKworLSBJc3N1ZSAjMTAxNTY6IEluIHRoZSBpbnRlcnByZXRlcidzIGluaXRpYWxpemF0aW9uIHBoYXNlLCB1bmljb2RlIGdsb2JhbHMKKyAgYXJlIG5vdyBpbml0aWFsaXplZCBkeW5hbWljYWxseSBhcyBuZWVkZWQuCisKKy0gSXNzdWUgIzE2OTgwOiBGaXggcHJvY2Vzc2luZyBvZiBlc2NhcGVkIG5vbi1hc2NpaSBieXRlcyBpbiB0aGUKKyAgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCisKKy0gSXNzdWUgIzE2OTc1OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVnIGluIHRoZSBlc2NhcGUtZGVjb2RlIGJ5dGVzIGRlY29kZXIuCisKKy0gSXNzdWUgIzE0ODUwOiBOb3cgYSBjaGFybWFwIGRlY29kZXIgdHJlYXRzIFUrRkZGRSBhcyAidW5kZWZpbmVkIG1hcHBpbmciCisgIGluIGFueSBtYXBwaW5nLCBub3Qgb25seSBpbiBhIHN0cmluZy4KKworLSBJc3N1ZSAjMTY3MzA6IGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciBub3cgbm8gbG9uZ2VycyByYWlzZXMgYW4KKyAgZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIHBvcHVsYXRlIGl0cyBjYWNoZSBhbmQgaXQgZmluZHMgb3V0IHRoZSBkaXJlY3RvcnkgaXMKKyAgdW5yZWFkYWJsZSBvciBoYXMgdHVybmVkIGludG8gYSBmaWxlLiBSZXBvcnRlZCBhbmQgZGlhZ25vc2VkIGJ5CisgIERhdmlkIFByaXRjaGFyZC4KKworLSBJc3N1ZSAjMTY5MDY6IEZpeCBhIGxvZ2ljIGVycm9yIHRoYXQgcHJldmVudGVkIG1vc3Qgc3RhdGljIHN0cmluZ3MgZnJvbSBiZWluZworICBjbGVhcmVkLgorCistIElzc3VlICMxMTQ2MTogRml4IHRoZSBpbmNyZW1lbnRhbCBVVEYtMTYgZGVjb2Rlci4gT3JpZ2luYWwgcGF0Y2ggYnkKKyAgQW1hdXJ5IEZvcmdlb3QgZCdBcmMuCisKKy0gSXNzdWUgIzE2ODU2OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgZnJvbSBjYWxsaW5nIHJlcHIoKSBvbiBhIGRpY3Qgd2l0aAorICBhIGtleSB3aG9zZSByZXByIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTYzNjc6IEZpeCBGaWxlSU8ucmVhZGFsbCgpIG9uIFdpbmRvd3MgZm9yIGZpbGVzIGxhcmdlciB0aGFuIDIgR0IuCisKKy0gSXNzdWUgIzE2NzYxOiBDYWxsaW5nIGludCgpIHdpdGggYmFzZSBhcmd1bWVudCBvbmx5IG5vdyByYWlzZXMgVHlwZUVycm9yLgorCistIElzc3VlICMxNjc1OTogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUmVnMlB5CisgIHdoZW4gcmV0cmlldmluZyBhIFJFR19EV09SRCB2YWx1ZS4gVGhpcyBjb3JyZWN0cyBmdW5jdGlvbnMgbGlrZQorICB3aW5yZWcuUXVlcnlWYWx1ZUV4IHRoYXQgbWF5IGhhdmUgYmVlbiByZXR1cm5pbmcgdHJ1bmNhdGVkIHZhbHVlcy4KKworLSBJc3N1ZSAjMTQ0MjA6IFN1cHBvcnQgdGhlIGZ1bGwgRFdPUkQgKHVuc2lnbmVkIGxvbmcpIHJhbmdlIGluIFB5MlJlZworICB3aGVuIHBhc3NlZCBhIFJFR19EV09SRCB2YWx1ZS4gRml4ZXMgT3ZlcmZsb3dFcnJvciBpbiB3aW5yZWcuU2V0VmFsdWVFeC4KKworLSBJc3N1ZSAjMTE5Mzk6IFNldCB0aGUgc3RfZGV2IGF0dHJpYnV0ZSBvZiBzdGF0X3Jlc3VsdCB0byBhbGxvdyBXaW5kb3dzIHRvCisgIHRha2UgYWR2YW50YWdlIG9mIHRoZSBvcy5wYXRoLnNhbWVmaWxlL3NhbWVvcGVuZmlsZS9zYW1lc3RhdCBpbXBsZW1lbnRhdGlvbnMKKyAgdXNlZCBieSBvdGhlciBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzE2NzcyOiBUaGUgaW50KCkgY29uc3RydWN0b3IncyBzZWNvbmQgYXJndW1lbnQgKGJhc2UpIG5vIGxvbmdlcgorICBhY2NlcHRzIG5vbiBpbnRlZ2VyIHZhbHVlcy4gIENvbnNpc3RlbnQgd2l0aCB0aGUgYmVoYXZpb3IgaW4gUHl0aG9uIDIuCisKKy0gSXNzdWUgIzE0NDcwOiBSZW1vdmUgdzl4cG9wZW4gc3VwcG9ydCBwZXIgUEVQIDExLgorCistIElzc3VlICM5ODU2OiBSZXBsYWNlIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2l0aCByYWlzaW5nIFR5cGVFcnJvcgorICBpbiBvYmplY3QuX19mb3JtYXRfXy4gUGF0Y2ggYnkgRmxvcmVudCBYaWNsdW5hLgorCistIElzc3VlICMxNjU5NzogSW4gYnVmZmVyZWQgYW5kIHRleHQgSU8sIGNhbGwgY2xvc2UoKSBvbiB0aGUgdW5kZXJseWluZyBzdHJlYW0KKyAgaWYgaW52b2tpbmcgZmx1c2goKSBmYWlscy4KKworLSBJc3N1ZSAjMTY3MjI6IEluIHRoZSBieXRlcygpIGNvbnN0cnVjdG9yLCB0cnkgdG8gY2FsbCBfX2J5dGVzX18gb24gdGhlCisgIGFyZ3VtZW50IGJlZm9yZSBfX2luZGV4X18uCisKKy0gSXNzdWUgIzE2NDIxOiBsb2FkaW5nIG11bHRpcGxlIG1vZHVsZXMgZnJvbSBvbmUgc2hhcmVkIG9iamVjdCBpcyBub3cKKyAgaGFuZGxlZCBjb3JyZWN0bHkgKHByZXZpb3VzbHksIHRoZSBmaXJzdCBtb2R1bGUgbG9hZGVkIGZyb20gdGhhdCBmaWxlCisgIHdhcyBzaWxlbnRseSByZXR1cm5lZCkuIFBhdGNoIGJ5IFbDoWNsYXYgxaBtaWxhdWVyLgorCistIElzc3VlICMxNjYwMjogV2hlbiBhIHdlYWtyZWYncyB0YXJnZXQgd2FzIHBhcnQgb2YgYSBsb25nIGRlYWxsb2NhdGlvbgorICBjaGFpbiwgdGhlIG9iamVjdCBjb3VsZCByZW1haW4gcmVhY2hhYmxlIHRocm91Z2ggaXRzIHdlYWtyZWYgZXZlbiB0aG91Z2gKKyAgaXRzIHJlZmNvdW50IGhhZCBkcm9wcGVkIHRvIHplcm8uCisKKy0gSXNzdWUgIzE2NDk1OiBSZW1vdmUgZXh0cmFuZW91cyBOVUxMIGVuY29kaW5nIGNoZWNrIGZyb20gYnl0ZXNfZGVjb2RlKCkuCisKKy0gSXNzdWUgIzE2NjE5OiBDcmVhdGUgTmFtZUNvbnN0YW50IEFTVCBjbGFzcyB0byByZXByZXNlbnQgTm9uZSwgVHJ1ZSwgYW5kIEZhbHNlCisgIGxpdGVyYWxzLiBBcyBhIHJlc3VsdCwgdGhlc2UgY29uc3RhbnRzIGFyZSBuZXZlciBsb2FkZWQgYXQgcnVudGltZSBmcm9tCisgIGJ1aWx0aW5zLgorCistIElzc3VlICMxNjQ1NTogT24gRnJlZUJTRCBhbmQgU29sYXJpcywgaWYgdGhlIGxvY2FsZSBpcyBDLCB0aGUKKyAgQVNDSUkvc3Vycm9nYXRlZXNjYXBlIGNvZGVjIGlzIG5vdyB1c2VkIChpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcpIHRvCisgIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gVGhpcyBjaGFuZ2UgZml4ZXMgaW5jb25zaXN0ZW5jaWVzIHdpdGgKKyAgb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSwgYmVjYXVzZSB0aGVzZSBvcGVyYXRpbmcgc3lzdGVtcyBhbm5vdW5jZSBhbgorICBBU0NJSSBsb2NhbGUgZW5jb2RpbmcsIGJ1dCBhY3R1YWxseSB1c2UgdGhlIElTTy04ODU5LTEgZW5jb2RpbmcgaW4gcHJhY3RpY2UuCisKKy0gSXNzdWUgIzE2NTYyOiBPcHRpbWl6ZSBkaWN0IGVxdWFsaXR5IHRlc3RpbmcuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjU4ODogU2lsZW5jZSB1bnVzZWQtYnV0LXNldCB3YXJuaW5ncyBpbiBQeXRob24vdGhyZWFkX3B0aHJlYWQKKworLSBJc3N1ZSAjMTY1OTI6IHN0cmluZ2xpYl9ieXRlc19qb2luIGRvZXNuJ3QgcmFpc2UgTWVtb3J5RXJyb3Igb24gYWxsb2NhdGlvbgorICBmYWlsdXJlLgorCistIElzc3VlICMxNjU0NjogRml4OiBhc3QuWWllbGRGcm9tIGFyZ3VtZW50IGlzIG5vdyBtYW5kYXRvcnkuCisKKy0gSXNzdWUgIzE2NTE0OiBGaXggcmVncmVzc2lvbiBjYXVzaW5nIGEgdHJhY2ViYWNrIHdoZW4gc3lzLnBhdGhbMF0gaXMgTm9uZQorICAoYWN0dWFsbHksIGFueSBub24tc3RyaW5nIG9yIG5vbi1ieXRlcyB0eXBlKS4KKworLSBJc3N1ZSAjMTYzMDY6IEZpeCBtdWx0aXBsZSBlcnJvciBtZXNzYWdlcyB3aGVuIHVua25vd24gY29tbWFuZCBsaW5lCisgIHBhcmFtZXRlcnMgd2hlcmUgcGFzc2VkIHRvIHRoZSBpbnRlcnByZXRlci4gIFBhdGNoIGJ5IEhpZXUgTmd1eWVuLgorCistIElzc3VlICMxNjIxNTogRml4IHBvdGVudGlhbCBkb3VibGUgbWVtb3J5IGZyZWUgaW4gc3RyLnJlcGxhY2UoKS4gIFBhdGNoCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MjkwOiBBIGZsb2F0IHJldHVybiB2YWx1ZSBmcm9tIHRoZSBfX2NvbXBsZXhfXyBzcGVjaWFsIG1ldGhvZCBpcyBubworICBsb25nZXIgYWNjZXB0ZWQgaW4gdGhlIGNvbXBsZXgoKSBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTY0MTY6IE9uIE1hYyBPUyBYLCBvcGVyYXRpbmcgc3lzdGVtIGRhdGEgYXJlIG5vdyBhbHdheXMKKyAgZW5jb2RlZC9kZWNvZGVkIHRvL2Zyb20gVVRGLTgvc3Vycm9nYXRlZXNjYXBlLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcKKyAgKHdoaWNoIG1heSBiZSBBU0NJSSBpZiBubyBsb2NhbGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0KSwgdG8gYXZvaWQKKyAgaW5jb25zaXN0ZW5jaWVzIHdpdGggb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBmdW5jdGlvbnMgd2hpY2ggYXJlCisgIGFscmVhZHkgdXNpbmcgVVRGLTgvc3Vycm9nYXRlZXNjYXBlLgorCistIElzc3VlICMxNjQ1MzogRml4IGVxdWFsaXR5IHRlc3Rpbmcgb2YgZGVhZCB3ZWFrcmVmIG9iamVjdHMuCisKKy0gSXNzdWUgIzk1MzU6IEZpeCBwZW5kaW5nIHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYnV0IG5vdCB5ZXQKKyAgaGFuZGxlZCBieSBQeXRob24gdG8gbm90IHBlcnNpc3QgYWZ0ZXIgb3MuZm9yaygpIGluIHRoZSBjaGlsZCBwcm9jZXNzLgorCistIElzc3VlICMxNDc5NDogRml4IHNsaWNlLmluZGljZXMgdG8gcmV0dXJuIGNvcnJlY3QgcmVzdWx0cyBmb3IgaHVnZSB2YWx1ZXMsCisgIHJhdGhlciB0aGFuIHJhaXNpbmcgT3ZlcmZsb3dFcnJvci4KKworLSBJc3N1ZSAjMTUwMDE6IGZpeCBzZWdmYXVsdCBvbiAiZGVsIHN5cy5tb2R1bGVzWydfX21haW5fXyddIi4gUGF0Y2ggYnkgVmljdG9yCisgIFN0aW5uZXIuCisKKy0gSXNzdWUgIzgyNzE6IHRoZSB1dGYtOCBkZWNvZGVyIG5vdyBvdXRwdXRzIHRoZSBjb3JyZWN0IG51bWJlciBvZiBVK0ZGRkQKKyAgY2hhcmFjdGVycyB3aGVuIHVzZWQgd2l0aCB0aGUgJ3JlcGxhY2UnIGVycm9yIGhhbmRsZXIgb24gaW52YWxpZCB1dGYtOAorICBzZXF1ZW5jZXMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLCB0ZXN0cyBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzU3NjU6IEFwcGx5IGEgaGFyZCByZWN1cnNpb24gbGltaXQgaW4gdGhlIGNvbXBpbGVyIGluc3RlYWQgb2YKKyAgYmxvd2luZyB0aGUgc3RhY2sgYW5kIHNlZ2ZhdWx0aW5nLiBJbml0aWFsIHBhdGNoIGJ5IEFuZHJlYSBHcmlmZmluaS4KKworLSBJc3N1ZSAjMTY0MDI6IFdoZW4gc2xpY2luZyBhIHJhbmdlLCBmaXggc2hhZG93aW5nIG9mIGV4Y2VwdGlvbnMgZnJvbQorICBfX2luZGV4X18uCisKKy0gSXNzdWUgIzE2MzM2OiBmaXggaW5wdXQgY2hlY2tpbmcgaW4gdGhlIHN1cnJvZ2F0ZXBhc3MgZXJyb3IgaGFuZGxlci4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjODQwMTogYXNzaWduaW5nIGFuIGludCB0byBhIGJ5dGVhcnJheSBzbGljZSAoZS5nLiBiWzM6NF0gPSA1KSBub3cKKyAgcmFpc2VzIGFuIGVycm9yLgorCistIElzc3VlICM3MzE3OiBEaXNwbGF5IGZ1bGwgdHJhY2ViYWNrcyB3aGVuIGFuIGVycm9yIG9jY3VycyBhc3luY2hyb25vdXNseS4KKyAgUGF0Y2ggYnkgQWxvbiBIb3JldiB3aXRoIHVwZGF0ZSBieSBBbGV4ZXkgS2FjaGF5ZXYuCisKKy0gSXNzdWUgIzE2MzA5OiBNYWtlIFBZVEhPTlBBVEg9IiIgYmVoYXZpb3IgdGhlIHNhbWUgYXMgaWYgUFlUSE9OUEFUSAorICBub3Qgc2V0IGF0IGFsbC4KKworLSBJc3N1ZSAjMTAxODk6IEltcHJvdmUgdGhlIGVycm9yIHJlcG9ydGluZyBvZiBTeW50YXhFcnJvcnMgcmVsYXRlZCB0byBnbG9iYWwKKyAgYW5kIG5vbmxvY2FsIHN0YXRlbWVudHMuCisKKy0gRml4IHNlZ2ZhdWx0cyBvbiBzZXR0aW5nIF9fcXVhbG5hbWVfXyBvbiBidWlsdGluIHR5cGVzIGFuZCBhdHRlbXB0aW5nIHRvCisgIGRlbGV0ZSBpdCBvbiBhbnkgdHlwZS4KKworLSBJc3N1ZSAjMTQ2MjU6IFJld3JpdGUgdGhlIFVURi0zMiBkZWNvZGVyLiBJdCBpcyBub3cgM3ggdG8gNHggZmFzdGVyLiBQYXRjaAorICB3cml0dGVuIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MzQ1OiBGaXggYW4gaW5maW5pdGUgbG9vcCB3aGVuIGBgZnJvbWtleXNgYCBvbiBhIGRpY3Qgc3ViY2xhc3MKKyAgcmVjZWl2ZWQgYSBub25lbXB0eSBkaWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorCistIElzc3VlICMxNjI3MTogRml4IHN0cmFuZ2UgYnVncyB0aGF0IHJlc3VsdGVkIGZyb20gX19xdWFsbmFtZV9fIGFwcGVhcmluZyBpbiBhCisgIGNsYXNzJ3MgX19kaWN0X18gYW5kIG9uIHR5cGUuCisKKy0gSXNzdWUgIzEyODA1OiBNYWtlIGJ5dGVzLmpvaW4gYW5kIGJ5dGVhcnJheS5qb2luIGZhc3RlciB3aGVuIHRoZSBzZXBhcmF0b3IKKyAgaXMgZW1wdHkuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICM2MDc0OiBFbnN1cmUgY2FjaGVkIGJ5dGVjb2RlIGZpbGVzIGNhbiBhbHdheXMgYmUgdXBkYXRlZCBieSB0aGUKKyAgdXNlciB0aGF0IGNyZWF0ZWQgdGhlbSwgZXZlbiB3aGVuIHRoZSBzb3VyY2UgZmlsZSBpcyByZWFkLW9ubHkuCisKKy0gSXNzdWUgIzE1OTU4OiBieXRlcy5qb2luIGFuZCBieXRlYXJyYXkuam9pbiBub3cgYWNjZXB0IGFyYml0cmFyeSBidWZmZXIKKyAgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ3ODM6IEltcHJvdmUgaW50KCkgZG9jc3RyaW5nIGFuZCBzd2l0Y2ggZG9jc3RyaW5ncyBmb3Igc3RyKCksCisgIHJhbmdlKCksIGFuZCBzbGljZSgpIHRvIHVzZSBtdWx0aS1saW5lIHNpZ25hdHVyZXMuCisKKy0gSXNzdWUgIzE2MTYwOiBTdWJjbGFzcyBzdXBwb3J0IG5vdyB3b3JrcyBmb3IgdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgorCistIFVwZ3JhZGUgVW5pY29kZSBkYXRhIChVQ0QpIHRvIHZlcnNpb24gNi4yLgorCistIElzc3VlICMxNTM3OTogRml4IHBhc3Npbmcgb2Ygbm9uLUJNUCBjaGFyYWN0ZXJzIGFzIGludGVnZXJzIGZvciB0aGUgY2hhcm1hcAorICBkZWNvZGVyIChhbHJlYWR5IHdvcmtpbmcgYXMgdW5pY29kZSBzdHJpbmdzKS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MTQ0OiBGaXggcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGhhbmRsaW5nIHBvaW50ZXJzIGFzIGludGVnZXIKKyAgdmFsdWVzLCBieSB1c2luZyBgUHlfdWludHB0cl90YCBpbnN0ZWFkIG9mIGBzaXplX3RgLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU5NjU6IEV4cGxpY2l0bHkgY2FzdCBgQVRfRkRDV0RgIGFzIChpbnQpLiAgUmVxdWlyZWQgb24gU29sYXJpcyAxMAorICAod2hpY2ggZGVmaW5lcyBgQVRfRkRDV0RgIGFzIGBgMHhmZmQxOTU1M2BgKSwgaGFybWxlc3Mgb24gb3RoZXIgcGxhdGZvcm1zLgorCistIElzc3VlICMxNTgzOTogQ29udmVydCBTeXN0ZW1FcnJvcnMgaW4gYHN1cGVyKClgIHRvIFJ1bnRpbWVFcnJvcnMuCisKKy0gSXNzdWUgIzE1NDQ4OiBCdWZmZXJlZCBJTyBub3cgZnJlZXMgdGhlIGJ1ZmZlciB3aGVuIGNsb3NlZCwgaW5zdGVhZAorICBvZiB3aGVuIGRlYWxsb2NhdGluZy4KKworLSBJc3N1ZSAjMTU4NDY6IEZpeCBTeXN0ZW1FcnJvciB3aGljaCBoYXBwZW5lZCB3aGVuIHVzaW5nIGBhc3QucGFyc2UoKWAgaW4gYW4KKyAgZXhjZXB0aW9uIGhhbmRsZXIgb24gY29kZSB3aXRoIHN5bnRheCBlcnJvcnMuCisKKy0gSXNzdWUgIzE1ODk3OiB6aXBpbXBvcnQuYyBkb2Vzbid0IGNoZWNrIHJldHVybiB2YWx1ZSBvZiBmc2VlaygpLgorICBQYXRjaCBieSBGZWxpcGUgQ3J1ei4KKworLSBJc3N1ZSAjMTU4MDE6IE1ha2Ugc3VyZSBtYXBwaW5ncyBwYXNzZWQgdG8gJyUnIGZvcm1hdHRpbmcgYXJlIGFjdHVhbGx5CisgIHN1YnNjcmlwdGFibGUuCisKKy0gSXNzdWUgIzE1MTExOiBfX2ltcG9ydF9fIHNob3VsZCBwcm9wYWdhdGUgSW1wb3J0RXJyb3Igd2hlbiByYWlzZWQgYXMgYQorICBzaWRlLWVmZmVjdCBvZiBhIG1vZHVsZSB0cmlnZ2VyZWQgZnJvbSB1c2luZyBmcm9tbGlzdC4KKworLSBJc3N1ZSAjMTUwMjI6IEFkZCBwaWNrbGUgYW5kIGNvbXBhcmlzb24gc3VwcG9ydCB0byB0eXBlcy5TaW1wbGVOYW1lc3BhY2UuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjNDMzMTogQWRkZWQgZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QgKEluaXRpYWwgcGF0Y2ggYnkgQWxvbiBIb3JldikKKworLSBJc3N1ZSAjMTM0NjE6IEZpeCBhIGNyYXNoIGluIHRoZSBUZXh0SU9XcmFwcGVyLnRlbGwgbWV0aG9kIG9uIDY0LWJpdAorICBwbGF0Zm9ybXMuICBQYXRjaCBieSBZb2dlc2ggQ2hhdWRoYXJpLgorCistIElzc3VlICMxODY4MTogRml4IGEgTmFtZUVycm9yIGluIGltcG9ydGxpYi5yZWxvYWQoKSAobm90aWNlZCBieSBXZWl6aGFvIExpKS4KKworLSBJc3N1ZSAjMTQzMjM6IEV4cGFuZGVkIHRoZSBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBjb2VmZmljaWVudHMgZm9yIHRoZQorICBSR0IgLS0gWUlRIGNvbnZlcnNpb25zIHNvIHRoYXQgdGhleSBtYXRjaCB0aGUgRkNDIE5UU0MgdmVyc2lvbnMuCisKIC0gSXNzdWUgIzE3OTk4OiBGaXggYW4gaW50ZXJuYWwgZXJyb3IgaW4gcmVndWxhciBleHByZXNzaW9uIGVuZ2luZS4KIAogLSBJc3N1ZSAjMTc1NTc6IEZpeCBvcy5nZXRncm91cHMoKSB0byB3b3JrIHdpdGggdGhlIG1vZGlmaWVkIGJlaGF2aW9yIG9mCiAgIGdldGdyb3VwcygyKSBvbiBPUyBYIDEwLjguICBPcmlnaW5hbCBwYXRjaCBieSBNYXRldXN6IExlbmlrLgogCistIElzc3VlICMxODYwODogQXZvaWQga2VlcGluZyBhIHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlIGxvY2FsZSBtb2R1bGUKKyAgaW5zaWRlIHRoZSBfaW8gbW9kdWxlLgorCistIElzc3VlICMxODYxOTogRml4IGF0ZXhpdCBsZWFraW5nIGNhbGxiYWNrcyByZWdpc3RlcmVkIGZyb20gc3ViLWludGVycHJldGVycywKKyAgYW5kIG1ha2UgaXQgR0MtYXdhcmUuCisKKy0gSXNzdWUgIzE1Njk5OiBUaGUgcmVhZGxpbmUgbW9kdWxlIG5vdyB1c2VzIFBFUCAzMTIxLXN0eWxlIG1vZHVsZQorICBpbml0aWFsaXphdGlvbiwgc28gYXMgdG8gcmVjbGFpbSBhbGxvY2F0ZWQgcmVzb3VyY2VzIChQeXRob24gY2FsbGJhY2tzKQorICBhdCBzaHV0ZG93bi4gIE9yaWdpbmFsIHBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTc2MTY6IHdhdmUub3BlbiBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4KKwogLSBJc3N1ZSAjMTg1OTk6IEZpeCBuYW1lIGF0dHJpYnV0ZSBvZiBfc2hhMS5zaGExKCkgb2JqZWN0LiBJdCBub3cgcmV0dXJucwogICAnU0hBMScgaW5zdGVhZCBvZiAnU0hBJy4KIAorLSBJc3N1ZSAjMTMyNjY6IEFkZGVkIGluc3BlY3QudW53cmFwIHRvIGVhc2lseSB1bnJhdmVsIF9fd3JhcHBlZF9fIGNoYWlucworICAoaW5pdGlhbCBwYXRjaCBieSBEYW5pZWwgVXJiYW4gYW5kIEFhcm9uIElsZXMpCisKIC0gSXNzdWUgIzE4NTYxOiBTa2lwIG5hbWUgaW4gY3R5cGVzJyBfYnVpbGRfY2FsbGFyZ3MoKSBpZiBuYW1lIGlzIE5VTEwuCiAKIC0gSXNzdWUgIzE4NTU5OiBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGVycm9yIGluIF9waWNrbGUgbW9kdWxlCiAKLS0gSXNzdWUgIzE4NTU2OiBDaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgUHlVbmljb2RlX0FzV2lkZUNoYXIoKSBjYWxsIGluCi0gIGN0eXBlcycgVV9zZXQoKS4KKy0gSXNzdWUgIzE4NTU2OiBDaGVjayB0aGUgcmV0dXJuIHR5cGUgb2YgUHlVbmljb2RlX0FzV2lkZUNoYXIoKSBpbiBjdHlwZSdzCisgIFVfc2V0KCkuCisKKy0gSXNzdWUgIzE3ODE4OiBhaWZjLmdldHBhcmFtcyBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUuCiAKIC0gSXNzdWUgIzE4NTQ5OiBFbGltaW5hdGUgZGVhZCBjb2RlIGluIHNvY2tldF9udG9obCgpCiAKKy0gSXNzdWUgIzE4NTMwOiBSZW1vdmUgYWRkaXRpb25hbCBzdGF0IGNhbGwgZnJvbSBwb3NpeHBhdGguaXNtb3VudC4KKyAgUGF0Y2ggYnkgQWxleCBHYXlub3IuCisKIC0gSXNzdWUgIzE4NTE0OiBGaXggdW5yZWFjaGFibGUgUHlfREVDUkVGKCkgY2FsbCBpbiBQeUNEYXRhX0Zyb21CYXNlT2JqKCkKIAorLSBJc3N1ZSAjOTE3NzogQ2FsbGluZyByZWFkKCkgb3Igd3JpdGUoKSBub3cgcmFpc2VzIFZhbHVlRXJyb3IsIG5vdAorICBBdHRyaWJ1dGVFcnJvciwgb24gYSBjbG9zZWQgU1NMIHNvY2tldC4gIFBhdGNoIGJ5IFNlbmtvIFJhc2ljLgorCiAtIElzc3VlICMxODUxMzogRml4IGJlaGF2aW91ciBvZiBjbWF0aC5yZWN0IHcuci50LiBzaWduZWQgemVyb3Mgb24gT1MgWCAxMC44ICsKICAgZ2NjLgogCistIElzc3VlICMxODQ3OTogQ2hhbmdlZCB2ZW52IEFjdGl2YXRlLnBzMSB0byBtYWtlIGRlYWN0aXZhdGUgYSBmdW5jdGlvbiwgYW5kCisgIHJlbW92ZWQgRGVhY3RpdmF0ZS5wczEuCisKIC0gSXNzdWUgIzE4NDgwOiBBZGQgbWlzc2luZyBjYWxsIHRvIFB5VHlwZV9SZWFkeSB0byB0aGUgX2VsZW1lbnR0cmVlIGV4dGVuc2lvbi4KIAogLSBJc3N1ZSAjMTc3Nzg6IEZpeCB0ZXN0IGRpc2NvdmVyeSBmb3IgdGVzdF9tdWx0aXByb2Nlc3NpbmcuIChQYXRjaCBieQogICBaYWNoYXJ5IFdhcmUuKQogCistIElzc3VlICMxODM5MzogVGhlIHByaXZhdGUgbW9kdWxlIF9nZXN0YWx0IGFuZCBwcml2YXRlIGZ1bmN0aW9ucworICBwbGF0Zm9ybS5fbWFjX3Zlcl9nZXN0YWx0LCBwbGF0Zm9ybS5fbWFjX3Zlcl9sb29rdXAgYW5kCisgIHBsYXRmb3JtLl9iY2Qyc3RyIGhhdmUgYmVlbiByZW1vdmVkLiBUaGlzIGRvZXMgbm90IGFmZmVjdCB0aGUgcHVibGljCisgIGludGVyZmFjZSBvZiB0aGUgcGxhdGZvcm0gbW9kdWxlLgorCistIElzc3VlICMxNzQ4MjogZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyIChhbmQgZnVuY3Rvb2xzLndyYXBzKSBub3cgc2V0IHRoZQorICBfX3dyYXBwZWRfXyBhdHRyaWJ1dGUgY29ycmVjdGx5IGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gaGFzIGEKKyAgX193cmFwcGVkX18gYXR0cmlidXRlIHNldC4KKwogLSBJc3N1ZSAjMTg0MzE6IFRoZSBuZXcgZW1haWwgaGVhZGVyIHBhcnNlciBub3cgZGVjb2RlcyBSRkMyMDQ3IGVuY29kZWQgd29yZHMKICAgaW4gc3RydWN0dXJlZCBoZWFkZXJzLgogCkBAIC04ODgsMTEgKzI1MDQsMTkgQEAKIC0gSXNzdWUgIzE4MTAxOiBUY2wuc3BsaXQoKSBub3cgcHJvY2VzcyBzdHJpbmdzIG5lc3RlZCBpbiBhIHR1cGxlIGFzIGl0CiAgIGRvIHdpdGggYnl0ZSBzdHJpbmdzLgogCistIElzc3VlICMxODExNjogZ2V0cGFzcyB3YXMgYWx3YXlzIGdldHRpbmcgYW4gZXJyb3Igd2hlbiB0ZXN0aW5nIC9kZXYvdHR5LAorICBhbmQgdGh1cyB3YXMgYWx3YXlzIGZhbGxpbmcgYmFjayB0byBzdGRpbiwgYW5kIHdvdWxkIHRoZW4gcmFpc2UgYW4gZXhjZXB0aW9uCisgIGlmIHN0ZGluIGNvdWxkIG5vdCBiZSB1c2VkIChzdWNoIGFzIC9kZXYvbnVsbCkuICBJdCBhbHNvIGxlYWtlZCBhbiBvcGVuIGZpbGUuCisgIEFsbCBvZiB0aGVzZSBpc3N1ZXMgYXJlIG5vdyBmaXhlZC4KKwogLSBJc3N1ZSAjMTcxOTg6IEZpeCBhIE5hbWVFcnJvciBpbiB0aGUgZGJtIG1vZHVsZS4gIFBhdGNoIGJ5IFZhbGVudGluYQogICBNdWtoYW1lZHpoYW5vdmEuCiAKIC0gSXNzdWUgIzE4MDEzOiBGaXggY2dpLkZpZWxkU3RvcmFnZSB0byBwYXJzZSB0aGUgVzNDIHNhbXBsZSBmb3JtLgogCistIElzc3VlICMxODAyMDogaW1wcm92ZSBodG1sLmVzY2FwZSBzcGVlZCBieSBhbiBvcmRlciBvZiBtYWduaXR1ZGUuCisgIFBhdGNoIGJ5IE1hdHQgQnJ5YW50LgorCiAtIElzc3VlICMxODM0NzogRWxlbWVudFRyZWUncyBodG1sIHNlcmlhbGl6ZXIgbm93IHByZXNlcnZlcyB0aGUgY2FzZSBvZgogICBjbG9zaW5nIHRhZ3MuCiAKQEAgLTkwNyw2ICsyNTMxLDkgQEAKIC0gSXNzdWUgIzE4MzM5OiBOZWdhdGl2ZSBpbnRzIGtleXMgaW4gdW5waWNrbGVyLm1lbW8gZGljdCBubyBsb25nZXIgY2F1c2UgYQogICBzZWdmYXVsdCBpbnNpZGUgdGhlIF9waWNrbGUgQyBleHRlbnNpb24uCiAKKy0gSXNzdWUgIzE4MjQwOiBUaGUgSE1BQyBtb2R1bGUgaXMgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gYnl0ZXMgYW5kIGFjY2VwdHMKKyAgYW55IGJ5dGVzLWxpa2Ugb2JqZWN0LCBlLmcuIG1lbW9yeXZpZXcuIE9yaWdpbmFsIHBhdGNoIGJ5IEpvbmFzIEJvcmdzdHLDtm0uCisKIC0gSXNzdWUgIzE4MjI0OiBSZW1vdmVkIHB5ZG9jIHNjcmlwdCBmcm9tIGNyZWF0ZWQgdmVudiwgYXMgaXQgY2F1c2VzIHByb2JsZW1zCiAgIG9uIFdpbmRvd3MgYW5kIGFkZHMgbm8gdmFsdWUgb3ZlciBhbmQgYWJvdmUgcHl0aG9uIC1tIHB5ZG9jIC4uLgogCkBAIC05MTcsMzEgKzI1NDQsOTIgQEAKIC0gSXNzdWUgIzE0MzYwOiBlbmNvZGVfcXVvcHJpIGNhbiBub3cgYmUgc3VjY2Vzc2Z1bGx5IHVzZWQgYXMgYW4gZW5jb2RlcgogICB3aGVuIGNvbnN0cnVjdGluZyBhIE1JTUVBcHBsaWNhdGlvbiBvYmplY3QuCiAKKy0gSXNzdWUgIzExMzkwOiBBZGQgLW8gYW5kIC1mIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHRoZSBkb2N0ZXN0IENMSSB0bworICBzcGVjaWZ5IGRvY3Rlc3Qgb3B0aW9ucyAoYW5kIGNvbnZlcnQgaXQgdG8gdXNpbmcgYXJncGFyc2UpLgorCiAtIElzc3VlICMxODEzNTogc3NsLlNTTFNvY2tldC53cml0ZSgpIG5vdyByYWlzZXMgYW4gT3ZlcmZsb3dFcnJvciBpZiB0aGUgaW5wdXQKICAgc3RyaW5nIGluIGxvbmdlciB0aGFuIDIgZ2lnYWJ5dGVzLCBhbmQgc3NsLlNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKCkKICAgcmFpc2VzIGEgVmFsdWVFcnJvciBpZiB0aGUgcGFzc3dvcmQgaXMgbG9uZ2VyIHRoYW4gMiBnaWdhYnl0ZXMuIFRoZSBzc2wKICAgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgcGFydGlhbCB3cml0ZS4KIAorLSBJc3N1ZSAjMTEwMTY6IEFkZCBDIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdGF0IG1vZHVsZSBhcyBfc3RhdC4KKwogLSBJc3N1ZSAjMTgyNDg6IEZpeCBsaWJmZmkgYnVpbGQgb24gQUlYLgogCiAtIElzc3VlICMxODI1OTogRGVjbGFyZSBzZXRob3N0bmFtZSBpbiBzb2NrZXRtb2R1bGUuYyBmb3IgQUlYCiAKKy0gSXNzdWUgIzE4MTQ3OiBBZGQgZGlhZ25vc3RpYyBmdW5jdGlvbnMgdG8gc3NsLlNTTENvbnRleHQoKS4gZ2V0X2NhX2xpc3QoKQorICBsaXN0cyBhbGwgbG9hZGVkIENBIGNlcnRpZmljYXRlcyBhbmQgY2VydF9zdG9yZV9zdGF0cygpIHJldHVybnMgYW1vdW50IG9mCisgIGxvYWRlZCBYLjUwOSBjZXJ0cywgWC41MDkgQ0EgY2VydHMgYW5kIENSTHMuCisKIC0gSXNzdWUgIzE4MTY3OiBjZ2kuRmllbGRTdG9yYWdlIG5vIGxvbmdlciBmYWlscyB0byBoYW5kbGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YQogICB3aGVuIFxyXG4gYXBwZWFycyBhdCBlbmQgb2YgNjU1MzUgYnl0ZXMgd2l0aG91dCBvdGhlciBuZXdsaW5lcy4KIAorLSBJc3N1ZSAjMTgwNzY6IEludHJvZHVjZSBpbXBvcnRsaWIudXRpbC5kZWNvZGVfc291cmNlKCkuCistIElzc3VlICMxODM1NzogYWRkIHRlc3RzIGZvciBkaWN0dmlldyBzZXQgZGlmZmVyZW5jZS4KKyAgUGF0Y2ggYnkgRnJhc2VyIFR3ZWVkYWxlLgorCistIGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2UoKSBubyBsb25nZXIgY2hhbmdlcyBTeW50YXhFcnJvciBvcgorICBVbmljb2RlRGVjb2RlRXJyb3IgaW50byBJbXBvcnRFcnJvci4KKworLSBJc3N1ZSAjMTgwNTgsIDE4MDU3OiBNYWtlIHRoZSBuYW1lc3BhY2UgcGFja2FnZSBsb2FkZXIgbWVldCB0aGUKKyAgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyIEFCQywgYWxsb3dpbmcgZm9yIG5hbWVzcGFjZSBwYWNrYWdlcyB0byB3b3JrIHdpdGgKKyAgcnVucHkuCisKKy0gSXNzdWUgIzE3MTc3OiBUaGUgaW1wIG1vZHVsZSBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uLgorCiAtIHN1YnByb2Nlc3M6IFByZXZlbnQgYSBwb3NzaWJsZSBkb3VibGUgY2xvc2Ugb2YgcGFyZW50IHBpcGUgZmRzIHdoZW4gdGhlCiAgIHN1YnByb2Nlc3MgZXhlYyBydW5zIGludG8gYW4gZXJyb3IuICBQcmV2ZW50IGEgcmVndWxhciBtdWx0aS1jbG9zZSBvZiB0aGUKICAgL2Rldi9udWxsIGZkIHdoZW4gYW55IG9mIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciB3YXMgc2V0IHRvIERFVk5VTEwuCiAKKy0gSXNzdWUgIzE4MTk0OiBJbnRyb2R1Y2UgaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoKSBhbmQKKyAgc291cmNlX2Zyb21fY2FjaGUoKSB3aGlsZSBkb2N1bWVudGluZyB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbnMgaW4gaW1wIGFzCisgIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzE3OTA3OiBEb2N1bWVudCBpbXAubmV3X21vZHVsZSgpIGFzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mCisgIHR5cGVzLk1vZHVsZVR5cGUuCisKKy0gSXNzdWUgIzE4MTkyOiBJbnRyb2R1Y2UgaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSIGFuZCBkb2N1bWVudCBhcyBkZXByZWNhdGVkCisgIGltcC5nZXRfbWFnaWMoKS4KKworLSBJc3N1ZSAjMTgxNDk6IEFkZCBmaWxlY21wLmNsZWFyX2NhY2hlKCkgdG8gbWFudWFsbHkgY2xlYXIgdGhlIGZpbGVjbXAgY2FjaGUuCisgIFBhdGNoIGJ5IE1hcmsgTGV2aXR0CisKKy0gSXNzdWUgIzE4MTkzOiBBZGQgaW1wb3J0bGliLnJlbG9hZCgpLgorCistIElzc3VlICMxODE1NzogU3RvcCB1c2luZyBpbXAubG9hZF9tb2R1bGUoKSBpbiBweWRvYy4KKwogLSBJc3N1ZSAjMTYxMDI6IE1ha2UgdXVpZC5fbmV0Ymlvc19nZXRub2RlKCkgd29yayBhZ2FpbiBvbiBQeXRob24gMy4KIAorLSBJc3N1ZSAjMTcxMzQ6IEFkZCBzc2wuZW51bV9jZXJ0X3N0b3JlKCkgYXMgaW50ZXJmYWNlIHRvIFdpbmRvd3MnIGNlcnQgc3RvcmUuCisKKy0gSXNzdWUgIzE4MTQzOiBJbXBsZW1lbnQgc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpIGluIG9yZGVyIHRvIGRlYnVnCisgIHRoZSBkZWZhdWx0IGxvY2F0aW9ucyBmb3IgY2FmaWxlIGFuZCBjYXBhdGguCisKKy0gSXNzdWUgIzE3MzE0OiBNb3ZlIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIG92ZXIgdG8gaW1wb3J0bGliLgorCistIElzc3VlICMxMTk1OTogU01UUFNlcnZlciBhbmQgU01UUENoYW5uZWwgbm93IHRha2UgYW4gb3B0aW9uYWwgbWFwLCB1c2Ugb2YKKyAgd2hpY2ggYXZvaWRzIGFmZmVjdGluZyBnbG9iYWwgc3RhdGUuCisKIC0gSXNzdWUgIzE4MTA5OiBvcy51bmFtZSgpIG5vdyBkZWNvZGVzIGZpZWxkcyBmcm9tIHRoZSBsb2NhbGUgZW5jb2RpbmcsIGFuZAogICBzb2NrZXQuZ2V0aG9zdG5hbWUoKSBub3cgZGVjb2RlcyB0aGUgaG9zdG5hbWUgZnJvbSB0aGUgbG9jYWxlIGVuY29kaW5nLAogICBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBVVEYtOCBlbmNvZGluZyBpbiBzdHJpY3QgbW9kZS4KIAorLSBJc3N1ZSAjMTgwODk6IEltcGxlbWVudCBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIubG9hZF9tb2R1bGUuCisKKy0gSXNzdWUgIzE4MDg4OiBJbnRyb2R1Y2UgaW1wb3J0bGliLmFiYy5Mb2FkZXIuaW5pdF9tb2R1bGVfYXR0cnMgZm9yIHNldHRpbmcKKyAgbW9kdWxlIGF0dHJpYnV0ZXMuIExlYWRzIHRvIHRoZSBwZW5kaW5nIGRlcHJlY2F0aW9uIG9mCisgIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyLgorCiAtIElzc3VlICMxNzQwMzogdXJsbGliLnBhcnNlLnJvYm90cGFyc2VyIG5vcm1hbGl6ZXMgdGhlIHVybHMgYmVmb3JlIGFkZGluZyB0bwogICBydWxlbGluZS4gVGhpcyBoZWxwcyBpbiBoYW5kbGluZyBjZXJ0YWluIHR5cGVzIGludmFsaWQgdXJscyBpbiBhIGNvbnNlcnZhdGl2ZQotICBtYW5uZXIuCisgIG1hbm5lci4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgTWhlciBNb3ZzaXN5YW4uCisKKy0gSXNzdWUgIzE4MDcwOiBIYXZlIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyKCkgc2V0IGF0dHJpYnV0ZXMKKyAgdW5jb25kaXRpb25hbGx5IGluIG9yZGVyIHRvIHByb3Blcmx5IHN1cHBvcnQgcmVsb2FkaW5nLgorCistIEFkZGVkIGltcG9ydGxpYi51dGlsLm1vZHVsZV90b19sb2FkIHRvIHJldHVybiBhIGNvbnRleHQgbWFuYWdlciB0byBwcm92aWRlIHRoZQorICBwcm9wZXIgbW9kdWxlIG9iamVjdCB0byBsb2FkLgogCiAtIElzc3VlICMxODAyNTogRml4ZWQgYSBzZWdmYXVsdCBpbiBpby5CdWZmZXJlZElPQmFzZS5yZWFkaW50bygpIHdoZW4gcmF3CiAgIHN0cmVhbSdzIHJlYWQoKSByZXR1cm5zIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCkBAIC05NTAsMjAgKzI2MzgsNDIgQEAKICAgYmluYXNjaWkuRXJyb3IgaWYgdGhlcmUgYXJlIG5vbi1iMzItYWxwaGFiZXQgY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZSBpbnB1dAogICBzdHJpbmcsIGluc3RlYWQgb2YgYSBUeXBlRXJyb3IuCiAKLS0gSXNzdWUgIzEzNzcyOiBSZXN0b3JlZCBkaXJlY3RvcnkgZGV0ZWN0aW9uIG9mIHRhcmdldHMgaW4gYGBvcy5zeW1saW5rYGAgb24KLSAgV2luZG93cywgd2hpY2ggd2FzIHRlbXBvcmFyaWx5IHJlbW92ZWQgaW4gUHl0aG9uIDMuMi4zIGR1ZSB0byBhbiBpbmNvbXBsZXRlCi0gIGltcGxlbWVudGF0aW9uLiBUaGUgaW1wbGVtZW50YXRpb24gbm93IHdvcmtzIGV2ZW4gaWYgdGhlIHN5bWxpbmsgaXMgY3JlYXRlZAotICBpbiBhIGxvY2F0aW9uIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorLSBJc3N1ZSAjMTgwNzI6IEltcGxlbWVudCBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X2NvZGUoKSBhbmQKKyAgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXIuZ2V0X2NvZGUoKS4KIAotLSBJc3N1ZSAjMTY5ODY6IEVsZW1lbnRUcmVlIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGEgc3RyaW5nIGlucHV0IG5vdCBvbmx5IHdoZW4KLSAgYW4gaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIFVURi04IG9yIFVTLUFTQ0lJLgorLSBJc3N1ZSAjODI0MDogU2V0IHRoZSBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUiBmbGFnIG9uIFNTTAorICBzb2NrZXRzLgorCistIElzc3VlICMxNzI2OTogV29ya2Fyb3VuZCBmb3Igc29ja2V0LmdldGFkZHJpbmZvIGNyYXNoIG9uIE1hY09TIFgKKyAgd2l0aCBwb3J0IE5vbmUgb3IgIjAiIGFuZCBmbGFncyBBSV9OVU1FUklDU0VSVi4KKworLSBJc3N1ZSAjMTY5ODY6IEVsZW1lbnRUcmVlIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBzdHJpbmcgaW5wdXQgd2hlbiB0aGUKKyAgaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIG5vdCBVVEYtOCBvciBVUy1BU0NJSS4KKworLSBJc3N1ZSAjMTc5OTY6IHNvY2tldCBtb2R1bGUgbm93IGV4cG9zZXMgQUZfTElOSyBjb25zdGFudCBvbiBCU0QgYW5kIE9TWC4KKworLSBJc3N1ZSAjMTc5MDA6IEFsbG93ZWQgcGlja2xpbmcgb2YgcmVjdXJzaXZlIE9yZGVyZWREaWN0cy4gIERlY3JlYXNlZCBwaWNrbGVkCisgIHNpemUgYW5kIHBpY2tsaW5nIHRpbWUuCisKKy0gSXNzdWUgIzE3OTE0OiBBZGQgb3MuY3B1X2NvdW50KCkuIFBhdGNoIGJ5IFlvZ2VzaCBDaGF1ZGhhcmksIGJhc2VkIG9uIGFuCisgIGluaXRpYWwgcGF0Y2ggYnkgVHJlbnQgTmVsc29uLgogCiAtIElzc3VlICMxNzgxMjogRml4ZWQgcXVhZHJhdGljIGNvbXBsZXhpdHkgb2YgYmFzZTY0LmIzMmVuY29kZSgpLgorICBPcHRpbWl6ZSBiYXNlNjQuYjMyZW5jb2RlKCkgYW5kIGJhc2U2NC5iMzJkZWNvZGUoKSAoc3BlZWQgdXAgdG8gM3gpLgogCiAtIElzc3VlICMxNzk4MDogRml4IHBvc3NpYmxlIGFidXNlIG9mIHNzbC5tYXRjaF9ob3N0bmFtZSgpIGZvciBkZW5pYWwgb2YKICAgc2VydmljZSB1c2luZyBjZXJ0aWZpY2F0ZXMgd2l0aCBtYW55IHdpbGRjYXJkcyAoQ1ZFLTIwMTMtMjA5OSkuCiAKLS0gSXNzdWUgIzE3OTgxOiBDbG9zZWQgc29ja2V0IG9uIGVycm9yIGluIFN5c0xvZ0hhbmRsZXIuCistIElzc3VlICMxNTc1ODogRml4IEZpbGVJTy5yZWFkYWxsKCkgc28gaXQgbm8gbG9uZ2VyIGhhcyBPKG4qKjIpIGNvbXBsZXhpdHkuCisKKy0gSXNzdWUgIzE0NTk2OiBUaGUgc3RydWN0LlN0cnVjdCgpIG9iamVjdHMgbm93IHVzZSBhIG1vcmUgY29tcGFjdAorICBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTc5ODE6IGxvZ2dpbmcncyBTeXNMb2dIYW5kbGVyIG5vdyBjbG9zZXMgdGhlIHNvY2tldCB3aGVuIGl0IGNhdGNoZXMKKyAgc29ja2V0IE9TRXJyb3JzLgorCistIElzc3VlICMxNzk2NDogRml4IG9zLnN5c2NvbmYoKTogdGhlIHJldHVybiB0eXBlIG9mIHRoZSBDIHN5c2NvbmYoKSBmdW5jdGlvbgorICBpcyBsb25nLCBub3QgaW50LgogCiAtIEZpeCB0eXBvcyBpbiB0aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZS4KIApAQCAtOTcxLDEwICsyNjgxLDE2MyBAQAogCiAtIElzc3VlICMxNzk2ODogRml4IG1lbW9yeSBsZWFrIGluIG9zLmxpc3R4YXR0cigpLgogCi0tIElzc3VlICMxNzI2OTogV29ya2Fyb3VuZCBmb3Igc29ja2V0LmdldGFkZHJpbmZvIGNyYXNoIG9uIE1hY09TIFgKLSAgd2l0aCBwb3J0IE5vbmUgb3IgIjAiIGFuZCBmbGFncyBBSV9OVU1FUklDU0VSVi4KKy0gSXNzdWUgIzE3NjA2OiBGaXhlZCBzdXBwb3J0IG9mIGVuY29kZWQgYnl0ZSBzdHJpbmdzIGluIHRoZSBYTUxHZW5lcmF0b3IKKyAgY2hhcmFjdGVycygpIGFuZCBpZ25vcmFibGVXaGl0ZXNwYWNlKCkgbWV0aG9kcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFNlYmFzdGlhbgorICBPcnRpeiBWYXNxdWV6LgogCi0tIElzc3VlICMxODY5ODogRW5zdXJlIGltcC5yZWxvYWQoKSByZXR1cm5zIHRoZSBtb2R1bGUgb3V0IG9mIHN5cy5tb2R1bGVzLgorLSBJc3N1ZSAjMTc3MzI6IElnbm9yZSBkaXN0dXRpbHMuY2ZnIG9wdGlvbnMgcGVydGFpbmluZyB0byBpbnN0YWxsIHBhdGhzIGlmIGEKKyAgdmlydHVhbCBlbnZpcm9ubWVudCBpcyBhY3RpdmUuCisKKy0gSXNzdWUgIzE3OTE1OiBGaXggaW50ZXJvcGVyYWJpbGl0eSBvZiB4bWwuc2F4IHdpdGggZmlsZSBvYmplY3RzIHJldHVybmVkIGJ5CisgIGNvZGVjcy5vcGVuKCkuCisKKy0gSXNzdWUgIzE2NjAxOiBSZXN0YXJ0aW5nIGl0ZXJhdGlvbiBvdmVyIHRhcmZpbGUgcmVhbGx5IHJlc3RhcnRzIHJhdGhlcgorICB0aGFuIGNvbnRpbnVpbmcgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZi4gIFBhdGNoIGJ5IE1pY2hhZWwgQmlydHdlbGwuCisKKy0gSXNzdWUgIzE3Mjg5OiBUaGUgcmVhZGxpbmUgbW9kdWxlIG5vdyBwbGF5cyBuaWNlciB3aXRoIGV4dGVybmFsIG1vZHVsZXMKKyAgb3IgYXBwbGljYXRpb25zIGNoYW5naW5nIHRoZSBybF9jb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzIGdsb2JhbAorICB2YXJpYWJsZS4gIEluaXRpYWwgcGF0Y2ggYnkgQnJhZGxleSBGcm9laGxlLgorCistIElzc3VlICMxMjE4MTogc2VsZWN0IG1vZHVsZTogRml4IHN0cnVjdCBrZXZlbnQgZGVmaW5pdGlvbiBvbiBPcGVuQlNEIDY0LWJpdAorICBwbGF0Zm9ybXMuIFBhdGNoIGJ5IEZlZGVyaWNvIFNjaHdpbmR0LgorCistIElzc3VlICMxMTgxNjogbXVsdGlwbGUgaW1wcm92ZW1lbnRzIHRvIHRoZSBkaXMgbW9kdWxlOiBnZXRfaW5zdHJ1Y3Rpb25zCisgIGdlbmVyYXRvciwgYWJpbGl0eSB0byByZWRpcmVjdCBvdXRwdXQgdG8gYSBmaWxlLCBCeXRlY29kZSBhbmQgSW5zdHJ1Y3Rpb24KKyAgYWJzdHJhY3Rpb25zLiBQYXRjaCBieSBOaWNrIENvZ2hsYW4sIFJ5YW4gS2VsbHkgYW5kIFRob21hcyBLbHV5dmVyLgorCistIElzc3VlICMxMzgzMTogRW1iZWQgc3RyaW5naWZpY2F0aW9uIG9mIHJlbW90ZSB0cmFjZWJhY2sgaW4gbG9jYWwKKyAgdHJhY2ViYWNrIHJhaXNlZCB3aGVuIHBvb2wgdGFzayByYWlzZXMgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxNTUyODogQWRkIHdlYWtyZWYuZmluYWxpemUgdG8gc3VwcG9ydCBmaW5hbGl6YXRpb24gdXNpbmcKKyAgd2Vha3JlZiBjYWxsYmFja3MuCisKKy0gSXNzdWUgIzE0MTczOiBBdm9pZCBjcmFzaGluZyB3aGVuIHJlYWRpbmcgYSBzaWduYWwgaGFuZGxlciBkdXJpbmcKKyAgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisKKy0gSXNzdWUgIzE1OTAyOiBGaXggaW1wLmxvYWRfbW9kdWxlKCkgYWNjZXB0aW5nIE5vbmUgYXMgYSBmaWxlIHdoZW4gbG9hZGluZyBhbgorICBleHRlbnNpb24gbW9kdWxlLgorCistIElzc3VlICMxMzcyMTogU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkgYW5kIFNTTFNvY2tldC5kb19oYW5kc2hha2UoKSBub3cKKyAgcmFpc2UgYW4gT1NFcnJvciB3aXRoIEVOT1RDT05OLCBpbnN0ZWFkIG9mIGFuIEF0dHJpYnV0ZUVycm9yLCB3aGVuIHRoZQorICBTU0xTb2NrZXQgaXMgbm90IGNvbm5lY3RlZC4KKworLSBJc3N1ZSAjMTQ2Nzk6IGFkZCBhbiBfX2FsbF9fICh0aGF0IGNvbnRhaW5zIG9ubHkgSFRNTFBhcnNlcikgdG8gaHRtbC5wYXJzZXIuCisKKy0gSXNzdWUgIzE3ODAyOiBGaXggYW4gVW5ib3VuZExvY2FsRXJyb3IgaW4gaHRtbC5wYXJzZXIuICBJbml0aWFsIHRlc3RzIGJ5CisgIFRob21hcyBCYXJsb3cuCisKKy0gSXNzdWUgIzE3MzU4OiBNb2R1bGVzIGxvYWRlZCBieSBpbXAubG9hZF9zb3VyY2UoKSBhbmQgbG9hZF9jb21waWxlZCgpIChhbmQgYnkKKyAgZXh0ZW50aW9uIGxvYWRfbW9kdWxlKCkpIG5vdyBoYXZlIGEgYmV0dGVyIGNoYW5jZSBvZiB3b3JraW5nIHdoZW4gcmVsb2FkZWQuCisKKy0gSXNzdWUgIzE3ODA0OiBOZXcgZnVuY3Rpb24gYGBzdHJ1Y3QuaXRlcl91bnBhY2tgYCBhbGxvd3MgZm9yIHN0cmVhbWluZworICBzdHJ1Y3QgdW5wYWNraW5nLgorCistIElzc3VlICMxNzgzMDogV2hlbiBrZXl3b3JkLnB5IGlzIHVzZWQgdG8gdXBkYXRlIGEga2V5d29yZCBmaWxlLCBpdCBub3cKKyAgcHJlc2VydmVzIHRoZSBsaW5lIGVuZGluZ3Mgb2YgdGhlIG9yaWdpbmFsIGZpbGUuCisKKy0gSXNzdWUgIzE3MjcyOiBNYWtpbmcgdGhlIHVybGxpYi5yZXF1ZXN0J3MgUmVxdWVzdC5mdWxsX3VybCBhIGRlc2NyaXB0b3IuCisgIEZpeGVzIGJ1Z3Mgd2l0aCBhc3NpZ25tZW50IHRvIGZ1bGxfdXJsLiBQYXRjaCBieSBEZW1pYW4gQnJlY2h0LgorCistIElzc3VlICMxNzM1MzogUGxpc3RsaWIgZW1pdHRlZCBlbXB0eSBkYXRhIHRhZ3Mgd2l0aCBkZWVwbHkgbmVzdGVkIGRhdGFzdHJ1Y3R1cmVzCisKKy0gSXNzdWUgIzExNzE0OiBVc2UgJ3dpdGgnIHN0YXRlbWVudHMgdG8gYXNzdXJlIGEgU2VtYXBob3JlIHJlbGVhc2VzIGEKKyAgY29uZGl0aW9uIHZhcmlhYmxlLiAgT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIFJhY2hlbC4KKworLSBJc3N1ZSAjMTY2MjQ6IGBzdWJwcm9jZXNzLmNoZWNrX291dHB1dGAgbm93IGFjY2VwdHMgYW4gYGlucHV0YCBhcmd1bWVudCwKKyAgYWxsb3dpbmcgdGhlIHN1YnByb2Nlc3MncyBzdGRpbiB0byBiZSBwcm92aWRlZCBhcyBhIChieXRlKSBzdHJpbmcuCisgIFBhdGNoIGJ5IFphY2sgV2VpbmJlcmcuCisKKy0gSXNzdWUgIzE3Nzk1OiBSZXZlcnRlZCBiYWNrd2FyZHMtaW5jb21wYXRpYmxlIGNoYW5nZSBpbiBTeXNMb2dIYW5kbGVyIHdpdGgKKyAgVW5peCBkb21haW4gc29ja2V0cy4KKworLSBJc3N1ZSAjMTY2OTQ6IEFkZCBhIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHRoZSBvcGVyYXRvciBtb2R1bGUuCisgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKworLSBJc3N1ZSAjMTExODI6IHJlbW92ZSB0aGUgdW51c2VkIGFuZCB1bmRvY3VtZW50ZWQgcHlkb2MuU2Nhbm5lciBjbGFzcy4KKyAgUGF0Y2ggYnkgTWFydGluIE1vcnJpc29uLgorCistIElzc3VlICMxNzc0MTogQWRkIEVsZW1lbnRUcmVlLlhNTFB1bGxQYXJzZXIsIGFuIGV2ZW50LWRyaXZlbiBwYXJzZXIgZm9yCisgIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMuCisKKy0gSXNzdWUgIzE3NTU1OiBGaXggRm9ya0F3YXJlVGhyZWFkTG9jayBzbyB0aGF0IHNpemUgb2YgYWZ0ZXIgZm9yaworICByZWdpc3RyeSBkb2VzIG5vdCBncm93IGV4cG9uZW50aWFsbHkgd2l0aCBnZW5lcmF0aW9uIG9mIHByb2Nlc3MuCisKKy0gSXNzdWUgIzE3NzA3OiBmaXggcmVncmVzc2lvbiBpbiBtdWx0aXByb2Nlc3NpbmcuUXVldWUncyBnZXQoKSBtZXRob2Qgd2hlcmUKKyAgaXQgZGlkIG5vdCBibG9jayBmb3Igc2hvcnQgdGltZW91dHMuCisKKy0gSXNzdWUgIzE3NzIwOiBGaXggdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwaWNrbGUuVW5waWNrbGVyIHRvIGNvcnJlY3RseQorICBwcm9jZXNzIHRoZSBBUFBFTkRTIG9wY29kZSB3aGVuIGl0IGlzIHVzZWQgb24gbm9uLWxpc3Qgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTcwMTI6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBmYWxscyBiYWNrIHRvIHRoZSBQQVRIIGVudmlyb25tZW50CisgIHZhcmlhYmxlIGlmIGFuIGVtcHR5IHBhdGggYXJndW1lbnQgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTc3MTA6IEZpeCBwaWNrbGUgcmFpc2luZyBhIFN5c3RlbUVycm9yIG9uIGJvZ3VzIGlucHV0LgorCistIElzc3VlICMxNzM0MTogSW5jbHVkZSB0aGUgaW52YWxpZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tIHJlIGFib3V0CisgIGludmFsaWQgZ3JvdXAgbmFtZXMuCisKKy0gSXNzdWUgIzE3NzAyOiBvcy5lbnZpcm9uIG5vdyByYWlzZXMgS2V5RXJyb3Igd2l0aCB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgbmFtZSAoc3RyIG9uIFVOSVgpLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBlbmNvZGVkIG5hbWUgKGJ5dGVzIG9uCisgIFVOSVgpLgorCistIElzc3VlICMxNjE2MzogTWFrZSB0aGUgaW1wb3J0bGliIGJhc2VkIHZlcnNpb24gb2YgcGtndXRpbC5pdGVyX2ltcG9ydGVycworICB3b3JrIGZvciBzdWJtb2R1bGVzLiBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzE2ODA0OiBGaXggYSBidWcgaW4gdGhlICdzaXRlJyBtb2R1bGUgdGhhdCBjYXVzZWQgcnVubmluZworICAncHl0aG9uIC1TIC1tIHNpdGUnIHRvIGluY29ycmVjdGx5IHRocm93IGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTU0ODA6IFJlbW92ZSB0aGUgZGVwcmVjYXRlZCBhbmQgdW51c2VkIFRZUEVfSU5UNjQgY29kZSBmcm9tIG1hcnNoYWwuCisgIEluaXRpYWwgcGF0Y2ggYnkgRGFuaWVsIFJpdGkuCisKKy0gSXNzdWUgIzIxMTg6IFNNVFBFeGNlcHRpb24gaXMgbm93IGEgc3ViY2xhc3Mgb2YgT1NFcnJvci4KKworLSBJc3N1ZSAjMTcwMTY6IEdldCByaWQgb2YgcG9zc2libGUgcG9pbnRlciB3cmFwYXJvdW5kcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MKKyAgaW4gdGhlIHJlIG1vZHVsZS4gIFBhdGNoIGJ5IE5pY2tvbGFpIFplbGRvdmljaC4KKworLSBJc3N1ZSAjMTY2NTg6IGFkZCBtaXNzaW5nIHJldHVybiB0byBIVFRQQ29ubmVjdGlvbi5zZW5kKCkKKyAgUGF0Y2ggYnkgSmVmZiBLbnVwcC4KKworLSBJc3N1ZSAjOTU1NjogdGhlIGxvZ2dpbmcgcGFja2FnZSBub3cgYWxsb3dzIHNwZWNpZnlpbmcgYSB0aW1lLW9mLWRheSBmb3IgYQorICBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIgdG8gcm90YXRlLgorCistIElzc3VlICMxNDk3MTogdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgbm8gbG9uZ2VyIGdldHMgY29uZnVzZWQgd2hlbiBhIGZ1bmN0aW9uCisgIGhhcyBhIGRpZmZlcmVudCBfX25hbWVfXyB0aGFuIGl0cyBuYW1lIGluIHRoZSBUZXN0Q2FzZSBjbGFzcyBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxNzQ4NzogVGhlIHdhdmUgZ2V0cGFyYW1zIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4KKyAgYSBwbGFpbiB0dXBsZS4KKworLSBJc3N1ZSAjMTc2NzU6IHNvY2tldCByZXByKCkgcHJvdmlkZXMgbG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzZXMgKGlmIGFueSkuCisgIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbGEnCisKKy0gSXNzdWUgIzE3MDkzOiBNYWtlIHRoZSBBQkNzIGluIGltcG9ydGxpYi5hYmMgcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBvciByYWlzZQorICByZWFzb25hYmxlIGV4Y2VwdGlvbnMgZm9yIHRoZWlyIG1ldGhvZHMgdG8gbWFrZSB0aGVtIG1vcmUgYW1lbmFibGUgdG8gc3VwZXIoKQorICBjYWxscy4KKworLSBJc3N1ZSAjMTc1NjY6IE1ha2UgaW1wb3J0bGliLmFiYy5Mb2FkZXIubW9kdWxlX3JlcHIoKSBvcHRpb25hbCBpbnN0ZWFkIG9mIGFuCisgIGFic3RyYWN0bWV0aG9kOyBub3cgaXQgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3Igc28gYXMgdG8gYmUgaWdub3JlZCBieSBkZWZhdWx0LgorCistIElzc3VlICMxNzY3ODogUmVtb3ZlIHRoZSB1c2Ugb2YgZGVwcmVjYXRlZCBtZXRob2QgaW4gaHR0cC9jb29raWVqYXIucHkgYnkKKyAgY2hhbmdpbmcgdGhlIGNhbGwgdG8gZ2V0X29yaWdpbl9yZXFfaG9zdCgpIHRvIG9yaWdpbl9yZXFfaG9zdC4KKworLSBJc3N1ZSAjMTc2NjY6IEZpeCByZWFkaW5nIGd6aXAgZmlsZXMgd2l0aCBhbiBleHRyYSBmaWVsZC4KKworLSBJc3N1ZSAjMTY0NzU6IFN1cHBvcnQgb2JqZWN0IGluc3RhbmNpbmcsIHJlY3Vyc2lvbiBhbmQgaW50ZXJuZWQgc3RyaW5ncworICBpbiBtYXJzaGFsCisKKy0gSXNzdWUgIzE3NTAyOiBQcm9jZXNzIERFRkFVTFQgdmFsdWVzIGluIG1vY2sgc2lkZV9lZmZlY3QgdGhhdCByZXR1cm5zIGl0ZXJhdG9yLgorCistIElzc3VlICMxNjc5NTogT24gdGhlIGFzdC5hcmd1bWVudHMgb2JqZWN0LCB1bmlmeSB2YXJhcmcgd2l0aCB2YXJhcmdhbm5vdGF0aW9uCisgIGFuZCBrd2FyZyBhbmQga3dhcmdhbm5vdGF0aW9uLiBDaGFuZ2UgdGhlIGNvbHVtbiBvZmZzZXQgb2YgYXN0LkF0dHJpYnV0ZSB0byBiZQorICBhdCB0aGUgYXR0cmlidXRlIG5hbWUuCisKKy0gSXNzdWUgIzE3NDM0OiBQcm9wZXJseSByYWlzZSBhIFN5bnRheEVycm9yIHdoZW4gYSBzdHJpbmcgb2NjdXJzIGJldHdlZW4gZnV0dXJlCisgIGltcG9ydHMuCisKKy0gSXNzdWUgIzE3MTE3OiBJbXBvcnQgYW5kIEBpbXBvcnRsaWIudXRpbC5zZXRfbG9hZGVyIG5vdyBzZXQgX19sb2FkZXJfXyB3aGVuCisgIGl0IGhhcyBhIHZhbHVlIG9mIE5vbmUgb3IgdGhlIGF0dHJpYnV0ZSBkb2Vzbid0IGV4aXN0LgorCistIElzc3VlICMxNzAzMjogVGhlICJnbG9iYWwiIGluIHRoZSAiTmFtZUVycm9yOiBnbG9iYWwgbmFtZSAneCcgaXMgbm90IGRlZmluZWQiCisgIGVycm9yIG1lc3NhZ2UgaGFzIGJlZW4gcmVtb3ZlZC4gIFBhdGNoIGJ5IFJhbSBSYWNodW0uCiAKIC0gSXNzdWUgIzE4MDgwOiBXaGVuIGJ1aWxkaW5nIGEgQyBleHRlbnNpb24gbW9kdWxlIG9uIE9TIFgsIGlmIHRoZSBjb21waWxlcgogICBpcyBvdmVycmlkZW4gd2l0aCB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUsIHVzZSB0aGUgbmV3IGNvbXBpbGVyIGFzCkBAIC05ODQsMzEgKzI4NDcsNzIwIEBACiAtIElzc3VlICMxODExMzogRml4ZWQgYSByZWZjb3VudCBsZWFrIGluIHRoZSBjdXJzZXMucGFuZWwgbW9kdWxlJ3MKICAgc2V0X3VzZXJwdHIoKSBtZXRob2QuICBSZXBvcnRlZCBieSBBdHN1byBJc2hpbW90by4KIAotLSBJc3N1ZSAjMTg4NDk6IEZpeGVkIGEgV2luZG93cy1zcGVjaWZpYyB0ZW1wZmlsZSBidWcgd2hlcmUgY29sbGlzaW9uIHdpdGggYW4KLSAgZXhpc3RpbmcgZGlyZWN0b3J5IGNhdXNlZCBta3N0ZW1wIGFuZCByZWxhdGVkIEFQSXMgdG8gZmFpbCBpbnN0ZWFkIG9mCi0gIHJldHJ5aW5nLiBSZXBvcnQgYW5kIGZpeCBieSBWbGFkIFNoY2hlcmJpbmEuCistIEltcGxlbWVudCBQRVAgNDQzICJTaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMiLgogCi0tIElzc3VlICMxOTQwMDogUHJldmVudCBleHRlbnNpb24gbW9kdWxlIGJ1aWxkIGZhaWx1cmVzIHdpdGggWGNvZGUgNSBvbiBPUyBYCi0gIDEwLjgrIHdoZW4gdXNpbmcgYSB1bml2ZXJzYWwgUHl0aG9uIHRoYXQgaW5jbHVkZWQgYSBQUEMgYXJjaGl0ZWN0dXJlLAotICBzdWNoIGFzIHdpdGggYSBweXRob24ub3JnIDMyLWJpdC1vbmx5IGJpbmFyeSBpbnN0YWxsZXIuCistIEltcGxlbWVudCBQRVAgNDM1ICJBZGRpbmcgYW4gRW51bSB0eXBlIHRvIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeSIuCiAKLUMgQVBJCi0tLS0tLQorLSBJc3N1ZSAjMTU1OTY6IEZhc3RlciBwaWNrbGluZyBvZiB1bmljb2RlIHN0cmluZ3MuCiAKLS0gSXNzdWUgIzE4MzUxOiBGaXggdmFyaW91cyBpc3N1ZXMgd2l0aCBhIGhlbHBlciBmdW5jdGlvbiBpbiBpbXBvcnRsaWIgdXNlZAotICBieSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSAoYW5kIHRodXMgYnkgZXh0ZW5zaW9uCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKCkgYW5kIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoKSkuCistIElzc3VlICMxNzU3MjogQXZvaWQgY2hhaW5lZCBleGNlcHRpb25zIHdoZW4gcGFzc2luZyBiYWQgZGlyZWN0aXZlcyB0bworICB0aW1lLnN0cnB0aW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTc0MzU6IHRocmVhZGluZy5UaW1lcidzIF9faW5pdF9fIG1ldGhvZCBubyBsb25nZXIgdXNlcyBtdXRhYmxlCisgIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgYXJncyBhbmQga3dhcmdzIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzE3NTI2OiBmaXggYW4gSW5kZXhFcnJvciByYWlzZWQgd2hpbGUgcGFzc2luZyBjb2RlIHdpdGhvdXQgZmlsZW5hbWUgdG8KKyAgaW5zcGVjdC5maW5kc291cmNlKCkuICBJbml0aWFsIHBhdGNoIGJ5IFR5bGVyIERveWxlLgorCistIElzc3VlICMxNzU0MDogQWRkZWQgc3R5bGUgcGFyYW1ldGVyIHRvIGxvZ2dpbmcgZm9ybWF0dGVyIGNvbmZpZ3VyYXRpb24gYnkgZGljdC4KKworLSBJc3N1ZSAjMTY2OTI6IFRoZSBzc2wgbW9kdWxlIG5vdyBzdXBwb3J0cyBUTFMgMS4xIGFuZCBUTFMgMS4yLiAgSW5pdGlhbAorICBwYXRjaCBieSBNaWNoZWxlIE9ycsO5LgorCistIElzc3VlICMxNzAyNTogbXVsdGlwcm9jZXNzaW5nOiBSZWR1Y2UgUXVldWUgYW5kIFNpbXBsZVF1ZXVlIGNvbnRlbnRpb24uCisKKy0gSXNzdWUgIzE3NTM2OiBBZGQgdG8gd2ViYnJvd3NlcidzIGJyb3dzZXIgbGlzdDogd3d3LWJyb3dzZXIsIHgtd3d3LWJyb3dzZXIsCisgIGljZXdlYXNlbCwgaWNlYXBlLgorCistIElzc3VlICMxNzE1MDogcHByaW50IG5vdyB1c2VzIGxpbmUgY29udGludWF0aW9ucyB0byB3cmFwIGxvbmcgc3RyaW5nCisgIGxpdGVyYWxzLgorCistIElzc3VlICMxNzQ4ODogQ2hhbmdlIHRoZSBzdWJwcm9jZXNzLlBvcGVuIGJ1ZnNpemUgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWUKKyAgZnJvbSB1bmJ1ZmZlcmVkICgwKSB0byBidWZmZXJpbmcgKC0xKSB0byBtYXRjaCB0aGUgYmVoYXZpb3IgZXhpc3RpbmcgY29kZQorICBleHBlY3RzIGFuZCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIGluIFB5dGhvbiAyIHRvIGF2b2lkCisgIGludHJvZHVjaW5nIGhhcmQgdG8gdHJhY2sgZG93biBidWdzLgorCistIElzc3VlICMxNzUyMTogQ29ycmVjdGVkIG5vbi1lbmFibGluZyBvZiBsb2dnZXIgZm9sbG93aW5nIHR3byBjYWxscyB0bworICBmaWxlQ29uZmlnKCkuCisKKy0gSXNzdWUgIzE3NTA4OiBDb3JyZWN0ZWQgbG9nZ2luZyBNZW1vcnlIYW5kbGVyIGNvbmZpZ3VyYXRpb24gaW4gZGljdENvbmZpZygpCisgIHdoZXJlIHRoZSB0YXJnZXQgaGFuZGxlciB3YXNuJ3QgY29uZmlndXJlZCBmaXJzdC4KKworLSBJc3N1ZSAjMTcyMDk6IGN1cnNlcy53aW5kb3cuZ2V0X3djaCgpIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBLZXlib2FyZEludGVycnVwdAorICAoQ1RSTCtjKS4KKworLSBJc3N1ZSAjNTcxMzogc210cGxpYiBub3cgaGFuZGxlcyA0MjEgKGNsb3NpbmcgY29ubmVjdGlvbikgZXJyb3IgY29kZXMgd2hlbgorICBzZW5kaW5nIG1haWwgYnkgY2xvc2luZyB0aGUgc29ja2V0IGFuZCByZXBvcnRpbmcgdGhlIDQyMSBlcnJvciBjb2RlIHZpYSB0aGUKKyAgZXhjZXB0aW9uIGFwcHJvcHJpYXRlIHRvIHRoZSBjb21tYW5kIHRoYXQgcmVjZWl2ZWQgdGhlIGVycm9yIHJlc3BvbnNlLgorCistIElzc3VlICMxNjk5NzogdW5pdHRlc3QuVGVzdENhc2Ugbm93IHByb3ZpZGVzIGEgc3ViVGVzdCgpIGNvbnRleHQgbWFuYWdlcgorICB0byBwcm9jZWR1cmFsbHkgZ2VuZXJhdGUsIGluIGFuIGVhc3kgd2F5LCBzbWFsbCB0ZXN0IGluc3RhbmNlcy4KKworLSBJc3N1ZSAjMTc0ODU6IEFsc28gZGVsZXRlIHRoZSBSZXF1ZXN0IENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpZiB0aGUgZGF0YQorICBhdHRyaWJ1dGUgaXMgZGVsZXRlZC4gIChGb2xsb3cgb24gdG8gaXNzdWUgMTY0NjQpLgorCistIElzc3VlICMxNTkyNzogQ1ZTIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGVzY2FwZWQgbmV3bGluZXMgYW5kIGNhcnJpYWdlCisgIHdoZW4gcGFyc2luZyB3aXRoIHF1b3RpbmcgdHVybmVkIG9mZi4KKworLSBJc3N1ZSAjMTc0Njc6IGFkZCByZWFkbGluZSBhbmQgcmVhZGxpbmVzIHN1cHBvcnQgdG8gbW9ja19vcGVuIGluCisgIHVuaXR0ZXN0Lm1vY2suCisKKy0gSXNzdWUgIzE3MTkyOiBVcGRhdGUgdGhlIGN0eXBlcyBtb2R1bGUncyBsaWJmZmkgdG8gdjMuMC4xMy4gIFRoaXMKKyAgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIHN0YWNrIG1pc2FsaWdubWVudCBpc3N1ZSBvbiB4ODYgYW5kIGlzc3VlcyBvbgorICBzb21lIG1vcmUgcmVjZW50IHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjODg2MjogRml4ZWQgY3Vyc2VzIGNsZWFudXAgd2hlbiBnZXRrZXkgaXMgaW50ZXJycHV0ZWQgYnkgYSBzaWduYWwuCisKKy0gSXNzdWUgIzE3NDQzOiBpbWFwbGliLklNQVA0X3N0cmVhbSB3YXMgdXNpbmcgdGhlIGRlZmF1bHQgdW5idWZmZXJlZCBJTworICBpbiBzdWJwcm9jZXNzLCBidXQgdGhlIGltYXAgY29kZSBhc3N1bWVzIGJ1ZmZlcmVkIElPLiAgSW4gUHl0aG9uMiB0aGlzCisgIHdvcmtlZCBieSBhY2NpZGVudC4gIElNQVA0X3N0cmVhbSBub3cgZXhwbGljaXRseSB1c2VzIGJ1ZmZlcmVkIElPLgorCistIElzc3VlICMxNzQ3NjogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHVuZG9jdW1lbnRlZCBweWRvYworICAnYWxsbWV0aG9kcyc7IGl0IHdhcyBtaXNzaW5nIHVuYm91bmQgbWV0aG9kcyBvbiB0aGUgY2xhc3MuCisKKy0gSXNzdWUgIzE3NDc0OiBSZW1vdmUgdGhlIGRlcHJlY2F0ZWQgbWV0aG9kcyBvZiBSZXF1ZXN0IGNsYXNzLgorCistIElzc3VlICMxNjcwOTogdW5pdHRlc3QgZGlzY292ZXIgb3JkZXIgaXMgbm8tbG9uZ2VyIGZpbGVzeXN0ZW0gc3BlY2lmaWMuIFBhdGNoCisgIGJ5IEplZmYgUmFtbmFuaS4KKworLSBVc2UgdGhlIEhUVFBTIFB5UEkgdXJsIGZvciB1cGxvYWQsIG92ZXJyaWRpbmcgYW55IHBsYWluIEhUVFAgVVJMIGluIHB5cGlyYy4KKworLSBJc3N1ZSAjNTAyNDogc25kaGRyLndoaWNoaGRyIG5vdyByZXR1cm5zIHRoZSBmcmFtZSBjb3VudCBmb3IgV0FWIGZpbGVzCisgIHJhdGhlciB0aGFuIC0xLgorCistIElzc3VlICMxNzQ2MDogUmVtb3ZlIHRoZSBzdHJpY3QgYXJndW1lbnQgb2YgSFRUUENvbm5lY3Rpb24gYW5kIHJlbW92aW5nIHRoZQorICBEZXByZWNhdGlvbldhcm5pbmcgYmVpbmcgaXNzdWVkIGZyb20gMy4yIG9ud2FyZHMuCisKKy0gSXNzdWUgIzE2ODgwOiBEbyBub3QgYXNzdW1lIF9pbXAubG9hZF9keW5hbWljKCkgaXMgZGVmaW5lZCBpbiB0aGUgaW1wIG1vZHVsZS4KKworLSBJc3N1ZSAjMTYzODk6IEZpeGVkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24gMy4xIGluIHRoZQorICBjYWNoaW5nIG9mIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisKKy0gQWRkZWQgbWlzc2luZyBGZWVkUGFyc2VyIGFuZCBCeXRlc0ZlZWRQYXJzZXIgdG8gZW1haWwucGFyc2VyLl9fYWxsX18uCisKKy0gSXNzdWUgIzE3NDMxOiBGaXggbWlzc2luZyBpbXBvcnQgb2YgQnl0ZXNGZWVkUGFyc2VyIGluIGVtYWlsLnBhcnNlci4KKworLSBJc3N1ZSAjMTI5MjE6IGh0dHAuc2VydmVyJ3Mgc2VuZF9lcnJvciB0YWtlcyBhbiBleHBsYWluIGFyZ3VtZW50IHRvIHNlbmQgbW9yZQorICBpbmZvcm1hdGlvbiBpbiByZXNwb25zZS4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgS2FybC4KKworLSBJc3N1ZSAjMTc0MTQ6IEFkZCB0aW1laXQsIHJlcGVhdCwgYW5kIGRlZmF1bHRfdGltZXIgdG8gdGltZWl0Ll9fYWxsX18uCisKKy0gSXNzdWUgIzEyODUwODY6IEdldCByaWQgb2YgdGhlIHJlZmNvdW50aW5nIGhhY2sgYW5kIHNwZWVkIHVwCisgIHVybGxpYi5wYXJzZS51bnF1b3RlKCkgYW5kIHVybGxpYi5wYXJzZS51bnF1b3RlX3RvX2J5dGVzKCkuCisKKy0gSXNzdWUgIzE3MDk5OiBIYXZlIGltcG9ydGxpYi5maW5kX2xvYWRlcigpIHJhaXNlIFZhbHVlRXJyb3Igd2hlbiBfX2xvYWRlcl9fCisgIGlzIG5vdCBzZXQsIGhhcm1vbml6aW5nIHdpdGggd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gTm9uZS4KKworLSBFeHBvc2UgdGhlIE9fUEFUSCBjb25zdGFudCBpbiB0aGUgb3MgbW9kdWxlIGlmIGl0IGlzIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTczNjg6IEZpeCBhbiBvZmYtYnktb25lIGVycm9yIGluIHRoZSBQeXRob24gSlNPTiBkZWNvZGVyIHRoYXQgY2F1c2VkCisgIGEgZmFpbHVyZSB3aGlsZSBkZWNvZGluZyBlbXB0eSBvYmplY3QgbGl0ZXJhbHMgd2hlbiBvYmplY3RfcGFpcnNfaG9vayB3YXMKKyAgc3BlY2lmaWVkLgorCistIElzc3VlICMxNzM4NTogRml4IHF1YWRyYXRpYyBiZWhhdmlvciBpbiB0aHJlYWRpbmcuQ29uZGl0aW9uLiAgVGhlIEZJRk8KKyAgcXVldWUgbm93IHVzZXMgYSBkZXF1ZSBpbnN0ZWFkIG9mIGEgbGlzdC4KKworLSBJc3N1ZSAjMTU4MDY6IEFkZCBjb250ZXh0bGliLmlnbm9yZSgpLiAgVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtYW5hZ2VyIHRvCisgIGlnbm9yZSBzcGVjaWZpZWQgZXhjZXB0aW9ucywgcmVwbGFjaW5nIHRoZSAiZXhjZXB0IFNvbWVFeGNlcHRpb246IHBhc3MiIGlkaW9tLgorCistIElzc3VlICMxNDY0NTogVGhlIGVtYWlsIGdlbmVyYXRvciBjbGFzc2VzIG5vdyBwcm9kdWNlIG91dHB1dCB1c2luZyB0aGUKKyAgc3BlY2lmaWVkIGxpbmVzZXAgdGhyb3VnaG91dC4gIFByZXZpb3VzbHkgaWYgdGhlIHByb2xvZywgZXBpbG9nLCBvcgorICBib2R5IHdlcmUgc3RvcmVkIHdpdGggYSBkaWZmZXJlbnQgbGluZXNlcCwgdGhhdCBsaW5lc2VwIHdhcyB1c2VkLiAgVGhpcworICBmaXggY29ycmVjdHMgYW4gUkZDIG5vbi1jb21wbGlhbmNlIGlzc3VlIHdpdGggc210cGxpYi5zZW5kX21lc3NhZ2UuCisKKy0gSXNzdWUgIzE3Mjc4OiBGaXggYSBjcmFzaCBpbiBoZWFwcS5oZWFwcHVzaCgpIGFuZCBoZWFwcS5oZWFwcG9wKCkgd2hlbgorICB0aGUgbGlzdCBpcyBiZWluZyByZXNpemVkIGNvbmN1cnJlbnRseS4KKworLSBJc3N1ZSAjMTY5NjI6IFVzZSBnZXRkZW50czY0IGluc3RlYWQgb2YgdGhlIG9ic29sZXRlIGdldGRlbnRzIHN5c2NhbGwKKyAgaW4gdGhlIHN1YnByb2Nlc3MgbW9kdWxlIG9uIExpbnV4LgorCistIElzc3VlICMxNjkzNTogdW5pdHRlc3Qgbm93IGNvdW50cyB0aGUgbW9kdWxlIGFzIHNraXBwZWQgaWYgaXQgcmFpc2VzIFNraXBUZXN0LAorICBpbnN0ZWFkIG9mIGNvdW50aW5nIGl0IGFzIGFuIGVycm9yLiAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCistIElzc3VlICMxNzAxODogTWFrZSBQcm9jZXNzLmpvaW4oKSByZXRyeSBpZiBvcy53YWl0cGlkKCkgZmFpbHMgd2l0aCBFSU5UUi4KKworLSBJc3N1ZSAjMTcyMjM6IGFycmF5IG1vZHVsZTogRml4IGEgY3Jhc2hlciB3aGVuIGNvbnZlcnRpbmcgYW4gYXJyYXkgY29udGFpbmluZworICBpbnZhbGlkIGNoYXJhY3RlcnMgKG91dHNpZGUgcmFuZ2UgW1UrMDAwMDsgVSsxMGZmZmZdKSB0byBVbmljb2RlOgorICByZXByKGFycmF5KSwgc3RyKGFycmF5KSBhbmQgYXJyYXkudG91bmljb2RlKCkuIFBhdGNoIHdyaXR0ZW4gYnkgTWFudWVsIEphY29iLgorCistIElzc3VlICMxNzE5NzogcHJvZmlsZS9jUHJvZmlsZSBtb2R1bGVzIHJlZmFjdG9yZWQgc28gdGhhdCBjb2RlIG9mIHJ1bigpIGFuZAorICBydW5jdHgoKSB1dGlsaXR5IGZ1bmN0aW9ucyBpcyBub3QgZHVwbGljYXRlZCBpbiBib3RoIG1vZHVsZXMuCisKKy0gSXNzdWUgIzE0NzIwOiBzcWxpdGUzOiBDb252ZXJ0IGRhdGV0aW1lIG1pY3Jvc2Vjb25kcyBjb3JyZWN0bHkuCisgIFBhdGNoIGJ5IExvd2UgVGhpZGVybWFuLgorCistIElzc3VlICMxNTEzMjogQWxsb3cgYSBsaXN0IGZvciB0aGUgZGVmYXVsdFRlc3QgYXJndW1lbnQgb2YKKyAgdW5pdHRlc3QuVGVzdFByb2dyYW0uIFBhdGNoIGJ5IEp5cmtpIFB1bGxpYWluZW4uCisKKy0gSXNzdWUgIzE3MjI1OiBKU09OIGRlY29kZXIgbm93IGNvdW50cyBjb2x1bW5zIGluIHRoZSBmaXJzdCBsaW5lIHN0YXJ0aW5nCisgIHdpdGggMSwgYXMgaW4gb3RoZXIgbGluZXMuCisKKy0gSXNzdWUgIzY2MjM6IEFkZGVkIGV4cGxpY2l0IERlcHJlY2F0aW9uV2FybmluZyBmb3IgZnRwbGliLm5ldHJjLCB3aGljaCBoYXMKKyAgYmVlbiBkZXByZWNhdGVkIGFuZCB1bmRvY3VtZW50ZWQgZm9yIGEgbG9uZyB0aW1lLgorCistIElzc3VlICMxMzcwMDogRml4IGJ5dGUvc3RyaW5nIGhhbmRsaW5nIGluIGltYXBsaWIgYXV0aGVudGljYXRpb24gd2hlbiBhbgorICBhdXRob2JqZWN0IGlzIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTMxNTM6IFRraW50ZXIgZnVuY3Rpb25zIG5vdyByYWlzZSBUY2xFcnJvciBpbnN0ZWFkIG9mIFZhbHVlRXJyb3Igd2hlbgorICBhIHN0cmluZyBhcmd1bWVudCBjb250YWlucyBub24tQk1QIGNoYXJhY3Rlci4KKworLSBJc3N1ZSAjOTY2OTogUHJvdGVjdCByZSBhZ2FpbnN0IGluZmluaXRlIGxvb3BzIG9uIHplcm8td2lkdGggbWF0Y2hpbmcgaW4KKyAgbm9uLWdyZWVkeSByZXBlYXQuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCisKKy0gSXNzdWUgIzEzMTY5OiBUaGUgbWF4aW1hbCByZXBldGl0aW9uIG51bWJlciBpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBoYXMgYmVlbgorICBpbmNyZWFzZWQgZnJvbSA2NTUzNCB0byAyMTQ3NDgzNjQ3IChvbiAzMi1iaXQgcGxhdGZvcm0pIG9yIDQyOTQ5NjcyOTQgKG9uCisgIDY0LWJpdCkuCisKKy0gSXNzdWUgIzE3MTQzOiBGaXggYSBtaXNzaW5nIGltcG9ydCBpbiB0aGUgdHJhY2UgbW9kdWxlLiAgSW5pdGlhbCBwYXRjaCBieQorICBCZXJrZXIgUGVrc2FnLgorCistIElzc3VlICMxNTIyMDogZW1haWwuZmVlZHBhcnNlcidzIGxpbmUgc3BsaXR0aW5nIGFsZ29yaXRobSBpcyBub3cgc2ltcGxlciBhbmQKKyAgZmFzdGVyLgorCistIElzc3VlICMxNjc0MzogRml4IG1tYXAgb3ZlcmZsb3cgY2hlY2sgb24gMzIgYml0IFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2OTk2OiB3ZWJicm93c2VyIG1vZHVsZSBub3cgdXNlcyBzaHV0aWwud2hpY2goKSB0byBmaW5kIGEKKyAgd2ViLWJyb3dzZXIgb24gdGhlIGV4ZWN1dGFibGUgc2VhcmNoIHBhdGguCisKKy0gSXNzdWUgIzE2ODAwOiB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkgbm8gbG9uZ2VyIGxlZnQgdGVtcG9yYXJ5IGZpbGVzIHdoZW4KKyAgdGhlIGRpc2sgaXMgZnVsbC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFtaXIgU3pla2VseS4KKworLSBJc3N1ZSAjMTcxOTI6IEltcG9ydCBsaWJmZmktMy4wLjEyLgorCistIElzc3VlICMxNjU2NDogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHRoZSBvcGVyYXRpb24gb2YKKyAgZW1haWwuZW5jb2RlcnMuZW5jb2RlXzdvcjhiaXQgd2hlbiB1c2VkIHdpdGggYmluYXJ5IGRhdGEuCisKKy0gSXNzdWUgIzE3MDUyOiB1bml0dGVzdCBkaXNjb3Zlcnkgc2hvdWxkIHVzZSBzZWxmLnRlc3RMb2FkZXIuCisKKy0gSXNzdWUgIzQ1OTE6IFVpZCBhbmQgZ2lkIHZhbHVlcyBsYXJnZXIgdGhhbiAyKiozMSBhcmUgc3VwcG9ydGVkIG5vdy4KKworLSBJc3N1ZSAjMTcxNDE6IHJhbmRvbS52b25taXNlc3ZhcmlhdGUoKSBubyBsb25nZXIgaGFuZ3MgZm9yIGxhcmdlIGthcHBhcy4KKworLSBJc3N1ZSAjMTcxNDk6IEZpeCByYW5kb20udm9ubWlzZXN2YXJpYXRlIHRvIGFsd2F5cyByZXR1cm4gcmVzdWx0cyBpbgorICBbMCwgMiptYXRoLnBpXS4KKworLSBJc3N1ZSAjMTQ3MDU0ODogWE1MR2VuZXJhdG9yIG5vdyB3b3JrcyB3aXRoIGJpbmFyeSBvdXRwdXQgc3RyZWFtcy4KKworLSBJc3N1ZSAjNjk3NTogb3MucGF0aC5yZWFscGF0aCgpIG5vdyBjb3JyZWN0bHkgcmVzb2x2ZXMgbXVsdGlwbGUgbmVzdGVkCisgIHN5bWxpbmtzIG9uIFBPU0lYIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTM3NzM6IHNxbGl0ZTMuY29ubmVjdCgpIGdldHMgYSBuZXcgYHVyaWAgcGFyYW1ldGVyIHRvIHBhc3MgdGhlCisgIGZpbGVuYW1lIGFzIGEgVVJJLCBhbGxvd2luZyB0byBwYXNzIGN1c3RvbSBvcHRpb25zLgorCistIElzc3VlICMxNjU2NDogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHRoZSBvcGVyYXRpb24gb2YKKyAgZW1haWwuZW5jb2RlcnMuZW5jb2RlX25vb3Agd2hlbiB1c2VkIHdpdGggYmluYXJ5IGRhdGEuCisKKy0gSXNzdWUgIzEwMzU1OiBUaGUgbW9kZSwgbmFtZSwgZW5jb2RpbmcgYW5kIG5ld2xpbmVzIHByb3BlcnRpZXMgbm93IHdvcmsgb24KKyAgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgb2JqZWN0cyBldmVuIHdoZW4gdGhleSBoYXZlIG5vdCB5ZXQgcm9sbGVkIG92ZXIuCisgIE9ic29sZXRlIG1ldGhvZCB4cmVhZGxpbmUgKHdoaWNoIGhhcyBuZXZlciB3b3JrZWQgaW4gUHl0aG9uIDMpIGhhcyBiZWVuCisgIHJlbW92ZWQuCisKKy0gSXNzdWUgIzE2Njg2OiBGaXhlZCBhIGxvdCBvZiBidWdzIGluIGF1ZGlvb3AgbW9kdWxlLiAgRml4ZWQgY3Jhc2hlcyBpbgorICBhdmdwcCgpLCBtYXhwcCgpIGFuZCByYXRlY3YoKS4gIEZpeGVkIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYWRkKCksIGJpYXMoKSwKKyAgYW5kIHJhdGVjdigpLiAgcmV2ZXJzZSgpLCBsaW4ybGluKCkgYW5kIHJhdGVjdigpIG5vIG1vcmUgbG9zZSBwcmVjaXNpb24gZm9yCisgIDMyLWJpdCBzYW1wbGVzLiAgbWF4KCkgYW5kIHJtcygpIG5vIG1vcmUgcmV0dXJucyBhIG5lZ2F0aXZlIHJlc3VsdCBhbmQKKyAgdmFyaW91cyBvdGhlciBmdW5jdGlvbnMgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggMzItYml0IHNhbXBsZSAtMHg4MDAwMDAwMC4KKworLSBJc3N1ZSAjMTcwNzM6IEZpeCBzb21lIGludGVnZXIgb3ZlcmZsb3dzIGluIHNxbGl0ZTMgbW9kdWxlLgorCistIElzc3VlICMxNjcyMzogaHR0cGxpYi5IVFRQUmVzcG9uc2Ugbm8gbG9uZ2VyIG1hcmtlZCBjbG9zZWQgd2hlbiB0aGUgY29ubmVjdGlvbgorICBpcyBhdXRvbWF0aWNhbGx5IGNsb3NlZC4KKworLSBJc3N1ZSAjMTUzNTk6IEFkZCBDQU5fQkNNIHByb3RvY29sIHN1cHBvcnQgdG8gdGhlIHNvY2tldCBtb2R1bGUuIFBhdGNoIGJ5CisgIEJyaWFuIFRob3JuZS4KKworLSBJc3N1ZSAjMTY5NDg6IEZpeCBxdW90ZWQgcHJpbnRhYmxlIGJvZHkgZW5jb2RpbmcgZm9yIG5vbi1sYXRpbjEgY2hhcmFjdGVyCisgIHNldHMgaW4gdGhlIGVtYWlsIHBhY2thZ2UuCisKKy0gSXNzdWUgIzE2ODExOiBGaXggZm9sZGluZyBvZiBoZWFkZXJzIHdpdGggbm8gdmFsdWUgaW4gdGhlIHByb3Zpc2lvbmFsIGVtYWlsCisgIHBvbGljaWVzLgorCistIElzc3VlICMxNzEzMjogVXBkYXRlIHN5bWJvbCBmb3IgInlpZWxkIGZyb20iIGdyYW1tYXIgY2hhbmdlcy4KKworLSBJc3N1ZSAjMTcwNzY6IE1ha2UgY29weWluZyBvZiB4YXR0cnMgbW9yZSB0b2xlcmFudCBvZiBtaXNzaW5nIEZTIHN1cHBvcnQuCisgIFBhdGNoIGJ5IFRob21hcyBXb3V0ZXJzLgorCistIElzc3VlICMxNzA4OTogRXhwYXQgcGFyc2VyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBzdHJpbmcgaW5wdXQgd2hlbiB0aGUKKyAgaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIG5vdCBVVEYtOCBvciBVUy1BU0NJSS4gIEl0IGFsc28gbm93IGFjY2VwdHMgYnl0ZXMKKyAgYW5kIHN0cmluZ3MgbGFyZ2VyIHRoYW4gMiBHaUIuCisKKy0gSXNzdWUgIzYwODM6IEZpeCBtdWx0aXBsZSBzZWdtZW50YXRpb24gZmF1bHRzIG9jY3VyZWQgd2hlbiBQeUFyZ19QYXJzZVR1cGxlCisgIHBhcnNlcyBuZXN0ZWQgbXV0YXRpbmcgc2VxdWVuY2UuCisKKy0gSXNzdWUgIzUyODk6IEZpeCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkgb24gU29sYXJpcy4KKworLSBJc3N1ZSAjMTcxMDY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpbiBpby5UZXh0SU9XcmFwcGVyIHdoZW4gYW4gdW5kZXJseWluZworICBzdHJlYW0gb3IgYSBkZWNvZGVyIHByb2R1Y2VzIGRhdGEgb2YgYW4gdW5leHBlY3RlZCB0eXBlIChpLmUuIHdoZW4KKyAgaW8uVGV4dElPV3JhcHBlciBpbml0aWFsaXplZCB3aXRoIHRleHQgc3RyZWFtIG9yIHVzZSBieXRlcy10by1ieXRlcyBjb2RlYykuCisKKy0gSXNzdWUgIzE3MDE1OiBXaGVuIGl0IGhhcyBhIHNwZWMsIGEgTW9jayBvYmplY3Qgbm93IGluc3BlY3RzIGl0cyBzaWduYXR1cmUKKyAgd2hlbiBtYXRjaGluZyBjYWxscywgc28gdGhhdCBhcmd1bWVudHMgY2FuIGJlIG1hdGNoZWQgcG9zaXRpb25hbGx5IG9yCisgIGJ5IG5hbWUuCisKKy0gSXNzdWUgIzE1NjMzOiBodHRwbGliLkhUVFBSZXNwb25zZSBpcyBub3cgbWFyayBjbG9zZWQgd2hlbiB0aGUgc2VydmVyCisgIHNlbmRzIGxlc3MgdGhhbiB0aGUgYWR2ZXJ0aXNlZCBDb250ZW50LUxlbmd0aC4KKworLSBJc3N1ZSAjMTIyNjg6IFRoZSBpbyBtb2R1bGUgZmlsZSBvYmplY3Qgd3JpdGUgbWV0aG9kcyBubyBsb25nZXIgYWJvcnQgZWFybHkKKyAgd2hlbiBvbmUgb2YgaXRzIHdyaXRlIHN5c3RlbSBjYWxscyBpcyBpbnRlcnJ1cHRlZCAoRUlOVFIpLgorCistIElzc3VlICM2OTcyOiBUaGUgemlwZmlsZSBtb2R1bGUgbm8gbG9uZ2VyIG92ZXJ3cml0ZXMgZmlsZXMgb3V0c2lkZSBvZgorICBpdHMgZGVzdGluYXRpb24gcGF0aCB3aGVuIGV4dHJhY3RpbmcgbWFsaWNpb3VzIHppcCBmaWxlcy4KKworLSBJc3N1ZSAjNDg0NDogWmlwRmlsZSBub3cgcmFpc2VzIEJhZFppcEZpbGUgd2hlbiBvcGVucyBhIFpJUCBmaWxlIHdpdGggYW4KKyAgaW5jb21wbGV0ZSAiRW5kIG9mIENlbnRyYWwgRGlyZWN0b3J5IiByZWNvcmQuICBPcmlnaW5hbCBwYXRjaCBieSBHdWlsaGVybWUKKyAgUG9sbyBhbmQgQWxhbiBNY0ludHlyZS4KKworLSBJc3N1ZSAjMTcwNzE6IFNpZ25hdHVyZS5iaW5kKCkgbm93IHdvcmtzIHdoZW4gb25lIG9mIHRoZSBrZXl3b3JkIGFyZ3VtZW50cworICBpcyBuYW1lZCBgYHNlbGZgYC4KKworLSBJc3N1ZSAjMTIwMDQ6IEZpeCBhbiBpbnRlcm5hbCBlcnJvciBpbiBQeVppcEZpbGUgd2hlbiB3cml0aW5nIGFuIGludmFsaWQKKyAgUHl0aG9uIGZpbGUuICBQYXRjaCBieSBCZW4gTW9yZ2FuLgorCistIEhhdmUgcHlfY29tcGlsZSB1c2UgaW1wb3J0bGliIGFzIG11Y2ggYXMgcG9zc2libGUgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbi4KKyAgQ29kZSBub3cgcmFpc2VzIEZpbGVFeGlzdHNFcnJvciBpZiB0aGUgZmlsZSBwYXRoIHRvIGJlIHVzZWQgZm9yIHRoZQorICBieXRlLWNvbXBpbGVkIGZpbGUgaXMgYSBzeW1saW5rIG9yIG5vbi1yZWd1bGFyIGZpbGUgYXMgYSB3YXJuaW5nIHRoYXQgaW1wb3J0CisgIHdpbGwgbm90IGtlZXAgdGhlIGZpbGUgcGF0aCB0eXBlIGlmIGl0IHdyaXRlcyB0byB0aGF0IHBhdGguCisKKy0gSXNzdWUgIzE2OTcyOiBIYXZlIHNpdGUuYWRkcGFja2FnZSgpIGNvbnNpZGVyIGFscmVhZHkga25vd24gcGF0aHMgZXZlbiB3aGVuCisgIG5vbmUgYXJlIGV4cGxpY2l0bHkgcGFzc2VkIGluLiBCdWcgcmVwb3J0IGFuZCBmaXggYnkgS2lyaWxsLgorCistIElzc3VlICMxNjAyMTMzOiBvbiBNYWMgT1MgWCBhIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIChgYC0tZW5hYmxlLXNoYXJlZGBgKQorICBub3cgZmlsbHMgdGhlIGBgb3MuZW52aXJvbmBgIHZhcmlhYmxlIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTU1MDU6IGB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcmAgbm8gbG9uZ2VyIGFzc3VtZXMgU0lHSU5UIGhhbmRsZXIgaXMKKyAgc2V0IHRvIGEgY2FsbGFibGUgb2JqZWN0LgorCistIElzc3VlICMxMzQ1NDogRml4IGEgY3Jhc2ggd2hlbiBkZWxldGluZyBhbiBpdGVyYXRvciBjcmVhdGVkIGJ5IGl0ZXJ0b29scy50ZWUoKQorICBpZiBhbGwgb3RoZXIgaXRlcmF0b3JzIHdlcmUgdmVyeSBhZHZhbmNlZCBiZWZvcmUuCisKKy0gSXNzdWUgIzEyNDExOiBGaXggdG8gY2dpLnBhcnNlX211bHRpcGFydCB0byBjb3JyZWN0bHkgdXNlIGJ5dGVzIGJvdW5kYXJpZXMKKyAgYW5kIGJ5dGVzIGRhdGEuIFBhdGNoIGJ5IEpvbmFzIFdhZ25lci4KKworLSBJc3N1ZSAjMTY5NTc6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBzZWFyY2hlcyBhIGJhcmUgZmlsZSBuYW1lIGluIHRoZQorICBjdXJyZW50IGRpcmVjdG9yeSBvbiBVbml4IGFuZCBubyBsb25nZXIgc2VhcmNoZXMgYSByZWxhdGl2ZSBmaWxlIHBhdGggd2l0aAorICBhIGRpcmVjdG9yeSBwYXJ0IGluIFBBVEggZGlyZWN0b3JpZXMuICBQYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTE1OTA1MTogR3ppcEZpbGUgbm93IHJhaXNlcyBFT0ZFcnJvciB3aGVuIHJlYWRpbmcgYSBjb3JydXB0ZWQgZmlsZQorICB3aXRoIHRydW5jYXRlZCBoZWFkZXIgb3IgZm9vdGVyLgorCistIElzc3VlICMxNjk5Mzogc2h1dGlsLndoaWNoKCkgbm93IHByZXNlcnZlcyB0aGUgY2FzZSBvZiB0aGUgcGF0aCBhbmQgZXh0ZW5zaW9uCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2OTkyOiBPbiBXaW5kb3dzIGluIHNpZ25hbC5zZXRfd2FrZXVwX2ZkLCB2YWxpZGF0ZSB0aGUgZmlsZQorICBkZXNjcmlwdG9yIGFyZ3VtZW50LgorCistIElzc3VlICMxNjQyMjogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgUHl0aG9uIHZlcnNpb24sIHRoZSBDIHZlcnNpb24gb2YKKyAgZGVjaW1hbCBub3cgdXNlcyBzdHJpbmdzIGluc3RlYWQgb2YgaW50ZWdlcnMgZm9yIHJvdW5kaW5nIG1vZGUgY29uc3RhbnRzLgorCistIElzc3VlICMxNTg2MTogdGtpbnRlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggbGlzdHMgYW5kIHR1cGxlcyBjb250YWluaW5nCisgIHN0cmluZ3Mgd2l0aCB3aGl0ZXNwYWNlcywgYmFja3NsYXNoZXMgb3IgdW5iYWxhbmNlZCBicmFjZXMuCisKKy0gSXNzdWUgIzk3MjA6IHppcGZpbGUgbm93IHdyaXRlcyBjb3JyZWN0IGxvY2FsIGhlYWRlcnMgZm9yIGZpbGVzIGxhcmdlciB0aGFuCisgIDQgR2lCLgorCistIElzc3VlICMxNjk1NTogRml4IHRoZSBwb2xsKCkgbWV0aG9kIGZvciBtdWx0aXByb2Nlc3NpbmcncyBzb2NrZXQKKyAgY29ubmVjdGlvbnMgb24gV2luZG93cy4KKworLSBTU0xDb250ZXh0LmxvYWRfZGhfcGFyYW1zKCkgbm93IHByb3Blcmx5IGNsb3NlcyB0aGUgaW5wdXQgZmlsZS4KKworLSBJc3N1ZSAjMTUwMzE6IFJlZmFjdG9yIHNvbWUgLnB5YyBtYW5hZ2VtZW50IGNvZGUgdG8gY3V0IGRvd24gb24gY29kZQorICBkdXBsaWNhdGlvbi4gVGhhbmtzIHRvIFJvbmFuIExhbXkgZm9yIHRoZSByZXBvcnQgYW5kIHRha2luZyBhbiBpbml0aWFsIHN0YWIKKyAgYXQgdGhlIHByb2JsZW0uCisKKy0gSXNzdWUgIzE2Mzk4OiBPcHRpbWl6ZSBkZXF1ZS5yb3RhdGUoKSBzbyB0aGF0IGl0IG9ubHkgbW92ZXMgcG9pbnRlcnMKKyAgYW5kIGRvZXNuJ3QgdG91Y2ggdGhlIHVuZGVybHlpbmcgZGF0YSB3aXRoIGluY3JlZnMgYW5kIGRlY3JlZnMuCisKKy0gSXNzdWUgIzE2OTAwOiBJc3N1ZSBhIFJlc291cmNlV2FybmluZyB3aGVuIGFuIHNzbCBzb2NrZXQgaXMgbGVmdCB1bmNsb3NlZC4KKworLSBJc3N1ZSAjMTM4OTk6IFxBLCBcWiwgYW5kIFxCIG5vdyBjb3JyZWN0bHkgbWF0Y2ggdGhlIEEsIFosIGFuZCBCIGxpdGVyYWxzCisgIHdoZW4gdXNlZCBpbnNpZGUgY2hhcmFjdGVyIGNsYXNzZXMgKGUuZy4gJ1tcQV0nKS4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KKworLSBJc3N1ZSAjMTU1NDU6IEZpeCByZWdyZXNzaW9uIGluIHNxbGl0ZTMncyBpdGVyZHVtcCBtZXRob2Qgd2hlcmUgaXQgd2FzCisgIGZhaWxpbmcgaWYgdGhlIGNvbm5lY3Rpb24gdXNlZCBhIHJvdyBmYWN0b3J5IChzdWNoIGFzIHNxbGl0ZTMuUm93KSB0aGF0CisgIHByb2R1Y2VkIHVuc29ydGFibGUgb2JqZWN0cy4gKFJlZ3Jlc3Npb24gd2FzIGludHJvZHVjZWQgYnkgZml4IGZvciA5NzUwKS4KKworLSBmY250bDogYWRkIEZfRFVQRkRfQ0xPRVhFQyBjb25zdGFudCwgYXZhaWxhYmxlIG9uIExpbnV4IDIuNi4yNCsuCisKKy0gSXNzdWUgIzE1OTcyOiBGaXggZXJyb3IgbWVzc2FnZXMgd2hlbiBvcyBmdW5jdGlvbnMgZXhwZWN0aW5nIGEgZmlsZSBuYW1lIG9yCisgIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIHRoZSBpbmNvcnJlY3QgdHlwZS4KKworLSBJc3N1ZSAjODEwOTogVGhlIHNzbCBtb2R1bGUgbm93IGhhcyBzdXBwb3J0IGZvciBzZXJ2ZXItc2lkZSBTTkksIHRoYW5rcworICB0byBhIDptZXRoOmBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYCBtZXRob2QuICBQYXRjaCBieSBEYW5pZWwKKyAgQmxhY2suCisKKy0gSXNzdWUgIzE2ODYwOiBJbiB0ZW1wZmlsZSwgdXNlIE9fQ0xPRVhFQyB3aGVuIGF2YWlsYWJsZSB0byBzZXQgdGhlCisgIGNsb3NlLW9uLWV4ZWMgZmxhZyBhdG9taWNhbGx5LgorCistIElzc3VlICMxNjY3NDogcmFuZG9tLmdldHJhbmRiaXRzKCkgaXMgbm93IDIwLTQwJSBmYXN0ZXIgZm9yIHNtYWxsIGludGVnZXJzLgorCistIElzc3VlICMxNjAwOTogSlNPTiBlcnJvciBtZXNzYWdlcyBub3cgcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uLgorCistIElzc3VlICMxNjgyODogRml4IGVycm9yIGluY29ycmVjdGx5IHJhaXNlZCBieSBiejIuY29tcHJlc3MoYicnKSBhbmQKKyAgYnoyLkJaMkNvbXByZXNzb3IuY29tcHJlc3MoYicnKS4gSW5pdGlhbCBwYXRjaCBieSBNYXJ0aW4gUGFja21hbi4KKworLSBJc3N1ZSAjMTY4MzM6IEluIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLCBkbyBub3QgY29uY2F0ZW5hdGUgdGhlIHJlcXVlc3QKKyAgaGVhZGVycyBhbmQgYm9keSB3aGVuIHRoZSBwYXlsb2FkIGV4Y2VlZHMgMTYgS0IsIHNpbmNlIGl0IGNhbiBjb25zdW1lIG1vcmUKKyAgbWVtb3J5IGZvciBubyBiZW5lZml0LiAgUGF0Y2ggYnkgQmVubm8gTGVzbGllLgorCistIElzc3VlICMxNjU0MTogdGtfc2V0UGFsZXR0ZSgpIG5vdyB3b3JrcyB3aXRoIGtleXdvcmQgYXJndW1lbnRzLgorCistIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgcGFyc2VyLnBvcGl0ZW0oKWAgbm8gbG9uZ2VyIHJhaXNlcyBWYWx1ZUVycm9yLgorICBUaGlzIG1ha2VzIGBwYXJzZXIuY2xlYW4oKWAgd29yayBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydzZWN0aW9uJ10gPSB7fWBgIG5vdyBwcmVzZXJ2ZXMKKyAgc2VjdGlvbiBvcmRlciB3aXRoaW4gdGhlIHBhcnNlci4gVGhpcyBtYWtlcyBgcGFyc2VyLnVwZGF0ZSgpYCBwcmVzZXJ2ZSBzZWN0aW9uCisgIG9yZGVyIGFzIHdlbGwuCisKKy0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydERUZBVUxUJ10gPSB7fWBgIG5vdyBjb3JyZWN0bHkKKyAgY2xlYXJzIHByZXZpb3VzIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGRlZmF1bHQgc2VjdGlvbi4gU2FtZSBnb2VzIGZvcgorICBgYHBhcnNlci51cGRhdGUoeydERUZBVUxUJzoge319KWBgLgorCistIElzc3VlICM5NTg2OiBSZWRlZmluZSBTRU1fRkFJTEVEIG9uIE1hY09TWCB0byBrZWVwIGNvbXBpbGVyIGhhcHB5LgorCistIElzc3VlICMxNjc4NzogSW5jcmVhc2UgYXN5bmNvcmUgYW5kIGFzeW5jaGF0IGRlZmF1bHQgb3V0cHV0IGJ1ZmZlcnMgc2l6ZSwgdG8KKyAgZGVjcmVhc2UgQ1BVIHVzYWdlIGFuZCBpbmNyZWFzZSB0aHJvdWdocHV0LgorCistIElzc3VlICMxMDUyNzogbWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHBvbGwoKSBpbnN0ZWFkIG9mIHNlbGVjdCgpIGlmIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTY2ODg6IE5vdyByZWdleGVzIGNvbnRhaW5lZCBiYWNrcmVmZXJlbmNlcyBjb3JyZWN0bHkgd29yayB3aXRoCisgIG5vbi1BU0NJSSBzdHJpbmdzLiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxNjQ4NjogTWFrZSBhaWZjIGZpbGVzIGFjdCBhcyBjb250ZXh0IG1hbmFnZXJzLgorCistIElzc3VlICMxNjQ4NTogTm93IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZCBpZiBmaWxlIGhlYWRlciBwYXRjaGluZyBmYWlsZWQKKyAgb24gY2xvc2luZyBhbiBhaWZjIGZpbGUuCisKKy0gSXNzdWUgIzE2NjQwOiBSdW4gbGVzcyBjb2RlIHVuZGVyIGEgbG9jayBpbiBzY2hlZCBtb2R1bGUuCisKKy0gSXNzdWUgIzE2MTY1OiBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbm8gbG9uZ2VyIGJsb2NrcyBhIHNjaGVkdWxlciBmb3Igb3RoZXIKKyAgdGhyZWFkcy4KKworLSBJc3N1ZSAjMTY2NDE6IERlZmF1bHQgdmFsdWVzIG9mIHNjaGVkLnNjaGVkdWxlci5lbnRlcigpIGFyZSBubyBsb25nZXIKKyAgbW9kaWZpYWJsZS4KKworLSBJc3N1ZSAjMTY2MTg6IE1ha2UgZ2xvYi5nbG9iIG1hdGNoIGNvbnNpc3RlbnRseSBhY3Jvc3Mgc3RyaW5ncyBhbmQgYnl0ZXMKKyAgcmVnYXJkaW5nIGxlYWRpbmcgZG90cy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2Nzg4OiBBZGQgc2FtZXN0YXQgdG8gTGliL250cGF0aC5weQorCistIElzc3VlICMxNjcxMzogUGFyc2luZyBvZiAndGVsJyB1cmxzIHVzaW5nIHVybHBhcnNlIHNlcGFyYXRlcyBwYXJhbXMgZnJvbQorICBwYXRoLgorCistIElzc3VlICMxNjQ0MzogQWRkIGRvY3N0cmluZ3MgdG8gcmVndWxhciBleHByZXNzaW9uIG1hdGNoIG9iamVjdHMuCisgIFBhdGNoIGJ5IEFudG9uIEthc3lhbm92LgorCistIElzc3VlICMxNTcwMTogRml4IEhUVFBFcnJvciBpbmZvIG1ldGhvZCBjYWxsIHRvIHJldHVybiB0aGUgaGVhZGVycyBpbmZvcm1hdGlvbi4KKworLSBJc3N1ZSAjMTY3NTI6IEFkZCBhIG1pc3NpbmcgaW1wb3J0IHRvIG1vZHVsZWZpbmRlci4gUGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTY2NDY6IGZ0cGxpYi5GVFAubWFrZXBvcnQoKSBtaWdodCBsb3NlIHNvY2tldCBlcnJvciBkZXRhaWxzLgorICAocGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSkKKworLSBJc3N1ZSAjMTY2MjY6IEZpeCBpbmZpbml0ZSByZWN1cnNpb24gaW4gZ2xvYi5nbG9iKCkgb24gV2luZG93cyB3aGVuIHRoZQorICBwYXR0ZXJuIGNvbnRhaW5zIGEgd2lsZGNhcmQgaW4gdGhlIGRyaXZlIG9yIFVOQyBwYXRoLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU3ODM6IEV4Y2VwdCBmb3IgdGhlIG51bWJlciBtZXRob2RzLCB0aGUgQyB2ZXJzaW9uIG9mIGRlY2ltYWwgbm93CisgIHN1cHBvcnRzIGFsbCBOb25lIGRlZmF1bHQgdmFsdWVzIHByZXNlbnQgaW4gZGVjaW1hbC5weS4gVGhlc2UgdmFsdWVzIHdlcmUKKyAgbGFyZ2VseSB1bmRvY3VtZW50ZWQuCisKKy0gSXNzdWUgIzExMTc1OiBhcmdwYXJzZS5GaWxlVHlwZSBub3cgYWNjZXB0cyBlbmNvZGluZyBhbmQgZXJyb3JzCisgIGFyZ3VtZW50cy4gUGF0Y2ggYnkgTHVjYXMgTWF5c3RyZS4KKworLSBJc3N1ZSAjMTY0ODg6IGVwb2xsKCkgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgYHdpdGhgIHN0YXRlbWVudC4gIFBhdGNoCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2Mjk4OiBJbiBIVFRQUmVzcG9uc2UucmVhZCgpLCBjbG9zZSB0aGUgc29ja2V0IHdoZW4gdGhlcmUgaXMgbm8KKyAgQ29udGVudC1MZW5ndGggYW5kIHRoZSBpbmNvbWluZyBzdHJlYW0gaXMgZmluaXNoZWQuICBQYXRjaCBieSBFcmFuCisgIFJ1bmRzdGVpbi4KKworLSBJc3N1ZSAjMTYwNDk6IEFkZCBhYmMuQUJDIGNsYXNzIHRvIGVuYWJsZSB0aGUgdXNlIG9mIGluaGVyaXRhbmNlIHRvIGNyZWF0ZQorICBBQkNzLCByYXRoZXIgdGhhbiB0aGUgbW9yZSBjdW1iZXJzb21lIG1ldGFjbGFzcz1BQkNNZXRhLiBQYXRjaCBieSBCcnVubworICBEdXB1aXMuCisKKy0gRXhwb3NlIHRoZSBUQ1BfRkFTVE9QRU4gYW5kIE1TR19GQVNUT1BFTiBmbGFncyBpbiBzb2NrZXQgd2hlbiB0aGV5J3JlCisgIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTU3MDE6IEFkZCBhIC5oZWFkZXJzIGF0dHJpYnV0ZSB0byB1cmxsaWIuZXJyb3IuSFRUUEVycm9yLiBQYXRjaAorICBjb250cmlidXRlZCBieSBCZXJrZXIgUGVrc2FnLgorCistIElzc3VlICMxNTg3MjogRml4IDMuMyByZWdyZXNzaW9uIGludHJvZHVjZWQgYnkgdGhlIG5ldyBmZC1iYXNlZCBzaHV0aWwucm10cmVlCisgIHRoYXQgY2F1c2VkIGl0IHRvIG5vdCBpZ25vcmUgY2VydGFpbiBlcnJvcnMgd2hlbiBpZ25vcmVfZXJyb3JzIHdhcyBzZXQuCisgIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEgYW5kIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MjQ4OiBEaXNhYmxlIGNvZGUgZXhlY3V0aW9uIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSBieQorICB0a2ludGVyIHdoZW4gdGhlIC1FIGZsYWcgaXMgcGFzc2VkIHRvIFB5dGhvbi4gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKworLSBJc3N1ZSAjMTMzOTA6IE5ldyBmdW5jdGlvbiA6ZnVuYzpgc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpYCByZXR1cm5zIHRoZQorICBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBjdXJyZW50bHkgYWxsb2NhdGVkLgorCistIElzc3VlICMxNjYyODogRml4IGEgbWVtb3J5IGxlYWsgaW4gY3R5cGVzLnJlc2l6ZSgpLgorCistIElzc3VlICMxMzYxNDogRml4IHNldHVwLnB5IHJlZ2lzdGVyIGZhaWx1cmUgd2l0aCBpbnZhbGlkIHJzdCBpbiBkZXNjcmlwdGlvbi4KKyAgUGF0Y2ggYnkgSnVsaWVuIENvdXJ0ZWF1IGFuZCBQaWVycmUgUGF1bCBMZWZlYnZyZS4KKworLSBJc3N1ZSAjMTM1MTI6IENyZWF0ZSB+Ly5weXBpcmMgc2VjdXJlbHkgKENWRS0yMDExLTQ5NDQpLiAgSW5pdGlhbCBwYXRjaCBieQorICBQaGlsaXAgSmVudmV5LCB0ZXN0ZWQgYnkgTWFnZWlhIGFuZCBEZWJpYW4uCisKKy0gSXNzdWUgIzc3MTk6IE1ha2UgZGlzdHV0aWxzIGlnbm9yZSBgYC5uZnMqYGAgZmlsZXMgaW5zdGVhZCBvZiBjaG9raW5nIGxhdGVyCisgIG9uLiAgSW5pdGlhbCBwYXRjaCBieSBTaWxlbnRHaG9zdCBhbmQgSmVmZiBSYW1uYW5pLgorCistIElzc3VlICMxMzEyMDogQWxsb3cgdG8gY2FsbCBwZGIuc2V0X3RyYWNlKCkgZnJvbSB0aHJlYWQuCisgIFBhdGNoIGJ5IElseWEgU2FuZGxlci4KKworLSBJc3N1ZSAjMTY1ODU6IE1ha2UgQ0pLIGVuY29kZXJzIHN1cHBvcnQgZXJyb3IgaGFuZGxlcnMgdGhhdCByZXR1cm4gYnl0ZXMgcGVyCisgIFBFUCAzODMuCisKKy0gSXNzdWUgIzEwMTgyOiBUaGUgcmUgbW9kdWxlIGRvZXNuJ3QgdHJ1bmNhdGUgaW5kaWNlcyB0byAzMiBiaXRzIGFueW1vcmUuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MzMzOiB1c2UgKCIsIiwgIjogIikgYXMgZGVmYXVsdCBzZXBhcmF0b3IgaW4ganNvbiB3aGVuIGluZGVudCBpcworICBzcGVjaWZpZWQsIHRvIGF2b2lkIHRyYWlsaW5nIHdoaXRlc3BhY2UuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjU3MzogSW4gMnRvMywgdHJlYXQgZW51bWVyYXRlKCkgbGlrZSBhIGNvbnN1bWluZyBjYWxsLCBzbyBzdXBlcmZsdW91cworICBsaXN0KCkgY2FsbHMgYXJlbid0IGFkZGVkIHRvIGZpbHRlcigpLCBtYXAoKSwgYW5kIHppcCgpIHdoaWNoIGFyZSBkaXJlY3RseQorICBwYXNzZWQgZW51bWVyYXRlKCkuCisKKy0gSXNzdWUgIzEyODQ4OiBUaGUgcHVyZSBQeXRob24gcGlja2xlIGltcGxlbWVudGF0aW9uIG5vdyB0cmVhdHMgb2JqZWN0CisgIGxlbmd0aHMgYXMgdW5zaWduZWQgMzItYml0IGludGVnZXJzLCBsaWtlIHRoZSBDIGltcGxlbWVudGF0aW9uIGRvZXMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2NDIzOiB1cmxsaWIucmVxdWVzdCBub3cgaGFzIHN1cHBvcnQgZm9yIGBgZGF0YTpgYCBVUkxzLiAgUGF0Y2ggYnkKKyAgTWF0aGlhcyBQYW56ZW5iw7Zjay4KKworLSBJc3N1ZSAjNDQ3MzogQWRkIGEgUE9QMy5zdGxzKCkgdG8gc3dpdGNoIGEgY2xlYXItdGV4dCBQT1AzIHNlc3Npb24gaW50bworICBhbiBlbmNyeXB0ZWQgUE9QMyBzZXNzaW9uLCBvbiBzdXBwb3J0ZWQgc2VydmVycy4gIFBhdGNoIGJ5IExvcmVuem8gQ2F0dWNjaS4KKworLSBJc3N1ZSAjNDQ3MzogQWRkIGEgUE9QMy5jYXBhKCkgbWV0aG9kIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMgYWR2ZXJ0aXNlZAorICBieSB0aGUgUE9QMyBzZXJ2ZXIuICBQYXRjaCBieSBMb3JlbnpvIENhdHVjY2kuCisKKy0gSXNzdWUgIzQ0NzM6IEVuc3VyZSB0aGUgc29ja2V0IGlzIHNodXRkb3duIGNsZWFubHkgaW4gUE9QMy5jbG9zZSgpLgorICBQYXRjaCBieSBMb3JlbnpvIENhdHVjY2kuCisKKy0gSXNzdWUgIzE2NTIyOiBhZGRlZCBGQUlMX0ZBU1QgZmxhZyB0byBkb2N0ZXN0LgorCistIElzc3VlICMxNTYyNzogQWRkIHRoZSBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuc291cmNlX3RvX2NvZGUoKSBtZXRob2QuCisKKy0gSXNzdWUgIzE2NDA4OiBGaXggZmlsZSBkZXNjcmlwdG9ycyBub3QgYmVpbmcgY2xvc2VkIGluIGVycm9yIGNvbmRpdGlvbnMKKyAgaW4gdGhlIHppcGZpbGUgbW9kdWxlLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTQ2MzE6IEFkZCBhIG5ldyA6Y2xhc3M6YHdlYWtyZWYuV2Vha01ldGhvZGAgdG8gc2ltdWxhdGUgd2VhaworICByZWZlcmVuY2VzIHRvIGJvdW5kIG1ldGhvZHMuCisKKy0gSXNzdWUgIzE2NDY5OiBGaXggZXhjZXB0aW9ucyBmcm9tIGZsb2F0IC0+IEZyYWN0aW9uIGFuZCBEZWNpbWFsIC0+IEZyYWN0aW9uCisgIGNvbnZlcnNpb25zIGZvciBzcGVjaWFsIHZhbHVlcyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhvc2UgZm9yIGZsb2F0IC0+IGludAorICBhbmQgRGVjaW1hbCAtPiBpbnQuICBQYXRjaCBieSBBbGV4ZXkgS2FjaGF5ZXYuCisKKy0gSXNzdWUgIzE2NDgxOiBtdWx0aXByb2Nlc3Npbmcgbm8gbG9uZ2VyIGxlYWtzIHByb2Nlc3MgaGFuZGxlcyBvbiBXaW5kb3dzLgorCistIElzc3VlICMxMjQyODogQWRkIGEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgZnVuY3Rvb2xzLnBhcnRpYWwoKS4KKyAgUGF0Y2ggYnkgQnJpYW4gVGhvcm5lLgorCistIElzc3VlICMxNjE0MDogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBkb3VibGUgY2xvc2VzIGl0cyBjaGlsZAorICBzdWJwcm9jZXNzLlBJUEUgcGFyZW50IGZpbGUgZGVzY3JpcHRvcnMgb24gY2hpbGQgZXJyb3IgcHJpb3IgdG8gZXhlYygpLgorCistIFJlbW92ZSBhIGJhcmUgcHJpbnQgdG8gc3Rkb3V0IGZyb20gdGhlIHN1YnByb2Nlc3MgbW9kdWxlIHRoYXQgY291bGQgaGF2ZQorICBoYXBwZW5lZCBpZiB0aGUgY2hpbGQgcHJvY2VzcyB3cm90ZSBnYXJiYWdlIHRvIGl0cyBwcmUtZXhlYyBlcnJvciBwaXBlLgorCistIFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBub3cgcmFpc2VzIGl0cyBvd24gU3VicHJvY2Vzc0Vycm9yIGluc3RlYWQgb2YgYQorICBSdW50aW1lRXJyb3IgaW4gdmFyaW91cyBlcnJvciBzaXR1YXRpb25zIHdoaWNoIHNob3VsZCBub3Qgbm9ybWFsbHkgaGFwcGVuLgorCistIElzc3VlICMxNjMyNzogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBsZWFrcyBmaWxlIGRlc2NyaXB0b3JzCisgIHVzZWQgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIgcGlwZXMgdG8gdGhlIGNoaWxkIHdoZW4gZm9yaygpIGZhaWxzLgorCistIElzc3VlICMxNDM5NjogSGFuZGxlIHRoZSBvZGQgcmFyZSBjYXNlIG9mIHdhaXRwaWQgcmV0dXJuaW5nIDAgd2hlbiBub3QKKyAgZXhwZWN0ZWQgaW4gc3VicHJvY2Vzcy5Qb3Blbi53YWl0KCkuCisKKy0gSXNzdWUgIzE2NDExOiBGaXggYSBidWcgd2hlcmUgemxpYi5kZWNvbXByZXNzb2JqKCkuZmx1c2goKSBtaWdodCB0cnkgdG8gYWNjZXNzCisgIHByZXZpb3VzbHktZnJlZWQgbWVtb3J5LiBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjM1NzogZml4IGNhbGxpbmcgYWNjZXB0KCkgb24gYSBTU0xTb2NrZXQgY3JlYXRlZCB0aHJvdWdoCisgIFNTTENvbnRleHQud3JhcF9zb2NrZXQoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEplZmYgTWNOZWlsLgorCistIElzc3VlICMxNjQwOTogVGhlIHJlcG9ydGhvb2sgY2FsbGJhY2sgbWFkZSBieSB0aGUgbGVnYWN5CisgIHVybGxpYi5yZXF1ZXN0LnVybHJldHJpZXZlIEFQSSBub3cgcHJvcGVybHkgc3VwcGxpZXMgYSBjb25zdGFudCBub24temVybworICBibG9ja19zaXplIGFzIGl0IGRpZCBpbiBQeXRob24gMy4yIGFuZCAyLjcuICBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mCisgIHVybGxpYi5yZXF1ZXN0LlVSTG9wZW5lci5yZXRyaWV2ZS4KKworLSBJc3N1ZSAjMTY0MzE6IFVzZSB0aGUgdHlwZSBpbmZvcm1hdGlvbiB3aGVuIGNvbnN0cnVjdGluZyBhIERlY2ltYWwgc3VidHlwZQorICBmcm9tIGEgRGVjaW1hbCBhcmd1bWVudC4KKworLSBJc3N1ZSAjMTU2NDE6IENsZWFuIHVwIGRlcHJlY2F0ZWQgY2xhc3NlcyBmcm9tIGltcG9ydGxpYgorICBQYXRjaCBieSBUYXJhcyBMeWFwdW4uCisKKy0gSXNzdWUgIzE2MzUwOiB6bGliLmRlY29tcHJlc3NvYmooKS5kZWNvbXByZXNzKCkgbm93IGFjY3VtdWxhdGVzIGRhdGEgZnJvbQorICBzdWNjZXNzaXZlIGNhbGxzIGFmdGVyIEVPRiBpbiB1bnVzZWRfZGF0YSwgaW5zdGVhZCBvZiBvbmx5IHNhdmluZyB0aGUgYXJndW1lbnQKKyAgdG8gdGhlIGxhc3QgY2FsbC4gZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbm93IGNvcnJlY3RseSBzZXRzIHVudXNlZF9kYXRhIGFuZAorICB1bmNvbnN1bWVkX3RhaWwuIEEgYnVnIGluIHRoZSBoYW5kbGluZyBvZiBNZW1vcnlFcnJvciB3aGVuIHNldHRpbmcgdGhlCisgIHVuY29uc3VtZWRfdGFpbCBhdHRyaWJ1dGUgaGFzIGFsc28gYmVlbiBmaXhlZC4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTI3NTk6IHNyZV9wYXJzZSBub3cgcmFpc2VzIGEgcHJvcGVyIGVycm9yIHdoZW4gdGhlIG5hbWUgb2YgdGhlIGdyb3VwCisgIGlzIG1pc3NpbmcuICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MTUyOiBmaXggdG9rZW5pemUgdG8gaWdub3JlIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgY29kZSB3aGVuCisgIG5vIG5ld2xpbmUgaXMgZm91bmQuICBQYXRjaCBieSBOZWQgQmF0Y2hlbGRlci4KKworLSBJc3N1ZSAjMTYyODQ6IFByZXZlbnQga2VlcGluZyB1bm5lY2Vzc2FyeSByZWZlcmVuY2VzIHRvIHdvcmtlciBmdW5jdGlvbnMKKyAgaW4gY29uY3VycmVudC5mdXR1cmVzIFRocmVhZFBvb2xFeGVjdXRvci4KKworLSBJc3N1ZSAjMTYyMzA6IEZpeCBhIGNyYXNoIGluIHNlbGVjdC5zZWxlY3QoKSB3aGVuIG9uZSB0aGUgbGlzdHMgY2hhbmdlcworICBzaXplIHdoaWxlIGl0ZXJhdGVkIG9uLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYyMjg6IEZpeCBhIGNyYXNoIGluIHRoZSBqc29uIG1vZHVsZSB3aGVyZSBhIGxpc3QgY2hhbmdlcyBzaXplCisgIHdoaWxlIGl0IGlzIGJlaW5nIGVuY29kZWQuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjM1MTogTmV3IGZ1bmN0aW9uIGdjLmdldF9zdGF0cygpIHJldHVybnMgcGVyLWdlbmVyYXRpb24gY29sbGVjdGlvbgorICBzdGF0aXN0aWNzLgorCistIElzc3VlICMxNDg5NzogRW5oYW5jZSBlcnJvciBtZXNzYWdlcyBvZiBzdHJ1Y3QucGFjayBhbmQKKyAgc3RydWN0LnBhY2tfaW50by4gUGF0Y2ggYnkgTWF0dGkgTcOka2kuCisKKy0gSXNzdWUgIzE2MzE2OiBtaW1ldHlwZXMgbm93IHJlY29nbml6ZXMgdGhlIC54eiBhbmQgLnR4eiAoLnRhci54eikgZXh0ZW5zaW9ucy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTI4OTA6IGNnaXRiIG5vIGxvbmdlciBwcmludHMgc3B1cmlvdXMgPHA+IHRhZ3MgaW4gdGV4dAorICBtb2RlIHdoZW4gdGhlIGxvZ2RpciBvcHRpb24gaXMgc3BlY2lmaWVkLgorCistIElzc3VlICMxNjMwNzogRml4IG11bHRpcHJvY2Vzc2luZy5Qb29sLm1hcF9hc3luYyBub3QgY2FsbGluZyBpdHMgY2FsbGJhY2tzLgorICBQYXRjaCBieSBKYW5uZSBLYXJpbGEuCisKKy0gSXNzdWUgIzE2MzA1OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgb2NjdXJyaW5nIHdoZW4gaW50ZXJydXB0aW5nCisgIG1hdGguZmFjdG9yaWFsLgorCistIElzc3VlICMxNjExNjogRml4IGluY2x1ZGUgYW5kIGxpYnJhcnkgcGF0aHMgdG8gYmUgY29ycmVjdCB3aGVuIGJ1aWxkaW5nIEMKKyAgZXh0ZW5zaW9ucyBpbiB2ZW52cy4KKworLSBJc3N1ZSAjMTYyNDU6IEZpeCB0aGUgdmFsdWUgb2YgYSBmZXcgZW50aXRpZXMgaW4gaHRtbC5lbnRpdGllcy5odG1sNS4KKworLSBJc3N1ZSAjMTYzMDE6IEZpeCB0aGUgbG9jYWxob3N0IHZlcmlmaWNhdGlvbiBpbiB1cmxsaWIvcmVxdWVzdC5weSBmb3IgZmlsZTovLworICB1cmxzLgorCistIElzc3VlICMxNjI1MDogRml4IHRoZSBpbnZvY2F0aW9ucyBvZiBVUkxFcnJvciB3aGljaCBoYWQgbWlzcGxhY2VkIGZpbGVuYW1lCisgIGF0dHJpYnV0ZSBmb3IgZXhjZXB0aW9uLgorCistIElzc3VlICMxMDgzNjogRml4IGV4Y2VwdGlvbiByYWlzZWQgd2hlbiBmaWxlIG5vdCBmb3VuZCBpbiB1cmxyZXRyaWV2ZQorICBJbml0aWFsIHBhdGNoIGJ5IEV6aW8gTWVsb3R0aS4KKworLSBJc3N1ZSAjMTQzOTg6IEZpeCBzaXplIHRydW5jYXRpb24gYW5kIG92ZXJmbG93IGJ1Z3MgaW4gdGhlIGJ6MiBtb2R1bGUuCisKKy0gSXNzdWUgIzEyNjkyOiBGaXggcmVzb3VyY2UgbGVhayBpbiB1cmxsaWIucmVxdWVzdCB3aGVuIHRhbGtpbmcgdG8gYW4gSFRUUAorICBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBpbmNsdWRlIGEgYGBDb25uZWN0aW9uOiBjbG9zZWBgIGhlYWRlciBpbiBpdHMgcmVzcG9uc2VzLgorCistIElzc3VlICMxMjAzNDogRml4IGJvZ3VzIGNhY2hpbmcgb2YgcmVzdWx0IGluIGNoZWNrX0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZS4KKyAgUGF0Y2ggYnkgQXRzdW8gSXNoaW1vdG8uCisKKy0gSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBgbHptYS5MWk1BRmlsZWAgKHNlZSBhbHNvIGlzc3VlICMxNjAzNCkuCisKKy0gSXNzdWUgIzE2MjIwOiB3c2dpcmVmIG5vdyBhbHdheXMgY2FsbHMgY2xvc2UoKSBvbiBhbiBpdGVyYWJsZSByZXNwb25zZS4KKyAgUGF0Y2ggYnkgQnJlbnQgVHViYnMuCisKKy0gSXNzdWUgIzE2MjcwOiB1cmxsaWIgbWF5IGhhbmcgd2hlbiB1c2VkIGZvciByZXRyaWV2aW5nIGZpbGVzIHZpYSBGVFAgYnkgdXNpbmcKKyAgYSBjb250ZXh0IG1hbmFnZXIuICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2xhJy4KKworLSBJc3N1ZSAjMTY0NjE6IFdhdmUgbGlicmFyeSBzaG91bGQgYmUgYWJsZSB0byBkZWFsIHdpdGggNEdCIHdhdiBmaWxlcywKKyAgYW5kIHNhbXBsZSByYXRlIG9mIDQ0MTAwIEh6LgorCistIElzc3VlICMxNjE3NjogUHJvcGVybHkgaWRlbnRpZnkgV2luZG93cyA4IHZpYSBwbGF0Zm9ybS5wbGF0Zm9ybSgpCisKKy0gSXNzdWUgIzE2MDg4OiBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyJ3Mgc2VuZF9lcnJvciBtZXRob2QgaW5jbHVkZXMgYQorICBDb250ZW50LUxlbmd0aCBoZWFkZXIgaW4gaXQncyByZXNwb25zZSBub3cuIFBhdGNoIGJ5IEFudG9pbmUgUGl0cm91LgorCistIElzc3VlICMxNjExNDogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBwcm92aWRlcyBhIG1pc2xlYWRpbmcgZXJyb3IKKyAgbWVzc2FnZSBzdGF0aW5nIHRoYXQgYXJnc1swXSBkaWQgbm90IGV4aXN0IHdoZW4gZWl0aGVyIHRoZSBjd2Qgb3IgZXhlY3V0YWJsZQorICBrZXl3b3JkIGFyZ3VtZW50cyBzcGVjaWZpZWQgYSBwYXRoIHRoYXQgZGlkIG5vdCBleGlzdC4KKworLSBJc3N1ZSAjMTYxNjk6IEZpeCBjdHlwZXMuV2luRXJyb3IoKSdzIGNvbmZ1c2lvbiBiZXR3ZWVuIGVycm5vIGFuZCB3aW5lcnJvci4KKworLSBJc3N1ZSAjMTQ5MjcwNDogc2h1dGlsLmNvcHlmaWxlKCkgcmFpc2VzIGEgZGlzdGluY3QgU2FtZUZpbGVFcnJvciBub3cgaWYKKyAgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgZmlsZS4gUGF0Y2ggYnkgQXRzdW8gSXNoaW1vdG8uCisKKy0gSXNzdWUgIzEzODk2OiBNYWtlIHNoZWxmIGluc3RhbmNlcyB3b3JrIHdpdGggJ3dpdGgnIGFzIGNvbnRleHQgbWFuYWdlcnMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kuCisKKy0gSXNzdWUgIzE1NDE3OiBBZGQgc3VwcG9ydCBmb3IgY3NoIGFuZCBmaXNoIGluIHZlbnYgYWN0aXZhdGlvbiBzY3JpcHRzLgorCistIElzc3VlICMxNDM3NzogRWxlbWVudFRyZWUud3JpdGUgYW5kIHNvbWUgb2YgdGhlIG1vZHVsZS1sZXZlbCBmdW5jdGlvbnMgaGF2ZQorICBhIG5ldyBwYXJhbWV0ZXIgLSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqLiBJdCBjb250cm9scyBob3cgZWxlbWVudHMgd2l0aCBubworICBjb250ZW50cyBhcmUgZW1pdHRlZC4KKworLSBJc3N1ZSAjMTYwODk6IEFsbG93IEVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyIHRvIHdvcmsgYWdhaW4gd2l0aCBhIG5vbi1FbGVtZW50CisgIGVsZW1lbnRfZmFjdG9yeSAoZml4ZXMgYSByZWdyZXNzaW9uIGluIFNpbXBsZVRBTCkuCisKKy0gSXNzdWUgIzk2NTA6IExpc3QgY29tbW9ubHkgdXNlZCBmb3JtYXQgY29kZXMgaW4gdGltZS5zdHJmdGltZSBhbmQKKyAgdGltZS5zdHJwdGltZSBkb2NzdHRpbmdzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgTWlrZSBIb3kuCisKKy0gSXNzdWUgIzE2MDM0OiBGaXggcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgaW4gdGhlIG5ldyBgYnoyLkJaMkZpbGVgCisgIGltcGxlbWVudGF0aW9uLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIGBwdHkuc3Bhd24oKWAgbm93IHJldHVybnMgdGhlIGNoaWxkIHByb2Nlc3Mgc3RhdHVzIHJldHVybmVkIGJ5IGBvcy53YWl0cGlkKClgLgorCistIElzc3VlICMxNTc1NjogYHN1YnByb2Nlc3MucG9sbCgpYCBub3cgcHJvcGVybHkgaGFuZGxlcyBgZXJybm8uRUNISUxEYCB0bworICByZXR1cm4gYSByZXR1cm5jb2RlIG9mIDAgd2hlbiB0aGUgY2hpbGQgaGFzIGFscmVhZHkgZXhpdGVkIG9yIGNhbm5vdCBiZSB3YWl0ZWQKKyAgb24uCisKKy0gSXNzdWUgIzE1MzIzOiBJbXByb3ZlIGZhaWx1cmUgbWVzc2FnZSBvZiBgTW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpYC4KKworLSBJc3N1ZSAjMTYwNjQ6IGBgdW5pdHRlc3QgLW1gYCBjbGFpbXMgZXhlY3V0YWJsZSBpcyAicHl0aG9uIiwgbm90ICJweXRob24zIi4KKworLSBJc3N1ZSAjMTIzNzY6IFBhc3Mgb24gcGFyYW1ldGVycyBpbiBgVGV4dFRlc3RSZXN1bHQuX19pbml0X18oKWAgc3VwZXIgY2FsbC4KKworLSBJc3N1ZSAjMTUyMjI6IEluc2VydCBibGFuayBsaW5lIGFmdGVyIGVhY2ggbWVzc2FnZSBpbiBtYm94IG1haWxib3hlcy4KKworLSBJc3N1ZSAjMTYwMTM6IEZpeCBgY3N2LlJlYWRlcmAgcGFyc2luZyBpc3N1ZSB3aXRoIGVuZGluZyBxdW90ZSBjaGFyYWN0ZXJzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTQyMTogRml4IGFuIE92ZXJmbG93RXJyb3IgaW4gYENhbGVuZGFyLml0ZXJtb250aGRhdGVzKClgIGFmdGVyCisgIGBkYXRldGltZS5NQVhZRUFSYC4gIFBhdGNoIGJ5IEPDqWRyaWMgS3JpZXIuCisKKy0gSXNzdWUgIzE2MTEyOiBwbGF0Zm9ybS5hcmNoaXRlY3R1cmUgZG9lcyBub3QgY29ycmVjdGx5IGVzY2FwZSBhcmd1bWVudCB0bworICAvdXNyL2Jpbi9maWxlLiAgUGF0Y2ggYnkgRGF2aWQgQmVuamFtaW4uCisKKy0gSXNzdWUgIzE1OTcwOiBgeG1sLmV0cmVlLkVsZW1lbnRUcmVlYCBub3cgc2VyaWFsaXplcyBjb3JyZWN0bHkgdGhlIGVtcHR5IEhUTUwKKyAgZWxlbWVudHMgJ21ldGEnIGFuZCAncGFyYW0nLgorCistIElzc3VlICMxNTg0MjogVGhlIGBTb2NrZXRJTy57cmVhZGFibGUsd3JpdGFibGUsc2Vla2FibGV9YCBtZXRob2RzIG5vdyByYWlzZQorICBWYWx1ZUVycm9yIHdoZW4gdGhlIGZpbGUtbGlrZSBvYmplY3QgaXMgY2xvc2VkLiAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYS4KKworLSBJc3N1ZSAjMTU4NzY6IEZpeCBhIHJlZmxlYWsgaW4gdGhlIGBjdXJzZXNgIG1vZHVsZTogd2luZG93LmVuY29kaW5nLgorCistIElzc3VlICMxNTg4MTogRml4IGBhdGV4aXRgIGhvb2sgaW4gYG11bHRpcHJvY2Vzc2luZ2AuICBPcmlnaW5hbCBwYXRjaCBieSBDaHJpcworICBNY0Rvbm91Z2guCisKKy0gSXNzdWUgIzE1ODQxOiBUaGUgcmVhZGFibGUoKSwgd3JpdGFibGUoKSBhbmQgc2Vla2FibGUoKSBtZXRob2RzIG9mCisgIGBpby5CeXRlc0lPYCBhbmQgYGlvLlN0cmluZ0lPYCBvYmplY3RzIG5vdyByYWlzZSBWYWx1ZUVycm9yIHdoZW4gdGhlIG9iamVjdAorICBoYXMgYmVlbiBjbG9zZWQuICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhLgorCistIElzc3VlICMxNTQ0NzogVXNlIGBzdWJwcm9jZXNzLkRFVk5VTExgIGluIHdlYmJyb3dzZXIsIGluc3RlYWQgb2Ygb3BlbmluZworICBgb3MuZGV2bnVsbGAgZXhwbGljaXRseSBhbmQgbGVhdmluZyBpdCBvcGVuLgorCistIElzc3VlICMxNTUwOTogYHdlYmJyb3dzZXIuVW5peEJyb3dzZXJgIG5vIGxvbmdlciBwYXNzZXMgZW1wdHkgYXJndW1lbnRzIHRvCisgIFBvcGVuIHdoZW4gYGAlYWN0aW9uYGAgc3Vic3RpdHV0aW9ucyBwcm9kdWNlIGVtcHR5IHN0cmluZ3MuCisKKy0gSXNzdWUgIzEyNzc2LCBpc3N1ZSAjMTE4Mzk6IENhbGwgYGFyZ3BhcnNlYCB0eXBlIGZ1bmN0aW9uIChzcGVjaWZpZWQgYnkKKyAgYWRkX2FyZ3VtZW50KSBvbmx5IG9uY2UuIEJlZm9yZSwgdGhlIHR5cGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB0d2ljZSBpbiB0aGUKKyAgY2FzZSB3aGVyZSB0aGUgZGVmYXVsdCB3YXMgc3BlY2lmaWVkIGFuZCB0aGUgYXJndW1lbnQgd2FzIGdpdmVuIGFzIHdlbGwuICBUaGlzCisgIHdhcyBlc3BlY2lhbGx5IHByb2JsZW1hdGljIGZvciB0aGUgRmlsZVR5cGUgdHlwZSwgYXMgYSBkZWZhdWx0IGZpbGUgd291bGQKKyAgYWx3YXlzIGJlIG9wZW5lZCwgZXZlbiBpZiBhIGZpbGUgYXJndW1lbnQgd2FzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCistIElzc3VlICMxNTkwNjogRml4IGEgcmVncmVzc2lvbiBpbiBhcmdwYXJzZSBjYXVzZWQgYnkgdGhlIHByZWNlZGluZyBjaGFuZ2UsCisgIHdoZW4gYGBhY3Rpb249J2FwcGVuZCdgYCwgYGB0eXBlPSdzdHInYGAgYW5kIGBgZGVmYXVsdD1bXWBgLgorCistIElzc3VlICMxNjExMzogQWRkZWQgc2hhMyBtb2R1bGUgYmFzZWQgb24gdGhlIEtlY2NhayByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24KKyAgMy4yLiBUaGUgYGhhc2hsaWJgIG1vZHVsZSBoYXMgZm91ciBhZGRpdGlvbmFsIGhhc2ggYWxnb3JpdGhtczogYHNoYTNfMjI0YCwKKyAgYHNoYTNfMjU2YCwgYHNoYTNfMzg0YCBhbmQgYHNoYTNfNTEyYC4gQXMgcGFydCBvZiB0aGUgcGF0Y2ggc29tZSBjb21tb24KKyAgY29kZSB3YXMgbW92ZWQgZnJvbSBfaGFzaG9wZW5zc2wuYyB0byBoYXNobGliLmguCisKKy0gY3R5cGVzLmNhbGxfY29tbWV0aG9kIHdhcyByZW1vdmVkLCBzaW5jZSBpdHMgb25seSB1c2FnZSB3YXMgaW4gdGhlIGRlZnVuY3QKKyAgc2FtcGxlcyBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE2NjkyOiBBZGRlZCBUTFN2MS4xIGFuZCBUTFN2MS4yIHN1cHBvcnQgZm9yIHRoZSBzc2wgbW9kdWxlcy4KKworLSBJc3N1ZSAjMTY4MzI6IGFkZCBhYmMuZ2V0X2NhY2hlX3Rva2VuKCkgdG8gZXhwb3NlIGNhY2hlIHZhbGlkaXR5IGNoZWNraW5nCisgIHN1cHBvcnQgaW4gQUJDTWV0YS4KIAogSURMRQogLS0tLQogCi0tIElzc3VlICMxODg3MzogSURMRSBub3cgZGV0ZWN0cyBQeXRob24gc291cmNlIGNvZGUgZW5jb2Rpbmcgb25seSBpbiBjb21tZW50Ci0gIGxpbmVzLgotCi0tIElzc3VlICMxODk4ODogVGhlICJUYWIiIGtleSBub3cgd29ya3Mgd2hlbiBhIHdvcmQgaXMgYWxyZWFkeSBhdXRvY29tcGxldGVkLgotCi0tIElzc3VlICMxODQ4OTogQWRkIHRlc3RzIGZvciBTZWFyY2hFbmdpbmUuIE9yaWdpbmFsIHBhdGNoIGJ5IFBoaWwgV2Vic3Rlci4KLQogLSBJc3N1ZSAjMTg0Mjk6IEZvcm1hdCAvIEZvcm1hdCBQYXJhZ3JhcGgsIG5vdyB3b3JrcyB3aGVuIGNvbW1lbnQgYmxvY2tzCiAgIGFyZSBzZWxlY3RlZC4gQXMgd2l0aCB0ZXh0IGJsb2NrcywgdGhpcyB3b3JrcyBiZXN0IHdoZW4gdGhlIHNlbGVjdGlvbgogICBvbmx5IGluY2x1ZGVzIGNvbXBsZXRlIGxpbmVzLgpAQCAtMTA0MCwzOCArMzU5Miw3MyBAQAogCiAtIElzc3VlICMxNDE0NjogSGlnaGxpZ2h0IHNvdXJjZSBsaW5lIHdoaWxlIGRlYnVnZ2luZyBvbiBXaW5kb3dzLgogCistIElzc3VlICMxNzgzODogQWxsb3cgc3lzLnN0ZGluIHRvIGJlIHJlYXNzaWduZWQuCisKKy0gSXNzdWUgIzEzNDk1OiBBdm9pZCBsb2FkaW5nIHRoZSBjb2xvciBkZWxlZ2F0b3IgdHdpY2UgaW4gSURMRS4KKworLSBJc3N1ZSAjMTc3OTg6IEFsbG93IElETEUgdG8gZWRpdCBuZXcgZmlsZXMgd2hlbiBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lLgorCistIElzc3VlICMxNDczNTogVXBkYXRlIElETEUgZG9jcyB0byBvbWl0ICJDb250cm9sLXogb24gV2luZG93cyIuCisKIC0gSXNzdWUgIzE3NTMyOiBBbHdheXMgaW5jbHVkZSBPcHRpb25zIG1lbnUgZm9yIElETEUgb24gT1MgWC4KICAgUGF0Y2ggYnkgR3VpbGhlcm1lIFNpbcO1ZXMuCiAKKy0gSXNzdWUgIzE3NTg1OiBGaXhlZCBJRExFIHJlZ3Jlc3Npb24uIE5vdyBjbG9zZXMgd2hlbiB1c2luZyBleGl0KCkgb3IgcXVpdCgpLgorCistIElzc3VlICMxNzY1NzogU2hvdyBmdWxsIFRrIHZlcnNpb24gaW4gSURMRSdzIGFib3V0IGRpYWxvZy4KKyAgUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCisKKy0gSXNzdWUgIzE3NjEzOiBQcmV2ZW50IHRyYWNlYmFjayB3aGVuIHJlbW92aW5nIHN5bnRheCBjb2xvcml6ZXIgaW4gSURMRS4KKworLSBJc3N1ZSAjMTIwNzU4OTogQmFja3dhcmRzLWNvbXBhdGliaWxpdHkgcGF0Y2ggZm9yIHJpZ2h0LWNsaWNrIG1lbnUgaW4gSURMRS4KKworLSBJc3N1ZSAjMTY4ODc6IElETEUgbm93IGFjY2VwdHMgQ2FuY2VsIGluIHRhYmlmeS91bnRhYmlmeSBkaWFsb2cgYm94LgorCistIElzc3VlICMxNzYyNTogSW4gSURMRSwgY2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCisKKy0gSXNzdWUgIzE0MjU0OiBJRExFIG5vdyBoYW5kbGVzIHJlYWRsaW5lIGNvcnJlY3RseSBhY3Jvc3Mgc2hlbGwgcmVzdGFydHMuCisKKy0gSXNzdWUgIzE3NjE0OiBJRExFIG5vIGxvbmdlciByYWlzZXMgZXhjZXB0aW9uIHdoZW4gcXVpY2tseSBjbG9zaW5nIGEgZmlsZS4KKworLSBJc3N1ZSAjNjY5ODogSURMRSBub3cgb3BlbnMganVzdCBhbiBlZGl0b3Igd2luZG93IHdoZW4gY29uZmlndXJlZCB0byBkbyBzby4KKworLSBJc3N1ZSAjODkwMDogVXNpbmcga2V5Ym9hcmQgc2hvcnRjdXRzIGluIElETEUgdG8gb3BlbiBhIGZpbGUgbm8gbG9uZ2VyCisgIHJhaXNlcyBhbiBleGNlcHRpb24uCisKKy0gSXNzdWUgIzY2NDk6IEZpeGVkIG1pc3NpbmcgZXhpdCBzdGF0dXMgaW4gSURMRS4gUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCisKKy0gSXNzdWUgIzE3MTE0OiBJRExFIG5vdyB1c2VzIG5vbi1zdHJpY3QgY29uZmlnIHBhcnNlci4KKworLSBJc3N1ZSAjOTI5MDogSW4gSURMRSB0aGUgc3lzLnN0ZCogc3RyZWFtcyBub3cgaW1wbGVtZW50IGlvLlRleHRJT0Jhc2UKKyAgaW50ZXJmYWNlIGFuZCBzdXBwb3J0IGFsbCBtYW5kYXRvcnkgbWV0aG9kcyBhbmQgcHJvcGVydGllcy4KKworLSBJc3N1ZSAjNTA2NjogVXBkYXRlIElETEUgZG9jcy4gUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCisKKy0gSXNzdWUgIzE2ODI5OiBJRExFIHByaW50aW5nIG5vIGxvbmdlciBmYWlscyBpZiB0aGVyZSBhcmUgc3BhY2VzIG9yIG90aGVyCisgIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgZmlsZSBwYXRoLgorCistIElzc3VlICMxNjQ5MTogSURMRSBub3cgcHJpbnRzIGNoYWluZWQgZXhjZXB0aW9uIHRyYWNlYmFja3MuCisKKy0gSXNzdWUgIzE2ODE5OiBJRExFIG1ldGhvZCBjb21wbGV0aW9uIG5vdyBjb3JyZWN0bHkgd29ya3MgZm9yIGJ5dGVzIGxpdGVyYWxzLgorCistIElzc3VlICMxNjUwNDogSURMRSBub3cgY2F0Y2hlcyBTeW50YXhFcnJvcnMgcmFpc2VkIGJ5IHRva2VuaXplci4gUGF0Y2ggYnkKKyAgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzE2NTExOiBVc2UgZGVmYXVsdCBJRExFIHdpZHRoIGFuZCBoZWlnaHQgaWYgY29uZmlnIHBhcmFtIGlzIG5vdCB2YWxpZC4KKyAgUGF0Y2ggU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTIwNzU4OTogQWRkIEN1dC9Db3B5L1Bhc3RlIGl0ZW1zIHRvIElETEUgcmlnaHQgY2xpY2sgQ29udGV4dCBNZW51CisgIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgorCistIElzc3VlICMxNjEyMzogSURMRSAtIGRlcHJlY2F0ZSBydW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzLgorICBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKwogVGVzdHMKIC0tLS0tCiAKLS0gSXNzdWUgIzE0NDA3OiBGaXggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkgaW4gdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMuCi0KLS0gSXNzdWUgIzE4OTE5OiBVbmlmaWVkIGFuZCBleHRlbmRlZCB0ZXN0cyBmb3IgYXVkaW8gbW9kdWxlczogYWlmYywgc3VuYXUgYW5kCi0gIHdhdmUuCi0KLS0gSXNzdWUgIzE4OTUyOiBGaXggcmVncmVzc2lvbiBpbiBzdXBwb3J0IGRhdGEgZG93bmxvYWRzIGludHJvZHVjZWQgd2hlbgotICB0ZXN0LnN1cHBvcnQgd2FzIGNvbnZlcnRlZCB0byBhIHBhY2thZ2UuIFJlZ3Jlc3Npb24gbm90aWNlZCBieSBaYWNoYXJ5Ci0gIFdhcmUuCi0KLS0gSXNzdWUgIzEyMDM3OiBGaXggdGVzdF9lbWFpbCBmb3IgZGVza3RvcCBXaW5kb3dzLgotCi0tIElzc3VlICMxNTUwNzogdGVzdF9zdWJwcm9jZXNzJ3MgdGVzdF9zZW5kX3NpZ25hbCBjb3VsZCBmYWlsIGlmIHRoZSB0ZXN0Ci0gIHJ1bm5lciB3ZXJlIHJ1biBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgcHJvY2VzcyBpbmhlcml0ZWQgYW4gaWdub3JlCi0gIHNldHRpbmcgZm9yIFNJR0lOVC4gIFJlc3RvcmUgdGhlIFNJR0lOVCBoYW5kbGVyIHRvIHRoZSBkZXNpcmVkCi0gIEtleWJvYXJkSW50ZXJydXB0IHJhaXNpbmcgb25lIGR1cmluZyB0aGF0IHRlc3QuCi0KLS0gSXNzdWUgIzE4NzkyOiBVc2UgIjEyNy4wLjAuMSIgb3IgIjo6MSIgaW5zdGVhZCBvZiAibG9jYWxob3N0IiBhcyBtdWNoIGFzCi0gIHBvc3NpYmxlLCBzaW5jZSAibG9jYWxob3N0IiBnb2VzIHRocm91Z2ggYSBETlMgbG9va3VwIHVuZGVyIHJlY2VudCBXaW5kb3dzCi0gIHZlcnNpb25zLgotCiAtIElzc3VlICMxNjY2MzE4OiBBZGQgYSB0ZXN0IHRoYXQgc2h1dGlsLmNvcHl0cmVlKCkgcmV0YWlucyBkaXJlY3RvcnkKICAgcGVybWlzc2lvbnMuICBQYXRjaCBieSBDYXRoZXJpbmUgRGV2bGluLgogCi0tIElzc3VlICMxODM1NzogYWRkIHRlc3RzIGZvciBkaWN0dmlldyBzZXQgZGlmZmVyZW5jZS4KLSAgUGF0Y2ggYnkgRnJhc2VyIFR3ZWVkYWxlLgotCiAtIElzc3VlICMxODI3MzogbW92ZSB0aGUgdGVzdHMgaW4gTGliL3Rlc3QvanNvbl90ZXN0cyB0byBMaWIvdGVzdC90ZXN0X2pzb24KICAgYW5kIG1ha2UgdGhlbSBkaXNjb3ZlcmFibGUgYnkgdW5pdHRlc3QuICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCiAKQEAgLTExMDMsMjg1ICszNjkwLDEzIEBACiAKIC0gSXNzdWUgIzExMTg1OiBGaXggdGVzdF93YWl0NCB1bmRlciBBSVguICBQYXRjaCBieSBTw6liYXN0aWVuIFNhYmzDqS4KIAotLSBJc3N1ZSAjMTc2OTE6IHRlc3RfdW5pdm5ld2xpbmVzIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgotICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCistIElzc3VlICMxODIwNzogRml4IHRlc3Rfc3NsIGZvciBzb21lIHZlcnNpb25zIG9mIE9wZW5TU0wgdGhhdCBpZ25vcmUgc2Vjb25kcworICBpbiBBU04xX1RJTUUgZmllbGRzLgogCi0tIElzc3VlICMxODA5NDogdGVzdF91dWlkIG5vIG1vcmUgcmVwb3J0cyBza2lwcGVkIHRlc3RzIGFzIHBhc3NlZC4KKy0gSXNzdWUgIzE4MDk0OiB0ZXN0X3V1aWQgbm8gbG9uZ2VyIHJlcG9ydHMgc2tpcHBlZCB0ZXN0cyBhcyBwYXNzZWQuCiAKLS0gSXNzdWUgIzExOTk1OiB0ZXN0X3B5ZG9jIGRvZXNuJ3QgaW1wb3J0IGFsbCBzeXMucGF0aCBtb2R1bGVzIGFueW1vcmUuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTkzOTI6IERvY3VtZW50IHRoYXQgYGltcC5yZWxvYWQoKWAgbm93IGFsc28gcmVxdWlyZXMgYF9fbG9hZGVyX19gIHRvCi0gIGJlIHNldCBvbiB0aGUgbW9kdWxlIGJlaW5nIHJlbG9hZGVkLgotCi0tIElzc3VlICMxODc1ODogRml4ZWQgYW5kIGltcHJvdmVkIGNyb3NzLXJlZmVyZW5jZXMuCi0KLS0gSXNzdWUgIzE4NzQzOiBGaXggcmVmZXJlbmNlcyB0byBub24tZXhpc3RhbnQgIlN0cmluZ0lPIiBtb2R1bGUuCi0KLS0gSXNzdWUgIzE4NzgzOiBSZW1vdmVkIGV4aXN0aW5nIG1lbnRpb25zIG9mIFB5dGhvbiBsb25nIHR5cGUgaW4gZG9jc3RyaW5ncywKLSAgZXJyb3IgbWVzc2FnZXMgYW5kIGNvbW1lbnRzLgotCi0tIElzc3VlICMxNzcwMTogSW1wcm92aW5nIHN0cmZ0aW1lIGRvY3VtZW50YXRpb24uCi0KLS0gSXNzdWUgIzE4NDQwOiBDbGFyaWZ5IHRoYXQgYGhhc2goKWAgY2FuIHRydW5jYXRlIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuCi0gIG9iamVjdCdzIGN1c3RvbSBgX19oYXNoX18oKWAgbWV0aG9kLgotCi0tIElzc3VlICMxNzk1MzogTWVudGlvbiB0aGF0IHlvdSBzaG91bGRuJ3QgcmVwbGFjZSBzeXMubW9kdWxlcyBhbmQgZGVsZXRpbmcga2V5Ci0gIGl0ZW1zIHdpbGwgY2F1c2UgUHl0aG9uIHRvIG5vdCBiZSBoYXBweS4KLQotLSBJc3N1ZSAjMTc4NDQ6IEFkZCBsaW5rcyB0byBlbmNvZGVycyBhbmQgZGVjb2RlcnMgZm9yIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjcy4KLQotLSBJc3N1ZSAjMTQwOTc6IGltcHJvdmUgdGhlICJpbnRyb2R1Y3Rpb24iIHBhZ2Ugb2YgdGhlIHR1dG9yaWFsLgotCi0tIElzc3VlICMxNzk3NzogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBjYWRlZmF1bHQgYXJndW1lbnQncyBkZWZhdWx0IHZhbHVlCi0gIGluIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oKSBpcyBmaXhlZCB0byBtYXRjaCB0aGUgY29kZS4KLQotVG9vbHMvRGVtb3MKLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE4ODczOiAydG8zIGFuZCB0aGUgZmluZG5vY29kaW5nLnB5IHNjcmlwdCBub3cgZGV0ZWN0IFB5dGhvbiBzb3VyY2UKLSAgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQgbGluZXMuCi0KLS0gSXNzdWUgIzE4ODE3OiBGaXggYSByZXNvdXJjZSB3YXJuaW5nIGluIExpYi9haWZjLnB5IGRlbW8uCi0KLS0gSXNzdWUgIzE4NDM5OiBNYWtlIHBhdGNoY2hlY2sgd29yayBvbiBXaW5kb3dzIGZvciBBQ0tTLCBORVdTLgotCi0tIElzc3VlICMxODQ0ODogRml4IGEgdHlwbyBpbiBUb29scy9kZW1vL2VpZmZlbC5weS4KLQotLSBJc3N1ZSAjMTg0NTc6IEZpeGVkIHNhdmluZyBvZiBmb3JtdWxhcyBhbmQgY29tcGxleCBudW1iZXJzIGluCi0gIFRvb2xzL2RlbW8vc3MxLnB5LgotCi0tIElzc3VlICMxODQ0OTogTWFrZSBUb29scy9kZW1vL3NzMS5weSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLiAgUGF0Y2ggYnkKLSAgRsOpdnJ5IFRoaWJhdWx0LgotCi0tIElzc3VlICMxNTIzOTogTWFrZSBta3N0cmluZ3ByZXAucHkgd29yayBhZ2FpbiBvbiBQeXRob24gMy4KLQotLSBJc3N1ZSAjMTI5OTA6IFRoZSAiUHl0aG9uIExhdW5jaGVyIiBvbiBPU1ggY291bGQgbm90IGxhdW5jaCBweXRob24gc2NyaXB0cwotICB0aGF0IGhhdmUgcGF0aHMgdGhhdCBpbmNsdWRlIHdpZGUgY2hhcmFjdGVycy4KLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzE5MzU2OiBBdm9pZCB1c2luZyBhIEMgdmFyaWFibGVkIG5hbWVkICJfc2VsZiIsIGl0J3MgYSByZXNlcnZlZAotICB3b3JkIGluIHNvbWUgQyBjb21waWxlcnMuCi0KLS0gSXNzdWUgIzE5MTMwOiBDb3JyZWN0IFBDYnVpbGQvcmVhZG1lLnR4dCwgUHl0aG9uIDMuMyBhbmQgMy40IHJlcXVpcmUgVlMgMjAxMC4KLQotLSBJc3N1ZSAjMTYwNjc6IEFkZCBkZXNjcmlwdGlvbiBpbnRvIE1TSSBmaWxlIHRvIHJlcGxhY2UgaW5zdGFsbGVyJ3MgdGVtcG9yYXJ5IG5hbWUuCi0KLS0gSXNzdWUgIzE4MjU2OiBDb21waWxhdGlvbiBmaXggZm9yIHJlY2VudCBBSVggcmVsZWFzZXMuICBQYXRjaCBieQotICBEYXZpZCBFZGVsc29obi4KLQotLSBJc3N1ZSAjMTUxNzI6IERvY3VtZW50IE5BU00gMi4xMCsgYXMgcmVxdWlyZW1lbnQgZm9yIGJ1aWxkaW5nIE9wZW5TU0wgMS4wLjEKLSAgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTU4NDogUHJvdmlkZSBvcHRpb25zIHRvIG92ZXJyaWRlIGRlZmF1bHQgc2VhcmNoIHBhdGhzIGZvcgotICBUY2wgYW5kIFRrIHdoZW4gYnVpbGRpbmcgX3RraW50ZXIuCi0KLS0gSXNzdWUgIzE1NjYzOiBUY2wvVGsgOC41LjE1IGlzIG5vdyBpbmNsdWRlZCB3aXRoIHRoZSBPUyBYIDEwLjYrCi0gIDY0LWJpdC8zMi1iaXQgaW5zdGFsbGVyIGZvciAxMC42Ky4gIEl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkKLSAgdG8gaW5zdGFsbCBhIHRoaXJkLXBhcnR5IHZlcnNpb24gb2YgVGNsL1RrIDguNSB0byB3b3JrIGFyb3VuZCB0aGUKLSAgcHJvYmxlbXMgaW4gdGhlIEFwcGxlLXN1cHBsaWVkIFRjbC9UayA4LjUgc2hpcHBlZCBpbiBPUyBYIDEwLjYKLSAgYW5kIGxhdGVyIHJlbGVhc2VzLgotCi0tIElzc3VlICMxOTAxOTogQ2hhbmdlIHRoZSBPUyBYIGluc3RhbGxlciBidWlsZCBzY3JpcHQgdG8gdXNlIENGTEFHUyBpbnN0ZWFkCi0gIG9mIE9QVCBmb3Igc3BlY2lhbCBidWlsZCBvcHRpb25zLiAgQnkgc2V0dGluZyBPUFQsIHNvbWUgY29tcGlsZXItc3BlY2lmaWMKLSAgb3B0aW9ucyBsaWtlIC1md3JhcHYgd2VyZSBvdmVycmlkZGVuIGFuZCB0aHVzIG5vdCB1c2VkLCB3aGljaCBjb3VsZCByZXN1bHQKLSAgaW4gYnJva2VuIGludGVycHJldGVycyB3aGVuIGJ1aWxkaW5nIHdpdGggY2xhbmcuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMTMtTWF5LTIwMTMqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNzIzNzogRml4IGNyYXNoIGluIHRoZSBBU0NJSSBkZWNvZGVyIG9uIG02OGsuCi0KLS0gSXNzdWUgIzE3NDA4OiBBdm9pZCB1c2luZyBhbiBvYnNvbGV0ZSBpbnN0YW5jZSBvZiB0aGUgY29weXJlZyBtb2R1bGUgd2hlbgotICB0aGUgaW50ZXJwcmV0ZXIgaXMgc2h1dGRvd24gYW5kIHRoZW4gc3RhcnRlZCBhZ2Fpbi4KLQotLSBJc3N1ZSAjMTc4NjM6IEluIHRoZSBpbnRlcmFjdGl2ZSBjb25zb2xlLCBkb24ndCBsb29wIGZvcmV2ZXIgaWYgdGhlIGVuY29kaW5nCi0gIGNhbid0IGJlIGZldGNoZWQgZnJvbSBzdGRpbi4KLQotLSBJc3N1ZSAjMTc4Njc6IFJhaXNlIGFuIEltcG9ydEVycm9yIGlmIF9faW1wb3J0X18gaXMgbm90IGZvdW5kIGluIF9fYnVpbHRpbnNfXy4KLQotLSBJc3N1ZSAjMTc4NTc6IFByZXZlbnQgYnVpbGQgZmFpbHVyZXMgd2l0aCBwcmUtMy41LjAgdmVyc2lvbnMgb2Ygc3FsaXRlMywKLSAgc3VjaCBhcyB3YXMgc2hpcHBlZCB3aXRoIENlbnRvcyA1IGFuZCBNYWMgT1MgWCAxMC40LgotCi0tIElzc3VlICMxNzQxMzogc3lzLnNldHRyYWNlIGNhbGxiYWNrcyB3ZXJlIGJlaW5nIHBhc3NlZCBhIHN0cmluZyBpbnN0ZWFkIG9mIGFuCi0gIGV4Y2VwdGlvbiBpbnN0YW5jZSBmb3IgdGhlICd2YWx1ZScgZWxlbWVudCBvZiB0aGUgYXJnIHR1cGxlIGlmIHRoZSBleGNlcHRpb24KLSAgb3JpZ2luYXRlZCBmcm9tIEMgY29kZTsgbm93IGFuIGV4Y2VwdGlvbiBpbnN0YW5jZSBpcyBhbHdheXMgcHJvdmlkZWQuCi0KLS0gSXNzdWUgIzE3NzgyOiBGaXggdW5kZWZpbmVkIGJlaGF2aW91ciBvbiBwbGF0Zm9ybXMgd2hlcmUKLSAgYGBzdHJ1Y3QgdGltZXNwZWNgYCdzICJ0dl9uc2VjIiBtZW1iZXIgaXMgbm90IGEgQyBsb25nLgotCi0tIElzc3VlICMxNzcxNTogRml4IHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIHJhaXNpbmcgYW4gZXhjZXB0aW9uIGluIGEgX190cnVuY19fCi0gIG1ldGhvZC4KLQotLSBJc3N1ZSAjMTY0NDc6IEZpeGVkIHBvdGVudGlhbCBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBzZXR0aW5nIF9fbmFtZV9fIG9uIGEKLSAgY2xhc3MuCi0KLS0gSXNzdWUgIzE3NjY5OiBGaXggY3Jhc2ggaW52b2x2aW5nIGZpbmFsaXphdGlvbiBvZiBnZW5lcmF0b3JzIHVzaW5nIHlpZWxkIGZyb20uCi0KLS0gSXNzdWUgIzE3NjE5OiBNYWtlIGlucHV0KCkgY2hlY2sgZm9yIEN0cmwtQyBjb3JyZWN0bHkgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTc2MTA6IERvbid0IHJlbHkgb24gbm9uLXN0YW5kYXJkIGJlaGF2aW9yIG9mIHRoZSBDIHFzb3J0KCkgZnVuY3Rpb24uCi0KLS0gSXNzdWUgIzE3MzU3OiBBZGQgbWlzc2luZyB2ZXJib3NpdHkgb3V0cHV0IHdoZW4gdXNpbmcgLXYvLXZ2LgotCi1MaWJyYXJ5Ci0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3NjA2OiBGaXhlZCBzdXBwb3J0IG9mIGVuY29kZWQgYnl0ZSBzdHJpbmdzIGluIHRoZSBYTUxHZW5lcmF0b3IKLSAgY2hhcmFjdGVycygpIGFuZCBpZ25vcmFibGVXaGl0ZXNwYWNlKCkgbWV0aG9kcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFNlYmFzdGlhbgotICBPcnRpeiBWYXNxdWV6LgotCi0tIElzc3VlICMxNzczMjogSWdub3JlIGRpc3R1dGlscy5jZmcgb3B0aW9ucyBwZXJ0YWluaW5nIHRvIGluc3RhbGwgcGF0aHMgaWYgYQotICB2aXJ0dWFsIGVudmlyb25tZW50IGlzIGFjdGl2ZS4KLQotLSBJc3N1ZSAjMTE1OTA1MTogQmFjayBvdXQgYSBmaXggZm9yIGhhbmRsaW5nIGNvcnJ1cHRlZCBnemlwIGZpbGVzIHRoYXQKLSAgYnJva2UgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCi0KLS0gSXNzdWUgIzE3OTE1OiBGaXggaW50ZXJvcGVyYWJpbGl0eSBvZiB4bWwuc2F4IHdpdGggZmlsZSBvYmplY3RzIHJldHVybmVkIGJ5Ci0gIGNvZGVjcy5vcGVuKCkuCi0KLS0gSXNzdWUgIzE2NjAxOiBSZXN0YXJ0aW5nIGl0ZXJhdGlvbiBvdmVyIHRhcmZpbGUgbm8gbW9yZSBjb250aW51ZXMgZnJvbSB3aGVyZQotICBpdCBsZWZ0IG9mZi4gIFBhdGNoIGJ5IE1pY2hhZWwgQmlydHdlbGwuCi0KLS0gSXNzdWUgIzE3Mjg5OiBUaGUgcmVhZGxpbmUgbW9kdWxlIG5vdyBwbGF5cyBuaWNlciB3aXRoIGV4dGVybmFsIG1vZHVsZXMKLSAgb3IgYXBwbGljYXRpb25zIGNoYW5naW5nIHRoZSBybF9jb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzIGdsb2JhbAotICB2YXJpYWJsZS4gIEluaXRpYWwgcGF0Y2ggYnkgQnJhZGxleSBGcm9laGxlLgotCi0tIElzc3VlICMxMjE4MTogc2VsZWN0IG1vZHVsZTogRml4IHN0cnVjdCBrZXZlbnQgZGVmaW5pdGlvbiBvbiBPcGVuQlNEIDY0LWJpdAotICBwbGF0Zm9ybXMuIFBhdGNoIGJ5IEZlZGVyaWNvIFNjaHdpbmR0LgotCi0tIElzc3VlICMxNDE3MzogQXZvaWQgY3Jhc2hpbmcgd2hlbiByZWFkaW5nIGEgc2lnbmFsIGhhbmRsZXIgZHVyaW5nCi0gIGludGVycHJldGVyIHNodXRkb3duLgotCi0tIElzc3VlICMxNjMxNjogbWltZXR5cGVzIG5vdyByZWNvZ25pemVzIHRoZSAueHogYW5kIC50eHogKC50YXIueHopIGV4dGVuc2lvbnMuCi0KLS0gSXNzdWUgIzE1OTAyOiBGaXggaW1wLmxvYWRfbW9kdWxlKCkgYWNjZXB0aW5nIE5vbmUgYXMgYSBmaWxlIHdoZW4gbG9hZGluZyBhbgotICBleHRlbnNpb24gbW9kdWxlLgotCi0tIElzc3VlICMxNzgwMjogRml4IGFuIFVuYm91bmRMb2NhbEVycm9yIGluIGh0bWwucGFyc2VyLiAgSW5pdGlhbCB0ZXN0cyBieQotICBUaG9tYXMgQmFybG93LgotCi0tIElzc3VlICMxNTUzNTogRml4IG5hbWVkdHVwbGUgcGlja2xlcyB3aGljaCB3ZXJlIHBpY2tpbmcgdXAgdGhlIE9yZGVyZWREaWN0Ci0gIGluc3RlYWQgb2YganVzdCB0aGUgdW5kZXJseWluZyB0dXBsZS4KLQotLSBJc3N1ZSAjMTcxOTI6IFJlc3RvcmUgdGhlIHBhdGNoIGZvciBJc3N1ZSAjMTE3Mjkgd2hpY2ggd2FzIG9tbWl0dGVkIGluCi0gIDMuMy4xIHdoZW4gdXBkYXRpbmcgdGhlIGJ1bmRsZWQgdmVyc2lvbiBvZiBsaWJmZmkgdXNlZCBieSBjdHlwZXMuICBVcGRhdGUKLSAgbWFueSBsaWJmZmkgZmlsZXMgdGhhdCB3ZXJlIG1pc3NlZCBpbiAzLjMuMSdzIHVwZGF0ZSB0byBsaWJmZmktMy4wLjEzLgotCi0tIElzc3VlICMxNzM1ODogTW9kdWxlcyBsb2FkZWQgYnkgaW1wLmxvYWRfc291cmNlKCkgYW5kIGxvYWRfY29tcGlsZWQoKSAoYW5kIGJ5Ci0gIGV4dGVudGlvbiBsb2FkX21vZHVsZSgpKSBub3cgaGF2ZSBhIGJldHRlciBjaGFuY2Ugb2Ygd29ya2luZyB3aGVuIHJlbG9hZGVkLgotCi0tIElzc3VlICMxNzM1MzogUGxpc3RsaWIgZW1pdHRlZCBlbXB0eSBkYXRhIHRhZ3Mgd2l0aCBkZWVwbHkgbmVzdGVkIGRhdGFzdHJ1Y3R1cmVzCi0KLS0gSXNzdWUgIzExNzE0OiBVc2UgJ3dpdGgnIHN0YXRlbWVudHMgdG8gYXNzdXJlIGEgU2VtYXBob3JlIHJlbGVhc2VzIGEKLSAgY29uZGl0aW9uIHZhcmlhYmxlLiAgT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIFJhY2hlbC4KLQotLSBJc3N1ZSAjMTc3OTU6IFJldmVydGVkIGJhY2t3YXJkcy1pbmNvbXBhdGlibGUgY2hhbmdlIGluIFN5c0xvZ0hhbmRsZXIgd2l0aAotICBVbml4IGRvbWFpbiBzb2NrZXRzLgotCi0tIElzc3VlICMxNzU1NTogRml4IEZvcmtBd2FyZVRocmVhZExvY2sgc28gdGhhdCBzaXplIG9mIGFmdGVyIGZvcmsKLSAgcmVnaXN0cnkgZG9lcyBub3QgZ3JvdyBleHBvbmVudGlhbGx5IHdpdGggZ2VuZXJhdGlvbiBvZiBwcm9jZXNzLgotCi0tIElzc3VlICMxNzcwNzogbXVsdGlwcm9jZXNzaW5nLlF1ZXVlJ3MgZ2V0KCkgbWV0aG9kIGRvZXMgbm90IGJsb2NrIGZvciBzaG9ydAotICB0aW1lb3V0cy4KLQotLSBJc3VzZSAjMTc3MjA6IEZpeCB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHBpY2tsZS5VbnBpY2tsZXIgdG8gY29ycmVjdGx5Ci0gIHByb2Nlc3MgdGhlIEFQUEVORFMgb3Bjb2RlIHdoZW4gaXQgaXMgdXNlZCBvbiBub24tbGlzdCBvYmplY3RzLgotCi0tIElzc3VlICMxNzAxMjogc2h1dGlsLndoaWNoKCkgbm8gbG9uZ2VyIGZhbGxiYWNrcyB0byB0aGUgUEFUSCBlbnZpcm9ubWVudAotICB2YXJpYWJsZSBpZiBlbXB0eSBwYXRoIGFyZ3VtZW50IGlzIHNwZWNpZmllZC4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE3NzEwOiBGaXggcGlja2xlIHJhaXNpbmcgYSBTeXN0ZW1FcnJvciBvbiBib2d1cyBpbnB1dC4KLQotLSBJc3N1ZSAjMTczNDE6IEluY2x1ZGUgdGhlIGludmFsaWQgbmFtZSBpbiB0aGUgZXJyb3IgbWVzc2FnZXMgZnJvbSByZSBhYm91dAotICBpbnZhbGlkIGdyb3VwIG5hbWVzLgotCi0tIElzc3VlICMxNzcwMjogb3MuZW52aXJvbiBub3cgcmFpc2VzIEtleUVycm9yIHdpdGggdGhlIG9yaWdpbmFsIGVudmlyb25tZW50Ci0gIHZhcmlhYmxlIG5hbWUgKHN0ciBvbiBVTklYKSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgZW5jb2RlZCBuYW1lIChieXRlcyBvbgotICBVTklYKS4KLQotLSBJc3N1ZSAjMTYxNjM6IE1ha2UgdGhlIGltcG9ydGxpYiBiYXNlZCB2ZXJzaW9uIG9mIHBrZ3V0aWwuaXRlcl9pbXBvcnRlcnMKLSAgd29yayBmb3Igc3VibW9kdWxlcy4gSW5pdGlhbCBwYXRjaCBieSBCZXJrZXIgUGVrc2FnLgotCi0tIElzc3VlICMxNjgwNDogRml4IGEgYnVnIGluIHRoZSAnc2l0ZScgbW9kdWxlIHRoYXQgY2F1c2VkIHJ1bm5pbmcKLSAgJ3B5dGhvbiAtUyAtbSBzaXRlJyB0byBpbmNvcnJlY3RseSB0aHJvdyBhbiBleGNlcHRpb24uCi0KLS0gSXNzdWUgIzE3MDE2OiBHZXQgcmlkIG9mIHBvc3NpYmxlIHBvaW50ZXIgd3JhcGFyb3VuZHMgYW5kIGludGVnZXIgb3ZlcmZsb3dzCi0gIGluIHRoZSByZSBtb2R1bGUuICBQYXRjaCBieSBOaWNrb2xhaSBaZWxkb3ZpY2guCi0KLS0gSXNzdWUgIzE2NjU4OiBhZGQgbWlzc2luZyByZXR1cm4gdG8gSFRUUENvbm5lY3Rpb24uc2VuZCgpCi0gIFBhdGNoIGJ5IEplZmYgS251cHAuCi0KLS0gSXNzdWUgIzE0OTcxOiB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSBubyBsb25nZXIgZ2V0cyBjb25mdXNlZCB3aGVuIGEgZnVuY3Rpb24KLSAgaGFzIGEgZGlmZmVyZW50IF9fbmFtZV9fIHRoYW4gaXRzIG5hbWUgaW4gdGhlIFRlc3RDYXNlIGNsYXNzIGRpY3Rpb25hcnkuCi0KLS0gSXNzdWUgIzE3Njc4OiBGaXggRGVwcmVjYXRpb25XYXJuaW5nIGluIHRoZSBodHRwL2Nvb2tpZWphci5weSBieSBjaGFuZ2luZyB0aGUKLSAgdXNhZ2Ugb2YgZ2V0X29yaWdpbl9yZXFfaG9zdCgpIHRvIG9yaWdpbl9yZXFfaG9zdC4KLQotLSBJc3N1ZSAjMTc2NjY6IEZpeCByZWFkaW5nIGd6aXAgZmlsZXMgd2l0aCBhbiBleHRyYSBmaWVsZC4KLQotLSBJc3N1ZSAjMTc1MDI6IFByb2Nlc3MgREVGQVVMVCB2YWx1ZXMgaW4gbW9jayBzaWRlX2VmZmVjdCB0aGF0IHJldHVybnMgaXRlcmF0b3IuCi0gIFBhdGNoIGJ5IE1pY2hhZWwgRm9vcmQuCi0KLS0gSXNzdWUgIzE3NTcyOiBBdm9pZCBjaGFpbmVkIGV4Y2VwdGlvbnMgd2hpbGUgcGFzc2luZyBiYWQgZGlyZWN0aXZlcyB0bwotICB0aW1lLnN0cnB0aW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KLQotLSBJc3N1ZSAjMTc0MzU6IHRocmVhZGluZy5UaW1lcidzIF9faW5pdF9fIG1ldGhvZCBubyBsb25nZXIgdXNlcyBtdXRhYmxlCi0gIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgYXJncyBhbmQga3dhcmdzIHBhcmFtZXRlcnMuCi0KLS0gSXNzdWUgIzE3NTI2OiBmaXggYW4gSW5kZXhFcnJvciByYWlzZWQgd2hpbGUgcGFzc2luZyBjb2RlIHdpdGhvdXQgZmlsZW5hbWUgdG8KLSAgaW5zcGVjdC5maW5kc291cmNlKCkuICBJbml0aWFsIHBhdGNoIGJ5IFR5bGVyIERveWxlLgotCi0tIElzc3VlICMxNjU1MDogVXBkYXRlIHRoZSBvcGNvZGUgZGVzY3JpcHRpb25zIG9mIHBpY2tsZXRvb2xzIHRvIHVzZSB1bnNpZ25lZAotICBpbnRlZ2VycyB3aGVyZSBhcHByb3ByaWF0ZS4gIEluaXRpYWwgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotSURMRQotLS0tLQotCi0tIElzc3VlICMxNzgzODogQWxsb3cgc3lzLnN0ZGluIHRvIGJlIHJlYXNzaWduZWQuCi0KLS0gSXNzdWUgIzEzNDk1OiBBdm9pZCBsb2FkaW5nIHRoZSBjb2xvciBkZWxlZ2F0b3IgdHdpY2UgaW4gSURMRS4KLQotLSBJc3N1ZSAjMTc3OTg6IEFsbG93IElETEUgdG8gZWRpdCBuZXcgZmlsZXMgd2hlbiBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lLgotCi0tIElzc3VlICMxNDczNTogVXBkYXRlIElETEUgZG9jcyB0byBvbWl0ICJDb250cm9sLXogb24gV2luZG93cyIuCi0KLS0gSXNzdWUgIzE3NTg1OiBGaXhlZCBJRExFIHJlZ3Jlc3Npb24uIE5vdyBjbG9zZXMgd2hlbiB1c2luZyBleGl0KCkgb3IgcXVpdCgpLgotCi0tIElzc3VlICMxNzY1NzogU2hvdyBmdWxsIFRrIHZlcnNpb24gaW4gSURMRSdzIGFib3V0IGRpYWxvZy4KLSAgUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCi0KLS0gSXNzdWUgIzE3NjEzOiBQcmV2ZW50IHRyYWNlYmFjayB3aGVuIHJlbW92aW5nIHN5bnRheCBjb2xvcml6ZXIgaW4gSURMRS4KLQotLSBJc3N1ZSAjMTIwNzU4OTogQmFja3dhcmRzLWNvbXBhdGliaWxpdHkgcGF0Y2ggZm9yIHJpZ2h0LWNsaWNrIG1lbnUgaW4gSURMRS4KLQotLSBJc3N1ZSAjMTY4ODc6IElETEUgbm93IGFjY2VwdHMgQ2FuY2VsIGluIHRhYmlmeS91bnRhYmlmeSBkaWFsb2cgYm94LgotCi0tIElzc3VlICMxNzYyNTogSW4gSURMRSwgY2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCi0KLS0gSXNzdWUgIzE0MjU0OiBJRExFIG5vdyBoYW5kbGVzIHJlYWRsaW5lIGNvcnJlY3RseSBhY3Jvc3Mgc2hlbGwgcmVzdGFydHMuCi0KLS0gSXNzdWUgIzE3NjE0OiBJRExFIG5vIGxvbmdlciByYWlzZXMgZXhjZXB0aW9uIHdoZW4gcXVpY2tseSBjbG9zaW5nIGEgZmlsZS4KLQotLSBJc3N1ZSAjNjY5ODogSURMRSBub3cgb3BlbnMganVzdCBhbiBlZGl0b3Igd2luZG93IHdoZW4gY29uZmlndXJlZCB0byBkbyBzby4KLQotLSBJc3N1ZSAjODkwMDogVXNpbmcga2V5Ym9hcmQgc2hvcnRjdXRzIGluIElETEUgdG8gb3BlbiBhIGZpbGUgbm8gbG9uZ2VyCi0gIHJhaXNlcyBhbiBleGNlcHRpb24uCi0KLS0gSXNzdWUgIzY2NDk6IEZpeGVkIG1pc3NpbmcgZXhpdCBzdGF0dXMgaW4gSURMRS4gUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCi0KLVRlc3RzCi0tLS0tLQorLSBJc3N1ZSAjMTc5OTI6IEFkZCB0aW1lb3V0cyB0byBhc3luY29yZSBhbmQgYXN5bmNoYXQgdGVzdHMgc28gdGhhdCB0aGV5IHdvbid0CisgIGFjY2lkZW50YWxseSBoYW5nLgogCiAtIElzc3VlICMxNzgzMzogRml4IHRlc3RfZ2RiIGZhaWx1cmVzIHNlZW4gb24gbWFjaGluZXMgd2hlcmUgZGVidWcgc3ltYm9scwogICBmb3IgZ2xpYmMgYXJlIGF2YWlsYWJsZSAoc2VlbiBvbiBQUEM2NCBMaW51eCkuCkBAIC0xMzg5LDYgKzM3MDQsOSBAQAogLSBJc3N1ZSAjNzg1NTogQWRkIHRlc3RzIGZvciBjdHlwZXMvd2lucmVnIGZvciBpc3N1ZXMgZm91bmQgaW4gSXJvblB5dGhvbi4KICAgSW5pdGlhbCBwYXRjaCBieSBEaW5vIFZpZWhsYW5kLgogCistIElzc3VlICMxMTA3ODogdGVzdF9fX2FsbF9fIG5vdyBjaGVja3MgZm9yIGR1cGxpY2F0ZXMgaW4gX19hbGxfXy4KKyAgSW5pdGlhbCBwYXRjaCBieSBSLiBEYXZpZCBNdXJyYXkuCisKIC0gSXNzdWUgIzE3NzEyOiBGaXggdGVzdF9nZGIgZmFpbHVyZXMgb24gVWJ1bnR1IDEzLjA0LgogCiAtIElzc3VlICMxNzgzNTogRml4IHRlc3RfaW8gd2hlbiB0aGUgZGVmYXVsdCBPUyBwaXBlIGJ1ZmZlciBzaXplIGlzIGxhcmdlcgpAQCAtMTQwMCw2ICszNzE4LDkgQEAKIC0gSXNzdWUgIzEyODIwOiBhZGQgdGVzdHMgZm9yIHRoZSB4bWwuZG9tLm1pbmljb21wYXQgbW9kdWxlLgogICBQYXRjaCBieSBKb2huIENoYW5kbGVyIGFuZCBQaGlsIENvbm5lbGwuCiAKKy0gSXNzdWUgIzE3NjkxOiB0ZXN0X3VuaXZuZXdsaW5lcyBub3cgd29ya3Mgd2l0aCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KKyAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCiAtIElzc3VlICMxNzc5MDogdGVzdF9zZXQgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIApAQCAtMTQxOCw3MTYgKzM3MzksNyBAQAogLSBJc3N1ZSAjMTc2OTI6IHRlc3Rfc3FsaXRlIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgogICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCiAKLS0gSXNzdWUgIzE3ODQzOiBSZW1vdmVkIGJ6MiB0ZXN0IGRhdGEgZmlsZSB0aGF0IHdhcyB0cmlnZ2VyaW5nIGZhbHNlLXBvc2l0aXZlCi0gIHZpcnVzIHdhcm5pbmdzIHdpdGggY2VydGFpbiBhbnRpdmlydXMgc29mdHdhcmUuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTU5NDA6IFNwZWNpZnkgZWZmZWN0IG9mIGxvY2FsZSBvbiB0aW1lIGZ1bmN0aW9ucy4KLQotLSBJc3N1ZSAjNjY5NjogYWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBQcm9maWxlIG9iamVjdHMsIGFuZCBpbXByb3ZlCi0gIHByb2ZpbGUvY1Byb2ZpbGUgZG9jcy4gIFBhdGNoIGJ5IFRvbSBQaW5ja25leS4KLQotLSBJc3N1ZSAjMTc5MTU6IEZpeCBpbnRlcm9wZXJhYmlsaXR5IG9mIHhtbC5zYXggd2l0aCBmaWxlIG9iamVjdHMgcmV0dXJuZWQgYnkKLSAgY29kZWNzLm9wZW4oKS4KLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzE3NTQ3OiBJbiBjb25maWd1cmUsIGV4cGxpY2l0bHkgcGFzcyAtV2Zvcm1hdCBmb3IgdGhlIGJlbmVmaXQgZm9yIEdDQwotICA0LjguCi0KLS0gSXNzdWUgIzE3OTYyOiBCdWlsZCB3aXRoIE9wZW5TU0wgMS4wLjFlIG9uIFdpbmRvd3MuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDctQXByLTIwMTMqCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxNzU1MDogRml4IHRoZSAtLWVuYWJsZS1wcm9maWxpbmcgY29uZmlndXJlIHN3aXRjaC4KLQotSURMRQotLS0tLS0tLQotCi0tIElzc3VlICMxNzYyNTogSW4gSURMRSwgY2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjEgcmVsZWFzZSBjYW5kaWRhdGUgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI0LU1hci0yMDEzKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTczMjg6IEZpeCBwb3NzaWJsZSByZWZsZWFrIGluIGRpY3Quc2V0ZGVmYXVsdC4KLQotLSBJc3N1ZSAjMTcyMjM6IEZpeCBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoKSBmb3Igc3RyaW5nIG9mIDEgY2hhcmFjdGVyIG91dHNpZGUKLSAgdGhlIHJhbmdlIFUrMDAwMC1VKzEwZmZmZi4KLQotLSBJc3N1ZSAjMTY5MjMzNTogTW92ZSBpbml0aWFsIGFyZ3MgYXNzaWdubWVudCB0bwotICBCYXNlRXhjZXB0aW9uLl9fbmV3X18gdG8gaGVscCBwaWNrbGluZyBvZiBuYWl2ZSBzdWJjbGFzc2VzLgotCi0tIElzc3VlICMxNzI3NTogQ29ycmVjdGVkIGNsYXNzIG5hbWUgaW4gaW5pdCBlcnJvciBtZXNzYWdlcyBvZiB0aGUgQyB2ZXJzaW9uIG9mCi0gIEJ1ZmZlcmVkV3JpdGVyIGFuZCBCdWZmZXJlZFJhbmRvbS4KLQotLSBJc3N1ZSAjNzk2MzogRml4ZWQgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHRoYXQgaXNzdWVkIHdoZW4gb2JqZWN0IGlzCi0gIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjNTMwODogUmFpc2UgVmFsdWVFcnJvciB3aGVuIG1hcnNoYWxsaW5nIHRvbyBsYXJnZSBvYmplY3QgKGEgc2VxdWVuY2UKLSAgd2l0aCBzaXplID49IDIqKjMxKSwgaW5zdGVhZCBvZiBwcm9kdWNpbmcgaWxsZWdhbCBtYXJzaGFsIGRhdGEuCi0KLS0gSXNzdWUgIzEyOTgzOiBCeXRlcyBsaXRlcmFscyB3aXRoIGludmFsaWQgXHggZXNjYXBlIG5vdyByYWlzZSBhIFN5bnRheEVycm9yCi0gIGFuZCBhIGZ1bGwgdHJhY2ViYWNrIGluY2x1ZGluZyBsaW5lIG51bWJlci4KLQotLSBJc3N1ZSAjMTcxNzM6IFJlbW92ZSB1c2VzIG9mIGxvY2FsZS1kZXBlbmRlbnQgQyBmdW5jdGlvbnMgKGlzYWxwaGEoKSBldGMuKQotICBpbiB0aGUgaW50ZXJwcmV0ZXIuCi0KLS0gSXNzdWUgIzE3MTM3OiBXaGVuIGFuIFVuaWNvZGUgc3RyaW5nIGlzIHJlc2l6ZWQsIHRoZSBpbnRlcm5hbCB3aWRlIGNoYXJhY3RlcgotICBzdHJpbmcgKHdzdHIpIGZvcm1hdCBpcyBub3cgY2xlYXJlZC4KLQotLSBJc3N1ZSAjMTcwNDM6IFRoZSB1bmljb2RlLWludGVybmFsIGRlY29kZXIgbm8gbG9uZ2VyIHJlYWQgcGFzdCB0aGUgZW5kIG9mCi0gIGlucHV0IGJ1ZmZlci4KLQotLSBJc3N1ZSAjMTcwOTg6IEFsbCBtb2R1bGVzIG5vdyBoYXZlIF9fbG9hZGVyX18gc2V0IGV2ZW4gaWYgdGhleSBwcmUtZXhpc3QgdGhlCi0gIGJvb3RzdHJhcHBpbmcgb2YgaW1wb3J0bGliLgotCi0tIElzc3VlICMxNjk3OTogRml4IGVycm9yIGhhbmRsaW5nIGJ1Z3MgaW4gdGhlIHVuaWNvZGUtZXNjYXBlLWRlY29kZSBkZWNvZGVyLgotCi0tIElzc3VlICMxMDE1NjogSW4gdGhlIGludGVycHJldGVyJ3MgaW5pdGlhbGl6YXRpb24gcGhhc2UsIHVuaWNvZGUgZ2xvYmFscwotICBhcmUgbm93IGluaXRpYWxpemVkIGR5bmFtaWNhbGx5IGFzIG5lZWRlZC4KLQotLSBJc3N1ZSAjMTY5ODA6IEZpeCBwcm9jZXNzaW5nIG9mIGVzY2FwZWQgbm9uLWFzY2lpIGJ5dGVzIGluIHRoZQotICB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KLQotLSBJc3N1ZSAjMTY5NzU6IEZpeCBlcnJvciBoYW5kbGluZyBidWcgaW4gdGhlIGVzY2FwZS1kZWNvZGUgYnl0ZXMgZGVjb2Rlci4KLQotLSBJc3N1ZSAjMTQ4NTA6IE5vdyBhIGNoYXJtYXAgZGVjb2RlciB0cmVhdHMgVStGRkZFIGFzICJ1bmRlZmluZWQgbWFwcGluZyIKLSAgaW4gYW55IG1hcHBpbmcsIG5vdCBvbmx5IGluIGEgc3RyaW5nLgotCi0tIElzc3VlICMxNjczMDogaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIG5vdyBubyBsb25nZXJzIHJhaXNlcyBhbgotICBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gcG9wdWxhdGUgaXRzIGNhY2hlIGFuZCBpdCBmaW5kcyBvdXQgdGhlIGRpcmVjdG9yeSBpcwotICB1bnJlYWRhYmxlIG9yIGhhcyB0dXJuZWQgaW50byBhIGZpbGUuIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkKLSAgRGF2aWQgUHJpdGNoYXJkLgotCi0tIElzc3VlICMxNjkwNjogRml4IGEgbG9naWMgZXJyb3IgdGhhdCBwcmV2ZW50ZWQgbW9zdCBzdGF0aWMgc3RyaW5ncyBmcm9tIGJlaW5nCi0gIGNsZWFyZWQuCi0KLS0gSXNzdWUgIzExNDYxOiBGaXggdGhlIGluY3JlbWVudGFsIFVURi0xNiBkZWNvZGVyLiBPcmlnaW5hbCBwYXRjaCBieQotICBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KLQotLSBJc3N1ZSAjMTY4NTY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIGNhbGxpbmcgcmVwcigpIG9uIGEgZGljdCB3aXRoCi0gIGEga2V5IHdob3NlIHJlcHIgcmFpc2UgYW4gZXhjZXB0aW9uLgotCi0tIElzc3VlICMxNjM2NzogRml4IEZpbGVJTy5yZWFkYWxsKCkgb24gV2luZG93cyBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gMiBHQi4KLQotLSBJc3N1ZSAjMTY0NTU6IE9uIEZyZWVCU0QgYW5kIFNvbGFyaXMsIGlmIHRoZSBsb2NhbGUgaXMgQywgdGhlCi0gIEFTQ0lJL3N1cnJvZ2F0ZWVzY2FwZSBjb2RlYyBpcyBub3cgdXNlZCwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nLCB0bwotICBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuIFRoaXMgY2hhbmdlIGZpeGVzIGluY29uc2lzdGVuY2llcyB3aXRoCi0gIG9zLmZzZW5jb2RlKCkgYW5kIG9zLmZzZGVjb2RlKCkgYmVjYXVzZSB0aGVzZSBvcGVyYXRpbmcgc3lzdGVtcyBhbm5vdW5jZXMgYW4KLSAgQVNDSUkgbG9jYWxlIGVuY29kaW5nLCB3aGVyZWFzIHRoZSBJU08tODg1OS0xIGVuY29kaW5nIGlzIHVzZWQgaW4gcHJhY3RpY2UuCi0KLS0gSXNzdWUgIzE2NzYxOiBDYWxsaW5nIGludCgpIHdpdGggYmFzZSBhcmd1bWVudCBvbmx5IG5vdyByYWlzZXMgVHlwZUVycm9yLgotCi0tIElzc3VlICMxNjc1OTogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUmVnMlB5Ci0gIHdoZW4gcmV0cmlldmluZyBhIFJFR19EV09SRCB2YWx1ZS4gVGhpcyBjb3JyZWN0cyBmdW5jdGlvbnMgbGlrZQotICB3aW5yZWcuUXVlcnlWYWx1ZUV4IHRoYXQgbWF5IGhhdmUgYmVlbiByZXR1cm5pbmcgdHJ1bmNhdGVkIHZhbHVlcy4KLQotLSBJc3N1ZSAjMTQ0MjA6IFN1cHBvcnQgdGhlIGZ1bGwgRFdPUkQgKHVuc2lnbmVkIGxvbmcpIHJhbmdlIGluIFB5MlJlZwotICB3aGVuIHBhc3NlZCBhIFJFR19EV09SRCB2YWx1ZS4gRml4ZXMgT3ZlcmZsb3dFcnJvciBpbiB3aW5yZWcuU2V0VmFsdWVFeC4KLQotLSBJc3N1ZSAjMTY1OTc6IEluIGJ1ZmZlcmVkIGFuZCB0ZXh0IElPLCBjYWxsIGNsb3NlKCkgb24gdGhlIHVuZGVybHlpbmcgc3RyZWFtCi0gIGlmIGludm9raW5nIGZsdXNoKCkgZmFpbHMuCi0KLS0gSXNzdWUgIzE2NzIyOiBJbiB0aGUgYnl0ZXMoKSBjb25zdHJ1Y3RvciwgdHJ5IHRvIGNhbGwgX19ieXRlc19fIG9uIHRoZQotICBhcmd1bWVudCBiZWZvcmUgX19pbmRleF9fLgotCi0tIElzc3VlICMxNjYwMjogV2hlbiBhIHdlYWtyZWYncyB0YXJnZXQgd2FzIHBhcnQgb2YgYSBsb25nIGRlYWxsb2NhdGlvbgotICBjaGFpbiwgdGhlIG9iamVjdCBjb3VsZCByZW1haW4gcmVhY2hhYmxlIHRocm91Z2ggaXRzIHdlYWtyZWYgZXZlbiB0aG91Z2gKLSAgaXRzIHJlZmNvdW50IGhhZCBkcm9wcGVkIHRvIHplcm8uCi0KLS0gSXNzdWUgIzE2NDE2OiBPbiBNYWMgT1MgWCwgb3BlcmF0aW5nIHN5c3RlbSBkYXRhIGFyZSBub3cgYWx3YXlzCi0gIGVuY29kZWQvZGVjb2RlZCB0by9mcm9tIFVURi04L3N1cnJvZ2F0ZWVzY2FwZSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nCi0gICh3aGljaCBtYXkgYmUgQVNDSUkgaWYgbm8gbG9jYWxlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCksIHRvIGF2b2lkCi0gIGluY29uc2lzdGVuY2llcyB3aXRoIG9zLmZzZW5jb2RlKCkgYW5kIG9zLmZzZGVjb2RlKCkgZnVuY3Rpb25zIHdoaWNoIGFyZQotICBhbHJlYWR5IHVzaW5nIFVURi04L3N1cnJvZ2F0ZWVzY2FwZS4KLQotLSBJc3N1ZSAjMTY1ODg6IFNpbGVuY2UgdW51c2VkLWJ1dC1zZXQgd2FybmluZ3MgaW4gUHl0aG9uL3RocmVhZF9wdGhyZWFkCi0KLS0gSXNzdWUgIzE2NTQ2OiBGaXg6IGFzdC5ZaWVsZEZyb20gYXJndW1lbnQgaXMgbm93IG1hbmRhdG9yeS4KLQotLSBJc3N1ZSAjMTY1MTQ6IEZpeCByZWdyZXNzaW9uIGNhdXNpbmcgYSB0cmFjZWJhY2sgd2hlbiBzeXMucGF0aFswXSBpcyBOb25lCi0gIChhY3R1YWxseSwgYW55IG5vbi1zdHJpbmcgb3Igbm9uLWJ5dGVzIHR5cGUpLgotCi0tIElzc3VlICMxNjMwNjogRml4IG11bHRpcGxlIGVycm9yIG1lc3NhZ2VzIHdoZW4gdW5rbm93biBjb21tYW5kIGxpbmUKLSAgcGFyYW1ldGVycyB3aGVyZSBwYXNzZWQgdG8gdGhlIGludGVycHJldGVyLiAgUGF0Y2ggYnkgSGlldSBOZ3V5ZW4uCi0KLS0gSXNzdWUgIzE2MjE1OiBGaXggcG90ZW50aWFsIGRvdWJsZSBtZW1vcnkgZnJlZSBpbiBzdHIucmVwbGFjZSgpLiAgUGF0Y2gKLSAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY0NTM6IEZpeCBlcXVhbGl0eSB0ZXN0aW5nIG9mIGRlYWQgd2Vha3JlZiBvYmplY3RzLgotCi0tIElzc3VlICM5NTM1OiBGaXggcGVuZGluZyBzaWduYWxzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ1dCBub3QgeWV0Ci0gIGhhbmRsZWQgYnkgUHl0aG9uIHRvIG5vdCBwZXJzaXN0IGFmdGVyIG9zLmZvcmsoKSBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KLQotLSBJc3N1ZSAjMTUwMDE6IGZpeCBzZWdmYXVsdCBvbiAiZGVsIHN5cy5tb2R1bGVzWydfX21haW5fXyddIi4gUGF0Y2ggYnkgVmljdG9yCi0gIFN0aW5uZXIuCi0KLS0gSXNzdWUgIzgyNzE6IHRoZSB1dGYtOCBkZWNvZGVyIG5vdyBvdXRwdXRzIHRoZSBjb3JyZWN0IG51bWJlciBvZiBVK0ZGRkQKLSAgY2hhcmFjdGVycyB3aGVuIHVzZWQgd2l0aCB0aGUgJ3JlcGxhY2UnIGVycm9yIGhhbmRsZXIgb24gaW52YWxpZCB1dGYtOAotICBzZXF1ZW5jZXMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLCB0ZXN0cyBieSBFemlvIE1lbG90dGkuCi0KLS0gSXNzdWUgIzU3NjU6IEFwcGx5IGEgaGFyZCByZWN1cnNpb24gbGltaXQgaW4gdGhlIGNvbXBpbGVyIGluc3RlYWQgb2YKLSAgYmxvd2luZyB0aGUgc3RhY2sgYW5kIHNlZ2ZhdWx0aW5nLiBJbml0aWFsIHBhdGNoIGJ5IEFuZHJlYSBHcmlmZmluaS4KLQotLSBJc3N1ZSAjMTY0MDI6IFdoZW4gc2xpY2luZyBhIHJhbmdlLCBmaXggc2hhZG93aW5nIG9mIGV4Y2VwdGlvbnMgZnJvbQotICBfX2luZGV4X18uCi0KLS0gSXNzdWUgIzE2MzM2OiBmaXggaW5wdXQgY2hlY2tpbmcgaW4gdGhlIHN1cnJvZ2F0ZXBhc3MgZXJyb3IgaGFuZGxlci4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjODQwMTogYXNzaWduaW5nIGFuIGludCB0byBhIGJ5dGVhcnJheSBzbGljZSAoZS5nLiBiWzM6NF0gPSA1KSBub3cKLSAgcmFpc2VzIGFuIGVycm9yLgotCi0tIEZpeCBzZWdmYXVsdHMgb24gc2V0dGluZyBfX3F1YWxuYW1lX18gb24gYnVpbHRpbiB0eXBlcyBhbmQgYXR0ZW1wdGluZyB0bwotICBkZWxldGUgaXQgb24gYW55IHR5cGUuCi0KLS0gSXNzdWUgIzE2MzQ1OiBGaXggYW4gaW5maW5pdGUgbG9vcCB3aGVuIGBgZnJvbWtleXNgYCBvbiBhIGRpY3Qgc3ViY2xhc3MKLSAgcmVjZWl2ZWQgYSBub25lbXB0eSBkaWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgotCi0tIElzc3VlICMxNjI3MTogRml4IHN0cmFuZ2UgYnVncyB0aGF0IHJlc3VsdGVkIGZyb20gX19xdWFsbmFtZV9fIGFwcGVhcmluZyBpbiBhCi0gIGNsYXNzJ3MgX19kaWN0X18gYW5kIG9uIHR5cGUuCi0KLS0gSXNzdWUgIzYwNzQ6IEVuc3VyZSBjYWNoZWQgYnl0ZWNvZGUgZmlsZXMgY2FuIGFsd2F5cyBiZSB1cGRhdGVkIGJ5IHRoZQotICB1c2VyIHRoYXQgY3JlYXRlZCB0aGVtLCBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlIGlzIHJlYWQtb25seS4KLQotLSBJc3N1ZSAjMTQ3ODM6IEltcHJvdmUgaW50KCkgZG9jc3RyaW5nIGFuZCBzd2l0Y2ggZG9jc3RyaW5ncyBmb3Igc3RyKCksCi0gIHJhbmdlKCksIGFuZCBzbGljZSgpIHRvIHVzZSBtdWx0aS1saW5lIHNpZ25hdHVyZXMuCi0KLS0gSXNzdWUgIzE2MTYwOiBTdWJjbGFzcyBzdXBwb3J0IG5vdyB3b3JrcyBmb3IgdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgotCi0tIElzc3VlICMxNTM3OTogRml4IHBhc3Npbmcgb2Ygbm9uLUJNUCBjaGFyYWN0ZXJzIGFzIGludGVnZXJzIGZvciB0aGUgY2hhcm1hcAotICBkZWNvZGVyIChhbHJlYWR5IHdvcmtpbmcgYXMgdW5pY29kZSBzdHJpbmdzKS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1MTQ0OiBGaXggcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGhhbmRsaW5nIHBvaW50ZXJzIGFzIGludGVnZXIKLSAgdmFsdWVzLCBieSB1c2luZyBgUHlfdWludHB0cl90YCBpbnN0ZWFkIG9mIGBzaXplX3RgLiAgUGF0Y2ggYnkgU2VyaGl5Ci0gIFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTU5NjU6IEV4cGxpY2l0bHkgY2FzdCBgQVRfRkRDV0RgIGFzIChpbnQpLiAgUmVxdWlyZWQgb24gU29sYXJpcyAxMAotICAod2hpY2ggZGVmaW5lcyBgQVRfRkRDV0RgIGFzIGBgMHhmZmQxOTU1M2BgKSwgaGFybWxlc3Mgb24gb3RoZXIgcGxhdGZvcm1zLgotCi0tIElzc3VlICMxNTgzOTogQ29udmVydCBTeXN0ZW1FcnJvcnMgaW4gYHN1cGVyKClgIHRvIFJ1bnRpbWVFcnJvcnMuCi0KLS0gSXNzdWUgIzE1ODQ2OiBGaXggU3lzdGVtRXJyb3Igd2hpY2ggaGFwcGVuZWQgd2hlbiB1c2luZyBgYXN0LnBhcnNlKClgIGluIGFuCi0gIGV4Y2VwdGlvbiBoYW5kbGVyIG9uIGNvZGUgd2l0aCBzeW50YXggZXJyb3JzLgotCi0tIElzc3VlICMxNTgwMTogTWFrZSBzdXJlIG1hcHBpbmdzIHBhc3NlZCB0byAnJScgZm9ybWF0dGluZyBhcmUgYWN0dWFsbHkKLSAgc3Vic2NyaXB0YWJsZS4KLQotLSBJc3N1ZSAjMTUxMTE6IF9faW1wb3J0X18gc2hvdWxkIGxldCBJbXBvcnRFcnJvciBwcm9wYWdhdGUgd2hlbiBhIG1vZHVsZSB0aGF0Ci0gIGlzIGltcG9ydGVkIGFzIGEgc2lkZS1lZmZlY3Qgb2YgdXNpbmcgZnJvbWxpc3QgdHJpZXMgdG8gaW1wb3J0IGEgbW9kdWxlCi0gIHRoYXQgY2Fubm90IGJlIGZvdW5kLgotCi1MaWJyYXJ5Ci0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3NTQwOiBBZGRlZCBzdHlsZSB0byBmb3JtYXR0ZXIgY29uZmlndXJhdGlvbiBieSBkaWN0LgotCi0tIElzc3VlICMxNzUzNjogQWRkIHRvIHdlYmJyb3dzZXIncyBicm93c2VyIGxpc3Q6IHd3dy1icm93c2VyLCB4LXd3dy1icm93c2VyLAotICBpY2V3ZWFzZWwsIGljZWFwZS4KLQotLSBJc3N1ZSAjMTc0ODg6IENoYW5nZSB0aGUgc3VicHJvY2Vzcy5Qb3BlbiBidWZzaXplIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlCi0gIGZyb20gdW5idWZmZXJlZCAoMCkgdG8gYnVmZmVyaW5nICgtMSkgdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIGV4aXN0aW5nIGNvZGUKLSAgZXhwZWN0cyBhbmQgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBpbiBQeXRob24gMiB0byBhdm9pZAotICBpbnRyb2R1Y2luZyBoYXJkIHRvIHRyYWNrIGRvd24gYnVncy4KLQotLSBJc3N1ZSAjMTc1MjE6IENvcnJlY3RlZCBub24tZW5hYmxpbmcgb2YgbG9nZ2VyIGZvbGxvd2luZyB0d28gY2FsbHMgdG8KLSAgZmlsZUNvbmZpZygpLgotCi0tIElzc3VlICMxNzUwODogQ29ycmVjdGVkIE1lbW9yeUhhbmRsZXIgY29uZmlndXJhdGlvbiBpbiBkaWN0Q29uZmlnKCkgd2hlcmUKLSAgdGhlIHRhcmdldCBoYW5kbGVyIHdhc24ndCBjb25maWd1cmVkIGZpcnN0LgotCi0tIElzc3VlICMxNzIwOTogY3Vyc2VzLndpbmRvdy5nZXRfd2NoKCkgbm93IGhhbmRsZXMgY29ycmVjdGx5IEtleWJvYXJkSW50ZXJydXB0Ci0gIChDVFJMK2MpLgotCi0tIElzc3VlICM1NzEzOiBzbXRwbGliIG5vdyBoYW5kbGVzIDQyMSAoY2xvc2luZyBjb25uZWN0aW9uKSBlcnJvciBjb2RlcyB3aGVuCi0gIHNlbmRpbmcgbWFpbCBieSBjbG9zaW5nIHRoZSBzb2NrZXQgYW5kIHJlcG9ydGluZyB0aGUgNDIxIGVycm9yIGNvZGUgdmlhIHRoZQotICBleGNlcHRpb24gYXBwcm9wcmlhdGUgdG8gdGhlIGNvbW1hbmQgdGhhdCByZWNlaXZlZCB0aGUgZXJyb3IgcmVzcG9uc2UuCi0KLS0gSXNzdWUgIzE3MTkyOiBVcGRhdGUgdGhlIGN0eXBlcyBtb2R1bGUncyBsaWJmZmkgdG8gdjMuMC4xMy4gIFRoaXMKLSAgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIHN0YWNrIG1pc2FsaWdubWVudCBpc3N1ZSBvbiB4ODYgYW5kIGlzc3VlcyBvbgotICBzb21lIG1vcmUgcmVjZW50IHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjODg2MjogRml4ZWQgY3Vyc2VzIGNsZWFudXAgd2hlbiBnZXRrZXkgaXMgaW50ZXJycHV0ZWQgYnkgYSBzaWduYWwuCi0KLS0gSXNzdWUgIzE3NDQzOiBpbWFwbGliLklNQVA0X3N0cmVhbSB3YXMgdXNpbmcgdGhlIGRlZmF1bHQgdW5idWZmZXJlZCBJTwotICBpbiBzdWJwcm9jZXNzLCBidXQgdGhlIGltYXAgY29kZSBhc3N1bWVzIGJ1ZmZlcmVkIElPLiAgSW4gUHl0aG9uMiB0aGlzCi0gIHdvcmtlZCBieSBhY2NpZGVudC4gIElNQVA0X3N0cmVhbSBub3cgZXhwbGljaXRseSB1c2VzIGJ1ZmZlcmVkIElPLgotCi0tIElzc3VlICMxNzQ3NjogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHVuZG9jdW1lbnRlZCBweWRvYwotICAnYWxsbWV0aG9kcyc7IGl0IHdhcyBtaXNzaW5nIHVuYm91bmQgbWV0aG9kcyBvbiB0aGUgY2xhc3MuCi0KLS0gSXNzdWUgIzE2ODgwOiBEbyBub3QgYXNzdW1lIF9pbXAubG9hZF9keW5hbWljKCkgaXMgZGVmaW5lZCBpbiB0aGUgaW1wIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTYzODk6IEZpeGVkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24gMy4xIGluIHRoZQotICBjYWNoaW5nIG9mIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCi0KLS0gSXNzdWUgIzE3NDMxOiBGaXggbWlzc2luZyBpbXBvcnQgb2YgQnl0ZXNGZWVkUGFyc2VyIGluIGVtYWlsLnBhcnNlci4KLQotLSBJc3N1ZSAjMTI4NTA4NjogR2V0IHJpZCBvZiB0aGUgcmVmY291bnRpbmcgaGFjayBhbmQgc3BlZWQgdXAKLSAgdXJsbGliLnBhcnNlLnVucXVvdGUoKSBhbmQgdXJsbGliLnBhcnNlLnVucXVvdGVfdG9fYnl0ZXMoKS4KLQotLSBJc3N1ZSAjMTczNjg6IEZpeCBhbiBvZmYtYnktb25lIGVycm9yIGluIHRoZSBQeXRob24gSlNPTiBkZWNvZGVyIHRoYXQgY2F1c2VkCi0gIGEgZmFpbHVyZSB3aGlsZSBkZWNvZGluZyBlbXB0eSBvYmplY3QgbGl0ZXJhbHMgd2hlbiBvYmplY3RfcGFpcnNfaG9vayB3YXMKLSAgc3BlY2lmaWVkLgotCi0tIElzc3VlICMxNDY0NTogVGhlIGVtYWlsIGdlbmVyYXRvciBjbGFzc2VzIG5vdyBwcm9kdWNlIG91dHB1dCB1c2luZyB0aGUKLSAgc3BlY2lmaWVkIGxpbmVzZXAgdGhyb3VnaG91dC4gIFByZXZpb3VzbHkgaWYgdGhlIHByb2xvZywgZXBpbG9nLCBvcgotICBib2R5IHdlcmUgc3RvcmVkIHdpdGggYSBkaWZmZXJlbnQgbGluZXNlcCwgdGhhdCBsaW5lc2VwIHdhcyB1c2VkLiAgVGhpcwotICBmaXggY29ycmVjdHMgYW4gUkZDIG5vbi1jb21wbGlhbmNlIGlzc3VlIHdpdGggc210cGxpYi5zZW5kX21lc3NhZ2UuCi0KLS0gSXNzdWUgIzE3Mjc4OiBGaXggYSBjcmFzaCBpbiBoZWFwcS5oZWFwcHVzaCgpIGFuZCBoZWFwcS5oZWFwcG9wKCkgd2hlbgotICB0aGUgbGlzdCBpcyBiZWluZyByZXNpemVkIGNvbmN1cnJlbnRseS4KLQotLSBJc3N1ZSAjMTY5NjI6IFVzZSBnZXRkZW50czY0IGluc3RlYWQgb2YgdGhlIG9ic29sZXRlIGdldGRlbnRzIHN5c2NhbGwKLSAgaW4gdGhlIHN1YnByb2Nlc3MgbW9kdWxlIG9uIExpbnV4LgotCi0tIElzc3VlICMxNzAxODogTWFrZSBQcm9jZXNzLmpvaW4oKSByZXRyeSBpZiBvcy53YWl0cGlkKCkgZmFpbHMgd2l0aCBFSU5UUi4KLQotLSBJc3N1ZSAjMTcyMjM6IGFycmF5IG1vZHVsZTogRml4IGEgY3Jhc2hlciB3aGVuIGNvbnZlcnRpbmcgYW4gYXJyYXkgY29udGFpbmluZwotICBpbnZhbGlkIGNoYXJhY3RlcnMgKG91dHNpZGUgcmFuZ2UgW1UrMDAwMDsgVSsxMGZmZmZdKSB0byBVbmljb2RlOgotICByZXByKGFycmF5KSwgc3RyKGFycmF5KSBhbmQgYXJyYXkudG91bmljb2RlKCkuIFBhdGNoIHdyaXR0ZW4gYnkgTWFudWVsIEphY29iLgotCi0tIElzc3VlICMxNDcyMDogc3FsaXRlMzogQ29udmVydCBkYXRldGltZSBtaWNyb3NlY29uZHMgY29ycmVjdGx5LgotICBQYXRjaCBieSBMb3dlIFRoaWRlcm1hbi4KLQotLSBJc3N1ZSAjMTcyMjU6IEpTT04gZGVjb2RlciBub3cgY291bnRzIGNvbHVtbnMgaW4gdGhlIGZpcnN0IGxpbmUgc3RhcnRpbmcKLSAgd2l0aCAxLCBhcyBpbiBvdGhlciBsaW5lcy4KLQotLSBJc3N1ZSAjMTM3MDA6IEZpeCBieXRlL3N0cmluZyBoYW5kbGluZyBpbiBpbWFwbGliIGF1dGhlbnRpY2F0aW9uIHdoZW4gYW4KLSAgYXV0aG9iamVjdCBpcyBzcGVjaWZpZWQuCi0KLS0gSXNzdWUgIzEzMTUzOiBUa2ludGVyIGZ1bmN0aW9ucyBub3cgcmFpc2UgVGNsRXJyb3IgaW5zdGVhZCBvZiBWYWx1ZUVycm9yIHdoZW4KLSAgYSBzdHJpbmcgYXJndW1lbnQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIuCi0KLS0gSXNzdWUgIzk2Njk6IFByb3RlY3QgcmUgYWdhaW5zdCBpbmZpbml0ZSBsb29wcyBvbiB6ZXJvLXdpZHRoIG1hdGNoaW5nIGluCi0gIG5vbi1ncmVlZHkgcmVwZWF0LiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgotCi0tIElzc3VlICMxMzE2OTogVGhlIG1heGltYWwgcmVwZXRpdGlvbiBudW1iZXIgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24gaGFzIGJlZW4KLSAgaW5jcmVhc2VkIGZyb20gNjU1MzQgdG8gMjE0NzQ4MzY0NyAob24gMzItYml0IHBsYXRmb3JtKSBvciA0Mjk0OTY3Mjk0IChvbgotICA2NC1iaXQpLgotCi0tIElzc3VlICMxNzE0MzogRml4IGEgbWlzc2luZyBpbXBvcnQgaW4gdGhlIHRyYWNlIG1vZHVsZS4gIEluaXRpYWwgcGF0Y2ggYnkKLSAgQmVya2VyIFBla3NhZy4KLQotLSBJc3N1ZSAjMTY3NDM6IEZpeCBtbWFwIG92ZXJmbG93IGNoZWNrIG9uIDMyIGJpdCBXaW5kb3dzLgotCi0tIElzc3VlICMxNjgwMDogdGVtcGZpbGUuZ2V0dGVtcGRpcigpIG5vIGxvbmdlciBsZWZ0IHRlbXBvcmFyeSBmaWxlcyB3aGVuCi0gIHRoZSBkaXNrIGlzIGZ1bGwuICBPcmlnaW5hbCBwYXRjaCBieSBBbWlyIFN6ZWtlbHkuCi0KLS0gSXNzdWUgIzE2NTY0OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdGhlIG9wZXJhdGlvbiBvZgotICBlbWFpbC5lbmNvZGVycy5lbmNvZGVfN29yOGJpdCB3aGVuIHVzZWQgd2l0aCBiaW5hcnkgZGF0YS4KLQotLSBJc3N1ZSAjMTcwNTI6IHVuaXR0ZXN0IGRpc2NvdmVyeSBzaG91bGQgdXNlIHNlbGYudGVzdExvYWRlci4KLQotLSBJc3N1ZSAjNDU5MTogVWlkIGFuZCBnaWQgdmFsdWVzIGxhcmdlciB0aGFuIDIqKjMxIGFyZSBzdXBwb3J0ZWQgbm93LgotCi0tIElzc3VlICMxNzE0MTogcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSgpIG5vIG1vcmUgaGFuZ3MgZm9yIGxhcmdlIGthcHBhcy4KLQotLSBJc3N1ZSAjMTcxNDk6IEZpeCByYW5kb20udm9ubWlzZXN2YXJpYXRlIHRvIGFsd2F5cyByZXR1cm4gcmVzdWx0cyBpbgotICBbMCwgMiptYXRoLnBpXS4KLQotLSBJc3N1ZSAjMTQ3MDU0ODogWE1MR2VuZXJhdG9yIG5vdyB3b3JrcyB3aXRoIGJpbmFyeSBvdXRwdXQgc3RyZWFtcy4KLQotLSBJc3N1ZSAjNjk3NTogb3MucGF0aC5yZWFscGF0aCgpIG5vdyBjb3JyZWN0bHkgcmVzb2x2ZXMgbXVsdGlwbGUgbmVzdGVkCi0gIHN5bWxpbmtzIG9uIFBPU0lYIHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCi0gIGVtYWlsLmVuY29kZXJzLmVuY29kZV9ub29wIHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgotCi0tIElzc3VlICMxMDM1NTogVGhlIG1vZGUsIG5hbWUsIGVuY29kaW5nIGFuZCBuZXdsaW5lcyBwcm9wZXJ0aWVzIG5vdyB3b3JrIG9uCi0gIFNwb29sZWRUZW1wb3JhcnlGaWxlIG9iamVjdHMgZXZlbiB3aGVuIHRoZXkgaGF2ZSBub3QgeWV0IHJvbGxlZCBvdmVyLgotICBPYnNvbGV0ZSBtZXRob2QgeHJlYWRsaW5lICh3aGljaCBoYXMgbmV2ZXIgd29ya2VkIGluIFB5dGhvbiAzKSBoYXMgYmVlbgotICByZW1vdmVkLgotCi0tIElzc3VlICMxNjY4NjogRml4ZWQgYSBsb3Qgb2YgYnVncyBpbiBhdWRpb29wIG1vZHVsZS4gIEZpeGVkIGNyYXNoZXMgaW4KLSAgYXZncHAoKSwgbWF4cHAoKSBhbmQgcmF0ZWN2KCkuICBGaXhlZCBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGFkZCgpLCBiaWFzKCksCi0gIGFuZCByYXRlY3YoKS4gIHJldmVyc2UoKSwgbGluMmxpbigpIGFuZCByYXRlY3YoKSBubyBtb3JlIGxvc2UgcHJlY2lzaW9uIGZvcgotICAzMi1iaXQgc2FtcGxlcy4gIG1heCgpIGFuZCBybXMoKSBubyBtb3JlIHJldHVybnMgYSBuZWdhdGl2ZSByZXN1bHQgYW5kCi0gIHZhcmlvdXMgb3RoZXIgZnVuY3Rpb25zIG5vdyB3b3JrIGNvcnJlY3RseSB3aXRoIDMyLWJpdCBzYW1wbGUgLTB4ODAwMDAwMDAuCi0KLS0gSXNzdWUgIzE3MDczOiBGaXggc29tZSBpbnRlZ2VyIG92ZXJmbG93cyBpbiBzcWxpdGUzIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTY3MjM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIG5vIGxvbmdlciBtYXJrZWQgY2xvc2VkIHdoZW4gdGhlIGNvbm5lY3Rpb24KLSAgaXMgYXV0b21hdGljYWxseSBjbG9zZWQuCi0KLS0gSXNzdWUgIzE2OTQ4OiBGaXggcXVvdGVkIHByaW50YWJsZSBib2R5IGVuY29kaW5nIGZvciBub24tbGF0aW4xIGNoYXJhY3RlcgotICBzZXRzIGluIHRoZSBlbWFpbCBwYWNrYWdlLgotCi0tIElzc3VlICMxNjgxMTogRml4IGZvbGRpbmcgb2YgaGVhZGVycyB3aXRoIG5vIHZhbHVlIGluIHRoZSBwcm92aXNpb25hbCBlbWFpbAotICBwb2xpY2llcy4KLQotLSBJc3N1ZSAjMTcxMzI6IFVwZGF0ZSBzeW1ib2wgZm9yICJ5aWVsZCBmcm9tIiBncmFtbWFyIGNoYW5nZXMuCi0KLS0gSXNzdWUgIzE3MDc2OiBNYWtlIGNvcHlpbmcgb2YgeGF0dHJzIG1vcmUgcGVybWlzc2l2ZSBvZiBtaXNzaW5nIEZTIHN1cHBvcnQuCi0gIFBhdGNoIGJ5IFRob21hcyBXb3V0ZXJzLgotCi0tIElzc3VlICMxNzA4OTogRXhwYXQgcGFyc2VyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBzdHJpbmcgaW5wdXQgbm90IG9ubHkgd2hlbgotICBhbiBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgVVRGLTggb3IgVVMtQVNDSUkuICBJdCBub3cgYWNjZXB0cyBieXRlcyBhbmQKLSAgc3RyaW5ncyBsYXJnZXIgdGhhbiAyIEdpQi4KLQotLSBJc3N1ZSAjNjA4MzogRml4IG11bHRpcGxlIHNlZ21lbnRhdGlvbiBmYXVsdHMgb2NjdXJlZCB3aGVuIFB5QXJnX1BhcnNlVHVwbGUKLSAgcGFyc2VzIG5lc3RlZCBtdXRhdGluZyBzZXF1ZW5jZS4KLQotLSBJc3N1ZSAjNTI4OTogRml4IGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSBvbiBTb2xhcmlzLgotCi0tIElzc3VlICMxNzEwNjogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IGluIGlvLlRleHRJT1dyYXBwZXIgd2hlbiBhbiB1bmRlcmx5aW5nCi0gIHN0cmVhbSBvciBhIGRlY29kZXIgcHJvZHVjZXMgZGF0YSBvZiBhbiB1bmV4cGVjdGVkIHR5cGUgKGkuZS4gd2hlbgotICBpby5UZXh0SU9XcmFwcGVyIGluaXRpYWxpemVkIHdpdGggdGV4dCBzdHJlYW0gb3IgdXNlIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjKS4KLQotLSBJc3N1ZSAjMTU2MzM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIGlzIG5vdyBtYXJrIGNsb3NlZCB3aGVuIHRoZSBzZXJ2ZXIKLSAgc2VuZHMgbGVzcyB0aGFuIHRoZSBhZHZlcnRpc2VkIENvbnRlbnQtTGVuZ3RoLgotCi0tIElzc3VlICMxMjI2ODogVGhlIGlvIG1vZHVsZSBmaWxlIG9iamVjdCB3cml0ZSBtZXRob2RzIG5vIGxvbmdlciBhYm9ydCBlYXJseQotICB3aGVuIG9uZSBvZiBpdHMgd3JpdGUgc3lzdGVtIGNhbGxzIGlzIGludGVycnVwdGVkIChFSU5UUikuCi0KLS0gSXNzdWUgIzY5NzI6IFRoZSB6aXBmaWxlIG1vZHVsZSBubyBsb25nZXIgb3ZlcndyaXRlcyBmaWxlcyBvdXRzaWRlIG9mCi0gIGl0cyBkZXN0aW5hdGlvbiBwYXRoIHdoZW4gZXh0cmFjdGluZyBtYWxpY2lvdXMgemlwIGZpbGVzLgotCi0tIElzc3VlICM0ODQ0OiBaaXBGaWxlIG5vdyByYWlzZXMgQmFkWmlwRmlsZSB3aGVuIG9wZW5zIGEgWklQIGZpbGUgd2l0aCBhbgotICBpbmNvbXBsZXRlICJFbmQgb2YgQ2VudHJhbCBEaXJlY3RvcnkiIHJlY29yZC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEd1aWxoZXJtZQotICBQb2xvIGFuZCBBbGFuIE1jSW50eXJlLgotCi0tIElzc3VlICMxNzA3MTogU2lnbmF0dXJlLmJpbmQoKSBub3cgd29ya3Mgd2hlbiBvbmUgb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzCi0gIGlzIG5hbWVkIGBgc2VsZmBgLgotCi0tIElzc3VlICMxMjAwNDogRml4IGFuIGludGVybmFsIGVycm9yIGluIFB5WmlwRmlsZSB3aGVuIHdyaXRpbmcgYW4gaW52YWxpZAotICBQeXRob24gZmlsZS4gIFBhdGNoIGJ5IEJlbiBNb3JnYW4uCi0KLS0gSXNzdWUgIzE2MDIxMzM6IG9uIE1hYyBPUyBYIGEgc2hhcmVkIGxpYnJhcnkgYnVpbGQgKGBgLS1lbmFibGUtc2hhcmVkYGApCi0gIG5vdyBmaWxscyB0aGUgYGBvcy5lbnZpcm9uYGAgdmFyaWFibGUgY29ycmVjdGx5LgotCi0tIElzc3VlICMxNTUwNTogYHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyYCBubyBsb25nZXIgYXNzdW1lcyBTSUdJTlQgaGFuZGxlciBpcwotICBzZXQgdG8gYSBjYWxsYWJsZSBvYmplY3QuCi0KLS0gSXNzdWUgIzEzNDU0OiBGaXggYSBjcmFzaCB3aGVuIGRlbGV0aW5nIGFuIGl0ZXJhdG9yIGNyZWF0ZWQgYnkgaXRlcnRvb2xzLnRlZSgpCi0gIGlmIGFsbCBvdGhlciBpdGVyYXRvcnMgd2VyZSB2ZXJ5IGFkdmFuY2VkIGJlZm9yZS4KLQotLSBJc3N1ZSAjMTI0MTE6IEZpeCB0byBjZ2kucGFyc2VfbXVsdGlwYXJ0IHRvIGNvcnJlY3RseSB1c2UgYnl0ZXMgYm91bmRhcmllcwotICBhbmQgYnl0ZXMgZGF0YS4gUGF0Y2ggYnkgSm9uYXMgV2FnbmVyLgotCi0tIElzc3VlICMxNjk1Nzogc2h1dGlsLndoaWNoKCkgbm8gbG9uZ2VyIHNlYXJjaGVzIGEgYmFyZSBmaWxlIG5hbWUgaW4gdGhlCi0gIGN1cnJlbnQgZGlyZWN0b3J5IG9uIFVuaXggYW5kIG5vIGxvbmdlciBzZWFyY2hlcyBhIHJlbGF0aXZlIGZpbGUgcGF0aCB3aXRoCi0gIGEgZGlyZWN0b3J5IHBhcnQgaW4gUEFUSCBkaXJlY3Rvcmllcy4gIFBhdGNoIGJ5IFRob21hcyBLbHV5dmVyLgotCi0tIElzc3VlICMxNjk5Mzogc2h1dGlsLndoaWNoKCkgbm93IHByZXNlcnZlcyB0aGUgY2FzZSBvZiB0aGUgcGF0aCBhbmQgZXh0ZW5zaW9uCi0gIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE2OTkyOiBPbiBXaW5kb3dzIGluIHNpZ25hbC5zZXRfd2FrZXVwX2ZkLCB2YWxpZGF0ZSB0aGUgZmlsZQotICBkZXNjcmlwdG9yIGFyZ3VtZW50LgotCi0tIElzc3VlICMxNjQyMjogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgUHl0aG9uIHZlcnNpb24sIHRoZSBDIHZlcnNpb24gb2YKLSAgZGVjaW1hbCBub3cgdXNlcyBzdHJpbmdzIGluc3RlYWQgb2YgaW50ZWdlcnMgZm9yIHJvdW5kaW5nIG1vZGUgY29uc3RhbnRzLgotCi0tIElzc3VlICMxNTg2MTogdGtpbnRlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggbGlzdHMgYW5kIHR1cGxlcyBjb250YWluaW5nCi0gIHN0cmluZ3Mgd2l0aCB3aGl0ZXNwYWNlcywgYmFja3NsYXNoZXMgb3IgdW5iYWxhbmNlZCBicmFjZXMuCi0KLS0gSXNzdWUgIzEwNTI3OiBVc2UgcG9sbCgpIGluc3RlYWQgb2Ygc2VsZWN0KCkgZm9yIG11bHRpcHJvY2Vzc2luZyBwaXBlcy4KLQotLSBJc3N1ZSAjOTcyMDogemlwZmlsZSBub3cgd3JpdGVzIGNvcnJlY3QgbG9jYWwgaGVhZGVycyBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4KLSAgNCBHaUIuCi0KLS0gSXNzdWUgIzE2OTU1OiBGaXggdGhlIHBvbGwoKSBtZXRob2QgZm9yIG11bHRpcHJvY2Vzc2luZydzIHNvY2tldAotICBjb25uZWN0aW9ucyBvbiBXaW5kb3dzLgotCi0tIFNTTENvbnRleHQubG9hZF9kaF9wYXJhbXMoKSBub3cgcHJvcGVybHkgY2xvc2VzIHRoZSBpbnB1dCBmaWxlLgotCi0tIElzc3VlICMxNjkwMDogSXNzdWUgYSBSZXNvdXJjZVdhcm5pbmcgd2hlbiBhbiBzc2wgc29ja2V0IGlzIGxlZnQgdW5jbG9zZWQuCi0KLS0gSXNzdWUgIzEzODk5OiBcQSwgXFosIGFuZCBcQiBub3cgY29ycmVjdGx5IG1hdGNoIHRoZSBBLCBaLCBhbmQgQiBsaXRlcmFscwotICB3aGVuIHVzZWQgaW5zaWRlIGNoYXJhY3RlciBjbGFzc2VzIChlLmcuICdbXEFdJykuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCi0KLS0gSXNzdWUgIzE1NTQ1OiBGaXggcmVncmVzc2lvbiBpbiBzcWxpdGUzJ3MgaXRlcmR1bXAgbWV0aG9kIHdoZXJlIGl0IHdhcwotICBmYWlsaW5nIGlmIHRoZSBjb25uZWN0aW9uIHVzZWQgYSByb3cgZmFjdG9yeSAoc3VjaCBhcyBzcWxpdGUzLlJvdykgdGhhdAotICBwcm9kdWNlZCB1bnNvcnRhYmxlIG9iamVjdHMuIChSZWdyZXNzaW9uIHdhcyBpbnRyb2R1Y2VkIGJ5IGZpeCBmb3IgOTc1MCkuCi0KLS0gSXNzdWUgIzE1OTcyOiBGaXggZXJyb3IgbWVzc2FnZXMgd2hlbiBvcyBmdW5jdGlvbnMgZXhwZWN0aW5nIGEgZmlsZSBuYW1lIG9yCi0gIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIHRoZSBpbmNvcnJlY3QgdHlwZS4KLQotLSBJc3N1ZSAjMTY4Mjg6IEZpeCBlcnJvciBpbmNvcnJlY3RseSByYWlzZWQgYnkgYnoyLmNvbXByZXNzKGInJykgYW5kCi0gIGJ6Mi5CWjJDb21wcmVzc29yLmNvbXByZXNzKGInJykuIEluaXRpYWwgcGF0Y2ggYnkgTWFydGluIFBhY2ttYW4uCi0KLS0gSXNzdWUgIzE2NTQxOiB0a19zZXRQYWxldHRlKCkgbm93IHdvcmtzIHdpdGgga2V5d29yZCBhcmd1bWVudHMuCi0KLS0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBwYXJzZXIucG9waXRlbSgpYCBubyBsb25nZXIgcmFpc2VzIFZhbHVlRXJyb3IuCi0gIFRoaXMgbWFrZXMgYHBhcnNlci5jbGVhbigpYCB3b3JrIGNvcnJlY3RseS4KLQotLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYGBwYXJzZXJbJ3NlY3Rpb24nXSA9IHt9YGAgbm93IHByZXNlcnZlcwotICBzZWN0aW9uIG9yZGVyIHdpdGhpbiB0aGUgcGFyc2VyLiBUaGlzIG1ha2VzIGBwYXJzZXIudXBkYXRlKClgIHByZXNlcnZlIHNlY3Rpb24KLSAgb3JkZXIgYXMgd2VsbC4KLQotLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYGBwYXJzZXJbJ0RFRkFVTFQnXSA9IHt9YGAgbm93IGNvcnJlY3RseQotICBjbGVhcnMgcHJldmlvdXMgdmFsdWVzIHN0b3JlZCBpbiB0aGUgZGVmYXVsdCBzZWN0aW9uLiBTYW1lIGdvZXMgZm9yCi0gIGBgcGFyc2VyLnVwZGF0ZSh7J0RFRkFVTFQnOiB7fX0pYGAuCi0KLS0gSXNzdWUgIzk1ODY6IFJlZGVmaW5lIFNFTV9GQUlMRUQgb24gTWFjT1NYIHRvIGtlZXAgY29tcGlsZXIgaGFwcHkuCi0KLS0gSXNzdWUgIzEwNTI3OiBtYWtlIG11bHRpcHJvY2Vzc2luZyB1c2UgcG9sbCgpIGluc3RlYWQgb2Ygc2VsZWN0KCkgaWYgYXZhaWxhYmxlLgotCi0tIElzc3VlICMxNjY4ODogTm93IHJlZ2V4ZXMgY29udGFpbmVkIGJhY2tyZWZlcmVuY2VzIGNvcnJlY3RseSB3b3JrIHdpdGgKLSAgbm9uLUFTQ0lJIHN0cmluZ3MuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCi0KLS0gSXNzdWUgIzE2NDg1OiBOb3cgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIGlmIGZpbGUgaGVhZGVyIHBhdGNoaW5nIGZhaWxlZAotICBvbiBjbG9zaW5nIGFuIGFpZmMgZmlsZS4KLQotLSBJc3N1ZSAjMTYxNjU6IHNjaGVkLnNjaGVkdWxlci5ydW4oKSBubyBsb25nZXIgYmxvY2tzIGEgc2NoZWR1bGVyIGZvciBvdGhlcgotICB0aHJlYWRzLgotCi0tIElzc3VlICMxNjY0MTogRGVmYXVsdCB2YWx1ZXMgb2Ygc2NoZWQuc2NoZWR1bGVyLmVudGVyKCkgYXJlIG5vIGxvbmdlcgotICBtb2RpZmlhYmxlLgotCi0tIElzc3VlICMxNjYxODogTWFrZSBnbG9iLmdsb2IgbWF0Y2ggY29uc2lzdGVudGx5IGFjcm9zcyBzdHJpbmdzIGFuZCBieXRlcwotICByZWdhcmRpbmcgbGVhZGluZyBkb3RzLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY3MTM6IFBhcnNpbmcgb2YgJ3RlbCcgdXJscyB1c2luZyB1cmxwYXJzZSBzZXBhcmF0ZXMgcGFyYW1zIGZyb20KLSAgcGF0aC4KLQotLSBJc3N1ZSAjMTY0NDM6IEFkZCBkb2NzdHJpbmdzIHRvIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBvYmplY3RzLgotICBQYXRjaCBieSBBbnRvbiBLYXN5YW5vdi4KLQotLSBJc3N1ZSAjMTU3MDE6IEZpeCBIVFRQRXJyb3IgaW5mbyBtZXRob2QgY2FsbCB0byByZXR1cm4gdGhlIGhlYWRlcnMgaW5mb3JtYXRpb24uCi0KLS0gSXNzdWUgIzE2NzUyOiBBZGQgYSBtaXNzaW5nIGltcG9ydCB0byBtb2R1bGVmaW5kZXIuIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCi0KLS0gSXNzdWUgIzE2NjQ2OiBmdHBsaWIuRlRQLm1ha2Vwb3J0KCkgbWlnaHQgbG9zZSBzb2NrZXQgZXJyb3IgZGV0YWlscy4KLSAgKHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EpCi0KLS0gSXNzdWUgIzE2NjI2OiBGaXggaW5maW5pdGUgcmVjdXJzaW9uIGluIGdsb2IuZ2xvYigpIG9uIFdpbmRvd3Mgd2hlbiB0aGUKLSAgcGF0dGVybiBjb250YWlucyBhIHdpbGRjYXJkIGluIHRoZSBkcml2ZSBvciBVTkMgcGF0aC4gIFBhdGNoIGJ5IFNlcmhpeQotICBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1NzgzOiBFeGNlcHQgZm9yIHRoZSBudW1iZXIgbWV0aG9kcywgdGhlIEMgdmVyc2lvbiBvZiBkZWNpbWFsIG5vdwotICBzdXBwb3J0cyBhbGwgTm9uZSBkZWZhdWx0IHZhbHVlcyBwcmVzZW50IGluIGRlY2ltYWwucHkuIFRoZXNlIHZhbHVlcyB3ZXJlCi0gIGxhcmdlbHkgdW5kb2N1bWVudGVkLgotCi0tIElzc3VlICMxNjI5ODogSW4gSFRUUFJlc3BvbnNlLnJlYWQoKSwgY2xvc2UgdGhlIHNvY2tldCB3aGVuIHRoZXJlIGlzIG5vCi0gIENvbnRlbnQtTGVuZ3RoIGFuZCB0aGUgaW5jb21pbmcgc3RyZWFtIGlzIGZpbmlzaGVkLiAgUGF0Y2ggYnkgRXJhbgotICBSdW5kc3RlaW4uCi0KLS0gSXNzdWUgIzE1ODcyOiBGaXggMy4zIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSB0aGUgbmV3IGZkLWJhc2VkIHNodXRpbC5ybXRyZWUKLSAgdGhhdCBjYXVzZWQgaXQgdG8gbm90IGlnbm9yZSBjZXJ0YWluIGVycm9ycyB3aGVuIGlnbm9yZV9lcnJvcnMgd2FzIHNldC4KLSAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYSBhbmQgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYyNDg6IERpc2FibGUgY29kZSBleGVjdXRpb24gZnJvbSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGJ5Ci0gIHRraW50ZXIgd2hlbiB0aGUgLUUgZmxhZyBpcyBwYXNzZWQgdG8gUHl0aG9uLiAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgotCi0tIElzc3VlICMxNjYyODogRml4IGEgbWVtb3J5IGxlYWsgaW4gY3R5cGVzLnJlc2l6ZSgpLgotCi0tIElzc3VlICMxMzYxNDogRml4IHNldHVwLnB5IHJlZ2lzdGVyIGZhaWx1cmUgd2l0aCBpbnZhbGlkIHJzdCBpbiBkZXNjcmlwdGlvbi4KLSAgUGF0Y2ggYnkgSnVsaWVuIENvdXJ0ZWF1IGFuZCBQaWVycmUgUGF1bCBMZWZlYnZyZS4KLQotLSBJc3N1ZSAjMTM1MTI6IENyZWF0ZSB+Ly5weXBpcmMgc2VjdXJlbHkgKENWRS0yMDExLTQ5NDQpLiAgSW5pdGlhbCBwYXRjaCBieQotICBQaGlsaXAgSmVudmV5LCB0ZXN0ZWQgYnkgTWFnZWlhIGFuZCBEZWJpYW4uCi0KLS0gSXNzdWUgIzc3MTk6IE1ha2UgZGlzdHV0aWxzIGlnbm9yZSBgYC5uZnMqYGAgZmlsZXMgaW5zdGVhZCBvZiBjaG9raW5nIGxhdGVyCi0gIG9uLiAgSW5pdGlhbCBwYXRjaCBieSBTaWxlbnRHaG9zdCBhbmQgSmVmZiBSYW1uYW5pLgotCi0tIElzc3VlICMxMzEyMDogQWxsb3cgdG8gY2FsbCBwZGIuc2V0X3RyYWNlKCkgZnJvbSB0aHJlYWQuCi0gIFBhdGNoIGJ5IElseWEgU2FuZGxlci4KLQotLSBJc3N1ZSAjMTY1ODU6IE1ha2UgQ0pLIGVuY29kZXJzIHN1cHBvcnQgZXJyb3IgaGFuZGxlcnMgdGhhdCByZXR1cm4gYnl0ZXMgcGVyCi0gIFBFUCAzODMuCi0KLS0gSXNzdWUgIzEwMTgyOiBUaGUgcmUgbW9kdWxlIGRvZXNuJ3QgdHJ1bmNhdGUgaW5kaWNlcyB0byAzMiBiaXRzIGFueW1vcmUuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2NTczOiBJbiAydG8zLCB0cmVhdCBlbnVtZXJhdGUoKSBsaWtlIGEgY29uc3VtaW5nIGNhbGwsIHNvIHN1cGVyZmx1b3VzCi0gIGxpc3QoKSBjYWxscyBhcmVuJ3QgYWRkZWQgdG8gZmlsdGVyKCksIG1hcCgpLCBhbmQgemlwKCkgd2hpY2ggYXJlIGRpcmVjdGx5Ci0gIHBhc3NlZCBlbnVtZXJhdGUoKS4KLQotLSBJc3N1ZSAjMTI4NDg6IFRoZSBwdXJlIFB5dGhvbiBwaWNrbGUgaW1wbGVtZW50YXRpb24gbm93IHRyZWF0cyBvYmplY3QKLSAgbGVuZ3RocyBhcyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlcnMsIGxpa2UgdGhlIEMgaW1wbGVtZW50YXRpb24gZG9lcy4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY0MDg6IEZpeCBmaWxlIGRlc2NyaXB0b3JzIG5vdCBiZWluZyBjbG9zZWQgaW4gZXJyb3IgY29uZGl0aW9ucwotICBpbiB0aGUgemlwZmlsZSBtb2R1bGUuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjQ4MTogbXVsdGlwcm9jZXNzaW5nIG5vIGxvbmdlciBsZWFrcyBwcm9jZXNzIGhhbmRsZXMgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTYxNDA6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgZG91YmxlIGNsb3NlcyBpdHMgY2hpbGQKLSAgc3VicHJvY2Vzcy5QSVBFIHBhcmVudCBmaWxlIGRlc2NyaXB0b3JzIG9uIGNoaWxkIGVycm9yIHByaW9yIHRvIGV4ZWMoKS4KLQotLSBSZW1vdmUgYSBiYXJlIHByaW50IHRvIHN0ZG91dCBmcm9tIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSB0aGF0IGNvdWxkIGhhdmUKLSAgaGFwcGVuZWQgaWYgdGhlIGNoaWxkIHByb2Nlc3Mgd3JvdGUgZ2FyYmFnZSB0byBpdHMgcHJlLWV4ZWMgZXJyb3IgcGlwZS4KLQotLSBJc3N1ZSAjMTYzMjc6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgbGVha3MgZmlsZSBkZXNjcmlwdG9ycwotICB1c2VkIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyIHBpcGVzIHRvIHRoZSBjaGlsZCB3aGVuIGZvcmsoKSBmYWlscy4KLQotLSBJc3N1ZSAjMTQzOTY6IEhhbmRsZSB0aGUgb2RkIHJhcmUgY2FzZSBvZiB3YWl0cGlkIHJldHVybmluZyAwIHdoZW4gbm90Ci0gIGV4cGVjdGVkIGluIHN1YnByb2Nlc3MuUG9wZW4ud2FpdCgpLgotCi0tIElzc3VlICMxNjQxMTogRml4IGEgYnVnIHdoZXJlIHpsaWIuZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbWlnaHQgdHJ5IHRvIGFjY2VzcwotICBwcmV2aW91c2x5LWZyZWVkIG1lbW9yeS4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYzNTc6IGZpeCBjYWxsaW5nIGFjY2VwdCgpIG9uIGEgU1NMU29ja2V0IGNyZWF0ZWQgdGhyb3VnaAotICBTU0xDb250ZXh0LndyYXBfc29ja2V0KCkuICBPcmlnaW5hbCBwYXRjaCBieSBKZWZmIE1jTmVpbC4KLQotLSBJc3N1ZSAjMTY0MDk6IFRoZSByZXBvcnRob29rIGNhbGxiYWNrIG1hZGUgYnkgdGhlIGxlZ2FjeQotICB1cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZSBBUEkgbm93IHByb3Blcmx5IHN1cHBsaWVzIGEgY29uc3RhbnQgbm9uLXplcm8KLSAgYmxvY2tfc2l6ZSBhcyBpdCBkaWQgaW4gUHl0aG9uIDMuMiBhbmQgMi43LiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZgotICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIucmV0cmlldmUuCi0KLS0gSXNzdWUgIzE2NDMxOiBVc2UgdGhlIHR5cGUgaW5mb3JtYXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYSBEZWNpbWFsIHN1YnR5cGUKLSAgZnJvbSBhIERlY2ltYWwgYXJndW1lbnQuCi0KLS0gSXNzdWUgIzE2MzUwOiB6bGliLmRlY29tcHJlc3NvYmooKS5kZWNvbXByZXNzKCkgbm93IGFjY3VtdWxhdGVzIGRhdGEgZnJvbQotICBzdWNjZXNzaXZlIGNhbGxzIGFmdGVyIEVPRiBpbiB1bnVzZWRfZGF0YSwgaW5zdGVhZCBvZiBvbmx5IHNhdmluZyB0aGUgYXJndW1lbnQKLSAgdG8gdGhlIGxhc3QgY2FsbC4gZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbm93IGNvcnJlY3RseSBzZXRzIHVudXNlZF9kYXRhIGFuZAotICB1bmNvbnN1bWVkX3RhaWwuIEEgYnVnIGluIHRoZSBoYW5kbGluZyBvZiBNZW1vcnlFcnJvciB3aGVuIHNldHRpbmcgdGhlCi0gIHVuY29uc3VtZWRfdGFpbCBhdHRyaWJ1dGUgaGFzIGFsc28gYmVlbiBmaXhlZC4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTI3NTk6IHNyZV9wYXJzZSBub3cgcmFpc2VzIGEgcHJvcGVyIGVycm9yIHdoZW4gdGhlIG5hbWUgb2YgdGhlIGdyb3VwCi0gIGlzIG1pc3NpbmcuICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MTUyOiBmaXggdG9rZW5pemUgdG8gaWdub3JlIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgY29kZSB3aGVuCi0gIG5vIG5ld2xpbmUgaXMgZm91bmQuICBQYXRjaCBieSBOZWQgQmF0Y2hlbGRlci4KLQotLSBJc3N1ZSAjMTYyMzA6IEZpeCBhIGNyYXNoIGluIHNlbGVjdC5zZWxlY3QoKSB3aGVuIG9uZSB0aGUgbGlzdHMgY2hhbmdlcwotICBzaXplIHdoaWxlIGl0ZXJhdGVkIG9uLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYyMjg6IEZpeCBhIGNyYXNoIGluIHRoZSBqc29uIG1vZHVsZSB3aGVyZSBhIGxpc3QgY2hhbmdlcyBzaXplCi0gIHdoaWxlIGl0IGlzIGJlaW5nIGVuY29kZWQuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNDg5NzogRW5oYW5jZSBlcnJvciBtZXNzYWdlcyBvZiBzdHJ1Y3QucGFjayBhbmQKLSAgc3RydWN0LnBhY2tfaW50by4gUGF0Y2ggYnkgTWF0dGkgTcOka2kuCi0KLS0gSXNzdWUgIzEyODkwOiBjZ2l0YiBubyBsb25nZXIgcHJpbnRzIHNwdXJpb3VzIDxwPiB0YWdzIGluIHRleHQKLSAgbW9kZSB3aGVuIHRoZSBsb2dkaXIgb3B0aW9uIGlzIHNwZWNpZmllZC4KLQotLSBJc3N1ZSAjMTYzMDc6IEZpeCBtdWx0aXByb2Nlc3NpbmcuUG9vbC5tYXBfYXN5bmMgbm90IGNhbGxpbmcgaXRzIGNhbGxiYWNrcy4KLSAgUGF0Y2ggYnkgSmFubmUgS2FyaWxhLgotCi0tIElzc3VlICMxNjI1MDogRml4IFVSTEVycm9yIGludm9jYXRpb24gd2l0aCBwcm9wZXIgYXJncy4KLQotLSBJc3N1ZSAjMTYxMTY6IEZpeCBpbmNsdWRlIGFuZCBsaWJyYXJ5IHBhdGhzIHRvIGJlIGNvcnJlY3Qgd2hlbiBidWlsZGluZyBDCi0gIGV4dGVuc2lvbnMgaW4gdmVudnMuCi0KLS0gSXNzdWUgIzE2MjQ1OiBGaXggdGhlIHZhbHVlIG9mIGEgZmV3IGVudGl0aWVzIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCi0KLS0gSXNzdWUgIzE0Mzk4OiBGaXggc2l6ZSB0cnVuY2F0aW9uIGFuZCBvdmVyZmxvdyBidWdzIGluIHRoZSBiejIgbW9kdWxlLgotCi0tIElzc3VlICMxNjIyMDogd3NnaXJlZiBub3cgYWx3YXlzIGNhbGxzIGNsb3NlKCkgb24gYW4gaXRlcmFibGUgcmVzcG9uc2UuCi0gIFBhdGNoIGJ5IEJyZW50IFR1YmJzLgotCi0tIElzc3VlICMxNjI3MDogdXJsbGliIG1heSBoYW5nIHdoZW4gdXNlZCBmb3IgcmV0cmlldmluZyBmaWxlcyB2aWEgRlRQIGJ5IHVzaW5nCi0gIGEgY29udGV4dCBtYW5hZ2VyLiAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sYScuCi0KLS0gSXNzdWUgIzE2NDYxOiBXYXZlIGxpYnJhcnkgc2hvdWxkIGJlIGFibGUgdG8gZGVhbCB3aXRoIDRHQiB3YXYgZmlsZXMsCi0gIGFuZCBzYW1wbGUgcmF0ZSBvZiA0NDEwMCBIei4KLQotLSBJc3N1ZSAjMTYxNzY6IFByb3Blcmx5IGlkZW50aWZ5IFdpbmRvd3MgOCB2aWEgcGxhdGZvcm0ucGxhdGZvcm0oKQotCi0tIElzc3VlICMxNjExNDogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBwcm92aWRlcyBhIG1pc2xlYWRpbmcgZXJyb3IKLSAgbWVzc2FnZSBzdGF0aW5nIHRoYXQgYXJnc1swXSBkaWQgbm90IGV4aXN0IHdoZW4gZWl0aGVyIHRoZSBjd2Qgb3IgZXhlY3V0YWJsZQotICBrZXl3b3JkIGFyZ3VtZW50cyBzcGVjaWZpZWQgYSBwYXRoIHRoYXQgZGlkIG5vdCBleGlzdC4KLQotLSBJc3N1ZSAjMTYxNjk6IEZpeCBjdHlwZXMuV2luRXJyb3IoKSdzIGNvbmZ1c2lvbiBiZXR3ZWVuIGVycm5vIGFuZCB3aW5lcnJvci4KLQotLSBJc3N1ZSAjMTYwNzY6IE1hZGUgX2VsZW1lbnR0cmVlLkVsZW1lbnQgcGlja2xlYWJsZSBpbiBhIHdheSB0aGF0IGlzIGNvbXBhdGlibGUKLSAgd2l0aCB0aGUgUHl0aG9uIEVsZW1lbnQuIFBpY2tsaW5nL3VucGlja2xpbmcgb2YgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQKLSAgd29ya3MgYWdhaW4gLSB0aGlzIHdhcyBhIHRlbXBvcmFyeSByZWdyZXNzaW9uIGZyb20gMy4yIHdoZXJlIHRoZSBieS1kZWZhdWx0Ci0gIGltcG9ydGVkIF9lbGVtZW50dHJlZSBoYWQgbm8gcGlja2xpbmcgY2FwYWJpbGl0eS4KLQotLSBJc3N1ZSAjMTYwODk6IEFsbG93IEVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyIHRvIHdvcmsgYWdhaW4gd2l0aCBhIG5vbi1FbGVtZW50Ci0gIGVsZW1lbnRfZmFjdG9yeSAoZml4ZXMgYSByZWdyZXNzaW9uIGluIFNpbXBsZVRBTCkuCi0KLS0gSXNzdWUgIzE2OTEzOiBGaXggRWxlbWVudC5pdGVydGV4dCgpJ3MgaGFuZGxpbmcgb2YgdGV4dCB3aXRoIFhNTCBlbnRpdGllcy4sCi0KLS0gSXNzdWUgIzE2MDM0OiBGaXggcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgaW4gdGhlIG5ldyBgYnoyLkJaMkZpbGVgCi0gIGltcGxlbWVudGF0aW9uLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjExMjogcGxhdGZvcm0uYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGNvcnJlY3RseSBlc2NhcGUgYXJndW1lbnQgdG8KLSAgL3Vzci9iaW4vZmlsZS4gIFBhdGNoIGJ5IERhdmlkIEJlbmphbWluLgotCi0tIElzc3VlICMxNTc1NjogYHN1YnByb2Nlc3MucG9sbCgpYCBub3cgcHJvcGVybHkgaGFuZGxlcyBgZXJybm8uRUNISUxEYCB0bwotICByZXR1cm4gYSByZXR1cm5jb2RlIG9mIDAgd2hlbiB0aGUgY2hpbGQgaGFzIGFscmVhZHkgZXhpdGVkIG9yIGNhbm5vdCBiZSB3YWl0ZWQKLSAgb24uCi0KLS0gSXNzdWUgIzE1MzIzOiBJbXByb3ZlIGZhaWx1cmUgbWVzc2FnZSBvZiBgTW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpYC4KLQotLSBJc3N1ZSAjMTYwNjQ6IGBgdW5pdHRlc3QgLW1gYCBjbGFpbXMgZXhlY3V0YWJsZSBpcyAicHl0aG9uIiwgbm90ICJweXRob24zIi4KLQotLSBJc3N1ZSAjMTIzNzY6IFBhc3Mgb24gcGFyYW1ldGVycyBpbiBgVGV4dFRlc3RSZXN1bHQuX19pbml0X18oKWAgc3VwZXIgY2FsbC4KLQotLSBJc3N1ZSAjMTUyMjI6IEluc2VydCBibGFuayBsaW5lIGFmdGVyIGVhY2ggbWVzc2FnZSBpbiBtYm94IG1haWxib3hlcy4KLQotLSBJc3N1ZSAjMTYwMTM6IEZpeCBgY3N2LlJlYWRlcmAgcGFyc2luZyBpc3N1ZSB3aXRoIGVuZGluZyBxdW90ZSBjaGFyYWN0ZXJzLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTQyMTogRml4IGFuIE92ZXJmbG93RXJyb3IgaW4gYENhbGVuZGFyLml0ZXJtb250aGRhdGVzKClgIGFmdGVyCi0gIGBkYXRldGltZS5NQVhZRUFSYC4gIFBhdGNoIGJ5IEPDqWRyaWMgS3JpZXIuCi0KLS0gSXNzdWUgIzE1OTcwOiBgeG1sLmV0cmVlLkVsZW1lbnRUcmVlYCBub3cgc2VyaWFsaXplcyBjb3JyZWN0bHkgdGhlIGVtcHR5IEhUTUwKLSAgZWxlbWVudHMgJ21ldGEnIGFuZCAncGFyYW0nLgotCi0tIElzc3VlICMxNTg0MjogVGhlIGBTb2NrZXRJTy57cmVhZGFibGUsd3JpdGFibGUsc2Vla2FibGV9YCBtZXRob2RzIG5vdyByYWlzZQotICBWYWx1ZUVycm9yIHdoZW4gdGhlIGZpbGUtbGlrZSBvYmplY3QgaXMgY2xvc2VkLiAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYS4KLQotLSBJc3N1ZSAjMTU4NzY6IEZpeCBhIHJlZmxlYWsgaW4gdGhlIGBjdXJzZXNgIG1vZHVsZTogd2luZG93LmVuY29kaW5nLgotCi0tIElzc3VlICMxNTg4MTogRml4IGBhdGV4aXRgIGhvb2sgaW4gYG11bHRpcHJvY2Vzc2luZ2AuICBPcmlnaW5hbCBwYXRjaCBieSBDaHJpcwotICBNY0Rvbm91Z2guCi0KLS0gSXNzdWUgIzE1ODQxOiBUaGUgcmVhZGFibGUoKSwgd3JpdGFibGUoKSBhbmQgc2Vla2FibGUoKSBtZXRob2RzIG9mCi0gIGBpby5CeXRlc0lPYCBhbmQgYGlvLlN0cmluZ0lPYCBvYmplY3RzIG5vdyByYWlzZSBWYWx1ZUVycm9yIHdoZW4gdGhlIG9iamVjdAotICBoYXMgYmVlbiBjbG9zZWQuICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhLgotCi0tIElzc3VlICMxNTQ0NzogVXNlIGBzdWJwcm9jZXNzLkRFVk5VTExgIGluIHdlYmJyb3dzZXIsIGluc3RlYWQgb2Ygb3BlbmluZwotICBgb3MuZGV2bnVsbGAgZXhwbGljaXRseSBhbmQgbGVhdmluZyBpdCBvcGVuLgotCi0tIElzc3VlICMxNTUwOTogYHdlYmJyb3dzZXIuVW5peEJyb3dzZXJgIG5vIGxvbmdlciBwYXNzZXMgZW1wdHkgYXJndW1lbnRzIHRvCi0gIFBvcGVuIHdoZW4gYGAlYWN0aW9uYGAgc3Vic3RpdHV0aW9ucyBwcm9kdWNlIGVtcHR5IHN0cmluZ3MuCi0KLS0gSXNzdWUgIzEyNzc2LCBpc3N1ZSAjMTE4Mzk6IENhbGwgYGFyZ3BhcnNlYCB0eXBlIGZ1bmN0aW9uIChzcGVjaWZpZWQgYnkKLSAgYWRkX2FyZ3VtZW50KSBvbmx5IG9uY2UuICBCZWZvcmUsIHRoZSB0eXBlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgdHdpY2UgaW4gdGhlCi0gIGNhc2Ugd2hlcmUgdGhlIGRlZmF1bHQgd2FzIHNwZWNpZmllZCBhbmQgdGhlIGFyZ3VtZW50IHdhcyBnaXZlbiBhcyB3ZWxsLiAgVGhpcwotICB3YXMgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBmb3IgdGhlIEZpbGVUeXBlIHR5cGUsIGFzIGEgZGVmYXVsdCBmaWxlIHdvdWxkCi0gIGFsd2F5cyBiZSBvcGVuZWQsIGV2ZW4gaWYgYSBmaWxlIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KLQotLSBJc3N1ZSAjMTU5MDY6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYGFyZ3BhcnNlYCBjYXVzZWQgYnkgdGhlIHByZWNlZGluZyBjaGFuZ2UsCi0gIHdoZW4gYGBhY3Rpb249J2FwcGVuZCdgYCwgYGB0eXBlPSdzdHInYGAgYW5kIGBgZGVmYXVsdD1bXWBgLgotCi1JRExFCi0tLS0tCi0KLS0gSXNzdWUgIzE3MTE0OiBJRExFIG5vdyB1c2VzIG5vbi1zdHJpY3QgY29uZmlnIHBhcnNlci4KLQotLSBJc3N1ZSAjOTI5MDogSW4gSURMRSB0aGUgc3lzLnN0ZCogc3RyZWFtcyBub3cgaW1wbGVtZW50IGlvLlRleHRJT0Jhc2UKLSAgaW50ZXJmYWNlIGFuZCBzdXBwb3J0IGFsbCBtYW5kYXRvcnkgbWV0aG9kcyBhbmQgcHJvcGVydGllcy4KLQotLSBJc3N1ZSAjMTY4Mjk6IElETEUgcHJpbnRpbmcgbm8gbG9uZ2VyIGZhaWxzIGlmIHRoZXJlIGFyZSBzcGFjZXMgb3Igb3RoZXIKLSAgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIHBhdGguCi0KLS0gSXNzdWUgIzE2NDkxOiBJRExFIG5vdyBwcmludHMgY2hhaW5lZCBleGNlcHRpb24gdHJhY2ViYWNrcy4KLQotLSBJc3N1ZSAjMTY4MTk6IElETEUgbWV0aG9kIGNvbXBsZXRpb24gbm93IGNvcnJlY3RseSB3b3JrcyBmb3IgYnl0ZXMgbGl0ZXJhbHMuCi0KLS0gSXNzdWUgIzE2NTA0OiBJRExFIG5vdyBjYXRjaGVzIFN5bnRheEVycm9ycyByYWlzZWQgYnkgdG9rZW5pemVyLiBQYXRjaCBieQotICBSb2dlciBTZXJ3eS4KLQotLSBJc3N1ZSAjMTY1MTE6IFVzZSBkZWZhdWx0IElETEUgd2lkdGggYW5kIGhlaWdodCBpZiBjb25maWcgcGFyYW0gaXMgbm90IHZhbGlkLgotICBQYXRjaCBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxMjA3NTg5OiBBZGQgQ3V0L0NvcHkvUGFzdGUgaXRlbXMgdG8gSURMRSByaWdodCBjbGljayBDb250ZXh0IE1lbnUKLSAgUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCi0KLVRlc3RzCi0tLS0tLQorLSBJc3N1ZSAjMTE5OTU6IHRlc3RfcHlkb2MgZG9lc24ndCBpbXBvcnQgYWxsIHN5cy5wYXRoIG1vZHVsZXMgYW55bW9yZS4KIAogLSBJc3N1ZSAjMTc0NDg6IHRlc3Rfc2F4IG5vdyBza2lwcyBpZiB0aGVyZSBhcmUgbm8geG1sIHBhcnNlcnMgYXZhaWxhYmxlCiAgIGluc3RlYWQgb2YgcmFpc2luZyBhbiBJbXBvcnRFcnJvci4KQEAgLTIxNDYsOCArMzc1OCwxNSBAQAogCiAtIElzc3VlICMxMzg5ODogdGVzdF9zc2wgbm8gbG9uZ2VyIHByaW50cyBhIHNwdXJpb3VzIHN0YWNrIHRyYWNlIG9uIFVidW50dS4KIAorLSBJc3N1ZSAjMTcyODM6IFNoYXJlIGNvZGUgYmV0d2VlbiBgX19tYWluX18ucHlgIGFuZCBgcmVncnRlc3QucHlgIGluCisgIGBMaWIvdGVzdGAuCisKIC0gSXNzdWUgIzE3MjQ5OiBjb252ZXJ0IGEgdGVzdCBpbiB0ZXN0X2NhcGkgdG8gdXNlIHVuaXR0ZXN0IGFuZCByZWFwIHRocmVhZHMuCiAKKy0gSXNzdWUgIzE3MTA3OiBUZXN0IGNsaWVudC1zaWRlIFNOSSBzdXBwb3J0IGluIHVybGxpYi5yZXF1ZXN0IHRoYW5rcyB0bworICB0aGUgbmV3IHNlcnZlci1zaWRlIFNOSSBzdXBwb3J0IGluIHRoZSBzc2wgbW9kdWxlLiAgSW5pdGlhbCBwYXRjaCBieQorICBEYW5pZWwgQmxhY2suCisKIC0gSXNzdWUgIzE3MDQxOiBGaXggdGVzdGluZyB3aGVuIFB5dGhvbiBpcyBjb25maWd1cmVkIHdpdGggdGhlCiAgIC0td2l0aG91dC1kb2Mtc3RyaW5ncy4KIApAQCAtMjIxNCw2ICszODMzLDExIEBACiAKIC0gSXNzdWUgIzE2NzQ4OiB0ZXN0X2hlYXBxIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgogCistIElzc3VlICMxMDY0NjogVGVzdHMgcmVhcnJhbmdlZCBmb3Igb3Muc2FtZWZpbGUvc2FtZXN0YXQgdG8gY2hlY2sgZm9yIG5vdAorICBqdXN0IHN5bWxpbmtzIGJ1dCBhbHNvIGhhcmQgbGlua3MuCisKKy0gSXNzdWUgIzE1MzAyOiBTd2l0Y2ggcmVncnRlc3QgZnJvbSB1c2luZyBnZXRvcHQgdG8gdXNpbmcgYXJncGFyc2UuCisKIC0gSXNzdWUgIzE1MzI0OiBGaXggcmVncnRlc3QgcGFyc2luZyBvZiAtLWZyb21maWxlLCAtLW1hdGNoLCBhbmQgLS1yYW5kb21pemUKICAgb3B0aW9ucy4KIApAQCAtMjIyMyw2ICszODQ3LDkgQEAKIC0gSXNzdWUgIzE2NjY0OiBBZGQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgZ2xvYidzIGJlaGF2aW91ciBjb25jZXJuaW5nIGVudHJpZXMKICAgc3RhcnRpbmcgd2l0aCBhICIuIi4gIFBhdGNoIGJ5IFNlYmFzdGlhbiBLcmVmdC4KIAorLSBJc3N1ZSAjMTMzOTA6IFRoZSBgYC1SYGAgb3B0aW9uIHRvIHJlZ3J0ZXN0IG5vdyBhbHNvIGNoZWNrcyBmb3IgbWVtb3J5CisgIGFsbG9jYXRpb24gbGVha3MsIHVzaW5nIDpmdW5jOmBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKClgLgorCiAtIElzc3VlICMxNjU1OTogQWRkIG1vcmUgdGVzdHMgZm9yIHRoZSBqc29uIG1vZHVsZSwgaW5jbHVkaW5nIHNvbWUgZnJvbSB0aGUKICAgb2ZmaWNpYWwgdGVzdCBzdWl0ZSBhdCBqc29uLm9yZy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKQEAgLTIyNDEsNyArMzg2OCw3IEBACiAtIElzc3VlICMxNTgwMjogRml4IHRlc3QgbG9naWMgaW4gYFRlc3RNYWlsZGlyLnRlc3RfY3JlYXRlX3RtcCgpYC4gUGF0Y2ggYnkKICAgU2VyaGl5IFN0b3JjaGFrYS4KIAotLSBJc3N1ZSAjMTU1NTc6IEFkZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSBgd2ViYnJvd3NlcmAgbW9kdWxlLCB0aGFua3MgdG8gQW50b24KKy0gSXNzdWUgIzE1NTU3OiBBZGRlZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSB3ZWJicm93c2VyIG1vZHVsZSwgdGhhbmtzIHRvIEFudG9uCiAgIEJhcmtvdnNreS4KIAogLSBJc3N1ZSAjMTY2OTg6IFNraXAgcG9zaXggdGVzdF9nZXRncm91cHMgd2hlbiBidWlsdCB3aXRoIE9TIFgKQEAgLTIyNTAsNiArMzg3NywzMCBAQAogQnVpbGQKIC0tLS0tCiAKKy0gSXNzdWUgIzE2MDY3OiBBZGQgZGVzY3JpcHRpb24gaW50byBNU0kgZmlsZSB0byByZXBsYWNlIGluc3RhbGxlcidzCisgIHRlbXBvcmFyeSBuYW1lLgorCistIElzc3VlICMxODI1NzogRml4IHJlYWRsaW5rIHVzYWdlIGluIHB5dGhvbi1jb25maWcuICBJbnN0YWxsIHRoZSBweXRob24KKyAgdmVyc2lvbiBhZ2FpbiBvbiBEYXJ3aW4uCisKKy0gSXNzdWUgIzE4NDgxOiBBZGQgQyBjb3ZlcmFnZSByZXBvcnRpbmcgd2l0aCBnY292IGFuZCBsY292LiBBIG5ldyBtYWtlIHRhcmdldAorICAiY292ZXJhZ2UtcmVwb3J0IiBjcmVhdGVzIGFuIGluc3RydW1lbnRlZCBQeXRob24gYnVpbGQsIHJ1bnMgdW5pdCB0ZXN0cworICBhbmQgY3JlYXRlcyBhIEhUTUwuIFRoZSByZXBvcnQgY2FuIGJlIHVwZGF0ZWQgd2l0aCAibWFrZSBjb3ZlcmFnZS1sY292Ii4KKworLSBJc3N1ZSAjMTc4NDU6IENsYXJpZmllZCB0aGUgbWVzc2FnZSBwcmludGVkIHdoZW4gc29tZSBtb2R1bGUgYXJlIG5vdCBidWlsdC4KKworLSBJc3N1ZSAjMTgyNTY6IENvbXBpbGF0aW9uIGZpeCBmb3IgcmVjZW50IEFJWCByZWxlYXNlcy4gIFBhdGNoIGJ5CisgIERhdmlkIEVkZWxzb2huLgorCistIElzc3VlICMxNzU0NzogSW4gY29uZmlndXJlLCBleHBsaWNpdGx5IHBhc3MgLVdmb3JtYXQgZm9yIHRoZSBiZW5lZml0IGZvciBHQ0MKKyAgNC44LgorCistIElzc3VlICMxNTE3MjogRG9jdW1lbnQgTkFTTSAyLjEwKyBhcyByZXF1aXJlbWVudCBmb3IgYnVpbGRpbmcgT3BlblNTTCAxLjAuMQorICBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNzU5MTogVXNlIGxvd2VyY2FzZSBmaWxlbmFtZXMgd2hlbiBpbmNsdWRpbmcgV2luZG93cyBoZWFkZXIgZmlsZXMuCisgIFBhdGNoIGJ5IFJvdW1lbiBQZXRyb3YuCisKIC0gSXNzdWUgIzE3NTUwOiBGaXggdGhlIC0tZW5hYmxlLXByb2ZpbGluZyBjb25maWd1cmUgc3dpdGNoLgogCiAtIElzc3VlICMxNzQyNTogQnVpbGQgd2l0aCBvcGVuc3NsIDEuMC4xZCBvbiBXaW5kb3dzLgpAQCAtMjI2NSw2ICszOTE2LDEwIEBACiAKIC0gSXNzdWUgIzM3MTg6IFVzZSBBQ19BUkdfVkFSIHRvIHNldCBNQUNIREVQIGluIGNvbmZpZ3VyZS5hYy4KIAorLSBJc3N1ZSAjMTYyMzU6IEltcGxlbWVudCBweXRob24tY29uZmlnIGFzIGEgc2hlbGwgc2NyaXB0LgorCistIElzc3VlICMxNjc2OTogUmVtb3ZlIG91dGRhdGVkIFZpc3VhbCBTdHVkaW8gcHJvamVjdHMuCisKIC0gSXNzdWUgIzE3MDMxOiBGaXggcnVubmluZyByZWdlbiBpbiBjcm9zcyBidWlsZHMuCiAKIC0gSXNzdWUgIzM3NTQ6IGZpeCB0eXBvIGluIHB0aHJlYWQgQUNfQ0FDSEVfVkFMLgpAQCAtMjI3MiwxMiArMzkyNywxNCBAQAogLSBJc3N1ZSAjMTU0ODQ6IEZpeCBfUFlUSE9OX1BST0pFQ1RfQkFTRSBmb3Igc3JjZGlyICE9IGJ1aWxkZGlyIGJ1aWxkczsKICAgdXNlIF9QWVRIT05fUFJPSkVDVF9CQVNFIGluIGRpc3R1dGlscy9zeXNjb25maWcucHkuCiAKKy0gRHJvcCBzdXBwb3J0IGZvciBXaW5kb3dzIDIwMDAgKGNoYW5nZXNldCBlNTJkZjA1YjQ5NmEpLgorCiAtIElzc3VlICMxNzAyOTogTGV0IGgycHkgc2VhcmNoIHRoZSBtdWx0aWFyY2ggc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3J5LgogCiAtIElzc3VlICMxNjk1MzogRml4IHNvY2tldCBtb2R1bGUgY29tcGlsYXRpb24gb24gcGxhdGZvcm1zIHdpdGgKICAgSEFWRV9CUk9LRU5fUE9MTC4gUGF0Y2ggYnkgSmVmZnJleSBBcm1zdHJvbmcuCiAKLS0gSXNzdWUgIzE2ODM2OiBFbmFibGUgSVB2NiBzdXBwb3J0IGV2ZW4gaWYgSVB2NiBpcyBkaXNhYmxlZCBvbiB0aGUgYnVpbGQgaG9zdC4KKy0gSXNzdWUgIzE2MzIwOiBSZW1vdmUgcmVkdW5kYW50IE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb3Igc3RyaW5ncyBhbmQgYnl0ZXMuCiAKIC0gQ3Jvc3MgY29tcGlsaW5nIG5lZWRzIGhvc3QgYW5kIGJ1aWxkIHNldHRpbmdzLiBjb25maWd1cmUgbm8gbG9uZ2VyCiAgIGNyZWF0ZXMgYSBicm9rZW4gUFlUSE9OX0ZPUl9CVUlMRCB2YXJpYWJsZSB3aGVuIC0tYnVpbGQgaXMgbWlzc2luZy4KQEAgLTIyODUsNiArMzk0Miw4IEBACiAtIEZpeCBjcm9zcyBjb21waWxpbmcgaXNzdWUgaW4gc2V0dXAucHksIGVuc3VyZSB0aGF0IGxpYl9kaXJzIGFuZCBpbmNfZGlycyBhcmUKICAgZGVmaW5lZCBpbiBjcm9zcyBjb21waWxpbmcgbW9kZSwgdG9vLgogCistIElzc3VlICMxNjgzNjogRW5hYmxlIElQdjYgc3VwcG9ydCBldmVuIGlmIElQdjYgaXMgZGlzYWJsZWQgb24gdGhlIGJ1aWxkIGhvc3QuCisKIC0gSXNzdWUgIzE2NTkzOiBIYXZlIEJTRCAnbWFrZSAtcycgZG8gdGhlIHJpZ2h0IHRoaW5nLCB0aGFua3MgdG8gRGFuaWVsIFNoYWhhZgogCiAtIElzc3VlICMxNjI2MjogZml4IG91dC1vZi1zcmMtdHJlZSBidWlsZHMsIGlmIG1lcmN1cmlhbCBpcyBub3QgaW5zdGFsbGVkLgpAQCAtMjI5OSw2ICszOTU4LDggQEAKIC0gSXNzdWUgIzE1OTIzOiBGaXggYSBtaXN0YWtlIGluIGBgYXNkbF9jLnB5YGAgdGhhdCByZXN1bHRlZCBpbiBhIFR5cGVFcnJvcgogICBhZnRlciAyODAxYmY4NzVhMjQgKHNlZSAjMTU4MDEpLgogCistIElzc3VlICMxNjEzNTogUmVtb3ZlIE9TLzIgc3VwcG9ydC4KKwogLSBJc3N1ZSAjMTU4MTk6IE1ha2Ugc3VyZSB3ZSBjYW4gYnVpbGQgUHl0aG9uIG91dC1vZi10cmVlIGZyb20gYSByZWFkLW9ubHkKICAgc291cmNlIGRpcmVjdG9yeS4gIChTb21ld2hhdCByZWxhdGVkIHRvIGlzc3VlICM5ODYwLikKIApAQCAtMjMxMSwxMSArMzk3Miw1NCBAQAogQy1BUEkKIC0tLS0tCiAKKy0gSXNzdWUgIzE4MzUxOiBGaXggdmFyaW91cyBpc3N1ZXMgaW4gYSBmdW5jdGlvbiBpbiBpbXBvcnRsaWIgcHJvdmlkZWQgdG8gaGVscAorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSAoYW5kIHRodXMgYnkgZXh0ZW5zaW9uCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKCkgYW5kIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoKSkuCisKKy0gSXNzdWUgIzkzNjk6IFRoZSB0eXBlcyBvZiBgY2hhcipgIGFyZ3VtZW50cyBvZiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKSBhbmQKKyAgUHlPYmplY3RfQ2FsbE1ldGhvZCgpIG5vdyBjaGFuZ2VkIHRvIGBjb25zdCBjaGFyKmAuICBCYXNlZCBvbiBwYXRjaGVzIGJ5CisgIErDtnJnIE3DvGxsZXIgYW5kIExhcnMgQnVpdGluY2suCisKKy0gSXNzdWUgIzE3MjA2OiBQeV9DTEVBUigpLCBQeV9ERUNSRUYoKSwgUHlfWElOQ1JFRigpIGFuZCBQeV9YREVDUkVGKCkgbm93CisgIGV4cGFuZCB0aGVpciBhcmd1bWVudHMgb25jZSBpbnN0ZWFkIG9mIG11bHRpcGxlIHRpbWVzLiAgUGF0Y2ggd3JpdHRlbiBieSBJbGxpYQorICBQb2xvc3VraGluLgorCistIElzc3VlICMxNzUyMjogQWRkIHRoZSBQeUdJTFN0YXRlX0NoZWNrKCkgQVBJLgorCistIElzc3VlICMxNzMyNzogQWRkIFB5RGljdF9TZXREZWZhdWx0LgorCiAtIElzc3VlICMxNjg4MTogRml4IFB5X0FSUkFZX0xFTkdUSCBtYWNybyBmb3IgR0NDIDwgMy4xLgogCistIElzc3VlICMxNjUwNTogUmVtb3ZlIHVudXNlZCBQeV9UUEZMQUdTX0lOVF9TVUJDTEFTUy4KKworLSBJc3N1ZSAjMTYwODY6IFB5VHlwZU9iamVjdC50cF9mbGFncyBhbmQgUHlUeXBlX1NwZWMuZmxhZ3MgYXJlIG5vdyB1bnNpZ25lZAorICAodW5zaWduZWQgbG9uZyBhbmQgdW5zaWduZWQgaW50KSB0byBhdm9pZCBhbiB1bmRlZmluZWQgYmVoYXZpb3VyIHdpdGgKKyAgUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTICgoMSA8PCAzMSkuIFB5VHlwZV9HZXRGbGFncygpIHJlc3VsdCB0eXBlIGlzCisgIG5vdyB1bnNpZ25lZCB0b28gKHVuc2lnbmVkIGxvbmcsIGluc3RlYWQgb2YgbG9uZykuCisKKy0gSXNzdWUgIzE2MTY2OiBBZGQgUFlfTElUVExFX0VORElBTiBhbmQgUFlfQklHX0VORElBTiBtYWNyb3MgYW5kIHVuaWZpZWQKKyAgZW5kaWFubmVzcyBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nLgorCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzE3NzAxOiBJbXByb3Zpbmcgc3RyZnRpbWUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTg0NDA6IENsYXJpZnkgdGhhdCBgaGFzaCgpYCBjYW4gdHJ1bmNhdGUgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4KKyAgb2JqZWN0J3MgY3VzdG9tIGBfX2hhc2hfXygpYCBtZXRob2QuCisKKy0gSXNzdWUgIzE3ODQ0OiBBZGQgbGlua3MgdG8gZW5jb2RlcnMgYW5kIGRlY29kZXJzIGZvciBieXRlcy10by1ieXRlcyBjb2RlY3MuCisKKy0gSXNzdWUgIzE0MDk3OiBpbXByb3ZlIHRoZSAiaW50cm9kdWN0aW9uIiBwYWdlIG9mIHRoZSB0dXRvcmlhbC4KKworLSBJc3N1ZSAjMTc5Nzc6IFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgY2FkZWZhdWx0IGFyZ3VtZW50J3MgZGVmYXVsdCB2YWx1ZQorICBpbiB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCkgaXMgZml4ZWQgdG8gbWF0Y2ggdGhlIGNvZGUuCisKKy0gSXNzdWUgIzY2OTY6IGFkZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgUHJvZmlsZSBvYmplY3RzLCBhbmQgaW1wcm92ZQorICBwcm9maWxlL2NQcm9maWxlIGRvY3MuICBQYXRjaCBieSBUb20gUGluY2tuZXkuCisKKy0gSXNzdWUgIzE1OTQwOiBTcGVjaWZ5IGVmZmVjdCBvZiBsb2NhbGUgb24gdGltZSBmdW5jdGlvbnMuCisKIC0gSXNzdWUgMTc1Mzg6IERvY3VtZW50IFhNTCB2dWxuZXJhYmlsdGllcwogCiAtIElzc3VlICMxNjY0Mjogc2NoZWQuc2NoZWR1bGVyIHRpbWVmdW5jIGluaXRpYWwgZGVmYXVsdCBpcyB0aW1lLm1vbm90b25pYy4KQEAgLTIzNjAsOCArNDA2NCw4IEBACiAKIC0gSXNzdWUgIzEzNTM4OiBJbXByb3ZlIHN0cigpIGFuZCBvYmplY3QuX19zdHJfXygpIGRvY3VtZW50YXRpb24uCiAKLS0gSXNzdWUgIzE2NDg5OiBNYWtlIGl0IGNsZWFyZXIgdGhhdCBpbXBvcnRsaWIuZmluZF9sb2FkZXIoKSByZXF1aXJlcyBhbnkgYW5kCi0gIGFsbCBwYWNrYWdlcyB0byBiZSBzZXBhcmF0ZWx5IGltcG9ydGVkLgorLSBJc3N1ZSAjMTY0ODk6IE1ha2UgaXQgY2xlYXJlciB0aGF0IGltcG9ydGxpYi5maW5kX2xvYWRlcigpIG5lZWRzIHBhcmVudAorICBwYWNrYWdlcyB0byBiZSBleHBsaWNpdGx5IGltcG9ydGVkLgogCiAtIElzc3VlICMxNjQwMDogVXBkYXRlIHRoZSBkZXNjcmlwdGlvbiBvZiB3aGljaCB2ZXJzaW9ucyBvZiBhIGdpdmVuIHBhY2thZ2UKICAgUHlQSSBkaXNwbGF5cy4KQEAgLTIzODQsNiArNDA4OCw5IEBACiAtIElzc3VlICMxNjExNTogSW1wcm92ZSBzdWJwcm9jZXNzLlBvcGVuKCkgZG9jdW1lbnRhdGlvbiBhcm91bmQgYXJncywgc2hlbGwsCiAgIGFuZCBleGVjdXRhYmxlIGFyZ3VtZW50cy4KIAorLSBJc3N1ZSAjMTM0OTg6IENsYXJpZnkgZG9jcyBvZiBvcy5tYWtlZGlycygpJ3MgZXhpc3Rfb2sgYXJndW1lbnQuICBEb25lIHdpdGgKKyAgZ3JlYXQgbmF0aXZlLXNwZWFrZXIgaGVscCBmcm9tIFIuIERhdmlkIE11cnJheS4KKwogLSBJc3N1ZSAjMTU1MzM6IENsYXJpZnkgZG9jcyBhbmQgYWRkIHRlc3RzIGZvciBgc3VicHJvY2Vzcy5Qb3BlbigpYCdzIGN3ZAogICBhcmd1bWVudC4KIApAQCAtMjQwNCwxNyArNDExMSw0NyBAQAogVG9vbHMvRGVtb3MKIC0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzE3MTU2OiBweWdldHRleHQucHkgbm93IHVzZXMgYW4gZW5jb2Rpbmcgb2Ygc291cmNlIGZpbGUgYW5kIGNvcnJlY3RseQotICB3cml0ZXMgYW5kIGVzY2FwZXMgbm9uLWFzY2lpIGNoYXJhY3RlcnMuCistIElzc3VlICMxODgxNzogRml4IGEgcmVzb3VyY2Ugd2FybmluZyBpbiBMaWIvYWlmYy5weSBkZW1vLiAgUGF0Y2ggYnkKKyAgVmFqcmFza3kgS29rLgorCistIElzc3VlICMxODQzOTogTWFrZSBwYXRjaGNoZWNrIHdvcmsgb24gV2luZG93cyBmb3IgQUNLUywgTkVXUy4KKworLSBJc3N1ZSAjMTg0NDg6IEZpeCBhIHR5cG8gaW4gVG9vbHMvZGVtby9laWZmZWwucHkuCisKKy0gSXNzdWUgIzE4NDU3OiBGaXhlZCBzYXZpbmcgb2YgZm9ybXVsYXMgYW5kIGNvbXBsZXggbnVtYmVycyBpbgorICBUb29scy9kZW1vL3NzMS5weS4KKworLSBJc3N1ZSAjMTg0NDk6IE1ha2UgVG9vbHMvZGVtby9zczEucHkgd29yayBhZ2FpbiBvbiBQeXRob24gMy4gIFBhdGNoIGJ5CisgIEbDqXZyeSBUaGliYXVsdC4KKworLSBJc3N1ZSAjMTI5OTA6IFRoZSAiUHl0aG9uIExhdW5jaGVyIiBvbiBPU1ggY291bGQgbm90IGxhdW5jaCBweXRob24gc2NyaXB0cworICB0aGF0IGhhdmUgcGF0aHMgdGhhdCBpbmNsdWRlIHdpZGUgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTUyMzk6IE1ha2UgbWtzdHJpbmdwcmVwLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuCisKKy0gSXNzdWUgIzE3MDI4OiBBbGxvd2VkIFB5dGhvbiBhcmd1bWVudHMgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIFdpbmRvd3MKKyAgbGF1bmNoZXIuCisKKy0gSXNzdWUgIzE3MTU2OiBweWdldHRleHQucHkgbm93IGRldGVjdHMgdGhlIGVuY29kaW5nIG9mIHNvdXJjZSBmaWxlcyBhbmQKKyAgY29ycmVjdGx5IHdyaXRlcyBhbmQgZXNjYXBlcyBub24tYXNjaWkgY2hhcmFjdGVycy4KIAogLSBJc3N1ZSAjMTU1Mzk6IEZpeCBhIG51bWJlciBvZiBidWdzIGluIFRvb2xzL3NjcmlwdHMvcGluZGVudC5weS4gIE5vdwogICBwaW5kZW50LnB5IHdvcmtzIHdpdGggYSAid2l0aCIgc3RhdGVtZW50LiAgcGluZGVudC5weSBubyBsb25nZXIgcHJvZHVjZXMKICAgaW1wcm9wZXIgaW5kZW50YXRpb24uICBwaW5kZW50LnB5IG5vdyB3b3JrcyB3aXRoIGNvbnRpbnVlZCBsaW5lcyBicm9rZW4gYWZ0ZXIKICAgImNsYXNzIiBvciAiZGVmIiBrZXl3b3JkcyBhbmQgd2l0aCBjb250aW51YXRpb25zIGF0IHRoZSBzdGFydCBvZiBsaW5lLgogCi0tIElzc3VlICMxNTM3ODogRml4IFRvb2xzL3VuaWNvZGUvY29tcGFyZWNvZGVjcy5weS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCistIElzc3VlICMxMTc5NzogQWRkIGEgMnRvMyBmaXhlciB0aGF0IG1hcHMgcmVsb2FkKCkgdG8gaW1wLnJlbG9hZCgpLgogCi0tIElzc3VlICMxNjQ3NjogRml4IGpzb24udG9vbCB0byBhdm9pZCBpbmNsdWRpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKy0gSXNzdWUgIzEwOTY2OiBSZW1vdmUgdGhlIGNvbmNlcHQgb2YgdW5leHBlY3RlZCBza2lwcGVkIHRlc3RzLgorCistIElzc3VlICM5ODkzOiBSZW1vdmVkIHRoZSBNaXNjL1ZpbSBkaXJlY3RvcnkuCisKKy0gUmVtb3ZlZCB0aGUgTWlzYy9UZXh0TWF0ZSBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE2MjQ1OiBBZGQgdGhlIFRvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkgc2NyaXB0IHRvIHBhcnNlCisgIHRoZSBsaXN0IG9mIEhUTUw1IGVudGl0aWVzIGFuZCB1cGRhdGUgdGhlIGh0bWwuZW50aXRpZXMuaHRtbDUgZGljdGlvbmFyeS4KKworLSBJc3N1ZSAjMTUzNzg6IEZpeCBUb29scy91bmljb2RlL2NvbXBhcmVjb2RlY3MucHkuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgogCiAtIElzc3VlICMxNjU0OTogTWFrZSBqc29uLnRvb2wgd29yayBhZ2FpbiBvbiBQeXRob24gMyBhbmQgYWRkIHRlc3RzLgogICBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcgYW5kIFNlcmhpeSBTdG9yY2hha2EuCkBAIC0yNDIyLDYgKzQxNTksMTIgQEAKIC0gSXNzdWUgIzEzMzAxOiB1c2UgYXN0LmxpdGVyYWxfZXZhbCgpIGluc3RlYWQgb2YgZXZhbCgpIGluIFRvb2xzL2kxOG4vbXNnZm10LnB5CiAgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKK1dpbmRvd3MKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg1Njk6IFRoZSBpbnN0YWxsZXIgbm93IGFkZHMgLnB5IHRvIHRoZSBQQVRIRVhUIHZhcmlhYmxlIHdoZW4gZXh0ZW5zaW9ucworICBhcmUgcmVnaXN0ZXJlZC4gUGF0Y2ggYnkgUGF1bCBNb29yZS4KKwogCiBXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMD8KID09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjUwOSw2ICs0MjUyLDkgQEAKIExpYnJhcnkKIC0tLS0tLS0KIAorLSBJc3N1ZSAjMTcxNTg6IEFkZCAnc3ltYm9scycgdG8gaGVscCgpIHdlbGNvbWUgbWVzc2FnZTsgY2xhcmlmeQorICAnbW9kdWxlcyBzcGFtJyBtZXNzYWdlcy4KKwogLSBJc3N1ZSAjMTU4NDc6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYXJncGFyc2UsIHdoaWNoIGRpZCBub3QgYWNjZXB0IHR1cGxlcyBhcwogICBhcmd1bWVudCBsaXN0cyBhbnltb3JlLgogCkBAIC0yNTg0LDYgKzQzMzAsOCBAQAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMxMzI0ODogcmVtb3ZlZCBkZXByZWNhdGVkIGFuZCB1bmRvY3VtZW50ZWQgZGlmZmxpYi5pc2JqdW5rLCBpc2Jwb3B1bGFyLgorCiAtIElzc3VlICMxMzM3MDogRW5zdXJlIHRoYXQgY3R5cGVzIHdvcmtzIG9uIE1hYyBPUyBYIHdoZW4gUHl0aG9uIGlzIGNvbXBpbGVkCiAgIHVzaW5nIHRoZSBjbGFuZyBjb21waWxlci4KIApAQCAtMjk5OSw2ICs0NzQ3LDEwIEBACiAtIElzc3VlICMxNTI1MDogRG9jdW1lbnQgdGhhdCBgZmlsZWNtcC5kaXJjbXAoKWAgY29tcGFyZXMgZmlsZXMgc2hhbGxvd2x5LiBQYXRjaAogICBjb250cmlidXRlZCBieSBDaHJpcyBKZXJkb25lay4KIAorLSBJc3N1ZSAjMTU0NDI6IEV4cG9zZSB0aGUgZGVmYXVsdCBsaXN0IG9mIGRpcmVjdG9yaWVzIGlnbm9yZWQgYnkKKyAgYGZpbGVjbXAuZGlyY21wKClgIGFzIGEgbW9kdWxlIGF0dHJpYnV0ZSwgYW5kIGV4cGFuZCB0aGUgbGlzdCB0byBtb3JlIG1vZGVybgorICB2YWx1ZXMuCisKIFRlc3RzCiAtLS0tLQogCkBAIC0zMTExLDkgKzQ4NjMsNiBAQAogTGlicmFyeQogLS0tLS0tLQogCi0tIElzc3VlICMxNjMwNTogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IG9jY3VycmluZyB3aGVuIGludGVycnVwdGluZwotICBtYXRoLmZhY3RvcmlhbC4KLQogLSBJc3N1ZSAjMTIyODg6IENvbnNpZGVyICcwJyBhbmQgJzAuMCcgYXMgdmFsaWQgaW5pdGlhbHZhbHVlCiAgIGZvciB0a2ludGVyIFNpbXBsZURpYWxvZy4KIApAQCAtNDgwOCw3ICs2NTU3LDcgQEAKIC0gSXNzdWUgIzEzNTg5OiBGaXggc29tZSBzZXJpYWxpemF0aW9uIHByaW1pdGl2ZXMgaW4gdGhlIGFpZmMgbW9kdWxlLgogICBQYXRjaCBieSBPbGVnIFBsYWtob3RueXVrLgogCi0tIElzc3VlICMxMzY0MjogVW5xdW90ZSBiZWZvcmUgYjY0ZW5jb2RpbmcgYGB1c2VyOnBhc3N3b3JkYGAgZHVyaW5nIEJhc2ljCistIElzc3VlICMxMzY0MjogVW5xdW90ZSBiZWZvcmUgYjY0ZW5jb2RpbmcgdXNlcjpwYXNzd29yZCBkdXJpbmcgQmFzaWMKICAgQXV0aGVudGljYXRpb24uIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEpvb25hcyBLdW9yaWxlaHRvLgogCiAtIElzc3VlICMxMjM2NDogRml4IGEgaGFuZyBpbiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvci4KQEAgLTUyNjcsOCArNzAxNiw4IEBACiAtIElzc3VlICMxMjYwNzogSW4gc3VicHJvY2VzcywgZml4IGlzc3VlIHdoZXJlIGlmIHN0ZGluLCBzdGRvdXQgb3Igc3RkZXJyIGlzCiAgIGdpdmVuIGFzIGEgbG93IGZkLCBpdCBnZXRzIG92ZXJ3cml0dGVuLgogCi0tIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZSkKLSAgYSBgYENvbm5lY3Rpb246IGNsb3NlYGAgaGVhZGVyLgorLSBJc3N1ZSAjMTI1NzY6IEZpeCB1cmxvcGVuIGJlaGF2aW9yIG9uIHNpdGVzIHdoaWNoIGRvIG5vdCBzZW5kIChvciBvYmZ1c2NhdGVzKQorICBgYENvbm5lY3Rpb246IGNsb3NlYGAgaGVhZGVyLgogCiAtIElzc3VlICMxMjU2MDogQnVpbGQgbGlicHl0aG9uLnNvIG9uIE9wZW5CU0QuIFBhdGNoIGJ5IFN0ZWZhbiBTcGVybGluZy4KIApAQCAtNTgyNiw2ICs3NTc1LDkgQEAKIC0gSXNzdWUgIzExNjM1OiBEb24ndCB1c2UgcG9sbGluZyBpbiB3b3JrZXIgdGhyZWFkcyBhbmQgcHJvY2Vzc2VzIGxhdW5jaGVkIGJ5CiAgIGNvbmN1cnJlbnQuZnV0dXJlcy4KIAorLSBJc3N1ZSAjNTg0NTogQXV0b21hdGljYWxseSByZWFkIHJlYWRsaW5lIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGNvbXBsZXRpb24KKyAgaW4gaW50ZXJhY3RpdmUgbW9kZS4KKwogLSBJc3N1ZSAjNjgxMTogQWxsb3cgaW1wb3J0bGliIHRvIGNoYW5nZSBhIGNvZGUgb2JqZWN0J3MgY29fZmlsZW5hbWUgYXR0cmlidXRlCiAgIHRvIG1hdGNoIHRoZSBwYXRoIHRvIHdoZXJlIHRoZSBzb3VyY2UgY29kZSBjdXJyZW50bHkgaXMsIG5vdCB3aGVyZSB0aGUgY29kZQogICBvYmplY3Qgb3JpZ2luYWxseSBjYW1lIGZyb20uCmRpZmYgLS1naXQgYS9NaXNjL1JFQURNRSBiL01pc2MvUkVBRE1FCmluZGV4IDExOGY2YzcuLmU3NzgwYTIgMTAwNjQ0Ci0tLSBhL01pc2MvUkVBRE1FCisrKyBiL01pc2MvUkVBRE1FCkBAIC0yMiw5ICsyMiw3IEBACiBSRUFETUUuY292ZXJpdHkgICAgICAgICBJbmZvcm1hdGlvbiBhYm91dCBydW5uaW5nIENvdmVyaXR5J3MgUHJldmVudCBvbiBQeXRob24KIFJFQURNRS52YWxncmluZCAgICAgICAgIEluZm9ybWF0aW9uIGZvciBWYWxncmluZCB1c2Vycywgc2VlIHZhbGdyaW5kLXB5dGhvbi5zdXBwCiBSUE0gICAgICAgICAgICAgICAgICAgICAoT2xkKSB0b29scyB0byBidWlsZCBSUE1zCi1zdm5tYXAudHh0ICAgICAgICAgICAgICBNYXAgb2Ygb2xkIFNWTiByZXZzIGFuZCBicmFuY2hlcyB0byBoZyBjaGFuZ2VzZXQgaWRzCiBTcGVjaWFsQnVpbGRzLnR4dCAgICAgICBEZXNjcmliZXMgZXh0cmEgc3ltYm9scyB5b3UgY2FuIHNldCBmb3IgZGVidWcgYnVpbGRzCi1UZXh0TWF0ZSAgICAgICAgICAgICAgICBBIFRleHRNYXRlIGJ1bmRsZSBmb3IgUHl0aG9uIGRldmVsb3BtZW50Citzdm5tYXAudHh0ICAgICAgICAgICAgICBNYXAgb2Ygb2xkIFNWTiByZXZzIGFuZCBicmFuY2hlcyB0byBoZyBjaGFuZ2VzZXQgaWRzCiB2YWxncmluZC1weXRob24uc3VwcCAgICBWYWxncmluZCBzdXBwcmVzc2lvbiBmaWxlLCBzZWUgUkVBRE1FLnZhbGdyaW5kCiB2Z3JpbmRlZnMgICAgICAgICAgICAgICBQeXRob24gY29uZmlndXJhdGlvbiBmb3IgdmdyaW5kIChhIGdlbmVyaWMgcHJldHR5IHByaW50ZXIpCi1WaW0gICAgICAgICAgICAgICAgICAgICBQeXRob24gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzIGZvciB0aGUgVmltIGVkaXRvcgpkaWZmIC0tZ2l0IGEvTWlzYy9SUE0vcHl0aG9uLTMuMy5zcGVjIGIvTWlzYy9SUE0vcHl0aG9uLTMuNC5zcGVjCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIE1pc2MvUlBNL3B5dGhvbi0zLjMuc3BlYwpyZW5hbWUgdG8gTWlzYy9SUE0vcHl0aG9uLTMuNC5zcGVjCmluZGV4IDNhYmJlNTMuLmE5MTFhN2UgMTAwNjQ0Ci0tLSBhL01pc2MvUlBNL3B5dGhvbi0zLjMuc3BlYworKysgYi9NaXNjL1JQTS9weXRob24tMy40LnNwZWMKQEAgLTM5LDggKzM5LDggQEAKIAogJWRlZmluZSBuYW1lIHB5dGhvbgogIy0tc3RhcnQgY29uc3RhbnRzLS0KLSVkZWZpbmUgdmVyc2lvbiAzLjMuNAotJWRlZmluZSBsaWJ2ZXJzIDMuMworJWRlZmluZSB2ZXJzaW9uIDMuNC4wcmMxCislZGVmaW5lIGxpYnZlcnMgMy40CiAjLS1lbmQgY29uc3RhbnRzLS0KICVkZWZpbmUgcmVsZWFzZSAxcHlkb3RvcmcKICVkZWZpbmUgX19wcmVmaXggL3VzcgpAQCAtODMsOCArODMsNyBAQAogbGlicmFyaWVzLCBhcyB3ZWxsIGFzIHRvIHZhcmlvdXMgd2luZG93IHN5c3RlbXMsIGFuZCBpcyBleHRlbnNpYmxlIGluIEMgb3IKIEMrKy4gSXQgaXMgYWxzbyB1c2FibGUgYXMgYW4gZXh0ZW5zaW9uIGxhbmd1YWdlIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkCiBhIHByb2dyYW1tYWJsZSBpbnRlcmZhY2UuICBGaW5hbGx5LCBQeXRob24gaXMgcG9ydGFibGU6IGl0IHJ1bnMgb24gbWFueQotYnJhbmRzIG9mIFVOSVgsIG9uIFBDcyB1bmRlciBXaW5kb3dzLCBNUy1ET1MsIGFuZCBPUy8yLCBhbmQgb24gdGhlCi1NYWMuCiticmFuZHMgb2YgVU5JWCwgb24gUENzIHVuZGVyIFdpbmRvd3MsIE1TLURPUywgYW5kIG9uIHRoZSBNYWMuCiAKICVwYWNrYWdlIGRldmVsCiBTdW1tYXJ5OiBUaGUgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMgbmVlZGVkIGZvciBQeXRob24gZXh0ZW5zaW9uIGRldmVsb3BtZW50LgpkaWZmIC0tZ2l0IGEvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dCBiL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQKaW5kZXggZjg2OWU3Yy4uNjQ2YWMyMyAxMDA2NDQKLS0tIGEvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dAorKysgYi9NaXNjL1NwZWNpYWxCdWlsZHMudHh0CkBAIC0xMDUsNyArMTA1LDkgQEAKIHBbLTIqUzotU10KICAgICBOdW1iZXIgb2YgYnl0ZXMgb3JpZ2luYWxseSBhc2tlZCBmb3IuICBUaGlzIGlzIGEgc2l6ZV90LCBiaWctZW5kaWFuIChlYXNpZXIKICAgICB0byByZWFkIGluIGEgbWVtb3J5IGR1bXApLgotcFstUzowXQorcFstU10KKyAgICBBUEkgSUQuICBTZWUgUEVQIDQ0NS4gIFRoaXMgaXMgYSBjaGFyYWN0ZXIsIGJ1dCBzZWVtcyB1bmRvY3VtZW50ZWQuCitwWy1TKzE6MF0KICAgICBDb3BpZXMgb2YgRk9SQklEREVOQllURS4gIFVzZWQgdG8gY2F0Y2ggdW5kZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwWzA6Tl0KICAgICBUaGUgcmVxdWVzdGVkIG1lbW9yeSwgZmlsbGVkIHdpdGggY29waWVzIG9mIENMRUFOQllURSwgdXNlZCB0byBjYXRjaApkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbi50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NmYWRhOC4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz4jIS91c3IvYmluL3B5dGhvbgotIiIiR2VuZXJhdGUgY29kZSB0byB3YXJuIGFib3V0IGEgbW9kdWxlJ3MgcmVtb3ZhbCBpbiBQeXRob24gMy4wLgotCi1YWFggTm90IHN1cHBvcnRlZDoKLS0gTW9kdWxlJ3MgaW4gYSBwYWNrYWdlIGRvIG5vdCBoYXZlIHRoZWlyIGZ1bGwgbmFtZSBnZW5lcmF0ZWQuCi0tIFBhY2thZ2UncyBfX2luaXRfXyBtb2R1bGU7IHNob3VsZCBkZXRlY3QgYW5kIHVzZSB0aGUgcGFja2FnZSdzIG5hbWUgaW5zdGVhZC4KLQotIiIiCi1weV90ZW1wbGF0ZSA9ICIiImZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm5weTNrCi13YXJucHkzaygidGhlICR7MTolc30gbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQgaW4gUHl0aG9uIDMuMCIsIHN0YWNrbGV2ZWw9MikKLWRlbCB3YXJucHkzayQwIiIiCi0KLWNfdGVtcGxhdGUgPSAiIiIKLWlmIChQeUVycl9XYXJuUHkzaygidGhlICR7MTolc30gbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQgaW4gIgotICAgICAgICAgICAgICAgICAgICJQeXRob24gMy4wIiwgMikgJmx0OyAwKQotICAgIHJldHVybjskMCIiIgotCi0KLWltcG9ydCBpbXAKLWltcG9ydCBvcwotCi1maWxlX25hbWUgPSBvcy5wYXRoLnNwbGl0KG9zLmVudmlyb25bJ1RNX0ZJTEVQQVRIJ10pWzFdCi0KLXB5X3N1ZmZpeGVzID0gcmV2ZXJzZWQoc29ydGVkKChzdWZmaXhbMF0gZm9yIHN1ZmZpeCBpbiBpbXAuZ2V0X3N1ZmZpeGVzKCkgaWYgc3VmZml4WzJdID09IGltcC5QWV9TT1VSQ0UpLCBrZXk9bGVuKSkKLWNfc3VmZml4ZXMgPSByZXZlcnNlZChzb3J0ZWQoKG9zLnBhdGguc3BsaXRleHQoc3VmZml4WzBdKVswXSArICcuYycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCBpbiBpbXAuZ2V0X3N1ZmZpeGVzKCkgaWYgc3VmZml4WzJdID09IGltcC5DX0VYVEVOU0lPTiksIGtleT1sZW4pKQotCi1wYWlyaW5ncyA9ICgocHlfc3VmZml4ZXMsIHB5X3RlbXBsYXRlKSwgKGNfc3VmZml4ZXMsIGNfdGVtcGxhdGUpKQotCi1kZWYgY3JlYXRlX3RlbXBsYXRlKHN1ZmZpeGVzLCB0ZW1wbGF0ZSk6Ci0gICAgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlczoKLSAgICAgICAgaWYgbm90IGZpbGVfbmFtZS5lbmRzd2l0aChzdWZmaXgpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgbW9kdWxlX25hbWUgPSBmaWxlX25hbWVbOi1sZW4oc3VmZml4KV0KLSAgICAgICAgcmV0dXJuIHRlbXBsYXRlICUgbW9kdWxlX25hbWUKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gTm9uZQotCi1mb3IgdGVtcGxhdGUgaW4gKGNyZWF0ZV90ZW1wbGF0ZSgqcGFpcikgZm9yIHBhaXIgaW4gcGFpcmluZ3MpOgotICAgIGlmIG5vdCB0ZW1wbGF0ZToKLSAgICAgICAgY29udGludWUKLSAgICBwcmludCB0ZW1wbGF0ZSwKLSAgICBicmVhawotZWxzZToKLSAgICBwcmludCAnWFhYIENvdWxkIG5vdCBnZW5lcmF0ZSBjb2RlLic8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5ub25lPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz4yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb248L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+aW5zZXJ0QXNTbmlwcGV0PC9zdHJpbmc+Ci0JPGtleT50YWJUcmlnZ2VyPC9rZXk+Ci0JPHN0cmluZz4ydG8zbW9kZGVsPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz45NTE5QzIyQi02QUI4LTQxQTEtOTRGNi0wNzlFMEI0NUMxNDc8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQgRG9jcy50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQgRG9jcy50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNGQ1M2IuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkIERvY3MudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMgWFhYIExlb3BhcmQtc3BlY2lmaWMgdW5sZXNzIGhhdmUgZWFzeSB3YXkgdG8gc3BlY2lmaWMgYWx0ZXJuYXRpdmUgUHl0aG9uIGV4ZWN1dGFibGUuCi0KLWNkICRUTV9QUk9KRUNUX0RJUkVDVE9SWS9Eb2MKLW1ha2UgaHRtbCAyJmd0OyZhbXA7MSB8IHByZQotCi1yZXNjYW5fcHJvamVjdDwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPm5vbmU8L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPkJ1aWxkIERvY3M8L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+c2hvd0FzSFRNTDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+NkVGMTUxRTUtNzE0OS00RjgyLTg3OTYtMENDNDBGRTU4OUZBPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZC50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZmRhNWMuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz4jIFhYWCBUT0RPCi0jIC0gSGlnaGxpZ2h0IGFueSBjb21waWxlciB3YXJuaW5ncyBmb3IgUHl0aG9uIGNvZGUuCi0jIC0gUG9pbnQgb3V0IGlmIGNvbXBpbGUgZmFpbGVkLgotCi1jZCAkVE1fUFJPSkVDVF9ESVJFQ1RPUlkKLW1ha2UgLXMgLWoyIDImZ3Q7JmFtcDsxIHwgcHJlCi0KLXJlc2Nhbl9wcm9qZWN0PC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+bm9uZTwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+QnVpbGQgUHl0aG9uPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPnNob3dBc0hUTUw8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPkI1NDVCQjFCLUE4RTEtNDI2Qy1CNTBBLTQyNkU3OEI5NkQzODwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9HbyB0byBJc3N1ZS50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvR28gdG8gSXNzdWUudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWQzMGJjLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9HbyB0byBJc3N1ZS50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+b3BlbiAiaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZSQoY2F0KSI8L3N0cmluZz4KLQk8a2V5PmZhbGxiYWNrSW5wdXQ8L2tleT4KLQk8c3RyaW5nPndvcmQ8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5zZWxlY3Rpb248L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPkdvIHRvIElzc3VlPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPmRpc2NhcmQ8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPkZEMjVBOERDLTIyREMtNEVENC1CMjIyLUI5NDNDOEE5MTE3RDwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIERvY3MudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gRG9jcy50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMWJlNDMuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gRG9jcy50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyBTZWFyY2ggb3JkZXI6Ci0jICAtIEN1cnJlbnQgcHJvamVjdC4KLSMgIC0gVE1fUFlUSE9OREVWX0RPQ1MuCi0jICAtIE9ubGluZSBkb2NzIGluIGRldmVsb3BtZW50LgotCi1odG1sX2luZGV4PSRUTV9QUk9KRUNUX0RJUkVDVE9SWS9Eb2MvYnVpbGQvaHRtbC9pbmRleC5odG1sCi1pZiBbWyAtZiAkaHRtbF9pbmRleCBdXTsgdGhlbgotCW9wZW4gJGh0bWxfaW5kZXgKLWVsaWYgW1sgJFRNX1BZVEhPTkRFVl9ET0NTIF1dOyB0aGVuCi0Jb3BlbiAkVE1fUFlUSE9OREVWX0RPQ1MKLWVsc2UKLQlvcGVuIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2LwotZmk8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5ub25lPC9zdHJpbmc+Ci0JPGtleT5rZXlFcXVpdmFsZW50PC9rZXk+Ci0JPHN0cmluZz5ASDwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+T3BlbiBEb2NzPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPmRpc2NhcmQ8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPkJGMzM2RkZGLUUxNEQtNEJGMS1BMTU2LTcxQ0Y3NjhBQzAzNDwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIFBFUC50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBQRVAudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjU1MzNhLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIFBFUC50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyBYWFggV29ydGggc3VwcG9ydGluZyB1c2luZyBhIGxvY2FsIGNvcHk/Ci0KLSMgRHVtYiBsdWNrIHRoYXQgYW4gdW5yZWNvZ25pemVkIG51bWJlciBsZWFkcyB0byBhIDAgYmVpbmcgdXNlZC4KLW9wZW4gYHByaW50ZiAiaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0lMDRkIiAkKGNhdClgPC9zdHJpbmc+Ci0JPGtleT5mYWxsYmFja0lucHV0PC9rZXk+Ci0JPHN0cmluZz53b3JkPC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+c2VsZWN0aW9uPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5PcGVuIFBFUDwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5kaXNjYXJkPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5FREJCMDM3Ri1BQUUzLTQ1MTItODYzRi1EOUFBODJDOUU1MUU8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgImEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL1NuaXBwZXRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbiBcMDUwZG9jc1wwNTEudG1TbmlwcGV0IiAiYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvU25pcHBldHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uIFwwNTBkb2NzXDA1MS50bVNuaXBwZXQiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGU4YmFlLi4wMDAwMDAwCi0tLSAiYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvU25pcHBldHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uIFwwNTBkb2NzXDA1MS50bVNuaXBwZXQiCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmNvbnRlbnQ8L2tleT4KLQk8c3RyaW5nPi4uIGRlcHJlY2F0ZWQ6OiAyLjYKLSAgIFRoZSA6bW9kOlxgJHsxfVxgIG1vZHVsZSBoYXMgYmVlbiBkZXByZWNhdGVkIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjAuCi0kezB9PC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz4yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24gKGRvY3MpPC9zdHJpbmc+Ci0JPGtleT50YWJUcmlnZ2VyPC9rZXk+Ci0JPHN0cmluZz4ydG8zZG9jZGVsPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz4wNTY4NDEwRC1FQUYxLTRBRjMtQjZERS04QUYxMzNBOTE4MjE8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvaW5mby5wbGlzdCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9pbmZvLnBsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTEwZDVkLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9pbmZvLnBsaXN0CisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5Pm1haW5NZW51PC9rZXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+aXRlbXM8L2tleT4KLQkJPGFycmF5PgotCQkJPHN0cmluZz45NTE5QzIyQi02QUI4LTQxQTEtOTRGNi0wNzlFMEI0NUMxNDc8L3N0cmluZz4KLQkJCTxzdHJpbmc+MDU2ODQxMEQtRUFGMS00QUYzLUI2REUtOEFGMTMzQTkxODIxPC9zdHJpbmc+Ci0JCQk8c3RyaW5nPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvc3RyaW5nPgotCQkJPHN0cmluZz5CNTQ1QkIxQi1BOEUxLTQyNkMtQjUwQS00MjZFNzhCOTZEMzg8L3N0cmluZz4KLQkJCTxzdHJpbmc+NkVGMTUxRTUtNzE0OS00RjgyLTg3OTYtMENDNDBGRTU4OUZBPC9zdHJpbmc+Ci0JCQk8c3RyaW5nPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwvc3RyaW5nPgotCQkJPHN0cmluZz5CRjMzNkZGRi1FMTRELTRCRjEtQTE1Ni03MUNGNzY4QUMwMzQ8L3N0cmluZz4KLQkJCTxzdHJpbmc+RkQyNUE4REMtMjJEQy00RUQ0LUIyMjItQjk0M0M4QTkxMTdEPC9zdHJpbmc+Ci0JCQk8c3RyaW5nPkVEQkIwMzdGLUFBRTMtNDUxMi04NjNGLUQ5QUE4MkM5RTUxRTwvc3RyaW5nPgotCQk8L2FycmF5PgotCQk8a2V5PnN1Ym1lbnVzPC9rZXk+Ci0JCTxkaWN0Lz4KLQk8L2RpY3Q+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5QeXRob24tRGV2PC9zdHJpbmc+Ci0JPGtleT5vcmRlcmluZzwva2V5PgotCTxhcnJheT4KLQkJPHN0cmluZz45NTE5QzIyQi02QUI4LTQxQTEtOTRGNi0wNzlFMEI0NUMxNDc8L3N0cmluZz4KLQkJPHN0cmluZz4wNTY4NDEwRC1FQUYxLTRBRjMtQjZERS04QUYxMzNBOTE4MjE8L3N0cmluZz4KLQkJPHN0cmluZz5CNTQ1QkIxQi1BOEUxLTQyNkMtQjUwQS00MjZFNzhCOTZEMzg8L3N0cmluZz4KLQkJPHN0cmluZz42RUYxNTFFNS03MTQ5LTRGODItODc5Ni0wQ0M0MEZFNTg5RkE8L3N0cmluZz4KLQkJPHN0cmluZz5GRDI1QThEQy0yMkRDLTRFRDQtQjIyMi1COTQzQzhBOTExN0Q8L3N0cmluZz4KLQkJPHN0cmluZz5CRjMzNkZGRi1FMTRELTRCRjEtQTE1Ni03MUNGNzY4QUMwMzQ8L3N0cmluZz4KLQkJPHN0cmluZz5FREJCMDM3Ri1BQUUzLTQ1MTItODYzRi1EOUFBODJDOUU1MUU8L3N0cmluZz4KLQk8L2FycmF5PgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+QTkzMkVDRDEtRDQzQS00RjU3LUI3RkItQTFDRUMzQjY1RDIwPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9WaW0vcHl0aG9uLnZpbSBiL01pc2MvVmltL3B5dGhvbi52aW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZWU3ZWIuLjAwMDAwMDAKLS0tIGEvTWlzYy9WaW0vcHl0aG9uLnZpbQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0iIEF1dG8tZ2VuZXJhdGVkIFZpbSBzeW50YXggZmlsZSBmb3IgUHl0aG9uICh0cnVuazogcjYwMzc2TSkuCi0iCi0iIFRvIHVzZTogY29weSBvciBzeW1saW5rIHRvIH4vLnZpbS9zeW50YXgvcHl0aG9uLnZpbQotCi0KLWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCi0gIGZpbmlzaAotZW5kaWYKLQotaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2FsbCIpCi0gIGxldCBweXRob25faGlnaGxpZ2h0X251bWJlcnMgPSAxCi0gIGxldCBweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zID0gMQotICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zID0gMQotICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMgPSAxCi1lbmRpZgotCi1zeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQgICAgYXMgYXNzZXJ0IGJyZWFrIGNvbnRpbnVlIGRlbCBleGNlcHQgZXhlYyBmaW5hbGx5Ci1zeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQgICAgZ2xvYmFsIGxhbWJkYSBwYXNzIHByaW50IHJhaXNlIHJldHVybiB0cnkgd2l0aAotc3luIGtleXdvcmQgcHl0aG9uU3RhdGVtZW50ICAgIHlpZWxkCi0KLXN5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudCAgICBkZWYgY2xhc3MgbmV4dGdyb3VwPXB5dGhvbkZ1bmN0aW9uIHNraXB3aGl0ZQotCi1zeW4gbWF0Y2ggcHl0aG9uRnVuY3Rpb24gICAgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiIGNvbnRhaW5lZAotCi1zeW4ga2V5d29yZCBweXRob25SZXBlYXQgICAgZm9yIHdoaWxlCi0KLXN5biBrZXl3b3JkIHB5dGhvbkNvbmRpdGlvbmFsICAgIGlmIGVsaWYgZWxzZQotCi1zeW4ga2V5d29yZCBweXRob25PcGVyYXRvciAgICBhbmQgaW4gaXMgbm90IG9yCi0KLXN5biBrZXl3b3JkIHB5dGhvblByZUNvbmRpdCAgICBpbXBvcnQgZnJvbQotCi1zeW4gbWF0Y2ggcHl0aG9uQ29tbWVudCAgICAiIy4qJCIgY29udGFpbnM9cHl0aG9uVG9kbwotCi1zeW4ga2V5d29yZCBweXRob25Ub2RvICAgIFRPRE8gRklYTUUgWFhYIGNvbnRhaW5lZAotCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9JysgZW5kPSsnKyBza2lwPStcXFxcXHxcXCcrIGNvbnRhaW5zPXB5dGhvbkVzY2FwZQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPSIrIGVuZD0rIisgc2tpcD0rXFxcXFx8XFwiKyBjb250YWlucz1weXRob25Fc2NhcGUKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD0iIiIrIGVuZD0rIiIiKyAgY29udGFpbnM9cHl0aG9uRXNjYXBlCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9JycnKyBlbmQ9KycnJysgIGNvbnRhaW5zPXB5dGhvbkVzY2FwZQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPVtyUl0nKyBlbmQ9KycrIHNraXA9K1xcXFxcfFxcJysgCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9W3JSXSIrIGVuZD0rIisgc2tpcD0rXFxcXFx8XFwiKyAKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdIiIiKyBlbmQ9KyIiIisgIAotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPVtyUl0nJycrIGVuZD0rJycnKyAgCi0KLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgK1xcW2FiZm5ydHZcJyJcXF0rIGNvbnRhaW5lZAotc3luIG1hdGNoIHB5dGhvbkVzY2FwZSAgICAiXFxcb1x7MSwzfSIgY29udGFpbmVkCi1zeW4gbWF0Y2ggcHl0aG9uRXNjYXBlICAgICJcXHhceFx7Mn0iIGNvbnRhaW5lZAotc3luIG1hdGNoIHB5dGhvbkVzY2FwZSAgICAiXChcXHVceFx7NH1cfFxcVVx4XHs4fVwpIiBjb250YWluZWQKLQotc3luIG1hdGNoIHB5dGhvbkVzY2FwZSAgICAiXFwkIgotCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzIikKLSAgc3luIG1hdGNoIHB5dGhvbk51bWJlciAgICAiXDwweFx4XCtbTGxdXD1cPiIKLSAgc3luIG1hdGNoIHB5dGhvbk51bWJlciAgICAiXDxcZFwrW0xsakpdXD1cPiIKLSAgc3luIG1hdGNoIHB5dGhvbk51bWJlciAgICAiXC5cZFwrXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiIKLSAgc3luIG1hdGNoIHB5dGhvbk51bWJlciAgICAiXDxcZFwrXC5cKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IgotICBzeW4gbWF0Y2ggcHl0aG9uTnVtYmVyICAgICJcPFxkXCtcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IgotCi1lbmRpZgotCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyIpCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgRWxsaXBzaXMgRmFsc2UgTm9uZSBOb3RJbXBsZW1lbnRlZCBUcnVlIF9fZGVidWdfXwotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIF9faW1wb3J0X18gYWJzIGFsbCBhbnkgYm9vbAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGJ1ZmZlciBjYWxsYWJsZSBjaHIgY2xhc3NtZXRob2QgY21wCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgY29tcGxleCBjb3B5cmlnaHQgY3JlZGl0cyBkZWxhdHRyIGRpY3QKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBkaXIgZGl2bW9kIGVudW1lcmF0ZSBldmFsIGV4ZWMgZXhpdAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGZpbHRlciBmbG9hdCBmcm96ZW5zZXQgZ2V0YXR0ciBnbG9iYWxzIGhhc2F0dHIKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBoYXNoIGhlbHAgaGV4IGlkIGludCBpc2luc3RhbmNlCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgaXNzdWJjbGFzcyBpdGVyIGxlbiBsaWNlbnNlIGxpc3QgbG9jYWxzIG1hcAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIG1heCBtaW4gb2JqZWN0IG9jdCBvcGVuIG9yZCBwb3cgcHJvcGVydHkgcXVpdAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHJhbmdlIHJlbG9hZCByZXByIHJldmVyc2VkIHJvdW5kCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgc2V0IHNldGF0dHIgc2xpY2Ugc29ydGVkIHN0YXRpY21ldGhvZCBzdHIgc3VtCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgc3VwZXIgdHJ1bmMgdHVwbGUgdHlwZSB1bmljb2RlIHZhcnMgCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgemlwCi0KLWVuZGlmCi0KLQotaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMiKQotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgQXJpdGhtZXRpY0Vycm9yIEFzc2VydGlvbkVycm9yIEF0dHJpYnV0ZUVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBCYXNlRXhjZXB0aW9uIERlcHJlY2F0aW9uV2FybmluZyBFT0ZFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgRW52aXJvbm1lbnRFcnJvciBFeGNlcHRpb24gRmxvYXRpbmdQb2ludEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBGdXR1cmVXYXJuaW5nIEdlbmVyYXRvckV4aXQgSU9FcnJvciBJbXBvcnRFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgSW1wb3J0V2FybmluZyBJbmRlbnRhdGlvbkVycm9yIEluZGV4RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEtleUVycm9yIEtleWJvYXJkSW50ZXJydXB0IExvb2t1cEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBNZW1vcnlFcnJvciBOYW1lRXJyb3IgTm90SW1wbGVtZW50ZWRFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgT1NFcnJvciBPdmVyZmxvd0Vycm9yIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFJlZmVyZW5jZUVycm9yIFJ1bnRpbWVFcnJvciBSdW50aW1lV2FybmluZwotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgU3RvcEl0ZXJhdGlvbiBTeW50YXhFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgU3ludGF4V2FybmluZyBTeXN0ZW1FcnJvciBTeXN0ZW1FeGl0IFRhYkVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBUeXBlRXJyb3IgVW5ib3VuZExvY2FsRXJyb3IgVW5pY29kZURlY29kZUVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBVbmljb2RlRW5jb2RlRXJyb3IgVW5pY29kZUVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IgVW5pY29kZVdhcm5pbmcKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFVzZXJXYXJuaW5nIFZhbHVlRXJyb3IgV2FybmluZwotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgWmVyb0RpdmlzaW9uRXJyb3IKLQotZW5kaWYKLQotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzIikKLSAgc3luIG1hdGNoIHB5dGhvblNwYWNlRXJyb3IgICAgZGlzcGxheSBleGNsdWRlbmwgIlxTXHNcKyQibXM9cysxCi0gIHN5biBtYXRjaCBweXRob25TcGFjZUVycm9yICAgIGRpc3BsYXkgIiBcK1x0IgotICBzeW4gbWF0Y2ggcHl0aG9uU3BhY2VFcnJvciAgICBkaXNwbGF5ICJcdFwrICIKLQotZW5kaWYKLQotCi0gIGhpIGRlZiBsaW5rIHB5dGhvblN0YXRlbWVudCBTdGF0ZW1lbnQKLSAgaGkgZGVmIGxpbmsgcHl0aG9uU3RhdGVtZW50IFN0YXRlbWVudAotICBoaSBkZWYgbGluayBweXRob25GdW5jdGlvbiBGdW5jdGlvbgotICBoaSBkZWYgbGluayBweXRob25SZXBlYXQgUmVwZWF0Ci0gIGhpIGRlZiBsaW5rIHB5dGhvbkNvbmRpdGlvbmFsIENvbmRpdGlvbmFsCi0gIGhpIGRlZiBsaW5rIHB5dGhvbk9wZXJhdG9yIE9wZXJhdG9yCi0gIGhpIGRlZiBsaW5rIHB5dGhvblByZUNvbmRpdCBQcmVDb25kaXQKLSAgaGkgZGVmIGxpbmsgcHl0aG9uQ29tbWVudCBDb21tZW50Ci0gIGhpIGRlZiBsaW5rIHB5dGhvblRvZG8gVG9kbwotICBoaSBkZWYgbGluayBweXRob25TdHJpbmcgU3RyaW5nCi0gIGhpIGRlZiBsaW5rIHB5dGhvbkVzY2FwZSBTcGVjaWFsCi0gIGhpIGRlZiBsaW5rIHB5dGhvbkVzY2FwZSBTcGVjaWFsCi0KLSAgaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X251bWJlcnMiKQotICAgIGhpIGRlZiBsaW5rIHB5dGhvbk51bWJlciBOdW1iZXIKLSAgZW5kaWYKLQotICBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMiKQotICAgIGhpIGRlZiBsaW5rIHB5dGhvbkJ1aWx0aW4gRnVuY3Rpb24KLSAgZW5kaWYKLQotICBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfZXhjZXB0aW9ucyIpCi0gICAgaGkgZGVmIGxpbmsgcHl0aG9uRXhjZXB0aW9uIEV4Y2VwdGlvbgotICBlbmRpZgotCi0gIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMiKQotICAgIGhpIGRlZiBsaW5rIHB5dGhvblNwYWNlRXJyb3IgRXJyb3IKLSAgZW5kaWYKLQotCi0iIFVuY29tbWVudCB0aGUgJ21pbmxpbmVzJyBzdGF0ZW1lbnQgbGluZSBhbmQgY29tbWVudCBvdXQgdGhlICdtYXhsaW5lcycKLSIgc3RhdGVtZW50IGxpbmU7IGNoYW5nZXMgYmVoYXZpb3VyIHRvIGxvb2sgYXQgbGVhc3QgMjAwMCBsaW5lcyBwcmV2aW91c2x5IGZvcgotIiBzeW50YXggbWF0Y2hlcyBpbnN0ZWFkIG9mIGF0IG1vc3QgMjAwIGxpbmVzCi1zeW4gc3luYyBtYXRjaCBweXRob25TeW5jIGdyb3VwaGVyZSBOT05FICIpOiQiCi1zeW4gc3luYyBtYXhsaW5lcz0yMDAKLSJzeW4gc3luYyBtaW5saW5lcz0yMDAwCi0KLWxldCBiOmN1cnJlbnRfc3ludGF4ID0gInB5dGhvbiIKZGlmZiAtLWdpdCBhL01pc2MvVmltL3N5bnRheF90ZXN0LnB5IGIvTWlzYy9WaW0vc3ludGF4X3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMjA4NjYuLjAwMDAwMDAKLS0tIGEvTWlzYy9WaW0vc3ludGF4X3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0iIiJUZXN0IGZpbGUgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcgb2YgZWRpdG9ycy4KLQotTWVhbnQgdG8gY292ZXIgYSB3aWRlIHJhbmdlIG9mIGRpZmZlcmVudCB0eXBlcyBvZiBzdGF0ZW1lbnRzIGFuZCBleHByZXNzaW9ucy4KLU5vdCBuZWNlc3NhcmlseSBzZW5zaWNhbCBvciBjb21wcmVoZW5zaXZlIChhc3N1bWUgdGhhdCBpZiBvbmUgZXhjZXB0aW9uIGlzCi1oaWdobGlnaHRlZCB0aGF0IGFsbCBhcmUsIGZvciBpbnN0YW5jZSkuCi0KLUV4dHJhbmVvdXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBjYW4ndCBiZSB0ZXN0ZWQgYmVjYXVzZSBvZiBzdm4gcHJlLWNvbW1pdCBob29rCi1jaGVja3MgZm9yIHN1Y2ggdGhpbmdzLgotCi0iIiIKLSMgQ29tbWVudAotIyBPUFRJT05BTDogWFhYIGNhdGNoIHlvdXIgYXR0ZW50aW9uCi0KLSMgU3RhdGVtZW50cwotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudCAgIyBJbXBvcnQKLWZyb20gc3lzIGltcG9ydCBwYXRoIGFzIHRoaW5nCi1hc3NlcnQgVHJ1ZSAjIGtleXdvcmQKLWRlZiBmb28oKTogICMgZnVuY3Rpb24gZGVmaW5pdGlvbgotICAgIHJldHVybiBbXQotY2xhc3MgQmFyKG9iamVjdCk6ICAjIENsYXNzIGRlZmluaXRpb24KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICBwYXNzCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgcGFzcwotZm9vKCkgICMgVU5DT0xPVVJFRDogZnVuY3Rpb24gY2FsbAotd2hpbGUgRmFsc2U6ICAjICd3aGlsZScKLSAgICBjb250aW51ZQotZm9yIHggaW4gZm9vKCk6ICAjICdmb3InCi0gICAgYnJlYWsKLXdpdGggQmFyKCkgYXMgc3R1ZmY6Ci0gICAgcGFzcwotaWYgRmFsc2U6IHBhc3MgICMgJ2lmJwotZWxpZiBGYWxzZTogcGFzcwotZWxzZTogcGFzcwotCi0jIENvbnN0YW50cwotJ3NpbmdsZS1xdW90ZScsIHUndW5pY29kZScgIyBTdHJpbmdzIG9mIGFsbCBraW5kczsgcHJlZml4ZXMgbm90IGhpZ2hsaWdodGVkCi0iZG91YmxlLXF1b3RlIgotIiIidHJpcGxlIGRvdWJsZS1xdW90ZSIiIgotJycndHJpcGxlIHNpbmdsZS1xdW90ZScnJwotcidyYXcnCi11cid1bmljb2RlIHJhdycKLSdlc2NhcGVcbicKLSdcMDQnICAjIG9jdGFsCi0nXHhGRicgIyBoZXgKLSdcdTExMTEnICMgdW5pY29kZSBjaGFyYWN0ZXIKLTEgICMgSW50ZWdyYWwKLTFMCi0xLjAgICMgRmxvYXQKLS4xCi0xKzJqICAjIENvbXBsZXgKLQotIyBFeHByZXNzaW9ucwotMSBhbmQgMiBvciAzICAjIEJvb2xlYW4gb3BlcmF0b3JzCi0yIDwgMyAgIyBVTkNPTE9VUkVEOiBjb21wYXJpc29uIG9wZXJhdG9ycwotc3BhbSA9IDQyICAjIFVOQ09MT1VSRUQ6IGFzc2lnbm1lbnQKLTIgKyAzICAjIFVOQ09MT1VSRUQ6IG51bWJlciBvcGVyYXRvcnMKLVtdICAjIFVOQ09MT1VSRUQ6IGxpc3QKLXt9ICAjIFVOQ09MT1VSRUQ6IGRpY3QKLSgxLCkgICMgVU5DT0xPVVJFRDogdHVwbGUKLWFsbCAgIyBCdWlsdC1pbiBmdW5jdGlvbnMKLUdlbmVyYXRvckV4aXQgICMgRXhjZXB0aW9ucwpkaWZmIC0tZ2l0IGEvTWlzYy9WaW0vdmltX3N5bnRheC5weSBiL01pc2MvVmltL3ZpbV9zeW50YXgucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MmIzNTAuLjAwMDAwMDAKLS0tIGEvTWlzYy9WaW0vdmltX3N5bnRheC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50Ci0jIFhYWChubm9yd2l0eik6IHdoYXQgdmVyc2lvbnMgb2YgcHl0aG9uIGlzIHRoaXMgZmlsZSBzdXBwb3NlZCB0byB3b3JrIHdpdGg/Ci0jIEl0IHVzZXMgdGhlIG9sZCBwcmludCBzdGF0ZW1lbnQgbm90IGluIHB5M2suCi0KLWltcG9ydCBrZXl3b3JkCi1pbXBvcnQgZXhjZXB0aW9ucwotaW1wb3J0IGJ1aWx0aW5zCi1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLWZyb20gc3lzIGltcG9ydCBzdWJ2ZXJzaW9uCi0KLWNvbW1lbnRfaGVhZGVyID0gJycnIiBBdXRvLWdlbmVyYXRlZCBWaW0gc3ludGF4IGZpbGUgZm9yIFB5dGhvbiAoJXM6IHIlcykuCi0iCi0iIFRvIHVzZTogY29weSBvciBzeW1saW5rIHRvIH4vLnZpbS9zeW50YXgvcHl0aG9uLnZpbScnJwotCi1zdGF0ZW1lbnRfaGVhZGVyID0gIiIiCi1pZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQotICBmaW5pc2gKLWVuZGlmIiIiCi0KLXN0YXRlbWVudF9mb290ZXIgPSAnJycKLSIgVW5jb21tZW50IHRoZSAnbWlubGluZXMnIHN0YXRlbWVudCBsaW5lIGFuZCBjb21tZW50IG91dCB0aGUgJ21heGxpbmVzJwotIiBzdGF0ZW1lbnQgbGluZTsgY2hhbmdlcyBiZWhhdmlvdXIgdG8gbG9vayBhdCBsZWFzdCAyMDAwIGxpbmVzIHByZXZpb3VzbHkgZm9yCi0iIHN5bnRheCBtYXRjaGVzIGluc3RlYWQgb2YgYXQgbW9zdCAyMDAgbGluZXMKLXN5biBzeW5jIG1hdGNoIHB5dGhvblN5bmMgZ3JvdXBoZXJlIE5PTkUgIik6JCIKLXN5biBzeW5jIG1heGxpbmVzPTIwMAotInN5biBzeW5jIG1pbmxpbmVzPTIwMDAKLQotbGV0IGI6Y3VycmVudF9zeW50YXggPSAicHl0aG9uIicnJwotCi1sb29waW5nID0gKCdmb3InLCAnd2hpbGUnKQotY29uZGl0aW9uYWxzID0gKCdpZicsICdlbGlmJywgJ2Vsc2UnKQotYm9vbGVhbl9vcHMgPSAoJ2FuZCcsICdpbicsICdpcycsICdub3QnLCAnb3InKQotaW1wb3J0X3N0bXRzID0gKCdpbXBvcnQnLCAnZnJvbScpCi1vYmplY3RfZGVmcyA9ICgnZGVmJywgJ2NsYXNzJykKLQotZXhjZXB0aW9uX25hbWVzID0gc29ydGVkKGV4YyBmb3IgZXhjIGluIGRpcihleGNlcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZXhjLnN0YXJ0c3dpdGgoJ19fJykpCi0KLSMgTmVlZCB0byBpbmNsdWRlIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0IHdpdGggJ19fJyAoZS5nLiwgX19pbXBvcnRfXyksIGJ1dAotIyBub3RoaW5nIHRoYXQgY29tZXMgd2l0aCBtb2R1bGVzIChlLmcuLCBfX25hbWVfXyksIHNvIGp1c3QgZXhjbHVkZSBhbnl0aGluZyBpbgotIyB0aGUgJ2V4Y2VwdGlvbnMnIG1vZHVsZSBzaW5jZSB3ZSB3YW50IHRvIGlnbm9yZSBleGNlcHRpb25zICphbmQqIHdoYXQgYW55Ci0jIG1vZHVsZSB3b3VsZCBoYXZlCi1idWlsdGluX25hbWVzID0gc29ydGVkKGJ1aWx0aW4gZm9yIGJ1aWx0aW4gaW4gZGlyKGJ1aWx0aW5zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJ1aWx0aW4gbm90IGluIGRpcihleGNlcHRpb25zKSkKLQotZXNjYXBlcyA9IChyJytcXFthYmZucnR2XCciXFxdKycsIHInIlxcXG9cezEsM30iJywgciciXFx4XHhcezJ9IicsCi0gICAgICAgICAgICByJyJcKFxcdVx4XHs0fVx8XFxVXHhcezh9XCkiJywgciciXFwkIicpCi0KLXRvZG9zID0gKCJUT0RPIiwgIkZJWE1FIiwgIlhYWCIpCi0KLSMgWFhYIGNvZGlmeT8KLW51bWJlcnMgPSAociciXDwweFx4XCtbTGxdXD1cPiInLCByJyJcPFxkXCtbTGxqSl1cPVw+IicsCi0gICAgICAgICAgICAnIlwuXGRcK1woW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iJywKLSAgICAgICAgICAgICciXDxcZFwrXC5cKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IicsCi0gICAgICAgICAgICAnIlw8XGRcK1wuXGRcK1woW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iJykKLQotY29udGFpbmVkID0gbGFtYmRhIHg6ICIlcyBjb250YWluZWQiICUgeAotCi1kZWYgc3RyX3JlZ2V4ZXMoKToKLSAgICAiIiJHZW5lcmF0b3IgdG8geWllbGQgdmFyaW91cyBjb21iaW5hdGlvbnMgb2Ygc3RyaW5ncyByZWdleGVzIiIiCi0gICAgcmVnZXhfdGVtcGxhdGUgPSBUZW1wbGF0ZSgnbWF0Y2hncm91cD1Ob3JtYWwgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydD0rW3VVXVw9JHtyYXd9JHtzZXB9KyAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZD0rJHtzZXB9KyAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyR7c2tpcH0gJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcke2NvbnRhaW5zfScpCi0gICAgc2tpcF9yZWdleCA9IFRlbXBsYXRlKHInc2tpcD0rXFxcXFx8XFwke3NlcH0rJykKLSAgICBmb3IgcmF3IGluICgnJywgJ1tyUl0nKToKLSAgICAgICAgZm9yIHNlcGFyYXRvciBpbiAoIiciLCAnIicsICciIiInLCAiJycnIik6Ci0gICAgICAgICAgICBpZiBsZW4oc2VwYXJhdG9yKSA9PSAxOgotICAgICAgICAgICAgICAgIHNraXAgPSBza2lwX3JlZ2V4LnN1YnN0aXR1dGUoc2VwPXNlcGFyYXRvcikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2tpcCA9ICcnCi0gICAgICAgICAgICBjb250YWlucyA9ICdjb250YWlucz1weXRob25Fc2NhcGUnIGlmIG5vdCByYXcgZWxzZSAnJwotICAgICAgICAgICAgeWllbGQgcmVnZXhfdGVtcGxhdGUuc3Vic3RpdHV0ZShyYXc9cmF3LCBzZXA9c2VwYXJhdG9yLCBza2lwPXNraXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zID0gY29udGFpbnMpCi0KLXNwYWNlX2Vycm9ycyA9IChyJ2V4Y2x1ZGVubCAiXFNcc1wrJCJtcz1zKzEnLCByJyIgXCtcdCInLCByJyJcdFwrICInKQotCi1zdGF0ZW1lbnRzID0gKAotICAgICAgICAgICAgICAgICgnJywKLSAgICAgICAgICAgICAgICAgICAgIyBYWFggTWlnaHQgbmVlZCB0byBjaGFuZ2UgcHl0aG9uU3RhdGVtZW50IHNpbmNlIGhhdmUKLSAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWZpYyBSZXBlYXQsIENvbmRpdGlvbmFsLCBPcGVyYXRvciwgZXRjLiBmb3IgJ3doaWxlJywKLSAgICAgICAgICAgICAgICAgICAgIyBldGMuCi0gICAgICAgICAgICAgICAgICAgIFsoIlN0YXRlbWVudCIsICJweXRob25TdGF0ZW1lbnQiLCAia2V5d29yZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAoa3cgZm9yIGt3IGluIGtleXdvcmQua3dsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYga3cgbm90IGluIChsb29waW5nICsgY29uZGl0aW9uYWxzICsgYm9vbGVhbl9vcHMgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9zdG10cyArIG9iamVjdF9kZWZzKSkKLSAgICAgICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICAgICAgKCJTdGF0ZW1lbnQiLCAicHl0aG9uU3RhdGVtZW50IiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICgnICcuam9pbihvYmplY3RfZGVmcykgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIG5leHRncm91cD1weXRob25GdW5jdGlvbiBza2lwd2hpdGUnKSksCi0gICAgICAgICAgICAgICAgICAgICAoIkZ1bmN0aW9uIiwicHl0aG9uRnVuY3Rpb24iLCAibWF0Y2giLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZCgnIlthLXpBLVpfXVthLXpBLVowLTlfXSoiJykpLAotICAgICAgICAgICAgICAgICAgICAgKCJSZXBlYXQiLCAicHl0aG9uUmVwZWF0IiwgImtleXdvcmQiLCBsb29waW5nKSwKLSAgICAgICAgICAgICAgICAgICAgICgiQ29uZGl0aW9uYWwiLCAicHl0aG9uQ29uZGl0aW9uYWwiLCAia2V5d29yZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxzKSwKLSAgICAgICAgICAgICAgICAgICAgICgiT3BlcmF0b3IiLCAicHl0aG9uT3BlcmF0b3IiLCAia2V5d29yZCIsIGJvb2xlYW5fb3BzKSwKLSAgICAgICAgICAgICAgICAgICAgICgiUHJlQ29uZGl0IiwgInB5dGhvblByZUNvbmRpdCIsICJrZXl3b3JkIiwgaW1wb3J0X3N0bXRzKSwKLSAgICAgICAgICAgICAgICAgICAgICgiQ29tbWVudCIsICJweXRob25Db21tZW50IiwgIm1hdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnIiMuKiQiIGNvbnRhaW5zPXB5dGhvblRvZG8nKSwKLSAgICAgICAgICAgICAgICAgICAgICgiVG9kbyIsICJweXRob25Ub2RvIiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZCgnICcuam9pbih0b2RvcykpKSwKLSAgICAgICAgICAgICAgICAgICAgICgiU3RyaW5nIiwgInB5dGhvblN0cmluZyIsICJyZWdpb24iLCBzdHJfcmVnZXhlcygpKSwKLSAgICAgICAgICAgICAgICAgICAgICgiU3BlY2lhbCIsICJweXRob25Fc2NhcGUiLCAibWF0Y2giLAotICAgICAgICAgICAgICAgICAgICAgICAgIChjb250YWluZWQoZXNjKSBmb3IgZXNjIGluIGVzY2FwZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90ICckJyBpbiBlc2MpKSwKLSAgICAgICAgICAgICAgICAgICAgICgiU3BlY2lhbCIsICJweXRob25Fc2NhcGUiLCAibWF0Y2giLCByJyJcXCQiJyksCi0gICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICgicHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzIiwKLSAgICAgICAgICAgICAgICAgICAgWygiTnVtYmVyIiwgInB5dGhvbk51bWJlciIsICJtYXRjaCIsIG51bWJlcnMpXQotICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgKCJweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zIiwKLSAgICAgICAgICAgICAgICAgICAgWygiRnVuY3Rpb24iLCAicHl0aG9uQnVpbHRpbiIsICJrZXl3b3JkIiwgYnVpbHRpbl9uYW1lcyldCi0gICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAoInB5dGhvbl9oaWdobGlnaHRfZXhjZXB0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgIFsoIkV4Y2VwdGlvbiIsICJweXRob25FeGNlcHRpb24iLCAia2V5d29yZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fbmFtZXMpXQotICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgKCJweXRob25faGlnaGxpZ2h0X3NwYWNlX2Vycm9ycyIsCi0gICAgICAgICAgICAgICAgICAgIFsoIkVycm9yIiwgInB5dGhvblNwYWNlRXJyb3IiLCAibWF0Y2giLAotICAgICAgICAgICAgICAgICAgICAgICAgKCJkaXNwbGF5ICIgKyBlcnIgZm9yIGVyciBpbiBzcGFjZV9lcnJvcnMpKV0KLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgKQotCi1kZWYgc3luX3ByZWZpeCh0eXBlXywga2luZCk6Ci0gICAgcmV0dXJuICdzeW4gJXMgJXMgICAgJyAlICh0eXBlXywga2luZCkKLQotZGVmIGZpbGxfc3RtdChpdGVyYWJsZSwgZmlsbF9sZW4pOgotICAgICIiIllpZWxkIGEgc3RyaW5nIHRoYXQgZmlsbHMgYXQgbW9zdCBmaWxsX2xlbiBjaGFyYWN0ZXJzIHdpdGggc3RyaW5ncwotICAgIHJldHVybmVkIGJ5ICdpdGVyYWJsZScgYW5kIHNlcGFyYXRlZCBieSBhIHNwYWNlIiIiCi0gICAgIyBEZWFsIHdpdGggdHJhaWxpbmcgY2hhciB0byBoYW5kbGUgJyAnLmpvaW4oKSBjYWxjdWxhdGlvbgotICAgIGZpbGxfbGVuICs9IDEKLSAgICBvdmVyZmxvdyA9IE5vbmUKLSAgICBpdCA9IGl0ZXIoaXRlcmFibGUpCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgYnVmZmVyXyA9IFtdCi0gICAgICAgIHRvdGFsX2xlbiA9IDAKLSAgICAgICAgaWYgb3ZlcmZsb3c6Ci0gICAgICAgICAgICBidWZmZXJfLmFwcGVuZChvdmVyZmxvdykKLSAgICAgICAgICAgIHRvdGFsX2xlbiArPSBsZW4ob3ZlcmZsb3cpICsgMQotICAgICAgICAgICAgb3ZlcmZsb3cgPSBOb25lCi0gICAgICAgIHdoaWxlIHRvdGFsX2xlbiA8IGZpbGxfbGVuOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG5ld19pdGVtID0gbmV4dChpdCkKLSAgICAgICAgICAgICAgICBidWZmZXJfLmFwcGVuZChuZXdfaXRlbSkKLSAgICAgICAgICAgICAgICB0b3RhbF9sZW4gKz0gbGVuKG5ld19pdGVtKSArIDEKLSAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgIGlmIGJ1ZmZlcl86Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaWYgb3ZlcmZsb3c6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIG92ZXJmbG93Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHRvdGFsX2xlbiA+IGZpbGxfbGVuOgotICAgICAgICAgICAgb3ZlcmZsb3cgPSBidWZmZXJfLnBvcCgpCi0gICAgICAgICAgICB0b3RhbF9sZW4gLT0gbGVuKG92ZXJmbG93KSAtIDEKLSAgICAgICAgcmV0ID0gJyAnLmpvaW4oYnVmZmVyXykKLSAgICAgICAgYXNzZXJ0IGxlbihyZXQpIDw9IGZpbGxfbGVuCi0gICAgICAgIHlpZWxkIHJldAotCi1GSUxMID0gODAKLQotZGVmIG1haW4oZmlsZV9wYXRoKToKLSAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAndycpIGFzIEZJTEU6Ci0gICAgICAgICMgQ29tbWVudCBmb3IgZmlsZQotICAgICAgICBwcmludD4+RklMRSwgY29tbWVudF9oZWFkZXIgJSBzdWJ2ZXJzaW9uWzE6XQotICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgIyBTdGF0ZW1lbnRzIGF0IHN0YXJ0IG9mIGZpbGUKLSAgICAgICAgcHJpbnQ+PkZJTEUsIHN0YXRlbWVudF9oZWFkZXIKLSAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgR2VuZXJhdGUgY2FzZSBmb3IgcHl0aG9uX2hpZ2hsaWdodF9hbGwKLSAgICAgICAgcHJpbnQ+PkZJTEUsICdpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYWxsIiknCi0gICAgICAgIGZvciBzdGF0ZW1lbnRfdmFyLCBzdGF0ZW1lbnRfcGFydHMgaW4gc3RhdGVtZW50czoKLSAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcgIGxldCAlcyA9IDEnICUgc3RhdGVtZW50X3ZhcgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICdlbmRpZicKLSAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAjIEdlbmVyYXRlIFB5dGhvbiBncm91cHMKLSAgICAgICAgZm9yIHN0YXRlbWVudF92YXIsIHN0YXRlbWVudF9wYXJ0cyBpbiBzdGF0ZW1lbnRzOgotICAgICAgICAgICAgaWYgc3RhdGVtZW50X3ZhcjoKLSAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJ2lmIGV4aXN0cygiJXMiKScgJSBzdGF0ZW1lbnRfdmFyCi0gICAgICAgICAgICAgICAgaW5kZW50ID0gJyAgJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpbmRlbnQgPSAnJwotICAgICAgICAgICAgZm9yIGNvbG91cl9ncm91cCwgZ3JvdXAsIHR5cGVfLCBhcmd1bWVudHMgaW4gc3RhdGVtZW50X3BhcnRzOgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZ3VtZW50cywgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHN5bl9wcmVmaXgodHlwZV8sIGdyb3VwKQotICAgICAgICAgICAgICAgICAgICBpZiB0eXBlXyA9PSAna2V5d29yZCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG10X2l0ZXIgPSBmaWxsX3N0bXQoYXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxMIC0gbGVuKHByZWZpeCkgLSBsZW4oaW5kZW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgaW5kZW50ICsgcHJlZml4ICsgbmV4dChzdG10X2l0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudCBpbiBhcmd1bWVudHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIGluZGVudCArIHByZWZpeCArIGFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIGluZGVudCArIHN5bl9wcmVmaXgodHlwZV8sIGdyb3VwKSArIGFyZ3VtZW50cwotICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgc3RhdGVtZW50X3ZhcjoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICdlbmRpZicKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgIyBBc3NvY2lhdGluZyBQeXRob24gZ3JvdXAgd2l0aCBWaW0gY29sb3VyIGdyb3VwCi0gICAgICAgIGZvciBzdGF0ZW1lbnRfdmFyLCBzdGF0ZW1lbnRfcGFydHMgaW4gc3RhdGVtZW50czoKLSAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcgIGlmIGV4aXN0cygiJXMiKScgJSBzdGF0ZW1lbnRfdmFyCi0gICAgICAgICAgICAgICAgaW5kZW50ID0gJyAgICAnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGluZGVudCA9ICcgICcKLSAgICAgICAgICAgIGZvciBjb2xvdXJfZ3JvdXAsIGdyb3VwLCB0eXBlXywgYXJndW1lbnRzIGluIHN0YXRlbWVudF9wYXJ0czoKLSAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgKGluZGVudCArICJoaSBkZWYgbGluayAlcyAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3JvdXAsIGNvbG91cl9ncm91cCkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnICBlbmRpZicKLSAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgIyBTdGF0ZW1lbnRzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKLSAgICAgICAgcHJpbnQ+PkZJTEUsIHN0YXRlbWVudF9mb290ZXIKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCJweXRob24udmltIikKZGlmZiAtLWdpdCBhL01pc2MvVmltL3ZpbXJjIGIvTWlzYy9WaW0vdmltcmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOThjY2EuLjAwMDAwMDAKLS0tIGEvTWlzYy9WaW0vdmltcmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0iIHZpbXJjIGZpbGUgZm9yIGZvbGxvd2luZyB0aGUgY29kaW5nIHN0YW5kYXJkcyBzcGVjaWZpZWQgaW4gUEVQIDcgJiA4LgotIgotIiBUbyB1c2UgdGhpcyBmaWxlLCBzb3VyY2UgaXQgaW4geW91ciBvd24gcGVyc29uYWwgLnZpbXJjIGZpbGUgKGBgc291cmNlCi0iIDxmaWxlbmFtZT5gYCkgb3IsIGlmIHlvdSBkb24ndCBoYXZlIGEgLnZpbXJjIGZpbGUsIHlvdSBjYW4ganVzdCBzeW1saW5rIHRvIGl0Ci0iIChgYGxuIC1zIDx0aGlzIGZpbGU+IH4vLnZpbXJjYGApLiAgQWxsIG9wdGlvbnMgYXJlIHByb3RlY3RlZCBieSBhdXRvY21kcwotIiAocmVhZCBiZWxvdyBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGNvbW1hbmQpIHNvIGJsaW5kIHNvdXJjaW5nIG9mIHRoaXMgZmlsZQotIiBpcyBzYWZlIGFuZCB3aWxsIG5vdCBhZmZlY3QgeW91ciBzZXR0aW5ncyBmb3Igbm9uLVB5dGhvbiBvciBub24tQyBmaWxlcy4KLSIKLSIKLSIgQWxsIHNldHRpbmcgYXJlIHByb3RlY3RlZCBieSAnYXUnICgnYXV0b2NtZCcpIHN0YXRlbWVudHMuICBPbmx5IGZpbGVzIGVuZGluZwotIiBpbiAucHkgb3IgLnB5dyB3aWxsIHRyaWdnZXIgdGhlIFB5dGhvbiBzZXR0aW5ncyB3aGlsZSBmaWxlcyBlbmRpbmcgaW4gKi5jIG9yCi0iICouaCB3aWxsIHRyaWdnZXIgdGhlIEMgc2V0dGluZ3MuICBUaGlzIG1ha2VzIHRoZSBmaWxlICJzYWZlIiBpbiB0ZXJtcyBvZiBvbmx5Ci0iIGFkanVzdGluZyBzZXR0aW5ncyBmb3IgUHl0aG9uIGFuZCBDIGZpbGVzLgotIgotIiBPbmx5IGJhc2ljIHNldHRpbmdzIG5lZWRlZCB0byBlbmZvcmNlIHRoZSBzdHlsZSBndWlkZWxpbmVzIGFyZSBzZXQuCi0iIFNvbWUgc3VnZ2VzdGVkIG9wdGlvbnMgYXJlIGxpc3RlZCBidXQgY29tbWVudGVkIG91dCBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KLQotIiBOdW1iZXIgb2Ygc3BhY2VzIHRoYXQgYSBwcmUtZXhpc3RpbmcgdGFiIGlzIGVxdWFsIHRvLgotIiBGb3IgdGhlIGFtb3VudCBvZiBzcGFjZSB1c2VkIGZvciBhIG5ldyB0YWIgdXNlIHNoaWZ0d2lkdGguCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKnB5LCpweXcsKi5jLCouaCBzZXQgdGFic3RvcD04Ci0KLSIgV2hhdCB0byB1c2UgZm9yIGFuIGluZGVudC4KLSIgVGhpcyB3aWxsIGFmZmVjdCBDdHJsLVQgYW5kICdhdXRvaW5kZW50Jy4KLSIgUHl0aG9uOiA0IHNwYWNlcwotIiBDOiB0YWJzIChwcmUtZXhpc3RpbmcgZmlsZXMpIG9yIDQgc3BhY2VzIChuZXcgZmlsZXMpCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqcHl3IHNldCBzaGlmdHdpZHRoPTQKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCoucHl3IHNldCBleHBhbmR0YWIKLWZ1IFNlbGVjdF9jX3N0eWxlKCkKLSAgICBpZiBzZWFyY2goJ15cdCcsICduJywgMTUwKQotICAgICAgICBzZXQgc2hpZnR3aWR0aD04Ci0gICAgICAgIHNldCBub2V4cGFuZHRhYgotICAgIGVsIAotICAgICAgICBzZXQgc2hpZnR3aWR0aD00Ci0gICAgICAgIHNldCBleHBhbmR0YWIKLSAgICBlbgotZW5kZgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICouYywqLmggY2FsbCBTZWxlY3RfY19zdHlsZSgpCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgTWFrZWZpbGUqIHNldCBub2V4cGFuZHRhYgotCi0iIFVzZSB0aGUgYmVsb3cgaGlnaGxpZ2h0IGdyb3VwIHdoZW4gZGlzcGxheWluZyBiYWQgd2hpdGVzcGFjZSBpcyBkZXNpcmVkLgotaGlnaGxpZ2h0IEJhZFdoaXRlc3BhY2UgY3Rlcm1iZz1yZWQgZ3VpYmc9cmVkCi0KLSIgRGlzcGxheSB0YWJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGluIFB5dGhvbiBtb2RlIGFzIGJhZC4KLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCoucHl3IG1hdGNoIEJhZFdoaXRlc3BhY2UgL15cdFwrLwotIiBNYWtlIHRyYWlsaW5nIHdoaXRlc3BhY2UgYmUgZmxhZ2dlZCBhcyBiYWQuCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dywqLmMsKi5oLCoucnN0IG1hdGNoIEJhZFdoaXRlc3BhY2UgL1xzXCskLwotCi0iIFdyYXAgdGV4dCBhZnRlciBhIGNlcnRhaW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMKLSIgUHl0aG9uOiA3OSAKLSIgQzogNzkKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCoucHl3LCouYywqLmggc2V0IHRleHR3aWR0aD03OQotCi0iIFR1cm4gb2ZmIHNldHRpbmdzIGluICdmb3JtYXRvcHRpb25zJyByZWxhdGluZyB0byBjb21tZW50IGZvcm1hdHRpbmcuCi0iIC0gYyA6IGRvIG5vdCBhdXRvbWF0aWNhbGx5IGluc2VydCB0aGUgY29tbWVudCBsZWFkZXIgd2hlbiB3cmFwcGluZyBiYXNlZCBvbgotIiAgICAndGV4dHdpZHRoJwotIiAtIG8gOiBkbyBub3QgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlciB3aGVuIHVzaW5nICdvJyBvciAnTycgZnJvbSBjb21tYW5kIG1vZGUKLSIgLSByIDogZG8gbm90IGluc2VydCB0aGUgY29tbWVudCBsZWFkZXIgd2hlbiBoaXR0aW5nIDxFbnRlcj4gaW4gaW5zZXJ0IG1vZGUKLSIgUHl0aG9uOiBub3QgbmVlZGVkCi0iIEM6IHByZXZlbnRzIGluc2VydGlvbiBvZiAnKicgYXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSBsaW5lIGluIGEgY29tbWVudAotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICouYywqLmggc2V0IGZvcm1hdG9wdGlvbnMtPWMgZm9ybWF0b3B0aW9ucy09byBmb3JtYXRvcHRpb25zLT1yCi0KLSIgVXNlIFVOSVggKFxuKSBsaW5lIGVuZGluZ3MuCi0iIE9ubHkgdXNlZCBmb3IgbmV3IGZpbGVzIHNvIGFzIHRvIG5vdCBmb3JjZSBleGlzdGluZyBmaWxlcyB0byBjaGFuZ2UgdGhlaXIKLSIgbGluZSBlbmRpbmdzLgotIiBQeXRob246IHllcwotIiBDOiB5ZXMKLWF1IEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dywqLmMsKi5oIHNldCBmaWxlZm9ybWF0PXVuaXgKLQotCi0iIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSIgVGhlIGZvbGxvd2luZyBzZWN0aW9uIGNvbnRhaW5zIHN1Z2dlc3RlZCBzZXR0aW5ncy4gIFdoaWxlIGluIG5vIHdheSByZXF1aXJlZAotIiB0byBtZWV0IGNvZGluZyBzdGFuZGFyZHMsIHRoZXkgYXJlIGhlbHBmdWwuCi0KLSIgU2V0IHRoZSBkZWZhdWx0IGZpbGUgZW5jb2RpbmcgdG8gVVRGLTg6IGBgc2V0IGVuY29kaW5nPXV0Zi04YGAKLQotIiBQdXRzIGEgbWFya2VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIFVURiBhbmQKLSIgVUNTIGVuY29kaW5nIChXQVJOSU5HOiBjYW4gdHJpY2sgc2hlbGxzIGludG8gdGhpbmtpbmcgYSB0ZXh0IGZpbGUgaXMgYWN0dWFsbHkKLSIgYSBiaW5hcnkgZmlsZSB3aGVuIGV4ZWN1dGluZyB0aGUgdGV4dCBmaWxlKTogYGBzZXQgYm9tYmBgCi0KLSIgRm9yIGZ1bGwgc3ludGF4IGhpZ2hsaWdodGluZzoKLSJgYGxldCBweXRob25faGlnaGxpZ2h0X2FsbD0xYGAKLSJgYHN5bnRheCBvbmBgCi0KLSIgQXV0b21hdGljYWxseSBpbmRlbnQgYmFzZWQgb24gZmlsZSB0eXBlOiBgYGZpbGV0eXBlIGluZGVudCBvbmBgCi0iIEtlZXAgaW5kZW50YXRpb24gbGV2ZWwgZnJvbSBwcmV2aW91cyBsaW5lOiBgYHNldCBhdXRvaW5kZW50YGAKLQotIiBGb2xkaW5nIGJhc2VkIG9uIGluZGVudGF0aW9uOiBgYHNldCBmb2xkbWV0aG9kPWluZGVudGBgCmRpZmYgLS1naXQgYS9NaXNjL2NvdmVyaXR5X21vZGVsLmMgYi9NaXNjL2NvdmVyaXR5X21vZGVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmM2FlYgotLS0gL2Rldi9udWxsCisrKyBiL01pc2MvY292ZXJpdHlfbW9kZWwuYwpAQCAtMCwwICsxLDEzMiBAQAorLyogQ292ZXJpdHkgU2NhbiBtb2RlbAorICoKKyAqIFRoaXMgaXMgYSBtb2RlbGluZyBmaWxlIGZvciBDb3Zlcml0eSBTY2FuLiBNb2RlbGluZyBoZWxwcyB0byBhdm9pZCBmYWxzZQorICogcG9zaXRpdmVzLgorICoKKyAqIC0gQSBtb2RlbCBmaWxlIGNhbid0IGltcG9ydCBhbnkgaGVhZGVyIGZpbGVzLgorICogLSBUaGVyZWZvcmUgb25seSBzb21lIGJ1aWx0LWluIHByaW1pdGl2ZXMgbGlrZSBpbnQsIGNoYXIgYW5kIHZvaWQgYXJlCisgKiAgIGF2YWlsYWJsZSBidXQgbm90IHdjaGFyX3QsIE5VTEwgZXRjLgorICogLSBNb2RlbGluZyBkb2Vzbid0IG5lZWQgZnVsbCBzdHJ1Y3RzIGFuZCB0eXBlZGVmcy4gUnVkaW1lbnRhcnkgc3RydWN0cworICogICBhbmQgc2ltaWxhciB0eXBlcyBhcmUgc3VmZmljaWVudC4KKyAqIC0gQW4gdW5pbml0aWFsaXplZCBsb2NhbCBwb2ludGVyIGlzIG5vdCBhbiBlcnJvci4gSXQgc2lnbmlmaWVzIHRoYXQgdGhlCisgKiAgIHZhcmlhYmxlIGNvdWxkIGJlIGVpdGhlciBOVUxMIG9yIGhhdmUgc29tZSBkYXRhLgorICoKKyAqIENvdmVyaXR5IFNjYW4gZG9lc24ndCBwaWNrIHVwIG1vZGlmaWNhdGlvbnMgYXV0b21hdGljYWxseS4gVGhlIG1vZGVsIGZpbGUKKyAqIG11c3QgYmUgdXBsb2FkZWQgYnkgYW4gYWRtaW4gaW4gdGhlIGFuYWx5c2lzIHNldHRpbmdzIG9mCisgKiBodHRwOi8vc2Nhbi5jb3Zlcml0eS5jb20vcHJvamVjdHMvMjAwCisgKi8KKworLyogZHVtbXkgZGVmaW5pdGlvbnMsIGluIG1vc3QgY2FzZXMgc3RydWN0IGZpZWxkcyBhcmVuJ3QgcmVxdWlyZWQuICovCisKKyNkZWZpbmUgTlVMTCAodm9pZCAqKTAKKyNkZWZpbmUgYXNzZXJ0KG9wKSAvKiBlbXB0eSAqLwordHlwZWRlZiBpbnQgc2RpZ2l0OwordHlwZWRlZiBsb25nIFB5X3NzaXplX3Q7Cit0eXBlZGVmIGxvbmcgbG9uZyBQWV9MT05HX0xPTkc7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHdjaGFyX3Q7Cit0eXBlZGVmIHN0cnVjdCB7fSBQeU9iamVjdDsKK3R5cGVkZWYgc3RydWN0IHt9IGdyYW1tYXI7Cit0eXBlZGVmIHN0cnVjdCB7fSBESVI7Cit0eXBlZGVmIHN0cnVjdCB7fSBSRklMRTsKKworLyogUHl0aG9uL3B5dGhvbnJ1bi5jCisgKiByZXNvdXJlY2UgbGVhayBmYWxzZSBwb3NpdGl2ZSAqLworCit2b2lkIFB5X0ZhdGFsRXJyb3IoY29uc3QgY2hhciAqbXNnKSB7CisgICAgX19jb3Zlcml0eV9wYW5pY19fKCk7Cit9CisKKy8qIE9iamVjdHMvbG9uZ29iamVjdC5jCisgKiBORUdBVElWRV9SRVRVUk5TIGZhbHNlIHBvc2l0aXZlICovCisKK3N0YXRpYyBQeU9iamVjdCAqZ2V0X3NtYWxsX2ludChzZGlnaXQgaXZhbCkKK3sKKyAgICAvKiBOZXZlciByZXR1cm5zIE5VTEwgKi8KKyAgICBQeU9iamVjdCAqcDsKKyAgICBhc3NlcnQocCAhPSBOVUxMKTsKKyAgICByZXR1cm4gcDsKK30KKworUHlPYmplY3QgKlB5TG9uZ19Gcm9tTG9uZyhsb25nIGl2YWwpCit7CisgICAgUHlPYmplY3QgKnA7CisgICAgaW50IG1heWJlOworCisgICAgaWYgKChpdmFsID49IC01KSAmJiAoaXZhbCA8IDI1NyArIDUpKSB7CisgICAgICAgIHAgPSBnZXRfc21hbGxfaW50KGl2YWwpOworICAgICAgICBhc3NlcnQocCAhPSBOVUxMKTsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorICAgIGlmIChtYXliZSkKKyAgICAgICAgcmV0dXJuIHA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gTlVMTDsKK30KKworUHlPYmplY3QgKlB5TG9uZ19Gcm9tTG9uZ0xvbmcoUFlfTE9OR19MT05HIGl2YWwpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZylpdmFsKTsKK30KKworUHlPYmplY3QgKlB5TG9uZ19Gcm9tU3NpemVfdChQeV9zc2l6ZV90IGl2YWwpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZylpdmFsKTsKK30KKworLyogdGFpbnRlZCBzaW5rcworICoKKyAqIENvdmVyaXR5IGNvbnNpZGVycyBhcmd2LCBlbnZpcm9uLCByZWFkKCkgZGF0YSBldGMgYXMgdGFpbmVkLgorICovCisKK1B5T2JqZWN0ICpQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlPYmplY3QgKmV4YywgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2lua19fKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogUHl0aG9uL2ZpbGV1dGlscy5jICovCit3Y2hhcl90ICpfUHlfY2hhcjJ3Y2hhcihjb25zdCBjaGFyKiBhcmcsIHNpemVfdCAqc2l6ZSkKK3sKKyAgIHdjaGFyX3QgKnc7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2lua19fKGFyZyk7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2lua19fKHNpemUpOworICAgcmV0dXJuIHc7Cit9CisKKy8qIFBhcnNlci9wZ2VubWFpbi5jICovCitncmFtbWFyICpnZXRncmFtbWFyKGNoYXIgKmZpbGVuYW1lKQoreworICAgIGdyYW1tYXIgKmc7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2lua19fKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gZzsKK30KKworLyogUHl0aG9uL21hcnNoYWwuYyAqLworCitzdGF0aWMgUHlfc3NpemVfdCByX3N0cmluZyhjaGFyICpzLCBQeV9zc2l6ZV90IG4sIFJGSUxFICpwKQoreworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9zdHJpbmdfYXJndW1lbnRfXyhzKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgcl9sb25nKFJGSUxFICpwKQoreworICAgIGxvbmcgbDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0XTsKKworICAgIHJfc3RyaW5nKChjaGFyICopYnVmZmVyLCA0LCBwKTsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfc3RyaW5nX3Nhbml0aXplX2NvbnRlbnRfXyhidWZmZXIpOworICAgIGwgPSAobG9uZylidWZmZXI7CisgICAgcmV0dXJuIGw7Cit9CisKKy8qIENvdmVyaXR5IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGF0IGZkb3BlbmRpcigpIG1heSB0YWtlIG93bmVyc2hpcCBvZiBmZC4gKi8KKworRElSICpmZG9wZW5kaXIoaW50IGZkKSB7CisgICAgRElSICpkOworICAgIGlmIChkKSB7CisgICAgICAgIF9fY292ZXJpdHlfY2xvc2VfXyhmZCk7CisgICAgfQorICAgIHJldHVybiBkOworfQorCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi1jb25maWcuaW4gYi9NaXNjL3B5dGhvbi1jb25maWcuaW4KaW5kZXggYWMzYTJjNy4uMGI5YjVkYyAxMDA2NDQKLS0tIGEvTWlzYy9weXRob24tY29uZmlnLmluCisrKyBiL01pc2MvcHl0aG9uLWNvbmZpZy5pbgpAQCAtMSw2ICsxLDggQEAKICMhQEVYRU5BTUVACiAjIC0qLSBweXRob24gLSotCiAKKyMgS2VlcCB0aGlzIHNjcmlwdCBpbiBzeW5jIHdpdGggcHl0aG9uLWNvbmZpZy5zaC5pbgorCiBpbXBvcnQgZ2V0b3B0CiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLWNvbmZpZy5zaC5pbiBiL01pc2MvcHl0aG9uLWNvbmZpZy5zaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWEzZGJlCi0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9weXRob24tY29uZmlnLnNoLmluCkBAIC0wLDAgKzEsMTExIEBACisjIS9iaW4vc2gKKworIyBLZWVwIHRoaXMgc2NyaXB0IGluIHN5bmMgd2l0aCBweXRob24tY29uZmlnLmluCisKK2V4aXRfd2l0aF91c2FnZSAoKQoreworICAgIGVjaG8gIlVzYWdlOiAkMCAtLXByZWZpeHwtLWV4ZWMtcHJlZml4fC0taW5jbHVkZXN8LS1saWJzfC0tY2ZsYWdzfC0tbGRmbGFnc3wtLWV4dGVuc2lvbi1zdWZmaXh8LS1oZWxwfC0tYWJpZmxhZ3N8LS1jb25maWdkaXIiCisgICAgZXhpdCAkMQorfQorCitpZiBbICIkMSIgPSAiIiBdIDsgdGhlbgorICAgIGV4aXRfd2l0aF91c2FnZSAxCitmaQorCisjIFJldHVybnMgdGhlIGFjdHVhbCBwcmVmaXggd2hlcmUgdGhpcyBzY3JpcHQgd2FzIGluc3RhbGxlZCB0by4KK2luc3RhbGxlZF9wcmVmaXggKCkKK3sKKyAgICBSRVNVTFQ9JChkaXJuYW1lICQoY2QgJChkaXJuYW1lICIkMSIpICYmIHB3ZCAtUCkpCisgICAgaWYgd2hpY2ggcmVhZGxpbmsgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgICAgICBpZiByZWFkbGluayAtZiAiJFJFU1VMVCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgUkVTVUxUPSQocmVhZGxpbmsgLWYgIiRSRVNVTFQiKQorICAgICAgICBmaQorICAgIGZpCisgICAgZWNobyAkUkVTVUxUCit9CisKK3ByZWZpeF9idWlsZD0iQHByZWZpeEAiCitwcmVmaXhfcmVhbD0kKGluc3RhbGxlZF9wcmVmaXggIiQwIikKKworIyBVc2Ugc2VkIHRvIGZpeCBwYXRocyBmcm9tIHRoZWlyIGJ1aWx0LXRvIGxvY2F0aW9ucyB0byB0aGVpciBpbnN0YWxsZWQtdG8KKyMgbG9jYXRpb25zLgorcHJlZml4PSQoZWNobyAiJHByZWZpeF9idWlsZCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK2V4ZWNfcHJlZml4X2J1aWxkPSJAZXhlY19wcmVmaXhAIgorZXhlY19wcmVmaXg9JChlY2hvICIkZXhlY19wcmVmaXhfYnVpbGQiIHwgc2VkICJzIyRleGVjX3ByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK2luY2x1ZGVkaXI9JChlY2hvICJAaW5jbHVkZWRpckAiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitsaWJkaXI9JChlY2hvICJAbGliZGlyQCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK0NGTEFHUz0kKGVjaG8gIkBDRkxBR1NAIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorVkVSU0lPTj0iQFZFUlNJT05AIgorTElCTT0iQExJQk1AIgorTElCQz0iQExJQkNAIgorU1lTTElCUz0iJExJQk0gJExJQkMiCitBQklGTEFHUz0iQEFCSUZMQUdTQCIKK0xJQlM9IkBMSUJTQCAkU1lTTElCUyAtbHB5dGhvbiR7VkVSU0lPTn0ke0FCSUZMQUdTfSIKK0JBU0VDRkxBR1M9IkBCQVNFQ0ZMQUdTQCIKK0xETElCUkFSWT0iQExETElCUkFSWUAiCitMSU5LRk9SU0hBUkVEPSJATElOS0ZPUlNIQVJFREAiCitPUFQ9IkBPUFRAIgorUFlfRU5BQkxFX1NIQVJFRD0iQFBZX0VOQUJMRV9TSEFSRURAIgorTERWRVJTSU9OPSJATERWRVJTSU9OQCIKK0xJQkRFU1Q9JHtwcmVmaXh9L2xpYi9weXRob24ke1ZFUlNJT059CitMSUJQTD0kKGVjaG8gIkBMSUJQTEAiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitTTz0iQFNPQCIKK1BZVEhPTkZSQU1FV09SSz0iQFBZVEhPTkZSQU1FV09SS0AiCitJTkNESVI9Ii1JJGluY2x1ZGVkaXIvcHl0aG9uJHtWRVJTSU9OfSR7QUJJRkxBR1N9IgorUExBVElOQ0RJUj0iLUkkaW5jbHVkZWRpci9weXRob24ke1ZFUlNJT059JHtBQklGTEFHU30iCisKKyMgU2NhbiBmb3IgLS1oZWxwIG9yIHVua25vd24gYXJndW1lbnQuCitmb3IgQVJHIGluICQqCitkbworICAgIGNhc2UgJEFSRyBpbgorICAgICAgICAtLWhlbHApCisgICAgICAgICAgICBleGl0X3dpdGhfdXNhZ2UgMAorICAgICAgICA7OworICAgICAgICAtLXByZWZpeHwtLWV4ZWMtcHJlZml4fC0taW5jbHVkZXN8LS1saWJzfC0tY2ZsYWdzfC0tbGRmbGFnc3wtLWV4dGVuc2lvbi1zdWZmaXh8LS1hYmlmbGFnc3wtLWNvbmZpZ2RpcikKKyAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIGV4aXRfd2l0aF91c2FnZSAxCisgICAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitmb3IgQVJHIGluICIkQCIKK2RvCisgICAgY2FzZSAiJEFSRyIgaW4KKyAgICAgICAgLS1wcmVmaXgpCisgICAgICAgICAgICBlY2hvICIkcHJlZml4IgorICAgICAgICA7OworICAgICAgICAtLWV4ZWMtcHJlZml4KQorICAgICAgICAgICAgZWNobyAiJGV4ZWNfcHJlZml4IgorICAgICAgICA7OworICAgICAgICAtLWluY2x1ZGVzKQorICAgICAgICAgICAgZWNobyAiJElOQ0RJUiAkUExBVElOQ0RJUiIKKyAgICAgICAgOzsKKyAgICAgICAgLS1jZmxhZ3MpCisgICAgICAgICAgICBlY2hvICIkSU5DRElSICRQTEFUSU5DRElSICRCQVNFQ0ZMQUdTICRDRkxBR1MgJE9QVCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1saWJzKQorICAgICAgICAgICAgZWNobyAiJExJQlMiCisgICAgICAgIDs7CisgICAgICAgIC0tbGRmbGFncykKKyAgICAgICAgICAgIExJTktGT1JTSEFSRURVU0VEPQorICAgICAgICAgICAgaWYgWyAteiAiJFBZVEhPTkZSQU1FV09SSyIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBMSU5LRk9SU0hBUkVEVVNFRD0kTElOS0ZPUlNIQVJFRAorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIExJQlBMVVNFRD0KKyAgICAgICAgICAgIGlmIFsgIiRQWV9FTkFCTEVfU0hBUkVEIiA9ICIwIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgIExJQlBMVVNFRD0iLUwkTElCUEwiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWNobyAiJExJQlBMVVNFRCAtTCRsaWJkaXIgJExJQlMgJExJTktGT1JTSEFSRURVU0VEIgorICAgICAgICA7OworICAgICAgICAtLWV4dGVuc2lvbi1zdWZmaXgpCisgICAgICAgICAgICBlY2hvICIkU08iCisgICAgICAgIDs7CisgICAgICAgIC0tYWJpZmxhZ3MpCisgICAgICAgICAgICBlY2hvICIkQUJJRkxBR1MiCisgICAgICAgIDs7CisgICAgICAgIC0tY29uZmlnZGlyKQorICAgICAgICAgICAgZWNobyAiJExJQlBMIgorICAgICAgICA7OworZXNhYworZG9uZQpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24td2luZzUud3ByIGIvTWlzYy9weXRob24td2luZzUud3ByCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMWFlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL3B5dGhvbi13aW5nNS53cHIKQEAgLTAsMCArMSwxOCBAQAorIyF3aW5nCisjIXZlcnNpb249NS4wCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgV2luZyBJREUgcHJvamVjdCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitbcHJvamVjdCBhdHRyaWJ1dGVzXQorcHJvai5kaXJlY3RvcnktbGlzdCA9IFt7J2RpcmxvYyc6IGxvYygnLi4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdleGNsdWRlcyc6IFt1Jy5oZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdMaWIvdW5pdHRlc3QvX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnTGliL3VuaXR0ZXN0L3Rlc3QvX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnTGliL19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J2J1aWxkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0RvYy9idWlsZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcic6ICcqJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2hpZGRlbic6IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3JlY3Vyc2l2ZSc6IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAnd2F0Y2hfZm9yX2NoYW5nZXMnOiBUcnVlfV0KK3Byb2ouZmlsZS10eXBlID0gJ3NoYXJlZCcKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLm1hbiBiL01pc2MvcHl0aG9uLm1hbgppbmRleCBiY2IzZWM4Li41MmFlZGVlIDEwMDY0NAotLS0gYS9NaXNjL3B5dGhvbi5tYW4KKysrIGIvTWlzYy9weXRob24ubWFuCkBAIC0yNiwxMSArMjYsMTQgQEAKIC5CIFwtaQogXQogWwotLkIgXC1tCi0uSSBtb2R1bGUtbmFtZQorLkIgXC1JCiBdCiAuYnIKICAgICAgICBbCisuQiBcLW0KKy5JIG1vZHVsZS1uYW1lCitdCitbCiAuQiBcLXEKIF0KIFsKQEAgLTEzOSw2ICsxNDIsMTMgQEAKIHVzZWZ1bCB0byBpbnNwZWN0IGdsb2JhbCB2YXJpYWJsZXMgb3IgYSBzdGFjayB0cmFjZSB3aGVuIGEgc2NyaXB0CiByYWlzZXMgYW4gZXhjZXB0aW9uLgogLlRQCisuQiBcLUkKK1J1biBQeXRob24gaW4gaXNvbGF0ZWQgbW9kZS4gVGhpcyBhbHNvIGltcGxpZXMgXGZCXC1FXGZQIGFuZCBcZkJcLVNcZlAuIEluCitpc29sYXRlZCBtb2RlIHN5cy5wYXRoIGNvbnRhaW5zIG5laXRoZXIgdGhlIHNjcmlwdOKAmXMgZGlyZWN0b3J5IG5vciB0aGUgdXNlcuKAmXMKK3NpdGUtcGFja2FnZXMgZGlyZWN0b3J5LiBBbGwgUFlUSE9OKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGlnbm9yZWQsIHRvby4KK0Z1cnRoZXIgcmVzdHJpY3Rpb25zIG1heSBiZSBpbXBvc2VkIHRvIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBpbmplY3RpbmcKK21hbGljaW91cyBjb2RlLgorLlRQCiAuQkkgIlwtbSAiIG1vZHVsZS1uYW1lCiBTZWFyY2hlcyAKIC5JIHN5cy5wYXRoIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9TZXR1cC5kaXN0IGIvTW9kdWxlcy9TZXR1cC5kaXN0CmluZGV4IGY0NWRlNWMuLjAxZmI4NWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvU2V0dXAuZGlzdAorKysgYi9Nb2R1bGVzL1NldHVwLmRpc3QKQEAgLTEwMiw3ICsxMDIsNyBAQAogIyB2YXJpb3VzIHJlYXNvbnM7IHRoZXJlZm9yZSB0aGV5IGFyZSBsaXN0ZWQgaGVyZSBpbnN0ZWFkIG9mIGluIHRoZQogIyBub3JtYWwgb3JkZXIuCiAKLSMgVGhpcyBvbmx5IGNvbnRhaW5zIHRoZSBtaW5pbWFsIHNldCBvZiBtb2R1bGVzIHJlcXVpcmVkIHRvIHJ1biB0aGUgCisjIFRoaXMgb25seSBjb250YWlucyB0aGUgbWluaW1hbCBzZXQgb2YgbW9kdWxlcyByZXF1aXJlZCB0byBydW4gdGhlCiAjIHNldHVwLnB5IHNjcmlwdCBpbiB0aGUgcm9vdCBvZiB0aGUgUHl0aG9uIHNvdXJjZSB0cmVlLgogCiBwb3NpeCBwb3NpeG1vZHVsZS5jCQkjIHBvc2l4IChVTklYKSBzeXN0ZW0gY2FsbHMKQEAgLTExMyw5ICsxMTMsMTEgQEAKIF9jb2RlY3MgX2NvZGVjc21vZHVsZS5jCQkjIGFjY2VzcyB0byB0aGUgYnVpbHRpbiBjb2RlY3MgYW5kIGNvZGVjIHJlZ2lzdHJ5CiBfd2Vha3JlZiBfd2Vha3JlZi5jCQkjIHdlYWsgcmVmZXJlbmNlcwogX2Z1bmN0b29scyBfZnVuY3Rvb2xzbW9kdWxlLmMgICAjIFRvb2xzIGZvciB3b3JraW5nIHdpdGggZnVuY3Rpb25zIGFuZCBjYWxsYWJsZSBvYmplY3RzCi1vcGVyYXRvciBvcGVyYXRvci5jCSAgICAgICAgIyBvcGVyYXRvci5hZGQoKSBhbmQgc2ltaWxhciBnb29kaWVzCitfb3BlcmF0b3IgX29wZXJhdG9yLmMJICAgICAgICAjIG9wZXJhdG9yLmFkZCgpIGFuZCBzaW1pbGFyIGdvb2RpZXMKIF9jb2xsZWN0aW9ucyBfY29sbGVjdGlvbnNtb2R1bGUuYyAjIENvbnRhaW5lciB0eXBlcwotaXRlcnRvb2xzIGl0ZXJ0b29sc21vZHVsZS5jICAgICMgRnVuY3Rpb25zIGNyZWF0aW5nIGl0ZXJhdG9ycyBmb3IgZWZmaWNpZW50IGxvb3BpbmcgCitpdGVydG9vbHMgaXRlcnRvb2xzbW9kdWxlLmMgICAgIyBGdW5jdGlvbnMgY3JlYXRpbmcgaXRlcmF0b3JzIGZvciBlZmZpY2llbnQgbG9vcGluZworYXRleGl0IGF0ZXhpdG1vZHVsZS5jICAgICAgIyBSZWdpc3RlciBmdW5jdGlvbnMgdG8gYmUgcnVuIGF0IGludGVycHJldGVyLXNodXRkb3duCitfc3RhdCBfc3RhdC5jCQkJIyBzdGF0LmggaW50ZXJmYWNlCiAKICMgYWNjZXNzIHRvIElTTyBDIGxvY2FsZSBzdXBwb3J0CiBfbG9jYWxlIF9sb2NhbGVtb2R1bGUuYyAgIyAtbGludGwKQEAgLTEzMCwxMiArMTMyLDE1IEBACiAjIGZhdWx0aGFuZGxlciBtb2R1bGUKIGZhdWx0aGFuZGxlciBmYXVsdGhhbmRsZXIuYwogCisjIGRlYnVnIHRvb2wgdG8gdHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uCitfdHJhY2VtYWxsb2MgX3RyYWNlbWFsbG9jLmMgaGFzaHRhYmxlLmMKKwogIyBUaGUgcmVzdCBvZiB0aGUgbW9kdWxlcyBsaXN0ZWQgaW4gdGhpcyBmaWxlIGFyZSBhbGwgY29tbWVudGVkIG91dCBieQogIyBkZWZhdWx0LiAgVXN1YWxseSB0aGV5IGNhbiBiZSBkZXRlY3RlZCBhbmQgYnVpbHQgYXMgZHluYW1pY2FsbHkKICMgbG9hZGVkIG1vZHVsZXMgYnkgdGhlIG5ldyBzZXR1cC5weSBzY3JpcHQgYWRkZWQgaW4gUHl0aG9uIDIuMS4gIElmCi0jIHlvdSdyZSBvbiBhIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBzdXBwb3J0IGR5bmFtaWMgbG9hZGluZywgd2FudCB0byAKLSMgY29tcGlsZSBtb2R1bGVzIHN0YXRpY2FsbHkgaW50byB0aGUgUHl0aG9uIGJpbmFyeSwgb3IgbmVlZCB0byAKLSMgc3BlY2lmeSBzb21lIG9kZCBzZXQgb2YgY29tcGlsZXIgc3dpdGNoZXMsIHlvdSBjYW4gdW5jb21tZW50IHRoZSAKKyMgeW91J3JlIG9uIGEgcGxhdGZvcm0gdGhhdCBkb2Vzbid0IHN1cHBvcnQgZHluYW1pYyBsb2FkaW5nLCB3YW50IHRvCisjIGNvbXBpbGUgbW9kdWxlcyBzdGF0aWNhbGx5IGludG8gdGhlIFB5dGhvbiBiaW5hcnksIG9yIG5lZWQgdG8KKyMgc3BlY2lmeSBzb21lIG9kZCBzZXQgb2YgY29tcGlsZXIgc3dpdGNoZXMsIHlvdSBjYW4gdW5jb21tZW50IHRoZQogIyBhcHByb3ByaWF0ZSBsaW5lcyBiZWxvdy4KIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNzAsNyArMTc1LDYgQEAKICNfd2Vha3JlZiBfd2Vha3JlZi5jCSMgYmFzaWMgd2VhayByZWZlcmVuY2Ugc3VwcG9ydAogI190ZXN0Y2FwaSBfdGVzdGNhcGltb2R1bGUuYyAgICAjIFB5dGhvbiBDIEFQSSB0ZXN0IG1vZHVsZQogI19yYW5kb20gX3JhbmRvbW1vZHVsZS5jCSMgUmFuZG9tIG51bWJlciBnZW5lcmF0b3IKLSNhdGV4aXQgYXRleGl0bW9kdWxlLmMgICAgICAjIFJlZ2lzdGVyIGZ1bmN0aW9ucyB0byBiZSBydW4gYXQgaW50ZXJwcmV0ZXItc2h1dGRvd24KICNfZWxlbWVudHRyZWUgLUkkKHNyY2RpcikvTW9kdWxlcy9leHBhdCAtREhBVkVfRVhQQVRfQ09ORklHX0ggLURVU0VfUFlFWFBBVF9DQVBJIF9lbGVtZW50dHJlZS5jCSMgZWxlbWVudHRyZWUgYWNjZWxlcmF0b3IKICNfcGlja2xlIF9waWNrbGUuYwkjIHBpY2tsZSBhY2NlbGVyYXRvcgogI19kYXRldGltZSBfZGF0ZXRpbWVtb2R1bGUuYwkjIGRhdGV0aW1lIGFjY2VsZXJhdG9yCkBAIC0xODUsNyArMTg5LDcgQEAKICMgc3VwcG9ydGVkLi4uKQogCiAjZmNudGwgZmNudGxtb2R1bGUuYwkjIGZjbnRsKDIpIGFuZCBpb2N0bCgyKQotI3Nwd2Qgc3B3ZG1vZHVsZS5jCQkjIHNwd2QoMykgCisjc3B3ZCBzcHdkbW9kdWxlLmMJCSMgc3B3ZCgzKQogI2dycCBncnBtb2R1bGUuYwkJIyBncnAoMykKICNzZWxlY3Qgc2VsZWN0bW9kdWxlLmMJIyBzZWxlY3QoMik7IG5vdCBvbiBhbmNpZW50IFN5c3RlbSBWCiAKQEAgLTMwMSw3ICszMDUsNyBAQAogCiAjX2N1cnNlcyBfY3Vyc2VzbW9kdWxlLmMgLWxjdXJzZXMgLWx0ZXJtY2FwCiAjIFdyYXBwZXIgZm9yIHRoZSBwYW5lbCBsaWJyYXJ5IHRoYXQncyBwYXJ0IG9mIG5jdXJzZXMgYW5kIFNZU1YgY3Vyc2VzLgotI19jdXJzZXNfcGFuZWwgX2N1cnNlc19wYW5lbC5jIC1scGFuZWwgLWxuY3Vyc2VzIAorI19jdXJzZXNfcGFuZWwgX2N1cnNlc19wYW5lbC5jIC1scGFuZWwgLWxuY3Vyc2VzCiAKIAogIyBNb2R1bGVzIHRoYXQgcHJvdmlkZSBwZXJzaXN0ZW50IGRpY3Rpb25hcnktbGlrZSBzZW1hbnRpY3MuICBZb3Ugd2lsbApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMgYi9Nb2R1bGVzL19iaXNlY3Rtb2R1bGUuYwppbmRleCBmYWNhOGNmLi4wMmI1NWQxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19iaXNlY3Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL19iaXNlY3Rtb2R1bGUuYwpAQCAtNiw2ICs2LDggQEAKICNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgogI2luY2x1ZGUgIlB5dGhvbi5oIgogCitfUHlfSURFTlRJRklFUihpbnNlcnQpOworCiBzdGF0aWMgUHlfc3NpemVfdAogaW50ZXJuYWxfYmlzZWN0X3JpZ2h0KFB5T2JqZWN0ICpsaXN0LCBQeU9iamVjdCAqaXRlbSwgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSkKIHsKQEAgLTkwLDggKzkyLDYgQEAKICAgICAgICAgaWYgKFB5TGlzdF9JbnNlcnQobGlzdCwgaW5kZXgsIGl0ZW0pIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKGluc2VydCk7Ci0KICAgICAgICAgcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChsaXN0LCAmUHlJZF9pbnNlcnQsICJuTyIsIGluZGV4LCBpdGVtKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xOTUsNyArMTk1LDYgQEAKICAgICAgICAgaWYgKFB5TGlzdF9JbnNlcnQobGlzdCwgaW5kZXgsIGl0ZW0pIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKGluc2VydCk7CiAgICAgICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQobGlzdCwgJlB5SWRfaW5zZXJ0LCAibk8iLCBpbmRleCwgaXRlbSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fYnoybW9kdWxlLmMgYi9Nb2R1bGVzL19iejJtb2R1bGUuYwppbmRleCAzZjdhNmNmLi5lNjUyZjRkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19iejJtb2R1bGUuYworKysgYi9Nb2R1bGVzL19iejJtb2R1bGUuYwpAQCAtMzYsOCArMzYsNiBAQAogI2RlZmluZSBSRUxFQVNFX0xPQ0sob2JqKQogI2VuZGlmCiAKLSNkZWZpbmUgTUlOKFgsIFkpICgoKFgpIDwgKFkpKSA/IChYKSA6IChZKSkKLQogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtNTgsNiArNTYsOCBAQAogI2VuZGlmCiB9IEJaMkRlY29tcHJlc3NvcjsKIAorc3RhdGljIFB5VHlwZU9iamVjdCBCWjJDb21wcmVzc29yX1R5cGU7CitzdGF0aWMgUHlUeXBlT2JqZWN0IEJaMkRlY29tcHJlc3Nvcl9UeXBlOwogCiAvKiBIZWxwZXIgZnVuY3Rpb25zLiAqLwogCkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICBjLT5ienMubmV4dF9pbiA9IGRhdGE7CiAgICAgYy0+YnpzLmF2YWlsX2luID0gMDsKICAgICBjLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpOwotICAgIGMtPmJ6cy5hdmFpbF9vdXQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCk7CisgICAgYy0+YnpzLmF2YWlsX291dCA9IFNNQUxMQ0hVTks7CiAgICAgZm9yICg7OykgewogICAgICAgICBjaGFyICp0aGlzX291dDsKICAgICAgICAgaW50IGJ6ZXJyb3I7CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICAgICAgLyogT24gYSA2NC1iaXQgc3lzdGVtLCBsZW4gbWlnaHQgbm90IGZpdCBpbiBhdmFpbF9pbiAoYW4gdW5zaWduZWQgaW50KS4KICAgICAgICAgICAgRG8gY29tcHJlc3Npb24gaW4gY2h1bmtzIG9mIG5vIG1vcmUgdGhhbiBVSU5UX01BWCBieXRlcyBlYWNoLiAqLwogICAgICAgICBpZiAoYy0+YnpzLmF2YWlsX2luID09IDAgJiYgbGVuID4gMCkgewotICAgICAgICAgICAgYy0+YnpzLmF2YWlsX2luID0gTUlOKGxlbiwgVUlOVF9NQVgpOworICAgICAgICAgICAgYy0+YnpzLmF2YWlsX2luID0gKHVuc2lnbmVkIGludClQeV9NSU4obGVuLCBVSU5UX01BWCk7CiAgICAgICAgICAgICBsZW4gLT0gYy0+YnpzLmF2YWlsX2luOwogICAgICAgICB9CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICAgICAgICAgIGMtPmJ6cy5uZXh0X291dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBkYXRhX3NpemU7CiAgICAgICAgICAgICAgICAgYnVmZmVyX2xlZnQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgLSBkYXRhX3NpemU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjLT5ienMuYXZhaWxfb3V0ID0gTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CisgICAgICAgICAgICBjLT5ienMuYXZhaWxfb3V0ID0gKHVuc2lnbmVkIGludClQeV9NSU4oYnVmZmVyX2xlZnQsIFVJTlRfTUFYKTsKICAgICAgICAgfQogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTE5OCw0NCArMTk4LDU4IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihCWjJDb21wcmVzc29yX2NvbXByZXNzX19kb2NfXywKLSJjb21wcmVzcyhkYXRhKSAtPiBieXRlc1xuIgotIlxuIgotIlByb3ZpZGUgZGF0YSB0byB0aGUgY29tcHJlc3NvciBvYmplY3QuIFJldHVybnMgYSBjaHVuayBvZlxuIgotImNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYicnIG90aGVyd2lzZS5cbiIKLSJcbiIKLSJXaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHByb3ZpZGluZyBkYXRhIHRvIHRoZSBjb21wcmVzc29yLCBjYWxsIHRoZVxuIgotImZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy5cbiIpOworLypbY2xpbmljIGlucHV0XQorb3V0cHV0IHByZXNldCBmaWxlCittb2R1bGUgX2J6MgorY2xhc3MgX2J6Mi5CWjJDb21wcmVzc29yICJCWjJDb21wcmVzc29yICoiICImQloyQ29tcHJlc3Nvcl9UeXBlIgorY2xhc3MgX2J6Mi5CWjJEZWNvbXByZXNzb3IgIkJaMkRlY29tcHJlc3NvciAqIiAiJkJaMkRlY29tcHJlc3Nvcl9UeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ZTNiMTM5OTI0ZjVlMThjY10qLworCisjaW5jbHVkZSAiY2xpbmljL19iejJtb2R1bGUuYy5oIgorCisvKltjbGluaWMgaW5wdXRdCitfYnoyLkJaMkNvbXByZXNzb3IuY29tcHJlc3MKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIC8KKworUHJvdmlkZSBkYXRhIHRvIHRoZSBjb21wcmVzc29yIG9iamVjdC4KKworUmV0dXJucyBhIGNodW5rIG9mIGNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYicnIG90aGVyd2lzZS4KKworV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBwcm92aWRpbmcgZGF0YSB0byB0aGUgY29tcHJlc3NvciwgY2FsbCB0aGUKK2ZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLUJaMkNvbXByZXNzb3JfY29tcHJlc3MoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3NfaW1wbChCWjJDb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTkzNjU0MjZlOTQxZmJjYyBpbnB1dD04NWM5NjMyMTgwNzBmYzRjXSovCiB7Ci0gICAgUHlfYnVmZmVyIGJ1ZmZlcjsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6Y29tcHJlc3MiLCAmYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBBQ1FVSVJFX0xPQ0soc2VsZik7CiAgICAgaWYgKHNlbGYtPmZsdXNoZWQpCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiQ29tcHJlc3NvciBoYXMgYmVlbiBmbHVzaGVkIik7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBjb21wcmVzcyhzZWxmLCBidWZmZXIuYnVmLCBidWZmZXIubGVuLCBCWl9SVU4pOworICAgICAgICByZXN1bHQgPSBjb21wcmVzcyhzZWxmLCBkYXRhLT5idWYsIGRhdGEtPmxlbiwgQlpfUlVOKTsKICAgICBSRUxFQVNFX0xPQ0soc2VsZik7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QeURvY19TVFJWQVIoQloyQ29tcHJlc3Nvcl9mbHVzaF9fZG9jX18sCi0iZmx1c2goKSAtPiBieXRlc1xuIgotIlxuIgotIkZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4gUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnRcbiIKLSJpbiBpbnRlcm5hbCBidWZmZXJzLlxuIgotIlxuIgotIlRoZSBjb21wcmVzc29yIG9iamVjdCBtYXkgbm90IGJlIHVzZWQgYWZ0ZXIgdGhpcyBtZXRob2QgaXMgY2FsbGVkLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfYnoyLkJaMkNvbXByZXNzb3IuZmx1c2gKKworRmluaXNoIHRoZSBjb21wcmVzc2lvbiBwcm9jZXNzLgorCitSZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEgbGVmdCBpbiBpbnRlcm5hbCBidWZmZXJzLgorCitUaGUgY29tcHJlc3NvciBvYmplY3QgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLUJaMkNvbXByZXNzb3JfZmx1c2goQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK19iejJfQloyQ29tcHJlc3Nvcl9mbHVzaF9pbXBsKEJaMkNvbXByZXNzb3IgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2VmMDNmYzFiMDkyYTcwMSBpbnB1dD1kNjQ0MDVkM2M2Zjc2NjkxXSovCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKQEAgLTI1OCwxNCArMjcyLDQyIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQKLUJaMkNvbXByZXNzb3JfaW5pdChCWjJDb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3N0YXRpYyB2b2lkKgorQloyX01hbGxvYyh2b2lkKiBjdHgsIGludCBpdGVtcywgaW50IHNpemUpCiB7Ci0gICAgaW50IGNvbXByZXNzbGV2ZWwgPSA5OworICAgIGlmIChpdGVtcyA8IDAgfHwgc2l6ZSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICgoc2l6ZV90KWl0ZW1zID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAvIChzaXplX3Qpc2l6ZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogUHlNZW1fTWFsbG9jKCkgY2Fubm90IGJlIHVzZWQ6IGNvbXByZXNzKCkgYW5kIGRlY29tcHJlc3MoKQorICAgICAgIHJlbGVhc2UgdGhlIEdJTCAqLworICAgIHJldHVybiBQeU1lbV9SYXdNYWxsb2MoaXRlbXMgKiBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK0JaMl9GcmVlKHZvaWQqIGN0eCwgdm9pZCAqcHRyKQoreworICAgIFB5TWVtX1Jhd0ZyZWUocHRyKTsKK30KKworLypbY2xpbmljIGlucHV0XQorX2J6Mi5CWjJDb21wcmVzc29yLl9faW5pdF9fCisKKyAgICBjb21wcmVzc2xldmVsOiBpbnQgPSA5CisgICAgICAgIENvbXByZXNzaW9uIGxldmVsLCBhcyBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDkuCisgICAgLworCitDcmVhdGUgYSBjb21wcmVzc29yIG9iamVjdCBmb3IgY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LgorCitGb3Igb25lLXNob3QgY29tcHJlc3Npb24sIHVzZSB0aGUgY29tcHJlc3MoKSBmdW5jdGlvbiBpbnN0ZWFkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgaW50CitfYnoyX0JaMkNvbXByZXNzb3JfX19pbml0X19faW1wbChCWjJDb21wcmVzc29yICpzZWxmLCBpbnQgY29tcHJlc3NsZXZlbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jNGU2YWRmZDAyOTYzODI3IGlucHV0PTRlMWZmN2I4Mzk0YjZlOWFdKi8KK3sKICAgICBpbnQgYnplcnJvcjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6QloyQ29tcHJlc3NvciIsICZjb21wcmVzc2xldmVsKSkKLSAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICghKDEgPD0gY29tcHJlc3NsZXZlbCAmJiBjb21wcmVzc2xldmVsIDw9IDkpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNvbXByZXNzbGV2ZWwgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDkiKTsKQEAgLTI4MCw2ICszMjIsOSBAQAogICAgIH0KICNlbmRpZgogCisgICAgc2VsZi0+YnpzLm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+YnpzLmJ6YWxsb2MgPSBCWjJfTWFsbG9jOworICAgIHNlbGYtPmJ6cy5iemZyZWUgPSBCWjJfRnJlZTsKICAgICBiemVycm9yID0gQloyX2J6Q29tcHJlc3NJbml0KCZzZWxmLT5ienMsIGNvbXByZXNzbGV2ZWwsIDAsIDApOwogICAgIGlmIChjYXRjaF9iejJfZXJyb3IoYnplcnJvcikpCiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zMDYsMjIgKzM1MSwxMiBAQAogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgQloyQ29tcHJlc3Nvcl9tZXRob2RzW10gPSB7Ci0gICAgeyJjb21wcmVzcyIsICAgICAoUHlDRnVuY3Rpb24pQloyQ29tcHJlc3Nvcl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICBCWjJDb21wcmVzc29yX2NvbXByZXNzX19kb2NfX30sCi0gICAgeyJmbHVzaCIsICAgICAgICAoUHlDRnVuY3Rpb24pQloyQ29tcHJlc3Nvcl9mbHVzaCwgICAgTUVUSF9OT0FSR1MsCi0gICAgIEJaMkNvbXByZXNzb3JfZmx1c2hfX2RvY19ffSwKKyAgICBfQloyX0JaMkNPTVBSRVNTT1JfQ09NUFJFU1NfTUVUSE9EREVGCisgICAgX0JaMl9CWjJDT01QUkVTU09SX0ZMVVNIX01FVEhPRERFRgogICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKUJaMkNvbXByZXNzb3JfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKICAgICB7TlVMTH0KIH07CiAKLVB5RG9jX1NUUlZBUihCWjJDb21wcmVzc29yX19kb2NfXywKLSJCWjJDb21wcmVzc29yKGNvbXByZXNzbGV2ZWw9OSlcbiIKLSJcbiIKLSJDcmVhdGUgYSBjb21wcmVzc29yIG9iamVjdCBmb3IgY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LlxuIgotIlxuIgotImNvbXByZXNzbGV2ZWwsIGlmIGdpdmVuLCBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgOS5cbiIKLSJcbiIKLSJGb3Igb25lLXNob3QgY29tcHJlc3Npb24sIHVzZSB0aGUgY29tcHJlc3MoKSBmdW5jdGlvbiBpbnN0ZWFkLlxuIik7CiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgQloyQ29tcHJlc3Nvcl9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQpAQCAtMzQ0LDcgKzM3OSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLwotICAgIEJaMkNvbXByZXNzb3JfX2RvY19fLCAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIF9iejJfQloyQ29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KQEAgLTM1OSw3ICszOTQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KLSAgICAoaW5pdHByb2MpQloyQ29tcHJlc3Nvcl9pbml0LCAgICAgICAvKiB0cF9pbml0ICovCisgICAgX2J6Ml9CWjJDb21wcmVzc29yX19faW5pdF9fLCAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiB9OwpAQCAtMzc5LDEwICs0MTQsMTAgQEAKICAgICBkLT5ienMubmV4dF9pbiA9IGRhdGE7CiAgICAgLyogT24gYSA2NC1iaXQgc3lzdGVtLCBsZW4gbWlnaHQgbm90IGZpdCBpbiBhdmFpbF9pbiAoYW4gdW5zaWduZWQgaW50KS4KICAgICAgICBEbyBkZWNvbXByZXNzaW9uIGluIGNodW5rcyBvZiBubyBtb3JlIHRoYW4gVUlOVF9NQVggYnl0ZXMgZWFjaC4gKi8KLSAgICBkLT5ienMuYXZhaWxfaW4gPSBNSU4obGVuLCBVSU5UX01BWCk7CisgICAgZC0+YnpzLmF2YWlsX2luID0gKHVuc2lnbmVkIGludClQeV9NSU4obGVuLCBVSU5UX01BWCk7CiAgICAgbGVuIC09IGQtPmJ6cy5hdmFpbF9pbjsKICAgICBkLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpOwotICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCk7CisgICAgZC0+YnpzLmF2YWlsX291dCA9IFNNQUxMQ0hVTks7CiAgICAgZm9yICg7OykgewogICAgICAgICBjaGFyICp0aGlzX291dDsKICAgICAgICAgaW50IGJ6ZXJyb3I7CkBAIC00MDgsNyArNDQzLDcgQEAKICAgICAgICAgaWYgKGQtPmJ6cy5hdmFpbF9pbiA9PSAwKSB7CiAgICAgICAgICAgICBpZiAobGVuID09IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkLT5ienMuYXZhaWxfaW4gPSBNSU4obGVuLCBVSU5UX01BWCk7CisgICAgICAgICAgICBkLT5ienMuYXZhaWxfaW4gPSAodW5zaWduZWQgaW50KVB5X01JTihsZW4sIFVJTlRfTUFYKTsKICAgICAgICAgICAgIGxlbiAtPSBkLT5ienMuYXZhaWxfaW47CiAgICAgICAgIH0KICAgICAgICAgaWYgKGQtPmJ6cy5hdmFpbF9vdXQgPT0gMCkgewpAQCAtNDE5LDcgKzQ1NCw3IEBACiAgICAgICAgICAgICAgICAgZC0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGRhdGFfc2l6ZTsKICAgICAgICAgICAgICAgICBidWZmZXJfbGVmdCA9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSAtIGRhdGFfc2l6ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSBNSU4oYnVmZmVyX2xlZnQsIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSAodW5zaWduZWQgaW50KVB5X01JTihidWZmZXJfbGVmdCwgVUlOVF9NQVgpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChkYXRhX3NpemUgIT0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpKQpAQCAtNDMyLDMyICs0NjcsMzMgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKEJaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19kb2NfXywKLSJkZWNvbXByZXNzKGRhdGEpIC0+IGJ5dGVzXG4iCi0iXG4iCi0iUHJvdmlkZSBkYXRhIHRvIHRoZSBkZWNvbXByZXNzb3Igb2JqZWN0LiBSZXR1cm5zIGEgY2h1bmsgb2ZcbiIKLSJkZWNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYicnIG90aGVyd2lzZS5cbiIKLSJcbiIKLSJBdHRlbXB0aW5nIHRvIGRlY29tcHJlc3MgZGF0YSBhZnRlciB0aGUgZW5kIG9mIHN0cmVhbSBpcyByZWFjaGVkXG4iCi0icmFpc2VzIGFuIEVPRkVycm9yLiBBbnkgZGF0YSBmb3VuZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBzdHJlYW1cbiIKLSJpcyBpZ25vcmVkIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfYnoyLkJaMkRlY29tcHJlc3Nvci5kZWNvbXByZXNzCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK1Byb3ZpZGUgZGF0YSB0byB0aGUgZGVjb21wcmVzc29yIG9iamVjdC4KKworUmV0dXJucyBhIGNodW5rIG9mIGRlY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiJycgb3RoZXJ3aXNlLgorCitBdHRlbXB0aW5nIHRvIGRlY29tcHJlc3MgZGF0YSBhZnRlciB0aGUgZW5kIG9mIHN0cmVhbSBpcyByZWFjaGVkCityYWlzZXMgYW4gRU9GRXJyb3IuICBBbnkgZGF0YSBmb3VuZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBzdHJlYW0KK2lzIGlnbm9yZWQgYW5kIHNhdmVkIGluIHRoZSB1bnVzZWRfZGF0YSBhdHRyaWJ1dGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzcyhCWjJEZWNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19pbXBsKEJaMkRlY29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA4NmU0Yjk5ZTYwY2IzZjYgaW5wdXQ9NjE2YzJhNmRiNTI2OTk2MV0qLwogewotICAgIFB5X2J1ZmZlciBidWZmZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmRlY29tcHJlc3MiLCAmYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBBQ1FVSVJFX0xPQ0soc2VsZik7CiAgICAgaWYgKHNlbGYtPmVvZikKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLCAiRW5kIG9mIHN0cmVhbSBhbHJlYWR5IHJlYWNoZWQiKTsKICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGRlY29tcHJlc3Moc2VsZiwgYnVmZmVyLmJ1ZiwgYnVmZmVyLmxlbik7CisgICAgICAgIHJlc3VsdCA9IGRlY29tcHJlc3Moc2VsZiwgZGF0YS0+YnVmLCBkYXRhLT5sZW4pOwogICAgIFJFTEVBU0VfTE9DSyhzZWxmKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ2OSwxNCArNTA1LDIwIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19iejIuQloyRGVjb21wcmVzc29yLl9faW5pdF9fCisKK0NyZWF0ZSBhIGRlY29tcHJlc3NvciBvYmplY3QgZm9yIGRlY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LgorCitGb3Igb25lLXNob3QgZGVjb21wcmVzc2lvbiwgdXNlIHRoZSBkZWNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIGludAotQloyRGVjb21wcmVzc29yX2luaXQoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK19iejJfQloyRGVjb21wcmVzc29yX19faW5pdF9fX2ltcGwoQloyRGVjb21wcmVzc29yICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWU0ZDJiOWJiODY2YWI4ZjEgaW5wdXQ9OTVmNjUwMGRjZGE2MDA4OF0qLwogewogICAgIGludCBiemVycm9yOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6QloyRGVjb21wcmVzc29yIikpCi0gICAgICAgIHJldHVybiAtMTsKLQogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgc2VsZi0+bG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKICAgICBpZiAoc2VsZi0+bG9jayA9PSBOVUxMKSB7CkBAIC01MTcsOCArNTU5LDcgQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIEJaMkRlY29tcHJlc3Nvcl9tZXRob2RzW10gPSB7Ci0gICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKUJaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgIEJaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19kb2NfX30sCisgICAgX0JaMl9CWjJERUNPTVBSRVNTT1JfREVDT01QUkVTU19NRVRIT0RERUYKICAgICB7Il9fZ2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilCWjJEZWNvbXByZXNzb3JfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKICAgICB7TlVMTH0KIH07CkBAIC01MzcsMTMgKzU3OCw2IEBACiAgICAge05VTEx9CiB9OwogCi1QeURvY19TVFJWQVIoQloyRGVjb21wcmVzc29yX19kb2NfXywKLSJCWjJEZWNvbXByZXNzb3IoKVxuIgotIlxuIgotIkNyZWF0ZSBhIGRlY29tcHJlc3NvciBvYmplY3QgZm9yIGRlY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LlxuIgotIlxuIgotIkZvciBvbmUtc2hvdCBkZWNvbXByZXNzaW9uLCB1c2UgdGhlIGRlY29tcHJlc3MoKSBmdW5jdGlvbiBpbnN0ZWFkLlxuIik7Ci0KIHN0YXRpYyBQeVR5cGVPYmplY3QgQloyRGVjb21wcmVzc29yX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIl9iejIuQloyRGVjb21wcmVzc29yIiwgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwpAQCAtNTY1LDcgKzU5OSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLwotICAgIEJaMkRlY29tcHJlc3Nvcl9fZG9jX18sICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIF9iejJfQloyRGVjb21wcmVzc29yX19faW5pdF9fX19kb2NfXywgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwpAQCAtNTgwLDcgKzYxNCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgIChpbml0cHJvYylCWjJEZWNvbXByZXNzb3JfaW5pdCwgICAgIC8qIHRwX2luaXQgKi8KKyAgICBfYnoyX0JaMkRlY29tcHJlc3Nvcl9fX2luaXRfXywgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYyBiL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCmluZGV4IDQwMDM3YjEuLjBiMDkzYWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCkBAIC0xODksOSArMTg5LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgYzsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciAqcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIGNoYXIgYzsKKyAgICAgICAgY2hhciAqcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOwogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgIC8qIFRoZXJlJ3MgYXQgbGVhc3QgZW5vdWdoIHJvb20gZm9yIGEgaGV4IGVzY2FwZSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYyBiL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKaW5kZXggM2NmNDc2NC4uYzFhYTlhMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCkBAIC0zLDMwICszLDMyIEBACiAKIC8qIGNvbGxlY3Rpb25zIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGRlcXVlKCkgZGF0YXR5cGUKICAgIFdyaXR0ZW4gYW5kIG1haW50YWluZWQgYnkgUmF5bW9uZCBELiBIZXR0aW5nZXIgPHB5dGhvbkByY24uY29tPgotICAgQ29weXJpZ2h0IChjKSAyMDA0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAgQ29weXJpZ2h0IChjKSAyMDA0LTIwMTMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKi8KIAogLyogVGhlIGJsb2NrIGxlbmd0aCBtYXkgYmUgc2V0IHRvIGFueSBudW1iZXIgb3ZlciAxLiAgTGFyZ2VyIG51bWJlcnMKLSAqIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yIGJ1dCB0YWtlIG1vcmUKLSAqIG1lbW9yeS4gIElkZWFsbHksIEJMT0NLTEVOIHNob3VsZCBiZSBzZXQgd2l0aCBhbiBleWUgdG8gdGhlCi0gKiBsZW5ndGggb2YgYSBjYWNoZSBsaW5lLgorICogcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gdGhlIG1lbW9yeSBhbGxvY2F0b3IsIGdpdmUgZmFzdGVyCisgKiBpbmRleGluZyBhbmQgcm90YXRpb24sIGFuZCByZWR1Y2UgdGhlIGxpbms6OmRhdGEgb3ZlcmhlYWQgcmF0aW8uCisgKgorICogSWRlYWxseSwgdGhlIGJsb2NrIGxlbmd0aCB3aWxsIGJlIHNldCB0byB0d28gbGVzcyB0aGFuIHNvbWUKKyAqIG11bHRpcGxlIG9mIHRoZSBjYWNoZS1saW5lIGxlbmd0aCAoc28gdGhhdCB0aGUgZnVsbCBibG9jaworICogaW5jbHVkaW5nIHRoZSBsZWZ0bGluayBhbmQgcmlnaHRsaW5rIHdpbGwgZml0IG5lYXRseSBpbnRvCisgKiBjYWNoZSBsaW5lcykuCiAgKi8KIAogI2RlZmluZSBCTE9DS0xFTiA2MgogI2RlZmluZSBDRU5URVIgKChCTE9DS0xFTiAtIDEpIC8gMikKIAogLyogQSBgZGVxdWVvYmplY3RgIGlzIGNvbXBvc2VkIG9mIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGBibG9ja2Agbm9kZXMuCi0gKiBUaGlzIGxpc3QgaXMgbm90IGNpcmN1bGFyICh0aGUgbGVmdG1vc3QgYmxvY2sgaGFzIGxlZnRsaW5rPT1OVUxMLAotICogYW5kIHRoZSByaWdodG1vc3QgYmxvY2sgaGFzIHJpZ2h0bGluaz09TlVMTCkuICBBIGRlcXVlIGQncyBmaXJzdAotICogZWxlbWVudCBpcyBhdCBkLmxlZnRibG9ja1tsZWZ0aW5kZXhdIGFuZCBpdHMgbGFzdCBlbGVtZW50IGlzIGF0Ci0gKiBkLnJpZ2h0YmxvY2tbcmlnaHRpbmRleF07IG5vdGUgdGhhdCwgdW5saWtlIGFzIGZvciBQeXRob24gc2xpY2UKLSAqIGluZGljZXMsIHRoZXNlIGluZGljZXMgYXJlIGluY2x1c2l2ZSBvbiBib3RoIGVuZHMuICBCeSBiZWluZyBpbmNsdXNpdmUKLSAqIG9uIGJvdGggZW5kcywgYWxnb3JpdGhtcyBmb3IgbGVmdCBhbmQgcmlnaHQgb3BlcmF0aW9ucyBiZWNvbWUKLSAqIHN5bW1ldHJpY2FsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIGRlc2lnbi4KLSAqCiAgKiBUaGUgbGlzdCBvZiBibG9ja3MgaXMgbmV2ZXIgZW1wdHksIHNvIGQubGVmdGJsb2NrIGFuZCBkLnJpZ2h0YmxvY2sKLSAqIGFyZSBuZXZlciBlcXVhbCB0byBOVUxMLgorICogYXJlIG5ldmVyIGVxdWFsIHRvIE5VTEwuICBUaGUgbGlzdCBpcyBub3QgY2lyY3VsYXIuCisgKgorICogQSBkZXF1ZSBkJ3MgZmlyc3QgZWxlbWVudCBpcyBhdCBkLmxlZnRibG9ja1tsZWZ0aW5kZXhdCisgKiBhbmQgaXRzIGxhc3QgZWxlbWVudCBpcyBhdCBkLnJpZ2h0YmxvY2tbcmlnaHRpbmRleF0uCisgKiBVbmxpa2UgUHl0aG9uIHNsaWNlIGluZGljZXMsIHRoZXNlIGluZGljZXMgYXJlIGluY2x1c2l2ZQorICogb24gYm90aCBlbmRzLiAgVGhpcyBtYWtlcyB0aGUgYWxnb3JpdGhtcyBmb3IgbGVmdCBhbmQKKyAqIHJpZ2h0IG9wZXJhdGlvbnMgbW9yZSBzeW1tZXRyaWNhbCBhbmQgc2ltcGxpZmllcyB0aGUgZGVzaWduLgogICoKICAqIFRoZSBpbmRpY2VzLCBkLmxlZnRpbmRleCBhbmQgZC5yaWdodGluZGV4IGFyZSBhbHdheXMgaW4gdGhlIHJhbmdlCiAgKiAgICAgMCA8PSBpbmRleCA8IEJMT0NLTEVOLgpAQCAtNDcsNDIgKzQ5LDYwIEBACiAKIHR5cGVkZWYgc3RydWN0IEJMT0NLIHsKICAgICBzdHJ1Y3QgQkxPQ0sgKmxlZnRsaW5rOwotICAgIHN0cnVjdCBCTE9DSyAqcmlnaHRsaW5rOwogICAgIFB5T2JqZWN0ICpkYXRhW0JMT0NLTEVOXTsKKyAgICBzdHJ1Y3QgQkxPQ0sgKnJpZ2h0bGluazsKIH0gYmxvY2s7CiAKKy8qIEZvciBkZWJ1ZyBidWlsZHMsIGFkZCBlcnJvciBjaGVja2luZyB0byB0cmFjayB0aGUgZW5kcG9pbnRzCisgKiBpbiB0aGUgY2hhaW4gb2YgbGlua3MuICBUaGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgdGhhdCBsaW5rCisgKiBhc3NpZ25tZW50cyBvbmx5IHRha2UgcGxhY2UgYXQgZW5kcG9pbnRzIHNvIHRoYXQgbGlua3MgYWxyZWFkeQorICogaW4gdXNlIGRvIG5vdCBnZXQgb3ZlcndyaXR0ZW4uCisgKgorICogQ0hFQ0tfRU5EIHNob3VsZCBoYXBwZW4gYmVmb3JlIGVhY2ggYXNzaWdubWVudCB0byBhIGJsb2NrJ3MgbGluayBmaWVsZC4KKyAqIE1BUktfRU5EIHNob3VsZCBoYXBwZW4gd2hlbmV2ZXIgYSBsaW5rIGZpZWxkIGJlY29tZXMgYSBuZXcgZW5kcG9pbnQuCisgKiBUaGlzIGhhcHBlbnMgd2hlbiBuZXcgYmxvY2tzIGFyZSBhZGRlZCBvciB3aGVuZXZlciBhbiBleGlzdGluZworICogYmxvY2sgaXMgZnJlZWQgbGVhdmluZyBhbm90aGVyIGV4aXN0aW5nIGJsb2NrIGFzIHRoZSBuZXcgZW5kcG9pbnQuCisgKi8KKworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgTUFSS19FTkQobGluaykgIGxpbmsgPSBOVUxMOworI2RlZmluZSBDSEVDS19FTkQobGluaykgYXNzZXJ0KGxpbmsgPT0gTlVMTCk7CisjZGVmaW5lIENIRUNLX05PVF9FTkQobGluaykgYXNzZXJ0KGxpbmsgIT0gTlVMTCk7CisjZWxzZQorI2RlZmluZSBNQVJLX0VORChsaW5rKQorI2RlZmluZSBDSEVDS19FTkQobGluaykKKyNkZWZpbmUgQ0hFQ0tfTk9UX0VORChsaW5rKQorI2VuZGlmCisKKy8qIEEgc2ltcGxlIGZyZWVsaXN0aW5nIHNjaGVtZSBpcyB1c2VkIHRvIG1pbmltaXplIGNhbGxzIHRvIHRoZSBtZW1vcnkKKyAgIGFsbG9jYXRvci4gIEl0IGFjY29tb2RhdGVzIGNvbW1vbiB1c2UgY2FzZXMgd2hlcmUgbmV3IGJsb2NrcyBhcmUgYmVpbmcKKyAgIGFkZGVkIGF0IGFib3V0IHRoZSBzYW1lIHJhdGUgYXMgb2xkIGJsb2NrcyBhcmUgYmVpbmcgZnJlZWQuCisgKi8KKwogI2RlZmluZSBNQVhGUkVFQkxPQ0tTIDEwCiBzdGF0aWMgUHlfc3NpemVfdCBudW1mcmVlYmxvY2tzID0gMDsKIHN0YXRpYyBibG9jayAqZnJlZWJsb2Nrc1tNQVhGUkVFQkxPQ0tTXTsKIAogc3RhdGljIGJsb2NrICoKLW5ld2Jsb2NrKGJsb2NrICpsZWZ0bGluaywgYmxvY2sgKnJpZ2h0bGluaywgUHlfc3NpemVfdCBsZW4pIHsKK25ld2Jsb2NrKFB5X3NzaXplX3QgbGVuKSB7CiAgICAgYmxvY2sgKmI7Ci0gICAgLyogVG8gcHJldmVudCBsZW4gZnJvbSBvdmVyZmxvd2luZyBQWV9TU0laRV9UX01BWCBvbiA2NC1iaXQgbWFjaGluZXMsIHdlCi0gICAgICogcmVmdXNlIHRvIGFsbG9jYXRlIG5ldyBibG9ja3MgaWYgdGhlIGN1cnJlbnQgbGVuIGlzIGRhbmdlcm91c2x5Ci0gICAgICogY2xvc2UuICBUaGVyZSBpcyBzb21lIGV4dHJhIG1hcmdpbiB0byBwcmV2ZW50IHNwdXJpb3VzIGFyaXRobWV0aWMKLSAgICAgKiBvdmVyZmxvd3MgYXQgdmFyaW91cyBwbGFjZXMuICBUaGUgZm9sbG93aW5nIGNoZWNrIGVuc3VyZXMgdGhhdAotICAgICAqIHRoZSBibG9ja3MgYWxsb2NhdGVkIHRvIHRoZSBkZXF1ZSwgaW4gdGhlIHdvcnN0IGNhc2UsIGNhbiBvbmx5Ci0gICAgICogaGF2ZSBQWV9TU0laRV9UX01BWC0yIGVudHJpZXMgaW4gdG90YWwuCi0gICAgICovCisgICAgLyogVG8gcHJldmVudCBsZW4gZnJvbSBvdmVyZmxvd2luZyBQWV9TU0laRV9UX01BWCwgd2UgcmVmdXNlIHRvCisgICAgICogYWxsb2NhdGUgbmV3IGJsb2NrcyBpZiB0aGUgY3VycmVudCBsZW4gaXMgbmVhcmluZyBvdmVyZmxvdy4gKi8KICAgICBpZiAobGVuID49IFBZX1NTSVpFX1RfTUFYIC0gMipCTE9DS0xFTikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgYWRkIG1vcmUgYmxvY2tzIHRvIHRoZSBkZXF1ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKG51bWZyZWVibG9ja3MpIHsKLSAgICAgICAgbnVtZnJlZWJsb2NrcyAtPSAxOwotICAgICAgICBiID0gZnJlZWJsb2Nrc1tudW1mcmVlYmxvY2tzXTsKLSAgICB9IGVsc2UgewotICAgICAgICBiID0gUHlNZW1fTWFsbG9jKHNpemVvZihibG9jaykpOwotICAgICAgICBpZiAoYiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgbnVtZnJlZWJsb2Nrcy0tOworICAgICAgICByZXR1cm4gZnJlZWJsb2Nrc1tudW1mcmVlYmxvY2tzXTsKICAgICB9Ci0gICAgYi0+bGVmdGxpbmsgPSBsZWZ0bGluazsKLSAgICBiLT5yaWdodGxpbmsgPSByaWdodGxpbms7Ci0gICAgcmV0dXJuIGI7CisgICAgYiA9IFB5TWVtX01hbGxvYyhzaXplb2YoYmxvY2spKTsKKyAgICBpZiAoYiAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBiOworICAgIH0KKyAgICBQeUVycl9Ob01lbW9yeSgpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZApAQCAtOTcsMTQgKzExNywxMyBAQAogfQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0X1ZBUl9IRUFECiAgICAgYmxvY2sgKmxlZnRibG9jazsKICAgICBibG9jayAqcmlnaHRibG9jazsKICAgICBQeV9zc2l6ZV90IGxlZnRpbmRleDsgICAgICAgLyogaW4gcmFuZ2UoQkxPQ0tMRU4pICovCiAgICAgUHlfc3NpemVfdCByaWdodGluZGV4OyAgICAgIC8qIGluIHJhbmdlKEJMT0NLTEVOKSAqLwotICAgIFB5X3NzaXplX3QgbGVuOworICAgIGxvbmcgc3RhdGU7ICAgICAgICAgICAgICAgICAvKiBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUgaW5kaWNlcyBtb3ZlICovCiAgICAgUHlfc3NpemVfdCBtYXhsZW47Ci0gICAgbG9uZyBzdGF0ZTsgICAgICAgICAvKiBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUgaW5kaWNlcyBtb3ZlICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OyAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwogfSBkZXF1ZW9iamVjdDsKIApAQCAtMTE4LDkgKzEzNyw5IEBACiAgKi8KIAogI2RlZmluZSBUUklNKGQsIHBvcGZ1bmN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoZC0+bWF4bGVuICE9IC0xICYmIGQtPmxlbiA+IGQtPm1heGxlbikgeyAgICAgICAgICAgICAgICBcCisgICAgaWYgKGQtPm1heGxlbiAhPSAtMSAmJiBQeV9TSVpFKGQpID4gZC0+bWF4bGVuKSB7ICAgICAgIFwKICAgICAgICAgUHlPYmplY3QgKnJ2ID0gcG9wZnVuY3Rpb24oZCwgTlVMTCk7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYXNzZXJ0KHJ2ICE9IE5VTEwgICYmICBkLT5sZW4gPD0gZC0+bWF4bGVuKTsgICAgICAgIFwKKyAgICAgICAgYXNzZXJ0KHJ2ICE9IE5VTEwgICYmICBQeV9TSVpFKGQpIDw9IGQtPm1heGxlbik7ICAgIFwKICAgICAgICAgUHlfREVDUkVGKHJ2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKQEAgLTEzNywxOCArMTU2LDIwIEBACiAgICAgaWYgKGRlcXVlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgYiA9IG5ld2Jsb2NrKE5VTEwsIE5VTEwsIDApOworICAgIGIgPSBuZXdibG9jaygwKTsKICAgICBpZiAoYiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihkZXF1ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBNQVJLX0VORChiLT5sZWZ0bGluayk7CisgICAgTUFSS19FTkQoYi0+cmlnaHRsaW5rKTsKIAogICAgIGFzc2VydChCTE9DS0xFTiA+PSAyKTsKICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gYjsKICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IGI7CiAgICAgZGVxdWUtPmxlZnRpbmRleCA9IENFTlRFUiArIDE7CiAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSBDRU5URVI7Ci0gICAgZGVxdWUtPmxlbiA9IDA7CisgICAgUHlfU0laRShkZXF1ZSkgPSAwOwogICAgIGRlcXVlLT5zdGF0ZSA9IDA7CiAgICAgZGVxdWUtPndlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBkZXF1ZS0+bWF4bGVuID0gLTE7CkBAIC0xNjIsMTcgKzE4MywxNyBAQAogICAgIFB5T2JqZWN0ICppdGVtOwogICAgIGJsb2NrICpwcmV2YmxvY2s7CiAKLSAgICBpZiAoZGVxdWUtPmxlbiA9PSAwKSB7CisgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJwb3AgZnJvbSBhbiBlbXB0eSBkZXF1ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaXRlbSA9IGRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4XTsKICAgICBkZXF1ZS0+cmlnaHRpbmRleC0tOwotICAgIGRlcXVlLT5sZW4tLTsKKyAgICBQeV9TSVpFKGRlcXVlKS0tOwogICAgIGRlcXVlLT5zdGF0ZSsrOwogCiAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IC0xKSB7Ci0gICAgICAgIGlmIChkZXF1ZS0+bGVuID09IDApIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrKTsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOwogICAgICAgICAgICAgLyogcmUtY2VudGVyIGluc3RlYWQgb2YgZnJlZWluZyBhIGJsb2NrICovCkBAIC0xODIsNyArMjAzLDggQEAKICAgICAgICAgICAgIHByZXZibG9jayA9IGRlcXVlLT5yaWdodGJsb2NrLT5sZWZ0bGluazsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IGRlcXVlLT5yaWdodGJsb2NrKTsKICAgICAgICAgICAgIGZyZWVibG9jayhkZXF1ZS0+cmlnaHRibG9jayk7Ci0gICAgICAgICAgICBwcmV2YmxvY2stPnJpZ2h0bGluayA9IE5VTEw7CisgICAgICAgICAgICBDSEVDS19OT1RfRU5EKHByZXZibG9jayk7CisgICAgICAgICAgICBNQVJLX0VORChwcmV2YmxvY2stPnJpZ2h0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IHByZXZibG9jazsKICAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOwogICAgICAgICB9CkBAIC0xOTgsMTggKzIyMCwxOCBAQAogICAgIFB5T2JqZWN0ICppdGVtOwogICAgIGJsb2NrICpwcmV2YmxvY2s7CiAKLSAgICBpZiAoZGVxdWUtPmxlbiA9PSAwKSB7CisgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJwb3AgZnJvbSBhbiBlbXB0eSBkZXF1ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gTlVMTCk7CiAgICAgaXRlbSA9IGRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF07CiAgICAgZGVxdWUtPmxlZnRpbmRleCsrOwotICAgIGRlcXVlLT5sZW4tLTsKKyAgICBQeV9TSVpFKGRlcXVlKS0tOwogICAgIGRlcXVlLT5zdGF0ZSsrOwogCiAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKLSAgICAgICAgaWYgKGRlcXVlLT5sZW4gPT0gMCkgeworICAgICAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgewogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2spOwogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPT0gZGVxdWUtPnJpZ2h0aW5kZXgrMSk7CiAgICAgICAgICAgICAvKiByZS1jZW50ZXIgaW5zdGVhZCBvZiBmcmVlaW5nIGEgYmxvY2sgKi8KQEAgLTIxOSw4ICsyNDEsOCBAQAogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gZGVxdWUtPnJpZ2h0YmxvY2spOwogICAgICAgICAgICAgcHJldmJsb2NrID0gZGVxdWUtPmxlZnRibG9jay0+cmlnaHRsaW5rOwogICAgICAgICAgICAgZnJlZWJsb2NrKGRlcXVlLT5sZWZ0YmxvY2spOwotICAgICAgICAgICAgYXNzZXJ0KHByZXZibG9jayAhPSBOVUxMKTsKLSAgICAgICAgICAgIHByZXZibG9jay0+bGVmdGxpbmsgPSBOVUxMOworICAgICAgICAgICAgQ0hFQ0tfTk9UX0VORChwcmV2YmxvY2spOworICAgICAgICAgICAgTUFSS19FTkQocHJldmJsb2NrLT5sZWZ0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gcHJldmJsb2NrOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IDA7CiAgICAgICAgIH0KQEAgLTIzNSwxNiArMjU3LDE4IEBACiB7CiAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IEJMT0NLTEVOLTEpIHsKLSAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhkZXF1ZS0+cmlnaHRibG9jaywgTlVMTCwgZGVxdWUtPmxlbik7CisgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICBpZiAoYiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFzc2VydChkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpOworICAgICAgICBiLT5sZWZ0bGluayA9IGRlcXVlLT5yaWdodGJsb2NrOworICAgICAgICBDSEVDS19FTkQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayk7CiAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPSBiOwogICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IGI7CisgICAgICAgIE1BUktfRU5EKGItPnJpZ2h0bGluayk7CiAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gLTE7CiAgICAgfQogICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICBkZXF1ZS0+bGVuKys7CisgICAgUHlfU0laRShkZXF1ZSkrKzsKICAgICBkZXF1ZS0+cmlnaHRpbmRleCsrOwogICAgIGRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4XSA9IGl0ZW07CiAgICAgVFJJTShkZXF1ZSwgZGVxdWVfcG9wbGVmdCk7CkBAIC0yNTgsMTYgKzI4MiwxOCBAQAogewogICAgIGRlcXVlLT5zdGF0ZSsrOwogICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IDApIHsKLSAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhOVUxMLCBkZXF1ZS0+bGVmdGJsb2NrLCBkZXF1ZS0+bGVuKTsKKyAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhQeV9TSVpFKGRlcXVlKSk7CiAgICAgICAgIGlmIChiID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpOworICAgICAgICBiLT5yaWdodGxpbmsgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgICAgICBDSEVDS19FTkQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmspOwogICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7CiAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBiOworICAgICAgICBNQVJLX0VORChiLT5sZWZ0bGluayk7CiAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBCTE9DS0xFTjsKICAgICB9CiAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgIGRlcXVlLT5sZW4rKzsKKyAgICBQeV9TSVpFKGRlcXVlKSsrOwogICAgIGRlcXVlLT5sZWZ0aW5kZXgtLTsKICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdID0gaXRlbTsKICAgICBUUklNKGRlcXVlLCBkZXF1ZV9wb3ApOwpAQCAtMzA5LDYgKzMzNSwxNCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIC8qIFNwYWNlIHNhdmluZyBoZXVyaXN0aWMuICBTdGFydCBmaWxsaW5nIGZyb20gdGhlIGxlZnQgKi8KKyAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgeworICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayk7CisgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOworICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gMTsKKyAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSAwOworICAgIH0KKwogICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CiAgICAgaWYgKGl0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzE5LDE5ICszNTMsMjAgQEAKICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKICAgICAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSBCTE9DS0xFTi0xKSB7Ci0gICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKGRlcXVlLT5yaWdodGJsb2NrLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXF1ZS0+bGVuKTsKKyAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCk7CisgICAgICAgICAgICBiLT5sZWZ0bGluayA9IGRlcXVlLT5yaWdodGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfRU5EKGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9IGI7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IGI7CisgICAgICAgICAgICBNQVJLX0VORChiLT5yaWdodGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSAtMTsKICAgICAgICAgfQotICAgICAgICBkZXF1ZS0+bGVuKys7CisgICAgICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4Kys7CiAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4XSA9IGl0ZW07CiAgICAgICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcGxlZnQpOwpAQCAtMzYxLDYgKzM5NiwxNCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIC8qIFNwYWNlIHNhdmluZyBoZXVyaXN0aWMuICBTdGFydCBmaWxsaW5nIGZyb20gdGhlIHJpZ2h0ICovCisgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKKyAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2spOworICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA9PSBkZXF1ZS0+cmlnaHRpbmRleCsxKTsKKyAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IEJMT0NLTEVOIC0gMTsKKyAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDI7CisgICAgfQorCiAgICAgaXQgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZXJhYmxlKTsKICAgICBpZiAoaXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNzEsMTkgKzQxNCwyMCBAQAogICAgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewogICAgICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gMCkgewotICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhOVUxMLCBkZXF1ZS0+bGVmdGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXF1ZS0+bGVuKTsKKyAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpOworICAgICAgICAgICAgYi0+cmlnaHRsaW5rID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICAgICAgICAgIENIRUNLX0VORChkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gYjsKKyAgICAgICAgICAgIE1BUktfRU5EKGItPmxlZnRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBCTE9DS0xFTjsKICAgICAgICAgfQotICAgICAgICBkZXF1ZS0+bGVuKys7CisgICAgICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXgtLTsKICAgICAgICAgZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XSA9IGl0ZW07CiAgICAgICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcCk7CkBAIC00MTMsNyArNDU3LDEzIEBACiBzdGF0aWMgaW50CiBfZGVxdWVfcm90YXRlKGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlfc3NpemVfdCBuKQogewotICAgIFB5X3NzaXplX3QgbSwgbGVuPWRlcXVlLT5sZW4sIGhhbGZsZW49bGVuPj4xOworICAgIGJsb2NrICpiID0gTlVMTDsKKyAgICBibG9jayAqbGVmdGJsb2NrID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICBibG9jayAqcmlnaHRibG9jayA9IGRlcXVlLT5yaWdodGJsb2NrOworICAgIFB5X3NzaXplX3QgbGVmdGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKKyAgICBQeV9zc2l6ZV90IHJpZ2h0aW5kZXggPSBkZXF1ZS0+cmlnaHRpbmRleDsKKyAgICBQeV9zc2l6ZV90IGxlbj1QeV9TSVpFKGRlcXVlKSwgaGFsZmxlbj1sZW4+PjE7CisgICAgaW50IHJ2ID0gLTE7CiAKICAgICBpZiAobGVuIDw9IDEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDI5LDc2ICs0NzksMTAzIEBACiAKICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICB3aGlsZSAobiA+IDApIHsKLSAgICAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gMCkgewotICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhOVUxMLCBkZXF1ZS0+bGVmdGJsb2NrLCBsZW4pOwotICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPT0gTlVMTCk7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gYjsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBCTE9DS0xFTjsKKyAgICAgICAgaWYgKGxlZnRpbmRleCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYiA9IG5ld2Jsb2NrKGxlbik7CisgICAgICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYi0+cmlnaHRsaW5rID0gbGVmdGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfRU5EKGxlZnRibG9jay0+bGVmdGxpbmspOworICAgICAgICAgICAgbGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7CisgICAgICAgICAgICBsZWZ0YmxvY2sgPSBiOworICAgICAgICAgICAgTUFSS19FTkQoYi0+bGVmdGxpbmspOworICAgICAgICAgICAgbGVmdGluZGV4ID0gQkxPQ0tMRU47CisgICAgICAgICAgICBiID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA+IDApOworICAgICAgICBhc3NlcnQobGVmdGluZGV4ID4gMCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqc3JjLCAqKmRlc3Q7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG0gPSBuOwogCi0gICAgICAgIG0gPSBuOwotICAgICAgICBpZiAobSA+IGRlcXVlLT5yaWdodGluZGV4ICsgMSkKLSAgICAgICAgICAgIG0gPSBkZXF1ZS0+cmlnaHRpbmRleCArIDE7Ci0gICAgICAgIGlmIChtID4gZGVxdWUtPmxlZnRpbmRleCkKLSAgICAgICAgICAgIG0gPSBkZXF1ZS0+bGVmdGluZGV4OwotICAgICAgICBhc3NlcnQgKG0gPiAwICYmIG0gPD0gbGVuKTsKLSAgICAgICAgbWVtY3B5KCZkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXggLSBtXSwKLSAgICAgICAgICAgICAgICZkZXF1ZS0+cmlnaHRibG9jay0+ZGF0YVtkZXF1ZS0+cmlnaHRpbmRleCArIDEgLSBtXSwKLSAgICAgICAgICAgICAgIG0gKiBzaXplb2YoUHlPYmplY3QgKikpOwotICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCAtPSBtOwotICAgICAgICBkZXF1ZS0+bGVmdGluZGV4IC09IG07Ci0gICAgICAgIG4gLT0gbTsKLQotICAgICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gLTEpIHsKLSAgICAgICAgICAgIGJsb2NrICpwcmV2YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jay0+bGVmdGxpbms7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPnJpZ2h0YmxvY2sgIT0gTlVMTCk7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBkZXF1ZS0+cmlnaHRibG9jayk7Ci0gICAgICAgICAgICBmcmVlYmxvY2soZGVxdWUtPnJpZ2h0YmxvY2spOwotICAgICAgICAgICAgcHJldmJsb2NrLT5yaWdodGxpbmsgPSBOVUxMOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBwcmV2YmxvY2s7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMTsKKyAgICAgICAgICAgIGlmIChtID4gcmlnaHRpbmRleCArIDEpCisgICAgICAgICAgICAgICAgbSA9IHJpZ2h0aW5kZXggKyAxOworICAgICAgICAgICAgaWYgKG0gPiBsZWZ0aW5kZXgpCisgICAgICAgICAgICAgICAgbSA9IGxlZnRpbmRleDsKKyAgICAgICAgICAgIGFzc2VydCAobSA+IDAgJiYgbSA8PSBsZW4pOworICAgICAgICAgICAgc3JjID0gJnJpZ2h0YmxvY2stPmRhdGFbcmlnaHRpbmRleF07CisgICAgICAgICAgICBkZXN0ID0gJmxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXggLSAxXTsKKyAgICAgICAgICAgIHJpZ2h0aW5kZXggLT0gbTsKKyAgICAgICAgICAgIGxlZnRpbmRleCAtPSBtOworICAgICAgICAgICAgbiAtPSBtOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICooZGVzdC0tKSA9ICooc3JjLS0pOworICAgICAgICAgICAgfSB3aGlsZSAoLS1tKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmlnaHRpbmRleCA9PSAtMSkgeworICAgICAgICAgICAgYXNzZXJ0KGxlZnRibG9jayAhPSByaWdodGJsb2NrKTsKKyAgICAgICAgICAgIGFzc2VydChiID09IE5VTEwpOworICAgICAgICAgICAgYiA9IHJpZ2h0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19OT1RfRU5EKHJpZ2h0YmxvY2stPmxlZnRsaW5rKTsKKyAgICAgICAgICAgIHJpZ2h0YmxvY2sgPSByaWdodGJsb2NrLT5sZWZ0bGluazsKKyAgICAgICAgICAgIE1BUktfRU5EKHJpZ2h0YmxvY2stPnJpZ2h0bGluayk7CisgICAgICAgICAgICByaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOwogICAgICAgICB9CiAgICAgfQogICAgIHdoaWxlIChuIDwgMCkgewotICAgICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gQkxPQ0tMRU4gLSAxKSB7Ci0gICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKGRlcXVlLT5yaWdodGJsb2NrLCBOVUxMLCBsZW4pOwotICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKTsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPSBiOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBiOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSAtMTsKKyAgICAgICAgaWYgKHJpZ2h0aW5kZXggPT0gQkxPQ0tMRU4gLSAxKSB7CisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYiA9IG5ld2Jsb2NrKGxlbik7CisgICAgICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYi0+bGVmdGxpbmsgPSByaWdodGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfRU5EKHJpZ2h0YmxvY2stPnJpZ2h0bGluayk7CisgICAgICAgICAgICByaWdodGJsb2NrLT5yaWdodGxpbmsgPSBiOworICAgICAgICAgICAgcmlnaHRibG9jayA9IGI7CisgICAgICAgICAgICBNQVJLX0VORChiLT5yaWdodGxpbmspOworICAgICAgICAgICAgcmlnaHRpbmRleCA9IC0xOworICAgICAgICAgICAgYiA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0IChkZXF1ZS0+cmlnaHRpbmRleCA8IEJMT0NLTEVOIC0gMSk7CisgICAgICAgIGFzc2VydCAocmlnaHRpbmRleCA8IEJMT0NLTEVOIC0gMSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqc3JjLCAqKmRlc3Q7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG0gPSAtbjsKIAotICAgICAgICBtID0gLW47Ci0gICAgICAgIGlmIChtID4gQkxPQ0tMRU4gLSBkZXF1ZS0+bGVmdGluZGV4KQotICAgICAgICAgICAgbSA9IEJMT0NLTEVOIC0gZGVxdWUtPmxlZnRpbmRleDsKLSAgICAgICAgaWYgKG0gPiBCTE9DS0xFTiAtIDEgLSBkZXF1ZS0+cmlnaHRpbmRleCkKLSAgICAgICAgICAgIG0gPSBCTE9DS0xFTiAtIDEgLSBkZXF1ZS0+cmlnaHRpbmRleDsKLSAgICAgICAgYXNzZXJ0IChtID4gMCAmJiBtIDw9IGxlbik7Ci0gICAgICAgIG1lbWNweSgmZGVxdWUtPnJpZ2h0YmxvY2stPmRhdGFbZGVxdWUtPnJpZ2h0aW5kZXggKyAxXSwKLSAgICAgICAgICAgICAgICZkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdLAotICAgICAgICAgICAgICAgbSAqIHNpemVvZihQeU9iamVjdCAqKSk7Ci0gICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggKz0gbTsKLSAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggKz0gbTsKLSAgICAgICAgbiArPSBtOwotCi0gICAgICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IEJMT0NLTEVOKSB7Ci0gICAgICAgICAgICBibG9jayAqbmV4dGJsb2NrID0gZGVxdWUtPmxlZnRibG9jay0+cmlnaHRsaW5rOwotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gZGVxdWUtPnJpZ2h0YmxvY2spOwotICAgICAgICAgICAgZnJlZWJsb2NrKGRlcXVlLT5sZWZ0YmxvY2spOwotICAgICAgICAgICAgYXNzZXJ0KG5leHRibG9jayAhPSBOVUxMKTsKLSAgICAgICAgICAgIG5leHRibG9jay0+bGVmdGxpbmsgPSBOVUxMOwotICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IG5leHRibG9jazsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSAwOworICAgICAgICAgICAgaWYgKG0gPiBCTE9DS0xFTiAtIGxlZnRpbmRleCkKKyAgICAgICAgICAgICAgICBtID0gQkxPQ0tMRU4gLSBsZWZ0aW5kZXg7CisgICAgICAgICAgICBpZiAobSA+IEJMT0NLTEVOIC0gMSAtIHJpZ2h0aW5kZXgpCisgICAgICAgICAgICAgICAgbSA9IEJMT0NLTEVOIC0gMSAtIHJpZ2h0aW5kZXg7CisgICAgICAgICAgICBhc3NlcnQgKG0gPiAwICYmIG0gPD0gbGVuKTsKKyAgICAgICAgICAgIHNyYyA9ICZsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4XTsKKyAgICAgICAgICAgIGRlc3QgPSAmcmlnaHRibG9jay0+ZGF0YVtyaWdodGluZGV4ICsgMV07CisgICAgICAgICAgICBsZWZ0aW5kZXggKz0gbTsKKyAgICAgICAgICAgIHJpZ2h0aW5kZXggKz0gbTsKKyAgICAgICAgICAgIG4gKz0gbTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqKGRlc3QrKykgPSAqKHNyYysrKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlZnRpbmRleCA9PSBCTE9DS0xFTikgeworICAgICAgICAgICAgYXNzZXJ0KGxlZnRibG9jayAhPSByaWdodGJsb2NrKTsKKyAgICAgICAgICAgIGFzc2VydChiID09IE5VTEwpOworICAgICAgICAgICAgYiA9IGxlZnRibG9jazsKKyAgICAgICAgICAgIENIRUNLX05PVF9FTkQobGVmdGJsb2NrLT5yaWdodGxpbmspOworICAgICAgICAgICAgbGVmdGJsb2NrID0gbGVmdGJsb2NrLT5yaWdodGxpbms7CisgICAgICAgICAgICBNQVJLX0VORChsZWZ0YmxvY2stPmxlZnRsaW5rKTsKKyAgICAgICAgICAgIGxlZnRpbmRleCA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcnYgPSAwOworZG9uZToKKyAgICBpZiAoYiAhPSBOVUxMKQorICAgICAgICBmcmVlYmxvY2soYik7CisgICAgZGVxdWUtPmxlZnRibG9jayA9IGxlZnRibG9jazsKKyAgICBkZXF1ZS0+cmlnaHRibG9jayA9IHJpZ2h0YmxvY2s7CisgICAgZGVxdWUtPmxlZnRpbmRleCA9IGxlZnRpbmRleDsKKyAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IHJpZ2h0aW5kZXg7CisKKyAgICByZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01MjMsMTMgKzYwMCwxNSBAQAogICAgIGJsb2NrICpyaWdodGJsb2NrID0gZGVxdWUtPnJpZ2h0YmxvY2s7CiAgICAgUHlfc3NpemVfdCBsZWZ0aW5kZXggPSBkZXF1ZS0+bGVmdGluZGV4OwogICAgIFB5X3NzaXplX3QgcmlnaHRpbmRleCA9IGRlcXVlLT5yaWdodGluZGV4OwotICAgIFB5X3NzaXplX3QgbiA9IChkZXF1ZS0+bGVuKS8yOworICAgIFB5X3NzaXplX3QgbiA9IChQeV9TSVpFKGRlcXVlKSkvMjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnRtcDsKIAogICAgIGZvciAoaT0wIDsgaTxuIDsgaSsrKSB7CiAgICAgICAgIC8qIFZhbGlkYXRlIHRoYXQgcG9pbnRlcnMgaGF2ZW4ndCBtZXQgaW4gdGhlIG1pZGRsZSAqLwogICAgICAgICBhc3NlcnQobGVmdGJsb2NrICE9IHJpZ2h0YmxvY2sgfHwgbGVmdGluZGV4IDwgcmlnaHRpbmRleCk7CisgICAgICAgIENIRUNLX05PVF9FTkQobGVmdGJsb2NrKTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChyaWdodGJsb2NrKTsKIAogICAgICAgICAvKiBTd2FwICovCiAgICAgICAgIHRtcCA9IGxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXhdOwpAQCAtNTM5LDggKzYxOCw2IEBACiAgICAgICAgIC8qIEFkdmFuY2UgbGVmdCBibG9jay9pbmRleCBwYWlyICovCiAgICAgICAgIGxlZnRpbmRleCsrOwogICAgICAgICBpZiAobGVmdGluZGV4ID09IEJMT0NLTEVOKSB7Ci0gICAgICAgICAgICBpZiAobGVmdGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGxlZnRibG9jayA9IGxlZnRibG9jay0+cmlnaHRsaW5rOwogICAgICAgICAgICAgbGVmdGluZGV4ID0gMDsKICAgICAgICAgfQpAQCAtNTQ4LDggKzYyNSw2IEBACiAgICAgICAgIC8qIFN0ZXAgYmFja3dhcmRzIHdpdGggdGhlIHJpZ2h0IGJsb2NrL2luZGV4IHBhaXIgKi8KICAgICAgICAgcmlnaHRpbmRleC0tOwogICAgICAgICBpZiAocmlnaHRpbmRleCA9PSAtMSkgewotICAgICAgICAgICAgaWYgKHJpZ2h0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByaWdodGJsb2NrID0gcmlnaHRibG9jay0+bGVmdGxpbms7CiAgICAgICAgICAgICByaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOwogICAgICAgICB9CkBAIC01NjMsOSArNjM4LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZXF1ZV9jb3VudChkZXF1ZW9iamVjdCAqZGVxdWUsIFB5T2JqZWN0ICp2KQogewotICAgIGJsb2NrICpsZWZ0YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrOwotICAgIFB5X3NzaXplX3QgbGVmdGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKLSAgICBQeV9zc2l6ZV90IG4gPSBkZXF1ZS0+bGVuOworICAgIGJsb2NrICpiID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKKyAgICBQeV9zc2l6ZV90IG4gPSBQeV9TSVpFKGRlcXVlKTsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBjb3VudCA9IDA7CiAgICAgUHlPYmplY3QgKml0ZW07CkBAIC01NzMsNyArNjQ4LDggQEAKICAgICBpbnQgY21wOwogCiAgICAgZm9yIChpPTAgOyBpPG4gOyBpKyspIHsKLSAgICAgICAgaXRlbSA9IGxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXhdOworICAgICAgICBDSEVDS19OT1RfRU5EKGIpOworICAgICAgICBpdGVtID0gYi0+ZGF0YVtpbmRleF07CiAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpdGVtLCB2LCBQeV9FUSk7CiAgICAgICAgIGlmIChjbXAgPiAwKQogICAgICAgICAgICAgY291bnQrKzsKQEAgLTU4NywxMiArNjYzLDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBBZHZhbmNlIGxlZnQgYmxvY2svaW5kZXggcGFpciAqLwotICAgICAgICBsZWZ0aW5kZXgrKzsKLSAgICAgICAgaWYgKGxlZnRpbmRleCA9PSBCTE9DS0xFTikgewotICAgICAgICAgICAgaWYgKGxlZnRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpICAvKiBjYW4gb2NjdXIgd2hlbiBpPT1uLTEgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGxlZnRibG9jayA9IGxlZnRibG9jay0+cmlnaHRsaW5rOwotICAgICAgICAgICAgbGVmdGluZGV4ID0gMDsKKyAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgaWYgKGluZGV4ID09IEJMT0NLTEVOKSB7CisgICAgICAgICAgICBiID0gYi0+cmlnaHRsaW5rOworICAgICAgICAgICAgaW5kZXggPSAwOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoY291bnQpOwpAQCAtNjA0LDE5ICs2NzgsMTkgQEAKIHN0YXRpYyBQeV9zc2l6ZV90CiBkZXF1ZV9sZW4oZGVxdWVvYmplY3QgKmRlcXVlKQogewotICAgIHJldHVybiBkZXF1ZS0+bGVuOworICAgIHJldHVybiBQeV9TSVpFKGRlcXVlKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGRlcXVlX3JlbW92ZShkZXF1ZW9iamVjdCAqZGVxdWUsIFB5T2JqZWN0ICp2YWx1ZSkKIHsKLSAgICBQeV9zc2l6ZV90IGksIG49ZGVxdWUtPmxlbjsKKyAgICBQeV9zc2l6ZV90IGksIG49UHlfU0laRShkZXF1ZSk7CiAKICAgICBmb3IgKGk9MCA7IGk8biA7IGkrKykgewogICAgICAgICBQeU9iamVjdCAqaXRlbSA9IGRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF07CiAgICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbSwgdmFsdWUsIFB5X0VRKTsKIAotICAgICAgICBpZiAoZGVxdWUtPmxlbiAhPSBuKSB7CisgICAgICAgIGlmIChQeV9TSVpFKGRlcXVlKSAhPSBuKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKICAgICAgICAgICAgICAgICAiZGVxdWUgbXV0YXRlZCBkdXJpbmcgcmVtb3ZlKCkuIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTY0NywxNCArNzIxLDE0IEBACiB7CiAgICAgUHlPYmplY3QgKml0ZW07CiAKLSAgICB3aGlsZSAoZGVxdWUtPmxlbikgeworICAgIHdoaWxlIChQeV9TSVpFKGRlcXVlKSkgewogICAgICAgICBpdGVtID0gZGVxdWVfcG9wKGRlcXVlLCBOVUxMKTsKICAgICAgICAgYXNzZXJ0IChpdGVtICE9IE5VTEwpOwogICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgfQogICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrICYmCiAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggLSAxID09IGRlcXVlLT5yaWdodGluZGV4ICYmCi0gICAgICAgICAgIGRlcXVlLT5sZW4gPT0gMCk7CisgICAgICAgICAgIFB5X1NJWkUoZGVxdWUpID09IDApOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNjY0LDcgKzczOCw3IEBACiAgICAgUHlPYmplY3QgKml0ZW07CiAgICAgUHlfc3NpemVfdCBuLCBpbmRleD1pOwogCi0gICAgaWYgKGkgPCAwIHx8IGkgPj0gZGVxdWUtPmxlbikgeworICAgIGlmIChpIDwgMCB8fCBpID49IFB5X1NJWkUoZGVxdWUpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImRlcXVlIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTY3MywxOSArNzQ3LDE5IEBACiAgICAgaWYgKGkgPT0gMCkgewogICAgICAgICBpID0gZGVxdWUtPmxlZnRpbmRleDsKICAgICAgICAgYiA9IGRlcXVlLT5sZWZ0YmxvY2s7Ci0gICAgfSBlbHNlIGlmIChpID09IGRlcXVlLT5sZW4gLSAxKSB7CisgICAgfSBlbHNlIGlmIChpID09IFB5X1NJWkUoZGVxdWUpIC0gMSkgewogICAgICAgICBpID0gZGVxdWUtPnJpZ2h0aW5kZXg7CiAgICAgICAgIGIgPSBkZXF1ZS0+cmlnaHRibG9jazsKICAgICB9IGVsc2UgewogICAgICAgICBpICs9IGRlcXVlLT5sZWZ0aW5kZXg7CiAgICAgICAgIG4gPSBpIC8gQkxPQ0tMRU47CiAgICAgICAgIGkgJT0gQkxPQ0tMRU47Ci0gICAgICAgIGlmIChpbmRleCA8IChkZXF1ZS0+bGVuID4+IDEpKSB7CisgICAgICAgIGlmIChpbmRleCA8IChQeV9TSVpFKGRlcXVlKSA+PiAxKSkgewogICAgICAgICAgICAgYiA9IGRlcXVlLT5sZWZ0YmxvY2s7CiAgICAgICAgICAgICB3aGlsZSAobi0tKQogICAgICAgICAgICAgICAgIGIgPSBiLT5yaWdodGxpbms7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuID0gKGRlcXVlLT5sZWZ0aW5kZXggKyBkZXF1ZS0+bGVuIC0gMSkgLyBCTE9DS0xFTiAtIG47CisgICAgICAgICAgICBuID0gKGRlcXVlLT5sZWZ0aW5kZXggKyBQeV9TSVpFKGRlcXVlKSAtIDEpIC8gQkxPQ0tMRU4gLSBuOwogICAgICAgICAgICAgYiA9IGRlcXVlLT5yaWdodGJsb2NrOwogICAgICAgICAgICAgd2hpbGUgKG4tLSkKICAgICAgICAgICAgICAgICBiID0gYi0+bGVmdGxpbms7CkBAIC03MDgsNyArNzgyLDcgQEAKIHsKICAgICBQeU9iamVjdCAqaXRlbTsKIAotICAgIGFzc2VydCAoaSA+PSAwICYmIGkgPCBkZXF1ZS0+bGVuKTsKKyAgICBhc3NlcnQgKGkgPj0gMCAmJiBpIDwgUHlfU0laRShkZXF1ZSkpOwogICAgIGlmIChfZGVxdWVfcm90YXRlKGRlcXVlLCAtaSkgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNzI0LDcgKzc5OCw3IEBACiB7CiAgICAgUHlPYmplY3QgKm9sZF92YWx1ZTsKICAgICBibG9jayAqYjsKLSAgICBQeV9zc2l6ZV90IG4sIGxlbj1kZXF1ZS0+bGVuLCBoYWxmbGVuPShsZW4rMSk+PjEsIGluZGV4PWk7CisgICAgUHlfc3NpemVfdCBuLCBsZW49UHlfU0laRShkZXF1ZSksIGhhbGZsZW49KGxlbisxKT4+MSwgaW5kZXg9aTsKIAogICAgIGlmIChpIDwgMCB8fCBpID49IGxlbikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKQEAgLTc4NywxNyArODYxLDE3IEBACiAgICAgUHlfc3NpemVfdCBpbmRleDsKICAgICBQeV9zc2l6ZV90IGluZGV4bG8gPSBkZXF1ZS0+bGVmdGluZGV4OwogCi0gICAgZm9yIChiID0gZGVxdWUtPmxlZnRibG9jazsgYiAhPSBOVUxMOyBiID0gYi0+cmlnaHRsaW5rKSB7Ci0gICAgICAgIGNvbnN0IFB5X3NzaXplX3QgaW5kZXhoaSA9IGIgPT0gZGVxdWUtPnJpZ2h0YmxvY2sgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggOgotICAgICAgICAgICAgICAgICAgICAgQkxPQ0tMRU4gLSAxOwotCi0gICAgICAgIGZvciAoaW5kZXggPSBpbmRleGxvOyBpbmRleCA8PSBpbmRleGhpOyArK2luZGV4KSB7CisgICAgZm9yIChiID0gZGVxdWUtPmxlZnRibG9jazsgYiAhPSBkZXF1ZS0+cmlnaHRibG9jazsgYiA9IGItPnJpZ2h0bGluaykgeworICAgICAgICBmb3IgKGluZGV4ID0gaW5kZXhsbzsgaW5kZXggPCBCTE9DS0xFTiA7IGluZGV4KyspIHsKICAgICAgICAgICAgIGl0ZW0gPSBiLT5kYXRhW2luZGV4XTsKICAgICAgICAgICAgIFB5X1ZJU0lUKGl0ZW0pOwogICAgICAgICB9CiAgICAgICAgIGluZGV4bG8gPSAwOwogICAgIH0KKyAgICBmb3IgKGluZGV4ID0gaW5kZXhsbzsgaW5kZXggPD0gZGVxdWUtPnJpZ2h0aW5kZXg7IGluZGV4KyspIHsKKyAgICAgICAgaXRlbSA9IGItPmRhdGFbaW5kZXhdOworICAgICAgICBQeV9WSVNJVChpdGVtKTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTg4Nyw4ICs5NjEsOCBAQAogICAgIH0KIAogICAgIC8qIFNob3J0Y3V0cyAqLwotICAgIHZzID0gKChkZXF1ZW9iamVjdCAqKXYpLT5sZW47Ci0gICAgd3MgPSAoKGRlcXVlb2JqZWN0ICopdyktPmxlbjsKKyAgICB2cyA9IFB5X1NJWkUoKGRlcXVlb2JqZWN0ICopdik7CisgICAgd3MgPSBQeV9TSVpFKChkZXF1ZW9iamVjdCAqKXcpOwogICAgIGlmIChvcCA9PSBQeV9FUSkgewogICAgICAgICBpZiAodiA9PSB3KQogICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CkBAIC05ODksOCArMTA2Myw4IEBACiAgICAgUHlfc3NpemVfdCBibG9ja3M7CiAKICAgICByZXMgPSBzaXplb2YoZGVxdWVvYmplY3QpOwotICAgIGJsb2NrcyA9IChkZXF1ZS0+bGVmdGluZGV4ICsgZGVxdWUtPmxlbiArIEJMT0NLTEVOIC0gMSkgLyBCTE9DS0xFTjsKLSAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCArIGRlcXVlLT5sZW4gLSAxID09CisgICAgYmxvY2tzID0gKGRlcXVlLT5sZWZ0aW5kZXggKyBQeV9TSVpFKGRlcXVlKSArIEJMT0NLTEVOIC0gMSkgLyBCTE9DS0xFTjsKKyAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCArIFB5X1NJWkUoZGVxdWUpIC0gMSA9PQogICAgICAgICAgICAoYmxvY2tzIC0gMSkgKiBCTE9DS0xFTiArIGRlcXVlLT5yaWdodGluZGV4KTsKICAgICByZXMgKz0gYmxvY2tzICogc2l6ZW9mKGJsb2NrKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7CkBAIC0xMTQzLDcgKzEyMTcsNyBAQAogICAgIFB5X0lOQ1JFRihkZXF1ZSk7CiAgICAgaXQtPmRlcXVlID0gZGVxdWU7CiAgICAgaXQtPnN0YXRlID0gZGVxdWUtPnN0YXRlOwotICAgIGl0LT5jb3VudGVyID0gZGVxdWUtPmxlbjsKKyAgICBpdC0+Y291bnRlciA9IFB5X1NJWkUoZGVxdWUpOwogICAgIFB5T2JqZWN0X0dDX1RyYWNrKGl0KTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopaXQ7CiB9CkBAIC0xMTgyLDcgKzEyNTYsNyBAQAogICAgIGl0LT5pbmRleCsrOwogICAgIGl0LT5jb3VudGVyLS07CiAgICAgaWYgKGl0LT5pbmRleCA9PSBCTE9DS0xFTiAmJiBpdC0+Y291bnRlciA+IDApIHsKLSAgICAgICAgYXNzZXJ0IChpdC0+Yi0+cmlnaHRsaW5rICE9IE5VTEwpOworICAgICAgICBDSEVDS19OT1RfRU5EKGl0LT5iLT5yaWdodGxpbmspOwogICAgICAgICBpdC0+YiA9IGl0LT5iLT5yaWdodGxpbms7CiAgICAgICAgIGl0LT5pbmRleCA9IDA7CiAgICAgfQpAQCAtMTIzMCw3ICsxMzA0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZXF1ZWl0ZXJfcmVkdWNlKGRlcXVlaXRlcm9iamVjdCAqaXQpCiB7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT24pIiwgUHlfVFlQRShpdCksIGl0LT5kZXF1ZSwgaXQtPmRlcXVlLT5sZW4gLSBpdC0+Y291bnRlcik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT24pIiwgUHlfVFlQRShpdCksIGl0LT5kZXF1ZSwgUHlfU0laRShpdC0+ZGVxdWUpIC0gaXQtPmNvdW50ZXIpOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgZGVxdWVpdGVyX21ldGhvZHNbXSA9IHsKQEAgLTEyOTksNyArMTM3Myw3IEBACiAgICAgUHlfSU5DUkVGKGRlcXVlKTsKICAgICBpdC0+ZGVxdWUgPSBkZXF1ZTsKICAgICBpdC0+c3RhdGUgPSBkZXF1ZS0+c3RhdGU7Ci0gICAgaXQtPmNvdW50ZXIgPSBkZXF1ZS0+bGVuOworICAgIGl0LT5jb3VudGVyID0gUHlfU0laRShkZXF1ZSk7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soaXQpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilpdDsKIH0KQEAgLTEzMjQsNyArMTM5OCw3IEBACiAgICAgaXQtPmluZGV4LS07CiAgICAgaXQtPmNvdW50ZXItLTsKICAgICBpZiAoaXQtPmluZGV4ID09IC0xICYmIGl0LT5jb3VudGVyID4gMCkgewotICAgICAgICBhc3NlcnQgKGl0LT5iLT5sZWZ0bGluayAhPSBOVUxMKTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChpdC0+Yi0+bGVmdGxpbmspOwogICAgICAgICBpdC0+YiA9IGl0LT5iLT5sZWZ0bGluazsKICAgICAgICAgaXQtPmluZGV4ID0gQkxPQ0tMRU4gLSAxOwogICAgIH0KQEAgLTE3NDQsNyArMTgxOCw3IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJvdW5kX2dldCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobWFwcGluZywgImdldCIpOworICAgICAgICBib3VuZF9nZXQgPSBfUHlPYmplY3RfR2V0QXR0cklkKG1hcHBpbmcsICZQeUlkX2dldCk7CiAgICAgICAgIGlmIChib3VuZF9nZXQgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZG9uZTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3J5cHRtb2R1bGUuYyBiL01vZHVsZXMvX2NyeXB0bW9kdWxlLmMKaW5kZXggNTEwMDc4OC4uZGE0NGVmMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3J5cHRtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jcnlwdG1vZHVsZS5jCkBAIC01LDQwICs1LDc2IEBACiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAotI2lmZGVmIF9fVk1TCi0jaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSNlbmRpZgotCiAvKiBNb2R1bGUgY3J5cHQgKi8KIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIGNyeXB0CitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1jNjI1MmNmNGYyZjJhZTgxXSovCiAKLXN0YXRpYyBQeU9iamVjdCAqY3J5cHRfY3J5cHQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorCisvKltjbGluaWMgaW5wdXRdCitjcnlwdC5jcnlwdAorCisgICAgd29yZDogJ3MnCisgICAgc2FsdDogJ3MnCisgICAgLworCitIYXNoIGEgKndvcmQqIHdpdGggdGhlIGdpdmVuICpzYWx0KiBhbmQgcmV0dXJuIHRoZSBoYXNoZWQgcGFzc3dvcmQuCisKKyp3b3JkKiB3aWxsIHVzdWFsbHkgYmUgYSB1c2VyJ3MgcGFzc3dvcmQuICAqc2FsdCogKGVpdGhlciBhIHJhbmRvbSAyIG9yIDE2CitjaGFyYWN0ZXIgc3RyaW5nLCBwb3NzaWJseSBwcmVmaXhlZCB3aXRoICRkaWdpdCQgdG8gaW5kaWNhdGUgdGhlIG1ldGhvZCkKK3dpbGwgYmUgdXNlZCB0byBwZXJ0dXJiIHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobSBhbmQgcHJvZHVjZSBkaXN0aW5jdAorcmVzdWx0cyBmb3IgYSBnaXZlbiAqd29yZCouCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGNyeXB0X2NyeXB0X19kb2NfXywKKyJjcnlwdCgkbW9kdWxlLCB3b3JkLCBzYWx0LCAvKVxuIgorIi0tXG4iCisiXG4iCisiSGFzaCBhICp3b3JkKiB3aXRoIHRoZSBnaXZlbiAqc2FsdCogYW5kIHJldHVybiB0aGUgaGFzaGVkIHBhc3N3b3JkLlxuIgorIlxuIgorIip3b3JkKiB3aWxsIHVzdWFsbHkgYmUgYSB1c2VyXCdzIHBhc3N3b3JkLiAgKnNhbHQqIChlaXRoZXIgYSByYW5kb20gMiBvciAxNlxuIgorImNoYXJhY3RlciBzdHJpbmcsIHBvc3NpYmx5IHByZWZpeGVkIHdpdGggJGRpZ2l0JCB0byBpbmRpY2F0ZSB0aGUgbWV0aG9kKVxuIgorIndpbGwgYmUgdXNlZCB0byBwZXJ0dXJiIHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobSBhbmQgcHJvZHVjZSBkaXN0aW5jdFxuIgorInJlc3VsdHMgZm9yIGEgZ2l2ZW4gKndvcmQqLiIpOworCisjZGVmaW5lIENSWVBUX0NSWVBUX01FVEhPRERFRiAgICBcCisgICAgeyJjcnlwdCIsIChQeUNGdW5jdGlvbiljcnlwdF9jcnlwdCwgTUVUSF9WQVJBUkdTLCBjcnlwdF9jcnlwdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorY3J5cHRfY3J5cHRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBjb25zdCBjaGFyICp3b3JkLCBjb25zdCBjaGFyICpzYWx0KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NyeXB0X2NyeXB0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGNoYXIgKndvcmQsICpzYWx0OwotI2lmbmRlZiBfX1ZNUwotICAgIGV4dGVybiBjaGFyICogY3J5cHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotI2VuZGlmCisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqd29yZDsKKyAgICBjb25zdCBjaGFyICpzYWx0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzczpjcnlwdCIsICZ3b3JkLCAmc2FsdCkpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAic3M6Y3J5cHQiLAorICAgICAgICAmd29yZCwgJnNhbHQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gY3J5cHRfY3J5cHRfaW1wbChtb2R1bGUsIHdvcmQsIHNhbHQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitjcnlwdF9jcnlwdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKndvcmQsIGNvbnN0IGNoYXIgKnNhbHQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2VhYWNkZjk5NGE2ZmYyMyBpbnB1dD00ZDkzYjZkMGY0MWZiZjU4XSovCit7CiAgICAgLyogT24gc29tZSBwbGF0Zm9ybXMgKEF0aGVPUykgY3J5cHQgcmV0dXJucyBOVUxMIGZvciBhbiBpbnZhbGlkCiAgICAgICAgc2FsdC4gUmV0dXJuIE5vbmUgaW4gdGhhdCBjYXNlLiBYWFggTWF5YmUgcmFpc2UgYW4gZXhjZXB0aW9uPyAgKi8KICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgicyIsIGNyeXB0KHdvcmQsIHNhbHQpKTsKLQogfQogCi1QeURvY19TVFJWQVIoY3J5cHRfY3J5cHRfX2RvY19fLAotImNyeXB0KHdvcmQsIHNhbHQpIC0+IHN0cmluZ1xuXAotd29yZCB3aWxsIHVzdWFsbHkgYmUgYSB1c2VyJ3MgcGFzc3dvcmQuIHNhbHQgaXMgYSAyLWNoYXJhY3RlciBzdHJpbmdcblwKLXdoaWNoIHdpbGwgYmUgdXNlZCB0byBzZWxlY3Qgb25lIG9mIDQwOTYgdmFyaWF0aW9ucyBvZiBERVMuIFRoZSBjaGFyYWN0ZXJzXG5cCi1pbiBzYWx0IG11c3QgYmUgZWl0aGVyIFwiLlwiLCBcIi9cIiwgb3IgYW4gYWxwaGFudW1lcmljIGNoYXJhY3Rlci4gUmV0dXJuc1xuXAotdGhlIGhhc2hlZCBwYXNzd29yZCBhcyBhIHN0cmluZywgd2hpY2ggd2lsbCBiZSBjb21wb3NlZCBvZiBjaGFyYWN0ZXJzIGZyb21cblwKLXRoZSBzYW1lIGFscGhhYmV0IGFzIHRoZSBzYWx0LiIpOwotCiAKIHN0YXRpYyBQeU1ldGhvZERlZiBjcnlwdF9tZXRob2RzW10gPSB7Ci0gICAgeyJjcnlwdCIsICAgICAgICAgICBjcnlwdF9jcnlwdCwgTUVUSF9WQVJBUkdTLCBjcnlwdF9jcnlwdF9fZG9jX199LAorICAgIENSWVBUX0NSWVBUX01FVEhPRERFRgogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jc3YuYyBiL01vZHVsZXMvX2Nzdi5jCmluZGV4IGY1ZjZlNzEuLmM4NzY3ZDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2Nzdi5jCisrKyBiL01vZHVsZXMvX2Nzdi5jCkBAIC01MSw3ICs1MSw3IEBACiB0eXBlZGVmIGVudW0gewogICAgIFNUQVJUX1JFQ09SRCwgU1RBUlRfRklFTEQsIEVTQ0FQRURfQ0hBUiwgSU5fRklFTEQsCiAgICAgSU5fUVVPVEVEX0ZJRUxELCBFU0NBUEVfSU5fUVVPVEVEX0ZJRUxELCBRVU9URV9JTl9RVU9URURfRklFTEQsCi0gICAgRUFUX0NSTkwKKyAgICBFQVRfQ1JOTCxBRlRFUl9FU0NBUEVEX0NSTkwKIH0gUGFyc2VyU3RhdGU7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC01NTMsNyArNTUzLDEwIEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGZpZWxkID0gdG1wOwogICAgIH0KLSAgICBQeUxpc3RfQXBwZW5kKHNlbGYtPmZpZWxkcywgZmllbGQpOworICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlbGYtPmZpZWxkcywgZmllbGQpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoZmllbGQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIFB5X0RFQ1JFRihmaWVsZCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC02NTEsNiArNjU0LDEyIEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFU0NBUEVEX0NIQVI6CisgICAgICAgIGlmIChjID09ICdcbicgfHwgYz09J1xyJykgeworICAgICAgICAgICAgaWYgKHBhcnNlX2FkZF9jaGFyKHNlbGYsIGMpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBzZWxmLT5zdGF0ZSA9IEFGVEVSX0VTQ0FQRURfQ1JOTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGlmIChjID09ICdcMCcpCiAgICAgICAgICAgICBjID0gJ1xuJzsKICAgICAgICAgaWYgKHBhcnNlX2FkZF9jaGFyKHNlbGYsIGMpIDwgMCkKQEAgLTY1OCw2ICs2NjcsMTEgQEAKICAgICAgICAgc2VsZi0+c3RhdGUgPSBJTl9GSUVMRDsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEFGVEVSX0VTQ0FQRURfQ1JOTDoKKyAgICAgICAgaWYgKGMgPT0gJ1wwJykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKmZhbGx0aHJ1Ki8KKwogICAgIGNhc2UgSU5fRklFTEQ6CiAgICAgICAgIC8qIGluIHVucXVvdGVkIGZpZWxkICovCiAgICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1wwJykgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKaW5kZXggNDgzNTFiZS4uOTdhZTc5OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCkBAIC0yNzYsOCArMjc2LDEwIEBACiAgICAgaWYgKHByZWZpeCkKICAgICAgICAgbGVuICs9IHN0cmxlbihwcmVmaXgpOwogICAgIHJlc3VsdCA9IFB5TWVtX01hbGxvYyhsZW4gKyAxKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBpZiAocHJlZml4KQogICAgICAgICBzdHJjcHkocmVzdWx0LCBwcmVmaXgpOwogICAgIGVsc2UKQEAgLTQyNiwxMyArNDI4LDcgQEAKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0ID0gUHlUeXBlX3N0Z2RpY3QodHlwZSk7CiAgICAgYXNzZXJ0IChkaWN0KTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPfGk6ZnJvbV9idWZmZXIiLAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98bjpmcm9tX2J1ZmZlciIsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJm9mZnNldCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG46ZnJvbV9idWZmZXIiLCAmb2JqLCAmb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoLTEgPT0gUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcihvYmosICZidWZmZXIsICZidWZmZXJfbGVuKSkKQEAgLTQ0NSwxMSArNDQxLDcgQEAKICAgICB9CiAgICAgaWYgKGRpY3QtPnNpemUgPiBidWZmZXJfbGVuIC0gb2Zmc2V0KSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIHNpemUgdG9vIHNtYWxsICglZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICVkIGJ5dGVzKSIsCi0jZWxzZQogICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJXpkIGluc3RlYWQgb2YgYXQgbGVhc3QgJXpkIGJ5dGVzKSIsCi0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZW4sIGRpY3QtPnNpemUgKyBvZmZzZXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC00NjAsNyArNDUyLDYgQEAKIAogICAgIFB5X0lOQ1JFRihvYmopOwogICAgIGlmICgtMSA9PSBLZWVwUmVmKChDRGF0YU9iamVjdCAqKXJlc3VsdCwgLTEsIG9iaikpIHsKLSAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDgyLDEzICs0NzMsNyBAQAogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3QgPSBQeVR5cGVfc3RnZGljdCh0eXBlKTsKICAgICBhc3NlcnQgKGRpY3QpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98aTpmcm9tX2J1ZmZlciIsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAiT3xuOmZyb21fYnVmZmVyIiwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmb2Zmc2V0KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98bjpmcm9tX2J1ZmZlciIsICZvYmosICZvZmZzZXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICgtMSA9PSBQeU9iamVjdF9Bc1JlYWRCdWZmZXIob2JqLCAoY29uc3Qgdm9pZCoqKSZidWZmZXIsICZidWZmZXJfbGVuKSkKQEAgLTUwMiwxMSArNDg3LDcgQEAKIAogICAgIGlmIChkaWN0LT5zaXplID4gYnVmZmVyX2xlbiAtIG9mZnNldCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQotICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJWQgaW5zdGVhZCBvZiBhdCBsZWFzdCAlZCBieXRlcykiLAotI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgc2l6ZSB0b28gc21hbGwgKCV6ZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICV6ZCBieXRlcykiLAotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbGVuLCBkaWN0LT5zaXplICsgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTMyNCw5ICsxMzA1LDExIEBACiAgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIHN0Z2RpY3QtPm5kaW0gPSBpdGVtZGljdC0+bmRpbSArIDE7Ci0gICAgc3RnZGljdC0+c2hhcGUgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5X3NzaXplX3QgKikgKiBzdGdkaWN0LT5uZGltKTsKLSAgICBpZiAoc3RnZGljdC0+c2hhcGUgPT0gTlVMTCkKKyAgICBzdGdkaWN0LT5zaGFwZSA9IFB5TWVtX01hbGxvYyhzaXplb2YoUHlfc3NpemVfdCkgKiBzdGdkaWN0LT5uZGltKTsKKyAgICBpZiAoc3RnZGljdC0+c2hhcGUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGVycm9yOworICAgIH0KICAgICBzdGdkaWN0LT5zaGFwZVswXSA9IGxlbmd0aDsKICAgICBtZW1tb3ZlKCZzdGdkaWN0LT5zaGFwZVsxXSwgaXRlbWRpY3QtPnNoYXBlLAogICAgICAgICBzaXplb2YoUHlfc3NpemVfdCkgKiAoc3RnZGljdC0+bmRpbSAtIDEpKTsKQEAgLTEzNTcsNyArMTM0MCw4IEBACiAgICAgaWYgKC0xID09IFB5RGljdF9VcGRhdGUoKFB5T2JqZWN0ICopc3RnZGljdCwgcmVzdWx0LT50cF9kaWN0KSkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBQeV9ERUNSRUYocmVzdWx0LT50cF9kaWN0KTsKLSAgICByZXN1bHQtPnRwX2RpY3QgPSAoUHlPYmplY3QgKilzdGdkaWN0OworICAgIHJlc3VsdC0+dHBfZGljdCA9IChQeU9iamVjdCAqKXN0Z2RpY3Q7ICAvKiBzdGVhbCB0aGUgcmVmZXJlbmNlICovCisgICAgc3RnZGljdCA9IE5VTEw7CiAKICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGNoYXJhY3RlciBhcnJheXMuCiAgICAgICAgQSBwZXJtYW5lbnQgYW5ub3lhbmNlOiBjaGFyIGFycmF5cyBhcmUgYWxzbyBzdHJpbmdzIQpAQCAtMjI1OSw2ICsyMjQzLDEwIEBACiAgICAgICAgYXJndHlwZXMgd291bGQgYmUgYSBjdHlwZXMgdHlwZSkuCiAgICAgKi8KICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIlh7fSIpOworICAgIGlmIChzdGdkaWN0LT5mb3JtYXQgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoKFB5T2JqZWN0ICopc3RnZGljdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBzdGdkaWN0LT5mbGFncyB8PSBUWVBFRkxBR19JU1BPSU5URVI7CiAKICAgICAvKiBjcmVhdGUgdGhlIG5ldyBpbnN0YW5jZSAod2hpY2ggaXMgYSBjbGFzcywKQEAgLTIzNDEsNiArMjMyOSw4IEBACiAgICAgaWYgKHNlbGYtPmJfb2JqZWN0cyA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChzZWxmLT5iX2xlbmd0aCkgewogICAgICAgICAgICAgc2VsZi0+Yl9vYmplY3RzID0gUHlEaWN0X05ldygpOworICAgICAgICAgICAgaWYgKHNlbGYtPmJfb2JqZWN0cyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICAgICAgc2VsZi0+Yl9vYmplY3RzID0gUHlfTm9uZTsKQEAgLTIzNTIsNyArMjM0MiwxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIEdldEtlZXBlZE9iamVjdHMoQ0RhdGFPYmplY3QgKnRhcmdldCkKIHsKLSAgICByZXR1cm4gUHlDRGF0YV9HZXRDb250YWluZXIodGFyZ2V0KS0+Yl9vYmplY3RzOworICAgIENEYXRhT2JqZWN0ICpjb250YWluZXI7CisgICAgY29udGFpbmVyID0gUHlDRGF0YV9HZXRDb250YWluZXIodGFyZ2V0KTsKKyAgICBpZiAoY29udGFpbmVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBjb250YWluZXItPmJfb2JqZWN0czsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI0MDksNiArMjQwMywxMCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgb2IgPSBQeUNEYXRhX0dldENvbnRhaW5lcih0YXJnZXQpOworICAgIGlmIChvYiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihrZWVwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBpZiAob2ItPmJfb2JqZWN0cyA9PSBOVUxMIHx8ICFQeURpY3RfQ2hlY2tFeGFjdChvYi0+Yl9vYmplY3RzKSkgewogICAgICAgICBQeV9YREVDUkVGKG9iLT5iX29iamVjdHMpOwogICAgICAgICBvYi0+Yl9vYmplY3RzID0ga2VlcDsgLyogcmVmY291bnQgY29uc3VtZWQgKi8KQEAgLTI3OTUsNiArMjc5Myw5IEBACiAgICAgICAgICAgICAvKiBYWFggKi87CiAKICAgICAgICAgdmFsdWUgPSBHZXRLZWVwZWRPYmplY3RzKHNyYyk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KQEAgLTI4MTgsNiArMjgxOSw5IEBACiAgICAgICAgICoodm9pZCAqKilwdHIgPSBzcmMtPmJfcHRyOwogCiAgICAgICAgIGtlZXAgPSBHZXRLZWVwZWRPYmplY3RzKHNyYyk7CisgICAgICAgIGlmIChrZWVwID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICAvKgogICAgICAgICAgIFdlIGFyZSBhc3NpZ25pbmcgYW4gYXJyYXkgb2JqZWN0IHRvIGEgZmllbGQgd2hpY2ggcmVwcmVzZW50cwogICAgICAgICAgIGEgcG9pbnRlci4gVGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIGNvbnZlcnRpbmcgYW4gYXJyYXkKQEAgLTQwNDQsOCArNDA0OCw4IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHsKLSAgICAgICAgaW50IHJlcyA9IF9pbml0X3Bvc19hcmdzKHNlbGYsIFB5X1RZUEUoc2VsZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLCBrd2RzLCAwKTsKKyAgICAgICAgUHlfc3NpemVfdCByZXMgPSBfaW5pdF9wb3NfYXJncyhzZWxmLCBQeV9UWVBFKHNlbGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsIGt3ZHMsIDApOwogICAgICAgICBpZiAocmVzID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAocmVzIDwgUHlUdXBsZV9HRVRfU0laRShhcmdzKSkgewpAQCAtNDIxNiw3ICs0MjIwLDcgQEAKICAgICAgICAgICAgIGkgKz0gc2VsZi0+Yl9sZW5ndGg7CiAgICAgICAgIHJldHVybiBBcnJheV9pdGVtKG15c2VsZiwgaSk7CiAgICAgfQotICAgIGVsc2UgaWYgUHlTbGljZV9DaGVjayhpdGVtKSB7CisgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpdGVtKSkgewogICAgICAgICBTdGdEaWN0T2JqZWN0ICpzdGdkaWN0LCAqaXRlbWRpY3Q7CiAgICAgICAgIFB5T2JqZWN0ICpwcm90bzsKICAgICAgICAgUHlPYmplY3QgKm5wOwpAQCAtNDI5Miw2ICs0Mjk2LDEwIEBACiAgICAgICAgIGZvciAoY3VyID0gc3RhcnQsIGkgPSAwOyBpIDwgc2xpY2VsZW47CiAgICAgICAgICAgICAgY3VyICs9IHN0ZXAsIGkrKykgewogICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBBcnJheV9pdGVtKG15c2VsZiwgY3VyKTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobnApOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKG5wLCBpLCB2KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnA7CkBAIC00ODA2LDYgKzQ4MTQsOSBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBrZWVwID0gR2V0S2VlcGVkT2JqZWN0cyhkc3QpOworICAgIGlmIChrZWVwID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKwogICAgIFB5X0lOQ1JFRihrZWVwKTsKICAgICByZXR1cm4gS2VlcFJlZihzZWxmLCAwLCBrZWVwKTsKIH0KQEAgLTUyMTIsOSArNTIyMywxNCBAQAogICAgICAqLwogICAgIGlmIChDRGF0YU9iamVjdF9DaGVjayhzcmMpKSB7CiAgICAgICAgIENEYXRhT2JqZWN0ICpvYmogPSAoQ0RhdGFPYmplY3QgKilzcmM7CisgICAgICAgIENEYXRhT2JqZWN0ICpjb250YWluZXI7CisKICAgICAgICAgLyogUHlDRGF0YV9HZXRDb250YWluZXIgd2lsbCBpbml0aWFsaXplIHNyYy5iX29iamVjdHMsIHdlIG5lZWQKICAgICAgICAgICAgdGhpcyBzbyBpdCBjYW4gYmUgc2hhcmVkICovCi0gICAgICAgIFB5Q0RhdGFfR2V0Q29udGFpbmVyKG9iaik7CisgICAgICAgIGNvbnRhaW5lciA9IFB5Q0RhdGFfR2V0Q29udGFpbmVyKG9iaik7CisgICAgICAgIGlmIChjb250YWluZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworCiAgICAgICAgIC8qIEJ1dCB3ZSBuZWVkIGEgZGljdGlvbmFyeSEgKi8KICAgICAgICAgaWYgKG9iai0+Yl9vYmplY3RzID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihQeV9Ob25lKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYyBiL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYwppbmRleCBhM2QyMzIxLi5lYzhmZDEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCkBAIC05OCwyMCArOTgsMzcgQEAKICAgICBQeU9iamVjdCAqcHlfZ2xvYmFscyA9IDA7CiAgICAgUHlDb2RlT2JqZWN0ICpweV9jb2RlID0gMDsKICAgICBQeUZyYW1lT2JqZWN0ICpweV9mcmFtZSA9IDA7CisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CisKKyAgICAvKiAoU2F2ZSBhbmQpIENsZWFyIHRoZSBjdXJyZW50IGV4Y2VwdGlvbi4gUHl0aG9uIGZ1bmN0aW9ucyBtdXN0IG5vdCBiZQorICAgICAgIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQuIENhbGxpbmcgUHl0aG9uIGZ1bmN0aW9ucyBoYXBwZW5zIHdoZW4KKyAgICAgICB0aGUgY29kZWMgb2YgdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgaXMgaW1wbGVtZW50ZWQgaW4gcHVyZSBQeXRob24uICovCisgICAgUHlFcnJfRmV0Y2goJmV4Y2VwdGlvbiwgJnZhbHVlLCAmdGIpOwogCiAgICAgcHlfZ2xvYmFscyA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoIXB5X2dsb2JhbHMpIGdvdG8gYmFkOworICAgIGlmICghcHlfZ2xvYmFscykKKyAgICAgICAgZ290byBiYWQ7CiAgICAgcHlfY29kZSA9IFB5Q29kZV9OZXdFbXB0eShmaWxlbmFtZSwgZnVuY25hbWUsIGxpbmVubyk7Ci0gICAgaWYgKCFweV9jb2RlKSBnb3RvIGJhZDsKKyAgICBpZiAoIXB5X2NvZGUpCisgICAgICAgIGdvdG8gYmFkOwogICAgIHB5X2ZyYW1lID0gUHlGcmFtZV9OZXcoCiAgICAgICAgIFB5VGhyZWFkU3RhdGVfR2V0KCksIC8qUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCovCiAgICAgICAgIHB5X2NvZGUsICAgICAgICAgICAgIC8qUHlDb2RlT2JqZWN0ICpjb2RlLCovCiAgICAgICAgIHB5X2dsb2JhbHMsICAgICAgICAgIC8qUHlPYmplY3QgKmdsb2JhbHMsKi8KICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgLypQeU9iamVjdCAqbG9jYWxzKi8KICAgICAgICAgKTsKLSAgICBpZiAoIXB5X2ZyYW1lKSBnb3RvIGJhZDsKKyAgICBpZiAoIXB5X2ZyYW1lKQorICAgICAgICBnb3RvIGJhZDsKICAgICBweV9mcmFtZS0+Zl9saW5lbm8gPSBsaW5lbm87CisKKyAgICBQeUVycl9SZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKICAgICBQeVRyYWNlQmFja19IZXJlKHB5X2ZyYW1lKTsKKworICAgIFB5X0RFQ1JFRihweV9nbG9iYWxzKTsKKyAgICBQeV9ERUNSRUYocHlfY29kZSk7CisgICAgUHlfREVDUkVGKHB5X2ZyYW1lKTsKKyAgICByZXR1cm47CisKICAgYmFkOgogICAgIFB5X1hERUNSRUYocHlfZ2xvYmFscyk7CiAgICAgUHlfWERFQ1JFRihweV9jb2RlKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKaW5kZXggMDllYjY1My4uNzQxMTlhMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKQEAgLTI2MSwxOCArMjYxLDE4IEBACiAgICAgICAgICAgIHRvIGEgdmlydHVhbCBhZGRyZXNzIGZvciB3aGljaCBpdCBkb2VzIG5vdAogICAgICAgICAgICBoYXZlIHRoZSBhcHByb3ByaWF0ZSBhY2Nlc3MuICovCiAgICAgICAgIGlmIChwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMF0gPT0gMCkKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBhY2Nlc3MgdmlvbGF0aW9uIHJlYWRpbmcgJXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHByLT5FeGNlcHRpb25JbmZvcm1hdGlvblsxXSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBhY2Nlc3MgdmlvbGF0aW9uIHdyaXRpbmcgJXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHByLT5FeGNlcHRpb25JbmZvcm1hdGlvblsxXSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fQlJFQUtQT0lOVDoKICAgICAgICAgLyogQSBicmVha3BvaW50IHdhcyBlbmNvdW50ZXJlZC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBicmVha3BvaW50IGVuY291bnRlcmVkIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0yODIsMTQgKzI4MiwxNCBAQAogICAgICAgICAgICBhbGlnbm1lbnQuIEZvciBleGFtcGxlLCAxNi1iaXQgdmFsdWVzIG11c3QgYmUKICAgICAgICAgICAgYWxpZ25lZCBvbiAyLWJ5dGUgYm91bmRhcmllcywgMzItYml0IHZhbHVlcyBvbgogICAgICAgICAgICA0LWJ5dGUgYm91bmRhcmllcywgYW5kIHNvIG9uLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGRhdGF0eXBlIG1pc2FsaWdubWVudCIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX1NJTkdMRV9TVEVQOgogICAgICAgICAvKiBBIHRyYWNlIHRyYXAgb3Igb3RoZXIgc2luZ2xlLWluc3RydWN0aW9uIG1lY2hhbmlzbQogICAgICAgICAgICBzaWduYWxlZCB0aGF0IG9uZSBpbnN0cnVjdGlvbiBoYXMgYmVlbiBleGVjdXRlZC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBzaW5nbGUgc3RlcCIpOwogICAgICAgICBicmVhazsKIApAQCAtMjk3LDcgKzI5Nyw3IEBACiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGFjY2VzcyBhbiBhcnJheSBlbGVtZW50CiAgICAgICAgICAgIHRoYXQgaXMgb3V0IG9mIGJvdW5kcywgYW5kIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlCiAgICAgICAgICAgIHN1cHBvcnRzIGJvdW5kcyBjaGVja2luZy4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBhcnJheSBib3VuZHMgZXhjZWVkZWQiKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTMwNiwyOCArMzA2LDI4IEBACiAgICAgICAgICAgIGlzIGRlbm9ybWFsLiBBIGRlbm9ybWFsIHZhbHVlIGlzIG9uZSB0aGF0IGlzIHRvbwogICAgICAgICAgICBzbWFsbCB0byByZXByZXNlbnQgYXMgYSBzdGFuZGFyZCBmbG9hdGluZy1wb2ludAogICAgICAgICAgICB2YWx1ZS4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdGluZy1wb2ludCBvcGVyYW5kIGRlbm9ybWFsIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fRkxUX0RJVklERV9CWV9aRVJPOgogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBkaXZpZGUgYSBmbG9hdGluZy1wb2ludAogICAgICAgICAgICB2YWx1ZSBieSBhIGZsb2F0aW5nLXBvaW50IGRpdmlzb3Igb2YgemVyby4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBkaXZpZGUgYnkgemVybyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9JTkVYQUNUX1JFU1VMVDoKICAgICAgICAgLyogVGhlIHJlc3VsdCBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiBjYW5ub3QgYmUKICAgICAgICAgICAgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBhIGRlY2ltYWwgZnJhY3Rpb24uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgaW5leGFjdCIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9JTlZBTElEX09QRVJBVElPTjoKICAgICAgICAgLyogVGhpcyBleGNlcHRpb24gcmVwcmVzZW50cyBhbnkgZmxvYXRpbmctcG9pbnQKICAgICAgICAgICAgZXhjZXB0aW9uIG5vdCBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgaW52YWxpZCBvcGVyYXRpb24iKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTMzNSwyMSArMzM1LDIxIEBACiAgICAgICAgIC8qIFRoZSBleHBvbmVudCBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiBpcwogICAgICAgICAgICBncmVhdGVyIHRoYW4gdGhlIG1hZ25pdHVkZSBhbGxvd2VkIGJ5IHRoZQogICAgICAgICAgICBjb3JyZXNwb25kaW5nIHR5cGUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgb3ZlcmZsb3ciKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfU1RBQ0tfQ0hFQ0s6CiAgICAgICAgIC8qIFRoZSBzdGFjayBvdmVyZmxvd2VkIG9yIHVuZGVyZmxvd2VkIGFzIHRoZSByZXN1bHQKICAgICAgICAgICAgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc3RhY2sgb3Zlci91bmRlcmZsb3ciKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9TVEFDS19PVkVSRkxPVzoKICAgICAgICAgLyogVGhlIHN0YWNrIG92ZXJmbG93ZWQgb3IgdW5kZXJmbG93ZWQgYXMgdGhlIHJlc3VsdAogICAgICAgICAgICBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbi4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBzdGFjayBvdmVyZmxvdyIpOwogICAgICAgICBicmVhazsKIApAQCAtMzU3LDIxICszNTcsMjEgQEAKICAgICAgICAgLyogVGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGlzIGxlc3MKICAgICAgICAgICAgdGhhbiB0aGUgbWFnbml0dWRlIGFsbG93ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgICAgICAgdHlwZS4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCB1bmRlcmZsb3ciKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9JTlRfRElWSURFX0JZX1pFUk86CiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGRpdmlkZSBhbiBpbnRlZ2VyIHZhbHVlIGJ5CiAgICAgICAgICAgIGFuIGludGVnZXIgZGl2aXNvciBvZiB6ZXJvLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGludGVnZXIgZGl2aWRlIGJ5IHplcm8iKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9JTlRfT1ZFUkZMT1c6CiAgICAgICAgIC8qIFRoZSByZXN1bHQgb2YgYW4gaW50ZWdlciBvcGVyYXRpb24gY2F1c2VkIGEgY2FycnkKICAgICAgICAgICAgb3V0IG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgcmVzdWx0LiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGludGVnZXIgb3ZlcmZsb3ciKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTM3OSwxNCArMzc5LDE0IEBACiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGV4ZWN1dGUgYW4gaW5zdHJ1Y3Rpb24KICAgICAgICAgICAgd2hvc2Ugb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBjdXJyZW50CiAgICAgICAgICAgIG1hY2hpbmUgbW9kZS4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBwcml2aWxlZGdlZCBpbnN0cnVjdGlvbiIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX05PTkNPTlRJTlVBQkxFX0VYQ0VQVElPTjoKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gY29udGludWUgZXhlY3V0aW9uIGFmdGVyIGEKICAgICAgICAgICAgbm9uY29udGludWFibGUgZXhjZXB0aW9uIG9jY3VycmVkLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IG5vY29udGludWFibGUiKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTYyMCw2ICs2MjAsOCBAQAogICAgICAgICBhc3NlcnQoZGljdC0+cGFyYW1mdW5jKTsKICAgICAgICAgLyogSWYgaXQgaGFzIGFuIHN0Z2RpY3QsIGl0IGlzIGEgQ0RhdGFPYmplY3QgKi8KICAgICAgICAgY2FyZyA9IGRpY3QtPnBhcmFtZnVuYygoQ0RhdGFPYmplY3QgKilvYmopOworICAgICAgICBpZiAoY2FyZyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBwYS0+ZmZpX3R5cGUgPSBjYXJnLT5wZmZpX3R5cGU7CiAgICAgICAgIG1lbWNweSgmcGEtPnZhbHVlLCAmY2FyZy0+dmFsdWUsIHNpemVvZihwYS0+dmFsdWUpKTsKICAgICAgICAgcGEtPmtlZXAgPSAoUHlPYmplY3QgKiljYXJnOwpAQCAtMTEwNSw5ICsxMTA3LDcgQEAKICAgICAgICAgaWYgKGFyZ3R5cGVzICYmIGFyZ3R5cGVfY291bnQgPiBpKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdjsKICAgICAgICAgICAgIGNvbnZlcnRlciA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHlwZXMsIGkpOwotICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY29udmVydGVyLCBhcmcsIE5VTEwpOwogICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIF9jdHlwZXNfZXh0ZW5kX2Vycm9yKFB5RXhjX0FyZ0Vycm9yLCAiYXJndW1lbnQgJWQ6ICIsIGkrMSk7CiAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwpAQCAtMTI3Miw2MiArMTI3Miw2IEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKLS8qIG9ic29sZXRlLCBzaG91bGQgYmUgcmVtb3ZlZCAqLwotLyogT25seSB1c2VkIGJ5IHNhbXBsZSBjb2RlIChpbiBzYW1wbGVzXFdpbmRvd3NcQ09NLnB5KSAqLwotc3RhdGljIFB5T2JqZWN0ICoKLWNhbGxfY29tbWV0aG9kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBJVW5rbm93biAqcEl1bms7Ci0gICAgaW50IGluZGV4OwotICAgIFB5T2JqZWN0ICphcmd1bWVudHM7Ci0gICAgUFBST0MgKmxwVnRibDsKLSAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIENEYXRhT2JqZWN0ICpwY29tOwotICAgIFB5T2JqZWN0ICphcmd0eXBlcyA9IE5VTEw7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk9pTyF8TyEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGNvbSwgJmluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlUdXBsZV9UeXBlLCAmYXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlUdXBsZV9UeXBlLCAmYXJndHlwZXMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChhcmd0eXBlcyAmJiAoUHlUdXBsZV9HRVRfU0laRShhcmd1bWVudHMpICE9IFB5VHVwbGVfR0VUX1NJWkUoYXJndHlwZXMpKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIk1ldGhvZCB0YWtlcyAlZCBhcmd1bWVudHMgKCVkIGdpdmVuKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKGFyZ3R5cGVzKSwgUHlUdXBsZV9HRVRfU0laRShhcmd1bWVudHMpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFDRGF0YU9iamVjdF9DaGVjayhwY29tKSB8fCAocGNvbS0+Yl9zaXplICE9IHNpemVvZih2b2lkICopKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIkNPTSBQb2ludGVyIGV4cGVjdGVkIGluc3RlYWQgb2YgJXMgaW5zdGFuY2UiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShwY29tKS0+dHBfbmFtZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICgoKih2b2lkICoqKShwY29tLT5iX3B0cikpID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVGhlIENPTSAndGhpcycgcG9pbnRlciBpcyBOVUxMIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHBJdW5rID0gKElVbmtub3duICopKCoodm9pZCAqKikocGNvbS0+Yl9wdHIpKTsKLSAgICBscFZ0YmwgPSAoUFBST0MgKikocEl1bmstPmxwVnRibCk7Ci0KLSAgICByZXN1bHQgPSAgX2N0eXBlc19jYWxscHJvYyhscFZ0YmxbaW5kZXhdLAotICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLAotI2lmZGVmIE1TX1dJTjMyCi0gICAgICAgICAgICAgICAgICAgICAgICBwSXVuaywKLSAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNGTEFHX0hSRVNVTFQsIC8qIGZsYWdzICovCi0gICAgICAgICAgICAgICAgYXJndHlwZXMsIC8qIHNlbGYtPmFyZ3R5cGVzICovCi0gICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+cmVzdHlwZSAqLwotICAgICAgICAgICAgICAgIE5VTEwpOyAvKiBjaGVja2VyICovCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIGNoYXIgY29weV9jb21fcG9pbnRlcl9kb2NbXSA9CiAiQ29weUNvbVBvaW50ZXIoc3JjLCBkc3QpIC0+IEhSRVNVTFQgdmFsdWVcbiI7CiAKQEAgLTE0ODksOSArMTQzMyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBGVU5DRkxBR19DREVDTCwgLyogZmxhZ3MgKi8KLSAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5hcmd0eXBlcyAqLwotICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPnJlc3R5cGUgKi8KLSAgICAgICAgICAgICAgICBOVUxMKTsgLyogY2hlY2tlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+YXJndHlwZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPnJlc3R5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOyAvKiBjaGVja2VyICovCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTgyMiw3ICsxNzY2LDYgQEAKICAgICB7IkZvcm1hdEVycm9yIiwgZm9ybWF0X2Vycm9yLCBNRVRIX1ZBUkFSR1MsIGZvcm1hdF9lcnJvcl9kb2N9LAogICAgIHsiTG9hZExpYnJhcnkiLCBsb2FkX2xpYnJhcnksIE1FVEhfVkFSQVJHUywgbG9hZF9saWJyYXJ5X2RvY30sCiAgICAgeyJGcmVlTGlicmFyeSIsIGZyZWVfbGlicmFyeSwgTUVUSF9WQVJBUkdTLCBmcmVlX2xpYnJhcnlfZG9jfSwKLSAgICB7ImNhbGxfY29tbWV0aG9kIiwgY2FsbF9jb21tZXRob2QsIE1FVEhfVkFSQVJHUyB9LAogICAgIHsiX2NoZWNrX0hSRVNVTFQiLCBjaGVja19ocmVzdWx0LCBNRVRIX1ZBUkFSR1N9LAogI2Vsc2UKICAgICB7ImRsb3BlbiIsIHB5X2RsX29wZW4sIE1FVEhfVkFSQVJHUywKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZgppbmRleCBhZGUyOGU1Li4xZjkzMWZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLmRpZmYKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS5kaWZmCkBAIC0xNjcsMyArMTY3LDM5IEBACiAgI2VuZGlmICAvKiBXSU4zMiAqLwogIAogICNpZmRlZiBfX09TMl9fCitAQCAtMzM5Myw3ICszMzkzLDcgQEAKKyAgICpzcyA9IG0tPnNlZzsgLyogUHVzaCBjdXJyZW50IHJlY29yZCAqLworICAgbS0+c2VnLmJhc2UgPSB0YmFzZTsKKyAgIG0tPnNlZy5zaXplID0gdHNpemU7CistICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwcGVkKTsKKysgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIG1tYXBwZWQpOworICAgbS0+c2VnLm5leHQgPSBzczsKKyAKKyAgIC8qIEluc2VydCB0cmFpbGluZyBmZW5jZXBvc3RzICovCitAQCAtMzU1Myw3ICszNTUzLDcgQEAKKyAgICAgaWYgKCFpc19pbml0aWFsaXplZChtKSkgeyAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICovCisgICAgICAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgICAgICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKKy0gICAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwX2ZsYWcpOworKyAgICAgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIG1tYXBfZmxhZyk7CisgICAgICAgbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICAgICAgIGluaXRfYmlucyhtKTsKKyAgICAgICBpZiAoaXNfZ2xvYmFsKG0pKSAKK0BAIC00NTAyLDcgKzQ1MDIsNyBAQAorICAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CisgICAgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKKyAgICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSh0YmFzZSwgdHNpemUpOworLSAgICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIElTX01NQVBQRURfQklUKTsKKysgICAgICAodm9pZClzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBJU19NTUFQUEVEX0JJVCk7CisgICAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgICAgfQorICAgfQorQEAgLTQ1MTcsNyArNDUxNyw3IEBACisgICBpZiAoY2FwYWNpdHkgPiBtc2l6ZSArIFRPUF9GT09UX1NJWkUgJiYKKyAgICAgICBjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKChjaGFyKiliYXNlLCBjYXBhY2l0eSk7CistICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIEVYVEVSTl9CSVQpOworKyAgICAodm9pZClzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBFWFRFUk5fQklUKTsKKyAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgIH0KKyAgIHJldHVybiAobXNwYWNlKW07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kbG1hbGxvYy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGxtYWxsb2MuYwppbmRleCAyNzczOTUzLi5mZTFlNDBkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kbG1hbGxvYy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RsbWFsbG9jLmMKQEAgLTMzOTMsNyArMzM5Myw3IEBACiAgICpzcyA9IG0tPnNlZzsgLyogUHVzaCBjdXJyZW50IHJlY29yZCAqLwogICBtLT5zZWcuYmFzZSA9IHRiYXNlOwogICBtLT5zZWcuc2l6ZSA9IHRzaXplOwotICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwcGVkKTsKKyAgKHZvaWQpc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgbW1hcHBlZCk7CiAgIG0tPnNlZy5uZXh0ID0gc3M7CiAKICAgLyogSW5zZXJ0IHRyYWlsaW5nIGZlbmNlcG9zdHMgKi8KQEAgLTM1NTMsNyArMzU1Myw3IEBACiAgICAgaWYgKCFpc19pbml0aWFsaXplZChtKSkgeyAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICovCiAgICAgICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKICAgICAgIG0tPnNlZy5zaXplID0gdHNpemU7Ci0gICAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwX2ZsYWcpOworICAgICAgKHZvaWQpc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgbW1hcF9mbGFnKTsKICAgICAgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsKICAgICAgIGluaXRfYmlucyhtKTsKICAgICAgIGlmIChpc19nbG9iYWwobSkpIApAQCAtNDUwMiw3ICs0NTAyLDcgQEAKICAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CiAgICAgaWYgKHRiYXNlICE9IENNRkFJTCkgewogICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUodGJhc2UsIHRzaXplKTsKLSAgICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIElTX01NQVBQRURfQklUKTsKKyAgICAgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIElTX01NQVBQRURfQklUKTsKICAgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CiAgICAgfQogICB9CkBAIC00NTE3LDcgKzQ1MTcsNyBAQAogICBpZiAoY2FwYWNpdHkgPiBtc2l6ZSArIFRPUF9GT09UX1NJWkUgJiYKICAgICAgIGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSgoY2hhciopYmFzZSwgY2FwYWNpdHkpOwotICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIEVYVEVSTl9CSVQpOworICAgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIEVYVEVSTl9CSVQpOwogICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CiAgIH0KICAgcmV0dXJuIChtc3BhY2UpbTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Eub3V0IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvYS5vdXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvYS5vdXQKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYwppbmRleCBiZjQyMDkzLi45NjgyNmI1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYwpAQCAtMzgsMTIgKzM4LDEzIEBACiAvKkBvdXRAKi8JZmZpX3R5cGUqCWFyZykKIHsKIC8qQC11c2VkZWZAKi8KKwlmZmlfdHlwZSoqCXB0cjsKIAogCWlmIChhcmcgPT0gTlVMTCB8fCBhcmctPmVsZW1lbnRzID09IE5VTEwgfHwKIAkJYXJnLT5zaXplICE9IDAgfHwgYXJnLT5hbGlnbm1lbnQgIT0gMCkKIAkJcmV0dXJuIEZGSV9CQURfVFlQRURFRjsKIAotCWZmaV90eXBlKioJcHRyID0gJihhcmctPmVsZW1lbnRzWzBdKTsKKyAgICBwdHIgPSAmKGFyZy0+ZWxlbWVudHNbMF0pOwogCiAJd2hpbGUgKCgqcHRyKSAhPSBOVUxMKQogCXsKQEAgLTEzNSwxNiArMTM2LDE2IEBACiAvKkBkZXBlbmRlbnRAKi8gLypAb3V0QCovIC8qQHBhcnRpYWxAKi8gZmZpX3R5cGUqCXJ0eXBlLCAKIC8qQGRlcGVuZGVudEAqLwkJCWZmaV90eXBlKioJCWF0eXBlcykKIHsKKwl1bnNpZ25lZCBpbnQJYnl0ZXMJPSAwOworCXVuc2lnbmVkIGludAlpOworCWZmaV90eXBlKioJCXB0cjsKKwogCWlmIChjaWYgPT0gTlVMTCkKIAkJcmV0dXJuIEZGSV9CQURfVFlQRURFRjsKIAogCWlmIChhYmkgPD0gRkZJX0ZJUlNUX0FCSSB8fCBhYmkgPiBGRklfREVGQVVMVF9BQkkpCiAJCXJldHVybiBGRklfQkFEX0FCSTsKIAotCXVuc2lnbmVkIGludAlieXRlcwk9IDA7Ci0JdW5zaWduZWQgaW50CWk7Ci0JZmZpX3R5cGUqKgkJcHRyOwotCiAJY2lmLT5hYmkgPSBhYmk7CiAJY2lmLT5hcmdfdHlwZXMgPSBhdHlwZXM7CiAJY2lmLT5uYXJncyA9IG5hcmdzOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jCmluZGV4IDJhZmZiMTQuLmYyNjEwYzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni94ODYtZmZpNjQuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaTY0LmMKQEAgLTIyNSwxNCArMjI1LDE2IEBACiAJCQkvKiBNZXJnZSB0aGUgZmllbGRzIG9mIHN0cnVjdHVyZS4gICovCiAJCQlmb3IgKHB0ciA9IHR5cGUtPmVsZW1lbnRzOyAqcHRyICE9IE5VTEw7IHB0cisrKQogCQkJeworCQkJCWludCBudW0sIHBvczsKKwogCQkJCWJ5dGVfb2Zmc2V0ID0gQUxJR04oYnl0ZV9vZmZzZXQsICgqcHRyKS0+YWxpZ25tZW50KTsKIAotCQkJCWludAludW0gPSBjbGFzc2lmeV9hcmd1bWVudCgqcHRyLCBzdWJjbGFzc2VzLCBieXRlX29mZnNldCAlIDgpOworCQkJCW51bSA9IGNsYXNzaWZ5X2FyZ3VtZW50KCpwdHIsIHN1YmNsYXNzZXMsIGJ5dGVfb2Zmc2V0ICUgOCk7CiAKIAkJCQlpZiAobnVtID09IDApCiAJCQkJCXJldHVybiAwOwogCi0JCQkJaW50IHBvcyA9IGJ5dGVfb2Zmc2V0IC8gODsKKwkJCQlwb3MgPSBieXRlX29mZnNldCAvIDg7CiAKIAkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCiAJCQkJewpAQCAtNTg5LDExICs1OTEsMTIgQEAKIAl2b2lkCQkJKCpmdW4pKGZmaV9jaWYqLCB2b2lkKiwgdm9pZCoqLCB2b2lkKiksCiAJdm9pZCoJCQl1c2VyX2RhdGEpCiB7CisJCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0Kgl0cmFtcDsKKwogCWlmIChjaWYtPmFiaSAhPSBGRklfVU5JWDY0KQogCQlyZXR1cm4gRkZJX0JBRF9BQkk7CiAKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCoJdHJhbXAgPQotCQkodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKSZjbG9zdXJlLT50cmFtcFswXTsKKwl0cmFtcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopJmNsb3N1cmUtPnRyYW1wWzBdOwogCiAJdHJhbXBbMF0gPSAweGJiNDk7CQkvKiBtb3YgPGNvZGU+LCAlcjExCSovCiAJKih2b2lkKiB2b2xhdGlsZSopJnRyYW1wWzFdID0gZmZpX2Nsb3N1cmVfdW5peDY0OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYyBiL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMKaW5kZXggMjVkOTk5Ni4uYjk1YjBhNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCkBAIC00MTcsNiArNDE3LDggQEAKICAgICAgICAgICAgdGhhdCkuIFVzZSAnQicgZm9yIGJ5dGVzLiAqLwogICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIkIiKTsKICAgICB9CisgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CiAKICNkZWZpbmUgcmVhbGRpY3QgKChQeU9iamVjdCAqKSZzdGdkaWN0LT5kaWN0KQogICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewpAQCAtNDgzLDcgKzQ4NSw3IEBACiAgICAgICAgICAgICBjaGFyICpmaWVsZGZtdCA9IGRpY3QtPmZvcm1hdCA/IGRpY3QtPmZvcm1hdCA6ICJCIjsKICAgICAgICAgICAgIGNoYXIgKmZpZWxkbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobmFtZSk7CiAgICAgICAgICAgICBjaGFyICpwdHI7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsgCisgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKIAogICAgICAgICAgICAgaWYgKGZpZWxkbmFtZSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMgYi9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYwppbmRleCBmNTYwNzAyLi44N2I5YzA1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYworKysgYi9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYwpAQCAtMTE3LDcgKzExNyw3IEBACiB7CiAgICAgbGlzdF9vZl9wYW5lbHMgKm5ldzsKIAotICAgIGlmICgobmV3ID0gKGxpc3Rfb2ZfcGFuZWxzICopbWFsbG9jKHNpemVvZihsaXN0X29mX3BhbmVscykpKSA9PSBOVUxMKSB7CisgICAgaWYgKChuZXcgPSAobGlzdF9vZl9wYW5lbHMgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKGxpc3Rfb2ZfcGFuZWxzKSkpID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgIHRlbXAgPSBsb3A7CiAgICAgaWYgKHRlbXAtPnBvID09IHBvKSB7CiAgICAgICAgIGxvcCA9IHRlbXAtPm5leHQ7Ci0gICAgICAgIGZyZWUodGVtcCk7CisgICAgICAgIFB5TWVtX0ZyZWUodGVtcCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgd2hpbGUgKHRlbXAtPm5leHQgPT0gTlVMTCB8fCB0ZW1wLT5uZXh0LT5wbyAhPSBwbykgewpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0OwogICAgIH0KICAgICBuID0gdGVtcC0+bmV4dC0+bmV4dDsKLSAgICBmcmVlKHRlbXAtPm5leHQpOworICAgIFB5TWVtX0ZyZWUodGVtcC0+bmV4dCk7CiAgICAgdGVtcC0+bmV4dCA9IG47CiAgICAgcmV0dXJuOwogfQpAQCAtNTEzLDYgKzUxMyw4IEBACiAgICAgICAgIGdvdG8gZmFpbDsKIAogICAgIGltcG9ydF9jdXJzZXMoKTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBmYWlsOwogCiAgICAgLyogRm9yIGV4Y2VwdGlvbiBfY3Vyc2VzX3BhbmVsLmVycm9yICovCiAgICAgX2N1cnNlc19wYW5lbHN0YXRlKG0pLT5QeUN1cnNlc0Vycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfY3Vyc2VzX3BhbmVsLmVycm9yIiwgTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCmluZGV4IDEzY2ZjZjUuLjQ5NGYwMmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCkBAIC0xMzQsNiArMTM0LDEyIEBACiAjZGVmaW5lIFNUUklDVF9TWVNWX0NVUlNFUwogI2VuZGlmCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBjdXJzZXMKK2NsYXNzIGN1cnNlcy53aW5kb3cgIlB5Q3Vyc2VzV2luZG93T2JqZWN0ICoiICImUHlDdXJzZXNXaW5kb3dfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTg4Yzg2MGFiZGJiNTBlMGNdKi8KKwogLyogRGVmaW5pdGlvbiBvZiBleGNlcHRpb24gY3Vyc2VzLmVycm9yICovCiAKIHN0YXRpYyBQeU9iamVjdCAqUHlDdXJzZXNFcnJvcjsKQEAgLTE2OCwxMCArMTc0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGNhbGwgc3RhcnRfY29sb3IoKSBmaXJzdCIpOyAgICAgICBcCiAgICAgICAgIHJldHVybiAwOyB9CiAKLSNpZm5kZWYgTUlOCi0jZGVmaW5lIE1JTih4LHkpICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCi0jZW5kaWYKLQogLyogVXRpbGl0eSBGdW5jdGlvbnMgKi8KIAogLyoKQEAgLTUzMyw3ICs1MzUsNyBAQAogICAgIHdvID0gUHlPYmplY3RfTkVXKFB5Q3Vyc2VzV2luZG93T2JqZWN0LCAmUHlDdXJzZXNXaW5kb3dfVHlwZSk7CiAgICAgaWYgKHdvID09IE5VTEwpIHJldHVybiBOVUxMOwogICAgIHdvLT53aW4gPSB3aW47Ci0gICAgd28tPmVuY29kaW5nID0gc3RyZHVwKGVuY29kaW5nKTsKKyAgICB3by0+ZW5jb2RpbmcgPSBfUHlNZW1fU3RyZHVwKGVuY29kaW5nKTsKICAgICBpZiAod28tPmVuY29kaW5nID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHdvKTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTU0Nyw3NCArNTQ5LDE0NSBAQAogewogICAgIGlmICh3by0+d2luICE9IHN0ZHNjcikgZGVsd2luKHdvLT53aW4pOwogICAgIGlmICh3by0+ZW5jb2RpbmcgIT0gTlVMTCkKLSAgICAgICAgZnJlZSh3by0+ZW5jb2RpbmcpOworICAgICAgICBQeU1lbV9GcmVlKHdvLT5lbmNvZGluZyk7CiAgICAgUHlPYmplY3RfREVMKHdvKTsKIH0KIAogLyogQWRkY2gsIEFkZHN0ciwgQWRkbnN0ciAqLwogCisvKltjbGluaWMgaW5wdXRdCisKK2N1cnNlcy53aW5kb3cuYWRkY2gKKworICAgIFsKKyAgICB4OiBpbnQKKyAgICAgIFgtY29vcmRpbmF0ZS4KKyAgICB5OiBpbnQKKyAgICAgIFktY29vcmRpbmF0ZS4KKyAgICBdCisKKyAgICBjaDogb2JqZWN0CisgICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorCisgICAgWworICAgIGF0dHI6IGxvbmcKKyAgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgXQorICAgIC8KKworUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ci4KKworUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ciwKK292ZXJ3cml0aW5nIGFueSBjaGFyYWN0ZXIgcHJldmlvdXNseSBwYWludGVkIGF0IHRoYXQgbG9jYXRpb24uCitCeSBkZWZhdWx0LCB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGFuZCBhdHRyaWJ1dGVzIGFyZSB0aGUKK2N1cnJlbnQgc2V0dGluZ3MgZm9yIHRoZSB3aW5kb3cgb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoY3Vyc2VzX3dpbmRvd19hZGRjaF9fZG9jX18sCisiYWRkY2goW3gsIHksXSBjaCwgW2F0dHJdKVxuIgorIlBhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIuXG4iCisiXG4iCisiICB4XG4iCisiICAgIFgtY29vcmRpbmF0ZS5cbiIKKyIgIHlcbiIKKyIgICAgWS1jb29yZGluYXRlLlxuIgorIiAgY2hcbiIKKyIgICAgQ2hhcmFjdGVyIHRvIGFkZC5cbiIKKyIgIGF0dHJcbiIKKyIgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci5cbiIKKyJcbiIKKyJQYWludCBjaGFyYWN0ZXIgY2ggYXQgKHksIHgpIHdpdGggYXR0cmlidXRlcyBhdHRyLFxuIgorIm92ZXJ3cml0aW5nIGFueSBjaGFyYWN0ZXIgcHJldmlvdXNseSBwYWludGVkIGF0IHRoYXQgbG9jYXRpb24uXG4iCisiQnkgZGVmYXVsdCwgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiBhbmQgYXR0cmlidXRlcyBhcmUgdGhlXG4iCisiY3VycmVudCBzZXR0aW5ncyBmb3IgdGhlIHdpbmRvdyBvYmplY3QuIik7CisKKyNkZWZpbmUgQ1VSU0VTX1dJTkRPV19BRERDSF9NRVRIT0RERUYgICAgXAorICAgIHsiYWRkY2giLCAoUHlDRnVuY3Rpb24pY3Vyc2VzX3dpbmRvd19hZGRjaCwgTUVUSF9WQVJBUkdTLCBjdXJzZXNfd2luZG93X2FkZGNoX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1QeUN1cnNlc1dpbmRvd19BZGRDaChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitjdXJzZXNfd2luZG93X2FkZGNoX2ltcGwoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIGludCBncm91cF9sZWZ0XzEsIGludCB4LCBpbnQgeSwgUHlPYmplY3QgKmNoLCBpbnQgZ3JvdXBfcmlnaHRfMSwgbG9uZyBhdHRyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2N1cnNlc193aW5kb3dfYWRkY2goUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGludCBydG4sIHgsIHksIHVzZV94eSA9IEZBTFNFOwotICAgIFB5T2JqZWN0ICpjaG9iajsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZ3JvdXBfbGVmdF8xID0gMDsKKyAgICBpbnQgeCA9IDA7CisgICAgaW50IHkgPSAwOworICAgIFB5T2JqZWN0ICpjaDsKKyAgICBpbnQgZ3JvdXBfcmlnaHRfMSA9IDA7CisgICAgbG9uZyBhdHRyID0gMDsKKworICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86YWRkY2giLCAmY2gpKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9sOmFkZGNoIiwgJmNoLCAmYXR0cikpCisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgZ3JvdXBfcmlnaHRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU86YWRkY2giLCAmeCwgJnksICZjaCkpCisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgZ3JvdXBfbGVmdF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpT2w6YWRkY2giLCAmeCwgJnksICZjaCwgJmF0dHIpKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGdyb3VwX3JpZ2h0XzEgPSAxOworICAgICAgICAgICAgZ3JvdXBfbGVmdF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImN1cnNlcy53aW5kb3cuYWRkY2ggcmVxdWlyZXMgMSB0byA0IGFyZ3VtZW50cyIpOworICAgICAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICByZXR1cm5fdmFsdWUgPSBjdXJzZXNfd2luZG93X2FkZGNoX2ltcGwoc2VsZiwgZ3JvdXBfbGVmdF8xLCB4LCB5LCBjaCwgZ3JvdXBfcmlnaHRfMSwgYXR0cik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2N1cnNlc193aW5kb3dfYWRkY2hfaW1wbChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgaW50IGdyb3VwX2xlZnRfMSwgaW50IHgsIGludCB5LCBQeU9iamVjdCAqY2gsIGludCBncm91cF9yaWdodF8xLCBsb25nIGF0dHIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDNhY2I5MWE1Yzk4ZjYxNSBpbnB1dD1mZTdlMzcxMWQ1YmJmMWY2XSovCit7CisgICAgUHlDdXJzZXNXaW5kb3dPYmplY3QgKmN3c2VsZiA9IChQeUN1cnNlc1dpbmRvd09iamVjdCAqKXNlbGY7CisgICAgaW50IGNvb3JkaW5hdGVzX2dyb3VwID0gZ3JvdXBfbGVmdF8xOworICAgIGludCBhdHRyX2dyb3VwID0gZ3JvdXBfcmlnaHRfMTsKKyAgICBpbnQgcnRuOwogICAgIGludCB0eXBlOwotICAgIGNodHlwZSBjaDsKKyAgICBjaHR5cGUgY2NoOwogI2lmZGVmIEhBVkVfTkNVUlNFU1cKICAgICBjY2hhcl90IHdjaDsKICNlbmRpZgotICAgIGF0dHJfdCBhdHRyID0gQV9OT1JNQUw7Ci0gICAgbG9uZyBsYXR0cjsKICAgICBjb25zdCBjaGFyICpmdW5jbmFtZTsKIAotICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk87Y2ggb3IgaW50IiwgJmNob2JqKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2w7Y2ggb3IgaW50LGF0dHIiLCAmY2hvYmosICZsYXR0cikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXR0ciA9IGxhdHRyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaU87eSx4LGNoIG9yIGludCIsICZ5LCAmeCwgJmNob2JqKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB1c2VfeHkgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaU9sO3kseCxjaCBvciBpbnQsIGF0dHIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnksICZ4LCAmY2hvYmosICZsYXR0cikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXR0ciA9IGxhdHRyOwotICAgICAgICB1c2VfeHkgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYWRkY2ggcmVxdWlyZXMgMSB0byA0IGFyZ3VtZW50cyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFhdHRyX2dyb3VwKQorICAgICAgYXR0ciA9IEFfTk9STUFMOwogCiAjaWZkZWYgSEFWRV9OQ1VSU0VTVwotICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KHNlbGYsIGNob2JqLCAmY2gsICZ3Y2gpOworICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KGN3c2VsZiwgY2gsICZjY2gsICZ3Y2gpOwogICAgIGlmICh0eXBlID09IDIpIHsKICAgICAgICAgZnVuY25hbWUgPSAiYWRkX3djaCI7CiAgICAgICAgIHdjaC5hdHRyID0gYXR0cjsKLSAgICAgICAgaWYgKHVzZV94eSA9PSBUUlVFKQotICAgICAgICAgICAgcnRuID0gbXZ3YWRkX3djaChzZWxmLT53aW4seSx4LCAmd2NoKTsKKyAgICAgICAgaWYgKGNvb3JkaW5hdGVzX2dyb3VwKQorICAgICAgICAgICAgcnRuID0gbXZ3YWRkX3djaChjd3NlbGYtPndpbix5LHgsICZ3Y2gpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJ0biA9IHdhZGRfd2NoKHNlbGYtPndpbiwgJndjaCk7CisgICAgICAgICAgICBydG4gPSB3YWRkX3djaChjd3NlbGYtPndpbiwgJndjaCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogI2Vsc2UKLSAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChzZWxmLCBjaG9iaiwgJmNoKTsKKyAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChjd3NlbGYsIGNoLCAmY2NoKTsKICNlbmRpZgogICAgIGlmICh0eXBlID09IDEpIHsKICAgICAgICAgZnVuY25hbWUgPSAiYWRkY2giOwotICAgICAgICBpZiAodXNlX3h5ID09IFRSVUUpCi0gICAgICAgICAgICBydG4gPSBtdndhZGRjaChzZWxmLT53aW4seSx4LCBjaCB8IGF0dHIpOworICAgICAgICBpZiAoY29vcmRpbmF0ZXNfZ3JvdXApCisgICAgICAgICAgICBydG4gPSBtdndhZGRjaChjd3NlbGYtPndpbix5LHgsIGNjaCB8IGF0dHIpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJ0biA9IHdhZGRjaChzZWxmLT53aW4sIGNoIHwgYXR0cik7CisgICAgICAgICAgICBydG4gPSB3YWRkY2goY3dzZWxmLT53aW4sIGNjaCB8IGF0dHIpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewpAQCAtMTIxMiw3ICsxMjg1LDcgQEAKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7biIsICZuKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJ0bjIgPSB3Z2V0bnN0cihzZWxmLT53aW4scnRuLE1JTihuLCAxMDIzKSk7CisgICAgICAgIHJ0bjIgPSB3Z2V0bnN0cihzZWxmLT53aW4sIHJ0biwgUHlfTUlOKG4sIDEwMjMpKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgpAQCAtMTIzMiwxMSArMTMwNSwxMSBAQAogI2lmZGVmIFNUUklDVF9TWVNWX0NVUlNFUwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHJ0bjIgPSB3bW92ZShzZWxmLT53aW4seSx4KT09RVJSID8gRVJSIDoKLSAgICAgICAgd2dldG5zdHIoc2VsZi0+d2luLCBydG4sIE1JTihuLCAxMDIzKSk7CisgICAgICAgIHdnZXRuc3RyKHNlbGYtPndpbiwgcnRuLCBQeV9NSU4obiwgMTAyMykpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogI2Vsc2UKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBydG4yID0gbXZ3Z2V0bnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgTUlOKG4sIDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IG12d2dldG5zdHIoc2VsZi0+d2luLCB5LCB4LCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAjZW5kaWYKICAgICAgICAgYnJlYWs7CkBAIC0xMzc1LDcgKzE0NDgsNyBAQAogICAgIGNhc2UgMToKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7biIsICZuKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBydG4yID0gd2lubnN0cihzZWxmLT53aW4scnRuLE1JTihuLDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IHdpbm5zdHIoc2VsZi0+d2luLCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO3kseCIsJnksJngpKQpAQCAtMTM4NSw3ICsxNDU4LDcgQEAKICAgICBjYXNlIDM6CiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlpO3kseCxuIiwgJnksICZ4LCAmbikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcnRuMiA9IG12d2lubnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgTUlOKG4sMTAyMykpOworICAgICAgICBydG4yID0gbXZ3aW5uc3RyKHNlbGYtPndpbiwgeSwgeCwgcnRuLCBQeV9NSU4obiwxMDIzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJpbnN0ciByZXF1aXJlcyAwIG9yIDMgYXJndW1lbnRzIik7CkBAIC0xNjk5LDI2ICsxNzcyLDI0IEBACiAgICAgLyogV2UgaGF2ZSB0byBzaW11bGF0ZSB0aGlzIGJ5IHdyaXRpbmcgdG8gYSB0ZW1wb3JhcnkgRklMRSosCiAgICAgICAgdGhlbiByZWFkaW5nIGJhY2ssIHRoZW4gd3JpdGluZyB0byB0aGUgYXJndW1lbnQgc3RyZWFtLiAqLwogICAgIGNoYXIgZm5bMTAwXTsKLSAgICBpbnQgZmQ7Ci0gICAgRklMRSAqZnA7Ci0gICAgUHlPYmplY3QgKnJlczsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBGSUxFICpmcCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBzdHJjcHkoZm4sICIvdG1wL3B5LmN1cnNlcy5wdXR3aW4uWFhYWFhYIik7CiAgICAgZmQgPSBta3N0ZW1wKGZuKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgZnAgPSBmZG9wZW4oZmQsICJ3YisiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIHJlcyA9IFB5Q3Vyc2VzQ2hlY2tFUlIocHV0d2luKHNlbGYtPndpbiwgZnApLCAicHV0d2luIik7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQorICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIGZzZWVrKGZwLCAwLCAwKTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBjaGFyIGJ1ZltCVUZTSVpdOwpAQCAtMTczMiw3ICsxODAzLDEyIEBACiAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBmY2xvc2UoZnApOworCitleGl0OgorICAgIGlmIChmcCAhPSBOVUxMKQorICAgICAgICBmY2xvc2UoZnApOworICAgIGVsc2UgaWYgKGZkICE9IC0xKQorICAgICAgICBjbG9zZShmZCk7CiAgICAgcmVtb3ZlKGZuKTsKICAgICByZXR1cm4gcmVzOwogfQpAQCAtMTk0MywyMCArMjAxOSwyMCBAQAogICAgIGFzY2lpID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcodmFsdWUpOwogICAgIGlmIChhc2NpaSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgZW5jb2RpbmcgPSBzdHJkdXAoUHlCeXRlc19BU19TVFJJTkcoYXNjaWkpKTsKKyAgICBlbmNvZGluZyA9IF9QeU1lbV9TdHJkdXAoUHlCeXRlc19BU19TVFJJTkcoYXNjaWkpKTsKICAgICBQeV9ERUNSRUYoYXNjaWkpOwogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgZnJlZShzZWxmLT5lbmNvZGluZyk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5lbmNvZGluZyk7CiAgICAgc2VsZi0+ZW5jb2RpbmcgPSBlbmNvZGluZzsKICAgICByZXR1cm4gMDsKIH0KIAogCiBzdGF0aWMgUHlNZXRob2REZWYgUHlDdXJzZXNXaW5kb3dfTWV0aG9kc1tdID0gewotICAgIHsiYWRkY2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZENoLCBNRVRIX1ZBUkFSR1N9LAorICAgIENVUlNFU19XSU5ET1dfQUREQ0hfTUVUSE9EREVGCiAgICAgeyJhZGRuc3RyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkTlN0ciwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImFkZHN0ciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGRTdHIsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJhdHRyb2ZmIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQXR0ck9mZiwgTUVUSF9WQVJBUkdTfSwKQEAgLTIwMTIsOCArMjA4OCw2IEBACiAgICAgeyJub2RlbGF5IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbm9kZWxheSwgTUVUSF9WQVJBUkdTfSwKICAgICB7Im5vdGltZW91dCIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19ub3RpbWVvdXQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJub3V0cmVmcmVzaCIsICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfTm9PdXRSZWZyZXNoLCBNRVRIX1ZBUkFSR1N9LAotICAgIC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYWxpYXMgLS0gcmVtb3ZlIGluIFB5dGhvbiAyLjMgKi8KLSAgICB7Im5vb3V0cmVmcmVzaCIsICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ob091dFJlZnJlc2gsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJvdmVybGF5IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfT3ZlcmxheSwgTUVUSF9WQVJBUkdTfSwKICAgICB7Im92ZXJ3cml0ZSIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19PdmVyd3JpdGUsCiAgICAgIE1FVEhfVkFSQVJHU30sCkBAIC0yMjU3LDEyICsyMzMxLDEzIEBACiBQeUN1cnNlc19HZXRXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJlYW0pCiB7CiAgICAgY2hhciBmblsxMDBdOwotICAgIGludCBmZDsKLSAgICBGSUxFICpmcDsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBGSUxFICpmcCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmRhdGE7CiAgICAgc2l6ZV90IGRhdGFsZW47CiAgICAgV0lORE9XICp3aW47CiAgICAgX1B5X0lERU5USUZJRVIocmVhZCk7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCkBAIC0yMjcwLDQ0ICsyMzQ1LDQ3IEBACiAgICAgZmQgPSBta3N0ZW1wKGZuKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGZwID0gZmRvcGVuKGZkLCAid2IrIik7CiAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CisKICAgICBkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzdHJlYW0sICZQeUlkX3JlYWQsICIiKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmICghUHlCeXRlc19DaGVjayhkYXRhKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgImYucmVhZCgpIHJldHVybmVkICUuMTAwcyBpbnN0ZWFkIG9mIGJ5dGVzIiwKICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBkYXRhbGVuID0gUHlCeXRlc19HRVRfU0laRShkYXRhKTsKICAgICBpZiAoZndyaXRlKFB5Qnl0ZXNfQVNfU1RSSU5HKGRhdGEpLCAxLCBkYXRhbGVuLCBmcCkgIT0gZGF0YWxlbikgewogICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBQeV9ERUNSRUYoZGF0YSk7CisKICAgICBmc2VlayhmcCwgMCwgMCk7CiAgICAgd2luID0gZ2V0d2luKGZwKTsKLSAgICBmY2xvc2UoZnApOwotICAgIHJlbW92ZShmbik7CiAgICAgaWYgKHdpbiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIHJldHVybiBQeUN1cnNlc1dpbmRvd19OZXcod2luLCBOVUxMKTsKKyAgICByZXMgPSBQeUN1cnNlc1dpbmRvd19OZXcod2luLCBOVUxMKTsKKworZXJyb3I6CisgICAgaWYgKGZwICE9IE5VTEwpCisgICAgICAgIGZjbG9zZShmcCk7CisgICAgZWxzZSBpZiAoZmQgIT0gLTEpCisgICAgICAgIGNsb3NlKGZkKTsKKyAgICByZW1vdmUoZm4pOworICAgIHJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zNDE1LDcgKzM0OTMsNyBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKHN0cm5jbXAoa2V5X24sIktFWV9GKCIsNik9PTApIHsKICAgICAgICAgICAgICAgICBjaGFyICpwMSwgKnAyOwotICAgICAgICAgICAgICAgIGtleV9uMiA9IG1hbGxvYyhzdHJsZW4oa2V5X24pKzEpOworICAgICAgICAgICAgICAgIGtleV9uMiA9IFB5TWVtX01hbGxvYyhzdHJsZW4oa2V5X24pKzEpOwogICAgICAgICAgICAgICAgIGlmICgha2V5X24yKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzQzNCw3ICszNTEyLDcgQEAKICAgICAgICAgICAgICAgICBrZXlfbjIgPSBrZXlfbjsKICAgICAgICAgICAgIFNldERpY3RJbnQoa2V5X24yLGtleSk7CiAgICAgICAgICAgICBpZiAoa2V5X24yICE9IGtleV9uKQotICAgICAgICAgICAgICAgIGZyZWUoa2V5X24yKTsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKGtleV9uMik7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBTZXREaWN0SW50KCJLRVlfTUlOIiwgS0VZX01JTik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jIGIvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYwppbmRleCBmYTIzMWQ5Li5mY2U2YmJmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKQEAgLTE2LDYgKzE2LDEyIEBACiAjaW5jbHVkZSAiZGF0ZXRpbWUuaCIKICN1bmRlZiBQeV9CVUlMRF9DT1JFCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBkYXRldGltZQorY2xhc3MgZGF0ZXRpbWUuZGF0ZXRpbWUgIlB5RGF0ZVRpbWVfRGF0ZVRpbWUgKiIgIiZQeURhdGVUaW1lX0RhdGVUaW1lVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTc4MTQyY2I2NGI5ZTk4YmNdKi8KKwogLyogV2UgcmVxdWlyZSB0aGF0IEMgaW50IGJlIGF0IGxlYXN0IDMyIGJpdHMsIGFuZCB1c2UgaW50IHZpcnR1YWxseQogICogZXZlcnl3aGVyZS4gIEluIGp1c3QgYSBmZXcgY2FzZXMgd2UgdXNlIGEgdGVtcCBsb25nLCB3aGVyZSBhIFB5dGhvbgogICogQVBJIHJldHVybnMgYSBDIGxvbmcuICBJbiBzdWNoIGNhc2VzLCB3ZSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZQpAQCAtMTA0LDYgKzExMCwxMSBAQAogc3RhdGljIFB5VHlwZU9iamVjdCBQeURhdGVUaW1lX1RaSW5mb1R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IFB5RGF0ZVRpbWVfVGltZVpvbmVUeXBlOwogCitfUHlfSURFTlRJRklFUihhc19pbnRlZ2VyX3JhdGlvKTsKK19QeV9JREVOVElGSUVSKGZyb211dGMpOworX1B5X0lERU5USUZJRVIoaXNvZm9ybWF0KTsKK19QeV9JREVOVElGSUVSKHN0cmZ0aW1lKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBNYXRoIHV0aWxpdGllcy4KICAqLwpAQCAtMTQwLDE5ICsxNTEsNiBAQAogICAgIHJldHVybiBxdW87CiB9CiAKLS8qIFJvdW5kIGEgZG91YmxlIHRvIHRoZSBuZWFyZXN0IGxvbmcuICB8eHwgbXVzdCBiZSBzbWFsbCBlbm91Z2ggdG8gZml0Ci0gKiBpbiBhIEMgbG9uZzsgdGhpcyBpcyBub3QgY2hlY2tlZC4KLSAqLwotc3RhdGljIGxvbmcKLXJvdW5kX3RvX2xvbmcoZG91YmxlIHgpCi17Ci0gICAgaWYgKHggPj0gMC4wKQotICAgICAgICB4ID0gZmxvb3IoeCArIDAuNSk7Ci0gICAgZWxzZQotICAgICAgICB4ID0gY2VpbCh4IC0gMC41KTsKLSAgICByZXR1cm4gKGxvbmcpeDsKLX0KLQogLyogTmVhcmVzdCBpbnRlZ2VyIHRvIG0gLyBuIGZvciBpbnRlZ2VycyBtIGFuZCBuLiBIYWxmLWludGVnZXIgcmVzdWx0cwogICogYXJlIHJvdW5kZWQgdG8gZXZlbi4KICAqLwpAQCAtNjE1LDcgKzYxMyw3IEBACiAgICAgICAgICAgICAgICAgc2l6ZW9mKF9QeURhdGVUaW1lX0Jhc2VUaW1lKSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVChzZWxmLCB0eXBlKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUKHNlbGYsIHR5cGUpOwogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC02MzAsNyArNjI4LDcgQEAKICAgICAgICAgICAgICAgICBzaXplb2YoX1B5RGF0ZVRpbWVfQmFzZURhdGVUaW1lKSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVChzZWxmLCB0eXBlKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUKHNlbGYsIHR5cGUpOwogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC0xMjkwLDggKzEyODgsNiBAQAogICAgICAgICAgICAgZ290byBEb25lOwogICAgICAgICBmb3JtYXQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeUJ5dGVzX0FTX1NUUklORyhuZXdmbXQpKTsKICAgICAgICAgaWYgKGZvcm1hdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBfUHlfSURFTlRJRklFUihzdHJmdGltZSk7Ci0KICAgICAgICAgICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodGltZSwgJlB5SWRfc3RyZnRpbWUsICJPTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdGltZXR1cGxlLCBOVUxMKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihmb3JtYXQpOwpAQCAtMTM5Nyw3ICsxMzkzLDcgQEAKICAqLwogCiAvKiBDb252ZXJzaW9uIGZhY3RvcnMuICovCi1zdGF0aWMgUHlPYmplY3QgKnVzX3Blcl91cyA9IE5VTEw7ICAgICAgLyogMSAqLworc3RhdGljIFB5T2JqZWN0ICpvbmUgPSBOVUxMOyAgICAgIC8qIDEgKi8KIHN0YXRpYyBQeU9iamVjdCAqdXNfcGVyX21zID0gTlVMTDsgICAgICAvKiAxMDAwICovCiBzdGF0aWMgUHlPYmplY3QgKnVzX3Blcl9zZWNvbmQgPSBOVUxMOyAgLyogMTAwMDAwMCAqLwogc3RhdGljIFB5T2JqZWN0ICp1c19wZXJfbWludXRlID0gTlVMTDsgIC8qIDFlNiAqIDYwIGFzIFB5dGhvbiBpbnQgKi8KQEAgLTE1NzksNyArMTU3NSw2IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnB5dXNfaW4gPSBOVUxMLCAqdGVtcCwgKnB5dXNfb3V0OwogICAgIFB5T2JqZWN0ICpyYXRpbyA9IE5VTEw7Ci0gICAgX1B5X0lERU5USUZJRVIoYXNfaW50ZWdlcl9yYXRpbyk7CiAKICAgICBweXVzX2luID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKGRlbHRhKTsKICAgICBpZiAocHl1c19pbiA9PSBOVUxMKQpAQCAtMTY3OCw3ICsxNjczLDYgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqcHl1c19pbiA9IE5VTEwsICp0ZW1wLCAqcHl1c19vdXQ7CiAgICAgUHlPYmplY3QgKnJhdGlvID0gTlVMTDsKLSAgICBfUHlfSURFTlRJRklFUihhc19pbnRlZ2VyX3JhdGlvKTsKIAogICAgIHB5dXNfaW4gPSBkZWx0YV90b19taWNyb3NlY29uZHMoZGVsdGEpOwogICAgIGlmIChweXVzX2luID09IE5VTEwpCkBAIC0yMTE5LDcgKzIxMTMsNyBAQAogICAgICAgICBnb3RvIERvbmUKIAogICAgIGlmICh1cykgewotICAgICAgICB5ID0gYWNjdW0oIm1pY3Jvc2Vjb25kcyIsIHgsIHVzLCB1c19wZXJfdXMsICZsZWZ0b3Zlcl91cyk7CisgICAgICAgIHkgPSBhY2N1bSgibWljcm9zZWNvbmRzIiwgeCwgdXMsIG9uZSwgJmxlZnRvdmVyX3VzKTsKICAgICAgICAgQ0xFQU5VUDsKICAgICB9CiAgICAgaWYgKG1zKSB7CkBAIC0yMTQ4LDcgKzIxNDIsMzMgQEAKICAgICB9CiAgICAgaWYgKGxlZnRvdmVyX3VzKSB7CiAgICAgICAgIC8qIFJvdW5kIHRvIG5lYXJlc3Qgd2hvbGUgIyBvZiB1cywgYW5kIGFkZCBpbnRvIHguICovCi0gICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gUHlMb25nX0Zyb21Mb25nKHJvdW5kX3RvX2xvbmcobGVmdG92ZXJfdXMpKTsKKyAgICAgICAgZG91YmxlIHdob2xlX3VzID0gcm91bmQobGVmdG92ZXJfdXMpOworICAgICAgICBpbnQgeF9pc19vZGQ7CisgICAgICAgIFB5T2JqZWN0ICp0ZW1wOworCisgICAgICAgIHdob2xlX3VzID0gcm91bmQobGVmdG92ZXJfdXMpOworICAgICAgICBpZiAoZmFicyh3aG9sZV91cyAtIGxlZnRvdmVyX3VzKSA9PSAwLjUpIHsKKyAgICAgICAgICAgIC8qIFdlJ3JlIGV4YWN0bHkgaGFsZndheSBiZXR3ZWVuIHR3byBpbnRlZ2Vycy4gIEluIG9yZGVyCisgICAgICAgICAgICAgKiB0byBkbyByb3VuZC1oYWxmLXRvLWV2ZW4sIHdlIG11c3QgZGV0ZXJtaW5lIHdoZXRoZXIgeAorICAgICAgICAgICAgICogaXMgb2RkLiBOb3RlIHRoYXQgeCBpcyBvZGQgd2hlbiBpdCdzIGxhc3QgYml0IGlzIDEuIFRoZQorICAgICAgICAgICAgICogY29kZSBiZWxvdyB1c2VzIGJpdHdpc2UgYW5kIG9wZXJhdGlvbiB0byBjaGVjayB0aGUgbGFzdAorICAgICAgICAgICAgICogYml0LiAqLworCSAgICB0ZW1wID0gUHlOdW1iZXJfQW5kKHgsIG9uZSk7ICAvKiB0ZW1wIDwtIHggJiAxICovCisgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOworICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHhfaXNfb2RkID0gUHlPYmplY3RfSXNUcnVlKHRlbXApOworICAgICAgICAgICAgUHlfREVDUkVGKHRlbXApOworICAgICAgICAgICAgaWYgKHhfaXNfb2RkID09IC0xKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOworICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdob2xlX3VzID0gMi4wICogcm91bmQoKGxlZnRvdmVyX3VzICsgeF9pc19vZGQpICogMC41KSAtIHhfaXNfb2RkOworICAgICAgICB9CisKKyAgICAgICAgdGVtcCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZyl3aG9sZV91cyk7CisKICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKHgpOwogICAgICAgICAgICAgZ290byBEb25lOwpAQCAtMjIzOSwyMiArMjI1OSwxNCBAQAogewogICAgIFB5T2JqZWN0ICp0b3RhbF9zZWNvbmRzOwogICAgIFB5T2JqZWN0ICp0b3RhbF9taWNyb3NlY29uZHM7Ci0gICAgUHlPYmplY3QgKm9uZV9taWxsaW9uOwogCiAgICAgdG90YWxfbWljcm9zZWNvbmRzID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKChQeURhdGVUaW1lX0RlbHRhICopc2VsZik7CiAgICAgaWYgKHRvdGFsX21pY3Jvc2Vjb25kcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG9uZV9taWxsaW9uID0gUHlMb25nX0Zyb21Mb25nKDEwMDAwMDBMKTsKLSAgICBpZiAob25lX21pbGxpb24gPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYodG90YWxfbWljcm9zZWNvbmRzKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdG90YWxfc2Vjb25kcyA9IFB5TnVtYmVyX1RydWVEaXZpZGUodG90YWxfbWljcm9zZWNvbmRzLCBvbmVfbWlsbGlvbik7CisgICAgdG90YWxfc2Vjb25kcyA9IFB5TnVtYmVyX1RydWVEaXZpZGUodG90YWxfbWljcm9zZWNvbmRzLCB1c19wZXJfc2Vjb25kKTsKIAogICAgIFB5X0RFQ1JFRih0b3RhbF9taWNyb3NlY29uZHMpOwotICAgIFB5X0RFQ1JFRihvbmVfbWlsbGlvbik7CiAgICAgcmV0dXJuIHRvdGFsX3NlY29uZHM7CiB9CiAKQEAgLTI2MzAsOCArMjY0Miw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGF0ZV9zdHIoUHlEYXRlVGltZV9EYXRlICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKGlzb2Zvcm1hdCk7Ci0KICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9pc29mb3JtYXQsICIoKSIpOwogfQogCkBAIC0yNjcxLDcgKzI2ODEsNiBAQAogZGF0ZV9mb3JtYXQoUHlEYXRlVGltZV9EYXRlICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqZm9ybWF0OwotICAgIF9QeV9JREVOVElGSUVSKHN0cmZ0aW1lKTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpfX2Zvcm1hdF9fIiwgJmZvcm1hdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzU4OCw4ICszNTk3LDYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0aW1lX3N0cihQeURhdGVUaW1lX1RpbWUgKnNlbGYpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIoaXNvZm9ybWF0KTsKLQogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX2lzb2Zvcm1hdCwgIigpIik7CiB9CiAKQEAgLTQxMzgsMzEgKzQxNDUsNzMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvKTsKIH0KIAotLyogUmV0dXJuIGJlc3QgcG9zc2libGUgbG9jYWwgdGltZSAtLSB0aGlzIGlzbid0IGNvbnN0cmFpbmVkIGJ5IHRoZQotICogcHJlY2lzaW9uIG9mIGEgdGltZXN0YW1wLgotICovCisvKltjbGluaWMgaW5wdXRdCisKK0BjbGFzc21ldGhvZAorZGF0ZXRpbWUuZGF0ZXRpbWUubm93CisKKyAgICB0ejogb2JqZWN0ID0gTm9uZQorICAgICAgICBUaW1lem9uZSBvYmplY3QuCisKK1JldHVybnMgbmV3IGRhdGV0aW1lIG9iamVjdCByZXByZXNlbnRpbmcgY3VycmVudCB0aW1lIGxvY2FsIHRvIHR6LgorCitJZiBubyB0eiBpcyBzcGVjaWZpZWQsIHVzZXMgbG9jYWwgdGltZXpvbmUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihkYXRldGltZV9kYXRldGltZV9ub3dfX2RvY19fLAorIm5vdygkdHlwZSwgLywgdHo9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgbmV3IGRhdGV0aW1lIG9iamVjdCByZXByZXNlbnRpbmcgY3VycmVudCB0aW1lIGxvY2FsIHRvIHR6LlxuIgorIlxuIgorIiAgdHpcbiIKKyIgICAgVGltZXpvbmUgb2JqZWN0LlxuIgorIlxuIgorIklmIG5vIHR6IGlzIHNwZWNpZmllZCwgdXNlcyBsb2NhbCB0aW1lem9uZS4iKTsKKworI2RlZmluZSBEQVRFVElNRV9EQVRFVElNRV9OT1dfTUVUSE9EREVGICAgIFwKKyAgICB7Im5vdyIsIChQeUNGdW5jdGlvbilkYXRldGltZV9kYXRldGltZV9ub3csIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfE1FVEhfQ0xBU1MsIGRhdGV0aW1lX2RhdGV0aW1lX25vd19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotZGF0ZXRpbWVfbm93KFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpCitkYXRldGltZV9kYXRldGltZV9ub3dfaW1wbChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp0eik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYXRldGltZV9kYXRldGltZV9ub3coUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InR6IiwgTlVMTH07CisgICAgUHlPYmplY3QgKnR6ID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgInxPOm5vdyIsIF9rZXl3b3JkcywKKyAgICAgICAgJnR6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRhdGV0aW1lX2RhdGV0aW1lX25vd19pbXBsKHR5cGUsIHR6KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X2ltcGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdHopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTgzYzU2MzdlM2M4NDNmYSBpbnB1dD04MGQwOTg2OWM1MjY3ZDAwXSovCiB7CiAgICAgUHlPYmplY3QgKnNlbGY7Ci0gICAgUHlPYmplY3QgKnR6aW5mbyA9IFB5X05vbmU7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InR6IiwgTlVMTH07CiAKLSAgICBpZiAoISBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8Tzpub3ciLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR6aW5mbykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChjaGVja190emluZm9fc3ViY2xhc3ModHppbmZvKSA8IDApCisgICAgLyogUmV0dXJuIGJlc3QgcG9zc2libGUgbG9jYWwgdGltZSAtLSB0aGlzIGlzbid0IGNvbnN0cmFpbmVkIGJ5IHRoZQorICAgICAqIHByZWNpc2lvbiBvZiBhIHRpbWVzdGFtcC4KKyAgICAgKi8KKyAgICBpZiAoY2hlY2tfdHppbmZvX3N1YmNsYXNzKHR6KSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZiA9IGRhdGV0aW1lX2Jlc3RfcG9zc2libGUoY2xzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbyA9PSBQeV9Ob25lID8gbG9jYWx0aW1lIDogZ210aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbyk7Ci0gICAgaWYgKHNlbGYgIT0gTlVMTCAmJiB0emluZm8gIT0gUHlfTm9uZSkgeworICAgIHNlbGYgPSBkYXRldGltZV9iZXN0X3Bvc3NpYmxlKChQeU9iamVjdCAqKXR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHogPT0gUHlfTm9uZSA/IGxvY2FsdGltZSA6IGdtdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eik7CisgICAgaWYgKHNlbGYgIT0gTlVMTCAmJiB0eiAhPSBQeV9Ob25lKSB7CiAgICAgICAgIC8qIENvbnZlcnQgVVRDIHRvIHR6aW5mbydzIHpvbmUuICovCiAgICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gc2VsZjsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoZnJvbXV0Yyk7CiAKLSAgICAgICAgc2VsZiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodHppbmZvLCAmUHlJZF9mcm9tdXRjLCAiTyIsIHNlbGYpOworICAgICAgICBzZWxmID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0eiwgJlB5SWRfZnJvbXV0YywgIk8iLCBzZWxmKTsKICAgICAgICAgUHlfREVDUkVGKHRlbXApOwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKQEAgLTQxOTksNyArNDI0OCw2IEBACiAgICAgaWYgKHNlbGYgIT0gTlVMTCAmJiB0emluZm8gIT0gUHlfTm9uZSkgewogICAgICAgICAvKiBDb252ZXJ0IFVUQyB0byB0emluZm8ncyB6b25lLiAqLwogICAgICAgICBQeU9iamVjdCAqdGVtcCA9IHNlbGY7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKGZyb211dGMpOwogCiAgICAgICAgIHNlbGYgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHR6aW5mbywgJlB5SWRfZnJvbXV0YywgIk8iLCBzZWxmKTsKICAgICAgICAgUHlfREVDUkVGKHRlbXApOwpAQCAtNDQyMSw2ICs0NDY5LDkgQEAKICAgICAgICAgICAgIGRlbHRhX3VzID0gREFURV9HRVRfTUlDUk9TRUNPTkQobGVmdCkgLQogICAgICAgICAgICAgICAgICAgICAgICBEQVRFX0dFVF9NSUNST1NFQ09ORChyaWdodCk7CiAgICAgICAgICAgICByZXN1bHQgPSBuZXdfZGVsdGEoZGVsdGFfZCwgZGVsdGFfcywgZGVsdGFfdXMsIDEpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgICAgICBpZiAob2ZmZGlmZiAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRlbXAgPSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGVsdGFfc3VidHJhY3QocmVzdWx0LCBvZmZkaWZmKTsKQEAgLTQ0ODIsOCArNDUzMyw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGF0ZXRpbWVfc3RyKFB5RGF0ZVRpbWVfRGF0ZVRpbWUgKnNlbGYpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIoaXNvZm9ybWF0KTsKLQogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX2lzb2Zvcm1hdCwgIihzKSIsICIgIik7CiB9CiAKQEAgLTQ3NDksNyArNDc5OCw3IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICByZXN1bHQgPSBuZXdfdGltZXpvbmUoZGVsdGEsIG5hbWVvKTsKLSAgICBQeV9ERUNSRUYobmFtZW8pOworICAgIFB5X1hERUNSRUYobmFtZW8pOwogICBlcnJvcjoKICAgICBQeV9ERUNSRUYoZGVsdGEpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC00NzYyLDcgKzQ4MTEsNiBAQAogICAgIFB5T2JqZWN0ICpvZmZzZXQ7CiAgICAgUHlPYmplY3QgKnRlbXA7CiAgICAgUHlPYmplY3QgKnR6aW5mbyA9IFB5X05vbmU7Ci0gICAgX1B5X0lERU5USUZJRVIoZnJvbXV0Yyk7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InR6IiwgTlVMTH07CiAKICAgICBpZiAoISBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8Tzphc3RpbWV6b25lIiwga2V5d29yZHMsCkBAIC00ODczLDkgKzQ5MjEsMTYgQEAKICAgICAgICAgdGltZS50bV93ZGF5ID0gLTE7CiAgICAgICAgIHRpbWUudG1faXNkc3QgPSAtMTsKICAgICAgICAgdGltZXN0YW1wID0gbWt0aW1lKCZ0aW1lKTsKLSAgICAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsIGJ1dCB0bV93ZGF5Ci0gICAgICAgICAqIGNhbm5vdCByZW1haW4gc2V0IHRvIC0xIGlmIG1rdGltZSBzdWNjZWVkZWQuICovCi0gICAgICAgIGlmICh0aW1lc3RhbXAgPT0gKHRpbWVfdCkoLTEpICYmIHRpbWUudG1fd2RheSA9PSAtMSkgeworICAgICAgICBpZiAodGltZXN0YW1wID09ICh0aW1lX3QpKC0xKQorI2lmbmRlZiBfQUlYCisgICAgICAgICAgICAvKiBSZXR1cm4gdmFsdWUgb2YgLTEgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBlcnJvciwKKyAgICAgICAgICAgICAqIGJ1dCB0bV93ZGF5IGNhbm5vdCByZW1haW4gc2V0IHRvIC0xIGlmIG1rdGltZSBzdWNjZWVkZWQuICovCisgICAgICAgICAgICAmJiB0aW1lLnRtX3dkYXkgPT0gLTEKKyNlbHNlCisgICAgICAgICAgICAvKiBvbiBBSVgsIHRtX3dkYXkgaXMgYWx3YXlzIHNldHMsIGV2ZW4gb24gZXJyb3IgKi8KKyNlbmRpZgorICAgICAgICAgICkKKyAgICAgICAgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDk4OSw5ICs1MDQ0LDcgQEAKIAogICAgIC8qIENsYXNzIG1ldGhvZHM6ICovCiAKLSAgICB7Im5vdyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRhdGV0aW1lX25vdywKLSAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUyB8IE1FVEhfQ0xBU1MsCi0gICAgIFB5RG9jX1NUUigiW3R6XSAtPiBuZXcgZGF0ZXRpbWUgd2l0aCB0eidzIGxvY2FsIGRheSBhbmQgdGltZS4iKX0sCisgICAgREFURVRJTUVfREFURVRJTUVfTk9XX01FVEhPRERFRgogCiAgICAgeyJ1dGNub3ciLCAgICAgICAgIChQeUNGdW5jdGlvbilkYXRldGltZV91dGNub3csCiAgICAgIE1FVEhfTk9BUkdTIHwgTUVUSF9DTEFTUywKQEAgLTUyOTksOCArNTM1Miw4IEBACiAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNSU5ZRUFSIiwgTUlOWUVBUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1BWFlFQVIiLCBNQVhZRUFSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNSU5ZRUFSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNQVhZRUFSKTsKIAogICAgIFB5X0lOQ1JFRigmUHlEYXRlVGltZV9EYXRlVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJkYXRlIiwgKFB5T2JqZWN0ICopICZQeURhdGVUaW1lX0RhdGVUeXBlKTsKQEAgLTUzNDQsMTIgKzUzOTcsMTIgQEAKICAgICBhc3NlcnQoREkxMDBZID09IDI1ICogREk0WSAtIDEpOwogICAgIGFzc2VydChESTEwMFkgPT0gZGF5c19iZWZvcmVfeWVhcigxMDArMSkpOwogCi0gICAgdXNfcGVyX3VzID0gUHlMb25nX0Zyb21Mb25nKDEpOworICAgIG9uZSA9IFB5TG9uZ19Gcm9tTG9uZygxKTsKICAgICB1c19wZXJfbXMgPSBQeUxvbmdfRnJvbUxvbmcoMTAwMCk7CiAgICAgdXNfcGVyX3NlY29uZCA9IFB5TG9uZ19Gcm9tTG9uZygxMDAwMDAwKTsKICAgICB1c19wZXJfbWludXRlID0gUHlMb25nX0Zyb21Mb25nKDYwMDAwMDAwKTsKICAgICBzZWNvbmRzX3Blcl9kYXkgPSBQeUxvbmdfRnJvbUxvbmcoMjQgKiAzNjAwKTsKLSAgICBpZiAodXNfcGVyX3VzID09IE5VTEwgfHwgdXNfcGVyX21zID09IE5VTEwgfHwgdXNfcGVyX3NlY29uZCA9PSBOVUxMIHx8CisgICAgaWYgKG9uZSA9PSBOVUxMIHx8IHVzX3Blcl9tcyA9PSBOVUxMIHx8IHVzX3Blcl9zZWNvbmQgPT0gTlVMTCB8fAogICAgICAgICB1c19wZXJfbWludXRlID09IE5VTEwgfHwgc2Vjb25kc19wZXJfZGF5ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kYm1tb2R1bGUuYyBiL01vZHVsZXMvX2RibW1vZHVsZS5jCmluZGV4IDgzYzA1MWMuLjkzZWE0MTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RibW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2RibW1vZHVsZS5jCkBAIC0xNCwxMSArMTQsNyBAQAogICovCiAjaWYgZGVmaW5lZChIQVZFX05EQk1fSCkKICNpbmNsdWRlIDxuZGJtLmg+Ci0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi1zdGF0aWMgY2hhciAqd2hpY2hfZGJtID0gIm5kYm0iOwotI2Vsc2UKIHN0YXRpYyBjaGFyICp3aGljaF9kYm0gPSAiR05VIGdkYm0iOyAgLyogRU1YIHBvcnQgb2YgR0RCTSAqLwotI2VuZGlmCiAjZWxpZiBkZWZpbmVkKEhBVkVfR0RCTV9OREJNX0gpCiAjaW5jbHVkZSA8Z2RibS9uZGJtLmg+CiBzdGF0aWMgY2hhciAqd2hpY2hfZGJtID0gIkdOVSBnZGJtIjsKQEAgLTMyLDYgKzI4LDEyIEBACiAjZXJyb3IgIk5vIG5kYm0uaCBhdmFpbGFibGUhIgogI2VuZGlmCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBkYm0KK2NsYXNzIGRibS5kYm0gImRibW9iamVjdCAqIiAiJkRibXR5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD05MjQ1MDU2NDY4NGE2OWEzXSovCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgaW50IGRpX3NpemU7ICAgICAgICAvKiAtMSBtZWFucyByZWNvbXB1dGUgKi8KQEAgLTQ3LDggKzQ5LDE3IEBACiAKIHN0YXRpYyBQeU9iamVjdCAqRGJtRXJyb3I7CiAKKy8qW3B5dGhvbiBpbnB1dF0KK2NsYXNzIGRibW9iamVjdF9jb252ZXJ0ZXIoc2VsZl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAiZGJtb2JqZWN0ICoiCisgICAgZGVmIHByZV9yZW5kZXIoc2VsZik6CisgICAgICAgIHN1cGVyKCkucHJlX3JlbmRlcigpCisgICAgICAgIHNlbGYubmFtZSA9ICdkcCcKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTZhZDUzNjM1NzkxMzg3OWFdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLW5ld2RibW9iamVjdChjaGFyICpmaWxlLCBpbnQgZmxhZ3MsIGludCBtb2RlKQorbmV3ZGJtb2JqZWN0KGNvbnN0IGNoYXIgKmZpbGUsIGludCBmbGFncywgaW50IG1vZGUpCiB7CiAgICAgZGJtb2JqZWN0ICpkcDsKIApAQCAtNTYsNyArNjcsOCBAQAogICAgIGlmIChkcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBkcC0+ZGlfc2l6ZSA9IC0xOwotICAgIGlmICggKGRwLT5kaV9kYm0gPSBkYm1fb3BlbihmaWxlLCBmbGFncywgbW9kZSkpID09IDAgKSB7CisgICAgLyogU2VlIGlzc3VlICMxOTI5NiAqLworICAgIGlmICggKGRwLT5kaV9kYm0gPSBkYm1fb3BlbigoY2hhciAqKWZpbGUsIGZsYWdzLCBtb2RlKSkgPT0gMCApIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKERibUVycm9yKTsKICAgICAgICAgUHlfREVDUkVGKGRwKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02Nyw3ICs3OSw3IEBACiAvKiBNZXRob2RzICovCiAKIHN0YXRpYyB2b2lkCi1kYm1fZGVhbGxvYyhyZWdpc3RlciBkYm1vYmplY3QgKmRwKQorZGJtX2RlYWxsb2MoZGJtb2JqZWN0ICpkcCkKIHsKICAgICBpZiAoIGRwLT5kaV9kYm0gKQogICAgICAgICBkYm1fY2xvc2UoZHAtPmRpX2RibSk7CkBAIC05NSw3ICsxMDcsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCByZWdpc3RlciBQeU9iamVjdCAqa2V5KQorZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqa2V5KQogewogICAgIGRhdHVtIGRyZWMsIGtyZWM7CiAgICAgUHlfc3NpemVfdCB0bXBfc2l6ZTsKQEAgLTE3MCw3ICsxODIsNyBAQAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9fY2xvc2UocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9fY2xvc2UoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBpZiAoZHAtPmRpX2RibSkKICAgICAgICAgZGJtX2Nsb3NlKGRwLT5kaV9kYm0pOwpAQCAtMTgwLDkgKzE5Miw5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fa2V5cyhyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2tleXMoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdiwgKml0ZW07CisgICAgUHlPYmplY3QgKnYsICppdGVtOwogICAgIGRhdHVtIGtleTsKICAgICBpbnQgZXJyOwogCkBAIC0yNTIsMzEgKzI2NCw2OCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9pbnBsYWNlX3JlcGVhdCAqLwogfTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLWRibV9nZXQocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgZGF0dW0ga2V5LCB2YWw7Ci0gICAgUHlPYmplY3QgKmRlZnZhbHVlID0gUHlfTm9uZTsKLSAgICBjaGFyICp0bXBfcHRyOwotICAgIFB5X3NzaXplX3QgdG1wX3NpemU7CisvKltjbGluaWMgaW5wdXRdCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjfE86Z2V0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcF9wdHIsICZ0bXBfc2l6ZSwgJmRlZnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAga2V5LmRwdHIgPSB0bXBfcHRyOwotICAgIGtleS5kc2l6ZSA9IHRtcF9zaXplOwotICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKLSAgICB2YWwgPSBkYm1fZmV0Y2goZHAtPmRpX2RibSwga2V5KTsKLSAgICBpZiAodmFsLmRwdHIgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUodmFsLmRwdHIsIHZhbC5kc2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5X0lOQ1JFRihkZWZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBkZWZ2YWx1ZTsKLSAgICB9CitkYm0uZGJtLmdldAorCisgICAgc2VsZjogZGJtb2JqZWN0CisKKyAgICBrZXk6IHN0cihsZW5ndGg9VHJ1ZSkKKyAgICBkZWZhdWx0OiBvYmplY3QgPSBOb25lCisgICAgLworCitSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihkYm1fZGJtX2dldF9fZG9jX18sCisiZ2V0KCRzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgdmFsdWUgZm9yIGtleSBpZiBwcmVzZW50LCBvdGhlcndpc2UgZGVmYXVsdC4iKTsKKworI2RlZmluZSBEQk1fREJNX0dFVF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0IiwgKFB5Q0Z1bmN0aW9uKWRibV9kYm1fZ2V0LCBNRVRIX1ZBUkFSR1MsIGRibV9kYm1fZ2V0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fZGJtX2dldF9pbXBsKGRibW9iamVjdCAqZHAsIGNvbnN0IGNoYXIgKmtleSwgUHlfc3NpemVfY2xlYW5fdCBrZXlfbGVuZ3RoLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fZGJtX2dldChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICprZXk7CisgICAgUHlfc3NpemVfY2xlYW5fdCBrZXlfbGVuZ3RoOworICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAicyN8TzpnZXQiLAorICAgICAgICAma2V5LCAma2V5X2xlbmd0aCwgJmRlZmF1bHRfdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGJtX2RibV9nZXRfaW1wbChkcCwga2V5LCBrZXlfbGVuZ3RoLCBkZWZhdWx0X3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3NldGRlZmF1bHQocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCitkYm1fZGJtX2dldF9pbXBsKGRibW9iamVjdCAqZHAsIGNvbnN0IGNoYXIgKmtleSwgUHlfc3NpemVfY2xlYW5fdCBrZXlfbGVuZ3RoLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00NTJlYTExMzk0ZTdlOTJkIGlucHV0PWFlY2Y1ZWZkMmYyYjFhM2JdKi8KK3sKKyAgICBkYXR1bSBkYm1fa2V5LCB2YWw7CisKKyAgICBkYm1fa2V5LmRwdHIgPSAoY2hhciAqKWtleTsKKyAgICBkYm1fa2V5LmRzaXplID0ga2V5X2xlbmd0aDsKKyAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CisgICAgdmFsID0gZGJtX2ZldGNoKGRwLT5kaV9kYm0sIGRibV9rZXkpOworICAgIGlmICh2YWwuZHB0ciAhPSBOVUxMKQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSh2YWwuZHB0ciwgdmFsLmRzaXplKTsKKworICAgIFB5X0lOQ1JFRihkZWZhdWx0X3ZhbHVlKTsKKyAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9zZXRkZWZhdWx0KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGRhdHVtIGtleSwgdmFsOwogICAgIFB5T2JqZWN0ICpkZWZ2YWx1ZSA9IE5VTEw7CkBAIC0zMTcsMTggKzM2NiwzMyBAQAogICAgIHJldHVybiBkZWZ2YWx1ZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZW50ZXJfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiBzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX19leGl0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9jbG9zZSwgTlVMTCk7Cit9CisKKwogc3RhdGljIFB5TWV0aG9kRGVmIGRibV9tZXRob2RzW10gPSB7CiAgICAgeyJjbG9zZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGJtX19jbG9zZSwgICAgICAgIE1FVEhfTk9BUkdTLAogICAgICAiY2xvc2UoKVxuQ2xvc2UgdGhlIGRhdGFiYXNlLiJ9LAogICAgIHsia2V5cyIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9rZXlzLCAgICAgICAgICBNRVRIX05PQVJHUywKICAgICAgImtleXMoKSAtPiBsaXN0XG5SZXR1cm4gYSBsaXN0IG9mIGFsbCBrZXlzIGluIHRoZSBkYXRhYmFzZS4ifSwKLSAgICB7ImdldCIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkYm1fZ2V0LCAgICAgICAgICAgTUVUSF9WQVJBUkdTLAotICAgICAiZ2V0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuIgotICAgICAiUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LiJ9LAorICAgIERCTV9EQk1fR0VUX01FVEhPRERFRgogICAgIHsic2V0ZGVmYXVsdCIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9zZXRkZWZhdWx0LCAgICBNRVRIX1ZBUkFSR1MsCiAgICAgICJzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuIgogICAgICAiUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LiAgSWYga2V5XG4iCiAgICAgICJpcyBub3QgaW4gdGhlIGRhdGFiYXNlLCBpdCBpcyBpbnNlcnRlZCB3aXRoIGRlZmF1bHQgYXMgdGhlIHZhbHVlLiJ9LAorICAgIHsiX19lbnRlcl9fIiwgZGJtX19lbnRlcl9fLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX2V4aXRfXyIsICBkYm1fX2V4aXRfXywgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMzY1LDE2ICs0MjksNzAgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIFB5T2JqZWN0ICoKLWRibW9wZW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNoYXIgKm5hbWU7Ci0gICAgY2hhciAqZmxhZ3MgPSAiciI7Ci0gICAgaW50IGlmbGFnczsKLSAgICBpbnQgbW9kZSA9IDA2NjY7CisvKltjbGluaWMgaW5wdXRdCiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzfHNpOm9wZW4iLCAmbmFtZSwgJmZsYWdzLCAmbW9kZSkgKQotICAgICAgICByZXR1cm4gTlVMTDsKK2RibS5vcGVuIGFzIGRibW9wZW4KKworICAgIGZpbGVuYW1lOiBzdHIKKyAgICAgICAgVGhlIGZpbGVuYW1lIHRvIG9wZW4uCisKKyAgICBmbGFnczogc3RyPSJyIgorICAgICAgICBIb3cgdG8gb3BlbiB0aGUgZmlsZS4gICJyIiBmb3IgcmVhZGluZywgInciIGZvciB3cml0aW5nLCBldGMuCisKKyAgICBtb2RlOiBpbnQocHlfZGVmYXVsdD0iMG82NjYiKSA9IDBvNjY2CisgICAgICAgIElmIGNyZWF0aW5nIGEgbmV3IGZpbGUsIHRoZSBtb2RlIGJpdHMgZm9yIHRoZSBuZXcgZmlsZQorICAgICAgICAoZS5nLiBvcy5PX1JEV1IpLgorCisgICAgLworCitSZXR1cm4gYSBkYXRhYmFzZSBvYmplY3QuCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGRibW9wZW5fX2RvY19fLAorIm9wZW4oJG1vZHVsZSwgZmlsZW5hbWUsIGZsYWdzPVwnclwnLCBtb2RlPTBvNjY2LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZGF0YWJhc2Ugb2JqZWN0LlxuIgorIlxuIgorIiAgZmlsZW5hbWVcbiIKKyIgICAgVGhlIGZpbGVuYW1lIHRvIG9wZW4uXG4iCisiICBmbGFnc1xuIgorIiAgICBIb3cgdG8gb3BlbiB0aGUgZmlsZS4gIFwiclwiIGZvciByZWFkaW5nLCBcIndcIiBmb3Igd3JpdGluZywgZXRjLlxuIgorIiAgbW9kZVxuIgorIiAgICBJZiBjcmVhdGluZyBhIG5ldyBmaWxlLCB0aGUgbW9kZSBiaXRzIGZvciB0aGUgbmV3IGZpbGVcbiIKKyIgICAgKGUuZy4gb3MuT19SRFdSKS4iKTsKKworI2RlZmluZSBEQk1PUEVOX01FVEhPRERFRiAgICBcCisgICAgeyJvcGVuIiwgKFB5Q0Z1bmN0aW9uKWRibW9wZW4sIE1FVEhfVkFSQVJHUywgZGJtb3Blbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtb3Blbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmbGFncywgaW50IG1vZGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorZGJtb3BlbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKyAgICBjb25zdCBjaGFyICpmbGFncyA9ICJyIjsKKyAgICBpbnQgbW9kZSA9IDQzODsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAic3xzaTpvcGVuIiwKKyAgICAgICAgJmZpbGVuYW1lLCAmZmxhZ3MsICZtb2RlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRibW9wZW5faW1wbChtb2R1bGUsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibW9wZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZmxhZ3MsIGludCBtb2RlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTlhN2I3MjVmOWM0ZGNlYzIgaW5wdXQ9NjQ5OWFiMGZhYjEzMzNhY10qLworeworICAgIGludCBpZmxhZ3M7CisKICAgICBpZiAoIHN0cmNtcChmbGFncywgInIiKSA9PSAwICkKICAgICAgICAgaWZsYWdzID0gT19SRE9OTFk7CiAgICAgZWxzZSBpZiAoIHN0cmNtcChmbGFncywgInciKSA9PSAwICkKQEAgLTM5MCwxMyArNTA4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnIDIgdG8gb3BlbiBzaG91bGQgYmUgJ3InLCAndycsICdjJywgb3IgJ24nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gbmV3ZGJtb2JqZWN0KG5hbWUsIGlmbGFncywgbW9kZSk7CisgICAgcmV0dXJuIG5ld2RibW9iamVjdChmaWxlbmFtZSwgaWZsYWdzLCBtb2RlKTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIGRibW1vZHVsZV9tZXRob2RzW10gPSB7Ci0gICAgeyAib3BlbiIsIChQeUNGdW5jdGlvbilkYm1vcGVuLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAib3BlbihwYXRoWywgZmxhZ1ssIG1vZGVdXSkgLT4gbWFwcGluZ1xuIgotICAgICAgIlJldHVybiBhIGRhdGFiYXNlIG9iamVjdC4ifSwKKyAgICBEQk1PUEVOX01FVEhPRERFRgogICAgIHsgMCwgMCB9LAogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZWxlbWVudHRyZWUuYyBiL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKaW5kZXggZjQ1ODkzZi4uYjNiNjk3NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZWxlbWVudHRyZWUuYworKysgYi9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCkBAIC0xLDYzICsxLDIyIEBACi0vKgotICogRWxlbWVudFRyZWUKLSAqICRJZDogX2VsZW1lbnR0cmVlLmMgMzQ3MyAyMDA5LTAxLTExIDIyOjUzOjU1WiBmcmVkcmlrICQKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyAqIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogICoKLSAqIGVsZW1lbnR0cmVlIGFjY2VsZXJhdG9yCi0gKgotICogSGlzdG9yeToKLSAqIDE5OTktMDYtMjAgZmwgIGNyZWF0ZWQgKGFzIHBhcnQgb2Ygc2dtbG9wKQotICogMjAwMS0wNS0yOSBmbCAgZWZmZG9tIGVkaXRpb24KLSAqIDIwMDMtMDItMjcgZmwgIGVsZW1lbnR0cmVlIGVkaXRpb24gKGFscGhhKQotICogMjAwNC0wNi0wMyBmbCAgdXBkYXRlcyBmb3IgZWxlbWVudHRyZWUgMS4yCi0gKiAyMDA1LTAxLTA1IGZsICBtYWpvciBvcHRpbWl6YXRpb24gZWZmb3J0Ci0gKiAyMDA1LTAxLTExIGZsICBmaXJzdCBwdWJsaWMgcmVsZWFzZSAoY0VsZW1lbnRUcmVlIDAuOCkKLSAqIDIwMDUtMDEtMTIgZmwgIHNwbGl0IGVsZW1lbnQgb2JqZWN0IGludG8gYmFzZSBhbmQgZXh0cmFzCi0gKiAyMDA1LTAxLTEzIGZsICB1c2UgdGFnZ2VkIHBvaW50ZXJzIGZvciB0YWlsL3RleHQgKGNFbGVtZW50VHJlZSAwLjkpCi0gKiAyMDA1LTAxLTE3IGZsICBhZGRlZCB0cmVlYnVpbGRlciBjbG9zZSBtZXRob2QKLSAqIDIwMDUtMDEtMTcgZmwgIGZpeGVkIGNyYXNoIGluIGdldGNoaWxkcmVuCi0gKiAyMDA1LTAxLTE4IGZsICByZW1vdmVkIG9ic2VydmVyIGFwaSwgYWRkZWQgaXRlcnBhcnNlIChjRWxlbWVudFRyZWUgMC45LjMpCi0gKiAyMDA1LTAxLTIzIGZsICByZXZpc2VkIGl0ZXJwYXJzZSBhcGk7IGFkZGVkIG5hbWVzcGFjZSBldmVudCBzdXBwb3J0ICgwLjkuOCkKLSAqIDIwMDUtMDEtMjYgZmwgIGFkZGVkIFZFUlNJT04gbW9kdWxlIHByb3BlcnR5IChjRWxlbWVudFRyZWUgMS4wKQotICogMjAwNS0wMS0yOCBmbCAgYWRkZWQgcmVtb3ZlIG1ldGhvZCAoMS4wLjEpCi0gKiAyMDA1LTAzLTAxIGZsICBhZGRlZCBpc2VsZW1lbnQgZnVuY3Rpb247IGZpeGVkIG1ha2VlbGVtZW50IGFsaWFzaW5nICgxLjAuMikKLSAqIDIwMDUtMDMtMTMgZmwgIGV4cG9ydCBDb21tZW50IGFuZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24vUEkgaGVscGVycwotICogMjAwNS0wMy0yNiBmbCAgYWRkZWQgQ29tbWVudCBhbmQgUEkgc3VwcG9ydCB0byBYTUxQYXJzZXIKLSAqIDIwMDUtMDMtMjcgZmwgIGV2ZW50IG9wdGltaXphdGlvbnM7IGNvbXBsYWluIGFib3V0IGJvZ3VzIGV2ZW50cwotICogMjAwNS0wOC0wOCBmbCAgZml4ZWQgcmVhZCBlcnJvciBoYW5kbGluZyBpbiBwYXJzZQotICogMjAwNS0wOC0xMSBmbCAgYWRkZWQgcnVudGltZSB0ZXN0IGZvciBjb3B5IHdvcmthcm91bmQgKDEuMC4zKQotICogMjAwNS0xMi0xMyBmbCAgYWRkZWQgZXhwYXRfY2FwaSBzdXBwb3J0IChmb3IgeG1sLmV0cmVlKSAoMS4wLjQpCi0gKiAyMDA1LTEyLTE2IGZsICBhZGRlZCBzdXBwb3J0IGZvciBub24tc3RhbmRhcmQgZW5jb2RpbmdzCi0gKiAyMDA2LTAzLTA4IGZsICBmaXhlZCBhIGNvdXBsZSBvZiBwb3RlbnRpYWwgbnVsbC1yZWZzIGFuZCBsZWFrcwotICogMjAwNi0wMy0xMiBmbCAgbWVyZ2UgaW4gMi41IHNzaXplX3QgY2hhbmdlcwotICogMjAwNy0wOC0yNSBmbCAgY2FsbCBjdXN0b20gYnVpbGRlcidzIGNsb3NlIG1ldGhvZCBmcm9tIFhNTFBhcnNlcgotICogMjAwNy0wOC0zMSBmbCAgYWRkZWQgaXRlciwgZXh0ZW5kIGZyb20gRVQgMS4zCi0gKiAyMDA3LTA5LTAxIGZsICBmaXhlZCBQYXJzZUVycm9yIGV4Y2VwdGlvbiwgc2V0c2xpY2Ugc291cmNlIHR5cGUsIGV0YwotICogMjAwNy0wOS0wMyBmbCAgZml4ZWQgaGFuZGxpbmcgb2YgbmVnYXRpdmUgaW5zZXJ0IGluZGV4ZXMKLSAqIDIwMDctMDktMDQgZmwgIGFkZGVkIGl0ZXJ0ZXh0IGZyb20gRVQgMS4zCi0gKiAyMDA3LTA5LTA2IGZsICBhZGRlZCBwb3NpdGlvbiBhdHRyaWJ1dGUgdG8gUGFyc2VFcnJvciBleGNlcHRpb24KLSAqIDIwMDgtMDYtMDYgZmwgIGRlbGF5IGVycm9yIHJlcG9ydGluZyBpbiBpdGVycGFyc2UgKGZyb20gSHJ2b2plIE5pa3NpYykKLSAqCisgKiBfZWxlbWVudHRyZWUgLSBDIGFjY2VsZXJhdG9yIGZvciB4bWwuZXRyZWUuRWxlbWVudFRyZWUKICAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IGJ5IFNlY3JldCBMYWJzIEFCLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IGJ5IEZyZWRyaWsgTHVuZGguCiAgKgogICogaW5mb0BweXRob253YXJlLmNvbQogICogaHR0cDovL3d3dy5weXRob253YXJlLmNvbQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLS8qIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4gKi8KLS8qIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLiAqLwotCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKLSNkZWZpbmUgVkVSU0lPTiAiMS4wLjYiCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjb25maWd1cmF0aW9uICovCiAKLS8qIExlYXZlIGRlZmluZWQgdG8gaW5jbHVkZSB0aGUgZXhwYXQtYmFzZWQgWE1MUGFyc2VyIHR5cGUgKi8KLSNkZWZpbmUgVVNFX0VYUEFUCi0KIC8qIEFuIGVsZW1lbnQgY2FuIGhvbGQgdGhpcyBtYW55IGNoaWxkcmVuIHdpdGhvdXQgZXh0cmEgbWVtb3J5CiAgICBhbGxvY2F0aW9ucy4gKi8KICNkZWZpbmUgU1RBVElDX0NISUxEUkVOIDQKQEAgLTExOSwxMCArNzgsNTEgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgWE1MUGFyc2VyX1R5cGU7CiAKIAotLyogZ2x1ZSBmdW5jdGlvbnMgKHNlZSB0aGUgaW5pdCBmdW5jdGlvbiBmb3IgZGV0YWlscykgKi8KLXN0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmo7Ci1zdGF0aWMgUHlPYmplY3QqIGVsZW1lbnR0cmVlX2RlZXBjb3B5X29iajsKLXN0YXRpYyBQeU9iamVjdCogZWxlbWVudHBhdGhfb2JqOworLyogUGVyLW1vZHVsZSBzdGF0ZTsgUEVQIDMxMjEgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdCAqcGFyc2VlcnJvcl9vYmo7CisgICAgUHlPYmplY3QgKmRlZXBjb3B5X29iajsKKyAgICBQeU9iamVjdCAqZWxlbWVudHBhdGhfb2JqOworfSBlbGVtZW50dHJlZXN0YXRlOworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGVsZW1lbnR0cmVlbW9kdWxlOworCisvKiBHaXZlbiBhIG1vZHVsZSBvYmplY3QgKGFzc3VtZWQgdG8gYmUgX2VsZW1lbnR0cmVlKSwgZ2V0IGl0cyBwZXItbW9kdWxlCisgKiBzdGF0ZS4KKyAqLworI2RlZmluZSBFVF9TVEFURShtb2QpICgoZWxlbWVudHRyZWVzdGF0ZSAqKSBQeU1vZHVsZV9HZXRTdGF0ZShtb2QpKQorCisvKiBGaW5kIHRoZSBtb2R1bGUgaW5zdGFuY2UgaW1wb3J0ZWQgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHN1Yi1pbnRlcnByZXRlcgorICogYW5kIGdldCBpdHMgc3RhdGUuCisgKi8KKyNkZWZpbmUgRVRfU1RBVEVfR0xPQkFMIFwKKyAgICAoKGVsZW1lbnR0cmVlc3RhdGUgKikgUHlNb2R1bGVfR2V0U3RhdGUoUHlTdGF0ZV9GaW5kTW9kdWxlKCZlbGVtZW50dHJlZW1vZHVsZSkpKQorCitzdGF0aWMgaW50CitlbGVtZW50dHJlZV9jbGVhcihQeU9iamVjdCAqbSkKK3sKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFKG0pOworICAgIFB5X0NMRUFSKHN0LT5wYXJzZWVycm9yX29iaik7CisgICAgUHlfQ0xFQVIoc3QtPmRlZXBjb3B5X29iaik7CisgICAgUHlfQ0xFQVIoc3QtPmVsZW1lbnRwYXRoX29iaik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2VsZW1lbnR0cmVlX3RyYXZlcnNlKFB5T2JqZWN0ICptLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFKG0pOworICAgIFB5X1ZJU0lUKHN0LT5wYXJzZWVycm9yX29iaik7CisgICAgUHlfVklTSVQoc3QtPmRlZXBjb3B5X29iaik7CisgICAgUHlfVklTSVQoc3QtPmVsZW1lbnRwYXRoX29iaik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitlbGVtZW50dHJlZV9mcmVlKHZvaWQgKm0pCit7CisgICAgZWxlbWVudHRyZWVfY2xlYXIoKFB5T2JqZWN0ICopbSk7Cit9CiAKIC8qIGhlbHBlcnMgKi8KIApAQCAtMTMwLDExICsxMzAsMTEgQEAKIGRlZXBjb3B5KFB5T2JqZWN0KiBvYmplY3QsIFB5T2JqZWN0KiBtZW1vKQogewogICAgIC8qIGRvIGEgZGVlcCBjb3B5IG9mIHRoZSBnaXZlbiBvYmplY3QgKi8KLQogICAgIFB5T2JqZWN0KiBhcmdzOwogICAgIFB5T2JqZWN0KiByZXN1bHQ7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKLSAgICBpZiAoIWVsZW1lbnR0cmVlX2RlZXBjb3B5X29iaikgeworICAgIGlmICghc3QtPmRlZXBjb3B5X29iaikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoCiAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAiZGVlcGNvcHkgaGVscGVyIG5vdCBmb3VuZCIKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2soMiwgb2JqZWN0LCBtZW1vKTsKICAgICBpZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqLCBhcmdzKTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KHN0LT5kZWVwY29weV9vYmosIGFyZ3MpOwogICAgIFB5X0RFQ1JFRihhcmdzKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjI5LDggKzIyOSwxMCBAQAogY3JlYXRlX2V4dHJhKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhdHRyaWIpCiB7CiAgICAgc2VsZi0+ZXh0cmEgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZW9mKEVsZW1lbnRPYmplY3RFeHRyYSkpOwotICAgIGlmICghc2VsZi0+ZXh0cmEpCisgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgaWYgKCFhdHRyaWIpCiAgICAgICAgIGF0dHJpYiA9IFB5X05vbmU7CkBAIC0yODMsMTMgKzI4NSw2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHNlbGYtPmV4dHJhID0gTlVMTDsKIAotICAgIGlmIChhdHRyaWIgIT0gUHlfTm9uZSAmJiAhaXNfZW1wdHlfZGljdChhdHRyaWIpKSB7Ci0gICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgYXR0cmliKSA8IDApIHsKLSAgICAgICAgICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgUHlfSU5DUkVGKHRhZyk7CiAgICAgc2VsZi0+dGFnID0gdGFnOwogCkBAIC0zMDMsNiArMjk4LDE0IEBACiAKICAgICBBTExPQyhzaXplb2YoRWxlbWVudE9iamVjdCksICJjcmVhdGUgZWxlbWVudCIpOwogICAgIFB5T2JqZWN0X0dDX1RyYWNrKHNlbGYpOworCisgICAgaWYgKGF0dHJpYiAhPSBQeV9Ob25lICYmICFpc19lbXB0eV9kaWN0KGF0dHJpYikpIHsKKyAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBhdHRyaWIpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gKFB5T2JqZWN0Kikgc2VsZjsKIH0KIApAQCAtMzU4LDYgKzM2MSw3IEBACiAKICAgICBQeV9ERUNSRUYoYXR0cmliX3N0cik7CiAKKyAgICAvKiBhdHRyaWIgY2FuIGJlIE5VTEwgaWYgUHlEaWN0X05ldyBmYWlsZWQgKi8KICAgICBpZiAoYXR0cmliKQogICAgICAgICBpZiAoUHlEaWN0X1VwZGF0ZShhdHRyaWIsIGt3ZHMpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDMzLDggKzQzNywxMCBAQAogICAgIC8qIG1ha2Ugc3VyZSBzZWxmLT5jaGlsZHJlbiBjYW4gaG9sZCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGV4dHJhCiAgICAgICAgZWxlbWVudHMuICBzZXQgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgaWYgYWxsb2NhdGlvbiBmYWlsZWQgKi8KIAotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIHNpemUgPSBzZWxmLT5leHRyYS0+bGVuZ3RoICsgZXh0cmE7CiAKQEAgLTU2MSw4ICs1NjcsOSBAQAogICAgIFB5T2JqZWN0KiBhdHRyaWIgPSBOVUxMOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyFPfE8hOlN1YkVsZW1lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmRWxlbWVudF9UeXBlLCAmcGFyZW50LCAmdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlEaWN0X1R5cGUsICZhdHRyaWIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlEaWN0X1R5cGUsICZhdHRyaWIpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmIChhdHRyaWIpIHsKICAgICAgICAgLyogYXR0cmliIHBhc3NlZCBhcyBwb3NpdGlvbmFsIGFyZyAqLwpAQCAtNTg2LDggKzU5Myw5IEBACiAgICAgfQogCiAgICAgZWxlbSA9IGNyZWF0ZV9uZXdfZWxlbWVudCh0YWcsIGF0dHJpYik7Ci0KICAgICBQeV9ERUNSRUYoYXR0cmliKTsKKyAgICBpZiAoZWxlbSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChlbGVtZW50X2FkZF9zdWJlbGVtZW50KHBhcmVudCwgZWxlbSkgPCAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihlbGVtKTsKQEAgLTY0NSw3ICs2NTMsNiBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogbWV0aG9kcyAoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKSAqLwogCiBzdGF0aWMgUHlPYmplY3QqCiBlbGVtZW50X2FwcGVuZChFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTY4OSw4ICs2OTYsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGVsZW1lbnQgPSAoRWxlbWVudE9iamVjdCopIGNyZWF0ZV9uZXdfZWxlbWVudCgKLSAgICAgICAgc2VsZi0+dGFnLCAoc2VsZi0+ZXh0cmEpID8gc2VsZi0+ZXh0cmEtPmF0dHJpYiA6IFB5X05vbmUKLSAgICAgICAgKTsKKyAgICAgICAgc2VsZi0+dGFnLCAoc2VsZi0+ZXh0cmEpID8gc2VsZi0+ZXh0cmEtPmF0dHJpYiA6IFB5X05vbmUpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTcwMyw3ICs3MDksNiBAQAogICAgIFB5X0lOQ1JFRihKT0lOX09CSihlbGVtZW50LT50YWlsKSk7CiAKICAgICBpZiAoc2VsZi0+ZXh0cmEpIHsKLQogICAgICAgICBpZiAoZWxlbWVudF9yZXNpemUoZWxlbWVudCwgc2VsZi0+ZXh0cmEtPmxlbmd0aCkgPCAwKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZWxlbWVudCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTcxNSw3ICs3MjAsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgZWxlbWVudC0+ZXh0cmEtPmxlbmd0aCA9IHNlbGYtPmV4dHJhLT5sZW5ndGg7Ci0KICAgICB9CiAKICAgICByZXR1cm4gKFB5T2JqZWN0KikgZWxlbWVudDsKQEAgLTc3Miw3ICs3NzYsNiBAQAogICAgIGVsZW1lbnQtPnRhaWwgPSBKT0lOX1NFVCh0YWlsLCBKT0lOX0dFVChzZWxmLT50YWlsKSk7CiAKICAgICBpZiAoc2VsZi0+ZXh0cmEpIHsKLQogICAgICAgICBpZiAoZWxlbWVudF9yZXNpemUoZWxlbWVudCwgc2VsZi0+ZXh0cmEtPmxlbmd0aCkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtNzg2LDcgKzc4OSw2IEBACiAgICAgICAgIH0KIAogICAgICAgICBlbGVtZW50LT5leHRyYS0+bGVuZ3RoID0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKLQogICAgIH0KIAogICAgIC8qIGFkZCBvYmplY3QgdG8gbWVtbyBkaWN0aW9uYXJ5IChzbyBkZWVwY29weSB3b24ndCB2aXNpdCBpdCBhZ2FpbikgKi8KQEAgLTEwNzksNiArMTA4MSw3IEBACiAgICAgUHlPYmplY3QqIHRhZzsKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJwYXRoIiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86ZmluZCIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpCkBAIC0xMDg3LDcgKzEwOTAsNyBAQAogICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpIHsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZmluZCk7CiAgICAgICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCisgICAgICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogICAgIH0KIApAQCAtMTExNSw2ICsxMTE4LDcgQEAKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgX1B5X0lERU5USUZJRVIoZmluZHRleHQpOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJkZWZhdWx0IiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9POmZpbmR0ZXh0Iiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZkZWZhdWx0X3ZhbHVlLCAmbmFtZXNwYWNlcykpCkBAIC0xMTIyLDcgKzExMjYsNyBAQAogCiAgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmR0ZXh0LCAiT09PTyIsIHNlbGYsIHRhZywgZGVmYXVsdF92YWx1ZSwgbmFtZXNwYWNlcworICAgICAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZHRleHQsICJPT09PIiwgc2VsZiwgdGFnLCBkZWZhdWx0X3ZhbHVlLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogCiAgICAgaWYgKCFzZWxmLT5leHRyYSkgewpAQCAtMTEzMiw4ICsxMTM2LDggQEAKIAogICAgIGZvciAoaSA9IDA7IGkgPCBzZWxmLT5leHRyYS0+bGVuZ3RoOyBpKyspIHsKICAgICAgICAgRWxlbWVudE9iamVjdCogaXRlbSA9IChFbGVtZW50T2JqZWN0Kikgc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldOwotICAgICAgICBpZiAoRWxlbWVudF9DaGVja0V4YWN0KGl0ZW0pICYmIChQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbS0+dGFnLCB0YWcsIFB5X0VRKSA9PSAxKSkgewotCisgICAgICAgIGlmIChFbGVtZW50X0NoZWNrRXhhY3QoaXRlbSkgJiYKKyAgICAgICAgICAgIChQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbS0+dGFnLCB0YWcsIFB5X0VRKSA9PSAxKSkgewogICAgICAgICAgICAgUHlPYmplY3QqIHRleHQgPSBlbGVtZW50X2dldF90ZXh0KGl0ZW0pOwogICAgICAgICAgICAgaWYgKHRleHQgPT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX05ldygwLCAwKTsKQEAgLTExNTQsNiArMTE1OCw3IEBACiAgICAgUHlPYmplY3QqIHRhZzsKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJwYXRoIiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86ZmluZGFsbCIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpCkBAIC0xMTYyLDcgKzExNjcsNyBAQAogICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpIHsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZmluZGFsbCk7CiAgICAgICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kYWxsLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCisgICAgICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kYWxsLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogICAgIH0KIApAQCAtMTE5NCwxNCArMTE5OSwxNSBAQAogICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKICAgICBfUHlfSURFTlRJRklFUihpdGVyZmluZCk7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJwYXRoIiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86aXRlcmZpbmQiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZywgJm5hbWVzcGFjZXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgKLSAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9pdGVyZmluZCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcwotICAgICAgICApOworICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9pdGVyZmluZCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTEzMTIsOCArMTMxOCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmRWxlbWVudF9UeXBlLCAmZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBpZiAoaW5kZXggPCAwKSB7CiAgICAgICAgIGluZGV4ICs9IHNlbGYtPmV4dHJhLT5sZW5ndGg7CkBAIC0xNDU0LDggKzE0NjIsMTAgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POnNldCIsICZrZXksICZ2YWx1ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBhdHRyaWIgPSBlbGVtZW50X2dldF9hdHRyaWIoc2VsZik7CiAgICAgaWYgKCFhdHRyaWIpCkBAIC0xNTcwLDggKzE1ODAsMTAgQEAKICAgICAgICAgUHlPYmplY3QqIHJlY3ljbGUgPSBOVUxMOwogICAgICAgICBQeU9iamVjdCogc2VxID0gTlVMTDsKIAotICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoaXRlbSwKICAgICAgICAgICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoLApAQCAtMTc4Niw3ICsxNzk4LDcgQEAKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidGV4dCIpID09IDApIHsKICAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfdGV4dChzZWxmKTsKLSAgICAgICAgUHlfSU5DUkVGKHJlcyk7CisgICAgICAgIFB5X1hJTkNSRUYocmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAKQEAgLTE4MDEsOCArMTgxMywxMCBAQAogICAgICAgICByZXMgPSBlbGVtZW50X2dldF90YWlsKHNlbGYpOwogICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJhdHRyaWIiKSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIHJlcyA9IGVsZW1lbnRfZ2V0X2F0dHJpYihzZWxmKTsKICAgICB9CiAKQEAgLTE4MTksMTAgKzE4MzMsMTAgQEAKICAgICBjaGFyICpuYW1lID0gIiI7CiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhuYW1lb2JqKSkKICAgICAgICAgbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobmFtZW9iaik7Ci0KLSAgICBpZiAobmFtZSA9PSBOVUxMKSB7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ0YWciKSA9PSAwKSB7CisKKyAgICBpZiAoc3RyY21wKG5hbWUsICJ0YWciKSA9PSAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmLT50YWcpOwogICAgICAgICBzZWxmLT50YWcgPSB2YWx1ZTsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPnRhZyk7CkBAIC0xODM1LDggKzE4NDksMTAgQEAKICAgICAgICAgc2VsZi0+dGFpbCA9IHZhbHVlOwogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+dGFpbCk7CiAgICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImF0dHJpYiIpID09IDApIHsKLSAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmLT5leHRyYS0+YXR0cmliKTsKICAgICAgICAgc2VsZi0+ZXh0cmEtPmF0dHJpYiA9IHZhbHVlOwogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+ZXh0cmEtPmF0dHJpYik7CkBAIC0yMTUyLDE0ICsyMTY4LDYgQEAKICAgICBpdCA9IFB5T2JqZWN0X0dDX05ldyhFbGVtZW50SXRlck9iamVjdCwgJkVsZW1lbnRJdGVyX1R5cGUpOwogICAgIGlmICghaXQpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghKGl0LT5wYXJlbnRfc3RhY2sgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZW9mKFBhcmVudExvY2F0b3IpKSkpIHsKLSAgICAgICAgUHlPYmplY3RfR0NfRGVsKGl0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaXQtPnBhcmVudF9zdGFjay0+cGFyZW50ID0gTlVMTDsKLSAgICBpdC0+cGFyZW50X3N0YWNrLT5jaGlsZF9pbmRleCA9IDA7Ci0gICAgaXQtPnBhcmVudF9zdGFjay0+bmV4dCA9IE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHRhZykpCiAgICAgICAgIHN0YXIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiKiIpOwpAQCAtMjE2OCwxNyArMjE3NiwyNyBAQAogCiAgICAgaWYgKHN0YXIgJiYgUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRhZywgc3RhciwgUHlfRVEpID09IDEpCiAgICAgICAgIHRhZyA9IFB5X05vbmU7Ci0KICAgICBQeV9YREVDUkVGKHN0YXIpOworCisgICAgUHlfSU5DUkVGKHRhZyk7CiAgICAgaXQtPnNvdWdodF90YWcgPSB0YWc7CiAgICAgaXQtPnJvb3RfZG9uZSA9IDA7CiAgICAgaXQtPmdldHRleHQgPSBnZXR0ZXh0OworICAgIFB5X0lOQ1JFRihzZWxmKTsKICAgICBpdC0+cm9vdF9lbGVtZW50ID0gc2VsZjsKIAotICAgIFB5X0lOQ1JFRihzZWxmKTsKLSAgICBQeV9JTkNSRUYodGFnKTsKLQogICAgIFB5T2JqZWN0X0dDX1RyYWNrKGl0KTsKKworICAgIGl0LT5wYXJlbnRfc3RhY2sgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZW9mKFBhcmVudExvY2F0b3IpKTsKKyAgICBpZiAoaXQtPnBhcmVudF9zdGFjayA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihpdCk7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpdC0+cGFyZW50X3N0YWNrLT5wYXJlbnQgPSBOVUxMOworICAgIGl0LT5wYXJlbnRfc3RhY2stPmNoaWxkX2luZGV4ID0gMDsKKyAgICBpdC0+cGFyZW50X3N0YWNrLT5uZXh0ID0gTlVMTDsKKwogICAgIHJldHVybiAoUHlPYmplY3QgKilpdDsKIH0KIApAQCAtMjM3MSw2ICsyMzg5LDcgQEAKIHsKICAgICBQeU9iamVjdCogbm9kZTsKICAgICBQeU9iamVjdCogdGhpczsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmIChzZWxmLT5kYXRhKSB7CiAgICAgICAgIGlmIChzZWxmLT50aGlzID09IHNlbGYtPmxhc3QpIHsKQEAgLTI0MDEsNyArMjQyMCw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHNlbGYtPnJvb3QpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiwKKyAgICAgICAgICAgICAgICBzdC0+cGFyc2VlcnJvcl9vYmosCiAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGVsZW1lbnRzIG9uIHRvcCBsZXZlbCIKICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTI2ODgsMTAgKzI3MDcsMTIgQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiB0aGUgZXhwYXQgaW50ZXJmYWNlICovCiAKLSNpZiBkZWZpbmVkKFVTRV9FWFBBVCkKLQogI2luY2x1ZGUgImV4cGF0LmgiCiAjaW5jbHVkZSAicHlleHBhdC5oIgorCisvKiBUaGUgUHlFeHBhdF9DQVBJIHN0cnVjdHVyZSBpcyBhbiBpbW11dGFibGUgZGlzcGF0Y2ggdGFibGUsIHNvIGl0IGNhbiBiZQorICogY2FjaGVkIGdsb2JhbGx5IHdpdGhvdXQgYmVpbmcgaW4gcGVyLW1vZHVsZSBzdGF0ZS4KKyAqLwogc3RhdGljIHN0cnVjdCBQeUV4cGF0X0NBUEkgKmV4cGF0X2NhcGk7CiAjZGVmaW5lIEVYUEFUKGZ1bmMpIChleHBhdF9jYXBpLT5mdW5jKQogCkBAIC0yNzU4LDYgKzI3NzksMTAgQEAKICAgICAgICAgaWYgKGkgIT0gc2l6ZSkgewogICAgICAgICAgICAgLyogY29udmVydCB0byB1bml2ZXJzYWwgbmFtZSAqLwogICAgICAgICAgICAgdGFnID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBzaXplKzEpOworICAgICAgICAgICAgaWYgKHRhZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodGFnKTsKICAgICAgICAgICAgIHBbMF0gPSAneyc7CiAgICAgICAgICAgICBtZW1jcHkocCsxLCBzdHJpbmcsIHNpemUpOwpAQCAtMjc5Nyw2ICsyODIyLDcgQEAKIGV4cGF0X3NldF9lcnJvcihlbnVtIFhNTF9FcnJvciBlcnJvcl9jb2RlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgY2hhciAqbWVzc2FnZSkKIHsKICAgICBQeU9iamVjdCAqZXJybXNnLCAqZXJyb3IsICpwb3NpdGlvbiwgKmNvZGU7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBlcnJtc2cgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXM6IGxpbmUgJWQsIGNvbHVtbiAlZCIsCiAgICAgICAgICAgICAgICAgbWVzc2FnZSA/IG1lc3NhZ2UgOiBFWFBBVChFcnJvclN0cmluZykoZXJyb3JfY29kZSksCkBAIC0yODA0LDcgKzI4MzAsNyBAQAogICAgIGlmIChlcnJtc2cgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZXJyb3IgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmosICJPIiwgZXJybXNnKTsKKyAgICBlcnJvciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzdC0+cGFyc2VlcnJvcl9vYmosICJPIiwgZXJybXNnKTsKICAgICBQeV9ERUNSRUYoZXJybXNnKTsKICAgICBpZiAoIWVycm9yKQogICAgICAgICByZXR1cm47CkBAIC0yODM0LDcgKzI4NjAsNyBAQAogICAgIH0KICAgICBQeV9ERUNSRUYocG9zaXRpb24pOwogCi0gICAgUHlFcnJfU2V0T2JqZWN0KGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqLCBlcnJvcik7CisgICAgUHlFcnJfU2V0T2JqZWN0KHN0LT5wYXJzZWVycm9yX29iaiwgZXJyb3IpOwogICAgIFB5X0RFQ1JFRihlcnJvcik7CiB9CiAKQEAgLTI4NTIsNiArMjg3OCw5IEBACiAgICAgaWYgKGRhdGFfbGVuIDwgMiB8fCBkYXRhX2luWzBdICE9ICcmJykKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGtleSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGRhdGFfaW4gKyAxLCBkYXRhX2xlbiAtIDIsICJzdHJpY3QiKTsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg5Miw2ICsyOTIxLDkgQEAKICAgICBQeU9iamVjdCogYXR0cmliOwogICAgIGludCBvazsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICAvKiB0YWcgbmFtZSAqLwogICAgIHRhZyA9IG1ha2V1bml2ZXJzYWwoc2VsZiwgdGFnX2luKTsKICAgICBpZiAoIXRhZykKQEAgLTI5NTAsNiArMjk4Miw5IEBACiAgICAgUHlPYmplY3QqIGRhdGE7CiAgICAgUHlPYmplY3QqIHJlczsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBkYXRhID0gUHlVbmljb2RlX0RlY29kZVVURjgoZGF0YV9pbiwgZGF0YV9sZW4sICJzdHJpY3QiKTsKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybjsgLyogcGFyc2VyIHdpbGwgbG9vayBmb3IgZXJyb3JzICovCkBAIC0yOTczLDYgKzMwMDgsOSBAQAogICAgIFB5T2JqZWN0KiB0YWc7CiAgICAgUHlPYmplY3QqIHJlcyA9IE5VTEw7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKFRyZWVCdWlsZGVyX0NoZWNrRXhhY3Qoc2VsZi0+dGFyZ2V0KSkKICAgICAgICAgLyogc2hvcnRjdXQgKi8KICAgICAgICAgLyogdGhlIHN0YW5kYXJkIHRyZWUgYnVpbGRlciBkb2Vzbid0IGxvb2sgYXQgdGhlIGVuZCB0YWcgKi8KQEAgLTI5OTcsNiArMzAzNSw5IEBACiAgICAgUHlPYmplY3QqIHNwcmVmaXggPSBOVUxMOwogICAgIFB5T2JqZWN0KiBzdXJpID0gTlVMTDsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAodXJpKQogICAgICAgICBzdXJpID0gUHlVbmljb2RlX0RlY29kZVVURjgodXJpLCBzdHJsZW4odXJpKSwgInN0cmljdCIpOwogICAgIGVsc2UKQEAgLTMwMjQsNiArMzA2NSw5IEBACiBzdGF0aWMgdm9pZAogZXhwYXRfZW5kX25zX2hhbmRsZXIoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBjb25zdCBYTUxfQ2hhciogcHJlZml4X2luKQogeworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICB0cmVlYnVpbGRlcl9oYW5kbGVfbmFtZXNwYWNlKAogICAgICAgICAoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQsIDAsIE5VTEwsIE5VTEwKICAgICAgICAgKTsKQEAgLTMwMzUsNiArMzA3OSw5IEBACiAgICAgUHlPYmplY3QqIGNvbW1lbnQ7CiAgICAgUHlPYmplY3QqIHJlczsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoc2VsZi0+aGFuZGxlX2NvbW1lbnQpIHsKICAgICAgICAgY29tbWVudCA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGNvbW1lbnRfaW4sIHN0cmxlbihjb21tZW50X2luKSwgInN0cmljdCIpOwogICAgICAgICBpZiAoY29tbWVudCkgewpAQCAtMzA1Nyw2ICszMTA0LDkgQEAKICAgICBQeU9iamVjdCAqcGFyc2VyX2RvY3R5cGUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGRvY3R5cGVfbmFtZV9vYmogPSBtYWtldW5pdmVyc2FsKHNlbGYsIGRvY3R5cGVfbmFtZSk7CiAgICAgaWYgKCFkb2N0eXBlX25hbWVfb2JqKQogICAgICAgICByZXR1cm47CkBAIC0zMTI1LDYgKzMxNzUsOSBAQAogICAgIFB5T2JqZWN0KiBkYXRhOwogICAgIFB5T2JqZWN0KiByZXM7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHNlbGYtPmhhbmRsZV9waSkgewogICAgICAgICB0YXJnZXQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOCh0YXJnZXRfaW4sIHN0cmxlbih0YXJnZXRfaW4pLCAic3RyaWN0Iik7CiAgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChkYXRhX2luLCBzdHJsZW4oZGF0YV9pbiksICJzdHJpY3QiKTsKQEAgLTMyOTcsNiArMzM1MCw3IEBACiB7CiAgICAgaW50IG9rOwogCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKICAgICBvayA9IEVYUEFUKFBhcnNlKShzZWxmLT5wYXJzZXIsIGRhdGEsIGRhdGFfbGVuLCBmaW5hbCk7CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTMzMzEsMTEgKzMzODUsMTQgQEAKICAgICBpZiAoVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gdHJlZWJ1aWxkZXJfZG9uZSgoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQpOwotICAgIH0gaWYgKHNlbGYtPmhhbmRsZV9jbG9zZSkgeworICAgIH0KKyAgICBlbHNlIGlmIChzZWxmLT5oYW5kbGVfY2xvc2UpIHsKICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+aGFuZGxlX2Nsb3NlLCAiIik7Ci0gICAgfSBlbHNlCisgICAgfQorICAgIGVsc2UgewogICAgICAgICByZXR1cm4gcmVzOworICAgIH0KIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMzM3MywxMCArMzQzMCw5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKLXhtbHBhcnNlcl9wYXJzZShYTUxQYXJzZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreG1scGFyc2VyX3BhcnNlX3dob2xlKFhNTFBhcnNlck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7Ci0gICAgLyogKGludGVybmFsKSBwYXJzZSB1bnRpbCBlbmQgb2YgaW5wdXQgc3RyZWFtICovCi0KKyAgICAvKiAoaW50ZXJuYWwpIHBhcnNlIHRoZSB3aG9sZSBpbnB1dCwgdW50aWwgZW5kIG9mIHN0cmVhbSAqLwogICAgIFB5T2JqZWN0KiByZWFkZXI7CiAgICAgUHlPYmplY3QqIGJ1ZmZlcjsKICAgICBQeU9iamVjdCogdGVtcDsKQEAgLTM0MDMsNyArMzQ1OSw3IEBACiAKICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGJ1ZmZlcikpIHsKICAgICAgICAgICAgIC8qIEEgdW5pY29kZSBvYmplY3QgaXMgZW5jb2RlZCBpbnRvIGJ5dGVzIHVzaW5nIFVURi04ICovCi0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKGJ1ZmZlcikgPT0gMCkgeworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGJ1ZmZlcikgPT0gMCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzQ1NywxNCArMzUxMywxNCBAQAogeG1scGFyc2VyX3NldGV2ZW50cyhYTUxQYXJzZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIC8qIGFjdGl2YXRlIGVsZW1lbnQgZXZlbnQgcmVwb3J0aW5nICovCisgICAgUHlfc3NpemVfdCBpLCBzZXFsZW47CisgICAgVHJlZUJ1aWxkZXJPYmplY3QgKnRhcmdldDsKIAotICAgIFB5X3NzaXplX3QgaTsKLSAgICBUcmVlQnVpbGRlck9iamVjdCogdGFyZ2V0OwotCi0gICAgUHlPYmplY3QqIGV2ZW50czsgLyogZXZlbnQgY29sbGVjdG9yICovCi0gICAgUHlPYmplY3QqIGV2ZW50X3NldCA9IFB5X05vbmU7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOl9zZXRldmVudHMiLCAgJlB5TGlzdF9UeXBlLCAmZXZlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnRfc2V0KSkKKyAgICBQeU9iamVjdCAqZXZlbnRzX3F1ZXVlOworICAgIFB5T2JqZWN0ICpldmVudHNfdG9fcmVwb3J0ID0gUHlfTm9uZTsKKyAgICBQeU9iamVjdCAqZXZlbnRzX3NlcTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hfE86X3NldGV2ZW50cyIsICAmUHlMaXN0X1R5cGUsICZldmVudHNfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudHNfdG9fcmVwb3J0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIVRyZWVCdWlsZGVyX0NoZWNrRXhhY3Qoc2VsZi0+dGFyZ2V0KSkgewpAQCAtMzQ3OCw5ICszNTM0LDkgQEAKIAogICAgIHRhcmdldCA9IChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldDsKIAotICAgIFB5X0lOQ1JFRihldmVudHMpOworICAgIFB5X0lOQ1JFRihldmVudHNfcXVldWUpOwogICAgIFB5X1hERUNSRUYodGFyZ2V0LT5ldmVudHMpOwotICAgIHRhcmdldC0+ZXZlbnRzID0gZXZlbnRzOworICAgIHRhcmdldC0+ZXZlbnRzID0gZXZlbnRzX3F1ZXVlOwogCiAgICAgLyogY2xlYXIgb3V0IGV4aXN0aW5nIGV2ZW50cyAqLwogICAgIFB5X0NMRUFSKHRhcmdldC0+c3RhcnRfZXZlbnRfb2JqKTsKQEAgLTM0ODgsNzUgKzM1NDQsNzEgQEAKICAgICBQeV9DTEVBUih0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaik7CiAgICAgUHlfQ0xFQVIodGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqKTsKIAotICAgIGlmIChldmVudF9zZXQgPT0gUHlfTm9uZSkgeworICAgIGlmIChldmVudHNfdG9fcmVwb3J0ID09IFB5X05vbmUpIHsKICAgICAgICAgLyogZGVmYXVsdCBpcyAiZW5kIiBvbmx5ICovCiAgICAgICAgIHRhcmdldC0+ZW5kX2V2ZW50X29iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJlbmQiKTsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQogCi0gICAgaWYgKCFQeVR1cGxlX0NoZWNrKGV2ZW50X3NldCkpIC8qIEZJWE1FOiBoYW5kbGUgYXJiaXRyYXJ5IHNlcXVlbmNlcyAqLwotICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghKGV2ZW50c19zZXEgPSBQeVNlcXVlbmNlX0Zhc3QoZXZlbnRzX3RvX3JlcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJldmVudHMgbXVzdCBiZSBhIHNlcXVlbmNlIikpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIGZvciAoaSA9IDA7IGkgPCBQeVR1cGxlX0dFVF9TSVpFKGV2ZW50X3NldCk7IGkrKykgewotICAgICAgICBQeU9iamVjdCogaXRlbSA9IFB5VHVwbGVfR0VUX0lURU0oZXZlbnRfc2V0LCBpKTsKLSAgICAgICAgY2hhciogZXZlbnQ7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKLSAgICAgICAgICAgIGV2ZW50ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhpdGVtKTsKLSAgICAgICAgICAgIGlmIChldmVudCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0gZWxzZSBpZiAoUHlCeXRlc19DaGVjayhpdGVtKSkKLSAgICAgICAgICAgIGV2ZW50ID0gUHlCeXRlc19BU19TVFJJTkcoaXRlbSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICBzZXFsZW4gPSBQeVNlcXVlbmNlX1NpemUoZXZlbnRzX3NlcSk7CisgICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7CisgICAgICAgIFB5T2JqZWN0ICpldmVudF9uYW1lX29iaiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShldmVudHNfc2VxLCBpKTsKKyAgICAgICAgY2hhciAqZXZlbnRfbmFtZSA9IE5VTEw7CisgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soZXZlbnRfbmFtZV9vYmopKSB7CisgICAgICAgICAgICBldmVudF9uYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhldmVudF9uYW1lX29iaik7CisgICAgICAgIH0gZWxzZSBpZiAoUHlCeXRlc19DaGVjayhldmVudF9uYW1lX29iaikpIHsKKyAgICAgICAgICAgIGV2ZW50X25hbWUgPSBQeUJ5dGVzX0FTX1NUUklORyhldmVudF9uYW1lX29iaik7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmNtcChldmVudCwgInN0YXJ0IikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgICAgICAgICAgdGFyZ2V0LT5zdGFydF9ldmVudF9vYmogPSBpdGVtOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudCwgImVuZCIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKworICAgICAgICBpZiAoZXZlbnRfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXZlbnRzX3NlcSk7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgImludmFsaWQgZXZlbnRzIHNlcXVlbmNlIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnRfbmFtZSwgInN0YXJ0IikgPT0gMCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKKyAgICAgICAgICAgIHRhcmdldC0+c3RhcnRfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJlbmQiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICAgICAgUHlfWERFQ1JFRih0YXJnZXQtPmVuZF9ldmVudF9vYmopOwotICAgICAgICAgICAgdGFyZ2V0LT5lbmRfZXZlbnRfb2JqID0gaXRlbTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnQsICJzdGFydC1ucyIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIHRhcmdldC0+ZW5kX2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAic3RhcnQtbnMiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICAgICAgUHlfWERFQ1JFRih0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaik7Ci0gICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaiA9IGl0ZW07CisgICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOwogICAgICAgICAgICAgRVhQQVQoU2V0TmFtZXNwYWNlRGVjbEhhbmRsZXIpKAogICAgICAgICAgICAgICAgIHNlbGYtPnBhcnNlciwKICAgICAgICAgICAgICAgICAoWE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X3N0YXJ0X25zX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfZW5kX25zX2hhbmRsZXIKICAgICAgICAgICAgICAgICApOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudCwgImVuZC1ucyIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnRfbmFtZSwgImVuZC1ucyIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRhcmdldC0+ZW5kX25zX2V2ZW50X29iaik7Ci0gICAgICAgICAgICB0YXJnZXQtPmVuZF9uc19ldmVudF9vYmogPSBpdGVtOworICAgICAgICAgICAgdGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CiAgICAgICAgICAgICBFWFBBVChTZXROYW1lc3BhY2VEZWNsSGFuZGxlcikoCiAgICAgICAgICAgICAgICAgc2VsZi0+cGFyc2VyLAogICAgICAgICAgICAgICAgIChYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfc3RhcnRfbnNfaGFuZGxlciwKICAgICAgICAgICAgICAgICAoWE1MX0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9lbmRfbnNfaGFuZGxlcgogICAgICAgICAgICAgICAgICk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoCi0gICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAidW5rbm93biBldmVudCAnJXMnIiwgZXZlbnQKLSAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgUHlfREVDUkVGKGV2ZW50c19zZXEpOworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmtub3duIGV2ZW50ICclcyciLCBldmVudF9uYW1lKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQogCisgICAgUHlfREVDUkVGKGV2ZW50c19zZXEpOwogICAgIFB5X1JFVFVSTl9OT05FOwotCi0gIGVycm9yOgotICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAiaW52YWxpZCBldmVudCB0dXBsZSIKLSAgICAgICAgKTsKLSAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIHhtbHBhcnNlcl9tZXRob2RzW10gPSB7CiAgICAgeyJmZWVkIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfZmVlZCwgTUVUSF9PfSwKICAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfY2xvc2UsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJfcGFyc2UiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9wYXJzZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Il9wYXJzZV93aG9sZSIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX3BhcnNlX3dob2xlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiX3NldGV2ZW50cyIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX3NldGV2ZW50cywgTUVUSF9WQVJBUkdTfSwKICAgICB7ImRvY3R5cGUiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9kb2N0eXBlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHtOVUxMLCBOVUxMfQpAQCAtMzYyOCw4ICszNjgwLDYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCi0jZW5kaWYKLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIHB5dGhvbiBtb2R1bGUgaW50ZXJmYWNlICovCiAKQEAgLTM2MzksMjIgKzM2ODksMjkgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfZWxlbWVudHRyZWVtb2R1bGUgPSB7Ci0gICAgICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAgICAgIl9lbGVtZW50dHJlZSIsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIC0xLAotICAgICAgICBfZnVuY3Rpb25zLAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGVsZW1lbnR0cmVlbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX2VsZW1lbnR0cmVlIiwKKyAgICBOVUxMLAorICAgIHNpemVvZihlbGVtZW50dHJlZXN0YXRlKSwKKyAgICBfZnVuY3Rpb25zLAorICAgIE5VTEwsCisgICAgZWxlbWVudHRyZWVfdHJhdmVyc2UsCisgICAgZWxlbWVudHRyZWVfY2xlYXIsCisgICAgZWxlbWVudHRyZWVfZnJlZQogfTsKIAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fZWxlbWVudHRyZWUodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbSwgKnRlbXA7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3Q7CisKKyAgICBtID0gUHlTdGF0ZV9GaW5kTW9kdWxlKCZlbGVtZW50dHJlZW1vZHVsZSk7CisgICAgaWYgKG0pIHsKKyAgICAgICAgUHlfSU5DUkVGKG0pOworICAgICAgICByZXR1cm4gbTsKKyAgICB9CiAKICAgICAvKiBJbml0aWFsaXplIG9iamVjdCB0eXBlcyAqLwogICAgIGlmIChQeVR5cGVfUmVhZHkoJkVsZW1lbnRJdGVyX1R5cGUpIDwgMCkKQEAgLTM2NjMsMjEgKzM3MjAsMjAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmRWxlbWVudF9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotI2lmIGRlZmluZWQoVVNFX0VYUEFUKQogICAgIGlmIChQeVR5cGVfUmVhZHkoJlhNTFBhcnNlcl9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotI2VuZGlmCiAKLSAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfZWxlbWVudHRyZWVtb2R1bGUpOworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJmVsZW1lbnR0cmVlbW9kdWxlKTsKICAgICBpZiAoIW0pCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0ID0gRVRfU1RBVEUobSk7CiAKICAgICBpZiAoISh0ZW1wID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJjb3B5IikpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlbGVtZW50dHJlZV9kZWVwY29weV9vYmogPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRlbXAsICJkZWVwY29weSIpOworICAgIHN0LT5kZWVwY29weV9vYmogPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRlbXAsICJkZWVwY29weSIpOwogICAgIFB5X1hERUNSRUYodGVtcCk7CiAKLSAgICBpZiAoIShlbGVtZW50cGF0aF9vYmogPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInhtbC5ldHJlZS5FbGVtZW50UGF0aCIpKSkKKyAgICBpZiAoIShzdC0+ZWxlbWVudHBhdGhfb2JqID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJ4bWwuZXRyZWUuRWxlbWVudFBhdGgiKSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogbGluayBhZ2FpbnN0IHB5ZXhwYXQgKi8KQEAgLTM2OTcsMTEgKzM3NTMsMTEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmogPSBQeUVycl9OZXdFeGNlcHRpb24oCisgICAgc3QtPnBhcnNlZXJyb3Jfb2JqID0gUHlFcnJfTmV3RXhjZXB0aW9uKAogICAgICAgICAieG1sLmV0cmVlLkVsZW1lbnRUcmVlLlBhcnNlRXJyb3IiLCBQeUV4Y19TeW50YXhFcnJvciwgTlVMTAogICAgICAgICApOwotICAgIFB5X0lOQ1JFRihlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaik7Ci0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQYXJzZUVycm9yIiwgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmopOworICAgIFB5X0lOQ1JFRihzdC0+cGFyc2VlcnJvcl9vYmopOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGFyc2VFcnJvciIsIHN0LT5wYXJzZWVycm9yX29iaik7CiAKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJkVsZW1lbnRfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJFbGVtZW50IiwgKFB5T2JqZWN0ICopJkVsZW1lbnRfVHlwZSk7CkBAIC0zNzA5LDEwICszNzY1LDggQEAKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlRyZWVCdWlsZGVyX1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVHJlZUJ1aWxkZXIiLCAoUHlPYmplY3QgKikmVHJlZUJ1aWxkZXJfVHlwZSk7CiAKLSNpZiBkZWZpbmVkKFVTRV9FWFBBVCkKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlhNTFBhcnNlcl9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlhNTFBhcnNlciIsIChQeU9iamVjdCAqKSZYTUxQYXJzZXJfVHlwZSk7Ci0jZW5kaWYKIAogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jIGIvTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jCmluZGV4IDhmMDdhODkuLjU3YjFhYzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYworKysgYi9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAgIG9mIGZyb3plbiBtb2R1bGVzIGluc3RlYWQsIGxlZnQgZGVsaWJlcmF0ZWx5IGJsYW5rIHNvIGFzIHRvIGF2b2lkCiAgICB1bmludGVudGlvbmFsIGltcG9ydCBvZiBhIHN0YWxlIHZlcnNpb24gb2YgX2Zyb3plbl9pbXBvcnRsaWIuICovCiAKLXN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiBfUHlJbXBvcnRfRnJvemVuTW9kdWxlc1tdID0geworY29uc3Qgc3RhdGljIHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7CiAgICAgezAsIDAsIDB9IC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yNSw3ICsyNSw3IEBACiAvKiBPbiBXaW5kb3dzLCB0aGlzIGxpbmtzIHdpdGggdGhlIHJlZ3VsYXIgcHl0aG9uWFkuZGxsLCBzbyB0aGlzIHZhcmlhYmxlIGNvbWVzCiAgICBmcm9tIGZyb3plbi5vYmouIEluIHRoZSBNYWtlZmlsZSwgZnJvemVuLm8gaXMgbm90IGxpbmtlZCBpbnRvIHRoaXMgZXhlY3V0YWJsZSwKICAgIHNvIHdlIGRlZmluZSB0aGUgdmFyaWFibGUgaGVyZS4gKi8KLXN0cnVjdCBfZnJvemVuICpQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOworY29uc3Qgc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CiAjZW5kaWYKIAogY29uc3QgY2hhciBoZWFkZXJbXSA9ICIvKiBBdXRvLWdlbmVyYXRlZCBieSBNb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMgKi8iOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGZwcmludGYob3V0ZmlsZSwgIiVzXG4iLCBoZWFkZXIpOwotICAgIGZwcmludGYob3V0ZmlsZSwgInVuc2lnbmVkIGNoYXIgX1B5X01fX2ltcG9ydGxpYltdID0ge1xuIik7CisgICAgZnByaW50ZihvdXRmaWxlLCAiY29uc3QgdW5zaWduZWQgY2hhciBfUHlfTV9faW1wb3J0bGliW10gPSB7XG4iKTsKICAgICBmb3IgKG4gPSAwOyBuIDwgZGF0YV9zaXplOyBuICs9IDE2KSB7CiAgICAgICAgIHNpemVfdCBpLCBlbmQgPSBQeV9NSU4obiArIDE2LCBkYXRhX3NpemUpOwogICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIgICAgIik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19nZGJtbW9kdWxlLmMgYi9Nb2R1bGVzL19nZGJtbW9kdWxlLmMKaW5kZXggMGJkNTljOC4uMjI5ZTE2ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZ2RibW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2dkYm1tb2R1bGUuYwpAQCAtNzksNyArNzksNyBAQAogLyogTWV0aG9kcyAqLwogCiBzdGF0aWMgdm9pZAotZGJtX2RlYWxsb2MocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCkKK2RibV9kZWFsbG9jKGRibW9iamVjdCAqZHApCiB7CiAgICAgaWYgKGRwLT5kaV9kYm0pCiAgICAgICAgIGdkYm1fY2xvc2UoZHAtPmRpX2RibSk7CkBAIC0xMTIsNyArMTEyLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgcmVnaXN0ZXIgUHlPYmplY3QgKmtleSkKK2RibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmtleSkKIHsKICAgICBQeU9iamVjdCAqdjsKICAgICBkYXR1bSBkcmVjLCBrcmVjOwpAQCAtMjMyLDcgKzIzMiw3IEBACiBDbG9zZXMgdGhlIGRhdGFiYXNlLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2Nsb3NlKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fY2xvc2UoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBpZiAoZHAtPmRpX2RibSkKICAgICAgICAgZ2RibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTI0Nyw5ICsyNDcsOSBAQAogR2V0IGEgbGlzdCBvZiBhbGwga2V5cyBpbiB0aGUgZGF0YWJhc2UuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fa2V5cyhyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2tleXMoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdiwgKml0ZW07CisgICAgUHlPYmplY3QgKnYsICppdGVtOwogICAgIGRhdHVtIGtleSwgbmV4dGtleTsKICAgICBpbnQgZXJyOwogCkBAIC0zMzcsOSArMzM3LDkgQEAKIHJldHVybnMgdGhlIHN0YXJ0aW5nIGtleS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9maXJzdGtleShyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2ZpcnN0a2V5KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7CisgICAgUHlPYmplY3QgKnY7CiAgICAgZGF0dW0ga2V5OwogCiAgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOwpAQCAtMzY3LDkgKzM2Nyw5IEBACiAgICAgICAgICAgayA9IGRiLm5leHRrZXkoaykiKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9uZXh0a2V5KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQorZGJtX25leHRrZXkoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7CisgICAgUHlPYmplY3QgKnY7CiAgICAgZGF0dW0ga2V5LCBuZXh0a2V5OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpuZXh0a2V5IiwgJmtleS5kcHRyLCAma2V5LmRzaXplKSkKQEAgLTM5Niw3ICszOTYsNyBAQAoga2VwdCBhbmQgcmV1c2VkIGFzIG5ldyAoa2V5LHZhbHVlKSBwYWlycyBhcmUgYWRkZWQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fcmVvcmdhbml6ZShyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX3Jlb3JnYW5pemUoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CiAgICAgZXJybm8gPSAwOwpAQCAtNDE3LDcgKzQxNyw3IEBACiBhbnkgdW53cml0dGVuIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgZGlzay4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zeW5jKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fc3luYyhkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKICAgICBnZGJtX3N5bmMoZHAtPmRpX2RibSk7CkBAIC00MjUsNiArNDI1LDIwIEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fX2VudGVyX18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZXhpdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CisgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZiwgJlB5SWRfY2xvc2UsIE5VTEwpOworfQorCiBzdGF0aWMgUHlNZXRob2REZWYgZGJtX21ldGhvZHNbXSA9IHsKICAgICB7ImNsb3NlIiwgICAgIChQeUNGdW5jdGlvbilkYm1fY2xvc2UsICAgTUVUSF9OT0FSR1MsIGRibV9jbG9zZV9fZG9jX199LAogICAgIHsia2V5cyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9rZXlzLCAgICBNRVRIX05PQVJHUywgZGJtX2tleXNfX2RvY19ffSwKQEAgLTQzNCw2ICs0NDgsOCBAQAogICAgIHsic3luYyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9zeW5jLCAgICBNRVRIX05PQVJHUywgZGJtX3N5bmNfX2RvY19ffSwKICAgICB7ImdldCIsICAgICAgIChQeUNGdW5jdGlvbilkYm1fZ2V0LCAgICAgTUVUSF9WQVJBUkdTLCBkYm1fZ2V0X19kb2NfX30sCiAgICAgeyJzZXRkZWZhdWx0IiwoUHlDRnVuY3Rpb24pZGJtX3NldGRlZmF1bHQsTUVUSF9WQVJBUkdTLCBkYm1fc2V0ZGVmYXVsdF9fZG9jX199LAorICAgIHsiX19lbnRlcl9fIiwgZGJtX19lbnRlcl9fLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX2V4aXRfXyIsICBkYm1fX2V4aXRfXywgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZ2VzdGFsdC5jIGIvTW9kdWxlcy9fZ2VzdGFsdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDMwNjgzLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2dlc3RhbHQuYworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NyBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPCi1USElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECi1GSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQkUgTElBQkxFCi1GT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi1BQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBNYWNpbnRvc2ggR2VzdGFsdCBpbnRlcmZhY2UgKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi0jaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgotCi0vKiBDb252ZXJ0IGEgNC1jaGFyIHN0cmluZyBvYmplY3QgYXJndW1lbnQgdG8gYW4gT1NUeXBlIHZhbHVlICovCi1zdGF0aWMgaW50Ci1jb252ZXJ0X3RvX09TVHlwZShQeU9iamVjdCAqdiwgT1NUeXBlICpwcikKLXsKLSAgICB1aW50MzJfdCB0bXA7Ci0gICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikgfHwgUHlVbmljb2RlX0dldExlbmd0aCh2KSAhPSA0KSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIk9TVHlwZSBhcmcgbXVzdCBiZSBzdHJpbmcgb2YgNCBjaGFycyIpOwotICAgIHJldHVybiAwOwotICAgIH0KLSAgICBtZW1jcHkoKGNoYXIgKikmdG1wLCBfUHlVbmljb2RlX0FzU3RyaW5nKHYpLCA0KTsKLSAgICAqcHIgPSAoT1NUeXBlKW50b2hsKHRtcCk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1nZXN0YWx0X2dlc3RhbHQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIE9TRXJyIGlFcnI7Ci0gICAgT1NUeXBlIHNlbGVjdG9yOwotICAgIFNJbnQzMiByZXNwb25zZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mIiwgY29udmVydF90b19PU1R5cGUsICZzZWxlY3RvcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlFcnIgPSBHZXN0YWx0KHNlbGVjdG9yLCAmcmVzcG9uc2UpOwotICAgIGlmIChpRXJyICE9IDApIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIGV4aXQgY29kZSEiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhyZXNwb25zZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgZ2VzdGFsdF9tZXRob2RzW10gPSB7Ci0gICAgeyJnZXN0YWx0IiwgZ2VzdGFsdF9nZXN0YWx0LCBNRVRIX1ZBUkFSR1N9LAotICAgIHtOVUxMLCBOVUxMfSAvKiBTZW50aW5lbCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBnZXN0YWx0bW9kdWxlID0gewotICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAiX2dlc3RhbHQiLAotICAgIE5VTEwsCi0gICAgLTEsCi0gICAgZ2VzdGFsdF9tZXRob2RzLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwKLX07Ci0KLVB5TU9ESU5JVF9GVU5DCi1QeUluaXRfX2dlc3RhbHQodm9pZCkKLXsKLSAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZnZXN0YWx0bW9kdWxlKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMgYi9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCmluZGV4IDNhYjFjMGMuLjZhMmE5YWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKKysrIGIvTW9kdWxlcy9faGFzaG9wZW5zc2wuYwpAQCAtMTcsMzYgKzE3LDE2IEBACiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiaGFzaGxpYi5oIgogCi0jaWZkZWYgV0lUSF9USFJFQUQKLSNpbmNsdWRlICJweXRocmVhZC5oIgotICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopIFwKLSAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKLSAgICAgICAgICAgIGlmICghUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAwKSkgeyBcCi0gICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBcCi0gICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAxKTsgXAotICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTIFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICB9Ci0gICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikgXAotICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAotICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKChvYmopLT5sb2NrKTsgXAotICAgICAgICB9Ci0jZWxzZQotICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopCi0gICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikKLSNlbmRpZgogCiAvKiBFVlAgaXMgdGhlIHByZWZlcnJlZCBpbnRlcmZhY2UgdG8gaGFzaGluZyBpbiBPcGVuU1NMICovCiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KIC8qIFdlIHVzZSB0aGUgb2JqZWN0IGludGVyZmFjZSB0byBkaXNjb3ZlciB3aGF0IGhhc2hlcyBPcGVuU1NMIHN1cHBvcnRzLiAqLwogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCiAKICNkZWZpbmUgTVVOQ0hfU0laRSBJTlRfTUFYCiAKLS8qIFRPRE8oZ3BzKTogV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBhIG1vZHVsZSBvciBFVlBvYmplY3QgYXR0cmlidXRlCi0gKiB0byBhbGxvdyB0aGUgdXNlciB0byBvcHRpbWl6ZSBiYXNlZCBvbiB0aGUgcGxhdGZvcm0gdGhleSdyZSB1c2luZy4gKi8KLSNkZWZpbmUgSEFTSExJQl9HSUxfTUlOU0laRSAyMDQ4Ci0KICNpZm5kZWYgSEFTSF9PQkpfQ09OU1RSVUNUT1IKICNkZWZpbmUgSEFTSF9PQkpfQ09OU1RSVUNUT1IgMAogI2VuZGlmCkBAIC00ODksNiArNDY5LDIyNSBAQAogfQogCiAKKworI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDAwMDAgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19ITUFDKSBcCisgICAgICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSkKKworI2RlZmluZSBQWV9QQktERjJfSE1BQyAxCisKKy8qIEltcHJvdmVkIGltcGxlbWVudGF0aW9uIG9mIFBLQ1M1X1BCS0RGMl9ITUFDKCkKKyAqCisgKiBQS0NTNV9QQktERjJfSE1BQ19mYXN0KCkgaGFzaGVzIHRoZSBwYXNzd29yZCBleGFjdGx5IG9uZSB0aW1lIGluc3RlYWQgb2YKKyAqIGBpdGVyYCB0aW1lcy4gVG9kYXkgKDIwMTMpIHRoZSBpdGVyYXRpb24gY291bnQgaXMgdHlwaWNhbGx5IDEwMCwwMDAgb3IKKyAqIG1vcmUuIFRoZSBpbXByb3ZlZCBhbGdvcml0aG0gaXMgbm90IHN1YmplY3QgdG8gYSBEZW5pYWwtb2YtU2VydmljZQorICogdnVsbmVyYWJpbGl0eSB3aXRoIG92ZXJseSBsYXJnZSBwYXNzd29yZHMuCisgKgorICogQWxzbyBPcGVuU1NMIDwgMS4wIGRvbid0IHByb3ZpZGUgUEtDUzVfUEJLREYyX0hNQUMoKSwgb25seQorICogUEtDUzVfUEJLREYyX1NIQTEuCisgKi8KK3N0YXRpYyBpbnQKK1BLQ1M1X1BCS0RGMl9ITUFDX2Zhc3QoY29uc3QgY2hhciAqcGFzcywgaW50IHBhc3NsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIGludCBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlciwgY29uc3QgRVZQX01EICpkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGRpZ3RtcFtFVlBfTUFYX01EX1NJWkVdLCAqcCwgaXRtcFs0XTsKKyAgICBpbnQgY3BsZW4sIGosIGssIHRrZXlsZW4sIG1kbGVuOworICAgIHVuc2lnbmVkIGxvbmcgaSA9IDE7CisgICAgSE1BQ19DVFggaGN0eF90cGwsIGhjdHg7CisKKyAgICBtZGxlbiA9IEVWUF9NRF9zaXplKGRpZ2VzdCk7CisgICAgaWYgKG1kbGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBITUFDX0NUWF9pbml0KCZoY3R4X3RwbCk7CisgICAgSE1BQ19DVFhfaW5pdCgmaGN0eCk7CisgICAgcCA9IG91dDsKKyAgICB0a2V5bGVuID0ga2V5bGVuOworICAgIGlmICghSE1BQ19Jbml0X2V4KCZoY3R4X3RwbCwgcGFzcywgcGFzc2xlbiwgZGlnZXN0LCBOVUxMKSkgeworICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB3aGlsZSh0a2V5bGVuKSB7CisgICAgICAgIGlmKHRrZXlsZW4gPiBtZGxlbikKKyAgICAgICAgICAgIGNwbGVuID0gbWRsZW47CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNwbGVuID0gdGtleWxlbjsKKyAgICAgICAgLyogV2UgYXJlIHVubGlrZWx5IHRvIGV2ZXIgdXNlIG1vcmUgdGhhbiAyNTYgYmxvY2tzICg1MTIwIGJpdHMhKQorICAgICAgICAgKiBidXQganVzdCBpbiBjYXNlLi4uCisgICAgICAgICAqLworICAgICAgICBpdG1wWzBdID0gKHVuc2lnbmVkIGNoYXIpKChpID4+IDI0KSAmIDB4ZmYpOworICAgICAgICBpdG1wWzFdID0gKHVuc2lnbmVkIGNoYXIpKChpID4+IDE2KSAmIDB4ZmYpOworICAgICAgICBpdG1wWzJdID0gKHVuc2lnbmVkIGNoYXIpKChpID4+IDgpICYgMHhmZik7CisgICAgICAgIGl0bXBbM10gPSAodW5zaWduZWQgY2hhcikoaSAmIDB4ZmYpOworICAgICAgICBpZiAoIUhNQUNfQ1RYX2NvcHkoJmhjdHgsICZoY3R4X3RwbCkpIHsKKyAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmICghSE1BQ19VcGRhdGUoJmhjdHgsIHNhbHQsIHNhbHRsZW4pCisgICAgICAgICAgICAgICAgfHwgIUhNQUNfVXBkYXRlKCZoY3R4LCBpdG1wLCA0KQorICAgICAgICAgICAgICAgIHx8ICFITUFDX0ZpbmFsKCZoY3R4LCBkaWd0bXAsIE5VTEwpKSB7CisgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHgpOworICAgICAgICBtZW1jcHkocCwgZGlndG1wLCBjcGxlbik7CisgICAgICAgIGZvciAoaiA9IDE7IGogPCBpdGVyOyBqKyspIHsKKyAgICAgICAgICAgIGlmICghSE1BQ19DVFhfY29weSgmaGN0eCwgJmhjdHhfdHBsKSkgeworICAgICAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghSE1BQ19VcGRhdGUoJmhjdHgsIGRpZ3RtcCwgbWRsZW4pCisgICAgICAgICAgICAgICAgICAgIHx8ICFITUFDX0ZpbmFsKCZoY3R4LCBkaWd0bXAsIE5VTEwpKSB7CisgICAgICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eCk7CisgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY3BsZW47IGsrKykgeworICAgICAgICAgICAgICAgIHBba10gXj0gZGlndG1wW2tdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRrZXlsZW4tPSBjcGxlbjsKKyAgICAgICAgaSsrOworICAgICAgICBwKz0gY3BsZW47CisgICAgfQorICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICByZXR1cm4gMTsKK30KKworLyogTENPVl9FWENMX1NUQVJUICovCitzdGF0aWMgUHlPYmplY3QgKgorX3NldEV4Y2VwdGlvbihQeU9iamVjdCAqZXhjKQoreworICAgIHVuc2lnbmVkIGxvbmcgZXJyY29kZTsKKyAgICBjb25zdCBjaGFyICpsaWIsICpmdW5jLCAqcmVhc29uOworCisgICAgZXJyY29kZSA9IEVSUl9wZWVrX2xhc3RfZXJyb3IoKTsKKyAgICBpZiAoIWVycmNvZGUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKGV4YywgInVua25vd24gcmVhc29ucyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisKKyAgICBsaWIgPSBFUlJfbGliX2Vycm9yX3N0cmluZyhlcnJjb2RlKTsKKyAgICBmdW5jID0gRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKGVycmNvZGUpOworICAgIHJlYXNvbiA9IEVSUl9yZWFzb25fZXJyb3Jfc3RyaW5nKGVycmNvZGUpOworCisgICAgaWYgKGxpYiAmJiBmdW5jKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChleGMsICJbJXM6ICVzXSAlcyIsIGxpYiwgZnVuYywgcmVhc29uKTsKKyAgICB9CisgICAgZWxzZSBpZiAobGliKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChleGMsICJbJXNdICVzIiwgbGliLCByZWFzb24pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKGV4YywgcmVhc29uKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisvKiBMQ09WX0VYQ0xfU1RPUCAqLworCitQeURvY19TVFJWQVIocGJrZGYyX2htYWNfX2RvY19fLAorInBia2RmMl9obWFjKGhhc2hfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGRrbGVuPU5vbmUpIC0+IGtleVxuXAorXG5cCitQYXNzd29yZCBiYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyIChQS0NTICM1IHYyLjApIHdpdGggSE1BQyBhc1xuXAorcHNldWRvcmFuZG9tIGZ1bmN0aW9uLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorcGJrZGYyX2htYWMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQoreworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiaGFzaF9uYW1lIiwgInBhc3N3b3JkIiwgInNhbHQiLCAiaXRlcmF0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJka2xlbiIsIE5VTEx9OworICAgIFB5T2JqZWN0ICprZXlfb2JqID0gTlVMTCwgKmRrbGVuX29iaiA9IFB5X05vbmU7CisgICAgY2hhciAqbmFtZSwgKmtleTsKKyAgICBQeV9idWZmZXIgcGFzc3dvcmQsIHNhbHQ7CisgICAgbG9uZyBpdGVyYXRpb25zLCBka2xlbjsKKyAgICBpbnQgcmV0dmFsOworICAgIGNvbnN0IEVWUF9NRCAqZGlnZXN0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAic3kqeSpsfE86cGJrZGYyX2htYWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm5hbWUsICZwYXNzd29yZCwgJnNhbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZXJhdGlvbnMsICZka2xlbl9vYmopKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGRpZ2VzdCA9IEVWUF9nZXRfZGlnZXN0YnluYW1lKG5hbWUpOworICAgIGlmIChkaWdlc3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVuc3VwcG9ydGVkIGhhc2ggdHlwZSIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAocGFzc3dvcmQubGVuID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwYXNzd29yZCBpcyB0b28gbG9uZy4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKHNhbHQubGVuID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzYWx0IGlzIHRvbyBsb25nLiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoaXRlcmF0aW9ucyA8IDEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZiAoaXRlcmF0aW9ucyA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uIHZhbHVlIGlzIHRvbyBncmVhdC4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKGRrbGVuX29iaiA9PSBQeV9Ob25lKSB7CisgICAgICAgIGRrbGVuID0gRVZQX01EX3NpemUoZGlnZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBka2xlbiA9IFB5TG9uZ19Bc0xvbmcoZGtsZW5fb2JqKTsKKyAgICAgICAgaWYgKChka2xlbiA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGRrbGVuIDwgMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJrZXkgbGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZiAoZGtsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIC8qIElOVF9NQVggaXMgYWx3YXlzIHNtYWxsZXIgdGhhbiBka0xlbiBtYXggKDJeMzIgLSAxKSAqIGhMZW4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAia2V5IGxlbmd0aCBpcyB0b28gZ3JlYXQuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGtleV9vYmogPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGRrbGVuKTsKKyAgICBpZiAoa2V5X29iaiA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBrZXkgPSBQeUJ5dGVzX0FTX1NUUklORyhrZXlfb2JqKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXR2YWwgPSBQS0NTNV9QQktERjJfSE1BQ19mYXN0KChjaGFyKilwYXNzd29yZC5idWYsIChpbnQpcGFzc3dvcmQubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilzYWx0LmJ1ZiwgKGludClzYWx0LmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbnMsIGRpZ2VzdCwgZGtsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKWtleSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0dmFsKSB7CisgICAgICAgIFB5X0NMRUFSKGtleV9vYmopOworICAgICAgICBfc2V0RXhjZXB0aW9uKFB5RXhjX1ZhbHVlRXJyb3IpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgZW5kOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc3N3b3JkKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzYWx0KTsKKyAgICByZXR1cm4ga2V5X29iajsKK30KKworI2VuZGlmCisKIC8qIFN0YXRlIGZvciBvdXIgY2FsbGJhY2sgZnVuY3Rpb24gc28gdGhhdCBpdCBjYW4gYWNjdW11bGF0ZSBhIHJlc3VsdC4gKi8KIHR5cGVkZWYgc3RydWN0IF9pbnRlcm5hbF9uYW1lX21hcHBlcl9zdGF0ZSB7CiAgICAgUHlPYmplY3QgKnNldDsKQEAgLTUxNyw5ICs3MTYsOSBAQAogICAgICAgICBzdGF0ZS0+ZXJyb3IgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChQeVNldF9BZGQoc3RhdGUtPnNldCwgcHlfbmFtZSkgIT0gMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHB5X25hbWUpOwogICAgICAgICAgICAgc3RhdGUtPmVycm9yID0gMTsKICAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocHlfbmFtZSk7CiAgICAgfQogfQogCkBAIC02MTAsNiArODA5LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgRVZQX2Z1bmN0aW9uc1tdID0gewogICAgIHsibmV3IiwgKFB5Q0Z1bmN0aW9uKUVWUF9uZXcsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBFVlBfbmV3X19kb2NfX30sCisjaWZkZWYgUFlfUEJLREYyX0hNQUMKKyAgICB7InBia2RmMl9obWFjIiwgKFB5Q0Z1bmN0aW9uKXBia2RmMl9obWFjLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgcGJrZGYyX2htYWNfX2RvY19ffSwKKyNlbmRpZgogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKG1kNSksCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYoc2hhMSksCiAjaWZkZWYgX09QRU5TU0xfU1VQUE9SVFNfU0hBMgpAQCAtNjQzLDYgKzg0Niw3IEBACiAgICAgUHlPYmplY3QgKm0sICpvcGVuc3NsX21kX21ldGhfbmFtZXM7CiAKICAgICBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cygpOworICAgIEVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKCk7CiAKICAgICAvKiBUT0RPIGJ1aWxkIEVWUF9mdW5jdGlvbnMgb3BlbnNzbF8qIGVudHJpZXMgZHluYW1pY2FsbHkgYmFzZWQKICAgICAgKiBvbiB3aGF0IGhhc2hlcyBhcmUgc3VwcG9ydGVkIHJhdGhlciB0aGFuIGxpc3RpbmcgbWFueQpAQCAtNjY3LDEwICs4NzEsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSNpZiBIQVNIX09CSl9DT05TVFJVQ1RPUgotICAgIFB5X0lOQ1JFRigmRVZQdHlwZSk7CisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZFVlB0eXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkhBU0giLCAoUHlPYmplY3QgKikmRVZQdHlwZSk7Ci0jZW5kaWYKIAogICAgIC8qIHRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCBieSB0aGUgY29udmVuaWVuY2UgY29uc3RydWN0b3JzICovCiAgICAgSU5JVF9DT05TVFJVQ1RPUl9DT05TVEFOVFMobWQ1KTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMgYi9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCmluZGV4IGYzNzdlOWMuLjk2YWZjZGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9faGVhcHFtb2R1bGUuYwpAQCAtMTY4LDcgKzE2OCwxMCBAQAogCiAgICAgbGFzdGVsdCA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBuLTEpIDsKICAgICBQeV9JTkNSRUYobGFzdGVsdCk7Ci0gICAgUHlMaXN0X1NldFNsaWNlKGhlYXAsIG4tMSwgbiwgTlVMTCk7CisgICAgaWYgKFB5TGlzdF9TZXRTbGljZShoZWFwLCBuLTEsIG4sIE5VTEwpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYobGFzdGVsdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBuLS07CiAKICAgICBpZiAoIW4pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuYyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCmluZGV4IDRhN2U3NTguLmJlMDQ2NGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCkBAIC0xMjYsOCArMTI2LDcgQEAKICInYicgICAgICAgYmluYXJ5IG1vZGVcbiIKICIndCcgICAgICAgdGV4dCBtb2RlIChkZWZhdWx0KVxuIgogIicrJyAgICAgICBvcGVuIGEgZGlzayBmaWxlIGZvciB1cGRhdGluZyAocmVhZGluZyBhbmQgd3JpdGluZylcbiIKLSInVScgICAgICAgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSAoZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OyB1bm5lZWRlZFxuIgotIiAgICAgICAgICBmb3IgbmV3IGNvZGUpXG4iCisiJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGRlcHJlY2F0ZWQpXG4iCiAiPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgogIlxuIgogIlRoZSBkZWZhdWx0IG1vZGUgaXMgJ3J0JyAob3BlbiBmb3IgcmVhZGluZyB0ZXh0KS4gRm9yIGJpbmFyeSByYW5kb21cbiIKQEAgLTE0Myw2ICsxNDIsMTAgQEAKICJyZXR1cm5lZCBhcyBzdHJpbmdzLCB0aGUgYnl0ZXMgaGF2aW5nIGJlZW4gZmlyc3QgZGVjb2RlZCB1c2luZyBhXG4iCiAicGxhdGZvcm0tZGVwZW5kZW50IGVuY29kaW5nIG9yIHVzaW5nIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgaWYgZ2l2ZW4uXG4iCiAiXG4iCisiJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaW4gZnV0dXJlIHZlcnNpb25zXG4iCisib2YgUHl0aG9uLiAgSXQgaGFzIG5vIGVmZmVjdCBpbiBQeXRob24gMy4gIFVzZSBuZXdsaW5lIHRvIGNvbnRyb2xcbiIKKyJ1bml2ZXJzYWwgbmV3bGluZXMgbW9kZS5cbiIKKyJcbiIKICJidWZmZXJpbmcgaXMgYW4gb3B0aW9uYWwgaW50ZWdlciB1c2VkIHRvIHNldCB0aGUgYnVmZmVyaW5nIHBvbGljeS5cbiIKICJQYXNzIDAgdG8gc3dpdGNoIGJ1ZmZlcmluZyBvZmYgKG9ubHkgYWxsb3dlZCBpbiBiaW5hcnkgbW9kZSksIDEgdG8gc2VsZWN0XG4iCiAibGluZSBidWZmZXJpbmcgKG9ubHkgdXNhYmxlIGluIHRleHQgbW9kZSksIGFuZCBhbiBpbnRlZ2VyID4gMSB0byBpbmRpY2F0ZVxuIgpAQCAtMzEwLDYgKzMxMyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHVzZSBVIGFuZCB3cml0aW5nIG1vZGUgYXQgb25jZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcmVhZGluZyA9IDE7CiAgICAgfQogCkBAIC01MzMsNiArNTM5LDQ1IEBACiB9CiAKIAorX1B5SU9fU3RhdGUgKgorX1B5SU9fZ2V0X21vZHVsZV9zdGF0ZSh2b2lkKQoreworICAgIFB5T2JqZWN0ICptb2QgPSBQeVN0YXRlX0ZpbmRNb2R1bGUoJl9QeUlPX01vZHVsZSk7CisgICAgX1B5SU9fU3RhdGUgKnN0YXRlOworICAgIGlmIChtb2QgPT0gTlVMTCB8fCAoc3RhdGUgPSBJT19NT0RfU1RBVEUobW9kKSkgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBmaW5kIGlvIG1vZHVsZSBzdGF0ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiKGludGVycHJldGVyIHNodXRkb3duPykiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBzdGF0ZTsKK30KKworUHlPYmplY3QgKgorX1B5SU9fZ2V0X2xvY2FsZV9tb2R1bGUoX1B5SU9fU3RhdGUgKnN0YXRlKQoreworICAgIFB5T2JqZWN0ICptb2Q7CisgICAgaWYgKHN0YXRlLT5sb2NhbGVfbW9kdWxlICE9IE5VTEwpIHsKKyAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihzdGF0ZS0+bG9jYWxlX21vZHVsZSkpOworICAgICAgICBtb2QgPSBQeVdlYWtyZWZfR0VUX09CSkVDVChzdGF0ZS0+bG9jYWxlX21vZHVsZSk7CisgICAgICAgIGlmIChtb2QgIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKG1vZCk7CisgICAgICAgICAgICByZXR1cm4gbW9kOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKHN0YXRlLT5sb2NhbGVfbW9kdWxlKTsKKyAgICB9CisgICAgbW9kID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJfYm9vdGxvY2FsZSIpOworICAgIGlmIChtb2QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RhdGUtPmxvY2FsZV9tb2R1bGUgPSBQeVdlYWtyZWZfTmV3UmVmKG1vZCwgTlVMTCk7CisgICAgaWYgKHN0YXRlLT5sb2NhbGVfbW9kdWxlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG1vZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gbW9kOworfQorCisKIHN0YXRpYyBpbnQKIGlvbW9kdWxlX3RyYXZlcnNlKFB5T2JqZWN0ICptb2QsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKSB7CiAgICAgX1B5SU9fU3RhdGUgKnN0YXRlID0gSU9fTU9EX1NUQVRFKG1vZCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuaCBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCmluZGV4IDBmZTkwYTMuLjg5Mjc4NjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCisrKyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCkBAIC03Nyw3ICs3Nyw3IEBACiAgICBsb25nIHdpdGggIiVsbGQiIGV2ZW4gd2hlbiBib3RoIGxvbmcgYW5kIGxvbmcgbG9uZyBoYXZlIHRoZSBzYW1lCiAgICBwcmVjaXNpb24uICovCiAKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogCiAvKiBXaW5kb3dzIHVzZXMgbG9uZyBsb25nIGZvciBvZmZzZXRzICovCiB0eXBlZGVmIFBZX0xPTkdfTE9ORyBQeV9vZmZfdDsKQEAgLTEzNSw3ICsxMzUsMTAgQEAKIH0gX1B5SU9fU3RhdGU7CiAKICNkZWZpbmUgSU9fTU9EX1NUQVRFKG1vZCkgKChfUHlJT19TdGF0ZSAqKVB5TW9kdWxlX0dldFN0YXRlKG1vZCkpCi0jZGVmaW5lIElPX1NUQVRFIElPX01PRF9TVEFURShQeVN0YXRlX0ZpbmRNb2R1bGUoJl9QeUlPX01vZHVsZSkpCisjZGVmaW5lIElPX1NUQVRFKCkgX1B5SU9fZ2V0X21vZHVsZV9zdGF0ZSgpCisKK2V4dGVybiBfUHlJT19TdGF0ZSAqX1B5SU9fZ2V0X21vZHVsZV9zdGF0ZSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fZ2V0X2xvY2FsZV9tb2R1bGUoX1B5SU9fU3RhdGUgKik7CiAKIGV4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2Nsb3NlOwogZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfY2xvc2VkOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jIGIvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCmluZGV4IGMyOGUyODkuLjc0OTQ2NDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYworKysgYi9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMKQEAgLTUyLDcgKzUyLDYgQEAKICAgICBQeV9idWZmZXIgYnVmOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIFB5T2JqZWN0ICpkYXRhOwotICAgIF9QeV9JREVOVElGSUVSKHJlYWQpOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ3KjpyZWFkaW50byIsICZidWYpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtOTIsNyArOTEsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ1ZmZlcmVkaW9iYXNlX3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKElPX1NUQVRFLT51bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX1NUQVRFKCk7CisgICAgaWYgKHN0YXRlICE9IE5VTEwpCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdGF0ZS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLCBtZXNzYWdlKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTkwLDcgKzE5MSw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWRpb2Jhc2VfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMjA5LDYgKzIxMSwxNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogCkBAIC0yMjAsNyArMjMyLDcgQEAKICAgICBpbnQgZGV0YWNoZWQ7CiAgICAgaW50IHJlYWRhYmxlOwogICAgIGludCB3cml0YWJsZTsKLSAgICBpbnQgZGVhbGxvY2F0aW5nOworICAgIGNoYXIgZmluYWxpemluZzsKIAogICAgIC8qIFRydWUgaWYgdGhpcyBpcyBhIHZhbmlsbGEgQnVmZmVyZWQgb2JqZWN0IChyYXRoZXIgdGhhbiBhIHVzZXIgZGVyaXZlZAogICAgICAgIGNsYXNzKSAqYW5kKiB0aGUgcmF3IHN0cmVhbSBpcyBhIHZhbmlsbGEgRmlsZUlPIG9iamVjdC4gKi8KQEAgLTM4NCw4ICszOTYsOCBAQAogc3RhdGljIHZvaWQKIGJ1ZmZlcmVkX2RlYWxsb2MoYnVmZmVyZWQgKnNlbGYpCiB7Ci0gICAgc2VsZi0+ZGVhbGxvY2F0aW5nID0gMTsKLSAgICBpZiAoc2VsZi0+b2sgJiYgX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCisgICAgc2VsZi0+ZmluYWxpemluZyA9IDE7CisgICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQogICAgICAgICByZXR1cm47CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgc2VsZi0+b2sgPSAwOwpAQCAtNDI4LDggKzQ0MCw2IEBACiBzdGF0aWMgaW50CiBidWZmZXJlZF9jbGVhcihidWZmZXJlZCAqc2VsZikKIHsKLSAgICBpZiAoc2VsZi0+b2sgJiYgX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKICAgICBzZWxmLT5vayA9IDA7CiAgICAgUHlfQ0xFQVIoc2VsZi0+cmF3KTsKICAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKQEAgLTUwOCw3ICs1MTgsNyBAQAogICAgICAgICBnb3RvIGVuZDsKICAgICB9CiAKLSAgICBpZiAoc2VsZi0+ZGVhbGxvY2F0aW5nKSB7CisgICAgaWYgKHNlbGYtPmZpbmFsaXppbmcpIHsKICAgICAgICAgUHlPYmplY3QgKnIgPSBidWZmZXJlZF9kZWFsbG9jX3dhcm4oc2VsZiwgKFB5T2JqZWN0ICopIHNlbGYpOwogICAgICAgICBpZiAocikKICAgICAgICAgICAgIFB5X0RFQ1JFRihyKTsKQEAgLTUyNyw2ICs1MzcsMTEgQEAKIAogICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX2Nsb3NlLCBOVUxMKTsKIAorICAgIGlmIChzZWxmLT5idWZmZXIpIHsKKyAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5idWZmZXIpOworICAgICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOworICAgIH0KKwogICAgIGlmIChleGMgIT0gTlVMTCkgewogICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0NMRUFSKHJlcyk7CkBAIC02NTgsNiArNjczLDExIEBACiBfc2V0X0Jsb2NraW5nSU9FcnJvcihjaGFyICptc2csIFB5X3NzaXplX3Qgd3JpdHRlbikKIHsKICAgICBQeU9iamVjdCAqZXJyOworI2lmZGVmIFB5X0RFQlVHCisgICAgLyogaW4gZGVidWcgbW9kZSwgUHlFdmFsX0V2YWxGcmFtZUV4KCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKyNlbmRpZgogICAgIGVyciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeUV4Y19CbG9ja2luZ0lPRXJyb3IsICJpc24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgbXNnLCB3cml0dGVuKTsKICAgICBpZiAoZXJyKQpAQCAtMTczOSw2ICsxNzU5LDcgQEAKIAogc3RhdGljIFB5TWVtYmVyRGVmIGJ1ZmZlcmVkcmVhZGVyX21lbWJlcnNbXSA9IHsKICAgICB7InJhdyIsIFRfT0JKRUNULCBvZmZzZXRvZihidWZmZXJlZCwgcmF3KSwgUkVBRE9OTFl9LAorICAgIHsiX2ZpbmFsaXppbmciLCBUX0JPT0wsIG9mZnNldG9mKGJ1ZmZlcmVkLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwogCkBAIC0xNzcxLDcgKzE3OTIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsIC8qdHBfZmxhZ3MqLwogICAgIGJ1ZmZlcmVkcmVhZGVyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLwpAQCAtMTc5MCw2ICsxODExLDE2IEBACiAgICAgKGluaXRwcm9jKWJ1ZmZlcmVkcmVhZGVyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogDAogCkBAIC0yMTIwLDYgKzIxNTEsNyBAQAogCiBzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWR3cml0ZXJfbWVtYmVyc1tdID0gewogICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoYnVmZmVyZWQsIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTIxNTIsNyArMjE4NCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWR3cml0ZXJfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCkBAIC0yMTcxLDYgKzIyMDMsMTYgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWR3cml0ZXJfaW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAMCiAKQEAgLTI0MTEsNyArMjQ1Myw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKiB0cF9mbGFncyAqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKiB0cF9mbGFncyAqLwogICAgIGJ1ZmZlcmVkcndwYWlyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkcndwYWlyX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkcndwYWlyX2NsZWFyLCAvKiB0cF9jbGVhciAqLwpAQCAtMjQzMCw2ICsyNDcyLDE2IEBACiAgICAgKGluaXRwcm9jKWJ1ZmZlcmVkcndwYWlyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogDAogCkBAIC0yNTE3LDYgKzI1NjksNyBAQAogCiBzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWRyYW5kb21fbWVtYmVyc1tdID0gewogICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoYnVmZmVyZWQsIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTI1NDksNyArMjYwMiw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWRyYW5kb21fZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCkBAIC0yNTY4LDQgKzI2MjEsMTQgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWRyYW5kb21faW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9maWxlaW8uYyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCmluZGV4IGYzY2U3NzYuLmNiYjJkYWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2ZpbGVpby5jCisrKyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCkBAIC01MiwxMyArNTIsMTUgQEAKICAgICB1bnNpZ25lZCBpbnQgYXBwZW5kaW5nIDogMTsKICAgICBzaWduZWQgaW50IHNlZWthYmxlIDogMjsgLyogLTEgbWVhbnMgdW5rbm93biAqLwogICAgIHVuc2lnbmVkIGludCBjbG9zZWZkIDogMTsKLSAgICB1bnNpZ25lZCBpbnQgZGVhbGxvY2F0aW5nOiAxOworICAgIGNoYXIgZmluYWxpemluZzsKICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiB9IGZpbGVpbzsKIAogUHlUeXBlT2JqZWN0IFB5RmlsZUlPX1R5cGU7CiAKK19QeV9JREVOVElGSUVSKG5hbWUpOworCiAjZGVmaW5lIFB5RmlsZUlPX0NoZWNrKG9wKSAoUHlPYmplY3RfVHlwZUNoZWNrKChvcCksICZQeUZpbGVJT19UeXBlKSkKIAogaW50CkBAIC0xMjksNyArMTMxLDcgQEAKICAgICAgICAgc2VsZi0+ZmQgPSAtMTsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQotICAgIGlmIChzZWxmLT5kZWFsbG9jYXRpbmcpIHsKKyAgICBpZiAoc2VsZi0+ZmluYWxpemluZykgewogICAgICAgICBQeU9iamVjdCAqciA9IGZpbGVpb19kZWFsbG9jX3dhcm4oc2VsZiwgKFB5T2JqZWN0ICopIHNlbGYpOwogICAgICAgICBpZiAocikKICAgICAgICAgICAgIFB5X0RFQ1JFRihyKTsKQEAgLTIwNCw2ICsyMDYsOSBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgT19DTE9FWEVDCitleHRlcm4gaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZW5kaWYKIAogc3RhdGljIGludAogZmlsZWlvX2luaXQoUHlPYmplY3QgKm9zZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCkBAIC0yMjMsNiArMjI4LDExIEBACiAgICAgaW50IGZkID0gLTE7CiAgICAgaW50IGNsb3NlZmQgPSAxOwogICAgIGludCBmZF9pc19vd24gPSAwOworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyNlbGlmICFkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKIAogICAgIGFzc2VydChQeUZpbGVJT19DaGVjayhvc2VsZikpOwogICAgIGlmIChzZWxmLT5mZCA+PSAwKSB7CkBAIC0zNDMsNiArMzUzLDEyIEBACiAgICAgZmxhZ3MgfD0gT19CSU5BUlk7CiAjZW5kaWYKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBmbGFncyB8PSBPX05PSU5IRVJJVDsKKyNlbGlmIGRlZmluZWQoT19DTE9FWEVDKQorICAgIGZsYWdzIHw9IE9fQ0xPRVhFQzsKKyNlbmRpZgorCiAgICAgaWYgKGZkID49IDApIHsKICAgICAgICAgaWYgKGNoZWNrX2ZkKGZkKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zNjYsMTAgKzM4MiwxOCBAQAogICAgICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICAgICAgc2VsZi0+ZmQgPSBvcGVuKG5hbWUsIGZsYWdzLCAwNjY2KTsKKwogICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpmZG9iaiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZXIsICJPaSIsIG5hbWVvYmosIGZsYWdzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmZG9iajsKKworI2lmbmRlZiBNU19XSU5ET1dTCisgICAgICAgICAgICAvKiB0aGUgb3BlbmVyIG1heSBjbGVhciB0aGUgYXRvbWljIGZsYWcgKi8KKyAgICAgICAgICAgIGF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorCisgICAgICAgICAgICBmZG9iaiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihvcGVuZXIsICJPaSIsIG5hbWVvYmosIGZsYWdzKTsKICAgICAgICAgICAgIGlmIChmZG9iaiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayhmZG9iaikpIHsKQEAgLTM4OCwxNCArNDEyLDE0IEBACiAKICAgICAgICAgZmRfaXNfb3duID0gMTsKICAgICAgICAgaWYgKHNlbGYtPmZkIDwgMCkgewotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgICAgIGlmICh3aWRlbmFtZSAhPSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19JT0Vycm9yLCBuYW1lb2JqKTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBuYW1lKTsKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBuYW1lb2JqKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KKworI2lmbmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNlbGYtPmZkLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyNlbmRpZgogICAgIH0KICAgICBpZiAoZGlyY2hlY2soc2VsZiwgbmFtZW9iaikgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtNDA1LDcgKzQyOSw3IEBACiAgICAgX3NldG1vZGUoc2VsZi0+ZmQsIE9fQklOQVJZKTsKICNlbmRpZgogCi0gICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoKFB5T2JqZWN0ICopc2VsZiwgIm5hbWUiLCBuYW1lb2JqKSA8IDApCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfbmFtZSwgbmFtZW9iaikgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKHNlbGYtPmFwcGVuZGluZykgewpAQCAtNDQ5LDcgKzQ3Myw3IEBACiBzdGF0aWMgdm9pZAogZmlsZWlvX2RlYWxsb2MoZmlsZWlvICpzZWxmKQogewotICAgIHNlbGYtPmRlYWxsb2NhdGluZyA9IDE7CisgICAgc2VsZi0+ZmluYWxpemluZyA9IDE7CiAgICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQogICAgICAgICByZXR1cm47CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CkBAIC00NjksOCArNDkzLDEwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZXJyX21vZGUoY2hhciAqYWN0aW9uKQogewotICAgIFB5RXJyX0Zvcm1hdChJT19TVEFURS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAiRmlsZSBub3Qgb3BlbiBmb3IgJXMiLCBhY3Rpb24pOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX1NUQVRFKCk7CisgICAgaWYgKHN0YXRlICE9IE5VTEwpCisgICAgICAgIFB5RXJyX0Zvcm1hdChzdGF0ZS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgIkZpbGUgbm90IG9wZW4gZm9yICVzIiwgYWN0aW9uKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNTM1LDcgKzU2MSw3IEBACiAgICAgICAgIGxlbiA9IHBidWYubGVuOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKICAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CiAgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwYnVmLmJ1ZiwgKGludClsZW4pOwpAQCAtNTU4LDMzICs1ODQsMjcgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOwogfQogCisjaWZuZGVmIEhBVkVfRlNUQVQKKworc3RhdGljIFB5T2JqZWN0ICoKK2ZpbGVpb19yZWFkYWxsKGZpbGVpbyAqc2VsZikKK3sKKyAgICBfUHlfSURFTlRJRklFUihyZWFkYWxsKTsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKSZQeVJhd0lPQmFzZV9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX3JlYWRhbGwsICJPIiwgc2VsZik7Cit9CisKKyNlbHNlCisKIHN0YXRpYyBzaXplX3QKLW5ld19idWZmZXJzaXplKGZpbGVpbyAqc2VsZiwgc2l6ZV90IGN1cnJlbnRzaXplCi0jaWZkZWYgSEFWRV9GU1RBVAotICAgICAgICAgICAgICAgLCBQeV9vZmZfdCBwb3MsIFB5X29mZl90IGVuZAotI2VuZGlmCi0gICAgICAgICAgICAgICApCituZXdfYnVmZmVyc2l6ZShmaWxlaW8gKnNlbGYsIHNpemVfdCBjdXJyZW50c2l6ZSkKIHsKICAgICBzaXplX3QgYWRkZW5kOwotI2lmZGVmIEhBVkVfRlNUQVQKLSAgICBpZiAoZW5kICE9IChQeV9vZmZfdCktMSkgewotICAgICAgICAvKiBGaWxlcyBjbGFpbWluZyBhIHNpemUgc21hbGxlciB0aGFuIFNNQUxMQ0hVTksgbWF5Ci0gICAgICAgICAgIGFjdHVhbGx5IGJlIHN0cmVhbWluZyBwc2V1ZG8tZmlsZXMuIEluIHRoaXMgY2FzZSwgd2UKLSAgICAgICAgICAgYXBwbHkgdGhlIG1vcmUgYWdncmVzc2l2ZSBhbGdvcml0aG0gYmVsb3cuCi0gICAgICAgICovCi0gICAgICAgIGlmIChlbmQgPj0gU01BTExDSFVOSyAmJiBlbmQgPj0gcG9zICYmIHBvcyA+PSAwKSB7Ci0gICAgICAgICAgICAvKiBBZGQgMSBzbyBpZiB0aGUgZmlsZSB3ZXJlIHRvIGdyb3cgd2UnZCBub3RpY2UuICovCi0gICAgICAgICAgICBQeV9vZmZfdCBidWZzaXplID0gY3VycmVudHNpemUgKyBlbmQgLSBwb3MgKyAxOwotICAgICAgICAgICAgaWYgKGJ1ZnNpemUgPCBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgICAgICAgICByZXR1cm4gKHNpemVfdClidWZzaXplOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBQWV9TU0laRV9UX01BWDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgorCiAgICAgLyogRXhwYW5kIHRoZSBidWZmZXIgYnkgYW4gYW1vdW50IHByb3BvcnRpb25hbCB0byB0aGUgY3VycmVudCBzaXplLAogICAgICAgIGdpdmluZyB1cyBhbW9ydGl6ZWQgbGluZWFyLXRpbWUgYmVoYXZpb3IuICBGb3IgYmlnZ2VyIHNpemVzLCB1c2UgYQogICAgICAgIGxlc3MtdGhhbi1kb3VibGUgZ3Jvd3RoIGZhY3RvciB0byBhdm9pZCBleGNlc3NpdmUgYWxsb2NhdGlvbi4gKi8KKyAgICBhc3NlcnQoY3VycmVudHNpemUgPD0gUFlfU1NJWkVfVF9NQVgpOwogICAgIGlmIChjdXJyZW50c2l6ZSA+IDY1NTM2KQogICAgICAgICBhZGRlbmQgPSBjdXJyZW50c2l6ZSA+PiAzOwogICAgIGVsc2UKQEAgLTU5OCwyNiArNjE4LDE5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZmlsZWlvX3JlYWRhbGwoZmlsZWlvICpzZWxmKQogewotI2lmZGVmIEhBVkVfRlNUQVQKICAgICBzdHJ1Y3Qgc3RhdCBzdDsKICAgICBQeV9vZmZfdCBwb3MsIGVuZDsKLSNlbmRpZgogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgUHlfc3NpemVfdCB0b3RhbCA9IDA7CisgICAgUHlfc3NpemVfdCBieXRlc19yZWFkID0gMDsKICAgICBQeV9zc2l6ZV90IG47Ci0gICAgc2l6ZV90IG5ld3NpemU7CisgICAgc2l6ZV90IGJ1ZnNpemU7CiAKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwogICAgIGlmICghX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKIAotICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgU01BTExDSFVOSyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotI2lmZGVmIEhBVkVfRlNUQVQKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIHBvcyA9IF9sc2Vla2k2NChzZWxmLT5mZCwgMEwsIFNFRUtfQ1VSKTsKICNlbHNlCiAgICAgcG9zID0gbHNlZWsoc2VsZi0+ZmQsIDBMLCBTRUVLX0NVUik7CkBAIC02MjYsNDQgKzYzOSw0NiBAQAogICAgICAgICBlbmQgPSBzdC5zdF9zaXplOwogICAgIGVsc2UKICAgICAgICAgZW5kID0gKFB5X29mZl90KS0xOwotI2VuZGlmCi0gICAgd2hpbGUgKDEpIHsKLSNpZmRlZiBIQVZFX0ZTVEFUCi0gICAgICAgIG5ld3NpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCB0b3RhbCwgcG9zLCBlbmQpOwotI2Vsc2UKLSAgICAgICAgbmV3c2l6ZSA9IG5ld19idWZmZXJzaXplKHNlbGYsIHRvdGFsKTsKLSNlbmRpZgotICAgICAgICBpZiAobmV3c2l6ZSA+IFBZX1NTSVpFX1RfTUFYIHx8IG5ld3NpemUgPD0gMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgInVuYm91bmRlZCByZWFkIHJldHVybmVkIG1vcmUgYnl0ZXMgIgotICAgICAgICAgICAgICAgICJ0aGFuIGEgUHl0aG9uIHN0cmluZyBjYW4gaG9sZCAiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIDwgKFB5X3NzaXplX3QpbmV3c2l6ZSkgewotICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCBuZXdzaXplKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAodG90YWwgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICBpZiAoZW5kID4gMCAmJiBlbmQgPj0gcG9zICYmIHBvcyA+PSAwICYmIGVuZCAtIHBvcyA8IFBZX1NTSVpFX1RfTUFYKSB7CisgICAgICAgIC8qIFRoaXMgaXMgcHJvYmFibHkgYSByZWFsIGZpbGUsIHNvIHdlIHRyeSB0byBhbGxvY2F0ZSBhCisgICAgICAgICAgIGJ1ZmZlciBvbmUgYnl0ZSBsYXJnZXIgdGhhbiB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gIElmIHRoZQorICAgICAgICAgICBjYWxjdWxhdGlvbiBpcyByaWdodCB0aGVuIHdlIHNob3VsZCBnZXQgRU9GIHdpdGhvdXQgaGF2aW5nCisgICAgICAgICAgIHRvIGVubGFyZ2UgdGhlIGJ1ZmZlci4gKi8KKyAgICAgICAgYnVmc2l6ZSA9IChzaXplX3QpKGVuZCAtIHBvcyArIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZnNpemUgPSBTTUFMTENIVU5LOworICAgIH0KKworICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmc2l6ZSk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChieXRlc19yZWFkID49IChQeV9zc2l6ZV90KWJ1ZnNpemUpIHsKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCBieXRlc19yZWFkKTsKKyAgICAgICAgICAgIGlmIChidWZzaXplID4gUFlfU1NJWkVfVF9NQVggfHwgYnVmc2l6ZSA8PSAwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmJvdW5kZWQgcmVhZCByZXR1cm5lZCBtb3JlIGJ5dGVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoYW4gYSBQeXRob24gc3RyaW5nIGNhbiBob2xkIik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPCAoUHlfc3NpemVfdClidWZzaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCBidWZzaXplKSA8IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICBuID0gbmV3c2l6ZSAtIHRvdGFsOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyAgICAgICAgbiA9IGJ1ZnNpemUgLSBieXRlc19yZWFkOworI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgaWYgKG4gPiBJTlRfTUFYKQogICAgICAgICAgICAgbiA9IElOVF9NQVg7Ci0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLAotICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgdG90YWwsCi0gICAgICAgICAgICAgICAgIChpbnQpbik7CisgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgYnl0ZXNfcmVhZCwgKGludCluKTsKICNlbHNlCi0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLAotICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgdG90YWwsCi0gICAgICAgICAgICAgICAgIG4pOworICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGJ5dGVzX3JlYWQsIG4pOwogI2VuZGlmCiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGlmIChuID09IDApCkBAIC02NzYsNyArNjkxLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodG90YWwgPiAwKQorICAgICAgICAgICAgaWYgKGJ5dGVzX3JlYWQgPiAwKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwpAQCAtNjg2LDIyICs3MDEsMTkgQEAKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHRvdGFsICs9IG47Ci0jaWZkZWYgSEFWRV9GU1RBVAorICAgICAgICBieXRlc19yZWFkICs9IG47CiAgICAgICAgIHBvcyArPSBuOwotI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSA+IHRvdGFsKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgdG90YWwpIDwgMCkgewotICAgICAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQganVzdCBpbiBjYXNlICovCi0gICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpID4gYnl0ZXNfcmVhZCkgeworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHQsIGJ5dGVzX3JlYWQpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKyNlbmRpZiAvKiBIQVZFX0ZTVEFUICovCisKIHN0YXRpYyBQeU9iamVjdCAqCiBmaWxlaW9fcmVhZChmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNzIyLDcgKzczNCw3IEBACiAgICAgICAgIHJldHVybiBmaWxlaW9fcmVhZGFsbChzZWxmKTsKICAgICB9CiAKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChzaXplID4gSU5UX01BWCkKICAgICAgICAgc2l6ZSA9IElOVF9NQVg7CiAjZW5kaWYKQEAgLTczNCw3ICs3NDYsNyBAQAogICAgIGlmIChfUHlWZXJpZnlfZmQoc2VsZi0+ZmQpKSB7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJybm8gPSAwOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwdHIsIChpbnQpc2l6ZSk7CiAjZWxzZQogICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcHRyLCBzaXplKTsKQEAgLTc1NSw3ICs3NjcsNyBAQAogCiAgICAgaWYgKG4gIT0gc2l6ZSkgewogICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZieXRlcywgbikgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOworICAgICAgICAgICAgUHlfQ0xFQVIoYnl0ZXMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC03ODIsNyArNzk0LDcgQEAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgIGxlbiA9IHBidWYubGVuOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIGlmIChsZW4gPiAzMjc2NyAmJiBpc2F0dHkoc2VsZi0+ZmQpKSB7CiAgICAgICAgICAgICAvKiBJc3N1ZSAjMTEzOTU6IHRoZSBXaW5kb3dzIGNvbnNvbGUgcmV0dXJucyBhbiBlcnJvciAoMTI6IG5vdAogICAgICAgICAgICAgICAgZW5vdWdoIHNwYWNlIGVycm9yKSBvbiB3cml0aW5nIGludG8gc3Rkb3V0IGlmIHN0ZG91dCBtb2RlIGlzCkBAIC04NTUsNyArODY3LDcgQEAKIAogICAgIGlmIChfUHlWZXJpZnlfZmQoZmQpKSB7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICByZXMgPSBfbHNlZWtpNjQoZmQsIHBvcywgd2hlbmNlKTsKICNlbHNlCiAgICAgICAgIHJlcyA9IGxzZWVrKGZkLCBwb3MsIHdoZW5jZSk7CkBAIC0xMDI4LDcgKzEwNDAsNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZpbGVpb19yZXByKGZpbGVpbyAqc2VsZikKIHsKLSAgICBfUHlfSURFTlRJRklFUihuYW1lKTsKICAgICBQeU9iamVjdCAqbmFtZW9iaiwgKnJlczsKIAogICAgIGlmIChzZWxmLT5mZCA8IDApCkBAIC0xMjA0LDYgKzEyMTUsMTEgQEAKICAgICB7TlVMTH0sCiB9OwogCitzdGF0aWMgUHlNZW1iZXJEZWYgZmlsZWlvX21lbWJlcnNbXSA9IHsKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihmaWxlaW8sIGZpbmFsaXppbmcpLCAwfSwKKyAgICB7TlVMTH0KK307CisKIFB5VHlwZU9iamVjdCBQeUZpbGVJT19UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgICJfaW8uRmlsZUlPIiwKQEAgLTEyMjUsNyArMTI0MSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICAgICAgICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgICAgIC8qIHRwX2ZsYWdzICovCiAgICAgZmlsZWlvX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWZpbGVpb190cmF2ZXJzZSwgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpZmlsZWlvX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMTIzNCw3ICsxMjUwLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgZmlsZWlvX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgZmlsZWlvX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgZmlsZWlvX2dldHNldGxpc3QsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KQEAgLTEyNDUsNCArMTI2MSwxMyBAQAogICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBmaWxlaW9fbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9pb2Jhc2UuYyBiL01vZHVsZXMvX2lvL2lvYmFzZS5jCmluZGV4IGUzODQ3M2EuLmUzNzI5OTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2lvYmFzZS5jCisrKyBiL01vZHVsZXMvX2lvL2lvYmFzZS5jCkBAIC0xLDkgKzEsOSBAQAogLyoKICAgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSS9PIGFic3RyYWN0IGJhc2UgY2xhc3NlcyBoaWVyYXJjaHkKICAgICBhcyBkZWZpbmVkIGJ5IFBFUCAzMTE2IC0gIk5ldyBJL08iCi0gICAgCisKICAgICBDbGFzc2VzIGRlZmluZWQgaGVyZTogSU9CYXNlLCBSYXdJT0Jhc2UuCi0gICAgCisKICAgICBXcml0dGVuIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjIGFuZCBBbnRvaW5lIFBpdHJvdQogKi8KIApAQCAtMTksNyArMTksNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIAorCiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogfSBpb2Jhc2U7CkBAIC02MywxMSArNjMsMTUgQEAKICNkZWZpbmUgSVNfQ0xPU0VEKHNlbGYpIFwKICAgICBfUHlPYmplY3RfSGFzQXR0cklkKHNlbGYsICZQeUlkX19fSU9CYXNlX2Nsb3NlZCkKIAorX1B5X0lERU5USUZJRVIocmVhZCk7CisKIC8qIEludGVybmFsIG1ldGhvZHMgKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBpb2Jhc2VfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoSU9fU1RBVEUtPnVuc3VwcG9ydGVkX29wZXJhdGlvbiwgbWVzc2FnZSk7CisgICAgX1B5SU9fU3RhdGUgKnN0YXRlID0gSU9fU1RBVEUoKTsKKyAgICBpZiAoc3RhdGUgIT0gTlVMTCkKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0YXRlLT51bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xODAsNDIgKzE4NCw0NCBAQAogaW9iYXNlX2Nsb3NlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKF9fSU9CYXNlX2Nsb3NlZCk7CiAKICAgICBpZiAoSVNfQ0xPU0VEKHNlbGYpKQogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKIAogICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYsIF9QeUlPX3N0cl9mbHVzaCwgTlVMTCk7Ci0gICAgX1B5T2JqZWN0X1NldEF0dHJJZChzZWxmLCAmUHlJZF9fX0lPQmFzZV9jbG9zZWQsIFB5X1RydWUpOwotICAgIGlmIChyZXMgPT0gTlVMTCkgeworCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoc2VsZiwgJlB5SWRfX19JT0Jhc2VfY2xvc2VkLCBQeV9UcnVlKSA8IDApIHsKKyAgICAgICAgUHlfWERFQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlfWERFQ1JFRihyZXMpOworCisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0RFQ1JFRihyZXMpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAvKiBGaW5hbGl6YXRpb24gYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBzdXBwb3J0ICovCiAKLWludAotX1B5SU9CYXNlX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQorc3RhdGljIHZvaWQKK2lvYmFzZV9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIFB5T2JqZWN0ICp0cCwgKnYsICp0YjsKLSAgICBpbnQgY2xvc2VkID0gMTsKLSAgICBpbnQgaXNfem9tYmllOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisgICAgaW50IGNsb3NlZDsKKyAgICBfUHlfSURFTlRJRklFUihfZmluYWxpemluZyk7CiAKLSAgICAvKiBJZiBfUHlJT0Jhc2VfZmluYWxpemUoKSBpcyBjYWxsZWQgZnJvbSBhIGRlc3RydWN0b3IsIHdlIG5lZWQgdG8KLSAgICAgICByZXN1cnJlY3QgdGhlIG9iamVjdCBhcyBjYWxsaW5nIGNsb3NlKCkgY2FuIGludm9rZSBhcmJpdHJhcnkgY29kZS4gKi8KLSAgICBpc196b21iaWUgPSAoUHlfUkVGQ05UKHNlbGYpID09IDApOwotICAgIGlmIChpc196b21iaWUpIHsKLSAgICAgICAgKytQeV9SRUZDTlQoc2VsZik7Ci0gICAgfQotICAgIFB5RXJyX0ZldGNoKCZ0cCwgJnYsICZ0Yik7CisgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKwogICAgIC8qIElmIGBjbG9zZWRgIGRvZXNuJ3QgZXhpc3Qgb3IgY2FuJ3QgYmUgZXZhbHVhdGVkIGFzIGJvb2wsIHRoZW4gdGhlCiAgICAgICAgb2JqZWN0IGlzIHByb2JhYmx5IGluIGFuIHVudXNhYmxlIHN0YXRlLCBzbyBpZ25vcmUuICovCiAgICAgcmVzID0gUHlPYmplY3RfR2V0QXR0cihzZWxmLCBfUHlJT19zdHJfY2xvc2VkKTsKLSAgICBpZiAocmVzID09IE5VTEwpCisgICAgaWYgKHJlcyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGNsb3NlZCA9IC0xOworICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgY2xvc2VkID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwpAQCAtMjIzLDYgKzIyOSwxMCBAQAogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9CiAgICAgaWYgKGNsb3NlZCA9PSAwKSB7CisgICAgICAgIC8qIFNpZ25hbCBjbG9zZSgpIHRoYXQgaXQgd2FzIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBvYmplY3QKKyAgICAgICAgICAgZmluYWxpemF0aW9uIHByb2Nlc3MuICovCisgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHNlbGYsICZQeUlkX19maW5hbGl6aW5nLCBQeV9UcnVlKSkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKChQeU9iamVjdCAqKSBzZWxmLCBfUHlJT19zdHJfY2xvc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgLyogU2lsZW5jaW5nIEkvTyBlcnJvcnMgaXMgYmFkLCBidXQgcHJpbnRpbmcgc3B1cmlvdXMgdHJhY2ViYWNrcyBpcwpAQCAtMjMzLDMxICsyNDMsMjUgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgfQotICAgIFB5RXJyX1Jlc3RvcmUodHAsIHYsIHRiKTsKLSAgICBpZiAoaXNfem9tYmllKSB7Ci0gICAgICAgIGlmICgtLVB5X1JFRkNOVChzZWxmKSAhPSAwKSB7Ci0gICAgICAgICAgICAvKiBUaGUgb2JqZWN0IGxpdmVzIGFnYWluLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdGFrZW4gZnJvbQotICAgICAgICAgICAgICAgc2xvdF90cF9kZWwgaW4gdHlwZW9iamVjdC5jLiAqLwotICAgICAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBQeV9SRUZDTlQoc2VsZik7Ci0gICAgICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOwotICAgICAgICAgICAgUHlfUkVGQ05UKHNlbGYpID0gcmVmY250OwotICAgICAgICAgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCi0gICAgICAgICAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KLSAgICAgICAgICAgIF9QeV9ERUNfUkVGVE9UQUw7Ci0gICAgICAgICAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAotICAgICAgICAgICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCi0gICAgICAgICAgICAgKiBJZiBDT1VOVF9BTExPQ1MsIHRoZSBvcmlnaW5hbCBkZWNyZWYgYnVtcGVkIHRwX2ZyZWVzLCBhbmQKLSAgICAgICAgICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQotICAgICAgICAgICAgICogdW5kb25lLgotICAgICAgICAgICAgICovCi0jaWZkZWYgQ09VTlRfQUxMT0NTCi0gICAgICAgICAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOwotICAgICAgICAgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorCisgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Cit9CisKK2ludAorX1B5SU9CYXNlX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGludCBpc196b21iaWU7CisKKyAgICAvKiBJZiBfUHlJT0Jhc2VfZmluYWxpemUoKSBpcyBjYWxsZWQgZnJvbSBhIGRlc3RydWN0b3IsIHdlIG5lZWQgdG8KKyAgICAgICByZXN1cnJlY3QgdGhlIG9iamVjdCBhcyBjYWxsaW5nIGNsb3NlKCkgY2FuIGludm9rZSBhcmJpdHJhcnkgY29kZS4gKi8KKyAgICBpc196b21iaWUgPSAoUHlfUkVGQ05UKHNlbGYpID09IDApOworICAgIGlmIChpc196b21iaWUpCisgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2Moc2VsZik7CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXIoc2VsZik7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtMjcwLDggKzI3NCw2IEBACiBzdGF0aWMgaW50CiBpb2Jhc2VfY2xlYXIoaW9iYXNlICpzZWxmKQogewotICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwogICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOwogICAgIHJldHVybiAwOwogfQpAQCAtNDU1LDcgKzQ1Nyw2IEBACiAgICAgaW50IGhhc19wZWVrID0gMDsKICAgICBQeU9iamVjdCAqYnVmZmVyLCAqcmVzdWx0OwogICAgIFB5X3NzaXplX3Qgb2xkX3NpemUgPSAtMTsKLSAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKICAgICBfUHlfSURFTlRJRklFUihwZWVrKTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWRsaW5lIiwgJl9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmbGltaXQpKSB7CkBAIC01MzYsNyArNTM3LDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICBvbGRfc2l6ZSA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKGJ1ZmZlcik7Ci0gICAgICAgIFB5Qnl0ZUFycmF5X1Jlc2l6ZShidWZmZXIsIG9sZF9zaXplICsgUHlCeXRlc19HRVRfU0laRShiKSk7CisgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoYnVmZmVyLCBvbGRfc2l6ZSArIFB5Qnl0ZXNfR0VUX1NJWkUoYikpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CiAgICAgICAgIG1lbWNweShQeUJ5dGVBcnJheV9BU19TVFJJTkcoYnVmZmVyKSArIG9sZF9zaXplLAogICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYiksIFB5Qnl0ZXNfR0VUX1NJWkUoYikpOwogCkBAIC03NDEsNyArNzQ1LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKnRwX2ZsYWdzKi8KICAgICBpb2Jhc2VfZG9jLCAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylpb2Jhc2VfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpaW9iYXNlX2NsZWFyLCAgICAgIC8qIHRwX2NsZWFyICovCkBAIC03NjAsNiArNzY0LDE2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgKGRlc3RydWN0b3IpaW9iYXNlX2ZpbmFsaXplLCAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogCkBAIC04MzEsMTIgKzg0NSwxMSBAQAogICAgIGludCByOwogICAgIFB5T2JqZWN0ICpjaHVua3MgPSBQeUxpc3RfTmV3KDApOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgCisKICAgICBpZiAoY2h1bmtzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIocmVhZCk7CiAgICAgICAgIFB5T2JqZWN0ICpkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImkiLCBERUZBVUxUX0JVRkZFUl9TSVpFKTsKICAgICAgICAgaWYgKCFkYXRhKSB7CkBAIC05MDUsNyArOTE4LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAvKnRwX2ZsYWdzKi8KICAgICByYXdpb2Jhc2VfZG9jLCAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC05MjQsNCArOTM3LDE0IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vdGV4dGlvLmMgYi9Nb2R1bGVzL19pby90ZXh0aW8uYwppbmRleCA2MDNlZTYwLi41NzM5YmM0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby90ZXh0aW8uYworKysgYi9Nb2R1bGVzL19pby90ZXh0aW8uYwpAQCAtNDUsNyArNDUsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIF91bnN1cHBvcnRlZChjb25zdCBjaGFyICptZXNzYWdlKQogewotICAgIFB5RXJyX1NldFN0cmluZyhJT19TVEFURS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLCBtZXNzYWdlKTsKKyAgICBfUHlJT19TdGF0ZSAqc3RhdGUgPSBJT19TVEFURSgpOworICAgIGlmIChzdGF0ZSAhPSBOVUxMKQorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3RhdGUtPnVuc3VwcG9ydGVkX29wZXJhdGlvbiwgbWVzc2FnZSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE3Myw3ICsxNzUsOCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgIC8qdHBfZmxhZ3MqLwogICAgIHRleHRpb2Jhc2VfZG9jLCAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTE5Miw2ICsxOTUsMTYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAKIApAQCAtNjkxLDcgKzcwNCw3IEBACiAgICAgY2hhciBzZWVrYWJsZTsKICAgICBjaGFyIGhhc19yZWFkMTsKICAgICBjaGFyIHRlbGxpbmc7Ci0gICAgY2hhciBkZWFsbG9jYXRpbmc7CisgICAgY2hhciBmaW5hbGl6aW5nOwogICAgIC8qIFNwZWNpYWxpemVkIGVuY29kaW5nIGZ1bmMgKHNlZSBiZWxvdykgKi8KICAgICBlbmNvZGVmdW5jX3QgZW5jb2RlZnVuYzsKICAgICAvKiBXaGV0aGVyIG9yIG5vdCBpdCdzIHRoZSBzdGFydCBvZiB0aGUgc3RyZWFtICovCkBAIC03NTgsNyArNzcxLDcgQEAKIHsKICAgICBpZiAoIXNlbGYtPmVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbSkgewogICAgICAgICAvKiBTa2lwIHRoZSBCT00gYW5kIHVzZSBuYXRpdmUgYnl0ZSBvcmRlcmluZyAqLwotI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKQorI2lmIFBZX0JJR19FTkRJQU4KICAgICAgICAgcmV0dXJuIHV0ZjE2YmVfZW5jb2RlKHNlbGYsIHRleHQpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIHV0ZjE2bGVfZW5jb2RlKHNlbGYsIHRleHQpOwpAQCAtNzg3LDcgKzgwMCw3IEBACiB7CiAgICAgaWYgKCFzZWxmLT5lbmNvZGluZ19zdGFydF9vZl9zdHJlYW0pIHsKICAgICAgICAgLyogU2tpcCB0aGUgQk9NIGFuZCB1c2UgbmF0aXZlIGJ5dGUgb3JkZXJpbmcgKi8KLSNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKKyNpZiBQWV9CSUdfRU5ESUFOCiAgICAgICAgIHJldHVybiB1dGYzMmJlX2VuY29kZShzZWxmLCB0ZXh0KTsKICNlbHNlCiAgICAgICAgIHJldHVybiB1dGYzMmxlX2VuY29kZShzZWxmLCB0ZXh0KTsKQEAgLTgzNiwxMiArODQ5LDEyIEBACiAgICAgY2hhciAqa3dsaXN0W10gPSB7ImJ1ZmZlciIsICJlbmNvZGluZyIsICJlcnJvcnMiLAogICAgICAgICAgICAgICAgICAgICAgICJuZXdsaW5lIiwgImxpbmVfYnVmZmVyaW5nIiwgIndyaXRlX3Rocm91Z2giLAogICAgICAgICAgICAgICAgICAgICAgIE5VTEx9OwotICAgIFB5T2JqZWN0ICpidWZmZXIsICpyYXc7CisgICAgUHlPYmplY3QgKmJ1ZmZlciwgKnJhdywgKmNvZGVjX2luZm8gPSBOVUxMOwogICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKICAgICBjaGFyICplcnJvcnMgPSBOVUxMOwogICAgIGNoYXIgKm5ld2xpbmUgPSBOVUxMOwogICAgIGludCBsaW5lX2J1ZmZlcmluZyA9IDAsIHdyaXRlX3Rocm91Z2ggPSAwOwotICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX1NUQVRFOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IE5VTEw7CiAKICAgICBQeU9iamVjdCAqcmVzOwogICAgIGludCByOwpAQCAtODgwLDYgKzg5Myw5IEBACiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKICAgICAgICAgLyogVHJ5IG9zLmRldmljZV9lbmNvZGluZyhmaWxlbm8pICovCiAgICAgICAgIFB5T2JqZWN0ICpmaWxlbm87CisgICAgICAgIHN0YXRlID0gSU9fU1RBVEUoKTsKKyAgICAgICAgaWYgKHN0YXRlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBmaWxlbm8gPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGJ1ZmZlciwgJlB5SWRfZmlsZW5vLCBOVUxMKTsKICAgICAgICAgLyogSWdub3JlIG9ubHkgQXR0cmlidXRlRXJyb3IgYW5kIFVuc3VwcG9ydGVkT3BlcmF0aW9uICovCiAgICAgICAgIGlmIChmaWxlbm8gPT0gTlVMTCkgewpAQCAtOTA2LDM1ICs5MjIsMjkgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCAmJiBzZWxmLT5lbmNvZGluZyA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzdGF0ZS0+bG9jYWxlX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgibG9jYWxlIik7Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmxvY2FsZV9tb2R1bGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGNhdGNoX0ltcG9ydEVycm9yOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdvdG8gdXNlX2xvY2FsZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICB1c2VfbG9jYWxlOgotICAgICAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgICAgIHN0YXRlLT5sb2NhbGVfbW9kdWxlLCAmUHlJZF9nZXRwcmVmZXJyZWRlbmNvZGluZywgIk8iLCBQeV9GYWxzZSk7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCkgewotICAgICAgICAgICAgICBjYXRjaF9JbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICBJbXBvcnRpbmcgbG9jYWxlIGNhbiByYWlzZSBhIEltcG9ydEVycm9yIGJlY2F1c2Ugb2YKLSAgICAgICAgICAgICAgICAgX2Z1bmN0b29scywgYW5kIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyBjYW4gcmFpc2UgYQotICAgICAgICAgICAgICAgICBJbXBvcnRFcnJvciBpZiBfbG9jYWxlIGlzIG5vdCBhdmFpbGFibGUuICBUaGVzZSB3aWxsIGhhcHBlbgotICAgICAgICAgICAgICAgICBkdXJpbmcgbW9kdWxlIGJ1aWxkaW5nLgotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfSW1wb3J0RXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzY2lpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlPYmplY3QgKmxvY2FsZV9tb2R1bGUgPSBfUHlJT19nZXRfbG9jYWxlX21vZHVsZShzdGF0ZSk7CisgICAgICAgIGlmIChsb2NhbGVfbW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGNhdGNoX0ltcG9ydEVycm9yOworICAgICAgICBzZWxmLT5lbmNvZGluZyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCisgICAgICAgICAgICBsb2NhbGVfbW9kdWxlLCAmUHlJZF9nZXRwcmVmZXJyZWRlbmNvZGluZywgIk8iLCBQeV9GYWxzZSk7CisgICAgICAgIFB5X0RFQ1JFRihsb2NhbGVfbW9kdWxlKTsKKyAgICAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICBjYXRjaF9JbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgSW1wb3J0aW5nIGxvY2FsZSBjYW4gcmFpc2UgYSBJbXBvcnRFcnJvciBiZWNhdXNlIG9mCisgICAgICAgICAgICAgX2Z1bmN0b29scywgYW5kIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyBjYW4gcmFpc2UgYQorICAgICAgICAgICAgIEltcG9ydEVycm9yIGlmIF9sb2NhbGUgaXMgbm90IGF2YWlsYWJsZS4gIFRoZXNlIHdpbGwgaGFwcGVuCisgICAgICAgICAgICAgZHVyaW5nIG1vZHVsZSBidWlsZGluZy4KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19JbXBvcnRFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzY2lpIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYtPmVuY29kaW5nKSkKLSAgICAgICAgICAgICAgICBQeV9DTEVBUihzZWxmLT5lbmNvZGluZyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYtPmVuY29kaW5nKSkKKyAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kaW5nKTsKICAgICB9CiAgICAgaWYgKHNlbGYtPmVuY29kaW5nICE9IE5VTEwpIHsKICAgICAgICAgZW5jb2RpbmcgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHNlbGYtPmVuY29kaW5nKTsKQEAgLTk1MSw2ICs5NjEsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZGV0ZXJtaW5lIGRlZmF1bHQgZW5jb2RpbmciKTsKICAgICB9CiAKKyAgICAvKiBDaGVjayB3ZSBoYXZlIGJlZW4gYXNrZWQgZm9yIGEgcmVhbCB0ZXh0IGVuY29kaW5nICovCisgICAgY29kZWNfaW5mbyA9IF9QeUNvZGVjX0xvb2t1cFRleHRFbmNvZGluZyhlbmNvZGluZywgImNvZGVjcy5vcGVuKCkiKTsKKyAgICBpZiAoY29kZWNfaW5mbyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kaW5nKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICAvKiBYWFg6IEZhaWx1cmVzIGJleW9uZCB0aGlzIHBvaW50IGhhdmUgdGhlIHBvdGVudGlhbCB0byBsZWFrIGVsZW1lbnRzCisgICAgICogb2YgdGhlIHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBvYmplY3QgKGxpa2Ugc2VsZi0+ZW5jb2RpbmcpCisgICAgICovCisKICAgICBpZiAoZXJyb3JzID09IE5VTEwpCiAgICAgICAgIGVycm9ycyA9ICJzdHJpY3QiOwogICAgIHNlbGYtPmVycm9ycyA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhlcnJvcnMpOwpAQCAtOTY1LDcgKzk4Niw3IEBACiAgICAgaWYgKG5ld2xpbmUpIHsKICAgICAgICAgc2VsZi0+cmVhZG5sID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobmV3bGluZSk7CiAgICAgICAgIGlmIChzZWxmLT5yZWFkbmwgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIHNlbGYtPndyaXRldHJhbnNsYXRlID0gKG5ld2xpbmUgPT0gTlVMTCB8fCBuZXdsaW5lWzBdICE9ICdcMCcpOwogICAgIGlmICghc2VsZi0+cmVhZHVuaXZlcnNhbCAmJiBzZWxmLT5yZWFkbmwpIHsKQEAgLTk4OSw4ICsxMDEwLDggQEAKICAgICBpZiAociA9PSAtMSkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAociA9PSAxKSB7Ci0gICAgICAgIHNlbGYtPmRlY29kZXIgPSBQeUNvZGVjX0luY3JlbWVudGFsRGVjb2RlcigKLSAgICAgICAgICAgIGVuY29kaW5nLCBlcnJvcnMpOworICAgICAgICBzZWxmLT5kZWNvZGVyID0gX1B5Q29kZWNJbmZvX0dldEluY3JlbWVudGFsRGVjb2Rlcihjb2RlY19pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMpOwogICAgICAgICBpZiAoc2VsZi0+ZGVjb2RlciA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtMTAxNCwxNyArMTAzNSwxMiBAQAogICAgIGlmIChyID09IC0xKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmIChyID09IDEpIHsKLSAgICAgICAgUHlPYmplY3QgKmNpOwotICAgICAgICBzZWxmLT5lbmNvZGVyID0gUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIoCi0gICAgICAgICAgICBlbmNvZGluZywgZXJyb3JzKTsKKyAgICAgICAgc2VsZi0+ZW5jb2RlciA9IF9QeUNvZGVjSW5mb19HZXRJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzKTsKICAgICAgICAgaWYgKHNlbGYtPmVuY29kZXIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIC8qIEdldCB0aGUgbm9ybWFsaXplZCBuYW1lZCBvZiB0aGUgY29kZWMgKi8KLSAgICAgICAgY2kgPSBfUHlDb2RlY19Mb29rdXAoZW5jb2RpbmcpOwotICAgICAgICBpZiAoY2kgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIHJlcyA9IF9QeU9iamVjdF9HZXRBdHRySWQoY2ksICZQeUlkX25hbWUpOwotICAgICAgICBQeV9ERUNSRUYoY2kpOworICAgICAgICByZXMgPSBfUHlPYmplY3RfR2V0QXR0cklkKGNvZGVjX2luZm8sICZQeUlkX25hbWUpOwogICAgICAgICBpZiAocmVzID09IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMTA0NCw2ICsxMDYwLDkgQEAKICAgICAgICAgUHlfWERFQ1JFRihyZXMpOwogICAgIH0KIAorICAgIC8qIEZpbmlzaGVkIHNvcnRpbmcgb3V0IHRoZSBjb2RlYyBkZXRhaWxzICovCisgICAgUHlfREVDUkVGKGNvZGVjX2luZm8pOworCiAgICAgc2VsZi0+YnVmZmVyID0gYnVmZmVyOwogICAgIFB5X0lOQ1JFRihidWZmZXIpOwogCkBAIC0xMTA2LDE0ICsxMTI1LDEzIEBACiAgICAgcmV0dXJuIDA7CiAKICAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihjb2RlY19pbmZvKTsKICAgICByZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQKIF90ZXh0aW93cmFwcGVyX2NsZWFyKHRleHRpbyAqc2VsZikKIHsKLSAgICBpZiAoc2VsZi0+b2sgJiYgX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKICAgICBzZWxmLT5vayA9IDA7CiAgICAgUHlfQ0xFQVIoc2VsZi0+YnVmZmVyKTsKICAgICBQeV9DTEVBUihzZWxmLT5lbmNvZGluZyk7CkBAIC0xMTMxLDkgKzExNDksMTAgQEAKIHN0YXRpYyB2b2lkCiB0ZXh0aW93cmFwcGVyX2RlYWxsb2ModGV4dGlvICpzZWxmKQogewotICAgIHNlbGYtPmRlYWxsb2NhdGluZyA9IDE7Ci0gICAgaWYgKF90ZXh0aW93cmFwcGVyX2NsZWFyKHNlbGYpIDwgMCkKKyAgICBzZWxmLT5maW5hbGl6aW5nID0gMTsKKyAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCiAgICAgICAgIHJldHVybjsKKyAgICBfdGV4dGlvd3JhcHBlcl9jbGVhcihzZWxmKTsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBpZiAoc2VsZi0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKICAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKilzZWxmKTsKQEAgLTE5MzcsMTAgKzE5NTYsNyBAQAogCiAjZGVmaW5lIENPT0tJRV9CVUZfTEVOICAgICAgKHNpemVvZihQeV9vZmZfdCkgKyAzICogc2l6ZW9mKGludCkgKyBzaXplb2YoY2hhcikpCiAKLSNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKLQotIyBkZWZpbmUgSVNfTElUVExFX0VORElBTiAgIDAKLQorI2lmIFBZX0JJR19FTkRJQU4KIC8qIFdlIHdhbnQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2Ygc3RhcnRfcG9zIHRvIGFsc28gYmUgdGhlIGxlYXN0CiAgICBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBjb29raWUsIHdoaWNoIG1lYW5zIHRoYXQgaW4gYmlnLWVuZGlhbiBtb2RlIHdlCiAgICBtdXN0IGNvcHkgdGhlIGZpZWxkcyBpbiByZXZlcnNlIG9yZGVyLiAqLwpAQCAtMTk1Miw5ICsxOTY4LDYgQEAKICMgZGVmaW5lIE9GRl9ORUVEX0VPRiAgICAgICAwCiAKICNlbHNlCi0KLSMgZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gICAxCi0KIC8qIExpdHRsZS1lbmRpYW4gbW9kZTogdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2Ygc3RhcnRfcG9zIHdpbGwKICAgIG5hdHVyYWxseSBlbmQgdXAgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgdGhlIGNvb2tpZS4gKi8KIApAQCAtMTk3NSw3ICsxOTg4LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKF9QeUxvbmdfQXNCeXRlQXJyYXkoY29va2llTG9uZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19MSVRUTEVfRU5ESUFOLCAwKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9MSVRUTEVfRU5ESUFOLCAwKSA8IDApIHsKICAgICAgICAgUHlfREVDUkVGKGNvb2tpZUxvbmcpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMjAwMSw5ICsyMDE0LDkgQEAKICAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX0NIQVJTX1RPX1NLSVAsICZjb29raWUtPmNoYXJzX3RvX3NraXAsIHNpemVvZihjb29raWUtPmNoYXJzX3RvX3NraXApKTsKICAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX05FRURfRU9GLCAmY29va2llLT5uZWVkX2VvZiwgc2l6ZW9mKGNvb2tpZS0+bmVlZF9lb2YpKTsKIAotICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgSVNfTElUVExFX0VORElBTiwgMCk7CisgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShidWZmZXIsIHNpemVvZihidWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfTElUVExFX0VORElBTiwgMCk7CiB9Ci0jdW5kZWYgSVNfTElUVExFX0VORElBTgogCiBzdGF0aWMgaW50CiBfdGV4dGlvd3JhcHBlcl9kZWNvZGVyX3NldHN0YXRlKHRleHRpbyAqc2VsZiwgY29va2llX3R5cGUgKmNvb2tpZSkKQEAgLTIzNTMsNyArMjM2Niw3IEBACiAKICAgICAvKiBOb3RlIG91ciBpbml0aWFsIHN0YXJ0IHBvaW50LiAqLwogICAgIGNvb2tpZS5zdGFydF9wb3MgKz0gc2tpcF9ieXRlczsKLSAgICBjb29raWUuY2hhcnNfdG9fc2tpcCA9IGNoYXJzX3RvX3NraXA7CisgICAgY29va2llLmNoYXJzX3RvX3NraXAgPSBQeV9TQUZFX0RPV05DQVNUKGNoYXJzX3RvX3NraXAsIFB5X3NzaXplX3QsIGludCk7CiAgICAgaWYgKGNoYXJzX3RvX3NraXAgPT0gMCkKICAgICAgICAgZ290byBmaW5hbGx5OwogCkBAIC0yNTc5LDcgKzI1OTIsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEwsICp2YWwsICp0YjsKLSAgICAgICAgaWYgKHNlbGYtPmRlYWxsb2NhdGluZykgeworICAgICAgICBpZiAoc2VsZi0+ZmluYWxpemluZykgewogICAgICAgICAgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5idWZmZXIsICZQeUlkX19kZWFsbG9jX3dhcm4sICJPIiwgc2VsZik7CiAgICAgICAgICAgICBpZiAocmVzKQogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwpAQCAtMjc0MCw2ICsyNzUzLDcgQEAKICAgICB7ImVuY29kaW5nIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHRleHRpbywgZW5jb2RpbmcpLCBSRUFET05MWX0sCiAgICAgeyJidWZmZXIiLCBUX09CSkVDVCwgb2Zmc2V0b2YodGV4dGlvLCBidWZmZXIpLCBSRUFET05MWX0sCiAgICAgeyJsaW5lX2J1ZmZlcmluZyIsIFRfQk9PTCwgb2Zmc2V0b2YodGV4dGlvLCBsaW5lX2J1ZmZlcmluZyksIFJFQURPTkxZfSwKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZih0ZXh0aW8sIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTI3NzYsNyArMjc5MCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgLyp0cF9mbGFncyovCiAgICAgdGV4dGlvd3JhcHBlcl9kb2MsICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpdGV4dGlvd3JhcHBlcl90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSl0ZXh0aW93cmFwcGVyX2NsZWFyLCAvKiB0cF9jbGVhciAqLwpAQCAtMjc5NSw0ICsyODA5LDE0IEBACiAgICAgKGluaXRwcm9jKXRleHRpb3dyYXBwZXJfaW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19qc29uLmMgYi9Nb2R1bGVzL19qc29uLmMKaW5kZXggOTE2NjY4MC4uMTI1MTAxZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fanNvbi5jCisrKyBiL01vZHVsZXMvX2pzb24uYwpAQCAtMiwyMCArMiw2IEBACiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiYWNjdS5oIgogCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDYwMDAwICYmICFkZWZpbmVkKFB5X1RZUEUpCi0jZGVmaW5lIFB5X1RZUEUob2IpICAgICAoKChQeU9iamVjdCopKG9iKSktPm9iX3R5cGUpCi0jZW5kaWYKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDAgJiYgIWRlZmluZWQoUFlfU1NJWkVfVF9NSU4pCi10eXBlZGVmIGludCBQeV9zc2l6ZV90OwotI2RlZmluZSBQWV9TU0laRV9UX01BWCBJTlRfTUFYCi0jZGVmaW5lIFBZX1NTSVpFX1RfTUlOIElOVF9NSU4KLSNkZWZpbmUgUHlJbnRfRnJvbVNzaXplX3QgUHlJbnRfRnJvbUxvbmcKLSNkZWZpbmUgUHlJbnRfQXNTc2l6ZV90IFB5SW50X0FzTG9uZwotI2VuZGlmCi0jaWZuZGVmIFB5X0lTX0ZJTklURQotI2RlZmluZSBQeV9JU19GSU5JVEUoWCkgKCFQeV9JU19JTkZJTklUWShYKSAmJiAhUHlfSVNfTkFOKFgpKQotI2VuZGlmCi0KICNpZmRlZiBfX0dOVUNfXwogI2RlZmluZSBVTlVTRUQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCiAjZWxzZQpAQCAtMTI5LDMzICsxMTUsMTQgQEAKIHJhaXNlX2Vycm1zZyhjaGFyICptc2csIFB5T2JqZWN0ICpzLCBQeV9zc2l6ZV90IGVuZCk7CiBzdGF0aWMgUHlPYmplY3QgKgogZW5jb2Rlcl9lbmNvZGVfc3RyaW5nKFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9iaik7Ci1zdGF0aWMgaW50Ci1fY29udmVydFB5SW50X0FzU3NpemVfdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCAqc2l6ZV9wdHIpOwogc3RhdGljIFB5T2JqZWN0ICoKLV9jb252ZXJ0UHlJbnRfRnJvbVNzaXplX3QoUHlfc3NpemVfdCAqc2l6ZV9wdHIpOworZW5jb2Rlcl9lbmNvZGVfbG9uZyhQeUVuY29kZXJPYmplY3QqIHMgVU5VU0VELCBQeU9iamVjdCAqb2JqKTsKIHN0YXRpYyBQeU9iamVjdCAqCiBlbmNvZGVyX2VuY29kZV9mbG9hdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopOwogCiAjZGVmaW5lIFNfQ0hBUihjKSAoYyA+PSAnICcgJiYgYyA8PSAnficgJiYgYyAhPSAnXFwnICYmIGMgIT0gJyInKQogI2RlZmluZSBJU19XSElURVNQQUNFKGMpICgoKGMpID09ICcgJykgfHwgKChjKSA9PSAnXHQnKSB8fCAoKGMpID09ICdcbicpIHx8ICgoYykgPT0gJ1xyJykpCiAKLXN0YXRpYyBpbnQKLV9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90ICpzaXplX3B0cikKLXsKLSAgICAvKiBQeU9iamVjdCB0byBQeV9zc2l6ZV90IGNvbnZlcnRlciAqLwotICAgICpzaXplX3B0ciA9IFB5TG9uZ19Bc1NzaXplX3Qobyk7Ci0gICAgaWYgKCpzaXplX3B0ciA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLV9jb252ZXJ0UHlJbnRfRnJvbVNzaXplX3QoUHlfc3NpemVfdCAqc2l6ZV9wdHIpCi17Ci0gICAgLyogUHlfc3NpemVfdCB0byBQeU9iamVjdCBjb252ZXJ0ZXIgKi8KLSAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KCpzaXplX3B0cik7Ci19Ci0KIHN0YXRpYyBQeV9zc2l6ZV90CiBhc2NpaV9lc2NhcGVfdW5pY2hhcihQeV9VQ1M0IGMsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgUHlfc3NpemVfdCBjaGFycykKIHsKQEAgLTE3NCwxNCArMTQxLDEzIEBACiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoYyA+PSAweDEwMDAwKSB7CiAgICAgICAgICAgICAgICAgLyogVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyICovCi0gICAgICAgICAgICAgICAgUHlfVUNTNCB2ID0gYyAtIDB4MTAwMDA7Ci0gICAgICAgICAgICAgICAgYyA9IDB4ZDgwMCB8ICgodiA+PiAxMCkgJiAweDNmZik7CisgICAgICAgICAgICAgICAgUHlfVUNTNCB2ID0gUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjKTsKICAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAndSc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjID4+IDEyKSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjID4+ICA4KSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjID4+ICA0KSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjICAgICAgKSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgYyA9IDB4ZGMwMCB8ICh2ICYgMHgzZmYpOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiA+PiAxMikgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiA+PiAgOCkgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiA+PiAgNCkgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiAgICAgICkgJiAweGZdOworICAgICAgICAgICAgICAgIGMgPSBQeV9VTklDT0RFX0xPV19TVVJST0dBVEUoYyk7CiAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ1xcJzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsKQEAgLTI2OCwxMyArMjM0LDIzIEBACiAgICAgICAgIGlmIChlcnJtc2dfZm4gPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcHltc2cgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZXJybXNnX2ZuLCAiKHpPTyYpIiwgbXNnLCBzLCBfY29udmVydFB5SW50X0Zyb21Tc2l6ZV90LCAmZW5kKTsKKyAgICBweW1zZyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihlcnJtc2dfZm4sICIoek9uKSIsIG1zZywgcywgZW5kKTsKICAgICBpZiAocHltc2cpIHsKICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1ZhbHVlRXJyb3IsIHB5bXNnKTsKICAgICAgICAgUHlfREVDUkVGKHB5bXNnKTsKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkCityYWlzZV9zdG9wX2l0ZXJhdGlvbihQeV9zc2l6ZV90IGlkeCkKK3sKKyAgICBQeU9iamVjdCAqdmFsdWUgPSBQeUxvbmdfRnJvbVNzaXplX3QoaWR4KTsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfU3RvcEl0ZXJhdGlvbiwgdmFsdWUpOworICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgIH0KK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIF9idWlsZF9ydmFsX2luZGV4X3R1cGxlKFB5T2JqZWN0ICpydmFsLCBQeV9zc2l6ZV90IGlkeCkgewogICAgIC8qIHJldHVybiAocnZhbCwgaWR4KSB0dXBsZSwgc3RlYWxpbmcgcmVmZXJlbmNlIHRvIHJ2YWwgKi8KQEAgLTM0NCw3ICszMjAsNyBAQAogICAgIGJ1ZiA9IFB5VW5pY29kZV9EQVRBKHB5c3RyKTsKICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQocHlzdHIpOwogCi0gICAgaWYgKGVuZCA8IDAgfHwgbGVuIDw9IGVuZCkgeworICAgIGlmIChlbmQgPCAwIHx8IGxlbiA8IGVuZCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVuZCBpcyBvdXQgb2YgYm91bmRzIik7CiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CkBAIC01MTUsNyArNDkxLDcgQEAKICAgICBQeV9zc2l6ZV90IGVuZDsKICAgICBQeV9zc2l6ZV90IG5leHRfZW5kID0gLTE7CiAgICAgaW50IHN0cmljdCA9IDE7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTyZ8aTpzY2Fuc3RyaW5nIiwgJnB5c3RyLCBfY29udmVydFB5SW50X0FzU3NpemVfdCwgJmVuZCwgJnN0cmljdCkpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9ufGk6c2NhbnN0cmluZyIsICZweXN0ciwgJmVuZCwgJnN0cmljdCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2socHlzdHIpKSB7CkBAIC02MzAsMTIgKzYwNiwxMiBAQAogICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsc3RyLCBpZHgpKSkgaWR4Kys7CiAKICAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIG9iamVjdCBpcyBub24tZW1wdHkgKi8KLSAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICd9JykgewotICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKKyAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ30nKSB7CisgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqbWVtb2tleTsKIAogICAgICAgICAgICAgLyogcmVhZCBrZXkgKi8KLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJyInKSB7CisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJyInKSB7CiAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIiwgcHlzdHIsIGlkeCk7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgfQpAQCAtNjkyLDExICs2NjgsOSBAQAogICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpKSkgaWR4Kys7CiAKICAgICAgICAgICAgIC8qIGJhaWwgaWYgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KLSAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ30nKSB7CisgICAgICAgICAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICd9JykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgfQpAQCAtNzA3LDEyICs2ODEsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogdmVyaWZ5IHRoYXQgaWR4IDwgZW5kX2lkeCwgc3RyW2lkeF0gc2hvdWxkIGJlICd9JyAqLwotICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnfScpIHsKLSAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCiAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7CiAKICAgICBpZiAoaGFzX3BhaXJzX2hvb2spIHsKQEAgLTc2NCw4ICs3MzIsOCBAQAogICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSkpIGlkeCsrOwogCiAgICAgLyogb25seSBsb29wIGlmIHRoZSBhcnJheSBpcyBub24tZW1wdHkgKi8KLSAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICddJykgewotICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKKyAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ10nKSB7CisgICAgICAgIHdoaWxlICgxKSB7CiAKICAgICAgICAgICAgIC8qIHJlYWQgYW55IEpTT04gdGVybSAgKi8KICAgICAgICAgICAgIHZhbCA9IHNjYW5fb25jZV91bmljb2RlKHMsIHB5c3RyLCBpZHgsICZuZXh0X2lkeCk7CkBAIC03ODIsMTEgKzc1MCw5IEBACiAgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgYXJyYXkgaXMgY2xvc2VkIG9yIHdlIGRpZG4ndCBnZXQgdGhlICwgZGVsaW1pdGVyICovCi0gICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICddJykgeworICAgICAgICAgICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSA9PSAnXScpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJywnKSB7CisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJywnKSB7CiAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOwogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgIH0KQEAgLTc5OSw3ICs3NjUsNyBAQAogCiAgICAgLyogdmVyaWZ5IHRoYXQgaWR4IDwgZW5kX2lkeCwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpIHNob3VsZCBiZSAnXScgKi8KICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ10nKSB7Ci0gICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHB5c3RyLCBlbmRfaWR4KTsKKyAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBweXN0ciwgZW5kX2lkeCk7CiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7CkBAIC04NjcsNyArODMzLDcgQEAKICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICctJykgewogICAgICAgICBpZHgrKzsKICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgICAgICByYWlzZV9zdG9wX2l0ZXJhdGlvbihzdGFydCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTg4Myw3ICs4NDksNyBAQAogICAgIH0KICAgICAvKiBubyBpbnRlZ2VyIGRpZ2l0cywgZXJyb3IgKi8KICAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgcmFpc2Vfc3RvcF9pdGVyYXRpb24oc3RhcnQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTk3Niw3ICs5NDIsNyBAQAogICAgIGxlbmd0aCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHB5c3RyKTsKIAogICAgIGlmIChpZHggPj0gbGVuZ3RoKSB7Ci0gICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgIHJhaXNlX3N0b3BfaXRlcmF0aW9uKGlkeCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTA3OCw3ICsxMDQ0LDcgQEAKICAgICBQeVNjYW5uZXJPYmplY3QgKnM7CiAgICAgYXNzZXJ0KFB5U2Nhbm5lcl9DaGVjayhzZWxmKSk7CiAgICAgcyA9IChQeVNjYW5uZXJPYmplY3QgKilzZWxmOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPTyY6c2Nhbl9vbmNlIiwga3dsaXN0LCAmcHlzdHIsIF9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmaWR4KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT246c2Nhbl9vbmNlIiwga3dsaXN0LCAmcHlzdHIsICZpZHgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2socHlzdHIpKSB7CkBAIC0xMjc5LDggKzEyNDUsOCBAQAogCiAgICAgYXNzZXJ0KFB5RW5jb2Rlcl9DaGVjayhzZWxmKSk7CiAgICAgcyA9IChQeUVuY29kZXJPYmplY3QgKilzZWxmOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPTyY6X2l0ZXJlbmNvZGUiLCBrd2xpc3QsCi0gICAgICAgICZvYmosIF9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmaW5kZW50X2xldmVsKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT246X2l0ZXJlbmNvZGUiLCBrd2xpc3QsCisgICAgICAgICZvYmosICZpbmRlbnRfbGV2ZWwpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoX1B5QWNjdV9Jbml0KCZhY2MpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzMjYsMTMgKzEyOTIsNDUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK2VuY29kZXJfZW5jb2RlX2xvbmcoUHlFbmNvZGVyT2JqZWN0KiBzIFVOVVNFRCwgUHlPYmplY3QgKm9iaikKK3sKKyAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeUxvbmcgYW5kIFB5TG9uZyBzdWJjbGFzc2VzLgorICAgICAgIENhbGxzIGludCgpIG9uIFB5TG9uZyBzdWJjbGFzc2VzIGluIGNhc2UgdGhlIHN0cigpIHdhcyBjaGFuZ2VkLgorICAgICAgIEFkZGVkIHNwZWNpZmljYWxseSB0byBkZWFsIHdpdGggSW50RW51bS4gIFNlZSBJc3N1ZTE4MjY0LiAqLworICAgIFB5T2JqZWN0ICplbmNvZGVkLCAqbG9uZ29iajsKKyAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3Qob2JqKSkgeworICAgICAgICBlbmNvZGVkID0gUHlPYmplY3RfU3RyKG9iaik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsb25nb2JqID0gUHlOdW1iZXJfTG9uZyhvYmopOworICAgICAgICBpZiAobG9uZ29iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gY29lcmNlIGludCBzdWJjbGFzcyB0byBpbnQiCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbmNvZGVkID0gUHlPYmplY3RfU3RyKGxvbmdvYmopOworICAgICAgICBQeV9ERUNSRUYobG9uZ29iaik7CisgICAgfQorICAgIHJldHVybiBlbmNvZGVkOworfQorCisKK3N0YXRpYyBQeU9iamVjdCAqCiBlbmNvZGVyX2VuY29kZV9mbG9hdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgLyogUmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHlGbG9hdCAqLworICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5RmxvYXQuCisgICAgICAgTW9kaWZpZWQgdG8gY2FsbCBmbG9hdCgpIG9uIGZsb2F0IHN1YmNsYXNzZXMgaW4gY2FzZSB0aGUgc3ViY2xhc3MKKyAgICAgICBjaGFuZ2VzIHRoZSByZXByLiAgU2VlIElzc3VlMTgyNjQuICAqLworICAgIFB5T2JqZWN0ICplbmNvZGVkLCAqZmxvYXRvYmo7CiAgICAgZG91YmxlIGkgPSBQeUZsb2F0X0FTX0RPVUJMRShvYmopOwogICAgIGlmICghUHlfSVNfRklOSVRFKGkpKSB7CiAgICAgICAgIGlmICghcy0+YWxsb3dfbmFuKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIk91dCBvZiByYW5nZSBmbG9hdCB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFudCIpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiT3V0IG9mIHJhbmdlIGZsb2F0IHZhbHVlcyBhcmUgbm90IEpTT04gY29tcGxpYW50IgorICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGkgPiAwKSB7CkBAIC0xMzQ1LDggKzEzNDMsMjQgQEAKICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiTmFOIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgLyogVXNlIGEgYmV0dGVyIGZsb2F0IGZvcm1hdCBoZXJlPyAqLwotICAgIHJldHVybiBQeU9iamVjdF9SZXByKG9iaik7CisgICAgLyogY29lcmNlIGZsb2F0IHN1YmNsYXNzZXMgdG8gZmxvYXQgKHByaW1hcmlseSBmb3IgRW51bSkgKi8KKyAgICBpZiAoUHlGbG9hdF9DaGVja0V4YWN0KG9iaikpIHsKKyAgICAgICAgLyogVXNlIGEgYmV0dGVyIGZsb2F0IGZvcm1hdCBoZXJlPyAqLworICAgICAgICBlbmNvZGVkID0gUHlPYmplY3RfUmVwcihvYmopOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZmxvYXRvYmogPSBQeU51bWJlcl9GbG9hdChvYmopOworICAgICAgICBpZiAoZmxvYXRvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGNvZXJjZSBmbG9hdCBzdWJjbGFzcyB0byBmbG9hdCIKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9SZXByKGZsb2F0b2JqKTsKKyAgICAgICAgUHlfREVDUkVGKGZsb2F0b2JqKTsKKyAgICB9CisgICAgcmV0dXJuIGVuY29kZWQ7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMzkwLDcgKzE0MDQsNyBAQAogICAgICAgICByZXR1cm4gX3N0ZWFsX2FjY3VtdWxhdGUoYWNjLCBlbmNvZGVkKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKG9iaikpIHsKLSAgICAgICAgUHlPYmplY3QgKmVuY29kZWQgPSBQeU9iamVjdF9TdHIob2JqKTsKKyAgICAgICAgUHlPYmplY3QgKmVuY29kZWQgPSBlbmNvZGVyX2VuY29kZV9sb25nKHMsIG9iaik7CiAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHJldHVybiBfc3RlYWxfYWNjdW11bGF0ZShhY2MsIGVuY29kZWQpOwpAQCAtMTU3NSw5ICsxNTg5LDEwIEBACiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhrZXkpKSB7Ci0gICAgICAgICAgICBrc3RyID0gUHlPYmplY3RfU3RyKGtleSk7Ci0gICAgICAgICAgICBpZiAoa3N0ciA9PSBOVUxMKQorICAgICAgICAgICAga3N0ciA9IGVuY29kZXJfZW5jb2RlX2xvbmcocywga2V5KTsKKyAgICAgICAgICAgIGlmIChrc3RyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2tpcGtleXMpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2xvY2FsZW1vZHVsZS5jIGIvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKaW5kZXggY2M2ODhiYS4uNDAwYzM0NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKQEAgLTE0NywyNiArMTQ3LDM0IEBACiAgICAgLyogaG9wZWZ1bGx5LCB0aGUgbG9jYWxlY29udiByZXN1bHQgc3Vydml2ZXMgdGhlIEMgbGlicmFyeSBjYWxscwogICAgICAgIGludm9sdmVkIGhlcmVpbiAqLwogCisjZGVmaW5lIFJFU1VMVChrZXksIG9iailcCisgICAgZG8geyBcCisgICAgICAgIGlmIChvYmogPT0gTlVMTCkgXAorICAgICAgICAgICAgZ290byBmYWlsZWQ7IFwKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwga2V5LCBvYmopIDwgMCkgeyBcCisgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsgXAorICAgICAgICAgICAgZ290byBmYWlsZWQ7IFwKKyAgICAgICAgfSBcCisgICAgICAgIFB5X0RFQ1JFRihvYmopOyBcCisgICAgfSB3aGlsZSAoMCkKKwogI2RlZmluZSBSRVNVTFRfU1RSSU5HKHMpXAotICAgIHggPSBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKGwtPnMsIE5VTEwpOyAgIFwKLSAgICBpZiAoIXgpIGdvdG8gZmFpbGVkO1wKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsICNzLCB4KTtcCi0gICAgUHlfWERFQ1JFRih4KQorICAgIGRvIHsgXAorICAgICAgICB4ID0gUHlVbmljb2RlX0RlY29kZUxvY2FsZShsLT5zLCBOVUxMKTsgXAorICAgICAgICBSRVNVTFQoI3MsIHgpOyBcCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBSRVNVTFRfSU5UKGkpXAotICAgIHggPSBQeUxvbmdfRnJvbUxvbmcobC0+aSk7XAotICAgIGlmICgheCkgZ290byBmYWlsZWQ7XAotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwgI2ksIHgpO1wKLSAgICBQeV9YREVDUkVGKHgpCisgICAgZG8geyBcCisgICAgICAgIHggPSBQeUxvbmdfRnJvbUxvbmcobC0+aSk7IFwKKyAgICAgICAgUkVTVUxUKCNpLCB4KTsgXAorICAgIH0gd2hpbGUgKDApCiAKICAgICAvKiBOdW1lcmljIGluZm9ybWF0aW9uICovCiAgICAgUkVTVUxUX1NUUklORyhkZWNpbWFsX3BvaW50KTsKICAgICBSRVNVTFRfU1RSSU5HKHRob3VzYW5kc19zZXApOwogICAgIHggPSBjb3B5X2dyb3VwaW5nKGwtPmdyb3VwaW5nKTsKLSAgICBpZiAoIXgpCi0gICAgICAgIGdvdG8gZmFpbGVkOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwgImdyb3VwaW5nIiwgeCk7Ci0gICAgUHlfWERFQ1JFRih4KTsKKyAgICBSRVNVTFQoImdyb3VwaW5nIiwgeCk7CiAKICAgICAvKiBNb25ldGFyeSBpbmZvcm1hdGlvbiAqLwogICAgIFJFU1VMVF9TVFJJTkcoaW50X2N1cnJfc3ltYm9sKTsKQEAgLTE3NCwxMCArMTgyLDggQEAKICAgICBSRVNVTFRfU1RSSU5HKG1vbl9kZWNpbWFsX3BvaW50KTsKICAgICBSRVNVTFRfU1RSSU5HKG1vbl90aG91c2FuZHNfc2VwKTsKICAgICB4ID0gY29weV9ncm91cGluZyhsLT5tb25fZ3JvdXBpbmcpOwotICAgIGlmICgheCkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCAibW9uX2dyb3VwaW5nIiwgeCk7Ci0gICAgUHlfWERFQ1JFRih4KTsKKyAgICBSRVNVTFQoIm1vbl9ncm91cGluZyIsIHgpOworCiAgICAgUkVTVUxUX1NUUklORyhwb3NpdGl2ZV9zaWduKTsKICAgICBSRVNVTFRfU1RSSU5HKG5lZ2F0aXZlX3NpZ24pOwogICAgIFJFU1VMVF9JTlQoaW50X2ZyYWNfZGlnaXRzKTsKQEAgLTE5Miw3ICsxOTgsNiBAQAogCiAgIGZhaWxlZDoKICAgICBQeV9YREVDUkVGKHJlc3VsdCk7Ci0gICAgUHlfWERFQ1JFRih4KTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbHNwcm9mLmMgYi9Nb2R1bGVzL19sc3Byb2YuYwppbmRleCA0MTYyYmU4Li4wMTM3ZDk1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sc3Byb2YuYworKysgYi9Nb2R1bGVzL19sc3Byb2YuYwpAQCAtMzYsMTIgKzM2LDggQEAKICNlcnJvciAiVGhpcyBtb2R1bGUgcmVxdWlyZXMgZ2V0dGltZW9mZGF5KCkgb24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zISIKICNlbmRpZgogCi0jaWYgKGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZWxzZQogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPHN5cy90aW1lcy5oPgotI2VuZGlmCiAKIHN0YXRpYyBQWV9MT05HX0xPTkcKIGhwVGltZXIodm9pZCkKQEAgLTIyNyw3ICsyMjMsNyBAQAogbmV3UHJvZmlsZXJFbnRyeShQcm9maWxlck9iamVjdCAqcE9iaiwgdm9pZCAqa2V5LCBQeU9iamVjdCAqdXNlck9iaikKIHsKICAgICBQcm9maWxlckVudHJ5ICpzZWxmOwotICAgIHNlbGYgPSAoUHJvZmlsZXJFbnRyeSopIG1hbGxvYyhzaXplb2YoUHJvZmlsZXJFbnRyeSkpOworICAgIHNlbGYgPSAoUHJvZmlsZXJFbnRyeSopIFB5TWVtX01hbGxvYyhzaXplb2YoUHJvZmlsZXJFbnRyeSkpOwogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNSw3ICsyMzEsNyBAQAogICAgIHVzZXJPYmogPSBub3JtYWxpemVVc2VyT2JqKHVzZXJPYmopOwogICAgIGlmICh1c2VyT2JqID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZnJlZShzZWxmKTsKKyAgICAgICAgUHlNZW1fRnJlZShzZWxmKTsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yNjgsNyArMjY0LDcgQEAKIG5ld1N1YkVudHJ5KFByb2ZpbGVyT2JqZWN0ICpwT2JqLCAgUHJvZmlsZXJFbnRyeSAqY2FsbGVyLCBQcm9maWxlckVudHJ5KiBlbnRyeSkKIHsKICAgICBQcm9maWxlclN1YkVudHJ5ICpzZWxmOwotICAgIHNlbGYgPSAoUHJvZmlsZXJTdWJFbnRyeSopIG1hbGxvYyhzaXplb2YoUHJvZmlsZXJTdWJFbnRyeSkpOworICAgIHNlbGYgPSAoUHJvZmlsZXJTdWJFbnRyeSopIFB5TWVtX01hbGxvYyhzaXplb2YoUHJvZmlsZXJTdWJFbnRyeSkpOwogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI4Niw3ICsyODIsNyBAQAogc3RhdGljIGludCBmcmVlU3ViRW50cnkocm90YXRpbmdfbm9kZV90ICpoZWFkZXIsIHZvaWQgKmFyZykKIHsKICAgICBQcm9maWxlclN1YkVudHJ5ICpzdWJlbnRyeSA9IChQcm9maWxlclN1YkVudHJ5KikgaGVhZGVyOwotICAgIGZyZWUoc3ViZW50cnkpOworICAgIFB5TWVtX0ZyZWUoc3ViZW50cnkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yOTUsNyArMjkxLDcgQEAKICAgICBQcm9maWxlckVudHJ5ICplbnRyeSA9IChQcm9maWxlckVudHJ5KikgaGVhZGVyOwogICAgIFJvdGF0aW5nVHJlZV9FbnVtKGVudHJ5LT5jYWxscywgZnJlZVN1YkVudHJ5LCBOVUxMKTsKICAgICBQeV9ERUNSRUYoZW50cnktPnVzZXJPYmopOwotICAgIGZyZWUoZW50cnkpOworICAgIFB5TWVtX0ZyZWUoZW50cnkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMDUsMTMgKzMwMSwxMyBAQAogICAgIHBPYmotPnByb2ZpbGVyRW50cmllcyA9IEVNUFRZX1JPVEFUSU5HX1RSRUU7CiAgICAgLyogcmVsZWFzZSB0aGUgbWVtb3J5IGhvbGQgYnkgdGhlIFByb2ZpbGVyQ29udGV4dHMgKi8KICAgICBpZiAocE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCkgewotICAgICAgICBmcmVlKHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQpOworICAgICAgICBQeU1lbV9GcmVlKHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQpOwogICAgICAgICBwT2JqLT5jdXJyZW50UHJvZmlsZXJDb250ZXh0ID0gTlVMTDsKICAgICB9CiAgICAgd2hpbGUgKHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0KSB7CiAgICAgICAgIFByb2ZpbGVyQ29udGV4dCAqYyA9IHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0OwogICAgICAgICBwT2JqLT5mcmVlbGlzdFByb2ZpbGVyQ29udGV4dCA9IGMtPnByZXZpb3VzOwotICAgICAgICBmcmVlKGMpOworICAgICAgICBQeU1lbV9GcmVlKGMpOwogICAgIH0KICAgICBwT2JqLT5mcmVlbGlzdFByb2ZpbGVyQ29udGV4dCA9IE5VTEw7CiB9CkBAIC0zOTcsNyArMzkzLDcgQEAKICAgICBlbHNlIHsKICAgICAgICAgLyogZnJlZSBsaXN0IGV4aGF1c3RlZCwgYWxsb2NhdGUgYSBuZXcgb25lICovCiAgICAgICAgIHBDb250ZXh0ID0gKFByb2ZpbGVyQ29udGV4dCopCi0gICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKFByb2ZpbGVyQ29udGV4dCkpOworICAgICAgICAgICAgUHlNZW1fTWFsbG9jKHNpemVvZihQcm9maWxlckNvbnRleHQpKTsKICAgICAgICAgaWYgKHBDb250ZXh0ID09IE5VTEwpIHsKICAgICAgICAgICAgIHBPYmotPmZsYWdzIHw9IFBPRl9OT01FTU9SWTsKICAgICAgICAgICAgIGdvdG8gcmVzdG9yZVB5ZXJyOwpAQCAtNzA4LDcgKzcwNCw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQgPSBwQ29udGV4dC0+cHJldmlvdXM7CiAgICAgICAgIGlmIChwQ29udGV4dCkKLSAgICAgICAgICAgIGZyZWUocENvbnRleHQpOworICAgICAgICAgICAgUHlNZW1fRnJlZShwQ29udGV4dCk7CiAgICAgfQogCiB9CkBAIC04NzYsMTAgKzg3MiwxMiBAQAogICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJQcm9maWxlciIsIChQeU9iamVjdCAqKSZQeVByb2ZpbGVyX1R5cGUpOwogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdGF0c0VudHJ5VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvZmlsZXJfZW50cnlfZGVzYyk7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRzU3ViRW50cnlUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9zdWJlbnRyeV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0c0VudHJ5VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9lbnRyeV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0c1N1YkVudHJ5VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9zdWJlbnRyeV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZTdGF0c0VudHJ5VHlwZSk7CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZTdGF0c1N1YkVudHJ5VHlwZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19sem1hbW9kdWxlLmMgYi9Nb2R1bGVzL19sem1hbW9kdWxlLmMKaW5kZXggNjQzNjE2MC4uYzQzNjc2YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbHptYW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2x6bWFtb2R1bGUuYwpAQCAtNTEsNiArNTEsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAorICAgIGx6bWFfYWxsb2NhdG9yIGFsbG9jOwogICAgIGx6bWFfc3RyZWFtIGx6czsKICAgICBpbnQgZmx1c2hlZDsKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtNjAsNiArNjEsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAorICAgIGx6bWFfYWxsb2NhdG9yIGFsbG9jOwogICAgIGx6bWFfc3RyZWFtIGx6czsKICAgICBpbnQgY2hlY2s7CiAgICAgY2hhciBlb2Y7CkBAIC0xMTcsNiArMTE5LDIyIEBACiAgICAgfQogfQogCitzdGF0aWMgdm9pZCoKK1B5THptYV9NYWxsb2Modm9pZCAqb3BhcXVlLCBzaXplX3QgaXRlbXMsIHNpemVfdCBzaXplKQoreworICAgIGlmIChpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyBzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSBjYW5ub3QgYmUgdXNlZDoKKyAgICAgICB0aGUgR0lMIGlzIG5vdCBoZWxkIHdoZW4gbHptYV9jb2RlKCkgaXMgY2FsbGVkICovCisgICAgcmV0dXJuIFB5TWVtX1Jhd01hbGxvYyhpdGVtcyAqIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorUHlMem1hX0ZyZWUodm9pZCAqb3BhcXVlLCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1fUmF3RnJlZShwdHIpOworfQorCiAjaWYgQlVGU0laIDwgODE5MgogI2RlZmluZSBJTklUSUFMX0JVRkZFUl9TSVpFIDgxOTIKICNlbHNlCkBAIC0yODAsMzYgKzI5OCwzNyBAQAogICAgIHJldHVybiBvcHRpb25zOwogfQogCi1zdGF0aWMgdm9pZCAqCi1wYXJzZV9maWx0ZXJfc3BlYyhsem1hX2ZpbHRlciAqZiwgUHlPYmplY3QgKnNwZWMpCitzdGF0aWMgaW50Citsem1hX2ZpbHRlcl9jb252ZXJ0ZXIoUHlPYmplY3QgKnNwZWMsIHZvaWQgKnB0cikKIHsKKyAgICBsem1hX2ZpbHRlciAqZiA9IChsem1hX2ZpbHRlciAqKXB0cjsKICAgICBQeU9iamVjdCAqaWRfb2JqOwogCiAgICAgaWYgKCFQeU1hcHBpbmdfQ2hlY2soc3BlYykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJGaWx0ZXIgc3BlY2lmaWVyIG11c3QgYmUgYSBkaWN0IG9yIGRpY3QtbGlrZSBvYmplY3QiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZF9vYmogPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhzcGVjLCAiaWQiKTsKICAgICBpZiAoaWRfb2JqID09IE5VTEwpIHsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciBzcGVjaWZpZXIgbXVzdCBoYXZlIGFuIFwiaWRcIiBlbnRyeSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGYtPmlkID0gUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyhpZF9vYmopOwogICAgIFB5X0RFQ1JFRihpZF9vYmopOwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0Y2ggKGYtPmlkKSB7CiAgICAgICAgIGNhc2UgTFpNQV9GSUxURVJfTFpNQTE6CiAgICAgICAgIGNhc2UgTFpNQV9GSUxURVJfTFpNQTI6CiAgICAgICAgICAgICBmLT5vcHRpb25zID0gcGFyc2VfZmlsdGVyX3NwZWNfbHptYShzcGVjKTsKLSAgICAgICAgICAgIHJldHVybiBmLT5vcHRpb25zOworICAgICAgICAgICAgcmV0dXJuIGYtPm9wdGlvbnMgIT0gTlVMTDsKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9ERUxUQToKICAgICAgICAgICAgIGYtPm9wdGlvbnMgPSBwYXJzZV9maWx0ZXJfc3BlY19kZWx0YShzcGVjKTsKLSAgICAgICAgICAgIHJldHVybiBmLT5vcHRpb25zOworICAgICAgICAgICAgcmV0dXJuIGYtPm9wdGlvbnMgIT0gTlVMTDsKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9YODY6CiAgICAgICAgIGNhc2UgTFpNQV9GSUxURVJfUE9XRVJQQzoKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9JQTY0OgpAQCAtMzE3LDEwICszMzYsMTAgQEAKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9BUk1USFVNQjoKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9TUEFSQzoKICAgICAgICAgICAgIGYtPm9wdGlvbnMgPSBwYXJzZV9maWx0ZXJfc3BlY19iY2ooc3BlYyk7Ci0gICAgICAgICAgICByZXR1cm4gZi0+b3B0aW9uczsKKyAgICAgICAgICAgIHJldHVybiBmLT5vcHRpb25zICE9IE5VTEw7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgZmlsdGVyIElEOiAlbGx1IiwgZi0+aWQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKQEAgLTM1MSw3ICszNzAsNyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZmlsdGVyczsgaSsrKSB7CiAgICAgICAgIGludCBvayA9IDE7CiAgICAgICAgIFB5T2JqZWN0ICpzcGVjID0gUHlTZXF1ZW5jZV9HZXRJdGVtKGZpbHRlcnNwZWNzLCBpKTsKLSAgICAgICAgaWYgKHNwZWMgPT0gTlVMTCB8fCBwYXJzZV9maWx0ZXJfc3BlYygmZmlsdGVyc1tpXSwgc3BlYykgPT0gTlVMTCkKKyAgICAgICAgaWYgKHNwZWMgPT0gTlVMTCB8fCAhbHptYV9maWx0ZXJfY29udmVydGVyKHNwZWMsICZmaWx0ZXJzW2ldKSkKICAgICAgICAgICAgIG9rID0gMDsKICAgICAgICAgUHlfWERFQ1JFRihzcGVjKTsKICAgICAgICAgaWYgKCFvaykgewpAQCAtNDUwLDYgKzQ2OSwzNiBAQAogfQogCiAKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIF9sem1hCitjbGFzcyBfbHptYS5MWk1BQ29tcHJlc3NvciAiQ29tcHJlc3NvciAqIiAiJkNvbXByZXNzb3JfdHlwZSIKK2NsYXNzIF9sem1hLkxaTUFEZWNvbXByZXNzb3IgIkRlY29tcHJlc3NvciAqIiAiJkRlY29tcHJlc3Nvcl90eXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ZjE3YWZjNzg2NTI1ZDZjMl0qLworCisjaW5jbHVkZSAiY2xpbmljL19sem1hbW9kdWxlLmMuaCIKKworLypbcHl0aG9uIGlucHV0XQorCitjbGFzcyBsem1hX3ZsaV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsem1hX3ZsaScKKyAgICBjb252ZXJ0ZXIgPSAnbHptYV92bGlfY29udmVydGVyJworCitjbGFzcyBsem1hX2ZpbHRlcl9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsem1hX2ZpbHRlcicKKyAgICBjb252ZXJ0ZXIgPSAnbHptYV9maWx0ZXJfY29udmVydGVyJworICAgIGNfZGVmYXVsdCA9IGNfaWdub3JlZF9kZWZhdWx0ID0gIntMWk1BX1ZMSV9VTktOT1dOLCBOVUxMfSIKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBuYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpCisgICAgICAgIHJldHVybiAoJ2lmICglKG5hbWUpcy5pZCAhPSBMWk1BX1ZMSV9VTktOT1dOKVxuJworICAgICAgICAgICAgICAgICcgICBQeU1lbV9GcmVlKCUobmFtZSlzLm9wdGlvbnMpO1xuJykgJSB7J25hbWUnOiBuYW1lfQorCitbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltweXRob24gZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD03NGZlNzYzMWNlMzc3YTk0XSovCisKKwogLyogTFpNQUNvbXByZXNzb3IgY2xhc3MuICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC00OTQsNDQgKzU0Myw1MSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoQ29tcHJlc3Nvcl9jb21wcmVzc19kb2MsCi0iY29tcHJlc3MoZGF0YSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJQcm92aWRlIGRhdGEgdG8gdGhlIGNvbXByZXNzb3Igb2JqZWN0LiBSZXR1cm5zIGEgY2h1bmsgb2ZcbiIKLSJjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGJcIlwiIG90aGVyd2lzZS5cbiIKLSJcbiIKLSJXaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHByb3ZpZGluZyBkYXRhIHRvIHRoZSBjb21wcmVzc29yLCBjYWxsIHRoZVxuIgotImZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29udmVyc2lvbiBwcm9jZXNzLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5MWk1BQ29tcHJlc3Nvci5jb21wcmVzcworCisgICAgc2VsZjogc2VsZih0eXBlPSJDb21wcmVzc29yICoiKQorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIC8KKworUHJvdmlkZSBkYXRhIHRvIHRoZSBjb21wcmVzc29yIG9iamVjdC4KKworUmV0dXJucyBhIGNodW5rIG9mIGNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYicnIG90aGVyd2lzZS4KKworV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBwcm92aWRpbmcgZGF0YSB0byB0aGUgY29tcHJlc3NvciwgY2FsbCB0aGUKK2ZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLUNvbXByZXNzb3JfY29tcHJlc3MoQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzc19pbXBsKENvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zMWY2MTUxMzY5NjNlMDBmIGlucHV0PThiNjBjYjEzZTBjZTY0MjBdKi8KIHsKLSAgICBQeV9idWZmZXIgYnVmZmVyOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kjpjb21wcmVzcyIsICZidWZmZXIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIEFDUVVJUkVfTE9DSyhzZWxmKTsKICAgICBpZiAoc2VsZi0+Zmx1c2hlZCkKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJDb21wcmVzc29yIGhhcyBiZWVuIGZsdXNoZWQiKTsKICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGNvbXByZXNzKHNlbGYsIGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4sIExaTUFfUlVOKTsKKyAgICAgICAgcmVzdWx0ID0gY29tcHJlc3Moc2VsZiwgZGF0YS0+YnVmLCBkYXRhLT5sZW4sIExaTUFfUlVOKTsKICAgICBSRUxFQVNFX0xPQ0soc2VsZik7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QeURvY19TVFJWQVIoQ29tcHJlc3Nvcl9mbHVzaF9kb2MsCi0iZmx1c2goKSAtPiBieXRlc1xuIgotIlxuIgotIkZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4gUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnRcbiIKLSJpbiBpbnRlcm5hbCBidWZmZXJzLlxuIgotIlxuIgotIlRoZSBjb21wcmVzc29yIG9iamVjdCBjYW5ub3QgYmUgdXNlZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19sem1hLkxaTUFDb21wcmVzc29yLmZsdXNoCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IkNvbXByZXNzb3IgKiIpCisKK0ZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4KKworUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnQgaW4gaW50ZXJuYWwgYnVmZmVycy4KKworVGhlIGNvbXByZXNzb3Igb2JqZWN0IG1heSBub3QgYmUgdXNlZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Db21wcmVzc29yX2ZsdXNoKENvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfbHptYV9MWk1BQ29tcHJlc3Nvcl9mbHVzaF9pbXBsKENvbXByZXNzb3IgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZmVjMjFmM2UyMjUwNGY1MCBpbnB1dD0zMDYwZmIyNmY5YjQwNDJjXSovCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKQEAgLTYzMiw2ICs2ODgsMzkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKKy8qWy1jbGluaWMgaW5wdXRdCitfbHptYS5MWk1BQ29tcHJlc3Nvci5fX2luaXRfXworCisgICAgc2VsZjogc2VsZih0eXBlPSJDb21wcmVzc29yICoiKQorICAgIGZvcm1hdDogaW50KGNfZGVmYXVsdD0iRk9STUFUX1haIikgPSBGT1JNQVRfWFoKKyAgICAgICAgVGhlIGNvbnRhaW5lciBmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0LiAgVGhpcyBjYW4KKyAgICAgICAgYmUgRk9STUFUX1haIChkZWZhdWx0KSwgRk9STUFUX0FMT05FLCBvciBGT1JNQVRfUkFXLgorCisgICAgY2hlY2s6IGludChjX2RlZmF1bHQ9Ii0xIikgPSB1bnNwZWNpZmllZAorICAgICAgICBUaGUgaW50ZWdyaXR5IGNoZWNrIHRvIHVzZS4gIEZvciBGT1JNQVRfWFosIHRoZSBkZWZhdWx0CisgICAgICAgIGlzIENIRUNLX0NSQzY0LiAgRk9STUFUX0FMT05FIGFuZCBGT1JNQVRfUkFXIGRvIG5vdCBzdXBvcnQgaW50ZWdyaXR5CisgICAgICAgIGNoZWNrczsgZm9yIHRoZXNlIGZvcm1hdHMsIGNoZWNrIG11c3QgYmUgb21pdHRlZCwgb3IgYmUgQ0hFQ0tfTk9ORS4KKworICAgIHByZXNldDogb2JqZWN0ID0gTm9uZQorICAgICAgICBJZiBwcm92aWRlZCBzaG91bGQgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC05LCBvcHRpb25hbGx5CisgICAgICAgIE9SLWVkIHdpdGggdGhlIGNvbnN0YW50IFBSRVNFVF9FWFRSRU1FLgorCisgICAgZmlsdGVyczogb2JqZWN0ID0gTm9uZQorICAgICAgICBJZiBwcm92aWRlZCBzaG91bGQgYmUgYSBzZXF1ZW5jZSBvZiBkaWN0cy4gIEVhY2ggZGljdCBzaG91bGQKKyAgICAgICAgaGF2ZSBhbiBlbnRyeSBmb3IgImlkIiBpbmRpY2F0aW5nIHRoZSBJRCBvZiB0aGUgZmlsdGVyLCBwbHVzCisgICAgICAgIGFkZGl0aW9uYWwgZW50cmllcyBmb3Igb3B0aW9ucyB0byB0aGUgZmlsdGVyLgorCitDcmVhdGUgYSBjb21wcmVzc29yIG9iamVjdCBmb3IgY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LgorCitUaGUgc2V0dGluZ3MgdXNlZCBieSB0aGUgY29tcHJlc3NvciBjYW4gYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhCitwcmVzZXQgY29tcHJlc3Npb24gbGV2ZWwgKHdpdGggdGhlICdwcmVzZXQnIGFyZ3VtZW50KSwgb3IgaW4gZGV0YWlsCithcyBhIGN1c3RvbSBmaWx0ZXIgY2hhaW4gKHdpdGggdGhlICdmaWx0ZXJzJyBhcmd1bWVudCkuICBGb3IgRk9STUFUX1haCithbmQgRk9STUFUX0FMT05FLCB0aGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlIFBSRVNFVF9ERUZBVUxUIHByZXNldAorbGV2ZWwuICBGb3IgRk9STUFUX1JBVywgdGhlIGNhbGxlciBtdXN0IGFsd2F5cyBzcGVjaWZ5IGEgZmlsdGVyIGNoYWluOwordGhlIHJhdyBjb21wcmVzc29yIGRvZXMgbm90IHN1cHBvcnQgcHJlc2V0IGNvbXByZXNzaW9uIGxldmVscy4KKworRm9yIG9uZS1zaG90IGNvbXByZXNzaW9uLCB1c2UgdGhlIGNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4KK1stY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiBzdGF0aWMgaW50CiBDb21wcmVzc29yX2luaXQoQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CkBAIC02NjQsNiArNzUzLDExIEBACiAgICAgICAgIGlmICghdWludDMyX2NvbnZlcnRlcihwcmVzZXRfb2JqLCAmcHJlc2V0KSkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAorICAgIHNlbGYtPmFsbG9jLm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+YWxsb2MuYWxsb2MgPSBQeUx6bWFfTWFsbG9jOworICAgIHNlbGYtPmFsbG9jLmZyZWUgPSBQeUx6bWFfRnJlZTsKKyAgICBzZWxmLT5senMuYWxsb2NhdG9yID0gJnNlbGYtPmFsbG9jOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwogICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKQEAgLTcxNiwxMCArODEwLDggQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIENvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pQ29tcHJlc3Nvcl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICBDb21wcmVzc29yX2NvbXByZXNzX2RvY30sCi0gICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbilDb21wcmVzc29yX2ZsdXNoLCBNRVRIX05PQVJHUywKLSAgICAgQ29tcHJlc3Nvcl9mbHVzaF9kb2N9LAorICAgIF9MWk1BX0xaTUFDT01QUkVTU09SX0NPTVBSRVNTX01FVEhPRERFRgorICAgIF9MWk1BX0xaTUFDT01QUkVTU09SX0ZMVVNIX01FVEhPRERFRgogICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKUNvbXByZXNzb3JfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKICAgICB7TlVMTH0KIH07CkBAIC04NDksMzIgKzk0MSwzNCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoRGVjb21wcmVzc29yX2RlY29tcHJlc3NfZG9jLAotImRlY29tcHJlc3MoZGF0YSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJQcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuIFJldHVybnMgYSBjaHVuayBvZlxuIgotImRlY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiXCJcIiBvdGhlcndpc2UuXG4iCi0iXG4iCi0iQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIGlzXG4iCi0icmVhY2hlZCByYWlzZXMgYW4gRU9GRXJyb3IuIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlXG4iCi0ic3RyZWFtIGlzIGlnbm9yZWQsIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5MWk1BRGVjb21wcmVzc29yLmRlY29tcHJlc3MKKworICAgIHNlbGY6IHNlbGYodHlwZT0iRGVjb21wcmVzc29yICoiKQorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIC8KKworUHJvdmlkZSBkYXRhIHRvIHRoZSBkZWNvbXByZXNzb3Igb2JqZWN0LgorCitSZXR1cm5zIGEgY2h1bmsgb2YgZGVjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuCisKK0F0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBkYXRhIGFmdGVyIHRoZSBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWQKK3JhaXNlcyBhbiBFT0ZFcnJvci4gIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHN0cmVhbQoraXMgaWdub3JlZCBhbmQgc2F2ZWQgaW4gdGhlIHVudXNlZF9kYXRhIGF0dHJpYnV0ZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLURlY29tcHJlc3Nvcl9kZWNvbXByZXNzKERlY29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChEZWNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kODZlNzhkYTdmZjBmZjIxIGlucHV0PTUwYzQ3NjhiODIxYmYwZWZdKi8KIHsKLSAgICBQeV9idWZmZXIgYnVmZmVyOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjpkZWNvbXByZXNzIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQUNRVUlSRV9MT0NLKHNlbGYpOwogICAgIGlmIChzZWxmLT5lb2YpCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwgIkFscmVhZHkgYXQgZW5kIG9mIHN0cmVhbSIpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZGVjb21wcmVzcyhzZWxmLCBidWZmZXIuYnVmLCBidWZmZXIubGVuKTsKKyAgICAgICAgcmVzdWx0ID0gZGVjb21wcmVzcyhzZWxmLCBkYXRhLT5idWYsIGRhdGEtPmxlbik7CiAgICAgUkVMRUFTRV9MT0NLKHNlbGYpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTAyLDQzICs5OTYsNjYgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19sem1hLkxaTUFEZWNvbXByZXNzb3IuX19pbml0X18KKworICAgIHNlbGY6IHNlbGYodHlwZT0iRGVjb21wcmVzc29yICoiKQorICAgIGZvcm1hdDogaW50KGNfZGVmYXVsdD0iRk9STUFUX0FVVE8iKSA9IEZPUk1BVF9BVVRPCisgICAgICAgIFNwZWNpZmllcyB0aGUgY29udGFpbmVyIGZvcm1hdCBvZiB0aGUgaW5wdXQgc3RyZWFtLiAgSWYgdGhpcyBpcworICAgICAgICBGT1JNQVRfQVVUTyAodGhlIGRlZmF1bHQpLCB0aGUgZGVjb21wcmVzc29yIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3QKKyAgICAgICAgd2hldGhlciB0aGUgaW5wdXQgaXMgRk9STUFUX1haIG9yIEZPUk1BVF9BTE9ORS4gIFN0cmVhbXMgY3JlYXRlZCB3aXRoCisgICAgICAgIEZPUk1BVF9SQVcgY2Fubm90IGJlIGF1dG9kZXRlY3RlZC4KKworICAgIG1lbWxpbWl0OiBvYmplY3QgPSBOb25lCisgICAgICAgIExpbWl0IHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhlIGRlY29tcHJlc3Nvci4gIFRoaXMgd2lsbCBjYXVzZQorICAgICAgICBkZWNvbXByZXNzaW9uIHRvIGZhaWwgaWYgdGhlIGlucHV0IGNhbm5vdCBiZSBkZWNvbXByZXNzZWQgd2l0aGluIHRoZQorICAgICAgICBnaXZlbiBsaW1pdC4KKworICAgIGZpbHRlcnM6IG9iamVjdCA9IE5vbmUKKyAgICAgICAgQSBjdXN0b20gZmlsdGVyIGNoYWluLiAgVGhpcyBhcmd1bWVudCBpcyByZXF1aXJlZCBmb3IgRk9STUFUX1JBVywgYW5kCisgICAgICAgIG5vdCBhY2NlcHRlZCB3aXRoIGFueSBvdGhlciBmb3JtYXQuICBXaGVuIHByb3ZpZGVkLCB0aGlzIHNob3VsZCBiZSBhCisgICAgICAgIHNlcXVlbmNlIG9mIGRpY3RzLCBlYWNoIGluZGljYXRpbmcgdGhlIElEIGFuZCBvcHRpb25zIGZvciBhIHNpbmdsZQorICAgICAgICBmaWx0ZXIuCisKK0NyZWF0ZSBhIGRlY29tcHJlc3NvciBvYmplY3QgZm9yIGRlY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LgorCitGb3Igb25lLXNob3QgZGVjb21wcmVzc2lvbiwgdXNlIHRoZSBkZWNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIGludAotRGVjb21wcmVzc29yX2luaXQoRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK19sem1hX0xaTUFEZWNvbXByZXNzb3JfX19pbml0X19faW1wbChEZWNvbXByZXNzb3IgKnNlbGYsIGludCBmb3JtYXQsIFB5T2JqZWN0ICptZW1saW1pdCwgUHlPYmplY3QgKmZpbHRlcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWIxMTlmNmYyY2MyZDdhOCBpbnB1dD00NThjYTYxMzJlZjI5ODAxXSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmFyZ19uYW1lc1tdID0geyJmb3JtYXQiLCAibWVtbGltaXQiLCAiZmlsdGVycyIsIE5VTEx9OwogICAgIGNvbnN0IHVpbnQzMl90IGRlY29kZXJfZmxhZ3MgPSBMWk1BX1RFTExfQU5ZX0NIRUNLIHwgTFpNQV9URUxMX05PX0NIRUNLOwotICAgIGludCBmb3JtYXQgPSBGT1JNQVRfQVVUTzsKLSAgICB1aW50NjRfdCBtZW1saW1pdCA9IFVJTlQ2NF9NQVg7Ci0gICAgUHlPYmplY3QgKm1lbWxpbWl0X29iaiA9IFB5X05vbmU7Ci0gICAgUHlPYmplY3QgKmZpbHRlcnNwZWNzID0gUHlfTm9uZTsKKyAgICB1aW50NjRfdCBtZW1saW1pdF8gPSBVSU5UNjRfTUFYOwogICAgIGx6bWFfcmV0IGx6cmV0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ8aU9POkxaTUFEZWNvbXByZXNzb3IiLCBhcmdfbmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdCwgJm1lbWxpbWl0X29iaiwgJmZpbHRlcnNwZWNzKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgaWYgKG1lbWxpbWl0X29iaiAhPSBQeV9Ob25lKSB7CisgICAgaWYgKG1lbWxpbWl0ICE9IFB5X05vbmUpIHsKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGT1JNQVRfUkFXKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNwZWNpZnkgbWVtb3J5IGxpbWl0IHdpdGggRk9STUFUX1JBVyIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIG1lbWxpbWl0ID0gUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyhtZW1saW1pdF9vYmopOworICAgICAgICBtZW1saW1pdF8gPSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKG1lbWxpbWl0KTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKGZvcm1hdCA9PSBGT1JNQVRfUkFXICYmIGZpbHRlcnNwZWNzID09IFB5X05vbmUpIHsKKyAgICBpZiAoZm9ybWF0ID09IEZPUk1BVF9SQVcgJiYgZmlsdGVycyA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIk11c3Qgc3BlY2lmeSBmaWx0ZXJzIGZvciBGT1JNQVRfUkFXIik7CiAgICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgaWYgKGZvcm1hdCAhPSBGT1JNQVRfUkFXICYmIGZpbHRlcnNwZWNzICE9IFB5X05vbmUpIHsKKyAgICB9IGVsc2UgaWYgKGZvcm1hdCAhPSBGT1JNQVRfUkFXICYmIGZpbHRlcnMgIT0gUHlfTm9uZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc3BlY2lmeSBmaWx0ZXJzIGV4Y2VwdCB3aXRoIEZPUk1BVF9SQVciKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAorICAgIHNlbGYtPmFsbG9jLm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+YWxsb2MuYWxsb2MgPSBQeUx6bWFfTWFsbG9jOworICAgIHNlbGYtPmFsbG9jLmZyZWUgPSBQeUx6bWFfRnJlZTsKKyAgICBzZWxmLT5senMuYWxsb2NhdG9yID0gJnNlbGYtPmFsbG9jOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwogICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKQEAgLTk1NCwyNyArMTA3MSwyNyBAQAogCiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICAgICAgY2FzZSBGT1JNQVRfQVVUTzoKLSAgICAgICAgICAgIGx6cmV0ID0gbHptYV9hdXRvX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXQsIGRlY29kZXJfZmxhZ3MpOworICAgICAgICAgICAgbHpyZXQgPSBsem1hX2F1dG9fZGVjb2Rlcigmc2VsZi0+bHpzLCBtZW1saW1pdF8sIGRlY29kZXJfZmxhZ3MpOwogICAgICAgICAgICAgaWYgKGNhdGNoX2x6bWFfZXJyb3IobHpyZXQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgY2FzZSBGT1JNQVRfWFo6Ci0gICAgICAgICAgICBsenJldCA9IGx6bWFfc3RyZWFtX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXQsIGRlY29kZXJfZmxhZ3MpOworICAgICAgICAgICAgbHpyZXQgPSBsem1hX3N0cmVhbV9kZWNvZGVyKCZzZWxmLT5senMsIG1lbWxpbWl0XywgZGVjb2Rlcl9mbGFncyk7CiAgICAgICAgICAgICBpZiAoY2F0Y2hfbHptYV9lcnJvcihsenJldCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBjYXNlIEZPUk1BVF9BTE9ORToKICAgICAgICAgICAgIHNlbGYtPmNoZWNrID0gTFpNQV9DSEVDS19OT05FOwotICAgICAgICAgICAgbHpyZXQgPSBsem1hX2Fsb25lX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXQpOworICAgICAgICAgICAgbHpyZXQgPSBsem1hX2Fsb25lX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXRfKTsKICAgICAgICAgICAgIGlmIChjYXRjaF9sem1hX2Vycm9yKGx6cmV0KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGNhc2UgRk9STUFUX1JBVzoKICAgICAgICAgICAgIHNlbGYtPmNoZWNrID0gTFpNQV9DSEVDS19OT05FOwotICAgICAgICAgICAgaWYgKERlY29tcHJlc3Nvcl9pbml0X3Jhdygmc2VsZi0+bHpzLCBmaWx0ZXJzcGVjcykgPT0gLTEpCisgICAgICAgICAgICBpZiAoRGVjb21wcmVzc29yX2luaXRfcmF3KCZzZWxmLT5senMsIGZpbHRlcnMpID09IC0xKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEwMDYsOCArMTEyMyw3IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBEZWNvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbilEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICBEZWNvbXByZXNzb3JfZGVjb21wcmVzc19kb2N9LAorICAgIF9MWk1BX0xaTUFERUNPTVBSRVNTT1JfREVDT01QUkVTU19NRVRIT0RERUYKICAgICB7Il9fZ2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilEZWNvbXByZXNzb3JfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKICAgICB7TlVMTH0KIH07CkBAIC0xMDMxLDI3ICsxMTQ3LDYgQEAKICAgICB7TlVMTH0KIH07CiAKLVB5RG9jX1NUUlZBUihEZWNvbXByZXNzb3JfZG9jLAotIkxaTUFEZWNvbXByZXNzb3IoZm9ybWF0PUZPUk1BVF9BVVRPLCBtZW1saW1pdD1Ob25lLCBmaWx0ZXJzPU5vbmUpXG4iCi0iXG4iCi0iQ3JlYXRlIGEgZGVjb21wcmVzc29yIG9iamVjdCBmb3IgZGVjb21wcmVzc2luZyBkYXRhIGluY3JlbWVudGFsbHkuXG4iCi0iXG4iCi0iZm9ybWF0IHNwZWNpZmllcyB0aGUgY29udGFpbmVyIGZvcm1hdCBvZiB0aGUgaW5wdXQgc3RyZWFtLiBJZiB0aGlzIGlzXG4iCi0iRk9STUFUX0FVVE8gKHRoZSBkZWZhdWx0KSwgdGhlIGRlY29tcHJlc3NvciB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0XG4iCi0id2hldGhlciB0aGUgaW5wdXQgaXMgRk9STUFUX1haIG9yIEZPUk1BVF9BTE9ORS4gU3RyZWFtcyBjcmVhdGVkIHdpdGhcbiIKLSJGT1JNQVRfUkFXIGNhbm5vdCBiZSBhdXRvZGV0ZWN0ZWQuXG4iCi0iXG4iCi0ibWVtbGltaXQgY2FuIGJlIHNwZWNpZmllZCB0byBsaW1pdCB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHRoZVxuIgotImRlY29tcHJlc3Nvci4gVGhpcyB3aWxsIGNhdXNlIGRlY29tcHJlc3Npb24gdG8gZmFpbCBpZiB0aGUgaW5wdXRcbiIKLSJjYW5ub3QgYmUgZGVjb21wcmVzc2VkIHdpdGhpbiB0aGUgZ2l2ZW4gbGltaXQuXG4iCi0iXG4iCi0iZmlsdGVycyBzcGVjaWZpZXMgYSBjdXN0b20gZmlsdGVyIGNoYWluLiBUaGlzIGFyZ3VtZW50IGlzIHJlcXVpcmVkIGZvclxuIgotIkZPUk1BVF9SQVcsIGFuZCBub3QgYWNjZXB0ZWQgd2l0aCBhbnkgb3RoZXIgZm9ybWF0LiBXaGVuIHByb3ZpZGVkLFxuIgotInRoaXMgc2hvdWxkIGJlIGEgc2VxdWVuY2Ugb2YgZGljdHMsIGVhY2ggaW5kaWNhdGluZyB0aGUgSUQgYW5kIG9wdGlvbnNcbiIKLSJmb3IgYSBzaW5nbGUgZmlsdGVyLlxuIgotIlxuIgotIkZvciBvbmUtc2hvdCBkZWNvbXByZXNzaW9uLCB1c2UgdGhlIGRlY29tcHJlc3MoKSBmdW5jdGlvbiBpbnN0ZWFkLlxuIik7Ci0KIHN0YXRpYyBQeVR5cGVPYmplY3QgRGVjb21wcmVzc29yX3R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIl9sem1hLkxaTUFEZWNvbXByZXNzb3IiLCAgICAgICAgICAgLyogdHBfbmFtZSAqLwpAQCAtMTA3Myw3ICsxMTY4LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCi0gICAgRGVjb21wcmVzc29yX2RvYywgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KQEAgLTEwODgsNyArMTE4Myw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgIChpbml0cHJvYylEZWNvbXByZXNzb3JfaW5pdCwgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICBfbHptYV9MWk1BRGVjb21wcmVzc29yX19faW5pdF9fLCAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KIH07CkBAIC0xMDk2LDQ4ICsxMTkxLDQyIEBACiAKIC8qIE1vZHVsZS1sZXZlbCBmdW5jdGlvbnMuICovCiAKLVB5RG9jX1NUUlZBUihpc19jaGVja19zdXBwb3J0ZWRfZG9jLAotImlzX2NoZWNrX3N1cHBvcnRlZChjaGVja19pZCkgLT4gYm9vbFxuIgotIlxuIgotIlRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gaW50ZWdyaXR5IGNoZWNrIGlzIHN1cHBvcnRlZC5cbiIKLSJcbiIKLSJBbHdheXMgcmV0dXJucyBUcnVlIGZvciBDSEVDS19OT05FIGFuZCBDSEVDS19DUkMzMi5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2x6bWEuaXNfY2hlY2tfc3VwcG9ydGVkCisgICAgY2hlY2tfaWQ6IGludAorICAgIC8KKworVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiBpbnRlZ3JpdHkgY2hlY2sgaXMgc3VwcG9ydGVkLgorCitBbHdheXMgcmV0dXJucyBUcnVlIGZvciBDSEVDS19OT05FIGFuZCBDSEVDS19DUkMzMi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWlzX2NoZWNrX3N1cHBvcnRlZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgY2hlY2tfaWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmI4MjhlOTBlMDBhZDk2ZSBpbnB1dD01NTE4Mjk3Yjk3YjIzMThmXSovCiB7Ci0gICAgaW50IGNoZWNrX2lkOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmlzX2NoZWNrX3N1cHBvcnRlZCIsICZjaGVja19pZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhsem1hX2NoZWNrX2lzX3N1cHBvcnRlZChjaGVja19pZCkpOwogfQogCiAKLVB5RG9jX1NUUlZBUihfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2RvYywKLSJfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGZpbHRlcikgLT4gYnl0ZXNcbiIKLSJcbiIKLSJSZXR1cm4gYSBieXRlcyBvYmplY3QgZW5jb2RpbmcgdGhlIG9wdGlvbnMgKHByb3BlcnRpZXMpIG9mIHRoZSBmaWx0ZXJcbiIKLSJzcGVjaWZpZWQgYnkgKmZpbHRlciogKGEgZGljdCkuXG4iCi0iXG4iCi0iVGhlIHJlc3VsdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmaWx0ZXIgSUQgaXRzZWxmLCBvbmx5IHRoZSBvcHRpb25zLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzCisgICAgZmlsdGVyOiBsem1hX2ZpbHRlcihjX2RlZmF1bHQ9IntMWk1BX1ZMSV9VTktOT1dOLCBOVUxMfSIpCisgICAgLworCitSZXR1cm4gYSBieXRlcyBvYmplY3QgZW5jb2RpbmcgdGhlIG9wdGlvbnMgKHByb3BlcnRpZXMpIG9mIHRoZSBmaWx0ZXIgc3BlY2lmaWVkIGJ5ICpmaWx0ZXIqIChhIGRpY3QpLgorCitUaGUgcmVzdWx0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZpbHRlciBJRCBpdHNlbGYsIG9ubHkgdGhlIG9wdGlvbnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBsem1hX2ZpbHRlciBmaWx0ZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjVmZTY5MGFjZDZiNjFkMSBpbnB1dD1kNGM2NGYxYjU1N2M3N2Q0XSovCiB7Ci0gICAgUHlPYmplY3QgKmZpbHRlcnNwZWM7Ci0gICAgbHptYV9maWx0ZXIgZmlsdGVyOwogICAgIGx6bWFfcmV0IGx6cmV0OwogICAgIHVpbnQzMl90IGVuY29kZWRfc2l6ZTsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzIiwgJmZpbHRlcnNwZWMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChwYXJzZV9maWx0ZXJfc3BlYygmZmlsdGVyLCBmaWx0ZXJzcGVjKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGx6cmV0ID0gbHptYV9wcm9wZXJ0aWVzX3NpemUoJmVuY29kZWRfc2l6ZSwgJmZpbHRlcik7CiAgICAgaWYgKGNhdGNoX2x6bWFfZXJyb3IobHpyZXQpKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTE1MSwzNyArMTI0MCwzNiBAQAogICAgIGlmIChjYXRjaF9sem1hX2Vycm9yKGx6cmV0KSkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIFB5TWVtX0ZyZWUoZmlsdGVyLm9wdGlvbnMpOwogICAgIHJldHVybiByZXN1bHQ7CiAKIGVycm9yOgogICAgIFB5X1hERUNSRUYocmVzdWx0KTsKLSAgICBQeU1lbV9GcmVlKGZpbHRlci5vcHRpb25zKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAogCi1QeURvY19TVFJWQVIoX2RlY29kZV9maWx0ZXJfcHJvcGVydGllc19kb2MsCi0iX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhmaWx0ZXJfaWQsIGVuY29kZWRfcHJvcHMpIC0+IGRpY3RcbiIKLSJcbiIKLSJSZXR1cm4gYSBkaWN0IGRlc2NyaWJpbmcgYSBmaWx0ZXIgd2l0aCBJRCAqZmlsdGVyX2lkKiwgYW5kIG9wdGlvbnNcbiIKLSIocHJvcGVydGllcykgZGVjb2RlZCBmcm9tIHRoZSBieXRlcyBvYmplY3QgKmVuY29kZWRfcHJvcHMqLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzCisgICAgZmlsdGVyX2lkOiBsem1hX3ZsaQorICAgIGVuY29kZWRfcHJvcHM6IFB5X2J1ZmZlcgorICAgIC8KKworUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGVuY29kaW5nIHRoZSBvcHRpb25zIChwcm9wZXJ0aWVzKSBvZiB0aGUgZmlsdGVyIHNwZWNpZmllZCBieSAqZmlsdGVyKiAoYSBkaWN0KS4KKworVGhlIHJlc3VsdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmaWx0ZXIgSUQgaXRzZWxmLCBvbmx5IHRoZSBvcHRpb25zLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgbHptYV92bGkgZmlsdGVyX2lkLCBQeV9idWZmZXIgKmVuY29kZWRfcHJvcHMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjM1ZjdmNTM0NWQ0ODc0NCBpbnB1dD0yNDY0MTA4MDA3ODIxNjBjXSovCiB7Ci0gICAgUHlfYnVmZmVyIGVuY29kZWRfcHJvcHM7CiAgICAgbHptYV9maWx0ZXIgZmlsdGVyOwogICAgIGx6bWFfcmV0IGx6cmV0OwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJnkqOl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsem1hX3ZsaV9jb252ZXJ0ZXIsICZmaWx0ZXIuaWQsICZlbmNvZGVkX3Byb3BzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZmlsdGVyLmlkID0gZmlsdGVyX2lkOwogCiAgICAgbHpyZXQgPSBsem1hX3Byb3BlcnRpZXNfZGVjb2RlKAotICAgICAgICAgICAgJmZpbHRlciwgTlVMTCwgZW5jb2RlZF9wcm9wcy5idWYsIGVuY29kZWRfcHJvcHMubGVuKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZlbmNvZGVkX3Byb3BzKTsKKyAgICAgICAgICAgICZmaWx0ZXIsIE5VTEwsIGVuY29kZWRfcHJvcHMtPmJ1ZiwgZW5jb2RlZF9wcm9wcy0+bGVuKTsKICAgICBpZiAoY2F0Y2hfbHptYV9lcnJvcihsenJldCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMTk3LDEyICsxMjg1LDkgQEAKIC8qIE1vZHVsZSBpbml0aWFsaXphdGlvbi4gKi8KIAogc3RhdGljIFB5TWV0aG9kRGVmIG1vZHVsZV9tZXRob2RzW10gPSB7Ci0gICAgeyJpc19jaGVja19zdXBwb3J0ZWQiLCAoUHlDRnVuY3Rpb24paXNfY2hlY2tfc3VwcG9ydGVkLAotICAgICBNRVRIX1ZBUkFSR1MsIGlzX2NoZWNrX3N1cHBvcnRlZF9kb2N9LAotICAgIHsiX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyIsIChQeUNGdW5jdGlvbilfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzLAotICAgICBNRVRIX1ZBUkFSR1MsIF9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfZG9jfSwKLSAgICB7Il9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLCAoUHlDRnVuY3Rpb24pX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcywKLSAgICAgTUVUSF9WQVJBUkdTLCBfZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2RvY30sCisgICAgX0xaTUFfSVNfQ0hFQ0tfU1VQUE9SVEVEX01FVEhPRERFRgorICAgIF9MWk1BX19FTkNPREVfRklMVEVSX1BST1BFUlRJRVNfTUVUSE9EREVGCisgICAgX0xaTUFfX0RFQ09ERV9GSUxURVJfUFJPUEVSVElFU19NRVRIT0RERUYKICAgICB7TlVMTH0KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYwppbmRleCA5NDYwYzg5Li4xYWFmMzYwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jCkBAIC0xMCwyNSArMTAsMjMgQEAKICNpbmNsdWRlICJtdWx0aXByb2Nlc3NpbmcuaCIKIAogCi1QeU9iamVjdCAqUHJvY2Vzc0Vycm9yLCAqQnVmZmVyVG9vU2hvcnQ7Ci0KIC8qCiAgKiBGdW5jdGlvbiB3aGljaCByYWlzZXMgZXhjZXB0aW9ucyBiYXNlZCBvbiBlcnJvciBjb2RlcwogICovCiAKIFB5T2JqZWN0ICoKLW1wX1NldEVycm9yKFB5T2JqZWN0ICpUeXBlLCBpbnQgbnVtKQorX1B5TXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pCiB7CiAgICAgc3dpdGNoIChudW0pIHsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgY2FzZSBNUF9TVEFOREFSRF9FUlJPUjoKICAgICAgICAgaWYgKFR5cGUgPT0gTlVMTCkKLSAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19XaW5kb3dzRXJyb3I7CisgICAgICAgICAgICBUeXBlID0gUHlFeGNfT1NFcnJvcjsKICAgICAgICAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoVHlwZSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTVBfU09DS0VUX0VSUk9SOgogICAgICAgICBpZiAoVHlwZSA9PSBOVUxMKQotICAgICAgICAgICAgVHlwZSA9IFB5RXhjX1dpbmRvd3NFcnJvcjsKKyAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19PU0Vycm9yOwogICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihUeXBlLCBXU0FHZXRMYXN0RXJyb3IoKSk7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UgLyogIU1TX1dJTkRPV1MgKi8KQEAgLTEwMSwxMyArOTksMTUgQEAKIHsKICAgICBIQU5ETEUgaGFuZGxlOwogICAgIFB5X2J1ZmZlciBidWY7Ci0gICAgaW50IHJldDsKKyAgICBpbnQgcmV0LCBsZW5ndGg7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgInkqOnNlbmQiICwgJmhhbmRsZSwgJmJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgbGVuZ3RoID0gKGludClQeV9NSU4oYnVmLmxlbiwgSU5UX01BWCk7CisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmV0ID0gc2VuZCgoU09DS0VUKSBoYW5kbGUsIGJ1Zi5idWYsIGJ1Zi5sZW4sIDApOworICAgIHJldCA9IHNlbmQoKFNPQ0tFVCkgaGFuZGxlLCBidWYuYnVmLCBsZW5ndGgsIDApOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwpAQCAtMTI4LDYgKzEyOCw3IEBACiAgICAgeyJyZWN2IiwgbXVsdGlwcm9jZXNzaW5nX3JlY3YsIE1FVEhfVkFSQVJHUywgIiJ9LAogICAgIHsic2VuZCIsIG11bHRpcHJvY2Vzc2luZ19zZW5kLCBNRVRIX1ZBUkFSR1MsICIifSwKICNlbmRpZgorICAgIHsic2VtX3VubGluayIsIF9QeU1wX3NlbV91bmxpbmssIE1FVEhfVkFSQVJHUywgIiJ9LAogICAgIHtOVUxMfQogfTsKIApAQCAtMTU5LDE5ICsxNjAsMTIgQEAKICAgICBpZiAoIW1vZHVsZSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBHZXQgY29weSBvZiBCdWZmZXJUb29TaG9ydCAqLwotICAgIHRlbXAgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIm11bHRpcHJvY2Vzc2luZyIpOwotICAgIGlmICghdGVtcCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgQnVmZmVyVG9vU2hvcnQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRlbXAsICJCdWZmZXJUb29TaG9ydCIpOwotICAgIFB5X1hERUNSRUYodGVtcCk7Ci0KICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKGRlZmluZWQoSEFWRV9TRU1fT1BFTikgJiYgIWRlZmluZWQoUE9TSVhfU0VNQVBIT1JFU19OT1RfRU5BQkxFRCkpCi0gICAgLyogQWRkIFNlbUxvY2sgdHlwZSB0byBtb2R1bGUgKi8KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZTZW1Mb2NrVHlwZSkgPCAwKQorICAgIC8qIEFkZCBfUHlNcF9TZW1Mb2NrIHR5cGUgdG8gbW9kdWxlICovCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmX1B5TXBfU2VtTG9ja1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfSU5DUkVGKCZTZW1Mb2NrVHlwZSk7CisgICAgUHlfSU5DUkVGKCZfUHlNcF9TZW1Mb2NrVHlwZSk7CiAgICAgewogICAgICAgICBQeU9iamVjdCAqcHlfc2VtX3ZhbHVlX21heDsKICAgICAgICAgLyogU29tZSBzeXN0ZW1zIGRlZmluZSBTRU1fVkFMVUVfTUFYIGFzIGFuIHVuc2lnbmVkIHZhbHVlIHRoYXQKQEAgLTE4MiwxMCArMTc2LDEwIEBACiAgICAgICAgICAgICBweV9zZW1fdmFsdWVfbWF4ID0gUHlMb25nX0Zyb21Mb25nKFNFTV9WQUxVRV9NQVgpOwogICAgICAgICBpZiAocHlfc2VtX3ZhbHVlX21heCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKFNlbUxvY2tUeXBlLnRwX2RpY3QsICJTRU1fVkFMVUVfTUFYIiwKKyAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoX1B5TXBfU2VtTG9ja1R5cGUudHBfZGljdCwgIlNFTV9WQUxVRV9NQVgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweV9zZW1fdmFsdWVfbWF4KTsKICAgICB9Ci0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG1vZHVsZSwgIlNlbUxvY2siLCAoUHlPYmplY3QqKSZTZW1Mb2NrVHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG1vZHVsZSwgIlNlbUxvY2siLCAoUHlPYmplY3QqKSZfUHlNcF9TZW1Mb2NrVHlwZSk7CiAjZW5kaWYKIAogICAgIC8qIEFkZCBjb25maWd1cmF0aW9uIG1hY3JvcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oCmluZGV4IGUzZGU5YmEuLjlhZWVhOGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaAorKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmgKQEAgLTkxLDIzICs5MSwxMyBAQAogI2RlZmluZSBNUF9TT0NLRVRfRVJST1IgKC0xMDAyKQogI2RlZmluZSBNUF9FWENFUFRJT05fSEFTX0JFRU5fU0VUICgtMTAwMykKIAotUHlPYmplY3QgKm1wX1NldEVycm9yKFB5T2JqZWN0ICpUeXBlLCBpbnQgbnVtKTsKK1B5T2JqZWN0ICpfUHlNcF9TZXRFcnJvcihQeU9iamVjdCAqVHlwZSwgaW50IG51bSk7CiAKIC8qCiAgKiBFeHRlcm5zIC0gbm90IGFsbCB3aWxsIHJlYWxseSBleGlzdCBvbiBhbGwgcGxhdGZvcm1zCiAgKi8KIAotZXh0ZXJuIFB5T2JqZWN0ICpCdWZmZXJUb29TaG9ydDsKLWV4dGVybiBQeVR5cGVPYmplY3QgU2VtTG9ja1R5cGU7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFBpcGVDb25uZWN0aW9uVHlwZTsKLQotLyoKLSAqIE1pc2NlbGxhbmVvdXMKLSAqLwotCi0jaWZuZGVmIE1JTgotIyAgZGVmaW5lIE1JTih4LCB5KSAoKHgpIDwgKHkpID8geCA6IHkpCi0jICBkZWZpbmUgTUFYKHgsIHkpICgoeCkgPiAoeSkgPyB4IDogeSkKLSNlbmRpZgorZXh0ZXJuIFB5VHlwZU9iamVjdCBfUHlNcF9TZW1Mb2NrVHlwZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5TXBfc2VtX3VubGluayhQeU9iamVjdCAqaWdub3JlLCBQeU9iamVjdCAqYXJncyk7CiAKICNlbmRpZiAvKiBNVUxUSVBST0NFU1NJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCmluZGV4IDJjMmIwMjAuLmRlODVhOTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYworKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAgICBpbnQgY291bnQ7CiAgICAgaW50IG1heHZhbHVlOwogICAgIGludCBraW5kOworICAgIGNoYXIgKm5hbWU7CiB9IFNlbUxvY2tPYmplY3Q7CiAKICNkZWZpbmUgSVNNSU5FKG8pIChvLT5jb3VudCA+IDAgJiYgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpID09IG8tPmxhc3RfdGlkKQpAQCAtNDMsNyArNDQsNyBAQAogewogICAgIGxvbmcgcHJldmlvdXM7CiAKLSAgICBzd2l0Y2ggKFdhaXRGb3JTaW5nbGVPYmplY3QoaGFuZGxlLCAwKSkgeworICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdEV4KGhhbmRsZSwgMCwgRkFMU0UpKSB7CiAgICAgY2FzZSBXQUlUX09CSkVDVF8wOgogICAgICAgICBpZiAoIVJlbGVhc2VTZW1hcGhvcmUoaGFuZGxlLCAxLCAmcHJldmlvdXMpKQogICAgICAgICAgICAgcmV0dXJuIE1QX1NUQU5EQVJEX0VSUk9SOwpAQCAtOTksNyArMTAwLDcgQEAKICAgICB9CiAKICAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGNhbiBhY3F1aXJlIHdpdGhvdXQgcmVsZWFzaW5nIHRoZSBHSUwgYW5kIGJsb2NraW5nICovCi0gICAgaWYgKFdhaXRGb3JTaW5nbGVPYmplY3Qoc2VsZi0+aGFuZGxlLCAwKSA9PSBXQUlUX09CSkVDVF8wKSB7CisgICAgaWYgKFdhaXRGb3JTaW5nbGVPYmplY3RFeChzZWxmLT5oYW5kbGUsIDAsIEZBTFNFKSA9PSBXQUlUX09CSkVDVF8wKSB7CiAgICAgICAgIHNlbGYtPmxhc3RfdGlkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CiAgICAgICAgICsrc2VsZi0+Y291bnQ7CiAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwpAQCAtMTE4LDcgKzExOSw3IEBACiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGlmIChzaWdpbnRfZXZlbnQgIT0gTlVMTCkKICAgICAgICAgUmVzZXRFdmVudChzaWdpbnRfZXZlbnQpOwotICAgIHJlcyA9IFdhaXRGb3JNdWx0aXBsZU9iamVjdHMobmhhbmRsZXMsIGhhbmRsZXMsIEZBTFNFLCBmdWxsX21zZWNzKTsKKyAgICByZXMgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzRXgobmhhbmRsZXMsIGhhbmRsZXMsIEZBTFNFLCBmdWxsX21zZWNzLCBGQUxTRSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIC8qIGhhbmRsZSByZXN1bHQgKi8KQEAgLTIwMCw3ICsyMDEsNyBAQAogI2lmbmRlZiBIQVZFX1NFTV9USU1FRFdBSVQKICMgIGRlZmluZSBzZW1fdGltZWR3YWl0KHNlbSxkZWFkbGluZSkgc2VtX3RpbWVkd2FpdF9zYXZlKHNlbSxkZWFkbGluZSxfc2F2ZSkKIAotaW50CitzdGF0aWMgaW50CiBzZW1fdGltZWR3YWl0X3NhdmUoc2VtX3QgKnNlbSwgc3RydWN0IHRpbWVzcGVjICpkZWFkbGluZSwgUHlUaHJlYWRTdGF0ZSAqX3NhdmUpCiB7CiAgICAgaW50IHJlczsKQEAgLTM5Nyw3ICszOTgsOCBAQAogICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1uZXdzZW1sb2Nrb2JqZWN0KFB5VHlwZU9iamVjdCAqdHlwZSwgU0VNX0hBTkRMRSBoYW5kbGUsIGludCBraW5kLCBpbnQgbWF4dmFsdWUpCituZXdzZW1sb2Nrb2JqZWN0KFB5VHlwZU9iamVjdCAqdHlwZSwgU0VNX0hBTkRMRSBoYW5kbGUsIGludCBraW5kLCBpbnQgbWF4dmFsdWUsCisgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUpCiB7CiAgICAgU2VtTG9ja09iamVjdCAqc2VsZjsKIApAQCAtNDA5LDIxICs0MTEsMjIgQEAKICAgICBzZWxmLT5jb3VudCA9IDA7CiAgICAgc2VsZi0+bGFzdF90aWQgPSAwOwogICAgIHNlbGYtPm1heHZhbHVlID0gbWF4dmFsdWU7CisgICAgc2VsZi0+bmFtZSA9IG5hbWU7CiAgICAgcmV0dXJuIChQeU9iamVjdCopc2VsZjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIHNlbWxvY2tfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIGNoYXIgYnVmZmVyWzI1Nl07CiAgICAgU0VNX0hBTkRMRSBoYW5kbGUgPSBTRU1fRkFJTEVEOwotICAgIGludCBraW5kLCBtYXh2YWx1ZSwgdmFsdWU7CisgICAgaW50IGtpbmQsIG1heHZhbHVlLCB2YWx1ZSwgdW5saW5rOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJraW5kIiwgInZhbHVlIiwgIm1heHZhbHVlIiwgTlVMTH07Ci0gICAgc3RhdGljIGludCBjb3VudGVyID0gMDsKKyAgICBjaGFyICpuYW1lLCAqbmFtZV9jb3B5ID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImtpbmQiLCAidmFsdWUiLCAibWF4dmFsdWUiLCAibmFtZSIsICJ1bmxpbmsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJpaWkiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtpbmQsICZ2YWx1ZSwgJm1heHZhbHVlKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiaWlpc2kiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtpbmQsICZ2YWx1ZSwgJm1heHZhbHVlLCAmbmFtZSwgJnVubGluaykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKGtpbmQgIT0gUkVDVVJTSVZFX01VVEVYICYmIGtpbmQgIT0gU0VNQVBIT1JFKSB7CkBAIC00MzEsMTggKzQzNCwyMyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBQeU9TX3NucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIvbXAlbGQtJWQiLCAobG9uZylnZXRwaWQoKSwgY291bnRlcisrKTsKKyAgICBpZiAoIXVubGluaykgeworICAgICAgICBuYW1lX2NvcHkgPSBQeU1lbV9NYWxsb2Moc3RybGVuKG5hbWUpICsgMSk7CisgICAgICAgIGlmIChuYW1lX2NvcHkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbHVyZTsKKyAgICAgICAgc3RyY3B5KG5hbWVfY29weSwgbmFtZSk7CisgICAgfQogCiAgICAgU0VNX0NMRUFSX0VSUk9SKCk7Ci0gICAgaGFuZGxlID0gU0VNX0NSRUFURShidWZmZXIsIHZhbHVlLCBtYXh2YWx1ZSk7CisgICAgaGFuZGxlID0gU0VNX0NSRUFURShuYW1lLCB2YWx1ZSwgbWF4dmFsdWUpOwogICAgIC8qIE9uIFdpbmRvd3Mgd2Ugc2hvdWxkIGZhaWwgaWYgR2V0TGFzdEVycm9yKCk9PUVSUk9SX0FMUkVBRFlfRVhJU1RTICovCiAgICAgaWYgKGhhbmRsZSA9PSBTRU1fRkFJTEVEIHx8IFNFTV9HRVRfTEFTVF9FUlJPUigpICE9IDApCiAgICAgICAgIGdvdG8gZmFpbHVyZTsKIAotICAgIGlmIChTRU1fVU5MSU5LKGJ1ZmZlcikgPCAwKQorICAgIGlmICh1bmxpbmsgJiYgU0VNX1VOTElOSyhuYW1lKSA8IDApCiAgICAgICAgIGdvdG8gZmFpbHVyZTsKIAotICAgIHJlc3VsdCA9IG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSk7CisgICAgcmVzdWx0ID0gbmV3c2VtbG9ja29iamVjdCh0eXBlLCBoYW5kbGUsIGtpbmQsIG1heHZhbHVlLCBuYW1lX2NvcHkpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBnb3RvIGZhaWx1cmU7CiAKQEAgLTQ1MSw3ICs0NTksOCBAQAogICBmYWlsdXJlOgogICAgIGlmIChoYW5kbGUgIT0gU0VNX0ZBSUxFRCkKICAgICAgICAgU0VNX0NMT1NFKGhhbmRsZSk7Ci0gICAgbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgIFB5TWVtX0ZyZWUobmFtZV9jb3B5KTsKKyAgICBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQ2MCwxMiArNDY5LDMwIEBACiB7CiAgICAgU0VNX0hBTkRMRSBoYW5kbGU7CiAgICAgaW50IGtpbmQsIG1heHZhbHVlOworICAgIGNoYXIgKm5hbWUsICpuYW1lX2NvcHkgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfU0VNX0hBTkRMRSAiaWkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAma2luZCwgJm1heHZhbHVlKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9TRU1fSEFORExFICJpaXoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAma2luZCwgJm1heHZhbHVlLCAmbmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmV0dXJuIG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSk7CisgICAgaWYgKG5hbWUgIT0gTlVMTCkgeworICAgICAgICBuYW1lX2NvcHkgPSBQeU1lbV9NYWxsb2Moc3RybGVuKG5hbWUpICsgMSk7CisgICAgICAgIGlmIChuYW1lX2NvcHkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBzdHJjcHkobmFtZV9jb3B5LCBuYW1lKTsKKyAgICB9CisKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIGlmIChuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgaGFuZGxlID0gc2VtX29wZW4obmFtZSwgMCk7CisgICAgICAgIGlmIChoYW5kbGUgPT0gU0VNX0ZBSUxFRCkgeworICAgICAgICAgICAgUHlNZW1fRnJlZShuYW1lX2NvcHkpOworICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSwgbmFtZV9jb3B5KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ3Myw2ICs1MDAsNyBAQAogewogICAgIGlmIChzZWxmLT5oYW5kbGUgIT0gU0VNX0ZBSUxFRCkKICAgICAgICAgU0VNX0NMT1NFKHNlbGYtPmhhbmRsZSk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5uYW1lKTsKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKQEAgLTQ5OCw3ICs1MjYsNyBAQAogI2Vsc2UKICAgICBpbnQgc3ZhbDsKICAgICBpZiAoU0VNX0dFVFZBTFVFKHNlbGYtPmhhbmRsZSwgJnN2YWwpIDwgMCkKLSAgICAgICAgcmV0dXJuIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICAvKiBzb21lIHBvc2l4IGltcGxlbWVudGF0aW9ucyB1c2UgbmVnYXRpdmUgbnVtYmVycyB0byBpbmRpY2F0ZQogICAgICAgIHRoZSBudW1iZXIgb2Ygd2FpdGluZyB0aHJlYWRzICovCiAgICAgaWYgKHN2YWwgPCAwKQpAQCAtNTE0LDE2ICs1NDIsMTYgQEAKICAgICBpZiAoc2VtX3RyeXdhaXQoc2VsZi0+aGFuZGxlKSA8IDApIHsKICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwotICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICByZXR1cm4gX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzZW1fcG9zdChzZWxmLT5oYW5kbGUpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgICAgICByZXR1cm4gX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiAgICAgfQogI2Vsc2UKICAgICBpbnQgc3ZhbDsKICAgICBpZiAoU0VNX0dFVFZBTFVFKHNlbGYtPmhhbmRsZSwgJnN2YWwpIDwgMCkKLSAgICAgICAgcmV0dXJuIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKChsb25nKXN2YWwgPT0gMCk7CiAjZW5kaWYKIH0KQEAgLTU3NCw2ICs2MDIsOCBAQAogICAgICAiIn0sCiAgICAgeyJtYXh2YWx1ZSIsIFRfSU5ULCBvZmZzZXRvZihTZW1Mb2NrT2JqZWN0LCBtYXh2YWx1ZSksIFJFQURPTkxZLAogICAgICAiIn0sCisgICAgeyJuYW1lIiwgVF9TVFJJTkcsIG9mZnNldG9mKFNlbUxvY2tPYmplY3QsIG5hbWUpLCBSRUFET05MWSwKKyAgICAgIiJ9LAogICAgIHtOVUxMfQogfTsKIApAQCAtNTgxLDcgKzYxMSw3IEBACiAgKiBTZW1hcGhvcmUgdHlwZQogICovCiAKLVB5VHlwZU9iamVjdCBTZW1Mb2NrVHlwZSA9IHsKK1B5VHlwZU9iamVjdCBfUHlNcF9TZW1Mb2NrVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAvKiB0cF9uYW1lICAgICAgICAgICAqLyAiX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrIiwKICAgICAvKiB0cF9iYXNpY3NpemUgICAgICAqLyBzaXplb2YoU2VtTG9ja09iamVjdCksCkBAIC02MjEsMyArNjUxLDIzIEBACiAgICAgLyogdHBfYWxsb2MgICAgICAgICAgKi8gMCwKICAgICAvKiB0cF9uZXcgICAgICAgICAgICAqLyBzZW1sb2NrX25ldywKIH07CisKKy8qCisgKiBGdW5jdGlvbiB0byB1bmxpbmsgc2VtYXBob3JlIG5hbWVzCisgKi8KKworUHlPYmplY3QgKgorX1B5TXBfc2VtX3VubGluayhQeU9iamVjdCAqaWdub3JlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpuYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJm5hbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChTRU1fVU5MSU5LKG5hbWUpIDwgMCkgeworICAgICAgICBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X1JFVFVSTl9OT05FOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fb3Bjb2RlLmMgYi9Nb2R1bGVzL19vcGNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWUzODhmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fb3Bjb2RlLmMKQEAgLTAsMCArMSwxMDkgQEAKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJvcGNvZGUuaCIKKworLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9vcGNvZGUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTExNzQ0MmU2NmViMzc2ZTZdKi8KKworLypbY2xpbmljIGlucHV0XQorCitfb3Bjb2RlLnN0YWNrX2VmZmVjdCAtPiBpbnQKKworICBvcGNvZGU6IGludAorICBvcGFyZzogb2JqZWN0ID0gTm9uZQorICAvCisKK0NvbXB1dGUgdGhlIHN0YWNrIGVmZmVjdCBvZiB0aGUgb3Bjb2RlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX29wY29kZV9zdGFja19lZmZlY3RfX2RvY19fLAorInN0YWNrX2VmZmVjdCgkbW9kdWxlLCBvcGNvZGUsIG9wYXJnPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb21wdXRlIHRoZSBzdGFjayBlZmZlY3Qgb2YgdGhlIG9wY29kZS4iKTsKKworI2RlZmluZSBfT1BDT0RFX1NUQUNLX0VGRkVDVF9NRVRIT0RERUYgICAgXAorICAgIHsic3RhY2tfZWZmZWN0IiwgKFB5Q0Z1bmN0aW9uKV9vcGNvZGVfc3RhY2tfZWZmZWN0LCBNRVRIX1ZBUkFSR1MsIF9vcGNvZGVfc3RhY2tfZWZmZWN0X19kb2NfX30sCisKK3N0YXRpYyBpbnQKK19vcGNvZGVfc3RhY2tfZWZmZWN0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IG9wY29kZSwgUHlPYmplY3QgKm9wYXJnKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19vcGNvZGVfc3RhY2tfZWZmZWN0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBvcGNvZGU7CisgICAgUHlPYmplY3QgKm9wYXJnID0gUHlfTm9uZTsKKyAgICBpbnQgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiaXxPOnN0YWNrX2VmZmVjdCIsCisgICAgICAgICZvcGNvZGUsICZvcGFyZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gX29wY29kZV9zdGFja19lZmZlY3RfaW1wbChtb2R1bGUsIG9wY29kZSwgb3BhcmcpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgaW50Citfb3Bjb2RlX3N0YWNrX2VmZmVjdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBvcGNvZGUsIFB5T2JqZWN0ICpvcGFyZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ZTExMzNmOGQ1ODdiYzY3IGlucHV0PTJkMGE5ZWU1M2MwNDE4ZjVdKi8KK3sKKyAgICBpbnQgZWZmZWN0OworICAgIGludCBvcGFyZ19pbnQgPSAwOworICAgIGlmIChIQVNfQVJHKG9wY29kZSkpIHsKKyAgICAgICAgaWYgKG9wYXJnID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAic3RhY2tfZWZmZWN0OiBvcGNvZGUgcmVxdWlyZXMgb3BhcmcgYnV0IG9wYXJnIHdhcyBub3Qgc3BlY2lmaWVkIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgb3BhcmdfaW50ID0gKGludClQeUxvbmdfQXNMb25nKG9wYXJnKTsKKyAgICAgICAgaWYgKChvcGFyZ19pbnQgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgaWYgKG9wYXJnICE9IFB5X05vbmUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgInN0YWNrX2VmZmVjdDogb3Bjb2RlIGRvZXMgbm90IHBlcm1pdCBvcGFyZyBidXQgb3Bhcmcgd2FzIHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVmZmVjdCA9IFB5Q29tcGlsZV9PcGNvZGVTdGFja0VmZmVjdChvcGNvZGUsIG9wYXJnX2ludCk7CisgICAgaWYgKGVmZmVjdCA9PSBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIG9wY29kZSBvciBvcGFyZyIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gZWZmZWN0OworfQorCisKKworCitzdGF0aWMgUHlNZXRob2REZWYKK29wY29kZV9mdW5jdGlvbnNbXSA9ICB7CisgICAgX09QQ09ERV9TVEFDS19FRkZFQ1RfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEwsIDAsIE5VTEx9Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgb3Bjb2RlbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX29wY29kZSIsCisgICAgIk9wY29kZSBzdXBwb3J0IG1vZHVsZS4iLAorICAgIC0xLAorICAgIG9wY29kZV9mdW5jdGlvbnMsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fb3Bjb2RlKHZvaWQpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmb3Bjb2RlbW9kdWxlKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvb3BlcmF0b3IuYyBiL01vZHVsZXMvX29wZXJhdG9yLmMKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gTW9kdWxlcy9vcGVyYXRvci5jCnJlbmFtZSB0byBNb2R1bGVzL19vcGVyYXRvci5jCmluZGV4IDUxNTZiNmIuLmU4YmVmMDQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvb3BlcmF0b3IuYworKysgYi9Nb2R1bGVzL19vcGVyYXRvci5jCkBAIC0yMDgsNiArMjA4LDMxIEBACiAgICAgcmV0dXJuIChyZXN1bHQgPT0gMCk7CiB9CiAKK1B5RG9jX1NUUlZBUihsZW5ndGhfaGludF9fZG9jX18sCisibGVuZ3RoX2hpbnQob2JqLCBkZWZhdWx0PTApIC0+IGludFxuIgorIlJldHVybiBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIG9iai5cbiIKKyJUaGlzIGlzIHVzZWZ1bCBmb3IgcHJlc2l6aW5nIGNvbnRhaW5lcnMgd2hlbiBidWlsZGluZyBmcm9tIGFuXG4iCisiaXRlcmFibGUuXG4iCisiXG4iCisiSWYgdGhlIG9iamVjdCBzdXBwb3J0cyBsZW4oKSwgdGhlIHJlc3VsdCB3aWxsIGJlXG4iCisiZXhhY3QuIE90aGVyd2lzZSwgaXQgbWF5IG92ZXItIG9yIHVuZGVyLWVzdGltYXRlIGJ5IGFuXG4iCisiYXJiaXRyYXJ5IGFtb3VudC4gVGhlIHJlc3VsdCB3aWxsIGJlIGFuIGludGVnZXIgPj0gMC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICpsZW5ndGhfaGludChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeV9zc2l6ZV90IGRlZmF1bHR2YWx1ZSA9IDAsIHJlczsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98bjpsZW5ndGhfaGludCIsICZvYmosICZkZWZhdWx0dmFsdWUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXMgPSBQeU9iamVjdF9MZW5ndGhIaW50KG9iaiwgZGVmYXVsdHZhbHVlKTsKKyAgICBpZiAocmVzID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKK30KKworCiBQeURvY19TVFJWQVIoY29tcGFyZV9kaWdlc3RfX2RvY19fLAogImNvbXBhcmVfZGlnZXN0KGEsIGIpIC0+IGJvb2xcbiIKICJcbiIKQEAgLTI5NywxNyArMzIyLDE1IEBACiAvKiBvcGVyYXRvciBtZXRob2RzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgc3BhbTEoT1AsRE9DKSB7I09QLCBPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sCi0jZGVmaW5lIHNwYW0yKE9QLEFMVE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsjQUxUT1AsIG9wXyMjT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LAorI2RlZmluZSBzcGFtMihPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LAogI2RlZmluZSBzcGFtMW8oT1AsRE9DKSB7I09QLCBPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sCi0jZGVmaW5lIHNwYW0ybyhPUCxBTFRPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfTywgUHlEb2NfU1RSKERPQyl9LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB7I0FMVE9QLCBvcF8jI09QLCBNRVRIX08sIFB5RG9jX1NUUihET0MpfSwKKyNkZWZpbmUgc3BhbTJvKE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgb3BlcmF0b3JfbWV0aG9kc1tdID0gewogCiBzcGFtMW8odHJ1dGgsCiAgInRydXRoKGEpIC0tIFJldHVybiBUcnVlIGlmIGEgaXMgdHJ1ZSwgRmFsc2Ugb3RoZXJ3aXNlLiIpCi1zcGFtMihjb250YWlucyxfX2NvbnRhaW5zX18sCitzcGFtMihjb250YWlucywKICAiY29udGFpbnMoYSwgYikgLS0gU2FtZSBhcyBiIGluIGEgKG5vdGUgcmV2ZXJzZWQgb3BlcmFuZHMpLiIpCiBzcGFtMShpbmRleE9mLAogICJpbmRleE9mKGEsIGIpIC0tIFJldHVybiB0aGUgZmlyc3QgaW5kZXggb2YgYiBpbiBhLiIpCkBAIC0zMTYsNTYgKzMzOSw1OCBAQAogCiBzcGFtMShpc18sICJpc18oYSwgYikgLS0gU2FtZSBhcyBhIGlzIGIuIikKIHNwYW0xKGlzX25vdCwgImlzX25vdChhLCBiKSAtLSBTYW1lIGFzIGEgaXMgbm90IGIuIikKLXNwYW0ybyhpbmRleCwgX19pbmRleF9fLCAiaW5kZXgoYSkgLS0gU2FtZSBhcyBhLl9faW5kZXhfXygpIikKLXNwYW0yKGFkZCxfX2FkZF9fLCAiYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArIGIuIikKLXNwYW0yKHN1YixfX3N1Yl9fLCAic3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtIGIuIikKLXNwYW0yKG11bCxfX211bF9fLCAibXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqIGIuIikKLXNwYW0yKGZsb29yZGl2LF9fZmxvb3JkaXZfXywgImZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLyBiLiIpCi1zcGFtMih0cnVlZGl2LF9fdHJ1ZWRpdl9fLCAidHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLyBiLiIpCi1zcGFtMihtb2QsX19tb2RfXywgIm1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJSBiLiIpCi1zcGFtMm8obmVnLF9fbmVnX18sICJuZWcoYSkgLS0gU2FtZSBhcyAtYS4iKQotc3BhbTJvKHBvcyxfX3Bvc19fLCAicG9zKGEpIC0tIFNhbWUgYXMgK2EuIikKLXNwYW0ybyhhYnMsX19hYnNfXywgImFicyhhKSAtLSBTYW1lIGFzIGFicyhhKS4iKQotc3BhbTJvKGludixfX2ludl9fLCAiaW52KGEpIC0tIFNhbWUgYXMgfmEuIikKLXNwYW0ybyhpbnZlcnQsX19pbnZlcnRfXywgImludmVydChhKSAtLSBTYW1lIGFzIH5hLiIpCi1zcGFtMihsc2hpZnQsX19sc2hpZnRfXywgImxzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPDwgYi4iKQotc3BhbTIocnNoaWZ0LF9fcnNoaWZ0X18sICJyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+IGIuIikKLXNwYW0ybyhub3RfLF9fbm90X18sICJub3RfKGEpIC0tIFNhbWUgYXMgbm90IGEuIikKLXNwYW0yKGFuZF8sX19hbmRfXywgImFuZF8oYSwgYikgLS0gU2FtZSBhcyBhICYgYi4iKQotc3BhbTIoeG9yLF9feG9yX18sICJ4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF4gYi4iKQotc3BhbTIob3JfLF9fb3JfXywgIm9yXyhhLCBiKSAtLSBTYW1lIGFzIGEgfCBiLiIpCi1zcGFtMihpYWRkLF9faWFkZF9fLCAiYSA9IGlhZGQoYSwgYikgLS0gU2FtZSBhcyBhICs9IGIuIikKLXNwYW0yKGlzdWIsX19pc3ViX18sICJhID0gaXN1YihhLCBiKSAtLSBTYW1lIGFzIGEgLT0gYi4iKQotc3BhbTIoaW11bCxfX2ltdWxfXywgImEgPSBpbXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqPSBiLiIpCi1zcGFtMihpZmxvb3JkaXYsX19pZmxvb3JkaXZfXywgImEgPSBpZmxvb3JkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8vPSBiLiIpCi1zcGFtMihpdHJ1ZWRpdixfX2l0cnVlZGl2X18sICJhID0gaXRydWVkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC89IGIiKQotc3BhbTIoaW1vZCxfX2ltb2RfXywgImEgPSBpbW9kKGEsIGIpIC0tIFNhbWUgYXMgYSAlPSBiLiIpCi1zcGFtMihpbHNoaWZ0LF9faWxzaGlmdF9fLCAiYSA9IGlsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8PSBiLiIpCi1zcGFtMihpcnNoaWZ0LF9faXJzaGlmdF9fLCAiYSA9IGlyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+PSBiLiIpCi1zcGFtMihpYW5kLF9faWFuZF9fLCAiYSA9IGlhbmQoYSwgYikgLS0gU2FtZSBhcyBhICY9IGIuIikKLXNwYW0yKGl4b3IsX19peG9yX18sICJhID0gaXhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXj0gYi4iKQotc3BhbTIoaW9yLF9faW9yX18sICJhID0gaW9yKGEsIGIpIC0tIFNhbWUgYXMgYSB8PSBiLiIpCi1zcGFtMihjb25jYXQsX19jb25jYXRfXywKK3NwYW0ybyhpbmRleCwgImluZGV4KGEpIC0tIFNhbWUgYXMgYS5fX2luZGV4X18oKSIpCitzcGFtMihhZGQsICJhZGQoYSwgYikgLS0gU2FtZSBhcyBhICsgYi4iKQorc3BhbTIoc3ViLCAic3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtIGIuIikKK3NwYW0yKG11bCwgIm11bChhLCBiKSAtLSBTYW1lIGFzIGEgKiBiLiIpCitzcGFtMihmbG9vcmRpdiwgImZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLyBiLiIpCitzcGFtMih0cnVlZGl2LCAidHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLyBiLiIpCitzcGFtMihtb2QsICJtb2QoYSwgYikgLS0gU2FtZSBhcyBhICUgYi4iKQorc3BhbTJvKG5lZywgIm5lZyhhKSAtLSBTYW1lIGFzIC1hLiIpCitzcGFtMm8ocG9zLCAicG9zKGEpIC0tIFNhbWUgYXMgK2EuIikKK3NwYW0ybyhhYnMsICJhYnMoYSkgLS0gU2FtZSBhcyBhYnMoYSkuIikKK3NwYW0ybyhpbnYsICJpbnYoYSkgLS0gU2FtZSBhcyB+YS4iKQorc3BhbTJvKGludmVydCwgImludmVydChhKSAtLSBTYW1lIGFzIH5hLiIpCitzcGFtMihsc2hpZnQsICJsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8IGIuIikKK3NwYW0yKHJzaGlmdCwgInJzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPj4gYi4iKQorc3BhbTJvKG5vdF8sICJub3RfKGEpIC0tIFNhbWUgYXMgbm90IGEuIikKK3NwYW0yKGFuZF8sICJhbmRfKGEsIGIpIC0tIFNhbWUgYXMgYSAmIGIuIikKK3NwYW0yKHhvciwgInhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXiBiLiIpCitzcGFtMihvcl8sICJvcl8oYSwgYikgLS0gU2FtZSBhcyBhIHwgYi4iKQorc3BhbTIoaWFkZCwgImEgPSBpYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArPSBiLiIpCitzcGFtMihpc3ViLCAiYSA9IGlzdWIoYSwgYikgLS0gU2FtZSBhcyBhIC09IGIuIikKK3NwYW0yKGltdWwsICJhID0gaW11bChhLCBiKSAtLSBTYW1lIGFzIGEgKj0gYi4iKQorc3BhbTIoaWZsb29yZGl2LCAiYSA9IGlmbG9vcmRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLy89IGIuIikKK3NwYW0yKGl0cnVlZGl2LCAiYSA9IGl0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvPSBiIikKK3NwYW0yKGltb2QsICJhID0gaW1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJT0gYi4iKQorc3BhbTIoaWxzaGlmdCwgImEgPSBpbHNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA8PD0gYi4iKQorc3BhbTIoaXJzaGlmdCwgImEgPSBpcnNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA+Pj0gYi4iKQorc3BhbTIoaWFuZCwgImEgPSBpYW5kKGEsIGIpIC0tIFNhbWUgYXMgYSAmPSBiLiIpCitzcGFtMihpeG9yLCAiYSA9IGl4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF49IGIuIikKK3NwYW0yKGlvciwgImEgPSBpb3IoYSwgYikgLS0gU2FtZSBhcyBhIHw9IGIuIikKK3NwYW0yKGNvbmNhdCwKICAiY29uY2F0KGEsIGIpIC0tIFNhbWUgYXMgYSArIGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iKQotc3BhbTIoaWNvbmNhdCxfX2ljb25jYXRfXywKK3NwYW0yKGljb25jYXQsCiAgImEgPSBpY29uY2F0KGEsIGIpIC0tIFNhbWUgYXMgYSArPSBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIikKLXNwYW0yKGdldGl0ZW0sX19nZXRpdGVtX18sCitzcGFtMihnZXRpdGVtLAogICJnZXRpdGVtKGEsIGIpIC0tIFNhbWUgYXMgYVtiXS4iKQotc3BhbTIoc2V0aXRlbSxfX3NldGl0ZW1fXywKK3NwYW0yKHNldGl0ZW0sCiAgInNldGl0ZW0oYSwgYiwgYykgLS0gU2FtZSBhcyBhW2JdID0gYy4iKQotc3BhbTIoZGVsaXRlbSxfX2RlbGl0ZW1fXywKK3NwYW0yKGRlbGl0ZW0sCiAgImRlbGl0ZW0oYSwgYikgLS0gU2FtZSBhcyBkZWwgYVtiXS4iKQotc3BhbTIocG93LF9fcG93X18sICJwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqIGIuIikKLXNwYW0yKGlwb3csX19pcG93X18sICJhID0gaXBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKio9IGIuIikKLXNwYW0yKGx0LF9fbHRfXywgImx0KGEsIGIpIC0tIFNhbWUgYXMgYTxiLiIpCi1zcGFtMihsZSxfX2xlX18sICJsZShhLCBiKSAtLSBTYW1lIGFzIGE8PWIuIikKLXNwYW0yKGVxLF9fZXFfXywgImVxKGEsIGIpIC0tIFNhbWUgYXMgYT09Yi4iKQotc3BhbTIobmUsX19uZV9fLCAibmUoYSwgYikgLS0gU2FtZSBhcyBhIT1iLiIpCi1zcGFtMihndCxfX2d0X18sICJndChhLCBiKSAtLSBTYW1lIGFzIGE+Yi4iKQotc3BhbTIoZ2UsX19nZV9fLCAiZ2UoYSwgYikgLS0gU2FtZSBhcyBhPj1iLiIpCitzcGFtMihwb3csICJwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqIGIuIikKK3NwYW0yKGlwb3csICJhID0gaXBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKio9IGIuIikKK3NwYW0yKGx0LCAibHQoYSwgYikgLS0gU2FtZSBhcyBhPGIuIikKK3NwYW0yKGxlLCAibGUoYSwgYikgLS0gU2FtZSBhcyBhPD1iLiIpCitzcGFtMihlcSwgImVxKGEsIGIpIC0tIFNhbWUgYXMgYT09Yi4iKQorc3BhbTIobmUsICJuZShhLCBiKSAtLSBTYW1lIGFzIGEhPWIuIikKK3NwYW0yKGd0LCAiZ3QoYSwgYikgLS0gU2FtZSBhcyBhPmIuIikKK3NwYW0yKGdlLCAiZ2UoYSwgYikgLS0gU2FtZSBhcyBhPj1iLiIpCiAKICAgICB7Il9jb21wYXJlX2RpZ2VzdCIsIChQeUNGdW5jdGlvbiljb21wYXJlX2RpZ2VzdCwgTUVUSF9WQVJBUkdTLAogICAgICBjb21wYXJlX2RpZ2VzdF9fZG9jX199LAorICAgICB7Imxlbmd0aF9oaW50IiwgKFB5Q0Z1bmN0aW9uKWxlbmd0aF9oaW50LCBNRVRIX1ZBUkFSR1MsCisgICAgIGxlbmd0aF9oaW50X19kb2NfX30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIAogfTsKQEAgLTg5MiwxMiArOTE3LDEyIEBACiB9OwogCiAKLS8qIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbW9kdWxlICgqbXVzdCogYmUgY2FsbGVkIFB5SW5pdF9vcGVyYXRvcikgKi8KKy8qIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbW9kdWxlICgqbXVzdCogYmUgY2FsbGVkIFB5SW5pdF9fb3BlcmF0b3IpICovCiAKIAogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBvcGVyYXRvcm1vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgIm9wZXJhdG9yIiwKKyAgICAiX29wZXJhdG9yIiwKICAgICBvcGVyYXRvcl9kb2MsCiAgICAgLTEsCiAgICAgb3BlcmF0b3JfbWV0aG9kcywKQEAgLTkwOCw3ICs5MzMsNyBAQAogfTsKIAogUHlNT0RJTklUX0ZVTkMKLVB5SW5pdF9vcGVyYXRvcih2b2lkKQorUHlJbml0X19vcGVyYXRvcih2b2lkKQogewogICAgIFB5T2JqZWN0ICptOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19waWNrbGUuYyBiL01vZHVsZXMvX3BpY2tsZS5jCmluZGV4IGFlODAxZjcuLjdmYWY5NmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3BpY2tsZS5jCisrKyBiL01vZHVsZXMvX3BpY2tsZS5jCkBAIC00LDkgKzQsMTkgQEAKIFB5RG9jX1NUUlZBUihwaWNrbGVfbW9kdWxlX2RvYywKICJPcHRpbWl6ZWQgQyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIFB5dGhvbiBwaWNrbGUgbW9kdWxlLiIpOwogCisvKltjbGluaWMgaW5wdXRdCitvdXRwdXQgcHJlc2V0IGZpbGUKK21vZHVsZSBfcGlja2xlCitjbGFzcyBfcGlja2xlLlBpY2tsZXIgIlBpY2tsZXJPYmplY3QgKiIgIiZQaWNrbGVyX1R5cGUiCitjbGFzcyBfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkgIlBpY2tsZXJNZW1vUHJveHlPYmplY3QgKiIgIiZQaWNrbGVyTWVtb1Byb3h5VHlwZSIKK2NsYXNzIF9waWNrbGUuVW5waWNrbGVyICJVbnBpY2tsZXJPYmplY3QgKiIgIiZVbnBpY2tsZXJfVHlwZSIKK2NsYXNzIF9waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5ICJVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKiIgIiZVbnBpY2tsZXJNZW1vUHJveHlUeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9MTFjNDUyNDhhNDFkZDNmY10qLworCiAvKiBCdW1wIHRoaXMgd2hlbiBuZXcgb3Bjb2RlcyBhcmUgYWRkZWQgdG8gdGhlIHBpY2tsZSBwcm90b2NvbC4gKi8KIGVudW0gewotICAgIEhJR0hFU1RfUFJPVE9DT0wgPSAzLAorICAgIEhJR0hFU1RfUFJPVE9DT0wgPSA0LAogICAgIERFRkFVTFRfUFJPVE9DT0wgPSAzCiB9OwogCkBAIC03MSwxOCArODEsMjAgQEAKIAogICAgIC8qIFByb3RvY29sIDMgKFB5dGhvbiAzLngpICovCiAgICAgQklOQllURVMgICAgICAgPSAnQicsCi0gICAgU0hPUlRfQklOQllURVMgPSAnQycKLX07CisgICAgU0hPUlRfQklOQllURVMgPSAnQycsCiAKLS8qIFRoZXNlIGFyZW4ndCBvcGNvZGVzIC0tIHRoZXkncmUgd2F5cyB0byBwaWNrbGUgYm9vbHMgYmVmb3JlIHByb3RvY29sIDIKLSAqIHNvIHRoYXQgdW5waWNrbGVycyB3cml0dGVuIGJlZm9yZSBib29scyB3ZXJlIGludHJvZHVjZWQgdW5waWNrbGUgdGhlbQotICogYXMgaW50cywgYnV0IHVucGlja2xlcnMgYWZ0ZXIgY2FuIHJlY29nbml6ZSB0aGF0IGJvb2xzIHdlcmUgaW50ZW5kZWQuCi0gKiBOb3RlIHRoYXQgcHJvdG9jb2wgMiBhZGRlZCBkaXJlY3Qgd2F5cyB0byBwaWNrbGUgYm9vbHMuCi0gKi8KLSN1bmRlZiBUUlVFCi0jZGVmaW5lIFRSVUUgICJJMDFcbiIKLSN1bmRlZiBGQUxTRQotI2RlZmluZSBGQUxTRSAiSTAwXG4iCisgICAgLyogUHJvdG9jb2wgNCAqLworICAgIFNIT1JUX0JJTlVOSUNPREUgPSAnXHg4YycsCisgICAgQklOVU5JQ09ERTggICAgICA9ICdceDhkJywKKyAgICBCSU5CWVRFUzggICAgICAgID0gJ1x4OGUnLAorICAgIEVNUFRZX1NFVCAgICAgICAgPSAnXHg4ZicsCisgICAgQURESVRFTVMgICAgICAgICA9ICdceDkwJywKKyAgICBGUk9aRU5TRVQgICAgICAgID0gJ1x4OTEnLAorICAgIE5FV09CSl9FWCAgICAgICAgPSAnXHg5MicsCisgICAgU1RBQ0tfR0xPQkFMICAgICA9ICdceDkzJywKKyAgICBNRU1PSVpFICAgICAgICAgID0gJ1x4OTQnLAorICAgIEZSQU1FICAgICAgICAgICAgPSAnXHg5NScKK307CiAKIGVudW0gewogICAgLyogS2VlcCBpbiBzeW5jaCB3aXRoIHBpY2tsZS5QaWNrbGVyLl9CQVRDSFNJWkUuICBUaGlzIGlzIGhvdyBtYW55IGVsZW1lbnRzCkBAIC05OCw0OCArMTEwLDI0NiBAQAogICAgIC8qIEluaXRpYWwgc2l6ZSBvZiB0aGUgd3JpdGUgYnVmZmVyIG9mIFBpY2tsZXIuICovCiAgICAgV1JJVEVfQlVGX1NJWkUgPSA0MDk2LAogCi0gICAgLyogTWF4aW11bSBzaXplIG9mIHRoZSB3cml0ZSBidWZmZXIgb2YgUGlja2xlciB3aGVuIHBpY2tsaW5nIHRvIGEKLSAgICAgICBzdHJlYW0uICBUaGlzIGlzIGlnbm9yZWQgZm9yIGluLW1lbW9yeSBwaWNrbGluZy4gKi8KLSAgICBNQVhfV1JJVEVfQlVGX1NJWkUgPSA2NCAqIDEwMjQsCi0KICAgICAvKiBQcmVmZXRjaCBzaXplIHdoZW4gdW5waWNrbGluZyAoZGlzYWJsZWQgb24gdW5wZWVrYWJsZSBzdHJlYW1zKSAqLwotICAgIFBSRUZFVENIID0gODE5MiAqIDE2CisgICAgUFJFRkVUQ0ggPSA4MTkyICogMTYsCisKKyAgICBGUkFNRV9TSVpFX1RBUkdFVCA9IDY0ICogMTAyNCwKKworICAgIEZSQU1FX0hFQURFUl9TSVpFID0gOQogfTsKIAotLyogRXhjZXB0aW9uIGNsYXNzZXMgZm9yIHBpY2tsZS4gVGhlc2Ugc2hvdWxkIG92ZXJyaWRlIHRoZSBvbmVzIGRlZmluZWQgaW4KLSAgIHBpY2tsZS5weSwgd2hlbiB0aGUgQy1vcHRpbWl6ZWQgUGlja2xlciBhbmQgVW5waWNrbGVyIGFyZSB1c2VkLiAqLwotc3RhdGljIFB5T2JqZWN0ICpQaWNrbGVFcnJvciA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKlBpY2tsaW5nRXJyb3IgPSBOVUxMOwotc3RhdGljIFB5T2JqZWN0ICpVbnBpY2tsaW5nRXJyb3IgPSBOVUxMOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIGNvcHlyZWcuZGlzcGF0Y2hfdGFibGUsIHt0eXBlX29iamVjdDogcGlja2xpbmdfZnVuY3Rpb259ICovCi1zdGF0aWMgUHlPYmplY3QgKmRpc3BhdGNoX3RhYmxlID0gTlVMTDsKLS8qIEZvciBFWFRbMTI0XSBvcGNvZGVzLiAqLwotLyogY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5LCB7KG1vZHVsZV9uYW1lLCBmdW5jdGlvbl9uYW1lKTogY29kZX0gKi8KLXN0YXRpYyBQeU9iamVjdCAqZXh0ZW5zaW9uX3JlZ2lzdHJ5ID0gTlVMTDsKLS8qIGNvcHlyZWcuX2ludmVydGVkX3JlZ2lzdHJ5LCB7Y29kZTogKG1vZHVsZV9uYW1lLCBmdW5jdGlvbl9uYW1lKX0gKi8KLXN0YXRpYyBQeU9iamVjdCAqaW52ZXJ0ZWRfcmVnaXN0cnkgPSBOVUxMOwotLyogY29weXJlZy5fZXh0ZW5zaW9uX2NhY2hlLCB7Y29kZTogb2JqZWN0fSAqLwotc3RhdGljIFB5T2JqZWN0ICpleHRlbnNpb25fY2FjaGUgPSBOVUxMOworLyogU3RhdGUgb2YgdGhlIHBpY2tsZSBtb2R1bGUsIHBlciBQRVAgMzEyMS4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiBFeGNlcHRpb24gY2xhc3NlcyBmb3IgcGlja2xlLiAqLworICAgIFB5T2JqZWN0ICpQaWNrbGVFcnJvcjsKKyAgICBQeU9iamVjdCAqUGlja2xpbmdFcnJvcjsKKyAgICBQeU9iamVjdCAqVW5waWNrbGluZ0Vycm9yOwogCi0vKiBfY29tcGF0X3BpY2tsZS5OQU1FX01BUFBJTkcsIHsob2xkbW9kdWxlLCBvbGRuYW1lKTogKG5ld21vZHVsZSwgbmV3bmFtZSl9ICovCi1zdGF0aWMgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18ydG8zID0gTlVMTDsKLS8qIF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HLCB7b2xkbW9kdWxlOiBuZXdtb2R1bGV9ICovCi1zdGF0aWMgUHlPYmplY3QgKmltcG9ydF9tYXBwaW5nXzJ0bzMgPSBOVUxMOwotLyogU2FtZSwgYnV0IHdpdGggUkVWRVJTRV9OQU1FX01BUFBJTkcgLyBSRVZFUlNFX0lNUE9SVF9NQVBQSU5HICovCi1zdGF0aWMgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18zdG8yID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqaW1wb3J0X21hcHBpbmdfM3RvMiA9IE5VTEw7CisgICAgLyogY29weXJlZy5kaXNwYXRjaF90YWJsZSwge3R5cGVfb2JqZWN0OiBwaWNrbGluZ19mdW5jdGlvbn0gKi8KKyAgICBQeU9iamVjdCAqZGlzcGF0Y2hfdGFibGU7CiAKLS8qIFhYWDogQXJlIHRoZXNlIHJlYWxseSBuZXNjZXNzYXJ5PyAqLwotLyogQXMgdGhlIG5hbWUgc2F5cywgYW4gZW1wdHkgdHVwbGUuICovCi1zdGF0aWMgUHlPYmplY3QgKmVtcHR5X3R1cGxlID0gTlVMTDsKLS8qIEZvciBsb29raW5nIHVwIG5hbWUgcGFpcnMgaW4gY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5LiAqLwotc3RhdGljIFB5T2JqZWN0ICp0d29fdHVwbGUgPSBOVUxMOworICAgIC8qIEZvciB0aGUgZXh0ZW5zaW9uIG9wY29kZXMgRVhUMSwgRVhUMiBhbmQgRVhUNC4gKi8KKworICAgIC8qIGNvcHlyZWcuX2V4dGVuc2lvbl9yZWdpc3RyeSwgeyhtb2R1bGVfbmFtZSwgZnVuY3Rpb25fbmFtZSk6IGNvZGV9ICovCisgICAgUHlPYmplY3QgKmV4dGVuc2lvbl9yZWdpc3RyeTsKKyAgICAvKiBjb3B5cmVnLl9leHRlbnNpb25fY2FjaGUsIHtjb2RlOiBvYmplY3R9ICovCisgICAgUHlPYmplY3QgKmV4dGVuc2lvbl9jYWNoZTsKKyAgICAvKiBjb3B5cmVnLl9pbnZlcnRlZF9yZWdpc3RyeSwge2NvZGU6IChtb2R1bGVfbmFtZSwgZnVuY3Rpb25fbmFtZSl9ICovCisgICAgUHlPYmplY3QgKmludmVydGVkX3JlZ2lzdHJ5OworCisgICAgLyogSW1wb3J0IG1hcHBpbmdzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIueCAqLworCisgICAgLyogX2NvbXBhdF9waWNrbGUuTkFNRV9NQVBQSU5HLAorICAgICAgIHsob2xkbW9kdWxlLCBvbGRuYW1lKTogKG5ld21vZHVsZSwgbmV3bmFtZSl9ICovCisgICAgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18ydG8zOworICAgIC8qIF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HLCB7b2xkbW9kdWxlOiBuZXdtb2R1bGV9ICovCisgICAgUHlPYmplY3QgKmltcG9ydF9tYXBwaW5nXzJ0bzM7CisgICAgLyogU2FtZSwgYnV0IHdpdGggUkVWRVJTRV9OQU1FX01BUFBJTkcgLyBSRVZFUlNFX0lNUE9SVF9NQVBQSU5HICovCisgICAgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18zdG8yOworICAgIFB5T2JqZWN0ICppbXBvcnRfbWFwcGluZ18zdG8yOworCisgICAgLyogY29kZWNzLmVuY29kZSwgdXNlZCBmb3Igc2F2aW5nIGJ5dGVzIGluIG9sZGVyIHByb3RvY29scyAqLworICAgIFB5T2JqZWN0ICpjb2RlY3NfZW5jb2RlOworfSBQaWNrbGVTdGF0ZTsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgX3BpY2tsZSBtb2R1bGUgZGVmaW5pdGlvbi4gKi8KK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX3BpY2tsZW1vZHVsZTsKKworLyogR2l2ZW4gYSBtb2R1bGUgb2JqZWN0LCBnZXQgaXRzIHBlci1tb2R1bGUgc3RhdGUuICovCitzdGF0aWMgUGlja2xlU3RhdGUgKgorX1BpY2tsZV9HZXRTdGF0ZShQeU9iamVjdCAqbW9kdWxlKQoreworICAgIHJldHVybiAoUGlja2xlU3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShtb2R1bGUpOworfQorCisvKiBGaW5kIHRoZSBtb2R1bGUgaW5zdGFuY2UgaW1wb3J0ZWQgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHN1Yi1pbnRlcnByZXRlcgorICAgYW5kIGdldCBpdHMgc3RhdGUuICovCitzdGF0aWMgUGlja2xlU3RhdGUgKgorX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSh2b2lkKQoreworICAgIHJldHVybiBfUGlja2xlX0dldFN0YXRlKFB5U3RhdGVfRmluZE1vZHVsZSgmX3BpY2tsZW1vZHVsZSkpOworfQorCisvKiBDbGVhciB0aGUgZ2l2ZW4gcGlja2xlIG1vZHVsZSBzdGF0ZS4gKi8KK3N0YXRpYyB2b2lkCitfUGlja2xlX0NsZWFyU3RhdGUoUGlja2xlU3RhdGUgKnN0KQoreworICAgIFB5X0NMRUFSKHN0LT5QaWNrbGVFcnJvcik7CisgICAgUHlfQ0xFQVIoc3QtPlBpY2tsaW5nRXJyb3IpOworICAgIFB5X0NMRUFSKHN0LT5VbnBpY2tsaW5nRXJyb3IpOworICAgIFB5X0NMRUFSKHN0LT5kaXNwYXRjaF90YWJsZSk7CisgICAgUHlfQ0xFQVIoc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSk7CisgICAgUHlfQ0xFQVIoc3QtPmV4dGVuc2lvbl9jYWNoZSk7CisgICAgUHlfQ0xFQVIoc3QtPmludmVydGVkX3JlZ2lzdHJ5KTsKKyAgICBQeV9DTEVBUihzdC0+bmFtZV9tYXBwaW5nXzJ0bzMpOworICAgIFB5X0NMRUFSKHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKTsKKyAgICBQeV9DTEVBUihzdC0+bmFtZV9tYXBwaW5nXzN0bzIpOworICAgIFB5X0NMRUFSKHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yKTsKKyAgICBQeV9DTEVBUihzdC0+Y29kZWNzX2VuY29kZSk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGdpdmVuIHBpY2tsZSBtb2R1bGUgc3RhdGUuICovCitzdGF0aWMgaW50CitfUGlja2xlX0luaXRTdGF0ZShQaWNrbGVTdGF0ZSAqc3QpCit7CisgICAgUHlPYmplY3QgKmNvcHlyZWcgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjb21wYXRfcGlja2xlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY29kZWNzID0gTlVMTDsKKworICAgIGNvcHlyZWcgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHlyZWciKTsKKyAgICBpZiAoIWNvcHlyZWcpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc3QtPmRpc3BhdGNoX3RhYmxlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiZGlzcGF0Y2hfdGFibGUiKTsKKyAgICBpZiAoIXN0LT5kaXNwYXRjaF90YWJsZSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5kaXNwYXRjaF90YWJsZSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLmRpc3BhdGNoX3RhYmxlIHNob3VsZCBiZSBhIGRpY3QsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzdC0+ZGlzcGF0Y2hfdGFibGUpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2V4dGVuc2lvbl9yZWdpc3RyeSIpOworICAgIGlmICghc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5leHRlbnNpb25fcmVnaXN0cnkpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5IHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5KS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIHN0LT5pbnZlcnRlZF9yZWdpc3RyeSA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2ludmVydGVkX3JlZ2lzdHJ5Iik7CisgICAgaWYgKCFzdC0+aW52ZXJ0ZWRfcmVnaXN0cnkpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+aW52ZXJ0ZWRfcmVnaXN0cnkpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5faW52ZXJ0ZWRfcmVnaXN0cnkgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5pbnZlcnRlZF9yZWdpc3RyeSktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+ZXh0ZW5zaW9uX2NhY2hlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2V4dGVuc2lvbl9jYWNoZSIpOworICAgIGlmICghc3QtPmV4dGVuc2lvbl9jYWNoZSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5leHRlbnNpb25fY2FjaGUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5fZXh0ZW5zaW9uX2NhY2hlIHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+ZXh0ZW5zaW9uX2NhY2hlKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0NMRUFSKGNvcHlyZWcpOworCisgICAgLyogTG9hZCB0aGUgMi54IC0+IDMueCBzdGRsaWIgbW9kdWxlIG1hcHBpbmcgdGFibGVzICovCisgICAgY29tcGF0X3BpY2tsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiX2NvbXBhdF9waWNrbGUiKTsKKyAgICBpZiAoIWNvbXBhdF9waWNrbGUpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc3QtPm5hbWVfbWFwcGluZ18ydG8zID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsICJOQU1FX01BUFBJTkciKTsKKyAgICBpZiAoIXN0LT5uYW1lX21hcHBpbmdfMnRvMykKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5uYW1lX21hcHBpbmdfMnRvMykpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5OQU1FX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHN0LT5uYW1lX21hcHBpbmdfMnRvMyktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+aW1wb3J0X21hcHBpbmdfMnRvMyA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiSU1QT1JUX01BUFBJTkciKTsKKyAgICBpZiAoIXN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIC8qIC4uLiBhbmQgdGhlIDMueCAtPiAyLnggbWFwcGluZyB0YWJsZXMgKi8KKyAgICBzdC0+bmFtZV9tYXBwaW5nXzN0bzIgPSBcCisgICAgICAgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwgIlJFVkVSU0VfTkFNRV9NQVBQSU5HIik7CisgICAgaWYgKCFzdC0+bmFtZV9tYXBwaW5nXzN0bzIpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+bmFtZV9tYXBwaW5nXzN0bzIpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5uYW1lX21hcHBpbmdfM3RvMiktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+aW1wb3J0X21hcHBpbmdfM3RvMiA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiUkVWRVJTRV9JTVBPUlRfTUFQUElORyIpOworICAgIGlmICghc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+aW1wb3J0X21hcHBpbmdfM3RvMikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+aW1wb3J0X21hcHBpbmdfM3RvMiktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKKworICAgIGNvZGVjcyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29kZWNzIik7CisgICAgaWYgKGNvZGVjcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHN0LT5jb2RlY3NfZW5jb2RlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb2RlY3MsICJlbmNvZGUiKTsKKyAgICBpZiAoc3QtPmNvZGVjc19lbmNvZGUgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soc3QtPmNvZGVjc19lbmNvZGUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29kZWNzLmVuY29kZSBzaG91bGQgYmUgYSBjYWxsYWJsZSwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHN0LT5jb2RlY3NfZW5jb2RlKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0NMRUFSKGNvZGVjcyk7CisKKyAgICByZXR1cm4gMDsKKworICBlcnJvcjoKKyAgICBQeV9DTEVBUihjb3B5cmVnKTsKKyAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKKyAgICBQeV9DTEVBUihjb2RlY3MpOworICAgIF9QaWNrbGVfQ2xlYXJTdGF0ZShzdCk7CisgICAgcmV0dXJuIC0xOworfQorCisvKiBIZWxwZXIgZm9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IHF1aWNrbHkuCisKKyAgIFRoaXMgZnVuY3Rpb24gc3RlYWxzIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGdpdmVuIGFyZ3VtZW50LiAqLworc3RhdGljIFB5T2JqZWN0ICoKK19QaWNrbGVfRmFzdENhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqYXJnX3R1cGxlID0gUHlUdXBsZV9OZXcoMSk7CisKKyAgICAvKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIHVzZWQgdG8gcmV1c2UgdGhlIGFyZ3VtZW50IHR1cGxlLiBUaGlzIHVzZWQgdG8gZ2l2ZQorICAgICAgIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIGJvb3N0IHdpdGggb2xkZXIgcGlja2xlIGltcGxlbWVudGF0aW9ucyB3aGVyZSBtYW55CisgICAgICAgdW5idWZmZXJlZCByZWFkcyBvY2N1cnJlZCAodGh1cyBuZWVkaW5nIG1hbnkgZnVuY3Rpb24gY2FsbHMpLgorCisgICAgICAgSG93ZXZlciwgdGhpcyBvcHRpbWl6YXRpb24gd2FzIHJlbW92ZWQgYmVjYXVzZSBpdCB3YXMgdG9vIGNvbXBsaWNhdGVkCisgICAgICAgdG8gZ2V0IHJpZ2h0LiBJdCBhYnVzZWQgdGhlIEMgQVBJIGZvciB0dXBsZXMgdG8gbXV0YXRlIHRoZW0gd2hpY2ggbGVkCisgICAgICAgdG8gc3VidGxlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY29uY3VycmVuY3kgYnVncy4gRnVydGhlcm1vcmUsIHRoZQorICAgICAgIGludHJvZHVjdGlvbiBvZiBwcm90b2NvbCA0IGFuZCB0aGUgcHJlZmV0Y2hpbmcgb3B0aW1pemF0aW9uIHZpYSBwZWVrKCkKKyAgICAgICBzaWduaWZpY2FudGx5IHJlZHVjZWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBjYWxscyB3ZSBkby4gVGh1cywgdGhlCisgICAgICAgYmVuZWZpdHMgYmVjYW1lIG1hcmdpbmFsIGF0IGJlc3QuICovCisKKyAgICBpZiAoYXJnX3R1cGxlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ190dXBsZSwgMCwgb2JqKTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKGZ1bmMsIGFyZ190dXBsZSwgTlVMTCk7CisgICAgUHlfQ0xFQVIoYXJnX3R1cGxlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludAogc3RhY2tfdW5kZXJmbG93KHZvaWQpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgInVucGlja2xpbmcgc3RhY2sgdW5kZXJmbG93Iik7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAidW5waWNrbGluZyBzdGFjayB1bmRlcmZsb3ciKTsKICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTI0MCw4ICs0NTAsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFBkYXRhX3BvcChQZGF0YSAqc2VsZikKIHsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgaWYgKFB5X1NJWkUoc2VsZikgPT0gMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAiYmFkIHBpY2tsZSBkYXRhIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiYmFkIHBpY2tsZSBkYXRhIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gc2VsZi0+ZGF0YVstLVB5X1NJWkUoc2VsZildOwpAQCAtMzIwLDcgKzUzMSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsaW5nLiAqLwogICAgIFB5T2JqZWN0ICpwZXJzX2Z1bmM7ICAgICAgICAvKiBwZXJzaXN0ZW50X2lkKCkgbWV0aG9kLCBjYW4gYmUgTlVMTCAqLwogICAgIFB5T2JqZWN0ICpkaXNwYXRjaF90YWJsZTsgICAvKiBwcml2YXRlIGRpc3BhdGNoX3RhYmxlLCBjYW4gYmUgTlVMTCAqLwotICAgIFB5T2JqZWN0ICphcmc7CiAKICAgICBQeU9iamVjdCAqd3JpdGU7ICAgICAgICAgICAgLyogd3JpdGUoKSBtZXRob2Qgb2YgdGhlIG91dHB1dCBzdHJlYW0uICovCiAgICAgUHlPYmplY3QgKm91dHB1dF9idWZmZXI7ICAgIC8qIFdyaXRlIGludG8gYSBsb2NhbCBieXRlYXJyYXkgYnVmZmVyIGJlZm9yZQpAQCAtMzI5LDcgKzUzOSwxMiBAQAogICAgIFB5X3NzaXplX3QgbWF4X291dHB1dF9sZW47ICAvKiBBbGxvY2F0aW9uIHNpemUgb2Ygb3V0cHV0X2J1ZmZlci4gKi8KICAgICBpbnQgcHJvdG87ICAgICAgICAgICAgICAgICAgLyogUGlja2xlIHByb3RvY29sIG51bWJlciwgPj0gMCAqLwogICAgIGludCBiaW47ICAgICAgICAgICAgICAgICAgICAvKiBCb29sZWFuLCB0cnVlIGlmIHByb3RvID4gMCAqLwotICAgIFB5X3NzaXplX3QgYnVmX3NpemU7ICAgICAgICAgICAgICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBidWZmZXJlZCBwaWNrbGUgZGF0YSAqLworICAgIGludCBmcmFtaW5nOyAgICAgICAgICAgICAgICAvKiBUcnVlIHdoZW4gZnJhbWluZyBpcyBlbmFibGVkLCBwcm90byA+PSA0ICovCisgICAgUHlfc3NpemVfdCBmcmFtZV9zdGFydDsgICAgIC8qIFBvc2l0aW9uIGluIG91dHB1dF9idWZmZXIgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHRoZSBjdXJyZW50IGZyYW1lIGJlZ2lucy4gLTEgaWYgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm8gZnJhbWUgY3VycmVudGx5IG9wZW4uICovCisKKyAgICBQeV9zc2l6ZV90IGJ1Zl9zaXplOyAgICAgICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBidWZmZXJlZCBwaWNrbGUgZGF0YSAqLwogICAgIGludCBmYXN0OyAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgZmFzdCBtb2RlIGlmIHNldCB0byBhIHRydWUgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmYXN0IG1vZGUgZGlzYWJsZSB0aGUgdXNhZ2Ugb2YgbWVtbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcmVmb3JlIHNwZWVkaW5nIHRoZSBwaWNrbGluZyBwcm9jZXNzIGJ5CkBAIC0zNDksOSArNTY0LDkgQEAKICAgICAvKiBUaGUgdW5waWNrbGVyIG1lbW8gaXMganVzdCBhbiBhcnJheSBvZiBQeU9iamVjdCAqcy4gVXNpbmcgYSBkaWN0CiAgICAgICAgaXMgdW5uZWNlc3NhcnksIHNpbmNlIHRoZSBrZXlzIGFyZSBjb250aWd1b3VzIGludHMuICovCiAgICAgUHlPYmplY3QgKiptZW1vOwotICAgIFB5X3NzaXplX3QgbWVtb19zaXplOworICAgIFB5X3NzaXplX3QgbWVtb19zaXplOyAgICAgICAvKiBDYXBhY2l0eSBvZiB0aGUgbWVtbyBhcnJheSAqLworICAgIFB5X3NzaXplX3QgbWVtb19sZW47ICAgICAgICAvKiBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgbWVtbyAqLwogCi0gICAgUHlPYmplY3QgKmFyZzsKICAgICBQeU9iamVjdCAqcGVyc19mdW5jOyAgICAgICAgLyogcGVyc2lzdGVudF9sb2FkKCkgbWV0aG9kLCBjYW4gYmUgTlVMTC4gKi8KIAogICAgIFB5X2J1ZmZlciBidWZmZXI7CkBAIC0zNjAsNiArNTc1LDcgQEAKICAgICBQeV9zc2l6ZV90IGlucHV0X2xlbjsKICAgICBQeV9zc2l6ZV90IG5leHRfcmVhZF9pZHg7CiAgICAgUHlfc3NpemVfdCBwcmVmZXRjaGVkX2lkeDsgIC8qIGluZGV4IG9mIGZpcnN0IHByZWZldGNoZWQgYnl0ZSAqLworCiAgICAgUHlPYmplY3QgKnJlYWQ7ICAgICAgICAgICAgIC8qIHJlYWQoKSBtZXRob2Qgb2YgdGhlIGlucHV0IHN0cmVhbS4gKi8KICAgICBQeU9iamVjdCAqcmVhZGxpbmU7ICAgICAgICAgLyogcmVhZGxpbmUoKSBtZXRob2Qgb2YgdGhlIGlucHV0IHN0cmVhbS4gKi8KICAgICBQeU9iamVjdCAqcGVlazsgICAgICAgICAgICAgLyogcGVlaygpIG1ldGhvZCBvZiB0aGUgaW5wdXQgc3RyZWFtLCBvciBOVUxMICovCkBAIC0zNzksMTIgKzU5NSwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZiBnbG9iYWxzIHBpY2tsZWQgYnkgUHl0aG9uIDIueC4gKi8KIH0gVW5waWNrbGVyT2JqZWN0OwogCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7IC8qIFBpY2tsZXIgd2hvc2UgbWVtbyB0YWJsZSB3ZSdyZSBwcm94eWluZy4gKi8KK30gIFBpY2tsZXJNZW1vUHJveHlPYmplY3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXI7Cit9IFVucGlja2xlck1lbW9Qcm94eU9iamVjdDsKKwogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyBpbnQgc2F2ZShQaWNrbGVyT2JqZWN0ICosIFB5T2JqZWN0ICosIGludCk7CiBzdGF0aWMgaW50IHNhdmVfcmVkdWNlKFBpY2tsZXJPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IFBpY2tsZXJfVHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgVW5waWNrbGVyX1R5cGU7CiAKKyNpbmNsdWRlICJjbGluaWMvX3BpY2tsZS5jLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgQSBjdXN0b20gaGFzaHRhYmxlIG1hcHBpbmcgdm9pZCogdG8gUHl0aG9uIGludHMuIFRoaXMgaXMgdXNlZCBieSB0aGUgcGlja2xlcgpAQCAtNDM2LDYgKzY2Myw3IEBACiAgICAgbmV3LT5tdF90YWJsZSA9IFB5TWVtX01BTExPQyhzZWxmLT5tdF9hbGxvY2F0ZWQgKiBzaXplb2YoUHlNZW1vRW50cnkpKTsKICAgICBpZiAobmV3LT5tdF90YWJsZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5TWVtX0ZSRUUobmV3KTsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCBzZWxmLT5tdF9hbGxvY2F0ZWQ7IGkrKykgewpAQCAtNTI5LDcgKzc1Nyw3IEBACiAgICAgb2xkdGFibGUgPSBzZWxmLT5tdF90YWJsZTsKICAgICBzZWxmLT5tdF90YWJsZSA9IFB5TWVtX01BTExPQyhuZXdfc2l6ZSAqIHNpemVvZihQeU1lbW9FbnRyeSkpOwogICAgIGlmIChzZWxmLT5tdF90YWJsZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5TWVtX0ZSRUUob2xkdGFibGUpOworICAgICAgICBzZWxmLT5tdF90YWJsZSA9IG9sZHRhYmxlOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtNjA1LDYwICs4MzMsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogSGVscGVycyBmb3IgY3JlYXRpbmcgdGhlIGFyZ3VtZW50IHR1cGxlIHBhc3NlZCB0byBmdW5jdGlvbnMuIFRoaXMgaGFzIHRoZQotICAgcGVyZm9ybWFuY2UgYWR2YW50YWdlIG9mIGNhbGxpbmcgUHlUdXBsZV9OZXcoKSBvbmx5IG9uY2UuCi0KLSAgIFhYWChhdmFzc2Fsb3R0aSk6IElubGluZSBkaXJlY3RseSBpbiBfUGlja2xlcl9GYXN0Q2FsbCgpIGFuZAotICAgX1VucGlja2xlcl9GYXN0Q2FsbCgpLiAqLwotI2RlZmluZSBBUkdfVFVQKHNlbGYsIG9iaikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoKHNlbGYpLT5hcmcgfHwgKChzZWxmKS0+YXJnPVB5VHVwbGVfTmV3KDEpKSkgeyAgXAotICAgICAgICAgICAgUHlfWERFQ1JFRihQeVR1cGxlX0dFVF9JVEVNKChzZWxmKS0+YXJnLCAwKSk7ICAgXAotICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSgoc2VsZiktPmFyZywgMCwgKG9iaikpOyAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlfREVDUkVGKChvYmopKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlJFRV9BUkdfVFVQKHNlbGYpIGRvIHsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKChzZWxmKS0+YXJnLT5vYl9yZWZjbnQgPiAxKSAgICAgICAgIFwKLSAgICAgICAgICAgIFB5X0NMRUFSKChzZWxmKS0+YXJnKTsgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCi0vKiBBIHRlbXBvcmFyeSBjbGVhbmVyIEFQSSBmb3IgZmFzdCBzaW5nbGUgYXJndW1lbnQgZnVuY3Rpb24gY2FsbC4KLQotICAgWFhYOiBEb2VzIGNhY2hpbmcgdGhlIGFyZ3VtZW50IHR1cGxlIHByb3ZpZGVzIGFueSByZWFsIHBlcmZvcm1hbmNlIGJlbmVmaXRzPwotCi0gICBBIHF1aWNrIGJlbmNobWFyaywgb24gYSAyLjBHSHogQXRobG9uNjQgMzIwMCsgcnVubmluZyBMaW51eCAyLjYuMjQgd2l0aAotICAgZ2xpYmMgMi43LCB0ZWxscyBtZSB0aGF0IGl0IHRha2VzIHJvdWdobHkgMjAsMDAwLDAwMCBQeVR1cGxlX05ldygxKSBjYWxscwotICAgd2hlbiB0aGUgdHVwbGUgaXMgcmV0cmlldmVkIGZyb20gdGhlIGZyZWVsaXN0IChpLmUsIGNhbGwgUHlUdXBsZV9OZXcoKSB0aGVuCi0gICBpbW1lZGlhdGVseSBERUNSRUYgaXQpIGFuZCAxLDIwMCwwMDAgY2FsbHMgd2hlbiBhbGxvY2F0aW5nIGJyYW5kIG5ldyB0dXBsZXMKLSAgIChpLmUsIGNhbGwgUHlUdXBsZV9OZXcoKSBhbmQgc3RvcmUgdGhlIHJldHVybmVkIHZhbHVlIGluIGFuIGFycmF5KSwgdG8gc2F2ZQotICAgb25lIHNlY29uZCAod2FsbCBjbG9jayB0aW1lKS4gRWl0aGVyIHdheXMsIHRoZSBsb2FkaW5nIHRpbWUgYSBwaWNrbGUgc3RyZWFtCi0gICBsYXJnZSBlbm91Z2ggdG8gZ2VuZXJhdGUgdGhpcyBudW1iZXIgb2YgY2FsbHMgd291bGQgYmUgbWFzc2l2ZWx5Ci0gICBvdmVyd2hlbG1lZCBieSBvdGhlciBmYWN0b3JzLCBsaWtlIEkvTyB0aHJvdWdocHV0LCB0aGUgR0MgdHJhdmVyc2FsIGFuZAotICAgb2JqZWN0IGFsbG9jYXRpb24gb3ZlcmhlYWQuIFNvLCBJIHJlYWxseSBkb3VidCB0aGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBhbnkKLSAgIHJlYWwgYmVuZWZpdHMuCi0KLSAgIE9uIHRoZSBvdGhlciBoYW5kLCBvcHJvZmlsZSByZXBvcnRzIHRoYXQgcGlja2xlIHNwZW5kcyBhIGxvdCBvZiB0aW1lIGluCi0gICB0aGVzZSBmdW5jdGlvbnMuIEJ1dCwgdGhhdCBpcyBwcm9iYWJseSBtb3JlIHJlbGF0ZWQgdG8gdGhlIGZ1bmN0aW9uIGNhbGwKLSAgIG92ZXJoZWFkLCB0aGFuIHRoZSBhcmd1bWVudCB0dXBsZSBhbGxvY2F0aW9uLgotCi0gICBYWFg6IEFuZCwgd2hhdCBpcyB0aGUgcmVmZXJlbmNlIGJlaGF2aW9yIG9mIHRoZXNlPyBTdGVhbCwgYm9ycm93PyBBdCBmaXJzdAotICAgZ2xhbmNlLCBpdCBzZWVtcyB0byBzdGVhbCB0aGUgcmVmZXJlbmNlIG9mICdhcmcnIGFuZCBib3Jyb3cgdGhlIHJlZmVyZW5jZQotICAgb2YgJ2Z1bmMnLiAqLwotc3RhdGljIFB5T2JqZWN0ICoKLV9QaWNrbGVyX0Zhc3RDYWxsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnKQotewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotCi0gICAgQVJHX1RVUChzZWxmLCBhcmcpOwotICAgIGlmIChzZWxmLT5hcmcpIHsKLSAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbChmdW5jLCBzZWxmLT5hcmcsIE5VTEwpOwotICAgICAgICBGUkVFX0FSR19UVVAoc2VsZik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19CiAKIHN0YXRpYyBpbnQKIF9QaWNrbGVyX0NsZWFyQnVmZmVyKFBpY2tsZXJPYmplY3QgKnNlbGYpCkBAIC02NjksMTUgKzg0Myw3MSBAQAogICAgIGlmIChzZWxmLT5vdXRwdXRfYnVmZmVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBzZWxmLT5vdXRwdXRfbGVuID0gMDsKKyAgICBzZWxmLT5mcmFtZV9zdGFydCA9IC0xOwogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorX3dyaXRlX3NpemU2NChjaGFyICpvdXQsIHNpemVfdCB2YWx1ZSkKK3sKKyAgICBpbnQgaTsKKworICAgIGFzc2VydChzaXplb2Yoc2l6ZV90KSA8PSA4KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2l6ZV90KTsgaSsrKSB7CisgICAgICAgIG91dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsdWUgPj4gKDggKiBpKSkgJiAweGZmKTsKKyAgICB9CisgICAgZm9yIChpID0gc2l6ZW9mKHNpemVfdCk7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgb3V0W2ldID0gMDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitfUGlja2xlcl9Xcml0ZUZyYW1lSGVhZGVyKFBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKnFkYXRhLCBzaXplX3QgZnJhbWVfbGVuKQoreworICAgIHFkYXRhWzBdID0gRlJBTUU7CisgICAgX3dyaXRlX3NpemU2NChxZGF0YSArIDEsIGZyYW1lX2xlbik7Cit9CisKK3N0YXRpYyBpbnQKK19QaWNrbGVyX0NvbW1pdEZyYW1lKFBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgc2l6ZV90IGZyYW1lX2xlbjsKKyAgICBjaGFyICpxZGF0YTsKKworICAgIGlmICghc2VsZi0+ZnJhbWluZyB8fCBzZWxmLT5mcmFtZV9zdGFydCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZnJhbWVfbGVuID0gc2VsZi0+b3V0cHV0X2xlbiAtIHNlbGYtPmZyYW1lX3N0YXJ0IC0gRlJBTUVfSEVBREVSX1NJWkU7CisgICAgcWRhdGEgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5vdXRwdXRfYnVmZmVyKSArIHNlbGYtPmZyYW1lX3N0YXJ0OworICAgIF9QaWNrbGVyX1dyaXRlRnJhbWVIZWFkZXIoc2VsZiwgcWRhdGEsIGZyYW1lX2xlbik7CisgICAgc2VsZi0+ZnJhbWVfc3RhcnQgPSAtMTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX1BpY2tsZXJfT3Bjb2RlQm91bmRhcnkoUGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IGZyYW1lX2xlbjsKKworICAgIGlmICghc2VsZi0+ZnJhbWluZyB8fCBzZWxmLT5mcmFtZV9zdGFydCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZnJhbWVfbGVuID0gc2VsZi0+b3V0cHV0X2xlbiAtIHNlbGYtPmZyYW1lX3N0YXJ0IC0gRlJBTUVfSEVBREVSX1NJWkU7CisgICAgaWYgKGZyYW1lX2xlbiA+PSBGUkFNRV9TSVpFX1RBUkdFVCkKKyAgICAgICAgcmV0dXJuIF9QaWNrbGVyX0NvbW1pdEZyYW1lKHNlbGYpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBfUGlja2xlcl9HZXRTdHJpbmcoUGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqb3V0cHV0X2J1ZmZlciA9IHNlbGYtPm91dHB1dF9idWZmZXI7CiAKICAgICBhc3NlcnQoc2VsZi0+b3V0cHV0X2J1ZmZlciAhPSBOVUxMKTsKKworICAgIGlmIChfUGlja2xlcl9Db21taXRGcmFtZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0gTlVMTDsKICAgICAvKiBSZXNpemUgZG93biB0byBleGFjdCBzaXplICovCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmb3V0cHV0X2J1ZmZlciwgc2VsZi0+b3V0cHV0X2xlbikgPCAwKQpAQCAtNjkyLDY3ICs5MjIsNjQgQEAKIAogICAgIGFzc2VydChzZWxmLT53cml0ZSAhPSBOVUxMKTsKIAorICAgIC8qIFRoaXMgd2lsbCBjb21taXQgdGhlIGZyYW1lIGZpcnN0ICovCiAgICAgb3V0cHV0ID0gX1BpY2tsZXJfR2V0U3RyaW5nKHNlbGYpOwogICAgIGlmIChvdXRwdXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgcmVzdWx0ID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+d3JpdGUsIG91dHB1dCk7CisgICAgcmVzdWx0ID0gX1BpY2tsZV9GYXN0Q2FsbChzZWxmLT53cml0ZSwgb3V0cHV0KTsKICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CiAgICAgcmV0dXJuIChyZXN1bHQgPT0gTlVMTCkgPyAtMSA6IDA7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90Ci1fUGlja2xlcl9Xcml0ZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IG4pCitfUGlja2xlcl9Xcml0ZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IGRhdGFfbGVuKQogewotICAgIFB5X3NzaXplX3QgaSwgcmVxdWlyZWQ7CisgICAgUHlfc3NpemVfdCBpLCBuLCByZXF1aXJlZDsKICAgICBjaGFyICpidWZmZXI7CisgICAgaW50IG5lZWRfbmV3X2ZyYW1lOwogCiAgICAgYXNzZXJ0KHMgIT0gTlVMTCk7CisgICAgbmVlZF9uZXdfZnJhbWUgPSAoc2VsZi0+ZnJhbWluZyAmJiBzZWxmLT5mcmFtZV9zdGFydCA9PSAtMSk7CisKKyAgICBpZiAobmVlZF9uZXdfZnJhbWUpCisgICAgICAgIG4gPSBkYXRhX2xlbiArIEZSQU1FX0hFQURFUl9TSVpFOworICAgIGVsc2UKKyAgICAgICAgbiA9IGRhdGFfbGVuOwogCiAgICAgcmVxdWlyZWQgPSBzZWxmLT5vdXRwdXRfbGVuICsgbjsKICAgICBpZiAocmVxdWlyZWQgPiBzZWxmLT5tYXhfb3V0cHV0X2xlbikgewotICAgICAgICBpZiAoc2VsZi0+d3JpdGUgIT0gTlVMTCAmJiByZXF1aXJlZCA+IE1BWF9XUklURV9CVUZfU0laRSkgewotICAgICAgICAgICAgLyogWFhYIFRoaXMgcmVhbGxvY2F0ZXMgYSBuZXcgYnVmZmVyIGV2ZXJ5IHRpbWUsIHdoaWNoIGlzIGEgYml0Ci0gICAgICAgICAgICAgICB3YXN0ZWZ1bC4gKi8KLSAgICAgICAgICAgIGlmIChfUGlja2xlcl9GbHVzaFRvRmlsZShzZWxmKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKF9QaWNrbGVyX0NsZWFyQnVmZmVyKHNlbGYpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIC8qIE1ha2UgcGxhY2UgaW4gYnVmZmVyIGZvciB0aGUgcGlja2xlIGNodW5rICovCisgICAgICAgIGlmIChzZWxmLT5vdXRwdXRfbGVuID49IFBZX1NTSVpFX1RfTUFYIC8gMiAtIG4pIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHNlbGYtPndyaXRlICE9IE5VTEwgJiYgbiA+IE1BWF9XUklURV9CVUZfU0laRSkgewotICAgICAgICAgICAgLyogd2UgYWxyZWFkeSBmbHVzaGVkIGFib3ZlLCBzbyB0aGUgYnVmZmVyIGlzIGVtcHR5ICovCi0gICAgICAgICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgICAgICAgICAgLyogWFhYIHdlIGNvdWxkIHNwYXJlIGFuIGludGVybWVkaWF0ZSBjb3B5IGFuZCBwYXNzCi0gICAgICAgICAgICAgICBhIG1lbW9yeXZpZXcgaW5zdGVhZCAqLwotICAgICAgICAgICAgUHlPYmplY3QgKm91dHB1dCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgbik7Ci0gICAgICAgICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHJlc3VsdCA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNlbGYtPndyaXRlLCBvdXRwdXQpOwotICAgICAgICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgPT0gTlVMTCkgPyAtMSA6IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+b3V0cHV0X2xlbiA+PSBQWV9TU0laRV9UX01BWCAvIDIgLSBuKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbiA9IChzZWxmLT5vdXRwdXRfbGVuICsgbikgLyAyICogMzsKLSAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnNlbGYtPm91dHB1dF9idWZmZXIsIHNlbGYtPm1heF9vdXRwdXRfbGVuKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisgICAgICAgIHNlbGYtPm1heF9vdXRwdXRfbGVuID0gKHNlbGYtPm91dHB1dF9sZW4gKyBuKSAvIDIgKiAzOworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZzZWxmLT5vdXRwdXRfYnVmZmVyLCBzZWxmLT5tYXhfb3V0cHV0X2xlbikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBidWZmZXIgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5vdXRwdXRfYnVmZmVyKTsKLSAgICBpZiAobiA8IDgpIHsKKyAgICBpZiAobmVlZF9uZXdfZnJhbWUpIHsKKyAgICAgICAgLyogU2V0dXAgbmV3IGZyYW1lICovCisgICAgICAgIFB5X3NzaXplX3QgZnJhbWVfc3RhcnQgPSBzZWxmLT5vdXRwdXRfbGVuOworICAgICAgICBzZWxmLT5mcmFtZV9zdGFydCA9IGZyYW1lX3N0YXJ0OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlJBTUVfSEVBREVSX1NJWkU7IGkrKykgeworICAgICAgICAgICAgLyogV3JpdGUgYW4gaW52YWxpZCB2YWx1ZSwgZm9yIGRlYnVnZ2luZyAqLworICAgICAgICAgICAgYnVmZmVyW2ZyYW1lX3N0YXJ0ICsgaV0gPSAweEZFOworICAgICAgICB9CisgICAgICAgIHNlbGYtPm91dHB1dF9sZW4gKz0gRlJBTUVfSEVBREVSX1NJWkU7CisgICAgfQorICAgIGlmIChkYXRhX2xlbiA8IDgpIHsKICAgICAgICAgLyogVGhpcyBpcyBmYXN0ZXIgdGhhbiBtZW1jcHkgd2hlbiB0aGUgc3RyaW5nIGlzIHNob3J0LiAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhX2xlbjsgaSsrKSB7CiAgICAgICAgICAgICBidWZmZXJbc2VsZi0+b3V0cHV0X2xlbiArIGldID0gc1tpXTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciArIHNlbGYtPm91dHB1dF9sZW4sIHMsIG4pOworICAgICAgICBtZW1jcHkoYnVmZmVyICsgc2VsZi0+b3V0cHV0X2xlbiwgcywgZGF0YV9sZW4pOwogICAgIH0KLSAgICBzZWxmLT5vdXRwdXRfbGVuICs9IG47Ci0gICAgcmV0dXJuIG47CisgICAgc2VsZi0+b3V0cHV0X2xlbiArPSBkYXRhX2xlbjsKKyAgICByZXR1cm4gZGF0YV9sZW47CiB9CiAKIHN0YXRpYyBQaWNrbGVyT2JqZWN0ICoKQEAgLTc2NiwyNSArOTkzLDIzIEBACiAKICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBOVUxMOwogICAgIHNlbGYtPmRpc3BhdGNoX3RhYmxlID0gTlVMTDsKLSAgICBzZWxmLT5hcmcgPSBOVUxMOwogICAgIHNlbGYtPndyaXRlID0gTlVMTDsKICAgICBzZWxmLT5wcm90byA9IDA7CiAgICAgc2VsZi0+YmluID0gMDsKKyAgICBzZWxmLT5mcmFtaW5nID0gMDsKKyAgICBzZWxmLT5mcmFtZV9zdGFydCA9IC0xOwogICAgIHNlbGYtPmZhc3QgPSAwOwogICAgIHNlbGYtPmZhc3RfbmVzdGluZyA9IDA7CiAgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSAwOwogICAgIHNlbGYtPmZhc3RfbWVtbyA9IE5VTEw7Ci0KLSAgICBzZWxmLT5tZW1vID0gUHlNZW1vVGFibGVfTmV3KCk7Ci0gICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbiA9IFdSSVRFX0JVRl9TSVpFOwogICAgIHNlbGYtPm91dHB1dF9sZW4gPSAwOworCisgICAgc2VsZi0+bWVtbyA9IFB5TWVtb1RhYmxlX05ldygpOwogICAgIHNlbGYtPm91dHB1dF9idWZmZXIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4pOwotICAgIGlmIChzZWxmLT5vdXRwdXRfYnVmZmVyID09IE5VTEwpIHsKKworICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwgfHwgc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNzkyLDM0ICsxMDE3LDI5IEBACiB9CiAKIHN0YXRpYyBpbnQKLV9QaWNrbGVyX1NldFByb3RvY29sKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpwcm90b19vYmosCi0gICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZml4X2ltcG9ydHNfb2JqKQorX1BpY2tsZXJfU2V0UHJvdG9jb2woUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpCiB7Ci0gICAgbG9uZyBwcm90byA9IDA7Ci0gICAgaW50IGZpeF9pbXBvcnRzOworICAgIGxvbmcgcHJvdG87CiAKLSAgICBpZiAocHJvdG9fb2JqID09IE5VTEwgfHwgcHJvdG9fb2JqID09IFB5X05vbmUpCisgICAgaWYgKHByb3RvY29sID09IE5VTEwgfHwgcHJvdG9jb2wgPT0gUHlfTm9uZSkgewogICAgICAgICBwcm90byA9IERFRkFVTFRfUFJPVE9DT0w7CisgICAgfQogICAgIGVsc2UgewotICAgICAgICBwcm90byA9IFB5TG9uZ19Bc0xvbmcocHJvdG9fb2JqKTsKLSAgICAgICAgaWYgKHByb3RvID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHByb3RvID0gUHlMb25nX0FzTG9uZyhwcm90b2NvbCk7CisgICAgICAgIGlmIChwcm90byA8IDApIHsKKyAgICAgICAgICAgIGlmIChwcm90byA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHByb3RvID0gSElHSEVTVF9QUk9UT0NPTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwcm90byA+IEhJR0hFU1RfUFJPVE9DT0wpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAicGlja2xlIHByb3RvY29sIG11c3QgYmUgPD0gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEhJR0hFU1RfUFJPVE9DT0wpOwogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChwcm90byA8IDApCi0gICAgICAgIHByb3RvID0gSElHSEVTVF9QUk9UT0NPTDsKLSAgICBpZiAocHJvdG8gPiBISUdIRVNUX1BST1RPQ09MKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAicGlja2xlIHByb3RvY29sIG11c3QgYmUgPD0gJWQiLAotICAgICAgICAgICAgICAgICAgICAgSElHSEVTVF9QUk9UT0NPTCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHNfb2JqKTsKLSAgICBpZiAoZml4X2ltcG9ydHMgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHNlbGYtPnByb3RvID0gcHJvdG87CisgICAgc2VsZi0+cHJvdG8gPSAoaW50KXByb3RvOwogICAgIHNlbGYtPmJpbiA9IHByb3RvID4gMDsKICAgICBzZWxmLT5maXhfaW1wb3J0cyA9IGZpeF9pbXBvcnRzICYmIHByb3RvIDwgMzsKLQogICAgIHJldHVybiAwOwogfQogCkBAIC04NDEsMjAgKzEwNjEsNiBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgX1BpY2tsZXJfRmFzdENhbGwoKS4gKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1fVW5waWNrbGVyX0Zhc3RDYWxsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0KLSAgICBBUkdfVFVQKHNlbGYsIGFyZyk7Ci0gICAgaWYgKHNlbGYtPmFyZykgewotICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKGZ1bmMsIHNlbGYtPmFyZywgTlVMTCk7Ci0gICAgICAgIEZSRUVfQVJHX1RVUChzZWxmKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogLyogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4gVGhpcyB0YWtlcyBpdHMKICAgIG93biByZWZlcmVuY2UgdG8gYGlucHV0YC4gKi8KIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC04NzQsMTggKzEwODAsMjEgQEAKIHN0YXRpYyBpbnQKIF9VbnBpY2tsZXJfU2tpcENvbnN1bWVkKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICBQeV9zc2l6ZV90IGNvbnN1bWVkID0gc2VsZi0+bmV4dF9yZWFkX2lkeCAtIHNlbGYtPnByZWZldGNoZWRfaWR4OworICAgIFB5X3NzaXplX3QgY29uc3VtZWQ7CisgICAgUHlPYmplY3QgKnI7CiAKLSAgICBpZiAoY29uc3VtZWQgPiAwKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpyOwotICAgICAgICBhc3NlcnQoc2VsZi0+cGVlayk7ICAvKiBvdGhlcndpc2Ugd2UgZGlkIHNvbWV0aGluZyB3cm9uZyAqLwotICAgICAgICAvKiBUaGlzIG1ha2VzIGFuIHVzZWxlc3MgY29weS4uLiAqLwotICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPnJlYWQsICJuIiwgY29uc3VtZWQpOwotICAgICAgICBpZiAociA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBQeV9ERUNSRUYocik7Ci0gICAgICAgIHNlbGYtPnByZWZldGNoZWRfaWR4ID0gc2VsZi0+bmV4dF9yZWFkX2lkeDsKLSAgICB9CisgICAgY29uc3VtZWQgPSBzZWxmLT5uZXh0X3JlYWRfaWR4IC0gc2VsZi0+cHJlZmV0Y2hlZF9pZHg7CisgICAgaWYgKGNvbnN1bWVkIDw9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgYXNzZXJ0KHNlbGYtPnBlZWspOyAgLyogb3RoZXJ3aXNlIHdlIGRpZCBzb21ldGhpbmcgd3JvbmcgKi8KKyAgICAvKiBUaGlzIG1ha2VzIGFuIHVzZWxlc3MgY29weS4uLiAqLworICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+cmVhZCwgIm4iLCBjb25zdW1lZCk7CisgICAgaWYgKHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5X0RFQ1JFRihyKTsKKworICAgIHNlbGYtPnByZWZldGNoZWRfaWR4ID0gc2VsZi0+bmV4dF9yZWFkX2lkeDsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtOTA5LDU2ICsxMTE4LDUxIEBACiBfVW5waWNrbGVyX1JlYWRGcm9tRmlsZShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbikKIHsKICAgICBQeU9iamVjdCAqZGF0YTsKLSAgICBQeV9zc2l6ZV90IHJlYWRfc2l6ZSwgcHJlZmV0Y2hlZF9zaXplID0gMDsKKyAgICBQeV9zc2l6ZV90IHJlYWRfc2l6ZTsKIAogICAgIGFzc2VydChzZWxmLT5yZWFkICE9IE5VTEwpOwogCiAgICAgaWYgKF9VbnBpY2tsZXJfU2tpcENvbnN1bWVkKHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKG4gPT0gUkVBRF9XSE9MRV9MSU5FKQorICAgIGlmIChuID09IFJFQURfV0hPTEVfTElORSkgeworICAgICAgICBQeU9iamVjdCAqZW1wdHlfdHVwbGUgPSBQeVR1cGxlX05ldygwKTsKICAgICAgICAgZGF0YSA9IFB5T2JqZWN0X0NhbGwoc2VsZi0+cmVhZGxpbmUsIGVtcHR5X3R1cGxlLCBOVUxMKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKmxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKLSAgICAgICAgaWYgKGxlbiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBkYXRhID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT5yZWFkLCBsZW4pOworICAgICAgICBQeV9ERUNSRUYoZW1wdHlfdHVwbGUpOwogICAgIH0KLSAgICBpZiAoZGF0YSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBQcmVmZXRjaCBzb21lIGRhdGEgd2l0aG91dCBhZHZhbmNpbmcgdGhlIGZpbGUgcG9pbnRlciwgaWYgcG9zc2libGUgKi8KLSAgICBpZiAoc2VsZi0+cGVlaykgewotICAgICAgICBQeU9iamVjdCAqbGVuLCAqcHJlZmV0Y2hlZDsKLSAgICAgICAgbGVuID0gUHlMb25nX0Zyb21Tc2l6ZV90KFBSRUZFVENIKTsKLSAgICAgICAgaWYgKGxlbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgcHJlZmV0Y2hlZCA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+cGVlaywgbGVuKTsKLSAgICAgICAgaWYgKHByZWZldGNoZWQgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcikpIHsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKmxlbjsKKyAgICAgICAgLyogUHJlZmV0Y2ggc29tZSBkYXRhIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBmaWxlIHBvaW50ZXIsIGlmIHBvc3NpYmxlICovCisgICAgICAgIGlmIChzZWxmLT5wZWVrICYmIG4gPCBQUkVGRVRDSCkgeworICAgICAgICAgICAgbGVuID0gUHlMb25nX0Zyb21Tc2l6ZV90KFBSRUZFVENIKTsKKyAgICAgICAgICAgIGlmIChsZW4gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBkYXRhID0gX1BpY2tsZV9GYXN0Q2FsbChzZWxmLT5wZWVrLCBsZW4pOworICAgICAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgIC8qIHBlZWsoKSBpcyBwcm9iYWJseSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBnaXZlbiBmaWxlIG9iamVjdCAqLwogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+cGVlayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZWFkX3NpemUgPSBfVW5waWNrbGVyX1NldFN0cmluZ0lucHV0KHNlbGYsIGRhdGEpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSAwOworICAgICAgICAgICAgICAgIGlmIChuIDw9IHJlYWRfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnQoUHlCeXRlc19DaGVjayhwcmVmZXRjaGVkKSk7Ci0gICAgICAgICAgICBwcmVmZXRjaGVkX3NpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHByZWZldGNoZWQpOwotICAgICAgICAgICAgUHlCeXRlc19Db25jYXRBbmREZWwoJmRhdGEsIHByZWZldGNoZWQpOwotICAgICAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKyAgICAgICAgbGVuID0gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOworICAgICAgICBpZiAobGVuID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGRhdGEgPSBfUGlja2xlX0Zhc3RDYWxsKHNlbGYtPnJlYWQsIGxlbik7CiAgICAgfQorICAgIGlmIChkYXRhID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKIAotICAgIHJlYWRfc2l6ZSA9IF9VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQoc2VsZiwgZGF0YSkgLSBwcmVmZXRjaGVkX3NpemU7CisgICAgcmVhZF9zaXplID0gX1VucGlja2xlcl9TZXRTdHJpbmdJbnB1dChzZWxmLCBkYXRhKTsKICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSByZWFkX3NpemU7CiAgICAgcmV0dXJuIHJlYWRfc2l6ZTsKIH0KIApAQCAtMTAwNiw4ICsxMjEwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipyZXN1bHQpCiB7CiAgICAgY2hhciAqaW5wdXRfbGluZSA9IFB5TWVtX1JlYWxsb2Moc2VsZi0+aW5wdXRfbGluZSwgbGVuICsgMSk7Ci0gICAgaWYgKGlucHV0X2xpbmUgPT0gTlVMTCkKKyAgICBpZiAoaW5wdXRfbGluZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBtZW1jcHkoaW5wdXRfbGluZSwgbGluZSwgbGVuKTsKICAgICBpbnB1dF9saW5lW2xlbl0gPSAnXDAnOwpAQCAtMTA5Niw3ICsxMzAyLDEyIEBACiAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICBvbGRfaXRlbSA9IHNlbGYtPm1lbW9baWR4XTsKICAgICBzZWxmLT5tZW1vW2lkeF0gPSB2YWx1ZTsKLSAgICBQeV9YREVDUkVGKG9sZF9pdGVtKTsKKyAgICBpZiAob2xkX2l0ZW0gIT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYob2xkX2l0ZW0pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc2VsZi0+bWVtb19sZW4rKzsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTExMDQsOCArMTMxNSwxMCBAQAogX1VucGlja2xlcl9OZXdNZW1vKFB5X3NzaXplX3QgbmV3X3NpemUpCiB7CiAgICAgUHlPYmplY3QgKiptZW1vID0gUHlNZW1fTUFMTE9DKG5ld19zaXplICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICBpZiAobWVtbyA9PSBOVUxMKQorICAgIGlmIChtZW1vID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG1lbXNldChtZW1vLCAwLCBuZXdfc2l6ZSAqIHNpemVvZihQeU9iamVjdCAqKSk7CiAgICAgcmV0dXJuIG1lbW87CiB9CkBAIC0xMTM2LDIxICsxMzQ5LDYgQEAKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPnN0YWNrID0gKFBkYXRhICopUGRhdGFfTmV3KCk7Ci0gICAgaWYgKHNlbGYtPnN0YWNrID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbWVtc2V0KCZzZWxmLT5idWZmZXIsIDAsIHNpemVvZihQeV9idWZmZXIpKTsKLQotICAgIHNlbGYtPm1lbW9fc2l6ZSA9IDMyOwotICAgIHNlbGYtPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+bWVtb19zaXplKTsKLSAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBOVUxMOwogICAgIHNlbGYtPmlucHV0X2J1ZmZlciA9IE5VTEw7CiAgICAgc2VsZi0+aW5wdXRfbGluZSA9IE5VTEw7CkBAIC0xMTY3LDYgKzEzNjUsMTYgQEAKICAgICBzZWxmLT5tYXJrc19zaXplID0gMDsKICAgICBzZWxmLT5wcm90byA9IDA7CiAgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSAwOworICAgIG1lbXNldCgmc2VsZi0+YnVmZmVyLCAwLCBzaXplb2YoUHlfYnVmZmVyKSk7CisgICAgc2VsZi0+bWVtb19zaXplID0gMzI7CisgICAgc2VsZi0+bWVtb19sZW4gPSAwOworICAgIHNlbGYtPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+bWVtb19zaXplKTsKKyAgICBzZWxmLT5zdGFjayA9IChQZGF0YSAqKVBkYXRhX05ldygpOworCisgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCB8fCBzZWxmLT5zdGFjayA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmV0dXJuIHNlbGY7CiB9CkBAIC0xMjEzLDggKzE0MjEsOCBAQAogICAgIGlmIChlcnJvcnMgPT0gTlVMTCkKICAgICAgICAgZXJyb3JzID0gInN0cmljdCI7CiAKLSAgICBzZWxmLT5lbmNvZGluZyA9IHN0cmR1cChlbmNvZGluZyk7Ci0gICAgc2VsZi0+ZXJyb3JzID0gc3RyZHVwKGVycm9ycyk7CisgICAgc2VsZi0+ZW5jb2RpbmcgPSBfUHlNZW1fU3RyZHVwKGVuY29kaW5nKTsKKyAgICBzZWxmLT5lcnJvcnMgPSBfUHlNZW1fU3RyZHVwKGVycm9ycyk7CiAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwgfHwgc2VsZi0+ZXJyb3JzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTI1Nyw3ICsxNDY1LDggQEAKICAgICAgICAgICAgIGxlbiA9IDU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7IC8qIHVubGlrZWx5ICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtbyBpZCB0b28gbGFyZ2UgZm9yIExPTkdfQklOR0VUIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KQEAgLTEyNzQsMTI4ICsxNDgzLDE3NSBAQAogc3RhdGljIGludAogbWVtb19wdXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKIHsKLSAgICBQeV9zc2l6ZV90IHg7CiAgICAgY2hhciBwZGF0YVszMF07CiAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgaW50IHN0YXR1cyA9IDA7CisgICAgUHlfc3NpemVfdCBpZHg7CisKKyAgICBjb25zdCBjaGFyIG1lbW9pemVfb3AgPSBNRU1PSVpFOwogCiAgICAgaWYgKHNlbGYtPmZhc3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgeCA9IFB5TWVtb1RhYmxlX1NpemUoc2VsZi0+bWVtbyk7Ci0gICAgaWYgKFB5TWVtb1RhYmxlX1NldChzZWxmLT5tZW1vLCBvYmosIHgpIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZHggPSBQeU1lbW9UYWJsZV9TaXplKHNlbGYtPm1lbW8pOworICAgIGlmIChQeU1lbW9UYWJsZV9TZXQoc2VsZi0+bWVtbywgb2JqLCBpZHgpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKCFzZWxmLT5iaW4pIHsKKyAgICBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm1lbW9pemVfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKCFzZWxmLT5iaW4pIHsKICAgICAgICAgcGRhdGFbMF0gPSBQVVQ7CiAgICAgICAgIFB5T1Nfc25wcmludGYocGRhdGEgKyAxLCBzaXplb2YocGRhdGEpIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAiJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgeCk7CisgICAgICAgICAgICAgICAgICAgICAgIiUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIGlkeCk7CiAgICAgICAgIGxlbiA9IHN0cmxlbihwZGF0YSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBpZiAoeCA8IDI1NikgeworICAgICAgICBpZiAoaWR4IDwgMjU2KSB7CiAgICAgICAgICAgICBwZGF0YVswXSA9IEJJTlBVVDsKLSAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpeDsKKyAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpaWR4OwogICAgICAgICAgICAgbGVuID0gMjsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh4IDw9IDB4ZmZmZmZmZmZMKSB7CisgICAgICAgIGVsc2UgaWYgKGlkeCA8PSAweGZmZmZmZmZmTCkgewogICAgICAgICAgICAgcGRhdGFbMF0gPSBMT05HX0JJTlBVVDsKLSAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHggJiAweGZmKTsKLSAgICAgICAgICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDgpICYgMHhmZik7Ci0gICAgICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiAxNikgJiAweGZmKTsKLSAgICAgICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDI0KSAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcikoaWR4ICYgMHhmZik7CisgICAgICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoaWR4ID4+IDgpICYgMHhmZik7CisgICAgICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoaWR4ID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbNF0gPSAodW5zaWduZWQgY2hhcikoKGlkeCA+PiAyNCkgJiAweGZmKTsKICAgICAgICAgICAgIGxlbiA9IDU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7IC8qIHVubGlrZWx5ICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtbyBpZCB0b28gbGFyZ2UgZm9yIExPTkdfQklOUFVUIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9Ci0KICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgcGRhdGEsIGxlbikgPCAwKQotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZiAoMCkgewotICBlcnJvcjoKLSAgICAgICAgc3RhdHVzID0gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXR1czsKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdoaWNobW9kdWxlKFB5T2JqZWN0ICpnbG9iYWwsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSkKK2dldGF0dHJpYnV0ZShQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSwgaW50IGFsbG93X3F1YWxuYW1lKSB7CisgICAgUHlPYmplY3QgKmRvdHRlZF9wYXRoOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBfUHlfc3RhdGljX3N0cmluZyhQeUlkX2RvdCwgIi4iKTsKKyAgICBfUHlfc3RhdGljX3N0cmluZyhQeUlkX2xvY2FscywgIjxsb2NhbHM+Iik7CisKKyAgICBkb3R0ZWRfcGF0aCA9IFB5VW5pY29kZV9TcGxpdChuYW1lLCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9kb3QpLCAtMSk7CisgICAgaWYgKGRvdHRlZF9wYXRoID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGFzc2VydChQeV9TSVpFKGRvdHRlZF9wYXRoKSA+PSAxKTsKKyAgICBpZiAoIWFsbG93X3F1YWxuYW1lICYmIFB5X1NJWkUoZG90dGVkX3BhdGgpID4gMSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgZ2V0IHF1YWxpZmllZCBhdHRyaWJ1dGUgJVIgb24gJVI7IgorICAgICAgICAgICAgICAgICAgICAgInVzZSBwcm90b2NvbHMgPj0gNCB0byBlbmFibGUgc3VwcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lLCBvYmopOworICAgICAgICBQeV9ERUNSRUYoZG90dGVkX3BhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfSU5DUkVGKG9iaik7CisgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoZG90dGVkX3BhdGgpOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKnN1YnBhdGggPSBQeUxpc3RfR0VUX0lURU0oZG90dGVkX3BhdGgsIGkpOworICAgICAgICBQeU9iamVjdCAqdG1wOworICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlVbmljb2RlX1JpY2hDb21wYXJlKAorICAgICAgICAgICAgc3VicGF0aCwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbG9jYWxzKSwgUHlfRVEpOworICAgICAgICBpbnQgaXNfZXF1YWwgPSAocmVzdWx0ID09IFB5X1RydWUpOworICAgICAgICBhc3NlcnQoUHlCb29sX0NoZWNrKHJlc3VsdCkpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgaWYgKGlzX2VxdWFsKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBsb2NhbCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOworICAgICAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdG1wID0gUHlPYmplY3RfR2V0QXR0cihvYmosIHN1YnBhdGgpOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG9iaiA9IHRtcDsKKyAgICB9CisgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgUHlPYmplY3QgKgord2hpY2htb2R1bGUoUHlPYmplY3QgKmdsb2JhbCwgUHlPYmplY3QgKmdsb2JhbF9uYW1lLCBpbnQgYWxsb3dfcXVhbG5hbWUpCiB7Ci0gICAgUHlfc3NpemVfdCBpLCBqOwotICAgIHN0YXRpYyBQeU9iamVjdCAqbW9kdWxlX3N0ciA9IE5VTEw7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICptYWluX3N0ciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOwogICAgIFB5T2JqZWN0ICptb2R1bGVzX2RpY3Q7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKICAgICBQeU9iamVjdCAqb2JqOworICAgIFB5X3NzaXplX3QgaSwgajsKKyAgICBfUHlfSURFTlRJRklFUihfX21vZHVsZV9fKTsKKyAgICBfUHlfSURFTlRJRklFUihtb2R1bGVzKTsKKyAgICBfUHlfSURFTlRJRklFUihfX21haW5fXyk7CiAKLSAgICBpZiAobW9kdWxlX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIG1vZHVsZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19tb2R1bGVfXyIpOwotICAgICAgICBpZiAobW9kdWxlX3N0ciA9PSBOVUxMKQorICAgIG1vZHVsZV9uYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChnbG9iYWwsICZQeUlkX19fbW9kdWxlX18pOworCisgICAgaWYgKG1vZHVsZV9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBtYWluX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX21haW5fXyIpOwotICAgICAgICBpZiAobWFpbl9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIG1vZHVsZV9uYW1lID0gUHlPYmplY3RfR2V0QXR0cihnbG9iYWwsIG1vZHVsZV9zdHIpOwotCi0gICAgLyogSW4gc29tZSByYXJlIGNhc2VzIChlLmcuLCBib3VuZCBtZXRob2RzIG9mIGV4dGVuc2lvbiB0eXBlcyksCi0gICAgICAgX19tb2R1bGVfXyBjYW4gYmUgTm9uZS4gSWYgaXQgaXMgc28sIHRoZW4gc2VhcmNoIHN5cy5tb2R1bGVzCi0gICAgICAgZm9yIHRoZSBtb2R1bGUgb2YgZ2xvYmFsLiAgKi8KLSAgICBpZiAobW9kdWxlX25hbWUgPT0gUHlfTm9uZSkgewotICAgICAgICBQeV9ERUNSRUYobW9kdWxlX25hbWUpOwotICAgICAgICBnb3RvIHNlYXJjaDsKLSAgICB9Ci0KLSAgICBpZiAobW9kdWxlX25hbWUpIHsKLSAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lOwotICAgIH0KLSAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIEluIHNvbWUgcmFyZSBjYXNlcyAoZS5nLiwgYm91bmQgbWV0aG9kcyBvZiBleHRlbnNpb24gdHlwZXMpLAorICAgICAgICAgICBfX21vZHVsZV9fIGNhbiBiZSBOb25lLiBJZiBpdCBpcyBzbywgdGhlbiBzZWFyY2ggc3lzLm1vZHVsZXMgZm9yCisgICAgICAgICAgIHRoZSBtb2R1bGUgb2YgZ2xvYmFsLiAqLworICAgICAgICBpZiAobW9kdWxlX25hbWUgIT0gUHlfTm9uZSkKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGVfbmFtZTsKKyAgICAgICAgUHlfQ0xFQVIobW9kdWxlX25hbWUpOworICAgIH0KKyAgICBhc3NlcnQobW9kdWxlX25hbWUgPT0gTlVMTCk7CiAKLSAgc2VhcmNoOgotICAgIG1vZHVsZXNfZGljdCA9IFB5U3lzX0dldE9iamVjdCgibW9kdWxlcyIpOwotICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkKKyAgICBtb2R1bGVzX2RpY3QgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfbW9kdWxlcyk7CisgICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5tb2R1bGVzIik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGkgPSAwOwotICAgIG1vZHVsZV9uYW1lID0gTlVMTDsKICAgICB3aGlsZSAoKGogPSBQeURpY3RfTmV4dChtb2R1bGVzX2RpY3QsICZpLCAmbW9kdWxlX25hbWUsICZtb2R1bGUpKSkgewotICAgICAgICBpZiAoUHlPYmplY3RfUmljaENvbXBhcmVCb29sKG1vZHVsZV9uYW1lLCBtYWluX3N0ciwgUHlfRVEpID09IDEpCisgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeVVuaWNvZGVfUmljaENvbXBhcmUoCisgICAgICAgICAgICBtb2R1bGVfbmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pLCBQeV9FUSk7CisgICAgICAgIGludCBpc19lcXVhbCA9IChyZXN1bHQgPT0gUHlfVHJ1ZSk7CisgICAgICAgIGFzc2VydChQeUJvb2xfQ2hlY2socmVzdWx0KSk7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICBpZiAoaXNfZXF1YWwpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG1vZHVsZSA9PSBQeV9Ob25lKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgb2JqID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgb2JqID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIGFsbG93X3F1YWxuYW1lKTsKICAgICAgICAgaWYgKG9iaiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAob2JqICE9IGdsb2JhbCkgeworICAgICAgICBpZiAob2JqID09IGdsb2JhbCkgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gbW9kdWxlX25hbWU7CiAgICAgICAgIH0KLQogICAgICAgICBQeV9ERUNSRUYob2JqKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLyogSWYgbm8gbW9kdWxlIGlzIGZvdW5kLCB1c2UgX19tYWluX18uICovCi0gICAgaWYgKCFqKSB7Ci0gICAgICAgIG1vZHVsZV9uYW1lID0gbWFpbl9zdHI7Ci0gICAgfQotCisgICAgbW9kdWxlX25hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX21haW5fXyk7CiAgICAgUHlfSU5DUkVGKG1vZHVsZV9uYW1lKTsKICAgICByZXR1cm4gbW9kdWxlX25hbWU7CiB9CkBAIC0xNDI0LDcgKzE2ODAsNyBAQAogICAgICAgICBrZXkgPSBQeUxvbmdfRnJvbVZvaWRQdHIob2JqKTsKICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChQeURpY3RfR2V0SXRlbShzZWxmLT5mYXN0X21lbW8sIGtleSkpIHsKKyAgICAgICAgaWYgKFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHNlbGYtPmZhc3RfbWVtbywga2V5KSkgewogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFzdCBtb2RlOiBjYW4ndCBwaWNrbGUgY3ljbGljIG9iamVjdHMgIgpAQCAtMTQzMyw2ICsxNjg5LDkgQEAKICAgICAgICAgICAgIHNlbGYtPmZhc3RfbmVzdGluZyA9IC0xOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShzZWxmLT5mYXN0X21lbW8sIGtleSwgUHlfTm9uZSkgPCAwKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgICAgIHNlbGYtPmZhc3RfbmVzdGluZyA9IC0xOwpAQCAtMTQ3Miw0NiArMTczMSw1OCBAQAogc3RhdGljIGludAogc2F2ZV9ib29sKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmJ1ZlsyXSA9IHsgRkFMU0UsIFRSVUUgfTsKLSAgICBjb25zdCBjaGFyIGxlblsyXSA9IHtzaXplb2YoRkFMU0UpIC0gMSwgc2l6ZW9mKFRSVUUpIC0gMX07Ci0gICAgaW50IHAgPSAob2JqID09IFB5X1RydWUpOwotCiAgICAgaWYgKHNlbGYtPnByb3RvID49IDIpIHsKLSAgICAgICAgY29uc3QgY2hhciBib29sX29wID0gcCA/IE5FV1RSVUUgOiBORVdGQUxTRTsKKyAgICAgICAgY29uc3QgY2hhciBib29sX29wID0gKG9iaiA9PSBQeV9UcnVlKSA/IE5FV1RSVUUgOiBORVdGQUxTRTsKICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZib29sX29wLCAxKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGVsc2UgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGJ1ZltwXSwgbGVuW3BdKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQorICAgIGVsc2UgeworICAgICAgICAvKiBUaGVzZSBhcmVuJ3Qgb3Bjb2RlcyAtLSB0aGV5J3JlIHdheXMgdG8gcGlja2xlIGJvb2xzIGJlZm9yZSBwcm90b2NvbCAyCisgICAgICAgICAqIHNvIHRoYXQgdW5waWNrbGVycyB3cml0dGVuIGJlZm9yZSBib29scyB3ZXJlIGludHJvZHVjZWQgdW5waWNrbGUgdGhlbQorICAgICAgICAgKiBhcyBpbnRzLCBidXQgdW5waWNrbGVycyBhZnRlciBjYW4gcmVjb2duaXplIHRoYXQgYm9vbHMgd2VyZSBpbnRlbmRlZC4KKyAgICAgICAgICogTm90ZSB0aGF0IHByb3RvY29sIDIgYWRkZWQgZGlyZWN0IHdheXMgdG8gcGlja2xlIGJvb2xzLgorICAgICAgICAgKi8KKyAgICAgICAgY29uc3QgY2hhciAqYm9vbF9zdHIgPSAob2JqID09IFB5X1RydWUpID8gIkkwMVxuIiA6ICJJMDBcbiI7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBib29sX3N0ciwgc3RybGVuKGJvb2xfc3RyKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotc2F2ZV9pbnQoUGlja2xlck9iamVjdCAqc2VsZiwgbG9uZyB4KQorc2F2ZV9sb25nKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgY2hhciBwZGF0YVszMl07Ci0gICAgUHlfc3NpemVfdCBsZW4gPSAwOworICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgbG9uZyB2YWw7CisgICAgaW50IHN0YXR1cyA9IDA7CiAKLSAgICBpZiAoIXNlbGYtPmJpbgotI2lmIFNJWkVPRl9MT05HID4gNAotICAgICAgICB8fCB4ID4gMHg3ZmZmZmZmZkwgfHwgeCA8IC0weDgwMDAwMDAwTAotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICAvKiBUZXh0LW1vZGUgcGlja2xlLCBvciBsb25nIHRvbyBiaWcgdG8gZml0IGluIHRoZSA0LWJ5dGUKLSAgICAgICAgICogc2lnbmVkIEJJTklOVCBmb3JtYXQ6ICBzdG9yZSBhcyBhIHN0cmluZy4KLSAgICAgICAgICovCi0gICAgICAgIHBkYXRhWzBdID0gTE9ORzsgICAgICAgIC8qIHVzZSBMT05HIGZvciBjb25zaXN0ZW5jeSB3aXRoIHBpY2tsZS5weSAqLwotICAgICAgICBQeU9TX3NucHJpbnRmKHBkYXRhICsgMSwgc2l6ZW9mKHBkYXRhKSAtIDEsICIlbGRMXG4iLCB4KTsKLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCBzdHJsZW4ocGRhdGEpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgY29uc3QgY2hhciBsb25nX29wID0gTE9ORzsKKworICAgIHZhbD0gUHlMb25nX0FzTG9uZyhvYmopOworICAgIGlmICh2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAvKiBvdXQgb2YgcmFuZ2UgZm9yIGludCBwaWNrbGluZyAqLworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogQmluYXJ5IHBpY2tsZSBhbmQgeCBmaXRzIGluIGEgc2lnbmVkIDQtYnl0ZSBpbnQuICovCi0gICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHggJiAweGZmKTsKLSAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHggPj4gOCkgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHggPj4gMTYpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDI0KSAmIDB4ZmYpOworICAgIGVsc2UgaWYgKHNlbGYtPmJpbiAmJgorICAgICAgICAgICAgIChzaXplb2YobG9uZykgPD0gNCB8fAorICAgICAgICAgICAgICAodmFsIDw9IDB4N2ZmZmZmZmZMICYmIHZhbCA+PSAoLTB4N2ZmZmZmZmZMIC0gMSkpKSkgeworICAgICAgICAvKiByZXN1bHQgZml0cyBpbiBhIHNpZ25lZCA0LWJ5dGUgaW50ZWdlci4KKworICAgICAgICAgICBOb3RlOiB3ZSBjYW4ndCB1c2UgLTB4ODAwMDAwMDBMIGluIHRoZSBhYm92ZSBjb25kaXRpb24gYmVjYXVzZSBzb21lCisgICAgICAgICAgIGNvbXBpbGVycyAoZS5nLiwgTVNWQykgd2lsbCBwcm9tb3RlIDB4ODAwMDAwMDBMIHRvIGFuIHVuc2lnbmVkIHR5cGUKKyAgICAgICAgICAgYmVmb3JlIGFwcGx5aW5nIHRoZSB1bmFyeSBtaW51cyB3aGVuIHNpemVvZihsb25nKSA8PSA0LiBUaGUKKyAgICAgICAgICAgcmVzdWx0aW5nIHZhbHVlIHN0YXlzIHVuc2lnbmVkIHdoaWNoIGlzIGNvbW1vbmx5IG5vdCB3aGF0IHdlIHdhbnQsCisgICAgICAgICAgIHNvIE1TVkMgaGFwcGlseSB3YXJucyB1cyBhYm91dCBpdC4gIEhvd2V2ZXIsIHRoYXQgcmVzdWx0IHdvdWxkIGhhdmUKKyAgICAgICAgICAgYmVlbiBmaW5lIGJlY2F1c2Ugd2UgZ3VhcmQgZm9yIHNpemVvZihsb25nKSA8PSA0IHdoaWNoIHR1cm5zIHRoZQorICAgICAgICAgICBjb25kaXRpb24gdHJ1ZSBpbiB0aGF0IHBhcnRpY3VsYXIgY2FzZS4gKi8KKyAgICAgICAgY2hhciBwZGF0YVszMl07CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gMDsKKworICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh2YWwgJiAweGZmKTsKKyAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHZhbCA+PiA4KSAmIDB4ZmYpOworICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsID4+IDI0KSAmIDB4ZmYpOwogCiAgICAgICAgIGlmICgocGRhdGFbNF0gPT0gMCkgJiYgKHBkYXRhWzNdID09IDApKSB7CiAgICAgICAgICAgICBpZiAocGRhdGFbMl0gPT0gMCkgewpAQCAtMTUzMCwzMSArMTgwMSwxMCBAQAogCiAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgbGVuKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXNhdmVfbG9uZyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQotewotICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgbG9uZyB2YWwgPSBQeUxvbmdfQXNMb25nKG9iaik7Ci0gICAgaW50IHN0YXR1cyA9IDA7Ci0KLSAgICBjb25zdCBjaGFyIGxvbmdfb3AgPSBMT05HOwotCi0gICAgaWYgKHZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIC8qIG91dCBvZiByYW5nZSBmb3IgaW50IHBpY2tsaW5nICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgfQotICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA+IDQKLSAgICAgICAgaWYgKHZhbCA8PSAweDdmZmZmZmZmTCAmJiB2YWwgPj0gLTB4ODAwMDAwMDBMKQotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gc2F2ZV9pbnQoc2VsZiwgdmFsKTsKLQogICAgIGlmIChzZWxmLT5wcm90byA+PSAyKSB7CiAgICAgICAgIC8qIExpbmVhci10aW1lIHBpY2tsaW5nLiAqLwogICAgICAgICBzaXplX3QgbmJpdHM7CkBAIC0xNzE5LDQwICsxOTY5LDI1IEBACiAgICAgICAgICAgIFB5dGhvbiAyICphbmQqIHRoZSBhcHByb3ByaWF0ZSAnYnl0ZXMnIG9iamVjdCB3aGVuIHVucGlja2xlZAogICAgICAgICAgICB1c2luZyBQeXRob24gMy4gQWdhaW4gdGhpcyBpcyBhIGhhY2sgYW5kIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcwogICAgICAgICAgICB3aXRoIG5ld2VyIHByb3RvY29scy4gKi8KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpjb2RlY3NfZW5jb2RlID0gTlVMTDsKICAgICAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZSA9IE5VTEw7CiAgICAgICAgIGludCBzdGF0dXM7CiAKLSAgICAgICAgaWYgKGNvZGVjc19lbmNvZGUgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlPYmplY3QgKmNvZGVjc19tb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvZGVjcyIpOwotICAgICAgICAgICAgaWYgKGNvZGVjc19tb2R1bGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvZGVjc19lbmNvZGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvZGVjc19tb2R1bGUsICJlbmNvZGUiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihjb2RlY3NfbW9kdWxlKTsKLSAgICAgICAgICAgIGlmIChjb2RlY3NfZW5jb2RlID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShvYmopID09IDApIHsKICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKCkpIiwgKFB5T2JqZWN0KikmUHlCeXRlc19UeXBlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqbGF0aW4xID0gTlVMTDsKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmljb2RlX3N0ciA9CiAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0RlY29kZUxhdGluMShQeUJ5dGVzX0FTX1NUUklORyhvYmopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShvYmopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIpOworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIobGF0aW4xKTsKKwogICAgICAgICAgICAgaWYgKHVuaWNvZGVfc3RyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKGxhdGluMSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoImxhdGluMSIpOwotICAgICAgICAgICAgICAgIGlmIChsYXRpbjEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlfQnVpbGRWYWx1ZSgiKE8oT08pKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjc19lbmNvZGUsIHVuaWNvZGVfc3RyLCBsYXRpbjEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y29kZWNzX2VuY29kZSwgdW5pY29kZV9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2xhdGluMSkpOwogICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGVfc3RyKTsKICAgICAgICAgfQogCkBAIC0xNzY2LDE0ICsyMDAxLDE0IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgIGNoYXIgaGVhZGVyWzVdOworICAgICAgICBjaGFyIGhlYWRlcls5XTsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CiAKICAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUob2JqKTsKICAgICAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIGlmIChzaXplIDwgMjU2KSB7CisgICAgICAgIGlmIChzaXplIDw9IDB4ZmYpIHsKICAgICAgICAgICAgIGhlYWRlclswXSA9IFNIT1JUX0JJTkJZVEVTOwogICAgICAgICAgICAgaGVhZGVyWzFdID0gKHVuc2lnbmVkIGNoYXIpc2l6ZTsKICAgICAgICAgICAgIGxlbiA9IDI7CkBAIC0xNzg2LDYgKzIwMjEsMTEgQEAKICAgICAgICAgICAgIGhlYWRlcls0XSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAyNCkgJiAweGZmKTsKICAgICAgICAgICAgIGxlbiA9IDU7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICAgICAgaGVhZGVyWzBdID0gQklOQllURVM4OworICAgICAgICAgICAgX3dyaXRlX3NpemU2NChoZWFkZXIgKyAxLCBzaXplKTsKKyAgICAgICAgICAgIGxlbiA9IDk7CisgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSBhIGJ5dGVzIG9iamVjdCBsYXJnZXIgdGhhbiA0IEdpQiIpOwpAQCAtMTg3Myw2MyArMjExMywxMDYgQEAKIH0KIAogc3RhdGljIGludAotc2F2ZV91bmljb2RlKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit3cml0ZV91dGY4KFBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKmRhdGEsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKLSAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgUHlPYmplY3QgKmVuY29kZWQgPSBOVUxMOworICAgIGNoYXIgaGVhZGVyWzldOworICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaWYgKHNlbGYtPmJpbikgewotICAgICAgICBjaGFyIHBkYXRhWzVdOwotCi0gICAgICAgIGVuY29kZWQgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKG9iaiwgInV0Zi04IiwgInN1cnJvZ2F0ZXBhc3MiKTsKLSAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCk7Ci0gICAgICAgIGlmIChzaXplID4gMHhmZmZmZmZmZkwpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgc2VyaWFsaXplIGEgc3RyaW5nIGxhcmdlciB0aGFuIDQgR2lCIik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOyAgICAgICAgICAvKiBzdHJpbmcgdG9vIGxhcmdlICovCi0gICAgICAgIH0KLQotICAgICAgICBwZGF0YVswXSA9IEJJTlVOSUNPREU7Ci0gICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHNpemUgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gOCkgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMTYpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDI0KSAmIDB4ZmYpOwotCi0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgNSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksIHNpemUpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKHNpemUgPD0gMHhmZiAmJiBzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgIGhlYWRlclswXSA9IFNIT1JUX0JJTlVOSUNPREU7CisgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKShzaXplICYgMHhmZik7CisgICAgICAgIGxlbiA9IDI7CisgICAgfQorICAgIGVsc2UgaWYgKHNpemUgPD0gMHhmZmZmZmZmZlVMKSB7CisgICAgICAgIGhlYWRlclswXSA9IEJJTlVOSUNPREU7CisgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKShzaXplICYgMHhmZik7CisgICAgICAgIGhlYWRlclsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiA4KSAmIDB4ZmYpOworICAgICAgICBoZWFkZXJbM10gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMTYpICYgMHhmZik7CisgICAgICAgIGhlYWRlcls0XSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgbGVuID0gNTsKKyAgICB9CisgICAgZWxzZSBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICBoZWFkZXJbMF0gPSBCSU5VTklDT0RFODsKKyAgICAgICAgX3dyaXRlX3NpemU2NChoZWFkZXIgKyAxLCBzaXplKTsKKyAgICAgICAgbGVuID0gOTsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBzZXJpYWxpemUgYSBzdHJpbmcgbGFyZ2VyIHRoYW4gNEdpQiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGhlYWRlciwgbGVuKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgZGF0YSwgc2l6ZSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVfdW5pY29kZV9iaW5hcnkoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqZW5jb2RlZCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIGNoYXIgKmRhdGE7CisgICAgaW50IHI7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKG9iaikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGRhdGEgPSBQeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZShvYmosICZzaXplKTsKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gd3JpdGVfdXRmOChzZWxmLCBkYXRhLCBzaXplKTsKKworICAgIC8qIElzc3VlICM4MzgzOiBmb3Igc3RyaW5ncyB3aXRoIGxvbmUgc3Vycm9nYXRlcywgZmFsbGJhY2sgb24gdGhlCisgICAgICAgInN1cnJvZ2F0ZXBhc3MiIGVycm9yIGhhbmRsZXIuICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBlbmNvZGVkID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhvYmosICJ1dGYtOCIsICJzdXJyb2dhdGVwYXNzIik7CisgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgciA9IHdyaXRlX3V0Zjgoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCisgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSk7CisgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgIHJldHVybiByOworfQorCitzdGF0aWMgaW50CitzYXZlX3VuaWNvZGUoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBpZiAoc2VsZi0+YmluKSB7CisgICAgICAgIGlmICh3cml0ZV91bmljb2RlX2JpbmFyeShzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkOworICAgICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgICAgIGNvbnN0IGNoYXIgdW5pY29kZV9vcCA9IFVOSUNPREU7CiAKICAgICAgICAgZW5jb2RlZCA9IHJhd191bmljb2RlX2VzY2FwZShvYmopOwogICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnVuaWNvZGVfb3AsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmdW5pY29kZV9vcCwgMSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KIAogICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKTsKLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLCBzaXplKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksIHNpemUpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKIAogICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgcmV0dXJuIDA7Ci0KLSAgZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihlbmNvZGVkKTsKLSAgICByZXR1cm4gLTE7CiB9CiAKIC8qIEEgaGVscGVyIGZvciBzYXZlX3R1cGxlLiAgUHVzaCB0aGUgbGVuIGVsZW1lbnRzIGluIHR1cGxlIHQgb24gdGhlIHN0YWNrLiAqLwpAQCAtMjU1NywzNCArMjg0MCwyNTIgQEAKIH0KIAogc3RhdGljIGludAorc2F2ZV9zZXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqaXRlbTsKKyAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IHNldF9zaXplLCBwcG9zID0gMDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKKworICAgIGNvbnN0IGNoYXIgZW1wdHlfc2V0X29wID0gRU1QVFlfU0VUOworICAgIGNvbnN0IGNoYXIgbWFya19vcCA9IE1BUks7CisgICAgY29uc3QgY2hhciBhZGRpdGVtc19vcCA9IEFERElURU1TOworCisgICAgaWYgKHNlbGYtPnByb3RvIDwgNCkgeworICAgICAgICBQeU9iamVjdCAqaXRlbXM7CisgICAgICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWU7CisgICAgICAgIGludCBzdGF0dXM7CisKKyAgICAgICAgaXRlbXMgPSBQeVNlcXVlbmNlX0xpc3Qob2JqKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCIoTyhPKSkiLCAoUHlPYmplY3QqKSZQeVNldF9UeXBlLCBpdGVtcyk7CisgICAgICAgIFB5X0RFQ1JFRihpdGVtcyk7CisgICAgICAgIGlmIChyZWR1Y2VfdmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8qIHNhdmVfcmVkdWNlKCkgd2lsbCBtZW1vaXplIHRoZSBvYmplY3QgYXV0b21hdGljYWxseS4gKi8KKyAgICAgICAgc3RhdHVzID0gc2F2ZV9yZWR1Y2Uoc2VsZiwgcmVkdWNlX3ZhbHVlLCBvYmopOworICAgICAgICBQeV9ERUNSRUYocmVkdWNlX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmVtcHR5X3NldF9vcCwgMSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHNldF9zaXplID0gUHlTZXRfR0VUX1NJWkUob2JqKTsKKyAgICBpZiAoc2V0X3NpemUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7ICAvKiBub3RoaW5nIHRvIGRvICovCisKKyAgICAvKiBXcml0ZSBpbiBiYXRjaGVzIG9mIEJBVENIU0laRS4gKi8KKyAgICBkbyB7CisgICAgICAgIGkgPSAwOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm1hcmtfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgd2hpbGUgKF9QeVNldF9OZXh0RW50cnkob2JqLCAmcHBvcywgJml0ZW0sICZoYXNoKSkgeworICAgICAgICAgICAgaWYgKHNhdmUoc2VsZiwgaXRlbSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmICgrK2kgPT0gQkFUQ0hTSVpFKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmYWRkaXRlbXNfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKFB5U2V0X0dFVF9TSVpFKG9iaikgIT0gc2V0X3NpemUpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgInNldCBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSB3aGlsZSAoaSA9PSBCQVRDSFNJWkUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhdmVfZnJvemVuc2V0KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKml0ZXI7CisKKyAgICBjb25zdCBjaGFyIG1hcmtfb3AgPSBNQVJLOworICAgIGNvbnN0IGNoYXIgZnJvemVuc2V0X29wID0gRlJPWkVOU0VUOworCisgICAgaWYgKHNlbGYtPmZhc3QgJiYgIWZhc3Rfc2F2ZV9lbnRlcihzZWxmLCBvYmopKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoc2VsZi0+cHJvdG8gPCA0KSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZTsKKyAgICAgICAgaW50IHN0YXR1czsKKworICAgICAgICBpdGVtcyA9IFB5U2VxdWVuY2VfTGlzdChvYmopOworICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKE8pKSIsIChQeU9iamVjdCopJlB5RnJvemVuU2V0X1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMpOworICAgICAgICBQeV9ERUNSRUYoaXRlbXMpOworICAgICAgICBpZiAocmVkdWNlX3ZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAvKiBzYXZlX3JlZHVjZSgpIHdpbGwgbWVtb2l6ZSB0aGUgb2JqZWN0IGF1dG9tYXRpY2FsbHkuICovCisgICAgICAgIHN0YXR1cyA9IHNhdmVfcmVkdWNlKHNlbGYsIHJlZHVjZV92YWx1ZSwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKHJlZHVjZV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZtYXJrX29wLCAxKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGl0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKG9iaik7CisgICAgaWYgKGl0ZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGZvciAoOzspIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW07CisKKyAgICAgICAgaXRlbSA9IFB5SXRlcl9OZXh0KGl0ZXIpOworICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2F2ZShzZWxmLCBpdGVtLCAwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgfQorICAgIFB5X0RFQ1JFRihpdGVyKTsKKworICAgIC8qIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWVtbywgdGhpcyBtZWFucyBpdCBpcworICAgICAgIHJlY3Vyc2l2ZS4gSW4gdGhpcyBjYXNlLCB0aHJvdyBhd2F5IGV2ZXJ5dGhpbmcgd2UgcHV0IG9uIHRoZQorICAgICAgIHN0YWNrLCBhbmQgZmV0Y2ggdGhlIG9iamVjdCBiYWNrIGZyb20gdGhlIG1lbW8uICovCisgICAgaWYgKFB5TWVtb1RhYmxlX0dldChzZWxmLT5tZW1vLCBvYmopKSB7CisgICAgICAgIGNvbnN0IGNoYXIgcG9wX21hcmtfb3AgPSBQT1BfTUFSSzsKKworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnBvcF9tYXJrX29wLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChtZW1vX2dldChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZmcm96ZW5zZXRfb3AsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ZpeF9pbXBvcnRzKFB5T2JqZWN0ICoqbW9kdWxlX25hbWUsIFB5T2JqZWN0ICoqZ2xvYmFsX25hbWUpCit7CisgICAgUHlPYmplY3QgKmtleTsKKyAgICBQeU9iamVjdCAqaXRlbTsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisKKyAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgKm1vZHVsZV9uYW1lLCAqZ2xvYmFsX25hbWUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+bmFtZV9tYXBwaW5nXzN0bzIsIGtleSk7CisgICAgUHlfREVDUkVGKGtleSk7CisgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgUHlPYmplY3QgKmZpeGVkX21vZHVsZV9uYW1lOworICAgICAgICBQeU9iamVjdCAqZml4ZWRfZ2xvYmFsX25hbWU7CisKKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGl0ZW0pIHx8IFB5VHVwbGVfR0VUX1NJWkUoaXRlbSkgIT0gMikgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgdmFsdWVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIDItdHVwbGVzLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBmaXhlZF9tb2R1bGVfbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMCk7CisgICAgICAgIGZpeGVkX2dsb2JhbF9uYW1lID0gUHlUdXBsZV9HRVRfSVRFTShpdGVtLCAxKTsKKyAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZml4ZWRfbW9kdWxlX25hbWUpIHx8CisgICAgICAgICAgICAhUHlVbmljb2RlX0NoZWNrKGZpeGVkX2dsb2JhbF9uYW1lKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgdmFsdWVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIHBhaXJzIG9mIHN0ciwgbm90ICglLjIwMHMsICUuMjAwcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZml4ZWRfbW9kdWxlX25hbWUpLT50cF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZml4ZWRfZ2xvYmFsX25hbWUpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIFB5X0NMRUFSKCptb2R1bGVfbmFtZSk7CisgICAgICAgIFB5X0NMRUFSKCpnbG9iYWxfbmFtZSk7CisgICAgICAgIFB5X0lOQ1JFRihmaXhlZF9tb2R1bGVfbmFtZSk7CisgICAgICAgIFB5X0lOQ1JFRihmaXhlZF9nbG9iYWxfbmFtZSk7CisgICAgICAgICptb2R1bGVfbmFtZSA9IGZpeGVkX21vZHVsZV9uYW1lOworICAgICAgICAqZ2xvYmFsX25hbWUgPSBmaXhlZF9nbG9iYWxfbmFtZTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yLCAqbW9kdWxlX25hbWUpOworICAgIGlmIChpdGVtKSB7CisgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHZhbHVlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSBzdHJpbmdzLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUigqbW9kdWxlX25hbWUpOworICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICptb2R1bGVfbmFtZSA9IGl0ZW07CisgICAgfQorICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBzYXZlX2dsb2JhbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdGF0aWMgUHlPYmplY3QgKm5hbWVfc3RyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZ2xvYmFsX25hbWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmNsczsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgaW50IHN0YXR1cyA9IDA7CisgICAgX1B5X0lERU5USUZJRVIoX19uYW1lX18pOworICAgIF9QeV9JREVOVElGSUVSKF9fcXVhbG5hbWVfXyk7CiAKICAgICBjb25zdCBjaGFyIGdsb2JhbF9vcCA9IEdMT0JBTDsKIAotICAgIGlmIChuYW1lX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIG5hbWVfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7Ci0gICAgICAgIGlmIChuYW1lX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0KICAgICBpZiAobmFtZSkgeworICAgICAgICBQeV9JTkNSRUYobmFtZSk7CiAgICAgICAgIGdsb2JhbF9uYW1lID0gbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKGdsb2JhbF9uYW1lKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGdsb2JhbF9uYW1lID0gUHlPYmplY3RfR2V0QXR0cihvYmosIG5hbWVfc3RyKTsKLSAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICAgICAgZ2xvYmFsX25hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19xdWFsbmFtZV9fKTsKKyAgICAgICAgICAgIGlmIChnbG9iYWxfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChnbG9iYWxfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBnbG9iYWxfbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX25hbWVfXyk7CisgICAgICAgICAgICBpZiAoZ2xvYmFsX25hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAgICAgfQogCi0gICAgbW9kdWxlX25hbWUgPSB3aGljaG1vZHVsZShvYmosIGdsb2JhbF9uYW1lKTsKKyAgICBtb2R1bGVfbmFtZSA9IHdoaWNobW9kdWxlKG9iaiwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvID49IDQpOwogICAgIGlmIChtb2R1bGVfbmFtZSA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yNTk4LDIxICszMDk5LDIxIEBACiAgICAgICAgZXh0cmEgcGFyYW1ldGVycyBvZiBfX2ltcG9ydF9fIHRvIGZpeCB0aGF0LiAqLwogICAgIG1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydChtb2R1bGVfbmFtZSk7CiAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBpbXBvcnQgb2YgbW9kdWxlICVSIGZhaWxlZCIsCiAgICAgICAgICAgICAgICAgICAgICBvYmosIG1vZHVsZV9uYW1lKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgY2xzID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICBjbHMgPSBnZXRhdHRyaWJ1dGUobW9kdWxlLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8gPj0gNCk7CiAgICAgaWYgKGNscyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogYXR0cmlidXRlIGxvb2t1cCAlUy4lUyBmYWlsZWQiLAotICAgICAgICAgICAgICAgICAgICAgb2JqLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOworICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBhdHRyaWJ1dGUgbG9va3VwICVTIG9uICVTIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICBvYmosIGdsb2JhbF9uYW1lLCBtb2R1bGVfbmFtZSk7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjbHMgIT0gb2JqKSB7CiAgICAgICAgIFB5X0RFQ1JFRihjbHMpOwotICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogaXQncyBub3QgdGhlIHNhbWUgb2JqZWN0IGFzICVTLiVTIiwKICAgICAgICAgICAgICAgICAgICAgIG9iaiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTI2MjMsMTggKzMxMjQsMjcgQEAKICAgICAgICAgLyogU2VlIHdoZXRoZXIgdGhpcyBpcyBpbiB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5LCBhbmQgaWYKICAgICAgICAgICogc28gZ2VuZXJhdGUgYW4gRVhUIG9wY29kZS4KICAgICAgICAgICovCisgICAgICAgIFB5T2JqZWN0ICpleHRlbnNpb25fa2V5OwogICAgICAgICBQeU9iamVjdCAqY29kZV9vYmo7ICAgICAgLyogZXh0ZW5zaW9uIGNvZGUgYXMgUHl0aG9uIG9iamVjdCAqLwogICAgICAgICBsb25nIGNvZGU7ICAgICAgICAgICAgICAgLyogZXh0ZW5zaW9uIGNvZGUgYXMgQyB2YWx1ZSAqLwogICAgICAgICBjaGFyIHBkYXRhWzVdOwogICAgICAgICBQeV9zc2l6ZV90IG47CiAKLSAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0d29fdHVwbGUsIDAsIG1vZHVsZV9uYW1lKTsKLSAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0d29fdHVwbGUsIDEsIGdsb2JhbF9uYW1lKTsKLSAgICAgICAgY29kZV9vYmogPSBQeURpY3RfR2V0SXRlbShleHRlbnNpb25fcmVnaXN0cnksIHR3b190dXBsZSk7CisgICAgICAgIGV4dGVuc2lvbl9rZXkgPSBQeVR1cGxlX1BhY2soMiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgaWYgKGV4dGVuc2lvbl9rZXkgPT0gTlVMTCkgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBjb2RlX29iaiA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5leHRlbnNpb25fcmVnaXN0cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX2tleSk7CisgICAgICAgIFB5X0RFQ1JFRihleHRlbnNpb25fa2V5KTsKICAgICAgICAgLyogVGhlIG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZCBpbiB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5LgogICAgICAgICAgICBUaGlzIGlzIHRoZSBtb3N0IGxpa2VseSBjb2RlIHBhdGguICovCi0gICAgICAgIGlmIChjb2RlX29iaiA9PSBOVUxMKQorICAgICAgICBpZiAoY29kZV9vYmogPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZ290byBnZW5fZ2xvYmFsOworICAgICAgICB9CiAKICAgICAgICAgLyogWFhYOiBwaWNrbGUucHkgZG9lc24ndCBjaGVjayBuZWl0aGVyIHRoZSB0eXBlLCBub3IgdGhlIHJhbmdlCiAgICAgICAgICAgIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgZXh0ZW5zaW9uX3JlZ2lzdHJ5LiBJdCBzaG91bGQgZm9yCkBAIC0yNjQyLDcgKzMxNTIsNyBAQAogCiAgICAgICAgIC8qIFZlcmlmeSBjb2RlX29iaiBoYXMgdGhlIHJpZ2h0IHR5cGUgYW5kIHZhbHVlLiAqLwogICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayhjb2RlX29iaikpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGV4dGVuc2lvbiBjb2RlICVSIGlzbid0IGFuIGludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiwgY29kZV9vYmopOwogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTI2NTAsOSArMzE2MCw4IEBACiAgICAgICAgIGNvZGUgPSBQeUxvbmdfQVNfTE9ORyhjb2RlX29iaik7CiAgICAgICAgIGlmIChjb2RlIDw9IDAgfHwgY29kZSA+IDB4N2ZmZmZmZmZMKSB7CiAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGV4dGVuc2lvbiBjb2RlICVsZCBpcyBvdXQgb2YgcmFuZ2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmosIGNvZGUpOworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwgIkNhbid0IHBpY2tsZSAlUjogZXh0ZW5zaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvZGUgJWxkIGlzIG91dCBvZiByYW5nZSIsIG9iaiwgY29kZSk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAKQEAgLTI2ODEsMTIwICszMTkwLDg0IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgLyogR2VuZXJhdGUgYSBub3JtYWwgZ2xvYmFsIG9wY29kZSBpZiB3ZSBhcmUgdXNpbmcgYSBwaWNrbGUKLSAgICAgICAgICAgcHJvdG9jb2wgPD0gMiwgb3IgaWYgdGhlIG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZCBpbiB0aGUKLSAgICAgICAgICAgZXh0ZW5zaW9uIHJlZ2lzdHJ5LiAqLwotICAgICAgICBQeU9iamVjdCAqZW5jb2RlZDsKLSAgICAgICAgUHlPYmplY3QgKigqdW5pY29kZV9lbmNvZGVyKShQeU9iamVjdCAqKTsKLQogICBnZW5fZ2xvYmFsOgotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmdsb2JhbF9vcCwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgc3RhY2tfZ2xvYmFsX29wID0gU1RBQ0tfR0xPQkFMOwogCi0gICAgICAgIC8qIFNpbmNlIFB5dGhvbiAzLjAgbm93IHN1cHBvcnRzIG5vbi1BU0NJSSBpZGVudGlmaWVycywgd2UgZW5jb2RlIGJvdGgKLSAgICAgICAgICAgdGhlIG1vZHVsZSBuYW1lIGFuZCB0aGUgZ2xvYmFsIG5hbWUgdXNpbmcgVVRGLTguIFdlIGRvIHNvIG9ubHkgd2hlbgotICAgICAgICAgICB3ZSBhcmUgdXNpbmcgdGhlIHBpY2tsZSBwcm90b2NvbCBuZXdlciB0aGFuIHZlcnNpb24gMy4gVGhpcyBpcyB0bwotICAgICAgICAgICBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIFVucGlja2xlciBydW5uaW5nIG9uIFB5dGhvbiAyLnguICovCi0gICAgICAgIGlmIChzZWxmLT5wcm90byA+PSAzKSB7Ci0gICAgICAgICAgICB1bmljb2RlX2VuY29kZXIgPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nOworICAgICAgICAgICAgaWYgKHNhdmUoc2VsZiwgbW9kdWxlX25hbWUsIDApIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKHNhdmUoc2VsZiwgZ2xvYmFsX25hbWUsIDApIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnN0YWNrX2dsb2JhbF9vcCwgMSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB1bmljb2RlX2VuY29kZXIgPSBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZzsKLSAgICAgICAgfQorICAgICAgICAgICAgLyogR2VuZXJhdGUgYSBub3JtYWwgZ2xvYmFsIG9wY29kZSBpZiB3ZSBhcmUgdXNpbmcgYSBwaWNrbGUKKyAgICAgICAgICAgICAgIHByb3RvY29sIDwgNCwgb3IgaWYgdGhlIG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZCBpbiB0aGUKKyAgICAgICAgICAgICAgIGV4dGVuc2lvbiByZWdpc3RyeS4gKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkOworICAgICAgICAgICAgUHlPYmplY3QgKigqdW5pY29kZV9lbmNvZGVyKShQeU9iamVjdCAqKTsKIAotICAgICAgICAvKiBGb3IgcHJvdG9jb2wgPCAzIGFuZCBpZiB0aGUgdXNlciBkaWRuJ3QgcmVxdWVzdCBhZ2FpbnN0IGRvaW5nIHNvLAotICAgICAgICAgICB3ZSBjb252ZXJ0IG1vZHVsZSBuYW1lcyB0byB0aGUgb2xkIDIueCBtb2R1bGUgbmFtZXMuICovCi0gICAgICAgIGlmIChzZWxmLT5maXhfaW1wb3J0cykgewotICAgICAgICAgICAgUHlPYmplY3QgKmtleTsKLSAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtOwotCi0gICAgICAgICAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKLSAgICAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmZ2xvYmFsX29wLCAxKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihuYW1lX21hcHBpbmdfM3RvMiwga2V5KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwotICAgICAgICAgICAgaWYgKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soaXRlbSkgfHwgUHlUdXBsZV9HRVRfU0laRShpdGVtKSAhPSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgdmFsdWVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgMi10dXBsZXMsIG5vdCAlLjIwMHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7CisKKyAgICAgICAgICAgIC8qIEZvciBwcm90b2NvbCA8IDMgYW5kIGlmIHRoZSB1c2VyIGRpZG4ndCByZXF1ZXN0IGFnYWluc3QgZG9pbmcKKyAgICAgICAgICAgICAgIHNvLCB3ZSBjb252ZXJ0IG1vZHVsZSBuYW1lcyB0byB0aGUgb2xkIDIueCBtb2R1bGUgbmFtZXMuICovCisgICAgICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPCAzICYmIHNlbGYtPmZpeF9pbXBvcnRzKSB7CisgICAgICAgICAgICAgICAgaWYgKGZpeF9pbXBvcnRzKCZtb2R1bGVfbmFtZSwgJmdsb2JhbF9uYW1lKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIobW9kdWxlX25hbWUpOwotICAgICAgICAgICAgICAgIFB5X0NMRUFSKGdsb2JhbF9uYW1lKTsKLSAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMCk7Ci0gICAgICAgICAgICAgICAgZ2xvYmFsX25hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGl0ZW0sIDEpOwotICAgICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKG1vZHVsZV9uYW1lKSB8fAotICAgICAgICAgICAgICAgICAgICAhUHlVbmljb2RlX0NoZWNrKGdsb2JhbF9uYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHZhbHVlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIHBhaXJzIG9mIHN0ciwgbm90ICglLjIwMHMsICUuMjAwcykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShtb2R1bGVfbmFtZSktPnRwX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGdsb2JhbF9uYW1lKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKGdsb2JhbF9uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoaW1wb3J0X21hcHBpbmdfM3RvMiwgbW9kdWxlX25hbWUpOwotICAgICAgICAgICAgaWYgKGl0ZW0pIHsKLSAgICAgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhpdGVtKSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkcgdmFsdWVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgc3RyaW5ncywgbm90ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIobW9kdWxlX25hbWUpOwotICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gaXRlbTsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYobW9kdWxlX25hbWUpOworICAgICAgICAgICAgLyogU2luY2UgUHl0aG9uIDMuMCBub3cgc3VwcG9ydHMgbm9uLUFTQ0lJIGlkZW50aWZpZXJzLCB3ZSBlbmNvZGUKKyAgICAgICAgICAgICAgIGJvdGggdGhlIG1vZHVsZSBuYW1lIGFuZCB0aGUgZ2xvYmFsIG5hbWUgdXNpbmcgVVRGLTguIFdlIGRvIHNvCisgICAgICAgICAgICAgICBvbmx5IHdoZW4gd2UgYXJlIHVzaW5nIHRoZSBwaWNrbGUgcHJvdG9jb2wgbmV3ZXIgdGhhbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAzLiBUaGlzIGlzIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgVW5waWNrbGVyIHJ1bm5pbmcKKyAgICAgICAgICAgICAgIG9uIFB5dGhvbiAyLnguICovCisgICAgICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPT0gMykgeworICAgICAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlciA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmc7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bmljb2RlX2VuY29kZXIgPSBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuY29kZWQgPSB1bmljb2RlX2VuY29kZXIobW9kdWxlX25hbWUpOworICAgICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgbW9kdWxlIGlkZW50aWZpZXIgJyVTJyB1c2luZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlja2xlIHByb3RvY29sICVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLCBzZWxmLT5wcm90byk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIFNhdmUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gKi8KLSAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2Rlcihtb2R1bGVfbmFtZSk7Ci0gICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgbW9kdWxlIGlkZW50aWZpZXIgJyVTJyB1c2luZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLCBtb2R1bGVfbmFtZSwgc2VsZi0+cHJvdG8pOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7Ci0gICAgICAgIGlmKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZihfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKIAotICAgICAgICAvKiBTYXZlIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuICovCi0gICAgICAgIGVuY29kZWQgPSB1bmljb2RlX2VuY29kZXIoZ2xvYmFsX25hbWUpOwotICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgcGlja2xlIGdsb2JhbCBpZGVudGlmaWVyICclUycgdXNpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlja2xlIHByb3RvY29sICVpIiwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKSA8IDApIHsKKyAgICAgICAgICAgIC8qIFNhdmUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gKi8KKyAgICAgICAgICAgIGVuY29kZWQgPSB1bmljb2RlX2VuY29kZXIoZ2xvYmFsX25hbWUpOworICAgICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgZ2xvYmFsIGlkZW50aWZpZXIgJyVTJyB1c2luZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlja2xlIHByb3RvY29sICVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICBpZihfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotCiAgICAgICAgIC8qIE1lbW9pemUgdGhlIG9iamVjdC4gKi8KICAgICAgICAgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTI4MTIsMzAgKzMyODUsNiBAQAogfQogCiBzdGF0aWMgaW50Ci1zYXZlX2VsbGlwc2lzKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnN0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJFbGxpcHNpcyIpOwotICAgIGludCByZXM7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgUHlfRWxsaXBzaXMsIHN0cik7Ci0gICAgUHlfREVDUkVGKHN0cik7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAotc2F2ZV9ub3RpbXBsZW1lbnRlZChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQotewotICAgIFB5T2JqZWN0ICpzdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiTm90SW1wbGVtZW50ZWQiKTsKLSAgICBpbnQgcmVzOwotICAgIGlmIChzdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJlcyA9IHNhdmVfZ2xvYmFsKHNlbGYsIFB5X05vdEltcGxlbWVudGVkLCBzdHIpOwotICAgIFB5X0RFQ1JFRihzdHIpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQKIHNhdmVfc2luZ2xldG9uX3R5cGUoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKnNpbmdsZXRvbikKIHsKICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlOwpAQCAtMjg3NSw3ICszMzI0LDcgQEAKICAgICBjb25zdCBjaGFyIGJpbnBlcnNpZF9vcCA9IEJJTlBFUlNJRDsKIAogICAgIFB5X0lOQ1JFRihvYmopOwotICAgIHBpZCA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIGZ1bmMsIG9iaik7CisgICAgcGlkID0gX1BpY2tsZV9GYXN0Q2FsbChmdW5jLCBvYmopOwogICAgIGlmIChwaWQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC0yOTIzLDE0ICszMzcyLDkgQEAKIGdldF9jbGFzcyhQeU9iamVjdCAqb2JqKQogewogICAgIFB5T2JqZWN0ICpjbHM7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpzdHJfY2xhc3M7CisgICAgX1B5X0lERU5USUZJRVIoX19jbGFzc19fKTsKIAotICAgIGlmIChzdHJfY2xhc3MgPT0gTlVMTCkgewotICAgICAgICBzdHJfY2xhc3MgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19jbGFzc19fIik7Ci0gICAgICAgIGlmIChzdHJfY2xhc3MgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBjbHMgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgc3RyX2NsYXNzKTsKKyAgICBjbHMgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19jbGFzc19fKTsKICAgICBpZiAoY2xzID09IE5VTEwpIHsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMjk1MiwxNyArMzM5NiwxOCBAQAogICAgIFB5T2JqZWN0ICpzdGF0ZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmxpc3RpdGVtcyA9IFB5X05vbmU7CiAgICAgUHlPYmplY3QgKmRpY3RpdGVtcyA9IFB5X05vbmU7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKLQotICAgIGludCB1c2VfbmV3b2JqID0gc2VsZi0+cHJvdG8gPj0gMjsKKyAgICBpbnQgdXNlX25ld29iaiA9IDAsIHVzZV9uZXdvYmpfZXggPSAwOwogCiAgICAgY29uc3QgY2hhciByZWR1Y2Vfb3AgPSBSRURVQ0U7CiAgICAgY29uc3QgY2hhciBidWlsZF9vcCA9IEJVSUxEOwogICAgIGNvbnN0IGNoYXIgbmV3b2JqX29wID0gTkVXT0JKOworICAgIGNvbnN0IGNoYXIgbmV3b2JqX2V4X29wID0gTkVXT0JKX0VYOwogCiAgICAgc2l6ZSA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKICAgICBpZiAoc2l6ZSA8IDIgfHwgc2l6ZSA+IDUpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJ0dXBsZSByZXR1cm5lZCBieSAiCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgInR1cGxlIHJldHVybmVkIGJ5ICIKICAgICAgICAgICAgICAgICAgICAgICAgICJfX3JlZHVjZV9fIG11c3QgY29udGFpbiAyIHRocm91Z2ggNSBlbGVtZW50cyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMjk3MiwxMiArMzQxNywxMiBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soY2FsbGFibGUpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLCAiZmlyc3QgaXRlbSBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJmaXJzdCBpdGVtIG9mIHRoZSB0dXBsZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBtdXN0IGJlIGNhbGxhYmxlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3R1cCkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJzZWNvbmQgaXRlbSBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJzZWNvbmQgaXRlbSBvZiB0aGUgdHVwbGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGJ5IF9fcmVkdWNlX18gbXVzdCBiZSBhIHR1cGxlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0yOTg4LDcgKzM0MzMsNyBAQAogICAgIGlmIChsaXN0aXRlbXMgPT0gUHlfTm9uZSkKICAgICAgICAgbGlzdGl0ZW1zID0gTlVMTDsKICAgICBlbHNlIGlmICghUHlJdGVyX0NoZWNrKGxpc3RpdGVtcykpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsICJmb3VydGggZWxlbWVudCBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsICJmb3VydGggZWxlbWVudCBvZiB0aGUgdHVwbGUgIgogICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGJ5IF9fcmVkdWNlX18gbXVzdCBiZSBhbiBpdGVyYXRvciwgbm90ICVzIiwKICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobGlzdGl0ZW1zKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTI5OTcsNDAgKzM0NDIsODEgQEAKICAgICBpZiAoZGljdGl0ZW1zID09IFB5X05vbmUpCiAgICAgICAgIGRpY3RpdGVtcyA9IE5VTEw7CiAgICAgZWxzZSBpZiAoIVB5SXRlcl9DaGVjayhkaWN0aXRlbXMpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLCAiZmlmdGggZWxlbWVudCBvZiB0aGUgdHVwbGUgIgorICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsICJmaWZ0aCBlbGVtZW50IG9mIHRoZSB0dXBsZSAiCiAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBtdXN0IGJlIGFuIGl0ZXJhdG9yLCBub3QgJXMiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShkaWN0aXRlbXMpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIC8qIFByb3RvY29sIDIgc3BlY2lhbCBjYXNlOiBpZiBjYWxsYWJsZSdzIG5hbWUgaXMgX19uZXdvYmpfXywgdXNlCi0gICAgICAgTkVXT0JKLiAqLwotICAgIGlmICh1c2VfbmV3b2JqKSB7Ci0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqbmV3b2JqX3N0ciA9IE5VTEwsICpuYW1lX3N0ciA9IE5VTEw7CisgICAgaWYgKHNlbGYtPnByb3RvID49IDIpIHsKICAgICAgICAgUHlPYmplY3QgKm5hbWU7CisgICAgICAgIF9QeV9JREVOVElGSUVSKF9fbmFtZV9fKTsKIAotICAgICAgICBpZiAobmV3b2JqX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZXdvYmpfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmV3b2JqX18iKTsKLSAgICAgICAgICAgIG5hbWVfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7Ci0gICAgICAgICAgICBpZiAobmV3b2JqX3N0ciA9PSBOVUxMIHx8IG5hbWVfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0KLSAgICAgICAgbmFtZSA9IFB5T2JqZWN0X0dldEF0dHIoY2FsbGFibGUsIG5hbWVfc3RyKTsKKyAgICAgICAgbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoY2FsbGFibGUsICZQeUlkX19fbmFtZV9fKTsKICAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgdXNlX25ld29iaiA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX2V4X18pOworICAgICAgICAgICAgdXNlX25ld29ial9leCA9IFB5VW5pY29kZV9DaGVjayhuYW1lKSAmJgorICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlKAorICAgICAgICAgICAgICAgICAgICBuYW1lLCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX25ld29ial9leF9fKSkgPT0gMDsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX18pOwogICAgICAgICAgICAgdXNlX25ld29iaiA9IFB5VW5pY29kZV9DaGVjayhuYW1lKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlKG5hbWUsIG5ld29ial9zdHIpID09IDA7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUoCisgICAgICAgICAgICAgICAgICAgIG5hbWUsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fbmV3b2JqX18pKSA9PSAwOwogICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICh1c2VfbmV3b2JqKSB7CisKKyAgICBpZiAodXNlX25ld29ial9leCkgeworICAgICAgICBQeU9iamVjdCAqY2xzOworICAgICAgICBQeU9iamVjdCAqYXJnczsKKyAgICAgICAgUHlPYmplY3QgKmt3YXJnczsKKworICAgICAgICBpZiAoUHlfU0laRShhcmd0dXApICE9IDMpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIG9mIHRoZSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4YWN0bHkgMywgbm90ICV6ZCIsIFB5X1NJWkUoYXJndHVwKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjbHMgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R1cCwgMCk7CisgICAgICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgaXRlbSBmcm9tIE5FV09CSl9FWCBhcmd1bWVudCB0dXBsZSBtdXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgYSBjbGFzcywgbm90ICUuMjAwcyIsIFB5X1RZUEUoY2xzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgYXJncyA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHVwLCAxKTsKKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBpdGVtIGZyb20gTkVXT0JKX0VYIGFyZ3VtZW50IHR1cGxlIG11c3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBhIHR1cGxlLCBub3QgJS4yMDBzIiwgUHlfVFlQRShhcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAga3dhcmdzID0gUHlUdXBsZV9HRVRfSVRFTShhcmd0dXAsIDIpOworICAgICAgICBpZiAoIVB5RGljdF9DaGVjayhrd2FyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXJkIGl0ZW0gZnJvbSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGEgZGljdCwgbm90ICUuMjAwcyIsIFB5X1RZUEUoa3dhcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2F2ZShzZWxmLCBjbHMsIDApIDwgMCB8fAorICAgICAgICAgICAgc2F2ZShzZWxmLCBhcmdzLCAwKSA8IDAgfHwKKyAgICAgICAgICAgIHNhdmUoc2VsZiwga3dhcmdzLCAwKSA8IDAgfHwKKyAgICAgICAgICAgIF9QaWNrbGVyX1dyaXRlKHNlbGYsICZuZXdvYmpfZXhfb3AsIDEpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHVzZV9uZXdvYmopIHsKICAgICAgICAgUHlPYmplY3QgKmNsczsKICAgICAgICAgUHlPYmplY3QgKm5ld2FyZ3R1cDsKICAgICAgICAgUHlPYmplY3QgKm9ial9jbGFzczsKQEAgLTMwMzgsMTMgKzM1MjQsMTMgQEAKIAogICAgICAgICAvKiBTYW5pdHkgY2hlY2tzLiAqLwogICAgICAgICBpZiAoUHlfU0laRShhcmd0dXApIDwgMSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJfX25ld29ial9fIGFyZ2xpc3QgaXMgZW1wdHkiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgIl9fbmV3b2JqX18gYXJnbGlzdCBpcyBlbXB0eSIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKICAgICAgICAgY2xzID0gUHlUdXBsZV9HRVRfSVRFTShhcmd0dXAsIDApOwogICAgICAgICBpZiAoIVB5VHlwZV9DaGVjayhjbHMpKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgImFyZ3NbMF0gZnJvbSAiCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJhcmdzWzBdIGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX25ld29ial9fIGFyZ3MgaXMgbm90IGEgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CkBAIC0zMDU0LDcgKzM1NDAsNyBAQAogICAgICAgICAgICAgcCA9IG9ial9jbGFzcyAhPSBjbHM7ICAgIC8qIHRydWUgaWZmIGEgcHJvYmxlbSAqLwogICAgICAgICAgICAgUHlfREVDUkVGKG9ial9jbGFzcyk7CiAgICAgICAgICAgICBpZiAocCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLCAiYXJnc1swXSBmcm9tICIKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJhcmdzWzBdIGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19uZXdvYmpfXyBhcmdzIGhhcyB0aGUgd3JvbmcgY2xhc3MiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CkBAIC0zMTE0LDggKzM2MDAsMjMgQEAKICAgICAgICB0aGUgY2FsbGVyIGRvIG5vdCB3YW50IHRvIG1lbW9pemUgdGhlIG9iamVjdC4gTm90IHBhcnRpY3VsYXJseSB1c2VmdWwsCiAgICAgICAgYnV0IHRoYXQgaXMgdG8gbWltaWMgdGhlIGJlaGF2aW9yIHNhdmVfcmVkdWNlKCkgaW4gcGlja2xlLnB5IHdoZW4KICAgICAgICBvYmogaXMgTm9uZS4gKi8KLSAgICBpZiAob2JqICYmIG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG9iaiAhPSBOVUxMKSB7CisgICAgICAgIC8qIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWVtbywgdGhpcyBtZWFucyBpdCBpcworICAgICAgICAgICByZWN1cnNpdmUuIEluIHRoaXMgY2FzZSwgdGhyb3cgYXdheSBldmVyeXRoaW5nIHdlIHB1dCBvbiB0aGUKKyAgICAgICAgICAgc3RhY2ssIGFuZCBmZXRjaCB0aGUgb2JqZWN0IGJhY2sgZnJvbSB0aGUgbWVtby4gKi8KKyAgICAgICAgaWYgKFB5TWVtb1RhYmxlX0dldChzZWxmLT5tZW1vLCBvYmopKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyIHBvcF9vcCA9IFBPUDsKKworICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZwb3Bfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAobWVtb19nZXQoc2VsZiwgb2JqKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBpZiAobGlzdGl0ZW1zICYmIGJhdGNoX2xpc3Qoc2VsZiwgbGlzdGl0ZW1zKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTMxNDAsNiArMzY0MSw5IEBACiAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZSA9IE5VTEw7CiAgICAgaW50IHN0YXR1cyA9IDA7CiAKKyAgICBpZiAoX1BpY2tsZXJfT3Bjb2RlQm91bmRhcnkoc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgcGlja2xpbmcgYW4gb2JqZWN0IikpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtMzE2OCwxNCArMzY3Miw2IEBACiAgICAgICAgIHN0YXR1cyA9IHNhdmVfbm9uZShzZWxmLCBvYmopOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQotICAgIGVsc2UgaWYgKG9iaiA9PSBQeV9FbGxpcHNpcykgewotICAgICAgICBzdGF0dXMgPSBzYXZlX2VsbGlwc2lzKHNlbGYsIG9iaik7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAob2JqID09IFB5X05vdEltcGxlbWVudGVkKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNhdmVfbm90aW1wbGVtZW50ZWQoc2VsZiwgb2JqKTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KICAgICBlbHNlIGlmIChvYmogPT0gUHlfRmFsc2UgfHwgb2JqID09IFB5X1RydWUpIHsKICAgICAgICAgc3RhdHVzID0gc2F2ZV9ib29sKHNlbGYsIG9iaik7CiAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTMyMTAsNiArMzcwNiwxNCBAQAogICAgICAgICBzdGF0dXMgPSBzYXZlX2RpY3Qoc2VsZiwgb2JqKTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICZQeVNldF9UeXBlKSB7CisgICAgICAgIHN0YXR1cyA9IHNhdmVfc2V0KHNlbGYsIG9iaik7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSAmUHlGcm96ZW5TZXRfVHlwZSkgeworICAgICAgICBzdGF0dXMgPSBzYXZlX2Zyb3plbnNldChzZWxmLCBvYmopOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQogICAgIGVsc2UgaWYgKHR5cGUgPT0gJlB5TGlzdF9UeXBlKSB7CiAgICAgICAgIHN0YXR1cyA9IHNhdmVfbGlzdChzZWxmLCBvYmopOwogICAgICAgICBnb3RvIGRvbmU7CkBAIC0zMjI0LDE2ICszNzI4LDYgQEAKICAgICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSAmUHlGdW5jdGlvbl9UeXBlKSB7CiAgICAgICAgIHN0YXR1cyA9IHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgTlVMTCk7Ci0gICAgICAgIGlmIChzdGF0dXMgPCAwICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUGlja2xlRXJyb3IpKSB7Ci0gICAgICAgICAgICAvKiBmYWxsIGJhY2sgdG8gcmVkdWNlICovCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gJlB5Q0Z1bmN0aW9uX1R5cGUpIHsKLSAgICAgICAgc3RhdHVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBOVUxMKTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KIApAQCAtMzI0NCwxMiArMzczOCwyMiBAQAogICAgICAqIF9fcmVkdWNlX2V4X18gbWV0aG9kLCBvciB0aGUgb2JqZWN0J3MgX19yZWR1Y2VfXyBtZXRob2QuCiAgICAgICovCiAgICAgaWYgKHNlbGYtPmRpc3BhdGNoX3RhYmxlID09IE5VTEwpIHsKLSAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeURpY3RfR2V0SXRlbShkaXNwYXRjaF90YWJsZSwgKFB5T2JqZWN0ICopdHlwZSk7Ci0gICAgICAgIC8qIFB5RGljdF9HZXRJdGVtKCkgdW5saWtlIFB5T2JqZWN0X0dldEl0ZW0oKSBhbmQKLSAgICAgICAgICAgUHlPYmplY3RfR2V0QXR0cigpIHJldHVybnMgYSBib3Jyb3dlZCByZWYgKi8KLSAgICAgICAgUHlfWElOQ1JFRihyZWR1Y2VfZnVuYyk7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+ZGlzcGF0Y2hfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopdHlwZSk7CisgICAgICAgIGlmIChyZWR1Y2VfZnVuYyA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcigpIHJldHVybnMgYSBib3Jyb3dlZCByZWZlcmVuY2UuCisgICAgICAgICAgICAgICBJbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIGJlIGNvbnNpc3RlbnQgd2l0aAorICAgICAgICAgICAgICAgUHlPYmplY3RfR2V0SXRlbSBhbmQgX1B5T2JqZWN0X0dldEF0dHJJZCB1c2VkIGJlbG93LiAqLworICAgICAgICAgICAgUHlfSU5DUkVGKHJlZHVjZV9mdW5jKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlZHVjZV9mdW5jID0gUHlPYmplY3RfR2V0SXRlbShzZWxmLT5kaXNwYXRjaF90YWJsZSwgKFB5T2JqZWN0ICopdHlwZSk7CisgICAgICAgIHJlZHVjZV9mdW5jID0gUHlPYmplY3RfR2V0SXRlbShzZWxmLT5kaXNwYXRjaF90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKXR5cGUpOwogICAgICAgICBpZiAocmVkdWNlX2Z1bmMgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CkBAIC0zMjU5LDI1ICszNzYzLDE2IEBACiAgICAgfQogICAgIGlmIChyZWR1Y2VfZnVuYyAhPSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihvYmopOwotICAgICAgICByZWR1Y2VfdmFsdWUgPSBfUGlja2xlcl9GYXN0Q2FsbChzZWxmLCByZWR1Y2VfZnVuYywgb2JqKTsKKyAgICAgICAgcmVkdWNlX3ZhbHVlID0gX1BpY2tsZV9GYXN0Q2FsbChyZWR1Y2VfZnVuYywgb2JqKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlUeXBlX0lzU3VidHlwZSh0eXBlLCAmUHlUeXBlX1R5cGUpKSB7CiAgICAgICAgIHN0YXR1cyA9IHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgTlVMTCk7CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqcmVkdWNlX3N0ciA9IE5VTEw7Ci0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqcmVkdWNlX2V4X3N0ciA9IE5VTEw7CisgICAgICAgIF9QeV9JREVOVElGSUVSKF9fcmVkdWNlX18pOworICAgICAgICBfUHlfSURFTlRJRklFUihfX3JlZHVjZV9leF9fKTsKIAotICAgICAgICAvKiBDYWNoZSB0aGUgbmFtZSBvZiB0aGUgcmVkdWNlIG1ldGhvZHMuICovCi0gICAgICAgIGlmIChyZWR1Y2Vfc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJlZHVjZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19yZWR1Y2VfXyIpOwotICAgICAgICAgICAgaWYgKHJlZHVjZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgcmVkdWNlX2V4X3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3JlZHVjZV9leF9fIik7Ci0gICAgICAgICAgICBpZiAocmVkdWNlX2V4X3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KIAogICAgICAgICAvKiBYWFg6IElmIHRoZSBfX3JlZHVjZV9fIG1ldGhvZCBpcyBkZWZpbmVkLCBfX3JlZHVjZV9leF9fIGlzCiAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBhcyBfX3JlZHVjZV9fLiBXaGlsZSB0aGlzIGlzIGNvbnZlbmllbnQsIHRoaXMKQEAgLTMyODgsMjYgKzM3ODMsMzQgQEAKICAgICAgICAgICAgZG9uJ3QgYWN0dWFsbHkgaGF2ZSB0byBjaGVjayBmb3IgYSBfX3JlZHVjZV9fIG1ldGhvZC4gKi8KIAogICAgICAgICAvKiBDaGVjayBmb3IgYSBfX3JlZHVjZV9leF9fIG1ldGhvZC4gKi8KLSAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgcmVkdWNlX2V4X3N0cik7CisgICAgICAgIHJlZHVjZV9mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fcmVkdWNlX2V4X18pOwogICAgICAgICBpZiAocmVkdWNlX2Z1bmMgIT0gTlVMTCkgewogICAgICAgICAgICAgUHlPYmplY3QgKnByb3RvOwogICAgICAgICAgICAgcHJvdG8gPSBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+cHJvdG8pOwogICAgICAgICAgICAgaWYgKHByb3RvICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBfUGlja2xlcl9GYXN0Q2FsbChzZWxmLCByZWR1Y2VfZnVuYywgcHJvdG8pOworICAgICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IF9QaWNrbGVfRmFzdENhbGwocmVkdWNlX2Z1bmMsIHByb3RvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGEgX19yZWR1Y2VfXyBtZXRob2QuICovCi0gICAgICAgICAgICByZWR1Y2VfZnVuYyA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCByZWR1Y2Vfc3RyKTsKLSAgICAgICAgICAgIGlmIChyZWR1Y2VfZnVuYyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlPYmplY3RfQ2FsbChyZWR1Y2VfZnVuYywgZW1wdHlfdHVwbGUsIE5VTEwpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsICJjYW4ndCBwaWNrbGUgJyUuMjAwcycgb2JqZWN0OiAlUiIsCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIENoZWNrIGZvciBhIF9fcmVkdWNlX18gbWV0aG9kLiAqLworICAgICAgICAgICAgcmVkdWNlX2Z1bmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19yZWR1Y2VfXyk7CisgICAgICAgICAgICBpZiAocmVkdWNlX2Z1bmMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplbXB0eV90dXBsZSA9IFB5VHVwbGVfTmV3KDApOworICAgICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5T2JqZWN0X0NhbGwocmVkdWNlX2Z1bmMsIGVtcHR5X3R1cGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVtcHR5X3R1cGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSAnJS4yMDBzJyBvYmplY3Q6ICVSIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSwgb2JqKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQpAQCAtMzMyMyw3ICszODI2LDggQEAKICAgICB9CiAKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2socmVkdWNlX3ZhbHVlKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiX19yZWR1Y2VfXyBtdXN0IHJldHVybiBhIHN0cmluZyBvciB0dXBsZSIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KQEAgLTMzMzUsNiArMzgzOSw3IEBACiAgICAgICAgIHN0YXR1cyA9IC0xOwogICAgIH0KICAgZG9uZToKKwogICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwogICAgIFB5X1hERUNSRUYocmVkdWNlX2Z1bmMpOwogICAgIFB5X1hERUNSRUYocmVkdWNlX3ZhbHVlKTsKQEAgLTMzNTUsNiArMzg2MCw4IEBACiAgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKXNlbGYtPnByb3RvOwogICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgaGVhZGVyLCAyKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KQorICAgICAgICAgICAgc2VsZi0+ZnJhbWluZyA9IDE7CiAgICAgfQogCiAgICAgaWYgKHNhdmUoc2VsZiwgb2JqLCAwKSA8IDAgfHwKQEAgLTMzNjQsMTYgKzM4NzEsMjEgQEAKICAgICByZXR1cm4gMDsKIH0KIAotUHlEb2NfU1RSVkFSKFBpY2tsZXJfY2xlYXJfbWVtb19kb2MsCi0iY2xlYXJfbWVtbygpIC0+IE5vbmUuIENsZWFycyB0aGUgcGlja2xlcidzIFwibWVtb1wiLiIKLSJcbiIKLSJUaGUgbWVtbyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCByZW1lbWJlcnMgd2hpY2ggb2JqZWN0cyB0aGVcbiIKLSJwaWNrbGVyIGhhcyBhbHJlYWR5IHNlZW4sIHNvIHRoYXQgc2hhcmVkIG9yIHJlY3Vyc2l2ZSBvYmplY3RzIGFyZVxuIgotInBpY2tsZWQgYnkgcmVmZXJlbmNlIGFuZCBub3QgYnkgdmFsdWUuICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlblxuIgotInJlLXVzaW5nIHBpY2tsZXJzLiIpOworLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLlBpY2tsZXIuY2xlYXJfbWVtbworCitDbGVhcnMgdGhlIHBpY2tsZXIncyAibWVtbyIuCisKK1RoZSBtZW1vIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlbWVtYmVycyB3aGljaCBvYmplY3RzIHRoZQorcGlja2xlciBoYXMgYWxyZWFkeSBzZWVuLCBzbyB0aGF0IHNoYXJlZCBvciByZWN1cnNpdmUgb2JqZWN0cyBhcmUKK3BpY2tsZWQgYnkgcmVmZXJlbmNlIGFuZCBub3QgYnkgdmFsdWUuICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlbgorcmUtdXNpbmcgcGlja2xlcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QaWNrbGVyX2NsZWFyX21lbW8oUGlja2xlck9iamVjdCAqc2VsZikKK19waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04NjY1Yzg2NThhYWEwOTRiIGlucHV0PTAxYmRhZDUyZjNkOTNlNTZdKi8KIHsKICAgICBpZiAoc2VsZi0+bWVtbykKICAgICAgICAgUHlNZW1vVGFibGVfQ2xlYXIoc2VsZi0+bWVtbyk7CkBAIC0zMzgxLDI3ICszODkzLDMxIEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihQaWNrbGVyX2R1bXBfZG9jLAotImR1bXAob2JqKSAtPiBOb25lLiBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuUGlja2xlci5kdW1wCisKKyAgb2JqOiBvYmplY3QKKyAgLworCitXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIG9iamVjdCB0byB0aGUgb3BlbiBmaWxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUGlja2xlcl9kdW1wKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3BpY2tsZV9QaWNrbGVyX2R1bXAoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04N2VjYWQxMjYxZTAyYWM3IGlucHV0PTU1MmViMWMwZjUyMjYwZDldKi8KIHsKLSAgICBQeU9iamVjdCAqb2JqOwotCiAgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgUGlja2xlciB3YXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IChpc3N1ZTM2NjQpLgogICAgICAgIERldmVsb3BlcnMgb2Z0ZW4gZm9yZ2V0IHRvIGNhbGwgX19pbml0X18oKSBpbiB0aGVpciBzdWJjbGFzc2VzLCB3aGljaAogICAgICAgIHdvdWxkIHRyaWdnZXIgYSBzZWdmYXVsdCB3aXRob3V0IHRoaXMgY2hlY2suICovCiAgICAgaWYgKHNlbGYtPndyaXRlID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIlBpY2tsZXIuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCBieSAlcy5fX2luaXRfXygpIiwKICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86ZHVtcCIsICZvYmopKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChfUGlja2xlcl9DbGVhckJ1ZmZlcihzZWxmKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zNDE1LDEwICszOTMxLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBQaWNrbGVyX21ldGhvZHNbXSA9IHsKLSAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pUGlja2xlcl9kdW1wLCBNRVRIX1ZBUkFSR1MsCi0gICAgIFBpY2tsZXJfZHVtcF9kb2N9LAotICAgIHsiY2xlYXJfbWVtbyIsIChQeUNGdW5jdGlvbilQaWNrbGVyX2NsZWFyX21lbW8sIE1FVEhfTk9BUkdTLAotICAgICBQaWNrbGVyX2NsZWFyX21lbW9fZG9jfSwKKyAgICBfUElDS0xFX1BJQ0tMRVJfRFVNUF9NRVRIT0RERUYKKyAgICBfUElDS0xFX1BJQ0tMRVJfQ0xFQVJfTUVNT19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gICAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTM0MzEsNyArMzk0NSw2IEBACiAgICAgUHlfWERFQ1JFRihzZWxmLT53cml0ZSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wZXJzX2Z1bmMpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+ZGlzcGF0Y2hfdGFibGUpOwotICAgIFB5X1hERUNSRUYoc2VsZi0+YXJnKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmZhc3RfbWVtbyk7CiAKICAgICBQeU1lbW9UYWJsZV9EZWwoc2VsZi0+bWVtbyk7CkBAIC0zNDQ1LDcgKzM5NTgsNiBAQAogICAgIFB5X1ZJU0lUKHNlbGYtPndyaXRlKTsKICAgICBQeV9WSVNJVChzZWxmLT5wZXJzX2Z1bmMpOwogICAgIFB5X1ZJU0lUKHNlbGYtPmRpc3BhdGNoX3RhYmxlKTsKLSAgICBQeV9WSVNJVChzZWxmLT5hcmcpOwogICAgIFB5X1ZJU0lUKHNlbGYtPmZhc3RfbWVtbyk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNDU3LDcgKzM5NjksNiBAQAogICAgIFB5X0NMRUFSKHNlbGYtPndyaXRlKTsKICAgICBQeV9DTEVBUihzZWxmLT5wZXJzX2Z1bmMpOwogICAgIFB5X0NMRUFSKHNlbGYtPmRpc3BhdGNoX3RhYmxlKTsKLSAgICBQeV9DTEVBUihzZWxmLT5hcmcpOwogICAgIFB5X0NMRUFSKHNlbGYtPmZhc3RfbWVtbyk7CiAKICAgICBpZiAoc2VsZi0+bWVtbyAhPSBOVUxMKSB7CkBAIC0zNDY5LDQ5ICszOTgwLDQ2IEBACiB9CiAKIAotUHlEb2NfU1RSVkFSKFBpY2tsZXJfZG9jLAotIlBpY2tsZXIoZmlsZSwgcHJvdG9jb2w9Tm9uZSkiCi0iXG4iCi0iVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciB3cml0aW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLlxuIgotIlxuIgotIlRoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlXG4iCi0iZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdFxuIgotInByb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvclxuIgotIlB5dGhvbiAzLjAuXG4iCi0iXG4iCi0iU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdFxuIgotInByb3RvY29sIHZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlXG4iCi0ibW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGVcbiIKLSJwcm9kdWNlZC5cbiIKLSJcbiIKLSJUaGUgZmlsZSBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGVcbiIKLSJieXRlcyBhcmd1bWVudC4gSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeVxuIgotIndyaXRpbmcsIGEgaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdFxuIgotIm1lZXRzIHRoaXMgaW50ZXJmYWNlLlxuIgotIlxuIgotIklmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKLSJtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uXG4iCi0iMi54LCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LlxuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuUGlja2xlci5fX2luaXRfXworCisgIGZpbGU6IG9iamVjdAorICBwcm90b2NvbDogb2JqZWN0ID0gTlVMTAorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKworVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciB3cml0aW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLgorCitUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuCitwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0Citwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wKK3ZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZQordmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC4KKworVGhlICpmaWxlKiBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUKK2J5dGVzIGFyZ3VtZW50LiBJdCBjYW4gdGh1cyBiZSBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgYmluYXJ5Cit3cml0aW5nLCBhIGlvLkJ5dGVzSU8gaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMKK3RoaXMgaW50ZXJmYWNlLgorCitJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkKK3RvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uCisyLCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIGludAotUGlja2xlcl9pbml0KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfUGlja2xlcl9fX2luaXRfX19pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NmUyMjlmM2IxZjQzMzJmIGlucHV0PWI4Y2RlYjdlM2Y1ZWU2NzRdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCAwfTsKLSAgICBQeU9iamVjdCAqZmlsZTsKLSAgICBQeU9iamVjdCAqcHJvdG9fb2JqID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOwogICAgIF9QeV9JREVOVElGSUVSKHBlcnNpc3RlbnRfaWQpOwogICAgIF9QeV9JREVOVElGSUVSKGRpc3BhdGNoX3RhYmxlKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9POlBpY2tsZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmZpbGUsICZwcm90b19vYmosICZmaXhfaW1wb3J0cykpCi0gICAgICAgIHJldHVybiAtMTsKLQogICAgIC8qIEluIGNhc2Ugb2YgbXVsdGlwbGUgX19pbml0X18oKSBjYWxscywgY2xlYXIgcHJldmlvdXMgY29udGVudC4gKi8KICAgICBpZiAoc2VsZi0+d3JpdGUgIT0gTlVMTCkKICAgICAgICAgKHZvaWQpUGlja2xlcl9jbGVhcihzZWxmKTsKIAotICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChzZWxmLCBwcm90b19vYmosIGZpeF9pbXBvcnRzKSA8IDApCisgICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHNlbGYsIHByb3RvY29sLCBmaXhfaW1wb3J0cykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoX1BpY2tsZXJfU2V0T3V0cHV0U3RyZWFtKHNlbGYsIGZpbGUpIDwgMCkKQEAgLTM1MzIsNyArNDA0MCw2IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT5mYXN0ID0gMDsKICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAwOwogICAgIHNlbGYtPmZhc3RfbWVtbyA9IE5VTEw7CkBAIC0zNTUwLDkgKzQwNTcsMTEgQEAKICAgICAgICAgaWYgKHNlbGYtPmRpc3BhdGNoX3RhYmxlID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorCiAgICAgcmV0dXJuIDA7CiB9CiAKKwogLyogRGVmaW5lIGEgcHJveHkgb2JqZWN0IGZvciB0aGUgUGlja2xlcidzIGludGVybmFsIG1lbW8gb2JqZWN0LiBUaGlzIGlzIHRvCiAgKiBhdm9pZCBicmVha2luZyBjb2RlIGxpa2U6CiAgKiAgcGlja2xlci5tZW1vLmNsZWFyKCkKQEAgLTM1NjMsMjcgKzQwNzIsMzAgQEAKICAqIGludGVudGlvbmFsLCBhcyB0aGVzZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFjay1ib3ggaW1wbGVtZW50YXRpb24gZGV0YWlscy4KICAqLwogCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlPYmplY3RfSEVBRAotICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7IC8qIFBpY2tsZXIgd2hvc2UgbWVtbyB0YWJsZSB3ZSdyZSBwcm94eWluZy4gKi8KLX0gUGlja2xlck1lbW9Qcm94eU9iamVjdDsKKy8qW2NsaW5pYyBpbnB1dF0KK19waWNrbGUuUGlja2xlck1lbW9Qcm94eS5jbGVhcgogCi1QeURvY19TVFJWQVIocG1wX2NsZWFyX2RvYywKLSJtZW1vLmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG1lbW8uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wbXBfY2xlYXIoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhcl9pbXBsKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWZiOTM3MGQ0OGFlOGIwNSBpbnB1dD1jY2MxODZkYWNkMGYxNDA1XSovCiB7CiAgICAgaWYgKHNlbGYtPnBpY2tsZXItPm1lbW8pCiAgICAgICAgIFB5TWVtb1RhYmxlX0NsZWFyKHNlbGYtPnBpY2tsZXItPm1lbW8pOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIocG1wX2NvcHlfZG9jLAotIm1lbW8uY29weSgpIC0+IG5ld19tZW1vLiAgQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisvKltjbGluaWMgaW5wdXRdCitfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkuY29weQorCitDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBtcF9jb3B5KFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmI4M2E5MTlkMjkyMjVlZiBpbnB1dD1iNzMwNDM0ODVhYzMwYjM2XSovCiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5TWVtb1RhYmxlICptZW1vOwpAQCAtMzYyMCwxNCArNDEzMiwxOCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIocG1wX3JlZHVjZV9kb2MsCi0ibWVtby5fX3JlZHVjZV9fKCkuIFBpY2tsaW5nIHN1cHBvcnQuIik7CisvKltjbGluaWMgaW5wdXRdCitfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkuX19yZWR1Y2VfXworCitJbXBsZW1lbnQgcGlja2xlIHN1cHBvcnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wbXBfcmVkdWNlKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19faW1wbChQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJlYmJhMTE2ODg2M2FiMWQgaW5wdXQ9MmY3YzU0MGUyNGI3YWFlNF0qLwogewogICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWUsICpkaWN0X2FyZ3M7Ci0gICAgUHlPYmplY3QgKmNvbnRlbnRzID0gcG1wX2NvcHkoc2VsZik7CisgICAgUHlPYmplY3QgKmNvbnRlbnRzID0gX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHlfaW1wbChzZWxmKTsKICAgICBpZiAoY29udGVudHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM2NTAsOSArNDE2Niw5IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBwaWNrbGVycHJveHlfbWV0aG9kc1tdID0gewotICAgIHsiY2xlYXIiLCAgICAgIChQeUNGdW5jdGlvbilwbXBfY2xlYXIsICBNRVRIX05PQVJHUywgIHBtcF9jbGVhcl9kb2N9LAotICAgIHsiY29weSIsICAgICAgIChQeUNGdW5jdGlvbilwbXBfY29weSwgICBNRVRIX05PQVJHUywgIHBtcF9jb3B5X2RvY30sCi0gICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKXBtcF9yZWR1Y2UsIE1FVEhfVkFSQVJHUywgcG1wX3JlZHVjZV9kb2N9LAorICAgIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9DTEVBUl9NRVRIT0RERUYKKyAgICBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfQ09QWV9NRVRIT0RERUYKKyAgICBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfX19SRURVQ0VfX19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTM4NjQsNyArNDM4MCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsCi0gICAgUGlja2xlcl9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLworICAgIF9waWNrbGVfUGlja2xlcl9fX2luaXRfX19fZG9jX18sICAgIC8qdHBfZG9jKi8KICAgICAodHJhdmVyc2Vwcm9jKVBpY2tsZXJfdHJhdmVyc2UsICAgICAvKnRwX3RyYXZlcnNlKi8KICAgICAoaW5xdWlyeSlQaWNrbGVyX2NsZWFyLCAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KQEAgLTM4NzksNyArNDM5NSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9nZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLwotICAgIChpbml0cHJvYylQaWNrbGVyX2luaXQsICAgICAgICAgICAgIC8qdHBfaW5pdCovCisgICAgX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fLCAgICAgICAgICAgLyp0cF9pbml0Ki8KICAgICBQeVR5cGVfR2VuZXJpY0FsbG9jLCAgICAgICAgICAgICAgICAvKnRwX2FsbG9jKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgICAgICAgICAvKnRwX25ldyovCiAgICAgUHlPYmplY3RfR0NfRGVsLCAgICAgICAgICAgICAgICAgICAgLyp0cF9mcmVlKi8KQEAgLTM5MDUsOCArNDQyMSw5IEBACiBzdGF0aWMgUHlfc3NpemVfdAogbWFya2VyKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgaWYgKHNlbGYtPm51bV9tYXJrcyA8IDEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgImNvdWxkIG5vdCBmaW5kIE1BUksiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJjb3VsZCBub3QgZmluZCBNQVJLIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTM5MjMsNyArNDQ0MCw4IEBACiBzdGF0aWMgaW50CiBiYWRfcmVhZGxpbmUodm9pZCkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAicGlja2xlIGRhdGEgd2FzIHRydW5jYXRlZCIpOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgInBpY2tsZSBkYXRhIHdhcyB0cnVuY2F0ZWQiKTsKICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTM5ODQsMTcgKzQ1MDIsMTUgQEAKICAqIGFzIGEgQyBQeV9zc2l6ZV90LCBvciAtMSBpZiBpdCdzIGhpZ2hlciB0aGFuIFBZX1NTSVpFX1RfTUFYLgogICovCiBzdGF0aWMgUHlfc3NpemVfdAotY2FsY19iaW5zaXplKGNoYXIgKmJ5dGVzLCBpbnQgc2l6ZSkKK2NhbGNfYmluc2l6ZShjaGFyICpieXRlcywgaW50IG5ieXRlcykKIHsKICAgICB1bnNpZ25lZCBjaGFyICpzID0gKHVuc2lnbmVkIGNoYXIgKilieXRlczsKKyAgICBpbnQgaTsKICAgICBzaXplX3QgeCA9IDA7CiAKLSAgICBhc3NlcnQoc2l6ZSA9PSA0KTsKLQotICAgIHggPSAgKHNpemVfdCkgc1swXTsKLSAgICB4IHw9IChzaXplX3QpIHNbMV0gPDwgODsKLSAgICB4IHw9IChzaXplX3QpIHNbMl0gPDwgMTY7Ci0gICAgeCB8PSAoc2l6ZV90KSBzWzNdIDw8IDI0OworICAgIGZvciAoaSA9IDA7IGkgPCBuYnl0ZXMgJiYgaSA8IHNpemVvZihzaXplX3QpOyBpKyspIHsKKyAgICAgICAgeCB8PSAoc2l6ZV90KSBzW2ldIDw8ICg4ICogaSk7CisgICAgfQogCiAgICAgaWYgKHggPiBQWV9TU0laRV9UX01BWCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDAwOCwyMSArNDUyNCwyMSBAQAogICogb2YgeC1wbGF0Zm9ybSBidWdzLgogICovCiBzdGF0aWMgbG9uZwotY2FsY19iaW5pbnQoY2hhciAqYnl0ZXMsIGludCBzaXplKQorY2FsY19iaW5pbnQoY2hhciAqYnl0ZXMsIGludCBuYnl0ZXMpCiB7CiAgICAgdW5zaWduZWQgY2hhciAqcyA9ICh1bnNpZ25lZCBjaGFyICopYnl0ZXM7Ci0gICAgaW50IGkgPSBzaXplOworICAgIGludCBpOwogICAgIGxvbmcgeCA9IDA7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIHggfD0gKGxvbmcpc1tpXSA8PCAoaSAqIDgpOworICAgIGZvciAoaSA9IDA7IGkgPCBuYnl0ZXM7IGkrKykgeworICAgICAgICB4IHw9IChsb25nKXNbaV0gPDwgKDggKiBpKTsKICAgICB9CiAKICAgICAvKiBVbmxpa2UgQklOSU5UMSBhbmQgQklOSU5UMiwgQklOSU5UIChtb3JlIGFjY3VyYXRlbHkgQklOSU5UNCkKICAgICAgKiBpcyBzaWduZWQsIHNvIG9uIGEgYm94IHdpdGggbG9uZ3MgYmlnZ2VyIHRoYW4gNCBieXRlcyB3ZSBuZWVkCiAgICAgICogdG8gZXh0ZW5kIGEgQklOSU5UJ3Mgc2lnbiBiaXQgdG8gdGhlIGZ1bGwgd2lkdGguCiAgICAgICovCi0gICAgaWYgKFNJWkVPRl9MT05HID4gNCAmJiBzaXplID09IDQpIHsKKyAgICBpZiAoU0laRU9GX0xPTkcgPiA0ICYmIG5ieXRlcyA9PSA0KSB7CiAgICAgICAgIHggfD0gLSh4ICYgKDFMIDw8IDMxKSk7CiAgICAgfQogCkBAIC00MTIwLDggKzQ2MzYsOSBAQAogCiAgICAgc2l6ZSA9IGNhbGNfYmluaW50KG5ieXRlcywgc2l6ZSk7CiAgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICAgICAgLyogQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZSAtLSB3ZSBuZXZlciB3cml0ZSBvbmUgbGlrZSB0aGlzICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkxPTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC00MTk1LDc1ICs0NzEyLDExMCBAQAogbG9hZF9zdHJpbmcoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpieXRlczsKLSAgICBQeU9iamVjdCAqc3RyID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2JqOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGNoYXIgKnMsICpwOwogCiAgICAgaWYgKChsZW4gPSBfVW5waWNrbGVyX1JlYWRsaW5lKHNlbGYsICZzKSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGxlbiA8IDIpCi0gICAgICAgIHJldHVybiBiYWRfcmVhZGxpbmUoKTsKLSAgICBpZiAoKHMgPSBzdHJkdXAocykpID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQorICAgIC8qIFN0cmlwIHRoZSBuZXdsaW5lICovCisgICAgbGVuLS07CiAgICAgLyogU3RyaXAgb3V0ZXJtb3N0IHF1b3RlcyAqLwotICAgIHdoaWxlIChsZW4gPiAwICYmIHNbbGVuIC0gMV0gPD0gJyAnKQotICAgICAgICBsZW4tLTsKLSAgICBpZiAobGVuID4gMSAmJiBzWzBdID09ICciJyAmJiBzW2xlbiAtIDFdID09ICciJykgewotICAgICAgICBzW2xlbiAtIDFdID0gJ1wwJzsKLSAgICAgICAgcCA9IHMgKyAxOwotICAgICAgICBsZW4gLT0gMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAobGVuID4gMSAmJiBzWzBdID09ICdcJycgJiYgc1tsZW4gLSAxXSA9PSAnXCcnKSB7Ci0gICAgICAgIHNbbGVuIC0gMV0gPSAnXDAnOworICAgIGlmIChsZW4gPj0gMiAmJiBzWzBdID09IHNbbGVuIC0gMV0gJiYgKHNbMF0gPT0gJ1wnJyB8fCBzWzBdID09ICciJykpIHsKICAgICAgICAgcCA9IHMgKyAxOwogICAgICAgICBsZW4gLT0gMjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGZyZWUocyk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiaW5zZWN1cmUgc3RyaW5nIHBpY2tsZSIpOworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBTVFJJTkcgb3Bjb2RlIGFyZ3VtZW50IG11c3QgYmUgcXVvdGVkIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAogICAgIC8qIFVzZSB0aGUgUHlCeXRlcyBBUEkgdG8gZGVjb2RlIHRoZSBzdHJpbmcsIHNpbmNlIHRoYXQgaXMgd2hhdCBpcyB1c2VkCiAgICAgICAgdG8gZW5jb2RlLCBhbmQgdGhlbiBjb2VyY2UgdGhlIHJlc3VsdCB0byBVbmljb2RlLiAqLwogICAgIGJ5dGVzID0gUHlCeXRlc19EZWNvZGVFc2NhcGUocCwgbGVuLCBOVUxMLCAwLCBOVUxMKTsKLSAgICBmcmVlKHMpOwogICAgIGlmIChieXRlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgc3RyID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KGJ5dGVzLCBzZWxmLT5lbmNvZGluZywgc2VsZi0+ZXJyb3JzKTsKLSAgICBQeV9ERUNSRUYoYnl0ZXMpOwotICAgIGlmIChzdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgc3RyLCAtMSk7CisgICAgLyogTGVhdmUgdGhlIFB5dGhvbiAyLnggc3RyaW5ncyBhcyBieXRlcyBpZiB0aGUgKmVuY29kaW5nKiBnaXZlbiB0byB0aGUKKyAgICAgICBVbnBpY2tsZXIgd2FzICdieXRlcycuIE90aGVyd2lzZSwgY29udmVydCB0aGVtIHRvIHVuaWNvZGUuICovCisgICAgaWYgKHN0cmNtcChzZWxmLT5lbmNvZGluZywgImJ5dGVzIikgPT0gMCkgeworICAgICAgICBvYmogPSBieXRlczsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG9iaiA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChieXRlcywgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7CisgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CisgICAgICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgb2JqLCAtMSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLWxvYWRfYmluYnl0ZXMoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorbG9hZF9jb3VudGVkX2JpbnN0cmluZyhVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGludCBuYnl0ZXMpCiB7Ci0gICAgUHlPYmplY3QgKmJ5dGVzOwotICAgIFB5X3NzaXplX3QgeDsKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICBjaGFyICpzOwogCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgNCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIG5ieXRlcykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICB4ID0gY2FsY19iaW5zaXplKHMsIDQpOwotICAgIGlmICh4IDwgMCkgeworICAgIHNpemUgPSBjYWxjX2JpbnNpemUocywgbmJ5dGVzKTsKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJCSU5TVFJJTkcgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJXpkIGJ5dGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHNpemUpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogQ29udmVydCBQeXRob24gMi54IHN0cmluZ3MgdG8gYnl0ZXMgaWYgdGhlICplbmNvZGluZyogZ2l2ZW4gdG8gdGhlCisgICAgICAgVW5waWNrbGVyIHdhcyAnYnl0ZXMnLiBPdGhlcndpc2UsIGNvbnZlcnQgdGhlbSB0byB1bmljb2RlLiAqLworICAgIGlmIChzdHJjbXAoc2VsZi0+ZW5jb2RpbmcsICJieXRlcyIpID09IDApIHsKKyAgICAgICAgb2JqID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCBzaXplKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG9iaiA9IFB5VW5pY29kZV9EZWNvZGUocywgc2l6ZSwgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7CisgICAgfQorICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgb2JqLCAtMSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2xvYWRfY291bnRlZF9iaW5ieXRlcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGludCBuYnl0ZXMpCit7CisgICAgUHlPYmplY3QgKmJ5dGVzOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBjaGFyICpzOworCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgbmJ5dGVzKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHNpemUgPSBjYWxjX2JpbnNpemUocywgbmJ5dGVzKTsKKyAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiQklOQllURVMgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJXpkIGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYCi0gICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCB4KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgc2l6ZSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgYnl0ZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIHgpOworCisgICAgYnl0ZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIHNpemUpOwogICAgIGlmIChieXRlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTQyNzIsODIgKzQ4MjQsNiBAQAogfQogCiBzdGF0aWMgaW50Ci1sb2FkX3Nob3J0X2JpbmJ5dGVzKFVucGlja2xlck9iamVjdCAqc2VsZikKLXsKLSAgICBQeU9iamVjdCAqYnl0ZXM7Ci0gICAgUHlfc3NpemVfdCB4OwotICAgIGNoYXIgKnM7Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCAxKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHggPSAodW5zaWduZWQgY2hhcilzWzBdOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgeCk7Ci0gICAgaWYgKGJ5dGVzID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIGJ5dGVzLCAtMSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWxvYWRfYmluc3RyaW5nKFVucGlja2xlck9iamVjdCAqc2VsZikKLXsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5X3NzaXplX3QgeDsKLSAgICBjaGFyICpzOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgNCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICB4ID0gY2FsY19iaW5pbnQocywgNCk7Ci0gICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQklOU1RSSU5HIHBpY2tsZSBoYXMgbmVnYXRpdmUgYnl0ZSBjb3VudCIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBDb252ZXJ0IFB5dGhvbiAyLnggc3RyaW5ncyB0byB1bmljb2RlLiAqLwotICAgIHN0ciA9IFB5VW5pY29kZV9EZWNvZGUocywgeCwgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBzdHIsIC0xKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbG9hZF9zaG9ydF9iaW5zdHJpbmcoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlfc3NpemVfdCB4OwotICAgIGNoYXIgKnM7Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCAxKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHggPSAodW5zaWduZWQgY2hhcilzWzBdOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBDb252ZXJ0IFB5dGhvbiAyLnggc3RyaW5ncyB0byB1bmljb2RlLiAqLwotICAgIHN0ciA9IFB5VW5pY29kZV9EZWNvZGUocywgeCwgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBzdHIsIC0xKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAogbG9hZF91bmljb2RlKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqc3RyOwpAQCAtNDM2OCwyNSArNDg0NCwyMyBAQAogfQogCiBzdGF0aWMgaW50Ci1sb2FkX2JpbnVuaWNvZGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorbG9hZF9jb3VudGVkX2JpbnVuaWNvZGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBpbnQgbmJ5dGVzKQogewogICAgIFB5T2JqZWN0ICpzdHI7CiAgICAgUHlfc3NpemVfdCBzaXplOwogICAgIGNoYXIgKnM7CiAKLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA0KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgbmJ5dGVzKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHNpemUgPSBjYWxjX2JpbnNpemUocywgNCk7CisgICAgc2l6ZSA9IGNhbGNfYmluc2l6ZShzLCBuYnl0ZXMpOwogICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJCSU5VTklDT0RFIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICV6ZCBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWAotICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0KICAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBzaXplKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNDQ1OCw2ICs0OTMyLDE3IEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfZW1wdHlfc2V0KFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqc2V0OworCisgICAgaWYgKChzZXQgPSBQeVNldF9OZXcoTlVMTCkpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBzZXQsIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogbG9hZF9saXN0KFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqbGlzdDsKQEAgLTQ0OTksNiArNDk4NCwyOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50Citsb2FkX2Zyb3plbnNldChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKml0ZW1zOworICAgIFB5T2JqZWN0ICpmcm96ZW5zZXQ7CisgICAgUHlfc3NpemVfdCBpOworCisgICAgaWYgKChpID0gbWFya2VyKHNlbGYpKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGl0ZW1zID0gUGRhdGFfcG9wdHVwbGUoc2VsZi0+c3RhY2ssIGkpOworICAgIGlmIChpdGVtcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBmcm96ZW5zZXQgPSBQeUZyb3plblNldF9OZXcoaXRlbXMpOworICAgIFB5X0RFQ1JFRihpdGVtcyk7CisgICAgaWYgKGZyb3plbnNldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBmcm96ZW5zZXQsIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIGluc3RhbnRpYXRlKFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNDYwNiw2ICs1MTE0LDcgQEAKICAgICBQeU9iamVjdCAqY2xzcmF3ID0gTlVMTDsKICAgICBQeVR5cGVPYmplY3QgKmNsczsgICAgICAgICAgLyogY2xzcmF3IGNhc3QgdG8gaXRzIHRydWUgdHlwZSAqLwogICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogCiAgICAgLyogU3RhY2sgaXMgLi4uIGNscyBhcmd0dXBsZSwgYW5kIHdlIHdhbnQgdG8gY2FsbAogICAgICAqIGNscy5fX25ld19fKGNscywgKmFyZ3R1cGxlKS4KQEAgLTQ2MTQsNyArNTEyMyw4IEBACiAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIk5FV09CSiBleHBlY3RlZCBhbiBhcmcgIiAidHVwbGUuIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIk5FV09CSiBleHBlY3RlZCBhbiBhcmcgIiAidHVwbGUuIik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCkBAIC00NjIzLDEyICs1MTMzLDEyIEBACiAgICAgaWYgKGNscyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIk5FV09CSiBjbGFzcyBhcmd1bWVudCAiCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiTkVXT0JKIGNsYXNzIGFyZ3VtZW50ICIKICAgICAgICAgICAgICAgICAgICAgICAgICJpc24ndCBhIHR5cGUgb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjbHMtPnRwX25ldyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJORVdPQkogY2xhc3MgYXJndW1lbnQgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgIk5FV09CSiBjbGFzcyBhcmd1bWVudCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzIE5VTEwgdHBfbmV3Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQpAQCAtNDY1MCw2ICs1MTYwLDU4IEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfbmV3b2JqX2V4KFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqY2xzLCAqYXJncywgKmt3YXJnczsKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKworICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywga3dhcmdzKTsKKyAgICBpZiAoa3dhcmdzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIGFyZ3MpOworICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBjbHMpOworICAgIGlmIChjbHMgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCFQeVR5cGVfQ2hlY2soY2xzKSkgeworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICBQeV9ERUNSRUYoY2xzKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiTkVXT0JKX0VYIGNsYXNzIGFyZ3VtZW50IG11c3QgYmUgYSB0eXBlLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoY2xzKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoKChQeVR5cGVPYmplY3QgKiljbHMpLT50cF9uZXcgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICBQeV9ERUNSRUYoY2xzKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiTkVXT0JKX0VYIGNsYXNzIGFyZ3VtZW50IGRvZXNuJ3QgaGF2ZSBfX25ld19fIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgb2JqID0gKChQeVR5cGVPYmplY3QgKiljbHMpLT50cF9uZXcoKFB5VHlwZU9iamVjdCAqKWNscywgYXJncywga3dhcmdzKTsKKyAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgUHlfREVDUkVGKGNscyk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgb2JqLCAtMSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGxvYWRfZ2xvYmFsKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqZ2xvYmFsID0gTlVMTDsKQEAgLTQ2ODYsNiArNTI0OCwzMiBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX3N0YWNrX2dsb2JhbChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKmdsb2JhbDsKKyAgICBQeU9iamVjdCAqbW9kdWxlX25hbWU7CisgICAgUHlPYmplY3QgKmdsb2JhbF9uYW1lOworCisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBnbG9iYWxfbmFtZSk7CisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBtb2R1bGVfbmFtZSk7CisgICAgaWYgKG1vZHVsZV9uYW1lID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVja0V4YWN0KG1vZHVsZV9uYW1lKSB8fAorICAgICAgICBnbG9iYWxfbmFtZSA9PSBOVUxMIHx8ICFQeVVuaWNvZGVfQ2hlY2tFeGFjdChnbG9iYWxfbmFtZSkpIHsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgIlNUQUNLX0dMT0JBTCByZXF1aXJlcyBzdHIiKTsKKyAgICAgICAgUHlfWERFQ1JFRihnbG9iYWxfbmFtZSk7CisgICAgICAgIFB5X1hERUNSRUYobW9kdWxlX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGdsb2JhbCA9IGZpbmRfY2xhc3Moc2VsZiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKKyAgICBQeV9ERUNSRUYoZ2xvYmFsX25hbWUpOworICAgIFB5X0RFQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgaWYgKGdsb2JhbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgZ2xvYmFsLCAtMSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGxvYWRfcGVyc2lkKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqcGlkOwpAQCAtNDcwMiw5ICs1MjkwLDkgQEAKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1VucGlja2xlcl9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKLSAgICAgICAgICAgcmVmZXJlbmNlIHRvIHBpZCBmaXJzdC4gKi8KLSAgICAgICAgcGlkID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT5wZXJzX2Z1bmMsIHBpZCk7CisgICAgICAgIC8qIFRoaXMgZG9lcyBub3QgbGVhayBzaW5jZSBfUGlja2xlX0Zhc3RDYWxsKCkgc3RlYWxzIHRoZSByZWZlcmVuY2UKKyAgICAgICAgICAgdG8gcGlkIGZpcnN0LiAqLworICAgICAgICBwaWQgPSBfUGlja2xlX0Zhc3RDYWxsKHNlbGYtPnBlcnNfZnVuYywgcGlkKTsKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00NzEyLDcgKzUzMDAsOCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQSBsb2FkIHBlcnNpc3RlbnQgaWQgaW5zdHJ1Y3Rpb24gd2FzIGVuY291bnRlcmVkLFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBubyBwZXJzaXN0ZW50X2xvYWQgZnVuY3Rpb24gd2FzIHNwZWNpZmllZC4iKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDcyOSw5ICs1MzE4LDkgQEAKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1VucGlja2xlcl9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKKyAgICAgICAgLyogVGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9QaWNrbGVfRmFzdENhbGwoKSBzdGVhbHMgdGhlCiAgICAgICAgICAgIHJlZmVyZW5jZSB0byBwaWQgZmlyc3QuICovCi0gICAgICAgIHBpZCA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+cGVyc19mdW5jLCBwaWQpOworICAgICAgICBwaWQgPSBfUGlja2xlX0Zhc3RDYWxsKHNlbGYtPnBlcnNfZnVuYywgcGlkKTsKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00NzM5LDcgKzUzMjgsOCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQSBsb2FkIHBlcnNpc3RlbnQgaWQgaW5zdHJ1Y3Rpb24gd2FzIGVuY291bnRlcmVkLFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBubyBwZXJzaXN0ZW50X2xvYWQgZnVuY3Rpb24gd2FzIHNwZWNpZmllZC4iKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDg5NSw2ICs1NDg1LDcgQEAKICAgICBQeU9iamVjdCAqb2JqOyAgICAgICAgICAgICAgLyogdGhlIG9iamVjdCB0byBwdXNoICovCiAgICAgUHlPYmplY3QgKnBhaXI7ICAgICAgICAgICAgIC8qIChtb2R1bGVfbmFtZSwgY2xhc3NfbmFtZSkgKi8KICAgICBQeU9iamVjdCAqbW9kdWxlX25hbWUsICpjbGFzc19uYW1lOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKIAogICAgIGFzc2VydChuYnl0ZXMgPT0gMSB8fCBuYnl0ZXMgPT0gMiB8fCBuYnl0ZXMgPT0gNCk7CiAgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmY29kZWJ5dGVzLCBuYnl0ZXMpIDwgMCkKQEAgLTQ5MDIsNyArNTQ5Myw3IEBACiAgICAgY29kZSA9IGNhbGNfYmluaW50KGNvZGVieXRlcywgbmJ5dGVzKTsKICAgICBpZiAoY29kZSA8PSAwKSB7ICAgICAgICAgICAgLyogbm90ZSB0aGF0IDAgaXMgZm9yYmlkZGVuICovCiAgICAgICAgIC8qIENvcnJ1cHQgb3IgaG9zdGlsZSBwaWNrbGUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJFWFQgc3BlY2lmaWVzIGNvZGUgPD0gMCIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgIkVYVCBzcGVjaWZpZXMgY29kZSA8PSAwIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTQ5MTAsMjAgKzU1MDEsMjYgQEAKICAgICBweV9jb2RlID0gUHlMb25nX0Zyb21Mb25nKGNvZGUpOwogICAgIGlmIChweV9jb2RlID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBvYmogPSBQeURpY3RfR2V0SXRlbShleHRlbnNpb25fY2FjaGUsIHB5X2NvZGUpOworICAgIG9iaiA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5leHRlbnNpb25fY2FjaGUsIHB5X2NvZGUpOwogICAgIGlmIChvYmogIT0gTlVMTCkgewogICAgICAgICAvKiBCaW5nby4gKi8KICAgICAgICAgUHlfREVDUkVGKHB5X2NvZGUpOwogICAgICAgICBQREFUQV9BUFBFTkQoc2VsZi0+c3RhY2ssIG9iaiwgLTEpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlfREVDUkVGKHB5X2NvZGUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgLyogTG9vayB1cCB0aGUgKG1vZHVsZV9uYW1lLCBjbGFzc19uYW1lKSBwYWlyLiAqLwotICAgIHBhaXIgPSBQeURpY3RfR2V0SXRlbShpbnZlcnRlZF9yZWdpc3RyeSwgcHlfY29kZSk7CisgICAgcGFpciA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5pbnZlcnRlZF9yZWdpc3RyeSwgcHlfY29kZSk7CiAgICAgaWYgKHBhaXIgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYocHlfY29kZSk7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAidW5yZWdpc3RlcmVkIGV4dGVuc2lvbiAiCi0gICAgICAgICAgICAgICAgICAgICAiY29kZSAlbGQiLCBjb2RlKTsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVucmVnaXN0ZXJlZCBleHRlbnNpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlICVsZCIsIGNvZGUpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLyogU2luY2UgdGhlIGV4dGVuc2lvbiByZWdpc3RyeSBpcyBtYW5pcHVsYWJsZSB2aWEgUHl0aG9uIGNvZGUsCkBAIC00OTQ0LDcgKzU1NDEsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIC8qIENhY2hlIGNvZGUgLT4gb2JqLiAqLwotICAgIGNvZGUgPSBQeURpY3RfU2V0SXRlbShleHRlbnNpb25fY2FjaGUsIHB5X2NvZGUsIG9iaik7CisgICAgY29kZSA9IFB5RGljdF9TZXRJdGVtKHN0LT5leHRlbnNpb25fY2FjaGUsIHB5X2NvZGUsIG9iaik7CiAgICAgUHlfREVDUkVGKHB5X2NvZGUpOwogICAgIGlmIChjb2RlIDwgMCkgewogICAgICAgICBQeV9ERUNSRUYob2JqKTsKQEAgLTUwMjksNiArNTYyNiwxOCBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX21lbW9pemUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICp2YWx1ZTsKKworICAgIGlmIChQeV9TSVpFKHNlbGYtPnN0YWNrKSA8PSAwKQorICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CisgICAgdmFsdWUgPSBzZWxmLT5zdGFjay0+ZGF0YVtQeV9TSVpFKHNlbGYtPnN0YWNrKSAtIDFdOworCisgICAgcmV0dXJuIF9VbnBpY2tsZXJfTWVtb1B1dChzZWxmLCBzZWxmLT5tZW1vX2xlbiwgdmFsdWUpOworfQorCitzdGF0aWMgaW50CiBkb19hcHBlbmQoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IHgpCiB7CiAgICAgUHlPYmplY3QgKnZhbHVlOwpAQCAtNTA2Nyw3ICs1Njc2LDcgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKICAgICAgICAgICAgIHZhbHVlID0gc2VsZi0+c3RhY2stPmRhdGFbaV07Ci0gICAgICAgICAgICByZXN1bHQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIGFwcGVuZF9mdW5jLCB2YWx1ZSk7CisgICAgICAgICAgICByZXN1bHQgPSBfUGlja2xlX0Zhc3RDYWxsKGFwcGVuZF9mdW5jLCB2YWx1ZSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQZGF0YV9jbGVhcihzZWxmLT5zdGFjaywgaSArIDEpOwogICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZi0+c3RhY2spID0geDsKQEAgLTUxMDksOCArNTcxOCwxMCBAQAogICAgIGlmIChsZW4gPT0geCkgIC8qIG5vdGhpbmcgdG8gZG8gKi8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKChsZW4gLSB4KSAlIDIgIT0gMCkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgICAgIC8qIEN1cnJ1cHQgb3IgaG9zdGlsZSBwaWNrbGUgLS0gd2UgbmV2ZXIgd3JpdGUgb25lIGxpa2UgdGhpcy4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIm9kZCBudW1iZXIgb2YgaXRlbXMgZm9yIFNFVElURU1TIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm9kZCBudW1iZXIgb2YgaXRlbXMgZm9yIFNFVElURU1TIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTUxNDQsNiArNTc1NSw1OSBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX2FkZGl0ZW1zKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqc2V0OworICAgIFB5X3NzaXplX3QgbWFyaywgbGVuLCBpOworCisgICAgbWFyayA9ICBtYXJrZXIoc2VsZik7CisgICAgbGVuID0gUHlfU0laRShzZWxmLT5zdGFjayk7CisgICAgaWYgKG1hcmsgPiBsZW4gfHwgbWFyayA8PSAwKQorICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CisgICAgaWYgKGxlbiA9PSBtYXJrKSAgLyogbm90aGluZyB0byBkbyAqLworICAgICAgICByZXR1cm4gMDsKKworICAgIHNldCA9IHNlbGYtPnN0YWNrLT5kYXRhW21hcmsgLSAxXTsKKworICAgIGlmIChQeVNldF9DaGVjayhzZXQpKSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICAgICAgaW50IHN0YXR1czsKKworICAgICAgICBpdGVtcyA9IFBkYXRhX3BvcHR1cGxlKHNlbGYtPnN0YWNrLCBtYXJrKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgc3RhdHVzID0gX1B5U2V0X1VwZGF0ZShzZXQsIGl0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICphZGRfZnVuYzsKKyAgICAgICAgX1B5X0lERU5USUZJRVIoYWRkKTsKKworICAgICAgICBhZGRfZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQoc2V0LCAmUHlJZF9hZGQpOworICAgICAgICBpZiAoYWRkX2Z1bmMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgZm9yIChpID0gbWFyazsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzdWx0OworICAgICAgICAgICAgUHlPYmplY3QgKml0ZW07CisKKyAgICAgICAgICAgIGl0ZW0gPSBzZWxmLT5zdGFjay0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJlc3VsdCA9IF9QaWNrbGVfRmFzdENhbGwoYWRkX2Z1bmMsIGl0ZW0pOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUGRhdGFfY2xlYXIoc2VsZi0+c3RhY2ssIGkgKyAxKTsKKyAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYtPnN0YWNrKSA9IG1hcms7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgUHlfU0laRShzZWxmLT5zdGFjaykgPSBtYXJrOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBsb2FkX2J1aWxkKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqc3RhdGUsICppbnN0LCAqc2xvdHN0YXRlOwpAQCAtNTE3Niw5ICs1ODQwLDcgQEAKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogICAgICAgICAvKiBUaGUgZXhwbGljaXQgX19zZXRzdGF0ZV9fIGlzIHJlc3BvbnNpYmxlIGZvciBldmVyeXRoaW5nLiAqLwotICAgICAgICAvKiBVZ2guLi4gdGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9VbnBpY2tsZXJfRmFzdENhbGwoKSBzdGVhbHMgdGhlCi0gICAgICAgICAgIHJlZmVyZW5jZSB0byBzdGF0ZSBmaXJzdC4gKi8KLSAgICAgICAgcmVzdWx0ID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZXRzdGF0ZSwgc3RhdGUpOworICAgICAgICByZXN1bHQgPSBfUGlja2xlX0Zhc3RDYWxsKHNldHN0YXRlLCBzdGF0ZSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZXRzdGF0ZSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTUyMDksNyArNTg3MSw4IEBACiAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKIAogICAgICAgICBpZiAoIVB5RGljdF9DaGVjayhzdGF0ZSkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJzdGF0ZSBpcyBub3QgYSBkaWN0aW9uYXJ5Iik7CisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgInN0YXRlIGlzIG5vdCBhIGRpY3Rpb25hcnkiKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZGljdCA9IF9QeU9iamVjdF9HZXRBdHRySWQoaW5zdCwgJlB5SWRfX19kaWN0X18pOwpAQCAtNTIzOCw3ICs1OTAxLDggQEAKICAgICAgICAgUHlfc3NpemVfdCBpOwogCiAgICAgICAgIGlmICghUHlEaWN0X0NoZWNrKHNsb3RzdGF0ZSkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xvdCBzdGF0ZSBpcyBub3QgYSBkaWN0aW9uYXJ5Iik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CkBAIC01MzQ0LDE0ICs2MDA4LDM5IEBACiAgICAgcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW50Citsb2FkX2ZyYW1lKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBjaGFyICpzOworICAgIFB5X3NzaXplX3QgZnJhbWVfbGVuOworCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgOCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBmcmFtZV9sZW4gPSBjYWxjX2JpbnNpemUocywgOCk7CisgICAgaWYgKGZyYW1lX2xlbiA8IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiRlJBTUUgbGVuZ3RoIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBvZiAlemQgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgZnJhbWVfbGVuKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIFJld2luZCB0byBzdGFydCBvZiBmcmFtZSAqLworICAgIHNlbGYtPm5leHRfcmVhZF9pZHggLT0gZnJhbWVfbGVuOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogbG9hZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlPYmplY3QgKmVycjsKICAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOwotICAgIGNoYXIgKnM7CisgICAgY2hhciAqcyA9IE5VTEw7CiAKICAgICBzZWxmLT5udW1fbWFya3MgPSAwOworICAgIHNlbGYtPnByb3RvID0gMDsKICAgICBpZiAoUHlfU0laRShzZWxmLT5zdGFjaykpCiAgICAgICAgIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCAwKTsKIApAQCAtNTM3NywxMyArNjA2NiwxNiBAQAogICAgICAgICBPUF9BUkcoTE9ORzQsIGxvYWRfY291bnRlZF9sb25nLCA0KQogICAgICAgICBPUChGTE9BVCwgbG9hZF9mbG9hdCkKICAgICAgICAgT1AoQklORkxPQVQsIGxvYWRfYmluZmxvYXQpCi0gICAgICAgIE9QKEJJTkJZVEVTLCBsb2FkX2JpbmJ5dGVzKQotICAgICAgICBPUChTSE9SVF9CSU5CWVRFUywgbG9hZF9zaG9ydF9iaW5ieXRlcykKLSAgICAgICAgT1AoQklOU1RSSU5HLCBsb2FkX2JpbnN0cmluZykKLSAgICAgICAgT1AoU0hPUlRfQklOU1RSSU5HLCBsb2FkX3Nob3J0X2JpbnN0cmluZykKKyAgICAgICAgT1BfQVJHKFNIT1JUX0JJTkJZVEVTLCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDEpCisgICAgICAgIE9QX0FSRyhCSU5CWVRFUywgbG9hZF9jb3VudGVkX2JpbmJ5dGVzLCA0KQorICAgICAgICBPUF9BUkcoQklOQllURVM4LCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDgpCisgICAgICAgIE9QX0FSRyhTSE9SVF9CSU5TVFJJTkcsIGxvYWRfY291bnRlZF9iaW5zdHJpbmcsIDEpCisgICAgICAgIE9QX0FSRyhCSU5TVFJJTkcsIGxvYWRfY291bnRlZF9iaW5zdHJpbmcsIDQpCiAgICAgICAgIE9QKFNUUklORywgbG9hZF9zdHJpbmcpCiAgICAgICAgIE9QKFVOSUNPREUsIGxvYWRfdW5pY29kZSkKLSAgICAgICAgT1AoQklOVU5JQ09ERSwgbG9hZF9iaW51bmljb2RlKQorICAgICAgICBPUF9BUkcoU0hPUlRfQklOVU5JQ09ERSwgbG9hZF9jb3VudGVkX2JpbnVuaWNvZGUsIDEpCisgICAgICAgIE9QX0FSRyhCSU5VTklDT0RFLCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgNCkKKyAgICAgICAgT1BfQVJHKEJJTlVOSUNPREU4LCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgOCkKICAgICAgICAgT1BfQVJHKEVNUFRZX1RVUExFLCBsb2FkX2NvdW50ZWRfdHVwbGUsIDApCiAgICAgICAgIE9QX0FSRyhUVVBMRTEsIGxvYWRfY291bnRlZF90dXBsZSwgMSkKICAgICAgICAgT1BfQVJHKFRVUExFMiwgbG9hZF9jb3VudGVkX3R1cGxlLCAyKQpAQCAtNTM5MywxMCArNjA4NSwxNSBAQAogICAgICAgICBPUChMSVNULCBsb2FkX2xpc3QpCiAgICAgICAgIE9QKEVNUFRZX0RJQ1QsIGxvYWRfZW1wdHlfZGljdCkKICAgICAgICAgT1AoRElDVCwgbG9hZF9kaWN0KQorICAgICAgICBPUChFTVBUWV9TRVQsIGxvYWRfZW1wdHlfc2V0KQorICAgICAgICBPUChBRERJVEVNUywgbG9hZF9hZGRpdGVtcykKKyAgICAgICAgT1AoRlJPWkVOU0VULCBsb2FkX2Zyb3plbnNldCkKICAgICAgICAgT1AoT0JKLCBsb2FkX29iaikKICAgICAgICAgT1AoSU5TVCwgbG9hZF9pbnN0KQogICAgICAgICBPUChORVdPQkosIGxvYWRfbmV3b2JqKQorICAgICAgICBPUChORVdPQkpfRVgsIGxvYWRfbmV3b2JqX2V4KQogICAgICAgICBPUChHTE9CQUwsIGxvYWRfZ2xvYmFsKQorICAgICAgICBPUChTVEFDS19HTE9CQUwsIGxvYWRfc3RhY2tfZ2xvYmFsKQogICAgICAgICBPUChBUFBFTkQsIGxvYWRfYXBwZW5kKQogICAgICAgICBPUChBUFBFTkRTLCBsb2FkX2FwcGVuZHMpCiAgICAgICAgIE9QKEJVSUxELCBsb2FkX2J1aWxkKQpAQCAtNTQwOCw2ICs2MTA1LDcgQEAKICAgICAgICAgT1AoQklOUFVULCBsb2FkX2JpbnB1dCkKICAgICAgICAgT1AoTE9OR19CSU5QVVQsIGxvYWRfbG9uZ19iaW5wdXQpCiAgICAgICAgIE9QKFBVVCwgbG9hZF9wdXQpCisgICAgICAgIE9QKE1FTU9JWkUsIGxvYWRfbWVtb2l6ZSkKICAgICAgICAgT1AoUE9QLCBsb2FkX3BvcCkKICAgICAgICAgT1AoUE9QX01BUkssIGxvYWRfcG9wX21hcmspCiAgICAgICAgIE9QKFNFVElURU0sIGxvYWRfc2V0aXRlbSkKQEAgLTU0MTYsNiArNjExNCw3IEBACiAgICAgICAgIE9QKEJJTlBFUlNJRCwgbG9hZF9iaW5wZXJzaWQpCiAgICAgICAgIE9QKFJFRFVDRSwgbG9hZF9yZWR1Y2UpCiAgICAgICAgIE9QKFBST1RPLCBsb2FkX3Byb3RvKQorICAgICAgICBPUChGUkFNRSwgbG9hZF9mcmFtZSkKICAgICAgICAgT1BfQVJHKEVYVDEsIGxvYWRfZXh0ZW5zaW9uLCAxKQogICAgICAgICBPUF9BUkcoRVhUMiwgbG9hZF9leHRlbnNpb24sIDIpCiAgICAgICAgIE9QX0FSRyhFWFQ0LCBsb2FkX2V4dGVuc2lvbiwgNCkKQEAgLTU0MjYsODEgKzYxMjUsOTMgQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoc1swXSA9PSAnXDAnKQorICAgICAgICAgICAgaWYgKHNbMF0gPT0gJ1wwJykgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfRU9GRXJyb3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxvYWQga2V5LCAnJWMnLiIsIHNbMF0pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBhbmQgd2UgYXJlIGRvbmUhICovCiAgICAgfQogCi0gICAgaWYgKF9VbnBpY2tsZXJfU2tpcENvbnN1bWVkKHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBYWFg6IEl0IGlzIG5vdCBjbGVhciB3aGF0IHRoaXMgaXMgYWN0dWFsbHkgZm9yLiAqLwotICAgIGlmICgoZXJyID0gUHlFcnJfT2NjdXJyZWQoKSkpIHsKLSAgICAgICAgaWYgKGVyciA9PSBQeUV4Y19FT0ZFcnJvcikgewotICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19FT0ZFcnJvcik7Ci0gICAgICAgIH0KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBpZiAoX1VucGlja2xlcl9Ta2lwQ29uc3VtZWQoc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUHlEb2NfU1RSVkFSKFVucGlja2xlcl9sb2FkX2RvYywKLSJsb2FkKCkgLT4gb2JqZWN0LiBMb2FkIGEgcGlja2xlLiIKLSJcbiIKLSJSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBnaXZlbiBpblxuIgotInRoZSBjb25zdHJ1Y3RvciwgYW5kIHJldHVybiB0aGUgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZFxuIgotInRoZXJlaW4uXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5VbnBpY2tsZXIubG9hZAorCitMb2FkIGEgcGlja2xlLgorCitSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBnaXZlbgoraW4gdGhlIGNvbnN0cnVjdG9yLCBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkKK3NwZWNpZmllZCB0aGVyZWluLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotVW5waWNrbGVyX2xvYWQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorX3BpY2tsZV9VbnBpY2tsZXJfbG9hZF9pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mZGNjNDg4YWFkNjc1YjE0IGlucHV0PWFjYmI5MWE0MmZhOWI3YjldKi8KIHsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IChVbnBpY2tsZXJPYmplY3QqKXNlbGY7CisKICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBVbnBpY2tsZXIgd2FzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gVGhpcyBwcmV2ZW50cwogICAgICAgIHNlZ2ZhdWx0aW5nIGlmIGEgc3ViY2xhc3Mgb3ZlcnJpZGRlbiBfX2luaXRfXyB3aXRoIGEgZnVuY3Rpb24gdGhhdCBkb2VzCiAgICAgICAgbm90IGNhbGwgVW5waWNrbGVyLl9faW5pdF9fKCkuIEhlcmUsIHdlIHNpbXBseSBlbnN1cmUgdGhhdCBzZWxmLT5yZWFkCiAgICAgICAgaXMgbm90IE5VTEwuICovCi0gICAgaWYgKHNlbGYtPnJlYWQgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoVW5waWNrbGluZ0Vycm9yLAorICAgIGlmICh1bnBpY2tsZXItPnJlYWQgPT0gTlVMTCkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIlVucGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICVzLl9faW5pdF9fKCkiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHVucGlja2xlciktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm4gbG9hZChzZWxmKTsKKyAgICByZXR1cm4gbG9hZCh1bnBpY2tsZXIpOwogfQogCiAvKiBUaGUgbmFtZSBvZiBmaW5kX2NsYXNzKCkgaXMgbWlzbGVhZGluZy4gSW4gbmV3ZXIgcGlja2xlIHByb3RvY29scywgdGhpcwogICAgZnVuY3Rpb24gaXMgdXNlZCBmb3IgbG9hZGluZyBhbnkgZ2xvYmFsIChpLmUuLCBmdW5jdGlvbnMpLCBub3QganVzdAogICAgY2xhc3Nlcy4gVGhlIG5hbWUgaXMga2VwdCBvbmx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLwogCi1QeURvY19TVFJWQVIoVW5waWNrbGVyX2ZpbmRfY2xhc3NfZG9jLAotImZpbmRfY2xhc3MobW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKSAtPiBvYmplY3QuXG4iCi0iXG4iCi0iUmV0dXJuIGFuIG9iamVjdCBmcm9tIGEgc3BlY2lmaWVkIG1vZHVsZSwgaW1wb3J0aW5nIHRoZSBtb2R1bGUgaWZcbiIKLSJuZWNlc3NhcnkuICBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCAoZS5nLiB0byByZXN0cmljdFxuIgotInVucGlja2xpbmcgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucykuXG4iCi0iXG4iCi0iVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbiBvYmplY3QgaXNcbiIKLSJuZWVkZWQuICBCb3RoIGFyZ3VtZW50cyBwYXNzZWQgYXJlIHN0ciBvYmplY3RzLlxuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuVW5waWNrbGVyLmZpbmRfY2xhc3MKKworICBtb2R1bGVfbmFtZTogb2JqZWN0CisgIGdsb2JhbF9uYW1lOiBvYmplY3QKKyAgLworCitSZXR1cm4gYW4gb2JqZWN0IGZyb20gYSBzcGVjaWZpZWQgbW9kdWxlLgorCitJZiBuZWNlc3NhcnksIHRoZSBtb2R1bGUgd2lsbCBiZSBpbXBvcnRlZC4gU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUKK3RoaXMgbWV0aG9kIChlLmcuIHRvIHJlc3RyaWN0IHVucGlja2xpbmcgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgYW5kCitmdW5jdGlvbnMpLgorCitUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBjbGFzcyBvciBhIGZ1bmN0aW9uIG9iamVjdCBpcworbmVlZGVkLiAgQm90aCBhcmd1bWVudHMgcGFzc2VkIGFyZSBzdHIgb2JqZWN0cy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVVucGlja2xlcl9maW5kX2NsYXNzKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbW9kdWxlX25hbWUsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02NGM3NzQzN2UwODhlMTg4IGlucHV0PWUyZTZhODY1ZGUwOTNlZjRdKi8KIHsKICAgICBQeU9iamVjdCAqZ2xvYmFsOwogICAgIFB5T2JqZWN0ICptb2R1bGVzX2RpY3Q7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICBQeU9iamVjdCAqbW9kdWxlX25hbWUsICpnbG9iYWxfbmFtZTsKLQotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZpbmRfY2xhc3MiLCAyLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZHVsZV9uYW1lLCAmZ2xvYmFsX25hbWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBfUHlfSURFTlRJRklFUihtb2R1bGVzKTsKIAogICAgIC8qIFRyeSB0byBtYXAgdGhlIG9sZCBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLnggdG8gdGhlIG5ldyBvbmVzIHVzZWQgaW4KICAgICAgICBQeXRob24gMy54LiAgV2UgZG8gdGhpcyBvbmx5IHdpdGggb2xkIHBpY2tsZSBwcm90b2NvbHMgYW5kIHdoZW4gdGhlCkBAIC01NTA4LDEzICs2MjE5LDE0IEBACiAgICAgaWYgKHNlbGYtPnByb3RvIDwgMyAmJiBzZWxmLT5maXhfaW1wb3J0cykgewogICAgICAgICBQeU9iamVjdCAqa2V5OwogICAgICAgICBQeU9iamVjdCAqaXRlbTsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogCiAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBnbG9iYWwgKGkuZS4sIGEgZnVuY3Rpb24gb3IgYSBjbGFzcykgd2FzIHJlbmFtZWQKICAgICAgICAgICAgb3IgbW92ZWQgdG8gYW5vdGhlciBtb2R1bGUuICovCiAgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOwogICAgICAgICBpZiAoa2V5ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG5hbWVfbWFwcGluZ18ydG8zLCBrZXkpOworICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPm5hbWVfbWFwcGluZ18ydG8zLCBrZXkpOwogICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgaWYgKGl0ZW0pIHsKICAgICAgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhpdGVtKSB8fCBQeVR1cGxlX0dFVF9TSVpFKGl0ZW0pICE9IDIpIHsKQEAgLTU1NDAsNyArNjI1Miw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBDaGVjayBpZiB0aGUgbW9kdWxlIHdhcyByZW5hbWVkLiAqLwotICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoaW1wb3J0X21hcHBpbmdfMnRvMywgbW9kdWxlX25hbWUpOworICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMsIG1vZHVsZV9uYW1lKTsKICAgICAgICAgaWYgKGl0ZW0pIHsKICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKQEAgLTU1NTUsOSArNjI2NywxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbW9kdWxlc19kaWN0ID0gUHlTeXNfR2V0T2JqZWN0KCJtb2R1bGVzIik7Ci0gICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKQorICAgIG1vZHVsZXNfZGljdCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9tb2R1bGVzKTsKKyAgICBpZiAobW9kdWxlc19kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgInVuYWJsZSB0byBnZXQgc3lzLm1vZHVsZXMiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgbW9kdWxlID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IobW9kdWxlc19kaWN0LCBtb2R1bGVfbmFtZSk7CiAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7CkBAIC01NTY2LDIwICs2MjgwLDE4IEBACiAgICAgICAgIG1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydChtb2R1bGVfbmFtZSk7CiAgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBnbG9iYWwgPSBQeU9iamVjdF9HZXRBdHRyKG1vZHVsZSwgZ2xvYmFsX25hbWUpOworICAgICAgICBnbG9iYWwgPSBnZXRhdHRyaWJ1dGUobW9kdWxlLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8gPj0gNCk7CiAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZ2xvYmFsID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgZ2xvYmFsID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvID49IDQpOwogICAgIH0KICAgICByZXR1cm4gZ2xvYmFsOwogfQogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIFVucGlja2xlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJsb2FkIiwgKFB5Q0Z1bmN0aW9uKVVucGlja2xlcl9sb2FkLCBNRVRIX05PQVJHUywKLSAgICAgVW5waWNrbGVyX2xvYWRfZG9jfSwKLSAgICB7ImZpbmRfY2xhc3MiLCAoUHlDRnVuY3Rpb24pVW5waWNrbGVyX2ZpbmRfY2xhc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgVW5waWNrbGVyX2ZpbmRfY2xhc3NfZG9jfSwKKyAgICBfUElDS0xFX1VOUElDS0xFUl9MT0FEX01FVEhPRERFRgorICAgIF9QSUNLTEVfVU5QSUNLTEVSX0ZJTkRfQ0xBU1NfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC01NTkyLDcgKzYzMDQsNiBAQAogICAgIFB5X1hERUNSRUYoc2VsZi0+cGVlayk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5zdGFjayk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wZXJzX2Z1bmMpOwotICAgIFB5X1hERUNSRUYoc2VsZi0+YXJnKTsKICAgICBpZiAoc2VsZi0+YnVmZmVyLmJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1ZmZlcik7CiAgICAgICAgIHNlbGYtPmJ1ZmZlci5idWYgPSBOVUxMOwpAQCAtNTYwMSw4ICs2MzEyLDggQEAKICAgICBfVW5waWNrbGVyX01lbW9DbGVhbnVwKHNlbGYpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+bWFya3MpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+aW5wdXRfbGluZSk7Ci0gICAgZnJlZShzZWxmLT5lbmNvZGluZyk7Ci0gICAgZnJlZShzZWxmLT5lcnJvcnMpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZXJyb3JzKTsKIAogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7CiB9CkBAIC01NjE1LDcgKzYzMjYsNiBAQAogICAgIFB5X1ZJU0lUKHNlbGYtPnBlZWspOwogICAgIFB5X1ZJU0lUKHNlbGYtPnN0YWNrKTsKICAgICBQeV9WSVNJVChzZWxmLT5wZXJzX2Z1bmMpOwotICAgIFB5X1ZJU0lUKHNlbGYtPmFyZyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU2MjcsNyArNjMzNyw2IEBACiAgICAgUHlfQ0xFQVIoc2VsZi0+cGVlayk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+c3RhY2spOwogICAgIFB5X0NMRUFSKHNlbGYtPnBlcnNfZnVuYyk7Ci0gICAgUHlfQ0xFQVIoc2VsZi0+YXJnKTsKICAgICBpZiAoc2VsZi0+YnVmZmVyLmJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1ZmZlcik7CiAgICAgICAgIHNlbGYtPmJ1ZmZlci5idWYgPSBOVUxMOwpAQCAtNTYzOCw2NiArNjM0Nyw1MiBAQAogICAgIHNlbGYtPm1hcmtzID0gTlVMTDsKICAgICBQeU1lbV9GcmVlKHNlbGYtPmlucHV0X2xpbmUpOwogICAgIHNlbGYtPmlucHV0X2xpbmUgPSBOVUxMOwotICAgIGZyZWUoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZW5jb2RpbmcpOwogICAgIHNlbGYtPmVuY29kaW5nID0gTlVMTDsKLSAgICBmcmVlKHNlbGYtPmVycm9ycyk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5lcnJvcnMpOwogICAgIHNlbGYtPmVycm9ycyA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKIH0KIAotUHlEb2NfU1RSVkFSKFVucGlja2xlcl9kb2MsCi0iVW5waWNrbGVyKGZpbGUsICosIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykiCi0iXG4iCi0iVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciByZWFkaW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLlxuIgotIlxuIgotIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm9cbiIKLSJwcm90byBhcmd1bWVudCBpcyBuZWVkZWQuXG4iCi0iXG4iCi0iVGhlIGZpbGUtbGlrZSBvYmplY3QgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2RcbiIKLSJ0aGF0IHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXRcbiIKLSJyZXF1aXJlcyBubyBhcmd1bWVudHMuICBCb3RoIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy5cbiIKLSJUaHVzIGZpbGUtbGlrZSBvYmplY3QgY2FuIGJlIGEgYmluYXJ5IGZpbGUgb2JqZWN0IG9wZW5lZCBmb3JcbiIKLSJyZWFkaW5nLCBhIEJ5dGVzSU8gb2JqZWN0LCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0XG4iCi0ibWVldHMgdGhpcyBpbnRlcmZhY2UuXG4iCi0iXG4iCi0iT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLFxuIgotIndoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW1cbiIKLSJnZW5lcmF0ZWQgYnkgUHl0aG9uIDIueC4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCi0ibWFwIHRoZSBvbGQgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZVxuIgotIiplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nXG4iCi0iaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZFxuIgotIidzdHJpY3QnLCByZXNwZWN0aXZlbHkuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5VbnBpY2tsZXIuX19pbml0X18KKworICBmaWxlOiBvYmplY3QKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKyAgZW5jb2Rpbmc6IHN0ciA9ICdBU0NJSScKKyAgZXJyb3JzOiBzdHIgPSAnc3RyaWN0JworCitUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHJlYWRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KK3Byb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKK3JlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgorCitUaGUgYXJndW1lbnQgKmZpbGUqIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXMKK2FuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm8KK2FyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGEKK2JpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHJlYWRpbmcsIGEgaW8uQnl0ZXNJTyBvYmplY3QsIG9yIGFueQorb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCitnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlCisqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZworaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsCityZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgJ2J5dGVzJyB0byByZWFkIHRoZXNlIDgtYml0CitzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBpbnQKLVVucGlja2xlcl9pbml0KFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19faW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjllZDFkODRkMzE1ZjNiNSBpbnB1dD0zMGI0ZGM5ZTk3NmI4OTBjXSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwotICAgIFB5T2JqZWN0ICpmaWxlOwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwotICAgIGNoYXIgKmVycm9ycyA9IE5VTEw7CiAgICAgX1B5X0lERU5USUZJRVIocGVyc2lzdGVudF9sb2FkKTsKIAotICAgIC8qIFhYWDogVGhhdCBpcyBhbiBob3JyaWJsZSBlcnJvciBtZXNzYWdlLiBCdXQsIEkgZG9uJ3Qga25vdyBob3cgdG8gZG8KLSAgICAgICBiZXR0ZXIuLi4gKi8KLSAgICBpZiAoUHlfU0laRShhcmdzKSAhPSAxKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiJXMgdGFrZXMgZXhhY3RseSBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCAoJXpkIGdpdmVuKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qIEFyZ3VtZW50cyBwYXJzaW5nIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhlIF9faW5pdF9fKCkgbWV0aG9kIHRvIGFsbG93Ci0gICAgICAgc3ViY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIF9faW5pdF9fKCkgbWV0aG9kLCB3aGljaCBtYXkgKG9yIG1heQotICAgICAgIG5vdCkgc3VwcG9ydCBVbnBpY2tsZXIgYXJndW1lbnRzLiBIb3dldmVyLCB0aGlzIG1lYW5zIHdlIG5lZWQgdG8gYmUKLSAgICAgICBleHRyYSBjYXJlZnVsIGluIHRoZSBvdGhlciBVbnBpY2tsZXIgbWV0aG9kcywgc2luY2UgYSBzdWJjbGFzcyBjb3VsZAotICAgICAgIGZvcmdldCB0byBjYWxsIFVucGlja2xlci5fX2luaXRfXygpIHRodXMgYnJlYWtpbmcgb3VyIGludGVybmFsCi0gICAgICAgaW52YXJpYW50cy4gKi8KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPc3M6VW5waWNrbGVyIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiAtMTsKLQogICAgIC8qIEluIGNhc2Ugb2YgbXVsdGlwbGUgX19pbml0X18oKSBjYWxscywgY2xlYXIgcHJldmlvdXMgY29udGVudC4gKi8KICAgICBpZiAoc2VsZi0+cmVhZCAhPSBOVUxMKQogICAgICAgICAodm9pZClVbnBpY2tsZXJfY2xlYXIoc2VsZik7CkBAIC01NzA4LDcgKzY0MDMsNyBAQAogICAgIGlmIChfVW5waWNrbGVyX1NldElucHV0RW5jb2Rpbmcoc2VsZiwgZW5jb2RpbmcsIGVycm9ycykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBzZWxmLT5maXhfaW1wb3J0cyA9IFB5T2JqZWN0X0lzVHJ1ZShmaXhfaW1wb3J0cyk7CisgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0czsKICAgICBpZiAoc2VsZi0+Zml4X2ltcG9ydHMgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNTcxNiw3ICs2NDExLDcgQEAKICAgICAgICAgc2VsZi0+cGVyc19mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKilzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX3BlcnNpc3RlbnRfbG9hZCk7CiAgICAgICAgIGlmIChzZWxmLT5wZXJzX2Z1bmMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiAxOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgc2VsZi0+cGVyc19mdW5jID0gTlVMTDsKQEAgLTU3MjQsMTkgKzY0MTksMTkgQEAKIAogICAgIHNlbGYtPnN0YWNrID0gKFBkYXRhICopUGRhdGFfTmV3KCk7CiAgICAgaWYgKHNlbGYtPnN0YWNrID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDE7CiAKICAgICBzZWxmLT5tZW1vX3NpemUgPSAzMjsKICAgICBzZWxmLT5tZW1vID0gX1VucGlja2xlcl9OZXdNZW1vKHNlbGYtPm1lbW9fc2l6ZSk7CiAgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT5wcm90byA9IDA7CiAKICAgICByZXR1cm4gMDsKIH0KIAorCiAvKiBEZWZpbmUgYSBwcm94eSBvYmplY3QgZm9yIHRoZSBVbnBpY2tsZXIncyBpbnRlcm5hbCBtZW1vIG9iamVjdC4gVGhpcyBpcyB0bwogICogYXZvaWQgYnJlYWtpbmcgY29kZSBsaWtlOgogICogIHVucGlja2xlci5tZW1vLmNsZWFyKCkKQEAgLTU3NTAsMTYgKzY0NDUsMTUgQEAKICAqIHJlYWwtd29ybGQgY29kZSBsaWtlIGN2czJzdm4uCiAgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFB5T2JqZWN0X0hFQUQKLSAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKLX0gVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0OworLypbY2xpbmljIGlucHV0XQorX3BpY2tsZS5VbnBpY2tsZXJNZW1vUHJveHkuY2xlYXIKIAotUHlEb2NfU1RSVkFSKHVtcF9jbGVhcl9kb2MsCi0ibWVtby5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKK1JlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotdW1wX2NsZWFyKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyX2ltcGwoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQyMGNkNDNmNGJhMWZiMWYgaW5wdXQ9YjFkZjdjNTJlN2FmZDliZF0qLwogewogICAgIF9VbnBpY2tsZXJfTWVtb0NsZWFudXAoc2VsZi0+dW5waWNrbGVyKTsKICAgICBzZWxmLT51bnBpY2tsZXItPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+dW5waWNrbGVyLT5tZW1vX3NpemUpOwpAQCAtNTc2OCwxMSArNjQ2MiwxNSBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIodW1wX2NvcHlfZG9jLAotIm1lbW8uY29weSgpIC0+IG5ld19tZW1vLiAgQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisvKltjbGluaWMgaW5wdXRdCitfcGlja2xlLlVucGlja2xlck1lbW9Qcm94eS5jb3B5CisKK0NvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotdW1wX2NvcHkoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lMTJhZjdlOWJjMWU0Yzc3IGlucHV0PTk3NzY5MjQ3Y2UwMzJjMWRdKi8KIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKm5ld19tZW1vID0gUHlEaWN0X05ldygpOwpAQCAtNTgwMiwxNSArNjUwMCwxOSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIodW1wX3JlZHVjZV9kb2MsCi0ibWVtby5fX3JlZHVjZV9fKCkuIFBpY2tsaW5nIHN1cHBvcnQuIik7CisvKltjbGluaWMgaW5wdXRdCitfcGlja2xlLlVucGlja2xlck1lbW9Qcm94eS5fX3JlZHVjZV9fCisKK0ltcGxlbWVudCBwaWNrbGluZyBzdXBwb3J0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotdW1wX3JlZHVjZShVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19pbXBsKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02ZGEzNGFjMDQ4ZDk0Y2NhIGlucHV0PTY5MjA4NjI0MTM0MDcxOTldKi8KIHsKICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlOwogICAgIFB5T2JqZWN0ICpjb25zdHJ1Y3Rvcl9hcmdzOwotICAgIFB5T2JqZWN0ICpjb250ZW50cyA9IHVtcF9jb3B5KHNlbGYpOworICAgIFB5T2JqZWN0ICpjb250ZW50cyA9IF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHlfaW1wbChzZWxmKTsKICAgICBpZiAoY29udGVudHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTU4MzMsOSArNjUzNSw5IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiB1bnBpY2tsZXJwcm94eV9tZXRob2RzW10gPSB7Ci0gICAgeyJjbGVhciIsICAgICAgIChQeUNGdW5jdGlvbil1bXBfY2xlYXIsICBNRVRIX05PQVJHUywgIHVtcF9jbGVhcl9kb2N9LAotICAgIHsiY29weSIsICAgICAgICAoUHlDRnVuY3Rpb24pdW1wX2NvcHksICAgTUVUSF9OT0FSR1MsICB1bXBfY29weV9kb2N9LAotICAgIHsiX19yZWR1Y2VfXyIsICAoUHlDRnVuY3Rpb24pdW1wX3JlZHVjZSwgTUVUSF9WQVJBUkdTLCB1bXBfcmVkdWNlX2RvY30sCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ0xFQVJfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ09QWV9NRVRIT0RERUYKKyAgICBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9fX1JFRFVDRV9fX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNjA1OSw3ICs2NzYxLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywKLSAgICBVbnBpY2tsZXJfZG9jLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCisgICAgX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19fX2RvY19fLCAgLyp0cF9kb2MqLwogICAgICh0cmF2ZXJzZXByb2MpVW5waWNrbGVyX3RyYXZlcnNlLCAgIC8qdHBfdHJhdmVyc2UqLwogICAgIChpbnF1aXJ5KVVucGlja2xlcl9jbGVhciwgICAgICAgICAgIC8qdHBfY2xlYXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwpAQCAtNjA3NCw2MyArNjc3Niw1NiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAoaW5pdHByb2MpVW5waWNrbGVyX2luaXQsICAgICAgICAgICAvKnRwX2luaXQqLworICAgIF9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fLCAgICAgICAgIC8qdHBfaW5pdCovCiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwogICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgIC8qdHBfZnJlZSovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pc19nYyovCiB9OwogCi1QeURvY19TVFJWQVIocGlja2xlX2R1bXBfZG9jLAotImR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKSAtPiBOb25lXG4iCi0iXG4iCi0iV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlIG9iamVjdCBmaWxlLiAgVGhpc1xuIgotImlzIGVxdWl2YWxlbnQgdG8gYGBQaWNrbGVyKGZpbGUsIHByb3RvY29sKS5kdW1wKG9iailgYCwgYnV0IG1heSBiZSBtb3JlXG4iCi0iZWZmaWNpZW50LlxuIgotIlxuIgotIlRoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sO1xuIgotInN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhXG4iCi0iYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLlxuIgotIlxuIgotIlNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgdmVyc2lvblxuIgotInN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZlxuIgotIlB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLlxuIgotIlxuIgotIlRoZSBmaWxlIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZSBieXRlc1xuIgotImFyZ3VtZW50LiAgSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeSB3cml0aW5nLCBhXG4iCi0iaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS5cbiIKLSJcbiIKLSJJZiBmaXhfaW1wb3J0cyBpcyBUcnVlIGFuZCBwcm90b2NvbCBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCi0ibWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLngsXG4iCi0ic28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC5cbiIpOworLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLmR1bXAKKworICBvYmo6IG9iamVjdAorICBmaWxlOiBvYmplY3QKKyAgcHJvdG9jb2w6IG9iamVjdCA9IE5VTEwKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKworV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlIG9iamVjdCBmaWxlLgorCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBQaWNrbGVyKGZpbGUsIHByb3RvY29sKS5kdW1wKG9iailgYCwgYnV0IG1heQorYmUgbW9yZSBlZmZpY2llbnQuCisKK1RoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4KK3Byb3RvY29sIHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUgZGVmYXVsdAorcHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLgorCitTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sCit2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUKK3ZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCisKK1RoZSAqZmlsZSogYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlCitieXRlcyBhcmd1bWVudC4gIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnkKK3dyaXRpbmcsIGEgaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cwordGhpcyBpbnRlcmZhY2UuCisKK0lmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeQordG8gbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24KKzIsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcGlja2xlX2R1bXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfZHVtcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpmaWxlLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hNjA2ZTYyNmQ1NTM4NTBkIGlucHV0PWU5ZTVmZGQ0OGRlOTJlYWVdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iaiIsICJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07Ci0gICAgUHlPYmplY3QgKm9iajsKLSAgICBQeU9iamVjdCAqZmlsZTsKLSAgICBQeU9iamVjdCAqcHJvdG8gPSBOVUxMOwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7Ci0gICAgUGlja2xlck9iamVjdCAqcGlja2xlcjsKKyAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyID0gX1BpY2tsZXJfTmV3KCk7CiAKLSAgICAvKiBmaXhfaW1wb3J0cyBpcyBhIGtleXdvcmQtb25seSBhcmd1bWVudC4gICovCi0gICAgaWYgKFB5X1NJWkUoYXJncykgPiAzKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAicGlja2xlLmR1bXAoKSB0YWtlcyBhdCBtb3N0IDMgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PfE9POmR1bXAiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJmZpbGUsICZwcm90bywgJmZpeF9pbXBvcnRzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBwaWNrbGVyID0gX1BpY2tsZXJfTmV3KCk7CiAgICAgaWYgKHBpY2tsZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2wocGlja2xlciwgcHJvdG8sIGZpeF9pbXBvcnRzKSA8IDApCisgICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHBpY2tsZXIsIHByb3RvY29sLCBmaXhfaW1wb3J0cykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKF9QaWNrbGVyX1NldE91dHB1dFN0cmVhbShwaWNrbGVyLCBmaWxlKSA8IDApCkBAIC02MTUwLDUxICs2ODQ1LDQxIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihwaWNrbGVfZHVtcHNfZG9jLAotImR1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIGJ5dGVzXG4iCi0ib2JqZWN0LCBpbnN0ZWFkIG9mIHdyaXRpbmcgaXQgdG8gYSBmaWxlLlxuIgotIlxuIgotIlRoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sO1xuIgotInN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhXG4iCi0iYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLlxuIgotIlxuIgotIlNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgdmVyc2lvblxuIgotInN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZlxuIgotIlB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLlxuIgotIlxuIgotIklmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kICpwcm90b2NvbCogaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgotIm1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LFxuIgotInNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5kdW1wcworCisgIG9iajogb2JqZWN0CisgIHByb3RvY29sOiBvYmplY3QgPSBOVUxMCisgICoKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisKK1JldHVybiB0aGUgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IGFzIGEgYnl0ZXMgb2JqZWN0LgorCitUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuCitwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0Citwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wKK3ZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZQordmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC4KKworSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbAordHJ5IHRvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4KK1B5dGhvbiAyLCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBpY2tsZV9kdW1wcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9kdW1wc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTc3N2YwZGVlZmU1Yjg4ZWUgaW5wdXQ9MjkzZGJlZGExODE1ODBiN10qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07Ci0gICAgUHlPYmplY3QgKm9iajsKLSAgICBQeU9iamVjdCAqcHJvdG8gPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKLSAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyOworICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKIAotICAgIC8qIGZpeF9pbXBvcnRzIGlzIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50LiAgKi8KLSAgICBpZiAoUHlfU0laRShhcmdzKSA+IDIpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUuZHVtcHMoKSB0YWtlcyBhdCBtb3N0IDIgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T086ZHVtcHMiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJnByb3RvLCAmZml4X2ltcG9ydHMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKICAgICBpZiAocGlja2xlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChwaWNrbGVyLCBwcm90bywgZml4X2ltcG9ydHMpIDwgMCkKKyAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2wocGlja2xlciwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoZHVtcChwaWNrbGVyLCBvYmopIDwgMCkKQEAgLTYyMDksNTQgKzY4OTQsNDggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHBpY2tsZV9sb2FkX2RvYywKLSJsb2FkKGZpbGUsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykgLT4gb2JqZWN0XG4iCi0iXG4iCi0iUmVhZCBhIHBpY2tsZWQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG9wZW4gZmlsZSBvYmplY3QgZmlsZSBhbmRcbiIKLSJyZXR1cm4gdGhlIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpbi4gIFRoaXMgaXNcbiIKLSJlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLCBidXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50LlxuIgotIlxuIgotIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8gcHJvdG9jb2xcbiIKLSJhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzIHJlcHJlc2VudGF0aW9uIGFyZVxuIgotImlnbm9yZWQuXG4iCi0iXG4iCi0iVGhlIGFyZ3VtZW50IGZpbGUgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlcyBhblxuIgotImludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm8gYXJndW1lbnRzLiAgQm90aFxuIgotIm1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqIGNhbiBiZSBhIGJpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWRcbiIKLSJmb3IgcmVhZGluZywgYSBCeXRlc0lPIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzXG4iCi0iaW50ZXJmYWNlLlxuIgotIlxuIgotIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycyxcbiIKLSJ3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtIGdlbmVyYXRlZFxuIgotImJ5IFB5dGhvbiAyLnguICBJZiBmaXhfaW1wb3J0cyBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGRcbiIKLSJQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlIGVuY29kaW5nIGFuZFxuIgotImVycm9ycyB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob25cbiIKLSIyLng7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS5cbiIpOworLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLmxvYWQKKworICBmaWxlOiBvYmplY3QKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKyAgZW5jb2Rpbmc6IHN0ciA9ICdBU0NJSScKKyAgZXJyb3JzOiBzdHIgPSAnc3RyaWN0JworCitSZWFkIGFuZCByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIHBpY2tsZSBkYXRhIHN0b3JlZCBpbiBhIGZpbGUuCisKK1RoaXMgaXMgZXF1aXZhbGVudCB0byBgYFVucGlja2xlcihmaWxlKS5sb2FkKClgYCwgYnV0IG1heSBiZSBtb3JlCitlZmZpY2llbnQuCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KK3Byb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKK3JlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgorCitUaGUgYXJndW1lbnQgKmZpbGUqIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXMKK2FuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm8KK2FyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGEKK2JpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHJlYWRpbmcsIGEgaW8uQnl0ZXNJTyBvYmplY3QsIG9yIGFueQorb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCitnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlCisqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZworaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsCityZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgJ2J5dGVzJyB0byByZWFkIHRoZXNlIDgtYml0CitzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfbG9hZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9sb2FkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NjhjNjEzNTZjMTcyNjU0IGlucHV0PWRhOTczNzJlMzhlNTEwYTZdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07Ci0gICAgUHlPYmplY3QgKmZpbGU7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKLSAgICBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyOworICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKIAotICAgIC8qIGZpeF9pbXBvcnRzLCBlbmNvZGluZyBhbmQgZXJyb3JzIGFyZSBhIGtleXdvcmQtb25seSBhcmd1bWVudC4gICovCi0gICAgaWYgKFB5X1NJWkUoYXJncykgIT0gMSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5sb2FkKCkgdGFrZXMgZXhhY3RseSBvbmUgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T3NzOmxvYWQiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICB1bnBpY2tsZXIgPSBfVW5waWNrbGVyX05ldygpOwogICAgIGlmICh1bnBpY2tsZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTYyNjYsOSArNjk0NSw3IEBACiAgICAgaWYgKF9VbnBpY2tsZXJfU2V0SW5wdXRFbmNvZGluZyh1bnBpY2tsZXIsIGVuY29kaW5nLCBlcnJvcnMpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHMpOwotICAgIGlmICh1bnBpY2tsZXItPmZpeF9pbXBvcnRzID09IC0xKQotICAgICAgICBnb3RvIGVycm9yOworICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0czsKIAogICAgIHJlc3VsdCA9IGxvYWQodW5waWNrbGVyKTsKICAgICBQeV9ERUNSRUYodW5waWNrbGVyKTsKQEAgLTYyNzksNTkgKzY5NTYsNDkgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHBpY2tsZV9sb2Fkc19kb2MsCi0ibG9hZHMoaW5wdXQsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykgLT4gb2JqZWN0XG4iCi0iXG4iCi0iUmVhZCBhIHBpY2tsZWQgb2JqZWN0IGhpZXJhcmNoeSBmcm9tIGEgYnl0ZXMgb2JqZWN0IGFuZCByZXR1cm4gdGhlXG4iCi0icmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluXG4iCi0iXG4iCi0iVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbFxuIgotImFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlXG4iCi0iaWdub3JlZC5cbiIKLSJcbiIKLSJPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZml4X2ltcG9ydHMsIGVuY29kaW5nIGFuZCBlcnJvcnMsIHdoaWNoXG4iCi0iYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWRcbiIKLSJieSBQeXRob24gMi54LiAgSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkXG4iCi0iUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSBlbmNvZGluZyBhbmRcbiIKLSJlcnJvcnMgdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uXG4iCi0iMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5sb2FkcworCisgIGRhdGE6IG9iamVjdAorICAqCisgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorICBlbmNvZGluZzogc3RyID0gJ0FTQ0lJJworICBlcnJvcnM6IHN0ciA9ICdzdHJpY3QnCisKK1JlYWQgYW5kIHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gcGlja2xlIGRhdGEuCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KK3Byb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKK3JlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCitnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlCisqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZworaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsCityZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgJ2J5dGVzJyB0byByZWFkIHRoZXNlIDgtYml0CitzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfbG9hZHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfbG9hZHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZGF0YSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBiMzg0NWFkMTEwYjI1MjIgaW5wdXQ9ZjU3ZjBmZGFhMmI0Y2I4Yl0qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiaW5wdXQiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07Ci0gICAgUHlPYmplY3QgKmlucHV0OwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IF9VbnBpY2tsZXJfTmV3KCk7CiAKLSAgICAvKiBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycyBhcmUgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpICE9IDEpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUubG9hZHMoKSB0YWtlcyBleGFjdGx5IG9uZSBwb3NpdGlvbmFsICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAoJXpkIGdpdmVuKSIsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPc3M6bG9hZHMiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlucHV0LCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKICAgICBpZiAodW5waWNrbGVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQodW5waWNrbGVyLCBpbnB1dCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1NldFN0cmluZ0lucHV0KHVucGlja2xlciwgZGF0YSkgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKF9VbnBpY2tsZXJfU2V0SW5wdXRFbmNvZGluZyh1bnBpY2tsZXIsIGVuY29kaW5nLCBlcnJvcnMpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHMpOwotICAgIGlmICh1bnBpY2tsZXItPmZpeF9pbXBvcnRzID09IC0xKQotICAgICAgICBnb3RvIGVycm9yOworICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0czsKIAogICAgIHJlc3VsdCA9IGxvYWQodW5waWNrbGVyKTsKICAgICBQeV9ERUNSRUYodW5waWNrbGVyKTsKQEAgLTYzNDIsMTM5ICs3MDA5LDY5IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBwaWNrbGVfbWV0aG9kc1tdID0gewotICAgIHsiZHVtcCIsICAoUHlDRnVuY3Rpb24pcGlja2xlX2R1bXAsICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgcGlja2xlX2R1bXBfZG9jfSwKLSAgICB7ImR1bXBzIiwgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9kdW1wcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9kdW1wc19kb2N9LAotICAgIHsibG9hZCIsICAoUHlDRnVuY3Rpb24pcGlja2xlX2xvYWQsICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgcGlja2xlX2xvYWRfZG9jfSwKLSAgICB7ImxvYWRzIiwgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9sb2FkcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9sb2Fkc19kb2N9LAorICAgIF9QSUNLTEVfRFVNUF9NRVRIT0RERUYKKyAgICBfUElDS0xFX0RVTVBTX01FVEhPRERFRgorICAgIF9QSUNLTEVfTE9BRF9NRVRIT0RERUYKKyAgICBfUElDS0xFX0xPQURTX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAvKiBzZW50aW5lbCAqLwogfTsKIAogc3RhdGljIGludAotaW5pdG1vZHVsZSh2b2lkKQorcGlja2xlX2NsZWFyKFB5T2JqZWN0ICptKQogewotICAgIFB5T2JqZWN0ICpjb3B5cmVnID0gTlVMTDsKLSAgICBQeU9iamVjdCAqY29tcGF0X3BpY2tsZSA9IE5VTEw7Ci0KLSAgICAvKiBYWFg6IFdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgdHlwZXMgb2YgdGhlIGRpY3Rpb25hcmllcyBpbXBvcnRlZCBhcmUKLSAgICAgICBleGFjdGx5IFB5RGljdCBvYmplY3RzLiBPdGhlcndpc2UsIGl0IGlzIHBvc3NpYmxlIHRvIGNyYXNoIHRoZSBwaWNrbGUKLSAgICAgICBzaW5jZSB3ZSB1c2UgdGhlIFB5RGljdCBBUEkgZGlyZWN0bHkgdG8gYWNjZXNzIHRoZXNlIGRpY3Rpb25hcmllcy4gKi8KLQotICAgIGNvcHlyZWcgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHlyZWciKTsKLSAgICBpZiAoIWNvcHlyZWcpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZGlzcGF0Y2hfdGFibGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJkaXNwYXRjaF90YWJsZSIpOwotICAgIGlmICghZGlzcGF0Y2hfdGFibGUpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZXh0ZW5zaW9uX3JlZ2lzdHJ5ID0gXAotICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfZXh0ZW5zaW9uX3JlZ2lzdHJ5Iik7Ci0gICAgaWYgKCFleHRlbnNpb25fcmVnaXN0cnkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaW52ZXJ0ZWRfcmVnaXN0cnkgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfaW52ZXJ0ZWRfcmVnaXN0cnkiKTsKLSAgICBpZiAoIWludmVydGVkX3JlZ2lzdHJ5KQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGV4dGVuc2lvbl9jYWNoZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29weXJlZywgIl9leHRlbnNpb25fY2FjaGUiKTsKLSAgICBpZiAoIWV4dGVuc2lvbl9jYWNoZSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBQeV9DTEVBUihjb3B5cmVnKTsKLQotICAgIC8qIExvYWQgdGhlIDIueCAtPiAzLnggc3RkbGliIG1vZHVsZSBtYXBwaW5nIHRhYmxlcyAqLwotICAgIGNvbXBhdF9waWNrbGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl9jb21wYXRfcGlja2xlIik7Ci0gICAgaWYgKCFjb21wYXRfcGlja2xlKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIG5hbWVfbWFwcGluZ18ydG8zID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiTkFNRV9NQVBQSU5HIik7Ci0gICAgaWYgKCFuYW1lX21hcHBpbmdfMnRvMykKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KG5hbWVfbWFwcGluZ18ydG8zKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLk5BTUVfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobmFtZV9tYXBwaW5nXzJ0bzMpLT50cF9uYW1lKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgaW1wb3J0X21hcHBpbmdfMnRvMyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU1QT1JUX01BUFBJTkciKTsKLSAgICBpZiAoIWltcG9ydF9tYXBwaW5nXzJ0bzMpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChpbXBvcnRfbWFwcGluZ18ydG8zKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShpbXBvcnRfbWFwcGluZ18ydG8zKS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIC8qIC4uLiBhbmQgdGhlIDMueCAtPiAyLnggbWFwcGluZyB0YWJsZXMgKi8KLSAgICBuYW1lX21hcHBpbmdfM3RvMiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFVkVSU0VfTkFNRV9NQVBQSU5HIik7Ci0gICAgaWYgKCFuYW1lX21hcHBpbmdfM3RvMikKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KG5hbWVfbWFwcGluZ18zdG8yKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShuYW1lX21hcHBpbmdfM3RvMiktPnRwX25hbWUpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICBpbXBvcnRfbWFwcGluZ18zdG8yID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSRVZFUlNFX0lNUE9SVF9NQVBQSU5HIik7Ci0gICAgaWYgKCFpbXBvcnRfbWFwcGluZ18zdG8yKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3QoaW1wb3J0X21hcHBpbmdfM3RvMikpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShpbXBvcnRfbWFwcGluZ18zdG8yKS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIFB5X0NMRUFSKGNvbXBhdF9waWNrbGUpOwotCi0gICAgZW1wdHlfdHVwbGUgPSBQeVR1cGxlX05ldygwKTsKLSAgICBpZiAoZW1wdHlfdHVwbGUgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB0d29fdHVwbGUgPSBQeVR1cGxlX05ldygyKTsKLSAgICBpZiAodHdvX3R1cGxlID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgLyogV2UgdXNlIHRoaXMgdGVtcCBjb250YWluZXIgd2l0aCBubyByZWdhcmQgdG8gcmVmY291bnRzLCBvciB0bwotICAgICAqIGtlZXBpbmcgY29udGFpbmVlcyBhbGl2ZS4gIEV4ZW1wdCBmcm9tIEdDLCBiZWNhdXNlIHdlIGRvbid0Ci0gICAgICogd2FudCBhbnl0aGluZyBsb29raW5nIGF0IHR3b190dXBsZSgpIGJ5IG1hZ2ljLgotICAgICAqLwotICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sodHdvX3R1cGxlKTsKLQorICAgIF9QaWNrbGVfQ2xlYXJTdGF0ZShfUGlja2xlX0dldFN0YXRlKG0pKTsKICAgICByZXR1cm4gMDsKK30KIAotICBlcnJvcjoKLSAgICBQeV9DTEVBUihjb3B5cmVnKTsKLSAgICBQeV9DTEVBUihkaXNwYXRjaF90YWJsZSk7Ci0gICAgUHlfQ0xFQVIoZXh0ZW5zaW9uX3JlZ2lzdHJ5KTsKLSAgICBQeV9DTEVBUihpbnZlcnRlZF9yZWdpc3RyeSk7Ci0gICAgUHlfQ0xFQVIoZXh0ZW5zaW9uX2NhY2hlKTsKLSAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKLSAgICBQeV9DTEVBUihuYW1lX21hcHBpbmdfMnRvMyk7Ci0gICAgUHlfQ0xFQVIoaW1wb3J0X21hcHBpbmdfMnRvMyk7Ci0gICAgUHlfQ0xFQVIobmFtZV9tYXBwaW5nXzN0bzIpOwotICAgIFB5X0NMRUFSKGltcG9ydF9tYXBwaW5nXzN0bzIpOwotICAgIFB5X0NMRUFSKGVtcHR5X3R1cGxlKTsKLSAgICBQeV9DTEVBUih0d29fdHVwbGUpOwotICAgIHJldHVybiAtMTsKK3N0YXRpYyB2b2lkCitwaWNrbGVfZnJlZShQeU9iamVjdCAqbSkKK3sKKyAgICBfUGlja2xlX0NsZWFyU3RhdGUoX1BpY2tsZV9HZXRTdGF0ZShtKSk7Cit9CisKK3N0YXRpYyBpbnQKK3BpY2tsZV90cmF2ZXJzZShQeU9iamVjdCAqbSwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRTdGF0ZShtKTsKKyAgICBQeV9WSVNJVChzdC0+UGlja2xlRXJyb3IpOworICAgIFB5X1ZJU0lUKHN0LT5QaWNrbGluZ0Vycm9yKTsKKyAgICBQeV9WSVNJVChzdC0+VW5waWNrbGluZ0Vycm9yKTsKKyAgICBQeV9WSVNJVChzdC0+ZGlzcGF0Y2hfdGFibGUpOworICAgIFB5X1ZJU0lUKHN0LT5leHRlbnNpb25fcmVnaXN0cnkpOworICAgIFB5X1ZJU0lUKHN0LT5leHRlbnNpb25fY2FjaGUpOworICAgIFB5X1ZJU0lUKHN0LT5pbnZlcnRlZF9yZWdpc3RyeSk7CisgICAgUHlfVklTSVQoc3QtPm5hbWVfbWFwcGluZ18ydG8zKTsKKyAgICBQeV9WSVNJVChzdC0+aW1wb3J0X21hcHBpbmdfMnRvMyk7CisgICAgUHlfVklTSVQoc3QtPm5hbWVfbWFwcGluZ18zdG8yKTsKKyAgICBQeV9WSVNJVChzdC0+aW1wb3J0X21hcHBpbmdfM3RvMik7CisgICAgUHlfVklTSVQoc3QtPmNvZGVjc19lbmNvZGUpOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9waWNrbGVtb2R1bGUgPSB7CiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICJfcGlja2xlIiwKLSAgICBwaWNrbGVfbW9kdWxlX2RvYywKLSAgICAtMSwKLSAgICBwaWNrbGVfbWV0aG9kcywKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMCisgICAgIl9waWNrbGUiLCAgICAgICAgICAgIC8qIG1fbmFtZSAqLworICAgIHBpY2tsZV9tb2R1bGVfZG9jLCAgICAvKiBtX2RvYyAqLworICAgIHNpemVvZihQaWNrbGVTdGF0ZSksICAvKiBtX3NpemUgKi8KKyAgICBwaWNrbGVfbWV0aG9kcywgICAgICAgLyogbV9tZXRob2RzICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgIC8qIG1fcmVsb2FkICovCisgICAgcGlja2xlX3RyYXZlcnNlLCAgICAgIC8qIG1fdHJhdmVyc2UgKi8KKyAgICBwaWNrbGVfY2xlYXIsICAgICAgICAgLyogbV9jbGVhciAqLworICAgIChmcmVlZnVuYylwaWNrbGVfZnJlZSAvKiBtX2ZyZWUgKi8KIH07CiAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3BpY2tsZSh2b2lkKQogewogICAgIFB5T2JqZWN0ICptOworICAgIFBpY2tsZVN0YXRlICpzdDsKKworICAgIG0gPSBQeVN0YXRlX0ZpbmRNb2R1bGUoJl9waWNrbGVtb2R1bGUpOworICAgIGlmIChtKSB7CisgICAgICAgIFB5X0lOQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIG07CisgICAgfQogCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmVW5waWNrbGVyX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02NDk5LDI3ICs3MDk2LDMyIEBACiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVW5waWNrbGVyIiwgKFB5T2JqZWN0ICopJlVucGlja2xlcl9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgc3QgPSBfUGlja2xlX0dldFN0YXRlKG0pOworCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZXhjZXB0aW9ucy4gKi8KLSAgICBQaWNrbGVFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGVFcnJvciIsIE5VTEwsIE5VTEwpOwotICAgIGlmIChQaWNrbGVFcnJvciA9PSBOVUxMKQorICAgIHN0LT5QaWNrbGVFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGVFcnJvciIsIE5VTEwsIE5VTEwpOworICAgIGlmIChzdC0+UGlja2xlRXJyb3IgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUGlja2xpbmdFcnJvciA9IFwKLSAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uKCJfcGlja2xlLlBpY2tsaW5nRXJyb3IiLCBQaWNrbGVFcnJvciwgTlVMTCk7Ci0gICAgaWYgKFBpY2tsaW5nRXJyb3IgPT0gTlVMTCkKKyAgICBzdC0+UGlja2xpbmdFcnJvciA9IFwKKyAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uKCJfcGlja2xlLlBpY2tsaW5nRXJyb3IiLCBzdC0+UGlja2xlRXJyb3IsIE5VTEwpOworICAgIGlmIChzdC0+UGlja2xpbmdFcnJvciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBVbnBpY2tsaW5nRXJyb3IgPSBcCi0gICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5VbnBpY2tsaW5nRXJyb3IiLCBQaWNrbGVFcnJvciwgTlVMTCk7Ci0gICAgaWYgKFVucGlja2xpbmdFcnJvciA9PSBOVUxMKQorICAgIHN0LT5VbnBpY2tsaW5nRXJyb3IgPSBcCisgICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5VbnBpY2tsaW5nRXJyb3IiLCBzdC0+UGlja2xlRXJyb3IsIE5VTEwpOworICAgIGlmIChzdC0+VW5waWNrbGluZ0Vycm9yID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGlja2xlRXJyb3IiLCBQaWNrbGVFcnJvcikgPCAwKQorICAgIFB5X0lOQ1JFRihzdC0+UGlja2xlRXJyb3IpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBpY2tsZUVycm9yIiwgc3QtPlBpY2tsZUVycm9yKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBpY2tsaW5nRXJyb3IiLCBQaWNrbGluZ0Vycm9yKSA8IDApCisgICAgUHlfSU5DUkVGKHN0LT5QaWNrbGluZ0Vycm9yKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQaWNrbGluZ0Vycm9yIiwgc3QtPlBpY2tsaW5nRXJyb3IpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVW5waWNrbGluZ0Vycm9yIiwgVW5waWNrbGluZ0Vycm9yKSA8IDApCisgICAgUHlfSU5DUkVGKHN0LT5VbnBpY2tsaW5nRXJyb3IpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVucGlja2xpbmdFcnJvciIsIHN0LT5VbnBpY2tsaW5nRXJyb3IpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoaW5pdG1vZHVsZSgpIDwgMCkKKyAgICBpZiAoX1BpY2tsZV9Jbml0U3RhdGUoc3QpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICByZXR1cm4gbTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKaW5kZXggMDE5NmNhMi4uYTJkNzAyMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKKysrIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKQEAgLTM1LDcgKzM1LDcgQEAKICMgZGVmaW5lIEZEX0RJUiAiL3Byb2Mvc2VsZi9mZCIKICNlbmRpZgogCi0jZGVmaW5lIFBPU0lYX0NBTEwoY2FsbCkgICBpZiAoKGNhbGwpID09IC0xKSBnb3RvIGVycm9yCisjZGVmaW5lIFBPU0lYX0NBTEwoY2FsbCkgICBkbyB7IGlmICgoY2FsbCkgPT0gLTEpIGdvdG8gZXJyb3I7IH0gd2hpbGUgKDApCiAKIAogLyogTWF4aW11bSBmaWxlIGRlc2NyaXB0b3IsIGluaXRpYWxpemVkIG9uIG1vZHVsZSBsb2FkLiAqLwpAQCAtODcsNyArODcsNyBAQAogICAgIGlmIChzdGF0KCIvZGV2IiwgJmRldl9zdGF0KSAhPSAwKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoc3RhdChGRF9ESVIsICZkZXZfZmRfc3RhdCkgIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7IAorICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoZGV2X3N0YXQuc3RfZGV2ID09IGRldl9mZF9zdGF0LnN0X2RldikKICAgICAgICAgcmV0dXJuIDA7ICAvKiAvID09IC9kZXYgPT0gL2Rldi9mZCBtZWFucyBpdCBpcyBzdGF0aWMuICNmYWlsICovCiAgICAgcmV0dXJuIDE7CkBAIC0xMzYsNiArMTM2LDI5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK21ha2VfaW5oZXJpdGFibGUoUHlPYmplY3QgKnB5X2Zkc190b19rZWVwLCBpbnQgZXJycGlwZV93cml0ZSkKK3sKKyAgICBQeV9zc2l6ZV90IGksIGxlbjsKKworICAgIGxlbiA9IFB5U2VxdWVuY2VfTGVuZ3RoKHB5X2Zkc190b19rZWVwKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgUHlPYmplY3QqIGZkb2JqID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHB5X2Zkc190b19rZWVwLCBpKTsKKyAgICAgICAgbG9uZyBmZCA9IFB5TG9uZ19Bc0xvbmcoZmRvYmopOworICAgICAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworICAgICAgICBhc3NlcnQoMCA8PSBmZCAmJiBmZCA8PSBJTlRfTUFYKTsKKyAgICAgICAgaWYgKGZkID09IGVycnBpcGVfd3JpdGUpIHsKKyAgICAgICAgICAgIC8qIGVycnBpcGVfd3JpdGUgaXMgcGFydCBvZiBweV9mZHNfdG9fa2VlcC4gSXQgbXVzdCBiZSBjbG9zZWQgYXQKKyAgICAgICAgICAgICAgIGV4ZWMoKSwgYnV0IGtlcHQgb3BlbiBpbiB0aGUgY2hpbGQgcHJvY2VzcyB1bnRpbCBleGVjKCkgaXMKKyAgICAgICAgICAgICAgIGNhbGxlZC4gKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKChpbnQpZmQsIDEsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIAogLyogQ2xvc2UgYWxsIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIHJhbmdlIHN0YXJ0X2ZkIGluY2x1c2l2ZSB0bwogICogZW5kX2ZkIGV4Y2x1c2l2ZSBleGNlcHQgZm9yIHRob3NlIGluIHB5X2Zkc190b19rZWVwLiAgSWYgdGhlCkBAIC0yMDUsMTggKzIyOCw4IEBACiAgICAgaW50IGZkX2Rpcl9mZDsKICAgICBpZiAoc3RhcnRfZmQgPj0gZW5kX2ZkKQogICAgICAgICByZXR1cm47Ci0jaWZkZWYgT19DTE9FWEVDCi0gICAgZmRfZGlyX2ZkID0gb3BlbihGRF9ESVIsIE9fUkRPTkxZIHwgT19DTE9FWEVDLCAwKTsKLSNlbHNlCi0gICAgZmRfZGlyX2ZkID0gb3BlbihGRF9ESVIsIE9fUkRPTkxZLCAwKTsKLSNpZmRlZiBGRF9DTE9FWEVDCi0gICAgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoZmRfZGlyX2ZkLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKGZkX2Rpcl9mZCwgRl9TRVRGRCwgb2xkIHwgRkRfQ0xPRVhFQyk7Ci0gICAgfQotI2VuZGlmCi0jZW5kaWYKKworICAgIGZkX2Rpcl9mZCA9IF9QeV9vcGVuKEZEX0RJUiwgT19SRE9OTFkpOwogICAgIGlmIChmZF9kaXJfZmQgPT0gLTEpIHsKICAgICAgICAgLyogTm8gd2F5IHRvIGdldCBhIGxpc3Qgb2Ygb3BlbiBmZHMuICovCiAgICAgICAgIF9jbG9zZV9mZHNfYnlfYnJ1dGVfZm9yY2Uoc3RhcnRfZmQsIGVuZF9mZCwgcHlfZmRzX3RvX2tlZXApOwpAQCAtMzU2LDE2ICszNjksMTYgQEAKICAgICAvKiBCdWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBoZXggaW50ZWdlci4gIFdlIGNhbid0IG1hbGxvYy4gKi8KICAgICBjaGFyIGhleF9lcnJub1tzaXplb2Yoc2F2ZWRfZXJybm8pKjIrMV07CiAKKyAgICBpZiAobWFrZV9pbmhlcml0YWJsZShweV9mZHNfdG9fa2VlcCwgZXJycGlwZV93cml0ZSkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworCiAgICAgLyogQ2xvc2UgcGFyZW50J3MgcGlwZSBlbmRzLiAqLwotICAgIGlmIChwMmN3cml0ZSAhPSAtMSkgeworICAgIGlmIChwMmN3cml0ZSAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShwMmN3cml0ZSkpOwotICAgIH0KLSAgICBpZiAoYzJwcmVhZCAhPSAtMSkgeworICAgIGlmIChjMnByZWFkICE9IC0xKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGMycHJlYWQpKTsKLSAgICB9Ci0gICAgaWYgKGVycnJlYWQgIT0gLTEpIHsKKyAgICBpZiAoZXJycmVhZCAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShlcnJyZWFkKSk7Ci0gICAgfQogICAgIFBPU0lYX0NBTEwoY2xvc2UoZXJycGlwZV9yZWFkKSk7CiAKICAgICAvKiBXaGVuIGR1cGluZyBmZHMsIGlmIHRoZXJlIGFyaXNlcyBhIHNpdHVhdGlvbiB3aGVyZSBvbmUgb2YgdGhlIGZkcyBpcwpAQCAtMzc5LDM4ICszOTIsMzQgQEAKICAgICAgICBkdXAyKCkgcmVtb3ZlcyB0aGUgQ0xPRVhFQyBmbGFnIGJ1dCB3ZSBtdXN0IGRvIGl0IG91cnNlbHZlcyBpZiBkdXAyKCkKICAgICAgICB3b3VsZCBiZSBhIG5vLW9wIChpc3N1ZSAjMTA4MDYpLiAqLwogICAgIGlmIChwMmNyZWFkID09IDApIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKHAyY3JlYWQsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwocDJjcmVhZCwgRl9TRVRGRCwgb2xkICYgfkZEX0NMT0VYRUMpOwotICAgIH0gZWxzZSBpZiAocDJjcmVhZCAhPSAtMSkgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShwMmNyZWFkLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIGlmIChwMmNyZWFkICE9IC0xKQogICAgICAgICBQT1NJWF9DQUxMKGR1cDIocDJjcmVhZCwgMCkpOyAgLyogc3RkaW4gKi8KLSAgICB9CisKICAgICBpZiAoYzJwd3JpdGUgPT0gMSkgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoYzJwd3JpdGUsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwoYzJwd3JpdGUsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKLSAgICB9IGVsc2UgaWYgKGMycHdyaXRlICE9IC0xKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGMycHdyaXRlLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIGlmIChjMnB3cml0ZSAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChkdXAyKGMycHdyaXRlLCAxKSk7ICAvKiBzdGRvdXQgKi8KLSAgICB9CisKICAgICBpZiAoZXJyd3JpdGUgPT0gMikgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoZXJyd3JpdGUsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwoZXJyd3JpdGUsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKLSAgICB9IGVsc2UgaWYgKGVycndyaXRlICE9IC0xKSB7Ci0gICAgICAgIFBPU0lYX0NBTEwoZHVwMihlcnJ3cml0ZSwgMikpOyAgLyogc3RkZXJyICovCisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGVycndyaXRlLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KKyAgICBlbHNlIGlmIChlcnJ3cml0ZSAhPSAtMSkKKyAgICAgICAgUE9TSVhfQ0FMTChkdXAyKGVycndyaXRlLCAyKSk7ICAvKiBzdGRlcnIgKi8KIAogICAgIC8qIENsb3NlIHBpcGUgZmRzLiAgTWFrZSBzdXJlIHdlIGRvbid0IGNsb3NlIHRoZSBzYW1lIGZkIG1vcmUgdGhhbiAqLwogICAgIC8qIG9uY2UsIG9yIHN0YW5kYXJkIGZkcy4gKi8KLSAgICBpZiAocDJjcmVhZCA+IDIpIHsKKyAgICBpZiAocDJjcmVhZCA+IDIpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UocDJjcmVhZCkpOwotICAgIH0KLSAgICBpZiAoYzJwd3JpdGUgPiAyICYmIGMycHdyaXRlICE9IHAyY3JlYWQpIHsKKyAgICBpZiAoYzJwd3JpdGUgPiAyICYmIGMycHdyaXRlICE9IHAyY3JlYWQpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UoYzJwd3JpdGUpKTsKLSAgICB9Ci0gICAgaWYgKGVycndyaXRlICE9IGMycHdyaXRlICYmIGVycndyaXRlICE9IHAyY3JlYWQgJiYgZXJyd3JpdGUgPiAyKSB7CisgICAgaWYgKGVycndyaXRlICE9IGMycHdyaXRlICYmIGVycndyaXRlICE9IHAyY3JlYWQgJiYgZXJyd3JpdGUgPiAyKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGVycndyaXRlKSk7Ci0gICAgfQogCiAgICAgaWYgKGN3ZCkKICAgICAgICAgUE9TSVhfQ0FMTChjaGRpcihjd2QpKTsKQEAgLTQ5Miw3ICs1MDEsNyBAQAogICAgICAgICAvKiBXZSBjYW4ndCBjYWxsIHN0cmVycm9yKHNhdmVkX2Vycm5vKS4gIEl0IGlzIG5vdCBhc3luYyBzaWduYWwgc2FmZS4KICAgICAgICAgICogVGhlIHBhcmVudCBwcm9jZXNzIHdpbGwgbG9vayB0aGUgZXJyb3IgbWVzc2FnZSB1cC4gKi8KICAgICB9IGVsc2UgewotICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCAiUnVudGltZUVycm9yOjA6IiwgMTUpOworICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCAiU3VicHJvY2Vzc0Vycm9yOjA6IiwgMTgpOwogICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCBlcnJfbXNnLCBzdHJsZW4oZXJyX21zZykpOwogICAgIH0KICAgICBpZiAodW51c2VkKSByZXR1cm47ICAvKiBzaWxseT8geWVzISBhdm9pZHMgZ2NjIGNvbXBpbGVyIHdhcm5pbmcuICovCkBAIC01NDQsNyArNTUzLDcgQEAKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICAgICAgX1B5X0lERU5USUZJRVIoaXNlbmFibGVkKTsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZGlzYWJsZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGdjX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiZ2MiKTsKICAgICAgICAgaWYgKGdjX21vZHVsZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MjEsODggKzczMCw2IEBACiBSYWlzZXM6IE9ubHkgb24gYW4gZXJyb3IgaW4gdGhlIHBhcmVudCBwcm9jZXNzLlxuXAogIik7CiAKLVB5RG9jX1NUUlZBUihzdWJwcm9jZXNzX2Nsb2V4ZWNfcGlwZV9kb2MsCi0iY2xvZXhlY19waXBlKCkgLT4gKHJlYWRfZW5kLCB3cml0ZV9lbmQpXG5cblwKLUNyZWF0ZSBhIHBpcGUgd2hvc2UgZW5kcyBoYXZlIHRoZSBjbG9leGVjIGZsYWcgc2V0OyB3cml0ZV9lbmQgd2lsbCBiZSA+PSAzLiIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotc3VicHJvY2Vzc19jbG9leGVjX3BpcGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCi17Ci0gICAgaW50IGZkc1syXTsKLSAgICBpbnQgcmVzLCBzYXZlZF9lcnJubzsKLSAgICBsb25nIG9sZGZsYWdzOwotI2lmZGVmIEhBVkVfUElQRTIKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gcGlwZTIoZmRzLCBPX0NMT0VYRUMpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyAhPSAwICYmIGVycm5vID09IEVOT1NZUykKLSAgICB7Ci0jZW5kaWYKLSAgICAgICAgLyogV2UgaG9sZCB0aGUgR0lMIHdoaWNoIG9mZmVycyBzb21lIHByb3RlY3Rpb24gZnJvbSBvdGhlciBjb2RlIGNhbGxpbmcKLSAgICAgICAgICogZm9yaygpIGJlZm9yZSB0aGUgQ0xPRVhFQyBmbGFncyBoYXZlIGJlZW4gc2V0IGJ1dCB3ZSBjYW4ndCBndWFyYW50ZWUKLSAgICAgICAgICogYW55dGhpbmcgd2l0aG91dCBwaXBlMigpLiAqLwotICAgICAgICByZXMgPSBwaXBlKGZkcyk7Ci0KLSAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICBvbGRmbGFncyA9IGZjbnRsKGZkc1swXSwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICBpZiAob2xkZmxhZ3MgPCAwKSByZXMgPSBvbGRmbGFnczsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzID09IDApCi0gICAgICAgICAgICByZXMgPSBmY250bChmZHNbMF0sIEZfU0VURkQsIG9sZGZsYWdzIHwgRkRfQ0xPRVhFQyk7Ci0KLSAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICBvbGRmbGFncyA9IGZjbnRsKGZkc1sxXSwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICBpZiAob2xkZmxhZ3MgPCAwKSByZXMgPSBvbGRmbGFnczsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzID09IDApCi0gICAgICAgICAgICByZXMgPSBmY250bChmZHNbMV0sIEZfU0VURkQsIG9sZGZsYWdzIHwgRkRfQ0xPRVhFQyk7Ci0jaWZkZWYgSEFWRV9QSVBFMgotICAgIH0KLSNlbmRpZgotICAgIGlmIChyZXMgPT0gMCAmJiBmZHNbMV0gPCAzKSB7Ci0gICAgICAgIC8qIFdlIGFsd2F5cyB3YW50IHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUgdG8gYXZvaWQgZmRzIDAsIDEgYW5kIDIKLSAgICAgICAgICogYXMgb3VyIGNoaWxkIG1heSBjbGFpbSB0aG9zZSBmb3Igc3RkaW8gY29ubmVjdGlvbnMuICovCi0gICAgICAgIGludCB3cml0ZV9mZCA9IGZkc1sxXTsKLSAgICAgICAgaW50IGZkc190b19jbG9zZVszXSA9IHstMSwgLTEsIC0xfTsKLSAgICAgICAgaW50IGZkc190b19jbG9zZV9pZHggPSAwOwotI2lmZGVmIEZfRFVQRkRfQ0xPRVhFQwotICAgICAgICBmZHNfdG9fY2xvc2VbZmRzX3RvX2Nsb3NlX2lkeCsrXSA9IHdyaXRlX2ZkOwotICAgICAgICB3cml0ZV9mZCA9IGZjbnRsKHdyaXRlX2ZkLCBGX0RVUEZEX0NMT0VYRUMsIDMpOwotICAgICAgICBpZiAod3JpdGVfZmQgPCAwKSAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBGX0RVUEZEX0NMT0VYRUMgLyBvdGhlciBlcnJvciAqLwotI2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIFVzZSBkdXAgYSBmZXcgdGltZXMgdW50aWwgd2UgZ2V0IGEgZGVzaXJhYmxlIGZkLiAqLwotICAgICAgICAgICAgZm9yICg7IGZkc190b19jbG9zZV9pZHggPCAzOyArK2Zkc190b19jbG9zZV9pZHgpIHsKLSAgICAgICAgICAgICAgICBmZHNfdG9fY2xvc2VbZmRzX3RvX2Nsb3NlX2lkeF0gPSB3cml0ZV9mZDsKLSAgICAgICAgICAgICAgICB3cml0ZV9mZCA9IGR1cCh3cml0ZV9mZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHdyaXRlX2ZkID49IDMpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8qIFdlIG1heSBkdXAgYSBmZXcgZXh0cmEgdGltZXMgaWYgaXQgcmV0dXJucyBhbiBlcnJvciBidXQKLSAgICAgICAgICAgICAgICAgKiB0aGF0IGlzIG9rYXkuICBSZXBlYXQgY2FsbHMgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBlcnJvci4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3cml0ZV9mZCA8IDApIHJlcyA9IHdyaXRlX2ZkOwotICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgb2xkZmxhZ3MgPSBmY250bCh3cml0ZV9mZCwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZGZsYWdzIDwgMCkgcmVzID0gb2xkZmxhZ3M7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcyA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXMgPSBmY250bCh3cml0ZV9mZCwgRl9TRVRGRCwgb2xkZmxhZ3MgfCBGRF9DTE9FWEVDKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOwotICAgICAgICAvKiBDbG9zZSBmZHMgd2UgdHJpZWQgZm9yIHRoZSB3cml0ZSBlbmQgdGhhdCB3ZXJlIHRvbyBsb3cuICovCi0gICAgICAgIGZvciAoZmRzX3RvX2Nsb3NlX2lkeD0wOyBmZHNfdG9fY2xvc2VfaWR4IDwgMzsgKytmZHNfdG9fY2xvc2VfaWR4KSB7Ci0gICAgICAgICAgICBpbnQgdGVtcF9mZCA9IGZkc190b19jbG9zZVtmZHNfdG9fY2xvc2VfaWR4XTsKLSAgICAgICAgICAgIHdoaWxlICh0ZW1wX2ZkID49IDAgJiYgY2xvc2UodGVtcF9mZCkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKLSAgICAgICAgfQotICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOyAgLyogcmVwb3J0IGR1cCBvciBmY250bCBlcnJvcnMsIG5vdCBjbG9zZS4gKi8KLSAgICAgICAgZmRzWzFdID0gd3JpdGVfZmQ7Ci0gICAgfSAgLyogZW5kIGlmIHdyaXRlIGZkIHdhcyB0b28gc21hbGwgKi8KLQotICAgIGlmIChyZXMgIT0gMCkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZkc1swXSwgZmRzWzFdKTsKLX0KLQogLyogbW9kdWxlIGxldmVsIGNvZGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIFB5RG9jX1NUUlZBUihtb2R1bGVfZG9jLApAQCAtODExLDcgKzczOCw2IEBACiAKIHN0YXRpYyBQeU1ldGhvZERlZiBtb2R1bGVfbWV0aG9kc1tdID0gewogICAgIHsiZm9ya19leGVjIiwgc3VicHJvY2Vzc19mb3JrX2V4ZWMsIE1FVEhfVkFSQVJHUywgc3VicHJvY2Vzc19mb3JrX2V4ZWNfZG9jfSwKLSAgICB7ImNsb2V4ZWNfcGlwZSIsIHN1YnByb2Nlc3NfY2xvZXhlY19waXBlLCBNRVRIX05PQVJHUywgc3VicHJvY2Vzc19jbG9leGVjX3BpcGVfZG9jfSwKICAgICB7TlVMTCwgTlVMTH0gIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYyBiL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCmluZGV4IDIxYTJiMDkuLjQzNzdlZTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCkBAIC0xNjgsOSArMTY4LDkgQEAKIC8qIGluaXRfa2V5IGlzIHRoZSBhcnJheSBmb3IgaW5pdGlhbGl6aW5nIGtleXMgKi8KIC8qIGtleV9sZW5ndGggaXMgaXRzIGxlbmd0aCAqLwogc3RhdGljIFB5T2JqZWN0ICoKLWluaXRfYnlfYXJyYXkoUmFuZG9tT2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBsb25nIGluaXRfa2V5W10sIHVuc2lnbmVkIGxvbmcga2V5X2xlbmd0aCkKK2luaXRfYnlfYXJyYXkoUmFuZG9tT2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBsb25nIGluaXRfa2V5W10sIHNpemVfdCBrZXlfbGVuZ3RoKQogewotICAgIHVuc2lnbmVkIGludCBpLCBqLCBrOyAgICAgICAvKiB3YXMgc2lnbmVkIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBSREggMTIvMTYvMjAwMiAqLworICAgIHNpemVfdCBpLCBqLCBrOyAgICAgICAvKiB3YXMgc2lnbmVkIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBSREggMTIvMTYvMjAwMiAqLwogICAgIHVuc2lnbmVkIGxvbmcgKm10OwogCiAgICAgbXQgPSBzZWxmLT5zdGF0ZTsKQEAgLTE3OSw3ICsxNzksNyBAQAogICAgIGsgPSAoTj5rZXlfbGVuZ3RoID8gTiA6IGtleV9sZW5ndGgpOwogICAgIGZvciAoOyBrOyBrLS0pIHsKICAgICAgICAgbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTY2NDUyNVVMKSkKLSAgICAgICAgICAgICAgICAgKyBpbml0X2tleVtqXSArIGo7IC8qIG5vbiBsaW5lYXIgKi8KKyAgICAgICAgICAgICAgICAgKyBpbml0X2tleVtqXSArICh1bnNpZ25lZCBsb25nKWo7IC8qIG5vbiBsaW5lYXIgKi8KICAgICAgICAgbXRbaV0gJj0gMHhmZmZmZmZmZlVMOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqLwogICAgICAgICBpKys7IGorKzsKICAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH0KQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgIH0KICAgICBmb3IgKGs9Ti0xOyBrOyBrLS0pIHsKICAgICAgICAgbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTU2NjA4Mzk0MVVMKSkKLSAgICAgICAgICAgICAgICAgLSBpOyAvKiBub24gbGluZWFyICovCisgICAgICAgICAgICAgICAgIC0gKHVuc2lnbmVkIGxvbmcpaTsgLyogbm9uIGxpbmVhciAqLwogICAgICAgICBtdFtpXSAmPSAweGZmZmZmZmZmVUw7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovCiAgICAgICAgIGkrKzsKICAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH0KQEAgLTIwNywxNCArMjA3LDExIEBACiByYW5kb21fc2VlZChSYW5kb21PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOyAgICAgICAgICAgIC8qIGd1aWx0eSB1bnRpbCBwcm92ZWQgaW5ub2NlbnQgKi8KLSAgICBQeU9iamVjdCAqbWFza2xvd2VyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdGhpcnR5dHdvID0gTlVMTDsKICAgICBQeU9iamVjdCAqbiA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyAqbmV3X2tleSwgKmtleSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyBrZXltYXg7ICAgICAgICAgICAgICAgLyogIyBvZiBhbGxvY2F0ZWQgc2xvdHMgaW4ga2V5ICovCi0gICAgdW5zaWduZWQgbG9uZyBrZXl1c2VkOyAgICAgICAgICAgICAgLyogIyBvZiB1c2VkIHNsb3RzIGluIGtleSAqLwotICAgIGludCBlcnI7Ci0KKyAgICB1bnNpZ25lZCBsb25nICprZXkgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmtleV9hc19ieXRlcyA9IE5VTEw7CisgICAgc2l6ZV90IGJpdHMsIGtleXVzZWQsIGk7CisgICAgaW50IHJlczsKICAgICBQeU9iamVjdCAqYXJnID0gTlVMTDsKIAogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNlZWQiLCAwLCAxLCAmYXJnKSkKQEAgLTI0Myw2OSArMjQwLDQ2IEBACiAgICAgaWYgKG4gPT0gTlVMTCkKICAgICAgICAgZ290byBEb25lOwogCi0gICAgLyogTm93IHNwbGl0IG4gaW50byAzMi1iaXQgY2h1bmtzLCBmcm9tIHRoZSByaWdodC4gIEVhY2ggcGllY2UgaXMKLSAgICAgKiBzdG9yZWQgaW50byBrZXksIHdoaWNoIGhhcyBhIGNhcGFjaXR5IG9mIGtleW1heCBjaHVua3MsIG9mIHdoaWNoCi0gICAgICoga2V5dXNlZCBhcmUgZmlsbGVkLiAgQWxhcywgdGhlIHJlcGVhdGVkIHNoaWZ0aW5nIG1ha2VzIHRoaXMgYQotICAgICAqIHF1YWRyYXRpYy10aW1lIGFsZ29yaXRobTsgd2UnZCByZWFsbHkgbGlrZSB0byB1c2UKLSAgICAgKiBfUHlMb25nX0FzQnl0ZUFycmF5IGhlcmUsIGJ1dCB0aGVuIHdlJ2QgaGF2ZSB0byBicmVhayBpbnRvIHRoZQotICAgICAqIGxvbmcgcmVwcmVzZW50YXRpb24gdG8gZmlndXJlIG91dCBob3cgYmlnIGFuIGFycmF5IHdhcyBuZWVkZWQKLSAgICAgKiBpbiBhZHZhbmNlLgotICAgICAqLwotICAgIGtleW1heCA9IDg7ICAgICAgICAgLyogYXJiaXRyYXJ5OyBncm93cyBsYXRlciBpZiBuZWVkZWQgKi8KLSAgICBrZXl1c2VkID0gMDsKLSAgICBrZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX01hbGxvYyhrZXltYXggKiBzaXplb2YoKmtleSkpOwotICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAvKiBOb3cgc3BsaXQgbiBpbnRvIDMyLWJpdCBjaHVua3MsIGZyb20gdGhlIHJpZ2h0LiAqLworICAgIGJpdHMgPSBfUHlMb25nX051bUJpdHMobik7CisgICAgaWYgKGJpdHMgPT0gKHNpemVfdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICBnb3RvIERvbmU7CiAKLSAgICBtYXNrbG93ZXIgPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygweGZmZmZmZmZmVSk7Ci0gICAgaWYgKG1hc2tsb3dlciA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgdGhpcnR5dHdvID0gUHlMb25nX0Zyb21Mb25nKDMyTCk7Ci0gICAgaWYgKHRoaXJ0eXR3byA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgd2hpbGUgKChlcnI9UHlPYmplY3RfSXNUcnVlKG4pKSkgewotICAgICAgICBQeU9iamVjdCAqbmV3bjsKLSAgICAgICAgUHlPYmplY3QgKnB5Y2h1bms7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY2h1bms7CisgICAgLyogRmlndXJlIG91dCBob3cgbWFueSAzMi1iaXQgY2h1bmtzIHRoaXMgZ2l2ZXMgdXMuICovCisgICAga2V5dXNlZCA9IGJpdHMgPT0gMCA/IDEgOiAoYml0cyAtIDEpIC8gMzIgKyAxOwogCi0gICAgICAgIGlmIChlcnIgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIHB5Y2h1bmsgPSBQeU51bWJlcl9BbmQobiwgbWFza2xvd2VyKTsKLSAgICAgICAgaWYgKHB5Y2h1bmsgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgY2h1bmsgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcocHljaHVuayk7Ci0gICAgICAgIFB5X0RFQ1JFRihweWNodW5rKTsKLSAgICAgICAgaWYgKGNodW5rID09ICh1bnNpZ25lZCBsb25nKS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIG5ld24gPSBQeU51bWJlcl9Sc2hpZnQobiwgdGhpcnR5dHdvKTsKLSAgICAgICAgaWYgKG5ld24gPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgUHlfREVDUkVGKG4pOwotICAgICAgICBuID0gbmV3bjsKLSAgICAgICAgaWYgKGtleXVzZWQgPj0ga2V5bWF4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJpZ2dlciA9IGtleW1heCA8PCAxOwotICAgICAgICAgICAgaWYgKChiaWdnZXIgPj4gMSkgIT0ga2V5bWF4IHx8Ci0gICAgICAgICAgICAgICAgYmlnZ2VyID4gUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoKmtleSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5ld19rZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX1JlYWxsb2Moa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlnZ2VyICogc2l6ZW9mKCprZXkpKTsKLSAgICAgICAgICAgIGlmIChuZXdfa2V5ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICAgICAga2V5ID0gbmV3X2tleTsKLSAgICAgICAgICAgIGtleW1heCA9IGJpZ2dlcjsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnQoa2V5dXNlZCA8IGtleW1heCk7Ci0gICAgICAgIGtleVtrZXl1c2VkKytdID0gY2h1bms7CisgICAgLyogQ29udmVydCBzZWVkIHRvIGJ5dGUgc2VxdWVuY2UuICovCisgICAga2V5X2FzX2J5dGVzID0gKHVuc2lnbmVkIGNoYXIgKilQeU1lbV9NYWxsb2MoKHNpemVfdCk0ICoga2V5dXNlZCk7CisgICAgaWYgKGtleV9hc19ieXRlcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gRG9uZTsKKyAgICB9CisgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9hc19ieXRlcywga2V5dXNlZCAqIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgLyogbGl0dGxlLWVuZGlhbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7IC8qIHVuc2lnbmVkICovCisgICAgaWYgKHJlcyA9PSAtMSkgeworICAgICAgICBQeU1lbV9GcmVlKGtleV9hc19ieXRlcyk7CisgICAgICAgIGdvdG8gRG9uZTsKICAgICB9CiAKLSAgICBpZiAoa2V5dXNlZCA9PSAwKQotICAgICAgICBrZXlba2V5dXNlZCsrXSA9IDBVTDsKKyAgICAvKiBGaWxsIGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGZyb20gYnl0ZSBzZXF1ZW5jZS4gKi8KKyAgICBrZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX01hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBrZXl1c2VkKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOworICAgICAgICBnb3RvIERvbmU7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBrZXl1c2VkOyBpKyspIHsKKyAgICAgICAga2V5W2ldID0KKyAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgMF0gPDwgMCkgKworICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKWtleV9hc19ieXRlc1s0KmkgKyAxXSA8PCA4KSArCisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDJdIDw8IDE2KSArCisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDNdIDw8IDI0KTsKKyAgICB9CisgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOwogICAgIHJlc3VsdCA9IGluaXRfYnlfYXJyYXkoc2VsZiwga2V5LCBrZXl1c2VkKTsKIERvbmU6Ci0gICAgUHlfWERFQ1JFRihtYXNrbG93ZXIpOwotICAgIFB5X1hERUNSRUYodGhpcnR5dHdvKTsKICAgICBQeV9YREVDUkVGKG4pOwogICAgIFB5TWVtX0ZyZWUoa2V5KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzg5LDYgKzM2Myw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIGlmIChrIDw9IDMyKSAgLyogRmFzdCBwYXRoICovCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhnZW5yYW5kX2ludDMyKHNlbGYpID4+ICgzMiAtIGspKTsKKwogICAgIGJ5dGVzID0gKChrIC0gMSkgLyAzMiArIDEpICogNDsKICAgICBieXRlYXJyYXkgPSAodW5zaWduZWQgY2hhciAqKVB5TWVtX01hbGxvYyhieXRlcyk7CiAgICAgaWYgKGJ5dGVhcnJheSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYyBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCmluZGV4IDM2OTMzNjMuLjM2ODlhNGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgogICovCiAKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYwppbmRleCA4Y2YyZDZhLi44ODI0MjRiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJjdXJzb3IuaCIKICNpbmNsdWRlICJwcmVwYXJlX3Byb3RvY29sLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogCiAjaW5jbHVkZSAicHl0aHJlYWQuaCIKIApAQCAtNDIsNiArNDEsOCBAQAogI2VuZGlmCiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoY3Vyc29yKTsKKwogc3RhdGljIGludCBweXNxbGl0ZV9jb25uZWN0aW9uX3NldF9pc29sYXRpb25fbGV2ZWwocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGlzb2xhdGlvbl9sZXZlbCk7CiBzdGF0aWMgdm9pZCBfcHlzcWxpdGVfZHJvcF91bnVzZWRfY3Vyc29yX3JlZmVyZW5jZXMocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZik7CiAKQEAgLTYwLDcgKzYxLDExIEBACiAKIGludCBweXNxbGl0ZV9jb25uZWN0aW9uX2luaXQocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJkYXRhYmFzZSIsICJ0aW1lb3V0IiwgImRldGVjdF90eXBlcyIsICJpc29sYXRpb25fbGV2ZWwiLCAiY2hlY2tfc2FtZV90aHJlYWQiLCAiZmFjdG9yeSIsICJjYWNoZWRfc3RhdGVtZW50cyIsIE5VTEwsIE5VTEx9OworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsKKyAgICAgICAgImRhdGFiYXNlIiwgInRpbWVvdXQiLCAiZGV0ZWN0X3R5cGVzIiwgImlzb2xhdGlvbl9sZXZlbCIsCisgICAgICAgICJjaGVja19zYW1lX3RocmVhZCIsICJmYWN0b3J5IiwgImNhY2hlZF9zdGF0ZW1lbnRzIiwgInVyaSIsCisgICAgICAgIE5VTEwKKyAgICB9OwogCiAgICAgY2hhciogZGF0YWJhc2U7CiAgICAgaW50IGRldGVjdF90eXBlcyA9IDA7CkBAIC02OCwxMSArNzMsMTQgQEAKICAgICBQeU9iamVjdCogZmFjdG9yeSA9IE5VTEw7CiAgICAgaW50IGNoZWNrX3NhbWVfdGhyZWFkID0gMTsKICAgICBpbnQgY2FjaGVkX3N0YXRlbWVudHMgPSAxMDA7CisgICAgaW50IHVyaSA9IDA7CiAgICAgZG91YmxlIHRpbWVvdXQgPSA1LjA7CiAgICAgaW50IHJjOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAic3xkaU9pT2kiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywgJmlzb2xhdGlvbl9sZXZlbCwgJmNoZWNrX3NhbWVfdGhyZWFkLCAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaXAiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY3RvcnksICZjYWNoZWRfc3RhdGVtZW50cywgJnVyaSkpCiAgICAgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtOTEsOCArOTksMTkgQEAKICAgICBQeV9JTkNSRUYoJlB5VW5pY29kZV9UeXBlKTsKICAgICBzZWxmLT50ZXh0X2ZhY3RvcnkgPSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZTsKIAorI2lmZGVmIFNRTElURV9PUEVOX1VSSQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByYyA9IHNxbGl0ZTNfb3Blbl92MihkYXRhYmFzZSwgJnNlbGYtPmRiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNRTElURV9PUEVOX1JFQURXUklURSB8IFNRTElURV9PUEVOX0NSRUFURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaSA/IFNRTElURV9PUEVOX1VSSSA6IDApLCBOVUxMKTsKKyNlbHNlCisgICAgaWYgKHVyaSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfTm90U3VwcG9ydGVkRXJyb3IsICJVUklzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmMgPSBzcWxpdGUzX29wZW4oZGF0YWJhc2UsICZzZWxmLT5kYik7CisjZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJjICE9IFNRTElURV9PSykgewpAQCAtNTA2LDEwICs1MjUsMTYgQEAKICAgICAgICAgY29uc3QgY2hhciogYnVmZmVyOwogICAgICAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKICAgICAgICAgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihweV92YWwsICZidWZmZXIsICZidWZsZW4pICE9IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY291bGQgbm90IGNvbnZlcnQgQkxPQiB0byBidWZmZXIiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY29udmVydCBCTE9CIHRvIGJ1ZmZlciIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIHNxbGl0ZTNfcmVzdWx0X2Jsb2IoY29udGV4dCwgYnVmZmVyLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOworICAgICAgICBpZiAoYnVmbGVuID4gSU5UX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJMT0IgbG9uZ2VyIHRoYW4gSU5UX01BWCBieXRlcyIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHNxbGl0ZTNfcmVzdWx0X2Jsb2IoY29udGV4dCwgYnVmZmVyLCAoaW50KWJ1ZmxlbiwgU1FMSVRFX1RSQU5TSUVOVCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTY4Miw2ICs3MDcsOCBAQAogICAgIFB5T2JqZWN0KiogYWdncmVnYXRlX2luc3RhbmNlOwogICAgIF9QeV9JREVOVElGSUVSKGZpbmFsaXplKTsKICAgICBpbnQgb2s7CisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CisgICAgaW50IHJlc3RvcmU7CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIFB5R0lMU3RhdGVfU1RBVEUgdGhyZWFkc3RhdGU7CkBAIC02OTcsNyArNzI0LDEyIEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCisgICAgLyogS2VlcCB0aGUgZXhjZXB0aW9uIChpZiBhbnkpIG9mIHRoZSBsYXN0IGNhbGwgdG8gc3RlcCgpICovCisgICAgUHlFcnJfRmV0Y2goJmV4Y2VwdGlvbiwgJnZhbHVlLCAmdGIpOworICAgIHJlc3RvcmUgPSAxOworCiAgICAgZnVuY3Rpb25fcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgqYWdncmVnYXRlX2luc3RhbmNlLCAmUHlJZF9maW5hbGl6ZSwgIiIpOworCiAgICAgUHlfREVDUkVGKCphZ2dyZWdhdGVfaW5zdGFuY2UpOwogCiAgICAgb2sgPSAwOwpAQCAtNzEyLDYgKzc0NCwxNyBAQAogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgfQogICAgICAgICBfc3FsaXRlM19yZXN1bHRfZXJyb3IoY29udGV4dCwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiLCAtMSk7CisjaWYgU1FMSVRFX1ZFUlNJT05fTlVNQkVSIDwgMzAwMzAwMworICAgICAgICAvKiB3aXRoIG9sZCBTUUxpdGUgdmVyc2lvbnMsIF9zcWxpdGUzX3Jlc3VsdF9lcnJvcigpIHNldHMgYSBuZXcgUHl0aG9uCisgICAgICAgICAgIGV4Y2VwdGlvbiwgc28gZG9uJ3QgcmVzdG9yZSB0aGUgcHJldmlvdXMgZXhjZXB0aW9uICovCisgICAgICAgIHJlc3RvcmUgPSAwOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKHJlc3RvcmUpIHsKKyAgICAgICAgLyogUmVzdG9yZSB0aGUgZXhjZXB0aW9uIChpZiBhbnkpIG9mIHRoZSBsYXN0IGNhbGwgdG8gc3RlcCgpLAorICAgICAgICAgICBidXQgY2xlYXIgYWxzbyB0aGUgY3VycmVudCBleGNlcHRpb24gaWYgZmluYWxpemUoKSBmYWlsZWQgKi8KKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGNlcHRpb24sIHZhbHVlLCB0Yik7CiAgICAgfQogCiBlcnJvcjoKQEAgLTg2MiwyMiArOTA1LDI5IEBACiAKICAgICBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAjZW5kaWYKKwogICAgIHJldCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QqKXVzZXJfYXJnLCAiaXNzc3MiLCBhY3Rpb24sIGFyZzEsIGFyZzIsIGRibmFtZSwgYWNjZXNzX2F0dGVtcHRfc291cmNlKTsKIAotICAgIGlmICghcmV0KSB7Ci0gICAgICAgIGlmIChfZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3MpIHsKKyAgICBpZiAocmV0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrcykKICAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KIAogICAgICAgICByYyA9IFNRTElURV9ERU5ZOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHJldCkpIHsKICAgICAgICAgICAgIHJjID0gX1B5TG9uZ19Bc0ludChyZXQpOwotICAgICAgICAgICAgaWYgKHJjID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBpZiAocmMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIGlmIChfZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3MpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIHJjID0gU1FMSVRFX0RFTlk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByYyA9IFNRTElURV9ERU5ZOwogICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihyZXQpOwpAQCAtMTE5MCw5ICsxMjQwLDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJnNxbCkpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmc3FsKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX3N0YXRlbWVudF9yZWZlcmVuY2VzKHNlbGYpOwogCkBAIC0xMjA4LDcgKzEyNTcsNiBAQAogICAgIHN0YXRlbWVudC0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogCiAgICAgcmMgPSBweXNxbGl0ZV9zdGF0ZW1lbnRfY3JlYXRlKHN0YXRlbWVudCwgc2VsZiwgc3FsKTsKLQogICAgIGlmIChyYyAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgaWYgKHJjID09IFBZU1FMSVRFX1RPT19NVUNIX1NRTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1dhcm5pbmcsICJZb3UgY2FuIG9ubHkgZXhlY3V0ZSBvbmUgc3RhdGVtZW50IGF0IGEgdGltZS4iKTsKQEAgLTEyMTgsMjUgKzEyNjYsMjMgQEAKICAgICAgICAgICAgICh2b2lkKXB5c3FsaXRlX3N0YXRlbWVudF9yZXNldChzdGF0ZW1lbnQpOwogICAgICAgICAgICAgX3B5c3FsaXRlX3NldGVycm9yKHNlbGYtPmRiLCBOVUxMKTsKICAgICAgICAgfQotCi0gICAgICAgIFB5X0NMRUFSKHN0YXRlbWVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2Vha3JlZiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0KilzdGF0ZW1lbnQsIE5VTEwpOwotICAgICAgICBpZiAoIXdlYWtyZWYpIHsKLSAgICAgICAgICAgIFB5X0NMRUFSKHN0YXRlbWVudCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VsZi0+c3RhdGVtZW50cywgd2Vha3JlZikgIT0gMCkgewotICAgICAgICAgICAgUHlfQ0xFQVIod2Vha3JlZik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0KLSAgICAgICAgUHlfREVDUkVGKHdlYWtyZWYpOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotZXJyb3I6CisgICAgd2Vha3JlZiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0KilzdGF0ZW1lbnQsIE5VTEwpOworICAgIGlmICh3ZWFrcmVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VsZi0+c3RhdGVtZW50cywgd2Vha3JlZikgIT0gMCkgeworICAgICAgICBQeV9ERUNSRUYod2Vha3JlZik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0RFQ1JFRih3ZWFrcmVmKTsKKwogICAgIHJldHVybiAoUHlPYmplY3QqKXN0YXRlbWVudDsKKworZXJyb3I6CisgICAgUHlfREVDUkVGKHN0YXRlbWVudCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIFB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX2V4ZWN1dGUocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCkBAIC0xMjQ0LDcgKzEyOTAsNiBAQAogICAgIFB5T2JqZWN0KiBjdXJzb3IgPSAwOwogICAgIFB5T2JqZWN0KiByZXN1bHQgPSAwOwogICAgIFB5T2JqZWN0KiBtZXRob2QgPSAwOwotICAgIF9QeV9JREVOVElGSUVSKGN1cnNvcik7CiAKICAgICBjdXJzb3IgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCopc2VsZiwgJlB5SWRfY3Vyc29yLCAiIik7CiAgICAgaWYgKCFjdXJzb3IpIHsKQEAgLTEyNzQsNyArMTMxOSw2IEBACiAgICAgUHlPYmplY3QqIGN1cnNvciA9IDA7CiAgICAgUHlPYmplY3QqIHJlc3VsdCA9IDA7CiAgICAgUHlPYmplY3QqIG1ldGhvZCA9IDA7Ci0gICAgX1B5X0lERU5USUZJRVIoY3Vyc29yKTsKIAogICAgIGN1cnNvciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0KilzZWxmLCAmUHlJZF9jdXJzb3IsICIiKTsKICAgICBpZiAoIWN1cnNvcikgewpAQCAtMTMwNCw3ICsxMzQ4LDYgQEAKICAgICBQeU9iamVjdCogY3Vyc29yID0gMDsKICAgICBQeU9iamVjdCogcmVzdWx0ID0gMDsKICAgICBQeU9iamVjdCogbWV0aG9kID0gMDsKLSAgICBfUHlfSURFTlRJRklFUihjdXJzb3IpOwogCiAgICAgY3Vyc29yID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKXNlbGYsICZQeUlkX2N1cnNvciwgIiIpOwogICAgIGlmICghY3Vyc29yKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKaW5kZXggMDljMTNkNC4uY2U5MmFmNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgImN1cnNvci5oIgogI2luY2x1ZGUgIm1vZHVsZS5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKIAogUHlPYmplY3QqIHB5c3FsaXRlX2N1cnNvcl9pdGVybmV4dChweXNxbGl0ZV9DdXJzb3IqIHNlbGYpOwogCkBAIC0zMzgsNiArMzM3LDExIEBACiAgICAgICAgICAgICAgICAgaWYgKHNlbGYtPmNvbm5lY3Rpb24tPnRleHRfZmFjdG9yeSA9PSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkgewogICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUodmFsX3N0ciwgbmJ5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZWQpIHsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gZGVidWcgbW9kZSwgdHlwZV9jYWxsKCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWUgPSBzcWxpdGUzX2NvbHVtbl9uYW1lKHNlbGYtPnN0YXRlbWVudC0+c3QsIGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZSA9ICI8dW5rbm93biBjb2x1bW4gbmFtZT4iOwpAQCAtODY0LDEwICs4NjgsMTUgQEAKICAgICB9CiAKICAgICBuZXh0X3Jvd190dXBsZSA9IHNlbGYtPm5leHRfcm93OworICAgIGFzc2VydChuZXh0X3Jvd190dXBsZSAhPSBOVUxMKTsKICAgICBzZWxmLT5uZXh0X3JvdyA9IE5VTEw7CiAKICAgICBpZiAoc2VsZi0+cm93X2ZhY3RvcnkgIT0gUHlfTm9uZSkgewogICAgICAgICBuZXh0X3JvdyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5yb3dfZmFjdG9yeSwgIk9PIiwgc2VsZiwgbmV4dF9yb3dfdHVwbGUpOworICAgICAgICBpZiAobmV4dF9yb3cgPT0gTlVMTCkgeworICAgICAgICAgICAgc2VsZi0+bmV4dF9yb3cgPSBuZXh0X3Jvd190dXBsZTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihuZXh0X3Jvd190dXBsZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbmV4dF9yb3cgPSBuZXh0X3Jvd190dXBsZTsKQEAgLTg4NCw2ICs4OTMsMTIgQEAKIAogICAgICAgICBpZiAocmMgPT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgc2VsZi0+bmV4dF9yb3cgPSBfcHlzcWxpdGVfZmV0Y2hfb25lX3JvdyhzZWxmKTsKKyAgICAgICAgICAgIGlmIChzZWxmLT5uZXh0X3JvdyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgKHZvaWQpcHlzcWxpdGVfc3RhdGVtZW50X3Jlc2V0KHNlbGYtPnN0YXRlbWVudCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5leHRfcm93KTsKKyAgICAgICAgICAgICAgICBfcHlzcWxpdGVfc2V0ZXJyb3Ioc2VsZi0+Y29ubmVjdGlvbi0+ZGIsIE5VTEwpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMgYi9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKaW5kZXggYmVhNmQ2YS4uN2E3ZTg2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYwpAQCAtNTAsMTkgKzUwLDI2IEBACiAgICAgICogQy1sZXZlbCwgc28gdGhpcyBjb2RlIGlzIHJlZHVuZGFudCB3aXRoIHRoZSBvbmUgaW4gY29ubmVjdGlvbl9pbml0IGluCiAgICAgICogY29ubmVjdGlvbi5jIGFuZCBtdXN0IGFsd2F5cyBiZSBjb3BpZWQgZnJvbSB0aGVyZSAuLi4gKi8KIAotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZGF0YWJhc2UiLCAidGltZW91dCIsICJkZXRlY3RfdHlwZXMiLCAiaXNvbGF0aW9uX2xldmVsIiwgImNoZWNrX3NhbWVfdGhyZWFkIiwgImZhY3RvcnkiLCAiY2FjaGVkX3N0YXRlbWVudHMiLCBOVUxMLCBOVUxMfTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7CisgICAgICAgICJkYXRhYmFzZSIsICJ0aW1lb3V0IiwgImRldGVjdF90eXBlcyIsICJpc29sYXRpb25fbGV2ZWwiLAorICAgICAgICAiY2hlY2tfc2FtZV90aHJlYWQiLCAiZmFjdG9yeSIsICJjYWNoZWRfc3RhdGVtZW50cyIsICJ1cmkiLAorICAgICAgICBOVUxMCisgICAgfTsKICAgICBjaGFyKiBkYXRhYmFzZTsKICAgICBpbnQgZGV0ZWN0X3R5cGVzID0gMDsKICAgICBQeU9iamVjdCogaXNvbGF0aW9uX2xldmVsOwogICAgIFB5T2JqZWN0KiBmYWN0b3J5ID0gTlVMTDsKICAgICBpbnQgY2hlY2tfc2FtZV90aHJlYWQgPSAxOwogICAgIGludCBjYWNoZWRfc3RhdGVtZW50czsKKyAgICBpbnQgdXJpID0gMDsKICAgICBkb3VibGUgdGltZW91dCA9IDUuMDsKIAogICAgIFB5T2JqZWN0KiByZXN1bHQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaSIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLCAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsICZmYWN0b3J5LCAmY2FjaGVkX3N0YXRlbWVudHMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInN8ZGlPaU9pcCIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc29sYXRpb25fbGV2ZWwsICZjaGVja19zYW1lX3RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzLCAmdXJpKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTc3LDcgKzg0LDggQEAKIH0KIAogUHlEb2NfU1RSVkFSKG1vZHVsZV9jb25uZWN0X2RvYywKLSJjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgaXNvbGF0aW9uX2xldmVsLCBkZXRlY3RfdHlwZXMsIGZhY3RvcnldKVxuXAorImNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCxcblwKKyAgICAgICAgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzLCB1cmldKVxuXAogXG5cCiBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlICpkYXRhYmFzZSouIFlvdSBjYW4gdXNlXG5cCiBcIjptZW1vcnk6XCIgdG8gb3BlbiBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSB0aGF0IHJlc2lkZXMgaW5cblwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMgYi9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jCmluZGV4IGZjNjg4NzQuLmYyYzg1ZjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYwpAQCAtMjEsNyArMjEsNiBAQAogICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KICAqLwogCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAjaW5jbHVkZSAicHJlcGFyZV9wcm90b2NvbC5oIgogCiBpbnQgcHlzcWxpdGVfcHJlcGFyZV9wcm90b2NvbF9pbml0KHB5c3FsaXRlX1ByZXBhcmVQcm90b2NvbCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcm93LmMgYi9Nb2R1bGVzL19zcWxpdGUvcm93LmMKaW5kZXggYjUwNjU4Yy4uNGE4N2EwNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9yb3cuYwpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAicm93LmgiCiAjaW5jbHVkZSAiY3Vyc29yLmgiCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAKIHZvaWQgcHlzcWxpdGVfcm93X2RlYWxsb2MocHlzcWxpdGVfUm93KiBzZWxmKQogewpAQCAtNjgsNyArNjcsNyBAQAogewogICAgIGxvbmcgX2lkeDsKICAgICBjaGFyKiBrZXk7Ci0gICAgaW50IG5pdGVtcywgaTsKKyAgICBQeV9zc2l6ZV90IG5pdGVtcywgaTsKICAgICBjaGFyKiBjb21wYXJlX2tleTsKIAogICAgIGNoYXIqIHAxOwpAQCAtODksNyArODgsMTAgQEAKICAgICAgICAgbml0ZW1zID0gUHlUdXBsZV9TaXplKHNlbGYtPmRlc2NyaXB0aW9uKTsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpKyspIHsKLSAgICAgICAgICAgIGNvbXBhcmVfa2V5ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhQeVR1cGxlX0dFVF9JVEVNKFB5VHVwbGVfR0VUX0lURU0oc2VsZi0+ZGVzY3JpcHRpb24sIGkpLCAwKSk7CisgICAgICAgICAgICBQeU9iamVjdCAqb2JqOworICAgICAgICAgICAgb2JqID0gUHlUdXBsZV9HRVRfSVRFTShzZWxmLT5kZXNjcmlwdGlvbiwgaSk7CisgICAgICAgICAgICBvYmogPSBQeVR1cGxlX0dFVF9JVEVNKG9iaiwgMCk7CisgICAgICAgICAgICBjb21wYXJlX2tleSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcob2JqKTsKICAgICAgICAgICAgIGlmICghY29tcGFyZV9rZXkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KQEAgLTEyMSwxMCArMTIzLDEyIEBACiAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJObyBpdGVtIHdpdGggdGhhdCBrZXkiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGlkeCkpIHsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpZHgpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAic2xpY2VzIG5vdCBpbXBsZW1lbnRlZCwgeWV0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgIkluZGV4IG11c3QgYmUgaW50IG9yIHN0cmluZyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmggYi9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjBmMTYuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyogc3FsaXRlY29tcGF0LmggLSBjb21wYXRpYmlsaXR5IG1hY3JvcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIEdlcmhhcmQgSMOkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+Ci0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKLSAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKLSAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCi0gKgotICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCi0gKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0Ci0gKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6Ci0gKgotICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKLSAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCi0gKiAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKLSAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCi0gKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQotICogICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgotICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KLSAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLSNpZm5kZWYgUFlTUUxJVEVfQ09NUEFUX0gKLSNkZWZpbmUgUFlTUUxJVEVfQ09NUEFUX0gKLQotLyogZGVmaW5lIFB5X3NzaXplX3QgZm9yIHByZS0yLjUgdmVyc2lvbnMgb2YgUHl0aG9uICovCi0KLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDAKLXR5cGVkZWYgaW50IFB5X3NzaXplX3Q7Ci10eXBlZGVmIGludCAoKmxlbmZ1bmMpKFB5T2JqZWN0Kik7Ci0jZW5kaWYKLQotCi0vKiBkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3QgZm9yIHByZS0yLjQgdmVyc2lvbnMgb2YgUHl0aG9uICovCi0jaWZuZGVmIFB5RGljdF9DaGVja0V4YWN0Ci0jZGVmaW5lIFB5RGljdF9DaGVja0V4YWN0KG9wKSAoKG9wKS0+b2JfdHlwZSA9PSAmUHlEaWN0X1R5cGUpCi0jZW5kaWYKLQotLyogZGVmaW5lIFB5X0NMRUFSIGZvciBwcmUtMi40IHZlcnNpb25zIG9mIFB5dGhvbiAqLwotI2lmbmRlZiBQeV9DTEVBUgotI2RlZmluZSBQeV9DTEVBUihvcCkJCQkJXAotICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCi0gICAgICAgICAgICAgICAgaWYgKG9wKSB7CQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRtcCA9IChQeU9iamVjdCAqKShvcCk7CVwKLSAgICAgICAgICAgICAgICAgICAgICAgIChvcCkgPSBOVUxMOwkJXAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CQlcCi0gICAgICAgICAgICAgICAgfQkJCQlcCi0gICAgICAgIH0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2lmbmRlZiBQeVZhck9iamVjdF9IRUFEX0lOSVQKLSNkZWZpbmUgUHlWYXJPYmplY3RfSEVBRF9JTklUKHR5cGUsIHNpemUpIFwKLSAgICBQeU9iamVjdF9IRUFEX0lOSVQodHlwZSkgc2l6ZSwKLSNlbmRpZgotCi0jaWZuZGVmIFB5X1RZUEUKLSNkZWZpbmUgUHlfVFlQRShvYikgKChvYiktPm9iX3R5cGUpCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMgYi9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMKaW5kZXggNDcxYTA2Ny4uNjZiNGE1MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIm1pY3JvcHJvdG9jb2xzLmgiCiAjaW5jbHVkZSAicHJlcGFyZV9wcm90b2NvbC5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKIAogLyogcHJvdG90eXBlcyAqLwogc3RhdGljIGludCBweXNxbGl0ZV9jaGVja19yZW1haW5pbmdfc3FsKGNvbnN0IGNoYXIqIHRhaWwpOwpAQCAtMTMzLDE4ICsxMzIsMjYgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRZUEVfVU5JQ09ERToKICAgICAgICAgICAgIHN0cmluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmdBbmRTaXplKHBhcmFtZXRlciwgJmJ1Zmxlbik7Ci0gICAgICAgICAgICBpZiAoc3RyaW5nICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcmMgPSBzcWxpdGUzX2JpbmRfdGV4dChzZWxmLT5zdCwgcG9zLCBzdHJpbmcsIGJ1ZmxlbiwgU1FMSVRFX1RSQU5TSUVOVCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIGlmIChzdHJpbmcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoYnVmbGVuID4gSU5UX01BWCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIGxvbmdlciB0aGFuIElOVF9NQVggYnl0ZXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IHNxbGl0ZTNfYmluZF90ZXh0KHNlbGYtPnN0LCBwb3MsIHN0cmluZywgKGludClidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVFlQRV9CVUZGRVI6Ci0gICAgICAgICAgICBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHBhcmFtZXRlciwgJmJ1ZmZlciwgJmJ1ZmxlbikgPT0gMCkgewotICAgICAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX2Jsb2Ioc2VsZi0+c3QsIHBvcywgYnVmZmVyLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIocGFyYW1ldGVyLCAmYnVmZmVyLCAmYnVmbGVuKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJjb3VsZCBub3QgY29udmVydCBCTE9CIHRvIGJ1ZmZlciIpOwotICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJ1ZmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJMT0IgbG9uZ2VyIHRoYW4gSU5UX01BWCBieXRlcyIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX2Jsb2Ioc2VsZi0+c3QsIHBvcywgYnVmZmVyLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVFlQRV9VTktOT1dOOgogICAgICAgICAgICAgcmMgPSAtMTsKQEAgLTE3Nyw3ICsxODQsNyBAQAogICAgIGludCBpOwogICAgIGludCByYzsKICAgICBpbnQgbnVtX3BhcmFtc19uZWVkZWQ7Ci0gICAgaW50IG51bV9wYXJhbXM7CisgICAgUHlfc3NpemVfdCBudW1fcGFyYW1zOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIG51bV9wYXJhbXNfbmVlZGVkID0gc3FsaXRlM19iaW5kX3BhcmFtZXRlcl9jb3VudChzZWxmLT5zdCk7CkBAIC0xOTMsNyArMjAwLDkgQEAKICAgICAgICAgICAgIG51bV9wYXJhbXMgPSBQeVNlcXVlbmNlX1NpemUocGFyYW1ldGVycyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG51bV9wYXJhbXMgIT0gbnVtX3BhcmFtc19uZWVkZWQpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAiSW5jb3JyZWN0IG51bWJlciBvZiBiaW5kaW5ncyBzdXBwbGllZC4gVGhlIGN1cnJlbnQgc3RhdGVtZW50IHVzZXMgJWQsIGFuZCB0aGVyZSBhcmUgJWQgc3VwcGxpZWQuIiwKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGJpbmRpbmdzIHN1cHBsaWVkLiBUaGUgY3VycmVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXRlbWVudCB1c2VzICVkLCBhbmQgdGhlcmUgYXJlICV6ZCBzdXBwbGllZC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9wYXJhbXNfbmVlZGVkLCBudW1fcGFyYW1zKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjQ5LDcgKzI1OCw3IEBACiAgICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKHBhcmFtZXRlcnMsIGJpbmRpbmdfbmFtZSk7CiAgICAgICAgICAgICAgICAgUHlfWElOQ1JFRihjdXJyZW50X3BhcmFtKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbSA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKHBhcmFtZXRlcnMsIChjaGFyKiliaW5kaW5nX25hbWUpOworICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFyYW0gPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhwYXJhbWV0ZXJzLCBiaW5kaW5nX25hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFjdXJyZW50X3BhcmFtKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsICJZb3UgZGlkIG5vdCBzdXBwbHkgYSB2YWx1ZSBmb3IgYmluZGluZyAlZC4iLCBpKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMgYi9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jCmluZGV4IGQ4OGJjM2YuLjMxMmZlM2IgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgfQogIyBlbmRpZgogI2VuZGlmCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWx1ZSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhQeV9TQUZFX0RPV05DQVNUKHZhbHVlLCBzcWxpdGVfaW50NjQsIGxvbmcpKTsKIH0KIAogc3FsaXRlX2ludDY0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcmUuYyBiL01vZHVsZXMvX3NyZS5jCmluZGV4IDFjNzZkMjQuLmQ0ZDFkOWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NyZS5jCisrKyBiL01vZHVsZXMvX3NyZS5jCkBAIC00LDI0ICs0LDI1IEBACiAgKiByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgZW5naW5lCiAgKgogICogcGFydGlhbCBoaXN0b3J5OgotICogMTk5OS0xMC0yNCBmbCAgY3JlYXRlZCAoYmFzZWQgb24gZXhpc3RpbmcgdGVtcGxhdGUgbWF0Y2hlciBjb2RlKQotICogMjAwMC0wMy0wNiBmbCAgZmlyc3QgYWxwaGEsIHNvcnQgb2YKLSAqIDIwMDAtMDgtMDEgZmwgIGZpeGVzIGZvciAxLjZiMQotICogMjAwMC0wOC0wNyBmbCAgdXNlIFB5T1NfQ2hlY2tTdGFjaygpIGlmIGF2YWlsYWJsZQotICogMjAwMC0wOS0yMCBmbCAgYWRkZWQgZXhwYW5kIG1ldGhvZAotICogMjAwMS0wMy0yMCBmbCAgbG90cyBvZiBmaXhlcyBmb3IgMi4xYjIKLSAqIDIwMDEtMDQtMTUgZmwgIGV4cG9ydCBjb3B5cmlnaHQgYXMgUHl0aG9uIGF0dHJpYnV0ZSwgbm90IGdsb2JhbAotICogMjAwMS0wNC0yOCBmbCAgYWRkZWQgX19jb3B5X18gbWV0aG9kcyAod29yayBpbiBwcm9ncmVzcykKLSAqIDIwMDEtMDUtMTQgZmwgIGZpeGVzIGZvciAxLjUuMiBjb21wYXRpYmlsaXR5Ci0gKiAyMDAxLTA3LTAxIGZsICBhZGRlZCBCSUdDSEFSU0VUIHN1cHBvcnQgKGZyb20gTWFydGluIHZvbiBMb2V3aXMpCi0gKiAyMDAxLTEwLTE4IGZsICBmaXhlZCBncm91cCByZXNldCBpc3N1ZSAoZnJvbSBNYXR0aGV3IE11ZWxsZXIpCi0gKiAyMDAxLTEwLTIwIGZsICBhZGRlZCBzcGxpdCBwcmltaXRpdmU7IHJlZW5hYmxlIHVuaWNvZGUgZm9yIDEuNi8yLjAvMi4xCi0gKiAyMDAxLTEwLTIxIGZsICBhZGRlZCBzdWIvc3VibiBwcmltaXRpdmUKLSAqIDIwMDEtMTAtMjQgZmwgIGFkZGVkIGZpbmRpdGVyIHByaW1pdGl2ZSAoZm9yIDIuMiBvbmx5KQotICogMjAwMS0xMi0wNyBmbCAgZml4ZWQgbWVtb3J5IGxlYWsgaW4gc3ViL3N1Ym4gKEd1aWRvIHZhbiBSb3NzdW0pCi0gKiAyMDAyLTExLTA5IGZsICBmaXhlZCBlbXB0eSBzdWIvc3VibiByZXR1cm4gdHlwZQotICogMjAwMy0wNC0xOCBtdmwgZnVsbHkgc3VwcG9ydCA0LWJ5dGUgY29kZXMKLSAqIDIwMDMtMTAtMTcgZ24gIGltcGxlbWVudGVkIG5vbiByZWN1cnNpdmUgc2NoZW1lCisgKiAxOTk5LTEwLTI0IGZsICAgY3JlYXRlZCAoYmFzZWQgb24gZXhpc3RpbmcgdGVtcGxhdGUgbWF0Y2hlciBjb2RlKQorICogMjAwMC0wMy0wNiBmbCAgIGZpcnN0IGFscGhhLCBzb3J0IG9mCisgKiAyMDAwLTA4LTAxIGZsICAgZml4ZXMgZm9yIDEuNmIxCisgKiAyMDAwLTA4LTA3IGZsICAgdXNlIFB5T1NfQ2hlY2tTdGFjaygpIGlmIGF2YWlsYWJsZQorICogMjAwMC0wOS0yMCBmbCAgIGFkZGVkIGV4cGFuZCBtZXRob2QKKyAqIDIwMDEtMDMtMjAgZmwgICBsb3RzIG9mIGZpeGVzIGZvciAyLjFiMgorICogMjAwMS0wNC0xNSBmbCAgIGV4cG9ydCBjb3B5cmlnaHQgYXMgUHl0aG9uIGF0dHJpYnV0ZSwgbm90IGdsb2JhbAorICogMjAwMS0wNC0yOCBmbCAgIGFkZGVkIF9fY29weV9fIG1ldGhvZHMgKHdvcmsgaW4gcHJvZ3Jlc3MpCisgKiAyMDAxLTA1LTE0IGZsICAgZml4ZXMgZm9yIDEuNS4yIGNvbXBhdGliaWxpdHkKKyAqIDIwMDEtMDctMDEgZmwgICBhZGRlZCBCSUdDSEFSU0VUIHN1cHBvcnQgKGZyb20gTWFydGluIHZvbiBMb2V3aXMpCisgKiAyMDAxLTEwLTE4IGZsICAgZml4ZWQgZ3JvdXAgcmVzZXQgaXNzdWUgKGZyb20gTWF0dGhldyBNdWVsbGVyKQorICogMjAwMS0xMC0yMCBmbCAgIGFkZGVkIHNwbGl0IHByaW1pdGl2ZTsgcmVlbmFibGUgdW5pY29kZSBmb3IgMS42LzIuMC8yLjEKKyAqIDIwMDEtMTAtMjEgZmwgICBhZGRlZCBzdWIvc3VibiBwcmltaXRpdmUKKyAqIDIwMDEtMTAtMjQgZmwgICBhZGRlZCBmaW5kaXRlciBwcmltaXRpdmUgKGZvciAyLjIgb25seSkKKyAqIDIwMDEtMTItMDcgZmwgICBmaXhlZCBtZW1vcnkgbGVhayBpbiBzdWIvc3VibiAoR3VpZG8gdmFuIFJvc3N1bSkKKyAqIDIwMDItMTEtMDkgZmwgICBmaXhlZCBlbXB0eSBzdWIvc3VibiByZXR1cm4gdHlwZQorICogMjAwMy0wNC0xOCBtdmwgIGZ1bGx5IHN1cHBvcnQgNC1ieXRlIGNvZGVzCisgKiAyMDAzLTEwLTE3IGduICAgaW1wbGVtZW50ZWQgbm9uIHJlY3Vyc2l2ZSBzY2hlbWUKKyAqIDIwMTMtMDItMDQgbXJhYiBhZGRlZCBmdWxsbWF0Y2ggcHJpbWl0aXZlCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDEgYnkgU2VjcmV0IExhYnMgQUIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTM0LDggKzM1LDYgQEAKICAqIG90aGVyIGNvbXBhdGliaWxpdHkgd29yay4KICAqLwogCi0jaWZuZGVmIFNSRV9SRUNVUlNJVkUKLQogc3RhdGljIGNoYXIgY29weXJpZ2h0W10gPQogICAgICIgU1JFIDIuMi4yIENvcHlyaWdodCAoYykgMTk5Ny0yMDAyIGJ5IFNlY3JldCBMYWJzIEFCICI7CiAKQEAgLTQ2LDYgKzQ1LDggQEAKIAogI2luY2x1ZGUgInNyZS5oIgogCisjZGVmaW5lIFNSRV9DT0RFX0JJVFMgKDggKiBzaXplb2YoU1JFX0NPREUpKQorCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAogLyogbmFtZSBvZiB0aGlzIG1vZHVsZSwgbWludXMgdGhlIGxlYWRpbmcgdW5kZXJzY29yZSAqLwpAQCAtNTgsOSArNTksNiBAQAogLyogZGVmaW5pbmcgdGhpcyBvbmUgZW5hYmxlcyB0cmFjaW5nICovCiAjdW5kZWYgVkVSQk9TRQogCi0vKiBkZWZpbmluZyB0aGlzIGVuYWJsZXMgdW5pY29kZSBzdXBwb3J0IChkZWZhdWx0IHVuZGVyIDEuNmExIGFuZCBsYXRlcikgKi8KLSNkZWZpbmUgSEFWRV9VTklDT0RFCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBvcHRpb25hbCBmZWF0dXJlcyAqLwogCkBAIC03MCwxMCArNjgsNiBAQAogLyogZW5hYmxlcyBjb3B5L2RlZXBjb3B5IGhhbmRsaW5nICh3b3JrIGluIHByb2dyZXNzKSAqLwogI3VuZGVmIFVTRV9CVUlMVElOX0NPUFkKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMTA2MDAwMAotI2RlZmluZSBQeU9iamVjdF9ERUwob3ApIFB5TWVtX0RFTCgob3ApKQotI2VuZGlmCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtMTUwLDkgKzE0NCw2IEBACiAvKiBsb2NhbGUtc3BlY2lmaWMgY2hhcmFjdGVyIHByZWRpY2F0ZXMgKi8KIC8qICEoYyAmIH5OKSA9PSAoYyA8IE4rMSkgZm9yIGFueSB1bnNpZ25lZCBjLCB0aGlzIGF2b2lkcwogICogd2FybmluZ3Mgd2hlbiBjJ3MgdHlwZSBzdXBwb3J0cyBvbmx5IG51bWJlcnMgPCBOKzEgKi8KLSNkZWZpbmUgU1JFX0xPQ19JU19ESUdJVChjaCkgKCEoKGNoKSAmIH4yNTUpID8gaXNkaWdpdCgoY2gpKSA6IDApCi0jZGVmaW5lIFNSRV9MT0NfSVNfU1BBQ0UoY2gpICghKChjaCkgJiB+MjU1KSA/IGlzc3BhY2UoKGNoKSkgOiAwKQotI2RlZmluZSBTUkVfTE9DX0lTX0xJTkVCUkVBSyhjaCkgKChjaCkgPT0gJ1xuJykKICNkZWZpbmUgU1JFX0xPQ19JU19BTE5VTShjaCkgKCEoKGNoKSAmIH4yNTUpID8gaXNhbG51bSgoY2gpKSA6IDApCiAjZGVmaW5lIFNSRV9MT0NfSVNfV09SRChjaCkgKFNSRV9MT0NfSVNfQUxOVU0oKGNoKSkgfHwgKGNoKSA9PSAnXycpCiAKQEAgLTI1NiwxMzgwICsyNDcsMzIgQEAKIAogLyogZ2VuZXJhdGUgOC1iaXQgdmVyc2lvbiAqLwogCi0jZGVmaW5lIFNSRV9DSEFSIHVuc2lnbmVkIGNoYXIKLSNkZWZpbmUgU1JFX0NIQVJHRVQoc3RhdGUsIGJ1ZiwgaW5kZXgpICgodW5zaWduZWQgY2hhciopYnVmKVtpbmRleF0KLSNkZWZpbmUgU1JFX0FUIHNyZV9hdAotI2RlZmluZSBTUkVfQ09VTlQgc3JlX2NvdW50Ci0jZGVmaW5lIFNSRV9DSEFSU0VUIHNyZV9jaGFyc2V0Ci0jZGVmaW5lIFNSRV9JTkZPIHNyZV9pbmZvCi0jZGVmaW5lIFNSRV9NQVRDSCBzcmVfbWF0Y2gKLSNkZWZpbmUgU1JFX01BVENIX0NPTlRFWFQgc3JlX21hdGNoX2NvbnRleHQKLSNkZWZpbmUgU1JFX1NFQVJDSCBzcmVfc2VhcmNoCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzEKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDEKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3MxXyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAotI2RlZmluZSBTUkVfUkVDVVJTSVZFCi0jaW5jbHVkZSAiX3NyZS5jIgotI3VuZGVmIFNSRV9SRUNVUlNJVkUKKy8qIGdlbmVyYXRlIDE2LWJpdCB1bmljb2RlIHZlcnNpb24gKi8KIAotI3VuZGVmIFNSRV9TRUFSQ0gKLSN1bmRlZiBTUkVfTUFUQ0gKLSN1bmRlZiBTUkVfTUFUQ0hfQ09OVEVYVAotI3VuZGVmIFNSRV9JTkZPCi0jdW5kZWYgU1JFX0NIQVJTRVQKLSN1bmRlZiBTUkVfQ09VTlQKLSN1bmRlZiBTUkVfQVQKLSN1bmRlZiBTUkVfQ0hBUgotI3VuZGVmIFNSRV9DSEFSR0VUCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzIKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDIKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3MyXyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAotLyogZ2VuZXJhdGUgOC8xNi8zMi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCisvKiBnZW5lcmF0ZSAzMi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCiAKLSNkZWZpbmUgU1JFX0NIQVIgdm9pZAotI2RlZmluZSBTUkVfQ0hBUkdFVChzdGF0ZSwgYnVmLCBpbmRleCkgXAotICAgICgoc3RhdGUtPmNoYXJzaXplPT0xKSA/ICgoUHlfVUNTMSopYnVmKVtpbmRleF0gOiBcCi0gICAgIChzdGF0ZS0+Y2hhcnNpemU9PTIpID8gKChQeV9VQ1MyKilidWYpW2luZGV4XSA6IFwKLSAgICAgKChQeV9VQ1M0KilidWYpW2luZGV4XSkKLSNkZWZpbmUgU1JFX0FUIHNyZV91YXQKLSNkZWZpbmUgU1JFX0NPVU5UIHNyZV91Y291bnQKLSNkZWZpbmUgU1JFX0NIQVJTRVQgc3JlX3VjaGFyc2V0Ci0jZGVmaW5lIFNSRV9JTkZPIHNyZV91aW5mbwotI2RlZmluZSBTUkVfTUFUQ0ggc3JlX3VtYXRjaAotI2RlZmluZSBTUkVfTUFUQ0hfQ09OVEVYVCBzcmVfdW1hdGNoX2NvbnRleHQKLSNkZWZpbmUgU1JFX1NFQVJDSCBzcmVfdXNlYXJjaAotCi0jZW5kaWYgLyogU1JFX1JFQ1VSU0lWRSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogU3RyaW5nIG1hdGNoaW5nIGVuZ2luZSAqLwotCi0vKiB0aGUgZm9sbG93aW5nIHNlY3Rpb24gaXMgY29tcGlsZWQgdHdpY2UsIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlcgotICAgc2V0dGluZ3MgKi8KLQotTE9DQUwoaW50KQotU1JFX0FUKFNSRV9TVEFURSogc3RhdGUsIGNoYXIqIHB0ciwgU1JFX0NPREUgYXQpCi17Ci0gICAgLyogY2hlY2sgaWYgcG9pbnRlciBpcyBhdCBnaXZlbiBwb3NpdGlvbiAqLwotCi0gICAgUHlfc3NpemVfdCB0aGlzcCwgdGhhdHA7Ci0KLSAgICBzd2l0Y2ggKGF0KSB7Ci0KLSAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkc6Ci0gICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HX1NUUklORzoKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+YmVnaW5uaW5nKTsKLQotICAgIGNhc2UgU1JFX0FUX0JFR0lOTklOR19MSU5FOgotICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5iZWdpbm5pbmcgfHwKLSAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkpOwotCi0gICAgY2FzZSBTUkVfQVRfRU5EOgotICAgICAgICByZXR1cm4gKCgodm9pZCopIChwdHIrc3RhdGUtPmNoYXJzaXplKSA9PSBzdGF0ZS0+ZW5kICYmCi0gICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKSB8fAotICAgICAgICAgICAgICAgICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKSk7Ci0KLSAgICBjYXNlIFNSRV9BVF9FTkRfTElORToKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kIHx8Ci0gICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpOwotCi0gICAgY2FzZSBTUkVfQVRfRU5EX1NUUklORzoKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKTsKLQotICAgIGNhc2UgU1JFX0FUX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfTk9OX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwID09IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfTE9DX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9MT0NfTk9OX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9VTklfQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCAhPSB0aGF0cDsKLQotICAgIGNhc2UgU1JFX0FUX1VOSV9OT05fQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKLQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1MT0NBTChpbnQpCi1TUkVfQ0hBUlNFVChTUkVfQ09ERSogc2V0LCBTUkVfQ09ERSBjaCkKLXsKLSAgICAvKiBjaGVjayBpZiBjaGFyYWN0ZXIgaXMgYSBtZW1iZXIgb2YgdGhlIGdpdmVuIHNldCAqLwotCi0gICAgaW50IG9rID0gMTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgc3dpdGNoICgqc2V0KyspIHsKLQotICAgICAgICBjYXNlIFNSRV9PUF9GQUlMVVJFOgotICAgICAgICAgICAgcmV0dXJuICFvazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgotICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLwotICAgICAgICAgICAgaWYgKGNoID09IHNldFswXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICBzZXQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0NBVEVHT1JZOgotICAgICAgICAgICAgLyogPENBVEVHT1JZPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIGlmIChzcmVfY2F0ZWdvcnkoc2V0WzBdLCAoaW50KSBjaCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgc2V0ICs9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9DSEFSU0VUOgotICAgICAgICAgICAgaWYgKHNpemVvZihTUkVfQ09ERSkgPT0gMikgewotICAgICAgICAgICAgICAgIC8qIDxDSEFSU0VUPiA8Yml0bWFwPiAoMTYgYml0cyBwZXIgY29kZSB3b3JkKSAqLwotICAgICAgICAgICAgICAgIGlmIChjaCA8IDI1NiAmJiAoc2V0W2NoID4+IDRdICYgKDEgPDwgKGNoICYgMTUpKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgICAgICBzZXQgKz0gMTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiA8Q0hBUlNFVD4gPGJpdG1hcD4gKDMyIGJpdHMgcGVyIGNvZGUgd29yZCkgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2ggPCAyNTYgJiYgKHNldFtjaCA+PiA1XSAmICgxdSA8PCAoY2ggJiAzMSkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSA4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfUkFOR0U6Ci0gICAgICAgICAgICAvKiA8UkFOR0U+IDxsb3dlcj4gPHVwcGVyPiAqLwotICAgICAgICAgICAgaWYgKHNldFswXSA8PSBjaCAmJiBjaCA8PSBzZXRbMV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgc2V0ICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9ORUdBVEU6Ci0gICAgICAgICAgICBvayA9ICFvazsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0JJR0NIQVJTRVQ6Ci0gICAgICAgICAgICAvKiA8QklHQ0hBUlNFVD4gPGJsb2NrY291bnQ+IDwyNTYgYmxvY2tpbmRpY2VzPiA8YmxvY2tzPiAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGNvdW50LCBibG9jazsKLSAgICAgICAgICAgIGNvdW50ID0gKihzZXQrKyk7Ci0KLSAgICAgICAgICAgIGlmIChzaXplb2YoU1JFX0NPREUpID09IDIpIHsKLSAgICAgICAgICAgICAgICBibG9jayA9ICgodW5zaWduZWQgY2hhciopc2V0KVtjaCA+PiA4XTsKLSAgICAgICAgICAgICAgICBzZXQgKz0gMTI4OwotICAgICAgICAgICAgICAgIGlmIChzZXRbYmxvY2sqMTYgKyAoKGNoICYgMjU1KT4+NCldICYgKDEgPDwgKGNoICYgMTUpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSBjb3VudCoxNjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qICEoYyAmIH5OKSA9PSAoYyA8IE4rMSkgZm9yIGFueSB1bnNpZ25lZCBjLCB0aGlzIGF2b2lkcwotICAgICAgICAgICAgICAgICAqIHdhcm5pbmdzIHdoZW4gYydzIHR5cGUgc3VwcG9ydHMgb25seSBudW1iZXJzIDwgTisxICovCi0gICAgICAgICAgICAgICAgaWYgKCEoY2ggJiB+NjU1MzUpKQotICAgICAgICAgICAgICAgICAgICBibG9jayA9ICgodW5zaWduZWQgY2hhciopc2V0KVtjaCA+PiA4XTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrID0gLTE7Ci0gICAgICAgICAgICAgICAgc2V0ICs9IDY0OwotICAgICAgICAgICAgICAgIGlmIChibG9jayA+PTAgJiYKLSAgICAgICAgICAgICAgICAgICAgKHNldFtibG9jayo4ICsgKChjaCAmIDI1NSk+PjUpXSAmICgxdSA8PCAoY2ggJiAzMSkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSBjb3VudCo4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLyogaW50ZXJuYWwgZXJyb3IgLS0gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgaXQKLSAgICAgICAgICAgICAgIGhlcmUsIHNvIGxldCdzIGp1c3QgcHJldGVuZCBpdCBkaWRuJ3QgbWF0Y2guLi4gKi8KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi1MT0NBTChQeV9zc2l6ZV90KSBTUkVfTUFUQ0goU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pOwotCi1MT0NBTChQeV9zc2l6ZV90KQotU1JFX0NPVU5UKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIFNSRV9DT0RFIGNocjsKLSAgICBjaGFyKiBwdHIgPSAoY2hhciAqKXN0YXRlLT5wdHI7Ci0gICAgY2hhciogZW5kID0gKGNoYXIgKilzdGF0ZS0+ZW5kOwotICAgIFB5X3NzaXplX3QgaTsKLQotICAgIC8qIGFkanVzdCBlbmQgKi8KLSAgICBpZiAobWF4Y291bnQgPCAoZW5kIC0gcHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSAmJiBtYXhjb3VudCAhPSBTUkVfTUFYUkVQRUFUKQotICAgICAgICBlbmQgPSBwdHIgKyBtYXhjb3VudCpzdGF0ZS0+Y2hhcnNpemU7Ci0KLSAgICBzd2l0Y2ggKHBhdHRlcm5bMF0pIHsKLQotICAgIGNhc2UgU1JFX09QX0lOOgotICAgICAgICAvKiByZXBlYXRlZCBzZXQgKi8KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgSU5cbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmCi0gICAgICAgICAgICAgICBTUkVfQ0hBUlNFVChwYXR0ZXJuICsgMiwgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9BTlk6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gKi8KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgQU5ZXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAhU1JFX0lTX0xJTkVCUkVBSyhTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX0FOWV9BTEw6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gIHNraXAgdG8gdGhlIGVuZCBvZiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgIHN0cmluZywgYW5kIGJhY2t0cmFjayBmcm9tIHRoZXJlICovCi0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIEFOWV9BTExcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICBwdHIgPSBlbmQ7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfTElURVJBTDoKLSAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLwotICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkgPT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLwotICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMX0lHTk9SRSAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgPT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTDoKLSAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUwgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBjaHIpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUxfSUdOT1JFICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSAhPSBjaHIpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIHJlcGVhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgcGF0dGVybiAqLwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBTVUJQQVRURVJOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgd2hpbGUgKChjaGFyKikgc3RhdGUtPnB0ciA8IGVuZCkgewotICAgICAgICAgICAgaSA9IFNSRV9NQVRDSChzdGF0ZSwgcGF0dGVybik7Ci0gICAgICAgICAgICBpZiAoaSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICBpZiAoIWkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgcGF0dGVybiwgcHRyLAotICAgICAgICAgICAgICAgKChjaGFyKilzdGF0ZS0+cHRyIC0gcHRyKS9zdGF0ZS0+Y2hhcnNpemUpKTsKLSAgICAgICAgcmV0dXJuICgoY2hhciopc3RhdGUtPnB0ciAtIHB0cikvc3RhdGUtPmNoYXJzaXplOwotICAgIH0KLQotICAgIFRSQUNFKCgifCVwfCVwfENPVU5UICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHBhdHRlcm4sIHB0ciwKLSAgICAgICAgICAgKHB0ciAtIChjaGFyKikgc3RhdGUtPnB0cikvc3RhdGUtPmNoYXJzaXplKSk7Ci0gICAgcmV0dXJuIChwdHIgLSAoY2hhciopIHN0YXRlLT5wdHIpL3N0YXRlLT5jaGFyc2l6ZTsKLX0KLQotI2lmIDAgLyogbm90IHVzZWQgaW4gdGhpcyByZWxlYXNlICovCi1MT0NBTChpbnQpCi1TUkVfSU5GTyhTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKLXsKLSAgICAvKiBjaGVjayBpZiBhbiBTUkVfT1BfSU5GTyBibG9jayBtYXRjaGVzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICAgICAgIHJldHVybnMgdGhlIG51bWJlciBvZiBTUkVfQ09ERSBvYmplY3RzIHRvIHNraXAgaWYgc3VjY2Vzc2Z1bCwgMAotICAgICAgIGlmIG5vIG1hdGNoICovCi0KLSAgICBjaGFyKiBlbmQgPSBzdGF0ZS0+ZW5kOwotICAgIGNoYXIqIHB0ciA9IHN0YXRlLT5wdHI7Ci0gICAgUHlfc3NpemVfdCBpOwotCi0gICAgLyogY2hlY2sgbWluaW1hbCBsZW5ndGggKi8KLSAgICBpZiAocGF0dGVyblszXSAmJiAoZW5kIC0gcHRyKS9zdGF0ZS0+Y2hhcnNpemUgPCBwYXR0ZXJuWzNdKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIGNoZWNrIGtub3duIHByZWZpeCAqLwotICAgIGlmIChwYXR0ZXJuWzJdICYgU1JFX0lORk9fUFJFRklYICYmIHBhdHRlcm5bNV0gPiAxKSB7Ci0gICAgICAgIC8qIDxsZW5ndGg+IDxza2lwPiA8cHJlZml4IGRhdGE+IDxvdmVybGFwIGRhdGE+ICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuWzVdOyBpKyspCi0gICAgICAgICAgICBpZiAoKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCBpKSAhPSBwYXR0ZXJuWzcgKyBpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIHBhdHRlcm5bMF0gKyAyICogcGF0dGVybls2XTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhdHRlcm5bMF07Ci19Ci0jZW5kaWYKLQotLyogVGhlIG1hY3JvcyBiZWxvdyBzaG91bGQgYmUgdXNlZCB0byBwcm90ZWN0IHJlY3Vyc2l2ZSBTUkVfTUFUQ0goKQotICogY2FsbHMgdGhhdCAqZmFpbGVkKiBhbmQgZG8gKm5vdCogcmV0dXJuIGltbWVkaWF0ZWx5IChJT1csIHRob3NlCi0gKiB0aGF0IHdpbGwgYmFja3RyYWNrKS4gRXhwbGFpbmluZzoKLSAqCi0gKiAtIFJlY3Vyc2l2ZSBTUkVfTUFUQ0goKSByZXR1cm5lZCB0cnVlOiB0aGF0J3MgdXN1YWxseSBhIHN1Y2Nlc3MKLSAqICAgKGJlc2lkZXMgYXR5cGljYWwgY2FzZXMgbGlrZSBBU1NFUlRfTk9UKSwgdGhlcmVmb3JlIHRoZXJlJ3Mgbm8KLSAqICAgcmVhc29uIHRvIHJlc3RvcmUgbGFzdG1hcms7Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgZmFsc2UgYnV0IHRoZSBjdXJyZW50IFNSRV9NQVRDSCgpCi0gKiAgIGlzIHJldHVybmluZyB0byB0aGUgY2FsbGVyOiBJZiB0aGUgY3VycmVudCBTUkVfTUFUQ0goKSBpcyB0aGUKLSAqICAgdG9wIGZ1bmN0aW9uIG9mIHRoZSByZWN1cnNpb24sIHJldHVybmluZyBmYWxzZSB3aWxsIGJlIGEgbWF0Y2hpbmcKLSAqICAgZmFpbHVyZSwgYW5kIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGxhc3RtYXJrIGlzIHBvaW50aW5nIHRvLgotICogICBJZiBpdCdzICpub3QqIHRoZSB0b3AgZnVuY3Rpb24sIGl0IHdpbGwgYmUgYSByZWN1cnNpdmUgU1JFX01BVENIKCkKLSAqICAgZmFpbHVyZSBieSBpdHNlbGYsIGFuZCB0aGUgY2FsbGluZyBTUkVfTUFUQ0goKSB3aWxsIGhhdmUgdG8gZGVhbAotICogICB3aXRoIHRoZSBmYWlsdXJlIGJ5IHRoZSBzYW1lIHJ1bGVzIGV4cGxhaW5lZCBoZXJlIChpdCB3aWxsIHJlc3RvcmUKLSAqICAgbGFzdG1hcmsgYnkgaXRzZWxmIGlmIG5lY2Vzc2FyeSk7Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGNvbnRpbnVlIHRoZQotICogICBvdXRzaWRlICdmb3InIGxvb3A6IG11c3QgYmUgcHJvdGVjdGVkIHdoZW4gYnJlYWtpbmcsIHNpbmNlIHRoZSBuZXh0Ci0gKiAgIE9QIGNvdWxkIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBsYXN0bWFyazsKLSAqCi0gKiAtIFJlY3Vyc2l2ZSBTUkVfTUFUQ0goKSByZXR1cm5lZCBmYWxzZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGFnYWluCi0gKiAgIGluc2lkZSBhIGxvY2FsIGZvci93aGlsZSBsb29wOiBtdXN0IGJlIHByb3RlY3RlZCBiZXR3ZWVuIGVhY2gKLSAqICAgbG9vcCBpdGVyYXRpb24sIHNpbmNlIHRoZSByZWN1cnNpdmUgU1JFX01BVENIKCkgY291bGQgZG8gYW55dGhpbmcsCi0gKiAgIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcmsuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNoZWNrIHRoZSBkaXNjdXNzaW9uIGF0IFNGIHBhdGNoICM3MTI5MDAuCi0gKi8KLSNkZWZpbmUgTEFTVE1BUktfU0FWRSgpICAgICBcCi0gICAgZG8geyBcCi0gICAgICAgIGN0eC0+bGFzdG1hcmsgPSBzdGF0ZS0+bGFzdG1hcms7IFwKLSAgICAgICAgY3R4LT5sYXN0aW5kZXggPSBzdGF0ZS0+bGFzdGluZGV4OyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTEFTVE1BUktfUkVTVE9SRSgpICBcCi0gICAgZG8geyBcCi0gICAgICAgIHN0YXRlLT5sYXN0bWFyayA9IGN0eC0+bGFzdG1hcms7IFwKLSAgICAgICAgc3RhdGUtPmxhc3RpbmRleCA9IGN0eC0+bGFzdGluZGV4OyBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBSRVRVUk5fRVJST1IoaSkgZG8geyByZXR1cm4gaTsgfSB3aGlsZSgwKQotI2RlZmluZSBSRVRVUk5fRkFJTFVSRSBkbyB7IHJldCA9IDA7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQotI2RlZmluZSBSRVRVUk5fU1VDQ0VTUyBkbyB7IHJldCA9IDE7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQotCi0jZGVmaW5lIFJFVFVSTl9PTl9FUlJPUihpKSBcCi0gICAgZG8geyBpZiAoaSA8IDApIFJFVFVSTl9FUlJPUihpKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVUVVJOX09OX1NVQ0NFU1MoaSkgXAotICAgIGRvIHsgUkVUVVJOX09OX0VSUk9SKGkpOyBpZiAoaSA+IDApIFJFVFVSTl9TVUNDRVNTOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRVRVUk5fT05fRkFJTFVSRShpKSBcCi0gICAgZG8geyBSRVRVUk5fT05fRVJST1IoaSk7IGlmIChpID09IDApIFJFVFVSTl9GQUlMVVJFOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNGWSh4KSAjeAotCi0jZGVmaW5lIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHR5cGUsIHB0cikgXAotZG8geyBcCi0gICAgYWxsb2NfcG9zID0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZTsgXAotICAgIFRSQUNFKCgiYWxsb2NhdGluZyAlcyBpbiAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAotICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCi0gICAgICAgICAgIFNGWSh0eXBlKSwgYWxsb2NfcG9zLCBzaXplb2YodHlwZSkpKTsgXAotICAgIGlmIChzaXplb2YodHlwZSkgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gYWxsb2NfcG9zKSB7IFwKLSAgICAgICAgaW50IGogPSBkYXRhX3N0YWNrX2dyb3coc3RhdGUsIHNpemVvZih0eXBlKSk7IFwKLSAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAotICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAotICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOyBcCi0gICAgfSBcCi0gICAgcHRyID0gKHR5cGUqKShzdGF0ZS0+ZGF0YV9zdGFjaythbGxvY19wb3MpOyBcCi0gICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplb2YodHlwZSk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIHR5cGUsIHB0ciwgcG9zKSBcCi1kbyB7IFwKLSAgICBUUkFDRSgoImxvb2tpbmcgdXAgJXMgYXQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgU0ZZKHR5cGUpLCBwb3MpKTsgXAotICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srcG9zKTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIGRhdGEsIHNpemUpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiY29weSBkYXRhIGluICVwIHRvICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCi0gICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKLSAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgc2l6ZSkpOyBcCi0gICAgaWYgKHNpemUgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSkgeyBcCi0gICAgICAgIGludCBqID0gZGF0YV9zdGFja19ncm93KHN0YXRlLCBzaXplKTsgXAotICAgICAgICBpZiAoaiA8IDApIHJldHVybiBqOyBcCi0gICAgICAgIGlmIChjdHhfcG9zICE9IC0xKSBcCi0gICAgICAgICAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7IFwKLSAgICB9IFwKLSAgICBtZW1jcHkoc3RhdGUtPmRhdGFfc3RhY2src3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgZGF0YSwgc2l6ZSk7IFwKLSAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlICs9IHNpemU7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREFUQV9TVEFDS19QT1Aoc3RhdGUsIGRhdGEsIHNpemUsIGRpc2NhcmQpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiY29weSBkYXRhIHRvICVwIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKLSAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAotICAgICAgICAgICBkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAotICAgIG1lbWNweShkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFjaytzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpOyBcCi0gICAgaWYgKGRpc2NhcmQpIFwKLSAgICAgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSAtPSBzaXplOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIHNpemUpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiZGlzY2FyZCBkYXRhIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKLSAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAotICAgICAgICAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAotICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgLT0gc2l6ZTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIERBVEFfUFVTSCh4KSBcCi0gICAgREFUQV9TVEFDS19QVVNIKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSkKLSNkZWZpbmUgREFUQV9QT1AoeCkgXAotICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSwgMSkKLSNkZWZpbmUgREFUQV9QT1BfRElTQ0FSRCh4KSBcCi0gICAgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgc2l6ZW9mKCooeCkpKQotI2RlZmluZSBEQVRBX0FMTE9DKHQscCkgXAotICAgIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHQsIHApCi0jZGVmaW5lIERBVEFfTE9PS1VQX0FUKHQscCxwb3MpIFwKLSAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSx0LHAscG9zKQotCi0jZGVmaW5lIE1BUktfUFVTSChsYXN0bWFyaykgXAotICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAotICAgICAgICBpID0gbGFzdG1hcms7IC8qIGN0eC0+bGFzdG1hcmsgbWF5IGNoYW5nZSBpZiByZWFsbG9jYXRlZCAqLyBcCi0gICAgICAgIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgc3RhdGUtPm1hcmssIChpKzEpKnNpemVvZih2b2lkKikpOyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTUFSS19QT1AobGFzdG1hcmspIFwKLSAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKLSAgICAgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsIHN0YXRlLT5tYXJrLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSwgMSk7IFwKLSAgICB9IHdoaWxlICgwKQotI2RlZmluZSBNQVJLX1BPUF9LRUVQKGxhc3RtYXJrKSBcCi0gICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCi0gICAgICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKiksIDApOyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTUFSS19QT1BfRElTQ0FSRChsYXN0bWFyaykgXAotICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAotICAgICAgICBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSk7IFwKLSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEpVTVBfTk9ORSAgICAgICAgICAgIDAKLSNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMSAgICAgMQotI2RlZmluZSBKVU1QX01BWF9VTlRJTF8yICAgICAyCi0jZGVmaW5lIEpVTVBfTUFYX1VOVElMXzMgICAgIDMKLSNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMSAgICAgNAotI2RlZmluZSBKVU1QX01JTl9VTlRJTF8yICAgICA1Ci0jZGVmaW5lIEpVTVBfTUlOX1VOVElMXzMgICAgIDYKLSNkZWZpbmUgSlVNUF9SRVBFQVQgICAgICAgICAgNwotI2RlZmluZSBKVU1QX1JFUEVBVF9PTkVfMSAgICA4Ci0jZGVmaW5lIEpVTVBfUkVQRUFUX09ORV8yICAgIDkKLSNkZWZpbmUgSlVNUF9NSU5fUkVQRUFUX09ORSAgMTAKLSNkZWZpbmUgSlVNUF9CUkFOQ0ggICAgICAgICAgMTEKLSNkZWZpbmUgSlVNUF9BU1NFUlQgICAgICAgICAgMTIKLSNkZWZpbmUgSlVNUF9BU1NFUlRfTk9UICAgICAgMTMKLQotI2RlZmluZSBET19KVU1QKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybikgXAotICAgIERBVEFfQUxMT0MoU1JFX01BVENIX0NPTlRFWFQsIG5leHRjdHgpOyBcCi0gICAgbmV4dGN0eC0+bGFzdF9jdHhfcG9zID0gY3R4X3BvczsgXAotICAgIG5leHRjdHgtPmp1bXAgPSBqdW1wdmFsdWU7IFwKLSAgICBuZXh0Y3R4LT5wYXR0ZXJuID0gbmV4dHBhdHRlcm47IFwKLSAgICBjdHhfcG9zID0gYWxsb2NfcG9zOyBcCi0gICAgY3R4ID0gbmV4dGN0eDsgXAotICAgIGdvdG8gZW50cmFuY2U7IFwKLSAgICBqdW1wbGFiZWw6IFwKLSAgICB3aGlsZSAoMCkgLyogZ2NjIGRvZXNuJ3QgbGlrZSBsYWJlbHMgYXQgZW5kIG9mIHNjb3BlcyAqLyBcCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeV9zc2l6ZV90IGxhc3RfY3R4X3BvczsKLSAgICBQeV9zc2l6ZV90IGp1bXA7Ci0gICAgY2hhciogcHRyOwotICAgIFNSRV9DT0RFKiBwYXR0ZXJuOwotICAgIFB5X3NzaXplX3QgY291bnQ7Ci0gICAgUHlfc3NpemVfdCBsYXN0bWFyazsKLSAgICBQeV9zc2l6ZV90IGxhc3RpbmRleDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIFNSRV9DT0RFIGNocjsKLSAgICAgICAgU1JFX1JFUEVBVCogcmVwOwotICAgIH0gdTsKLX0gU1JFX01BVENIX0NPTlRFWFQ7Ci0KLS8qIGNoZWNrIGlmIHN0cmluZyBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLiAgcmV0dXJucyA8MCBmb3IKLSAgIGVycm9yLCAwIGZvciBmYWlsdXJlLCBhbmQgMSBmb3Igc3VjY2VzcyAqLwotTE9DQUwoUHlfc3NpemVfdCkKLVNSRV9NQVRDSChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKLXsKLSAgICBjaGFyKiBlbmQgPSAoY2hhciopc3RhdGUtPmVuZDsKLSAgICBQeV9zc2l6ZV90IGFsbG9jX3BvcywgY3R4X3BvcyA9IC0xOwotICAgIFB5X3NzaXplX3QgaSwgcmV0ID0gMDsKLSAgICBQeV9zc2l6ZV90IGp1bXA7Ci0gICAgdW5zaWduZWQgaW50IHNpZ2NvdW50PTA7Ci0KLSAgICBTUkVfTUFUQ0hfQ09OVEVYVCogY3R4OwotICAgIFNSRV9NQVRDSF9DT05URVhUKiBuZXh0Y3R4OwotCi0gICAgVFJBQ0UoKCJ8JXB8JXB8RU5URVJcbiIsIHBhdHRlcm4sIHN0YXRlLT5wdHIpKTsKLQotICAgIERBVEFfQUxMT0MoU1JFX01BVENIX0NPTlRFWFQsIGN0eCk7Ci0gICAgY3R4LT5sYXN0X2N0eF9wb3MgPSAtMTsKLSAgICBjdHgtPmp1bXAgPSBKVU1QX05PTkU7Ci0gICAgY3R4LT5wYXR0ZXJuID0gcGF0dGVybjsKLSAgICBjdHhfcG9zID0gYWxsb2NfcG9zOwotCi1lbnRyYW5jZToKLQotICAgIGN0eC0+cHRyID0gKGNoYXIgKilzdGF0ZS0+cHRyOwotCi0gICAgaWYgKGN0eC0+cGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgewotICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLwotICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gLi4uICovCi0gICAgICAgIGlmIChjdHgtPnBhdHRlcm5bM10gJiYgKGVuZCAtIGN0eC0+cHRyKS9zdGF0ZS0+Y2hhcnNpemUgPCBjdHgtPnBhdHRlcm5bM10pIHsKLSAgICAgICAgICAgIFRSQUNFKCgicmVqZWN0IChnb3QgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCBjaGFycywgIgotICAgICAgICAgICAgICAgICAgICJuZWVkICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLAotICAgICAgICAgICAgICAgICAgIChlbmQgLSBjdHgtPnB0cikvc3RhdGUtPmNoYXJzaXplLAotICAgICAgICAgICAgICAgICAgIChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bM10pKTsKLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICB9Ci0gICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV0gKyAxOwotICAgIH0KLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgKytzaWdjb3VudDsKLSAgICAgICAgaWYgKCgwID09IChzaWdjb3VudCAmIDB4ZmZmKSkgJiYgUHlFcnJfQ2hlY2tTaWduYWxzKCkpCi0gICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX0lOVEVSUlVQVEVEKTsKLQotICAgICAgICBzd2l0Y2ggKCpjdHgtPnBhdHRlcm4rKykgewotCi0gICAgICAgIGNhc2UgU1JFX09QX01BUks6Ci0gICAgICAgICAgICAvKiBzZXQgbWFyayAqLwotICAgICAgICAgICAgLyogPE1BUks+IDxnaWQ+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVJLICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGlmIChpICYgMSkKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gaS8yICsgMTsKLSAgICAgICAgICAgIGlmIChpID4gc3RhdGUtPmxhc3RtYXJrKSB7Ci0gICAgICAgICAgICAgICAgLyogc3RhdGUtPmxhc3RtYXJrIGlzIHRoZSBoaWdoZXN0IHZhbGlkIGluZGV4IGluIHRoZQotICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXJrIGFycmF5LiAgSWYgaXQgaXMgaW5jcmVhc2VkIGJ5IG1vcmUgdGhhbiAxLAotICAgICAgICAgICAgICAgICAgIHRoZSBpbnRlcnZlbmluZyBtYXJrcyBtdXN0IGJlIHNldCB0byBOVUxMIHRvIHNpZ25hbAotICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlc2UgbWFya3MgaGF2ZSBub3QgYmVlbiBlbmNvdW50ZXJlZC4gKi8KLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGogPSBzdGF0ZS0+bGFzdG1hcmsgKyAxOwotICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgaSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1hcmtbaisrXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmxhc3RtYXJrID0gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLT5tYXJrW2ldID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6Ci0gICAgICAgICAgICAvKiBtYXRjaCBsaXRlcmFsIHN0cmluZyAqLwotICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSAhPSBjdHgtPnBhdHRlcm5bMF0pCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMOgotICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgdGhhdCBpcyBub3QgbGl0ZXJhbCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIC8qIDxOT1RfTElURVJBTD4gPGNvZGU+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxOT1RfTElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSA9PSBjdHgtPnBhdHRlcm5bMF0pCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX1NVQ0NFU1M6Ci0gICAgICAgICAgICAvKiBlbmQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U1VDQ0VTU1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQVQ6Ci0gICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBwb3NpdGlvbiAqLwotICAgICAgICAgICAgLyogPEFUPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFUICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoIVNSRV9BVChzdGF0ZSwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9DQVRFR09SWToKLSAgICAgICAgICAgIC8qIG1hdGNoIGF0IGdpdmVuIGNhdGVnb3J5ICovCi0gICAgICAgICAgICAvKiA8Q0FURUdPUlk+IDxjb2RlPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q0FURUdPUlkgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAhc3JlX2NhdGVnb3J5KGN0eC0+cGF0dGVyblswXSwgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FOWToKLSAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIChleGNlcHQgYSBuZXdsaW5lKSAqLwotICAgICAgICAgICAgLyogPEFOWT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgU1JFX0lTX0xJTkVCUkVBSyhTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSkKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgotICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgKi8KLSAgICAgICAgICAgIC8qIDxBTllfQUxMPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QU5ZX0FMTFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0lOOgotICAgICAgICAgICAgLyogbWF0Y2ggc2V0IG1lbWJlciAob3Igbm9uX21lbWJlcikgKi8KLSAgICAgICAgICAgIC8qIDxJTj4gPHNraXA+IDxzZXQ+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxJTlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybiArIDEsIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKQotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfExJVEVSQUxfSUdOT1JFICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSAhPSBzdGF0ZS0+bG93ZXIoKmN0eC0+cGF0dGVybikpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpID09IHN0YXRlLT5sb3dlcigqY3R4LT5wYXR0ZXJuKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfSU5fSUdOT1JFOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5fSUdOT1JFXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kCi0gICAgICAgICAgICAgICAgfHwgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybisxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9KVU1QOgotICAgICAgICBjYXNlIFNSRV9PUF9JTkZPOgotICAgICAgICAgICAgLyoganVtcCBmb3J3YXJkICovCi0gICAgICAgICAgICAvKiA8SlVNUD4gPG9mZnNldD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVAgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQlJBTkNIOgotICAgICAgICAgICAgLyogYWx0ZXJuYXRpb24gKi8KLSAgICAgICAgICAgIC8qIDxCUkFOQ0g+IDwwPXNraXA+IGNvZGUgPEpVTVA+IC4uLiA8TlVMTD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEJSQU5DSFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOwotICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7Ci0gICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICBmb3IgKDsgY3R4LT5wYXR0ZXJuWzBdOyBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfTElURVJBTCAmJgotICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgIT0gY3R4LT5wYXR0ZXJuWzJdKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfSU4gJiYKLSAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybiArIDMsIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX0JSQU5DSCwganVtcF9icmFuY2gsIGN0eC0+cGF0dGVybisxKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfS0VFUChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfUkVQRUFUX09ORToKLSAgICAgICAgICAgIC8qIG1hdGNoIHJlcGVhdGVkIHNlcXVlbmNlIChtYXhpbWl6aW5nIHJlZ2V4cCkgKi8KLQotICAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIGlmIHRoZSByZXBlYXRlZCBpdGVtIGlzCi0gICAgICAgICAgICAgICBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgd2lkZSwgYW5kIHdlJ3JlIG5vdCBhbHJlYWR5Ci0gICAgICAgICAgICAgICBjb2xsZWN0aW5nIGJhY2t0cmFja2luZyBwb2ludHMuICBmb3Igb3RoZXIgY2FzZXMsCi0gICAgICAgICAgICAgICB1c2UgdGhlIE1BWF9SRVBFQVQgb3BlcmF0b3IgKi8KLQotICAgICAgICAgICAgLyogPFJFUEVBVF9PTkU+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8U1VDQ0VTUz4gdGFpbCAqLwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gKGVuZCAtIGN0eC0+cHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCi0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgcmV0ID0gU1JFX0NPVU5UKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzJdKTsKLSAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7Ci0gICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplICogY3R4LT5jb3VudDsKLQotICAgICAgICAgICAgLyogd2hlbiB3ZSBhcnJpdmUgaGVyZSwgY291bnQgY29udGFpbnMgdGhlIG51bWJlciBvZgotICAgICAgICAgICAgICAgbWF0Y2hlcywgYW5kIGN0eC0+cHRyIHBvaW50cyB0byB0aGUgdGFpbCBvZiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICBzdHJpbmcuICBjaGVjayBpZiB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBtYXRjaGVzLAotICAgICAgICAgICAgICAgYW5kIGJhY2t0cmFjayBpZiBub3QuICovCi0KLSAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgLyogdGFpbCBpcyBlbXB0eS4gIHdlJ3JlIGZpbmlzaGVkICovCi0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfTElURVJBTCkgewotICAgICAgICAgICAgICAgIC8qIHRhaWwgc3RhcnRzIHdpdGggYSBsaXRlcmFsLiBza2lwIHBvc2l0aW9ucyB3aGVyZQotICAgICAgICAgICAgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGNhbm5vdCBwb3NzaWJseSBtYXRjaCAqLwotICAgICAgICAgICAgICAgIGN0eC0+dS5jaHIgPSBjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdKzFdOwotICAgICAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgIT0gY3R4LT51LmNocikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyIC09IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8xLCBqdW1wX3JlcGVhdF9vbmVfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLQotICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciAtPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVRfT05FXzIsIGp1bXBfcmVwZWF0X29uZV8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyIC09IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOwotICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTUlOX1JFUEVBVF9PTkU6Ci0gICAgICAgICAgICAvKiBtYXRjaCByZXBlYXRlZCBzZXF1ZW5jZSAobWluaW1pemluZyByZWdleHApICovCi0KLSAgICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyBpZiB0aGUgcmVwZWF0ZWQgaXRlbSBpcwotICAgICAgICAgICAgICAgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHdpZGUsIGFuZCB3ZSdyZSBub3QgYWxyZWFkeQotICAgICAgICAgICAgICAgY29sbGVjdGluZyBiYWNrdHJhY2tpbmcgcG9pbnRzLiAgZm9yIG90aGVyIGNhc2VzLAotICAgICAgICAgICAgICAgdXNlIHRoZSBNSU5fUkVQRUFUIG9wZXJhdG9yICovCi0KLSAgICAgICAgICAgIC8qIDxNSU5fUkVQRUFUX09ORT4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxTVUNDRVNTPiB0YWlsICovCi0KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9SRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gKGVuZCAtIGN0eC0+cHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCi0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSAwKQotICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSAwOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogY291bnQgdXNpbmcgcGF0dGVybiBtaW4gYXMgdGhlIG1heGltdW0gKi8KLSAgICAgICAgICAgICAgICByZXQgPSBTUkVfQ09VTlQoc3RhdGUsIGN0eC0+cGF0dGVybiszLCBjdHgtPnBhdHRlcm5bMV0pOwotICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQotICAgICAgICAgICAgICAgICAgICAvKiBkaWRuJ3QgbWF0Y2ggbWluaW11bSBudW1iZXIgb2YgdGltZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgLyogYWR2YW5jZSBwYXN0IG1pbmltdW0gbWF0Y2hlcyBvZiByZXBlYXQgKi8KLSAgICAgICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OwotICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIC8qIHRhaWwgaXMgZW1wdHkuICB3ZSdyZSBmaW5pc2hlZCAqLwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KLSAgICAgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsyXSA9PSBTUkVfTUFYUkVQRUFUCi0gICAgICAgICAgICAgICAgICAgICAgIHx8IGN0eC0+Y291bnQgPD0gKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzJdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9SRVBFQVRfT05FLGp1bXBfbWluX3JlcGVhdF9vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgICAgICByZXQgPSBTUkVfQ09VTlQoc3RhdGUsIGN0eC0+cGF0dGVybiszLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9SRVBFQVQ6Ci0gICAgICAgICAgICAvKiBjcmVhdGUgcmVwZWF0IGNvbnRleHQuICBhbGwgdGhlIGhhcmQgd29yayBpcyBkb25lCi0gICAgICAgICAgICAgICBieSB0aGUgVU5USUwgb3BlcmF0b3IgKE1BWF9VTlRJTCwgTUlOX1VOVElMKSAqLwotICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxVTlRJTD4gdGFpbCAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIC8qIGluc3RhbGwgbmV3IHJlcGVhdCBjb250ZXh0ICovCi0gICAgICAgICAgICBjdHgtPnUucmVwID0gKFNSRV9SRVBFQVQqKSBQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKCpjdHgtPnUucmVwKSk7Ci0gICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSAtMTsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4gPSBjdHgtPnBhdHRlcm47Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5wcmV2ID0gc3RhdGUtPnJlcGVhdDsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gTlVMTDsKLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFULCBqdW1wX3JlcGVhdCwgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7Ci0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKLSAgICAgICAgICAgIFB5T2JqZWN0X0ZSRUUoY3R4LT51LnJlcCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX01BWF9VTlRJTDoKLSAgICAgICAgICAgIC8qIG1heGltaXppbmcgcmVwZWF0ICovCi0gICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPE1BWF9VTlRJTD4gdGFpbCAqLwotCi0gICAgICAgICAgICAvKiBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBkZWFsIHdpdGggemVyby13aWR0aAotICAgICAgICAgICAgICAgbWF0Y2hlcyBpbiBoZXJlLi4uICovCi0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OwotICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfU1RBVEUpOwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIGN0eC0+Y291bnQgPSBjdHgtPnUucmVwLT5jb3VudCsxOwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVhfVU5USUwgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPmNvdW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMV0pIHsKLSAgICAgICAgICAgICAgICAvKiBub3QgZW5vdWdoIG1hdGNoZXMgKi8KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8xLCBqdW1wX21heF91bnRpbF8xLAotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsyXSB8fAotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gPT0gU1JFX01BWFJFUEVBVCkgJiYKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyICE9IGN0eC0+dS5yZXAtPmxhc3RfcHRyKSB7Ci0gICAgICAgICAgICAgICAgLyogd2UgbWF5IGhhdmUgZW5vdWdoIG1hdGNoZXMsIGJ1dCBpZiB3ZSBjYW4KLSAgICAgICAgICAgICAgICAgICBtYXRjaCBhbm90aGVyIGl0ZW0sIGRvIHNvICovCi0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OwotICAgICAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLSAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICAgICAgREFUQV9QVVNIKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBzdGF0ZS0+cHRyOwotICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMiwganVtcF9tYXhfdW50aWxfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7Ci0gICAgICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTUFSS19QT1AoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogY2Fubm90IG1hdGNoIG1vcmUgcmVwZWF0ZWQgaXRlbXMgaGVyZS4gIG1ha2Ugc3VyZSB0aGUKLSAgICAgICAgICAgICAgIHRhaWwgbWF0Y2hlcyAqLwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzMsIGp1bXBfbWF4X3VudGlsXzMsIGN0eC0+cGF0dGVybik7Ci0gICAgICAgICAgICBSRVRVUk5fT05fU1VDQ0VTUyhyZXQpOwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9NSU5fVU5USUw6Ci0gICAgICAgICAgICAvKiBtaW5pbWl6aW5nIHJlcGVhdCAqLwotICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxNSU5fVU5USUw+IHRhaWwgKi8KLQotICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7Ci0gICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9TVEFURSk7Ci0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgY3R4LT5jb3VudCA9IGN0eC0+dS5yZXAtPmNvdW50KzE7Ci0KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9VTlRJTCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICVwXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+Y291bnQsIGN0eC0+dS5yZXAtPnBhdHRlcm4pKTsKLQotICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsxXSkgewotICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggbWF0Y2hlcyAqLwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzEsIGp1bXBfbWluX3VudGlsXzEsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLQotICAgICAgICAgICAgLyogc2VlIGlmIHRoZSB0YWlsIG1hdGNoZXMgKi8KLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OwotICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8yLCBqdW1wX21pbl91bnRpbF8yLCBjdHgtPnBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotCi0gICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0KLSAgICAgICAgICAgICAgICAmJiBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdICE9IFNSRV9NQVhSRVBFQVQpIHx8Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9PSBjdHgtPnUucmVwLT5sYXN0X3B0cikKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OwotICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICBEQVRBX1BVU0goJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gc3RhdGUtPnB0cjsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMyxqdW1wX21pbl91bnRpbF8zLAotICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOwotICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUY6Ci0gICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRiAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKLSAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIqIHAgPSAoY2hhciopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKLSAgICAgICAgICAgICAgICAgICAgY2hhciogZSA9IChjaGFyKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApICE9IFNSRV9DSEFSR0VUKHN0YXRlLCBwLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRl9JR05PUkU6Ci0gICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRl9JR05PUkUgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7Ci0gICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGFyKiBwID0gKGNoYXIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIqIGUgPSAoY2hhciopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCi0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBwLCAwKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfRVhJU1RTOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUZfRVhJU1RTICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgLyogPEdST1VQUkVGX0VYSVNUUz4gPGdyb3VwPiA8c2tpcD4gY29kZXllcyA8SlVNUD4gY29kZW5vIC4uLiAqLwotICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOwotICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIHAgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07Ci0gICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBlID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BU1NFUlQ6Ci0gICAgICAgICAgICAvKiBhc3NlcnQgc3VicGF0dGVybiAqLwotICAgICAgICAgICAgLyogPEFTU0VSVD4gPHNraXA+IDxiYWNrPiA8cGF0dGVybj4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFTU0VSVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyIDwgc3RhdGUtPmJlZ2lubmluZykKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9BU1NFUlQsIGp1bXBfYXNzZXJ0LCBjdHgtPnBhdHRlcm4rMik7Ci0gICAgICAgICAgICBSRVRVUk5fT05fRkFJTFVSRShyZXQpOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FTU0VSVF9OT1Q6Ci0gICAgICAgICAgICAvKiBhc3NlcnQgbm90IHN1YnBhdHRlcm4gKi8KLSAgICAgICAgICAgIC8qIDxBU1NFUlRfTk9UPiA8c2tpcD4gPGJhY2s+IDxwYXR0ZXJuPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVNTRVJUX05PVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyID49IHN0YXRlLT5iZWdpbm5pbmcpIHsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfQVNTRVJUX05PVCwganVtcF9hc3NlcnRfbm90LCBjdHgtPnBhdHRlcm4rMik7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6Ci0gICAgICAgICAgICAvKiBpbW1lZGlhdGUgZmFpbHVyZSAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8RkFJTFVSRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFVOS05PV04gJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWy0xXSkpOwotICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTExFR0FMKTsKLSAgICAgICAgfQotICAgIH0KLQotZXhpdDoKLSAgICBjdHhfcG9zID0gY3R4LT5sYXN0X2N0eF9wb3M7Ci0gICAganVtcCA9IGN0eC0+anVtcDsKLSAgICBEQVRBX1BPUF9ESVNDQVJEKGN0eCk7Ci0gICAgaWYgKGN0eF9wb3MgPT0gLTEpCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgREFUQV9MT09LVVBfQVQoU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7Ci0KLSAgICBzd2l0Y2ggKGp1bXApIHsKLSAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8yOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8yOwotICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzM6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8zXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzM7Ci0gICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMjoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMjsKLSAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8zOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfM1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8zOwotICAgICAgICBjYXNlIEpVTVBfQlJBTkNIOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9CUkFOQ0hcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9icmFuY2g7Ci0gICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMTsKLSAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8xOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8xOwotICAgICAgICBjYXNlIEpVTVBfUkVQRUFUOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXQ7Ci0gICAgICAgIGNhc2UgSlVNUF9SRVBFQVRfT05FXzE6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVF9PTkVfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdF9vbmVfMTsKLSAgICAgICAgY2FzZSBKVU1QX1JFUEVBVF9PTkVfMjoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUX09ORV8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0X29uZV8yOwotICAgICAgICBjYXNlIEpVTVBfTUlOX1JFUEVBVF9PTkU6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9SRVBFQVRfT05FXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWluX3JlcGVhdF9vbmU7Ci0gICAgICAgIGNhc2UgSlVNUF9BU1NFUlQ6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0FTU0VSVFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX2Fzc2VydDsKLSAgICAgICAgY2FzZSBKVU1QX0FTU0VSVF9OT1Q6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0FTU0VSVF9OT1RcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9hc3NlcnRfbm90OwotICAgICAgICBjYXNlIEpVTVBfTk9ORToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFVFVSTiAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIHJldCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsgLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCi19Ci0KLUxPQ0FMKFB5X3NzaXplX3QpCi1TUkVfU0VBUkNIKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQotewotICAgIGNoYXIqIHB0ciA9IChjaGFyKilzdGF0ZS0+c3RhcnQ7Ci0gICAgY2hhciogZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgUHlfc3NpemVfdCBzdGF0dXMgPSAwOwotICAgIFB5X3NzaXplX3QgcHJlZml4X2xlbiA9IDA7Ci0gICAgUHlfc3NpemVfdCBwcmVmaXhfc2tpcCA9IDA7Ci0gICAgU1JFX0NPREUqIHByZWZpeCA9IE5VTEw7Ci0gICAgU1JFX0NPREUqIGNoYXJzZXQgPSBOVUxMOwotICAgIFNSRV9DT0RFKiBvdmVybGFwID0gTlVMTDsKLSAgICBpbnQgZmxhZ3MgPSAwOwotCi0gICAgaWYgKHBhdHRlcm5bMF0gPT0gU1JFX09QX0lORk8pIHsKLSAgICAgICAgLyogb3B0aW1pemF0aW9uIGluZm8gYmxvY2sgKi8KLSAgICAgICAgLyogPElORk8+IDwxPXNraXA+IDwyPWZsYWdzPiA8Mz1taW4+IDw0PW1heD4gPDU9cHJlZml4IGluZm8+ICAqLwotCi0gICAgICAgIGZsYWdzID0gcGF0dGVyblsyXTsKLQotICAgICAgICBpZiAocGF0dGVyblszXSA+IDEpIHsKLSAgICAgICAgICAgIC8qIGFkanVzdCBlbmQgcG9pbnQgKGJ1dCBtYWtlIHN1cmUgd2UgbGVhdmUgYXQgbGVhc3Qgb25lCi0gICAgICAgICAgICAgICBjaGFyYWN0ZXIgaW4gdGhlcmUsIHNvIGxpdGVyYWwgc2VhcmNoIHdpbGwgd29yaykgKi8KLSAgICAgICAgICAgIGVuZCAtPSAocGF0dGVyblszXS0xKSAqIHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGlmIChlbmQgPD0gcHRyKQotICAgICAgICAgICAgICAgIGVuZCA9IHB0ciArIHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX1BSRUZJWCkgewotICAgICAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGtub3duIHByZWZpeCAqLwotICAgICAgICAgICAgLyogPGxlbmd0aD4gPHNraXA+IDxwcmVmaXggZGF0YT4gPG92ZXJsYXAgZGF0YT4gKi8KLSAgICAgICAgICAgIHByZWZpeF9sZW4gPSBwYXR0ZXJuWzVdOwotICAgICAgICAgICAgcHJlZml4X3NraXAgPSBwYXR0ZXJuWzZdOwotICAgICAgICAgICAgcHJlZml4ID0gcGF0dGVybiArIDc7Ci0gICAgICAgICAgICBvdmVybGFwID0gcHJlZml4ICsgcHJlZml4X2xlbiAtIDE7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBTUkVfSU5GT19DSEFSU0VUKQotICAgICAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIGEga25vd24gc2V0ICovCi0gICAgICAgICAgICAvKiA8Y2hhcnNldD4gKi8KLSAgICAgICAgICAgIGNoYXJzZXQgPSBwYXR0ZXJuICsgNTsKLQotICAgICAgICBwYXR0ZXJuICs9IDEgKyBwYXR0ZXJuWzFdOwotICAgIH0KLQotICAgIFRSQUNFKCgicHJlZml4ID0gJXAgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLAotICAgICAgICAgICBwcmVmaXgsIHByZWZpeF9sZW4sIHByZWZpeF9za2lwKSk7Ci0gICAgVFJBQ0UoKCJjaGFyc2V0ID0gJXBcbiIsIGNoYXJzZXQpKTsKLQotI2lmIGRlZmluZWQoVVNFX0ZBU1RfU0VBUkNIKQotICAgIGlmIChwcmVmaXhfbGVuID4gMSkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEga25vd24gcHJlZml4LiAgdXNlIHRoZSBvdmVybGFwCi0gICAgICAgICAgIHRhYmxlIHRvIHNraXAgZm9yd2FyZCBhcyBmYXN0IGFzIHdlIHBvc3NpYmx5IGNhbiAqLwotICAgICAgICBQeV9zc2l6ZV90IGkgPSAwOwotICAgICAgICBlbmQgPSAoY2hhciAqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBpZiAoKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBwcmVmaXhbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBvdmVybGFwW2ldOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgrK2kgPT0gcHJlZml4X2xlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogZm91bmQgYSBwb3RlbnRpYWwgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBTQ0FOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0ciAtIChwcmVmaXhfbGVuIC0gMSkgKiBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyIC0gKHByZWZpeF9sZW4gLSBwcmVmaXhfc2tpcCAtIDEpICogc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuICsgMipwcmVmaXhfc2tpcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGJ1dCBubyBjaWdhciAtLSB0cnkgYWdhaW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBvdmVybGFwW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfTElURVJBTCkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbCBjaGFyYWN0ZXIuICB0aGlzIGlzIHVzZWQKLSAgICAgICAgICAgZm9yIHNob3J0IHByZWZpeGVzLCBhbmQgaWYgZmFzdCBzZWFyY2ggaXMgZGlzYWJsZWQgKi8KLSAgICAgICAgU1JFX0NPREUgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBjaHIpCi0gICAgICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIExJVEVSQUxcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHI7Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19MSVRFUkFMKQotICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiB3ZSBnb3QgYWxsIG9mIGl0ICovCi0gICAgICAgICAgICBzdGF0dXMgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4gKyAyKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoY2hhcnNldCkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgY2hhcmFjdGVyIGZyb20gYSBrbm93biBzZXQgKi8KLSAgICAgICAgZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRV9DSEFSU0VUKGNoYXJzZXQsIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSkKLSAgICAgICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggQ0hBUlNFVFxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyOwotICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCi0gICAgICAgIHdoaWxlIChwdHIgPD0gZW5kKSB7Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0hcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gc3RhdGUtPnB0ciA9IHB0cjsKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBzdGF0dXMgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4gc3RhdHVzOwotfQotCi0jaWYgIWRlZmluZWQoU1JFX1JFQ1VSU0lWRSkKKyNkZWZpbmUgU1JFX0NIQVIgUHlfVUNTNAorI2RlZmluZSBTSVpFT0ZfU1JFX0NIQVIgNAorI2RlZmluZSBTUkUoRikgc3JlX3VjczRfIyNGCisjaW5jbHVkZSAic3JlX2xpYi5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZmFjdG9yaWVzIGFuZCBkZXN0cnVjdG9ycyAqLwogCiAvKiBzZWUgc3JlLmggZm9yIG9iamVjdCBkZWNsYXJhdGlvbnMgKi8KLXN0YXRpYyBQeU9iamVjdCpwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiwgU1JFX1NUQVRFKiwgaW50KTsKK3N0YXRpYyBQeU9iamVjdCpwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiwgU1JFX1NUQVRFKiwgUHlfc3NpemVfdCk7CiBzdGF0aWMgUHlPYmplY3QqcGF0dGVybl9zY2FubmVyKFBhdHRlcm5PYmplY3QqLCBQeU9iamVjdCosIFB5T2JqZWN0KiBrdyk7CiAKLXN0YXRpYyBpbnQKLXNyZV9saXRlcmFsX3RlbXBsYXRlKGludCBjaGFyc2l6ZSwgY2hhciogcHRyLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICAvKiBjaGVjayBpZiBnaXZlbiBzdHJpbmcgaXMgYSBsaXRlcmFsIHRlbXBsYXRlIChpLmUuIG5vIGVzY2FwZXMpICovCi0gICAgc3RydWN0IHsKLSAgICAgICAgaW50IGNoYXJzaXplOwotICAgIH0gc3RhdGUgPSB7Ci0gICAgICAgIGNoYXJzaXplCi0gICAgfTsKLSAgICB3aGlsZSAobGVuLS0gPiAwKSB7Ci0gICAgICAgIGlmIChTUkVfQ0hBUkdFVCgoJnN0YXRlKSwgcHRyLCAwKSA9PSAnXFwnKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHB0ciArPSBjaGFyc2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBQeU9iamVjdCAqCiBzcmVfY29kZXNpemUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CkBAIC0xNjY1LDcyICszMDgsNDEgQEAKIAogc3RhdGljIHZvaWQqCiBnZXRzdHJpbmcoUHlPYmplY3QqIHN0cmluZywgUHlfc3NpemVfdCogcF9sZW5ndGgsCi0gICAgICAgICAgaW50KiBwX2xvZ2ljYWxfY2hhcnNpemUsIGludCogcF9jaGFyc2l6ZSwKKyAgICAgICAgICBpbnQqIHBfaXNieXRlcywgaW50KiBwX2NoYXJzaXplLAogICAgICAgICAgIFB5X2J1ZmZlciAqdmlldykKIHsKICAgICAvKiBnaXZlbiBhIHB5dGhvbiBvYmplY3QsIHJldHVybiBhIGRhdGEgcG9pbnRlciwgYSBsZW5ndGggKGluCiAgICAgICAgY2hhcmFjdGVycyksIGFuZCBhIGNoYXJhY3RlciBzaXplLiAgcmV0dXJuIE5VTEwgaWYgdGhlIG9iamVjdAogICAgICAgIGlzIG5vdCBhIHN0cmluZyAob3Igbm90IGNvbXBhdGlibGUpICovCiAKLSAgICBQeUJ1ZmZlclByb2NzICpidWZmZXI7Ci0gICAgUHlfc3NpemVfdCBzaXplLCBieXRlczsKLSAgICBpbnQgY2hhcnNpemU7Ci0gICAgdm9pZCogcHRyOwotCiAgICAgLyogVW5pY29kZSBvYmplY3RzIGRvIG5vdCBzdXBwb3J0IHRoZSBidWZmZXIgQVBJLiBTbywgZ2V0IHRoZSBkYXRhCiAgICAgICAgZGlyZWN0bHkgaW5zdGVhZC4gKi8KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHN0cmluZykpIHsKICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHJpbmcpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHB0ciA9IFB5VW5pY29kZV9EQVRBKHN0cmluZyk7CiAgICAgICAgICpwX2xlbmd0aCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZyk7CiAgICAgICAgICpwX2NoYXJzaXplID0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKTsKLSAgICAgICAgKnBfbG9naWNhbF9jaGFyc2l6ZSA9IDQ7Ci0gICAgICAgIHJldHVybiBwdHI7CisgICAgICAgICpwX2lzYnl0ZXMgPSAwOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RBVEEoc3RyaW5nKTsKICAgICB9CiAKICAgICAvKiBnZXQgcG9pbnRlciB0byBieXRlIHN0cmluZyBidWZmZXIgKi8KLSAgICB2aWV3LT5sZW4gPSAtMTsKLSAgICBidWZmZXIgPSBQeV9UWVBFKHN0cmluZyktPnRwX2FzX2J1ZmZlcjsKLSAgICBpZiAoIWJ1ZmZlciB8fCAhYnVmZmVyLT5iZl9nZXRidWZmZXIgfHwKLSAgICAgICAgKCpidWZmZXItPmJmX2dldGJ1ZmZlcikoc3RyaW5nLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImV4cGVjdGVkIHN0cmluZyBvciBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3RyaW5nLCB2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImV4cGVjdGVkIHN0cmluZyBvciBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgLyogZGV0ZXJtaW5lIGJ1ZmZlciBzaXplICovCi0gICAgYnl0ZXMgPSB2aWV3LT5sZW47Ci0gICAgcHRyID0gdmlldy0+YnVmOworICAgICpwX2xlbmd0aCA9IHZpZXctPmxlbjsKKyAgICAqcF9jaGFyc2l6ZSA9IDE7CisgICAgKnBfaXNieXRlcyA9IDE7CiAKLSAgICBpZiAoYnl0ZXMgPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJidWZmZXIgaGFzIG5lZ2F0aXZlIHNpemUiKTsKLSAgICAgICAgZ290byBlcnI7CisgICAgaWYgKHZpZXctPmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiQnVmZmVyIGlzIE5VTEwiKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSh2aWV3KTsKKyAgICAgICAgdmlldy0+YnVmID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotCi0gICAgLyogZGV0ZXJtaW5lIGNoYXJhY3RlciBzaXplICovCi0gICAgc2l6ZSA9IFB5T2JqZWN0X1NpemUoc3RyaW5nKTsKLQotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHN0cmluZykgfHwgYnl0ZXMgPT0gc2l6ZSkKLSAgICAgICAgY2hhcnNpemUgPSAxOwotICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYnVmZmVyIHNpemUgbWlzbWF0Y2giKTsKLSAgICAgICAgZ290byBlcnI7Ci0gICAgfQotCi0gICAgKnBfbGVuZ3RoID0gc2l6ZTsKLSAgICAqcF9jaGFyc2l6ZSA9IGNoYXJzaXplOwotICAgICpwX2xvZ2ljYWxfY2hhcnNpemUgPSBjaGFyc2l6ZTsKLQotICAgIGlmIChwdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBpcyBOVUxMIik7Ci0gICAgICAgICAgICBnb3RvIGVycjsKLSAgICB9Ci0gICAgcmV0dXJuIHB0cjsKLSAgZXJyOgotICAgIFB5QnVmZmVyX1JlbGVhc2Uodmlldyk7Ci0gICAgdmlldy0+YnVmID0gTlVMTDsKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gdmlldy0+YnVmOwogfQogCiBMT0NBTChQeU9iamVjdCopCkBAIC0xNzQwLDcgKzM1Miw3IEBACiAgICAgLyogcHJlcGFyZSBzdGF0ZSBvYmplY3QgKi8KIAogICAgIFB5X3NzaXplX3QgbGVuZ3RoOwotICAgIGludCBsb2dpY2FsX2NoYXJzaXplLCBjaGFyc2l6ZTsKKyAgICBpbnQgaXNieXRlcywgY2hhcnNpemU7CiAgICAgdm9pZCogcHRyOwogCiAgICAgbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoU1JFX1NUQVRFKSk7CkBAIC0xNzQ5LDE2ICszNjEsMTYgQEAKICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gLTE7CiAKICAgICBzdGF0ZS0+YnVmZmVyLmJ1ZiA9IE5VTEw7Ci0gICAgcHRyID0gZ2V0c3RyaW5nKHN0cmluZywgJmxlbmd0aCwgJmxvZ2ljYWxfY2hhcnNpemUsICZjaGFyc2l6ZSwgJnN0YXRlLT5idWZmZXIpOworICAgIHB0ciA9IGdldHN0cmluZyhzdHJpbmcsICZsZW5ndGgsICZpc2J5dGVzLCAmY2hhcnNpemUsICZzdGF0ZS0+YnVmZmVyKTsKICAgICBpZiAoIXB0cikKICAgICAgICAgZ290byBlcnI7CiAKLSAgICBpZiAobG9naWNhbF9jaGFyc2l6ZSA9PSAxICYmIHBhdHRlcm4tPmxvZ2ljYWxfY2hhcnNpemUgPiAxKSB7CisgICAgaWYgKGlzYnl0ZXMgJiYgcGF0dGVybi0+aXNieXRlcyA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgdXNlIGEgc3RyaW5nIHBhdHRlcm4gb24gYSBieXRlcy1saWtlIG9iamVjdCIpOwogICAgICAgICBnb3RvIGVycjsKICAgICB9Ci0gICAgaWYgKGxvZ2ljYWxfY2hhcnNpemUgPiAxICYmIHBhdHRlcm4tPmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgeworICAgIGlmICghaXNieXRlcyAmJiBwYXR0ZXJuLT5pc2J5dGVzID4gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHVzZSBhIGJ5dGVzIHBhdHRlcm4gb24gYSBzdHJpbmctbGlrZSBvYmplY3QiKTsKICAgICAgICAgZ290byBlcnI7CkBAIC0xNzc1LDcgKzM4Nyw3IEBACiAgICAgZWxzZSBpZiAoZW5kID4gbGVuZ3RoKQogICAgICAgICBlbmQgPSBsZW5ndGg7CiAKLSAgICBzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9IGxvZ2ljYWxfY2hhcnNpemU7CisgICAgc3RhdGUtPmlzYnl0ZXMgPSBpc2J5dGVzOwogICAgIHN0YXRlLT5jaGFyc2l6ZSA9IGNoYXJzaXplOwogCiAgICAgc3RhdGUtPmJlZ2lubmluZyA9IHB0cjsKQEAgLTE4MTYsNiArNDI4LDI0IEBACiAgICAgKCgoY2hhciopKG1lbWJlcikgLSAoY2hhciopKHN0YXRlKS0+YmVnaW5uaW5nKSAvIChzdGF0ZSktPmNoYXJzaXplKQogCiBMT0NBTChQeU9iamVjdCopCitnZXRzbGljZShpbnQgaXNieXRlcywgY29uc3Qgdm9pZCAqcHRyLAorICAgICAgICAgUHlPYmplY3QqIHN0cmluZywgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQpCit7CisgICAgaWYgKGlzYnl0ZXMpIHsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdChzdHJpbmcpICYmCisgICAgICAgICAgICBzdGFydCA9PSAwICYmIGVuZCA9PSBQeUJ5dGVzX0dFVF9TSVpFKHN0cmluZykpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgKKyAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKXB0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gUHlVbmljb2RlX1N1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBlbmQpOworICAgIH0KK30KKworTE9DQUwoUHlPYmplY3QqKQogc3RhdGVfZ2V0c2xpY2UoU1JFX1NUQVRFKiBzdGF0ZSwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIHN0cmluZywgaW50IGVtcHR5KQogewogICAgIFB5X3NzaXplX3QgaSwgajsKQEAgLTE4MzUsMTEgKzQ2NSwxMSBAQAogICAgICAgICBqID0gU1RBVEVfT0ZGU0VUKHN0YXRlLCBzdGF0ZS0+bWFya1tpbmRleCsxXSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBqKTsKKyAgICByZXR1cm4gZ2V0c2xpY2Uoc3RhdGUtPmlzYnl0ZXMsIHN0YXRlLT5iZWdpbm5pbmcsIHN0cmluZywgaSwgaik7CiB9CiAKIHN0YXRpYyB2b2lkCi1wYXR0ZXJuX2Vycm9yKGludCBzdGF0dXMpCitwYXR0ZXJuX2Vycm9yKFB5X3NzaXplX3Qgc3RhdHVzKQogewogICAgIHN3aXRjaCAoc3RhdHVzKSB7CiAgICAgY2FzZSBTUkVfRVJST1JfUkVDVVJTSU9OX0xJTUlUOgpAQCAtMTg2OCwyOSArNDk4LDg3IEBACiB7CiAgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOwotICAgIGlmIChzZWxmLT52aWV3LmJ1ZikKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+dmlldyk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wYXR0ZXJuKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmdyb3VwaW5kZXgpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+aW5kZXhncm91cCk7CiAgICAgUHlPYmplY3RfREVMKHNlbGYpOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1wYXR0ZXJuX21hdGNoKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCitMT0NBTChQeV9zc2l6ZV90KQorc3JlX21hdGNoKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQoreworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMSkKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MxX21hdGNoKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDIpCisgICAgICAgIHJldHVybiBzcmVfdWNzMl9tYXRjaChzdGF0ZSwgcGF0dGVybik7CisgICAgYXNzZXJ0KHN0YXRlLT5jaGFyc2l6ZSA9PSA0KTsKKyAgICByZXR1cm4gc3JlX3VjczRfbWF0Y2goc3RhdGUsIHBhdHRlcm4pOworfQorCitMT0NBTChQeV9zc2l6ZV90KQorc3JlX3NlYXJjaChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKK3sKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDEpCisgICAgICAgIHJldHVybiBzcmVfdWNzMV9zZWFyY2goc3RhdGUsIHBhdHRlcm4pOworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMikKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MyX3NlYXJjaChzdGF0ZSwgcGF0dGVybik7CisgICAgYXNzZXJ0KHN0YXRlLT5jaGFyc2l6ZSA9PSA0KTsKKyAgICByZXR1cm4gc3JlX3VjczRfc2VhcmNoKHN0YXRlLCBwYXR0ZXJuKTsKK30KKworLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9zcmUKK2NsYXNzIF9zcmUuU1JFX1BhdHRlcm4gIlBhdHRlcm5PYmplY3QgKiIgIiZQYXR0ZXJuX1R5cGUiCisKK19zcmUuU1JFX1BhdHRlcm4ubWF0Y2ggYXMgcGF0dGVybl9tYXRjaAorCisgICAgcGF0dGVybjogb2JqZWN0CisgICAgcG9zOiBQeV9zc2l6ZV90ID0gMAorICAgIGVuZHBvczogUHlfc3NpemVfdChjX2RlZmF1bHQ9IlBZX1NTSVpFX1RfTUFYIikgPSBzeXMubWF4c2l6ZQorCitNYXRjaGVzIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKHBhdHRlcm5fbWF0Y2hfX2RvY19fLAorIm1hdGNoKCRzZWxmLCAvLCBwYXR0ZXJuLCBwb3M9MCwgZW5kcG9zPXN5cy5tYXhzaXplKVxuIgorIi0tXG4iCisiXG4iCisiTWF0Y2hlcyB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuIik7CisKKyNkZWZpbmUgUEFUVEVSTl9NQVRDSF9NRVRIT0RERUYgICAgXAorICAgIHsibWF0Y2giLCAoUHlDRnVuY3Rpb24pcGF0dGVybl9tYXRjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIHBhdHRlcm5fbWF0Y2hfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3BhdHRlcm5fbWF0Y2hfaW1wbChQYXR0ZXJuT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcGF0dGVybiwgUHlfc3NpemVfdCBwb3MsIFB5X3NzaXplX3QgZW5kcG9zKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3BhdHRlcm5fbWF0Y2goUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXR0ZXJuIiwgInBvcyIsICJlbmRwb3MiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcGF0dGVybjsKKyAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CisgICAgUHlfc3NpemVfdCBlbmRwb3MgPSBQWV9TU0laRV9UX01BWDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98bm46bWF0Y2giLCBfa2V5d29yZHMsCisgICAgICAgICZwYXR0ZXJuLCAmcG9zLCAmZW5kcG9zKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHBhdHRlcm5fbWF0Y2hfaW1wbChzZWxmLCBwYXR0ZXJuLCBwb3MsIGVuZHBvcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3BhdHRlcm5fbWF0Y2hfaW1wbChQYXR0ZXJuT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcGF0dGVybiwgUHlfc3NpemVfdCBwb3MsIFB5X3NzaXplX3QgZW5kcG9zKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE1MjhlYWZkYjhiMDI1YWQgaW5wdXQ9MjZmOWZkMzFiZWZlNDZiOV0qLwogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOworICAgIFB5T2JqZWN0ICpzdHJpbmc7CiAKLSAgICBQeU9iamVjdCogc3RyaW5nOwotICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwotICAgIFB5X3NzaXplX3QgZW5kID0gUFlfU1NJWkVfVF9NQVg7Ci0gICAgc3RhdGljIGNoYXIqIGt3bGlzdFtdID0geyAicGF0dGVybiIsICJwb3MiLCAiZW5kcG9zIiwgTlVMTCB9OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiT3xubjptYXRjaCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyaW5nLCAmc3RhcnQsICZlbmQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHN0cmluZyA9IHN0YXRlX2luaXQoJnN0YXRlLCBzZWxmLCBzdHJpbmcsIHN0YXJ0LCBlbmQpOworICAgIHN0cmluZyA9IHN0YXRlX2luaXQoJnN0YXRlLCAoUGF0dGVybk9iamVjdCAqKXNlbGYsIHBhdHRlcm4sIHBvcywgZW5kcG9zKTsKICAgICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE4OTgsMTEgKzU4Niw0MSBAQAogCiAgICAgVFJBQ0UoKCJ8JXB8JXB8TUFUQ0hcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CiAKLSAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9tYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VtYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9tYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CisKKyAgICBUUkFDRSgoInwlcHwlcHxFTkRcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3RhdGVfZmluaSgmc3RhdGUpOworCisgICAgcmV0dXJuIChQeU9iamVjdCAqKXBhdHRlcm5fbmV3X21hdGNoKHNlbGYsICZzdGF0ZSwgc3RhdHVzKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorcGF0dGVybl9mdWxsbWF0Y2goUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKK3sKKyAgICBTUkVfU1RBVEUgc3RhdGU7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CisKKyAgICBQeU9iamVjdCogc3RyaW5nOworICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOworICAgIFB5X3NzaXplX3QgZW5kID0gUFlfU1NJWkVfVF9NQVg7CisgICAgc3RhdGljIGNoYXIqIGt3bGlzdFtdID0geyAicGF0dGVybiIsICJwb3MiLCAiZW5kcG9zIiwgTlVMTCB9OworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiT3xubjpmdWxsbWF0Y2giLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cmluZywgJnN0YXJ0LCAmZW5kKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzdHJpbmcgPSBzdGF0ZV9pbml0KCZzdGF0ZSwgc2VsZiwgc3RyaW5nLCBzdGFydCwgZW5kKTsKKyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzdGF0ZS5tYXRjaF9hbGwgPSAxOworICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OworCisgICAgVFJBQ0UoKCJ8JXB8JXB8RlVMTE1BVENIXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOworCisgICAgc3RhdHVzID0gc3JlX21hdGNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKIAogICAgIFRSQUNFKCgifCVwfCVwfEVORFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTE5MTcsNyArNjM1LDcgQEAKIHBhdHRlcm5fc2VhcmNoKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAKICAgICBQeU9iamVjdCogc3RyaW5nOwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwpAQCAtMTkzMywxMSArNjUxLDcgQEAKIAogICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKIAotICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0KKyAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKIAogICAgIFRSQUNFKCgifCVwfCVwfEVORFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKIApAQCAtMTk5Nyw1OSArNzExLDExIEBACiAjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0Kgotam9pbl9saXN0KFB5T2JqZWN0KiBsaXN0LCBQeU9iamVjdCogc3RyaW5nKQotewotICAgIC8qIGpvaW4gbGlzdCBlbGVtZW50cyAqLwotCi0gICAgUHlPYmplY3QqIGpvaW5lcjsKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAxMDYwMDAwCi0gICAgUHlPYmplY3QqIGZ1bmN0aW9uOwotICAgIFB5T2JqZWN0KiBhcmdzOwotI2VuZGlmCi0gICAgUHlPYmplY3QqIHJlc3VsdDsKLQotICAgIGpvaW5lciA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCAwLCAwKTsKLSAgICBpZiAoIWpvaW5lcikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoUHlMaXN0X0dFVF9TSVpFKGxpc3QpID09IDApIHsKLSAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICByZXR1cm4gam9pbmVyOwotICAgIH0KLQotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDEwNjAwMDAKLSAgICBmdW5jdGlvbiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoam9pbmVyLCAiam9pbiIpOwotICAgIGlmICghZnVuY3Rpb24pIHsKLSAgICAgICAgUHlfREVDUkVGKGpvaW5lcik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBhcmdzID0gUHlUdXBsZV9OZXcoMSk7Ci0gICAgaWYgKCFhcmdzKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihmdW5jdGlvbik7Ci0gICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCBsaXN0KTsKLSAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGZ1bmN0aW9uLCBhcmdzKTsKLSAgICBQeV9ERUNSRUYoYXJncyk7IC8qIGFsc28gcmVtb3ZlcyBsaXN0ICovCi0gICAgUHlfREVDUkVGKGZ1bmN0aW9uKTsKLSNlbHNlCi0gICAgcmVzdWx0ID0gY2FsbCgKLSAgICAgICAgInN0cmluZyIsICJqb2luIiwKLSAgICAgICAgUHlUdXBsZV9QYWNrKDIsIGxpc3QsIGpvaW5lcikKLSAgICAgICAgKTsKLSNlbmRpZgotICAgIFB5X0RFQ1JFRihqb2luZXIpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9maW5kYWxsKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwogICAgIFB5T2JqZWN0KiBsaXN0OwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAgICAgUHlfc3NpemVfdCBpLCBiLCBlOwogCiAgICAgUHlPYmplY3QqIHN0cmluZzsKQEAgLTIwNzgsMTIgKzc0NCw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMDk5LDcgKzc2MCw4IEBACiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIGIgPSBTVEFURV9PRkZTRVQoJnN0YXRlLCBzdGF0ZS5zdGFydCk7CiAgICAgICAgICAgICBlID0gU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgc3RhdGUucHRyKTsKLSAgICAgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgYiwgZSk7CisgICAgICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgYiwgZSk7CiAgICAgICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjE0NSw3ICs4MDcsNiBAQAogCiB9CiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDIwMDAwCiBzdGF0aWMgUHlPYmplY3QqCiBwYXR0ZXJuX2ZpbmRpdGVyKFBhdHRlcm5PYmplY3QqIHBhdHRlcm4sIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CkBAIC0yMTY3LDcgKzgyOCw2IEBACiAKICAgICByZXR1cm4gaXRlcmF0b3I7CiB9Ci0jZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9zcGxpdChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQpAQCAtMjE3NSw3ICs4MzUsNyBAQAogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeU9iamVjdCogbGlzdDsKICAgICBQeU9iamVjdCogaXRlbTsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogICAgIFB5X3NzaXplX3QgbjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgdm9pZCogbGFzdDsKQEAgLTIyMDYsMTIgKzg2Niw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMjMxLDcgKzg4Niw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBnZXQgc2VnbWVudCBiZWZvcmUgdGhpcyBtYXRjaCAqLwotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZSgKKyAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKICAgICAgICAgICAgIHN0cmluZywgU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgbGFzdCksCiAgICAgICAgICAgICBTVEFURV9PRkZTRVQoJnN0YXRlLCBzdGF0ZS5zdGFydCkKICAgICAgICAgICAgICk7CkBAIC0yMjYwLDcgKzkxNSw3IEBACiAgICAgfQogCiAgICAgLyogZ2V0IHNlZ21lbnQgZm9sbG93aW5nIGxhc3QgbWF0Y2ggKGV2ZW4gaWYgZW1wdHkpICovCi0gICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2UoCisgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKICAgICAgICAgc3RyaW5nLCBTVEFURV9PRkZTRVQoJnN0YXRlLCBsYXN0KSwgc3RhdGUuZW5kcG9zCiAgICAgICAgICk7CiAgICAgaWYgKCFpdGVtKQpAQCAtMjI4NiwxNSArOTQxLDE2IEBACiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwogICAgIFB5T2JqZWN0KiBsaXN0OworICAgIFB5T2JqZWN0KiBqb2luZXI7CiAgICAgUHlPYmplY3QqIGl0ZW07CiAgICAgUHlPYmplY3QqIGZpbHRlcjsKICAgICBQeU9iamVjdCogYXJnczsKICAgICBQeU9iamVjdCogbWF0Y2g7CiAgICAgdm9pZCogcHRyOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAgICAgUHlfc3NpemVfdCBuOwogICAgIFB5X3NzaXplX3QgaSwgYiwgZTsKLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZSwgY2hhcnNpemU7CisgICAgaW50IGlzYnl0ZXMsIGNoYXJzaXplOwogICAgIGludCBmaWx0ZXJfaXNfY2FsbGFibGU7CiAgICAgUHlfYnVmZmVyIHZpZXc7CiAKQEAgLTIzMDcsMTAgKzk2MywxMyBAQAogICAgICAgICAvKiBpZiBub3QgY2FsbGFibGUsIGNoZWNrIGlmIGl0J3MgYSBsaXRlcmFsIHN0cmluZyAqLwogICAgICAgICBpbnQgbGl0ZXJhbDsKICAgICAgICAgdmlldy5idWYgPSBOVUxMOwotICAgICAgICBwdHIgPSBnZXRzdHJpbmcocHRlbXBsYXRlLCAmbiwgJmxvZ2ljYWxfY2hhcnNpemUsICZjaGFyc2l6ZSwgJnZpZXcpOworICAgICAgICBwdHIgPSBnZXRzdHJpbmcocHRlbXBsYXRlLCAmbiwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnZpZXcpOwogICAgICAgICBiID0gY2hhcnNpemU7CiAgICAgICAgIGlmIChwdHIpIHsKLSAgICAgICAgICAgIGxpdGVyYWwgPSBzcmVfbGl0ZXJhbF90ZW1wbGF0ZShiLCBwdHIsIG4pOworICAgICAgICAgICAgaWYgKGNoYXJzaXplID09IDEpCisgICAgICAgICAgICAgICAgbGl0ZXJhbCA9IG1lbWNocihwdHIsICdcXCcsIG4pID09IE5VTEw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGl0ZXJhbCA9IFB5VW5pY29kZV9GaW5kQ2hhcihwdGVtcGxhdGUsICdcXCcsIDAsIG4sIDEpID09IC0xOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIGxpdGVyYWwgPSAwOwpAQCAtMjM1NCwxMiArMTAxMyw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMzc1LDcgKzEwMjksOCBAQAogCiAgICAgICAgIGlmIChpIDwgYikgewogICAgICAgICAgICAgLyogZ2V0IHNlZ21lbnQgYmVmb3JlIHRoaXMgbWF0Y2ggKi8KLSAgICAgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgaSwgYik7CisgICAgICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAorICAgICAgICAgICAgICAgIHN0cmluZywgaSwgYik7CiAgICAgICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIHN0YXR1cyA9IFB5TGlzdF9BcHBlbmQobGlzdCwgaXRlbSk7CkBAIC0yNDMwLDcgKzEwODUsOCBAQAogCiAgICAgLyogZ2V0IHNlZ21lbnQgZm9sbG93aW5nIGxhc3QgbWF0Y2ggKi8KICAgICBpZiAoaSA8IHN0YXRlLmVuZHBvcykgewotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZShzdHJpbmcsIGksIHN0YXRlLmVuZHBvcyk7CisgICAgICAgIGl0ZW0gPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsIGksIHN0YXRlLmVuZHBvcyk7CiAgICAgICAgIGlmICghaXRlbSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIHN0YXR1cyA9IFB5TGlzdF9BcHBlbmQobGlzdCwgaXRlbSk7CkBAIC0yNDQ0LDEwICsxMTAwLDI1IEBACiAgICAgUHlfREVDUkVGKGZpbHRlcik7CiAKICAgICAvKiBjb252ZXJ0IGxpc3QgdG8gc2luZ2xlIHN0cmluZyAoYWxzbyByZW1vdmVzIGxpc3QpICovCi0gICAgaXRlbSA9IGpvaW5fbGlzdChsaXN0LCBzdHJpbmcpOwotCi0gICAgaWYgKCFpdGVtKQorICAgIGpvaW5lciA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywgc3RyaW5nLCAwLCAwKTsKKyAgICBpZiAoIWpvaW5lcikgeworICAgICAgICBQeV9ERUNSRUYobGlzdCk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlMaXN0X0dFVF9TSVpFKGxpc3QpID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGxpc3QpOworICAgICAgICBpdGVtID0gam9pbmVyOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHN0YXRlLmlzYnl0ZXMpCisgICAgICAgICAgICBpdGVtID0gX1B5Qnl0ZXNfSm9pbihqb2luZXIsIGxpc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdGVtID0gUHlVbmljb2RlX0pvaW4oam9pbmVyLCBsaXN0KTsKKyAgICAgICAgUHlfREVDUkVGKGpvaW5lcik7CisgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgaWYgKHN1Ym4pCiAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJObiIsIGl0ZW0sIG4pOwpAQCAtMjU0MSw5ICsxMjEyLDg5IEBACiAjZW5kaWYKIH0KIAotUHlEb2NfU1RSVkFSKHBhdHRlcm5fbWF0Y2hfZG9jLAotIm1hdGNoKHN0cmluZ1ssIHBvc1ssIGVuZHBvc11dKSAtPiBtYXRjaCBvYmplY3Qgb3IgTm9uZS5cblwKLSAgICBNYXRjaGVzIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyIpOworc3RhdGljIFB5T2JqZWN0ICoKK3BhdHRlcm5fcmVwcihQYXR0ZXJuT2JqZWN0ICpvYmopCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgIGludCB2YWx1ZTsKKyAgICB9IGZsYWdfbmFtZXNbXSA9IHsKKyAgICAgICAgeyJyZS5URU1QTEFURSIsIFNSRV9GTEFHX1RFTVBMQVRFfSwKKyAgICAgICAgeyJyZS5JR05PUkVDQVNFIiwgU1JFX0ZMQUdfSUdOT1JFQ0FTRX0sCisgICAgICAgIHsicmUuTE9DQUxFIiwgU1JFX0ZMQUdfTE9DQUxFfSwKKyAgICAgICAgeyJyZS5NVUxUSUxJTkUiLCBTUkVfRkxBR19NVUxUSUxJTkV9LAorICAgICAgICB7InJlLkRPVEFMTCIsIFNSRV9GTEFHX0RPVEFMTH0sCisgICAgICAgIHsicmUuVU5JQ09ERSIsIFNSRV9GTEFHX1VOSUNPREV9LAorICAgICAgICB7InJlLlZFUkJPU0UiLCBTUkVfRkxBR19WRVJCT1NFfSwKKyAgICAgICAgeyJyZS5ERUJVRyIsIFNSRV9GTEFHX0RFQlVHfSwKKyAgICAgICAgeyJyZS5BU0NJSSIsIFNSRV9GTEFHX0FTQ0lJfSwKKyAgICB9OworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmbGFnX2l0ZW1zOworICAgIGludCBpOworICAgIGludCBmbGFncyA9IG9iai0+ZmxhZ3M7CisKKyAgICAvKiBPbWl0IHJlLlVOSUNPREUgZm9yIHZhbGlkIHN0cmluZyBwYXR0ZXJucy4gKi8KKyAgICBpZiAob2JqLT5pc2J5dGVzID09IDAgJiYKKyAgICAgICAgKGZsYWdzICYgKFNSRV9GTEFHX0xPQ0FMRXxTUkVfRkxBR19VTklDT0RFfFNSRV9GTEFHX0FTQ0lJKSkgPT0KKyAgICAgICAgIFNSRV9GTEFHX1VOSUNPREUpCisgICAgICAgIGZsYWdzICY9IH5TUkVfRkxBR19VTklDT0RFOworCisgICAgZmxhZ19pdGVtcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKCFmbGFnX2l0ZW1zKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBQeV9BUlJBWV9MRU5HVEgoZmxhZ19uYW1lcyk7IGkrKykgeworICAgICAgICBpZiAoZmxhZ3MgJiBmbGFnX25hbWVzW2ldLnZhbHVlKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGZsYWdfbmFtZXNbaV0ubmFtZSk7CisgICAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgICAgZ290byBkb25lOworCisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChmbGFnX2l0ZW1zLCBpdGVtKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgZmxhZ3MgJj0gfmZsYWdfbmFtZXNbaV0udmFsdWU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZsYWdzKSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjB4JXgiLCBmbGFncyk7CisgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChmbGFnX2l0ZW1zLCBpdGVtKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgfQorCisgICAgaWYgKFB5TGlzdF9TaXplKGZsYWdfaXRlbXMpID4gMCkgeworICAgICAgICBQeU9iamVjdCAqZmxhZ3NfcmVzdWx0OworICAgICAgICBQeU9iamVjdCAqc2VwID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoInwiKTsKKyAgICAgICAgaWYgKCFzZXApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGZsYWdzX3Jlc3VsdCA9IFB5VW5pY29kZV9Kb2luKHNlcCwgZmxhZ19pdGVtcyk7CisgICAgICAgIFB5X0RFQ1JFRihzZXApOworICAgICAgICBpZiAoIWZsYWdzX3Jlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoInJlLmNvbXBpbGUoJS4yMDBSLCAlUykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnBhdHRlcm4sIGZsYWdzX3Jlc3VsdCk7CisgICAgICAgIFB5X0RFQ1JFRihmbGFnc19yZXN1bHQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoInJlLmNvbXBpbGUoJS4yMDBSKSIsIG9iai0+cGF0dGVybik7CisgICAgfQorCitkb25lOgorICAgIFB5X0RFQ1JFRihmbGFnX2l0ZW1zKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQeURvY19TVFJWQVIocGF0dGVybl9mdWxsbWF0Y2hfZG9jLAorImZ1bGxtYXRjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkgLT4gbWF0Y2ggb2JqZWN0IG9yIE5vbmUuXG5cCisgICAgTWF0Y2hlcyBhZ2FpbnN0IGFsbCBvZiB0aGUgc3RyaW5nIik7CiAKIFB5RG9jX1NUUlZBUihwYXR0ZXJuX3NlYXJjaF9kb2MsCiAic2VhcmNoKHN0cmluZ1ssIHBvc1ssIGVuZHBvc11dKSAtPiBtYXRjaCBvYmplY3Qgb3IgTm9uZS5cblwKQEAgLTI1NzgsOCArMTMyOSw5IEBACiBQeURvY19TVFJWQVIocGF0dGVybl9kb2MsICJDb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0cyIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgcGF0dGVybl9tZXRob2RzW10gPSB7Ci0gICAgeyJtYXRjaCIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9tYXRjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgICAgIHBhdHRlcm5fbWF0Y2hfZG9jfSwKKyAgICBQQVRURVJOX01BVENIX01FVEhPRERFRgorICAgIHsiZnVsbG1hdGNoIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2Z1bGxtYXRjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgICAgIHBhdHRlcm5fZnVsbG1hdGNoX2RvY30sCiAgICAgeyJzZWFyY2giLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fc2VhcmNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9zZWFyY2hfZG9jfSwKICAgICB7InN1YiIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9zdWIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLApAQCAtMjU5MCwxMCArMTM0Miw4IEBACiAgICAgICAgIHBhdHRlcm5fc3BsaXRfZG9jfSwKICAgICB7ImZpbmRhbGwiLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fZmluZGFsbCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fZmluZGFsbF9kb2N9LAotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwMjAwMDAKICAgICB7ImZpbmRpdGVyIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2ZpbmRpdGVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9maW5kaXRlcl9kb2N9LAotI2VuZGlmCiAgICAgeyJzY2FubmVyIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX3NjYW5uZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7Il9fY29weV9fIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2NvcHksIE1FVEhfTk9BUkdTfSwKICAgICB7Il9fZGVlcGNvcHlfXyIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9kZWVwY29weSwgTUVUSF9PfSwKQEAgLTI2MTgsNyArMTM2OCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpcGF0dGVybl9yZXByLCAgICAgICAgICAgICAvKiB0cF9yZXByICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCkBAIC0yNjcxLDcgKzE0MjEsNiBAQAogICAgIHNlbGYtPnBhdHRlcm4gPSBOVUxMOwogICAgIHNlbGYtPmdyb3VwaW5kZXggPSBOVUxMOwogICAgIHNlbGYtPmluZGV4Z3JvdXAgPSBOVUxMOwotICAgIHNlbGYtPnZpZXcuYnVmID0gTlVMTDsKIAogICAgIHNlbGYtPmNvZGVzaXplID0gbjsKIApAQCAtMjY5MiwxNiArMTQ0MSwyMCBAQAogICAgIH0KIAogICAgIGlmIChwYXR0ZXJuID09IFB5X05vbmUpIHsKLSAgICAgICAgc2VsZi0+bG9naWNhbF9jaGFyc2l6ZSA9IC0xOwotICAgICAgICBzZWxmLT5jaGFyc2l6ZSA9IC0xOworICAgICAgICBzZWxmLT5pc2J5dGVzID0gLTE7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IHBfbGVuZ3RoOwotICAgICAgICBpZiAoIWdldHN0cmluZyhwYXR0ZXJuLCAmcF9sZW5ndGgsICZzZWxmLT5sb2dpY2FsX2NoYXJzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAmc2VsZi0+Y2hhcnNpemUsICZzZWxmLT52aWV3KSkgeworICAgICAgICBpbnQgY2hhcnNpemU7CisgICAgICAgIFB5X2J1ZmZlciB2aWV3OworICAgICAgICB2aWV3LmJ1ZiA9IE5VTEw7CisgICAgICAgIGlmICghZ2V0c3RyaW5nKHBhdHRlcm4sICZwX2xlbmd0aCwgJnNlbGYtPmlzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc2l6ZSwgJnZpZXcpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAodmlldy5idWYpCisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICB9CiAKICAgICBQeV9JTkNSRUYocGF0dGVybik7CkBAIC0yNzg3LDcgKzE1NDAsNyBAQAogICAgICAgICBza2lwID0gKmNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFZUUkFDRSgoIiVsdSAoc2tpcCB0byAlcClcbiIsICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNraXAsIGNvZGUrc2tpcCkpOyAgICAgICAgXAotICAgICAgICBpZiAoc2tpcC1hZGogPiBlbmQtY29kZSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChza2lwLWFkaiA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKSAgICAgIFwKICAgICAgICAgICAgIEZBSUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjb2RlKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKQEAgLTI4MTksOCArMTU3Miw4IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNSRV9PUF9DSEFSU0VUOgotICAgICAgICAgICAgb2Zmc2V0ID0gMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgKi8KLSAgICAgICAgICAgIGlmIChvZmZzZXQgPiBlbmQtY29kZSkKKyAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9TUkVfQ09ERV9CSVRTOyAvKiAyNTYtYml0IGJpdG1hcCAqLworICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBjb2RlICs9IG9mZnNldDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjgyOCw3ICsxNTgxLDcgQEAKICAgICAgICAgY2FzZSBTUkVfT1BfQklHQ0hBUlNFVDoKICAgICAgICAgICAgIEdFVF9BUkc7IC8qIE51bWJlciBvZiBibG9ja3MgKi8KICAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9zaXplb2YoU1JFX0NPREUpOyAvKiAyNTYtYnl0ZSB0YWJsZSAqLwotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGVuZC1jb2RlKQorICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCBlYWNoIGJ5dGUgcG9pbnRzIHRvIGEgdmFsaWQgYmxvY2sgKi8KICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewpAQCAtMjgzNiw4ICsxNTg5LDggQEAKICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvZGUgKz0gb2Zmc2V0OwotICAgICAgICAgICAgb2Zmc2V0ID0gYXJnICogMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgdGltZXMgYXJnICovCi0gICAgICAgICAgICBpZiAob2Zmc2V0ID4gZW5kLWNvZGUpCisgICAgICAgICAgICBvZmZzZXQgPSBhcmcgKiAoMjU2L1NSRV9DT0RFX0JJVFMpOyAvKiAyNTYtYml0IGJpdG1hcCB0aW1lcyBhcmcgKi8KKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgY29kZSArPSBvZmZzZXQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI5MDAsNyArMTY1Myw3IEBACiAgICAgICAgICAgICAgICBzcmVfbWF0Y2goKSBjb2RlIGlzIHJvYnVzdCBldmVuIGlmIHRoZXkgZG9uJ3QsIGFuZCB0aGUgd29yc3QKICAgICAgICAgICAgICAgIHlvdSBjYW4gZ2V0IGlzIG5vbnNlbnNpY2FsIG1hdGNoIHJlc3VsdHMuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+IDIqZ3JvdXBzKzEpIHsKKyAgICAgICAgICAgIGlmIChhcmcgPiAyICogKHNpemVfdClncm91cHMgKyAxKSB7CiAgICAgICAgICAgICAgICAgVlRSQUNFKCgiYXJnPSVkLCBncm91cHM9JWRcbiIsIChpbnQpYXJnLCAoaW50KWdyb3VwcykpOwogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICB9CkBAIC0yOTg4LDExICsxNzQxLDExIEBACiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7IHByZWZpeF9sZW4gPSBhcmc7CiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7CiAgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgY29tZXMgdGhlIHByZWZpeCBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBuZXdjb2RlLWNvZGUpCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXhfbGVuID4gKFB5X3VpbnRwdHJfdCkobmV3Y29kZSAtIGNvZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgICAgICAgICAgY29kZSArPSBwcmVmaXhfbGVuOwogICAgICAgICAgICAgICAgICAgICAvKiBBbmQgaGVyZSBjb21lcyB0aGUgb3ZlcmxhcCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4X2xlbiA+IG5ld2NvZGUtY29kZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiAoUHlfdWludHB0cl90KShuZXdjb2RlIC0gY29kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgICAgICAgICAvKiBFYWNoIG92ZXJsYXAgdmFsdWUgc2hvdWxkIGJlIDwgcHJlZml4X2xlbiAqLwogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZml4X2xlbjsgaSsrKSB7CkBAIC0zMDgzLDcgKzE4MzYsNyBAQAogICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRjoKICAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfSUdOT1JFOgogICAgICAgICAgICAgR0VUX0FSRzsKLSAgICAgICAgICAgIGlmIChhcmcgPj0gZ3JvdXBzKQorICAgICAgICAgICAgaWYgKGFyZyA+PSAoc2l6ZV90KWdyb3VwcykKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTMwOTIsNyArMTg0NSw3IEBACiAgICAgICAgICAgICAgICAnZ3JvdXAnIGlzIGVpdGhlciBhbiBpbnRlZ2VyIGdyb3VwIG51bWJlciBvciBhIGdyb3VwIG5hbWUsCiAgICAgICAgICAgICAgICAndGhlbicgYW5kICdlbHNlJyBhcmUgc3ViLXJlZ2V4ZXMsIGFuZCAnZWxzZScgaXMgb3B0aW9uYWwuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+PSBncm91cHMpCisgICAgICAgICAgICBpZiAoYXJnID49IChzaXplX3QpZ3JvdXBzKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBHRVRfU0tJUF9BREooMSk7CiAgICAgICAgICAgICBjb2RlLS07IC8qIFRoZSBza2lwIGlzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBhcmchICovCkBAIC0zMTIxLDcgKzE4NzQsNyBAQAogICAgICAgICAgICAgICAgdG8gYWxsb3cgYXJiaXRyYXJ5IGp1bXBzIGFueXdoZXJlIGluIHRoZSBjb2RlOyBzbyB3ZSBqdXN0IGxvb2sKICAgICAgICAgICAgICAgIGZvciBhIEpVTVAgb3Bjb2RlIHByZWNlZGluZyBvdXIgc2tpcCB0YXJnZXQuCiAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCBlbmQtY29kZSAmJgorICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSAmJgogICAgICAgICAgICAgICAgIGNvZGVbc2tpcC0zXSA9PSBTUkVfT1BfSlVNUCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBWVFJBQ0UoKCJib3RoIHRoZW4gYW5kIGVsc2UgcGFydHMgcHJlc2VudFxuIikpOwpAQCAtMzIwNSw2ICsxOTU4LDEyIEBACiBzdGF0aWMgUHlPYmplY3QqCiBtYXRjaF9nZXRzbGljZV9ieV9pbmRleChNYXRjaE9iamVjdCogc2VsZiwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIGRlZikKIHsKKyAgICBQeV9zc2l6ZV90IGxlbmd0aDsKKyAgICBpbnQgaXNieXRlcywgY2hhcnNpemU7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICB2b2lkKiBwdHI7CisKICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHNlbGYtPmdyb3VwcykgewogICAgICAgICAvKiByYWlzZSBJbmRleEVycm9yIGlmIHdlIHdlcmUgZ2l2ZW4gYSBiYWQgZ3JvdXAgbnVtYmVyICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKQEAgLTMyMjIsOSArMTk4MSwxNCBAQAogICAgICAgICByZXR1cm4gZGVmOwogICAgIH0KIAotICAgIHJldHVybiBQeVNlcXVlbmNlX0dldFNsaWNlKAotICAgICAgICBzZWxmLT5zdHJpbmcsIHNlbGYtPm1hcmtbaW5kZXhdLCBzZWxmLT5tYXJrW2luZGV4KzFdCi0gICAgICAgICk7CisgICAgcHRyID0gZ2V0c3RyaW5nKHNlbGYtPnN0cmluZywgJmxlbmd0aCwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnZpZXcpOworICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gZ2V0c2xpY2UoaXNieXRlcywgcHRyLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmluZywgc2VsZi0+bWFya1tpbmRleF0sIHNlbGYtPm1hcmtbaW5kZXgrMV0pOworICAgIGlmIChpc2J5dGVzICYmIHZpZXcuYnVmICE9IE5VTEwpCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC0zNjQ0LDYgKzI0MDgsMjIgQEAKICAgICAgICAgcmV0dXJuIG1hdGNoX3JlZ3Moc2VsZik7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCittYXRjaF9yZXByKE1hdGNoT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKmdyb3VwMCA9IG1hdGNoX2dldHNsaWNlX2J5X2luZGV4KHNlbGYsIDAsIFB5X05vbmUpOworICAgIGlmIChncm91cDAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoCisgICAgICAgICAgICAiPCVzIG9iamVjdDsgc3Bhbj0oJWQsICVkKSwgbWF0Y2g9JS41MFI+IiwKKyAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUsCisgICAgICAgICAgICBzZWxmLT5tYXJrWzBdLCBzZWxmLT5tYXJrWzFdLCBncm91cDApOworICAgIFB5X0RFQ1JFRihncm91cDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIG1hdGNoX2dldHNldFtdID0gewogICAgIHsibGFzdGluZGV4IiwgKGdldHRlciltYXRjaF9sYXN0aW5kZXhfZ2V0LCAoc2V0dGVyKU5VTEx9LAogICAgIHsibGFzdGdyb3VwIiwgKGdldHRlciltYXRjaF9sYXN0Z3JvdXBfZ2V0LCAoc2V0dGVyKU5VTEx9LApAQCAtMzY3Miw3ICsyNDUyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpbWF0Y2hfcmVwciwgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwpAQCAtMzY5Niw3ICsyNDc2LDcgQEAKIH07CiAKIHN0YXRpYyBQeU9iamVjdCoKLXBhdHRlcm5fbmV3X21hdGNoKFBhdHRlcm5PYmplY3QqIHBhdHRlcm4sIFNSRV9TVEFURSogc3RhdGUsIGludCBzdGF0dXMpCitwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiBwYXR0ZXJuLCBTUkVfU1RBVEUqIHN0YXRlLCBQeV9zc2l6ZV90IHN0YXR1cykKIHsKICAgICAvKiBjcmVhdGUgbWF0Y2ggb2JqZWN0IChmcm9tIHN0YXRlIG9iamVjdCkgKi8KIApAQCAtMzc3NSwxNyArMjU1NSwxMyBAQAogewogICAgIFNSRV9TVEFURSogc3RhdGUgPSAmc2VsZi0+c3RhdGU7CiAgICAgUHlPYmplY3QqIG1hdGNoOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAKICAgICBzdGF0ZV9yZXNldChzdGF0ZSk7CiAKICAgICBzdGF0ZS0+cHRyID0gc3RhdGUtPnN0YXJ0OwogCi0gICAgaWYgKHN0YXRlLT5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX21hdGNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV91bWF0Y2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9tYXRjaChzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYtPnBhdHRlcm4pKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM4MDYsMTcgKzI1ODIsMTMgQEAKIHsKICAgICBTUkVfU1RBVEUqIHN0YXRlID0gJnNlbGYtPnN0YXRlOwogICAgIFB5T2JqZWN0KiBtYXRjaDsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogCiAgICAgc3RhdGVfcmVzZXQoc3RhdGUpOwogCiAgICAgc3RhdGUtPnB0ciA9IHN0YXRlLT5zdGFydDsKIAotICAgIGlmIChzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zOTY5LDcgKzI3NDEsNSBAQAogICAgIHJldHVybiBtOwogfQogCi0jZW5kaWYgLyogIWRlZmluZWQoU1JFX1JFQ1VSU0lWRSkgKi8KLQogLyogdmltOnRzPTQ6c3c9NDpldAogKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NzbC5jIGIvTW9kdWxlcy9fc3NsLmMKaW5kZXggNDk5ZThiYS4uODEzYzkyNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3NsLmMKKysrIGIvTW9kdWxlcy9fc3NsLmMKQEAgLTQyLDYgKzQyLDcwIEBACiAKICNlbmRpZgogCisvKiBJbmNsdWRlIHN5bWJvbHMgZnJvbSBfc29ja2V0IG1vZHVsZSAqLworI2luY2x1ZGUgInNvY2tldG1vZHVsZS5oIgorCitzdGF0aWMgUHlTb2NrZXRNb2R1bGVfQVBJT2JqZWN0IFB5U29ja2V0TW9kdWxlOworCisjaWYgZGVmaW5lZChIQVZFX1BPTExfSCkKKyNpbmNsdWRlIDxwb2xsLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX1BPTExfSCkKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2VuZGlmCisKKy8qIEluY2x1ZGUgT3BlblNTTCBoZWFkZXIgZmlsZXMgKi8KKyNpbmNsdWRlICJvcGVuc3NsL3JzYS5oIgorI2luY2x1ZGUgIm9wZW5zc2wvY3J5cHRvLmgiCisjaW5jbHVkZSAib3BlbnNzbC94NTA5LmgiCisjaW5jbHVkZSAib3BlbnNzbC94NTA5djMuaCIKKyNpbmNsdWRlICJvcGVuc3NsL3BlbS5oIgorI2luY2x1ZGUgIm9wZW5zc2wvc3NsLmgiCisjaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKKyNpbmNsdWRlICJvcGVuc3NsL3JhbmQuaCIKKworLyogU1NMIGVycm9yIG9iamVjdCAqLworc3RhdGljIFB5T2JqZWN0ICpQeVNTTEVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFplcm9SZXR1cm5FcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50UmVhZEVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFdhbnRXcml0ZUVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFN5c2NhbGxFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xFT0ZFcnJvck9iamVjdDsKKworLyogRXJyb3IgbWFwcGluZ3MgKi8KK3N0YXRpYyBQeU9iamVjdCAqZXJyX2NvZGVzX3RvX25hbWVzOworc3RhdGljIFB5T2JqZWN0ICplcnJfbmFtZXNfdG9fY29kZXM7CitzdGF0aWMgUHlPYmplY3QgKmxpYl9jb2Rlc190b19uYW1lczsKKworc3RydWN0IHB5X3NzbF9lcnJvcl9jb2RlIHsKKyAgICBjb25zdCBjaGFyICptbmVtb25pYzsKKyAgICBpbnQgbGlicmFyeSwgcmVhc29uOworfTsKK3N0cnVjdCBweV9zc2xfbGlicmFyeV9jb2RlIHsKKyAgICBjb25zdCBjaGFyICpsaWJyYXJ5OworICAgIGludCBjb2RlOworfTsKKworLyogSW5jbHVkZSBnZW5lcmF0ZWQgZGF0YSAoZXJyb3IgY29kZXMpICovCisjaW5jbHVkZSAiX3NzbF9kYXRhLmgiCisKKy8qIE9wZW5zc2wgY29tZXMgd2l0aCBUTFN2MS4xIGFuZCBUTFN2MS4yIGJldHdlZW4gMS4wLjBoIGFuZCAxLjAuMQorICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvbmV3cy9jaGFuZ2Vsb2cuaHRtbAorICovCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDAwTAorIyBkZWZpbmUgSEFWRV9UTFN2MV8yIDEKKyNlbHNlCisjIGRlZmluZSBIQVZFX1RMU3YxXzIgMAorI2VuZGlmCisKKy8qIFNOSSBzdXBwb3J0IChjbGllbnQtIGFuZCBzZXJ2ZXItc2lkZSkgYXBwZWFyZWQgaW4gT3BlblNTTCAxLjAuMCBhbmQgMC45LjhmCisgKiBUaGlzIGluY2x1ZGVzIHRoZSBTU0xfc2V0X1NTTF9DVFgoKSBmdW5jdGlvbi4KKyAqLworI2lmZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKKyMgZGVmaW5lIEhBVkVfU05JIDEKKyNlbHNlCisjIGRlZmluZSBIQVZFX1NOSSAwCisjZW5kaWYKKwogZW51bSBweV9zc2xfZXJyb3IgewogICAgIC8qIHRoZXNlIG1pcnJvciBzc2wuaCAqLwogICAgIFBZX1NTTF9FUlJPUl9OT05FLApAQCAtNzMsNTUgKzEzNywxNCBAQAogICAgIFBZX1NTTF9WRVJTSU9OX1NTTDIsCiAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMz0xLAogICAgIFBZX1NTTF9WRVJTSU9OX1NTTDIzLAorI2lmIEhBVkVfVExTdjFfMgorICAgIFBZX1NTTF9WRVJTSU9OX1RMUzEsCisgICAgUFlfU1NMX1ZFUlNJT05fVExTMV8xLAorICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMgorI2Vsc2UKICAgICBQWV9TU0xfVkVSU0lPTl9UTFMxCi19OwotCi1zdHJ1Y3QgcHlfc3NsX2Vycm9yX2NvZGUgewotICAgIGNvbnN0IGNoYXIgKm1uZW1vbmljOwotICAgIGludCBsaWJyYXJ5LCByZWFzb247Ci19OwotCi1zdHJ1Y3QgcHlfc3NsX2xpYnJhcnlfY29kZSB7Ci0gICAgY29uc3QgY2hhciAqbGlicmFyeTsKLSAgICBpbnQgY29kZTsKLX07Ci0KLS8qIEluY2x1ZGUgc3ltYm9scyBmcm9tIF9zb2NrZXQgbW9kdWxlICovCi0jaW5jbHVkZSAic29ja2V0bW9kdWxlLmgiCi0KLXN0YXRpYyBQeVNvY2tldE1vZHVsZV9BUElPYmplY3QgUHlTb2NrZXRNb2R1bGU7Ci0KLSNpZiBkZWZpbmVkKEhBVkVfUE9MTF9IKQotI2luY2x1ZGUgPHBvbGwuaD4KLSNlbGlmIGRlZmluZWQoSEFWRV9TWVNfUE9MTF9IKQotI2luY2x1ZGUgPHN5cy9wb2xsLmg+CiAjZW5kaWYKLQotLyogSW5jbHVkZSBPcGVuU1NMIGhlYWRlciBmaWxlcyAqLwotI2luY2x1ZGUgIm9wZW5zc2wvcnNhLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9jcnlwdG8uaCIKLSNpbmNsdWRlICJvcGVuc3NsL3g1MDkuaCIKLSNpbmNsdWRlICJvcGVuc3NsL3g1MDl2My5oIgotI2luY2x1ZGUgIm9wZW5zc2wvcGVtLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9zc2wuaCIKLSNpbmNsdWRlICJvcGVuc3NsL2Vyci5oIgotI2luY2x1ZGUgIm9wZW5zc2wvcmFuZC5oIgotCi0vKiBJbmNsdWRlIGdlbmVyYXRlZCBkYXRhIChlcnJvciBjb2RlcykgKi8KLSNpbmNsdWRlICJfc3NsX2RhdGEuaCIKLQotLyogU1NMIGVycm9yIG9iamVjdCAqLwotc3RhdGljIFB5T2JqZWN0ICpQeVNTTEVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTFplcm9SZXR1cm5FcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50UmVhZEVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTFdhbnRXcml0ZUVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTFN5c2NhbGxFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xFT0ZFcnJvck9iamVjdDsKLQotLyogRXJyb3IgbWFwcGluZ3MgKi8KLXN0YXRpYyBQeU9iamVjdCAqZXJyX2NvZGVzX3RvX25hbWVzOwotc3RhdGljIFB5T2JqZWN0ICplcnJfbmFtZXNfdG9fY29kZXM7Ci1zdGF0aWMgUHlPYmplY3QgKmxpYl9jb2Rlc190b19uYW1lczsKK307CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogCkBAIC0xNzMsNiArMTk2LDExIEBACiAjIGRlZmluZSBPUEVOU1NMX05PX0NPTVAKICNlbmRpZgogCisvKiBYNTA5X1ZFUklGWV9QQVJBTSBnb3QgYWRkZWQgdG8gT3BlblNTTCBpbiAwLjkuOCAqLworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMDkwODAwZkwKKyMgZGVmaW5lIEhBVkVfT1BFTlNTTF9WRVJJRllfUEFSQU0KKyNlbmRpZgorCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECkBAIC0xODEsMTQgKzIwOSwyMCBAQAogICAgIGNoYXIgKm5wbl9wcm90b2NvbHM7CiAgICAgaW50IG5wbl9wcm90b2NvbHNfbGVuOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisgICAgUHlPYmplY3QgKnNldF9ob3N0bmFtZTsKKyNlbmRpZgorICAgIGludCBjaGVja19ob3N0bmFtZTsKIH0gUHlTU0xDb250ZXh0OwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5T2JqZWN0ICpTb2NrZXQ7IC8qIHdlYWtyZWYgdG8gc29ja2V0IG9uIHdoaWNoIHdlJ3JlIGxheWVyZWQgKi8KICAgICBTU0wgKnNzbDsKKyAgICBQeVNTTENvbnRleHQgKmN0eDsgLyogd2Vha3JlZiB0byBTU0wgY29udGV4dCAqLwogICAgIFg1MDkgKnBlZXJfY2VydDsKLSAgICBpbnQgc2h1dGRvd25fc2Vlbl96ZXJvOworICAgIGNoYXIgc2h1dGRvd25fc2Vlbl96ZXJvOworICAgIGNoYXIgaGFuZHNoYWtlX2RvbmU7CiAgICAgZW51bSBweV9zc2xfc2VydmVyX29yX2NsaWVudCBzb2NrZXRfdHlwZTsKIH0gUHlTU0xTb2NrZXQ7CiAKQEAgLTMxNiwxNCArMzUwLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYl9vYmosIGVycnN0ciwgbGluZW5vKTsKICAgICBlbHNlCiAgICAgICAgIG1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyAoX3NzbC5jOiVkKSIsIGVycnN0ciwgbGluZW5vKTsKLQogICAgIGlmIChtc2cgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsOworCiAgICAgaW5pdF92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoImlOIiwgc3NsX2Vycm5vLCBtc2cpOworICAgIGlmIChpbml0X3ZhbHVlID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGVycl92YWx1ZSA9IFB5T2JqZWN0X0NhbGxPYmplY3QodHlwZSwgaW5pdF92YWx1ZSk7CiAgICAgUHlfREVDUkVGKGluaXRfdmFsdWUpOwogICAgIGlmIChlcnJfdmFsdWUgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsOworCiAgICAgaWYgKHJlYXNvbl9vYmogPT0gTlVMTCkKICAgICAgICAgcmVhc29uX29iaiA9IFB5X05vbmU7CiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoZXJyX3ZhbHVlLCAmUHlJZF9yZWFzb24sIHJlYXNvbl9vYmopKQpAQCAtNDM3LDExICs0NzUsMTMgQEAKICAqLwogCiBzdGF0aWMgUHlTU0xTb2NrZXQgKgotbmV3UHlTU0xTb2NrZXQoU1NMX0NUWCAqY3R4LCBQeVNvY2tldFNvY2tPYmplY3QgKnNvY2ssCituZXdQeVNTTFNvY2tldChQeVNTTENvbnRleHQgKnNzbGN0eCwgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrLAogICAgICAgICAgICAgICAgZW51bSBweV9zc2xfc2VydmVyX29yX2NsaWVudCBzb2NrZXRfdHlwZSwKICAgICAgICAgICAgICAgIGNoYXIgKnNlcnZlcl9ob3N0bmFtZSkKIHsKICAgICBQeVNTTFNvY2tldCAqc2VsZjsKKyAgICBTU0xfQ1RYICpjdHggPSBzc2xjdHgtPmN0eDsKKyAgICBsb25nIG1vZGU7CiAKICAgICBzZWxmID0gUHlPYmplY3RfTmV3KFB5U1NMU29ja2V0LCAmUHlTU0xTb2NrZXRfVHlwZSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKQEAgLTQ1MCw3ICs0OTAsMTAgQEAKICAgICBzZWxmLT5wZWVyX2NlcnQgPSBOVUxMOwogICAgIHNlbGYtPnNzbCA9IE5VTEw7CiAgICAgc2VsZi0+U29ja2V0ID0gTlVMTDsKKyAgICBzZWxmLT5jdHggPSBzc2xjdHg7CiAgICAgc2VsZi0+c2h1dGRvd25fc2Vlbl96ZXJvID0gMDsKKyAgICBzZWxmLT5oYW5kc2hha2VfZG9uZSA9IDA7CisgICAgUHlfSU5DUkVGKHNzbGN0eCk7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhlIFNTTCBlcnJvciBzdGF0ZSBpcyBpbml0aWFsaXplZCAqLwogICAgICh2b2lkKSBFUlJfZ2V0X3N0YXRlKCk7CkBAIC00NTksMTIgKzUwMiwxNSBAQAogICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzZWxmLT5zc2wgPSBTU0xfbmV3KGN0eCk7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBTU0xfc2V0X2ZkKHNlbGYtPnNzbCwgc29jay0+c29ja19mZCk7CisgICAgU1NMX3NldF9hcHBfZGF0YShzZWxmLT5zc2wsc2VsZik7CisgICAgU1NMX3NldF9mZChzZWxmLT5zc2wsIFB5X1NBRkVfRE9XTkNBU1Qoc29jay0+c29ja19mZCwgU09DS0VUX1QsIGludCkpOworICAgIG1vZGUgPSBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUjsKICNpZmRlZiBTU0xfTU9ERV9BVVRPX1JFVFJZCi0gICAgU1NMX3NldF9tb2RlKHNlbGYtPnNzbCwgU1NMX01PREVfQVVUT19SRVRSWSk7CisgICAgbW9kZSB8PSBTU0xfTU9ERV9BVVRPX1JFVFJZOwogI2VuZGlmCisgICAgU1NMX3NldF9tb2RlKHNlbGYtPnNzbCwgbW9kZSk7CiAKLSNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjaWYgSEFWRV9TTkkKICAgICBpZiAoc2VydmVyX2hvc3RuYW1lICE9IE5VTEwpCiAgICAgICAgIFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShzZWxmLT5zc2wsIHNlcnZlcl9ob3N0bmFtZSk7CiAjZW5kaWYKQEAgLTQ4Niw2ICs1MzIsMTAgQEAKIAogICAgIHNlbGYtPnNvY2tldF90eXBlID0gc29ja2V0X3R5cGU7CiAgICAgc2VsZi0+U29ja2V0ID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgc29jaywgTlVMTCk7CisgICAgaWYgKHNlbGYtPlNvY2tldCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC01NTIsNiArNjAyLDcgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc2VsZi0+cGVlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNlbGYtPnNzbCk7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBzZWxmLT5oYW5kc2hha2VfZG9uZSA9IDE7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC05MTgsNiArOTY5LDEyNiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorX2dldF9haWFfdXJpKFg1MDkgKmNlcnRpZmljYXRlLCBpbnQgbmlkKSB7CisgICAgUHlPYmplY3QgKmxzdCA9IE5VTEwsICpvc3RyID0gTlVMTDsKKyAgICBpbnQgaSwgcmVzdWx0OworICAgIEFVVEhPUklUWV9JTkZPX0FDQ0VTUyAqaW5mbzsKKworICAgIGluZm8gPSBYNTA5X2dldF9leHRfZDJpKGNlcnRpZmljYXRlLCBOSURfaW5mb19hY2Nlc3MsIE5VTEwsIE5VTEwpOworICAgIGlmICgoaW5mbyA9PSBOVUxMKSB8fCAoc2tfQUNDRVNTX0RFU0NSSVBUSU9OX251bShpbmZvKSA9PSAwKSkgeworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICBpZiAoKGxzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBza19BQ0NFU1NfREVTQ1JJUFRJT05fbnVtKGluZm8pOyBpKyspIHsKKyAgICAgICAgQUNDRVNTX0RFU0NSSVBUSU9OICphZCA9IHNrX0FDQ0VTU19ERVNDUklQVElPTl92YWx1ZShpbmZvLCBpKTsKKyAgICAgICAgQVNOMV9JQTVTVFJJTkcgKnVyaTsKKworICAgICAgICBpZiAoKE9CSl9vYmoybmlkKGFkLT5tZXRob2QpICE9IG5pZCkgfHwKKyAgICAgICAgICAgICAgICAoYWQtPmxvY2F0aW9uLT50eXBlICE9IEdFTl9VUkkpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB1cmkgPSBhZC0+bG9jYXRpb24tPmQudW5pZm9ybVJlc291cmNlSWRlbnRpZmllcjsKKyAgICAgICAgb3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKXVyaS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmktPmxlbmd0aCk7CisgICAgICAgIGlmIChvc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBQeUxpc3RfQXBwZW5kKGxzdCwgb3N0cik7CisgICAgICAgIFB5X0RFQ1JFRihvc3RyKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0KKyAgICBBVVRIT1JJVFlfSU5GT19BQ0NFU1NfZnJlZShpbmZvKTsKKworICAgIC8qIGNvbnZlcnQgdG8gdHVwbGUgb3IgTm9uZSAqLworICAgIGlmIChQeUxpc3RfU2l6ZShsc3QpID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGxzdCk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICp0dXA7CisgICAgICAgIHR1cCA9IFB5TGlzdF9Bc1R1cGxlKGxzdCk7CisgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICByZXR1cm4gdHVwOworICAgIH0KKworICBmYWlsOgorICAgIEFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlKGluZm8pOworICAgIFB5X1hERUNSRUYobHN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19nZXRfY3JsX2RwKFg1MDkgKmNlcnRpZmljYXRlKSB7CisgICAgU1RBQ0tfT0YoRElTVF9QT0lOVCkgKmRwczsKKyAgICBpbnQgaSwgaiwgcmVzdWx0OworICAgIFB5T2JqZWN0ICpsc3Q7CisKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDAwMTAwMEwKKyAgICBkcHMgPSBYNTA5X2dldF9leHRfZDJpKGNlcnRpZmljYXRlLCBOSURfY3JsX2Rpc3RyaWJ1dGlvbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyNlbHNlCisgICAgLyogQ2FsbHMgeDUwOXYzX2NhY2hlX2V4dGVuc2lvbnMgYW5kIHNldHMgdXAgY3JsZHAgKi8KKyAgICBYNTA5X2NoZWNrX2NhKGNlcnRpZmljYXRlKTsKKyAgICBkcHMgPSBjZXJ0aWZpY2F0ZS0+Y3JsZHA7CisjZW5kaWYKKworICAgIGlmIChkcHMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICBpZiAoKGxzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZm9yIChpPTA7IGkgPCBza19ESVNUX1BPSU5UX251bShkcHMpOyBpKyspIHsKKyAgICAgICAgRElTVF9QT0lOVCAqZHA7CisgICAgICAgIFNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmduczsKKworICAgICAgICBkcCA9IHNrX0RJU1RfUE9JTlRfdmFsdWUoZHBzLCBpKTsKKyAgICAgICAgZ25zID0gZHAtPmRpc3Rwb2ludC0+bmFtZS5mdWxsbmFtZTsKKworICAgICAgICBmb3IgKGo9MDsgaiA8IHNrX0dFTkVSQUxfTkFNRV9udW0oZ25zKTsgaisrKSB7CisgICAgICAgICAgICBHRU5FUkFMX05BTUUgKmduOworICAgICAgICAgICAgQVNOMV9JQTVTVFJJTkcgKnVyaTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvdXJpOworCisgICAgICAgICAgICBnbiA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZShnbnMsIGopOworICAgICAgICAgICAgaWYgKGduLT50eXBlICE9IEdFTl9VUkkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVyaSA9IGduLT5kLnVuaWZvcm1SZXNvdXJjZUlkZW50aWZpZXI7CisgICAgICAgICAgICBvdXJpID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopdXJpLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmktPmxlbmd0aCk7CisgICAgICAgICAgICBpZiAob3VyaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxzdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgPSBQeUxpc3RfQXBwZW5kKGxzdCwgb3VyaSk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3VyaSk7CisgICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8qIGNvbnZlcnQgdG8gdHVwbGUgb3IgTm9uZSAqLworICAgIGlmIChQeUxpc3RfU2l6ZShsc3QpID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGxzdCk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICp0dXA7CisgICAgICAgIHR1cCA9IFB5TGlzdF9Bc1R1cGxlKGxzdCk7CisgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICByZXR1cm4gdHVwOworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0ICoKIF9kZWNvZGVfY2VydGlmaWNhdGUoWDUwOSAqY2VydGlmaWNhdGUpIHsKIAogICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwpAQCAtOTI3LDkgKzEwOTgsMTAgQEAKICAgICBQeU9iamVjdCAqaXNzdWVyOwogICAgIFB5T2JqZWN0ICp2ZXJzaW9uOwogICAgIFB5T2JqZWN0ICpzbl9vYmo7CisgICAgUHlPYmplY3QgKm9iajsKICAgICBBU04xX0lOVEVHRVIgKnNlcmlhbE51bWJlcjsKICAgICBjaGFyIGJ1ZlsyMDQ4XTsKLSAgICBpbnQgbGVuOworICAgIGludCBsZW4sIHJlc3VsdDsKICAgICBBU04xX1RJTUUgKm5vdEJlZm9yZSwgKm5vdEFmdGVyOwogICAgIFB5T2JqZWN0ICpwbm90QmVmb3JlLCAqcG5vdEFmdGVyOwogCkBAIC0xMDM1LDYgKzEyMDcsNDEgQEAKICAgICAgICAgUHlfREVDUkVGKHBlZXJfYWx0X25hbWVzKTsKICAgICB9CiAKKyAgICAvKiBBdXRob3JpdHkgSW5mb3JtYXRpb24gQWNjZXNzOiBPQ1NQIFVSSXMgKi8KKyAgICBvYmogPSBfZ2V0X2FpYV91cmkoY2VydGlmaWNhdGUsIE5JRF9hZF9PQ1NQKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9IGVsc2UgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHJldHZhbCwgIk9DU1AiLCBvYmopOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvYmogPSBfZ2V0X2FpYV91cmkoY2VydGlmaWNhdGUsIE5JRF9hZF9jYV9pc3N1ZXJzKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9IGVsc2UgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHJldHZhbCwgImNhSXNzdWVycyIsIG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byBmYWlsMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENEUCAoQ1JMIGRpc3RyaWJ1dGlvbiBwb2ludHMpICovCisgICAgb2JqID0gX2dldF9jcmxfZHAoY2VydGlmaWNhdGUpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBnb3RvIGZhaWwxOworICAgIH0gZWxzZSBpZiAob2JqICE9IFB5X05vbmUpIHsKKyAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcocmV0dmFsLCAiY3JsRGlzdHJpYnV0aW9uUG9pbnRzIiwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWwxOworICAgICAgICB9CisgICAgfQorCiAgICAgQklPX2ZyZWUoYmlvYnVmKTsKICAgICByZXR1cm4gcmV0dmFsOwogCkBAIC0xMDQ2LDYgKzEyNTMsMjQgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK19jZXJ0aWZpY2F0ZV90b19kZXIoWDUwOSAqY2VydGlmaWNhdGUpCit7CisgICAgdW5zaWduZWQgY2hhciAqYnl0ZXNfYnVmID0gTlVMTDsKKyAgICBpbnQgbGVuOworICAgIFB5T2JqZWN0ICpyZXR2YWw7CisKKyAgICBieXRlc19idWYgPSBOVUxMOworICAgIGxlbiA9IGkyZF9YNTA5KGNlcnRpZmljYXRlLCAmYnl0ZXNfYnVmKTsKKyAgICBpZiAobGVuIDwgMCkgeworICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIC8qIHRoaXMgaXMgYWN0dWFsbHkgYW4gaW1tdXRhYmxlIGJ5dGVzIHNlcXVlbmNlICovCisgICAgcmV0dmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKSBieXRlc19idWYsIGxlbik7CisgICAgT1BFTlNTTF9mcmVlKGJ5dGVzX2J1Zik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKIFB5U1NMX3Rlc3RfZGVjb2RlX2NlcnRpZmljYXRlIChQeU9iamVjdCAqbW9kLCBQeU9iamVjdCAqYXJncykgewpAQCAtMTA5MSwzNCArMTMxNiwyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFB5U1NMX3BlZXJjZXJ0KFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKLSAgICBpbnQgbGVuOwogICAgIGludCB2ZXJpZmljYXRpb247CiAgICAgaW50IGJpbmFyeV9tb2RlID0gMDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHA6cGVlcl9jZXJ0aWZpY2F0ZSIsICZiaW5hcnlfbW9kZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKCFzZWxmLT5oYW5kc2hha2VfZG9uZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kc2hha2Ugbm90IGRvbmUgeWV0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBpZiAoIXNlbGYtPnBlZXJfY2VydCkKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAKICAgICBpZiAoYmluYXJ5X21vZGUpIHsKICAgICAgICAgLyogcmV0dXJuIGNlcnQgaW4gREVSLWVuY29kZWQgZm9ybWF0ICovCi0KLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXNfYnVmID0gTlVMTDsKLQotICAgICAgICBieXRlc19idWYgPSBOVUxMOwotICAgICAgICBsZW4gPSBpMmRfWDUwOShzZWxmLT5wZWVyX2NlcnQsICZieXRlc19idWYpOwotICAgICAgICBpZiAobGVuIDwgMCkgewotICAgICAgICAgICAgUHlTU0xfU2V0RXJyb3Ioc2VsZiwgbGVuLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgLyogdGhpcyBpcyBhY3R1YWxseSBhbiBpbW11dGFibGUgYnl0ZXMgc2VxdWVuY2UgKi8KLSAgICAgICAgcmV0dmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQotICAgICAgICAgICgoY29uc3QgY2hhciAqKSBieXRlc19idWYsIGxlbik7Ci0gICAgICAgIE9QRU5TU0xfZnJlZShieXRlc19idWYpOwotICAgICAgICByZXR1cm4gcmV0dmFsOwotCisgICAgICAgIHJldHVybiBfY2VydGlmaWNhdGVfdG9fZGVyKHNlbGYtPnBlZXJfY2VydCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmVyaWZpY2F0aW9uID0gU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGUoU1NMX2dldF9TU0xfQ1RYKHNlbGYtPnNzbCkpOwogICAgICAgICBpZiAoKHZlcmlmaWNhdGlvbiAmIFNTTF9WRVJJRllfUEVFUikgPT0gMCkKQEAgLTEyMjEsNiArMTQzNSw0MyBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBQeVNTTENvbnRleHQgKlB5U1NMX2dldF9jb250ZXh0KFB5U1NMU29ja2V0ICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7CisgICAgUHlfSU5DUkVGKHNlbGYtPmN0eCk7CisgICAgcmV0dXJuIHNlbGYtPmN0eDsKK30KKworc3RhdGljIGludCBQeVNTTF9zZXRfY29udGV4dChQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7CisKKyAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKHZhbHVlLCAmUHlTU0xDb250ZXh0X1R5cGUpKSB7CisjaWYgIUhBVkVfU05JCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLCAic2V0dGluZyBhIHNvY2tldCdzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb250ZXh0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBPcGVuU1NMIGxpYnJhcnkiKTsKKyAgICAgICAgcmV0dXJuIC0xOworI2Vsc2UKKyAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYtPmN0eCk7CisgICAgICAgIHNlbGYtPmN0eCA9IChQeVNTTENvbnRleHQgKikgdmFsdWU7CisgICAgICAgIFNTTF9zZXRfU1NMX0NUWChzZWxmLT5zc2wsIHNlbGYtPmN0eC0+Y3R4KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJUaGUgdmFsdWUgbXVzdCBiZSBhIFNTTENvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfc2V0X2NvbnRleHRfZG9jLAorIl9zZXR0ZXJfY29udGV4dChjdHgpXG5cCitcCitUaGlzIGNoYW5nZXMgdGhlIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTU0xTb2NrZXQuIFRoaXMgaXMgdHlwaWNhbGx5XG5cCit1c2VkIGZyb20gd2l0aGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gc2V0IGJ5IHRoZSBzZXRfc2VydmVybmFtZV9jYWxsYmFja1xuXAorb24gdGhlIFNTTENvbnRleHQgdG8gY2hhbmdlIHRoZSBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlXG5cCitTU0xTb2NrZXQgYmVmb3JlIHRoZSBjcnlwdG9ncmFwaGljIGV4Y2hhbmdlIGhhbmRzaGFrZSBtZXNzYWdlc1xuIik7CisKKworCiBzdGF0aWMgdm9pZCBQeVNTTF9kZWFsbG9jKFB5U1NMU29ja2V0ICpzZWxmKQogewogICAgIGlmIChzZWxmLT5wZWVyX2NlcnQpICAgICAgICAvKiBQb3NzaWJsZSBub3QgdG8gaGF2ZSBvbmU/ICovCkBAIC0xMjI4LDYgKzE0NzksNyBAQAogICAgIGlmIChzZWxmLT5zc2wpCiAgICAgICAgIFNTTF9mcmVlKHNlbGYtPnNzbCk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5Tb2NrZXQpOworICAgIFB5X1hERUNSRUYoc2VsZi0+Y3R4KTsKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKQEAgLTEyODYsOSArMTUzOCwxMSBAQAogICAgIC8qIFNlZSBpZiB0aGUgc29ja2V0IGlzIHJlYWR5ICovCiAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGlmICh3cml0aW5nKQotICAgICAgICByYyA9IHNlbGVjdChzLT5zb2NrX2ZkKzEsIE5VTEwsICZmZHMsIE5VTEwsICZ0dik7CisgICAgICAgIHJjID0gc2VsZWN0KFB5X1NBRkVfRE9XTkNBU1Qocy0+c29ja19mZCsxLCBTT0NLRVRfVCwgaW50KSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCwgJmZkcywgTlVMTCwgJnR2KTsKICAgICBlbHNlCi0gICAgICAgIHJjID0gc2VsZWN0KHMtPnNvY2tfZmQrMSwgJmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKKyAgICAgICAgcmMgPSBzZWxlY3QoUHlfU0FGRV9ET1dOQ0FTVChzLT5zb2NrX2ZkKzEsIFNPQ0tFVF9ULCBpbnQpLAorICAgICAgICAgICAgICAgICAgICAmZmRzLCBOVUxMLCBOVUxMLCAmdHYpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCiAKICNpZmRlZiBIQVZFX1BPTEwKQEAgLTE2NjgsNiArMTkyMiwxMiBAQAogCiAjZW5kaWYgLyogSEFWRV9PUEVOU1NMX0ZJTklTSEVEICovCiAKK3N0YXRpYyBQeUdldFNldERlZiBzc2xfZ2V0c2V0bGlzdFtdID0geworICAgIHsiY29udGV4dCIsIChnZXR0ZXIpIFB5U1NMX2dldF9jb250ZXh0LAorICAgICAgICAgICAgICAgIChzZXR0ZXIpIFB5U1NMX3NldF9jb250ZXh0LCBQeVNTTF9zZXRfY29udGV4dF9kb2N9LAorICAgIHtOVUxMfSwgICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKwogc3RhdGljIFB5TWV0aG9kRGVmIFB5U1NMTWV0aG9kc1tdID0gewogICAgIHsiZG9faGFuZHNoYWtlIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX1NTTGRvX2hhbmRzaGFrZSwgTUVUSF9OT0FSR1N9LAogICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pUHlTU0xfU1NMd3JpdGUsIE1FVEhfVkFSQVJHUywKQEAgLTE3MjIsNiArMTk4Miw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICBQeVNTTE1ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWVtYmVycyovCisgICAgc3NsX2dldHNldGxpc3QsICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLwogfTsKIAogCkBAIC0xNzQ2LDYgKzIwMDgsMTIgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMSkKICAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfbWV0aG9kKCkpOworI2lmIEhBVkVfVExTdjFfMgorICAgIGVsc2UgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMV8xKQorICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhUTFN2MV8xX21ldGhvZCgpKTsKKyAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1RMUzFfMikKKyAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfMl9tZXRob2QoKSk7CisjZW5kaWYKICAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1NTTDMpCiAgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFNTTHYzX21ldGhvZCgpKTsKICNpZm5kZWYgT1BFTlNTTF9OT19TU0wyCkBAIC0xNzc5LDYgKzIwNDcsMTEgQEAKICNpZmRlZiBPUEVOU1NMX05QTl9ORUdPVElBVEVECiAgICAgc2VsZi0+bnBuX3Byb3RvY29scyA9IE5VTEw7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKyAgICBzZWxmLT5zZXRfaG9zdG5hbWUgPSBOVUxMOworI2VuZGlmCisgICAgLyogRG9uJ3QgY2hlY2sgaG9zdCBuYW1lIGJ5IGRlZmF1bHQgKi8KKyAgICBzZWxmLT5jaGVja19ob3N0bmFtZSA9IDA7CiAgICAgLyogRGVmYXVsdHMgKi8KICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc2VsZi0+Y3R4LCBTU0xfVkVSSUZZX05PTkUsIE5VTEwpOwogICAgIG9wdGlvbnMgPSBTU0xfT1BfQUxMICYgflNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFM7CkBAIC0xNzk0LDkgKzIwNjcsMjggQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKIH0KIAorc3RhdGljIGludAorY29udGV4dF90cmF2ZXJzZShQeVNTTENvbnRleHQgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIFB5X1ZJU0lUKHNlbGYtPnNldF9ob3N0bmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY29udGV4dF9jbGVhcihQeVNTTENvbnRleHQgKnNlbGYpCit7CisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisgICAgUHlfQ0xFQVIoc2VsZi0+c2V0X2hvc3RuYW1lKTsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogY29udGV4dF9kZWFsbG9jKFB5U1NMQ29udGV4dCAqc2VsZikKIHsKKyAgICBjb250ZXh0X2NsZWFyKHNlbGYpOwogICAgIFNTTF9DVFhfZnJlZShzZWxmLT5jdHgpOwogI2lmZGVmIE9QRU5TU0xfTlBOX05FR09USUFURUQKICAgICBQeU1lbV9GcmVlKHNlbGYtPm5wbl9wcm90b2NvbHMpOwpAQCAtMTk0MywxMCArMjIzNSw1NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgZm9yIHZlcmlmeV9tb2RlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgaWYgKG1vZGUgPT0gU1NMX1ZFUklGWV9OT05FICYmIHNlbGYtPmNoZWNrX2hvc3RuYW1lKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBzZXQgdmVyaWZ5X21vZGUgdG8gQ0VSVF9OT05FIHdoZW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgImNoZWNrX2hvc3RuYW1lIGlzIGVuYWJsZWQuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHNlbGYtPmN0eCwgbW9kZSwgTlVMTCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBIQVZFX09QRU5TU0xfVkVSSUZZX1BBUkFNCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0X3ZlcmlmeV9mbGFncyhQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmMpCit7CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGZsYWdzID0gWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2ZsYWdzKHN0b3JlLT5wYXJhbSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGZsYWdzKTsKK30KKworc3RhdGljIGludAorc2V0X3ZlcmlmeV9mbGFncyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmcsIHZvaWQgKmMpCit7CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIGZsYWdzLCBzZXQsIGNsZWFyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJrIiwgJm5ld19mbGFncykpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmbGFncyA9IFg1MDlfVkVSSUZZX1BBUkFNX2dldF9mbGFncyhzdG9yZS0+cGFyYW0pOworICAgIGNsZWFyID0gZmxhZ3MgJiB+bmV3X2ZsYWdzOworICAgIHNldCA9IH5mbGFncyAmIG5ld19mbGFnczsKKyAgICBpZiAoY2xlYXIpIHsKKyAgICAgICAgaWYgKCFYNTA5X1ZFUklGWV9QQVJBTV9jbGVhcl9mbGFncyhzdG9yZS0+cGFyYW0sIGNsZWFyKSkgeworICAgICAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNldCkgeworICAgICAgICBpZiAoIVg1MDlfVkVSSUZZX1BBUkFNX3NldF9mbGFncyhzdG9yZS0+cGFyYW0sIHNldCkpIHsKKyAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfb3B0aW9ucyhQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmMpCiB7CkBAIC0xOTc2LDYgKzIzMTQsMzAgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2dldF9jaGVja19ob3N0bmFtZShQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmMpCit7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhzZWxmLT5jaGVja19ob3N0bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9jaGVja19ob3N0bmFtZShQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmcsIHZvaWQgKmMpCit7CisgICAgaW50IGNoZWNrX2hvc3RuYW1lOworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAicCIsICZjaGVja19ob3N0bmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoY2hlY2tfaG9zdG5hbWUgJiYKKyAgICAgICAgICAgIFNTTF9DVFhfZ2V0X3ZlcmlmeV9tb2RlKHNlbGYtPmN0eCkgPT0gU1NMX1ZFUklGWV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNoZWNrX2hvc3RuYW1lIG5lZWRzIGEgU1NMIGNvbnRleHQgd2l0aCBlaXRoZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgIkNFUlRfT1BUSU9OQUwgb3IgQ0VSVF9SRVFVSVJFRCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbGYtPmNoZWNrX2hvc3RuYW1lID0gY2hlY2tfaG9zdG5hbWU7CisgICAgcmV0dXJuIDA7Cit9CisKKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5VGhyZWFkU3RhdGUgKnRocmVhZF9zdGF0ZTsKICAgICBQeU9iamVjdCAqY2FsbGFibGU7CkBAIC0yMDIwLDggKzIzODIsOCBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIGZyZWUocHdfaW5mby0+cGFzc3dvcmQpOwotICAgIHB3X2luZm8tPnBhc3N3b3JkID0gbWFsbG9jKHNpemUpOworICAgIFB5TWVtX0ZyZWUocHdfaW5mby0+cGFzc3dvcmQpOworICAgIHB3X2luZm8tPnBhc3N3b3JkID0gUHlNZW1fTWFsbG9jKHNpemUpOwogICAgIGlmICghcHdfaW5mby0+cGFzc3dvcmQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBhbGxvY2F0ZSBwYXNzd29yZCBidWZmZXIiKTsKQEAgLTIxNjUsNzIgKzI1MjcsMjEyIEBACiAgICAgfQogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfY2IpOwogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfdXNlcmRhdGEpOwotICAgIGZyZWUocHdfaW5mby5wYXNzd29yZCk7CisgICAgUHlNZW1fRnJlZShwd19pbmZvLnBhc3N3b3JkKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIAogZXJyb3I6CiAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Ioc2VsZi0+Y3R4LCBvcmlnX3Bhc3N3ZF9jYik7CiAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGEoc2VsZi0+Y3R4LCBvcmlnX3Bhc3N3ZF91c2VyZGF0YSk7Ci0gICAgZnJlZShwd19pbmZvLnBhc3N3b3JkKTsKKyAgICBQeU1lbV9GcmVlKHB3X2luZm8ucGFzc3dvcmQpOwogICAgIFB5X1hERUNSRUYoa2V5ZmlsZV9ieXRlcyk7CiAgICAgUHlfWERFQ1JFRihjZXJ0ZmlsZV9ieXRlcyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgcmV0dXJucyAtMSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50CitfYWRkX2NhX2NlcnRzKFB5U1NMQ29udGV4dCAqc2VsZiwgdm9pZCAqZGF0YSwgUHlfc3NpemVfdCBsZW4sCisgICAgICAgICAgICAgIGludCBmaWxldHlwZSkKK3sKKyAgICBCSU8gKmJpb2J1ZiA9IE5VTEw7CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgaW50IHJldHZhbCA9IDAsIGVyciwgbG9hZGVkID0gMDsKKworICAgIGFzc2VydChmaWxldHlwZSA9PSBTU0xfRklMRVRZUEVfQVNOMSB8fCBmaWxldHlwZSA9PSBTU0xfRklMRVRZUEVfUEVNKTsKKworICAgIGlmIChsZW4gPD0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFbXB0eSBjZXJ0aWZpY2F0ZSBkYXRhIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKGxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2VydGlmaWNhdGUgZGF0YSBpcyB0b28gbG9uZy4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGJpb2J1ZiA9IEJJT19uZXdfbWVtX2J1ZihkYXRhLCAoaW50KWxlbik7CisgICAgaWYgKGJpb2J1ZiA9PSBOVUxMKSB7CisgICAgICAgIF9zZXRTU0xFcnJvcigiQ2FuJ3QgYWxsb2NhdGUgYnVmZmVyIiwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGFzc2VydChzdG9yZSAhPSBOVUxMKTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFg1MDkgKmNlcnQgPSBOVUxMOworICAgICAgICBpbnQgcjsKKworICAgICAgICBpZiAoZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX0FTTjEpIHsKKyAgICAgICAgICAgIGNlcnQgPSBkMmlfWDUwOV9iaW8oYmlvYnVmLCBOVUxMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNlcnQgPSBQRU1fcmVhZF9iaW9fWDUwOShiaW9idWYsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+Y3R4LT5kZWZhdWx0X3Bhc3N3ZF9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5jdHgtPmRlZmF1bHRfcGFzc3dkX2NhbGxiYWNrX3VzZXJkYXRhKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2VydCA9PSBOVUxMKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByID0gWDUwOV9TVE9SRV9hZGRfY2VydChzdG9yZSwgY2VydCk7CisgICAgICAgIFg1MDlfZnJlZShjZXJ0KTsKKyAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICBlcnIgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisgICAgICAgICAgICBpZiAoKEVSUl9HRVRfTElCKGVycikgPT0gRVJSX0xJQl9YNTA5KSAmJgorICAgICAgICAgICAgICAgIChFUlJfR0VUX1JFQVNPTihlcnIpID09IFg1MDlfUl9DRVJUX0FMUkVBRFlfSU5fSEFTSF9UQUJMRSkpIHsKKyAgICAgICAgICAgICAgICAvKiBjZXJ0IGFscmVhZHkgaW4gaGFzaCB0YWJsZSwgbm90IGFuIGVycm9yICovCisgICAgICAgICAgICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxvYWRlZCsrOworICAgIH0KKworICAgIGVyciA9IEVSUl9wZWVrX2xhc3RfZXJyb3IoKTsKKyAgICBpZiAoKGZpbGV0eXBlID09IFNTTF9GSUxFVFlQRV9BU04xKSAmJgorICAgICAgICAgICAgKGxvYWRlZCA+IDApICYmCisgICAgICAgICAgICAoRVJSX0dFVF9MSUIoZXJyKSA9PSBFUlJfTElCX0FTTjEpICYmCisgICAgICAgICAgICAoRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBBU04xX1JfSEVBREVSX1RPT19MT05HKSkgeworICAgICAgICAvKiBFT0YgQVNOMSBmaWxlLCBub3QgYW4gZXJyb3IgKi8KKyAgICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgICAgIHJldHZhbCA9IDA7CisgICAgfSBlbHNlIGlmICgoZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX1BFTSkgJiYKKyAgICAgICAgICAgICAgICAgICAobG9hZGVkID4gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAoRVJSX0dFVF9MSUIoZXJyKSA9PSBFUlJfTElCX1BFTSkgJiYKKyAgICAgICAgICAgICAgICAgICAoRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBQRU1fUl9OT19TVEFSVF9MSU5FKSkgeworICAgICAgICAvKiBFT0YgUEVNIGZpbGUsIG5vdCBhbiBlcnJvciAqLworICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgcmV0dmFsID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dmFsID0gLTE7CisgICAgfQorCisgICAgQklPX2ZyZWUoYmlvYnVmKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisKIHN0YXRpYyBQeU9iamVjdCAqCiBsb2FkX3ZlcmlmeV9sb2NhdGlvbnMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgY2hhciAqa3dsaXN0W10gPSB7ImNhZmlsZSIsICJjYXBhdGgiLCBOVUxMfTsKLSAgICBQeU9iamVjdCAqY2FmaWxlID0gTlVMTCwgKmNhcGF0aCA9IE5VTEw7CisgICAgY2hhciAqa3dsaXN0W10gPSB7ImNhZmlsZSIsICJjYXBhdGgiLCAiY2FkYXRhIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmNhZmlsZSA9IE5VTEwsICpjYXBhdGggPSBOVUxMLCAqY2FkYXRhID0gTlVMTDsKICAgICBQeU9iamVjdCAqY2FmaWxlX2J5dGVzID0gTlVMTCwgKmNhcGF0aF9ieXRlcyA9IE5VTEw7CiAgICAgY29uc3QgY2hhciAqY2FmaWxlX2J1ZiA9IE5VTEwsICpjYXBhdGhfYnVmID0gTlVMTDsKLSAgICBpbnQgcjsKKyAgICBpbnQgciA9IDAsIG9rID0gMTsKIAogICAgIGVycm5vID0gMDsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAotICAgICAgICAifE9POmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyIsIGt3bGlzdCwKLSAgICAgICAgJmNhZmlsZSwgJmNhcGF0aCkpCisgICAgICAgICJ8T09POmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyIsIGt3bGlzdCwKKyAgICAgICAgJmNhZmlsZSwgJmNhcGF0aCwgJmNhZGF0YSkpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKGNhZmlsZSA9PSBQeV9Ob25lKQogICAgICAgICBjYWZpbGUgPSBOVUxMOwogICAgIGlmIChjYXBhdGggPT0gUHlfTm9uZSkKICAgICAgICAgY2FwYXRoID0gTlVMTDsKLSAgICBpZiAoY2FmaWxlID09IE5VTEwgJiYgY2FwYXRoID09IE5VTEwpIHsKKyAgICBpZiAoY2FkYXRhID09IFB5X05vbmUpCisgICAgICAgIGNhZGF0YSA9IE5VTEw7CisKKyAgICBpZiAoY2FmaWxlID09IE5VTEwgJiYgY2FwYXRoID09IE5VTEwgJiYgY2FkYXRhID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjYWZpbGUgYW5kIGNhcGF0aCBjYW5ub3QgYmUgYm90aCBvbWl0dGVkIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgImNhZmlsZSwgY2FwYXRoIGFuZCBjYWRhdGEgY2Fubm90IGJlIGFsbCBvbWl0dGVkIik7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjYWZpbGUgJiYgIVB5VW5pY29kZV9GU0NvbnZlcnRlcihjYWZpbGUsICZjYWZpbGVfYnl0ZXMpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FmaWxlIHNob3VsZCBiZSBhIHZhbGlkIGZpbGVzeXN0ZW0gcGF0aCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKGNhcGF0aCAmJiAhUHlVbmljb2RlX0ZTQ29udmVydGVyKGNhcGF0aCwgJmNhcGF0aF9ieXRlcykpIHsKLSAgICAgICAgUHlfWERFQ1JFRihjYWZpbGVfYnl0ZXMpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhcGF0aCBzaG91bGQgYmUgYSB2YWxpZCBmaWxlc3lzdGVtIHBhdGgiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGlmIChjYWZpbGUpCi0gICAgICAgIGNhZmlsZV9idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhjYWZpbGVfYnl0ZXMpOwotICAgIGlmIChjYXBhdGgpCi0gICAgICAgIGNhcGF0aF9idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhjYXBhdGhfYnl0ZXMpOwotICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByID0gU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc2VsZi0+Y3R4LCBjYWZpbGVfYnVmLCBjYXBhdGhfYnVmKTsKLSAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgLyogdmFsaWRhdGEgY2FkYXRhIHR5cGUgYW5kIGxvYWQgY2FkYXRhICovCisgICAgaWYgKGNhZGF0YSkgeworICAgICAgICBQeV9idWZmZXIgYnVmOworICAgICAgICBQeU9iamVjdCAqY2FkYXRhX2FzY2lpID0gTlVMTDsKKworICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGNhZGF0YSwgJmJ1ZiwgUHlCVUZfU0lNUExFKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoIVB5QnVmZmVyX0lzQ29udGlndW91cygmYnVmLCAnQycpIHx8IGJ1Zi5uZGltID4gMSkgeworICAgICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhZGF0YSBzaG91bGQgYmUgYSBjb250aWd1b3VzIGJ1ZmZlciB3aXRoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgc2luZ2xlIGRpbWVuc2lvbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByID0gX2FkZF9jYV9jZXJ0cyhzZWxmLCBidWYuYnVmLCBidWYubGVuLCBTU0xfRklMRVRZUEVfQVNOMSk7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgICAgICAgICAgaWYgKHIgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGNhZGF0YV9hc2NpaSA9IFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nKGNhZGF0YSk7CisgICAgICAgICAgICBpZiAoY2FkYXRhX2FzY2lpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FkYXRhIHNob3VsZCBiZSBhIEFTQ0lJIHN0cmluZyBvciBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzLWxpa2Ugb2JqZWN0Iik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHIgPSBfYWRkX2NhX2NlcnRzKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjYWRhdGFfYXNjaWkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShjYWRhdGFfYXNjaWkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0ZJTEVUWVBFX1BFTSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY2FkYXRhX2FzY2lpKTsKKyAgICAgICAgICAgIGlmIChyID09IC0xKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGxvYWQgY2FmaWxlIG9yIGNhcGF0aCAqLworICAgIGlmIChjYWZpbGUgfHwgY2FwYXRoKSB7CisgICAgICAgIGlmIChjYWZpbGUpCisgICAgICAgICAgICBjYWZpbGVfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FmaWxlX2J5dGVzKTsKKyAgICAgICAgaWYgKGNhcGF0aCkKKyAgICAgICAgICAgIGNhcGF0aF9idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhjYXBhdGhfYnl0ZXMpOworICAgICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHIgPSBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzZWxmLT5jdHgsIGNhZmlsZV9idWYsIGNhcGF0aF9idWYpOworICAgICAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAociAhPSAxKSB7CisgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgICBpZiAoZXJybm8gIT0gMCkgeworICAgICAgICAgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOworICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBnb3RvIGVuZDsKKworICBlcnJvcjoKKyAgICBvayA9IDA7CisgIGVuZDoKICAgICBQeV9YREVDUkVGKGNhZmlsZV9ieXRlcyk7CiAgICAgUHlfWERFQ1JFRihjYXBhdGhfYnl0ZXMpOwotICAgIGlmIChyICE9IDEpIHsKLSAgICAgICAgaWYgKGVycm5vICE9IDApIHsKLSAgICAgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOwotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICAgIH0KKyAgICBpZiAob2spIHsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjIzOSw3ICsyNzQxLDcgQEAKICAgICBGSUxFICpmOwogICAgIERIICpkaDsKIAotICAgIGYgPSBfUHlfZm9wZW4oZmlsZXBhdGgsICJyYiIpOworICAgIGYgPSBfUHlfZm9wZW5fb2JqKGZpbGVwYXRoLCAicmIiKTsKICAgICBpZiAoZiA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBmaWxlcGF0aCk7CkBAIC0yMjg3LDcgKzI3ODksNyBAQAogICAgICAgICAgICAgJnNvY2ssICZzZXJ2ZXJfc2lkZSwKICAgICAgICAgICAgICJpZG5hIiwgJmhvc3RuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotI2lmbmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjaWYgIUhBVkVfU05JCiAgICAgICAgIFB5TWVtX0ZyZWUoaG9zdG5hbWUpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInNlcnZlcl9ob3N0bmFtZSBpcyBub3Qgc3VwcG9ydGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICJieSB5b3VyIE9wZW5TU0wgbGlicmFyeSIpOwpAQCAtMjI5NSw3ICsyNzk3LDcgQEAKICNlbmRpZgogICAgIH0KIAotICAgIHJlcyA9IChQeU9iamVjdCAqKSBuZXdQeVNTTFNvY2tldChzZWxmLT5jdHgsIHNvY2ssIHNlcnZlcl9zaWRlLAorICAgIHJlcyA9IChQeU9iamVjdCAqKSBuZXdQeVNTTFNvY2tldChzZWxmLCBzb2NrLCBzZXJ2ZXJfc2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWUpOwogICAgIGlmIChob3N0bmFtZSAhPSBOVUxMKQogICAgICAgICBQeU1lbV9GcmVlKGhvc3RuYW1lKTsKQEAgLTIzODAsOSArMjg4MiwyNTkgQEAKIH0KICNlbmRpZgogCisjaWYgSEFWRV9TTkkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpCitzdGF0aWMgaW50Citfc2VydmVybmFtZV9jYWxsYmFjayhTU0wgKnMsIGludCAqYWwsIHZvaWQgKmFyZ3MpCit7CisgICAgaW50IHJldDsKKyAgICBQeVNTTENvbnRleHQgKnNzbF9jdHggPSAoUHlTU0xDb250ZXh0ICopIGFyZ3M7CisgICAgUHlTU0xTb2NrZXQgKnNzbDsKKyAgICBQeU9iamVjdCAqc2VydmVybmFtZV9vOworICAgIFB5T2JqZWN0ICpzZXJ2ZXJuYW1lX2lkbmE7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICAvKiBUaGUgaGlnaC1sZXZlbCBzc2wuU1NMU29ja2V0IG9iamVjdCAqLworICAgIFB5T2JqZWN0ICpzc2xfc29ja2V0OworICAgIGNvbnN0IGNoYXIgKnNlcnZlcm5hbWUgPSBTU0xfZ2V0X3NlcnZlcm5hbWUocywgVExTRVhUX05BTUVUWVBFX2hvc3RfbmFtZSk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisjZW5kaWYKKworICAgIGlmIChzc2xfY3R4LT5zZXRfaG9zdG5hbWUgPT0gTlVMTCkgeworICAgICAgICAvKiByZW1vdmUgcmFjZSBjb25kaXRpb24gaW4gdGhpcyB0aGUgY2FsbCBiYWNrIHdoaWxlIGlmIHJlbW92aW5nIHRoZQorICAgICAgICAgKiBjYWxsYmFjayBpcyBpbiBwcm9ncmVzcyAqLworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnc3RhdGUpOworI2VuZGlmCisgICAgICAgIHJldHVybiBTU0xfVExTRVhUX0VSUl9PSzsKKyAgICB9CisKKyAgICBzc2wgPSBTU0xfZ2V0X2FwcF9kYXRhKHMpOworICAgIGFzc2VydChQeVNTTFNvY2tldF9DaGVjayhzc2wpKTsKKyAgICBzc2xfc29ja2V0ID0gUHlXZWFrcmVmX0dldE9iamVjdChzc2wtPlNvY2tldCk7CisgICAgUHlfSU5DUkVGKHNzbF9zb2NrZXQpOworICAgIGlmIChzc2xfc29ja2V0ID09IFB5X05vbmUpIHsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAoc2VydmVybmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Moc3NsX2N0eC0+c2V0X2hvc3RuYW1lLCBzc2xfc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUsIHNzbF9jdHgsIE5VTEwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc2VydmVybmFtZV9vID0gUHlCeXRlc19Gcm9tU3RyaW5nKHNlcnZlcm5hbWUpOworICAgICAgICBpZiAoc2VydmVybmFtZV9vID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZSgoUHlPYmplY3QgKikgc3NsX2N0eCk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHNlcnZlcm5hbWVfaWRuYSA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChzZXJ2ZXJuYW1lX28sICJpZG5hIiwgTlVMTCk7CisgICAgICAgIGlmIChzZXJ2ZXJuYW1lX2lkbmEgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHNlcnZlcm5hbWVfbyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VydmVybmFtZV9vKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHNlcnZlcm5hbWVfbyk7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Moc3NsX2N0eC0+c2V0X2hvc3RuYW1lLCBzc2xfc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcm5hbWVfaWRuYSwgc3NsX2N0eCwgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihzZXJ2ZXJuYW1lX2lkbmEpOworICAgIH0KKyAgICBQeV9ERUNSRUYoc3NsX3NvY2tldCk7CisKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHNzbF9jdHgtPnNldF9ob3N0bmFtZSk7CisgICAgICAgICphbCA9IFNTTF9BRF9IQU5EU0hBS0VfRkFJTFVSRTsKKyAgICAgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAocmVzdWx0ICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgICphbCA9IChpbnQpIFB5TG9uZ19Bc0xvbmcocmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgKmFsID0gU1NMX0FEX0lOVEVSTkFMX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXQgPSBTU0xfVExTRVhUX0VSUl9PSzsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHJldDsKKworZXJyb3I6CisgICAgUHlfREVDUkVGKHNzbF9zb2NrZXQpOworICAgICphbCA9IFNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKKyAgICByZXQgPSBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCitQeURvY19TVFJWQVIoUHlTU0xfc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tfZG9jLAorInNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKG1ldGhvZClcblwKK1xuXAorVGhpcyBzZXRzIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgc2VydmVyIG5hbWUgaXMgcHJvdmlkZWQgYnlcblwKK3RoZSBTU0wvVExTIGNsaWVudCBpbiB0aGUgU05JIGV4dGVuc2lvbi5cblwKK1xuXAorSWYgdGhlIGFyZ3VtZW50IGlzIE5vbmUgdGhlbiB0aGUgY2FsbGJhY2sgaXMgZGlzYWJsZWQuIFRoZSBtZXRob2QgaXMgY2FsbGVkXG5cCit3aXRoIHRoZSBTU0xTb2NrZXQsIHRoZSBzZXJ2ZXIgbmFtZSBhcyBhIHN0cmluZywgYW5kIHRoZSBTU0xDb250ZXh0IG9iamVjdC5cblwKK1NlZSBSRkMgNjA2NiBmb3IgZGV0YWlscyBvZiB0aGUgU05JIGV4dGVuc2lvbi4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3NldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisjaWYgSEFWRV9TTkkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpCisgICAgUHlPYmplY3QgKmNiOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJmNiKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9DTEVBUihzZWxmLT5zZXRfaG9zdG5hbWUpOworICAgIGlmIChjYiA9PSBQeV9Ob25lKSB7CisgICAgICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlbGYtPmN0eCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soY2IpKSB7CisgICAgICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayhzZWxmLT5jdHgsIE5VTEwpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgY2FsbGFibGUgb2JqZWN0Iik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoY2IpOworICAgICAgICBzZWxmLT5zZXRfaG9zdG5hbWUgPSBjYjsKKyAgICAgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2soc2VsZi0+Y3R4LCBfc2VydmVybmFtZV9jYWxsYmFjayk7CisgICAgICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2FyZyhzZWxmLT5jdHgsIHNlbGYpOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKKyNlbHNlCisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJUaGUgVExTIGV4dGVuc2lvbiBzZXJ2ZXJuYW1lIGNhbGxiYWNrLCAiCisgICAgICAgICAgICAgICAgICAgICJTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxsYmFjaywgIgorICAgICAgICAgICAgICAgICAgICAiaXMgbm90IGluIHRoZSBjdXJyZW50IE9wZW5TU0wgbGlicmFyeS4iKTsKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorCitQeURvY19TVFJWQVIoUHlTU0xfZ2V0X3N0YXRzX2RvYywKKyJjZXJ0X3N0b3JlX3N0YXRzKCkgLT4geydjcmwnOiBpbnQsICd4NTA5X2NhJzogaW50LCAneDUwOSc6IGludH1cblwKK1xuXAorUmV0dXJucyBxdWFudGl0aWVzIG9mIGxvYWRlZCBYLjUwOSBjZXJ0aWZpY2F0ZXMuIFguNTA5IGNlcnRpZmljYXRlcyB3aXRoIGFcblwKK0NBIGV4dGVuc2lvbiBhbmQgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0cyBpbnNpZGUgdGhlIGNvbnRleHQncyBjZXJ0XG5cCitzdG9yZS5cblwKK05PVEU6IENlcnRpZmljYXRlcyBpbiBhIGNhcGF0aCBkaXJlY3RvcnkgYXJlbid0IGxvYWRlZCB1bmxlc3MgdGhleSBoYXZlXG5cCitiZWVuIHVzZWQgYXQgbGVhc3Qgb25jZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NlcnRfc3RvcmVfc3RhdHMoUHlTU0xDb250ZXh0ICpzZWxmKQoreworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIFg1MDlfT0JKRUNUICpvYmo7CisgICAgaW50IHg1MDkgPSAwLCBjcmwgPSAwLCBwa2V5ID0gMCwgY2EgPSAwLCBpOworCisgICAgc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKHNlbGYtPmN0eCk7CisgICAgZm9yIChpID0gMDsgaSA8IHNrX1g1MDlfT0JKRUNUX251bShzdG9yZS0+b2Jqcyk7IGkrKykgeworICAgICAgICBvYmogPSBza19YNTA5X09CSkVDVF92YWx1ZShzdG9yZS0+b2JqcywgaSk7CisgICAgICAgIHN3aXRjaCAob2JqLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFg1MDlfTFVfWDUwOToKKyAgICAgICAgICAgICAgICB4NTA5Kys7CisgICAgICAgICAgICAgICAgaWYgKFg1MDlfY2hlY2tfY2Eob2JqLT5kYXRhLng1MDkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBYNTA5X0xVX0NSTDoKKyAgICAgICAgICAgICAgICBjcmwrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgWDUwOV9MVV9QS0VZOgorICAgICAgICAgICAgICAgIHBrZXkrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyogSWdub3JlIFg1MDlfTFVfRkFJTCwgWDUwOV9MVV9SRVRSWSwgWDUwOV9MVV9QS0VZLgorICAgICAgICAgICAgICAgICAqIEFzIGZhciBhcyBJIGNhbiB0ZWxsIHRoZXkgYXJlIGludGVybmFsIHN0YXRlcyBhbmQgbmV2ZXIKKyAgICAgICAgICAgICAgICAgKiBzdG9yZWQgaW4gYSBjZXJ0IHN0b3JlICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIntzaXNpc2l9IiwgIng1MDkiLCB4NTA5LCAiY3JsIiwgY3JsLAorICAgICAgICAieDUwOV9jYSIsIGNhKTsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9jYV9jZXJ0c19kb2MsCisiZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKSAtPiBsaXN0IG9mIGxvYWRlZCBjZXJ0aWZpY2F0ZVxuXAorXG5cCitSZXR1cm5zIGEgbGlzdCBvZiBkaWN0cyB3aXRoIGluZm9ybWF0aW9uIG9mIGxvYWRlZCBDQSBjZXJ0cy4gSWYgdGhlXG5cCitvcHRpb25hbCBhcmd1bWVudCBpcyBUcnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGUgQ0EgY2VydGlmaWNhdGUuXG5cCitOT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW4ndCBsb2FkZWQgdW5sZXNzIHRoZXkgaGF2ZVxuXAorYmVlbiB1c2VkIGF0IGxlYXN0IG9uY2UuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRfY2FfY2VydHMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7ImJpbmFyeV9mb3JtIiwgTlVMTH07CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgUHlPYmplY3QgKmNpID0gTlVMTCwgKnJsaXN0ID0gTlVMTDsKKyAgICBpbnQgaTsKKyAgICBpbnQgYmluYXJ5X21vZGUgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxwOmdldF9jYV9jZXJ0cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmYmluYXJ5X21vZGUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICgocmxpc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGZvciAoaSA9IDA7IGkgPCBza19YNTA5X09CSkVDVF9udW0oc3RvcmUtPm9ianMpOyBpKyspIHsKKyAgICAgICAgWDUwOV9PQkpFQ1QgKm9iajsKKyAgICAgICAgWDUwOSAqY2VydDsKKworICAgICAgICBvYmogPSBza19YNTA5X09CSkVDVF92YWx1ZShzdG9yZS0+b2JqcywgaSk7CisgICAgICAgIGlmIChvYmotPnR5cGUgIT0gWDUwOV9MVV9YNTA5KSB7CisgICAgICAgICAgICAvKiBub3QgYSB4NTA5IGNlcnQgKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8qIENBIGZvciBhbnkgcHVycG9zZSAqLworICAgICAgICBjZXJ0ID0gb2JqLT5kYXRhLng1MDk7CisgICAgICAgIGlmICghWDUwOV9jaGVja19jYShjZXJ0KSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJpbmFyeV9tb2RlKSB7CisgICAgICAgICAgICBjaSA9IF9jZXJ0aWZpY2F0ZV90b19kZXIoY2VydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaSA9IF9kZWNvZGVfY2VydGlmaWNhdGUoY2VydCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNpID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocmxpc3QsIGNpKSA9PSAtMSkgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUihjaSk7CisgICAgfQorICAgIHJldHVybiBybGlzdDsKKworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKGNpKTsKKyAgICBQeV9YREVDUkVGKHJsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCiBzdGF0aWMgUHlHZXRTZXREZWYgY29udGV4dF9nZXRzZXRsaXN0W10gPSB7CisgICAgeyJjaGVja19ob3N0bmFtZSIsIChnZXR0ZXIpIGdldF9jaGVja19ob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHNldHRlcikgc2V0X2NoZWNrX2hvc3RuYW1lLCBOVUxMfSwKICAgICB7Im9wdGlvbnMiLCAoZ2V0dGVyKSBnZXRfb3B0aW9ucywKICAgICAgICAgICAgICAgICAoc2V0dGVyKSBzZXRfb3B0aW9ucywgTlVMTH0sCisjaWZkZWYgSEFWRV9PUEVOU1NMX1ZFUklGWV9QQVJBTQorICAgIHsidmVyaWZ5X2ZsYWdzIiwgKGdldHRlcikgZ2V0X3ZlcmlmeV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF92ZXJpZnlfZmxhZ3MsIE5VTEx9LAorI2VuZGlmCiAgICAgeyJ2ZXJpZnlfbW9kZSIsIChnZXR0ZXIpIGdldF92ZXJpZnlfbW9kZSwKICAgICAgICAgICAgICAgICAgICAgKHNldHRlcikgc2V0X3ZlcmlmeV9tb2RlLCBOVUxMfSwKICAgICB7TlVMTH0sICAgICAgICAgICAgLyogc2VudGluZWwgKi8KQEAgLTI0MDksNiArMzE2MSwxMiBAQAogICAgIHsic2V0X2VjZGhfY3VydmUiLCAoUHlDRnVuY3Rpb24pIHNldF9lY2RoX2N1cnZlLAogICAgICAgICAgICAgICAgICAgICAgICBNRVRIX08sIE5VTEx9LAogI2VuZGlmCisgICAgeyJzZXRfc2VydmVybmFtZV9jYWxsYmFjayIsIChQeUNGdW5jdGlvbikgc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywgUHlTU0xfc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tfZG9jfSwKKyAgICB7ImNlcnRfc3RvcmVfc3RhdHMiLCAoUHlDRnVuY3Rpb24pIGNlcnRfc3RvcmVfc3RhdHMsCisgICAgICAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTLCBQeVNTTF9nZXRfc3RhdHNfZG9jfSwKKyAgICB7ImdldF9jYV9jZXJ0cyIsIChQeUNGdW5jdGlvbikgZ2V0X2NhX2NlcnRzLAorICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF9nZXRfY2FfY2VydHNfZG9jfSwKICAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yNDMyLDEwICszMTkwLDEwIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCisgICAgKHRyYXZlcnNlcHJvYykgY29udGV4dF90cmF2ZXJzZSwgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLworICAgIChpbnF1aXJ5KSBjb250ZXh0X2NsZWFyLCAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwpAQCAtMjU5MCw3ICszMzQ4LDM4NCBAQAogI2VuZGlmIC8qIEhBVkVfT1BFTlNTTF9SQU5EICovCiAKIAorUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc19kb2MsCisiZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkgLT4gdHVwbGVcblwKK1xuXAorUmV0dXJuIHNlYXJjaCBwYXRocyBhbmQgZW52aXJvbm1lbnQgdmFycyB0aGF0IGFyZSB1c2VkIGJ5IFNTTENvbnRleHQnc1xuXAorc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkgdG8gbG9hZCBkZWZhdWx0IENBcy4gVGhlIHZhbHVlcyBhcmVcblwKKydjZXJ0X2ZpbGVfZW52JywgJ2NlcnRfZmlsZScsICdjZXJ0X2Rpcl9lbnYnLCAnY2VydF9kaXInLiIpOwogCitzdGF0aWMgUHlPYmplY3QgKgorUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpvZmlsZV9lbnYgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvZmlsZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9kaXJfZW52ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2RpciA9IE5VTEw7CisKKyNkZWZpbmUgY29udmVydChpbmZvLCB0YXJnZXQpIHsgXAorICAgICAgICBjb25zdCBjaGFyICp0bXAgPSAoaW5mbyk7IFwKKyAgICAgICAgdGFyZ2V0ID0gTlVMTDsgXAorICAgICAgICBpZiAoIXRtcCkgeyBQeV9JTkNSRUYoUHlfTm9uZSk7IHRhcmdldCA9IFB5X05vbmU7IH0gXAorICAgICAgICBlbHNlIGlmICgodGFyZ2V0ID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdCh0bXApKSA9PSBOVUxMKSB7IFwKKyAgICAgICAgICAgIHRhcmdldCA9IFB5Qnl0ZXNfRnJvbVN0cmluZyh0bXApOyB9IFwKKyAgICAgICAgaWYgKCF0YXJnZXQpIGdvdG8gZXJyb3I7IFwKKyAgICB9IHdoaWxlKDApCisKKyAgICBjb252ZXJ0KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlX2VudigpLCBvZmlsZV9lbnYpOworICAgIGNvbnZlcnQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGUoKSwgb2ZpbGUpOworICAgIGNvbnZlcnQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2Rpcl9lbnYoKSwgb2Rpcl9lbnYpOworICAgIGNvbnZlcnQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2RpcigpLCBvZGlyKTsKKyN1bmRlZiBjb252ZXJ0CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTk5OTiIsIG9maWxlX2Vudiwgb2ZpbGUsIG9kaXJfZW52LCBvZGlyKTsKKworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKG9maWxlX2Vudik7CisgICAgUHlfWERFQ1JFRihvZmlsZSk7CisgICAgUHlfWERFQ1JFRihvZGlyX2Vudik7CisgICAgUHlfWERFQ1JFRihvZGlyKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0KgorYXNuMW9iajJweShBU04xX09CSkVDVCAqb2JqKQoreworICAgIGludCBuaWQ7CisgICAgY29uc3QgY2hhciAqbG4sICpzbjsKKyAgICBjaGFyIGJ1ZlsxMDBdOworICAgIGludCBidWZsZW47CisKKyAgICBuaWQgPSBPQkpfb2JqMm5pZChvYmopOworICAgIGlmIChuaWQgPT0gTklEX3VuZGVmKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiVW5rbm93biBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNuID0gT0JKX25pZDJzbihuaWQpOworICAgIGxuID0gT0JKX25pZDJsbihuaWQpOworICAgIGJ1ZmxlbiA9IE9CSl9vYmoydHh0KGJ1Ziwgc2l6ZW9mKGJ1ZiksIG9iaiwgMSk7CisgICAgaWYgKGJ1ZmxlbiA8IDApIHsKKyAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoYnVmbGVuKSB7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpc3NzIyIsIG5pZCwgc24sIGxuLCBidWYsIGJ1Zmxlbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImlzc08iLCBuaWQsIHNuLCBsbiwgUHlfTm9uZSk7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoUHlTU0xfdHh0Mm9ial9kb2MsCisidHh0Mm9iaih0eHQsIG5hbWU9RmFsc2UpIC0+IChuaWQsIHNob3J0bmFtZSwgbG9uZ25hbWUsIG9pZClcblwKK1xuXAorTG9va3VwIE5JRCwgc2hvcnQgbmFtZSwgbG9uZyBuYW1lIGFuZCBPSUQgb2YgYW4gQVNOMV9PQkpFQ1QuIEJ5IGRlZmF1bHRcblwKK29iamVjdHMgYXJlIGxvb2tlZCB1cCBieSBPSUQuIFdpdGggbmFtZT1UcnVlIHNob3J0IGFuZCBsb25nIG5hbWUgYXJlIGFsc29cblwKK21hdGNoZWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK1B5U1NMX3R4dDJvYmooUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsidHh0IiwgIm5hbWUiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBjaGFyICp0eHQ7CisgICAgaW50IG5hbWUgPSAwOworICAgIEFTTjFfT0JKRUNUICpvYmo7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAic3xwOnR4dDJvYmoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnR4dCwgJm5hbWUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBvYmogPSBPQkpfdHh0Mm9iaih0eHQsIG5hbWUgPyAwIDogMSk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAidW5rbm93biBvYmplY3QgJyUuMTAwcyciLCB0eHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzdWx0ID0gYXNuMW9iajJweShvYmopOworICAgIEFTTjFfT0JKRUNUX2ZyZWUob2JqKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQeURvY19TVFJWQVIoUHlTU0xfbmlkMm9ial9kb2MsCisibmlkMm9iaihuaWQpIC0+IChuaWQsIHNob3J0bmFtZSwgbG9uZ25hbWUsIG9pZClcblwKK1xuXAorTG9va3VwIE5JRCwgc2hvcnQgbmFtZSwgbG9uZyBuYW1lIGFuZCBPSUQgb2YgYW4gQVNOMV9PQkpFQ1QgYnkgTklELiIpOworCitzdGF0aWMgUHlPYmplY3QqCitQeVNTTF9uaWQyb2JqKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBpbnQgbmlkOworICAgIEFTTjFfT0JKRUNUICpvYmo7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6bmlkMm9iaiIsICZuaWQpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobmlkIDwgTklEX3VuZGVmKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiTklEIG11c3QgYmUgcG9zaXRpdmUuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBvYmogPSBPQkpfbmlkMm9iaihuaWQpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVua25vd24gTklEICVpIiwgbmlkKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IGFzbjFvYmoycHkob2JqKTsKKyAgICBBU04xX09CSkVDVF9mcmVlKG9iaik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmZGVmIF9NU0NfVkVSCisKK3N0YXRpYyBQeU9iamVjdCoKK2NlcnRFbmNvZGluZ1R5cGUoRFdPUkQgZW5jb2RpbmdUeXBlKQoreworICAgIHN0YXRpYyBQeU9iamVjdCAqeDUwOV9hc24gPSBOVUxMOworICAgIHN0YXRpYyBQeU9iamVjdCAqcGtjc183X2FzbiA9IE5VTEw7CisKKyAgICBpZiAoeDUwOV9hc24gPT0gTlVMTCkgeworICAgICAgICB4NTA5X2FzbiA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJ4NTA5X2FzbiIpOworICAgICAgICBpZiAoeDUwOV9hc24gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAocGtjc183X2FzbiA9PSBOVUxMKSB7CisgICAgICAgIHBrY3NfN19hc24gPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygicGtjc183X2FzbiIpOworICAgICAgICBpZiAocGtjc183X2FzbiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN3aXRjaChlbmNvZGluZ1R5cGUpIHsKKyAgICBjYXNlIFg1MDlfQVNOX0VOQ09ESU5HOgorICAgICAgICBQeV9JTkNSRUYoeDUwOV9hc24pOworICAgICAgICByZXR1cm4geDUwOV9hc247CisgICAgY2FzZSBQS0NTXzdfQVNOX0VOQ09ESU5HOgorICAgICAgICBQeV9JTkNSRUYocGtjc183X2Fzbik7CisgICAgICAgIHJldHVybiBwa2NzXzdfYXNuOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoZW5jb2RpbmdUeXBlKTsKKyAgICB9Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3BhcnNlS2V5VXNhZ2UoUENDRVJUX0NPTlRFWFQgcENlcnRDdHgsIERXT1JEIGZsYWdzKQoreworICAgIENFUlRfRU5IS0VZX1VTQUdFICp1c2FnZTsKKyAgICBEV09SRCBzaXplLCBlcnJvciwgaTsKKyAgICBQeU9iamVjdCAqcmV0dmFsOworCisgICAgaWYgKCFDZXJ0R2V0RW5oYW5jZWRLZXlVc2FnZShwQ2VydEN0eCwgZmxhZ3MsIE5VTEwsICZzaXplKSkgeworICAgICAgICBlcnJvciA9IEdldExhc3RFcnJvcigpOworICAgICAgICBpZiAoZXJyb3IgPT0gQ1JZUFRfRV9OT1RfRk9VTkQpIHsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihlcnJvcik7CisgICAgfQorCisgICAgdXNhZ2UgPSAoQ0VSVF9FTkhLRVlfVVNBR0UqKVB5TWVtX01hbGxvYyhzaXplKTsKKyAgICBpZiAodXNhZ2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICB9CisKKyAgICAvKiBOb3cgZ2V0IHRoZSBhY3R1YWwgZW5oYW5jZWQgdXNhZ2UgcHJvcGVydHkgKi8KKyAgICBpZiAoIUNlcnRHZXRFbmhhbmNlZEtleVVzYWdlKHBDZXJ0Q3R4LCBmbGFncywgdXNhZ2UsICZzaXplKSkgeworICAgICAgICBQeU1lbV9GcmVlKHVzYWdlKTsKKyAgICAgICAgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9yID09IENSWVBUX0VfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyb3IpOworICAgIH0KKyAgICByZXR2YWwgPSBQeVNldF9OZXcoTlVMTCk7CisgICAgaWYgKHJldHZhbCA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCB1c2FnZS0+Y1VzYWdlSWRlbnRpZmllcjsgKytpKSB7CisgICAgICAgIGlmICh1c2FnZS0+cmdwc3pVc2FnZUlkZW50aWZpZXJbaV0pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvaWQ7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgb2lkID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodXNhZ2UtPnJncHN6VXNhZ2VJZGVudGlmaWVyW2ldKTsKKyAgICAgICAgICAgIGlmIChvaWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0NMRUFSKHJldHZhbCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZChyZXR2YWwsIG9pZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYob2lkKTsKKyAgICAgICAgICAgIGlmIChlcnIgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBQeV9DTEVBUihyZXR2YWwpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIGVycm9yOgorICAgIFB5TWVtX0ZyZWUodXNhZ2UpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9lbnVtX2NlcnRpZmljYXRlc19kb2MsCisiZW51bV9jZXJ0aWZpY2F0ZXMoc3RvcmVfbmFtZSkgLT4gW11cblwKK1xuXAorUmV0cmlldmUgY2VydGlmaWNhdGVzIGZyb20gV2luZG93cycgY2VydCBzdG9yZS4gc3RvcmVfbmFtZSBtYXkgYmUgb25lIG9mXG5cCisnQ0EnLCAnUk9PVCcgb3IgJ01ZJy4gVGhlIHN5c3RlbSBtYXkgcHJvdmlkZSBtb3JlIGNlcnQgc3RvcmFnZXMsIHRvby5cblwKK1RoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiAoYnl0ZXMsIGVuY29kaW5nX3R5cGUsIHRydXN0KSB0dXBsZXMuIFRoZVxuXAorZW5jb2RpbmdfdHlwZSBmbGFnIGNhbiBiZSBpbnRlcnByZXRlZCB3aXRoIFg1MDlfQVNOX0VOQ09ESU5HIG9yXG5cCitQS0NTXzdfQVNOX0VOQ09ESU5HLiBUaGUgdHJ1c3Qgc2V0dGluZyBpcyBlaXRoZXIgYSBzZXQgb2YgT0lEcyBvciB0aGVcblwKK2Jvb2xlYW4gVHJ1ZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1B5U1NMX2VudW1fY2VydGlmaWNhdGVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7InN0b3JlX25hbWUiLCBOVUxMfTsKKyAgICBjaGFyICpzdG9yZV9uYW1lOworICAgIEhDRVJUU1RPUkUgaFN0b3JlID0gTlVMTDsKKyAgICBQQ0NFUlRfQ09OVEVYVCBwQ2VydEN0eCA9IE5VTEw7CisgICAgUHlPYmplY3QgKmtleXVzYWdlID0gTlVMTCwgKmNlcnQgPSBOVUxMLCAqZW5jID0gTlVMTCwgKnR1cCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAic3xzOmVudW1fY2VydGlmaWNhdGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZzdG9yZV9uYW1lKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzdWx0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGhTdG9yZSA9IENlcnRPcGVuU3lzdGVtU3RvcmUoKEhDUllQVFBST1YpTlVMTCwgc3RvcmVfbmFtZSk7CisgICAgaWYgKGhTdG9yZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIH0KKworICAgIHdoaWxlIChwQ2VydEN0eCA9IENlcnRFbnVtQ2VydGlmaWNhdGVzSW5TdG9yZShoU3RvcmUsIHBDZXJ0Q3R4KSkgeworICAgICAgICBjZXJ0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciopcENlcnRDdHgtPnBiQ2VydEVuY29kZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDZXJ0Q3R4LT5jYkNlcnRFbmNvZGVkKTsKKyAgICAgICAgaWYgKCFjZXJ0KSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChlbmMgPSBjZXJ0RW5jb2RpbmdUeXBlKHBDZXJ0Q3R4LT5kd0NlcnRFbmNvZGluZ1R5cGUpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAga2V5dXNhZ2UgPSBwYXJzZUtleVVzYWdlKHBDZXJ0Q3R4LCBDRVJUX0ZJTkRfUFJPUF9PTkxZX0VOSEtFWV9VU0FHRV9GTEFHKTsKKyAgICAgICAgaWYgKGtleXVzYWdlID09IFB5X1RydWUpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrZXl1c2FnZSk7CisgICAgICAgICAgICBrZXl1c2FnZSA9IHBhcnNlS2V5VXNhZ2UocENlcnRDdHgsIENFUlRfRklORF9FWFRfT05MWV9FTkhLRVlfVVNBR0VfRkxBRyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleXVzYWdlID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHR1cCA9IFB5VHVwbGVfTmV3KDMpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIDAsIGNlcnQpOworICAgICAgICBjZXJ0ID0gTlVMTDsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIDEsIGVuYyk7CisgICAgICAgIGVuYyA9IE5VTEw7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAyLCBrZXl1c2FnZSk7CisgICAgICAgIGtleXVzYWdlID0gTlVMTDsKKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocmVzdWx0LCB0dXApIDwgMCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKHR1cCk7CisgICAgfQorICAgIGlmIChwQ2VydEN0eCkgeworICAgICAgICAvKiBsb29wIGVuZGVkIHdpdGggYW4gZXJyb3IsIG5lZWQgdG8gY2xlYW4gdXAgY29udGV4dCBtYW51YWxseSAqLworICAgICAgICBDZXJ0RnJlZUNlcnRpZmljYXRlQ29udGV4dChwQ2VydEN0eCk7CisgICAgfQorCisgICAgLyogSW4gZXJyb3IgY2FzZXMgY2VydCwgZW5jIGFuZCB0dXAgbWF5IG5vdCBiZSBOVUxMICovCisgICAgUHlfWERFQ1JFRihjZXJ0KTsKKyAgICBQeV9YREVDUkVGKGVuYyk7CisgICAgUHlfWERFQ1JFRihrZXl1c2FnZSk7CisgICAgUHlfWERFQ1JFRih0dXApOworCisgICAgaWYgKCFDZXJ0Q2xvc2VTdG9yZShoU3RvcmUsIDApKSB7CisgICAgICAgIC8qIFRoaXMgZXJyb3IgY2FzZSBtaWdodCBzaGFkb3cgYW5vdGhlciBleGNlcHRpb24uKi8KKyAgICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQeURvY19TVFJWQVIoUHlTU0xfZW51bV9jcmxzX2RvYywKKyJlbnVtX2NybHMoc3RvcmVfbmFtZSkgLT4gW11cblwKK1xuXAorUmV0cmlldmUgQ1JMcyBmcm9tIFdpbmRvd3MnIGNlcnQgc3RvcmUuIHN0b3JlX25hbWUgbWF5IGJlIG9uZSBvZlxuXAorJ0NBJywgJ1JPT1QnIG9yICdNWScuIFRoZSBzeXN0ZW0gbWF5IHByb3ZpZGUgbW9yZSBjZXJ0IHN0b3JhZ2VzLCB0b28uXG5cCitUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGJ5dGVzLCBlbmNvZGluZ190eXBlKSB0dXBsZXMuIFRoZVxuXAorZW5jb2RpbmdfdHlwZSBmbGFnIGNhbiBiZSBpbnRlcnByZXRlZCB3aXRoIFg1MDlfQVNOX0VOQ09ESU5HIG9yXG5cCitQS0NTXzdfQVNOX0VOQ09ESU5HLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorUHlTU0xfZW51bV9jcmxzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7InN0b3JlX25hbWUiLCBOVUxMfTsKKyAgICBjaGFyICpzdG9yZV9uYW1lOworICAgIEhDRVJUU1RPUkUgaFN0b3JlID0gTlVMTDsKKyAgICBQQ0NSTF9DT05URVhUIHBDcmxDdHggPSBOVUxMOworICAgIFB5T2JqZWN0ICpjcmwgPSBOVUxMLCAqZW5jID0gTlVMTCwgKnR1cCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAic3xzOmVudW1fY3JscyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmc3RvcmVfbmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBoU3RvcmUgPSBDZXJ0T3BlblN5c3RlbVN0b3JlKChIQ1JZUFRQUk9WKU5VTEwsIHN0b3JlX25hbWUpOworICAgIGlmIChoU3RvcmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisKKyAgICB3aGlsZSAocENybEN0eCA9IENlcnRFbnVtQ1JMc0luU3RvcmUoaFN0b3JlLCBwQ3JsQ3R4KSkgeworICAgICAgICBjcmwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjb25zdCBjaGFyKilwQ3JsQ3R4LT5wYkNybEVuY29kZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDcmxDdHgtPmNiQ3JsRW5jb2RlZCk7CisgICAgICAgIGlmICghY3JsKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChlbmMgPSBjZXJ0RW5jb2RpbmdUeXBlKHBDcmxDdHgtPmR3Q2VydEVuY29kaW5nVHlwZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHR1cCA9IFB5VHVwbGVfTmV3KDIpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIDAsIGNybCk7CisgICAgICAgIGNybCA9IE5VTEw7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAxLCBlbmMpOworICAgICAgICBlbmMgPSBOVUxMOworCisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgdHVwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUih0dXApOworICAgIH0KKyAgICBpZiAocENybEN0eCkgeworICAgICAgICAvKiBsb29wIGVuZGVkIHdpdGggYW4gZXJyb3IsIG5lZWQgdG8gY2xlYW4gdXAgY29udGV4dCBtYW51YWxseSAqLworICAgICAgICBDZXJ0RnJlZUNSTENvbnRleHQocENybEN0eCk7CisgICAgfQorCisgICAgLyogSW4gZXJyb3IgY2FzZXMgY2VydCwgZW5jIGFuZCB0dXAgbWF5IG5vdCBiZSBOVUxMICovCisgICAgUHlfWERFQ1JFRihjcmwpOworICAgIFB5X1hERUNSRUYoZW5jKTsKKyAgICBQeV9YREVDUkVGKHR1cCk7CisKKyAgICBpZiAoIUNlcnRDbG9zZVN0b3JlKGhTdG9yZSwgMCkpIHsKKyAgICAgICAgLyogVGhpcyBlcnJvciBjYXNlIG1pZ2h0IHNoYWRvdyBhbm90aGVyIGV4Y2VwdGlvbi4qLworICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLwogCiAvKiBMaXN0IG9mIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGlzIG1vZHVsZS4gKi8KIApAQCAtMjYwOSw2ICszNzQ0LDE4IEBACiAgICAgeyJSQU5EX3N0YXR1cyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5U1NMX1JBTkRfc3RhdHVzLCBNRVRIX05PQVJHUywKICAgICAgUHlTU0xfUkFORF9zdGF0dXNfZG9jfSwKICNlbmRpZgorICAgIHsiZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRocywKKyAgICAgTUVUSF9OT0FSR1MsIFB5U1NMX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc19kb2N9LAorI2lmZGVmIF9NU0NfVkVSCisgICAgeyJlbnVtX2NlcnRpZmljYXRlcyIsIChQeUNGdW5jdGlvbilQeVNTTF9lbnVtX2NlcnRpZmljYXRlcywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXNfZG9jfSwKKyAgICB7ImVudW1fY3JscyIsIChQeUNGdW5jdGlvbilQeVNTTF9lbnVtX2NybHMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIFB5U1NMX2VudW1fY3Jsc19kb2N9LAorI2VuZGlmCisgICAgeyJ0eHQyb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX3R4dDJvYmosCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIFB5U1NMX3R4dDJvYmpfZG9jfSwKKyAgICB7Im5pZDJvYmoiLCAoUHlDRnVuY3Rpb24pUHlTU0xfbmlkMm9iaiwKKyAgICAgTUVUSF9WQVJBUkdTLCBQeVNTTF9uaWQyb2JqX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgICAvKiBTZW50aW5lbCAqLwogfTsKIApAQCAtMjY3MCw3ICszODE3LDcgQEAKICAgICBpZiAoX3NzbF9sb2NrcyA9PSBOVUxMKSB7CiAgICAgICAgIF9zc2xfbG9ja3NfY291bnQgPSBDUllQVE9fbnVtX2xvY2tzKCk7CiAgICAgICAgIF9zc2xfbG9ja3MgPSAoUHlUaHJlYWRfdHlwZV9sb2NrICopCi0gICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKFB5VGhyZWFkX3R5cGVfbG9jaykgKiBfc3NsX2xvY2tzX2NvdW50KTsKKyAgICAgICAgICAgIFB5TWVtX01hbGxvYyhzaXplb2YoUHlUaHJlYWRfdHlwZV9sb2NrKSAqIF9zc2xfbG9ja3NfY291bnQpOwogICAgICAgICBpZiAoX3NzbF9sb2NrcyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIG1lbXNldChfc3NsX2xvY2tzLCAwLApAQCAtMjY4Miw3ICszODI5LDcgQEAKICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyAgaiA8IGk7ICBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrKF9zc2xfbG9ja3Nbal0pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmVlKF9zc2xfbG9ja3MpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoX3NzbF9sb2Nrcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI4MzYsNiArMzk4Myw2NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9DRVJUX09QVElPTkFMKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0VSVF9SRVFVSVJFRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX0NFUlRfUkVRVUlSRUQpOworICAgIC8qIENSTCB2ZXJpZmljYXRpb24gZm9yIHZlcmlmaWNhdGlvbl9mbGFncyAqLworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJWRVJJRllfREVGQVVMVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlZFUklGWV9DUkxfQ0hFQ0tfTEVBRiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVkVSSUZZX0NSTF9DSEVDS19DSEFJTiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLfFg1MDlfVl9GTEFHX0NSTF9DSEVDS19BTEwpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJWRVJJRllfWDUwOV9TVFJJQ1QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX1g1MDlfU1RSSUNUKTsKKworICAgIC8qIEFsZXJ0IERlc2NyaXB0aW9ucyBmcm9tIHNzbC5oICovCisgICAgLyogbm90ZSBSRVNFUlZFRCBjb25zdGFudHMgbm8gbG9uZ2VyIGludGVuZGVkIGZvciB1c2UgaGF2ZSBiZWVuIHJlbW92ZWQgKi8KKyAgICAvKiBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3Rscy1wYXJhbWV0ZXJzL3Rscy1wYXJhbWV0ZXJzLnhtbCN0bHMtcGFyYW1ldGVycy02ICovCisKKyNkZWZpbmUgQUREX0FEX0NPTlNUQU5UKHMpIFwKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUxFUlRfREVTQ1JJUFRJT05fIiNzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0FEXyMjcykKKworICAgIEFERF9BRF9DT05TVEFOVChDTE9TRV9OT1RJRlkpOworICAgIEFERF9BRF9DT05TVEFOVChVTkVYUEVDVEVEX01FU1NBR0UpOworICAgIEFERF9BRF9DT05TVEFOVChCQURfUkVDT1JEX01BQyk7CisgICAgQUREX0FEX0NPTlNUQU5UKFJFQ09SRF9PVkVSRkxPVyk7CisgICAgQUREX0FEX0NPTlNUQU5UKERFQ09NUFJFU1NJT05fRkFJTFVSRSk7CisgICAgQUREX0FEX0NPTlNUQU5UKEhBTkRTSEFLRV9GQUlMVVJFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQkFEX0NFUlRJRklDQVRFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoVU5TVVBQT1JURURfQ0VSVElGSUNBVEUpOworICAgIEFERF9BRF9DT05TVEFOVChDRVJUSUZJQ0FURV9SRVZPS0VEKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfRVhQSVJFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKENFUlRJRklDQVRFX1VOS05PV04pOworICAgIEFERF9BRF9DT05TVEFOVChJTExFR0FMX1BBUkFNRVRFUik7CisgICAgQUREX0FEX0NPTlNUQU5UKFVOS05PV05fQ0EpOworICAgIEFERF9BRF9DT05TVEFOVChBQ0NFU1NfREVOSUVEKTsKKyAgICBBRERfQURfQ09OU1RBTlQoREVDT0RFX0VSUk9SKTsKKyAgICBBRERfQURfQ09OU1RBTlQoREVDUllQVF9FUlJPUik7CisgICAgQUREX0FEX0NPTlNUQU5UKFBST1RPQ09MX1ZFUlNJT04pOworICAgIEFERF9BRF9DT05TVEFOVChJTlNVRkZJQ0lFTlRfU0VDVVJJVFkpOworICAgIEFERF9BRF9DT05TVEFOVChJTlRFUk5BTF9FUlJPUik7CisgICAgQUREX0FEX0NPTlNUQU5UKFVTRVJfQ0FOQ0VMTEVEKTsKKyAgICBBRERfQURfQ09OU1RBTlQoTk9fUkVORUdPVElBVElPTik7CisgICAgLyogTm90IGFsbCBjb25zdGFudHMgYXJlIGluIG9sZCBPcGVuU1NMIHZlcnNpb25zICovCisjaWZkZWYgU1NMX0FEX1VOU1VQUE9SVEVEX0VYVEVOU0lPTgorICAgIEFERF9BRF9DT05TVEFOVChVTlNVUFBPUlRFRF9FWFRFTlNJT04pOworI2VuZGlmCisjaWZkZWYgU1NMX0FEX0NFUlRJRklDQVRFX1VOT0JUQUlOQUJMRQorICAgIEFERF9BRF9DT05TVEFOVChDRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEUpOworI2VuZGlmCisjaWZkZWYgU1NMX0FEX1VOUkVDT0dOSVpFRF9OQU1FCisgICAgQUREX0FEX0NPTlNUQU5UKFVOUkVDT0dOSVpFRF9OQU1FKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9CQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFCisgICAgQUREX0FEX0NPTlNUQU5UKEJBRF9DRVJUSUZJQ0FURV9TVEFUVVNfUkVTUE9OU0UpOworI2VuZGlmCisjaWZkZWYgU1NMX0FEX0JBRF9DRVJUSUZJQ0FURV9IQVNIX1ZBTFVFCisgICAgQUREX0FEX0NPTlNUQU5UKEJBRF9DRVJUSUZJQ0FURV9IQVNIX1ZBTFVFKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9VTktOT1dOX1BTS19JREVOVElUWQorICAgIEFERF9BRF9DT05TVEFOVChVTktOT1dOX1BTS19JREVOVElUWSk7CisjZW5kaWYKKworI3VuZGVmIEFERF9BRF9DT05TVEFOVAogCiAgICAgLyogcHJvdG9jb2wgdmVyc2lvbnMgKi8KICNpZm5kZWYgT1BFTlNTTF9OT19TU0wyCkBAIC0yODQ4LDYgKzQwNTUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9TU0wyMyk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBST1RPQ09MX1RMU3YxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9UTFMxKTsKKyNpZiBIQVZFX1RMU3YxXzIKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUFJPVE9DT0xfVExTdjFfMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fVExTMV8xKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUFJPVE9DT0xfVExTdjFfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fVExTMV8yKTsKKyNlbmRpZgogCiAgICAgLyogcHJvdG9jb2wgb3B0aW9ucyAqLwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9BTEwiLApAQCAtMjg1NSw2ICs0MDY4LDEwIEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1NTTHYyIiwgU1NMX09QX05PX1NTTHYyKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fU1NMdjMiLCBTU0xfT1BfTk9fU1NMdjMpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19UTFN2MSIsIFNTTF9PUF9OT19UTFN2MSk7CisjaWYgSEFWRV9UTFN2MV8yCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1RMU3YxXzEiLCBTU0xfT1BfTk9fVExTdjFfMSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1RMU3YxXzIiLCBTU0xfT1BfTk9fVExTdjFfMik7CisjZW5kaWYKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfU0lOR0xFX0RIX1VTRSIsIFNTTF9PUF9TSU5HTEVfREhfVVNFKTsKQEAgLTI4NjYsNyArNDA4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX09QX05PX0NPTVBSRVNTSU9OKTsKICNlbmRpZgogCi0jaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorI2lmIEhBVkVfU05JCiAgICAgciA9IFB5X1RydWU7CiAjZWxzZQogICAgIHIgPSBQeV9GYWxzZTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3N0YXQuYyBiL01vZHVsZXMvX3N0YXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzAxZmE4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc3RhdC5jCkBAIC0wLDAgKzEsNTYzIEBACisvKiBzdGF0LmggaW50ZXJmYWNlCisgKgorICogVGhlIG1vZHVsZSBkZWZpbmVzIGFsbCBTX0lGKiwgU19JKiwgVUZfKiwgU0ZfKiBhbmQgU1RfKiBjb25zdGFudHMgdG8KKyAqIHNlbnNpYmxlIGRlZmF1bHQgdmFsdWVzIGFzIHdlbGwgYXMgZGVmaW5lcyBTX0lTKigpIG1hY3JvcyBpbiBvcmRlciB0byBrZWVwCisgKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9sZCBzdGF0LnB5IG1vZHVsZS4KKyAqCisgKiBOZXcgY29uc3RhbnRzIGFuZCBtYWNyb3Mgc3VjaCBhcyBTX0lGRE9PUiAvIFNfSVNET09SKCkgYXJlIGFsd2F5cyBkZWZpbmVkCisgKiBhcyBpbnQgMC4KKyAqCisgKiBOT1RFOiBQT1NJWCBvbmx5IGRlZmluZXMgdGhlIHZhbHVlcyBvZiB0aGUgU19JKiBwZXJtaXNzaW9uIGJpdHMuCisgKgorICovCisKKyNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgorI2luY2x1ZGUgIlB5dGhvbi5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYgLyogSEFWRV9TWVNfVFlQRVNfSCAqLworCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZiAvKiBIQVZFX1NZU19TVEFUX0ggKi8KKworI2lmZGVmIE1TX1dJTkRPV1MKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW9kZV90OworI2VuZGlmCisKKy8qIEZyb20gUHl0aG9uJ3Mgc3RhdC5weSAqLworI2lmbmRlZiBTX0lNT0RFCisjICBkZWZpbmUgU19JTU9ERSAwNzc3NworI2VuZGlmCisKKy8qIFNfSUZYWFggY29uc3RhbnRzIChmaWxlIHR5cGVzKQorICoKKyAqIE9ubHkgdGhlIG5hbWVzIGFyZSBkZWZpbmVkIGJ5IFBPU0lYIGJ1dCBub3QgdGhlaXIgdmFsdWUuIEFsbCBjb21tb24gZmlsZQorICogdHlwZXMgc2VlbXMgdG8gaGF2ZSB0aGUgc2FtZSBudW1lcmljIHZhbHVlIG9uIGFsbCBwbGF0Zm9ybXMsIHRob3VnaC4KKyAqCisgKiBweXBvcnQuaCBndWFyYW50ZWVzIFNfSUZNVCwgU19JRkRJUiwgU19JRkNIUiwgU19JRlJFRyBhbmQgU19JRkxOSworICovCisKKyNpZm5kZWYgU19JRkJMSworIyAgZGVmaW5lIFNfSUZCTEsgMDA2MDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRklGTworIyAgZGVmaW5lIFNfSUZJRk8gMDAxMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRlNPQ0sKKyMgIGRlZmluZSBTX0lGU09DSyAwMTQwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGRE9PUgorIyAgZGVmaW5lIFNfSUZET09SIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZQT1JUCisjICBkZWZpbmUgU19JRlBPUlQgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRldIVAorIyAgZGVmaW5lIFNfSUZXSFQgMAorI2VuZGlmCisKKworLyogU19JU1hYWCgpCisgKiBweXBvcnQuaCBkZWZpbmVzIFNfSVNESVIoKSwgU19JU1JFRygpIGFuZCBTX0lTQ0hSKCkKKyAqLworCisjaWZuZGVmIFNfSVNCTEsKKyMgIGRlZmluZSBTX0lTQkxLKG1vZGUpICgoKG1vZGUpICYgU19JRk1UKSA9PSBTX0lGQkxLKQorI2VuZGlmCisKKyNpZm5kZWYgU19JU0ZJRk8KKyMgIGRlZmluZSBTX0lTRklGTyhtb2RlKSAoKChtb2RlKSAmIFNfSUZNVCkgPT0gU19JRklGTykKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNMTksKKyMgIGRlZmluZSBTX0lTTE5LKG1vZGUpICgoKG1vZGUpICYgU19JRk1UKSA9PSBTX0lGTE5LKQorI2VuZGlmCisKKyNpZm5kZWYgU19JU1NPQ0sKKyMgIGRlZmluZSBTX0lTU09DSyhtb2RlKSAoKChtb2RlKSAmIFNfSUZNVCkgPT0gU19JRlNPQ0spCisjZW5kaWYKKworI2lmbmRlZiBTX0lTRE9PUgorIyAgZGVmaW5lIFNfSVNET09SKG1vZGUpIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNQT1JUCisjICBkZWZpbmUgU19JU1BPUlQobW9kZSkgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JU1dIVAorIyAgZGVmaW5lIFNfSVNXSFQobW9kZSkgMAorI2VuZGlmCisKKworLyogU19JKiBmaWxlIHBlcm1pc3Npb24KKyAqCisgKiBUaGUgcGVybWlzc2lvbiBiaXQgdmFsdWUgYXJlIGRlZmluZWQgYnkgUE9TSVggc3RhbmRhcmRzLgorICovCisjaWZuZGVmIFNfSVNVSUQKKyMgIGRlZmluZSBTX0lTVUlEIDA0MDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lTR0lECisjICBkZWZpbmUgU19JU0dJRCAwMjAwMAorI2VuZGlmCisKKy8qIHdoYXQgaXMgU19FTkZNVD8gKi8KKyNpZm5kZWYgU19FTkZNVAorIyAgZGVmaW5lIFNfRU5GTVQgU19JU0dJRAorI2VuZGlmCisKKyNpZm5kZWYgU19JU1ZUWAorIyAgZGVmaW5lIFNfSVNWVFggMDEwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJFQUQKKyMgIGRlZmluZSBTX0lSRUFEIDAwNDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lXUklURQorIyAgZGVmaW5lIFNfSVdSSVRFIDAwMjAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lFWEVDCisjICBkZWZpbmUgU19JRVhFQyAwMDEwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JUldYVQorIyAgZGVmaW5lIFNfSVJXWFUgMDA3MDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJVU1IKKyMgIGRlZmluZSBTX0lSVVNSIDAwNDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lXVVNSCisjICBkZWZpbmUgU19JV1VTUiAwMDIwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JWFVTUgorIyAgZGVmaW5lIFNfSVhVU1IgMDAxMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJXWEcKKyMgIGRlZmluZSBTX0lSV1hHIDAwMDcwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSR1JQCisjICBkZWZpbmUgU19JUkdSUCAwMDA0MAorI2VuZGlmCisKKyNpZm5kZWYgU19JV0dSUAorIyAgZGVmaW5lIFNfSVdHUlAgMDAwMjAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhHUlAKKyMgIGRlZmluZSBTX0lYR1JQIDAwMDEwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSV1hPCisjICBkZWZpbmUgU19JUldYTyAwMDAwNworI2VuZGlmCisKKyNpZm5kZWYgU19JUk9USAorIyAgZGVmaW5lIFNfSVJPVEggMDAwMDQKKyNlbmRpZgorCisjaWZuZGVmIFNfSVdPVEgKKyMgIGRlZmluZSBTX0lXT1RIIDAwMDAyCisjZW5kaWYKKworI2lmbmRlZiBTX0lYT1RICisjICBkZWZpbmUgU19JWE9USCAwMDAwMQorI2VuZGlmCisKKworLyogTmFtZXMgZm9yIGZpbGUgZmxhZ3MgKi8KKyNpZm5kZWYgVUZfTk9EVU1QCisjICBkZWZpbmUgVUZfTk9EVU1QIDB4MDAwMDAwMDEKKyNlbmRpZgorCisjaWZuZGVmIFVGX0lNTVVUQUJMRQorIyAgZGVmaW5lIFVGX0lNTVVUQUJMRSAweDAwMDAwMDAyCisjZW5kaWYKKworI2lmbmRlZiBVRl9BUFBFTkQKKyMgIGRlZmluZSBVRl9BUFBFTkQgMHgwMDAwMDAwNAorI2VuZGlmCisKKyNpZm5kZWYgVUZfT1BBUVVFCisjICBkZWZpbmUgVUZfT1BBUVVFIDB4MDAwMDAwMDgKKyNlbmRpZgorCisjaWZuZGVmIFVGX05PVU5MSU5LCisjICBkZWZpbmUgVUZfTk9VTkxJTksgMHgwMDAwMDAxMAorI2VuZGlmCisKKyNpZm5kZWYgVUZfQ09NUFJFU1NFRAorIyAgZGVmaW5lIFVGX0NPTVBSRVNTRUQgMHgwMDAwMDAyMAorI2VuZGlmCisKKyNpZm5kZWYgVUZfSElEREVOCisjICBkZWZpbmUgVUZfSElEREVOIDB4MDAwMDgwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNGX0FSQ0hJVkVECisjICBkZWZpbmUgU0ZfQVJDSElWRUQgMHgwMDAxMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU0ZfSU1NVVRBQkxFCisjICBkZWZpbmUgU0ZfSU1NVVRBQkxFIDB4MDAwMjAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNGX0FQUEVORAorIyAgZGVmaW5lIFNGX0FQUEVORCAweDAwMDQwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9OT1VOTElOSworIyAgZGVmaW5lIFNGX05PVU5MSU5LIDB4MDAxMDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNGX1NOQVBTSE9UCisjICBkZWZpbmUgU0ZfU05BUFNIT1QgMHgwMDIwMDAwMAorI2VuZGlmCisKK3N0YXRpYyBtb2RlX3QKK19QeUxvbmdfQXNNb2RlX3QoUHlPYmplY3QgKm9wKQoreworICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CisgICAgbW9kZV90IG1vZGU7CisKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvcCk7CisgICAgaWYgKCh2YWx1ZSA9PSAodW5zaWduZWQgbG9uZyktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIChtb2RlX3QpLTE7CisKKyAgICBtb2RlID0gKG1vZGVfdCl2YWx1ZTsKKyAgICBpZiAoKHVuc2lnbmVkIGxvbmcpbW9kZSAhPSB2YWx1ZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgIm1vZGUgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiAobW9kZV90KS0xOworICAgIH0KKyAgICByZXR1cm4gbW9kZTsKK30KKworCisjZGVmaW5lIHN0YXRfU19JU0ZVTkMoaXNmdW5jLCBkb2MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RhdGljIFB5T2JqZWN0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RhdF8gIyNpc2Z1bmMgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb21vZGUpICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgbW9kZV90IG1vZGUgPSBfUHlMb25nX0FzTW9kZV90KG9tb2RlKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGlmICgobW9kZSA9PSAobW9kZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSAgICAgICAgICAgXAorICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoaXNmdW5jKG1vZGUpKTsgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFB5RG9jX1NUUlZBUihzdGF0XyAjIyBpc2Z1bmMgIyMgX2RvYywgZG9jKQorCitzdGF0X1NfSVNGVU5DKFNfSVNESVIsCisgICAgIlNfSVNESVIobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIGRpcmVjdG9yeS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTQ0hSLAorICAgICJTX0lTQ0hSKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBjaGFyYWN0ZXIgc3BlY2lhbCBkZXZpY2UgZmlsZS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTQkxLLAorICAgICJTX0lTQkxLKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBibG9jayBzcGVjaWFsIGRldmljZSBmaWxlLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNSRUcsCisgICAgIlNfSVNSRUcobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIHJlZ3VsYXIgZmlsZS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTRklGTywKKyAgICAiU19JU0ZJRk8obW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIEZJRk8gKG5hbWVkIHBpcGUpLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNMTkssCisgICAgIlNfSVNMTksobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIHN5bWJvbGljIGxpbmsuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU1NPQ0ssCisgICAgIlNfSVNTT0NLKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBzb2NrZXQuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0RPT1IsCisgICAgIlNfSVNET09SKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBkb29yLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNQT1JULAorICAgICJTX0lTUE9SVChtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGFuIGV2ZW50IHBvcnQuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU1dIVCwKKyAgICAiU19JU1dIVChtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgd2hpdGVvdXQuIik7CisKKworUHlEb2NfU1RSVkFSKHN0YXRfU19JTU9ERV9kb2MsCisiUmV0dXJuIHRoZSBwb3J0aW9uIG9mIHRoZSBmaWxlJ3MgbW9kZSB0aGF0IGNhbiBiZSBzZXQgYnkgb3MuY2htb2QoKS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0YXRfU19JTU9ERShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9tb2RlKQoreworICAgIG1vZGVfdCBtb2RlID0gX1B5TG9uZ19Bc01vZGVfdChvbW9kZSk7CisgICAgaWYgKChtb2RlID09IChtb2RlX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtb2RlICYgU19JTU9ERSk7Cit9CisKKworUHlEb2NfU1RSVkFSKHN0YXRfU19JRk1UX2RvYywKKyJSZXR1cm4gdGhlIHBvcnRpb24gb2YgdGhlIGZpbGUncyBtb2RlIHRoYXQgZGVzY3JpYmVzIHRoZSBmaWxlIHR5cGUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdGF0X1NfSUZNVChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9tb2RlKQoreworICAgIG1vZGVfdCBtb2RlID0gX1B5TG9uZ19Bc01vZGVfdChvbW9kZSk7CisgICAgaWYgKChtb2RlID09IChtb2RlX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtb2RlICYgU19JRk1UKTsKK30KKworLyogZmlsZSB0eXBlIGNoYXJzIGFjY29yZGluZyB0bworICAgaHR0cDovL2VuLndpa2lib29rcy5vcmcvd2lraS9DX1Byb2dyYW1taW5nL1BPU0lYX1JlZmVyZW5jZS9zeXMvc3RhdC5oICovCisKK3N0YXRpYyBjaGFyCitmaWxldHlwZShtb2RlX3QgbW9kZSkKK3sKKyAgICAvKiBjb21tb24gY2FzZXMgZmlyc3QgKi8KKyAgICBpZiAoU19JU1JFRyhtb2RlKSkgIHJldHVybiAnLSc7CisgICAgaWYgKFNfSVNESVIobW9kZSkpICByZXR1cm4gJ2QnOworICAgIGlmIChTX0lTTE5LKG1vZGUpKSAgcmV0dXJuICdsJzsKKyAgICAvKiBzcGVjaWFsIGZpbGVzICovCisgICAgaWYgKFNfSVNCTEsobW9kZSkpICByZXR1cm4gJ2InOworICAgIGlmIChTX0lTQ0hSKG1vZGUpKSAgcmV0dXJuICdjJzsKKyAgICBpZiAoU19JU0ZJRk8obW9kZSkpIHJldHVybiAncCc7CisgICAgaWYgKFNfSVNTT0NLKG1vZGUpKSByZXR1cm4gJ3MnOworICAgIC8qIG5vbi1zdGFuZGFyZCB0eXBlcyAqLworICAgIGlmIChTX0lTRE9PUihtb2RlKSkgcmV0dXJuICdEJzsKKyAgICBpZiAoU19JU1BPUlQobW9kZSkpIHJldHVybiAnUCc7CisgICAgaWYgKFNfSVNXSFQobW9kZSkpICByZXR1cm4gJ3cnOworICAgIC8qIHVua25vd24gKi8KKyAgICByZXR1cm4gJz8nOworfQorCitzdGF0aWMgdm9pZAorZmlsZXBlcm0obW9kZV90IG1vZGUsIGNoYXIgKmJ1ZikKK3sKKyAgICBidWZbMF0gPSBtb2RlICYgU19JUlVTUiA/ICdyJyA6ICctJzsKKyAgICBidWZbMV0gPSBtb2RlICYgU19JV1VTUiA/ICd3JyA6ICctJzsKKyAgICBpZiAobW9kZSAmIFNfSVNVSUQpIHsKKyAgICAgICAgYnVmWzJdID0gbW9kZSAmIFNfSVhVU1IgPyAncycgOiAnUyc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmWzJdID0gbW9kZSAmIFNfSVhVU1IgPyAneCcgOiAnLSc7CisgICAgfQorICAgIGJ1ZlszXSA9IG1vZGUgJiBTX0lSR1JQID8gJ3InIDogJy0nOworICAgIGJ1Zls0XSA9IG1vZGUgJiBTX0lXR1JQID8gJ3cnIDogJy0nOworICAgIGlmIChtb2RlICYgU19JU0dJRCkgeworICAgICAgICBidWZbNV0gPSBtb2RlICYgU19JWEdSUCA/ICdzJyA6ICdTJzsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZbNV0gPSBtb2RlICYgU19JWEdSUCA/ICd4JyA6ICctJzsKKyAgICB9CisgICAgYnVmWzZdID0gbW9kZSAmIFNfSVJPVEggPyAncicgOiAnLSc7CisgICAgYnVmWzddID0gbW9kZSAmIFNfSVdPVEggPyAndycgOiAnLSc7CisgICAgaWYgKG1vZGUgJiBTX0lTVlRYKSB7CisgICAgICAgIGJ1Zls4XSA9IG1vZGUgJiBTX0lYT1RIID8gJ3QnIDogJ1QnOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1Zls4XSA9IG1vZGUgJiBTX0lYT1RIID8gJ3gnIDogJy0nOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKHN0YXRfZmlsZW1vZGVfZG9jLAorIkNvbnZlcnQgYSBmaWxlJ3MgbW9kZSB0byBhIHN0cmluZyBvZiB0aGUgZm9ybSAnLXJ3eHJ3eHJ3eCciKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0YXRfZmlsZW1vZGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvbW9kZSkKK3sKKyAgICBjaGFyIGJ1ZlsxMF07CisgICAgbW9kZV90IG1vZGU7CisKKyAgICBtb2RlID0gX1B5TG9uZ19Bc01vZGVfdChvbW9kZSk7CisgICAgaWYgKChtb2RlID09IChtb2RlX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYnVmWzBdID0gZmlsZXR5cGUobW9kZSk7CisgICAgZmlsZXBlcm0obW9kZSwgJmJ1ZlsxXSk7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIDEwKTsKK30KKworCitzdGF0aWMgUHlNZXRob2REZWYgc3RhdF9tZXRob2RzW10gPSB7CisgICAgeyJTX0lTRElSIiwgICAgICAgICBzdGF0X1NfSVNESVIsICBNRVRIX08sIHN0YXRfU19JU0RJUl9kb2N9LAorICAgIHsiU19JU0NIUiIsICAgICAgICAgc3RhdF9TX0lTQ0hSLCAgTUVUSF9PLCBzdGF0X1NfSVNDSFJfZG9jfSwKKyAgICB7IlNfSVNCTEsiLCAgICAgICAgIHN0YXRfU19JU0JMSywgIE1FVEhfTywgc3RhdF9TX0lTQkxLX2RvY30sCisgICAgeyJTX0lTUkVHIiwgICAgICAgICBzdGF0X1NfSVNSRUcsICBNRVRIX08sIHN0YXRfU19JU1JFR19kb2N9LAorICAgIHsiU19JU0ZJRk8iLCAgICAgICAgc3RhdF9TX0lTRklGTywgTUVUSF9PLCBzdGF0X1NfSVNGSUZPX2RvY30sCisgICAgeyJTX0lTTE5LIiwgICAgICAgICBzdGF0X1NfSVNMTkssICBNRVRIX08sIHN0YXRfU19JU0xOS19kb2N9LAorICAgIHsiU19JU1NPQ0siLCAgICAgICAgc3RhdF9TX0lTU09DSywgTUVUSF9PLCBzdGF0X1NfSVNTT0NLX2RvY30sCisgICAgeyJTX0lTRE9PUiIsICAgICAgICBzdGF0X1NfSVNET09SLCBNRVRIX08sIHN0YXRfU19JU0RPT1JfZG9jfSwKKyAgICB7IlNfSVNQT1JUIiwgICAgICAgIHN0YXRfU19JU1BPUlQsIE1FVEhfTywgc3RhdF9TX0lTUE9SVF9kb2N9LAorICAgIHsiU19JU1dIVCIsICAgICAgICAgc3RhdF9TX0lTV0hULCAgTUVUSF9PLCBzdGF0X1NfSVNXSFRfZG9jfSwKKyAgICB7IlNfSU1PREUiLCAgICAgICAgIHN0YXRfU19JTU9ERSwgIE1FVEhfTywgc3RhdF9TX0lNT0RFX2RvY30sCisgICAgeyJTX0lGTVQiLCAgICAgICAgICBzdGF0X1NfSUZNVCwgICBNRVRIX08sIHN0YXRfU19JRk1UX2RvY30sCisgICAgeyJmaWxlbW9kZSIsICAgICAgICBzdGF0X2ZpbGVtb2RlLCBNRVRIX08sIHN0YXRfZmlsZW1vZGVfZG9jfSwKKyAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworCitQeURvY19TVFJWQVIobW9kdWxlX2RvYywKKyJTX0lGTVRfOiBmaWxlIHR5cGUgYml0c1xuXAorU19JRkRJUjogZGlyZWN0b3J5XG5cCitTX0lGQ0hSOiBjaGFyYWN0ZXIgZGV2aWNlXG5cCitTX0lGQkxLOiBibG9jayBkZXZpY2VcblwKK1NfSUZSRUc6IHJlZ3VsYXIgZmlsZVxuXAorU19JRklGTzogZmlmbyAobmFtZWQgcGlwZSlcblwKK1NfSUZMTks6IHN5bWJvbGljIGxpbmtcblwKK1NfSUZTT0NLOiBzb2NrZXQgZmlsZVxuXAorU19JRkRPT1I6IGRvb3JcblwKK1NfSUZQT1JUOiBldmVudCBwb3J0XG5cCitTX0lGV0hUOiB3aGl0ZW91dFxuXAorXG4iCisKKyJTX0lTVUlEOiBzZXQgVUlEIGJpdFxuXAorU19JU0dJRDogc2V0IEdJRCBiaXRcblwKK1NfRU5GTVQ6IGZpbGUgbG9ja2luZyBlbmZvcmNlbWVudFxuXAorU19JU1ZUWDogc3RpY2t5IGJpdFxuXAorU19JUkVBRDogVW5peCBWNyBzeW5vbnltIGZvciBTX0lSVVNSXG5cCitTX0lXUklURTogVW5peCBWNyBzeW5vbnltIGZvciBTX0lXVVNSXG5cCitTX0lFWEVDOiBVbml4IFY3IHN5bm9ueW0gZm9yIFNfSVhVU1JcblwKK1NfSVJXWFU6IG1hc2sgZm9yIG93bmVyIHBlcm1pc3Npb25zXG5cCitTX0lSVVNSOiByZWFkIGJ5IG93bmVyXG5cCitTX0lXVVNSOiB3cml0ZSBieSBvd25lclxuXAorU19JWFVTUjogZXhlY3V0ZSBieSBvd25lclxuXAorU19JUldYRzogbWFzayBmb3IgZ3JvdXAgcGVybWlzc2lvbnNcblwKK1NfSVJHUlA6IHJlYWQgYnkgZ3JvdXBcblwKK1NfSVdHUlA6IHdyaXRlIGJ5IGdyb3VwXG5cCitTX0lYR1JQOiBleGVjdXRlIGJ5IGdyb3VwXG5cCitTX0lSV1hPOiBtYXNrIGZvciBvdGhlcnMgKG5vdCBpbiBncm91cCkgcGVybWlzc2lvbnNcblwKK1NfSVJPVEg6IHJlYWQgYnkgb3RoZXJzXG5cCitTX0lXT1RIOiB3cml0ZSBieSBvdGhlcnNcblwKK1NfSVhPVEg6IGV4ZWN1dGUgYnkgb3RoZXJzXG5cCitcbiIKKworIlVGX05PRFVNUDogZG8gbm90IGR1bXAgZmlsZVxuXAorVUZfSU1NVVRBQkxFOiBmaWxlIG1heSBub3QgYmUgY2hhbmdlZFxuXAorVUZfQVBQRU5EOiBmaWxlIG1heSBvbmx5IGJlIGFwcGVuZGVkIHRvXG5cCitVRl9PUEFRVUU6IGRpcmVjdG9yeSBpcyBvcGFxdWUgd2hlbiB2aWV3ZWQgdGhyb3VnaCBhIHVuaW9uIHN0YWNrXG5cCitVRl9OT1VOTElOSzogZmlsZSBtYXkgbm90IGJlIHJlbmFtZWQgb3IgZGVsZXRlZFxuXAorVUZfQ09NUFJFU1NFRDogT1MgWDogZmlsZSBpcyBoZnMtY29tcHJlc3NlZFxuXAorVUZfSElEREVOOiBPUyBYOiBmaWxlIHNob3VsZCBub3QgYmUgZGlzcGxheWVkXG5cCitTRl9BUkNISVZFRDogZmlsZSBtYXkgYmUgYXJjaGl2ZWRcblwKK1NGX0lNTVVUQUJMRTogZmlsZSBtYXkgbm90IGJlIGNoYW5nZWRcblwKK1NGX0FQUEVORDogZmlsZSBtYXkgb25seSBiZSBhcHBlbmRlZCB0b1xuXAorU0ZfTk9VTkxJTks6IGZpbGUgbWF5IG5vdCBiZSByZW5hbWVkIG9yIGRlbGV0ZWRcblwKK1NGX1NOQVBTSE9UOiBmaWxlIGlzIGEgc25hcHNob3QgZmlsZVxuXAorXG4iCisKKyJTVF9NT0RFXG5cCitTVF9JTk9cblwKK1NUX0RFVlxuXAorU1RfTkxJTktcblwKK1NUX1VJRFxuXAorU1RfR0lEXG5cCitTVF9TSVpFXG5cCitTVF9BVElNRVxuXAorU1RfTVRJTUVcblwKK1NUX0NUSU1FXG5cCisiKTsKKworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIHN0YXRtb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfc3RhdCIsCisgICAgbW9kdWxlX2RvYywKKyAgICAtMSwKKyAgICBzdGF0X21ldGhvZHMsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fc3RhdCh2b2lkKQoreworICAgIFB5T2JqZWN0ICptOworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnN0YXRtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZESVIpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkNIUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGQkxLKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZSRUcpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRklGTykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGTE5LKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZTT0NLKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZET09SKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZQT1JUKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZXSFQpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lTVUlEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVNHSUQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JU1ZUWCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0VORk1UKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUkVBRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lXUklURSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lFWEVDKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUldYVSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSVVNSKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVdVU1IpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JWFVTUikpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJXWEcpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUkdSUCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lXR1JQKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVhHUlApKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSV1hPKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJPVEgpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JV09USCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lYT1RIKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfTk9EVU1QKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX0lNTVVUQUJMRSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9BUFBFTkQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfT1BBUVVFKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX05PVU5MSU5LKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX0NPTVBSRVNTRUQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfSElEREVOKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX0FSQ0hJVkVEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX0lNTVVUQUJMRSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9BUFBFTkQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfTk9VTkxJTkspKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfU05BUFNIT1QpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfTU9ERSIsIDApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX0lOTyIsIDEpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX0RFViIsIDIpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX05MSU5LIiwgMykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfVUlEIiwgNCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfR0lEIiwgNSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfU0laRSIsIDYpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX0FUSU1FIiwgNykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfTVRJTUUiLCA4KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9DVElNRSIsIDkpKSByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBtOworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3RydWN0LmMgYi9Nb2R1bGVzL19zdHJ1Y3QuYwppbmRleCBhMjQ4NzUzLi4xZGU5NGU0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zdHJ1Y3QuYworKysgYi9Nb2R1bGVzL19zdHJ1Y3QuYwpAQCAtMjYsNiArMjYsNyBAQAogICAgIGNvbnN0IHN0cnVjdCBfZm9ybWF0ZGVmICpmbXRkZWY7CiAgICAgUHlfc3NpemVfdCBvZmZzZXQ7CiAgICAgUHlfc3NpemVfdCBzaXplOworICAgIFB5X3NzaXplX3QgcmVwZWF0OwogfSBmb3JtYXRjb2RlOwogCiAvKiBTdHJ1Y3Qgb2JqZWN0IGludGVyZmFjZSAqLwpAQCAtMTE5OSwxMiArMTIwMCwxMSBAQAogICAgIGNhc2UgJyEnOiAvKiBOZXR3b3JrIGJ5dGUgb3JkZXIgaXMgYmlnLWVuZGlhbiAqLwogICAgICAgICByZXR1cm4gYmlnZW5kaWFuX3RhYmxlOwogICAgIGNhc2UgJz0nOiB7IC8qIEhvc3QgYnl0ZSBvcmRlciAtLSBkaWZmZXJlbnQgZnJvbSBuYXRpdmUgaW4gYWxpZ25tZW50ISAqLwotICAgICAgICBpbnQgbiA9IDE7Ci0gICAgICAgIGNoYXIgKnAgPSAoY2hhciAqKSAmbjsKLSAgICAgICAgaWYgKCpwID09IDEpCi0gICAgICAgICAgICByZXR1cm4gbGlsZW5kaWFuX3RhYmxlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gYmlnZW5kaWFuX3RhYmxlOworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyAgICAgICAgcmV0dXJuIGxpbGVuZGlhbl90YWJsZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBiaWdlbmRpYW5fdGFibGU7CisjZW5kaWYKICAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgLS0qcGZtdDsgLyogQmFjayBvdXQgb2YgcG9pbnRlciBpbmNyZW1lbnQgKi8KQEAgLTEyNDgsNiArMTI0OCw5IEBACiAgICAgcmV0dXJuIHNpemU7CiB9CiAKKy8qCisgKiBTdHJ1Y3Qgb2JqZWN0IGltcGxlbWVudGF0aW9uLgorICovCiAKIC8qIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhIGZvcm1hdCBzdHJpbmcgKi8KIApAQCAtMTI2MSw3ICsxMjY0LDcgQEAKICAgICBjb25zdCBjaGFyICpzOwogICAgIGNvbnN0IGNoYXIgKmZtdDsKICAgICBjaGFyIGM7Ci0gICAgUHlfc3NpemVfdCBzaXplLCBsZW4sIG51bSwgaXRlbXNpemU7CisgICAgUHlfc3NpemVfdCBzaXplLCBsZW4sIG5jb2RlcywgbnVtLCBpdGVtc2l6ZTsKIAogICAgIGZtdCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPnNfZm9ybWF0KTsKIApAQCAtMTI3MCw2ICsxMjczLDcgQEAKICAgICBzID0gZm10OwogICAgIHNpemUgPSAwOwogICAgIGxlbiA9IDA7CisgICAgbmNvZGVzID0gMDsKICAgICB3aGlsZSAoKGMgPSAqcysrKSAhPSAnXDAnKSB7CiAgICAgICAgIGlmIChQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKGMpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTI5OSw5ICsxMzAzLDkgQEAKIAogICAgICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICAgICAgIGNhc2UgJ3MnOiAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgICAgICAgIGNhc2UgJ3AnOiBsZW4rKzsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdwJzogbGVuKys7IG5jb2RlcysrOyBicmVhazsKICAgICAgICAgICAgIGNhc2UgJ3gnOiBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IGxlbiArPSBudW07IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogbGVuICs9IG51bTsgaWYgKG51bSkgbmNvZGVzKys7IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgaXRlbXNpemUgPSBlLT5zaXplOwpAQCAtMTMxNiwxNCArMTMyMCwxNCBAQAogICAgIH0KIAogICAgIC8qIGNoZWNrIGZvciBvdmVyZmxvdyAqLwotICAgIGlmICgobGVuICsgMSkgPiAoUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoZm9ybWF0Y29kZSkpKSB7CisgICAgaWYgKChuY29kZXMgKyAxKSA+IChQWV9TU0laRV9UX01BWCAvIHNpemVvZihmb3JtYXRjb2RlKSkpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIHNlbGYtPnNfc2l6ZSA9IHNpemU7CiAgICAgc2VsZi0+c19sZW4gPSBsZW47Ci0gICAgY29kZXMgPSBQeU1lbV9NQUxMT0MoKGxlbiArIDEpICogc2l6ZW9mKGZvcm1hdGNvZGUpKTsKKyAgICBjb2RlcyA9IFB5TWVtX01BTExPQygobmNvZGVzICsgMSkgKiBzaXplb2YoZm9ybWF0Y29kZSkpOwogICAgIGlmIChjb2RlcyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEzNTUsMjMgKzEzNTksMjQgQEAKICAgICAgICAgICAgIGNvZGVzLT5vZmZzZXQgPSBzaXplOwogICAgICAgICAgICAgY29kZXMtPnNpemUgPSBudW07CiAgICAgICAgICAgICBjb2Rlcy0+Zm10ZGVmID0gZTsKKyAgICAgICAgICAgIGNvZGVzLT5yZXBlYXQgPSAxOwogICAgICAgICAgICAgY29kZXMrKzsKICAgICAgICAgICAgIHNpemUgKz0gbnVtOwogICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ3gnKSB7CiAgICAgICAgICAgICBzaXplICs9IG51bTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdoaWxlICgtLW51bSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29kZXMtPm9mZnNldCA9IHNpemU7Ci0gICAgICAgICAgICAgICAgY29kZXMtPnNpemUgPSBlLT5zaXplOwotICAgICAgICAgICAgICAgIGNvZGVzLT5mbXRkZWYgPSBlOwotICAgICAgICAgICAgICAgIGNvZGVzKys7Ci0gICAgICAgICAgICAgICAgc2l6ZSArPSBlLT5zaXplOwotICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG51bSkgeworICAgICAgICAgICAgY29kZXMtPm9mZnNldCA9IHNpemU7CisgICAgICAgICAgICBjb2Rlcy0+c2l6ZSA9IGUtPnNpemU7CisgICAgICAgICAgICBjb2Rlcy0+Zm10ZGVmID0gZTsKKyAgICAgICAgICAgIGNvZGVzLT5yZXBlYXQgPSBudW07CisgICAgICAgICAgICBjb2RlcysrOworICAgICAgICAgICAgc2l6ZSArPSBlLT5zaXplICogbnVtOwogICAgICAgICB9CiAgICAgfQogICAgIGNvZGVzLT5mbXRkZWYgPSBOVUxMOwogICAgIGNvZGVzLT5vZmZzZXQgPSBzaXplOwogICAgIGNvZGVzLT5zaXplID0gMDsKKyAgICBjb2Rlcy0+cmVwZWF0ID0gMDsKIAogICAgIHJldHVybiAwOwogCkBAIC0xNDYwLDIyICsxNDY1LDI2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZm9yIChjb2RlID0gc29zZWxmLT5zX2NvZGVzOyBjb2RlLT5mbXRkZWYgIT0gTlVMTDsgY29kZSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp2OwogICAgICAgICBjb25zdCBmb3JtYXRkZWYgKmUgPSBjb2RlLT5mbXRkZWY7CiAgICAgICAgIGNvbnN0IGNoYXIgKnJlcyA9IHN0YXJ0ZnJvbSArIGNvZGUtPm9mZnNldDsKLSAgICAgICAgaWYgKGUtPmZvcm1hdCA9PSAncycpIHsKLSAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHJlcywgY29kZS0+c2l6ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZS0+Zm9ybWF0ID09ICdwJykgewotICAgICAgICAgICAgUHlfc3NpemVfdCBuID0gKih1bnNpZ25lZCBjaGFyKilyZXM7Ci0gICAgICAgICAgICBpZiAobiA+PSBjb2RlLT5zaXplKQotICAgICAgICAgICAgICAgIG4gPSBjb2RlLT5zaXplIC0gMTsKLSAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHJlcyArIDEsIG4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdiA9IGUtPnVucGFjayhyZXMsIGUpOworICAgICAgICBQeV9zc2l6ZV90IGogPSBjb2RlLT5yZXBlYXQ7CisgICAgICAgIHdoaWxlIChqLS0pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2OworICAgICAgICAgICAgaWYgKGUtPmZvcm1hdCA9PSAncycpIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShyZXMsIGNvZGUtPnNpemUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChlLT5mb3JtYXQgPT0gJ3AnKSB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuID0gKih1bnNpZ25lZCBjaGFyKilyZXM7CisgICAgICAgICAgICAgICAgaWYgKG4gPj0gY29kZS0+c2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgbiA9IGNvZGUtPnNpemUgLSAxOworICAgICAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHJlcyArIDEsIG4pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2ID0gZS0+dW5wYWNrKHJlcywgZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCBpKyssIHYpOworICAgICAgICAgICAgcmVzICs9IGNvZGUtPnNpemU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXN1bHQsIGkrKywgdik7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1NTcsNiArMTU2NiwxNDIgQEAKIH0KIAogCisvKiBVbnBhY2sgaXRlcmF0b3IgdHlwZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5U3RydWN0T2JqZWN0ICpzbzsKKyAgICBQeV9idWZmZXIgYnVmOworICAgIFB5X3NzaXplX3QgaW5kZXg7Cit9IHVucGFja2l0ZXJvYmplY3Q7CisKK3N0YXRpYyB2b2lkCit1bnBhY2tpdGVyX2RlYWxsb2ModW5wYWNraXRlcm9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9YREVDUkVGKHNlbGYtPnNvKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT5idWYpOworICAgIFB5T2JqZWN0X0dDX0RlbChzZWxmKTsKK30KKworc3RhdGljIGludAordW5wYWNraXRlcl90cmF2ZXJzZSh1bnBhY2tpdGVyb2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChzZWxmLT5zbyk7CisgICAgUHlfVklTSVQoc2VsZi0+YnVmLm9iaik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bnBhY2tpdGVyX2xlbih1bnBhY2tpdGVyb2JqZWN0ICpzZWxmKQoreworICAgIFB5X3NzaXplX3QgbGVuOworICAgIGlmIChzZWxmLT5zbyA9PSBOVUxMKQorICAgICAgICBsZW4gPSAwOworICAgIGVsc2UKKyAgICAgICAgbGVuID0gKHNlbGYtPmJ1Zi5sZW4gLSBzZWxmLT5pbmRleCkgLyBzZWxmLT5zby0+c19zaXplOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QobGVuKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIHVucGFja2l0ZXJfbWV0aG9kc1tdID0geworICAgIHsiX19sZW5ndGhfaGludF9fIiwgKFB5Q0Z1bmN0aW9uKSB1bnBhY2tpdGVyX2xlbiwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlPYmplY3QgKgordW5wYWNraXRlcl9pdGVybmV4dCh1bnBhY2tpdGVyb2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgaWYgKHNlbGYtPnNvID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChzZWxmLT5pbmRleCA+PSBzZWxmLT5idWYubGVuKSB7CisgICAgICAgIC8qIEl0ZXJhdG9yIGV4aGF1c3RlZCAqLworICAgICAgICBQeV9DTEVBUihzZWxmLT5zbyk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1Zik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBhc3NlcnQoc2VsZi0+aW5kZXggKyBzZWxmLT5zby0+c19zaXplIDw9IHNlbGYtPmJ1Zi5sZW4pOworICAgIHJlc3VsdCA9IHNfdW5wYWNrX2ludGVybmFsKHNlbGYtPnNvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKikgc2VsZi0+YnVmLmJ1ZiArIHNlbGYtPmluZGV4KTsKKyAgICBzZWxmLT5pbmRleCArPSBzZWxmLT5zby0+c19zaXplOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgdW5wYWNraXRlcl90eXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCisgICAgInVucGFja19pdGVyYXRvciIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgc2l6ZW9mKHVucGFja2l0ZXJvYmplY3QpLCAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgKGRlc3RydWN0b3IpdW5wYWNraXRlcl9kZWFsbG9jLCAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgIC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKXVucGFja2l0ZXJfdHJhdmVyc2UsICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgUHlPYmplY3RfU2VsZkl0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgKGl0ZXJuZXh0ZnVuYyl1bnBhY2tpdGVyX2l0ZXJuZXh0LCAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIHVucGFja2l0ZXJfbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworfTsKKworUHlEb2NfU1RSVkFSKHNfaXRlcl91bnBhY2tfX2RvY19fLAorIlMuaXRlcl91bnBhY2soYnVmZmVyKSAtPiBpdGVyYXRvcih2MSwgdjIsIC4uLilcblwKK1xuXAorUmV0dXJuIGFuIGl0ZXJhdG9yIHlpZWxkaW5nIHR1cGxlcyB1bnBhY2tlZCBmcm9tIHRoZSBnaXZlbiBieXRlc1xuXAorc291cmNlLCBsaWtlIGEgcmVwZWF0ZWQgaW52b2NhdGlvbiBvZiB1bnBhY2tfZnJvbSgpLiAgUmVxdWlyZXNcblwKK3RoYXQgdGhlIGJ5dGVzIGxlbmd0aCBiZSBhIG11bHRpcGxlIG9mIHRoZSBzdHJ1Y3Qgc2l6ZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3NfaXRlcl91bnBhY2soUHlPYmplY3QgKl9zbywgUHlPYmplY3QgKmlucHV0KQoreworICAgIFB5U3RydWN0T2JqZWN0ICpzbyA9IChQeVN0cnVjdE9iamVjdCAqKSBfc287CisgICAgdW5wYWNraXRlcm9iamVjdCAqc2VsZjsKKworICAgIGFzc2VydChQeVN0cnVjdF9DaGVjayhfc28pKTsKKyAgICBhc3NlcnQoc28tPnNfY29kZXMgIT0gTlVMTCk7CisKKyAgICBpZiAoc28tPnNfc2l6ZSA9PSAwKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChTdHJ1Y3RFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgaXRlcmF0aXZlbHkgdW5wYWNrIHdpdGggYSBzdHJ1Y3Qgb2YgbGVuZ3RoIDAiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VsZiA9ICh1bnBhY2tpdGVyb2JqZWN0ICopIFB5VHlwZV9HZW5lcmljQWxsb2MoJnVucGFja2l0ZXJfdHlwZSwgMCk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGlucHV0LCAmc2VsZi0+YnVmLCBQeUJVRl9TSU1QTEUpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoc2VsZi0+YnVmLmxlbiAlIHNvLT5zX3NpemUgIT0gMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoU3RydWN0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aXZlIHVucGFja2luZyByZXF1aXJlcyBhIGJ5dGVzIGxlbmd0aCAiCisgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgb2YgJXpkIiwKKyAgICAgICAgICAgICAgICAgICAgIHNvLT5zX3NpemUpOworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9JTkNSRUYoc28pOworICAgIHNlbGYtPnNvID0gc287CisgICAgc2VsZi0+aW5kZXggPSAwOworICAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsKK30KKworCiAvKgogICogR3V0cyBvZiB0aGUgcGFjayBmdW5jdGlvbi4KICAqCkBAIC0xNTc4LDYyICsxNzIzLDY3IEBACiAgICAgbWVtc2V0KGJ1ZiwgJ1wwJywgc29zZWxmLT5zX3NpemUpOwogICAgIGkgPSBvZmZzZXQ7CiAgICAgZm9yIChjb2RlID0gc29zZWxmLT5zX2NvZGVzOyBjb2RlLT5mbXRkZWYgIT0gTlVMTDsgY29kZSsrKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgbjsKLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIGkrKyk7CiAgICAgICAgIGNvbnN0IGZvcm1hdGRlZiAqZSA9IGNvZGUtPmZtdGRlZjsKICAgICAgICAgY2hhciAqcmVzID0gYnVmICsgY29kZS0+b2Zmc2V0OwotICAgICAgICBpZiAoZS0+Zm9ybWF0ID09ICdzJykgewotICAgICAgICAgICAgaW50IGlzc3RyaW5nOwotICAgICAgICAgICAgdm9pZCAqcDsKLSAgICAgICAgICAgIGlzc3RyaW5nID0gUHlCeXRlc19DaGVjayh2KTsKLSAgICAgICAgICAgIGlmICghaXNzdHJpbmcgJiYgIVB5Qnl0ZUFycmF5X0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgZm9yICdzJyBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodik7Ci0gICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHYpOwotICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobiA+IGNvZGUtPnNpemUpCi0gICAgICAgICAgICAgICAgbiA9IGNvZGUtPnNpemU7Ci0gICAgICAgICAgICBpZiAobiA+IDApCi0gICAgICAgICAgICAgICAgbWVtY3B5KHJlcywgcCwgbik7Ci0gICAgICAgIH0gZWxzZSBpZiAoZS0+Zm9ybWF0ID09ICdwJykgewotICAgICAgICAgICAgaW50IGlzc3RyaW5nOwotICAgICAgICAgICAgdm9pZCAqcDsKLSAgICAgICAgICAgIGlzc3RyaW5nID0gUHlCeXRlc19DaGVjayh2KTsKLSAgICAgICAgICAgIGlmICghaXNzdHJpbmcgJiYgIVB5Qnl0ZUFycmF5X0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgZm9yICdwJyBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlzc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodik7Ci0gICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHYpOwotICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobiA+IChjb2RlLT5zaXplIC0gMSkpCi0gICAgICAgICAgICAgICAgbiA9IGNvZGUtPnNpemUgLSAxOwotICAgICAgICAgICAgaWYgKG4gPiAwKQotICAgICAgICAgICAgICAgIG1lbWNweShyZXMgKyAxLCBwLCBuKTsKLSAgICAgICAgICAgIGlmIChuID4gMjU1KQotICAgICAgICAgICAgICAgIG4gPSAyNTU7Ci0gICAgICAgICAgICAqcmVzID0gUHlfU0FGRV9ET1dOQ0FTVChuLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBjaGFyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChlLT5wYWNrKHJlcywgdiwgZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh2KSAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICBQeV9zc2l6ZV90IGogPSBjb2RlLT5yZXBlYXQ7CisgICAgICAgIHdoaWxlIChqLS0pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCBpKyspOworICAgICAgICAgICAgaWYgKGUtPmZvcm1hdCA9PSAncycpIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG47CisgICAgICAgICAgICAgICAgaW50IGlzc3RyaW5nOworICAgICAgICAgICAgICAgIHZvaWQgKnA7CisgICAgICAgICAgICAgICAgaXNzdHJpbmcgPSBQeUJ5dGVzX0NoZWNrKHYpOworICAgICAgICAgICAgICAgIGlmICghaXNzdHJpbmcgJiYgIVB5Qnl0ZUFycmF5X0NoZWNrKHYpKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgZm9yICdzJyBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlzc3RyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVzX0dFVF9TSVpFKHYpOworICAgICAgICAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUodik7CisgICAgICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcodik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuID4gY29kZS0+c2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgbiA9IGNvZGUtPnNpemU7CisgICAgICAgICAgICAgICAgaWYgKG4gPiAwKQorICAgICAgICAgICAgICAgICAgICBtZW1jcHkocmVzLCBwLCBuKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+Zm9ybWF0ID09ICdwJykgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbjsKKyAgICAgICAgICAgICAgICBpbnQgaXNzdHJpbmc7CisgICAgICAgICAgICAgICAgdm9pZCAqcDsKKyAgICAgICAgICAgICAgICBpc3N0cmluZyA9IFB5Qnl0ZXNfQ2hlY2sodik7CisgICAgICAgICAgICAgICAgaWYgKCFpc3N0cmluZyAmJiAhUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciAncCcgbXVzdCBiZSBhIGJ5dGVzIG9iamVjdCIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpc3N0cmluZykgeworICAgICAgICAgICAgICAgICAgICBuID0gUHlCeXRlc19HRVRfU0laRSh2KTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHYpOworICAgICAgICAgICAgICAgICAgICBwID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobiA+IChjb2RlLT5zaXplIC0gMSkpCisgICAgICAgICAgICAgICAgICAgIG4gPSBjb2RlLT5zaXplIC0gMTsKKyAgICAgICAgICAgICAgICBpZiAobiA+IDApCisgICAgICAgICAgICAgICAgICAgIG1lbWNweShyZXMgKyAxLCBwLCBuKTsKKyAgICAgICAgICAgICAgICBpZiAobiA+IDI1NSkKKyAgICAgICAgICAgICAgICAgICAgbiA9IDI1NTsKKyAgICAgICAgICAgICAgICAqcmVzID0gUHlfU0FGRV9ET1dOQ0FTVChuLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBjaGFyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGUtPnBhY2socmVzLCB2LCBlKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh2KSAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlcyArPSBjb2RlLT5zaXplOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNzY5LDE0ICsxOTE5LDE4IEBACiBzX3NpemVvZihQeVN0cnVjdE9iamVjdCAqc2VsZiwgdm9pZCAqdW51c2VkKQogewogICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBmb3JtYXRjb2RlICpjb2RlOwogCi0gICAgc2l6ZSA9IHNpemVvZihQeVN0cnVjdE9iamVjdCkgKyBzaXplb2YoZm9ybWF0Y29kZSkgKiAoc2VsZi0+c19sZW4gKyAxKTsKKyAgICBzaXplID0gc2l6ZW9mKFB5U3RydWN0T2JqZWN0KSArIHNpemVvZihmb3JtYXRjb2RlKTsKKyAgICBmb3IgKGNvZGUgPSBzZWxmLT5zX2NvZGVzOyBjb2RlLT5mbXRkZWYgIT0gTlVMTDsgY29kZSsrKQorICAgICAgICBzaXplICs9IHNpemVvZihmb3JtYXRjb2RlKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNpemUpOwogfQogCiAvKiBMaXN0IG9mIGZ1bmN0aW9ucyAqLwogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIHNfbWV0aG9kc1tdID0geworICAgIHsiaXRlcl91bnBhY2siLCAgICAgc19pdGVyX3VucGFjaywgIE1FVEhfTywgc19pdGVyX3VucGFja19fZG9jX199LAogICAgIHsicGFjayIsICAgICAgICAgICAgc19wYWNrLCAgICAgICAgIE1FVEhfVkFSQVJHUywgc19wYWNrX19kb2NfX30sCiAgICAgeyJwYWNrX2ludG8iLCAgICAgICBzX3BhY2tfaW50bywgICAgTUVUSF9WQVJBUkdTLCBzX3BhY2tfaW50b19fZG9jX199LAogICAgIHsidW5wYWNrIiwgICAgICAgICAgc191bnBhY2ssICAgICAgIE1FVEhfTywgc191bnBhY2tfX2RvY19ffSwKQEAgLTIwMjYsOSArMjE4MCwzNCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1B5RG9jX1NUUlZBUihpdGVyX3VucGFja19kb2MsCisiaXRlcl91bnBhY2soZm10LCBidWZmZXIpIC0+IGl0ZXJhdG9yKHYxLCB2MiwgLi4uKVxuXAorXG5cCitSZXR1cm4gYW4gaXRlcmF0b3IgeWllbGRpbmcgdHVwbGVzIHVucGFja2VkIGZyb20gdGhlIGdpdmVuIGJ5dGVzXG5cCitzb3VyY2UgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQgc3RyaW5nLCBsaWtlIGEgcmVwZWF0ZWQgaW52b2NhdGlvbiBvZlxuXAordW5wYWNrX2Zyb20oKS4gIFJlcXVpcmVzIHRoYXQgdGhlIGJ5dGVzIGxlbmd0aCBiZSBhIG11bHRpcGxlIG9mIHRoZVxuXAorZm9ybWF0IHN0cnVjdCBzaXplLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgoraXRlcl91bnBhY2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpzX29iamVjdCwgKmZtdCwgKmlucHV0LCAqcmVzdWx0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTzppdGVyX3VucGFjayIsICZmbXQsICZpbnB1dCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc19vYmplY3QgPSBjYWNoZV9zdHJ1Y3QoZm10KTsKKyAgICBpZiAoc19vYmplY3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gc19pdGVyX3VucGFjayhzX29iamVjdCwgaW5wdXQpOworICAgIFB5X0RFQ1JFRihzX29iamVjdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBtb2R1bGVfZnVuY3Rpb25zW10gPSB7CiAgICAgeyJfY2xlYXJjYWNoZSIsICAgICAoUHlDRnVuY3Rpb24pY2xlYXJjYWNoZSwgICAgICAgIE1FVEhfTk9BUkdTLCAgICBjbGVhcmNhY2hlX2RvY30sCiAgICAgeyJjYWxjc2l6ZSIsICAgICAgICBjYWxjc2l6ZSwgICAgICAgTUVUSF9PLCBjYWxjc2l6ZV9kb2N9LAorICAgIHsiaXRlcl91bnBhY2siLCAgICAgaXRlcl91bnBhY2ssICAgIE1FVEhfVkFSQVJHUywgICBpdGVyX3VucGFja19kb2N9LAogICAgIHsicGFjayIsICAgICAgICAgICAgcGFjaywgICAgICAgICAgIE1FVEhfVkFSQVJHUywgICBwYWNrX2RvY30sCiAgICAgeyJwYWNrX2ludG8iLCAgICAgICBwYWNrX2ludG8sICAgICAgTUVUSF9WQVJBUkdTLCAgIHBhY2tfaW50b19kb2N9LAogICAgIHsidW5wYWNrIiwgICAgICAgICAgdW5wYWNrLCBNRVRIX1ZBUkFSR1MsICAgdW5wYWNrX2RvY30sCkBAIC0yMDk4LDEzICsyMjc3LDEzIEBACiAKICAgICAvKiBDaGVjayBlbmRpYW4gYW5kIHN3YXAgaW4gZmFzdGVyIGZ1bmN0aW9ucyAqLwogICAgIHsKLSAgICAgICAgaW50IG9uZSA9IDE7CiAgICAgICAgIGZvcm1hdGRlZiAqbmF0aXZlID0gbmF0aXZlX3RhYmxlOwogICAgICAgICBmb3JtYXRkZWYgKm90aGVyLCAqcHRyOwotICAgICAgICBpZiAoKGludCkqKHVuc2lnbmVkIGNoYXIqKSZvbmUpCi0gICAgICAgICAgICBvdGhlciA9IGxpbGVuZGlhbl90YWJsZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3RoZXIgPSBiaWdlbmRpYW5fdGFibGU7CisjaWYgUFlfTElUVExFX0VORElBTgorICAgICAgICBvdGhlciA9IGxpbGVuZGlhbl90YWJsZTsKKyNlbHNlCisgICAgICAgIG90aGVyID0gYmlnZW5kaWFuX3RhYmxlOworI2VuZGlmCiAgICAgICAgIC8qIFNjYW4gdGhyb3VnaCB0aGUgbmF0aXZlIHRhYmxlLCBmaW5kIGEgbWF0Y2hpbmcKICAgICAgICAgICAgZW50cnkgaW4gdGhlIGVuZGlhbiB0YWJsZSBhbmQgc3dhcCBpbiB0aGUKICAgICAgICAgICAgbmF0aXZlIGltcGxlbWVudGF0aW9ucyB3aGVuZXZlciBwb3NzaWJsZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGJ1ZmZlci5jIGIvTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCmluZGV4IDMxNjY2NmUuLjBjNmVmMTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3Rlc3RidWZmZXIuYworKysgYi9Nb2R1bGVzL190ZXN0YnVmZmVyLmMKQEAgLTE4MTUsNyArMTgxNSw3IEBACiAgICAgICAgIGlmIChpbml0X3NsaWNlKGJhc2UsIGtleSwgMCkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJfb2NjdXJyZWQ7CiAgICAgfQotICAgIGVsc2UgaWYgUHlUdXBsZV9DaGVjayhrZXkpIHsKKyAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKGtleSkpIHsKICAgICAgICAgLyogbXVsdGktZGltZW5zaW9uYWwgc2xpY2UgKi8KICAgICAgICAgUHlPYmplY3QgKnR1cGxlID0ga2V5OwogICAgICAgICBQeV9zc2l6ZV90IGksIG47CkBAIC0yODM3LDM2ICsyODM3LDM2IEBACiAgICAgaWYgKHNpbXBsZV9mb3JtYXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfTUFYX05ESU0iLCBORF9NQVhfTkRJTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX1ZBUkVYUE9SVCIsIE5EX1ZBUkVYUE9SVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX1dSSVRBQkxFIiwgTkRfV1JJVEFCTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9GT1JUUkFOIiwgTkRfRk9SVFJBTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX1NDQUxBUiIsIE5EX1NDQUxBUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX1BJTCIsIE5EX1BJTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX0dFVEJVRl9GQUlMIiwgTkRfR0VUQlVGX0ZBSUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9HRVRCVUZfVU5ERUZJTkVEIiwgTkRfR0VUQlVGX1VOREVGSU5FRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX1JFRElSRUNUIiwgTkRfUkVESVJFQ1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX01BWF9ORElNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9WQVJFWFBPUlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1dSSVRBQkxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9GT1JUUkFOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9TQ0FMQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1BJTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfR0VUQlVGX0ZBSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX0dFVEJVRl9VTkRFRklORUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1JFRElSRUNUKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9TSU1QTEUiLCBQeUJVRl9TSU1QTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9XUklUQUJMRSIsIFB5QlVGX1dSSVRBQkxFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfRk9STUFUIiwgUHlCVUZfRk9STUFUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfTkQiLCBQeUJVRl9ORCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1NUUklERVMiLCBQeUJVRl9TVFJJREVTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfSU5ESVJFQ1QiLCBQeUJVRl9JTkRJUkVDVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0NfQ09OVElHVU9VUyIsIFB5QlVGX0NfQ09OVElHVU9VUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0ZfQ09OVElHVU9VUyIsIFB5QlVGX0ZfQ09OVElHVU9VUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0FOWV9DT05USUdVT1VTIiwgUHlCVUZfQU5ZX0NPTlRJR1VPVVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9GVUxMIiwgUHlCVUZfRlVMTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0ZVTExfUk8iLCBQeUJVRl9GVUxMX1JPKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfUkVDT1JEUyIsIFB5QlVGX1JFQ09SRFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9SRUNPUkRTX1JPIiwgUHlCVUZfUkVDT1JEU19STyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1NUUklERUQiLCBQeUJVRl9TVFJJREVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfU1RSSURFRF9STyIsIFB5QlVGX1NUUklERURfUk8pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9DT05USUciLCBQeUJVRl9DT05USUcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9DT05USUdfUk8iLCBQeUJVRl9DT05USUdfUk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1NJTVBMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfV1JJVEFCTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0ZPUk1BVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1NUUklERVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0lORElSRUNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9DX0NPTlRJR1VPVVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0ZfQ09OVElHVU9VUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfQU5ZX0NPTlRJR1VPVVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0ZVTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0ZVTExfUk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1JFQ09SRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1JFQ09SRFNfUk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1NUUklERUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1NUUklERURfUk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0NPTlRJRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfQ09OVElHX1JPKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9SRUFEIiwgUHlCVUZfUkVBRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1dSSVRFIiwgUHlCVUZfV1JJVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1JFQUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1dSSVRFKTsKIAogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYyBiL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKaW5kZXggOTFmMjkxYS4uOWU4MTc4NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYworKysgYi9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCkBAIC02NSw2ICs2NSw2OSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QqCit0ZXN0X3NpemVvZl9jX3R5cGVzKFB5T2JqZWN0ICpzZWxmKQoreworI2RlZmluZSBDSEVDS19TSVpFT0YoVFlQRSwgRVhQRUNURUQpICAgICAgICAgXAorICAgIGlmIChFWFBFQ1RFRCAhPSBzaXplb2YoVFlQRSkpICB7ICAgICAgICAgXAorICAgICAgICBQeUVycl9Gb3JtYXQoVGVzdEVycm9yLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgInNpemVvZiglcykgPSAldSBpbnN0ZWFkIG9mICV1IiwgXAorICAgICAgICAgICAgI1RZUEUsIHNpemVvZihUWVBFKSwgRVhQRUNURUQpOyAgXAorICAgICAgICByZXR1cm4gKFB5T2JqZWN0KilOVUxMOyAgICAgICAgICAgICAgXAorICAgIH0KKyNkZWZpbmUgSVNfU0lHTkVEKFRZUEUpICgoKFRZUEUpLTEpIDwgKFRZUEUpMCkKKyNkZWZpbmUgQ0hFQ0tfU0lHTk5FU1MoVFlQRSwgU0lHTkVEKSAgICAgICAgIFwKKyAgICBpZiAoSVNfU0lHTkVEKFRZUEUpICE9IFNJR05FRCkgeyAgICAgICAgIFwKKyAgICAgICAgUHlFcnJfRm9ybWF0KFRlc3RFcnJvciwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICIlcyBzaWdubmVzcyBpcywgaW5zdGVhZCBvZiAlaSIsICBcCisgICAgICAgICAgICAjVFlQRSwgSVNfU0lHTkVEKFRZUEUpLCBTSUdORUQpOyBcCisgICAgICAgIHJldHVybiAoUHlPYmplY3QqKU5VTEw7ICAgICAgICAgICAgICBcCisgICAgfQorCisgICAgLyogaW50ZWdlciB0eXBlcyAqLworICAgIENIRUNLX1NJWkVPRihQeV9VQ1MxLCAxKTsKKyAgICBDSEVDS19TSVpFT0YoUHlfVUNTMiwgMik7CisgICAgQ0hFQ0tfU0laRU9GKFB5X1VDUzQsIDQpOworICAgIENIRUNLX1NJR05ORVNTKFB5X1VDUzEsIDApOworICAgIENIRUNLX1NJR05ORVNTKFB5X1VDUzIsIDApOworICAgIENIRUNLX1NJR05ORVNTKFB5X1VDUzQsIDApOworI2lmZGVmIEhBVkVfSU5UMzJfVAorICAgIENIRUNLX1NJWkVPRihQWV9JTlQzMl9ULCA0KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQWV9JTlQzMl9ULCAxKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfVUlOVDMyX1QKKyAgICBDSEVDS19TSVpFT0YoUFlfVUlOVDMyX1QsIDQpOworICAgIENIRUNLX1NJR05ORVNTKFBZX1VJTlQzMl9ULCAwKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfSU5UNjRfVAorICAgIENIRUNLX1NJWkVPRihQWV9JTlQ2NF9ULCA4KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQWV9JTlQ2NF9ULCAxKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfVUlOVDY0X1QKKyAgICBDSEVDS19TSVpFT0YoUFlfVUlOVDY0X1QsIDgpOworICAgIENIRUNLX1NJR05ORVNTKFBZX1VJTlQ2NF9ULCAwKTsKKyNlbmRpZgorCisgICAgLyogcG9pbnRlci9zaXplIHR5cGVzICovCisgICAgQ0hFQ0tfU0laRU9GKHNpemVfdCwgc2l6ZW9mKHZvaWQgKikpOworICAgIENIRUNLX1NJR05ORVNTKHNpemVfdCwgMCk7CisgICAgQ0hFQ0tfU0laRU9GKFB5X3NzaXplX3QsIHNpemVvZih2b2lkICopKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9zc2l6ZV90LCAxKTsKKworICAgIENIRUNLX1NJWkVPRihQeV91aW50cHRyX3QsIHNpemVvZih2b2lkICopKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV91aW50cHRyX3QsIDApOworICAgIENIRUNLX1NJWkVPRihQeV9pbnRwdHJfdCwgc2l6ZW9mKHZvaWQgKikpOworICAgIENIRUNLX1NJR05ORVNTKFB5X2ludHB0cl90LCAxKTsKKworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKKworI3VuZGVmIElTX1NJR05FRAorI3VuZGVmIENIRUNLX1NJR05FU1MKKyN1bmRlZiBDSEVDS19TSVpFT0YKK30KKworCitzdGF0aWMgUHlPYmplY3QqCiB0ZXN0X2xpc3RfYXBpKFB5T2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0KiBsaXN0OwpAQCAtMTQyNCw2ICsxNDg3LDIwIEBACiAgICAgZWxzZQogICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3Rfd2lkZWNoYXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5VW5pY29kZV9Gcm9tVW5pY29kZShMXCJcXFUwMDExMDAwMFwiLCAxKSBkaWRuJ3QgZmFpbCIpOworCisgICAgd2lkZSA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCAxKTsKKyAgICBpZiAod2lkZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERSh3aWRlKVswXSA9IGludmFsaWRbMF07CisgICAgaWYgKF9QeVVuaWNvZGVfUmVhZHkod2lkZSkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRih3aWRlKTsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5X0RFQ1JFRih3aWRlKTsKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X3dpZGVjaGFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeVVuaWNvZGVfUmVhZHkoKSBkaWRuJ3QgZmFpbCIpOworICAgIH0KICNlbmRpZgogCiAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0yNDc3LDYgKzI1NTQsMzQ0IEBACiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5sIiwgX1B5TG9uZ19Gcm9tVGltZV90KHNlYyksIG5zZWMpOwogfQogCitzdGF0aWMgdm9pZAorc2xvdF90cF9kZWwoUHlPYmplY3QgKnNlbGYpCit7CisgICAgX1B5X0lERU5USUZJRVIoX190cF9kZWxfXyk7CisgICAgUHlPYmplY3QgKmRlbCwgKnJlczsKKyAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgLyogVGVtcG9yYXJpbHkgcmVzdXJyZWN0IHRoZSBvYmplY3QuICovCisgICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA9PSAwKTsKKyAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOworCisgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKworICAgIC8qIEV4ZWN1dGUgX19kZWxfXyBtZXRob2QsIGlmIGFueS4gKi8KKyAgICBkZWwgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChzZWxmLCAmUHlJZF9fX3RwX2RlbF9fKTsKKyAgICBpZiAoZGVsICE9IE5VTEwpIHsKKyAgICAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZGVsLCBOVUxMKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGRlbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICBQeV9ERUNSRUYoZGVsKTsKKyAgICB9CisKKyAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCisgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKKworICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKKyAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgorICAgICAqLworICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKKyAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKKyAgICAgICAgcmV0dXJuOyAgICAgICAgIC8qIHRoaXMgaXMgdGhlIG5vcm1hbCBwYXRoIG91dCAqLworCisgICAgLyogX19kZWxfXyByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKKyAgICAgKiBuZXZlciBoYXBwZW5lZC4KKyAgICAgKi8KKyAgICB7CisgICAgICAgIFB5X3NzaXplX3QgcmVmY250ID0gc2VsZi0+b2JfcmVmY250OworICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOworICAgICAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7CisgICAgfQorICAgIGFzc2VydCghUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpIHx8CisgICAgICAgICAgIF9QeV9BU19HQyhzZWxmKS0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCisgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCisgICAgX1B5X0RFQ19SRUZUT1RBTDsKKyAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAorICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgorICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAorICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQorICAgICAqIHVuZG9uZS4KKyAgICAgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOworI2VuZGlmCit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aXRoX3RwX2RlbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeVR5cGVPYmplY3QgKnRwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOndpdGhfdHBfZGVsIiwgJm9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHRwID0gKFB5VHlwZU9iamVjdCAqKSBvYmo7CisgICAgaWYgKCFQeVR5cGVfQ2hlY2sob2JqKSB8fCAhUHlUeXBlX0hhc0ZlYXR1cmUodHAsIFB5X1RQRkxBR1NfSEVBUFRZUEUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiaGVhcCB0eXBlIGV4cGVjdGVkLCBnb3QgJVIiLCBvYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdHAtPnRwX2RlbCA9IHNsb3RfdHBfZGVsOworICAgIFB5X0lOQ1JFRihvYmopOworICAgIHJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGVzdF9pbmNyZWYoUHlPYmplY3QgKm9iKQoreworICAgIFB5X0lOQ1JFRihvYik7CisgICAgcmV0dXJuIG9iOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF94aW5jcmVmX2RvZXNudF9sZWFrKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeU9iamVjdCAqb2JqID0gUHlMb25nX0Zyb21Mb25nKDApOworICAgIFB5X1hJTkNSRUYoX3Rlc3RfaW5jcmVmKG9iaikpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9pbmNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5T2JqZWN0ICpvYmogPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgUHlfSU5DUkVGKF90ZXN0X2luY3JlZihvYmopKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfeGRlY3JlZl9kb2VzbnRfbGVhayhQeU9iamVjdCAqb2IpCit7CisgICAgUHlfWERFQ1JFRihQeUxvbmdfRnJvbUxvbmcoMCkpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9kZWNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5X0RFQ1JFRihQeUxvbmdfRnJvbUxvbmcoMCkpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9pbmNyZWZfZGVjcmVmX0FQSShQeU9iamVjdCAqb2IpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICBQeV9JbmNSZWYob2IpOworICAgIFB5X0RlY1JlZihvYmopOworICAgIFB5X0RlY1JlZihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW1lbV9hbGxvYzAoUHlPYmplY3QgKnNlbGYpCit7CisgICAgdm9pZCAqcHRyOworCisgICAgcHRyID0gUHlNZW1fTWFsbG9jKDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlNZW1fTWFsbG9jKDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlNZW1fRnJlZShwdHIpOworCisgICAgcHRyID0gUHlPYmplY3RfTWFsbG9jKDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlPYmplY3RfTWFsbG9jKDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlPYmplY3RfRnJlZShwdHIpOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKKworICAgIHNpemVfdCBtYWxsb2Nfc2l6ZTsKKyAgICB2b2lkICpyZWFsbG9jX3B0cjsKKyAgICBzaXplX3QgcmVhbGxvY19uZXdfc2l6ZTsKKyAgICB2b2lkICpmcmVlX3B0cjsKK30gYWxsb2NfaG9va190OworCitzdGF0aWMgdm9pZCogaG9va19tYWxsb2MgKHZvaWQqIGN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5tYWxsb2Nfc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIGhvb2stPmFsbG9jLm1hbGxvYyhob29rLT5hbGxvYy5jdHgsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCogaG9va19yZWFsbG9jICh2b2lkKiBjdHgsIHZvaWQqIHB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIGFsbG9jX2hvb2tfdCAqaG9vayA9IChhbGxvY19ob29rX3QgKiljdHg7CisgICAgaG9vay0+cmVhbGxvY19wdHIgPSBwdHI7CisgICAgaG9vay0+cmVhbGxvY19uZXdfc2l6ZSA9IG5ld19zaXplOworICAgIHJldHVybiBob29rLT5hbGxvYy5yZWFsbG9jKGhvb2stPmFsbG9jLmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhvb2tfZnJlZSAodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5mcmVlX3B0ciA9IHB0cjsKKyAgICBob29rLT5hbGxvYy5mcmVlKGhvb2stPmFsbG9jLmN0eCwgcHRyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3Rfc2V0YWxsb2NhdG9ycyhQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4pCit7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZXJyb3JfbXNnOworICAgIGFsbG9jX2hvb2tfdCBob29rOworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworICAgIHNpemVfdCBzaXplLCBzaXplMjsKKyAgICB2b2lkICpwdHIsICpwdHIyOworCisgICAgaG9vay5tYWxsb2Nfc2l6ZSA9IDA7CisgICAgaG9vay5yZWFsbG9jX3B0ciA9IE5VTEw7CisgICAgaG9vay5yZWFsbG9jX25ld19zaXplID0gMDsKKyAgICBob29rLmZyZWVfcHRyID0gTlVMTDsKKworICAgIGFsbG9jLmN0eCA9ICZob29rOworICAgIGFsbG9jLm1hbGxvYyA9ICZob29rX21hbGxvYzsKKyAgICBhbGxvYy5yZWFsbG9jID0gJmhvb2tfcmVhbGxvYzsKKyAgICBhbGxvYy5mcmVlID0gJmhvb2tfZnJlZTsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoZG9tYWluLCAmaG9vay5hbGxvYyk7CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKGRvbWFpbiwgJmFsbG9jKTsKKworICAgIHNpemUgPSA0MjsKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IHB0ciA9IFB5TWVtX1Jhd01hbGxvYyhzaXplKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fTUVNOiBwdHIgPSBQeU1lbV9NYWxsb2Moc2l6ZSk7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogcHRyID0gUHlPYmplY3RfTWFsbG9jKHNpemUpOyBicmVhazsKKyAgICBkZWZhdWx0OiBwdHIgPSBOVUxMOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAocHRyID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3JfbXNnID0gIm1hbGxvYyBmYWlsZWQiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGhvb2subWFsbG9jX3NpemUgIT0gc2l6ZSkgeworICAgICAgICBlcnJvcl9tc2cgPSAibWFsbG9jIGludmFsaWQgc2l6ZSI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBzaXplMiA9IDIwMDsKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IHB0cjIgPSBQeU1lbV9SYXdSZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IHB0cjIgPSBQeU1lbV9SZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9PQko6IHB0cjIgPSBQeU9iamVjdF9SZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBkZWZhdWx0OiBwdHIyID0gTlVMTDsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHB0cjIgPT0gTlVMTCkgeworICAgICAgICBlcnJvcl9tc2cgPSAicmVhbGxvYyBmYWlsZWQiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGhvb2sucmVhbGxvY19wdHIgIT0gcHRyCisgICAgICAgIHx8IGhvb2sucmVhbGxvY19uZXdfc2l6ZSAhPSBzaXplMikgeworICAgICAgICBlcnJvcl9tc2cgPSAicmVhbGxvYyBpbnZhbGlkIHBhcmFtZXRlcnMiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgc3dpdGNoKGRvbWFpbikKKyAgICB7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fUkFXOiBQeU1lbV9SYXdGcmVlKHB0cjIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IFB5TWVtX0ZyZWUocHRyMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogUHlPYmplY3RfRnJlZShwdHIyKTsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGhvb2suZnJlZV9wdHIgIT0gcHRyMikgeworICAgICAgICBlcnJvcl9tc2cgPSAiZnJlZSBpbnZhbGlkIHBvaW50ZXIiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJlcyA9IFB5X05vbmU7CisgICAgZ290byBmaW5hbGx5OworCitmYWlsOgorICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsIGVycm9yX21zZyk7CisKK2ZpbmFsbHk6CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKGRvbWFpbiwgJmhvb2suYWxsb2MpOworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5bWVtX3NldHJhd2FsbG9jYXRvcnMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIHRlc3Rfc2V0YWxsb2NhdG9ycyhQWU1FTV9ET01BSU5fUkFXKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfcHltZW1fc2V0YWxsb2NhdG9ycyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gdGVzdF9zZXRhbGxvY2F0b3JzKFBZTUVNX0RPTUFJTl9NRU0pOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiB0ZXN0X3NldGFsbG9jYXRvcnMoUFlNRU1fRE9NQUlOX09CSik7Cit9CisKK1B5RG9jX1NUUlZBUihkb2NzdHJpbmdfZW1wdHksCisiIgorKTsKKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ19ub19zaWduYXR1cmUsCisiVGhpcyBkb2NzdHJpbmcgaGFzIG5vIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUsCisiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUoJG1vZHVsZSwgLywgYm9vKVxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyLAorImRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlMigkbW9kdWxlLCAvLCBib28pXG4iCisiXG4iCisiLS1cbiIKKyJcbiIKKyJUaGlzIGRvY3N0cmluZyBhbHNvIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlLAorImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZSgkbW9kdWxlLCAvLCBzaWcpXG4iCisiLS1cbiIKKyJcbiIKKyJUaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUuIgorKTsKKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMsCisiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcygkbW9kdWxlLCAvLCBwYXJhbWV0ZXIpXG4iCisiLS1cbiIKKyJcbiIKKyJcbiIKKyJUaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUgYW5kIHNvbWUgZXh0cmEgbmV3bGluZXMuIgorKTsKKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzLAorImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzKG1vZHVsZSwgcz0nYXZvY2FkbycsXG4iCisiICAgICAgICBiPWInYnl0ZXMnLCBkPTMuMTQsIGk9MzUsIG49Tm9uZSwgdD1UcnVlLCBmPUZhbHNlLFxuIgorIiAgICAgICAgbG9jYWw9dGhlX251bWJlcl90aHJlZSwgc3lzPXN5cy5tYXhzaXplLFxuIgorIiAgICAgICAgZXhwPXN5cy5tYXhzaXplIC0gMSlcbiIKKyItLVxuIgorIlxuIgorIlxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZSB3aXRoIHBhcmFtZXRlcnMsXG4iCisiYW5kIHRoZSBwYXJhbWV0ZXJzIHRha2UgZGVmYXVsdHMgb2YgdmFyeWluZyB0eXBlcy4iCispOworCiAjaWZkZWYgV0lUSF9USFJFQUQKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeVRocmVhZF90eXBlX2xvY2sgc3RhcnRfZXZlbnQ7CkBAIC0yNTcxLDExICsyOTg2LDE3IEBACiAgICAgeyJyYWlzZV9leGNlcHRpb24iLCAgICAgICAgIHJhaXNlX2V4Y2VwdGlvbiwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJyYWlzZV9tZW1vcnllcnJvciIsICAgKFB5Q0Z1bmN0aW9uKXJhaXNlX21lbW9yeWVycm9yLCAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9jb25maWciLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9jb25maWcsICAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3NpemVvZl9jX3R5cGVzIiwgICAgIChQeUNGdW5jdGlvbil0ZXN0X3NpemVvZl9jX3R5cGVzLCBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2RhdGV0aW1lX2NhcGkiLCAgdGVzdF9kYXRldGltZV9jYXBpLCAgICAgICAgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9saXN0X2FwaSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9saXN0X2FwaSwgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2RpY3RfaXRlcmF0aW9uIiwgICAgIChQeUNGdW5jdGlvbil0ZXN0X2RpY3RfaXRlcmF0aW9uLE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbGF6eV9oYXNoX2luaGVyaXRhbmNlIiwgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sYXp5X2hhc2hfaW5oZXJpdGFuY2UsTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX2FwaSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FwaSwgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3hpbmNyZWZfZG9lc250X2xlYWsiLChQeUNGdW5jdGlvbil0ZXN0X3hpbmNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9pbmNyZWZfZG9lc250X2xlYWsiLCAoUHlDRnVuY3Rpb24pdGVzdF9pbmNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF94ZGVjcmVmX2RvZXNudF9sZWFrIiwoUHlDRnVuY3Rpb24pdGVzdF94ZGVjcmVmX2RvZXNudF9sZWFrLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfZGVjcmVmX2RvZXNudF9sZWFrIiwgKFB5Q0Z1bmN0aW9uKXRlc3RfZGVjcmVmX2RvZXNudF9sZWFrLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfaW5jcmVmX2RlY3JlZl9BUEkiLCAgKFB5Q0Z1bmN0aW9uKXRlc3RfaW5jcmVmX2RlY3JlZl9BUEksICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLCAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FuZF9vdmVyZmxvdywKICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX2FzX2RvdWJsZSIsICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FzX2RvdWJsZSxNRVRIX05PQVJHU30sCkBAIC0yNjYzLDYgKzMwODQsMzggQEAKICAgICB7InB5dGltZV9vYmplY3RfdG9fdGltZV90IiwgdGVzdF9weXRpbWVfb2JqZWN0X3RvX3RpbWVfdCwgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwiLCB0ZXN0X3B5dGltZV9vYmplY3RfdG9fdGltZXZhbCwgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJweXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjIiwgdGVzdF9weXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjLCAgTUVUSF9WQVJBUkdTfSwKKyAgICB7IndpdGhfdHBfZGVsIiwgICAgICAgICAgICAgd2l0aF90cF9kZWwsICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRlc3RfcHltZW0iLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW1lbV9hbGxvYzAsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfcHltZW1fYWxsb2MwIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHltZW1fc2V0cmF3YWxsb2NhdG9ycywgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9weW1lbV9zZXRhbGxvY2F0b3JzIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHltZW1fc2V0YWxsb2NhdG9ycywgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHlvYmplY3Rfc2V0YWxsb2NhdG9ycywgTUVUSF9OT0FSR1N9LAorICAgIHsibm9fZG9jc3RyaW5nIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImRvY3N0cmluZ19lbXB0eSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX2VtcHR5fSwKKyAgICB7ImRvY3N0cmluZ19ub19zaWduYXR1cmUiLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1MsCisgICAgICAgIGRvY3N0cmluZ19ub19zaWduYXR1cmV9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUiLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1MsCisgICAgICAgIGRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlfSwKKyAgICB7ImRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlMiIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyfSwKKyAgICB7ImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlfSwKKyAgICB7ImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMiLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1MsCisgICAgICAgIGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXN9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX3dpdGhfZGVmYXVsdHMiLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1MsCisgICAgICAgIGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzfSwKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHsiY2FsbF9pbl90ZW1wb3JhcnlfY190aHJlYWQiLCBjYWxsX2luX3RlbXBvcmFyeV9jX3RocmVhZCwgTUVUSF9PLAogICAgICBQeURvY19TVFIoInNldF9lcnJvcl9jbGFzcyhlcnJvcl9jbGFzcykgLT4gTm9uZSIpfSwKQEAgLTI4ODEsNiArMzMzNCw4IEBACiAgICAgUHlfSU5DUkVGKCZQeUluc3RhbmNlTWV0aG9kX1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiaW5zdGFuY2VtZXRob2QiLCAoUHlPYmplY3QgKikmUHlJbnN0YW5jZU1ldGhvZF9UeXBlKTsKIAorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJ0aGVfbnVtYmVyX3RocmVlIiwgMyk7CisKICAgICBUZXN0RXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl90ZXN0Y2FwaS5lcnJvciIsIE5VTEwsIE5VTEwpOwogICAgIFB5X0lOQ1JFRihUZXN0RXJyb3IpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZXJyb3IiLCBUZXN0RXJyb3IpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGVtYmVkLmMgYi9Nb2R1bGVzL190ZXN0ZW1iZWQuYwppbmRleCA1MWI0MzlmLi5hMjFkMjUxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0ZW1iZWQuYworKysgYi9Nb2R1bGVzL190ZXN0ZW1iZWQuYwpAQCAtMSw3ICsxLDI2IEBACiAjaW5jbHVkZSA8UHl0aG9uLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotdm9pZCBwcmludF9zdWJpbnRlcnAodm9pZCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVtYmVkZGVkIGludGVycHJldGVyIHRlc3RzIHRoYXQgbmVlZCBhIGN1c3RvbSBleGUKKyAqCisgKiBFeGVjdXRlZCB2aWEgJ0VtYmVkZGluZ1Rlc3RzJyBpbiBMaWIvdGVzdC90ZXN0X2NhcGkucHkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF90ZXN0ZW1iZWRfUHlfSW5pdGlhbGl6ZSh2b2lkKQoreworICAgIC8qIEhBQ0s6IHRoZSAiLi8iIGF0IGZyb250IGF2b2lkcyBhIHNlYXJjaCBhbG9uZyB0aGUgUEFUSCBpbgorICAgICAgIE1vZHVsZXMvZ2V0cGF0aC5jICovCisgICAgUHlfU2V0UHJvZ3JhbU5hbWUoTCIuL190ZXN0ZW1iZWQiKTsKKyAgICBQeV9Jbml0aWFsaXplKCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUZXN0IHJlcGVhdGVkIGluaXRhbGlzYXRpb24gYW5kIHN1YmludGVycHJldGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBwcmludF9zdWJpbnRlcnAodm9pZCkKIHsKICAgICAvKiBKdXN0IG91dHB1dCBzb21lIGRlYnVnIHN0dWZmICovCiAgICAgUHlUaHJlYWRTdGF0ZSAqdHMgPSBQeVRocmVhZFN0YXRlX0dldCgpOwpAQCAtMTQsNyArMzMsNyBAQAogICAgICk7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCitzdGF0aWMgdm9pZCB0ZXN0X3JlcGVhdGVkX2luaXRfYW5kX3N1YmludGVycHJldGVycyh2b2lkKQogewogICAgIFB5VGhyZWFkU3RhdGUgKm1haW5zdGF0ZSwgKnN1YnN0YXRlOwogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0yNCwxMCArNDMsNyBAQAogCiAgICAgZm9yIChpPTA7IGk8MzsgaSsrKSB7CiAgICAgICAgIHByaW50ZigiLS0tIFBhc3MgJWQgLS0tXG4iLCBpKTsKLSAgICAgICAgLyogSEFDSzogdGhlICIuLyIgYXQgZnJvbnQgYXZvaWRzIGEgc2VhcmNoIGFsb25nIHRoZSBQQVRIIGluCi0gICAgICAgICAgIE1vZHVsZXMvZ2V0cGF0aC5jICovCi0gICAgICAgIFB5X1NldFByb2dyYW1OYW1lKEwiLi9fdGVzdGVtYmVkIik7Ci0gICAgICAgIFB5X0luaXRpYWxpemUoKTsKKyAgICAgICAgX3Rlc3RlbWJlZF9QeV9Jbml0aWFsaXplKCk7CiAgICAgICAgIG1haW5zdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CiAKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtNTQsNSArNzAsNzEgQEAKICAgICAgICAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQobWFpbnN0YXRlKTsKICAgICAgICAgUHlfRmluYWxpemUoKTsKICAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGVzdCBmb3JjaW5nIGEgcGFydGljdWxhciBJTyBlbmNvZGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBjaGVja19zdGRpb19kZXRhaWxzKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICogZXJyb3JzKQoreworICAgIC8qIE91dHB1dCBpbmZvIGZvciB0aGUgdGVzdCBjYXNlIHRvIGNoZWNrICovCisgICAgaWYgKGVuY29kaW5nKSB7CisgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgZW5jb2Rpbmc6ICVzXG4iLCBlbmNvZGluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlbmNvZGluZzogZGVmYXVsdFxuIik7CisgICAgfQorICAgIGlmIChlcnJvcnMpIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlcnJvcnM6ICVzXG4iLCBlcnJvcnMpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgZXJyb3JzOiBkZWZhdWx0XG4iKTsKKyAgICB9CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgLyogRm9yY2UgdGhlIGdpdmVuIElPIGVuY29kaW5nICovCisgICAgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhlbmNvZGluZywgZXJyb3JzKTsKKyAgICBfdGVzdGVtYmVkX1B5X0luaXRpYWxpemUoKTsKKyAgICBQeVJ1bl9TaW1wbGVTdHJpbmcoCisgICAgICAgICJpbXBvcnQgc3lzOyIKKyAgICAgICAgInByaW50KCdzdGRpbjogezAuZW5jb2Rpbmd9OnswLmVycm9yc30nLmZvcm1hdChzeXMuc3RkaW4pKTsiCisgICAgICAgICJwcmludCgnc3Rkb3V0OiB7MC5lbmNvZGluZ306ezAuZXJyb3JzfScuZm9ybWF0KHN5cy5zdGRvdXQpKTsiCisgICAgICAgICJwcmludCgnc3RkZXJyOiB7MC5lbmNvZGluZ306ezAuZXJyb3JzfScuZm9ybWF0KHN5cy5zdGRlcnIpKTsiCisgICAgICAgICJzeXMuc3Rkb3V0LmZsdXNoKCkiCisgICAgKTsKKyAgICBQeV9GaW5hbGl6ZSgpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ZvcmNlZF9pb19lbmNvZGluZyh2b2lkKQoreworICAgIC8qIENoZWNrIHZhcmlvdXMgY29tYmluYXRpb25zICovCisgICAgcHJpbnRmKCItLS0gVXNlIGRlZmF1bHRzIC0tLVxuIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscyhOVUxMLCBOVUxMKTsKKyAgICBwcmludGYoIi0tLSBTZXQgZXJyb3JzIG9ubHkgLS0tXG4iKTsKKyAgICBjaGVja19zdGRpb19kZXRhaWxzKE5VTEwsICJzdXJyb2dhdGVlc2NhcGUiKTsKKyAgICBwcmludGYoIi0tLSBTZXQgZW5jb2Rpbmcgb25seSAtLS1cbiIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoImxhdGluLTEiLCBOVUxMKTsKKyAgICBwcmludGYoIi0tLSBTZXQgZW5jb2RpbmcgYW5kIGVycm9ycyAtLS1cbiIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoImxhdGluLTEiLCAic3Vycm9nYXRlZXNjYXBlIik7CisKKyAgICAvKiBDaGVjayBjYWxsaW5nIGFmdGVyIGluaXRpYWxpemF0aW9uIGZhaWxzICovCisgICAgUHlfSW5pdGlhbGl6ZSgpOworCisgICAgaWYgKFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoTlVMTCwgTlVMTCkgPT0gMCkgeworICAgICAgICBwcmludGYoIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5nIFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmciKTsKKyAgICB9CisgICAgUHlfRmluYWxpemUoKTsKK30KKworLyogRGlmZmVyZW50IGVtYmVkZGluZyB0ZXN0cyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKworICAgIC8qIFRPRE86IENoZWNrIHRoZSBhcmd1bWVudCBzdHJpbmcgdG8gYWxsb3cgZm9yIG1vcmUgdGVzdCBjYXNlcyAqLworICAgIGlmIChhcmdjID4gMSkgeworICAgICAgICAvKiBGb3Igbm93OiBhc3N1bWUgImZvcmNlZF9pb19lbmNvZGluZyAqLworICAgICAgICB0ZXN0X2ZvcmNlZF9pb19lbmNvZGluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFJ1biB0aGUgb3JpZ2luYWwgZW1iZWRkaW5nIHRlc3QgY2FzZSBieSBkZWZhdWx0ICovCisgICAgICAgIHRlc3RfcmVwZWF0ZWRfaW5pdF9hbmRfc3ViaW50ZXJwcmV0ZXJzKCk7CisgICAgfQogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGltcG9ydG11bHRpcGxlLmMgYi9Nb2R1bGVzL190ZXN0aW1wb3J0bXVsdGlwbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2FlYjY2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fdGVzdGltcG9ydG11bHRpcGxlLmMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIEMgZXh0ZW5zaW9ucyBtb2R1bGUgdG8gdGVzdCBpbXBvcnRpbmcgbXVsdGlwbGUgbW9kdWxlcyBmcm9tIG9uZSBjb21waWxlZAorICogZmlsZSAoaXNzdWUxNjQyMSkuIFRoaXMgZmlsZSBkZWZpbmVzIDMgbW9kdWxlcyAoX3Rlc3RpbXBvcnRtb2R1bGUsCisgKiBmb28sIGJhciksIG9ubHkgdGhlIGZpcnN0IG9uZSBpcyBjYWxsZWQgdGhlIHNhbWUgYXMgdGhlIGNvbXBpbGVkIGZpbGUuCisgKi8KKyNpbmNsdWRlPFB5dGhvbi5oPgorCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF90ZXN0aW1wb3J0bXVsdGlwbGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlIiwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZSBkb2MiLAorICAgIC0xLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMgUHlJbml0X190ZXN0aW1wb3J0bXVsdGlwbGUodm9pZCkKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfdGVzdGltcG9ydG11bHRpcGxlKTsKK30KKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfZm9vbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28iLAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlX2ZvbyBkb2MiLAorICAgIC0xLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMgUHlJbml0X190ZXN0aW1wb3J0bXVsdGlwbGVfZm9vKHZvaWQpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX2Zvb21vZHVsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX2Jhcm1vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGVfYmFyIiwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXIgZG9jIiwKKyAgICAtMSwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DIFB5SW5pdF9fdGVzdGltcG9ydG11bHRpcGxlX2Jhcih2b2lkKXsKKyAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfYmFybW9kdWxlKTsKK30KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMgYi9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYwppbmRleCBkMWRjNjFkLi45OTI1YjBlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYworKysgYi9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYwpAQCAtMTcsNiArMTcsOCBAQAogc3RhdGljIGxvbmcgbmJfdGhyZWFkcyA9IDA7CiBzdGF0aWMgUHlPYmplY3QgKnN0cl9kaWN0OwogCitfUHlfSURFTlRJRklFUihzdGRlcnIpOworCiAvKiBMb2NrIG9iamVjdHMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNjgsNyArNzAsNyBAQAogICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICAgICAgciA9IFB5VGhyZWFkX2FjcXVpcmVfbG9ja190aW1lZChsb2NrLCBtaWNyb3NlY29uZHMsIDEpOwogICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChyID09IFBZX0xPQ0tfSU5UUikgewogICAgICAgICAgICAgLyogUnVuIHNpZ25hbCBoYW5kbGVycyBpZiB3ZSB3ZXJlIGludGVycnVwdGVkLiAgUHJvcGFnYXRlCkBAIC0yNTUsMTQgKzI1NywxNyBAQAogc3RhdGljIHZvaWQKIHJsb2NrX2RlYWxsb2MocmxvY2tvYmplY3QgKnNlbGYpCiB7Ci0gICAgYXNzZXJ0KHNlbGYtPnJsb2NrX2xvY2spOwogICAgIGlmIChzZWxmLT5pbl93ZWFrcmVmbGlzdCAhPSBOVUxMKQogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKLSAgICAvKiBVbmxvY2sgdGhlIGxvY2sgc28gaXQncyBzYWZlIHRvIGZyZWUgaXQgKi8KLSAgICBpZiAoc2VsZi0+cmxvY2tfY291bnQgPiAwKQotICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CisgICAgLyogc2VsZi0+cmxvY2tfbG9jayBjYW4gYmUgTlVMTCBpZiBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCkgZmFpbGVkCisgICAgICAgaW4gcmxvY2tfbmV3KCkgKi8KKyAgICBpZiAoc2VsZi0+cmxvY2tfbG9jayAhPSBOVUxMKSB7CisgICAgICAgIC8qIFVubG9jayB0aGUgbG9jayBzbyBpdCdzIHNhZmUgdG8gZnJlZSBpdCAqLworICAgICAgICBpZiAoc2VsZi0+cmxvY2tfY291bnQgPiAwKQorICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHNlbGYtPnJsb2NrX2xvY2spOwogCi0gICAgUHlUaHJlYWRfZnJlZV9sb2NrKHNlbGYtPnJsb2NrX2xvY2spOworICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CisgICAgfQogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoc2VsZik7CiB9CiAKQEAgLTM3NCwxMyArMzc5LDEzIEBACiB0byBiZSBhdmFpbGFibGUgZm9yIG90aGVyIHRocmVhZHMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ybG9ja19hY3F1aXJlX3Jlc3RvcmUocmxvY2tvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCitybG9ja19hY3F1aXJlX3Jlc3RvcmUocmxvY2tvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGxvbmcgb3duZXI7CiAgICAgdW5zaWduZWQgbG9uZyBjb3VudDsKICAgICBpbnQgciA9IDE7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJnLCAia2w6X2FjcXVpcmVfcmVzdG9yZSIsICZjb3VudCwgJm93bmVyKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIihrbCk6X2FjcXVpcmVfcmVzdG9yZSIsICZjb3VudCwgJm93bmVyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIVB5VGhyZWFkX2FjcXVpcmVfbG9jayhzZWxmLT5ybG9ja19sb2NrLCAwKSkgewpAQCAtNDUyLDE1ICs0NTcsMTYgQEAKIAogICAgIHNlbGYgPSAocmxvY2tvYmplY3QgKikgdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CiAgICAgaWYgKHNlbGYgIT0gTlVMTCkgewotICAgICAgICBzZWxmLT5ybG9ja19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwotICAgICAgICBpZiAoc2VsZi0+cmxvY2tfbG9jayA9PSBOVUxMKSB7Ci0gICAgICAgICAgICB0eXBlLT50cF9mcmVlKHNlbGYpOwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRocmVhZEVycm9yLCAiY2FuJ3QgYWxsb2NhdGUgbG9jayIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KICAgICAgICAgc2VsZi0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogICAgICAgICBzZWxmLT5ybG9ja19vd25lciA9IDA7CiAgICAgICAgIHNlbGYtPnJsb2NrX2NvdW50ID0gMDsKKworICAgICAgICBzZWxmLT5ybG9ja19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgICAgICBpZiAoc2VsZi0+cmxvY2tfbG9jayA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGhyZWFkRXJyb3IsICJjYW4ndCBhbGxvY2F0ZSBsb2NrIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsKQEAgLTQ4Miw3ICs0ODgsNyBAQAogICAgIHsiX2lzX293bmVkIiwgICAgIChQeUNGdW5jdGlvbilybG9ja19pc19vd25lZCwKICAgICAgTUVUSF9OT0FSR1MsIHJsb2NrX2lzX293bmVkX2RvY30sCiAgICAgeyJfYWNxdWlyZV9yZXN0b3JlIiwgKFB5Q0Z1bmN0aW9uKXJsb2NrX2FjcXVpcmVfcmVzdG9yZSwKLSAgICAgTUVUSF9PLCBybG9ja19hY3F1aXJlX3Jlc3RvcmVfZG9jfSwKKyAgICAgTUVUSF9WQVJBUkdTLCBybG9ja19hY3F1aXJlX3Jlc3RvcmVfZG9jfSwKICAgICB7Il9yZWxlYXNlX3NhdmUiLCAoUHlDRnVuY3Rpb24pcmxvY2tfcmVsZWFzZV9zYXZlLAogICAgICBNRVRIX05PQVJHUywgcmxvY2tfcmVsZWFzZV9zYXZlX2RvY30sCiAgICAgeyJfX2VudGVyX18iLCAgICAoUHlDRnVuY3Rpb24pcmxvY2tfYWNxdWlyZSwKQEAgLTc0MSw3ICs3NDcsNyBAQAogICAgIHdyID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgc2VsZiwgTlVMTCk7CiAgICAgaWYgKHdyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyOwotICAgIHNlbGYtPndyX2NhbGxiYWNrID0gUHlDRnVuY3Rpb25fTmV3KCZ3cl9jYWxsYmFja19kZWYsIHdyKTsKKyAgICBzZWxmLT53cl9jYWxsYmFjayA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZ3cl9jYWxsYmFja19kZWYsIHdyLCBOVUxMKTsKICAgICBQeV9ERUNSRUYod3IpOwogICAgIGlmIChzZWxmLT53cl9jYWxsYmFjayA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycjsKQEAgLTEwMDEsNyArMTAwNyw3IEBACiAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigKICAgICAgICAgICAgICAgICAiVW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiB0aHJlYWQgc3RhcnRlZCBieSAiKTsKICAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWx1ZSwgJnRiKTsKLSAgICAgICAgICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgICAgICAgICAgZmlsZSA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgICAgICAgICAgaWYgKGZpbGUgIT0gTlVMTCAmJiBmaWxlICE9IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KGJvb3QtPmZ1bmMsIGZpbGUsIDApOwogICAgICAgICAgICAgZWxzZQpAQCAtMTE3Miw2ICsxMTc4LDY2IEBACiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBpbnRlcm5hbCBhbmQgc3BlY2lhbGl6ZWQgcHVycG9zZXMgb25seS5cblwKIEluIG1vc3QgYXBwbGljYXRpb25zIGB0aHJlYWRpbmcuZW51bWVyYXRlKClgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuIik7CiAKK3N0YXRpYyB2b2lkCityZWxlYXNlX3NlbnRpbmVsKHZvaWQgKndyKQoreworICAgIC8qIFRyaWNreTogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUKKyAgICAgICBpcyBiZWluZyBkZWxldGVkLiAgVGhlcmVmb3JlLCBvbmx5IHNpbXBsZSBDIGNvZGUgY2FuIHNhZmVseQorICAgICAgIGV4ZWN1dGUgaGVyZS4gKi8KKyAgICBQeU9iamVjdCAqb2JqID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1Qod3IpOworICAgIGxvY2tvYmplY3QgKmxvY2s7CisgICAgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIGFzc2VydChQeV9UWVBFKG9iaikgPT0gJkxvY2t0eXBlKTsKKyAgICAgICAgbG9jayA9IChsb2Nrb2JqZWN0ICopIG9iajsKKyAgICAgICAgaWYgKGxvY2stPmxvY2tlZCkgeworICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKGxvY2stPmxvY2tfbG9jayk7CisgICAgICAgICAgICBsb2NrLT5sb2NrZWQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIC8qIERlYWxsb2NhdGluZyBhIHdlYWtyZWYgd2l0aCBhIE5VTEwgY2FsbGJhY2sgb25seSBjYWxscworICAgICAgIFB5T2JqZWN0X0dDX0RlbCgpLCB3aGljaCBjYW4ndCBjYWxsIGFueSBQeXRob24gY29kZS4gKi8KKyAgICBQeV9ERUNSRUYod3IpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGhyZWFkX19zZXRfc2VudGluZWwoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKndyOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CisgICAgbG9ja29iamVjdCAqbG9jazsKKworICAgIGlmICh0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhICE9IE5VTEwpIHsKKyAgICAgICAgLyogV2UgbXVzdCBzdXBwb3J0IHRoZSByZS1jcmVhdGlvbiBvZiB0aGUgbG9jayBmcm9tIGEKKyAgICAgICAgICAgZm9yaygpZWQgY2hpbGQuICovCisgICAgICAgIGFzc2VydCh0c3RhdGUtPm9uX2RlbGV0ZSA9PSAmcmVsZWFzZV9zZW50aW5lbCk7CisgICAgICAgIHdyID0gKFB5T2JqZWN0ICopIHRzdGF0ZS0+b25fZGVsZXRlX2RhdGE7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlID0gTlVMTDsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGVfZGF0YSA9IE5VTEw7CisgICAgICAgIFB5X0RFQ1JFRih3cik7CisgICAgfQorICAgIGxvY2sgPSBuZXdsb2Nrb2JqZWN0KCk7CisgICAgaWYgKGxvY2sgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogVGhlIGxvY2sgaXMgb3duZWQgYnkgd2hvZXZlciBjYWxsZWQgX3NldF9zZW50aW5lbCgpLCBidXQgdGhlIHdlYWtyZWYKKyAgICAgICBoYW5ncyB0byB0aGUgdGhyZWFkIHN0YXRlLiAqLworICAgIHdyID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgbG9jaywgTlVMTCk7CisgICAgaWYgKHdyID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGxvY2spOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdHN0YXRlLT5vbl9kZWxldGVfZGF0YSA9ICh2b2lkICopIHdyOworICAgIHRzdGF0ZS0+b25fZGVsZXRlID0gJnJlbGVhc2Vfc2VudGluZWw7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKSBsb2NrOworfQorCitQeURvY19TVFJWQVIoX3NldF9zZW50aW5lbF9kb2MsCisiX3NldF9zZW50aW5lbCgpIC0+IGxvY2tcblwKK1xuXAorU2V0IGEgc2VudGluZWwgbG9jayB0aGF0IHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGUgY3VycmVudCB0aHJlYWRcblwKK3N0YXRlIGlzIGZpbmFsaXplZCAoYWZ0ZXIgaXQgaXMgdW50aWVkIGZyb20gdGhlIGludGVycHJldGVyKS5cblwKK1xuXAorVGhpcyBpcyBhIHByaXZhdGUgQVBJIGZvciB0aGUgdGhyZWFkaW5nIG1vZHVsZS4iKTsKKwogc3RhdGljIFB5T2JqZWN0ICoKIHRocmVhZF9zdGFja19zaXplKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTEyNDcsNiArMTMxMyw4IEBACiAgICAgIE1FVEhfTk9BUkdTLCBfY291bnRfZG9jfSwKICAgICB7InN0YWNrX3NpemUiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRocmVhZF9zdGFja19zaXplLAogICAgICBNRVRIX1ZBUkFSR1MsIHN0YWNrX3NpemVfZG9jfSwKKyAgICB7Il9zZXRfc2VudGluZWwiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRocmVhZF9fc2V0X3NlbnRpbmVsLAorICAgICBNRVRIX05PQVJHUywgX3NldF9zZW50aW5lbF9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3RraW50ZXIuYyBiL01vZHVsZXMvX3RraW50ZXIuYwppbmRleCAyNjJkNjc5Li5hZjQzMGZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190a2ludGVyLmMKKysrIGIvTW9kdWxlcy9fdGtpbnRlci5jCkBAIC0xMTQsNTIgKzExNCw2MCBAQAogCiAvKiBUaGUgdGhyZWFkaW5nIHNpdHVhdGlvbiBpcyBjb21wbGljYXRlZC4gIFRjbCBpcyBub3QgdGhyZWFkLXNhZmUsIGV4Y2VwdAogICAgd2hlbiBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtdGhyZWFkcy4KLSAgIFNvIHdlIG5lZWQgdG8gdXNlIGEgbG9jayBhcm91bmQgYWxsIHVzZXMgb2YgVGNsLiAgUHJldmlvdXNseSwgdGhlIFB5dGhvbgotICAgaW50ZXJwcmV0ZXIgbG9jayB3YXMgdXNlZCBmb3IgdGhpcy4gIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIHByb2JsZW1zIHdoZW4KLSAgIG90aGVyIFB5dGhvbiB0aHJlYWRzIG5lZWQgdG8gcnVuIHdoaWxlIFRjbCBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIGV2ZW50cy4KIAotICAgVG8gc29sdmUgdGhpcyBwcm9ibGVtLCBhIHNlcGFyYXRlIGxvY2sgZm9yIFRjbCBpcyBpbnRyb2R1Y2VkLiAgSG9sZGluZyBpdAotICAgaXMgaW5jb21wYXRpYmxlIHdpdGggaG9sZGluZyBQeXRob24ncyBpbnRlcnByZXRlciBsb2NrLiAgVGhlIGZvbGxvd2luZyBmb3VyCi0gICBtYWNyb3MgbWFuaXB1bGF0ZSBib3RoIGxvY2tzIHRvZ2V0aGVyLgorICAgU28gd2UgbmVlZCB0byB1c2UgYSBsb2NrIGFyb3VuZCBhbGwgdXNlcyBvZiBUY2wuICBQcmV2aW91c2x5LCB0aGUKKyAgIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIHdhcyB1c2VkIGZvciB0aGlzLiAgSG93ZXZlciwgdGhpcyBjYXVzZXMKKyAgIHByb2JsZW1zIHdoZW4gb3RoZXIgUHl0aG9uIHRocmVhZHMgbmVlZCB0byBydW4gd2hpbGUgVGNsIGlzIGJsb2NrZWQKKyAgIHdhaXRpbmcgZm9yIGV2ZW50cy4KIAotICAgRU5URVJfVENMIGFuZCBMRUFWRV9UQ0wgYXJlIGJyYWNrZXRzLCBqdXN0IGxpa2UgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBhbmQKLSAgIFB5X0VORF9BTExPV19USFJFQURTLiAgVGhleSBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciBhIGNhbGwgaW50byBUY2wgaXMgbWFkZQotICAgdGhhdCBjb3VsZCBjYWxsIGFuIGV2ZW50IGhhbmRsZXIsIG9yIG90aGVyd2lzZSBhZmZlY3QgdGhlIHN0YXRlIG9mIGEgVGNsCi0gICBpbnRlcnByZXRlci4gIFRoZXNlIGFzc3VtZSB0aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGhhcyB0aGUgUHl0aG9uCi0gICBpbnRlcnByZXRlciBsb2NrOyBpbnNpZGUgdGhlIGJyYWNrZXRzLCB0aGUgUHl0aG9uIGludGVycHJldGVyIGxvY2sgaGFzIGJlZW4KLSAgIHJlbGVhc2VkIGFuZCB0aGUgbG9jayBmb3IgVGNsIGhhcyBiZWVuIGFjcXVpcmVkLgorICAgVG8gc29sdmUgdGhpcyBwcm9ibGVtLCBhIHNlcGFyYXRlIGxvY2sgZm9yIFRjbCBpcyBpbnRyb2R1Y2VkLgorICAgSG9sZGluZyBpdCBpcyBpbmNvbXBhdGlibGUgd2l0aCBob2xkaW5nIFB5dGhvbidzIGludGVycHJldGVyIGxvY2suCisgICBUaGUgZm9sbG93aW5nIGZvdXIgbWFjcm9zIG1hbmlwdWxhdGUgYm90aCBsb2NrcyB0b2dldGhlci4KIAotICAgU29tZXRpbWVzLCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBib3RoIHRoZSBQeXRob24gbG9jayBhbmQgdGhlIFRjbCBsb2NrLgotICAgKEZvciBleGFtcGxlLCB3aGVuIHRyYW5zZmVycmluZyBkYXRhIGZyb20gdGhlIFRjbCBpbnRlcnByZXRlciByZXN1bHQgdG8gYQotICAgUHl0aG9uIHN0cmluZyBvYmplY3QuKSAgVGhpcyBjYW4gYmUgZG9uZSBieSB1c2luZyBkaWZmZXJlbnQgbWFjcm9zIHRvIGNsb3NlCi0gICB0aGUgRU5URVJfVENMIGJsb2NrOiBFTlRFUl9PVkVSTEFQIHJlYWNxdWlyZXMgdGhlIFB5dGhvbiBsb2NrIChhbmQgcmVzdG9yZXMKLSAgIHRoZSB0aHJlYWQgc3RhdGUpIGJ1dCBkb2Vzbid0IHJlbGVhc2UgdGhlIFRjbCBsb2NrOyBMRUFWRV9PVkVSTEFQX1RDTAotICAgcmVsZWFzZXMgdGhlIFRjbCBsb2NrLgorICAgRU5URVJfVENMIGFuZCBMRUFWRV9UQ0wgYXJlIGJyYWNrZXRzLCBqdXN0IGxpa2UKKyAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMgYW5kIFB5X0VORF9BTExPV19USFJFQURTLiAgVGhleSBzaG91bGQgYmUKKyAgIHVzZWQgd2hlbmV2ZXIgYSBjYWxsIGludG8gVGNsIGlzIG1hZGUgdGhhdCBjb3VsZCBjYWxsIGFuIGV2ZW50CisgICBoYW5kbGVyLCBvciBvdGhlcndpc2UgYWZmZWN0IHRoZSBzdGF0ZSBvZiBhIFRjbCBpbnRlcnByZXRlci4gIFRoZXNlCisgICBhc3N1bWUgdGhhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBoYXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrOworICAgaW5zaWRlIHRoZSBicmFja2V0cywgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIGhhcyBiZWVuIHJlbGVhc2VkCisgICBhbmQgdGhlIGxvY2sgZm9yIFRjbCBoYXMgYmVlbiBhY3F1aXJlZC4KKworICAgU29tZXRpbWVzLCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBib3RoIHRoZSBQeXRob24gbG9jayBhbmQgdGhlIFRjbAorICAgbG9jay4gIChGb3IgZXhhbXBsZSwgd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSBmcm9tIHRoZSBUY2wKKyAgIGludGVycHJldGVyIHJlc3VsdCB0byBhIFB5dGhvbiBzdHJpbmcgb2JqZWN0LikgIFRoaXMgY2FuIGJlIGRvbmUgYnkKKyAgIHVzaW5nIGRpZmZlcmVudCBtYWNyb3MgdG8gY2xvc2UgdGhlIEVOVEVSX1RDTCBibG9jazogRU5URVJfT1ZFUkxBUAorICAgcmVhY3F1aXJlcyB0aGUgUHl0aG9uIGxvY2sgKGFuZCByZXN0b3JlcyB0aGUgdGhyZWFkIHN0YXRlKSBidXQKKyAgIGRvZXNuJ3QgcmVsZWFzZSB0aGUgVGNsIGxvY2s7IExFQVZFX09WRVJMQVBfVENMIHJlbGVhc2VzIHRoZSBUY2wKKyAgIGxvY2suCiAKICAgIEJ5IGNvbnRyYXN0LCBFTlRFUl9QWVRIT04gYW5kIExFQVZFX1BZVEhPTiBhcmUgdXNlZCBpbiBUY2wgZXZlbnQKLSAgIGhhbmRsZXJzIHdoZW4gdGhlIGhhbmRsZXIgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIFN1Y2ggZXZlbnQgaGFuZGxlcnMgYXJlCi0gICBlbnRlcmVkIHdoaWxlIHRoZSBsb2NrIGZvciBUY2wgaXMgaGVsZDsgdGhlIGV2ZW50IGhhbmRsZXIgcHJlc3VtYWJseSBuZWVkcwotICAgdG8gdXNlIFB5dGhvbi4gIEVOVEVSX1BZVEhPTiByZWxlYXNlcyB0aGUgbG9jayBmb3IgVGNsIGFuZCBhY3F1aXJlcwotICAgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrLCByZXN0b3JpbmcgdGhlIGFwcHJvcHJpYXRlIHRocmVhZCBzdGF0ZSwgYW5kCi0gICBMRUFWRV9QWVRIT04gcmVsZWFzZXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIGFuZCByZS1hY3F1aXJlcyB0aGUgbG9jawotICAgZm9yIFRjbC4gIEl0IGlzIG9rYXkgZm9yIEVOVEVSX1RDTC9MRUFWRV9UQ0wgcGFpcnMgdG8gYmUgY29udGFpbmVkIGluc2lkZQotICAgdGhlIGNvZGUgYmV0d2VlbiBFTlRFUl9QWVRIT04gYW5kIExFQVZFX1BZVEhPTi4KKyAgIGhhbmRsZXJzIHdoZW4gdGhlIGhhbmRsZXIgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIFN1Y2ggZXZlbnQgaGFuZGxlcnMKKyAgIGFyZSBlbnRlcmVkIHdoaWxlIHRoZSBsb2NrIGZvciBUY2wgaXMgaGVsZDsgdGhlIGV2ZW50IGhhbmRsZXIKKyAgIHByZXN1bWFibHkgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIEVOVEVSX1BZVEhPTiByZWxlYXNlcyB0aGUgbG9jayBmb3IKKyAgIFRjbCBhbmQgYWNxdWlyZXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrLCByZXN0b3JpbmcgdGhlCisgICBhcHByb3ByaWF0ZSB0aHJlYWQgc3RhdGUsIGFuZCBMRUFWRV9QWVRIT04gcmVsZWFzZXMgdGhlIFB5dGhvbgorICAgaW50ZXJwcmV0ZXIgbG9jayBhbmQgcmUtYWNxdWlyZXMgdGhlIGxvY2sgZm9yIFRjbC4gIEl0IGlzIG9rYXkgZm9yCisgICBFTlRFUl9UQ0wvTEVBVkVfVENMIHBhaXJzIHRvIGJlIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGNvZGUgYmV0d2VlbgorICAgRU5URVJfUFlUSE9OIGFuZCBMRUFWRV9QWVRIT04uCiAKLSAgIFRoZXNlIGxvY2tzIGV4cGFuZCB0byBzZXZlcmFsIHN0YXRlbWVudHMgYW5kIGJyYWNrZXRzOyB0aGV5IHNob3VsZCBub3QgYmUKLSAgIHVzZWQgaW4gYnJhbmNoZXMgb2YgaWYgc3RhdGVtZW50cyBhbmQgdGhlIGxpa2UuCisgICBUaGVzZSBsb2NrcyBleHBhbmQgdG8gc2V2ZXJhbCBzdGF0ZW1lbnRzIGFuZCBicmFja2V0czsgdGhleSBzaG91bGQKKyAgIG5vdCBiZSB1c2VkIGluIGJyYW5jaGVzIG9mIGlmIHN0YXRlbWVudHMgYW5kIHRoZSBsaWtlLgogCi0gICBJZiBUY2wgaXMgdGhyZWFkZWQsIHRoaXMgYXBwcm9hY2ggd29uJ3Qgd29yayBhbnltb3JlLiBUaGUgVGNsIGludGVycHJldGVyIGlzCi0gICBvbmx5IHZhbGlkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIGl0LCBhbmQgYWxsIFRrIGFjdGl2aXR5IG11c3QgaGFwcGVuIGluIHRoaXMKLSAgIHRocmVhZCwgYWxzby4gVGhhdCBtZWFucyB0aGF0IHRoZSBtYWlubG9vcCBtdXN0IGJlIGludm9rZWQgaW4gdGhlIHRocmVhZCB0aGF0Ci0gICBjcmVhdGVkIHRoZSBpbnRlcnByZXRlci4gSW52b2tpbmcgY29tbWFuZHMgZnJvbSBvdGhlciB0aHJlYWRzIGlzIHBvc3NpYmxlOwotICAgX3RraW50ZXIgd2lsbCBxdWV1ZSBhbiBldmVudCBmb3IgdGhlIGludGVycHJldGVyIHRocmVhZCwgd2hpY2ggd2lsbCB0aGVuCi0gICBleGVjdXRlIHRoZSBjb21tYW5kIGFuZCBwYXNzIGJhY2sgdGhlIHJlc3VsdC4gSWYgdGhlIG1haW4gdGhyZWFkIGlzIG5vdCBpbiB0aGUKLSAgIG1haW5sb29wLCBhbmQgaW52b2tpbmcgY29tbWFuZHMgY2F1c2VzIGFuIGV4Y2VwdGlvbjsgaWYgdGhlIG1haW4gbG9vcCBpcyBydW5uaW5nCi0gICBidXQgbm90IHByb2Nlc3NpbmcgZXZlbnRzLCB0aGUgY29tbWFuZCBpbnZvY2F0aW9uIHdpbGwgYmxvY2suCisgICBJZiBUY2wgaXMgdGhyZWFkZWQsIHRoaXMgYXBwcm9hY2ggd29uJ3Qgd29yayBhbnltb3JlLiBUaGUgVGNsCisgICBpbnRlcnByZXRlciBpcyBvbmx5IHZhbGlkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIGl0LCBhbmQgYWxsIFRrCisgICBhY3Rpdml0eSBtdXN0IGhhcHBlbiBpbiB0aGlzIHRocmVhZCwgYWxzby4gVGhhdCBtZWFucyB0aGF0IHRoZQorICAgbWFpbmxvb3AgbXVzdCBiZSBpbnZva2VkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZQorICAgaW50ZXJwcmV0ZXIuIEludm9raW5nIGNvbW1hbmRzIGZyb20gb3RoZXIgdGhyZWFkcyBpcyBwb3NzaWJsZTsKKyAgIF90a2ludGVyIHdpbGwgcXVldWUgYW4gZXZlbnQgZm9yIHRoZSBpbnRlcnByZXRlciB0aHJlYWQsIHdoaWNoIHdpbGwKKyAgIHRoZW4gZXhlY3V0ZSB0aGUgY29tbWFuZCBhbmQgcGFzcyBiYWNrIHRoZSByZXN1bHQuIElmIHRoZSBtYWluCisgICB0aHJlYWQgaXMgbm90IGluIHRoZSBtYWlubG9vcCwgYW5kIGludm9raW5nIGNvbW1hbmRzIGNhdXNlcyBhbgorICAgZXhjZXB0aW9uOyBpZiB0aGUgbWFpbiBsb29wIGlzIHJ1bm5pbmcgYnV0IG5vdCBwcm9jZXNzaW5nIGV2ZW50cywKKyAgIHRoZSBjb21tYW5kIGludm9jYXRpb24gd2lsbCBibG9jay4KIAotICAgSW4gYWRkaXRpb24sIGZvciBhIHRocmVhZGVkIFRjbCwgYSBzaW5nbGUgZ2xvYmFsIHRjbF90c3RhdGUgd29uJ3QgYmUgc3VmZmljaWVudAotICAgYW55bW9yZSwgc2luY2UgbXVsdGlwbGUgVGNsIGludGVycHJldGVycyBtYXkgc2ltdWx0YW5lb3VzbHkgZGlzcGF0Y2ggaW4gZGlmZmVyZW50Ci0gICB0aHJlYWRzLiBTbyB3ZSB1c2UgdGhlIFRjbCBUTFMgQVBJLgorICAgSW4gYWRkaXRpb24sIGZvciBhIHRocmVhZGVkIFRjbCwgYSBzaW5nbGUgZ2xvYmFsIHRjbF90c3RhdGUgd29uJ3QKKyAgIGJlIHN1ZmZpY2llbnQgYW55bW9yZSwgc2luY2UgbXVsdGlwbGUgVGNsIGludGVycHJldGVycyBtYXkKKyAgIHNpbXVsdGFuZW91c2x5IGRpc3BhdGNoIGluIGRpZmZlcmVudCB0aHJlYWRzLiBTbyB3ZSB1c2UgdGhlIFRjbCBUTFMKKyAgIEFQSS4KIAogKi8KIApAQCAtMTY4LDcgKzE3Niw4IEBACiAjaWZkZWYgVENMX1RIUkVBRFMKIHN0YXRpYyBUY2xfVGhyZWFkRGF0YUtleSBzdGF0ZV9rZXk7CiB0eXBlZGVmIFB5VGhyZWFkU3RhdGUgKlRocmVhZFNwZWNpZmljRGF0YTsKLSNkZWZpbmUgdGNsX3RzdGF0ZSAoKihQeVRocmVhZFN0YXRlKiopVGNsX0dldFRocmVhZERhdGEoJnN0YXRlX2tleSwgc2l6ZW9mKFB5VGhyZWFkU3RhdGUqKSkpCisjZGVmaW5lIHRjbF90c3RhdGUgXAorICAgICgqKFB5VGhyZWFkU3RhdGUqKilUY2xfR2V0VGhyZWFkRGF0YSgmc3RhdGVfa2V5LCBzaXplb2YoUHlUaHJlYWRTdGF0ZSopKSkKICNlbHNlCiBzdGF0aWMgUHlUaHJlYWRTdGF0ZSAqdGNsX3RzdGF0ZSA9IE5VTEw7CiAjZW5kaWYKQEAgLTE3OCw3ICsxODcsOCBAQAogICAgICAgICBpZih0Y2xfbG9jaylQeVRocmVhZF9hY3F1aXJlX2xvY2sodGNsX2xvY2ssIDEpOyB0Y2xfdHN0YXRlID0gdHN0YXRlOwogCiAjZGVmaW5lIExFQVZFX1RDTCBcCi0gICAgdGNsX3RzdGF0ZSA9IE5VTEw7IGlmKHRjbF9sb2NrKVB5VGhyZWFkX3JlbGVhc2VfbG9jayh0Y2xfbG9jayk7IFB5X0VORF9BTExPV19USFJFQURTfQorICAgIHRjbF90c3RhdGUgPSBOVUxMOyBcCisgICAgaWYodGNsX2xvY2spUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRjbF9sb2NrKTsgUHlfRU5EX0FMTE9XX1RIUkVBRFN9CiAKICNkZWZpbmUgRU5URVJfT1ZFUkxBUCBcCiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTE4OCw3ICsxOTgsOCBAQAogCiAjZGVmaW5lIEVOVEVSX1BZVEhPTiBcCiAgICAgeyBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSB0Y2xfdHN0YXRlOyB0Y2xfdHN0YXRlID0gTlVMTDsgXAotICAgICAgICBpZih0Y2xfbG9jaylQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeUV2YWxfUmVzdG9yZVRocmVhZCgodHN0YXRlKSk7IH0KKyAgICAgICAgaWYodGNsX2xvY2spIFwKKyAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeUV2YWxfUmVzdG9yZVRocmVhZCgodHN0YXRlKSk7IH0KIAogI2RlZmluZSBMRUFWRV9QWVRIT04gXAogICAgIHsgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsgXApAQCAtMTk3LDcgKzIwOCw4IEBACiAjZGVmaW5lIENIRUNLX1RDTF9BUFBBUlRNRU5UIFwKICAgICBpZiAoKChUa2FwcE9iamVjdCAqKXNlbGYpLT50aHJlYWRlZCAmJiBcCiAgICAgICAgICgoVGthcHBPYmplY3QgKilzZWxmKS0+dGhyZWFkX2lkICE9IFRjbF9HZXRDdXJyZW50VGhyZWFkKCkpIHsgXAotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiQ2FsbGluZyBUY2wgZnJvbSBkaWZmZXJlbnQgYXBwYXJ0bWVudCIpOyBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYWxsaW5nIFRjbCBmcm9tIGRpZmZlcmVudCBhcHBhcnRtZW50Iik7IFwKICAgICAgICAgcmV0dXJuIDA7IFwKICAgICB9CiAKQEAgLTIxOSw3ICsyMzEsNyBAQAogCiAvKioqKiBUa2FwcCBPYmplY3QgRGVjbGFyYXRpb24gKioqKi8KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa2FwcF9UeXBlOworc3RhdGljIFB5T2JqZWN0ICpUa2FwcF9UeXBlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMjM5LDcgKzI1MSw2IEBACiAgICAgVGNsX09ialR5cGUgKlN0cmluZ1R5cGU7CiB9IFRrYXBwT2JqZWN0OwogCi0jZGVmaW5lIFRrYXBwX0NoZWNrKHYpIChQeV9UWVBFKHYpID09ICZUa2FwcF9UeXBlKQogI2RlZmluZSBUa2FwcF9JbnRlcnAodikgKCgoVGthcHBPYmplY3QgKikgKHYpKS0+aW50ZXJwKQogI2RlZmluZSBUa2FwcF9SZXN1bHQodikgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAodikpCiAKQEAgLTMxMiwxMTAgKzMyMyw5IEBACiAjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KIAogCi1zdGF0aWMgY2hhciAqCi1Bc1N0cmluZyhQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0bXApCi17Ci0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodmFsdWUpKQotICAgICAgICByZXR1cm4gUHlCeXRlc19Bc1N0cmluZyh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Bc1VURjgodmFsdWUpOwotICAgIGVsc2UgewotICAgICAgICBQeU9iamVjdCAqdiA9IFB5T2JqZWN0X1N0cih2YWx1ZSk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQodG1wLCB2KSAhPSAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfQXNVVEY4KHYpOwotICAgIH0KLX0KLQotCiAKICNkZWZpbmUgQVJHU1ogNjQKIAotc3RhdGljIGNoYXIgKgotTWVyZ2UoUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnRtcCA9IE5VTEw7Ci0gICAgY2hhciAqYXJndlN0b3JlW0FSR1NaXTsKLSAgICBjaGFyICoqYXJndiA9IE5VTEw7Ci0gICAgaW50IGZ2U3RvcmVbQVJHU1pdOwotICAgIGludCAqZnYgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgYXJnYyA9IDAsIGZ2YyA9IDAsIGk7Ci0gICAgY2hhciAqcmVzID0gTlVMTDsKLQotICAgIGlmICghKHRtcCA9IFB5TGlzdF9OZXcoMCkpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGFyZ3YgPSBhcmd2U3RvcmU7Ci0gICAgZnYgPSBmdlN0b3JlOwotCi0gICAgaWYgKGFyZ3MgPT0gTlVMTCkKLSAgICAgICAgYXJnYyA9IDA7Ci0KLSAgICBlbHNlIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgewotICAgICAgICBhcmdjID0gMTsKLSAgICAgICAgZnZbMF0gPSAwOwotICAgICAgICBpZiAoIShhcmd2WzBdID0gQXNTdHJpbmcoYXJncywgdG1wKSkpCi0gICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBhcmdjID0gUHlUdXBsZV9TaXplKGFyZ3MpOwotCi0gICAgICAgIGlmIChhcmdjID4gQVJHU1opIHsKLSAgICAgICAgICAgIGlmICghQ0hFQ0tfU0laRShhcmdjLCBzaXplb2YoY2hhciAqKSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInR1cGxlIGlzIHRvbyBsb25nIik7Ci0gICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJndiA9IChjaGFyICoqKWNrYWxsb2MoKHNpemVfdClhcmdjICogc2l6ZW9mKGNoYXIgKikpOwotICAgICAgICAgICAgZnYgPSAoaW50ICopY2thbGxvYygoc2l6ZV90KWFyZ2MgKiBzaXplb2YoaW50KSk7Ci0gICAgICAgICAgICBpZiAoYXJndiA9PSBOVUxMIHx8IGZ2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIGkpOwotICAgICAgICAgICAgaWYgKFB5VHVwbGVfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICBmdltpXSA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKCEoYXJndltpXSA9IE1lcmdlKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgICAgIGZ2YysrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodiA9PSBQeV9Ob25lKSB7Ci0gICAgICAgICAgICAgICAgYXJnYyA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmdltpXSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCEoYXJndltpXSA9IEFzU3RyaW5nKHYsIHRtcCkpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgICAgICAgICAgICAgZnZjKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmVzID0gVGNsX01lcmdlKGFyZ2MsIGFyZ3YpOwotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsICJtZXJnZSBmYWlsZWQiKTsKLQotICBmaW5hbGx5OgotICAgIGZvciAoaSA9IDA7IGkgPCBmdmM7IGkrKykKLSAgICAgICAgaWYgKGZ2W2ldKSB7Ci0gICAgICAgICAgICBja2ZyZWUoYXJndltpXSk7Ci0gICAgICAgIH0KLSAgICBpZiAoYXJndiAhPSBhcmd2U3RvcmUpCi0gICAgICAgIGNrZnJlZShGUkVFQ0FTVCBhcmd2KTsKLSAgICBpZiAoZnYgIT0gZnZTdG9yZSkKLSAgICAgICAgY2tmcmVlKEZSRUVDQVNUIGZ2KTsKLQotICAgIFB5X0RFQ1JFRih0bXApOwotICAgIHJldHVybiByZXM7Ci19Ci0KIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNDcxLDggKzM4MSw3IEBACiAgICAgUHlPYmplY3QgKnY7CiAKICAgICBpZiAobGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KIAogICAgIGlmIChUY2xfU3BsaXRMaXN0KChUY2xfSW50ZXJwICopTlVMTCwgbGlzdCwgJmFyZ2MsICZhcmd2KSAhPSBUQ0xfT0spIHsKQEAgLTUwNCw5ICs0MTMsOSBAQAogICAgIHJldHVybiB2OwogfQogCi0vKiBJbiBzb21lIGNhc2VzLCBUY2wgd2lsbCBzdGlsbCByZXR1cm4gc3RyaW5ncyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZQotICAgbGlzdHMuIFNwbGl0T2JqIHdhbGtzIHRocm91Z2ggYSBuZXN0ZWQgdHVwbGUsIGZpbmRpbmcgc3RyaW5nIG9iamVjdHMgdGhhdAotICAgbmVlZCB0byBiZSBzcGxpdC4gKi8KKy8qIEluIHNvbWUgY2FzZXMsIFRjbCB3aWxsIHN0aWxsIHJldHVybiBzdHJpbmdzIHRoYXQgYXJlIHN1cHBvc2VkIHRvCisgICBiZSBsaXN0cy4gU3BsaXRPYmogd2Fsa3MgdGhyb3VnaCBhIG5lc3RlZCB0dXBsZSwgZmluZGluZyBzdHJpbmcKKyAgIG9iamVjdHMgdGhhdCBuZWVkIHRvIGJlIHNwbGl0LiAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgogU3BsaXRPYmooUHlPYmplY3QgKmFyZykKQEAgLTYzOCw5ICs1NDcsMTAgQEAKICAgICBUa2FwcE9iamVjdCAqdjsKICAgICBjaGFyICphcmd2MDsKIAotICAgIHYgPSBQeU9iamVjdF9OZXcoVGthcHBPYmplY3QsICZUa2FwcF9UeXBlKTsKKyAgICB2ID0gUHlPYmplY3RfTmV3KFRrYXBwT2JqZWN0LCAoUHlUeXBlT2JqZWN0ICopIFRrYXBwX1R5cGUpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihUa2FwcF9UeXBlKTsKIAogICAgIHYtPmludGVycCA9IFRjbF9DcmVhdGVJbnRlcnAoKTsKICAgICB2LT53YW50b2JqZWN0cyA9IHdhbnRvYmplY3RzOwpAQCAtNjUxLDcgKzU2MSw4IEBACiAKICNpZm5kZWYgVENMX1RIUkVBRFMKICAgICBpZiAodi0+dGhyZWFkZWQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIlRjbCBpcyB0aHJlYWRlZCBidXQgX3RraW50ZXIgaXMgbm90Iik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiVGNsIGlzIHRocmVhZGVkIGJ1dCBfdGtpbnRlciBpcyBub3QiKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC03ODgsMTYgKzY5OSwxNyBAQAogICAgIFB5T2JqZWN0ICpzdHJpbmc7IC8qIFRoaXMgY2Fubm90IGNhdXNlIGN5Y2xlcy4gKi8KIH0gUHlUY2xPYmplY3Q7CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgUHlUY2xPYmplY3RfVHlwZTsKLSNkZWZpbmUgUHlUY2xPYmplY3RfQ2hlY2sodikgICAgKCh2KS0+b2JfdHlwZSA9PSAmUHlUY2xPYmplY3RfVHlwZSkKK3N0YXRpYyBQeU9iamVjdCAqUHlUY2xPYmplY3RfVHlwZTsKKyNkZWZpbmUgUHlUY2xPYmplY3RfQ2hlY2sodikgKCh2KS0+b2JfdHlwZSA9PSAoUHlUeXBlT2JqZWN0ICopIFB5VGNsT2JqZWN0X1R5cGUpCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBuZXdQeVRjbE9iamVjdChUY2xfT2JqICphcmcpCiB7CiAgICAgUHlUY2xPYmplY3QgKnNlbGY7Ci0gICAgc2VsZiA9IFB5T2JqZWN0X05ldyhQeVRjbE9iamVjdCwgJlB5VGNsT2JqZWN0X1R5cGUpOworICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoUHlUY2xPYmplY3QsIChQeVR5cGVPYmplY3QgKikgUHlUY2xPYmplY3RfVHlwZSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKFB5VGNsT2JqZWN0X1R5cGUpOwogICAgIFRjbF9JbmNyUmVmQ291bnQoYXJnKTsKICAgICBzZWxmLT52YWx1ZSA9IGFyZzsKICAgICBzZWxmLT5zdHJpbmcgPSBOVUxMOwpAQCAtODA3LDkgKzcxOSwxMSBAQAogc3RhdGljIHZvaWQKIFB5VGNsT2JqZWN0X2RlYWxsb2MoUHlUY2xPYmplY3QgKnNlbGYpCiB7CisgICAgUHlPYmplY3QgKnRwID0gKFB5T2JqZWN0ICopIFB5X1RZUEUoc2VsZik7CiAgICAgVGNsX0RlY3JSZWZDb3VudChzZWxmLT52YWx1ZSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5zdHJpbmcpOwogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICBQeV9ERUNSRUYodHApOwogfQogCiBzdGF0aWMgY2hhcioKQEAgLTg0OCw4ICs3NjIsMTMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVRjbE9iamVjdF9yZXByKFB5VGNsT2JqZWN0ICpzZWxmKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG9iamVjdCBhdCAlcD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT52YWx1ZS0+dHlwZVB0ci0+bmFtZSwgc2VsZi0+dmFsdWUpOworICAgIFB5T2JqZWN0ICpyZXByLCAqc3RyID0gUHlUY2xPYmplY3Rfc3RyKHNlbGYsIE5VTEwpOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8JXMgb2JqZWN0OiAlUj4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT52YWx1ZS0+dHlwZVB0ci0+bmFtZSwgc3RyKTsKKyAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICByZXR1cm4gcmVwcjsKIH0KIAogI2RlZmluZSBURVNUX0NPTkQoY29uZCkgKChjb25kKSA/IFB5X1RydWUgOiBQeV9GYWxzZSkKQEAgLTkyMyw1MCArODQyLDI1IEBACiAgICAgezB9LAogfTsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBQeVRjbE9iamVjdF9UeXBlID0gewotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJfdGtpbnRlci5UY2xfT2JqIiwgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSovCi0gICAgc2l6ZW9mKFB5VGNsT2JqZWN0KSwgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLwotICAgIC8qIG1ldGhvZHMgKi8KLSAgICAoZGVzdHJ1Y3RvcilQeVRjbE9iamVjdF9kZWFsbG9jLC8qdHBfZGVhbGxvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLwotICAgIChyZXByZnVuYylQeVRjbE9iamVjdF9yZXByLCAgICAgICAgIC8qdHBfcmVwciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIChyZXByZnVuYylQeVRjbE9iamVjdF9zdHIsICAgICAgICAgIC8qdHBfc3RyKi8KLSAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyp0cF9mbGFncyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwotICAgIFB5VGNsT2JqZWN0X3JpY2hjb21wYXJlLCAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMqLwotICAgIFB5VGNsT2JqZWN0X2dldHNldGxpc3QsICAgICAgICAgICAgIC8qdHBfZ2V0c2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9nZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaW5pdCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZnJlZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pc19nYyovCitzdGF0aWMgUHlUeXBlX1Nsb3QgUHlUY2xPYmplY3RfVHlwZV9zbG90c1tdID0geworICAgIHtQeV90cF9kZWFsbG9jLCAoZGVzdHJ1Y3RvcilQeVRjbE9iamVjdF9kZWFsbG9jfSwKKyAgICB7UHlfdHBfcmVwciwgKHJlcHJmdW5jKVB5VGNsT2JqZWN0X3JlcHJ9LAorICAgIHtQeV90cF9zdHIsIChyZXByZnVuYylQeVRjbE9iamVjdF9zdHJ9LAorICAgIHtQeV90cF9nZXRhdHRybywgUHlPYmplY3RfR2VuZXJpY0dldEF0dHJ9LAorICAgIHtQeV90cF9yaWNoY29tcGFyZSwgUHlUY2xPYmplY3RfcmljaGNvbXBhcmV9LAorICAgIHtQeV90cF9nZXRzZXQsIFB5VGNsT2JqZWN0X2dldHNldGxpc3R9LAorICAgIHswLCAwfQogfTsKIAorc3RhdGljIFB5VHlwZV9TcGVjIFB5VGNsT2JqZWN0X1R5cGVfc3BlYyA9IHsKKyAgICAiX3RraW50ZXIuVGNsX09iaiIsCisgICAgc2l6ZW9mKFB5VGNsT2JqZWN0KSwKKyAgICAwLAorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBQeVRjbE9iamVjdF9UeXBlX3Nsb3RzLAorfTsKKworCiBzdGF0aWMgVGNsX09iaioKIEFzT2JqKFB5T2JqZWN0ICp2YWx1ZSkKIHsKQEAgLTEzNzYsNDIgKzEyNzAsNiBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9HbG9iYWxDYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICAvKiBDb3VsZCBkbyB0aGUgc2FtZSBoZXJlIGFzIGZvciBUa2FwcF9DYWxsKCksIGJ1dCB0aGlzIGlzIG5vdCB1c2VkCi0gICAgICAgbXVjaCwgc28gSSBjYW4ndCBiZSBib3RoZXJlZC4gIFVuZm9ydHVuYXRlbHkgVGNsIGRvZXNuJ3QgZXhwb3J0IGEKLSAgICAgICB3YXkgZm9yIHRoZSB1c2VyIHRvIGRvIHdoYXQgYWxsIGl0cyBHbG9iYWwqIHZhcmlhbnRzIGRvIChzYXZlIGFuZAotICAgICAgIHJlc2V0IHRoZSBzY29wZSBwb2ludGVyLCBjYWxsIHRoZSBsb2NhbCB2ZXJzaW9uLCByZXN0b3JlIHRoZSBzYXZlZAotICAgICAgIHNjb3BlIHBvaW50ZXIpLiAqLwotCi0gICAgY2hhciAqY21kOwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotCi0gICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAiZ2xvYmFsY2FsbCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgICAgIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKLQotICAgIGNtZCAgPSBNZXJnZShhcmdzKTsKLSAgICBpZiAoY21kKSB7Ci0gICAgICAgIGludCBlcnI7Ci0gICAgICAgIEVOVEVSX1RDTAotICAgICAgICBlcnIgPSBUY2xfR2xvYmFsRXZhbChUa2FwcF9JbnRlcnAoc2VsZiksIGNtZCk7Ci0gICAgICAgIEVOVEVSX09WRVJMQVAKLSAgICAgICAgaWYgKGVyciA9PSBUQ0xfRVJST1IpCi0gICAgICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhUa2FwcF9SZXN1bHQoc2VsZikpOwotICAgICAgICBMRUFWRV9PVkVSTEFQX1RDTAotICAgICAgICBja2ZyZWUoY21kKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogVGthcHBfRXZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY2hhciAqc2NyaXB0OwpAQCAtMTQzNSwzNCArMTI5Myw2IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9HbG9iYWxFdmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjaGFyICpzY3JpcHQ7Ci0gICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0gICAgaW50IGVycjsKLQotICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgImdsb2JhbGV2YWwgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICAgICAxKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmdsb2JhbGV2YWwiLCAmc2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKLQotICAgIEVOVEVSX1RDTAotICAgIGVyciA9IFRjbF9HbG9iYWxFdmFsKFRrYXBwX0ludGVycChzZWxmKSwgc2NyaXB0KTsKLSAgICBFTlRFUl9PVkVSTEFQCi0gICAgaWYgKGVyciA9PSBUQ0xfRVJST1IpCi0gICAgICAgIHJlcyA9IFRraW50ZXJfRXJyb3Ioc2VsZik7Ci0gICAgZWxzZQotICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhUa2FwcF9SZXN1bHQoc2VsZikpOwotICAgIExFQVZFX09WRVJMQVBfVENMCi0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIFRrYXBwX0V2YWxGaWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpmaWxlTmFtZTsKQEAgLTE1MjEsOCArMTM1MSw3IEBACiAgICAgVGNsX0FkZEVycm9ySW5mbyhUa2FwcF9JbnRlcnAoc2VsZiksIG1zZyk7CiAgICAgTEVBVkVfVENMCiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMTc0OCw3ICsxNTc3LDggQEAKICAgICB0cmVzID0gVGNsX0dldFZhcjJFeChUa2FwcF9JbnRlcnAoc2VsZiksIG5hbWUxLCBuYW1lMiwgZmxhZ3MpOwogICAgIEVOVEVSX09WRVJMQVAKICAgICBpZiAodHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHNlbGYpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCgoVGthcHBPYmplY3QqKXNlbGYpLT53YW50b2JqZWN0cykgewogICAgICAgICAgICAgcmVzID0gRnJvbU9iaihzZWxmLCB0cmVzKTsKQEAgLTE4MDcsNyArMTYzNyw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogVGthcHBfR2xvYmFsVW5zZXRWYXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiB2YXJfaW52b2tlKFVuc2V0VmFyLCBzZWxmLCBhcmdzLCBUQ0xfTEVBVkVfRVJSX01TRyB8IFRDTF9HTE9CQUxfT05MWSk7CisgICAgcmV0dXJuIHZhcl9pbnZva2UoVW5zZXRWYXIsIHNlbGYsIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgVENMX0xFQVZFX0VSUl9NU0cgfCBUQ0xfR0xPQkFMX09OTFkpOwogfQogCiAKQEAgLTIwNzMsMjcgKzE5MDQsNiBAQAogICAgIHJldHVybiB2OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotVGthcHBfTWVyZ2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNoYXIgKnM7Ci0gICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0KLSAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICJtZXJnZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgICAgIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzID0gTWVyZ2UoYXJncyk7Ci0KLSAgICBpZiAocykgewotICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhzKTsKLSAgICAgICAgY2tmcmVlKHMpOwotICAgIH0KLQotICAgIHJldHVybiByZXM7Ci19Ci0KIAogCiAvKiogVGNsIENvbW1hbmQgKiovCkBAIC0yMjY3LDggKzIwNzcsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMjMwOSw4ICsyMTE4LDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsICJjYW4ndCBkZWxldGUgVGNsIGNvbW1hbmQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCkBAIC0yNDE0LDggKzIyMjIsNyBAQAogICAgIEVOVEVSX1RDTAogICAgIFRjbF9DcmVhdGVGaWxlSGFuZGxlcih0ZmlsZSwgbWFzaywgRmlsZUhhbmRsZXIsIChDbGllbnREYXRhKSBkYXRhKTsKICAgICBMRUFWRV9UQ0wKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDM5LDE1ICsyMjQ2LDE0IEBACiAgICAgRU5URVJfVENMCiAgICAgVGNsX0RlbGV0ZUZpbGVIYW5kbGVyKHRmaWxlKTsKICAgICBMRUFWRV9UQ0wKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9DUkVBVEVGSUxFSEFORExFUiAqLwogCiAKIC8qKioqIFRrdHQgT2JqZWN0ICh0aW1lciB0b2tlbikgKioqKi8KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa3R0X1R5cGU7CitzdGF0aWMgUHlPYmplY3QgKlRrdHRfVHlwZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTI0NzIsOCArMjI3OCw3IEBACiAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKICAgICAgICAgUHlfREVDUkVGKHYpOyAvKiBTZWUgVGt0dF9OZXcoKSAqLwogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBUa3R0X21ldGhvZHNbXSA9CkBAIC0yNDg3LDkgKzIyOTIsMTAgQEAKIHsKICAgICBUa3R0T2JqZWN0ICp2OwogCi0gICAgdiA9IFB5T2JqZWN0X05ldyhUa3R0T2JqZWN0LCAmVGt0dF9UeXBlKTsKKyAgICB2ID0gUHlPYmplY3RfTmV3KFRrdHRPYmplY3QsIChQeVR5cGVPYmplY3QgKikgVGt0dF9UeXBlKTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoVGt0dF9UeXBlKTsKIAogICAgIFB5X0lOQ1JFRihmdW5jKTsKICAgICB2LT50b2tlbiA9IE5VTEw7CkBAIC0yNTA1LDEwICsyMzExLDEyIEBACiB7CiAgICAgVGt0dE9iamVjdCAqdiA9IChUa3R0T2JqZWN0ICopc2VsZjsKICAgICBQeU9iamVjdCAqZnVuYyA9IHYtPmZ1bmM7CisgICAgUHlPYmplY3QgKnRwID0gKFB5T2JqZWN0ICopIFB5X1RZUEUoc2VsZik7CiAKICAgICBQeV9YREVDUkVGKGZ1bmMpOwogCiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOworICAgIFB5X0RFQ1JFRih0cCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNTIwLDM4ICsyMzI4LDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtPmZ1bmMgPT0gTlVMTCA/ICIsIGhhbmRsZXIgZGVsZXRlZCIgOiAiIik7CiB9CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGt0dF9UeXBlID0KLXsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAidGt0aW1lcnRva2VuIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSAqLwotICAgIHNpemVvZihUa3R0T2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUgKi8KLSAgICBUa3R0X0RlYWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQgKi8KLSAgICBUa3R0X1JlcHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgVGt0dF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworc3RhdGljIFB5VHlwZV9TbG90IFRrdHRfVHlwZV9zbG90c1tdID0geworICAgIHtQeV90cF9kZWFsbG9jLCBUa3R0X0RlYWxsb2N9LAorICAgIHtQeV90cF9yZXByLCBUa3R0X1JlcHJ9LAorICAgIHtQeV90cF9tZXRob2RzLCBUa3R0X21ldGhvZHN9LAorICAgIHswLCAwfQogfTsKIAorc3RhdGljIFB5VHlwZV9TcGVjIFRrdHRfVHlwZV9zcGVjID0geworICAgICJ0a3RpbWVydG9rZW4iLAorICAgIHNpemVvZihUa3R0T2JqZWN0KSwKKyAgICAwLAorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBUa3R0X1R5cGVfc2xvdHMsCit9OwogCiAKIC8qKiBUaW1lciBIYW5kbGVyICoqLwpAQCAtMjY3Myw4ICsyNDYzLDcgQEAKICAgICAgICAgZXhjSW5DbWQgPSB2YWxJbkNtZCA9IHRyYkluQ21kID0gTlVMTDsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3MDAsOCArMjQ4OSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcXVpdE1haW5Mb29wID0gMTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNzUxLDE1ICsyNTM5LDE1IEBACiAgICAgfQogICAgIGlmIChfdGtfZXhpc3RzID09IE5VTEwgfHwgc3RyY21wKF90a19leGlzdHMsICIxIikgIT0gMCkgICAgIHsKICAgICAgICAgaWYgKFRrX0luaXQoaW50ZXJwKSAgICAgICAgICAgICA9PSBUQ0xfRVJST1IpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKICNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCiAgICAgICAgICAgICB0a19sb2FkX2ZhaWxlZCA9IDE7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3NzMsOCArMjU2MSw3IEBACiAgICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKChUa2FwcE9iamVjdCopc2VsZiktPndhbnRvYmplY3RzKTsKICAgICAoKFRrYXBwT2JqZWN0KilzZWxmKS0+d2FudG9iamVjdHMgPSB3YW50b2JqZWN0czsKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3ODMsOCArMjU3MCw3IEBACiAKICAgICAoKFRrYXBwT2JqZWN0KilzZWxmKS0+ZGlzcGF0Y2hpbmcgPSAxOwogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTI3OTUsOSArMjU4MSw3IEBACiAgICAgeyJ3aWxsZGlzcGF0Y2giLCAgICAgICBUa2FwcF9XaWxsRGlzcGF0Y2gsIE1FVEhfTk9BUkdTfSwKICAgICB7IndhbnRvYmplY3RzIiwgICAgICAgICAgICBUa2FwcF9XYW50T2JqZWN0cywgTUVUSF9WQVJBUkdTfSwKICAgICB7ImNhbGwiLCAgICAgICAgICAgICAgICAgICBUa2FwcF9DYWxsLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZ2xvYmFsY2FsbCIsICAgICAgICAgICAgIFRrYXBwX0dsb2JhbENhbGwsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJldmFsIiwgICAgICAgICAgICAgICAgICAgVGthcHBfRXZhbCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Imdsb2JhbGV2YWwiLCAgICAgICAgICAgICBUa2FwcF9HbG9iYWxFdmFsLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZXZhbGZpbGUiLCAgICAgICAgICAgICAgIFRrYXBwX0V2YWxGaWxlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsicmVjb3JkIiwgICAgICAgICAgICAgICAgIFRrYXBwX1JlY29yZCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImFkZGVycm9yaW5mbyIsICAgICAgIFRrYXBwX0FkZEVycm9ySW5mbywgTUVUSF9WQVJBUkdTfSwKQEAgLTI4MTYsNyArMjYwMCw2IEBACiAgICAgeyJleHByYm9vbGVhbiIsICAgICAgICBUa2FwcF9FeHByQm9vbGVhbiwgTUVUSF9WQVJBUkdTfSwKICAgICB7InNwbGl0bGlzdCIsICAgICAgICAgICAgICBUa2FwcF9TcGxpdExpc3QsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJzcGxpdCIsICAgICAgICAgICAgICAgICAgVGthcHBfU3BsaXQsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJtZXJnZSIsICAgICAgICAgICAgICAgICAgVGthcHBfTWVyZ2UsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJjcmVhdGVjb21tYW5kIiwgICAgICBUa2FwcF9DcmVhdGVDb21tYW5kLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZGVsZXRlY29tbWFuZCIsICAgICAgVGthcHBfRGVsZXRlQ29tbWFuZCwgTUVUSF9WQVJBUkdTfSwKICNpZmRlZiBIQVZFX0NSRUFURUZJTEVIQU5ETEVSCkBAIC0yODM5LDQ0ICsyNjIyLDI5IEBACiBzdGF0aWMgdm9pZAogVGthcHBfRGVhbGxvYyhQeU9iamVjdCAqc2VsZikKIHsKKyAgICBQeU9iamVjdCAqdHAgPSAoUHlPYmplY3QgKikgUHlfVFlQRShzZWxmKTsKICAgICAvKkNIRUNLX1RDTF9BUFBBUlRNRU5UOyovCiAgICAgRU5URVJfVENMCiAgICAgVGNsX0RlbGV0ZUludGVycChUa2FwcF9JbnRlcnAoc2VsZikpOwogICAgIExFQVZFX1RDTAogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICBQeV9ERUNSRUYodHApOwogICAgIERpc2FibGVFdmVudEhvb2soKTsKIH0KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa2FwcF9UeXBlID0KLXsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAidGthcHAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSAqLwotICAgIHNpemVvZihUa2FwcE9iamVjdCksICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUgKi8KLSAgICBUa2FwcF9EZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgVGthcHBfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworc3RhdGljIFB5VHlwZV9TbG90IFRrYXBwX1R5cGVfc2xvdHNbXSA9IHsKKyAgICB7UHlfdHBfZGVhbGxvYywgVGthcHBfRGVhbGxvY30sCisgICAge1B5X3RwX21ldGhvZHMsIFRrYXBwX21ldGhvZHN9LAorICAgIHswLCAwfQorfTsKKworCitzdGF0aWMgUHlUeXBlX1NwZWMgVGthcHBfVHlwZV9zcGVjID0geworICAgICJ0a2FwcCIsCisgICAgc2l6ZW9mKFRrYXBwT2JqZWN0KSwKKyAgICAwLAorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBUa2FwcF9UeXBlX3Nsb3RzLAogfTsKIAogCkBAIC0zMDE2LDcgKzI3ODQsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKikgVGthcHBfTmV3KHNjcmVlbk5hbWUsIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSwgd2FudG9iamVjdHMsICAgICB3YW50VGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUsIHdhbnRvYmplY3RzLCB3YW50VGssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luYywgdXNlKTsKIH0KIApAQCAtMzAzMiw4ICsyODAwLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFRraW50ZXJfYnVzeXdhaXRpbnRlcnZhbCA9IG5ld192YWw7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgY2hhciBzZXRidXN5d2FpdGludGVydmFsX2RvY1tdID0KQEAgLTMxNjYsMjcgKzI5MzMsNiBAQAogfQogCiAKLS8qIGFsbCBlcnJvcnMgd2lsbCBiZSBjaGVja2VkIGluIG9uZSBmZWxsIHN3b29wIGluIGluaXRfdGtpbnRlcigpICovCi1zdGF0aWMgdm9pZAotaW5zX2xvbmcoUHlPYmplY3QgKmQsIGNoYXIgKm5hbWUsIGxvbmcgdmFsKQotewotICAgIFB5T2JqZWN0ICp2ID0gUHlMb25nX0Zyb21Mb25nKHZhbCk7Ci0gICAgaWYgKHYpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgbmFtZSwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci19Ci1zdGF0aWMgdm9pZAotaW5zX3N0cmluZyhQeU9iamVjdCAqZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsKQotewotICAgIFB5T2JqZWN0ICp2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodmFsKTsKLSAgICBpZiAodikgewotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCBuYW1lLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLX0KLQotCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF90a2ludGVybW9kdWxlID0gewogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKICAgICAiX3RraW50ZXIiLApAQCAtMzIwMiw0NSArMjk0OCwxMTEgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3RraW50ZXIodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQsICp1ZXhlLCAqY2V4ZTsKLQotICAgIGlmIChQeVR5cGVfUmVhZHkoJlRrYXBwX1R5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgIFB5T2JqZWN0ICptLCAqdWV4ZSwgKmNleGUsICpvOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICB0Y2xfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICBpZiAodGNsX2xvY2sgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYKIAogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl90a2ludGVybW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgIFRraW50ZXJfVGNsRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl90a2ludGVyLlRjbEVycm9yIiwgTlVMTCwgTlVMTCk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRjbEVycm9yIiwgVGtpbnRlcl9UY2xFcnJvcik7Ci0KLSAgICBpbnNfbG9uZyhkLCAiUkVBREFCTEUiLCBUQ0xfUkVBREFCTEUpOwotICAgIGluc19sb25nKGQsICJXUklUQUJMRSIsIFRDTF9XUklUQUJMRSk7Ci0gICAgaW5zX2xvbmcoZCwgIkVYQ0VQVElPTiIsIFRDTF9FWENFUFRJT04pOwotICAgIGluc19sb25nKGQsICJXSU5ET1dfRVZFTlRTIiwgVENMX1dJTkRPV19FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJGSUxFX0VWRU5UUyIsIFRDTF9GSUxFX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIlRJTUVSX0VWRU5UUyIsIFRDTF9USU1FUl9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJJRExFX0VWRU5UUyIsIFRDTF9JRExFX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIkFMTF9FVkVOVFMiLCBUQ0xfQUxMX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIkRPTlRfV0FJVCIsIFRDTF9ET05UX1dBSVQpOwotICAgIGluc19zdHJpbmcoZCwgIlRLX1ZFUlNJT04iLCBUS19WRVJTSU9OKTsKLSAgICBpbnNfc3RyaW5nKGQsICJUQ0xfVkVSU0lPTiIsIFRDTF9WRVJTSU9OKTsKLQotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUa2FwcFR5cGUiLCAoUHlPYmplY3QgKikmVGthcHBfVHlwZSk7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZUa3R0X1R5cGUpIDwgMCkgeworICAgIG8gPSBQeUVycl9OZXdFeGNlcHRpb24oIl90a2ludGVyLlRjbEVycm9yIiwgTlVMTCwgTlVMTCk7CisgICAgaWYgKG8gPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYobSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiVGt0dFR5cGUiLCAoUHlPYmplY3QgKikmVGt0dF9UeXBlKTsKKyAgICBQeV9JTkNSRUYobyk7CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGNsRXJyb3IiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRraW50ZXJfVGNsRXJyb3IgPSBvOwogCi0gICAgUHlfVFlQRSgmUHlUY2xPYmplY3RfVHlwZSkgPSAmUHlUeXBlX1R5cGU7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRjbF9PYmoiLCAoUHlPYmplY3QgKikmUHlUY2xPYmplY3RfVHlwZSk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRUFEQUJMRSIsIFRDTF9SRUFEQUJMRSkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJXUklUQUJMRSIsIFRDTF9XUklUQUJMRSkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFWENFUFRJT04iLCBUQ0xfRVhDRVBUSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIldJTkRPV19FVkVOVFMiLCBUQ0xfV0lORE9XX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJGSUxFX0VWRU5UUyIsIFRDTF9GSUxFX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSU1FUl9FVkVOVFMiLCBUQ0xfVElNRVJfRVZFTlRTKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklETEVfRVZFTlRTIiwgVENMX0lETEVfRVZFTlRTKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFMTF9FVkVOVFMiLCBUQ0xfQUxMX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJET05UX1dBSVQiLCBUQ0xfRE9OVF9XQUlUKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIlRLX1ZFUlNJT04iLCBUS19WRVJTSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIlRDTF9WRVJTSU9OIiwgVENMX1ZFUlNJT04pKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbyA9IFB5VHlwZV9Gcm9tU3BlYygmVGthcHBfVHlwZV9zcGVjKTsKKyAgICBpZiAobyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRrYXBwVHlwZSIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgVGthcHBfVHlwZSA9IG87CisKKyAgICBvID0gUHlUeXBlX0Zyb21TcGVjKCZUa3R0X1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUa3R0VHlwZSIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgVGt0dF9UeXBlID0gbzsKKworICAgIG8gPSBQeVR5cGVfRnJvbVNwZWMoJlB5VGNsT2JqZWN0X1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUY2xfT2JqIiwgbykpIHsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVRjbE9iamVjdF9UeXBlID0gbzsKIAogI2lmZGVmIFRLX0FRVUEKICAgICAvKiBUa19NYWNPU1hTZXR1cFRrTm90aWZpZXIgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIFRjbCdzIHN1YnN5c3RlbXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3RyYWNlbWFsbG9jLmMgYi9Nb2R1bGVzL190cmFjZW1hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZGJlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL190cmFjZW1hbGxvYy5jCkBAIC0wLDAgKzEsMTQyOSBAQAorI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgImhhc2h0YWJsZS5oIgorI2luY2x1ZGUgImZyYW1lb2JqZWN0LmgiCisjaW5jbHVkZSAicHl0aHJlYWQuaCIKKyNpbmNsdWRlICJvc2RlZnMuaCIKKworLyogVHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyNkZWZpbmUgVFJBQ0VfUkFXX01BTExPQworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCB0cmFjZW1hbGxvY19zdG9wKHZvaWQpOworc3RhdGljIHZvaWQqIHJhd19tYWxsb2Moc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgcmF3X2ZyZWUodm9pZCAqcHRyKTsKKworI2lmZGVmIFB5X0RFQlVHCisjICBkZWZpbmUgVFJBQ0VfREVCVUcKKyNlbmRpZgorCisjZGVmaW5lIF9TVFIoVkFMKSAjVkFMCisjZGVmaW5lIFNUUihWQUwpIF9TVFIoVkFMKQorCisvKiBQcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworc3RhdGljIHN0cnVjdCB7CisgICAgUHlNZW1BbGxvY2F0b3IgbWVtOworICAgIFB5TWVtQWxsb2NhdG9yIHJhdzsKKyAgICBQeU1lbUFsbG9jYXRvciBvYmo7Cit9IGFsbG9jYXRvcnM7CisKK3N0YXRpYyBzdHJ1Y3QgeworICAgIC8qIE1vZHVsZSBpbml0aWFsaXplZD8KKyAgICAgICBWYXJpYWJsZSBwcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworICAgIGVudW0geworICAgICAgICBUUkFDRU1BTExPQ19OT1RfSU5JVElBTElaRUQsCisgICAgICAgIFRSQUNFTUFMTE9DX0lOSVRJQUxJWkVELAorICAgICAgICBUUkFDRU1BTExPQ19GSU5BTElaRUQKKyAgICB9IGluaXRpYWxpemVkOworCisgICAgLyogSXMgdHJhY2VtYWxsb2MgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnM/CisgICAgICAgVmFyaWFibGUgcHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KKyAgICBpbnQgdHJhY2luZzsKKworICAgIC8qIGxpbWl0IG9mIHRoZSBudW1iZXIgb2YgZnJhbWVzIGluIGEgdHJhY2ViYWNrLCAxIGJ5IGRlZmF1bHQuCisgICAgICAgVmFyaWFibGUgcHJvdGVjdGVkIGJ5IHRoZSBHSUwuICovCisgICAgaW50IG1heF9uZnJhbWU7Cit9IHRyYWNlbWFsbG9jX2NvbmZpZyA9IHtUUkFDRU1BTExPQ19OT1RfSU5JVElBTElaRUQsIDAsIDF9OworCisjaWYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKSAmJiBkZWZpbmVkKFdJVEhfVEhSRUFEKQorLyogVGhpcyBsb2NrIGlzIG5lZWRlZCBiZWNhdXNlIHRyYWNlbWFsbG9jX2ZyZWUoKSBpcyBjYWxsZWQgd2l0aG91dAorICAgdGhlIEdJTCBoZWxkIGZyb20gUHlNZW1fUmF3RnJlZSgpLiBJdCBjYW5ub3QgYWNxdWlyZSB0aGUgbG9jayBiZWNhdXNlIGl0CisgICB3b3VsZCBpbnRyb2R1Y2UgYSBkZWFkbG9jayBpbiBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQoKS4gKi8KK3N0YXRpYyBQeVRocmVhZF90eXBlX2xvY2sgdGFibGVzX2xvY2s7CisjICBkZWZpbmUgVEFCTEVTX0xPQ0soKSBQeVRocmVhZF9hY3F1aXJlX2xvY2sodGFibGVzX2xvY2ssIDEpCisjICBkZWZpbmUgVEFCTEVTX1VOTE9DSygpIFB5VGhyZWFkX3JlbGVhc2VfbG9jayh0YWJsZXNfbG9jaykKKyNlbHNlCisgICAvKiB2YXJpYWJsZXMgYXJlIHByb3RlY3RlZCBieSB0aGUgR0lMICovCisjICBkZWZpbmUgVEFCTEVTX0xPQ0soKQorIyAgZGVmaW5lIFRBQkxFU19VTkxPQ0soKQorI2VuZGlmCisKKy8qIFBhY2sgdGhlIGZyYW1lX3Qgc3RydWN0dXJlIHRvIHJlZHVjZSB0aGUgbWVtb3J5IGZvb3RwcmludCBvbiA2NC1iaXQKKyAgIGFyY2hpdGVjdHVyZXM6IDEyIGJ5dGVzIGluc3RlYWQgb2YgMTYuIFRoaXMgb3B0aW1pemF0aW9uIG1pZ2h0IHByb2R1Y2UKKyAgIFNJR0JVUyBvbiBhcmNoaXRlY3R1cmVzIG5vdCBzdXBwb3J0aW5nIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMgKDY0LWJpdAorICAgSVBTIENQVT8pOiBvbiBzdWNoIGFyY2hpdGVjdHVyZSwgdGhlIHN0cnVjdHVyZSBtdXN0IG5vdCBiZSBwYWNrZWQuICovCit0eXBlZGVmIHN0cnVjdAorI2lmZGVmIF9fR05VQ19fCitfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKK19kZWNsc3BlYyhhbGlnbig0KSkKKyNlbmRpZgoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBpbnQgbGluZW5vOworfSBmcmFtZV90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlfdWhhc2hfdCBoYXNoOworICAgIGludCBuZnJhbWU7CisgICAgZnJhbWVfdCBmcmFtZXNbMV07Cit9IHRyYWNlYmFja190OworCisjZGVmaW5lIFRSQUNFQkFDS19TSVpFKE5GUkFNRSkgXAorICAgICAgICAoc2l6ZW9mKHRyYWNlYmFja190KSArIHNpemVvZihmcmFtZV90KSAqIChORlJBTUUgLSAxKSkKKworI2RlZmluZSBNQVhfTkZSQU1FIFwKKyAgICAgICAgKChJTlRfTUFYIC0gc2l6ZW9mKHRyYWNlYmFja190KSkgLyBzaXplb2YoZnJhbWVfdCkgKyAxKQorCitzdGF0aWMgUHlPYmplY3QgKnVua25vd25fZmlsZW5hbWUgPSBOVUxMOworc3RhdGljIHRyYWNlYmFja190IHRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjazsKKworLyogVHJhY2Ugb2YgYSBtZW1vcnkgYmxvY2sgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiBTaXplIG9mIHRoZSBtZW1vcnkgYmxvY2sgaW4gYnl0ZXMgKi8KKyAgICBzaXplX3Qgc2l6ZTsKKworICAgIC8qIFRyYWNlYmFjayB3aGVyZSB0aGUgbWVtb3J5IGJsb2NrIHdhcyBhbGxvY2F0ZWQgKi8KKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrOworfSB0cmFjZV90OworCisvKiBTaXplIGluIGJ5dGVzIG9mIGN1cnJlbnRseSB0cmFjZWQgbWVtb3J5LgorICAgUHJvdGVjdGVkIGJ5IFRBQkxFU19MT0NLKCkuICovCitzdGF0aWMgc2l6ZV90IHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPSAwOworCisvKiBQZWFrIHNpemUgaW4gYnl0ZXMgb2YgdHJhY2VkIG1lbW9yeS4KKyAgIFByb3RlY3RlZCBieSBUQUJMRVNfTE9DSygpLiAqLworc3RhdGljIHNpemVfdCB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkgPSAwOworCisvKiBIYXNoIHRhYmxlIHVzZWQgYXMgYSBzZXQgdG8gdG8gaW50ZXJuIGZpbGVuYW1lczoKKyAgIFB5T2JqZWN0KiA9PiBQeU9iamVjdCouCisgICBQcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworc3RhdGljIF9QeV9oYXNodGFibGVfdCAqdHJhY2VtYWxsb2NfZmlsZW5hbWVzID0gTlVMTDsKKworLyogQnVmZmVyIHRvIHN0b3JlIGEgbmV3IHRyYWNlYmFjayBpbiB0cmFjZWJhY2tfbmV3KCkuCisgICBQcm90ZWN0ZWQgYnkgdGhlIEdJTC4gKi8KK3N0YXRpYyB0cmFjZWJhY2tfdCAqdHJhY2VtYWxsb2NfdHJhY2ViYWNrID0gTlVMTDsKKworLyogSGFzaCB0YWJsZSB1c2VkIGFzIGEgc2V0IHRvIGludGVybiB0cmFjZWJhY2tzOgorICAgdHJhY2ViYWNrX3QqID0+IHRyYWNlYmFja190KgorICAgUHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KK3N0YXRpYyBfUHlfaGFzaHRhYmxlX3QgKnRyYWNlbWFsbG9jX3RyYWNlYmFja3MgPSBOVUxMOworCisvKiBwb2ludGVyICh2b2lkKikgPT4gdHJhY2UgKHRyYWNlX3QpLgorICAgUHJvdGVjdGVkIGJ5IFRBQkxFU19MT0NLKCkuICovCitzdGF0aWMgX1B5X2hhc2h0YWJsZV90ICp0cmFjZW1hbGxvY190cmFjZXMgPSBOVUxMOworCisjaWZkZWYgVFJBQ0VfREVCVUcKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19lcnJvcihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworICAgIGZwcmludGYoc3RkZXJyLCAidHJhY2VtYWxsb2M6ICIpOworICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworICAgIHZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgZmZsdXNoKHN0ZGVycik7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoV0lUSF9USFJFQUQpICYmIGRlZmluZWQoVFJBQ0VfUkFXX01BTExPQykKKyNkZWZpbmUgUkVFTlRSQU5UX1RIUkVBRExPQ0FMCisKKy8qIElmIHlvdXIgT1MgZG9lcyBub3QgcHJvdmlkZSBuYXRpdmUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UsIHlvdSBjYW4gaW1wbGVtZW50CisgICBpdCBtYW51YWxseSB1c2luZyBhIGxvY2suIEZ1bmN0aW9ucyBvZiB0aHJlYWQuYyBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlCisgICB0aGV5IHVzZSBQeU1lbV9SYXdNYWxsb2MoKSB3aGljaCBsZWFkcyB0byBhIHJlZW50cmFudCBjYWxsLiAqLworI2lmICEoZGVmaW5lZChfUE9TSVhfVEhSRUFEUykgfHwgZGVmaW5lZChOVF9USFJFQURTKSkKKyMgIGVycm9yICJuZWVkIG5hdGl2ZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSAoVExTKSIKKyNlbmRpZgorCitzdGF0aWMgaW50IHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXk7CisKKy8qIEFueSBub24tTlVMTCBwb2ludGVyIGNhbiBiZSB1c2VkICovCisjZGVmaW5lIFJFRU5UUkFOVCBQeV9UcnVlCisKK3N0YXRpYyBpbnQKK2dldF9yZWVudHJhbnQodm9pZCkKK3sKKyAgICB2b2lkICpwdHIgPSBQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXkpOworICAgIGlmIChwdHIgIT0gTlVMTCkgeworICAgICAgICBhc3NlcnQocHRyID09IFJFRU5UUkFOVCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2V0X3JlZW50cmFudChpbnQgcmVlbnRyYW50KQoreworICAgIGFzc2VydChyZWVudHJhbnQgPT0gMCB8fCByZWVudHJhbnQgPT0gMSk7CisgICAgaWYgKHJlZW50cmFudCkgeworICAgICAgICBhc3NlcnQoUHlUaHJlYWRfZ2V0X2tleV92YWx1ZSh0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5KSA9PSBOVUxMKTsKKyAgICAgICAgUHlUaHJlYWRfc2V0X2tleV92YWx1ZSh0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5LCBSRUVOVFJBTlQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYXNzZXJ0KFB5VGhyZWFkX2dldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSkgPT0gUkVFTlRSQU5UKTsKKyAgICAgICAgUHlUaHJlYWRfc2V0X2tleV92YWx1ZSh0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5LCBOVUxMKTsKKyAgICB9Cit9CisKKyNlbHNlCisKKy8qIFdJVEhfVEhSRUFEIG5vdCBkZWZpbmVkOiBQeXRob24gY29tcGlsZWQgd2l0aG91dCB0aHJlYWRzLAorICAgb3IgVFJBQ0VfUkFXX01BTExPQyBub3QgZGVmaW5lZDogdmFyaWFibGUgcHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KK3N0YXRpYyBpbnQgdHJhY2VtYWxsb2NfcmVlbnRyYW50ID0gMDsKKworc3RhdGljIGludAorZ2V0X3JlZW50cmFudCh2b2lkKQoreworICAgIHJldHVybiB0cmFjZW1hbGxvY19yZWVudHJhbnQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfcmVlbnRyYW50KGludCByZWVudHJhbnQpCit7CisgICAgYXNzZXJ0KCFyZWVudHJhbnQgfHwgIWdldF9yZWVudHJhbnQoKSk7CisgICAgdHJhY2VtYWxsb2NfcmVlbnRyYW50ID0gcmVlbnRyYW50OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2hhc2h0YWJsZV9jb21wYXJlX3VuaWNvZGUoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5KQoreworICAgIGlmIChrZXkgIT0gTlVMTCAmJiBlbnRyeS0+a2V5ICE9IE5VTEwpCisgICAgICAgIHJldHVybiAoUHlVbmljb2RlX0NvbXBhcmUoKFB5T2JqZWN0ICopa2V5LCAoUHlPYmplY3QgKillbnRyeS0+a2V5KSA9PSAwKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBrZXkgPT0gZW50cnktPmtleTsKK30KKworc3RhdGljIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgaGFzaHRhYmxlX2FsbG9jID0ge21hbGxvYywgZnJlZX07CisKK3N0YXRpYyBfUHlfaGFzaHRhYmxlX3QgKgoraGFzaHRhYmxlX25ldyhzaXplX3QgZGF0YV9zaXplLAorICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyBoYXNoX2Z1bmMsCisgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYykKK3sKKyAgICByZXR1cm4gX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChkYXRhX3NpemUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9mdW5jLCBjb21wYXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgJmhhc2h0YWJsZV9hbGxvYyk7Cit9CisKK3N0YXRpYyB2b2lkKgorcmF3X21hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWxsb2NhdG9ycy5yYXcubWFsbG9jKGFsbG9jYXRvcnMucmF3LmN0eCwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCityYXdfZnJlZSh2b2lkICpwdHIpCit7CisgICAgYWxsb2NhdG9ycy5yYXcuZnJlZShhbGxvY2F0b3JzLnJhdy5jdHgsIHB0cik7Cit9CisKK3N0YXRpYyBQeV91aGFzaF90CitoYXNodGFibGVfaGFzaF90cmFjZWJhY2soY29uc3Qgdm9pZCAqa2V5KQoreworICAgIGNvbnN0IHRyYWNlYmFja190ICp0cmFjZWJhY2sgPSBrZXk7CisgICAgcmV0dXJuIHRyYWNlYmFjay0+aGFzaDsKK30KKworc3RhdGljIGludAoraGFzaHRhYmxlX2NvbXBhcmVfdHJhY2ViYWNrKGNvbnN0IHRyYWNlYmFja190ICp0cmFjZWJhY2sxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqaGUpCit7CisgICAgY29uc3QgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazIgPSBoZS0+a2V5OworICAgIGNvbnN0IGZyYW1lX3QgKmZyYW1lMSwgKmZyYW1lMjsKKyAgICBpbnQgaTsKKworICAgIGlmICh0cmFjZWJhY2sxLT5uZnJhbWUgIT0gdHJhY2ViYWNrMi0+bmZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZvciAoaT0wOyBpIDwgdHJhY2ViYWNrMS0+bmZyYW1lOyBpKyspIHsKKyAgICAgICAgZnJhbWUxID0gJnRyYWNlYmFjazEtPmZyYW1lc1tpXTsKKyAgICAgICAgZnJhbWUyID0gJnRyYWNlYmFjazItPmZyYW1lc1tpXTsKKworICAgICAgICBpZiAoZnJhbWUxLT5saW5lbm8gIT0gZnJhbWUyLT5saW5lbm8pCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAoZnJhbWUxLT5maWxlbmFtZSAhPSBmcmFtZTItPmZpbGVuYW1lKSB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NvbXBhcmUoZnJhbWUxLT5maWxlbmFtZSwgZnJhbWUyLT5maWxlbmFtZSkgIT0gMCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2dldF9mcmFtZShQeUZyYW1lT2JqZWN0ICpweWZyYW1lLCBmcmFtZV90ICpmcmFtZSkKK3sKKyAgICBQeUNvZGVPYmplY3QgKmNvZGU7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyAgICBmcmFtZS0+ZmlsZW5hbWUgPSB1bmtub3duX2ZpbGVuYW1lOworICAgIGZyYW1lLT5saW5lbm8gPSBQeUZyYW1lX0dldExpbmVOdW1iZXIocHlmcmFtZSk7CisgICAgYXNzZXJ0KGZyYW1lLT5saW5lbm8gPj0gMCk7CisgICAgaWYgKGZyYW1lLT5saW5lbm8gPCAwKQorICAgICAgICBmcmFtZS0+bGluZW5vID0gMDsKKworICAgIGNvZGUgPSBweWZyYW1lLT5mX2NvZGU7CisgICAgaWYgKGNvZGUgPT0gTlVMTCkgeworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gZ2V0IHRoZSBjb2RlIG9iamVjdCBvZiB0aGUgZnJhbWUiKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvZGUtPmNvX2ZpbGVuYW1lID09IE5VTEwpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGdldCB0aGUgZmlsZW5hbWUgb2YgdGhlIGNvZGUgb2JqZWN0Iik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZpbGVuYW1lID0gY29kZS0+Y29fZmlsZW5hbWU7CisgICAgYXNzZXJ0KGZpbGVuYW1lICE9IE5VTEwpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhmaWxlbmFtZSkpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmlsZW5hbWUgaXMgbm90IGFuIHVuaWNvZGUgc3RyaW5nIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIVB5VW5pY29kZV9JU19SRUFEWShmaWxlbmFtZSkpIHsKKyAgICAgICAgLyogRG9uJ3QgbWFrZSBhIFVuaWNvZGUgc3RyaW5nIHJlYWR5IHRvIGF2b2lkIHJlZW50cmFudCBjYWxscworICAgICAgICAgICB0byB0cmFjZW1hbGxvY19tYWxsb2MoKSBvciB0cmFjZW1hbGxvY19yZWFsbG9jKCkgKi8KKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmlsZW5hbWUgaXMgbm90IGEgcmVhZHkgdW5pY29kZSBzdHJpbmciKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogaW50ZXJuIHRoZSBmaWxlbmFtZSAqLworICAgIGVudHJ5ID0gX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkodHJhY2VtYWxsb2NfZmlsZW5hbWVzLCBmaWxlbmFtZSk7CisgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW5hbWUgPSAoUHlPYmplY3QgKillbnRyeS0+a2V5OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogdHJhY2VtYWxsb2NfZmlsZW5hbWVzIGlzIHJlc3BvbnNpYmxlIHRvIGtlZXAgYSByZWZlcmVuY2UKKyAgICAgICAgICAgdG8gdGhlIGZpbGVuYW1lICovCisgICAgICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CisgICAgICAgIGlmIChfUHlfaGFzaHRhYmxlX3NldCh0cmFjZW1hbGxvY19maWxlbmFtZXMsIGZpbGVuYW1lLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gaW50ZXJuIHRoZSBmaWxlbmFtZSIpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiB0aGUgdHJhY2VtYWxsb2NfZmlsZW5hbWVzIHRhYmxlIGtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWxlbmFtZSAqLworICAgIGZyYW1lLT5maWxlbmFtZSA9IGZpbGVuYW1lOworfQorCitzdGF0aWMgUHlfdWhhc2hfdAordHJhY2ViYWNrX2hhc2godHJhY2ViYWNrX3QgKnRyYWNlYmFjaykKK3sKKyAgICAvKiBjb2RlIGJhc2VkIG9uIHR1cGxlaGFzaCgpIG9mIE9iamVjdHMvdHVwbGVvYmplY3QuYyAqLworICAgIFB5X3VoYXNoX3QgeCwgeTsgIC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLworICAgIGludCBsZW4gPSB0cmFjZWJhY2stPm5mcmFtZTsKKyAgICBQeV91aGFzaF90IG11bHQgPSBfUHlIQVNIX01VTFRJUExJRVI7CisgICAgZnJhbWVfdCAqZnJhbWU7CisKKyAgICB4ID0gMHgzNDU2NzhVTDsKKyAgICBmcmFtZSA9IHRyYWNlYmFjay0+ZnJhbWVzOworICAgIHdoaWxlICgtLWxlbiA+PSAwKSB7CisgICAgICAgIHkgPSAoUHlfdWhhc2hfdClQeU9iamVjdF9IYXNoKGZyYW1lLT5maWxlbmFtZSk7CisgICAgICAgIHkgXj0gKFB5X3VoYXNoX3QpZnJhbWUtPmxpbmVubzsKKyAgICAgICAgZnJhbWUrKzsKKworICAgICAgICB4ID0gKHggXiB5KSAqIG11bHQ7CisgICAgICAgIC8qIHRoZSBjYXN0IG1pZ2h0IHRydW5jYXRlIGxlbjsgdGhhdCBkb2Vzbid0IGNoYW5nZSBoYXNoIHN0YWJpbGl0eSAqLworICAgICAgICBtdWx0ICs9IChQeV91aGFzaF90KSg4MjUyMFVMICsgbGVuICsgbGVuKTsKKyAgICB9CisgICAgeCArPSA5NzUzMVVMOworICAgIHJldHVybiB4OworfQorCitzdGF0aWMgdm9pZAordHJhY2ViYWNrX2dldF9mcmFtZXModHJhY2ViYWNrX3QgKnRyYWNlYmFjaykKK3sKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGU7CisgICAgUHlGcmFtZU9iamVjdCAqcHlmcmFtZTsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgdHN0YXRlID0gUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUoKTsKKyNlbHNlCisgICAgdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKKyNlbmRpZgorICAgIGlmICh0c3RhdGUgPT0gTlVMTCkgeworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSIpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHB5ZnJhbWUgPSB0c3RhdGUtPmZyYW1lOyBweWZyYW1lICE9IE5VTEw7IHB5ZnJhbWUgPSBweWZyYW1lLT5mX2JhY2spIHsKKyAgICAgICAgdHJhY2VtYWxsb2NfZ2V0X2ZyYW1lKHB5ZnJhbWUsICZ0cmFjZWJhY2stPmZyYW1lc1t0cmFjZWJhY2stPm5mcmFtZV0pOworICAgICAgICBhc3NlcnQodHJhY2ViYWNrLT5mcmFtZXNbdHJhY2ViYWNrLT5uZnJhbWVdLmZpbGVuYW1lICE9IE5VTEwpOworICAgICAgICBhc3NlcnQodHJhY2ViYWNrLT5mcmFtZXNbdHJhY2ViYWNrLT5uZnJhbWVdLmxpbmVubyA+PSAwKTsKKyAgICAgICAgdHJhY2ViYWNrLT5uZnJhbWUrKzsKKyAgICAgICAgaWYgKHRyYWNlYmFjay0+bmZyYW1lID09IHRyYWNlbWFsbG9jX2NvbmZpZy5tYXhfbmZyYW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdHJhY2ViYWNrX3QgKgordHJhY2ViYWNrX25ldyh2b2lkKQoreworICAgIHRyYWNlYmFja190ICp0cmFjZWJhY2s7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKworICAgIC8qIGdldCBmcmFtZXMgKi8KKyAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvY190cmFjZWJhY2s7CisgICAgdHJhY2ViYWNrLT5uZnJhbWUgPSAwOworICAgIHRyYWNlYmFja19nZXRfZnJhbWVzKHRyYWNlYmFjayk7CisgICAgaWYgKHRyYWNlYmFjay0+bmZyYW1lID09IDApCisgICAgICAgIHJldHVybiAmdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrOworICAgIHRyYWNlYmFjay0+aGFzaCA9IHRyYWNlYmFja19oYXNoKHRyYWNlYmFjayk7CisKKyAgICAvKiBpbnRlcm4gdGhlIHRyYWNlYmFjayAqLworICAgIGVudHJ5ID0gX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkodHJhY2VtYWxsb2NfdHJhY2ViYWNrcywgdHJhY2ViYWNrKTsKKyAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICB0cmFjZWJhY2sgPSAodHJhY2ViYWNrX3QgKillbnRyeS0+a2V5OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgdHJhY2ViYWNrX3QgKmNvcHk7CisgICAgICAgIHNpemVfdCB0cmFjZWJhY2tfc2l6ZTsKKworICAgICAgICB0cmFjZWJhY2tfc2l6ZSA9IFRSQUNFQkFDS19TSVpFKHRyYWNlYmFjay0+bmZyYW1lKTsKKworICAgICAgICBjb3B5ID0gcmF3X21hbGxvYyh0cmFjZWJhY2tfc2l6ZSk7CisgICAgICAgIGlmIChjb3B5ID09IE5VTEwpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBpbnRlcm4gdGhlIHRyYWNlYmFjazogbWFsbG9jIGZhaWxlZCIpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoY29weSwgdHJhY2ViYWNrLCB0cmFjZWJhY2tfc2l6ZSk7CisKKyAgICAgICAgaWYgKF9QeV9oYXNodGFibGVfc2V0KHRyYWNlbWFsbG9jX3RyYWNlYmFja3MsIGNvcHksIE5VTEwsIDApIDwgMCkgeworICAgICAgICAgICAgcmF3X2ZyZWUoY29weSk7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gaW50ZXJuIHRoZSB0cmFjZWJhY2s6IHB1dGRhdGEgZmFpbGVkIik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHRyYWNlYmFjayA9IGNvcHk7CisgICAgfQorICAgIHJldHVybiB0cmFjZWJhY2s7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX2FkZF90cmFjZSh2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIHRyYWNlYmFja190ICp0cmFjZWJhY2s7CisgICAgdHJhY2VfdCB0cmFjZTsKKyAgICBpbnQgcmVzOworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorCisgICAgdHJhY2ViYWNrID0gdHJhY2ViYWNrX25ldygpOworICAgIGlmICh0cmFjZWJhY2sgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgdHJhY2Uuc2l6ZSA9IHNpemU7CisgICAgdHJhY2UudHJhY2ViYWNrID0gdHJhY2ViYWNrOworCisgICAgcmVzID0gX1B5X0hBU0hUQUJMRV9TRVQodHJhY2VtYWxsb2NfdHJhY2VzLCBwdHIsIHRyYWNlKTsKKyAgICBpZiAocmVzID09IDApIHsKKyAgICAgICAgYXNzZXJ0KHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPD0gUFlfU0laRV9NQVggLSBzaXplKTsKKyAgICAgICAgdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeSArPSBzaXplOworICAgICAgICBpZiAodHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeSA+IHRyYWNlbWFsbG9jX3BlYWtfdHJhY2VkX21lbW9yeSkKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX3BlYWtfdHJhY2VkX21lbW9yeSA9IHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnk7CisgICAgfQorCisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX3JlbW92ZV90cmFjZSh2b2lkICpwdHIpCit7CisgICAgdHJhY2VfdCB0cmFjZTsKKworICAgIGlmIChfUHlfaGFzaHRhYmxlX3BvcCh0cmFjZW1hbGxvY190cmFjZXMsIHB0ciwgJnRyYWNlLCBzaXplb2YodHJhY2UpKSkgeworICAgICAgICBhc3NlcnQodHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeSA+PSB0cmFjZS5zaXplKTsKKyAgICAgICAgdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeSAtPSB0cmFjZS5zaXplOworICAgIH0KK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19tYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisgICAgdm9pZCAqcHRyOworCisgICAgcHRyID0gYWxsb2MtPm1hbGxvYyhhbGxvYy0+Y3R4LCBzaXplKTsKKyAgICBpZiAocHRyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBpZiAodHJhY2VtYWxsb2NfYWRkX3RyYWNlKHB0ciwgc2l6ZSkgPCAwKSB7CisgICAgICAgIC8qIEZhaWxlZCB0byBhbGxvY2F0ZSBhIHRyYWNlIGZvciB0aGUgbmV3IG1lbW9yeSBibG9jayAqLworICAgICAgICBUQUJMRVNfVU5MT0NLKCk7CisgICAgICAgIGFsbG9jLT5mcmVlKGFsbG9jLT5jdHgsIHB0cik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBUQUJMRVNfVU5MT0NLKCk7CisgICAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworICAgIHZvaWQgKnB0cjI7CisKKyAgICBwdHIyID0gYWxsb2MtPnJlYWxsb2MoYWxsb2MtPmN0eCwgcHRyLCBuZXdfc2l6ZSk7CisgICAgaWYgKHB0cjIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAocHRyICE9IE5VTEwpIHsKKyAgICAgICAgLyogYW4gZXhpc3RpbmcgbWVtb3J5IGJsb2NrIGhhcyBiZWVuIHJlc2l6ZWQgKi8KKworICAgICAgICBUQUJMRVNfTE9DSygpOworICAgICAgICB0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2UocHRyKTsKKworICAgICAgICBpZiAodHJhY2VtYWxsb2NfYWRkX3RyYWNlKHB0cjIsIG5ld19zaXplKSA8IDApIHsKKyAgICAgICAgICAgIC8qIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gVGhlIGVycm9yIGNhbm5vdCBiZSByZXBvcnRlZCB0bworICAgICAgICAgICAgICAgdGhlIGNhbGxlciwgYmVjYXVzZSByZWFsbG9jKCkgbWF5IGFscmVhZHkgaGF2ZSBzaHJpbmtlZCB0aGUKKyAgICAgICAgICAgICAgIG1lbW9yeSBibG9jayBhbmQgc28gcmVtb3ZlZCBieXRlcy4KKworICAgICAgICAgICAgICAgVGhpcyBjYXNlIGlzIHZlcnkgdW5saWtlbHk6IGFuIGhhc2ggZW50cnkgaGFzIGp1c3QgYmVlbgorICAgICAgICAgICAgICAgcmVsZWFzZWQsIHNvIHRoZSBoYXNoIHRhYmxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IG9uZSBmcmVlIGVudHJ5LgorCisgICAgICAgICAgICAgICBUaGUgR0lMIGFuZCB0aGUgdGFibGUgbG9jayBlbnN1cmVzIHRoYXQgb25seSBvbmUgdGhyZWFkIGlzCisgICAgICAgICAgICAgICBhbGxvY2F0aW5nIG1lbW9yeS4gKi8KKyAgICAgICAgICAgIGFzc2VydCgwICYmICJzaG91bGQgbmV2ZXIgaGFwcGVuIik7CisgICAgICAgIH0KKyAgICAgICAgVEFCTEVTX1VOTE9DSygpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogbmV3IGFsbG9jYXRpb24gKi8KKworICAgICAgICBUQUJMRVNfTE9DSygpOworICAgICAgICBpZiAodHJhY2VtYWxsb2NfYWRkX3RyYWNlKHB0cjIsIG5ld19zaXplKSA8IDApIHsKKyAgICAgICAgICAgIC8qIEZhaWxlZCB0byBhbGxvY2F0ZSBhIHRyYWNlIGZvciB0aGUgbmV3IG1lbW9yeSBibG9jayAqLworICAgICAgICAgICAgVEFCTEVTX1VOTE9DSygpOworICAgICAgICAgICAgYWxsb2MtPmZyZWUoYWxsb2MtPmN0eCwgcHRyMik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBUQUJMRVNfVU5MT0NLKCk7CisgICAgfQorICAgIHJldHVybiBwdHIyOworfQorCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfZnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisKKyAgICBpZiAocHRyID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgICAvKiBHSUwgY2Fubm90IGJlIGxvY2tlZCBpbiBQeU1lbV9SYXdGcmVlKCkgYmVjYXVzZSBpdCB3b3VsZCBpbnRyb2R1Y2UKKyAgICAgICAgYSBkZWFkbG9jayBpbiBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQoKS4gKi8KKworICAgIGFsbG9jLT5mcmVlKGFsbG9jLT5jdHgsIHB0cik7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIHRyYWNlbWFsbG9jX3JlbW92ZV90cmFjZShwdHIpOworICAgIFRBQkxFU19VTkxPQ0soKTsKK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19tYWxsb2NfZ2lsKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgdm9pZCAqcHRyOworCisgICAgaWYgKGdldF9yZWVudHJhbnQoKSkgeworICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisgICAgICAgIHJldHVybiBhbGxvYy0+bWFsbG9jKGFsbG9jLT5jdHgsIHNpemUpOworICAgIH0KKworICAgIC8qIElnbm9yZSByZWVudHJhbnQgY2FsbC4gUHlPYmpldF9NYWxsb2MoKSBjYWxscyBQeU1lbV9NYWxsb2MoKSBmb3IKKyAgICAgICBhbGxvY2F0aW9ucyBsYXJnZXIgdGhhbiA1MTIgYnl0ZXMsIGRvbid0IHRyYWNlIHRoZSBzYW1lIG1lbW9yeQorICAgICAgIGFsbG9jYXRpb24gdHdpY2UuICovCisgICAgc2V0X3JlZW50cmFudCgxKTsKKworICAgIHB0ciA9IHRyYWNlbWFsbG9jX21hbGxvYyhjdHgsIHNpemUpOworCisgICAgc2V0X3JlZW50cmFudCgwKTsKKyAgICByZXR1cm4gcHRyOworfQorCitzdGF0aWMgdm9pZCoKK3RyYWNlbWFsbG9jX3JlYWxsb2NfZ2lsKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgdm9pZCAqcHRyMjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgLyogUmVlbnRyYW50IGNhbGwgdG8gUHlNZW1fUmVhbGxvYygpIGFuZCBQeU1lbV9SYXdSZWFsbG9jKCkuCisgICAgICAgICAgIEV4YW1wbGU6IFB5TWVtX1Jhd1JlYWxsb2MoKSBpcyBjYWxsZWQgaW50ZXJuYWxseSBieSBweW1hbGxvYworICAgICAgICAgICAoX1B5T2JqZWN0X01hbGxvYygpIGFuZCAgX1B5T2JqZWN0X1JlYWxsb2MoKSkgdG8gYWxsb2NhdGUgYSBuZXcKKyAgICAgICAgICAgYXJlbmEgKG5ld19hcmVuYSgpKS4gKi8KKyAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworCisgICAgICAgIHB0cjIgPSBhbGxvYy0+cmVhbGxvYyhhbGxvYy0+Y3R4LCBwdHIsIG5ld19zaXplKTsKKyAgICAgICAgaWYgKHB0cjIgIT0gTlVMTCAmJiBwdHIgIT0gTlVMTCkgeworICAgICAgICAgICAgVEFCTEVTX0xPQ0soKTsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX3JlbW92ZV90cmFjZShwdHIpOworICAgICAgICAgICAgVEFCTEVTX1VOTE9DSygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwdHIyOworICAgIH0KKworICAgIC8qIElnbm9yZSByZWVudHJhbnQgY2FsbC4gUHlPYmpldF9SZWFsbG9jKCkgY2FsbHMgUHlNZW1fUmVhbGxvYygpIGZvcgorICAgICAgIGFsbG9jYXRpb25zIGxhcmdlciB0aGFuIDUxMiBieXRlcy4gRG9uJ3QgdHJhY2UgdGhlIHNhbWUgbWVtb3J5CisgICAgICAgYWxsb2NhdGlvbiB0d2ljZS4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworCisgICAgcHRyMiA9IHRyYWNlbWFsbG9jX3JlYWxsb2MoY3R4LCBwdHIsIG5ld19zaXplKTsKKworICAgIHNldF9yZWVudHJhbnQoMCk7CisgICAgcmV0dXJuIHB0cjI7Cit9CisKKyNpZmRlZiBUUkFDRV9SQVdfTUFMTE9DCitzdGF0aWMgdm9pZCoKK3RyYWNlbWFsbG9jX3Jhd19tYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsX3N0YXRlOworI2VuZGlmCisgICAgdm9pZCAqcHRyOworCisgICAgaWYgKGdldF9yZWVudHJhbnQoKSkgeworICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisgICAgICAgIHJldHVybiBhbGxvYy0+bWFsbG9jKGFsbG9jLT5jdHgsIHNpemUpOworICAgIH0KKworICAgIC8qIElnbm9yZSByZWVudHJhbnQgY2FsbC4gUHlHSUxTdGF0ZV9FbnN1cmUoKSBtYXkgY2FsbCBQeU1lbV9SYXdNYWxsb2MoKQorICAgICAgIGluZGlyZWN0bHkgd2hpY2ggd291bGQgY2FsbCBQeUdJTFN0YXRlX0Vuc3VyZSgpIGlmIHJlZW50cmFudCBhcmUgbm90CisgICAgICAgZGlzYWJsZWQuICovCisgICAgc2V0X3JlZW50cmFudCgxKTsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgZ2lsX3N0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKyAgICBwdHIgPSB0cmFjZW1hbGxvY19tYWxsb2MoY3R4LCBzaXplKTsKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsX3N0YXRlKTsKKyNlbHNlCisgICAgcHRyID0gdHJhY2VtYWxsb2NfbWFsbG9jKGN0eCwgc2l6ZSk7CisjZW5kaWYKKworICAgIHNldF9yZWVudHJhbnQoMCk7CisgICAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yYXdfcmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxfc3RhdGU7CisjZW5kaWYKKyAgICB2b2lkICpwdHIyOworCisgICAgaWYgKGdldF9yZWVudHJhbnQoKSkgeworICAgICAgICAvKiBSZWVudHJhbnQgY2FsbCB0byBQeU1lbV9SYXdSZWFsbG9jKCkuICovCisgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKworICAgICAgICBwdHIyID0gYWxsb2MtPnJlYWxsb2MoYWxsb2MtPmN0eCwgcHRyLCBuZXdfc2l6ZSk7CisKKyAgICAgICAgaWYgKHB0cjIgIT0gTlVMTCAmJiBwdHIgIT0gTlVMTCkgeworICAgICAgICAgICAgVEFCTEVTX0xPQ0soKTsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX3JlbW92ZV90cmFjZShwdHIpOworICAgICAgICAgICAgVEFCTEVTX1VOTE9DSygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwdHIyOworICAgIH0KKworICAgIC8qIElnbm9yZSByZWVudHJhbnQgY2FsbC4gUHlHSUxTdGF0ZV9FbnN1cmUoKSBtYXkgY2FsbCBQeU1lbV9SYXdNYWxsb2MoKQorICAgICAgIGluZGlyZWN0bHkgd2hpY2ggd291bGQgY2FsbCBQeUdJTFN0YXRlX0Vuc3VyZSgpIGlmIHJlZW50cmFudCBjYWxscyBhcmUKKyAgICAgICBub3QgZGlzYWJsZWQuICovCisgICAgc2V0X3JlZW50cmFudCgxKTsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgZ2lsX3N0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKyAgICBwdHIyID0gdHJhY2VtYWxsb2NfcmVhbGxvYyhjdHgsIHB0ciwgbmV3X3NpemUpOworICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnaWxfc3RhdGUpOworI2Vsc2UKKyAgICBwdHIyID0gdHJhY2VtYWxsb2NfcmVhbGxvYyhjdHgsIHB0ciwgbmV3X3NpemUpOworI2VuZGlmCisKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIHJldHVybiBwdHIyOworfQorI2VuZGlmICAgLyogVFJBQ0VfUkFXX01BTExPQyAqLworCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19jbGVhcl9maWxlbmFtZShfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gKFB5T2JqZWN0ICopZW50cnktPmtleTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit0cmFjZWJhY2tfZnJlZV90cmFjZWJhY2soX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIHRyYWNlYmFja190ICp0cmFjZWJhY2sgPSAodHJhY2ViYWNrX3QgKillbnRyeS0+a2V5OworICAgIHJhd19mcmVlKHRyYWNlYmFjayk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHJlZW50cmFudCBmbGFnIG11c3QgYmUgc2V0IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhbmQgR0lMIG11c3QgYmUgaGVsZCAqLworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2NsZWFyX3RyYWNlcyh2b2lkKQoreworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgLyogVGhlIEdJTCBwcm90ZWN0cyB2YXJpYWJsZXMgYWdhaW50IGNvbmN1cnJlbnQgYWNjZXNzICovCisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKworICAgIC8qIERpc2FibGUgYWxzbyByZWVudHJhbnQgY2FsbHMgdG8gdHJhY2VtYWxsb2NfbWFsbG9jKCkgdG8gbm90IGFkZCBhIG5ldworICAgICAgIHRyYWNlIHdoaWxlIHdlIGFyZSBjbGVhcmluZyB0cmFjZXMgKi8KKyAgICBhc3NlcnQoZ2V0X3JlZW50cmFudCgpKTsKKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgX1B5X2hhc2h0YWJsZV9jbGVhcih0cmFjZW1hbGxvY190cmFjZXMpOworICAgIHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPSAwOworICAgIHRyYWNlbWFsbG9jX3BlYWtfdHJhY2VkX21lbW9yeSA9IDA7CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgX1B5X2hhc2h0YWJsZV9mb3JlYWNoKHRyYWNlbWFsbG9jX3RyYWNlYmFja3MsIHRyYWNlYmFja19mcmVlX3RyYWNlYmFjaywgTlVMTCk7CisgICAgX1B5X2hhc2h0YWJsZV9jbGVhcih0cmFjZW1hbGxvY190cmFjZWJhY2tzKTsKKworICAgIF9QeV9oYXNodGFibGVfZm9yZWFjaCh0cmFjZW1hbGxvY19maWxlbmFtZXMsIHRyYWNlbWFsbG9jX2NsZWFyX2ZpbGVuYW1lLCBOVUxMKTsKKyAgICBfUHlfaGFzaHRhYmxlX2NsZWFyKHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyk7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX2luaXQodm9pZCkKK3sKKyAgICBpZiAodHJhY2VtYWxsb2NfY29uZmlnLmluaXRpYWxpemVkID09IFRSQUNFTUFMTE9DX0ZJTkFMSVpFRCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgaGFzIGJlZW4gdW5sb2FkZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPT0gVFJBQ0VNQUxMT0NfSU5JVElBTElaRUQpCisgICAgICAgIHJldHVybiAwOworCisgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9SQVcsICZhbGxvY2F0b3JzLnJhdyk7CisKKyNpZmRlZiBSRUVOVFJBTlRfVEhSRUFETE9DQUwKKyAgICB0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5ID0gUHlUaHJlYWRfY3JlYXRlX2tleSgpOworICAgIGlmICh0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5ID09IC0xKSB7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyNlbHNlCisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdJVEhfVEhSRUFEKSAmJiBkZWZpbmVkKFRSQUNFX1JBV19NQUxMT0MpCisgICAgaWYgKHRhYmxlc19sb2NrID09IE5VTEwpIHsKKyAgICAgICAgdGFibGVzX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgICAgIGlmICh0YWJsZXNfbG9jayA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiY2Fubm90IGFsbG9jYXRlIGxvY2siKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgdHJhY2VtYWxsb2NfZmlsZW5hbWVzID0gaGFzaHRhYmxlX25ldygwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9QeV9oYXNodGFibGVfaGFzaF9mdW5jKVB5T2JqZWN0X0hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNodGFibGVfY29tcGFyZV91bmljb2RlKTsKKworICAgIHRyYWNlbWFsbG9jX3RyYWNlYmFja3MgPSBoYXNodGFibGVfbmV3KDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9QeV9oYXNodGFibGVfaGFzaF9mdW5jKWhhc2h0YWJsZV9oYXNoX3RyYWNlYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMpaGFzaHRhYmxlX2NvbXBhcmVfdHJhY2ViYWNrKTsKKworICAgIHRyYWNlbWFsbG9jX3RyYWNlcyA9IGhhc2h0YWJsZV9uZXcoc2l6ZW9mKHRyYWNlX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9kaXJlY3QpOworCisgICAgaWYgKHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyA9PSBOVUxMIHx8IHRyYWNlbWFsbG9jX3RyYWNlYmFja3MgPT0gTlVMTAorICAgICAgICB8fCB0cmFjZW1hbGxvY190cmFjZXMgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB1bmtub3duX2ZpbGVuYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjx1bmtub3duPiIpOworICAgIGlmICh1bmtub3duX2ZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmdW5rbm93bl9maWxlbmFtZSk7CisKKyAgICB0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2submZyYW1lID0gMTsKKyAgICAvKiBib3Jyb3dlZCByZWZlcmVuY2UgKi8KKyAgICB0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2suZnJhbWVzWzBdLmZpbGVuYW1lID0gdW5rbm93bl9maWxlbmFtZTsKKyAgICB0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2suZnJhbWVzWzBdLmxpbmVubyA9IDA7CisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLmhhc2ggPSB0cmFjZWJhY2tfaGFzaCgmdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrKTsKKworICAgIC8qIERpc2FibGUgdHJhY2luZyBhbGxvY2F0aW9ucyB1bnRpbCBob29rcyBhcmUgaW5zdGFsbGVkLiBTZXQKKyAgICAgICBhbHNvIHRoZSByZWVudHJhbnQgZmxhZyB0byBkZXRlY3QgYnVnczogZmFpbCB3aXRoIGFuIGFzc2VydGlvbiBlcnJvcgorICAgICAgIGlmIHNldF9yZWVudHJhbnQoMSkgaXMgY2FsbGVkIHdoaWxlIHRyYWNpbmcgaXMgZGlzYWJsZWQuICovCisgICAgc2V0X3JlZW50cmFudCgxKTsKKworICAgIHRyYWNlbWFsbG9jX2NvbmZpZy5pbml0aWFsaXplZCA9IFRSQUNFTUFMTE9DX0lOSVRJQUxJWkVEOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfZGVpbml0KHZvaWQpCit7CisgICAgaWYgKHRyYWNlbWFsbG9jX2NvbmZpZy5pbml0aWFsaXplZCAhPSBUUkFDRU1BTExPQ19JTklUSUFMSVpFRCkKKyAgICAgICAgcmV0dXJuOworICAgIHRyYWNlbWFsbG9jX2NvbmZpZy5pbml0aWFsaXplZCA9IFRSQUNFTUFMTE9DX0ZJTkFMSVpFRDsKKworICAgIHRyYWNlbWFsbG9jX3N0b3AoKTsKKworICAgIC8qIGRlc3Ryb3kgaGFzaCB0YWJsZXMgKi8KKyAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3kodHJhY2VtYWxsb2NfdHJhY2VzKTsKKyAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3kodHJhY2VtYWxsb2NfdHJhY2ViYWNrcyk7CisgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyk7CisKKyNpZiBkZWZpbmVkKFdJVEhfVEhSRUFEKSAmJiBkZWZpbmVkKFRSQUNFX1JBV19NQUxMT0MpCisgICAgaWYgKHRhYmxlc19sb2NrICE9IE5VTEwpIHsKKyAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrKHRhYmxlc19sb2NrKTsKKyAgICAgICAgdGFibGVzX2xvY2sgPSBOVUxMOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgUkVFTlRSQU5UX1RIUkVBRExPQ0FMCisgICAgUHlUaHJlYWRfZGVsZXRlX2tleSh0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5KTsKKyNlbmRpZgorCisgICAgUHlfWERFQ1JFRih1bmtub3duX2ZpbGVuYW1lKTsKK30KKworc3RhdGljIGludAordHJhY2VtYWxsb2Nfc3RhcnQoaW50IG1heF9uZnJhbWUpCit7CisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7CisgICAgc2l6ZV90IHNpemU7CisKKyAgICBpZiAodHJhY2VtYWxsb2NfaW5pdCgpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKHRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKSB7CisgICAgICAgIC8qIGhvb2sgYWxyZWFkeSBpbnN0YWxsZWQ6IGRvIG5vdGhpbmcgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgYXNzZXJ0KDEgPD0gbWF4X25mcmFtZSAmJiBtYXhfbmZyYW1lIDw9IE1BWF9ORlJBTUUpOworICAgIHRyYWNlbWFsbG9jX2NvbmZpZy5tYXhfbmZyYW1lID0gbWF4X25mcmFtZTsKKworICAgIC8qIGFsbG9jYXRlIGEgYnVmZmVyIHRvIHN0b3JlIGEgbmV3IHRyYWNlYmFjayAqLworICAgIHNpemUgPSBUUkFDRUJBQ0tfU0laRShtYXhfbmZyYW1lKTsKKyAgICBhc3NlcnQodHJhY2VtYWxsb2NfdHJhY2ViYWNrID09IE5VTEwpOworICAgIHRyYWNlbWFsbG9jX3RyYWNlYmFjayA9IHJhd19tYWxsb2Moc2l6ZSk7CisgICAgaWYgKHRyYWNlbWFsbG9jX3RyYWNlYmFjayA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZmRlZiBUUkFDRV9SQVdfTUFMTE9DCisgICAgYWxsb2MubWFsbG9jID0gdHJhY2VtYWxsb2NfcmF3X21hbGxvYzsKKyAgICBhbGxvYy5yZWFsbG9jID0gdHJhY2VtYWxsb2NfcmF3X3JlYWxsb2M7CisgICAgYWxsb2MuZnJlZSA9IHRyYWNlbWFsbG9jX2ZyZWU7CisKKyAgICBhbGxvYy5jdHggPSAmYWxsb2NhdG9ycy5yYXc7CisgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9SQVcsICZhbGxvY2F0b3JzLnJhdyk7CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9SQVcsICZhbGxvYyk7CisjZW5kaWYKKworICAgIGFsbG9jLm1hbGxvYyA9IHRyYWNlbWFsbG9jX21hbGxvY19naWw7CisgICAgYWxsb2MucmVhbGxvYyA9IHRyYWNlbWFsbG9jX3JlYWxsb2NfZ2lsOworICAgIGFsbG9jLmZyZWUgPSB0cmFjZW1hbGxvY19mcmVlOworCisgICAgYWxsb2MuY3R4ID0gJmFsbG9jYXRvcnMubWVtOworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmYWxsb2NhdG9ycy5tZW0pOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmYWxsb2MpOworCisgICAgYWxsb2MuY3R4ID0gJmFsbG9jYXRvcnMub2JqOworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fT0JKLCAmYWxsb2NhdG9ycy5vYmopOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fT0JKLCAmYWxsb2MpOworCisgICAgLyogZXZlcnl0aGluZyBpcyByZWFkeTogc3RhcnQgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zICovCisgICAgdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcgPSAxOworICAgIHNldF9yZWVudHJhbnQoMCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX3N0b3Aodm9pZCkKK3sKKyAgICBpZiAoIXRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBzdG9wIHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworICAgIHRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nID0gMDsKKworICAgIC8qIHNldCB0aGUgcmVlbnRyYW50IGZsYWcgdG8gZGV0ZWN0IGJ1Z3M6IGZhaWwgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IgaWYKKyAgICAgICBzZXRfcmVlbnRyYW50KDEpIGlzIGNhbGxlZCB3aGlsZSB0cmFjaW5nIGlzIGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyAgICAvKiB1bnJlZ2lzdGVyIHRoZSBob29rIG9uIG1lbW9yeSBhbGxvY2F0b3JzICovCisjaWZkZWYgVFJBQ0VfUkFXX01BTExPQworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2NhdG9ycy5yYXcpOworI2VuZGlmCisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9NRU0sICZhbGxvY2F0b3JzLm1lbSk7CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9PQkosICZhbGxvY2F0b3JzLm9iaik7CisKKyAgICAvKiByZWxlYXNlIG1lbW9yeSAqLworICAgIHRyYWNlbWFsbG9jX2NsZWFyX3RyYWNlcygpOworICAgIHJhd19mcmVlKHRyYWNlbWFsbG9jX3RyYWNlYmFjayk7CisgICAgdHJhY2VtYWxsb2NfdHJhY2ViYWNrID0gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0KgorbGluZW5vX2FzX29iaihpbnQgbGluZW5vKQoreworICAgIGlmIChsaW5lbm8gPj0gMCkKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhsaW5lbm8pOworICAgIGVsc2UKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19pc190cmFjaW5nX2RvYywKKyAgICAiaXNfdHJhY2luZygpLT5ib29sXG4iCisgICAgIlxuIgorICAgICJUcnVlIGlmIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zLFxuIgorICAgICJGYWxzZSBvdGhlcndpc2UuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX2lzX3RyYWNpbmcoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyh0cmFjZW1hbGxvY19jb25maWcudHJhY2luZyk7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19jbGVhcl90cmFjZXNfZG9jLAorICAgICJjbGVhcl90cmFjZXMoKVxuIgorICAgICJcbiIKKyAgICAiQ2xlYXIgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworCisgICAgc2V0X3JlZW50cmFudCgxKTsKKyAgICB0cmFjZW1hbGxvY19jbGVhcl90cmFjZXMoKTsKKyAgICBzZXRfcmVlbnRyYW50KDApOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2ZyYW1lX3RvX3B5b2JqZWN0KGZyYW1lX3QgKmZyYW1lKQoreworICAgIFB5T2JqZWN0ICpmcmFtZV9vYmosICpsaW5lbm9fb2JqOworCisgICAgZnJhbWVfb2JqID0gUHlUdXBsZV9OZXcoMik7CisgICAgaWYgKGZyYW1lX29iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChmcmFtZS0+ZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgZnJhbWUtPmZpbGVuYW1lID0gUHlfTm9uZTsKKyAgICBQeV9JTkNSRUYoZnJhbWUtPmZpbGVuYW1lKTsKKyAgICBQeVR1cGxlX1NFVF9JVEVNKGZyYW1lX29iaiwgMCwgZnJhbWUtPmZpbGVuYW1lKTsKKworICAgIGFzc2VydChmcmFtZS0+bGluZW5vID49IDApOworICAgIGxpbmVub19vYmogPSBsaW5lbm9fYXNfb2JqKGZyYW1lLT5saW5lbm8pOworICAgIGlmIChsaW5lbm9fb2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGZyYW1lX29iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKGZyYW1lX29iaiwgMSwgbGluZW5vX29iaik7CisKKyAgICByZXR1cm4gZnJhbWVfb2JqOworfQorCitzdGF0aWMgUHlPYmplY3QqCit0cmFjZWJhY2tfdG9fcHlvYmplY3QodHJhY2ViYWNrX3QgKnRyYWNlYmFjaywgX1B5X2hhc2h0YWJsZV90ICppbnRlcm5fdGFibGUpCit7CisgICAgaW50IGk7CisgICAgUHlPYmplY3QgKmZyYW1lcywgKmZyYW1lOworCisgICAgaWYgKGludGVybl90YWJsZSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChfUHlfSEFTSFRBQkxFX0dFVChpbnRlcm5fdGFibGUsIHRyYWNlYmFjaywgZnJhbWVzKSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGZyYW1lcyk7CisgICAgICAgICAgICByZXR1cm4gZnJhbWVzOworICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVzID0gUHlUdXBsZV9OZXcodHJhY2ViYWNrLT5uZnJhbWUpOworICAgIGlmIChmcmFtZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGk9MDsgaSA8IHRyYWNlYmFjay0+bmZyYW1lOyBpKyspIHsKKyAgICAgICAgZnJhbWUgPSBmcmFtZV90b19weW9iamVjdCgmdHJhY2ViYWNrLT5mcmFtZXNbaV0pOworICAgICAgICBpZiAoZnJhbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGZyYW1lcyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGZyYW1lcywgaSwgZnJhbWUpOworICAgIH0KKworICAgIGlmIChpbnRlcm5fdGFibGUgIT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5X0hBU0hUQUJMRV9TRVQoaW50ZXJuX3RhYmxlLCB0cmFjZWJhY2ssIGZyYW1lcykgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnJhbWVzKTsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAvKiBpbnRlcm5fdGFibGUga2VlcHMgYSBuZXcgcmVmZXJlbmNlIHRvIGZyYW1lcyAqLworICAgICAgICBQeV9JTkNSRUYoZnJhbWVzKTsKKyAgICB9CisgICAgcmV0dXJuIGZyYW1lczsKK30KKworc3RhdGljIFB5T2JqZWN0KgordHJhY2VfdG9fcHlvYmplY3QodHJhY2VfdCAqdHJhY2UsIF9QeV9oYXNodGFibGVfdCAqaW50ZXJuX3RyYWNlYmFja3MpCit7CisgICAgUHlPYmplY3QgKnRyYWNlX29iaiA9IE5VTEw7CisgICAgUHlPYmplY3QgKnNpemUsICp0cmFjZWJhY2s7CisKKyAgICB0cmFjZV9vYmogPSBQeVR1cGxlX05ldygyKTsKKyAgICBpZiAodHJhY2Vfb2JqID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2l6ZSA9IFB5TG9uZ19Gcm9tU2l6ZV90KHRyYWNlLT5zaXplKTsKKyAgICBpZiAoc2l6ZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRih0cmFjZV9vYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTSh0cmFjZV9vYmosIDAsIHNpemUpOworCisgICAgdHJhY2ViYWNrID0gdHJhY2ViYWNrX3RvX3B5b2JqZWN0KHRyYWNlLT50cmFjZWJhY2ssIGludGVybl90cmFjZWJhY2tzKTsKKyAgICBpZiAodHJhY2ViYWNrID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHRyYWNlX29iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKHRyYWNlX29iaiwgMSwgdHJhY2ViYWNrKTsKKworICAgIHJldHVybiB0cmFjZV9vYmo7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBfUHlfaGFzaHRhYmxlX3QgKnRyYWNlczsKKyAgICBfUHlfaGFzaHRhYmxlX3QgKnRyYWNlYmFja3M7CisgICAgUHlPYmplY3QgKmxpc3Q7Cit9IGdldF90cmFjZXNfdDsKKworc3RhdGljIGludAordHJhY2VtYWxsb2NfZ2V0X3RyYWNlc19maWxsKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgICBnZXRfdHJhY2VzX3QgKmdldF90cmFjZXMgPSB1c2VyX2RhdGE7CisgICAgdHJhY2VfdCAqdHJhY2U7CisgICAgUHlPYmplY3QgKnRyYWNlbWFsbG9jX29iajsKKyAgICBpbnQgcmVzOworCisgICAgdHJhY2UgPSAodHJhY2VfdCAqKV9QWV9IQVNIVEFCTEVfRU5UUllfREFUQShlbnRyeSk7CisKKyAgICB0cmFjZW1hbGxvY19vYmogPSB0cmFjZV90b19weW9iamVjdCh0cmFjZSwgZ2V0X3RyYWNlcy0+dHJhY2ViYWNrcyk7CisgICAgaWYgKHRyYWNlbWFsbG9jX29iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJlcyA9IFB5TGlzdF9BcHBlbmQoZ2V0X3RyYWNlcy0+bGlzdCwgdHJhY2VtYWxsb2Nfb2JqKTsKKyAgICBQeV9ERUNSRUYodHJhY2VtYWxsb2Nfb2JqKTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordHJhY2VtYWxsb2NfcHlvYmplY3RfZGVjcmVmX2NiKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgICBQeU9iamVjdCAqb2JqID0gKFB5T2JqZWN0ICopX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBX0FTX1ZPSURfUChlbnRyeSk7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgcmV0dXJuIDA7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19nZXRfdHJhY2VzX2RvYywKKyAgICAiX2dldF90cmFjZXMoKSAtPiBsaXN0XG4iCisgICAgIlxuIgorICAgICJHZXQgdHJhY2VzIG9mIGFsbCBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uXG4iCisgICAgIlJldHVybiBhIGxpc3Qgb2YgKHNpemU6IGludCwgdHJhY2ViYWNrOiB0dXBsZSkgdHVwbGVzLlxuIgorICAgICJ0cmFjZWJhY2sgaXMgYSB0dXBsZSBvZiAoZmlsZW5hbWU6IHN0ciwgbGluZW5vOiBpbnQpIHR1cGxlcy5cbiIKKyAgICAiXG4iCisgICAgIlJldHVybiBhbiBlbXB0eSBsaXN0IGlmIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgZGlzYWJsZWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX2dldF90cmFjZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgZ2V0X3RyYWNlc190IGdldF90cmFjZXM7CisgICAgaW50IGVycjsKKworICAgIGdldF90cmFjZXMudHJhY2VzID0gTlVMTDsKKyAgICBnZXRfdHJhY2VzLnRyYWNlYmFja3MgPSBOVUxMOworICAgIGdldF90cmFjZXMubGlzdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKGdldF90cmFjZXMubGlzdCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgcmV0dXJuIGdldF90cmFjZXMubGlzdDsKKworICAgIC8qIHRoZSB0cmFjZWJhY2sgaGFzaCB0YWJsZSBpcyB1c2VkIHRlbXBvcmFyaWx5IHRvIGludGVybiB0cmFjZWJhY2sgdHVwbGUKKyAgICAgICBvZiAoZmlsZW5hbWUsIGxpbmVubykgdHVwbGVzICovCisgICAgZ2V0X3RyYWNlcy50cmFjZWJhY2tzID0gaGFzaHRhYmxlX25ldyhzaXplb2YoUHlPYmplY3QgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2hhc2hfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2RpcmVjdCk7CisgICAgaWYgKGdldF90cmFjZXMudHJhY2ViYWNrcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBnZXRfdHJhY2VzLnRyYWNlcyA9IF9QeV9oYXNodGFibGVfY29weSh0cmFjZW1hbGxvY190cmFjZXMpOworICAgIFRBQkxFU19VTkxPQ0soKTsKKworICAgIGlmIChnZXRfdHJhY2VzLnRyYWNlcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgc2V0X3JlZW50cmFudCgxKTsKKyAgICBlcnIgPSBfUHlfaGFzaHRhYmxlX2ZvcmVhY2goZ2V0X3RyYWNlcy50cmFjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlbWFsbG9jX2dldF90cmFjZXNfZmlsbCwgJmdldF90cmFjZXMpOworICAgIHNldF9yZWVudHJhbnQoMCk7CisgICAgaWYgKGVycikKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGdvdG8gZmluYWxseTsKKworZXJyb3I6CisgICAgUHlfQ0xFQVIoZ2V0X3RyYWNlcy5saXN0KTsKKworZmluYWxseToKKyAgICBpZiAoZ2V0X3RyYWNlcy50cmFjZWJhY2tzICE9IE5VTEwpIHsKKyAgICAgICAgX1B5X2hhc2h0YWJsZV9mb3JlYWNoKGdldF90cmFjZXMudHJhY2ViYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZW1hbGxvY19weW9iamVjdF9kZWNyZWZfY2IsIE5VTEwpOworICAgICAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koZ2V0X3RyYWNlcy50cmFjZWJhY2tzKTsKKyAgICB9CisgICAgaWYgKGdldF90cmFjZXMudHJhY2VzICE9IE5VTEwpCisgICAgICAgIF9QeV9oYXNodGFibGVfZGVzdHJveShnZXRfdHJhY2VzLnRyYWNlcyk7CisKKyAgICByZXR1cm4gZ2V0X3RyYWNlcy5saXN0OworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X29iamVjdF90cmFjZWJhY2tfZG9jLAorICAgICJfZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKVxuIgorICAgICJcbiIKKyAgICAiR2V0IHRoZSB0cmFjZWJhY2sgd2hlcmUgdGhlIFB5dGhvbiBvYmplY3Qgb2JqIHdhcyBhbGxvY2F0ZWQuXG4iCisgICAgIlJldHVybiBhIHR1cGxlIG9mIChmaWxlbmFtZTogc3RyLCBsaW5lbm86IGludCkgdHVwbGVzLlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJuIE5vbmUgaWYgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyBkaXNhYmxlZCBvciBkaWQgbm90XG4iCisgICAgInRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBvYmplY3QuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX2dldF9vYmplY3RfdHJhY2ViYWNrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIFB5VHlwZU9iamVjdCAqdHlwZTsKKyAgICB2b2lkICpwdHI7CisgICAgdHJhY2VfdCB0cmFjZTsKKyAgICBpbnQgZm91bmQ7CisKKyAgICBpZiAoIXRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIHR5cGUgPSBQeV9UWVBFKG9iaik7CisgICAgaWYgKFB5VHlwZV9JU19HQyh0eXBlKSkKKyAgICAgICAgcHRyID0gKHZvaWQgKikoKGNoYXIgKilvYmogLSBzaXplb2YoUHlHQ19IZWFkKSk7CisgICAgZWxzZQorICAgICAgICBwdHIgPSAodm9pZCAqKW9iajsKKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgZm91bmQgPSBfUHlfSEFTSFRBQkxFX0dFVCh0cmFjZW1hbGxvY190cmFjZXMsIHB0ciwgdHJhY2UpOworICAgIFRBQkxFU19VTkxPQ0soKTsKKworICAgIGlmICghZm91bmQpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworCisgICAgcmV0dXJuIHRyYWNlYmFja190b19weW9iamVjdCh0cmFjZS50cmFjZWJhY2ssIE5VTEwpOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2Nfc3RhcnRfZG9jLAorICAgICJzdGFydChuZnJhbWU6IGludD0xKVxuIgorICAgICJcbiIKKyAgICAiU3RhcnQgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zLiBTZXQgYWxzbyB0aGUgbWF4aW11bSBudW1iZXIgXG4iCisgICAgIm9mIGZyYW1lcyBzdG9yZWQgaW4gdGhlIHRyYWNlYmFjayBvZiBhIHRyYWNlIHRvIG5mcmFtZS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2Nfc3RhcnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X3NzaXplX3QgbmZyYW1lID0gMTsKKyAgICBpbnQgbmZyYW1lX2ludDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46c3RhcnQiLCAmbmZyYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAobmZyYW1lIDwgMSB8fCBuZnJhbWUgPiBNQVhfTkZSQU1FKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgInRoZSBudW1iZXIgb2YgZnJhbWVzIG11c3QgYmUgaW4gcmFuZ2UgWzE7ICVpXSIsCisgICAgICAgICAgICAgICAgICAgICAoaW50KU1BWF9ORlJBTUUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmZyYW1lX2ludCA9IFB5X1NBRkVfRE9XTkNBU1QobmZyYW1lLCBQeV9zc2l6ZV90LCBpbnQpOworCisgICAgaWYgKHRyYWNlbWFsbG9jX3N0YXJ0KG5mcmFtZV9pbnQpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX3N0b3BfZG9jLAorICAgICJzdG9wKClcbiIKKyAgICAiXG4iCisgICAgIlN0b3AgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBjbGVhciB0cmFjZXNcbiIKKyAgICAib2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19zdG9wKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHRyYWNlbWFsbG9jX3N0b3AoKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF90cmFjZWJhY2tfbGltaXRfZG9jLAorICAgICJnZXRfdHJhY2ViYWNrX2xpbWl0KCkgLT4gaW50XG4iCisgICAgIlxuIgorICAgICJHZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBzdG9yZWQgaW4gdGhlIHRyYWNlYmFja1xuIgorICAgICJvZiBhIHRyYWNlLlxuIgorICAgICJcbiIKKyAgICAiQnkgZGVmYXVsdCwgYSB0cmFjZSBvZiBhbiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrIG9ubHkgc3RvcmVzXG4iCisgICAgInRoZSBtb3N0IHJlY2VudCBmcmFtZTogdGhlIGxpbWl0IGlzIDEuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX2dldF90cmFjZWJhY2tfbGltaXQoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSk7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19nZXRfdHJhY2VtYWxsb2NfbWVtb3J5X2RvYywKKyAgICAiZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSgpIC0+IGludFxuIgorICAgICJcbiIKKyAgICAiR2V0IHRoZSBtZW1vcnkgdXNhZ2UgaW4gYnl0ZXMgb2YgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZVxuIgorICAgICJ1c2VkIGludGVybmFsbHkgdG8gdHJhY2UgbWVtb3J5IGFsbG9jYXRpb25zLiIpOworCitzdGF0aWMgUHlPYmplY3QqCit0cmFjZW1hbGxvY19nZXRfdHJhY2VtYWxsb2NfbWVtb3J5KFB5T2JqZWN0ICpzZWxmKQoreworICAgIHNpemVfdCBzaXplOworICAgIFB5T2JqZWN0ICpzaXplX29iajsKKworICAgIHNpemUgPSBfUHlfaGFzaHRhYmxlX3NpemUodHJhY2VtYWxsb2NfdHJhY2ViYWNrcyk7CisgICAgc2l6ZSArPSBfUHlfaGFzaHRhYmxlX3NpemUodHJhY2VtYWxsb2NfZmlsZW5hbWVzKTsKKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgc2l6ZSArPSBfUHlfaGFzaHRhYmxlX3NpemUodHJhY2VtYWxsb2NfdHJhY2VzKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBzaXplX29iaiA9IFB5TG9uZ19Gcm9tU2l6ZV90KHNpemUpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOIiwgc2l6ZV9vYmopOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X3RyYWNlZF9tZW1vcnlfZG9jLAorICAgICJnZXRfdHJhY2VkX21lbW9yeSgpIC0+IChpbnQsIGludClcbiIKKyAgICAiXG4iCisgICAgIkdldCB0aGUgY3VycmVudCBzaXplIGFuZCBwZWFrIHNpemUgb2YgbWVtb3J5IGJsb2NrcyB0cmFjZWRcbiIKKyAgICAiYnkgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBhcyBhIHR1cGxlOiAoY3VycmVudDogaW50LCBwZWFrOiBpbnQpLiIpOworCitzdGF0aWMgUHlPYmplY3QqCit0cmFjZW1hbGxvY19nZXRfdHJhY2VkX21lbW9yeShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IHNpemUsIHBlYWtfc2l6ZTsKKyAgICBQeU9iamVjdCAqc2l6ZV9vYmosICpwZWFrX3NpemVfb2JqOworCisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImlpIiwgMCwgMCk7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIHNpemUgPSB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5OworICAgIHBlYWtfc2l6ZSA9IHRyYWNlbWFsbG9jX3BlYWtfdHJhY2VkX21lbW9yeTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBzaXplX29iaiA9IFB5TG9uZ19Gcm9tU2l6ZV90KHNpemUpOworICAgIHBlYWtfc2l6ZV9vYmogPSBQeUxvbmdfRnJvbVNpemVfdChwZWFrX3NpemUpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOTiIsIHNpemVfb2JqLCBwZWFrX3NpemVfb2JqKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG1vZHVsZV9tZXRob2RzW10gPSB7CisgICAgeyJpc190cmFjaW5nIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX2lzX3RyYWNpbmcsCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19pc190cmFjaW5nX2RvY30sCisgICAgeyJjbGVhcl90cmFjZXMiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzLAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzX2RvY30sCisgICAgeyJfZ2V0X3RyYWNlcyIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19nZXRfdHJhY2VzLAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlc19kb2N9LAorICAgIHsiX2dldF9vYmplY3RfdHJhY2ViYWNrIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX2dldF9vYmplY3RfdHJhY2ViYWNrLAorICAgICBNRVRIX08sIHRyYWNlbWFsbG9jX2dldF9vYmplY3RfdHJhY2ViYWNrX2RvY30sCisgICAgeyJzdGFydCIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19zdGFydCwKKyAgICAgIE1FVEhfVkFSQVJHUywgdHJhY2VtYWxsb2Nfc3RhcnRfZG9jfSwKKyAgICB7InN0b3AiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2Nfc3RvcCwKKyAgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19zdG9wX2RvY30sCisgICAgeyJnZXRfdHJhY2ViYWNrX2xpbWl0IiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX2dldF90cmFjZWJhY2tfbGltaXQsCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19nZXRfdHJhY2ViYWNrX2xpbWl0X2RvY30sCisgICAgeyJnZXRfdHJhY2VtYWxsb2NfbWVtb3J5IiwgKFB5Q0Z1bmN0aW9uKXRyYWNlbWFsbG9jX2dldF90cmFjZW1hbGxvY19tZW1vcnksCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19nZXRfdHJhY2VtYWxsb2NfbWVtb3J5X2RvY30sCisgICAgeyJnZXRfdHJhY2VkX21lbW9yeSIsIChQeUNGdW5jdGlvbil0cmFjZW1hbGxvY19nZXRfdHJhY2VkX21lbW9yeSwKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2dldF90cmFjZWRfbWVtb3J5X2RvY30sCisKKyAgICAvKiBzZW50aW5lbCAqLworICAgIHtOVUxMLCBOVUxMfQorfTsKKworUHlEb2NfU1RSVkFSKG1vZHVsZV9kb2MsCisiRGVidWcgbW9kdWxlIHRvIHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4iKTsKKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBtb2R1bGVfZGVmID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3RyYWNlbWFsbG9jIiwKKyAgICBtb2R1bGVfZG9jLAorICAgIDAsIC8qIG5vbi1uZWdhdGl2ZSBzaXplIHRvIGJlIGFibGUgdG8gdW5sb2FkIHRoZSBtb2R1bGUgKi8KKyAgICBtb2R1bGVfbWV0aG9kcywKKyAgICBOVUxMLAorfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fdHJhY2VtYWxsb2Modm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbTsKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZtb2R1bGVfZGVmKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICh0cmFjZW1hbGxvY19pbml0KCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBtOworfQorCitzdGF0aWMgaW50CitwYXJzZV9zeXNfeG9wdGlvbnMoUHlPYmplY3QgKnZhbHVlKQoreworICAgIFB5T2JqZWN0ICp2YWx1ZWxvbmc7CisgICAgbG9uZyBuZnJhbWU7CisKKyAgICBpZiAodmFsdWUgPT0gUHlfVHJ1ZSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSk7CisgICAgaWYgKFB5VW5pY29kZV9HZXRMZW5ndGgodmFsdWUpID09IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHZhbHVlbG9uZyA9IFB5TG9uZ19Gcm9tVW5pY29kZU9iamVjdCh2YWx1ZSwgMTApOworICAgIGlmICh2YWx1ZWxvbmcgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbmZyYW1lID0gUHlMb25nX0FzTG9uZyh2YWx1ZWxvbmcpOworICAgIFB5X0RFQ1JFRih2YWx1ZWxvbmcpOworICAgIGlmIChuZnJhbWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKG5mcmFtZSA8IDEgfHwgbmZyYW1lID4gTUFYX05GUkFNRSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIFB5X1NBRkVfRE9XTkNBU1QobmZyYW1lLCBsb25nLCBpbnQpOworfQorCitpbnQKK19QeVRyYWNlTWFsbG9jX0luaXQodm9pZCkKK3sKKyAgICBjaGFyICpwOworICAgIGludCBuZnJhbWU7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICBpZiAoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTlRSQUNFTUFMTE9DIikpICYmICpwICE9ICdcMCcpIHsKKyAgICAgICAgY2hhciAqZW5kcHRyID0gcDsKKyAgICAgICAgbG9uZyB2YWx1ZTsKKworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIHZhbHVlID0gc3RydG9sKHAsICZlbmRwdHIsIDEwKTsKKyAgICAgICAgaWYgKCplbmRwdHIgIT0gJ1wwJworICAgICAgICAgICAgfHwgdmFsdWUgPCAxCisgICAgICAgICAgICB8fCB2YWx1ZSA+IE1BWF9ORlJBTUUKKyAgICAgICAgICAgIHx8IGVycm5vID09IEVSQU5HRSkKKyAgICAgICAgeworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiUFlUSE9OVFJBQ0VNQUxMT0M6IGludmFsaWQgbnVtYmVyIG9mIGZyYW1lcyIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgbmZyYW1lID0gKGludCl2YWx1ZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICp4b3B0aW9ucywgKmtleSwgKnZhbHVlOworCisgICAgICAgIHhvcHRpb25zID0gUHlTeXNfR2V0WE9wdGlvbnMoKTsKKyAgICAgICAgaWYgKHhvcHRpb25zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAga2V5ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoInRyYWNlbWFsbG9jIik7CisgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHhvcHRpb25zLCBrZXkpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICAgICAgLyogLVggdHJhY2VtYWxsb2MgaXMgbm90IHVzZWQgKi8KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgbmZyYW1lID0gcGFyc2Vfc3lzX3hvcHRpb25zKHZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgaWYgKG5mcmFtZSA8IDApIHsKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIi1YIHRyYWNlbWFsbG9jPU5GUkFNRTogaW52YWxpZCBudW1iZXIgb2YgZnJhbWVzIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJhY2VtYWxsb2Nfc3RhcnQobmZyYW1lKTsKK30KKwordm9pZAorX1B5VHJhY2VNYWxsb2NfRmluaSh2b2lkKQoreworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKyAgICB0cmFjZW1hbGxvY19kZWluaXQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fd2Vha3JlZi5jIGIvTW9kdWxlcy9fd2Vha3JlZi5jCmluZGV4IDg4OTk1YjguLmRhNTg5MzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3dlYWtyZWYuYworKysgYi9Nb2R1bGVzL193ZWFrcmVmLmMKQEAgLTQsMjUgKzQsNTkgQEAKICNkZWZpbmUgR0VUX1dFQUtSRUZTX0xJU1RQVFIobykgXAogICAgICAgICAoKFB5V2Vha1JlZmVyZW5jZSAqKikgUHlPYmplY3RfR0VUX1dFQUtSRUZTX0xJU1RQVFIobykpCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfd2Vha3JlZgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ZmZlYzczYjg1ODQ2NTk2ZF0qLwogCi1QeURvY19TVFJWQVIod2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19fLAotImdldHdlYWtyZWZjb3VudChvYmplY3QpIC0tIHJldHVybiB0aGUgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlc1xuIgotInRvICdvYmplY3QnLiIpOworLypbY2xpbmljIGlucHV0XQorCitfd2Vha3JlZi5nZXR3ZWFrcmVmY291bnQgLT4gUHlfc3NpemVfdAorCisgIG9iamVjdDogb2JqZWN0CisgIC8KKworUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2VzIHRvICdvYmplY3QnLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X19kb2NfXywKKyJnZXR3ZWFrcmVmY291bnQoJG1vZHVsZSwgb2JqZWN0LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2VzIHRvIFwnb2JqZWN0XCcuIik7CisKKyNkZWZpbmUgX1dFQUtSRUZfR0VUV0VBS1JFRkNPVU5UX01FVEhPRERFRiAgICBcCisgICAgeyJnZXR3ZWFrcmVmY291bnQiLCAoUHlDRnVuY3Rpb24pX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50LCBNRVRIX08sIF93ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX199LAorCitzdGF0aWMgUHlfc3NpemVfdAorX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi13ZWFrcmVmX2dldHdlYWtyZWZjb3VudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iamVjdCkKK193ZWFrcmVmX2dldHdlYWtyZWZjb3VudChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqZWN0KQogewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgX3JldHVybl92YWx1ZTsKIAotICAgIGlmIChQeVR5cGVfU1VQUE9SVFNfV0VBS1JFRlMoUHlfVFlQRShvYmplY3QpKSkgewotICAgICAgICBQeVdlYWtSZWZlcmVuY2UgKipsaXN0ID0gR0VUX1dFQUtSRUZTX0xJU1RQVFIob2JqZWN0KTsKKyAgICBfcmV0dXJuX3ZhbHVlID0gX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwobW9kdWxlLCBvYmplY3QpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTsKIAotICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbVNzaXplX3QoX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQoKmxpc3QpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbUxvbmcoMCk7CitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CiAKLSAgICByZXR1cm4gcmVzdWx0Oworc3RhdGljIFB5X3NzaXplX3QKK193ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmplY3QpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDMyZWVkYmZkN2Q2OWUxMCBpbnB1dD1jZWRiNjk3MTFiNmEyNTA3XSovCit7CisgICAgUHlXZWFrUmVmZXJlbmNlICoqbGlzdDsKKworICAgIGlmICghUHlUeXBlX1NVUFBPUlRTX1dFQUtSRUZTKFB5X1RZUEUob2JqZWN0KSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgbGlzdCA9IEdFVF9XRUFLUkVGU19MSVNUUFRSKG9iamVjdCk7CisgICAgcmV0dXJuIF9QeVdlYWtyZWZfR2V0V2Vha3JlZkNvdW50KCpsaXN0KTsKIH0KIAogCkBAIC03OCw4ICsxMTIsNyBAQAogCiBzdGF0aWMgUHlNZXRob2REZWYKIHdlYWtyZWZfZnVuY3Rpb25zW10gPSAgewotICAgIHsiZ2V0d2Vha3JlZmNvdW50Iiwgd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQsICAgICAgICBNRVRIX08sCi0gICAgIHdlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X19kb2NfX30sCisgICAgX1dFQUtSRUZfR0VUV0VBS1JFRkNPVU5UX01FVEhPRERFRgogICAgIHsiZ2V0d2Vha3JlZnMiLCAgICAgd2Vha3JlZl9nZXR3ZWFrcmVmcywgICAgICAgICAgICBNRVRIX08sCiAgICAgIHdlYWtyZWZfZ2V0d2Vha3JlZnNfX2RvY19ffSwKICAgICB7InByb3h5IiwgICAgICAgICAgIHdlYWtyZWZfcHJveHksICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTLApAQCAtMTA2LDcgKzEzOSw3IEBACiAgICAgUHlPYmplY3QgKm07CiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZ3ZWFrcmVmbW9kdWxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBpZiAobSAhPSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRigmX1B5V2Vha3JlZl9SZWZUeXBlKTsKICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJyZWYiLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fd2luYXBpLmMgYi9Nb2R1bGVzL193aW5hcGkuYwppbmRleCBjNTNkNTVhLi43MjRhNDc4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL193aW5hcGkuYworKysgYi9Nb2R1bGVzL193aW5hcGkuYwpAQCAtNjIsNiArNjIsOCBAQAogCiAjZGVmaW5lIFRfSEFORExFIFRfUE9JTlRFUgogCisjZGVmaW5lIERXT1JEX01BWCA0Mjk0OTY3Mjk1VQorCiAvKiBHcmFiIENhbmNlbElvRXggZHluYW1pY2FsbHkgZnJvbSBrZXJuZWwzMiAqLwogc3RhdGljIGludCBoYXNfQ2FuY2VsSW9FeCA9IC0xOwogc3RhdGljIEJPT0wgKENBTExCQUNLICpQeV9DYW5jZWxJb0V4KShIQU5ETEUsIExQT1ZFUkxBUFBFRCk7CkBAIC0xMDUsMTcgKzEwNywzNyBAQAogewogICAgIERXT1JEIGJ5dGVzOwogICAgIGludCBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKwogICAgIGlmIChzZWxmLT5wZW5kaW5nKSB7Ci0gICAgICAgIC8qIG1ha2UgaXQgYSBwcm9ncmFtbWluZyBlcnJvciB0byBkZWFsbG9jYXRlIHdoaWxlIG9wZXJhdGlvbgotICAgICAgICAgICBpcyBwZW5kaW5nLCBldmVuIGlmIHdlIGNhbiBzYWZlbHkgY2FuY2VsIGl0ICovCiAgICAgICAgIGlmIChjaGVja19DYW5jZWxJb0V4KCkgJiYKLSAgICAgICAgICAgICAgICBQeV9DYW5jZWxJb0V4KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQpKQotICAgICAgICAgICAgR2V0T3ZlcmxhcHBlZFJlc3VsdChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkLCAmYnl0ZXMsIFRSVUUpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIkkvTyBvcGVyYXRpb25zIHN0aWxsIGluIGZsaWdodCB3aGlsZSBkZXN0cm95aW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJPdmVybGFwcGVkIG9iamVjdCwgdGhlIHByb2Nlc3MgbWF5IGNyYXNoIik7Ci0gICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShOVUxMKTsKKyAgICAgICAgICAgIFB5X0NhbmNlbElvRXgoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCkgJiYKKyAgICAgICAgICAgIEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwgJmJ5dGVzLCBUUlVFKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGhlIG9wZXJhdGlvbiBpcyBubyBsb25nZXIgcGVuZGluZyAtLSBub3RoaW5nIHRvIGRvLiAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKF9QeV9GaW5hbGl6aW5nID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoZSBvcGVyYXRpb24gaXMgc3RpbGwgcGVuZGluZyAtLSBnaXZlIGEgd2FybmluZy4gIFRoaXMKKyAgICAgICAgICAgICAgIHdpbGwgcHJvYmFibHkgb25seSBoYXBwZW4gb24gV2luZG93cyBYUC4gKi8KKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkkvTyBvcGVyYXRpb25zIHN0aWxsIGluIGZsaWdodCB3aGlsZSBkZXN0cm95aW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3ZlcmxhcHBlZCBvYmplY3QsIHRoZSBwcm9jZXNzIG1heSBjcmFzaCIpOworICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGhlIG9wZXJhdGlvbiBpcyBzdGlsbCBwZW5kaW5nLCBidXQgdGhlIHByb2Nlc3MgaXMKKyAgICAgICAgICAgICAgIHByb2JhYmx5IGFib3V0IHRvIGV4aXQsIHNvIHdlIG5lZWQgbm90IHdvcnJ5IHRvbyBtdWNoCisgICAgICAgICAgICAgICBhYm91dCBtZW1vcnkgbGVha3MuICBMZWFraW5nIHNlbGYgcHJldmVudHMgYSBwb3RlbnRpYWwKKyAgICAgICAgICAgICAgIGNyYXNoLiAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBkYWVtb24gdGhyZWFkIGlzIGNsZWFuZWQKKyAgICAgICAgICAgICAgIHVwIGF0IGV4aXQgLS0gc2VlICMxOTU2NS4gIFdlIG9ubHkgZXhwZWN0IHRvIGdldCBoZXJlCisgICAgICAgICAgICAgICBvbiBXaW5kb3dzIFhQLiAqLworICAgICAgICAgICAgQ2xvc2VIYW5kbGUoc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQpOworICAgICAgICAgICAgU2V0TGFzdEVycm9yKGVycik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CisKICAgICBDbG9zZUhhbmRsZShzZWxmLT5vdmVybGFwcGVkLmhFdmVudCk7CiAgICAgU2V0TGFzdEVycm9yKGVycik7CiAgICAgaWYgKHNlbGYtPndyaXRlX2J1ZmZlci5vYmopCkBAIC0xMTQyLDcgKzExNjQsNyBAQAogICAgIEhBTkRMRSBoYW5kbGU7CiAgICAgUHlfYnVmZmVyIF9idWYsICpidWY7CiAgICAgUHlPYmplY3QgKmJ1Zm9iajsKLSAgICBEV09SRCB3cml0dGVuOworICAgIERXT1JEIGxlbiwgd3JpdHRlbjsKICAgICBCT09MIHJldDsKICAgICBpbnQgdXNlX292ZXJsYXBwZWQgPSAwOwogICAgIERXT1JEIGVycjsKQEAgLTExNzAsNyArMTE5Miw4IEBACiAgICAgfQogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJldCA9IFdyaXRlRmlsZShoYW5kbGUsIGJ1Zi0+YnVmLCBidWYtPmxlbiwgJndyaXR0ZW4sCisgICAgbGVuID0gKERXT1JEKVB5X01JTihidWYtPmxlbiwgRFdPUkRfTUFYKTsKKyAgICByZXQgPSBXcml0ZUZpbGUoaGFuZGxlLCBidWYtPmJ1ZiwgbGVuLCAmd3JpdHRlbiwKICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHBlZCA/ICZvdmVybGFwcGVkLT5vdmVybGFwcGVkIDogTlVMTCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hcnJheW1vZHVsZS5jIGIvTW9kdWxlcy9hcnJheW1vZHVsZS5jCmluZGV4IDk2YzllNWIuLjNiMDEzYWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXJyYXltb2R1bGUuYworKysgYi9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKQEAgLTUxMyw3ICs1MTMsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldGFycmF5aXRlbShQeU9iamVjdCAqb3AsIFB5X3NzaXplX3QgaSkKIHsKLSAgICByZWdpc3RlciBhcnJheW9iamVjdCAqYXA7CisgICAgYXJyYXlvYmplY3QgKmFwOwogICAgIGFzc2VydChhcnJheV9DaGVjayhvcCkpOwogICAgIGFwID0gKGFycmF5b2JqZWN0ICopb3A7CiAgICAgYXNzZXJ0KGk+PTAgJiYgaTxQeV9TSVpFKGFwKSk7CkBAIC05NjgsOCArOTY4LDEzIEBACiAgICAgUHlfc3NpemVfdCBpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewotICAgICAgICBQeU9iamVjdCAqc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7Ci0gICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKKyAgICAgICAgUHlPYmplY3QgKnNlbGZpOworICAgICAgICBpbnQgY21wOworCisgICAgICAgIHNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOworICAgICAgICBpZiAoc2VsZmkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGZpKTsKICAgICAgICAgaWYgKGNtcCA+IDApCiAgICAgICAgICAgICBjb3VudCsrOwpAQCAtOTkwLDggKzk5NSwxMyBAQAogICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKnNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOwotICAgICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CisgICAgICAgIFB5T2JqZWN0ICpzZWxmaTsKKyAgICAgICAgaW50IGNtcDsKKworICAgICAgICBzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKKyAgICAgICAgaWYgKHNlbGZpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmaSk7CiAgICAgICAgIGlmIChjbXAgPiAwKSB7CiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWkpOwpAQCAtMTAxNiw2ICsxMDI2LDggQEAKIAogICAgIGZvciAoaSA9IDAsIGNtcCA9IDAgOyBjbXAgPT0gMCAmJiBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0ICpzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKKyAgICAgICAgaWYgKHNlbGZpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOwogICAgICAgICBQeV9ERUNSRUYoc2VsZmkpOwogICAgIH0KQEAgLTEwMjgsOCArMTA0MCwxMyBAQAogICAgIGludCBpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewotICAgICAgICBQeU9iamVjdCAqc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZixpKTsKLSAgICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOworICAgICAgICBQeU9iamVjdCAqc2VsZmk7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZixpKTsKKyAgICAgICAgaWYgKHNlbGZpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmaSk7CiAgICAgICAgIGlmIChjbXAgPiAwKSB7CiAgICAgICAgICAgICBpZiAoYXJyYXlfYXNzX3NsaWNlKHNlbGYsIGksIGkrMSwKQEAgLTEwNjgsNyArMTA4NSw5IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAicG9wIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgdiA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLGkpOworICAgIHYgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7CisgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGFycmF5X2Fzc19zbGljZShzZWxmLCBpLCBpKzEsIChQeU9iamVjdCAqKU5VTEwpICE9IDApIHsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTExMTQsMTMgKzExMzMsMjUgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhcnJheV9idWZmZXJfaW5mbyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICBQeU9iamVjdCogcmV0dmFsID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTCwgKnY7CisKICAgICByZXR2YWwgPSBQeVR1cGxlX05ldygyKTsKICAgICBpZiAoIXJldHZhbCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMCwgUHlMb25nX0Zyb21Wb2lkUHRyKHNlbGYtPm9iX2l0ZW0pKTsKLSAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMSwgUHlMb25nX0Zyb21Mb25nKChsb25nKShQeV9TSVpFKHNlbGYpKSkpOworICAgIHYgPSBQeUxvbmdfRnJvbVZvaWRQdHIoc2VsZi0+b2JfaXRlbSk7CisgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0ocmV0dmFsLCAwLCB2KTsKKworICAgIHYgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpKFB5X1NJWkUoc2VsZikpKTsKKyAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDEsIHYpOwogCiAgICAgcmV0dXJuIHJldHZhbDsKIH0KQEAgLTEyMDYsOCArMTIzNyw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXJyYXlfcmV2ZXJzZShhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGl0ZW1zaXplID0gc2VsZi0+b2JfZGVzY3ItPml0ZW1zaXplOwotICAgIHJlZ2lzdGVyIGNoYXIgKnAsICpxOworICAgIFB5X3NzaXplX3QgaXRlbXNpemUgPSBzZWxmLT5vYl9kZXNjci0+aXRlbXNpemU7CisgICAgY2hhciAqcCwgKnE7CiAgICAgLyogbGl0dGxlIGJ1ZmZlciB0byBob2xkIGl0ZW1zIHdoaWxlIHN3YXBwaW5nICovCiAgICAgY2hhciB0bXBbMjU2XTsgICAgICAvKiA4IGlzIHByb2JhYmx5IGVub3VnaCAtLSBidXQgd2h5IHNraW1wICovCiAgICAgYXNzZXJ0KChzaXplX3QpaXRlbXNpemUgPD0gc2l6ZW9mKHRtcCkpOwpAQCAtMTM4NiwxMyArMTQxNywxNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0ICp2ID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOwotICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeUxpc3RfU2V0SXRlbShsaXN0LCBpLCB2KTsKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChQeUxpc3RfU2V0SXRlbShsaXN0LCBpLCB2KSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICByZXR1cm4gbGlzdDsKKworZXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOwogfQogCiBQeURvY19TVFJWQVIodG9saXN0X2RvYywKQEAgLTE2NjQsMTEgKzE2OTgsOCBAQAogc3RhdGljIGVudW0gbWFjaGluZV9mb3JtYXRfY29kZQogdHlwZWNvZGVfdG9fbWZvcm1hdF9jb2RlKGNoYXIgdHlwZWNvZGUpCiB7Ci0jaWZkZWYgV09SRFNfQklHRU5ESUFOCi0gICAgY29uc3QgaW50IGlzX2JpZ19lbmRpYW4gPSAxOwotI2Vsc2UKLSAgICBjb25zdCBpbnQgaXNfYmlnX2VuZGlhbiA9IDA7Ci0jZW5kaWYKKyAgICBjb25zdCBpbnQgaXNfYmlnX2VuZGlhbiA9IFBZX0JJR19FTkRJQU47CisKICAgICBzaXplX3QgaW50c2l6ZTsKICAgICBpbnQgaXNfc2lnbmVkOwogCkBAIC0yNDg3LDYgKzI1MTgsMjAgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkN8TzphcnJheSIsICZjLCAmaW5pdGlhbCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKGluaXRpYWwgJiYgYyAhPSAndScpIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhpbml0aWFsKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImNhbm5vdCB1c2UgYSBzdHIgdG8gaW5pdGlhbGl6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGFycmF5IHdpdGggdHlwZWNvZGUgJyVjJyIsIGMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYXJyYXlfQ2hlY2soaW5pdGlhbCkgJiYKKyAgICAgICAgICAgICAgICAgKChhcnJheW9iamVjdCopaW5pdGlhbCktPm9iX2Rlc2NyLT50eXBlY29kZSA9PSAndScpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJjYW5ub3QgdXNlIGEgdW5pY29kZSBhcnJheSB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemUgYW4gYXJyYXkgd2l0aCB0eXBlY29kZSAnJWMnIiwgYyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghKGluaXRpYWwgPT0gTlVMTCB8fCBQeUxpc3RfQ2hlY2soaW5pdGlhbCkKICAgICAgICAgICB8fCBQeUJ5dGVBcnJheV9DaGVjayhpbml0aWFsKQogICAgICAgICAgIHx8IFB5Qnl0ZXNfQ2hlY2soaW5pdGlhbCkKQEAgLTI2MTMsOSArMjY1OCwxOSBAQAogIlRoaXMgbW9kdWxlIGRlZmluZXMgYW4gb2JqZWN0IHR5cGUgd2hpY2ggY2FuIGVmZmljaWVudGx5IHJlcHJlc2VudFxuXAogYW4gYXJyYXkgb2YgYmFzaWMgdmFsdWVzOiBjaGFyYWN0ZXJzLCBpbnRlZ2VycywgZmxvYXRpbmcgcG9pbnRcblwKIG51bWJlcnMuICBBcnJheXMgYXJlIHNlcXVlbmNlIHR5cGVzIGFuZCBiZWhhdmUgdmVyeSBtdWNoIGxpa2UgbGlzdHMsXG5cCi1leGNlcHQgdGhhdCB0aGUgdHlwZSBvZiBvYmplY3RzIHN0b3JlZCBpbiB0aGVtIGlzIGNvbnN0cmFpbmVkLiAgVGhlXG5cCi10eXBlIGlzIHNwZWNpZmllZCBhdCBvYmplY3QgY3JlYXRpb24gdGltZSBieSB1c2luZyBhIHR5cGUgY29kZSwgd2hpY2hcblwKLWlzIGEgc2luZ2xlIGNoYXJhY3Rlci4gIFRoZSBmb2xsb3dpbmcgdHlwZSBjb2RlcyBhcmUgZGVmaW5lZDpcblwKK2V4Y2VwdCB0aGF0IHRoZSB0eXBlIG9mIG9iamVjdHMgc3RvcmVkIGluIHRoZW0gaXMgY29uc3RyYWluZWQuXG4iKTsKKworUHlEb2NfU1RSVkFSKGFycmF5dHlwZV9kb2MsCisiYXJyYXkodHlwZWNvZGUgWywgaW5pdGlhbGl6ZXJdKSAtPiBhcnJheVxuXAorXG5cCitSZXR1cm4gYSBuZXcgYXJyYXkgd2hvc2UgaXRlbXMgYXJlIHJlc3RyaWN0ZWQgYnkgdHlwZWNvZGUsIGFuZFxuXAoraW5pdGlhbGl6ZWQgZnJvbSB0aGUgb3B0aW9uYWwgaW5pdGlhbGl6ZXIgdmFsdWUsIHdoaWNoIG11c3QgYmUgYSBsaXN0LFxuXAorc3RyaW5nIG9yIGl0ZXJhYmxlIG92ZXIgZWxlbWVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuXG5cCitcblwKK0FycmF5cyByZXByZXNlbnQgYmFzaWMgdmFsdWVzIGFuZCBiZWhhdmUgdmVyeSBtdWNoIGxpa2UgbGlzdHMsIGV4Y2VwdFxuXAordGhlIHR5cGUgb2Ygb2JqZWN0cyBzdG9yZWQgaW4gdGhlbSBpcyBjb25zdHJhaW5lZC4gVGhlIHR5cGUgaXMgc3BlY2lmaWVkXG5cCithdCBvYmplY3QgY3JlYXRpb24gdGltZSBieSB1c2luZyBhIHR5cGUgY29kZSwgd2hpY2ggaXMgYSBzaW5nbGUgY2hhcmFjdGVyLlxuXAorVGhlIGZvbGxvd2luZyB0eXBlIGNvZGVzIGFyZSBkZWZpbmVkOlxuXAogXG5cCiAgICAgVHlwZSBjb2RlICAgQyBUeXBlICAgICAgICAgICAgIE1pbmltdW0gc2l6ZSBpbiBieXRlcyBcblwKICAgICAnYicgICAgICAgICBzaWduZWQgaW50ZWdlciAgICAgMSBcblwKQEAgLTI2MzksMjEgKzI2OTQsNiBAQAogQyBjb21waWxlciB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBzdXBwb3J0cyAnbG9uZyBsb25nJywgb3IsIG9uIFdpbmRvd3MsIFxuXAogJ19faW50NjQnLlxuXAogXG5cCi1UaGUgY29uc3RydWN0b3IgaXM6XG5cCi1cblwKLWFycmF5KHR5cGVjb2RlIFssIGluaXRpYWxpemVyXSkgLS0gY3JlYXRlIGEgbmV3IGFycmF5XG5cCi0iKTsKLQotUHlEb2NfU1RSVkFSKGFycmF5dHlwZV9kb2MsCi0iYXJyYXkodHlwZWNvZGUgWywgaW5pdGlhbGl6ZXJdKSAtPiBhcnJheVxuXAotXG5cCi1SZXR1cm4gYSBuZXcgYXJyYXkgd2hvc2UgaXRlbXMgYXJlIHJlc3RyaWN0ZWQgYnkgdHlwZWNvZGUsIGFuZFxuXAotaW5pdGlhbGl6ZWQgZnJvbSB0aGUgb3B0aW9uYWwgaW5pdGlhbGl6ZXIgdmFsdWUsIHdoaWNoIG11c3QgYmUgYSBsaXN0LFxuXAotc3RyaW5nIG9yIGl0ZXJhYmxlIG92ZXIgZWxlbWVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuXG5cCi1cblwKLUFycmF5cyByZXByZXNlbnQgYmFzaWMgdmFsdWVzIGFuZCBiZWhhdmUgdmVyeSBtdWNoIGxpa2UgbGlzdHMsIGV4Y2VwdFxuXAotdGhlIHR5cGUgb2Ygb2JqZWN0cyBzdG9yZWQgaW4gdGhlbSBpcyBjb25zdHJhaW5lZC5cblwKLVxuXAogTWV0aG9kczpcblwKIFxuXAogYXBwZW5kKCkgLS0gYXBwZW5kIGEgbmV3IGl0ZW0gdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXlcblwKZGlmZiAtLWdpdCBhL01vZHVsZXMvYXRleGl0bW9kdWxlLmMgYi9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCmluZGV4IGY2OGQ4MDQuLjk4ODcwMTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXRleGl0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYwpAQCAtMTAsOCArMTAsNiBAQAogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIChmb3IgYXRleGl0X2NsZWFudXApICovCiBzdGF0aWMgUHlPYmplY3QgKmF0ZXhpdF9jbGVhcihQeU9iamVjdCosIFB5T2JqZWN0Kik7Ci0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uIChmb3IgYXRleGl0X2NhbGxmdW5jcykgKi8KLXN0YXRpYyB2b2lkIGF0ZXhpdF9jbGVhbnVwKFB5T2JqZWN0Kik7CiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIG1vZHVsZSBvYmplY3QgKi8KIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgYXRleGl0bW9kdWxlOwogCkBAIC0zMyw2ICszMSwzNSBAQAogI2RlZmluZSBHRVRfQVRFWElUX1NUQVRFKG1vZCkgKChhdGV4aXRtb2R1bGVfc3RhdGUqKVB5TW9kdWxlX0dldFN0YXRlKG1vZCkpCiAKIAorc3RhdGljIHZvaWQKK2F0ZXhpdF9kZWxldGVfY2IoYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZSwgaW50IGkpCit7CisgICAgYXRleGl0X2NhbGxiYWNrICpjYjsKKworICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV0gPSBOVUxMOworICAgIFB5X0RFQ1JFRihjYi0+ZnVuYyk7CisgICAgUHlfREVDUkVGKGNiLT5hcmdzKTsKKyAgICBQeV9YREVDUkVGKGNiLT5rd2FyZ3MpOworICAgIFB5TWVtX0ZyZWUoY2IpOworfQorCisvKiBDbGVhciBhbGwgY2FsbGJhY2tzIHdpdGhvdXQgY2FsbGluZyB0aGVtICovCitzdGF0aWMgdm9pZAorYXRleGl0X2NsZWFudXAoYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZSkKK3sKKyAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBtb2RzdGF0ZS0+bmNhbGxiYWNrczsgaSsrKSB7CisgICAgICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgICAgIGlmIChjYiA9PSBOVUxMKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihtb2RzdGF0ZSwgaSk7CisgICAgfQorICAgIG1vZHN0YXRlLT5uY2FsbGJhY2tzID0gMDsKK30KKwogLyogSW5zdGFsbGVkIGludG8gcHl0aG9ucnVuLmMncyBhdGV4aXQgbWVjaGFuaXNtICovCiAKIHN0YXRpYyB2b2lkCkBAIC03OCwzNCArMTA1LDEyIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdGV4aXRfY2xlYW51cChtb2R1bGUpOworICAgIGF0ZXhpdF9jbGVhbnVwKG1vZHN0YXRlKTsKIAogICAgIGlmIChleGNfdHlwZSkKICAgICAgICAgUHlFcnJfUmVzdG9yZShleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdGIpOwogfQogCi1zdGF0aWMgdm9pZAotYXRleGl0X2RlbGV0ZV9jYihQeU9iamVjdCAqc2VsZiwgaW50IGkpCi17Ci0gICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKLSAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOwotCi0gICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwotICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07Ci0gICAgbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV0gPSBOVUxMOwotICAgIFB5X0RFQ1JFRihjYi0+ZnVuYyk7Ci0gICAgUHlfREVDUkVGKGNiLT5hcmdzKTsKLSAgICBQeV9YREVDUkVGKGNiLT5rd2FyZ3MpOwotICAgIFB5TWVtX0ZyZWUoY2IpOwotfQotCi1zdGF0aWMgdm9pZAotYXRleGl0X2NsZWFudXAoUHlPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKnIgPSBhdGV4aXRfY2xlYXIoc2VsZiwgTlVMTCk7Ci0gICAgUHlfREVDUkVGKHIpOwotfQotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIE1vZHVsZSBtZXRob2RzLiAqLwogCkBAIC0xOTQsMjEgKzE5OSw1MCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF0ZXhpdF9jbGVhcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKKyAgICBhdGV4aXRfY2xlYW51cChHRVRfQVRFWElUX1NUQVRFKHNlbGYpKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGF0ZXhpdF9uY2FsbGJhY2tzX19kb2NfXywKKyJfbmNhbGxiYWNrcygpIC0+IGludFxuXAorXG5cCitSZXR1cm4gdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIGV4aXQgZnVuY3Rpb25zLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXRleGl0X25jYWxsYmFja3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCit7CiAgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKLSAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOwotICAgIGludCBpOwogCiAgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwogCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChtb2RzdGF0ZS0+bmNhbGxiYWNrcyk7Cit9CisKK3N0YXRpYyBpbnQKK2F0ZXhpdF9tX3RyYXZlcnNlKFB5T2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBpbnQgaTsKKyAgICBhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlOworCisgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwogICAgIGZvciAoaSA9IDA7IGkgPCBtb2RzdGF0ZS0+bmNhbGxiYWNrczsgaSsrKSB7Ci0gICAgICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgICAgIGF0ZXhpdF9jYWxsYmFjayAqY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKICAgICAgICAgaWYgKGNiID09IE5VTEwpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKHNlbGYsIGkpOworICAgICAgICBQeV9WSVNJVChjYi0+ZnVuYyk7CisgICAgICAgIFB5X1ZJU0lUKGNiLT5hcmdzKTsKKyAgICAgICAgUHlfVklTSVQoY2ItPmt3YXJncyk7CiAgICAgfQotICAgIG1vZHN0YXRlLT5uY2FsbGJhY2tzID0gMDsKLSAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXRleGl0X21fY2xlYXIoUHlPYmplY3QgKnNlbGYpCit7CisgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKKyAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUoc2VsZik7CisgICAgYXRleGl0X2NsZWFudXAobW9kc3RhdGUpOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjE2LDYgKzI1MCw3IEBACiB7CiAgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKICAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUobSk7CisgICAgYXRleGl0X2NsZWFudXAobW9kc3RhdGUpOwogICAgIFB5TWVtX0ZyZWUobW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3MpOwogfQogCkBAIC0yNDYsNyArMjgxLDcgQEAKICAgICAgICAgaWYgKGVxIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoZXEpCi0gICAgICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKHNlbGYsIGkpOworICAgICAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihtb2RzdGF0ZSwgaSk7CiAgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwogfQpAQCAtMjYwLDYgKzI5NSw4IEBACiAgICAgICAgIGF0ZXhpdF91bnJlZ2lzdGVyX19kb2NfX30sCiAgICAgeyJfcnVuX2V4aXRmdW5jcyIsIChQeUNGdW5jdGlvbikgYXRleGl0X3J1bl9leGl0ZnVuY3MsIE1FVEhfTk9BUkdTLAogICAgICAgICBhdGV4aXRfcnVuX2V4aXRmdW5jc19fZG9jX199LAorICAgIHsiX25jYWxsYmFja3MiLCAoUHlDRnVuY3Rpb24pIGF0ZXhpdF9uY2FsbGJhY2tzLCBNRVRIX05PQVJHUywKKyAgICAgICAgYXRleGl0X25jYWxsYmFja3NfX2RvY19ffSwKICAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yNzUsMTUgKzMxMiwxNSBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgYXRleGl0bW9kdWxlID0gewotCVB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLQkiYXRleGl0IiwKLQlhdGV4aXRfX2RvY19fLAotCXNpemVvZihhdGV4aXRtb2R1bGVfc3RhdGUpLAotCWF0ZXhpdF9tZXRob2RzLAotCU5VTEwsCi0JTlVMTCwKLQlOVUxMLAotCShmcmVlZnVuYylhdGV4aXRfZnJlZQorICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiYXRleGl0IiwKKyAgICBhdGV4aXRfX2RvY19fLAorICAgIHNpemVvZihhdGV4aXRtb2R1bGVfc3RhdGUpLAorICAgIGF0ZXhpdF9tZXRob2RzLAorICAgIE5VTEwsCisgICAgYXRleGl0X21fdHJhdmVyc2UsCisgICAgYXRleGl0X21fY2xlYXIsCisgICAgKGZyZWVmdW5jKWF0ZXhpdF9mcmVlCiB9OwogCiBQeU1PRElOSVRfRlVOQwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hdWRpb29wLmMgYi9Nb2R1bGVzL2F1ZGlvb3AuYwppbmRleCAzZjA0NzYyLi4yZDI4N2YyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2F1ZGlvb3AuYworKysgYi9Nb2R1bGVzL2F1ZGlvb3AuYwpAQCAtNSwxOCArNSw2IEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKIAotI2lmIFNJWkVPRl9JTlQgPT0gNAotdHlwZWRlZiBpbnQgUHlfSW50MzI7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBQeV9VSW50MzI7Ci0jZWxzZQotI2lmIFNJWkVPRl9MT05HID09IDQKLXR5cGVkZWYgbG9uZyBQeV9JbnQzMjsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBQeV9VSW50MzI7Ci0jZWxzZQotI2Vycm9yICJObyA0LWJ5dGUgaW50ZWdyYWwgdHlwZSIKLSNlbmRpZgotI2VuZGlmCi0KIHR5cGVkZWYgc2hvcnQgUHlJbnQxNjsKIAogI2lmIGRlZmluZWQoX19DSEFSX1VOU0lHTkVEX18pCkBAIC0zOCw3ICsyNiw3IEBACiAgICAgICAgIHZhbCA9IG1heHZhbDsKICAgICBlbHNlIGlmICh2YWwgPCBtaW52YWwgKyAxKQogICAgICAgICB2YWwgPSBtaW52YWw7Ci0gICAgcmV0dXJuIHZhbDsKKyAgICByZXR1cm4gKGludCl2YWw7CiB9CiAKIApAQCAtMTYxLDkgKzE0OSw2IEBACiAgICAgUHlJbnQxNiAgICAgICAgIHNlZzsKICAgICB1bnNpZ25lZCBjaGFyICAgdXZhbDsKIAotICAgIC8qIFRoZSBvcmlnaW5hbCBzb3ggY29kZSBkb2VzIHRoaXMgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIG5vdCBoZXJlICovCi0gICAgcGNtX3ZhbCA9IHBjbV92YWwgPj4gMjsKLQogICAgIC8qIHUtbGF3IGludmVydHMgYWxsIGJpdHMgKi8KICAgICAvKiBHZXQgdGhlIHNpZ24gYW5kIHRoZSBtYWduaXR1ZGUgb2YgdGhlIHZhbHVlLiAqLwogICAgIGlmIChwY21fdmFsIDwgMCkgewpAQCAtMjU4LDkgKzI0Myw2IEBACiAgICAgc2hvcnQgICAgICAgICAgIHNlZzsKICAgICB1bnNpZ25lZCBjaGFyICAgYXZhbDsKIAotICAgIC8qIFRoZSBvcmlnaW5hbCBzb3ggY29kZSBkb2VzIHRoaXMgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIG5vdCBoZXJlICovCi0gICAgcGNtX3ZhbCA9IHBjbV92YWwgPj4gMzsKLQogICAgIC8qIEEtbGF3IHVzaW5nIGV2ZW4gYml0IGludmVyc2lvbiAqLwogICAgIGlmIChwY21fdmFsID49IDApIHsKICAgICAgICAgbWFzayA9IDB4RDU7ICAgICAgICAgICAgLyogc2lnbiAoN3RoKSBiaXQgPSAxICovCkBAIC0zMDUsMTkgKzI4Nyw5MSBAQAogICAgIDE1Mjg5LCAxNjgxOCwgMTg1MDAsIDIwMzUwLCAyMjM4NSwgMjQ2MjMsIDI3MDg2LCAyOTc5NCwgMzI3NjcKIH07CiAKLSNkZWZpbmUgQ0hBUlAoY3AsIGkpICgoc2lnbmVkIGNoYXIgKikoY3AraSkpCi0jZGVmaW5lIFNIT1JUUChjcCwgaSkgKChzaG9ydCAqKShjcCtpKSkKLSNkZWZpbmUgTE9OR1AoY3AsIGkpICgoUHlfSW50MzIgKikoY3AraSkpCisjZGVmaW5lIEdFVElOVFgoVCwgY3AsIGkpICAoKihUICopKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSkpCisjZGVmaW5lIFNFVElOVFgoVCwgY3AsIGksIHZhbCkgIGRvIHsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKihUICopKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSkgPSAoVCkodmFsKTsgXAorICAgIH0gd2hpbGUgKDApCiAKIAorI2RlZmluZSBHRVRJTlQ4KGNwLCBpKSAgICAgICAgICBHRVRJTlRYKHNpZ25lZCBjaGFyLCAoY3ApLCAoaSkpCisjZGVmaW5lIEdFVElOVDE2KGNwLCBpKSAgICAgICAgIEdFVElOVFgoc2hvcnQsIChjcCksIChpKSkKKyNkZWZpbmUgR0VUSU5UMzIoY3AsIGkpICAgICAgICAgR0VUSU5UWChQWV9JTlQzMl9ULCAoY3ApLCAoaSkpCisKKyNpZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgR0VUSU5UMjQoY3AsIGkpICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsyXSArICAgICAgICAgICAgICBcCisgICAgICAgICgoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA8PCA4KSArICAgICAgIFwKKyAgICAgICAgKCgoc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVswXSA8PCAxNikgKQorI2Vsc2UKKyNkZWZpbmUgR0VUSU5UMjQoY3AsIGkpICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVswXSArICAgICAgICAgICAgICBcCisgICAgICAgICgoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA8PCA4KSArICAgICAgIFwKKyAgICAgICAgKCgoc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsyXSA8PCAxNikgKQorI2VuZGlmCisKKworI2RlZmluZSBTRVRJTlQ4KGNwLCBpLCB2YWwpICAgICBTRVRJTlRYKHNpZ25lZCBjaGFyLCAoY3ApLCAoaSksICh2YWwpKQorI2RlZmluZSBTRVRJTlQxNihjcCwgaSwgdmFsKSAgICBTRVRJTlRYKHNob3J0LCAoY3ApLCAoaSksICh2YWwpKQorI2RlZmluZSBTRVRJTlQzMihjcCwgaSwgdmFsKSAgICBTRVRJTlRYKFBZX0lOVDMyX1QsIChjcCksIChpKSwgKHZhbCkpCisKKyNpZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgU0VUSU5UMjQoY3AsIGksIHZhbCkgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdID0gKGludCkodmFsKTsgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA9IChpbnQpKHZhbCkgPj4gODsgICAgIFwKKyAgICAgICAgKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdID0gKGludCkodmFsKSA+PiAxNjsgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIFNFVElOVDI0KGNwLCBpLCB2YWwpICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVswXSA9IChpbnQpKHZhbCk7ICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMV0gPSAoaW50KSh2YWwpID4+IDg7ICAgICBcCisgICAgICAgICgoc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsyXSA9IChpbnQpKHZhbCkgPj4gMTY7ICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZW5kaWYKKworCisjZGVmaW5lIEdFVFJBV1NBTVBMRShzaXplLCBjcCwgaSkgICggICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHNpemUgPT0gMSkgPyAoaW50KUdFVElOVDgoKGNwKSwgKGkpKSA6ICAgICAgICAgXAorICAgICAgICAoc2l6ZSA9PSAyKSA/IChpbnQpR0VUSU5UMTYoKGNwKSwgKGkpKSA6ICAgICAgICBcCisgICAgICAgIChzaXplID09IDMpID8gKGludClHRVRJTlQyNCgoY3ApLCAoaSkpIDogICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAoaW50KUdFVElOVDMyKChjcCksIChpKSkpCisKKyNkZWZpbmUgU0VUUkFXU0FNUExFKHNpemUsIGNwLCBpLCB2YWwpICBkbyB7ICAgIFwKKyAgICAgICAgaWYgKHNpemUgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDgoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDE2KChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAzKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDI0KChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDMyKChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCisKKworI2RlZmluZSBHRVRTQU1QTEUzMihzaXplLCBjcCwgaSkgICggICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChzaXplID09IDEpID8gKGludClHRVRJTlQ4KChjcCksIChpKSkgPDwgMjQgOiAgIFwKKyAgICAgICAgKHNpemUgPT0gMikgPyAoaW50KUdFVElOVDE2KChjcCksIChpKSkgPDwgMTYgOiAgXAorICAgICAgICAoc2l6ZSA9PSAzKSA/IChpbnQpR0VUSU5UMjQoKGNwKSwgKGkpKSA8PCA4IDogICBcCisgICAgICAgICAgICAgICAgICAgICAgKGludClHRVRJTlQzMigoY3ApLCAoaSkpKQorCisjZGVmaW5lIFNFVFNBTVBMRTMyKHNpemUsIGNwLCBpLCB2YWwpICBkbyB7ICAgICBcCisgICAgICAgIGlmIChzaXplID09IDEpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQ4KChjcCksIChpKSwgKHZhbCkgPj4gMjQpOyAgICBcCisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQxNigoY3ApLCAoaSksICh2YWwpID4+IDE2KTsgICBcCisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMykgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQyNCgoY3ApLCAoaSksICh2YWwpID4+IDgpOyAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQzMigoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICBcCisgICAgfSB3aGlsZSgwKQorCiAKIHN0YXRpYyBQeU9iamVjdCAqQXVkaW9vcEVycm9yOwogCiBzdGF0aWMgaW50CiBhdWRpb29wX2NoZWNrX3NpemUoaW50IHNpemUpCiB7Ci0gICAgaWYgKHNpemUgIT0gMSAmJiBzaXplICE9IDIgJiYgc2l6ZSAhPSA0KSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTaXplIHNob3VsZCBiZSAxLCAyIG9yIDQiKTsKKyAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlNpemUgc2hvdWxkIGJlIDEsIDIsIDMgb3IgNCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZWxzZQpAQCAtMzM2LDQzICszOTAsNjAgQEAKICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfZ2V0c2FtcGxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisvKltjbGluaWMgaW5wdXRdCitvdXRwdXQgcHJlc2V0IGZpbGUKK21vZHVsZSBhdWRpb29wCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD01NjE5ZjkzNWYyNjkxOTlhXSovCiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2luOmdldHNhbXBsZSIsICZjcCwgJmxlbiwgJnNpemUsICZpKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmdldHNhbXBsZQorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBpbmRleDogUHlfc3NpemVfdAorICAgIC8KKworUmV0dXJuIHRoZSB2YWx1ZSBvZiBzYW1wbGUgaW5kZXggZnJvbSB0aGUgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2dldHNhbXBsZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgUHlfc3NpemVfdCBpbmRleCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mNDQ4MjQ5N2U2ZjZlNzhmIGlucHV0PTg4ZWRiZTI4NzEzOTM1NDldKi8KK3sKKyAgICBpbnQgdmFsOworCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIGkgPCAwIHx8IGkgPj0gbGVuL3NpemUgKSB7CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBmcmFnbWVudC0+bGVuL3dpZHRoKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkqMik7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKjQpOworICAgIHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaW5kZXgqd2lkdGgpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodmFsKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5tYXgKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXR1cm4gdGhlIG1heGltdW0gb2YgdGhlIGFic29sdXRlIHZhbHVlIG9mIGFsbCBzYW1wbGVzIGluIGEgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX21heChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX21heF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04NTA0N2VlMTAwMWYyMzA1IGlucHV0PTMyYmVhNWVhMGFjOGMyMjNdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIHVuc2lnbmVkIGludCBhYnN2YWwsIG1heCA9IDA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6bWF4IiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgPCAwKSBhYnN2YWwgPSAoLXZhbCk7CiAgICAgICAgIGVsc2UgYWJzdmFsID0gdmFsOwogICAgICAgICBpZiAoYWJzdmFsID4gbWF4KSBtYXggPSBhYnN2YWw7CkBAIC0zODAsODIgKzQ1MSw5NiBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtYXgpOwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLm1pbm1heAorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK1JldHVybiB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgb2YgYWxsIHNhbXBsZXMgaW4gdGhlIHNvdW5kIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9taW5tYXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9taW5tYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YWU4ZjU1MTNjNjRmZDU2OSBpbnB1dD04OTg0OGU5YjkyN2EwNjk2XSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgaTsKICAgICAvKiAtMSB0cmljayBiZWxvdyBpcyBuZWVkZWQgb24gV2luZG93cyB0byBzdXBwb3J0IC0weDgwMDAwMDAwIHdpdGhvdXQKICAgICBhIHdhcm5pbmcgKi8KICAgICBpbnQgbWluID0gMHg3ZmZmZmZmZiwgbWF4ID0gLTB4N0ZGRkZGRkYtMTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOm1pbm1heCIsICZjcCwgJmxlbiwgJnNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBzaXplKSB7Ci0gICAgICAgIGlmIChzaXplID09IDEpIHZhbCA9IChpbnQpICpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikgdmFsID0gKGludCkgKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKHNpemUgPT0gNCkgdmFsID0gKGludCkgKkxPTkdQKGNwLCBpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKICAgICAgICAgaWYgKHZhbCA+IG1heCkgbWF4ID0gdmFsOwogICAgICAgICBpZiAodmFsIDwgbWluKSBtaW4gPSB2YWw7CiAgICAgfQogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgbWluLCBtYXgpOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hdmcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKLSAgICBkb3VibGUgYXZnID0gMC4wOworLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5hdmcKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTphdmciLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK1JldHVybiB0aGUgYXZlcmFnZSBvdmVyIGFsbCBzYW1wbGVzIGluIHRoZSBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYXZnX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdmY2NkNjQ1Yzk1ZjQ4NjAgaW5wdXQ9MTExNDQ5M2M3NjExMzM0ZF0qLworeworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgYXZnOworICAgIGRvdWJsZSBzdW0gPSAwLjA7CisKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoIGk9MDsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotICAgICAgICBhdmcgKz0gdmFsOwotICAgIH0KLSAgICBpZiAoIGxlbiA9PSAwICkKLSAgICAgICAgdmFsID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkKKyAgICAgICAgc3VtICs9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gPT0gMCkKKyAgICAgICAgYXZnID0gMDsKICAgICBlbHNlCi0gICAgICAgIHZhbCA9IChpbnQpZmxvb3IoYXZnIC8gKGRvdWJsZSkobGVuL3NpemUpKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHZhbCk7CisgICAgICAgIGF2ZyA9IChpbnQpZmxvb3Ioc3VtIC8gKGRvdWJsZSkoZnJhZ21lbnQtPmxlbi93aWR0aCkpOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoYXZnKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5ybXMKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXR1cm4gdGhlIHJvb3QtbWVhbi1zcXVhcmUgb2YgdGhlIGZyYWdtZW50LCBpLmUuIHNxcnQoc3VtKFNfaV4yKS9uKS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3Bfcm1zKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3Bfcm1zX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdiMzk4NzAyYzgxYjcwOWQgaW5wdXQ9NGNjNTdjNmM5NDIxOWQ3OF0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgdW5zaWduZWQgaW50IHJlczsKICAgICBkb3VibGUgc3VtX3NxdWFyZXMgPSAwLjA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6cm1zIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0gICAgICAgIHN1bV9zcXVhcmVzICs9IChkb3VibGUpdmFsKihkb3VibGUpdmFsOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICBzdW1fc3F1YXJlcyArPSB2YWwqdmFsOwogICAgIH0KLSAgICBpZiAoIGxlbiA9PSAwICkKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiA9PSAwKQogICAgICAgICByZXMgPSAwOwogICAgIGVsc2UKLSAgICAgICAgcmVzID0gKHVuc2lnbmVkIGludClzcXJ0KHN1bV9zcXVhcmVzIC8gKGRvdWJsZSkobGVuL3NpemUpKTsKKyAgICAgICAgcmVzID0gKHVuc2lnbmVkIGludClzcXJ0KHN1bV9zcXVhcmVzIC8gKGRvdWJsZSkoZnJhZ21lbnQtPmxlbi93aWR0aCkpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhyZXMpOwogfQogCi1zdGF0aWMgZG91YmxlIF9zdW0yKHNob3J0ICphLCBzaG9ydCAqYiwgUHlfc3NpemVfdCBsZW4pCitzdGF0aWMgZG91YmxlIF9zdW0yKGNvbnN0IHNob3J0ICphLCBjb25zdCBzaG9ydCAqYiwgUHlfc3NpemVfdCBsZW4pCiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGRvdWJsZSBzdW0gPSAwLjA7CkBAIC00OTgsMzIgKzU4MywzOCBAQAogKiogc3VtX3JpIGlzIGNhbGN1bGF0ZWQgb25jZSwgc3VtX2Fpal8yIGlzIHVwZGF0ZWQgZWFjaCBzdGVwIGFuZCBzdW1fYWlqX3JpCiAqKiBpcyBjb21wbGV0ZWx5IHJlY2FsY3VsYXRlZCBlYWNoIHN0ZXAuCiAqLworLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5maW5kZml0CisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgcmVmZXJlbmNlOiBQeV9idWZmZXIKKyAgICAvCisKK1RyeSB0byBtYXRjaCByZWZlcmVuY2UgYXMgd2VsbCBhcyBwb3NzaWJsZSB0byBhIHBvcnRpb24gb2YgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2ZpbmRmaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9maW5kZml0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgUHlfYnVmZmVyICpyZWZlcmVuY2UpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTA1ZmQwNGQ0MjQ0ZGIzMSBpbnB1dD02MmMzMDU2MDVlMTgzYzlhXSovCiB7Ci0gICAgc2hvcnQgKmNwMSwgKmNwMjsKKyAgICBjb25zdCBzaG9ydCAqY3AxLCAqY3AyOwogICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKICAgICBQeV9zc2l6ZV90IGosIGJlc3RfajsKICAgICBkb3VibGUgYWpfbTEsIGFqX2xtMTsKICAgICBkb3VibGUgc3VtX3JpXzIsIHN1bV9haWpfMiwgc3VtX2Fpal9yaSwgcmVzdWx0LCBiZXN0X3Jlc3VsdCwgZmFjdG9yOwogCi0gICAgLyogUGFzc2luZyBhIHNob3J0KiogZm9yIGFuICdzJyBhcmd1bWVudCBpcyBjb3JyZWN0IG9ubHkKLSAgICAgICBpZiB0aGUgc3RyaW5nIGNvbnRlbnRzIGlzIGFsaWduZWQgZm9yIGludGVycHJldGF0aW9uCi0gICAgICAgYXMgc2hvcnRbXS4gRHVlIHRvIHRoZSBkZWZpbml0aW9uIG9mIFB5Qnl0ZXNPYmplY3QsCi0gICAgICAgdGhpcyBpcyBjdXJyZW50bHkgKFB5dGhvbiAyLjYpIHRoZSBjYXNlLiAqLwotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyM6ZmluZGZpdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcioqKSZjcDEsICZsZW4xLCAoY2hhcioqKSZjcDIsICZsZW4yKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICggbGVuMSAmIDEgfHwgbGVuMiAmIDEgKSB7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gJiAxIHx8IHJlZmVyZW5jZS0+bGVuICYgMSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU3RyaW5ncyBzaG91bGQgYmUgZXZlbi1zaXplZCIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGxlbjEgPj49IDE7Ci0gICAgbGVuMiA+Pj0gMTsKKyAgICBjcDEgPSAoY29uc3Qgc2hvcnQgKilmcmFnbWVudC0+YnVmOworICAgIGxlbjEgPSBmcmFnbWVudC0+bGVuID4+IDE7CisgICAgY3AyID0gKGNvbnN0IHNob3J0ICopcmVmZXJlbmNlLT5idWY7CisgICAgbGVuMiA9IHJlZmVyZW5jZS0+bGVuID4+IDE7CiAKLSAgICBpZiAoIGxlbjEgPCBsZW4yICkgeworICAgIGlmIChsZW4xIDwgbGVuMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiRmlyc3Qgc2FtcGxlIHNob3VsZCBiZSBsb25nZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBzdW1fcmlfMiA9IF9zdW0yKGNwMiwgY3AyLCBsZW4yKTsKICAgICBzdW1fYWlqXzIgPSBfc3VtMihjcDEsIGNwMSwgbGVuMik7CkBAIC01NjAsMjcgKzY1MSwzNyBAQAogKiogZmluZGZhY3RvciBmaW5kcyBhIGZhY3RvciBmIHNvIHRoYXQgdGhlIGVuZXJneSBpbiBBLWZCIGlzIG1pbmltYWwuCiAqKiBTZWUgdGhlIGNvbW1lbnQgZm9yIGZpbmRmaXQgZm9yIGRldGFpbHMuCiAqLworLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5maW5kZmFjdG9yCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgcmVmZXJlbmNlOiBQeV9idWZmZXIKKyAgICAvCisKK1JldHVybiBhIGZhY3RvciBGIHN1Y2ggdGhhdCBybXMoYWRkKGZyYWdtZW50LCBtdWwocmVmZXJlbmNlLCAtRikpKSBpcyBtaW5pbWFsLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9maW5kZmFjdG9yKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfZmluZGZhY3Rvcl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIFB5X2J1ZmZlciAqcmVmZXJlbmNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRkZjM1YTFlNTc1NzVjZTQgaW5wdXQ9ODE2NjgwMzAxZDAxMmIyMV0qLwogewotICAgIHNob3J0ICpjcDEsICpjcDI7Ci0gICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yOworICAgIGNvbnN0IHNob3J0ICpjcDEsICpjcDI7CisgICAgUHlfc3NpemVfdCBsZW47CiAgICAgZG91YmxlIHN1bV9yaV8yLCBzdW1fYWlqX3JpLCByZXN1bHQ7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3MjOmZpbmRmYWN0b3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKikmY3AxLCAmbGVuMSwgKGNoYXIqKikmY3AyLCAmbGVuMikgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIGxlbjEgJiAxIHx8IGxlbjIgJiAxICkgeworICAgIGlmIChmcmFnbWVudC0+bGVuICYgMSB8fCByZWZlcmVuY2UtPmxlbiAmIDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlN0cmluZ3Mgc2hvdWxkIGJlIGV2ZW4tc2l6ZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoIGxlbjEgIT0gbGVuMiApIHsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiAhPSByZWZlcmVuY2UtPmxlbikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU2FtcGxlcyBzaG91bGQgYmUgc2FtZSBzaXplIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbGVuMiA+Pj0gMTsKLSAgICBzdW1fcmlfMiA9IF9zdW0yKGNwMiwgY3AyLCBsZW4yKTsKLSAgICBzdW1fYWlqX3JpID0gX3N1bTIoY3AxLCBjcDIsIGxlbjIpOworICAgIGNwMSA9IChjb25zdCBzaG9ydCAqKWZyYWdtZW50LT5idWY7CisgICAgY3AyID0gKGNvbnN0IHNob3J0ICopcmVmZXJlbmNlLT5idWY7CisgICAgbGVuID0gZnJhZ21lbnQtPmxlbiA+PiAxOworICAgIHN1bV9yaV8yID0gX3N1bTIoY3AyLCBjcDIsIGxlbik7CisgICAgc3VtX2Fpal9yaSA9IF9zdW0yKGNwMSwgY3AyLCBsZW4pOwogCiAgICAgcmVzdWx0ID0gc3VtX2Fpal9yaSAvIHN1bV9yaV8yOwogCkBAIC01OTEsMzcgKzY5Miw0NiBAQAogKiogZmluZG1heCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbi1zaXplZCBzZWdtZW50IG9mIHRoZSBpbnB1dCBzYW1wbGUKICoqIHRoYXQgY29udGFpbnMgdGhlIG1vc3QgZW5lcmd5LgogKi8KKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuZmluZG1heAorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIGxlbmd0aDogUHlfc3NpemVfdAorICAgIC8KKworU2VhcmNoIGZyYWdtZW50IGZvciBhIHNsaWNlIG9mIHNwZWNpZmllZCBudW1iZXIgb2Ygc2FtcGxlcyB3aXRoIG1heGltdW0gZW5lcmd5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9maW5kbWF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfZmluZG1heF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIFB5X3NzaXplX3QgbGVuZ3RoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTIxZDBjMmExZTU2NTUxMzQgaW5wdXQ9MmYzMDQ4MDFlZDQyMzgzY10qLwogewotICAgIHNob3J0ICpjcDE7Ci0gICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yOworICAgIGNvbnN0IHNob3J0ICpjcDE7CisgICAgUHlfc3NpemVfdCBsZW4xOwogICAgIFB5X3NzaXplX3QgaiwgYmVzdF9qOwogICAgIGRvdWJsZSBhal9tMSwgYWpfbG0xOwogICAgIGRvdWJsZSByZXN1bHQsIGJlc3RfcmVzdWx0OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNuOmZpbmRtYXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKikmY3AxLCAmbGVuMSwgJmxlbjIpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCBsZW4xICYgMSApIHsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiAmIDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlN0cmluZ3Mgc2hvdWxkIGJlIGV2ZW4tc2l6ZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBsZW4xID4+PSAxOworICAgIGNwMSA9IChjb25zdCBzaG9ydCAqKWZyYWdtZW50LT5idWY7CisgICAgbGVuMSA9IGZyYWdtZW50LT5sZW4gPj4gMTsKIAotICAgIGlmICggbGVuMiA8IDAgfHwgbGVuMSA8IGxlbjIgKSB7CisgICAgaWYgKGxlbmd0aCA8IDAgfHwgbGVuMSA8IGxlbmd0aCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiSW5wdXQgc2FtcGxlIHNob3VsZCBiZSBsb25nZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJlc3VsdCA9IF9zdW0yKGNwMSwgY3AxLCBsZW4yKTsKKyAgICByZXN1bHQgPSBfc3VtMihjcDEsIGNwMSwgbGVuZ3RoKTsKIAogICAgIGJlc3RfcmVzdWx0ID0gcmVzdWx0OwogICAgIGJlc3RfaiA9IDA7CiAKLSAgICBmb3IgKCBqPTE7IGo8PWxlbjEtbGVuMjsgaisrKSB7CisgICAgZm9yICggaj0xOyBqPD1sZW4xLWxlbmd0aDsgaisrKSB7CiAgICAgICAgIGFqX20xID0gKGRvdWJsZSljcDFbai0xXTsKLSAgICAgICAgYWpfbG0xID0gKGRvdWJsZSljcDFbaitsZW4yLTFdOworICAgICAgICBhal9sbTEgPSAoZG91YmxlKWNwMVtqK2xlbmd0aC0xXTsKIAogICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBhal9sbTEqYWpfbG0xIC0gYWpfbTEqYWpfbTE7CiAKQEAgLTYzNSwzMSArNzQ1LDM0IEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChiZXN0X2opOwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmF2Z3BwCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIHRoZSBhdmVyYWdlIHBlYWstcGVhayB2YWx1ZSBvdmVyIGFsbCBzYW1wbGVzIGluIHRoZSBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYXZncHAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9hdmdwcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wNmM4MzgwZmQ2ZTM0MjA3IGlucHV0PTBiM2NjZWVhZTQyMGE3ZDldKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDAsIHByZXZ2YWwgPSAwLCBwcmV2ZXh0cmVtZXZhbGlkID0gMCwKLSAgICAgICAgcHJldmV4dHJlbWUgPSAwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgcHJldnZhbCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsIHByZXZleHRyZW1lID0gMDsKICAgICBkb3VibGUgc3VtID0gMC4wOwogICAgIHVuc2lnbmVkIGludCBhdmc7CiAgICAgaW50IGRpZmYsIHByZXZkaWZmLCBuZXh0cmVtZSA9IDA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6YXZncHAiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobGVuIDw9IHNpemUpCisgICAgaWYgKGZyYWdtZW50LT5sZW4gPD0gd2lkdGgpCiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7Ci0gICAgaWYgKCBzaXplID09IDEgKSAgICAgIHByZXZ2YWwgPSAoaW50KSpDSEFSUChjcCwgMCk7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHByZXZ2YWwgPSAoaW50KSpTSE9SVFAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSBwcmV2dmFsID0gKGludCkqTE9OR1AoY3AsIDApOworICAgIHByZXZ2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIDApOwogICAgIHByZXZkaWZmID0gMTc7IC8qIEFueXRoaW5nICE9IDAsIDEgKi8KLSAgICBmb3IgKCBpPXNpemU7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKKyAgICBmb3IgKGkgPSB3aWR0aDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgIT0gcHJldnZhbCkgewogICAgICAgICAgICAgZGlmZiA9IHZhbCA8IHByZXZ2YWw7CiAgICAgICAgICAgICBpZiAocHJldmRpZmYgPT0gIWRpZmYpIHsKQEAgLTY2Nyw3ICs3ODAsMTIgQEAKICAgICAgICAgICAgICAgICAqKiBleHRyZW1lIHZhbHVlIGFuZCByZW1lbWJlci4KICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGlmIChwcmV2ZXh0cmVtZXZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bSArPSBmYWJzKChkb3VibGUpcHJldnZhbCAtIChkb3VibGUpcHJldmV4dHJlbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJldnZhbCA8IHByZXZleHRyZW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgc3VtICs9IChkb3VibGUpKCh1bnNpZ25lZCBpbnQpcHJldmV4dHJlbWUgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpcHJldnZhbCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArPSAoZG91YmxlKSgodW5zaWduZWQgaW50KXByZXZ2YWwgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpcHJldmV4dHJlbWUpOwogICAgICAgICAgICAgICAgICAgICBuZXh0cmVtZSsrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwcmV2ZXh0cmVtZXZhbGlkID0gMTsKQEAgLTY4NCwzMCArODAyLDMzIEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGF2Zyk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubWF4cHAKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXR1cm4gdGhlIG1heGltdW0gcGVhay1wZWFrIHZhbHVlIGluIHRoZSBzb3VuZCBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbWF4cHAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9tYXhwcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jMzAwYzBiZDdlODUzNWMwIGlucHV0PTY3MWExM2UxNTE4ZjgwYTFdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDAsIHByZXZ2YWwgPSAwLCBwcmV2ZXh0cmVtZXZhbGlkID0gMCwKLSAgICAgICAgcHJldmV4dHJlbWUgPSAwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgcHJldnZhbCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsIHByZXZleHRyZW1lID0gMDsKICAgICB1bnNpZ25lZCBpbnQgbWF4ID0gMCwgZXh0cmVtZWRpZmY7CiAgICAgaW50IGRpZmYsIHByZXZkaWZmOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOm1heHBwIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGxlbiA8PSBzaXplKQorICAgIGlmIChmcmFnbWVudC0+bGVuIDw9IHdpZHRoKQogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwotICAgIGlmICggc2l6ZSA9PSAxICkgICAgICBwcmV2dmFsID0gKGludCkqQ0hBUlAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSBwcmV2dmFsID0gKGludCkqU0hPUlRQKGNwLCAwKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgcHJldnZhbCA9IChpbnQpKkxPTkdQKGNwLCAwKTsKKyAgICBwcmV2dmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCAwKTsKICAgICBwcmV2ZGlmZiA9IDE3OyAvKiBBbnl0aGluZyAhPSAwLCAxICovCi0gICAgZm9yICggaT1zaXplOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gd2lkdGg7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOwogICAgICAgICBpZiAodmFsICE9IHByZXZ2YWwpIHsKICAgICAgICAgICAgIGRpZmYgPSB2YWwgPCBwcmV2dmFsOwogICAgICAgICAgICAgaWYgKHByZXZkaWZmID09ICFkaWZmKSB7CkBAIC03MzQsMjA5ICs4NTUsMjEyIEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKG1heCk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuY3Jvc3MKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXR1cm4gdGhlIG51bWJlciBvZiB6ZXJvIGNyb3NzaW5ncyBpbiB0aGUgZnJhZ21lbnQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9jcm9zcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2Nyb3NzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTk5ZTY1NzJkN2Q3Y2RiZjEgaW5wdXQ9YjFiM2YxNWI4M2Y2YjQxYV0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IHByZXZ2YWw7CiAgICAgUHlfc3NpemVfdCBuY3Jvc3M7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6Y3Jvc3MiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3Jvc3MgPSAtMTsKICAgICBwcmV2dmFsID0gMTc7IC8qIEFueXRoaW5nIDw+IDAsMSAqLwotICAgIGZvciAoIGk9MDsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA+PiA3OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKChpbnQpKlNIT1JUUChjcCwgaSkpID4+IDE1OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKChpbnQpKkxPTkdQKGNwLCBpKSkgPj4gMzE7Ci0gICAgICAgIHZhbCA9IHZhbCAmIDE7Ci0gICAgICAgIGlmICggdmFsICE9IHByZXZ2YWwgKSBuY3Jvc3MrKzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKSA8IDA7CisgICAgICAgIGlmICh2YWwgIT0gcHJldnZhbCkgbmNyb3NzKys7CiAgICAgICAgIHByZXZ2YWwgPSB2YWw7CiAgICAgfQogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QobmNyb3NzKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5tdWwKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgZmFjdG9yOiBkb3VibGUKKyAgICAvCisKK1JldHVybiBhIGZyYWdtZW50IHRoYXQgaGFzIGFsbCBzYW1wbGVzIGluIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBtdWx0aXBsaWVkIGJ5IHRoZSBmbG9hdGluZy1wb2ludCB2YWx1ZSBmYWN0b3IuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX211bChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX211bF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgZG91YmxlIGZhY3RvcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hNjk3ZWJiZDU4NTJkMzhmIGlucHV0PWM3MjY2NjdiYWExNTdkM2NdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3AsICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7Ci0gICAgZG91YmxlIGZhY3RvciwgZnZhbCwgbWF4dmFsLCBtaW52YWw7CisgICAgc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgZG91YmxlIG1heHZhbCwgbWludmFsOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWQ6bXVsIiwgJmNwLCAmbGVuLCAmc2l6ZSwgJmZhY3RvciApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbWF4dmFsID0gKGRvdWJsZSkgbWF4dmFsc1tzaXplXTsKLSAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3NpemVdOworICAgIG1heHZhbCA9IChkb3VibGUpIG1heHZhbHNbd2lkdGhdOworICAgIG1pbnZhbCA9IChkb3VibGUpIG1pbnZhbHNbd2lkdGhdOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbik7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50LT5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotICAgICAgICBmdmFsID0gKGRvdWJsZSl2YWwqZmFjdG9yOwotICAgICAgICB2YWwgPSAoaW50KWZsb29yKGZib3VuZChmdmFsLCBtaW52YWwsIG1heHZhbCkpOwotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpdmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKXZhbDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBkb3VibGUgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgdmFsICo9IGZhY3RvcjsKKyAgICAgICAgdmFsID0gZmxvb3IoZmJvdW5kKHZhbCwgbWludmFsLCBtYXh2YWwpKTsKKyAgICAgICAgU0VUUkFXU0FNUExFKHdpZHRoLCBuY3AsIGksIChpbnQpdmFsKTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLnRvbW9ubworCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBsZmFjdG9yOiBkb3VibGUKKyAgICByZmFjdG9yOiBkb3VibGUKKyAgICAvCisKK0NvbnZlcnQgYSBzdGVyZW8gZnJhZ21lbnQgdG8gYSBtb25vIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF90b21vbm8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF90b21vbm9faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGRvdWJsZSBsZmFjdG9yLCBkb3VibGUgcmZhY3RvcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00MzZlNzcxMDUyMTY2MWRkIGlucHV0PWM0ZWM5NDliM2Y0ZGRkZmFdKi8KIHsKLSAgICBQeV9idWZmZXIgcGNwOwogICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKICAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsMSA9IDAsIHZhbDIgPSAwOwotICAgIGRvdWJsZSBmYWMxLCBmYWMyLCBmdmFsLCBtYXh2YWwsIG1pbnZhbDsKKyAgICBkb3VibGUgbWF4dmFsLCBtaW52YWw7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyppZGQ6dG9tb25vIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZwY3AsICZzaXplLCAmZmFjMSwgJmZhYzIgKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGNwID0gcGNwLmJ1ZjsKLSAgICBsZW4gPSBwY3AubGVuOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGNwKTsKKyAgICBjcCA9IGZyYWdtZW50LT5idWY7CisgICAgbGVuID0gZnJhZ21lbnQtPmxlbjsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmICgoKGxlbiAvIHNpemUpICYgMSkgIT0gMCkgeworICAgIGlmICgoKGxlbiAvIHdpZHRoKSAmIDEpICE9IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIm5vdCBhIHdob2xlIG51bWJlciBvZiBmcmFtZXMiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGNwKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgbWF4dmFsID0gKGRvdWJsZSkgbWF4dmFsc1tzaXplXTsKLSAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3NpemVdOworICAgIG1heHZhbCA9IChkb3VibGUpIG1heHZhbHNbd2lkdGhdOworICAgIG1pbnZhbCA9IChkb3VibGUpIG1pbnZhbHNbd2lkdGhdOwogCiAgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi8yKTsKLSAgICBpZiAoIHJ2ID09IDAgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLQotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplKjIgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwxID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsMSA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwxID0gKGludCkqTE9OR1AoY3AsIGkpOwotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsMiA9IChpbnQpKkNIQVJQKGNwLCBpKzEpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsMiA9IChpbnQpKlNIT1JUUChjcCwgaSsyKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbDIgPSAoaW50KSpMT05HUChjcCwgaSs0KTsKLSAgICAgICAgZnZhbCA9IChkb3VibGUpdmFsMSpmYWMxICsgKGRvdWJsZSl2YWwyKmZhYzI7Ci0gICAgICAgIHZhbDEgPSAoaW50KWZsb29yKGZib3VuZChmdmFsLCBtaW52YWwsIG1heHZhbCkpOwotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaS8yKSA9IChzaWduZWQgY2hhcil2YWwxOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkvMikgPSAoc2hvcnQpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkvMik9IChQeV9JbnQzMil2YWwxOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gd2lkdGgqMikgeworICAgICAgICBkb3VibGUgdmFsMSA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgY3AsIGkpOworICAgICAgICBkb3VibGUgdmFsMiA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgY3AsIGkgKyB3aWR0aCk7CisgICAgICAgIGRvdWJsZSB2YWwgPSB2YWwxKmxmYWN0b3IgKyB2YWwyKnJmYWN0b3I7CisgICAgICAgIHZhbCA9IGZsb29yKGZib3VuZCh2YWwsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIFNFVFJBV1NBTVBMRSh3aWR0aCwgbmNwLCBpLzIsIHZhbCk7CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLnRvc3RlcmVvCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIGxmYWN0b3I6IGRvdWJsZQorICAgIHJmYWN0b3I6IGRvdWJsZQorICAgIC8KKworR2VuZXJhdGUgYSBzdGVyZW8gZnJhZ21lbnQgZnJvbSBhIG1vbm8gZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3Rvc3RlcmVvKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfdG9zdGVyZW9faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGRvdWJsZSBsZmFjdG9yLCBkb3VibGUgcmZhY3RvcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02ZmY1MDY4MWM4N2Y0YzFjIGlucHV0PTI3YjYzOTVlYmZkZmYzN2FdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3AsICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbDEsIHZhbDIsIHZhbCA9IDA7Ci0gICAgZG91YmxlIGZhYzEsIGZhYzIsIGZ2YWwsIG1heHZhbCwgbWludmFsOworICAgIHNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOworICAgIGRvdWJsZSBtYXh2YWwsIG1pbnZhbDsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lkZDp0b3N0ZXJlbyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplLCAmZmFjMSwgJmZhYzIgKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG1heHZhbCA9IChkb3VibGUpIG1heHZhbHNbc2l6ZV07Ci0gICAgbWludmFsID0gKGRvdWJsZSkgbWludmFsc1tzaXplXTsKKyAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3dpZHRoXTsKKyAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3dpZHRoXTsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWC8yKSB7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gPiBQWV9TU0laRV9UX01BWC8yKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbioyKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbioyKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLQotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLQotICAgICAgICBmdmFsID0gKGRvdWJsZSl2YWwqZmFjMTsKLSAgICAgICAgdmFsMSA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7Ci0KLSAgICAgICAgZnZhbCA9IChkb3VibGUpdmFsKmZhYzI7Ci0gICAgICAgIHZhbDIgPSAoaW50KWZsb29yKGZib3VuZChmdmFsLCBtaW52YWwsIG1heHZhbCkpOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKjIpID0gKHNpZ25lZCBjaGFyKXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSoyKSA9IChzaG9ydCl2YWwxOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSoyKSA9IChQeV9JbnQzMil2YWwxOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKjIrMSkgPSAoc2lnbmVkIGNoYXIpdmFsMjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKjIrMikgPSAoc2hvcnQpdmFsMjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkqMis0KSA9IChQeV9JbnQzMil2YWwyOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICBpbnQgdmFsMSA9IChpbnQpZmxvb3IoZmJvdW5kKHZhbCpsZmFjdG9yLCBtaW52YWwsIG1heHZhbCkpOworICAgICAgICBpbnQgdmFsMiA9IChpbnQpZmxvb3IoZmJvdW5kKHZhbCpyZmFjdG9yLCBtaW52YWwsIG1heHZhbCkpOworICAgICAgICBTRVRSQVdTQU1QTEUod2lkdGgsIG5jcCwgaSoyLCB2YWwxKTsKKyAgICAgICAgU0VUUkFXU0FNUExFKHdpZHRoLCBuY3AsIGkqMiArIHdpZHRoLCB2YWwyKTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmFkZAorCisgICAgZnJhZ21lbnQxOiBQeV9idWZmZXIKKyAgICBmcmFnbWVudDI6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK1JldHVybiBhIGZyYWdtZW50IHdoaWNoIGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgdHdvIHNhbXBsZXMgcGFzc2VkIGFzIHBhcmFtZXRlcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2FkZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2FkZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQxLCBQeV9idWZmZXIgKmZyYWdtZW50MiwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWY5MjE4YmY5ZWE3NWMzZjEgaW5wdXQ9NGE4ZDRiYWU0YzE2MDVjN10qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDEsICpjcDIsICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yLCBpOwotICAgIGludCBzaXplLCB2YWwxID0gMCwgdmFsMiA9IDAsIG1pbnZhbCwgbWF4dmFsLCBuZXd2YWw7CisgICAgc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IG1pbnZhbCwgbWF4dmFsLCBuZXd2YWw7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNzI2k6YWRkIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3AxLCAmbGVuMSwgJmNwMiwgJmxlbjIsICZzaXplICkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4xLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudDEtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIGxlbjEgIT0gbGVuMiApIHsKKyAgICBpZiAoZnJhZ21lbnQxLT5sZW4gIT0gZnJhZ21lbnQyLT5sZW4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIkxlbmd0aHMgc2hvdWxkIGJlIHRoZSBzYW1lIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBtYXh2YWwgPSBtYXh2YWxzW3NpemVdOwotICAgIG1pbnZhbCA9IG1pbnZhbHNbc2l6ZV07CisgICAgbWF4dmFsID0gbWF4dmFsc1t3aWR0aF07CisgICAgbWludmFsID0gbWludmFsc1t3aWR0aF07CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuMSk7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50MS0+bGVuKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW4xOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwxID0gKGludCkqQ0hBUlAoY3AxLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDEgPSAoaW50KSpTSE9SVFAoY3AxLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbDEgPSAoaW50KSpMT05HUChjcDEsIGkpOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudDEtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsMSA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQxLT5idWYsIGkpOworICAgICAgICBpbnQgdmFsMiA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQyLT5idWYsIGkpOwogCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwyID0gKGludCkqQ0hBUlAoY3AyLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDIgPSAoaW50KSpTSE9SVFAoY3AyLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbDIgPSAoaW50KSpMT05HUChjcDIsIGkpOwotCi0gICAgICAgIGlmIChzaXplIDwgNCkgeworICAgICAgICBpZiAod2lkdGggPCA0KSB7CiAgICAgICAgICAgICBuZXd2YWwgPSB2YWwxICsgdmFsMjsKICAgICAgICAgICAgIC8qIHRydW5jYXRlIGluIGNhc2Ugb2Ygb3ZlcmZsb3cgKi8KICAgICAgICAgICAgIGlmIChuZXd2YWwgPiBtYXh2YWwpCkBAIC05NTAsMTIzICsxMDc0LDE3NSBAQAogICAgICAgICAgICAgbmV3dmFsID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhciluZXd2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpbmV3dmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpbmV3dmFsOworICAgICAgICBTRVRSQVdTQU1QTEUod2lkdGgsIG5jcCwgaSwgbmV3dmFsKTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmJpYXMKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgYmlhczogaW50CisgICAgLworCitSZXR1cm4gYSBmcmFnbWVudCB0aGF0IGlzIHRoZSBvcmlnaW5hbCBmcmFnbWVudCB3aXRoIGEgYmlhcyBhZGRlZCB0byBlYWNoIHNhbXBsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYmlhcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2JpYXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGludCBiaWFzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PThlYzgwYjNmNWQ1MTBhNTEgaW5wdXQ9MmI1Y2NlNWMzYmI0ODM4Y10qLwogewotICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgYmlhczsKKyAgICBzaWduZWQgY2hhciAqbmNwOworICAgIFB5X3NzaXplX3QgaTsKICAgICB1bnNpZ25lZCBpbnQgdmFsID0gMCwgbWFzazsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lpOmJpYXMiLAotICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUgLCAmYmlhcykgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4pOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBtYXNrID0gbWFza3Nbc2l6ZV07CisgICAgbWFzayA9IG1hc2tzW3dpZHRoXTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKHVuc2lnbmVkIGludCkodW5zaWduZWQgY2hhcikqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKHVuc2lnbmVkIGludCkodW5zaWduZWQgc2hvcnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAodW5zaWduZWQgaW50KShQeV9VSW50MzIpKkxPTkdQKGNwLCBpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpZiAod2lkdGggPT0gMSkKKyAgICAgICAgICAgIHZhbCA9IEdFVElOVFgodW5zaWduZWQgY2hhciwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIGVsc2UgaWYgKHdpZHRoID09IDIpCisgICAgICAgICAgICB2YWwgPSBHRVRJTlRYKHVuc2lnbmVkIHNob3J0LCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgZWxzZSBpZiAod2lkdGggPT0gMykKKyAgICAgICAgICAgIHZhbCA9ICgodW5zaWduZWQgaW50KUdFVElOVDI0KGZyYWdtZW50LT5idWYsIGkpKSAmIDB4ZmZmZmZmdTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQod2lkdGggPT0gNCk7CisgICAgICAgICAgICB2YWwgPSBHRVRJTlRYKFBZX1VJTlQzMl9ULCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgfQogCiAgICAgICAgIHZhbCArPSAodW5zaWduZWQgaW50KWJpYXM7CiAgICAgICAgIC8qIHdyYXAgYXJvdW5kIGluIGNhc2Ugb2Ygb3ZlcmZsb3cgKi8KICAgICAgICAgdmFsICY9IG1hc2s7CiAKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKSh1bnNpZ25lZCBjaGFyKXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCkodW5zaWduZWQgc2hvcnQpdmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpKFB5X1VJbnQzMil2YWw7CisgICAgICAgIGlmICh3aWR0aCA9PSAxKQorICAgICAgICAgICAgU0VUSU5UWCh1bnNpZ25lZCBjaGFyLCBuY3AsIGksIHZhbCk7CisgICAgICAgIGVsc2UgaWYgKHdpZHRoID09IDIpCisgICAgICAgICAgICBTRVRJTlRYKHVuc2lnbmVkIHNob3J0LCBuY3AsIGksIHZhbCk7CisgICAgICAgIGVsc2UgaWYgKHdpZHRoID09IDMpCisgICAgICAgICAgICBTRVRJTlQyNChuY3AsIGksIChpbnQpdmFsKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQod2lkdGggPT0gNCk7CisgICAgICAgICAgICBTRVRJTlRYKFBZX1VJTlQzMl9ULCBuY3AsIGksIHZhbCk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLnJldmVyc2UKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXZlcnNlIHRoZSBzYW1wbGVzIGluIGEgZnJhZ21lbnQgYW5kIHJldHVybnMgdGhlIG1vZGlmaWVkIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9yZXZlcnNlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfcmV2ZXJzZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02ZWMzYzkxMzM3ZjU5MjVlIGlucHV0PTY2OGY4OTBjZjlmOWQyMjVdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6cmV2ZXJzZSIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4pOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPDwgMjQ7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoKGludCkqU0hPUlRQKGNwLCBpKSkgPDwgMTY7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0KLSAgICAgICAgaiA9IGxlbiAtIGkgLSBzaXplOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBqKSA9IChzaWduZWQgY2hhcikodmFsID4+IDI0KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBqKSA9IChzaG9ydCkodmFsID4+IDE2KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGopID0gKFB5X0ludDMyKXZhbDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgU0VUUkFXU0FNUExFKHdpZHRoLCBuY3AsIGZyYWdtZW50LT5sZW4gLSBpIC0gd2lkdGgsIHZhbCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5ieXRlc3dhcAorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK0NvbnZlcnQgYmlnLWVuZGlhbiBzYW1wbGVzIHRvIGxpdHRsZS1lbmRpYW4gYW5kIHZpY2UgdmVyc2EuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2xpbjJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9ieXRlc3dhcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iZmU0YWE1ODRiN2EzZjViIGlucHV0PWZhZTc2MTFjZWZmYTVjODJdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOwotICAgIGludCBzaXplLCBzaXplMiwgdmFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpaTpsaW4ybGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplLCAmc2l6ZTIpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplMikpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChsZW4vc2l6ZSA+IFBZX1NTSVpFX1RfTUFYL3NpemUyKSB7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50LT5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBuY3AgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOworCisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IGo7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKQorICAgICAgICAgICAgbmNwW2kgKyB3aWR0aCAtIDEgLSBqXSA9ICgodW5zaWduZWQgY2hhciAqKWZyYWdtZW50LT5idWYpW2kgKyBqXTsKKyAgICB9CisgICAgcmV0dXJuIHJ2OworfQorCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmxpbjJsaW4KKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgbmV3d2lkdGg6IGludAorICAgIC8KKworQ29udmVydCBzYW1wbGVzIGJldHdlZW4gMS0sIDItLCAzLSBhbmQgNC1ieXRlIGZvcm1hdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2xpbjJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGludCBuZXd3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zZjk0NjhhNzQ0NzJhOTNlIGlucHV0PTVjZTA4YzhhYTJmMjRkOTZdKi8KK3sKKyAgICB1bnNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpLCBqOworICAgIFB5T2JqZWN0ICpydjsKKworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUobmV3d2lkdGgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChmcmFnbWVudC0+bGVuL3dpZHRoID4gUFlfU1NJWkVfVF9NQVgvbmV3d2lkdGgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBvdXRwdXQgYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIChsZW4vc2l6ZSkqc2l6ZTIpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAoZnJhZ21lbnQtPmxlbi93aWR0aCkqbmV3d2lkdGgpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wLCBqPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSwgaiArPSBzaXplMiApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDI0OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKChpbnQpKlNIT1JUUChjcCwgaSkpIDw8IDE2OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotCi0gICAgICAgIGlmICggc2l6ZTIgPT0gMSApICAqQ0hBUlAobmNwLCBqKSA9IChzaWduZWQgY2hhcikodmFsID4+IDI0KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUyID09IDIgKSAqU0hPUlRQKG5jcCwgaikgPSAoc2hvcnQpKHZhbCA+PiAxNik7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplMiA9PSA0ICkgKkxPTkdQKG5jcCwgaikgPSAoUHlfSW50MzIpdmFsOworICAgIGZvciAoaSA9IGogPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCwgaiArPSBuZXd3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUU0FNUExFMzIod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICBTRVRTQU1QTEUzMihuZXd3aWR0aCwgbmNwLCBqLCB2YWwpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CkBAIC0xMDgyLDI5ICsxMjU4LDM5IEBACiAgICAgcmV0dXJuIGE7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AucmF0ZWN2CisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIG5jaGFubmVsczogaW50CisgICAgaW5yYXRlOiBpbnQKKyAgICBvdXRyYXRlOiBpbnQKKyAgICBzdGF0ZTogb2JqZWN0CisgICAgd2VpZ2h0QTogaW50ID0gMQorICAgIHdlaWdodEI6IGludCA9IDAKKyAgICAvCisKK0NvbnZlcnQgdGhlIGZyYW1lIHJhdGUgb2YgdGhlIGlucHV0IGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9yYXRlY3YoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9yYXRlY3ZfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGludCBuY2hhbm5lbHMsIGludCBpbnJhdGUsIGludCBvdXRyYXRlLCBQeU9iamVjdCAqc3RhdGUsIGludCB3ZWlnaHRBLCBpbnQgd2VpZ2h0QikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NTg1ZGRkYzRiNWZmMjM2IGlucHV0PWFmZjNhY2RjOTQ0NzYxOTFdKi8KIHsKICAgICBjaGFyICpjcCwgKm5jcDsKICAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICBpbnQgc2l6ZSwgbmNoYW5uZWxzLCBpbnJhdGUsIG91dHJhdGUsIHdlaWdodEEsIHdlaWdodEI7CiAgICAgaW50IGNoYW4sIGQsICpwcmV2X2ksICpjdXJfaSwgY3VyX287Ci0gICAgUHlPYmplY3QgKnN0YXRlLCAqc2FtcHMsICpzdHIsICpydiA9IE5VTEw7CisgICAgUHlPYmplY3QgKnNhbXBzLCAqc3RyLCAqcnYgPSBOVUxMOwogICAgIGludCBieXRlc19wZXJfZnJhbWU7CiAKLSAgICB3ZWlnaHRBID0gMTsKLSAgICB3ZWlnaHRCID0gMDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWlpaU98aWk6cmF0ZWN2IiwgJmNwLCAmbGVuLCAmc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm5jaGFubmVscywgJmlucmF0ZSwgJm91dHJhdGUsICZzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJndlaWdodEEsICZ3ZWlnaHRCKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUoc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUod2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAobmNoYW5uZWxzIDwgMSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiIyBvZiBjaGFubmVscyBzaG91bGQgYmUgPj0gMSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKHNpemUgPiBJTlRfTUFYIC8gbmNoYW5uZWxzKSB7CisgICAgaWYgKHdpZHRoID4gSU5UX01BWCAvIG5jaGFubmVscykgewogICAgICAgICAvKiBUaGlzIG92ZXJmbG93IHRlc3QgaXMgcmlnb3JvdXNseSBjb3JyZWN0IGJlY2F1c2UKICAgICAgICAgICAgYm90aCBtdWx0aXBsaWNhbmRzIGFyZSA+PSAxLiAgVXNlIHRoZSBhcmd1bWVudCBuYW1lcwogICAgICAgICAgICBmcm9tIHRoZSBkb2NzIGZvciB0aGUgZXJyb3IgbXNnLiAqLwpAQCAtMTExMiwxMyArMTI5OCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoICogbmNoYW5uZWxzIHRvbyBiaWcgZm9yIGEgQyBpbnQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGJ5dGVzX3Blcl9mcmFtZSA9IHNpemUgKiBuY2hhbm5lbHM7CisgICAgYnl0ZXNfcGVyX2ZyYW1lID0gd2lkdGggKiBuY2hhbm5lbHM7CiAgICAgaWYgKHdlaWdodEEgPCAxIHx8IHdlaWdodEIgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsCiAgICAgICAgICAgICAid2VpZ2h0QSBzaG91bGQgYmUgPj0gMSwgd2VpZ2h0QiBzaG91bGQgYmUgPj0gMCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKGxlbiAlIGJ5dGVzX3Blcl9mcmFtZSAhPSAwKSB7CisgICAgYXNzZXJ0KGZyYWdtZW50LT5sZW4gPj0gMCk7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gJSBieXRlc19wZXJfZnJhbWUgIT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAibm90IGEgd2hvbGUgbnVtYmVyIG9mIGZyYW1lcyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMTM4LDE2ICsxMzI1LDE2IEBACiAgICAgaWYgKChzaXplX3QpbmNoYW5uZWxzID4gUFlfU0laRV9NQVgvc2l6ZW9mKGludCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBvdXRwdXQgYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcHJldl9pID0gKGludCAqKSBtYWxsb2MobmNoYW5uZWxzICogc2l6ZW9mKGludCkpOwotICAgIGN1cl9pID0gKGludCAqKSBtYWxsb2MobmNoYW5uZWxzICogc2l6ZW9mKGludCkpOworICAgIHByZXZfaSA9IChpbnQgKikgUHlNZW1fTWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKKyAgICBjdXJfaSA9IChpbnQgKikgUHlNZW1fTWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKICAgICBpZiAocHJldl9pID09IE5VTEwgfHwgY3VyX2kgPT0gTlVMTCkgewogICAgICAgICAodm9pZCkgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAotICAgIGxlbiAvPSBieXRlc19wZXJfZnJhbWU7IC8qICMgb2YgZnJhbWVzICovCisgICAgbGVuID0gZnJhZ21lbnQtPmxlbiAvIGJ5dGVzX3Blcl9mcmFtZTsgLyogIyBvZiBmcmFtZXMgKi8KIAogICAgIGlmIChzdGF0ZSA9PSBQeV9Ob25lKSB7CiAgICAgICAgIGQgPSAtb3V0cmF0ZTsKQEAgLTExODQsNyArMTM3MSw3IEBACiAgICAgICAgICAgIGNhc2UgY2VpbGluZyhsZW4vaW5yYXRlKSAqIG91dHJhdGUuICovCiAKICAgICAgICAgLyogY29tcHV0ZSBjZWlsaW5nKGxlbi9pbnJhdGUpIHdpdGhvdXQgb3ZlcmZsb3cgKi8KLSAgICAgICAgUHlfc3NpemVfdCBxID0gbGVuID4gMCA/IDEgKyAobGVuIC0gMSkgLyBpbnJhdGUgOiAwOworICAgICAgICBQeV9zc2l6ZV90IHEgPSAxICsgKGxlbiAtIDEpIC8gaW5yYXRlOwogICAgICAgICBpZiAob3V0cmF0ZSA+IFBZX1NTSVpFX1RfTUFYIC8gcSAvIGJ5dGVzX3Blcl9mcmFtZSkKICAgICAgICAgICAgIHN0ciA9IE5VTEw7CiAgICAgICAgIGVsc2UKQEAgLTExOTcsNiArMTM4NCw3IEBACiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgbmNwID0gUHlCeXRlc19Bc1N0cmluZyhzdHIpOworICAgIGNwID0gZnJhZ21lbnQtPmJ1ZjsKIAogICAgIGZvciAoOzspIHsKICAgICAgICAgd2hpbGUgKGQgPCAwKSB7CkBAIC0xMjI3LDEzICsxNDE1LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoY2hhbiA9IDA7IGNoYW4gPCBuY2hhbm5lbHM7IGNoYW4rKykgewogICAgICAgICAgICAgICAgIHByZXZfaVtjaGFuXSA9IGN1cl9pW2NoYW5dOwotICAgICAgICAgICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKChpbnQpKkNIQVJQKGNwLCAwKSkgPDwgMjQ7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQotICAgICAgICAgICAgICAgICAgICBjdXJfaVtjaGFuXSA9ICgoaW50KSpTSE9SVFAoY3AsIDApKSA8PCAxNjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDQpCi0gICAgICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKGludCkqTE9OR1AoY3AsIDApOwotICAgICAgICAgICAgICAgIGNwICs9IHNpemU7CisgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSBHRVRTQU1QTEUzMih3aWR0aCwgY3AsIDApOworICAgICAgICAgICAgICAgIGNwICs9IHdpZHRoOwogICAgICAgICAgICAgICAgIC8qIGltcGxlbWVudHMgYSBzaW1wbGUgZGlnaXRhbCBmaWx0ZXIgKi8KICAgICAgICAgICAgICAgICBjdXJfaVtjaGFuXSA9IChpbnQpKAogICAgICAgICAgICAgICAgICAgICAoKGRvdWJsZSl3ZWlnaHRBICogKGRvdWJsZSljdXJfaVtjaGFuXSArCkBAIC0xMjQ4LDE4NCArMTQzMSwxOTMgQEAKICAgICAgICAgICAgICAgICBjdXJfbyA9IChpbnQpKCgoZG91YmxlKXByZXZfaVtjaGFuXSAqIChkb3VibGUpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSljdXJfaVtjaGFuXSAqIChkb3VibGUpKG91dHJhdGUgLSBkKSkgLwogICAgICAgICAgICAgICAgICAgICAoZG91YmxlKW91dHJhdGUpOwotICAgICAgICAgICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICAgICAgICAgICpDSEFSUChuY3AsIDApID0gKHNpZ25lZCBjaGFyKShjdXJfbyA+PiAyNCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAqU0hPUlRQKG5jcCwgMCkgPSAoc2hvcnQpKGN1cl9vID4+IDE2KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDQpCi0gICAgICAgICAgICAgICAgICAgICpMT05HUChuY3AsIDApID0gKFB5X0ludDMyKShjdXJfbyk7Ci0gICAgICAgICAgICAgICAgbmNwICs9IHNpemU7CisgICAgICAgICAgICAgICAgU0VUU0FNUExFMzIod2lkdGgsIG5jcCwgMCwgY3VyX28pOworICAgICAgICAgICAgICAgIG5jcCArPSB3aWR0aDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGQgLT0gaW5yYXRlOwogICAgICAgICB9CiAgICAgfQogICBleGl0OgotICAgIGlmIChwcmV2X2kgIT0gTlVMTCkKLSAgICAgICAgZnJlZShwcmV2X2kpOwotICAgIGlmIChjdXJfaSAhPSBOVUxMKQotICAgICAgICBmcmVlKGN1cl9pKTsKKyAgICBQeU1lbV9GcmVlKHByZXZfaSk7CisgICAgUHlNZW1fRnJlZShjdXJfaSk7CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmxpbjJ1bGF3CisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworQ29udmVydCBzYW1wbGVzIGluIHRoZSBhdWRpbyBmcmFnbWVudCB0byB1LUxBVyBlbmNvZGluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbGluMnVsYXcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9saW4ydWxhd19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yNjI2M2NjODc3YzVlMWJjIGlucHV0PTI0NTBkMWI4NzBiNmJhYzJdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6bGluMnVsYXciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMCA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuL3NpemUpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuL3dpZHRoKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPDwgODsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoKGludCkqTE9OR1AoY3AsIGkpKSA+PiAxNjsKLQotICAgICAgICAqbmNwKysgPSBzdF8xNGxpbmVhcjJ1bGF3KHZhbCk7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFNBTVBMRTMyKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgKm5jcCsrID0gc3RfMTRsaW5lYXIydWxhdyh2YWwgPj4gMTgpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AudWxhdzJsaW4KKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitDb252ZXJ0IHNvdW5kIGZyYWdtZW50cyBpbiB1LUxBVyBlbmNvZGluZyB0byBsaW5lYXJseSBlbmNvZGVkIHNvdW5kIGZyYWdtZW50cy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfdWxhdzJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF91bGF3Mmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ODY0Y2IzNGUzYTFkODc2IGlucHV0PTQ1ZDUzZGRjZTViZTdkMDZdKi8KIHsKICAgICB1bnNpZ25lZCBjaGFyICpjcDsKLSAgICB1bnNpZ25lZCBjaGFyIGN2YWw7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsOworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6dWxhdzJsaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVgvc2l6ZSkgeworICAgIGlmIChmcmFnbWVudC0+bGVuID4gUFlfU1NJWkVfVF9NQVgvd2lkdGgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBvdXRwdXQgYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbipzaXplKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbip3aWR0aCk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuKnNpemU7IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgY3ZhbCA9ICpjcCsrOwotICAgICAgICB2YWwgPSBzdF91bGF3MmxpbmVhcjE2KGN2YWwpOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodmFsID4+IDgpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KSh2YWwpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpKHZhbDw8MTYpOworICAgIGNwID0gZnJhZ21lbnQtPmJ1ZjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbip3aWR0aDsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gc3RfdWxhdzJsaW5lYXIxNigqY3ArKykgPDwgMTY7CisgICAgICAgIFNFVFNBTVBMRTMyKHdpZHRoLCBuY3AsIGksIHZhbCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5saW4yYWxhdworCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK0NvbnZlcnQgc2FtcGxlcyBpbiB0aGUgYXVkaW8gZnJhZ21lbnQgdG8gYS1MQVcgZW5jb2RpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2xpbjJhbGF3KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbGluMmFsYXdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDViZjE0YmQwZmU2ZmRjZCBpbnB1dD1mZmIxZWY4YmIzOWRhOTQ1XSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmxpbjJhbGF3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuL3NpemUpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuL3dpZHRoKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPDwgODsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoKGludCkqTE9OR1AoY3AsIGkpKSA+PiAxNjsKLQotICAgICAgICAqbmNwKysgPSBzdF9saW5lYXIyYWxhdyh2YWwpOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMih3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgICpuY3ArKyA9IHN0X2xpbmVhcjJhbGF3KHZhbCA+PiAxOSk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5hbGF3MmxpbgorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK0NvbnZlcnQgc291bmQgZnJhZ21lbnRzIGluIGEtTEFXIGVuY29kaW5nIHRvIGxpbmVhcmx5IGVuY29kZWQgc291bmQgZnJhZ21lbnRzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hbGF3MmxpbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2FsYXcybGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQyYjYwNGRkZDAzNmUxY2QgaW5wdXQ9NDE0MDYyNjA0NmNkMTc3Ml0qLwogewogICAgIHVuc2lnbmVkIGNoYXIgKmNwOwotICAgIHVuc2lnbmVkIGNoYXIgY3ZhbDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWw7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCB2YWw7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmFsYXcybGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZSh3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYL3NpemUpIHsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiA+IFBZX1NTSVpFX1RfTUFYL3dpZHRoKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qc2l6ZSk7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50LT5sZW4qd2lkdGgpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKKyAgICBjcCA9IGZyYWdtZW50LT5idWY7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW4qc2l6ZTsgaSArPSBzaXplICkgewotICAgICAgICBjdmFsID0gKmNwKys7Ci0gICAgICAgIHZhbCA9IHN0X2FsYXcybGluZWFyMTYoY3ZhbCk7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gOCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHZhbCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMikodmFsPDwxNik7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW4qd2lkdGg7IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgdmFsID0gc3RfYWxhdzJsaW5lYXIxNigqY3ArKykgPDwgMTY7CisgICAgICAgIFNFVFNBTVBMRTMyKHdpZHRoLCBuY3AsIGksIHZhbCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5saW4yYWRwY20KKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgc3RhdGU6IG9iamVjdAorICAgIC8KKworQ29udmVydCBzYW1wbGVzIHRvIDQgYml0IEludGVsL0RWSSBBRFBDTSBlbmNvZGluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbGluMmFkcGNtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbGluMmFkcGNtX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBQeU9iamVjdCAqc3RhdGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDY1NGMyOWQyNzMxZmFmZSBpbnB1dD0xMjkxOWQ1NDliOTBjOTBhXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDAsIHN0ZXAsIHZhbHByZWQsIGRlbHRhLAorICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc3RlcCwgdmFscHJlZCwgZGVsdGEsCiAgICAgICAgIGluZGV4LCBzaWduLCB2cGRpZmYsIGRpZmY7Ci0gICAgUHlPYmplY3QgKnJ2LCAqc3RhdGUsICpzdHI7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTCwgKnN0cjsKICAgICBpbnQgb3V0cHV0YnVmZmVyID0gMCwgYnVmZmVyc3RlcDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaU86bGluMmFkcGNtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUsICZzdGF0ZSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuLyhzaXplKjIpKTsKLSAgICBpZiAoIHN0ciA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuLyh3aWR0aCoyKSk7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHN0cik7CiAKICAgICAvKiBEZWNvZGUgc3RhdGUsIHNob3VsZCBoYXZlICh2YWx1ZSwgc3RlcCkgKi8KQEAgLTE0MzMsMjEgKzE2MjUsMjggQEAKICAgICAgICAgLyogRmlyc3QgdGltZSwgaXQgc2VlbXMuIFNldCBkZWZhdWx0cyAqLwogICAgICAgICB2YWxwcmVkID0gMDsKICAgICAgICAgaW5kZXggPSAwOwotICAgIH0gZWxzZSBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiaWkiLCAmdmFscHJlZCwgJmluZGV4KSApCi0gICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoIVB5VHVwbGVfQ2hlY2soc3RhdGUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJzdGF0ZSBtdXN0IGJlIGEgdHVwbGUgb3IgTm9uZSIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfSBlbHNlIGlmICghUHlBcmdfUGFyc2VUdXBsZShzdGF0ZSwgImlpIiwgJnZhbHByZWQsICZpbmRleCkpIHsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KIAogICAgIHN0ZXAgPSBzdGVwc2l6ZVRhYmxlW2luZGV4XTsKICAgICBidWZmZXJzdGVwID0gMTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPDwgODsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoKGludCkqTE9OR1AoY3AsIGkpKSA+PiAxNjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUU0FNUExFMzIod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpID4+IDE2OwogCiAgICAgICAgIC8qIFN0ZXAgMSAtIGNvbXB1dGUgZGlmZmVyZW5jZSB3aXRoIHByZXZpb3VzIHZhbHVlICovCi0gICAgICAgIGRpZmYgPSB2YWwgLSB2YWxwcmVkOwotICAgICAgICBzaWduID0gKGRpZmYgPCAwKSA/IDggOiAwOwotICAgICAgICBpZiAoIHNpZ24gKSBkaWZmID0gKC1kaWZmKTsKKyAgICAgICAgaWYgKHZhbCA8IHZhbHByZWQpIHsKKyAgICAgICAgICAgIGRpZmYgPSB2YWxwcmVkIC0gdmFsOworICAgICAgICAgICAgc2lnbiA9IDg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkaWZmID0gdmFsIC0gdmFscHJlZDsKKyAgICAgICAgICAgIHNpZ24gPSAwOworICAgICAgICB9CiAKICAgICAgICAgLyogU3RlcCAyIC0gRGl2aWRlIGFuZCBjbGFtcCAqLwogICAgICAgICAvKiBOb3RlOgpAQCAtMTUwNywyNSArMTcwNiwzNSBAQAogICAgICAgICBidWZmZXJzdGVwID0gIWJ1ZmZlcnN0ZXA7CiAgICAgfQogICAgIHJ2ID0gUHlfQnVpbGRWYWx1ZSgiKE8oaWkpKSIsIHN0ciwgdmFscHJlZCwgaW5kZXgpOworCisgIGV4aXQ6CiAgICAgUHlfREVDUkVGKHN0cik7CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmFkcGNtMmxpbgorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBzdGF0ZTogb2JqZWN0CisgICAgLworCitEZWNvZGUgYW4gSW50ZWwvRFZJIEFEUENNIGNvZGVkIGZyYWdtZW50IHRvIGEgbGluZWFyIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hZHBjbTJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9hZHBjbTJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIFB5T2JqZWN0ICpzdGF0ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zNzE5NjVjZGNjMGFhNjliIGlucHV0PWY1MjIxMTQ0ZjVjYTllZjBdKi8KIHsKICAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFscHJlZCwgc3RlcCwgZGVsdGEsIGluZGV4LCBzaWduLCB2cGRpZmY7Ci0gICAgUHlPYmplY3QgKnJ2LCAqc3RyLCAqc3RhdGU7CisgICAgUHlfc3NpemVfdCBpLCBvdXRsZW47CisgICAgaW50IHZhbHByZWQsIHN0ZXAsIGRlbHRhLCBpbmRleCwgc2lnbiwgdnBkaWZmOworICAgIFB5T2JqZWN0ICpydiwgKnN0cjsKICAgICBpbnQgaW5wdXRidWZmZXIgPSAwLCBidWZmZXJzdGVwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpTzphZHBjbTJsaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJnN0YXRlKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUoc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUod2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIERlY29kZSBzdGF0ZSwgc2hvdWxkIGhhdmUgKHZhbHVlLCBzdGVwKSAqLwpAQCAtMTUzMywyMyArMTc0MiwyOCBAQAogICAgICAgICAvKiBGaXJzdCB0aW1lLCBpdCBzZWVtcy4gU2V0IGRlZmF1bHRzICovCiAgICAgICAgIHZhbHByZWQgPSAwOwogICAgICAgICBpbmRleCA9IDA7Ci0gICAgfSBlbHNlIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIGlmICghUHlUdXBsZV9DaGVjayhzdGF0ZSkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInN0YXRlIG11c3QgYmUgYSB0dXBsZSBvciBOb25lIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChsZW4gPiAoUFlfU1NJWkVfVF9NQVgvMikvc2l6ZSkgeworICAgIGlmIChmcmFnbWVudC0+bGVuID4gKFBZX1NTSVpFX1RfTUFYLzIpL3dpZHRoKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKnNpemUqMik7Ci0gICAgaWYgKCBzdHIgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIG91dGxlbiA9IGZyYWdtZW50LT5sZW4qd2lkdGgqMjsKKyAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dGxlbik7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHN0cik7CisgICAgY3AgPSBmcmFnbWVudC0+YnVmOwogCiAgICAgc3RlcCA9IHN0ZXBzaXplVGFibGVbaW5kZXhdOwogICAgIGJ1ZmZlcnN0ZXAgPSAwOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuKnNpemUqMjsgaSArPSBzaXplICkgeworICAgIGZvciAoaSA9IDA7IGkgPCBvdXRsZW47IGkgKz0gd2lkdGgpIHsKICAgICAgICAgLyogU3RlcCAxIC0gZ2V0IHRoZSBkZWx0YSB2YWx1ZSBhbmQgY29tcHV0ZSBuZXh0IGluZGV4ICovCiAgICAgICAgIGlmICggYnVmZmVyc3RlcCApIHsKICAgICAgICAgICAgIGRlbHRhID0gaW5wdXRidWZmZXIgJiAweGY7CkBAIC0xNTk0LDkgKzE4MDgsNyBAQAogICAgICAgICBzdGVwID0gc3RlcHNpemVUYWJsZVtpbmRleF07CiAKICAgICAgICAgLyogU3RlcCA2IC0gT3V0cHV0IHZhbHVlICovCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpKHZhbHByZWQgPj4gOCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHZhbHByZWQpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpKHZhbHByZWQ8PDE2KTsKKyAgICAgICAgU0VUU0FNUExFMzIod2lkdGgsIG5jcCwgaSwgdmFscHJlZCA8PCAxNik7CiAgICAgfQogCiAgICAgcnYgPSBQeV9CdWlsZFZhbHVlKCIoTyhpaSkpIiwgc3RyLCB2YWxwcmVkLCBpbmRleCk7CkBAIC0xNjA0LDMyICsxODE2LDM1IEBACiAgICAgcmV0dXJuIHJ2OwogfQogCisjaW5jbHVkZSAiY2xpbmljL2F1ZGlvb3AuYy5oIgorCiBzdGF0aWMgUHlNZXRob2REZWYgYXVkaW9vcF9tZXRob2RzW10gPSB7Ci0gICAgeyAibWF4IiwgYXVkaW9vcF9tYXgsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgIm1pbm1heCIsIGF1ZGlvb3BfbWlubWF4LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJhdmciLCBhdWRpb29wX2F2ZywgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAibWF4cHAiLCBhdWRpb29wX21heHBwLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJhdmdwcCIsIGF1ZGlvb3BfYXZncHAsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgInJtcyIsIGF1ZGlvb3Bfcm1zLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJmaW5kZml0IiwgYXVkaW9vcF9maW5kZml0LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJmaW5kbWF4IiwgYXVkaW9vcF9maW5kbWF4LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJmaW5kZmFjdG9yIiwgYXVkaW9vcF9maW5kZmFjdG9yLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJjcm9zcyIsIGF1ZGlvb3BfY3Jvc3MsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgIm11bCIsIGF1ZGlvb3BfbXVsLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJhZGQiLCBhdWRpb29wX2FkZCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiYmlhcyIsIGF1ZGlvb3BfYmlhcywgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAidWxhdzJsaW4iLCBhdWRpb29wX3VsYXcybGluLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJsaW4ydWxhdyIsIGF1ZGlvb3BfbGluMnVsYXcsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgImFsYXcybGluIiwgYXVkaW9vcF9hbGF3MmxpbiwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAibGluMmFsYXciLCBhdWRpb29wX2xpbjJhbGF3LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJsaW4ybGluIiwgYXVkaW9vcF9saW4ybGluLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJhZHBjbTJsaW4iLCBhdWRpb29wX2FkcGNtMmxpbiwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAibGluMmFkcGNtIiwgYXVkaW9vcF9saW4yYWRwY20sIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgInRvbW9ubyIsIGF1ZGlvb3BfdG9tb25vLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJ0b3N0ZXJlbyIsIGF1ZGlvb3BfdG9zdGVyZW8sIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgImdldHNhbXBsZSIsIGF1ZGlvb3BfZ2V0c2FtcGxlLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJyZXZlcnNlIiwgYXVkaW9vcF9yZXZlcnNlLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJyYXRlY3YiLCBhdWRpb29wX3JhdGVjdiwgTUVUSF9WQVJBUkdTIH0sCisgICAgQVVESU9PUF9NQVhfTUVUSE9EREVGCisgICAgQVVESU9PUF9NSU5NQVhfTUVUSE9EREVGCisgICAgQVVESU9PUF9BVkdfTUVUSE9EREVGCisgICAgQVVESU9PUF9NQVhQUF9NRVRIT0RERUYKKyAgICBBVURJT09QX0FWR1BQX01FVEhPRERFRgorICAgIEFVRElPT1BfUk1TX01FVEhPRERFRgorICAgIEFVRElPT1BfRklOREZJVF9NRVRIT0RERUYKKyAgICBBVURJT09QX0ZJTkRNQVhfTUVUSE9EREVGCisgICAgQVVESU9PUF9GSU5ERkFDVE9SX01FVEhPRERFRgorICAgIEFVRElPT1BfQ1JPU1NfTUVUSE9EREVGCisgICAgQVVESU9PUF9NVUxfTUVUSE9EREVGCisgICAgQVVESU9PUF9BRERfTUVUSE9EREVGCisgICAgQVVESU9PUF9CSUFTX01FVEhPRERFRgorICAgIEFVRElPT1BfVUxBVzJMSU5fTUVUSE9EREVGCisgICAgQVVESU9PUF9MSU4yVUxBV19NRVRIT0RERUYKKyAgICBBVURJT09QX0FMQVcyTElOX01FVEhPRERFRgorICAgIEFVRElPT1BfTElOMkFMQVdfTUVUSE9EREVGCisgICAgQVVESU9PUF9MSU4yTElOX01FVEhPRERFRgorICAgIEFVRElPT1BfQURQQ00yTElOX01FVEhPRERFRgorICAgIEFVRElPT1BfTElOMkFEUENNX01FVEhPRERFRgorICAgIEFVRElPT1BfVE9NT05PX01FVEhPRERFRgorICAgIEFVRElPT1BfVE9TVEVSRU9fTUVUSE9EREVGCisgICAgQVVESU9PUF9HRVRTQU1QTEVfTUVUSE9EREVGCisgICAgQVVESU9PUF9SRVZFUlNFX01FVEhPRERFRgorICAgIEFVRElPT1BfQllURVNXQVBfTUVUSE9EREVGCisgICAgQVVESU9PUF9SQVRFQ1ZfTUVUSE9EREVGCiAgICAgeyAwLCAgICAgICAgICAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvYmluYXNjaWkuYyBiL01vZHVsZXMvYmluYXNjaWkuYwppbmRleCBhODRiYWRjNy4uNDJkMDhkZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9iaW5hc2NpaS5jCisrKyBiL01vZHVsZXMvYmluYXNjaWkuYwpAQCAtMTgzLDYgKzE4MywyNyBAQAogICAgIDB4NmUxNywgMHg3ZTM2LCAweDRlNTUsIDB4NWU3NCwgMHgyZTkzLCAweDNlYjIsIDB4MGVkMSwgMHgxZWYwLAogfTsKIAorLypbY2xpbmljIGlucHV0XQorb3V0cHV0IHByZXNldCBmaWxlCittb2R1bGUgYmluYXNjaWkKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTQ0YzZmODQwY2U3MDhmMGNdKi8KKworLypbcHl0aG9uIGlucHV0XQorCitjbGFzcyBhc2NpaV9idWZmZXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfYnVmZmVyJworICAgIGNvbnZlcnRlciA9ICdhc2NpaV9idWZmZXJfY29udmVydGVyJworICAgIGltcGxfYnlfcmVmZXJlbmNlID0gVHJ1ZQorICAgIGNfZGVmYXVsdCA9ICJ7TlVMTCwgTlVMTH0iCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICByZXR1cm4gIiIuam9pbihbImlmICgiLCBuYW1lLCAiLm9iailcbiAgIFB5QnVmZmVyX1JlbGVhc2UoJiIsIG5hbWUsICIpO1xuIl0pCisKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTNlYjdiNjM2MTBkYTkyY2RdKi8KKwogc3RhdGljIGludAogYXNjaWlfYnVmZmVyX2NvbnZlcnRlcihQeU9iamVjdCAqYXJnLCBQeV9idWZmZXIgKmJ1ZikKIHsKQEAgLTIyMCwxMyArMjQxLDIxIEBACiAgICAgcmV0dXJuIFB5X0NMRUFOVVBfU1VQUE9SVEVEOwogfQogCisjaW5jbHVkZSAiY2xpbmljL2JpbmFzY2lpLmMuaCIKIAotUHlEb2NfU1RSVkFSKGRvY19hMmJfdXUsICIoYXNjaWkpIC0+IGJpbi4gRGVjb2RlIGEgbGluZSBvZiB1dWVuY29kZWQgZGF0YSIpOworLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYTJiX3V1CisKKyAgICBkYXRhOiBhc2NpaV9idWZmZXIKKyAgICAvCisKK0RlY29kZSBhIGxpbmUgb2YgdXVlbmNvZGVkIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9hMmJfdXUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYTJiX3V1X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU3NzlmMzliMGI0ODQ1OWYgaW5wdXQ9N2NhZmVhZjczZGY2M2QxY10qLwogewotICAgIFB5X2J1ZmZlciBwYXNjaWk7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtMjM0LDEwICsyNjMsOCBAQAogICAgIFB5T2JqZWN0ICpydjsKICAgICBQeV9zc2l6ZV90IGFzY2lpX2xlbiwgYmluX2xlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOmEyYl91dSIsIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZwYXNjaWkpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNjaWlfZGF0YSA9IHBhc2NpaS5idWY7Ci0gICAgYXNjaWlfbGVuID0gcGFzY2lpLmxlbjsKKyAgICBhc2NpaV9kYXRhID0gZGF0YS0+YnVmOworICAgIGFzY2lpX2xlbiA9IGRhdGEtPmxlbjsKIAogICAgIGFzc2VydChhc2NpaV9sZW4gPj0gMCk7CiAKQEAgLTI0NiwxMCArMjczLDggQEAKICAgICBhc2NpaV9sZW4tLTsKIAogICAgIC8qIEFsbG9jYXRlIHRoZSBidWZmZXIgKi8KLSAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJpbl9sZW4pKSA9PSBOVUxMICkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbikpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYmluX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KTsKIAogICAgIGZvciggOyBiaW5fbGVuID4gMCA7IGFzY2lpX2xlbi0tLCBhc2NpaV9kYXRhKysgKSB7CkBAIC0yNjksNyArMjk0LDYgQEAKICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoIHRoaXNfY2ggPCAnICcgfHwgdGhpc19jaCA+ICgnICcgKyA2NCkpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJJbGxlZ2FsIGNoYXIiKTsKLSAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CkBAIC0yOTgsMjEgKzMyMiwyNiBAQAogICAgICAgICBpZiAoIHRoaXNfY2ggIT0gJyAnICYmIHRoaXNfY2ggIT0gJyAnKzY0ICYmCiAgICAgICAgICAgICAgdGhpc19jaCAhPSAnXG4nICYmIHRoaXNfY2ggIT0gJ1xyJyApIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIlRyYWlsaW5nIGdhcmJhZ2UiKTsKLSAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICByZXR1cm4gcnY7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYjJhX3V1LCAiKGJpbikgLT4gYXNjaWkuIFV1ZW5jb2RlIGxpbmUgb2YgZGF0YSIpOworLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYjJhX3V1CisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK1V1ZW5jb2RlIGxpbmUgb2YgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2IyYV91dShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9iMmFfdXVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTgxMDIxYjY5YmI5YTQxNCBpbnB1dD0wMGZkZjQ1OGNlOGI0NjViXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBiaW47CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtMzIwLDIyICszNDksMTcgQEAKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBiaW5fbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6YjJhX3V1IiwgJnBiaW4pICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYmluX2RhdGEgPSBwYmluLmJ1ZjsKLSAgICBiaW5fbGVuID0gcGJpbi5sZW47CisgICAgYmluX2RhdGEgPSBkYXRhLT5idWY7CisgICAgYmluX2xlbiA9IGRhdGEtPmxlbjsKICAgICBpZiAoIGJpbl9sZW4gPiA0NSApIHsKICAgICAgICAgLyogVGhlIDQ1IGlzIGEgbGltaXQgdGhhdCBhcHBlYXJzIGluIGFsbCB1dWVuY29kZSdzICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIkF0IG1vc3QgNDUgYnl0ZXMgYXQgb25jZSIpOwotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyogV2UncmUgbGF6eSBhbmQgYWxsb2NhdGUgdG8gbXVjaCAoZml4ZWQgdXAgbGF0ZXIpICovCi0gICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAyICsgKGJpbl9sZW4rMikvMyo0KSkgPT0gTlVMTCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CisgICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAyICsgKGJpbl9sZW4rMikvMyo0KSkgPT0gTlVMTCApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBhc2NpaV9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydik7CiAKICAgICAvKiBTdG9yZSB0aGUgbGVuZ3RoICovCkBAIC0zNjEsMTAgKzM4NSw4IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICByZXR1cm4gcnY7CiB9CiAKQEAgLTM5NCwxMiArNDE2LDE5IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19hMmJfYmFzZTY0LCAiKGFzY2lpKSAtPiBiaW4uIERlY29kZSBhIGxpbmUgb2YgYmFzZTY0IGRhdGEiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmEyYl9iYXNlNjQKKworICAgIGRhdGE6IGFzY2lpX2J1ZmZlcgorICAgIC8KKworRGVjb2RlIGEgbGluZSBvZiBiYXNlNjQgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2EyYl9iYXNlNjQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYTJiX2Jhc2U2NF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zZTM1MWI3MDJiZWQ1NmQyIGlucHV0PTU4NzJhY2Y2ZTFjYWMyNDNdKi8KIHsKLSAgICBQeV9idWZmZXIgcGFzY2lpOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTQwOCwyNSArNDM3LDE5IEBACiAgICAgUHlfc3NpemVfdCBhc2NpaV9sZW4sIGJpbl9sZW47CiAgICAgaW50IHF1YWRfcG9zID0gMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOmEyYl9iYXNlNjQiLCBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmcGFzY2lpKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGFzY2lpX2RhdGEgPSBwYXNjaWkuYnVmOwotICAgIGFzY2lpX2xlbiA9IHBhc2NpaS5sZW47CisgICAgYXNjaWlfZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBhc2NpaV9sZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQoYXNjaWlfbGVuID49IDApOwogCi0gICAgaWYgKGFzY2lpX2xlbiA+IFBZX1NTSVpFX1RfTUFYIC0gMykgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOworICAgIGlmIChhc2NpaV9sZW4gPiBQWV9TU0laRV9UX01BWCAtIDMpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIH0KIAogICAgIGJpbl9sZW4gPSAoKGFzY2lpX2xlbiszKS80KSozOyAvKiBVcHBlciBib3VuZCwgY29ycmVjdGVkIGxhdGVyICovCiAKICAgICAvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyICovCi0gICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKSkgPT0gTlVMTCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKKyAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJpbl9sZW4pKSA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIGJpbl9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydik7CiAgICAgYmluX2xlbiA9IDA7CiAKQEAgLTQ3OSw3ICs1MDIsNiBAQAogICAgIH0KIAogICAgIGlmIChsZWZ0Yml0cyAhPSAwKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIkluY29ycmVjdCBwYWRkaW5nIik7CiAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDkxLDI0ICs1MTMsMzAgQEAKICAgICAqLwogICAgIGlmIChiaW5fbGVuID4gMCkgewogICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwgYmluX2xlbikgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICAgICAgcnYgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgIHJldHVybiBydjsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19iMmFfYmFzZTY0LCAiKGJpbikgLT4gYXNjaWkuIEJhc2U2NC1jb2RlIGxpbmUgb2YgZGF0YSIpOworCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5iMmFfYmFzZTY0CisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK0Jhc2U2NC1jb2RlIGxpbmUgb2YgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2IyYV9iYXNlNjQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYjJhX2Jhc2U2NF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zY2Q2MWZiZWUyOTEzMjg1IGlucHV0PTE0ZWM0ZTQ3MzcxMTc0YTldKi8KIHsKLSAgICBQeV9idWZmZXIgcGJ1ZjsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC01MTYsMjYgKzU0NCwyMSBAQAogICAgIFB5T2JqZWN0ICpydjsKICAgICBQeV9zc2l6ZV90IGJpbl9sZW47CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjpiMmFfYmFzZTY0IiwgJnBidWYpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYmluX2RhdGEgPSBwYnVmLmJ1ZjsKLSAgICBiaW5fbGVuID0gcGJ1Zi5sZW47CisgICAgYmluX2RhdGEgPSBkYXRhLT5idWY7CisgICAgYmluX2xlbiA9IGRhdGEtPmxlbjsKIAogICAgIGFzc2VydChiaW5fbGVuID49IDApOwogCiAgICAgaWYgKCBiaW5fbGVuID4gQkFTRTY0X01BWEJJTiApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiVG9vIG11Y2ggZGF0YSBmb3IgYmFzZTY0IGxpbmUiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIFdlJ3JlIGxhenkgYW5kIGFsbG9jYXRlIHRvbyBtdWNoIChmaXhlZCB1cCBsYXRlcikuCiAgICAgICAgIiszIiBsZWF2ZXMgcm9vbSBmb3IgdXAgdG8gdHdvIHBhZCBjaGFyYWN0ZXJzIGFuZCBhIHRyYWlsaW5nCiAgICAgICAgbmV3bGluZS4gIE5vdGUgdGhhdCAnYicgZ2V0cyBlbmNvZGVkIGFzICdZZz09XG4nICgxIGluLCA1IG91dCkuICovCi0gICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKjIgKyAzKSkgPT0gTlVMTCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CisgICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKjIgKyAzKSkgPT0gTlVMTCApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBhc2NpaV9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIDsgYmluX2xlbiA+IDAgOyBiaW5fbGVuLS0sIGJpbl9kYXRhKysgKSB7CkBAIC01NjMsMTkgKzU4NiwyNCBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgcmV0dXJuIHJ2OwogfQogCi1QeURvY19TVFJWQVIoZG9jX2EyYl9ocXgsICJhc2NpaSAtPiBiaW4sIGRvbmUuIERlY29kZSAuaHF4IGNvZGluZyIpOworLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYTJiX2hxeAorCisgICAgZGF0YTogYXNjaWlfYnVmZmVyCisgICAgLworCitEZWNvZGUgLmhxeCBjb2RpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9hMmJfaHF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2EyYl9ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjBiY2RiYmQyOGIxMDVjZCBpbnB1dD0wZDkxNGM2ODBlMGVlZDU1XSovCiB7Ci0gICAgUHlfYnVmZmVyIHBhc2NpaTsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC01ODQsMjUgKzYxMiwxOSBAQAogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGludCBkb25lID0gMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOmEyYl9ocXgiLCBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmcGFzY2lpKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGFzY2lpX2RhdGEgPSBwYXNjaWkuYnVmOwotICAgIGxlbiA9IHBhc2NpaS5sZW47CisgICAgYXNjaWlfZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBsZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQobGVuID49IDApOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gMikgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOworICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAtIDIpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIH0KIAogICAgIC8qIEFsbG9jYXRlIGEgc3RyaW5nIHRoYXQgaXMgdG9vIGJpZyAoZml4ZWQgbGF0ZXIpCiAgICAgICAgQWRkIHR3byB0byB0aGUgaW5pdGlhbCBsZW5ndGggdG8gcHJldmVudCBpbnRlcm5pbmcgd2hpY2gKICAgICAgICB3b3VsZCBwcmVjbHVkZSBzdWJzZXF1ZW50IHJlc2l6aW5nLiAgKi8KLSAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbisyKSkgPT0gTlVMTCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKKyAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbisyKSkgPT0gTlVMTCApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBiaW5fZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCiAgICAgZm9yKCA7IGxlbiA+IDAgOyBsZW4tLSwgYXNjaWlfZGF0YSsrICkgewpAQCAtNjEyLDcgKzYzNCw2IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCB0aGlzX2NoID09IEZBSUwgKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJJbGxlZ2FsIGNoYXIiKTsKLSAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTYzNSw1NSArNjU2LDUzIEBACiAgICAgaWYgKCBsZWZ0Yml0cyAmJiAhZG9uZSApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEluY29tcGxldGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiU3RyaW5nIGhhcyBpbmNvbXBsZXRlIG51bWJlciBvZiBieXRlcyIpOwotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChiaW5fZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9CiAgICAgaWYgKHJ2KSB7CiAgICAgICAgIFB5T2JqZWN0ICpycnYgPSBQeV9CdWlsZFZhbHVlKCJPaSIsIHJ2LCBkb25lKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgcmV0dXJuIHJydjsKICAgICB9CiAKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoZG9jX3JsZWNvZGVfaHF4LCAiQmluaGV4IFJMRS1jb2RlIGJpbmFyeSBkYXRhIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLnJsZWNvZGVfaHF4CisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK0JpbmhleCBSTEUtY29kZSBiaW5hcnkgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX3JsZWNvZGVfaHF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX3JsZWNvZGVfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA5MDVkYTM0NGRiZjA2NDggaW5wdXQ9ZTFmMTcxMjQ0N2E4MmIwOV0qLwogewotICAgIFB5X2J1ZmZlciBwYnVmOwogICAgIHVuc2lnbmVkIGNoYXIgKmluX2RhdGEsICpvdXRfZGF0YTsKICAgICBQeU9iamVjdCAqcnY7CiAgICAgdW5zaWduZWQgY2hhciBjaDsKICAgICBQeV9zc2l6ZV90IGluLCBpbmVuZCwgbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6cmxlY29kZV9ocXgiLCAmcGJ1ZikgKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpbl9kYXRhID0gcGJ1Zi5idWY7Ci0gICAgbGVuID0gcGJ1Zi5sZW47CisgICAgaW5fZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBsZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQobGVuID49IDApOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMiAtIDIpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CisgICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMiAtIDIpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIH0KIAogICAgIC8qIFdvcnN0IGNhc2U6IG91dHB1dCBpcyB0d2ljZSBhcyBiaWcgYXMgaW5wdXQgKGZpeGVkIGxhdGVyKSAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKjIrMikpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKjIrMikpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgb3V0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KTsKIAogICAgIGZvciggaW49MDsgaW48bGVuOyBpbisrKSB7CkBAIC03MTMsMTkgKzczMiwyNSBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAob3V0X2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBydjsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19iMmFfaHF4LCAiRW5jb2RlIC5ocXggZGF0YSIpOworCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5iMmFfaHF4CisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK0VuY29kZSAuaHF4IGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9iMmFfaHF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2IyYV9ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWE5ODc4MTBkNWUzY2RiYiBpbnB1dD05NTk2ZWJlMDE5ZmUxMmJhXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBiaW47CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtNzMzLDIzICs3NTgsMTcgQEAKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBsZW47CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjpiMmFfaHF4IiwgJnBiaW4pICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYmluX2RhdGEgPSBwYmluLmJ1ZjsKLSAgICBsZW4gPSBwYmluLmxlbjsKKyAgICBiaW5fZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBsZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQobGVuID49IDApOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMiAtIDIpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CisgICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMiAtIDIpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIH0KIAogICAgIC8qIEFsbG9jYXRlIGEgYnVmZmVyIHRoYXQgaXMgYXQgbGVhc3QgbGFyZ2UgZW5vdWdoICovCi0gICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qMisyKSkgPT0gTlVMTCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CisgICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qMisyKSkgPT0gTlVMTCApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBhc2NpaV9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIDsgbGVuID4gMCA7IGxlbi0tLCBiaW5fZGF0YSsrICkgewpAQCAtNzcwLDQ3ICs3ODksNDUgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOwogICAgIHJldHVybiBydjsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19ybGVkZWNvZGVfaHF4LCAiRGVjb2RlIGhleGJpbiBSTEUtY29kZWQgc3RyaW5nIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLnJsZWRlY29kZV9ocXgKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIC8KKworRGVjb2RlIGhleGJpbiBSTEUtY29kZWQgc3RyaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfcmxlZGVjb2RlX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9ybGVkZWNvZGVfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWY3YWZkODliNzg5OTQ2YWIgaW5wdXQ9NTRjZGQ0OWZjMDE0NDAyY10qLwogewotICAgIFB5X2J1ZmZlciBwaW47CiAgICAgdW5zaWduZWQgY2hhciAqaW5fZGF0YSwgKm91dF9kYXRhOwogICAgIHVuc2lnbmVkIGNoYXIgaW5fYnl0ZSwgaW5fcmVwZWF0OwogICAgIFB5T2JqZWN0ICpydjsKICAgICBQeV9zc2l6ZV90IGluX2xlbiwgb3V0X2xlbiwgb3V0X2xlbl9sZWZ0OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6cmxlZGVjb2RlX2hxeCIsICZwaW4pICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaW5fZGF0YSA9IHBpbi5idWY7Ci0gICAgaW5fbGVuID0gcGluLmxlbjsKKyAgICBpbl9kYXRhID0gZGF0YS0+YnVmOworICAgIGluX2xlbiA9IGRhdGEtPmxlbjsKIAogICAgIGFzc2VydChpbl9sZW4gPj0gMCk7CiAKICAgICAvKiBFbXB0eSBzdHJpbmcgaXMgYSBzcGVjaWFsIGNhc2UgKi8KLSAgICBpZiAoIGluX2xlbiA9PSAwICkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOworICAgIGlmICggaW5fbGVuID09IDAgKQogICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGluX2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOworICAgIGVsc2UgaWYgKGluX2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgfQogCiAgICAgLyogQWxsb2NhdGUgYSBidWZmZXIgb2YgcmVhc29uYWJsZSBzaXplLiBSZXNpemVkIHdoZW4gbmVlZGVkICovCiAgICAgb3V0X2xlbiA9IGluX2xlbioyOwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0X2xlbikpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbik7CisgICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBvdXRfbGVuKSkgPT0gTlVMTCApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBvdXRfbGVuX2xlZnQgPSBvdXRfbGVuOwogICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydik7CiAKQEAgLTgyMyw3ICs4NDAsNiBAQAogICAgICAgICAgICAgIGlmICggLS1pbl9sZW4gPCAwICkgeyBcCiAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhJbmNvbXBsZXRlLCAiIik7IFwKICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsgXAotICAgICAgICAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOyBcCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyBcCiAgICAgICAgICAgICAgfSBcCiAgICAgICAgICAgICAgYiA9ICppbl9kYXRhKys7IFwKQEAgLTgzNCw3ICs4NTAsNyBAQAogICAgICAgICAgICAgIGlmICggLS1vdXRfbGVuX2xlZnQgPCAwICkgeyBcCiAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvdXRfbGVuID4gUFlfU1NJWkVfVF9NQVggLyAyKSByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsgXAogICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LCAyKm91dF9sZW4pIDwgMCkgXAotICAgICAgICAgICAgICAgICAgICAgICAgeyBQeV9ERUNSRUYocnYpOyBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOyByZXR1cm4gTlVMTDsgfSBcCisgICAgICAgICAgICAgICAgICAgICAgICB7IFB5X1hERUNSRUYocnYpOyByZXR1cm4gTlVMTDsgfSBcCiAgICAgICAgICAgICAgICAgICAgICAgb3V0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBvdXRfbGVuOyBcCiAgICAgICAgICAgICAgICAgICAgICAgb3V0X2xlbl9sZWZ0ID0gb3V0X2xlbi0xOyBcCkBAIC04NTYsNyArODcyLDYgQEAKICAgICAgICAgICAgICoqIG9mIHRoZSBzdHJpbmcgb25seSkuIFRoaXMgaXMgYSBwcm9ncmFtbWVyIGVycm9yLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIk9ycGhhbmVkIFJMRSBjb2RlIGF0IHN0YXJ0Iik7Ci0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOwogICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC04ODcsNjAgKzkwMiw0MSBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAob3V0X2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbik7CiAgICAgcmV0dXJuIHJ2OwogfQogCi1QeURvY19TVFJWQVIoZG9jX2NyY19ocXgsCi0iKGRhdGEsIG9sZGNyYykgLT4gbmV3Y3JjLiBDb21wdXRlIGhxeCBDUkMgaW5jcmVtZW50YWxseSIpOwogCi1zdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfY3JjX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5jcmNfaHF4IC0+IGludAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgY3JjOiBpbnQKKyAgICAvCisKK0NvbXB1dGUgaHF4IENSQyBpbmNyZW1lbnRhbGx5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgaW50CitiaW5hc2NpaV9jcmNfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgY3JjKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTYzNGRhYzE4ZGZhODYzZDcgaW5wdXQ9NjgwNjA5MzFiMmY1MWM4YV0qLwogewotICAgIFB5X2J1ZmZlciBwaW47CiAgICAgdW5zaWduZWQgY2hhciAqYmluX2RhdGE7Ci0gICAgdW5zaWduZWQgaW50IGNyYzsKKyAgICB1bnNpZ25lZCBpbnQgdWNyYyA9ICh1bnNpZ25lZCBpbnQpY3JjOwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOmNyY19ocXgiLCAmcGluLCAmY3JjKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGluLmJ1ZjsKLSAgICBsZW4gPSBwaW4ubGVuOworICAgIGJpbl9kYXRhID0gZGF0YS0+YnVmOworICAgIGxlbiA9IGRhdGEtPmxlbjsKIAogICAgIHdoaWxlKGxlbi0tID4gMCkgewotICAgICAgICBjcmM9KChjcmM8PDgpJjB4ZmYwMCleY3JjdGFiX2hxeFsoKGNyYz4+OCkmMHhmZileKmJpbl9kYXRhKytdOworICAgICAgICB1Y3JjPSgodWNyYzw8OCkmMHhmZjAwKV5jcmN0YWJfaHF4WygodWNyYz4+OCkmMHhmZileKmJpbl9kYXRhKytdOwogICAgIH0KIAotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbik7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCBjcmMpOworICAgIHJldHVybiAoaW50KXVjcmM7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfY3JjMzIsCi0iKGRhdGEsIG9sZGNyYyA9IDApIC0+IG5ld2NyYy4gQ29tcHV0ZSBDUkMtMzIgaW5jcmVtZW50YWxseSIpOwotCi0jaWZkZWYgVVNFX1pMSUJfQ1JDMzIKLS8qIFRoaXMgd2FzIHRha2VuIGZyb20gemxpYm1vZHVsZS5jIFB5WmxpYl9jcmMzMiAoYnV0IGlzIFBZX1NTSVpFX1RfQ0xFQU4pICovCi1zdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfY3JjMzIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIHVuc2lnbmVkIGludCBjcmMzMnZhbCA9IDA7ICAvKiBjcmMzMigwTCwgWl9OVUxMLCAwKSAqLwotICAgIFB5X2J1ZmZlciBwYnVmOwotICAgIEJ5dGUgKmJ1ZjsKLSAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICBpbnQgc2lnbmVkX3ZhbDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8STpjcmMzMiIsICZwYnVmLCAmY3JjMzJ2YWwpKQotICAgIHJldHVybiBOVUxMOwotICAgIGJ1ZiA9IChCeXRlKilwYnVmLmJ1ZjsKLSAgICBsZW4gPSBwYnVmLmxlbjsKLSAgICBzaWduZWRfdmFsID0gY3JjMzIoY3JjMzJ2YWwsIGJ1ZiwgbGVuKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoc2lnbmVkX3ZhbCAmIDB4ZmZmZmZmZmZVKTsKLX0KLSNlbHNlICAvKiBVU0VfWkxJQl9DUkMzMiAqLworI2lmbmRlZiBVU0VfWkxJQl9DUkMzMgogLyogIENyYyAtIDMyIEJJVCBBTlNJIFgzLjY2IENSQyBjaGVja3N1bSBmaWxlcwogICAgIEFsc28ga25vd24gYXM6IElTTyAzMzA3CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfApAQCAtMTA1OCwyMCArMTA1NCw0MiBAQAogMHg1ZDY4MWIwMlUsIDB4MmE2ZjJiOTRVLCAweGI0MGJiZTM3VSwgMHhjMzBjOGVhMVUsIDB4NWEwNWRmMWJVLAogMHgyZDAyZWY4ZFUKIH07CisjZW5kaWYgIC8qIFVTRV9aTElCX0NSQzMyICovCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9jcmMzMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5jcmMzMiAtPiB1bnNpZ25lZF9pbnQKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGNyYzogdW5zaWduZWRfaW50KGJpdHdpc2U9VHJ1ZSkgPSAwCisgICAgLworCitDb21wdXRlIENSQy0zMiBpbmNyZW1lbnRhbGx5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgdW5zaWduZWQgaW50CitiaW5hc2NpaV9jcmMzMl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IGNyYykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02MjBhOTYxNjQzMzkzYzRmIGlucHV0PWJiZTM0MGJjOTlkMjVhYThdKi8KKworI2lmZGVmIFVTRV9aTElCX0NSQzMyCisvKiBUaGlzIHdhcyB0YWtlbiBmcm9tIHpsaWJtb2R1bGUuYyBQeVpsaWJfY3JjMzIgKGJ1dCBpcyBQWV9TU0laRV9UX0NMRUFOKSAqLworeworICAgIEJ5dGUgKmJ1ZjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgc2lnbmVkX3ZhbDsKKworICAgIGJ1ZiA9IChCeXRlKilkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOworICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMsIGJ1ZiwgbGVuKTsKKyAgICByZXR1cm4gKHVuc2lnbmVkIGludClzaWduZWRfdmFsICYgMHhmZmZmZmZmZlU7Cit9CisjZWxzZSAgLyogVVNFX1pMSUJfQ1JDMzIgKi8KIHsgLyogQnkgSmltIEFobHN0cm9tOyBBbGwgcmlnaHRzIHRyYW5zZmVycmVkIHRvIENOUkkgKi8KLSAgICBQeV9idWZmZXIgcGJpbjsKICAgICB1bnNpZ25lZCBjaGFyICpiaW5fZGF0YTsKLSAgICB1bnNpZ25lZCBpbnQgY3JjID0gMDsgICAgICAgLyogaW5pdGlhbCB2YWx1ZSBvZiBDUkMgKi8KICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICB1bnNpZ25lZCBpbnQgcmVzdWx0OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8STpjcmMzMiIsICZwYmluLCAmY3JjKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJpbi5idWY7Ci0gICAgbGVuID0gcGJpbi5sZW47CisgICAgYmluX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgY3JjID0gfiBjcmM7CiAgICAgd2hpbGUgKGxlbi0tID4gMCkgewpAQCAtMTA4MCwzOCArMTA5OCw0MiBAQAogICAgIH0KIAogICAgIHJlc3VsdCA9IChjcmMgXiAweEZGRkZGRkZGKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcocmVzdWx0ICYgMHhmZmZmZmZmZik7CisgICAgcmV0dXJuIHJlc3VsdCAmIDB4ZmZmZmZmZmY7CiB9CiAjZW5kaWYgIC8qIFVTRV9aTElCX0NSQzMyICovCiAKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmIyYV9oZXgKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIC8KKworSGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYmluYXJ5IGRhdGEuCisKK1RoZSByZXR1cm4gdmFsdWUgaXMgYSBieXRlcyBvYmplY3QuICBUaGlzIGZ1bmN0aW9uIGlzIGFsc28KK2F2YWlsYWJsZSBhcyAiaGV4bGlmeSgpIi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2hleGxpZnkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYjJhX2hleF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xNzkzMTg5MjJjMmY4ZmRhIGlucHV0PTk2NDIzY2ZhMjk5ZmYzYjFdKi8KIHsKLSAgICBQeV9idWZmZXIgcGFyZzsKICAgICBjaGFyKiBhcmdidWY7CiAgICAgUHlfc3NpemVfdCBhcmdsZW47CiAgICAgUHlPYmplY3QgKnJldHZhbDsKICAgICBjaGFyKiByZXRidWY7CiAgICAgUHlfc3NpemVfdCBpLCBqOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjpiMmFfaGV4IiwgJnBhcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhcmdidWYgPSBwYXJnLmJ1ZjsKLSAgICBhcmdsZW4gPSBwYXJnLmxlbjsKKyAgICBhcmdidWYgPSBkYXRhLT5idWY7CisgICAgYXJnbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGFyZ2xlbiA+PSAwKTsKLSAgICBpZiAoYXJnbGVuID4gUFlfU1NJWkVfVF9NQVggLyAyKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOworICAgIGlmIChhcmdsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIH0KIAogICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYXJnbGVuKjIpOwotICAgIGlmICghcmV0dmFsKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOworICAgIGlmICghcmV0dmFsKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgcmV0YnVmID0gUHlCeXRlc19BU19TVFJJTkcocmV0dmFsKTsKIAogICAgIC8qIG1ha2UgaGV4IHZlcnNpb24gb2Ygc3RyaW5nLCB0YWtlbiBmcm9tIHNoYW1vZHVsZS5jICovCkBAIC0xMTIyLDE2ICsxMTQ0LDkgQEAKICAgICAgICAgYyA9IGFyZ2J1ZltpXSAmIDB4ZjsKICAgICAgICAgcmV0YnVmW2orK10gPSBQeV9oZXhkaWdpdHNbY107CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOwogICAgIHJldHVybiByZXR2YWw7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfaGV4bGlmeSwKLSJiMmFfaGV4KGRhdGEpIC0+IHM7IEhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGJpbmFyeSBkYXRhLlxuXAotXG5cCi1UaGUgcmV0dXJuIHZhbHVlIGlzIGEgYnl0ZXMgb2JqZWN0LiAgVGhpcyBmdW5jdGlvbiBpcyBhbHNvXG5cCi1hdmFpbGFibGUgYXMgXCJoZXhsaWZ5KClcIi4iKTsKLQogCiBzdGF0aWMgaW50CiB0b19pbnQoaW50IGMpCkBAIC0xMTQ4LDIwICsxMTYzLDMwIEBACiB9CiAKIAorLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYTJiX2hleAorCisgICAgaGV4c3RyOiBhc2NpaV9idWZmZXIKKyAgICAvCisKK0JpbmFyeSBkYXRhIG9mIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorCitoZXhzdHIgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGhleCBkaWdpdHMgKHVwcGVyIG9yIGxvd2VyIGNhc2UpLgorVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBhcyAidW5oZXhsaWZ5KCkiLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfdW5oZXhsaWZ5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2EyYl9oZXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmhleHN0cikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNjFkYTQ1MmI1YzZkMjkwIGlucHV0PTllMWU3ZjJmOTRkYjI0ZmRdKi8KIHsKLSAgICBQeV9idWZmZXIgcGFyZzsKICAgICBjaGFyKiBhcmdidWY7CiAgICAgUHlfc3NpemVfdCBhcmdsZW47CiAgICAgUHlPYmplY3QgKnJldHZhbDsKICAgICBjaGFyKiByZXRidWY7CiAgICAgUHlfc3NpemVfdCBpLCBqOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfaGV4IiwgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJnBhcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhcmdidWYgPSBwYXJnLmJ1ZjsKLSAgICBhcmdsZW4gPSBwYXJnLmxlbjsKKyAgICBhcmdidWYgPSBoZXhzdHItPmJ1ZjsKKyAgICBhcmdsZW4gPSBoZXhzdHItPmxlbjsKIAogICAgIGFzc2VydChhcmdsZW4gPj0gMCk7CiAKQEAgLTExNzAsMTYgKzExOTUsMTMgQEAKICAgICAgKiByYWlzZSBhbiBleGNlcHRpb24uCiAgICAgICovCiAgICAgaWYgKGFyZ2xlbiAlIDIpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIk9kZC1sZW5ndGggc3RyaW5nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgKGFyZ2xlbi8yKSk7Ci0gICAgaWYgKCFyZXR2YWwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CisgICAgaWYgKCFyZXR2YWwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICByZXRidWYgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpOwogCiAgICAgZm9yIChpPWo9MDsgaSA8IGFyZ2xlbjsgaSArPSAyKSB7CkBAIC0xMTkyLDIxICsxMjE0LDEzIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0YnVmW2orK10gPSAodG9wIDw8IDQpICsgYm90OwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKICAgICByZXR1cm4gcmV0dmFsOwogCiAgIGZpbmFsbHk6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CiAgICAgUHlfREVDUkVGKHJldHZhbCk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfdW5oZXhsaWZ5LAotImEyYl9oZXgoaGV4c3RyKSAtPiBzOyBCaW5hcnkgZGF0YSBvZiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cblwKLVxuXAotaGV4c3RyIG11c3QgY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBoZXggZGlnaXRzICh1cHBlciBvciBsb3dlciBjYXNlKS5cblwKLVRoaXMgZnVuY3Rpb24gaXMgYWxzbyBhdmFpbGFibGUgYXMgXCJ1bmhleGxpZnkoKVwiIik7Ci0KIHN0YXRpYyBpbnQgdGFibGVfaGV4WzEyOF0gPSB7CiAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLAogICAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwKQEAgLTEyMjIsMjUgKzEyMzYsMjggQEAKIAogI2RlZmluZSBNQVhMSU5FU0laRSA3NgogCi1QeURvY19TVFJWQVIoZG9jX2EyYl9xcCwgIkRlY29kZSBhIHN0cmluZyBvZiBxcC1lbmNvZGVkIGRhdGEiKTsKIAotc3RhdGljIFB5T2JqZWN0KgotYmluYXNjaWlfYTJiX3FwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmEyYl9xcAorCisgICAgZGF0YTogYXNjaWlfYnVmZmVyCisgICAgaGVhZGVyOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorCitEZWNvZGUgYSBzdHJpbmcgb2YgcXAtZW5jb2RlZCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX3FwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgaGVhZGVyKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE0NGVmODgyNzAzNTIxMTQgaW5wdXQ9NTE4N2EwZDNkOGU1NGYzYl0qLwogewogICAgIFB5X3NzaXplX3QgaW4sIG91dDsKICAgICBjaGFyIGNoOwotICAgIFB5X2J1ZmZlciBwZGF0YTsKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqb2RhdGE7CisgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKm9kYXRhOwogICAgIFB5X3NzaXplX3QgZGF0YWxlbiA9IDA7CiAgICAgUHlPYmplY3QgKnJ2OwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZGF0YSIsICJoZWFkZXIiLCBOVUxMfTsKLSAgICBpbnQgaGVhZGVyID0gMDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfGk6YTJiX3FwIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZwZGF0YSwgJmhlYWRlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGRhdGEgPSBwZGF0YS5idWY7Ci0gICAgZGF0YWxlbiA9IHBkYXRhLmxlbjsKKyAgICBhc2NpaV9kYXRhID0gZGF0YS0+YnVmOworICAgIGRhdGFsZW4gPSBkYXRhLT5sZW47CiAKICAgICAvKiBXZSBhbGxvY2F0ZSB0aGUgb3V0cHV0IHNhbWUgc2l6ZSBhcyBpbnB1dCwgdGhpcyBpcyBvdmVya2lsbC4KICAgICAgKiBUaGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gdXNlZCBjYWxsb2MoKSBzbyB3ZSdsbCB6ZXJvIG91dCB0aGUKQEAgLTEyNDgsNyArMTI2NSw2IEBACiAgICAgICovCiAgICAgb2RhdGEgPSAodW5zaWduZWQgY2hhciAqKSBQeU1lbV9NYWxsb2MoZGF0YWxlbik7CiAgICAgaWYgKG9kYXRhID09IE5VTEwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMjU2LDMxICsxMjcyLDMxIEBACiAKICAgICBpbiA9IG91dCA9IDA7CiAgICAgd2hpbGUgKGluIDwgZGF0YWxlbikgewotICAgICAgICBpZiAoZGF0YVtpbl0gPT0gJz0nKSB7CisgICAgICAgIGlmIChhc2NpaV9kYXRhW2luXSA9PSAnPScpIHsKICAgICAgICAgICAgIGluKys7CiAgICAgICAgICAgICBpZiAoaW4gPj0gZGF0YWxlbikgYnJlYWs7CiAgICAgICAgICAgICAvKiBTb2Z0IGxpbmUgYnJlYWtzICovCi0gICAgICAgICAgICBpZiAoKGRhdGFbaW5dID09ICdcbicpIHx8IChkYXRhW2luXSA9PSAnXHInKSkgewotICAgICAgICAgICAgICAgIGlmIChkYXRhW2luXSAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbiA8IGRhdGFsZW4gJiYgZGF0YVtpbl0gIT0gJ1xuJykgaW4rKzsKKyAgICAgICAgICAgIGlmICgoYXNjaWlfZGF0YVtpbl0gPT0gJ1xuJykgfHwgKGFzY2lpX2RhdGFbaW5dID09ICdccicpKSB7CisgICAgICAgICAgICAgICAgaWYgKGFzY2lpX2RhdGFbaW5dICE9ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluIDwgZGF0YWxlbiAmJiBhc2NpaV9kYXRhW2luXSAhPSAnXG4nKSBpbisrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoaW4gPCBkYXRhbGVuKSBpbisrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZGF0YVtpbl0gPT0gJz0nKSB7CisgICAgICAgICAgICBlbHNlIGlmIChhc2NpaV9kYXRhW2luXSA9PSAnPScpIHsKICAgICAgICAgICAgICAgICAvKiBicm9rZW4gY2FzZSBmcm9tIGJyb2tlbiBweXRob24gcXAgKi8KICAgICAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSAnPSc7CiAgICAgICAgICAgICAgICAgaW4rKzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCgoZGF0YVtpbl0gPj0gJ0EnICYmIGRhdGFbaW5dIDw9ICdGJykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAoZGF0YVtpbl0gPj0gJ2EnICYmIGRhdGFbaW5dIDw9ICdmJykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAoZGF0YVtpbl0gPj0gJzAnICYmIGRhdGFbaW5dIDw9ICc5JykpICYmCi0gICAgICAgICAgICAgICAgICAgICAoKGRhdGFbaW4rMV0gPj0gJ0EnICYmIGRhdGFbaW4rMV0gPD0gJ0YnKSB8fAotICAgICAgICAgICAgICAgICAgICAgIChkYXRhW2luKzFdID49ICdhJyAmJiBkYXRhW2luKzFdIDw9ICdmJykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAoZGF0YVtpbisxXSA+PSAnMCcgJiYgZGF0YVtpbisxXSA8PSAnOScpKSkgeworICAgICAgICAgICAgZWxzZSBpZiAoKChhc2NpaV9kYXRhW2luXSA+PSAnQScgJiYgYXNjaWlfZGF0YVtpbl0gPD0gJ0YnKSB8fAorICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhW2luXSA+PSAnYScgJiYgYXNjaWlfZGF0YVtpbl0gPD0gJ2YnKSB8fAorICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhW2luXSA+PSAnMCcgJiYgYXNjaWlfZGF0YVtpbl0gPD0gJzknKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICgoYXNjaWlfZGF0YVtpbisxXSA+PSAnQScgJiYgYXNjaWlfZGF0YVtpbisxXSA8PSAnRicpIHx8CisgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGFbaW4rMV0gPj0gJ2EnICYmIGFzY2lpX2RhdGFbaW4rMV0gPD0gJ2YnKSB8fAorICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhW2luKzFdID49ICcwJyAmJiBhc2NpaV9kYXRhW2luKzFdIDw9ICc5JykpKSB7CiAgICAgICAgICAgICAgICAgLyogaGV4dmFsICovCi0gICAgICAgICAgICAgICAgY2ggPSBoZXh2YWwoZGF0YVtpbl0pIDw8IDQ7CisgICAgICAgICAgICAgICAgY2ggPSBoZXh2YWwoYXNjaWlfZGF0YVtpbl0pIDw8IDQ7CiAgICAgICAgICAgICAgICAgaW4rKzsKLSAgICAgICAgICAgICAgICBjaCB8PSBoZXh2YWwoZGF0YVtpbl0pOworICAgICAgICAgICAgICAgIGNoIHw9IGhleHZhbChhc2NpaV9kYXRhW2luXSk7CiAgICAgICAgICAgICAgICAgaW4rKzsKICAgICAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSBjaDsKICAgICAgICAgICAgIH0KQEAgLTEyODgsMjIgKzEzMDQsMjAgQEAKICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gJz0nOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGhlYWRlciAmJiBkYXRhW2luXSA9PSAnXycpIHsKKyAgICAgICAgZWxzZSBpZiAoaGVhZGVyICYmIGFzY2lpX2RhdGFbaW5dID09ICdfJykgewogICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gJyAnOwogICAgICAgICAgICAgaW4rKzsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG9kYXRhW291dF0gPSBkYXRhW2luXTsKKyAgICAgICAgICAgIG9kYXRhW291dF0gPSBhc2NpaV9kYXRhW2luXTsKICAgICAgICAgICAgIGluKys7CiAgICAgICAgICAgICBvdXQrKzsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoKHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKW9kYXRhLCBvdXQpKSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICAgICAgUHlNZW1fRnJlZShvZGF0YSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgUHlNZW1fRnJlZShvZGF0YSk7CiAgICAgcmV0dXJuIHJ2OwogfQpAQCAtMTMxOSw2MiArMTMzMyw2MiBAQAogICAgIHJldHVybiAwOwogfQogCi1QeURvY19TVFJWQVIoZG9jX2IyYV9xcCwKLSJiMmFfcXAoZGF0YSwgcXVvdGV0YWJzPTAsIGlzdGV4dD0xLCBoZWFkZXI9MCkgLT4gczsgXG5cCi0gRW5jb2RlIGEgc3RyaW5nIHVzaW5nIHF1b3RlZC1wcmludGFibGUgZW5jb2RpbmcuIFxuXAotXG5cCi1PbiBlbmNvZGluZywgd2hlbiBpc3RleHQgaXMgc2V0LCBuZXdsaW5lcyBhcmUgbm90IGVuY29kZWQsIGFuZCB3aGl0ZSBcblwKLXNwYWNlIGF0IGVuZCBvZiBsaW5lcyBpcy4gIFdoZW4gaXN0ZXh0IGlzIG5vdCBzZXQsIFxcciBhbmQgXFxuIChDUi9MRikgYXJlIFxuXAotYm90aCBlbmNvZGVkLiAgV2hlbiBxdW90ZXRhYnMgaXMgc2V0LCBzcGFjZSBhbmQgdGFicyBhcmUgZW5jb2RlZC4iKTsKLQogLyogWFhYOiBUaGlzIGlzIHJpZGljdWxvdXNseSBjb21wbGljYXRlZCB0byBiZSBiYWNrd2FyZCBjb21wYXRpYmxlCiAgKiAobW9zdGx5KSB3aXRoIHRoZSBxdW9wcmkgbW9kdWxlLiAgSXQgZG9lc24ndCByZS1jcmVhdGUgdGhlIHF1b3ByaQogICogbW9kdWxlIGJ1ZyB3aGVyZSB0ZXh0IGVuZGluZyBpbiBDUkxGIGhhcyB0aGUgQ1IgZW5jb2RlZCAqLwotc3RhdGljIFB5T2JqZWN0KgotYmluYXNjaWlfYjJhX3FwIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCisKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmIyYV9xcAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgcXVvdGV0YWJzOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorICAgIGlzdGV4dDogaW50KGNfZGVmYXVsdD0iMSIpID0gVHJ1ZQorICAgIGhlYWRlcjogaW50KGNfZGVmYXVsdD0iMCIpID0gRmFsc2UKKworRW5jb2RlIGEgc3RyaW5nIHVzaW5nIHF1b3RlZC1wcmludGFibGUgZW5jb2RpbmcuCisKK09uIGVuY29kaW5nLCB3aGVuIGlzdGV4dCBpcyBzZXQsIG5ld2xpbmVzIGFyZSBub3QgZW5jb2RlZCwgYW5kIHdoaXRlCitzcGFjZSBhdCBlbmQgb2YgbGluZXMgaXMuICBXaGVuIGlzdGV4dCBpcyBub3Qgc2V0LCBcciBhbmQgXG4gKENSL0xGKQorYXJlIGJvdGggZW5jb2RlZC4gIFdoZW4gcXVvdGV0YWJzIGlzIHNldCwgc3BhY2UgYW5kIHRhYnMgYXJlIGVuY29kZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfcXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCBxdW90ZXRhYnMsIGludCBpc3RleHQsIGludCBoZWFkZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZmYyOTkxYmE2NDBmZmYzZSBpbnB1dD03ZjJhOWFhYTAwOGU5MmIyXSovCiB7CiAgICAgUHlfc3NpemVfdCBpbiwgb3V0OwotICAgIFB5X2J1ZmZlciBwZGF0YTsKLSAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqb2RhdGE7CisgICAgdW5zaWduZWQgY2hhciAqZGF0YWJ1ZiwgKm9kYXRhOwogICAgIFB5X3NzaXplX3QgZGF0YWxlbiA9IDAsIG9kYXRhbGVuID0gMDsKICAgICBQeU9iamVjdCAqcnY7CiAgICAgdW5zaWduZWQgaW50IGxpbmVsZW4gPSAwOwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZGF0YSIsICJxdW90ZXRhYnMiLCAiaXN0ZXh0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYWRlciIsIE5VTEx9OwotICAgIGludCBpc3RleHQgPSAxOwotICAgIGludCBxdW90ZXRhYnMgPSAwOwotICAgIGludCBoZWFkZXIgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgY2g7CiAgICAgaW50IGNybGYgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgKnA7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ5KnxpaWkiLCBrd2xpc3QsICZwZGF0YSwKLSAgICAgICAgICAmcXVvdGV0YWJzLCAmaXN0ZXh0LCAmaGVhZGVyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZGF0YSA9IHBkYXRhLmJ1ZjsKLSAgICBkYXRhbGVuID0gcGRhdGEubGVuOworICAgIGRhdGFidWYgPSBkYXRhLT5idWY7CisgICAgZGF0YWxlbiA9IGRhdGEtPmxlbjsKIAogICAgIC8qIFNlZSBpZiB0aGlzIHN0cmluZyBpcyB1c2luZyBDUkxGIGxpbmUgZW5kcyAqLwogICAgIC8qIFhYWDogdGhpcyBmdW5jdGlvbiBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIGNvbnZlcnRpbmcgYWxsIG9mCiAgICAgICogdGhlIGVuZCBvZiBsaW5lcyB0byBiZSB0aGUgc2FtZSBkZXBlbmRpbmcgb24gdGhpcyBkZXRlY3Rpb24KICAgICAgKiBoZXJlICovCi0gICAgcCA9ICh1bnNpZ25lZCBjaGFyICopIG1lbWNocihkYXRhLCAnXG4nLCBkYXRhbGVuKTsKLSAgICBpZiAoKHAgIT0gTlVMTCkgJiYgKHAgPiBkYXRhKSAmJiAoKihwLTEpID09ICdccicpKQorICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSBtZW1jaHIoZGF0YWJ1ZiwgJ1xuJywgZGF0YWxlbik7CisgICAgaWYgKChwICE9IE5VTEwpICYmIChwID4gZGF0YWJ1ZikgJiYgKCoocC0xKSA9PSAnXHInKSkKICAgICAgICAgY3JsZiA9IDE7CiAKICAgICAvKiBGaXJzdCwgc2NhbiB0byBzZWUgaG93IG1hbnkgY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVuY29kZWQgKi8KICAgICBpbiA9IDA7CiAgICAgd2hpbGUgKGluIDwgZGF0YWxlbikgewotICAgICAgICBpZiAoKGRhdGFbaW5dID4gMTI2KSB8fAotICAgICAgICAgICAgKGRhdGFbaW5dID09ICc9JykgfHwKLSAgICAgICAgICAgIChoZWFkZXIgJiYgZGF0YVtpbl0gPT0gJ18nKSB8fAotICAgICAgICAgICAgKChkYXRhW2luXSA9PSAnLicpICYmIChsaW5lbGVuID09IDApICYmCi0gICAgICAgICAgICAgKGRhdGFbaW4rMV0gPT0gJ1xuJyB8fCBkYXRhW2luKzFdID09ICdccicgfHwgZGF0YVtpbisxXSA9PSAwKSkgfHwKLSAgICAgICAgICAgICghaXN0ZXh0ICYmICgoZGF0YVtpbl0gPT0gJ1xyJykgfHwgKGRhdGFbaW5dID09ICdcbicpKSkgfHwKLSAgICAgICAgICAgICgoZGF0YVtpbl0gPT0gJ1x0JyB8fCBkYXRhW2luXSA9PSAnICcpICYmIChpbiArIDEgPT0gZGF0YWxlbikpIHx8Ci0gICAgICAgICAgICAoKGRhdGFbaW5dIDwgMzMpICYmCi0gICAgICAgICAgICAgKGRhdGFbaW5dICE9ICdccicpICYmIChkYXRhW2luXSAhPSAnXG4nKSAmJgotICAgICAgICAgICAgIChxdW90ZXRhYnMgfHwgKChkYXRhW2luXSAhPSAnXHQnKSAmJiAoZGF0YVtpbl0gIT0gJyAnKSkpKSkKKyAgICAgICAgaWYgKChkYXRhYnVmW2luXSA+IDEyNikgfHwKKyAgICAgICAgICAgIChkYXRhYnVmW2luXSA9PSAnPScpIHx8CisgICAgICAgICAgICAoaGVhZGVyICYmIGRhdGFidWZbaW5dID09ICdfJykgfHwKKyAgICAgICAgICAgICgoZGF0YWJ1Zltpbl0gPT0gJy4nKSAmJiAobGluZWxlbiA9PSAwKSAmJgorICAgICAgICAgICAgIChkYXRhYnVmW2luKzFdID09ICdcbicgfHwgZGF0YWJ1ZltpbisxXSA9PSAnXHInIHx8IGRhdGFidWZbaW4rMV0gPT0gMCkpIHx8CisgICAgICAgICAgICAoIWlzdGV4dCAmJiAoKGRhdGFidWZbaW5dID09ICdccicpIHx8IChkYXRhYnVmW2luXSA9PSAnXG4nKSkpIHx8CisgICAgICAgICAgICAoKGRhdGFidWZbaW5dID09ICdcdCcgfHwgZGF0YWJ1Zltpbl0gPT0gJyAnKSAmJiAoaW4gKyAxID09IGRhdGFsZW4pKSB8fAorICAgICAgICAgICAgKChkYXRhYnVmW2luXSA8IDMzKSAmJgorICAgICAgICAgICAgIChkYXRhYnVmW2luXSAhPSAnXHInKSAmJiAoZGF0YWJ1Zltpbl0gIT0gJ1xuJykgJiYKKyAgICAgICAgICAgICAocXVvdGV0YWJzIHx8ICgoZGF0YWJ1Zltpbl0gIT0gJ1x0JykgJiYgKGRhdGFidWZbaW5dICE9ICcgJykpKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgobGluZWxlbiArIDMpID49IE1BWExJTkVTSVpFKSB7CiAgICAgICAgICAgICAgICAgbGluZWxlbiA9IDA7CkBAIC0xMzg5LDI2ICsxNDAzLDI2IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoaXN0ZXh0ICYmCi0gICAgICAgICAgICAgICAgKChkYXRhW2luXSA9PSAnXG4nKSB8fAotICAgICAgICAgICAgICAgICAoKGluKzEgPCBkYXRhbGVuKSAmJiAoZGF0YVtpbl0gPT0gJ1xyJykgJiYKLSAgICAgICAgICAgICAgICAgKGRhdGFbaW4rMV0gPT0gJ1xuJykpKSkKKyAgICAgICAgICAgICAgICAoKGRhdGFidWZbaW5dID09ICdcbicpIHx8CisgICAgICAgICAgICAgICAgICgoaW4rMSA8IGRhdGFsZW4pICYmIChkYXRhYnVmW2luXSA9PSAnXHInKSAmJgorICAgICAgICAgICAgICAgICAoZGF0YWJ1ZltpbisxXSA9PSAnXG4nKSkpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGxpbmVsZW4gPSAwOwogICAgICAgICAgICAgICAgIC8qIFByb3RlY3QgYWdhaW5zdCB3aGl0ZXNwYWNlIG9uIGVuZCBvZiBsaW5lICovCi0gICAgICAgICAgICAgICAgaWYgKGluICYmICgoZGF0YVtpbi0xXSA9PSAnICcpIHx8IChkYXRhW2luLTFdID09ICdcdCcpKSkKKyAgICAgICAgICAgICAgICBpZiAoaW4gJiYgKChkYXRhYnVmW2luLTFdID09ICcgJykgfHwgKGRhdGFidWZbaW4tMV0gPT0gJ1x0JykpKQogICAgICAgICAgICAgICAgICAgICBvZGF0YWxlbiArPSAyOwogICAgICAgICAgICAgICAgIGlmIChjcmxmKQogICAgICAgICAgICAgICAgICAgICBvZGF0YWxlbiArPSAyOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgb2RhdGFsZW4gKz0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZGF0YVtpbl0gPT0gJ1xyJykKKyAgICAgICAgICAgICAgICBpZiAoZGF0YWJ1Zltpbl0gPT0gJ1xyJykKICAgICAgICAgICAgICAgICAgICAgaW4gKz0gMjsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGluKys7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoKGluICsgMSAhPSBkYXRhbGVuKSAmJgotICAgICAgICAgICAgICAgICAgICAoZGF0YVtpbisxXSAhPSAnXG4nKSAmJgorICAgICAgICAgICAgICAgICAgICAoZGF0YWJ1ZltpbisxXSAhPSAnXG4nKSAmJgogICAgICAgICAgICAgICAgICAgICAobGluZWxlbiArIDEpID49IE1BWExJTkVTSVpFKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmVsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICBpZiAoY3JsZikKQEAgLTE0MjksNyArMTQ0Myw2IEBACiAgICAgICovCiAgICAgb2RhdGEgPSAodW5zaWduZWQgY2hhciAqKSBQeU1lbV9NYWxsb2Mob2RhdGFsZW4pOwogICAgIGlmIChvZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTQzNywxNyArMTQ1MCwxNyBAQAogCiAgICAgaW4gPSBvdXQgPSBsaW5lbGVuID0gMDsKICAgICB3aGlsZSAoaW4gPCBkYXRhbGVuKSB7Ci0gICAgICAgIGlmICgoZGF0YVtpbl0gPiAxMjYpIHx8Ci0gICAgICAgICAgICAoZGF0YVtpbl0gPT0gJz0nKSB8fAotICAgICAgICAgICAgKGhlYWRlciAmJiBkYXRhW2luXSA9PSAnXycpIHx8Ci0gICAgICAgICAgICAoKGRhdGFbaW5dID09ICcuJykgJiYgKGxpbmVsZW4gPT0gMCkgJiYKLSAgICAgICAgICAgICAoZGF0YVtpbisxXSA9PSAnXG4nIHx8IGRhdGFbaW4rMV0gPT0gJ1xyJyB8fCBkYXRhW2luKzFdID09IDApKSB8fAotICAgICAgICAgICAgKCFpc3RleHQgJiYgKChkYXRhW2luXSA9PSAnXHInKSB8fCAoZGF0YVtpbl0gPT0gJ1xuJykpKSB8fAotICAgICAgICAgICAgKChkYXRhW2luXSA9PSAnXHQnIHx8IGRhdGFbaW5dID09ICcgJykgJiYgKGluICsgMSA9PSBkYXRhbGVuKSkgfHwKLSAgICAgICAgICAgICgoZGF0YVtpbl0gPCAzMykgJiYKLSAgICAgICAgICAgICAoZGF0YVtpbl0gIT0gJ1xyJykgJiYgKGRhdGFbaW5dICE9ICdcbicpICYmCisgICAgICAgIGlmICgoZGF0YWJ1Zltpbl0gPiAxMjYpIHx8CisgICAgICAgICAgICAoZGF0YWJ1Zltpbl0gPT0gJz0nKSB8fAorICAgICAgICAgICAgKGhlYWRlciAmJiBkYXRhYnVmW2luXSA9PSAnXycpIHx8CisgICAgICAgICAgICAoKGRhdGFidWZbaW5dID09ICcuJykgJiYgKGxpbmVsZW4gPT0gMCkgJiYKKyAgICAgICAgICAgICAoZGF0YWJ1ZltpbisxXSA9PSAnXG4nIHx8IGRhdGFidWZbaW4rMV0gPT0gJ1xyJyB8fCBkYXRhYnVmW2luKzFdID09IDApKSB8fAorICAgICAgICAgICAgKCFpc3RleHQgJiYgKChkYXRhYnVmW2luXSA9PSAnXHInKSB8fCAoZGF0YWJ1Zltpbl0gPT0gJ1xuJykpKSB8fAorICAgICAgICAgICAgKChkYXRhYnVmW2luXSA9PSAnXHQnIHx8IGRhdGFidWZbaW5dID09ICcgJykgJiYgKGluICsgMSA9PSBkYXRhbGVuKSkgfHwKKyAgICAgICAgICAgICgoZGF0YWJ1Zltpbl0gPCAzMykgJiYKKyAgICAgICAgICAgICAoZGF0YWJ1Zltpbl0gIT0gJ1xyJykgJiYgKGRhdGFidWZbaW5dICE9ICdcbicpICYmCiAgICAgICAgICAgICAgKHF1b3RldGFicyB8fAotICAgICAgICAgICAgKCFxdW90ZXRhYnMgJiYgKChkYXRhW2luXSAhPSAnXHQnKSAmJiAoZGF0YVtpbl0gIT0gJyAnKSkpKSkpCisgICAgICAgICAgICAoIXF1b3RldGFicyAmJiAoKGRhdGFidWZbaW5dICE9ICdcdCcpICYmIChkYXRhYnVmW2luXSAhPSAnICcpKSkpKSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKChsaW5lbGVuICsgMyApPj0gTUFYTElORVNJWkUpIHsKICAgICAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSAnPSc7CkBAIC0xNDU2LDE2ICsxNDY5LDE2IEBACiAgICAgICAgICAgICAgICAgbGluZWxlbiA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSAnPSc7Ci0gICAgICAgICAgICB0b19oZXgoZGF0YVtpbl0sICZvZGF0YVtvdXRdKTsKKyAgICAgICAgICAgIHRvX2hleChkYXRhYnVmW2luXSwgJm9kYXRhW291dF0pOwogICAgICAgICAgICAgb3V0ICs9IDI7CiAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgbGluZWxlbiArPSAzOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKGlzdGV4dCAmJgotICAgICAgICAgICAgICAgICgoZGF0YVtpbl0gPT0gJ1xuJykgfHwKLSAgICAgICAgICAgICAgICAgKChpbisxIDwgZGF0YWxlbikgJiYgKGRhdGFbaW5dID09ICdccicpICYmCi0gICAgICAgICAgICAgICAgIChkYXRhW2luKzFdID09ICdcbicpKSkpCisgICAgICAgICAgICAgICAgKChkYXRhYnVmW2luXSA9PSAnXG4nKSB8fAorICAgICAgICAgICAgICAgICAoKGluKzEgPCBkYXRhbGVuKSAmJiAoZGF0YWJ1Zltpbl0gPT0gJ1xyJykgJiYKKyAgICAgICAgICAgICAgICAgKGRhdGFidWZbaW4rMV0gPT0gJ1xuJykpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBsaW5lbGVuID0gMDsKICAgICAgICAgICAgICAgICAvKiBQcm90ZWN0IGFnYWluc3Qgd2hpdGVzcGFjZSBvbiBlbmQgb2YgbGluZSAqLwpAQCAtMTQ3OCwxNCArMTQ5MSwxNCBAQAogCiAgICAgICAgICAgICAgICAgaWYgKGNybGYpIG9kYXRhW291dCsrXSA9ICdccic7CiAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gJ1xuJzsKLSAgICAgICAgICAgICAgICBpZiAoZGF0YVtpbl0gPT0gJ1xyJykKKyAgICAgICAgICAgICAgICBpZiAoZGF0YWJ1Zltpbl0gPT0gJ1xyJykKICAgICAgICAgICAgICAgICAgICAgaW4gKz0gMjsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGluKys7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoKGluICsgMSAhPSBkYXRhbGVuKSAmJgotICAgICAgICAgICAgICAgICAgICAoZGF0YVtpbisxXSAhPSAnXG4nKSAmJgorICAgICAgICAgICAgICAgICAgICAoZGF0YWJ1ZltpbisxXSAhPSAnXG4nKSAmJgogICAgICAgICAgICAgICAgICAgICAobGluZWxlbiArIDEpID49IE1BWExJTkVTSVpFKSB7CiAgICAgICAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9ICc9JzsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNybGYpIG9kYXRhW291dCsrXSA9ICdccic7CkBAIC0xNDkzLDIyICsxNTA2LDIwIEBACiAgICAgICAgICAgICAgICAgICAgIGxpbmVsZW4gPSAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBsaW5lbGVuKys7Ci0gICAgICAgICAgICAgICAgaWYgKGhlYWRlciAmJiBkYXRhW2luXSA9PSAnICcpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGVhZGVyICYmIGRhdGFidWZbaW5dID09ICcgJykgewogICAgICAgICAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSAnXyc7CiAgICAgICAgICAgICAgICAgICAgIGluKys7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSBkYXRhW2luKytdOworICAgICAgICAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSBkYXRhYnVmW2luKytdOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBpZiAoKHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKW9kYXRhLCBvdXQpKSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICAgICAgUHlNZW1fRnJlZShvZGF0YSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgUHlNZW1fRnJlZShvZGF0YSk7CiAgICAgcmV0dXJuIHJ2OwogfQpAQCAtMTUxNiwyNSArMTUyNywyNCBAQAogLyogTGlzdCBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlICovCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgYmluYXNjaWlfbW9kdWxlX21ldGhvZHNbXSA9IHsKLSAgICB7ImEyYl91dSIsICAgICBiaW5hc2NpaV9hMmJfdXUsICAgICBNRVRIX1ZBUkFSR1MsIGRvY19hMmJfdXV9LAotICAgIHsiYjJhX3V1IiwgICAgIGJpbmFzY2lpX2IyYV91dSwgICAgIE1FVEhfVkFSQVJHUywgZG9jX2IyYV91dX0sCi0gICAgeyJhMmJfYmFzZTY0IiwgYmluYXNjaWlfYTJiX2Jhc2U2NCwgTUVUSF9WQVJBUkdTLCBkb2NfYTJiX2Jhc2U2NH0sCi0gICAgeyJiMmFfYmFzZTY0IiwgYmluYXNjaWlfYjJhX2Jhc2U2NCwgTUVUSF9WQVJBUkdTLCBkb2NfYjJhX2Jhc2U2NH0sCi0gICAgeyJhMmJfaHF4IiwgICAgYmluYXNjaWlfYTJiX2hxeCwgICAgTUVUSF9WQVJBUkdTLCBkb2NfYTJiX2hxeH0sCi0gICAgeyJiMmFfaHF4IiwgICAgYmluYXNjaWlfYjJhX2hxeCwgICAgTUVUSF9WQVJBUkdTLCBkb2NfYjJhX2hxeH0sCi0gICAgeyJiMmFfaGV4IiwgICAgYmluYXNjaWlfaGV4bGlmeSwgICAgTUVUSF9WQVJBUkdTLCBkb2NfaGV4bGlmeX0sCi0gICAgeyJhMmJfaGV4IiwgICAgYmluYXNjaWlfdW5oZXhsaWZ5LCAgTUVUSF9WQVJBUkdTLCBkb2NfdW5oZXhsaWZ5fSwKLSAgICB7ImhleGxpZnkiLCAgICBiaW5hc2NpaV9oZXhsaWZ5LCAgICBNRVRIX1ZBUkFSR1MsIGRvY19oZXhsaWZ5fSwKLSAgICB7InVuaGV4bGlmeSIsICBiaW5hc2NpaV91bmhleGxpZnksICBNRVRIX1ZBUkFSR1MsIGRvY191bmhleGxpZnl9LAotICAgIHsicmxlY29kZV9ocXgiLCAgIGJpbmFzY2lpX3JsZWNvZGVfaHF4LCBNRVRIX1ZBUkFSR1MsIGRvY19ybGVjb2RlX2hxeH0sCi0gICAgeyJybGVkZWNvZGVfaHF4IiwgYmluYXNjaWlfcmxlZGVjb2RlX2hxeCwgTUVUSF9WQVJBUkdTLAotICAgICBkb2NfcmxlZGVjb2RlX2hxeH0sCi0gICAgeyJjcmNfaHF4IiwgICAgYmluYXNjaWlfY3JjX2hxeCwgICAgTUVUSF9WQVJBUkdTLCBkb2NfY3JjX2hxeH0sCi0gICAgeyJjcmMzMiIsICAgICAgYmluYXNjaWlfY3JjMzIsICAgICAgTUVUSF9WQVJBUkdTLCBkb2NfY3JjMzJ9LAotICAgIHsiYTJiX3FwIiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2EyYl9xcCwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgIGRvY19hMmJfcXB9LAotICAgIHsiYjJhX3FwIiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2IyYV9xcCwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgIGRvY19iMmFfcXB9LAorICAgIEJJTkFTQ0lJX0EyQl9VVV9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9CMkFfVVVfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQTJCX0JBU0U2NF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9CMkFfQkFTRTY0X01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0EyQl9IUVhfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQjJBX0hRWF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9BMkJfSEVYX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0IyQV9IRVhfTUVUSE9EREVGCisgICAgeyJ1bmhleGxpZnkiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX2hleCwgTUVUSF9WQVJBUkdTLAorICAgICAgICBiaW5hc2NpaV9hMmJfaGV4X19kb2NfX30sCisgICAgeyJoZXhsaWZ5IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2IyYV9oZXgsIE1FVEhfVkFSQVJHUywKKyAgICAgICAgYmluYXNjaWlfYjJhX2hleF9fZG9jX199LAorICAgIEJJTkFTQ0lJX1JMRUNPREVfSFFYX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX1JMRURFQ09ERV9IUVhfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQ1JDX0hRWF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9DUkMzMl9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9BMkJfUVBfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQjJBX1FQX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYwppbmRleCA5ZTllOTZjLi4wMTNjM2ZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19jbi5jCkBAIC0yMywxOCArMjMsMzMgQEAKICAqIEE4NDQgICAgICAgICB1bmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgIFUrMjAxNSBIT1JJWk9OVEFMIEJBUgogICovCiAKLSNkZWZpbmUgR0JLX0RFQ09ERShkYzEsIGRjMiwgYXNzaSkgXAotICAgIGlmICgoZGMxKSA9PSAweGExICYmIChkYzIpID09IDB4YWEpIChhc3NpKSA9IDB4MjAxNDsgXAotICAgIGVsc2UgaWYgKChkYzEpID09IDB4YTggJiYgKGRjMikgPT0gMHg0NCkgKGFzc2kpID0gMHgyMDE1OyBcCi0gICAgZWxzZSBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGE0KSAoYXNzaSkgPSAweDAwYjc7IFwKLSAgICBlbHNlIFRSWU1BUF9ERUMoZ2IyMzEyLCBhc3NpLCBkYzEgXiAweDgwLCBkYzIgXiAweDgwKTsgXAotICAgIGVsc2UgVFJZTUFQX0RFQyhnYmtleHQsIGFzc2ksIGRjMSwgZGMyKTsKKyNkZWZpbmUgR0JLX0RFQ09ERShkYzEsIGRjMiwgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoZGMxKSA9PSAweGExICYmIChkYzIpID09IDB4YWEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDE0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChkYzEpID09IDB4YTggJiYgKGRjMikgPT0gMHg0NCkgeyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDE1KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChkYzEpID09IDB4YTEgJiYgKGRjMikgPT0gMHhhNCkgeyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgwMGI3KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoZ2IyMzEyLCBkZWNvZGVkLCBkYzEgXiAweDgwLCBkYzIgXiAweDgwKSkgeyBcCisgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoZ2JrZXh0LCBkZWNvZGVkLCBkYzEsIGRjMikpIHsgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKLSNkZWZpbmUgR0JLX0VOQ09ERShjb2RlLCBhc3NpKSBcCi0gICAgaWYgKChjb2RlKSA9PSAweDIwMTQpIChhc3NpKSA9IDB4YTFhYTsgXAotICAgIGVsc2UgaWYgKChjb2RlKSA9PSAweDIwMTUpIChhc3NpKSA9IDB4YTg0NDsgXAotICAgIGVsc2UgaWYgKChjb2RlKSA9PSAweDAwYjcpIChhc3NpKSA9IDB4YTFhNDsgXAotICAgIGVsc2UgaWYgKChjb2RlKSAhPSAweDMwZmIgJiYgVFJZTUFQX0VOQ19DT05EKGdiY29tbW9uLCBhc3NpLCBjb2RlKSk7CisjZGVmaW5lIEdCS19FTkNPREUoY29kZSwgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGNvZGUpID09IDB4MjAxNCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweGExYWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoY29kZSkgPT0gMHgyMDE1KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHhhODQ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGNvZGUpID09IDB4MDBiNykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4YTFhNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjb2RlKSAhPSAweDMwZmIgJiYgVFJZTUFQX0VOQyhnYmNvbW1vbiwgYXNzaSwgY29kZSkpIHsgXAorICAgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiAvKgogICogR0IyMzEyIGNvZGVjCkBAIC00MiwyNyArNTcsMzEgQEAKIAogRU5DT0RFUihnYjIzMTIpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCi0gICAgICAgIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSAvKiBNU0Igc2V0OiBHQksgKi8KICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE9VVDEoKGNvZGUgPj4gOCkgfCAweDgwKQotICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CisgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTcyLDIwICs5MSwyMSBAQAogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICoqaW5idWY7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgVFJZTUFQX0RFQyhnYjIzMTIsICoqb3V0YnVmLCBjIF4gMHg4MCwgSU4yIF4gMHg4MCkgewotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhnYjIzMTIsIGRlY29kZWQsIGMgXiAweDgwLCBJTkJZVEUyIF4gMHg4MCkpIHsKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtOTgsMjggKzExOCwzMSBAQAogCiBFTkNPREVSKGdiaykKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAogICAgICAgICBHQktfRU5DT0RFKGMsIGNvZGUpCi0gICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0KLSAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCi0gICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpKSAvKiBNU0Igc2V0OiBHQksgKi8KICAgICAgICAgZWxzZQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpIHwgMHg4MCkgLyogTVNCIHVuc2V0OiBHQjIzMTIgKi8KLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgT1VUQllURTEoKGNvZGUgPj4gOCkgfCAweDgwKTsKKyAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpKTsgLyogTVNCIHNldDogR0JLICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikgfCAweDgwKTsgLyogTVNCIHVuc2V0OiBHQjIzMTIgKi8KKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTEyOCwyMiArMTUxLDIyIEBACiBERUNPREVSKGdiaykKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKIAotICAgICAgICBHQktfREVDT0RFKGMsIElOMiwgKipvdXRidWYpCi0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIEdCS19ERUNPREUoYywgSU5CWVRFMiwgd3JpdGVyKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIE5FWFRfSU4oMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xNTYsNzIgKzE3OSw2MyBAQAogCiBFTkNPREVSKGdiMTgwMzApCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdWNzNF90IGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKGMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgREVDT0RFX1NVUlJPR0FURShjKQotICAgICAgICBpZiAoYyA+IDB4MTBGRkZGKQotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0gICAgICAgICAgICByZXR1cm4gMjsgLyogc3Vycm9nYXRlcyBwYWlyICovCi0jZWxzZQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0jZW5kaWYKLSAgICAgICAgZWxzZSBpZiAoYyA+PSAweDEwMDAwKSB7Ci0gICAgICAgICAgICB1Y3M0X3QgdGMgPSBjIC0gMHgxMDAwMDsKKyAgICAgICAgaWYgKGMgPj0gMHgxMDAwMCkgeworICAgICAgICAgICAgUHlfVUNTNCB0YyA9IGMgLSAweDEwMDAwOworICAgICAgICAgICAgYXNzZXJ0IChjIDw9IDB4MTBGRkZGKTsKIAotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoNCkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDQpOwogCi0gICAgICAgICAgICBPVVQ0KCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApCisgICAgICAgICAgICBPVVRCWVRFNCgodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKTsKICAgICAgICAgICAgIHRjIC89IDEwOwotICAgICAgICAgICAgT1VUMygodW5zaWduZWQgY2hhcikodGMgJSAxMjYpICsgMHg4MSkKKyAgICAgICAgICAgIE9VVEJZVEUzKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEyNikgKyAweDgxKTsKICAgICAgICAgICAgIHRjIC89IDEyNjsKLSAgICAgICAgICAgIE9VVDIoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCkKKyAgICAgICAgICAgIE9VVEJZVEUyKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApOwogICAgICAgICAgICAgdGMgLz0gMTA7Ci0gICAgICAgICAgICBPVVQxKCh1bnNpZ25lZCBjaGFyKSh0YyArIDB4OTApKQorICAgICAgICAgICAgT1VUQllURTEoKHVuc2lnbmVkIGNoYXIpKHRjICsgMHg5MCkpOwogCi0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDIKLSAgICAgICAgICAgIE5FWFQoMiwgNCkgLyogc3Vycm9nYXRlcyBwYWlyICovCi0jZWxzZQotICAgICAgICAgICAgTkVYVCgxLCA0KQotI2VuZGlmCisgICAgICAgICAgICBORVhUKDEsIDQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAogICAgICAgICBHQktfRU5DT0RFKGMsIGNvZGUpCi0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhnYjE4MDMwZXh0LCBjb2RlLCBjKTsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhnYjE4MDMwZXh0LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgX2diMTgwMzBfdG9fdW5pYm1wX3JhbmdlcyAqdXRycmFuZ2U7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDQpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRig0KTsKIAogICAgICAgICAgICAgZm9yICh1dHJyYW5nZSA9IGdiMTgwMzBfdG9fdW5pYm1wX3JhbmdlczsKICAgICAgICAgICAgICAgICAgdXRycmFuZ2UtPmZpcnN0ICE9IDA7CiAgICAgICAgICAgICAgICAgIHV0cnJhbmdlKyspCiAgICAgICAgICAgICAgICAgaWYgKHV0cnJhbmdlLT5maXJzdCA8PSBjICYmCiAgICAgICAgICAgICAgICAgICAgIGMgPD0gdXRycmFuZ2UtPmxhc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSB0YzsKKyAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCB0YzsKIAogICAgICAgICAgICAgICAgICAgICB0YyA9IGMgLSB1dHJyYW5nZS0+Zmlyc3QgKwogICAgICAgICAgICAgICAgICAgICAgICAgIHV0cnJhbmdlLT5iYXNlOwogCi0gICAgICAgICAgICAgICAgICAgIE9VVDQoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCkKKyAgICAgICAgICAgICAgICAgICAgT1VUQllURTQoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCk7CiAgICAgICAgICAgICAgICAgICAgIHRjIC89IDEwOwotICAgICAgICAgICAgICAgICAgICBPVVQzKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEyNikgKyAweDgxKQorICAgICAgICAgICAgICAgICAgICBPVVRCWVRFMygodW5zaWduZWQgY2hhcikodGMgJSAxMjYpICsgMHg4MSk7CiAgICAgICAgICAgICAgICAgICAgIHRjIC89IDEyNjsKLSAgICAgICAgICAgICAgICAgICAgT1VUMigodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKQorICAgICAgICAgICAgICAgICAgICBPVVRCWVRFMigodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKTsKICAgICAgICAgICAgICAgICAgICAgdGMgLz0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIE9VVDEoKHVuc2lnbmVkIGNoYXIpdGMgKyAweDgxKQorICAgICAgICAgICAgICAgICAgICBPVVRCWVRFMSgodW5zaWduZWQgY2hhcil0YyArIDB4ODEpOwogCi0gICAgICAgICAgICAgICAgICAgIE5FWFQoMSwgNCkKKyAgICAgICAgICAgICAgICAgICAgTkVYVCgxLCA0KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yMzAsMTMgKzI0NCwxMyBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKKyAgICAgICAgT1VUQllURTEoKGNvZGUgPj4gOCkgfCAweDgwKTsKICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikpIC8qIE1TQiBzZXQ6IEdCSyBvciBHQjE4MDMwZXh0ICovCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpKTsgLyogTVNCIHNldDogR0JLIG9yIEdCMTgwMzBleHQgKi8KICAgICAgICAgZWxzZQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpIHwgMHg4MCkgLyogTVNCIHVuc2V0OiBHQjIzMTIgKi8KKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikgfCAweDgwKTsgLyogTVNCIHVuc2V0OiBHQjIzMTIgKi8KIAotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0yNDUsNjEgKzI1OSw2MiBAQAogREVDT0RFUihnYjE4MDMwKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMSwgYzI7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMSwgYzI7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKLSAgICAgICAgYzIgPSBJTjI7CisgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgaWYgKGMyID49IDB4MzAgJiYgYzIgPD0gMHgzOSkgeyAvKiA0IGJ5dGVzIHNlcSAqLwogICAgICAgICAgICAgY29uc3Qgc3RydWN0IF9nYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXMgKnV0cjsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzMsIGM0OwotICAgICAgICAgICAgdWNzNF90IGxzZXE7CisgICAgICAgICAgICBQeV9VQ1M0IGxzZXE7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoNCkKLSAgICAgICAgICAgIGMzID0gSU4zOwotICAgICAgICAgICAgYzQgPSBJTjQ7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDQpOworICAgICAgICAgICAgYzMgPSBJTkJZVEUzOworICAgICAgICAgICAgYzQgPSBJTkJZVEU0OwogICAgICAgICAgICAgaWYgKGMgPCAweDgxIHx8IGMzIDwgMHg4MSB8fCBjNCA8IDB4MzAgfHwgYzQgPiAweDM5KQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgYyAtPSAweDgxOyAgYzIgLT0gMHgzMDsKICAgICAgICAgICAgIGMzIC09IDB4ODE7IGM0IC09IDB4MzA7CiAKICAgICAgICAgICAgIGlmIChjIDwgNCkgeyAvKiBVKzAwODAgLSBVK0ZGRkYgKi8KLSAgICAgICAgICAgICAgICBsc2VxID0gKCh1Y3M0X3QpYyAqIDEwICsgYzIpICogMTI2MCArCi0gICAgICAgICAgICAgICAgICAgICh1Y3M0X3QpYzMgKiAxMCArIGM0OworICAgICAgICAgICAgICAgIGxzZXEgPSAoKFB5X1VDUzQpYyAqIDEwICsgYzIpICogMTI2MCArCisgICAgICAgICAgICAgICAgICAgIChQeV9VQ1M0KWMzICogMTAgKyBjNDsKICAgICAgICAgICAgICAgICBpZiAobHNlcSA8IDM5NDIwKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodXRyID0gZ2IxODAzMF90b191bmlibXBfcmFuZ2VzOwogICAgICAgICAgICAgICAgICAgICAgICAgIGxzZXEgPj0gKHV0ciArIDEpLT5iYXNlOwogICAgICAgICAgICAgICAgICAgICAgICAgIHV0cisrKSA7Ci0gICAgICAgICAgICAgICAgICAgIE9VVDEodXRyLT5maXJzdCAtIHV0ci0+YmFzZSArIGxzZXEpCi0gICAgICAgICAgICAgICAgICAgIE5FWFQoNCwgMSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUih1dHItPmZpcnN0IC0gdXRyLT5iYXNlICsgbHNlcSk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oNCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMTUpIHsgLyogVSsxMDAwMCAtIFUrMTBGRkZGICovCi0gICAgICAgICAgICAgICAgbHNlcSA9IDB4MTAwMDAgKyAoKCh1Y3M0X3QpYy0xNSkgKiAxMCArIGMyKQotICAgICAgICAgICAgICAgICAgICAqIDEyNjAgKyAodWNzNF90KWMzICogMTAgKyBjNDsKKyAgICAgICAgICAgICAgICBsc2VxID0gMHgxMDAwMCArICgoKFB5X1VDUzQpYy0xNSkgKiAxMCArIGMyKQorICAgICAgICAgICAgICAgICAgICAqIDEyNjAgKyAoUHlfVUNTNCljMyAqIDEwICsgYzQ7CiAgICAgICAgICAgICAgICAgaWYgKGxzZXEgPD0gMHgxMEZGRkYpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEVVQ1M0KGxzZXEpOwotICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDQpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIobHNlcSk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oNCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAKLSAgICAgICAgR0JLX0RFQ09ERShjLCBjMiwgKipvdXRidWYpCi0gICAgICAgIGVsc2UgVFJZTUFQX0RFQyhnYjE4MDMwZXh0LCAqKm91dGJ1ZiwgYywgYzIpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBHQktfREVDT0RFKGMsIGMyLCB3cml0ZXIpCisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoZ2IxODAzMGV4dCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMzE5LDQ4ICszMzQsNTEgQEAKIEVOQ09ERVJfUkVTRVQoaHopCiB7CiAgICAgaWYgKHN0YXRlLT5pICE9IDApIHsKLSAgICAgICAgV1JJVEUyKCd+JywgJ30nKQorICAgICAgICBXUklURUJZVEUyKCd+JywgJ30nKTsKICAgICAgICAgc3RhdGUtPmkgPSAwOwotICAgICAgICBORVhUX09VVCgyKQorICAgICAgICBORVhUX09VVCgyKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVOQ09ERVIoaHopCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKICAgICAgICAgICAgIGlmIChzdGF0ZS0+aSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFdSSVRFMygnficsICd9JywgKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgICAgICBORVhUKDEsIDMpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMygnficsICd9JywgKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICAgICAgTkVYVCgxLCAzKTsKICAgICAgICAgICAgICAgICBzdGF0ZS0+aSA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFVDUzRJTlZBTElEKGMpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApIC8qIE1TQiBzZXQ6IEdCSyAqLwogICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgaWYgKHN0YXRlLT5pID09IDApIHsKLSAgICAgICAgICAgIFdSSVRFNCgnficsICd7JywgY29kZSA+PiA4LCBjb2RlICYgMHhmZikKLSAgICAgICAgICAgIE5FWFQoMSwgNCkKKyAgICAgICAgICAgIFdSSVRFQllURTQoJ34nLCAneycsIGNvZGUgPj4gOCwgY29kZSAmIDB4ZmYpOworICAgICAgICAgICAgTkVYVCgxLCA0KTsKICAgICAgICAgICAgIHN0YXRlLT5pID0gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFdSSVRFMihjb2RlID4+IDgsIGNvZGUgJiAweGZmKQotICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgV1JJVEVCWVRFMihjb2RlID4+IDgsIGNvZGUgJiAweGZmKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM4MiwxNSArNDAwLDE2IEBACiBERUNPREVSKGh6KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjID09ICd+JykgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMiA9IElOMjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIgPSBJTkJZVEUyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogICAgICAgICAgICAgaWYgKGMyID09ICd+JykgewotICAgICAgICAgICAgICAgIFdSSVRFMSgnficpCi0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoJ34nKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoYzIgPT0gJ3snICYmIHN0YXRlLT5pID09IDApCkBAIC00MDEsNyArNDIwLDcgQEAKICAgICAgICAgICAgICAgICA7IC8qIGxpbmUtY29udGludWF0aW9uICovCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBORVhUKDIsIDApOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTQwOSwxNCArNDI4LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoc3RhdGUtPmkgPT0gMCkgeyAvKiBBU0NJSSBtb2RlICovCi0gICAgICAgICAgICBXUklURTEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeyAvKiBHQiBtb2RlICovCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKQotICAgICAgICAgICAgVFJZTUFQX0RFQyhnYjIzMTIsICoqb3V0YnVmLCBjLCBJTjIpIHsKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoZ2IyMzEyLCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaGsuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaGsuYwppbmRleCBkM2FkMDRiLi5iN2E3ZWJkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2hrLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19oay5jCkBAIC0zOCwzNSArMzgsMzkgQEAKIAogRU5DT0RFUihiaWc1aGtzY3MpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdWNzNF90IGMgPSAqKmluYnVmOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKICAgICAgICAgUHlfc3NpemVfdCBpbnNpemU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSk7CiAgICAgICAgICAgICAqKm91dGJ1ZiA9ICh1bnNpZ25lZCBjaGFyKWM7Ci0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBERUNPREVfU1VSUk9HQVRFKGMpCi0gICAgICAgIGluc2l6ZSA9IEdFVF9JTlNJWkUoYyk7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaW5zaXplID0gMTsKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgaWYgKGMgPCAweDEwMDAwKSB7Ci0gICAgICAgICAgICBUUllNQVBfRU5DKGJpZzVoa3Njc19ibXAsIGNvZGUsIGMpIHsKKyAgICAgICAgICAgIGlmIChUUllNQVBfRU5DKGJpZzVoa3Njc19ibXAsIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gTVVMVElDKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmxlZnQgPj0gMiAmJgorICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IGMyOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPj0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gSU5DSEFSMjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmxlbiAtICppbnBvcyA+PSAyICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAoKGMgJiAweGZmZGYpID09IDB4MDBjYSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICgoKCppbmJ1ZilbMV0gJiAweGZmZjcpID09IDB4MDMwNCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICgoYzIgJiAweGZmZjcpID09IDB4MDMwNCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBiaWc1aGtzY3NfcGFpcmVuY190YWJsZVsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGMgPj4gNCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCppbmJ1ZilbMV0gPj4gMykpICYgM107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjMiA+PiAzKSkgJiAzXTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2l6ZSA9IDI7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5sZWZ0IDwgMiAmJgorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmxlbiAtICppbnBvcyA8IDIgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShmbGFncyAmIE1CRU5DX0ZMVVNIKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtNzcsMjEgKzgxLDI1IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYyk7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA8IDB4MjAwMDApCiAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogICAgICAgICBlbHNlIGlmIChjIDwgMHgzMDAwMCkgewotICAgICAgICAgICAgVFJZTUFQX0VOQyhiaWc1aGtzY3Nfbm9uYm1wLCBjb2RlLCBjICYgMHhmZmZmKTsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIGluc2l6ZTsKKyAgICAgICAgICAgIGlmIChUUllNQVBfRU5DKGJpZzVoa3Njc19ub25ibXAsIGNvZGUsIGMgJiAweGZmZmYpKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAKLSAgICAgICAgT1VUMShjb2RlID4+IDgpCi0gICAgICAgIE9VVDIoY29kZSAmIDB4RkYpCi0gICAgICAgIE5FWFQoaW5zaXplLCAyKQorICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhGRik7CisgICAgICAgIE5FWFQoaW5zaXplLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTEwMiwzMyArMTEwLDMyIEBACiBERUNPREVSKGJpZzVoa3NjcykKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0gICAgICAgIHVjczRfdCBkZWNvZGVkOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKLSAgICAgICAgaWYgKDB4YzYgPiBjIHx8IGMgPiAweGM4IHx8IChjIDwgMHhjNyAmJiBJTjIgPCAweGExKSkgewotICAgICAgICAgICAgVFJZTUFQX0RFQyhiaWc1LCAqKm91dGJ1ZiwgYywgSU4yKSB7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBpZiAoMHhjNiA+IGMgfHwgYyA+IDB4YzggfHwgKGMgPCAweGM3ICYmIElOQllURTIgPCAweGExKSkgeworICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoYmlnNSwgZGVjb2RlZCwgYywgSU5CWVRFMikpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBUUllNQVBfREVDKGJpZzVoa3NjcywgZGVjb2RlZCwgYywgSU4yKQorICAgICAgICBpZiAoVFJZTUFQX0RFQyhiaWc1aGtzY3MsIGRlY29kZWQsIGMsIElOQllURTIpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgcyA9IEJIMlMoYywgSU4yKTsKKyAgICAgICAgICAgIGludCBzID0gQkgyUyhjLCBJTkJZVEUyKTsKICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhpbnRiYXNlOwogCiAgICAgICAgICAgICBhc3NlcnQoMHg4NyA8PSBjICYmIGMgPD0gMHhmZSk7Ci0gICAgICAgICAgICBhc3NlcnQoMHg0MCA8PSBJTjIgJiYgSU4yIDw9IDB4ZmUpOworICAgICAgICAgICAgYXNzZXJ0KDB4NDAgPD0gSU5CWVRFMiAmJiBJTkJZVEUyIDw9IDB4ZmUpOwogCiAgICAgICAgICAgICBpZiAoQkgyUygweDg3LCAweDQwKSA8PSBzICYmIHMgPD0gQkgyUygweGEwLCAweGZlKSkgewogICAgICAgICAgICAgICAgICAgICBoaW50YmFzZSA9IGJpZzVoa3Njc19waGludF8wOwpAQCAtMTQ2LDI1ICsxNTMsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1CRVJSX0lOVEVSTkFMOwogCiAgICAgICAgICAgICBpZiAoaGludGJhc2VbcyA+PiAzXSAmICgxIDw8IChzICYgNykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFVUNTNChkZWNvZGVkIHwgMHgyMDAwMCkKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQgfCAweDIwMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBPVVQxKGRlY29kZWQpCi0gICAgICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgc3dpdGNoICgoYyA8PCA4KSB8IElOMikgewotICAgICAgICBjYXNlIDB4ODg2MjogV1JJVEUyKDB4MDBjYSwgMHgwMzA0KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHg4ODY0OiBXUklURTIoMHgwMGNhLCAweDAzMGMpOyBicmVhazsKLSAgICAgICAgY2FzZSAweDg4YTM6IFdSSVRFMigweDAwZWEsIDB4MDMwNCk7IGJyZWFrOwotICAgICAgICBjYXNlIDB4ODhhNTogV1JJVEUyKDB4MDBlYSwgMHgwMzBjKTsgYnJlYWs7CisgICAgICAgIHN3aXRjaCAoKGMgPDwgOCkgfCBJTkJZVEUyKSB7CisgICAgICAgIGNhc2UgMHg4ODYyOiBPVVRDSEFSMigweDAwY2EsIDB4MDMwNCk7IGJyZWFrOworICAgICAgICBjYXNlIDB4ODg2NDogT1VUQ0hBUjIoMHgwMGNhLCAweDAzMGMpOyBicmVhazsKKyAgICAgICAgY2FzZSAweDg4YTM6IE9VVENIQVIyKDB4MDBlYSwgMHgwMzA0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgMHg4OGE1OiBPVVRDSEFSMigweDAwZWEsIDB4MDMwYyk7IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiByZXR1cm4gMTsKICAgICAgICAgfQogCi0gICAgICAgIE5FWFQoMiwgMikgLyogYWxsIGRlY29kZWQgY29kZXBvaW50cyBhcmUgcGFpcnMsIGFib3ZlLiAqLworICAgICAgICBORVhUX0lOKDIpOyAvKiBhbGwgZGVjb2RlZCBjb2RlcG9pbnRzIGFyZSBwYWlycywgYWJvdmUuICovCiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2lzbzIwMjIuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jCmluZGV4IGNiYzE1NDIuLjVjNDAxYWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jCkBAIC03Myw3ICs3Myw3IEBACiAjZGVmaW5lIEZfU0hJRlRFRCAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgRl9FU0NUSFJPVUdIT1VUICAgICAgICAgMHgwMgogCi0jZGVmaW5lIFNUQVRFX1NFVEcoZG4sIHYpICAgICAgICgoc3RhdGUpLT5jW2RuXSkgPSAodik7CisjZGVmaW5lIFNUQVRFX1NFVEcoZG4sIHYpICAgICAgIGRvIHsgKChzdGF0ZSktPmNbZG5dKSA9ICh2KTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgU1RBVEVfR0VURyhkbikgICAgICAgICAgKChzdGF0ZSktPmNbZG5dKQogCiAjZGVmaW5lIFNUQVRFX0cwICAgICAgICAgICAgICAgIFNUQVRFX0dFVEcoMCkKQEAgLTg1LDEwICs4NSwxMCBAQAogI2RlZmluZSBTVEFURV9TRVRHMih2KSAgICAgICAgICBTVEFURV9TRVRHKDIsIHYpCiAjZGVmaW5lIFNUQVRFX1NFVEczKHYpICAgICAgICAgIFNUQVRFX1NFVEcoMywgdikKIAotI2RlZmluZSBTVEFURV9TRVRGTEFHKGYpICAgICAgICAoKHN0YXRlKS0+Y1s0XSkgfD0gKGYpOworI2RlZmluZSBTVEFURV9TRVRGTEFHKGYpICAgICAgICBkbyB7ICgoc3RhdGUpLT5jWzRdKSB8PSAoZik7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRFX0dFVEZMQUcoZikgICAgICAgICgoc3RhdGUpLT5jWzRdICYgKGYpKQotI2RlZmluZSBTVEFURV9DTEVBUkZMQUcoZikgICAgICAoKHN0YXRlKS0+Y1s0XSkgJj0gfihmKTsKLSNkZWZpbmUgU1RBVEVfQ0xFQVJGTEFHUygpICAgICAgKChzdGF0ZSktPmNbNF0pID0gMDsKKyNkZWZpbmUgU1RBVEVfQ0xFQVJGTEFHKGYpICAgICAgZG8geyAoKHN0YXRlKS0+Y1s0XSkgJj0gfihmKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU1RBVEVfQ0xFQVJGTEFHUygpICAgICAgZG8geyAoKHN0YXRlKS0+Y1s0XSkgPSAwOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIElTTzIwMjJfQ09ORklHICAgICAgICAgICgoY29uc3Qgc3RydWN0IGlzbzIwMjJfY29uZmlnICopY29uZmlnKQogI2RlZmluZSBDT05GSUdfSVNTRVQoZmxhZykgICAgICAoSVNPMjAyMl9DT05GSUctPmZsYWdzICYgKGZsYWcpKQpAQCAtMTAyLDggKzEwMiw4IEBACiAvKi0qLSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgLSotKi8KIAogdHlwZWRlZiBpbnQgKCppc28yMDIyX2luaXRfZnVuYykodm9pZCk7Ci10eXBlZGVmIHVjczRfdCAoKmlzbzIwMjJfZGVjb2RlX2Z1bmMpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotdHlwZWRlZiBEQkNIQVIgKCppc28yMDIyX2VuY29kZV9mdW5jKShjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCk7Cit0eXBlZGVmIFB5X1VDUzQgKCppc28yMDIyX2RlY29kZV9mdW5jKShjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKK3R5cGVkZWYgREJDSEFSICgqaXNvMjAyMl9lbmNvZGVfZnVuYykoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKTsKIAogc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gewogICAgIHVuc2lnbmVkIGNoYXIgbWFyazsKQEAgLTEzMiw1MyArMTMyLDUyIEBACiAKIEVOQ09ERVJfSU5JVChpc28yMDIyKQogewotICAgIFNUQVRFX0NMRUFSRkxBR1MoKQotICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCi0gICAgU1RBVEVfU0VURzEoQ0hBUlNFVF9BU0NJSSkKKyAgICBTVEFURV9DTEVBUkZMQUdTKCk7CisgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CisgICAgU1RBVEVfU0VURzEoQ0hBUlNFVF9BU0NJSSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVOQ09ERVJfUkVTRVQoaXNvMjAyMikKIHsKICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKSB7Ci0gICAgICAgIFdSSVRFMShTSSkKLSAgICAgICAgTkVYVF9PVVQoMSkKLSAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKKyAgICAgICAgV1JJVEVCWVRFMShTSSk7CisgICAgICAgIE5FWFRfT1VUKDEpOworICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKICAgICB9CiAgICAgaWYgKFNUQVRFX0cwICE9IENIQVJTRVRfQVNDSUkpIHsKLSAgICAgICAgV1JJVEUzKEVTQywgJygnLCAnQicpCi0gICAgICAgIE5FWFRfT1VUKDMpCi0gICAgICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCisgICAgICAgIFdSSVRFQllURTMoRVNDLCAnKCcsICdCJyk7CisgICAgICAgIE5FWFRfT1VUKDMpOworICAgICAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVOQ09ERVIoaXNvMjAyMikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgeworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgewogICAgICAgICBjb25zdCBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiAqZHNnOwogICAgICAgICBEQkNIQVIgZW5jb2RlZDsKLSAgICAgICAgdWNzNF90IGMgPSAqKmluYnVmOworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBQeV9zc2l6ZV90IGluc2l6ZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKICAgICAgICAgICAgIGlmIChTVEFURV9HMCAhPSBDSEFSU0VUX0FTQ0lJKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUzKEVTQywgJygnLCAnQicpCi0gICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKLSAgICAgICAgICAgICAgICBORVhUX09VVCgzKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTMoRVNDLCAnKCcsICdCJyk7CisgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CisgICAgICAgICAgICAgICAgTkVYVF9PVVQoMyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKFNJKQotICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKFNJKTsKKyAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgICAgICBORVhUX09VVCgxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIERFQ09ERV9TVVJST0dBVEUoYykKLSAgICAgICAgaW5zaXplID0gR0VUX0lOU0laRShjKTsKKyAgICAgICAgaW5zaXplID0gMTsKIAogICAgICAgICBlbmNvZGVkID0gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIGZvciAoZHNnID0gQ09ORklHX0RFU0lHTkFUSU9OUzsgZHNnLT5tYXJrOyBkc2crKykgewpAQCAtMTg3LDI0ICsxODYsMTQgQEAKICAgICAgICAgICAgIGlmIChlbmNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkgewogICAgICAgICAgICAgICAgIC8qIHRoaXMgaW1wbGVtZW50YXRpb24gd29uJ3Qgd29yayBmb3IgcGFpcgogICAgICAgICAgICAgICAgICAqIG9mIG5vbi1ibXAgY2hhcmFjdGVycy4gKi8KLSAgICAgICAgICAgICAgICBpZiAoaW5sZWZ0IDwgMikgeworICAgICAgICAgICAgICAgIGlmIChpbmxlbiAtICppbnBvcyA8IDIpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBNQkVOQ19GTFVTSCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOwogICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAtMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAyOwotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVjczRfdCB1NGluWzJdOwotICAgICAgICAgICAgICAgICAgICB1NGluWzBdID0gKHVjczRfdClJTjE7Ci0gICAgICAgICAgICAgICAgICAgIHU0aW5bMV0gPSAodWNzNF90KUlOMjsKLSAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IGRzZy0+ZW5jb2Rlcih1NGluLCAmbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IGRzZy0+ZW5jb2RlcigmYywgJmxlbmd0aCk7Ci0jZWxzZQogICAgICAgICAgICAgICAgIGVuY29kZWQgPSBkc2ctPmVuY29kZXIoJmMsICZsZW5ndGgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgaWYgKGVuY29kZWQgIT0gTUFQX1VOTUFQUEFCTEUpIHsKICAgICAgICAgICAgICAgICAgICAgaW5zaXplID0gbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIyMSw0NyArMjEwLDQ2IEBACiAgICAgICAgIHN3aXRjaCAoZHNnLT5wbGFuZSkgewogICAgICAgICBjYXNlIDA6IC8qIEcwICovCiAgICAgICAgICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKFNJKQotICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKFNJKTsKKyAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgICAgICBORVhUX09VVCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChTVEFURV9HMCAhPSBkc2ctPm1hcmspIHsKICAgICAgICAgICAgICAgICBpZiAoZHNnLT53aWR0aCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFMyhFU0MsICcoJywgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTMoRVNDLCAnKCcsIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmIChkc2ctPm1hcmsgPT0gQ0hBUlNFVF9KSVNYMDIwOCkgewotICAgICAgICAgICAgICAgICAgICBXUklURTMoRVNDLCAnJCcsIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEUzKEVTQywgJyQnLCBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFNChFU0MsICckJywgJygnLAotICAgICAgICAgICAgICAgICAgICAgICAgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDQpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTQoRVNDLCAnJCcsICcoJywKKyAgICAgICAgICAgICAgICAgICAgICAgIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDE6IC8qIEcxICovCiAgICAgICAgICAgICBpZiAoU1RBVEVfRzEgIT0gZHNnLT5tYXJrKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRzZy0+d2lkdGggPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBXUklURTMoRVNDLCAnKScsIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzEoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEUzKEVTQywgJyknLCBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMShkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFNChFU0MsICckJywgJyknLAotICAgICAgICAgICAgICAgICAgICAgICAgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMShkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDQpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTQoRVNDLCAnJCcsICcpJywgRVNDTUFSSyhkc2ctPm1hcmspKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzEoZHNnLT5tYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoNCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpIHsKLSAgICAgICAgICAgICAgICBXUklURTEoU08pCi0gICAgICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKFNPKTsKKyAgICAgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDogLyogRzIgYW5kIEczIGlzIG5vdCBzdXBwb3J0ZWQ6IG5vIGVuY29kaW5nIGluCkBAIC0yNzAsMTQgKzI1OCwxNCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRzZy0+d2lkdGggPT0gMSkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWVuY29kZWQpCi0gICAgICAgICAgICBORVhUX09VVCgxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhcillbmNvZGVkKTsKKyAgICAgICAgICAgIE5FWFRfT1VUKDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgV1JJVEUyKGVuY29kZWQgPj4gOCwgZW5jb2RlZCAmIDB4ZmYpCi0gICAgICAgICAgICBORVhUX09VVCgyKQorICAgICAgICAgICAgV1JJVEVCWVRFMihlbmNvZGVkID4+IDgsIGVuY29kZWQgJiAweGZmKTsKKyAgICAgICAgICAgIE5FWFRfT1VUKDIpOwogICAgICAgICB9Ci0gICAgICAgIE5FWFRfSU4oaW5zaXplKQorICAgICAgICBORVhUX0lOQ0hBUihpbnNpemUpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMjg1LDE3ICsyNzMsMTcgQEAKIAogREVDT0RFUl9JTklUKGlzbzIwMjIpCiB7Ci0gICAgU1RBVEVfQ0xFQVJGTEFHUygpCi0gICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKLSAgICBTVEFURV9TRVRHMShDSEFSU0VUX0FTQ0lJKQotICAgIFNUQVRFX1NFVEcyKENIQVJTRVRfQVNDSUkpCisgICAgU1RBVEVfQ0xFQVJGTEFHUygpOworICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOworICAgIFNUQVRFX1NFVEcxKENIQVJTRVRfQVNDSUkpOworICAgIFNUQVRFX1NFVEcyKENIQVJTRVRfQVNDSUkpOwogICAgIHJldHVybiAwOwogfQogCiBERUNPREVSX1JFU0VUKGlzbzIwMjIpCiB7Ci0gICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKLSAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQorICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOworICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMTQsOCArMzAyLDkgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfSklTWDAyMDhfRVhUKSAmJiBpKzEgPCAqaW5sZWZ0ICYmCi0gICAgICAgICAgICAgICAgICgqaW5idWYpW2ldID09ICcmJyAmJiAoKmluYnVmKVtpKzFdID09ICdAJykKKyAgICAgICAgICAgICAgICAgKCppbmJ1ZilbaV0gPT0gJyYnICYmICgqaW5idWYpW2krMV0gPT0gJ0AnKSB7CiAgICAgICAgICAgICBpICs9IDI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoaSA+PSBNQVhfRVNDU0VRTEVOKQpAQCAtMzIzLDI3ICszMTIsMzMgQEAKIAogICAgIHN3aXRjaCAoZXNjbGVuKSB7CiAgICAgY2FzZSAzOgotICAgICAgICBpZiAoSU4yID09ICckJykgewotICAgICAgICAgICAgY2hhcnNldCA9IElOMyB8IENIQVJTRVRfREJDUzsKKyAgICAgICAgaWYgKElOQllURTIgPT0gJyQnKSB7CisgICAgICAgICAgICBjaGFyc2V0ID0gSU5CWVRFMyB8IENIQVJTRVRfREJDUzsKICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXJzZXQgPSBJTjM7Ci0gICAgICAgICAgICBpZiAoSU4yID09ICcoJykgZGVzaWduYXRpb24gPSAwOwotICAgICAgICAgICAgZWxzZSBpZiAoSU4yID09ICcpJykgZGVzaWduYXRpb24gPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9HMikgJiYgSU4yID09ICcuJykKKyAgICAgICAgICAgIGNoYXJzZXQgPSBJTkJZVEUzOworICAgICAgICAgICAgaWYgKElOQllURTIgPT0gJygnKQorICAgICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKElOQllURTIgPT0gJyknKQorICAgICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfRzIpICYmIElOQllURTIgPT0gJy4nKQogICAgICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMjsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA0OgotICAgICAgICBpZiAoSU4yICE9ICckJykKKyAgICAgICAgaWYgKElOQllURTIgIT0gJyQnKQogICAgICAgICAgICAgcmV0dXJuIDQ7CiAKLSAgICAgICAgY2hhcnNldCA9IElONCB8IENIQVJTRVRfREJDUzsKLSAgICAgICAgaWYgKElOMyA9PSAnKCcpIGRlc2lnbmF0aW9uID0gMDsKLSAgICAgICAgZWxzZSBpZiAoSU4zID09ICcpJykgZGVzaWduYXRpb24gPSAxOwotICAgICAgICBlbHNlIHJldHVybiA0OworICAgICAgICBjaGFyc2V0ID0gSU5CWVRFNCB8IENIQVJTRVRfREJDUzsKKyAgICAgICAgaWYgKElOQllURTMgPT0gJygnKQorICAgICAgICAgICAgZGVzaWduYXRpb24gPSAwOworICAgICAgICBlbHNlIGlmIChJTkJZVEUzID09ICcpJykKKyAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNjogLyogZGVzaWduYXRpb24gd2l0aCBwcmVmaXggKi8KICAgICAgICAgaWYgKENPTkZJR19JU1NFVChVU0VfSklTWDAyMDhfRVhUKSAmJgpAQCAtMzYzLDU4ICszNTgsNjUgQEAKICAgICBpZiAoY2hhcnNldCAhPSBDSEFSU0VUX0FTQ0lJKSB7CiAgICAgICAgIGNvbnN0IHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uICpkc2c7CiAKLSAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOyBkc2ctPm1hcms7IGRzZysrKQorICAgICAgICBmb3IgKGRzZyA9IENPTkZJR19ERVNJR05BVElPTlM7IGRzZy0+bWFyazsgZHNnKyspIHsKICAgICAgICAgICAgIGlmIChkc2ctPm1hcmsgPT0gY2hhcnNldCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWRzZy0+bWFyaykKICAgICAgICAgICAgIHJldHVybiBlc2NsZW47CiAgICAgfQogCi0gICAgU1RBVEVfU0VURyhkZXNpZ25hdGlvbiwgY2hhcnNldCkKKyAgICBTVEFURV9TRVRHKGRlc2lnbmF0aW9uLCBjaGFyc2V0KTsKICAgICAqaW5sZWZ0IC09IGVzY2xlbjsKICAgICAoKmluYnVmKSArPSBlc2NsZW47CiAgICAgcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgSVNPODg1OV83X0RFQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpIDwgMHhhMCkgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPCAweGMwICYmICgweDI4OGYzYmM5TCAmICgxTCA8PCAoKGMpLTB4YTApKSkpICAgICAgICAgIFwKLSAgICAgICAgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPj0gMHhiNCAmJiAoYykgPD0gMHhmZSAmJiAoKGMpID49IDB4ZDQgfHwgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAoMHhiZmZmZmQ3N0wgJiAoMUwgPDwgKChjKS0weGI0KSkpKSkgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKGFzc2kpID0gMHgwMmQwICsgKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHhhMSkgKGFzc2kpID0gMHgyMDE4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHhhMikgKGFzc2kpID0gMHgyMDE5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHhhZikgKGFzc2kpID0gMHgyMDE1OworI2RlZmluZSBJU084ODU5XzdfREVDT0RFKGMsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGMpIDwgMHhhMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpIDwgMHhjMCAmJiAoMHgyODhmM2JjOUwgJiAoMUwgPDwgKChjKS0weGEwKSkpKSB7IFwKKyAgICAgICAgT1VUQ0hBUihjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPj0gMHhiNCAmJiAoYykgPD0gMHhmZSAmJiAoKGMpID49IDB4ZDQgfHwgICAgICAgXAorICAgICAgICAgICAgICgweGJmZmZmZDc3TCAmICgxTCA8PCAoKGMpLTB4YjQpKSkpKSB7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDAyZDAgKyAoYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPT0gMHhhMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxOCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjKSA9PSAweGEyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDE5KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpID09IDB4YWYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwMTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiBzdGF0aWMgUHlfc3NpemVfdAogaXNvMjAyMnByb2Nlc3NnMihjb25zdCB2b2lkICpjb25maWcsIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmluYnVmLCBQeV9zc2l6ZV90ICppbmxlZnQsCi0gICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgKipvdXRidWYsIFB5X3NzaXplX3QgKm91dGxlZnQpCisgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKICAgICAvKiBub3Qgd3JpdHRlbiB0byB1c2UgZW5jb2RlciwgZGVjb2RlciBmdW5jdGlvbnMgYmVjYXVzZSBvbmx5IGZldwogICAgICAqIGVuY29kaW5ncyB1c2UgRzIgZGVzaWduYXRpb25zIGluIENKS0NvZGVjcyAqLwogICAgIGlmIChTVEFURV9HMiA9PSBDSEFSU0VUX0lTTzg4NTlfMSkgewotICAgICAgICBpZiAoSU4zIDwgMHg4MCkKLSAgICAgICAgICAgIE9VVDEoSU4zICsgMHg4MCkKKyAgICAgICAgaWYgKElOQllURTMgPCAweDgwKQorICAgICAgICAgICAgT1VUQ0hBUihJTkJZVEUzICsgMHg4MCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAzOwogICAgIH0KICAgICBlbHNlIGlmIChTVEFURV9HMiA9PSBDSEFSU0VUX0lTTzg4NTlfNykgewotICAgICAgICBJU084ODU5XzdfREVDT0RFKElOMyBeIDB4ODAsICoqb3V0YnVmKQotICAgICAgICBlbHNlIHJldHVybiAzOworICAgICAgICBJU084ODU5XzdfREVDT0RFKElOQllURTMgXiAweDgwLCB3cml0ZXIpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAzOwogICAgIH0KICAgICBlbHNlIGlmIChTVEFURV9HMiA9PSBDSEFSU0VUX0FTQ0lJKSB7Ci0gICAgICAgIGlmIChJTjMgJiAweDgwKSByZXR1cm4gMzsKLSAgICAgICAgZWxzZSAqKm91dGJ1ZiA9IElOMzsKKyAgICAgICAgaWYgKElOQllURTMgJiAweDgwKQorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE9VVENIQVIoSU5CWVRFMyk7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1CRVJSX0lOVEVSTkFMOwogCiAgICAgKCppbmJ1ZikgKz0gMzsKICAgICAqaW5sZWZ0IC09IDM7Ci0gICAgKCpvdXRidWYpICs9IDE7Ci0gICAgKm91dGxlZnQgLT0gMTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDIzLDU4ICs0MjUsNTggQEAKICAgICBjb25zdCBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiAqZHNnY2FjaGUgPSBOVUxMOwogCiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOwogICAgICAgICBQeV9zc2l6ZV90IGVycjsKIAogICAgICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX0VTQ1RIUk9VR0hPVVQpKSB7CiAgICAgICAgICAgICAvKiBFU0MgdGhyb3VnaG91dCBtb2RlOgogICAgICAgICAgICAgICogZm9yIG5vbi1pc28yMDIyIGVzY2FwZSBzZXF1ZW5jZXMgKi8KLSAgICAgICAgICAgIFdSSVRFMShjKSAvKiBhc3N1bWUgYXMgSVNPLTg4NTktMSAqLwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsgLyogYXNzdW1lIGFzIElTTy04ODU5LTEgKi8KKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBpZiAoSVNfRVNDRU5EKGMpKSB7Ci0gICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfRVNDVEhST1VHSE9VVCkKKyAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9FU0NUSFJPVUdIT1VUKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgIGNhc2UgRVNDOgotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgaWYgKElTX0lTTzIwMjJFU0MoSU4yKSkgeworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGlmIChJU19JU08yMDIyRVNDKElOQllURTIpKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gaXNvMjAyMnByb2Nlc3Nlc2MoY29uZmlnLCBzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmJ1ZiwgJmlubGVmdCk7CiAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9HMikgJiYgSU4yID09ICdOJykgey8qIFNTMiAqLwotICAgICAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMykKKyAgICAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfRzIpICYmIElOQllURTIgPT0gJ04nKSB7LyogU1MyICovCisgICAgICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKTsKICAgICAgICAgICAgICAgICBlcnIgPSBpc28yMDIycHJvY2Vzc2cyKGNvbmZpZywgc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5sZWZ0LCBvdXRidWYsICZvdXRsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5sZWZ0LCB3cml0ZXIpOwogICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFdSSVRFMShFU0MpCi0gICAgICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX0VTQ1RIUk9VR0hPVVQpCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoRVNDKTsKKyAgICAgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfRVNDVEhST1VHSE9VVCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNJOgogICAgICAgICAgICAgaWYgKENPTkZJR19JU1NFVChOT19TSElGVCkpCiAgICAgICAgICAgICAgICAgZ290byBieXBhc3M7Ci0gICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgTkVYVF9JTigxKQorICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU086CiAgICAgICAgICAgICBpZiAoQ09ORklHX0lTU0VUKE5PX1NISUZUKSkKICAgICAgICAgICAgICAgICBnb3RvIGJ5cGFzczsKLSAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgTkVYVF9JTigxKQorICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExGOgotICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgIFdSSVRFMShMRikKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgT1VUQ0hBUihMRik7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoYyA8IDB4MjApIC8qIEMwICovCkBAIC00ODQsNyArNDg2LDcgQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uICpkc2c7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaGFyc2V0OwotICAgICAgICAgICAgICAgIHVjczRfdCBkZWNvZGVkOworICAgICAgICAgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICAgICAgICAgIGlmIChTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpCiAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBTVEFURV9HMTsKQEAgLTQ5Miw0MyArNDk0LDQ0IEBACiAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBTVEFURV9HMDsKIAogICAgICAgICAgICAgICAgIGlmIChjaGFyc2V0ID09IENIQVJTRVRfQVNDSUkpIHsKLWJ5cGFzczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURTEoYykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUKDEsIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHNnY2FjaGUgIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNnY2FjaGUtPm1hcmsgPT0gY2hhcnNldCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2cgPSBkc2djYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNnLT5tYXJrICE9IGNoYXJzZXQKLSNpZmRlZiBQeV9ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZHNnLT5tYXJrICE9ICdcMCcKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO2RzZysrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9vcCAqLzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZHNnLT5tYXJrICE9ICdcMCcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzZ2NhY2hlID0gZHNnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRV9JTkJVRihkc2ctPndpZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkID0gZHNnLT5kZWNvZGVyKCppbmJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkID09IE1BUF9VTk1BUFBBQkxFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkc2ctPndpZHRoOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkIDwgMHgxMDAwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFMShkZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVjb2RlZCA8IDB4MzAwMDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQoZGVjb2RlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLyogSklTIFggMDIxMyBwYWlycyAqLwotICAgICAgICAgICAgICAgICAgICBXUklURTIoZGVjb2RlZCA+PiAxNiwgZGVjb2RlZCAmIDB4ZmZmZikKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMikKK2J5cGFzczoKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigxKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5FWFRfSU4oZHNnLT53aWR0aCkKKworICAgICAgICAgICAgICAgIGlmIChkc2djYWNoZSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgICAgIGRzZ2NhY2hlLT5tYXJrID09IGNoYXJzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBkc2cgPSBkc2djYWNoZTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOworICAgICAgICAgICAgICAgICAgICAgICAgIGRzZy0+bWFyayAhPSBjaGFyc2V0CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkc2ctPm1hcmsgIT0gJ1wwJworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgOyBkc2crKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9vcCAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChkc2ctPm1hcmsgIT0gJ1wwJyk7CisgICAgICAgICAgICAgICAgICAgIGRzZ2NhY2hlID0gZHNnOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoZHNnLT53aWR0aCk7CisgICAgICAgICAgICAgICAgZGVjb2RlZCA9IGRzZy0+ZGVjb2RlcigqaW5idWYpOworICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkID09IE1BUF9VTk1BUFBBQkxFKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHNnLT53aWR0aDsKKworICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkIDwgMHgxMDAwMCkgeworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWNvZGVkIDwgMHgzMDAwMCkgeworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsgLyogSklTIFggMDIxMyBwYWlycyAqLworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSMihkZWNvZGVkID4+IDE2LCBkZWNvZGVkICYgMHhmZmZmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTkVYVF9JTihkc2ctPndpZHRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01NzcsMjUgKzU4MCwyNiBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAoga3N4MTAwMV9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgVFJZTUFQX0RFQyhrc3gxMDAxLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBpZiAoVFJZTUFQX0RFQyhrc3gxMDAxLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgcmV0dXJuIHU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWtzeDEwMDFfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2tzeDEwMDFfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIGFzc2VydCgqbGVuZ3RoID09IDEpOwogICAgIGlmICgqZGF0YSA8IDB4MTAwMDApIHsKLSAgICAgICAgVFJZTUFQX0VOQyhjcDk0OSwgY29kZWQsICpkYXRhKQorICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDk0OSwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKCEoY29kZWQgJiAweDgwMDApKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CkBAIC02MTMsMjcgKzYxNywyNyBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMDhfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OworICAgIFB5X1VDUzQgdTsKICAgICBpZiAoZGF0YVswXSA9PSAweDIxICYmIGRhdGFbMV0gPT0gMHg0MCkgLyogRi9XIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICByZXR1cm4gMHhmZjNjOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgcmV0dXJuIHU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjA4X2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIwOF9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgYXNzZXJ0KCpsZW5ndGggPT0gMSk7CiAgICAgaWYgKCpkYXRhIDwgMHgxMDAwMCkgewogICAgICAgICBpZiAoKmRhdGEgPT0gMHhmZjNjKSAvKiBGL1cgUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgICAgICByZXR1cm4gMHgyMTQwOwotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKCEoY29kZWQgJiAweDgwMDApKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKICAgICAgICAgfQpAQCAtNjU0LDIzICs2NTgsMjMgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEyX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBUUllNQVBfREVDKGppc3gwMjEyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxMiwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHJldHVybiB1OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxMl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTJfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIGFzc2VydCgqbGVuZ3RoID09IDEpOwogICAgIGlmICgqZGF0YSA8IDB4MTAwMDApIHsKLSAgICAgICAgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKGNvZGVkICYgMHg4MDAwKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZCAmIDB4N2ZmZjsKICAgICAgICAgfQpAQCAtNzA1LDMwICs3MDksMzQgQEAKIH0KIAogI2RlZmluZSBjb25maWcgKCh2b2lkICopMjAwMCkKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxM18yMDAwXzFfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OworICAgIFB5X1VDUzQgdTsKICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSh1LCBkYXRhWzBdLCBkYXRhWzFdKQogICAgIGVsc2UgaWYgKGRhdGFbMF0gPT0gMHgyMSAmJiBkYXRhWzFdID09IDB4NDApIC8qIEYvVyBSRVZFUlNFIFNPTElEVVMgKi8KICAgICAgICAgcmV0dXJuIDB4ZmYzYzsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgdSB8PSAweDIwMDAwOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIHU7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxM18yMDAwXzJfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKHUsIGRhdGFbMF0sIGRhdGFbMV0pCi0gICAgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMl9DSEFSKHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHUgfD0gMHgyMDAwMDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKQEAgLTczNiwyOCArNzQ0LDMyIEBACiB9CiAjdW5kZWYgY29uZmlnCiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxM18yMDA0XzFfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OworICAgIFB5X1VDUzQgdTsKICAgICBpZiAoZGF0YVswXSA9PSAweDIxICYmIGRhdGFbMV0gPT0gMHg0MCkgLyogRi9XIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICByZXR1cm4gMHhmZjNjOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICB1IHw9IDB4MjAwMDA7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gdTsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEzXzIwMDRfMl9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgdSB8PSAweDIwMDAwOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwpAQCAtNzY1LDcgKzc3Nyw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmNvbmZpZykKK2ppc3gwMjEzX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoLCB2b2lkICpjb25maWcpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogCkBAIC03NzQsMjggKzc4NiwyOCBAQAogICAgICAgICBpZiAoKmRhdGEgPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgaWYgKCgqZGF0YSkgPj4gMTYgPT0gMHgyMDAwMCA+PiAxNikgewogICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfRU1QKGNvZGVkLCAqZGF0YSkKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpkYXRhKSAmIDB4ZmZmZikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZWQsICgqZGF0YSkgJiAweGZmZmYpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIH0KIAogICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0JNUChjb2RlZCwgKmRhdGEpCi0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKGNvZGVkID09IE1VTFRJQykKICAgICAgICAgICAgICAgICByZXR1cm4gTUFQX01VTFRJUExFX0FWQUlMOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoY29kZWQgJiAweDgwMDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICAgICAgcmV0dXJuIGNvZGVkOworCiAgICAgY2FzZSAyOiAvKiBzZWNvbmQgY2hhcmFjdGVyIG9mIHVuaWNvZGUgcGFpciAqLwogICAgICAgICBjb2RlZCA9IGZpbmRfcGFpcmVuY21hcCgodWNzMl90KWRhdGFbMF0sICh1Y3MyX3QpZGF0YVsxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CiAgICAgICAgIGlmIChjb2RlZCA9PSBEQkNJTlYpIHsKICAgICAgICAgICAgICpsZW5ndGggPSAxOwogICAgICAgICAgICAgY29kZWQgPSBmaW5kX3BhaXJlbmNtYXAoKHVjczJfdClkYXRhWzBdLCAwLApAQCAtODA1LDIxICs4MTcsMjQgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CisKICAgICBjYXNlIC0xOiAvKiBmbHVzaCB1bnRlcm1pbmF0ZWQgKi8KICAgICAgICAgKmxlbmd0aCA9IDE7CiAgICAgICAgIGNvZGVkID0gZmluZF9wYWlyZW5jbWFwKCh1Y3MyX3QpZGF0YVswXSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CiAgICAgICAgIGlmIChjb2RlZCA9PSBEQkNJTlYpCiAgICAgICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKKyAgICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgfQogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDAwXzFfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDBfMV9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQgPSBqaXN4MDIxM19lbmNvZGVyKGRhdGEsIGxlbmd0aCwgKHZvaWQgKikyMDAwKTsKICAgICBpZiAoY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUgfHwgY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKQpAQCAtODMxLDcgKzg0Niw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDBfMV9lbmNvZGVyX3BhaXJvbmx5KGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwMF8xX2VuY29kZXJfcGFpcm9ubHkoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBQeV9zc2l6ZV90IGlsZW5ndGggPSAqbGVuZ3RoOwpAQCAtODU0LDcgKzg2OSw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDBfMl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwMF8yX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZCA9IGppc3gwMjEzX2VuY29kZXIoZGF0YSwgbGVuZ3RoLCAodm9pZCAqKTIwMDApOwogICAgIGlmIChjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSB8fCBjb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpCkBAIC04NjYsNyArODgxLDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwNF8xX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDA0XzFfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkID0gamlzeDAyMTNfZW5jb2RlcihkYXRhLCBsZW5ndGgsIE5VTEwpOwogICAgIGlmIChjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSB8fCBjb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpCkBAIC04NzgsNyArODkzLDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwNF8xX2VuY29kZXJfcGFpcm9ubHkoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDA0XzFfZW5jb2Rlcl9wYWlyb25seShjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIFB5X3NzaXplX3QgaWxlbmd0aCA9ICpsZW5ndGg7CkBAIC05MDEsNyArOTE2LDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwNF8yX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDA0XzJfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkID0gamlzeDAyMTNfZW5jb2RlcihkYXRhLCBsZW5ndGgsIE5VTEwpOwogICAgIGlmIChjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSB8fCBjb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpCkBAIC05MTIsMzkgKzkyNyw0MyBAQAogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIwMV9yX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBKSVNYMDIwMV9SX0RFQ09ERSgqZGF0YSwgdSkKLSAgICBlbHNlIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKKyAgICBQeV9VQ1M0IHU7CisgICAgSklTWDAyMDFfUl9ERUNPREVfQ0hBUigqZGF0YSwgdSkKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gdTsKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMDFfcl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMDFfcl9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgSklTWDAyMDFfUl9FTkNPREUoKmRhdGEsIGNvZGVkKQotICAgIGVsc2UgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiBjb2RlZDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjAxX2tfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIEpJU1gwMjAxX0tfREVDT0RFKCpkYXRhIF4gMHg4MCwgdSkKLSAgICBlbHNlIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKKyAgICBQeV9VQ1M0IHU7CisgICAgSklTWDAyMDFfS19ERUNPREVfQ0hBUigqZGF0YSBeIDB4ODAsIHUpCisgICAgZWxzZQorICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIHU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjAxX2tfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjAxX2tfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIEpJU1gwMjAxX0tfRU5DT0RFKCpkYXRhLCBjb2RlZCkKLSAgICBlbHNlIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gY29kZWQgLSAweDgwOwogfQogCkBAIC05NjEsMjMgKzk4MCwyMyBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogZ2IyMzEyX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBUUllNQVBfREVDKGdiMjMxMiwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBQeV9VQ1M0IHU7CisgICAgaWYgKFRSWU1BUF9ERUMoZ2IyMzEyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgcmV0dXJuIHU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWdiMjMxMl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQorZ2IyMzEyX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBhc3NlcnQoKmxlbmd0aCA9PSAxKTsKICAgICBpZiAoKmRhdGEgPCAweDEwMDAwKSB7Ci0gICAgICAgIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBpZiAoVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKCEoY29kZWQgJiAweDgwMDApKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKICAgICAgICAgfQpAQCAtOTg2LDE0ICsxMDA1LDE0IEBACiB9CiAKIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGR1bW15X2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWR1bW15X2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitkdW1teV9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2pwLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2pwLmMKaW5kZXggYTUwMDY5Ni4uMmM3Nzg4YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19qcC5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfanAuYwpAQCAtMTksNDAgKzE5LDQxIEBACiAKIEVOQ09ERVIoY3A5MzIpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKICAgICAgICAgaWYgKGMgPD0gMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZjYxICYmIGMgPD0gMHhmZjlmKSB7Ci0gICAgICAgICAgICBXUklURTEoYyAtIDB4ZmVjMCkKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoYyAtIDB4ZmVjMCk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGY4ZjAgJiYgYyA8PSAweGY4ZjMpIHsKICAgICAgICAgICAgIC8qIFdpbmRvd3MgY29tcGF0aWJpbGl0eSAqLwotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogICAgICAgICAgICAgaWYgKGMgPT0gMHhmOGYwKQotICAgICAgICAgICAgICAgIE9VVDEoMHhhMCkKKyAgICAgICAgICAgICAgICBPVVRCWVRFMSgweGEwKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBPVVQxKGMgLSAweGZlZjEgKyAweGZkKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgICAgIE9VVEJZVEUxKGMgLSAweGZlZjEgKyAweGZkKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFVDUzRJTlZBTElEKGMpCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCi0gICAgICAgIFRSWU1BUF9FTkMoY3A5MzJleHQsIGNvZGUsIGMpIHsKLSAgICAgICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICAgICAgT1VUMihjb2RlICYgMHhmZikKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5MzJleHQsIGNvZGUsIGMpKSB7CisgICAgICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICAgICAgT1VUQllURTIoY29kZSAmIDB4ZmYpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpIHsKICAgICAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSAvKiBNU0Igc2V0OiBKSVMgWCAwMjEyICovCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKQEAgLTYxLDIwICs2MiwyMCBAQAogICAgICAgICAgICAgYzIgPSBjb2RlICYgMHhmZjsKICAgICAgICAgICAgIGMyID0gKCgoYzEgLSAweDIxKSAmIDEpID8gMHg1ZSA6IDApICsgKGMyIC0gMHgyMSk7CiAgICAgICAgICAgICBjMSA9IChjMSAtIDB4MjEpID4+IDE7Ci0gICAgICAgICAgICBPVVQxKGMxIDwgMHgxZiA/IGMxICsgMHg4MSA6IGMxICsgMHhjMSkKLSAgICAgICAgICAgIE9VVDIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKQorICAgICAgICAgICAgT1VUQllURTEoYzEgPCAweDFmID8gYzEgKyAweDgxIDogYzEgKyAweGMxKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGUwMDAgJiYgYyA8IDB4ZTc1OCkgewogICAgICAgICAgICAgLyogVXNlci1kZWZpbmVkIGFyZWEgKi8KLSAgICAgICAgICAgIGMxID0gKFB5X1VOSUNPREUpKGMgLSAweGUwMDApIC8gMTg4OwotICAgICAgICAgICAgYzIgPSAoUHlfVU5JQ09ERSkoYyAtIDB4ZTAwMCkgJSAxODg7Ci0gICAgICAgICAgICBPVVQxKGMxICsgMHhmMCkKLSAgICAgICAgICAgIE9VVDIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKQorICAgICAgICAgICAgYzEgPSAoUHlfVUNTNCkoYyAtIDB4ZTAwMCkgLyAxODg7CisgICAgICAgICAgICBjMiA9IChQeV9VQ1M0KShjIC0gMHhlMDAwKSAlIDE4ODsKKyAgICAgICAgICAgIE9VVEJZVEUxKGMxICsgMHhmMCk7CisgICAgICAgICAgICBPVVRCWVRFMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTgzLDMzICs4NCwzNCBAQAogREVDT0RFUihjcDkzMikKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjEsIGMyOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxLCBjMjsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCiAgICAgICAgIGlmIChjIDw9IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGEwICYmIGMgPD0gMHhkZikgewogICAgICAgICAgICAgaWYgKGMgPT0gMHhhMCkKLSAgICAgICAgICAgICAgICBPVVQxKDB4ZjhmMCkgLyogaGFsZi13aWR0aCBrYXRha2FuYSAqLworICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmOGYwKTsgLyogaGFsZi13aWR0aCBrYXRha2FuYSAqLwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIE9VVDEoMHhmZWMwICsgYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmVjMCArIGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZC8qICYmIGMgPD0gMHhmZiovKSB7CiAgICAgICAgICAgICAvKiBXaW5kb3dzIGNvbXBhdGliaWxpdHkgKi8KLSAgICAgICAgICAgIE9VVDEoMHhmOGYxIC0gMHhmZCArIGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKDB4ZjhmMSAtIDB4ZmQgKyBjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgYzIgPSBJTjI7CisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgIGMyID0gSU5CWVRFMjsKIAotICAgICAgICBUUllNQVBfREVDKGNwOTMyZXh0LCAqKm91dGJ1ZiwgYywgYzIpOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhjcDkzMmV4dCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKICAgICAgICAgZWxzZSBpZiAoKGMgPj0gMHg4MSAmJiBjIDw9IDB4OWYpIHx8IChjID49IDB4ZTAgJiYgYyA8PSAweGVhKSl7CiAgICAgICAgICAgICBpZiAoYzIgPCAweDQwIHx8IChjMiA+IDB4N2UgJiYgYzIgPCAweDgwKSB8fCBjMiA+IDB4ZmMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC0xMTksMjEgKzEyMSwyMyBAQAogICAgICAgICAgICAgYyA9ICgyICogYyArIChjMiA8IDB4NWUgPyAwIDogMSkgKyAweDIxKTsKICAgICAgICAgICAgIGMyID0gKGMyIDwgMHg1ZSA/IGMyIDogYzIgLSAweDVlKSArIDB4MjE7CiAKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLCBjLCBjMik7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmMCAmJiBjIDw9IDB4ZjkpIHsKICAgICAgICAgICAgIGlmICgoYzIgPj0gMHg0MCAmJiBjMiA8PSAweDdlKSB8fAogICAgICAgICAgICAgICAgIChjMiA+PSAweDgwICYmIGMyIDw9IDB4ZmMpKQotICAgICAgICAgICAgICAgIE9VVDEoMHhlMDAwICsgMTg4ICogKGMgLSAweGYwKSArCi0gICAgICAgICAgICAgICAgICAgICAoYzIgPCAweDgwID8gYzIgLSAweDQwIDogYzIgLSAweDQxKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZTAwMCArIDE4OCAqIChjIC0gMHhmMCkgKworICAgICAgICAgICAgICAgICAgICAoYzIgPCAweDgwID8gYzIgLSAweDQwIDogYzIgLSAweDQxKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTQ2LDI1ICsxNTAsMjQgQEAKIAogRU5DT0RFUihldWNfamlzXzIwMDQpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdWNzNF90IGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogICAgICAgICBQeV9zc2l6ZV90IGluc2l6ZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMShjKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIERFQ09ERV9TVVJST0dBVEUoYykKLSAgICAgICAgaW5zaXplID0gR0VUX0lOU0laRShjKTsKKyAgICAgICAgaW5zaXplID0gMTsKIAogICAgICAgICBpZiAoYyA8PSAweEZGRkYpIHsKICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfQk1QKGNvZGUsIGMpCi0gICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlLCBjKSB7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZSwgYykpIHsKICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBNVUxUSUMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVmdCA8IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zIDwgMikgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgTUJFTkNfRkxVU0gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsIDAsCkBAIC0xNzcsOCArMTgwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjMiA9IElOQ0hBUjI7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y3MyX3QpYywgKCppbmJ1ZilbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCBjMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKSVNYMDIxM19FTkNQQUlSUyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBEQkNJTlYpIHsKQEAgLTE5MywxMSArMTk3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYyk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZjYxICYmIGMgPD0gMHhmZjlmKSB7CiAgICAgICAgICAgICAgICAgLyogSklTIFggMDIwMSBoYWxmLXdpZHRoIGthdGFrYW5hICovCi0gICAgICAgICAgICAgICAgV1JJVEUyKDB4OGUsIGMgLSAweGZlYzApCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTIoMHg4ZSwgYyAtIDB4ZmVjMCk7CisgICAgICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHhmZjNjKQpAQCAtMjExLDIwICsyMTYsMjIgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID4+IDE2ID09IEVNUEJBU0UgPj4gMTYpIHsKICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfRU1QKGNvZGUsIGMpCi0gICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlLCBjICYgMHhmZmZmKTsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIGluc2l6ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlLCBjICYgMHhmZmZmKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogCiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSB7CiAgICAgICAgICAgICAvKiBDb2Rlc2V0IDIgKi8KLSAgICAgICAgICAgIFdSSVRFMygweDhmLCBjb2RlID4+IDgsIChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVChpbnNpemUsIDMpCisgICAgICAgICAgICBXUklURUJZVEUzKDB4OGYsIGNvZGUgPj4gOCwgKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVChpbnNpemUsIDMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogQ29kZXNldCAxICovCi0gICAgICAgICAgICBXUklURTIoKGNvZGUgPj4gOCkgfCAweDgwLCAoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgICAgIE5FWFQoaW5zaXplLCAyKQorICAgICAgICAgICAgV1JJVEVCWVRFMigoY29kZSA+PiA4KSB8IDB4ODAsIChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoaW5zaXplLCAyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjM0LDE0ICsyNDEsMTIgQEAKIERFQ09ERVIoZXVjX2ppc18yMDA0KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLSAgICAgICAgdWNzNF90IGNvZGU7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBjb2RlLCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0yNDksMTEgKzI1NCwxMSBAQAogICAgICAgICAgICAgLyogSklTIFggMDIwMSBoYWxmLXdpZHRoIGthdGFrYW5hICovCiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICBpZiAoYzIgPj0gMHhhMSAmJiBjMiA8PSAweGRmKSB7Ci0gICAgICAgICAgICAgICAgT1VUMSgweGZlYzAgKyBjMikKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZlYzAgKyBjMik7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTI2MSw0NyArMjY2LDU1IEBACiAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHg4ZikgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMiwgYzM7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMykKLSAgICAgICAgICAgIGMyID0gSU4yIF4gMHg4MDsKLSAgICAgICAgICAgIGMzID0gSU4zIF4gMHg4MDsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMyk7CisgICAgICAgICAgICBjMiA9IElOQllURTIgXiAweDgwOworICAgICAgICAgICAgYzMgPSBJTkJZVEUzIF4gMHg4MDsKIAogICAgICAgICAgICAgLyogSklTIFggMDIxMyBQbGFuZSAyIG9yIEpJUyBYIDAyMTIgKHNlZSBOT1RFUykgKi8KLSAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKCoqb3V0YnVmLCBjMiwgYzMpCi0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsICoqb3V0YnVmLCBjMiwgYzMpIDsKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgY29kZSwgYzIsIGMzKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEVVQ1M0KEVNUEJBU0UgfCBjb2RlKQotICAgICAgICAgICAgICAgIE5FWFRfSU4oMykKKyAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKHdyaXRlciwgYzIsIGMzKQorICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgZGVjb2RlZCwgYzIsIGMzKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgY29kZSwgYzIsIGMzKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoRU1QQkFTRSB8IGNvZGUpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTIsICoqb3V0YnVmLCBjMiwgYzMpIDsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0gICAgICAgICAgICBORVhUKDMsIDEpCisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEyLCBkZWNvZGVkLCBjMiwgYzMpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBORVhUX0lOKDMpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKICAgICAgICAgICAgIGMgXj0gMHg4MDsKLSAgICAgICAgICAgIGMyID0gSU4yIF4gMHg4MDsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMiBeIDB4ODA7CiAKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMTMgUGxhbmUgMSAqLwotICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEoKipvdXRidWYsIGMsIGMyKQotICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIxICYmIGMyID09IDB4NDApICoqb3V0YnVmID0gMHhmZjNjOwotICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIyICYmIGMyID09IDB4MzIpICoqb3V0YnVmID0gMHhmZjVlOwotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjA4LCAqKm91dGJ1ZiwgYywgYzIpOwotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCAqKm91dGJ1ZiwgYywgYzIpOwotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCBjb2RlLCBjLCBjMikgewotICAgICAgICAgICAgICAgIFdSSVRFVUNTNChFTVBCQVNFIHwgY29kZSkKLSAgICAgICAgICAgICAgICBORVhUX0lOKDIpCisgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSh3cml0ZXIsIGMsIGMyKQorICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIxICYmIGMyID09IDB4NDApCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZmM2MpOworICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIyICYmIGMyID09IDB4MzIpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZmNWUpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCBkZWNvZGVkLCBjLCBjMikpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIGNvZGUsIGMsIGMyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoRU1QQkFTRSB8IGNvZGUpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgY29kZSwgYywgYzIpIHsKLSAgICAgICAgICAgICAgICBXUklURTIoY29kZSA+PiAxNiwgY29kZSAmIDB4ZmZmZikKLSAgICAgICAgICAgICAgICBORVhUKDIsIDIpCisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIGNvZGUsIGMsIGMyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIyKGNvZGUgPj4gMTYsIGNvZGUgJiAweGZmZmYpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOwotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE1LDM1ICszMjgsMzcgQEAKIAogRU5DT0RFUihldWNfanApCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFVDUzRJTlZBTElEKGMpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICA7CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZjYxICYmIGMgPD0gMHhmZjlmKSB7CiAgICAgICAgICAgICAvKiBKSVMgWCAwMjAxIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KLSAgICAgICAgICAgIFdSSVRFMigweDhlLCBjIC0gMHhmZWMwKQotICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgV1JJVEVCWVRFMigweDhlLCBjIC0gMHhmZWMwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2lmbmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgZWxzZSBpZiAoYyA9PSAweGZmM2MpIC8qIEZVTEwtV0lEVEggUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgICAgICBjb2RlID0gMHgyMTQwOwogICAgICAgICBlbHNlIGlmIChjID09IDB4YTUpIHsgLyogWUVOIFNJR04gKi8KLSAgICAgICAgICAgIFdSSVRFMSgweDVjKTsKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoMHg1Yyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAweDIwM2UpIHsgLyogT1ZFUkxJTkUgKi8KLSAgICAgICAgICAgIFdSSVRFMSgweDdlKTsKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoMHg3ZSk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMzUyLDEyICszNjcsMTIgQEAKIAogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgewogICAgICAgICAgICAgLyogSklTIFggMDIxMiAqLwotICAgICAgICAgICAgV1JJVEUzKDB4OGYsIGNvZGUgPj4gOCwgKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgICAgICBORVhUKDEsIDMpCisgICAgICAgICAgICBXUklURUJZVEUzKDB4OGYsIGNvZGUgPj4gOCwgKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVCgxLCAzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDggKi8KLSAgICAgICAgICAgIFdSSVRFMigoY29kZSA+PiA4KSB8IDB4ODAsIChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgV1JJVEVCWVRFMigoY29kZSA+PiA4KSB8IDB4ODAsIChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM2NywxMyArMzgyLDEyIEBACiBERUNPREVSKGV1Y19qcCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0zODEsMTEgKzM5NSwxMSBAQAogICAgICAgICAgICAgLyogSklTIFggMDIwMSBoYWxmLXdpZHRoIGthdGFrYW5hICovCiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICBpZiAoYzIgPj0gMHhhMSAmJiBjMiA8PSAweGRmKSB7Ci0gICAgICAgICAgICAgICAgT1VUMSgweGZlYzAgKyBjMikKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZlYzAgKyBjMik7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTM5MywxMiArNDA3LDEzIEBACiAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHg4ZikgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMiwgYzM7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMykKLSAgICAgICAgICAgIGMyID0gSU4yOwotICAgICAgICAgICAgYzMgPSBJTjM7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOworICAgICAgICAgICAgYzMgPSBJTkJZVEUzOwogICAgICAgICAgICAgLyogSklTIFggMDIxMiAqLwotICAgICAgICAgICAgVFJZTUFQX0RFQyhqaXN4MDIxMiwgKipvdXRidWYsIGMyIF4gMHg4MCwgYzMgXiAweDgwKSB7Ci0gICAgICAgICAgICAgICAgTkVYVCgzLCAxKQorICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTIsIGRlY29kZWQsIGMyIF4gMHg4MCwgYzMgXiAweDgwKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTQwNiwxOSArNDIxLDIwIEBACiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgLyogSklTIFggMDIwOCAqLwogI2lmbmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgICAgIGlmIChjID09IDB4YTEgJiYgYzIgPT0gMHhjMCkKICAgICAgICAgICAgICAgICAvKiBGVUxMLVdJRFRIIFJFVkVSU0UgU09MSURVUyAqLwotICAgICAgICAgICAgICAgICoqb3V0YnVmID0gMHhmZjNjOworICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZjNjKTsKICAgICAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgICAgIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYyBeIDB4ODAsIGMyIF4gMHg4MCkgOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjIF4gMHg4MCwgYzIgXiAweDgwKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDMyLDM0ICs0NDgsNDAgQEAKIAogRU5DT0RFUihzaGlmdF9qaXMpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKICNpZmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgSklTWDAyMDFfUl9FTkNPREUoYywgY29kZSkKICNlbHNlCi0gICAgICAgIGlmIChjIDwgMHg4MCkgY29kZSA9IGM7Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gMHgwMGE1KSBjb2RlID0gMHg1YzsgLyogWUVOIFNJR04gKi8KLSAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIwM2UpIGNvZGUgPSAweDdlOyAvKiBPVkVSTElORSAqLworICAgICAgICBpZiAoYyA8IDB4ODApCisgICAgICAgICAgICBjb2RlID0gYzsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAweDAwYTUpCisgICAgICAgICAgICBjb2RlID0gMHg1YzsgLyogWUVOIFNJR04gKi8KKyAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIwM2UpCisgICAgICAgICAgICBjb2RlID0gMHg3ZTsgLyogT1ZFUkxJTkUgKi8KICNlbmRpZgogICAgICAgICBlbHNlIEpJU1gwMjAxX0tfRU5DT0RFKGMsIGNvZGUpCi0gICAgICAgIGVsc2UgVUNTNElOVkFMSUQoYykKLSAgICAgICAgZWxzZSBjb2RlID0gTk9DSEFSOworICAgICAgICBlbHNlIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSBOT0NIQVI7CiAKICAgICAgICAgaWYgKGNvZGUgPCAweDgwIHx8IChjb2RlID49IDB4YTEgJiYgY29kZSA8PSAweGRmKSkgewotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogCi0gICAgICAgICAgICBPVVQxKCh1bnNpZ25lZCBjaGFyKWNvZGUpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRCWVRFMSgodW5zaWduZWQgY2hhciljb2RlKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIGlmIChjb2RlID09IE5PQ0hBUikgewotICAgICAgICAgICAgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKTsKKyAgICAgICAgICAgIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgICAgIDsKICNpZm5kZWYgU1RSSUNUX0JVSUxECiAgICAgICAgICAgICBlbHNlIGlmIChjID09IDB4ZmYzYykKICAgICAgICAgICAgICAgICBjb2RlID0gMHgyMTQwOyAvKiBGVUxMLVdJRFRIIFJFVkVSU0UgU09MSURVUyAqLwpAQCAtNDc1LDkgKzQ5Nyw5IEBACiAgICAgICAgIGMyID0gY29kZSAmIDB4ZmY7CiAgICAgICAgIGMyID0gKCgoYzEgLSAweDIxKSAmIDEpID8gMHg1ZSA6IDApICsgKGMyIC0gMHgyMSk7CiAgICAgICAgIGMxID0gKGMxIC0gMHgyMSkgPj4gMTsKLSAgICAgICAgT1VUMShjMSA8IDB4MWYgPyBjMSArIDB4ODEgOiBjMSArIDB4YzEpCi0gICAgICAgIE9VVDIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE9VVEJZVEUxKGMxIDwgMHgxZiA/IGMxICsgMHg4MSA6IGMxICsgMHhjMSk7CisgICAgICAgIE9VVEJZVEUyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSk7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC00ODYsMjEgKzUwOCwyMSBAQAogREVDT0RFUihzaGlmdF9qaXMpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogI2lmZGVmIFNUUklDVF9CVUlMRAotICAgICAgICBKSVNYMDIwMV9SX0RFQ09ERShjLCAqKm91dGJ1ZikKKyAgICAgICAgSklTWDAyMDFfUl9ERUNPREUoYywgd3JpdGVyKQogI2Vsc2UKLSAgICAgICAgaWYgKGMgPCAweDgwKSAqKm91dGJ1ZiA9IGM7CisgICAgICAgIGlmIChjIDwgMHg4MCkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CiAjZW5kaWYKLSAgICAgICAgZWxzZSBKSVNYMDIwMV9LX0RFQ09ERShjLCAqKm91dGJ1ZikKKyAgICAgICAgZWxzZSBKSVNYMDIwMV9LX0RFQ09ERShjLCB3cml0ZXIpCiAgICAgICAgIGVsc2UgaWYgKChjID49IDB4ODEgJiYgYyA8PSAweDlmKSB8fCAoYyA+PSAweGUwICYmIGMgPD0gMHhlYSkpewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGMyID0gSU4yOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgICAgIGlmIChjMiA8IDB4NDAgfHwgKGMyID4gMHg3ZSAmJiBjMiA8IDB4ODApIHx8IGMyID4gMHhmYykKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIApAQCAtNTEyLDEzICs1MzQsMTQgQEAKICNpZm5kZWYgU1RSSUNUX0JVSUxECiAgICAgICAgICAgICBpZiAoYzEgPT0gMHgyMSAmJiBjMiA9PSAweDQwKSB7CiAgICAgICAgICAgICAgICAgLyogRlVMTC1XSURUSCBSRVZFUlNFIFNPTElEVVMgKi8KLSAgICAgICAgICAgICAgICBPVVQxKDB4ZmYzYykKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZmM2MpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYzEsIGMyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTUyNyw3ICs1NTAsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDEsIDEpIC8qIEpJUyBYIDAyMDEgKi8KKyAgICAgICAgTkVYVF9JTigxKTsgLyogSklTIFggMDIwMSAqLwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNTQwLDMwICs1NjMsMjkgQEAKIAogRU5DT0RFUihzaGlmdF9qaXNfMjAwNCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1Y3M0X3QgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGUgPSBOT0NIQVI7CiAgICAgICAgIGludCBjMSwgYzI7CiAgICAgICAgIFB5X3NzaXplX3QgaW5zaXplOwogCiAgICAgICAgIEpJU1gwMjAxX0VOQ09ERShjLCBjb2RlKQotICAgICAgICBlbHNlIERFQ09ERV9TVVJST0dBVEUoYykKIAogICAgICAgICBpZiAoY29kZSA8IDB4ODAgfHwgKGNvZGUgPj0gMHhhMSAmJiBjb2RlIDw9IDB4ZGYpKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpY29kZSkKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpY29kZSk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBpbnNpemUgPSBHRVRfSU5TSVpFKGMpOworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaW5zaXplID0gMTsKIAogICAgICAgICBpZiAoY29kZSA9PSBOT0NIQVIpIHsKICAgICAgICAgICAgIGlmIChjIDw9IDB4ZmZmZikgewogICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfQk1QKGNvZGUsIGMpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZSwgYykgeworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBNVUxUSUMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxlZnQgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPCAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgTUJFTkNfRkxVU0gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWNzMl90KWMsIDAsCkBAIC01NzYsOCArNTk4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgY2gyID0gSU5DSEFSMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsIElOMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCBjaDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSklTWDAyMTNfRU5DUEFJUlMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IERCQ0lOVikgewpAQCAtNTkzLDE3ICs2MTYsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykgeworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpIHsKICAgICAgICAgICAgICAgICAgICAgLyogYWJhbmRvbiBKSVMgWCAwMjEyIGNvZGVzICovCiAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj4gMTYgPT0gRU1QQkFTRSA+PiAxNikgewogICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfRU1QKGNvZGUsIGMpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZSwgYyYweGZmZmYpOwotICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGluc2l6ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZSwgYyYweGZmZmYpKQorICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CkBAIC02MTIsMjAgKzYzOCwyNyBAQAogICAgICAgICBjMSA9IGNvZGUgPj4gODsKICAgICAgICAgYzIgPSAoY29kZSAmIDB4ZmYpIC0gMHgyMTsKIAotICAgICAgICBpZiAoYzEgJiAweDgwKSB7IC8qIFBsYW5lIDIgKi8KLSAgICAgICAgICAgIGlmIChjMSA+PSAweGVlKSBjMSAtPSAweDg3OwotICAgICAgICAgICAgZWxzZSBpZiAoYzEgPj0gMHhhYyB8fCBjMSA9PSAweGE4KSBjMSAtPSAweDQ5OwotICAgICAgICAgICAgZWxzZSBjMSAtPSAweDQzOworICAgICAgICBpZiAoYzEgJiAweDgwKSB7CisgICAgICAgICAgICAvKiBQbGFuZSAyICovCisgICAgICAgICAgICBpZiAoYzEgPj0gMHhlZSkKKyAgICAgICAgICAgICAgICBjMSAtPSAweDg3OworICAgICAgICAgICAgZWxzZSBpZiAoYzEgPj0gMHhhYyB8fCBjMSA9PSAweGE4KQorICAgICAgICAgICAgICAgIGMxIC09IDB4NDk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYzEgLT0gMHg0MzsKICAgICAgICAgfQotICAgICAgICBlbHNlIC8qIFBsYW5lIDEgKi8KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBQbGFuZSAxICovCiAgICAgICAgICAgICBjMSAtPSAweDIxOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKGMxICYgMSkgYzIgKz0gMHg1ZTsKKyAgICAgICAgaWYgKGMxICYgMSkKKyAgICAgICAgICAgIGMyICs9IDB4NWU7CiAgICAgICAgIGMxID4+PSAxOwotICAgICAgICBPVVQxKGMxICsgKGMxIDwgMHgxZiA/IDB4ODEgOiAweGMxKSkKLSAgICAgICAgT1VUMihjMiArIChjMiA8IDB4M2YgPyAweDQwIDogMHg0MSkpCisgICAgICAgIE9VVEJZVEUxKGMxICsgKGMxIDwgMHgxZiA/IDB4ODEgOiAweGMxKSk7CisgICAgICAgIE9VVEJZVEUyKGMyICsgKGMyIDwgMHgzZiA/IDB4NDAgOiAweDQxKSk7CiAKLSAgICAgICAgTkVYVChpbnNpemUsIDIpCisgICAgICAgIE5FWFQoaW5zaXplLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTYzNCwxNiArNjY3LDE1IEBACiBERUNPREVSKHNoaWZ0X2ppc18yMDA0KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQotICAgICAgICBKSVNYMDIwMV9ERUNPREUoYywgKipvdXRidWYpCisgICAgICAgIEpJU1gwMjAxX0RFQ09ERShjLCB3cml0ZXIpCiAgICAgICAgIGVsc2UgaWYgKChjID49IDB4ODEgJiYgYyA8PSAweDlmKSB8fCAoYyA+PSAweGUwICYmIGMgPD0gMHhmYykpewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7Ci0gICAgICAgICAgICB1Y3M0X3QgY29kZTsKKyAgICAgICAgICAgIFB5X1VDUzQgY29kZSwgZGVjb2RlZDsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgaWYgKGMyIDwgMHg0MCB8fCAoYzIgPiAweDdlICYmIGMyIDwgMHg4MCkgfHwgYzIgPiAweGZjKQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogCkBAIC02NTQsNTAgKzY4Niw0NyBAQAogCiAgICAgICAgICAgICBpZiAoYzEgPCAweDVlKSB7IC8qIFBsYW5lIDEgKi8KICAgICAgICAgICAgICAgICBjMSArPSAweDIxOwotICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKCoqb3V0YnVmLAorICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEsIGMyKQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgKipvdXRidWYsIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgxKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsICoqb3V0YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCBjb2RlLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEVVQ1M0KEVNUEJBU0UgfCBjb2RlKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgY29kZSwgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFMihjb2RlID4+IDE2LCBjb2RlICYgMHhmZmZmKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgyKQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIGRlY29kZWQsIGMxLCBjMikpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgY29kZSwgYzEsIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihFTVBCQVNFIHwgY29kZSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCBjb2RlLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSMihjb2RlID4+IDE2LCBjb2RlICYgMHhmZmZmKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIE5FWFRfSU4oMikKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7IC8qIFBsYW5lIDIgKi8KLSAgICAgICAgICAgICAgICBpZiAoYzEgPj0gMHg2NykgYzEgKz0gMHgwNzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjMSA+PSAweDYzIHx8IGMxID09IDB4NWYpIGMxIC09IDB4Mzc7Ci0gICAgICAgICAgICAgICAgZWxzZSBjMSAtPSAweDNkOworICAgICAgICAgICAgICAgIGlmIChjMSA+PSAweDY3KQorICAgICAgICAgICAgICAgICAgICBjMSArPSAweDA3OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMxID49IDB4NjMgfHwgYzEgPT0gMHg1ZikKKyAgICAgICAgICAgICAgICAgICAgYzEgLT0gMHgzNzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGMxIC09IDB4M2Q7CiAKLSAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMigqKm91dGJ1ZiwKKyAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMih3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxLCBjMikKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsICoqb3V0YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSwgYzIpIDsKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIGNvZGUsIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQoRU1QQkFTRSB8IGNvZGUpCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCBkZWNvZGVkLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIGNvZGUsIGMxLCBjMikpIHsKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihFTVBCQVNFIHwgY29kZSk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgxLCAxKSAvKiBKSVMgWCAwMjAxICovCisgICAgICAgIE5FWFRfSU4oMSk7IC8qIEpJUyBYIDAyMDEgKi8KICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3Nfa3IuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3Nfa3IuYwppbmRleCBmNTY5N2RkLi4xYWQ0MWE3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19rci5jCkBAIC0zMyw1MSArMzMsNTYgQEAKIAogRU5DT0RFUihldWNfa3IpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCi0gICAgICAgIFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmICgoY29kZSAmIDB4ODAwMCkgPT0gMCkgewogICAgICAgICAgICAgLyogS1MgWCAxMDAxIGNvZGVkIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgT1VUQllURTEoKGNvZGUgPj4gOCkgfCAweDgwKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7ICAgICAgICAgIC8qIE1hcHBpbmcgaXMgZm91bmQgaW4gQ1A5NDkgZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAqIGJ1dCB3ZSBlbmNvZGUgaXQgaW4gS1MgWCAxMDAxOjE5OTggQW5uZXggMywKLSAgICAgICAgICAgICAgICAgKiBtYWtlLXVwIHNlcXVlbmNlIGZvciBFVUMtS1IuICovCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogTWFwcGluZyBpcyBmb3VuZCBpbiBDUDk0OSBleHRlbnNpb24sCisgICAgICAgICAgICAgICBidXQgd2UgZW5jb2RlIGl0IGluIEtTIFggMTAwMToxOTk4IEFubmV4IDMsCisgICAgICAgICAgICAgICBtYWtlLXVwIHNlcXVlbmNlIGZvciBFVUMtS1IuICovCiAKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDgpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRig4KTsKIAogICAgICAgICAgICAgLyogc3lsbGFibGUgY29tcG9zaXRpb24gcHJlY2VkZW5jZSAqLwotICAgICAgICAgICAgT1VUMShFVUNLUl9KQU1PX0ZJUlNUQllURSkKLSAgICAgICAgICAgIE9VVDIoRVVDS1JfSkFNT19GSUxMRVIpCisgICAgICAgICAgICBPVVRCWVRFMShFVUNLUl9KQU1PX0ZJUlNUQllURSk7CisgICAgICAgICAgICBPVVRCWVRFMihFVUNLUl9KQU1PX0ZJTExFUik7CiAKICAgICAgICAgICAgIC8qIEFsbCBjb2RlcG9pbnRzIGluIENQOTQ5IGV4dGVuc2lvbiBhcmUgaW4gdW5pY29kZQogICAgICAgICAgICAgICogSGFuZ3VsIFN5bGxhYmxlIGFyZWEuICovCiAgICAgICAgICAgICBhc3NlcnQoMHhhYzAwIDw9IGMgJiYgYyA8PSAweGQ3YTMpOwogICAgICAgICAgICAgYyAtPSAweGFjMDA7CiAKLSAgICAgICAgICAgIE9VVDMoRVVDS1JfSkFNT19GSVJTVEJZVEUpCi0gICAgICAgICAgICBPVVQ0KHUyY2drX2Nob3Nlb25nW2MgLyA1ODhdKQotICAgICAgICAgICAgTkVYVF9PVVQoNCkKKyAgICAgICAgICAgIE9VVEJZVEUzKEVVQ0tSX0pBTU9fRklSU1RCWVRFKTsKKyAgICAgICAgICAgIE9VVEJZVEU0KHUyY2drX2Nob3Nlb25nW2MgLyA1ODhdKTsKKyAgICAgICAgICAgIE5FWFRfT1VUKDQpOwogCi0gICAgICAgICAgICBPVVQxKEVVQ0tSX0pBTU9fRklSU1RCWVRFKQotICAgICAgICAgICAgT1VUMih1MmNna19qdW5nc2VvbmdbKGMgLyAyOCkgJSAyMV0pCi0gICAgICAgICAgICBPVVQzKEVVQ0tSX0pBTU9fRklSU1RCWVRFKQotICAgICAgICAgICAgT1VUNCh1MmNna19qb25nc2VvbmdbYyAlIDI4XSkKLSAgICAgICAgICAgIE5FWFQoMSwgNCkKKyAgICAgICAgICAgIE9VVEJZVEUxKEVVQ0tSX0pBTU9fRklSU1RCWVRFKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKHUyY2drX2p1bmdzZW9uZ1soYyAvIDI4KSAlIDIxXSk7CisgICAgICAgICAgICBPVVRCWVRFMyhFVUNLUl9KQU1PX0ZJUlNUQllURSk7CisgICAgICAgICAgICBPVVRCWVRFNCh1MmNna19qb25nc2VvbmdbYyAlIDI4XSk7CisgICAgICAgICAgICBORVhUKDEsIDQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDIsMjQgKzEwNywyMyBAQAogREVDT0RFUihldWNfa3IpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKICAgICAgICAgaWYgKGMgPT0gRVVDS1JfSkFNT19GSVJTVEJZVEUgJiYKLSAgICAgICAgICAgIElOMiA9PSBFVUNLUl9KQU1PX0ZJTExFUikgeworICAgICAgICAgICAgSU5CWVRFMiA9PSBFVUNLUl9KQU1PX0ZJTExFUikgewogICAgICAgICAgICAgLyogS1MgWCAxMDAxOjE5OTggQW5uZXggMyBtYWtlLXVwIHNlcXVlbmNlICovCiAgICAgICAgICAgICBEQkNIQVIgY2hvLCBqdW5nLCBqb25nOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDgpCisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDgpOwogICAgICAgICAgICAgaWYgKCgqaW5idWYpWzJdICE9IEVVQ0tSX0pBTU9fRklSU1RCWVRFIHx8CiAgICAgICAgICAgICAgICAgKCppbmJ1ZilbNF0gIT0gRVVDS1JfSkFNT19GSVJTVEJZVEUgfHwKICAgICAgICAgICAgICAgICAoKmluYnVmKVs2XSAhPSBFVUNLUl9KQU1PX0ZJUlNUQllURSkKQEAgLTE0NSwxMSArMTQ5LDEyIEBACiAgICAgICAgICAgICBpZiAoY2hvID09IE5PTkUgfHwganVuZyA9PSBOT05FIHx8IGpvbmcgPT0gTk9ORSkKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICAgICAgT1VUMSgweGFjMDAgKyBjaG8qNTg4ICsganVuZyoyOCArIGpvbmcpOwotICAgICAgICAgICAgTkVYVCg4LCAxKQorICAgICAgICAgICAgT1VUQ0hBUigweGFjMDAgKyBjaG8qNTg4ICsganVuZyoyOCArIGpvbmcpOworICAgICAgICAgICAgTkVYVF9JTig4KTsKICAgICAgICAgfQotICAgICAgICBlbHNlIFRSWU1BUF9ERUMoa3N4MTAwMSwgKipvdXRidWYsIGMgXiAweDgwLCBJTjIgXiAweDgwKSB7Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoa3N4MTAwMSwgZGVjb2RlZCwgYyBeIDB4ODAsIElOQllURTIgXiAweDgwKSkgeworICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC0xNjYsMjcgKzE3MSwzMSBAQAogCiBFTkNPREVSKGNwOTQ5KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKLSAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCi0gICAgICAgICAgICBPVVQyKGNvZGUgJiAweEZGKSAvKiBNU0Igc2V0OiBDUDk0OSAqLworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpKQorICAgICAgICAgICAgOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKSAvKiBNU0IgdW5zZXQ6IGtzIHggMTAwMSAqLwotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOworICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKKyAgICAgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweEZGKTsgLyogTVNCIHNldDogQ1A5NDkgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSB8IDB4ODApOyAvKiBNU0IgdW5zZXQ6IGtzIHggMTAwMSAqLworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTk1LDIyICsyMDQsMjQgQEAKIERFQ09ERVIoY3A5NDkpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIFRSWU1BUF9ERUMoa3N4MTAwMSwgKipvdXRidWYsIGMgXiAweDgwLCBJTjIgXiAweDgwKTsKLSAgICAgICAgZWxzZSBUUllNQVBfREVDKGNwOTQ5ZXh0LCAqKm91dGJ1ZiwgYywgSU4yKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoa3N4MTAwMSwgZGVjb2RlZCwgYyBeIDB4ODAsIElOQllURTIgXiAweDgwKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoY3A5NDlleHQsIGRlY29kZWQsIGMsIElOQllURTIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMjUwLDE4ICsyNjEsMjAgQEAKIAogRU5DT0RFUihqb2hhYikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAogICAgICAgICBpZiAoYyA+PSAweGFjMDAgJiYgYyA8PSAweGQ3YTMpIHsKICAgICAgICAgICAgIGMgLT0gMHhhYzAwOwpAQCAtMjcyLDcgKzI4NSw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweDMxMzEgJiYgYyA8PSAweDMxNjMpCiAgICAgICAgICAgICBjb2RlID0gdTJqb2hhYmphbW9bYyAtIDB4MzEzMV07Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYykgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKSkgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzIsIHQyOwogICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdDE7CiAKQEAgLTI4NSw5ICsyOTgsOSBAQAogICAgICAgICAgICAgICAgIHQxID0gKGMxIDwgMHg0YSA/IChjMSAtIDB4MjEgKyAweDFiMikgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAoYzEgLSAweDIxICsgMHgxOTcpKTsKICAgICAgICAgICAgICAgICB0MiA9ICgodDEgJiAxKSA/IDB4NWUgOiAwKSArIChjMiAtIDB4MjEpOwotICAgICAgICAgICAgICAgIE9VVDEodDEgPj4gMSkKLSAgICAgICAgICAgICAgICBPVVQyKHQyIDwgMHg0ZSA/IHQyICsgMHgzMSA6IHQyICsgMHg0MykKLSAgICAgICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICAgICAgT1VUQllURTEodDEgPj4gMSk7CisgICAgICAgICAgICAgICAgT1VUQllURTIodDIgPCAweDRlID8gdDIgKyAweDMxIDogdDIgKyAweDQzKTsKKyAgICAgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtMjk2LDkgKzMwOSw5IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICBPVVQyKGNvZGUgJiAweGZmKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE9VVEJZVEUxKGNvZGUgPj4gOCk7CisgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweGZmKTsKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTM0OCwxOCArMzYxLDE3IEBACiBERUNPREVSKGpvaGFiKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgYyA9IElOMSwgYzI7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMSwgYzI7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIGMyID0gSU4yOworICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBjMiA9IElOQllURTI7CiAKICAgICAgICAgaWYgKGMgPCAweGQ4KSB7CiAgICAgICAgICAgICAvKiBqb2hhYiBoYW5ndWwgKi8KQEAgLTM4MSwzMyArMzkzLDMzIEBACiAgICAgICAgICAgICBpZiAoaV9jaG8gPT0gRklMTCkgewogICAgICAgICAgICAgICAgIGlmIChpX2p1bmcgPT0gRklMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaV9qb25nID09IEZJTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBPVVQxKDB4MzAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHgzMDAwKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgT1VUMSgweDMxMDAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fam9uZ3Nlb25nW2Nfam9uZ10pCisgICAgICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKDB4MzEwMCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2pvbmdzZW9uZ1tjX2pvbmddKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpX2pvbmcgPT0gRklMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIE9VVDEoMHgzMTAwIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2p1bmdzZW9uZ1tjX2p1bmddKQorICAgICAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUigweDMxMDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19qdW5nc2VvbmdbY19qdW5nXSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGlfanVuZyA9PSBGSUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpX2pvbmcgPT0gRklMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIE9VVDEoMHgzMTAwIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2Nob3Nlb25nW2NfY2hvXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHgzMTAwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fY2hvc2VvbmdbY19jaG9dKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgT1VUMSgweGFjMDAgKwotICAgICAgICAgICAgICAgICAgICAgICAgIGlfY2hvICogNTg4ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBpX2p1bmcgKiAyOCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGlfam9uZyA9PSBGSUxMID8gMCA6IGlfam9uZykpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHhhYzAwICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlfY2hvICogNTg4ICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlfanVuZyAqIDI4ICsKKyAgICAgICAgICAgICAgICAgICAgICAgIChpX2pvbmcgPT0gRklMTCA/IDAgOiBpX2pvbmcpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBLUyBYIDEwMDEgZXhjZXB0IGhhbmd1bCBqYW1vcyBhbmQgc3lsbGFibGVzICovCiAgICAgICAgICAgICBpZiAoYyA9PSAweGRmIHx8IGMgPiAweGY5IHx8CkBAIC00MjQsOSArNDM2LDEzIEBACiAgICAgICAgICAgICAgICAgdDEgPSB0MSArICh0MiA8IDB4NWUgPyAwIDogMSkgKyAweDIxOwogICAgICAgICAgICAgICAgIHQyID0gKHQyIDwgMHg1ZSA/IHQyIDogdDIgLSAweDVlKSArIDB4MjE7CiAKLSAgICAgICAgICAgICAgICBUUllNQVBfREVDKGtzeDEwMDEsICoqb3V0YnVmLCB0MSwgdDIpOwotICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGtzeDEwMDEsIGRlY29kZWQsIHQxLCB0MikpIHsKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfdHcuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfdHcuYwppbmRleCA5MTYyOThkLi43MjJiMjZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX3R3LmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc190dy5jCkBAIC0xMywyNiArMTMsMzAgQEAKIAogRU5DT0RFUihiaWc1KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9ICoqaW5idWY7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogICAgICAgICAgICAgKipvdXRidWYgPSAodW5zaWduZWQgY2hhciljOwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAotICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgT1VUMihjb2RlICYgMHhGRikKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBpZiAoVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgT1VUQllURTIoY29kZSAmIDB4RkYpOworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNDEsMTkgKzQ1LDE5IEBACiBERUNPREVSKGJpZzUpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIFRSWU1BUF9ERUMoYmlnNSwgKipvdXRidWYsIGMsIElOMikgewotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhiaWc1LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkgeworICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSByZXR1cm4gMTsKICAgICB9CkBAIC02OCwyNSArNzIsMzAgQEAKIAogRU5DT0RFUihjcDk1MCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKLSAgICAgICAgVFJZTUFQX0VOQyhjcDk1MGV4dCwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgT1VUMihjb2RlICYgMHhGRikKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5NTBleHQsIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhGRik7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC05NSwyMyArMTA0LDI1IEBACiBERUNPREVSKGNwOTUwKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCi0gICAgICAgIFRSWU1BUF9ERUMoY3A5NTBleHQsICoqb3V0YnVmLCBjLCBJTjIpOwotICAgICAgICBlbHNlIFRSWU1BUF9ERUMoYmlnNSwgKipvdXRidWYsIGMsIElOMik7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChUUllNQVBfREVDKGNwOTUwZXh0LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoYmlnNSwgZGVjb2RlZCwgYywgSU5CWVRFMikpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIE5FWFRfSU4oMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9hbGdfamlzeDAyMDEuaCBiL01vZHVsZXMvY2prY29kZWNzL2FsZ19qaXN4MDIwMS5oCmluZGV4IDBiYzdkYjUuLjMwMzRiNWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL2FsZ19qaXN4MDIwMS5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL2FsZ19qaXN4MDIwMS5oCkBAIC0xLDI0ICsxLDY1IEBACiAjZGVmaW5lIEpJU1gwMjAxX1JfRU5DT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpIDwgMHg4MCAmJiAoYykgIT0gMHg1YyAmJiAoYykgIT0gMHg3ZSkgICAgICAgXAorICAgIGlmICgoYykgPCAweDgwICYmIChjKSAhPSAweDVjICYmIChjKSAhPSAweDdlKSB7ICAgICBcCiAgICAgICAgIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHgwMGE1KSAoYXNzaSkgPSAweDVjOyAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDIwM2UpIChhc3NpKSA9IDB4N2U7CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHgwMGE1KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDVjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHgyMDNlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiAjZGVmaW5lIEpJU1gwMjAxX0tfRU5DT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpID49IDB4ZmY2MSAmJiAoYykgPD0gMHhmZjlmKSAgICAgICAgICAgICAgICAgXAotICAgICAgICAoYXNzaSkgPSAoYykgLSAweGZlYzA7CisgICAgaWYgKChjKSA+PSAweGZmNjEgJiYgKGMpIDw9IDB4ZmY5ZikgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gKGMpIC0gMHhmZWMwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKwogI2RlZmluZSBKSVNYMDIwMV9FTkNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgSklTWDAyMDFfUl9FTkNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIEpJU1gwMjAxX0tfRU5DT0RFKGMsIGFzc2kpCiAKLSNkZWZpbmUgSklTWDAyMDFfUl9ERUNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoYykgPCAweDVjKSAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4NWMpIChhc3NpKSA9IDB4MDBhNTsgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPCAweDdlKSAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDdlKSAoYXNzaSkgPSAweDIwM2U7ICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4N2YpIChhc3NpKSA9IDB4N2Y7Ci0jZGVmaW5lIEpJU1gwMjAxX0tfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpID49IDB4YTEgJiYgKGMpIDw9IDB4ZGYpICAgICAgICAgICAgICAgICAgICAgXAotICAgIChhc3NpKSA9IDB4ZmVjMCArIChjKTsKLSNkZWZpbmUgSklTWDAyMDFfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEpJU1gwMjAxX1JfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBKSVNYMDIwMV9LX0RFQ09ERShjLCBhc3NpKQorI2RlZmluZSBKSVNYMDIwMV9SX0RFQ09ERV9DSEFSKGMsIGFzc2kpICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA8IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHgwMGE1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpIDwgMHg3ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHgyMDNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2YpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHg3ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBKSVNYMDIwMV9SX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA8IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUihjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDAwYTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpIDwgMHg3ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUihjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwM2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2YpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDdmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBKSVNYMDIwMV9LX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA+PSAweGExICYmIChjKSA8PSAweGRmKSB7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweGZlYzAgKyAoYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKyNkZWZpbmUgSklTWDAyMDFfS19ERUNPREVfQ0hBUihjLCBhc3NpKSAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYykgPj0gMHhhMSAmJiAoYykgPD0gMHhkZikgeyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4ZmVjMCArIChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisjZGVmaW5lIEpJU1gwMjAxX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBKSVNYMDIwMV9SX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgSklTWDAyMDFfS19ERUNPREUoYywgd3JpdGVyKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaAppbmRleCBhYjA2ODJhLi4yNWJhYjQxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaApAQCAtMzMsNyArMzMsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgZGJjc19pbmRleCBkZWNvZGVfbWFwOwogCiBzdHJ1Y3Qgd2lkZWRiY3NfaW5kZXggewotICAgIGNvbnN0IHVjczRfdCAqbWFwOworICAgIGNvbnN0IFB5X1VDUzQgKm1hcDsKICAgICB1bnNpZ25lZCBjaGFyIGJvdHRvbSwgdG9wOwogfTsKIHR5cGVkZWYgc3RydWN0IHdpZGVkYmNzX2luZGV4IHdpZGVkZWNvZGVfbWFwOwpAQCAtNTYsNyArNTYsNyBAQAogfTsKIAogc3RydWN0IHBhaXJfZW5jb2RlbWFwIHsKLSAgICB1Y3M0X3QgdW5pc2VxOworICAgIFB5X1VDUzQgdW5pc2VxOwogICAgIERCQ0hBUiBjb2RlOwogfTsKIApAQCAtNzIsNyArNzIsOCBAQAogI2RlZmluZSBFTkNPREVSKGVuY29kaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHN0YXRpYyBQeV9zc2l6ZV90IGVuY29kaW5nIyNfZW5jb2RlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsIGNvbnN0IHZvaWQgKmNvbmZpZywgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBQeV9VTklDT0RFICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQga2luZCwgdm9pZCAqZGF0YSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfc3NpemVfdCAqaW5wb3MsIFB5X3NzaXplX3QgaW5sZW4sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgdW5zaWduZWQgY2hhciAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0LCBpbnQgZmxhZ3MpCiAjZGVmaW5lIEVOQ09ERVJfUkVTRVQoZW5jb2RpbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgc3RhdGljIFB5X3NzaXplX3QgZW5jb2RpbmcjI19lbmNvZGVfcmVzZXQoICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC04NiwxMjAgKzg3LDExOCBAQAogICAgIHN0YXRpYyBQeV9zc2l6ZV90IGVuY29kaW5nIyNfZGVjb2RlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsIGNvbnN0IHZvaWQgKmNvbmZpZywgICAgICAgICAgICAgICAgXAogICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LCAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeV9VTklDT0RFICoqb3V0YnVmLCBQeV9zc2l6ZV90IG91dGxlZnQpCisgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKICNkZWZpbmUgREVDT0RFUl9SRVNFVChlbmNvZGluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzdGF0aWMgUHlfc3NpemVfdCBlbmNvZGluZyMjX2RlY29kZV9yZXNldCggICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLCBjb25zdCB2b2lkICpjb25maWcpCiAKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gNAotI2RlZmluZSBVQ1M0SU5WQUxJRChjb2RlKSAgICAgICBcCi0gICAgaWYgKChjb2RlKSA+IDB4RkZGRikgICAgICAgIFwKLSAgICByZXR1cm4gMTsKLSNlbHNlCi0jZGVmaW5lIFVDUzRJTlZBTElEKGNvZGUpICAgICAgIFwKLSAgICBpZiAoMCkgOwotI2VuZGlmCi0KICNkZWZpbmUgTkVYVF9JTihpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKmluYnVmKSArPSAoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoaW5sZWZ0KSAtPSAoaSk7CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqaW5idWYpICs9IChpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChpbmxlZnQpIC09IChpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTkVYVF9JTkNIQVIoaSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCppbnBvcykgKz0gKGkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogI2RlZmluZSBORVhUX09VVChvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgqb3V0YnVmKSArPSAobyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChvdXRsZWZ0KSAtPSAobyk7CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKSArPSAobyk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChvdXRsZWZ0KSAtPSAobyk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgTkVYVChpLCBvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBORVhUX0lOKGkpIE5FWFRfT1VUKG8pCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE5FWFRfSU5DSEFSKGkpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE5FWFRfT1VUKG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBSRVFVSVJFX0lOQlVGKG4pICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChpbmxlZnQgPCAobikpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOworICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoaW5sZWZ0IDwgKG4pKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKICNkZWZpbmUgUkVRVUlSRV9PVVRCVUYobikgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAob3V0bGVmdCA8IChuKSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIE1CRVJSX1RPT1NNQUxMOworICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAob3V0bGVmdCA8IChuKSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT1NNQUxMOyAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgSU4xICgoKmluYnVmKVswXSkKLSNkZWZpbmUgSU4yICgoKmluYnVmKVsxXSkKLSNkZWZpbmUgSU4zICgoKmluYnVmKVsyXSkKLSNkZWZpbmUgSU40ICgoKmluYnVmKVszXSkKKyNkZWZpbmUgSU5CWVRFMSAoKCppbmJ1ZilbMF0pCisjZGVmaW5lIElOQllURTIgKCgqaW5idWYpWzFdKQorI2RlZmluZSBJTkJZVEUzICgoKmluYnVmKVsyXSkKKyNkZWZpbmUgSU5CWVRFNCAoKCppbmJ1ZilbM10pCiAKLSNkZWZpbmUgT1VUMShjKSAoKCpvdXRidWYpWzBdKSA9IChjKTsKLSNkZWZpbmUgT1VUMihjKSAoKCpvdXRidWYpWzFdKSA9IChjKTsKLSNkZWZpbmUgT1VUMyhjKSAoKCpvdXRidWYpWzJdKSA9IChjKTsKLSNkZWZpbmUgT1VUNChjKSAoKCpvdXRidWYpWzNdKSA9IChjKTsKKyNkZWZpbmUgSU5DSEFSMSAoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgKmlucG9zKSkKKyNkZWZpbmUgSU5DSEFSMiAoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgKmlucG9zICsgMSkpCiAKLSNkZWZpbmUgV1JJVEUxKGMxKSAgICAgICAgICAgICAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDEpICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gKGMxKTsKLSNkZWZpbmUgV1JJVEUyKGMxLCBjMikgICAgICAgICAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDIpICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOwotI2RlZmluZSBXUklURTMoYzEsIGMyLCBjMykgICAgICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoMykgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVsxXSA9IChjMik7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzJdID0gKGMzKTsKLSNkZWZpbmUgV1JJVEU0KGMxLCBjMiwgYzMsIGM0KSAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDQpICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVsyXSA9IChjMyk7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzNdID0gKGM0KTsKKyNkZWZpbmUgT1VUQ0hBUihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKHdyaXRlciwgKGMpKSA8IDApICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBNQkVSUl9FWENFUFRJT047ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0jIGRlZmluZSBXUklURVVDUzQoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMF0gPSAweGQ4MDAgKyAoKChjKSAtIDB4MTAwMDApID4+IDEwKTsgICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzFdID0gMHhkYzAwICsgKCgoYykgLSAweDEwMDAwKSAmIDB4M2ZmKTsgICAgICAgICAgXAotICAgIE5FWFRfT1VUKDIpCi0jZWxzZQotIyBkZWZpbmUgV1JJVEVVQ1M0KGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKipvdXRidWYgPSAoUHlfVU5JQ09ERSkoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE5FWFRfT1VUKDEpCi0jZW5kaWYKKyNkZWZpbmUgT1VUQ0hBUjIoYzEsIGMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfVUNTNCBfYzEgPSAoYzEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfVUNTNCBfYzIgPSAoYzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIDIsIFB5X01BWChfYzEsIGMyKSkgPCAwKSAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBNQkVSUl9FWENFUFRJT047ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgX2MxKTsgICAgIFwKKyAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcyArIDEsIF9jMik7IFwKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIE9VVEJZVEUxKGMpIFwKKyAgICBkbyB7ICgoKm91dGJ1ZilbMF0pID0gKGMpOyB9IHdoaWxlICgwKQorI2RlZmluZSBPVVRCWVRFMihjKSBcCisgICAgZG8geyAoKCpvdXRidWYpWzFdKSA9IChjKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgT1VUQllURTMoYykgXAorICAgIGRvIHsgKCgqb3V0YnVmKVsyXSkgPSAoYyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIE9VVEJZVEU0KGMpIFwKKyAgICBkbyB7ICgoKm91dGJ1ZilbM10pID0gKGMpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFdSSVRFQllURTEoYzEpICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOyAgICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV1JJVEVCWVRFMihjMSwgYzIpICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7ICAgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBXUklURUJZVEUzKGMxLCBjMiwgYzMpICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSRVFVSVJFX09VVEJVRigzKTsgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMl0gPSAoYzMpOyAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFdSSVRFQllURTQoYzEsIGMyLCBjMywgYzQpICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDQpOyAgICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVsxXSA9IChjMik7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVsyXSA9IChjMyk7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVszXSA9IChjNCk7ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBfVFJZTUFQX0VOQyhtLCBhc3NpLCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAoKG0pLT5tYXAgIT0gTlVMTCAmJiAodmFsKSA+PSAobSktPmJvdHRvbSAmJiAgICAgICAgICAgICAgICBcCiAgICAgICAgICh2YWwpPD0gKG0pLT50b3AgJiYgKChhc3NpKSA9IChtKS0+bWFwWyh2YWwpIC0gICAgICAgICAgXAogICAgICAgICAobSktPmJvdHRvbV0pICE9IE5PQ0hBUikKLSNkZWZpbmUgVFJZTUFQX0VOQ19DT05EKGNoYXJzZXQsIGFzc2ksIHVuaSkgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFRSWU1BUF9FTkMoY2hhcnNldCwgYXNzaSwgdW5pKSAgICAgICAgICAgICAgICAgICAgIFwKICAgICBfVFJZTUFQX0VOQygmY2hhcnNldCMjX2VuY21hcFsodW5pKSA+PiA4XSwgYXNzaSwgKHVuaSkgJiAweGZmKQotI2RlZmluZSBUUllNQVBfRU5DKGNoYXJzZXQsIGFzc2ksIHVuaSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiBUUllNQVBfRU5DX0NPTkQoY2hhcnNldCwgYXNzaSwgdW5pKQogCi0jZGVmaW5lIF9UUllNQVBfREVDKG0sIGFzc2ksIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgobSktPm1hcCAhPSBOVUxMICYmICh2YWwpID49IChtKS0+Ym90dG9tICYmICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHZhbCk8PSAobSktPnRvcCAmJiAoKGFzc2kpID0gKG0pLT5tYXBbKHZhbCkgLSAgICAgICAgICBcCi0gICAgICAgIChtKS0+Ym90dG9tXSkgIT0gVU5JSU5WKQotI2RlZmluZSBUUllNQVBfREVDKGNoYXJzZXQsIGFzc2ksIGMxLCBjMikgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiBfVFJZTUFQX0RFQygmY2hhcnNldCMjX2RlY21hcFtjMV0sIGFzc2ksIGMyKQotCi0jZGVmaW5lIF9UUllNQVBfRU5DX01QTEFORShtLCBhc3NwbGFuZSwgYXNzaGksIGFzc2xvLCB2YWwpICAgICAgXAotICAgICgobSktPm1hcCAhPSBOVUxMICYmICh2YWwpID49IChtKS0+Ym90dG9tICYmICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHZhbCk8PSAobSktPnRvcCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICgoYXNzcGxhbmUpID0gKG0pLT5tYXBbKCh2YWwpIC0gKG0pLT5ib3R0b20pKjNdKSAhPSAwICYmIFwKLSAgICAgICAgKCgoYXNzaGkpID0gKG0pLT5tYXBbKCh2YWwpIC0gKG0pLT5ib3R0b20pKjMgKyAxXSksIDEpICYmIFwKLSAgICAgICAgKCgoYXNzbG8pID0gKG0pLT5tYXBbKCh2YWwpIC0gKG0pLT5ib3R0b20pKjMgKyAyXSksIDEpKQotI2RlZmluZSBUUllNQVBfRU5DX01QTEFORShjaGFyc2V0LCBhc3NwbGFuZSwgYXNzaGksIGFzc2xvLCB1bmkpIFwKLSAgICBpZiBfVFJZTUFQX0VOQ19NUExBTkUoJmNoYXJzZXQjI19lbmNtYXBbKHVuaSkgPj4gOF0sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgYXNzcGxhbmUsIGFzc2hpLCBhc3NsbywgKHVuaSkgJiAweGZmKQotI2RlZmluZSBUUllNQVBfREVDX01QTEFORShjaGFyc2V0LCBhc3NpLCBwbGFuZSwgYzEsIGMyKSAgICAgICAgIFwKLSAgICBpZiBfVFJZTUFQX0RFQygmY2hhcnNldCMjX2RlY21hcFtwbGFuZV1bYzFdLCBhc3NpLCBjMikKLQotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0jZGVmaW5lIERFQ09ERV9TVVJST0dBVEUoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChjID4+IDEwID09IDB4ZDgwMCA+PiAxMCkgeyAvKiBoaWdoIHN1cnJvZ2F0ZSAqLyAgICAgICAgIFwKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChJTjIgPj4gMTAgPT0gMHhkYzAwID4+IDEwKSB7IC8qIGxvdyBzdXJyb2dhdGUgKi8gXAotICAgICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKHVjczRfdCkoYyAtIDB4ZDgwMCkgPDwgMTApICsgXAotICAgICAgICAgICAgKCh1Y3M0X3QpKElOMikgLSAweGRjMDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotI2RlZmluZSBHRVRfSU5TSVpFKGMpICAgKChjKSA+IDB4ZmZmZiA/IDIgOiAxKQotI2Vsc2UKLSNkZWZpbmUgREVDT0RFX1NVUlJPR0FURShjKSB7O30KLSNkZWZpbmUgR0VUX0lOU0laRShjKSAgIDEKLSNlbmRpZgorI2RlZmluZSBfVFJZTUFQX0RFQyhtLCBhc3NpLCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChtKS0+bWFwICE9IE5VTEwgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAodmFsKSA+PSAobSktPmJvdHRvbSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKHZhbCk8PSAobSktPnRvcCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICgoYXNzaSkgPSAobSktPm1hcFsodmFsKSAtIChtKS0+Ym90dG9tXSkgIT0gVU5JSU5WKQorI2RlZmluZSBUUllNQVBfREVDKGNoYXJzZXQsIGFzc2ksIGMxLCBjMikgICAgICAgICAgICAgICAgICAgICBcCisgICAgX1RSWU1BUF9ERUMoJmNoYXJzZXQjI19kZWNtYXBbYzFdLCBhc3NpLCBjMikKIAogI2RlZmluZSBCRUdJTl9NQVBQSU5HU19MSVNUIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGJjc19tYXAgX21hcHBpbmdfbGlzdFtdID0gewogI2RlZmluZSBNQVBQSU5HX0VOQ09OTFkoZW5jKSB7I2VuYywgKHZvaWQqKWVuYyMjX2VuY21hcCwgTlVMTH0sCkBAIC0zMjQsNyArMzIzLDcgQEAKICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGFpcl9lbmNvZGVtYXAgKmhheXN0YWNrLCBpbnQgaGF5c3RhY2tzaXplKQogewogICAgIGludCBwb3MsIG1pbiwgbWF4OwotICAgIHVjczRfdCB2YWx1ZSA9IGJvZHkgPDwgMTYgfCBtb2RpZmllcjsKKyAgICBQeV9VQ1M0IHZhbHVlID0gYm9keSA8PCAxNiB8IG1vZGlmaWVyOwogCiAgICAgbWluID0gMDsKICAgICBtYXggPSBoYXlzdGFja3NpemU7CkBAIC0zNTksNyArMzU4LDcgQEAKIHsKICAgICBQeU9iamVjdCAqbywgKm1vZDsKIAotICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgoY2hhciAqKW1vZG5hbWUpOworICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZShtb2RuYW1lKTsKICAgICBpZiAobW9kID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvZW11X2ppc3gwMjEzXzIwMDAuaCBiL01vZHVsZXMvY2prY29kZWNzL2VtdV9qaXN4MDIxM18yMDAwLmgKaW5kZXggNDIyN2ZiMi4uYTVkNWE3MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvZW11X2ppc3gwMjEzXzIwMDAuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9lbXVfamlzeDAyMTNfMjAwMC5oCkBAIC0yLDcgKzIsNyBAQAogICogc3RhbmRhcmRzLiAqLwogCiAjaWZuZGVmIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRAotI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQgMQorIyAgZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRCAxCiAjZW5kaWYKIAogI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0JNUChhc3NpLCBjKSAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTEsMTcgKzExLDIwIEBACiAgICAgICAgICAgICAgICAgICAgIChjKSA9PSAweDUyNUQgfHwgKGMpID09IDB4NTQxRSB8fCAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgIChjKSA9PSAweDU2NTMgfHwgKGMpID09IDB4NTlGOCB8fCAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgIChjKSA9PSAweDVDNUIgfHwgKGMpID09IDB4NUU3NyB8fCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIChjKSA9PSAweDc2MjYgfHwgKGMpID09IDB4N0U2QikpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIChjKSA9PSAweDc2MjYgfHwgKGMpID09IDB4N0U2QikpIHsgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQ7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYykgPT0gMHg5QjFEKSAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYykgPT0gMHg5QjFEKSB7ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIChhc3NpKSA9IDB4ODAwMCB8IDB4N2QzYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiAjZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfRU1QKGFzc2ksIGMpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMpID09IDB4MjBCOUYpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQ7CisgICAgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMpID09IDB4MjBCOUYpIHsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQ7ICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiAjaWZuZGVmIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfSU5WQUxJRAotI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQgMgorIyAgZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfSU5WQUxJRCAyCiAjZW5kaWYKIAogI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMShhc3NpLCBjMSwgYzIpICAgICAgICAgICAgICAgXApAQCAtMzUsOSArMzgsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICgoYzEpID09IDB4N0UgJiYgKGMyKSA9PSAweDdCKSB8fCAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICgoYzEpID09IDB4N0UgJiYgKGMyKSA9PSAweDdDKSB8fCAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICgoYzEpID09IDB4N0UgJiYgKGMyKSA9PSAweDdEKSB8fCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICgoYzEpID09IDB4N0UgJiYgKGMyKSA9PSAweDdFKSkpICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfSU5WQUxJRDsKKyAgICAgICAgICAgICAgICAgICAgICgoYzEpID09IDB4N0UgJiYgKGMyKSA9PSAweDdFKSkpIHsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfSU5WQUxJRDsgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKLSNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIoYXNzaSwgYzEsIGMyKSAgICAgICAgICAgICAgIFwKLSAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYzEpID09IDB4N0QgJiYgKGMyKSA9PSAweDNCKSAgICAgICAgIFwKLSAgICAgICAgKGFzc2kpID0gMHg5QjFEOworI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMih3cml0ZXIsIGMxLCBjMikgICAgICAgICAgICAgXAorICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjMSkgPT0gMHg3RCAmJiAoYzIpID09IDB4M0IpIHsgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4OUIxRCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMl9DSEFSKGFzc2ksIGMxLCBjMikgICAgICAgICAgXAorICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjMSkgPT0gMHg3RCAmJiAoYzIpID09IDB4M0IpIHsgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDlCMUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfY24uaCBiL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2NuLmgKaW5kZXggYTZkY2ViZi4uMWY4YzI5OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfY24uaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19jbi5oCkBAIC00MDQ5LDcgKzQwNDksNyBAQAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgX2diMTgwMzBfdG9fdW5pYm1wX3JhbmdlcyB7Ci0gICAgUHlfVU5JQ09ERSAgIGZpcnN0LCBsYXN0OworICAgIFB5X1VDUzQgICBmaXJzdCwgbGFzdDsKICAgICBEQkNIQVIgICAgICAgYmFzZTsKIH0gZ2IxODAzMF90b191bmlibXBfcmFuZ2VzW10gPSB7CiB7MTI4LDE2MywwfSx7MTY1LDE2NiwzNn0sezE2OSwxNzUsMzh9LHsxNzgsMTgyLDQ1fSx7MTg0LDIxNCw1MH0sezIxNiwyMjMsODF9LHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaCBiL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaAppbmRleCBlZGE4ZTllLi43MjllNGJjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19qaXN4MDIxM19wYWlyLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfamlzeDAyMTNfcGFpci5oCkBAIC0zLDcgKzMsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB3aWRlZGJjc19pbmRleCAqamlzeDAyMTNfcGFpcl9kZWNtYXA7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHBhaXJfZW5jb2RlbWFwICpqaXN4MDIxM19wYWlyX2VuY21hcDsKICNlbHNlCi1zdGF0aWMgY29uc3QgdWNzNF90IF9famlzeDAyMTNfcGFpcl9kZWNtYXBbNDldID0geworc3RhdGljIGNvbnN0IFB5X1VDUzQgX19qaXN4MDIxM19wYWlyX2RlY21hcFs0OV0gPSB7CiA4MTAyMzQwMTAsODEwMzY1MDgyLDgxMDQ5NjE1NCw4MTA2MjcyMjYsODEwNzU4Mjk4LDgxNjUyNTQ2Niw4MTY2NTY1MzgsCiA4MTY3ODc2MTAsODE2OTE4NjgyLDgxNzA0OTc1NCw4MTc1NzQwNDIsODE4MTYzODY2LDgxODQyNjAxMCw4MzgyODM0MTgsCiAxNTA3NDA0OCxVLFUsVSwzOTA2MDIyNCwzOTA2MDIyNSw0MjczMDI0MCw0MjczMDI0MSwzOTM4NzkwNCwzOTM4NzkwNSwzOTQ1MzQ0MCwKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jCmluZGV4IGMwMzJjZGIuLjA4N2FlOWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYwpAQCAtMTAsMTUgKzEwLDE2IEBACiAjaW5jbHVkZSAibXVsdGlieXRlY29kZWMuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNvbnN0IFB5X1VOSUNPREUgICAgKmluYnVmLCAqaW5idWZfdG9wLCAqaW5idWZfZW5kOworICAgIFB5T2JqZWN0ICAgICAgICAgICAgKmlub2JqOworICAgIFB5X3NzaXplX3QgICAgICAgICAgaW5wb3MsIGlubGVuOwogICAgIHVuc2lnbmVkIGNoYXIgICAgICAgKm91dGJ1ZiwgKm91dGJ1Zl9lbmQ7CiAgICAgUHlPYmplY3QgICAgICAgICAgICAqZXhjb2JqLCAqb3V0b2JqOwogfSBNdWx0aWJ5dGVFbmNvZGVCdWZmZXI7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbmJ1ZiwgKmluYnVmX3RvcCwgKmluYnVmX2VuZDsKLSAgICBQeV9VTklDT0RFICAgICAgICAgICpvdXRidWYsICpvdXRidWZfZW5kOwotICAgIFB5T2JqZWN0ICAgICAgICAgICAgKmV4Y29iaiwgKm91dG9iajsKKyAgICBQeU9iamVjdCAgICAgICAgICAgICpleGNvYmo7CisgICAgX1B5VW5pY29kZVdyaXRlciAgICB3cml0ZXI7CiB9IE11bHRpYnl0ZURlY29kZUJ1ZmZlcjsKIAogUHlEb2NfU1RSVkFSKE11bHRpYnl0ZUNvZGVjX0VuY29kZV9fZG9jX18sCkBAIC00NSwxMSArNDYsMTMgQEAKIHN0YXRpYyBjaGFyICpzdHJlYW1rd2FyZ2xpc3RbXSA9IHsic3RyZWFtIiwgImVycm9ycyIsIE5VTEx9OwogCiBzdGF0aWMgUHlPYmplY3QgKm11bHRpYnl0ZWNvZGVjX2VuY29kZShNdWx0aWJ5dGVDb2RlYyAqLAotICAgICAgICAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICosIGNvbnN0IFB5X1VOSUNPREUgKiosIFB5X3NzaXplX3QsCisgICAgICAgICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKiwgUHlPYmplY3QgKiwgUHlfc3NpemVfdCAqLAogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICosIGludCk7CiAKICNkZWZpbmUgTUJFTkNfUkVTRVQgICAgIE1CRU5DX01BWDw8MSAvKiByZXNldCBhZnRlciBhbiBlbmNvZGluZyBzZXNzaW9uICovCiAKK19QeV9JREVOVElGSUVSKHdyaXRlKTsKKwogc3RhdGljIFB5T2JqZWN0ICoKIG1ha2VfdHVwbGUoUHlPYmplY3QgKm9iamVjdCwgUHlfc3NpemVfdCBsZW4pCiB7CkBAIC0xOTcsMjkgKzIwMCw2IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKLXN0YXRpYyBpbnQKLWV4cGFuZF9kZWNvZGVidWZmZXIoTXVsdGlieXRlRGVjb2RlQnVmZmVyICpidWYsIFB5X3NzaXplX3QgZXNpemUpCi17Ci0gICAgUHlfc3NpemVfdCBvcmdwb3MsIG9yZ3NpemU7Ci0KLSAgICBvcmdwb3MgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWYgLSBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYtPm91dG9iaikpOwotICAgIG9yZ3NpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLT5vdXRvYmopOwotICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZidWYtPm91dG9iaiwgb3Jnc2l6ZSArICgKLSAgICAgICAgZXNpemUgPCAob3Jnc2l6ZSA+PiAxKSA/IChvcmdzaXplID4+IDEpIHwgMSA6IGVzaXplKSkgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGJ1Zi0+b3V0YnVmID0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLT5vdXRvYmopICsgb3JncG9zOwotICAgIGJ1Zi0+b3V0YnVmX2VuZCA9IFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi0+b3V0b2JqKQotICAgICAgICAgICAgICAgICAgICAgICsgUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi0+b3V0b2JqKTsKLQotICAgIHJldHVybiAwOwotfQotI2RlZmluZSBSRVFVSVJFX0RFQ09ERUJVRkZFUihidWYsIHMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgocykgPCAxIHx8IChidWYpLT5vdXRidWYgKyAocykgPiAoYnVmKS0+b3V0YnVmX2VuZCkgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZXhwYW5kX2RlY29kZWJ1ZmZlcihidWYsIHMpID09IC0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCiAKIC8qKgogICogTXVsdGlieXRlQ29kZWMgb2JqZWN0CkBAIC0yNDcsNyArMjI3LDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOyAvKiByZXRyeSBpdCAqLwogICAgICAgICBjYXNlIE1CRVJSX1RPT0ZFVzoKICAgICAgICAgICAgIHJlYXNvbiA9ICJpbmNvbXBsZXRlIG11bHRpYnl0ZSBzZXF1ZW5jZSI7Ci0gICAgICAgICAgICBlc2l6ZSA9IChQeV9zc2l6ZV90KShidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWYpOworICAgICAgICAgICAgZXNpemUgPSAoUHlfc3NpemVfdClidWYtPmlucG9zOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTUJFUlJfSU5URVJOQUw6CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLApAQCAtMjYxLDE0ICsyNDEsMjQgQEAKICAgICB9CiAKICAgICBpZiAoZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgY29uc3QgUHlfVU5JQ09ERSByZXBsY2hhciA9ICc/JywgKmluYnVmID0gJnJlcGxjaGFyOworICAgICAgICBQeU9iamVjdCAqcmVwbGNoYXI7CiAgICAgICAgIFB5X3NzaXplX3QgcjsKKyAgICAgICAgUHlfc3NpemVfdCBpbnBvczsKKyAgICAgICAgaW50IGtpbmQ7CisgICAgICAgIHZvaWQgKmRhdGE7CiAKKyAgICAgICAgcmVwbGNoYXIgPSBQeVVuaWNvZGVfRnJvbU9yZGluYWwoJz8nKTsKKyAgICAgICAgaWYgKHJlcGxjaGFyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHJlcGxjaGFyKTsKKyAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHJlcGxjaGFyKTsKKworICAgICAgICBpbnBvcyA9IDA7CiAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0bGVmdDsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYtPm91dGJ1Zl9lbmQgLSBidWYtPm91dGJ1Zik7CiAKLSAgICAgICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWZfZW5kIC0gYnVmLT5vdXRidWYpOwotICAgICAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsICZpbmJ1ZiwgMSwKKyAgICAgICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZCwgZGF0YSwgJmlucG9zLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi0+b3V0YnVmLCBvdXRsZWZ0LCAwKTsKICAgICAgICAgICAgIGlmIChyID09IE1CRVJSX1RPT1NNQUxMKSB7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9FTkNPREVCVUZGRVIoYnVmLCAtMSk7CkBAIC0yNzgsMjUgKzI2OCwyNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgUHlfREVDUkVGKHJlcGxjaGFyKTsKKwogICAgICAgICBpZiAociAhPSAwKSB7CiAgICAgICAgICAgICBSRVFVSVJFX0VOQ09ERUJVRkZFUihidWYsIDEpOwogICAgICAgICAgICAgKmJ1Zi0+b3V0YnVmKysgPSAnPyc7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9JR05PUkUgfHwgZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgYnVmLT5pbmJ1ZiArPSBlc2l6ZTsKKyAgICAgICAgYnVmLT5pbnBvcyArPSBlc2l6ZTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgc3RhcnQgPSAoUHlfc3NpemVfdCkoYnVmLT5pbmJ1ZiAtIGJ1Zi0+aW5idWZfdG9wKTsKKyAgICBzdGFydCA9IChQeV9zc2l6ZV90KWJ1Zi0+aW5wb3M7CiAgICAgZW5kID0gc3RhcnQgKyBlc2l6ZTsKIAogICAgIC8qIHVzZSBjYWNoZWQgZXhjZXB0aW9uIG9iamVjdCBpZiBhdmFpbGFibGUgKi8KICAgICBpZiAoYnVmLT5leGNvYmogPT0gTlVMTCkgewotICAgICAgICBidWYtPmV4Y29iaiA9IFB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZShjb2RlYy0+ZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYtPmluYnVmX3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi0+aW5idWZfZW5kIC0gYnVmLT5pbmJ1Zl90b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLCByZWFzb24pOworICAgICAgICBidWYtPmV4Y29iaiA9ICBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlFeGNfVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNPbm5zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjLT5lbmNvZGluZywgYnVmLT5pbm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQsIHJlYXNvbik7CiAgICAgICAgIGlmIChidWYtPmV4Y29iaiA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQpAQCAtMzI1LDEwICszMTcsMTAgQEAKICAgICB9CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHRvYmopKSB7Ci0gICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKnVyYXcgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERSh0b2JqKTsKKyAgICAgICAgUHlfc3NpemVfdCBpbnBvczsKIAotICAgICAgICByZXRzdHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoY29kZWMsIHN0YXRlLCAmdXJhdywKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh0b2JqKSwgRVJST1JfU1RSSUNULAorICAgICAgICByZXRzdHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoY29kZWMsIHN0YXRlLCB0b2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgJmlucG9zLCBFUlJPUl9TVFJJQ1QsCiAgICAgICAgICAgICAgICAgICAgICAgICBNQkVOQ19GTFVTSCk7CiAgICAgICAgIGlmIChyZXRzdHIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpAQCAtMzQ3LDE1ICszMzksMTUgQEAKIAogICAgIG5ld3BvcyA9IFB5TG9uZ19Bc1NzaXplX3QoUHlUdXBsZV9HRVRfSVRFTShyZXRvYmosIDEpKTsKICAgICBpZiAobmV3cG9zIDwgMCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgbmV3cG9zICs9IChQeV9zc2l6ZV90KShidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWZfdG9wKTsKLSAgICBpZiAobmV3cG9zIDwgMCB8fCBidWYtPmluYnVmX3RvcCArIG5ld3BvcyA+IGJ1Zi0+aW5idWZfZW5kKSB7CisgICAgICAgIG5ld3BvcyArPSAoUHlfc3NpemVfdClidWYtPmlubGVuOworICAgIGlmIChuZXdwb3MgPCAwIHx8IG5ld3BvcyA+IGJ1Zi0+aW5sZW4pIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0luZGV4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24gJXpkIGZyb20gZXJyb3IgaGFuZGxlciBvdXQgb2YgYm91bmRzIiwKICAgICAgICAgICAgICAgICAgICAgIG5ld3Bvcyk7CiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KLSAgICBidWYtPmluYnVmID0gYnVmLT5pbmJ1Zl90b3AgKyBuZXdwb3M7CisgICAgYnVmLT5pbnBvcyA9IG5ld3BvczsKIAogICAgIFB5X0RFQ1JFRihyZXRvYmopOwogICAgIFB5X0RFQ1JFRihyZXRzdHIpOwpAQCAtMzc0LDcgKzM2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZXJyb3JzLCBQeV9zc2l6ZV90IGUpCiB7CiAgICAgUHlPYmplY3QgKnJldG9iaiA9IE5VTEwsICpyZXR1bmkgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgcmV0dW5pc2l6ZSwgbmV3cG9zOworICAgIFB5X3NzaXplX3QgbmV3cG9zOwogICAgIGNvbnN0IGNoYXIgKnJlYXNvbjsKICAgICBQeV9zc2l6ZV90IGVzaXplLCBzdGFydCwgZW5kOwogCkBAIC0zODUsNyArMzc3LDYgQEAKICAgICBlbHNlIHsKICAgICAgICAgc3dpdGNoIChlKSB7CiAgICAgICAgIGNhc2UgTUJFUlJfVE9PU01BTEw6Ci0gICAgICAgICAgICBSRVFVSVJFX0RFQ09ERUJVRkZFUihidWYsIC0xKTsKICAgICAgICAgICAgIHJldHVybiAwOyAvKiByZXRyeSBpdCAqLwogICAgICAgICBjYXNlIE1CRVJSX1RPT0ZFVzoKICAgICAgICAgICAgIHJlYXNvbiA9ICJpbmNvbXBsZXRlIG11bHRpYnl0ZSBzZXF1ZW5jZSI7CkBAIC0zOTUsNiArMzg2LDggQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGNvZGVjIGVycm9yIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGNhc2UgTUJFUlJfRVhDRVBUSU9OOgorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBydW50aW1lIGVycm9yIik7CkBAIC00MDMsOCArMzk2LDkgQEAKICAgICB9CiAKICAgICBpZiAoZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCAxKTsKLSAgICAgICAgKmJ1Zi0+b3V0YnVmKysgPSBQeV9VTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUjsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZidWYtPndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9JR05PUkUgfHwgZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKICAgICAgICAgYnVmLT5pbmJ1ZiArPSBlc2l6ZTsKQEAgLTQ0NywxNSArNDQxLDggQEAKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQogCi0gICAgaWYgKFB5VW5pY29kZV9Bc1VuaWNvZGUocmV0dW5pKSA9PSBOVUxMKQorICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZidWYtPndyaXRlciwgcmV0dW5pKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgIHJldHVuaXNpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUocmV0dW5pKTsKLSAgICBpZiAocmV0dW5pc2l6ZSA+IDApIHsKLSAgICAgICAgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCByZXR1bmlzaXplKTsKLSAgICAgICAgbWVtY3B5KChjaGFyICopYnVmLT5vdXRidWYsIFB5VW5pY29kZV9BU19VTklDT0RFKHJldHVuaSksCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1bmlzaXplICogUHlfVU5JQ09ERV9TSVpFKTsKLSAgICAgICAgYnVmLT5vdXRidWYgKz0gcmV0dW5pc2l6ZTsKLSAgICB9CiAKICAgICBuZXdwb3MgPSBQeUxvbmdfQXNTc2l6ZV90KFB5VHVwbGVfR0VUX0lURU0ocmV0b2JqLCAxKSk7CiAgICAgaWYgKG5ld3BvcyA8IDAgJiYgIVB5RXJyX09jY3VycmVkKCkpCkBAIC00NzksMTkgKzQ2NiwyOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG11bHRpYnl0ZWNvZGVjX2VuY29kZShNdWx0aWJ5dGVDb2RlYyAqY29kZWMsCiAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKipkYXRhLCBQeV9zc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRleHQsIFB5X3NzaXplX3QgKmlucG9zX3QsCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVycm9ycywgaW50IGZsYWdzKQogewogICAgIE11bHRpYnl0ZUVuY29kZUJ1ZmZlciBidWY7CiAgICAgUHlfc3NpemVfdCBmaW5hbHNpemUsIHIgPSAwOworICAgIFB5X3NzaXplX3QgZGF0YWxlbjsKKyAgICBpbnQga2luZDsKKyAgICB2b2lkICpkYXRhOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh0ZXh0KSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGRhdGFsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh0ZXh0KTsKIAogICAgIGlmIChkYXRhbGVuID09IDAgJiYgIShmbGFncyAmIE1CRU5DX1JFU0VUKSkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMCk7CiAKICAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBidWYub3V0b2JqID0gTlVMTDsKLSAgICBidWYuaW5idWYgPSBidWYuaW5idWZfdG9wID0gKmRhdGE7Ci0gICAgYnVmLmluYnVmX2VuZCA9IGJ1Zi5pbmJ1Zl90b3AgKyBkYXRhbGVuOworICAgIGJ1Zi5pbm9iaiA9IHRleHQ7ICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisgICAgYnVmLmlucG9zID0gMDsKKyAgICBidWYuaW5sZW4gPSBkYXRhbGVuOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChidWYuaW5vYmopOworICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShidWYuaW5vYmopOwogCiAgICAgaWYgKGRhdGFsZW4gPiAoUFlfU1NJWkVfVF9NQVggLSAxNikgLyAyKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CkBAIC01MDQsMTQgKzUwMSwxNCBAQAogICAgIGJ1Zi5vdXRidWYgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKGJ1Zi5vdXRvYmopOwogICAgIGJ1Zi5vdXRidWZfZW5kID0gYnVmLm91dGJ1ZiArIFB5Qnl0ZXNfR0VUX1NJWkUoYnVmLm91dG9iaik7CiAKLSAgICB3aGlsZSAoYnVmLmluYnVmIDwgYnVmLmluYnVmX2VuZCkgewotICAgICAgICBQeV9zc2l6ZV90IGlubGVmdCwgb3V0bGVmdDsKLQorICAgIHdoaWxlIChidWYuaW5wb3MgPCBidWYuaW5sZW4pIHsKICAgICAgICAgLyogd2UgZG9uJ3QgcmV1c2UgaW5sZWZ0IGFuZCBvdXRsZWZ0IGhlcmUuCiAgICAgICAgICAqIGVycm9yIGNhbGxiYWNrcyBjYW4gcmVsb2NhdGUgdGhlIGN1cnNvciBhbnl3aGVyZSBvbiBidWZmZXIqLwotICAgICAgICBpbmxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLmluYnVmX2VuZCAtIGJ1Zi5pbmJ1Zik7Ci0gICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1Zl9lbmQgLSBidWYub3V0YnVmKTsKLSAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsICZidWYuaW5idWYsIGlubGVmdCwKKyAgICAgICAgUHlfc3NpemVfdCBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWZfZW5kIC0gYnVmLm91dGJ1Zik7CisKKyAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYuaW5wb3MsIGJ1Zi5pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi5vdXRidWYsIG91dGxlZnQsIGZsYWdzKTsKICAgICAgICAgaWYgKChyID09IDApIHx8IChyID09IE1CRVJSX1RPT0ZFVyAmJiAhKGZsYWdzICYgTUJFTkNfRkxVU0gpKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTQyLDcgKzUzOSw4IEBACiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJmJ1Zi5vdXRvYmosIGZpbmFsc2l6ZSkgPT0gLTEpCiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAotICAgICpkYXRhID0gYnVmLmluYnVmOworICAgIGlmIChpbnBvc190KQorICAgICAgICAqaW5wb3NfdCA9IGJ1Zi5pbnBvczsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwogICAgIHJldHVybiBidWYub3V0b2JqOwogCkBAIC01NTcsNyArNTU1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSBzdGF0ZTsKLSAgICBQeV9VTklDT0RFICpkYXRhOwogICAgIFB5T2JqZWN0ICplcnJvcmNiLCAqciwgKmFyZywgKnVjdnQ7CiAgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGRhdGFsZW47CkBAIC01ODAsMTEgKzU3NywxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgZGF0YSA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKGFyZywgJmRhdGFsZW4pOwotICAgIGlmIChkYXRhID09IE5VTEwpIHsKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGFyZykgPCAwKSB7CiAgICAgICAgIFB5X1hERUNSRUYodWN2dCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBkYXRhbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoYXJnKTsKIAogICAgIGVycm9yY2IgPSBpbnRlcm5hbF9lcnJvcl9jYWxsYmFjayhlcnJvcnMpOwogICAgIGlmIChlcnJvcmNiID09IE5VTEwpIHsKQEAgLTU5Niw3ICs1OTMsNyBAQAogICAgICAgICBzZWxmLT5jb2RlYy0+ZW5jaW5pdCgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcpICE9IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoc2VsZi0+Y29kZWMsICZzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IFB5X1VOSUNPREUgKiopJmRhdGEsIGRhdGFsZW4sIGVycm9yY2IsCisgICAgICAgICAgICAgICAgICAgIGFyZywgTlVMTCwgZXJyb3JjYiwKICAgICAgICAgICAgICAgICAgICAgTUJFTkNfRkxVU0ggfCBNQkVOQ19SRVNFVCk7CiAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CkBAIC02MTcsMTAgKzYxNCwxMCBAQAogewogICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlIHN0YXRlOwogICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciBidWY7Ci0gICAgUHlPYmplY3QgKmVycm9yY2I7CisgICAgUHlPYmplY3QgKmVycm9yY2IsICpyZXM7CiAgICAgUHlfYnVmZmVyIHBkYXRhOwogICAgIGNvbnN0IGNoYXIgKmRhdGEsICplcnJvcnMgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgZGF0YWxlbiwgZmluYWxzaXplOworICAgIFB5X3NzaXplX3QgZGF0YWxlbjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfHo6ZGVjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY2t3YXJnbGlzdCwgJnBkYXRhLCAmZXJyb3JzKSkKQEAgLTY0MCwyOSArNjM3LDIzIEBACiAgICAgICAgIHJldHVybiBtYWtlX3R1cGxlKFB5VW5pY29kZV9OZXcoMCwgMCksIDApOwogICAgIH0KIAorICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmYnVmLndyaXRlcik7CisgICAgYnVmLndyaXRlci5taW5fbGVuZ3RoID0gZGF0YWxlbjsKICAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBidWYuaW5idWYgPSBidWYuaW5idWZfdG9wID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOwogICAgIGJ1Zi5pbmJ1Zl9lbmQgPSBidWYuaW5idWZfdG9wICsgZGF0YWxlbjsKLSAgICBidWYub3V0b2JqID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIGRhdGFsZW4pOwotICAgIGlmIChidWYub3V0b2JqID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgIGJ1Zi5vdXRidWYgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYub3V0b2JqKTsKLSAgICBpZiAoYnVmLm91dGJ1ZiA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBidWYub3V0YnVmX2VuZCA9IGJ1Zi5vdXRidWYgKyBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLm91dG9iaik7CiAKICAgICBpZiAoc2VsZi0+Y29kZWMtPmRlY2luaXQgIT0gTlVMTCAmJgogICAgICAgICBzZWxmLT5jb2RlYy0+ZGVjaW5pdCgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcpICE9IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgd2hpbGUgKGJ1Zi5pbmJ1ZiA8IGJ1Zi5pbmJ1Zl9lbmQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmxlZnQsIG91dGxlZnQsIHI7CisgICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0LCByOwogCiAgICAgICAgIGlubGVmdCA9IChQeV9zc2l6ZV90KShidWYuaW5idWZfZW5kIC0gYnVmLmluYnVmKTsKLSAgICAgICAgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmX2VuZCAtIGJ1Zi5vdXRidWYpOwogCiAgICAgICAgIHIgPSBzZWxmLT5jb2RlYy0+ZGVjb2RlKCZzdGF0ZSwgc2VsZi0+Y29kZWMtPmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICZidWYuaW5idWYsIGlubGVmdCwgJmJ1Zi5vdXRidWYsIG91dGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi5pbmJ1ZiwgaW5sZWZ0LCAmYnVmLndyaXRlcik7CiAgICAgICAgIGlmIChyID09IDApCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZWxzZSBpZiAobXVsdGlieXRlY29kZWNfZGVjZXJyb3Ioc2VsZi0+Y29kZWMsICZzdGF0ZSwKQEAgLTY3MCwyMyArNjYxLDIwIEBACiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CiAKLSAgICBmaW5hbHNpemUgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1ZiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi5vdXRvYmopKTsKLQotICAgIGlmIChmaW5hbHNpemUgIT0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopKQotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLm91dG9iaiwgZmluYWxzaXplKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZidWYud3JpdGVyKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7CiAgICAgRVJST1JfREVDUkVGKGVycm9yY2IpOwotICAgIHJldHVybiBtYWtlX3R1cGxlKGJ1Zi5vdXRvYmosIGRhdGFsZW4pOworICAgIHJldHVybiBtYWtlX3R1cGxlKHJlcywgZGF0YWxlbik7CiAKIGVycm9yZXhpdDoKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgRVJST1JfREVDUkVGKGVycm9yY2IpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgUHlfWERFQ1JFRihidWYub3V0b2JqKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwogCiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC03NTIsOSArNzQwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmlzdHIsIGludCBmaW5hbCkKIHsKICAgICBQeU9iamVjdCAqdWN2dCwgKnIgPSBOVUxMOwotICAgIFB5X1VOSUNPREUgKmluYnVmLCAqaW5idWZfZW5kLCAqaW5idWZfdG1wID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGRhdGFsZW4sIG9yaWdwZW5kaW5nOwotICAgIHdjaGFyX3QgKmRhdGE7CisgICAgUHlPYmplY3QgKmluYnVmID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGlucG9zLCBkYXRhbGVuOworICAgIFB5T2JqZWN0ICpvcmlncGVuZGluZyA9IE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHVuaXN0cikpCiAgICAgICAgIHVjdnQgPSBOVUxMOwpAQCAtNzcwLDY5ICs3NTgsNjYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRhdGEgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZSh1bmlzdHIsICZkYXRhbGVuKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBvcmlncGVuZGluZyA9IGN0eC0+cGVuZGluZ3NpemU7CisgICAgaWYgKGN0eC0+cGVuZGluZykgeworICAgICAgICBQeU9iamVjdCAqaW5idWZfdG1wOwogCi0gICAgaWYgKG9yaWdwZW5kaW5nID4gMCkgewotICAgICAgICBpZiAoZGF0YWxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gY3R4LT5wZW5kaW5nc2l6ZSkgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIC8qIGluYnVmX3RtcCA9PSBOVUxMICovCi0gICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICAgICAgfQotICAgICAgICBpbmJ1Zl90bXAgPSBQeU1lbV9OZXcoUHlfVU5JQ09ERSwgZGF0YWxlbiArIGN0eC0+cGVuZGluZ3NpemUpOworICAgICAgICBQeV9JTkNSRUYoY3R4LT5wZW5kaW5nKTsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBjdHgtPnBlbmRpbmc7CisKKyAgICAgICAgUHlfSU5DUkVGKGN0eC0+cGVuZGluZyk7CisgICAgICAgIGluYnVmX3RtcCA9IGN0eC0+cGVuZGluZzsKKyAgICAgICAgUHlVbmljb2RlX0FwcGVuZCgmaW5idWZfdG1wLCB1bmlzdHIpOwogICAgICAgICBpZiAoaW5idWZfdG1wID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICAgICAgbWVtY3B5KGluYnVmX3RtcCwgY3R4LT5wZW5kaW5nLAotICAgICAgICAgICAgUHlfVU5JQ09ERV9TSVpFICogY3R4LT5wZW5kaW5nc2l6ZSk7Ci0gICAgICAgIG1lbWNweShpbmJ1Zl90bXAgKyBjdHgtPnBlbmRpbmdzaXplLAotICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUodW5pc3RyKSwKLSAgICAgICAgICAgIFB5X1VOSUNPREVfU0laRSAqIGRhdGFsZW4pOwotICAgICAgICBkYXRhbGVuICs9IGN0eC0+cGVuZGluZ3NpemU7Ci0gICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSAwOworICAgICAgICBQeV9DTEVBUihjdHgtPnBlbmRpbmcpOwogICAgICAgICBpbmJ1ZiA9IGluYnVmX3RtcDsKICAgICB9Ci0gICAgZWxzZQotICAgICAgICBpbmJ1ZiA9IChQeV9VTklDT0RFICopUHlVbmljb2RlX0FTX1VOSUNPREUodW5pc3RyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBOVUxMOwogCi0gICAgaW5idWZfZW5kID0gaW5idWYgKyBkYXRhbGVuOworICAgICAgICBQeV9JTkNSRUYodW5pc3RyKTsKKyAgICAgICAgaW5idWYgPSB1bmlzdHI7CisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoaW5idWYpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgaW5wb3MgPSAwOworICAgIGRhdGFsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpbmJ1Zik7CiAKICAgICByID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKGN0eC0+Y29kZWMsICZjdHgtPnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAoY29uc3QgUHlfVU5JQ09ERSAqKikmaW5idWYsIGRhdGFsZW4sCi0gICAgICAgICAgICAgICAgICAgIGN0eC0+ZXJyb3JzLCBmaW5hbCA/IE1CRU5DX0ZMVVNIIHwgTUJFTkNfUkVTRVQgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmVycm9ycywgZmluYWwgPyBNQkVOQ19GTFVTSCB8IE1CRU5DX1JFU0VUIDogMCk7CiAgICAgaWYgKHIgPT0gTlVMTCkgewogICAgICAgICAvKiByZWNvdmVyIHRoZSBvcmlnaW5hbCBwZW5kaW5nIGJ1ZmZlciAqLwotICAgICAgICBpZiAob3JpZ3BlbmRpbmcgPiAwKQotICAgICAgICAgICAgbWVtY3B5KGN0eC0+cGVuZGluZywgaW5idWZfdG1wLAotICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfU0laRSAqIG9yaWdwZW5kaW5nKTsKLSAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IG9yaWdwZW5kaW5nOworICAgICAgICBQeV9DTEVBUihjdHgtPnBlbmRpbmcpOworICAgICAgICBjdHgtPnBlbmRpbmcgPSBvcmlncGVuZGluZzsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBOVUxMOwogICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CisgICAgUHlfWERFQ1JFRihvcmlncGVuZGluZyk7CiAKLSAgICBpZiAoaW5idWYgPCBpbmJ1Zl9lbmQpIHsKLSAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IChQeV9zc2l6ZV90KShpbmJ1Zl9lbmQgLSBpbmJ1Zik7Ci0gICAgICAgIGlmIChjdHgtPnBlbmRpbmdzaXplID4gTUFYRU5DUEVORElORykgeworICAgIGlmIChpbnBvcyA8IGRhdGFsZW4pIHsKKyAgICAgICAgaWYgKGRhdGFsZW4gLSBpbnBvcyA+IE1BWEVOQ1BFTkRJTkcpIHsKICAgICAgICAgICAgIC8qIG5vcm1hbCBjb2RlY3MgY2FuJ3QgcmVhY2ggaGVyZSAqLwotICAgICAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IDA7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVW5pY29kZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZW5kaW5nIGJ1ZmZlciBvdmVyZmxvdyIpOwogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgICAgIH0KLSAgICAgICAgbWVtY3B5KGN0eC0+cGVuZGluZywgaW5idWYsCi0gICAgICAgICAgICBjdHgtPnBlbmRpbmdzaXplICogUHlfVU5JQ09ERV9TSVpFKTsKKyAgICAgICAgY3R4LT5wZW5kaW5nID0gUHlVbmljb2RlX1N1YnN0cmluZyhpbmJ1ZiwgaW5wb3MsIGRhdGFsZW4pOworICAgICAgICBpZiAoY3R4LT5wZW5kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIG5vcm1hbCBjb2RlY3MgY2FuJ3QgcmVhY2ggaGVyZSAqLworICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaW5idWZfdG1wICE9IE5VTEwpCi0gICAgICAgIFB5TWVtX0RlbChpbmJ1Zl90bXApOworICAgIFB5X0RFQ1JFRihpbmJ1Zik7CiAgICAgUHlfWERFQ1JFRih1Y3Z0KTsKICAgICByZXR1cm4gcjsKIAogZXJyb3JleGl0OgotICAgIGlmIChpbmJ1Zl90bXAgIT0gTlVMTCkKLSAgICAgICAgUHlNZW1fRGVsKGluYnVmX3RtcCk7CiAgICAgUHlfWERFQ1JFRihyKTsKICAgICBQeV9YREVDUkVGKHVjdnQpOworICAgIFB5X1hERUNSRUYob3JpZ3BlbmRpbmcpOworICAgIFB5X1hERUNSRUYoaW5idWYpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC04NTksMTcgKzg0NCw3IEBACiB7CiAgICAgYnVmLT5pbmJ1ZiA9IGJ1Zi0+aW5idWZfdG9wID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilkYXRhOwogICAgIGJ1Zi0+aW5idWZfZW5kID0gYnVmLT5pbmJ1Zl90b3AgKyBzaXplOwotICAgIGlmIChidWYtPm91dG9iaiA9PSBOVUxMKSB7IC8qIG9ubHkgaWYgb3V0b2JqIGlzIG5vdCBhbGxvY2F0ZWQgeWV0ICovCi0gICAgICAgIGJ1Zi0+b3V0b2JqID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIHNpemUpOwotICAgICAgICBpZiAoYnVmLT5vdXRvYmogPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgYnVmLT5vdXRidWYgPSBQeVVuaWNvZGVfQXNVbmljb2RlKGJ1Zi0+b3V0b2JqKTsKLSAgICAgICAgaWYgKGJ1Zi0+b3V0YnVmID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGJ1Zi0+b3V0YnVmX2VuZCA9IGJ1Zi0+b3V0YnVmICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi0+b3V0b2JqKTsKLSAgICB9Ci0KKyAgICBidWYtPndyaXRlci5taW5fbGVuZ3RoICs9IHNpemU7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTg3OCwxNCArODUzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciAqYnVmKQogewogICAgIHdoaWxlIChidWYtPmluYnVmIDwgYnVmLT5pbmJ1Zl9lbmQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmxlZnQsIG91dGxlZnQ7CisgICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0OwogICAgICAgICBQeV9zc2l6ZV90IHI7CiAKICAgICAgICAgaW5sZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+aW5idWZfZW5kIC0gYnVmLT5pbmJ1Zik7Ci0gICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWZfZW5kIC0gYnVmLT5vdXRidWYpOwogCiAgICAgICAgIHIgPSBjdHgtPmNvZGVjLT5kZWNvZGUoJmN0eC0+c3RhdGUsIGN0eC0+Y29kZWMtPmNvbmZpZywKLSAgICAgICAgICAgICZidWYtPmluYnVmLCBpbmxlZnQsICZidWYtPm91dGJ1Ziwgb3V0bGVmdCk7CisgICAgICAgICAgICAmYnVmLT5pbmJ1ZiwgaW5sZWZ0LCAmYnVmLT53cml0ZXIpOwogICAgICAgICBpZiAociA9PSAwIHx8IHIgPT0gTUJFUlJfVE9PRkVXKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGVsc2UgaWYgKG11bHRpYnl0ZWNvZGVjX2RlY2Vycm9yKGN0eC0+Y29kZWMsICZjdHgtPnN0YXRlLApAQCAtOTI3LDcgKzkwMSw3IEBACiAgICAgICAgIGlmIChyICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOworICAgIFB5X0NMRUFSKHNlbGYtPnBlbmRpbmcpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC05NjMsNyArOTM3LDcgQEAKICAgICB9CiAKICAgICBzZWxmLT5jb2RlYyA9ICgoTXVsdGlieXRlQ29kZWNPYmplY3QgKiljb2RlYyktPmNvZGVjOwotICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICBzZWxmLT5wZW5kaW5nID0gTlVMTDsKICAgICBzZWxmLT5lcnJvcnMgPSBpbnRlcm5hbF9lcnJvcl9jYWxsYmFjayhlcnJvcnMpOwogICAgIGlmIChzZWxmLT5lcnJvcnMgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CkBAIC0xMDU4LDggKzEwMzIsOSBAQAogICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciBidWY7CiAgICAgY2hhciAqZGF0YSwgKndkYXRhID0gTlVMTDsKICAgICBQeV9idWZmZXIgcGRhdGE7Ci0gICAgUHlfc3NpemVfdCB3c2l6ZSwgZmluYWxzaXplID0gMCwgc2l6ZSwgb3JpZ3BlbmRpbmc7CisgICAgUHlfc3NpemVfdCB3c2l6ZSwgc2l6ZSwgb3JpZ3BlbmRpbmc7CiAgICAgaW50IGZpbmFsID0gMDsKKyAgICBQeU9iamVjdCAqcmVzOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAieSp8aTpkZWNvZGUiLAogICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbGt3YXJnbGlzdCwgJnBkYXRhLCAmZmluYWwpKQpAQCAtMTA2Nyw3ICsxMDQyLDggQEAKICAgICBkYXRhID0gcGRhdGEuYnVmOwogICAgIHNpemUgPSBwZGF0YS5sZW47CiAKLSAgICBidWYub3V0b2JqID0gYnVmLmV4Y29iaiA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZidWYud3JpdGVyKTsKKyAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBvcmlncGVuZGluZyA9IHNlbGYtPnBlbmRpbmdzaXplOwogCiAgICAgaWYgKHNlbGYtPnBlbmRpbmdzaXplID09IDApIHsKQEAgLTEwODEsOCArMTA1NywxMCBAQAogICAgICAgICB9CiAgICAgICAgIHdzaXplID0gc2l6ZSArIHNlbGYtPnBlbmRpbmdzaXplOwogICAgICAgICB3ZGF0YSA9IFB5TWVtX01hbGxvYyh3c2l6ZSk7Ci0gICAgICAgIGlmICh3ZGF0YSA9PSBOVUxMKQorICAgICAgICBpZiAod2RhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgICAgICB9CiAgICAgICAgIG1lbWNweSh3ZGF0YSwgc2VsZi0+cGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUpOwogICAgICAgICBtZW1jcHkod2RhdGEgKyBzZWxmLT5wZW5kaW5nc2l6ZSwgZGF0YSwgc2l6ZSk7CiAgICAgICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKQEAgLTExMDksMjMgKzEwODcsMjIgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KIAotICAgIGZpbmFsc2l6ZSA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmIC0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLm91dG9iaikpOwotICAgIGlmIChmaW5hbHNpemUgIT0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopKQotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLm91dG9iaiwgZmluYWxzaXplKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZidWYud3JpdGVyKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIGlmICh3ZGF0YSAhPSBkYXRhKQogICAgICAgICBQeU1lbV9EZWwod2RhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgcmV0dXJuIGJ1Zi5vdXRvYmo7CisgICAgcmV0dXJuIHJlczsKIAogZXJyb3JleGl0OgogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBpZiAod2RhdGEgIT0gTlVMTCAmJiB3ZGF0YSAhPSBkYXRhKQogICAgICAgICBQeU1lbV9EZWwod2RhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgUHlfWERFQ1JFRihidWYub3V0b2JqKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xMjY1LDEzICsxMjQyLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2QsIFB5X3NzaXplX3Qgc2l6ZWhpbnQpCiB7CiAgICAgTXVsdGlieXRlRGVjb2RlQnVmZmVyIGJ1ZjsKLSAgICBQeU9iamVjdCAqY3JlczsKLSAgICBQeV9zc2l6ZV90IHJzaXplLCBmaW5hbHNpemUgPSAwOworICAgIFB5T2JqZWN0ICpjcmVzLCAqcmVzOworICAgIFB5X3NzaXplX3QgcnNpemU7CiAKICAgICBpZiAoc2l6ZWhpbnQgPT0gMCkKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9OZXcoMCwgMCk7CiAKLSAgICBidWYub3V0b2JqID0gYnVmLmV4Y29iaiA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZidWYud3JpdGVyKTsKKyAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBjcmVzID0gTlVMTDsKIAogICAgIGZvciAoOzspIHsKQEAgLTEzMDMsMTkgKzEyODEsMTkgQEAKICAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpID4gUFlfU1NJWkVfVF9NQVggLSBzZWxmLT5wZW5kaW5nc2l6ZSkgewogICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpICsgc2VsZi0+cGVuZGluZ3NpemU7Ci0gICAgICAgICAgICAgICAgICAgIGN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcnNpemUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgICAgICAgICAgICAgIGN0cmRhdGEgPSBQeUJ5dGVzX0FTX1NUUklORyhjdHIpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSwgc2VsZi0+cGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSArIHNlbGYtPnBlbmRpbmdzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGNyZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoY3JlcykpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7Ci0gICAgICAgICAgICAgICAgICAgIGNyZXMgPSBjdHI7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJzaXplID0gUHlCeXRlc19HRVRfU0laRShjcmVzKSArIHNlbGYtPnBlbmRpbmdzaXplOworICAgICAgICAgICAgY3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCByc2l6ZSk7CisgICAgICAgICAgICBpZiAoY3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgICAgICAgICBjdHJkYXRhID0gUHlCeXRlc19BU19TVFJJTkcoY3RyKTsKKyAgICAgICAgICAgIG1lbWNweShjdHJkYXRhLCBzZWxmLT5wZW5kaW5nLCBzZWxmLT5wZW5kaW5nc2l6ZSk7CisgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSArIHNlbGYtPnBlbmRpbmdzaXplLAorICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjcmVzKSwKKyAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShjcmVzKSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7CisgICAgICAgICAgICBjcmVzID0gY3RyOworICAgICAgICAgICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOwogICAgICAgICB9CiAKICAgICAgICAgcnNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpOwpAQCAtMTM0MCwyOSArMTMxOCwyNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWxzaXplID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWYgLQotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLm91dG9iaikpOwogICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7CiAgICAgICAgIGNyZXMgPSBOVUxMOwogCi0gICAgICAgIGlmIChzaXplaGludCA8IDAgfHwgZmluYWxzaXplICE9IDAgfHwgcnNpemUgPT0gMCkKKyAgICAgICAgaWYgKHNpemVoaW50IDwgMCB8fCBidWYud3JpdGVyLnBvcyAhPSAwIHx8IHJzaXplID09IDApCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBzaXplaGludCA9IDE7IC8qIHJlYWQgMSBtb3JlIGJ5dGUgYW5kIHJldHJ5ICovCiAgICAgfQogCi0gICAgaWYgKGZpbmFsc2l6ZSAhPSBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLm91dG9iaikpCi0gICAgICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZidWYub3V0b2JqLCBmaW5hbHNpemUpID09IC0xKQotICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgcmVzID0gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJmJ1Zi53cml0ZXIpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAKICAgICBQeV9YREVDUkVGKGNyZXMpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgcmV0dXJuIGJ1Zi5vdXRvYmo7CisgICAgcmV0dXJuIHJlczsKIAogZXJyb3JleGl0OgogICAgIFB5X1hERUNSRUYoY3Jlcyk7CiAgICAgUHlfWERFQ1JFRihidWYuZXhjb2JqKTsKLSAgICBQeV9YREVDUkVGKGJ1Zi5vdXRvYmopOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmYnVmLndyaXRlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE1OTUsNyArMTU3MSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnVuaXN0cikKIHsKICAgICBQeU9iamVjdCAqc3RyLCAqd3I7Ci0gICAgX1B5X0lERU5USUZJRVIod3JpdGUpOwogCiAgICAgc3RyID0gZW5jb2Rlcl9lbmNvZGVfc3RhdGVmdWwoU1RBVEVGVUxfRUNUWChzZWxmKSwgdW5pc3RyLCAwKTsKICAgICBpZiAoc3RyID09IE5VTEwpCkBAIC0xNjQ5LDI1ICsxNjI0LDIyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogbWJzdHJlYW13cml0ZXJfcmVzZXQoTXVsdGlieXRlU3RyZWFtV3JpdGVyT2JqZWN0ICpzZWxmKQogewotICAgIGNvbnN0IFB5X1VOSUNPREUgKnBlbmRpbmc7CiAgICAgUHlPYmplY3QgKnB3cnQ7CiAKLSAgICBwZW5kaW5nID0gc2VsZi0+cGVuZGluZzsKICAgICBwd3J0ID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKHNlbGYtPmNvZGVjLCAmc2VsZi0+c3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICZwZW5kaW5nLCBzZWxmLT5wZW5kaW5nc2l6ZSwgc2VsZi0+ZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICBzZWxmLT5wZW5kaW5nLCBOVUxMLCBzZWxmLT5lcnJvcnMsCiAgICAgICAgICAgICAgICAgICAgIE1CRU5DX0ZMVVNIIHwgTUJFTkNfUkVTRVQpOwogICAgIC8qIHNvbWUgcGVuZGluZyBidWZmZXIgY2FuIGJlIHRydW5jYXRlZCB3aGVuIFVuaWNvZGVFbmNvZGVFcnJvciBpcwogICAgICAqIHJhaXNlZCBvbiAnc3RyaWN0JyBtb2RlLiBidXQsICdyZXNldCcgbWV0aG9kIGlzIGRlc2lnbmVkIHRvCiAgICAgICogcmVzZXQgdGhlIHBlbmRpbmcgYnVmZmVyIG9yIHN0YXRlcyBzbyBmYWlsZWQgc3RyaW5nIHNlcXVlbmNlCiAgICAgICogb3VnaHQgdG8gYmUgbWlzc2VkICovCi0gICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOworICAgIFB5X0NMRUFSKHNlbGYtPnBlbmRpbmcpOwogICAgIGlmIChwd3J0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgYXNzZXJ0KFB5Qnl0ZXNfQ2hlY2socHdydCkpOwogICAgIGlmIChQeUJ5dGVzX1NpemUocHdydCkgPiAwKSB7CiAgICAgICAgIFB5T2JqZWN0ICp3cjsKLSAgICAgICAgX1B5X0lERU5USUZJRVIod3JpdGUpOwogCiAgICAgICAgIHdyID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5zdHJlYW0sICZQeUlkX3dyaXRlLCAiTyIsIHB3cnQpOwogICAgICAgICBpZiAod3IgPT0gTlVMTCkgewpAQCAtMTcwNiw3ICsxNjc4LDcgQEAKICAgICBzZWxmLT5jb2RlYyA9ICgoTXVsdGlieXRlQ29kZWNPYmplY3QgKiljb2RlYyktPmNvZGVjOwogICAgIHNlbGYtPnN0cmVhbSA9IHN0cmVhbTsKICAgICBQeV9JTkNSRUYoc3RyZWFtKTsKLSAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CisgICAgc2VsZi0+cGVuZGluZyA9IE5VTEw7CiAgICAgc2VsZi0+ZXJyb3JzID0gaW50ZXJuYWxfZXJyb3JfY2FsbGJhY2soZXJyb3JzKTsKICAgICBpZiAoc2VsZi0+ZXJyb3JzID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaCBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmgKaW5kZXggMWI2ZWY1NS4uNWI4YzIyMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oCkBAIC0xMCwxMiArMTAsNiBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmZGVmIHVpbnQzMl90Ci10eXBlZGVmIHVpbnQzMl90IHVjczRfdDsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGludCB1Y3M0X3Q7Ci0jZW5kaWYKLQogI2lmZGVmIHVpbnQxNl90CiB0eXBlZGVmIHVpbnQxNl90IHVjczJfdCwgREJDSEFSOwogI2Vsc2UKQEAgLTI3LDEzICsyMSwxNCBAQAogICAgIGludCBpOwogICAgIHVuc2lnbmVkIGNoYXIgY1s4XTsKICAgICB1Y3MyX3QgdTJbNF07Ci0gICAgdWNzNF90IHU0WzJdOworICAgIFB5X1VDUzQgdTRbMl07CiB9IE11bHRpYnl0ZUNvZGVjX1N0YXRlOwogCiB0eXBlZGVmIGludCAoKm1iY29kZWNfaW5pdCkoY29uc3Qgdm9pZCAqY29uZmlnKTsKIHR5cGVkZWYgUHlfc3NpemVfdCAoKm1iZW5jb2RlX2Z1bmMpKE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKippbmJ1ZiwgUHlfc3NpemVfdCBpbmxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2luZCwgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmlucG9zLCBQeV9zc2l6ZV90IGlubGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKIHR5cGVkZWYgaW50ICgqbWJlbmNvZGVpbml0X2Z1bmMpKE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKQEAgLTQ0LDcgKzM5LDcgQEAKIHR5cGVkZWYgUHlfc3NpemVfdCAoKm1iZGVjb2RlX2Z1bmMpKE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbmJ1ZiwgUHlfc3NpemVfdCBpbmxlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFICoqb3V0YnVmLCBQeV9zc2l6ZV90IG91dGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKTsKIHR5cGVkZWYgaW50ICgqbWJkZWNvZGVpbml0X2Z1bmMpKE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmNvbmZpZyk7CiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmRlY29kZXJlc2V0X2Z1bmMpKE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKQEAgLTgxLDggKzc2LDcgQEAKICNkZWZpbmUgTUFYRU5DUEVORElORyAgIDIKICNkZWZpbmUgX011bHRpYnl0ZVN0YXRlZnVsRW5jb2Rlcl9IRUFEICAgICAgICAgIFwKICAgICBfTXVsdGlieXRlU3RhdGVmdWxDb2RlY19IRUFEICAgICAgICAgICAgICAgIFwKLSAgICBQeV9VTklDT0RFIHBlbmRpbmdbTUFYRU5DUEVORElOR107ICAgICAgICAgIFwKLSAgICBQeV9zc2l6ZV90IHBlbmRpbmdzaXplOworICAgIFB5T2JqZWN0ICpwZW5kaW5nOwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIF9NdWx0aWJ5dGVTdGF0ZWZ1bEVuY29kZXJfSEVBRAogfSBNdWx0aWJ5dGVTdGF0ZWZ1bEVuY29kZXJDb250ZXh0OwpAQCAtMTE4LDE2ICsxMTIsMTcgQEAKICNkZWZpbmUgTUJFUlJfVE9PU01BTEwgICAgICAgICAgKC0xKSAvKiBpbnN1ZmZpY2llbnQgb3V0cHV0IGJ1ZmZlciBzcGFjZSAqLwogI2RlZmluZSBNQkVSUl9UT09GRVcgICAgICAgICAgICAoLTIpIC8qIGluY29tcGxldGUgaW5wdXQgYnVmZmVyICovCiAjZGVmaW5lIE1CRVJSX0lOVEVSTkFMICAgICAgICAgICgtMykgLyogaW50ZXJuYWwgcnVudGltZSBlcnJvciAqLworI2RlZmluZSBNQkVSUl9FWENFUFRJT04gICAgICAgICAoLTQpIC8qIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiByYWlzZWQgKi8KIAogI2RlZmluZSBFUlJPUl9TVFJJQ1QgICAgICAgICAgICAoUHlPYmplY3QgKikoMSkKICNkZWZpbmUgRVJST1JfSUdOT1JFICAgICAgICAgICAgKFB5T2JqZWN0ICopKDIpCiAjZGVmaW5lIEVSUk9SX1JFUExBQ0UgICAgICAgICAgIChQeU9iamVjdCAqKSgzKQogI2RlZmluZSBFUlJPUl9JU0NVU1RPTShwKSAgICAgICAoKHApIDwgRVJST1JfU1RSSUNUIHx8IEVSUk9SX1JFUExBQ0UgPCAocCkpCi0jZGVmaW5lIEVSUk9SX0RFQ1JFRihwKSBkbyB7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHAgIT0gTlVMTCAmJiBFUlJPUl9JU0NVU1RPTShwKSkgeyAgICAgICBcCi0gICAgICAgIFB5X0RFQ1JFRihwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlICgwKTsKKyNkZWZpbmUgRVJST1JfREVDUkVGKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAocCAhPSBOVUxMICYmIEVSUk9SX0lTQ1VTVE9NKHApKSAgICAgICAgIFwKKyAgICAgICAgICAgIFB5X0RFQ1JFRihwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCk7CiAKICNkZWZpbmUgTUJFTkNfRkxVU0ggICAgICAgICAgICAgMHgwMDAxIC8qIGVuY29kZSBhbGwgY2hhcmFjdGVycyBlbmNvZGFibGUgKi8KICNkZWZpbmUgTUJFTkNfTUFYICAgICAgICAgICAgICAgTUJFTkNfRkxVU0gKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL19iejJtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvX2J6Mm1vZHVsZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEyMDFhMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL19iejJtb2R1bGUuYy5oCkBAIC0wLDAgKzEsMTYyIEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2J6Ml9CWjJDb21wcmVzc29yX2NvbXByZXNzX19kb2NfXywKKyJjb21wcmVzcygkc2VsZiwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIlByb3ZpZGUgZGF0YSB0byB0aGUgY29tcHJlc3NvciBvYmplY3QuXG4iCisiXG4iCisiUmV0dXJucyBhIGNodW5rIG9mIGNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYlwnXCcgb3RoZXJ3aXNlLlxuIgorIlxuIgorIldoZW4geW91IGhhdmUgZmluaXNoZWQgcHJvdmlkaW5nIGRhdGEgdG8gdGhlIGNvbXByZXNzb3IsIGNhbGwgdGhlXG4iCisiZmx1c2goKSBtZXRob2QgdG8gZmluaXNoIHRoZSBjb21wcmVzc2lvbiBwcm9jZXNzLiIpOworCisjZGVmaW5lIF9CWjJfQloyQ09NUFJFU1NPUl9DT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pX2J6Ml9CWjJDb21wcmVzc29yX2NvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIF9iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2J6Ml9CWjJDb21wcmVzc29yX2NvbXByZXNzX2ltcGwoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzcyhCWjJDb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSo6Y29tcHJlc3MiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfYnoyX0JaMkNvbXByZXNzb3JfZmx1c2hfX2RvY19fLAorImZsdXNoKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRmluaXNoIHRoZSBjb21wcmVzc2lvbiBwcm9jZXNzLlxuIgorIlxuIgorIlJldHVybnMgdGhlIGNvbXByZXNzZWQgZGF0YSBsZWZ0IGluIGludGVybmFsIGJ1ZmZlcnMuXG4iCisiXG4iCisiVGhlIGNvbXByZXNzb3Igb2JqZWN0IG1heSBub3QgYmUgdXNlZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuIik7CisKKyNkZWZpbmUgX0JaMl9CWjJDT01QUkVTU09SX0ZMVVNIX01FVEhPRERFRiAgICBcCisgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbilfYnoyX0JaMkNvbXByZXNzb3JfZmx1c2gsIE1FVEhfTk9BUkdTLCBfYnoyX0JaMkNvbXByZXNzb3JfZmx1c2hfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19iejJfQloyQ29tcHJlc3Nvcl9mbHVzaF9pbXBsKEJaMkNvbXByZXNzb3IgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2J6Ml9CWjJDb21wcmVzc29yX2ZsdXNoKEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9iejJfQloyQ29tcHJlc3Nvcl9mbHVzaF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2J6Ml9CWjJDb21wcmVzc29yX19faW5pdF9fX19kb2NfXywKKyJCWjJDb21wcmVzc29yKGNvbXByZXNzbGV2ZWw9OSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNyZWF0ZSBhIGNvbXByZXNzb3Igb2JqZWN0IGZvciBjb21wcmVzc2luZyBkYXRhIGluY3JlbWVudGFsbHkuXG4iCisiXG4iCisiICBjb21wcmVzc2xldmVsXG4iCisiICAgIENvbXByZXNzaW9uIGxldmVsLCBhcyBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDkuXG4iCisiXG4iCisiRm9yIG9uZS1zaG90IGNvbXByZXNzaW9uLCB1c2UgdGhlIGNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4iKTsKKworc3RhdGljIGludAorX2J6Ml9CWjJDb21wcmVzc29yX19faW5pdF9fX2ltcGwoQloyQ29tcHJlc3NvciAqc2VsZiwgaW50IGNvbXByZXNzbGV2ZWwpOworCitzdGF0aWMgaW50CitfYnoyX0JaMkNvbXByZXNzb3JfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICBpbnQgY29tcHJlc3NsZXZlbCA9IDk7CisKKyAgICBpZiAoKFB5X1RZUEUoc2VsZikgPT0gJkJaMkNvbXByZXNzb3JfVHlwZSkgJiYKKyAgICAgICAgIV9QeUFyZ19Ob0tleXdvcmRzKCJCWjJDb21wcmVzc29yIiwga3dhcmdzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAifGk6QloyQ29tcHJlc3NvciIsCisgICAgICAgICZjb21wcmVzc2xldmVsKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9iejJfQloyQ29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKChCWjJDb21wcmVzc29yICopc2VsZiwgY29tcHJlc3NsZXZlbCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX2RvY19fLAorImRlY29tcHJlc3MoJHNlbGYsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJQcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuXG4iCisiXG4iCisiUmV0dXJucyBhIGNodW5rIG9mIGRlY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiXCdcJyBvdGhlcndpc2UuXG4iCisiXG4iCisiQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZFxuIgorInJhaXNlcyBhbiBFT0ZFcnJvci4gIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHN0cmVhbVxuIgorImlzIGlnbm9yZWQgYW5kIHNhdmVkIGluIHRoZSB1bnVzZWRfZGF0YSBhdHRyaWJ1dGUuIik7CisKKyNkZWZpbmUgX0JaMl9CWjJERUNPTVBSRVNTT1JfREVDT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbilfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIF9iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChCWjJEZWNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzKEJaMkRlY29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmRlY29tcHJlc3MiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoc2VsZiwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2J6Ml9CWjJEZWNvbXByZXNzb3JfX19pbml0X19fX2RvY19fLAorIkJaMkRlY29tcHJlc3NvcigpXG4iCisiLS1cbiIKKyJcbiIKKyJDcmVhdGUgYSBkZWNvbXByZXNzb3Igb2JqZWN0IGZvciBkZWNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS5cbiIKKyJcbiIKKyJGb3Igb25lLXNob3QgZGVjb21wcmVzc2lvbiwgdXNlIHRoZSBkZWNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4iKTsKKworc3RhdGljIGludAorX2J6Ml9CWjJEZWNvbXByZXNzb3JfX19pbml0X19faW1wbChCWjJEZWNvbXByZXNzb3IgKnNlbGYpOworCitzdGF0aWMgaW50CitfYnoyX0JaMkRlY29tcHJlc3Nvcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IHJldHVybl92YWx1ZSA9IC0xOworCisgICAgaWYgKChQeV9UWVBFKHNlbGYpID09ICZCWjJEZWNvbXByZXNzb3JfVHlwZSkgJiYKKyAgICAgICAgIV9QeUFyZ19Ob1Bvc2l0aW9uYWwoIkJaMkRlY29tcHJlc3NvciIsIGFyZ3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKChQeV9UWVBFKHNlbGYpID09ICZCWjJEZWNvbXByZXNzb3JfVHlwZSkgJiYKKyAgICAgICAgIV9QeUFyZ19Ob0tleXdvcmRzKCJCWjJEZWNvbXByZXNzb3IiLCBrd2FyZ3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2J6Ml9CWjJEZWNvbXByZXNzb3JfX19pbml0X19faW1wbCgoQloyRGVjb21wcmVzc29yICopc2VsZik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yMWNhNDQwNTUxOWEwOTMxIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL19sem1hbW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL19sem1hbW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWFkODgyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvX2x6bWFtb2R1bGUuYy5oCkBAIC0wLDAgKzEsMjQ1IEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3NfX2RvY19fLAorImNvbXByZXNzKCRzZWxmLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUHJvdmlkZSBkYXRhIHRvIHRoZSBjb21wcmVzc29yIG9iamVjdC5cbiIKKyJcbiIKKyJSZXR1cm5zIGEgY2h1bmsgb2YgY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiXCdcJyBvdGhlcndpc2UuXG4iCisiXG4iCisiV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBwcm92aWRpbmcgZGF0YSB0byB0aGUgY29tcHJlc3NvciwgY2FsbCB0aGVcbiIKKyJmbHVzaCgpIG1ldGhvZCB0byBmaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuIik7CisKKyNkZWZpbmUgX0xaTUFfTFpNQUNPTVBSRVNTT1JfQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKV9sem1hX0xaTUFDb21wcmVzc29yX2NvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIF9sem1hX0xaTUFDb21wcmVzc29yX2NvbXByZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzc19pbXBsKENvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzcyhDb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSo6Y29tcHJlc3MiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzc19pbXBsKHNlbGYsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9sem1hX0xaTUFDb21wcmVzc29yX2ZsdXNoX19kb2NfXywKKyJmbHVzaCgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy5cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEgbGVmdCBpbiBpbnRlcm5hbCBidWZmZXJzLlxuIgorIlxuIgorIlRoZSBjb21wcmVzc29yIG9iamVjdCBtYXkgbm90IGJlIHVzZWQgYWZ0ZXIgdGhpcyBtZXRob2QgaXMgY2FsbGVkLiIpOworCisjZGVmaW5lIF9MWk1BX0xaTUFDT01QUkVTU09SX0ZMVVNIX01FVEhPRERFRiAgICBcCisgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbilfbHptYV9MWk1BQ29tcHJlc3Nvcl9mbHVzaCwgTUVUSF9OT0FSR1MsIF9sem1hX0xaTUFDb21wcmVzc29yX2ZsdXNoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9MWk1BQ29tcHJlc3Nvcl9mbHVzaF9pbXBsKENvbXByZXNzb3IgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfTFpNQUNvbXByZXNzb3JfZmx1c2goQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2x6bWFfTFpNQUNvbXByZXNzb3JfZmx1c2hfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX18sCisiZGVjb21wcmVzcygkc2VsZiwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIlByb3ZpZGUgZGF0YSB0byB0aGUgZGVjb21wcmVzc29yIG9iamVjdC5cbiIKKyJcbiIKKyJSZXR1cm5zIGEgY2h1bmsgb2YgZGVjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGJcJ1wnIG90aGVyd2lzZS5cbiIKKyJcbiIKKyJBdHRlbXB0aW5nIHRvIGRlY29tcHJlc3MgZGF0YSBhZnRlciB0aGUgZW5kIG9mIHN0cmVhbSBpcyByZWFjaGVkXG4iCisicmFpc2VzIGFuIEVPRkVycm9yLiAgQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtXG4iCisiaXMgaWdub3JlZCBhbmQgc2F2ZWQgaW4gdGhlIHVudXNlZF9kYXRhIGF0dHJpYnV0ZS4iKTsKKworI2RlZmluZSBfTFpNQV9MWk1BREVDT01QUkVTU09SX0RFQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIF9sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoRGVjb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzKERlY29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmRlY29tcHJlc3MiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfbHptYV9MWk1BRGVjb21wcmVzc29yX19faW5pdF9fX19kb2NfXywKKyJMWk1BRGVjb21wcmVzc29yKGZvcm1hdD1GT1JNQVRfQVVUTywgbWVtbGltaXQ9Tm9uZSwgZmlsdGVycz1Ob25lKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgZGVjb21wcmVzc29yIG9iamVjdCBmb3IgZGVjb21wcmVzc2luZyBkYXRhIGluY3JlbWVudGFsbHkuXG4iCisiXG4iCisiICBmb3JtYXRcbiIKKyIgICAgU3BlY2lmaWVzIHRoZSBjb250YWluZXIgZm9ybWF0IG9mIHRoZSBpbnB1dCBzdHJlYW0uICBJZiB0aGlzIGlzXG4iCisiICAgIEZPUk1BVF9BVVRPICh0aGUgZGVmYXVsdCksIHRoZSBkZWNvbXByZXNzb3Igd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdFxuIgorIiAgICB3aGV0aGVyIHRoZSBpbnB1dCBpcyBGT1JNQVRfWFogb3IgRk9STUFUX0FMT05FLiAgU3RyZWFtcyBjcmVhdGVkIHdpdGhcbiIKKyIgICAgRk9STUFUX1JBVyBjYW5ub3QgYmUgYXV0b2RldGVjdGVkLlxuIgorIiAgbWVtbGltaXRcbiIKKyIgICAgTGltaXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSB0aGUgZGVjb21wcmVzc29yLiAgVGhpcyB3aWxsIGNhdXNlXG4iCisiICAgIGRlY29tcHJlc3Npb24gdG8gZmFpbCBpZiB0aGUgaW5wdXQgY2Fubm90IGJlIGRlY29tcHJlc3NlZCB3aXRoaW4gdGhlXG4iCisiICAgIGdpdmVuIGxpbWl0LlxuIgorIiAgZmlsdGVyc1xuIgorIiAgICBBIGN1c3RvbSBmaWx0ZXIgY2hhaW4uICBUaGlzIGFyZ3VtZW50IGlzIHJlcXVpcmVkIGZvciBGT1JNQVRfUkFXLCBhbmRcbiIKKyIgICAgbm90IGFjY2VwdGVkIHdpdGggYW55IG90aGVyIGZvcm1hdC4gIFdoZW4gcHJvdmlkZWQsIHRoaXMgc2hvdWxkIGJlIGFcbiIKKyIgICAgc2VxdWVuY2Ugb2YgZGljdHMsIGVhY2ggaW5kaWNhdGluZyB0aGUgSUQgYW5kIG9wdGlvbnMgZm9yIGEgc2luZ2xlXG4iCisiICAgIGZpbHRlci5cbiIKKyJcbiIKKyJGb3Igb25lLXNob3QgZGVjb21wcmVzc2lvbiwgdXNlIHRoZSBkZWNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4iKTsKKworc3RhdGljIGludAorX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKERlY29tcHJlc3NvciAqc2VsZiwgaW50IGZvcm1hdCwgUHlPYmplY3QgKm1lbWxpbWl0LCBQeU9iamVjdCAqZmlsdGVycyk7CisKK3N0YXRpYyBpbnQKK19sem1hX0xaTUFEZWNvbXByZXNzb3JfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZvcm1hdCIsICJtZW1saW1pdCIsICJmaWx0ZXJzIiwgTlVMTH07CisgICAgaW50IGZvcm1hdCA9IEZPUk1BVF9BVVRPOworICAgIFB5T2JqZWN0ICptZW1saW1pdCA9IFB5X05vbmU7CisgICAgUHlPYmplY3QgKmZpbHRlcnMgPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAifGlPTzpMWk1BRGVjb21wcmVzc29yIiwgX2tleXdvcmRzLAorICAgICAgICAmZm9ybWF0LCAmbWVtbGltaXQsICZmaWx0ZXJzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9sem1hX0xaTUFEZWNvbXByZXNzb3JfX19pbml0X19faW1wbCgoRGVjb21wcmVzc29yICopc2VsZiwgZm9ybWF0LCBtZW1saW1pdCwgZmlsdGVycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9sem1hX2lzX2NoZWNrX3N1cHBvcnRlZF9fZG9jX18sCisiaXNfY2hlY2tfc3VwcG9ydGVkKCRtb2R1bGUsIGNoZWNrX2lkLCAvKVxuIgorIi0tXG4iCisiXG4iCisiVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiBpbnRlZ3JpdHkgY2hlY2sgaXMgc3VwcG9ydGVkLlxuIgorIlxuIgorIkFsd2F5cyByZXR1cm5zIFRydWUgZm9yIENIRUNLX05PTkUgYW5kIENIRUNLX0NSQzMyLiIpOworCisjZGVmaW5lIF9MWk1BX0lTX0NIRUNLX1NVUFBPUlRFRF9NRVRIT0RERUYgICAgXAorICAgIHsiaXNfY2hlY2tfc3VwcG9ydGVkIiwgKFB5Q0Z1bmN0aW9uKV9sem1hX2lzX2NoZWNrX3N1cHBvcnRlZCwgTUVUSF9WQVJBUkdTLCBfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX2lzX2NoZWNrX3N1cHBvcnRlZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBjaGVja19pZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9pc19jaGVja19zdXBwb3J0ZWQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGNoZWNrX2lkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJpOmlzX2NoZWNrX3N1cHBvcnRlZCIsCisgICAgICAgICZjaGVja19pZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfaW1wbChtb2R1bGUsIGNoZWNrX2lkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllc19fZG9jX18sCisiX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcygkbW9kdWxlLCBmaWx0ZXIsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBieXRlcyBvYmplY3QgZW5jb2RpbmcgdGhlIG9wdGlvbnMgKHByb3BlcnRpZXMpIG9mIHRoZSBmaWx0ZXIgc3BlY2lmaWVkIGJ5ICpmaWx0ZXIqIChhIGRpY3QpLlxuIgorIlxuIgorIlRoZSByZXN1bHQgZG9lcyBub3QgaW5jbHVkZSB0aGUgZmlsdGVyIElEIGl0c2VsZiwgb25seSB0aGUgb3B0aW9ucy4iKTsKKworI2RlZmluZSBfTFpNQV9fRU5DT0RFX0ZJTFRFUl9QUk9QRVJUSUVTX01FVEhPRERFRiAgICBcCisgICAgeyJfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzIiwgKFB5Q0Z1bmN0aW9uKV9sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMsIE1FVEhfVkFSQVJHUywgX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGx6bWFfZmlsdGVyIGZpbHRlcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGx6bWFfZmlsdGVyIGZpbHRlciA9IHtMWk1BX1ZMSV9VTktOT1dOLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiTyY6X2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyIsCisgICAgICAgIGx6bWFfZmlsdGVyX2NvbnZlcnRlciwgJmZpbHRlcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfbHptYV9fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2ltcGwobW9kdWxlLCBmaWx0ZXIpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZpbHRlciAqLworICAgIGlmIChmaWx0ZXIuaWQgIT0gTFpNQV9WTElfVU5LTk9XTikKKyAgICAgICBQeU1lbV9GcmVlKGZpbHRlci5vcHRpb25zKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX19kb2NfXywKKyJfZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKCRtb2R1bGUsIGZpbHRlcl9pZCwgZW5jb2RlZF9wcm9wcywgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGJ5dGVzIG9iamVjdCBlbmNvZGluZyB0aGUgb3B0aW9ucyAocHJvcGVydGllcykgb2YgdGhlIGZpbHRlciBzcGVjaWZpZWQgYnkgKmZpbHRlciogKGEgZGljdCkuXG4iCisiXG4iCisiVGhlIHJlc3VsdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmaWx0ZXIgSUQgaXRzZWxmLCBvbmx5IHRoZSBvcHRpb25zLiIpOworCisjZGVmaW5lIF9MWk1BX19ERUNPREVfRklMVEVSX1BST1BFUlRJRVNfTUVUSE9EREVGICAgIFwKKyAgICB7Il9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLCAoUHlDRnVuY3Rpb24pX2x6bWFfX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcywgTUVUSF9WQVJBUkdTLCBfbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgbHptYV92bGkgZmlsdGVyX2lkLCBQeV9idWZmZXIgKmVuY29kZWRfcHJvcHMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBsem1hX3ZsaSBmaWx0ZXJfaWQ7CisgICAgUHlfYnVmZmVyIGVuY29kZWRfcHJvcHMgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8meSo6X2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyIsCisgICAgICAgIGx6bWFfdmxpX2NvbnZlcnRlciwgJmZpbHRlcl9pZCwgJmVuY29kZWRfcHJvcHMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2x6bWFfX2RlY29kZV9maWx0ZXJfcHJvcGVydGllc19pbXBsKG1vZHVsZSwgZmlsdGVyX2lkLCAmZW5jb2RlZF9wcm9wcyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZW5jb2RlZF9wcm9wcyAqLworICAgIGlmIChlbmNvZGVkX3Byb3BzLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZlbmNvZGVkX3Byb3BzKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODA4ZmVjODIxNmFjNzEyYiBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9fcGlja2xlLmMuaCBiL01vZHVsZXMvY2xpbmljL19waWNrbGUuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMGE2MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9fcGlja2xlLmMuaApAQCAtMCwwICsxLDQ5MSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vX19kb2NfXywKKyJjbGVhcl9tZW1vKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ2xlYXJzIHRoZSBwaWNrbGVyXCdzIFwibWVtb1wiLlxuIgorIlxuIgorIlRoZSBtZW1vIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlbWVtYmVycyB3aGljaCBvYmplY3RzIHRoZVxuIgorInBpY2tsZXIgaGFzIGFscmVhZHkgc2Vlbiwgc28gdGhhdCBzaGFyZWQgb3IgcmVjdXJzaXZlIG9iamVjdHMgYXJlXG4iCisicGlja2xlZCBieSByZWZlcmVuY2UgYW5kIG5vdCBieSB2YWx1ZS4gIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB3aGVuXG4iCisicmUtdXNpbmcgcGlja2xlcnMuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSX0NMRUFSX01FTU9fTUVUSE9EREVGICAgIFwKKyAgICB7ImNsZWFyX21lbW8iLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW8sIE1FVEhfTk9BUkdTLCBfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtb19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW9faW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJfZHVtcF9fZG9jX18sCisiZHVtcCgkc2VsZiwgb2JqLCAvKVxuIgorIi0tXG4iCisiXG4iCisiV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gdGhlIG9wZW4gZmlsZS4iKTsKKworI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJfRFVNUF9NRVRIT0RERUYgICAgXAorICAgIHsiZHVtcCIsIChQeUNGdW5jdGlvbilfcGlja2xlX1BpY2tsZXJfZHVtcCwgTUVUSF9PLCBfcGlja2xlX1BpY2tsZXJfZHVtcF9fZG9jX199LAorCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX19kb2NfXywKKyJQaWNrbGVyKGZpbGUsIHByb3RvY29sPU5vbmUsIGZpeF9pbXBvcnRzPVRydWUpXG4iCisiLS1cbiIKKyJcbiIKKyJUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHdyaXRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uXG4iCisiXG4iCisiVGhlIG9wdGlvbmFsICpwcm90b2NvbCogYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlblxuIgorInByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzIGFuZCA0LiAgVGhlIGRlZmF1bHRcbiIKKyJwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuXG4iCisiXG4iCisiU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbFxuIgorInZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZVxuIgorInZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuXG4iCisiXG4iCisiVGhlICpmaWxlKiBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGVcbiIKKyJieXRlcyBhcmd1bWVudC4gSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeVxuIgorIndyaXRpbmcsIGEgaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0c1xuIgorInRoaXMgaW50ZXJmYWNlLlxuIgorIlxuIgorIklmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeVxuIgorInRvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uXG4iCisiMiwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIuIik7CisKK3N0YXRpYyBpbnQKK19waWNrbGVfUGlja2xlcl9fX2luaXRfX19pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cyk7CisKK3N0YXRpYyBpbnQKK19waWNrbGVfUGlja2xlcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IHJldHVybl92YWx1ZSA9IC0xOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZmlsZSIsICJwcm90b2NvbCIsICJmaXhfaW1wb3J0cyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpmaWxlOworICAgIFB5T2JqZWN0ICpwcm90b2NvbCA9IE5VTEw7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98T3A6UGlja2xlciIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZpbGUsICZwcm90b2NvbCwgJmZpeF9pbXBvcnRzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfUGlja2xlcl9fX2luaXRfX19pbXBsKChQaWNrbGVyT2JqZWN0ICopc2VsZiwgZmlsZSwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfXywKKyJjbGVhcigkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9DTEVBUl9NRVRIT0RERUYgICAgXAorICAgIHsiY2xlYXIiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyLCBNRVRIX05PQVJHUywgX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY2xlYXJfaW1wbChQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhcihQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY2xlYXJfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5X19kb2NfXywKKyJjb3B5KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX0NPUFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvcHkiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHksIE1FVEhfTk9BUkdTLCBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHlfaW1wbChQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5KFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19fZG9jX18sCisiX19yZWR1Y2VfXygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkltcGxlbWVudCBwaWNrbGUgc3VwcG9ydC4iKTsKKworI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfX19SRURVQ0VfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfXywgTUVUSF9OT0FSR1MsIF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19pbXBsKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX18oUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19faW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfVW5waWNrbGVyX2xvYWRfX2RvY19fLAorImxvYWQoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJMb2FkIGEgcGlja2xlLlxuIgorIlxuIgorIlJlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGdpdmVuXG4iCisiaW4gdGhlIGNvbnN0cnVjdG9yLCBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHlcbiIKKyJzcGVjaWZpZWQgdGhlcmVpbi4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUl9MT0FEX01FVEhPRERFRiAgICBcCisgICAgeyJsb2FkIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyX2xvYWQsIE1FVEhfTk9BUkdTLCBfcGlja2xlX1VucGlja2xlcl9sb2FkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9sb2FkX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyX2xvYWQoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfcGlja2xlX1VucGlja2xlcl9sb2FkX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX19kb2NfXywKKyJmaW5kX2NsYXNzKCRzZWxmLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYW4gb2JqZWN0IGZyb20gYSBzcGVjaWZpZWQgbW9kdWxlLlxuIgorIlxuIgorIklmIG5lY2Vzc2FyeSwgdGhlIG1vZHVsZSB3aWxsIGJlIGltcG9ydGVkLiBTdWJjbGFzc2VzIG1heSBvdmVycmlkZVxuIgorInRoaXMgbWV0aG9kIChlLmcuIHRvIHJlc3RyaWN0IHVucGlja2xpbmcgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgYW5kXG4iCisiZnVuY3Rpb25zKS5cbiIKKyJcbiIKKyJUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBjbGFzcyBvciBhIGZ1bmN0aW9uIG9iamVjdCBpc1xuIgorIm5lZWRlZC4gIEJvdGggYXJndW1lbnRzIHBhc3NlZCBhcmUgc3RyIG9iamVjdHMuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJfRklORF9DTEFTU19NRVRIT0RERUYgICAgXAorICAgIHsiZmluZF9jbGFzcyIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzLCBNRVRIX1ZBUkFSR1MsIF9waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfaW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICptb2R1bGVfbmFtZSwgUHlPYmplY3QgKmdsb2JhbF9uYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3MoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbW9kdWxlX25hbWU7CisgICAgUHlPYmplY3QgKmdsb2JhbF9uYW1lOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZmluZF9jbGFzcyIsCisgICAgICAgIDIsIDIsCisgICAgICAgICZtb2R1bGVfbmFtZSwgJmdsb2JhbF9uYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfaW1wbChzZWxmLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19fZG9jX18sCisiVW5waWNrbGVyKGZpbGUsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPVwnQVNDSUlcJywgZXJyb3JzPVwnc3RyaWN0XCcpXG4iCisiLS1cbiIKKyJcbiIKKyJUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHJlYWRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uXG4iCisiXG4iCisiVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBub1xuIgorInByb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0XCdzXG4iCisicmVwcmVzZW50YXRpb24gYXJlIGlnbm9yZWQuXG4iCisiXG4iCisiVGhlIGFyZ3VtZW50ICpmaWxlKiBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0IHRha2VzXG4iCisiYW4gaW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdCByZXF1aXJlcyBub1xuIgorImFyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGFcbiIKKyJiaW5hcnkgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciByZWFkaW5nLCBhIGlvLkJ5dGVzSU8gb2JqZWN0LCBvciBhbnlcbiIKKyJvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuXG4iCisiXG4iCisiT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLFxuIgorIndoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW1cbiIKKyJnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgorIm1hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZVxuIgorIiplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nXG4iCisiaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gXCdBU0NJSVwnIGFuZCBcJ3N0cmljdFwnLFxuIgorInJlc3BlY3RpdmVseS4gIFRoZSAqZW5jb2RpbmcqIGNhbiBiZSBcJ2J5dGVzXCcgdG8gcmVhZCB0aGVzZSA4LWJpdFxuIgorInN0cmluZyBpbnN0YW5jZXMgYXMgYnl0ZXMgb2JqZWN0cy4iKTsKKworc3RhdGljIGludAorX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19faW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgaW50CitfcGlja2xlX1VucGlja2xlcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IHJldHVybl92YWx1ZSA9IC0xOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZmlsZSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqZmlsZTsKKyAgICBpbnQgZml4X2ltcG9ydHMgPSAxOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gIkFTQ0lJIjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSAic3RyaWN0IjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98JHBzczpVbnBpY2tsZXIiLCBfa2V5d29yZHMsCisgICAgICAgICZmaWxlLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19pbXBsKChVbnBpY2tsZXJPYmplY3QgKilzZWxmLCBmaWxlLCBmaXhfaW1wb3J0cywgZW5jb2RpbmcsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfXywKKyJjbGVhcigkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX0NMRUFSX01FVEhPRERFRiAgICBcCisgICAgeyJjbGVhciIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhciwgTUVUSF9OT0FSR1MsIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhcl9pbXBsKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhcihVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5X19kb2NfXywKKyJjb3B5KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ09QWV9NRVRIT0RERUYgICAgXAorICAgIHsiY29weSIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5LCBNRVRIX05PQVJHUywgX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5KFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19fZG9jX18sCisiX19yZWR1Y2VfXygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkltcGxlbWVudCBwaWNrbGluZyBzdXBwb3J0LiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX19fUkVEVUNFX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfXywgTUVUSF9OT0FSR1MsIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19faW1wbChVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfXyhVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19faW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfZHVtcF9fZG9jX18sCisiZHVtcCgkbW9kdWxlLCAvLCBvYmosIGZpbGUsIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpXG4iCisiLS1cbiIKKyJcbiIKKyJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGZpbGUuXG4iCisiXG4iCisiVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopYGAsIGJ1dCBtYXlcbiIKKyJiZSBtb3JlIGVmZmljaWVudC5cbiIKKyJcbiIKKyJUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuXG4iCisicHJvdG9jb2wgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0XG4iCisicHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLlxuIgorIlxuIgorIlNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2xcbiIKKyJ2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGVcbiIKKyJ2ZXJzaW9uIG9mIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLlxuIgorIlxuIgorIlRoZSAqZmlsZSogYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlXG4iCisiYnl0ZXMgYXJndW1lbnQuICBJdCBjYW4gdGh1cyBiZSBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgYmluYXJ5XG4iCisid3JpdGluZywgYSBpby5CeXRlc0lPIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzXG4iCisidGhpcyBpbnRlcmZhY2UuXG4iCisiXG4iCisiSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlIGFuZCBwcm90b2NvbCBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5XG4iCisidG8gbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob25cbiIKKyIyLCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4iKTsKKworI2RlZmluZSBfUElDS0xFX0RVTVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9kdW1wLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9kdW1wX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2R1bXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqZmlsZSwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9kdW1wKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsib2JqIiwgImZpbGUiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5T2JqZWN0ICpmaWxlOworICAgIFB5T2JqZWN0ICpwcm90b2NvbCA9IE5VTEw7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk9PfE8kcDpkdW1wIiwgX2tleXdvcmRzLAorICAgICAgICAmb2JqLCAmZmlsZSwgJnByb3RvY29sLCAmZml4X2ltcG9ydHMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9kdW1wX2ltcGwobW9kdWxlLCBvYmosIGZpbGUsIHByb3RvY29sLCBmaXhfaW1wb3J0cyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfZHVtcHNfX2RvY19fLAorImR1bXBzKCRtb2R1bGUsIC8sIG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IGFzIGEgYnl0ZXMgb2JqZWN0LlxuIgorIlxuIgorIlRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW5cbiIKKyJwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0XG4iCisicHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLlxuIgorIlxuIgorIlNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2xcbiIKKyJ2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGVcbiIKKyJ2ZXJzaW9uIG9mIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLlxuIgorIlxuIgorIklmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgKnByb3RvY29sKiBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGxcbiIKKyJ0cnkgdG8gbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpblxuIgorIlB5dGhvbiAyLCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4iKTsKKworI2RlZmluZSBfUElDS0xFX0RVTVBTX01FVEhPRERFRiAgICBcCisgICAgeyJkdW1wcyIsIChQeUNGdW5jdGlvbilfcGlja2xlX2R1bXBzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9kdW1wc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9kdW1wc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfZHVtcHMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJvYmoiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5T2JqZWN0ICpwcm90b2NvbCA9IE5VTEw7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98TyRwOmR1bXBzIiwgX2tleXdvcmRzLAorICAgICAgICAmb2JqLCAmcHJvdG9jb2wsICZmaXhfaW1wb3J0cykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX2R1bXBzX2ltcGwobW9kdWxlLCBvYmosIHByb3RvY29sLCBmaXhfaW1wb3J0cyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfbG9hZF9fZG9jX18sCisibG9hZCgkbW9kdWxlLCAvLCBmaWxlLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz1cJ0FTQ0lJXCcsXG4iCisiICAgICBlcnJvcnM9XCdzdHJpY3RcJylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgYW5kIHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgcGlja2xlIGRhdGEgc3RvcmVkIGluIGEgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBVbnBpY2tsZXIoZmlsZSkubG9hZCgpYGAsIGJ1dCBtYXkgYmUgbW9yZVxuIgorImVmZmljaWVudC5cbiIKKyJcbiIKKyJUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vXG4iCisicHJvdG9jb2wgYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3RcJ3NcbiIKKyJyZXByZXNlbnRhdGlvbiBhcmUgaWdub3JlZC5cbiIKKyJcbiIKKyJUaGUgYXJndW1lbnQgKmZpbGUqIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXNcbiIKKyJhbiBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0IHJlcXVpcmVzIG5vXG4iCisiYXJndW1lbnRzLiAgQm90aCBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYVxuIgorImJpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHJlYWRpbmcsIGEgaW8uQnl0ZXNJTyBvYmplY3QsIG9yIGFueVxuIgorIm90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS5cbiIKKyJcbiIKKyJPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosXG4iCisid2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbVxuIgorImdlbmVyYXRlZCBieSBQeXRob24gMi4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCisibWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlXG4iCisiKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmdcbiIKKyJpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24gMjsgdGhlc2UgZGVmYXVsdCB0byBcJ0FTQ0lJXCcgYW5kIFwnc3RyaWN0XCcsXG4iCisicmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuIGJlIFwnYnl0ZXNcJyB0byByZWFkIHRoZXNlIDgtYml0XG4iCisic3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLiIpOworCisjZGVmaW5lIF9QSUNLTEVfTE9BRF9NRVRIT0RERUYgICAgXAorICAgIHsibG9hZCIsIChQeUNGdW5jdGlvbilfcGlja2xlX2xvYWQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfcGlja2xlX2xvYWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfbG9hZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpmaWxlLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9sb2FkKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZmlsZSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqZmlsZTsKKyAgICBpbnQgZml4X2ltcG9ydHMgPSAxOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gIkFTQ0lJIjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSAic3RyaWN0IjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98JHBzczpsb2FkIiwgX2tleXdvcmRzLAorICAgICAgICAmZmlsZSwgJmZpeF9pbXBvcnRzLCAmZW5jb2RpbmcsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9sb2FkX2ltcGwobW9kdWxlLCBmaWxlLCBmaXhfaW1wb3J0cywgZW5jb2RpbmcsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfbG9hZHNfX2RvY19fLAorImxvYWRzKCRtb2R1bGUsIC8sIGRhdGEsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPVwnQVNDSUlcJyxcbiIKKyIgICAgICBlcnJvcnM9XCdzdHJpY3RcJylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgYW5kIHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gcGlja2xlIGRhdGEuXG4iCisiXG4iCisiVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBub1xuIgorInByb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0XCdzXG4iCisicmVwcmVzZW50YXRpb24gYXJlIGlnbm9yZWQuXG4iCisiXG4iCisiT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLFxuIgorIndoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW1cbiIKKyJnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgorIm1hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZVxuIgorIiplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nXG4iCisiaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gXCdBU0NJSVwnIGFuZCBcJ3N0cmljdFwnLFxuIgorInJlc3BlY3RpdmVseS4gIFRoZSAqZW5jb2RpbmcqIGNhbiBiZSBcJ2J5dGVzXCcgdG8gcmVhZCB0aGVzZSA4LWJpdFxuIgorInN0cmluZyBpbnN0YW5jZXMgYXMgYnl0ZXMgb2JqZWN0cy4iKTsKKworI2RlZmluZSBfUElDS0xFX0xPQURTX01FVEhPRERFRiAgICBcCisgICAgeyJsb2FkcyIsIChQeUNGdW5jdGlvbilfcGlja2xlX2xvYWRzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9sb2Fkc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9sb2Fkc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpkYXRhLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9sb2FkcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImRhdGEiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmRhdGE7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9ICJBU0NJSSI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gInN0cmljdCI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfCRwc3M6bG9hZHMiLCBfa2V5d29yZHMsCisgICAgICAgICZkYXRhLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX2xvYWRzX2ltcGwobW9kdWxlLCBkYXRhLCBmaXhfaW1wb3J0cywgZW5jb2RpbmcsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mOTY1YjZjNzAxOGM4OThkIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL2F1ZGlvb3AuYy5oIGIvTW9kdWxlcy9jbGluaWMvYXVkaW9vcC5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBlZjVlMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL2F1ZGlvb3AuYy5oCkBAIC0wLDAgKzEsODg5IEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoYXVkaW9vcF9nZXRzYW1wbGVfX2RvY19fLAorImdldHNhbXBsZSgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIGluZGV4LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSB2YWx1ZSBvZiBzYW1wbGUgaW5kZXggZnJvbSB0aGUgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9HRVRTQU1QTEVfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldHNhbXBsZSIsIChQeUNGdW5jdGlvbilhdWRpb29wX2dldHNhbXBsZSwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2dldHNhbXBsZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9nZXRzYW1wbGVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIFB5X3NzaXplX3QgaW5kZXgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9nZXRzYW1wbGUoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKyAgICBQeV9zc2l6ZV90IGluZGV4OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KmluOmdldHNhbXBsZSIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmaW5kZXgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9nZXRzYW1wbGVfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIGluZGV4KTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfbWF4X19kb2NfXywKKyJtYXgoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBtYXhpbXVtIG9mIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhbGwgc2FtcGxlcyBpbiBhIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfTUFYX01FVEhPRERFRiAgICBcCisgICAgeyJtYXgiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9tYXgsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9tYXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbWF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbWF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTptYXgiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX21heF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX21pbm1heF9fZG9jX18sCisibWlubWF4KCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgb2YgYWxsIHNhbXBsZXMgaW4gdGhlIHNvdW5kIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfTUlOTUFYX01FVEhPRERFRiAgICBcCisgICAgeyJtaW5tYXgiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9taW5tYXgsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9taW5tYXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbWlubWF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbWlubWF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTptaW5tYXgiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX21pbm1heF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2F2Z19fZG9jX18sCisiYXZnKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgYXZlcmFnZSBvdmVyIGFsbCBzYW1wbGVzIGluIHRoZSBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX0FWR19NRVRIT0RERUYgICAgXAorICAgIHsiYXZnIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYXZnLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYXZnX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2F2Z19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2F2ZyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6YXZnIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9hdmdfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9ybXNfX2RvY19fLAorInJtcygkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHJvb3QtbWVhbi1zcXVhcmUgb2YgdGhlIGZyYWdtZW50LCBpLmUuIHNxcnQoc3VtKFNfaV4yKS9uKS4iKTsKKworI2RlZmluZSBBVURJT09QX1JNU19NRVRIT0RERUYgICAgXAorICAgIHsicm1zIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3Bfcm1zLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3Bfcm1zX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3Jtc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3JtcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6cm1zIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9ybXNfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9maW5kZml0X19kb2NfXywKKyJmaW5kZml0KCRtb2R1bGUsIGZyYWdtZW50LCByZWZlcmVuY2UsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJUcnkgdG8gbWF0Y2ggcmVmZXJlbmNlIGFzIHdlbGwgYXMgcG9zc2libGUgdG8gYSBwb3J0aW9uIG9mIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfRklOREZJVF9NRVRIT0RERUYgICAgXAorICAgIHsiZmluZGZpdCIsIChQeUNGdW5jdGlvbilhdWRpb29wX2ZpbmRmaXQsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9maW5kZml0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2ZpbmRmaXRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9idWZmZXIgKnJlZmVyZW5jZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2ZpbmRmaXQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIFB5X2J1ZmZlciByZWZlcmVuY2UgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqeSo6ZmluZGZpdCIsCisgICAgICAgICZmcmFnbWVudCwgJnJlZmVyZW5jZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2ZpbmRmaXRfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgJnJlZmVyZW5jZSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKyAgICAvKiBDbGVhbnVwIGZvciByZWZlcmVuY2UgKi8KKyAgICBpZiAocmVmZXJlbmNlLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZyZWZlcmVuY2UpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfZmluZGZhY3Rvcl9fZG9jX18sCisiZmluZGZhY3RvcigkbW9kdWxlLCBmcmFnbWVudCwgcmVmZXJlbmNlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZmFjdG9yIEYgc3VjaCB0aGF0IHJtcyhhZGQoZnJhZ21lbnQsIG11bChyZWZlcmVuY2UsIC1GKSkpIGlzIG1pbmltYWwuIik7CisKKyNkZWZpbmUgQVVESU9PUF9GSU5ERkFDVE9SX01FVEhPRERFRiAgICBcCisgICAgeyJmaW5kZmFjdG9yIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfZmluZGZhY3RvciwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2ZpbmRmYWN0b3JfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfZmluZGZhY3Rvcl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIFB5X2J1ZmZlciAqcmVmZXJlbmNlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfZmluZGZhY3RvcihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgUHlfYnVmZmVyIHJlZmVyZW5jZSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSp5KjpmaW5kZmFjdG9yIiwKKyAgICAgICAgJmZyYWdtZW50LCAmcmVmZXJlbmNlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfZmluZGZhY3Rvcl9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCAmcmVmZXJlbmNlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworICAgIC8qIENsZWFudXAgZm9yIHJlZmVyZW5jZSAqLworICAgIGlmIChyZWZlcmVuY2Uub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnJlZmVyZW5jZSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9maW5kbWF4X19kb2NfXywKKyJmaW5kbWF4KCRtb2R1bGUsIGZyYWdtZW50LCBsZW5ndGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTZWFyY2ggZnJhZ21lbnQgZm9yIGEgc2xpY2Ugb2Ygc3BlY2lmaWVkIG51bWJlciBvZiBzYW1wbGVzIHdpdGggbWF4aW11bSBlbmVyZ3kuIik7CisKKyNkZWZpbmUgQVVESU9PUF9GSU5ETUFYX01FVEhPRERFRiAgICBcCisgICAgeyJmaW5kbWF4IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfZmluZG1heCwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2ZpbmRtYXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfZmluZG1heF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIFB5X3NzaXplX3QgbGVuZ3RoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfZmluZG1heChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgUHlfc3NpemVfdCBsZW5ndGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqbjpmaW5kbWF4IiwKKyAgICAgICAgJmZyYWdtZW50LCAmbGVuZ3RoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfZmluZG1heF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCBsZW5ndGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9hdmdwcF9fZG9jX18sCisiYXZncHAoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBhdmVyYWdlIHBlYWstcGVhayB2YWx1ZSBvdmVyIGFsbCBzYW1wbGVzIGluIHRoZSBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX0FWR1BQX01FVEhPRERFRiAgICBcCisgICAgeyJhdmdwcCIsIChQeUNGdW5jdGlvbilhdWRpb29wX2F2Z3BwLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYXZncHBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYXZncHBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hdmdwcChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6YXZncHAiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2F2Z3BwX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfbWF4cHBfX2RvY19fLAorIm1heHBwKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbWF4aW11bSBwZWFrLXBlYWsgdmFsdWUgaW4gdGhlIHNvdW5kIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfTUFYUFBfTUVUSE9EREVGICAgIFwKKyAgICB7Im1heHBwIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbWF4cHAsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9tYXhwcF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9tYXhwcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX21heHBwKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTptYXhwcCIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfbWF4cHBfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9jcm9zc19fZG9jX18sCisiY3Jvc3MoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBudW1iZXIgb2YgemVybyBjcm9zc2luZ3MgaW4gdGhlIGZyYWdtZW50IHBhc3NlZCBhcyBhbiBhcmd1bWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX0NST1NTX01FVEhPRERFRiAgICBcCisgICAgeyJjcm9zcyIsIChQeUNGdW5jdGlvbilhdWRpb29wX2Nyb3NzLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfY3Jvc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfY3Jvc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9jcm9zcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6Y3Jvc3MiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2Nyb3NzX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfbXVsX19kb2NfXywKKyJtdWwoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBmYWN0b3IsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBmcmFnbWVudCB0aGF0IGhhcyBhbGwgc2FtcGxlcyBpbiB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgbXVsdGlwbGllZCBieSB0aGUgZmxvYXRpbmctcG9pbnQgdmFsdWUgZmFjdG9yLiIpOworCisjZGVmaW5lIEFVRElPT1BfTVVMX01FVEhPRERFRiAgICBcCisgICAgeyJtdWwiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9tdWwsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9tdWxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbXVsX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBkb3VibGUgZmFjdG9yKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbXVsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgZG91YmxlIGZhY3RvcjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppZDptdWwiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJmZhY3RvcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX211bF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgZmFjdG9yKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfdG9tb25vX19kb2NfXywKKyJ0b21vbm8oJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBsZmFjdG9yLCByZmFjdG9yLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBhIHN0ZXJlbyBmcmFnbWVudCB0byBhIG1vbm8gZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9UT01PTk9fTUVUSE9EREVGICAgIFwKKyAgICB7InRvbW9ubyIsIChQeUNGdW5jdGlvbilhdWRpb29wX3RvbW9ubywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3RvbW9ub19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF90b21vbm9faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGRvdWJsZSBsZmFjdG9yLCBkb3VibGUgcmZhY3Rvcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3RvbW9ubyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIGRvdWJsZSBsZmFjdG9yOworICAgIGRvdWJsZSByZmFjdG9yOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KmlkZDp0b21vbm8iLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJmxmYWN0b3IsICZyZmFjdG9yKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfdG9tb25vX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBsZmFjdG9yLCByZmFjdG9yKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfdG9zdGVyZW9fX2RvY19fLAorInRvc3RlcmVvKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgbGZhY3RvciwgcmZhY3RvciwgLylcbiIKKyItLVxuIgorIlxuIgorIkdlbmVyYXRlIGEgc3RlcmVvIGZyYWdtZW50IGZyb20gYSBtb25vIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfVE9TVEVSRU9fTUVUSE9EREVGICAgIFwKKyAgICB7InRvc3RlcmVvIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfdG9zdGVyZW8sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF90b3N0ZXJlb19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF90b3N0ZXJlb19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgZG91YmxlIGxmYWN0b3IsIGRvdWJsZSByZmFjdG9yKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfdG9zdGVyZW8oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKyAgICBkb3VibGUgbGZhY3RvcjsKKyAgICBkb3VibGUgcmZhY3RvcjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppZGQ6dG9zdGVyZW8iLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJmxmYWN0b3IsICZyZmFjdG9yKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfdG9zdGVyZW9faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIGxmYWN0b3IsIHJmYWN0b3IpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9hZGRfX2RvY19fLAorImFkZCgkbW9kdWxlLCBmcmFnbWVudDEsIGZyYWdtZW50Miwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBmcmFnbWVudCB3aGljaCBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIHR3byBzYW1wbGVzIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLiIpOworCisjZGVmaW5lIEFVRElPT1BfQUREX01FVEhPRERFRiAgICBcCisgICAgeyJhZGQiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9hZGQsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9hZGRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYWRkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudDEsIFB5X2J1ZmZlciAqZnJhZ21lbnQyLCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hZGQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50MSA9IHtOVUxMLCBOVUxMfTsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQyID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSp5Kmk6YWRkIiwKKyAgICAgICAgJmZyYWdtZW50MSwgJmZyYWdtZW50MiwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYWRkX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQxLCAmZnJhZ21lbnQyLCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQxICovCisgICAgaWYgKGZyYWdtZW50MS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQxKTsKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudDIgKi8KKyAgICBpZiAoZnJhZ21lbnQyLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudDIpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfYmlhc19fZG9jX18sCisiYmlhcygkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIGJpYXMsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBmcmFnbWVudCB0aGF0IGlzIHRoZSBvcmlnaW5hbCBmcmFnbWVudCB3aXRoIGEgYmlhcyBhZGRlZCB0byBlYWNoIHNhbXBsZS4iKTsKKworI2RlZmluZSBBVURJT09QX0JJQVNfTUVUSE9EREVGICAgIFwKKyAgICB7ImJpYXMiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9iaWFzLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYmlhc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9iaWFzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgYmlhcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2JpYXMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKyAgICBpbnQgYmlhczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppaTpiaWFzIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZiaWFzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYmlhc19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgYmlhcyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX3JldmVyc2VfX2RvY19fLAorInJldmVyc2UoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV2ZXJzZSB0aGUgc2FtcGxlcyBpbiBhIGZyYWdtZW50IGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX1JFVkVSU0VfTUVUSE9EREVGICAgIFwKKyAgICB7InJldmVyc2UiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9yZXZlcnNlLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfcmV2ZXJzZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9yZXZlcnNlX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfcmV2ZXJzZShQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6cmV2ZXJzZSIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfcmV2ZXJzZV9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2J5dGVzd2FwX19kb2NfXywKKyJieXRlc3dhcCgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb252ZXJ0IGJpZy1lbmRpYW4gc2FtcGxlcyB0byBsaXR0bGUtZW5kaWFuIGFuZCB2aWNlIHZlcnNhLiIpOworCisjZGVmaW5lIEFVRElPT1BfQllURVNXQVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImJ5dGVzd2FwIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYnl0ZXN3YXAsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9ieXRlc3dhcF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9ieXRlc3dhcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2J5dGVzd2FwKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTpieXRlc3dhcCIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYnl0ZXN3YXBfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9saW4ybGluX19kb2NfXywKKyJsaW4ybGluKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgbmV3d2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb252ZXJ0IHNhbXBsZXMgYmV0d2VlbiAxLSwgMi0sIDMtIGFuZCA0LWJ5dGUgZm9ybWF0cy4iKTsKKworI2RlZmluZSBBVURJT09QX0xJTjJMSU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImxpbjJsaW4iLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9saW4ybGluLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbGluMmxpbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4ybGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgbmV3d2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4ybGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IG5ld3dpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KmlpOmxpbjJsaW4iLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJm5ld3dpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfbGluMmxpbl9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgbmV3d2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9yYXRlY3ZfX2RvY19fLAorInJhdGVjdigkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIG5jaGFubmVscywgaW5yYXRlLCBvdXRyYXRlLCBzdGF0ZSxcbiIKKyIgICAgICAgd2VpZ2h0QT0xLCB3ZWlnaHRCPTAsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb252ZXJ0IHRoZSBmcmFtZSByYXRlIG9mIHRoZSBpbnB1dCBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX1JBVEVDVl9NRVRIT0RERUYgICAgXAorICAgIHsicmF0ZWN2IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfcmF0ZWN2LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfcmF0ZWN2X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3JhdGVjdl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgaW50IG5jaGFubmVscywgaW50IGlucmF0ZSwgaW50IG91dHJhdGUsIFB5T2JqZWN0ICpzdGF0ZSwgaW50IHdlaWdodEEsIGludCB3ZWlnaHRCKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfcmF0ZWN2KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IG5jaGFubmVsczsKKyAgICBpbnQgaW5yYXRlOworICAgIGludCBvdXRyYXRlOworICAgIFB5T2JqZWN0ICpzdGF0ZTsKKyAgICBpbnQgd2VpZ2h0QSA9IDE7CisgICAgaW50IHdlaWdodEIgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KmlpaWlPfGlpOnJhdGVjdiIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmbmNoYW5uZWxzLCAmaW5yYXRlLCAmb3V0cmF0ZSwgJnN0YXRlLCAmd2VpZ2h0QSwgJndlaWdodEIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9yYXRlY3ZfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIG5jaGFubmVscywgaW5yYXRlLCBvdXRyYXRlLCBzdGF0ZSwgd2VpZ2h0QSwgd2VpZ2h0Qik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2xpbjJ1bGF3X19kb2NfXywKKyJsaW4ydWxhdygkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb252ZXJ0IHNhbXBsZXMgaW4gdGhlIGF1ZGlvIGZyYWdtZW50IHRvIHUtTEFXIGVuY29kaW5nLiIpOworCisjZGVmaW5lIEFVRElPT1BfTElOMlVMQVdfTUVUSE9EREVGICAgIFwKKyAgICB7ImxpbjJ1bGF3IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbGluMnVsYXcsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9saW4ydWxhd19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4ydWxhd19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2xpbjJ1bGF3KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTpsaW4ydWxhdyIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfbGluMnVsYXdfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF91bGF3Mmxpbl9fZG9jX18sCisidWxhdzJsaW4oJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBzb3VuZCBmcmFnbWVudHMgaW4gdS1MQVcgZW5jb2RpbmcgdG8gbGluZWFybHkgZW5jb2RlZCBzb3VuZCBmcmFnbWVudHMuIik7CisKKyNkZWZpbmUgQVVESU9PUF9VTEFXMkxJTl9NRVRIT0RERUYgICAgXAorICAgIHsidWxhdzJsaW4iLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF91bGF3MmxpbiwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3VsYXcybGluX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3VsYXcybGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfdWxhdzJsaW4oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOnVsYXcybGluIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF91bGF3Mmxpbl9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2xpbjJhbGF3X19kb2NfXywKKyJsaW4yYWxhdygkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb252ZXJ0IHNhbXBsZXMgaW4gdGhlIGF1ZGlvIGZyYWdtZW50IHRvIGEtTEFXIGVuY29kaW5nLiIpOworCisjZGVmaW5lIEFVRElPT1BfTElOMkFMQVdfTUVUSE9EREVGICAgIFwKKyAgICB7ImxpbjJhbGF3IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbGluMmFsYXcsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9saW4yYWxhd19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4yYWxhd19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2xpbjJhbGF3KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTpsaW4yYWxhdyIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfbGluMmFsYXdfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9hbGF3Mmxpbl9fZG9jX18sCisiYWxhdzJsaW4oJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBzb3VuZCBmcmFnbWVudHMgaW4gYS1MQVcgZW5jb2RpbmcgdG8gbGluZWFybHkgZW5jb2RlZCBzb3VuZCBmcmFnbWVudHMuIik7CisKKyNkZWZpbmUgQVVESU9PUF9BTEFXMkxJTl9NRVRIT0RERUYgICAgXAorICAgIHsiYWxhdzJsaW4iLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9hbGF3MmxpbiwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2FsYXcybGluX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2FsYXcybGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYWxhdzJsaW4oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOmFsYXcybGluIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9hbGF3Mmxpbl9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2xpbjJhZHBjbV9fZG9jX18sCisibGluMmFkcGNtKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgc3RhdGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb252ZXJ0IHNhbXBsZXMgdG8gNCBiaXQgSW50ZWwvRFZJIEFEUENNIGVuY29kaW5nLiIpOworCisjZGVmaW5lIEFVRElPT1BfTElOMkFEUENNX01FVEhPRERFRiAgICBcCisgICAgeyJsaW4yYWRwY20iLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9saW4yYWRwY20sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9saW4yYWRwY21fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMmFkcGNtX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBQeU9iamVjdCAqc3RhdGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4yYWRwY20oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKyAgICBQeU9iamVjdCAqc3RhdGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaU86bGluMmFkcGNtIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZzdGF0ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2xpbjJhZHBjbV9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgc3RhdGUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9hZHBjbTJsaW5fX2RvY19fLAorImFkcGNtMmxpbigkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIHN0YXRlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRGVjb2RlIGFuIEludGVsL0RWSSBBRFBDTSBjb2RlZCBmcmFnbWVudCB0byBhIGxpbmVhciBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX0FEUENNMkxJTl9NRVRIT0RERUYgICAgXAorICAgIHsiYWRwY20ybGluIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYWRwY20ybGluLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYWRwY20ybGluX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2FkcGNtMmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgUHlPYmplY3QgKnN0YXRlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYWRwY20ybGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgUHlPYmplY3QgKnN0YXRlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KmlPOmFkcGNtMmxpbiIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmc3RhdGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9hZHBjbTJsaW5faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIHN0YXRlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iZTg0MGJiYTVkNDBjMmNlIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL2JpbmFzY2lpLmMuaCBiL01vZHVsZXMvY2xpbmljL2JpbmFzY2lpLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjQ3MTgwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvYmluYXNjaWkuYy5oCkBAIC0wLDAgKzEsNDc4IEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoYmluYXNjaWlfYTJiX3V1X19kb2NfXywKKyJhMmJfdXUoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkRlY29kZSBhIGxpbmUgb2YgdXVlbmNvZGVkIGRhdGEuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQTJCX1VVX01FVEhPRERFRiAgICBcCisgICAgeyJhMmJfdXUiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX3V1LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2EyYl91dV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX3V1X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl91dShQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiTyY6YTJiX3V1IiwKKyAgICAgICAgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYTJiX3V1X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9iMmFfdXVfX2RvY19fLAorImIyYV91dSgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiVXVlbmNvZGUgbGluZSBvZiBkYXRhLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0IyQV9VVV9NRVRIT0RERUYgICAgXAorICAgIHsiYjJhX3V1IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2IyYV91dSwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9iMmFfdXVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV91dV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfdXUoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmIyYV91dSIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2IyYV91dV9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYTJiX2Jhc2U2NF9fZG9jX18sCisiYTJiX2Jhc2U2NCgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRGVjb2RlIGEgbGluZSBvZiBiYXNlNjQgZGF0YS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9BMkJfQkFTRTY0X01FVEhPRERFRiAgICBcCisgICAgeyJhMmJfYmFzZTY0IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2EyYl9iYXNlNjQsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYTJiX2Jhc2U2NF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX2Jhc2U2NF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfYmFzZTY0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPJjphMmJfYmFzZTY0IiwKKyAgICAgICAgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYTJiX2Jhc2U2NF9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYjJhX2Jhc2U2NF9fZG9jX18sCisiYjJhX2Jhc2U2NCgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQmFzZTY0LWNvZGUgbGluZSBvZiBkYXRhLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0IyQV9CQVNFNjRfTUVUSE9EREVGICAgIFwKKyAgICB7ImIyYV9iYXNlNjQiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX2Jhc2U2NCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9iMmFfYmFzZTY0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfYmFzZTY0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV9iYXNlNjQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmIyYV9iYXNlNjQiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9iMmFfYmFzZTY0X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9hMmJfaHF4X19kb2NfXywKKyJhMmJfaHF4KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJEZWNvZGUgLmhxeCBjb2RpbmcuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQTJCX0hRWF9NRVRIT0RERUYgICAgXAorICAgIHsiYTJiX2hxeCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfaHF4LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2EyYl9ocXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl9ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX2hxeChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiTyY6YTJiX2hxeCIsCisgICAgICAgIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2EyYl9ocXhfaW1wbChtb2R1bGUsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX3JsZWNvZGVfaHF4X19kb2NfXywKKyJybGVjb2RlX2hxeCgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQmluaGV4IFJMRS1jb2RlIGJpbmFyeSBkYXRhLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX1JMRUNPREVfSFFYX01FVEhPRERFRiAgICBcCisgICAgeyJybGVjb2RlX2hxeCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9ybGVjb2RlX2hxeCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9ybGVjb2RlX2hxeF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfcmxlY29kZV9ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfcmxlY29kZV9ocXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOnJsZWNvZGVfaHF4IiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfcmxlY29kZV9ocXhfaW1wbChtb2R1bGUsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2IyYV9ocXhfX2RvY19fLAorImIyYV9ocXgoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkVuY29kZSAuaHF4IGRhdGEuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQjJBX0hRWF9NRVRIT0RERUYgICAgXAorICAgIHsiYjJhX2hxeCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9iMmFfaHF4LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2IyYV9ocXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV9ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX2hxeChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSo6YjJhX2hxeCIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2IyYV9ocXhfaW1wbChtb2R1bGUsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX3JsZWRlY29kZV9ocXhfX2RvY19fLAorInJsZWRlY29kZV9ocXgoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkRlY29kZSBoZXhiaW4gUkxFLWNvZGVkIHN0cmluZy4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9STEVERUNPREVfSFFYX01FVEhPRERFRiAgICBcCisgICAgeyJybGVkZWNvZGVfaHF4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX3JsZWRlY29kZV9ocXgsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfcmxlZGVjb2RlX2hxeF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfcmxlZGVjb2RlX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9ybGVkZWNvZGVfaHF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpybGVkZWNvZGVfaHF4IiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfcmxlZGVjb2RlX2hxeF9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfY3JjX2hxeF9fZG9jX18sCisiY3JjX2hxeCgkbW9kdWxlLCBkYXRhLCBjcmMsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb21wdXRlIGhxeCBDUkMgaW5jcmVtZW50YWxseS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9DUkNfSFFYX01FVEhPRERFRiAgICBcCisgICAgeyJjcmNfaHF4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2NyY19ocXgsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfY3JjX2hxeF9fZG9jX199LAorCitzdGF0aWMgaW50CitiaW5hc2NpaV9jcmNfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgY3JjKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2NyY19ocXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IGNyYzsKKyAgICBpbnQgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOmNyY19ocXgiLAorICAgICAgICAmZGF0YSwgJmNyYykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfY3JjX2hxeF9pbXBsKG1vZHVsZSwgJmRhdGEsIGNyYyk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfY3JjMzJfX2RvY19fLAorImNyYzMyKCRtb2R1bGUsIGRhdGEsIGNyYz0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29tcHV0ZSBDUkMtMzIgaW5jcmVtZW50YWxseS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9DUkMzMl9NRVRIT0RERUYgICAgXAorICAgIHsiY3JjMzIiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfY3JjMzIsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfY3JjMzJfX2RvY19ffSwKKworc3RhdGljIHVuc2lnbmVkIGludAorYmluYXNjaWlfY3JjMzJfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCBjcmMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfY3JjMzIoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgdW5zaWduZWQgaW50IGNyYyA9IDA7CisgICAgdW5zaWduZWQgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqfEk6Y3JjMzIiLAorICAgICAgICAmZGF0YSwgJmNyYykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfY3JjMzJfaW1wbChtb2R1bGUsICZkYXRhLCBjcmMpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYjJhX2hleF9fZG9jX18sCisiYjJhX2hleCgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiSGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYmluYXJ5IGRhdGEuXG4iCisiXG4iCisiVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdC4gIFRoaXMgZnVuY3Rpb24gaXMgYWxzb1xuIgorImF2YWlsYWJsZSBhcyBcImhleGxpZnkoKVwiLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0IyQV9IRVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImIyYV9oZXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX2hleCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9iMmFfaGV4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfaGV4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV9oZXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmIyYV9oZXgiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9iMmFfaGV4X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9hMmJfaGV4X19kb2NfXywKKyJhMmJfaGV4KCRtb2R1bGUsIGhleHN0ciwgLylcbiIKKyItLVxuIgorIlxuIgorIkJpbmFyeSBkYXRhIG9mIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLlxuIgorIlxuIgorImhleHN0ciBtdXN0IGNvbnRhaW4gYW4gZXZlbiBudW1iZXIgb2YgaGV4IGRpZ2l0cyAodXBwZXIgb3IgbG93ZXIgY2FzZSkuXG4iCisiVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBhcyBcInVuaGV4bGlmeSgpXCIuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQTJCX0hFWF9NRVRIT0RERUYgICAgXAorICAgIHsiYTJiX2hleCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfaGV4LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2EyYl9oZXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl9oZXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmhleHN0cik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfaGV4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBoZXhzdHIgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8mOmEyYl9oZXgiLAorICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmaGV4c3RyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2EyYl9oZXhfaW1wbChtb2R1bGUsICZoZXhzdHIpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGhleHN0ciAqLworICAgIGlmIChoZXhzdHIub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmhleHN0cik7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYTJiX3FwX19kb2NfXywKKyJhMmJfcXAoJG1vZHVsZSwgLywgZGF0YSwgaGVhZGVyPUZhbHNlKVxuIgorIi0tXG4iCisiXG4iCisiRGVjb2RlIGEgc3RyaW5nIG9mIHFwLWVuY29kZWQgZGF0YS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9BMkJfUVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImEyYl9xcCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfcXAsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBiaW5hc2NpaV9hMmJfcXBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl9xcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IGhlYWRlcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfcXAoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJkYXRhIiwgImhlYWRlciIsIE5VTEx9OworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIGludCBoZWFkZXIgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiTyZ8aTphMmJfcXAiLCBfa2V5d29yZHMsCisgICAgICAgIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZkYXRhLCAmaGVhZGVyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2EyYl9xcF9pbXBsKG1vZHVsZSwgJmRhdGEsIGhlYWRlcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9iMmFfcXBfX2RvY19fLAorImIyYV9xcCgkbW9kdWxlLCAvLCBkYXRhLCBxdW90ZXRhYnM9RmFsc2UsIGlzdGV4dD1UcnVlLCBoZWFkZXI9RmFsc2UpXG4iCisiLS1cbiIKKyJcbiIKKyJFbmNvZGUgYSBzdHJpbmcgdXNpbmcgcXVvdGVkLXByaW50YWJsZSBlbmNvZGluZy5cbiIKKyJcbiIKKyJPbiBlbmNvZGluZywgd2hlbiBpc3RleHQgaXMgc2V0LCBuZXdsaW5lcyBhcmUgbm90IGVuY29kZWQsIGFuZCB3aGl0ZVxuIgorInNwYWNlIGF0IGVuZCBvZiBsaW5lcyBpcy4gIFdoZW4gaXN0ZXh0IGlzIG5vdCBzZXQsIFxcciBhbmQgXFxuIChDUi9MRilcbiIKKyJhcmUgYm90aCBlbmNvZGVkLiAgV2hlbiBxdW90ZXRhYnMgaXMgc2V0LCBzcGFjZSBhbmQgdGFicyBhcmUgZW5jb2RlZC4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9CMkFfUVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImIyYV9xcCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9iMmFfcXAsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBiaW5hc2NpaV9iMmFfcXBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV9xcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IHF1b3RldGFicywgaW50IGlzdGV4dCwgaW50IGhlYWRlcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfcXAoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJkYXRhIiwgInF1b3RldGFicyIsICJpc3RleHQiLCAiaGVhZGVyIiwgTlVMTH07CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHF1b3RldGFicyA9IDA7CisgICAgaW50IGlzdGV4dCA9IDE7CisgICAgaW50IGhlYWRlciA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJ5KnxpaWk6YjJhX3FwIiwgX2tleXdvcmRzLAorICAgICAgICAmZGF0YSwgJnF1b3RldGFicywgJmlzdGV4dCwgJmhlYWRlcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9iMmFfcXBfaW1wbChtb2R1bGUsICZkYXRhLCBxdW90ZXRhYnMsIGlzdGV4dCwgaGVhZGVyKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02OGUyYmNjNjk1NmI2MjEzIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL3psaWJtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvemxpYm1vZHVsZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0YTgwNQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL3psaWJtb2R1bGUuYy5oCkBAIC0wLDAgKzEsNDUzIEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoemxpYl9jb21wcmVzc19fZG9jX18sCisiY29tcHJlc3MoJG1vZHVsZSwgYnl0ZXMsIGxldmVsPVpfREVGQVVMVF9DT01QUkVTU0lPTiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBjb21wcmVzc2VkIGRhdGEuXG4iCisiXG4iCisiICBieXRlc1xuIgorIiAgICBCaW5hcnkgZGF0YSB0byBiZSBjb21wcmVzc2VkLlxuIgorIiAgbGV2ZWxcbiIKKyIgICAgQ29tcHJlc3Npb24gbGV2ZWwsIGluIDAtOS4iKTsKKworI2RlZmluZSBaTElCX0NPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJjb21wcmVzcyIsIChQeUNGdW5jdGlvbil6bGliX2NvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIHpsaWJfY29tcHJlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfY29tcHJlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmJ5dGVzLCBpbnQgbGV2ZWwpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9jb21wcmVzcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgYnl0ZXMgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IGxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxpOmNvbXByZXNzIiwKKyAgICAgICAgJmJ5dGVzLCAmbGV2ZWwpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9jb21wcmVzc19pbXBsKG1vZHVsZSwgJmJ5dGVzLCBsZXZlbCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgYnl0ZXMgKi8KKyAgICBpZiAoYnl0ZXMub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ5dGVzKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX2RlY29tcHJlc3NfX2RvY19fLAorImRlY29tcHJlc3MoJG1vZHVsZSwgZGF0YSwgd2JpdHM9TUFYX1dCSVRTLCBidWZzaXplPURFRl9CVUZfU0laRSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgdW5jb21wcmVzc2VkIGRhdGEuXG4iCisiXG4iCisiICBkYXRhXG4iCisiICAgIENvbXByZXNzZWQgZGF0YS5cbiIKKyIgIHdiaXRzXG4iCisiICAgIFRoZSB3aW5kb3cgYnVmZmVyIHNpemUuXG4iCisiICBidWZzaXplXG4iCisiICAgIFRoZSBpbml0aWFsIG91dHB1dCBidWZmZXIgc2l6ZS4iKTsKKworI2RlZmluZSBaTElCX0RFQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pemxpYl9kZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIHpsaWJfZGVjb21wcmVzc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9kZWNvbXByZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgd2JpdHMsIHVuc2lnbmVkIGludCBidWZzaXplKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2JpdHMgPSBNQVhfV0JJVFM7CisgICAgdW5zaWduZWQgaW50IGJ1ZnNpemUgPSBERUZfQlVGX1NJWkU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqfGlPJjpkZWNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEsICZ3Yml0cywgdWludF9jb252ZXJ0ZXIsICZidWZzaXplKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfZGVjb21wcmVzc19pbXBsKG1vZHVsZSwgJmRhdGEsIHdiaXRzLCBidWZzaXplKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHpsaWJfY29tcHJlc3NvYmpfX2RvY19fLAorImNvbXByZXNzb2JqKCRtb2R1bGUsIC8sIGxldmVsPVpfREVGQVVMVF9DT01QUkVTU0lPTiwgbWV0aG9kPURFRkxBVEVELFxuIgorIiAgICAgICAgICAgIHdiaXRzPU1BWF9XQklUUywgbWVtTGV2ZWw9REVGX01FTV9MRVZFTCxcbiIKKyIgICAgICAgICAgICBzdHJhdGVneT1aX0RFRkFVTFRfU1RSQVRFR1ksIHpkaWN0PU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBjb21wcmVzc29yIG9iamVjdC5cbiIKKyJcbiIKKyIgIGxldmVsXG4iCisiICAgIFRoZSBjb21wcmVzc2lvbiBsZXZlbCAoYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC05OyBkZWZhdWx0IGlzIDYpLlxuIgorIiAgICBIaWdoZXIgY29tcHJlc3Npb24gbGV2ZWxzIGFyZSBzbG93ZXIsIGJ1dCBwcm9kdWNlIHNtYWxsZXIgcmVzdWx0cy5cbiIKKyIgIG1ldGhvZFxuIgorIiAgICBUaGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgSWYgZ2l2ZW4sIHRoaXMgbXVzdCBiZSBERUZMQVRFRC5cbiIKKyIgIHdiaXRzXG4iCisiICAgIFRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplIChyYW5nZTogOC4uMTUpLlxuIgorIiAgbWVtTGV2ZWxcbiIKKyIgICAgQ29udHJvbHMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBmb3IgaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuXG4iCisiICAgIFZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDEgdG8gOS4gIEhpZ2hlciB2YWx1ZXMgcmVzdWx0IGluIGhpZ2hlciBtZW1vcnlcbiIKKyIgICAgdXNhZ2UsIGZhc3RlciBjb21wcmVzc2lvbiwgYW5kIHNtYWxsZXIgb3V0cHV0LlxuIgorIiAgc3RyYXRlZ3lcbiIKKyIgICAgVXNlZCB0byB0dW5lIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uICBQb3NzaWJsZSB2YWx1ZXMgYXJlXG4iCisiICAgIFpfREVGQVVMVF9TVFJBVEVHWSwgWl9GSUxURVJFRCwgYW5kIFpfSFVGRk1BTl9PTkxZLlxuIgorIiAgemRpY3RcbiIKKyIgICAgVGhlIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyeSAtIGEgc2VxdWVuY2Ugb2YgYnl0ZXNcbiIKKyIgICAgY29udGFpbmluZyBzdWJzZXF1ZW5jZXMgdGhhdCBhcmUgbGlrZWx5IHRvIG9jY3VyIGluIHRoZSBpbnB1dCBkYXRhLiIpOworCisjZGVmaW5lIFpMSUJfQ09NUFJFU1NPQkpfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvbXByZXNzb2JqIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfY29tcHJlc3NvYmosIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCB6bGliX2NvbXByZXNzb2JqX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NvbXByZXNzb2JqX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGxldmVsLCBpbnQgbWV0aG9kLCBpbnQgd2JpdHMsIGludCBtZW1MZXZlbCwgaW50IHN0cmF0ZWd5LCBQeV9idWZmZXIgKnpkaWN0KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfY29tcHJlc3NvYmooUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJsZXZlbCIsICJtZXRob2QiLCAid2JpdHMiLCAibWVtTGV2ZWwiLCAic3RyYXRlZ3kiLCAiemRpY3QiLCBOVUxMfTsKKyAgICBpbnQgbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisgICAgaW50IG1ldGhvZCA9IERFRkxBVEVEOworICAgIGludCB3Yml0cyA9IE1BWF9XQklUUzsKKyAgICBpbnQgbWVtTGV2ZWwgPSBERUZfTUVNX0xFVkVMOworICAgIGludCBzdHJhdGVneSA9IFpfREVGQVVMVF9TVFJBVEVHWTsKKyAgICBQeV9idWZmZXIgemRpY3QgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJ8aWlpaWl5Kjpjb21wcmVzc29iaiIsIF9rZXl3b3JkcywKKyAgICAgICAgJmxldmVsLCAmbWV0aG9kLCAmd2JpdHMsICZtZW1MZXZlbCwgJnN0cmF0ZWd5LCAmemRpY3QpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9jb21wcmVzc29ial9pbXBsKG1vZHVsZSwgbGV2ZWwsIG1ldGhvZCwgd2JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwgJnpkaWN0KTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciB6ZGljdCAqLworICAgIGlmICh6ZGljdC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmemRpY3QpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHpsaWJfZGVjb21wcmVzc29ial9fZG9jX18sCisiZGVjb21wcmVzc29iaigkbW9kdWxlLCAvLCB3Yml0cz1NQVhfV0JJVFMsIHpkaWN0PWJcJ1wnKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZGVjb21wcmVzc29yIG9iamVjdC5cbiIKKyJcbiIKKyIgIHdiaXRzXG4iCisiICAgIFRoZSB3aW5kb3cgYnVmZmVyIHNpemUuXG4iCisiICB6ZGljdFxuIgorIiAgICBUaGUgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LiAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lXG4iCisiICAgIGRpY3Rpb25hcnkgYXMgdXNlZCBieSB0aGUgY29tcHJlc3NvciB0aGF0IHByb2R1Y2VkIHRoZSBpbnB1dCBkYXRhLiIpOworCisjZGVmaW5lIFpMSUJfREVDT01QUkVTU09CSl9NRVRIT0RERUYgICAgXAorICAgIHsiZGVjb21wcmVzc29iaiIsIChQeUNGdW5jdGlvbil6bGliX2RlY29tcHJlc3NvYmosIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCB6bGliX2RlY29tcHJlc3NvYmpfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzc29ial9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCB3Yml0cywgUHlPYmplY3QgKnpkaWN0KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzc29iaihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7IndiaXRzIiwgInpkaWN0IiwgTlVMTH07CisgICAgaW50IHdiaXRzID0gTUFYX1dCSVRTOworICAgIFB5T2JqZWN0ICp6ZGljdCA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJ8aU86ZGVjb21wcmVzc29iaiIsIF9rZXl3b3JkcywKKyAgICAgICAgJndiaXRzLCAmemRpY3QpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9kZWNvbXByZXNzb2JqX2ltcGwobW9kdWxlLCB3Yml0cywgemRpY3QpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX0NvbXByZXNzX2NvbXByZXNzX19kb2NfXywKKyJjb21wcmVzcygkc2VsZiwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBjb21wcmVzc2VkIGRhdGEuXG4iCisiXG4iCisiICBkYXRhXG4iCisiICAgIEJpbmFyeSBkYXRhIHRvIGJlIGNvbXByZXNzZWQuXG4iCisiXG4iCisiQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzb21lIG9mIHRoZSBpbnB1dCBkYXRhIG1heSBzdGlsbFxuIgorImJlIHN0b3JlZCBpbiBpbnRlcm5hbCBidWZmZXJzIGZvciBsYXRlciBwcm9jZXNzaW5nLlxuIgorIkNhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuIik7CisKKyNkZWZpbmUgWkxJQl9DT01QUkVTU19DT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pemxpYl9Db21wcmVzc19jb21wcmVzcywgTUVUSF9WQVJBUkdTLCB6bGliX0NvbXByZXNzX2NvbXByZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0NvbXByZXNzX2NvbXByZXNzX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfQ29tcHJlc3NfY29tcHJlc3MoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9Db21wcmVzc19jb21wcmVzc19pbXBsKHNlbGYsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX19kb2NfXywKKyJkZWNvbXByZXNzKCRzZWxmLCBkYXRhLCBtYXhfbGVuZ3RoPTAsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIGRhdGEuXG4iCisiXG4iCisiICBkYXRhXG4iCisiICAgIFRoZSBiaW5hcnkgZGF0YSB0byBkZWNvbXByZXNzLlxuIgorIiAgbWF4X2xlbmd0aFxuIgorIiAgICBUaGUgbWF4aW11bSBhbGxvd2FibGUgbGVuZ3RoIG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YS5cbiIKKyIgICAgVW5jb25zdW1lZCBpbnB1dCBkYXRhIHdpbGwgYmUgc3RvcmVkIGluXG4iCisiICAgIHRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLlxuIgorIlxuIgorIkFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc29tZSBvZiB0aGUgaW5wdXQgZGF0YSBtYXkgc3RpbGwgYmUgc3RvcmVkIGluXG4iCisiaW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy5cbiIKKyJDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLiIpOworCisjZGVmaW5lIFpMSUJfREVDT01QUkVTU19ERUNPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIHpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19pbXBsKGNvbXBvYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IG1heF9sZW5ndGgpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3MoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgdW5zaWduZWQgaW50IG1heF9sZW5ndGggPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxPJjpkZWNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEsIHVpbnRfY29udmVydGVyLCAmbWF4X2xlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19pbXBsKHNlbGYsICZkYXRhLCBtYXhfbGVuZ3RoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHpsaWJfQ29tcHJlc3NfZmx1c2hfX2RvY19fLAorImZsdXNoKCRzZWxmLCBtb2RlPXpsaWIuWl9GSU5JU0gsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBhbnkgcmVtYWluaW5nIGNvbXByZXNzZWQgZGF0YS5cbiIKKyJcbiIKKyIgIG1vZGVcbiIKKyIgICAgT25lIG9mIHRoZSBjb25zdGFudHMgWl9TWU5DX0ZMVVNILCBaX0ZVTExfRkxVU0gsIFpfRklOSVNILlxuIgorIiAgICBJZiBtb2RlID09IFpfRklOSVNILCB0aGUgY29tcHJlc3NvciBvYmplY3QgY2FuIG5vIGxvbmdlciBiZVxuIgorIiAgICB1c2VkIGFmdGVyIGNhbGxpbmcgdGhlIGZsdXNoKCkgbWV0aG9kLiAgT3RoZXJ3aXNlLCBtb3JlIGRhdGFcbiIKKyIgICAgY2FuIHN0aWxsIGJlIGNvbXByZXNzZWQuIik7CisKKyNkZWZpbmUgWkxJQl9DT01QUkVTU19GTFVTSF9NRVRIT0RERUYgICAgXAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pemxpYl9Db21wcmVzc19mbHVzaCwgTUVUSF9WQVJBUkdTLCB6bGliX0NvbXByZXNzX2ZsdXNoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0NvbXByZXNzX2ZsdXNoX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgaW50IG1vZGUpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9Db21wcmVzc19mbHVzaChjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgbW9kZSA9IFpfRklOSVNIOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ8aTpmbHVzaCIsCisgICAgICAgICZtb2RlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfQ29tcHJlc3NfZmx1c2hfaW1wbChzZWxmLCBtb2RlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWYgZGVmaW5lZChIQVZFX1pMSUJfQ09QWSkKKworUHlEb2NfU1RSVkFSKHpsaWJfQ29tcHJlc3NfY29weV9fZG9jX18sCisiY29weSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4iKTsKKworI2RlZmluZSBaTElCX0NPTVBSRVNTX0NPUFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvcHkiLCAoUHlDRnVuY3Rpb24pemxpYl9Db21wcmVzc19jb3B5LCBNRVRIX05PQVJHUywgemxpYl9Db21wcmVzc19jb3B5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0NvbXByZXNzX2NvcHlfaW1wbChjb21wb2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfQ29tcHJlc3NfY29weShjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiB6bGliX0NvbXByZXNzX2NvcHlfaW1wbChzZWxmKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9aTElCX0NPUFkpICovCisKKyNpZm5kZWYgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRgorICAgICNkZWZpbmUgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfWkxJQl9DT1BZKQorCitQeURvY19TVFJWQVIoemxpYl9EZWNvbXByZXNzX2NvcHlfX2RvY19fLAorImNvcHkoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBjb3B5IG9mIHRoZSBkZWNvbXByZXNzaW9uIG9iamVjdC4iKTsKKworI2RlZmluZSBaTElCX0RFQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYgICAgXAorICAgIHsiY29weSIsIChQeUNGdW5jdGlvbil6bGliX0RlY29tcHJlc3NfY29weSwgTUVUSF9OT0FSR1MsIHpsaWJfRGVjb21wcmVzc19jb3B5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0RlY29tcHJlc3NfY29weV9pbXBsKGNvbXBvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2NvcHkoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gemxpYl9EZWNvbXByZXNzX2NvcHlfaW1wbChzZWxmKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9aTElCX0NPUFkpICovCisKKyNpZm5kZWYgWkxJQl9ERUNPTVBSRVNTX0NPUFlfTUVUSE9EREVGCisgICAgI2RlZmluZSBaTElCX0RFQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChaTElCX0RFQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYpICovCisKK1B5RG9jX1NUUlZBUih6bGliX0RlY29tcHJlc3NfZmx1c2hfX2RvY19fLAorImZsdXNoKCRzZWxmLCBsZW5ndGg9emxpYi5ERUZfQlVGX1NJWkUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBhbnkgcmVtYWluaW5nIGRlY29tcHJlc3NlZCBkYXRhLlxuIgorIlxuIgorIiAgbGVuZ3RoXG4iCisiICAgIHRoZSBpbml0aWFsIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuIik7CisKKyNkZWZpbmUgWkxJQl9ERUNPTVBSRVNTX0ZMVVNIX01FVEhPRERFRiAgICBcCisgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbil6bGliX0RlY29tcHJlc3NfZmx1c2gsIE1FVEhfVkFSQVJHUywgemxpYl9EZWNvbXByZXNzX2ZsdXNoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0RlY29tcHJlc3NfZmx1c2hfaW1wbChjb21wb2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfRGVjb21wcmVzc19mbHVzaChjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gREVGX0JVRl9TSVpFOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ8TyY6Zmx1c2giLAorICAgICAgICB1aW50X2NvbnZlcnRlciwgJmxlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX0RlY29tcHJlc3NfZmx1c2hfaW1wbChzZWxmLCBsZW5ndGgpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX2FkbGVyMzJfX2RvY19fLAorImFkbGVyMzIoJG1vZHVsZSwgZGF0YSwgdmFsdWU9MSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbXB1dGUgYW4gQWRsZXItMzIgY2hlY2tzdW0gb2YgZGF0YS5cbiIKKyJcbiIKKyIgIHZhbHVlXG4iCisiICAgIFN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBjaGVja3N1bS5cbiIKKyJcbiIKKyJUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXMgYW4gaW50ZWdlci4iKTsKKworI2RlZmluZSBaTElCX0FETEVSMzJfTUVUSE9EREVGICAgIFwKKyAgICB7ImFkbGVyMzIiLCAoUHlDRnVuY3Rpb24pemxpYl9hZGxlcjMyLCBNRVRIX1ZBUkFSR1MsIHpsaWJfYWRsZXIzMl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9hZGxlcjMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9hZGxlcjMyKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIHVuc2lnbmVkIGludCB2YWx1ZSA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqfEk6YWRsZXIzMiIsCisgICAgICAgICZkYXRhLCAmdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9hZGxlcjMyX2ltcGwobW9kdWxlLCAmZGF0YSwgdmFsdWUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoemxpYl9jcmMzMl9fZG9jX18sCisiY3JjMzIoJG1vZHVsZSwgZGF0YSwgdmFsdWU9MCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbXB1dGUgYSBDUkMtMzIgY2hlY2tzdW0gb2YgZGF0YS5cbiIKKyJcbiIKKyIgIHZhbHVlXG4iCisiICAgIFN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBjaGVja3N1bS5cbiIKKyJcbiIKKyJUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXMgYW4gaW50ZWdlci4iKTsKKworI2RlZmluZSBaTElCX0NSQzMyX01FVEhPRERFRiAgICBcCisgICAgeyJjcmMzMiIsIChQeUNGdW5jdGlvbil6bGliX2NyYzMyLCBNRVRIX1ZBUkFSR1MsIHpsaWJfY3JjMzJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfY3JjMzJfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCB2YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NyYzMyKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIHVuc2lnbmVkIGludCB2YWx1ZSA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqfEk6Y3JjMzIiLAorICAgICAgICAmZGF0YSwgJnZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfY3JjMzJfaW1wbChtb2R1bGUsICZkYXRhLCB2YWx1ZSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmM5NDczNzIxY2E3Yzk2MiBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NtYXRobW9kdWxlLmMgYi9Nb2R1bGVzL2NtYXRobW9kdWxlLmMKaW5kZXggMzZiZjRhMS4uOTFiMzY5YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jbWF0aG1vZHVsZS5jCisrKyBiL01vZHVsZXMvY21hdGhtb2R1bGUuYwpAQCAtMTA2MCw3ICsxMDYwLDcgQEAKIGNtYXRoX2lzaW5mKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9jb21wbGV4IHo7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJEOmlzbmFuIiwgJnopKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiRDppc2luZiIsICZ6KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhQeV9JU19JTkZJTklUWSh6LnJlYWwpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9JU19JTkZJTklUWSh6LmltYWcpKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvZXhwYXQveG1scGFyc2UuYyBiL01vZHVsZXMvZXhwYXQveG1scGFyc2UuYwppbmRleCBmMzVhYTM2Li4wYWMwMzE3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMKKysrIGIvTW9kdWxlcy9leHBhdC94bWxwYXJzZS5jCkBAIC0yLDEyICsyLDYgQEAKICAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCiAqLwogCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgICAgICAgICAgICAgLyogbWVtc2V0KCksIG1lbWNweSgpICovCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+ICAgICAgICAgICAgICAgICAgICAgLyogVUlOVF9NQVggKi8KLSNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lKCkgKi8KLQogI2RlZmluZSBYTUxfQlVJTERJTkdfRVhQQVQgMQogCiAjaWZkZWYgQ09NUElMRURfRlJPTV9EU1AKQEAgLTIyLDYgKzE2LDEyIEBACiAjaW5jbHVkZSA8ZXhwYXRfY29uZmlnLmg+CiAjZW5kaWYgLyogbmRlZiBDT01QSUxFRF9GUk9NX0RTUCAqLwogCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgICAgICAgICAgICAgICAgLyogbWVtc2V0KCksIG1lbWNweSgpICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+ICAgICAgICAgICAgICAgICAgICAgLyogVUlOVF9NQVggKi8KKyNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lKCkgKi8KKwogI2luY2x1ZGUgImFzY2lpLmgiCiAjaW5jbHVkZSAiZXhwYXQuaCIKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9leHBhdC94bWxyb2xlLmMgYi9Nb2R1bGVzL2V4cGF0L3htbHJvbGUuYwppbmRleCA0NDc3MmUyLi45YThmODVkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2V4cGF0L3htbHJvbGUuYworKysgYi9Nb2R1bGVzL2V4cGF0L3htbHJvbGUuYwpAQCAtMiw4ICsyLDYgQEAKICAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCiAqLwogCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KICNpZmRlZiBDT01QSUxFRF9GUk9NX0RTUAogI2luY2x1ZGUgIndpbmNvbmZpZy5oIgogI2VsaWYgZGVmaW5lZChNQUNPU19DTEFTU0lDKQpAQCAtMTgsNiArMTYsOCBAQAogI2VuZGlmCiAjZW5kaWYgLyogbmRlZiBDT01QSUxFRF9GUk9NX0RTUCAqLwogCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKICNpbmNsdWRlICJleHBhdF9leHRlcm5hbC5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAieG1scm9sZS5oIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9leHBhdC94bWx0b2suYyBiL01vZHVsZXMvZXhwYXQveG1sdG9rLmMKaW5kZXggYjljZDdhNC4uZmQ2YmY3YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9leHBhdC94bWx0b2suYworKysgYi9Nb2R1bGVzL2V4cGF0L3htbHRvay5jCkBAIC0yLDggKzIsNiBAQAogICAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcgcGVybWlzc2lvbi4KICovCiAKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQogI2lmZGVmIENPTVBJTEVEX0ZST01fRFNQCiAjaW5jbHVkZSAid2luY29uZmlnLmgiCiAjZWxpZiBkZWZpbmVkKE1BQ09TX0NMQVNTSUMpCkBAIC0xOCw2ICsxNiw4IEBACiAjZW5kaWYKICNlbmRpZiAvKiBuZGVmIENPTVBJTEVEX0ZST01fRFNQICovCiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogI2luY2x1ZGUgImV4cGF0X2V4dGVybmFsLmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJ4bWx0b2suaCIKZGlmZiAtLWdpdCBhL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMgYi9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jCmluZGV4IDY4MGY2MzAuLmZmZjk2MGYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMKKysrIGIvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYwpAQCAtMjIsNyArMjIsMTQgQEAKICMgIGRlZmluZSBGQVVMVEhBTkRMRVJfVVNFUgogI2VuZGlmCiAKLSNkZWZpbmUgUFVUUyhmZCwgc3RyKSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSkKKy8qIGNhc3Qgc2l6ZV90IHRvIGludCBiZWNhdXNlIHdyaXRlKCkgdGFrZXMgYW4gaW50IG9uIFdpbmRvd3MKKyAgIChhbnl3YXksIHRoZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIDMwIGNoYXJhY3RlcnMpICovCisjZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgKGludClzdHJsZW4oc3RyKSkKKworX1B5X0lERU5USUZJRVIoZW5hYmxlKTsKK19QeV9JREVOVElGSUVSKGZpbGVubyk7CitfUHlfSURFTlRJRklFUihmbHVzaCk7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOwogCiAjaWZkZWYgSEFWRV9TSUdBQ1RJT04KIHR5cGVkZWYgc3RydWN0IHNpZ2FjdGlvbiBfUHlfc2lnaGFuZGxlcl90OwpAQCAtNzksOSArODYsNiBAQAogc3RhdGljIHVzZXJfc2lnbmFsX3QgKnVzZXJfc2lnbmFsczsKIAogLyogdGhlIGZvbGxvd2luZyBtYWNyb3MgY29tZSBmcm9tIFB5dGhvbjogTW9kdWxlcy9zaWduYWxtb2R1bGUuYyAqLwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotI2RlZmluZSBOU0lHIDEyCi0jZW5kaWYKICNpZm5kZWYgTlNJRwogIyBpZiBkZWZpbmVkKF9OU0lHKQogIyAgZGVmaW5lIE5TSUcgX05TSUcgICAgICAgICAgICAvKiBGb3IgQlNEL1N5c1YgKi8KQEAgLTEzMSwxMyArMTM1LDExIEBACiBmYXVsdGhhbmRsZXJfZ2V0X2ZpbGVubyhQeU9iamVjdCAqZmlsZSwgaW50ICpwX2ZkKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgX1B5X0lERU5USUZJRVIoZmlsZW5vKTsKLSAgICBfUHlfSURFTlRJRklFUihmbHVzaCk7CiAgICAgbG9uZyBmZF9sb25nOwogICAgIGludCBmZDsKIAogICAgIGlmIChmaWxlID09IE5VTEwgfHwgZmlsZSA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgICAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgICAgIGlmIChmaWxlID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5zdGRlcnIiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDQ4LDcgKzQ1MCw3IEBACiAgICAgICAgIC8qIGdldCB0aGUgdGhyZWFkIGhvbGRpbmcgdGhlIEdJTCwgTlVMTCBpZiBubyB0aHJlYWQgaG9sZCB0aGUgR0lMICovCiAgICAgICAgIGN1cnJlbnQgPSBfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CiAKLSAgICAgICAgd3JpdGUodGhyZWFkLmZkLCB0aHJlYWQuaGVhZGVyLCB0aHJlYWQuaGVhZGVyX2xlbik7CisgICAgICAgIHdyaXRlKHRocmVhZC5mZCwgdGhyZWFkLmhlYWRlciwgKGludCl0aHJlYWQuaGVhZGVyX2xlbik7CiAKICAgICAgICAgZXJybXNnID0gX1B5X0R1bXBUcmFjZWJhY2tUaHJlYWRzKHRocmVhZC5mZCwgdGhyZWFkLmludGVycCwgY3VycmVudCk7CiAgICAgICAgIG9rID0gKGVycm1zZyA9PSBOVUxMKTsKQEAgLTQ3Niw3ICs0NzgsNyBAQAogCiAgICAgUHlfQ0xFQVIodGhyZWFkLmZpbGUpOwogICAgIGlmICh0aHJlYWQuaGVhZGVyKSB7Ci0gICAgICAgIGZyZWUodGhyZWFkLmhlYWRlcik7CisgICAgICAgIFB5TWVtX0ZyZWUodGhyZWFkLmhlYWRlcik7CiAgICAgICAgIHRocmVhZC5oZWFkZXIgPSBOVUxMOwogICAgIH0KIH0KQEAgLTUwNSw3ICs1MDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICJUaW1lb3V0ICglbHU6JTAybHU6JTAybHUpIVxuIiwKICAgICAgICAgICAgICAgICAgICAgICBob3VyLCBtaW4sIHNlYyk7CiAKLSAgICByZXR1cm4gc3RyZHVwKGJ1ZmZlcik7CisgICAgcmV0dXJuIF9QeU1lbV9TdHJkdXAoYnVmZmVyKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtNTcxLDcgKzU3Myw3IEBACiAgICAgaWYgKFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQoZmF1bHRoYW5kbGVyX3RocmVhZCwgTlVMTCkgPT0gLTEpIHsKICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRocmVhZC5ydW5uaW5nKTsKICAgICAgICAgUHlfQ0xFQVIodGhyZWFkLmZpbGUpOwotICAgICAgICBmcmVlKGhlYWRlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoaGVhZGVyKTsKICAgICAgICAgdGhyZWFkLmhlYWRlciA9IE5VTEw7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIHN0YXJ0IHdhdGNoZG9nIHRocmVhZCIpOwpAQCAtNzMwLDkgKzczMiwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICh1c2VyX3NpZ25hbHMgPT0gTlVMTCkgewotICAgICAgICB1c2VyX3NpZ25hbHMgPSBjYWxsb2MoTlNJRywgc2l6ZW9mKHVzZXJfc2lnbmFsX3QpKTsKKyAgICAgICAgdXNlcl9zaWduYWxzID0gUHlNZW1fTWFsbG9jKE5TSUcgKiBzaXplb2YodXNlcl9zaWduYWxfdCkpOwogICAgICAgICBpZiAodXNlcl9zaWduYWxzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgbWVtc2V0KHVzZXJfc2lnbmFscywgMCwgTlNJRyAqIHNpemVvZih1c2VyX3NpZ25hbF90KSk7CiAgICAgfQogICAgIHVzZXIgPSAmdXNlcl9zaWduYWxzW3NpZ251bV07CiAKQEAgLTEwNDcsOSArMTA1MCwxMSBAQAogZmF1bHRoYW5kbGVyX2Vudl9vcHRpb25zKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKnhvcHRpb25zLCAqa2V5LCAqbW9kdWxlLCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKGVuYWJsZSk7CisgICAgY2hhciAqcDsKIAotICAgIGlmICghUHlfR0VURU5WKCJQWVRIT05GQVVMVEhBTkRMRVIiKSkgeworICAgIGlmICghKChwID0gUHlfR0VURU5WKCJQWVRIT05GQVVMVEhBTkRMRVIiKSkgJiYgKnAgIT0gJ1wwJykpIHsKKyAgICAgICAgLyogUFlUSE9ORkFVTFRIQU5ETEVSIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG1pc3NpbmcKKyAgICAgICAgICAgb3IgYW4gZW1wdHkgc3RyaW5nICovCiAgICAgICAgIGludCBoYXNfa2V5OwogCiAgICAgICAgIHhvcHRpb25zID0gUHlTeXNfR2V0WE9wdGlvbnMoKTsKQEAgLTExMzcsNyArMTE0Miw3IEBACiAgICAgaWYgKHVzZXJfc2lnbmFscyAhPSBOVUxMKSB7CiAgICAgICAgIGZvciAoc2lnbnVtPTA7IHNpZ251bSA8IE5TSUc7IHNpZ251bSsrKQogICAgICAgICAgICAgZmF1bHRoYW5kbGVyX3VucmVnaXN0ZXIoJnVzZXJfc2lnbmFsc1tzaWdudW1dLCBzaWdudW0pOwotICAgICAgICBmcmVlKHVzZXJfc2lnbmFscyk7CisgICAgICAgIFB5TWVtX0ZyZWUodXNlcl9zaWduYWxzKTsKICAgICAgICAgdXNlcl9zaWduYWxzID0gTlVMTDsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvZmNudGxtb2R1bGUuYyBiL01vZHVsZXMvZmNudGxtb2R1bGUuYwppbmRleCA2NzY5MDk4Li5jZjBhYzE5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9mY250bG1vZHVsZS5jCkBAIC0yMDgsMTEgKzIwOCw3IEBACiAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmZGVmIF9fVk1TCi0gICAgcmV0ID0gaW9jdGwoZmQsIGNvZGUsICh2b2lkICopYXJnKTsKLSNlbHNlCiAgICAgcmV0ID0gaW9jdGwoZmQsIGNvZGUsIGFyZyk7Ci0jZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKQEAgLTMyNywxMSArMzIzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbm9iaiwgJnN0YXJ0b2JqLCAmd2hlbmNlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAotICAgICAgICAgICAgICAgICAgICAibG9ja2Ygbm90IHN1cHBvcnRlZCBvbiBPUy8yIChFTVgpIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0jZWxzZQogI2lmbmRlZiBMT0NLX1NICiAjZGVmaW5lIExPQ0tfU0ggICAgICAgICAxICAgICAgIC8qIHNoYXJlZCBsb2NrICovCiAjZGVmaW5lIExPQ0tfRVggICAgICAgICAyICAgICAgIC8qIGV4Y2x1c2l2ZSBsb2NrICovCkBAIC0zODUsNyArMzc2LDYgQEAKICAgICB9CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwotI2VuZGlmICAvKiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSAqLwogfQogCiBQeURvY19TVFJWQVIobG9ja2ZfZG9jLApAQCAtNDMyLDE4OCArNDIyLDE3OSBAQAogCiAvKiBNb2R1bGUgaW5pdGlhbGlzYXRpb24gKi8KIAotc3RhdGljIGludAotaW5zKFB5T2JqZWN0KiBkLCBjaGFyKiBzeW1ib2wsIGxvbmcgdmFsdWUpCi17Ci0gICAgUHlPYmplY3QqIHYgPSBQeUxvbmdfRnJvbUxvbmcodmFsdWUpOwotICAgIGlmICghdiB8fCBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCBzeW1ib2wsIHYpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgUHlfREVDUkVGKHYpOwotICAgIHJldHVybiAwOwotfQotCi0jZGVmaW5lIElOUyh4KSBpZiAoaW5zKGQsICN4LCAobG9uZyl4KSkgcmV0dXJuIC0xCiAKIHN0YXRpYyBpbnQKLWFsbF9pbnMoUHlPYmplY3QqIGQpCithbGxfaW5zKFB5T2JqZWN0KiBtKQogewotICAgIGlmIChpbnMoZCwgIkxPQ0tfU0giLCAobG9uZylMT0NLX1NIKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIkxPQ0tfRVgiLCAobG9uZylMT0NLX0VYKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIkxPQ0tfTkIiLCAobG9uZylMT0NLX05CKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIkxPQ0tfVU4iLCAobG9uZylMT0NLX1VOKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1NIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX0VYKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX05CKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1VOKSkgcmV0dXJuIC0xOwogLyogR05VIGV4dGVuc2lvbnMsIGFzIG9mIGdsaWJjIDIuMi40ICovCiAjaWZkZWYgTE9DS19NQU5ECi0gICAgaWYgKGlucyhkLCAiTE9DS19NQU5EIiwgKGxvbmcpTE9DS19NQU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX01BTkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBMT0NLX1JFQUQKLSAgICBpZiAoaW5zKGQsICJMT0NLX1JFQUQiLCAobG9uZylMT0NLX1JFQUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfUkVBRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIExPQ0tfV1JJVEUKLSAgICBpZiAoaW5zKGQsICJMT0NLX1dSSVRFIiwgKGxvbmcpTE9DS19XUklURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19XUklURSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIExPQ0tfUlcKLSAgICBpZiAoaW5zKGQsICJMT0NLX1JXIiwgKGxvbmcpTE9DS19SVykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19SVykpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgRl9EVVBGRAotICAgIGlmIChpbnMoZCwgIkZfRFVQRkQiLCAobG9uZylGX0RVUEZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0RVUEZEKSkgcmV0dXJuIC0xOworI2VuZGlmCisjaWZkZWYgRl9EVVBGRF9DTE9FWEVDCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfRFVQRkRfQ0xPRVhFQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VURkQKLSAgICBpZiAoaW5zKGQsICJGX0dFVEZEIiwgKGxvbmcpRl9HRVRGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRGRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VURkQKLSAgICBpZiAoaW5zKGQsICJGX1NFVEZEIiwgKGxvbmcpRl9TRVRGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRGRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VURkwKLSAgICBpZiAoaW5zKGQsICJGX0dFVEZMIiwgKGxvbmcpRl9HRVRGTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRGTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VURkwKLSAgICBpZiAoaW5zKGQsICJGX1NFVEZMIiwgKGxvbmcpRl9TRVRGTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRGTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VUTEsKLSAgICBpZiAoaW5zKGQsICJGX0dFVExLIiwgKGxvbmcpRl9HRVRMSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRMSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEsKLSAgICBpZiAoaW5zKGQsICJGX1NFVExLIiwgKGxvbmcpRl9TRVRMSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEtXCi0gICAgaWYgKGlucyhkLCAiRl9TRVRMS1ciLCAobG9uZylGX1NFVExLVykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMS1cpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVE9XTgotICAgIGlmIChpbnMoZCwgIkZfR0VUT1dOIiwgKGxvbmcpRl9HRVRPV04pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUT1dOKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRPV04KLSAgICBpZiAoaW5zKGQsICJGX1NFVE9XTiIsIChsb25nKUZfU0VUT1dOKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVE9XTikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VUU0lHCi0gICAgaWYgKGlucyhkLCAiRl9HRVRTSUciLCAobG9uZylGX0dFVFNJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRTSUcpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVFNJRwotICAgIGlmIChpbnMoZCwgIkZfU0VUU0lHIiwgKGxvbmcpRl9TRVRTSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUU0lHKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9SRExDSwotICAgIGlmIChpbnMoZCwgIkZfUkRMQ0siLCAobG9uZylGX1JETENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1JETENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9XUkxDSwotICAgIGlmIChpbnMoZCwgIkZfV1JMQ0siLCAobG9uZylGX1dSTENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1dSTENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9VTkxDSwotICAgIGlmIChpbnMoZCwgIkZfVU5MQ0siLCAobG9uZylGX1VOTENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1VOTENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAvKiBMRlMgY29uc3RhbnRzICovCiAjaWZkZWYgRl9HRVRMSzY0Ci0gICAgaWYgKGlucyhkLCAiRl9HRVRMSzY0IiwgKGxvbmcpRl9HRVRMSzY0KSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVExLNjQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExLNjQKLSAgICBpZiAoaW5zKGQsICJGX1NFVExLNjQiLCAobG9uZylGX1NFVExLNjQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEs2NCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEtXNjQKLSAgICBpZiAoaW5zKGQsICJGX1NFVExLVzY0IiwgKGxvbmcpRl9TRVRMS1c2NCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMS1c2NCkpIHJldHVybiAtMTsKICNlbmRpZgogLyogR05VIGV4dGVuc2lvbnMsIGFzIG9mIGdsaWJjIDIuMi40LiAqLwogI2lmZGVmIEZBU1lOQwotICAgIGlmIChpbnMoZCwgIkZBU1lOQyIsIChsb25nKUZBU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRkFTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMRUFTRQotICAgIGlmIChpbnMoZCwgIkZfU0VUTEVBU0UiLCAobG9uZylGX1NFVExFQVNFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExFQVNFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRMRUFTRQotICAgIGlmIChpbnMoZCwgIkZfR0VUTEVBU0UiLCAobG9uZylGX0dFVExFQVNFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVExFQVNFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9OT1RJRlkKLSAgICBpZiAoaW5zKGQsICJGX05PVElGWSIsIChsb25nKUZfTk9USUZZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX05PVElGWSkpIHJldHVybiAtMTsKICNlbmRpZgogLyogT2xkIEJTRCBmbG9jaygpLiAqLwogI2lmZGVmIEZfRVhMQ0sKLSAgICBpZiAoaW5zKGQsICJGX0VYTENLIiwgKGxvbmcpRl9FWExDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9FWExDSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0hMQ0sKLSAgICBpZiAoaW5zKGQsICJGX1NITENLIiwgKGxvbmcpRl9TSExDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TSExDSykpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBPUyBYIHNwZWNpZmljcyAqLwogI2lmZGVmIEZfRlVMTEZTWU5DCi0gICAgaWYgKGlucyhkLCAiRl9GVUxMRlNZTkMiLCAobG9uZylGX0ZVTExGU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9GVUxMRlNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX05PQ0FDSEUKLSAgICBpZiAoaW5zKGQsICJGX05PQ0FDSEUiLCAobG9uZylGX05PQ0FDSEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfTk9DQUNIRSkpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBGb3IgRl97R0VUfFNFVH1GTCAqLwogI2lmZGVmIEZEX0NMT0VYRUMKLSAgICBpZiAoaW5zKGQsICJGRF9DTE9FWEVDIiwgKGxvbmcpRkRfQ0xPRVhFQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRkRfQ0xPRVhFQykpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBGb3IgRl9OT1RJRlkgKi8KICNpZmRlZiBETl9BQ0NFU1MKLSAgICBpZiAoaW5zKGQsICJETl9BQ0NFU1MiLCAobG9uZylETl9BQ0NFU1MpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX0FDQ0VTUykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX01PRElGWQotICAgIGlmIChpbnMoZCwgIkROX01PRElGWSIsIChsb25nKUROX01PRElGWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fTU9ESUZZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fQ1JFQVRFCi0gICAgaWYgKGlucyhkLCAiRE5fQ1JFQVRFIiwgKGxvbmcpRE5fQ1JFQVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9DUkVBVEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9ERUxFVEUKLSAgICBpZiAoaW5zKGQsICJETl9ERUxFVEUiLCAobG9uZylETl9ERUxFVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX0RFTEVURSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX1JFTkFNRQotICAgIGlmIChpbnMoZCwgIkROX1JFTkFNRSIsIChsb25nKUROX1JFTkFNRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fUkVOQU1FKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fQVRUUklCCi0gICAgaWYgKGlucyhkLCAiRE5fQVRUUklCIiwgKGxvbmcpRE5fQVRUUklCKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9BVFRSSUIpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9NVUxUSVNIT1QKLSAgICBpZiAoaW5zKGQsICJETl9NVUxUSVNIT1QiLCAobG9uZylETl9NVUxUSVNIT1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX01VTFRJU0hPVCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TVFJPUFRTX0gKICAgICAvKiBVbml4IDk4IGd1YXJhbnRlZXMgdGhhdCB0aGVzZSBhcmUgaW4gc3Ryb3B0cy5oLiAqLwotICAgIElOUyhJX1BVU0gpOwotICAgIElOUyhJX1BPUCk7Ci0gICAgSU5TKElfTE9PSyk7Ci0gICAgSU5TKElfRkxVU0gpOwotICAgIElOUyhJX0ZMVVNIQkFORCk7Ci0gICAgSU5TKElfU0VUU0lHKTsKLSAgICBJTlMoSV9HRVRTSUcpOwotICAgIElOUyhJX0ZJTkQpOwotICAgIElOUyhJX1BFRUspOwotICAgIElOUyhJX1NSRE9QVCk7Ci0gICAgSU5TKElfR1JET1BUKTsKLSAgICBJTlMoSV9OUkVBRCk7Ci0gICAgSU5TKElfRkRJTlNFUlQpOwotICAgIElOUyhJX1NUUik7Ci0gICAgSU5TKElfU1dST1BUKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QVVNIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BPUCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9MT09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0ZMVVNIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0ZMVVNIQkFORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TRVRTSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR0VUU0lHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0ZJTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUEVFSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TUkRPUFQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR1JET1BUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX05SRUFEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0ZESU5TRVJUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NUUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TV1JPUFQpKSByZXR1cm4gLTE7CiAjaWZkZWYgSV9HV1JPUFQKICAgICAvKiBkZXNwaXRlIHRoZSBjb21tZW50IGFib3ZlLCBvbGQtaXNoIGdsaWJjcyBtaXNzIGEgY291cGxlLi4uICovCi0gICAgSU5TKElfR1dST1BUKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HV1JPUFQpKSByZXR1cm4gLTE7CiAjZW5kaWYKLSAgICBJTlMoSV9TRU5ERkQpOwotICAgIElOUyhJX1JFQ1ZGRCk7Ci0gICAgSU5TKElfTElTVCk7Ci0gICAgSU5TKElfQVRNQVJLKTsKLSAgICBJTlMoSV9DS0JBTkQpOwotICAgIElOUyhJX0dFVEJBTkQpOwotICAgIElOUyhJX0NBTlBVVCk7Ci0gICAgSU5TKElfU0VUQ0xUSU1FKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TRU5ERkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUkVDVkZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0xJU1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfQVRNQVJLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0NLQkFORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HRVRCQU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0NBTlBVVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TRVRDTFRJTUUpKSByZXR1cm4gLTE7CiAjaWZkZWYgSV9HRVRDTFRJTUUKLSAgICBJTlMoSV9HRVRDTFRJTUUpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dFVENMVElNRSkpIHJldHVybiAtMTsKICNlbmRpZgotICAgIElOUyhJX0xJTkspOwotICAgIElOUyhJX1VOTElOSyk7Ci0gICAgSU5TKElfUExJTkspOwotICAgIElOUyhJX1BVTkxJTkspOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0xJTkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfVU5MSU5LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BMSU5LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BVTkxJTkspKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIHJldHVybiAwOwpAQCAtNjM1LDcgKzYxNiw3IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X2ZjbnRsKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkOworICAgIFB5T2JqZWN0ICptOwogCiAgICAgLyogQ3JlYXRlIHRoZSBtb2R1bGUgYW5kIGFkZCB0aGUgZnVuY3Rpb25zIGFuZCBkb2N1bWVudGF0aW9uICovCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmZmNudGxtb2R1bGUpOwpAQCAtNjQzLDcgKzYyNCw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KLSAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICBhbGxfaW5zKGQpOworICAgIGlmIChhbGxfaW5zKG0pIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvZnBlY3RsbW9kdWxlLmMgYi9Nb2R1bGVzL2ZwZWN0bG1vZHVsZS5jCmluZGV4IDZhZjJmODIuLjA1MmI4MzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZnBlY3RsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9mcGVjdGxtb2R1bGUuYwpAQCAtNzAsMTAgKzcwLDYgQEAKIAogI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCiAjICBpbmNsdWRlIDxpZWVlZnAuaD4KLSNlbGlmIGRlZmluZWQoX19WTVMpCi0jZGVmaW5lIF9fTkVXX1NUQVJMRVQKLSNpbmNsdWRlIDxzdGFybGV0Lmg+Ci0jaW5jbHVkZSA8aWVlZWRlZi5oPgogI2VuZGlmCiAKICNpZm5kZWYgV0FOVF9TSUdGUEVfSEFORExFUgpAQCAtMTgyLDIzICsxNzgsNiBAQAogICAgIGllZWVfc2V0X2ZwX2NvbnRyb2woZnBfY29udHJvbCk7CiAgICAgUHlPU19zZXRzaWcoU0lHRlBFLCBoYW5kbGVyKTsKIAotLyotLSBERUMgQUxQSEEgVk1TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNlbGlmIGRlZmluZWQoX19BTFBIQSkgJiYgZGVmaW5lZChfX1ZNUykKLSAgICAgICAgSUVFRSBjbHJtc2s7Ci0gICAgICAgIElFRUUgc2V0bXNrOwotICAgICAgICBjbHJtc2suaWVlZSRxX2ZsYWdzID0KLSAgICAgICAgICAgICAgICBJRUVFJE1fVFJBUF9FTkFCTEVfVU5GIHwgIElFRUUkTV9UUkFQX0VOQUJMRV9JTkUgfAotICAgICAgICAgICAgICAgICBJRUVFJE1fTUFQX1VNWjsKLSAgICAgICAgc2V0bXNrLmllZWUkcV9mbGFncyA9Ci0gICAgICAgICAgICAgICAgSUVFRSRNX1RSQVBfRU5BQkxFX0lOViB8IElFRUUkTV9UUkFQX0VOQUJMRV9EWkUgfAotICAgICAgICAgICAgICAgIElFRUUkTV9UUkFQX0VOQUJMRV9PVkY7Ci0gICAgICAgIHN5cyRpZWVlX3NldF9mcF9jb250cm9sKCZjbHJtc2ssICZzZXRtc2ssIDApOwotICAgICAgICBQeU9TX3NldHNpZyhTSUdGUEUsIGhhbmRsZXIpOwotCi0vKi0tIEhQIElBNjQgVk1TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNlbGlmIGRlZmluZWQoX19pYTY0KSAmJiBkZWZpbmVkKF9fVk1TKQotICAgIFB5T1Nfc2V0c2lnKFNJR0ZQRSwgaGFuZGxlcik7Ci0KIC8qLS0gQ3JheSBVbmljb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZWxpZiBkZWZpbmVkKGNyYXkpCiAgICAgLyogVU5JQ09TIGRlbGl2ZXJzIFNJR0ZQRSBieSBkZWZhdWx0LCBidXQgbm8gbWF0aGVyciAqLwpAQCAtMjUxLDE0ICsyMzAsNiBAQAogI2lmZGVmIF9fRnJlZUJTRF9fCiAgICAgZnByZXNldHN0aWNreShmcGdldHN0aWNreSgpKTsKICAgICBmcHNldG1hc2soMCk7Ci0jZWxpZiBkZWZpbmVkKF9fVk1TKQotICAgICAgICBJRUVFIGNscm1zazsKLSAgICAgICAgIGNscm1zay5pZWVlJHFfZmxhZ3MgPQotICAgICAgICAgICAgICAgIElFRUUkTV9UUkFQX0VOQUJMRV9VTkYgfCAgSUVFRSRNX1RSQVBfRU5BQkxFX0lORSB8Ci0gICAgICAgICAgICAgICAgSUVFRSRNX01BUF9VTVogfCBJRUVFJE1fVFJBUF9FTkFCTEVfSU5WIHwKLSAgICAgICAgICAgICAgICBJRUVFJE1fVFJBUF9FTkFCTEVfRFpFIHwgSUVFRSRNX1RSQVBfRU5BQkxFX09WRiB8Ci0gICAgICAgICAgICAgICAgSUVFRSRNX0lOSEVSSVQ7Ci0gICAgICAgIHN5cyRpZWVlX3NldF9mcF9jb250cm9sKCZjbHJtc2ssIDAsIDApOwogI2Vsc2UKICAgICBmcHV0cygiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFxuIiwgc3RkZXJyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nY21vZHVsZS5jIGIvTW9kdWxlcy9nY21vZHVsZS5jCmluZGV4IGM2NmRkMzguLjYyODFhN2MgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL2djbW9kdWxlLmMKQEAgLTE2OCw2ICsxNjgsMTggQEAKIHN0YXRpYyBpbnQgZGVidWc7CiBzdGF0aWMgUHlPYmplY3QgKnRtb2QgPSBOVUxMOwogCisvKiBSdW5uaW5nIHN0YXRzIHBlciBnZW5lcmF0aW9uICovCitzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyB7CisgICAgLyogdG90YWwgbnVtYmVyIG9mIGNvbGxlY3Rpb25zICovCisgICAgUHlfc3NpemVfdCBjb2xsZWN0aW9uczsKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgY29sbGVjdGVkIG9iamVjdHMgKi8KKyAgICBQeV9zc2l6ZV90IGNvbGxlY3RlZDsKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgdW5jb2xsZWN0YWJsZSBvYmplY3RzIChwdXQgaW50byBnYy5nYXJiYWdlKSAqLworICAgIFB5X3NzaXplX3QgdW5jb2xsZWN0YWJsZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyBnZW5lcmF0aW9uX3N0YXRzW05VTV9HRU5FUkFUSU9OU107CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGdjX3JlZnMgdmFsdWVzLgogCkBAIC0yMTEsMTAgKzIyMywxMCBAQAogI2RlZmluZSBHQ19SRUFDSEFCTEUgICAgICAgICAgICAgICAgICAgIF9QeUdDX1JFRlNfUkVBQ0hBQkxFCiAjZGVmaW5lIEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFICAgICAgX1B5R0NfUkVGU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRQogCi0jZGVmaW5lIElTX1RSQUNLRUQobykgKChBU19HQyhvKSktPmdjLmdjX3JlZnMgIT0gR0NfVU5UUkFDS0VEKQotI2RlZmluZSBJU19SRUFDSEFCTEUobykgKChBU19HQyhvKSktPmdjLmdjX3JlZnMgPT0gR0NfUkVBQ0hBQkxFKQorI2RlZmluZSBJU19UUkFDS0VEKG8pIChfUHlHQ19SRUZTKG8pICE9IEdDX1VOVFJBQ0tFRCkKKyNkZWZpbmUgSVNfUkVBQ0hBQkxFKG8pIChfUHlHQ19SRUZTKG8pID09IEdDX1JFQUNIQUJMRSkKICNkZWZpbmUgSVNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUobykgKCBcCi0gICAgKEFTX0dDKG8pKS0+Z2MuZ2NfcmVmcyA9PSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSkKKyAgICBfUHlHQ19SRUZTKG8pID09IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKQogCiAvKioqIGxpc3QgZnVuY3Rpb25zICoqKi8KIApAQCAtMzI5LDggKzM0MSw4IEBACiB7CiAgICAgUHlHQ19IZWFkICpnYyA9IGNvbnRhaW5lcnMtPmdjLmdjX25leHQ7CiAgICAgZm9yICg7IGdjICE9IGNvbnRhaW5lcnM7IGdjID0gZ2MtPmdjLmdjX25leHQpIHsKLSAgICAgICAgYXNzZXJ0KGdjLT5nYy5nY19yZWZzID09IEdDX1JFQUNIQUJMRSk7Ci0gICAgICAgIGdjLT5nYy5nY19yZWZzID0gUHlfUkVGQ05UKEZST01fR0MoZ2MpKTsKKyAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSA9PSBHQ19SRUFDSEFCTEUpOworICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIFB5X1JFRkNOVChGUk9NX0dDKGdjKSkpOwogICAgICAgICAvKiBQeXRob24ncyBjeWNsaWMgZ2Mgc2hvdWxkIG5ldmVyIHNlZSBhbiBpbmNvbWluZyByZWZjb3VudAogICAgICAgICAgKiBvZiAwOiAgaWYgc29tZXRoaW5nIGRlY3JlZidlZCB0byAwLCBpdCBzaG91bGQgaGF2ZSBiZWVuCiAgICAgICAgICAqIGRlYWxsb2NhdGVkIGltbWVkaWF0ZWx5IGF0IHRoYXQgdGltZS4KQEAgLTM0OSw3ICszNjEsNyBAQAogICAgICAgICAgKiBzbyBzZXJpb3VzIHRoYXQgbWF5YmUgdGhpcyBzaG91bGQgYmUgYSByZWxlYXNlLWJ1aWxkCiAgICAgICAgICAqIGNoZWNrIGluc3RlYWQgb2YgYW4gYXNzZXJ0PwogICAgICAgICAgKi8KLSAgICAgICAgYXNzZXJ0KGdjLT5nYy5nY19yZWZzICE9IDApOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApOwogICAgIH0KIH0KIApAQCAtMzY0LDkgKzM3Niw5IEBACiAgICAgICAgICAqIGdlbmVyYXRpb24gYmVpbmcgY29sbGVjdGVkLCB3aGljaCBjYW4gYmUgcmVjb2duaXplZAogICAgICAgICAgKiBiZWNhdXNlIG9ubHkgdGhleSBoYXZlIHBvc2l0aXZlIGdjX3JlZnMuCiAgICAgICAgICAqLwotICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgIT0gMCk7IC8qIGVsc2UgcmVmY291bnQgd2FzIHRvbyBzbWFsbCAqLwotICAgICAgICBpZiAoZ2MtPmdjLmdjX3JlZnMgPiAwKQotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMtLTsKKyAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSAhPSAwKTsgLyogZWxzZSByZWZjb3VudCB3YXMgdG9vIHNtYWxsICovCisgICAgICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnYykgPiAwKQorICAgICAgICAgICAgX1B5R0NIZWFkX0RFQ1JFRihnYyk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMzk1LDcgKzQwNyw3IEBACiB7CiAgICAgaWYgKFB5T2JqZWN0X0lTX0dDKG9wKSkgewogICAgICAgICBQeUdDX0hlYWQgKmdjID0gQVNfR0Mob3ApOwotICAgICAgICBjb25zdCBQeV9zc2l6ZV90IGdjX3JlZnMgPSBnYy0+Z2MuZ2NfcmVmczsKKyAgICAgICAgY29uc3QgUHlfc3NpemVfdCBnY19yZWZzID0gX1B5R0NIZWFkX1JFRlMoZ2MpOwogCiAgICAgICAgIGlmIChnY19yZWZzID09IDApIHsKICAgICAgICAgICAgIC8qIFRoaXMgaXMgaW4gbW92ZV91bnJlYWNoYWJsZSdzICd5b3VuZycgbGlzdCwgYnV0CkBAIC00MDMsNyArNDE1LDcgQEAKICAgICAgICAgICAgICAqIHdlIG5lZWQgdG8gZG8gaXMgdGVsbCBtb3ZlX3VucmVhY2hhYmxlIHRoYXQgaXQncwogICAgICAgICAgICAgICogcmVhY2hhYmxlLgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IDE7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGdjX3JlZnMgPT0gR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUpIHsKICAgICAgICAgICAgIC8qIFRoaXMgaGFkIGdjX3JlZnMgPSAwIHdoZW4gbW92ZV91bnJlYWNoYWJsZSBnb3QKQEAgLTQxMyw3ICs0MjUsNyBAQAogICAgICAgICAgICAgICogYWdhaW4uCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgcmVhY2hhYmxlKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gMTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgMSk7CiAgICAgICAgIH0KICAgICAgICAgLyogRWxzZSB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uCiAgICAgICAgICAqIElmIGdjX3JlZnMgPiAwLCBpdCBtdXN0IGJlIGluIG1vdmVfdW5yZWFjaGFibGUncyAneW91bmcnCkBAIC00NTcsNyArNDY5LDcgQEAKICAgICB3aGlsZSAoZ2MgIT0geW91bmcpIHsKICAgICAgICAgUHlHQ19IZWFkICpuZXh0OwogCi0gICAgICAgIGlmIChnYy0+Z2MuZ2NfcmVmcykgeworICAgICAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZ2MpKSB7CiAgICAgICAgICAgICAvKiBnYyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIG91dHNpZGUgdGhlCiAgICAgICAgICAgICAgKiBvcmlnaW5hbCAneW91bmcnLiAgTWFyayBpdCBhcyBzdWNoLCBhbmQgdHJhdmVyc2UKICAgICAgICAgICAgICAqIGl0cyBwb2ludGVycyB0byBmaW5kIGFueSBvdGhlciBvYmplY3RzIHRoYXQgbWF5CkBAIC00NjgsOCArNDgwLDggQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgUHlPYmplY3QgKm9wID0gRlJPTV9HQyhnYyk7CiAgICAgICAgICAgICB0cmF2ZXJzZXByb2MgdHJhdmVyc2UgPSBQeV9UWVBFKG9wKS0+dHBfdHJhdmVyc2U7Ci0gICAgICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgPiAwKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSA+IDApOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICAgICAgKHZvaWQpIHRyYXZlcnNlKG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aXNpdHByb2MpdmlzaXRfcmVhY2hhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopeW91bmcpOwpAQCAtNDg4LDcgKzUwMCw3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIG5leHQgPSBnYy0+Z2MuZ2NfbmV4dDsKICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgdW5yZWFjaGFibGUpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgICAgIGdjID0gbmV4dDsKICAgICB9CkBAIC01MDgsMjIgKzUyMCwxOSBAQAogICAgIH0KIH0KIAotLyogUmV0dXJuIHRydWUgaWYgb2JqZWN0IGhhcyBhIGZpbmFsaXphdGlvbiBtZXRob2QuICovCisvKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaGFzIGEgcHJlLVBFUCA0NDIgZmluYWxpemF0aW9uIG1ldGhvZC4gKi8KIHN0YXRpYyBpbnQKLWhhc19maW5hbGl6ZXIoUHlPYmplY3QgKm9wKQoraGFzX2xlZ2FjeV9maW5hbGl6ZXIoUHlPYmplY3QgKm9wKQogewotICAgIGlmIChQeUdlbl9DaGVja0V4YWN0KG9wKSkKLSAgICAgICAgcmV0dXJuIFB5R2VuX05lZWRzRmluYWxpemluZygoUHlHZW5PYmplY3QgKilvcCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gb3AtPm9iX3R5cGUtPnRwX2RlbCAhPSBOVUxMOworICAgIHJldHVybiBvcC0+b2JfdHlwZS0+dHBfZGVsICE9IE5VTEw7CiB9CiAKLS8qIE1vdmUgdGhlIG9iamVjdHMgaW4gdW5yZWFjaGFibGUgd2l0aCBfX2RlbF9fIG1ldGhvZHMgaW50byBgZmluYWxpemVyc2AuCisvKiBNb3ZlIHRoZSBvYmplY3RzIGluIHVucmVhY2hhYmxlIHdpdGggdHBfZGVsIHNsb3RzIGludG8gYGZpbmFsaXplcnNgLgogICogT2JqZWN0cyBtb3ZlZCBpbnRvIGBmaW5hbGl6ZXJzYCBoYXZlIGdjX3JlZnMgc2V0IHRvIEdDX1JFQUNIQUJMRTsgdGhlCiAgKiBvYmplY3RzIHJlbWFpbmluZyBpbiB1bnJlYWNoYWJsZSBhcmUgbGVmdCBhdCBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRS4KICAqLwogc3RhdGljIHZvaWQKLW1vdmVfZmluYWxpemVycyhQeUdDX0hlYWQgKnVucmVhY2hhYmxlLCBQeUdDX0hlYWQgKmZpbmFsaXplcnMpCittb3ZlX2xlZ2FjeV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqdW5yZWFjaGFibGUsIFB5R0NfSGVhZCAqZmluYWxpemVycykKIHsKICAgICBQeUdDX0hlYWQgKmdjOwogICAgIFB5R0NfSGVhZCAqbmV4dDsKQEAgLTUzNywxNCArNTQ2LDE0IEBACiAgICAgICAgIGFzc2VydChJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvcCkpOwogICAgICAgICBuZXh0ID0gZ2MtPmdjLmdjX25leHQ7CiAKLSAgICAgICAgaWYgKGhhc19maW5hbGl6ZXIob3ApKSB7CisgICAgICAgIGlmIChoYXNfbGVnYWN5X2ZpbmFsaXplcihvcCkpIHsKICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgZmluYWxpemVycyk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1JFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotLyogQSB0cmF2ZXJzYWwgY2FsbGJhY2sgZm9yIG1vdmVfZmluYWxpemVyX3JlYWNoYWJsZS4gKi8KKy8qIEEgdHJhdmVyc2FsIGNhbGxiYWNrIGZvciBtb3ZlX2xlZ2FjeV9maW5hbGl6ZXJfcmVhY2hhYmxlLiAqLwogc3RhdGljIGludAogdmlzaXRfbW92ZShQeU9iamVjdCAqb3AsIFB5R0NfSGVhZCAqdG9saXN0KQogewpAQCAtNTUyLDcgKzU2MSw3IEBACiAgICAgICAgIGlmIChJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvcCkpIHsKICAgICAgICAgICAgIFB5R0NfSGVhZCAqZ2MgPSBBU19HQyhvcCk7CiAgICAgICAgICAgICBnY19saXN0X21vdmUoZ2MsIHRvbGlzdCk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1JFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTU2Miw3ICs1NzEsNyBAQAogICogaW50byBmaW5hbGl6ZXJzIHNldC4KICAqLwogc3RhdGljIHZvaWQKLW1vdmVfZmluYWxpemVyX3JlYWNoYWJsZShQeUdDX0hlYWQgKmZpbmFsaXplcnMpCittb3ZlX2xlZ2FjeV9maW5hbGl6ZXJfcmVhY2hhYmxlKFB5R0NfSGVhZCAqZmluYWxpemVycykKIHsKICAgICB0cmF2ZXJzZXByb2MgdHJhdmVyc2U7CiAgICAgUHlHQ19IZWFkICpnYyA9IGZpbmFsaXplcnMtPmdjLmdjX25leHQ7CkBAIC03MzUsNyArNzQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgbXNnLCBQeV9UWVBFKG9wKS0+dHBfbmFtZSwgb3ApOwogfQogCi0vKiBIYW5kbGUgdW5jb2xsZWN0YWJsZSBnYXJiYWdlIChjeWNsZXMgd2l0aCBmaW5hbGl6ZXJzLCBhbmQgc3R1ZmYgcmVhY2hhYmxlCisvKiBIYW5kbGUgdW5jb2xsZWN0YWJsZSBnYXJiYWdlIChjeWNsZXMgd2l0aCB0cF9kZWwgc2xvdHMsIGFuZCBzdHVmZiByZWFjaGFibGUKICAqIG9ubHkgZnJvbSBzdWNoIGN5Y2xlcykuCiAgKiBJZiBERUJVR19TQVZFQUxMLCBhbGwgb2JqZWN0cyBpbiBmaW5hbGl6ZXJzIGFyZSBhcHBlbmRlZCB0byB0aGUgbW9kdWxlCiAgKiBnYXJiYWdlIGxpc3QgKGEgUHl0aG9uIGxpc3QpLCBlbHNlIG9ubHkgdGhlIG9iamVjdHMgaW4gZmluYWxpemVycyB3aXRoCkBAIC03NDUsNyArNzU0LDcgQEAKICAqIFRoZSBmaW5hbGl6ZXJzIGxpc3QgaXMgbWFkZSBlbXB0eSBvbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuLgogICovCiBzdGF0aWMgaW50Ci1oYW5kbGVfZmluYWxpemVycyhQeUdDX0hlYWQgKmZpbmFsaXplcnMsIFB5R0NfSGVhZCAqb2xkKQoraGFuZGxlX2xlZ2FjeV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqZmluYWxpemVycywgUHlHQ19IZWFkICpvbGQpCiB7CiAgICAgUHlHQ19IZWFkICpnYyA9IGZpbmFsaXplcnMtPmdjLmdjX25leHQ7CiAKQEAgLTc1Nyw3ICs3NjYsNyBAQAogICAgIGZvciAoOyBnYyAhPSBmaW5hbGl6ZXJzOyBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CiAgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOwogCi0gICAgICAgIGlmICgoZGVidWcgJiBERUJVR19TQVZFQUxMKSB8fCBoYXNfZmluYWxpemVyKG9wKSkgeworICAgICAgICBpZiAoKGRlYnVnICYgREVCVUdfU0FWRUFMTCkgfHwgaGFzX2xlZ2FjeV9maW5hbGl6ZXIob3ApKSB7CiAgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChnYXJiYWdlLCBvcCkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQpAQCAtNzY3LDYgKzc3Niw2MiBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorZmluYWxpemVfZ2FyYmFnZShQeUdDX0hlYWQgKmNvbGxlY3RhYmxlLCBQeUdDX0hlYWQgKm9sZCkKK3sKKyAgICBkZXN0cnVjdG9yIGZpbmFsaXplOworICAgIFB5R0NfSGVhZCAqZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsKKworICAgIGZvciAoOyBnYyAhPSBjb2xsZWN0YWJsZTsgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgeworICAgICAgICBQeU9iamVjdCAqb3AgPSBGUk9NX0dDKGdjKTsKKworICAgICAgICBpZiAoIV9QeUdDSGVhZF9GSU5BTElaRUQoZ2MpICYmCisgICAgICAgICAgICBQeVR5cGVfSGFzRmVhdHVyZShQeV9UWVBFKG9wKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJgorICAgICAgICAgICAgKGZpbmFsaXplID0gUHlfVFlQRShvcCktPnRwX2ZpbmFsaXplKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX0ZJTkFMSVpFRChnYywgMSk7CisgICAgICAgICAgICBQeV9JTkNSRUYob3ApOworICAgICAgICAgICAgZmluYWxpemUob3ApOworICAgICAgICAgICAgaWYgKFB5X1JFRkNOVChvcCkgPT0gMSkgeworICAgICAgICAgICAgICAgIC8qIG9wIHdpbGwgYmUgZGVzdHJveWVkICovCisgICAgICAgICAgICAgICAgZ2MgPSBnYy0+Z2MuZ2NfcHJldjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihvcCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qIFdhbGsgdGhlIGNvbGxlY3RhYmxlIGxpc3QgYW5kIGNoZWNrIHRoYXQgdGhleSBhcmUgcmVhbGx5IHVucmVhY2hhYmxlCisgICBmcm9tIHRoZSBvdXRzaWRlIChzb21lIG9iamVjdHMgY291bGQgaGF2ZSBiZWVuIHJlc3VycmVjdGVkIGJ5IGEKKyAgIGZpbmFsaXplcikuICovCitzdGF0aWMgaW50CitjaGVja19nYXJiYWdlKFB5R0NfSGVhZCAqY29sbGVjdGFibGUpCit7CisgICAgUHlHQ19IZWFkICpnYzsKKyAgICBmb3IgKGdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7IGdjICE9IGNvbGxlY3RhYmxlOworICAgICAgICAgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgeworICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIFB5X1JFRkNOVChGUk9NX0dDKGdjKSkpOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApOworICAgIH0KKyAgICBzdWJ0cmFjdF9yZWZzKGNvbGxlY3RhYmxlKTsKKyAgICBmb3IgKGdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7IGdjICE9IGNvbGxlY3RhYmxlOworICAgICAgICAgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgeworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpID49IDApOworICAgICAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcmV2aXZlX2dhcmJhZ2UoUHlHQ19IZWFkICpjb2xsZWN0YWJsZSkKK3sKKyAgICBQeUdDX0hlYWQgKmdjOworICAgIGZvciAoZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsgZ2MgIT0gY29sbGVjdGFibGU7CisgICAgICAgICBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKKyAgICB9Cit9CisKIC8qIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgYnkgY2xlYXJpbmcgdGhlIGNvbnRhaW5lcnMgaW52b2x2ZWQuICBUaGlzIGlzCiAgKiB0cmlja3kgYnVzaW5lc3MgYXMgdGhlIGxpc3RzIGNhbiBiZSBjaGFuZ2luZyBhbmQgd2UgZG9uJ3Qga25vdyB3aGljaAogICogb2JqZWN0cyBtYXkgYmUgZnJlZWQuICBJdCBpcyBwb3NzaWJsZSBJIHNjcmV3ZWQgc29tZXRoaW5nIHVwIGhlcmUuCkBAIC03ODAsNyArODQ1LDYgQEAKICAgICAgICAgUHlHQ19IZWFkICpnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OwogICAgICAgICBQeU9iamVjdCAqb3AgPSBGUk9NX0dDKGdjKTsKIAotICAgICAgICBhc3NlcnQoSVNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUob3ApKTsKICAgICAgICAgaWYgKGRlYnVnICYgREVCVUdfU0FWRUFMTCkgewogICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChnYXJiYWdlLCBvcCk7CiAgICAgICAgIH0KQEAgLTc5NCw3ICs4NTgsNyBAQAogICAgICAgICBpZiAoY29sbGVjdGFibGUtPmdjLmdjX25leHQgPT0gZ2MpIHsKICAgICAgICAgICAgIC8qIG9iamVjdCBpcyBzdGlsbCBhbGl2ZSwgbW92ZSBpdCwgaXQgbWF5IGRpZSBsYXRlciAqLwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCBvbGQpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19SRUFDSEFCTEU7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIEdDX1JFQUNIQUJMRSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04NDEsNyArOTA1LDggQEAKIC8qIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24uICBSZWFkIHRoaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlCiAgKiBjb2xsZWN0aW9uIHByb2Nlc3Mgd29ya3MuICovCiBzdGF0aWMgUHlfc3NpemVfdAotY29sbGVjdChpbnQgZ2VuZXJhdGlvbiwgUHlfc3NpemVfdCAqbl9jb2xsZWN0ZWQsIFB5X3NzaXplX3QgKm5fdW5jb2xsZWN0YWJsZSkKK2NvbGxlY3QoaW50IGdlbmVyYXRpb24sIFB5X3NzaXplX3QgKm5fY29sbGVjdGVkLCBQeV9zc2l6ZV90ICpuX3VuY29sbGVjdGFibGUsCisgICAgICAgIGludCBub2ZhaWwpCiB7CiAgICAgaW50IGk7CiAgICAgUHlfc3NpemVfdCBtID0gMDsgLyogIyBvYmplY3RzIGNvbGxlY3RlZCAqLwpAQCAtODUyLDYgKzkxNyw3IEBACiAgICAgUHlHQ19IZWFkIGZpbmFsaXplcnM7ICAvKiBvYmplY3RzIHdpdGgsICYgcmVhY2hhYmxlIGZyb20sIF9fZGVsX18gKi8KICAgICBQeUdDX0hlYWQgKmdjOwogICAgIGRvdWJsZSB0MSA9IDAuMDsKKyAgICBzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyAqc3RhdHMgPSAmZ2VuZXJhdGlvbl9zdGF0c1tnZW5lcmF0aW9uXTsKIAogICAgIGlmIChkZWJ1ZyAmIERFQlVHX1NUQVRTKSB7CiAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJnYzogY29sbGVjdGluZyBnZW5lcmF0aW9uICVkLi4uXG4iLApAQCAtOTE1LDE5ICs5ODEsMTUgQEAKICAgICB9CiAKICAgICAvKiBBbGwgb2JqZWN0cyBpbiB1bnJlYWNoYWJsZSBhcmUgdHJhc2gsIGJ1dCBvYmplY3RzIHJlYWNoYWJsZSBmcm9tCi0gICAgICogZmluYWxpemVycyBjYW4ndCBzYWZlbHkgYmUgZGVsZXRlZC4gIFB5dGhvbiBwcm9ncmFtbWVycyBzaG91bGQgdGFrZQotICAgICAqIGNhcmUgbm90IHRvIGNyZWF0ZSBzdWNoIHRoaW5ncy4gIEZvciBQeXRob24sIGZpbmFsaXplcnMgbWVhbnMKLSAgICAgKiBpbnN0YW5jZSBvYmplY3RzIHdpdGggX19kZWxfXyBtZXRob2RzLiAgV2Vha3JlZnMgd2l0aCBjYWxsYmFja3MKLSAgICAgKiBjYW4gYWxzbyBjYWxsIGFyYml0cmFyeSBQeXRob24gY29kZSBidXQgdGhleSB3aWxsIGJlIGRlYWx0IHdpdGggYnkKLSAgICAgKiBoYW5kbGVfd2Vha3JlZnMoKS4KKyAgICAgKiBsZWdhY3kgZmluYWxpemVycyAoZS5nLiB0cF9kZWwpIGNhbid0IHNhZmVseSBiZSBkZWxldGVkLgogICAgICAqLwogICAgIGdjX2xpc3RfaW5pdCgmZmluYWxpemVycyk7Ci0gICAgbW92ZV9maW5hbGl6ZXJzKCZ1bnJlYWNoYWJsZSwgJmZpbmFsaXplcnMpOwotICAgIC8qIGZpbmFsaXplcnMgY29udGFpbnMgdGhlIHVucmVhY2hhYmxlIG9iamVjdHMgd2l0aCBhIGZpbmFsaXplcjsKKyAgICBtb3ZlX2xlZ2FjeV9maW5hbGl6ZXJzKCZ1bnJlYWNoYWJsZSwgJmZpbmFsaXplcnMpOworICAgIC8qIGZpbmFsaXplcnMgY29udGFpbnMgdGhlIHVucmVhY2hhYmxlIG9iamVjdHMgd2l0aCBhIGxlZ2FjeSBmaW5hbGl6ZXI7CiAgICAgICogdW5yZWFjaGFibGUgb2JqZWN0cyByZWFjaGFibGUgKmZyb20qIHRob3NlIGFyZSBhbHNvIHVuY29sbGVjdGFibGUsCiAgICAgICogYW5kIHdlIG1vdmUgdGhvc2UgaW50byB0aGUgZmluYWxpemVycyBsaXN0IHRvby4KICAgICAgKi8KLSAgICBtb3ZlX2ZpbmFsaXplcl9yZWFjaGFibGUoJmZpbmFsaXplcnMpOworICAgIG1vdmVfbGVnYWN5X2ZpbmFsaXplcl9yZWFjaGFibGUoJmZpbmFsaXplcnMpOwogCiAgICAgLyogQ29sbGVjdCBzdGF0aXN0aWNzIG9uIGNvbGxlY3RhYmxlIG9iamVjdHMgZm91bmQgYW5kIHByaW50CiAgICAgICogZGVidWdnaW5nIGluZm9ybWF0aW9uLgpAQCAtOTQzLDExICsxMDA1LDIwIEBACiAgICAgLyogQ2xlYXIgd2Vha3JlZnMgYW5kIGludm9rZSBjYWxsYmFja3MgYXMgbmVjZXNzYXJ5LiAqLwogICAgIG0gKz0gaGFuZGxlX3dlYWtyZWZzKCZ1bnJlYWNoYWJsZSwgb2xkKTsKIAotICAgIC8qIENhbGwgdHBfY2xlYXIgb24gb2JqZWN0cyBpbiB0aGUgdW5yZWFjaGFibGUgc2V0LiAgVGhpcyB3aWxsIGNhdXNlCi0gICAgICogdGhlIHJlZmVyZW5jZSBjeWNsZXMgdG8gYmUgYnJva2VuLiAgSXQgbWF5IGFsc28gY2F1c2Ugc29tZSBvYmplY3RzCi0gICAgICogaW4gZmluYWxpemVycyB0byBiZSBmcmVlZC4KLSAgICAgKi8KLSAgICBkZWxldGVfZ2FyYmFnZSgmdW5yZWFjaGFibGUsIG9sZCk7CisgICAgLyogQ2FsbCB0cF9maW5hbGl6ZSBvbiBvYmplY3RzIHdoaWNoIGhhdmUgb25lLiAqLworICAgIGZpbmFsaXplX2dhcmJhZ2UoJnVucmVhY2hhYmxlLCBvbGQpOworCisgICAgaWYgKGNoZWNrX2dhcmJhZ2UoJnVucmVhY2hhYmxlKSkgeworICAgICAgICByZXZpdmVfZ2FyYmFnZSgmdW5yZWFjaGFibGUpOworICAgICAgICBnY19saXN0X21lcmdlKCZ1bnJlYWNoYWJsZSwgb2xkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIENhbGwgdHBfY2xlYXIgb24gb2JqZWN0cyBpbiB0aGUgdW5yZWFjaGFibGUgc2V0LiAgVGhpcyB3aWxsIGNhdXNlCisgICAgICAgICAqIHRoZSByZWZlcmVuY2UgY3ljbGVzIHRvIGJlIGJyb2tlbi4gIEl0IG1heSBhbHNvIGNhdXNlIHNvbWUgb2JqZWN0cworICAgICAgICAgKiBpbiBmaW5hbGl6ZXJzIHRvIGJlIGZyZWVkLgorICAgICAgICAgKi8KKyAgICAgICAgZGVsZXRlX2dhcmJhZ2UoJnVucmVhY2hhYmxlLCBvbGQpOworICAgIH0KIAogICAgIC8qIENvbGxlY3Qgc3RhdGlzdGljcyBvbiB1bmNvbGxlY3RhYmxlIG9iamVjdHMgZm91bmQgYW5kIHByaW50CiAgICAgICogZGVidWdnaW5nIGluZm9ybWF0aW9uLiAqLwpAQCAtOTc4LDcgKzEwNDksNyBAQAogICAgICAqIHJlYWNoYWJsZSBsaXN0IG9mIGdhcmJhZ2UuICBUaGUgcHJvZ3JhbW1lciBoYXMgdG8gZGVhbCB3aXRoCiAgICAgICogdGhpcyBpZiB0aGV5IGluc2lzdCBvbiBjcmVhdGluZyB0aGlzIHR5cGUgb2Ygc3RydWN0dXJlLgogICAgICAqLwotICAgICh2b2lkKWhhbmRsZV9maW5hbGl6ZXJzKCZmaW5hbGl6ZXJzLCBvbGQpOworICAgICh2b2lkKWhhbmRsZV9sZWdhY3lfZmluYWxpemVycygmZmluYWxpemVycywgb2xkKTsKIAogICAgIC8qIENsZWFyIGZyZWUgbGlzdCBvbmx5IGR1cmluZyB0aGUgY29sbGVjdGlvbiBvZiB0aGUgaGlnaGVzdAogICAgICAqIGdlbmVyYXRpb24gKi8KQEAgLTk4NywxNiArMTA1OCwyNSBAQAogICAgIH0KIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIGlmIChnY19zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIGdjX3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJnYXJiYWdlIGNvbGxlY3Rpb24iKTsKLSAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGdjX3N0cik7Ci0gICAgICAgIFB5X0ZhdGFsRXJyb3IoInVuZXhwZWN0ZWQgZXhjZXB0aW9uIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24iKTsKKyAgICAgICAgaWYgKG5vZmFpbCkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChnY19zdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnY19zdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiZ2FyYmFnZSBjb2xsZWN0aW9uIik7CisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZ2Nfc3RyKTsKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInVuZXhwZWN0ZWQgZXhjZXB0aW9uIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24iKTsKKyAgICAgICAgfQogICAgIH0KIAorICAgIC8qIFVwZGF0ZSBzdGF0cyAqLwogICAgIGlmIChuX2NvbGxlY3RlZCkKICAgICAgICAgKm5fY29sbGVjdGVkID0gbTsKICAgICBpZiAobl91bmNvbGxlY3RhYmxlKQogICAgICAgICAqbl91bmNvbGxlY3RhYmxlID0gbjsKKyAgICBzdGF0cy0+Y29sbGVjdGlvbnMrKzsKKyAgICBzdGF0cy0+Y29sbGVjdGVkICs9IG07CisgICAgc3RhdHMtPnVuY29sbGVjdGFibGUgKz0gbjsKICAgICByZXR1cm4gbittOwogfQogCkBAIC0xMDQ1LDcgKzExMjUsNyBAQAogewogICAgIFB5X3NzaXplX3QgcmVzdWx0LCBjb2xsZWN0ZWQsIHVuY29sbGVjdGFibGU7CiAgICAgaW52b2tlX2djX2NhbGxiYWNrKCJzdGFydCIsIGdlbmVyYXRpb24sIDAsIDApOwotICAgIHJlc3VsdCA9IGNvbGxlY3QoZ2VuZXJhdGlvbiwgJmNvbGxlY3RlZCwgJnVuY29sbGVjdGFibGUpOworICAgIHJlc3VsdCA9IGNvbGxlY3QoZ2VuZXJhdGlvbiwgJmNvbGxlY3RlZCwgJnVuY29sbGVjdGFibGUsIDApOwogICAgIGludm9rZV9nY19jYWxsYmFjaygic3RvcCIsIGdlbmVyYXRpb24sIGNvbGxlY3RlZCwgdW5jb2xsZWN0YWJsZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEzNDMsNiArMTQyMyw1MiBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1B5RG9jX1NUUlZBUihnY19nZXRfc3RhdHNfX2RvY19fLAorImdldF9zdGF0cygpIC0+IFsuLi5dXG4iCisiXG4iCisiUmV0dXJuIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgY29udGFpbmluZyBwZXItZ2VuZXJhdGlvbiBzdGF0aXN0aWNzLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitnY19nZXRfc3RhdHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCit7CisgICAgaW50IGk7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyBzdGF0c1tOVU1fR0VORVJBVElPTlNdLCAqc3Q7CisKKyAgICAvKiBUbyBnZXQgY29uc2lzdGVudCB2YWx1ZXMgZGVzcGl0ZSBhbGxvY2F0aW9ucyB3aGlsZSBjb25zdHJ1Y3RpbmcKKyAgICAgICB0aGUgcmVzdWx0IGxpc3QsIHdlIHVzZSBhIHNuYXBzaG90IG9mIHRoZSBydW5uaW5nIHN0YXRzLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fR0VORVJBVElPTlM7IGkrKykgeworICAgICAgICBzdGF0c1tpXSA9IGdlbmVyYXRpb25fc3RhdHNbaV07CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9HRU5FUkFUSU9OUzsgaSsrKSB7CisgICAgICAgIFB5T2JqZWN0ICpkaWN0OworICAgICAgICBzdCA9ICZzdGF0c1tpXTsKKyAgICAgICAgZGljdCA9IFB5X0J1aWxkVmFsdWUoIntzbnNuc259IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbGxlY3Rpb25zIiwgc3QtPmNvbGxlY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sbGVjdGVkIiwgc3QtPmNvbGxlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuY29sbGVjdGFibGUiLCBzdC0+dW5jb2xsZWN0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGlmIChkaWN0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChyZXN1bHQsIGRpY3QpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgIHJldHVybiBOVUxMOworfQorCisKIFB5RG9jX1NUUlZBUihnY19pc190cmFja2VkX19kb2NfXywKICJpc190cmFja2VkKG9iaikgLT4gYm9vbFxuIgogIlxuIgpAQCAtMTM3Miw2ICsxNDk4LDcgQEAKICJpc2VuYWJsZWQoKSAtLSBSZXR1cm5zIHRydWUgaWYgYXV0b21hdGljIGNvbGxlY3Rpb24gaXMgZW5hYmxlZC5cbiIKICJjb2xsZWN0KCkgLS0gRG8gYSBmdWxsIGNvbGxlY3Rpb24gcmlnaHQgbm93LlxuIgogImdldF9jb3VudCgpIC0tIFJldHVybiB0aGUgY3VycmVudCBjb2xsZWN0aW9uIGNvdW50cy5cbiIKKyJnZXRfc3RhdHMoKSAtLSBSZXR1cm4gbGlzdCBvZiBkaWN0aW9uYXJpZXMgY29udGFpbmluZyBwZXItZ2VuZXJhdGlvbiBzdGF0cy5cbiIKICJzZXRfZGVidWcoKSAtLSBTZXQgZGVidWdnaW5nIGZsYWdzLlxuIgogImdldF9kZWJ1ZygpIC0tIEdldCBkZWJ1Z2dpbmcgZmxhZ3MuXG4iCiAic2V0X3RocmVzaG9sZCgpIC0tIFNldCB0aGUgY29sbGVjdGlvbiB0aHJlc2hvbGRzLlxuIgpAQCAtMTM5Myw2ICsxNTIwLDcgQEAKICAgICB7ImNvbGxlY3QiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilnY19jb2xsZWN0LAogICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAgICAgICAgICAgZ2NfY29sbGVjdF9fZG9jX199LAogICAgIHsiZ2V0X29iamVjdHMiLCAgICBnY19nZXRfb2JqZWN0cyxNRVRIX05PQVJHUywgIGdjX2dldF9vYmplY3RzX19kb2NfX30sCisgICAgeyJnZXRfc3RhdHMiLCAgICAgIGdjX2dldF9zdGF0cywgTUVUSF9OT0FSR1MsIGdjX2dldF9zdGF0c19fZG9jX199LAogICAgIHsiaXNfdHJhY2tlZCIsICAgICBnY19pc190cmFja2VkLCBNRVRIX08sICAgICAgIGdjX2lzX3RyYWNrZWRfX2RvY19ffSwKICAgICB7ImdldF9yZWZlcnJlcnMiLCAgZ2NfZ2V0X3JlZmVycmVycywgTUVUSF9WQVJBUkdTLAogICAgICAgICBnY19nZXRfcmVmZXJyZXJzX19kb2NfX30sCkBAIC0xNDgwLDggKzE2MDgsMjkgQEAKICAgICByZXR1cm4gbjsKIH0KIAorUHlfc3NpemVfdAorX1B5R0NfQ29sbGVjdE5vRmFpbCh2b2lkKQoreworICAgIFB5X3NzaXplX3QgbjsKKworICAgIC8qIElkZWFsbHksIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb24gaW50ZXJwcmV0ZXIgc2h1dGRvd24sCisgICAgICAgYW5kIHRoZXJlZm9yZSBub3QgcmVjdXJzaXZlbHkuICBVbmZvcnR1bmF0ZWx5LCB3aGVuIHRoZXJlIGFyZSBkYWVtb24KKyAgICAgICB0aHJlYWRzLCBhIGRhZW1vbiB0aHJlYWQgY2FuIHN0YXJ0IGEgY3ljbGljIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgIGR1cmluZyBpbnRlcnByZXRlciBzaHV0ZG93biAoYW5kIHRoZW4gbmV2ZXIgZmluaXNoIGl0KS4KKyAgICAgICBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTg3MTMjbXNnMTk1MTc4IGZvciBhbiBleGFtcGxlLgorICAgICAgICovCisgICAgaWYgKGNvbGxlY3RpbmcpCisgICAgICAgIG4gPSAwOworICAgIGVsc2UgeworICAgICAgICBjb2xsZWN0aW5nID0gMTsKKyAgICAgICAgbiA9IGNvbGxlY3QoTlVNX0dFTkVSQVRJT05TIC0gMSwgTlVMTCwgTlVMTCwgMSk7CisgICAgICAgIGNvbGxlY3RpbmcgPSAwOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKwogdm9pZAotX1B5R0NfRmluaSh2b2lkKQorX1B5R0NfRHVtcFNodXRkb3duU3RhdHModm9pZCkKIHsKICAgICBpZiAoIShkZWJ1ZyAmIERFQlVHX1NBVkVBTEwpCiAgICAgICAgICYmIGdhcmJhZ2UgIT0gTlVMTCAmJiBQeUxpc3RfR0VUX1NJWkUoZ2FyYmFnZSkgPiAwKSB7CkBAIC0xNDkyLDggKzE2NDEsMTIgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbWVzc2FnZSA9ICJnYzogJXpkIHVuY29sbGVjdGFibGUgb2JqZWN0cyBhdCAiIFwKICAgICAgICAgICAgICAgICAic2h1dGRvd247IHVzZSBnYy5zZXRfZGVidWcoZ2MuREVCVUdfVU5DT0xMRUNUQUJMRSkgdG8gbGlzdCB0aGVtIjsKLSAgICAgICAgaWYgKFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfUmVzb3VyY2VXYXJuaW5nLCAwLCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX1NJWkUoZ2FyYmFnZSkpIDwgMCkKKyAgICAgICAgLyogUHlFcnJfV2FybkZvcm1hdCBkb2VzIHRvbyBtYW55IHRoaW5ncyBhbmQgd2UgYXJlIGF0IHNodXRkb3duLAorICAgICAgICAgICB0aGUgd2FybmluZ3MgbW9kdWxlJ3MgZGVwZW5kZW5jaWVzIChlLmcuIGxpbmVjYWNoZSkgbWF5IGJlIGdvbmUKKyAgICAgICAgICAgYWxyZWFkeS4gKi8KKyAgICAgICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdEZvcm1hdChQeUV4Y19SZXNvdXJjZVdhcm5pbmcsICJnYyIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdjIiwgTlVMTCwgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX1NJWkUoZ2FyYmFnZSkpKQogICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOwogICAgICAgICBpZiAoZGVidWcgJiBERUJVR19VTkNPTExFQ1RBQkxFKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqcmVwciA9IE5VTEwsICpieXRlcyA9IE5VTEw7CkBAIC0xNTAyLDcgKzE2NTUsNyBAQAogICAgICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShnYXJiYWdlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKAotICAgICAgICAgICAgICAgICAgICAiICAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAiICAgICAgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKQogICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgfQpAQCAtMTUxMCw3ICsxNjYzLDEzIEBACiAgICAgICAgICAgICBQeV9YREVDUkVGKGJ5dGVzKTsKICAgICAgICAgfQogICAgIH0KK30KKwordm9pZAorX1B5R0NfRmluaSh2b2lkKQorewogICAgIFB5X0NMRUFSKGNhbGxiYWNrcyk7CisgICAgUHlfQ0xFQVIodG1vZCk7CiB9CiAKIC8qIGZvciBkZWJ1Z2dpbmcgKi8KQEAgLTE1NTUsNyArMTcxNCw4IEBACiAgICAgICAgIHNpemVvZihQeUdDX0hlYWQpICsgYmFzaWNzaXplKTsKICAgICBpZiAoZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBnLT5nYy5nY19yZWZzID0gR0NfVU5UUkFDS0VEOworICAgIGctPmdjLmdjX3JlZnMgPSAwOworICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnLCBHQ19VTlRSQUNLRUQpOwogICAgIGdlbmVyYXRpb25zWzBdLmNvdW50Kys7IC8qIG51bWJlciBvZiBhbGxvY2F0ZWQgR0Mgb2JqZWN0cyAqLwogICAgIGlmIChnZW5lcmF0aW9uc1swXS5jb3VudCA+IGdlbmVyYXRpb25zWzBdLnRocmVzaG9sZCAmJgogICAgICAgICBlbmFibGVkICYmCkBAIC0xNTgyLDggKzE3NDIsMTUgQEAKIFB5VmFyT2JqZWN0ICoKIF9QeU9iamVjdF9HQ19OZXdWYXIoUHlUeXBlT2JqZWN0ICp0cCwgUHlfc3NpemVfdCBuaXRlbXMpCiB7Ci0gICAgY29uc3Qgc2l6ZV90IHNpemUgPSBfUHlPYmplY3RfVkFSX1NJWkUodHAsIG5pdGVtcyk7Ci0gICAgUHlWYXJPYmplY3QgKm9wID0gKFB5VmFyT2JqZWN0ICopIF9QeU9iamVjdF9HQ19NYWxsb2Moc2l6ZSk7CisgICAgc2l6ZV90IHNpemU7CisgICAgUHlWYXJPYmplY3QgKm9wOworCisgICAgaWYgKG5pdGVtcyA8IDApIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzaXplID0gX1B5T2JqZWN0X1ZBUl9TSVpFKHRwLCBuaXRlbXMpOworICAgIG9wID0gKFB5VmFyT2JqZWN0ICopIF9QeU9iamVjdF9HQ19NYWxsb2Moc2l6ZSk7CiAgICAgaWYgKG9wICE9IE5VTEwpCiAgICAgICAgIG9wID0gUHlPYmplY3RfSU5JVF9WQVIob3AsIHRwLCBuaXRlbXMpOwogICAgIHJldHVybiBvcDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvZ2V0cGF0aC5jIGIvTW9kdWxlcy9nZXRwYXRoLmMKaW5kZXggZmYxNGZkZC4uYzA1NzczNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9nZXRwYXRoLmMKKysrIGIvTW9kdWxlcy9nZXRwYXRoLmMKQEAgLTExMCwxMSArMTEwLDcgQEAKICNlbmRpZgogCiAjaWZuZGVmIFBSRUZJWAotIyAgaWZkZWYgX19WTVMKLSMgICAgZGVmaW5lIFBSRUZJWCAiIgotIyAgZWxzZQotIyAgICBkZWZpbmUgUFJFRklYICIvdXNyL2xvY2FsIgotIyAgZW5kaWYKKyMgIGRlZmluZSBQUkVGSVggIi91c3IvbG9jYWwiCiAjZW5kaWYKIAogI2lmbmRlZiBFWEVDX1BSRUZJWApAQCAtMTM0LDggKzEzMCw2IEBACiBzdGF0aWMgd2NoYXJfdCBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOwogc3RhdGljIHdjaGFyX3QgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKIHN0YXRpYyB3Y2hhcl90ICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOwotc3RhdGljIGludCBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAwOwotc3RhdGljIHdjaGFyX3QgKmxpYl9weXRob24gPSBMImxpYi9weXRob24iIFZFUlNJT047CiAKIHN0YXRpYyB2b2lkCiByZWR1Y2Uod2NoYXJfdCAqZGlyKQpAQCAtMzE3LDcgKzMxMSw4IEBACiAgICBieXRlcyBsb25nLgogKi8KIHN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KHdjaGFyX3QgKmFyZ3YwX3BhdGgsIHdjaGFyX3QgKmhvbWUsIHdjaGFyX3QgKl9wcmVmaXgpCitzZWFyY2hfZm9yX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLCB3Y2hhcl90ICpfcHJlZml4LAorICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqbGliX3B5dGhvbikKIHsKICAgICBzaXplX3QgbjsKICAgICB3Y2hhcl90ICp2cGF0aDsKQEAgLTM0Niw3ICszNDEsNyBAQAogICAgICAgICAgICAgd2NzbmNweShwcmVmaXgsIGFyZ3YwX3BhdGgsIE1BWFBBVEhMRU4pOwogICAgICAgICAgICAgcHJlZml4W01BWFBBVEhMRU5dID0gTCdcMCc7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIHZwYXRoKTsKLSAgICAgICAgICAgIFB5TWVtX0ZyZWUodnBhdGgpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh2cGF0aCk7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIEwiTGliIik7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIExBTkRNQVJLKTsKICAgICAgICAgICAgIGlmIChpc21vZHVsZShwcmVmaXgpKQpAQCAtMzgzLDcgKzM3OCw4IEBACiAgICBNQVhQQVRITEVOIGJ5dGVzIGxvbmcuCiAqLwogc3RhdGljIGludAotc2VhcmNoX2Zvcl9leGVjX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLCB3Y2hhcl90ICpfZXhlY19wcmVmaXgpCitzZWFyY2hfZm9yX2V4ZWNfcHJlZml4KHdjaGFyX3QgKmFyZ3YwX3BhdGgsIHdjaGFyX3QgKmhvbWUsCisgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKl9leGVjX3ByZWZpeCwgd2NoYXJfdCAqbGliX3B5dGhvbikKIHsKICAgICBzaXplX3QgbjsKIApAQCAtNDkzLDEyICs0ODksMTQgQEAKICAgICBjaGFyIGV4ZWNwYXRoW01BWFBBVEhMRU4rMV07CiAjZW5kaWYKICAgICB3Y2hhcl90ICpfcHl0aG9ucGF0aCwgKl9wcmVmaXgsICpfZXhlY19wcmVmaXg7CisgICAgd2NoYXJfdCAqbGliX3B5dGhvbjsKIAogICAgIF9weXRob25wYXRoID0gX1B5X2NoYXIyd2NoYXIoUFlUSE9OUEFUSCwgTlVMTCk7CiAgICAgX3ByZWZpeCA9IF9QeV9jaGFyMndjaGFyKFBSRUZJWCwgTlVMTCk7CiAgICAgX2V4ZWNfcHJlZml4ID0gX1B5X2NoYXIyd2NoYXIoRVhFQ19QUkVGSVgsIE5VTEwpOworICAgIGxpYl9weXRob24gPSBfUHlfY2hhcjJ3Y2hhcigibGliL3B5dGhvbiIgVkVSU0lPTiwgTlVMTCk7CiAKLSAgICBpZiAoIV9weXRob25wYXRoIHx8ICFfcHJlZml4IHx8ICFfZXhlY19wcmVmaXgpIHsKKyAgICBpZiAoIV9weXRob25wYXRoIHx8ICFfcHJlZml4IHx8ICFfZXhlY19wcmVmaXggfHwgIWxpYl9weXRob24pIHsKICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICJVbmFibGUgdG8gZGVjb2RlIHBhdGggdmFyaWFibGVzIGluIGdldHBhdGguYzogIgogICAgICAgICAgICAgIm1lbW9yeSBlcnJvciIpOwpAQCAtNTYyLDggKzU2MCw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotICAgIGlmIChwYXRoX2J1ZmZlciAhPSBOVUxMKQotICAgICAgICBQeU1lbV9GcmVlKHBhdGhfYnVmZmVyKTsKKyAgICBQeU1lbV9SYXdGcmVlKHBhdGhfYnVmZmVyKTsKICAgICBpZiAocHJvZ3BhdGhbMF0gIT0gU0VQICYmIHByb2dwYXRoWzBdICE9ICdcMCcpCiAgICAgICAgIGFic29sdXRpemUocHJvZ3BhdGgpOwogICAgIHdjc25jcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgsIE1BWFBBVEhMRU4pOwpAQCAtNjA1LDcgKzYwMiw3IEBACiAgICAgICAgICAgICAvKiBVc2UgdGhlIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5IGFzIHRoZSBwcm9ncGF0aCAqLwogICAgICAgICAgICAgd2NzbmNweShhcmd2MF9wYXRoLCB3YnVmLCBNQVhQQVRITEVOKTsKICAgICAgICAgfQotICAgICAgICBQeU1lbV9GcmVlKHdidWYpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYpOwogICAgIH0KICNlbmRpZgogCkBAIC02NjcsNyArNjY0LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghKHBmb3VuZCA9IHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9wcmVmaXgpKSkgeworICAgIHBmb3VuZCA9IHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9wcmVmaXgsIGxpYl9weXRob24pOworICAgIGlmICghcGZvdW5kKSB7CiAgICAgICAgIGlmICghUHlfRnJvemVuRmxhZykKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZmluZCBwbGF0Zm9ybSBpbmRlcGVuZGVudCBsaWJyYXJpZXMgPHByZWZpeD5cbiIpOwpAQCAtNjkwLDcgKzY4OCw5IEBACiAgICAgemlwX3BhdGhbYnVmc3ogLSA2XSA9IFZFUlNJT05bMF07CiAgICAgemlwX3BhdGhbYnVmc3ogLSA1XSA9IFZFUlNJT05bMl07CiAKLSAgICBpZiAoIShlZm91bmQgPSBzZWFyY2hfZm9yX2V4ZWNfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9leGVjX3ByZWZpeCkpKSB7CisgICAgZWZvdW5kID0gc2VhcmNoX2Zvcl9leGVjX3ByZWZpeChhcmd2MF9wYXRoLCBob21lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V4ZWNfcHJlZml4LCBsaWJfcHl0aG9uKTsKKyAgICBpZiAoIWVmb3VuZCkgewogICAgICAgICBpZiAoIVB5X0Zyb3plbkZsYWcpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGZpbmQgcGxhdGZvcm0gZGVwZW5kZW50IGxpYnJhcmllcyA8ZXhlY19wcmVmaXg+XG4iKTsKQEAgLTcwNywxMyArNzA3LDExIEBACiAgICAgICovCiAgICAgYnVmc3ogPSAwOwogCi0gICAgaWYgKF9ydHB5cGF0aCkgeworICAgIGlmIChfcnRweXBhdGggJiYgX3J0cHlwYXRoWzBdICE9ICdcMCcpIHsKICAgICAgICAgc2l6ZV90IHJ0cHlwYXRoX2xlbjsKICAgICAgICAgcnRweXBhdGggPSBfUHlfY2hhcjJ3Y2hhcihfcnRweXBhdGgsICZydHB5cGF0aF9sZW4pOwogICAgICAgICBpZiAocnRweXBhdGggIT0gTlVMTCkKICAgICAgICAgICAgIGJ1ZnN6ICs9IHJ0cHlwYXRoX2xlbiArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9ydHB5cGF0aCA9IE5VTEw7CiAgICAgfQogCiAgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOwpAQCAtNzM3LDYwICs3MzUsNTUgQEAKICAgICBidWZzeiArPSB3Y3NsZW4oemlwX3BhdGgpICsgMTsKICAgICBidWZzeiArPSB3Y3NsZW4oZXhlY19wcmVmaXgpICsgMTsKIAotICAgIGJ1ZiA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKGJ1ZnN6KnNpemVvZih3Y2hhcl90KSk7Ci0KKyAgICBidWYgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhidWZzeiAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIFdlIGNhbid0IGV4aXQsIHNvIHByaW50IGEgd2FybmluZyBhbmQgbGltcCBhbG9uZyAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBkeW5hbWljIFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IEwiIiBQWVRIT05QQVRIOworICAgICAgICBQeV9GYXRhbEVycm9yKAorICAgICAgICAgICAgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBkeW5hbWljIFBZVEhPTlBBVEgiKTsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIFJ1bi10aW1lIHZhbHVlIG9mICRQWVRIT05QQVRIIGdvZXMgZmlyc3QgKi8KLSAgICAgICAgaWYgKHJ0cHlwYXRoKSB7Ci0gICAgICAgICAgICB3Y3NjcHkoYnVmLCBydHB5cGF0aCk7Ci0gICAgICAgICAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ1ZlswXSA9ICdcMCc7CiAKLSAgICAgICAgLyogTmV4dCBpcyB0aGUgZGVmYXVsdCB6aXAgcGF0aCAqLwotICAgICAgICB3Y3NjYXQoYnVmLCB6aXBfcGF0aCk7CisgICAgLyogUnVuLXRpbWUgdmFsdWUgb2YgJFBZVEhPTlBBVEggZ29lcyBmaXJzdCAqLworICAgIGlmIChydHB5cGF0aCkgeworICAgICAgICB3Y3NjcHkoYnVmLCBydHB5cGF0aCk7CiAgICAgICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7Ci0KLSAgICAgICAgLyogTmV4dCBnb2VzIG1lcmdlIG9mIGNvbXBpbGUtdGltZSAkUFlUSE9OUEFUSCB3aXRoCi0gICAgICAgICAqIGR5bmFtaWNhbGx5IGxvY2F0ZWQgcHJlZml4LgotICAgICAgICAgKi8KLSAgICAgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgd2NoYXJfdCAqZGVsaW0gPSB3Y3NjaHIoZGVmcGF0aCwgREVMSU0pOwotCi0gICAgICAgICAgICBpZiAoZGVmcGF0aFswXSAhPSBTRVApIHsKLSAgICAgICAgICAgICAgICB3Y3NjYXQoYnVmLCBwcmVmaXgpOwotICAgICAgICAgICAgICAgIHdjc2NhdChidWYsIHNlcGFyYXRvcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkZWxpbSkgewotICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBkZWxpbSAtIGRlZnBhdGggKyAxOwotICAgICAgICAgICAgICAgIHNpemVfdCBlbmQgPSB3Y3NsZW4oYnVmKSArIGxlbjsKLSAgICAgICAgICAgICAgICB3Y3NuY2F0KGJ1ZiwgZGVmcGF0aCwgbGVuKTsKLSAgICAgICAgICAgICAgICAqKGJ1ZiArIGVuZCkgPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgZGVmcGF0aCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7Ci0KLSAgICAgICAgLyogRmluYWxseSwgb24gZ29lcyB0aGUgZGlyZWN0b3J5IGZvciBkeW5hbWljLWxvYWQgbW9kdWxlcyAqLwotICAgICAgICB3Y3NjYXQoYnVmLCBleGVjX3ByZWZpeCk7Ci0KLSAgICAgICAgLyogQW5kIHB1Ymxpc2ggdGhlIHJlc3VsdHMgKi8KLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmOwotICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAxOwogICAgIH0KKyAgICBlbHNlCisgICAgICAgIGJ1ZlswXSA9ICdcMCc7CisKKyAgICAvKiBOZXh0IGlzIHRoZSBkZWZhdWx0IHppcCBwYXRoICovCisgICAgd2NzY2F0KGJ1ZiwgemlwX3BhdGgpOworICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7CisKKyAgICAvKiBOZXh0IGdvZXMgbWVyZ2Ugb2YgY29tcGlsZS10aW1lICRQWVRIT05QQVRIIHdpdGgKKyAgICAgKiBkeW5hbWljYWxseSBsb2NhdGVkIHByZWZpeC4KKyAgICAgKi8KKyAgICBkZWZwYXRoID0gX3B5dGhvbnBhdGg7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2NoYXJfdCAqZGVsaW0gPSB3Y3NjaHIoZGVmcGF0aCwgREVMSU0pOworCisgICAgICAgIGlmIChkZWZwYXRoWzBdICE9IFNFUCkgeworICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgcHJlZml4KTsKKyAgICAgICAgICAgIHdjc2NhdChidWYsIHNlcGFyYXRvcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGVsaW0pIHsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSBkZWxpbSAtIGRlZnBhdGggKyAxOworICAgICAgICAgICAgc2l6ZV90IGVuZCA9IHdjc2xlbihidWYpICsgbGVuOworICAgICAgICAgICAgd2NzbmNhdChidWYsIGRlZnBhdGgsIGxlbik7CisgICAgICAgICAgICAqKGJ1ZiArIGVuZCkgPSAnXDAnOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgZGVmcGF0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZwYXRoID0gZGVsaW0gKyAxOworICAgIH0KKyAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOworCisgICAgLyogRmluYWxseSwgb24gZ29lcyB0aGUgZGlyZWN0b3J5IGZvciBkeW5hbWljLWxvYWQgbW9kdWxlcyAqLworICAgIHdjc2NhdChidWYsIGV4ZWNfcHJlZml4KTsKKworICAgIC8qIEFuZCBwdWJsaXNoIHRoZSByZXN1bHRzICovCisgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmOwogCiAgICAgLyogUmVkdWNlIHByZWZpeCBhbmQgZXhlY19wcmVmaXggdG8gdGhlaXIgZXNzZW5jZSwKICAgICAgKiBlLmcuIC91c3IvbG9jYWwvbGliL3B5dGhvbjEuNSBpcyByZWR1Y2VkIHRvIC91c3IvbG9jYWwuCkBAIC04MTgsMTEgKzgxMSwxMSBAQAogICAgIGVsc2UKICAgICAgICAgd2NzbmNweShleGVjX3ByZWZpeCwgX2V4ZWNfcHJlZml4LCBNQVhQQVRITEVOKTsKIAotICAgIFB5TWVtX0ZyZWUoX3B5dGhvbnBhdGgpOwotICAgIFB5TWVtX0ZyZWUoX3ByZWZpeCk7Ci0gICAgUHlNZW1fRnJlZShfZXhlY19wcmVmaXgpOwotICAgIGlmIChydHB5cGF0aCAhPSBOVUxMKQotICAgICAgICBQeU1lbV9GcmVlKHJ0cHlwYXRoKTsKKyAgICBQeU1lbV9SYXdGcmVlKF9weXRob25wYXRoKTsKKyAgICBQeU1lbV9SYXdGcmVlKF9wcmVmaXgpOworICAgIFB5TWVtX1Jhd0ZyZWUoX2V4ZWNfcHJlZml4KTsKKyAgICBQeU1lbV9SYXdGcmVlKGxpYl9weXRob24pOworICAgIFB5TWVtX1Jhd0ZyZWUocnRweXBhdGgpOwogfQogCiAKQEAgLTgzMSwxOCArODI0LDE1IEBACiBQeV9TZXRQYXRoKGNvbnN0IHdjaGFyX3QgKnBhdGgpCiB7CiAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQpCi0gICAgICAgICAgICBQeU1lbV9GcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobW9kdWxlX3NlYXJjaF9wYXRoKTsKICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkID0gMDsKICAgICB9CiAgICAgaWYgKHBhdGggIT0gTlVMTCkgewogICAgICAgICBleHRlcm4gd2NoYXJfdCAqUHlfR2V0UHJvZ3JhbU5hbWUodm9pZCk7CiAgICAgICAgIHdjaGFyX3QgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogICAgICAgICB3Y3NuY3B5KHByb2dwYXRoLCBwcm9nLCBNQVhQQVRITEVOKTsKICAgICAgICAgZXhlY19wcmVmaXhbMF0gPSBwcmVmaXhbMF0gPSBMJ1wwJzsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUHlNZW1fTWFsbG9jKCh3Y3NsZW4ocGF0aCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aF9tYWxsb2NlZCA9IDE7CisgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFB5TWVtX1Jhd01hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpCiAgICAgICAgICAgICB3Y3NjcHkobW9kdWxlX3NlYXJjaF9wYXRoLCBwYXRoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2dycG1vZHVsZS5jIGIvTW9kdWxlcy9ncnBtb2R1bGUuYwppbmRleCAwNDJjZjA1Li5jOGE5MzcyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2dycG1vZHVsZS5jCisrKyBiL01vZHVsZXMvZ3JwbW9kdWxlLmMKQEAgLTU4LDE3ICs1OCwxMiBAQAogCiAjZGVmaW5lIFNFVChpLHZhbCkgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCBpLCB2YWwpCiAgICAgU0VUKHNldEluZGV4KyssIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQocC0+Z3JfbmFtZSkpOwotI2lmZGVmIF9fVk1TCi0gICAgU0VUKHNldEluZGV4KyssIFB5X05vbmUpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSNlbHNlCiAgICAgaWYgKHAtPmdyX3Bhc3N3ZCkKICAgICAgICAgICAgIFNFVChzZXRJbmRleCsrLCBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHAtPmdyX3Bhc3N3ZCkpOwogICAgIGVsc2UgewogICAgICAgICAgICAgU0VUKHNldEluZGV4KyssIFB5X05vbmUpOwogICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIH0KLSNlbmRpZgogICAgIFNFVChzZXRJbmRleCsrLCBfUHlMb25nX0Zyb21HaWQocC0+Z3JfZ2lkKSk7CiAgICAgU0VUKHNldEluZGV4KyssIHcpOwogI3VuZGVmIFNFVApAQCAtMjEwLDkgKzIwNSwxNCBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RHcnBUeXBlLCAmc3RydWN0X2dyb3VwX3R5cGVfZGVzYyk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgInN0cnVjdF9ncm91cCIsIChQeU9iamVjdCAqKSAmU3RydWN0R3JwVHlwZSk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdEdycFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X2dyb3VwX3R5cGVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAic3RydWN0X2dyb3VwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopJlN0cnVjdEdycFR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaW5pdGlhbGl6ZWQgPSAxOwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9oYXNobGliLmggYi9Nb2R1bGVzL2hhc2hsaWIuaAppbmRleCA0NTk5MTQ2Li41MWM2OGY2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2hhc2hsaWIuaAorKysgYi9Nb2R1bGVzL2hhc2hsaWIuaApAQCAtMjYsMyArMjYsMzYgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOyBcCiAgICAgICAgIH0gXAogICAgIH0gd2hpbGUoMCk7CisKKy8qCisgKiBIZWxwZXIgY29kZSB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gdGhlIGhhc2ggb2JqZWN0IHdoZW4gdGhlIEdJTCBpcworICogcmVsZWFzZWQgYXJvdW5kIGEgQ1BVIGNvbnN1bWluZyBoYXNobGliIG9wZXJhdGlvbi4gQWxsIGNvZGUgcGF0aHMgdGhhdAorICogYWNjZXNzIGEgbXV0YWJsZSBwYXJ0IG9mIG9iaiBtdXN0IGJlIGVuY2xvc2VkIGluIGEgRU5URVJfSEFTSExJQiAvCisgKiBMRUFWRV9IQVNITElCIGJsb2NrIG9yIGV4cGxpY2l0bHkgYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGUgbG9jayBpbnNpZGUKKyAqIGEgUFlfQkVHSU4gLyBFTkRfQUxMT1dfVEhSRUFEUyBibG9jayBpZiB0aGV5IHdpc2ggdG8gcmVsZWFzZSB0aGUgR0lMIGZvcgorICogYW4gb3BlcmF0aW9uLgorICovCisKKyNpZmRlZiBXSVRIX1RIUkVBRAorI2luY2x1ZGUgInB5dGhyZWFkLmgiCisgICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikgXAorICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAorICAgICAgICAgICAgaWYgKCFQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDApKSB7IFwKKyAgICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTIFwKKyAgICAgICAgICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDEpOyBcCisgICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0KKyAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKSBcCisgICAgICAgIGlmICgob2JqKS0+bG9jaykgeyBcCisgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soKG9iaiktPmxvY2spOyBcCisgICAgICAgIH0KKyNlbHNlCisgICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikKKyAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKQorI2VuZGlmCisKKy8qIFRPRE8oZ3BzKTogV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBhIG1vZHVsZSBvciBFVlBvYmplY3QgYXR0cmlidXRlCisgKiB0byBhbGxvdyB0aGUgdXNlciB0byBvcHRpbWl6ZSBiYXNlZCBvbiB0aGUgcGxhdGZvcm0gdGhleSdyZSB1c2luZy4gKi8KKyNkZWZpbmUgSEFTSExJQl9HSUxfTUlOU0laRSAyMDQ4CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvaGFzaHRhYmxlLmMgYi9Nb2R1bGVzL2hhc2h0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMWVkNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2hhc2h0YWJsZS5jCkBAIC0wLDAgKzEsNTE4IEBACisvKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGhhc2ggdGFibGUgKF9QeV9oYXNodGFibGVfdCkgaXMgYmFzZWQgb24gdGhlIGNmdWhhc2gKKyAgIHByb2plY3Q6CisgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYmNmdS8KKworICAgQ29weXJpZ2h0IG9mIGNmdWhhc2g6CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDcmVhdGlvbiBkYXRlOiAyMDA1LTA2LTI0IDIxOjIyOjQwCisgICBBdXRob3JzOiBEb24KKyAgIENoYW5nZSBsb2c6CisKKyAgIENvcHlyaWdodCAoYykgMjAwNSBEb24gT3dlbnMKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2U6CisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorCisgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAgIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICAgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgImhhc2h0YWJsZS5oIgorCisjZGVmaW5lIEhBU0hUQUJMRV9NSU5fU0laRSAxNgorI2RlZmluZSBIQVNIVEFCTEVfSElHSCAwLjUwCisjZGVmaW5lIEhBU0hUQUJMRV9MT1cgMC4xMAorI2RlZmluZSBIQVNIVEFCTEVfUkVIQVNIX0ZBQ1RPUiAyLjAgLyAoSEFTSFRBQkxFX0xPVyArIEhBU0hUQUJMRV9ISUdIKQorCisjZGVmaW5lIEJVQ0tFVFNfSEVBRChTTElTVCkgXAorICAgICAgICAoKF9QeV9oYXNodGFibGVfZW50cnlfdCAqKV9QeV9TTElTVF9IRUFEKCYoU0xJU1QpKSkKKyNkZWZpbmUgVEFCTEVfSEVBRChIVCwgQlVDS0VUKSBcCisgICAgICAgICgoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICopX1B5X1NMSVNUX0hFQUQoJihIVCktPmJ1Y2tldHNbQlVDS0VUXSkpCisjZGVmaW5lIEVOVFJZX05FWFQoRU5UUlkpIFwKKyAgICAgICAgKChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKilfUHlfU0xJU1RfSVRFTV9ORVhUKEVOVFJZKSkKKyNkZWZpbmUgSEFTSFRBQkxFX0lURU1fU0laRShIVCkgXAorICAgICAgICAoc2l6ZW9mKF9QeV9oYXNodGFibGVfZW50cnlfdCkgKyAoSFQpLT5kYXRhX3NpemUpCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkIGhhc2h0YWJsZV9yZWhhc2goX1B5X2hhc2h0YWJsZV90ICpodCk7CisKK3N0YXRpYyB2b2lkCitfUHlfc2xpc3RfaW5pdChfUHlfc2xpc3RfdCAqbGlzdCkKK3sKKyAgICBsaXN0LT5oZWFkID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK19QeV9zbGlzdF9wcmVwZW5kKF9QeV9zbGlzdF90ICpsaXN0LCBfUHlfc2xpc3RfaXRlbV90ICppdGVtKQoreworICAgIGl0ZW0tPm5leHQgPSBsaXN0LT5oZWFkOworICAgIGxpc3QtPmhlYWQgPSBpdGVtOworfQorCitzdGF0aWMgdm9pZAorX1B5X3NsaXN0X3JlbW92ZShfUHlfc2xpc3RfdCAqbGlzdCwgX1B5X3NsaXN0X2l0ZW1fdCAqcHJldmlvdXMsCisgICAgICAgICAgICAgICAgIF9QeV9zbGlzdF9pdGVtX3QgKml0ZW0pCit7CisgICAgaWYgKHByZXZpb3VzICE9IE5VTEwpCisgICAgICAgIHByZXZpb3VzLT5uZXh0ID0gaXRlbS0+bmV4dDsKKyAgICBlbHNlCisgICAgICAgIGxpc3QtPmhlYWQgPSBpdGVtLT5uZXh0OworfQorCitQeV91aGFzaF90CitfUHlfaGFzaHRhYmxlX2hhc2hfaW50KGNvbnN0IHZvaWQgKmtleSkKK3sKKyAgICByZXR1cm4gKFB5X3VoYXNoX3Qpa2V5OworfQorCitQeV91aGFzaF90CitfUHlfaGFzaHRhYmxlX2hhc2hfcHRyKGNvbnN0IHZvaWQgKmtleSkKK3sKKyAgICByZXR1cm4gKFB5X3VoYXNoX3QpX1B5X0hhc2hQb2ludGVyKCh2b2lkICopa2V5KTsKK30KKworaW50CitfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KGNvbnN0IHZvaWQgKmtleSwgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSkKK3sKKyAgICByZXR1cm4gZW50cnktPmtleSA9PSBrZXk7Cit9CisKKy8qIG1ha2VzIHN1cmUgdGhlIHJlYWwgc2l6ZSBvZiB0aGUgYnVja2V0cyBhcnJheSBpcyBhIHBvd2VyIG9mIDIgKi8KK3N0YXRpYyBzaXplX3QKK3JvdW5kX3NpemUoc2l6ZV90IHMpCit7CisgICAgc2l6ZV90IGk7CisgICAgaWYgKHMgPCBIQVNIVEFCTEVfTUlOX1NJWkUpCisgICAgICAgIHJldHVybiBIQVNIVEFCTEVfTUlOX1NJWkU7CisgICAgaSA9IDE7CisgICAgd2hpbGUgKGkgPCBzKQorICAgICAgICBpIDw8PSAxOworICAgIHJldHVybiBpOworfQorCitfUHlfaGFzaHRhYmxlX3QgKgorX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChzaXplX3QgZGF0YV9zaXplLCBzaXplX3QgaW5pdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyBoYXNoX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9jb3B5X2RhdGFfZnVuYyBjb3B5X2RhdGFfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9mcmVlX2RhdGFfZnVuYyBmcmVlX2RhdGFfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9nZXRfZGF0YV9zaXplX2Z1bmMgZ2V0X2RhdGFfc2l6ZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90ICphbGxvY2F0b3IpCit7CisgICAgX1B5X2hhc2h0YWJsZV90ICpodDsKKyAgICBzaXplX3QgYnVja2V0c19zaXplOworICAgIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgYWxsb2M7CisKKyAgICBpZiAoYWxsb2NhdG9yID09IE5VTEwpIHsKKyAgICAgICAgYWxsb2MubWFsbG9jID0gUHlNZW1fUmF3TWFsbG9jOworICAgICAgICBhbGxvYy5mcmVlID0gUHlNZW1fUmF3RnJlZTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBhbGxvYyA9ICphbGxvY2F0b3I7CisKKyAgICBodCA9IChfUHlfaGFzaHRhYmxlX3QgKilhbGxvYy5tYWxsb2Moc2l6ZW9mKF9QeV9oYXNodGFibGVfdCkpOworICAgIGlmIChodCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gaHQ7CisKKyAgICBodC0+bnVtX2J1Y2tldHMgPSByb3VuZF9zaXplKGluaXRfc2l6ZSk7CisgICAgaHQtPmVudHJpZXMgPSAwOworICAgIGh0LT5kYXRhX3NpemUgPSBkYXRhX3NpemU7CisKKyAgICBidWNrZXRzX3NpemUgPSBodC0+bnVtX2J1Y2tldHMgKiBzaXplb2YoaHQtPmJ1Y2tldHNbMF0pOworICAgIGh0LT5idWNrZXRzID0gYWxsb2MubWFsbG9jKGJ1Y2tldHNfc2l6ZSk7CisgICAgaWYgKGh0LT5idWNrZXRzID09IE5VTEwpIHsKKyAgICAgICAgYWxsb2MuZnJlZShodCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtZW1zZXQoaHQtPmJ1Y2tldHMsIDAsIGJ1Y2tldHNfc2l6ZSk7CisKKyAgICBodC0+aGFzaF9mdW5jID0gaGFzaF9mdW5jOworICAgIGh0LT5jb21wYXJlX2Z1bmMgPSBjb21wYXJlX2Z1bmM7CisgICAgaHQtPmNvcHlfZGF0YV9mdW5jID0gY29weV9kYXRhX2Z1bmM7CisgICAgaHQtPmZyZWVfZGF0YV9mdW5jID0gZnJlZV9kYXRhX2Z1bmM7CisgICAgaHQtPmdldF9kYXRhX3NpemVfZnVuYyA9IGdldF9kYXRhX3NpemVfZnVuYzsKKyAgICBodC0+YWxsb2MgPSBhbGxvYzsKKyAgICByZXR1cm4gaHQ7Cit9CisKK19QeV9oYXNodGFibGVfdCAqCitfUHlfaGFzaHRhYmxlX25ldyhzaXplX3QgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMgY29tcGFyZV9mdW5jKQoreworICAgIHJldHVybiBfUHlfaGFzaHRhYmxlX25ld19mdWxsKGRhdGFfc2l6ZSwgSEFTSFRBQkxFX01JTl9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfZnVuYywgY29tcGFyZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzaXplX3QKK19QeV9oYXNodGFibGVfc2l6ZShfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIHNpemVfdCBzaXplOworICAgIHNpemVfdCBodjsKKworICAgIHNpemUgPSBzaXplb2YoX1B5X2hhc2h0YWJsZV90KTsKKworICAgIC8qIGJ1Y2tldHMgKi8KKyAgICBzaXplICs9IGh0LT5udW1fYnVja2V0cyAqIHNpemVvZihfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKik7CisKKyAgICAvKiBlbnRyaWVzICovCisgICAgc2l6ZSArPSBodC0+ZW50cmllcyAqIEhBU0hUQUJMRV9JVEVNX1NJWkUoaHQpOworCisgICAgLyogZGF0YSBsaW5rZWQgZnJvbSBlbnRyaWVzICovCisgICAgaWYgKGh0LT5nZXRfZGF0YV9zaXplX2Z1bmMpIHsKKyAgICAgICAgZm9yIChodiA9IDA7IGh2IDwgaHQtPm51bV9idWNrZXRzOyBodisrKSB7CisgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAgICAgICAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaHYpOyBlbnRyeTsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICAgICAgICAgIHZvaWQgKmRhdGE7CisKKyAgICAgICAgICAgICAgICBkYXRhID0gX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBX0FTX1ZPSURfUChlbnRyeSk7CisgICAgICAgICAgICAgICAgc2l6ZSArPSBodC0+Z2V0X2RhdGFfc2l6ZV9mdW5jKGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzaXplOworfQorCisjaWZkZWYgUHlfREVCVUcKK3ZvaWQKK19QeV9oYXNodGFibGVfcHJpbnRfc3RhdHMoX1B5X2hhc2h0YWJsZV90ICpodCkKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzaXplX3QgY2hhaW5fbGVuLCBtYXhfY2hhaW5fbGVuLCB0b3RhbF9jaGFpbl9sZW4sIG5jaGFpbnM7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKyAgICBzaXplX3QgaHY7CisgICAgZG91YmxlIGxvYWQ7CisKKyAgICBzaXplID0gX1B5X2hhc2h0YWJsZV9zaXplKGh0KTsKKworICAgIGxvYWQgPSAoZG91YmxlKWh0LT5lbnRyaWVzIC8gaHQtPm51bV9idWNrZXRzOworCisgICAgbWF4X2NoYWluX2xlbiA9IDA7CisgICAgdG90YWxfY2hhaW5fbGVuID0gMDsKKyAgICBuY2hhaW5zID0gMDsKKyAgICBmb3IgKGh2ID0gMDsgaHYgPCBodC0+bnVtX2J1Y2tldHM7IGh2KyspIHsKKyAgICAgICAgZW50cnkgPSBUQUJMRV9IRUFEKGh0LCBodik7CisgICAgICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7CisgICAgICAgICAgICBjaGFpbl9sZW4gPSAwOworICAgICAgICAgICAgZm9yICg7IGVudHJ5OyBlbnRyeSA9IEVOVFJZX05FWFQoZW50cnkpKSB7CisgICAgICAgICAgICAgICAgY2hhaW5fbGVuKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hhaW5fbGVuID4gbWF4X2NoYWluX2xlbikKKyAgICAgICAgICAgICAgICBtYXhfY2hhaW5fbGVuID0gY2hhaW5fbGVuOworICAgICAgICAgICAgdG90YWxfY2hhaW5fbGVuICs9IGNoYWluX2xlbjsKKyAgICAgICAgICAgIG5jaGFpbnMrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcmludGYoImhhc2ggdGFibGUgJXA6IGVudHJpZXM9JXp1LyV6dSAoJS4wZiUlKSwgIiwKKyAgICAgICAgICAgaHQsIGh0LT5lbnRyaWVzLCBodC0+bnVtX2J1Y2tldHMsIGxvYWQgKiAxMDAuMCk7CisgICAgaWYgKG5jaGFpbnMpCisgICAgICAgIHByaW50ZigiYXZnX2NoYWluX2xlbj0lLjFmLCAiLCAoZG91YmxlKXRvdGFsX2NoYWluX2xlbiAvIG5jaGFpbnMpOworICAgIHByaW50ZigibWF4X2NoYWluX2xlbj0lenUsICV6dSBrQlxuIiwKKyAgICAgICAgICAgbWF4X2NoYWluX2xlbiwgc2l6ZSAvIDEwMjQpOworfQorI2VuZGlmCisKKy8qIEdldCBhbiBlbnRyeS4gUmV0dXJuIE5VTEwgaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdC4gKi8KK19QeV9oYXNodGFibGVfZW50cnlfdCAqCitfUHlfaGFzaHRhYmxlX2dldF9lbnRyeShfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXkpCit7CisgICAgUHlfdWhhc2hfdCBrZXlfaGFzaDsKKyAgICBzaXplX3QgaW5kZXg7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgIGtleV9oYXNoID0gaHQtPmhhc2hfZnVuYyhrZXkpOworICAgIGluZGV4ID0ga2V5X2hhc2ggJiAoaHQtPm51bV9idWNrZXRzIC0gMSk7CisKKyAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaW5kZXgpOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IEVOVFJZX05FWFQoZW50cnkpKSB7CisgICAgICAgIGlmIChlbnRyeS0+a2V5X2hhc2ggPT0ga2V5X2hhc2ggJiYgaHQtPmNvbXBhcmVfZnVuYyhrZXksIGVudHJ5KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBlbnRyeTsKK30KKworc3RhdGljIGludAorX2hhc2h0YWJsZV9wb3BfZW50cnkoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9zaXplKQoreworICAgIFB5X3VoYXNoX3Qga2V5X2hhc2g7CisgICAgc2l6ZV90IGluZGV4OworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksICpwcmV2aW91czsKKworICAgIGtleV9oYXNoID0gaHQtPmhhc2hfZnVuYyhrZXkpOworICAgIGluZGV4ID0ga2V5X2hhc2ggJiAoaHQtPm51bV9idWNrZXRzIC0gMSk7CisKKyAgICBwcmV2aW91cyA9IE5VTEw7CisgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGluZGV4KTsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICBpZiAoZW50cnktPmtleV9oYXNoID09IGtleV9oYXNoICYmIGh0LT5jb21wYXJlX2Z1bmMoa2V5LCBlbnRyeSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcHJldmlvdXMgPSBlbnRyeTsKKyAgICB9CisKKyAgICBpZiAoZW50cnkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBfUHlfc2xpc3RfcmVtb3ZlKCZodC0+YnVja2V0c1tpbmRleF0sIChfUHlfc2xpc3RfaXRlbV90ICopcHJldmlvdXMsCisgICAgICAgICAgICAgICAgICAgICAoX1B5X3NsaXN0X2l0ZW1fdCAqKWVudHJ5KTsKKyAgICBodC0+ZW50cmllcy0tOworCisgICAgaWYgKGRhdGEgIT0gTlVMTCkKKyAgICAgICAgX1B5X0hBU0hUQUJMRV9FTlRSWV9SRUFEX0RBVEEoaHQsIGRhdGEsIGRhdGFfc2l6ZSwgZW50cnkpOworICAgIGh0LT5hbGxvYy5mcmVlKGVudHJ5KTsKKworICAgIGlmICgoZmxvYXQpaHQtPmVudHJpZXMgLyAoZmxvYXQpaHQtPm51bV9idWNrZXRzIDwgSEFTSFRBQkxFX0xPVykKKyAgICAgICAgaGFzaHRhYmxlX3JlaGFzaChodCk7CisgICAgcmV0dXJuIDE7Cit9CisKKy8qIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgaGFzaC4gVGhlIGtleSBtdXN0IG5vdCBiZSBwcmVzZW50IGluIHRoZSBoYXNoIHRhYmxlLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gbWVtb3J5IGVycm9yLiAqLworaW50CitfUHlfaGFzaHRhYmxlX3NldChfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXksCisgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9zaXplKQoreworICAgIFB5X3VoYXNoX3Qga2V5X2hhc2g7CisgICAgc2l6ZV90IGluZGV4OworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyAgICBhc3NlcnQoZGF0YSAhPSBOVUxMIHx8IGRhdGFfc2l6ZSA9PSAwKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgLyogRG9uJ3Qgd3JpdGUgdGhlIGFzc2VydGlvbiBvbiBhIHNpbmdsZSBsaW5lIGJlY2F1c2UgaXQgaXMgaW50ZXJlc3RpbmcKKyAgICAgICB0byBrbm93IHRoZSBkdXBsaWNhdGVkIGVudHJ5IGlmIHRoZSBhc3NlcnRpb24gZmFpbGVkLiBUaGUgZW50cnkgY2FuCisgICAgICAgYmUgcmVhZCB1c2luZyBhIGRlYnVnZ2VyLiAqLworICAgIGVudHJ5ID0gX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkoaHQsIGtleSk7CisgICAgYXNzZXJ0KGVudHJ5ID09IE5VTEwpOworI2VuZGlmCisKKyAgICBrZXlfaGFzaCA9IGh0LT5oYXNoX2Z1bmMoa2V5KTsKKyAgICBpbmRleCA9IGtleV9oYXNoICYgKGh0LT5udW1fYnVja2V0cyAtIDEpOworCisgICAgZW50cnkgPSBodC0+YWxsb2MubWFsbG9jKEhBU0hUQUJMRV9JVEVNX1NJWkUoaHQpKTsKKyAgICBpZiAoZW50cnkgPT0gTlVMTCkgeworICAgICAgICAvKiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGVudHJ5LT5rZXkgPSAodm9pZCAqKWtleTsKKyAgICBlbnRyeS0+a2V5X2hhc2ggPSBrZXlfaGFzaDsKKworICAgIGFzc2VydChkYXRhX3NpemUgPT0gaHQtPmRhdGFfc2l6ZSk7CisgICAgbWVtY3B5KF9QWV9IQVNIVEFCTEVfRU5UUllfREFUQShlbnRyeSksIGRhdGEsIGRhdGFfc2l6ZSk7CisKKyAgICBfUHlfc2xpc3RfcHJlcGVuZCgmaHQtPmJ1Y2tldHNbaW5kZXhdLCAoX1B5X3NsaXN0X2l0ZW1fdCopZW50cnkpOworICAgIGh0LT5lbnRyaWVzKys7CisKKyAgICBpZiAoKGZsb2F0KWh0LT5lbnRyaWVzIC8gKGZsb2F0KWh0LT5udW1fYnVja2V0cyA+IEhBU0hUQUJMRV9ISUdIKQorICAgICAgICBoYXNodGFibGVfcmVoYXNoKGh0KTsKKyAgICByZXR1cm4gMDsKK30KKworLyogR2V0IGRhdGEgZnJvbSBhbiBlbnRyeS4gQ29weSBlbnRyeSBkYXRhIGludG8gZGF0YSBhbmQgcmV0dXJuIDEgaWYgdGhlIGVudHJ5CisgICBleGlzdHMsIHJldHVybiAwIGlmIHRoZSBlbnRyeSBkb2VzIG5vdCBleGlzdC4gKi8KK2ludAorX1B5X2hhc2h0YWJsZV9nZXQoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9zaXplKQoreworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyAgICBhc3NlcnQoZGF0YSAhPSBOVUxMKTsKKworICAgIGVudHJ5ID0gX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkoaHQsIGtleSk7CisgICAgaWYgKGVudHJ5ID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIF9QeV9IQVNIVEFCTEVfRU5UUllfUkVBRF9EQVRBKGh0LCBkYXRhLCBkYXRhX3NpemUsIGVudHJ5KTsKKyAgICByZXR1cm4gMTsKK30KKworaW50CitfUHlfaGFzaHRhYmxlX3BvcChfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXksIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUpCit7CisgICAgYXNzZXJ0KGRhdGEgIT0gTlVMTCk7CisgICAgYXNzZXJ0KGh0LT5mcmVlX2RhdGFfZnVuYyA9PSBOVUxMKTsKKyAgICByZXR1cm4gX2hhc2h0YWJsZV9wb3BfZW50cnkoaHQsIGtleSwgZGF0YSwgZGF0YV9zaXplKTsKK30KKworLyogRGVsZXRlIGFuIGVudHJ5LiBUaGUgZW50cnkgbXVzdCBleGlzdC4gKi8KK3ZvaWQKK19QeV9oYXNodGFibGVfZGVsZXRlKF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgaW50IGZvdW5kID0gX2hhc2h0YWJsZV9wb3BfZW50cnkoaHQsIGtleSwgTlVMTCwgMCk7CisgICAgYXNzZXJ0KGZvdW5kKTsKKyNlbHNlCisgICAgKHZvaWQpX2hhc2h0YWJsZV9wb3BfZW50cnkoaHQsIGtleSwgTlVMTCwgMCk7CisjZW5kaWYKK30KKworLyogUHJvdG90eXBlIGZvciBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yZWFjaAorICAga2V5L3ZhbHVlIHBhaXIgaW4gdGhlIGhhc2ggYnkgaGFzaHRhYmxlX2ZvcmVhY2goKS4gIEl0ZXJhdGlvbgorICAgc3RvcHMgaWYgYSBub24temVybyB2YWx1ZSBpcyByZXR1cm5lZC4gKi8KK2ludAorX1B5X2hhc2h0YWJsZV9mb3JlYWNoKF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnVuYykgKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKmFyZyksCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKQoreworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisgICAgc2l6ZV90IGh2OworCisgICAgZm9yIChodiA9IDA7IGh2IDwgaHQtPm51bV9idWNrZXRzOyBodisrKSB7CisgICAgICAgIGZvciAoZW50cnkgPSBUQUJMRV9IRUFEKGh0LCBodik7IGVudHJ5OyBlbnRyeSA9IEVOVFJZX05FWFQoZW50cnkpKSB7CisgICAgICAgICAgICBpbnQgcmVzID0gZnVuYyhlbnRyeSwgYXJnKTsKKyAgICAgICAgICAgIGlmIChyZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2hhc2h0YWJsZV9yZWhhc2goX1B5X2hhc2h0YWJsZV90ICpodCkKK3sKKyAgICBzaXplX3QgYnVja2V0c19zaXplLCBuZXdfc2l6ZSwgYnVja2V0OworICAgIF9QeV9zbGlzdF90ICpvbGRfYnVja2V0cyA9IE5VTEw7CisgICAgc2l6ZV90IG9sZF9udW1fYnVja2V0czsKKworICAgIG5ld19zaXplID0gcm91bmRfc2l6ZSgoc2l6ZV90KShodC0+ZW50cmllcyAqIEhBU0hUQUJMRV9SRUhBU0hfRkFDVE9SKSk7CisgICAgaWYgKG5ld19zaXplID09IGh0LT5udW1fYnVja2V0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgb2xkX251bV9idWNrZXRzID0gaHQtPm51bV9idWNrZXRzOworCisgICAgYnVja2V0c19zaXplID0gbmV3X3NpemUgKiBzaXplb2YoaHQtPmJ1Y2tldHNbMF0pOworICAgIG9sZF9idWNrZXRzID0gaHQtPmJ1Y2tldHM7CisgICAgaHQtPmJ1Y2tldHMgPSBodC0+YWxsb2MubWFsbG9jKGJ1Y2tldHNfc2l6ZSk7CisgICAgaWYgKGh0LT5idWNrZXRzID09IE5VTEwpIHsKKyAgICAgICAgLyogY2FuY2VsIHJlaGFzaCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlICovCisgICAgICAgIGh0LT5idWNrZXRzID0gb2xkX2J1Y2tldHMgOworICAgICAgICAvKiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtZW1zZXQoaHQtPmJ1Y2tldHMsIDAsIGJ1Y2tldHNfc2l6ZSk7CisKKyAgICBodC0+bnVtX2J1Y2tldHMgPSBuZXdfc2l6ZTsKKworICAgIGZvciAoYnVja2V0ID0gMDsgYnVja2V0IDwgb2xkX251bV9idWNrZXRzOyBidWNrZXQrKykgeworICAgICAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCAqbmV4dDsKKyAgICAgICAgZm9yIChlbnRyeSA9IEJVQ0tFVFNfSEVBRChvbGRfYnVja2V0c1tidWNrZXRdKTsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBuZXh0KSB7CisgICAgICAgICAgICBzaXplX3QgZW50cnlfaW5kZXg7CisKKyAgICAgICAgICAgIGFzc2VydChodC0+aGFzaF9mdW5jKGVudHJ5LT5rZXkpID09IGVudHJ5LT5rZXlfaGFzaCk7CisgICAgICAgICAgICBuZXh0ID0gRU5UUllfTkVYVChlbnRyeSk7CisgICAgICAgICAgICBlbnRyeV9pbmRleCA9IGVudHJ5LT5rZXlfaGFzaCAmIChuZXdfc2l6ZSAtIDEpOworCisgICAgICAgICAgICBfUHlfc2xpc3RfcHJlcGVuZCgmaHQtPmJ1Y2tldHNbZW50cnlfaW5kZXhdLCAoX1B5X3NsaXN0X2l0ZW1fdCopZW50cnkpOworICAgICAgICB9CisgICAgfQorCisgICAgaHQtPmFsbG9jLmZyZWUob2xkX2J1Y2tldHMpOworfQorCit2b2lkCitfUHlfaGFzaHRhYmxlX2NsZWFyKF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgKm5leHQ7CisgICAgc2l6ZV90IGk7CisKKyAgICBmb3IgKGk9MDsgaSA8IGh0LT5udW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgIGZvciAoZW50cnkgPSBUQUJMRV9IRUFEKGh0LCBpKTsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBuZXh0KSB7CisgICAgICAgICAgICBuZXh0ID0gRU5UUllfTkVYVChlbnRyeSk7CisgICAgICAgICAgICBpZiAoaHQtPmZyZWVfZGF0YV9mdW5jKQorICAgICAgICAgICAgICAgIGh0LT5mcmVlX2RhdGFfZnVuYyhfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKGVudHJ5KSk7CisgICAgICAgICAgICBodC0+YWxsb2MuZnJlZShlbnRyeSk7CisgICAgICAgIH0KKyAgICAgICAgX1B5X3NsaXN0X2luaXQoJmh0LT5idWNrZXRzW2ldKTsKKyAgICB9CisgICAgaHQtPmVudHJpZXMgPSAwOworICAgIGhhc2h0YWJsZV9yZWhhc2goaHQpOworfQorCit2b2lkCitfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koX1B5X2hhc2h0YWJsZV90ICpodCkKK3sKKyAgICBzaXplX3QgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBodC0+bnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICBfUHlfc2xpc3RfaXRlbV90ICplbnRyeSA9IGh0LT5idWNrZXRzW2ldLmhlYWQ7CisgICAgICAgIHdoaWxlIChlbnRyeSkgeworICAgICAgICAgICAgX1B5X3NsaXN0X2l0ZW1fdCAqZW50cnlfbmV4dCA9IGVudHJ5LT5uZXh0OworICAgICAgICAgICAgaWYgKGh0LT5mcmVlX2RhdGFfZnVuYykKKyAgICAgICAgICAgICAgICBodC0+ZnJlZV9kYXRhX2Z1bmMoX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBX0FTX1ZPSURfUChlbnRyeSkpOworICAgICAgICAgICAgaHQtPmFsbG9jLmZyZWUoZW50cnkpOworICAgICAgICAgICAgZW50cnkgPSBlbnRyeV9uZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgaHQtPmFsbG9jLmZyZWUoaHQtPmJ1Y2tldHMpOworICAgIGh0LT5hbGxvYy5mcmVlKGh0KTsKK30KKworLyogUmV0dXJuIGEgY29weSBvZiB0aGUgaGFzaCB0YWJsZSAqLworX1B5X2hhc2h0YWJsZV90ICoKK19QeV9oYXNodGFibGVfY29weShfUHlfaGFzaHRhYmxlX3QgKnNyYykKK3sKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmRzdDsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworICAgIHNpemVfdCBidWNrZXQ7CisgICAgaW50IGVycjsKKyAgICB2b2lkICpkYXRhLCAqbmV3X2RhdGE7CisKKyAgICBkc3QgPSBfUHlfaGFzaHRhYmxlX25ld19mdWxsKHNyYy0+ZGF0YV9zaXplLCBzcmMtPm51bV9idWNrZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYy0+aGFzaF9mdW5jLCBzcmMtPmNvbXBhcmVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMtPmNvcHlfZGF0YV9mdW5jLCBzcmMtPmZyZWVfZGF0YV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYy0+Z2V0X2RhdGFfc2l6ZV9mdW5jLCAmc3JjLT5hbGxvYyk7CisgICAgaWYgKGRzdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoYnVja2V0PTA7IGJ1Y2tldCA8IHNyYy0+bnVtX2J1Y2tldHM7IGJ1Y2tldCsrKSB7CisgICAgICAgIGVudHJ5ID0gVEFCTEVfSEVBRChzcmMsIGJ1Y2tldCk7CisgICAgICAgIGZvciAoOyBlbnRyeTsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICAgICAgaWYgKHNyYy0+Y29weV9kYXRhX2Z1bmMpIHsKKyAgICAgICAgICAgICAgICBkYXRhID0gX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBX0FTX1ZPSURfUChlbnRyeSk7CisgICAgICAgICAgICAgICAgbmV3X2RhdGEgPSBzcmMtPmNvcHlfZGF0YV9mdW5jKGRhdGEpOworICAgICAgICAgICAgICAgIGlmIChuZXdfZGF0YSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBlcnIgPSBfUHlfaGFzaHRhYmxlX3NldChkc3QsIGVudHJ5LT5rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19kYXRhLCBzcmMtPmRhdGFfc2l6ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBlcnIgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZGF0YSA9IF9QWV9IQVNIVEFCTEVfRU5UUllfREFUQShlbnRyeSk7CisgICAgICAgICAgICAgICAgZXJyID0gX1B5X2hhc2h0YWJsZV9zZXQoZHN0LCBlbnRyeS0+a2V5LCBkYXRhLCBzcmMtPmRhdGFfc2l6ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KGRzdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGRzdDsKK30KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9oYXNodGFibGUuaCBiL01vZHVsZXMvaGFzaHRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5ZTQ5MAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvaGFzaHRhYmxlLmgKQEAgLTAsMCArMSwxMjggQEAKKyNpZm5kZWYgUHlfSEFTSFRBQkxFX0gKKyNkZWZpbmUgUHlfSEFTSFRBQkxFX0gKKworLyogVGhlIHdob2xlIEFQSSBpcyBwcml2YXRlICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCisKK3R5cGVkZWYgc3RydWN0IF9QeV9zbGlzdF9pdGVtX3MgeworICAgIHN0cnVjdCBfUHlfc2xpc3RfaXRlbV9zICpuZXh0OworfSBfUHlfc2xpc3RfaXRlbV90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgX1B5X3NsaXN0X2l0ZW1fdCAqaGVhZDsKK30gX1B5X3NsaXN0X3Q7CisKKyNkZWZpbmUgX1B5X1NMSVNUX0lURU1fTkVYVChJVEVNKSAoKChfUHlfc2xpc3RfaXRlbV90ICopSVRFTSktPm5leHQpCisKKyNkZWZpbmUgX1B5X1NMSVNUX0hFQUQoU0xJU1QpICgoKF9QeV9zbGlzdF90ICopU0xJU1QpLT5oZWFkKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogdXNlZCBieSBfUHlfaGFzaHRhYmxlX3QuYnVja2V0cyB0byBsaW5rIGVudHJpZXMgKi8KKyAgICBfUHlfc2xpc3RfaXRlbV90IF9QeV9zbGlzdF9pdGVtOworCisgICAgY29uc3Qgdm9pZCAqa2V5OworICAgIFB5X3VoYXNoX3Qga2V5X2hhc2g7CisKKyAgICAvKiBkYXRhIGZvbGxvd3MgKi8KK30gX1B5X2hhc2h0YWJsZV9lbnRyeV90OworCisjZGVmaW5lIF9QWV9IQVNIVEFCTEVfRU5UUllfREFUQShFTlRSWSkgXAorICAgICAgICAoKGNoYXIgKikoRU5UUlkpICsgc2l6ZW9mKF9QeV9oYXNodGFibGVfZW50cnlfdCkpCisKKyNkZWZpbmUgX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBX0FTX1ZPSURfUChFTlRSWSkgXAorICAgICAgICAoKih2b2lkICoqKV9QWV9IQVNIVEFCTEVfRU5UUllfREFUQShFTlRSWSkpCisKKyNkZWZpbmUgX1B5X0hBU0hUQUJMRV9FTlRSWV9SRUFEX0RBVEEoVEFCTEUsIERBVEEsIERBVEFfU0laRSwgRU5UUlkpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgYXNzZXJ0KChEQVRBX1NJWkUpID09IChUQUJMRSktPmRhdGFfc2l6ZSk7IFwKKyAgICAgICAgbWVtY3B5KERBVEEsIF9QWV9IQVNIVEFCTEVfRU5UUllfREFUQShFTlRSWSksIERBVEFfU0laRSk7IFwKKyAgICB9IHdoaWxlICgwKQorCit0eXBlZGVmIFB5X3VoYXNoX3QgKCpfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYykgKGNvbnN0IHZvaWQgKmtleSk7Cit0eXBlZGVmIGludCAoKl9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jKSAoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmhlKTsKK3R5cGVkZWYgdm9pZCogKCpfUHlfaGFzaHRhYmxlX2NvcHlfZGF0YV9mdW5jKSh2b2lkICpkYXRhKTsKK3R5cGVkZWYgdm9pZCAoKl9QeV9oYXNodGFibGVfZnJlZV9kYXRhX2Z1bmMpKHZvaWQgKmRhdGEpOwordHlwZWRlZiBzaXplX3QgKCpfUHlfaGFzaHRhYmxlX2dldF9kYXRhX3NpemVfZnVuYykodm9pZCAqZGF0YSk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQqICgqbWFsbG9jKSAoc2l6ZV90IHNpemUpOworCisgICAgLyogcmVsZWFzZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQgKCpmcmVlKSAodm9pZCAqcHRyKTsKK30gX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHNpemVfdCBudW1fYnVja2V0czsKKyAgICBzaXplX3QgZW50cmllczsgLyogVG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhYmxlLiAqLworICAgIF9QeV9zbGlzdF90ICpidWNrZXRzOworICAgIHNpemVfdCBkYXRhX3NpemU7CisKKyAgICBfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyBoYXNoX2Z1bmM7CisgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMgY29tcGFyZV9mdW5jOworICAgIF9QeV9oYXNodGFibGVfY29weV9kYXRhX2Z1bmMgY29weV9kYXRhX2Z1bmM7CisgICAgX1B5X2hhc2h0YWJsZV9mcmVlX2RhdGFfZnVuYyBmcmVlX2RhdGFfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2dldF9kYXRhX3NpemVfZnVuYyBnZXRfZGF0YV9zaXplX2Z1bmM7CisgICAgX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdCBhbGxvYzsKK30gX1B5X2hhc2h0YWJsZV90OworCisvKiBoYXNoIGFuZCBjb21wYXJlIGZ1bmN0aW9ucyBmb3IgaW50ZWdlcnMgYW5kIHBvaW50ZXJzICovCitQeUFQSV9GVU5DKFB5X3VoYXNoX3QpIF9QeV9oYXNodGFibGVfaGFzaF9wdHIoY29uc3Qgdm9pZCAqa2V5KTsKK1B5QVBJX0ZVTkMoUHlfdWhhc2hfdCkgX1B5X2hhc2h0YWJsZV9oYXNoX2ludChjb25zdCB2b2lkICprZXkpOworUHlBUElfRlVOQyhpbnQpIF9QeV9oYXNodGFibGVfY29tcGFyZV9kaXJlY3QoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5KTsKKworUHlBUElfRlVOQyhfUHlfaGFzaHRhYmxlX3QgKikgX1B5X2hhc2h0YWJsZV9uZXcoCisgICAgc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICBfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyBoYXNoX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMgY29tcGFyZV9mdW5jKTsKK1B5QVBJX0ZVTkMoX1B5X2hhc2h0YWJsZV90ICopIF9QeV9oYXNodGFibGVfbmV3X2Z1bGwoCisgICAgc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICBzaXplX3QgaW5pdF9zaXplLAorICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9jb3B5X2RhdGFfZnVuYyBjb3B5X2RhdGFfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2ZyZWVfZGF0YV9mdW5jIGZyZWVfZGF0YV9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfZ2V0X2RhdGFfc2l6ZV9mdW5jIGdldF9kYXRhX3NpemVfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90ICphbGxvY2F0b3IpOworUHlBUElfRlVOQyhfUHlfaGFzaHRhYmxlX3QgKikgX1B5X2hhc2h0YWJsZV9jb3B5KF9QeV9oYXNodGFibGVfdCAqc3JjKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5X2hhc2h0YWJsZV9jbGVhcihfUHlfaGFzaHRhYmxlX3QgKmh0KTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5X2hhc2h0YWJsZV9kZXN0cm95KF9QeV9oYXNodGFibGVfdCAqaHQpOworCit0eXBlZGVmIGludCAoKl9QeV9oYXNodGFibGVfZm9yZWFjaF9mdW5jKSAoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqYXJnKTsKKworUHlBUElfRlVOQyhpbnQpIF9QeV9oYXNodGFibGVfZm9yZWFjaCgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIF9QeV9oYXNodGFibGVfZm9yZWFjaF9mdW5jIGZ1bmMsIHZvaWQgKmFyZyk7CitQeUFQSV9GVU5DKHNpemVfdCkgX1B5X2hhc2h0YWJsZV9zaXplKF9QeV9oYXNodGFibGVfdCAqaHQpOworCitQeUFQSV9GVU5DKF9QeV9oYXNodGFibGVfZW50cnlfdCopIF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgY29uc3Qgdm9pZCAqa2V5KTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX3NldCgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSwKKyAgICB2b2lkICpkYXRhLAorICAgIHNpemVfdCBkYXRhX3NpemUpOworUHlBUElfRlVOQyhpbnQpIF9QeV9oYXNodGFibGVfZ2V0KAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgY29uc3Qgdm9pZCAqa2V5LAorICAgIHZvaWQgKmRhdGEsCisgICAgc2l6ZV90IGRhdGFfc2l6ZSk7CitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9wb3AoCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBjb25zdCB2b2lkICprZXksCisgICAgdm9pZCAqZGF0YSwKKyAgICBzaXplX3QgZGF0YV9zaXplKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5X2hhc2h0YWJsZV9kZWxldGUoCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBjb25zdCB2b2lkICprZXkpOworCisjZGVmaW5lIF9QeV9IQVNIVEFCTEVfU0VUKFRBQkxFLCBLRVksIERBVEEpIFwKKyAgICBfUHlfaGFzaHRhYmxlX3NldChUQUJMRSwgS0VZLCAmKERBVEEpLCBzaXplb2YoREFUQSkpCisKKyNkZWZpbmUgX1B5X0hBU0hUQUJMRV9HRVQoVEFCTEUsIEtFWSwgREFUQSkgXAorICAgIF9QeV9oYXNodGFibGVfZ2V0KFRBQkxFLCBLRVksICYoREFUQSksIHNpemVvZihEQVRBKSkKKworI2VuZGlmICAgLyogUHlfTElNSVRFRF9BUEkgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jIGIvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYwppbmRleCAwMTIzMTgxLi5kYjdjZGZlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCisrKyBiL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKQEAgLTQwMSw3ICs0MDEsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBQeU9iamVjdCAqaXQ7Ci0gICAgaW50IG51bXJlYWQ7CisgICAgaW50IG51bXJlYWQ7ICAvKiAwIDw9IG51bXJlYWQgPD0gTElOS0NFTExTICovCiAgICAgUHlPYmplY3QgKm5leHRsaW5rOwogICAgIFB5T2JqZWN0ICoodmFsdWVzW0xJTktDRUxMU10pOwogfSB0ZWVkYXRhb2JqZWN0OwpAQCAtNDA5LDcgKzQwOSw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIHRlZWRhdGFvYmplY3QgKmRhdGFvYmo7Ci0gICAgaW50IGluZGV4OworICAgIGludCBpbmRleDsgICAgLyogMCA8PSBpbmRleCA8PSBMSU5LQ0VMTFMgKi8KICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CiB9IHRlZW9iamVjdDsKIApAQCAtMjA1Nyw2ICsyMDU3LDE4IEBACiAgICAgUHlfVFlQRShseiktPnRwX2ZyZWUobHopOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorcHJvZHVjdF9zaXplb2YocHJvZHVjdG9iamVjdCAqbHosIHZvaWQgKnVudXNlZCkKK3sKKyAgICBQeV9zc2l6ZV90IHJlczsKKworICAgIHJlcyA9IHNpemVvZihwcm9kdWN0b2JqZWN0KTsKKyAgICByZXMgKz0gUHlUdXBsZV9HRVRfU0laRShsei0+cG9vbHMpICogc2l6ZW9mKFB5X3NzaXplX3QpOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKK30KKworUHlEb2NfU1RSVkFSKHNpemVvZl9kb2MsICJSZXR1cm5zIHNpemUgaW4gbWVtb3J5LCBpbiBieXRlcy4iKTsKKwogc3RhdGljIGludAogcHJvZHVjdF90cmF2ZXJzZShwcm9kdWN0b2JqZWN0ICpseiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCiB7CkBAIC0yMjI2LDYgKzIyMzgsOCBAQAogICAgICByZWR1Y2VfZG9jfSwKICAgICB7Il9fc2V0c3RhdGVfXyIsICAgIChQeUNGdW5jdGlvbilwcm9kdWN0X3NldHN0YXRlLCAgICBNRVRIX08sCiAgICAgIHNldHN0YXRlX2RvY30sCisgICAgeyJfX3NpemVvZl9fIiwgICAgICAoUHlDRnVuY3Rpb24pcHJvZHVjdF9zaXplb2YsICAgICAgTUVUSF9OT0FSR1MsCisgICAgIHNpemVvZl9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjM2Niw2ICsyMzgwLDE2IEBACiAgICAgUHlfVFlQRShjbyktPnRwX2ZyZWUoY28pOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorY29tYmluYXRpb25zX3NpemVvZihjb21iaW5hdGlvbnNvYmplY3QgKmNvLCB2b2lkICp1bnVzZWQpCit7CisgICAgUHlfc3NpemVfdCByZXM7CisKKyAgICByZXMgPSBzaXplb2YoY29tYmluYXRpb25zb2JqZWN0KTsKKyAgICByZXMgKz0gY28tPnIgKiBzaXplb2YoUHlfc3NpemVfdCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOworfQorCiBzdGF0aWMgaW50CiBjb21iaW5hdGlvbnNfdHJhdmVyc2UoY29tYmluYXRpb25zb2JqZWN0ICpjbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCiB7CkBAIC0yNTM3LDYgKzI1NjEsOCBAQAogICAgICByZWR1Y2VfZG9jfSwKICAgICB7Il9fc2V0c3RhdGVfXyIsICAgIChQeUNGdW5jdGlvbiljb21iaW5hdGlvbnNfc2V0c3RhdGUsICAgIE1FVEhfTywKICAgICAgc2V0c3RhdGVfZG9jfSwKKyAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbiljb21iaW5hdGlvbnNfc2l6ZW9mLCAgICAgIE1FVEhfTk9BUkdTLAorICAgICBzaXplb2ZfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI2OTUsNiArMjcyMSwxNiBAQAogICAgIFB5X1RZUEUoY28pLT50cF9mcmVlKGNvKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2N3cl9zaXplb2YoY3dyb2JqZWN0ICpjbywgdm9pZCAqdW51c2VkKQoreworICAgIFB5X3NzaXplX3QgcmVzOworCisgICAgcmVzID0gc2l6ZW9mKGN3cm9iamVjdCk7CisgICAgcmVzICs9IGNvLT5yICogc2l6ZW9mKFB5X3NzaXplX3QpOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKK30KKwogc3RhdGljIGludAogY3dyX3RyYXZlcnNlKGN3cm9iamVjdCAqY28sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewpAQCAtMjg1NCw2ICsyODkwLDggQEAKICAgICAgcmVkdWNlX2RvY30sCiAgICAgeyJfX3NldHN0YXRlX18iLCAgICAoUHlDRnVuY3Rpb24pY3dyX3NldHN0YXRlLCAgICBNRVRIX08sCiAgICAgIHNldHN0YXRlX2RvY30sCisgICAgeyJfX3NpemVvZl9fIiwgICAgICAoUHlDRnVuY3Rpb24pY3dyX3NpemVvZiwgICAgICBNRVRIX05PQVJHUywKKyAgICAgc2l6ZW9mX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0zMDMwLDYgKzMwNjgsMTcgQEAKICAgICBQeV9UWVBFKHBvKS0+dHBfZnJlZShwbyk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitwZXJtdXRhdGlvbnNfc2l6ZW9mKHBlcm11dGF0aW9uc29iamVjdCAqcG8sIHZvaWQgKnVudXNlZCkKK3sKKyAgICBQeV9zc2l6ZV90IHJlczsKKworICAgIHJlcyA9IHNpemVvZihwZXJtdXRhdGlvbnNvYmplY3QpOworICAgIHJlcyArPSBQeVR1cGxlX0dFVF9TSVpFKHBvLT5wb29sKSAqIHNpemVvZihQeV9zc2l6ZV90KTsKKyAgICByZXMgKz0gcG8tPnIgKiBzaXplb2YoUHlfc3NpemVfdCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOworfQorCiBzdGF0aWMgaW50CiBwZXJtdXRhdGlvbnNfdHJhdmVyc2UocGVybXV0YXRpb25zb2JqZWN0ICpwbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCiB7CkBAIC0zMjM1LDYgKzMyODQsOCBAQAogICAgICByZWR1Y2VfZG9jfSwKICAgICB7Il9fc2V0c3RhdGVfXyIsICAgIChQeUNGdW5jdGlvbilwZXJtdXRhdGlvbnNfc2V0c3RhdGUsICAgIE1FVEhfTywKICAgICAgc2V0c3RhdGVfZG9jfSwKKyAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilwZXJtdXRhdGlvbnNfc2l6ZW9mLCAgICAgIE1FVEhfTk9BUkdTLAorICAgICBzaXplb2ZfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWFpbi5jIGIvTW9kdWxlcy9tYWluLmMKaW5kZXggM2NmYzljMy4uODdhMjFkNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tYWluLmMKKysrIGIvTW9kdWxlcy9tYWluLmMKQEAgLTUsMTEgKzUsNiBAQAogCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAKLSNpZmRlZiBfX1ZNUwotI2Vycm9yICJQRVAgMTE6IFZNUyBpcyBub3cgdW5zdXBwb3J0ZWQsIGNvZGUgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQiCi0jaW5jbHVkZSA8dW5peGxpYi5oPgotI2VuZGlmCi0KICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaWZkZWYgSEFWRV9GQ05UTF9ICkBAIC0yMiwxNSArMTcsMTEgQEAKICNpbmNsdWRlIDxjcnRkYmcuaD4KICNlbmRpZgogCi0jaWYgKGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKSkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICNkZWZpbmUgUFlUSE9OSE9NRUhFTFAgIjxwcmVmaXg+XFxsaWIiCiAjZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIFBZVEhPTkhPTUVIRUxQICI8cHJlZml4Pi9MaWIiCi0jZWxzZQogI2RlZmluZSBQWVRIT05IT01FSEVMUCAiPHByZWZpeD4vcHl0aG9uWC5YIgogI2VuZGlmCi0jZW5kaWYKIAogI2luY2x1ZGUgInB5Z2V0b3B0LmgiCiAKQEAgLTQ3LDcgKzM4LDcgQEAKIHN0YXRpYyBpbnQgIG9yaWdfYXJnYzsKIAogLyogY29tbWFuZCBsaW5lIG9wdGlvbnMgKi8KLSNkZWZpbmUgQkFTRV9PUFRTIEwiYkJjOmRFaGlKbTpPcVJzU3R1dlZXOnhYOj8iCisjZGVmaW5lIEJBU0VfT1BUUyBMImJCYzpkRWhpSUptOk9xUnNTdHV2Vlc6eFg6PyIKIAogI2RlZmluZSBQUk9HUkFNX09QVFMgQkFTRV9PUFRTCiAKQEAgLTY5LDYgKzYwLDcgQEAKIHN0YXRpYyBjaGFyICp1c2FnZV8yID0gIlwKIC1pICAgICA6IGluc3BlY3QgaW50ZXJhY3RpdmVseSBhZnRlciBydW5uaW5nIHNjcmlwdDsgZm9yY2VzIGEgcHJvbXB0IGV2ZW5cblwKICAgICAgICAgIGlmIHN0ZGluIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHRlcm1pbmFsOyBhbHNvIFBZVEhPTklOU1BFQ1Q9eFxuXAorLUkgICAgIDogaXNvbGF0ZSBQeXRob24gZnJvbSB0aGUgdXNlcidzIGVudmlyb25tZW50IChpbXBsaWVzIC1FIGFuZCAtcylcblwKIC1tIG1vZCA6IHJ1biBsaWJyYXJ5IG1vZHVsZSBhcyBhIHNjcmlwdCAodGVybWluYXRlcyBvcHRpb24gbGlzdClcblwKIC1PICAgICA6IG9wdGltaXplIGdlbmVyYXRlZCBieXRlY29kZSBzbGlnaHRseTsgYWxzbyBQWVRIT05PUFRJTUlaRT14XG5cCiAtT08gICAgOiByZW1vdmUgZG9jLXN0cmluZ3MgaW4gYWRkaXRpb24gdG8gdGhlIC1PIG9wdGltaXphdGlvbnNcblwKQEAgLTEyNywyNiArMTE5LDE0IEBACiAgICAgICAgIGZwcmludGYoZiwgdXNhZ2VfNSwgREVMSU0sIFBZVEhPTkhPTUVIRUxQKTsKICAgICAgICAgZnB1dHModXNhZ2VfNiwgZik7CiAgICAgfQotI2lmIGRlZmluZWQoX19WTVMpCi0gICAgaWYgKGV4aXRjb2RlID09IDApIHsKLSAgICAgICAgLyogc3VwcHJlc3MgJ2Vycm9yJyBtZXNzYWdlICovCi0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogU1RTJE1fSU5ISUJfTVNHICsgU1MkX0FCT1JUICovCi0gICAgICAgIHJldHVybiAweDEwMDAwMDJjOwotICAgIH0KLSNlbHNlCiAgICAgcmV0dXJuIGV4aXRjb2RlOwotI2VuZGlmCi0gICAgLypOT1RSRUFDSEVEKi8KIH0KIAogc3RhdGljIHZvaWQgUnVuU3RhcnR1cEZpbGUoUHlDb21waWxlckZsYWdzICpjZikKIHsKICAgICBjaGFyICpzdGFydHVwID0gUHlfR0VURU5WKCJQWVRIT05TVEFSVFVQIik7CiAgICAgaWYgKHN0YXJ0dXAgIT0gTlVMTCAmJiBzdGFydHVwWzBdICE9ICdcMCcpIHsKLSAgICAgICAgRklMRSAqZnAgPSBmb3BlbihzdGFydHVwLCAiciIpOworICAgICAgICBGSUxFICpmcCA9IF9QeV9mb3BlbihzdGFydHVwLCAiciIpOwogICAgICAgICBpZiAoZnAgIT0gTlVMTCkgewogICAgICAgICAgICAgKHZvaWQpIFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzKGZwLCBzdGFydHVwLCAwLCBjZik7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMTY1LDYgKzE0NSwzMiBAQAogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgUnVuSW50ZXJhY3RpdmVIb29rKHZvaWQpCit7CisgICAgUHlPYmplY3QgKnN5cywgKmhvb2ssICpyZXN1bHQ7CisgICAgc3lzID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJzeXMiKTsKKyAgICBpZiAoc3lzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaG9vayA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoc3lzLCAiX19pbnRlcmFjdGl2ZWhvb2tfXyIpOworICAgIFB5X0RFQ1JFRihzeXMpOworICAgIGlmIChob29rID09IE5VTEwpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoaG9vaywgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihob29rKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybjsKKworZXJyb3I6CisgICAgUHlTeXNfV3JpdGVTdGRlcnIoIkZhaWxlZCBjYWxsaW5nIHN5cy5fX2ludGVyYWN0aXZlaG9va19fXG4iKTsKKyAgICBQeUVycl9QcmludCgpOworICAgIFB5RXJyX0NsZWFyKCk7Cit9CisKIAogc3RhdGljIGludCBSdW5Nb2R1bGUod2NoYXJfdCAqbW9kbmFtZSwgaW50IHNldF9hcmd2MCkKIHsKQEAgLTE3MiwxNyArMTc4LDIwIEBACiAgICAgcnVucHkgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInJ1bnB5Iik7CiAgICAgaWYgKHJ1bnB5ID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgaW1wb3J0IHJ1bnB5IG1vZHVsZVxuIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgcnVubW9kdWxlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhydW5weSwgIl9ydW5fbW9kdWxlX2FzX21haW4iKTsKICAgICBpZiAocnVubW9kdWxlID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgYWNjZXNzIHJ1bnB5Ll9ydW5fbW9kdWxlX2FzX21haW5cbiIpOworICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICBQeV9ERUNSRUYocnVucHkpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIG1vZHVsZSA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIobW9kbmFtZSwgd2NzbGVuKG1vZG5hbWUpKTsKICAgICBpZiAobW9kdWxlID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgY29udmVydCBtb2R1bGUgbmFtZSB0byB1bmljb2RlXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgUHlfREVDUkVGKHJ1bnB5KTsKICAgICAgICAgUHlfREVDUkVGKHJ1bm1vZHVsZSk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTE5MSw2ICsyMDAsNyBAQAogICAgIGlmIChydW5hcmdzID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAiQ291bGQgbm90IGNyZWF0ZSBhcmd1bWVudHMgZm9yIHJ1bnB5Ll9ydW5fbW9kdWxlX2FzX21haW5cbiIpOworICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICBQeV9ERUNSRUYocnVucHkpOwogICAgICAgICBQeV9ERUNSRUYocnVubW9kdWxlKTsKICAgICAgICAgUHlfREVDUkVGKG1vZHVsZSk7CkBAIC0yMzUsOCArMjQ1LDEwIEBACiAgICAgLyogYXJndjAgaXMgdXNhYmxlIGFzIGFuIGltcG9ydCBzb3VyY2UsIHNvIHB1dCBpdCBpbiBzeXMucGF0aFswXQogICAgICAgIGFuZCBpbXBvcnQgX19tYWluX18gKi8KICAgICBzeXNfcGF0aCA9IFB5U3lzX0dldE9iamVjdCgicGF0aCIpOwotICAgIGlmIChzeXNfcGF0aCA9PSBOVUxMKQorICAgIGlmIChzeXNfcGF0aCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5wYXRoIik7CiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogICAgIGlmIChQeUxpc3RfU2V0SXRlbShzeXNfcGF0aCwgMCwgYXJndjApKSB7CiAgICAgICAgIGFyZ3YwID0gTlVMTDsKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTM2Niw3ICszNzgsNyBAQAogICAgICAgICAgICAgICAgY29tbWFuZCB0byBpbnRlcnByZXQuICovCiAKICAgICAgICAgICAgIGxlbiA9IHdjc2xlbihfUHlPU19vcHRhcmcpICsgMSArIDE7Ci0gICAgICAgICAgICBjb21tYW5kID0gKHdjaGFyX3QgKiltYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogbGVuKTsKKyAgICAgICAgICAgIGNvbW1hbmQgPSAod2NoYXJfdCAqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiBsZW4pOwogICAgICAgICAgICAgaWYgKGNvbW1hbmQgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IC1jIGFyZ3VtZW50Iik7CkBAIC0zOTgsNiArNDEwLDEyIEBACiAgICAgICAgICAgICBQeV9JbnRlcmFjdGl2ZUZsYWcrKzsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgJ0knOgorICAgICAgICAgICAgUHlfSXNvbGF0ZWRGbGFnKys7CisgICAgICAgICAgICBQeV9Ob1VzZXJTaXRlRGlyZWN0b3J5Kys7CisgICAgICAgICAgICBQeV9JZ25vcmVFbnZpcm9ubWVudEZsYWcrKzsKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIC8qIGNhc2UgJ0onOiByZXNlcnZlZCBmb3IgSnl0aG9uICovCiAKICAgICAgICAgY2FzZSAnTyc6CkBAIC00NzUsNyArNDkzLDcgQEAKICAgICAgICAgcmV0dXJuIHVzYWdlKDAsIGFyZ3ZbMF0pOwogCiAgICAgaWYgKHZlcnNpb24pIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJQeXRob24gJXNcbiIsIFBZX1ZFUlNJT04pOworICAgICAgICBwcmludGYoIlB5dGhvbiAlc1xuIiwgUFlfVkVSU0lPTik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtNDk1LDcgKzUxMyw3IEBACiAgICAgICAgICp3cCAhPSBMJ1wwJykgewogICAgICAgICB3Y2hhcl90ICpidWYsICp3YXJuaW5nOwogCi0gICAgICAgIGJ1ZiA9ICh3Y2hhcl90ICopbWFsbG9jKCh3Y3NsZW4od3ApICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBidWYgPSAod2NoYXJfdCAqKVB5TWVtX1Jhd01hbGxvYygod2NzbGVuKHdwKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IFBZVEhPTldBUk5JTkdTIik7CkBAIC01MDUsNyArNTIzLDcgQEAKICAgICAgICAgICAgICB3YXJuaW5nID0gd2NzdG9rKE5VTEwsIEwiLCIpKSB7CiAgICAgICAgICAgICBQeVN5c19BZGRXYXJuT3B0aW9uKHdhcm5pbmcpOwogICAgICAgICB9Ci0gICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShidWYpOwogICAgIH0KICNlbHNlCiAgICAgaWYgKChwID0gUHlfR0VURU5WKCJQWVRIT05XQVJOSU5HUyIpKSAmJiAqcCAhPSAnXDAnKSB7CkBAIC01MTQsMTIgKzUzMiwxMiBAQAogCiAgICAgICAgIC8qIHNldHRsZSBmb3Igc3RydG9rIGhlcmUgYXMgdGhlcmUncyBubyBvbmUgc3RhbmRhcmQKICAgICAgICAgICAgQzg5IHdjc3RvayAqLwotICAgICAgICBidWYgPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4ocCkgKyAxKTsKKyAgICAgICAgYnVmID0gKGNoYXIgKilQeU1lbV9SYXdNYWxsb2Moc3RybGVuKHApICsgMSk7CiAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSBQWVRIT05XQVJOSU5HUyIpOwogICAgICAgICBzdHJjcHkoYnVmLCBwKTsKLSAgICAgICAgb2xkbG9jID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKyAgICAgICAgb2xkbG9jID0gX1B5TWVtX1Jhd1N0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CiAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKICAgICAgICAgZm9yIChwID0gc3RydG9rKGJ1ZiwgIiwiKTsgcCAhPSBOVUxMOyBwID0gc3RydG9rKE5VTEwsICIsIikpIHsKICNpZmRlZiBfX0FQUExFX18KQEAgLTUzNywyMiArNTU1LDE1IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgIH0KICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgb2xkbG9jKTsKLSAgICAgICAgZnJlZShvbGRsb2MpOwotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShidWYpOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKGNvbW1hbmQgPT0gTlVMTCAmJiBtb2R1bGUgPT0gTlVMTCAmJiBfUHlPU19vcHRpbmQgPCBhcmdjICYmCiAgICAgICAgIHdjc2NtcChhcmd2W19QeU9TX29wdGluZF0sIEwiLSIpICE9IDApCiAgICAgewotI2lmZGVmIF9fVk1TCi0gICAgICAgIGZpbGVuYW1lID0gZGVjYyR0cmFuc2xhdGVfdm1zKGFyZ3ZbX1B5T1Nfb3B0aW5kXSk7Ci0gICAgICAgIGlmIChmaWxlbmFtZSA9PSAoY2hhciAqKTAgfHwgZmlsZW5hbWUgPT0gKGNoYXIgKiktMSkKLSAgICAgICAgICAgIGZpbGVuYW1lID0gYXJndltfUHlPU19vcHRpbmRdOwotCi0jZWxzZQogICAgICAgICBmaWxlbmFtZSA9IGFyZ3ZbX1B5T1Nfb3B0aW5kXTsKLSNlbmRpZgogICAgIH0KIAogICAgIHN0ZGluX2lzX2ludGVyYWN0aXZlID0gUHlfRmRJc0ludGVyYWN0aXZlKHN0ZGluLCAoY2hhciAqKTApOwpAQCAtNTg4LDExICs1OTksNiBAQAogI2VuZGlmIC8qICFNU19XSU5ET1dTICovCiAgICAgICAgIC8qIExlYXZlIHN0ZGVyciBhbG9uZSAtIGl0IHNob3VsZCBiZSB1bmJ1ZmZlcmVkIGFueXdheS4gKi8KICAgICB9Ci0jaWZkZWYgX19WTVMKLSAgICBlbHNlIHsKLSAgICAgICAgc2V0dmJ1ZiAoc3Rkb3V0LCAoY2hhciAqKU5VTEwsIF9JT0xCRiwgQlVGU0laKTsKLSAgICB9Ci0jZW5kaWYgLyogX19WTVMgKi8KIAogI2lmZGVmIF9fQVBQTEVfXwogICAgIC8qIE9uIE1hY09TIFgsIHdoZW4gdGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyBlbWJlZGRlZCBpbiBhbgpAQCAtNjA4LDcgKzYxNCw3IEBACiAgICAgICAgIHdjaGFyX3QqIGJ1ZmZlcjsKICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihwKSArIDE7CiAKLSAgICAgICAgYnVmZmVyID0gbWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGJ1ZmZlciA9IFB5TWVtX1Jhd01hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSBQWVRIT05FWEVDVVRBQkxFIik7CkBAIC02ODIsNyArNjg4LDcgQEAKIAogICAgIGlmIChjb21tYW5kKSB7CiAgICAgICAgIHN0cyA9IHJ1bl9jb21tYW5kKGNvbW1hbmQsICZjZik7Ci0gICAgICAgIGZyZWUoY29tbWFuZCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoY29tbWFuZCk7CiAgICAgfSBlbHNlIGlmIChtb2R1bGUpIHsKICAgICAgICAgc3RzID0gKFJ1bk1vZHVsZShtb2R1bGUsIDEpICE9IDApOwogICAgIH0KQEAgLTY5MSw2ICs2OTcsNyBAQAogICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCAmJiBzdGRpbl9pc19pbnRlcmFjdGl2ZSkgewogICAgICAgICAgICAgUHlfSW5zcGVjdEZsYWcgPSAwOyAvKiBkbyBleGl0IG9uIFN5c3RlbUV4aXQgKi8KICAgICAgICAgICAgIFJ1blN0YXJ0dXBGaWxlKCZjZik7CisgICAgICAgICAgICBSdW5JbnRlcmFjdGl2ZUhvb2soKTsKICAgICAgICAgfQogICAgICAgICAvKiBYWFggKi8KIApAQCAtNzU2LDYgKzc2Myw3IEBACiAgICAgaWYgKFB5X0luc3BlY3RGbGFnICYmIHN0ZGluX2lzX2ludGVyYWN0aXZlICYmCiAgICAgICAgIChmaWxlbmFtZSAhPSBOVUxMIHx8IGNvbW1hbmQgIT0gTlVMTCB8fCBtb2R1bGUgIT0gTlVMTCkpIHsKICAgICAgICAgUHlfSW5zcGVjdEZsYWcgPSAwOworICAgICAgICBSdW5JbnRlcmFjdGl2ZUhvb2soKTsKICAgICAgICAgLyogWFhYICovCiAgICAgICAgIHN0cyA9IFB5UnVuX0FueUZpbGVGbGFncyhzdGRpbiwgIjxzdGRpbj4iLCAmY2YpICE9IDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tZDVtb2R1bGUuYyBiL01vZHVsZXMvbWQ1bW9kdWxlLmMKaW5kZXggMTJlMTg3Yy4uNWNiM2QzNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tZDVtb2R1bGUuYworKysgYi9Nb2R1bGVzL21kNW1vZHVsZS5jCkBAIC05MSwxMCArOTEsNiBAQAogICAgICAgICh5KVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4yNCkmMjU1KTsgKHkpWzJdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjE2KSYyNTUpOyAgIFwKICAgICAgICAoeSlbMV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+OCkmMjU1KTsgKHkpWzBdID0gKHVuc2lnbmVkIGNoYXIpKCh4KSYyNTUpOyB9CiAKLSNpZm5kZWYgTUlOCi0gICAjZGVmaW5lIE1JTih4LCB5KSAoICgoeCk8KHkpKT8oeCk6KHkpICkKLSNlbmRpZgotCiAKIC8qIE1ENSBtYWNyb3MgKi8KIApAQCAtMjQ0LDkgKzI0MCw5IEBACiAgICAgICAgICAgIGluICAgICAgICAgICAgICs9IE1ENV9CTE9DS1NJWkU7CiAgICAgICAgICAgIGlubGVuICAgICAgICAgIC09IE1ENV9CTE9DS1NJWkU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgIG4gPSBNSU4oaW5sZW4sIChQeV9zc2l6ZV90KShNRDVfQkxPQ0tTSVpFIC0gbWQ1LT5jdXJsZW4pKTsKKyAgICAgICAgICAgbiA9IFB5X01JTihpbmxlbiwgKFB5X3NzaXplX3QpKE1ENV9CTE9DS1NJWkUgLSBtZDUtPmN1cmxlbikpOwogICAgICAgICAgICBtZW1jcHkobWQ1LT5idWYgKyBtZDUtPmN1cmxlbiwgaW4sIChzaXplX3Qpbik7Ci0gICAgICAgICAgIG1kNS0+Y3VybGVuICAgICs9IG47CisgICAgICAgICAgIG1kNS0+Y3VybGVuICAgICs9IChNRDVfSU5UMzIpbjsKICAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gbjsKICAgICAgICAgICAgaW5sZW4gICAgICAgICAgLT0gbjsKICAgICAgICAgICAgaWYgKG1kNS0+Y3VybGVuID09IE1ENV9CTE9DS1NJWkUpIHsKQEAgLTQ0Myw3ICs0MzksNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIE1ENV9nZXRfbmFtZShQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJNRDUiLCAzKTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJtZDUiLCAzKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTU3Niw4ICs1NzIsMTcgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX21kNSh2b2lkKQogeworICAgIFB5T2JqZWN0ICptOworCiAgICAgUHlfVFlQRSgmTUQ1dHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmTUQ1dHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfbWQ1bW9kdWxlKTsKKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9tZDVtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZNRDV0eXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIk1ENVR5cGUiLCAoUHlPYmplY3QgKikmTUQ1dHlwZSk7CisgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL21tYXBtb2R1bGUuYyBiL01vZHVsZXMvbW1hcG1vZHVsZS5jCmluZGV4IDExMDdlYjguLjA3YjVjNmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbW1hcG1vZHVsZS5jCisrKyBiL01vZHVsZXMvbW1hcG1vZHVsZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAKICNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgogI2luY2x1ZGUgPFB5dGhvbi5oPgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCiAjaWZuZGVmIE1TX1dJTkRPV1MKICNkZWZpbmUgVU5JWApAQCAtMTA4LDYgKzEwOSw3IEBACiAgICAgaW50IGZkOwogI2VuZGlmCiAKKyAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CiAgICAgYWNjZXNzX21vZGUgYWNjZXNzOwogfSBtbWFwX29iamVjdDsKIApAQCAtMTM0LDYgKzEzNiw4IEBACiAgICAgfQogI2VuZGlmIC8qIFVOSVggKi8KIAorICAgIGlmIChtX29iai0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgbV9vYmopOwogICAgIFB5X1RZUEUobV9vYmopLT50cF9mcmVlKChQeU9iamVjdCopbV9vYmopOwogfQogCkBAIC0xMDMyLDcgKzEwMzYsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBvZmZzZXRvZihtbWFwX29iamVjdCwgd2Vha3JlZmxpc3QpLCAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIG1tYXBfb2JqZWN0X21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwpAQCAtMTE1NCwxMiArMTE1OCw2IEBACiAgICAgICAgICh2b2lkKWZjbnRsKGZkLCBGX0ZVTExGU1lOQyk7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0ZTVEFUCi0jICBpZmRlZiBfX1ZNUwotICAgIC8qIG9uIE9wZW5WTVMgd2UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgYnl0ZXMgYXJlIHdyaXR0ZW4gdG8gdGhlIGZpbGUgKi8KLSAgICBpZiAoZmQgIT0gLTEpIHsKLSAgICAgICAgZnN5bmMoZmQpOwotICAgIH0KLSMgIGVuZGlmCiAgICAgaWYgKGZkICE9IC0xICYmIGZzdGF0KGZkLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkgewogICAgICAgICBpZiAobWFwX3NpemUgPT0gMCkgewogICAgICAgICAgICAgaWYgKHN0LnN0X3NpemUgPT0gMCkgewpAQCAtMTE5MCw2ICsxMTg4LDcgQEAKICAgICBtX29iai0+ZGF0YSA9IE5VTEw7CiAgICAgbV9vYmotPnNpemUgPSAoc2l6ZV90KSBtYXBfc2l6ZTsKICAgICBtX29iai0+cG9zID0gKHNpemVfdCkgMDsKKyAgICBtX29iai0+d2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIG1fb2JqLT5leHBvcnRzID0gMDsKICAgICBtX29iai0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGlmIChmZCA9PSAtMSkgewpAQCAtMTIwMywxOCArMTIwMiwxOCBAQAogICAgICAgICBmbGFncyB8PSBNQVBfQU5PTllNT1VTOwogI2Vsc2UKICAgICAgICAgLyogU1ZSNCBtZXRob2QgdG8gbWFwIGFub255bW91cyBtZW1vcnkgaXMgdG8gb3BlbiAvZGV2L3plcm8gKi8KLSAgICAgICAgZmQgPSBkZXZ6ZXJvID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKKyAgICAgICAgZmQgPSBkZXZ6ZXJvID0gX1B5X29wZW4oIi9kZXYvemVybyIsIE9fUkRXUik7CiAgICAgICAgIGlmIChkZXZ6ZXJvID09IC0xKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobV9vYmopOwogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fb2JqLT5mZCA9IGR1cChmZCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtX29iai0+ZmQgPSBfUHlfZHVwKGZkKTsKICAgICAgICAgaWYgKG1fb2JqLT5mZCA9PSAtMSkgewogICAgICAgICAgICAgUHlfREVDUkVGKG1fb2JqKTsKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtMTM5NCw2ICsxMzkzLDcgQEAKICAgICAvKiBzZXQgdGhlIGluaXRpYWwgcG9zaXRpb24gKi8KICAgICBtX29iai0+cG9zID0gKHNpemVfdCkgMDsKIAorICAgIG1fb2JqLT53ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgbV9vYmotPmV4cG9ydHMgPSAwOwogICAgIC8qIHNldCB0aGUgdGFnIG5hbWUgKi8KICAgICBpZiAodGFnbmFtZSAhPSBOVUxMICYmICp0YWduYW1lICE9ICdcMCcpIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvb3NzYXVkaW9kZXYuYyBiL01vZHVsZXMvb3NzYXVkaW9kZXYuYwppbmRleCA4MTdlMjA0Li5iZTkwMDE2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKKysrIGIvTW9kdWxlcy9vc3NhdWRpb2Rldi5jCkBAIC0xMTUsNyArMTE1LDkgQEAKICAgICAgICBvbmUgb3BlbiBhdCBhIHRpbWUuICBUaGlzIGRvZXMgKm5vdCogYWZmZWN0IGxhdGVyIEkvTzsgT1NTCiAgICAgICAgcHJvdmlkZXMgYSBzcGVjaWFsIGlvY3RsKCkgZm9yIG5vbi1ibG9ja2luZyByZWFkL3dyaXRlLCB3aGljaCBpcwogICAgICAgIGV4cG9zZWQgdmlhIG9zc19ub25ibG9jaygpIGJlbG93LiAqLwotICAgIGlmICgoZmQgPSBvcGVuKGRldmljZW5hbWUsIGltb2RlfE9fTk9OQkxPQ0spKSA9PSAtMSkgeworICAgIGZkID0gX1B5X29wZW4oZGV2aWNlbmFtZSwgaW1vZGV8T19OT05CTE9DSyk7CisKKyAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGRldmljZW5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNzcsNyArMTc5LDggQEAKICAgICAgICAgICAgIGRldmljZW5hbWUgPSAiL2Rldi9taXhlciI7CiAgICAgfQogCi0gICAgaWYgKChmZCA9IG9wZW4oZGV2aWNlbmFtZSwgT19SRFdSKSkgPT0gLTEpIHsKKyAgICBmZCA9IF9QeV9vcGVuKGRldmljZW5hbWUsIE9fUkRXUik7CisgICAgaWYgKGZkID09IC0xKSB7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBkZXZpY2VuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMjQ1LDcgKzI0OCw3IEBACiAgICAgaW50IGFyZzsKIAogICAgIGFzc2VydChzdHJsZW4oZm5hbWUpIDw9IDMwKTsKLSAgICBzdHJjYXQoYXJnZm10LCBmbmFtZSk7CisgICAgc3RybmNhdChhcmdmbXQsIGZuYW1lLCAzMCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGFyZ2ZtdCwgJmFyZykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yNzAsNyArMjczLDcgQEAKICAgICBpbnQgYXJnID0gMDsKIAogICAgIGFzc2VydChzdHJsZW4oZm5hbWUpIDw9IDMwKTsKLSAgICBzdHJjYXQoYXJnZm10LCBmbmFtZSk7CisgICAgc3RybmNhdChhcmdmbXQsIGZuYW1lLCAzMCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGFyZ2ZtdCwgJmFyZykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yOTAsNyArMjkzLDcgQEAKICAgICBpbnQgcnY7CiAKICAgICBhc3NlcnQoc3RybGVuKGZuYW1lKSA8PSAzMCk7Ci0gICAgc3RyY2F0KGFyZ2ZtdCwgZm5hbWUpOworICAgIHN0cm5jYXQoYXJnZm10LCBmbmFtZSwgMzApOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBhcmdmbXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9vdmVybGFwcGVkLmMgYi9Nb2R1bGVzL292ZXJsYXBwZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODQyZWZiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9vdmVybGFwcGVkLmMKQEAgLTAsMCArMSwxMzgwIEBACisvKgorICogU3VwcG9ydCBmb3Igb3ZlcmxhcHBlZCBJTworICoKKyAqIFNvbWUgY29kZSBib3Jyb3dlZCBmcm9tIE1vZHVsZXMvX3dpbmFwaS5jIG9mIENQeXRob24KKyAqLworCisvKiBYWFggY2hlY2sgb3ZlcmZsb3cgYW5kIERXT1JEIDwtPiBQeV9zc2l6ZV90IGNvbnZlcnNpb25zCisgICBDaGVjayBpdGVtc2l6ZSAqLworCisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCisKKyNkZWZpbmUgV0lORE9XU19MRUFOX0FORF9NRUFOCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2luY2x1ZGUgPG1zd3NvY2suaD4KKworI2lmIGRlZmluZWQoTVNfV0lOMzIpICYmICFkZWZpbmVkKE1TX1dJTjY0KQorIyAgZGVmaW5lIEZfUE9JTlRFUiAiayIKKyMgIGRlZmluZSBUX1BPSU5URVIgVF9VTE9ORworI2Vsc2UKKyMgIGRlZmluZSBGX1BPSU5URVIgIksiCisjICBkZWZpbmUgVF9QT0lOVEVSIFRfVUxPTkdMT05HCisjZW5kaWYKKworI2RlZmluZSBGX0hBTkRMRSBGX1BPSU5URVIKKyNkZWZpbmUgRl9VTE9OR19QVFIgRl9QT0lOVEVSCisjZGVmaW5lIEZfRFdPUkQgImsiCisjZGVmaW5lIEZfQk9PTCAiaSIKKyNkZWZpbmUgRl9VSU5UICJJIgorCisjZGVmaW5lIFRfSEFORExFIFRfUE9JTlRFUgorCitlbnVtIHtUWVBFX05PTkUsIFRZUEVfTk9UX1NUQVJURUQsIFRZUEVfUkVBRCwgVFlQRV9XUklURSwgVFlQRV9BQ0NFUFQsCisgICAgICBUWVBFX0NPTk5FQ1QsIFRZUEVfRElTQ09OTkVDVCwgVFlQRV9DT05ORUNUX05BTUVEX1BJUEUsCisgICAgICBUWVBFX1dBSVRfTkFNRURfUElQRV9BTkRfQ09OTkVDVH07CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgT1ZFUkxBUFBFRCBvdmVybGFwcGVkOworICAgIC8qIEZvciBjb252ZW5pZW5jZSwgd2Ugc3RvcmUgdGhlIGZpbGUgaGFuZGxlIHRvbyAqLworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgLyogRXJyb3IgcmV0dXJuZWQgYnkgbGFzdCBtZXRob2QgY2FsbCAqLworICAgIERXT1JEIGVycm9yOworICAgIC8qIFR5cGUgb2Ygb3BlcmF0aW9uICovCisgICAgRFdPUkQgdHlwZTsKKyAgICB1bmlvbiB7CisgICAgICAgIC8qIEJ1ZmZlciB1c2VkIGZvciByZWFkaW5nOiBUWVBFX1JFQUQgYW5kIFRZUEVfQUNDRVBUICovCisgICAgICAgIFB5T2JqZWN0ICpyZWFkX2J1ZmZlcjsKKyAgICAgICAgLyogQnVmZmVyIHVzZWQgZm9yIHdyaXRpbmc6IFRZUEVfV1JJVEUgKi8KKyAgICAgICAgUHlfYnVmZmVyIHdyaXRlX2J1ZmZlcjsKKyAgICB9OworfSBPdmVybGFwcGVkT2JqZWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgT1ZFUkxBUFBFRCAqT3ZlcmxhcHBlZDsKKyAgICBIQU5ETEUgSW9jcEhhbmRsZTsKKyAgICBjaGFyIEFkZHJlc3NbMV07Cit9IFdhaXROYW1lZFBpcGVBbmRDb25uZWN0Q29udGV4dDsKKworLyoKKyAqIE1hcCBXaW5kb3dzIGVycm9yIGNvZGVzIHRvIHN1YmNsYXNzZXMgb2YgT1NFcnJvcgorICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitTZXRGcm9tV2luZG93c0VycihEV09SRCBlcnIpCit7CisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbl90eXBlOworCisgICAgaWYgKGVyciA9PSAwKQorICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl90eXBlID0gUHlFeGNfQ29ubmVjdGlvblJlZnVzZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVSUk9SX0NPTk5FQ1RJT05fQUJPUlRFRDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl90eXBlID0gUHlFeGNfQ29ubmVjdGlvbkFib3J0ZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZXhjZXB0aW9uX3R5cGUgPSBQeUV4Y19PU0Vycm9yOworICAgIH0KKyAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoZXhjZXB0aW9uX3R5cGUsIGVycik7Cit9CisKKy8qCisgKiBTb21lIGZ1bmN0aW9ucyBzaG91bGQgYmUgbG9hZGVkIGF0IHJ1bnRpbWUKKyAqLworCitzdGF0aWMgTFBGTl9BQ0NFUFRFWCBQeV9BY2NlcHRFeCA9IE5VTEw7CitzdGF0aWMgTFBGTl9DT05ORUNURVggUHlfQ29ubmVjdEV4ID0gTlVMTDsKK3N0YXRpYyBMUEZOX0RJU0NPTk5FQ1RFWCBQeV9EaXNjb25uZWN0RXggPSBOVUxMOworc3RhdGljIEJPT0wgKENBTExCQUNLICpQeV9DYW5jZWxJb0V4KShIQU5ETEUsIExQT1ZFUkxBUFBFRCkgPSBOVUxMOworCisjZGVmaW5lIEdFVF9XU0FfUE9JTlRFUihzLCB4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFNPQ0tFVF9FUlJPUiAhPSBXU0FJb2N0bChzLCBTSU9fR0VUX0VYVEVOU0lPTl9GVU5DVElPTl9QT0lOVEVSLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmR3VpZCMjeCwgc2l6ZW9mKEd1aWQjI3gpLCAmUHlfIyN4LCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoUHlfIyN4KSwgJmR3Qnl0ZXMsIE5VTEwsIE5VTEwpKQorCitzdGF0aWMgaW50Citpbml0aWFsaXplX2Z1bmN0aW9uX3BvaW50ZXJzKHZvaWQpCit7CisgICAgR1VJRCBHdWlkQWNjZXB0RXggPSBXU0FJRF9BQ0NFUFRFWDsKKyAgICBHVUlEIEd1aWRDb25uZWN0RXggPSBXU0FJRF9DT05ORUNURVg7CisgICAgR1VJRCBHdWlkRGlzY29ubmVjdEV4ID0gV1NBSURfRElTQ09OTkVDVEVYOworICAgIEhJTlNUQU5DRSBoS2VybmVsMzI7CisgICAgU09DS0VUIHM7CisgICAgRFdPUkQgZHdCeXRlczsKKworICAgIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTsKKyAgICBpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIUdFVF9XU0FfUE9JTlRFUihzLCBBY2NlcHRFeCkgfHwKKyAgICAgICAgIUdFVF9XU0FfUE9JTlRFUihzLCBDb25uZWN0RXgpIHx8CisgICAgICAgICFHRVRfV1NBX1BPSU5URVIocywgRGlzY29ubmVjdEV4KSkKKyAgICB7CisgICAgICAgIGNsb3Nlc29ja2V0KHMpOworICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjbG9zZXNvY2tldChzKTsKKworICAgIC8qIE9uIFdpblhQIHdlIHdpbGwgaGF2ZSBQeV9DYW5jZWxJb0V4ID09IE5VTEwgKi8KKyAgICBoS2VybmVsMzIgPSBHZXRNb2R1bGVIYW5kbGUoIktFUk5FTDMyIik7CisgICAgKihGQVJQUk9DICopJlB5X0NhbmNlbElvRXggPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsICJDYW5jZWxJb0V4Iik7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb21wbGV0aW9uIHBvcnQgc3R1ZmYKKyAqLworCitQeURvY19TVFJWQVIoCisgICAgQ3JlYXRlSW9Db21wbGV0aW9uUG9ydF9kb2MsCisgICAgIkNyZWF0ZUlvQ29tcGxldGlvblBvcnQoaGFuZGxlLCBwb3J0LCBrZXksIGNvbmN1cnJlbmN5KSAtPiBwb3J0XG5cbiIKKyAgICAiQ3JlYXRlIGEgY29tcGxldGlvbiBwb3J0IG9yIHJlZ2lzdGVyIGEgaGFuZGxlIHdpdGggYSBwb3J0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9DcmVhdGVJb0NvbXBsZXRpb25Qb3J0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgRmlsZUhhbmRsZTsKKyAgICBIQU5ETEUgRXhpc3RpbmdDb21wbGV0aW9uUG9ydDsKKyAgICBVTE9OR19QVFIgQ29tcGxldGlvbktleTsKKyAgICBEV09SRCBOdW1iZXJPZkNvbmN1cnJlbnRUaHJlYWRzOworICAgIEhBTkRMRSByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9IQU5ETEUgRl9VTE9OR19QVFIgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGVIYW5kbGUsICZFeGlzdGluZ0NvbXBsZXRpb25Qb3J0LCAmQ29tcGxldGlvbktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk51bWJlck9mQ29uY3VycmVudFRocmVhZHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBDcmVhdGVJb0NvbXBsZXRpb25Qb3J0KEZpbGVIYW5kbGUsIEV4aXN0aW5nQ29tcGxldGlvblBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uS2V5LCBOdW1iZXJPZkNvbmN1cnJlbnRUaHJlYWRzKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9IQU5ETEUsIHJldCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzX2RvYywKKyAgICAiR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyhwb3J0LCBtc2VjcykgLT4gKGVyciwgYnl0ZXMsIGtleSwgYWRkcmVzcylcblxuIgorICAgICJHZXQgYSBtZXNzYWdlIGZyb20gY29tcGxldGlvbiBwb3J0LiAgV2FpdCBmb3IgdXAgdG8gbXNlY3MgbWlsbGlzZWNvbmRzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9HZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgQ29tcGxldGlvblBvcnQgPSBOVUxMOworICAgIERXT1JEIE51bWJlck9mQnl0ZXMgPSAwOworICAgIFVMT05HX1BUUiBDb21wbGV0aW9uS2V5ID0gMDsKKyAgICBPVkVSTEFQUEVEICpPdmVybGFwcGVkID0gTlVMTDsKKyAgICBEV09SRCBNaWxsaXNlY29uZHM7CisgICAgRFdPUkQgZXJyOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZDb21wbGV0aW9uUG9ydCwgJk1pbGxpc2Vjb25kcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoQ29tcGxldGlvblBvcnQsICZOdW1iZXJPZkJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbXBsZXRpb25LZXksICZPdmVybGFwcGVkLCBNaWxsaXNlY29uZHMpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgaWYgKE92ZXJsYXBwZWQgPT0gTlVMTCkgeworICAgICAgICBpZiAoZXJyID09IFdBSVRfVElNRU9VVCkKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9EV09SRCBGX0RXT1JEIEZfVUxPTkdfUFRSIEZfUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsIE51bWJlck9mQnl0ZXMsIENvbXBsZXRpb25LZXksIE92ZXJsYXBwZWQpOworfQorCitQeURvY19TVFJWQVIoCisgICAgUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXNfZG9jLAorICAgICJQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhwb3J0LCBieXRlcywga2V5LCBhZGRyZXNzKSAtPiBOb25lXG5cbiIKKyAgICAiUG9zdCBhIG1lc3NhZ2UgdG8gY29tcGxldGlvbiBwb3J0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9Qb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIENvbXBsZXRpb25Qb3J0OworICAgIERXT1JEIE51bWJlck9mQnl0ZXM7CisgICAgVUxPTkdfUFRSIENvbXBsZXRpb25LZXk7CisgICAgT1ZFUkxBUFBFRCAqT3ZlcmxhcHBlZDsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JEIEZfVUxPTkdfUFRSIEZfUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbXBsZXRpb25Qb3J0LCAmTnVtYmVyT2ZCeXRlcywgJkNvbXBsZXRpb25LZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZPdmVybGFwcGVkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoQ29tcGxldGlvblBvcnQsIE51bWJlck9mQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbktleSwgT3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhIGhhbmRsZQorICovCisKK3N0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhIHsKKyAgICBIQU5ETEUgQ29tcGxldGlvblBvcnQ7CisgICAgTFBPVkVSTEFQUEVEIE92ZXJsYXBwZWQ7Cit9OworCitzdGF0aWMgVk9JRCBDQUxMQkFDSworUG9zdFRvUXVldWVDYWxsYmFjayhQVk9JRCBscFBhcmFtZXRlciwgQk9PTCBUaW1lck9yV2FpdEZpcmVkKQoreworICAgIHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhICpwID0gKHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhKikgbHBQYXJhbWV0ZXI7CisKKyAgICBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhwLT5Db21wbGV0aW9uUG9ydCwgVGltZXJPcldhaXRGaXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwLT5PdmVybGFwcGVkKTsKKyAgICAvKiBpZ25vcmUgcG9zc2libGUgZXJyb3IhICovCisgICAgUHlNZW1fRnJlZShwKTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFJlZ2lzdGVyV2FpdFdpdGhRdWV1ZV9kb2MsCisgICAgIlJlZ2lzdGVyV2FpdFdpdGhRdWV1ZShPYmplY3QsIENvbXBsZXRpb25Qb3J0LCBPdmVybGFwcGVkLCBUaW1lb3V0KVxuIgorICAgICIgICAgLT4gV2FpdEhhbmRsZVxuXG4iCisgICAgIlJlZ2lzdGVyIHdhaXQgZm9yIE9iamVjdDsgd2hlbiBjb21wbGV0ZSBDb21wbGV0aW9uUG9ydCBpcyBub3RpZmllZC5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9SZWdpc3RlcldhaXRXaXRoUXVldWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBOZXdXYWl0T2JqZWN0OworICAgIEhBTkRMRSBPYmplY3Q7CisgICAgVUxPTkcgTWlsbGlzZWNvbmRzOworICAgIHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhIGRhdGEsICpwZGF0YTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0hBTkRMRSBGX1BPSU5URVIgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEuQ29tcGxldGlvblBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLk92ZXJsYXBwZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZNaWxsaXNlY29uZHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHBkYXRhID0gUHlNZW1fTWFsbG9jKHNpemVvZihzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSkpOworICAgIGlmIChwZGF0YSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisKKyAgICAqcGRhdGEgPSBkYXRhOworCisgICAgaWYgKCFSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoCisgICAgICAgICAgICAmTmV3V2FpdE9iamVjdCwgT2JqZWN0LCAoV0FJVE9SVElNRVJDQUxMQkFDSylQb3N0VG9RdWV1ZUNhbGxiYWNrLAorICAgICAgICAgICAgcGRhdGEsIE1pbGxpc2Vjb25kcywKKyAgICAgICAgICAgIFdUX0VYRUNVVEVJTldBSVRUSFJFQUQgfCBXVF9FWEVDVVRFT05MWU9OQ0UpKQorICAgIHsKKyAgICAgICAgUHlNZW1fRnJlZShwZGF0YSk7CisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICB9CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0hBTkRMRSwgTmV3V2FpdE9iamVjdCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBVbnJlZ2lzdGVyV2FpdF9kb2MsCisgICAgIlVucmVnaXN0ZXJXYWl0KFdhaXRIYW5kbGUpIC0+IE5vbmVcblxuIgorICAgICJVbnJlZ2lzdGVyIHdhaXQgaGFuZGxlLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1VucmVnaXN0ZXJXYWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgV2FpdEhhbmRsZTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSwgJldhaXRIYW5kbGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBVbnJlZ2lzdGVyV2FpdChXYWl0SGFuZGxlKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyoKKyAqIEV2ZW50IGZ1bmN0aW9ucyAtLSBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRlc3RzCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIENyZWF0ZUV2ZW50X2RvYywKKyAgICAiQ3JlYXRlRXZlbnQoRXZlbnRBdHRyaWJ1dGVzLCBNYW51YWxSZXNldCwgSW5pdGlhbFN0YXRlLCBOYW1lKSIKKyAgICAiIC0+IEhhbmRsZVxuXG4iCisgICAgIkNyZWF0ZSBhbiBldmVudC4gIEV2ZW50QXR0cmlidXRlcyBtdXN0IGJlIE5vbmUuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfQ3JlYXRlRXZlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpFdmVudEF0dHJpYnV0ZXM7CisgICAgQk9PTCBNYW51YWxSZXNldDsKKyAgICBCT09MIEluaXRpYWxTdGF0ZTsKKyAgICBQeV9VTklDT0RFICpOYW1lOworICAgIEhBTkRMRSBFdmVudDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyIgRl9CT09MIEZfQk9PTCAiWiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZFdmVudEF0dHJpYnV0ZXMsICZNYW51YWxSZXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkluaXRpYWxTdGF0ZSwgJk5hbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChFdmVudEF0dHJpYnV0ZXMgIT0gUHlfTm9uZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkV2ZW50QXR0cmlidXRlcyBtdXN0IGJlIE5vbmUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIEV2ZW50ID0gQ3JlYXRlRXZlbnRXKE5VTEwsIE1hbnVhbFJlc2V0LCBJbml0aWFsU3RhdGUsIE5hbWUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoRXZlbnQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfSEFORExFLCBFdmVudCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBTZXRFdmVudF9kb2MsCisgICAgIlNldEV2ZW50KEhhbmRsZSkgLT4gTm9uZVxuXG4iCisgICAgIlNldCBldmVudC5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9TZXRFdmVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIEhhbmRsZTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSwgJkhhbmRsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFNldEV2ZW50KEhhbmRsZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBSZXNldEV2ZW50X2RvYywKKyAgICAiUmVzZXRFdmVudChIYW5kbGUpIC0+IE5vbmVcblxuIgorICAgICJSZXNldCBldmVudC5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9SZXNldEV2ZW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgSGFuZGxlOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUmVzZXRFdmVudChIYW5kbGUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKgorICogQmluZCBzb2NrZXQgaGFuZGxlIHRvIGxvY2FsIHBvcnQgd2l0aG91dCBkb2luZyBzbG93IGdldGFkZHJpbmZvKCkKKyAqLworCitQeURvY19TVFJWQVIoCisgICAgQmluZExvY2FsX2RvYywKKyAgICAiQmluZExvY2FsKGhhbmRsZSwgZmFtaWx5KSAtPiBOb25lXG5cbiIKKyAgICAiQmluZCBhIHNvY2tldCBoYW5kbGUgdG8gYW4gYXJiaXRyYXJ5IGxvY2FsIHBvcnQuXG4iCisgICAgImZhbWlseSBzaG91bGQgQUZfSU5FVCBvciBBRl9JTkVUNi5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9CaW5kTG9jYWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFNPQ0tFVCBTb2NrZXQ7CisgICAgaW50IEZhbWlseTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiaSIsICZTb2NrZXQsICZGYW1pbHkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChGYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKyAgICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBhZGRyLnNpbl9wb3J0ID0gMDsKKyAgICAgICAgYWRkci5zaW5fYWRkci5TX3VuLlNfYWRkciA9IElOQUREUl9BTlk7CisgICAgICAgIHJldCA9IGJpbmQoU29ja2V0LCAoU09DS0FERFIqKSZhZGRyLCBzaXplb2YoYWRkcikpICE9IFNPQ0tFVF9FUlJPUjsKKyAgICB9IGVsc2UgaWYgKEZhbWlseSA9PSBBRl9JTkVUNikgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisgICAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgICAgYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBhZGRyLnNpbjZfcG9ydCA9IDA7CisgICAgICAgIGFkZHIuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisgICAgICAgIHJldCA9IGJpbmQoU29ja2V0LCAoU09DS0FERFIqKSZhZGRyLCBzaXplb2YoYWRkcikpICE9IFNPQ0tFVF9FUlJPUjsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImV4cGVjdGVkIHR1cGxlIG9mIGxlbmd0aCAyIG9yIDQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qCisgKiBXaW5kb3dzIGVxdWl2YWxlbnQgb2Ygb3Muc3RyZXJyb3IoKSAtLSBjb21wYXJlIF9jdHlwZXMvY2FsbHByb2MuYworICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBGb3JtYXRNZXNzYWdlX2RvYywKKyAgICAiRm9ybWF0TWVzc2FnZShlcnJvcl9jb2RlKSAtPiBlcnJvcl9tZXNzYWdlXG5cbiIKKyAgICAiUmV0dXJuIGVycm9yIG1lc3NhZ2UgZm9yIGFuIGVycm9yIGNvZGUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0Zvcm1hdE1lc3NhZ2UoUHlPYmplY3QgKmlnbm9yZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgRFdPUkQgY29kZSwgbjsKKyAgICBXQ0hBUiAqbHBNc2dCdWY7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0RXT1JELCAmY29kZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbiA9IEZvcm1hdE1lc3NhZ2VXKEZPUk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUiB8CisgICAgICAgICAgICAgICAgICAgICAgIEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBNQUtFTEFOR0lEKExBTkdfTkVVVFJBTCwgU1VCTEFOR19ERUZBVUxUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKExQV1NUUikgJmxwTXNnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAobikgeworICAgICAgICB3aGlsZSAoaXN3c3BhY2UobHBNc2dCdWZbbi0xXSkpCisgICAgICAgICAgICAtLW47CisgICAgICAgIGxwTXNnQnVmW25dID0gTCdcMCc7CisgICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoInUiLCBscE1zZ0J1Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoInVua25vd24gZXJyb3IgY29kZSAldSIsIGNvZGUpOworICAgIH0KKyAgICBMb2NhbEZyZWUobHBNc2dCdWYpOworICAgIHJldHVybiByZXM7Cit9CisKKworLyoKKyAqIE1hcmsgb3BlcmF0aW9uIGFzIGNvbXBsZXRlZCAtIHVzZWQgd2hlbiByZWFkaW5nIHByb2R1Y2VzIEVSUk9SX0JST0tFTl9QSVBFCisgKi8KKworc3RhdGljIHZvaWQKK21hcmtfYXNfY29tcGxldGVkKE9WRVJMQVBQRUQgKm92KQoreworICAgIG92LT5JbnRlcm5hbCA9IDA7CisgICAgaWYgKG92LT5oRXZlbnQgIT0gTlVMTCkKKyAgICAgICAgU2V0RXZlbnQob3YtPmhFdmVudCk7Cit9CisKKy8qCisgKiBBIFB5dGhvbiBvYmplY3Qgd3JhcHBpbmcgYW4gT1ZFUkxBUFBFRCBzdHJ1Y3R1cmUgYW5kIG90aGVyIHVzZWZ1bCBkYXRhCisgKiBmb3Igb3ZlcmxhcHBlZCBJL08KKyAqLworCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9kb2MsCisgICAgIk92ZXJsYXBwZWQgb2JqZWN0Iik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBPdmVybGFwcGVkT2JqZWN0ICpzZWxmOworICAgIEhBTkRMRSBldmVudCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZXZlbnQiLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8IiBGX0hBTkRMRSwga3dsaXN0LCAmZXZlbnQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChldmVudCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBldmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKTsKKyAgICAgICAgaWYgKGV2ZW50ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgfQorCisgICAgc2VsZiA9IFB5T2JqZWN0X05ldyhPdmVybGFwcGVkT2JqZWN0LCB0eXBlKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChldmVudCAhPSBOVUxMKQorICAgICAgICAgICAgQ2xvc2VIYW5kbGUoZXZlbnQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZWxmLT5oYW5kbGUgPSBOVUxMOworICAgIHNlbGYtPmVycm9yID0gMDsKKyAgICBzZWxmLT50eXBlID0gVFlQRV9OT05FOworICAgIHNlbGYtPnJlYWRfYnVmZmVyID0gTlVMTDsKKyAgICBtZW1zZXQoJnNlbGYtPm92ZXJsYXBwZWQsIDAsIHNpemVvZihPVkVSTEFQUEVEKSk7CisgICAgbWVtc2V0KCZzZWxmLT53cml0ZV9idWZmZXIsIDAsIHNpemVvZihQeV9idWZmZXIpKTsKKyAgICBpZiAoZXZlbnQpCisgICAgICAgIHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50ID0gZXZlbnQ7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7Cit9CisKK3N0YXRpYyB2b2lkCitPdmVybGFwcGVkX2RlYWxsb2MoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZikKK3sKKyAgICBEV09SRCBieXRlczsKKyAgICBEV09SRCBvbGRlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBCT09MIHdhaXQgPSBGQUxTRTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghSGFzT3ZlcmxhcHBlZElvQ29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKSAmJgorICAgICAgICBzZWxmLT50eXBlICE9IFRZUEVfTk9UX1NUQVJURUQpCisgICAgeworICAgICAgICBpZiAoUHlfQ2FuY2VsSW9FeCAmJiBQeV9DYW5jZWxJb0V4KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQpKQorICAgICAgICAgICAgd2FpdCA9IFRSVUU7CisKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXQgPSBHZXRPdmVybGFwcGVkUmVzdWx0KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzLCB3YWl0KTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBzd2l0Y2ggKHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICAgICAgY2FzZSBFUlJPUl9OT1RfRk9VTkQ6CisgICAgICAgICAgICBjYXNlIEVSUk9SX09QRVJBVElPTl9BQk9SVEVEOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIiVSIHN0aWxsIGhhcyBwZW5kaW5nIG9wZXJhdGlvbiBhdCAiCisgICAgICAgICAgICAgICAgICAgICJkZWFsbG9jYXRpb24sIHRoZSBwcm9jZXNzIG1heSBjcmFzaCIsIHNlbGYpOworICAgICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzZWxmLT5vdmVybGFwcGVkLmhFdmVudCAhPSBOVUxMKQorICAgICAgICBDbG9zZUhhbmRsZShzZWxmLT5vdmVybGFwcGVkLmhFdmVudCk7CisKKyAgICBzd2l0Y2ggKHNlbGYtPnR5cGUpIHsKKyAgICBjYXNlIFRZUEVfUkVBRDoKKyAgICBjYXNlIFRZUEVfQUNDRVBUOgorICAgICAgICBQeV9DTEVBUihzZWxmLT5yZWFkX2J1ZmZlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlQRV9XUklURToKKyAgICAgICAgaWYgKHNlbGYtPndyaXRlX2J1ZmZlci5vYmopCisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT53cml0ZV9idWZmZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgUHlPYmplY3RfRGVsKHNlbGYpOworICAgIFNldExhc3RFcnJvcihvbGRlcnIpOworfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9jYW5jZWxfZG9jLAorICAgICJjYW5jZWwoKSAtPiBOb25lXG5cbiIKKyAgICAiQ2FuY2VsIG92ZXJsYXBwZWQgb3BlcmF0aW9uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX2NhbmNlbChPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQoreworICAgIEJPT0wgcmV0ID0gVFJVRTsKKworICAgIGlmIChzZWxmLT50eXBlID09IFRZUEVfTk9UX1NUQVJURUQKKyAgICAgICAgfHwgc2VsZi0+dHlwZSA9PSBUWVBFX1dBSVRfTkFNRURfUElQRV9BTkRfQ09OTkVDVCkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICBpZiAoIUhhc092ZXJsYXBwZWRJb0NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCkpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoUHlfQ2FuY2VsSW9FeCkKKyAgICAgICAgICAgIHJldCA9IFB5X0NhbmNlbElvRXgoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IENhbmNlbElvKHNlbGYtPmhhbmRsZSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfQorCisgICAgLyogQ2FuY2VsSW9FeCByZXR1cm5zIEVSUk9SX05PVF9GT1VORCBpZiB0aGUgSS9PIGNvbXBsZXRlZCBpbi1iZXR3ZWVuICovCisgICAgaWYgKCFyZXQgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfTk9UX0ZPVU5EKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX2dldHJlc3VsdF9kb2MsCisgICAgImdldHJlc3VsdCh3YWl0PUZhbHNlKSAtPiByZXN1bHRcblxuIgorICAgICJSZXRyaWV2ZSByZXN1bHQgb2Ygb3BlcmF0aW9uLiAgSWYgd2FpdCBpcyB0cnVlIHRoZW4gaXQgYmxvY2tzXG4iCisgICAgInVudGlsIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQuICBJZiB3YWl0IGlzIGZhbHNlIGFuZCB0aGVcbiIKKyAgICAib3BlcmF0aW9uIGlzIHN0aWxsIHBlbmRpbmcgdGhlbiBhbiBlcnJvciBpcyByYWlzZWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX2dldHJlc3VsdChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBCT09MIHdhaXQgPSBGQUxTRTsKKyAgICBEV09SRCB0cmFuc2ZlcnJlZCA9IDA7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8IiBGX0JPT0wsICZ3YWl0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSA9PSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gbm90IHlldCBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHNlbGYtPnR5cGUgPT0gVFlQRV9OT1RfU1RBUlRFRCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBmYWlsZWQgdG8gc3RhcnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwgJnRyYW5zZmVycmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9NT1JFX0RBVEE6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUlJPUl9CUk9LRU5fUElQRToKKyAgICAgICAgICAgIGlmICgoc2VsZi0+dHlwZSA9PSBUWVBFX1JFQUQgfHwgc2VsZi0+dHlwZSA9PSBUWVBFX0FDQ0VQVCkgJiYgc2VsZi0+cmVhZF9idWZmZXIgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorCisgICAgc3dpdGNoIChzZWxmLT50eXBlKSB7CisgICAgICAgIGNhc2UgVFlQRV9SRUFEOgorICAgICAgICAgICAgYXNzZXJ0KFB5Qnl0ZXNfQ2hlY2tFeGFjdChzZWxmLT5yZWFkX2J1ZmZlcikpOworICAgICAgICAgICAgaWYgKHRyYW5zZmVycmVkICE9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZi0+cmVhZF9idWZmZXIpICYmCisgICAgICAgICAgICAgICAgX1B5Qnl0ZXNfUmVzaXplKCZzZWxmLT5yZWFkX2J1ZmZlciwgdHJhbnNmZXJyZWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPnJlYWRfYnVmZmVyKTsKKyAgICAgICAgICAgIHJldHVybiBzZWxmLT5yZWFkX2J1ZmZlcjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdHJhbnNmZXJyZWQpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfUmVhZEZpbGVfZG9jLAorICAgICJSZWFkRmlsZShoYW5kbGUsIHNpemUpIC0+IE92ZXJsYXBwZWRbbWVzc2FnZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIHJlYWQiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfUmVhZEZpbGUoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBEV09SRCBzaXplOworICAgIERXT1JEIG5yZWFkOworICAgIFB5T2JqZWN0ICpidWY7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQsICZoYW5kbGUsICZzaXplKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjaWYgU0laRU9GX1NJWkVfVCA8PSBTSVpFT0ZfTE9ORworICAgIHNpemUgPSBQeV9NSU4oc2l6ZSwgKERXT1JEKVBZX1NTSVpFX1RfTUFYKTsKKyNlbmRpZgorICAgIGJ1ZiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgUHlfTUFYKHNpemUsIDEpKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfUkVBRDsKKyAgICBzZWxmLT5oYW5kbGUgPSBoYW5kbGU7CisgICAgc2VsZi0+cmVhZF9idWZmZXIgPSBidWY7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUmVhZEZpbGUoaGFuZGxlLCBQeUJ5dGVzX0FTX1NUUklORyhidWYpLCBzaXplLCAmbnJlYWQsCisgICAgICAgICAgICAgICAgICAgJnNlbGYtPm92ZXJsYXBwZWQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX0JST0tFTl9QSVBFOgorICAgICAgICAgICAgbWFya19hc19jb21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpOworICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9NT1JFX0RBVEE6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX1dTQVJlY3ZfZG9jLAorICAgICJSZWN2RmlsZShoYW5kbGUsIHNpemUsIGZsYWdzKSAtPiBPdmVybGFwcGVkW21lc3NhZ2VdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCByZWNlaXZlIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX1dTQVJlY3YoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBEV09SRCBzaXplOworICAgIERXT1JEIGZsYWdzID0gMDsKKyAgICBEV09SRCBucmVhZDsKKyAgICBQeU9iamVjdCAqYnVmOworICAgIFdTQUJVRiB3c2FidWY7CisgICAgaW50IHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCAifCIgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJnNpemUsICZmbGFncykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2lmIFNJWkVPRl9TSVpFX1QgPD0gU0laRU9GX0xPTkcKKyAgICBzaXplID0gUHlfTUlOKHNpemUsIChEV09SRClQWV9TU0laRV9UX01BWCk7CisjZW5kaWYKKyAgICBidWYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIFB5X01BWChzaXplLCAxKSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX1JFQUQ7CisgICAgc2VsZi0+aGFuZGxlID0gaGFuZGxlOworICAgIHNlbGYtPnJlYWRfYnVmZmVyID0gYnVmOworICAgIHdzYWJ1Zi5sZW4gPSBzaXplOworICAgIHdzYWJ1Zi5idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhidWYpOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFdTQVJlY3YoKFNPQ0tFVCloYW5kbGUsICZ3c2FidWYsIDEsICZucmVhZCwgJmZsYWdzLAorICAgICAgICAgICAgICAgICAgJnNlbGYtPm92ZXJsYXBwZWQsIE5VTEwpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IChyZXQgPCAwID8gV1NBR2V0TGFzdEVycm9yKCkgOiBFUlJPUl9TVUNDRVNTKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX0JST0tFTl9QSVBFOgorICAgICAgICAgICAgbWFya19hc19jb21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpOworICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9NT1JFX0RBVEE6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX1dyaXRlRmlsZV9kb2MsCisgICAgIldyaXRlRmlsZShoYW5kbGUsIGJ1ZikgLT4gT3ZlcmxhcHBlZFtieXRlc190cmFuc2ZlcnJlZF1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIHdyaXRlIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX1dyaXRlRmlsZShPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIFB5T2JqZWN0ICpidWZvYmo7CisgICAgRFdPUkQgd3JpdHRlbjsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgIk8iLCAmaGFuZGxlLCAmYnVmb2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZShidWZvYmosICJ5KiIsICZzZWxmLT53cml0ZV9idWZmZXIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworI2lmIFNJWkVPRl9TSVpFX1QgPiBTSVpFT0ZfTE9ORworICAgIGlmIChzZWxmLT53cml0ZV9idWZmZXIubGVuID4gKFB5X3NzaXplX3QpVUxPTkdfTUFYKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPndyaXRlX2J1ZmZlcik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYnVmZmVyIHRvIGxhcmdlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZgorCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfV1JJVEU7CisgICAgc2VsZi0+aGFuZGxlID0gaGFuZGxlOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFdyaXRlRmlsZShoYW5kbGUsIHNlbGYtPndyaXRlX2J1ZmZlci5idWYsCisgICAgICAgICAgICAgICAgICAgIChEV09SRClzZWxmLT53cml0ZV9idWZmZXIubGVuLAorICAgICAgICAgICAgICAgICAgICAmd3JpdHRlbiwgJnNlbGYtPm92ZXJsYXBwZWQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX1dTQVNlbmRfZG9jLAorICAgICJXU0FTZW5kKGhhbmRsZSwgYnVmLCBmbGFncykgLT4gT3ZlcmxhcHBlZFtieXRlc190cmFuc2ZlcnJlZF1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIHNlbmQiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfV1NBU2VuZChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIFB5T2JqZWN0ICpidWZvYmo7CisgICAgRFdPUkQgZmxhZ3M7CisgICAgRFdPUkQgd3JpdHRlbjsKKyAgICBXU0FCVUYgd3NhYnVmOworICAgIGludCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJPIiBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmYnVmb2JqLCAmZmxhZ3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGJ1Zm9iaiwgInkqIiwgJnNlbGYtPndyaXRlX2J1ZmZlcikpCisgICAgICAgIHJldHVybiBOVUxMOworCisjaWYgU0laRU9GX1NJWkVfVCA+IFNJWkVPRl9MT05HCisgICAgaWYgKHNlbGYtPndyaXRlX2J1ZmZlci5sZW4gPiAoUHlfc3NpemVfdClVTE9OR19NQVgpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+d3JpdGVfYnVmZmVyKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJidWZmZXIgdG8gbGFyZ2UiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9XUklURTsKKyAgICBzZWxmLT5oYW5kbGUgPSBoYW5kbGU7CisgICAgd3NhYnVmLmxlbiA9IChEV09SRClzZWxmLT53cml0ZV9idWZmZXIubGVuOworICAgIHdzYWJ1Zi5idWYgPSBzZWxmLT53cml0ZV9idWZmZXIuYnVmOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFdTQVNlbmQoKFNPQ0tFVCloYW5kbGUsICZ3c2FidWYsIDEsICZ3cml0dGVuLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICZzZWxmLT5vdmVybGFwcGVkLCBOVUxMKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSAocmV0IDwgMCA/IFdTQUdldExhc3RFcnJvcigpIDogRVJST1JfU1VDQ0VTUyk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9BY2NlcHRFeF9kb2MsCisgICAgIkFjY2VwdEV4KGxpc3Rlbl9oYW5kbGUsIGFjY2VwdF9oYW5kbGUpIC0+IE92ZXJsYXBwZWRbYWRkcmVzc19hc19ieXRlc11cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIHdhaXQgZm9yIGNsaWVudCB0byBjb25uZWN0Iik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX0FjY2VwdEV4KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFNPQ0tFVCBMaXN0ZW5Tb2NrZXQ7CisgICAgU09DS0VUIEFjY2VwdFNvY2tldDsKKyAgICBEV09SRCBCeXRlc1JlY2VpdmVkOworICAgIERXT1JEIHNpemU7CisgICAgUHlPYmplY3QgKmJ1ZjsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9IQU5ETEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZMaXN0ZW5Tb2NrZXQsICZBY2NlcHRTb2NrZXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzaXplID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpICsgMTY7CisgICAgYnVmID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBzaXplKjIpOworICAgIGlmICghYnVmKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX0FDQ0VQVDsKKyAgICBzZWxmLT5oYW5kbGUgPSAoSEFORExFKUxpc3RlblNvY2tldDsKKyAgICBzZWxmLT5yZWFkX2J1ZmZlciA9IGJ1ZjsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBQeV9BY2NlcHRFeChMaXN0ZW5Tb2NrZXQsIEFjY2VwdFNvY2tldCwgUHlCeXRlc19BU19TVFJJTkcoYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplLCBzaXplLCAmQnl0ZXNSZWNlaXZlZCwgJnNlbGYtPm92ZXJsYXBwZWQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKKworc3RhdGljIGludAorcGFyc2VfYWRkcmVzcyhQeU9iamVjdCAqb2JqLCBTT0NLQUREUiAqQWRkcmVzcywgaW50IExlbmd0aCkKK3sKKyAgICBjaGFyICpIb3N0OworICAgIHVuc2lnbmVkIHNob3J0IFBvcnQ7CisgICAgdW5zaWduZWQgbG9uZyBGbG93SW5mbzsKKyAgICB1bnNpZ25lZCBsb25nIFNjb3BlSWQ7CisKKyAgICBtZW1zZXQoQWRkcmVzcywgMCwgTGVuZ3RoKTsKKworICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKG9iaiwgInNIIiwgJkhvc3QsICZQb3J0KSkKKyAgICB7CisgICAgICAgIEFkZHJlc3MtPnNhX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIGlmIChXU0FTdHJpbmdUb0FkZHJlc3NBKEhvc3QsIEFGX0lORVQsIE5VTEwsIEFkZHJlc3MsICZMZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgU2V0RnJvbVdpbmRvd3NFcnIoV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICgoU09DS0FERFJfSU4qKUFkZHJlc3MpLT5zaW5fcG9ydCA9IGh0b25zKFBvcnQpOworICAgICAgICByZXR1cm4gTGVuZ3RoOworICAgIH0KKyAgICBlbHNlIGlmIChQeUFyZ19QYXJzZVR1cGxlKG9iaiwgInNIa2siLCAmSG9zdCwgJlBvcnQsICZGbG93SW5mbywgJlNjb3BlSWQpKQorICAgIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgQWRkcmVzcy0+c2FfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIGlmIChXU0FTdHJpbmdUb0FkZHJlc3NBKEhvc3QsIEFGX0lORVQ2LCBOVUxMLCBBZGRyZXNzLCAmTGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAoKFNPQ0tBRERSX0lONiopQWRkcmVzcyktPnNpbjZfcG9ydCA9IGh0b25zKFBvcnQpOworICAgICAgICAoKFNPQ0tBRERSX0lONiopQWRkcmVzcyktPnNpbjZfZmxvd2luZm8gPSBGbG93SW5mbzsKKyAgICAgICAgKChTT0NLQUREUl9JTjYqKUFkZHJlc3MpLT5zaW42X3Njb3BlX2lkID0gU2NvcGVJZDsKKyAgICAgICAgcmV0dXJuIExlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfQ29ubmVjdEV4X2RvYywKKyAgICAiQ29ubmVjdEV4KGNsaWVudF9oYW5kbGUsIGFkZHJlc3NfYXNfYnl0ZXMpIC0+IE92ZXJsYXBwZWRbTm9uZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIGNvbm5lY3QuICBjbGllbnRfaGFuZGxlIHNob3VsZCBiZSB1bmJvdW5kLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9Db25uZWN0RXgoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgU09DS0VUIENvbm5lY3RTb2NrZXQ7CisgICAgUHlPYmplY3QgKkFkZHJlc3NPYmo7CisgICAgY2hhciBBZGRyZXNzQnVmW3NpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KV07CisgICAgU09DS0FERFIgKkFkZHJlc3MgPSAoU09DS0FERFIqKUFkZHJlc3NCdWY7CisgICAgaW50IExlbmd0aDsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgIk8iLCAmQ29ubmVjdFNvY2tldCwgJkFkZHJlc3NPYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBMZW5ndGggPSBzaXplb2YoQWRkcmVzc0J1Zik7CisgICAgTGVuZ3RoID0gcGFyc2VfYWRkcmVzcyhBZGRyZXNzT2JqLCBBZGRyZXNzLCBMZW5ndGgpOworICAgIGlmIChMZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX0NPTk5FQ1Q7CisgICAgc2VsZi0+aGFuZGxlID0gKEhBTkRMRSlDb25uZWN0U29ja2V0OworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFB5X0Nvbm5lY3RFeChDb25uZWN0U29ja2V0LCBBZGRyZXNzLCBMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogV1NBR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9EaXNjb25uZWN0RXhfZG9jLAorICAgICJEaXNjb25uZWN0RXgoaGFuZGxlLCBmbGFncykgLT4gT3ZlcmxhcHBlZFtOb25lXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgY29ubmVjdC4gIGNsaWVudF9oYW5kbGUgc2hvdWxkIGJlIHVuYm91bmQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBTT0NLRVQgU29ja2V0OworICAgIERXT1JEIGZsYWdzOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JELCAmU29ja2V0LCAmZmxhZ3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9ESVNDT05ORUNUOworICAgIHNlbGYtPmhhbmRsZSA9IChIQU5ETEUpU29ja2V0OworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFB5X0Rpc2Nvbm5lY3RFeChTb2NrZXQsICZzZWxmLT5vdmVybGFwcGVkLCBmbGFncywgMCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IFdTQUdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfQ29ubmVjdE5hbWVkUGlwZV9kb2MsCisgICAgIkNvbm5lY3ROYW1lZFBpcGUoaGFuZGxlKSAtPiBPdmVybGFwcGVkW05vbmVdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCB3YWl0IGZvciBhIGNsaWVudCB0byBjb25uZWN0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9Db25uZWN0TmFtZWRQaXBlKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBQaXBlOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSwgJlBpcGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9DT05ORUNUX05BTUVEX1BJUEU7CisgICAgc2VsZi0+aGFuZGxlID0gUGlwZTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBDb25uZWN0TmFtZWRQaXBlKFBpcGUsICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9QSVBFX0NPTk5FQ1RFRDoKKyAgICAgICAgICAgIG1hcmtfYXNfY29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKKy8qIFVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gd2F5IHRvIGRvIGFuIG92ZXJsYXBwZWQgY29ubmVjdCB0byBhCisgICBwaXBlLiAgV2UgaW5zdGVhZCB1c2UgV2FpdE5hbWVkUGlwZSgpIGFuZCBDcmVhdGVGaWxlKCkgaW4gYSB0aHJlYWQKKyAgIHBvb2wgdGhyZWFkLiAgSWYgYSBjb25uZWN0aW9uIHN1Y2NlZWRzIHdpdGhpbiBhIHRpbWUgbGltaXQgKDEwCisgICBzZWNvbmRzKSB0aGVuIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkgaXMgdXNlZCB0byByZXR1cm4gdGhlCisgICBwaXBlIGhhbmRsZSB0byB0aGUgY29tcGxldGlvbiBwb3J0LiAqLworCitzdGF0aWMgRFdPUkQgV0lOQVBJCitXYWl0TmFtZWRQaXBlQW5kQ29ubmVjdEluVGhyZWFkKFdhaXROYW1lZFBpcGVBbmRDb25uZWN0Q29udGV4dCAqY3R4KQoreworICAgIEhBTkRMRSBQaXBlSGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgRFdPUkQgU3RhcnQgPSBHZXRUaWNrQ291bnQoKTsKKyAgICBEV09SRCBEZWFkbGluZSA9IFN0YXJ0ICsgMTAqMTAwMDsKKyAgICBEV09SRCBFcnJvciA9IDA7CisgICAgRFdPUkQgVGltZW91dDsKKyAgICBCT09MIFN1Y2Nlc3M7CisKKyAgICBmb3IgKCA7IDsgKSB7CisgICAgICAgIFRpbWVvdXQgPSBEZWFkbGluZSAtIEdldFRpY2tDb3VudCgpOworICAgICAgICBpZiAoKGludClUaW1lb3V0IDwgMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBTdWNjZXNzID0gV2FpdE5hbWVkUGlwZShjdHgtPkFkZHJlc3MsIFRpbWVvdXQpOworICAgICAgICBFcnJvciA9IFN1Y2Nlc3MgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgICAgIHN3aXRjaCAoRXJyb3IpIHsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgICAgICAgICBQaXBlSGFuZGxlID0gQ3JlYXRlRmlsZShjdHgtPkFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBOVUxMLCBPUEVOX0VYSVNUSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfRkxBR19PVkVSTEFQUEVELCBOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAoUGlwZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVSUk9SX1NFTV9USU1FT1VUOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIVBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKGN0eC0+SW9jcEhhbmRsZSwgRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUxPTkdfUFRSKVBpcGVIYW5kbGUsIGN0eC0+T3ZlcmxhcHBlZCkpCisgICAgICAgIENsb3NlSGFuZGxlKFBpcGVIYW5kbGUpOworICAgIGZyZWUoY3R4KTsKKyAgICByZXR1cm4gMDsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RfZG9jLAorICAgICJXYWl0TmFtZWRQaXBlQW5kQ29ubmVjdChhZGRyLCBpb2NwX2hhbmRsZSkgLT4gT3ZlcmxhcHBlZFtwaXBlX2hhbmRsZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIGNvbm5lY3Rpb24gdG8gYWRkcmVzcywgbm90aWZ5aW5nIGlvY3BfaGFuZGxlIHdoZW5cbiIKKyAgICAiZmluaXNoZWQiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfV2FpdE5hbWVkUGlwZUFuZENvbm5lY3QoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY2hhciAqQWRkcmVzczsKKyAgICBQeV9zc2l6ZV90IEFkZHJlc3NMZW5ndGg7CisgICAgSEFORExFIElvY3BIYW5kbGU7CisgICAgT1ZFUkxBUFBFRCBPdmVybGFwcGVkOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKyAgICBXYWl0TmFtZWRQaXBlQW5kQ29ubmVjdENvbnRleHQgKmN0eDsKKyAgICBQeV9zc2l6ZV90IENvbnRleHRMZW5ndGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjIiBGX0hBTkRMRSBGX1BPSU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZBZGRyZXNzLCAmQWRkcmVzc0xlbmd0aCwgJklvY3BIYW5kbGUsICZPdmVybGFwcGVkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgQ29udGV4dExlbmd0aCA9IChBZGRyZXNzTGVuZ3RoICsKKyAgICAgICAgICAgICAgICAgICAgIG9mZnNldG9mKFdhaXROYW1lZFBpcGVBbmRDb25uZWN0Q29udGV4dCwgQWRkcmVzcykpOworICAgIGN0eCA9IGNhbGxvYygxLCBDb250ZXh0TGVuZ3RoICsgMSk7CisgICAgaWYgKGN0eCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICBtZW1jcHkoY3R4LT5BZGRyZXNzLCBBZGRyZXNzLCBBZGRyZXNzTGVuZ3RoICsgMSk7CisgICAgY3R4LT5PdmVybGFwcGVkID0gJnNlbGYtPm92ZXJsYXBwZWQ7CisgICAgY3R4LT5Jb2NwSGFuZGxlID0gSW9jcEhhbmRsZTsKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX1dBSVRfTkFNRURfUElQRV9BTkRfQ09OTkVDVDsKKyAgICBzZWxmLT5oYW5kbGUgPSBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFF1ZXVlVXNlcldvcmtJdGVtKFdhaXROYW1lZFBpcGVBbmRDb25uZWN0SW5UaHJlYWQsIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXVF9FWEVDVVRFTE9OR0ZVTkNUSU9OKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgbWFya19hc19jb21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpOworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QqCitPdmVybGFwcGVkX2dldGFkZHJlc3MoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Wb2lkUHRyKCZzZWxmLT5vdmVybGFwcGVkKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorT3ZlcmxhcHBlZF9nZXRwZW5kaW5nKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyghSGFzT3ZlcmxhcHBlZElvQ29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+dHlwZSAhPSBUWVBFX05PVF9TVEFSVEVEKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIE92ZXJsYXBwZWRfbWV0aG9kc1tdID0geworICAgIHsiZ2V0cmVzdWx0IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX2dldHJlc3VsdCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX2dldHJlc3VsdF9kb2N9LAorICAgIHsiY2FuY2VsIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX2NhbmNlbCwKKyAgICAgTUVUSF9OT0FSR1MsIE92ZXJsYXBwZWRfY2FuY2VsX2RvY30sCisgICAgeyJSZWFkRmlsZSIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9SZWFkRmlsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX1JlYWRGaWxlX2RvY30sCisgICAgeyJXU0FSZWN2IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1dTQVJlY3YsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9XU0FSZWN2X2RvY30sCisgICAgeyJXcml0ZUZpbGUiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfV3JpdGVGaWxlLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV3JpdGVGaWxlX2RvY30sCisgICAgeyJXU0FTZW5kIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1dTQVNlbmQsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9XU0FTZW5kX2RvY30sCisgICAgeyJBY2NlcHRFeCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9BY2NlcHRFeCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0FjY2VwdEV4X2RvY30sCisgICAgeyJDb25uZWN0RXgiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfQ29ubmVjdEV4LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfQ29ubmVjdEV4X2RvY30sCisgICAgeyJEaXNjb25uZWN0RXgiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfRGlzY29ubmVjdEV4LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfRGlzY29ubmVjdEV4X2RvY30sCisgICAgeyJDb25uZWN0TmFtZWRQaXBlIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0Nvbm5lY3ROYW1lZFBpcGUsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9Db25uZWN0TmFtZWRQaXBlX2RvY30sCisgICAgeyJXYWl0TmFtZWRQaXBlQW5kQ29ubmVjdCIsCisgICAgIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9XYWl0TmFtZWRQaXBlQW5kQ29ubmVjdCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX1dhaXROYW1lZFBpcGVBbmRDb25uZWN0X2RvY30sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgUHlNZW1iZXJEZWYgT3ZlcmxhcHBlZF9tZW1iZXJzW10gPSB7CisgICAgeyJlcnJvciIsIFRfVUxPTkcsCisgICAgIG9mZnNldG9mKE92ZXJsYXBwZWRPYmplY3QsIGVycm9yKSwKKyAgICAgUkVBRE9OTFksICJFcnJvciBmcm9tIGxhc3Qgb3BlcmF0aW9uIn0sCisgICAgeyJldmVudCIsIFRfSEFORExFLAorICAgICBvZmZzZXRvZihPdmVybGFwcGVkT2JqZWN0LCBvdmVybGFwcGVkKSArIG9mZnNldG9mKE9WRVJMQVBQRUQsIGhFdmVudCksCisgICAgIFJFQURPTkxZLCAiT3ZlcmxhcHBlZCBldmVudCBoYW5kbGUifSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBQeUdldFNldERlZiBPdmVybGFwcGVkX2dldHNldHNbXSA9IHsKKyAgICB7ImFkZHJlc3MiLCAoZ2V0dGVyKU92ZXJsYXBwZWRfZ2V0YWRkcmVzcywgTlVMTCwKKyAgICAgIkFkZHJlc3Mgb2Ygb3ZlcmxhcHBlZCBzdHJ1Y3R1cmUifSwKKyAgICB7InBlbmRpbmciLCAoZ2V0dGVyKU92ZXJsYXBwZWRfZ2V0cGVuZGluZywgTlVMTCwKKyAgICAgIldoZXRoZXIgdGhlIG9wZXJhdGlvbiBpcyBwZW5kaW5nIn0sCisgICAge05VTEx9LAorfTsKKworUHlUeXBlT2JqZWN0IE92ZXJsYXBwZWRUeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgIC8qIHRwX25hbWUgICAgICAgICAgICovICJfb3ZlcmxhcHBlZC5PdmVybGFwcGVkIiwKKyAgICAvKiB0cF9iYXNpY3NpemUgICAgICAqLyBzaXplb2YoT3ZlcmxhcHBlZE9iamVjdCksCisgICAgLyogdHBfaXRlbXNpemUgICAgICAgKi8gMCwKKyAgICAvKiB0cF9kZWFsbG9jICAgICAgICAqLyAoZGVzdHJ1Y3RvcikgT3ZlcmxhcHBlZF9kZWFsbG9jLAorICAgIC8qIHRwX3ByaW50ICAgICAgICAgICovIDAsCisgICAgLyogdHBfZ2V0YXR0ciAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9zZXRhdHRyICAgICAgICAqLyAwLAorICAgIC8qIHRwX3Jlc2VydmVkICAgICAgICovIDAsCisgICAgLyogdHBfcmVwciAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9hc19udW1iZXIgICAgICAqLyAwLAorICAgIC8qIHRwX2FzX3NlcXVlbmNlICAgICovIDAsCisgICAgLyogdHBfYXNfbWFwcGluZyAgICAgKi8gMCwKKyAgICAvKiB0cF9oYXNoICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2NhbGwgICAgICAgICAgICovIDAsCisgICAgLyogdHBfc3RyICAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9nZXRhdHRybyAgICAgICAqLyAwLAorICAgIC8qIHRwX3NldGF0dHJvICAgICAgICovIDAsCisgICAgLyogdHBfYXNfYnVmZmVyICAgICAgKi8gMCwKKyAgICAvKiB0cF9mbGFncyAgICAgICAgICAqLyBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgLyogdHBfZG9jICAgICAgICAgICAgKi8gIk9WRVJMQVBQRUQgc3RydWN0dXJlIHdyYXBwZXIiLAorICAgIC8qIHRwX3RyYXZlcnNlICAgICAgICovIDAsCisgICAgLyogdHBfY2xlYXIgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9yaWNoY29tcGFyZSAgICAqLyAwLAorICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovIDAsCisgICAgLyogdHBfaXRlciAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9pdGVybmV4dCAgICAgICAqLyAwLAorICAgIC8qIHRwX21ldGhvZHMgICAgICAgICovIE92ZXJsYXBwZWRfbWV0aG9kcywKKyAgICAvKiB0cF9tZW1iZXJzICAgICAgICAqLyBPdmVybGFwcGVkX21lbWJlcnMsCisgICAgLyogdHBfZ2V0c2V0ICAgICAgICAgKi8gT3ZlcmxhcHBlZF9nZXRzZXRzLAorICAgIC8qIHRwX2Jhc2UgICAgICAgICAgICovIDAsCisgICAgLyogdHBfZGljdCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9kZXNjcl9nZXQgICAgICAqLyAwLAorICAgIC8qIHRwX2Rlc2NyX3NldCAgICAgICovIDAsCisgICAgLyogdHBfZGljdG9mZnNldCAgICAgKi8gMCwKKyAgICAvKiB0cF9pbml0ICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2FsbG9jICAgICAgICAgICovIDAsCisgICAgLyogdHBfbmV3ICAgICAgICAgICAgKi8gT3ZlcmxhcHBlZF9uZXcsCit9OworCitzdGF0aWMgUHlNZXRob2REZWYgb3ZlcmxhcHBlZF9mdW5jdGlvbnNbXSA9IHsKKyAgICB7IkNyZWF0ZUlvQ29tcGxldGlvblBvcnQiLCBvdmVybGFwcGVkX0NyZWF0ZUlvQ29tcGxldGlvblBvcnQsCisgICAgIE1FVEhfVkFSQVJHUywgQ3JlYXRlSW9Db21wbGV0aW9uUG9ydF9kb2N9LAorICAgIHsiR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyIsIG92ZXJsYXBwZWRfR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cywKKyAgICAgTUVUSF9WQVJBUkdTLCBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzX2RvY30sCisgICAgeyJQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyIsIG92ZXJsYXBwZWRfUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMsCisgICAgIE1FVEhfVkFSQVJHUywgUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXNfZG9jfSwKKyAgICB7IkZvcm1hdE1lc3NhZ2UiLCBvdmVybGFwcGVkX0Zvcm1hdE1lc3NhZ2UsCisgICAgIE1FVEhfVkFSQVJHUywgRm9ybWF0TWVzc2FnZV9kb2N9LAorICAgIHsiQmluZExvY2FsIiwgb3ZlcmxhcHBlZF9CaW5kTG9jYWwsCisgICAgIE1FVEhfVkFSQVJHUywgQmluZExvY2FsX2RvY30sCisgICAgeyJSZWdpc3RlcldhaXRXaXRoUXVldWUiLCBvdmVybGFwcGVkX1JlZ2lzdGVyV2FpdFdpdGhRdWV1ZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBSZWdpc3RlcldhaXRXaXRoUXVldWVfZG9jfSwKKyAgICB7IlVucmVnaXN0ZXJXYWl0Iiwgb3ZlcmxhcHBlZF9VbnJlZ2lzdGVyV2FpdCwKKyAgICAgTUVUSF9WQVJBUkdTLCBVbnJlZ2lzdGVyV2FpdF9kb2N9LAorICAgIHsiQ3JlYXRlRXZlbnQiLCBvdmVybGFwcGVkX0NyZWF0ZUV2ZW50LAorICAgICBNRVRIX1ZBUkFSR1MsIENyZWF0ZUV2ZW50X2RvY30sCisgICAgeyJTZXRFdmVudCIsIG92ZXJsYXBwZWRfU2V0RXZlbnQsCisgICAgIE1FVEhfVkFSQVJHUywgU2V0RXZlbnRfZG9jfSwKKyAgICB7IlJlc2V0RXZlbnQiLCBvdmVybGFwcGVkX1Jlc2V0RXZlbnQsCisgICAgIE1FVEhfVkFSQVJHUywgUmVzZXRFdmVudF9kb2N9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBvdmVybGFwcGVkX21vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl9vdmVybGFwcGVkIiwKKyAgICBOVUxMLAorICAgIC0xLAorICAgIG92ZXJsYXBwZWRfZnVuY3Rpb25zLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKKyNkZWZpbmUgV0lOQVBJX0NPTlNUQU5UKGZtdCwgY29uKSBcCisgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgI2NvbiwgUHlfQnVpbGRWYWx1ZShmbXQsIGNvbikpCisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX292ZXJsYXBwZWQodm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbSwgKmQ7CisKKyAgICAvKiBFbnN1cmUgV1NBU3RhcnR1cCgpIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6aW5nIGZ1bmN0aW9uIHBvaW50ZXJzICovCisgICAgbSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiX3NvY2tldCIpOworICAgIGlmICghbSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfREVDUkVGKG0pOworCisgICAgaWYgKGluaXRpYWxpemVfZnVuY3Rpb25fcG9pbnRlcnMoKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmT3ZlcmxhcHBlZFR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZvdmVybGFwcGVkX21vZHVsZSk7CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiT3ZlcmxhcHBlZCIsIChQeU9iamVjdCAqKSZPdmVybGFwcGVkVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOworCisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBFUlJPUl9JT19QRU5ESU5HKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIEVSUk9SX05FVE5BTUVfREVMRVRFRCk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBFUlJPUl9TRU1fVElNRU9VVCk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBJTkZJTklURSk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfSEFORExFLCBJTlZBTElEX0hBTkRMRV9WQUxVRSk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfSEFORExFLCBOVUxMKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIFNPX1VQREFURV9BQ0NFUFRfQ09OVEVYVCk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBTT19VUERBVEVfQ09OTkVDVF9DT05URVhUKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIFRGX1JFVVNFX1NPQ0tFVCk7CisKKyAgICByZXR1cm4gbTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvcGFyc2VybW9kdWxlLmMgYi9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCmluZGV4IGU1OTgwNDYuLjM2ZTk4OTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYwpAQCAtODMsNTQgKzgzLDc4IEBACiAgICAgICAgICAgIGludCBsaW5lbm8sICAgICAgICAgICAgICAgICAgLyogaW5jbHVkZSBsaW5lIG51bWJlcnM/ICAgICAgICAgKi8KICAgICAgICAgICAgaW50IGNvbF9vZmZzZXQpICAgICAgICAgICAgICAvKiBpbmNsdWRlIGNvbHVtbiBvZmZzZXRzPyAgICAgICAqLwogeworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMLCAqdzsKKwogICAgIGlmIChuID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKICAgICB9CisKICAgICBpZiAoSVNOT05URVJNSU5BTChUWVBFKG4pKSkgewogICAgICAgICBpbnQgaTsKLSAgICAgICAgUHlPYmplY3QgKnY7Ci0gICAgICAgIFB5T2JqZWN0ICp3OwogCi0gICAgICAgIHYgPSBta3NlcSgxICsgTkNIKG4pICsgKFRZUEUobikgPT0gZW5jb2RpbmdfZGVjbCkpOwotICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuICh2KTsKKyAgICAgICAgcmVzdWx0ID0gbWtzZXEoMSArIE5DSChuKSArIChUWVBFKG4pID09IGVuY29kaW5nX2RlY2wpKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKwogICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKFRZUEUobikpOwotICAgICAgICBpZiAodyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICByZXR1cm4gKChQeU9iamVjdCopIE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgICh2b2lkKSBhZGRlbGVtKHYsIDAsIHcpOworICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAwLCB3KTsKKwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpKyspIHsKICAgICAgICAgICAgIHcgPSBub2RlMnR1cGxlKENISUxEKG4sIGkpLCBta3NlcSwgYWRkZWxlbSwgbGluZW5vLCBjb2xfb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoUHlPYmplY3QqKSBOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHYsIGkrMSwgdyk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIGkrMSwgdyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoVFlQRShuKSA9PSBlbmNvZGluZ19kZWNsKQotICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0odiwgaSsxLCBQeVVuaWNvZGVfRnJvbVN0cmluZyhTVFIobikpKTsKLSAgICAgICAgcmV0dXJuICh2KTsKKyAgICAgICAgaWYgKFRZUEUobikgPT0gZW5jb2RpbmdfZGVjbCkgeworICAgICAgICAgICAgdyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFNUUihuKSk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIGkrMSwgdyk7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoSVNURVJNSU5BTChUWVBFKG4pKSkgewotICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gbWtzZXEoMiArIGxpbmVubyArIGNvbF9vZmZzZXQpOwotICAgICAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMCwgUHlMb25nX0Zyb21Mb25nKFRZUEUobikpKTsKLSAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMSwgUHlVbmljb2RlX0Zyb21TdHJpbmcoU1RSKG4pKSk7Ci0gICAgICAgICAgICBpZiAobGluZW5vID09IDEpCi0gICAgICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAyLCBQeUxvbmdfRnJvbUxvbmcobi0+bl9saW5lbm8pKTsKLSAgICAgICAgICAgIGlmIChjb2xfb2Zmc2V0ID09IDEpCi0gICAgICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAzLCBQeUxvbmdfRnJvbUxvbmcobi0+bl9jb2xfb2Zmc2V0KSk7CisgICAgICAgIHJlc3VsdCA9IG1rc2VxKDIgKyBsaW5lbm8gKyBjb2xfb2Zmc2V0KTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKFRZUEUobikpOworICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAwLCB3KTsKKworICAgICAgICB3ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoU1RSKG4pKTsKKyAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMSwgdyk7CisKKyAgICAgICAgaWYgKGxpbmVubyA9PSAxKSB7CisgICAgICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKG4tPm5fbGluZW5vKTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMiwgdyk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIChyZXN1bHQpOworCisgICAgICAgIGlmIChjb2xfb2Zmc2V0ID09IDEpIHsKKyAgICAgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcobi0+bl9jb2xfb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMywgdyk7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnJlY29nbml6ZWQgcGFyc2UgdHJlZSBub2RlIHR5cGUiKTsKICAgICAgICAgcmV0dXJuICgoUHlPYmplY3QqKSBOVUxMKTsKICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgIHJldHVybiBOVUxMOwogfQogLyoKICAqICBFbmQgb2YgbWF0ZXJpYWwgY29weXJpZ2h0ZWQgYnkgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLgpAQCAtNDUzLDMzICs0NzcsNDYgQEAKIHN0YXRpYyBQeU9iamVjdCoKIHBhcnNlcl9jb21waWxlc3QoUHlTVF9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpCiB7Ci0gICAgUHlPYmplY3QqICAgICByZXMgPSAwOwotICAgIFB5QXJlbmEqICAgICAgYXJlbmE7CisgICAgUHlPYmplY3QqICAgICByZXMgPSBOVUxMOworICAgIFB5QXJlbmEqICAgICAgYXJlbmEgPSBOVUxMOwogICAgIG1vZF90eSAgICAgICAgbW9kOwotICAgIGNoYXIqICAgICAgICAgc3RyID0gIjxzeW50YXgtdHJlZT4iOworICAgIFB5T2JqZWN0KiAgICAgZmlsZW5hbWUgPSBOVUxMOwogICAgIGludCBvazsKIAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJzdCIsICJmaWxlbmFtZSIsIE5VTEx9OwogCiAgICAgaWYgKHNlbGYgPT0gTlVMTCB8fCBQeU1vZHVsZV9DaGVjayhzZWxmKSkKLSAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJPIXxzOmNvbXBpbGVzdCIsIGtleXdvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlTVF9UeXBlLCAmc2VsZiwgJnN0cik7CisgICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiTyF8TyY6Y29tcGlsZXN0Iiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeVNUX1R5cGUsICZzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmZmlsZW5hbWUpOwogICAgIGVsc2UKLSAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8czpjb21waWxlIiwgJmtleXdvcmRzWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyKTsKKyAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8TyY6Y29tcGlsZSIsICZrZXl3b3Jkc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lKTsKKyAgICBpZiAoIW9rKQorICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgaWYgKG9rKSB7Ci0gICAgICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKLSAgICAgICAgaWYgKGFyZW5hKSB7Ci0gICAgICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlKHNlbGYtPnN0X25vZGUsICYoc2VsZi0+c3RfZmxhZ3MpLCBzdHIsIGFyZW5hKTsKLSAgICAgICAgICAgaWYgKG1vZCkgewotICAgICAgICAgICAgICAgcmVzID0gKFB5T2JqZWN0ICopUHlBU1RfQ29tcGlsZShtb2QsIHN0ciwgJihzZWxmLT5zdF9mbGFncyksIGFyZW5hKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwotICAgICAgICB9CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHN5bnRheC10cmVlPiIpOworICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCi0gICAgcmV0dXJuIChyZXMpOworICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKKyAgICBpZiAoIWFyZW5hKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgbW9kID0gUHlBU1RfRnJvbU5vZGVPYmplY3Qoc2VsZi0+c3Rfbm9kZSwgJnNlbGYtPnN0X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBhcmVuYSk7CisgICAgaWYgKCFtb2QpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICByZXMgPSAoUHlPYmplY3QgKilQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VsZi0+c3RfZmxhZ3MsIC0xLCBhcmVuYSk7CitlcnJvcjoKKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lKTsKKyAgICBpZiAoYXJlbmEgIT0gTlVMTCkKKyAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiAKQEAgLTgwOSw4ICs4NDYsMTMgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0cm4gPSAoY2hhciAqKVB5T2JqZWN0X01BTExPQyhsZW4gKyAxKTsKLSAgICAgICAgICAgIGlmIChzdHJuICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgKHZvaWQpIG1lbWNweShzdHJuLCB0ZW1wX3N0ciwgbGVuICsgMSk7CisgICAgICAgICAgICBpZiAoc3RybiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRlbXApOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoZWxlbSk7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh2b2lkKSBtZW1jcHkoc3RybiwgdGVtcF9zdHIsIGxlbiArIDEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHRlbXApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCFJU05PTlRFUk1JTkFMKHR5cGUpKSB7CkBAIC04NzAsNyArOTEyLDcgQEAKICAgICAgICAgICogIFRoZSB0dXBsZSBpcyBzaW1wbGUsIGJ1dCBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggYSBzdGFydCBzeW1ib2wuCiAgICAgICAgICAqICBSYWlzZSBhbiBleGNlcHRpb24gbm93IGFuZCBiZSBkb25lIHdpdGggaXQuCiAgICAgICAgICAqLwotICAgICAgICB0dXBsZSA9IFB5X0J1aWxkVmFsdWUoIm9zIiwgdHVwbGUsCisgICAgICAgIHR1cGxlID0gUHlfQnVpbGRWYWx1ZSgiT3MiLCB0dXBsZSwKICAgICAgICAgICAgICAgICAgICAgIklsbGVnYWwgc3ludGF4LXRyZWU7IGNhbm5vdCBzdGFydCB3aXRoIHRlcm1pbmFsIHN5bWJvbC4iKTsKICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KHBhcnNlcl9lcnJvciwgdHVwbGUpOwogICAgICAgICBQeV9YREVDUkVGKHR1cGxlKTsKQEAgLTkwNiw4ICs5NDgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJlcy0+bl9zdHIgPSAoY2hhciAqKVB5T2JqZWN0X01BTExPQyhsZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzLT5uX3N0ciAhPSBOVUxMICYmIHRlbXAgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgKHZvaWQpIG1lbWNweShyZXMtPm5fc3RyLCB0ZW1wLCBsZW4gKyAxKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzLT5uX3N0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RpbmcpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOworICAgICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKHZvaWQpIG1lbWNweShyZXMtPm5fc3RyLCB0ZW1wLCBsZW4gKyAxKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RpbmcpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMgYi9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKaW5kZXggNzY3YTY2NS4uNmNiYzc4ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCisrKyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYwpAQCAtMSwxNSArMSwxNCBAQAogCiAvKiBQT1NJWCBtb2R1bGUgaW1wbGVtZW50YXRpb24gKi8KIAotLyogVGhpcyBmaWxlIGlzIGFsc28gdXNlZCBmb3IgV2luZG93cyBOVC9NUy1XaW4gYW5kIE9TLzIuICBJbiB0aGF0IGNhc2UgdGhlCi0gICBtb2R1bGUgYWN0dWFsbHkgY2FsbHMgaXRzZWxmICdudCcgb3IgJ29zMicsIG5vdCAncG9zaXgnLCBhbmQgYSBmZXcKKy8qIFRoaXMgZmlsZSBpcyBhbHNvIHVzZWQgZm9yIFdpbmRvd3MgTlQvTVMtV2luLiAgSW4gdGhhdCBjYXNlIHRoZQorICAgbW9kdWxlIGFjdHVhbGx5IGNhbGxzIGl0c2VsZiAnbnQnLCBub3QgJ3Bvc2l4JywgYW5kIGEgZmV3CiAgICBmdW5jdGlvbnMgYXJlIGVpdGhlciB1bmltcGxlbWVudGVkIG9yIGltcGxlbWVudGVkIGRpZmZlcmVudGx5LiAgVGhlIHNvdXJjZQogICAgYXNzdW1lcyB0aGF0IGZvciBXaW5kb3dzIE5ULCB0aGUgbWFjcm8gJ01TX1dJTkRPV1MnIGlzIGRlZmluZWQgaW5kZXBlbmRlbnQKICAgIG9mIHRoZSBjb21waWxlciB1c2VkLiAgRGlmZmVyZW50IGNvbXBpbGVycyBkZWZpbmUgdGhlaXIgb3duIGZlYXR1cmUKLSAgIHRlc3QgbWFjcm8sIGUuZy4gJ19fQk9STEFORENfXycgb3IgJ19NU0NfVkVSJy4gIEZvciBPUy8yLCB0aGUgY29tcGlsZXIKLSAgIGluZGVwZW5kZW50IG1hY3JvIFBZT1NfT1MyIHNob3VsZCBiZSBkZWZpbmVkLiAgT24gT1MvMiB0aGUgZGVmYXVsdAotICAgY29tcGlsZXIgaXMgYXNzdW1lZCB0byBiZSBJQk0ncyBWaXN1YWxBZ2UgQysrIChWQUNQUCkuICBQWUNDX0dDQyBpcyB1c2VkCi0gICBhcyB0aGUgY29tcGlsZXIgc3BlY2lmaWMgbWFjcm8gZm9yIHRoZSBFTVggcG9ydCBvZiBnY2MgdG8gT1MvMi4gKi8KKyAgIHRlc3QgbWFjcm8sIGUuZy4gJ19fQk9STEFORENfXycgb3IgJ19NU0NfVkVSJy4gKi8KKworCiAKICNpZmRlZiBfX0FQUExFX18KICAgIC8qCkBAIC0zMCwxMSArMjksNiBAQAogI2luY2x1ZGUgInBvc2l4bW9kdWxlLmgiCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19WTVMpCi0jICAgIGVycm9yICJQRVAgMTE6IFZNUyBpcyBub3cgdW5zdXBwb3J0ZWQsIGNvZGUgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQiCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPgotI2VuZGlmIC8qIGRlZmluZWQoX19WTVMpICovCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTQ2LDIyICs0MCw2IEBACiBjb3JyZXNwb25kaW5nIFVuaXggbWFudWFsIGVudHJpZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY2FsbHMuIik7CiAKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0jZXJyb3IgIlBFUCAxMTogT1MvMiBpcyBub3cgdW5zdXBwb3J0ZWQsIGNvZGUgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQiCi0jZGVmaW5lICBJTkNMX0RPUwotI2RlZmluZSAgSU5DTF9ET1NFUlJPUlMKLSNkZWZpbmUgIElOQ0xfRE9TUFJPQ0VTUwotI2RlZmluZSAgSU5DTF9OT1BNQVBJCi0jaW5jbHVkZSA8b3MyLmg+Ci0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGlvLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jZW5kaWYKLSNpbmNsdWRlICJvc2RlZnMuaCIKLSNlbmRpZgotCiAjaWZkZWYgSEFWRV9TWVNfVUlPX0gKICNpbmNsdWRlIDxzeXMvdWlvLmg+CiAjZW5kaWYKQEAgLTEzMiw2ICsxMTAsMTggQEAKICNpbmNsdWRlIDxkbGZjbi5oPgogI2VuZGlmCiAKKyNpZmRlZiBfX2hwdXgKKyNpbmNsdWRlIDxzeXMvbXBjdGwuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBcCisgICAgZGVmaW5lZChfX09wZW5CU0RfXykgICB8fCBcCisgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgICB8fCBcCisgICAgZGVmaW5lZChfX05ldEJTRF9fKSAgICB8fCBcCisgICAgZGVmaW5lZChfX0FQUExFX18pCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VuZGlmCisKICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAjICBkZWZpbmUgVEVSTVNJWkVfVVNFX0NPTklPCiAjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpCkBAIC0xNDYsMjkgKzEzNiwxOSBAQAogCiAvKiBWYXJpb3VzIGNvbXBpbGVycyBoYXZlIG9ubHkgY2VydGFpbiBwb3NpeCBmdW5jdGlvbnMgKi8KIC8qIFhYWCBHb3NoIEkgd2lzaCB0aGVzZSB3ZXJlIGFsbCBtb3ZlZCBpbnRvIHB5Y29uZmlnLmggKi8KLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApICYmIGRlZmluZWQoUFlPU19PUzIpCi0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotI2Vsc2UKICNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChfX1FOWF9fKSAgICAgICAgICAgLyogV2F0Y29tIGNvbXBpbGVyICovCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfT1BFTkRJUiAgICAxCiAjZGVmaW5lIEhBVkVfU1lTVEVNICAgICAxCi0jaWYgZGVmaW5lZChfX09TMl9fKQotI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQotI2RlZmluZSBIQVZFX1dBSVQgICAgICAgMQotI2VuZGlmCiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2Vsc2UKICNpZmRlZiBfX0JPUkxBTkRDX18gICAgICAgICAgICAgLyogQm9ybGFuZCBjb21waWxlciAqLwogI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQotI2RlZmluZSBIQVZFX0dFVENXRCAgICAgMQogI2RlZmluZSBIQVZFX09QRU5ESVIgICAgMQogI2RlZmluZSBIQVZFX1BJUEUgICAgICAgMQogI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgMQogI2RlZmluZSBIQVZFX1dBSVQgICAgICAgMQogI2Vsc2UKICNpZmRlZiBfTVNDX1ZFUiAgICAgICAgIC8qIE1pY3Jvc29mdCBjb21waWxlciAqLwotI2RlZmluZSBIQVZFX0dFVENXRCAgICAgMQogI2RlZmluZSBIQVZFX0dFVFBQSUQgICAgMQogI2RlZmluZSBIQVZFX0dFVExPR0lOICAgMQogI2RlZmluZSBIQVZFX1NQQVdOViAgICAgMQpAQCAtMTc5LDE2ICsxNTksMTIgQEAKICNkZWZpbmUgSEFWRV9GU1lOQyAgICAgIDEKICNkZWZpbmUgZnN5bmMgX2NvbW1pdAogI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSB8fCBkZWZpbmVkKF9fVk1TKQotLyogRXZlcnl0aGluZyBuZWVkZWQgaXMgZGVmaW5lZCBpbiBQQy9vczJlbXgvcHljb25maWcuaCBvciB2bXMvcHljb25maWcuaCAqLwotI2Vsc2UgICAgICAgICAgICAgICAgICAgLyogYWxsIG90aGVyIGNvbXBpbGVycyAqLwogLyogVW5peCBmdW5jdGlvbnMgdGhhdCB0aGUgY29uZmlndXJlIHNjcmlwdCBkb2Vzbid0IGNoZWNrIGZvciAqLwogI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQogI2RlZmluZSBIQVZFX0ZPUksgICAgICAgMQogI2lmIGRlZmluZWQoX19VU0xDX18pICYmIGRlZmluZWQoX19TQ09fVkVSU0lPTl9fKSAgICAgICAvKiBTQ08gVURLIENvbXBpbGVyICovCiAjZGVmaW5lIEhBVkVfRk9SSzEgICAgICAxCiAjZW5kaWYKLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgIDEKICNkZWZpbmUgSEFWRV9HRVRFR0lEICAgIDEKICNkZWZpbmUgSEFWRV9HRVRFVUlEICAgIDEKICNkZWZpbmUgSEFWRV9HRVRHSUQgICAgIDEKQEAgLTIwMCwxNCArMTc2LDE1IEBACiAjZGVmaW5lIEhBVkVfU1lTVEVNICAgICAxCiAjZGVmaW5lIEhBVkVfV0FJVCAgICAgICAxCiAjZGVmaW5lIEhBVkVfVFRZTkFNRSAgICAxCi0jZW5kaWYgIC8qIFBZT1NfT1MyICYmIFBZQ0NfR0NDICYmIF9fVk1TICovCiAjZW5kaWYgIC8qIF9NU0NfVkVSICovCiAjZW5kaWYgIC8qIF9fQk9STEFORENfXyAqLwogI2VuZGlmICAvKiAhIF9fV0FUQ09NQ19fIHx8IF9fUU5YX18gKi8KLSNlbmRpZiAvKiAhIF9fSUJNQ19fICovCiAKIAotCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgb3MKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PThjZmYwOTZkMTEzMzI4OGZdKi8KIAogI2lmbmRlZiBfTVNDX1ZFUgogCkBAIC0zMzUsMTAgKzMxMiw2IEBACiAjZW5kaWYKICNlbmRpZiAvKiBfTVNDX1ZFUiAqLwogCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKSAmJiBkZWZpbmVkKFBZT1NfT1MyKQotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYgLyogT1MyICovCi0KICNpZm5kZWYgTUFYUEFUSExFTgogI2lmIGRlZmluZWQoUEFUSF9NQVgpICYmIFBBVEhfTUFYID4gMTAyNAogI2RlZmluZSBNQVhQQVRITEVOIFBBVEhfTUFYCkBAIC0zODAsNyArMzUzLDcgQEAKICN1bmRlZiBTVEFUCiAjdW5kZWYgRlNUQVQKICN1bmRlZiBTVFJVQ1RfU1RBVAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAjICAgICAgIGRlZmluZSBTVEFUIHdpbjMyX3N0YXQKICMgICAgICAgZGVmaW5lIExTVEFUIHdpbjMyX2xzdGF0CiAjICAgICAgIGRlZmluZSBGU1RBVCB3aW4zMl9mc3RhdApAQCAtNDAzLDYgKzM3Niw4IEBACiAjZW5kaWYKICNlbmRpZgogCisjZGVmaW5lIERXT1JEX01BWCA0Mjk0OTY3Mjk1VQorCiAKICNpZmRlZiBNU19XSU5ET1dTCiBzdGF0aWMgaW50CkBAIC00MzYsMTA4ICs0MTEsMjEzIEBACiBpbnQKIF9QeV9VaWRfQ29udmVydGVyKFB5T2JqZWN0ICpvYmosIHZvaWQgKnApCiB7CisgICAgdWlkX3QgdWlkOworICAgIFB5T2JqZWN0ICppbmRleDsKICAgICBpbnQgb3ZlcmZsb3c7CiAgICAgbG9uZyByZXN1bHQ7Ci0gICAgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIpOworICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKKworICAgIGluZGV4ID0gUHlOdW1iZXJfSW5kZXgob2JqKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgInVpZCBzaG91bGQgYmUgaW50ZWdlciwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG9iaiwgJm92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cgPCAwKQotICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICBpZiAoIW92ZXJmbG93ICYmIHJlc3VsdCA9PSAtMSkgewotICAgICAgICAvKiBlcnJvciBvciAtMSAqLwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAqKHVpZF90ICopcCA9ICh1aWRfdCktMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIHVuc2lnbmVkIHVpZF90ICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKLSAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkgewotICAgICAgICAgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvYmopOwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh1aWRfdCl1cmVzdWx0ID09ICh1aWRfdCktMSkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICAgICAgICAgIHVyZXN1bHQgPSByZXN1bHQ7CisKKyAgICAvKgorICAgICAqIEhhbmRsaW5nIHVpZF90IGlzIGNvbXBsaWNhdGVkIGZvciB0d28gcmVhc29uczoKKyAgICAgKiAgKiBBbHRob3VnaCB1aWRfdCBpcyAoYWx3YXlzPykgdW5zaWduZWQsIGl0IHN0aWxsCisgICAgICogICAgYWNjZXB0cyAtMS4KKyAgICAgKiAgKiBXZSBkb24ndCBrbm93IGl0cyBzaXplIGluIGFkdmFuY2UtLWl0IG1heSBiZQorICAgICAqICAgIGJpZ2dlciB0aGFuIGFuIGludCwgb3IgaXQgbWF5IGJlIHNtYWxsZXIgdGhhbgorICAgICAqICAgIGEgbG9uZy4KKyAgICAgKgorICAgICAqIFNvIGEgYml0IG9mIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBpbiBvcmRlci4KKyAgICAgKiBTdGFydCB3aXRoIGludGVycHJldGluZyB0aGUgdmFsdWUgcGFzc2VkCisgICAgICogaW4gYXMgYSBzaWduZWQgbG9uZyBhbmQgc2VlIGlmIGl0IHdvcmtzLgorICAgICAqLworCisgICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KGluZGV4LCAmb3ZlcmZsb3cpOworCisgICAgaWYgKCFvdmVyZmxvdykgeworICAgICAgICB1aWQgPSAodWlkX3QpcmVzdWx0OworCisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIC8qIEl0J3MgYSBsZWdpdGltYXRlIC0xLCB3ZSdyZSBkb25lLiAqLworICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9CisKKyAgICAgICAgLyogQW55IG90aGVyIG5lZ2F0aXZlIG51bWJlciBpcyBkaXNhbGxvd2VkLiAqLworICAgICAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworCisgICAgICAgIC8qIEVuc3VyZSB0aGUgdmFsdWUgd2Fzbid0IHRydW5jYXRlZC4gKi8KICAgICAgICAgaWYgKHNpemVvZih1aWRfdCkgPCBzaXplb2YobG9uZykgJiYKLSAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSh1aWRfdCl1cmVzdWx0ICE9IHVyZXN1bHQpCi0gICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgICoodWlkX3QgKilwID0gKHVpZF90KXVyZXN1bHQ7CisgICAgICAgICAgICAobG9uZyl1aWQgIT0gcmVzdWx0KQorICAgICAgICAgICAgZ290byB1bmRlcmZsb3c7CisgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICB9CisKKyAgICBpZiAob3ZlcmZsb3cgPCAwKQorICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKworICAgIC8qCisgICAgICogT2theSwgdGhlIHZhbHVlIG92ZXJmbG93ZWQgYSBzaWduZWQgbG9uZy4gIElmIGl0CisgICAgICogZml0cyBpbiBhbiAqdW5zaWduZWQqIGxvbmcsIGl0IG1heSBzdGlsbCBiZSBva2F5LAorICAgICAqIGFzIHVpZF90IG1heSBiZSB1bnNpZ25lZCBsb25nIG9uIHRoaXMgcGxhdGZvcm0uCisgICAgICovCisgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhpbmRleCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICBnb3RvIG92ZXJmbG93OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgdWlkID0gKHVpZF90KXVyZXN1bHQ7CisKKyAgICAvKgorICAgICAqIElmIHVpZCA9PSAodWlkX3QpLTEsIHRoZSB1c2VyIGFjdHVhbGx5IHBhc3NlZCBpbiBVTE9OR19NQVgsCisgICAgICogYnV0IHRoaXMgdmFsdWUgd291bGQgZ2V0IGludGVycHJldGVkIGFzICh1aWRfdCktMSAgYnkgY2hvd24KKyAgICAgKiBhbmQgaXRzIHNpYmxpbmdzLiAgIFRoYXQncyBub3Qgd2hhdCB0aGUgdXNlciBtZWFudCEgIFNvIHdlCisgICAgICogdGhyb3cgYW4gb3ZlcmZsb3cgZXhjZXB0aW9uIGluc3RlYWQuICAgKFdlIGFscmVhZHkKKyAgICAgKiBoYW5kbGVkIGEgcmVhbCAtMSB3aXRoIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdygpIGFib3ZlLikKKyAgICAgKi8KKyAgICBpZiAodWlkID09ICh1aWRfdCktMSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKworICAgIC8qIEVuc3VyZSB0aGUgdmFsdWUgd2Fzbid0IHRydW5jYXRlZC4gKi8KKyAgICBpZiAoc2l6ZW9mKHVpZF90KSA8IHNpemVvZihsb25nKSAmJgorICAgICAgICAodW5zaWduZWQgbG9uZyl1aWQgIT0gdXJlc3VsdCkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAvKiBmYWxsdGhyb3VnaCAqLworCitzdWNjZXNzOgorICAgIFB5X0RFQ1JFRihpbmRleCk7CisgICAgKih1aWRfdCAqKXAgPSB1aWQ7CiAgICAgcmV0dXJuIDE7CiAKLU92ZXJmbG93RG93bjoKK3VuZGVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgInVzZXIgaWQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKLSAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgInVpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOworICAgIGdvdG8gZmFpbDsKIAotT3ZlcmZsb3dVcDoKK292ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAidXNlciBpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgICAgICAgICAgICAgICAgICAidWlkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworZmFpbDoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOwogICAgIHJldHVybiAwOwogfQogCiBpbnQKIF9QeV9HaWRfQ29udmVydGVyKFB5T2JqZWN0ICpvYmosIHZvaWQgKnApCiB7CisgICAgZ2lkX3QgZ2lkOworICAgIFB5T2JqZWN0ICppbmRleDsKICAgICBpbnQgb3ZlcmZsb3c7CiAgICAgbG9uZyByZXN1bHQ7Ci0gICAgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIpOworICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKKworICAgIGluZGV4ID0gUHlOdW1iZXJfSW5kZXgob2JqKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImdpZCBzaG91bGQgYmUgaW50ZWdlciwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG9iaiwgJm92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cgPCAwKQotICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICBpZiAoIW92ZXJmbG93ICYmIHJlc3VsdCA9PSAtMSkgewotICAgICAgICAvKiBlcnJvciBvciAtMSAqLwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAqKGdpZF90ICopcCA9IChnaWRfdCktMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIHVuc2lnbmVkIGdpZF90ICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKLSAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkgewotICAgICAgICAgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvYmopOwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChnaWRfdCl1cmVzdWx0ID09IChnaWRfdCktMSkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICAgICAgICAgIHVyZXN1bHQgPSByZXN1bHQ7CisKKyAgICAvKgorICAgICAqIEhhbmRsaW5nIGdpZF90IGlzIGNvbXBsaWNhdGVkIGZvciB0d28gcmVhc29uczoKKyAgICAgKiAgKiBBbHRob3VnaCBnaWRfdCBpcyAoYWx3YXlzPykgdW5zaWduZWQsIGl0IHN0aWxsCisgICAgICogICAgYWNjZXB0cyAtMS4KKyAgICAgKiAgKiBXZSBkb24ndCBrbm93IGl0cyBzaXplIGluIGFkdmFuY2UtLWl0IG1heSBiZQorICAgICAqICAgIGJpZ2dlciB0aGFuIGFuIGludCwgb3IgaXQgbWF5IGJlIHNtYWxsZXIgdGhhbgorICAgICAqICAgIGEgbG9uZy4KKyAgICAgKgorICAgICAqIFNvIGEgYml0IG9mIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBpbiBvcmRlci4KKyAgICAgKiBTdGFydCB3aXRoIGludGVycHJldGluZyB0aGUgdmFsdWUgcGFzc2VkCisgICAgICogaW4gYXMgYSBzaWduZWQgbG9uZyBhbmQgc2VlIGlmIGl0IHdvcmtzLgorICAgICAqLworCisgICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KGluZGV4LCAmb3ZlcmZsb3cpOworCisgICAgaWYgKCFvdmVyZmxvdykgeworICAgICAgICBnaWQgPSAoZ2lkX3QpcmVzdWx0OworCisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIC8qIEl0J3MgYSBsZWdpdGltYXRlIC0xLCB3ZSdyZSBkb25lLiAqLworICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9CisKKyAgICAgICAgLyogQW55IG90aGVyIG5lZ2F0aXZlIG51bWJlciBpcyBkaXNhbGxvd2VkLiAqLworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byB1bmRlcmZsb3c7CisgICAgICAgIH0KKworICAgICAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCiAgICAgICAgIGlmIChzaXplb2YoZ2lkX3QpIDwgc2l6ZW9mKGxvbmcpICYmCi0gICAgICAgICAgICAodW5zaWduZWQgbG9uZykoZ2lkX3QpdXJlc3VsdCAhPSB1cmVzdWx0KQotICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAqKGdpZF90ICopcCA9IChnaWRfdCl1cmVzdWx0OworICAgICAgICAgICAgKGxvbmcpZ2lkICE9IHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgfQorCisgICAgaWYgKG92ZXJmbG93IDwgMCkKKyAgICAgICAgZ290byB1bmRlcmZsb3c7CisKKyAgICAvKgorICAgICAqIE9rYXksIHRoZSB2YWx1ZSBvdmVyZmxvd2VkIGEgc2lnbmVkIGxvbmcuICBJZiBpdAorICAgICAqIGZpdHMgaW4gYW4gKnVuc2lnbmVkKiBsb25nLCBpdCBtYXkgc3RpbGwgYmUgb2theSwKKyAgICAgKiBhcyBnaWRfdCBtYXkgYmUgdW5zaWduZWQgbG9uZyBvbiB0aGlzIHBsYXRmb3JtLgorICAgICAqLworICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcoaW5kZXgpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGdpZCA9IChnaWRfdCl1cmVzdWx0OworCisgICAgLyoKKyAgICAgKiBJZiBnaWQgPT0gKGdpZF90KS0xLCB0aGUgdXNlciBhY3R1YWxseSBwYXNzZWQgaW4gVUxPTkdfTUFYLAorICAgICAqIGJ1dCB0aGlzIHZhbHVlIHdvdWxkIGdldCBpbnRlcnByZXRlZCBhcyAoZ2lkX3QpLTEgIGJ5IGNob3duCisgICAgICogYW5kIGl0cyBzaWJsaW5ncy4gICBUaGF0J3Mgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQhICBTbyB3ZQorICAgICAqIHRocm93IGFuIG92ZXJmbG93IGV4Y2VwdGlvbiBpbnN0ZWFkLiAgIChXZSBhbHJlYWR5CisgICAgICogaGFuZGxlZCBhIHJlYWwgLTEgd2l0aCBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coKSBhYm92ZS4pCisgICAgICovCisgICAgaWYgKGdpZCA9PSAoZ2lkX3QpLTEpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisKKyAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCisgICAgaWYgKHNpemVvZihnaWRfdCkgPCBzaXplb2YobG9uZykgJiYKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcpZ2lkICE9IHVyZXN1bHQpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworc3VjY2VzczoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOworICAgICooZ2lkX3QgKilwID0gZ2lkOwogICAgIHJldHVybiAxOwogCi1PdmVyZmxvd0Rvd246Cit1bmRlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJncm91cCBpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOwotICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAiZ2lkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7CisgICAgZ290byBmYWlsOwogCi1PdmVyZmxvd1VwOgorb3ZlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJncm91cCBpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgICAgICAgICAgICAgICAgICAiZ2lkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworZmFpbDoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOwogICAgIHJldHVybiAwOwogfQogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KQEAgLTU2MCwyNSArNjQwLDI5IEBACiBfZmRfY29udmVydGVyKFB5T2JqZWN0ICpvLCBpbnQgKnAsIGNvbnN0IGNoYXIgKmFsbG93ZWQpCiB7CiAgICAgaW50IG92ZXJmbG93OwotICAgIGxvbmcgbG9uZ192YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvLCAmb3ZlcmZsb3cpOwotICAgIGlmIChQeUZsb2F0X0NoZWNrKG8pIHx8Ci0gICAgICAgIChsb25nX3ZhbHVlID09IC0xICYmICFvdmVyZmxvdyAmJiBQeUVycl9PY2N1cnJlZCgpKSkgewotICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGxvbmcgbG9uZ192YWx1ZTsKKworICAgIFB5T2JqZWN0ICppbmRleCA9IFB5TnVtYmVyX0luZGV4KG8pOworICAgIGlmIChpbmRleCA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgc2hvdWxkIGJlICVzLCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQsIFB5X1RZUEUobyktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IHNob3VsZCBiZSAlcywgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkLCBQeV9UWVBFKG8pLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorCisgICAgbG9uZ192YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhpbmRleCwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYoaW5kZXgpOwogICAgIGlmIChvdmVyZmxvdyA+IDAgfHwgbG9uZ192YWx1ZSA+IElOVF9NQVgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVkIGludGVnZXIgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKG92ZXJmbG93IDwgMCB8fCBsb25nX3ZhbHVlIDwgSU5UX01JTikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzaWduZWQgaW50ZWdlciBpcyBsZXNzIHRoYW4gbWluaW11bSIpOworICAgICAgICAgICAgICAgICAgICAgICAgImZkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKwogICAgICpwID0gKGludClsb25nX3ZhbHVlOwogICAgIHJldHVybiAxOwogfQpAQCAtNjI2LDcgKzcxMCw3IEBACiAgKiAgIHBhdGguZnVuY3Rpb25fbmFtZQogICogICAgIElmIG5vbi1OVUxMLCBwYXRoX2NvbnZlcnRlciB3aWxsIHVzZSB0aGF0IGFzIHRoZSBuYW1lCiAgKiAgICAgb2YgdGhlIGZ1bmN0aW9uIGluIGVycm9yIG1lc3NhZ2VzLgotICogICAgIChJZiBwYXRoLmFyZ3VtZW50X25hbWUgaXMgTlVMTCBpdCBvbWl0cyB0aGUgZnVuY3Rpb24gbmFtZS4pCisgKiAgICAgKElmIHBhdGguZnVuY3Rpb25fbmFtZSBpcyBOVUxMIGl0IG9taXRzIHRoZSBmdW5jdGlvbiBuYW1lLikKICAqICAgcGF0aC5hcmd1bWVudF9uYW1lCiAgKiAgICAgSWYgbm9uLU5VTEwsIHBhdGhfY29udmVydGVyIHdpbGwgdXNlIHRoYXQgYXMgdGhlIG5hbWUKICAqICAgICBvZiB0aGUgcGFyYW1ldGVyIGluIGVycm9yIG1lc3NhZ2VzLgpAQCAtNjc4LDggKzc2Miw4IEBACiAgKiBwYXRoX2NsZWFudXAoKS4gIEhvd2V2ZXIgaXQgaXMgc2FmZSB0byBkbyBzby4pCiAgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICBjaGFyICpmdW5jdGlvbl9uYW1lOwotICAgIGNoYXIgKmFyZ3VtZW50X25hbWU7CisgICAgY29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZTsKKyAgICBjb25zdCBjaGFyICphcmd1bWVudF9uYW1lOwogICAgIGludCBudWxsYWJsZTsKICAgICBpbnQgYWxsb3dfZmQ7CiAgICAgd2NoYXJfdCAqd2lkZTsKQEAgLTY5MCw2ICs3NzQsOSBAQAogICAgIFB5T2JqZWN0ICpjbGVhbnVwOwogfSBwYXRoX3Q7CiAKKyNkZWZpbmUgUEFUSF9UX0lOSVRJQUxJWkUoZnVuY3Rpb25fbmFtZSwgbnVsbGFibGUsIGFsbG93X2ZkKSBcCisgICAge2Z1bmN0aW9uX25hbWUsIE5VTEwsIG51bGxhYmxlLCBhbGxvd19mZCwgTlVMTCwgTlVMTCwgMCwgMCwgTlVMTCwgTlVMTH0KKwogc3RhdGljIHZvaWQKIHBhdGhfY2xlYW51cChwYXRoX3QgKnBhdGgpIHsKICAgICBpZiAocGF0aC0+Y2xlYW51cCkgewpAQCAtNzM3LDE1ICs4MjQsMTQgQEAKICAgICBpZiAodW5pY29kZSkgewogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgd2NoYXJfdCAqd2lkZTsKLSAgICAgICAgbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9TSVpFKHVuaWNvZGUpOwotICAgICAgICBpZiAobGVuZ3RoID4gMzI3NjcpIHsKLSAgICAgICAgICAgIEZPUk1BVF9FWENFUFRJT04oUHlFeGNfVmFsdWVFcnJvciwgIiVzIHRvbyBsb25nIGZvciBXaW5kb3dzIik7CisKKyAgICAgICAgd2lkZSA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHVuaWNvZGUsICZsZW5ndGgpOworICAgICAgICBpZiAoIXdpZGUpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0KLSAgICAgICAgd2lkZSA9IFB5VW5pY29kZV9Bc1VuaWNvZGUodW5pY29kZSk7Ci0gICAgICAgIGlmICghd2lkZSkgeworICAgICAgICBpZiAobGVuZ3RoID4gMzI3NjcpIHsKKyAgICAgICAgICAgIEZPUk1BVF9FWENFUFRJT04oUHlFeGNfVmFsdWVFcnJvciwgIiVzIHRvbyBsb25nIGZvciBXaW5kb3dzIik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtODAzLDcgKzg4OSw3IEBACiAKICAgICBsZW5ndGggPSBQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKTsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgaWYgKGxlbmd0aCA+IE1BWF9QQVRIKSB7CisgICAgaWYgKGxlbmd0aCA+IE1BWF9QQVRILTEpIHsKICAgICAgICAgRk9STUFUX0VYQ0VQVElPTihQeUV4Y19WYWx1ZUVycm9yLCAiJXMgdG9vIGxvbmcgZm9yIFdpbmRvd3MiKTsKICAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTA0LDEwICsxMTkwLDYgQEAKICNlbHNlCiAgICAgY2hhciAqKmU7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIEFQSVJFVCByYzsKLSAgICBjaGFyICAgYnVmZmVyWzEwMjRdOyAvKiBPUy8yIFByb3ZpZGVzIGEgRG9jdW1lbnRlZCBNYXggb2YgMTAyNCBDaGFycyAqLwotI2VuZGlmCiAKICAgICBkID0gUHlEaWN0X05ldygpOwogICAgIGlmIChkID09IE5VTEwpCkBAIC0xMTc2LDIwICsxMjU4LDYgQEAKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgIH0KICNlbmRpZgotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgcmMgPSBEb3NRdWVyeUV4dExJQlBBVEgoYnVmZmVyLCBCRUdJTl9MSUJQQVRIKTsKLSAgICBpZiAocmMgPT0gTk9fRVJST1IpIHsgLyogKG5vdCBhIHR5cGUsIGVudm5hbWUgaXMgTk9UICdCRUdJTl9MSUJQQVRIJykgKi8KLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoYnVmZmVyKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkJFR0lOTElCUEFUSCIsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotICAgIHJjID0gRG9zUXVlcnlFeHRMSUJQQVRIKGJ1ZmZlciwgRU5EX0xJQlBBVEgpOwotICAgIGlmIChyYyA9PSBOT19FUlJPUikgeyAvKiAobm90IGEgdHlwbywgZW52bmFtZSBpcyBOT1QgJ0VORF9MSUJQQVRIJykgKi8KLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoYnVmZmVyKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkVORExJQlBBVEgiLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLSNlbmRpZgogICAgIHJldHVybiBkOwogfQogCkBAIC0xMjAwLDI1ICsxMjY4LDYgQEAKIHsKICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogfQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2Vycm9yX3dpdGhfZmlsZW5hbWUoY2hhciogbmFtZSkKLXsKLSAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX09TRXJyb3IsIG5hbWUpOwotfQotCi0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShQeU9iamVjdCogbmFtZSkKLXsKLSAgICBQeU9iamVjdCAqbmFtZV9zdHIsICpyYzsKLSAgICBuYW1lX3N0ciA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKFB5Qnl0ZXNfQXNTdHJpbmcobmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKG5hbWUpKTsKLSAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgcmMgPSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3N0cik7Ci0gICAgUHlfWERFQ1JFRihuYW1lX3N0cik7Ci0gICAgcmV0dXJuIHJjOwotfQogCiAjaWZkZWYgTVNfV0lORE9XUwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEyMzcsMjQgKzEyODYsMTMgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdpbjMyX2Vycm9yX3VuaWNvZGUoY2hhciogZnVuY3Rpb24sIHdjaGFyX3QqIGZpbGVuYW1lKQotewotICAgIC8qIFhYWCAtIHNlZSB3aW4zMl9lcnJvciBmb3IgY29tbWVudHMgb24gJ2Z1bmN0aW9uJyAqLwotICAgIGVycm5vID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgaWYgKGZpbGVuYW1lKQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoVW5pY29kZUZpbGVuYW1lKGVycm5vLCBmaWxlbmFtZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJybm8pOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogd2luMzJfZXJyb3Jfb2JqZWN0KGNoYXIqIGZ1bmN0aW9uLCBQeU9iamVjdCogZmlsZW5hbWUpCiB7CiAgICAgLyogWFhYIC0gc2VlIHdpbjMyX2Vycm9yIGZvciBjb21tZW50cyBvbiAnZnVuY3Rpb24nICovCiAgICAgZXJybm8gPSBHZXRMYXN0RXJyb3IoKTsKICAgICBpZiAoZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICBlcnJubywKICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpOwogICAgIGVsc2UKQEAgLTEyNjMsMTA4ICsxMzAxLDMwIEBACiAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKLS8qCi0gKiBTb21lIGZ1bmN0aW9ucyByZXR1cm4gV2luMzIgZXJyb3JzLCBvdGhlcnMgb25seSBldmVyIHVzZSBwb3NpeF9lcnJvcgotICogKHRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggZXhjZXB0aW9ucykKLSAqLwogc3RhdGljIFB5T2JqZWN0ICoKLXBhdGhfcG9zaXhfZXJyb3IoY2hhciAqZnVuY3Rpb25fbmFtZSwgcGF0aF90ICpwYXRoKQotewotICAgIGlmIChwYXRoLT5uYXJyb3cpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKHBhdGgtPm5hcnJvdyk7Ci0gICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wYXRoX2Vycm9yKGNoYXIgKmZ1bmN0aW9uX25hbWUsIHBhdGhfdCAqcGF0aCkKK3BhdGhfZXJyb3IocGF0aF90ICpwYXRoKQogewogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICBpZiAocGF0aC0+bmFycm93KQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoZnVuY3Rpb25fbmFtZSwgcGF0aC0+bmFycm93KTsKLSAgICBpZiAocGF0aC0+d2lkZSkKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoZnVuY3Rpb25fbmFtZSwgcGF0aC0+d2lkZSk7Ci0gICAgcmV0dXJuIHdpbjMyX2Vycm9yKGZ1bmN0aW9uX25hbWUsIE5VTEwpOworICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwYXRoLT5vYmplY3QpOwogI2Vsc2UKLSAgICByZXR1cm4gcGF0aF9wb3NpeF9lcnJvcihmdW5jdGlvbl9uYW1lLCBwYXRoKTsKKyAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIHBhdGgtPm9iamVjdCk7CiAjZW5kaWYKIH0KIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBIZWxwZXIgRnVuY3Rpb24gdG8gVHJpbSBhbmQgRm9ybWF0IE9TLzIgTWVzc2FnZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLW9zMl9mb3JtYXRtc2coY2hhciAqbXNnYnVmLCBpbnQgbXNnbGVuLCBjaGFyICpyZWFzb24pCi17Ci0gICAgbXNnYnVmW21zZ2xlbl0gPSAnXDAnOyAvKiBPUy8yIERvZXNuJ3QgR3VhcmFudGVlIGEgVGVybWluYXRvciAqLwotCi0gICAgaWYgKHN0cmxlbihtc2didWYpID4gMCkgeyAvKiBJZiBOb24tRW1wdHkgTXNnLCBUcmltIENSTEYgKi8KLSAgICAgICAgY2hhciAqbGFzdGMgPSAmbXNnYnVmWyBzdHJsZW4obXNnYnVmKS0xIF07Ci0KLSAgICAgICAgd2hpbGUgKGxhc3RjID4gbXNnYnVmICYmIFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soKmxhc3RjKSkpCi0gICAgICAgICAgICAqbGFzdGMtLSA9ICdcMCc7IC8qIFRyaW0gVHJhaWxpbmcgV2hpdGVzcGFjZSAoQ1JMRikgKi8KLSAgICB9Ci0KLSAgICAvKiBBZGQgT3B0aW9uYWwgUmVhc29uIFRleHQgKi8KLSAgICBpZiAocmVhc29uKSB7Ci0gICAgICAgIHN0cmNhdChtc2didWYsICIgOiAiKTsKLSAgICAgICAgc3RyY2F0KG1zZ2J1ZiwgcmVhc29uKTsKLSAgICB9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICBEZWNvZGUgYW4gT1MvMiBPcGVyYXRpbmcgU3lzdGVtIEVycm9yIENvZGUKLSAqCi0gKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvb2t1cCBhbiBPUy8yIGVycm9yIGNvZGUgYW5kIHJldHVybiBhCi0gKiB0ZXh0IG1lc3NhZ2Ugd2UgY2FuIHVzZSB0byByYWlzZSBhIFB5dGhvbiBleGNlcHRpb24uCi0gKgotICogTm90ZXM6Ci0gKiAgIFRoZSBtZXNzYWdlcyBmb3IgZXJyb3JzIHJldHVybmVkIGZyb20gdGhlIE9TLzIga2VybmVsIHJlc2lkZSBpbgotICogICB0aGUgZmlsZSBPU08wMDEuTVNHIGluIHRoZSBcT1MyIGRpcmVjdG9yeSBoaWVyYXJjaHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgY2hhciAqCi1vczJfc3RyZXJyb3IoY2hhciAqbXNnYnVmLCBpbnQgbXNnYnVmbGVuLCBpbnQgZXJyb3Jjb2RlLCBjaGFyICpyZWFzb24pCi17Ci0gICAgQVBJUkVUIHJjOwotICAgIFVMT05HICBtc2dsZW47Ci0KLSAgICAvKiBSZXRyaWV2ZSBLZXJuZWwtUmVsYXRlZCBFcnJvciBNZXNzYWdlIGZyb20gT1NPMDAxLk1TRyBGaWxlICovCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJjID0gRG9zR2V0TWVzc2FnZShOVUxMLCAwLCBtc2didWYsIG1zZ2J1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb2RlLCAib3NvMDAxLm1zZyIsICZtc2dsZW4pOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICBpZiAocmMgPT0gTk9fRVJST1IpCi0gICAgICAgIG9zMl9mb3JtYXRtc2cobXNnYnVmLCBtc2dsZW4sIHJlYXNvbik7Ci0gICAgZWxzZQotICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgbXNnYnVmbGVuLAotICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIE9TIGVycm9yICMlZCIsIGVycm9yY29kZSk7Ci0KLSAgICByZXR1cm4gbXNnYnVmOwotfQotCi0vKiBTZXQgYW4gT1MvMi1zcGVjaWZpYyBlcnJvciBhbmQgcmV0dXJuIE5VTEwuICBPUy8yIGtlcm5lbAotICAgZXJyb3JzIGFyZSBub3QgaW4gYSBnbG9iYWwgdmFyaWFibGUgZS5nLiAnZXJybm8nIG5vciBhcmUKLSAgIHRoZXkgY29uZ3J1ZW50IHdpdGggcG9zaXggZXJyb3IgbnVtYmVycy4gKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLW9zMl9lcnJvcihpbnQgY29kZSkKK3BhdGhfZXJyb3IyKHBhdGhfdCAqcGF0aCwgcGF0aF90ICpwYXRoMikKIHsKLSAgICBjaGFyIHRleHRbMTAyNF07Ci0gICAgUHlPYmplY3QgKnY7Ci0KLSAgICBvczJfc3RyZXJyb3IodGV4dCwgc2l6ZW9mKHRleHQpLCBjb2RlLCAiIik7Ci0KLSAgICB2ID0gUHlfQnVpbGRWYWx1ZSgiKGlzKSIsIGNvZGUsIHRleHQpOwotICAgIGlmICh2ICE9IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX09TRXJyb3IsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOyAvKiBTaWduYWwgdG8gUHl0aG9uIHRoYXQgYW4gRXhjZXB0aW9uIGlzIFBlbmRpbmcgKi8KKyNpZmRlZiBNU19XSU5ET1dTCisgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0cyhQeUV4Y19PU0Vycm9yLAorICAgICAgICAgICAgMCwgcGF0aC0+b2JqZWN0LCBwYXRoMi0+b2JqZWN0KTsKKyNlbHNlCisgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoUHlFeGNfT1NFcnJvciwKKyAgICAgICAgcGF0aC0+b2JqZWN0LCBwYXRoMi0+b2JqZWN0KTsKKyNlbmRpZgogfQogCi0jZW5kaWYgLyogT1MyICovCiAKIC8qIFBPU0lYIGdlbmVyaWMgbWV0aG9kcyAqLwogCkBAIC0xMzg4LDY1ICsxMzQ4LDMxIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF8xc3RyKFB5T2JqZWN0ICphcmdzLCBjaGFyICpmb3JtYXQsIGludCAoKmZ1bmMpKGNvbnN0IGNoYXIqKSkKK3Bvc2l4XzFzdHIoY29uc3QgY2hhciAqZnVuY19uYW1lLCBQeU9iamVjdCAqYXJncywgY2hhciAqZm9ybWF0LAorICAgICAgICAgICBpbnQgKCpmdW5jKShjb25zdCBjaGFyKikpCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoMSA9IE5VTEw7Ci0gICAgY2hhciAqcGF0aDE7CisgICAgcGF0aF90IHBhdGg7CiAgICAgaW50IHJlczsKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gZnVuY19uYW1lOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGgxID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aDEpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSAoKmZ1bmMpKHBhdGgxKTsKKyAgICByZXMgPSAoKmZ1bmMpKHBhdGgubmFycm93KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgxKTsKLSAgICBQeV9ERUNSRUYob3BhdGgxKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQogCiAKICNpZmRlZiBNU19XSU5ET1dTCi1zdGF0aWMgUHlPYmplY3QqCi13aW4zMl8xc3RyKFB5T2JqZWN0KiBhcmdzLCBjaGFyKiBmdW5jLAotICAgICAgICAgICBjaGFyKiBmb3JtYXQsIEJPT0wgKF9fc3RkY2FsbCAqZnVuY0EpKExQQ1NUUiksCi0gICAgICAgICAgIGNoYXIqIHdmb3JtYXQsIEJPT0wgKF9fc3RkY2FsbCAqZnVuY1cpKExQV1NUUikpCi17Ci0gICAgUHlPYmplY3QgKnVuaTsKLSAgICBjb25zdCBjaGFyICphbnNpOwotICAgIEJPT0wgcmVzdWx0OwotCi0gICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgd2Zvcm1hdCwgJnVuaSkpCi0gICAgewotICAgICAgICB3Y2hhcl90ICp3c3RyID0gUHlVbmljb2RlX0FzVW5pY29kZSh1bmkpOwotICAgICAgICBpZiAod3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcmVzdWx0ID0gZnVuY1cod3N0cik7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX29iamVjdChmdW5jLCB1bmkpOwotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgIH0KLSAgICBQeUVycl9DbGVhcigpOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGZvcm1hdCwgJmFuc2kpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAod2luMzJfd2Fybl9ieXRlc19hcGkoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlc3VsdCA9IGZ1bmNBKGFuc2kpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcihmdW5jLCBhbnNpKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7Ci0KLX0KLQogLyogVGhpcyBpcyBhIHJlaW1wbGVtZW50YXRpb24gb2YgdGhlIEMgbGlicmFyeSdzIGNoZGlyIGZ1bmN0aW9uLAogICAgYnV0IG9uZSB0aGF0IHByb2R1Y2VzIFdpbjMyIGVycm9ycyBpbnN0ZWFkIG9mIERPUyBlcnJvciBjb2Rlcy4KICAgIGNoZGlyIGlzIGVzc2VudGlhbGx5IGEgd3JhcHBlciBhcm91bmQgU2V0Q3VycmVudERpcmVjdG9yeTsgaG93ZXZlciwKQEAgLTE0NTUsMTggKzEzODEsMTggQEAKIHN0YXRpYyBCT09MIF9fc3RkY2FsbAogd2luMzJfY2hkaXIoTFBDU1RSIHBhdGgpCiB7Ci0gICAgY2hhciBuZXdfcGF0aFtNQVhfUEFUSCsxXTsKKyAgICBjaGFyIG5ld19wYXRoW01BWF9QQVRIXTsKICAgICBpbnQgcmVzdWx0OwogICAgIGNoYXIgZW52WzRdID0gIj14OiI7CiAKICAgICBpZighU2V0Q3VycmVudERpcmVjdG9yeUEocGF0aCkpCiAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICByZXN1bHQgPSBHZXRDdXJyZW50RGlyZWN0b3J5QShNQVhfUEFUSCsxLCBuZXdfcGF0aCk7CisgICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeUEoUHlfQVJSQVlfTEVOR1RIKG5ld19wYXRoKSwgbmV3X3BhdGgpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgLyogSW4gdGhlIEFOU0kgQVBJLCB0aGVyZSBzaG91bGQgbm90IGJlIGFueSBwYXRocyBsb25nZXIKLSAgICAgICB0aGFuIE1BWF9QQVRILiAqLwotICAgIGFzc2VydChyZXN1bHQgPD0gTUFYX1BBVEgrMSk7CisgICAgICAgdGhhbiBNQVhfUEFUSC0xIChub3QgaW5jbHVkaW5nIHRoZSBmaW5hbCBudWxsIGNoYXJhY3RlcikuICovCisgICAgYXNzZXJ0KHJlc3VsdCA8IFB5X0FSUkFZX0xFTkdUSChuZXdfcGF0aCkpOwogICAgIGlmIChzdHJuY21wKG5ld19wYXRoLCAiXFxcXCIsIDIpID09IDAgfHwKICAgICAgICAgc3RybmNtcChuZXdfcGF0aCwgIi8vIiwgMikgPT0gMCkKICAgICAgICAgLyogVU5DIHBhdGgsIG5vdGhpbmcgdG8gZG8uICovCkBAIC0xNDgwLDI0ICsxNDA2LDI0IEBACiBzdGF0aWMgQk9PTCBfX3N0ZGNhbGwKIHdpbjMyX3djaGRpcihMUENXU1RSIHBhdGgpCiB7Ci0gICAgd2NoYXJfdCBfbmV3X3BhdGhbTUFYX1BBVEgrMV0sICpuZXdfcGF0aCA9IF9uZXdfcGF0aDsKKyAgICB3Y2hhcl90IF9uZXdfcGF0aFtNQVhfUEFUSF0sICpuZXdfcGF0aCA9IF9uZXdfcGF0aDsKICAgICBpbnQgcmVzdWx0OwogICAgIHdjaGFyX3QgZW52WzRdID0gTCI9eDoiOwogCiAgICAgaWYoIVNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGgpKQogICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeVcoTUFYX1BBVEgrMSwgbmV3X3BhdGgpOworICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlXKFB5X0FSUkFZX0xFTkdUSChuZXdfcGF0aCksIG5ld19wYXRoKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGlmIChyZXN1bHQgPiBNQVhfUEFUSCsxKSB7Ci0gICAgICAgIG5ld19wYXRoID0gbWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgaWYgKHJlc3VsdCA+IFB5X0FSUkFZX0xFTkdUSChuZXdfcGF0aCkpIHsKKyAgICAgICAgbmV3X3BhdGggPSBQeU1lbV9SYXdNYWxsb2MocmVzdWx0ICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKCFuZXdfcGF0aCkgewogICAgICAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX09VVE9GTUVNT1JZKTsKICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhyZXN1bHQsIG5ld19wYXRoKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIGZyZWUobmV3X3BhdGgpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShuZXdfcGF0aCk7CiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTA4LDcgKzE0MzQsNyBAQAogICAgIGVudlsxXSA9IG5ld19wYXRoWzBdOwogICAgIHJlc3VsdCA9IFNldEVudmlyb25tZW50VmFyaWFibGVXKGVudiwgbmV3X3BhdGgpOwogICAgIGlmIChuZXdfcGF0aCAhPSBfbmV3X3BhdGgpCi0gICAgICAgIGZyZWUobmV3X3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG5ld19wYXRoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmCkBAIC0xNTIzLDEzICsxNDQ5LDEzIEBACiAjZGVmaW5lIEhBVkVfU1RBVF9OU0VDIDEKIAogc3RydWN0IHdpbjMyX3N0YXR7Ci0gICAgaW50IHN0X2RldjsKKyAgICB1bnNpZ25lZCBsb25nIHN0X2RldjsKICAgICBfX2ludDY0IHN0X2lubzsKICAgICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwogICAgIGludCBzdF9ubGluazsKICAgICBpbnQgc3RfdWlkOwogICAgIGludCBzdF9naWQ7Ci0gICAgaW50IHN0X3JkZXY7CisgICAgdW5zaWduZWQgbG9uZyBzdF9yZGV2OwogICAgIF9faW50NjQgc3Rfc2l6ZTsKICAgICB0aW1lX3Qgc3RfYXRpbWU7CiAgICAgaW50IHN0X2F0aW1lX25zZWM7CkBAIC0xNTg4LDYgKzE1MTQsOCBAQAogICAgIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7CiAgICAgcmVzdWx0LT5zdF9tb2RlID0gYXR0cmlidXRlc190b19tb2RlKGluZm8tPmR3RmlsZUF0dHJpYnV0ZXMpOwogICAgIHJlc3VsdC0+c3Rfc2l6ZSA9ICgoKF9faW50NjQpaW5mby0+bkZpbGVTaXplSGlnaCk8PDMyKSArIGluZm8tPm5GaWxlU2l6ZUxvdzsKKyAgICByZXN1bHQtPnN0X2RldiA9IGluZm8tPmR3Vm9sdW1lU2VyaWFsTnVtYmVyOworICAgIHJlc3VsdC0+c3RfcmRldiA9IHJlc3VsdC0+c3RfZGV2OwogICAgIEZJTEVfVElNRV90b190aW1lX3RfbnNlYygmaW5mby0+ZnRDcmVhdGlvblRpbWUsICZyZXN1bHQtPnN0X2N0aW1lLCAmcmVzdWx0LT5zdF9jdGltZV9uc2VjKTsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0TGFzdFdyaXRlVGltZSwgJnJlc3VsdC0+c3RfbXRpbWUsICZyZXN1bHQtPnN0X210aW1lX25zZWMpOwogICAgIEZJTEVfVElNRV90b190aW1lX3RfbnNlYygmaW5mby0+ZnRMYXN0QWNjZXNzVGltZSwgJnJlc3VsdC0+c3RfYXRpbWUsICZyZXN1bHQtPnN0X2F0aW1lX25zZWMpOwpAQCAtMTU5NSw5ICsxNTIzLDkgQEAKICAgICByZXN1bHQtPnN0X2lubyA9ICgoKF9faW50NjQpaW5mby0+bkZpbGVJbmRleEhpZ2gpPDwzMikgKyBpbmZvLT5uRmlsZUluZGV4TG93OwogICAgIGlmIChyZXBhcnNlX3RhZyA9PSBJT19SRVBBUlNFX1RBR19TWU1MSU5LKSB7CiAgICAgICAgIC8qIGZpcnN0IGNsZWFyIHRoZSBTX0lGTVQgYml0cyAqLwotICAgICAgICByZXN1bHQtPnN0X21vZGUgXj0gKHJlc3VsdC0+c3RfbW9kZSAmIDAxNzAwMDApOworICAgICAgICByZXN1bHQtPnN0X21vZGUgXj0gKHJlc3VsdC0+c3RfbW9kZSAmIFNfSUZNVCk7CiAgICAgICAgIC8qIG5vdyBzZXQgdGhlIGJpdHMgdGhhdCBtYWtlIHRoaXMgYSBzeW1saW5rICovCi0gICAgICAgIHJlc3VsdC0+c3RfbW9kZSB8PSAwMTIwMDAwOworICAgICAgICByZXN1bHQtPnN0X21vZGUgfD0gU19JRkxOSzsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTE2NTAsNyArMTU3OCw3IEBACiB9CiAKIC8qIEdyYWIgR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlIGR5bmFtaWNhbGx5IGZyb20ga2VybmVsMzIgKi8KLXN0YXRpYyBpbnQgaGFzX0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSA9IDA7CitzdGF0aWMgaW50IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgPSAtMTsKIHN0YXRpYyBEV09SRCAoQ0FMTEJBQ0sgKlB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcpKEhBTkRMRSwgTFBXU1RSLCBEV09SRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEKTsKIHN0YXRpYyBpbnQKQEAgLTE2NjEsNyArMTU4OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCk7CiAKICAgICAvKiBvbmx5IHJlY2hlY2sgKi8KLSAgICBpZiAoIWhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUpCisgICAgaWYgKC0xID09IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUpCiAgICAgewogICAgICAgICBoS2VybmVsMzIgPSBHZXRNb2R1bGVIYW5kbGVXKEwiS0VSTkVMMzIiKTsKICAgICAgICAgKihGQVJQUk9DKikmUHlfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlQSA9IEdldFByb2NBZGRyZXNzKGhLZXJuZWwzMiwKQEAgLTE2ODcsNyArMTYxNSw3IEBACiAgICAgaWYoIWJ1Zl9zaXplKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKLSAgICBidWYgPSAod2NoYXJfdCAqKW1hbGxvYygoYnVmX3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICBidWYgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYygoYnVmX3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoIWJ1ZikgewogICAgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfT1VUT0ZNRU1PUlkpOwogICAgICAgICByZXR1cm4gRkFMU0U7CkBAIC0xNjk3LDEyICsxNjI1LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgYnVmX3NpemUsIFZPTFVNRV9OQU1FX0RPUyk7CiAKICAgICBpZighcmVzdWx0X2xlbmd0aCkgewotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAogICAgIGlmKCFDbG9zZUhhbmRsZShoZGwpKSB7Ci0gICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgUHlNZW1fRnJlZShidWYpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCkBAIC0xNzkzLDcgKzE3MjEsNyBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAKICAgICAgICAgICAgICAgICBjb2RlID0gd2luMzJfeHN0YXRfaW1wbF93KHRhcmdldF9wYXRoLCByZXN1bHQsIEZBTFNFKTsKLSAgICAgICAgICAgICAgICBmcmVlKHRhcmdldF9wYXRoKTsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKHRhcmdldF9wYXRoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY29kZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCkBAIC0xODg5LDcgKzE4MTcsNyBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAKICAgICAgICAgICAgICAgICBjb2RlID0gd2luMzJfeHN0YXRfaW1wbF93KHRhcmdldF9wYXRoLCByZXN1bHQsIEZBTFNFKTsKLSAgICAgICAgICAgICAgICBmcmVlKHRhcmdldF9wYXRoKTsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKHRhcmdldF9wYXRoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY29kZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCkBAIC0yMjg4LDcgKzIyMTYsOSBAQAogI2Vsc2UKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDEsIFB5TG9uZ19Gcm9tTG9uZygobG9uZylzdC0+c3RfaW5vKSk7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKSAmJiAhZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDIsIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHN0LT5zdF9kZXYpKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKXN0LT5zdF9kZXYpKTsKICNlbHNlCkBAIC0yNDIzLDUzICsyMzUzLDE1OCBAQAogICAgICAgICByZXN1bHQgPSBTVEFUKHBhdGgtPm5hcnJvdywgJnN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCi0gICAgaWYgKHJlc3VsdCAhPSAwKQotICAgICAgICByZXR1cm4gcGF0aF9lcnJvcigic3RhdCIsIHBhdGgpOworICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgICByZXR1cm4gcGF0aF9lcnJvcihwYXRoKTsKKyAgICB9CiAKICAgICByZXR1cm4gX3B5c3RhdF9mcm9tc3RydWN0c3RhdCgmc3QpOwogfQogCi1QeURvY19TVFJWQVIocG9zaXhfc3RhdF9fZG9jX18sCi0ic3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpIC0+IHN0YXQgcmVzdWx0XG5cblwKLVBlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLlxuXAotXG5cCi1wYXRoIG1heSBiZSBzcGVjaWZpZWQgYXMgZWl0aGVyIGEgc3RyaW5nIG9yIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLlxuXAotXG5cCi1JZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuXAotICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuXAotICBkaXJfZmQgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgb24geW91ciBwbGF0Zm9ybTsgaWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nXG5cCi0gIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLlxuXAotSWYgZm9sbG93X3N5bWxpbmtzIGlzIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljXG5cCi0gIGxpbmssIHN0YXQgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlIHRoZVxuXAotICBsaW5rIHBvaW50cyB0by5cblwKLUl0IGlzIGFuIGVycm9yIHRvIHVzZSBkaXJfZmQgb3IgZm9sbG93X3N5bWxpbmtzIHdoZW4gc3BlY2lmeWluZyBwYXRoIGFzXG5cCi0gIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLiIpOworI2lmZGVmIEhBVkVfRlNUQVRBVAorICAgICNkZWZpbmUgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF9jb252ZXJ0ZXIKKyNlbHNlCisgICAgI2RlZmluZSBPU19TVEFUX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX3VuYXZhaWxhYmxlCisjZW5kaWYKKworCisvKltweXRob24gaW5wdXRdCisKK2NsYXNzIHBhdGhfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisKKyAgICB0eXBlID0gInBhdGhfdCIKKyAgICBpbXBsX2J5X3JlZmVyZW5jZSA9IFRydWUKKyAgICBwYXJzZV9ieV9yZWZlcmVuY2UgPSBUcnVlCisKKyAgICBjb252ZXJ0ZXIgPSAncGF0aF9jb252ZXJ0ZXInCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYWxsb3dfZmQ9RmFsc2UsIG51bGxhYmxlPUZhbHNlKToKKyAgICAgICAgIyByaWdodCBub3cgcGF0aF90IGRvZXNuJ3Qgc3VwcG9ydCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgIyB0byBzdXBwb3J0IGEgZGVmYXVsdCB2YWx1ZSwgeW91J2xsIG5lZWQgdG8gb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpLgorICAgICAgICBpZiBzZWxmLmRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkOgorICAgICAgICAgICAgZmFpbCgiQ2FuJ3Qgc3BlY2lmeSBhIGRlZmF1bHQgdG8gdGhlIHBhdGhfdCBjb252ZXJ0ZXIhIikKKworICAgICAgICBpZiBzZWxmLmNfZGVmYXVsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZhaWwoIkNhbid0IHNwZWNpZnkgYSBjX2RlZmF1bHQgdG8gdGhlIHBhdGhfdCBjb252ZXJ0ZXIhIikKKworICAgICAgICBzZWxmLm51bGxhYmxlID0gbnVsbGFibGUKKyAgICAgICAgc2VsZi5hbGxvd19mZCA9IGFsbG93X2ZkCisKKyAgICBkZWYgcHJlX3JlbmRlcihzZWxmKToKKyAgICAgICAgZGVmIHN0cmlmeSh2YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gc3RyKGludChib29sKHZhbHVlKSkpCisKKyAgICAgICAgIyBhZGQgc2VsZi5weV9uYW1lIGhlcmUgd2hlbiBtZXJnaW5nIHdpdGggcG9zaXhtb2R1bGUgY29udmVyc2lvbgorICAgICAgICBzZWxmLmNfZGVmYXVsdCA9ICdQQVRIX1RfSU5JVElBTElaRSgie30iLCB7fSwge30pJy5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLmZ1bmN0aW9uLm5hbWUsCisgICAgICAgICAgICBzdHJpZnkoc2VsZi5udWxsYWJsZSksCisgICAgICAgICAgICBzdHJpZnkoc2VsZi5hbGxvd19mZCksCisgICAgICAgICAgICApCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgcmV0dXJuICJwYXRoX2NsZWFudXAoJiIgKyBzZWxmLm5hbWUgKyAiKTtcbiIKKworCitjbGFzcyBkaXJfZmRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnaW50JworICAgIGNvbnZlcnRlciA9ICdPU19TVEFUX0RJUl9GRF9DT05WRVJURVInCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVmYXVsdCBpbiAodW5zcGVjaWZpZWQsIE5vbmUpOgorICAgICAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSAnREVGQVVMVF9ESVJfRkQnCisKKworW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbcHl0aG9uIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NWM5ZjQ1NmY1MzI0NGZjM10qLworCisvKltjbGluaWMgaW5wdXRdCisKK29zLnN0YXQKKworICAgIHBhdGggOiBwYXRoX3QoYWxsb3dfZmQ9VHJ1ZSkKKyAgICAgICAgUGF0aCB0byBiZSBleGFtaW5lZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC4KKworICAgICoKKworICAgIGRpcl9mZCA6IGRpcl9mZCA9IE5vbmUKKyAgICAgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LAorICAgICAgICBhbmQgcGF0aCBzaG91bGQgYmUgYSByZWxhdGl2ZSBzdHJpbmc7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvCisgICAgICAgIHRoYXQgZGlyZWN0b3J5LgorCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorICAgICAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLAorICAgICAgICBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZQorICAgICAgICB0aGUgbGluayBwb2ludHMgdG8uCisKK1BlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgorCitkaXJfZmQgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkCisgIG9uIHlvdXIgcGxhdGZvcm0uICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGEKKyAgTm90SW1wbGVtZW50ZWRFcnJvci4KKworSXQncyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhcworICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIob3Nfc3RhdF9fZG9jX18sCisic3RhdCgkbW9kdWxlLCAvLCBwYXRoLCAqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpXG4iCisiLS1cbiIKKyJcbiIKKyJQZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC5cbiIKKyJcbiIKKyIgIHBhdGhcbiIKKyIgICAgUGF0aCB0byBiZSBleGFtaW5lZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC5cbiIKKyIgIGRpcl9mZFxuIgorIiAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG4iCisiICAgIGFuZCBwYXRoIHNob3VsZCBiZSBhIHJlbGF0aXZlIHN0cmluZzsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG9cbiIKKyIgICAgdGhhdCBkaXJlY3RvcnkuXG4iCisiICBmb2xsb3dfc3ltbGlua3NcbiIKKyIgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluayxcbiIKKyIgICAgc3RhdCB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGVcbiIKKyIgICAgdGhlIGxpbmsgcG9pbnRzIHRvLlxuIgorIlxuIgorImRpcl9mZCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWRcbiIKKyIgIG9uIHlvdXIgcGxhdGZvcm0uICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGFcbiIKKyIgIE5vdEltcGxlbWVudGVkRXJyb3IuXG4iCisiXG4iCisiSXRcJ3MgYW4gZXJyb3IgdG8gdXNlIGRpcl9mZCBvciBmb2xsb3dfc3ltbGlua3Mgd2hlbiBzcGVjaWZ5aW5nIHBhdGggYXNcbiIKKyIgIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLiIpOworCisjZGVmaW5lIE9TX1NUQVRfTUVUSE9EREVGICAgIFwKKyAgICB7InN0YXQiLCAoUHlDRnVuY3Rpb24pb3Nfc3RhdCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3N0YXRfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3N0YXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3Nfc3RhdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IGRpcl9mZCwgaW50IGZvbGxvd19zeW1saW5rcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zdGF0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImRpcl9mZCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKLSAgICBwYXRoX3QgcGF0aDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoInN0YXQiLCAwLCAxKTsKICAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CiAgICAgaW50IGZvbGxvd19zeW1saW5rcyA9IDE7Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKIAotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmFsbG93X2ZkID0gMTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyZwOnN0YXQiLCBrZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAotI2lmZGVmIEhBVkVfRlNUQVRBVAotICAgICAgICBkaXJfZmRfY29udmVydGVyLCAmZGlyX2ZkLAotI2Vsc2UKLSAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkLAotI2VuZGlmCi0gICAgICAgICZmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9kb19zdGF0KCJzdGF0IiwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPJnwkTyZwOnN0YXQiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3N0YXRfaW1wbChtb2R1bGUsICZwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcGF0aCAqLwogICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisKICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc3RhdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IGRpcl9mZCwgaW50IGZvbGxvd19zeW1saW5rcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mMWRjYWE1ZTI0ZGI5ODgyIGlucHV0PTVhZTE1NWJkNDc1ZmQyMGFdKi8KK3sKKyAgICByZXR1cm4gcG9zaXhfZG9fc3RhdCgic3RhdCIsIHBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKK30KKwogUHlEb2NfU1RSVkFSKHBvc2l4X2xzdGF0X19kb2NfXywKICJsc3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSkgLT4gc3RhdCByZXN1bHRcblxuXAogTGlrZSBzdGF0KCksIGJ1dCBkbyBub3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLlxuXApAQCAtMjQ4NSw2ICsyNTIwLDcgQEAKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsc3RhdCI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mOmxzdGF0Iiwga2V5d29yZHMsCiAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICNpZmRlZiBIQVZFX0ZTVEFUQVQKQEAgLTI0OTQsNDQgKzI1MzAsMTIyIEBACiAjZW5kaWYKICAgICAgICAgKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuX3ZhbHVlID0gcG9zaXhfZG9fc3RhdCgic3RhdCIsICZwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7CisgICAgcmV0dXJuX3ZhbHVlID0gcG9zaXhfZG9fc3RhdCgibHN0YXQiLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOwogICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvc2l4X2FjY2Vzc19fZG9jX18sCi0iYWNjZXNzKHBhdGgsIG1vZGUsICosIGRpcl9mZD1Ob25lLCBlZmZlY3RpdmVfaWRzPUZhbHNlLFwKLSBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcblxuXAotVXNlIHRoZSByZWFsIHVpZC9naWQgdG8gdGVzdCBmb3IgYWNjZXNzIHRvIGEgcGF0aC4gIFJldHVybnMgVHJ1ZSBpZiBncmFudGVkLFxuXAotRmFsc2Ugb3RoZXJ3aXNlLlxuXAotXG5cCi1JZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuXAotICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuXAotSWYgZWZmZWN0aXZlX2lkcyBpcyBUcnVlLCBhY2Nlc3Mgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkIGluc3RlYWQgb2ZcblwKLSAgdGhlIHJlYWwgdWlkL2dpZC5cblwKLUlmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuXAotICBsaW5rLCBhY2Nlc3Mgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlIHRoZVxuXAotICBsaW5rIHBvaW50cyB0by5cblwKLWRpcl9mZCwgZWZmZWN0aXZlX2lkcywgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkXG5cCi0gIG9uIHlvdXIgcGxhdGZvcm0uICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGFcblwKLSAgTm90SW1wbGVtZW50ZWRFcnJvci5cblwKLVxuXAotTm90ZSB0aGF0IG1vc3Qgb3BlcmF0aW9ucyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQsIHRoZXJlZm9yZSB0aGlzXG5cCi0gIHJvdXRpbmUgY2FuIGJlIHVzZWQgaW4gYSBzdWlkL3NnaWQgZW52aXJvbm1lbnQgdG8gdGVzdCBpZiB0aGUgaW52b2tpbmcgdXNlclxuXAotICBoYXMgdGhlIHNwZWNpZmllZCBhY2Nlc3MgdG8gdGhlIHBhdGguXG5cCi1UaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgRl9PSyB0byB0ZXN0IGV4aXN0ZW5jZSwgb3IgdGhlIGluY2x1c2l2ZS1PUlxuXAotICBvZiBSX09LLCBXX09LLCBhbmQgWF9PSy4iKTsKKworI2lmZGVmIEhBVkVfRkFDQ0VTU0FUCisgICAgI2RlZmluZSBPU19BQ0NFU1NfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCisjZWxzZQorICAgICNkZWZpbmUgT1NfQUNDRVNTX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX3VuYXZhaWxhYmxlCisjZW5kaWYKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmFjY2VzcworCisgICAgcGF0aDogcGF0aF90KGFsbG93X2ZkPVRydWUpCisgICAgICAgIFBhdGggdG8gYmUgdGVzdGVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LgorCisgICAgbW9kZTogaW50CisgICAgICAgIE9wZXJhdGluZy1zeXN0ZW0gbW9kZSBiaXRmaWVsZC4gIENhbiBiZSBGX09LIHRvIHRlc3QgZXhpc3RlbmNlLAorICAgICAgICBvciB0aGUgaW5jbHVzaXZlLU9SIG9mIFJfT0ssIFdfT0ssIGFuZCBYX09LLgorCisgICAgKgorCisgICAgZGlyX2ZkIDogZGlyX2ZkID0gTm9uZQorICAgICAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksCisgICAgICAgIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdAorICAgICAgICBkaXJlY3RvcnkuCisKKyAgICBlZmZlY3RpdmVfaWRzOiBib29sID0gRmFsc2UKKyAgICAgICAgSWYgVHJ1ZSwgYWNjZXNzIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCBpbnN0ZWFkIG9mCisgICAgICAgIHRoZSByZWFsIHVpZC9naWQuCisKKyAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlCisgICAgICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssCisgICAgICAgIGFjY2VzcyB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUKKyAgICAgICAgdGhlIGxpbmsgcG9pbnRzIHRvLgorCitVc2UgdGhlIHJlYWwgdWlkL2dpZCB0byB0ZXN0IGZvciBhY2Nlc3MgdG8gYSBwYXRoLgorCit7cGFyYW1ldGVyc30KK2Rpcl9mZCwgZWZmZWN0aXZlX2lkcywgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkCisgIG9uIHlvdXIgcGxhdGZvcm0uICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGEKKyAgTm90SW1wbGVtZW50ZWRFcnJvci4KKworTm90ZSB0aGF0IG1vc3Qgb3BlcmF0aW9ucyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQsIHRoZXJlZm9yZSB0aGlzCisgIHJvdXRpbmUgY2FuIGJlIHVzZWQgaW4gYSBzdWlkL3NnaWQgZW52aXJvbm1lbnQgdG8gdGVzdCBpZiB0aGUgaW52b2tpbmcgdXNlcgorICBoYXMgdGhlIHNwZWNpZmllZCBhY2Nlc3MgdG8gdGhlIHBhdGguCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKG9zX2FjY2Vzc19fZG9jX18sCisiYWNjZXNzKCRtb2R1bGUsIC8sIHBhdGgsIG1vZGUsICosIGRpcl9mZD1Ob25lLCBlZmZlY3RpdmVfaWRzPUZhbHNlLFxuIgorIiAgICAgICBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcbiIKKyItLVxuIgorIlxuIgorIlVzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguXG4iCisiXG4iCisiICBwYXRoXG4iCisiICAgIFBhdGggdG8gYmUgdGVzdGVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LlxuIgorIiAgbW9kZVxuIgorIiAgICBPcGVyYXRpbmctc3lzdGVtIG1vZGUgYml0ZmllbGQuICBDYW4gYmUgRl9PSyB0byB0ZXN0IGV4aXN0ZW5jZSxcbiIKKyIgICAgb3IgdGhlIGluY2x1c2l2ZS1PUiBvZiBSX09LLCBXX09LLCBhbmQgWF9PSy5cbiIKKyIgIGRpcl9mZFxuIgorIiAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG4iCisiICAgIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdFxuIgorIiAgICBkaXJlY3RvcnkuXG4iCisiICBlZmZlY3RpdmVfaWRzXG4iCisiICAgIElmIFRydWUsIGFjY2VzcyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQgaW5zdGVhZCBvZlxuIgorIiAgICB0aGUgcmVhbCB1aWQvZ2lkLlxuIgorIiAgZm9sbG93X3N5bWxpbmtzXG4iCisiICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssXG4iCisiICAgIGFjY2VzcyB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGVcbiIKKyIgICAgdGhlIGxpbmsgcG9pbnRzIHRvLlxuIgorIlxuIgorImRpcl9mZCwgZWZmZWN0aXZlX2lkcywgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkXG4iCisiICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG4iCisiICBOb3RJbXBsZW1lbnRlZEVycm9yLlxuIgorIlxuIgorIk5vdGUgdGhhdCBtb3N0IG9wZXJhdGlvbnMgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLCB0aGVyZWZvcmUgdGhpc1xuIgorIiAgcm91dGluZSBjYW4gYmUgdXNlZCBpbiBhIHN1aWQvc2dpZCBlbnZpcm9ubWVudCB0byB0ZXN0IGlmIHRoZSBpbnZva2luZyB1c2VyXG4iCisiICBoYXMgdGhlIHNwZWNpZmllZCBhY2Nlc3MgdG8gdGhlIHBhdGguIik7CisKKyNkZWZpbmUgT1NfQUNDRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJhY2Nlc3MiLCAoUHlDRnVuY3Rpb24pb3NfYWNjZXNzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfYWNjZXNzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9hY2Nlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfYWNjZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgbW9kZSwgaW50IGRpcl9mZCwgaW50IGVmZmVjdGl2ZV9pZHMsIGludCBmb2xsb3dfc3ltbGlua3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfYWNjZXNzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgIm1vZGUiLCAiZGlyX2ZkIiwgImVmZmVjdGl2ZV9pZHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07Ci0gICAgcGF0aF90IHBhdGg7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgIm1vZGUiLCAiZGlyX2ZkIiwgImVmZmVjdGl2ZV9pZHMiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgiYWNjZXNzIiwgMCwgMSk7CiAgICAgaW50IG1vZGU7CiAgICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOwogICAgIGludCBlZmZlY3RpdmVfaWRzID0gMDsKICAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk8maXwkTyZwcDphY2Nlc3MiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJm1vZGUsIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiwgJmRpcl9mZCwgJmVmZmVjdGl2ZV9pZHMsICZmb2xsb3dfc3ltbGlua3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfYWNjZXNzX2ltcGwobW9kdWxlLCAmcGF0aCwgbW9kZSwgZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBmb2xsb3dfc3ltbGlua3MpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2FjY2Vzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IG1vZGUsIGludCBkaXJfZmQsIGludCBlZmZlY3RpdmVfaWRzLCBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE2ZWQ0ZjE1MWJlOWRmMGYgaW5wdXQ9MmUyZTc1OTQzNzFmNWI3ZV0qLworewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtMjU0MCwxNyArMjY1NCw2IEBACiAgICAgaW50IHJlc3VsdDsKICNlbmRpZgogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8maXwkTyZwcDphY2Nlc3MiLCBrZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmbW9kZSwKLSNpZmRlZiBIQVZFX0ZBQ0NFU1NBVAotICAgICAgICBkaXJfZmRfY29udmVydGVyLCAmZGlyX2ZkLAotI2Vsc2UKLSAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkLAotI2VuZGlmCi0gICAgICAgICZlZmZlY3RpdmVfaWRzLCAmZm9sbG93X3N5bWxpbmtzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICNpZm5kZWYgSEFWRV9GQUNDRVNTQVQKICAgICBpZiAoZm9sbG93X3N5bWxpbmtzX3NwZWNpZmllZCgiYWNjZXNzIiwgZm9sbG93X3N5bWxpbmtzKSkKICAgICAgICAgZ290byBleGl0OwpAQCAtMjU2MywxMCArMjY2NiwxMCBAQAogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocGF0aC53aWRlICE9IE5VTEwpCi0gICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1cocGF0aC53aWRlKTsKKyAgICBpZiAocGF0aC0+d2lkZSAhPSBOVUxMKQorICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgtPndpZGUpOwogICAgIGVsc2UKLSAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoLm5hcnJvdyk7CisgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aC0+bmFycm93KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgLyoKQEAgLTI1NzgsNyArMjY4MSw3IEBACiAgICAgICogKERpcmVjdG9yaWVzIGNhbm5vdCBiZSByZWFkLW9ubHkgb24gV2luZG93cy4pCiAgICAgKi8KICAgICByZXR1cm5fdmFsdWUgPSBQeUJvb2xfRnJvbUxvbmcoCi0gICAgICAgIChhdHRyICE9IDB4RkZGRkZGRkYpICYmCisgICAgICAgIChhdHRyICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSAmJgogICAgICAgICAgICAgKCEobW9kZSAmIDIpIHx8CiAgICAgICAgICAgICAhKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkgfHwKICAgICAgICAgICAgIChhdHRyICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSkpOwpAQCAtMjU5NCwxMSArMjY5NywxMSBAQAogICAgICAgICAgICAgZmxhZ3MgfD0gQVRfU1lNTElOS19OT0ZPTExPVzsKICAgICAgICAgaWYgKGVmZmVjdGl2ZV9pZHMpCiAgICAgICAgICAgICBmbGFncyB8PSBBVF9FQUNDRVNTOwotICAgICAgICByZXN1bHQgPSBmYWNjZXNzYXQoZGlyX2ZkLCBwYXRoLm5hcnJvdywgbW9kZSwgZmxhZ3MpOworICAgICAgICByZXN1bHQgPSBmYWNjZXNzYXQoZGlyX2ZkLCBwYXRoLT5uYXJyb3csIG1vZGUsIGZsYWdzKTsKICAgICB9CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIHJlc3VsdCA9IGFjY2VzcyhwYXRoLm5hcnJvdywgbW9kZSk7CisgICAgICAgIHJlc3VsdCA9IGFjY2VzcyhwYXRoLT5uYXJyb3csIG1vZGUpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgcmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKCFyZXN1bHQpOwogI2VuZGlmCkBAIC0yNjA2LDcgKzI3MDksNiBAQAogI2lmbmRlZiBIQVZFX0ZBQ0NFU1NBVAogZXhpdDoKICNlbmRpZgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIApAQCAtMjYyMywzNSArMjcyNSw2OCBAQAogI2RlZmluZSBYX09LIDEKICNlbmRpZgogCisKICNpZmRlZiBIQVZFX1RUWU5BTUUKLVB5RG9jX1NUUlZBUihwb3NpeF90dHluYW1lX19kb2NfXywKLSJ0dHluYW1lKGZkKSAtPiBzdHJpbmdcblxuXAotUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBkZXZpY2UgY29ubmVjdGVkIHRvICdmZCcuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnR0eW5hbWUgLT4gRGVjb2RlRlNEZWZhdWx0CisKKyAgICBmZDogaW50CisgICAgICAgIEludGVnZXIgZmlsZSBkZXNjcmlwdG9yIGhhbmRsZS4KKworICAgIC8KKworUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBkZXZpY2UgY29ubmVjdGVkIHRvICdmZCcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihvc190dHluYW1lX19kb2NfXywKKyJ0dHluYW1lKCRtb2R1bGUsIGZkLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBkZXZpY2UgY29ubmVjdGVkIHRvIFwnZmRcJy5cbiIKKyJcbiIKKyIgIGZkXG4iCisiICAgIEludGVnZXIgZmlsZSBkZXNjcmlwdG9yIGhhbmRsZS4iKTsKKworI2RlZmluZSBPU19UVFlOQU1FX01FVEhPRERFRiAgICBcCisgICAgeyJ0dHluYW1lIiwgKFB5Q0Z1bmN0aW9uKW9zX3R0eW5hbWUsIE1FVEhfVkFSQVJHUywgb3NfdHR5bmFtZV9fZG9jX199LAorCitzdGF0aWMgY2hhciAqCitvc190dHluYW1lX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGZkKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3R0eW5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfdHR5bmFtZShQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgaWQ7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGZkOworICAgIGNoYXIgKl9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgImk6dHR5bmFtZSIsCisgICAgICAgICZmZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gb3NfdHR5bmFtZV9pbXBsKG1vZHVsZSwgZmQpOworICAgIGlmIChfcmV0dXJuX3ZhbHVlID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KF9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBjaGFyICoKK29zX3R0eW5hbWVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgZmQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Y2VlN2JjNGNmZmVjMDFhMiBpbnB1dD01ZjcyY2E4M2U3NmIzYjQ1XSovCit7CiAgICAgY2hhciAqcmV0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnR0eW5hbWUiLCAmaWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotI2lmIGRlZmluZWQoX19WTVMpCi0gICAgLyogZmlsZSBkZXNjcmlwdG9yIDAgb25seSwgdGhlIGRlZmF1bHQgaW5wdXQgZGV2aWNlIChzdGRpbikgKi8KLSAgICBpZiAoaWQgPT0gMCkgewotICAgICAgICByZXQgPSB0dHluYW1lKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICByZXQgPSBOVUxMOwotICAgIH0KLSNlbHNlCi0gICAgcmV0ID0gdHR5bmFtZShpZCk7Ci0jZW5kaWYKKyAgICByZXQgPSB0dHluYW1lKGZkKTsKICAgICBpZiAocmV0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHJldCk7CisgICAgICAgIHBvc2l4X2Vycm9yKCk7CisgICAgcmV0dXJuIHJldDsKIH0KKyNlbHNlCisjZGVmaW5lIE9TX1RUWU5BTUVfTUVUSE9EREVGCiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfQ1RFUk1JRApAQCAtMjY5Myw2ICsyODI4LDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJjaGRpciI7CiAjaWZkZWYgSEFWRV9GQ0hESVIKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtMjcwOCw4ICsyODQ0LDYgQEAKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IHdpbjMyX2NoZGlyKHBhdGgubmFycm93KTsKICAgICByZXN1bHQgPSAhcmVzdWx0OyAvKiBvbiB1bml4LCBzdWNjZXNzID0gMCwgb24gd2luZG93cywgc3VjY2VzcyA9ICEwICovCi0jZWxpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHJlc3VsdCA9IF9jaGRpcjIocGF0aC5uYXJyb3cpOwogI2Vsc2UKICNpZmRlZiBIQVZFX0ZDSERJUgogICAgIGlmIChwYXRoLmZkICE9IC0xKQpAQCAtMjcyMSw3ICsyODU1LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJjaGRpciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTI3ODUsNiArMjkxOSw3IEBACiAjZW5kaWYKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2htb2QiOwogI2lmZGVmIEhBVkVfRkNITU9ECiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTI4MTAsNyArMjk0NSw3IEBACiAgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1cocGF0aC53aWRlKTsKICAgICBlbHNlCiAgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aC5uYXJyb3cpOwotICAgIGlmIChhdHRyID09IDB4RkZGRkZGRkYpCisgICAgaWYgKGF0dHIgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpCiAgICAgICAgIHJlc3VsdCA9IDA7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChtb2RlICYgX1NfSVdSSVRFKQpAQCAtMjgyNSw3ICsyOTYwLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJjaG1vZCIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZWxzZSAvKiBNU19XSU5ET1dTICovCkBAIC0yODc5LDcgKzMwMTQsNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigiY2htb2QiLCAmcGF0aCk7CisgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtMjkyMywyMCArMzA1OCwyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2xjaG1vZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7CisgICAgcGF0aF90IHBhdGg7CiAgICAgaW50IGk7CiAgICAgaW50IHJlczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maTpsY2htb2QiLCBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmkpKQorICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGNobW9kIjsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maTpsY2htb2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSBsY2htb2QocGF0aCwgaSk7CisgICAgcmVzID0gbGNobW9kKHBhdGgubmFycm93LCBpKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfTENITU9EICovCkBAIC0yOTY0LDYgKzMxMDIsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImZsYWdzIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJjaGZsYWdzIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJmt8JGk6Y2hmbGFncyIsIGtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbGFncywgJmZvbGxvd19zeW1saW5rcykpCkBAIC0yOTg0LDcgKzMxMjMsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfcG9zaXhfZXJyb3IoImNoZmxhZ3MiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0zMDA3LDIyICszMTQ2LDI0IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfbGNoZmxhZ3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOworICAgIHBhdGhfdCBwYXRoOwogICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgaW50IHJlczsKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxjaGZsYWdzIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mazpsY2hmbGFncyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoLCAmZmxhZ3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZmbGFncykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gbGNoZmxhZ3MocGF0aCwgZmxhZ3MpOworICAgIHJlcyA9IGxjaGZsYWdzKHBhdGgubmFycm93LCBmbGFncyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoKTsKLSAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9MQ0hGTEFHUyAqLwogCkBAIC0zMDM0LDcgKzMxNzUsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2Nocm9vdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHBvc2l4XzFzdHIoYXJncywgIk8mOmNocm9vdCIsIGNocm9vdCk7CisgICAgcmV0dXJuIHBvc2l4XzFzdHIoImNocm9vdCIsIGFyZ3MsICJPJjpjaHJvb3QiLCBjaHJvb3QpOwogfQogI2VuZGlmCiAKQEAgLTMxMTYsNiArMzI1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJjaG93biI7CiAjaWZkZWYgSEFWRV9GQ0hPV04KICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtMzE3Myw3ICszMzE1LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJjaG93biIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTMyMjIsMzAgKzMzNjQsMzIgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9sY2hvd24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOworICAgIHBhdGhfdCBwYXRoOwogICAgIHVpZF90IHVpZDsKICAgICBnaWRfdCBnaWQ7CiAgICAgaW50IHJlczsKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxjaG93biI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJk8mTyY6bGNob3duIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmb3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X1VpZF9Db252ZXJ0ZXIsICZ1aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9HaWRfQ29udmVydGVyLCAmZ2lkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSBsY2hvd24ocGF0aCwgdWlkLCBnaWQpOworICAgIHJlcyA9IGxjaG93bihwYXRoLm5hcnJvdywgdWlkLCBnaWQpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aCk7Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQogI2VuZGlmIC8qIEhBVkVfTENIT1dOICovCiAKIAotI2lmZGVmIEhBVkVfR0VUQ1dECiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfZ2V0Y3dkKGludCB1c2VfYnl0ZXMpCiB7CkBAIC0zMjU5LDEyICszNDAzLDEyIEBACiAgICAgICAgIFB5T2JqZWN0ICpyZXNvYmo7CiAgICAgICAgIERXT1JEIGxlbjsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBsZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhzaXplb2Ygd2J1Zi8gc2l6ZW9mIHdidWZbMF0sIHdidWYpOworICAgICAgICBsZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhQeV9BUlJBWV9MRU5HVEgod2J1ZiksIHdidWYpOwogICAgICAgICAvKiBJZiB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCwgbGVuIGRvZXMgbm90IGluY2x1ZGUgdGhlCiAgICAgICAgICAgIHRlcm1pbmF0aW5nIFwwLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgbGVuIGluY2x1ZGVzCiAgICAgICAgICAgIHRoZSBzcGFjZSBuZWVkZWQgZm9yIHRoZSB0ZXJtaW5hdG9yLiAqLwotICAgICAgICBpZiAobGVuID49IHNpemVvZiB3YnVmLyBzaXplb2Ygd2J1ZlswXSkgewotICAgICAgICAgICAgd2J1ZjIgPSBtYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgaWYgKGxlbiA+PSBQeV9BUlJBWV9MRU5HVEgod2J1ZikpIHsKKyAgICAgICAgICAgIHdidWYyID0gUHlNZW1fUmF3TWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgICAgICBpZiAod2J1ZjIpCiAgICAgICAgICAgICAgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcobGVuLCB3YnVmMik7CiAgICAgICAgIH0KQEAgLTMyNzQsMTEgKzM0MTgsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmICghbGVuKSB7Ci0gICAgICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikgZnJlZSh3YnVmMik7Ci0gICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoImdldGN3ZHUiLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKQorICAgICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod2J1ZjIpOworICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwogICAgICAgICB9CiAgICAgICAgIHJlc29iaiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod2J1ZjIsIGxlbik7Ci0gICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKSBmcmVlKHdidWYyKTsKKyAgICAgICAgaWYgKHdidWYyICE9IHdidWYpCisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYyKTsKICAgICAgICAgcmV0dXJuIHJlc29iajsKICAgICB9CiAKQEAgLTMyODcsMTEgKzM0MzMsNyBAQAogI2VuZGlmCiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICByZXMgPSBfZ2V0Y3dkMihidWYsIHNpemVvZiBidWYpOwotI2Vsc2UKICAgICByZXMgPSBnZXRjd2QoYnVmLCBzaXplb2YgYnVmKTsKLSNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKQEAgLTMzMTksNyArMzQ2MSw2IEBACiB7CiAgICAgcmV0dXJuIHBvc2l4X2dldGN3ZCgxKTsKIH0KLSNlbmRpZgogCiAjaWYgKCghZGVmaW5lZChIQVZFX0xJTkspKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpKQogI2RlZmluZSBIQVZFX0xJTksgMQpAQCAtMzM1OCw2ICszNDk5LDggQEAKIAogICAgIG1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3JjKSk7CiAgICAgbWVtc2V0KCZkc3QsIDAsIHNpemVvZihkc3QpKTsKKyAgICBzcmMuZnVuY3Rpb25fbmFtZSA9ICJsaW5rIjsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9ICJsaW5rIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mfE8mTyZwOmxpbmsiLCBrZXl3b3JkcywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmc3JjLAogICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZkc3QsCkBAIC0zMzg4LDcgKzM1MzEsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSB3aW4zMl9lcnJvcl9vYmplY3QoImxpbmsiLCBkc3Qub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcjIoJnNyYywgJmRzdCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZWxzZQpAQCAtMzQwNiw3ICszNTQ5LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJsaW5rIiwgJmRzdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC0zNDM2LDcyICszNTc5LDM1IEBACiAgIHRoZSBmaWxlIGRlc2NyaXB0b3IgbXVzdCByZWZlciB0byBhIGRpcmVjdG9yeS5cblwKICAgSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCByYWlzZXMgTm90SW1wbGVtZW50ZWRFcnJvci4iKTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2xpc3RkaXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQotewotICAgIHBhdGhfdCBwYXRoOwotICAgIFB5T2JqZWN0ICpsaXN0ID0gTlVMTDsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OwotI2lmZGVmIEhBVkVfRkRPUEVORElSCi0gICAgaW50IGZkID0gLTE7Ci0jZW5kaWYgLyogSEFWRV9GRE9QRU5ESVIgKi8KLQogI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoSEFWRV9PUEVORElSKQorc3RhdGljIFB5T2JqZWN0ICoKK19saXN0ZGlyX3dpbmRvd3Nfbm9fb3BlbmRpcihwYXRoX3QgKnBhdGgsIFB5T2JqZWN0ICpsaXN0KQoreworICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgTlVMTH07CiAgICAgUHlPYmplY3QgKnY7CiAgICAgSEFORExFIGhGaW5kRmlsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogICAgIEJPT0wgcmVzdWx0OwogICAgIFdJTjMyX0ZJTkRfREFUQSBGaWxlRGF0YTsKLSAgICBjaGFyIG5hbWVidWZbTUFYX1BBVEgrNV07IC8qIE92ZXJhbGxvY2F0ZSBmb3IgXFwqLipcMCAqLworICAgIGNoYXIgbmFtZWJ1ZltNQVhfUEFUSCs0XTsgLyogT3ZlcmFsbG9jYXRlIGZvciAiXCouKiIgKi8KICAgICBjaGFyICpidWZwdHIgPSBuYW1lYnVmOwogICAgIC8qIG9ubHkgY2xhaW0gdG8gaGF2ZSBzcGFjZSBmb3IgTUFYX1BBVEggKi8KLSAgICBQeV9zc2l6ZV90IGxlbiA9IHNpemVvZihuYW1lYnVmKS01OworICAgIFB5X3NzaXplX3QgbGVuID0gUHlfQVJSQVlfTEVOR1RIKG5hbWVidWYpLTQ7CiAgICAgUHlPYmplY3QgKnBvID0gTlVMTDsKICAgICB3Y2hhcl90ICp3bmFtZWJ1ZiA9IE5VTEw7Ci0jZWxpZiBkZWZpbmVkKFBZT1NfT1MyKQotI2lmbmRlZiBNQVhfUEFUSAotI2RlZmluZSBNQVhfUEFUSCAgICBDQ0hNQVhQQVRICi0jZW5kaWYKLSAgICBjaGFyICpwdDsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBjaGFyIG5hbWVidWZbTUFYX1BBVEgrNV07Ci0gICAgSERJUiAgaGRpciA9IDE7Ci0gICAgVUxPTkcgc3JjaGNudCA9IDE7Ci0gICAgRklMRUZJTkRCVUYzICAgZXA7Ci0gICAgQVBJUkVUIHJjOwotI2Vsc2UKLSAgICBQeU9iamVjdCAqdjsKLSAgICBESVIgKmRpcnAgPSBOVUxMOwotICAgIHN0cnVjdCBkaXJlbnQgKmVwOwotICAgIGludCByZXR1cm5fc3RyOyAvKiBpZiBmYWxzZSwgcmV0dXJuIGJ5dGVzICovCi0jZW5kaWYKIAotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLm51bGxhYmxlID0gMTsKLSNpZmRlZiBIQVZFX0ZET1BFTkRJUgotICAgIHBhdGguYWxsb3dfZmQgPSAxOwotICAgIHBhdGguZmQgPSAtMTsKLSNlbmRpZgotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPJjpsaXN0ZGlyIiwga2V5d29yZHMsCi0gICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aAotICAgICAgICApKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qIFhYWCBTaG91bGQgcmVkbyB0aGlzIHB1dHRpbmcgdGhlIChub3cgZm91cikgdmVyc2lvbnMgb2Ygb3BlbmRpcgotICAgICAgIGluIHNlcGFyYXRlIGZpbGVzIGluc3RlYWQgb2YgaGF2aW5nIHRoZW0gYWxsIGhlcmUuLi4gKi8KLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKEhBVkVfT1BFTkRJUikKLSAgICBpZiAoIXBhdGgubmFycm93KSB7CisgICAgaWYgKCFwYXRoLT5uYXJyb3cpIHsKICAgICAgICAgV0lOMzJfRklORF9EQVRBVyB3RmlsZURhdGE7CiAgICAgICAgIHdjaGFyX3QgKnBvX3djaGFyczsKIAotICAgICAgICBpZiAoIXBhdGgud2lkZSkgeyAvKiBEZWZhdWx0IGFyZzogIi4iICovCisgICAgICAgIGlmICghcGF0aC0+d2lkZSkgeyAvKiBEZWZhdWx0IGFyZzogIi4iICovCiAgICAgICAgICAgICBwb193Y2hhcnMgPSBMIi4iOwogICAgICAgICAgICAgbGVuID0gMTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBvX3djaGFycyA9IHBhdGgud2lkZTsKLSAgICAgICAgICAgIGxlbiA9IHdjc2xlbihwYXRoLndpZGUpOworICAgICAgICAgICAgcG9fd2NoYXJzID0gcGF0aC0+d2lkZTsKKyAgICAgICAgICAgIGxlbiA9IHdjc2xlbihwYXRoLT53aWRlKTsKICAgICAgICAgfQogICAgICAgICAvKiBUaGUgKzUgaXMgc28gd2UgY2FuIGFwcGVuZCAiXFwqLipcMCIgKi8KLSAgICAgICAgd25hbWVidWYgPSBtYWxsb2MoKGxlbiArIDUpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgd25hbWVidWYgPSBQeU1lbV9NYWxsb2MoKGxlbiArIDUpICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKCF3bmFtZWJ1ZikgewogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKQEAgLTM1MDksOCArMzYxNSw4IEBACiAgICAgICAgIHdjc2NweSh3bmFtZWJ1ZiwgcG9fd2NoYXJzKTsKICAgICAgICAgaWYgKGxlbiA+IDApIHsKICAgICAgICAgICAgIHdjaGFyX3Qgd2NoID0gd25hbWVidWZbbGVuLTFdOwotICAgICAgICAgICAgaWYgKHdjaCAhPSBMJy8nICYmIHdjaCAhPSBMJ1xcJyAmJiB3Y2ggIT0gTCc6JykKLSAgICAgICAgICAgICAgICB3bmFtZWJ1ZltsZW4rK10gPSBMJ1xcJzsKKyAgICAgICAgICAgIGlmICh3Y2ggIT0gU0VQICYmIHdjaCAhPSBBTFRTRVAgJiYgd2NoICE9IEwnOicpCisgICAgICAgICAgICAgICAgd25hbWVidWZbbGVuKytdID0gU0VQOwogICAgICAgICAgICAgd2NzY3B5KHduYW1lYnVmICsgbGVuLCBMIiouKiIpOwogICAgICAgICB9CiAgICAgICAgIGlmICgobGlzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKQEAgLTM1MjQsOCArMzYzMCw3IEBACiAgICAgICAgICAgICBpZiAoZXJyb3IgPT0gRVJST1JfRklMRV9OT1RfRk9VTkQpCiAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgbGlzdCA9IE5VTEw7Ci0gICAgICAgICAgICB3aW4zMl9lcnJvcl91bmljb2RlKCJGaW5kRmlyc3RGaWxlVyIsIHduYW1lYnVmKTsKKyAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAgICAgICAgIGRvIHsKQEAgLTM1NTQsMTkgKzM2NTksMTkgQEAKICAgICAgICAgICAgICAgIGl0IGdvdCB0byB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkuICovCiAgICAgICAgICAgICBpZiAoIXJlc3VsdCAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9OT19NT1JFX0ZJTEVTKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcl91bmljb2RlKCJGaW5kTmV4dEZpbGVXIiwgd25hbWVidWYpOworICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAocmVzdWx0ID09IFRSVUUpOwogCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9Ci0gICAgc3RyY3B5KG5hbWVidWYsIHBhdGgubmFycm93KTsKLSAgICBsZW4gPSBwYXRoLmxlbmd0aDsKKyAgICBzdHJjcHkobmFtZWJ1ZiwgcGF0aC0+bmFycm93KTsKKyAgICBsZW4gPSBwYXRoLT5sZW5ndGg7CiAgICAgaWYgKGxlbiA+IDApIHsKICAgICAgICAgY2hhciBjaCA9IG5hbWVidWZbbGVuLTFdOwotICAgICAgICBpZiAoY2ggIT0gU0VQICYmIGNoICE9IEFMVFNFUCAmJiBjaCAhPSAnOicpCi0gICAgICAgICAgICBuYW1lYnVmW2xlbisrXSA9ICcvJzsKKyAgICAgICAgaWYgKGNoICE9ICdcXCcgJiYgY2ggIT0gJy8nICYmIGNoICE9ICc6JykKKyAgICAgICAgICAgIG5hbWVidWZbbGVuKytdID0gJ1xcJzsKICAgICAgICAgc3RyY3B5KG5hbWVidWYgKyBsZW4sICIqLioiKTsKICAgICB9CiAKQEAgLTM1ODEsNyArMzY4Niw3IEBACiAgICAgICAgIGlmIChlcnJvciA9PSBFUlJPUl9GSUxFX05PVF9GT1VORCkKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICBsaXN0ID0gd2luMzJfZXJyb3IoIkZpbmRGaXJzdEZpbGUiLCBuYW1lYnVmKTsKKyAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgZG8gewpAQCAtMzYwOSw3ICszNzE0LDcgQEAKICAgICAgICAgICAgaXQgZ290IHRvIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeS4gKi8KICAgICAgICAgaWYgKCFyZXN1bHQgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykgewogICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgbGlzdCA9IHdpbjMyX2Vycm9yKCJGaW5kTmV4dEZpbGUiLCBuYW1lYnVmKTsKKyAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAgICAgfSB3aGlsZSAocmVzdWx0ID09IFRSVUUpOwpAQCAtMzYxOSw5MiArMzcyNCwzNSBAQAogICAgICAgICBpZiAoRmluZENsb3NlKGhGaW5kRmlsZSkgPT0gRkFMU0UpIHsKICAgICAgICAgICAgIGlmIChsaXN0ICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IHdpbjMyX2Vycm9yX29iamVjdCgiRmluZENsb3NlIiwgcGF0aC5vYmplY3QpOworICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGlmICh3bmFtZWJ1ZikKLSAgICAgICAgZnJlZSh3bmFtZWJ1Zik7Ci0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICBQeU1lbV9GcmVlKHduYW1lYnVmKTsKIAogICAgIHJldHVybiBsaXN0OworfSAgLyogZW5kIG9mIF9saXN0ZGlyX3dpbmRvd3Nfbm9fb3BlbmRpciAqLwogCi0jZWxpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIGlmIChwYXRoLmxlbmd0aCA+PSBNQVhfUEFUSCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInBhdGggdG9vIGxvbmciKTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLSAgICBzdHJjcHkobmFtZWJ1ZiwgcGF0aC5uYXJyb3cpOwotICAgIGZvciAocHQgPSBuYW1lYnVmOyAqcHQ7IHB0KyspCi0gICAgICAgIGlmICgqcHQgPT0gQUxUU0VQKQotICAgICAgICAgICAgKnB0ID0gU0VQOwotICAgIGlmIChuYW1lYnVmW2xlbi0xXSAhPSBTRVApCi0gICAgICAgIG5hbWVidWZbbGVuKytdID0gU0VQOwotICAgIHN0cmNweShuYW1lYnVmICsgbGVuLCAiKi4qIik7CisjZWxzZSAgLyogdGh1cyBQT1NJWCwgaWU6IG5vdCAoTVNfV0lORE9XUyBhbmQgbm90IEhBVkVfT1BFTkRJUikgKi8KIAotICAgIGlmICgobGlzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLQotICAgIHJjID0gRG9zRmluZEZpcnN0KG5hbWVidWYsICAgICAgICAgLyogV2lsZGNhcmQgUGF0dGVybiB0byBNYXRjaCAqLwotICAgICAgICAgICAgICAgICAgICAgICZoZGlyLCAgICAgICAgICAgLyogSGFuZGxlIHRvIFVzZSBXaGlsZSBTZWFyY2ggRGlyZWN0b3J5ICovCi0gICAgICAgICAgICAgICAgICAgICAgRklMRV9SRUFET05MWSB8IEZJTEVfSElEREVOIHwgRklMRV9TWVNURU0gfCBGSUxFX0RJUkVDVE9SWSwKLSAgICAgICAgICAgICAgICAgICAgICAmZXAsIHNpemVvZihlcCksIC8qIFN0cnVjdHVyZSB0byBSZWNlaXZlIERpcmVjdG9yeSBFbnRyeSAqLwotICAgICAgICAgICAgICAgICAgICAgICZzcmNoY250LCAgICAgICAgLyogTWF4IGFuZCBBY3R1YWwgQ291bnQgb2YgRW50cmllcyBQZXIgSXRlcmF0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgRklMX1NUQU5EQVJEKTsgICAvKiBGb3JtYXQgb2YgRW50cnkgKEVBcyBvciBOb3QpICovCi0KLSAgICBpZiAocmMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgZXJybm8gPSBFTk9FTlQ7Ci0gICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgbGlzdCA9IHBvc2l4X2Vycm9yX3dpdGhfZmlsZW5hbWUocGF0aC5uYXJyb3cpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgaWYgKHNyY2hjbnQgPiAwKSB7IC8qIElmIERpcmVjdG9yeSBpcyBOT1QgVG90YWxseSBFbXB0eSwgKi8KLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKGVwLmFjaE5hbWVbMF0gPT0gJy4nCi0gICAgICAgICAgICAmJiAoZXAuYWNoTmFtZVsxXSA9PSAnXDAnIHx8IChlcC5hY2hOYW1lWzFdID09ICcuJyAmJiBlcC5hY2hOYW1lWzJdID09ICdcMCcpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogU2tpcCBPdmVyICIuIiBhbmQgIi4uIiBOYW1lcyAqLwotCi0gICAgICAgICAgICBzdHJjcHkobmFtZWJ1ZiwgZXAuYWNoTmFtZSk7Ci0KLSAgICAgICAgICAgIC8qIExlYXZlIENhc2Ugb2YgTmFtZSBBbG9uZSAtLSBJbiBOYXRpdmUgRm9ybSAqLwotICAgICAgICAgICAgLyogKFJlbW92ZWQgRm9yY2VkIExvd2VyY2FzaW5nIENvZGUpICovCi0KLSAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmcobmFtZWJ1Zik7Ci0gICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgdikgIT0gMCkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIH0gd2hpbGUgKERvc0ZpbmROZXh0KGhkaXIsICZlcCwgc2l6ZW9mKGVwKSwgJnNyY2hjbnQpID09IE5PX0VSUk9SICYmIHNyY2hjbnQgPiAwKTsKLSAgICB9Ci0KLWV4aXQ6Ci0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLQotICAgIHJldHVybiBsaXN0OwotI2Vsc2UKK3N0YXRpYyBQeU9iamVjdCAqCitfcG9zaXhfbGlzdGRpcihwYXRoX3QgKnBhdGgsIFB5T2JqZWN0ICpsaXN0KQoreworICAgIFB5T2JqZWN0ICp2OworICAgIERJUiAqZGlycCA9IE5VTEw7CisgICAgc3RydWN0IGRpcmVudCAqZXA7CisgICAgaW50IHJldHVybl9zdHI7IC8qIGlmIGZhbHNlLCByZXR1cm4gYnl0ZXMgKi8KKyNpZmRlZiBIQVZFX0ZET1BFTkRJUgorICAgIGludCBmZCA9IC0xOworI2VuZGlmCiAKICAgICBlcnJubyA9IDA7CiAjaWZkZWYgSEFWRV9GRE9QRU5ESVIKLSAgICBpZiAocGF0aC5mZCAhPSAtMSkgeworICAgIGlmIChwYXRoLT5mZCAhPSAtMSkgewogICAgICAgICAvKiBjbG9zZWRpcigpIGNsb3NlcyB0aGUgRkQsIHNvIHdlIGR1cGxpY2F0ZSBpdCAqLwotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGZkID0gZHVwKHBhdGguZmQpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICAgICAgbGlzdCA9IHBvc2l4X2Vycm9yKCk7Ci0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKyAgICAgICAgZmQgPSBfUHlfZHVwKHBhdGgtPmZkKTsKKyAgICAgICAgaWYgKGZkID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgcmV0dXJuX3N0ciA9IDE7CiAKQEAgLTM3MTYsMTAgKzM3NjQsMTAgQEAKICNlbmRpZgogICAgIHsKICAgICAgICAgY2hhciAqbmFtZTsKLSAgICAgICAgaWYgKHBhdGgubmFycm93KSB7Ci0gICAgICAgICAgICBuYW1lID0gcGF0aC5uYXJyb3c7CisgICAgICAgIGlmIChwYXRoLT5uYXJyb3cpIHsKKyAgICAgICAgICAgIG5hbWUgPSBwYXRoLT5uYXJyb3c7CiAgICAgICAgICAgICAvKiBvbmx5IHJldHVybiBieXRlcyBpZiB0aGV5IHNwZWNpZmllZCBhIGJ5dGVzIG9iamVjdCAqLwotICAgICAgICAgICAgcmV0dXJuX3N0ciA9ICEoUHlCeXRlc19DaGVjayhwYXRoLm9iamVjdCkpOworICAgICAgICAgICAgcmV0dXJuX3N0ciA9ICEoUHlCeXRlc19DaGVjayhwYXRoLT5vYmplY3QpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG5hbWUgPSAiLiI7CkBAIC0zNzMyLDE0ICszNzgwLDE0IEBACiAgICAgfQogCiAgICAgaWYgKGRpcnAgPT0gTlVMTCkgewotICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcigibGlzdGRpciIsICZwYXRoKTsKKyAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAjaWZkZWYgSEFWRV9GRE9QRU5ESVIKICAgICAgICAgaWYgKGZkICE9IC0xKSB7CiAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICB9Ci0jZW5kaWYgLyogSEFWRV9GRE9QRU5ESVIgKi8KKyNlbmRpZgogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIGlmICgobGlzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKQEAgLTM3NTUsNyArMzgwMyw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcigibGlzdGRpciIsICZwYXRoKTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM3ODUsMTcgKzM4MzMsNDQgQEAKICNpZmRlZiBIQVZFX0ZET1BFTkRJUgogICAgICAgICBpZiAoZmQgPiAtMSkKICAgICAgICAgICAgIHJld2luZGRpcihkaXJwKTsKLSNlbmRpZiAvKiBIQVZFX0ZET1BFTkRJUiAqLworI2VuZGlmCiAgICAgICAgIGNsb3NlZGlyKGRpcnApOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0KIAotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0KICAgICByZXR1cm4gbGlzdDsKK30gIC8qIGVuZCBvZiBfcG9zaXhfbGlzdGRpciAqLworI2VuZGlmICAvKiB3aGljaCBPUyAqLwogCi0jZW5kaWYgLyogd2hpY2ggT1MgKi8KLX0gIC8qIGVuZCBvZiBwb3NpeF9saXN0ZGlyICovCitzdGF0aWMgUHlPYmplY3QgKgorcG9zaXhfbGlzdGRpcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgcGF0aF90IHBhdGg7CisgICAgUHlPYmplY3QgKmxpc3QgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKKworICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGlzdGRpciI7CisgICAgcGF0aC5udWxsYWJsZSA9IDE7CisjaWZkZWYgSEFWRV9GRE9QRU5ESVIKKyAgICBwYXRoLmFsbG93X2ZkID0gMTsKKyAgICBwYXRoLmZkID0gLTE7CisjZW5kaWYKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPJjpsaXN0ZGlyIiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKEhBVkVfT1BFTkRJUikKKyAgICByZXR1cm5fdmFsdWUgPSBfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIoJnBhdGgsIGxpc3QpOworI2Vsc2UKKyAgICByZXR1cm5fdmFsdWUgPSBfcG9zaXhfbGlzdGRpcigmcGF0aCwgbGlzdCk7CisjZW5kaWYKKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CiAKICNpZmRlZiBNU19XSU5ET1dTCiAvKiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgYWJzcGF0aCBvbiB3aW4zMiAqLwpAQCAtMzgwMywxNCArMzg3OCwxNCBAQAogcG9zaXhfX2dldGZ1bGxwYXRobmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY29uc3QgY2hhciAqcGF0aDsKLSAgICBjaGFyIG91dGJ1ZltNQVhfUEFUSCoyXTsKKyAgICBjaGFyIG91dGJ1ZltNQVhfUEFUSF07CiAgICAgY2hhciAqdGVtcDsKICAgICBQeU9iamVjdCAqcG87CiAKICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXw6X2dldGZ1bGxwYXRobmFtZSIsICZwbykpCiAgICAgewogICAgICAgICB3Y2hhcl90ICp3cGF0aDsKLSAgICAgICAgd2NoYXJfdCB3b3V0YnVmW01BWF9QQVRIKjJdLCAqd291dGJ1ZnAgPSB3b3V0YnVmOworICAgICAgICB3Y2hhcl90IHdvdXRidWZbTUFYX1BBVEhdLCAqd291dGJ1ZnAgPSB3b3V0YnVmOwogICAgICAgICB3Y2hhcl90ICp3dGVtcDsKICAgICAgICAgRFdPUkQgcmVzdWx0OwogICAgICAgICBQeU9iamVjdCAqdjsKQEAgLTM4MjIsNyArMzg5Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfQVJSQVlfTEVOR1RIKHdvdXRidWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvdXRidWYsICZ3dGVtcCk7CiAgICAgICAgIGlmIChyZXN1bHQgPiBQeV9BUlJBWV9MRU5HVEgod291dGJ1ZikpIHsKLSAgICAgICAgICAgIHdvdXRidWZwID0gbWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgICAgICB3b3V0YnVmcCA9IFB5TWVtX01hbGxvYyhyZXN1bHQgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICAgICAgaWYgKCF3b3V0YnVmcCkKICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IEdldEZ1bGxQYXRoTmFtZVcod3BhdGgsIHJlc3VsdCwgd291dGJ1ZnAsICZ3dGVtcCk7CkBAIC0zODMyLDcgKzM5MDcsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2ID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJHZXRGdWxsUGF0aE5hbWVXIiwgcG8pOwogICAgICAgICBpZiAod291dGJ1ZnAgIT0gd291dGJ1ZikKLSAgICAgICAgICAgIGZyZWUod291dGJ1ZnApOworICAgICAgICAgICAgUHlNZW1fRnJlZSh3b3V0YnVmcCk7CiAgICAgICAgIHJldHVybiB2OwogICAgIH0KICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCkBAIC0zOTAyLDcgKzM5NzcsNyBAQAogICAgIGlmKCFidWZfc2l6ZSkKICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX29iamVjdCgiR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlIiwgcG8pOwogCi0gICAgdGFyZ2V0X3BhdGggPSAod2NoYXJfdCAqKW1hbGxvYygoYnVmX3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICB0YXJnZXRfcGF0aCA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKChidWZfc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmKCF0YXJnZXRfcGF0aCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAKQEAgLTM5MTYsMzYgKzM5OTEsMTEgQEAKIAogICAgIHRhcmdldF9wYXRoW3Jlc3VsdF9sZW5ndGhdID0gMDsKICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHRhcmdldF9wYXRoLCByZXN1bHRfbGVuZ3RoKTsKLSAgICBmcmVlKHRhcmdldF9wYXRoKTsKKyAgICBQeU1lbV9GcmVlKHRhcmdldF9wYXRoKTsKICAgICByZXR1cm4gcmVzdWx0OwogCiB9IC8qIGVuZCBvZiBwb3NpeF9fZ2V0ZmluYWxwYXRobmFtZSAqLwogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfX2dldGZpbGVpbmZvcm1hdGlvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgSEFORExFIGhGaWxlOwotICAgIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OIGluZm87Ci0gICAgaW50IGZkOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOl9nZXRmaWxlaW5mb3JtYXRpb24iLCAmZmQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0KLSAgICBoRmlsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOwotICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0KLSAgICBpZiAoIUdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlKGhGaWxlLCAmaW5mbykpCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigiX2dldGZpbGVpbmZvcm1hdGlvbiIsIE5VTEwpOwotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImlpaSIsIGluZm8uZHdWb2x1bWVTZXJpYWxOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubkZpbGVJbmRleEhpZ2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubkZpbGVJbmRleExvdyk7Ci19Ci0KIFB5RG9jX1NUUlZBUihwb3NpeF9faXNkaXJfX2RvY19fLAogIlJldHVybiB0cnVlIGlmIHRoZSBwYXRobmFtZSByZWZlcnMgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LiIpOwogCkBAIC0zOTg0LDYgKzQwMzQsNTUgQEAKICAgICBlbHNlCiAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKIH0KKworUHlEb2NfU1RSVkFSKHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZV9fZG9jX18sCisiUmV0dXJuIHZvbHVtZSBtb3VudCBwb2ludCBvZiB0aGUgc3BlY2lmaWVkIHBhdGguIik7CisKKy8qIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBpc21vdW50IG9uIHdpbmRvd3MgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpwbywgKnJlc3VsdDsKKyAgICB3Y2hhcl90ICpwYXRoLCAqbW91bnRwYXRoPU5VTEw7CisgICAgc2l6ZV90IGJ1ZmxlbjsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXw6X2dldHZvbHVtZXBhdGhuYW1lIiwgJnBvKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcGF0aCA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHBvLCAmYnVmbGVuKTsKKyAgICBpZiAocGF0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBidWZsZW4gKz0gMTsKKworICAgIC8qIFZvbHVtZSBwYXRoIHNob3VsZCBiZSBzaG9ydGVyIHRoYW4gZW50aXJlIHBhdGggKi8KKyAgICBidWZsZW4gPSBQeV9NQVgoYnVmbGVuLCBNQVhfUEFUSCk7CisKKyAgICBpZiAoYnVmbGVuID4gRFdPUkRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAicGF0aCB0b28gbG9uZyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtb3VudHBhdGggPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhidWZsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgIGlmIChtb3VudHBhdGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gR2V0Vm9sdW1lUGF0aE5hbWVXKHBhdGgsIG1vdW50cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0FGRV9ET1dOQ0FTVChidWZsZW4sIHNpemVfdCwgRFdPUkQpKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgcmVzdWx0ID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJfZ2V0dm9sdW1lcGF0aG5hbWUiLCBwbyk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihtb3VudHBhdGgsIHdjc2xlbihtb3VudHBhdGgpKTsKKworZXhpdDoKKyAgICBQeU1lbV9GcmVlKG1vdW50cGF0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy8qIGVuZCBvZiBwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWUgKi8KKwogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAogUHlEb2NfU1RSVkFSKHBvc2l4X21rZGlyX19kb2NfXywKQEAgLTQwMDgsNiArNDEwNyw3IEBACiAgICAgaW50IHJlc3VsdDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibWtkaXIiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfGkkTyY6bWtkaXIiLCBrZXl3b3JkcywKICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmbW9kZSwKICNpZmRlZiBIQVZFX01LRElSQVQKQEAgLTQwMjcsNyArNDEyNyw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHdpbjMyX2Vycm9yX29iamVjdCgibWtkaXIiLCBwYXRoLm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2Vsc2UKQEAgLTQwNDQsNyArNDE0NCw3IEBACiAjZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXN1bHQgPCAwKSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoIm1rZGlyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtNDE2Miw2ICs0MjYyLDggQEAKIAogICAgIG1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3JjKSk7CiAgICAgbWVtc2V0KCZkc3QsIDAsIHNpemVvZihkc3QpKTsKKyAgICBzcmMuZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uX25hbWU7CisgICAgZHN0LmZ1bmN0aW9uX25hbWUgPSBmdW5jdGlvbl9uYW1lOwogICAgIHN0cmNweShmb3JtYXQsICJPJk8mfCRPJk8mOiIpOwogICAgIHN0cmNhdChmb3JtYXQsIGZ1bmN0aW9uX25hbWUpOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgZm9ybWF0LCBrZXl3b3JkcywKQEAgLTQxOTUsNyArNDI5Nyw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHdpbjMyX2Vycm9yX29iamVjdChmdW5jdGlvbl9uYW1lLCBkc3Qub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcjIoJnNyYywgJmRzdCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTQyMTAsNyArNDMxMiw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcihmdW5jdGlvbl9uYW1lLCAmZHN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcjIoJnNyYywgJmRzdCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTQyNzQsNiArNDM3Niw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInJtZGlyIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6cm1kaXIiLCBrZXl3b3JkcywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICNpZmRlZiBIQVZFX1VOTElOS0FUCkBAIC00MzAyLDcgKzQ0MDUsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInJtZGlyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNDQzMCw2ICs0NTMzLDcgQEAKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidW5saW5rIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6dW5saW5rIiwga2V5d29yZHMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9VTkxJTktBVApAQCAtNDQ1OCw3ICs0NTYyLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJ1bmxpbmsiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC00NzYxLDYgKzQ4NjUsNyBAQAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJ1dGltZSI7CiAgICAgbWVtc2V0KCZ1dGltZSwgMCwgc2l6ZW9mKHV0aW1lX3QpKTsKICNpZiBVVElNRV9IQVZFX0ZECiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CkBAIC00ODU2LDE4ICs0OTYxLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsIE5VTEwpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgICAgIHdpbjMyX2Vycm9yX29iamVjdCgidXRpbWUiLCBwYXRoLm9iamVjdCk7CisgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCiAgICAgaWYgKHV0aW1lLm5vdykgewotICAgICAgICBTWVNURU1USU1FIG5vdzsKLSAgICAgICAgR2V0U3lzdGVtVGltZSgmbm93KTsKLSAgICAgICAgaWYgKCFTeXN0ZW1UaW1lVG9GaWxlVGltZSgmbm93LCAmbXRpbWUpIHx8Ci0gICAgICAgICAgICAhU3lzdGVtVGltZVRvRmlsZVRpbWUoJm5vdywgJmF0aW1lKSkgewotICAgICAgICAgICAgd2luMzJfZXJyb3IoInV0aW1lIiwgTlVMTCk7Ci0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKyAgICAgICAgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJm10aW1lKTsKKyAgICAgICAgYXRpbWUgPSBtdGltZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHRpbWVfdF90b19GSUxFX1RJTUUodXRpbWUuYXRpbWVfcywgdXRpbWUuYXRpbWVfbnMsICZhdGltZSk7CkBAIC00ODc4LDcgKzQ5NzgsNyBAQAogICAgICAgICAgICBhcyB0aGF0IG1heSBjb25mdXNlIHRoZSB1c2VyIGludG8gYmVsaWV2aW5nIHRoYXQKICAgICAgICAgICAgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhlIGZpbGUsIHdoZW4gaXQgYWxzbwogICAgICAgICAgICBjb3VsZCBiZSB0aGUgdGltZSBzdGFtcCB0aGF0IGdpdmVzIGEgcHJvYmxlbS4gKi8KLSAgICAgICAgd2luMzJfZXJyb3IoInV0aW1lIiwgTlVMTCk7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2Vsc2UgLyogTVNfV0lORE9XUyAqLwpAQCAtNDk2MSw4ICs1MDYxLDEwIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKTsKICAgICAqb3V0ID0gUHlNZW1fTWFsbG9jKHNpemUrMSk7Ci0gICAgaWYgKCEqb3V0KQorICAgIGlmICghKm91dCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgbWVtY3B5KCpvdXQsIFB5Qnl0ZXNfQXNTdHJpbmcoYnl0ZXMpLCBzaXplKzEpOwogICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgcmV0dXJuIDE7CkBAIC00OTkwLDggKzUwOTIsMTAgQEAKICAgICB9CiAgICAgZW52YyA9IDA7CiAgICAga2V5cyA9IFB5TWFwcGluZ19LZXlzKGVudik7CisgICAgaWYgKCFrZXlzKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHZhbHMgPSBQeU1hcHBpbmdfVmFsdWVzKGVudik7Ci0gICAgaWYgKCFrZXlzIHx8ICF2YWxzKQorICAgIGlmICghdmFscykKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoIVB5TGlzdF9DaGVjayhrZXlzKSB8fCAhUHlMaXN0X0NoZWNrKHZhbHMpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC01MDEyLDEwICs1MTE2LDYgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIC8qIE9taXQgUHNldWRvLUVudiBWYXJzIHRoYXQgV291bGQgQ29uZnVzZSBQcm9ncmFtcyBpZiBQYXNzZWQgT24gKi8KLSAgICAgICAgaWYgKHN0cmljbXAoaywgIkJFR0lOTElCUEFUSCIpICE9IDAgJiYgc3RyaWNtcChrLCAiRU5ETElCUEFUSCIpICE9IDApIHsKLSNlbmRpZgogICAgICAgICBrID0gUHlCeXRlc19Bc1N0cmluZyhrZXkyKTsKICAgICAgICAgdiA9IFB5Qnl0ZXNfQXNTdHJpbmcodmFsMik7CiAgICAgICAgIGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoa2V5MikgKyBQeUJ5dGVzX0dFVF9TSVpFKHZhbDIpICsgMjsKQEAgLTUwMzEsOSArNTEzMSw2IEBACiAgICAgICAgIGVudmxpc3RbZW52YysrXSA9IHA7CiAgICAgICAgIFB5X0RFQ1JFRihrZXkyKTsKICAgICAgICAgUHlfREVDUkVGKHZhbDIpOwotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIH0KLSNlbmRpZgogICAgIH0KICAgICBQeV9ERUNSRUYodmFscyk7CiAgICAgUHlfREVDUkVGKGtleXMpOwpAQCAtNTE1OSw2ICs1MjU2LDcgQEAKICAgICAgICBsaWtlIHBvc2l4LmVudmlyb24uICovCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImV4ZWN2ZSI7CiAjaWZkZWYgSEFWRV9GRVhFQ1ZFCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTUxOTgsNyArNTI5Niw3IEBACiAKICAgICAvKiBJZiB3ZSBnZXQgaGVyZSBpdCdzIGRlZmluaXRlbHkgYW4gZXJyb3IgKi8KIAotICAgIHBhdGhfcG9zaXhfZXJyb3IoImV4ZWN2ZSIsICZwYXRoKTsKKyAgICBwYXRoX2Vycm9yKCZwYXRoKTsKIAogICAgIHdoaWxlICgtLWVudmMgPj0gMCkKICAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwpAQCAtNTI3NCwxOCArNTM3MiwxMiBAQAogICAgIH0KICAgICBhcmd2bGlzdFthcmdjXSA9IE5VTEw7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcGF3bnZhbCA9IHNwYXdudihtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbHNlCiAgICAgaWYgKG1vZGUgPT0gX09MRF9QX09WRVJMQVkpCiAgICAgICAgIG1vZGUgPSBfUF9PVkVSTEFZOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHNwYXdudmFsID0gX3NwYXdudihtb2RlLCBwYXRoLCBhcmd2bGlzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbmRpZgogCiAgICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwogICAgIFB5X0RFQ1JFRihvcGF0aCk7CkBAIC01MjkzLDExICs1Mzg1LDcgQEAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSBTSVpFT0ZfVk9JRF9QCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMIiwgKFBZX0xPTkdfTE9ORykgc3Bhd252YWwpOwotI2VuZGlmCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIsIHNwYXdudmFsKTsKIH0KIAogCkBAIC01MzczLDI3ICs1NDYxLDE3IEBACiAgICAgaWYgKGVudmxpc3QgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsXzE7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcGF3bnZhbCA9IHNwYXdudmUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0jZWxzZQogICAgIGlmIChtb2RlID09IF9PTERfUF9PVkVSTEFZKQogICAgICAgICBtb2RlID0gX1BfT1ZFUkxBWTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzcGF3bnZhbCA9IF9zcGF3bnZlKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotI2VuZGlmCiAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgICh2b2lkKSBwb3NpeF9lcnJvcigpOwogICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSBTSVpFT0ZfVk9JRF9QCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotI2Vsc2UKLSAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZSgiTCIsIChQWV9MT05HX0xPTkcpIHNwYXdudmFsKTsKLSNlbmRpZgorICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIsIHNwYXdudmFsKTsKIAogICAgIHdoaWxlICgtLWVudmMgPj0gMCkKICAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwpAQCAtNTQwNSwxODMgKzU0ODMsNiBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLS8qIE9TLzIgc3VwcG9ydHMgc3Bhd252cCAmIHNwYXdudnBlIG5hdGl2ZWx5ICovCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZwX19kb2NfXywKLSJzcGF3bnZwKG1vZGUsIGZpbGUsIGFyZ3MpXG5cblwKLUV4ZWN1dGUgdGhlIHByb2dyYW0gJ2ZpbGUnIGluIGEgbmV3IHByb2Nlc3MsIHVzaW5nIHRoZSBlbnZpcm9ubWVudFxuXAotc2VhcmNoIHBhdGggdG8gZmluZCB0aGUgZmlsZS5cblwKLVxuXAotICAgIG1vZGU6IG1vZGUgb2YgcHJvY2VzcyBjcmVhdGlvblxuXAotICAgIGZpbGU6IGV4ZWN1dGFibGUgZmlsZSBuYW1lXG5cCi0gICAgYXJnczogdHVwbGUgb3IgbGlzdCBvZiBzdHJpbmdzIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zcGF3bnZwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKLSAgICBQeU9iamVjdCAqYXJndjsKLSAgICBjaGFyICoqYXJndmxpc3Q7Ci0gICAgaW50IG1vZGUsIGksIGFyZ2M7Ci0gICAgUHlfaW50cHRyX3Qgc3Bhd252YWw7Ci0gICAgUHlPYmplY3QgKigqZ2V0aXRlbSkoUHlPYmplY3QgKiwgUHlfc3NpemVfdCk7Ci0KLSAgICAvKiBzcGF3bnZwIGhhcyB0aHJlZSBhcmd1bWVudHM6IChtb2RlLCBwYXRoLCBhcmd2KSwgd2hlcmUKLSAgICAgICBhcmd2IGlzIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzLiAqLwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTyZPOnNwYXdudnAiLCAmbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZhcmd2KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwotICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfU2l6ZShhcmd2KTsKLSAgICAgICAgZ2V0aXRlbSA9IFB5VHVwbGVfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cCgpIGFyZyAyIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7Ci0gICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGFyZ3ZsaXN0ID0gUHlNZW1fTkVXKGNoYXIgKiwgYXJnYysxKTsKLSAgICBpZiAoYXJndmxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBpZiAoIWZzY29udmVydF9zdHJkdXAoKCpnZXRpdGVtKShhcmd2LCBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmd2bGlzdFtpXSkpIHsKLSAgICAgICAgICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBpKTsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgInNwYXdudnAoKSBhcmcgMiBtdXN0IGNvbnRhaW4gb25seSBzdHJpbmdzIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXJndmxpc3RbYXJnY10gPSBOVUxMOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgc3Bhd252YWwgPSBzcGF3bnZwKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0KTsKLSNlbHNlCi0gICAgc3Bhd252YWwgPSBfc3Bhd252cChtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0jZW5kaWYKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0KLSAgICBpZiAoc3Bhd252YWwgPT0gLTEpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotfQotCi0KLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZwZV9fZG9jX18sCi0ic3Bhd252cGUobW9kZSwgZmlsZSwgYXJncywgZW52KVxuXG5cCi1FeGVjdXRlIHRoZSBwcm9ncmFtICdmaWxlJyBpbiBhIG5ldyBwcm9jZXNzLCB1c2luZyB0aGUgZW52aXJvbm1lbnRcblwKLXNlYXJjaCBwYXRoIHRvIGZpbmQgdGhlIGZpbGUuXG5cCi1cblwKLSAgICBtb2RlOiBtb2RlIG9mIHByb2Nlc3MgY3JlYXRpb25cblwKLSAgICBmaWxlOiBleGVjdXRhYmxlIGZpbGUgbmFtZVxuXAotICAgIGFyZ3M6IHR1cGxlIG9yIGxpc3Qgb2YgYXJndW1lbnRzXG5cCi0gICAgZW52OiBkaWN0aW9uYXJ5IG9mIHN0cmluZ3MgbWFwcGluZyB0byBzdHJpbmdzIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zcGF3bnZwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7Ci0gICAgUHlPYmplY3QgKmFyZ3YsICplbnY7Ci0gICAgY2hhciAqKmFyZ3ZsaXN0OwotICAgIGNoYXIgKiplbnZsaXN0OwotICAgIFB5T2JqZWN0ICpyZXM9TlVMTDsKLSAgICBpbnQgbW9kZTsKLSAgICBQeV9zc2l6ZV90IGFyZ2MsIGksIGVudmM7Ci0gICAgUHlfaW50cHRyX3Qgc3Bhd252YWw7Ci0gICAgUHlPYmplY3QgKigqZ2V0aXRlbSkoUHlPYmplY3QgKiwgUHlfc3NpemVfdCk7Ci0gICAgaW50IGxhc3RhcmcgPSAwOwotCi0gICAgLyogc3Bhd252cGUgaGFzIGZvdXIgYXJndW1lbnRzOiAobW9kZSwgcGF0aCwgYXJndiwgZW52KSwgd2hlcmUKLSAgICAgICBhcmd2IGlzIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzIGFuZCBlbnYgaXMgYSBkaWN0aW9uYXJ5Ci0gICAgICAgbGlrZSBwb3NpeC5lbnZpcm9uLiAqLwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpZXRPTzpzcGF3bnZwZSIsICZtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmFyZ3YsICZlbnYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7Ci0gICAgaWYgKFB5TGlzdF9DaGVjayhhcmd2KSkgewotICAgICAgICBhcmdjID0gUHlMaXN0X1NpemUoYXJndik7Ci0gICAgICAgIGdldGl0ZW0gPSBQeUxpc3RfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayhhcmd2KSkgewotICAgICAgICBhcmdjID0gUHlUdXBsZV9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlUdXBsZV9HZXRJdGVtOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzcGF3bnZwZSgpIGFyZyAyIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLSAgICBpZiAoIVB5TWFwcGluZ19DaGVjayhlbnYpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cGUoKSBhcmcgMyBtdXN0IGJlIGEgbWFwcGluZyBvYmplY3QiKTsKLSAgICAgICAgZ290byBmYWlsXzA7Ci0gICAgfQotCi0gICAgYXJndmxpc3QgPSBQeU1lbV9ORVcoY2hhciAqLCBhcmdjKzEpOwotICAgIGlmIChhcmd2bGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIGlmICghZnNjb252ZXJ0X3N0cmR1cCgoKmdldGl0ZW0pKGFyZ3YsIGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyZ3ZsaXN0W2ldKSkKLSAgICAgICAgewotICAgICAgICAgICAgbGFzdGFyZyA9IGk7Ci0gICAgICAgICAgICBnb3RvIGZhaWxfMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBsYXN0YXJnID0gYXJnYzsKLSAgICBhcmd2bGlzdFthcmdjXSA9IE5VTEw7Ci0KLSAgICBlbnZsaXN0ID0gcGFyc2VfZW52bGlzdChlbnYsICZlbnZjKTsKLSAgICBpZiAoZW52bGlzdCA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWxfMTsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHNwYXdudmFsID0gc3Bhd252cGUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotI2Vsc2UKLSAgICBzcGF3bnZhbCA9IF9zcGF3bnZwZShtb2RlLCBwYXRoLCBhcmd2bGlzdCwgZW52bGlzdCk7Ci0jZW5kaWYKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHNwYXdudmFsID09IC0xKQotICAgICAgICAodm9pZCkgcG9zaXhfZXJyb3IoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotCi0gICAgd2hpbGUgKC0tZW52YyA+PSAwKQotICAgICAgICBQeU1lbV9ERUwoZW52bGlzdFtlbnZjXSk7Ci0gICAgUHlNZW1fREVMKGVudmxpc3QpOwotICBmYWlsXzE6Ci0gICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGxhc3RhcmcpOwotICBmYWlsXzA6Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICByZXR1cm4gcmVzOwotfQotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjZW5kaWYgLyogSEFWRV9TUEFXTlYgKi8KIAogCkBAIC02MDg0LDcgKzU5ODUsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X29wZW5wdHkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7Ci0gICAgaW50IG1hc3Rlcl9mZCwgc2xhdmVfZmQ7CisgICAgaW50IG1hc3Rlcl9mZCA9IC0xLCBzbGF2ZV9mZCA9IC0xOwogI2lmbmRlZiBIQVZFX09QRU5QVFkKICAgICBjaGFyICogc2xhdmVfbmFtZTsKICNlbmRpZgpAQCAtNjA5NywzNyArNTk5OCw1NiBAQAogCiAjaWZkZWYgSEFWRV9PUEVOUFRZCiAgICAgaWYgKG9wZW5wdHkoJm1hc3Rlcl9mZCwgJnNsYXZlX2ZkLCBOVUxMLCBOVUxMLCBOVUxMKSAhPSAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG1hc3Rlcl9mZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNsYXZlX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisKICNlbGlmIGRlZmluZWQoSEFWRV9fR0VUUFRZKQogICAgIHNsYXZlX25hbWUgPSBfZ2V0cHR5KCZtYXN0ZXJfZmQsIE9fUkRXUiwgMDY2NiwgMCk7CiAgICAgaWYgKHNsYXZlX25hbWUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobWFzdGVyX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBzbGF2ZV9mZCA9IG9wZW4oc2xhdmVfbmFtZSwgT19SRFdSKTsKKyAgICBzbGF2ZV9mZCA9IF9QeV9vcGVuKHNsYXZlX25hbWUsIE9fUkRXUik7CiAgICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICNlbHNlCiAgICAgbWFzdGVyX2ZkID0gb3BlbihERVZfUFRZX0ZJTEUsIE9fUkRXUiB8IE9fTk9DVFRZKTsgLyogb3BlbiBtYXN0ZXIgKi8KICAgICBpZiAobWFzdGVyX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICAgICBzaWdfc2F2ZWQgPSBQeU9TX3NldHNpZyhTSUdDSExELCBTSUdfREZMKTsKKwogICAgIC8qIGNoYW5nZSBwZXJtaXNzaW9uIG9mIHNsYXZlICovCiAgICAgaWYgKGdyYW50cHQobWFzdGVyX2ZkKSA8IDApIHsKICAgICAgICAgUHlPU19zZXRzaWcoU0lHQ0hMRCwgc2lnX3NhdmVkKTsKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CiAgICAgfQorCiAgICAgLyogdW5sb2NrIHNsYXZlICovCiAgICAgaWYgKHVubG9ja3B0KG1hc3Rlcl9mZCkgPCAwKSB7CiAgICAgICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7Ci0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOwogICAgIH0KKwogICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7CisKICAgICBzbGF2ZV9uYW1lID0gcHRzbmFtZShtYXN0ZXJfZmQpOyAvKiBnZXQgbmFtZSBvZiBzbGF2ZSAqLwogICAgIGlmIChzbGF2ZV9uYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIHNsYXZlX2ZkID0gb3BlbihzbGF2ZV9uYW1lLCBPX1JEV1IgfCBPX05PQ1RUWSk7IC8qIG9wZW4gc2xhdmUgKi8KKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKworICAgIHNsYXZlX2ZkID0gX1B5X29wZW4oc2xhdmVfbmFtZSwgT19SRFdSIHwgT19OT0NUVFkpOyAvKiBvcGVuIHNsYXZlICovCiAgICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQsIDAsIE5VTEwpIDwgMCkKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKwogI2lmICFkZWZpbmVkKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkKEhBVkVfREVWX1BUQykKICAgICBpb2N0bChzbGF2ZV9mZCwgSV9QVVNILCAicHRlbSIpOyAvKiBwdXNoIHB0ZW0gKi8KICAgICBpb2N0bChzbGF2ZV9mZCwgSV9QVVNILCAibGR0ZXJtIik7IC8qIHB1c2ggbGR0ZXJtICovCkBAIC02MTM5LDYgKzYwNTksMTYgQEAKIAogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgbWFzdGVyX2ZkLCBzbGF2ZV9mZCk7CiAKK3Bvc2l4X2Vycm9yOgorICAgIHBvc2l4X2Vycm9yKCk7CisjaWYgZGVmaW5lZChIQVZFX09QRU5QVFkpIHx8IGRlZmluZWQoSEFWRV9fR0VUUFRZKQorZXJyb3I6CisjZW5kaWYKKyAgICBpZiAobWFzdGVyX2ZkICE9IC0xKQorICAgICAgICBjbG9zZShtYXN0ZXJfZmQpOworICAgIGlmIChzbGF2ZV9mZCAhPSAtMSkKKyAgICAgICAgY2xvc2Uoc2xhdmVfZmQpOworICAgIHJldHVybiBOVUxMOwogfQogI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9PUEVOUFRZKSB8fCBkZWZpbmVkKEhBVkVfX0dFVFBUWSkgfHwgZGVmaW5lZChIQVZFX0RFVl9QVE1YKSAqLwogCkBAIC02NjMxLDIzICs2NTYxLDggQEAKICAgICBpbnQgc2lnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJpOmtpbGwiLCAmcGlkLCAmc2lnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKHNpZyA9PSBYQ1BUX1NJR05BTF9JTlRSIHx8IHNpZyA9PSBYQ1BUX1NJR05BTF9CUkVBSykgewotICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgIGlmICgocmMgPSBEb3NTZW5kU2lnbmFsRXhjZXB0aW9uKHBpZCwgc2lnKSkgIT0gTk9fRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gb3MyX2Vycm9yKHJjKTsKLQotICAgIH0gZWxzZSBpZiAoc2lnID09IFhDUFRfU0lHTkFMX0tJTExQUk9DKSB7Ci0gICAgICAgIEFQSVJFVCByYzsKLSAgICAgICAgaWYgKChyYyA9IERvc0tpbGxQcm9jZXNzKERLUF9QUk9DRVNTLCBwaWQpKSAhPSBOT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybiBvczJfZXJyb3IocmMpOwotCi0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBOVUxMOyAvKiBVbnJlY29nbml6ZWQgU2lnbmFsIFJlcXVlc3RlZCAqLwotI2Vsc2UKICAgICBpZiAoa2lsbChwaWQsIHNpZykgPT0gLTEpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotI2VuZGlmCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtNjY4NSwxNiArNjYwMCwxNyBAQAogd2luMzJfa2lsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBEV09SRCBwaWQsIHNpZywgZXJyOworICAgIHBpZF90IHBpZDsKKyAgICBEV09SRCBzaWcsIGVycjsKICAgICBIQU5ETEUgaGFuZGxlOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJrazpraWxsIiwgJnBpZCwgJnNpZykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgIms6a2lsbCIsICZwaWQsICZzaWcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIENvbnNvbGUgcHJvY2Vzc2VzIHdoaWNoIHNoYXJlIGEgY29tbW9uIGNvbnNvbGUgY2FuIGJlIHNlbnQgQ1RSTCtDIG9yCiAgICAgICAgQ1RSTCtCUkVBSyBldmVudHMsIHByb3ZpZGVkIHRoZXkgaGFuZGxlIHNhaWQgZXZlbnRzLiAqLwogICAgIGlmIChzaWcgPT0gQ1RSTF9DX0VWRU5UIHx8IHNpZyA9PSBDVFJMX0JSRUFLX0VWRU5UKSB7Ci0gICAgICAgIGlmIChHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQoc2lnLCBwaWQpID09IDApIHsKKyAgICAgICAgaWYgKEdlbmVyYXRlQ29uc29sZUN0cmxFdmVudChzaWcsIChEV09SRClwaWQpID09IDApIHsKICAgICAgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOwogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKICAgICAgICAgfQpAQCAtNjcwNCw3ICs2NjIwLDcgQEAKIAogICAgIC8qIElmIHRoZSBzaWduYWwgaXMgb3V0c2lkZSBvZiB3aGF0IEdlbmVyYXRlQ29uc29sZUN0cmxFdmVudCBjYW4gdXNlLAogICAgICAgIGF0dGVtcHQgdG8gb3BlbiBhbmQgdGVybWluYXRlIHRoZSBwcm9jZXNzLiAqLwotICAgIGhhbmRsZSA9IE9wZW5Qcm9jZXNzKFBST0NFU1NfQUxMX0FDQ0VTUywgRkFMU0UsIHBpZCk7CisgICAgaGFuZGxlID0gT3BlblByb2Nlc3MoUFJPQ0VTU19BTExfQUNDRVNTLCBGQUxTRSwgKERXT1JEKXBpZCk7CiAgICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7CiAgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOwogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKQEAgLTcxMTAsNyArNzAyNiw3IEBACiAgICAgUHlfaW50cHRyX3QgcGlkOwogICAgIGludCBzdGF0dXMsIG9wdGlvbnM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaTp3YWl0cGlkIiwgJnBpZCwgJm9wdGlvbnMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICJpOndhaXRwaWQiLCAmcGlkLCAmb3B0aW9ucykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBwaWQgPSBfY3dhaXQoJnN0YXR1cywgcGlkLCBvcHRpb25zKTsKQEAgLTcxMTksNyArNzAzNSw3IEBACiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogCiAgICAgLyogc2hpZnQgdGhlIHN0YXR1cyBsZWZ0IGEgYnl0ZSBzbyB0aGlzIGlzIG1vcmUgbGlrZSB0aGUgUE9TSVggd2FpdHBpZCAqLwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOaSIsIFB5TG9uZ19Gcm9tUGlkKHBpZCksIHN0YXR1cyA8PCA4KTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShfUHlfUEFSU0VfSU5UUFRSICJpIiwgcGlkLCBzdGF0dXMgPDwgOCk7CiB9CiAjZW5kaWYgLyogSEFWRV9XQUlUUElEIHx8IEhBVkVfQ1dBSVQgKi8KIApAQCAtNzE3MCw2ICs3MDg2LDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicmVhZGxpbmsiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpyZWFkbGluayIsIGtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9SRUFETElOS0FUCkBAIC03MTkwLDcgKzcxMDcsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAobGVuZ3RoIDwgMCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJyZWFkbGluayIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTcyMjYsOCArNzE0Myw5IEBACiAvKiBHcmFiIENyZWF0ZVN5bWJvbGljTGlua1cgZHluYW1pY2FsbHkgZnJvbSBrZXJuZWwzMiAqLwogc3RhdGljIERXT1JEIChDQUxMQkFDSyAqUHlfQ3JlYXRlU3ltYm9saWNMaW5rVykoTFBXU1RSLCBMUFdTVFIsIERXT1JEKSA9IE5VTEw7CiBzdGF0aWMgRFdPUkQgKENBTExCQUNLICpQeV9DcmVhdGVTeW1ib2xpY0xpbmtBKShMUFNUUiwgTFBTVFIsIERXT1JEKSA9IE5VTEw7CisKIHN0YXRpYyBpbnQKLWNoZWNrX0NyZWF0ZVN5bWJvbGljTGluaygpCitjaGVja19DcmVhdGVTeW1ib2xpY0xpbmsodm9pZCkKIHsKICAgICBISU5TVEFOQ0UgaEtlcm5lbDMyOwogICAgIC8qIG9ubHkgcmVjaGVjayAqLwpAQCAtNzI0MSw1NSArNzE1OSw1NyBAQAogICAgIHJldHVybiAoUHlfQ3JlYXRlU3ltYm9saWNMaW5rVyAmJiBQeV9DcmVhdGVTeW1ib2xpY0xpbmtBKTsKIH0KIAotdm9pZCBfZGlybmFtZVcoV0NIQVIgKnBhdGgpIHsKLSAgICAvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLwotCisvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLworc3RhdGljIHZvaWQKK19kaXJuYW1lVyhXQ0hBUiAqcGF0aCkKK3sKICAgICBXQ0hBUiAqcHRyOwogCiAgICAgLyogd2FsayB0aGUgcGF0aCBmcm9tIHRoZSBlbmQgdW50aWwgYSBiYWNrc2xhc2ggaXMgZW5jb3VudGVyZWQgKi8KLSAgICBmb3IocHRyID0gcGF0aCArIHdjc2xlbihwYXRoKTsgcHRyICE9IHBhdGg7IHB0ci0tKQotICAgIHsKLSAgICAgICAgaWYoKnB0ciA9PSAqTCJcXCIgfHwgKnB0ciA9PSAqTCIvIikgeworICAgIGZvcihwdHIgPSBwYXRoICsgd2NzbGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pIHsKKyAgICAgICAgaWYgKCpwdHIgPT0gTCdcXCcgfHwgKnB0ciA9PSBMJy8nKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICB9CiAgICAgKnB0ciA9IDA7CiB9CiAKLXZvaWQgX2Rpcm5hbWVBKGNoYXIgKnBhdGgpIHsKLSAgICAvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLwotCisvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLworc3RhdGljIHZvaWQKK19kaXJuYW1lQShjaGFyICpwYXRoKQorewogICAgIGNoYXIgKnB0cjsKIAogICAgIC8qIHdhbGsgdGhlIHBhdGggZnJvbSB0aGUgZW5kIHVudGlsIGEgYmFja3NsYXNoIGlzIGVuY291bnRlcmVkICovCi0gICAgZm9yKHB0ciA9IHBhdGggKyBzdHJsZW4ocGF0aCk7IHB0ciAhPSBwYXRoOyBwdHItLSkKLSAgICB7Ci0gICAgICAgIGlmKCpwdHIgPT0gJ1xcJyB8fCAqcHRyID09ICcvJykgeworICAgIGZvcihwdHIgPSBwYXRoICsgc3RybGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pIHsKKyAgICAgICAgaWYgKCpwdHIgPT0gJ1xcJyB8fCAqcHRyID09ICcvJykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgfQogICAgICpwdHIgPSAwOwogfQogCi1pbnQgX2lzX2Fic1coV0NIQVIgKnBhdGgpIHsKLSAgICAvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCi0KKy8qIElzIHRoaXMgcGF0aCBhYnNvbHV0ZT8gKi8KK3N0YXRpYyBpbnQKK19pc19hYnNXKGNvbnN0IFdDSEFSICpwYXRoKQorewogICAgIHJldHVybiBwYXRoWzBdID09IEwnXFwnIHx8IHBhdGhbMF0gPT0gTCcvJyB8fCBwYXRoWzFdID09IEwnOic7CiAKIH0KIAotaW50IF9pc19hYnNBKGNoYXIgKnBhdGgpIHsKLSAgICAvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCi0KKy8qIElzIHRoaXMgcGF0aCBhYnNvbHV0ZT8gKi8KK3N0YXRpYyBpbnQKK19pc19hYnNBKGNvbnN0IGNoYXIgKnBhdGgpCit7CiAgICAgcmV0dXJuIHBhdGhbMF0gPT0gJ1xcJyB8fCBwYXRoWzBdID09ICcvJyB8fCBwYXRoWzFdID09ICc6JzsKIAogfQogCi12b2lkIF9qb2luVyhXQ0hBUiAqZGVzdF9wYXRoLCBjb25zdCBXQ0hBUiAqcm9vdCwgY29uc3QgV0NIQVIgKnJlc3QpIHsKLSAgICAvKiBqb2luIHJvb3QgYW5kIHJlc3Qgd2l0aCBhIGJhY2tzbGFzaCAqLwotICAgIGludCByb290X2xlbjsKKy8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCitzdGF0aWMgdm9pZAorX2pvaW5XKFdDSEFSICpkZXN0X3BhdGgsIGNvbnN0IFdDSEFSICpyb290LCBjb25zdCBXQ0hBUiAqcmVzdCkKK3sKKyAgICBzaXplX3Qgcm9vdF9sZW47CiAKLSAgICBpZihfaXNfYWJzVyhyZXN0KSkgeworICAgIGlmIChfaXNfYWJzVyhyZXN0KSkgewogICAgICAgICB3Y3NjcHkoZGVzdF9wYXRoLCByZXN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTcyOTgsMTcgKzcyMTgsMTkgQEAKIAogICAgIHdjc2NweShkZXN0X3BhdGgsIHJvb3QpOwogICAgIGlmKHJvb3RfbGVuKSB7Ci0gICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSAqTCJcXCI7Ci0gICAgICAgIHJvb3RfbGVuICs9IDE7CisgICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSBMJ1xcJzsKKyAgICAgICAgcm9vdF9sZW4rKzsKICAgICB9CiAgICAgd2NzY3B5KGRlc3RfcGF0aCtyb290X2xlbiwgcmVzdCk7CiB9CiAKLXZvaWQgX2pvaW5BKGNoYXIgKmRlc3RfcGF0aCwgY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqcmVzdCkgewotICAgIC8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCi0gICAgaW50IHJvb3RfbGVuOworLyogam9pbiByb290IGFuZCByZXN0IHdpdGggYSBiYWNrc2xhc2ggKi8KK3N0YXRpYyB2b2lkCitfam9pbkEoY2hhciAqZGVzdF9wYXRoLCBjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpyZXN0KQoreworICAgIHNpemVfdCByb290X2xlbjsKIAotICAgIGlmKF9pc19hYnNBKHJlc3QpKSB7CisgICAgaWYgKF9pc19hYnNBKHJlc3QpKSB7CiAgICAgICAgIHN0cmNweShkZXN0X3BhdGgsIHJlc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzMxOCwxNCArNzI0MCwxNSBAQAogICAgIHN0cmNweShkZXN0X3BhdGgsIHJvb3QpOwogICAgIGlmKHJvb3RfbGVuKSB7CiAgICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSAnXFwnOwotICAgICAgICByb290X2xlbiArPSAxOworICAgICAgICByb290X2xlbisrOwogICAgIH0KICAgICBzdHJjcHkoZGVzdF9wYXRoK3Jvb3RfbGVuLCByZXN0KTsKIH0KIAotaW50IF9jaGVja19kaXJXKFdDSEFSICpzcmMsIFdDSEFSICpkZXN0KQorLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KK3N0YXRpYyBpbnQKK19jaGVja19kaXJXKFdDSEFSICpzcmMsIFdDSEFSICpkZXN0KQogewotICAgIC8qIFJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGF0IHNyYyByZWxhdGl2ZSB0byBkZXN0IGlzIGEgZGlyZWN0b3J5ICovCiAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBzcmNfaW5mbzsKICAgICBXQ0hBUiBkZXN0X3BhcmVudFtNQVhfUEFUSF07CiAgICAgV0NIQVIgc3JjX3Jlc29sdmVkW01BWF9QQVRIXSA9IEwiIjsKQEAgLTczNDEsMTggKzcyNjQsMTkgQEAKICAgICApOwogfQogCi1pbnQgX2NoZWNrX2RpckEoY2hhciAqc3JjLCBjaGFyICpkZXN0KQorLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KK3N0YXRpYyBpbnQKK19jaGVja19kaXJBKGNoYXIgKnNyYywgY2hhciAqZGVzdCkKIHsKLSAgICAvKiBSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCBhdCBzcmMgcmVsYXRpdmUgdG8gZGVzdCBpcyBhIGRpcmVjdG9yeSAqLwogICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgc3JjX2luZm87CiAgICAgY2hhciBkZXN0X3BhcmVudFtNQVhfUEFUSF07CiAgICAgY2hhciBzcmNfcmVzb2x2ZWRbTUFYX1BBVEhdID0gIiI7CiAKICAgICAvKiBkZXN0X3BhcmVudCA9IG9zLnBhdGguZGlybmFtZShkZXN0KSAqLwogICAgIHN0cmNweShkZXN0X3BhcmVudCwgZGVzdCk7Ci0gICAgX2Rpcm5hbWVXKGRlc3RfcGFyZW50KTsKKyAgICBfZGlybmFtZUEoZGVzdF9wYXJlbnQpOwogICAgIC8qIHNyY19yZXNvbHZlZCA9IG9zLnBhdGguam9pbihkZXN0X3BhcmVudCwgc3JjKSAqLwotICAgIF9qb2luVyhzcmNfcmVzb2x2ZWQsIGRlc3RfcGFyZW50LCBzcmMpOworICAgIF9qb2luQShzcmNfcmVzb2x2ZWQsIGRlc3RfcGFyZW50LCBzcmMpOwogICAgIHJldHVybiAoCiAgICAgICAgIEdldEZpbGVBdHRyaWJ1dGVzRXhBKHNyY19yZXNvbHZlZCwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmc3JjX2luZm8pCiAgICAgICAgICYmIHNyY19pbmZvLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkKQEAgLTczNzgsOCArNzMwMiwxMCBAQAogI2VuZGlmCiAKICAgICBtZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHNyYykpOworICAgIHNyYy5mdW5jdGlvbl9uYW1lID0gInN5bWxpbmsiOwogICAgIHNyYy5hcmd1bWVudF9uYW1lID0gInNyYyI7CiAgICAgbWVtc2V0KCZkc3QsIDAsIHNpemVvZihkc3QpKTsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9ICJzeW1saW5rIjsKICAgICBkc3QuYXJndW1lbnRfbmFtZSA9ICJkc3QiOwogCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtNzQzMiw3ICs3MzU4LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJzeW1saW5rIiwgc3JjLm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC03NDQ4LDcgKzczNzQsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInN5bWxpbmsiLCAmZHN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcjIoJnNyYywgJmRzdCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTc2MTAsMzEgKzc1MzYsNyBAQAogdGltZXMuICBUaGUgb2JqZWN0IGJlaGF2ZXMgbGlrZSBhIG5hbWVkIHR1cGxlIHdpdGggdGhlc2UgZmllbGRzOlxuXAogICAodXRpbWUsIHN0aW1lLCBjdXRpbWUsIGNzdGltZSwgZWxhcHNlZF90aW1lKSIpOwogCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKSAmJiBkZWZpbmVkKFBZT1NfT1MyKQotc3RhdGljIGxvbmcKLXN5c3RlbV91cHRpbWUodm9pZCkKLXsKLSAgICBVTE9ORyAgICAgdmFsdWUgPSAwOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIERvc1F1ZXJ5U3lzSW5mbyhRU1ZfTVNfQ09VTlQsIFFTVl9NU19DT1VOVCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfdGltZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCi17Ci0gICAgLyogQ3VycmVudGx5IE9ubHkgVXB0aW1lIGlzIFByb3ZpZGVkIC0tIE90aGVycyBMYXRlciAqLwotICAgIHJldHVybiBidWlsZF90aW1lc19yZXN1bHQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkwIC8qIHQudG1zX3V0aW1lIC8gSFogKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkwIC8qIHQudG1zX3N0aW1lIC8gSFogKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkwIC8qIHQudG1zX2N1dGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc19jc3RpbWUgLyBIWiAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKXN5c3RlbV91cHRpbWUoKSAvIDEwMDApOwotfQotI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmIGRlZmluZWQoTVNfV0lORE9XUykKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF90aW1lcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKQEAgLTc2NTYsNyArNzU1OCw3IEBACiAgICAgICAgIChkb3VibGUpMCwKICAgICAgICAgKGRvdWJsZSkwKTsKIH0KLSNlbHNlIC8qIE5laXRoZXIgV2luZG93cyBub3IgT1MvMiAqLworI2Vsc2UgLyogTm90IFdpbmRvd3MgKi8KICNkZWZpbmUgTkVFRF9USUNLU19QRVJfU0VDT05ECiBzdGF0aWMgbG9uZyB0aWNrc19wZXJfc2Vjb25kID0gLTE7CiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzc3Niw2ICs3Njc4LDEwIEBACiAKIC8qIEZ1bmN0aW9ucyBhY3Rpbmcgb24gZmlsZSBkZXNjcmlwdG9ycyAqLwogCisjaWZkZWYgT19DTE9FWEVDCitleHRlcm4gaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZW5kaWYKKwogUHlEb2NfU1RSVkFSKHBvc2l4X29wZW5fX2RvY19fLAogIm9wZW4ocGF0aCwgZmxhZ3MsIG1vZGU9MG83NzcsICosIGRpcl9mZD1Ob25lKVxuXG5cCiBPcGVuIGEgZmlsZSBmb3IgbG93IGxldmVsIElPLiAgUmV0dXJucyBhIGZpbGUgaGFuZGxlIChpbnRlZ2VyKS5cblwKQEAgLTc3OTUsOCArNzcwMSwxNCBAQAogICAgIGludCBmZDsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJmbGFncyIsICJtb2RlIiwgImRpcl9mZCIsIE5VTEx9OworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyNlbGlmICFkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAib3BlbiI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZpfGkkTyY6b3BlbiIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAgICAgICAgICZmbGFncywgJm1vZGUsCkBAIC03ODA4LDYgKzc3MjAsMTIgQEAKICAgICAgICAgKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgZmxhZ3MgfD0gT19OT0lOSEVSSVQ7CisjZWxpZiBkZWZpbmVkKE9fQ0xPRVhFQykKKyAgICBmbGFncyB8PSBPX0NMT0VYRUM7CisjZW5kaWYKKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKHBhdGgud2lkZSkKQEAgLTc4MjMsMTYgKzc3NDEsMTcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGZkID09IC0xKSB7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgICAgICAvKiBmb3JjZSB1c2Ugb2YgcG9zaXhfZXJyb3IgaGVyZSBmb3IgZXhhY3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSAgICAgICAgaWYgKHBhdGgud2lkZSkKLSAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2Vycm9yKCk7Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJvcGVuIiwgJnBhdGgpOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgcGF0aC5vYmplY3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylmZCk7CiAKIGV4aXQ6CkBAIC03ODkzLDEzICs3ODEyLDE0IEBACiBwb3NpeF9kdXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGludCBmZDsKKwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpkdXAiLCAmZmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIGZkID0gZHVwKGZkKTsKLSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIGZkID0gX1B5X2R1cChmZCk7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpZmQpOwogfQogCkBAIC03OTA5LDE2ICs3ODI5LDgyIEBACiBEdXBsaWNhdGUgZmlsZSBkZXNjcmlwdG9yLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZHVwMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitwb3NpeF9kdXAyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBpbnQgZmQsIGZkMiwgcmVzOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6ZHVwMiIsICZmZCwgJmZkMikpCisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7ImZkIiwgImZkMiIsICJpbmhlcml0YWJsZSIsIE5VTEx9OworICAgIGludCBmZCwgZmQyOworICAgIGludCBpbmhlcml0YWJsZSA9IDE7CisgICAgaW50IHJlczsKKyNpZiBkZWZpbmVkKEhBVkVfRFVQMykgJiYgXAorICAgICEoZGVmaW5lZChIQVZFX0ZDTlRMX0gpICYmIGRlZmluZWQoRl9EVVAyRkRfQ0xPRVhFQykpCisgICAgLyogZHVwMygpIGlzIGF2YWlsYWJsZSBvbiBMaW51eCAyLjYuMjcrIGFuZCBnbGliYyAyLjkgKi8KKyAgICBpbnQgZHVwM193b3JrcyA9IC0xOworI2VuZGlmCisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpaXxpOmR1cDIiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmQsICZmZDIsICZpbmhlcml0YWJsZSkpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKCFfUHlWZXJpZnlfZmRfZHVwMihmZCwgZmQyKSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9IGR1cDIoZmQsIGZkMik7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICAvKiBDaGFyYWN0ZXIgZmlsZXMgbGlrZSBjb25zb2xlIGNhbm5vdCBiZSBtYWtlIG5vbi1pbmhlcml0YWJsZSAqLworICAgIGlmICghaW5oZXJpdGFibGUgJiYgX1B5X3NldF9pbmhlcml0YWJsZShmZDIsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICBjbG9zZShmZDIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNlbGlmIGRlZmluZWQoSEFWRV9GQ05UTF9IKSAmJiBkZWZpbmVkKEZfRFVQMkZEX0NMT0VYRUMpCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGlmICghaW5oZXJpdGFibGUpCisgICAgICAgIHJlcyA9IGZjbnRsKGZkLCBGX0RVUDJGRF9DTE9FWEVDLCBmZDIpOworICAgIGVsc2UKKyAgICAgICAgcmVzID0gZHVwMihmZCwgZmQyKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworI2Vsc2UKKworI2lmZGVmIEhBVkVfRFVQMworICAgIGlmICghaW5oZXJpdGFibGUgJiYgZHVwM193b3JrcyAhPSAwKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzID0gZHVwMyhmZCwgZmQyLCBPX0NMT0VYRUMpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgaWYgKGR1cDNfd29ya3MgPT0gLTEpCisgICAgICAgICAgICAgICAgZHVwM193b3JrcyA9IChlcnJubyAhPSBFTk9TWVMpOworICAgICAgICAgICAgaWYgKGR1cDNfd29ya3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW5oZXJpdGFibGUgfHwgZHVwM193b3JrcyA9PSAwKQorICAgIHsKKyNlbmRpZgorICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IGR1cDIoZmQsIGZkMik7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICAgICAgaWYgKCFpbmhlcml0YWJsZSAmJiBfUHlfc2V0X2luaGVyaXRhYmxlKGZkMiwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICBjbG9zZShmZDIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyNpZmRlZiBIQVZFX0RVUDMKKyAgICB9CisjZW5kaWYKKworI2VuZGlmCisKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CkBAIC03OTYyLDcgKzc5NDgsNyBAQAogcG9zaXhfbHNlZWsoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGludCBmZCwgaG93OwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgUFlfTE9OR19MT05HIHBvcywgcmVzOwogI2Vsc2UKICAgICBvZmZfdCBwb3MsIHJlczsKQEAgLTc5OTAsNyArNzk3Niw3IEBACiAgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICByZXMgPSBfbHNlZWtpNjQoZmQsIHBvcywgaG93KTsKICNlbHNlCiAgICAgcmVzID0gbHNlZWsoZmQsIHBvcywgaG93KTsKQEAgLTgyMDIsNyArODE4OCw3IEBACiAgICAgfQogICAgIGxlbiA9IHBidWYubGVuOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChsZW4gPiBJTlRfTUFYKQogICAgICAgICBsZW4gPSBJTlRfTUFYOwogICAgIHNpemUgPSB3cml0ZShmZCwgcGJ1Zi5idWYsIChpbnQpbGVuKTsKQEAgLTgyMzksMTIgKzgyMjUsMTMgQEAKICAgICBvZmZfdCBzYnl0ZXM7CiAgICAgc3RydWN0IHNmX2hkdHIgc2Y7CiAgICAgaW50IGZsYWdzID0gMDsKLSAgICBzZi5oZWFkZXJzID0gTlVMTDsKLSAgICBzZi50cmFpbGVycyA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7Im91dCIsICJpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZmZzZXQiLCAiY291bnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhZGVycyIsICJ0cmFpbGVycyIsICJmbGFncyIsIE5VTEx9OwogCisgICAgc2YuaGVhZGVycyA9IE5VTEw7CisgICAgc2YudHJhaWxlcnMgPSBOVUxMOworCiAjaWZkZWYgX19BUFBMRV9fCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAiaWlPJk8mfE9PaTpzZW5kZmlsZSIsCiAgICAgICAgIGtleXdvcmRzLCAmb3V0LCAmaW4sIF9wYXJzZV9vZmZfdCwgJm9mZnNldCwgX3BhcnNlX29mZl90LCAmc2J5dGVzLApAQCAtODM2OCwxNiArODM1NSwxMiBAQAogICAgIGludCByZXM7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmZzdGF0IiwgJmZkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWZkZWYgX19WTVMKLSAgICAvKiBvbiBPcGVuVk1TIHdlIG11c3QgZW5zdXJlIHRoYXQgYWxsIGJ5dGVzIGFyZSB3cml0dGVuIHRvIHRoZSBmaWxlICovCi0gICAgZnN5bmMoZmQpOwotI2VuZGlmCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9IEZTVEFUKGZkLCAmc3QpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyAhPSAwKSB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoImZzdGF0IiwgTlVMTCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKICNlbHNlCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogI2VuZGlmCkBAIC04NDEwLDM1ICs4MzkzLDY5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfcGlwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIEhGSUxFIHJlYWQsIHdyaXRlOwotICAgIEFQSVJFVCByYzsKLQotICAgIHJjID0gRG9zQ3JlYXRlUGlwZSggJnJlYWQsICZ3cml0ZSwgNDA5Nik7Ci0gICAgaWYgKHJjICE9IE5PX0VSUk9SKQotICAgICAgICByZXR1cm4gb3MyX2Vycm9yKHJjKTsKLQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgcmVhZCwgd3JpdGUpOwotI2Vsc2UKLSNpZiAhZGVmaW5lZChNU19XSU5ET1dTKQogICAgIGludCBmZHNbMl07Ci0gICAgaW50IHJlczsKLSAgICByZXMgPSBwaXBlKGZkcyk7Ci0gICAgaWYgKHJlcyAhPSAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZkc1swXSwgZmRzWzFdKTsKLSNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgSEFORExFIHJlYWQsIHdyaXRlOwotICAgIGludCByZWFkX2ZkLCB3cml0ZV9mZDsKKyAgICBTRUNVUklUWV9BVFRSSUJVVEVTIGF0dHI7CiAgICAgQk9PTCBvazsKLSAgICBvayA9IENyZWF0ZVBpcGUoJnJlYWQsICZ3cml0ZSwgTlVMTCwgMCk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJDcmVhdGVQaXBlIiwgTlVMTCk7Ci0gICAgcmVhZF9mZCA9IF9vcGVuX29zZmhhbmRsZSgoUHlfaW50cHRyX3QpcmVhZCwgMCk7Ci0gICAgd3JpdGVfZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKFB5X2ludHB0cl90KXdyaXRlLCAxKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIHJlYWRfZmQsIHdyaXRlX2ZkKTsKLSNlbmRpZiAvKiBNU19XSU5ET1dTICovCisjZWxzZQorICAgIGludCByZXM7CiAjZW5kaWYKKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBhdHRyLm5MZW5ndGggPSBzaXplb2YoYXR0cik7CisgICAgYXR0ci5scFNlY3VyaXR5RGVzY3JpcHRvciA9IE5VTEw7CisgICAgYXR0ci5iSW5oZXJpdEhhbmRsZSA9IEZBTFNFOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIG9rID0gQ3JlYXRlUGlwZSgmcmVhZCwgJndyaXRlLCAmYXR0ciwgMCk7CisgICAgaWYgKG9rKSB7CisgICAgICAgIGZkc1swXSA9IF9vcGVuX29zZmhhbmRsZSgoUHlfaW50cHRyX3QpcmVhZCwgX09fUkRPTkxZKTsKKyAgICAgICAgZmRzWzFdID0gX29wZW5fb3NmaGFuZGxlKChQeV9pbnRwdHJfdCl3cml0ZSwgX09fV1JPTkxZKTsKKyAgICAgICAgaWYgKGZkc1swXSA9PSAtMSB8fCBmZHNbMV0gPT0gLTEpIHsKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHJlYWQpOworICAgICAgICAgICAgQ2xvc2VIYW5kbGUod3JpdGUpOworICAgICAgICAgICAgb2sgPSAwOworICAgICAgICB9CisgICAgfQorICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisjZWxzZQorCisjaWZkZWYgSEFWRV9QSVBFMgorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXMgPSBwaXBlMihmZHMsIE9fQ0xPRVhFQyk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyZXMgIT0gMCAmJiBlcnJubyA9PSBFTk9TWVMpCisgICAgeworI2VuZGlmCisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzID0gcGlwZShmZHMpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIGlmIChyZXMgPT0gMCkgeworICAgICAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmRzWzBdLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgICAgICBjbG9zZShmZHNbMF0pOworICAgICAgICAgICAgICAgIGNsb3NlKGZkc1sxXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZHNbMV0sIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgICAgIGNsb3NlKGZkc1swXSk7CisgICAgICAgICAgICAgICAgY2xvc2UoZmRzWzFdKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmZGVmIEhBVkVfUElQRTIKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChyZXMgIT0gMCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyNlbmRpZiAvKiAhTVNfV0lORE9XUyAqLworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgZmRzWzBdLCBmZHNbMV0pOwogfQogI2VuZGlmICAvKiBIQVZFX1BJUEUgKi8KIApAQCAtODc0MSw2ICs4NzU4LDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJsZW5ndGgiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidHJ1bmNhdGUiOwogI2lmZGVmIEhBVkVfRlRSVU5DQVRFCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTg3NTgsNyArODc3Niw3IEBACiAgICAgICAgIHJlcyA9IHRydW5jYXRlKHBhdGgubmFycm93LCBsZW5ndGgpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJlc3VsdCA9IHBhdGhfcG9zaXhfZXJyb3IoInRydW5jYXRlIiwgJnBhdGgpOworICAgICAgICByZXN1bHQgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXN1bHQgPSBQeV9Ob25lOwpAQCAtOTE4MSw2ICs5MTk5LDEwIEBACiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCA4LCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0LmZfZmxhZykpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgOSwgUHlMb25nX0Zyb21Mb25nKChsb25nKSBzdC5mX25hbWVtYXgpKTsKICNlbmRpZgorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmV0dXJuIHY7CiB9CkBAIC05MjMwLDYgKzkyNTIsNyBAQAogICAgIHN0cnVjdCBzdGF0dmZzIHN0OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJzdGF0dmZzIjsKICNpZmRlZiBIQVZFX0ZTVEFUVkZTCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTkyNTYsNyArOTI3OSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9wb3NpeF9lcnJvcigic3RhdHZmcyIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTk0OTMsNiArOTUxNiw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAibmFtZSIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJwYXRoY29uZiI7CiAjaWZkZWYgSEFWRV9GUEFUSENPTkYKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtOTUxMyw3ICs5NTM3LDcgQEAKICAgICAgICAgICAgIC8qIGNvdWxkIGJlIGEgcGF0aCBvciBuYW1lIHByb2JsZW0gKi8KICAgICAgICAgICAgIHBvc2l4X2Vycm9yKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IHBhdGhfcG9zaXhfZXJyb3IoInBhdGhjb25mIiwgJnBhdGgpOworICAgICAgICAgICAgcmVzdWx0ID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Mb25nKGxpbWl0KTsKQEAgLTk2OTUsNyArOTcxOSw3IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgaW50IG5hbWU7CiAgICAgY2hhciBidWZmZXJbMjU1XTsKLSAgICBpbnQgbGVuOworICAgIHNpemVfdCBsZW47CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOmNvbmZzdHIiLCBjb252X2NvbmZzdHJfY29uZm5hbWUsICZuYW1lKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC05NzEyLDcgKzk3MzYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCh1bnNpZ25lZCBpbnQpbGVuID49IHNpemVvZihidWZmZXIpKSB7CisgICAgaWYgKGxlbiA+PSBzaXplb2YoYnVmZmVyKSkgewogICAgICAgICBjaGFyICpidWYgPSBQeU1lbV9NYWxsb2MobGVuKTsKICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CkBAIC0xMDI0Miw3ICsxMDI2Niw3IEBACiAgICAgaW50IG5hbWU7CiAKICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6c3lzY29uZiIsIGNvbnZfc3lzY29uZl9jb25mbmFtZSwgJm5hbWUpKSB7Ci0gICAgICAgIGludCB2YWx1ZTsKKyAgICAgICAgbG9uZyB2YWx1ZTsKIAogICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgIHZhbHVlID0gc3lzY29uZihuYW1lKTsKQEAgLTEwNTcyLDYgKzEwNTk2LDggQEAKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKICAgICBtZW1zZXQoJmF0dHJpYnV0ZSwgMCwgc2l6ZW9mKGF0dHJpYnV0ZSkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJnZXR4YXR0ciI7CisgICAgYXR0cmlidXRlLmZ1bmN0aW9uX25hbWUgPSAiZ2V0eGF0dHIiOwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mTyZ8JHA6Z2V0eGF0dHIiLCBrZXl3b3JkcywKICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLApAQCAtMTA1ODgsNyArMTA2MTQsNyBAQAogICAgICAgICBzdGF0aWMgUHlfc3NpemVfdCBidWZmZXJfc2l6ZXNbXSA9IHsxMjgsIFhBVFRSX1NJWkVfTUFYLCAwfTsKICAgICAgICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplc1tpXTsKICAgICAgICAgaWYgKCFidWZmZXJfc2l6ZSkgewotICAgICAgICAgICAgcGF0aF9lcnJvcigiZ2V0eGF0dHIiLCAmcGF0aCk7CisgICAgICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgICAgICBidWZmZXIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ1ZmZlcl9zaXplKTsKQEAgLTEwNjEwLDcgKzEwNjM2LDcgQEAKICAgICAgICAgICAgIGJ1ZmZlciA9IE5VTEw7CiAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRVJBTkdFKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcGF0aF9lcnJvcigiZ2V0eGF0dHIiLCAmcGF0aCk7CisgICAgICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogCkBAIC0xMDY0OSw2ICsxMDY3NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZsYWdzIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJzZXR4YXR0ciI7CiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAgICAgbWVtc2V0KCZhdHRyaWJ1dGUsIDAsIHNpemVvZihhdHRyaWJ1dGUpKTsKICAgICBtZW1zZXQoJnZhbHVlLCAwLCBzaXplb2YodmFsdWUpKTsKQEAgLTEwNjc2LDcgKzEwNzAzLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUzsKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigic2V0eGF0dHIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0xMDcxMCw3ICsxMDczNyw5IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiYXR0cmlidXRlIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJyZW1vdmV4YXR0ciI7CiAgICAgbWVtc2V0KCZhdHRyaWJ1dGUsIDAsIHNpemVvZihhdHRyaWJ1dGUpKTsKKyAgICBhdHRyaWJ1dGUuZnVuY3Rpb25fbmFtZSA9ICJyZW1vdmV4YXR0ciI7CiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnwkcDpyZW1vdmV4YXR0ciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHMsCkBAIC0xMDczMiw3ICsxMDc2MSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFM7CiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInJlbW92ZXhhdHRyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMTA3NjgsNiArMTA3OTcsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsaXN0eGF0dHIiOwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogICAgIHBhdGguZmQgPSAtMTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TyYkcDpsaXN0eGF0dHIiLCBrZXl3b3JkcywKQEAgLTEwNzg2LDcgKzEwODE2LDcgQEAKICAgICAgICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplc1tpXTsKICAgICAgICAgaWYgKCFidWZmZXJfc2l6ZSkgewogICAgICAgICAgICAgLyogRVJBTkdFICovCi0gICAgICAgICAgICBwYXRoX2Vycm9yKCJsaXN0eGF0dHIiLCAmcGF0aCk7CisgICAgICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJ1ZmZlciA9IFB5TWVtX01BTExPQyhidWZmZXJfc2l6ZSk7CkBAIC0xMDgxMCw3ICsxMDg0MCw3IEBACiAgICAgICAgICAgICAgICAgYnVmZmVyID0gTlVMTDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhdGhfZXJyb3IoImxpc3R4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTA5ODgsMTQgKzExMDE4LDE1NCBAQAogfQogI2VuZGlmIC8qIGRlZmluZWQoVEVSTVNJWkVfVVNFX0NPTklPKSB8fCBkZWZpbmVkKFRFUk1TSVpFX1VTRV9JT0NUTCkgKi8KIAorUHlEb2NfU1RSVkFSKHBvc2l4X2NwdV9jb3VudF9fZG9jX18sCisiY3B1X2NvdW50KCkgLT4gaW50ZWdlclxuXG5cCitSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0sIG9yIE5vbmUgaWYgdGhpcyB2YWx1ZSBjYW5ub3QgYmVcblwKK2VzdGFibGlzaGVkLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorcG9zaXhfY3B1X2NvdW50KFB5T2JqZWN0ICpzZWxmKQoreworICAgIGludCBuY3B1ID0gMDsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgU1lTVEVNX0lORk8gc3lzaW5mbzsKKyAgICBHZXRTeXN0ZW1JbmZvKCZzeXNpbmZvKTsKKyAgICBuY3B1ID0gc3lzaW5mby5kd051bWJlck9mUHJvY2Vzc29yczsKKyNlbGlmIGRlZmluZWQoX19ocHV4KQorICAgIG5jcHUgPSBtcGN0bChNUENfR0VUTlVNU1BVUywgTlVMTCwgTlVMTCk7CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTQ09ORikgJiYgZGVmaW5lZChfU0NfTlBST0NFU1NPUlNfT05MTikKKyAgICBuY3B1ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7CisjZWxpZiBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19PcGVuQlNEX18pICAgfHwgXAorICAgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgICB8fCBcCisgICAgICBkZWZpbmVkKF9fTmV0QlNEX18pICAgIHx8IFwKKyAgICAgIGRlZmluZWQoX19BUFBMRV9fKQorICAgIGludCBtaWJbMl07CisgICAgc2l6ZV90IGxlbiA9IHNpemVvZihuY3B1KTsKKyAgICBtaWJbMF0gPSBDVExfSFc7CisgICAgbWliWzFdID0gSFdfTkNQVTsKKyAgICBpZiAoc3lzY3RsKG1pYiwgMiwgJm5jcHUsICZsZW4sIE5VTEwsIDApICE9IDApCisgICAgICAgIG5jcHUgPSAwOworI2VuZGlmCisgICAgaWYgKG5jcHUgPj0gMSkKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhuY3B1KTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoZ2V0X2luaGVyaXRhYmxlX19kb2NfXywKKyAgICAiZ2V0X2luaGVyaXRhYmxlKGZkKSAtPiBib29sXG4iIFwKKyAgICAiXG4iIFwKKyAgICAiR2V0IHRoZSBjbG9zZS1vbi1leGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfZ2V0X2luaGVyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgZmQ7CisgICAgaW50IGluaGVyaXRhYmxlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmdldF9pbmhlcml0YWJsZSIsICZmZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIGluaGVyaXRhYmxlID0gX1B5X2dldF9pbmhlcml0YWJsZShmZCk7CisgICAgaWYgKGluaGVyaXRhYmxlIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhpbmhlcml0YWJsZSk7Cit9CisKK1B5RG9jX1NUUlZBUihzZXRfaW5oZXJpdGFibGVfX2RvY19fLAorICAgICJzZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlKVxuIiBcCisgICAgIlxuIiBcCisgICAgIlNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfc2V0X2luaGVyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgZmQsIGluaGVyaXRhYmxlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTpzZXRfaW5oZXJpdGFibGUiLCAmZmQsICZpbmhlcml0YWJsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSwgTlVMTCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworCisjaWZkZWYgTVNfV0lORE9XUworUHlEb2NfU1RSVkFSKGdldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19fLAorICAgICJnZXRfaGFuZGxlX2luaGVyaXRhYmxlKGZkKSAtPiBib29sXG4iIFwKKyAgICAiXG4iIFwKKyAgICAiR2V0IHRoZSBjbG9zZS1vbi1leGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfZ2V0X2hhbmRsZV9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfaW50cHRyX3QgaGFuZGxlOworICAgIERXT1JEIGZsYWdzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgIjpnZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwgJmhhbmRsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFHZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKWhhbmRsZSwgJmZsYWdzKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhmbGFncyAmIEhBTkRMRV9GTEFHX0lOSEVSSVQpOworfQorCitQeURvY19TVFJWQVIoc2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX18sCisgICAgInNldF9oYW5kbGVfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlKVxuIiBcCisgICAgIlxuIiBcCisgICAgIlNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGhhbmRsZS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfc2V0X2hhbmRsZV9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGluaGVyaXRhYmxlID0gMTsKKyAgICBQeV9pbnRwdHJfdCBoYW5kbGU7CisgICAgRFdPUkQgZmxhZ3M7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX0lOVFBUUiAiaTpzZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmluaGVyaXRhYmxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoaW5oZXJpdGFibGUpCisgICAgICAgIGZsYWdzID0gSEFORExFX0ZMQUdfSU5IRVJJVDsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzID0gMDsKKyAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpaGFuZGxlLCBIQU5ETEVfRkxBR19JTkhFUklULCBmbGFncykpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKyNlbmRpZiAgIC8qIE1TX1dJTkRPV1MgKi8KKworCisvKltjbGluaWMgaW5wdXRdCitkdW1wIGJ1ZmZlcgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisjaWZuZGVmIE9TX1RUWU5BTUVfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19UVFlOQU1FX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1RUWU5BTUVfTUVUSE9EREVGKSAqLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVkMDcxYmJjOGY0OWVhMTIgaW5wdXQ9NTI0Y2UyZTAyMWU0ZWJhNl0qLworCiAKIHN0YXRpYyBQeU1ldGhvZERlZiBwb3NpeF9tZXRob2RzW10gPSB7Ci0gICAgeyJhY2Nlc3MiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfYWNjZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X2FjY2Vzc19fZG9jX199LAotI2lmZGVmIEhBVkVfVFRZTkFNRQotICAgIHsidHR5bmFtZSIsICAgICAgICAgcG9zaXhfdHR5bmFtZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF90dHluYW1lX19kb2NfX30sCi0jZW5kaWYKKworICAgIE9TX1NUQVRfTUVUSE9EREVGCisgICAgT1NfQUNDRVNTX01FVEhPRERFRgorICAgIE9TX1RUWU5BTUVfTUVUSE9EREVGCisKICAgICB7ImNoZGlyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9jaGRpciwKICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9jaGRpcl9fZG9jX199LApAQCAtMTEwMzMsMTIgKzExMjAzLDEwIEBACiAjaWZkZWYgSEFWRV9DVEVSTUlECiAgICAgeyJjdGVybWlkIiwgICAgICAgICBwb3NpeF9jdGVybWlkLCBNRVRIX05PQVJHUywgcG9zaXhfY3Rlcm1pZF9fZG9jX199LAogI2VuZGlmCi0jaWZkZWYgSEFWRV9HRVRDV0QKICAgICB7ImdldGN3ZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9nZXRjd2RfdW5pY29kZSwKICAgICBNRVRIX05PQVJHUywgcG9zaXhfZ2V0Y3dkX19kb2NfX30sCiAgICAgeyJnZXRjd2RiIiwgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfZ2V0Y3dkX2J5dGVzLAogICAgIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRjd2RiX19kb2NfX30sCi0jZW5kaWYKICNpZiBkZWZpbmVkKEhBVkVfTElOSykgfHwgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIHsibGluayIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2xpbmssCiAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLApAQCAtMTEwODEsOSArMTEyNDksNiBAQAogICAgIHsicm1kaXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3JtZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X3JtZGlyX19kb2NfX30sCi0gICAgeyJzdGF0IiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfc3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9zdGF0X19kb2NfX30sCiAgICAgeyJzdGF0X2Zsb2F0X3RpbWVzIiwgc3RhdF9mbG9hdF90aW1lcywgTUVUSF9WQVJBUkdTLCBzdGF0X2Zsb2F0X3RpbWVzX19kb2NfX30sCiAjaWYgZGVmaW5lZChIQVZFX1NZTUxJTkspCiAgICAgeyJzeW1saW5rIiwgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfc3ltbGluaywKQEAgLTExMTE4LDEwICsxMTI4Myw2IEBACiAjaWZkZWYgSEFWRV9TUEFXTlYKICAgICB7InNwYXdudiIsICAgICAgICAgIHBvc2l4X3NwYXdudiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZfX2RvY19ffSwKICAgICB7InNwYXdudmUiLCAgICAgICAgIHBvc2l4X3NwYXdudmUsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252ZV9fZG9jX199LAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgeyJzcGF3bnZwIiwgICAgICAgICBwb3NpeF9zcGF3bnZwLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NwYXdudnBfX2RvY19ffSwKLSAgICB7InNwYXdudnBlIiwgICAgICAgIHBvc2l4X3NwYXdudnBlLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NwYXdudnBlX19kb2NfX30sCi0jZW5kaWYgLyogUFlPU19PUzIgKi8KICNlbmRpZiAvKiBIQVZFX1NQQVdOViAqLwogI2lmZGVmIEhBVkVfRk9SSzEKICAgICB7ImZvcmsxIiwgICAgICAgcG9zaXhfZm9yazEsIE1FVEhfTk9BUkdTLCBwb3NpeF9mb3JrMV9fZG9jX199LApAQCAtMTEyNjksNyArMTE0MzAsOCBAQAogICAgIHsiY2xvc2VyYW5nZSIsICAgICAgcG9zaXhfY2xvc2VyYW5nZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9jbG9zZXJhbmdlX19kb2NfX30sCiAgICAgeyJkZXZpY2VfZW5jb2RpbmciLCBkZXZpY2VfZW5jb2RpbmcsIE1FVEhfVkFSQVJHUywgZGV2aWNlX2VuY29kaW5nX19kb2NfX30sCiAgICAgeyJkdXAiLCAgICAgICAgICAgICBwb3NpeF9kdXAsIE1FVEhfVkFSQVJHUywgcG9zaXhfZHVwX19kb2NfX30sCi0gICAgeyJkdXAyIiwgICAgICAgICAgICBwb3NpeF9kdXAyLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2R1cDJfX2RvY19ffSwKKyAgICB7ImR1cDIiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9kdXAyLAorICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgcG9zaXhfZHVwMl9fZG9jX199LAogI2lmZGVmIEhBVkVfTE9DS0YKICAgICB7ImxvY2tmIiwgICAgICAgICAgIHBvc2l4X2xvY2tmLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2xvY2tmX19kb2NfX30sCiAjZW5kaWYKQEAgLTExNDAwLDkgKzExNTYyLDkgQEAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgeyJfZ2V0ZnVsbHBhdGhuYW1lIiwgICAgICAgIHBvc2l4X19nZXRmdWxscGF0aG5hbWUsIE1FVEhfVkFSQVJHUywgTlVMTH0sCiAgICAgeyJfZ2V0ZmluYWxwYXRobmFtZSIsICAgICAgIHBvc2l4X19nZXRmaW5hbHBhdGhuYW1lLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAotICAgIHsiX2dldGZpbGVpbmZvcm1hdGlvbiIsICAgICBwb3NpeF9fZ2V0ZmlsZWluZm9ybWF0aW9uLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAogICAgIHsiX2lzZGlyIiwgICAgICAgICAgICAgICAgICBwb3NpeF9faXNkaXIsIE1FVEhfVkFSQVJHUywgcG9zaXhfX2lzZGlyX19kb2NfX30sCiAgICAgeyJfZ2V0ZGlza3VzYWdlIiwgICAgICAgICAgIHdpbjMyX19nZXRkaXNrdXNhZ2UsIE1FVEhfVkFSQVJHUywgd2luMzJfX2dldGRpc2t1c2FnZV9fZG9jX199LAorICAgIHsiX2dldHZvbHVtZXBhdGhuYW1lIiwgICAgICBwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWUsIE1FVEhfVkFSQVJHUywgcG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lX19kb2NfX30sCiAjZW5kaWYKICNpZmRlZiBIQVZFX0dFVExPQURBVkcKICAgICB7ImdldGxvYWRhdmciLCAgICAgIHBvc2l4X2dldGxvYWRhdmcsIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRsb2FkYXZnX19kb2NfX30sCkBAIC0xMTQzOCw2OSArMTE2MDAsMjAgQEAKICNpZiBkZWZpbmVkKFRFUk1TSVpFX1VTRV9DT05JTykgfHwgZGVmaW5lZChURVJNU0laRV9VU0VfSU9DVEwpCiAgICAgeyJnZXRfdGVybWluYWxfc2l6ZSIsIGdldF90ZXJtaW5hbF9zaXplLCBNRVRIX1ZBUkFSR1MsIHRlcm1zaXplX19kb2NfX30sCiAjZW5kaWYKKyAgICB7ImNwdV9jb3VudCIsIChQeUNGdW5jdGlvbilwb3NpeF9jcHVfY291bnQsCisgICAgICAgICAgICAgICAgICBNRVRIX05PQVJHUywgcG9zaXhfY3B1X2NvdW50X19kb2NfX30sCisgICAgeyJnZXRfaW5oZXJpdGFibGUiLCBwb3NpeF9nZXRfaW5oZXJpdGFibGUsIE1FVEhfVkFSQVJHUywgZ2V0X2luaGVyaXRhYmxlX19kb2NfX30sCisgICAgeyJzZXRfaW5oZXJpdGFibGUiLCBwb3NpeF9zZXRfaW5oZXJpdGFibGUsIE1FVEhfVkFSQVJHUywgc2V0X2luaGVyaXRhYmxlX19kb2NfX30sCisjaWZkZWYgTVNfV0lORE9XUworICAgIHsiZ2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsIHBvc2l4X2dldF9oYW5kbGVfaW5oZXJpdGFibGUsCisgICAgIE1FVEhfVkFSQVJHUywgZ2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX199LAorICAgIHsic2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsIHBvc2l4X3NldF9oYW5kbGVfaW5oZXJpdGFibGUsCisgICAgIE1FVEhfVkFSQVJHUywgc2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX199LAorI2VuZGlmCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCiAKLXN0YXRpYyBpbnQKLWlucyhQeU9iamVjdCAqbW9kdWxlLCBjaGFyICpzeW1ib2wsIGxvbmcgdmFsdWUpCi17Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG1vZHVsZSwgc3ltYm9sLCB2YWx1ZSk7Ci19Ci0KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotLyogSW5zZXJ0IFBsYXRmb3JtLVNwZWNpZmljIENvbnN0YW50IFZhbHVlcyAoU3RyaW5ncyAmIE51bWJlcnMpIG9mIENvbW1vbiBVc2UgKi8KLXN0YXRpYyBpbnQgaW5zZXJ0dmFsdWVzKFB5T2JqZWN0ICptb2R1bGUpCi17Ci0gICAgQVBJUkVUICAgIHJjOwotICAgIFVMT05HICAgICB2YWx1ZXNbUVNWX01BWCsxXTsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBjaGFyICAgICAqdmVyLCB0bXBbNTBdOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJjID0gRG9zUXVlcnlTeXNJbmZvKDFMLCBRU1ZfTUFYLCAmdmFsdWVzWzFdLCBzaXplb2YoVUxPTkcpICogUVNWX01BWCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGlmIChyYyAhPSBOT19FUlJPUikgewotICAgICAgICBvczJfZXJyb3IocmMpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKGlucyhtb2R1bGUsICJtZW1pbnN0YWxsZWQiLCB2YWx1ZXNbUVNWX1RPVFBIWVNNRU1dKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAibWVta2VybmVsIiwgICAgdmFsdWVzW1FTVl9UT1RSRVNNRU1dKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAibWVtdmlydHVhbCIsICAgdmFsdWVzW1FTVl9UT1RBVkFJTE1FTV0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtYXhwYXRobGVuIiwgICB2YWx1ZXNbUVNWX01BWF9QQVRIX0xFTkdUSF0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtYXhuYW1lbGVuIiwgICB2YWx1ZXNbUVNWX01BWF9DT01QX0xFTkdUSF0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJyZXZpc2lvbiIsICAgICB2YWx1ZXNbUVNWX1ZFUlNJT05fUkVWSVNJT05dKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAidGltZXNsaWNlIiwgICAgdmFsdWVzW1FTVl9NSU5fU0xJQ0VdKSkgcmV0dXJuIC0xOwotCi0gICAgc3dpdGNoICh2YWx1ZXNbUVNWX1ZFUlNJT05fTUlOT1JdKSB7Ci0gICAgY2FzZSAwOiAgdmVyID0gIjIuMDAiOyBicmVhazsKLSAgICBjYXNlIDEwOiB2ZXIgPSAiMi4xMCI7IGJyZWFrOwotICAgIGNhc2UgMTE6IHZlciA9ICIyLjExIjsgYnJlYWs7Ci0gICAgY2FzZSAzMDogdmVyID0gIjMuMDAiOyBicmVhazsKLSAgICBjYXNlIDQwOiB2ZXIgPSAiNC4wMCI7IGJyZWFrOwotICAgIGNhc2UgNTA6IHZlciA9ICI1LjAwIjsgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUHlPU19zbnByaW50Zih0bXAsIHNpemVvZih0bXApLAotICAgICAgICAgICAgICAgICAgICAgICIlZC0lZCIsIHZhbHVlc1tRU1ZfVkVSU0lPTl9NQUpPUl0sCi0gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW1FTVl9WRVJTSU9OX01JTk9SXSk7Ci0gICAgICAgIHZlciA9ICZ0bXBbMF07Ci0gICAgfQotCi0gICAgLyogQWRkIEluZGljYXRvciBvZiB0aGUgVmVyc2lvbiBvZiB0aGUgT3BlcmF0aW5nIFN5c3RlbSAqLwotICAgIGlmIChQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtb2R1bGUsICJ2ZXJzaW9uIiwgdG1wKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIC8qIEFkZCBJbmRpY2F0b3Igb2YgV2hpY2ggRHJpdmUgd2FzIFVzZWQgdG8gQm9vdCB0aGUgU3lzdGVtICovCi0gICAgdG1wWzBdID0gJ0EnICsgdmFsdWVzW1FTVl9CT09UX0RSSVZFXSAtIDE7Ci0gICAgdG1wWzFdID0gJzonOwotICAgIHRtcFsyXSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobW9kdWxlLCAiYm9vdGRyaXZlIiwgdG1wKTsKLX0KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChIQVZFX1NZTUxJTkspICYmIGRlZmluZWQoTVNfV0lORE9XUykKIHN0YXRpYyBpbnQKIGVuYWJsZV9zeW1saW5rKCkKQEAgLTExNTMxLDQwMSArMTE2NDQsNDEwIEBACiAjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NZTUxJTkspICYmIGRlZmluZWQoTVNfV0lORE9XUykgKi8KIAogc3RhdGljIGludAotYWxsX2lucyhQeU9iamVjdCAqZCkKK2FsbF9pbnMoUHlPYmplY3QgKm0pCiB7CiAjaWZkZWYgRl9PSwotICAgIGlmIChpbnMoZCwgIkZfT0siLCAobG9uZylGX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUl9PSwotICAgIGlmIChpbnMoZCwgIlJfT0siLCAobG9uZylSX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV19PSwotICAgIGlmIChpbnMoZCwgIldfT0siLCAobG9uZylXX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgWF9PSwotICAgIGlmIChpbnMoZCwgIlhfT0siLCAobG9uZylYX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTkdST1VQU19NQVgKLSAgICBpZiAoaW5zKGQsICJOR1JPVVBTX01BWCIsIChsb25nKU5HUk9VUFNfTUFYKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOR1JPVVBTX01BWCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFRNUF9NQVgKLSAgICBpZiAoaW5zKGQsICJUTVBfTUFYIiwgKGxvbmcpVE1QX01BWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVE1QX01BWCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdDT05USU5VRUQKLSAgICBpZiAoaW5zKGQsICJXQ09OVElOVUVEIiwgKGxvbmcpV0NPTlRJTlVFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV0NPTlRJTlVFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdOT0hBTkcKLSAgICBpZiAoaW5zKGQsICJXTk9IQU5HIiwgKGxvbmcpV05PSEFORykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV05PSEFORykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdVTlRSQUNFRAotICAgIGlmIChpbnMoZCwgIldVTlRSQUNFRCIsIChsb25nKVdVTlRSQUNFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV1VOVFJBQ0VEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19SRE9OTFkKLSAgICBpZiAoaW5zKGQsICJPX1JET05MWSIsIChsb25nKU9fUkRPTkxZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1JET05MWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fV1JPTkxZCi0gICAgaWYgKGlucyhkLCAiT19XUk9OTFkiLCAobG9uZylPX1dST05MWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19XUk9OTFkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JEV1IKLSAgICBpZiAoaW5zKGQsICJPX1JEV1IiLCAobG9uZylPX1JEV1IpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUkRXUikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTkRFTEFZCi0gICAgaWYgKGlucyhkLCAiT19OREVMQVkiLCAobG9uZylPX05ERUxBWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OREVMQVkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PTkJMT0NLCi0gICAgaWYgKGlucyhkLCAiT19OT05CTE9DSyIsIChsb25nKU9fTk9OQkxPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9OQkxPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0FQUEVORAotICAgIGlmIChpbnMoZCwgIk9fQVBQRU5EIiwgKGxvbmcpT19BUFBFTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQVBQRU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19EU1lOQwotICAgIGlmIChpbnMoZCwgIk9fRFNZTkMiLCAobG9uZylPX0RTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0RTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19SU1lOQwotICAgIGlmIChpbnMoZCwgIk9fUlNZTkMiLCAobG9uZylPX1JTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1JTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TWU5DCi0gICAgaWYgKGlucyhkLCAiT19TWU5DIiwgKGxvbmcpT19TWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1NZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PQ1RUWQotICAgIGlmIChpbnMoZCwgIk9fTk9DVFRZIiwgKGxvbmcpT19OT0NUVFkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9DVFRZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19DUkVBVAotICAgIGlmIChpbnMoZCwgIk9fQ1JFQVQiLCAobG9uZylPX0NSRUFUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0NSRUFUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19FWENMCi0gICAgaWYgKGlucyhkLCAiT19FWENMIiwgKGxvbmcpT19FWENMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0VYQ0wpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RSVU5DCi0gICAgaWYgKGlucyhkLCAiT19UUlVOQyIsIChsb25nKU9fVFJVTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVFJVTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0JJTkFSWQotICAgIGlmIChpbnMoZCwgIk9fQklOQVJZIiwgKGxvbmcpT19CSU5BUlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQklOQVJZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19URVhUCi0gICAgaWYgKGlucyhkLCAiT19URVhUIiwgKGxvbmcpT19URVhUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RFWFQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1hBVFRSCi0gICAgaWYgKGlucyhkLCAiT19YQVRUUiIsIChsb25nKU9fWEFUVFIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fWEFUVFIpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0xBUkdFRklMRQotICAgIGlmIChpbnMoZCwgIk9fTEFSR0VGSUxFIiwgKGxvbmcpT19MQVJHRUZJTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTEFSR0VGSUxFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TSExPQ0sKLSAgICBpZiAoaW5zKGQsICJPX1NITE9DSyIsIChsb25nKU9fU0hMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1NITE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRVhMT0NLCi0gICAgaWYgKGlucyhkLCAiT19FWExPQ0siLCAobG9uZylPX0VYTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19FWExPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0VYRUMKLSAgICBpZiAoaW5zKGQsICJPX0VYRUMiLCAobG9uZylPX0VYRUMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRVhFQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fU0VBUkNICi0gICAgaWYgKGlucyhkLCAiT19TRUFSQ0giLCAobG9uZylPX1NFQVJDSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19TRUFSQ0gpKSByZXR1cm4gLTE7CisjZW5kaWYKKyNpZmRlZiBPX1BBVEgKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19QQVRIKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19UVFlfSU5JVAotICAgIGlmIChpbnMoZCwgIk9fVFRZX0lOSVQiLCAobG9uZylPX1RUWV9JTklUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RUWV9JTklUKSkgcmV0dXJuIC0xOworI2VuZGlmCisjaWZkZWYgT19UTVBGSUxFCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVE1QRklMRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBSSU9fUFJPQ0VTUwotICAgIGlmIChpbnMoZCwgIlBSSU9fUFJPQ0VTUyIsIChsb25nKVBSSU9fUFJPQ0VTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUFJJT19QUk9DRVNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUFJJT19QR1JQCi0gICAgaWYgKGlucyhkLCAiUFJJT19QR1JQIiwgKGxvbmcpUFJJT19QR1JQKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQUklPX1BHUlApKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQUklPX1VTRVIKLSAgICBpZiAoaW5zKGQsICJQUklPX1VTRVIiLCAobG9uZylQUklPX1VTRVIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBSSU9fVVNFUikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQ0xPRVhFQwotICAgIGlmIChpbnMoZCwgIk9fQ0xPRVhFQyIsIChsb25nKU9fQ0xPRVhFQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19DTE9FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19BQ0NNT0RFCi0gICAgaWYgKGlucyhkLCAiT19BQ0NNT0RFIiwgKGxvbmcpT19BQ0NNT0RFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0FDQ01PREUpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogCiAjaWZkZWYgU0VFS19IT0xFCi0gICAgaWYgKGlucyhkLCAiU0VFS19IT0xFIiwgKGxvbmcpU0VFS19IT0xFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRUVLX0hPTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTRUVLX0RBVEEKLSAgICBpZiAoaW5zKGQsICJTRUVLX0RBVEEiLCAobG9uZylTRUVLX0RBVEEpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNFRUtfREFUQSkpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBNUyBXaW5kb3dzICovCiAjaWZkZWYgT19OT0lOSEVSSVQKICAgICAvKiBEb24ndCBpbmhlcml0IGluIGNoaWxkIHByb2Nlc3Nlcy4gKi8KLSAgICBpZiAoaW5zKGQsICJPX05PSU5IRVJJVCIsIChsb25nKU9fTk9JTkhFUklUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PSU5IRVJJVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIF9PX1NIT1JUX0xJVkVECiAgICAgLyogT3B0aW1pemUgZm9yIHNob3J0IGxpZmUgKGtlZXAgaW4gbWVtb3J5KS4gKi8KICAgICAvKiBNUyBmb3Jnb3QgdG8gZGVmaW5lIHRoaXMgb25lIHdpdGggYSBub24tdW5kZXJzY29yZSBmb3JtIHRvby4gKi8KLSAgICBpZiAoaW5zKGQsICJPX1NIT1JUX0xJVkVEIiwgKGxvbmcpX09fU0hPUlRfTElWRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPX1NIT1JUX0xJVkVEIiwgX09fU0hPUlRfTElWRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RFTVBPUkFSWQogICAgIC8qIEF1dG9tYXRpY2FsbHkgZGVsZXRlIHdoZW4gbGFzdCBoYW5kbGUgaXMgY2xvc2VkLiAqLwotICAgIGlmIChpbnMoZCwgIk9fVEVNUE9SQVJZIiwgKGxvbmcpT19URU1QT1JBUlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVEVNUE9SQVJZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19SQU5ET00KICAgICAvKiBPcHRpbWl6ZSBmb3IgcmFuZG9tIGFjY2Vzcy4gKi8KLSAgICBpZiAoaW5zKGQsICJPX1JBTkRPTSIsIChsb25nKU9fUkFORE9NKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1JBTkRPTSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fU0VRVUVOVElBTAogICAgIC8qIE9wdGltaXplIGZvciBzZXF1ZW50aWFsIGFjY2Vzcy4gKi8KLSAgICBpZiAoaW5zKGQsICJPX1NFUVVFTlRJQUwiLCAobG9uZylPX1NFUVVFTlRJQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fU0VRVUVOVElBTCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBHTlUgZXh0ZW5zaW9ucy4gKi8KICNpZmRlZiBPX0FTWU5DCiAgICAgLyogU2VuZCBhIFNJR0lPIHNpZ25hbCB3aGVuZXZlciBpbnB1dCBvciBvdXRwdXQKICAgICAgICBiZWNvbWVzIGF2YWlsYWJsZSBvbiBmaWxlIGRlc2NyaXB0b3IgKi8KLSAgICBpZiAoaW5zKGQsICJPX0FTWU5DIiwgKGxvbmcpT19BU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19BU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRElSRUNUCiAgICAgLyogRGlyZWN0IGRpc2sgYWNjZXNzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fRElSRUNUIiwgKGxvbmcpT19ESVJFQ1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRElSRUNUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19ESVJFQ1RPUlkKICAgICAvKiBNdXN0IGJlIGEgZGlyZWN0b3J5LiAgICAgICovCi0gICAgaWYgKGlucyhkLCAiT19ESVJFQ1RPUlkiLCAobG9uZylPX0RJUkVDVE9SWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19ESVJFQ1RPUlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PRk9MTE9XCiAgICAgLyogRG8gbm90IGZvbGxvdyBsaW5rcy4gICAgICAqLwotICAgIGlmIChpbnMoZCwgIk9fTk9GT0xMT1ciLCAobG9uZylPX05PRk9MTE9XKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PRk9MTE9XKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT0xJTktTCiAgICAgLyogRmFpbHMgaWYgbGluayBjb3VudCBvZiB0aGUgbmFtZWQgZmlsZSBpcyBncmVhdGVyIHRoYW4gMSAqLwotICAgIGlmIChpbnMoZCwgIk9fTk9MSU5LUyIsIChsb25nKU9fTk9MSU5LUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0xJTktTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT0FUSU1FCiAgICAgLyogRG8gbm90IHVwZGF0ZSB0aGUgYWNjZXNzIHRpbWUuICovCi0gICAgaWYgKGlucyhkLCAiT19OT0FUSU1FIiwgKGxvbmcpT19OT0FUSU1FKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PQVRJTUUpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIC8qIFRoZXNlIGNvbWUgZnJvbSBzeXNleGl0cy5oICovCiAjaWZkZWYgRVhfT0sKLSAgICBpZiAoaW5zKGQsICJFWF9PSyIsIChsb25nKUVYX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9PSykpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9PSyAqLwogI2lmZGVmIEVYX1VTQUdFCi0gICAgaWYgKGlucyhkLCAiRVhfVVNBR0UiLCAobG9uZylFWF9VU0FHRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfVVNBR0UpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfVVNBR0UgKi8KICNpZmRlZiBFWF9EQVRBRVJSCi0gICAgaWYgKGlucyhkLCAiRVhfREFUQUVSUiIsIChsb25nKUVYX0RBVEFFUlIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0RBVEFFUlIpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfREFUQUVSUiAqLwogI2lmZGVmIEVYX05PSU5QVVQKLSAgICBpZiAoaW5zKGQsICJFWF9OT0lOUFVUIiwgKGxvbmcpRVhfTk9JTlBVVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfTk9JTlBVVCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT0lOUFVUICovCiAjaWZkZWYgRVhfTk9VU0VSCi0gICAgaWYgKGlucyhkLCAiRVhfTk9VU0VSIiwgKGxvbmcpRVhfTk9VU0VSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT1VTRVIpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9VU0VSICovCiAjaWZkZWYgRVhfTk9IT1NUCi0gICAgaWYgKGlucyhkLCAiRVhfTk9IT1NUIiwgKGxvbmcpRVhfTk9IT1NUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT0hPU1QpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9IT1NUICovCiAjaWZkZWYgRVhfVU5BVkFJTEFCTEUKLSAgICBpZiAoaW5zKGQsICJFWF9VTkFWQUlMQUJMRSIsIChsb25nKUVYX1VOQVZBSUxBQkxFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9VTkFWQUlMQUJMRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9VTkFWQUlMQUJMRSAqLwogI2lmZGVmIEVYX1NPRlRXQVJFCi0gICAgaWYgKGlucyhkLCAiRVhfU09GVFdBUkUiLCAobG9uZylFWF9TT0ZUV0FSRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfU09GVFdBUkUpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfU09GVFdBUkUgKi8KICNpZmRlZiBFWF9PU0VSUgotICAgIGlmIChpbnMoZCwgIkVYX09TRVJSIiwgKGxvbmcpRVhfT1NFUlIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX09TRVJSKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX09TRVJSICovCiAjaWZkZWYgRVhfT1NGSUxFCi0gICAgaWYgKGlucyhkLCAiRVhfT1NGSUxFIiwgKGxvbmcpRVhfT1NGSUxFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9PU0ZJTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfT1NGSUxFICovCiAjaWZkZWYgRVhfQ0FOVENSRUFUCi0gICAgaWYgKGlucyhkLCAiRVhfQ0FOVENSRUFUIiwgKGxvbmcpRVhfQ0FOVENSRUFUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9DQU5UQ1JFQVQpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfQ0FOVENSRUFUICovCiAjaWZkZWYgRVhfSU9FUlIKLSAgICBpZiAoaW5zKGQsICJFWF9JT0VSUiIsIChsb25nKUVYX0lPRVJSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9JT0VSUikpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9JT0VSUiAqLwogI2lmZGVmIEVYX1RFTVBGQUlMCi0gICAgaWYgKGlucyhkLCAiRVhfVEVNUEZBSUwiLCAobG9uZylFWF9URU1QRkFJTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfVEVNUEZBSUwpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfVEVNUEZBSUwgKi8KICNpZmRlZiBFWF9QUk9UT0NPTAotICAgIGlmIChpbnMoZCwgIkVYX1BST1RPQ09MIiwgKGxvbmcpRVhfUFJPVE9DT0wpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1BST1RPQ09MKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1BST1RPQ09MICovCiAjaWZkZWYgRVhfTk9QRVJNCi0gICAgaWYgKGlucyhkLCAiRVhfTk9QRVJNIiwgKGxvbmcpRVhfTk9QRVJNKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT1BFUk0pKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9QRVJNICovCiAjaWZkZWYgRVhfQ09ORklHCi0gICAgaWYgKGlucyhkLCAiRVhfQ09ORklHIiwgKGxvbmcpRVhfQ09ORklHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9DT05GSUcpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfQ09ORklHICovCiAjaWZkZWYgRVhfTk9URk9VTkQKLSAgICBpZiAoaW5zKGQsICJFWF9OT1RGT1VORCIsIChsb25nKUVYX05PVEZPVU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT1RGT1VORCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT1RGT1VORCAqLwogCiAgICAgLyogc3RhdHZmcyAqLwogI2lmZGVmIFNUX1JET05MWQotICAgIGlmIChpbnMoZCwgIlNUX1JET05MWSIsIChsb25nKVNUX1JET05MWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfUkRPTkxZKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIFNUX1JET05MWSAqLwogI2lmZGVmIFNUX05PU1VJRAotICAgIGlmIChpbnMoZCwgIlNUX05PU1VJRCIsIChsb25nKVNUX05PU1VJRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfTk9TVUlEKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIFNUX05PU1VJRCAqLwogCisgICAgICAgLyogR05VIGV4dGVuc2lvbnMgKi8KKyNpZmRlZiBTVF9OT0RFVgorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9OT0RFVikpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9OT0RFViAqLworI2lmZGVmIFNUX05PRVhFQworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9OT0VYRUMpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfTk9FWEVDICovCisjaWZkZWYgU1RfU1lOQ0hST05PVVMKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfU1lOQ0hST05PVVMpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfU1lOQ0hST05PVVMgKi8KKyNpZmRlZiBTVF9NQU5ETE9DSworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9NQU5ETE9DSykpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9NQU5ETE9DSyAqLworI2lmZGVmIFNUX1dSSVRFCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX1dSSVRFKSkgcmV0dXJuIC0xOworI2VuZGlmIC8qIFNUX1dSSVRFICovCisjaWZkZWYgU1RfQVBQRU5ECisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX0FQUEVORCkpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9BUFBFTkQgKi8KKyNpZmRlZiBTVF9OT0FUSU1FCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX05PQVRJTUUpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfTk9BVElNRSAqLworI2lmZGVmIFNUX05PRElSQVRJTUUKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfTk9ESVJBVElNRSkpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9OT0RJUkFUSU1FICovCisjaWZkZWYgU1RfUkVMQVRJTUUKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfUkVMQVRJTUUpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfUkVMQVRJTUUgKi8KKwogICAgIC8qIEZyZWVCU0Qgc2VuZGZpbGUoKSBjb25zdGFudHMgKi8KICNpZmRlZiBTRl9OT0RJU0tJTwotICAgIGlmIChpbnMoZCwgIlNGX05PRElTS0lPIiwgKGxvbmcpU0ZfTk9ESVNLSU8pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX05PRElTS0lPKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0ZfTU5PV0FJVAotICAgIGlmIChpbnMoZCwgIlNGX01OT1dBSVQiLCAobG9uZylTRl9NTk9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9NTk9XQUlUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0ZfU1lOQwotICAgIGlmIChpbnMoZCwgIlNGX1NZTkMiLCAobG9uZylTRl9TWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9TWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICAvKiBjb25zdGFudHMgZm9yIHBvc2l4X2ZhZHZpc2UgKi8KICNpZmRlZiBQT1NJWF9GQURWX05PUk1BTAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfTk9STUFMIiwgKGxvbmcpUE9TSVhfRkFEVl9OT1JNQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfTk9STUFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9TRVFVRU5USUFMCi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9TRVFVRU5USUFMIiwgKGxvbmcpUE9TSVhfRkFEVl9TRVFVRU5USUFMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX1NFUVVFTlRJQUwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX1JBTkRPTQotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfUkFORE9NIiwgKGxvbmcpUE9TSVhfRkFEVl9SQU5ET00pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfUkFORE9NKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9OT1JFVVNFCi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9OT1JFVVNFIiwgKGxvbmcpUE9TSVhfRkFEVl9OT1JFVVNFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX05PUkVVU0UpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX1dJTExORUVECi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9XSUxMTkVFRCIsIChsb25nKVBPU0lYX0ZBRFZfV0lMTE5FRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfV0lMTE5FRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX0RPTlRORUVECi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9ET05UTkVFRCIsIChsb25nKVBPU0lYX0ZBRFZfRE9OVE5FRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfRE9OVE5FRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIC8qIGNvbnN0YW50cyBmb3Igd2FpdGlkICovCiAjaWYgZGVmaW5lZChIQVZFX1NZU19XQUlUX0gpICYmIGRlZmluZWQoSEFWRV9XQUlUSUQpCi0gICAgaWYgKGlucyhkLCAiUF9QSUQiLCAobG9uZylQX1BJRCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1BHSUQiLCAobG9uZylQX1BHSUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9BTEwiLCAobG9uZylQX0FMTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUF9QSUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBfUEdJRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUF9BTEwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXRVhJVEVECi0gICAgaWYgKGlucyhkLCAiV0VYSVRFRCIsIChsb25nKVdFWElURUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdFWElURUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXTk9XQUlUCi0gICAgaWYgKGlucyhkLCAiV05PV0FJVCIsIChsb25nKVdOT1dBSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdOT1dBSVQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXU1RPUFBFRAotICAgIGlmIChpbnMoZCwgIldTVE9QUEVEIiwgKGxvbmcpV1NUT1BQRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdTVE9QUEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgQ0xEX0VYSVRFRAotICAgIGlmIChpbnMoZCwgIkNMRF9FWElURUQiLCAobG9uZylDTERfRVhJVEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDTERfRVhJVEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgQ0xEX0RVTVBFRAotICAgIGlmIChpbnMoZCwgIkNMRF9EVU1QRUQiLCAobG9uZylDTERfRFVNUEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDTERfRFVNUEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgQ0xEX1RSQVBQRUQKLSAgICBpZiAoaW5zKGQsICJDTERfVFJBUFBFRCIsIChsb25nKUNMRF9UUkFQUEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDTERfVFJBUFBFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9DT05USU5VRUQKLSAgICBpZiAoaW5zKGQsICJDTERfQ09OVElOVUVEIiwgKGxvbmcpQ0xEX0NPTlRJTlVFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX0NPTlRJTlVFRCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgLyogY29uc3RhbnRzIGZvciBsb2NrZiAqLwogI2lmZGVmIEZfTE9DSwotICAgIGlmIChpbnMoZCwgIkZfTE9DSyIsIChsb25nKUZfTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9MT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9UTE9DSwotICAgIGlmIChpbnMoZCwgIkZfVExPQ0siLCAobG9uZylGX1RMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1RMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9VTE9DSwotICAgIGlmIChpbnMoZCwgIkZfVUxPQ0siLCAobG9uZylGX1VMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1VMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9URVNUCi0gICAgaWYgKGlucyhkLCAiRl9URVNUIiwgKGxvbmcpRl9URVNUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1RFU1QpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfU1BBV05WCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoaW5zKGQsICJQX1dBSVQiLCAobG9uZylQX1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1dBSVQiLCAobG9uZylQX05PV0FJVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX09WRVJMQVkiLCAobG9uZylQX09WRVJMQVkpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERUJVRyIsIChsb25nKVBfREVCVUcpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9TRVNTSU9OIiwgKGxvbmcpUF9TRVNTSU9OKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVUQUNIIiwgKGxvbmcpUF9ERVRBQ0gpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9QTSIsIChsb25nKVBfUE0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERUZBVUxUIiwgKGxvbmcpUF9ERUZBVUxUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTUlOSU1JWkUiLCAobG9uZylQX01JTklNSVpFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTUFYSU1JWkUiLCAobG9uZylQX01BWElNSVpFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfRlVMTFNDUkVFTiIsIChsb25nKVBfRlVMTFNDUkVFTikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1dJTkRPV0VEIiwgKGxvbmcpUF9XSU5ET1dFRCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0ZPUkVHUk9VTkQiLCAobG9uZylQX0ZPUkVHUk9VTkQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9CQUNLR1JPVU5EIiwgKGxvbmcpUF9CQUNLR1JPVU5EKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9DTE9TRSIsIChsb25nKVBfTk9DTE9TRSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PU0VTU0lPTiIsIChsb25nKVBfTk9TRVNTSU9OKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfUVVPVEUiLCAobG9uZylQX1FVT1RFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfVElMREUiLCAobG9uZylQX1RJTERFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfVU5SRUxBVEVEIiwgKGxvbmcpUF9VTlJFTEFURUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERUJVR0RFU0MiLCAobG9uZylQX0RFQlVHREVTQykpIHJldHVybiAtMTsKLSNlbHNlCi0gICAgaWYgKGlucyhkLCAiUF9XQUlUIiwgKGxvbmcpX1BfV0FJVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PV0FJVCIsIChsb25nKV9QX05PV0FJVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX09WRVJMQVkiLCAobG9uZylfT0xEX1BfT1ZFUkxBWSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PV0FJVE8iLCAobG9uZylfUF9OT1dBSVRPKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVUQUNIIiwgKGxvbmcpX1BfREVUQUNIKSkgcmV0dXJuIC0xOwotI2VuZGlmCisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX1dBSVQiLCBfUF9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9OT1dBSVQiLCBfUF9OT1dBSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX09WRVJMQVkiLCBfT0xEX1BfT1ZFUkxBWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfTk9XQUlUTyIsIF9QX05PV0FJVE8pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX0RFVEFDSCIsIF9QX0RFVEFDSCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TQ0hFRF9ICi0gICAgaWYgKGlucyhkLCAiU0NIRURfT1RIRVIiLCAobG9uZylTQ0hFRF9PVEhFUikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9GSUZPIiwgKGxvbmcpU0NIRURfRklGTykpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9SUiIsIChsb25nKVNDSEVEX1JSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9PVEhFUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfRklGTykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfUlIpKSByZXR1cm4gLTE7CiAjaWZkZWYgU0NIRURfU1BPUkFESUMKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9TUE9SQURJQyIsIChsb25nKVNDSEVEX1NQT1JBRElDKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9TUE9SQURJQykgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfQkFUQ0gKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9CQVRDSCIsIChsb25nKVNDSEVEX0JBVENIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9CQVRDSCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0lETEUKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9JRExFIiwgKGxvbmcpU0NIRURfSURMRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfSURMRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX1JFU0VUX09OX0ZPUksKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9SRVNFVF9PTl9GT1JLIiwgKGxvbmcpU0NIRURfUkVTRVRfT05fRk9SSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfUkVTRVRfT05fRk9SSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX1NZUwotICAgIGlmIChpbnMoZCwgIlNDSEVEX1NZUyIsIChsb25nKVNDSEVEX1NZUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfU1lTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfSUEKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9JQSIsIChsb25nKVNDSEVEX0lBKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9JQSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0ZTUwotICAgIGlmIChpbnMoZCwgIlNDSEVEX0ZTUyIsIChsb25nKVNDSEVEX0ZTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfRlNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfRlgKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9GWCIsIChsb25nKVNDSEVEX0ZTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDSEVEX0ZYIiwgU0NIRURfRlNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIFVTRV9YQVRUUlMKLSAgICBpZiAoaW5zKGQsICJYQVRUUl9DUkVBVEUiLCAobG9uZylYQVRUUl9DUkVBVEUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiWEFUVFJfUkVQTEFDRSIsIChsb25nKVhBVFRSX1JFUExBQ0UpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiWEFUVFJfU0laRV9NQVgiLCAobG9uZylYQVRUUl9TSVpFX01BWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWEFUVFJfQ1JFQVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYQVRUUl9SRVBMQUNFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYQVRUUl9TSVpFX01BWCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgUlRMRF9MQVpZCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTEFaWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9MQVpZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT1cKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9OT1cpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTk9XKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9HTE9CQUwKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9HTE9CQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfR0xPQkFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9MT0NBTAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0xPQ0FMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0xPQ0FMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT0RFTEVURQotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX05PREVMRVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX05PREVMRVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT0xPQUQKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9OT0xPQUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTk9MT0FEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9ERUVQQklORAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0RFRVBCSU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0RFRVBCSU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIGlmIChpbnNlcnR2YWx1ZXMoZCkpIHJldHVybiAtMTsKLSNlbmRpZgogICAgIHJldHVybiAwOwogfQogCkBAIC0xMTkzNCwxMCArMTIwNTYsNiBAQAogI2RlZmluZSBJTklURlVOQyBQeUluaXRfbnQKICNkZWZpbmUgTU9ETkFNRSAibnQiCiAKLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0jZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9vczIKLSNkZWZpbmUgTU9ETkFNRSAib3MyIgotCiAjZWxzZQogI2RlZmluZSBJTklURlVOQyBQeUluaXRfcG9zaXgKICNkZWZpbmUgTU9ETkFNRSAicG9zaXgiCkBAIC0xMjEyNSwxOSArMTIyNDMsMjMgQEAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAjaWYgZGVmaW5lZChIQVZFX1dBSVRJRCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQogICAgICAgICB3YWl0aWRfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi53YWl0aWRfcmVzdWx0IjsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmV2FpdGlkUmVzdWx0VHlwZSwgJndhaXRpZF9yZXN1bHRfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmV2FpdGlkUmVzdWx0VHlwZSwgJndhaXRpZF9yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYKIAotICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIuc3RhdF9yZXN1bHQiOworICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLm5hbWUgPSAib3Muc3RhdF9yZXN1bHQiOyAvKiBzZWUgaXNzdWUgIzE5MjA5ICovCiAgICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MuZmllbGRzWzddLm5hbWUgPSBQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZDsKICAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5maWVsZHNbOF0ubmFtZSA9IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkOwogICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLmZpZWxkc1s5XS5uYW1lID0gUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQ7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRSZXN1bHRUeXBlLCAmc3RhdF9yZXN1bHRfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RhdFJlc3VsdFR5cGUsICZzdGF0X3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgc3RydWN0c2VxX25ldyA9IFN0YXRSZXN1bHRUeXBlLnRwX25ldzsKICAgICAgICAgU3RhdFJlc3VsdFR5cGUudHBfbmV3ID0gc3RhdHJlc3VsdF9uZXc7CiAKLSAgICAgICAgc3RhdHZmc19yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnN0YXR2ZnNfcmVzdWx0IjsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RhdFZGU1Jlc3VsdFR5cGUsICZzdGF0dmZzX3Jlc3VsdF9kZXNjKTsKKyAgICAgICAgc3RhdHZmc19yZXN1bHRfZGVzYy5uYW1lID0gIm9zLnN0YXR2ZnNfcmVzdWx0IjsgLyogc2VlIGlzc3VlICMxOTIwOSAqLworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRWRlNSZXN1bHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR2ZnNfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogI2lmZGVmIE5FRURfVElDS1NfUEVSX1NFQ09ORAogIyAgaWYgZGVmaW5lZChIQVZFX1NZU0NPTkYpICYmIGRlZmluZWQoX1NDX0NMS19UQ0spCiAgICAgICAgIHRpY2tzX3Blcl9zZWNvbmQgPSBzeXNjb25mKF9TQ19DTEtfVENLKTsKQEAgLTEyMTUwLDEyICsxMjI3MiwxNSBAQAogCiAjaWYgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFBBUkFNKSB8fCBkZWZpbmVkKEhBVkVfU0NIRURfU0VUU0NIRURVTEVSKQogICAgICAgICBzY2hlZF9wYXJhbV9kZXNjLm5hbWUgPSBNT0ROQU1FICIuc2NoZWRfcGFyYW0iOwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTY2hlZFBhcmFtVHlwZSwgJnNjaGVkX3BhcmFtX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlNjaGVkUGFyYW1UeXBlLCAmc2NoZWRfcGFyYW1fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIFNjaGVkUGFyYW1UeXBlLnRwX25ldyA9IHNjaGVkX3BhcmFtX25ldzsKICNlbmRpZgogCiAgICAgICAgIC8qIGluaXRpYWxpemUgVGVybWluYWxTaXplX2luZm8gKi8KLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVGVybWluYWxTaXplVHlwZSwgJlRlcm1pbmFsU2l6ZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZUZXJtaW5hbFNpemVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRlcm1pbmFsU2l6ZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjaWYgZGVmaW5lZChIQVZFX1dBSVRJRCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSAmV2FpdGlkUmVzdWx0VHlwZSk7CkBAIC0xMjE3MywxMSArMTIyOTgsMTMgQEAKICNlbmRpZgogCiAgICAgdGltZXNfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi50aW1lc19yZXN1bHQiOwotICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlRpbWVzUmVzdWx0VHlwZSwgJnRpbWVzX3Jlc3VsdF9kZXNjKTsKKyAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlRpbWVzUmVzdWx0VHlwZSwgJnRpbWVzX3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAidGltZXNfcmVzdWx0IiwgKFB5T2JqZWN0ICopJlRpbWVzUmVzdWx0VHlwZSk7CiAKICAgICB1bmFtZV9yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnVuYW1lX3Jlc3VsdCI7Ci0gICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVW5hbWVSZXN1bHRUeXBlLCAmdW5hbWVfcmVzdWx0X2Rlc2MpOworICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVW5hbWVSZXN1bHRUeXBlLCAmdW5hbWVfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJ1bmFtZV9yZXN1bHQiLCAoUHlPYmplY3QgKikmVW5hbWVSZXN1bHRUeXBlKTsKIAogI2lmZGVmIF9fQVBQTEVfXwpAQCAtMTIyNTUsNyArMTIzODIsNiBAQAogICAgIGluaXRpYWxpemVkID0gMTsKIAogICAgIHJldHVybiBtOwotCiB9CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wd2Rtb2R1bGUuYyBiL01vZHVsZXMvcHdkbW9kdWxlLmMKaW5kZXggMjg1ZmQ5Yy4uZWJiODcxMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wd2Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3B3ZG1vZHVsZS5jCkBAIC02OSwxOCArNjksMTAgQEAKICNkZWZpbmUgU0VUUyhpLHZhbCkgc2V0cyh2LCBpLCB2YWwpCiAKICAgICBTRVRTKHNldEluZGV4KyssIHAtPnB3X25hbWUpOwotI2lmZGVmIF9fVk1TCi0gICAgU0VUUyhzZXRJbmRleCsrLCAiIik7Ci0jZWxzZQogICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+cHdfcGFzc3dkKTsKLSNlbmRpZgogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgc2V0SW5kZXgrKywgX1B5TG9uZ19Gcm9tVWlkKHAtPnB3X3VpZCkpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgc2V0SW5kZXgrKywgX1B5TG9uZ19Gcm9tR2lkKHAtPnB3X2dpZCkpOwotI2lmZGVmIF9fVk1TCi0gICAgU0VUUyhzZXRJbmRleCsrLCAiIik7Ci0jZWxzZQogICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+cHdfZ2Vjb3MpOwotI2VuZGlmCiAgICAgU0VUUyhzZXRJbmRleCsrLCBwLT5wd19kaXIpOwogICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+cHdfc2hlbGwpOwogCkBAIC0xNjgsMTIgKzE2MCw4IEBACiAgICAgc3RydWN0IHBhc3N3ZCAqcDsKICAgICBpZiAoKGQgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmICgocCA9IGdldHB3dWlkKDApKSAhPSBOVUxMKSB7Ci0jZWxzZQogICAgIHNldHB3ZW50KCk7CiAgICAgd2hpbGUgKChwID0gZ2V0cHdlbnQoKSkgIT0gTlVMTCkgewotI2VuZGlmCiAgICAgICAgIFB5T2JqZWN0ICp2ID0gbWtwd2VudChwKTsKICAgICAgICAgaWYgKHYgPT0gTlVMTCB8fCBQeUxpc3RfQXBwZW5kKGQsIHYpICE9IDApIHsKICAgICAgICAgICAgIFB5X1hERUNSRUYodik7CkBAIC0yMjAsOCArMjA4LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFB3ZFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9wd2RfdHlwZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RQd2RUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9wd2RfdHlwZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaW5pdGlhbGl6ZWQgPSAxOwogICAgIH0KICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopICZTdHJ1Y3RQd2RUeXBlKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHlleHBhdC5jIGIvTW9kdWxlcy9weWV4cGF0LmMKaW5kZXggNDU2ODBhZS4uYTcxZWNjNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9weWV4cGF0LmMKKysrIGIvTW9kdWxlcy9weWV4cGF0LmMKQEAgLTEwLDYgKzEwLDkgQEAKIAogI2RlZmluZSBGSVhfVFJBQ0UKIAorc3RhdGljIFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgRXhwYXRNZW1vcnlIYW5kbGVyID0geworICAgIFB5T2JqZWN0X01hbGxvYywgUHlPYmplY3RfUmVhbGxvYywgUHlPYmplY3RfRnJlZX07CisKIGVudW0gSGFuZGxlclR5cGVzIHsKICAgICBTdGFydEVsZW1lbnQsCiAgICAgRW5kRWxlbWVudCwKQEAgLTQwMyw2ICs0MDYsMTAgQEAKIG15X0NoYXJhY3RlckRhdGFIYW5kbGVyKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBYTUxfQ2hhciAqZGF0YSwgaW50IGxlbikKIHsKICAgICB4bWxwYXJzZW9iamVjdCAqc2VsZiA9ICh4bWxwYXJzZW9iamVjdCAqKSB1c2VyRGF0YTsKKworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpCiAgICAgICAgIGNhbGxfY2hhcmFjdGVyX2hhbmRsZXIoc2VsZiwgZGF0YSwgbGVuKTsKICAgICBlbHNlIHsKQEAgLTQzNyw2ICs0NDQsOSBAQAogICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyLCAqcnYsICphcmdzOwogICAgICAgICBpbnQgaSwgbWF4OwogCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLyogU2V0IG1heCB0byB0aGUgbnVtYmVyIG9mIHNsb3RzIGZpbGxlZCBpbiBhdHRzW107IG1heC8yIGlzCkBAIC01MjAsNiArNTMwLDggQEAKICAgICBJTklUIFwKIFwKICAgICBpZiAoaGF2ZV9oYW5kbGVyKHNlbGYsIE5BTUUpKSB7IFwKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIFwKKyAgICAgICAgICAgIHJldHVybiBSRVRVUk47IFwKICAgICAgICAgaWYgKGZsdXNoX2NoYXJhY3Rlcl9idWZmZXIoc2VsZikgPCAwKSBcCiAgICAgICAgICAgICByZXR1cm4gUkVUVVJOOyBcCiAgICAgICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlIFBBUkFNX0ZPUk1BVCA7XApAQCAtNjM0LDYgKzY0Niw5IEBACiAgICAgICAgIFB5T2JqZWN0ICpydiA9IE5VTEw7CiAgICAgICAgIFB5T2JqZWN0ICptb2RlbG9iaiwgKm5hbWVvYmo7CiAKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgaWYgKGZsdXNoX2NoYXJhY3Rlcl9idWZmZXIoc2VsZikgPCAwKQogICAgICAgICAgICAgZ290byBmaW5hbGx5OwogICAgICAgICBtb2RlbG9iaiA9IGNvbnZfY29udGVudF9tb2RlbChtb2RlbCwgKGNvbnZfc3RyaW5nX3RvX3VuaWNvZGUpKTsKQEAgLTgxOSw3ICs4MzQsOCBAQAogICAgICAgICBzICs9IE1BWF9DSFVOS19TSVpFOwogICAgICAgICBzbGVuIC09IE1BWF9DSFVOS19TSVpFOwogICAgIH0KLSAgICByYyA9IFhNTF9QYXJzZShzZWxmLT5pdHNlbGYsIHMsIHNsZW4sIGlzRmluYWwpOworICAgIGFzc2VydChNQVhfQ0hVTktfU0laRSA8IElOVF9NQVggJiYgc2xlbiA8IElOVF9NQVgpOworICAgIHJjID0gWE1MX1BhcnNlKHNlbGYtPml0c2VsZiwgcywgKGludClzbGVuLCBpc0ZpbmFsKTsKIAogZG9uZToKICAgICBpZiAodmlldy5idWYgIT0gTlVMTCkKQEAgLTEwMDEsNyArMTAxNyw3IEBACiAgICAgUHlPYmplY3RfR0NfVHJhY2sobmV3X3BhcnNlcik7CiAKICAgICBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKLSAgICAgICAgbmV3X3BhcnNlci0+YnVmZmVyID0gbWFsbG9jKG5ld19wYXJzZXItPmJ1ZmZlcl9zaXplKTsKKyAgICAgICAgbmV3X3BhcnNlci0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKG5ld19wYXJzZXItPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgaWYgKG5ld19wYXJzZXItPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobmV3X3BhcnNlcik7CiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEwMTgsNyArMTAzNCw3IEBACiAgICAgZm9yIChpID0gMDsgaGFuZGxlcl9pbmZvW2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogICAgICAgICAvKiBkbyBub3RoaW5nICovOwogCi0gICAgbmV3X3BhcnNlci0+aGFuZGxlcnMgPSBtYWxsb2Moc2l6ZW9mKFB5T2JqZWN0ICopICogaSk7CisgICAgbmV3X3BhcnNlci0+aGFuZGxlcnMgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5T2JqZWN0ICopICogaSk7CiAgICAgaWYgKCFuZXdfcGFyc2VyLT5oYW5kbGVycykgewogICAgICAgICBQeV9ERUNSRUYobmV3X3BhcnNlcik7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMTEyNiwxNCArMTE0MiwxOSBAQAogICAgIHZvaWQgKmRhdGE7CiAgICAgdW5zaWduZWQgaW50IGtpbmQ7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisKICAgICBpZiAodGVtcGxhdGVfYnVmZmVyWzFdID09IDApIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgICAgICAgICAgdGVtcGxhdGVfYnVmZmVyW2ldID0gaTsKICAgICB9CiAKICAgICB1ID0gUHlVbmljb2RlX0RlY29kZSgoY2hhciopIHRlbXBsYXRlX2J1ZmZlciwgMjU2LCBuYW1lLCAicmVwbGFjZSIpOwotICAgIGlmICh1ID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHUpKQorICAgIGlmICh1ID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHUpKSB7CisgICAgICAgIFB5X1hERUNSRUYodSk7CiAgICAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworICAgIH0KIAogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh1KSAhPSAyNTYpIHsKICAgICAgICAgUHlfREVDUkVGKHUpOwpAQCAtMTE3OSwyOCArMTIwMCwyNiBAQAogICAgIHNlbGYtPmluX2NhbGxiYWNrID0gMDsKICAgICBzZWxmLT5uc19wcmVmaXhlcyA9IDA7CiAgICAgc2VsZi0+aGFuZGxlcnMgPSBOVUxMOwotICAgIGlmIChuYW1lc3BhY2Vfc2VwYXJhdG9yICE9IE5VTEwpIHsKLSAgICAgICAgc2VsZi0+aXRzZWxmID0gWE1MX1BhcnNlckNyZWF0ZU5TKGVuY29kaW5nLCAqbmFtZXNwYWNlX3NlcGFyYXRvcik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlKGVuY29kaW5nKTsKLSAgICB9Ci0jaWYgKChYTUxfTUFKT1JfVkVSU0lPTiA+PSAyKSAmJiAoWE1MX01JTk9SX1ZFUlNJT04gPj0gMSkpIHx8IGRlZmluZWQoWE1MX0hBU19TRVRfSEFTSF9TQUxUKQotICAgIC8qIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgdXBzdHJlYW0gaW4gbGliZXhwYXQgMi4xLjAuICBPdXIgZXhwYXQgY29weQotICAgICAqIGhhcyBhIGJhY2twb3J0IG9mIHRoaXMgZmVhdHVyZSB3aGVyZSB3ZSBhbHNvIGRlZmluZSBYTUxfSEFTX1NFVF9IQVNIX1NBTFQKLSAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbiBzdGlsbCB1c2UgaXQuICovCi0gICAgWE1MX1NldEhhc2hTYWx0KHNlbGYtPml0c2VsZiwKLSAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX1B5X0hhc2hTZWNyZXQucHJlZml4KTsKLSNlbmRpZgogICAgIHNlbGYtPmludGVybiA9IGludGVybjsKICAgICBQeV9YSU5DUkVGKHNlbGYtPmludGVybik7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soc2VsZik7CisKKyAgICAvKiBuYW1lc3BhY2Vfc2VwYXJhdG9yIGlzIGVpdGhlciBOVUxMIG9yIGNvbnRhaW5zIG9uZSBjaGFyICsgXDAgKi8KKyAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlX01NKGVuY29kaW5nLCAmRXhwYXRNZW1vcnlIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlX3NlcGFyYXRvcik7CiAgICAgaWYgKHNlbGYtPml0c2VsZiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiWE1MX1BhcnNlckNyZWF0ZSBmYWlsZWQiKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisjaWYgKChYTUxfTUFKT1JfVkVSU0lPTiA+PSAyKSAmJiAoWE1MX01JTk9SX1ZFUlNJT04gPj0gMSkpIHx8IGRlZmluZWQoWE1MX0hBU19TRVRfSEFTSF9TQUxUKQorICAgIC8qIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgdXBzdHJlYW0gaW4gbGliZXhwYXQgMi4xLjAuICBPdXIgZXhwYXQgY29weQorICAgICAqIGhhcyBhIGJhY2twb3J0IG9mIHRoaXMgZmVhdHVyZSB3aGVyZSB3ZSBhbHNvIGRlZmluZSBYTUxfSEFTX1NFVF9IQVNIX1NBTFQKKyAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbiBzdGlsbCB1c2UgaXQuICovCisgICAgWE1MX1NldEhhc2hTYWx0KHNlbGYtPml0c2VsZiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX1B5X0hhc2hTZWNyZXQuZXhwYXQuaGFzaHNhbHQpOworI2VuZGlmCiAgICAgWE1MX1NldFVzZXJEYXRhKHNlbGYtPml0c2VsZiwgKHZvaWQgKilzZWxmKTsKICAgICBYTUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlcihzZWxmLT5pdHNlbGYsCiAgICAgICAgICAgICAgICAgICAoWE1MX1Vua25vd25FbmNvZGluZ0hhbmRsZXIpIFB5VW5rbm93bkVuY29kaW5nSGFuZGxlciwgTlVMTCk7CkBAIC0xMjA4LDcgKzEyMjcsNyBAQAogICAgIGZvciAoaSA9IDA7IGhhbmRsZXJfaW5mb1tpXS5uYW1lICE9IE5VTEw7IGkrKykKICAgICAgICAgLyogZG8gbm90aGluZyAqLzsKIAotICAgIHNlbGYtPmhhbmRsZXJzID0gbWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOworICAgIHNlbGYtPmhhbmRsZXJzID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOwogICAgIGlmICghc2VsZi0+aGFuZGxlcnMpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEyMzUsMTEgKzEyNTQsMTEgQEAKICAgICAgICAgICAgIHNlbGYtPmhhbmRsZXJzW2ldID0gTlVMTDsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGVtcCk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZShzZWxmLT5oYW5kbGVycyk7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+aGFuZGxlcnMpOwogICAgICAgICBzZWxmLT5oYW5kbGVycyA9IE5VTEw7CiAgICAgfQogICAgIGlmIChzZWxmLT5idWZmZXIgIT0gTlVMTCkgewotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKICAgICB9CiAgICAgUHlfWERFQ1JFRihzZWxmLT5pbnRlcm4pOwpAQCAtMTQzOSw3ICsxNDU4LDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKGIpIHsKICAgICAgICAgICAgIGlmIChzZWxmLT5idWZmZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhzZWxmLT5idWZmZXJfc2l6ZSk7CisgICAgICAgICAgICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKHNlbGYtPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgICAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTQ1MCw3ICsxNDY5LDcgQEAKICAgICAgICAgZWxzZSBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CiAgICAgICAgICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTUxMiw5ICsxNTMxLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBmcmVlIGV4aXN0aW5nIGJ1ZmZlciAqLwotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgIH0KLSAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhuZXdfYnVmZmVyX3NpemUpOworICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKG5ld19idWZmZXJfc2l6ZSk7CiAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9weXRob24uYyBiL01vZHVsZXMvcHl0aG9uLmMKaW5kZXggZjc4MWQ5YS4uOTgxMWMwMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9weXRob24uYworKysgYi9Nb2R1bGVzL3B5dGhvbi5jCkBAIC0yMyw5ICsyMywxMiBAQAogICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyOwogICAgIGludCBpLCByZXM7CiAgICAgY2hhciAqb2xkbG9jOworI2lmZGVmIF9fRnJlZUJTRF9fCisgICAgZnBfZXhjZXB0X3QgbTsKKyNlbmRpZgogCi0gICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqKGFyZ2MrMSkpOwotICAgIGFyZ3ZfY29weTIgPSAod2NoYXJfdCAqKilQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSooYXJnYysxKSk7CisgICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiAoYXJnYysxKSk7CisgICAgYXJndl9jb3B5MiA9ICh3Y2hhcl90ICoqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCopICogKGFyZ2MrMSkpOwogICAgIGlmICghYXJndl9jb3B5IHx8ICFhcmd2X2NvcHkyKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CiAgICAgICAgIHJldHVybiAxOwpAQCAtMzcsMTcgKzQwLDIxIEBACiAgICAgICogZXhjZXB0aW9ucyBieSBkZWZhdWx0LiAgSGVyZSB3ZSBkaXNhYmxlIHRoZW0uCiAgICAgICovCiAjaWZkZWYgX19GcmVlQlNEX18KLSAgICBmcF9leGNlcHRfdCBtOwotCiAgICAgbSA9IGZwZ2V0bWFzaygpOwogICAgIGZwc2V0bWFzayhtICYgfkZQX1hfT0ZMKTsKICNlbmRpZgotICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisKKyAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKyAgICBpZiAoIW9sZGxvYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewogICAgICAgICBhcmd2X2NvcHlbaV0gPSBfUHlfY2hhcjJ3Y2hhcihhcmd2W2ldLCBOVUxMKTsKICAgICAgICAgaWYgKCFhcmd2X2NvcHlbaV0pIHsKLSAgICAgICAgICAgIGZyZWUob2xkbG9jKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmF0YWwgUHl0aG9uIGVycm9yOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAjJWlcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArIDEpOwpAQCAtNTgsMTMgKzY1LDEzIEBACiAgICAgYXJndl9jb3B5MlthcmdjXSA9IGFyZ3ZfY29weVthcmdjXSA9IE5VTEw7CiAKICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOwotICAgIGZyZWUob2xkbG9jKTsKKyAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CiAgICAgcmVzID0gUHlfTWFpbihhcmdjLCBhcmd2X2NvcHkpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgUHlNZW1fRnJlZShhcmd2X2NvcHkyW2ldKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyW2ldKTsKICAgICB9Ci0gICAgUHlNZW1fRnJlZShhcmd2X2NvcHkpOwotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5Mik7CisgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkpOworICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5Mik7CiAgICAgcmV0dXJuIHJlczsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZWFkbGluZS5jIGIvTW9kdWxlcy9yZWFkbGluZS5jCmluZGV4IDhmYWM1MjYuLjRiYmEwZGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVhZGxpbmUuYworKysgYi9Nb2R1bGVzL3JlYWRsaW5lLmMKQEAgLTYsNiArNiw3IEBACiAKIC8qIFN0YW5kYXJkIGRlZmluaXRpb25zICovCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTc2LDYgKzc3LDU1IEBACiAgICAoc2VlIGlzc3VlICMxNzI4OSBmb3IgdGhlIG1vdGl2YXRpb24pLiAqLwogc3RhdGljIGNoYXIgKmNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnM7CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgUHlPYmplY3QgKmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2s7CisgIFB5T2JqZWN0ICpzdGFydHVwX2hvb2s7CisgIFB5T2JqZWN0ICpwcmVfaW5wdXRfaG9vazsKKyAgUHlPYmplY3QgKmNvbXBsZXRlcjsKKyAgUHlPYmplY3QgKmJlZ2lkeDsKKyAgUHlPYmplY3QgKmVuZGlkeDsKK30gcmVhZGxpbmVzdGF0ZTsKKworCisjZGVmaW5lIHJlYWRsaW5lX3N0YXRlKG8pICgocmVhZGxpbmVzdGF0ZSAqKVB5TW9kdWxlX0dldFN0YXRlKG8pKQorCitzdGF0aWMgaW50CityZWFkbGluZV9jbGVhcihQeU9iamVjdCAqbSkKK3sKKyAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+c3RhcnR1cF9ob29rKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGVyKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5iZWdpZHgpOworICAgUHlfQ0xFQVIoc3RhdGUtPmVuZGlkeCk7CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZGxpbmVfdHJhdmVyc2UoUHlPYmplY3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5zdGFydHVwX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRlcik7CisgICAgUHlfVklTSVQoc3RhdGUtPmJlZ2lkeCk7CisgICAgUHlfVklTSVQoc3RhdGUtPmVuZGlkeCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWFkbGluZV9mcmVlKHZvaWQgKm0pCit7CisgICAgcmVhZGxpbmVfY2xlYXIoKFB5T2JqZWN0ICopbSk7Cit9CisKK3N0YXRpYyBQeU1vZHVsZURlZiByZWFkbGluZW1vZHVsZTsKKworI2RlZmluZSByZWFkbGluZXN0YXRlX2dsb2JhbCAoKHJlYWRsaW5lc3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShQeVN0YXRlX0ZpbmRNb2R1bGUoJnJlYWRsaW5lbW9kdWxlKSkpCisKKwogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc2VuZCBvbmUgbGluZSB0byByZWFkbGluZSdzIGluaXQgZmlsZSBwYXJzZXIgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTg2LDEyICsxMzYsMTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogTWFrZSBhIGNvcHkgLS0gcmxfcGFyc2VfYW5kX2JpbmQoKSBtb2RpZmllcyBpdHMgYXJndW1lbnQgKi8KICAgICAvKiBCZXJuYXJkIEhlcnpvZyAqLwotICAgIGNvcHkgPSBtYWxsb2MoMSArIHN0cmxlbihzKSk7CisgICAgY29weSA9IFB5TWVtX01hbGxvYygxICsgc3RybGVuKHMpKTsKICAgICBpZiAoY29weSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBzdHJjcHkoY29weSwgcyk7CiAgICAgcmxfcGFyc2VfYW5kX2JpbmQoY29weSk7Ci0gICAgZnJlZShjb3B5KTsgLyogRnJlZSB0aGUgY29weSAqLworICAgIFB5TWVtX0ZyZWUoY29weSk7IC8qIEZyZWUgdGhlIGNvcHkgKi8KICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMjUxLDIzICszMDEsMjEgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIHRvIHNwZWNpZnkgaG9vayBmdW5jdGlvbnMgaW4gUHl0aG9uICovCiAKLXN0YXRpYyBQeU9iamVjdCAqY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKnN0YXJ0dXBfaG9vayA9IE5VTEw7CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCi1zdGF0aWMgUHlPYmplY3QgKnByZV9pbnB1dF9ob29rID0gTlVMTDsKKwogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IHNldF9ob29rKCJjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rIiwKLSAgICAgICAgICAgICAgICAgICAgJmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOworICAgICAgICAgICAgICAgICAgICAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOwogI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSwogICAgIC8qIFdlIGNhbm5vdCBzZXQgdGhpcyBob29rIGdsb2JhbGx5LCBzaW5jZSBpdCByZXBsYWNlcyB0aGUKICAgICAgICBkZWZhdWx0IGNvbXBsZXRpb24gZGlzcGxheS4gKi8KICAgICBybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID0KLSAgICAgICAgY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA/CisgICAgICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID8KICNpZiBkZWZpbmVkKF9STF9GVU5DVElPTl9UWVBFREVGKQogICAgICAgICAocmxfY29tcGRpc3BfZnVuY190ICopb25fY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA6IDA7CiAjZWxzZQpAQCAtMjg4LDcgKzMzNiw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3N0YXJ0dXBfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHNldF9ob29rKCJzdGFydHVwX2hvb2siLCAmc3RhcnR1cF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInN0YXJ0dXBfaG9vayIsICZyZWFkbGluZXN0YXRlX2dsb2JhbC0+c3RhcnR1cF9ob29rLCBhcmdzKTsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19zZXRfc3RhcnR1cF9ob29rLApAQCAtMzA1LDcgKzM1Myw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3ByZV9pbnB1dF9ob29rKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnByZV9pbnB1dF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5wcmVfaW5wdXRfaG9vaywgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X3ByZV9pbnB1dF9ob29rLApAQCAtMzIwLDEwICszNjgsMTAgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc3BlY2lmeSBhIHdvcmQgY29tcGxldGVyIGluIFB5dGhvbiAqLwogCi1zdGF0aWMgUHlPYmplY3QgKmNvbXBsZXRlciA9IE5VTEw7CiAKLXN0YXRpYyBQeU9iamVjdCAqYmVnaWR4ID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqZW5kaWR4ID0gTlVMTDsKKworCisKIAogCiAvKiBHZXQgdGhlIGNvbXBsZXRpb24gdHlwZSBmb3IgdGhlIHNjb3BlIG9mIHRoZSB0YWItY29tcGxldGlvbiAqLwpAQCAtMzQzLDggKzM5MSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2JlZ2lkeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQogewotICAgIFB5X0lOQ1JFRihiZWdpZHgpOwotICAgIHJldHVybiBiZWdpZHg7CisgICAgUHlfSU5DUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHgpOworICAgIHJldHVybiByZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4OwogfQogCiBQeURvY19TVFJWQVIoZG9jX2dldF9iZWdpZHgsCkBAIC0zNTcsOCArNDA1LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfZW5kaWR4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmcpCiB7Ci0gICAgUHlfSU5DUkVGKGVuZGlkeCk7Ci0gICAgcmV0dXJuIGVuZGlkeDsKKyAgICBQeV9JTkNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmVuZGlkeCk7CisgICAgcmV0dXJuIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHg7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2VuZGlkeCwKQEAgLTUyMyw3ICs1NzEsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9jb21wbGV0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiBzZXRfaG9vaygiY29tcGxldGVyIiwgJmNvbXBsZXRlciwgYXJncyk7CisgICAgcmV0dXJuIHNldF9ob29rKCJjb21wbGV0ZXIiLCAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciwgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X2NvbXBsZXRlciwKQEAgLTUzNywxMSArNTg1LDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2NvbXBsZXRlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKLSAgICBpZiAoY29tcGxldGVyID09IE5VTEwpIHsKKyAgICBpZiAocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KLSAgICBQeV9JTkNSRUYoY29tcGxldGVyKTsKLSAgICByZXR1cm4gY29tcGxldGVyOworICAgIFB5X0lOQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyKTsKKyAgICByZXR1cm4gcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlcjsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19nZXRfY29tcGxldGVyLApAQCAtNzQ1LDkgKzc5Myw2IEBACiAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgaWYgKGZ1bmMgIT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdCAqcjsKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKLSNlbmRpZgogICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmMsIE5VTEwpOwogICAgICAgICBpZiAociA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTc2NCw5ICs4MDksNiBAQAogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBQeV9YREVDUkVGKHIpOwogICAgICAgZG9uZToKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC03NzksNyArODIxLDE1IEBACiBvbl9zdGFydHVwX2hvb2soKQogI2VuZGlmCiB7Ci0gICAgcmV0dXJuIG9uX2hvb2soc3RhcnR1cF9ob29rKTsKKyAgICBpbnQgcjsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisgICAgciA9IG9uX2hvb2socmVhZGxpbmVzdGF0ZV9nbG9iYWwtPnN0YXJ0dXBfaG9vayk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHI7CiB9CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCkBAIC03OTAsNyArODQwLDE1IEBACiBvbl9wcmVfaW5wdXRfaG9vaygpCiAjZW5kaWYKIHsKLSAgICByZXR1cm4gb25faG9vayhwcmVfaW5wdXRfaG9vayk7CisgICAgaW50IHI7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKyNlbmRpZgorICAgIHIgPSBvbl9ob29rKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5wcmVfaW5wdXRfaG9vayk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHI7CiB9CiAjZW5kaWYKIApAQCAtODE3LDcgKzg3NSw3IEBACiAgICAgICAgIGlmIChQeUxpc3RfU2V0SXRlbShtLCBpLCBzKSA9PSAtMSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vaywKKyAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNPaSIsIG1hdGNoZXNbMF0sIG0sIG1heF9sZW5ndGgpOwogCiAgICAgUHlfREVDUkVGKG0pOyBtPU5VTEw7CkBAIC04NDcsMTMgKzkwNSwxMyBAQAogb25fY29tcGxldGlvbihjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhdGUpCiB7CiAgICAgY2hhciAqcmVzdWx0ID0gTlVMTDsKLSAgICBpZiAoY29tcGxldGVyICE9IE5VTEwpIHsKKyAgICBpZiAocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciAhPSBOVUxMKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyOwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCiAgICAgICAgIHJsX2F0dGVtcHRlZF9jb21wbGV0aW9uX292ZXIgPSAxOwotICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGNvbXBsZXRlciwgInNpIiwgdGV4dCwgc3RhdGUpOworICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXIsICJzaSIsIHRleHQsIHN0YXRlKTsKICAgICAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIGlmIChyID09IFB5X05vbmUpIHsKQEAgLTg4NiwyNCArOTQ0LDMyIEBACiBzdGF0aWMgY2hhciAqKgogZmxleF9jb21wbGV0ZShjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiB7CisgICAgY2hhciAqKnJlc3VsdDsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCiAjaWZkZWYgSEFWRV9STF9DT01QTEVUSU9OX0FQUEVORF9DSEFSQUNURVIKICAgICBybF9jb21wbGV0aW9uX2FwcGVuZF9jaGFyYWN0ZXIgPSdcMCc7CiAjZW5kaWYKICNpZmRlZiBIQVZFX1JMX0NPTVBMRVRJT05fU1VQUFJFU1NfQVBQRU5ECiAgICAgcmxfY29tcGxldGlvbl9zdXBwcmVzc19hcHBlbmQgPSAwOwogI2VuZGlmCi0gICAgUHlfWERFQ1JFRihiZWdpZHgpOwotICAgIFB5X1hERUNSRUYoZW5kaWR4KTsKLSAgICBiZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0YXJ0KTsKLSAgICBlbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIGVuZCk7Ci0gICAgcmV0dXJuIGNvbXBsZXRpb25fbWF0Y2hlcyh0ZXh0LCAqb25fY29tcGxldGlvbik7CisgICAgUHlfWERFQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4KTsKKyAgICBQeV9YREVDUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHgpOworICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0YXJ0KTsKKyAgICByZWFkbGluZXN0YXRlX2dsb2JhbC0+ZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSBlbmQpOworICAgIHJlc3VsdCA9IGNvbXBsZXRpb25fbWF0Y2hlcyh0ZXh0LCAqb25fY29tcGxldGlvbik7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCiAvKiBIZWxwZXIgdG8gaW5pdGlhbGl6ZSBHTlUgcmVhZGxpbmUgcHJvcGVybHkuICovCiAKIHN0YXRpYyB2b2lkCi1zZXR1cF9yZWFkbGluZSh2b2lkKQorc2V0dXBfcmVhZGxpbmUocmVhZGxpbmVzdGF0ZSAqbW9kX3N0YXRlKQogewogI2lmZGVmIFNBVkVfTE9DQUxFCiAgICAgY2hhciAqc2F2ZWRfbG9jYWxlID0gc3RyZHVwKHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCkpOwpAQCAtOTMzLDEwICs5OTksNiBAQAogICAgIHVzaW5nX2hpc3RvcnkoKTsKIAogICAgIHJsX3JlYWRsaW5lX25hbWUgPSAicHl0aG9uIjsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIC8qIEFsbG93ICRpZiB0ZXJtPSBpbiAuaW5wdXRyYyB0byB3b3JrICovCi0gICAgcmxfdGVybWluYWxfbmFtZSA9IGdldGVudigiVEVSTSIpOwotI2VuZGlmCiAgICAgLyogRm9yY2UgcmViaW5kIG9mIFRBQiB0byBpbnNlcnQtdGFiICovCiAgICAgcmxfYmluZF9rZXkoJ1x0JywgcmxfaW5zZXJ0KTsKICAgICAvKiBCaW5kIGJvdGggRVNDLVRBQiBhbmQgRVNDLUVTQyB0byB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiAqLwpAQCAtOTU1LDggKzEwMTcsOCBAQAogICAgICAgICBzdHJkdXAoIiBcdFxuYH4hQCMkJV4mKigpLT0rW3tdfVxcfDs6J1wiLDw+Lz8iKTsKICAgICAgICAgLyogQWxsIG5vbmFscGhhbnVtcyBleGNlcHQgJy4nICovCiAKLSAgICBiZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoMEwpOwotICAgIGVuZGlkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7CisgICAgbW9kX3N0YXRlLT5iZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoMEwpOworICAgIG1vZF9zdGF0ZS0+ZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKICAgICAvKiBJbml0aWFsaXplIChhbGxvd3MgLmlucHV0cmMgdG8gb3ZlcnJpZGUpCiAgICAgICoKICAgICAgKiBYWFg6IEEgYnVnIGluIHRoZSByZWFkbGluZS0yLjIgbGlicmFyeSBjYXVzZXMgYSBtZW1vcnkgbGVhawpAQCAtOTg4LDcgKzEwNTAsNyBAQAogZXh0ZXJuIFB5VGhyZWFkU3RhdGUqIF9QeU9TX1JlYWRsaW5lVFN0YXRlOwogCiBzdGF0aWMgY2hhciAqCi1yZWFkbGluZV91bnRpbF9lbnRlcl9vcl9zaWduYWwoY2hhciAqcHJvbXB0LCBpbnQgKnNpZ25hbCkKK3JlYWRsaW5lX3VudGlsX2VudGVyX29yX3NpZ25hbChjb25zdCBjaGFyICpwcm9tcHQsIGludCAqc2lnbmFsKQogewogICAgIGNoYXIgKiBub3RfZG9uZV9yZWFkaW5nID0gIiI7CiAgICAgZmRfc2V0IHNlbGVjdHNldDsKQEAgLTEwNjMsNyArMTEyNSw3IEBACiAKIAogc3RhdGljIGNoYXIgKgotcmVhZGxpbmVfdW50aWxfZW50ZXJfb3Jfc2lnbmFsKGNoYXIgKnByb21wdCwgaW50ICpzaWduYWwpCityZWFkbGluZV91bnRpbF9lbnRlcl9vcl9zaWduYWwoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgKnNpZ25hbCkKIHsKICAgICBQeU9TX3NpZ2hhbmRsZXJfdCBvbGRfaW50aGFuZGxlcjsKICAgICBjaGFyICpwOwpAQCAtMTA5MCw3ICsxMTUyLDcgQEAKIAogCiBzdGF0aWMgY2hhciAqCi1jYWxsX3JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorY2FsbF9yZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNvbnN0IGNoYXIgKnByb21wdCkKIHsKICAgICBzaXplX3QgbjsKICAgICBjaGFyICpwLCAqcTsKQEAgLTExMjEsNyArMTE4Myw3IEBACiAKICAgICAvKiBXZSBnb3QgYW4gRU9GLCByZXR1cm4gYSBlbXB0eSBzdHJpbmcuICovCiAgICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICBwID0gUHlNZW1fTWFsbG9jKDEpOworICAgICAgICBwID0gUHlNZW1fUmF3TWFsbG9jKDEpOwogICAgICAgICBpZiAocCAhPSBOVUxMKQogICAgICAgICAgICAgKnAgPSAnXDAnOwogICAgICAgICBSRVNUT1JFX0xPQ0FMRShzYXZlZF9sb2NhbGUpCkBAIC0xMTQ5LDcgKzEyMTEsNyBAQAogICAgIC8qIENvcHkgdGhlIG1hbGxvYydlZCBidWZmZXIgaW50byBhIFB5TWVtX01hbGxvYydlZCBvbmUgYW5kCiAgICAgICAgcmVsZWFzZSB0aGUgb3JpZ2luYWwuICovCiAgICAgcSA9IHA7Ci0gICAgcCA9IFB5TWVtX01hbGxvYyhuKzIpOworICAgIHAgPSBQeU1lbV9SYXdNYWxsb2MobisyKTsKICAgICBpZiAocCAhPSBOVUxMKSB7CiAgICAgICAgIHN0cm5jcHkocCwgcSwgbik7CiAgICAgICAgIHBbbl0gPSAnXG4nOwpAQCAtMTE3NSwxMiArMTIzNywxMiBAQAogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKICAgICAicmVhZGxpbmUiLAogICAgIGRvY19tb2R1bGUsCi0gICAgLTEsCisgICAgc2l6ZW9mKHJlYWRsaW5lc3RhdGUpLAogICAgIHJlYWRsaW5lX21ldGhvZHMsCiAgICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTAorICAgIHJlYWRsaW5lX3RyYXZlcnNlLAorICAgIHJlYWRsaW5lX2NsZWFyLAorICAgIHJlYWRsaW5lX2ZyZWUKIH07CiAKIApAQCAtMTE4OCw2ICsxMjUwLDcgQEAKIFB5SW5pdF9yZWFkbGluZSh2b2lkKQogewogICAgIFB5T2JqZWN0ICptOworICAgIHJlYWRsaW5lc3RhdGUgKm1vZF9zdGF0ZTsKIAogI2lmZGVmIF9fQVBQTEVfXwogICAgIGlmIChzdHJuY21wKHJsX2xpYnJhcnlfdmVyc2lvbiwgbGliZWRpdF92ZXJzaW9uX3RhZywgc3RybGVuKGxpYmVkaXRfdmVyc2lvbl90YWcpKSA9PSAwKSB7CkBAIC0xMjA0LDcgKzEyNjcsOCBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgbW9kX3N0YXRlID0gKHJlYWRsaW5lc3RhdGUgKikgUHlNb2R1bGVfR2V0U3RhdGUobSk7CiAgICAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciA9IGNhbGxfcmVhZGxpbmU7Ci0gICAgc2V0dXBfcmVhZGxpbmUoKTsKKyAgICBzZXR1cF9yZWFkbGluZShtb2Rfc3RhdGUpOwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZXNvdXJjZS5jIGIvTW9kdWxlcy9yZXNvdXJjZS5jCmluZGV4IGIyOTRhOGMuLjNhMWNmMDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVzb3VyY2UuYworKysgYi9Nb2R1bGVzL3Jlc291cmNlLmMKQEAgLTEwNiw2ICsxMDYsNDQgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50CitweTJybGltaXQoUHlPYmplY3QgKmN1cm9iaiwgUHlPYmplY3QgKm1heG9iaiwgc3RydWN0IHJsaW1pdCAqcmxfb3V0KQoreworI2lmICFkZWZpbmVkKEhBVkVfTEFSR0VGSUxFX1NVUFBPUlQpCisgICAgcmxfb3V0LT5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmcoY3Vyb2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBybF9vdXQtPnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZyhtYXhvYmopOworICAgIGlmIChybF9vdXQtPnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworI2Vsc2UKKyAgICAvKiBUaGUgbGltaXRzIGFyZSBwcm9iYWJseSBiaWdnZXIgdGhhbiBhIGxvbmcgKi8KKyAgICBybF9vdXQtPnJsaW1fY3VyID0gUHlMb25nX0FzTG9uZ0xvbmcoY3Vyb2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBybF9vdXQtPnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZ0xvbmcobWF4b2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZgorCisgICAgcmxfb3V0LT5ybGltX2N1ciA9IHJsX291dC0+cmxpbV9jdXIgJiBSTElNX0lORklOSVRZOworICAgIHJsX291dC0+cmxpbV9tYXggPSBybF9vdXQtPnJsaW1fbWF4ICYgUkxJTV9JTkZJTklUWTsKKyAgICByZXR1cm4gMDsKKworfQorCitzdGF0aWMgUHlPYmplY3QqCitybGltaXQycHkoc3RydWN0IHJsaW1pdCBybCkKK3sKKyNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorICAgIGlmIChzaXplb2YocmwucmxpbV9jdXIpID4gc2l6ZW9mKGxvbmcpKSB7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fY3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX21heCk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgKGxvbmcpIHJsLnJsaW1fY3VyLCAobG9uZykgcmwucmxpbV9tYXgpOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgogcmVzb3VyY2VfZ2V0cmxpbWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTEyNiwxNSArMTY0LDcgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0KLSNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQotICAgIGlmIChzaXplb2YocmwucmxpbV9jdXIpID4gc2l6ZW9mKGxvbmcpKSB7Ci0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fY3VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX21heCk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgKGxvbmcpIHJsLnJsaW1fY3VyLCAobG9uZykgcmwucmxpbV9tYXgpOworICAgIHJldHVybiBybGltaXQycHkocmwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTY2LDI1ICsxOTYsMTAgQEAKICAgICBjdXJvYmogPSBQeVR1cGxlX0dFVF9JVEVNKGxpbWl0cywgMCk7CiAgICAgbWF4b2JqID0gUHlUdXBsZV9HRVRfSVRFTShsaW1pdHMsIDEpOwogCi0jaWYgIWRlZmluZWQoSEFWRV9MQVJHRUZJTEVfU1VQUE9SVCkKLSAgICBybC5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmcoY3Vyb2JqKTsKLSAgICBpZiAocmwucmxpbV9jdXIgPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgIGlmIChweTJybGltaXQoY3Vyb2JqLCBtYXhvYmosICZybCkgPCAwKSB7CiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgcmwucmxpbV9tYXggPSBQeUxvbmdfQXNMb25nKG1heG9iaik7Ci0gICAgaWYgKHJsLnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSNlbHNlCi0gICAgLyogVGhlIGxpbWl0cyBhcmUgcHJvYmFibHkgYmlnZ2VyIHRoYW4gYSBsb25nICovCi0gICAgcmwucmxpbV9jdXIgPSBQeUxvbmdfQXNMb25nTG9uZyhjdXJvYmopOwotICAgIGlmIChybC5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgcmwucmxpbV9tYXggPSBQeUxvbmdfQXNMb25nTG9uZyhtYXhvYmopOwotICAgIGlmIChybC5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0jZW5kaWYKKyAgICB9CiAKLSAgICBybC5ybGltX2N1ciA9IHJsLnJsaW1fY3VyICYgUkxJTV9JTkZJTklUWTsKLSAgICBybC5ybGltX21heCA9IHJsLnJsaW1fbWF4ICYgUkxJTV9JTkZJTklUWTsKICAgICBpZiAoc2V0cmxpbWl0KHJlc291cmNlLCAmcmwpID09IC0xKSB7CiAgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTIwNSw2ICsyMjAsNDggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorI2lmZGVmIEhBVkVfUFJMSU1JVAorc3RhdGljIFB5T2JqZWN0ICoKK3Jlc291cmNlX3BybGltaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHN0cnVjdCBybGltaXQgb2xkX2xpbWl0LCBuZXdfbGltaXQ7CisgICAgaW50IHJlc291cmNlLCByZXR2YWw7CisgICAgcGlkX3QgcGlkOworICAgIFB5T2JqZWN0ICpjdXJvYmo9TlVMTCwgKm1heG9iaj1OVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgIml8KE9PKTpwcmxpbWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpZCwgJnJlc291cmNlLCAmY3Vyb2JqLCAmbWF4b2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAocmVzb3VyY2UgPCAwIHx8IHJlc291cmNlID49IFJMSU1fTkxJTUlUUykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHJlc291cmNlIHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoY3Vyb2JqICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHB5MnJsaW1pdChjdXJvYmosIG1heG9iaiwgJm5ld19saW1pdCkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSBwcmxpbWl0KHBpZCwgcmVzb3VyY2UsICZuZXdfbGltaXQsICZvbGRfbGltaXQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dmFsID0gcHJsaW1pdChwaWQsIHJlc291cmNlLCBOVUxMLCAmb2xkX2xpbWl0KTsKKyAgICB9CisKKyAgICBpZiAocmV0dmFsID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50IGxpbWl0IGV4Y2VlZHMgbWF4aW11bSBsaW1pdCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcmxpbWl0MnB5KG9sZF9saW1pdCk7Cit9CisjZW5kaWYgLyogSEFWRV9QUkxJTUlUICovCisKIHN0YXRpYyBQeU9iamVjdCAqCiByZXNvdXJjZV9nZXRwYWdlc2l6ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKQEAgLTIyOSw2ICsyODYsOSBAQAogcmVzb3VyY2VfbWV0aG9kc1tdID0gewogICAgIHsiZ2V0cnVzYWdlIiwgICAgcmVzb3VyY2VfZ2V0cnVzYWdlLCAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRybGltaXQiLCAgICByZXNvdXJjZV9nZXRybGltaXQsICAgTUVUSF9WQVJBUkdTfSwKKyNpZmRlZiBIQVZFX1BSTElNSVQKKyAgICB7InBybGltaXQiLCAgICAgIHJlc291cmNlX3BybGltaXQsICAgICBNRVRIX1ZBUkFSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRybGltaXQiLCAgICByZXNvdXJjZV9zZXRybGltaXQsICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldHBhZ2VzaXplIiwgIHJlc291cmNlX2dldHBhZ2VzaXplLCBNRVRIX05PQVJHU30sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtMjYzLDgwICszMjMsMTE5IEBACiAgICAgLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KICAgICBQeV9JTkNSRUYoUHlFeGNfT1NFcnJvcik7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIFB5RXhjX09TRXJyb3IpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFJVc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9ydXNhZ2VfZGVzYyk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFJVc2FnZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3J1c2FnZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBQeV9JTkNSRUYoJlN0cnVjdFJVc2FnZVR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3J1c2FnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCopICZTdHJ1Y3RSVXNhZ2VUeXBlKTsKIAogICAgIC8qIGluc2VydCBjb25zdGFudHMgKi8KICNpZmRlZiBSTElNSVRfQ1BVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9DUFUiLCBSTElNSVRfQ1BVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfQ1BVKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0ZTSVpFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9GU0laRSIsIFJMSU1JVF9GU0laRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0ZTSVpFKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0RBVEEKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX0RBVEEiLCBSTElNSVRfREFUQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0RBVEEpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfU1RBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1NUQUNLIiwgUkxJTUlUX1NUQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU1RBQ0spOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfQ09SRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfQ09SRSIsIFJMSU1JVF9DT1JFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfQ09SRSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9OT0ZJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX05PRklMRSIsIFJMSU1JVF9OT0ZJTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9OT0ZJTEUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfT0ZJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX09GSUxFIiwgUkxJTUlUX09GSUxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfT0ZJTEUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfVk1FTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfVk1FTSIsIFJMSU1JVF9WTUVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfVk1FTSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9BUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfQVMiLCBSTElNSVRfQVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9BUyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9SU1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1JTUyIsIFJMSU1JVF9SU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SU1MpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfTlBST0MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX05QUk9DIiwgUkxJTUlUX05QUk9DKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTlBST0MpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfTUVNTE9DSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfTUVNTE9DSyIsIFJMSU1JVF9NRU1MT0NLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTUVNTE9DSyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9TQlNJWkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1NCU0laRSIsIFJMSU1JVF9TQlNJWkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TQlNJWkUpOwogI2VuZGlmCiAKKy8qIExpbnV4IHNwZWNpZmljICovCisjaWZkZWYgUkxJTUlUX01TR1FVRVVFCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX01TR1FVRVVFKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX05JQ0UKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTklDRSk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9SVFBSSU8KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfUlRQUklPKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX1JUVElNRQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SVFRJTUUpOworI2VuZGlmCisKKyNpZmRlZiBSTElNSVRfU0lHUEVORElORworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TSUdQRU5ESU5HKTsKKyNlbmRpZgorCisvKiB0YXJnZXQgKi8KICNpZmRlZiBSVVNBR0VfU0VMRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfU0VMRiIsIFJVU0FHRV9TRUxGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVVNBR0VfU0VMRik7CiAjZW5kaWYKIAogI2lmZGVmIFJVU0FHRV9DSElMRFJFTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfQ0hJTERSRU4iLCBSVVNBR0VfQ0hJTERSRU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9DSElMRFJFTik7CiAjZW5kaWYKIAogI2lmZGVmIFJVU0FHRV9CT1RICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9CT1RIIiwgUlVTQUdFX0JPVEgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9CT1RIKTsKICNlbmRpZgogCiAjaWZkZWYgUlVTQUdFX1RIUkVBRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfVEhSRUFEIiwgUlVTQUdFX1RIUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlVTQUdFX1RIUkVBRCk7CisjZW5kaWYKKworLyogRnJlZUJTRCBzcGVjaWZpYyAqLworCisjaWZkZWYgUkxJTUlUX1NXQVAKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU1dBUCk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9TQlNJWkUKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU0JTSVpFKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX05QVFMKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTlBUUyk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jIGIvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYwppbmRleCA5NTJhMDkxLi4wYjExYTAxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKQEAgLTQ3LDE5ICs0NywxMSBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHV0aWxzLmg+Ci0jZW5kaWYKLQogI2lmZGVmIE1TX1dJTkRPV1MKICMgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCiAjICBpbmNsdWRlIDx3aW5zb2NrLmg+CiAjZWxzZQogIyAgZGVmaW5lIFNPQ0tFVCBpbnQKLSMgIGlmIGRlZmluZWQoX19WTVMpCi0jICAgIGluY2x1ZGUgPHNvY2tldC5oPgotIyAgZW5kaWYKICNlbmRpZgogCiAvKiBsaXN0IG9mIFB5dGhvbiBvYmplY3RzIGFuZCB0aGVpciBmaWxlIGRlc2NyaXB0b3IgKi8KQEAgLTMwMyw5ICsyOTUsOSBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXQgPSBQeVR1cGxlX1BhY2soMywgaWZkbGlzdCwgb2ZkbGlzdCwgZWZkbGlzdCk7CiAKLSAgICAgICAgUHlfREVDUkVGKGlmZGxpc3QpOwotICAgICAgICBQeV9ERUNSRUYob2ZkbGlzdCk7Ci0gICAgICAgIFB5X0RFQ1JFRihlZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihpZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihvZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihlZmRsaXN0KTsKICAgICB9CiAKICAgZmluYWxseToKQEAgLTcwNSw2ICs2OTcsMTMgQEAKIAogc3RhdGljIFB5VHlwZU9iamVjdCBkZXZwb2xsX1R5cGU7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkZXZwb2xsX2Vycl9jbG9zZWQodm9pZCkKK3sKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGRldnBvbGwgb2JqZWN0Iik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgZGV2cG9sbF9mbHVzaChkZXZwb2xsT2JqZWN0ICpzZWxmKQogewogICAgIGludCBzaXplLCBuOwpAQCAtNzQ2LDYgKzc0NSw5IEBACiAgICAgaW50IGZkOwogICAgIHVuc2lnbmVkIHNob3J0IGV2ZW50cyA9IFBPTExJTiB8IFBPTExQUkkgfCBQT0xMT1VUOwogCisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TyY6cmVnaXN0ZXIiLCAmbywgdXNob3J0X2NvbnZlcnRlciwgJmV2ZW50cykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC04MDksNiArODExLDkgQEAKIHsKICAgICBpbnQgZmQ7CiAKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKwogICAgIGZkID0gUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvciggbyApOwogICAgIGlmIChmZCA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04MzgsNiArODQzLDkgQEAKICAgICBsb25nIHRpbWVvdXQ7CiAgICAgUHlPYmplY3QgKnZhbHVlLCAqbnVtMSwgKm51bTI7CiAKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKwogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInBvbGwiLCAwLCAxLCAmdG91dCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtOTE2LDYgKzkyNCw2MCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50CitkZXZwb2xsX2ludGVybmFsX2Nsb3NlKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgaW50IHNhdmVfZXJybm8gPSAwOworICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsID49IDApIHsKKyAgICAgICAgaW50IGZkID0gc2VsZi0+ZmRfZGV2cG9sbDsKKyAgICAgICAgc2VsZi0+ZmRfZGV2cG9sbCA9IC0xOworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGlmIChjbG9zZShmZCkgPCAwKQorICAgICAgICAgICAgc2F2ZV9lcnJubyA9IGVycm5vOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0KKyAgICByZXR1cm4gc2F2ZV9lcnJubzsKK30KKworc3RhdGljIFB5T2JqZWN0KgorZGV2cG9sbF9jbG9zZShkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGVycm5vID0gZGV2cG9sbF9pbnRlcm5hbF9jbG9zZShzZWxmKTsKKyAgICBpZiAoZXJybm8gPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoZGV2cG9sbF9jbG9zZV9kb2MsCisiY2xvc2UoKSAtPiBOb25lXG5cCitcblwKK0Nsb3NlIHRoZSBkZXZwb2xsIGZpbGUgZGVzY3JpcHRvci4gRnVydGhlciBvcGVyYXRpb25zIG9uIHRoZSBkZXZwb2xsXG5cCitvYmplY3Qgd2lsbCByYWlzZSBhbiBleGNlcHRpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK2RldnBvbGxfZ2V0X2Nsb3NlZChkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fRkFMU0U7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2RldnBvbGxfZmlsZW5vKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT5mZF9kZXZwb2xsKTsKK30KKworUHlEb2NfU1RSVkFSKGRldnBvbGxfZmlsZW5vX2RvYywKKyJmaWxlbm8oKSAtPiBpbnRcblwKK1xuXAorUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IuIik7CisKIHN0YXRpYyBQeU1ldGhvZERlZiBkZXZwb2xsX21ldGhvZHNbXSA9IHsKICAgICB7InJlZ2lzdGVyIiwgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX3JlZ2lzdGVyLAogICAgICBNRVRIX1ZBUkFSR1MsICBkZXZwb2xsX3JlZ2lzdGVyX2RvY30sCkBAIC05MjUsOSArOTg3LDE5IEBACiAgICAgIE1FVEhfTywgICAgICAgIGRldnBvbGxfdW5yZWdpc3Rlcl9kb2N9LAogICAgIHsicG9sbCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRldnBvbGxfcG9sbCwKICAgICAgTUVUSF9WQVJBUkdTLCAgZGV2cG9sbF9wb2xsX2RvY30sCisgICAgeyJjbG9zZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGV2cG9sbF9jbG9zZSwgICAgTUVUSF9OT0FSR1MsCisgICAgIGRldnBvbGxfY2xvc2VfZG9jfSwKKyAgICB7ImZpbGVubyIsICAgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX2ZpbGVubywgICAgTUVUSF9OT0FSR1MsCisgICAgIGRldnBvbGxfZmlsZW5vX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKK3N0YXRpYyBQeUdldFNldERlZiBkZXZwb2xsX2dldHNldGxpc3RbXSA9IHsKKyAgICB7ImNsb3NlZCIsIChnZXR0ZXIpZGV2cG9sbF9nZXRfY2xvc2VkLCBOVUxMLAorICAgICAiVHJ1ZSBpZiB0aGUgZGV2cG9sbCBvYmplY3QgaXMgY2xvc2VkIn0sCisgICAgezB9LAorfTsKKwogc3RhdGljIGRldnBvbGxPYmplY3QgKgogbmV3RGV2UG9sbE9iamVjdCh2b2lkKQogewpAQCAtOTQ1LDcgKzEwMTcsNyBAQAogICAgICovCiAgICAgbGltaXRfcmVzdWx0ID0gZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZsaW1pdCk7CiAgICAgaWYgKGxpbWl0X3Jlc3VsdCAhPSAtMSkKLSAgICAgICAgZmRfZGV2cG9sbCA9IG9wZW4oIi9kZXYvcG9sbCIsIE9fUkRXUik7CisgICAgICAgIGZkX2RldnBvbGwgPSBfUHlfb3BlbigiL2Rldi9wb2xsIiwgT19SRFdSKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGxpbWl0X3Jlc3VsdCA9PSAtMSkgewpAQCAtOTgxLDEyICsxMDUzLDggQEAKIHN0YXRpYyB2b2lkCiBkZXZwb2xsX2RlYWxsb2MoZGV2cG9sbE9iamVjdCAqc2VsZikKIHsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgY2xvc2Uoc2VsZi0+ZmRfZGV2cG9sbCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQorICAgICh2b2lkKWRldnBvbGxfaW50ZXJuYWxfY2xvc2Uoc2VsZik7CiAgICAgUHlNZW1fREVMKHNlbGYtPmZkcyk7Ci0KICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKQEAgLTEwMjIsNiArMTA5MCw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwogICAgIGRldnBvbGxfbWV0aG9kcywgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgZGV2cG9sbF9nZXRzZXRsaXN0LCAgICAgICAgIC8qIHRwX2dldHNldCAqLwogfTsKICNlbmRpZiAgLyogSEFWRV9TWVNfREVWUE9MTF9IICovCiAKQEAgLTExMDUsNyArMTE3NSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcHllcG9sbF9lcnJfY2xvc2VkKHZvaWQpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBlcG9sbCBmZCIpOworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZXBvbGwgb2JqZWN0Iik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTExMzcsNiArMTIwNyw3IEBACiAgICAgaWYgKGZkID09IC0xKSB7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZmRlZiBIQVZFX0VQT0xMX0NSRUFURTEKKyAgICAgICAgZmxhZ3MgfD0gRVBPTExfQ0xPRVhFQzsKICAgICAgICAgaWYgKGZsYWdzKQogICAgICAgICAgICAgc2VsZi0+ZXBmZCA9IGVwb2xsX2NyZWF0ZTEoZmxhZ3MpOwogICAgICAgICBlbHNlCkBAIC0xMTUyLDYgKzEyMjMsMTQgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyNpZm5kZWYgSEFWRV9FUE9MTF9DUkVBVEUxCisgICAgaWYgKGZkID09IC0xICYmIF9QeV9zZXRfaW5oZXJpdGFibGUoc2VsZi0+ZXBmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKIH0KIApAQCAtMTI1MSwxNiArMTMzMCwxNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgY2FzZSBFUE9MTF9DVExfQUREOgotICAgICAgICBjYXNlIEVQT0xMX0NUTF9NT0Q6CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgRVBPTExfQ1RMX0FERDoKKyAgICBjYXNlIEVQT0xMX0NUTF9NT0Q6CiAgICAgICAgIGV2LmV2ZW50cyA9IGV2ZW50czsKICAgICAgICAgZXYuZGF0YS5mZCA9IGZkOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHJlc3VsdCA9IGVwb2xsX2N0bChlcGZkLCBvcCwgZmQsICZldik7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVQT0xMX0NUTF9ERUw6CisgICAgY2FzZSBFUE9MTF9DVExfREVMOgogICAgICAgICAvKiBJbiBrZXJuZWwgdmVyc2lvbnMgYmVmb3JlIDIuNi45LCB0aGUgRVBPTExfQ1RMX0RFTAogICAgICAgICAgKiBvcGVyYXRpb24gcmVxdWlyZWQgYSBub24tTlVMTCBwb2ludGVyIGluIGV2ZW50LCBldmVuCiAgICAgICAgICAqIHRob3VnaCB0aGlzIGFyZ3VtZW50IGlzIGlnbm9yZWQuICovCkBAIC0xMjczLDcgKzEzNTIsNyBAQAogICAgICAgICB9CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAgICAgICAgIHJlc3VsdCA9IC0xOwogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICB9CkBAIC0xMzc4LDcgKzE0NTcsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHRpbWVvdXQgPSAoaW50KShkdGltZW91dCAqIDEwMDAuMCk7CisgICAgICAgIC8qIGVwb2xsX3dhaXQoKSBoYXMgYSByZXNvbHV0aW9uIG9mIDEgbWlsbGlzZWNvbmQsIHJvdW5kIGF3YXkgZnJvbSB6ZXJvCisgICAgICAgICAgIHRvIHdhaXQgKmF0IGxlYXN0KiBkdGltZW91dCBzZWNvbmRzLiAqLworICAgICAgICB0aW1lb3V0ID0gKGludCljZWlsKGR0aW1lb3V0ICogMTAwMC4wKTsKICAgICB9CiAKICAgICBpZiAobWF4ZXZlbnRzID09IC0xKSB7CkBAIC0xMzkzLDcgKzE0NzQsNiBAQAogCiAgICAgZXZzID0gUHlNZW1fTmV3KHN0cnVjdCBlcG9sbF9ldmVudCwgbWF4ZXZlbnRzKTsKICAgICBpZiAoZXZzID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNDMyLDYgKzE1MTIsMjQgQEAKIGluIHNlY29uZHMgKGFzIGZsb2F0KS4gLTEgbWFrZXMgcG9sbCB3YWl0IGluZGVmaW5pdGVseS5cblwKIFVwIHRvIG1heGV2ZW50cyBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4iKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK3B5ZXBvbGxfZW50ZXIocHlFcG9sbF9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGlmIChzZWxmLT5lcGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIHB5ZXBvbGxfZXJyX2Nsb3NlZCgpOworCisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorcHllcG9sbF9leGl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CisKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9jbG9zZSwgTlVMTCk7Cit9CisKIHN0YXRpYyBQeU1ldGhvZERlZiBweWVwb2xsX21ldGhvZHNbXSA9IHsKICAgICB7ImZyb21mZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX2Zyb21mZCwKICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9DTEFTUywgcHllcG9sbF9mcm9tZmRfZG9jfSwKQEAgLTE0NDcsNiArMTU0NSwxMCBAQAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAgICAgIHB5ZXBvbGxfdW5yZWdpc3Rlcl9kb2N9LAogICAgIHsicG9sbCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5ZXBvbGxfcG9sbCwKICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgICAgICBweWVwb2xsX3BvbGxfZG9jfSwKKyAgICB7Il9fZW50ZXJfXyIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcHllcG9sbF9lbnRlciwgICAgIE1FVEhfTk9BUkdTLAorICAgICBOVUxMfSwKKyAgICB7Il9fZXhpdF9fIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX2V4aXQsICAgICBNRVRIX1ZBUkFSR1MsCisgICAgIE5VTEx9LAogICAgIHtOVUxMLCAgICAgIE5VTEx9LAogfTsKIApAQCAtMTYwNCwxNyArMTcwNiwxNyBAQAogICoga2V2ZW50IGlzIG5vdCBzdGFuZGFyZCBhbmQgaXRzIG1lbWJlcnMgdmFyeSBhY3Jvc3MgQlNEcy4KICAqLwogI2lmICFkZWZpbmVkKF9fT3BlbkJTRF9fKQotIyAgIGRlZmluZSBJREVOVF9UWVBFCVRfVUlOVFBUUlQKLSMgICBkZWZpbmUgSURFTlRfQ0FTVAlQeV9pbnRwdHJfdAotIyAgIGRlZmluZSBEQVRBX1RZUEUJVF9JTlRQVFJUCisjICAgZGVmaW5lIElERU5UX1RZUEUgIFRfVUlOVFBUUlQKKyMgICBkZWZpbmUgSURFTlRfQ0FTVCAgUHlfaW50cHRyX3QKKyMgICBkZWZpbmUgREFUQV9UWVBFICAgVF9JTlRQVFJUCiAjICAgZGVmaW5lIERBVEFfRk1UX1VOSVQgSU5UUFRSVF9GTVRfVU5JVAotIyAgIGRlZmluZSBJREVOVF9Bc1R5cGUJUHlMb25nX0FzVWludHB0cl90CisjICAgZGVmaW5lIElERU5UX0FzVHlwZSBQeUxvbmdfQXNVaW50cHRyX3QKICNlbHNlCi0jICAgZGVmaW5lIElERU5UX1RZUEUJVF9VSU5UCi0jICAgZGVmaW5lIElERU5UX0NBU1QJaW50Ci0jICAgZGVmaW5lIERBVEFfVFlQRQlUX0lOVAorIyAgIGRlZmluZSBJREVOVF9UWVBFICBUX1VJTlQKKyMgICBkZWZpbmUgSURFTlRfQ0FTVCAgaW50CisjICAgZGVmaW5lIERBVEFfVFlQRSAgIFRfSU5UCiAjICAgZGVmaW5lIERBVEFfRk1UX1VOSVQgImkiCi0jICAgZGVmaW5lIElERU5UX0FzVHlwZQlQeUxvbmdfQXNVbnNpZ25lZExvbmcKKyMgICBkZWZpbmUgSURFTlRfQXNUeXBlIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZwogI2VuZGlmCiAKIC8qIFVuZm9ydHVuYXRlbHksIHdlIGNhbid0IHN0b3JlIHB5dGhvbiBvYmplY3RzIGluIHVkYXRhLCBiZWNhdXNlCkBAIC0xNjY2LDcgKzE3NjgsNyBAQAogCiAgICAgaWYgKFB5TG9uZ19DaGVjayhwZmQpCiAjaWYgSURFTlRfVFlQRSA9PSBUX1VJTlQKLQkmJiBQeUxvbmdfQXNVbnNpZ25lZExvbmcocGZkKSA8PSBVSU5UX01BWAorICAgICAgICAmJiBQeUxvbmdfQXNVbnNpZ25lZExvbmcocGZkKSA8PSBVSU5UX01BWAogI2VuZGlmCiAgICAgKSB7CiAgICAgICAgIHNlbGYtPmUuaWRlbnQgPSBJREVOVF9Bc1R5cGUocGZkKTsKQEAgLTE3MDgsMjIgKzE4MTAsMjIgQEAKICAgICB9CiAKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgUHlfRVE6CisgICAgY2FzZSBQeV9FUToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA9PSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfTkU6CisgICAgY2FzZSBQeV9ORToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCAhPSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfTEU6CisgICAgY2FzZSBQeV9MRToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8PSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfR0U6CisgICAgY2FzZSBQeV9HRToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA+PSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfTFQ6CisgICAgY2FzZSBQeV9MVDoKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8IDApOwogICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQeV9HVDoKKyAgICBjYXNlIFB5X0dUOgogICAgICAgICByZXN1bHQgPSAocmVzdWx0ID4gMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE3NzUsNyArMTg3Nyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgoga3F1ZXVlX3F1ZXVlX2Vycl9jbG9zZWQodm9pZCkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGtxdWV1ZSBmZCIpOworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQga3F1ZXVlIG9iamVjdCIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xODE3LDEzICsxOTE5LDE5IEBACiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisgICAgaWYgKGZkID09IC0xKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNlbGYtPmtxZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBrcXVldWVfcXVldWVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotCiAgICAgaWYgKChhcmdzICE9IE5VTEwgJiYgUHlPYmplY3RfU2l6ZShhcmdzKSkgfHwKICAgICAgICAgICAgICAgICAgICAgKGt3ZHMgIT0gTlVMTCAmJiBQeU9iamVjdF9TaXplKGt3ZHMpKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTIxNDMsNyArMjI1MSw3IEBACiB0aGF0IGFyZSByZWFkeS5cblwKIFxuXAogKioqIElNUE9SVEFOVCBOT1RJQ0UgKioqXG5cCi1PbiBXaW5kb3dzIGFuZCBPcGVuVk1TLCBvbmx5IHNvY2tldHMgYXJlIHN1cHBvcnRlZDsgb24gVW5peCwgYWxsIGZpbGVcblwKK09uIFdpbmRvd3Mgb25seSBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQ7IG9uIFVuaXgsIGFsbCBmaWxlXG5cCiBkZXNjcmlwdG9ycyBjYW4gYmUgdXNlZC4iKTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIHNlbGVjdF9tZXRob2RzW10gPSB7CkBAIC0yMTYxLDcgKzIyNjksNyBAQAogIlRoaXMgbW9kdWxlIHN1cHBvcnRzIGFzeW5jaHJvbm91cyBJL08gb24gbXVsdGlwbGUgZmlsZSBkZXNjcmlwdG9ycy5cblwKIFxuXAogKioqIElNUE9SVEFOVCBOT1RJQ0UgKioqXG5cCi1PbiBXaW5kb3dzIGFuZCBPcGVuVk1TLCBvbmx5IHNvY2tldHMgYXJlIHN1cHBvcnRlZDsgb24gVW5peCwgYWxsIGZpbGUgZGVzY3JpcHRvcnMuIik7CitPbiBXaW5kb3dzIG9ubHkgc29ja2V0cyBhcmUgc3VwcG9ydGVkOyBvbiBVbml4LCBhbGwgZmlsZSBkZXNjcmlwdG9ycy4iKTsKIAogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIHNlbGVjdG1vZHVsZSA9IHsKQEAgLTIxOTUsNyArMjMwMyw3IEBACiAjdW5kZWYgUElQRV9CVUYKICNkZWZpbmUgUElQRV9CVUYgNTEyCiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElQRV9CVUYiLCBQSVBFX0JVRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElQRV9CVUYpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBVkVfUE9MTCkgJiYgIWRlZmluZWQoSEFWRV9CUk9LRU5fUE9MTCkKQEAgLTIyMTAsMjcgKzIzMTgsMjcgQEAKICNlbmRpZgogICAgICAgICBpZiAoUHlUeXBlX1JlYWR5KCZwb2xsX1R5cGUpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTElOIiwgUE9MTElOKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExQUkkiLCBQT0xMUFJJKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExPVVQiLCBQT0xMT1VUKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExFUlIiLCBQT0xMRVJSKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExIVVAiLCBQT0xMSFVQKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExOVkFMIiwgUE9MTE5WQUwpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMSU4pOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMUFJJKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTE9VVCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExFUlIpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMSFVQKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTE5WQUwpOwogCiAjaWZkZWYgUE9MTFJETk9STQotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFJETk9STSIsIFBPTExSRE5PUk0pOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMUkROT1JNKTsKICNlbmRpZgogI2lmZGVmIFBPTExSREJBTkQKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExSREJBTkQiLCBQT0xMUkRCQU5EKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFJEQkFORCk7CiAjZW5kaWYKICNpZmRlZiBQT0xMV1JOT1JNCi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMV1JOT1JNIiwgUE9MTFdSTk9STSk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExXUk5PUk0pOwogI2VuZGlmCiAjaWZkZWYgUE9MTFdSQkFORAotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFdSQkFORCIsIFBPTExXUkJBTkQpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMV1JCQU5EKTsKICNlbmRpZgogI2lmZGVmIFBPTExNU0cKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExNU0ciLCBQT0xMTVNHKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTE1TRyk7CiAjZW5kaWYKICAgICB9CiAjZW5kaWYgLyogSEFWRV9QT0xMICovCkBAIC0yMjQ4LDI1ICsyMzU2LDI1IEBACiAgICAgUHlfSU5DUkVGKCZweUVwb2xsX1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZXBvbGwiLCAoUHlPYmplY3QgKikgJnB5RXBvbGxfVHlwZSk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExJTiIsIEVQT0xMSU4pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTE9VVCIsIEVQT0xMT1VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExQUkkiLCBFUE9MTFBSSSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMRVJSIiwgRVBPTExFUlIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTEhVUCIsIEVQT0xMSFVQKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExFVCIsIEVQT0xMRVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMSU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMT1VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFBSSSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExFUlIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMSFVQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTEVUKTsKICNpZmRlZiBFUE9MTE9ORVNIT1QKICAgICAvKiBLZXJuZWwgMi42LjIrICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMT05FU0hPVCIsIEVQT0xMT05FU0hPVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExPTkVTSE9UKTsKICNlbmRpZgogICAgIC8qIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTF9SREhVUCIsIEVQT0xMUkRIVVApOyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFJETk9STSIsIEVQT0xMUkROT1JNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExSREJBTkQiLCBFUE9MTFJEQkFORCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMV1JOT1JNIiwgRVBPTExXUk5PUk0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFdSQkFORCIsIEVQT0xMV1JCQU5EKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExNU0ciLCBFUE9MTE1TRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExSRE5PUk0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMUkRCQU5EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFdSTk9STSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExXUkJBTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMTVNHKTsKIAogI2lmZGVmIEVQT0xMX0NMT0VYRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExfQ0xPRVhFQyIsIEVQT0xMX0NMT0VYRUMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMX0NMT0VYRUMpOwogI2VuZGlmCiAjZW5kaWYgLyogSEFWRV9FUE9MTCAqLwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTFtb2R1bGUuYyBiL01vZHVsZXMvc2hhMW1vZHVsZS5jCmluZGV4IGQwZjMxOGQuLmI0NGZlMTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2hhMW1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhMW1vZHVsZS5jCkBAIC05MiwxMCArOTIsNiBAQAogICAgICAoeSlbNF0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MjQpJjI1NSk7ICh5KVs1XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4xNikmMjU1KTsgICAgIFwKICAgICAgKHkpWzZdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjgpJjI1NSk7ICh5KVs3XSA9ICh1bnNpZ25lZCBjaGFyKSgoeCkmMjU1KTsgfQogCi0jaWZuZGVmIE1JTgotICAgI2RlZmluZSBNSU4oeCwgeSkgKCAoKHgpPCh5KSk/KHgpOih5KSApCi0jZW5kaWYKLQogCiAvKiBTSEExIG1hY3JvcyAqLwogCkBAIC0yMjAsOSArMjE2LDkgQEAKICAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gU0hBMV9CTE9DS1NJWkU7CiAgICAgICAgICAgIGlubGVuICAgICAgICAgIC09IFNIQTFfQkxPQ0tTSVpFOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICBuID0gTUlOKGlubGVuLCAoUHlfc3NpemVfdCkoU0hBMV9CTE9DS1NJWkUgLSBzaGExLT5jdXJsZW4pKTsKKyAgICAgICAgICAgbiA9IFB5X01JTihpbmxlbiwgKFB5X3NzaXplX3QpKFNIQTFfQkxPQ0tTSVpFIC0gc2hhMS0+Y3VybGVuKSk7CiAgICAgICAgICAgIG1lbWNweShzaGExLT5idWYgKyBzaGExLT5jdXJsZW4sIGluLCAoc2l6ZV90KW4pOwotICAgICAgICAgICBzaGExLT5jdXJsZW4gICArPSBuOworICAgICAgICAgICBzaGExLT5jdXJsZW4gICArPSAoU0hBMV9JTlQzMiluOwogICAgICAgICAgICBpbiAgICAgICAgICAgICArPSBuOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBuOwogICAgICAgICAgICBpZiAoc2hhMS0+Y3VybGVuID09IFNIQTFfQkxPQ0tTSVpFKSB7CkBAIC00MTUsNyArNDExLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBTSEExX2dldF9uYW1lKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTEiLCA0KTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGExIiwgNCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NDgsOCArNTQ0LDE3IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19zaGExKHZvaWQpCiB7CisgICAgUHlPYmplY3QgKm07CisKICAgICBQeV9UWVBFKCZTSEExdHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMXR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTFtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTFtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEExdHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEExVHlwZSIsIChQeU9iamVjdCAqKSZTSEExdHlwZSk7CisgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jIGIvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYwppbmRleCA5ZjZiNDE2Li5iMDViZmMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKQEAgLTIxLDEzICsyMSw2IEBACiAjaW5jbHVkZSAiaGFzaGxpYi5oIgogCiAKLS8qIEVuZGlhbm5lc3MgdGVzdGluZyBhbmQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgVGVzdEVuZGlhbm5lc3ModmFyaWFibGUpIHtpbnQgaT0xOyB2YXJpYWJsZT1QQ1RfQklHX0VORElBTjtcCi0gICAgICAgIGlmICgqKChjaGFyKikmaSk9PTEpIHZhcmlhYmxlPVBDVF9MSVRUTEVfRU5ESUFOO30KLQotI2RlZmluZSBQQ1RfTElUVExFX0VORElBTiAxCi0jZGVmaW5lIFBDVF9CSUdfRU5ESUFOIDAKLQogLyogU29tZSB1c2VmdWwgdHlwZXMgKi8KIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFNIQV9CWVRFOwpAQCAtNTAsNyArNDMsNiBAQAogICAgIFNIQV9JTlQzMiBkaWdlc3RbOF07ICAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgZGlnZXN0ICovCiAgICAgU0hBX0lOVDMyIGNvdW50X2xvLCBjb3VudF9oaTsgICAgICAgLyogNjQtYml0IGJpdCBjb3VudCAqLwogICAgIFNIQV9CWVRFIGRhdGFbU0hBX0JMT0NLU0laRV07ICAgICAgIC8qIFNIQSBkYXRhIGJ1ZmZlciAqLwotICAgIGludCBFbmRpYW5uZXNzOwogICAgIGludCBsb2NhbDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVucHJvY2Vzc2VkIGFtb3VudCBpbiBkYXRhICovCiAgICAgaW50IGRpZ2VzdHNpemU7CiB9IFNIQW9iamVjdDsKQEAgLTU4LDEzICs1MCwxMSBAQAogLyogV2hlbiBydW4gb24gYSBsaXR0bGUtZW5kaWFuIENQVSB3ZSBuZWVkIHRvIHBlcmZvcm0gYnl0ZSByZXZlcnNhbCBvbiBhbgogICAgYXJyYXkgb2YgbG9uZ3dvcmRzLiAqLwogCi1zdGF0aWMgdm9pZCBsb25nUmV2ZXJzZShTSEFfSU5UMzIgKmJ1ZmZlciwgaW50IGJ5dGVDb3VudCwgaW50IEVuZGlhbm5lc3MpCisjaWYgUFlfTElUVExFX0VORElBTgorc3RhdGljIHZvaWQgbG9uZ1JldmVyc2UoU0hBX0lOVDMyICpidWZmZXIsIGludCBieXRlQ291bnQpCiB7CiAgICAgU0hBX0lOVDMyIHZhbHVlOwogCi0gICAgaWYgKCBFbmRpYW5uZXNzID09IFBDVF9CSUdfRU5ESUFOICkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYnl0ZUNvdW50IC89IHNpemVvZigqYnVmZmVyKTsKICAgICB3aGlsZSAoYnl0ZUNvdW50LS0pIHsKICAgICAgICAgdmFsdWUgPSAqYnVmZmVyOwpAQCAtNzMsMTAgKzYzLDEwIEBACiAgICAgICAgICpidWZmZXIrKyA9ICggdmFsdWUgPDwgMTYgKSB8ICggdmFsdWUgPj4gMTYgKTsKICAgICB9CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgU0hBY29weShTSEFvYmplY3QgKnNyYywgU0hBb2JqZWN0ICpkZXN0KQogewotICAgIGRlc3QtPkVuZGlhbm5lc3MgPSBzcmMtPkVuZGlhbm5lc3M7CiAgICAgZGVzdC0+bG9jYWwgPSBzcmMtPmxvY2FsOwogICAgIGRlc3QtPmRpZ2VzdHNpemUgPSBzcmMtPmRpZ2VzdHNpemU7CiAgICAgZGVzdC0+Y291bnRfbG8gPSBzcmMtPmNvdW50X2xvOwpAQCAtMTMxLDcgKzEyMSw5IEBACiAgICAgICAgIFNIQV9JTlQzMiBTWzhdLCBXWzY0XSwgdDAsIHQxOwogCiAgICAgbWVtY3B5KFcsIHNoYV9pbmZvLT5kYXRhLCBzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKLSAgICBsb25nUmV2ZXJzZShXLCAoaW50KXNpemVvZihzaGFfaW5mby0+ZGF0YSksIHNoYV9pbmZvLT5FbmRpYW5uZXNzKTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgbG9uZ1JldmVyc2UoVywgKGludClzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKKyNlbmRpZgogCiAgICAgZm9yIChpID0gMTY7IGkgPCA2NDsgKytpKSB7CiAgICAgICAgICAgICAgICAgV1tpXSA9IEdhbW1hMShXW2kgLSAyXSkgKyBXW2kgLSA3XSArIEdhbW1hMChXW2kgLSAxNV0pICsgV1tpIC0gMTZdOwpAQCAtMjI4LDcgKzIyMCw2IEBACiBzdGF0aWMgdm9pZAogc2hhX2luaXQoU0hBb2JqZWN0ICpzaGFfaW5mbykKIHsKLSAgICBUZXN0RW5kaWFubmVzcyhzaGFfaW5mby0+RW5kaWFubmVzcykKICAgICBzaGFfaW5mby0+ZGlnZXN0WzBdID0gMHg2QTA5RTY2N0w7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsxXSA9IDB4QkI2N0FFODVMOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMl0gPSAweDNDNkVGMzcyTDsKQEAgLTI0Niw3ICsyMzcsNiBAQAogc3RhdGljIHZvaWQKIHNoYTIyNF9pbml0KFNIQW9iamVjdCAqc2hhX2luZm8pCiB7Ci0gICAgVGVzdEVuZGlhbm5lc3Moc2hhX2luZm8tPkVuZGlhbm5lc3MpCiAgICAgc2hhX2luZm8tPmRpZ2VzdFswXSA9IDB4YzEwNTllZDhMOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMV0gPSAweDM2N2NkNTA3TDsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzJdID0gMHgzMDcwZGQxN0w7CkBAIC0yODQsNyArMjc0LDcgQEAKICAgICAgICAgbWVtY3B5KCgoU0hBX0JZVEUgKikgc2hhX2luZm8tPmRhdGEpICsgc2hhX2luZm8tPmxvY2FsLCBidWZmZXIsIGkpOwogICAgICAgICBjb3VudCAtPSBpOwogICAgICAgICBidWZmZXIgKz0gaTsKLSAgICAgICAgc2hhX2luZm8tPmxvY2FsICs9IGk7CisgICAgICAgIHNoYV9pbmZvLT5sb2NhbCArPSAoaW50KWk7CiAgICAgICAgIGlmIChzaGFfaW5mby0+bG9jYWwgPT0gU0hBX0JMT0NLU0laRSkgewogICAgICAgICAgICAgc2hhX3RyYW5zZm9ybShzaGFfaW5mbyk7CiAgICAgICAgIH0KQEAgLTI5OSw3ICsyODksNyBAQAogICAgICAgICBzaGFfdHJhbnNmb3JtKHNoYV9pbmZvKTsKICAgICB9CiAgICAgbWVtY3B5KHNoYV9pbmZvLT5kYXRhLCBidWZmZXIsIGNvdW50KTsKLSAgICBzaGFfaW5mby0+bG9jYWwgPSBjb3VudDsKKyAgICBzaGFfaW5mby0+bG9jYWwgPSAoaW50KWNvdW50OwogfQogCiAvKiBmaW5pc2ggY29tcHV0aW5nIHRoZSBTSEEgZGlnZXN0ICovCkBAIC01MTEsOSArNTAxLDkgQEAKIFNIQTI1Nl9nZXRfbmFtZShQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKICAgICBpZiAoKChTSEFvYmplY3QgKilzZWxmKS0+ZGlnZXN0c2l6ZSA9PSAzMikKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBMjU2IiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTI1NiIsIDYpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBMjI0IiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTIyNCIsIDYpOwogfQogCiBzdGF0aWMgUHlHZXRTZXREZWYgU0hBX2dldHNldGVyc1tdID0gewpAQCAtNzE2LDExICs3MDYsMjMgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3NoYTI1Nih2b2lkKQogeworICAgIFB5T2JqZWN0ICptOworCiAgICAgUHlfVFlQRSgmU0hBMjI0dHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMjI0dHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9UWVBFKCZTSEEyNTZ0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEEyNTZ0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9zaGEyNTZtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTI1Nm1vZHVsZSk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTIyNHR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMjI0VHlwZSIsIChQeU9iamVjdCAqKSZTSEEyMjR0eXBlKTsKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTI1NnR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMjU2VHlwZSIsIChQeU9iamVjdCAqKSZTSEEyNTZ0eXBlKTsKKyAgICByZXR1cm4gbTsKKwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYyBiL01vZHVsZXMvc2hhNTEybW9kdWxlLmMKaW5kZXggNTUzNmZkNS4uNDdjNTdlNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCkBAIC0yMiwxMyArMjIsNiBAQAogCiAjaWZkZWYgUFlfTE9OR19MT05HIC8qIElmIG5vIFBZX0xPTkdfTE9ORywgZG9uJ3QgY29tcGlsZSBhbnl0aGluZyEgKi8KIAotLyogRW5kaWFubmVzcyB0ZXN0aW5nIGFuZCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBUZXN0RW5kaWFubmVzcyh2YXJpYWJsZSkge2ludCBpPTE7IHZhcmlhYmxlPVBDVF9CSUdfRU5ESUFOO1wKLSAgICAgICAgaWYgKCooKGNoYXIqKSZpKT09MSkgdmFyaWFibGU9UENUX0xJVFRMRV9FTkRJQU47fQotCi0jZGVmaW5lIFBDVF9MSVRUTEVfRU5ESUFOIDEKLSNkZWZpbmUgUENUX0JJR19FTkRJQU4gMAotCiAvKiBTb21lIHVzZWZ1bCB0eXBlcyAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgU0hBX0JZVEU7CkBAIC01Miw3ICs0NSw2IEBACiAgICAgU0hBX0lOVDY0IGRpZ2VzdFs4XTsgICAgICAgICAgICAgICAgLyogTWVzc2FnZSBkaWdlc3QgKi8KICAgICBTSEFfSU5UMzIgY291bnRfbG8sIGNvdW50X2hpOyAgICAgICAvKiA2NC1iaXQgYml0IGNvdW50ICovCiAgICAgU0hBX0JZVEUgZGF0YVtTSEFfQkxPQ0tTSVpFXTsgICAgICAgLyogU0hBIGRhdGEgYnVmZmVyICovCi0gICAgaW50IEVuZGlhbm5lc3M7CiAgICAgaW50IGxvY2FsOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5wcm9jZXNzZWQgYW1vdW50IGluIGRhdGEgKi8KICAgICBpbnQgZGlnZXN0c2l6ZTsKIH0gU0hBb2JqZWN0OwpAQCAtNjAsMTMgKzUyLDExIEBACiAvKiBXaGVuIHJ1biBvbiBhIGxpdHRsZS1lbmRpYW4gQ1BVIHdlIG5lZWQgdG8gcGVyZm9ybSBieXRlIHJldmVyc2FsIG9uIGFuCiAgICBhcnJheSBvZiBsb25nd29yZHMuICovCiAKLXN0YXRpYyB2b2lkIGxvbmdSZXZlcnNlKFNIQV9JTlQ2NCAqYnVmZmVyLCBpbnQgYnl0ZUNvdW50LCBpbnQgRW5kaWFubmVzcykKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCitzdGF0aWMgdm9pZCBsb25nUmV2ZXJzZShTSEFfSU5UNjQgKmJ1ZmZlciwgaW50IGJ5dGVDb3VudCkKIHsKICAgICBTSEFfSU5UNjQgdmFsdWU7CiAKLSAgICBpZiAoIEVuZGlhbm5lc3MgPT0gUENUX0JJR19FTkRJQU4gKQotICAgICAgICByZXR1cm47Ci0KICAgICBieXRlQ291bnQgLz0gc2l6ZW9mKCpidWZmZXIpOwogICAgIHdoaWxlIChieXRlQ291bnQtLSkgewogICAgICAgICB2YWx1ZSA9ICpidWZmZXI7CkBAIC04MywxMCArNzMsMTAgQEAKICAgICAgICAgICAgICAgICBidWZmZXIrKzsKICAgICB9CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgU0hBY29weShTSEFvYmplY3QgKnNyYywgU0hBb2JqZWN0ICpkZXN0KQogewotICAgIGRlc3QtPkVuZGlhbm5lc3MgPSBzcmMtPkVuZGlhbm5lc3M7CiAgICAgZGVzdC0+bG9jYWwgPSBzcmMtPmxvY2FsOwogICAgIGRlc3QtPmRpZ2VzdHNpemUgPSBzcmMtPmRpZ2VzdHNpemU7CiAgICAgZGVzdC0+Y291bnRfbG8gPSBzcmMtPmNvdW50X2xvOwpAQCAtMTQxLDcgKzEzMSw5IEBACiAgICAgU0hBX0lOVDY0IFNbOF0sIFdbODBdLCB0MCwgdDE7CiAKICAgICBtZW1jcHkoVywgc2hhX2luZm8tPmRhdGEsIHNpemVvZihzaGFfaW5mby0+ZGF0YSkpOwotICAgIGxvbmdSZXZlcnNlKFcsIChpbnQpc2l6ZW9mKHNoYV9pbmZvLT5kYXRhKSwgc2hhX2luZm8tPkVuZGlhbm5lc3MpOworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyAgICBsb25nUmV2ZXJzZShXLCAoaW50KXNpemVvZihzaGFfaW5mby0+ZGF0YSkpOworI2VuZGlmCiAKICAgICBmb3IgKGkgPSAxNjsgaSA8IDgwOyArK2kpIHsKICAgICAgICAgICAgICAgICBXW2ldID0gR2FtbWExKFdbaSAtIDJdKSArIFdbaSAtIDddICsgR2FtbWEwKFdbaSAtIDE1XSkgKyBXW2kgLSAxNl07CkBAIC0yNTQsNyArMjQ2LDYgQEAKIHN0YXRpYyB2b2lkCiBzaGE1MTJfaW5pdChTSEFvYmplY3QgKnNoYV9pbmZvKQogewotICAgIFRlc3RFbmRpYW5uZXNzKHNoYV9pbmZvLT5FbmRpYW5uZXNzKQogICAgIHNoYV9pbmZvLT5kaWdlc3RbMF0gPSBQeV9VTEwoMHg2YTA5ZTY2N2YzYmNjOTA4KTsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzFdID0gUHlfVUxMKDB4YmI2N2FlODU4NGNhYTczYik7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsyXSA9IFB5X1VMTCgweDNjNmVmMzcyZmU5NGY4MmIpOwpAQCAtMjcyLDcgKzI2Myw2IEBACiBzdGF0aWMgdm9pZAogc2hhMzg0X2luaXQoU0hBb2JqZWN0ICpzaGFfaW5mbykKIHsKLSAgICBUZXN0RW5kaWFubmVzcyhzaGFfaW5mby0+RW5kaWFubmVzcykKICAgICBzaGFfaW5mby0+ZGlnZXN0WzBdID0gUHlfVUxMKDB4Y2JiYjlkNWRjMTA1OWVkOCk7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsxXSA9IFB5X1VMTCgweDYyOWEyOTJhMzY3Y2Q1MDcpOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMl0gPSBQeV9VTEwoMHg5MTU5MDE1YTMwNzBkZDE3KTsKQEAgLTMxMCw3ICszMDAsNyBAQAogICAgICAgICBtZW1jcHkoKChTSEFfQllURSAqKSBzaGFfaW5mby0+ZGF0YSkgKyBzaGFfaW5mby0+bG9jYWwsIGJ1ZmZlciwgaSk7CiAgICAgICAgIGNvdW50IC09IGk7CiAgICAgICAgIGJ1ZmZlciArPSBpOwotICAgICAgICBzaGFfaW5mby0+bG9jYWwgKz0gaTsKKyAgICAgICAgc2hhX2luZm8tPmxvY2FsICs9IChpbnQpaTsKICAgICAgICAgaWYgKHNoYV9pbmZvLT5sb2NhbCA9PSBTSEFfQkxPQ0tTSVpFKSB7CiAgICAgICAgICAgICBzaGE1MTJfdHJhbnNmb3JtKHNoYV9pbmZvKTsKICAgICAgICAgfQpAQCAtMzI1LDcgKzMxNSw3IEBACiAgICAgICAgIHNoYTUxMl90cmFuc2Zvcm0oc2hhX2luZm8pOwogICAgIH0KICAgICBtZW1jcHkoc2hhX2luZm8tPmRhdGEsIGJ1ZmZlciwgY291bnQpOwotICAgIHNoYV9pbmZvLT5sb2NhbCA9IGNvdW50OworICAgIHNoYV9pbmZvLT5sb2NhbCA9IChpbnQpY291bnQ7CiB9CiAKIC8qIGZpbmlzaCBjb21wdXRpbmcgdGhlIFNIQSBkaWdlc3QgKi8KQEAgLTU3Nyw5ICs1NjcsOSBAQAogU0hBNTEyX2dldF9uYW1lKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewogICAgIGlmICgoKFNIQW9iamVjdCAqKXNlbGYpLT5kaWdlc3RzaXplID09IDY0KQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEE1MTIiLCA2KTsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhNTEyIiwgNik7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEEzODQiLCA2KTsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhMzg0IiwgNik7CiB9CiAKIHN0YXRpYyBQeUdldFNldERlZiBTSEFfZ2V0c2V0ZXJzW10gPSB7CkBAIC03ODIsMTMgKzc3MiwyNCBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fc2hhNTEyKHZvaWQpCiB7CisgICAgUHlPYmplY3QgKm07CisKICAgICBQeV9UWVBFKCZTSEEzODR0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEEzODR0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X1RZUEUoJlNIQTUxMnR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTUxMnR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTUxMm1vZHVsZSk7CisKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfc2hhNTEybW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBMzg0dHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEEzODRUeXBlIiwgKFB5T2JqZWN0ICopJlNIQTM4NHR5cGUpOworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBNTEydHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEE1MTJUeXBlIiwgKFB5T2JqZWN0ICopJlNIQTUxMnR5cGUpOworICAgIHJldHVybiBtOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMgYi9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCmluZGV4IDcwNGM5ZjUuLjQzZTNjYTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaWduYWxtb2R1bGUuYwpAQCAtOSw3ICs5LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgTVNfV0lORE9XUwotI2luY2x1ZGUgPFdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaWZkZWYgSEFWRV9QUk9DRVNTX0gKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjZW5kaWYKQEAgLTM3LDExICszNyw2IEBACiAjZGVmaW5lIFNJR19FUlIgKChQeU9TX3NpZ2hhbmRsZXJfdCkoLTEpKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTlNJRyAxMgotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLSNlbmRpZgotCiAjaWZuZGVmIE5TSUcKICMgaWYgZGVmaW5lZChfTlNJRykKICMgIGRlZmluZSBOU0lHIF9OU0lHICAgICAgICAgICAgLyogRm9yIEJTRC9TeXNWICovCkBAIC03OCwxMCArNzMsNiBAQAogICAgYSB3b3JraW5nIGltcGxlbWVudGF0aW9uIHRoYXQgd29ya3MgaW4gYWxsIHRocmVlIGNhc2VzIC0tIHRoZQogICAgaGFuZGxlciBpZ25vcmVzIHNpZ25hbHMgaWYgZ2V0cGlkKCkgaXNuJ3QgdGhlIHNhbWUgYXMgaW4gdGhlIG1haW4KICAgIHRocmVhZC4gIFhYWCBUaGlzIGlzIGEgaGFjay4KLQotICAgR05VIHB0aCBpcyBhIHVzZXItc3BhY2UgdGhyZWFkaW5nIGxpYnJhcnksIGFuZCBhcyBzdWNoLCBhbGwgdGhyZWFkcwotICAgcnVuIHdpdGhpbiB0aGUgc2FtZSBwcm9jZXNzLiBJbiB0aGlzIGNhc2UsIGlmIHRoZSBjdXJyZW50bHkgcnVubmluZwotICAgdGhyZWFkIGlzIG5vdCB0aGUgbWFpbl90aHJlYWQsIHNlbmQgdGhlIHNpZ25hbCB0byB0aGUgbWFpbl90aHJlYWQuCiAqLwogCiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTE4MCwxNSArMTcxLDMxIEBACiAgICAgcmV0dXJuIFB5RXJyX0NoZWNrU2lnbmFscygpOwogfQogCitzdGF0aWMgaW50CityZXBvcnRfd2FrZXVwX2Vycm9yKHZvaWQgKmRhdGEpCit7CisgICAgaW50IHNhdmVfZXJybm8gPSBlcnJubzsKKyAgICBlcnJubyA9IChpbnQpIChQeV9pbnRwdHJfdCkgZGF0YTsKKyAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgUHlTeXNfV3JpdGVTdGRlcnIoIkV4Y2VwdGlvbiBpZ25vcmVkIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIHRvIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgInNpZ25hbCB3YWtldXAgZmQ6XG4iKTsKKyAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgZXJybm8gPSBzYXZlX2Vycm5vOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogdHJpcF9zaWduYWwoaW50IHNpZ19udW0pCiB7CiAgICAgdW5zaWduZWQgY2hhciBieXRlOworICAgIGludCByYyA9IDA7CiAKICAgICBIYW5kbGVyc1tzaWdfbnVtXS50cmlwcGVkID0gMTsKICAgICBpZiAod2FrZXVwX2ZkICE9IC0xKSB7CiAgICAgICAgIGJ5dGUgPSAodW5zaWduZWQgY2hhcilzaWdfbnVtOwotICAgICAgICB3cml0ZSh3YWtldXBfZmQsICZieXRlLCAxKTsKKyAgICAgICAgd2hpbGUgKChyYyA9IHdyaXRlKHdha2V1cF9mZCwgJmJ5dGUsIDEpKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgIGlmIChyYyA9PSAtMSkKKyAgICAgICAgICAgIFB5X0FkZFBlbmRpbmdDYWxsKHJlcG9ydF93YWtldXBfZXJyb3IsICh2b2lkICopIChQeV9pbnRwdHJfdCkgZXJybm8pOwogICAgIH0KICAgICBpZiAoaXNfdHJpcHBlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAzLDEzICsyMTAsNiBAQAogewogICAgIGludCBzYXZlX2Vycm5vID0gZXJybm87CiAKLSNpZiBkZWZpbmVkKFdJVEhfVEhSRUFEKSAmJiBkZWZpbmVkKFdJVEhfUFRIKQotICAgIGlmIChQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkgIT0gbWFpbl90aHJlYWQpIHsKLSAgICAgICAgcHRoX3JhaXNlKCoocHRoX3QgKikgbWFpbl90aHJlYWQsIHNpZ19udW0pOwotICAgIH0KLSAgICBlbHNlCi0jZW5kaWYKLSAgICB7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAvKiBTZWUgTk9URVMgc2VjdGlvbiBhYm92ZSAqLwogICAgIGlmIChnZXRwaWQoKSA9PSBtYWluX3BpZCkKQEAgLTIzMSw3ICsyMzEsNiBAQAogICAgICAqIG1ha2VzIHRoaXMgdHJ1ZS4gIFNlZSBhbHNvIGlzc3VlODM1NC4gKi8KICAgICBQeU9TX3NldHNpZyhzaWdfbnVtLCBzaWduYWxfaGFuZGxlcik7CiAjZW5kaWYKLSAgICB9CiAKICAgICAvKiBJc3N1ZSAjMTAzMTE6IGFzeW5jaHJvbm91c2x5IGV4ZWN1dGluZyBzaWduYWwgaGFuZGxlcnMgc2hvdWxkIG5vdAogICAgICAgIG11dGF0ZSBlcnJubyB1bmRlciB0aGUgZmVldCBvZiB1bnN1c3BlY3RpbmcgQyBjb2RlLiAqLwpAQCAtOTgzLDkgKzk4MiwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogI2lmIGRlZmluZWQoSEFWRV9TSUdXQUlUSU5GTykgfHwgZGVmaW5lZChIQVZFX1NJR1RJTUVEV0FJVCkKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTaWdpbmZvVHlwZSwgJnN0cnVjdF9zaWdpbmZvX2Rlc2MpOwotCisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlNpZ2luZm9UeXBlLCAmc3RydWN0X3NpZ2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSAmU2lnaW5mb1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3NpZ2luZm8iLCAoUHlPYmplY3QqKSAmU2lnaW5mb1R5cGUpOwogICAgIGluaXRpYWxpemVkID0gMTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCmluZGV4IDMyYjRlYmEuLmExZTVkYTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYwpAQCAtMTUsNyArMTUsNyBAQAogCiBNb2R1bGUgaW50ZXJmYWNlOgogCi0tIHNvY2tldC5lcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3Igc29ja2V0IHNwZWNpZmljIGVycm9ycworLSBzb2NrZXQuZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIHNvY2tldCBzcGVjaWZpYyBlcnJvcnMsIGFsaWFzIGZvciBPU0Vycm9yCiAtIHNvY2tldC5nYWllcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3IgZ2V0YWRkcmluZm8vZ2V0bmFtZWluZm8gZXJyb3JzLAogICAgIGEgc3ViY2xhc3Mgb2Ygc29ja2V0LmVycm9yCiAtIHNvY2tldC5oZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIGdldGhvc3RieSogZXJyb3JzLApAQCAtOTUsMTggKzk1LDE2IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKLSN1bmRlZiBNQVgKLSNkZWZpbmUgTUFYKHgsIHkpICgoeCkgPCAoeSkgPyAoeSkgOiAoeCkpCi0KIC8qIFNvY2tldCBvYmplY3QgZG9jdW1lbnRhdGlvbiAqLwogUHlEb2NfU1RSVkFSKHNvY2tfZG9jLAotInNvY2tldChbZmFtaWx5WywgdHlwZVssIHByb3RvXV1dKSAtPiBzb2NrZXQgb2JqZWN0XG5cCisic29ja2V0KGZhbWlseT1BRl9JTkVULCB0eXBlPVNPQ0tfU1RSRUFNLCBwcm90bz0wLCBmaWxlbm89Tm9uZSkgLT4gc29ja2V0IG9iamVjdFxuXAogXG5cCiBPcGVuIGEgc29ja2V0IG9mIHRoZSBnaXZlbiB0eXBlLiAgVGhlIGZhbWlseSBhcmd1bWVudCBzcGVjaWZpZXMgdGhlXG5cCiBhZGRyZXNzIGZhbWlseTsgaXQgZGVmYXVsdHMgdG8gQUZfSU5FVC4gIFRoZSB0eXBlIGFyZ3VtZW50IHNwZWNpZmllc1xuXAogd2hldGhlciB0aGlzIGlzIGEgc3RyZWFtIChTT0NLX1NUUkVBTSwgdGhpcyBpcyB0aGUgZGVmYXVsdClcblwKIG9yIGRhdGFncmFtIChTT0NLX0RHUkFNKSBzb2NrZXQuICBUaGUgcHJvdG9jb2wgYXJndW1lbnQgZGVmYXVsdHMgdG8gMCxcblwKIHNwZWNpZnlpbmcgdGhlIGRlZmF1bHQgcHJvdG9jb2wuICBLZXl3b3JkIGFyZ3VtZW50cyBhcmUgYWNjZXB0ZWQuXG5cCitUaGUgc29ja2V0IGlzIGNyZWF0ZWQgYXMgbm9uLWluaGVyaXRhYmxlLlxuXAogXG5cCiBBIHNvY2tldCBvYmplY3QgcmVwcmVzZW50cyBvbmUgZW5kcG9pbnQgb2YgYSBuZXR3b3JrIGNvbm5lY3Rpb24uXG5cCiBcblwKQEAgLTExNyw3ICsxMTUsNyBAQAogY2xvc2UoKSAtLSBjbG9zZSB0aGUgc29ja2V0XG5cCiBjb25uZWN0KGFkZHIpIC0tIGNvbm5lY3QgdGhlIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzXG5cCiBjb25uZWN0X2V4KGFkZHIpIC0tIGNvbm5lY3QsIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2YgYW4gZXhjZXB0aW9uXG5cCi1fZHVwKCkgLS0gcmV0dXJuIGEgbmV3IHNvY2tldCBmZCBkdXBsaWNhdGVkIGZyb20gZmlsZW5vKClcblwKK2R1cCgpIC0tIHJldHVybiBhIG5ldyBzb2NrZXQgZmQgZHVwbGljYXRlZCBmcm9tIGZpbGVubygpXG5cCiBmaWxlbm8oKSAtLSByZXR1cm4gdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3JcblwKIGdldHBlZXJuYW1lKCkgLS0gcmV0dXJuIHJlbW90ZSBhZGRyZXNzIFsqXVxuXAogZ2V0c29ja25hbWUoKSAtLSByZXR1cm4gbG9jYWwgYWRkcmVzc1xuXApAQCAtMTkwLDcgKzE4OCw3IEBACiAjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgKGRlZmluZWQoX19BUFBMRV9fKSB8fCBcCiAgICAgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uKzAgPCA1MDMwMDApIHx8IFwKICAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IFwKLSAgICBkZWZpbmVkKF9fVk1TKSB8fCAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSkKKyAgICAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSkKICNkZWZpbmUgVVNFX0dFVEFERFJJTkZPX0xPQ0sKICNlbmRpZgogCkBAIC0yMTQsMjIgKzIxMiwxMSBAQAogIyBpbmNsdWRlIDxjdHlwZS5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fVk1TKQotIyAgaW5jbHVkZSA8aW9jdGwuaD4KLSNlbmRpZgotCiAjaWZkZWYgX19BUFBMRV9fCiAjIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2VuZGlmCiAKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0jIGRlZmluZSAgSU5DTF9ET1MKLSMgZGVmaW5lICBJTkNMX0RPU0VSUk9SUwotIyBkZWZpbmUgIElOQ0xfTk9QTUFQSQotIyBpbmNsdWRlIDxvczIuaD4KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChfX3NnaSkgJiYgX0NPTVBJTEVSX1ZFUlNJT04+NzAwICYmICFfU0dJQVBJCiAvKiBtYWtlIHN1cmUgdGhhdCB0aGUgcmVlbnRyYW50IChnZXRob3N0YnlhZGRyX3IgZXRjKQogICAgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBjb3JyZWN0bHkgaWYgY29tcGlsaW5nIHdpdGgKQEAgLTI4NiwxMiArMjczLDcgQEAKICMgaW5jbHVkZSA8dW5pc3RkLmg+CiAKIC8qIEhlYWRlcnMgbmVlZGVkIGZvciBpbmV0X250b2EoKSBhbmQgaW5ldF9hZGRyKCkgKi8KLSMgaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX1ZBQ1BQKQotIyAgaW5jbHVkZSA8bmV0ZGIuaD4KLXR5cGVkZWYgc2l6ZV90IHNvY2tsZW5fdDsKLSMgZWxzZQogIyAgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgotIyBlbmRpZgogCiAjICBpbmNsdWRlIDxmY250bC5oPgogCkBAIC0zNzEsMjIgKzM1Myw3IEBACiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLS8qIE9uIFdpbmRvd3MgYSBzb2NrZXQgaXMgcmVhbGx5IGEgaGFuZGxlIG5vdCBhbiBmZCAqLwotc3RhdGljIFNPQ0tFVAotZHVwX3NvY2tldChTT0NLRVQgaGFuZGxlKQotewotICAgIFdTQVBST1RPQ09MX0lORk8gaW5mbzsKLQotICAgIGlmIChXU0FEdXBsaWNhdGVTb2NrZXQoaGFuZGxlLCBHZXRDdXJyZW50UHJvY2Vzc0lkKCksICZpbmZvKSkKLSAgICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUOwotCi0gICAgcmV0dXJuIFdTQVNvY2tldChGUk9NX1BST1RPQ09MX0lORk8sIEZST01fUFJPVE9DT0xfSU5GTywKLSAgICAgICAgICAgICAgICAgICAgIEZST01fUFJPVE9DT0xfSU5GTywgJmluZm8sIDAsIFdTQV9GTEFHX09WRVJMQVBQRUQpOwotfQogI2RlZmluZSBTT0NLRVRDTE9TRSBjbG9zZXNvY2tldAotI2Vsc2UKLS8qIE9uIFVuaXggd2UgY2FuIHVzZSBkdXAgdG8gZHVwbGljYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYSBzb2NrZXQqLwotI2RlZmluZSBkdXBfc29ja2V0KGZkKSBkdXAoZmQpCiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTjMyCkBAIC0zOTUsMTEgKzM2Miw2IEBACiAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgU09DS0VUQ0xPU0Ugc29jbG9zZQotI2RlZmluZSBOT19EVVAgLyogU29ja2V0cyBhcmUgTm90IEFjdHVhbCBGaWxlIEhhbmRsZXMgdW5kZXIgT1MvMiAqLwotI2VuZGlmCi0KICNpZm5kZWYgU09DS0VUQ0xPU0UKICNkZWZpbmUgU09DS0VUQ0xPU0UgY2xvc2UKICNlbmRpZgpAQCAtNDM3LDExICszOTksNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmZGVmIF9fVk1TCi0vKiBUQ1AvSVAgU2VydmljZXMgZm9yIFZNUyB1c2VzIGEgbWF4aW11bSBzZW5kL3JlY3YgYnVmZmVyIGxlbmd0aCAqLwotI2RlZmluZSBTRUdNRU5UX1NJWkUgKDMyICogMTAyNCAtMSkKLSNlbmRpZgotCiAvKiBDb252ZXJ0ICJzb2NrX2FkZHJfdCAqIiB0byAic3RydWN0IHNvY2thZGRyICoiLiAqLwogI2RlZmluZSBTQVMyU0EoeCkgICAgICAgKCYoKHgpLT5zYSkpCiAKQEAgLTQ1OSw2ICs0MTYsMTAgQEAKICNkZWZpbmUgSU5WQUxJRF9TT0NLRVQgKC0xKQogI2VuZGlmCiAKKyNpZm5kZWYgSU5BRERSX05PTkUKKyNkZWZpbmUgSU5BRERSX05PTkUgKC0xKQorI2VuZGlmCisKIC8qIFhYWCBUaGVyZSdzIGEgcHJvYmxlbSBoZXJlOiAqc3RhdGljKiBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3NlZCB0byBoYXZlCiAgICBhIFB5IHByZWZpeCAob3IgdXNlIENhcGl0YWxpemVkV29yZHMpLiAgTGF0ZXIuLi4gKi8KIApAQCAtNTE5LDYgKzQ4MCwxMSBAQAogICAgIChlcnJubyA9PSBleHBlY3RlZCkKICNlbmRpZgogCisjaWZkZWYgTVNfV0lORE9XUworLyogRG9lcyBXU0FTb2NrZXQoKSBzdXBwb3J0IHRoZSBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVCBmbGFnPyAqLworc3RhdGljIGludCBzdXBwb3J0X3dzYV9ub19pbmhlcml0ID0gLTE7CisjZW5kaWYKKwogLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcmFpc2UgYW4gZXJyb3IgYWNjb3JkaW5nIHRvIGVycm5vCiAgICBhbmQgcmV0dXJuIGEgTlVMTCBwb2ludGVyIGZyb20gYSBmdW5jdGlvbi4gKi8KIApAQCAtNTM0LDQyICs1MDAsNiBAQAogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoUHlFeGNfT1NFcnJvciwgZXJyX25vKTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKHNvY2tfZXJybm8oKSAhPSBOT19FUlJPUikgewotICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgIFVMT05HICBtc2dsZW47Ci0gICAgICAgIGNoYXIgb3V0YnVmWzEwMF07Ci0gICAgICAgIGludCBteWVycm9yY29kZSA9IHNvY2tfZXJybm8oKTsKLQotICAgICAgICAvKiBSZXRyaWV2ZSBzb2NrZXQtcmVsYXRlZCBlcnJvciBtZXNzYWdlIGZyb20gTVBUTi5NU0cgZmlsZSAqLwotICAgICAgICByYyA9IERvc0dldE1lc3NhZ2UoTlVMTCwgMCwgb3V0YnVmLCBzaXplb2Yob3V0YnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ZXJyb3Jjb2RlIC0gU09DQkFTRUVSUiArIDI2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1wdG4ubXNnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2dsZW4pOwotICAgICAgICBpZiAocmMgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2OwotCi0gICAgICAgICAgICAvKiBPUy8yIGRvZXNuJ3QgZ3VhcmFudGVlIGEgdGVybWluYXRvciAqLwotICAgICAgICAgICAgb3V0YnVmW21zZ2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgaWYgKHN0cmxlbihvdXRidWYpID4gMCkgewotICAgICAgICAgICAgICAgIC8qIElmIG5vbi1lbXB0eSBtc2csIHRyaW0gQ1JMRiAqLwotICAgICAgICAgICAgICAgIGNoYXIgKmxhc3RjID0gJm91dGJ1Zlsgc3RybGVuKG91dGJ1ZiktMSBdOwotICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0YyA+IG91dGJ1ZiAmJgotICAgICAgICAgICAgICAgICAgICAgICBQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpsYXN0YykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZSAoQ1JMRikgKi8KLSAgICAgICAgICAgICAgICAgICAgKmxhc3RjLS0gPSAnXDAnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHYgPSBQeV9CdWlsZFZhbHVlKCIoaXMpIiwgbXllcnJvcmNvZGUsIG91dGJ1Zik7Ci0gICAgICAgICAgICBpZiAodiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX09TRXJyb3IsIHYpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogfQogCkBAIC02MTcsMzcgKzU0NywxNCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0jaWZkZWYgX19WTVMKLS8qIEZ1bmN0aW9uIHRvIHNlbmQgaW4gc2VnbWVudHMgKi8KLXN0YXRpYyBpbnQKLXNlbmRzZWdtZW50ZWQoaW50IHNvY2tfZmQsIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IGZsYWdzKQotewotICAgIGludCBuID0gMDsKLSAgICBpbnQgcmVtYWluaW5nID0gbGVuOwotCi0gICAgd2hpbGUgKHJlbWFpbmluZyA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNlZ21lbnQ7Ci0KLSAgICAgICAgc2VnbWVudCA9IChyZW1haW5pbmcgPj0gU0VHTUVOVF9TSVpFID8gU0VHTUVOVF9TSVpFIDogcmVtYWluaW5nKTsKLSAgICAgICAgbiA9IHNlbmQoc29ja19mZCwgYnVmLCBzZWdtZW50LCBmbGFncyk7Ci0gICAgICAgIGlmIChuIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgICAgIH0KLSAgICAgICAgcmVtYWluaW5nIC09IHNlZ21lbnQ7Ci0gICAgICAgIGJ1ZiArPSBzZWdtZW50OwotICAgIH0gLyogZW5kIHdoaWxlICovCi0KLSAgICByZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KIC8qIEZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIHNldHRpbmcgb2Ygc29ja2V0IGJsb2NraW5nIG1vZGUKICAgIGludGVybmFsbHkuIGJsb2NrID0gKDEgfCAwKS4gKi8KIHN0YXRpYyBpbnQKIGludGVybmFsX3NldGJsb2NraW5nKFB5U29ja2V0U29ja09iamVjdCAqcywgaW50IGJsb2NrKQogewotI2lmbmRlZiBNU19XSU5ET1dTCi0gICAgaW50IGRlbGF5X2ZsYWc7CisjaWYgIWRlZmluZWQoTVNfV0lORE9XUykgXAorICAgICYmICEoKGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9OQklPKSkpCisgICAgaW50IGRlbGF5X2ZsYWcsIG5ld19kZWxheV9mbGFnOwogI2VuZGlmCiAjaWZkZWYgU09DS19OT05CTE9DSwogICAgIGlmIChibG9jaykKQEAgLTY1OCwyMCArNTY1LDE4IEBACiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZuZGVmIE1TX1dJTkRPV1MKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICBibG9jayA9ICFibG9jazsKLSAgICBpb2N0bChzLT5zb2NrX2ZkLCBGSU9OQklPLCAoY2FkZHJfdCkmYmxvY2ssIHNpemVvZihibG9jaykpOwotI2VsaWYgZGVmaW5lZChfX1ZNUykKKyNpZiAoZGVmaW5lZChIQVZFX1NZU19JT0NUTF9IKSAmJiBkZWZpbmVkKEZJT05CSU8pKQogICAgIGJsb2NrID0gIWJsb2NrOwogICAgIGlvY3RsKHMtPnNvY2tfZmQsIEZJT05CSU8sICh1bnNpZ25lZCBpbnQgKikmYmxvY2spOwotI2Vsc2UgIC8qICFQWU9TX09TMiAmJiAhX19WTVMgKi8KKyNlbHNlCiAgICAgZGVsYXlfZmxhZyA9IGZjbnRsKHMtPnNvY2tfZmQsIEZfR0VURkwsIDApOwogICAgIGlmIChibG9jaykKLSAgICAgICAgZGVsYXlfZmxhZyAmPSAofk9fTk9OQkxPQ0spOworICAgICAgICBuZXdfZGVsYXlfZmxhZyA9IGRlbGF5X2ZsYWcgJiAofk9fTk9OQkxPQ0spOwogICAgIGVsc2UKLSAgICAgICAgZGVsYXlfZmxhZyB8PSBPX05PTkJMT0NLOwotICAgIGZjbnRsKHMtPnNvY2tfZmQsIEZfU0VURkwsIGRlbGF5X2ZsYWcpOwotI2VuZGlmIC8qICFQWU9TX09TMiAqLworICAgICAgICBuZXdfZGVsYXlfZmxhZyA9IGRlbGF5X2ZsYWcgfCBPX05PTkJMT0NLOworICAgIGlmIChuZXdfZGVsYXlfZmxhZyAhPSBkZWxheV9mbGFnKQorICAgICAgICBmY250bChzLT5zb2NrX2ZkLCBGX1NFVEZMLCBuZXdfZGVsYXlfZmxhZyk7CisjZW5kaWYKICNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KICAgICBibG9jayA9ICFibG9jazsKICAgICBpb2N0bHNvY2tldChzLT5zb2NrX2ZkLCBGSU9OQklPLCAodV9sb25nKikmYmxvY2spOwpAQCAtODU1LDggKzc2MCw2IEBACiB7CiAgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOwogICAgIGludCBlcnJvcjsKLSAgICBpbnQgZDEsIGQyLCBkMywgZDQ7Ci0gICAgY2hhciBjaDsKIAogICAgIG1lbXNldCgodm9pZCAqKSBhZGRyX3JldCwgJ1wwJywgc2l6ZW9mKCphZGRyX3JldCkpOwogICAgIGlmIChuYW1lWzBdID09ICdcMCcpIHsKQEAgLTkwNSw3ICs4MDgsMTAgQEAKICAgICAgICAgZnJlZWFkZHJpbmZvKHJlcyk7CiAgICAgICAgIHJldHVybiBzaXo7CiAgICAgfQotICAgIGlmIChuYW1lWzBdID09ICc8JyAmJiBzdHJjbXAobmFtZSwgIjxicm9hZGNhc3Q+IikgPT0gMCkgeworICAgIC8qIHNwZWNpYWwtY2FzZSBicm9hZGNhc3QgLSBpbmV0X2FkZHIoKSBiZWxvdyBjYW4gcmV0dXJuIElOQUREUl9OT05FIGZvcgorICAgICAqIHRoaXMgKi8KKyAgICBpZiAoc3RyY21wKG5hbWUsICIyNTUuMjU1LjI1NS4yNTUiKSA9PSAwIHx8CisgICAgICAgIHN0cmNtcChuYW1lLCAiPGJyb2FkY2FzdD4iKSA9PSAwKSB7CiAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwogICAgICAgICBpZiAoYWYgIT0gQUZfSU5FVCAmJiBhZiAhPSBBRl9VTlNQRUMpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLApAQCAtOTIxLDIwICs4MjcsNTMgQEAKICAgICAgICAgc2luLT5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOwogICAgICAgICByZXR1cm4gc2l6ZW9mKHNpbi0+c2luX2FkZHIpOwogICAgIH0KLSAgICBpZiAoc3NjYW5mKG5hbWUsICIlZC4lZC4lZC4lZCVjIiwgJmQxLCAmZDIsICZkMywgJmQ0LCAmY2gpID09IDQgJiYKLSAgICAgICAgMCA8PSBkMSAmJiBkMSA8PSAyNTUgJiYgMCA8PSBkMiAmJiBkMiA8PSAyNTUgJiYKLSAgICAgICAgMCA8PSBkMyAmJiBkMyA8PSAyNTUgJiYgMCA8PSBkNCAmJiBkNCA8PSAyNTUpIHsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0gICAgICAgIHNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyX3JldDsKLSAgICAgICAgc2luLT5zaW5fYWRkci5zX2FkZHIgPSBodG9ubCgKLSAgICAgICAgICAgICgobG9uZykgZDEgPDwgMjQpIHwgKChsb25nKSBkMiA8PCAxNikgfAotICAgICAgICAgICAgKChsb25nKSBkMyA8PCA4KSB8ICgobG9uZykgZDQgPDwgMCkpOwotICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisgICAgLyogYXZvaWQgYSBuYW1lIHJlc29sdXRpb24gaW4gY2FzZSBvZiBudW1lcmljIGFkZHJlc3MgKi8KKyNpZmRlZiBIQVZFX0lORVRfUFRPTgorICAgIC8qIGNoZWNrIGZvciBhbiBJUHY0IGFkZHJlc3MgKi8KKyAgICBpZiAoYWYgPT0gQUZfVU5TUEVDIHx8IGFmID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl9yZXQ7CisgICAgICAgIG1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgbmFtZSwgJnNpbi0+c2luX2FkZHIpID4gMCkgeworICAgICAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgotICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CisgICAgICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQogICAgIH0KKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIC8qIGNoZWNrIGZvciBhbiBJUHY2IGFkZHJlc3MgLSBpZiB0aGUgYWRkcmVzcyBjb250YWlucyBhIHNjb3BlIElELCB3ZQorICAgICAqIGZhbGxiYWNrIHRvIGdldGFkZHJpbmZvKCksIHdoaWNoIGNhbiBoYW5kbGUgdHJhbnNsYXRpb24gZnJvbSBpbnRlcmZhY2UKKyAgICAgKiBuYW1lIHRvIGludGVyZmFjZSBpbmRleCAqLworICAgIGlmICgoYWYgPT0gQUZfVU5TUEVDIHx8IGFmID09IEFGX0lORVQ2KSAmJiAhc3RyY2hyKG5hbWUsICclJykpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyX3JldDsKKyAgICAgICAgbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKKyAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgbmFtZSwgJnNpbi0+c2luNl9hZGRyKSA+IDApIHsKKyAgICAgICAgICAgIHNpbi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgICAgICAgc2luLT5zaW42X2xlbiA9IHNpemVvZigqc2luKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIDE2OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRV9JUFY2ICovCisjZWxzZSAvKiBIQVZFX0lORVRfUFRPTiAqLworICAgIC8qIGNoZWNrIGZvciBhbiBJUHY0IGFkZHJlc3MgKi8KKyAgICBpZiAoYWYgPT0gQUZfSU5FVCB8fCBhZiA9PSBBRl9VTlNQRUMpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl9yZXQ7CisgICAgICAgIG1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisgICAgICAgIGlmICgoc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIobmFtZSkpICE9IElOQUREUl9OT05FKSB7CisgICAgICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEhBVkVfSU5FVF9QVE9OICovCisKKyAgICAvKiBwZXJmb3JtIGEgbmFtZSByZXNvbHV0aW9uICovCiAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CiAgICAgaGludHMuYWlfZmFtaWx5ID0gYWY7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpAQCAtMTMyOSwxMSArMTI2OCw3IEBACiAgICAgICAgIH0KICAgICAgICAgYWRkci0+c3VuX2ZhbWlseSA9IHMtPnNvY2tfZmFtaWx5OwogICAgICAgICBtZW1jcHkoYWRkci0+c3VuX3BhdGgsIHBhdGgsIGxlbik7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICAgICAgKmxlbl9yZXQgPSBzaXplb2YoKmFkZHIpOwotI2Vsc2UKICAgICAgICAgKmxlbl9yZXQgPSBsZW4gKyBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKTsKLSNlbmRpZgogICAgICAgICByZXR2YWwgPSAxOwogICAgIHVuaXhfb3V0OgogICAgICAgICBQeV9ERUNSRUYoYXJncyk7CkBAIC0xNjU4LDYgKzE1OTMsOCBAQAogICAgIGNhc2UgQUZfQ0FOOgogICAgICAgICBzd2l0Y2ggKHMtPnNvY2tfcHJvdG8pIHsKICAgICAgICAgY2FzZSBDQU5fUkFXOgorICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBDQU5fQkNNOgogICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfY2FuICphZGRyOwogICAgICAgICAgICAgUHlPYmplY3QgKmludGVyZmFjZU5hbWU7CkBAIC0xOTQ4LDggKzE4ODUsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY21zZ2gtPmNtc2dfbGVuKSk7CiAKICAgICAvKiBOb3RlIHRoYXQgUE9TSVggYWxsb3dzIG1zZ19jb250cm9sbGVuIHRvIGJlIG9mIHNpZ25lZCB0eXBlLiAqLwotICAgIGlmIChjbXNnaCA9PSBOVUxMIHx8IG1zZy0+bXNnX2NvbnRyb2wgPT0gTlVMTCB8fCBtc2ctPm1zZ19jb250cm9sbGVuIDwgMCkKKyAgICBpZiAoY21zZ2ggPT0gTlVMTCB8fCBtc2ctPm1zZ19jb250cm9sID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOworICAgIC8qIE5vdGUgdGhhdCBQT1NJWCBhbGxvd3MgbXNnX2NvbnRyb2xsZW4gdG8gYmUgb2YgYSBzaWduZWQgdHlwZS4gVGhpcyBpcworICAgICAgIGFubm95aW5nIHVuZGVyIE9TIFggYXMgaXQncyB1bnNpZ25lZCB0aGVyZSBhbmQgc28gaXQgdHJpZ2dlcnMgYQorICAgICAgIHRhdXRvbG9naWNhbCBjb21wYXJpc29uIHdhcm5pbmcgdW5kZXIgQ2xhbmcgd2hlbiBjb21wYXJlZCBhZ2FpbnN0IDAuCisgICAgICAgU2luY2UgdGhlIGNoZWNrIGlzIHZhbGlkIG9uIG90aGVyIHBsYXRmb3Jtcywgc2lsZW5jZSB0aGUgd2FybmluZyB1bmRlcgorICAgICAgIENsYW5nLiAqLworICAgICNpZmRlZiBfX2NsYW5nX18KKyAgICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorICAgICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3RhdXRvbG9naWNhbC1jb21wYXJlIgorICAgICNlbmRpZgorICAgIGlmIChtc2ctPm1zZ19jb250cm9sbGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgI2lmZGVmIF9fY2xhbmdfXworICAgICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyAgICAjZW5kaWYKICAgICBpZiAoc3BhY2UgPCBjbXNnX2xlbl9lbmQpCiAgICAgICAgIHNwYWNlID0gY21zZ19sZW5fZW5kOwogICAgIGNtc2dfb2Zmc2V0ID0gKGNoYXIgKiljbXNnaCAtIChjaGFyICopbXNnLT5tc2dfY29udHJvbDsKQEAgLTIwMTYsNiArMTk2NywxMSBAQAogICAgIFB5T2JqZWN0ICphZGRyID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKICAgICBpbnQgdGltZW91dDsKKyNpZiBkZWZpbmVkKEhBVkVfQUNDRVBUNCkgJiYgZGVmaW5lZChTT0NLX0NMT0VYRUMpCisgICAgLyogYWNjZXB0NCgpIGlzIGF2YWlsYWJsZSBvbiBMaW51eCAyLjYuMjgrIGFuZCBnbGliYyAyLjEwICovCisgICAgc3RhdGljIGludCBhY2NlcHQ0X3dvcmtzID0gLTE7CisjZW5kaWYKKwogICAgIGlmICghZ2V0c29ja2FkZHJsZW4ocywgJmFkZHJsZW4pKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBtZW1zZXQoJmFkZHJidWYsIDAsIGFkZHJsZW4pOwpAQCAtMjAyNCwxMCArMTk4MCwyNCBAQAogICAgICAgICByZXR1cm4gc2VsZWN0X2Vycm9yKCk7CiAKICAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQorCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwogICAgIGlmICghdGltZW91dCkgeworI2lmIGRlZmluZWQoSEFWRV9BQ0NFUFQ0KSAmJiBkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKKyAgICAgICAgaWYgKGFjY2VwdDRfd29ya3MgIT0gMCkgeworICAgICAgICAgICAgbmV3ZmQgPSBhY2NlcHQ0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPQ0tfQ0xPRVhFQyk7CisgICAgICAgICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQgJiYgYWNjZXB0NF93b3JrcyA9PSAtMSkgeworICAgICAgICAgICAgICAgIC8qIE9uIExpbnV4IG9sZGVyIHRoYW4gMi42LjI4LCBhY2NlcHQ0KCkgZmFpbHMgd2l0aCBFTk9TWVMgKi8KKyAgICAgICAgICAgICAgICBhY2NlcHQ0X3dvcmtzID0gKGVycm5vICE9IEVOT1NZUyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFjY2VwdDRfd29ya3MgPT0gMCkKKyAgICAgICAgICAgIG5ld2ZkID0gYWNjZXB0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKKyNlbHNlCiAgICAgICAgIG5ld2ZkID0gYWNjZXB0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKKyNlbmRpZgogICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCkBAIC0yMDQwLDYgKzIwMTAsMjUgQEAKICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQpCiAgICAgICAgIHJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpbmV3ZmQsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIDApKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICBTT0NLRVRDTE9TRShuZXdmZCk7CisgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICB9CisjZWxzZQorCisjaWYgZGVmaW5lZChIQVZFX0FDQ0VQVDQpICYmIGRlZmluZWQoU09DS19DTE9FWEVDKQorICAgIGlmICghYWNjZXB0NF93b3JrcykKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobmV3ZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOworICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICBzb2NrID0gUHlMb25nX0Zyb21Tb2NrZXRfdChuZXdmZCk7CiAgICAgaWYgKHNvY2sgPT0gTlVMTCkgewogICAgICAgICBTT0NLRVRDTE9TRShuZXdmZCk7CkBAIC0yMjE5LDEzICsyMjA4LDcgQEAKICAgICAgICAgICAgIHJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhmbGFnKTsKICAgICB9Ci0jaWZkZWYgX19WTVMKLSAgICAvKiBzb2NrbGVuX3QgaXMgdW5zaWduZWQgc28gbm8gbmVnYXRpdmUgdGVzdCBpcyBuZWVkZWQsCi0gICAgICAgdGVzdCBidWZsZW4gPT0gMCBpcyBwcmV2aW91c2x5IGRvbmUgKi8KLSAgICBpZiAoYnVmbGVuID4gMTAyNCkgewotI2Vsc2UKICAgICBpZiAoYnVmbGVuIDw9IDAgfHwgYnVmbGVuID4gMTAyNCkgewotI2VuZGlmCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tvcHQgYnVmbGVuIG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzMTQsOCArMjI5Nyw4IEBACiBQeURvY19TVFJWQVIoZGV0YWNoX2RvYywKICJkZXRhY2goKVxuXAogXG5cCi1DbG9zZSB0aGUgc29ja2V0IG9iamVjdCB3aXRob3V0IGNsb3NpbmcgdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yLlwKLVRoZSBvYmplY3QgY2Fubm90IGJlIHVzZWQgYWZ0ZXIgdGhpcyBjYWxsLCBidXQgdGhlIGZpbGUgZGVzY3JpcHRvclwKK0Nsb3NlIHRoZSBzb2NrZXQgb2JqZWN0IHdpdGhvdXQgY2xvc2luZyB0aGUgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IuXG5cCitUaGUgb2JqZWN0IGNhbm5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbCwgYnV0IHRoZSBmaWxlIGRlc2NyaXB0b3JcblwKIGNhbiBiZSByZXVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLiAgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZXR1cm5lZC4iKTsKIAogc3RhdGljIGludApAQCAtMjU5NSwxMCArMjU3OCw2IEBACiB7CiAgICAgUHlfc3NpemVfdCBvdXRsZW4gPSAtMTsKICAgICBpbnQgdGltZW91dDsKLSNpZmRlZiBfX1ZNUwotICAgIGludCByZW1haW5pbmc7Ci0gICAgY2hhciAqcmVhZF9idWY7Ci0jZW5kaWYKIAogICAgIGlmICghSVNfU0VMRUNUQUJMRShzKSkgewogICAgICAgICBzZWxlY3RfZXJyb3IoKTsKQEAgLTI2MDksMTIgKzI1ODgsMTggQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0jaWZuZGVmIF9fVk1TCiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KQorICAgIGlmICghdGltZW91dCkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBvdXRsZW4gPSByZWN2KHMtPnNvY2tfZmQsIGNidWYsIChpbnQpbGVuLCBmbGFncyk7CisjZWxzZQogICAgICAgICBvdXRsZW4gPSByZWN2KHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MpOworI2VuZGlmCisgICAgfQogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAodGltZW91dCA9PSAxKSB7CkBAIC0yNjI4LDQ4ICsyNjEzLDYgQEAKICAgICAgICAgcy0+ZXJyb3JoYW5kbGVyKCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0jZWxzZQotICAgIHJlYWRfYnVmID0gY2J1ZjsKLSAgICByZW1haW5pbmcgPSBsZW47Ci0gICAgd2hpbGUgKHJlbWFpbmluZyAhPSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzZWdtZW50OwotICAgICAgICBpbnQgbnJlYWQgPSAtMTsKLQotICAgICAgICBzZWdtZW50ID0gcmVtYWluaW5nIC9TRUdNRU5UX1NJWkU7Ci0gICAgICAgIGlmIChzZWdtZW50ICE9IDApIHsKLSAgICAgICAgICAgIHNlZ21lbnQgPSBTRUdNRU5UX1NJWkU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzZWdtZW50ID0gcmVtYWluaW5nOwotICAgICAgICB9Ci0KLSAgICAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDAsIGludGVydmFsKTsKLSAgICAgICAgaWYgKCF0aW1lb3V0KQotICAgICAgICAgICAgbnJlYWQgPSByZWN2KHMtPnNvY2tfZmQsIHJlYWRfYnVmLCBzZWdtZW50LCBmbGFncyk7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGlmICh0aW1lb3V0ID09IDEpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzb2NrZXRfdGltZW91dCwgInRpbWVkIG91dCIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIEVORF9TRUxFQ1RfTE9PUChzKQotCi0gICAgICAgIGlmIChucmVhZCA8IDApIHsKLSAgICAgICAgICAgIHMtPmVycm9yaGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmIChucmVhZCAhPSByZW1haW5pbmcpIHsKLSAgICAgICAgICAgIHJlYWRfYnVmICs9IG5yZWFkOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZW1haW5pbmcgLT0gc2VnbWVudDsKLSAgICAgICAgcmVhZF9idWYgKz0gc2VnbWVudDsKLSAgICB9Ci0gICAgb3V0bGVuID0gcmVhZF9idWYgLSBjYnVmOwotI2VuZGlmIC8qICFfX1ZNUyAqLwotCiAgICAgcmV0dXJuIG91dGxlbjsKIH0KIApAQCAtMjgyMCwxNCArMjc2MywxMSBAQAogICAgIG1lbXNldCgmYWRkcmJ1ZiwgMCwgYWRkcmxlbik7CiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7CiAgICAgaWYgKCF0aW1lb3V0KSB7Ci0jaWZuZGVmIE1TX1dJTkRPV1MKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7Ci0jZWxzZQotICAgICAgICBuID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncywKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIChpbnQpbGVuLCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICZhZGRyYnVmLCAmYWRkcmxlbik7Ci0jZW5kaWYKICNlbHNlCiAgICAgICAgIG4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgJmFkZHJsZW4pOwpAQCAtMzMwOSwxMiArMzI0OSwxNSBAQAogICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMSwgaW50ZXJ2YWwpOwotICAgIGlmICghdGltZW91dCkKLSNpZmRlZiBfX1ZNUwotICAgICAgICBuID0gc2VuZHNlZ21lbnRlZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOworICAgIGlmICghdGltZW91dCkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIChpbnQpbGVuLCBmbGFncyk7CiAjZWxzZQogICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOwogI2VuZGlmCisgICAgfQogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHRpbWVvdXQgPT0gMSkgewogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKQEAgLTMzNjIsOCArMzMwNSwxMCBAQAogICAgICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0KHMsIDEpOwogICAgICAgICBuID0gLTE7CiAgICAgICAgIGlmICghdGltZW91dCkgewotI2lmZGVmIF9fVk1TCi0gICAgICAgICAgICBuID0gc2VuZHNlZ21lbnRlZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIChpbnQpbGVuLCBmbGFncyk7CiAjZWxzZQogICAgICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKICNlbmRpZgpAQCAtMzQ1OCw4ICszNDAzLDE3IEBACiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAxLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KQotICAgICAgICBuID0gc2VuZHRvKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncywgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbik7CisgICAgaWYgKCF0aW1lb3V0KSB7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgIG4gPSBzZW5kdG8ocy0+c29ja19mZCwgYnVmLCAoaW50KWxlbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbik7CisjZWxzZQorICAgICAgICBuID0gc2VuZHRvKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCBhZGRybGVuKTsKKyNlbmRpZgorICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHRpbWVvdXQgPT0gMSkgewpAQCAtMzk1Miw2ICszOTA2LDEyIEBACiAKIC8qIEluaXRpYWxpemUgYSBuZXcgc29ja2V0IG9iamVjdC4gKi8KIAorI2lmZGVmIFNPQ0tfQ0xPRVhFQworLyogc29ja2V0KCkgYW5kIHNvY2tldHBhaXIoKSBmYWlsIHdpdGggRUlOVkFMIG9uIExpbnV4IGtlcm5lbCBvbGRlcgorICogdGhhbiAyLjYuMjcgaWYgU09DS19DTE9FWEVDIGZsYWcgaXMgc2V0IGluIHRoZSBzb2NrZXQgdHlwZS4gKi8KK3N0YXRpYyBpbnQgc29ja19jbG9leGVjX3dvcmtzID0gLTE7CisjZW5kaWYKKwogLypBUkdTVVNFRCovCiBzdGF0aWMgaW50CiBzb2NrX2luaXRvYmooUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKQEAgLTM5NjEsNiArMzkyMSwxMyBAQAogICAgIFNPQ0tFVF9UIGZkID0gSU5WQUxJRF9TT0NLRVQ7CiAgICAgaW50IGZhbWlseSA9IEFGX0lORVQsIHR5cGUgPSBTT0NLX1NUUkVBTSwgcHJvdG8gPSAwOwogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJmYW1pbHkiLCAidHlwZSIsICJwcm90byIsICJmaWxlbm8iLCAwfTsKKyNpZm5kZWYgTVNfV0lORE9XUworI2lmZGVmIFNPQ0tfQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmc29ja19jbG9leGVjX3dvcmtzOworI2Vsc2UKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorI2VuZGlmCiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ8aWlpTzpzb2NrZXQiLCBrZXl3b3JkcywKQEAgLTQwMDUsMTQgKzM5NzIsNzQgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIC8qIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gKi8KKyNpZm5kZWYgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQKKyNkZWZpbmUgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQgMHg4MAorI2VuZGlmCisKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgaWYgKHN1cHBvcnRfd3NhX25vX2luaGVyaXQpIHsKKyAgICAgICAgICAgIGZkID0gV1NBU29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NBX0ZMQUdfT1ZFUkxBUFBFRCB8IFdTQV9GTEFHX05PX0hBTkRMRV9JTkhFUklUKTsKKyAgICAgICAgICAgIGlmIChmZCA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgICAgICAgICAgIC8qIFdpbmRvd3MgNyBvciBXaW5kb3dzIDIwMDggUjIgd2l0aG91dCBTUDEgb3IgdGhlIGhvdGZpeCAqLworICAgICAgICAgICAgICAgIHN1cHBvcnRfd3NhX25vX2luaGVyaXQgPSAwOworICAgICAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgIH0KICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgICAgICBpZiAoZmQgPT0gSU5WQUxJRF9TT0NLRVQpIHsKICAgICAgICAgICAgIHNldF9lcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdXBwb3J0X3dzYV9ub19pbmhlcml0KSB7CisgICAgICAgICAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpZmQsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIDApKSB7CisgICAgICAgICAgICAgICAgY2xvc2Vzb2NrZXQoZmQpOworICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgLyogVU5JWCAqLworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgICAgIGlmIChzb2NrX2Nsb2V4ZWNfd29ya3MgIT0gMCkgeworICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlIHwgU09DS19DTE9FWEVDLCBwcm90byk7CisgICAgICAgICAgICBpZiAoc29ja19jbG9leGVjX3dvcmtzID09IC0xKSB7CisgICAgICAgICAgICAgICAgaWYgKGZkID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc29ja19jbG9leGVjX3dvcmtzID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJybm8gPT0gRUlOVkFMKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIExpbnV4IG9sZGVyIHRoYW4gMi42LjI3IGRvZXMgbm90IHN1cHBvcnQgU09DS19DTE9FWEVDICovCisgICAgICAgICAgICAgICAgICAgIHNvY2tfY2xvZXhlY193b3JrcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgIH0KKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBpZiAoZmQgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgICAgICAgIHNldF9lcnJvcigpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgICAgIFNPQ0tFVENMT1NFKGZkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQogICAgIGluaXRfc29ja29iamVjdChzLCBmZCwgZmFtaWx5LCB0eXBlLCBwcm90byk7CiAKQEAgLTQ1NzgsMTYgKzQ2MDUsMzYgQEAKIHsKICAgICBTT0NLRVRfVCBmZCwgbmV3ZmQ7CiAgICAgUHlPYmplY3QgKm5ld2Zkb2JqOwotCisjaWZkZWYgTVNfV0lORE9XUworICAgIFdTQVBST1RPQ09MX0lORk8gaW5mbzsKKyNlbmRpZgogCiAgICAgZmQgPSBQeUxvbmdfQXNTb2NrZXRfdChmZG9iaik7CiAgICAgaWYgKGZkID09IChTT0NLRVRfVCkoLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbmV3ZmQgPSBkdXBfc29ja2V0KGZkKTsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKFdTQUR1cGxpY2F0ZVNvY2tldChmZCwgR2V0Q3VycmVudFByb2Nlc3NJZCgpLCAmaW5mbykpCisgICAgICAgIHJldHVybiBzZXRfZXJyb3IoKTsKKworICAgIG5ld2ZkID0gV1NBU29ja2V0KEZST01fUFJPVE9DT0xfSU5GTywgRlJPTV9QUk9UT0NPTF9JTkZPLAorICAgICAgICAgICAgICAgICAgICAgIEZST01fUFJPVE9DT0xfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAmaW5mbywgMCwgV1NBX0ZMQUdfT1ZFUkxBUFBFRCk7CiAgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUKQogICAgICAgICByZXR1cm4gc2V0X2Vycm9yKCk7CiAKKyAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpbmV3ZmQsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIDApKSB7CisgICAgICAgIGNsb3Nlc29ja2V0KG5ld2ZkKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbHNlCisgICAgLyogT24gVU5JWCwgZHVwIGNhbiBiZSB1c2VkIHRvIGR1cGxpY2F0ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGEgc29ja2V0ICovCisgICAgbmV3ZmQgPSBfUHlfZHVwKGZkKTsKKyAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQpCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmCisKICAgICBuZXdmZG9iaiA9IFB5TG9uZ19Gcm9tU29ja2V0X3QobmV3ZmQpOwogICAgIGlmIChuZXdmZG9iaiA9PSBOVUxMKQogICAgICAgICBTT0NLRVRDTE9TRShuZXdmZCk7CkBAIC00NjE1LDYgKzQ2NjIsMTIgQEAKICAgICBTT0NLRVRfVCBzdlsyXTsKICAgICBpbnQgZmFtaWx5LCB0eXBlID0gU09DS19TVFJFQU0sIHByb3RvID0gMDsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gJnNvY2tfY2xvZXhlY193b3JrczsKKyNlbHNlCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKKyAgICBpbnQgcmV0OwogCiAjaWYgZGVmaW5lZChBRl9VTklYKQogICAgIGZhbWlseSA9IEFGX1VOSVg7CkBAIC00NjI0LDkgKzQ2NzcsMzggQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpaWk6c29ja2V0cGFpciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYW1pbHksICZ0eXBlLCAmcHJvdG8pKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIC8qIENyZWF0ZSBhIHBhaXIgb2Ygc29ja2V0IGZkcyAqLwotICAgIGlmIChzb2NrZXRwYWlyKGZhbWlseSwgdHlwZSwgcHJvdG8sIHN2KSA8IDApCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworI2lmZGVmIFNPQ0tfQ0xPRVhFQworICAgIGlmIChzb2NrX2Nsb2V4ZWNfd29ya3MgIT0gMCkgeworICAgICAgICByZXQgPSBzb2NrZXRwYWlyKGZhbWlseSwgdHlwZSB8IFNPQ0tfQ0xPRVhFQywgcHJvdG8sIHN2KTsKKyAgICAgICAgaWYgKHNvY2tfY2xvZXhlY193b3JrcyA9PSAtMSkgeworICAgICAgICAgICAgaWYgKHJldCA+PSAwKSB7CisgICAgICAgICAgICAgICAgc29ja19jbG9leGVjX3dvcmtzID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGVycm5vID09IEVJTlZBTCkgeworICAgICAgICAgICAgICAgIC8qIExpbnV4IG9sZGVyIHRoYW4gMi42LjI3IGRvZXMgbm90IHN1cHBvcnQgU09DS19DTE9FWEVDICovCisgICAgICAgICAgICAgICAgc29ja19jbG9leGVjX3dvcmtzID0gMDsKKyAgICAgICAgICAgICAgICByZXQgPSBzb2NrZXRwYWlyKGZhbWlseSwgdHlwZSwgcHJvdG8sIHN2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIHJldCA9IHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlLCBwcm90bywgc3YpOworICAgIH0KKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKHJldCA8IDApCiAgICAgICAgIHJldHVybiBzZXRfZXJyb3IoKTsKKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHN2WzBdLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKQorICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoc3ZbMV0sIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApCisgICAgICAgIGdvdG8gZmluYWxseTsKKwogICAgIHMwID0gbmV3X3NvY2tvYmplY3Qoc3ZbMF0sIGZhbWlseSwgdHlwZSwgcHJvdG8pOwogICAgIGlmIChzMCA9PSBOVUxMKQogICAgICAgICBnb3RvIGZpbmFsbHk7CkBAIC00NjQ4LDcgKzQ3MzAsNyBAQAogfQogCiBQeURvY19TVFJWQVIoc29ja2V0cGFpcl9kb2MsCi0ic29ja2V0cGFpcihbZmFtaWx5WywgdHlwZVssIHByb3RvXV1dKSAtPiAoc29ja2V0IG9iamVjdCwgc29ja2V0IG9iamVjdClcblwKKyJzb2NrZXRwYWlyKFtmYW1pbHlbLCB0eXBlIFssIHByb3RvXV1dKSAtPiAoc29ja2V0IG9iamVjdCwgc29ja2V0IG9iamVjdClcblwKIFxuXAogQ3JlYXRlIGEgcGFpciBvZiBzb2NrZXQgb2JqZWN0cyBmcm9tIHRoZSBzb2NrZXRzIHJldHVybmVkIGJ5IHRoZSBwbGF0Zm9ybVxuXAogc29ja2V0cGFpcigpIGZ1bmN0aW9uLlxuXApAQCAtNDc4Miw5ICs0ODY0LDYgQEAKIHN0YXRpYyBQeU9iamVjdCoKIHNvY2tldF9pbmV0X2F0b24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotI2lmbmRlZiBJTkFERFJfTk9ORQotI2RlZmluZSBJTkFERFJfTk9ORSAoLTEpCi0jZW5kaWYKICNpZmRlZiBIQVZFX0lORVRfQVRPTgogICAgIHN0cnVjdCBpbl9hZGRyIGJ1ZjsKICNlbmRpZgpAQCAtNDgyNiw3ICs0OTA1LDcgQEAKICAgICAvKiBzcGVjaWFsLWNhc2UgdGhpcyBhZGRyZXNzIGFzIGluZXRfYWRkciBtaWdodCByZXR1cm4gSU5BRERSX05PTkUKICAgICAgKiBmb3IgdGhpcyAqLwogICAgIGlmIChzdHJjbXAoaXBfYWRkciwgIjI1NS4yNTUuMjU1LjI1NSIpID09IDApIHsKLSAgICAgICAgcGFja2VkX2FkZHIgPSAweEZGRkZGRkZGOworICAgICAgICBwYWNrZWRfYWRkciA9IElOQUREUl9CUk9BRENBU1Q7CiAgICAgfSBlbHNlIHsKIAogICAgICAgICBwYWNrZWRfYWRkciA9IGluZXRfYWRkcihpcF9hZGRyKTsKQEAgLTQ4NzQsNyArNDk1Myw3IEBACiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGluZXRfbnRvYShwYWNrZWRfYWRkcikpOwogfQogCi0jaWZkZWYgSEFWRV9JTkVUX1BUT04KKyNpZiBkZWZpbmVkKEhBVkVfSU5FVF9QVE9OKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCiAKIFB5RG9jX1NUUlZBUihpbmV0X3B0b25fZG9jLAogImluZXRfcHRvbihhZiwgaXApIC0+IHBhY2tlZCBJUCBhZGRyZXNzIHN0cmluZ1xuXApAQCAtNDg4Miw2ICs0OTYxLDEwIEBACiBDb252ZXJ0IGFuIElQIGFkZHJlc3MgZnJvbSBzdHJpbmcgZm9ybWF0IHRvIGEgcGFja2VkIHN0cmluZyBzdWl0YWJsZVxuXAogZm9yIHVzZSB3aXRoIGxvdy1sZXZlbCBuZXR3b3JrIGZ1bmN0aW9ucy4iKTsKIAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0lORVRfUFRPTgorCiBzdGF0aWMgUHlPYmplY3QgKgogc29ja2V0X2luZXRfcHRvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC00ODg5LDcgKzQ5NzIsNyBAQAogICAgIGNoYXIqIGlwOwogICAgIGludCByZXR2YWw7CiAjaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBjaGFyIHBhY2tlZFtNQVgoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXTsKKyAgICBjaGFyIHBhY2tlZFtQeV9NQVgoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpXTsKICNlbHNlCiAgICAgY2hhciBwYWNrZWRbc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKV07CiAjZW5kaWYKQEAgLTQ5MjYsMTIgKzUwMDksNTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogfQorI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKQorCitzdGF0aWMgUHlPYmplY3QgKgorc29ja2V0X2luZXRfcHRvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGFmOworICAgIGNoYXIqIGlwOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKyAgICBJTlQgcmV0LCBzaXplOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpczppbmV0X3B0b24iLCAmYWYsICZpcCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2l6ZSA9IHNpemVvZihhZGRyKTsKKyAgICByZXQgPSBXU0FTdHJpbmdUb0FkZHJlc3NBKGlwLCBhZiwgTlVMTCwgKExQU09DS0FERFIpJmFkZHIsICZzaXplKTsKKworICAgIGlmIChyZXQpIHsKKyAgICAgICAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoUHlFeGNfT1NFcnJvciwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgaWYoYWYgPT0gQUZfSU5FVCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiopJmFkZHI7CisgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjb25zdCBjaGFyICopJihhZGRyNC0+c2luX2FkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYWRkcjQtPnNpbl9hZGRyKSk7CisgICAgfSBlbHNlIGlmIChhZiA9PSBBRl9JTkVUNikgeworICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKSYoYWRkci5zaW42X2FkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFkZHIuc2luNl9hZGRyKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsICJ1bmtub3duIGFkZHJlc3MgZmFtaWx5Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfSU5FVF9QVE9OKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCiAKIFB5RG9jX1NUUlZBUihpbmV0X250b3BfZG9jLAogImluZXRfbnRvcChhZiwgcGFja2VkX2lwKSAtPiBzdHJpbmcgZm9ybWF0dGVkIElQIGFkZHJlc3NcblwKIFxuXAogQ29udmVydCBhIHBhY2tlZCBJUCBhZGRyZXNzIG9mIHRoZSBnaXZlbiBmYW1pbHkgdG8gc3RyaW5nIGZvcm1hdC4iKTsKIAorI2VuZGlmCisKKworI2lmZGVmIEhBVkVfSU5FVF9QVE9OCiBzdGF0aWMgUHlPYmplY3QgKgogc29ja2V0X2luZXRfbnRvcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC00OTQwLDcgKzUwNjMsNyBAQAogICAgIGludCBsZW47CiAgICAgY29uc3QgY2hhciogcmV0dmFsOwogI2lmZGVmIEVOQUJMRV9JUFY2Ci0gICAgY2hhciBpcFtNQVgoSU5FVF9BRERSU1RSTEVOLCBJTkVUNl9BRERSU1RSTEVOKSArIDFdOworICAgIGNoYXIgaXBbUHlfTUFYKElORVRfQUREUlNUUkxFTiwgSU5FVDZfQUREUlNUUkxFTikgKyAxXTsKICNlbHNlCiAgICAgY2hhciBpcFtJTkVUX0FERFJTVFJMRU4gKyAxXTsKICNlbmRpZgpAQCAtNDk4NSw2ICs1MTA4LDcwIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKyNlbGlmIGRlZmluZWQoTVNfV0lORE9XUykKKworc3RhdGljIFB5T2JqZWN0ICoKK3NvY2tldF9pbmV0X250b3AoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBhZjsKKyAgICBjaGFyKiBwYWNrZWQ7CisgICAgaW50IGxlbjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisgICAgRFdPUkQgYWRkcmxlbiwgcmV0LCByZXRsZW47CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICBjaGFyIGlwW1B5X01BWChJTkVUX0FERFJTVFJMRU4sIElORVQ2X0FERFJTVFJMRU4pICsgMV07CisjZWxzZQorICAgIGNoYXIgaXBbSU5FVF9BRERSU1RSTEVOICsgMV07CisjZW5kaWYKKworICAgIC8qIEd1YXJhbnRlZSBOVUwtdGVybWluYXRpb24gZm9yIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCkgYmVsb3cgKi8KKyAgICBtZW1zZXQoKHZvaWQgKikgJmlwWzBdLCAnXDAnLCBzaXplb2YoaXApKTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXkjOmluZXRfbnRvcCIsICZhZiwgJnBhY2tlZCwgJmxlbikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGFmID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICogYWRkcjQgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmFkZHI7CisKKyAgICAgICAgaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBsZW5ndGggb2YgcGFja2VkIElQIGFkZHJlc3Mgc3RyaW5nIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQoYWRkcjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgICAgICAgYWRkcjQtPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBtZW1jcHkoJihhZGRyNC0+c2luX2FkZHIpLCBwYWNrZWQsIHNpemVvZihhZGRyNC0+c2luX2FkZHIpKTsKKyAgICAgICAgYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICAgIH0gZWxzZSBpZiAoYWYgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgImludmFsaWQgbGVuZ3RoIG9mIHBhY2tlZCBJUCBhZGRyZXNzIHN0cmluZyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICAgIGFkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgbWVtY3B5KCYoYWRkci5zaW42X2FkZHIpLCBwYWNrZWQsIHNpemVvZihhZGRyLnNpbjZfYWRkcikpOworICAgICAgICBhZGRybGVuID0gc2l6ZW9mKGFkZHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgInVua25vd24gYWRkcmVzcyBmYW1pbHkgJWQiLCBhZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldGxlbiA9IHNpemVvZihpcCk7CisgICAgcmV0ID0gV1NBQWRkcmVzc1RvU3RyaW5nQSgoc3RydWN0IHNvY2thZGRyKikmYWRkciwgYWRkcmxlbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwLCAmcmV0bGVuKTsKKworICAgIGlmIChyZXQpIHsKKyAgICAgICAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoUHlFeGNfT1NFcnJvciwgV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoaXApOworICAgIH0KK30KKwogI2VuZGlmIC8qIEhBVkVfSU5FVF9QVE9OICovCiAKIC8qIFB5dGhvbiBpbnRlcmZhY2UgdG8gZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCkuICovCkBAIC01MDA2LDcgKzUxOTMsNyBAQAogICAgIFB5T2JqZWN0ICphbGwgPSAoUHlPYmplY3QgKilOVUxMOwogICAgIFB5T2JqZWN0ICppZG5hID0gTlVMTDsKIAotICAgIGZhbWlseSA9IHNvY2t0eXBlID0gcHJvdG9jb2wgPSBmbGFncyA9IDA7CisgICAgc29ja3R5cGUgPSBwcm90b2NvbCA9IGZsYWdzID0gMDsKICAgICBmYW1pbHkgPSBBRl9VTlNQRUM7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT098aWlpaTpnZXRhZGRyaW5mbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bmFtZXMsICZob2JqLCAmcG9iaiwgJmZhbWlseSwgJnNvY2t0eXBlLApAQCAtNTA1MSw5ICs1MjM4LDkgQEAKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChBSV9OVU1FUklDU0VSVikKICAgICBpZiAoKGZsYWdzICYgQUlfTlVNRVJJQ1NFUlYpICYmIChwcHRyID09IE5VTEwgfHwgKHBwdHJbMF0gPT0gJzAnICYmIHBwdHJbMV0gPT0gMCkpKSB7CiAgICAgICAgIC8qIE9uIE9TWCB1cHRvIGF0IGxlYXN0IE9TWCAxMC44IGdldGFkZHJpbmZvIGNyYXNoZXMKLQkgKiBpZiBBSV9OVU1FUklDU0VSViBpcyBzZXQgYW5kIHRoZSBzZXJ2bmFtZSBpcyBOVUxMIG9yICIwIi4KLQkgKiBUaGlzIHdvcmthcm91bmQgYXZvaWRzIGEgc2VnZmF1bHQgaW4gbGlic3lzdGVtLgotCSAqLworICAgICAgICAgKiBpZiBBSV9OVU1FUklDU0VSViBpcyBzZXQgYW5kIHRoZSBzZXJ2bmFtZSBpcyBOVUxMIG9yICIwIi4KKyAgICAgICAgICogVGhpcyB3b3JrYXJvdW5kIGF2b2lkcyBhIHNlZ2ZhdWx0IGluIGxpYnN5c3RlbS4KKyAgICAgICAgICovCiAgICAgICAgIHBwdHIgPSAiMDAiOwogICAgIH0KICNlbmRpZgpAQCAtNTQ1MSw3ICs1NjM4LDcgQEAKICAgICAgTUVUSF9WQVJBUkdTLCBpbmV0X2F0b25fZG9jfSwKICAgICB7ImluZXRfbnRvYSIsICAgICAgICAgICAgICAgc29ja2V0X2luZXRfbnRvYSwKICAgICAgTUVUSF9WQVJBUkdTLCBpbmV0X250b2FfZG9jfSwKLSNpZmRlZiBIQVZFX0lORVRfUFRPTgorI2lmIGRlZmluZWQoSEFWRV9JTkVUX1BUT04pIHx8IGRlZmluZWQoTVNfV0lORE9XUykKICAgICB7ImluZXRfcHRvbiIsICAgICAgICAgICAgICAgc29ja2V0X2luZXRfcHRvbiwKICAgICAgTUVUSF9WQVJBUkdTLCBpbmV0X3B0b25fZG9jfSwKICAgICB7ImluZXRfbnRvcCIsICAgICAgICAgICAgICAgc29ja2V0X2luZXRfbnRvcCwKQEAgLTU1MjYsMzIgKzU3MTMsNiBAQAogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAogCi0jaWZkZWYgUFlPU19PUzIKLSNkZWZpbmUgT1NfSU5JVF9ERUZJTkVECi0KLS8qIEFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gZm9yIE9TLzIgKi8KLQotc3RhdGljIGludAotb3NfaW5pdCh2b2lkKQotewotI2lmbmRlZiBQWUNDX0dDQwotICAgIGludCByYyA9IHNvY2tfaW5pdCgpOwotCi0gICAgaWYgKHJjID09IDApIHsKLSAgICAgICAgcmV0dXJuIDE7IC8qIFN1Y2Nlc3MgKi8KLSAgICB9Ci0KLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsICJPUy8yIFRDUC9JUCBFcnJvciMgJWQiLCBzb2NrX2Vycm5vKCkpOwotCi0gICAgcmV0dXJuIDA7ICAvKiBGYWlsdXJlICovCi0jZWxzZQotICAgIC8qIE5vIG5lZWQgdG8gaW5pdGlhbGl6ZSBzb2NrZXRzIHdpdGggR0NDL0VNWCAqLwotICAgIHJldHVybiAxOyAvKiBTdWNjZXNzICovCi0jZW5kaWYKLX0KLQotI2VuZGlmIC8qIFBZT1NfT1MyICovCi0KIAogI2lmbmRlZiBPU19JTklUX0RFRklORUQKIHN0YXRpYyBpbnQKQEAgLTU2MDgsNiArNTc2OSwxNiBAQAogICAgIGlmICghb3NfaW5pdCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9PSAtMSkgeworICAgICAgICBEV09SRCB2ZXJzaW9uID0gR2V0VmVyc2lvbigpOworICAgICAgICBEV09SRCBtYWpvciA9IChEV09SRClMT0JZVEUoTE9XT1JEKHZlcnNpb24pKTsKKyAgICAgICAgRFdPUkQgbWlub3IgPSAoRFdPUkQpSElCWVRFKExPV09SRCh2ZXJzaW9uKSk7CisgICAgICAgIC8qIG5lZWQgV2luZG93cyA3IFNQMSwgMjAwOCBSMiBTUDEgb3IgbGF0ZXIgKi8KKyAgICAgICAgc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9IChtYWpvciA+PSA2ICYmIG1pbm9yID49IDEpOworICAgIH0KKyNlbmRpZgorCiAgICAgUHlfVFlQRSgmc29ja190eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzb2NrZXRtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCkBAIC01NjYxLDE4NCArNTgzMiwxODcgQEAKIAogICAgIC8qIEFkZHJlc3MgZmFtaWxpZXMgKHdlIG9ubHkgc3VwcG9ydCBBRl9JTkVUIGFuZCBBRl9VTklYKSAqLwogI2lmZGVmIEFGX1VOU1BFQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9VTlNQRUMiLCBBRl9VTlNQRUMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1VOU1BFQyk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSU5FVCIsIEFGX0lORVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lORVQpOwogI2lmZGVmIEFGX0lORVQ2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lORVQ2IiwgQUZfSU5FVDYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lORVQ2KTsKICNlbmRpZiAvKiBBRl9JTkVUNiAqLwogI2lmIGRlZmluZWQoQUZfVU5JWCkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfVU5JWCIsIEFGX1VOSVgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1VOSVgpOwogI2VuZGlmIC8qIEFGX1VOSVggKi8KICNpZmRlZiBBRl9BWDI1CiAgICAgLyogQW1hdGV1ciBSYWRpbyBBWC4yNSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BWDI1IiwgQUZfQVgyNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVgyNSk7CiAjZW5kaWYKICNpZmRlZiBBRl9JUFgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSVBYIiwgQUZfSVBYKTsgLyogTm92ZWxsIElQWCAqLworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lQWCk7IC8qIE5vdmVsbCBJUFggKi8KICNlbmRpZgogI2lmZGVmIEFGX0FQUExFVEFMSwogICAgIC8qIEFwcGxldGFsayBERFAgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVBQTEVUQUxLIiwgQUZfQVBQTEVUQUxLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BUFBMRVRBTEspOwogI2VuZGlmCiAjaWZkZWYgQUZfTkVUUk9NCiAgICAgLyogQW1hdGV1ciByYWRpbyBOZXRST00gKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfTkVUUk9NIiwgQUZfTkVUUk9NKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ORVRST00pOwogI2VuZGlmCiAjaWZkZWYgQUZfQlJJREdFCiAgICAgLyogTXVsdGlwcm90b2NvbCBicmlkZ2UgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQlJJREdFIiwgQUZfQlJJREdFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9CUklER0UpOwogI2VuZGlmCiAjaWZkZWYgQUZfQVRNUFZDCiAgICAgLyogQVRNIFBWQ3MgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVRNUFZDIiwgQUZfQVRNUFZDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BVE1QVkMpOwogI2VuZGlmCiAjaWZkZWYgQUZfQUFMNQogICAgIC8qIFJlc2VydmVkIGZvciBXZXJuZXIncyBBVE0gKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQUFMNSIsIEFGX0FBTDUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FBTDUpOwogI2VuZGlmCiAjaWZkZWYgQUZfWDI1CiAgICAgLyogUmVzZXJ2ZWQgZm9yIFguMjUgcHJvamVjdCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9YMjUiLCBBRl9YMjUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1gyNSk7CiAjZW5kaWYKICNpZmRlZiBBRl9JTkVUNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JTkVUNiIsIEFGX0lORVQ2KTsgLyogSVAgdmVyc2lvbiA2ICovCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSU5FVDYpOyAvKiBJUCB2ZXJzaW9uIDYgKi8KICNlbmRpZgogI2lmZGVmIEFGX1JPU0UKICAgICAvKiBBbWF0ZXVyIFJhZGlvIFguMjUgUExQICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1JPU0UiLCBBRl9ST1NFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ST1NFKTsKICNlbmRpZgogI2lmZGVmIEFGX0RFQ25ldAogICAgIC8qIFJlc2VydmVkIGZvciBERUNuZXQgcHJvamVjdCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ERUNuZXQiLCBBRl9ERUNuZXQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0RFQ25ldCk7CiAjZW5kaWYKICNpZmRlZiBBRl9ORVRCRVVJCiAgICAgLyogUmVzZXJ2ZWQgZm9yIDgwMi4yTExDIHByb2plY3QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfTkVUQkVVSSIsIEFGX05FVEJFVUkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX05FVEJFVUkpOwogI2VuZGlmCiAjaWZkZWYgQUZfU0VDVVJJVFkKICAgICAvKiBTZWN1cml0eSBjYWxsYmFjayBwc2V1ZG8gQUYgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfU0VDVVJJVFkiLCBBRl9TRUNVUklUWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfU0VDVVJJVFkpOwogI2VuZGlmCiAjaWZkZWYgQUZfS0VZCiAgICAgLyogUEZfS0VZIGtleSBtYW5hZ2VtZW50IEFQSSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9LRVkiLCBBRl9LRVkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0tFWSk7CiAjZW5kaWYKICNpZmRlZiBBRl9ORVRMSU5LCiAgICAgLyogICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX05FVExJTksiLCBBRl9ORVRMSU5LKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19ST1VURSIsIE5FVExJTktfUk9VVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX05FVExJTkspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfUk9VVEUpOwogI2lmZGVmIE5FVExJTktfU0tJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1NLSVAiLCBORVRMSU5LX1NLSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfU0tJUCk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1cxCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfVzEiLCBORVRMSU5LX1cxKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1cxKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1VTRVJTT0NLIiwgTkVUTElOS19VU0VSU09DSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfRklSRVdBTEwiLCBORVRMSU5LX0ZJUkVXQUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1VTRVJTT0NLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX0ZJUkVXQUxMKTsKICNpZmRlZiBORVRMSU5LX1RDUERJQUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19UQ1BESUFHIiwgTkVUTElOS19UQ1BESUFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1RDUERJQUcpOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19ORkxPRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX05GTE9HIiwgTkVUTElOS19ORkxPRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19ORkxPRyk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1hGUk0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19YRlJNIiwgTkVUTElOS19YRlJNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1hGUk0pOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19BUlBECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfQVJQRCIsIE5FVExJTktfQVJQRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19BUlBEKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfUk9VVEU2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfUk9VVEU2IiwgTkVUTElOS19ST1VURTYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfUk9VVEU2KTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0lQNl9GVyIsIE5FVExJTktfSVA2X0ZXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX0lQNl9GVyk7CiAjaWZkZWYgTkVUTElOS19ETlJUTVNHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfRE5SVE1TRyIsIE5FVExJTktfRE5SVE1TRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19ETlJUTVNHKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfVEFQQkFTRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1RBUEJBU0UiLCBORVRMSU5LX1RBUEJBU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfVEFQQkFTRSk7CiAjZW5kaWYKICNlbmRpZiAvKiBBRl9ORVRMSU5LICovCiAjaWZkZWYgQUZfUk9VVEUKICAgICAvKiBBbGlhcyB0byBlbXVsYXRlIDQuNEJTRCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ST1VURSIsIEFGX1JPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ST1VURSk7CisjZW5kaWYKKyNpZmRlZiBBRl9MSU5LCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTElOSyk7CiAjZW5kaWYKICNpZmRlZiBBRl9BU0gKICAgICAvKiBBc2ggKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVNIIiwgQUZfQVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BU0gpOwogI2VuZGlmCiAjaWZkZWYgQUZfRUNPTkVUCiAgICAgLyogQWNvcm4gRWNvbmV0ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0VDT05FVCIsIEFGX0VDT05FVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfRUNPTkVUKTsKICNlbmRpZgogI2lmZGVmIEFGX0FUTVNWQwogICAgIC8qIEFUTSBTVkNzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FUTVNWQyIsIEFGX0FUTVNWQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVRNU1ZDKTsKICNlbmRpZgogI2lmZGVmIEFGX1NOQQogICAgIC8qIExpbnV4IFNOQSBQcm9qZWN0IChudXR0ZXJzISkgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfU05BIiwgQUZfU05BKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9TTkEpOwogI2VuZGlmCiAjaWZkZWYgQUZfSVJEQQogICAgIC8qIElSREEgc29ja2V0cyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JUkRBIiwgQUZfSVJEQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSVJEQSk7CiAjZW5kaWYKICNpZmRlZiBBRl9QUFBPWAogICAgIC8qIFBQUG9YIHNvY2tldHMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUFBQT1giLCBBRl9QUFBPWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUFBQT1gpOwogI2VuZGlmCiAjaWZkZWYgQUZfV0FOUElQRQogICAgIC8qIFdhbnBpcGUgQVBJIFNvY2tldHMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfV0FOUElQRSIsIEFGX1dBTlBJUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1dBTlBJUEUpOwogI2VuZGlmCiAjaWZkZWYgQUZfTExDCiAgICAgLyogTGludXggTExDICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0xMQyIsIEFGX0xMQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTExDKTsKICNlbmRpZgogCiAjaWZkZWYgVVNFX0JMVUVUT09USAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9CTFVFVE9PVEgiLCBBRl9CTFVFVE9PVEgpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX0wyQ0FQIiwgQlRQUk9UT19MMkNBUCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fSENJIiwgQlRQUk9UT19IQ0kpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfSENJIiwgU09MX0hDSSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQkxVRVRPT1RIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBCVFBST1RPX0wyQ0FQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBCVFBST1RPX0hDSSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0hDSSk7CiAjaWYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSENJX0ZJTFRFUiIsIEhDSV9GSUxURVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEhDSV9GSUxURVIpOwogI2VuZGlmCiAjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pCiAjaWYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSENJX1RJTUVfU1RBTVAiLCBIQ0lfVElNRV9TVEFNUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSENJX1RJTUVfU1RBTVApOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkhDSV9EQVRBX0RJUiIsIEhDSV9EQVRBX0RJUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fU0NPIiwgQlRQUk9UT19TQ08pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEhDSV9EQVRBX0RJUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQlRQUk9UT19TQ08pOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fUkZDT01NIiwgQlRQUk9UT19SRkNPTU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEJUUFJPVE9fUkZDT01NKTsKICAgICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtLCAiQkRBRERSX0FOWSIsICIwMDowMDowMDowMDowMDowMCIpOwogICAgIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJCREFERFJfTE9DQUwiLCAiMDA6MDA6MDA6RkY6RkY6RkYiKTsKICNlbmRpZgogCiAjaWZkZWYgQUZfQ0FOCiAgICAgLyogQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQ0FOIiwgQUZfQ0FOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9DQU4pOwogI2VuZGlmCiAjaWZkZWYgUEZfQ0FOCiAgICAgLyogQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEZfQ0FOIiwgUEZfQ0FOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQRl9DQU4pOwogI2VuZGlmCiAKIC8qIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKi8KICNpZmRlZiBBRl9SRFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUkRTIiwgQUZfUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9SRFMpOwogI2VuZGlmCiAjaWZkZWYgUEZfUkRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBGX1JEUyIsIFBGX1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEZfUkRTKTsKICNlbmRpZgogCiAvKiBLZXJuZWwgZXZlbnQgbWVzc2FnZXMgKi8KICNpZmRlZiBQRl9TWVNURU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEZfU1lTVEVNIiwgUEZfU1lTVEVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQRl9TWVNURU0pOwogI2VuZGlmCiAjaWZkZWYgQUZfU1lTVEVNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1NZU1RFTSIsIEFGX1NZU1RFTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfU1lTVEVNKTsKICNlbmRpZgogCiAjaWZkZWYgQUZfUEFDS0VUCkBAIC01ODcwLDQ0NyArNjA0NCw0NjMgQEAKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9MSU5VWF9USVBDX0gKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfVElQQyIsIEFGX1RJUEMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1RJUEMpOwogCiAgICAgLyogZm9yIGFkZHJlc3NlcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0FERFJfTkFNRVNFUSIsIFRJUENfQUREUl9OQU1FU0VRKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19BRERSX05BTUUiLCBUSVBDX0FERFJfTkFNRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQUREUl9JRCIsIFRJUENfQUREUl9JRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19BRERSX05BTUVTRVEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQUREUl9OQU1FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0FERFJfSUQpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfWk9ORV9TQ09QRSIsIFRJUENfWk9ORV9TQ09QRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQ0xVU1RFUl9TQ09QRSIsIFRJUENfQ0xVU1RFUl9TQ09QRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfTk9ERV9TQ09QRSIsIFRJUENfTk9ERV9TQ09QRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19aT05FX1NDT1BFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0NMVVNURVJfU0NPUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfTk9ERV9TQ09QRSk7CiAKICAgICAvKiBmb3Igc2V0c29ja29wdCgpICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9USVBDIiwgU09MX1RJUEMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0lNUE9SVEFOQ0UiLCBUSVBDX0lNUE9SVEFOQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NSQ19EUk9QUEFCTEUiLCBUSVBDX1NSQ19EUk9QUEFCTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0RFU1RfRFJPUFBBQkxFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19ERVNUX0RST1BQQUJMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQ09OTl9USU1FT1VUIiwgVElQQ19DT05OX1RJTUVPVVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9USVBDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1JDX0RST1BQQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19ERVNUX0RST1BQQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19DT05OX1RJTUVPVVQpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfTE9XX0lNUE9SVEFOQ0UiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX0xPV19JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19NRURJVU1fSU1QT1JUQU5DRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfTUVESVVNX0lNUE9SVEFOQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0hJR0hfSU1QT1JUQU5DRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfSElHSF9JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0xPV19JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX01FRElVTV9JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0hJR0hfSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFKTsKIAogICAgIC8qIGZvciBzdWJzY3JpcHRpb25zICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1VCX1BPUlRTIiwgVElQQ19TVUJfUE9SVFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NVQl9TRVJWSUNFIiwgVElQQ19TVUJfU0VSVklDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19TVUJfUE9SVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCX1NFUlZJQ0UpOwogI2lmZGVmIFRJUENfU1VCX0NBTkNFTAogICAgIC8qIGRvZXNuJ3Qgc2VlbSB0byBiZSBhdmFpbGFibGUgZXZlcnl3aGVyZSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NVQl9DQU5DRUwiLCBUSVBDX1NVQl9DQU5DRUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCX0NBTkNFTCk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19XQUlUX0ZPUkVWRVIiLCBUSVBDX1dBSVRfRk9SRVZFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfUFVCTElTSEVEIiwgVElQQ19QVUJMSVNIRUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1dJVEhEUkFXTiIsIFRJUENfV0lUSERSQVdOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TVUJTQ1JfVElNRU9VVCIsIFRJUENfU1VCU0NSX1RJTUVPVVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0NGR19TUlYiLCBUSVBDX0NGR19TUlYpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1RPUF9TUlYiLCBUSVBDX1RPUF9TUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfV0FJVF9GT1JFVkVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1BVQkxJU0hFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19XSVRIRFJBV04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCU0NSX1RJTUVPVVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQ0ZHX1NSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19UT1BfU1JWKTsKICNlbmRpZgogCiAgICAgLyogU29ja2V0IHR5cGVzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfU1RSRUFNIiwgU09DS19TVFJFQU0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX0RHUkFNIiwgU09DS19ER1JBTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19TVFJFQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfREdSQU0pOwogLyogV2UgaGF2ZSBpbmNvbXBsZXRlIHNvY2tldCBzdXBwb3J0LiAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX1JBVyIsIFNPQ0tfUkFXKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19TRVFQQUNLRVQiLCBTT0NLX1NFUVBBQ0tFVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19SQVcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfU0VRUEFDS0VUKTsKICNpZiBkZWZpbmVkKFNPQ0tfUkRNKQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX1JETSIsIFNPQ0tfUkRNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX1JETSk7CiAjZW5kaWYKICNpZmRlZiBTT0NLX0NMT0VYRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19DTE9FWEVDIiwgU09DS19DTE9FWEVDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX0NMT0VYRUMpOwogI2VuZGlmCiAjaWZkZWYgU09DS19OT05CTE9DSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX05PTkJMT0NLIiwgU09DS19OT05CTE9DSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19OT05CTE9DSyk7CiAjZW5kaWYKIAogI2lmZGVmICBTT19ERUJVRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19ERUJVRyIsIFNPX0RFQlVHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19ERUJVRyk7CiAjZW5kaWYKICNpZmRlZiAgU09fQUNDRVBUQ09OTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19BQ0NFUFRDT05OIiwgU09fQUNDRVBUQ09OTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fQUNDRVBUQ09OTik7CiAjZW5kaWYKICNpZmRlZiAgU09fUkVVU0VBRERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JFVVNFQUREUiIsIFNPX1JFVVNFQUREUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkVVU0VBRERSKTsKICNlbmRpZgogI2lmZGVmIFNPX0VYQ0xVU0lWRUFERFJVU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fRVhDTFVTSVZFQUREUlVTRSIsIFNPX0VYQ0xVU0lWRUFERFJVU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0VYQ0xVU0lWRUFERFJVU0UpOwogI2VuZGlmCiAKICNpZmRlZiAgU09fS0VFUEFMSVZFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0tFRVBBTElWRSIsIFNPX0tFRVBBTElWRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fS0VFUEFMSVZFKTsKICNlbmRpZgogI2lmZGVmICBTT19ET05UUk9VVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fRE9OVFJPVVRFIiwgU09fRE9OVFJPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19ET05UUk9VVEUpOwogI2VuZGlmCiAjaWZkZWYgIFNPX0JST0FEQ0FTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19CUk9BRENBU1QiLCBTT19CUk9BRENBU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0JST0FEQ0FTVCk7CiAjZW5kaWYKICNpZmRlZiAgU09fVVNFTE9PUEJBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fVVNFTE9PUEJBQ0siLCBTT19VU0VMT09QQkFDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fVVNFTE9PUEJBQ0spOwogI2VuZGlmCiAjaWZkZWYgIFNPX0xJTkdFUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19MSU5HRVIiLCBTT19MSU5HRVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0xJTkdFUik7CiAjZW5kaWYKICNpZmRlZiAgU09fT09CSU5MSU5FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX09PQklOTElORSIsIFNPX09PQklOTElORSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fT09CSU5MSU5FKTsKICNlbmRpZgogI2lmZGVmICBTT19SRVVTRVBPUlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkVVU0VQT1JUIiwgU09fUkVVU0VQT1JUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SRVVTRVBPUlQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1NOREJVRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TTkRCVUYiLCBTT19TTkRCVUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1NOREJVRik7CiAjZW5kaWYKICNpZmRlZiAgU09fUkNWQlVGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JDVkJVRiIsIFNPX1JDVkJVRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkNWQlVGKTsKICNlbmRpZgogI2lmZGVmICBTT19TTkRMT1dBVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TTkRMT1dBVCIsIFNPX1NORExPV0FUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TTkRMT1dBVCk7CiAjZW5kaWYKICNpZmRlZiAgU09fUkNWTE9XQVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkNWTE9XQVQiLCBTT19SQ1ZMT1dBVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkNWTE9XQVQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1NORFRJTUVPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1NORFRJTUVPIiwgU09fU05EVElNRU8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1NORFRJTUVPKTsKICNlbmRpZgogI2lmZGVmICBTT19SQ1ZUSU1FTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SQ1ZUSU1FTyIsIFNPX1JDVlRJTUVPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SQ1ZUSU1FTyk7CiAjZW5kaWYKICNpZmRlZiAgU09fRVJST1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fRVJST1IiLCBTT19FUlJPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fRVJST1IpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1RZUEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fVFlQRSIsIFNPX1RZUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1RZUEUpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1NFVEZJQgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TRVRGSUIiLCBTT19TRVRGSUIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1NFVEZJQik7CiAjZW5kaWYKICNpZmRlZiAgU09fUEFTU0NSRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUEFTU0NSRUQiLCBTT19QQVNTQ1JFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUEFTU0NSRUQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1BFRVJDUkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1BFRVJDUkVEIiwgU09fUEVFUkNSRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1BFRVJDUkVEKTsKICNlbmRpZgogI2lmZGVmICBMT0NBTF9QRUVSQ1JFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0NBTF9QRUVSQ1JFRCIsIExPQ0FMX1BFRVJDUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NBTF9QRUVSQ1JFRCk7CiAjZW5kaWYKICNpZmRlZiAgU09fQklORFRPREVWSUNFCiAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fQklORFRPREVWSUNFKTsKICNlbmRpZgorI2lmZGVmICBTT19QUklPUklUWQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1BSSU9SSVRZKTsKKyNlbmRpZgogCiAgICAgLyogTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgZm9yICJsaXN0ZW4iICovCiAjaWZkZWYgIFNPTUFYQ09OTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT01BWENPTk4iLCBTT01BWENPTk4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTUFYQ09OTik7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT01BWENPTk4iLCA1KTsgLyogQ29tbW9uIHZhbHVlICovCiAjZW5kaWYKIAogICAgIC8qIEFuY2lsbGlhcnkgbWVzc2FnZSB0eXBlcyAqLwogI2lmZGVmICBTQ01fUklHSFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDTV9SSUdIVFMiLCBTQ01fUklHSFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ01fUklHSFRTKTsKICNlbmRpZgogI2lmZGVmICBTQ01fQ1JFREVOVElBTFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NNX0NSRURFTlRJQUxTIiwgU0NNX0NSRURFTlRJQUxTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ01fQ1JFREVOVElBTFMpOwogI2VuZGlmCiAjaWZkZWYgIFNDTV9DUkVEUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ01fQ1JFRFMiLCBTQ01fQ1JFRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDTV9DUkVEUyk7CiAjZW5kaWYKIAogICAgIC8qIEZsYWdzIGZvciBzZW5kLCByZWN2ICovCiAjaWZkZWYgIE1TR19PT0IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX09PQiIsIE1TR19PT0IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19PT0IpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19QRUVLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19QRUVLIiwgTVNHX1BFRUspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19QRUVLKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRE9OVFJPVVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19ET05UUk9VVEUiLCBNU0dfRE9OVFJPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRE9OVFJPVVRFKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRE9OVFdBSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0RPTlRXQUlUIiwgTVNHX0RPTlRXQUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRE9OVFdBSVQpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19FT1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VPUiIsIE1TR19FT1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19FT1IpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19UUlVOQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfVFJVTkMiLCBNU0dfVFJVTkMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19UUlVOQyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0NUUlVOQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQ1RSVU5DIiwgTVNHX0NUUlVOQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0NUUlVOQyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX1dBSVRBTEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX1dBSVRBTEwiLCBNU0dfV0FJVEFMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX1dBSVRBTEwpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19CVEFHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19CVEFHIiwgTVNHX0JUQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19CVEFHKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRVRBRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRVRBRyIsIE1TR19FVEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRVRBRyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX05PU0lHTkFMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19OT1NJR05BTCIsIE1TR19OT1NJR05BTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX05PU0lHTkFMKTsKICNlbmRpZgogI2lmZGVmICBNU0dfTk9USUZJQ0FUSU9OCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19OT1RJRklDQVRJT04iLCBNU0dfTk9USUZJQ0FUSU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfTk9USUZJQ0FUSU9OKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQ01TR19DTE9FWEVDCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19DTVNHX0NMT0VYRUMiLCBNU0dfQ01TR19DTE9FWEVDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQ01TR19DTE9FWEVDKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRVJSUVVFVUUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VSUlFVRVVFIiwgTVNHX0VSUlFVRVVFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRVJSUVVFVUUpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19DT05GSVJNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19DT05GSVJNIiwgTVNHX0NPTkZJUk0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19DT05GSVJNKTsKICNlbmRpZgogI2lmZGVmICBNU0dfTU9SRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfTU9SRSIsIE1TR19NT1JFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfTU9SRSk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0VPRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRU9GIiwgTVNHX0VPRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0VPRik7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0JDQVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19CQ0FTVCIsIE1TR19CQ0FTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0JDQVNUKTsKICNlbmRpZgogI2lmZGVmICBNU0dfTUNBU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX01DQVNUIiwgTVNHX01DQVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfTUNBU1QpOworI2VuZGlmCisjaWZkZWYgTVNHX0ZBU1RPUEVOCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0ZBU1RPUEVOKTsKICNlbmRpZgogCiAgICAgLyogUHJvdG9jb2wgbGV2ZWwgYW5kIG51bWJlcnMsIHVzYWJsZSBmb3IgW2dzXWV0c29ja29wdCAqLwogI2lmZGVmICBTT0xfU09DS0VUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9TT0NLRVQiLCBTT0xfU09DS0VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfU09DS0VUKTsKICNlbmRpZgogI2lmZGVmICBTT0xfSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0lQIiwgU09MX0lQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfSVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0lQIiwgMCk7CiAjZW5kaWYKICNpZmRlZiAgU09MX0lQWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfSVBYIiwgU09MX0lQWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0lQWCk7CiAjZW5kaWYKICNpZmRlZiAgU09MX0FYMjUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0FYMjUiLCBTT0xfQVgyNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0FYMjUpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9BVEFMSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfQVRBTEsiLCBTT0xfQVRBTEspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9BVEFMSyk7CiAjZW5kaWYKICNpZmRlZiAgU09MX05FVFJPTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfTkVUUk9NIiwgU09MX05FVFJPTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX05FVFJPTSk7CiAjZW5kaWYKICNpZmRlZiAgU09MX1JPU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1JPU0UiLCBTT0xfUk9TRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1JPU0UpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9UQ1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1RDUCIsIFNPTF9UQ1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9UQ1ApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1RDUCIsIDYpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9VRFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1VEUCIsIFNPTF9VRFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9VRFApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1VEUCIsIDE3KTsKICNlbmRpZgogI2lmZGVmIFNPTF9DQU5fQkFTRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfQ0FOX0JBU0UiLCBTT0xfQ0FOX0JBU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9DQU5fQkFTRSk7CiAjZW5kaWYKICNpZmRlZiBTT0xfQ0FOX1JBVwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfQ0FOX1JBVyIsIFNPTF9DQU5fUkFXKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBVyIsIENBTl9SQVcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9DQU5fUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXKTsKICNlbmRpZgogI2lmZGVmIEhBVkVfTElOVVhfQ0FOX0gKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VGRl9GTEFHIiwgQ0FOX0VGRl9GTEFHKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JUUl9GTEFHIiwgQ0FOX1JUUl9GTEFHKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VSUl9GTEFHIiwgQ0FOX0VSUl9GTEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fRUZGX0ZMQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SVFJfRkxBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VSUl9GTEFHKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fU0ZGX01BU0siLCBDQU5fU0ZGX01BU0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fRUZGX01BU0siLCBDQU5fRUZGX01BU0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fRVJSX01BU0siLCBDQU5fRVJSX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9TRkZfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VGRl9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fRVJSX01BU0spOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9MSU5VWF9DQU5fUkFXX0gKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBV19GSUxURVIiLCBDQU5fUkFXX0ZJTFRFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfRVJSX0ZJTFRFUiIsIENBTl9SQVdfRVJSX0ZJTFRFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfTE9PUEJBQ0siLCBDQU5fUkFXX0xPT1BCQUNLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBV19SRUNWX09XTl9NU0dTIiwgQ0FOX1JBV19SRUNWX09XTl9NU0dTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX0ZJTFRFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19FUlJfRklMVEVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX0xPT1BCQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX1JFQ1ZfT1dOX01TR1MpOworI2VuZGlmCisjaWZkZWYgSEFWRV9MSU5VWF9DQU5fQkNNX0gKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fQkNNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9TRVRVUCIsIFRYX1NFVFVQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9ERUxFVEUiLCBUWF9ERUxFVEUpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX1JFQUQiLCBUWF9SRUFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9TRU5EIiwgVFhfU0VORCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfU0VUVVAiLCBSWF9TRVRVUCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfREVMRVRFIiwgUlhfREVMRVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9SRUFEIiwgUlhfUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfU1RBVFVTIiwgVFhfU1RBVFVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9FWFBJUkVEIiwgVFhfRVhQSVJFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfU1RBVFVTIiwgUlhfU1RBVFVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9USU1FT1VUIiwgUlhfVElNRU9VVCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfQ0hBTkdFRCIsIFJYX0NIQU5HRUQpOwogI2VuZGlmCiAjaWZkZWYgU09MX1JEUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfUkRTIiwgU09MX1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1JEUyk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ0FOQ0VMX1NFTlRfVE8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NBTkNFTF9TRU5UX1RPIiwgUkRTX0NBTkNFTF9TRU5UX1RPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ0FOQ0VMX1NFTlRfVE8pOwogI2VuZGlmCiAjaWZkZWYgUkRTX0dFVF9NUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfR0VUX01SIiwgUkRTX0dFVF9NUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0dFVF9NUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfRlJFRV9NUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfRlJFRV9NUiIsIFJEU19GUkVFX01SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfRlJFRV9NUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkVDVkVSUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkVDVkVSUiIsIFJEU19SRUNWRVJSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkVDVkVSUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ09OR19NT05JVE9SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DT05HX01PTklUT1IiLCBSRFNfQ09OR19NT05JVE9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ09OR19NT05JVE9SKTsKICNlbmRpZgogI2lmZGVmIFJEU19HRVRfTVJfRk9SX0RFU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0dFVF9NUl9GT1JfREVTVCIsIFJEU19HRVRfTVJfRk9SX0RFU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19HRVRfTVJfRk9SX0RFU1QpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUCIsIElQUFJPVE9fSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUCIsIDApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSE9QT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0hPUE9QVFMiLCBJUFBST1RPX0hPUE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSE9QT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JQ01QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSUNNUCIsIElQUFJPVE9fSUNNUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JQ01QKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSUNNUCIsIDEpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSUdNUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lHTVAiLCBJUFBST1RPX0lHTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSUdNUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19HR1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19HR1AiLCBJUFBST1RPX0dHUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19HR1ApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBWNAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQVjQiLCBJUFBST1RPX0lQVjQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBWNCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUFY2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBWNiIsIElQUFJPVE9fSVBWNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUFY2KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUElQIiwgSVBQUk9UT19JUElQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQSVApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fVENQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVENQIiwgSVBQUk9UT19UQ1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fVENQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVENQIiwgNik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19FR1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19FR1AiLCBJUFBST1RPX0VHUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19FR1ApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fUFVQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUFVQIiwgSVBQUk9UT19QVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUFVQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1VEUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1VEUCIsIElQUFJPVE9fVURQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1VEUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1VEUCIsIDE3KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lEUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lEUCIsIElQUFJPVE9fSURQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lEUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19IRUxMTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0hFTExPIiwgSVBQUk9UT19IRUxMTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19IRUxMTyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19ORAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX05EIiwgSVBQUk9UT19ORCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19ORCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19UUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1RQIiwgSVBQUk9UT19UUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19UUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUFY2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBWNiIsIElQUFJPVE9fSVBWNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUFY2KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1JPVVRJTkcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19ST1VUSU5HIiwgSVBQUk9UT19ST1VUSU5HKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1JPVVRJTkcpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRlJBR01FTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19GUkFHTUVOVCIsIElQUFJPVE9fRlJBR01FTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRlJBR01FTlQpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fUlNWUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1JTVlAiLCBJUFBST1RPX1JTVlApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUlNWUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19HUkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19HUkUiLCBJUFBST1RPX0dSRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19HUkUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRVNQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRVNQIiwgSVBQUk9UT19FU1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRVNQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0FICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fQUgiLCBJUFBST1RPX0FIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0FIKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX01PQklMRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX01PQklMRSIsIElQUFJPVE9fTU9CSUxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX01PQklMRSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JQ01QVjYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JQ01QVjYiLCBJUFBST1RPX0lDTVBWNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JQ01QVjYpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fTk9ORQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX05PTkUiLCBJUFBST1RPX05PTkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fTk9ORSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19EU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRFNUT1BUUyIsIElQUFJPVE9fRFNUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19EU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1hUUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1hUUCIsIElQUFJPVE9fWFRQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1hUUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19FT04KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19FT04iLCBJUFBST1RPX0VPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19FT04pOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fUElNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUElNIiwgSVBQUk9UT19QSU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUElNKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQQ09NUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQQ09NUCIsIElQUFJPVE9fSVBDT01QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQQ09NUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19WUlJQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVlJSUCIsIElQUFJPVE9fVlJSUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19WUlJQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1NDVFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19TQ1RQIiwgSVBQUk9UT19TQ1RQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1NDVFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fQklQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fQklQIiwgSVBQUk9UT19CSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fQklQKTsKICNlbmRpZgogLyoqLwogI2lmZGVmICBJUFBST1RPX1JBVwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1JBVyIsIElQUFJPVE9fUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1JBVyk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1JBVyIsIDI1NSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19NQVgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19NQVgiLCBJUFBST1RPX01BWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19NQVgpOwogI2VuZGlmCiAKICNpZmRlZiAgU1lTUFJPVE9fQ09OVFJPTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTWVNQUk9UT19DT05UUk9MIiwgU1lTUFJPVE9fQ09OVFJPTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1lTUFJPVE9fQ09OVFJPTCk7CiAjZW5kaWYKIAogICAgIC8qIFNvbWUgcG9ydCBjb25maWd1cmF0aW9uICovCiAjaWZkZWYgIElQUE9SVF9SRVNFUlZFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfUkVTRVJWRUQiLCBJUFBPUlRfUkVTRVJWRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUE9SVF9SRVNFUlZFRCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfUkVTRVJWRUQiLCAxMDI0KTsKICNlbmRpZgogI2lmZGVmICBJUFBPUlRfVVNFUlJFU0VSVkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUE9SVF9VU0VSUkVTRVJWRUQiLCBJUFBPUlRfVVNFUlJFU0VSVkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBPUlRfVVNFUlJFU0VSVkVEKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUE9SVF9VU0VSUkVTRVJWRUQiLCA1MDAwKTsKICNlbmRpZgogCiAgICAgLyogU29tZSByZXNlcnZlZCBJUCB2LjQgYWRkcmVzc2VzICovCiAjaWZkZWYgIElOQUREUl9BTlkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0FOWSIsIElOQUREUl9BTlkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9BTlkpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0FOWSIsIDB4MDAwMDAwMDApOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9CUk9BRENBU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0JST0FEQ0FTVCIsIElOQUREUl9CUk9BRENBU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9CUk9BRENBU1QpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0JST0FEQ0FTVCIsIDB4ZmZmZmZmZmYpOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9MT09QQkFDSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTE9PUEJBQ0siLCBJTkFERFJfTE9PUEJBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9MT09QQkFDSyk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTE9PUEJBQ0siLCAweDdGMDAwMDAxKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfVU5TUEVDX0dST1VQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9VTlNQRUNfR1JPVVAiLCBJTkFERFJfVU5TUEVDX0dST1VQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfVU5TUEVDX0dST1VQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9VTlNQRUNfR1JPVVAiLCAweGUwMDAwMDAwKTsKICNlbmRpZgpAQCAtNjMyMSwzNTQgKzY1MTEsMzUzIEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9BTExIT1NUU19HUk9VUCIsIDB4ZTAwMDAwMDEpOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9NQVhfTE9DQUxfR1JPVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX01BWF9MT0NBTF9HUk9VUCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5BRERSX01BWF9MT0NBTF9HUk9VUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX01BWF9MT0NBTF9HUk9VUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTUFYX0xPQ0FMX0dST1VQIiwgMHhlMDAwMDBmZik7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX05PTkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX05PTkUiLCBJTkFERFJfTk9ORSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX05PTkUpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX05PTkUiLCAweGZmZmZmZmZmKTsKICNlbmRpZgogCiAgICAgLyogSVB2NCBbZ3NdZXRzb2Nrb3B0IG9wdGlvbnMgKi8KICNpZmRlZiAgSVBfT1BUSU9OUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9PUFRJT05TIiwgSVBfT1BUSU9OUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfT1BUSU9OUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfSERSSU5DTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9IRFJJTkNMIiwgSVBfSERSSU5DTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfSERSSU5DTCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfVE9TCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1RPUyIsIElQX1RPUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfVE9TKTsKICNlbmRpZgogI2lmZGVmICBJUF9UVEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfVFRMIiwgSVBfVFRMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9UVEwpOwogI2VuZGlmCiAjaWZkZWYgIElQX1JFQ1ZPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1JFQ1ZPUFRTIiwgSVBfUkVDVk9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1JFQ1ZPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUF9SRUNWUkVUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9SRUNWUkVUT1BUUyIsIElQX1JFQ1ZSRVRPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9SRUNWUkVUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfUkVDVkRTVEFERFIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfUkVDVkRTVEFERFIiLCBJUF9SRUNWRFNUQUREUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfUkVDVkRTVEFERFIpOwogI2VuZGlmCiAjaWZkZWYgIElQX1JFVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfUkVUT1BUUyIsIElQX1JFVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1JFVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQX01VTFRJQ0FTVF9JRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9NVUxUSUNBU1RfSUYiLCBJUF9NVUxUSUNBU1RfSUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01VTFRJQ0FTVF9JRik7CiAjZW5kaWYKICNpZmRlZiAgSVBfTVVMVElDQVNUX1RUTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9NVUxUSUNBU1RfVFRMIiwgSVBfTVVMVElDQVNUX1RUTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfTVVMVElDQVNUX1RUTCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfTVVMVElDQVNUX0xPT1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTVVMVElDQVNUX0xPT1AiLCBJUF9NVUxUSUNBU1RfTE9PUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfTVVMVElDQVNUX0xPT1ApOwogI2VuZGlmCiAjaWZkZWYgIElQX0FERF9NRU1CRVJTSElQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0FERF9NRU1CRVJTSElQIiwgSVBfQUREX01FTUJFUlNISVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0FERF9NRU1CRVJTSElQKTsKICNlbmRpZgogI2lmZGVmICBJUF9EUk9QX01FTUJFUlNISVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfRFJPUF9NRU1CRVJTSElQIiwgSVBfRFJPUF9NRU1CRVJTSElQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9EUk9QX01FTUJFUlNISVApOwogI2VuZGlmCiAjaWZkZWYgIElQX0RFRkFVTFRfTVVMVElDQVNUX1RUTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMKTsKICNlbmRpZgogI2lmZGVmICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1AiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1ApOwogI2VuZGlmCiAjaWZkZWYgIElQX01BWF9NRU1CRVJTSElQUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9NQVhfTUVNQkVSU0hJUFMiLCBJUF9NQVhfTUVNQkVSU0hJUFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01BWF9NRU1CRVJTSElQUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfVFJBTlNQQVJFTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfVFJBTlNQQVJFTlQiLCBJUF9UUkFOU1BBUkVOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfVFJBTlNQQVJFTlQpOwogI2VuZGlmCiAKICAgICAvKiBJUHY2IFtnc11ldHNvY2tvcHQgb3B0aW9ucywgZGVmaW5lZCBpbiBSRkMyNTUzICovCiAjaWZkZWYgIElQVjZfSk9JTl9HUk9VUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0pPSU5fR1JPVVAiLCBJUFY2X0pPSU5fR1JPVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfSk9JTl9HUk9VUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9MRUFWRV9HUk9VUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0xFQVZFX0dST1VQIiwgSVBWNl9MRUFWRV9HUk9VUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9MRUFWRV9HUk9VUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9NVUxUSUNBU1RfSE9QUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X01VTFRJQ0FTVF9IT1BTIiwgSVBWNl9NVUxUSUNBU1RfSE9QUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9NVUxUSUNBU1RfSE9QUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9NVUxUSUNBU1RfSUYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9NVUxUSUNBU1RfSUYiLCBJUFY2X01VTFRJQ0FTVF9JRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9NVUxUSUNBU1RfSUYpOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTVVMVElDQVNUX0xPT1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9NVUxUSUNBU1RfTE9PUCIsIElQVjZfTVVMVElDQVNUX0xPT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTVVMVElDQVNUX0xPT1ApOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfVU5JQ0FTVF9IT1BTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfVU5JQ0FTVF9IT1BTIiwgSVBWNl9VTklDQVNUX0hPUFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVU5JQ0FTVF9IT1BTKTsKICNlbmRpZgogICAgIC8qIEFkZGl0aW9uYWwgSVBWNiBzb2NrZXQgb3B0aW9ucywgZGVmaW5lZCBpbiBSRkMgMzQ5MyAqLwogI2lmZGVmIElQVjZfVjZPTkxZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfVjZPTkxZIiwgSVBWNl9WNk9OTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVjZPTkxZKTsKICNlbmRpZgogICAgIC8qIEFkdmFuY2VkIElQVjYgc29ja2V0IG9wdGlvbnMsIGZyb20gUkZDIDM1NDIgKi8KICNpZmRlZiBJUFY2X0NIRUNLU1VNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfQ0hFQ0tTVU0iLCBJUFY2X0NIRUNLU1VNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0NIRUNLU1VNKTsKICNlbmRpZgogI2lmZGVmIElQVjZfRE9OVEZSQUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9ET05URlJBRyIsIElQVjZfRE9OVEZSQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfRE9OVEZSQUcpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9EU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfRFNUT1BUUyIsIElQVjZfRFNUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9EU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfSE9QTElNSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9IT1BMSU1JVCIsIElQVjZfSE9QTElNSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfSE9QTElNSVQpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9IT1BPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfSE9QT1BUUyIsIElQVjZfSE9QT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9IT1BPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfTkVYVEhPUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X05FWFRIT1AiLCBJUFY2X05FWFRIT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTkVYVEhPUCk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1BBVEhNVFUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9QQVRITVRVIiwgSVBWNl9QQVRITVRVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1BBVEhNVFUpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9QS1RJTkZPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUEtUSU5GTyIsIElQVjZfUEtUSU5GTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9QS1RJTkZPKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVkRTVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWRFNUT1BUUyIsIElQVjZfUkVDVkRTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVkRTVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWSE9QTElNSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWSE9QTElNSVQiLCBJUFY2X1JFQ1ZIT1BMSU1JVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWSE9QTElNSVQpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWSE9QT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZIT1BPUFRTIiwgSVBWNl9SRUNWSE9QT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWSE9QT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZQS1RJTkZPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVlBLVElORk8iLCBJUFY2X1JFQ1ZQS1RJTkZPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZQS1RJTkZPKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVlJUSERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVlJUSERSIiwgSVBWNl9SRUNWUlRIRFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVlJUSERSKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVlRDTEFTUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZUQ0xBU1MiLCBJUFY2X1JFQ1ZUQ0xBU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVlRDTEFTUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JUSERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUlRIRFIiLCBJUFY2X1JUSERSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JUSERSKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUlRIRFJEU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUlRIRFJEU1RPUFRTIiwgSVBWNl9SVEhEUkRTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUlRIRFJEU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUlRIRFJfVFlQRV8wCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUlRIRFJfVFlQRV8wIiwgSVBWNl9SVEhEUl9UWVBFXzApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUlRIRFJfVFlQRV8wKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVlBBVEhNVFUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWUEFUSE1UVSIsIElQVjZfUkVDVlBBVEhNVFUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVlBBVEhNVFUpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9UQ0xBU1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9UQ0xBU1MiLCBJUFY2X1RDTEFTUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9UQ0xBU1MpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9VU0VfTUlOX01UVQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1VTRV9NSU5fTVRVIiwgSVBWNl9VU0VfTUlOX01UVSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9VU0VfTUlOX01UVSk7CiAjZW5kaWYKIAogICAgIC8qIFRDUCBvcHRpb25zICovCiAjaWZkZWYgIFRDUF9OT0RFTEFZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9OT0RFTEFZIiwgVENQX05PREVMQVkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9OT0RFTEFZKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfTUFYU0VHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9NQVhTRUciLCBUQ1BfTUFYU0VHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfTUFYU0VHKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfQ09SSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfQ09SSyIsIFRDUF9DT1JLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfQ09SSyk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0tFRVBJRExFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9LRUVQSURMRSIsIFRDUF9LRUVQSURMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0tFRVBJRExFKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfS0VFUElOVFZMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9LRUVQSU5UVkwiLCBUQ1BfS0VFUElOVFZMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfS0VFUElOVFZMKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfS0VFUENOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfS0VFUENOVCIsIFRDUF9LRUVQQ05UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfS0VFUENOVCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX1NZTkNOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfU1lOQ05UIiwgVENQX1NZTkNOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX1NZTkNOVCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0xJTkdFUjIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0xJTkdFUjIiLCBUQ1BfTElOR0VSMik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0xJTkdFUjIpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9ERUZFUl9BQ0NFUFQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0RFRkVSX0FDQ0VQVCIsIFRDUF9ERUZFUl9BQ0NFUFQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9ERUZFUl9BQ0NFUFQpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9XSU5ET1dfQ0xBTVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX1dJTkRPV19DTEFNUCIsIFRDUF9XSU5ET1dfQ0xBTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9XSU5ET1dfQ0xBTVApOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9JTkZPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9JTkZPIiwgVENQX0lORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9JTkZPKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfUVVJQ0tBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX1FVSUNLQUNLIiwgVENQX1FVSUNLQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfUVVJQ0tBQ0spOwogI2VuZGlmCi0KKyNpZmRlZiAgVENQX0ZBU1RPUEVOCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0ZBU1RPUEVOKTsKKyNlbmRpZgogCiAgICAgLyogSVBYIG9wdGlvbnMgKi8KICNpZmRlZiAgSVBYX1RZUEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBYX1RZUEUiLCBJUFhfVFlQRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBYX1RZUEUpOwogI2VuZGlmCiAKIC8qIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKi8KICNpZmRlZiBSRFNfQ01TR19SRE1BX0FSR1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NNU0dfUkRNQV9BUkdTIiwgUkRTX0NNU0dfUkRNQV9BUkdTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX0FSR1MpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9ERVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfREVTVCIsIFJEU19DTVNHX1JETUFfREVTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9ERVNUKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfTUFQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfTUFQIiwgUkRTX0NNU0dfUkRNQV9NQVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfTUFQKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfU1RBVFVTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfU1RBVFVTIiwgUkRTX0NNU0dfUkRNQV9TVEFUVVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfU1RBVFVTKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfVVBEQVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfVVBEQVRFIiwgUkRTX0NNU0dfUkRNQV9VUERBVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfVVBEQVRFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX1JFQURXUklURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9SRUFEV1JJVEUiLCBSRFNfUkRNQV9SRUFEV1JJVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX1JFQURXUklURSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9GRU5DRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9GRU5DRSIsIFJEU19SRE1BX0ZFTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9GRU5DRSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9JTlZBTElEQVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX0lOVkFMSURBVEUiLCBSRFNfUkRNQV9JTlZBTElEQVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9JTlZBTElEQVRFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX1VTRV9PTkNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX1VTRV9PTkNFIiwgUkRTX1JETUFfVVNFX09OQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX1VTRV9PTkNFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX0RPTlRXQUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX0RPTlRXQUlUIiwgUkRTX1JETUFfRE9OVFdBSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX0RPTlRXQUlUKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX05PVElGWV9NRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9OT1RJRllfTUUiLCBSRFNfUkRNQV9OT1RJRllfTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX05PVElGWV9NRSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9TSUxFTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfU0lMRU5UIiwgUkRTX1JETUFfU0lMRU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9TSUxFTlQpOwogI2VuZGlmCiAKICAgICAvKiBnZXR7YWRkcixuYW1lfWluZm8gcGFyYW1ldGVycyAqLwogI2lmZGVmIEVBSV9BRERSRkFNSUxZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9BRERSRkFNSUxZIiwgRUFJX0FERFJGQU1JTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9BRERSRkFNSUxZKTsKICNlbmRpZgogI2lmZGVmIEVBSV9BR0FJTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfQUdBSU4iLCBFQUlfQUdBSU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9BR0FJTik7CiAjZW5kaWYKICNpZmRlZiBFQUlfQkFERkxBR1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0JBREZMQUdTIiwgRUFJX0JBREZMQUdTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfQkFERkxBR1MpOwogI2VuZGlmCiAjaWZkZWYgRUFJX0ZBSUwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0ZBSUwiLCBFQUlfRkFJTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0ZBSUwpOwogI2VuZGlmCiAjaWZkZWYgRUFJX0ZBTUlMWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfRkFNSUxZIiwgRUFJX0ZBTUlMWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0ZBTUlMWSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfTUVNT1JZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9NRU1PUlkiLCBFQUlfTUVNT1JZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfTUVNT1JZKTsKICNlbmRpZgogI2lmZGVmIEVBSV9OT0RBVEEKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX05PREFUQSIsIEVBSV9OT0RBVEEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9OT0RBVEEpOwogI2VuZGlmCiAjaWZkZWYgRUFJX05PTkFNRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfTk9OQU1FIiwgRUFJX05PTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX05PTkFNRSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfT1ZFUkZMT1cKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX09WRVJGTE9XIiwgRUFJX09WRVJGTE9XKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfT1ZFUkZMT1cpOwogI2VuZGlmCiAjaWZkZWYgRUFJX1NFUlZJQ0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX1NFUlZJQ0UiLCBFQUlfU0VSVklDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX1NFUlZJQ0UpOwogI2VuZGlmCiAjaWZkZWYgRUFJX1NPQ0tUWVBFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9TT0NLVFlQRSIsIEVBSV9TT0NLVFlQRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX1NPQ0tUWVBFKTsKICNlbmRpZgogI2lmZGVmIEVBSV9TWVNURU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX1NZU1RFTSIsIEVBSV9TWVNURU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9TWVNURU0pOwogI2VuZGlmCiAjaWZkZWYgRUFJX0JBREhJTlRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9CQURISU5UUyIsIEVBSV9CQURISU5UUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0JBREhJTlRTKTsKICNlbmRpZgogI2lmZGVmIEVBSV9QUk9UT0NPTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfUFJPVE9DT0wiLCBFQUlfUFJPVE9DT0wpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9QUk9UT0NPTCk7CiAjZW5kaWYKICNpZmRlZiBFQUlfTUFYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9NQVgiLCBFQUlfTUFYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfTUFYKTsKICNlbmRpZgogI2lmZGVmIEFJX1BBU1NJVkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfUEFTU0lWRSIsIEFJX1BBU1NJVkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX1BBU1NJVkUpOwogI2VuZGlmCiAjaWZkZWYgQUlfQ0FOT05OQU1FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0NBTk9OTkFNRSIsIEFJX0NBTk9OTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfQ0FOT05OQU1FKTsKICNlbmRpZgogI2lmZGVmIEFJX05VTUVSSUNIT1NUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX05VTUVSSUNIT1NUIiwgQUlfTlVNRVJJQ0hPU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX05VTUVSSUNIT1NUKTsKICNlbmRpZgogI2lmZGVmIEFJX05VTUVSSUNTRVJWCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX05VTUVSSUNTRVJWIiwgQUlfTlVNRVJJQ1NFUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX05VTUVSSUNTRVJWKTsKICNlbmRpZgogI2lmZGVmIEFJX01BU0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfTUFTSyIsIEFJX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX01BU0spOwogI2VuZGlmCiAjaWZkZWYgQUlfQUxMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0FMTCIsIEFJX0FMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfQUxMKTsKICNlbmRpZgogI2lmZGVmIEFJX1Y0TUFQUEVEX0NGRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9WNE1BUFBFRF9DRkciLCBBSV9WNE1BUFBFRF9DRkcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX1Y0TUFQUEVEX0NGRyk7CiAjZW5kaWYKICNpZmRlZiBBSV9BRERSQ09ORklHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0FERFJDT05GSUciLCBBSV9BRERSQ09ORklHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9BRERSQ09ORklHKTsKICNlbmRpZgogI2lmZGVmIEFJX1Y0TUFQUEVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX1Y0TUFQUEVEIiwgQUlfVjRNQVBQRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX1Y0TUFQUEVEKTsKICNlbmRpZgogI2lmZGVmIEFJX0RFRkFVTFQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfREVGQVVMVCIsIEFJX0RFRkFVTFQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX0RFRkFVTFQpOwogI2VuZGlmCiAjaWZkZWYgTklfTUFYSE9TVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9NQVhIT1NUIiwgTklfTUFYSE9TVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTUFYSE9TVCk7CiAjZW5kaWYKICNpZmRlZiBOSV9NQVhTRVJWCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX01BWFNFUlYiLCBOSV9NQVhTRVJWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9NQVhTRVJWKTsKICNlbmRpZgogI2lmZGVmIE5JX05PRlFETgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OT0ZRRE4iLCBOSV9OT0ZRRE4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX05PRlFETik7CiAjZW5kaWYKICNpZmRlZiBOSV9OVU1FUklDSE9TVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OVU1FUklDSE9TVCIsIE5JX05VTUVSSUNIT1NUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OVU1FUklDSE9TVCk7CiAjZW5kaWYKICNpZmRlZiBOSV9OQU1FUkVRRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OQU1FUkVRRCIsIE5JX05BTUVSRVFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OQU1FUkVRRCk7CiAjZW5kaWYKICNpZmRlZiBOSV9OVU1FUklDU0VSVgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OVU1FUklDU0VSViIsIE5JX05VTUVSSUNTRVJWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OVU1FUklDU0VSVik7CiAjZW5kaWYKICNpZmRlZiBOSV9ER1JBTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9ER1JBTSIsIE5JX0RHUkFNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9ER1JBTSk7CiAjZW5kaWYKIAogICAgIC8qIHNodXRkb3duKCkgcGFyYW1ldGVycyAqLwogI2lmZGVmIFNIVVRfUkQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRCIsIFNIVVRfUkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNIVVRfUkQpOwogI2VsaWYgZGVmaW5lZChTRF9SRUNFSVZFKQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEIiwgU0RfUkVDRUlWRSk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEIiwgMCk7CiAjZW5kaWYKICNpZmRlZiBTSFVUX1dSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfV1IiLCBTSFVUX1dSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTSFVUX1dSKTsKICNlbGlmIGRlZmluZWQoU0RfU0VORCkKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9XUiIsIFNEX1NFTkQpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9XUiIsIDEpOwogI2VuZGlmCiAjaWZkZWYgU0hVVF9SRFdSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkRXUiIsIFNIVVRfUkRXUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0hVVF9SRFdSKTsKICNlbGlmIGRlZmluZWQoU0RfQk9USCkKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRFdSIiwgU0RfQk9USCk7CiAjZWxzZQpAQCAtNjY4OCwxNCArNjg3NywxNCBAQAogICAgICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sIG5hbWVzW2ldLCB0bXApOwogICAgICAgICB9CiAgICAgfQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfT0ZGIiwgUkNWQUxMX09GRik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9PTiIsIFJDVkFMTF9PTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9TT0NLRVRMRVZFTE9OTFkiLCBSQ1ZBTExfU09DS0VUTEVWRUxPTkxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfT0ZGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9TT0NLRVRMRVZFTE9OTFkpOwogI2lmZGVmIFJDVkFMTF9JUExFVkVMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9JUExFVkVMIiwgUkNWQUxMX0lQTEVWRUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9JUExFVkVMKTsKICNlbmRpZgogI2lmZGVmIFJDVkFMTF9NQVgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX01BWCIsIFJDVkFMTF9NQVgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9NQVgpOwogI2VuZGlmCiAjZW5kaWYgLyogX01TVENQSVBfICovCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmggYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCmluZGV4IDA0MzU4NzguLmI4M2Y5YWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKKysrIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaApAQCAtOCw3ICs4LDcgQEAKICMgICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjIGVuZGlmCiAjIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSMgaWYgIShkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IChkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfVkFDUFApKSkKKyMgaWYgIWRlZmluZWQoX19DWUdXSU5fXykKICMgIGluY2x1ZGUgPG5ldGluZXQvdGNwLmg+CiAjIGVuZGlmCiAKQEAgLTgwLDYgKzgwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvY2FuL3Jhdy5oPgogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX0xJTlVYX0NBTl9CQ01fSAorI2luY2x1ZGUgPGxpbnV4L2Nhbi9iY20uaD4KKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9TWVNfU1lTX0RPTUFJTl9ICiAjaW5jbHVkZSA8c3lzL3N5c19kb21haW4uaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcHdkbW9kdWxlLmMgYi9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYwppbmRleCAxOTRhZTE5Li42OGVhMWI1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYwpAQCAtMjYsMjIgKzI2LDI0IEBACiAjaWYgZGVmaW5lZChIQVZFX0dFVFNQTkFNKSB8fCBkZWZpbmVkKEhBVkVfR0VUU1BFTlQpCiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIHN0cnVjdF9zcHdkX3R5cGVfZmllbGRzW10gPSB7Ci0gICAgeyJzcF9uYW0iLCAibG9naW4gbmFtZSJ9LAotICAgIHsic3BfcHdkIiwgImVuY3J5cHRlZCBwYXNzd29yZCJ9LAorICAgIHsic3BfbmFtcCIsICJsb2dpbiBuYW1lIn0sCisgICAgeyJzcF9wd2RwIiwgImVuY3J5cHRlZCBwYXNzd29yZCJ9LAogICAgIHsic3BfbHN0Y2hnIiwgImRhdGUgb2YgbGFzdCBjaGFuZ2UifSwKICAgICB7InNwX21pbiIsICJtaW4gI2RheXMgYmV0d2VlbiBjaGFuZ2VzIn0sCiAgICAgeyJzcF9tYXgiLCAibWF4ICNkYXlzIGJldHdlZW4gY2hhbmdlcyJ9LAogICAgIHsic3Bfd2FybiIsICIjZGF5cyBiZWZvcmUgcHcgZXhwaXJlcyB0byB3YXJuIHVzZXIgYWJvdXQgaXQifSwKLSAgICB7InNwX2luYWN0IiwgIiNkYXlzIGFmdGVyIHB3IGV4cGlyZXMgdW50aWwgYWNjb3VudCBpcyBibG9ja2VkIn0sCi0gICAgeyJzcF9leHBpcmUiLCAiI2RheXMgc2luY2UgMTk3MC0wMS0wMSB1bnRpbCBhY2NvdW50IGlzIGRpc2FibGVkIn0sCisgICAgeyJzcF9pbmFjdCIsICIjZGF5cyBhZnRlciBwdyBleHBpcmVzIHVudGlsIGFjY291bnQgaXMgZGlzYWJsZWQifSwKKyAgICB7InNwX2V4cGlyZSIsICIjZGF5cyBzaW5jZSAxOTcwLTAxLTAxIHdoZW4gYWNjb3VudCBleHBpcmVzIn0sCiAgICAgeyJzcF9mbGFnIiwgInJlc2VydmVkIn0sCisgICAgeyJzcF9uYW0iLCAibG9naW4gbmFtZTsgZGVwcmVjYXRlZCJ9LCAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisgICAgeyJzcF9wd2QiLCAiZW5jcnlwdGVkIHBhc3N3b3JkOyBkZXByZWNhdGVkIn0sIC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KICAgICB7MH0KIH07CiAKIFB5RG9jX1NUUlZBUihzdHJ1Y3Rfc3B3ZF9fZG9jX18sCiAic3B3ZC5zdHJ1Y3Rfc3B3ZDogUmVzdWx0cyBmcm9tIGdldHNwKigpIHJvdXRpbmVzLlxuXG5cCiBUaGlzIG9iamVjdCBtYXkgYmUgYWNjZXNzZWQgZWl0aGVyIGFzIGEgOS10dXBsZSBvZlxuXAotICAoc3BfbmFtLHNwX3B3ZCxzcF9sc3RjaGcsc3BfbWluLHNwX21heCxzcF93YXJuLHNwX2luYWN0LHNwX2V4cGlyZSxzcF9mbGFnKVxuXAorICAoc3BfbmFtcCxzcF9wd2RwLHNwX2xzdGNoZyxzcF9taW4sc3BfbWF4LHNwX3dhcm4sc3BfaW5hY3Qsc3BfZXhwaXJlLHNwX2ZsYWcpXG5cCiBvciB2aWEgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIGFzIG5hbWVkIGluIHRoZSBhYm92ZSB0dXBsZS4iKTsKIAogc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRGVzYyBzdHJ1Y3Rfc3B3ZF90eXBlX2Rlc2MgPSB7CkBAIC04Niw2ICs4OCw4IEBACiAgICAgU0VUSShzZXRJbmRleCsrLCBwLT5zcF9pbmFjdCk7CiAgICAgU0VUSShzZXRJbmRleCsrLCBwLT5zcF9leHBpcmUpOwogICAgIFNFVEkoc2V0SW5kZXgrKywgcC0+c3BfZmxhZyk7CisgICAgU0VUUyhzZXRJbmRleCsrLCBwLT5zcF9uYW1wKTsgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3Igc3BfbmFtICovCisgICAgU0VUUyhzZXRJbmRleCsrLCBwLT5zcF9wd2RwKTsgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3Igc3BfcHdkICovCiAKICN1bmRlZiBTRVRTCiAjdW5kZWYgU0VUSQpAQCAtMTk2LDkgKzIwMCwxMSBAQAogICAgIG09UHlNb2R1bGVfQ3JlYXRlKCZzcHdkbW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RTcHdkVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3Nwd2RfdHlwZV9kZXNjKTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RydWN0U3B3ZFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3Nwd2RfdHlwZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSAmU3RydWN0U3B3ZFR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3Nwd2QiLCAoUHlPYmplY3QgKikgJlN0cnVjdFNwd2RUeXBlKTsKICAgICBpbml0aWFsaXplZCA9IDE7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NyZS5oIGIvTW9kdWxlcy9zcmUuaAppbmRleCAwYThmMGNmLi42MjFlMmQ4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NyZS5oCisrKyBiL01vZHVsZXMvc3JlLmgKQEAgLTMxLDkgKzMxLDcgQEAKICAgICBQeU9iamVjdCogcGF0dGVybjsgLyogcGF0dGVybiBzb3VyY2UgKG9yIE5vbmUpICovCiAgICAgaW50IGZsYWdzOyAvKiBmbGFncyB1c2VkIHdoZW4gY29tcGlsaW5nIHBhdHRlcm4gc291cmNlICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OyAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwotICAgIGludCBsb2dpY2FsX2NoYXJzaXplOyAvKiBwYXR0ZXJuIGNoYXJzaXplIChvciAtMSkgKi8KLSAgICBpbnQgY2hhcnNpemU7Ci0gICAgUHlfYnVmZmVyIHZpZXc7CisgICAgaW50IGlzYnl0ZXM7IC8qIHBhdHRlcm4gdHlwZSAoMSAtIGJ5dGVzLCAwIC0gc3RyaW5nLCAtMSAtIE5vbmUpICovCiAgICAgLyogcGF0dGVybiBjb2RlICovCiAgICAgUHlfc3NpemVfdCBjb2Rlc2l6ZTsKICAgICBTUkVfQ09ERSBjb2RlWzFdOwpAQCAtNzMsOSArNzEsOCBAQAogICAgIC8qIGF0dHJpYnV0ZXMgZm9yIHRoZSBtYXRjaCBvYmplY3QgKi8KICAgICBQeU9iamVjdCogc3RyaW5nOwogICAgIFB5X3NzaXplX3QgcG9zLCBlbmRwb3M7Ci0gICAgLyogY2hhcmFjdGVyIHNpemUgKi8KLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZTsgLyoga2luZCBvZiB0aGluZzogMSAtIGJ5dGVzLCAyLzQgLSB1bmljb2RlICovCi0gICAgaW50IGNoYXJzaXplOworICAgIGludCBpc2J5dGVzOworICAgIGludCBjaGFyc2l6ZTsgLyogY2hhcmFjdGVyIHNpemUgKi8KICAgICAvKiByZWdpc3RlcnMgKi8KICAgICBQeV9zc2l6ZV90IGxhc3RpbmRleDsKICAgICBQeV9zc2l6ZV90IGxhc3RtYXJrOwpAQCAtODksNiArODYsNyBAQAogICAgIFNSRV9SRVBFQVQgKnJlcGVhdDsKICAgICAvKiBob29rcyAqLwogICAgIFNSRV9UT0xPV0VSX0hPT0sgbG93ZXI7CisgICAgaW50IG1hdGNoX2FsbDsKIH0gU1JFX1NUQVRFOwogCiB0eXBlZGVmIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaCBiL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oCmluZGV4IDEzYzg5NTguLjU5NDBkNWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oCisrKyBiL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oCkBAIC04MSw2ICs4MSw4IEBACiAjZGVmaW5lIFNSRV9GTEFHX0RPVEFMTCAxNgogI2RlZmluZSBTUkVfRkxBR19VTklDT0RFIDMyCiAjZGVmaW5lIFNSRV9GTEFHX1ZFUkJPU0UgNjQKKyNkZWZpbmUgU1JFX0ZMQUdfREVCVUcgMTI4CisjZGVmaW5lIFNSRV9GTEFHX0FTQ0lJIDI1NgogI2RlZmluZSBTUkVfSU5GT19QUkVGSVggMQogI2RlZmluZSBTUkVfSU5GT19MSVRFUkFMIDIKICNkZWZpbmUgU1JFX0lORk9fQ0hBUlNFVCA0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NyZV9saWIuaCBiL01vZHVsZXMvc3JlX2xpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODY2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL3NyZV9saWIuaApAQCAtMCwwICsxLDEzNDMgQEAKKy8qCisgKiBTZWNyZXQgTGFicycgUmVndWxhciBFeHByZXNzaW9uIEVuZ2luZQorICoKKyAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBlbmdpbmUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMSBieSBTZWNyZXQgTGFicyBBQi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU2VlIHRoZSBfc3JlLmMgZmlsZSBmb3IgaW5mb3JtYXRpb24gb24gdXNhZ2UgYW5kIHJlZGlzdHJpYnV0aW9uLgorICovCisKKy8qIFN0cmluZyBtYXRjaGluZyBlbmdpbmUgKi8KKworLyogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIHRocmVlIHRpbWVzLCB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIgc2V0dGluZ3MgKi8KKworTE9DQUwoaW50KQorU1JFKGF0KShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ0hBUiogcHRyLCBTUkVfQ09ERSBhdCkKK3sKKyAgICAvKiBjaGVjayBpZiBwb2ludGVyIGlzIGF0IGdpdmVuIHBvc2l0aW9uICovCisKKyAgICBQeV9zc2l6ZV90IHRoaXNwLCB0aGF0cDsKKworICAgIHN3aXRjaCAoYXQpIHsKKworICAgIGNhc2UgU1JFX0FUX0JFR0lOTklORzoKKyAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkdfU1RSSU5HOgorICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5iZWdpbm5pbmcpOworCisgICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HX0xJTkU6CisgICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmJlZ2lubmluZyB8fAorICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgcHRyWy0xXSkpOworCisgICAgY2FzZSBTUkVfQVRfRU5EOgorICAgICAgICByZXR1cm4gKCgodm9pZCopIChwdHIrMSkgPT0gc3RhdGUtPmVuZCAmJgorICAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIHB0clswXSkpIHx8CisgICAgICAgICAgICAgICAgKCh2b2lkKikgcHRyID09IHN0YXRlLT5lbmQpKTsKKworICAgIGNhc2UgU1JFX0FUX0VORF9MSU5FOgorICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5lbmQgfHwKKyAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIHB0clswXSkpOworCisgICAgY2FzZSBTUkVfQVRfRU5EX1NUUklORzoKKyAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKTsKKworICAgIGNhc2UgU1JFX0FUX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9OT05fQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKKworICAgIGNhc2UgU1JFX0FUX0xPQ19CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9MT0NfTk9OX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKKworICAgIGNhc2UgU1JFX0FUX1VOSV9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9VTklfTk9OX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKKworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitMT0NBTChpbnQpCitTUkUoY2hhcnNldCkoU1JFX0NPREUqIHNldCwgU1JFX0NPREUgY2gpCit7CisgICAgLyogY2hlY2sgaWYgY2hhcmFjdGVyIGlzIGEgbWVtYmVyIG9mIHRoZSBnaXZlbiBzZXQgKi8KKworICAgIGludCBvayA9IDE7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHN3aXRjaCAoKnNldCsrKSB7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfRkFJTFVSRToKKyAgICAgICAgICAgIHJldHVybiAhb2s7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTDoKKyAgICAgICAgICAgIC8qIDxMSVRFUkFMPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIGlmIChjaCA9PSBzZXRbMF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0Kys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9DQVRFR09SWToKKyAgICAgICAgICAgIC8qIDxDQVRFR09SWT4gPGNvZGU+ICovCisgICAgICAgICAgICBpZiAoc3JlX2NhdGVnb3J5KHNldFswXSwgKGludCkgY2gpKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCsrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQ0hBUlNFVDoKKyAgICAgICAgICAgIC8qIDxDSEFSU0VUPiA8Yml0bWFwPiAqLworICAgICAgICAgICAgaWYgKGNoIDwgMjU2ICYmCisgICAgICAgICAgICAgICAgKHNldFtjaC9TUkVfQ09ERV9CSVRTXSAmICgxdSA8PCAoY2ggJiAoU1JFX0NPREVfQklUUy0xKSkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQgKz0gMjU2L1NSRV9DT0RFX0JJVFM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9SQU5HRToKKyAgICAgICAgICAgIC8qIDxSQU5HRT4gPGxvd2VyPiA8dXBwZXI+ICovCisgICAgICAgICAgICBpZiAoc2V0WzBdIDw9IGNoICYmIGNoIDw9IHNldFsxXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX05FR0FURToKKyAgICAgICAgICAgIG9rID0gIW9rOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQklHQ0hBUlNFVDoKKyAgICAgICAgICAgIC8qIDxCSUdDSEFSU0VUPiA8YmxvY2tjb3VudD4gPDI1NiBibG9ja2luZGljZXM+IDxibG9ja3M+ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgY291bnQsIGJsb2NrOworICAgICAgICAgICAgY291bnQgPSAqKHNldCsrKTsKKworICAgICAgICAgICAgaWYgKGNoIDwgMHgxMDAwMHUpCisgICAgICAgICAgICAgICAgYmxvY2sgPSAoKHVuc2lnbmVkIGNoYXIqKXNldClbY2ggPj4gOF07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmxvY2sgPSAtMTsKKyAgICAgICAgICAgIHNldCArPSAyNTYvc2l6ZW9mKFNSRV9DT0RFKTsKKyAgICAgICAgICAgIGlmIChibG9jayA+PTAgJiYKKyAgICAgICAgICAgICAgICAoc2V0WyhibG9jayAqIDI1NiArIChjaCAmIDI1NSkpL1NSRV9DT0RFX0JJVFNdICYKKyAgICAgICAgICAgICAgICAgICAgKDF1IDw8IChjaCAmIChTUkVfQ09ERV9CSVRTLTEpKSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCArPSBjb3VudCAqICgyNTYvU1JFX0NPREVfQklUUyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBpbnRlcm5hbCBlcnJvciAtLSB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCBpdAorICAgICAgICAgICAgICAgaGVyZSwgc28gbGV0J3MganVzdCBwcmV0ZW5kIGl0IGRpZG4ndCBtYXRjaC4uLiAqLworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0xPQ0FMKFB5X3NzaXplX3QpIFNSRShtYXRjaCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pOworCitMT0NBTChQeV9zc2l6ZV90KQorU1JFKGNvdW50KShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybiwgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBTUkVfQ09ERSBjaHI7CisgICAgU1JFX0NIQVIgYzsKKyAgICBTUkVfQ0hBUiogcHRyID0gKFNSRV9DSEFSICopc3RhdGUtPnB0cjsKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICBQeV9zc2l6ZV90IGk7CisKKyAgICAvKiBhZGp1c3QgZW5kICovCisgICAgaWYgKG1heGNvdW50IDwgZW5kIC0gcHRyICYmIG1heGNvdW50ICE9IFNSRV9NQVhSRVBFQVQpCisgICAgICAgIGVuZCA9IHB0ciArIG1heGNvdW50OworCisgICAgc3dpdGNoIChwYXR0ZXJuWzBdKSB7CisKKyAgICBjYXNlIFNSRV9PUF9JTjoKKyAgICAgICAgLyogcmVwZWF0ZWQgc2V0ICovCisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIElOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBTUkUoY2hhcnNldCkocGF0dGVybiArIDIsICpwdHIpKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfQU5ZOgorICAgICAgICAvKiByZXBlYXRlZCBkb3Qgd2lsZGNhcmQuICovCisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIEFOWVxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRV9JU19MSU5FQlJFQUsoKnB0cikpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgorICAgICAgICAvKiByZXBlYXRlZCBkb3Qgd2lsZGNhcmQuICBza2lwIHRvIHRoZSBlbmQgb2YgdGhlIHRhcmdldAorICAgICAgICAgICBzdHJpbmcsIGFuZCBiYWNrdHJhY2sgZnJvbSB0aGVyZSAqLworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBBTllfQUxMXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgcHRyID0gZW5kOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6CisgICAgICAgIC8qIHJlcGVhdGVkIGxpdGVyYWwgKi8KKyAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTElURVJBTCAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKKyAgICAgICAgYyA9IChTUkVfQ0hBUikgY2hyOworI2lmIFNJWkVPRl9TUkVfQ0hBUiA8IDQKKyAgICAgICAgaWYgKChTUkVfQ09ERSkgYyAhPSBjaHIpCisgICAgICAgICAgICA7IC8qIGxpdGVyYWwgY2FuJ3QgbWF0Y2g6IGRvZXNuJ3QgZml0IGluIGNoYXIgd2lkdGggKi8KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciA9PSBjKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfTElURVJBTF9JR05PUkU6CisgICAgICAgIC8qIHJlcGVhdGVkIGxpdGVyYWwgKi8KKyAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTElURVJBTF9JR05PUkUgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBzdGF0ZS0+bG93ZXIoKnB0cikgPT0gY2hyKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUw6CisgICAgICAgIC8qIHJlcGVhdGVkIG5vbi1saXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIE5PVF9MSVRFUkFMICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOworICAgICAgICBjID0gKFNSRV9DSEFSKSBjaHI7CisjaWYgU0laRU9GX1NSRV9DSEFSIDwgNAorICAgICAgICBpZiAoKFNSRV9DT0RFKSBjICE9IGNocikKKyAgICAgICAgICAgIHB0ciA9IGVuZDsgLyogbGl0ZXJhbCBjYW4ndCBtYXRjaDogZG9lc24ndCBmaXQgaW4gY2hhciB3aWR0aCAqLworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9IGMpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTF9JR05PUkU6CisgICAgICAgIC8qIHJlcGVhdGVkIG5vbi1saXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIHN0YXRlLT5sb3dlcigqcHRyKSAhPSBjaHIpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvKiByZXBlYXRlZCBzaW5nbGUgY2hhcmFjdGVyIHBhdHRlcm4gKi8KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgU1VCUEFUVEVSTlxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHdoaWxlICgoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyIDwgZW5kKSB7CisgICAgICAgICAgICBpID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybik7CisgICAgICAgICAgICBpZiAoaSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBpZiAoIWkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgcGF0dGVybiwgcHRyLAorICAgICAgICAgICAgICAgKFNSRV9DSEFSKikgc3RhdGUtPnB0ciAtIHB0cikpOworICAgICAgICByZXR1cm4gKFNSRV9DSEFSKikgc3RhdGUtPnB0ciAtIHB0cjsKKyAgICB9CisKKyAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBwYXR0ZXJuLCBwdHIsCisgICAgICAgICAgIHB0ciAtIChTUkVfQ0hBUiopIHN0YXRlLT5wdHIpKTsKKyAgICByZXR1cm4gcHRyIC0gKFNSRV9DSEFSKikgc3RhdGUtPnB0cjsKK30KKworI2lmIDAgLyogbm90IHVzZWQgaW4gdGhpcyByZWxlYXNlICovCitMT0NBTChpbnQpCitTUkUoaW5mbykoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgLyogY2hlY2sgaWYgYW4gU1JFX09QX0lORk8gYmxvY2sgbWF0Y2hlcyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICByZXR1cm5zIHRoZSBudW1iZXIgb2YgU1JFX0NPREUgb2JqZWN0cyB0byBza2lwIGlmIHN1Y2Nlc3NmdWwsIDAKKyAgICAgICBpZiBubyBtYXRjaCAqLworCisgICAgU1JFX0NIQVIqIGVuZCA9IChTUkVfQ0hBUiopIHN0YXRlLT5lbmQ7CisgICAgU1JFX0NIQVIqIHB0ciA9IChTUkVfQ0hBUiopIHN0YXRlLT5wdHI7CisgICAgUHlfc3NpemVfdCBpOworCisgICAgLyogY2hlY2sgbWluaW1hbCBsZW5ndGggKi8KKyAgICBpZiAocGF0dGVyblszXSAmJiBlbmQgLSBwdHIgPCBwYXR0ZXJuWzNdKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIGNoZWNrIGtub3duIHByZWZpeCAqLworICAgIGlmIChwYXR0ZXJuWzJdICYgU1JFX0lORk9fUFJFRklYICYmIHBhdHRlcm5bNV0gPiAxKSB7CisgICAgICAgIC8qIDxsZW5ndGg+IDxza2lwPiA8cHJlZml4IGRhdGE+IDxvdmVybGFwIGRhdGE+ICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuWzVdOyBpKyspCisgICAgICAgICAgICBpZiAoKFNSRV9DT0RFKSBwdHJbaV0gIT0gcGF0dGVybls3ICsgaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBwYXR0ZXJuWzBdICsgMiAqIHBhdHRlcm5bNl07CisgICAgfQorICAgIHJldHVybiBwYXR0ZXJuWzBdOworfQorI2VuZGlmCisKKy8qIFRoZSBtYWNyb3MgYmVsb3cgc2hvdWxkIGJlIHVzZWQgdG8gcHJvdGVjdCByZWN1cnNpdmUgU1JFKG1hdGNoKSgpCisgKiBjYWxscyB0aGF0ICpmYWlsZWQqIGFuZCBkbyAqbm90KiByZXR1cm4gaW1tZWRpYXRlbHkgKElPVywgdGhvc2UKKyAqIHRoYXQgd2lsbCBiYWNrdHJhY2spLiBFeHBsYWluaW5nOgorICoKKyAqIC0gUmVjdXJzaXZlIFNSRShtYXRjaCkoKSByZXR1cm5lZCB0cnVlOiB0aGF0J3MgdXN1YWxseSBhIHN1Y2Nlc3MKKyAqICAgKGJlc2lkZXMgYXR5cGljYWwgY2FzZXMgbGlrZSBBU1NFUlRfTk9UKSwgdGhlcmVmb3JlIHRoZXJlJ3Mgbm8KKyAqICAgcmVhc29uIHRvIHJlc3RvcmUgbGFzdG1hcms7CisgKgorICogLSBSZWN1cnNpdmUgU1JFKG1hdGNoKSgpIHJldHVybmVkIGZhbHNlIGJ1dCB0aGUgY3VycmVudCBTUkUobWF0Y2gpKCkKKyAqICAgaXMgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXI6IElmIHRoZSBjdXJyZW50IFNSRShtYXRjaCkoKSBpcyB0aGUKKyAqICAgdG9wIGZ1bmN0aW9uIG9mIHRoZSByZWN1cnNpb24sIHJldHVybmluZyBmYWxzZSB3aWxsIGJlIGEgbWF0Y2hpbmcKKyAqICAgZmFpbHVyZSwgYW5kIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGxhc3RtYXJrIGlzIHBvaW50aW5nIHRvLgorICogICBJZiBpdCdzICpub3QqIHRoZSB0b3AgZnVuY3Rpb24sIGl0IHdpbGwgYmUgYSByZWN1cnNpdmUgU1JFKG1hdGNoKSgpCisgKiAgIGZhaWx1cmUgYnkgaXRzZWxmLCBhbmQgdGhlIGNhbGxpbmcgU1JFKG1hdGNoKSgpIHdpbGwgaGF2ZSB0byBkZWFsCisgKiAgIHdpdGggdGhlIGZhaWx1cmUgYnkgdGhlIHNhbWUgcnVsZXMgZXhwbGFpbmVkIGhlcmUgKGl0IHdpbGwgcmVzdG9yZQorICogICBsYXN0bWFyayBieSBpdHNlbGYgaWYgbmVjZXNzYXJ5KTsKKyAqCisgKiAtIFJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGNvbnRpbnVlIHRoZQorICogICBvdXRzaWRlICdmb3InIGxvb3A6IG11c3QgYmUgcHJvdGVjdGVkIHdoZW4gYnJlYWtpbmcsIHNpbmNlIHRoZSBuZXh0CisgKiAgIE9QIGNvdWxkIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBsYXN0bWFyazsKKyAqCisgKiAtIFJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGJlIGNhbGxlZCBhZ2FpbgorICogICBpbnNpZGUgYSBsb2NhbCBmb3Ivd2hpbGUgbG9vcDogbXVzdCBiZSBwcm90ZWN0ZWQgYmV0d2VlbiBlYWNoCisgKiAgIGxvb3AgaXRlcmF0aW9uLCBzaW5jZSB0aGUgcmVjdXJzaXZlIFNSRShtYXRjaCkoKSBjb3VsZCBkbyBhbnl0aGluZywKKyAqICAgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBsYXN0bWFyay4KKyAqCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY2hlY2sgdGhlIGRpc2N1c3Npb24gYXQgU0YgcGF0Y2ggIzcxMjkwMC4KKyAqLworI2RlZmluZSBMQVNUTUFSS19TQVZFKCkgICAgIFwKKyAgICBkbyB7IFwKKyAgICAgICAgY3R4LT5sYXN0bWFyayA9IHN0YXRlLT5sYXN0bWFyazsgXAorICAgICAgICBjdHgtPmxhc3RpbmRleCA9IHN0YXRlLT5sYXN0aW5kZXg7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBMQVNUTUFSS19SRVNUT1JFKCkgIFwKKyAgICBkbyB7IFwKKyAgICAgICAgc3RhdGUtPmxhc3RtYXJrID0gY3R4LT5sYXN0bWFyazsgXAorICAgICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gY3R4LT5sYXN0aW5kZXg7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFJFVFVSTl9FUlJPUihpKSBkbyB7IHJldHVybiBpOyB9IHdoaWxlKDApCisjZGVmaW5lIFJFVFVSTl9GQUlMVVJFIGRvIHsgcmV0ID0gMDsgZ290byBleGl0OyB9IHdoaWxlKDApCisjZGVmaW5lIFJFVFVSTl9TVUNDRVNTIGRvIHsgcmV0ID0gMTsgZ290byBleGl0OyB9IHdoaWxlKDApCisKKyNkZWZpbmUgUkVUVVJOX09OX0VSUk9SKGkpIFwKKyAgICBkbyB7IGlmIChpIDwgMCkgUkVUVVJOX0VSUk9SKGkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRVRVUk5fT05fU1VDQ0VTUyhpKSBcCisgICAgZG8geyBSRVRVUk5fT05fRVJST1IoaSk7IGlmIChpID4gMCkgUkVUVVJOX1NVQ0NFU1M7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFVFVSTl9PTl9GQUlMVVJFKGkpIFwKKyAgICBkbyB7IFJFVFVSTl9PTl9FUlJPUihpKTsgaWYgKGkgPT0gMCkgUkVUVVJOX0ZBSUxVUkU7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0ZZKHgpICN4CisKKyNkZWZpbmUgREFUQV9TVEFDS19BTExPQyhzdGF0ZSwgdHlwZSwgcHRyKSBcCitkbyB7IFwKKyAgICBhbGxvY19wb3MgPSBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlOyBcCisgICAgVFJBQ0UoKCJhbGxvY2F0aW5nICVzIGluICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgU0ZZKHR5cGUpLCBhbGxvY19wb3MsIHNpemVvZih0eXBlKSkpOyBcCisgICAgaWYgKHNpemVvZih0eXBlKSA+IHN0YXRlLT5kYXRhX3N0YWNrX3NpemUgLSBhbGxvY19wb3MpIHsgXAorICAgICAgICBpbnQgaiA9IGRhdGFfc3RhY2tfZ3JvdyhzdGF0ZSwgc2l6ZW9mKHR5cGUpKTsgXAorICAgICAgICBpZiAoaiA8IDApIHJldHVybiBqOyBcCisgICAgICAgIGlmIChjdHhfcG9zICE9IC0xKSBcCisgICAgICAgICAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOyBcCisgICAgfSBcCisgICAgcHRyID0gKHR5cGUqKShzdGF0ZS0+ZGF0YV9zdGFjaythbGxvY19wb3MpOyBcCisgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplb2YodHlwZSk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIHR5cGUsIHB0ciwgcG9zKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImxvb2tpbmcgdXAgJXMgYXQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgU0ZZKHR5cGUpLCBwb3MpKTsgXAorICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srcG9zKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIGRhdGEsIHNpemUpIFwKK2RvIHsgXAorICAgIFRSQUNFKCgiY29weSBkYXRhIGluICVwIHRvICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgc2l6ZSkpOyBcCisgICAgaWYgKHNpemUgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSkgeyBcCisgICAgICAgIGludCBqID0gZGF0YV9zdGFja19ncm93KHN0YXRlLCBzaXplKTsgXAorICAgICAgICBpZiAoaiA8IDApIHJldHVybiBqOyBcCisgICAgICAgIGlmIChjdHhfcG9zICE9IC0xKSBcCisgICAgICAgICAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOyBcCisgICAgfSBcCisgICAgbWVtY3B5KHN0YXRlLT5kYXRhX3N0YWNrK3N0YXRlLT5kYXRhX3N0YWNrX2Jhc2UsIGRhdGEsIHNpemUpOyBcCisgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBkYXRhLCBzaXplLCBkaXNjYXJkKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImNvcHkgZGF0YSB0byAlcCBmcm9tICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKSk7IFwKKyAgICBtZW1jcHkoZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2src3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKTsgXAorICAgIGlmIChkaXNjYXJkKSBcCisgICAgICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgLT0gc2l6ZTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCBzaXplKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImRpc2NhcmQgZGF0YSBmcm9tICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKSk7IFwKKyAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlIC09IHNpemU7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBEQVRBX1BVU0goeCkgXAorICAgIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgKHgpLCBzaXplb2YoKih4KSkpCisjZGVmaW5lIERBVEFfUE9QKHgpIFwKKyAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgKHgpLCBzaXplb2YoKih4KSksIDEpCisjZGVmaW5lIERBVEFfUE9QX0RJU0NBUkQoeCkgXAorICAgIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIHNpemVvZigqKHgpKSkKKyNkZWZpbmUgREFUQV9BTExPQyh0LHApIFwKKyAgICBEQVRBX1NUQUNLX0FMTE9DKHN0YXRlLCB0LCBwKQorI2RlZmluZSBEQVRBX0xPT0tVUF9BVCh0LHAscG9zKSBcCisgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsdCxwLHBvcykKKworI2RlZmluZSBNQVJLX1BVU0gobGFzdG1hcmspIFwKKyAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKKyAgICAgICAgaSA9IGxhc3RtYXJrOyAvKiBjdHgtPmxhc3RtYXJrIG1heSBjaGFuZ2UgaWYgcmVhbGxvY2F0ZWQgKi8gXAorICAgICAgICBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIHN0YXRlLT5tYXJrLCAoaSsxKSpzaXplb2Yodm9pZCopKTsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE1BUktfUE9QKGxhc3RtYXJrKSBcCisgICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCisgICAgICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKiksIDEpOyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTUFSS19QT1BfS0VFUChsYXN0bWFyaykgXAorICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAorICAgICAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgc3RhdGUtPm1hcmssIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopLCAwKTsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE1BUktfUE9QX0RJU0NBUkQobGFzdG1hcmspIFwKKyAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKKyAgICAgICAgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKikpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBKVU1QX05PTkUgICAgICAgICAgICAwCisjZGVmaW5lIEpVTVBfTUFYX1VOVElMXzEgICAgIDEKKyNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMiAgICAgMgorI2RlZmluZSBKVU1QX01BWF9VTlRJTF8zICAgICAzCisjZGVmaW5lIEpVTVBfTUlOX1VOVElMXzEgICAgIDQKKyNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMiAgICAgNQorI2RlZmluZSBKVU1QX01JTl9VTlRJTF8zICAgICA2CisjZGVmaW5lIEpVTVBfUkVQRUFUICAgICAgICAgIDcKKyNkZWZpbmUgSlVNUF9SRVBFQVRfT05FXzEgICAgOAorI2RlZmluZSBKVU1QX1JFUEVBVF9PTkVfMiAgICA5CisjZGVmaW5lIEpVTVBfTUlOX1JFUEVBVF9PTkUgIDEwCisjZGVmaW5lIEpVTVBfQlJBTkNIICAgICAgICAgIDExCisjZGVmaW5lIEpVTVBfQVNTRVJUICAgICAgICAgIDEyCisjZGVmaW5lIEpVTVBfQVNTRVJUX05PVCAgICAgIDEzCisKKyNkZWZpbmUgRE9fSlVNUFgoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuLCBtYXRjaGFsbCkgXAorICAgIERBVEFfQUxMT0MoU1JFKG1hdGNoX2NvbnRleHQpLCBuZXh0Y3R4KTsgXAorICAgIG5leHRjdHgtPmxhc3RfY3R4X3BvcyA9IGN0eF9wb3M7IFwKKyAgICBuZXh0Y3R4LT5qdW1wID0ganVtcHZhbHVlOyBcCisgICAgbmV4dGN0eC0+cGF0dGVybiA9IG5leHRwYXR0ZXJuOyBcCisgICAgbmV4dGN0eC0+bWF0Y2hfYWxsID0gbWF0Y2hhbGw7IFwKKyAgICBjdHhfcG9zID0gYWxsb2NfcG9zOyBcCisgICAgY3R4ID0gbmV4dGN0eDsgXAorICAgIGdvdG8gZW50cmFuY2U7IFwKKyAgICBqdW1wbGFiZWw6IFwKKyAgICB3aGlsZSAoMCkgLyogZ2NjIGRvZXNuJ3QgbGlrZSBsYWJlbHMgYXQgZW5kIG9mIHNjb3BlcyAqLyBcCisKKyNkZWZpbmUgRE9fSlVNUChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4pIFwKKyAgICBET19KVU1QWChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4sIGN0eC0+bWF0Y2hfYWxsKQorCisjZGVmaW5lIERPX0pVTVAwKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybikgXAorICAgIERPX0pVTVBYKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybiwgMCkKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5X3NzaXplX3QgbGFzdF9jdHhfcG9zOworICAgIFB5X3NzaXplX3QganVtcDsKKyAgICBTUkVfQ0hBUiogcHRyOworICAgIFNSRV9DT0RFKiBwYXR0ZXJuOworICAgIFB5X3NzaXplX3QgY291bnQ7CisgICAgUHlfc3NpemVfdCBsYXN0bWFyazsKKyAgICBQeV9zc2l6ZV90IGxhc3RpbmRleDsKKyAgICB1bmlvbiB7CisgICAgICAgIFNSRV9DT0RFIGNocjsKKyAgICAgICAgU1JFX1JFUEVBVCogcmVwOworICAgIH0gdTsKKyAgICBpbnQgbWF0Y2hfYWxsOworfSBTUkUobWF0Y2hfY29udGV4dCk7CisKKy8qIGNoZWNrIGlmIHN0cmluZyBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLiAgcmV0dXJucyA8MCBmb3IKKyAgIGVycm9yLCAwIGZvciBmYWlsdXJlLCBhbmQgMSBmb3Igc3VjY2VzcyAqLworTE9DQUwoUHlfc3NpemVfdCkKK1NSRShtYXRjaCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgU1JFX0NIQVIqIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgUHlfc3NpemVfdCBhbGxvY19wb3MsIGN0eF9wb3MgPSAtMTsKKyAgICBQeV9zc2l6ZV90IGksIHJldCA9IDA7CisgICAgUHlfc3NpemVfdCBqdW1wOworICAgIHVuc2lnbmVkIGludCBzaWdjb3VudD0wOworCisgICAgU1JFKG1hdGNoX2NvbnRleHQpKiBjdHg7CisgICAgU1JFKG1hdGNoX2NvbnRleHQpKiBuZXh0Y3R4OworCisgICAgVFJBQ0UoKCJ8JXB8JXB8RU5URVJcbiIsIHBhdHRlcm4sIHN0YXRlLT5wdHIpKTsKKworICAgIERBVEFfQUxMT0MoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgpOworICAgIGN0eC0+bGFzdF9jdHhfcG9zID0gLTE7CisgICAgY3R4LT5qdW1wID0gSlVNUF9OT05FOworICAgIGN0eC0+cGF0dGVybiA9IHBhdHRlcm47CisgICAgY3R4LT5tYXRjaF9hbGwgPSBzdGF0ZS0+bWF0Y2hfYWxsOworICAgIGN0eF9wb3MgPSBhbGxvY19wb3M7CisKK2VudHJhbmNlOgorCisgICAgY3R4LT5wdHIgPSAoU1JFX0NIQVIgKilzdGF0ZS0+cHRyOworCisgICAgaWYgKGN0eC0+cGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgeworICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLworICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gLi4uICovCisgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bM10gJiYgKFB5X3VpbnRwdHJfdCkoZW5kIC0gY3R4LT5wdHIpIDwgY3R4LT5wYXR0ZXJuWzNdKSB7CisgICAgICAgICAgICBUUkFDRSgoInJlamVjdCAoZ290ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgY2hhcnMsICIKKyAgICAgICAgICAgICAgICAgICAibmVlZCAlIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwKKyAgICAgICAgICAgICAgICAgICBlbmQgLSBjdHgtPnB0ciwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblszXSkpOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXSArIDE7CisgICAgfQorCisgICAgZm9yICg7OykgeworICAgICAgICArK3NpZ2NvdW50OworICAgICAgICBpZiAoKDAgPT0gKHNpZ2NvdW50ICYgMHhmZmYpKSAmJiBQeUVycl9DaGVja1NpZ25hbHMoKSkKKyAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfSU5URVJSVVBURUQpOworCisgICAgICAgIHN3aXRjaCAoKmN0eC0+cGF0dGVybisrKSB7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTUFSSzoKKyAgICAgICAgICAgIC8qIHNldCBtYXJrICovCisgICAgICAgICAgICAvKiA8TUFSSz4gPGdpZD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1BUksgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgaWYgKGkgJiAxKQorICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0aW5kZXggPSBpLzIgKyAxOworICAgICAgICAgICAgaWYgKGkgPiBzdGF0ZS0+bGFzdG1hcmspIHsKKyAgICAgICAgICAgICAgICAvKiBzdGF0ZS0+bGFzdG1hcmsgaXMgdGhlIGhpZ2hlc3QgdmFsaWQgaW5kZXggaW4gdGhlCisgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1hcmsgYXJyYXkuICBJZiBpdCBpcyBpbmNyZWFzZWQgYnkgbW9yZSB0aGFuIDEsCisgICAgICAgICAgICAgICAgICAgdGhlIGludGVydmVuaW5nIG1hcmtzIG11c3QgYmUgc2V0IHRvIE5VTEwgdG8gc2lnbmFsCisgICAgICAgICAgICAgICAgICAgdGhhdCB0aGVzZSBtYXJrcyBoYXZlIG5vdCBiZWVuIGVuY291bnRlcmVkLiAqLworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaiA9IHN0YXRlLT5sYXN0bWFyayArIDE7CisgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBpKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bWFya1tqKytdID0gTlVMTDsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdG1hcmsgPSBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUtPm1hcmtbaV0gPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTDoKKyAgICAgICAgICAgIC8qIG1hdGNoIGxpdGVyYWwgc3RyaW5nICovCisgICAgICAgICAgICAvKiA8TElURVJBTD4gPGNvZGU+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxMSVRFUkFMICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgKFNSRV9DT0RFKSBjdHgtPnB0clswXSAhPSBjdHgtPnBhdHRlcm5bMF0pCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTDoKKyAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIHRoYXQgaXMgbm90IGxpdGVyYWwgY2hhcmFjdGVyICovCisgICAgICAgICAgICAvKiA8Tk9UX0xJVEVSQUw+IDxjb2RlPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Tk9UX0xJVEVSQUwgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAoU1JFX0NPREUpIGN0eC0+cHRyWzBdID09IGN0eC0+cGF0dGVyblswXSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX1NVQ0NFU1M6CisgICAgICAgICAgICAvKiBlbmQgb2YgcGF0dGVybiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U1VDQ0VTU1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKCFjdHgtPm1hdGNoX2FsbCB8fCBjdHgtPnB0ciA9PSBzdGF0ZS0+ZW5kKSB7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQVQ6CisgICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBwb3NpdGlvbiAqLworICAgICAgICAgICAgLyogPEFUPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFUICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoIVNSRShhdCkoc3RhdGUsIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQ0FURUdPUlk6CisgICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBjYXRlZ29yeSAqLworICAgICAgICAgICAgLyogPENBVEVHT1JZPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfENBVEVHT1JZICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIXNyZV9jYXRlZ29yeShjdHgtPnBhdHRlcm5bMF0sIGN0eC0+cHRyWzBdKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0FOWToKKyAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIChleGNlcHQgYSBuZXdsaW5lKSAqLworICAgICAgICAgICAgLyogPEFOWT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCBTUkVfSVNfTElORUJSRUFLKGN0eC0+cHRyWzBdKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgorICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgKi8KKyAgICAgICAgICAgIC8qIDxBTllfQUxMPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QU5ZX0FMTFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9JTjoKKyAgICAgICAgICAgIC8qIG1hdGNoIHNldCBtZW1iZXIgKG9yIG5vbl9tZW1iZXIpICovCisgICAgICAgICAgICAvKiA8SU4+IDxza2lwPiA8c2V0PiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5cbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIVNSRShjaGFyc2V0KShjdHgtPnBhdHRlcm4gKyAxLCAqY3R4LT5wdHIpKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfExJVEVSQUxfSUdOT1JFICVkXG4iLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcigqY3R4LT5wdHIpICE9IHN0YXRlLT5sb3dlcigqY3R4LT5wYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKCpjdHgtPnB0cikgPT0gc3RhdGUtPmxvd2VyKCpjdHgtPnBhdHRlcm4pKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfSU5fSUdOT1JFOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5fSUdOT1JFXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kCisgICAgICAgICAgICAgICAgfHwgIVNSRShjaGFyc2V0KShjdHgtPnBhdHRlcm4rMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTUkVfQ09ERSlzdGF0ZS0+bG93ZXIoKmN0eC0+cHRyKSkpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0pVTVA6CisgICAgICAgIGNhc2UgU1JFX09QX0lORk86CisgICAgICAgICAgICAvKiBqdW1wIGZvcndhcmQgKi8KKyAgICAgICAgICAgIC8qIDxKVU1QPiA8b2Zmc2V0PiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9CUkFOQ0g6CisgICAgICAgICAgICAvKiBhbHRlcm5hdGlvbiAqLworICAgICAgICAgICAgLyogPEJSQU5DSD4gPDA9c2tpcD4gY29kZSA8SlVNUD4gLi4uIDxOVUxMPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QlJBTkNIXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisgICAgICAgICAgICBjdHgtPnUucmVwID0gc3RhdGUtPnJlcGVhdDsKKyAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgIE1BUktfUFVTSChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgIGZvciAoOyBjdHgtPnBhdHRlcm5bMF07IGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzFdID09IFNSRV9PUF9MSVRFUkFMICYmCisgICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICAgICAgIChTUkVfQ09ERSkgKmN0eC0+cHRyICE9IGN0eC0+cGF0dGVyblsyXSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gU1JFX09QX0lOICYmCisgICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICAgICAgICFTUkUoY2hhcnNldCkoY3R4LT5wYXR0ZXJuICsgMywgKFNSRV9DT0RFKSAqY3R4LT5wdHIpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9CUkFOQ0gsIGp1bXBfYnJhbmNoLCBjdHgtPnBhdHRlcm4rMSk7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0tFRVAoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX1JFUEVBVF9PTkU6CisgICAgICAgICAgICAvKiBtYXRjaCByZXBlYXRlZCBzZXF1ZW5jZSAobWF4aW1pemluZyByZWdleHApICovCisKKyAgICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyBpZiB0aGUgcmVwZWF0ZWQgaXRlbSBpcworICAgICAgICAgICAgICAgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHdpZGUsIGFuZCB3ZSdyZSBub3QgYWxyZWFkeQorICAgICAgICAgICAgICAgY29sbGVjdGluZyBiYWNrdHJhY2tpbmcgcG9pbnRzLiAgZm9yIG90aGVyIGNhc2VzLAorICAgICAgICAgICAgICAgdXNlIHRoZSBNQVhfUkVQRUFUIG9wZXJhdG9yICovCisKKyAgICAgICAgICAgIC8qIDxSRVBFQVRfT05FPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFNVQ0NFU1M+IHRhaWwgKi8KKworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUX09ORSAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOworCisgICAgICAgICAgICBpZiAoKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSA+IGVuZCAtIGN0eC0+cHRyKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOyAvKiBjYW5ub3QgbWF0Y2ggKi8KKworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworCisgICAgICAgICAgICByZXQgPSBTUkUoY291bnQpKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzJdKTsKKyAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOworICAgICAgICAgICAgY3R4LT5jb3VudCA9IHJldDsKKyAgICAgICAgICAgIGN0eC0+cHRyICs9IGN0eC0+Y291bnQ7CisKKyAgICAgICAgICAgIC8qIHdoZW4gd2UgYXJyaXZlIGhlcmUsIGNvdW50IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgIG1hdGNoZXMsIGFuZCBjdHgtPnB0ciBwb2ludHMgdG8gdGhlIHRhaWwgb2YgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgc3RyaW5nLiAgY2hlY2sgaWYgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gbWF0Y2hlcywKKyAgICAgICAgICAgICAgIGFuZCBiYWNrdHJhY2sgaWYgbm90LiAqLworCisgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfU1VDQ0VTUyAmJgorICAgICAgICAgICAgICAgICghY3R4LT5tYXRjaF9hbGwgfHwgY3R4LT5wdHIgPT0gc3RhdGUtPmVuZCkpIHsKKyAgICAgICAgICAgICAgICAvKiB0YWlsIGlzIGVtcHR5LiAgd2UncmUgZmluaXNoZWQgKi8KKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9MSVRFUkFMKSB7CisgICAgICAgICAgICAgICAgLyogdGFpbCBzdGFydHMgd2l0aCBhIGxpdGVyYWwuIHNraXAgcG9zaXRpb25zIHdoZXJlCisgICAgICAgICAgICAgICAgICAgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gY2Fubm90IHBvc3NpYmx5IG1hdGNoICovCisgICAgICAgICAgICAgICAgY3R4LT51LmNociA9IGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF0rMV07CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3R4LT5jb3VudCA+PSAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8ICpjdHgtPnB0ciAhPSBjdHgtPnUuY2hyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHItLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8xLCBqdW1wX3JlcGVhdF9vbmVfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKworICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ci0tOworICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLworICAgICAgICAgICAgICAgIHdoaWxlIChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8yLCBqdW1wX3JlcGVhdF9vbmVfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ci0tOworICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07CisgICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9NSU5fUkVQRUFUX09ORToKKyAgICAgICAgICAgIC8qIG1hdGNoIHJlcGVhdGVkIHNlcXVlbmNlIChtaW5pbWl6aW5nIHJlZ2V4cCkgKi8KKworICAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIGlmIHRoZSByZXBlYXRlZCBpdGVtIGlzCisgICAgICAgICAgICAgICBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgd2lkZSwgYW5kIHdlJ3JlIG5vdCBhbHJlYWR5CisgICAgICAgICAgICAgICBjb2xsZWN0aW5nIGJhY2t0cmFja2luZyBwb2ludHMuICBmb3Igb3RoZXIgY2FzZXMsCisgICAgICAgICAgICAgICB1c2UgdGhlIE1JTl9SRVBFQVQgb3BlcmF0b3IgKi8KKworICAgICAgICAgICAgLyogPE1JTl9SRVBFQVRfT05FPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFNVQ0NFU1M+IHRhaWwgKi8KKworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUlOX1JFUEVBVF9PTkUgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKKworICAgICAgICAgICAgaWYgKChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gPiBlbmQgLSBjdHgtPnB0cikKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSAwKQorICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSAwOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyogY291bnQgdXNpbmcgcGF0dGVybiBtaW4gYXMgdGhlIG1heGltdW0gKi8KKyAgICAgICAgICAgICAgICByZXQgPSBTUkUoY291bnQpKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzFdKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCisgICAgICAgICAgICAgICAgICAgIC8qIGRpZG4ndCBtYXRjaCBtaW5pbXVtIG51bWJlciBvZiB0aW1lcyAqLworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBhc3QgbWluaW11bSBtYXRjaGVzIG9mIHJlcGVhdCAqLworICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSByZXQ7CisgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9TVUNDRVNTICYmCisgICAgICAgICAgICAgICAgKCFjdHgtPm1hdGNoX2FsbCB8fCBjdHgtPnB0ciA9PSBzdGF0ZS0+ZW5kKSkgeworICAgICAgICAgICAgICAgIC8qIHRhaWwgaXMgZW1wdHkuICB3ZSdyZSBmaW5pc2hlZCAqLworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KKyAgICAgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsyXSA9PSBTUkVfTUFYUkVQRUFUCisgICAgICAgICAgICAgICAgICAgICAgIHx8IGN0eC0+Y291bnQgPD0gKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzJdKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9SRVBFQVRfT05FLGp1bXBfbWluX3JlcGVhdF9vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICByZXQgPSBTUkUoY291bnQpKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgMSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IDEpOworICAgICAgICAgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9SRVBFQVQ6CisgICAgICAgICAgICAvKiBjcmVhdGUgcmVwZWF0IGNvbnRleHQuICBhbGwgdGhlIGhhcmQgd29yayBpcyBkb25lCisgICAgICAgICAgICAgICBieSB0aGUgVU5USUwgb3BlcmF0b3IgKE1BWF9VTlRJTCwgTUlOX1VOVElMKSAqLworICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxVTlRJTD4gdGFpbCAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7CisKKyAgICAgICAgICAgIC8qIGluc3RhbGwgbmV3IHJlcGVhdCBjb250ZXh0ICovCisgICAgICAgICAgICBjdHgtPnUucmVwID0gKFNSRV9SRVBFQVQqKSBQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKCpjdHgtPnUucmVwKSk7CisgICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSAtMTsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4gPSBjdHgtPnBhdHRlcm47CisgICAgICAgICAgICBjdHgtPnUucmVwLT5wcmV2ID0gc3RhdGUtPnJlcGVhdDsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gTlVMTDsKKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFULCBqdW1wX3JlcGVhdCwgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7CisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKKyAgICAgICAgICAgIFB5T2JqZWN0X0ZSRUUoY3R4LT51LnJlcCk7CisKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX01BWF9VTlRJTDoKKyAgICAgICAgICAgIC8qIG1heGltaXppbmcgcmVwZWF0ICovCisgICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPE1BWF9VTlRJTD4gdGFpbCAqLworCisgICAgICAgICAgICAvKiBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBkZWFsIHdpdGggemVyby13aWR0aAorICAgICAgICAgICAgICAgbWF0Y2hlcyBpbiBoZXJlLi4uICovCisKKyAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OworICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfU1RBVEUpOworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisKKyAgICAgICAgICAgIGN0eC0+Y291bnQgPSBjdHgtPnUucmVwLT5jb3VudCsxOworCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVhfVU5USUwgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPmNvdW50KSk7CisKKyAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMV0pIHsKKyAgICAgICAgICAgICAgICAvKiBub3QgZW5vdWdoIG1hdGNoZXMgKi8KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7CisgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8xLCBqdW1wX21heF91bnRpbF8xLAorICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsyXSB8fAorICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gPT0gU1JFX01BWFJFUEVBVCkgJiYKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyICE9IGN0eC0+dS5yZXAtPmxhc3RfcHRyKSB7CisgICAgICAgICAgICAgICAgLyogd2UgbWF5IGhhdmUgZW5vdWdoIG1hdGNoZXMsIGJ1dCBpZiB3ZSBjYW4KKyAgICAgICAgICAgICAgICAgICBtYXRjaCBhbm90aGVyIGl0ZW0sIGRvIHNvICovCisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OworICAgICAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKyAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCisgICAgICAgICAgICAgICAgREFUQV9QVVNIKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBzdGF0ZS0+cHRyOworICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMiwganVtcF9tYXhfdW50aWxfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7CisgICAgICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTUFSS19QT1AoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogY2Fubm90IG1hdGNoIG1vcmUgcmVwZWF0ZWQgaXRlbXMgaGVyZS4gIG1ha2Ugc3VyZSB0aGUKKyAgICAgICAgICAgICAgIHRhaWwgbWF0Y2hlcyAqLworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7CisgICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzMsIGp1bXBfbWF4X3VudGlsXzMsIGN0eC0+cGF0dGVybik7CisgICAgICAgICAgICBSRVRVUk5fT05fU1VDQ0VTUyhyZXQpOworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9NSU5fVU5USUw6CisgICAgICAgICAgICAvKiBtaW5pbWl6aW5nIHJlcGVhdCAqLworICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxNSU5fVU5USUw+IHRhaWwgKi8KKworICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7CisgICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9TVEFURSk7CisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgY3R4LT5jb3VudCA9IGN0eC0+dS5yZXAtPmNvdW50KzE7CisKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9VTlRJTCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICVwXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+Y291bnQsIGN0eC0+dS5yZXAtPnBhdHRlcm4pKTsKKworICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsxXSkgeworICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggbWF0Y2hlcyAqLworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzEsIGp1bXBfbWluX3VudGlsXzEsCisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKworICAgICAgICAgICAgLyogc2VlIGlmIHRoZSB0YWlsIG1hdGNoZXMgKi8KKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OworICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8yLCBqdW1wX21pbl91bnRpbF8yLCBjdHgtPnBhdHRlcm4pOworICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworCisgICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0KKyAgICAgICAgICAgICAgICAmJiBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdICE9IFNSRV9NQVhSRVBFQVQpIHx8CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9PSBjdHgtPnUucmVwLT5sYXN0X3B0cikKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OworICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCisgICAgICAgICAgICBEQVRBX1BVU0goJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gc3RhdGUtPnB0cjsKKyAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMyxqdW1wX21pbl91bnRpbF8zLAorICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOworICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUY6CisgICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRiAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBwID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogZSA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOworICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICpjdHgtPnB0ciAhPSAqcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGX0lHTk9SRToKKyAgICAgICAgICAgIC8qIG1hdGNoIGJhY2tyZWZlcmVuY2UgKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGX0lHTk9SRSAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBwID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogZSA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOworICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKCpjdHgtPnB0cikgIT0gc3RhdGUtPmxvd2VyKCpwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGX0VYSVNUUzoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGX0VYSVNUUyAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIC8qIDxHUk9VUFJFRl9FWElTVFM+IDxncm91cD4gPHNraXA+IGNvZGV5ZXMgPEpVTVA+IGNvZGVubyAuLi4gKi8KKyAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBwID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogZSA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOworICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSAyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQVNTRVJUOgorICAgICAgICAgICAgLyogYXNzZXJ0IHN1YnBhdHRlcm4gKi8KKyAgICAgICAgICAgIC8qIDxBU1NFUlQ+IDxza2lwPiA8YmFjaz4gPHBhdHRlcm4+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBU1NFUlQgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzFdKSk7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHIgLSBjdHgtPnBhdHRlcm5bMV07CisgICAgICAgICAgICBpZiAoc3RhdGUtPnB0ciA8IHN0YXRlLT5iZWdpbm5pbmcpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBET19KVU1QMChKVU1QX0FTU0VSVCwganVtcF9hc3NlcnQsIGN0eC0+cGF0dGVybisyKTsKKyAgICAgICAgICAgIFJFVFVSTl9PTl9GQUlMVVJFKHJldCk7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQVNTRVJUX05PVDoKKyAgICAgICAgICAgIC8qIGFzc2VydCBub3Qgc3VicGF0dGVybiAqLworICAgICAgICAgICAgLyogPEFTU0VSVF9OT1Q+IDxza2lwPiA8YmFjaz4gPHBhdHRlcm4+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBU1NFUlRfTk9UICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblsxXSkpOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyIC0gY3R4LT5wYXR0ZXJuWzFdOworICAgICAgICAgICAgaWYgKHN0YXRlLT5wdHIgPj0gc3RhdGUtPmJlZ2lubmluZykgeworICAgICAgICAgICAgICAgIERPX0pVTVAwKEpVTVBfQVNTRVJUX05PVCwganVtcF9hc3NlcnRfbm90LCBjdHgtPnBhdHRlcm4rMik7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6CisgICAgICAgICAgICAvKiBpbW1lZGlhdGUgZmFpbHVyZSAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8RkFJTFVSRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFVOS05PV04gJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWy0xXSkpOworICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTExFR0FMKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICBjdHhfcG9zID0gY3R4LT5sYXN0X2N0eF9wb3M7CisgICAganVtcCA9IGN0eC0+anVtcDsKKyAgICBEQVRBX1BPUF9ESVNDQVJEKGN0eCk7CisgICAgaWYgKGN0eF9wb3MgPT0gLTEpCisgICAgICAgIHJldHVybiByZXQ7CisgICAgREFUQV9MT09LVVBfQVQoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOworCisgICAgc3dpdGNoIChqdW1wKSB7CisgICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMjoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMjsKKyAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8zOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfM1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8zOworICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzI6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzI7CisgICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMzoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzNcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMzsKKyAgICAgICAgY2FzZSBKVU1QX0JSQU5DSDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQlJBTkNIXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfYnJhbmNoOworICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzE6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzE7CisgICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMTsKKyAgICAgICAgY2FzZSBKVU1QX1JFUEVBVDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0OworICAgICAgICBjYXNlIEpVTVBfUkVQRUFUX09ORV8xOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRfT05FXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXRfb25lXzE7CisgICAgICAgIGNhc2UgSlVNUF9SRVBFQVRfT05FXzI6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVF9PTkVfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdF9vbmVfMjsKKyAgICAgICAgY2FzZSBKVU1QX01JTl9SRVBFQVRfT05FOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fUkVQRUFUX09ORVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21pbl9yZXBlYXRfb25lOworICAgICAgICBjYXNlIEpVTVBfQVNTRVJUOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9hc3NlcnQ7CisgICAgICAgIGNhc2UgSlVNUF9BU1NFUlRfTk9UOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRfTk9UXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfYXNzZXJ0X25vdDsKKyAgICAgICAgY2FzZSBKVU1QX05PTkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVRVUk4gJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCByZXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7IC8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworfQorCitMT0NBTChQeV9zc2l6ZV90KQorU1JFKHNlYXJjaCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgU1JFX0NIQVIqIHB0ciA9IChTUkVfQ0hBUiAqKXN0YXRlLT5zdGFydDsKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICBQeV9zc2l6ZV90IHN0YXR1cyA9IDA7CisgICAgUHlfc3NpemVfdCBwcmVmaXhfbGVuID0gMDsKKyAgICBQeV9zc2l6ZV90IHByZWZpeF9za2lwID0gMDsKKyAgICBTUkVfQ09ERSogcHJlZml4ID0gTlVMTDsKKyAgICBTUkVfQ09ERSogY2hhcnNldCA9IE5VTEw7CisgICAgU1JFX0NPREUqIG92ZXJsYXAgPSBOVUxMOworICAgIGludCBmbGFncyA9IDA7CisKKyAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgeworICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLworICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gPDQ9bWF4PiA8NT1wcmVmaXggaW5mbz4gICovCisKKyAgICAgICAgZmxhZ3MgPSBwYXR0ZXJuWzJdOworCisgICAgICAgIGlmIChwYXR0ZXJuWzNdID4gMSkgeworICAgICAgICAgICAgLyogYWRqdXN0IGVuZCBwb2ludCAoYnV0IG1ha2Ugc3VyZSB3ZSBsZWF2ZSBhdCBsZWFzdCBvbmUKKyAgICAgICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGVyZSwgc28gbGl0ZXJhbCBzZWFyY2ggd2lsbCB3b3JrKSAqLworICAgICAgICAgICAgZW5kIC09IHBhdHRlcm5bM10gLSAxOworICAgICAgICAgICAgaWYgKGVuZCA8PSBwdHIpCisgICAgICAgICAgICAgICAgZW5kID0gcHRyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fUFJFRklYKSB7CisgICAgICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEga25vd24gcHJlZml4ICovCisgICAgICAgICAgICAvKiA8bGVuZ3RoPiA8c2tpcD4gPHByZWZpeCBkYXRhPiA8b3ZlcmxhcCBkYXRhPiAqLworICAgICAgICAgICAgcHJlZml4X2xlbiA9IHBhdHRlcm5bNV07CisgICAgICAgICAgICBwcmVmaXhfc2tpcCA9IHBhdHRlcm5bNl07CisgICAgICAgICAgICBwcmVmaXggPSBwYXR0ZXJuICsgNzsKKyAgICAgICAgICAgIG92ZXJsYXAgPSBwcmVmaXggKyBwcmVmaXhfbGVuIC0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChmbGFncyAmIFNSRV9JTkZPX0NIQVJTRVQpCisgICAgICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgY2hhcmFjdGVyIGZyb20gYSBrbm93biBzZXQgKi8KKyAgICAgICAgICAgIC8qIDxjaGFyc2V0PiAqLworICAgICAgICAgICAgY2hhcnNldCA9IHBhdHRlcm4gKyA1OworCisgICAgICAgIHBhdHRlcm4gKz0gMSArIHBhdHRlcm5bMV07CisgICAgfQorCisgICAgVFJBQ0UoKCJwcmVmaXggPSAlcCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCisgICAgICAgICAgIHByZWZpeCwgcHJlZml4X2xlbiwgcHJlZml4X3NraXApKTsKKyAgICBUUkFDRSgoImNoYXJzZXQgPSAlcFxuIiwgY2hhcnNldCkpOworCisjaWYgZGVmaW5lZChVU0VfRkFTVF9TRUFSQ0gpCisgICAgaWYgKHByZWZpeF9sZW4gPiAxKSB7CisgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBrbm93biBwcmVmaXguICB1c2UgdGhlIG92ZXJsYXAKKyAgICAgICAgICAgdGFibGUgdG8gc2tpcCBmb3J3YXJkIGFzIGZhc3QgYXMgd2UgcG9zc2libHkgY2FuICovCisgICAgICAgIFB5X3NzaXplX3QgaSA9IDA7CisKKyAgICAgICAgZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBlbmQgLSBwdHIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmVmaXhfbGVuOyBpKyspCisgICAgICAgICAgICBpZiAoKFNSRV9DT0RFKShTUkVfQ0hBUikgcHJlZml4W2ldICE9IHByZWZpeFtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgLyogbGl0ZXJhbCBjYW4ndCBtYXRjaDogZG9lc24ndCBmaXQgaW4gY2hhciB3aWR0aCAqLworI2VuZGlmCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAgIFNSRV9DSEFSIGMgPSAoU1JFX0NIQVIpIHByZWZpeFswXTsKKyAgICAgICAgICAgIHdoaWxlICgqcHRyKysgIT0gYykgeworICAgICAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBpID0gMTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoKnB0ciA9PSAoU1JFX0NIQVIpIHByZWZpeFtpXSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKytpICE9IHByZWZpeF9sZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK3B0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBmb3VuZCBhIHBvdGVudGlhbCBtYXRjaCAqLworICAgICAgICAgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggU0NBTlxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0ciAtIChwcmVmaXhfbGVuIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHIgLSAocHJlZml4X2xlbiAtIHByZWZpeF9za2lwIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX0xJVEVSQUwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuICsgMipwcmVmaXhfc2tpcCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGJ1dCBubyBjaWdhciAtLSB0cnkgYWdhaW4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCsrcHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpID0gb3ZlcmxhcFtpXTsKKyAgICAgICAgICAgIH0gd2hpbGUgKGkgIT0gMCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfTElURVJBTCkgeworICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbCBjaGFyYWN0ZXIuICB0aGlzIGlzIHVzZWQKKyAgICAgICAgICAgZm9yIHNob3J0IHByZWZpeGVzLCBhbmQgaWYgZmFzdCBzZWFyY2ggaXMgZGlzYWJsZWQgKi8KKyAgICAgICAgU1JFX0NIQVIgYyA9IChTUkVfQ0hBUikgcGF0dGVyblsxXTsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGlmICgoU1JFX0NPREUpIGMgIT0gcGF0dGVyblsxXSkKKyAgICAgICAgICAgIHJldHVybiAwOyAvKiBsaXRlcmFsIGNhbid0IG1hdGNoOiBkb2Vzbid0IGZpdCBpbiBjaGFyIHdpZHRoICovCisjZW5kaWYKKyAgICAgICAgZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgeworICAgICAgICAgICAgd2hpbGUgKCpwdHIgIT0gYykgeworICAgICAgICAgICAgICAgIGlmICgrK3B0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIExJVEVSQUxcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9ICsrcHRyOworICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLworICAgICAgICAgICAgc3RhdHVzID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybiArIDIpOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjaGFyc2V0KSB7CisgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBjaGFyYWN0ZXIgZnJvbSBhIGtub3duIHNldCAqLworICAgICAgICBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICFTUkUoY2hhcnNldCkoY2hhcnNldCwgKnB0cikpCisgICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICBpZiAocHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBDSEFSU0VUXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0cjsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHI7CisgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLworICAgICAgICB3aGlsZSAocHRyIDw9IGVuZCkgeworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHN0YXRlLT5wdHIgPSBwdHIrKzsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4pOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisjdW5kZWYgU1JFX0NIQVIKKyN1bmRlZiBTSVpFT0ZfU1JFX0NIQVIKKyN1bmRlZiBTUkUKKworLyogdmltOnRzPTQ6c3c9NDpldAorKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYyBiL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYwppbmRleCAzN2RmODJkLi5jZGI0ZmZjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCkBAIC0xMSwxMiArMTEsMTIgQEAKICAgICBQeU9iamVjdCAqdDsKIAogICAgIGNoYXIgKnN0cjsKLSAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CiAgICAgY2hhciAqc3RhcnRzdHI7CiAgICAgaW50IHN0YXJ0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzc3M6c3ltdGFibGUiLCAmc3RyLCAmZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHN0cikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzTyZzOnN5bXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ciwgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lLCAmc3RhcnRzdHIpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc3RyY21wKHN0YXJ0c3RyLCAiZXhlYyIpID09IDApCiAgICAgICAgIHN0YXJ0ID0gUHlfZmlsZV9pbnB1dDsKQEAgLTI3LDkgKzI3LDExIEBACiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAic3ltdGFibGUoKSBhcmcgMyBtdXN0IGJlICdleGVjJyBvciAnZXZhbCcgb3IgJ3NpbmdsZSciKTsKKyAgICAgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0ID0gUHlfU3ltdGFibGVTdHJpbmcoc3RyLCBmaWxlbmFtZSwgc3RhcnQpOworICAgIHN0ID0gUHlfU3ltdGFibGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CiAgICAgaWYgKHN0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHQgPSAoUHlPYmplY3QgKilzdC0+c3RfdG9wOwpAQCAtNjksMzAgKzcxLDMwIEBACiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc3ltdGFibGVtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJVU0UiLCBVU0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfR0xPQkFMIiwgREVGX0dMT0JBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9MT0NBTCIsIERFRl9MT0NBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9QQVJBTSIsIERFRl9QQVJBTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9GUkVFIiwgREVGX0ZSRUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfRlJFRV9DTEFTUyIsIERFRl9GUkVFX0NMQVNTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0lNUE9SVCIsIERFRl9JTVBPUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfQk9VTkQiLCBERUZfQk9VTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVTRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0dMT0JBTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0xPQ0FMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfUEFSQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9GUkVFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfRlJFRV9DTEFTUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0lNUE9SVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0JPVU5EKTsKIAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUWVBFX0ZVTkNUSU9OIiwgRnVuY3Rpb25CbG9jayk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRZUEVfQ0xBU1MiLCBDbGFzc0Jsb2NrKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVFlQRV9NT0RVTEUiLCBNb2R1bGVCbG9jayk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BUX0lNUE9SVF9TVEFSIiwgT1BUX0lNUE9SVF9TVEFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BUX1RPUExFVkVMIiwgT1BUX1RPUExFVkVMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPUFRfSU1QT1JUX1NUQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9QVF9UT1BMRVZFTCk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9DQUwiLCBMT0NBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkdMT0JBTF9FWFBMSUNJVCIsIEdMT0JBTF9FWFBMSUNJVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkdMT0JBTF9JTVBMSUNJVCIsIEdMT0JBTF9JTVBMSUNJVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkZSRUUiLCBGUkVFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0VMTCIsIENFTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0FMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBHTE9CQUxfRVhQTElDSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEdMT0JBTF9JTVBMSUNJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRlJFRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0VMTCk7CiAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NPUEVfT0ZGIiwgU0NPUEVfT0ZGU0VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NPUEVfTUFTSyIsIFNDT1BFX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDT1BFX01BU0spOwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfREVDUkVGKG0pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYyBiL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKaW5kZXggZmMzZjM3NS4uZjJkNDRmZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYworKysgYi9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCkBAIC0yNzcsNDQgKzI3Nyw0NCBAQAogICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCiAKICAgICAvKiBQcmlvcml0aWVzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19FTUVSRyIsICAgICAgIExPR19FTUVSRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19BTEVSVCIsICAgICAgIExPR19BTEVSVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19DUklUIiwgICAgICAgIExPR19DUklUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0VSUiIsICAgICAgICAgTE9HX0VSUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19XQVJOSU5HIiwgTE9HX1dBUk5JTkcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTk9USUNFIiwgIExPR19OT1RJQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfSU5GTyIsICAgICAgICBMT0dfSU5GTyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19ERUJVRyIsICAgICAgIExPR19ERUJVRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0VNRVJHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQUxFUlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19DUklUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfRVJSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfV0FSTklORyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX05PVElDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0lORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19ERUJVRyk7CiAKICAgICAvKiBvcGVubG9nKCkgb3B0aW9uIGZsYWdzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19QSUQiLCAgICAgICAgIExPR19QSUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQ09OUyIsICAgICAgICBMT0dfQ09OUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19OREVMQVkiLCAgTE9HX05ERUxBWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1BJRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0NPTlMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19OREVMQVkpOwogI2lmZGVmIExPR19PREVMQVkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX09ERUxBWSIsICBMT0dfT0RFTEFZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfT0RFTEFZKTsKICNlbmRpZgogI2lmZGVmIExPR19OT1dBSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX05PV0FJVCIsICBMT0dfTk9XQUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTk9XQUlUKTsKICNlbmRpZgogI2lmZGVmIExPR19QRVJST1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1BFUlJPUiIsICBMT0dfUEVSUk9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfUEVSUk9SKTsKICNlbmRpZgogCiAgICAgLyogRmFjaWxpdGllcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfS0VSTiIsICAgICAgICBMT0dfS0VSTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19VU0VSIiwgICAgICAgIExPR19VU0VSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX01BSUwiLCAgICAgICAgTE9HX01BSUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfREFFTU9OIiwgIExPR19EQUVNT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQVVUSCIsICAgICAgICBMT0dfQVVUSCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MUFIiLCAgICAgICAgIExPR19MUFIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwwIiwgIExPR19MT0NBTDApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwxIiwgIExPR19MT0NBTDEpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwyIiwgIExPR19MT0NBTDIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwzIiwgIExPR19MT0NBTDMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw0IiwgIExPR19MT0NBTDQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw1IiwgIExPR19MT0NBTDUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw2IiwgIExPR19MT0NBTDYpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw3IiwgIExPR19MT0NBTDcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19LRVJOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfVVNFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX01BSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19EQUVNT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19BVVRIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTFBSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwwKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwxKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwyKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwzKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw0KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw3KTsKIAogI2lmbmRlZiBMT0dfU1lTTE9HCiAjZGVmaW5lIExPR19TWVNMT0cgICAgICAgICAgICAgIExPR19EQUVNT04KQEAgLTMyOSwxMyArMzI5LDEzIEBACiAjZGVmaW5lIExPR19DUk9OICAgICAgICAgICAgICAgIExPR19EQUVNT04KICNlbmRpZgogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19TWVNMT0ciLCAgTE9HX1NZU0xPRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19DUk9OIiwgICAgICAgIExPR19DUk9OKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1VVQ1AiLCAgICAgICAgTE9HX1VVQ1ApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTkVXUyIsICAgICAgICBMT0dfTkVXUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1NZU0xPRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0NST04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19VVUNQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTkVXUyk7CiAKICNpZmRlZiBMT0dfQVVUSFBSSVYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0FVVEhQUklWIiwgICAgTE9HX0FVVEhQUklWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQVVUSFBSSVYpOwogI2VuZGlmCiAKICAgICByZXR1cm4gbTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvdGltZW1vZHVsZS5jIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKaW5kZXggNDJlYzM2Ni4uZDM4NzhiOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy90aW1lbW9kdWxlLmMKKysrIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKQEAgLTM3LDE2ICszNyw2IEBACiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogI2VuZGlmIC8qICFfX1dBVENPTUNfXyB8fCBfX1FOWF9fICovCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotI2RlZmluZSBJTkNMX0RPUwotI2RlZmluZSBJTkNMX0VSUk9SUwotI2luY2x1ZGUgPG9zMi5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChfX0FQUExFX18pCiAjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KICNlbmRpZgpAQCAtNTQzLDYgKzUzMywyNiBAQAogICAgLyogd2NzZnRpbWUoKSBkb2Vzbid0IGZvcm1hdCBjb3JyZWN0bHkgdGltZSB6b25lcywgc2VlIGlzc3VlICMxMDY1MyAqLwogIyAgdW5kZWYgSEFWRV9XQ1NGVElNRQogI2VuZGlmCisjZGVmaW5lIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyBcCisiQ29tbW9ubHkgdXNlZCBmb3JtYXQgY29kZXM6XG5cCitcblwKKyVZICBZZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyLlxuXAorJW0gIE1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAxLDEyXS5cblwKKyVkICBEYXkgb2YgdGhlIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAxLDMxXS5cblwKKyVIICBIb3VyICgyNC1ob3VyIGNsb2NrKSBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMCwyM10uXG5cCislTSAgTWludXRlIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAwLDU5XS5cblwKKyVTICBTZWNvbmQgYXMgYSBkZWNpbWFsIG51bWJlciBbMDAsNjFdLlxuXAorJXogIFRpbWUgem9uZSBvZmZzZXQgZnJvbSBVVEMuXG5cCislYSAgTG9jYWxlJ3MgYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lLlxuXAorJUEgIExvY2FsZSdzIGZ1bGwgd2Vla2RheSBuYW1lLlxuXAorJWIgIExvY2FsZSdzIGFiYnJldmlhdGVkIG1vbnRoIG5hbWUuXG5cCislQiAgTG9jYWxlJ3MgZnVsbCBtb250aCBuYW1lLlxuXAorJWMgIExvY2FsZSdzIGFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24uXG5cCislSSAgSG91ciAoMTItaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciBbMDEsMTJdLlxuXAorJXAgIExvY2FsZSdzIGVxdWl2YWxlbnQgb2YgZWl0aGVyIEFNIG9yIFBNLlxuXAorXG5cCitPdGhlciBjb2RlcyBtYXkgYmUgYXZhaWxhYmxlIG9uIHlvdXIgcGxhdGZvcm0uICBTZWUgZG9jdW1lbnRhdGlvbiBmb3JcblwKK3RoZSBDIGxpYnJhcnkgc3RyZnRpbWUgZnVuY3Rpb24uXG4iCiAKICNpZmRlZiBIQVZFX1NUUkZUSU1FCiAjaWZkZWYgSEFWRV9XQ1NGVElNRQpAQCAtNjQwLDYgKzY1MCwxOSBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CisjZWxpZiAoZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKHN1bikpICYmIGRlZmluZWQoSEFWRV9XQ1NGVElNRSkKKyAgICBmb3Iob3V0YnVmID0gd2NzY2hyKGZtdCwgJyUnKTsKKyAgICAgICAgb3V0YnVmICE9IE5VTEw7CisgICAgICAgIG91dGJ1ZiA9IHdjc2NocihvdXRidWYrMiwgJyUnKSkKKyAgICB7CisgICAgICAgIC8qIElzc3VlICMxOTYzNDogT24gQUlYLCB3Y3NmdGltZSgieSIsICgxODk5LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgcmV0dXJucyAiMC8iIGluc3RlYWQgb2YgIjk5IiAqLworICAgICAgICBpZiAob3V0YnVmWzFdID09IEwneScgJiYgYnVmLnRtX3llYXIgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0ICV5IHJlcXVpcmVzIHllYXIgPj0gMTkwMCBvbiBBSVgiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQogI2VuZGlmCiAKICAgICBmbXRsZW4gPSB0aW1lX3N0cmxlbihmbXQpOwpAQCAtNjk0LDEzICs3MTcsMTMgQEAKIAogI3VuZGVmIHRpbWVfY2hhcgogI3VuZGVmIGZvcm1hdF90aW1lCi0KIFB5RG9jX1NUUlZBUihzdHJmdGltZV9kb2MsCiAic3RyZnRpbWUoZm9ybWF0WywgdHVwbGVdKSAtPiBzdHJpbmdcblwKIFxuXAogQ29udmVydCBhIHRpbWUgdHVwbGUgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgZm9ybWF0IHNwZWNpZmljYXRpb24uXG5cCiBTZWUgdGhlIGxpYnJhcnkgcmVmZXJlbmNlIG1hbnVhbCBmb3IgZm9ybWF0dGluZyBjb2Rlcy4gV2hlbiB0aGUgdGltZSB0dXBsZVxuXAotaXMgbm90IHByZXNlbnQsIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSBsb2NhbHRpbWUoKSBpcyB1c2VkLiIpOworaXMgbm90IHByZXNlbnQsIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSBsb2NhbHRpbWUoKSBpcyB1c2VkLlxuXAorXG4iIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyk7CiAjZW5kaWYgLyogSEFWRV9TVFJGVElNRSAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzIzLDcgKzc0Niw5IEBACiAic3RycHRpbWUoc3RyaW5nLCBmb3JtYXQpIC0+IHN0cnVjdF90aW1lXG5cCiBcblwKIFBhcnNlIGEgc3RyaW5nIHRvIGEgdGltZSB0dXBsZSBhY2NvcmRpbmcgdG8gYSBmb3JtYXQgc3BlY2lmaWNhdGlvbi5cblwKLVNlZSB0aGUgbGlicmFyeSByZWZlcmVuY2UgbWFudWFsIGZvciBmb3JtYXR0aW5nIGNvZGVzIChzYW1lIGFzIHN0cmZ0aW1lKCkpLiIpOworU2VlIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZSBtYW51YWwgZm9yIGZvcm1hdHRpbmcgY29kZXMgKHNhbWUgYXNcblwKK3N0cmZ0aW1lKCkpLlxuXAorXG4iIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBfYXNjdGltZShzdHJ1Y3QgdG0gKnRpbWVwdHIpCkBAIC04MDIsNyArODI3LDE2IEBACiAgICAgdHQgPSBta3RpbWUoJmJ1Zik7CiAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsIGJ1dCB0bV93ZGF5CiAgICAgICogY2Fubm90IHJlbWFpbiBzZXQgdG8gLTEgaWYgbWt0aW1lIHN1Y2NlZWRlZC4gKi8KLSAgICBpZiAodHQgPT0gKHRpbWVfdCkoLTEpICYmIGJ1Zi50bV93ZGF5ID09IC0xKSB7CisgICAgaWYgKHR0ID09ICh0aW1lX3QpKC0xKQorI2lmbmRlZiBfQUlYCisgICAgICAgIC8qIFJldHVybiB2YWx1ZSBvZiAtMSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIGVycm9yLCBidXQKKyAgICAgICAgICogdG1fd2RheSBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VlZGVkLiAqLworICAgICAgICAmJiBidWYudG1fd2RheSA9PSAtMQorI2Vsc2UKKyAgICAgICAgLyogb24gQUlYLCB0bV93ZGF5IGlzIGFsd2F5cyBzZXRzLCBldmVuIG9uIGVycm9yICovCisjZW5kaWYKKyAgICAgICApCisgICAgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJta3RpbWUgYXJndW1lbnQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODM3LDYgKzg3MSw4IEBACiAgICAgLyogUmVzZXQgdGltZXpvbmUsIGFsdHpvbmUsIGRheWxpZ2h0IGFuZCB0em5hbWUgKi8KICAgICBQeUluaXRfdGltZXpvbmUobSk7CiAgICAgUHlfREVDUkVGKG0pOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKQEAgLTEyNzMsMTkgKzEzMDksMTEgQEAKICNpZiBkZWZpbmVkKEhBVkVfVFpOQU1FKSAmJiAhZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAgICAgUHlPYmplY3QgKm90ejAsICpvdHoxOwogICAgIHR6c2V0KCk7Ci0jaWZkZWYgUFlPU19PUzIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAidGltZXpvbmUiLCBfdGltZXpvbmUpOwotI2Vsc2UgLyogIVBZT1NfT1MyICovCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgInRpbWV6b25lIiwgdGltZXpvbmUpOwotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjaWZkZWYgSEFWRV9BTFRaT05FCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImFsdHpvbmUiLCBhbHR6b25lKTsKICNlbHNlCi0jaWZkZWYgUFlPU19PUzIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiYWx0em9uZSIsIF90aW1lem9uZS0zNjAwKTsKLSNlbHNlIC8qICFQWU9TX09TMiAqLwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJhbHR6b25lIiwgdGltZXpvbmUtMzYwMCk7Ci0jZW5kaWYgLyogUFlPU19PUzIgKi8KICNlbmRpZgogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJkYXlsaWdodCIsIGRheWxpZ2h0KTsKICAgICBvdHowID0gUHlVbmljb2RlX0RlY29kZUxvY2FsZSh0em5hbWVbMF0sICJzdXJyb2dhdGVlc2NhcGUiKTsKQEAgLTE0NjgsOCArMTQ5Niw5IEBACiAgICAgUHlJbml0X3RpbWV6b25lKG0pOwogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RUaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3RpbWVfdHlwZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RUaW1lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfdGltZV90eXBlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICB3aW52ZXIuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih3aW52ZXIpOwpAQCAtMTU4MSw3ICsxNjEwLDcgQEAKICAgICAgICAgICAgIERXT1JEIHJjOwogICAgICAgICAgICAgSEFORExFIGhJbnRlcnJ1cHRFdmVudCA9IF9QeU9TX1NpZ2ludEV2ZW50KCk7CiAgICAgICAgICAgICBSZXNldEV2ZW50KGhJbnRlcnJ1cHRFdmVudCk7Ci0gICAgICAgICAgICByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaEludGVycnVwdEV2ZW50LCB1bF9taWxsaXMpOworICAgICAgICAgICAgcmMgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaEludGVycnVwdEV2ZW50LCB1bF9taWxsaXMsIEZBTFNFKTsKICAgICAgICAgICAgIGlmIChyYyA9PSBXQUlUX09CSkVDVF8wKSB7CiAgICAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwogICAgICAgICAgICAgICAgIGVycm5vID0gRUlOVFI7CkBAIC0xNTkxLDE1ICsxNjIwLDYgQEAKICAgICAgICAgfQogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0KLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgLyogVGhpcyBTbGVlcCAqSVMqIEludGVycnVwdGFibGUgYnkgRXhjZXB0aW9ucyAqLwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAoRG9zU2xlZXAoc2VjcyAqIDEwMDApICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIFB5X0VORF9BTExPV19USFJFQURTCiAjZWxzZQogICAgIC8qIFhYWCBDYW4ndCBpbnRlcnJ1cHQgdGhpcyBzbGVlcCAqLwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKZGlmZiAtLWdpdCBhL01vZHVsZXMvdW5pY29kZWRhdGEuYyBiL01vZHVsZXMvdW5pY29kZWRhdGEuYwppbmRleCBmNGQzNjA4Li4zMjUzZGIyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKKysrIGIvTW9kdWxlcy91bmljb2RlZGF0YS5jCkBAIC0xNyw2ICsxNywxMiBAQAogI2luY2x1ZGUgInVjbmhhc2guaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIHVuaWNvZGVkYXRhCitjbGFzcyB1bmljb2RlZGF0YS5VQ0QgJ1ByZXZpb3VzREJWZXJzaW9uIConICcmVUNEX1R5cGUnCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD02ZGFjMTUzMDgyZDE1MGJjXSovCisKIC8qIGNoYXJhY3RlciBwcm9wZXJ0aWVzICovCiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTEwNywyNSArMTEzLDYzIEBACiAKIC8qIC0tLSBNb2R1bGUgQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1QeURvY19TVFJWQVIodW5pY29kZWRhdGFfZGVjaW1hbF9fZG9jX18sCi0iZGVjaW1hbCh1bmljaHJbLCBkZWZhdWx0XSlcblwKLVxuXAotUmV0dXJucyB0aGUgZGVjaW1hbCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgdW5pY2hyXG5cCi1hcyBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZlxuXAotbm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKwordW5pY29kZWRhdGEuVUNELmRlY2ltYWwKKworICAgIHVuaWNocjogb2JqZWN0KHR5cGU9J1B5VW5pY29kZU9iamVjdCAqJywgc3ViY2xhc3Nfb2Y9JyZQeVVuaWNvZGVfVHlwZScpCisgICAgZGVmYXVsdDogb2JqZWN0PU5VTEwKKyAgICAvCisKK0NvbnZlcnRzIGEgVW5pY29kZSBjaGFyYWN0ZXIgaW50byBpdHMgZXF1aXZhbGVudCBkZWNpbWFsIHZhbHVlLgorCitSZXR1cm5zIHRoZSBkZWNpbWFsIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciB1bmljaHIKK2FzIGludGVnZXIuIElmIG5vIHN1Y2ggdmFsdWUgaXMgZGVmaW5lZCwgZGVmYXVsdCBpcyByZXR1cm5lZCwgb3IsIGlmCitub3QgZ2l2ZW4sIFZhbHVlRXJyb3IgaXMgcmFpc2VkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIodW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfX2RvY19fLAorImRlY2ltYWwoJHNlbGYsIHVuaWNociwgZGVmYXVsdD1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydHMgYSBVbmljb2RlIGNoYXJhY3RlciBpbnRvIGl0cyBlcXVpdmFsZW50IGRlY2ltYWwgdmFsdWUuXG4iCisiXG4iCisiUmV0dXJucyB0aGUgZGVjaW1hbCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgdW5pY2hyXG4iCisiYXMgaW50ZWdlci4gSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWZcbiIKKyJub3QgZ2l2ZW4sIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiIpOworCisjZGVmaW5lIFVOSUNPREVEQVRBX1VDRF9ERUNJTUFMX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNpbWFsIiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bmljb2RlZGF0YV9kZWNpbWFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3VuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX2ltcGwoUHJldmlvdXNEQlZlcnNpb24gKnNlbGYsIFB5VW5pY29kZU9iamVjdCAqdW5pY2hyLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbChQcmV2aW91c0RCVmVyc2lvbiAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlVbmljb2RlT2JqZWN0ICp2OwotICAgIFB5T2JqZWN0ICpkZWZvYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5VW5pY29kZU9iamVjdCAqdW5pY2hyOworICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiTyF8TzpkZWNpbWFsIiwKKyAgICAgICAgJlB5VW5pY29kZV9UeXBlLCAmdW5pY2hyLCAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9pbXBsKHNlbGYsIHVuaWNociwgZGVmYXVsdF92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX2ltcGwoUHJldmlvdXNEQlZlcnNpb24gKnNlbGYsIFB5VW5pY29kZU9iamVjdCAqdW5pY2hyLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04Njg5NjY5ODk2ZDI5M2RmIGlucHV0PWMyNWM5ZDJiNGRlMDc2YjFdKi8KK3sKICAgICBpbnQgaGF2ZV9vbGQgPSAwOwogICAgIGxvbmcgcmM7CiAgICAgUHlfVUNTNCBjOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOmRlY2ltYWwiLCAmUHlVbmljb2RlX1R5cGUsICZ2LCAmZGVmb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYyA9IGdldHVjaGFyKHYpOworICAgIGMgPSBnZXR1Y2hhcih1bmljaHIpOwogICAgIGlmIChjID09IChQeV9VQ1M0KS0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTQ1LDE0ICsxODksMTQgQEAKICAgICBpZiAoIWhhdmVfb2xkKQogICAgICAgICByYyA9IFB5X1VOSUNPREVfVE9ERUNJTUFMKGMpOwogICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgaWYgKGRlZm9iaiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChkZWZhdWx0X3ZhbHVlID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYSBkZWNpbWFsIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZvYmopOwotICAgICAgICAgICAgcmV0dXJuIGRlZm9iajsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZhdWx0X3ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcocmMpOwpAQCAtMTI1MCw3ICsxMjk0LDcgQEAKIC8qIFhYWCBBZGQgZG9jIHN0cmluZ3MuICovCiAKIHN0YXRpYyBQeU1ldGhvZERlZiB1bmljb2RlZGF0YV9mdW5jdGlvbnNbXSA9IHsKLSAgICB7ImRlY2ltYWwiLCB1bmljb2RlZGF0YV9kZWNpbWFsLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX2RlY2ltYWxfX2RvY19ffSwKKyAgICBVTklDT0RFREFUQV9VQ0RfREVDSU1BTF9NRVRIT0RERUYKICAgICB7ImRpZ2l0IiwgdW5pY29kZWRhdGFfZGlnaXQsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfZGlnaXRfX2RvY19ffSwKICAgICB7Im51bWVyaWMiLCB1bmljb2RlZGF0YV9udW1lcmljLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX251bWVyaWNfX2RvY19ffSwKICAgICB7ImNhdGVnb3J5IiwgdW5pY29kZWRhdGFfY2F0ZWdvcnksIE1FVEhfVkFSQVJHUywKQEAgLTEzMjcsNyArMTM3MSw2IEBACiBUaGUgbW9kdWxlIHVzZXMgdGhlIHNhbWUgbmFtZXMgYW5kIHN5bWJvbHMgYXMgZGVmaW5lZCBieSB0aGVcblwKIFVuaWNvZGVEYXRhIEZpbGUgRm9ybWF0ICIgVU5JREFUQV9WRVJTSU9OICIuIik7CiAKLQogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiB1bmljb2RlZGF0YW1vZHVsZSA9IHsKICAgICAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAogICAgICAgICAidW5pY29kZWRhdGEiLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oIGIvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCmluZGV4IDVkNWRjYTguLmVjMTFmYTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaAorKysgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKQEAgLTEsNiArMSw2IEBACiAvKiB0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBUb29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSAzLjIgKi8KIAotI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjYuMS4wIgorI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjYuMy4wIgogLyogYSBsaXN0IG9mIHVuaXF1ZSBkYXRhYmFzZSByZWNvcmRzICovCiBjb25zdCBfUHlVbmljb2RlX0RhdGFiYXNlUmVjb3JkIF9QeVVuaWNvZGVfRGF0YWJhc2VfUmVjb3Jkc1tdID0gewogICAgIHswLCAwLCAwLCAwLCAwLCAwfSwKQEAgLTEyMCw2ICsxMjAsNyBAQAogICAgIHs0LCAzMCwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAzMSwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAzMiwgMTQsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgNSwgMCwgNSwgMH0sCiAgICAgezE5LCAwLCA1LCAwLCA1LCAwfSwKICAgICB7MTksIDAsIDUsIDAsIDUsIDEwfSwKICAgICB7MTgsIDAsIDUsIDAsIDUsIDB9LApAQCAtMTM2LDcgKzEzNyw2IEBACiAgICAgezE5LCAwLCA1LCAwLCA1LCAxMzZ9LAogICAgIHs3LCAwLCA5LCAwLCA1LCAwfSwKICAgICB7MzAsIDAsIDUsIDAsIDUsIDB9LAotICAgIHsxNCwgMCwgNSwgMCwgNSwgMH0sCiAgICAgezQsIDM2LCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDAsIDE0LCAwLCA1LCAwfSwKICAgICB7NywgMCwgNCwgMCwgNSwgMH0sCkBAIC0xNzcsNiArMTc3LDcgQEAKICAgICB7MTksIDAsIDEsIDAsIDUsIDgwfSwKICAgICB7MTAsIDAsIDE4LCAwLCA1LCAwfSwKICAgICB7OCwgMCwgMSwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAxNSwgMCwgNSwgMH0sCiAgICAgezUsIDksIDEsIDAsIDUsIDB9LAogICAgIHs0LCAxLCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDIzNCwgMTQsIDAsIDUsIDB9LApAQCAtMTkwLDcgKzE5MSw2IEBACiAgICAgezI5LCAwLCAxOSwgMCwgNSwgMTcwfSwKICAgICB7MTAsIDAsIDE4LCAwLCA1LCAxNzB9LAogICAgIHsxMCwgMCwgMTgsIDAsIDUsIDEzNn0sCi0gICAgezE0LCAwLCAxNSwgMCwgNSwgMH0sCiAgICAgezE0LCAwLCAxLCAwLCA1LCAwfSwKICAgICB7MTQsIDAsIDQsIDAsIDUsIDB9LAogICAgIHsyMSwgMCwgMTksIDAsIDQsIDB9LApAQCAtMjEzLDYgKzIxMywxMCBAQAogICAgIHsyNiwgMCwgMTEsIDAsIDUsIDEzNn0sCiAgICAgezIwLCAwLCAxOSwgMCwgNSwgMH0sCiAgICAgezI3LCAwLCAxMywgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMCwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMSwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMiwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMywgMCwgNSwgMH0sCiAgICAgezksIDAsIDksIDAsIDUsIDEzNn0sCiAgICAgezI3LCAwLCAxMCwgMCwgNSwgMTM2fSwKICAgICB7MjcsIDAsIDE5LCAwLCA1LCAxMzZ9LApAQCAtNjM4LDYgKzY0MiwxMCBAQAogICAgICJTIiwKICAgICAiV1MiLAogICAgICJPTiIsCisgICAgIkxSSSIsCisgICAgIlJMSSIsCisgICAgIkZTSSIsCisgICAgIlBESSIsCiAgICAgTlVMTAogfTsKIGNvbnN0IGNoYXIgKl9QeVVuaWNvZGVfRWFzdEFzaWFuV2lkdGhOYW1lc1tdID0gewpAQCAtMTI3MywzNSArMTI4MSwzNSBAQAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIAogICAgIDAsIDEwNywgMTA3LCAxMDcsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDgsIDEwOCwgCiAgICAgMTA4LCAxMDgsIDEwOCwgMCwgNzgsIDc4LCAxMDksIDExMCwgMTEwLCAxMTEsIDExMiwgMTEzLCAyNiwgMjYsIDgxLCA4MSwgCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgMTE0LCAxMTUsIDExNiwgMTEzLCAwLCAwLCAxMTMsIDExMywgMTE3LCAxMTcsIAotICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExOSwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMjAsIAotICAgIDEyMSwgMTIyLCAxMTQsIDExNSwgMTE2LCAxMjMsIDEyNCwgMTI1LCAxMjUsIDEyNiwgODYsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgODYsIDgxLCA4MSwgODYsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTEwLCAKLSAgICAxMjgsIDEyOCwgMTEzLCAxMTcsIDExNywgMTI5LCAxMTcsIDExNywgMTE3LCAxMTcsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExOCwgMTE3LCAxMTgsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE4LCAxMTMsIDExNywgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAotICAgIDEwOCwgMjYsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDExOSwgMTE5LCA4MSwgODEsIDI2LCA4NiwgODEsIDgxLCA4NiwgCi0gICAgMTE3LCAxMTcsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTE3LCAxMTcsIAotICAgIDExNywgMTMyLCAxMzIsIDExNywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDAsIDEzMywgMTE3LCAxMzQsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCAKKyAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAxMTQsIDExNSwgMTE2LCAxMTMsIDExNywgMCwgMTEzLCAxMTMsIDExOCwgMTE4LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMjAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTIxLCAKKyAgICAxMjIsIDEyMywgMTE0LCAxMTUsIDExNiwgMTI0LCAxMjUsIDEyNiwgMTI2LCAxMjcsIDg2LCA4MSwgODEsIDgxLCA4MSwgODEsIAorICAgIDg2LCA4MSwgODEsIDg2LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDExMCwgCisgICAgMTI5LCAxMjksIDExMywgMTE4LCAxMTgsIDEzMCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTksIDExOCwgMTE5LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOSwgMTEzLCAxMTgsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAKKyAgICAxMDgsIDI2LCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCAxMjAsIDEyMCwgODEsIDgxLCAyNiwgODYsIDgxLCA4MSwgODYsIAorICAgIDExOCwgMTE4LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDExOCwgMTE4LCAKKyAgICAxMTgsIDEzMywgMTMzLCAxMTgsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCisgICAgMTEzLCAxMTMsIDExMywgMTEzLCAwLCAxMTcsIDExOCwgMTM0LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgCiAgICAgODYsIDg2LCA4NiwgODEsIDg2LCA4NiwgODEsIDg2LCA4MSwgODEsIDgxLCA4NiwgODEsIDg2LCA4MSwgODYsIDgxLCA4NiwgCi0gICAgODEsIDgxLCAwLCAwLCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDExNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM2LCAKKyAgICA4MSwgODEsIDAsIDAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIAogICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDgxLCAKQEAgLTEzMTQsMTEgKzEzMjIsMTEgQEAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCA4NiwgODYsIDg2LCAKICAgICAwLCAwLCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNywgMCwgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExOCwgMCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCAKLSAgICA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgODEsIDg2LCA4NiwgODYsIDEyMCwgMTIxLCAxMjIsIDgxLCA4MSwgODEsIAorICAgIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCA4MSwgODYsIDg2LCA4NiwgMTIxLCAxMjIsIDEyMywgODEsIDgxLCA4MSwgCiAgICAgODYsIDgxLCA4MSwgODYsIDg2LCA4MSwgODEsIDgxLCA4MSwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgCkBAIC0xNDQ0LDQxICsxNDUyLDQwIEBACiAgICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAogICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKLSAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIAotICAgIDgxLCA4MSwgODEsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA4MSwgODEsIAorICAgIDgxLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgCisgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA4NCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg0LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCkBAIC0xNDk4LDE1ICsxNTA1LDE2IEBACiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcyLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE2MywgMTY0LCAwLCAKLSAgICAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAxNzIsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTYzLCAxNjQsIDAsIDAsIDAsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDgzLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDgzLCA4MywgODMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIAogICAgIDE0MiwgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIApAQCAtMTUyMSw3ICsxNTI5LDcgQEAKICAgICA4MywgNTMsIDgzLCA4MywgODMsIDg1LCA0OCwgODEsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAogICAgIDE1MywgMTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCA4NCwgMTM4LCAxMzgsIAotICAgIDEzOCwgMTM4LCAxMzUsIDEzNSwgMTM1LCAxNzIsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxMzgsIDEzOCwgMTM1LCAxMzUsIDEzNSwgMTc0LCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNTMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCkBAIC0xNTUwLDcgKzE1NTgsNyBAQAogICAgIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgxLCA4NiwgMTM5LCAxMzksIDEzOSwgMCwgMCwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MSwgODYsIDEzOSwgMTM5LCAxMzUsIDAsIDAsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzNSwgMTM5LCAxMzUsIApAQCAtMTU2NiwxNyArMTU3NCwxNyBAQAogICAgIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDUsIDE0NiwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDE0NywgMTM1LCAxNDcsIDEzOSwgMTM5LCAxNDcsIDE0NywgMTM1LCAxNDcsIDE3NCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTQ3LCAxMzUsIDE0NywgMTM5LCAxMzksIDE0NywgMTQ3LCAxMzUsIDE0NywgMTc1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA4MywgODMsIAogICAgIDgzLCA4MywgODMsIDgzLCA4MywgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgxLCA4NiwgODEsIAogICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDEzNSwgCiAgICAgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDE3NCwgMTQyLCAxMzksIDEzOSwgNDgsIDQ4LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxNzUsIDE0MiwgMTM5LCAxMzksIDQ4LCA0OCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgCi0gICAgMTM5LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzNSwgMTM1LCAxMzUsIDE3NCwgMTc0LCAwLCAwLCAwLCAKKyAgICAxMzksIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTc1LCAxNzUsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCkBAIC0xNTg4LDggKzE1OTYsOCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIAotICAgIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODMsIDE3NSwgODYsIDg2LCA4NiwgODYsIDg2LCAKLSAgICA4MSwgODEsIDg2LCA4NiwgODYsIDg2LCA4MSwgMTM5LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDQ4LCAKKyAgICA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgzLCAxNzYsIDg2LCA4NiwgODYsIDg2LCA4NiwgCisgICAgODEsIDgxLCA4NiwgODYsIDg2LCA4NiwgODEsIDEzOSwgMTc2LCAxNzYsIDE3NiwgMTc2LCAxNzYsIDE3NiwgMTc2LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgODYsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgODEsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIApAQCAtMTYwMiw5ICsxNjEwLDkgQEAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNTEsIDUxLCA1MSwgNTEsIDUxLCAKICAgICA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCAKICAgICA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDgxLCA4MSwgODYsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDgxLCAxNzYsIDE3NywgODYsIDE3OCwgODEsIDgxLCA4MSwgODEsIAorICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDg2LCA4MSwgODEsIDE3NywgMTc4LCA4NiwgMTc5LCA4MSwgODEsIDgxLCA4MSwgCiAgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc5LCA4NiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwLCA4NiwgCiAgICAgODEsIDg2LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCkBAIC0xNjEzLDcgKzE2MjEsNyBAQAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAotICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDM1LCAxODAsIDQ3LCA0NywgNDQsIDQ3LCAKKyAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCAzNSwgMTgxLCA0NywgNDcsIDQ0LCA0NywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCkBAIC0xNjI1LDY1ICsxNjMzLDY1IEBACiAgICAgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDQzLCA0MywgCiAgICAgNDMsIDQzLCA0MywgMCwgMCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgCiAgICAgNDMsIDQzLCAwLCAzOCwgMCwgMzgsIDAsIDM4LCAwLCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAzOCwgCi0gICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIAotICAgIDQzLCAxODEsIDQzLCAxODEsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODMsIAotICAgIDE4MiwgNTgsIDE4MSwgNTgsIDU4LCA3NiwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTgzLCAzOCwgMTgzLCAxODIsIAotICAgIDc2LCA3NiwgNzYsIDQzLCA0MywgNDMsIDE4MSwgMCwgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODMsIDAsIDc2LCA3NiwgCi0gICAgNzYsIDQzLCA0MywgNDMsIDE4MSwgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MywgMzgsIDc2LCAxODQsIDE4NCwgCi0gICAgMCwgMCwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTgzLCAzOCwgMTgzLCAxODIsIDE4NCwgNTgsIDAsIDE4NSwgMTg1LCAKLSAgICAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODcsIDE4NywgMTg3LCAxODgsIDE4OSwgCisgICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIAorICAgIDQzLCAxODIsIDQzLCAxODIsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODQsIAorICAgIDE4MywgNTgsIDE4MiwgNTgsIDU4LCA3NiwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTg0LCAzOCwgMTg0LCAxODMsIAorICAgIDc2LCA3NiwgNzYsIDQzLCA0MywgNDMsIDE4MiwgMCwgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODQsIDAsIDc2LCA3NiwgCisgICAgNzYsIDQzLCA0MywgNDMsIDE4MiwgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4NCwgMzgsIDc2LCAxODUsIDE4NSwgCisgICAgMCwgMCwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTg0LCAzOCwgMTg0LCAxODMsIDE4NSwgNTgsIDAsIDE4NiwgMTg2LCAKKyAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxNzQsIDE3NCwgMTc0LCAxODgsIDE4OSwgCiAgICAgMTkwLCAxOTEsIDg0LCAxOTAsIDE5MCwgMTkwLCAyMiwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5MywgMTk0LCAxOTUsIAogICAgIDE5NiwgMjIsIDIyLCAyMiwgMTM4LCAxOTcsIDE5NywgMTk3LCAyMiwgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgCiAgICAgMjA0LCAyMSwgMjA1LCAxMTAsIDIwNSwgMjA2LCAyMDcsIDIyLCAxOTIsIDE5MiwgMTM4LCAyOCwgMzYsIDIyLCAxOTIsIAogICAgIDEzOCwgMTk3LCAyMDgsIDIwOCwgMTM4LCAxMzgsIDEzOCwgMjA5LCAxNjMsIDE2NCwgMTkyLCAxOTIsIDE5MiwgMTM4LCAKICAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDc4LCAxMzgsIDIwOCwgMTM4LCAxMzgsIDE5MiwgMTM4LCAxMzgsIAotICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxODYsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAyMTAsIDUxLCAwLCAwLCAzNCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIAotICAgIDIxMSwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxMCwgMzQsIDM0LCAzNCwgMzQsIDIxMCwgMjEwLCAyMTAsIDIxMCwgCi0gICAgMjEwLCAyMTEsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMCwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAotICAgIDUxLCA1MSwgNTEsIDAsIDAsIDAsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMjE2LCAyMTcsIDg1LCA4NSwgCi0gICAgMjMsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDE3NSwgMTc1LCA4MSwgODEsIAotICAgIDgxLCA4MSwgMTc1LCAxNzUsIDE3NSwgODEsIDgxLCA4MiwgODIsIDgyLCA4MiwgODEsIDgyLCA4MiwgODIsIDE3NSwgMTc1LCAKLSAgICA4MSwgODYsIDgxLCAxNzUsIDE3NSwgODYsIDg2LCA4NiwgODYsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyMTgsIDIxOCwgNDksIDIxOSwgMjYsIDIxOSwgMjE4LCA0OSwgMjYsIDIxOSwgMzUsIDQ5LCA0OSwgCi0gICAgNDksIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDYsIDI2LCA0OSwgMjE5LCAyNiwgNzgsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMjYsIAotICAgIDI2LCAyMTgsIDIxOSwgMjE5LCAyNiwgNDksIDI2LCAyMjAsIDI2LCA0OSwgMjYsIDE4MywgMjIwLCA0OSwgNDksIDIyMSwgCi0gICAgMzUsIDQ5LCA0OSwgNDQsIDQ5LCAzNSwgMTU2LCAxNTYsIDE1NiwgMTU2LCAzNSwgMjYsIDIxOCwgMzUsIDM1LCA0OSwgNDksIAotICAgIDIyMiwgNzgsIDc4LCA3OCwgNzgsIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMjYsIDc4LCAyNiwgMjYsIDQ3LCA4MCwgMjIzLCAKLSAgICAyMjMsIDIyMywgMzcsIDM3LCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAzNywgMzcsIDM3LCAzNywgMjIzLCAyMjQsIAotICAgIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjUsIDIyNSwgMjI1LCAKLSAgICAyMjUsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNSwgCi0gICAgMjI1LCAyMjUsIDIyNSwgMTczLCAxNzMsIDE3MywgNDQsIDQ3LCAxNzMsIDE3MywgMTczLCAxNzMsIDM3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjI2LCAyMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyNiwgMjYsIDI2LCAyNiwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDE4NywgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDAsIDIxMCwgMjExLCAyMTIsIAorICAgIDIxMywgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMjE0LCA1MSwgMCwgMCwgMzQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgCisgICAgMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMTQsIDM0LCAzNCwgMzQsIDM0LCAyMTQsIDIxNCwgMjE0LCAKKyAgICAyMTQsIDIxNCwgMjE1LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDAsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAorICAgIDUxLCA1MSwgNTEsIDUxLCAwLCAwLCAwLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDIyMCwgMjIxLCA4NSwgCisgICAgODUsIDIzLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgMTc2LCAxNzYsIAorICAgIDgxLCA4MSwgODEsIDgxLCAxNzYsIDE3NiwgMTc2LCA4MSwgODEsIDgyLCA4MiwgODIsIDgyLCA4MSwgODIsIDgyLCA4MiwgCisgICAgMTc2LCAxNzYsIDgxLCA4NiwgODEsIDE3NiwgMTc2LCA4NiwgODYsIDg2LCA4NiwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMiwgMjIyLCA0OSwgMjIzLCAyNiwgMjIzLCAyMjIsIDQ5LCAyNiwgMjIzLCAzNSwgCisgICAgNDksIDQ5LCA0OSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0NiwgMjYsIDQ5LCAyMjMsIDI2LCA3OCwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCAyNiwgMjYsIDIyMiwgMjIzLCAyMjMsIDI2LCA0OSwgMjYsIDIyNCwgMjYsIDQ5LCAyNiwgMTg0LCAyMjQsIDQ5LCA0OSwgCisgICAgMjI1LCAzNSwgNDksIDQ5LCA0NCwgNDksIDM1LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDM1LCAyNiwgMjIyLCAzNSwgMzUsIDQ5LCAKKyAgICA0OSwgMjI2LCA3OCwgNzgsIDc4LCA3OCwgNDksIDM1LCAzNSwgMzUsIDM1LCAyNiwgNzgsIDI2LCAyNiwgNDcsIDgwLCAyMjcsIAorICAgIDIyNywgMjI3LCAzNywgMzcsIDIyNywgMjI3LCAyMjcsIDIyNywgMjI3LCAyMjcsIDM3LCAzNywgMzcsIDM3LCAyMjcsIDIyOCwgCisgICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOSwgMjI5LCAyMjksIAorICAgIDIyOSwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjksIDIyOSwgMjI5LCAKKyAgICAyMjksIDIyOSwgMjI5LCAxNzMsIDE3MywgMTczLCA0NCwgNDcsIDE3MywgMTczLCAxNzMsIDE3MywgMzcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAyMzAsIDIzMCwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMwLCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjcsIDIyNiwgMjI2LCAyNiwgMjYsIDQwLCAyNiwgNDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMSwgMjMwLCAyMzAsIDI2LCAyNiwgNDAsIDI2LCA0MCwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDQwLCAyMjgsIDIyOSwgMjI5LCAyMzAsIDc4LCA3OCwgNDAsIDIyOSwgMjMwLCAKLSAgICAyMjgsIDIyOSwgMjMwLCAyMjgsIDc4LCA0MCwgNzgsIDIyOSwgMjMxLCAyMzIsIDc4LCAyMjksIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgMjI5LCAyMjgsIDIyOCwgMjI5LCA0MCwgMjI5LCAyMjksIDIyOCwgMjI4LCA0MCwgMjMwLCA0MCwgMjMwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgMjI5LCAyMzMsIDIyMiwgMjI5LCAyMjIsIDIyMiwgMjI4LCAyMjgsIDIyOCwgNDAsIDQwLCA0MCwgNDAsIDc4LCAyMjgsIAotICAgIDc4LCAyMjgsIDIyOSwgMjI5LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIyOCwgMjI4LCAyMzAsIDIyOCwgMjI4LCAyMzAsIDIyOSwgCi0gICAgMjMwLCAyMjgsIDIyOCwgMjI5LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOSwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMzQsIDQwLCAyMzAsIDc4LCAyMjksIDIyOSwgMjI5LCAyMjksIDIyOCwgCi0gICAgMjI4LCAyMjksIDIyOSwgNzgsIDIyNiwgMjM0LCAyMzQsIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIyOCwgMjI4LCAKLSAgICAyMzAsIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIyOSwgMjI5LCAyMzAsIDIzMCwgCi0gICAgMjI5LCAyMjksIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAKLSAgICA0MCwgNzgsIDc4LCAyMjgsIDQwLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNDAsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMzAsIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOSwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMzAsIAotICAgIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIzMCwgMjMwLCA3OCwgNzgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI4LCAyMjgsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzUsIDIzNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNDAsIDIzMiwgMjMzLCAyMzMsIDIzNCwgNzgsIDc4LCA0MCwgMjMzLCAyMzQsIAorICAgIDIzMiwgMjMzLCAyMzQsIDIzMiwgNzgsIDQwLCA3OCwgMjMzLCAyMzUsIDIzNiwgNzgsIDIzMywgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICAyMzMsIDIzMiwgMjMyLCAyMzMsIDQwLCAyMzMsIDIzMywgMjMyLCAyMzIsIDQwLCAyMzQsIDQwLCAyMzQsIDQwLCA0MCwgNDAsIAorICAgIDQwLCAyMzMsIDIzNywgMjI2LCAyMzMsIDIyNiwgMjI2LCAyMzIsIDIzMiwgMjMyLCA0MCwgNDAsIDQwLCA0MCwgNzgsIDIzMiwgCisgICAgNzgsIDIzMiwgMjMzLCAyMzMsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjMyLCAyMzIsIDIzNCwgMjMyLCAyMzIsIDIzNCwgMjMzLCAKKyAgICAyMzQsIDIzMiwgMjMyLCAyMzMsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMzLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzOCwgNDAsIDIzNCwgNzgsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMyLCAKKyAgICAyMzIsIDIzMywgMjMzLCA3OCwgMjMwLCAyMzgsIDIzOCwgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjMyLCAyMzIsIAorICAgIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjMzLCAyMzMsIDIzNCwgMjM0LCAKKyAgICAyMzMsIDIzMywgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIAorICAgIDQwLCA3OCwgNzgsIDIzMiwgNDAsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA0MCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMzLCA3OCwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzNCwgCisgICAgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjM0LCAyMzQsIDc4LCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE2MywgMTY0LCAxNjMsIDE2NCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzIsIDIzMiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzOSwgMjQwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIApAQCAtMTcwMywxNCArMTcxMSwxNCBAQAogICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAogICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMjMsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKLSAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCi0gICAgMjM4LCAyMzgsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKKyAgICAzNCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjI3LCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgCisgICAgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAorICAgIDI0MiwgMjQyLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCkBAIC0xNzQ1LDE0ICsxNzUzLDE0IEBACiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAKLSAgICAxNjMsIDE2NCwgMTYzLCAxNjQsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMTYzLCAxNjQsIDE2MywgMTY0LCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAogICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKICAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyOCwgNzgsIDc4LCAKLSAgICAyMjgsIDIyOCwgMTYzLCAxNjQsIDc4LCAyMjgsIDIyOCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgOSwgMTAsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMiwgNzgsIDc4LCAKKyAgICAyMzIsIDIzMiwgMTYzLCAxNjQsIDc4LCAyMzIsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgOSwgMTAsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIApAQCAtMTc2OSwzMCArMTc3NywzMCBAQAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDE2MywgMTY0LCA5LCAxMCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIAotICAgIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgMTYzLCAxNjQsIDE2MywgMTY0LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCAyMjgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyMiwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgNzgsIDIyOCwgNzgsIDc4LCAyMjgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgCisgICAgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjI2LCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCA3OCwgMjMyLCA3OCwgNzgsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAKICAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIAotICAgIDIyMiwgMjEyLCAyMTIsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDIzOSwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDc4LCAyMjgsIDc4LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIAorICAgIDIyNiwgMjE2LCAyMTYsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDI0MywgNzgsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDc4LCAyMzIsIDc4LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKQEAgLTE4MzgsMTA1ICsxODQ2LDEwNSBAQAogICAgIDEzOCwgNTIsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgODQsIDg0LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDEsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMCwgMCwgMCwgMCwgMjQyLCAyNDMsIDI0MywgMjQzLCAKLSAgICAyNDAsIDI0NCwgMTcwLCAyNDUsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgCi0gICAgMjQwLCAyNDAsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTAsIAotICAgIDI0MCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjUxLCAyNTIsIDI1MywgMjU0LCAKLSAgICAyNTUsIDI1NSwgMjQ4LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQxLCAyNDAsIDI1NiwgMjU2LCAyNTYsIDI0NCwgCi0gICAgMTcwLCAyNDMsIDI0MCwgMjYsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIAotICAgIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAxNzAsIDI1NywgMTcwLCAKLSAgICAyNTcsIDE3MCwgMjU3LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgCi0gICAgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NSwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAyNDYsIDI0NywgMjQ3LCAyNDcsIAorICAgIDI0NCwgMjQ4LCAxNzAsIDI0OSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAKKyAgICAyNDQsIDI0NCwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NCwgCisgICAgMjQ0LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNTUsIDI1NiwgMjU3LCAyNTgsIAorICAgIDI1OSwgMjU5LCAyNTIsIDI0OCwgMjQ4LCAyNDgsIDI0OCwgMjQ4LCAyNDUsIDI0NCwgMjYwLCAyNjAsIDI2MCwgMjQ4LCAKKyAgICAxNzAsIDI0NywgMjQ0LCAyNiwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgCisgICAgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMjYxLCAxNzAsIAorICAgIDI2MSwgMTcwLCAyNjEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAKKyAgICAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDI1NywgMTcwLCAxNzAsIDAsIDAsIDI1OCwgMjU4LCAyNTksIDI1OSwgMjQ0LCAyNjAsIDI2MSwgCi0gICAgMjQ4LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjU3LCAxNzAsIAotICAgIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAKLSAgICAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIAotICAgIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAyNjEsIDE3MCwgMTcwLCAwLCAwLCAyNjIsIDI2MiwgMjYzLCAyNjMsIDI0OCwgMjY0LCAyNjUsIAorICAgIDI1MiwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMTcwLCAKKyAgICAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgCisgICAgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAKKyAgICAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDI1NywgMTcwLCAxNzAsIDI1NywgMjU3LCAyNTcsIDI1NywgMjQzLCAyNDQsIDI0NCwgMjYwLCAyNjEsIDAsIDAsIDAsIDAsIAorICAgIDI2MSwgMTcwLCAxNzAsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjQ3LCAyNDgsIDI0OCwgMjY0LCAyNjUsIDAsIDAsIDAsIDAsIAogICAgIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDAsIDI2MiwgMjYyLCAyNjMsIDI2MywgCi0gICAgMjYzLCAyNjMsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMTcwLCAxNzAsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMCwgMjY2LCAyNjYsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNDEsIDI0MSwgMCwgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgCi0gICAgMjYzLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjQxLCAyNjYsIDI2NiwgCi0gICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI2MiwgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAotICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNDEsIDI0MSwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDAsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI0NSwgMjcwLCAyNzAsIAorICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNjYsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKKyAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKQEAgLTE5NjIsNyArMTk3MCw3IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjQ0LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI0OCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIApAQCAtMTk3MSwxMSArMTk3OSwxMSBAQAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAwLCAwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDE3MCwgMTcwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgNTMsIDUzLCA1MywgNTMsIAogICAgIDUzLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDUzLCAxMzgsIDEzOCwgCkBAIC0xOTk5LDcgKzIwMDcsNyBAQAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ0LCA0NywgNDQsIAotICAgIDQ3LCA0NCwgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUyLCAyNjcsIDI2NywgNDQsIDQ3LCA0NCwgCisgICAgNDcsIDQ0LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNTIsIDI3MSwgMjcxLCA0NCwgNDcsIDQ0LCAKICAgICA0NywgMCwgNDQsIDQ3LCA0NCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NywgNDQsIAogICAgIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0yMDA4LDcgKzIwMTYsNyBAQAogICAgIDQ4LCA0OCwgNDgsIDEzNSwgNDgsIDQ4LCA0OCwgMTQyLCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM5LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgODAsIDgwLCA4NSwgMjIxLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCA4MCwgODAsIDg1LCAyMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDAsIDAsIDAsIDAsIApAQCAtMjAyNCwxMyArMjAzMiwxMyBAQAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDg2LCAKICAgICA4NiwgODYsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCAxNzAsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgCiAgICAgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgCi0gICAgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzOSwgMTc0LCA4MywgODMsIAorICAgIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzksIDE3NSwgODMsIDgzLCAKICAgICA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDAsIDUzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAogICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0yMDYwLDQ5NyArMjA2OCw0OTYgQEAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgODMsIDEzOSwgCiAgICAgMTQyLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMTcwLCAxNzAsIDI3MCwgMTcwLCAyNzAsIDE3MCwgMTcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDE3MCwgMjcwLCAxNzAsIDI3MCwgMTcwLCAxNzAsIDI3MCwgMjcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMCwgMCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAyNzEsIDI3MiwgMjcxLCAyNzMsIDI3MywgMjczLCAyNzMsIAotICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyMTEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAKLSAgICAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMCwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDAsIDI3MSwgMCwgMjcxLCAyNzEsIAotICAgIDAsIDI3MSwgMjcxLCAwLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzMsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAyNzQsIAorICAgIDAsIDAsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3NCwgMjc0LCAKICAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCi0gICAgMjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDE5NSwgMjc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDE3MCwgMTcwLCAyNzQsIDE3MCwgMjc0LCAxNzAsIDE3MCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAxNzAsIDI3NCwgMTcwLCAyNzQsIDE3MCwgMTcwLCAyNzQsIDI3NCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDAsIDAsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMjc2LCAyNiwgMCwgMCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc4LCAyNzksIAotICAgIDI3NywgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI3NywgMjgwLCAyODAsIDI4MSwgMjgxLCAyNzgsIDI3OSwgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgCi0gICAgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjc4LCAyNzksIDI0MywgMjQzLCAyNzgsIDI3OSwgMjc3LCAyNzcsIAotICAgIDI3NywgMjc3LCAyODEsIDI4MSwgMjgxLCAyODIsIDI3NywgMjgyLCAwLCAyNzcsIDI4MiwgMjc3LCAyNzcsIDI4MCwgMjgzLCAKLSAgICAyODQsIDI4MywgMjg0LCAyODMsIDI4NCwgMjg1LCAyNzcsIDI3NywgMjg2LCAyODcsIDI4OCwgMjg4LCAyODksIDAsIDI3NywgCi0gICAgMjkwLCAyODUsIDI3NywgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTE3LCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDE4NywgMCwgMjkxLCAyOTEsIDI5MiwgMjkzLCAyOTIsIDI5MSwgCi0gICAgMjkxLCAyOTQsIDI5NSwgMjkxLCAyOTYsIDI5NywgMjk4LCAyOTcsIDI5NywgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTksIAotICAgIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTcsIDI5MSwgMzAwLCAzMDEsIDMwMCwgMjkxLCAyOTEsIDMwMiwgMzAyLCAKLSAgICAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgCi0gICAgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAyOTQsIDI5MSwgMjk1LCAzMDMsIAotICAgIDMwNCwgMzAzLCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAKLSAgICAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgCi0gICAgMjk0LCAzMDEsIDI5NSwgMzAxLCAyOTQsIDI5NSwgMzA2LCAzMDcsIDMwOCwgMzA2LCAzMDYsIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzEwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMTAsIDMxMCwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAwLCAwLCAwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAKLSAgICAwLCAwLCAwLCAyOTMsIDI5MywgMzAxLCAzMDMsIDMxMSwgMjkzLCAyOTMsIDAsIDMxMiwgMzEzLCAzMTMsIDMxMywgMzEzLCAKLSAgICAzMTIsIDMxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE0LCAzMTQsIDMxNCwgMjYsIDMwLCAwLCAwLCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgODMsIDEzOCwgODMsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIAotICAgIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAKLSAgICAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTUzLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAyNzUsIDI3NiwgMjc1LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgCisgICAgMjc3LCAyNzcsIDI3NywgMjc3LCAyMTUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIAorICAgIDI3NSwgMjc1LCAyNzUsIDI3NSwgMCwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDAsIDI3NSwgMCwgMjc1LCAyNzUsIDAsIAorICAgIDI3NSwgMjc1LCAwLCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzcsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAyNzgsIDI3OCwgCisgICAgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTk1LCAyNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMjgwLCAyNiwgMCwgMCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCisgICAgNzEsIDcxLCA3MSwgNzEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgyLCAyODMsIDI4MSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MSwgCisgICAgMjg0LCAyODQsIDI4NSwgMjg1LCAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIAorICAgIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIDI0NywgMjQ3LCAyODIsIDI4MywgMjgxLCAyODEsIDI4MSwgMjgxLCAKKyAgICAyODUsIDI4NSwgMjg1LCAyODYsIDI4MSwgMjg2LCAwLCAyODEsIDI4NiwgMjgxLCAyODEsIDI4NCwgMjg3LCAyODgsIDI4NywgCisgICAgMjg4LCAyODcsIDI4OCwgMjg5LCAyODEsIDI4MSwgMjkwLCAyOTEsIDI5MiwgMjkyLCAyOTMsIDAsIDI4MSwgMjk0LCAyODksIAorICAgIDI4MSwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTE4LCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDE3NCwgMCwgMjk1LCAyOTUsIDI5NiwgMjk3LCAyOTYsIDI5NSwgMjk1LCAyOTgsIAorICAgIDI5OSwgMjk1LCAzMDAsIDMwMSwgMzAyLCAzMDEsIDMwMSwgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAKKyAgICAzMDMsIDMwMywgMzAzLCAzMDEsIDI5NSwgMzA0LCAzMDUsIDMwNCwgMjk1LCAyOTUsIDMwNiwgMzA2LCAzMDYsIDMwNiwgCisgICAgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIAorICAgIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAyOTgsIDI5NSwgMjk5LCAzMDcsIDMwOCwgMzA3LCAKKyAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCisgICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMjk4LCAzMDUsIAorICAgIDI5OSwgMzA1LCAyOTgsIDI5OSwgMzEwLCAzMTEsIDMxMiwgMzEwLCAzMTAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzE0LCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTQsIDMxNCwgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAKKyAgICAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAwLCAyOTcsIAorICAgIDI5NywgMzA1LCAzMDcsIDMxNSwgMjk3LCAyOTcsIDAsIDMxNiwgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTYsIDMxNiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE4LCAzMTgsIDMxOCwgMjYsIDMwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgMCwgMCwgMCwgMCwgODMsIDEzOCwgODMsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKKyAgICAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCisgICAgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTUzLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDg2LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDg2LCAwLCAwLCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTczLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgODMsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIAotICAgIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDAsIDAsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAxMDcsIDAsIDAsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAxMDQsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIAotICAgIDMxNiwgMzE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDAsIDAsIDAsIDEzOCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEzNSwgMTM1LCAxMzUsIDAsIDEzNSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMzUsIDg2LCAxMzUsIDgxLCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDgxLCAxNzUsIAotICAgIDg2LCAwLCAwLCAwLCAwLCAxNDIsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMzE2LCAzMTYsIDEwNCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIAotICAgIDMxNiwgMzE2LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAKLSAgICAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgCi0gICAgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMCwgMTM5LCAxMzUsIAotICAgIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTQyLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAotICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKLSAgICAxNTMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCAKLSAgICAxNDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgMTQyLCAxNDEsIDgzLCA4MywgCi0gICAgMTg4LCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzOSwgMTM1LCAxNTAsIDE1MCwgMTM1LCAxMzUsIDEzNSwgMTQyLCAxNDIsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAKLSAgICAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTc0LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxNzQsIDE0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIAotICAgIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ4LCA0OCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDgzLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAxMDcsIDAsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMTA3LCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMCwgMTA0LCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgCisgICAgMzIwLCAwLCAwLCAwLCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTA3LCAxMzUsIDEzNSwgMTM1LCAwLCAxMzUsIDEzNSwgMCwgMCwgMCwgMCwgMCwgMTM1LCA4NiwgMTM1LCA4MSwgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCA4MSwgMTc2LCA4NiwgMCwgMCwgMCwgMCwgMTQyLCAKKyAgICAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0LCAxMDQsIAorICAgIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDMyMCwgMzIwLCAKKyAgICAxMDQsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIAorICAgIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAKKyAgICAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDAsIDEzOSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE0MiwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgCisgICAgODMsIDAsIDAsIDAsIDAsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKKyAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDE0MiwgMTQxLCA4MywgODMsIDE4OCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDgxLCA4MSwgODEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDE0OSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzNSwgMTUwLCAxNTAsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDE0MiwgMTQyLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDgzLCAKKyAgICA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NSwgNDgsIDQ4LCA0OCwgNDgsIDgzLCA4MywgODMsIDgzLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIAorICAgIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTc1LCAxNDUsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKICAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCiAgICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAotICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKLSAgICAxMzksIDEzOSwgMTM5LCAxMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDAsIDAsIAorICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM1LCA1MywgNTMsIDUzLCAKKyAgICA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAKLSAgICAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTksIDMxOSwgCi0gICAgMTc1LCAxNzUsIDE3NSwgODAsIDgwLCA4MCwgMzIwLCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODAsIDgwLCA4MSwgODEsIAotICAgIDgxLCA4MSwgODEsIDg2LCA4NiwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODEsIAotICAgIDgxLCA4MSwgODEsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMTgsIDMxOCwgCi0gICAgMzE4LCAzMTgsIDMxOCwgMzE4LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIzLCAzMjMsIDE3NiwgMTc2LCAxNzYsIDgwLCA4MCwgODAsIAorICAgIDMyNCwgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCA4NiwgCisgICAgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDgwLCA4MCwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODYsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgxLCA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgODEsIAotICAgIDgxLCA4MSwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA4MSwgODEsIDgxLCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAwLCA0OSwgNDksIDAsIDAsIDQ5LCAwLCAwLCA0OSwgNDksIDAsIDAsIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAwLCAzNSwgMCwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgMCwgCisgICAgNDksIDQ5LCAwLCAwLCA0OSwgMCwgMCwgNDksIDQ5LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgCisgICAgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgCi0gICAgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgMCwgNDksIAotICAgIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAzMjEsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjIsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgNDksIDM1LCAwLCAwLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIAotICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAKLSAgICAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMCwgMTMwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTMwLCAwLCAwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAwLCAKLSAgICAxMzAsIDEzMCwgMCwgMTMwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAxMzAsIAotICAgIDAsIDEzMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDAsIDAsIDAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDM1LCAwLCAwLCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIAorICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAKKyAgICAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAwLCAKKyAgICAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAwLCAwLCAwLCAwLCAxMzEsIDAsIDEzMSwgCisgICAgMCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAwLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAKKyAgICAwLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgsIDc4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMzIzLCAwLCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDIxOCwgMjE4LCAwLCAwLCAwLCAwLCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMjM3LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgMjY0LCAyNjQsIDI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNjQsIDI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgsIDc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMCwgMCwgMCwgMCwgMCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMzI3LCAwLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDIyMiwgMjIyLCAwLCAwLCAwLCAwLCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMjQxLCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMjY4LCAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAwLCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIApAQCAtMjU2MCw3NyArMjU2Nyw3NiBAQAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDAsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIAotICAgIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKQEAgLTI2NDMsMTcgKzI2NDksMTcgQEAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMCwgCi0gICAgMCwgCisgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMCwgMCwgCiB9OwogCiAvKiBkZWNvbXBvc2l0aW9uIGRhdGEgKi8KQEAgLTUxNzgsNyArNTE4NCw2IEBACiAJeyAyNTUsIDcsIDgsIDI1NSwgMCB9LAogCXsgMjU1LCA3LCA5LCAyNTUsIDAgfSwKIAl7IDEsIDUsIDI1NSwgMjU1LCAwIH0sCi0JeyAxNSwgMTQsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDEwLCAyNTUsIDI1NSwgMCB9LAogCXsgMTgsIDI1NSwgMjU1LCAyNTUsIDAgfSwKIAl7IDE5LCAyNTUsIDI1NSwgMjU1LCAwIH0sCkBAIC01MTkxLDYgKzUxOTYsNyBAQAogCXsgMjU1LCAyNTUsIDksIDI1NSwgMCB9LAogCXsgMTksIDMwLCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCA4LCAyNTUsIDI1NSwgMCB9LAorCXsgMjU1LCAyNywgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMjIsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDIzLCAyNTUsIDI1NSwgMCB9LAogCXsgOSwgMjU1LCAyNTUsIDI1NSwgMCB9LApAQCAtNTIwNSw4ICs1MjExLDggQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNoYW5nZXNfM18yXzBfaW5kZXhbXSA9IHsKICAgICAwLCAxLCAyLCAyLCAzLCA0LCA1LCA2LCAyLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAKICAgICAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyLCAyLCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIAotICAgIDM2LCAyLCAyLCAyLCAzNywgMzgsIDIsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIAotICAgIDUxLCAyLCA1MiwgMiwgMiwgNTMsIDU0LCA1NSwgNTYsIDU3LCAyLCAyLCA1OCwgNTksIDYwLCAyLCAyLCA2MSwgNjIsIDYzLCAKKyAgICAzNiwgMiwgMiwgMiwgMzcsIDM4LCAyLCAzOSwgMiwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIAorICAgIDUwLCAyLCA1MSwgMiwgMiwgNTIsIDUzLCA1NCwgNTUsIDU2LCAyLCA1NywgNTgsIDU5LCA2MCwgMiwgMiwgNjEsIDYyLCA2MywgCiAgICAgNjQsIDY1LCA2NSwgMiwgMiwgMiwgMiwgNjYsIDIsIDY3LCA2OCwgNjksIDcwLCA3MSwgMiwgMiwgMiwgNzIsIDczLCA3NCwgCiAgICAgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDIsIDIsIDIsIDIsIDIsIDIsIDgyLCAyLCAyLCAyLCAyLCAyLCA4MywgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01MjE3LDggKzUyMjMsOCBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTQsIDk1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5NiwgNTAsIDUwLCAKLSAgICA5NywgOTgsIDUwLCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk0LCA5NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTYsIDQ5LCA0OSwgCisgICAgOTcsIDk4LCA0OSwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTUyMjksMTMgKzUyMzUsMTMgQEAKICAgICAxMTksIDEyMCwgMTIxLCAxMjIsIDIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAyLCAyLCAyLCAyLCAyLCAyLCAxMjgsIDIsIAogICAgIDEyOSwgMTMwLCAxMzEsIDIsIDEzMiwgMiwgMTMzLCAyLCAyLCAyLCAxMzQsIDIsIDIsIDIsIDEzNSwgMTM2LCAxMzcsIDEzOCwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTM5LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNDAsIDIsIDE0MSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAotICAgIDUwLCAxNDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE0MCwgMiwgMTQxLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDE0MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgNTAsIDE0MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgNDksIDE0MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMTQ0LCAxNDUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTI2Miw5ICs1MjY4LDkgQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OCwgNTAsIDE3OSwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxNzgsIDQ5LCAxNzksIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTUwNSw3ICs1NTExLDcgQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgMTgwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgMTgwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTU2MjcsNyArNTYzMyw3IEBACiAgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCiAgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC01Nzg3LDcwOSArNTc5MywyNjcgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDQsIDAsIDAsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDEsIDEsIDAsIDAsIDAsIAorICAgIDQsIDM1LCA4LCA2LCA3LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCAxLCAxLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDksIAogICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NSwgNDYsIDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDQsIDAsIDAsIDM3LCAzOCwgMzksIDQwLCAKLSAgICA0MSwgNDIsIDEsIDEsIDAsIDAsIDAsIDQsIDM2LCA4LCA2LCA3LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCAxLCAxLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NSwgCi0gICAgNDYsIDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAKICAgICAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDE5LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMSwgMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTQsIDE0LCAxNCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAKLSAgICAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIDksIDAsIAotICAgIDksIDAsIDksIDAsIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTY0OTcsMTUgKzYwNjEsMjAgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC02NTE1LDMzICs2MDg0LDQ3MCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIAorICAgIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDE5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMSwgMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQsIDE0LCAxNCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAKKyAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKKyAgICAwLCAwLCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIAorICAgIDksIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIAorICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhbmdlX3JlY29yZCogZ2V0X2NoYW5nZV8zXzJfMChQeV9VQ1M0IG4pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmggYi9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKaW5kZXggMzgzODg4Mi4uN2NjYjEyNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCisrKyBiL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaApAQCAtNiw3ICs2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxleGljb25bXSA9IHsKICAgICA3NiwgNjksIDg0LCA4NCwgNjksIDIxMCwgODcsIDczLCA4NCwgMjAwLCA4MywgODksIDc2LCA3NiwgNjUsIDY2LCA3NiwgCiAgICAgMTk3LCA4MywgNzcsIDY1LCA3NiwgMjA0LCA4MywgNzMsIDcxLCAyMDYsIDY3LCA2NSwgODAsIDczLCA4NCwgNjUsIDIwNCwgCi0gICAgNzYsIDY1LCA4NCwgNzMsIDIwNiwgODksIDIwMSwgNjcsIDc0LCAyMDMsIDY1LCA4MiwgNjUsIDY2LCA3MywgMTk1LCA3NywgCisgICAgNzYsIDY1LCA4NCwgNzMsIDIwNiwgODksIDIwMSwgNjUsIDgyLCA2NSwgNjYsIDczLCAxOTUsIDY3LCA3NCwgMjAzLCA3NywgCiAgICAgNjUsIDg0LCA3MiwgNjksIDc3LCA2NSwgODQsIDczLCA2NywgNjUsIDIwNCwgNjksIDcxLCA4OSwgODAsIDg0LCA3MywgNjUsIAogICAgIDIwNiwgNzIsIDczLCA2OSwgODIsIDc5LCA3MSwgNzYsIDg5LCA4MCwgMjAwLCA2NywgNzksIDc3LCA4MCwgNjUsIDg0LCA3MywgCiAgICAgNjYsIDczLCA3NiwgNzMsIDg0LCAyMTcsIDY3LCA4NSwgNzgsIDY5LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA4MywgODksIDc3LCAKQEAgLTI3LDI0ICsyNywyNCBAQAogICAgIDc1LCA2NSwgNzgsIDE5MywgMTk0LCA3NywgNzksIDY4LCA3MywgNzAsIDczLCA2OSwgMjEwLCA2OCwgNzksIDIxMiwgNzUsIAogICAgIDY1LCA3OCwgNzEsIDg4LCAyMDEsIDY1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4NCwgNzMsIDY2LCA2OSwgCiAgICAgODQsIDY1LCAyMDYsIDc5LCAxOTgsIDczLCA3OCwgNzMsIDg0LCA3MywgNjUsIDIwNCwgNzcsIDY5LCA2OSwgMjA1LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3NywgODksIDY1LCA3OCwgNzcsIDY1LCAyMTAsIDc1LCA3MiwgNzcsIDY5LCAKLSAgICAyMTAsIDg1LCAxMjgsIDg3LCA3MiwgNzMsIDg0LCAxOTcsIDY3LCA2NSwgODIsIDgyLCA3MywgNjksIDIxMCwgNzMsIDEyOCwgCi0gICAgNjUsIDgyLCA4MiwgNzksIDg3LCAxMjgsIDc5LCAxMjgsIDY1LCA2NiwgNzksIDg2LCAxOTcsIDc3LCA2NSwgODIsIDc1LCAKLSAgICAxMjgsIDg5LCA2OSwgMjAwLCA2NSwgODIsIDgyLCA3OSwgMjE1LCA2NywgNzksIDgwLCA4NCwgNzMsIDE5NSwgODAsIDcyLCAKLSAgICA2NSwgODMsIDY5LCA0NSwgMTk3LCA3NywgNzksIDc4LCA3MSwgNzksIDc2LCA3MywgNjUsIDIwNiwgNjgsIDY5LCA4NiwgNjUsIAotICAgIDc4LCA2NSwgNzEsIDY1LCA4MiwgMjAxLCA2NiwgNzYsIDY1LCA2NywgMjAzLCA4NCwgNzMsIDc2LCAxOTcsIDgzLCA4OSwgCi0gICAgNzcsIDY2LCA3OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDkwLCA2OSwgMTk2LCAKLSAgICA4NCwgNzIsIDY1LCAyMDUsIDc0LCA3OSwgNzgsIDcxLCA4MywgNjksIDc5LCA3OCwgMTk5LCA4MywgODQsIDgyLCA3OSwgNzUsIAotICAgIDY5LCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDE5NiwgNjYsIDc5LCAyMTYsIDcyLCA2OSwgNjYsIDgyLCA2OSwgCi0gICAgMjE1LCA3NywgNzMsIDY1LCAyMDcsIDgwLCA3NiwgODUsIDIxMSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCAKLSAgICA2OCwgMjExLCA3MSwgNjksIDc5LCA4MiwgNzEsIDczLCA2NSwgMjA2LCA2OCwgODIsIDY1LCA4NywgNzMsIDc4LCA3MSwgCi0gICAgMjExLCA2NywgNzIsIDc5LCA4MywgNjksIDc5LCA3OCwgMTk5LCA3MiwgNjUsIDc2LCA3MCwgODcsIDczLCA2OCwgODQsIAorICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDIwNCwgNzcsIDg5LCA2NSwgNzgsIDc3LCA2NSwgMjEwLCA4NSwgMTI4LCA3NSwgCisgICAgNzIsIDc3LCA2OSwgMjEwLCA4NywgNzIsIDczLCA4NCwgMTk3LCA2NSwgNjYsIDc5LCA4NiwgMTk3LCA2NywgNjUsIDgyLCAKKyAgICA4MiwgNzMsIDY5LCAyMTAsIDczLCAxMjgsIDY1LCA4MiwgODIsIDc5LCA4NywgMTI4LCA4OSwgNjksIDIwMCwgNzksIDEyOCwgCisgICAgNzcsIDY1LCA4MiwgNzUsIDEyOCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNjcsIDc5LCA4MCwgODQsIDczLCAxOTUsIDgwLCAKKyAgICA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NywgNzcsIDc5LCA3OCwgNzEsIDc5LCA3NiwgNzMsIDY1LCAyMDYsIDY4LCA2OSwgODYsIAorICAgIDY1LCA3OCwgNjUsIDcxLCA2NSwgODIsIDIwMSwgNjYsIDc2LCA2NSwgNjcsIDIwMywgODQsIDczLCA3NiwgMTk3LCA4MywgCisgICAgODksIDc3LCA2NiwgNzksIDc2LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCA5MCwgNjksIAorICAgIDE5NiwgODQsIDcyLCA2NSwgMjA1LCA3NCwgNzksIDc4LCA3MSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgODMsIDg0LCA4MiwgCisgICAgNzksIDc1LCA2OSwgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAxOTYsIDY2LCA3OSwgMjE2LCA3MiwgNjksIDY2LCAKKyAgICA4MiwgNjksIDIxNSwgNzcsIDczLCA2NSwgMjA3LCA4MCwgNzYsIDg1LCAyMTEsIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIAorICAgIDY1LCA4MiwgNjgsIDIxMSwgNzEsIDY5LCA3OSwgODIsIDcxLCA3MywgNjUsIDIwNiwgNjgsIDgyLCA2NSwgODcsIDczLCA3OCwgCisgICAgNzEsIDIxMSwgNjcsIDcyLCA3OSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNzIsIDY1LCA3NiwgNzAsIDg3LCA3MywgNjgsIDg0LCAKICAgICAyMDAsIDY2LCA2NSwgNzYsIDczLCA3OCwgNjksIDgzLCAxOTcsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDIxMywgODQsIDg3LCAKICAgICA3OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTYsIAotICAgIDY1LCA3NiwgNjcsIDcyLCA2OSwgNzcsIDczLCA2NywgNjUsIDIwNCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNzMsIDE5NSwgNzksIDc4LCA2OSwgMTI4LCA4NCwgNzksIDEyOCwgNjUsIDc2LCA2OSwgMTk4LCA4NCwgODcsIDIwNywgCi0gICAgNzIsIDY5LCA2NSwgODYsIDIxNywgNjcsIDc5LCA3OCwgODMsIDc5LCA3OCwgNjUsIDc4LCAyMTIsIDc5LCA4NiwgNjksIAotICAgIDIxMCwgNjYsIDgyLCA2NSwgNzIsIDc3LCAyMDEsIDgzLCA2NywgODIsIDczLCA4MCwgMjEyLCA4NSwgMjA4LCA3NiwgNzksIAorICAgIDY1LCA3NiwgNjcsIDcyLCA2OSwgNzcsIDczLCA2NywgNjUsIDIwNCwgNjUsIDc2LCA2OSwgMTk4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3OSwgMTI4LCA4NCwgODcsIDIwNywgCisgICAgNzIsIDY5LCA2NSwgODYsIDIxNywgNzksIDg2LCA2OSwgMjEwLCA2NywgNzksIDc4LCA4MywgNzksIDc4LCA2NSwgNzgsIAorICAgIDIxMiwgNjYsIDgyLCA2NSwgNzIsIDc3LCAyMDEsIDgzLCA2NywgODIsIDczLCA4MCwgMjEyLCA4NSwgMjA4LCA3NiwgNzksIAogICAgIDIxNSwgNzIsIDY1LCAyMDAsIDc5LCA3OCwgMTk3LCA2OCwgNzksIDg3LCAyMDYsIDcyLCA3MywgNzEsIDIwMCwgNzAsIDg1LCAKICAgICA3NiwgNzYsIDg3LCA3MywgNjgsIDg0LCAyMDAsIDY2LCA4MiwgNjUsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDY5LCA4MSwgODUsIAogICAgIDY1LCAyMDQsIDg0LCA2NSwgMTk5LCA2NiwgNjUsIDgyLCAxMjgsIDY4LCA3OSwgNzcsIDczLCA3OCwgMjA3LCA3OCwgODUsIApAQCAtNjUsNDkgKzY1LDQ5IEBACiAgICAgNzYsIDg1LCAxOTcsIDgzLCA3MiwgNjUsIDgyLCA2NSwgNjgsIDE5MywgODMsIDczLCA3OCwgNzIsIDY1LCA3NiwgMTkzLCAKICAgICA3NSwgNjUsIDEyOCwgODIsIDg1LCA3OCwgNzMsIDE5NSwgODMsIDY1LCA4NSwgODIsIDY1LCA4MywgNzIsIDg0LCA4MiwgCiAgICAgMTkzLCA4NCwgNjksIDg0LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDIwNSwgNjgsIDY5LCA4MywgNjksIDgyLCA2OSwgMjEyLCAKLSAgICA4NCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgNzEsIDg1LCA4MiwgNzcsIDg1LCA3NSwgNzIsIDIwMSwgNzcsIDY1LCAxMjgsIAotICAgIDc3LCA2NSwgODksIDY5LCAyMDMsIDc3LCA2OSwgNjksIDg0LCA2OSwgMjAxLCA3OCwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA4MywgODksIDgyLCA3MywgNjUsIDE5NSwgNzAsIDczLCA4NiwgNjksIDEyOCwgODAsIDY1LCAxMjgsIDg5LCA2NSwgCi0gICAgMTI4LCA3NiwgNzMsIDcxLCA3MiwgMjEyLCA4MywgNzMsIDg4LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgCi0gICAgNjksIDgwLCA2NywgNzIsIDE5MywgNzgsIDY1LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgMTI4LCA3NiwgNzksIDc4LCAKLSAgICAxOTksIDc4LCA3MywgNzgsIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc1LCA3MywgMTk1LCA3MiwgNjUsIDc3LCA5MCwgMTkzLCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAyMDQsIDc5LCA4MCwgNjksIDIwNiwgODIsIDY1LCAxMjgsIAotICAgIDgzLCA2NSwgMTI4LCA4MywgODUsIDc4LCA2OCwgNjUsIDc4LCA2OSwgODMsIDE5NywgODYsIDczLCA2OSwgMjEyLCA3NiwgCi0gICAgNjUsIDIwNywgOTAsIDkwLCA4OSwgODgsIDEyOCwgOTAsIDkwLCA4OSwgODQsIDEyOCwgOTAsIDkwLCA4OSwgODIsIDg4LCAKLSAgICAxMjgsIDkwLCA5MCwgODksIDgyLCAxMjgsIDkwLCA5MCwgODksIDgwLCAxMjgsIDkwLCA5MCwgODksIDY1LCAxMjgsIDkwLCAKLSAgICA5MCwgODksIDEyOCwgOTAsIDkwLCA4NSwgODgsIDEyOCwgOTAsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA5MCwgODUsIAotICAgIDgyLCAxMjgsIDkwLCA5MCwgODUsIDgwLCAxMjgsIDkwLCA5MCwgODUsIDEyOCwgOTAsIDkwLCA4MywgODksIDY1LCAxMjgsIAotICAgIDkwLCA5MCwgODMsIDY1LCAxMjgsIDkwLCA5MCwgNzksIDg4LCAxMjgsIDkwLCA5MCwgNzksIDgwLCAxMjgsIDkwLCA5MCwgCi0gICAgNzksIDEyOCwgOTAsIDkwLCA3MywgODgsIDEyOCwgOTAsIDkwLCA3MywgODQsIDEyOCwgOTAsIDkwLCA3MywgODAsIDEyOCwgCi0gICAgOTAsIDkwLCA3MywgNjksIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4NCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODAsIAotICAgIDEyOCwgOTAsIDkwLCA3MywgNjksIDEyOCwgOTAsIDkwLCA3MywgMTI4LCA5MCwgOTAsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIAotICAgIDY5LCA4MCwgMTI4LCA5MCwgOTAsIDY5LCA2OSwgMTI4LCA5MCwgOTAsIDY5LCAxMjgsIDkwLCA5MCwgNjUsIDg4LCAxMjgsIAotICAgIDkwLCA5MCwgNjUsIDg0LCAxMjgsIDkwLCA5MCwgNjUsIDgwLCAxMjgsIDkwLCA5MCwgNjUsIDY1LCAxMjgsIDkwLCA5MCwgCi0gICAgNjUsIDEyOCwgOTAsIDg5LCA3MSwgNzksIDgzLCAxMjgsIDkwLCA4NywgODMsIDgwLCAxMjgsIDkwLCA4NywgNzgsIDc0LCAKLSAgICAxMjgsIDkwLCA4NywgNzgsIDY2LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3NCwgMTI4LCA5MCwgODcsIDY1LCA4MiwgNjUsIAotICAgIDc1LCA2NSwgODksIDEyOCwgOTAsIDg3LCA2NSwgMTI4LCA5MCwgODUsIDg0LCAxMjgsIDkwLCA4NSwgNzksIDg4LCAxMjgsIAotICAgIDkwLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA4NSwgNzksIDEyOCwgOTAsIDg1LCA3NywgMTI4LCA5MCwgODUsIDY2LCA4NSwgCi0gICAgODIsIDEyOCwgOTAsIDg1LCA1MywgMTI4LCA5MCwgODUsIDE4MSwgOTAsIDgzLCA3MiwgNjUsIDEyOCwgOTAsIDgyLCA2NSwgCi0gICAgMTI4LCA5MCwgODEsIDY1LCA4MCwgNzIsIDE5MywgOTAsIDc5LCA4NCwgMTI4LCA5MCwgNzksIDc5LCAxMjgsIDkwLCA3OSwgCi0gICAgNjUsIDEyOCwgOTAsIDc2LCA2NSwgNzcsIDE5MywgOTAsIDc2LCA2NSwgMTI4LCA5MCwgNzYsIDE5MywgOTAsIDc0LCA2OSwgCi0gICAgMTI4LCA5MCwgNzMsIDkwLCA1MCwgMTI4LCA5MCwgNzMsIDgxLCA2NSwgNjUsIDEyOCwgOTAsIDczLCA3OCwgNzksIDgyLCAKLSAgICAxMjgsIDkwLCA3MywgNzYsIDY4LCA2OSwgMTI4LCA5MCwgNzMsIDcxLCA5MCwgNjUsIDE5OSwgOTAsIDczLCA3MSwgMTI4LCAKLSAgICA5MCwgNzMsIDY4LCAxOTMsIDkwLCA3MywgNjYsIDEyOCwgOTAsIDczLCAxOTQsIDkwLCA3MywgNTEsIDEyOCwgOTAsIDIwMSwgCi0gICAgOTAsIDcyLCA4OSwgODgsIDEyOCwgOTAsIDcyLCA4OSwgODQsIDEyOCwgOTAsIDcyLCA4OSwgODIsIDg4LCAxMjgsIDkwLCAKLSAgICA3MiwgODksIDgyLCAxMjgsIDkwLCA3MiwgODksIDgwLCAxMjgsIDkwLCA3MiwgODksIDEyOCwgOTAsIDcyLCA4NywgNjksIAotICAgIDEyOCwgOTAsIDcyLCA4NywgNjUsIDEyOCwgOTAsIDcyLCA4NSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODQsIDEyOCwgOTAsIAotICAgIDcyLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDgyLCAxMjgsIDkwLCA3MiwgODUsIDgwLCAxMjgsIDkwLCA3MiwgCi0gICAgODUsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDEyOCwgOTAsIDcyLCAKLSAgICA4NSwgMTI4LCA5MCwgNzIsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDc5LCA4NCwgMTI4LCA5MCwgNzIsIDc5LCA4MCwgMTI4LCAKLSAgICA5MCwgNzIsIDc5LCA3OSwgMTI4LCA5MCwgNzIsIDc5LCAxMjgsIDkwLCA3MiwgNzMsIDg2LCA2OSwgODQsIDY5LCAxMjgsIAotICAgIDkwLCA3MiwgNzMsIDEyOCwgOTAsIDcyLCA2OSwgODgsIDEyOCwgOTAsIDcyLCA2OSwgODQsIDEyOCwgOTAsIDcyLCA2OSwgCi0gICAgODAsIDEyOCwgOTAsIDcyLCA2OSwgNjksIDEyOCwgOTAsIDcyLCA2OSwgMTI4LCA5MCwgNzIsIDE5NywgOTAsIDcyLCA2NSwgCi0gICAgODgsIDEyOCwgOTAsIDcyLCA2NSwgODQsIDEyOCwgOTAsIDcyLCA2NSwgODIsIDEyOCwgOTAsIDcyLCA2NSwgODAsIDEyOCwgCi0gICAgOTAsIDcyLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA3MiwgNjUsIDY1LCAxMjgsIDkwLCA3MiwgNjUsIDEyOCwgOTAsIDcyLCAKLSAgICAxMjgsIDkwLCA2OSwgODQsIDY1LCAxMjgsIDkwLCA2OSwgODIsIDc5LCAxMjgsIDkwLCA2OSwgODIsIDIwNywgOTAsIDY5LCAKLSAgICA3OCwgMTI4LCA5MCwgNjksIDc3LCA3NiwgODksIDY1LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA3NCwgNjUsIDEyOCwgOTAsIAotICAgIDY5LCA1MCwgMTI4LCA5MCwgMTk3LCA5MCwgNjUsIDg5LCA3OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgNzgsIDEyOCwgOTAsIAotICAgIDY1LCA4OSwgNzMsIDIwNiwgOTAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDkwLCA2NSwgODQsIDY1LCAKKyAgICA3MiwgNjUsIDc3LCA5MCwgMTkzLCA4MywgODksIDgyLCA3MywgNjUsIDE5NSwgODQsIDczLCA3NiwgNjgsIDY5LCAxMjgsIAorICAgIDcxLCA4NSwgODIsIDc3LCA4NSwgNzUsIDcyLCAyMDEsIDc3LCA2NSwgMTI4LCA3NywgNjUsIDg5LCA2OSwgMjAzLCA3NywgCisgICAgNjksIDY5LCA4NCwgNjksIDIwMSwgNzgsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzAsIDczLCA4NiwgNjksIAorICAgIDEyOCwgODAsIDY1LCAxMjgsIDg5LCA2NSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgMjEyLCA4MywgNzMsIDg4LCAxMjgsIDY5LCAKKyAgICA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgNjksIDgwLCA2NywgNzIsIDE5MywgNzgsIDY1LCAxMjgsIDgzLCA2OSwgODYsIAorICAgIDY5LCA3OCwgMTI4LCA3NiwgNzksIDc4LCAxOTksIDc4LCA3MywgNzgsIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc1LCA3MywgCisgICAgMTk1LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAyMDQsIDc5LCA4MCwgNjksIDIwNiwgODIsIDY1LCAKKyAgICAxMjgsIDgzLCA2NSwgMTI4LCA4MywgODUsIDc4LCA2OCwgNjUsIDc4LCA2OSwgODMsIDE5NywgODYsIDczLCA2OSwgMjEyLCAKKyAgICA3NiwgNjUsIDIwNywgOTAsIDkwLCA4OSwgODgsIDEyOCwgOTAsIDkwLCA4OSwgODQsIDEyOCwgOTAsIDkwLCA4OSwgODIsIAorICAgIDg4LCAxMjgsIDkwLCA5MCwgODksIDgyLCAxMjgsIDkwLCA5MCwgODksIDgwLCAxMjgsIDkwLCA5MCwgODksIDY1LCAxMjgsIAorICAgIDkwLCA5MCwgODksIDEyOCwgOTAsIDkwLCA4NSwgODgsIDEyOCwgOTAsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA5MCwgCisgICAgODUsIDgyLCAxMjgsIDkwLCA5MCwgODUsIDgwLCAxMjgsIDkwLCA5MCwgODUsIDEyOCwgOTAsIDkwLCA4MywgODksIDY1LCAKKyAgICAxMjgsIDkwLCA5MCwgODMsIDY1LCAxMjgsIDkwLCA5MCwgNzksIDg4LCAxMjgsIDkwLCA5MCwgNzksIDgwLCAxMjgsIDkwLCAKKyAgICA5MCwgNzksIDEyOCwgOTAsIDkwLCA3MywgODgsIDEyOCwgOTAsIDkwLCA3MywgODQsIDEyOCwgOTAsIDkwLCA3MywgODAsIAorICAgIDEyOCwgOTAsIDkwLCA3MywgNjksIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4NCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgCisgICAgODAsIDEyOCwgOTAsIDkwLCA3MywgNjksIDEyOCwgOTAsIDkwLCA3MywgMTI4LCA5MCwgOTAsIDY5LCA4OCwgMTI4LCA5MCwgCisgICAgOTAsIDY5LCA4MCwgMTI4LCA5MCwgOTAsIDY5LCA2OSwgMTI4LCA5MCwgOTAsIDY5LCAxMjgsIDkwLCA5MCwgNjUsIDg4LCAKKyAgICAxMjgsIDkwLCA5MCwgNjUsIDg0LCAxMjgsIDkwLCA5MCwgNjUsIDgwLCAxMjgsIDkwLCA5MCwgNjUsIDY1LCAxMjgsIDkwLCAKKyAgICA5MCwgNjUsIDEyOCwgOTAsIDg5LCA3MSwgNzksIDgzLCAxMjgsIDkwLCA4NywgODMsIDgwLCAxMjgsIDkwLCA4NywgNzgsIAorICAgIDc0LCAxMjgsIDkwLCA4NywgNzgsIDY2LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3NCwgMTI4LCA5MCwgODcsIDY1LCA4MiwgCisgICAgNjUsIDc1LCA2NSwgODksIDEyOCwgOTAsIDg3LCA2NSwgMTI4LCA5MCwgODUsIDg0LCAxMjgsIDkwLCA4NSwgNzksIDg4LCAKKyAgICAxMjgsIDkwLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA4NSwgNzksIDEyOCwgOTAsIDg1LCA3NywgMTI4LCA5MCwgODUsIDY2LCAKKyAgICA4NSwgODIsIDEyOCwgOTAsIDg1LCA1MywgMTI4LCA5MCwgODUsIDE4MSwgOTAsIDgzLCA3MiwgNjUsIDEyOCwgOTAsIDgyLCAKKyAgICA2NSwgMTI4LCA5MCwgODEsIDY1LCA4MCwgNzIsIDE5MywgOTAsIDc5LCA4NCwgMTI4LCA5MCwgNzksIDc5LCAxMjgsIDkwLCAKKyAgICA3OSwgNjUsIDEyOCwgOTAsIDc2LCA2NSwgNzcsIDE5MywgOTAsIDc2LCA2NSwgMTI4LCA5MCwgNzYsIDE5MywgOTAsIDc0LCAKKyAgICA2OSwgMTI4LCA5MCwgNzMsIDkwLCA1MCwgMTI4LCA5MCwgNzMsIDgxLCA2NSwgNjUsIDEyOCwgOTAsIDczLCA3OCwgNzksIAorICAgIDgyLCAxMjgsIDkwLCA3MywgNzYsIDY4LCA2OSwgMTI4LCA5MCwgNzMsIDcxLCA5MCwgNjUsIDE5OSwgOTAsIDczLCA3MSwgCisgICAgMTI4LCA5MCwgNzMsIDY4LCAxOTMsIDkwLCA3MywgNjYsIDEyOCwgOTAsIDczLCAxOTQsIDkwLCA3MywgNTEsIDEyOCwgOTAsIAorICAgIDIwMSwgOTAsIDcyLCA4OSwgODgsIDEyOCwgOTAsIDcyLCA4OSwgODQsIDEyOCwgOTAsIDcyLCA4OSwgODIsIDg4LCAxMjgsIAorICAgIDkwLCA3MiwgODksIDgyLCAxMjgsIDkwLCA3MiwgODksIDgwLCAxMjgsIDkwLCA3MiwgODksIDEyOCwgOTAsIDcyLCA4NywgCisgICAgNjksIDEyOCwgOTAsIDcyLCA4NywgNjUsIDEyOCwgOTAsIDcyLCA4NSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODQsIDEyOCwgCisgICAgOTAsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDgyLCAxMjgsIDkwLCA3MiwgODUsIDgwLCAxMjgsIDkwLCAKKyAgICA3MiwgODUsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDEyOCwgOTAsIAorICAgIDcyLCA4NSwgMTI4LCA5MCwgNzIsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDc5LCA4NCwgMTI4LCA5MCwgNzIsIDc5LCA4MCwgCisgICAgMTI4LCA5MCwgNzIsIDc5LCA3OSwgMTI4LCA5MCwgNzIsIDc5LCAxMjgsIDkwLCA3MiwgNzMsIDg2LCA2OSwgODQsIDY5LCAKKyAgICAxMjgsIDkwLCA3MiwgNzMsIDEyOCwgOTAsIDcyLCA2OSwgODgsIDEyOCwgOTAsIDcyLCA2OSwgODQsIDEyOCwgOTAsIDcyLCAKKyAgICA2OSwgODAsIDEyOCwgOTAsIDcyLCA2OSwgNjksIDEyOCwgOTAsIDcyLCA2OSwgMTI4LCA5MCwgNzIsIDE5NywgOTAsIDcyLCAKKyAgICA2NSwgODgsIDEyOCwgOTAsIDcyLCA2NSwgODQsIDEyOCwgOTAsIDcyLCA2NSwgODIsIDEyOCwgOTAsIDcyLCA2NSwgODAsIAorICAgIDEyOCwgOTAsIDcyLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA3MiwgNjUsIDY1LCAxMjgsIDkwLCA3MiwgNjUsIDEyOCwgOTAsIAorICAgIDcyLCAxMjgsIDkwLCA2OSwgODQsIDY1LCAxMjgsIDkwLCA2OSwgODIsIDc5LCAxMjgsIDkwLCA2OSwgODIsIDIwNywgOTAsIAorICAgIDY5LCA3OCwgMTI4LCA5MCwgNjksIDc3LCA3NiwgODksIDY1LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA3NCwgNjUsIDEyOCwgCisgICAgOTAsIDY5LCA1MCwgMTI4LCA5MCwgMTk3LCA5MCwgNjUsIDg5LCA3OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgNzgsIDEyOCwgCisgICAgOTAsIDY1LCA4OSwgNzMsIDIwNiwgOTAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDkwLCA2NSwgODQsIDY1LCAKICAgICAxMjgsIDkwLCA2NSwgODIsIDgxLCA2NSwgMTI4LCA5MCwgNjUsIDgxLCA2OSwgMTk4LCA5MCwgNjUsIDc3LCA4OCwgMTI4LCAKICAgICA5MCwgNjUsIDIwNCwgOTAsIDY1LCA3MywgNzgsIDEyOCwgOTAsIDY1LCA3MywgMjA2LCA5MCwgNjUsIDczLCAxMjgsIDkwLCAKICAgICA2NSwgNzIsIDEyOCwgOTAsIDY1LCAyMDAsIDkwLCA2NSwgNzEsIDEyOCwgOTAsIDY1LCA2OSwgNzAsIDEyOCwgOTAsIDQ4LCAKQEAgLTUyNSw3OSArNTI1LDc5IEBACiAgICAgODQsIDg1LCA4NCwgODQsIDg5LCAxMjgsIDg0LCA4NSwgODQsIDY5LCA4OSwgNjUsIDgzLCA2NSwgODQsIDEyOCwgODQsIDg1LCAKICAgICA4NCwgMTI4LCA4NCwgODUsIDgyLCA4OCwgMTI4LCA4NCwgODUsIDgyLCA4NSwgMTI4LCA4NCwgODUsIDgyLCA4NCwgNzYsIAogICAgIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc5LCA1MCwgMTI4LCA4NCwgODUsIDgyLCA3OCwgODMsIDg0LCA3MywgNzYsIDY5LCAKLSAgICAxMjgsIDg0LCA4NSwgODIsIDc4LCA2OSwgMTk2LCA4NCwgODUsIDgyLCAyMDYsIDg0LCA4NSwgODIsIDY2LCA2NSwgNzgsIAotICAgIDEyOCwgODQsIDg1LCA4MiwgMTI4LCA4NCwgODUsIDgwLCAxMjgsIDg0LCA4NSwgNzksIDg4LCAxMjgsIDg0LCA4NSwgNzksIAotICAgIDg0LCAxMjgsIDg0LCA4NSwgNzksIDgwLCAxMjgsIDg0LCA4NSwgNzksIDEyOCwgODQsIDg1LCA3OCwgNzgsIDg5LCAxMjgsIAotICAgIDg0LCA4NSwgNzcsIDY5LCA4NCwgNjksIDgzLCAxMjgsIDg0LCA4NSwgNzcsIDY1LCA2OSwgMTI4LCA4NCwgODUsIDc3LCAKLSAgICAxMjgsIDg0LCA4NSwgNzYsIDczLCA4MCwgMTI4LCA4NCwgODUsIDc1LCA4NywgNjksIDc4LCA4NCwgNzMsIDgzLCAxMjgsIAotICAgIDg0LCA4NSwgNzUsIDEyOCwgODQsIDg1LCA3MSwgODIsIDczLCAyMDMsIDg0LCA4NSwgNzEsIDUwLCAxMjgsIDg0LCA4NSwgCi0gICAgNzEsIDE3OCwgODQsIDg1LCA2NSwgODIsIDY5LCAxOTksIDg0LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA4NCwgODUsIDY1LCAKLSAgICA2OSwgMTI4LCA4NCwgMjEzLCA4NCwgODQsIDg1LCA4NSwgMTI4LCA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA3MSwgMTI4LCAKLSAgICA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA2NSwgNzEsIDEyOCwgODQsIDg0LCA4NSwgMTI4LCA4NCwgODQsIDg0LCA3MiwgNjUsIAotICAgIDEyOCwgODQsIDg0LCA4NCwgNjUsIDEyOCwgODQsIDg0LCA4MywgODUsIDEyOCwgODQsIDg0LCA4MywgNzksIDEyOCwgODQsIAotICAgIDg0LCA4MywgNzMsIDEyOCwgODQsIDg0LCA4MywgNjksIDY5LCAxMjgsIDg0LCA4NCwgODMsIDY5LCAxMjgsIDg0LCA4NCwgCi0gICAgODMsIDY1LCAxMjgsIDg0LCA4NCwgNzksIDc5LCAxMjgsIDg0LCA4NCwgNzMsIDczLCAxMjgsIDg0LCA4NCwgNzMsIDEyOCwgCi0gICAgODQsIDg0LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDg1LCAxMjgsIDg0LCA4NCwgNzIsIDc5LCA3OSwgMTI4LCAKLSAgICA4NCwgODQsIDcyLCA3OSwgMTI4LCA4NCwgODQsIDcyLCA3MywgMTI4LCA4NCwgODQsIDcyLCA2OSwgNjksIDEyOCwgODQsIAotICAgIDg0LCA3MiwgNjksIDEyOCwgODQsIDg0LCA3MiwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNzIsIDEyOCwgODQsIDg0LCA2OSwgCi0gICAgNzIsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDIwMCwgODQsIDg0LCA2OSwgNzIsIDEyOCwgODQsIDg0LCAKLSAgICA2OSwgMjAwLCA4NCwgODQsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODQsIAotICAgIDg0LCA2NSwgODUsIDEyOCwgODQsIDg0LCA2NSwgNzMsIDEyOCwgODQsIDg0LCA2NSwgNjUsIDEyOCwgODQsIDg0LCA1MCwgCi0gICAgMTI4LCA4NCwgODMsIDg3LCA2OSwgMTI4LCA4NCwgODMsIDg3LCA2NSwgMTI4LCA4NCwgODMsIDg2LCAxMjgsIDg0LCA4MywgCi0gICAgODMsIDY5LCAxMjgsIDg0LCA4MywgODMsIDY1LCAxMjgsIDg0LCA4MywgNzIsIDg1LCA3MSwgODMsIDEyOCwgODQsIDgzLCAKLSAgICA3MiwgNzksIDc5LCA3NSwgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIDIwMywgODQsIDgzLCA3MiwgNjksIDgzLCAxMjgsIAotICAgIDg0LCA4MywgNzIsIDY5LCA3MSwgMTI4LCA4NCwgODMsIDcyLCA2OSwgMTk5LCA4NCwgODMsIDcyLCA2OSwgMTI4LCA4NCwgCi0gICAgODMsIDcyLCA2NSwgMTI4LCA4NCwgODMsIDY5LCA4MiwgNjksIDEyOCwgODQsIDgzLCA2NSwgNjgsIDczLCAxMjgsIDg0LCAKLSAgICA4MywgNjUsIDY4LCAyMDEsIDg0LCA4MywgNjUsIDY1LCA2OCwgNzMsIDg5LCAxMjgsIDg0LCA4MywgNjUsIDY1LCAxMjgsIAotICAgIDg0LCA4MywgMTkzLCA4NCwgODIsIDg5LCA2NiwgNzYsIDczLCA3OSwgMjA2LCA4NCwgODIsIDg1LCA4NCwgNzIsIDEyOCwgCi0gICAgODQsIDgyLCA4NSwgNzgsIDc1LCAxMjgsIDg0LCA4MiwgODUsIDc4LCA2NywgNjUsIDg0LCA2OSwgMTk2LCA4NCwgODIsIDg1LCAKLSAgICA3NywgODAsIDY5LCA4NCwgMTI4LCA4NCwgODIsIDg1LCA2OSwgMTI4LCA4NCwgODIsIDg1LCA2NywgNzUsIDEyOCwgODQsIAotICAgIDgyLCA3OSwgODAsIDczLCA2NywgNjUsIDIwNCwgODQsIDgyLCA3OSwgODAsIDcyLCA4OSwgMTI4LCA4NCwgODIsIDc5LCA3NywgCi0gICAgNzMsIDc1LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIAotICAgIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDgwLCAKLSAgICA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgCi0gICAgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDIwNiwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDc2LCAKLSAgICA4OSwgNzEsIDczLCA4MywgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc2LCA3NiwgNjksIDg5LCA2NiwgODUsIDgzLCAxMjgsIAotICAgIDg0LCA4MiwgNzksIDc1LCA4NSwgODQsIDY1LCA4MywgODQsIDIwMSwgODQsIDgyLCA3OSwgNjksIDkwLCA2OSwgNzgsIDczLCAKLSAgICA2NSwgMjA2LCA4NCwgODIsIDczLCA4NSwgNzcsIDgwLCA3MiwgMTI4LCA4NCwgODIsIDczLCA4NCwgNzksIDIxMSwgODQsIAotICAgIDgyLCA3MywgODQsIDczLCA3NywgNzksIDgyLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA3MywgNzcsIDc5LCAKLSAgICA4NSwgMTI4LCA4NCwgODIsIDczLCA4MywgNjksIDc3LCA2OSwgMTI4LCA4NCwgODIsIDczLCA4MCwgNzksIDY4LCAxMjgsIAotICAgIDg0LCA4MiwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCAxOTcsIDg0LCA4MiwgNzMsIDc5LCAKLSAgICAyMDYsIDg0LCA4MiwgNzMsIDczLCA4MywgNjUsIDgwLCAxMjgsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIAotICAgIDIxMSwgODQsIDgyLCA3MywgNzEsIDgyLCA2NSwgMjA1LCA4NCwgODIsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDc4LCAKLSAgICAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgODQsIDgyLCA3MywgNzAsIDc5LCA3NiwgNzMsIAotICAgIDY1LCA4NCwgMTk3LCA4NCwgODIsIDczLCA2OCwgNjksIDc4LCA4NCwgMTI4LCA4NCwgODIsIDczLCA2OCwgNjksIDc4LCAKLSAgICAyMTIsIDg0LCA4MiwgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIAotICAgIDY1LCAyMTAsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgyLCA3OSwgODUsIDc4LCAxOTYsIDg0LCA4MiwgCi0gICAgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA4NCwgODIsIDczLCA2NSwgNzgsIAotICAgIDcxLCA3NiwgNjksIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDE5NywgODQsIDgyLCA3MywgNjUsIDEyOCwgCi0gICAgODQsIDgyLCA3MywgMTI4LCA4NCwgODIsIDY5LCA4MywgNzMsIDc2LCA3NiwgNzksIDEyOCwgODQsIDgyLCA2OSwgNzgsIDY4LCAKLSAgICAxMjgsIDg0LCA4MiwgNjksIDc4LCAxOTYsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTEsIDEyOCwgODQsIAotICAgIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MCwgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDQ5LCAKLSAgICAxMjgsIDg0LCA4MiwgNjksIDY5LCAxMjgsIDg0LCA4MiwgNjksIDE5NywgODQsIDgyLCA2OSwgNjUsIDY4LCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDg0LCA4MiwgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDgwLCA2OSwgOTAsIDczLCA4NSwgNzcsIDEyOCwgCi0gICAgODQsIDgyLCA2NSwgNzgsIDgzLCA4NiwgNjksIDgyLCA4MywgNjUsIDIwNCwgODQsIDgyLCA2NSwgNzgsIDgzLCA4MCwgNzksIAotICAgIDgzLCA3MywgODQsIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgMjEyLCA4NCwgODIsIDY1LCA3OCwgCi0gICAgODMsIDc3LCA3MywgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCA4MywgODMsIAotICAgIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3NywgODcsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA3NywgMTI4LCA4NCwgCi0gICAgODIsIDY1LCAyMDUsIDg0LCA4MiwgNjUsIDczLCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3MywgMjA2LCA4NCwgODIsIDY1LCAKLSAgICA3MywgNzYsIDczLCA3OCwgMTk5LCA4NCwgODIsIDY1LCA3MCwgNzAsIDczLCA2NywgMTI4LCA4NCwgODIsIDY1LCA3MCwgNzAsIAotICAgIDczLCAxOTUsIDg0LCA4MiwgNjUsIDY4LCAxOTcsIDg0LCA4MiwgNjUsIDY3LCA4NCwgNzksIDgyLCAxMjgsIDg0LCA4MiwgCi0gICAgNjUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDEyOCwgODQsIDc5LCA4OCwgMTI4LCA4NCwgNzksIDg3LCA2OSwgODIsIDEyOCwgCi0gICAgODQsIDc5LCA4NSwgODIsIDc4LCA3OSwgNzMsIDIxMSwgODQsIDc5LCA4NCwgNjUsIDIwNCwgODQsIDc5LCA4NCwgMTI4LCAKLSAgICA4NCwgNzksIDgyLCA4NCwgNzksIDczLCA4MywgMTk3LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgODMsIDEyOCwgODQsIAotICAgIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDIxMSwgODQsIDc5LCA4MiwgNjcsIDcyLCAxMjgsIDg0LCA3OSwgODEsIDEyOCwgCi0gICAgODQsIDc5LCA4MCwgNjYsIDY1LCA4MiwgMTI4LCA4NCwgNzksIDgwLCA0NSwgNzYsIDczLCA3MSwgNzIsIDg0LCA2OSwgMTk2LCAKLSAgICA4NCwgNzksIDgwLCAxMjgsIDg0LCA3OSwgMjA4LCA4NCwgNzksIDc5LCA4NCwgNzIsIDEyOCwgODQsIDc5LCA3OSwgNzgsIAotICAgIDEyOCwgODQsIDc5LCA3OCwgNzksIDgzLCAxMjgsIDg0LCA3OSwgNzgsIDcxLCA4NSwgNjksIDEyOCwgODQsIDc5LCA3OCwgCi0gICAgNzEsIDg1LCAxOTcsIDg0LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTYsIDEyOCwgODQsIDc5LCAKLSAgICA3OCwgNjksIDQ1LCA1NSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU0LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTMsIAotICAgIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MiwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUxLCAxMjgsIDg0LCA3OSwgCi0gICAgNzgsIDY5LCA0NSwgNTAsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgMTI4LCAKLSAgICA4NCwgNzksIDc4LCA2NSwgMjA0LCA4NCwgNzksIDc3LCA4MCwgNzMsIDEyOCwgODQsIDc5LCA3NywgNjUsIDg0LCA3OSwgCi0gICAgMTI4LCA4NCwgNzksIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzUsIDg5LCAyMDcsIDg0LCA3OSwgNzMsIDc2LCAKLSAgICA2OSwgODQsIDEyOCwgODQsIDc5LCA3MSwgNjksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDg0LCA3OSwgNjgsIDIwNywgODQsIAotICAgIDc5LCA2NSwgNzgsIDY4LCA2NSwgNzUsIDcyLCA3MywgNjUsIDg0LCAxMjgsIDg0LCA3OSwgNjUsIDEyOCwgODQsIDc4LCAKKyAgICAxMjgsIDg0LCA4NSwgODIsIDc4LCA2OSwgMTk2LCA4NCwgODUsIDgyLCAyMDYsIDg0LCA4NSwgODIsIDc1LCA3MywgODMsIAorICAgIDIwMCwgODQsIDg1LCA4MiwgNjYsIDY1LCA3OCwgMTI4LCA4NCwgODUsIDgyLCAxMjgsIDg0LCA4NSwgODAsIDEyOCwgODQsIAorICAgIDg1LCA3OSwgODgsIDEyOCwgODQsIDg1LCA3OSwgODQsIDEyOCwgODQsIDg1LCA3OSwgODAsIDEyOCwgODQsIDg1LCA3OSwgCisgICAgMTI4LCA4NCwgODUsIDc4LCA3OCwgODksIDEyOCwgODQsIDg1LCA3NywgNjksIDg0LCA2OSwgODMsIDEyOCwgODQsIDg1LCAKKyAgICA3NywgNjUsIDY5LCAxMjgsIDg0LCA4NSwgNzcsIDEyOCwgODQsIDg1LCA3NiwgNzMsIDgwLCAxMjgsIDg0LCA4NSwgNzUsIAorICAgIDg3LCA2OSwgNzgsIDg0LCA3MywgODMsIDEyOCwgODQsIDg1LCA3NSwgMTI4LCA4NCwgODUsIDcxLCA4MiwgNzMsIDIwMywgCisgICAgODQsIDg1LCA3MSwgNTAsIDEyOCwgODQsIDg1LCA3MSwgMTc4LCA4NCwgODUsIDY1LCA4MiwgNjksIDE5OSwgODQsIDg1LCAKKyAgICA2NSwgNjksIDgwLCAxMjgsIDg0LCA4NSwgNjUsIDY5LCAxMjgsIDg0LCAyMTMsIDg0LCA4NCwgODUsIDg1LCAxMjgsIDg0LCAKKyAgICA4NCwgODUsIDY4LCA2OCwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIDY1LCA3MSwgMTI4LCA4NCwgODQsIAorICAgIDg1LCAxMjgsIDg0LCA4NCwgODQsIDcyLCA2NSwgMTI4LCA4NCwgODQsIDg0LCA2NSwgMTI4LCA4NCwgODQsIDgzLCA4NSwgCisgICAgMTI4LCA4NCwgODQsIDgzLCA3OSwgMTI4LCA4NCwgODQsIDgzLCA3MywgMTI4LCA4NCwgODQsIDgzLCA2OSwgNjksIDEyOCwgCisgICAgODQsIDg0LCA4MywgNjksIDEyOCwgODQsIDg0LCA4MywgNjUsIDEyOCwgODQsIDg0LCA3OSwgNzksIDEyOCwgODQsIDg0LCAKKyAgICA3MywgNzMsIDEyOCwgODQsIDg0LCA3MywgMTI4LCA4NCwgODQsIDcyLCA4NywgNjksIDEyOCwgODQsIDg0LCA3MiwgODUsIAorICAgIDEyOCwgODQsIDg0LCA3MiwgNzksIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDczLCAxMjgsIAorICAgIDg0LCA4NCwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2NSwgNjUsIDEyOCwgCisgICAgODQsIDg0LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgMjAwLCAKKyAgICA4NCwgODQsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCAyMDAsIDg0LCA4NCwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNjUsIAorICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NCwgODQsIDY1LCA4NSwgMTI4LCA4NCwgODQsIDY1LCA3MywgMTI4LCA4NCwgCisgICAgODQsIDY1LCA2NSwgMTI4LCA4NCwgODQsIDUwLCAxMjgsIDg0LCA4MywgODcsIDY5LCAxMjgsIDg0LCA4MywgODcsIDY1LCAKKyAgICAxMjgsIDg0LCA4MywgODYsIDEyOCwgODQsIDgzLCA4MywgNjksIDEyOCwgODQsIDgzLCA4MywgNjUsIDEyOCwgODQsIDgzLCAKKyAgICA3MiwgODUsIDcxLCA4MywgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgCisgICAgMjAzLCA4NCwgODMsIDcyLCA2OSwgODMsIDEyOCwgODQsIDgzLCA3MiwgNjksIDcxLCAxMjgsIDg0LCA4MywgNzIsIDY5LCAKKyAgICAxOTksIDg0LCA4MywgNzIsIDY5LCAxMjgsIDg0LCA4MywgNzIsIDY1LCAxMjgsIDg0LCA4MywgNjksIDgyLCA2OSwgMTI4LCAKKyAgICA4NCwgODMsIDY1LCA2OCwgNzMsIDEyOCwgODQsIDgzLCA2NSwgNjgsIDIwMSwgODQsIDgzLCA2NSwgNjUsIDY4LCA3MywgODksIAorICAgIDEyOCwgODQsIDgzLCA2NSwgNjUsIDEyOCwgODQsIDgzLCAxOTMsIDg0LCA4MiwgODksIDY2LCA3NiwgNzMsIDc5LCAyMDYsIAorICAgIDg0LCA4MiwgODUsIDg0LCA3MiwgMTI4LCA4NCwgODIsIDg1LCA3OCwgNzUsIDEyOCwgODQsIDgyLCA4NSwgNzgsIDY3LCA2NSwgCisgICAgODQsIDY5LCAxOTYsIDg0LCA4MiwgODUsIDc3LCA4MCwgNjksIDg0LCAxMjgsIDg0LCA4MiwgODUsIDY5LCAxMjgsIDg0LCAKKyAgICA4MiwgODUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDc5LCA4MCwgNzMsIDY3LCA2NSwgMjA0LCA4NCwgODIsIDc5LCA4MCwgNzIsIAorICAgIDg5LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4NCwgCisgICAgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3OCwgMTI4LCA4NCwgODIsIAorICAgIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDY1LCAxMjgsIDg0LCAKKyAgICA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgMjA2LCA4NCwgODIsIAorICAgIDc5LCA3NywgNzMsIDc1LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzYsIDc2LCAKKyAgICA2OSwgODksIDY2LCA4NSwgODMsIDEyOCwgODQsIDgyLCA3OSwgNzUsIDg1LCA4NCwgNjUsIDgzLCA4NCwgMjAxLCA4NCwgODIsIAorICAgIDc5LCA2OSwgOTAsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDg0LCA4MiwgNzMsIDg1LCA3NywgODAsIDcyLCAxMjgsIDg0LCA4MiwgCisgICAgNzMsIDg0LCA3OSwgMjExLCA4NCwgODIsIDczLCA4NCwgNzMsIDc3LCA3OSwgODIsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCAKKyAgICA3MywgODMsIDczLCA3NywgNzksIDg1LCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIAorICAgIDgwLCA3OSwgNjgsIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCA3MywgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDE5NywgCisgICAgODQsIDgyLCA3MywgNzksIDIwNiwgODQsIDgyLCA3MywgNzMsIDgzLCA2NSwgODAsIDEyOCwgODQsIDgyLCA3MywgNzEsIDgyLCAKKyAgICA2NSwgNzcsIDc3LCA3OSwgMjExLCA4NCwgODIsIDczLCA3MSwgODIsIDY1LCAyMDUsIDg0LCA4MiwgNzMsIDcxLCA3OSwgODIsIAorICAgIDcxLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA4NCwgODIsIDczLCA3MCwgCisgICAgNzksIDc2LCA3MywgNjUsIDg0LCAxOTcsIDg0LCA4MiwgNzMsIDY4LCA2OSwgNzgsIDg0LCAxMjgsIDg0LCA4MiwgNzMsIDY4LCAKKyAgICA2OSwgNzgsIDIxMiwgODQsIDgyLCA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIAorICAgIDg1LCA3NiwgNjUsIDIxMCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODIsIDc5LCA4NSwgNzgsIDE5NiwgCisgICAgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDg0LCA4MiwgNzMsIAorICAgIDY1LCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4NCwgODIsIDczLCA2NSwgCisgICAgMTI4LCA4NCwgODIsIDczLCAxMjgsIDg0LCA4MiwgNjksIDgzLCA3MywgNzYsIDc2LCA3OSwgMTI4LCA4NCwgODIsIDY5LCAKKyAgICA3OCwgNjgsIDEyOCwgODQsIDgyLCA2OSwgNzgsIDE5NiwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MSwgCisgICAgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUwLCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCAKKyAgICA0NSwgNDksIDEyOCwgODQsIDgyLCA2OSwgNjksIDEyOCwgODQsIDgyLCA2OSwgMTk3LCA4NCwgODIsIDY5LCA2NSwgNjgsIAorICAgIDczLCA3OCwgNzEsIDEyOCwgODQsIDgyLCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgODAsIDY5LCA5MCwgNzMsIDg1LCA3NywgCisgICAgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDg2LCA2OSwgODIsIDgzLCA2NSwgMjA0LCA4NCwgODIsIDY1LCA3OCwgODMsIDgwLCAKKyAgICA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCAyMTIsIDg0LCA4MiwgNjUsIAorICAgIDc4LCA4MywgNzcsIDczLCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDgzLCAKKyAgICA4MywgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc3LCA4NywgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDc3LCAxMjgsIAorICAgIDg0LCA4MiwgNjUsIDIwNSwgODQsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDczLCAyMDYsIDg0LCA4MiwgCisgICAgNjUsIDczLCA3NiwgNzMsIDc4LCAxOTksIDg0LCA4MiwgNjUsIDcwLCA3MCwgNzMsIDY3LCAxMjgsIDg0LCA4MiwgNjUsIDcwLCAKKyAgICA3MCwgNzMsIDE5NSwgODQsIDgyLCA2NSwgNjgsIDE5NywgODQsIDgyLCA2NSwgNjcsIDg0LCA3OSwgODIsIDEyOCwgODQsIAorICAgIDgyLCA2NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgMTI4LCA4NCwgNzksIDg4LCAxMjgsIDg0LCA3OSwgODcsIDY5LCA4MiwgCisgICAgMTI4LCA4NCwgNzksIDg1LCA4MiwgNzgsIDc5LCA3MywgMjExLCA4NCwgNzksIDg0LCA2NSwgMjA0LCA4NCwgNzksIDg0LCAKKyAgICAxMjgsIDg0LCA3OSwgODIsIDg0LCA3OSwgNzMsIDgzLCAxOTcsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCA4MywgCisgICAgMTI4LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgMjExLCA4NCwgNzksIDgyLCA2NywgNzIsIDEyOCwgODQsIDc5LCAKKyAgICA4MSwgMTI4LCA4NCwgNzksIDgwLCA2NiwgNjUsIDgyLCAxMjgsIDg0LCA3OSwgODAsIDQ1LCA3NiwgNzMsIDcxLCA3MiwgODQsIAorICAgIDY5LCAxOTYsIDg0LCA3OSwgODAsIDEyOCwgODQsIDc5LCAyMDgsIDg0LCA3OSwgNzksIDg0LCA3MiwgMTI4LCA4NCwgNzksIAorICAgIDc5LCA3OCwgMTI4LCA4NCwgNzksIDc4LCA3OSwgODMsIDEyOCwgODQsIDc5LCA3OCwgNzEsIDg1LCA2OSwgMTI4LCA4NCwgCisgICAgNzksIDc4LCA3MSwgODUsIDE5NywgODQsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NiwgMTI4LCAKKyAgICA4NCwgNzksIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTQsIDEyOCwgODQsIDc5LCA3OCwgNjksIAorICAgIDQ1LCA1MywgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUyLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTEsIDEyOCwgCisgICAgODQsIDc5LCA3OCwgNjksIDQ1LCA1MCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCAKKyAgICAxMjgsIDg0LCA3OSwgNzgsIDY1LCAyMDQsIDg0LCA3OSwgNzcsIDgwLCA3MywgMTI4LCA4NCwgNzksIDc3LCA2NSwgODQsIAorICAgIDc5LCAxMjgsIDg0LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3NSwgODksIDIwNywgODQsIDc5LCA3MywgCisgICAgNzYsIDY5LCA4NCwgMTI4LCA4NCwgNzksIDcxLCA2OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgODQsIDc5LCA2OCwgMjA3LCAKKyAgICA4NCwgNzksIDY1LCA3OCwgNjgsIDY1LCA3NSwgNzIsIDczLCA2NSwgODQsIDEyOCwgODQsIDc5LCA2NSwgMTI4LCA4NCwgNzgsIAogICAgIDEyOCwgODQsIDc2LCA4NiwgMTI4LCA4NCwgNzYsIDg1LCAxMjgsIDg0LCA3NiwgNzksIDEyOCwgODQsIDc2LCA3MywgMTI4LCAKICAgICA4NCwgNzYsIDcyLCA4OSwgNjUsIDEyOCwgODQsIDc2LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA3NiwgNzIsIDg1LCAxMjgsIAogICAgIDg0LCA3NiwgNzIsIDc5LCA3OSwgMTI4LCA4NCwgNzYsIDcyLCA3OSwgMTI4LCA4NCwgNzYsIDcyLCA3MywgMTI4LCA4NCwgCkBAIC03OTYsNDA5ICs3OTYsNDEwIEBACiAgICAgNjksIDg0LCAxMjgsIDgzLCA4NSwgNjUsIDY5LCA3OCwgMTI4LCA4MywgODUsIDY1LCA2OSwgMTI4LCA4MywgODUsIDY1LCAKICAgICAxMjgsIDgzLCAyMTMsIDgzLCA4NCwgODgsIDEyOCwgODMsIDg0LCA4NywgNjUsIDEyOCwgODMsIDg0LCA4NSwgNjgsIDg5LCAKICAgICAxMjgsIDgzLCA4NCwgODUsIDY3LCA3NSwgNDUsIDc5LCA4NSwgMjEyLCA4MywgODQsIDgzLCAxMjgsIDgzLCA4NCwgODIsIAotICAgIDc5LCA3NSwgNjksIDgzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDIxMSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDU3LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NiwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTUsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU0LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTIsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDUxLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNDksIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDg0LCA4MiwgNzksIAotICAgIDc1LCA2OSwgNDUsIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgMTk3LCA4MywgODQsIDgyLCA3MywgODAsIDY5LCAKLSAgICAxMjgsIDgzLCA4NCwgODIsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDgzLCA4NCwgODIsIAotICAgIDczLCA3NSwgNjksIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIDgzLCA4NCwgODIsIDczLCA2OCwgNjksIDEyOCwgCi0gICAgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNzYsIDIxNywgODMsIDg0LCA4MiwgNjksIDg0LCA2NywgNzIsIDY5LCAxOTYsIDgzLCAKLSAgICA4NCwgODIsIDY5LCA4MywgMjExLCA4MywgODQsIDgyLCA2OSwgNzgsIDcxLCA4NCwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNjksIAotICAgIDY1LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NywgNjYsIDY5LCA4MiwgODIsIDg5LCAxMjgsIDgzLCA4NCwgCi0gICAgODIsIDY1LCA4NCwgODUsIDc3LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg0LCA4NSwgNzcsIDEyOCwgODMsIDg0LCAKLSAgICA4MiwgNjUsIDg0LCA4NSwgMjA1LCA4MywgODQsIDgyLCA2NSwgODQsIDczLCA2NSwgMjA2LCA4MywgODQsIDgyLCA2NSwgNzMsIAotICAgIDc4LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgCi0gICAgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgMjEyLCA4MywgODQsIDgyLCA2NSwgNzMsIDcwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCAKLSAgICA3MSwgNzEsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCA3OSwgODYsIDY5LCAxMjgsIDgzLCA4NCwgNzksIAotICAgIDgyLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODcsIDY1LCA4NCwgNjcsIDcyLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCA3MSwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIAotICAgIDEyOCwgODMsIDg0LCA3OSwgMjA4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgODMsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIAotICAgIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgODMsIDg0LCA3MywgNzYsIDIwNCwgODMsIDg0LCA3MywgNzYsIDE5NywgCi0gICAgODMsIDg0LCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgODQsIDY5LCA4MCwgMTI4LCA4MywgODQsIDY5LCA3NywgMTI4LCAKLSAgICA4MywgODQsIDY5LCA2NSwgNzcsIDczLCA3OCwgMTk5LCA4MywgODQsIDY5LCA2NSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIAotICAgIDIwNSwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODUsIDEyOCwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODMsIDEyOCwgCi0gICAgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgMjExLCA4MywgODQsIDY1LCA4NSwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCAKLSAgICA4NCwgODUsIDE5NywgODMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCA4MiwgODMsIAotICAgIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgzLCA4NCwgNjUsIDgyLCAyMTIsIDgzLCA4NCwgNjUsIDgyLCA4MywgCi0gICAgMTI4LCA4MywgODQsIDY1LCA4MiwgODIsIDY5LCAxOTYsIDgzLCA4NCwgNjUsIDgyLCA3NSwgMTI4LCA4MywgODQsIDY1LCAKLSAgICA4MiwgMTI4LCA4MywgODQsIDY1LCAyMTAsIDgzLCA4NCwgNjUsIDc4LCA2OCwgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIAotICAgIDgzLCA4NCwgNjUsIDc4LCA2OCwgNjUsIDgyLCAxOTYsIDgzLCA4NCwgNjUsIDc4LCA2OCwgMTI4LCA4MywgODQsIDY1LCA3OCwgCi0gICAgMTI4LCA4MywgODQsIDY1LCA3NiwgNzYsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgNzAsIDcwLCAxMjgsIDgzLCAKLSAgICA4NCwgNjUsIDcwLCAxOTgsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MywgODQsIDY1LCA2NywgNjcsIAotICAgIDY1LCA4NCwgNzMsIDgzLCA4MywgNzMsIDc3LCA3OSwgMTI4LCA4MywgODQsIDUwLCAxMjgsIDgzLCA4MywgODksIDg4LCAKLSAgICAxMjgsIDgzLCA4MywgODksIDg0LCAxMjgsIDgzLCA4MywgODksIDgyLCA4OCwgMTI4LCA4MywgODMsIDg5LCA4MiwgMTI4LCAKLSAgICA4MywgODMsIDg5LCA4MCwgMTI4LCA4MywgODMsIDg5LCAxMjgsIDgzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4MywgODUsIAotICAgIDg1LCAxMjgsIDgzLCA4MywgODUsIDg0LCAxMjgsIDgzLCA4MywgODUsIDgwLCAxMjgsIDgzLCA4MywgNzksIDg4LCAxMjgsIAotICAgIDgzLCA4MywgNzksIDg0LCAxMjgsIDgzLCA4MywgNzksIDgwLCAxMjgsIDgzLCA4MywgNzksIDc5LCAxMjgsIDgzLCA4MywgCi0gICAgNzksIDEyOCwgODMsIDgzLCA3MywgODgsIDEyOCwgODMsIDgzLCA3MywgODQsIDEyOCwgODMsIDgzLCA3MywgODAsIDEyOCwgCi0gICAgODMsIDgzLCA3MywgNzMsIDEyOCwgODMsIDgzLCA3MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4MCwgMTI4LCAKLSAgICA4MywgODMsIDczLCA2OSwgMTI4LCA4MywgODMsIDczLCAxMjgsIDgzLCA4MywgNzIsIDY5LCAxMjgsIDgzLCA4MywgNjksIAotICAgIDg4LCAxMjgsIDgzLCA4MywgNjksIDgwLCAxMjgsIDgzLCA4MywgNjksIDY5LCAxMjgsIDgzLCA4MywgNjUsIDg4LCAxMjgsIAotICAgIDgzLCA4MywgNjUsIDg1LCAxMjgsIDgzLCA4MywgNjUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDgwLCAxMjgsIDgzLCA4MywgCi0gICAgNjUsIDc4LCA3MSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIAotICAgIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzIsIDczLCA2OSwgCi0gICAgODUsIDg0LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIAotICAgIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAKLSAgICAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIAotICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCAKLSAgICA4NSwgNzYsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgCi0gICAgNjksIDg1LCA3NiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc3LCA3MywgNjksIDg1LCA3NywgCi0gICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCAKLSAgICA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIAotICAgIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCAKLSAgICA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NSwgODIsIDY1LCA2OSwgCi0gICAgNjUsIDEyOCwgODMsIDgzLCA2NSwgNzMsIDEyOCwgODMsIDgzLCA2NSwgNjUsIDEyOCwgODMsIDgzLCA1MSwgMTI4LCA4MywgCi0gICAgODMsIDUwLCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgODEsIDg1LCA3MywgODMsIDIwMCwgODMsIDgxLCA4NSwgNzMsIDgyLCAKLSAgICA4MiwgNjksIDIwNCwgODMsIDgxLCA4NSwgNzMsIDcxLCA3MSwgNzYsIDE5NywgODMsIDgxLCA4NSwgNjUsIDIxMiwgODMsIAotICAgIDgxLCA4NSwgNjUsIDgyLCA2OSwgODMsIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgNjgsIDEyOCwgODMsIDgxLCA4NSwgCi0gICAgNjUsIDgyLCA2OSwgMTI4LCA4MywgODAsIDg3LCA2NSwgMTI4LCA4MywgODAsIDg1LCA3OCwgNzEsIDIxMSwgODMsIDgwLCAKLSAgICA4MiwgNzksIDg1LCA4NCwgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDgzLCA4MCwgODIsIDY5LCA2NywgNzIsIDcxLCA2OSwgODMsIDY1LCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NSwgCi0gICAgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NCwgMTI4LCA4MywgODAsIDc5LCA3OSwgNzgsIDEyOCwgODMsIDgwLCAKLSAgICA3NiwgNzMsIDg0LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzYsIDY1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MywgODAsIAotICAgIDczLCA4MiwgNzMsIDg0LCA4NSwgMjExLCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA3MywgCi0gICAgMjEyLCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA4MywgODAsIDczLCA4MiwgNjUsIDc2LCAxMjgsIDgzLCAKLSAgICA4MCwgNzMsIDgyLCA2NSwgMjA0LCA4MywgODAsIDczLCA2OCwgNjksIDgyLCAyMTcsIDgzLCA4MCwgNzMsIDY3LCA2OSwgCi0gICAgMTI4LCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIDIwNCwgODMsIDgwLCA2OSwgODMsIDc3LCA3MywgNzYsIAotICAgIDIwNywgODMsIDgwLCA2OSwgNjksIDY4LCA2NiwgNzksIDY1LCA4NCwgMTI4LCA4MywgODAsIDY5LCA2OSwgNjcsIDcyLCAKLSAgICAxMjgsIDgzLCA4MCwgNjksIDY5LCA2NywgMjAwLCA4MywgODAsIDY5LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA4MywgODAsIAotICAgIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgCi0gICAgMjEwLCA4MywgODAsIDY5LCA2NSwgNzUsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIDczLCAyMDQsIDgzLCA4MCwgNjUsIDg0LCAKLSAgICA3MiwgNzMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIAotICAgIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODIsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgCi0gICAgNjksIDEyOCwgODMsIDgwLCA2NSwgNzEsIDcyLCA2OSwgODQsIDg0LCA3MywgMTI4LCA4MywgODAsIDY1LCA2OCwgNjksIDgzLCAKLSAgICAxMjgsIDgzLCA4MCwgNjUsIDY4LCAxOTcsIDgzLCA4MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgNjcsIAotICAgIDE5NywgODMsIDgwLCA2NSwgMTI4LCA4MywgNzksIDg5LCAxMjgsIDgzLCA3OSwgODcsIDczLCA3NiwgMjA3LCA4MywgNzksIAotICAgIDg3LCAxMjgsIDgzLCA3OSwgODUsIDg0LCA3MiwgNjksIDgyLCAyMDYsIDgzLCA3OSwgODUsIDg0LCA3MiwgNDUsIDgzLCA3NiwgCi0gICAgNjUsIDg2LCA2OSwgMjE3LCA4MywgNzksIDg1LCA4NCwgMjAwLCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIDgzLCAKLSAgICA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MywgNzksIDg1LCA3OCwgMTk2LCA4MywgNzksIDg1LCA3OCwgNjUsIDgwLCAxMjgsIAotICAgIDgzLCA3OSwgODUsIDEyOCwgODMsIDc5LCA4MywgMTI4LCA4MywgNzksIDgyLCAxOTMsIDgzLCA3OSwgODEsIDEyOCwgODMsIAotICAgIDc5LCA3OSwgMjA2LCA4MywgNzksIDc4LCA3NCwgNjUsIDc3LCAxMjgsIDgzLCA3OSwgNzgsIDcxLCAxMjgsIDgzLCA3OSwgCi0gICAgNzgsIDEyOCwgODMsIDc5LCA3NywgODAsIDY5LCA3OCwgMTk5LCA4MywgNzksIDc3LCAxMjgsIDgzLCA3OSwgNzYsIDczLCAKLSAgICA2OCwgODUsIDgzLCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDIxMSwgODMsIDc5LCA3MiwgMTI4LCA4MywgNzksIAotICAgIDcxLCA2OCwgNzMsIDY1LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OSwgNDUsIDcwLCA4NSwgNzgsIDY3LCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgNzksIDcwLCAyMTIsIAotICAgIDgzLCA3OSwgMTk4LCA4MywgNzksIDY3LCA3MywgNjksIDg0LCA4OSwgMTI4LCA4MywgNzksIDY3LCA2NywgNjksIDIxMCwgCi0gICAgODMsIDc5LCA2NSwgODAsIDEyOCwgODMsIDc5LCA2NSwgMTI4LCA4MywgMjA3LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAKLSAgICA3OCwgMTI4LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAyMDYsIDgzLCA3OCwgNzksIDg3LCA3MCwgNzYsIDY1LCA3NSwgNjksIAotICAgIDEyOCwgODMsIDc4LCA3OSwgODcsIDY2LCA3OSwgNjUsIDgyLCA2OCwgNjksIDgyLCAxMjgsIDgzLCA3OCwgNzksIDg3LCAKLSAgICAxMjgsIDgzLCA3OCwgNzksIDg1LCA4NCwgMTI4LCA4MywgNzgsIDc5LCA4NSwgMjEyLCA4MywgNzgsIDY1LCAyMDgsIDgzLCAKLSAgICA3OCwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDY1LCA3NSwgMTk3LCA4MywgNzgsIDY1LCA3MywgNzYsIDEyOCwgODMsIAotICAgIDc4LCAxOTMsIDgzLCA3NywgNzksIDc1LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgODIsIDc1LCA3MywgNzgsIDE5OSwgCi0gICAgODMsIDc3LCA3MywgNzYsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgNjksIDEyOCwgODMsIDc3LCA2OSwgNjUsIDgyLCAKLSAgICAxMjgsIDgzLCA3NywgNjUsIDgzLCAyMDAsIDgzLCA3NywgNjUsIDc2LCA3NiwgNjksIDIxMCwgODMsIDc3LCA2NSwgNzYsIAotICAgIDc2LCAxMjgsIDgzLCA3NiwgODUsIDgyLCAxMjgsIDgzLCA3NiwgNzksIDg3LCA3NiwgODksIDEyOCwgODMsIDc2LCA3OSwgCi0gICAgMjE1LCA4MywgNzYsIDc5LCA4NiwgNzksIDEyOCwgODMsIDc2LCA3OSwgMjEyLCA4MywgNzYsIDc5LCA4MCwgNzMsIDc4LCAKLSAgICAxOTksIDgzLCA3NiwgNzksIDgwLCA2OSwgMTI4LCA4MywgNzYsIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjgsIAotICAgIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjcsIDY5LCAxMjgsIDgzLCA3NiwgNzMsIDY3LCAxOTcsIDgzLCA3NiwgCi0gICAgNjksIDY5LCA4MCwgMjE3LCA4MywgNzYsIDY5LCA2OSwgODAsIDczLCA3OCwgMTk5LCA4MywgNzYsIDY1LCA4NiwgNzksIDc4LCAKLSAgICA3MywgMTk1LCA4MywgNzYsIDY1LCA4NiwgNjksIDEyOCwgODMsIDc2LCA2NSwgODMsIDcyLCAxMjgsIDgzLCA3NiwgNjUsIAotICAgIDgzLCAyMDAsIDgzLCA3NiwgNjUsIDc4LCA4NCwgNjksIDE5NiwgODMsIDc1LCA4NywgNjUsIDEyOCwgODMsIDc1LCA4NywgCi0gICAgMTI4LCA4MywgNzUsIDg1LCA3NiwgNzYsIDEyOCwgODMsIDc1LCA4NSwgNzYsIDIwNCwgODMsIDc1LCA3NiwgNzMsIDgyLCAKLSAgICA3OSwgMjA2LCA4MywgNzUsIDczLCA3OCwgMTI4LCA4MywgNzUsIDczLCA2OSwgODIsIDEyOCwgODMsIDc1LCAyMDEsIDgzLCAKLSAgICA3NSwgNjksIDg3LCA2OSwgMTk2LCA4MywgNzUsIDY1LCA4NCwgNjksIDEyOCwgODMsIDc1LCAxMjgsIDgzLCA3NCwgNjksIAotICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDg5LCA0NSwgNzAsIDc5LCA4NSwgODIsIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA4OSwgCi0gICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgMjE3LCA4MywgNzMsIDg4LCA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCAKLSAgICA3MiwgMjExLCA4MywgNzMsIDg4LCA4NCwgNzIsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgODMsIAotICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgCi0gICAgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgMjA2LCAKLSAgICA4MywgNzMsIDg4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA4MywgNzMsIDg4LCA0NSwgODMsIDg0LCA4MiwgCi0gICAgNzMsIDc4LCAxOTksIDgzLCA3MywgODgsIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgODMsIDczLCA4OCwgNDUsIDc2LCAKLSAgICA3MywgNzgsIDE5NywgODMsIDczLCAyMTYsIDgzLCA3MywgODQsIDY5LCAxMjgsIDgzLCA3MywgODMsIDY1LCAxMjgsIDgzLCAKLSAgICA3MywgODIsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgCi0gICAgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCAKLSAgICA3MywgNzksIDgzLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgCi0gICAgODUsIDgwLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MiwgNzMsIAotICAgIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgODMsIDczLCA3OSwgODMsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIAotICAgIDgzLCA3MywgNzksIDgzLCA0NSwgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzIsIDczLCAKLSAgICA2OSwgODUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCA3MywgNzksIAotICAgIDgzLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODMsIDczLCA3OSwgMjExLCA4MywgNzMsIDc4LCA3NSwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTEsIAotICAgIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUwLCAxMjgsIDgzLCA3MywgCi0gICAgNzgsIDcxLCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDEyOCwgODMsIDczLCAKLSAgICA3OCwgNzEsIDc2LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA2NSwgNjUsIDg0LCAxMjgsIDgzLCA3MywgNzgsIDE5NywgODMsIAotICAgIDczLCA3OCwgNjgsIDcyLCAyMDEsIDgzLCA3MywgMjA2LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAKLSAgICAxOTYsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDgyLCAxMjgsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDIxMCwgODMsIAotICAgIDczLCA3NywgNjUsIDc4LCA4MywgNzMsIDIxMSwgODMsIDczLCA3NywgNjUsIDc2LCA4NSwgNzgsIDcxLCA4NSwgMjA2LCA4MywgCi0gICAgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDc2LCA4NiwgNjksIDgyLCAxMjgsIDgzLCA3MywgNzYsIDc1LCAxMjgsIDgzLCAKLSAgICA3MywgNzYsIDczLCA4MSwgODUsIDE5MywgODMsIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgNjksIDEyOCwgODMsIAotICAgIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgMTk3LCA4MywgNzMsIDc2LCA2NSwgNTEsIDEyOCwgODMsIDczLCA3NSwgCi0gICAgNzMsIDEyOCwgODMsIDczLCA3NSwgNTAsIDEyOCwgODMsIDczLCA3NSwgMTc4LCA4MywgNzMsIDcxLCA3OCwgODMsIDEyOCwgCi0gICAgODMsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCA3MywgNzEsIDc3LCAxOTMsIDgzLCA3MywgNzEsIDY5LCAyMDQsIDgzLCAKLSAgICA3MywgNzEsIDUyLCAxMjgsIDgzLCA3MywgNzEsIDE4MCwgODMsIDczLCA3MSwgMTI4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCAKLSAgICA4MywgNzMsIDY4LCA2OSwgODcsIDY1LCA4OSwgMjExLCA4MywgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIAotICAgIDczLCA2NywgNzUsIDc2LCA2OSwgMTI4LCA4MywgNzMsIDY2LCAxOTcsIDgzLCAyMDEsIDgzLCA3MiwgODksIDg4LCAxMjgsIAotICAgIDgzLCA3MiwgODksIDg0LCAxMjgsIDgzLCA3MiwgODksIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgMTI4LCA4MywgCi0gICAgNzIsIDg5LCA4MCwgMTI4LCA4MywgNzIsIDg5LCA2OSwgMTI4LCA4MywgNzIsIDg5LCA2NSwgMTI4LCA4MywgNzIsIDg5LCAKLSAgICAxMjgsIDgzLCA3MiwgODcsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgNzksIDEyOCwgODMsIDcyLCA4NywgNzksIAotICAgIDEyOCwgODMsIDcyLCA4NywgNzMsIDczLCAxMjgsIDgzLCA3MiwgODcsIDczLCAxMjgsIDgzLCA3MiwgODcsIDY5LCAxMjgsIAotICAgIDgzLCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDg3LCA2NSwgMTI4LCA4MywgNzIsIDg1LCA4OCwgMTI4LCA4MywgCi0gICAgNzIsIDg1LCA4NSwgMTI4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgODgsIDEyOCwgODMsIDcyLCAKLSAgICA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDgzLCA3MiwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgMTI4LCA4MywgNzIsIDg1LCA3NywgMTI4LCA4MywgNzIsIDg1LCA3MCwgCi0gICAgNzAsIDc2LCAxOTcsIDgzLCA3MiwgODUsIDY5LCA4MSwgMTI4LCA4MywgNzIsIDg1LCA2OSwgNzgsIDgzLCA3MiwgODUsIDY5LCAKLSAgICA4NCwgMTI4LCA4MywgNzIsIDg1LCA2NiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDUwLCAxMjgsIDgzLCA3MiwgODUsIAotICAgIDE3OCwgODMsIDcyLCA4NSwgMTI4LCA4MywgNzIsIDIxMywgODMsIDcyLCA4NCwgNjUsIDgwLCA3MywgNjcsIDEyOCwgODMsIAotICAgIDcyLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA4MiwgNzMsIDc4LCA2OSwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzcsIDgwLCAKLSAgICAxMjgsIDgzLCA3MiwgODIsIDczLCA3MywgMTI4LCA4MywgNzIsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDc5LCA4OCwgMTI4LCAKLSAgICA4MywgNzIsIDc5LCA4NywgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDg1LCA3NiwgNjgsIDY5LCA4MiwgNjksIDE5NiwgODMsIAotICAgIDcyLCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA4MywgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDIxMSwgCi0gICAgODMsIDcyLCA3OSwgODIsIDg0LCA2OSwgNzgsIDY5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDY3LCA2NSwgNzUsIAotICAgIDY5LCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODksIDgyLCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODQsIDg5LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIAotICAgIDg0LCA4NywgNzMsIDcxLCA0NSwgODMsIDc5LCAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCAKLSAgICA0NSwgNzksIDgzLCAyMTEsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzgsIDY1LCA4NSwgCi0gICAgMTk2LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgODMsIDcyLCAKLSAgICA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgODMsIDcyLCA3OSwgCi0gICAgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA2NiwgNzQsIDY1LCA4MiwgNzUsIDY1LCAyMDYsIDgzLCA3MiwgNzksIAotICAgIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNjUsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDgyLCAyMTIsIDgzLCA3MiwgNzksIDgxLCAxMjgsIDgzLCA3MiwgNzksIDIwOSwgODMsIDcyLCA3OSwgODAsIDEyOCwgCi0gICAgODMsIDcyLCA3OSwgNzksIDg0LCA3MywgNzgsIDE5OSwgODMsIDcyLCA3OSwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDc5LCAKLSAgICAxMjgsIDgzLCA3MiwgNzksIDcxLCAyMDEsIDgzLCA3MiwgNzksIDE5OSwgODMsIDcyLCA3OSwgNjksIDEyOCwgODMsIDcyLCAKLSAgICA3OSwgMTk3LCA4MywgNzIsIDc5LCA2NSwgMTI4LCA4MywgNzIsIDc5LCAxMjgsIDgzLCA3MiwgNzMsIDg5LCA4OSwgNjUsIAotICAgIDY1LCA3NiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgMTkzLCA4MywgCi0gICAgNzIsIDczLCA4MiwgMjEyLCA4MywgNzIsIDczLCA4MiwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNzMsIDgyLCAxMjgsIDgzLCAKLSAgICA3MiwgNzMsIDIxMCwgODMsIDcyLCA3MywgODEsIDEyOCwgODMsIDcyLCA3MywgODAsIDEyOCwgODMsIDcyLCA3MywgNzgsIAotICAgIDg0LCAyMDcsIDgzLCA3MiwgNzMsIDc4LCA3MywgNzEsIDEyOCwgODMsIDcyLCA3MywgNzgsIDY4LCAxOTMsIDgzLCA3MiwgCi0gICAgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDc3LCAKLSAgICAxOTMsIDgzLCA3MiwgNzMsIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCA3MywgNzMsIDc4LCAxMjgsIDgzLCAKLSAgICA3MiwgNzMsIDczLCAxMjgsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgODMsIAotICAgIDcyLCA3MywgNjgsIDEyOCwgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDcyLCAxOTMsIAotICAgIDgzLCA3MiwgNjksIDg4LCAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgODgsIDEyOCwgCi0gICAgODMsIDcyLCA2OSwgODUsIDc5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgODQsIDg1LCAxMjgsIDgzLCAKLSAgICA3MiwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgODMsIDcyLCA2OSwgODQsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgMjEyLCA4MywgNzIsIDY5LCA4MywgNzIsIDc2LCA2NSwgNzcsIDEyOCwgODMsIDcyLCA2OSwgCi0gICAgODMsIDcyLCA3MywgNzEsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgMTk5LCA4MywgNzIsIDY5LCA4MywgNzIsIDUwLCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDY5LCA4MSwgNjksIDIwNCwgODMsIDcyLCA2OSwgODAsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDc2LCAxMjgsIDgzLCA3MiwgNjksIDc2LCAyMDQsIAotICAgIDgzLCA3MiwgNjksIDc2LCA3MCwgMTI4LCA4MywgNzIsIDY5LCA3MywgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgCi0gICAgODMsIDcyLCA2OSwgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDY5LCAyMDYsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDgzLCA3MiwgNjksIDQ1LCA3MSwgNzksIAotICAgIDY1LCA4NCwgMTI4LCA4MywgNzIsIDE5NywgODMsIDcyLCA2NywgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDg5LCAxMjgsIAotICAgIDgzLCA3MiwgNjUsIDg4LCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgODYsIDczLCA2NSwgMjA2LCA4MywgNzIsIDY1LCA4NiwgNjksIDE5NiwgODMsIDcyLCA2NSwgODUsIDEyOCwgODMsIDcyLCAKLSAgICA2NSwgODQsIDEyOCwgODMsIDcyLCA2NSwgODIsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCA3MiwgNjUsIAotICAgIDgyLCA4MCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjA4LCA4MywgNzIsIDY1LCA4MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgODIsIDUwLCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAxNzgsIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDgwLCA2OSwgODMsIDEyOCwgODMsIDcyLCA2NSwgODAsIDE5NywgODMsIDcyLCA2NSwgODAsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDIwNiwgODMsIDcyLCA2NSwgCi0gICAgNzcsIDgyLCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIAotICAgIDE5NiwgODMsIDcyLCA2NSwgNjgsIDY5LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgNjUsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgNjgsIDY4LCAxOTMsIDgzLCA3MiwgNjUsIDY4LCAxMjgsIDgzLCA3MiwgNjUsIDE5NiwgODMsIDcyLCA2NSwgNjYsIDU0LCAKLSAgICAxMjgsIDgzLCA3MiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDU0LCAxMjgsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDE3OSwgODMsIDcxLCA4MiwgMTkzLCA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgNjcsIDEyOCwgODMsIDcxLCAKLSAgICA2NSwgMjE1LCA4MywgNzEsIDY1LCAxOTQsIDgzLCA3MSwgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAxOTMsIDgzLCAKLSAgICA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgODgsIDg0LCA2NSwgNzgsIDIxMSwgODMsIDY5LCA4NiwgNjksIAotICAgIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgCi0gICAgNzgsIDg0LCAyMTcsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCAKLSAgICA2OSwgNzgsIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA2OSwgODYsIDY5LCA3OCwgNDUsIAotICAgIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIDIwNiwgODMsIDY5LCA4NSwgODgsIDEyOCwgCi0gICAgODMsIDY5LCA4NSwgNzgsIDg5LCA2NSwgNzcsIDEyOCwgODMsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA4MywgNjksIDg0LCAKLSAgICA3MCwgNzksIDc4LCAxMjgsIDgzLCA2OSwgODMsIDg0LCA2OSwgODIsIDg0LCA3MywgODUsIDIxMSwgODMsIDY5LCA4MywgODEsIAotICAgIDg1LCA3MywgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgODQsIDY5LCAxMjgsIDgzLCA2OSwgODMsIDY1LCA3NywgMTk3LCA4MywgCi0gICAgNjksIDgyLCA4NiwgNzMsIDY3LCAxOTcsIDgzLCA2OSwgODIsIDczLCA3MCwgODMsIDEyOCwgODMsIDY5LCA4MiwgNzMsIDcwLCAKLSAgICAyMTEsIDgzLCA2OSwgODEsIDg1LCA2OSwgNzgsIDY3LCAxOTcsIDgzLCA2OSwgODAsIDg0LCA2OSwgNzcsIDY2LCA2OSwgODIsIAotICAgIDEyOCwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgCi0gICAgNzksIDIxMCwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgzLCA2OSwgNzgsIDg0LCA3MywgMTI4LCA4MywgNjksIDc3LCAKLSAgICA4NSwgNzgsIDY3LCA3MywgMTkzLCA4MywgNjksIDc3LCA3NSwgNjUsIDg0LCA3MiwgMTI4LCA4MywgNjksIDc3LCA3NSwgCi0gICAgMTI4LCA4MywgNjksIDc3LCA3MywgODYsIDc5LCA4NywgNjksIDIwNCwgODMsIDY5LCA3NywgNzMsIDgzLCA3OSwgNzAsIAotICAgIDIxMiwgODMsIDY5LCA3NywgNzMsIDgzLCA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA3NywgCi0gICAgNzMsIDc4LCA3MywgNzcsIDE5MywgODMsIDY5LCA3NywgNzMsIDY4LCA3MywgODIsIDY5LCA2NywgMjEyLCA4MywgNjksIDc3LCAKLSAgICA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA2NywgNzksIDc2LCA3OSwgMjA2LCA4MywgNjksIAotICAgIDc3LCA3MywgNjcsIDczLCA4MiwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODMsIDY5LCA3NywgNzMsIDY3LCA3MywgODIsIDY3LCAKLSAgICA3NiwgMTk3LCA4MywgNjksIDc3LCA3MywgNjYsIDgyLCA2OSwgODYsIDczLCAyMTEsIDgzLCA2OSwgNzcsIDczLCA0NSwgODYsIAotICAgIDc5LCA3MywgNjcsIDY5LCAxOTYsIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTYsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTAsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NywgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA0OCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU2LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUzLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUwLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTUsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTIsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA0OCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTUsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAKLSAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTUsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgCi0gICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA0OCwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIAotICAgIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTIsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU2LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTIsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDksIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAotICAgIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUzLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDU3LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTUsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTUsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTIsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDU0LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU2LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTIsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgCi0gICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUzLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIAotICAgIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDksIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCAKLSAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUzLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDksIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NywgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUwLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUwLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAKLSAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNjksIDE5NiwgODMsIDY5LCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MywgNjksIDczLCA4MywgNzcsIAotICAgIDE5MywgODMsIDY5LCA3MiwgMTI4LCA4MywgNjksIDcxLCA3OSwgNzYsIDEyOCwgODMsIDY5LCA3MSwgNzgsIDc5LCAxMjgsIAotICAgIDgzLCA2OSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDgzLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNjksIDY5LCA3OCwgCisgICAgNzksIDc4LCAxOTksIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDgzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAorICAgIDIxMSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU3LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NiwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTUsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU0LCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTIsIAorICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUxLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MCwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCAKKyAgICA0OSwgNDgsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgCisgICAgMTk3LCA4MywgODQsIDgyLCA3MywgODAsIDY5LCAxMjgsIDgzLCA4NCwgODIsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCAKKyAgICA4MiwgNzMsIDc4LCAxOTksIDgzLCA4NCwgODIsIDczLCA3NSwgNjksIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIAorICAgIDgzLCA4NCwgODIsIDczLCA2OCwgNjksIDEyOCwgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNzYsIDIxNywgODMsIDg0LCA4MiwgCisgICAgNjksIDg0LCA2NywgNzIsIDY5LCAxOTYsIDgzLCA4NCwgODIsIDY5LCA4MywgMjExLCA4MywgODQsIDgyLCA2OSwgNzgsIDcxLCAKKyAgICA4NCwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNjksIDY1LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NywgNjYsIAorICAgIDY5LCA4MiwgODIsIDg5LCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgODUsIDc3LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgCisgICAgNjUsIDg0LCA4NSwgNzcsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg0LCA4NSwgMjA1LCA4MywgODQsIDgyLCA2NSwgODQsIDczLCAKKyAgICA2NSwgMjA2LCA4MywgODQsIDgyLCA2NSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIAorICAgIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgMjEyLCA4MywgODQsIDgyLCA2NSwgCisgICAgNzMsIDcwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MSwgNzEsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCAKKyAgICA3OSwgODYsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgyLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODcsIDY1LCA4NCwgNjcsIAorICAgIDcyLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCA3MSwgCisgICAgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDEyOCwgODMsIDg0LCA3OSwgMjA4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgCisgICAgODMsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgODMsIDg0LCA3MywgNzYsIAorICAgIDIwNCwgODMsIDg0LCA3MywgNzYsIDE5NywgODMsIDg0LCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgODQsIDY5LCA4MCwgCisgICAgMTI4LCA4MywgODQsIDY5LCA3NywgMTI4LCA4MywgODQsIDY5LCA2NSwgNzcsIDczLCA3OCwgMTk5LCA4MywgODQsIDY5LCAKKyAgICA2NSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIDIwNSwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODUsIDEyOCwgODMsIAorICAgIDg0LCA2NSwgODYsIDgyLCA3OSwgODMsIDEyOCwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgMjExLCA4MywgODQsIDY1LCA4NSwgCisgICAgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NCwgODUsIDE5NywgODMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCA4MiwgODMsIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgzLCA4NCwgCisgICAgNjUsIDgyLCAyMTIsIDgzLCA4NCwgNjUsIDgyLCA4MywgMTI4LCA4MywgODQsIDY1LCA4MiwgODIsIDY5LCAxOTYsIDgzLCAKKyAgICA4NCwgNjUsIDgyLCA3NSwgMTI4LCA4MywgODQsIDY1LCA4MiwgMTI4LCA4MywgODQsIDY1LCAyMTAsIDgzLCA4NCwgNjUsIAorICAgIDc4LCA2OCwgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCA2OCwgNjUsIDgyLCAxOTYsIDgzLCA4NCwgCisgICAgNjUsIDc4LCA2OCwgMTI4LCA4MywgODQsIDY1LCA3OCwgMTI4LCA4MywgODQsIDY1LCA3NiwgNzYsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODMsIDg0LCA2NSwgNzAsIDcwLCAxMjgsIDgzLCA4NCwgNjUsIDcwLCAxOTgsIDgzLCA4NCwgNjUsIDY3LCA2NywgCisgICAgNjUsIDg0LCA3OSwgMTI4LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzMsIDgzLCA4MywgNzMsIDc3LCA3OSwgMTI4LCAKKyAgICA4MywgODQsIDUwLCAxMjgsIDgzLCA4MywgODksIDg4LCAxMjgsIDgzLCA4MywgODksIDg0LCAxMjgsIDgzLCA4MywgODksIAorICAgIDgyLCA4OCwgMTI4LCA4MywgODMsIDg5LCA4MiwgMTI4LCA4MywgODMsIDg5LCA4MCwgMTI4LCA4MywgODMsIDg5LCAxMjgsIAorICAgIDgzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4MywgODUsIDg1LCAxMjgsIDgzLCA4MywgODUsIDg0LCAxMjgsIDgzLCA4MywgCisgICAgODUsIDgwLCAxMjgsIDgzLCA4MywgNzksIDg4LCAxMjgsIDgzLCA4MywgNzksIDg0LCAxMjgsIDgzLCA4MywgNzksIDgwLCAKKyAgICAxMjgsIDgzLCA4MywgNzksIDc5LCAxMjgsIDgzLCA4MywgNzksIDEyOCwgODMsIDgzLCA3MywgODgsIDEyOCwgODMsIDgzLCAKKyAgICA3MywgODQsIDEyOCwgODMsIDgzLCA3MywgODAsIDEyOCwgODMsIDgzLCA3MywgNzMsIDEyOCwgODMsIDgzLCA3MywgNjksIAorICAgIDg4LCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4MCwgMTI4LCA4MywgODMsIDczLCA2OSwgMTI4LCA4MywgODMsIDczLCAxMjgsIAorICAgIDgzLCA4MywgNzIsIDY5LCAxMjgsIDgzLCA4MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNjksIDgwLCAxMjgsIDgzLCA4MywgCisgICAgNjksIDY5LCAxMjgsIDgzLCA4MywgNjUsIDg4LCAxMjgsIDgzLCA4MywgNjUsIDg1LCAxMjgsIDgzLCA4MywgNjUsIDg0LCAKKyAgICAxMjgsIDgzLCA4MywgNjUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIAorICAgIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgwLCAKKyAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCAKKyAgICA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgCisgICAgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIAorICAgIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgCisgICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgCisgICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCAKKyAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgODMsIAorICAgIDY1LCA3OCwgNzEsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCAKKyAgICA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDgzLCA2NSwgNzgsIAorICAgIDcxLCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDQ1LCAKKyAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgNzgsIDcxLCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgODMsIDgzLCA2NSwgNzMsIDEyOCwgODMsIDgzLCA2NSwgCisgICAgNjUsIDEyOCwgODMsIDgzLCA1MSwgMTI4LCA4MywgODMsIDUwLCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgODEsIDg1LCA3MywgCisgICAgODMsIDIwMCwgODMsIDgxLCA4NSwgNzMsIDgyLCA4MiwgNjksIDIwNCwgODMsIDgxLCA4NSwgNzMsIDcxLCA3MSwgNzYsIAorICAgIDE5NywgODMsIDgxLCA4NSwgNjUsIDIxMiwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgODMsIDEyOCwgODMsIDgxLCA4NSwgCisgICAgNjUsIDgyLCA2OSwgNjgsIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTI4LCA4MywgODAsIDg3LCA2NSwgMTI4LCAKKyAgICA4MywgODAsIDg1LCA3OCwgNzEsIDIxMSwgODMsIDgwLCA4MiwgNzksIDg1LCA4NCwgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIAorICAgIDcxLCA4MywgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4MCwgODIsIDY5LCA2NywgNzIsIDcxLCA2OSwgCisgICAgODMsIDY1LCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NSwgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDc5LCA3OSwgNzgsIDEyOCwgODMsIDgwLCA3NiwgNzMsIDg0LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzYsIAorICAgIDY1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCA4NSwgMjExLCA4MywgODAsIDczLCA4MiwgCisgICAgNzMsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA3MywgMjEyLCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDczLCA4MiwgNjUsIDc2LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA2NSwgMjA0LCA4MywgODAsIDczLCA2OCwgNjksIAorICAgIDgyLCAyMTcsIDgzLCA4MCwgNzMsIDY3LCA2OSwgMTI4LCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIDIwNCwgCisgICAgODMsIDgwLCA2OSwgODMsIDc3LCA3MywgNzYsIDIwNywgODMsIDgwLCA2OSwgNjksIDY4LCA2NiwgNzksIDY1LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDY5LCA2OSwgNjcsIDcyLCAxMjgsIDgzLCA4MCwgNjksIDY5LCA2NywgMjAwLCA4MywgODAsIDY5LCA2NywgNzMsIAorICAgIDY1LCA3NiwgMTI4LCA4MywgODAsIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgCisgICAgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgMjEwLCA4MywgODAsIDY5LCA2NSwgNzUsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIAorICAgIDczLCAyMDQsIDgzLCA4MCwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNzMsIDc4LCAKKyAgICAxOTksIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODIsIAorICAgIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDEyOCwgODMsIDgwLCA2NSwgNzEsIDcyLCA2OSwgODQsIDg0LCA3MywgCisgICAgMTI4LCA4MywgODAsIDY1LCA2OCwgNjksIDgzLCAxMjgsIDgzLCA4MCwgNjUsIDY4LCAxOTcsIDgzLCA4MCwgNjUsIDY3LCAKKyAgICA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgODMsIDgwLCA2NSwgMTI4LCA4MywgNzksIDg5LCAxMjgsIDgzLCAKKyAgICA3OSwgODcsIDczLCA3NiwgMjA3LCA4MywgNzksIDg3LCAxMjgsIDgzLCA3OSwgODUsIDg0LCA3MiwgNjksIDgyLCAyMDYsIAorICAgIDgzLCA3OSwgODUsIDg0LCA3MiwgNDUsIDgzLCA3NiwgNjUsIDg2LCA2OSwgMjE3LCA4MywgNzksIDg1LCA4NCwgMjAwLCA4MywgCisgICAgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIDgzLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MywgNzksIDg1LCA3OCwgMTk2LCAKKyAgICA4MywgNzksIDg1LCA3OCwgNjUsIDgwLCAxMjgsIDgzLCA3OSwgODUsIDEyOCwgODMsIDc5LCA4MywgMTI4LCA4MywgNzksIAorICAgIDgyLCAxOTMsIDgzLCA3OSwgODEsIDEyOCwgODMsIDc5LCA3OSwgMjA2LCA4MywgNzksIDc4LCA3NCwgNjUsIDc3LCAxMjgsIAorICAgIDgzLCA3OSwgNzgsIDcxLCAxMjgsIDgzLCA3OSwgNzgsIDEyOCwgODMsIDc5LCA3NywgODAsIDY5LCA3OCwgMTk5LCA4MywgCisgICAgNzksIDc3LCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDgzLCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIAorICAgIDIxMSwgODMsIDc5LCA3MiwgMTI4LCA4MywgNzksIDcxLCA2OCwgNzMsIDY1LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA4NywgCisgICAgNjUsIDgyLCA2OSwgNDUsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA3OCwgNjksIAorICAgIDgzLCA4MywgMTI4LCA4MywgNzksIDcwLCAyMTIsIDgzLCA3OSwgMTk4LCA4MywgNzksIDY3LCA3MywgNjksIDg0LCA4OSwgCisgICAgMTI4LCA4MywgNzksIDY3LCA2NywgNjksIDIxMCwgODMsIDc5LCA2NSwgODAsIDEyOCwgODMsIDc5LCA2NSwgMTI4LCA4MywgCisgICAgMjA3LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCA3OCwgMTI4LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAyMDYsIDgzLCAKKyAgICA3OCwgNzksIDg3LCA3MCwgNzYsIDY1LCA3NSwgNjksIDEyOCwgODMsIDc4LCA3OSwgODcsIDY2LCA3OSwgNjUsIDgyLCA2OCwgCisgICAgNjksIDgyLCAxMjgsIDgzLCA3OCwgNzksIDg3LCAxMjgsIDgzLCA3OCwgNzksIDg1LCA4NCwgMTI4LCA4MywgNzgsIDc5LCAKKyAgICA4NSwgMjEyLCA4MywgNzgsIDY1LCAyMDgsIDgzLCA3OCwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDY1LCA3NSwgMTk3LCAKKyAgICA4MywgNzgsIDY1LCA3MywgNzYsIDEyOCwgODMsIDc4LCAxOTMsIDgzLCA3NywgNzksIDc1LCA3MywgNzgsIDE5OSwgODMsIAorICAgIDc3LCA3MywgODIsIDc1LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgNzYsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgCisgICAgNjksIDEyOCwgODMsIDc3LCA2OSwgNjUsIDgyLCAxMjgsIDgzLCA3NywgNjUsIDgzLCAyMDAsIDgzLCA3NywgNjUsIDc2LCAKKyAgICA3NiwgNjksIDIxMCwgODMsIDc3LCA2NSwgNzYsIDc2LCAxMjgsIDgzLCA3NiwgODUsIDgyLCAxMjgsIDgzLCA3NiwgNzksIAorICAgIDg3LCA3NiwgODksIDEyOCwgODMsIDc2LCA3OSwgMjE1LCA4MywgNzYsIDc5LCA4NiwgNzksIDEyOCwgODMsIDc2LCA3OSwgCisgICAgMjEyLCA4MywgNzYsIDc5LCA4MCwgNzMsIDc4LCAxOTksIDgzLCA3NiwgNzksIDgwLCA2OSwgMTI4LCA4MywgNzYsIDczLCAKKyAgICA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjgsIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjcsIDY5LCAxMjgsIAorICAgIDgzLCA3NiwgNzMsIDY3LCAxOTcsIDgzLCA3NiwgNjksIDY5LCA4MCwgMjE3LCA4MywgNzYsIDY5LCA2OSwgODAsIDczLCA3OCwgCisgICAgMTk5LCA4MywgNzYsIDY1LCA4NiwgNzksIDc4LCA3MywgMTk1LCA4MywgNzYsIDY1LCA4NiwgNjksIDEyOCwgODMsIDc2LCAKKyAgICA2NSwgODMsIDcyLCAxMjgsIDgzLCA3NiwgNjUsIDgzLCAyMDAsIDgzLCA3NiwgNjUsIDc4LCA4NCwgNjksIDE5NiwgODMsIAorICAgIDc1LCA4NywgNjUsIDEyOCwgODMsIDc1LCA4NywgMTI4LCA4MywgNzUsIDg1LCA3NiwgNzYsIDEyOCwgODMsIDc1LCA4NSwgCisgICAgNzYsIDIwNCwgODMsIDc1LCA3NiwgNzMsIDgyLCA3OSwgMjA2LCA4MywgNzUsIDczLCA3OCwgMTI4LCA4MywgNzUsIDczLCAKKyAgICA2OSwgODIsIDEyOCwgODMsIDc1LCAyMDEsIDgzLCA3NSwgNjksIDg3LCA2OSwgMTk2LCA4MywgNzUsIDY1LCA4NCwgNjksIAorICAgIDEyOCwgODMsIDc1LCAxMjgsIDgzLCA3NCwgNjksIDEyOCwgODMsIDczLCA4OCwgODQsIDg5LCA0NSwgNzAsIDc5LCA4NSwgCisgICAgODIsIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA4OSwgMTI4LCA4MywgNzMsIDg4LCA4NCwgMjE3LCA4MywgNzMsIDg4LCAKKyAgICA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCA3MiwgMjExLCA4MywgNzMsIDg4LCA4NCwgNzIsIDEyOCwgODMsIAorICAgIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCAKKyAgICA3MiwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIAorICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgMjA2LCA4MywgNzMsIDg4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgCisgICAgMTI4LCA4MywgNzMsIDg4LCA0NSwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDgzLCA3MywgODgsIDQ1LCA4MCwgNjksIDgyLCAKKyAgICA0NSwgNjksIDIwNSwgODMsIDczLCA4OCwgNDUsIDc2LCA3MywgNzgsIDE5NywgODMsIDczLCAyMTYsIDgzLCA3MywgODQsIAorICAgIDY5LCAxMjgsIDgzLCA3MywgODMsIDY1LCAxMjgsIDgzLCA3MywgODIsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDgzLCA3MywgCisgICAgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MywgODMsIAorICAgIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCisgICAgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCAKKyAgICA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgCisgICAgNzgsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCAKKyAgICA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgCisgICAgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDcxLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgCisgICAgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIAorICAgIDEyOCwgODMsIDczLCA3OSwgMjExLCA4MywgNzMsIDc4LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgCisgICAgNzYsIDY5LCA0NSwgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTEsIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIAorICAgIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUwLCAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAKKyAgICAxOTcsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCAxOTcsIDgzLCA3MywgNzgsIAorICAgIDcxLCA2NSwgNjUsIDg0LCAxMjgsIDgzLCA3MywgNzgsIDE5NywgODMsIDczLCA3OCwgNjgsIDcyLCAyMDEsIDgzLCA3MywgCisgICAgMjA2LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDgyLCAKKyAgICAxMjgsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDIxMCwgODMsIDczLCA3NywgNjUsIDc4LCA4MywgNzMsIDIxMSwgODMsIAorICAgIDczLCA3NywgNjUsIDc2LCA4NSwgNzgsIDcxLCA4NSwgMjA2LCA4MywgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDc2LCA4NiwgCisgICAgNjksIDgyLCAxMjgsIDgzLCA3MywgNzYsIDc1LCAxMjgsIDgzLCA3MywgNzYsIDczLCA4MSwgODUsIDE5MywgODMsIDczLCAKKyAgICA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgNjksIDEyOCwgODMsIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgCisgICAgMTk3LCA4MywgNzMsIDc2LCA2NSwgNTEsIDEyOCwgODMsIDczLCA3NSwgNzMsIDEyOCwgODMsIDczLCA3NSwgNTAsIDEyOCwgCisgICAgODMsIDczLCA3NSwgMTc4LCA4MywgNzMsIDcxLCA3OCwgODMsIDEyOCwgODMsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCAKKyAgICA3MywgNzEsIDc3LCAxOTMsIDgzLCA3MywgNzEsIDY5LCAyMDQsIDgzLCA3MywgNzEsIDUyLCAxMjgsIDgzLCA3MywgNzEsIAorICAgIDE4MCwgODMsIDczLCA3MSwgMTI4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCA4MywgNzMsIDY4LCA2OSwgODcsIDY1LCA4OSwgCisgICAgMjExLCA4MywgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIDczLCA2NywgNzUsIDc2LCA2OSwgMTI4LCAKKyAgICA4MywgNzMsIDY2LCAxOTcsIDgzLCAyMDEsIDgzLCA3MiwgODksIDg4LCAxMjgsIDgzLCA3MiwgODksIDg0LCAxMjgsIDgzLCAKKyAgICA3MiwgODksIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgMTI4LCA4MywgNzIsIDg5LCA4MCwgMTI4LCA4MywgNzIsIAorICAgIDg5LCA2OSwgMTI4LCA4MywgNzIsIDg5LCA2NSwgMTI4LCA4MywgNzIsIDg5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCA4OSwgCisgICAgMTI4LCA4MywgNzIsIDg3LCA3OSwgNzksIDEyOCwgODMsIDcyLCA4NywgNzksIDEyOCwgODMsIDcyLCA4NywgNzMsIDczLCAKKyAgICAxMjgsIDgzLCA3MiwgODcsIDczLCAxMjgsIDgzLCA3MiwgODcsIDY5LCAxMjgsIDgzLCA3MiwgODcsIDY1LCA2NSwgMTI4LCAKKyAgICA4MywgNzIsIDg3LCA2NSwgMTI4LCA4MywgNzIsIDg1LCA4OCwgMTI4LCA4MywgNzIsIDg1LCA4NSwgMTI4LCA4MywgNzIsIAorICAgIDg1LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgODgsIDEyOCwgODMsIDcyLCA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgCisgICAgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDgzLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA4MywgNzIsIDg1LCAKKyAgICA3OSwgMTI4LCA4MywgNzIsIDg1LCA3NywgMTI4LCA4MywgNzIsIDg1LCA3MCwgNzAsIDc2LCAxOTcsIDgzLCA3MiwgODUsIAorICAgIDY5LCA4MSwgMTI4LCA4MywgNzIsIDg1LCA2OSwgNzgsIDgzLCA3MiwgODUsIDY5LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA2NiwgCisgICAgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDUwLCAxMjgsIDgzLCA3MiwgODUsIDE3OCwgODMsIDcyLCA4NSwgMTI4LCA4MywgCisgICAgNzIsIDIxMywgODMsIDcyLCA4NCwgNjUsIDgwLCA3MywgNjcsIDEyOCwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODMsIDcyLCAKKyAgICA4MiwgNzMsIDc4LCA2OSwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzcsIDgwLCAxMjgsIDgzLCA3MiwgODIsIDczLCA3MywgCisgICAgMTI4LCA4MywgNzIsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDc5LCA4NywgNjksIDgyLCAKKyAgICAxMjgsIDgzLCA3MiwgNzksIDg1LCA3NiwgNjgsIDY5LCA4MiwgNjksIDE5NiwgODMsIDcyLCA3OSwgODQsIDEyOCwgODMsIAorICAgIDcyLCA3OSwgODIsIDg0LCA4MywgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDIxMSwgODMsIDcyLCA3OSwgODIsIDg0LCA2OSwgCisgICAgNzgsIDY5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDY3LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3MiwgNzksIDgyLCAKKyAgICA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgCisgICAgNzMsIDcxLCA0NSwgODQsIDg5LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODMsIAorICAgIDc5LCAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzksIDgzLCAyMTEsIDgzLCA3MiwgCisgICAgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzgsIDY1LCA4NSwgMTk2LCA4MywgNzIsIDc5LCA4MiwgODQsIAorICAgIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCAKKyAgICA3MywgNzEsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgCisgICAgNzEsIDQ1LCA2NiwgNzQsIDY1LCA4MiwgNzUsIDY1LCAyMDYsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIAorICAgIDcxLCA0NSwgNjUsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCAxMjgsIDgzLCA3MiwgNzksIDgyLCAyMTIsIDgzLCA3MiwgCisgICAgNzksIDgxLCAxMjgsIDgzLCA3MiwgNzksIDIwOSwgODMsIDcyLCA3OSwgODAsIDEyOCwgODMsIDcyLCA3OSwgNzksIDg0LCAKKyAgICA3MywgNzgsIDE5OSwgODMsIDcyLCA3OSwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDc5LCAxMjgsIDgzLCA3MiwgNzksIAorICAgIDcxLCAyMDEsIDgzLCA3MiwgNzksIDE5OSwgODMsIDcyLCA3OSwgNjksIDEyOCwgODMsIDcyLCA3OSwgMTk3LCA4MywgNzIsIAorICAgIDc5LCA2NSwgMTI4LCA4MywgNzIsIDc5LCAxMjgsIDgzLCA3MiwgNzMsIDg5LCA4OSwgNjUsIDY1LCA3NiwgNjUsIDY1LCAKKyAgICAxMjgsIDgzLCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgMTkzLCA4MywgNzIsIDczLCA4MiwgMjEyLCAKKyAgICA4MywgNzIsIDczLCA4MiwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNzMsIDgyLCAxMjgsIDgzLCA3MiwgNzMsIDIxMCwgODMsIAorICAgIDcyLCA3MywgODEsIDEyOCwgODMsIDcyLCA3MywgODAsIDEyOCwgODMsIDcyLCA3MywgNzgsIDg0LCAyMDcsIDgzLCA3MiwgCisgICAgNzMsIDc4LCA3MywgNzEsIDEyOCwgODMsIDcyLCA3MywgNzgsIDY4LCAxOTMsIDgzLCA3MiwgNzMsIDc4LCAxMjgsIDgzLCAKKyAgICA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDc3LCAxOTMsIDgzLCA3MiwgNzMsIAorICAgIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCA3MywgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDczLCAxMjgsIAorICAgIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgODMsIDcyLCA3MywgNjgsIDEyOCwgCisgICAgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDcyLCAxOTMsIDgzLCA3MiwgNjksIDg4LCAKKyAgICAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgODgsIDEyOCwgODMsIDcyLCA2OSwgODUsIAorICAgIDc5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgODQsIDg1LCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgCisgICAgNjksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgODMsIDcyLCA2OSwgODQsIDEyOCwgODMsIDcyLCAKKyAgICA2OSwgMjEyLCA4MywgNzIsIDY5LCA4MywgNzIsIDc2LCA2NSwgNzcsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgNzEsIAorICAgIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgMTk5LCA4MywgNzIsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDgzLCA3MiwgCisgICAgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDY5LCA4MSwgNjksIDIwNCwgODMsIDcyLCA2OSwgODAsIDEyOCwgODMsIDcyLCAKKyAgICA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDc2LCAxMjgsIDgzLCA3MiwgNjksIDc2LCAyMDQsIDgzLCA3MiwgNjksIAorICAgIDc2LCA3MCwgMTI4LCA4MywgNzIsIDY5LCA3MywgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgODMsIDcyLCA2OSwgCisgICAgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCAxMjgsIDgzLCAKKyAgICA3MiwgNjksIDY5LCAyMDYsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDgzLCA3MiwgNjksIDQ1LCA3MSwgNzksIDY1LCA4NCwgCisgICAgMTI4LCA4MywgNzIsIDE5NywgODMsIDcyLCA2NywgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDg5LCAxMjgsIDgzLCA3MiwgCisgICAgNjUsIDg4LCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgODYsIDczLCAKKyAgICA2NSwgMjA2LCA4MywgNzIsIDY1LCA4NiwgNjksIDE5NiwgODMsIDcyLCA2NSwgODUsIDEyOCwgODMsIDcyLCA2NSwgODQsIAorICAgIDEyOCwgODMsIDcyLCA2NSwgODIsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCA3MiwgNjUsIDgyLCA4MCwgCisgICAgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjA4LCA4MywgNzIsIDY1LCA4MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODIsIDUwLCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDgyLCAxNzgsIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDgwLCA2OSwgODMsIDEyOCwgODMsIDcyLCA2NSwgODAsIDE5NywgODMsIDcyLCA2NSwgODAsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDIwNiwgODMsIDcyLCA2NSwgNzcsIDgyLCAKKyAgICA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgCisgICAgODMsIDcyLCA2NSwgNjgsIDY5LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDY4LCAKKyAgICAxOTMsIDgzLCA3MiwgNjUsIDY4LCAxMjgsIDgzLCA3MiwgNjUsIDE5NiwgODMsIDcyLCA2NSwgNjYsIDU0LCAxMjgsIDgzLCAKKyAgICA3MiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDU0LCAxMjgsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDE3OSwgODMsIDcxLCA4MiwgMTkzLCA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgNjcsIDEyOCwgODMsIDcxLCA2NSwgMjE1LCAKKyAgICA4MywgNzEsIDY1LCAxOTQsIDgzLCA3MSwgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAxOTMsIDgzLCA2OSwgODgsIAorICAgIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgODgsIDg0LCA2NSwgNzgsIDIxMSwgODMsIDY5LCA4NiwgNjksIDgyLCA2NSwgCisgICAgNzgsIDY3LCA2OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCAKKyAgICAyMTcsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgNzgsIAorICAgIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA2OSwgODYsIDY5LCA3OCwgNDUsIDg0LCA3MiwgCisgICAgNzMsIDgyLCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIDIwNiwgODMsIDY5LCA4NSwgODgsIDEyOCwgODMsIDY5LCAKKyAgICA4NSwgNzgsIDg5LCA2NSwgNzcsIDEyOCwgODMsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA4MywgNjksIDg0LCA3MCwgNzksIAorICAgIDc4LCAxMjgsIDgzLCA2OSwgODMsIDg0LCA2OSwgODIsIDg0LCA3MywgODUsIDIxMSwgODMsIDY5LCA4MywgODEsIDg1LCA3MywgCisgICAgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgODQsIDY5LCAxMjgsIDgzLCA2OSwgODMsIDY1LCA3NywgMTk3LCA4MywgNjksIDgyLCAKKyAgICA4NiwgNzMsIDY3LCAxOTcsIDgzLCA2OSwgODIsIDczLCA3MCwgODMsIDEyOCwgODMsIDY5LCA4MiwgNzMsIDcwLCAyMTEsIAorICAgIDgzLCA2OSwgODEsIDg1LCA2OSwgNzgsIDY3LCAxOTcsIDgzLCA2OSwgODAsIDg0LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgCisgICAgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgNzksIAorICAgIDIxMCwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgzLCA2OSwgNzgsIDg0LCA3MywgMTI4LCA4MywgNjksIDc3LCA4NSwgCisgICAgNzgsIDY3LCA3MywgMTkzLCA4MywgNjksIDc3LCA3NSwgNjUsIDg0LCA3MiwgMTI4LCA4MywgNjksIDc3LCA3NSwgMTI4LCAKKyAgICA4MywgNjksIDc3LCA3MywgODYsIDc5LCA4NywgNjksIDIwNCwgODMsIDY5LCA3NywgNzMsIDgzLCA3OSwgNzAsIDIxMiwgODMsIAorICAgIDY5LCA3NywgNzMsIDgzLCA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA3NywgNzMsIDc4LCAKKyAgICA3MywgNzcsIDE5MywgODMsIDY5LCA3NywgNzMsIDY4LCA3MywgODIsIDY5LCA2NywgMjEyLCA4MywgNjksIDc3LCA3MywgNjcsIAorICAgIDc5LCA3NiwgNzksIDc4LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA2NywgNzksIDc2LCA3OSwgMjA2LCA4MywgNjksIDc3LCA3MywgCisgICAgNjcsIDczLCA4MiwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODMsIDY5LCA3NywgNzMsIDY3LCA3MywgODIsIDY3LCA3NiwgMTk3LCAKKyAgICA4MywgNjksIDc3LCA3MywgNjYsIDgyLCA2OSwgODYsIDczLCAyMTEsIDgzLCA2OSwgNzcsIDczLCA0NSwgODYsIDc5LCA3MywgCisgICAgNjcsIDY5LCAxOTYsIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU2LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUzLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUwLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTIsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNDksIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NywgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA0OCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU2LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTcsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTQsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCAKKyAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTUsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgCisgICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA0OCwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIAorICAgIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTIsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA0OCwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU2LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTIsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNDksIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU2LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTAsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUzLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDksIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUzLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIAorICAgIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA0OCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTUsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTIsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU2LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTIsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgCisgICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU0LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU2LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDU0LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIAorICAgIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNDksIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAKKyAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUzLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDksIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NywgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUwLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NywgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUwLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAKKyAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgCisgICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA0OCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNjksIDE5NiwgODMsIDY5LCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MywgNjksIDczLCA4MywgNzcsIDE5MywgCisgICAgODMsIDY5LCA3MiwgMTI4LCA4MywgNjksIDcxLCA3OSwgNzYsIDEyOCwgODMsIDY5LCA3MSwgNzgsIDc5LCAxMjgsIDgzLCAKKyAgICA2OSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDgzLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNjksIDY5LCA3OCwgCiAgICAgMTI4LCA4MywgNjksIDY5LCAyMDYsIDgzLCA2OSwgNjksIDY4LCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNjksIDY5LCAKICAgICA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCA3MywgMjA0LCA4MywgNjksIDY3LCA4NCwgNzksIDgyLCAxMjgsIDgzLCA2OSwgNjcsIAogICAgIDg0LCA3MywgNzksIDc4LCAxMjgsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgODMsIDY5LCA2NywgODIsIDY5LCA4NCwgCkBAIC0xMjkyLDI3MzEgKzEyOTMsMjczMyBAQAogICAgIDY3LCAyMDMsIDgyLCA3OSwgNjcsIDEyOCwgODIsIDc5LCA2NiwgNjUsIDg0LCAxMjgsIDgyLCA3OSwgNjUsIDgzLCA4NCwgCiAgICAgNjksIDE5NiwgODIsIDc5LCA2NSwgODIsIDEyOCwgODIsIDc5LCA2NSwgMTI4LCA4MiwgNzgsIDg5LCA3MywgNzgsIDE5OSwgCiAgICAgODIsIDc4LCA3OSwgNzksIDc4LCAxMjgsIDgyLCA3OCwgNzksIDc5LCAyMDYsIDgyLCA3OCwgNjUsIDIwNSwgODIsIDc3LCAKLSAgICA4NCwgMTI4LCA4MiwgNzYsIDc5LCAxMjgsIDgyLCA3NiwgNzcsIDEyOCwgODIsIDc2LCA2OSwgMTI4LCA4MiwgNzQsIDY5LCAKLSAgICAyMTEsIDgyLCA3NCwgNjksIDEyOCwgODIsIDc0LCAxOTcsIDgyLCA3MywgODYsIDY5LCA4MiwgMTI4LCA4MiwgNzMsIDg0LCAKLSAgICA4NSwgNjUsIDc2LCAxMjgsIDgyLCA3MywgODQsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgyLCA3MywgODQsIDgzLCA3MywgCi0gICAgMTI4LCA4MiwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDczLCA4MywgNzIsIDEyOCwgODIsIDczLCA4MiwgNjUsIDEyOCwgCi0gICAgODIsIDczLCA4MCwgMTI4LCA4MiwgNzMsIDc4LCA3MSwgMjExLCA4MiwgNzMsIDc4LCA3MCwgNzksIDgyLCA5MCwgNjUsIDc4LCAKLSAgICA2OCwgNzksIDEyOCwgODIsIDczLCAyMDYsIDgyLCA3MywgNzcsIDcxLCA2NiwgNjUsIDEyOCwgODIsIDczLCA3NSwgODIsIAotICAgIDczLCA3NSwgMTI4LCA4MiwgNzMsIDcxLCA4NiwgNjksIDY4LCA3MywgMTk1LCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCA2NSwgCi0gICAgODIsIDY4LCA4MywgMTI4LCA4MiwgNzMsIDcxLCA3MiwgODQsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCAKLSAgICA0NSwgODQsIDc5LCA0NSwgNzYsIDY5LCA3MCwgMjEyLCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIAotICAgIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCAKLSAgICA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgCi0gICAgODQsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIDc4LCA2OCwgNjksIDE5NiwgODIsIDczLCAKLSAgICA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgCi0gICAgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgODMsIDczLCAKLSAgICA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgCi0gICAgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIAotICAgIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCAKLSAgICA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCi0gICAgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIAotICAgIDg0LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCAKLSAgICA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgCi0gICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKLSAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgCi0gICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKLSAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAotICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgCi0gICAgODAsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCAKLSAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIAotICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCi0gICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIAotICAgIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgCi0gICAgODUsIDc2LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgyLCA3MywgNjksIDg1LCAyMDQsIDgyLCA3MywgNjksIDc2LCAKLSAgICAxMjgsIDgyLCA3MywgNjksIDY5LCAxMjgsIDgyLCA3MywgNjcsIDY5LCA3NywgMTI4LCA4MiwgNzMsIDY3LCA2OSwgMTI4LCAKLSAgICA4MiwgNzMsIDY3LCAxOTcsIDgyLCA3MywgNjYsIDY2LCA3OSwgNzgsIDEyOCwgODIsIDczLCA2NSwgMjA0LCA4MiwgNzIsIAotICAgIDc5LCA4NCwgNzMsIDE5NSwgODIsIDcyLCA3OSwgMTI4LCA4MiwgNzIsIDIwNywgODIsIDcyLCA2NSwgMTI4LCA4MiwgNzEsIAotICAgIDg5LCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MiwgNzEsIDg5LCA2NSwgNzgsIDEyOCwgODIsIDcxLCA4OSwgMTkzLCA4MiwgCi0gICAgNjksIDg2LCA3OSwgNzYsIDg2LCA3MywgNzgsIDE5OSwgODIsIDY5LCA4NiwgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgODIsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDgyLCA2OSwgODYsIDczLCA2NSwgMTI4LCA4MiwgNjksIDg2LCA2OSwgCi0gICAgODIsIDgzLCA2OSwgNjgsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDE5NiwgODIsIDY5LCA4NiwgNjksIDgyLCAKLSAgICA4MywgMTk3LCA4MiwgNjksIDg1LCA4OCwgMTI4LCA4MiwgNjksIDg1LCAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgNzgsIAotICAgIDEyOCwgODIsIDY5LCA4NCwgODUsIDgyLCAyMDYsIDgyLCA2OSwgODQsIDgyLCA3OSwgNzAsIDc2LCA2OSwgMjE2LCA4MiwgCi0gICAgNjksIDg0LCA4MiwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNjksIDg0LCA3OSwgODIsIDg0LCAxMjgsIDgyLCA2OSwgODMsIDg1LCAKLSAgICA4MCwgNzMsIDc4LCA4NSwgODMsIDEyOCwgODIsIDY5LCA4MywgODQsIDgyLCA3OSwgNzksIDc3LCAxMjgsIDgyLCA2OSwgODMsIAotICAgIDg0LCA4MiwgNzMsIDY3LCA4NCwgNjksIDE5NiwgODIsIDY5LCA4MywgODQsIDEyOCwgODIsIDY5LCA4MywgODAsIDc5LCA3OCwgCi0gICAgODMsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgNzYsIDg1LCAKLSAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDgzLCA3MywgODMsIDg0LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIAotICAgIDgzLCA3MywgNjgsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDIwMCwgODIsIDY5LCA4MiwgNjksIDc4LCA3MSwgCi0gICAgNzEsIDY1LCA3OCwgMTI4LCA4MiwgNjksIDgyLCA2OSwgNzUsIDY1LCA3OCwgMTI4LCA4MiwgNjksIDgwLCA4MiwgNjksIDgzLCAKLSAgICA2OSwgNzgsIDg0LCAxMjgsIDgyLCA2OSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3NywgNjksIDc4LCAyMTIsIDgyLCA2OSwgODAsIAotICAgIDcyLCAxMjgsIDgyLCA2OSwgODAsIDY5LCA4NCwgNzMsIDg0LCA3MywgNzksIDIwNiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgCi0gICAgNjksIDE5NiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA2OSwgNjUsIDIxMiwgODIsIDY5LCAKLSAgICA4MCwgNjUsIDg5LCA2NSwgMTI4LCA4MiwgNjksIDgwLCA2NSwgMTI4LCA4MiwgNjksIDgwLCAxOTMsIDgyLCA2OSwgNzgsIAotICAgIDg0LCA3OSwgNzEsIDY5LCA3OCwgMTI4LCA4MiwgNjksIDc4LCAxMjgsIDgyLCA2OSwgMjA2LCA4MiwgNjksIDc3LCA4NSwgCi0gICAgMTI4LCA4MiwgNjksIDc3LCA2OSwgNjgsIDg5LCAxMjgsIDgyLCA2OSwgNzYsIDczLCA3MSwgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA4MiwgNjksIDc2LCA3MywgNjksIDg2LCA2OSwgMTk2LCA4MiwgNjksIDc2LCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA4MiwgNjksIAotICAgIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgCi0gICAgNjksIDc2LCA2NSwgNjUsIDEyOCwgODIsIDY5LCA3NCwgNjUsIDc4LCAxOTksIDgyLCA2OSwgNzMsIDE5NiwgODIsIDY5LCAKLSAgICA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MiwgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUxLCAxMjgsIAotICAgIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTAsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDEyOCwgCi0gICAgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgMjExLCA4MiwgNjksIDcxLCA3MywgODMsIDg0LCA2OSwgODIsIDY5LCAxOTYsIDgyLCAKLSAgICA2OSwgNzEsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzEsIDczLCA2NSwgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNzEsIAotICAgIDczLCA2NSwgMTI4LCA4MiwgNjksIDcwLCA3OSwgODIsIDc3LCA2OSwgMTk2LCA4MiwgNjksIDcwLCA2OSwgODIsIDY5LCA3OCwgCi0gICAgNjcsIDE5NywgODIsIDY5LCA2OCwgODUsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCAKLSAgICA2NywgODksIDY3LCA3NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgyLCA2OSwgNjcsIAotICAgIDg0LCA3MywgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAKLSAgICAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgNjksIDEyOCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIAotICAgIDc2LCAxOTcsIDgyLCA2OSwgNjcsIDgyLCA2OSwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDY3LCA3OSwgCi0gICAgODIsIDY4LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgNjksIDgyLCAxMjgsIDgyLCA2OSwgNjcsIDc5LCAKLSAgICA4MiwgMTk2LCA4MiwgNjksIDY3LCA2OSwgODAsIDg0LCA3MywgODYsIDE5NywgODIsIDY5LCA2NywgNjksIDczLCA4NiwgNjksIAotICAgIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIDgyLCA0NSwgNTAsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgCi0gICAgODIsIDEyOCwgODIsIDY5LCA2NSwgNzIsIDc3LCA4NSwgNzUsIDEyOCwgODIsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgyLCAKLSAgICA2OCwgMjA3LCA4MiwgNjgsIDY5LCAyMDQsIDgyLCA2NiwgNjUsIDgzLCAxOTMsIDgyLCA2NSwgODksIDgzLCAxMjgsIDgyLCAKLSAgICA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDczLCA3OSwgMTI4LCA4MiwgNjUsIDg0LCA3MiwgNjUsIAotICAgIDEyOCwgODIsIDY1LCA4NCwgNzIsIDE5MywgODIsIDY1LCA4NCwgNjUsIDEyOCwgODIsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIAotICAgIDgzLCA4NywgNjUsIDY4LCA3MywgMTI4LCA4MiwgNjUsIDgzLCA3OSwgODUsIDIwNCwgODIsIDY1LCA4MywgNzIsIDY1LCAKLSAgICAxMjgsIDgyLCA2NSwgODEsIDEyOCwgODIsIDY1LCA4MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODIsIDY1LCA3OCwgNzEsIAotICAgIDE5NywgODIsIDY1LCA3OCwgNjUsIDEyOCwgODIsIDY1LCA3OCwgMTI4LCA4MiwgNjUsIDc3LCAyMTEsIDgyLCA2NSwgNzcsIAotICAgIDY2LCA2NSwgODQsIDEyOCwgODIsIDY1LCA3NSwgNzIsIDY1LCA3OCwgNzEsIDEyOCwgODIsIDY1LCA3NSwgNjUsIDY1LCA4MiwgCi0gICAgNjUsIDY1LCA3OCwgODMsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY1LCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNjUsIDczLCAKLSAgICA4MywgNjksIDE5NiwgODIsIDY1LCA3MywgNzgsIDY2LCA3OSwgODcsIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgODksIAotICAgIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgMjE3LCA4MiwgNjUsIDczLCA3NiwgMTI4LCA4MiwgNjUsIDczLCA2OCwgCi0gICAgMjA3LCA4MiwgNjUsIDczLCA2OCwgNjUsIDEyOCwgODIsIDY1LCA3MiwgNzcsIDY1LCA4NCwgODUsIDc2LCA3NiwgNjUsIAotICAgIDIwMCwgODIsIDY1LCA3MiwgMTI4LCA4MiwgNjUsIDcwLCA2OSwgMTI4LCA4MiwgNjUsIDY5LCA3NywgMTI4LCA4MiwgNjUsIAotICAgIDY4LCA3MywgNzksIDY1LCA2NywgODQsIDczLCA4NiwgMTk3LCA4MiwgNjUsIDY4LCA3MywgNzksIDEyOCwgODIsIDY1LCA2OCwgCi0gICAgNzMsIDIwNywgODIsIDY1LCA2OCwgMjAxLCA4MiwgNjUsIDY4LCAxMjgsIDgyLCA2NSwgMTk2LCA4MiwgNjUsIDY3LCA4MSwgCi0gICAgODUsIDY5LCAyMTIsIDgyLCA2NSwgNjcsIDczLCA3OCwgNzEsIDEyOCwgODIsIDY1LCA2NiwgNjYsIDczLCA4NCwgMTI4LCAKLSAgICA4MiwgNjUsIDY2LCA2NiwgNzMsIDIxMiwgODIsIDY1LCA2NiwgMTI4LCA4MiwgNjUsIDY1LCA3MywgMTI4LCA4MiwgNjUsIAotICAgIDUxLCAxMjgsIDgyLCA2NSwgNTAsIDEyOCwgODIsIDY1LCA0NSwgNTAsIDEyOCwgODIsIDQ4LCA1MCwgNTcsIDEyOCwgODIsIAotICAgIDQ4LCA1MCwgNTYsIDEyOCwgODIsIDQ4LCA1MCwgNTUsIDEyOCwgODIsIDQ4LCA1MCwgNTQsIDEyOCwgODIsIDQ4LCA1MCwgCi0gICAgNTMsIDEyOCwgODIsIDQ4LCA1MCwgNTIsIDEyOCwgODIsIDQ4LCA1MCwgNTEsIDEyOCwgODIsIDQ4LCA1MCwgNTAsIDEyOCwgCi0gICAgODIsIDQ4LCA1MCwgNDksIDEyOCwgODIsIDQ4LCA1MCwgNDgsIDEyOCwgODIsIDQ4LCA0OSwgNTcsIDEyOCwgODIsIDQ4LCAKLSAgICA0OSwgNTYsIDEyOCwgODIsIDQ4LCA0OSwgNTUsIDEyOCwgODIsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDgyLCA0OCwgNDksIAotICAgIDU0LCAxMjgsIDgyLCA0OCwgNDksIDUzLCAxMjgsIDgyLCA0OCwgNDksIDUyLCAxMjgsIDgyLCA0OCwgNDksIDUxLCAxMjgsIAotICAgIDgyLCA0OCwgNDksIDUwLCAxMjgsIDgyLCA0OCwgNDksIDQ5LCAxMjgsIDgyLCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA4MiwgCi0gICAgNDgsIDQ5LCA0OCwgMTI4LCA4MiwgNDgsIDQ4LCA1NywgMTI4LCA4MiwgNDgsIDQ4LCA1NiwgMTI4LCA4MiwgNDgsIDQ4LCAKLSAgICA1NSwgMTI4LCA4MiwgNDgsIDQ4LCA1NCwgMTI4LCA4MiwgNDgsIDQ4LCA1MywgMTI4LCA4MiwgNDgsIDQ4LCA1MiwgMTI4LCAKLSAgICA4MiwgNDgsIDQ4LCA1MSwgNjYsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDgyLCA0OCwgNDgsIDUxLCAxMjgsIAotICAgIDgyLCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MCwgMTI4LCA4MiwgNDgsIDQ4LCA0OSwgMTI4LCA4MiwgCi0gICAgNDUsIDY3LCA4MiwgNjksIDE5NywgODEsIDg5LCA4OCwgMTI4LCA4MSwgODksIDg1LCAxMjgsIDgxLCA4OSwgODQsIDEyOCwgCi0gICAgODEsIDg5LCA4MiwgODgsIDEyOCwgODEsIDg5LCA4MiwgMTI4LCA4MSwgODksIDgwLCAxMjgsIDgxLCA4OSwgNzksIDEyOCwgCi0gICAgODEsIDg5LCA3MywgMTI4LCA4MSwgODksIDY5LCA2OSwgMTI4LCA4MSwgODksIDY5LCAxMjgsIDgxLCA4OSwgNjUsIDY1LCAKLSAgICAxMjgsIDgxLCA4OSwgNjUsIDEyOCwgODEsIDg5LCAxMjgsIDgxLCA4NywgNzMsIDEyOCwgODEsIDg3LCA2OSwgNjksIDEyOCwgCi0gICAgODEsIDg3LCA2OSwgMTI4LCA4MSwgODcsIDY1LCA2NSwgMTI4LCA4MSwgODcsIDY1LCAxMjgsIDgxLCA4NSwgODgsIDEyOCwgCi0gICAgODEsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg1LCAxMjgsIDgxLCA4NSwgODQsIDEyOCwgCi0gICAgODEsIDg1LCA4MywgNzIsIDgzLCA3MiwgNjUsIDg5LCA2NSwgMTI4LCA4MSwgODUsIDgyLCA4OCwgMTI4LCA4MSwgODUsIDgyLCAKLSAgICAxMjgsIDgxLCA4NSwgODAsIDEyOCwgODEsIDg1LCA3OSwgODgsIDEyOCwgODEsIDg1LCA3OSwgODQsIDE5NywgODEsIDg1LCAKLSAgICA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNzksIDg0LCAxMjgsIDgxLCA4NSwgNzksIDgwLCAxMjgsIAotICAgIDgxLCA4NSwgNzksIDEyOCwgODEsIDg1LCA3NSwgMTI4LCA4MSwgODUsIDczLCA3OCwgODQsIDY5LCA4MywgODMsIDY5LCA3OCwgCi0gICAgNjcsIDY5LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2OSwgODMsIDczLCA3NywgMTkzLCA4MSwgODUsIDczLCAKLSAgICA3OCwgNjcsIDg1LCA3OCwgODgsIDEyOCwgODEsIDg1LCA3MywgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDgxLCA4NSwgNzMsIAotICAgIDc2LCA3NiwgMTI4LCA4MSwgODUsIDczLCA2NywgMjAzLCA4MSwgODUsIDczLCAxMjgsIDgxLCA4NSwgNzAsIDEyOCwgODEsIAotICAgIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCA2OSwgMTk2LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDIwNiwgODEsIDg1LCA2OSwgNjksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDY5LCAKLSAgICAyMDYsIDgxLCA4NSwgNjksIDEyOCwgODEsIDg1LCA2NiwgODUsIDg0LCA4MywgMTI4LCA4MSwgODUsIDY1LCA4NCwgNjksIAotICAgIDgyLCA3OCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCA4MywgMTI4LCA4MSwgODUsIDY1LCA4MiwgCi0gICAgODQsIDY5LCA4MiwgMjExLCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCAKLSAgICAyMTAsIDgxLCA4NSwgNjUsIDc4LCA4NCwgNzMsIDg0LCAyMTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgODUsIDgwLCA3NiwgCi0gICAgMTk3LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgODQsIDEyOCwgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgNzgsIAotICAgIDIxMiwgODEsIDg1LCA2NSwgNjgsIDEyOCwgODEsIDg1LCA2NSwgMTk2LCA4MSwgODUsIDY1LCAxMjgsIDgxLCA4NSwgMTI4LCAKLSAgICA4MSwgMjA4LCA4MSwgNzksIDg4LCAxMjgsIDgxLCA3OSwgODQsIDEyOCwgODEsIDc5LCA4MCwgNzIsIDEyOCwgODEsIDc5LCAKLSAgICA4MCwgNjUsIDEyOCwgODEsIDc5LCA4MCwgMTI4LCA4MSwgNzksIDc5LCAxMjgsIDgxLCA3OSwgMjA3LCA4MSwgNzksIDcwLCAKLSAgICAxMjgsIDgxLCA3OSwgMTk4LCA4MSwgNzksIDY1LCAxMjgsIDgxLCA3OSwgMTI4LCA4MSwgNzgsIDEyOCwgODEsIDczLCA4OCwgCi0gICAgMTI4LCA4MSwgNzMsIDg0LCA4MywgNjUsIDEyOCwgODEsIDczLCA4NCwgMTI4LCA4MSwgNzMsIDgwLCAxMjgsIDgxLCA3MywgCi0gICAgNzMsIDEyOCwgODEsIDczLCA2OSwgODgsIDEyOCwgODEsIDczLCA2OSwgODQsIDEyOCwgODEsIDczLCA2OSwgODAsIDEyOCwgCi0gICAgODEsIDczLCA2OSwgMTI4LCA4MSwgNzMsIDEyOCwgODEsIDcyLCA4NywgNzMsIDEyOCwgODEsIDcyLCA4NywgNjksIDY5LCAKLSAgICAxMjgsIDgxLCA3MiwgODcsIDY5LCAxMjgsIDgxLCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgMTI4LCAKLSAgICA4MSwgNzIsIDg1LCAxMjgsIDgxLCA3MiwgNzksIDEyOCwgODEsIDcyLCA3MywgMTI4LCA4MSwgNzIsIDY5LCA2OSwgMTI4LCAKLSAgICA4MSwgNzIsIDY5LCAxMjgsIDgxLCA3MiwgNjUsIDY1LCAxMjgsIDgxLCA3MiwgNjUsIDEyOCwgODEsIDcxLCA2NSwgMTI4LCAKLSAgICA4MSwgNjksIDg0LCA2NSwgNzgsIDY1LCAxMjgsIDgxLCA2OSwgNjksIDEyOCwgODEsIDY5LCAxMjgsIDgxLCA2NSwgODUsIAotICAgIDEyOCwgODEsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDgxLCA2NSwgODIsIDc4LCA2OSwgMjE3LCA4MSwgNjUsIDgyLCAxMjgsIAotICAgIDgxLCA2NSwgODEsIDEyOCwgODEsIDY1LCA4MCwgNzIsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCA4MywgMTI4LCA4MSwgCi0gICAgNjUsIDc3LCA2NSwgODQsIDIxMSwgODEsIDY1LCA3NiwgMTkzLCA4MSwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIAotICAgIDEyOCwgODEsIDY1LCA3MywgMTI4LCA4MSwgNjUsIDcwLCAxMjgsIDgxLCA2NSwgMTk4LCA4MSwgNjUsIDY4LCA3NywgNjUsIAotICAgIDEyOCwgODEsIDY1LCA2NSwgNzMsIDEyOCwgODEsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDgxLCA2NSwgNjUsIDcwLCAxMjgsIAotICAgIDgxLCA0OCwgNDgsIDU1LCAxMjgsIDgxLCA0OCwgNDgsIDU0LCAxMjgsIDgxLCA0OCwgNDgsIDUzLCAxMjgsIDgxLCA0OCwgCi0gICAgNDgsIDUyLCAxMjgsIDgxLCA0OCwgNDgsIDUxLCAxMjgsIDgxLCA0OCwgNDgsIDUwLCAxMjgsIDgxLCA0OCwgNDgsIDQ5LCAKLSAgICAxMjgsIDgwLCA5MCwgMTI4LCA4MCwgODksIDg4LCAxMjgsIDgwLCA4OSwgODQsIDEyOCwgODAsIDg5LCA4MiwgODgsIDEyOCwgCi0gICAgODAsIDg5LCA4MiwgMTI4LCA4MCwgODksIDgwLCAxMjgsIDgwLCA4OSwgMTI4LCA4MCwgODcsIDc5LCA4OSwgMTI4LCA4MCwgCi0gICAgODcsIDc5LCA3OSwgMTI4LCA4MCwgODcsIDc5LCAxMjgsIDgwLCA4NywgMjA3LCA4MCwgODcsIDczLCA3MywgMTI4LCA4MCwgCi0gICAgODcsIDczLCAxMjgsIDgwLCA4NywgNjksIDY5LCAxMjgsIDgwLCA4NywgNjksIDEyOCwgODAsIDg3LCA2NSwgNjUsIDEyOCwgCi0gICAgODAsIDg3LCAxMjgsIDgwLCA4NiwgMTI4LCA4MCwgODUsIDg4LCAxMjgsIDgwLCA4NSwgODUsIDg0LCAxMjgsIDgwLCA4NSwgCi0gICAgODUsIDEyOCwgODAsIDg1LCA4NCwgODIsIDY5LCA3MCwgNjUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDg0LCAKLSAgICAxMjgsIDgwLCA4NSwgMjEyLCA4MCwgODUsIDgzLCA3MiwgODAsIDczLCA3OCwgMTI4LCA4MCwgODUsIDgzLCA3MiwgODAsIAotICAgIDczLCA3NSwgNjUsIDEyOCwgODAsIDg1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MCwgODUsIDgyLCA4OCwgMTI4LCA4MCwgCi0gICAgODUsIDgyLCA4MywgNjksIDEyOCwgODAsIDg1LCA4MiwgODAsIDc2LCAxOTcsIDgwLCA4NSwgODIsIDc4LCA2NSwgNzcsIDY1LCAKLSAgICAxMjgsIDgwLCA4NSwgODIsIDczLCA4NCwgODksIDEyOCwgODAsIDg1LCA4MiwgNzMsIDcwLCA4OSwgMTI4LCA4MCwgODUsIAotICAgIDgyLCAxMjgsIDgwLCA4NSwgODEsIDEyOCwgODAsIDg1LCA4MCwgMTI4LCA4MCwgODUsIDc5LCA4OCwgMTI4LCA4MCwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA4MCwgODUsIDc5LCAxMjgsIDgwLCA4NSwgNzgsIDcxLCA2NSwgNjUsIDc3LCAxMjgsIDgwLCA4NSwgCi0gICAgNzgsIDcxLCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDc4LCAKLSAgICA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODUsIDc3LCA4MCwgMTI4LCA4MCwgODUsIDc3LCAxMjgsIAotICAgIDgwLCA4NSwgNjksIDEyOCwgODAsIDg1LCA2NiwgNzYsIDczLCAxOTUsIDgwLCA4NSwgNjUsIDgxLCAxMjgsIDgwLCA4NSwgCi0gICAgNjUsIDY5LCAxMjgsIDgwLCA4NSwgNTAsIDEyOCwgODAsIDg1LCA0OSwgMTI4LCA4MCwgODUsIDEyOCwgODAsIDg0LCA3MiwgCi0gICAgNjUsIDcyLCAxOTMsIDgwLCA4NCwgNjksIDEyOCwgODAsIDgzLCA3MywgNzYsIDIwMSwgODAsIDgzLCA3MywgNzAsIDczLCAKLSAgICA4MywgODQsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgCi0gICAgNzksIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIAotICAgIDgzLCA4NCwgNzksIDIwNiwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3NiwgODksIDcxLCA3MywgODMsIDc3LCAKLSAgICA2NSwgMTI4LCA4MCwgODMsIDczLCAxMjgsIDgwLCA4MywgMTI4LCA4MCwgODIsIDc5LCA4NiwgNjksIDEyOCwgODAsIDgyLCAKLSAgICA3OSwgODQsIDc5LCA4NiwgNjUsIDgyLCA4OSwgMjExLCA4MCwgODIsIDc5LCA4NCwgNzksIDIxMSwgODAsIDgyLCA3OSwgODQsIAotICAgIDY5LCA2NywgODQsIDY5LCAxOTYsIDgwLCA4MiwgNzksIDgzLCA3MSwgNjksIDcxLCA4MiwgNjUsIDc3LCA3NywgNjksIDc4LCAKLSAgICA3MywgMTI4LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODAsIDgyLCA3OSwgODAsIAotICAgIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDgyLCA3OSwgODAsIDY5LCA4MiwgODQsIDIxNywgODAsIDgyLCA3OSwgCi0gICAgODAsIDY5LCA3NiwgNzYsIDY5LCAyMTAsIDgwLCA4MiwgNzksIDc5LCA3MCwgMTI4LCA4MCwgODIsIDc5LCA3NiwgNzksIDc4LCAKLSAgICA3MSwgNjksIDE5NiwgODAsIDgyLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTk3LCA4MCwgODIsIDc5LCA3NCwgNjksIAotICAgIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgODIsIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgCi0gICAgODIsIDc5LCA3MSwgODIsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgODIsIDc5LCAKLSAgICA3MCwgNzksIDg1LCA3OCwgNjgsIDEyOCwgODAsIDgyLCA3OSwgNjgsIDg1LCA2NywgODQsIDEyOCwgODAsIDgyLCA3OSwgNjgsIAotICAgIDg1LCA2NywgMjEyLCA4MCwgODIsIDczLCA4NiwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDczLCA4NiwgNjUsIDg0LCAKLSAgICAxOTcsIDgwLCA4MiwgNzMsIDg2LCA2NSwgNjcsIDIxNywgODAsIDgyLCA3MywgODMsIDcyLCA4NCwgNzIsIDY1LCA3NywgNjUsIAotICAgIDg0LCA4MiwgMTkzLCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgCi0gICAgODIsIDczLCA3OCwgMjEyLCA4MCwgODIsIDczLCA3OCwgNjcsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3MywgNzcsIDY5LCAKLSAgICAxMjgsIDgwLCA4MiwgNzMsIDc3LCAxOTcsIDgwLCA4MiwgNjksIDg2LCA3MywgNzksIDg1LCAyMTEsIDgwLCA4MiwgNjksIAotICAgIDgzLCA2OSwgODQsIDEyOCwgODAsIDgyLCA2OSwgODMsIDY5LCA3OCwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgCi0gICAgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MCwgNzksIDc4LCA2OCwgNjksIAotICAgIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA3OCwgNzUsIDcyLCA2NSwgMTI4LCA4MCwgODIsIDY5LCA3MCwgCi0gICAgNjUsIDY3LCAxOTcsIDgwLCA4MiwgNjksIDY3LCA3MywgODAsIDczLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDY5LCAKLSAgICA2NywgNjksIDY4LCA3MywgNzgsIDE5OSwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDgzLCAxMjgsIDgwLCA4MiwgNjksIAotICAgIDY3LCA2OSwgNjgsIDY5LCAyMTEsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAxOTYsIDgwLCA4MiwgNjksIDY3LCA2OSwgCi0gICAgNjgsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDE5NywgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIDczLCAKLSAgICAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCAyMDEsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgODksIAotICAgIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIDc5LCAyMTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgCi0gICAgNzgsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgODUsIDc5LCAyMDYsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCAKLSAgICA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgMjAxLCA4MCwgODIsIDY1LCA3NywgMTI4LCA4MCwgODIsIAotICAgIDY1LCAyMDUsIDgwLCA4MiwgMTI4LCA4MCwgODAsIDg2LCAxMjgsIDgwLCA4MCwgNzcsIDEyOCwgODAsIDgwLCA2NSwgMTI4LCAKLSAgICA4MCwgNzksIDg5LCAxMjgsIDgwLCA3OSwgODgsIDEyOCwgODAsIDc5LCA4NywgNjksIDgyLCAyMTEsIDgwLCA3OSwgODcsIAotICAgIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCAKLSAgICAxMjgsIDgwLCA3OSwgODUsIDc4LCAxOTYsIDgwLCA3OSwgODUsIDc2LCA4NCwgODIsIDIxNywgODAsIDc5LCA4NSwgNjcsIAotICAgIDcyLCAxMjgsIDgwLCA3OSwgODQsIDY1LCA4NCwgNzksIDEyOCwgODAsIDc5LCA4NCwgNjUsIDY2LCA3NiwgMTk3LCA4MCwgCi0gICAgNzksIDIxMiwgODAsIDc5LCA4MywgODQsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA3OSwgODMsIDg0LCAKLSAgICA2NiwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNzksIDgzLCA4NCwgMTI4LCA4MCwgNzksIAotICAgIDgzLCAyMTIsIDgwLCA3OSwgODMsIDgzLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgCi0gICAgNjcsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA4MiwgODIsIDY5LCA2NywgODQsIDg1LCAyMTEsIDgwLCA3OSwgODAsIDgwLCAKLSAgICA2OSwgODIsIDEyOCwgODAsIDc5LCA4MCwgMTI4LCA4MCwgNzksIDIwOCwgODAsIDc5LCA3OSwgNjgsIDc2LCA2OSwgMTI4LCAKLSAgICA4MCwgNzksIDc5LCAxMjgsIDgwLCA3OSwgNzgsIDY4LCA3OSwgMTI4LCA4MCwgNzksIDIwNiwgODAsIDc5LCA3NywgNzcsIAotICAgIDY5LCA2OSwgMTI4LCA4MCwgNzksIDc3LCA3NywgNjksIDE5NywgODAsIDc5LCA3NiwgNzMsIDgzLCA3MiwgMTI4LCA4MCwgCi0gICAgNzksIDc2LCA3MywgNjcsIDE5NywgODAsIDc5LCA3NiwgMjAxLCA4MCwgNzksIDc2LCA2OSwgMTI4LCA4MCwgNzksIDc2LCAKLSAgICAxOTcsIDgwLCA3OSwgNzUsIDgyLCA4OSwgODQsIDczLCA2OSwgMTI4LCA4MCwgNzksIDc1LCA3OSwgNzQsIDczLCAxMjgsIAotICAgIDgwLCA3OSwgNzMsIDc4LCA4NCwgMjExLCA4MCwgNzksIDczLCA3OCwgODQsIDc5LCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDgyLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNjksIDE5NiwgODAsIDc5LCA3MywgNzgsIDg0LCAxMjgsIDgwLCAKLSAgICA3OSwgNzMsIDc4LCAyMTIsIDgwLCA3OSwgNjksIDg0LCA4MiwgMjE3LCA4MCwgNzksIDY5LCA4NCwgNzMsIDE5NSwgODAsIAotICAgIDc5LCA2OCwgNjUsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA2NSwgMTI4LCA4MCwgNzksIDEyOCwgODAsIDIwNywgODAsIAotICAgIDc4LCA2OSwgODUsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgwLCA3NiwgODUsIDg0LCA3OSwgMTI4LCA4MCwgNzYsIDg1LCA4MywgCi0gICAgNDUsIDc3LCA3MywgNzgsIDg1LCAyMTEsIDgwLCA3NiwgODUsIDgzLCAxMjgsIDgwLCA3NiwgODUsIDgyLCA2NSwgNzYsIAotICAgIDEyOCwgODAsIDc2LCA4NSwgNzcsIDY5LCAxOTYsIDgwLCA3NiwgODUsIDc3LCAxMjgsIDgwLCA3NiwgODUsIDc1LCAxMjgsIAotICAgIDgwLCA3NiwgODUsIDcxLCAxMjgsIDgwLCA3NiwgODUsIDEyOCwgODAsIDc2LCA3OSwgODcsIDEyOCwgODAsIDc2LCA3OSwgCi0gICAgODAsIDcyLCA4NSwgMTI4LCA4MCwgNzYsIDY5LCA4NCwgNzIsIDgyLCA3OSwgNzgsIDEyOCwgODAsIDc2LCA2OCwgMTI4LCAKLSAgICA4MCwgNzYsIDY1LCA4OSwgNzMsIDc4LCAxOTksIDgwLCA3NiwgNjUsIDgzLCA4NCwgNzMsIDY3LCA4MywgMTI4LCA4MCwgNzYsIAotICAgIDY1LCA3OCwgNjksIDEyOCwgODAsIDc2LCA2NSwgNzgsIDE5NywgODAsIDc2LCA2NSwgNzgsIDY3LCAyMDMsIDgwLCA3NiwgCi0gICAgNjUsIDc1LCAxMjgsIDgwLCA3NiwgNjUsIDcxLCA3MywgNzksIDIxMSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3MiwgNzksIDc2LCAKLSAgICA2OCwgNjksIDIxMCwgODAsIDc2LCA2NSwgNjcsIDE5NywgODAsIDc2LCA2NSwgMTI4LCA4MCwgNzMsIDkwLCA5MCwgNzMsIAotICAgIDY3LCA2NSwgODQsIDc5LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA2NSwgMTI4LCA4MCwgNzMsIDg4LCAxMjgsIDgwLCA3MywgCi0gICAgODcsIDgyLCAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgNzUsIDEyOCwgODAsIDczLCA4NCwgNjcsIDcyLCAKLSAgICA3MCwgNzksIDgyLCAyMDMsIDgwLCA3MywgODQsIDEyOCwgODAsIDczLCA4MywgODQsIDc5LCA3NiwgMTI4LCA4MCwgNzMsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA3MiwgMTI4LCA4MCwgNzMsIDgzLCA2NywgNjksIDgzLCAxMjgsIDgwLCA3MywgODIsIDczLCA3MSwgCi0gICAgMTI4LCA4MCwgNzMsIDgyLCA3MywgMTk5LCA4MCwgNzMsIDgyLCA3MywgNjksIDY5LCA3OCwgMTI4LCA4MCwgNzMsIDgwLCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgwLCA3MywgODAsIDY1LCA2OSwgNzcsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA4MCwgNzMsIAotICAgIDgwLCA2NSwgNjksIDc3LCA2NiwgNjUsIDEyOCwgODAsIDczLCA4MCwgMTI4LCA4MCwgNzMsIDc4LCA4NywgNzIsIDY5LCA2OSwgCi0gICAgMjA0LCA4MCwgNzMsIDc4LCA2OSwgNjUsIDgwLCA4MCwgNzYsIDY5LCAxMjgsIDgwLCA3MywgNzgsIDE5NywgODAsIDczLCAKLSAgICA3OCwgNjUsIDgyLCA2NiwgNzksIDgyLCA2NSwgODMsIDEyOCwgODAsIDczLCA3NiwgNzYsIDEyOCwgODAsIDczLCA3NiwgCi0gICAgMTk3LCA4MCwgNzMsIDc2LCA2NywgODIsIDc5LCAyMTUsIDgwLCA3MywgNzUsIDg1LCA4MiwgODUsIDEyOCwgODAsIDczLCAKLSAgICA3NSwgNzksIDEyOCwgODAsIDczLCA3MSwgMTI4LCA4MCwgNzMsIDE5OSwgODAsIDczLCA2OSwgODgsIDEyOCwgODAsIDczLCAKLSAgICA2OSwgODUsIDgwLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgCi0gICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIDczLCA2OSwgCi0gICAgODUsIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIAotICAgIDczLCA2OSwgODUsIDc2LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIAotICAgIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAKLSAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDgwLCA3MywgNjksIAotICAgIDg1LCAyMDgsIDgwLCA3MywgNjksIDg0LCAxMjgsIDgwLCA3MywgNjksIDgwLCAxMjgsIDgwLCA3MywgNjksIDY5LCA4NCwgCi0gICAgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODEsIDEyOCwgODAsIDczLCA2OSwgNjcsIDY5LCAxMjgsIDgwLCA3MywgNjksIDEyOCwgCi0gICAgODAsIDczLCA2NywgNzUsIDY5LCA4NCwgMTI4LCA4MCwgNzMsIDY3LCA3NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgODUsIDg0LCAKLSAgICA3OSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA3NywgMTkzLCA4MCwgNzMsIDY1LCA3OCwgNzksIDEyOCwgODAsIAotICAgIDIwMSwgODAsIDcyLCA4NywgNjUsIDEyOCwgODAsIDcyLCA4NSwgODQsIDcyLCA2NSwgNzksIDEyOCwgODAsIDcyLCA4NSwgCi0gICAgMjEwLCA4MCwgNzIsIDg1LCA3OCwgNzEsIDEyOCwgODAsIDcyLCA4MiwgNjUsIDgzLCA2OSwgMTI4LCA4MCwgNzIsIDc5LCAKLSAgICA3OCwgNjksIDgzLCAxMjgsIDgwLCA3MiwgNzksIDY5LCA3OCwgNzMsIDY3LCA3MywgNjUsIDIwNiwgODAsIDcyLCA3OSwgNjUsIAotICAgIDEyOCwgODAsIDcyLCA3OSwgMTI4LCA4MCwgNzIsIDIwNywgODAsIDcyLCA3OCwgNjUsIDY5LCAyMDMsIDgwLCA3MiwgNzMsIAotICAgIDc4LCA4NCwgNzIsIDg1LCAxMjgsIDgwLCA3MiwgNzMsIDc2LCA3OSwgODMsIDc5LCA4MCwgNzIsIDY5LCA4MiwgMjExLCA4MCwgCi0gICAgNzIsIDczLCA3NiwgNzMsIDgwLCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODQsIAotICAgIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4MywgNzMsIDc5LCAKLSAgICA4MywgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzIsIAotICAgIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAKLSAgICAyMDAsIDgwLCA3MiwgNzMsIDEyOCwgODAsIDcyLCAyMDEsIDgwLCA3MiwgNjksIDY5LCAxMjgsIDgwLCA3MiwgNjksIDEyOCwgCi0gICAgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk4LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTQsIDgwLCA3MiwgNjUsIDgyLCAKLSAgICA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgODAsIDcyLCA2NSwgODIsIDEyOCwgODAsIDcyLCA2NSwgNzgsIDEyOCwgODAsIAotICAgIDcyLCA2NSwgNzcsIDEyOCwgODAsIDcyLCA2NSwgNzMsIDgzLCA4NCwgNzksIDIxMSwgODAsIDcyLCA2NSwgNzEsIDgzLCA0NSwgCi0gICAgODAsIDE5MywgODAsIDcyLCA2NSwgNjUsIDgyLCA3NSwgNjUsIDY1LCAxMjgsIDgwLCA3MiwgNjUsIDY1LCAxMjgsIDgwLCAKLSAgICA3MiwgNjUsIDEyOCwgODAsIDcxLCAxMjgsIDgwLCA3MCwgMTI4LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA4MCwgNjksIDg1LCAKLSAgICA4NCwgNjUsIDY5LCAxMjgsIDgwLCA2OSwgODUsIDg0LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgODQsIDc5LCA3NSwgNzksIAotICAgIDg1LCA3MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzMsIDEyOCwgODAsIDY5LCA4NCwgCi0gICAgNjUsIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDc2LCA3NiwgNjksIDE5NiwgODAsIDY5LCA4MywgNzksIAotICAgIDEyOCwgODAsIDY5LCA4MywgMjA3LCA4MCwgNjksIDgzLCA3MiwgNTAsIDEyOCwgODAsIDY5LCA4MywgNjksIDg0LCAxOTMsIAotICAgIDgwLCA2OSwgMjExLCA4MCwgNjksIDgyLCA4NCwgNzIsIDIwNywgODAsIDY5LCA4MiwgODMsIDgwLCA2OSwgNjcsIDg0LCA3MywgCi0gICAgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIAotICAgIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCAyMDYsIDgwLCA2OSwgODIsIDgzLCA3MywgNjUsIDIwNiwgODAsIDY5LCA4MiwgCi0gICAgODMsIDY5LCA4NiwgNjksIDgyLCA3MywgNzgsIDE5OSwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIAotICAgIDc2LCA2NSwgODIsIDEyOCwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MCwgCi0gICAgNjksIDgyLCA3NywgNzMsIDg0LCA4NCwgNjksIDE5NiwgODAsIDY5LCA4MiwgNzcsIDY1LCA3OCwgNjksIDc4LCAyMTIsIDgwLCAKLSAgICA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCA3MywgMTI4LCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgCi0gICAgNzcsIDY5LCA3OCwgMjAxLCA4MCwgNjksIDgyLCA3MCwgNzksIDgyLCA3NywgNzMsIDc4LCAxOTksIDgwLCA2OSwgODIsIDcwLCAKLSAgICA2OSwgNjcsIDg0LCA4NSwgMjA1LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIDEyOCwgODAsIDY5LCA4MiwgNzAsIAotICAgIDY5LCA2NywgODQsIDE5MywgODAsIDY5LCA4MiwgNjcsIDg1LCA4MywgODMsIDczLCA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgCi0gICAgNjcsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgwLCA2OSwgODQsIDEyOCwgODAsIDY5LCA4MCwgNjksIDIxMiwgODAsIDY5LCAKLSAgICA3OSwgODIsIDg0LCAyMDAsIDgwLCA2OSwgNzksIDgwLCA3NiwgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA4MywgNjksIAotICAgIDc3LCA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDcxLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgCi0gICAgNzEsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA4MywgODUsIDEyOCwgODAsIDY5LCA3OCwgODMsIDczLCA4NiwgMTk3LCAKLSAgICA4MCwgNjksIDc4LCA3OCwgMjE3LCA4MCwgNjksIDc4LCA3MywgNzIsIDczLCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA4NSwgNzMsIAotICAgIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA3NSwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNzgsIDY5LCA4NCwgODIsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA2NywgNzMsIDc2LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAKLSAgICA3OCwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgMjA2LCA4MCwgNjksIDczLCA4NCwgNzIsIDEyOCwgODAsIAotICAgIDY5LCA3MiwgNjksIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCAyMDAsIDgwLCA2OSwgNzIsIDEyOCwgODAsIDY5LCAyMDAsIAotICAgIDgwLCA2OSwgNjksIDkwLCA3MywgMTI4LCA4MCwgNjksIDY5LCA4MywgNzIsIDczLCAxMjgsIDgwLCA2OSwgNjksIDgwLCAKLSAgICAxMjgsIDgwLCA2OSwgNjksIDc3LCAxMjgsIDgwLCA2OSwgNjksIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgODIsIAotICAgIDczLCA2NSwgNzgsIDgzLCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDgyLCA3MywgNjUsIDc4LCAxMjgsIDgwLCA2OSwgCi0gICAgNjgsIDY5LCA4MywgODQsIDY1LCA3NiwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNjksIDY4LCAKLSAgICA2NSwgMjA0LCA4MCwgNjksIDY1LCA2NywgNzIsIDEyOCwgODAsIDY5LCA2NSwgNjcsIDY5LCAxMjgsIDgwLCA2OSwgNjUsIAotICAgIDY3LCAxOTcsIDgwLCA2OCwgNzAsIDEyOCwgODAsIDY4LCAxMjgsIDgwLCA2NywgMTI4LCA4MCwgNjUsIDkwLCA2OSwgODIsIAotICAgIDEyOCwgODAsIDY1LCA4OSwgNjksIDgyLCA3OSwgNzUsIDEyOCwgODAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgCi0gICAgODAsIDY1LCA4OSwgMTI4LCA4MCwgNjUsIDg4LCAxMjgsIDgwLCA2NSwgODcsIDc4LCAxMjgsIDgwLCA2NSwgMjE1LCA4MCwgCi0gICAgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODAsIDY1LCA4NSwgMTI4LCA4MCwgNjUsIDg0LCA4NCwgNjksIDgyLCAKLSAgICA3OCwgMTI4LCA4MCwgNjUsIDg0LCA3MiwgNjUsIDc3LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDg0LCAyMDAsIAotICAgIDgwLCA2NSwgODQsIDY1LCA3NSwgMTI4LCA4MCwgNjUsIDg0LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA4NCwgMTI4LCA4MCwgCi0gICAgNjUsIDgzLCA4NSwgODEsIDEyOCwgODAsIDY1LCA4MywgODMsIDgwLCA3OSwgODIsIDIxMiwgODAsIDY1LCA4MywgODMsIDczLCAKLSAgICA4NiwgNjksIDQ1LCA4MCwgODUsIDc2LCA3NiwgNDUsIDg1LCA4MCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgCi0gICAgNjUsIDgzLCA4MywgNzMsIDg2LCA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA3OSwgCi0gICAgODUsIDg0LCA4MCwgODUsIDIxMiwgODAsIDY1LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDgzLCA3MiwgNjUsIDY5LCAKLSAgICAxMjgsIDgwLCA2NSwgODMsIDY5LCA4MSwgMTI4LCA4MCwgNjUsIDgzLCA2NSwgNzgsIDcxLCA2NSwgMjA2LCA4MCwgNjUsIAotICAgIDgyLCA4NSwgNzcsIDEyOCwgODAsIDY1LCA4MiwgODQsIDIxNywgODAsIDY1LCA4MiwgODQsIDc4LCA2OSwgODIsIDgzLCA3MiwgCi0gICAgNzMsIDIwOCwgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIAotICAgIDY5LCAxOTYsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIDIwNCwgODAsIDY1LCA4MiwgODQsIDcyLCA3MywgNjUsIDIwNiwgCi0gICAgODAsIDY1LCA4MiwgMjEyLCA4MCwgNjUsIDgyLCA3MywgNjcsIDcyLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDgzLCAKLSAgICA4NCwgNzMsIDcxLCA3NywgNjksIDc4LCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgMTI4LCA4MCwgNjUsIAotICAgIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgODMsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCAKLSAgICA4MywgNzMsIDIxMSwgODAsIDY1LCA4MiwgNjUsIDgwLCA3MiwgODIsIDY1LCA4MywgMTk3LCA4MCwgNjUsIDgyLCA2NSwgNzYsIAotICAgIDc2LCA2OSwgNzYsIDc5LCA3MSwgODIsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDEyOCwgCi0gICAgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDIwNCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIAotICAgIDczLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAyMDEsIDgwLCA2NSwgODIsIDY1LCA3NSwgCi0gICAgNjUsIDc2LCA2OSwgODMsIDc3LCAxOTMsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDc5LCA4MywgMTI4LCAKLSAgICA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgMjAwLCA4MCwgNjUsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgODAsIDg5LCA4MiwgODUsIDgzLCAKLSAgICAxMjgsIDgwLCA2NSwgODAsIDY5LCA4MiwgNjcsIDc2LCA3MywgODAsIDEyOCwgODAsIDY1LCA4MCwgNjksIDIxMCwgODAsIAotICAgIDY1LCA4MCwgMTI4LCA4MCwgNjUsIDIwOCwgODAsIDY1LCAyMDcsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAxMjgsIAotICAgIDgwLCA2NSwgNzgsIDg5LCA3MywgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2OSwgNjcsIDY5LCA3NSwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA4OSwgNjUsIDc4LCA3MSwgNzEsIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDgyLCA2NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc4LCA4NCwgNzMsIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgCi0gICAgODAsIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzgsIDcxLCA3OSwgNzgsIDY1LCA3OCwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDg3LCA3MywgODMsIDY1LCA2OCwgMTI4LCAKLSAgICA4MCwgNjUsIDc4LCA3MSwgODIsIDY1LCA3OCwgNzEsIDc1LCA2OSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc5LCA3NiwgCi0gICAgNjUsIDg0LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzYsIDY1LCAKLSAgICA4OSwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNjUsIAotICAgIDg0LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3MiwgODUsIDc2LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA2OSwgODUsIDc2LCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OCwgMTkzLCA4MCwgNjUsIDc4LCAKLSAgICA2NSwgNjksIDc2LCA2NSwgNjksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA3OCwgNzEsIAotICAgIDc1LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA3NywgODUsIDY4LCA4MCwgNzksIDY4LCAxMjgsIDgwLCA2NSwgNzcsIDgzLCA3MiwgCi0gICAgNjUsIDY5LCAxMjgsIDgwLCA2NSwgNzcsIDgwLCA3MiwgODksIDc2LCA3MywgNjUsIDIwNiwgODAsIDY1LCA3NywgNzMsIDc4LCAKLSAgICA3MSwgNzUsIDY1LCA3NiwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgNzgsIAotICAgIDY5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3NywgNjUsIDY4LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjUsIDY5LCA3MiwgCi0gICAgMTI4LCA4MCwgNjUsIDc2LCA4NSwgODQsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc5LCA2NywgNzIsIDc1LCA2NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc2LCAyMDUsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODcsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODMsIAotICAgIDEyOCwgODAsIDY1LCA3NiwgNjksIDg0LCA4NCwgNjksIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg1LCA3OCwgMTk5LCA4MCwgCi0gICAgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIDkwLCA2OSwgMTk2LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIAotICAgIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgMjA0LCA4MCwgNjUsIDc1LCA4MCwgCi0gICAgNjUsIDIwMywgODAsIDY1LCA3MywgODksIDY1LCA3OCwgNzgsIDc5LCA3MywgMTI4LCA4MCwgNjUsIDczLCA4MiwgODQsIDcyLCAKLSAgICA4MiwgNjUsIDEyOCwgODAsIDY1LCA3MywgODIsIDY5LCAxOTYsIDgwLCA2NSwgNzMsIDEyOCwgODAsIDY1LCA3MiwgNzYsIAotICAgIDY1LCA4NiwgMjAxLCA4MCwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgNzEsIDY5LCA4MiwgMTI4LCA4MCwgNjUsIDcxLCAxOTcsIAotICAgIDgwLCA2NSwgNjgsIDc3LCAxOTMsIDgwLCA2NSwgNjgsIDY4LCA3MywgNzgsIDE5OSwgODAsIDY1LCA2OCwgMTkzLCA4MCwgCi0gICAgNjUsIDY4LCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA2NSwgNzEsIDY5LCAKLSAgICAxMjgsIDgwLCA2NSwgNjUsIDg0LCA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODAsIAotICAgIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDY1LCA3MywgMTI4LCA4MCwgCi0gICAgNjUsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDgwLCA2NSwgNjUsIDEyOCwgODAsIDUwLCAxMjgsIDgwLCAKLSAgICA0OCwgNDksIDQ5LCAxMjgsIDgwLCA0OCwgNDksIDQ4LCAxMjgsIDgwLCA0OCwgNDgsIDU3LCAxMjgsIDgwLCA0OCwgNDgsIAotICAgIDU2LCAxMjgsIDgwLCA0OCwgNDgsIDU1LCAxMjgsIDgwLCA0OCwgNDgsIDU0LCAxMjgsIDgwLCA0OCwgNDgsIDUzLCAxMjgsIAotICAgIDgwLCA0OCwgNDgsIDUyLCAxMjgsIDgwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgMTI4LCA4MCwgCi0gICAgNDgsIDQ4LCA1MCwgMTI4LCA4MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDEyOCwgNzksIDg5LCAKLSAgICA4MiwgNjUsIDc4LCA3MywgODMsIDc3LCAxOTMsIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDg4LCA3MywgNjUsIAotICAgIDEyOCwgNzksIDg4LCA3MywgMTkzLCA3OSwgODgsIDY5LCA3MywgNjUsIDIwMSwgNzksIDg4LCA2OSwgNzMsIDE5MywgNzksIAotICAgIDg2LCA2OSwgODIsIDgyLCA3MywgNjgsIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNzksIDc4LCAxOTksIDc5LCA4NiwgCi0gICAgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4OSwgMTI4LCA3OSwgODYsIDY5LCAKLSAgICA4MiwgNzYsIDY1LCA4MCwgODAsIDczLCA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA3MywgNjgsIDEyOCwgNzksIAotICAgIDg2LCA2OSwgODIsIDY2LCA2NSwgODIsIDEyOCwgNzksIDg2LCA2NSwgMjA0LCA3OSwgODYsIDEyOCwgNzksIDg1LCA4NCwgCi0gICAgNzYsIDczLCA3OCwgNjksIDE5NiwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg1LCA4NCwgNjksIAotICAgIDIxMCwgNzksIDg1LCA4NCwgNjYsIDc5LCAyMTYsIDc5LCA4NSwgNzgsIDc1LCA3MywgMTkzLCA3OSwgODUsIDc4LCA2NywgCi0gICAgNjksIDEyOCwgNzksIDg1LCA3OCwgNjcsIDE5NywgNzksIDg0LCA4NSwgMTI4LCA3OSwgODQsIDg0LCA2NSwgODYsIDE5MywgCi0gICAgNzksIDg0LCA4NCwgMTI4LCA3OSwgODQsIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDc5LCA4NCwgNzIsIDY1LCA3NiwgMTI4LCAKLSAgICA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAxOTMsIDc5LCA4MywgNjcsIDEyOCwgNzksIDgyLCA4NCwgNzIsIDc5LCA3MSwgNzksIAotICAgIDc4LCA2NSwgMjA0LCA3OSwgODIsIDg0LCA3MiwgNzksIDY4LCA3OSwgMjE2LCA3OSwgODIsIDc4LCA2NSwgODQsIDE5NywgCi0gICAgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCAyMTIsIDc5LCAKLSAgICA4MiwgNzUsIDcyLCA3OSwgMjA2LCA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIDczLCA3MSwgNzMsIAotICAgIDc4LCAxMjgsIDc5LCA4MiwgNjksIDQ1LCA1MCwgMTI4LCA3OSwgODIsIDY4LCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgCi0gICAgNjgsIDY5LCAyMTAsIDc5LCA4MiwgNjcsIDcyLCA3MywgNjgsIDEyOCwgNzksIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDc5LCAKLSAgICA4MCwgODQsIDczLCA3OSwgMjA2LCA3OSwgODAsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc5LCA4MCwgODAsIDgyLCA2OSwgODMsIAotICAgIDgzLCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgCi0gICAgODAsIDc5LCA4MywgNzMsIDc4LCAxOTksIDc5LCA4MCwgODAsIDc5LCA4MywgNjksIDEyOCwgNzksIDgwLCA3MiwgNzMsIDg1LCAKLSAgICA2NywgNzIsIDg1LCA4MywgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzksIDgwLCA2OSwgODIsIAotICAgIDY1LCA4NCwgNzksIDIxMCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzMsIDc4LCAxOTksIDc5LCA4MCwgNjksIDc4LCA3MywgCi0gICAgNzgsIDE5OSwgNzksIDgwLCA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIDc5LCA4NSwgODQsIDc2LCAKLSAgICA3MywgNzgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIAotICAgIDc4LCA0NSwgNjcsIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNzksIDc5LCAKLSAgICA5MCwgNjksIDEyOCwgNzksIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDc5LCA4NSwgMTI4LCA3OSwgNzksIAotICAgIDc3LCA4NSwgMTI4LCA3OSwgNzksIDY5LCAxMjgsIDc5LCA3OSwgNjYsIDc5LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCi0gICAgNzksIDc4LCA4NSwgMTI4LCA3OSwgNzgsIDgzLCA4NSwgMTI4LCA3OSwgNzgsIDc4LCAxMjgsIDc5LCA3OCwgNzUsIDY1LCAKLSAgICA4MiwgMTI4LCA3OSwgNzgsIDY5LCA4MywgNjksIDc2LCA3MCwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgODcsIDY1LCAyMTcsIAotICAgIDc5LCA3OCwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA3NiwgNzMsIDc4LCAKLSAgICAxOTcsIDc5LCA3OCwgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDc5LCA3OCwgNjUsIDgwLCAxMjgsIDc5LCA3NywgNzMsIAotICAgIDgzLCA4MywgNzMsIDc5LCAyMDYsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc5LCA3NywgNzMsIDY3LCA4MiwgCi0gICAgNzksIDIwNiwgNzksIDc3LCA2OSwgNzEsIDY1LCAxMjgsIDc5LCA3NywgNjksIDcxLCAxOTMsIDc5LCA3NywgNjUsIDc2LCAKLSAgICA3OSwgNzgsIDEyOCwgNzksIDc2LCA3MywgODYsIDY5LCAxMjgsIDc5LCA3NiwgNzMsIDcxLCA3OSwgMjA2LCA3OSwgNzYsIAotICAgIDY4LCAxMjgsIDc5LCA3NSwgODQsIDIwNywgNzksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDc5LCA3NSwgNjUsIDgyLCAxOTMsIAotICAgIDc5LCA3NCwgNzMsIDY2LCA4NywgNjUsIDIxNywgNzksIDc0LCA2OSwgNzksIDc4LCAxMjgsIDc5LCA3MywgNzYsIDEyOCwgCi0gICAgNzksIDcyLCA3NywgMTI4LCA3OSwgNzIsIDIwNSwgNzksIDcxLCA4MiwgNjksIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCAKLSAgICA3NSwgMTI4LCA3OSwgNzEsIDc5LCA3OCwgNjksIDIwMywgNzksIDcxLCA3MiwgNjUsIDIwNSwgNzksIDcwLCA3MCwgNzMsIAotICAgIDY3LCA2OSwgODIsIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDE5NywgCi0gICAgNzksIDcwLCA3MCwgMTI4LCA3OSwgNjksIDg5LCAxMjgsIDc5LCA2OSwgNzUsIDEyOCwgNzksIDY4LCA2OSwgNzgsIDEyOCwgCi0gICAgNzksIDY4LCAxOTYsIDc5LCA2NywgODQsIDc5LCA4MCwgODUsIDgzLCAxMjgsIDc5LCA2NywgODQsIDc5LCA2NiwgNjksIDgyLCAKLSAgICAxMjgsIDc5LCA2NywgODQsIDY5LCAyMTIsIDc5LCA2NywgMjEwLCA3OSwgNjcsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIDc5LCAKLSAgICA2NywgNjcsIDc2LCA4NSwgODMsIDczLCA3OSwgNzgsIDEyOCwgNzksIDY2LCA4MywgODQsIDgyLCA4NSwgNjcsIDg0LCA3MywgCi0gICAgNzksIDc4LCAxMjgsIDc5LCA2NiwgNzksIDc2LCAyMTEsIDc5LCA2NiwgNzksIDIwNCwgNzksIDY2LCA3OSwgNzAsIDczLCAKLSAgICA3NiwgNzMsIDEyOCwgNzksIDY2LCA3NiwgNzMsIDgxLCA4NSwgMTk3LCA3OSwgNjYsIDc0LCA2OSwgNjcsIDIxMiwgNzksIAotICAgIDY2LCA2OSwgNzYsIDg1LCA4MywgMTI4LCA3OSwgNjYsIDY5LCA3NiwgNzksIDgzLCAxMjgsIDc5LCA2NiwgMTI4LCA3OSwgCi0gICAgNjUsIDg5LCAxMjgsIDc5LCA2NSwgNzUsIDEyOCwgNzksIDY1LCA2NiwgNzksIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKLSAgICA3OSwgMTkzLCA3OSwgNDgsIDUzLCA0OSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA1MywgNDgsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCAxMjgsIDc5LCA0OCwgNTIsIDU3LCAxMjgsIDc5LCA0OCwgNTIsIDU2LCAxMjgsIAotICAgIDc5LCA0OCwgNTIsIDU1LCAxMjgsIDc5LCA0OCwgNTIsIDU0LCAxMjgsIDc5LCA0OCwgNTIsIDUzLCAxMjgsIDc5LCA0OCwgCi0gICAgNTIsIDUyLCAxMjgsIDc5LCA0OCwgNTIsIDUxLCAxMjgsIDc5LCA0OCwgNTIsIDUwLCAxMjgsIDc5LCA0OCwgNTIsIDQ5LCAKLSAgICAxMjgsIDc5LCA0OCwgNTIsIDQ4LCAxMjgsIDc5LCA0OCwgNTEsIDU3LCAxMjgsIDc5LCA0OCwgNTEsIDU2LCAxMjgsIDc5LCAKLSAgICA0OCwgNTEsIDU1LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjcsIDEyOCwgNzksIAotICAgIDQ4LCA1MSwgNTQsIDY2LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgMTI4LCA3OSwgCi0gICAgNDgsIDUxLCA1MywgMTI4LCA3OSwgNDgsIDUxLCA1MiwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzksIDQ4LCAKLSAgICA1MSwgNTEsIDEyOCwgNzksIDQ4LCA1MSwgNTAsIDEyOCwgNzksIDQ4LCA1MSwgNDksIDEyOCwgNzksIDQ4LCA1MSwgNDgsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDQ4LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1NywgCi0gICAgMTI4LCA3OSwgNDgsIDUwLCA1NiwgMTI4LCA3OSwgNDgsIDUwLCA1NSwgMTI4LCA3OSwgNDgsIDUwLCA1NCwgMTI4LCA3OSwgCi0gICAgNDgsIDUwLCA1MywgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc5LCAKLSAgICA0OCwgNTAsIDUyLCAxMjgsIDc5LCA0OCwgNTAsIDUxLCAxMjgsIDc5LCA0OCwgNTAsIDUwLCAxMjgsIDc5LCA0OCwgNTAsIAotICAgIDQ5LCAxMjgsIDc5LCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgMTI4LCA3OSwgNDgsIDQ5LCA1NywgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA0OSwgNTcsIDEyOCwgNzksIDQ4LCA0OSwgNTYsIDEyOCwgNzksIDQ4LCA0OSwgNTUsIDEyOCwgCi0gICAgNzksIDQ4LCA0OSwgNTQsIDEyOCwgNzksIDQ4LCA0OSwgNTMsIDEyOCwgNzksIDQ4LCA0OSwgNTIsIDEyOCwgNzksIDQ4LCAKLSAgICA0OSwgNTEsIDEyOCwgNzksIDQ4LCA0OSwgNTAsIDEyOCwgNzksIDQ4LCA0OSwgNDksIDEyOCwgNzksIDQ4LCA0OSwgNDgsIAotICAgIDY3LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA0OSwgCi0gICAgNDgsIDEyOCwgNzksIDQ4LCA0OCwgNTcsIDEyOCwgNzksIDQ4LCA0OCwgNTYsIDEyOCwgNzksIDQ4LCA0OCwgNTUsIDEyOCwgCi0gICAgNzksIDQ4LCA0OCwgNTQsIDcwLCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjgsIAotICAgIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCAKLSAgICAxMjgsIDc5LCA0OCwgNDgsIDUyLCAxMjgsIDc5LCA0OCwgNDgsIDUxLCAxMjgsIDc5LCA0OCwgNDgsIDUwLCAxMjgsIDc5LCAKLSAgICA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgNDUsIDg5LCA2OSwgMTI4LCA3OSwgNDUsIAotICAgIDc5LCA0NSwgNzMsIDEyOCwgNzksIDQ1LCA2OSwgMTI4LCA3OCwgOTAsIDg5LCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4NCwgCi0gICAgMTI4LCA3OCwgOTAsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDEyOCwgNzgsIDkwLCA4OSwgODAsIDEyOCwgCi0gICAgNzgsIDkwLCA4OSwgMTI4LCA3OCwgOTAsIDg1LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDkwLCAKLSAgICA4NSwgODIsIDEyOCwgNzgsIDkwLCA4NSwgODEsIDEyOCwgNzgsIDkwLCA4NSwgODAsIDEyOCwgNzgsIDkwLCA4NSwgNzksIAotICAgIDg4LCAxMjgsIDc4LCA5MCwgODUsIDc5LCAxMjgsIDc4LCA5MCwgODUsIDIwNiwgNzgsIDkwLCA4NSwgMTI4LCA3OCwgOTAsIAotICAgIDc5LCA4OCwgMTI4LCA3OCwgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4OCwgMTI4LCA3OCwgOTAsIDczLCA4NCwgCi0gICAgMTI4LCA3OCwgOTAsIDczLCA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA3MywgNjksIDgwLCAKLSAgICAxMjgsIDc4LCA5MCwgNzMsIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDEyOCwgNzgsIDkwLCA2OSwgODgsIDEyOCwgNzgsIDkwLCAKLSAgICA2OSwgODUsIDc3LCAxMjgsIDc4LCA5MCwgNjksIDEyOCwgNzgsIDkwLCA2NSwgODgsIDEyOCwgNzgsIDkwLCA2NSwgODQsIAotICAgIDEyOCwgNzgsIDkwLCA2NSwgODEsIDEyOCwgNzgsIDkwLCA2NSwgODAsIDEyOCwgNzgsIDkwLCA2NSwgMTI4LCA3OCwgOTAsIAotICAgIDE5MywgNzgsIDg5LCA4NywgNjUsIDEyOCwgNzgsIDg5LCA4NSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgODUsIDEyOCwgNzgsIAotICAgIDg5LCA4NSwgODQsIDEyOCwgNzgsIDg5LCA4NSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgMTI4LCA3OCwgODksIDg1LCA2OSwgMTI4LCA3OCwgODksIDg1LCAKLSAgICAxMjgsIDc4LCA4OSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgNzksIDg0LCAxMjgsIDc4LCA4OSwgNzksIDgwLCAxMjgsIDc4LCAKLSAgICA4OSwgNzksIDc5LCAxMjgsIDc4LCA4OSwgNzksIDY1LCAxMjgsIDc4LCA4OSwgNzksIDEyOCwgNzgsIDg5LCA3NCwgNjUsIAotICAgIDEyOCwgNzgsIDg5LCA3MywgODgsIDEyOCwgNzgsIDg5LCA3MywgODQsIDEyOCwgNzgsIDg5LCA3MywgMjEyLCA3OCwgODksIAotICAgIDczLCAyMTEsIDc4LCA4OSwgNzMsIDIxMCwgNzgsIDg5LCA3MywgODAsIDEyOCwgNzgsIDg5LCA3MywgNzgsIDQ1LCA2OCwgCi0gICAgNzksIDEyOCwgNzgsIDg5LCA3MywgNzMsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCAKLSAgICA4NCwgMTI4LCA3OCwgODksIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgMTI4LCAKLSAgICA3OCwgODksIDIwMSwgNzgsIDg5LCA3MiwgNjUsIDEyOCwgNzgsIDg5LCA2OSwgODQsIDEyOCwgNzgsIDg5LCA2OSwgMjEyLCAKLSAgICA3OCwgODksIDY5LCA3MiwgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA4OSwgNjksIAotICAgIDEyOCwgNzgsIDg5LCAxOTYsIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjUsIDg1LCAxMjgsIDc4LCA4OSwgNjUsIAotICAgIDczLCAxMjgsIDc4LCA4OSwgNjUsIDcyLCAxMjgsIDc4LCA4OSwgNjUsIDY5LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA4OSwgCi0gICAgNjUsIDY1LCAxMjgsIDc4LCA4NywgNzksIDc5LCAxMjgsIDc4LCA4NywgNzksIDEyOCwgNzgsIDg3LCA3MywgNzMsIDEyOCwgCi0gICAgNzgsIDg3LCA3MywgMTI4LCA3OCwgODcsIDY5LCAxMjgsIDc4LCA4NywgNjUsIDY1LCAxMjgsIDc4LCA4NywgNjUsIDEyOCwgCi0gICAgNzgsIDg3LCAxMjgsIDc4LCA4NiwgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCA4NSwgODUsIDc4LCAxMjgsIDc4LCA4NSwgCi0gICAgODUsIDEyOCwgNzgsIDg1LCA4NCwgNzMsIDc2LCA3NiwgODUsIDEyOCwgNzgsIDg1LCA4NCwgMTI4LCA3OCwgODUsIDIxMiwgCi0gICAgNzgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDg1LCA4MiwgMTI4LCA3OCwgODUsIDgwLCAxMjgsIDc4LCA4NSwgNzksIDg4LCAKLSAgICAxMjgsIDc4LCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4NSwgNzksIDEyOCwgNzgsIDg1LCA3OCwgODUsIDkwLCAxMjgsIDc4LCAKLSAgICA4NSwgNzgsIDg1LCAyMTgsIDc4LCA4NSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNzgsIDY1LCA4NiwgODUsIDIxMiwgNzgsIAotICAgIDg1LCA3OCwgNjUsIDg2LCA3MywgMjAzLCA3OCwgODUsIDc4LCAxMjgsIDc4LCA4NSwgMjA2LCA3OCwgODUsIDc3LCA2OSwgCi0gICAgODIsIDIwNywgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIAotICAgIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgODMsIDEyOCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgCi0gICAgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NiwgMTI4LCA3OCwgCi0gICAgODUsIDc1LCA4NCwgNjUsIDEyOCwgNzgsIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCAKLSAgICA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIAotICAgIDUwLCA1MCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgCi0gICAgODUsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NiwgNjUsIAotICAgIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgCi0gICAgNTQsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgODUsIDQ4LCAKLSAgICA0OSwgNTEsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzgsIAotICAgIDg1LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCAKLSAgICAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIAotICAgIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgCi0gICAgNDgsIDUyLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDg1LCAKLSAgICA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA4NCwgODUsIDg1LCAxMjgsIDc4LCA4NCwgODUsIDc3LCAxMjgsIDc4LCA4NCwgMjEzLCAKLSAgICA3OCwgODQsIDc5LCA4MSwgODAsIDY5LCA3OCwgMTI4LCA3OCwgODQsIDczLCA2OSwgMTk3LCA3OCwgODQsIDY5LCA4NSwgNzgsIAotICAgIDcxLCA2NiwgNjUsIDEyOCwgNzgsIDg0LCA2OSwgODUsIDc3LCAxMjgsIDc4LCA4NCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgCi0gICAgNjksIDY5LCAxMjgsIDc4LCA4NCwgNjUsIDgwLCAxMjgsIDc4LCA4NCwgNjUsIDIwOCwgNzgsIDg0LCA2NSwgNjUsIDEyOCwgCi0gICAgNzgsIDgzLCA4NSwgNzksIDIxMiwgNzgsIDgzLCA4NSwgNzgsIDEyOCwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzgsIDgzLCAKLSAgICA3OSwgNzcsIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4NCwgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDgwLCAxMjgsIAotICAgIDc4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA4NSwgODQsIDEyOCwgNzgsIDgzLCA3MiwgODUsIDIxMiwgCi0gICAgNzgsIDgzLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNzMsIDY5LCAKLSAgICA2OSwgMTI4LCA3OCwgODMsIDcyLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNjUsIDgxLCAxMjgsIDc4LCA4MywgNzIsIAotICAgIDY1LCAxMjgsIDc4LCA4MywgNjksIDg1LCA2NSwgNjksIDc4LCAxMjgsIDc4LCA4MywgNjksIDc4LCAxMjgsIDc4LCA4MywgCi0gICAgNjUsIDEyOCwgNzgsIDgyLCA4OSwgODgsIDEyOCwgNzgsIDgyLCA4OSwgODQsIDEyOCwgNzgsIDgyLCA4OSwgODIsIDg4LCAKLSAgICAxMjgsIDc4LCA4MiwgODksIDgyLCAxMjgsIDc4LCA4MiwgODksIDgwLCAxMjgsIDc4LCA4MiwgODksIDEyOCwgNzgsIDgyLCAKLSAgICA4NSwgODgsIDEyOCwgNzgsIDgyLCA4NSwgODQsIDEyOCwgNzgsIDgyLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA4MiwgODUsIAotICAgIDgyLCAxMjgsIDc4LCA4MiwgODUsIDgwLCAxMjgsIDc4LCA4MiwgODUsIDEyOCwgNzgsIDgyLCA3OSwgODgsIDEyOCwgNzgsIAotICAgIDgyLCA3OSwgODAsIDEyOCwgNzgsIDgyLCA3OSwgMTI4LCA3OCwgODIsIDY5LCA4OCwgMTI4LCA3OCwgODIsIDY5LCA4NCwgCi0gICAgMTI4LCA3OCwgODIsIDY5LCA4MCwgMTI4LCA3OCwgODIsIDY5LCAxMjgsIDc4LCA4MiwgNjUsIDg4LCAxMjgsIDc4LCA4MiwgCi0gICAgNjUsIDg0LCAxMjgsIDc4LCA4MiwgNjUsIDgwLCAxMjgsIDc4LCA4MiwgNjUsIDEyOCwgNzgsIDc5LCA4OSwgMTI4LCA3OCwgCi0gICAgNzksIDg4LCAxMjgsIDc4LCA3OSwgODYsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDg0LCA4NCwgNzksIAotICAgIDEyOCwgNzgsIDc5LCA4NCwgNjksIDgzLCAxMjgsIDc4LCA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCA2OCwgMTI4LCA3OCwgCi0gICAgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgMTk2LCA3OCwgNzksIDg0LCA2OSwgNjYsIDc5LCA3OSwgNzUsIDEyOCwgNzgsIDc5LCAKLSAgICA4NCwgNjksIDY2LCA3OSwgNzksIDIwMywgNzgsIDc5LCA4NCwgNjksIDEyOCwgNzgsIDc5LCA4NCwgMTk3LCA3OCwgNzksIAotICAgIDg0LCA2NywgNzIsIDY5LCAxOTYsIDc4LCA3OSwgODQsIDY3LCA3MiwgMTI4LCA3OCwgNzksIDg0LCAxMjgsIDc4LCA3OSwgCi0gICAgMjEyLCA3OCwgNzksIDgzLCA2OSwgMTI4LCA3OCwgNzksIDgyLCA4NCwgNzIsIDg3LCA2OSwgODMsIDIxMiwgNzgsIDc5LCAKLSAgICA4MiwgODQsIDcyLCA2OSwgODIsIDIwNiwgNzgsIDc5LCA4MiwgODQsIDIwMCwgNzgsIDc5LCA4MiwgNzcsIDY1LCAyMDQsIAotICAgIDc4LCA3OSwgMjEwLCA3OCwgNzksIDgwLCAxMjgsIDc4LCA3OSwgNzksIDc4LCA4NSwgMTI4LCA3OCwgNzksIDc5LCAxMjgsIAotICAgIDc4LCA3OSwgNzgsIDcwLCA3OSwgODIsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA4MCwgNzksIDg0LCAKLSAgICA2NSwgNjYsIDc2LCAxOTcsIDc4LCA3OSwgNzgsIDQ1LCA3NCwgNzksIDczLCA3OCwgNjksIDgyLCAxMjgsIDc4LCA3OSwgNzgsIAotICAgIDQ1LCA2NiwgODIsIDY5LCA2NSwgNzUsIDczLCA3OCwgMTk5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCAyMDQsIDc4LCA3OSwgCi0gICAgNzUsIDcyLCA4NSwgNzUsIDEyOCwgNzgsIDc5LCA2OCwgNjksIDEyOCwgNzgsIDc5LCA2NSwgMTI4LCA3OCwgNzksIDQ1LCAKLSAgICA2NiwgODIsIDY5LCA2NSwgMjAzLCA3OCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgNzgsIDg1LCAxMjgsIDc4LCA3OCwgNzksIAotICAgIDc5LCAxMjgsIDc4LCA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDg1LCAxMjgsIAotICAgIDc4LCA3OCwgNzgsIDc5LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3MywgNzMsIDEyOCwgCi0gICAgNzgsIDc4LCA3OCwgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjksIDY5LCAxMjgsIDc4LCA3OCwgNzgsIDY5LCAxMjgsIDc4LCAKLSAgICA3OCwgNzgsIDY1LCA4NSwgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDY1LCAxMjgsIAotICAgIDc4LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA3OCwgNzgsIDEyOCwgNzgsIDc4LCA3MiwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgCi0gICAgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDczLCA3MywgMTI4LCA3OCwgNzgsIDcxLCAKLSAgICA3MywgMTI4LCA3OCwgNzgsIDcxLCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgMTI4LCAKLSAgICA3OCwgNzgsIDY2LCA4MywgODAsIDEyOCwgNzgsIDc3LCAxMjgsIDc4LCA3NiwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgNzYsIAotICAgIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgCi0gICAgNzgsIDc2LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTMsIAotICAgIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgCi0gICAgNTAsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCAKLSAgICA0OCwgNTcsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNzYsIAotICAgIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDEyOCwgCi0gICAgNzgsIDc2LCA0OCwgNDgsIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTAsIAotICAgIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA3NiwgMTI4LCA3OCwgNzUsIDc5LCA3NywgMTI4LCA3OCwgNzUsIAotICAgIDIwNywgNzgsIDc1LCA3MywgNzgsIDY4LCA3MywgMTI4LCA3OCwgNzUsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3OCwgCi0gICAgNzQsIDg5LCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4NCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDc0LCAKLSAgICA4OSwgODIsIDEyOCwgNzgsIDc0LCA4OSwgODAsIDEyOCwgNzgsIDc0LCA4OSwgMTI4LCA3OCwgNzQsIDg1LCA4OCwgMTI4LCAKLSAgICA3OCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDc0LCA4NSwgODIsIDEyOCwgNzgsIDc0LCA4NSwgODEsIDY1LCAxMjgsIAotICAgIDc4LCA3NCwgODUsIDgwLCAxMjgsIDc4LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgMTI4LCA3OCwgCi0gICAgNzQsIDg1LCA2OSwgODEsIDEyOCwgNzgsIDc0LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODUsIDEyOCwgNzgsIDc0LCAKLSAgICA3OSwgODgsIDEyOCwgNzgsIDc0LCA3OSwgODQsIDEyOCwgNzgsIDc0LCA3OSwgODAsIDEyOCwgNzgsIDc0LCA3OSwgNzksIAotICAgIDEyOCwgNzgsIDc0LCA3OSwgMTI4LCA3OCwgNzQsIDczLCA4OCwgMTI4LCA3OCwgNzQsIDczLCA4NCwgMTI4LCA3OCwgNzQsIAotICAgIDczLCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg0LCAxMjgsIDc4LCA3NCwgCi0gICAgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgNjksIDEyOCwgNzgsIDc0LCA3MywgNjksIDEyOCwgNzgsIDc0LCAKLSAgICA3MywgMTI4LCA3OCwgNzQsIDIwMSwgNzgsIDc0LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA4NCwgMTI4LCAKLSAgICA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3OCwgNjUsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIAotICAgIDc0LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCAxOTcsIDc4LCA3NCwgCi0gICAgNjksIDEyOCwgNzgsIDc0LCA2NSwgODEsIDEyOCwgNzgsIDc0LCA2NSwgODAsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCAKLSAgICA3NiwgNzMsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3NCwgNjUsIDY1LCAxMjgsIDc4LCA3MywgODgsIAotICAgIDEyOCwgNzgsIDczLCA4NCwgODIsIDY5LCAxMjgsIDc4LCA3MywgODMsIDY1LCA3MSwgMTI4LCA3OCwgNzMsIDgyLCA4NSwgCi0gICAgNzEsIDg1LCAxMjgsIDc4LCA3MywgODAsIDEyOCwgNzgsIDczLCA3OCwgODQsIDcyLCAxMjgsIDc4LCA3MywgNzgsIDY5LCAKLSAgICA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCAyMTcsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCA3OCwgCi0gICAgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgMjA2LCA3OCwgNzMsIDc4LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCAKLSAgICA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgMTk3LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDUwLCAxMjgsIDc4LCA3MywgNzgsIAotICAgIDY4LCA2NSwgMTc4LCA3OCwgNzMsIDc3LCAxMjgsIDc4LCA3MywgMjA1LCA3OCwgNzMsIDc1LCA3MiwgNjUsIDcyLCA3MywgCi0gICAgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDcyLCA3MywgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDEyOCwgNzgsIDczLCAKLSAgICA3MiwgODMsIDcyLCA4NiwgNjUsIDgzLCA2NSwgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA3NywgNzMsIDc4LCAxMjgsIAotICAgIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDY5LCA4MywgNzIsIDEyOCwgNzgsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc4LCA3MywgCi0gICAgNzEsIDcyLCAyMTIsIDc4LCA3MywgNzEsIDcxLCA2NSwgNzIsIDczLCA4NCwgNjUsIDEyOCwgNzgsIDczLCA2OSwgODgsIAotICAgIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgCi0gICAgNzgsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzgsIDczLCA2OSwgCi0gICAgODUsIDc4LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgwLCA2NSwgNzgsIAotICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgCi0gICAgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIAotICAgIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCAKLSAgICA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgMjA2LCA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCAxMjgsIDc4LCAKLSAgICA3MywgNjYsIDEyOCwgNzgsIDczLCA2NSwgMTI4LCA3OCwgNzMsIDUwLCAxMjgsIDc4LCA3MiwgODUsIDY5LCAxMjgsIDc4LCAKLSAgICA3MiwgNzQsIDY1LCAxMjgsIDc4LCA3MiwgMTI4LCA3OCwgNzEsIDg5LCA2OSwgMTI4LCA3OCwgNzEsIDg2LCA2OSwgMTI4LCAKLSAgICA3OCwgNzEsIDg1LCA4NSwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg0LCAxMjgsIAotICAgIDc4LCA3MSwgODUsIDc5LCAxMjgsIDc4LCA3MSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNjUsIDY5LCAKLSAgICAxMjgsIDc4LCA3MSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgNzksIDg1LCAxMjgsIDc4LCA3MSwgNzksIDIxMywgNzgsIDcxLCAKLSAgICA3OSwgODQsIDEyOCwgNzgsIDcxLCA3OSwgODEsIDEyOCwgNzgsIDcxLCA3OSwgODAsIDEyOCwgNzgsIDcxLCA3OSwgNzgsIAotICAgIDEyOCwgNzgsIDcxLCA3OSwgNzcsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDcyLCAxMjgsIDc4LCA3MSwgNzksIDY5LCAyMDAsIAotICAgIDc4LCA3MSwgMjA3LCA3OCwgNzEsIDc1LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDg3LCA2NSwgNjksIDc4LCAKLSAgICAxMjgsIDc4LCA3MSwgNzUsIDg1LCA4MCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIAotICAgIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCA2OSwgNzgsIDkwLCA2OSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCAKLSAgICAxOTcsIDc4LCA3MSwgNzUsIDczLCA3OCwgNjgsIDIwMSwgNzgsIDcxLCA3NSwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIAotICAgIDc1LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgODIsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgCi0gICAgNjUsIDY5LCA4MSwgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgxLCAKLSAgICAxMjgsIDc4LCA3MSwgNzUsIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDc1LCA2NSwgNjUsIDc3LCA3MywgMTI4LCA3OCwgNzEsIAotICAgIDc1LCA2NSwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MSwgCi0gICAgNzMsIDY5LCAxMjgsIDc4LCA3MSwgNzIsIDY1LCAxMjgsIDc4LCA3MSwgNzEsIDg3LCA2NSwgNjksIDc4LCAxMjgsIDc4LCAKLSAgICA3MSwgNzEsIDg1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA4MCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIAotICAgIDgxLCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgMjA5LCA3OCwgNzEsIDcxLCA4NSwgNzksIDc4LCAxMjgsIDc4LCA3MSwgCi0gICAgNzEsIDg1LCA3OSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA2OSwgNjksIDg0LCAKLSAgICAxMjgsIDc4LCA3MSwgNzEsIDg1LCA2NSwgNjksIDgzLCA3MiwgNjUsIDE5NywgNzgsIDcxLCA3MSwgODUsIDY1LCA2OSwgCi0gICAgMjA2LCA3OCwgNzEsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzksIDEyOCwgCi0gICAgNzgsIDcxLCA3MSwgNzMsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCAKLSAgICA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDIxMywgNzgsIAotICAgIDcxLCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCA2OSwgCi0gICAgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCAKLSAgICA4MCwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDY1LCA3NywgCi0gICAgMTI4LCA3OCwgNzEsIDcxLCAxMjgsIDc4LCA3MSwgNjksIDg4LCAxMjgsIDc4LCA3MSwgNjksIDg1LCA4MiwgNjksIDg1LCAKLSAgICA4NCwgMTI4LCA3OCwgNzEsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDY5LCA2OSwgMTI4LCAKLSAgICA3OCwgNzEsIDY5LCA2NSwgNjgsIDY1LCA3NiwgMTI4LCA3OCwgNzEsIDY1LCA4OCwgMTI4LCA3OCwgNzEsIDY1LCA4NSwgCi0gICAgMTI4LCA3OCwgNzEsIDY1LCA4NCwgMTI4LCA3OCwgNzEsIDY1LCAyMTEsIDc4LCA3MSwgNjUsIDgxLCAxMjgsIDc4LCA3MSwgCi0gICAgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNjUsIDc4LCA3MSwgODUsIDEyOCwgNzgsIDcxLCA2NSwgNzgsIDEyOCwgNzgsIDcxLCAKLSAgICA2NSwgNzMsIDEyOCwgNzgsIDcxLCA2NSwgNzIsIDEyOCwgNzgsIDcxLCA2NSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgMTkzLCAKLSAgICA3OCwgNzAsIDEyOCwgNzgsIDY5LCA4OCwgMjEyLCA3OCwgNjksIDg4LCAxMjgsIDc4LCA2OSwgODcsIDgzLCA4MCwgNjUsIAotICAgIDgwLCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NywgNzYsIDczLCA3OCwgNjksIDEyOCwgNzgsIDY5LCA4NywgMTI4LCA3OCwgCi0gICAgNjksIDg1LCA4NCwgODIsIDY1LCAyMDQsIDc4LCA2OSwgODUsIDg0LCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NCwgMTI4LCAKLSAgICA3OCwgNjksIDIxMiwgNzgsIDY5LCA4MywgODQsIDY5LCAxOTYsIDc4LCA2OSwgODEsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIAotICAgIDc4LCA2OSwgODAsIDg0LCA4NSwgNzgsIDY5LCAxMjgsIDc4LCA2OSwgODAsIDEyOCwgNzgsIDY5LCA3OSwgMTI4LCA3OCwgCi0gICAgNjksIDIwNywgNzgsIDY5LCA3OCwgNjUsIDc4LCA3OSwgMTI4LCA3OCwgNjksIDc4LCAxMjgsIDc4LCA2OSwgNzYsIDEyOCwgCi0gICAgNzgsIDY5LCA3MywgODQsIDcyLCA2OSwgMjEwLCA3OCwgNjksIDcxLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjksIDcxLCAKLSAgICA2NSwgODQsIDY5LCAxOTYsIDc4LCA2OSwgNjcsIDc1LCA4NCwgNzMsIDY5LCAxMjgsIDc4LCA2OSwgNjYsIDY5LCA3OCwgODMsIAotICAgIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3OCwgNjgsIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3OCwgCi0gICAgNjgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODIsIDEyOCwgNzgsIDY4LCA4NSwgODAsIDEyOCwgNzgsIDY4LCAKLSAgICA4NSwgNzgsIDEyOCwgNzgsIDY4LCAyMTMsIDc4LCA2OCwgNzksIDg4LCAxMjgsIDc4LCA2OCwgNzksIDg0LCAxMjgsIDc4LCAKLSAgICA2OCwgNzksIDgwLCAxMjgsIDc4LCA2OCwgNzksIDc5LCAxMjgsIDc4LCA2OCwgNzksIDc4LCAxMjgsIDc4LCA2OCwgNzksIAotICAgIDc3LCA2NiwgODUsIDEyOCwgNzgsIDY4LCA3OSwgNzYsIDE5NywgNzgsIDY4LCA3MywgODgsIDEyOCwgNzgsIDY4LCA3MywgCi0gICAgODQsIDEyOCwgNzgsIDY4LCA3MywgODEsIDEyOCwgNzgsIDY4LCA3MywgODAsIDEyOCwgNzgsIDY4LCA3MywgNjksIDg4LCAKLSAgICAxMjgsIDc4LCA2OCwgNzMsIDY5LCAxMjgsIDc4LCA2OCwgNzMsIDY4LCA2NSwgMTI4LCA3OCwgNjgsIDczLCA2NSwgODEsIAotICAgIDEyOCwgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA4NCwgCi0gICAgMTI4LCA3OCwgNjgsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDgwLCAxMjgsIDc4LCAKLSAgICA2OCwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDEyOCwgNzgsIDY4LCA2NSwgODgsIDEyOCwgNzgsIDY4LCA2NSwgODQsIAotICAgIDEyOCwgNzgsIDY4LCA2NSwgODAsIDEyOCwgNzgsIDY4LCA2NSwgNzcsIDEyOCwgNzgsIDY4LCA2NSwgNjUsIDc4LCA3MSwgCi0gICAgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNjgsIDY1LCA2NSwgMTI4LCA3OCwgNjgsIDY1LCAxOTMsIDc4LCAKLSAgICA2NiwgODksIDg4LCAxMjgsIDc4LCA2NiwgODksIDg0LCAxMjgsIDc4LCA2NiwgODksIDgyLCA4OCwgMTI4LCA3OCwgNjYsIAotICAgIDg5LCA4MiwgMTI4LCA3OCwgNjYsIDg5LCA4MCwgMTI4LCA3OCwgNjYsIDg5LCAxMjgsIDc4LCA2NiwgODUsIDg4LCAxMjgsIAotICAgIDc4LCA2NiwgODUsIDg0LCAxMjgsIDc4LCA2NiwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgMTI4LCA3OCwgCi0gICAgNjYsIDg1LCA4MCwgMTI4LCA3OCwgNjYsIDg1LCAxMjgsIDc4LCA2NiwgNzksIDg4LCAxMjgsIDc4LCA2NiwgNzksIDg0LCAKLSAgICAxMjgsIDc4LCA2NiwgNzksIDgwLCAxMjgsIDc4LCA2NiwgNzksIDEyOCwgNzgsIDY2LCA3MywgODgsIDEyOCwgNzgsIDY2LCAKLSAgICA3MywgODQsIDEyOCwgNzgsIDY2LCA3MywgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2NiwgNzMsIAotICAgIDY5LCA4MCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgMTI4LCA3OCwgNjYsIDczLCAxMjgsIDc4LCA2NiwgNzIsIDEyOCwgNzgsIAotICAgIDY2LCA2NSwgODgsIDEyOCwgNzgsIDY2LCA2NSwgODQsIDEyOCwgNzgsIDY2LCA2NSwgODAsIDEyOCwgNzgsIDY2LCA2NSwgCi0gICAgMTI4LCA3OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIDg5LCAxMjgsIDc4LCA2NSwgODgsIDczLCAKLSAgICA2NSwgMjA2LCA3OCwgNjUsIDg4LCAxMjgsIDc4LCA2NSwgODUsIDg0LCA3MiwgODMsIDEyOCwgNzgsIDY1LCA4NSwgNjgsIAotICAgIDczLCAyMTgsIDc4LCA2NSwgODQsIDg1LCA4MiwgNjUsIDIwNCwgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgCi0gICAgNzgsIDY1LCA4MywgNzUsIDY1LCA4MCwgMjAxLCA3OCwgNjUsIDgzLCA3MiwgNzMsIDEyOCwgNzgsIDY1LCA4MywgNjUsIDc2LCAKLSAgICA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgCi0gICAgNzksIDIwNiwgNzgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDc4LCA2NSwgODIsIDEyOCwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgCi0gICAgNjUsIDc5LCAyMTEsIDc4LCA2NSwgNzgsIDgzLCA2NSwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgNjUsIDc4LCA3MSwgNzcsIDc5LCAKLSAgICA3OCwgODQsIDcyLCA3OSwgMTI4LCA3OCwgNjUsIDc4LCA2OCwgMTI4LCA3OCwgNjUsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIAotICAgIDc3LCA2OSwgMTI4LCA3OCwgNjUsIDc3LCAxOTcsIDc4LCA2NSwgNzcsIDUwLCAxMjgsIDc4LCA2NSwgNzcsIDEyOCwgNzgsIAotICAgIDY1LCA3NSwgMTI4LCA3OCwgNjUsIDczLCA4MiwgMTkzLCA3OCwgNjUsIDczLCAyMDQsIDc4LCA2NSwgNzEsIDgyLCAyMDEsIAotICAgIDc4LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3OCwgNjUsIDcxLCA2NSwgMTI4LCA3OCwgNjUsIDcxLCAxOTMsIDc4LCA2NSwgCi0gICAgNzEsIDEyOCwgNzgsIDY1LCAxOTksIDc4LCA2NSwgNjksIDEyOCwgNzgsIDY1LCA2NiwgNzYsIDY1LCAxMjgsIDc4LCA2NSwgCi0gICAgNjUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDc1LCA4MywgNzMsIDc1LCA4OSwgNjUsIAotICAgIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNjUsIDE5MywgNzgsIDY1LCA1MCwgMTI4LCA3OCwgNjUsIAotICAgIDQ1LCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA0OSwgMTI4LCA3OCwgNDgsIDUyLCA0OCwgCi0gICAgMTI4LCA3OCwgNDgsIDUxLCA1NywgMTI4LCA3OCwgNDgsIDUxLCA1NiwgMTI4LCA3OCwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgCi0gICAgNzgsIDQ4LCA1MSwgNTUsIDEyOCwgNzgsIDQ4LCA1MSwgNTQsIDEyOCwgNzgsIDQ4LCA1MSwgNTMsIDY1LCAxMjgsIDc4LCAKLSAgICA0OCwgNTEsIDUzLCAxMjgsIDc4LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MiwgMTI4LCA3OCwgNDgsIAotICAgIDUxLCA1MSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDEyOCwgNzgsIDQ4LCA1MSwgNTAsIDEyOCwgNzgsIDQ4LCA1MSwgCi0gICAgNDksIDEyOCwgNzgsIDQ4LCA1MSwgNDgsIDEyOCwgNzgsIDQ4LCA1MCwgNTcsIDEyOCwgNzgsIDQ4LCA1MCwgNTYsIDEyOCwgCi0gICAgNzgsIDQ4LCA1MCwgNTUsIDEyOCwgNzgsIDQ4LCA1MCwgNTQsIDEyOCwgNzgsIDQ4LCA1MCwgNTMsIDY1LCAxMjgsIDc4LCAKLSAgICA0OCwgNTAsIDUzLCAxMjgsIDc4LCA0OCwgNTAsIDUyLCAxMjgsIDc4LCA0OCwgNTAsIDUxLCAxMjgsIDc4LCA0OCwgNTAsIAotICAgIDUwLCAxMjgsIDc4LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA0OCwgNDksIDU3LCAxMjgsIAotICAgIDc4LCA0OCwgNDksIDU2LCA2NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgNjUsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDEyOCwgCi0gICAgNzgsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDQ4LCA0OSwgNTQsIDEyOCwgNzgsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDQ4LCAKLSAgICA0OSwgNTIsIDEyOCwgNzgsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDQ4LCA0OSwgNDksIAotICAgIDEyOCwgNzgsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIAotICAgIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDQ4LCA0OCwgCi0gICAgNTIsIDEyOCwgNzgsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDQ4LCA0OCwgNDksIDEyOCwgCi0gICAgNzgsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc4LCA0NSwgNjUsIDgyLCAyMTcsIDc3LCA4OSwgODgsIDEyOCwgNzcsIDg5LCAKLSAgICA4NCwgMTI4LCA3NywgODksIDgzLCA3NiwgNzMsIDg0LCA2OSwgMTI4LCA3NywgODksIDgwLCAxMjgsIDc3LCA4OSwgNjUsIAotICAgIDEyOCwgNzcsIDg5LCAxOTMsIDc3LCA4OSwgMTI4LCA3NywgMjE3LCA3NywgODcsIDc5LCA3OSwgMTI4LCA3NywgODcsIDc5LCAKLSAgICAxMjgsIDc3LCA4NywgNzMsIDczLCAxMjgsIDc3LCA4NywgNzMsIDEyOCwgNzcsIDg3LCA2OSwgNjksIDEyOCwgNzcsIDg3LCAKLSAgICA2OSwgMTI4LCA3NywgODcsIDY1LCA2NSwgMTI4LCA3NywgODcsIDY1LCAxMjgsIDc3LCA4NywgMTI4LCA3NywgMjE1LCA3NywgCi0gICAgODYsIDgzLCAxMjgsIDc3LCA4NiwgNzksIDgwLCAxMjgsIDc3LCA4NiwgNzMsIDEyOCwgNzcsIDg2LCA2OSwgODUsIDY1LCAKLSAgICA2OSwgNzgsIDcxLCA2NSwgNzcsIDEyOCwgNzcsIDg2LCAxMjgsIDc3LCAyMTQsIDc3LCA4NSwgODgsIDEyOCwgNzcsIDg1LCAKLSAgICA4NSwgODMsIDczLCA3NSwgNjUsIDg0LCA3OSwgNjUsIDc4LCAxMjgsIDc3LCA4NSwgODUsIDgyLCA2OCwgNzIsIDY1LCA3NCwgCi0gICAgMTkzLCA3NywgODUsIDg1LCAxMjgsIDc3LCA4NSwgODQsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDY3LCAxMjgsIDc3LCA4NSwgCi0gICAgODMsIDczLCAxOTUsIDc3LCA4NSwgODMsIDcyLCA4MiwgNzksIDc5LCA3NywgMTI4LCA3NywgODUsIDgzLCA3MiwgNTEsIAotICAgIDEyOCwgNzcsIDg1LCA4MywgNzIsIDE3OSwgNzcsIDg1LCA4MywgNzIsIDEyOCwgNzcsIDg1LCA4MywgMjAwLCA3NywgODUsIAotICAgIDgyLCA4OCwgMTI4LCA3NywgODUsIDgyLCA3MSwgODUsIDUwLCAxMjgsIDc3LCA4NSwgODIsIDY5LCAxMjgsIDc3LCA4NSwgCi0gICAgODIsIDY4LCA2NSwgMTI4LCA3NywgODUsIDgyLCA2OCwgMTkzLCA3NywgODUsIDgyLCAxMjgsIDc3LCA4NSwgODEsIDY4LCAKLSAgICA2NSwgNzcsIDEyOCwgNzcsIDg1LCA4MCwgMTI4LCA3NywgODUsIDc5LCA4OCwgMTI4LCA3NywgODUsIDc5LCA4NCwgMTI4LCAKLSAgICA3NywgODUsIDc5LCA4MCwgMTI4LCA3NywgODUsIDc5LCA3NywgNjUsIDY5LCAxMjgsIDc3LCA4NSwgNzksIDEyOCwgNzcsIAotICAgIDg1LCA3OCwgODMsIDg1LCA2NiwgMTI4LCA3NywgODUsIDc4LCA2NSwgNzIsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgCi0gICAgNjksIDg0LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIDY5LCAyMTIsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCAKLSAgICA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgNzMsIDY3LCA2NSwgCi0gICAgODQsIDczLCA3OSwgMjA2LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgMTk3LCA3NywgODUsIDc2LCA4NCwgNzMsIDc5LCAKLSAgICA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgODUsIDc2LCA4NCwgNzMsIDc3LCA2NSwgODAsIDEyOCwgNzcsIDg1LCA3NiwgODQsIAotICAgIDIwMSwgNzcsIDg1LCA3NSwgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgMTI4LCA3NywgODUsIDczLCA3OCwgMTI4LCA3NywgCi0gICAgODUsIDcxLCA4MywgMTI4LCA3NywgODUsIDcxLCAxMjgsIDc3LCA4NSwgMTk5LCA3NywgODUsIDY5LCAxMjgsIDc3LCA4NSwgCi0gICAgNjcsIDcyLCAxMjgsIDc3LCA4NSwgNjcsIDIwMCwgNzcsIDg1LCA2NywgNjUsIDY1LCA2OCwgMTI4LCA3NywgODUsIDY1LCAKLSAgICA3OCwgMTI4LCA3NywgODUsIDY1LCA2OSwgMTI4LCA3NywgODUsIDQ1LCA3MSwgNjUsIDY1LCA3MiwgNzYsIDY1LCAxOTMsIAotICAgIDc3LCAyMTMsIDc3LCA4MywgMTI4LCA3NywgODAsIDY1LCAxMjgsIDc3LCA3OSwgODksIDY1LCA3MywgMTI4LCA3NywgNzksIAotICAgIDg4LCAxMjgsIDc3LCA3OSwgODYsIDczLCAxOTcsIDc3LCA3OSwgODYsIDY5LCAxOTYsIDc3LCA3OSwgODUsIDg0LCA3MiwgCi0gICAgMTI4LCA3NywgNzksIDg1LCA4NCwgMjAwLCA3NywgNzksIDg1LCA4MywgNjksIDEyOCwgNzcsIDc5LCA4NSwgODMsIDE5NywgCi0gICAgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCA4MywgMTI4LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIAotICAgIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNzcsIDc5LCA4NSwgNzgsIDIxMiwgNzcsIDc5LCA4NSwgCi0gICAgNzgsIDY4LCAxMjgsIDc3LCA3OSwgODUsIDc4LCAxOTYsIDc3LCA3OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzcsIDc5LCAKLSAgICA4NCwgMTI4LCA3NywgNzksIDgyLCA4NCwgODUsIDg1LCA3NywgMTI4LCA3NywgNzksIDgyLCA4NCwgNjUsIDgyLCAxMjgsIAotICAgIDc3LCA3OSwgODIsIDgwLCA3MiwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNzcsIDc5LCA4MiwgNzgsIDczLCAKLSAgICA3OCwgNzEsIDEyOCwgNzcsIDc5LCA4MCwgMTI4LCA3NywgNzksIDc5LCA4MywgNjksIDQ1LCA2NywgODIsIDY5LCAxOTcsIAotICAgIDc3LCA3OSwgNzksIDc4LCAxMjgsIDc3LCA3OSwgNzksIDIwNiwgNzcsIDc5LCA3OSwgNzcsIDgwLCA4NSwgODEsIDEyOCwgCi0gICAgNzcsIDc5LCA3OSwgNzcsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDc5LCA3OSwgMTI4LCA3NywgNzksIDc4LCA4NCwgNzMsIDY5LCAKLSAgICA2OSwgNzgsIDEyOCwgNzcsIDc5LCA3OCwgODQsIDcyLCAxMjgsIDc3LCA3OSwgNzgsIDg0LCAyMDAsIDc3LCA3OSwgNzgsIAotICAgIDgzLCA4NCwgNjksIDgyLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA4MywgODQsIDY1LCA2NiwgNzYsIDE5NywgNzcsIDc5LCA3OCwgCi0gICAgNzksIDgzLCA4MCwgNjUsIDY3LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA4MiwgNjUsIDczLCA3NiwgMTI4LCA3NywgNzksIDc4LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIDIxMSwgNzcsIAotICAgIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzcsIDc5LCA3OCwgNzksIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgCi0gICAgNzcsIDc5LCA3OCwgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA3OSwgNzgsIDc1LCA2OSwgODksIDEyOCwgNzcsIDc5LCAKLSAgICA3OCwgNzUsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDczLCAxMjgsIDc3LCA3OSwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIAotICAgIDgxLCAxMjgsIDc3LCA3OSwgNzgsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCAyMDYsIDc3LCA3OSwgNzYsIAotICAgIDEyOCwgNzcsIDc5LCA3MiwgNjUsIDc3LCA3NywgNjUsIDE5NiwgNzcsIDc5LCA2OCwgODUsIDc2LCAyMDcsIDc3LCA3OSwgCi0gICAgNjgsIDY5LCA4MywgODQsIDg5LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgODMsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAKLSAgICAxMjgsIDc3LCA3OSwgNjgsIDY5LCAxMjgsIDc3LCA3OSwgNjYsIDczLCA3NiwgMTk3LCA3NywgNzksIDY1LCAxMjgsIDc3LCAKLSAgICAyMDcsIDc3LCA3OCwgODksIDY1LCAyMDUsIDc3LCA3OCwgNjUsIDgzLCAxMjgsIDc3LCA3NywgODMsIDgwLCAxMjgsIDc3LCAKLSAgICA3NywgMTI4LCA3NywgMjA1LCA3NywgNzYsIDY1LCAxMjgsIDc3LCA3NiwgMTI4LCA3NywgNzUsIDgwLCA2NSwgODIsIDY1LCAKLSAgICAyMDksIDc3LCA3MywgODgsIDEyOCwgNzcsIDczLCA4NCwgMTI4LCA3NywgNzMsIDgzLCA4MiwgNjUsIDEyOCwgNzcsIDczLCAKLSAgICA4MiwgNzMsIDY2LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3NywgNzMsIDgyLCA3MywgMTI4LCA3NywgNzMsIDgyLCA2OSwgNjgsIAotICAgIDEyOCwgNzcsIDczLCA4MCwgMTI4LCA3NywgNzMsIDc4LCA4OSwgMTI4LCA3NywgNzMsIDc4LCA4NSwgODMsIDQ1LCA3OSwgCi0gICAgODIsIDQ1LCA4MCwgNzYsIDg1LCAyMTEsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCA3NywgNzMsIDc4LCA3MywgODMsIDg0LCAKLSAgICA2OSwgODIsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDc3LCA2NSwgMTI4LCA3NywgNzMsIDc4LCA3MywgNjgsIDczLCA4MywgNjcsIAotICAgIDEyOCwgNzcsIDczLCA3OCwgNzMsIDY2LCA4NSwgODMsIDEyOCwgNzcsIDczLCA3NywgNjksIDEyOCwgNzcsIDczLCA3NywgCi0gICAgMTI4LCA3NywgNzMsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMjExLCA3NywgNzMsIDc2LCA3NiwgNjksIDg0LCAxMjgsIDc3LCAKLSAgICA3MywgNzYsIDc2LCAxOTcsIDc3LCA3MywgNzYsIDIwNCwgNzcsIDczLCA3NiwgNzUsIDIxNywgNzcsIDczLCA3NiwgMTI4LCAKLSAgICA3NywgNzMsIDc1LCA4NSwgODIsIDc5LCA3OCwgMTI4LCA3NywgNzMsIDc1LCA4MiwgNzksIDIwNiwgNzcsIDczLCA3NSwgODIsIAotICAgIDczLCAxMjgsIDc3LCA3MywgNzMsIDc4LCAxMjgsIDc3LCA3MywgNzMsIDEyOCwgNzcsIDczLCAxOTksIDc3LCA3MywgNjksIAotICAgIDg4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDczLCA2OSwgCi0gICAgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIAotICAgIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCAKLSAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgCi0gICAgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIAotICAgIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzcsIDczLCA2OSwgCi0gICAgODUsIDIwNSwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzcsIDczLCA2OSwgNjksIDEyOCwgNzcsIDczLCA2OSwgMTI4LCA3NywgCi0gICAgNzMsIDY4LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA3MywgNjgsIDY4LCA3NiwgNjksIDQ1LCA4NywgNjksIDc2LCA4MywgMjAwLCAKLSAgICA3NywgNzMsIDY4LCA2OCwgNzYsIDE5NywgNzcsIDczLCAxOTYsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDY3LCA3OSwgODAsIAotICAgIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCAKLSAgICAyMDcsIDc3LCA3MywgNjcsIDIxMCwgNzcsIDcyLCA5MCwgMTI4LCA3NywgNzIsIDY1LCAxMjgsIDc3LCA3MiwgMTI4LCA3NywgCi0gICAgNzEsIDg1LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4NCwgMTI4LCA3NywgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzcsIDcxLCAKLSAgICA4NSwgODIsIDEyOCwgNzcsIDcxLCA4NSwgODAsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgMTI4LCA3NywgNzEsIDg1LCAxMjgsIDc3LCA3MSwgNzksIDg4LCAxMjgsIAotICAgIDc3LCA3MSwgNzksIDg0LCAxMjgsIDc3LCA3MSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgNzksIDEyOCwgNzcsIDcxLCAyMDcsIAotICAgIDc3LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3NywgNzEsIDczLCA2OSwgMTI4LCA3NywgNzEsIDY5LCA4OCwgMTI4LCA3NywgCi0gICAgNzEsIDY5LCA4MCwgMTI4LCA3NywgNzEsIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDg1LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCAKLSAgICA3OSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgNzAsIDg1LCA3NywgMTI4LCA3NywgNzEsIDY2LCA3OSwgMTI4LCA3NywgNzEsIAotICAgIDY2LCA3MywgMTI4LCA3NywgNzEsIDY2LCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA3OCwgMTI4LCA3NywgCi0gICAgNzEsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgODEsIAotICAgIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgMTI4LCA3NywgNzEsIDY1LCA4OCwgMTI4LCA3NywgNzEsIDY1LCA4NCwgCi0gICAgMTI4LCA3NywgNzEsIDY1LCA4MCwgMTI4LCA3NywgNzEsIDY1LCAxMjgsIDc3LCA3MSwgMTI4LCA3NywgNzAsIDc5LCA3OCwgCi0gICAgMTI4LCA3NywgNzAsIDc5LCAyMDYsIDc3LCA3MCwgNzksIDEyOCwgNzcsIDcwLCA3MywgODksIDY1LCA4MSwgMTI4LCA3NywgCi0gICAgNzAsIDczLCA2OSwgNjksIDEyOCwgNzcsIDcwLCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3MCwgNjksIDg1LCA4MSwgMTI4LCAKLSAgICA3NywgNzAsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA3MCwgNjUsIDY1LCAxMjgsIDc3LCA2OSwgOTAsIDkwLCA3OSwgCi0gICAgMTI4LCA3NywgNjksIDg4LCAxMjgsIDc3LCA2OSwgODUsIDIxMiwgNzcsIDY5LCA4NSwgODEsIDEyOCwgNzcsIDY5LCA4NSwgCi0gICAgNzgsIDc0LCA3OSwgNzcsIDc4LCA2OCwgNjksIDg1LCA4MSwgMTI4LCA3NywgNjksIDg1LCA3OCwgMTI4LCA3NywgNjksIDg0LCAKLSAgICA4MiwgNzksIDEyOCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIDIwNCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NSwgCi0gICAgMTI4LCA3NywgNjksIDg0LCA4MiwgNjksIDg0LCA2OSwgMjExLCA3NywgNjksIDg0LCA3OSwgNjYsIDY5LCA3NiwgODUsIDgzLCAKLSAgICAxMjgsIDc3LCA2OSwgODQsIDY5LCA3NSwgMTI4LCA3NywgNjksIDg0LCA2OSwgNzEsIDEyOCwgNzcsIDY5LCA4NCwgNjUsIAotICAgIDc2LCAxMjgsIDc3LCA2OSwgODQsIDE5MywgNzcsIDY5LCA4MywgODMsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDc3LCA2OSwgCi0gICAgODMsIDgzLCA2NSwgNzEsIDY5LCAxMjgsIDc3LCA2OSwgODMsIDgzLCA2NSwgNzEsIDE5NywgNzcsIDY5LCA4MywgNzksIAotICAgIDEyOCwgNzcsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY5LCA4MywgNzIsIDEyOCwgNzcsIDY5LCA4MiwgNzksIDczLCA4NCwgCi0gICAgNzMsIDE5NSwgNzcsIDY5LCA4MiwgNzUsIDcyLCA2NSwgMTI4LCA3NywgNjksIDgyLCA3NSwgNzIsIDE5MywgNzcsIDY5LCAKLSAgICA4MiwgNzMsIDY4LCA3MywgNjUsIDc4LCA4MywgMTI4LCA3NywgNjksIDgyLCA3MywgMTI4LCA3NywgNjksIDgyLCA3MSwgNjksIAotICAgIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgODksIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgMjE3LCA3NywgCi0gICAgNjksIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc3LCA2OSwgNzgsIDEyOCwgNzcsIDY5LCA3NywgNzksIDEyOCwgNzcsIDY5LCAKLSAgICA3NywgNjYsIDY5LCA4MiwgODMsIDcyLCA3MywgODAsIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3NywgNjksIAotICAgIDc3LCA2NiwgNjksIDIxMCwgNzcsIDY5LCA3NywgNDUsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDc3LCA2OSwgNzcsIDEyOCwgCi0gICAgNzcsIDY5LCAyMDUsIDc3LCA2OSwgNzYsIDc5LCA2OCwgNzMsIDE5NSwgNzcsIDY5LCA3NiwgNzMsIDc1LCAxMjgsIDc3LCAKLSAgICA2OSwgNzMsIDkwLCA3MywgMTI4LCA3NywgNjksIDcxLCA2NSwgODQsIDc5LCA3OCwgMTI4LCA3NywgNjksIDcxLCA2NSwgODAsIAotICAgIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA3NiwgNzMsIDEyOCwgNzcsIDY5LCA2OSwgODQsIDc5LCA4MiwgCi0gICAgODUsIDEyOCwgNzcsIDY5LCA2OSwgODQsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIDg1LCAxMjgsIDc3LCA2OSwgNjksIDc3LCAKLSAgICAxMjgsIDc3LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3NywgNjksIDY4LCA3MywgODUsIDc3LCAxMjgsIDc3LCA2OSwgNjgsIAotICAgIDczLCA4NSwgMjA1LCA3NywgNjksIDY4LCA3MywgNjcsIDczLCA3OCwgNjksIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDY3LCA2NSwgCi0gICAgMjA0LCA3NywgNjksIDY1LCA4NCwgMTI4LCA3NywgNjksIDY1LCAyMTIsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAKLSAgICAxOTYsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxMjgsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDE5NywgNzcsIAotICAgIDY4LCA4NSwgMjA2LCA3NywgMTk2LCA3NywgNjcsIDcyLCAyMTMsIDc3LCA2NywgNzIsIDY1LCAyMDYsIDc3LCAxOTUsIDc3LCAKLSAgICA2NiwgODUsIDc5LCA4MSwgMTI4LCA3NywgNjYsIDg1LCA3OSwgMTI4LCA3NywgNjYsIDg1LCA2OSwgMTI4LCA3NywgNjYsIAotICAgIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDc5LCA3OSwgMTI4LCA3NywgCi0gICAgNjYsIDc5LCAxMjgsIDc3LCA2NiwgNzMsIDg0LCAxMjgsIDc3LCA2NiwgNzMsIDIxMiwgNzcsIDY2LCA3MywgODIsIDczLCAKLSAgICA2OSwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDg4LCAxMjgsIDc3LCA2NiwgNjksIAotICAgIDg1LCA4MiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDc3LCAxMjgsIDc3LCA2NiwgNjksIDgyLCA2NSwgNjksIDEyOCwgCi0gICAgNzcsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDc1LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgNjksIDY5LCAKLSAgICAxMjgsIDc3LCA2NiwgNjksIDEyOCwgNzcsIDY2LCA2NSwgODEsIDEyOCwgNzcsIDY2LCA2NSwgNzgsIDg5LCA3MywgMTI4LCAKLSAgICA3NywgNjYsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA2NSwgNzUsIDY5LCA4NCwgMTI4LCA3NywgNjYsIAotICAgIDY1LCA2NSwgMTI4LCA3NywgNjYsIDY1LCAxOTMsIDc3LCA2NiwgMTkzLCA3NywgNjYsIDUyLCAxMjgsIDc3LCA2NiwgNTEsIAotICAgIDEyOCwgNzcsIDY2LCA1MCwgMTI4LCA3NywgNjYsIDEyOCwgNzcsIDE5NCwgNzcsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA4OSwgMTI4LCA3NywgNjUsIDg4LCA3MywgNzcsIDY1LCAxMjgsIDc3LCA2NSwgODgsIDEyOCwgNzcsIAotICAgIDY1LCA4NSwgMTI4LCA3NywgNjUsIDg0LCA4NCwgNzksIDY3LCA3NSwgMTI4LCA3NywgNjUsIDg0LCA4MiwgNzMsIDg4LCAKLSAgICAxMjgsIDc3LCA2NSwgODQsIDY5LCA4MiwgNzMsIDY1LCA3NiwgODMsIDEyOCwgNzcsIDY1LCA4NCwgMTI4LCA3NywgNjUsIAotICAgIDgzLCAyMTMsIDc3LCA2NSwgODMsIDgzLCA3MywgNzgsIDcxLCAxMjgsIDc3LCA2NSwgODMsIDgzLCA2NSwgNzEsIDY5LCAKLSAgICAxMjgsIDc3LCA2NSwgODMsIDc5LCA4MiwgMTkzLCA3NywgNjUsIDgzLCA3NSwgMTI4LCA3NywgNjUsIDgzLCA3MiwgNzAsIAotICAgIDY1LCA2NSwgODQsIDEyOCwgNzcsIDY1LCA4MywgNzIsIDUwLCAxMjgsIDc3LCA2NSwgODMsIDY3LCA4NSwgNzYsIDczLCA3OCwgCi0gICAgMTk3LCA3NywgNjUsIDgyLCA4OSwgMTI4LCA3NywgNjUsIDgyLCA4NSwgNzUsIDg1LCAxMjgsIDc3LCA2NSwgODIsIDg0LCAKLSAgICA4OSwgODIsIDczLCAxOTMsIDc3LCA2NSwgODIsIDgyLCA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgODIsIDgyLCA3MywgNjUsIAotICAgIDcxLCAxOTcsIDc3LCA2NSwgODIsIDc1LCA2OSwgODIsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MiwgMTI4LCA3NywgCi0gICAgNjUsIDgyLCA3NSwgNDUsIDUxLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTAsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCAKLSAgICA0OSwgMTI4LCA3NywgNjUsIDgyLCA2OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNzIsIDEyOCwgNzcsIDY1LCA4MiwgNjcsIAotICAgIDY1LCA4NCwgNzksIDQ1LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCAKLSAgICA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4MywgNzMsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIAotICAgIDg0LCA2NSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIDg0LCAxOTMsIDc3LCA2NSwgODIsIDEyOCwgNzcsIDY1LCA4MSwgCi0gICAgNjUsIDcwLCAxMjgsIDc3LCA2NSwgODEsIDEyOCwgNzcsIDY1LCA4MCwgNzYsIDE5NywgNzcsIDY1LCA4MCwgNzMsIDgxLCAKLSAgICAxMjgsIDc3LCA2NSwgMjA4LCA3NywgNjUsIDc5LCAxMjgsIDc3LCA2NSwgNzgsIDgzLCA4OSwgNzksIDc4LCAxMjgsIDc3LCAKLSAgICA2NSwgNzgsIDgzLCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMjE4LCA3NywgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA3OCwgNzEsIDY1LCA3NiwgNjUsIDc3LCAxMjgsIDc3LCA2NSwgNzgsIDY4LCA2NSwgNzMsIDc2LCA3MywgCi0gICAgNzgsIDE5OSwgNzcsIDY1LCA3OCwgNjgsIDY1LCA3MywgMTk1LCA3NywgNjUsIDc4LCA2NywgNzIsIDIxMywgNzcsIDY1LCAKLSAgICA3OCwgNjUsIDY3LCA3NiwgNjksIDgzLCAxMjgsIDc3LCA2NSwgNzYsIDg0LCA2OSwgODMsIDE5NywgNzcsIDY1LCA3NiwgNjksIAotICAgIDY5LCA4MiwgNzMsIDEyOCwgNzcsIDY1LCA3NiwgNjksIDEyOCwgNzcsIDY1LCA3NiwgMTk3LCA3NywgNjUsIDc2LCA2NSwgCi0gICAgNzUsIDc5LCAyMDYsIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIDY1LCAxMjgsIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIAotICAgIDE5MywgNzcsIDY1LCA3MywgOTAsIDY5LCAxMjgsIDc3LCA2NSwgNzMsIDg5LCA2NSwgNzcsIDc5LCA3NSwgMTI4LCA3NywgCi0gICAgNjUsIDczLCA4NCwgNjUsIDczLCA3NSwgNzIsIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDgyLCA4NSwgMTI4LCA3NywgNjUsIDczLCAKLSAgICA3NywgODUsIDY1LCA3OCwgMTI4LCA3NywgNjUsIDczLCA3NywgNjUsIDc2LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA3MywgNzYsIAotICAgIDY2LCA3OSwgMjE2LCA3NywgNjUsIDczLCA3NSwgODUsIDgyLCA3OSwgMTI4LCA3NywgNjUsIDczLCA2OCwgNjksIDc4LCAKLSAgICAxMjgsIDc3LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA3MiwgNzQsIDc5LCA3OCwgMTk5LCA3NywgNjUsIDcyLCA3MiwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDY1LCA3NSwgCi0gICAgNzIsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNzcsIDY1LCA3MiwgMTI4LCAKLSAgICA3NywgNjUsIDcxLCA3OCwgNzMsIDcwLCA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgNjksIDgzLCA3MywgMTI4LCA3NywgNjUsIAotICAgIDY5LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NSwgNjksIDc4LCA3NCwgNjksIDg0LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA4NiwgCi0gICAgNjksIDg1LCA4OCwgMTI4LCA3NywgNjUsIDY5LCA3NywgNzUsIDgwLCA2OSwgNzgsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDcxLCAKLSAgICA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NywgNjYsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIAotICAgIDY5LCA3NywgNjYsIDY1LCAxMjgsIDc3LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NSwgNjksIDc2LCA2OSwgNjksIDEyOCwgCi0gICAgNzcsIDY1LCA2OSwgNzUsIDY5LCA4NSwgODAsIDEyOCwgNzcsIDY1LCA2OCwgODksIDY1LCAxMjgsIDc3LCA2NSwgNjgsIDg1LCAKLSAgICAxMjgsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMjAwLCA3NywgNjUsIDY4LCA2OCwgNjUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIAotICAgIDE5MywgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgCi0gICAgNzksIDc4LCA0NSwgNjYsIDgyLCA2OSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NSwgNjcsIAotICAgIDg1LCA4NCwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDIwNiwgCi0gICAgNzcsIDY1LCA2NywgNzIsIDczLCA3OCwgNjksIDEyOCwgNzcsIDY1LCA2NSwgODksIDg5LCA2NSwgNjUsIDEyOCwgNzcsIDY1LCAKLSAgICA2NSwgNzMsIDEyOCwgNzcsIDY1LCA2NSwgMTI4LCA3NywgNjUsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDUyLCAxMjgsIDc3LCAKLSAgICA0OCwgNTIsIDUxLCAxMjgsIDc3LCA0OCwgNTIsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDQ5LCAxMjgsIDc3LCA0OCwgNTIsIAotICAgIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDUyLCA0OCwgMTI4LCA3NywgNDgsIDUxLCA1NywgMTI4LCA3NywgNDgsIDUxLCA1NiwgCi0gICAgMTI4LCA3NywgNDgsIDUxLCA1NSwgMTI4LCA3NywgNDgsIDUxLCA1NCwgMTI4LCA3NywgNDgsIDUxLCA1MywgMTI4LCA3NywgCi0gICAgNDgsIDUxLCA1MiwgMTI4LCA3NywgNDgsIDUxLCA1MSwgNjYsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc3LCAKLSAgICA0OCwgNTEsIDUxLCAxMjgsIDc3LCA0OCwgNTEsIDUwLCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA3NywgNDgsIAotICAgIDUxLCA0OSwgMTI4LCA3NywgNDgsIDUxLCA0OCwgMTI4LCA3NywgNDgsIDUwLCA1NywgMTI4LCA3NywgNDgsIDUwLCA1NiwgCi0gICAgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTYsIDEyOCwgNzcsIDQ4LCA1MCwgNTUsIDEyOCwgNzcsIDQ4LCA1MCwgNTQsIDEyOCwgCi0gICAgNzcsIDQ4LCA1MCwgNTMsIDEyOCwgNzcsIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDUyLCAxMjgsIDc3LCAKLSAgICA0OCwgNTAsIDUxLCAxMjgsIDc3LCA0OCwgNTAsIDUwLCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1MCwgMTI4LCA3NywgNDgsIAotICAgIDUwLCA0OSwgMTI4LCA3NywgNDgsIDUwLCA0OCwgMTI4LCA3NywgNDgsIDQ5LCA1NywgMTI4LCA3NywgNDgsIDQ5LCA1NiwgCi0gICAgMTI4LCA3NywgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDY1LCAKLSAgICAxMjgsIDc3LCA0OCwgNDksIDU0LCAxMjgsIDc3LCA0OCwgNDksIDUzLCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1MywgMTI4LCAKLSAgICA3NywgNDgsIDQ5LCA1MiwgMTI4LCA3NywgNDgsIDQ5LCA1MSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzIsIDEyOCwgNzcsIAotICAgIDQ4LCA0OSwgNTAsIDcxLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MCwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjksIDEyOCwgCi0gICAgNzcsIDQ4LCA0OSwgNTAsIDY4LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NywgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjYsIAotICAgIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDUwLCAxMjgsIDc3LCA0OCwgNDksIDQ5LCAxMjgsIAotICAgIDc3LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA0OCwgMTI4LCA3NywgNDgsIDQ4LCA1NywgMTI4LCA3NywgCi0gICAgNDgsIDQ4LCA1NiwgMTI4LCA3NywgNDgsIDQ4LCA1NSwgMTI4LCA3NywgNDgsIDQ4LCA1NCwgMTI4LCA3NywgNDgsIDQ4LCAKLSAgICA1MywgMTI4LCA3NywgNDgsIDQ4LCA1MiwgMTI4LCA3NywgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgNzcsIDQ4LCA0OCwgNTEsIAotICAgIDEyOCwgNzcsIDQ4LCA0OCwgNTAsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDY2LCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCA2NSwgCi0gICAgMTI4LCA3NywgNDgsIDQ4LCA0OSwgMTI4LCA3NiwgMjE4LCA3NiwgODksIDg5LCAxMjgsIDc2LCA4OSwgODgsIDEyOCwgNzYsIAotICAgIDg5LCA4NCwgMTI4LCA3NiwgODksIDgyLCA4OCwgMTI4LCA3NiwgODksIDgyLCAxMjgsIDc2LCA4OSwgODAsIDEyOCwgNzYsIAotICAgIDg5LCA2OCwgNzMsIDY1LCAyMDYsIDc2LCA4OSwgNjcsIDczLCA2NSwgMjA2LCA3NiwgODgsIDEyOCwgNzYsIDg3LCA3OSwgCi0gICAgNzksIDEyOCwgNzYsIDg3LCA3OSwgMTI4LCA3NiwgODcsIDczLCA3MywgMTI4LCA3NiwgODcsIDczLCAxMjgsIDc2LCA4NywgCi0gICAgNjksIDEyOCwgNzYsIDg3LCA2NSwgNjUsIDEyOCwgNzYsIDg3LCA2NSwgMTI4LCA3NiwgODUsIDg4LCAxMjgsIDc2LCA4NSwgCi0gICAgODUsIDEyOCwgNzYsIDg1LCA4NCwgMTI4LCA3NiwgODUsIDgyLCA4OCwgMTI4LCA3NiwgODUsIDgwLCAxMjgsIDc2LCA4NSwgCi0gICAgNzksIDg4LCAxMjgsIDc2LCA4NSwgNzksIDg0LCAxMjgsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDc2LCA4NSwgNzksIDEyOCwgCi0gICAgNzYsIDg1LCA3OCwgNzEsIDgzLCA3MywgMTI4LCA3NiwgODUsIDc4LCA2NSwgODQsIDE5NywgNzYsIDg1LCAyMDUsIDc2LCAKLSAgICA4NSwgNzYsIDEyOCwgNzYsIDg1LCA3MywgODMsIDEyOCwgNzYsIDg1LCA3MiwgODUsIDgyLCAxMjgsIDc2LCA4NSwgNzIsIAotICAgIDEyOCwgNzYsIDg1LCA3MSwgNzEsIDY1LCA3MSwgNjksIDEyOCwgNzYsIDg1LCA3MSwgNjUsIDc2LCAxMjgsIDc2LCA4NSwgCi0gICAgNzEsIDY1LCAyMDQsIDc2LCA4NSwgNjksIDEyOCwgNzYsIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc2LCA4NSwgNTEsIDEyOCwgCi0gICAgNzYsIDg1LCA1MCwgMTI4LCA3NiwgODUsIDE3OCwgNzYsIDgyLCA3OSwgMTI4LCA3NiwgODIsIDc3LCAxMjgsIDc2LCA4MiwgCi0gICAgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgMTk3LCAKLSAgICA3NiwgNzksIDg4LCAxMjgsIDc2LCA3OSwgODcsIDY5LCA4MiwgNjksIDE5NiwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzYsIAotICAgIDc5LCA4NywgNDUsIDE4NSwgNzYsIDc5LCA4NiwgMTk3LCA3NiwgNzksIDg1LCA4MiwgNjksIDEyOCwgNzYsIDc5LCA4NSwgCi0gICAgNjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDgyLCAxMjgsIDc2LCA3OSwgODUsIDY4LCA3NiwgMjE3LCA3NiwgNzksIDg0LCAKLSAgICA4NSwgODMsIDEyOCwgNzYsIDc5LCA4NCwgMTI4LCA3NiwgNzksIDgyLCA4MiwgODksIDEyOCwgNzYsIDc5LCA4MiwgODIsIAotICAgIDY1LCA3MywgNzgsIDY5LCAxMjgsIDc2LCA3OSwgODEsIDEyOCwgNzYsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCA4NCwgCi0gICAgMTI4LCA3NiwgNzksIDc5LCA4MCwgNjksIDE5NiwgNzYsIDc5LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgMjA4LCA3NiwgCi0gICAgNzksIDc5LCA3OCwgMTI4LCA3NiwgNzksIDc5LCAyMDMsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc5LCA3OCwgODMsIDg1LCAKLSAgICA3NywgMTI4LCA3NiwgNzksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDE5MywgNzYsIDc5LCA3OCwgNzEsIAotICAgIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgODksIDgyLCAxMjgsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCAKLSAgICA2NSwgNzgsIDY3LCA3MiwgNDUsIDgzLCA3OSwgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgCi0gICAgNzIsIDQ1LCA3OSwgODMsIDIxMSwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzcsIAotICAgIDY1LCA2OCwgMjEwLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3MiwgNjUsIDcxLCAKLSAgICA2NSwgNzYsIDIwNCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNjUsIDIxMCwgNzYsIAotICAgIDc5LCA3NywgNzcsIDY1LCA2OSwgMTI4LCA3NiwgNzksIDc3LCAxMjgsIDc2LCA3OSwgMjA1LCA3NiwgNzksIDc2LCA3NiwgCi0gICAgNzMsIDgwLCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3NiwgNzYsIDEyOCwgNzYsIDc5LCA3MSwgMjEwLCA3NiwgNzksIDcxLCAKLSAgICA3OSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNzksIDcxLCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3NiwgNzksIDcxLCAxMjgsIAotICAgIDc2LCA3OSwgNjgsIDY5LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgNzYsIDc5LCA2NywgNzksIDc3LCA3OSwgODQsIDczLCAKLSAgICA4NiwgNjksIDEyOCwgNzYsIDc5LCA2NywgNzUsIDczLCA3OCwgNzEsIDQ1LCA4MywgNzIsIDczLCA3MCwgMjEyLCA3NiwgNzksIAotICAgIDY3LCAyMDMsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA3NiwgNzksIDY1LCAxMjgsIDc2LCA3OCwgMTI4LCA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgNzYsIDc5LCA3OSwgCi0gICAgMTI4LCA3NiwgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDc2LCA3NiwgODUsIDEyOCwgNzYsIDc2LCA3NiwgNzksIDc5LCAKLSAgICAxMjgsIDc2LCA3NiwgNzYsIDc5LCAxMjgsIDc2LCA3NiwgNzYsIDczLCA3MywgMTI4LCA3NiwgNzYsIDc2LCA3MywgMTI4LCAKLSAgICA3NiwgNzYsIDc2LCA2OSwgNjksIDEyOCwgNzYsIDc2LCA3NiwgNjksIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDg1LCAxMjgsIAotICAgIDc2LCA3NiwgNzYsIDY1LCA3MywgMTI4LCA3NiwgNzYsIDc2LCA2NSwgNjUsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDEyOCwgCi0gICAgNzYsIDc2LCA3NiwgMTI4LCA3NiwgNzQsIDg1LCA2OCwgNzMsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDY5LCAxMjgsIDc2LCAKLSAgICA3NCwgMTI4LCA3NiwgNzMsIDg4LCAxMjgsIDc2LCA3MywgODcsIDc4LCAxMjgsIDc2LCA3MywgODYsIDgyLCAxOTcsIDc2LCAKLSAgICA3MywgODQsIDg0LCA3NiwgMTk3LCA3NiwgNzMsIDg0LCA4NCwgNjksIDIxMCwgNzYsIDczLCA4NCwgODIsIDE5MywgNzYsIAotICAgIDczLCA4NCwgMTI4LCA3NiwgNzMsIDgzLCAyMTMsIDc2LCA3MywgODIsIDE5MywgNzYsIDczLCA4MSwgODUsIDczLCAxOTYsIAotICAgIDc2LCA3MywgODEsIDEyOCwgNzYsIDczLCA4MCwgODMsIDg0LCA3MywgNjcsIDc1LCAxMjgsIDc2LCA3MywgNzgsIDc1LCA3MywgCi0gICAgNzgsIDE5OSwgNzYsIDczLCA3OCwgMjAzLCA3NiwgNzMsIDc4LCA3MSwgODMsIDY1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCAKLSAgICA4MywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgMjExLCA3NiwgNzMsIDc4LCA2OSwgNDUsIDU3LCAxMjgsIDc2LCA3MywgNzgsIAotICAgIDY5LCA0NSwgNTUsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA1MSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDQ5LCAKLSAgICAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCA1MCwgMTI4LCA3NiwgNzMsIAotICAgIDc3LCA3NywgODUsIDEyOCwgNzYsIDczLCA3NywgNzcsIDIxMywgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMTk2LCA3NiwgCi0gICAgNzMsIDc3LCA3MywgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NiwgNzMsIDc3LCA3MywgODQsIDEyOCwgNzYsIDczLCAKLSAgICA3NywgNjksIDEyOCwgNzYsIDczLCA3NywgNjYsIDIxMywgNzYsIDczLCA3NiwgODksIDEyOCwgNzYsIDczLCA3NiwgNzMsIAotICAgIDg0LCA3MiwgMTI4LCA3NiwgNzMsIDc2LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzgsIDczLCA3OCwgNzEsIDEyOCwgCi0gICAgNzYsIDczLCA3MSwgNzIsIDg0LCA3MiwgNzksIDg1LCA4MywgNjksIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCAKLSAgICA3MywgNzAsIDY5LCAxMjgsIDc2LCA3MywgNjksIDg4LCAxMjgsIDc2LCA3MywgNjksIDg0LCAxMjgsIDc2LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDc2LCA3MywgNjksIDY5LCAxMjgsIDc2LCA3MywgNjksIDEyOCwgNzYsIDczLCA2OCwgMTI4LCA3NiwgNzMsIAotICAgIDY2LCA4MiwgNjUsIDEyOCwgNzYsIDczLCA2NiwgNjksIDgyLCA4NCwgODksIDEyOCwgNzYsIDczLCA2NSwgNjYsIDczLCA3NiwgCi0gICAgNzMsIDg0LCAyMTcsIDc2LCA3MiwgNzMsIDczLCAxMjgsIDc2LCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIAotICAgIDEyOCwgNzYsIDcyLCA2NSwgMTk5LCA3NiwgNzIsIDY1LCA2NSwgMTI4LCA3NiwgNzIsIDEyOCwgNzYsIDY5LCA5MCwgNzIsIAotICAgIDEyOCwgNzYsIDY5LCA4OCwgMTI4LCA3NiwgNjksIDg2LCA2OSwgMjA0LCA3NiwgNjksIDg1LCA3NywgMTI4LCA3NiwgNjksIAotICAgIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc2LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzYsIDY5LCA4NSwgMTI4LCA3NiwgCi0gICAgNjksIDIxMywgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgODMsIDEyOCwgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgMTI4LCAKLSAgICA3NiwgNjksIDIxMiwgNzYsIDY5LCA4MywgODMsIDY5LCAyMTAsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCA2NSwgNzgsIAotICAgIDEyOCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCAyMDYsIDc2LCA2OSwgODAsIDEyOCwgNzYsIDY5LCA3OSwgCi0gICAgODAsIDY1LCA4MiwgNjgsIDEyOCwgNzYsIDY5LCA3OSwgMTI4LCA3NiwgNjksIDc4LCA4NCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAKLSAgICAyMTAsIDc2LCA2OSwgNzgsIDczLCA4MywgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCA2OSwgNzgsIDY5LCA4MiwgCi0gICAgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDIwMCwgNzYsIDY5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCA2OSwgNzgsIDcxLCAKLSAgICAxOTMsIDc2LCA2OSwgNzcsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDc3LCA3OSwgNzMsIDEyOCwgNzYsIDY5LCA3NiwgNjksIAotICAgIDg0LCAxMjgsIDc2LCA2OSwgNzYsIDY5LCAyMTIsIDc2LCA2OSwgMjAzLCA3NiwgNjksIDczLCA3NywgNzcsIDY1LCAxMjgsIAotICAgIDc2LCA2OSwgNzMsIDc3LCA3NywgMTkzLCA3NiwgNjksIDcxLCA4MywgMTI4LCA3NiwgNjksIDcxLCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDc2LCA2OSwgNzEsIDY5LCA4NCwgNzksIDIxMSwgNzYsIDY5LCA3MSwgMTI4LCA3NiwgNjksIDcwLCA4NCwgODcsIAotICAgIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODQsIDc5LCA0NSwgODIsIDczLCA3MSwgNzIsIDIxMiwgCi0gICAgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgODQsIDY5LCAyMDUsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCAKLSAgICA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgwLCA3OSwgCi0gICAgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgNjgsIDY5LCAxOTYsIDc2LCAKLSAgICA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgCi0gICAgMTk5LCA3NiwgNjksIDcwLCA4NCwgMTI4LCA3NiwgNjksIDY5LCA4MiwgNjUsIDY5LCA4NywgNjUsIDEyOCwgNzYsIDY5LCAKLSAgICA2OSwgNzUsIDEyOCwgNzYsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc2LCA2OSwgNjgsIDcxLCA2OSwgODIsIDEyOCwgNzYsIAotICAgIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgNzAsIDEyOCwgNzYsIDY5LCA2NSwgMTk4LCA3NiwgCi0gICAgNjksIDY1LCA2OCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNjUsIDY4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgMTk2LCAKLSAgICA3NiwgNjgsIDY1LCA3OCwgMTI4LCA3NiwgNjgsIDUwLCAxMjgsIDc2LCA2NywgMjAxLCA3NiwgNjcsIDE5NywgNzYsIDY1LCAKLSAgICA5MCwgMjE3LCA3NiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NiwgNjUsIDg4LCAxMjgsIDc2LCA2NSwgODcsIAotICAgIDEyOCwgNzYsIDY1LCAyMTUsIDc2LCA2NSwgODUsIDc2LCA2NSwgMTI4LCA3NiwgNjUsIDg1LCA3NSwgNjUsIDIxOCwgNzYsIAotICAgIDY1LCA4NCwgNzMsIDc4LCA2NSwgODQsIDE5NywgNzYsIDY1LCA4NCwgNzMsIDc1LCAxMjgsIDc2LCA2NSwgODQsIDY5LCA4MiwgCi0gICAgNjUsIDIwNCwgNzYsIDY1LCA4NCwgMTk3LCA3NiwgNjUsIDgzLCAyMTIsIDc2LCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCAKLSAgICA2NSwgMjA0LCA3NiwgNjUsIDgyLCA3MSwgNjksIDIxMCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAxMjgsIDc2LCA2NSwgODIsIAotICAgIDcxLCAxOTcsIDc2LCA2NSwgODEsIDEyOCwgNzYsIDY1LCA4MCwgNjUsIDgxLCAxMjgsIDc2LCA2NSwgODAsIDEyOCwgNzYsIAotICAgIDY1LCA3OCwgODQsIDY5LCA4MiwgNzgsIDEyOCwgNzYsIDY1LCA3OCwgNzEsIDg1LCA2NSwgNzEsIDE5NywgNzYsIDY1LCA3OCwgCi0gICAgNjksIDgzLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NywgNjksIDY4LCAxMjgsIDc2LCAKLSAgICA2NSwgNzcsIDY5LCAxOTYsIDc2LCA2NSwgNzcsIDY5LCAxMjgsIDc2LCA2NSwgNzcsIDE5NywgNzYsIDY1LCA3NywgNjgsIAotICAgIDY1LCAxMjgsIDc2LCA2NSwgNzcsIDY4LCAxMjgsIDc2LCA2NSwgNzcsIDY2LCA2OCwgMTkzLCA3NiwgNjUsIDc3LCA2NSwgCi0gICAgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzYsIDEyOCwgNzYsIDY1LCAyMDQsIDc2LCA2NSwgNzUsIDc1LCA3MiwgNjUsIDc4LCAKLSAgICA3MSwgODksIDY1LCA3OSwgMTI4LCA3NiwgNjUsIDc0LCA2NSwgNzgsIDg5LCA2NSwgNzYsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIAotICAgIDIwMSwgNzYsIDY1LCA3MiwgODMsIDcyLCA4NSwgMTI4LCA3NiwgNjUsIDcyLCAxMjgsIDc2LCA2NSwgNzEsIDg1LCA4MywgCi0gICAgMTI4LCA3NiwgNjUsIDcxLCAyMTMsIDc2LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3NiwgNjUsIDcxLCA2NSwgMjEwLCA3NiwgCi0gICAgNjUsIDcxLCA2NSwgNjYsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDE5NCwgNzYsIDY1LCA2OSwgODYsIDEyOCwgNzYsIDY1LCAKLSAgICA2OSwgMTI4LCA3NiwgNjUsIDY4LCAyMTcsIDc2LCA2NSwgNjcsIDc1LCAxMjgsIDc2LCA2NSwgNjcsIDY1LCAxMjgsIDc2LCAKLSAgICA2NSwgNjYsIDc5LCA4NSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzYsIDY1LCA2NiwgNzksIDgyLCAxMjgsIDc2LCA2NSwgNjYsIAotICAgIDczLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzYsIDY1LCA2NiwgNzMsIDY1LCAyMDQsIDc2LCA2NSwgCi0gICAgNjYsIDY1LCA4NCwgMTI4LCA3NiwgNjUsIDY1LCA3OCwgNjUsIDY5LCAxMjgsIDc2LCA2NSwgNjUsIDc4LCAxMjgsIDc2LCAKLSAgICA2NSwgNjUsIDc3LCA4NSwgMTI4LCA3NiwgNjUsIDY1LCA3NywgMTI4LCA3NiwgNjUsIDY1LCA3MywgMTI4LCA3NiwgNDgsIAotICAgIDQ4LCA1NCwgNjUsIDEyOCwgNzYsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDc2LCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgCi0gICAgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA3NSwgODksIDg1LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA4OSwgODUsIAotICAgIDEyOCwgNzUsIDg5LCA3OSwgMTI4LCA3NSwgODksIDc2LCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODksIDczLCAxMjgsIAotICAgIDc1LCA4OSwgNjksIDEyOCwgNzUsIDg5LCA2NSwgODQsIDcyLCA3OSwgMjExLCA3NSwgODksIDY1LCA2NSwgMTI4LCA3NSwgCi0gICAgODksIDY1LCAxMjgsIDc1LCA4OCwgODcsIDczLCAxMjgsIDc1LCA4OCwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODgsIDg3LCAKLSAgICA2OSwgMTI4LCA3NSwgODgsIDg3LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCA4NywgNjUsIDEyOCwgNzUsIDg4LCA4NSwgMTI4LCAKLSAgICA3NSwgODgsIDc5LCAxMjgsIDc1LCA4OCwgNzMsIDEyOCwgNzUsIDg4LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA2OSwgMTI4LCAKLSAgICA3NSwgODgsIDY1LCA2NSwgMTI4LCA3NSwgODgsIDY1LCAxMjgsIDc1LCA4NywgODUsIDUxLCA0OSwgNTYsIDEyOCwgNzUsIAotICAgIDg3LCA3OSwgNzksIDEyOCwgNzUsIDg3LCA3OSwgMTI4LCA3NSwgODcsIDczLCA3MywgMTI4LCA3NSwgODcsIDczLCAxMjgsIAotICAgIDc1LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4NywgNjksIDEyOCwgNzUsIDg3LCA2NSwgODksIDEyOCwgNzUsIDg3LCA2NSwgCi0gICAgNjksIDg0LCAxMjgsIDc1LCA4NywgNjUsIDY1LCAxMjgsIDc1LCA4NiwgNjUsIDEyOCwgNzUsIDg2LCAxMjgsIDc1LCA4NSwgCi0gICAgODgsIDEyOCwgNzUsIDg1LCA4NSwgNzIsIDEyOCwgNzUsIDg1LCA4NCwgMTI4LCA3NSwgODUsIDgzLCA3NywgNjUsIDEyOCwgCi0gICAgNzUsIDg1LCA4MywgNzIsIDg1LCA1MCwgMTI4LCA3NSwgODUsIDgyLCA4OCwgMTI4LCA3NSwgODUsIDgyLCA4NSwgOTAsIDY5LCAKLSAgICA3MywgODIsIDc5LCAxMjgsIDc1LCA4NSwgODIsIDg0LCAxMjgsIDc1LCA4NSwgODIsIDc5LCA3OSwgNzgsIDY5LCAxMjgsIAotICAgIDc1LCA4NSwgODIsIDEyOCwgNzUsIDg1LCAyMTAsIDc1LCA4NSwgODEsIDEyOCwgNzUsIDg1LCA3OSwgODgsIDEyOCwgNzUsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzUsIDg1LCA3OSwgMjA4LCA3NSwgODUsIDc5LCA3NywgMTI4LCA3NSwgODUsIDc5LCAxMjgsIAotICAgIDc1LCA4NSwgNzgsIDcxLCAxMjgsIDc1LCA4NSwgNzgsIDY4LCA2OCwgNjUsIDc2LCA3MywgODksIDY1LCAxMjgsIDc1LCA4NSwgCi0gICAgNzYsIDEyOCwgNzUsIDg1LCAyMDQsIDc1LCA4NSwgNjksIDg0LCAxMjgsIDc1LCA4NSwgNTUsIDEyOCwgNzUsIDg1LCA1MiwgCi0gICAgMTI4LCA3NSwgODUsIDE4MCwgNzUsIDg1LCA1MSwgMTI4LCA3NSwgODUsIDE3OSwgNzUsIDg0LCAxMjgsIDc1LCA4MywgODMsIAotICAgIDg1LCA4NSwgMTI4LCA3NSwgODMsIDgzLCA4NSwgMTI4LCA3NSwgODMsIDgzLCA3OSwgNzksIDEyOCwgNzUsIDgzLCA4MywgCi0gICAgNzksIDEyOCwgNzUsIDgzLCA4MywgNzMsIDczLCAxMjgsIDc1LCA4MywgODMsIDczLCAxMjgsIDc1LCA4MywgODMsIDY5LCAKLSAgICA2OSwgMTI4LCA3NSwgODMsIDgzLCA2OSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIAotICAgIDczLCAxMjgsIDc1LCA4MywgODMsIDY1LCA2NSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgMTI4LCA3NSwgODMsIDgzLCAxMjgsIAotICAgIDc1LCA4MywgNzMsIDEyOCwgNzUsIDgyLCA2OSwgNzcsIDY1LCA4MywgODQsIDczLCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgCi0gICAgNzcsIDc5LCA4OSwgODAsIDc5LCA4MiwgODIsIDc5LCA3OSwgNzgsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIAotICAgIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAKLSAgICAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDE5MywgNzUsIDgwLCA4NSwgMTI4LCA3NSwgODAsIDc5LCA4MSwgMTI4LCAKLSAgICA3NSwgODAsIDc5LCA3OSwgMTI4LCA3NSwgODAsIDc5LCAxMjgsIDc1LCA4MCwgNzMsIDEyOCwgNzUsIDgwLCA2OSwgODUsIAotICAgIDg4LCAxMjgsIDc1LCA4MCwgNjksIDY5LCAxMjgsIDc1LCA4MCwgNjksIDEyOCwgNzUsIDgwLCA2NSwgODIsIDY1LCA4MSwgCi0gICAgMTI4LCA3NSwgODAsIDY1LCA3OCwgMTI4LCA3NSwgODAsIDY1LCAxMjgsIDc1LCA3OSwgODgsIDEyOCwgNzUsIDc5LCA4NiwgCi0gICAgODUsIDg1LCAxMjgsIDc1LCA3OSwgODQsIDc5LCAxMjgsIDc1LCA3OSwgODIsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDc5LCAKLSAgICA4MiwgNzksIDc4LCA3MywgODMsIDEyOCwgNzUsIDc5LCA4MiwgNjksIDY1LCAyMDYsIDc1LCA3OSwgODIsIDY1LCA3OCwgNzMsIAotICAgIDE5NSwgNzUsIDc5LCA4MSwgNzgsIDY4LCA3OSwgNzgsIDEyOCwgNzUsIDc5LCA4MCwgODAsIDY1LCAxMjgsIDc1LCA3OSwgCi0gICAgODAsIDEyOCwgNzUsIDc5LCA3OSwgODAsIDc5LCAxMjgsIDc1LCA3OSwgNzksIDc3LCA4NSwgODUsIDg0LCAxMjgsIDc1LCAKLSAgICA3OSwgNzksIDEyOCwgNzUsIDc5LCA3OCwgODQsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIAotICAgIDc3LCAxOTMsIDc1LCA3OSwgNzcsIDIwMSwgNzUsIDc5LCA3NywgNjYsIDg1LCA4NiwgNjUsIDEyOCwgNzUsIDc5LCA3NywgCi0gICAgNjYsIDg1LCA4NiwgMTkzLCA3NSwgNzksIDc3LCA2NiwgMjEzLCA3NSwgNzksIDc1LCA3OSwgMTI4LCA3NSwgNzksIDc1LCAKLSAgICAxMjgsIDc1LCA3OSwgMjAzLCA3NSwgNzksIDczLCAxMjgsIDc1LCA3OSwgMjAxLCA3NSwgNzksIDcyLCAxMjgsIDc1LCA3OSwgCi0gICAgNzEsIDcyLCA3OSwgNzcsIDEyOCwgNzUsIDc5LCA2OSwgODQsIDEyOCwgNzUsIDc5LCA2NSwgNzYsIDY1LCAxMjgsIDc1LCAKLSAgICA3OSwgNjUsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NSwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzUsIAotICAgIDc4LCA3MywgNzAsIDY5LCAxMjgsIDc1LCA3OCwgNzMsIDcwLCAxOTcsIDc1LCA3NywgMTI4LCA3NSwgMjA1LCA3NSwgNzYsIAotICAgIDczLCA4NCwgNzksIDc4LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDc2LCA2NSwgODMsIDc3LCAKLSAgICAxOTMsIDc1LCA3NiwgNjUsIDEyOCwgNzUsIDc2LCAxMjgsIDc1LCA3NSwgODUsIDEyOCwgNzUsIDc1LCA3OSwgMTI4LCA3NSwgCi0gICAgNzUsIDczLCAxMjgsIDc1LCA3NSwgNjksIDY5LCAxMjgsIDc1LCA3NSwgNjksIDEyOCwgNzUsIDc1LCA2NSwgMTI4LCA3NSwgCi0gICAgNzUsIDEyOCwgNzUsIDc0LCA2OSwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCAKLSAgICA4NCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgCi0gICAgNzksIDc1LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDczLCAKLSAgICA4OSwgNjksIDc5LCA3NSwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgCi0gICAgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIAotICAgIDc1LCA3MiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgCi0gICAgNzUsIDczLCA4OSwgNjksIDc5LCAyMDMsIDc1LCA3MywgODgsIDEyOCwgNzUsIDczLCA4NCwgMTI4LCA3NSwgNzMsIDgzLCAKLSAgICA4MywgNzMsIDc4LCAxOTksIDc1LCA3MywgODMsIDgzLCAxMjgsIDc1LCA3MywgODMsIDIxMSwgNzUsIDczLCA4MywgNzMsIAotICAgIDc3LCA1MywgMTI4LCA3NSwgNzMsIDgzLCA3MywgNzcsIDE4MSwgNzUsIDczLCA4MywgNzIsIDEyOCwgNzUsIDczLCA4MywgCi0gICAgNjUsIDc2LCAxMjgsIDc1LCA3MywgODIsIDc5LCA4NywgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDczLCA4MiwgNzksIDc3LCAKLSAgICA2OSwgNjksIDg0LCA3OSwgODIsIDg1LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3MSwgODUsIDgyLCA2NSwgNzcsIDg1LCAxMjgsIAotICAgIDc1LCA3MywgODIsIDc5LCAxMjgsIDc1LCA3MywgODIsIDcxLCA3MiwgNzMsIDIxOCwgNzUsIDczLCA4MSwgMTI4LCA3NSwgCi0gICAgNzMsIDgwLCAxMjgsIDc1LCA3MywgMjA4LCA3NSwgNzMsIDc4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NSwgNzMsIDc4LCAKLSAgICA2OCwgNjksIDgyLCA3MSwgNjUsIDgyLCA4NCwgNjksIDc4LCAxMjgsIDc1LCA3MywgNzcsIDc5LCA3OCwgNzksIDEyOCwgNzUsIAotICAgIDczLCA3MywgMTI4LCA3NSwgNzMsIDcyLCAxMjgsIDc1LCA3MywgNjksIDg4LCAxMjgsIDc1LCA3MywgNjksIDgwLCAxMjgsIAotICAgIDc1LCA3MywgNjksIDY5LCA3NywgMTI4LCA3NSwgNzMsIDY5LCAxMjgsIDc1LCA3MywgNjgsIDEyOCwgNzUsIDczLCAxOTYsIAotICAgIDc1LCA3MywgNjcsIDc1LCAxMjgsIDc1LCA3MiwgOTAsIDEyOCwgNzUsIDcyLCA4NywgNjUsIDczLCAxMjgsIDc1LCA3MiwgCi0gICAgODUsIDY5LCA3OCwgNDUsIDc2LCA4NSwgMTk3LCA3NSwgNzIsIDg1LCA2OSwgMjA2LCA3NSwgNzIsIDg1LCA2OCwgNjUsIDc3LCAKLSAgICAxMjgsIDc1LCA3MiwgODUsIDY1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCA4NSwgMTI4LCA3NSwgNzIsIDc5LCAyMTIsIDc1LCAKLSAgICA3MiwgNzksIDc4LCAxMjgsIDc1LCA3MiwgNzksIDc3LCA4NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgMTI4LCA3NSwgNzIsIAotICAgIDIwNywgNzUsIDcyLCA3NywgMjEzLCA3NSwgNzIsIDczLCA4NCwgMTI4LCA3NSwgNzIsIDczLCA3OCwgODksIDY1LCAxMjgsIAotICAgIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDIwMCwgNzUsIDcyLCA3MywgMTI4LCA3NSwgNzIsIDcyLCA3OSwgMTI4LCA3NSwgCi0gICAgNzIsIDcyLCA2NSwgMTI4LCA3NSwgNzIsIDY5LCA4NCwgNzIsIDEyOCwgNzUsIDcyLCA2OSwgNzMsIDEyOCwgNzUsIDcyLCAKLSAgICA2OSwgNjksIDEyOCwgNzUsIDcyLCA2OSwgMTI4LCA3NSwgNzIsIDY1LCA4MiwgNzksIDgzLCA3MiwgODQsIDcyLCAyMDEsIAotICAgIDc1LCA3MiwgNjUsIDgyLCAxMjgsIDc1LCA3MiwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNzIsIDY1LCA3OCwgMTk5LCA3NSwgCi0gICAgNzIsIDY1LCA3OCwgNjgsIDE5MywgNzUsIDcyLCA2NSwgNzgsIDEyOCwgNzUsIDcyLCA2NSwgNzcsIDg0LCAyMDEsIDc1LCAKLSAgICA3MiwgNjUsIDc1LCA2NSwgODMsIDgzLCA3MywgNjUsIDIwNiwgNzUsIDcyLCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA2NSwgNzIsIAotICAgIDEyOCwgNzUsIDcyLCA2NSwgMjAwLCA3NSwgNzIsIDY1LCA2NSwgMTI4LCA3NSwgNzEsIDEyOCwgNzUsIDY5LCA4OSwgNjcsIAotICAgIDY1LCA4MCwgMTI4LCA3NSwgNjksIDg5LCA2NywgNjUsIDIwOCwgNzUsIDY5LCA4OSwgNjYsIDc5LCA2NSwgODIsIDY4LCAKLSAgICAxMjgsIDc1LCA2OSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODksIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODMsIAotICAgIDcyLCA2OSwgODUsIDY1LCA2OSwgODAsIDEyOCwgNzUsIDY5LCA4NSwgODMsIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgCi0gICAgODAsIDg1LCA4MSwgMTI4LCA3NSwgNjksIDg1LCA3OSwgMjEyLCA3NSwgNjksIDg1LCA3NywgMTI4LCA3NSwgNjksIDg1LCAKLSAgICA3NSwgNjksIDg1LCA4NCwgNzgsIDY4LCA2NSwgMTI4LCA3NSwgNjksIDg1LCA3NSwgNjUsIDgxLCAxMjgsIDc1LCA2OSwgODUsIAotICAgIDY1LCA2OSwgODQsIDc3LCA2OSwgODUsIDc4LCAxMjgsIDc1LCA2OSwgODUsIDY1LCA2OSwgODIsIDczLCAxMjgsIDc1LCA2OSwgCi0gICAgODQsIDg0LCAyMDEsIDc1LCA2OSwgODMsIDcyLCA1MCwgMTI4LCA3NSwgNjksIDgyLCA2OSwgODQsIDEyOCwgNzUsIDY5LCAKLSAgICA3OSwgODcsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgNjksIDc4LCA4NCwgNzMsIAotICAgIDc3LCA2NSwgODQsIDE5MywgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgMTkzLCA3NSwgNjksIDc4LCA2NSwgODQsIDEyOCwgCi0gICAgNzUsIDY5LCA3OCwgMTI4LCA3NSwgNjksIDIwNiwgNzUsIDY5LCA3NywgODAsIDg1LCA3NiwgMTI4LCA3NSwgNjksIDc3LCAKLSAgICA4MCwgODUsIDIwNCwgNzUsIDY5LCA3NywgODAsIDc2LCA3MywgMTI4LCA3NSwgNjksIDc3LCA4MCwgNzYsIDIwMSwgNzUsIAotICAgIDY5LCA3NywgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjksIDc3LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgCi0gICAgNjksIDc2LCA4NiwgNzMsIDIwNiwgNzUsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDc1LCA2OSwgNzIsIDY5LCAyMDAsIDc1LCAKLSAgICA2OSwgNzIsIDEyOCwgNzUsIDY5LCA3MCwgODUsIDc2LCA2NSwgMTI4LCA3NSwgNjksIDY5LCA4MywgODUsIDEyOCwgNzUsIAotICAgIDY5LCA2OSwgODAsIDczLCA3OCwgMTk5LCA3NSwgNjksIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY3LCA2NSwgNzYsIDEyOCwgCi0gICAgNzUsIDY2LCAxMjgsIDc1LCA2NSwgOTAsIDY1LCA3NSwgMjAwLCA3NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCAKLSAgICA3NSwgNjUsIDg5LCA2NSwgMjAwLCA3NSwgNjUsIDg4LCAxMjgsIDc1LCA2NSwgODcsIDczLCAxMjgsIDc1LCA2NSwgODYsIAotICAgIDg5LCA3NSwgNjUsIDEyOCwgNzUsIDY1LCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODUsIDIwNiwgNzUsIDY1LCA4NSwgCi0gICAgMTI4LCA3NSwgNjUsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIDg0LCA3MiwgNzMsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDY1LCAKLSAgICA4NCwgNzIsIDY1LCA3NSwgMTkzLCA3NSwgNjUsIDg0LCA2NSwgODYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA2NSwgODQsIAotICAgIDY1LCA4NiwgMTkzLCA3NSwgNjUsIDg0LCA2NSwgNzUsIDY1LCA3OCwgNjUsIDQ1LCA3MiwgNzMsIDgyLCA2NSwgNzEsIDY1LCAKLSAgICA3OCwgMTkzLCA3NSwgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzUsIDY1LCA4MywgODIsIDY1LCA4NCwgNjUsIAotICAgIDIwNiwgNzUsIDY1LCA4MywgODIsIDY1LCAxMjgsIDc1LCA2NSwgODMsIDgyLCAxOTMsIDc1LCA2NSwgODMsIDc1LCA2NSwgCi0gICAgNzYsIDEyOCwgNzUsIDY1LCA4MywgNzUsIDY1LCAyMDQsIDc1LCA2NSwgODMsIDcyLCA3NywgNzMsIDgyLCAyMDEsIDc1LCAKLSAgICA2NSwgODIsIDgzLCA3MiwgNjUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDgyLCA3OSwgODIsIDczLCA3MywgMTI4LCA3NSwgNjUsIAotICAgIDgyLCAyMDcsIDc1LCA2NSwgODIsIDY5LCAyMDYsIDc1LCA2NSwgODIsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA2NSwgCi0gICAgODIsIDY1LCA3OCwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgNzUsIAotICAgIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY1LCA4MCwgODAsIDY1LCAKLSAgICAxMjgsIDc1LCA2NSwgODAsIDgwLCAxOTMsIDc1LCA2NSwgODAsIDc5LCAxMjgsIDc1LCA2NSwgODAsIDcyLCAxMjgsIDc1LCAKLSAgICA2NSwgODAsIDY1LCA3NiwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDc4LCA4NCwgNjUsIDc0LCAxOTMsIAotICAgIDc1LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCA2NSwgNzgsIDE5OSwgNzUsIDY1LCA3OCwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgCi0gICAgNjUsIDc3LCA1MiwgMTI4LCA3NSwgNjUsIDc3LCA1MCwgMTI4LCA3NSwgNjUsIDc3LCAxMjgsIDc1LCA2NSwgNzUsIDc5LCAKLSAgICAxMjgsIDc1LCA2NSwgNzUsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIDc1LCA2NSwgNzUsIDEyOCwgNzUsIDY1LCAyMDMsIDc1LCAKLSAgICA2NSwgNzMsIDg0LCA3MiwgMjAxLCA3NSwgNjUsIDczLCA4MiwgNzMsIDEyOCwgNzUsIDY1LCA3MywgMTI4LCA3NSwgNjUsIAotICAgIDIwMSwgNzUsIDY1LCA3MCwgNjUsIDEyOCwgNzUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDE5OCwgNzUsIDY1LCA2OCwgNTMsIAotICAgIDEyOCwgNzUsIDY1LCA2OCwgMTgxLCA3NSwgNjUsIDY4LCA1MiwgMTI4LCA3NSwgNjUsIDY4LCA1MSwgMTI4LCA3NSwgNjUsIAotICAgIDY4LCAxNzksIDc1LCA2NSwgNjgsIDUwLCAxMjgsIDc1LCA2NSwgNjgsIDEyOCwgNzUsIDY1LCA2NiwgMTkzLCA3NSwgNjUsIAotICAgIDY2LCAxMjgsIDc1LCA2NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3NSwgNjUsIDY1LCA3MCwgCi0gICAgMTI4LCA3NSwgNjUsIDUwLCAxMjgsIDc1LCA2NSwgMTc4LCA3NSwgNDgsIDQ4LCA1NiwgMTI4LCA3NSwgNDgsIDQ4LCA1NSwgCi0gICAgMTI4LCA3NSwgNDgsIDQ4LCA1NCwgMTI4LCA3NSwgNDgsIDQ4LCA1MywgMTI4LCA3NSwgNDgsIDQ4LCA1MiwgMTI4LCA3NSwgCi0gICAgNDgsIDQ4LCA1MSwgMTI4LCA3NSwgNDgsIDQ4LCA1MCwgMTI4LCA3NSwgNDgsIDQ4LCA0OSwgMTI4LCA3NCwgODcsIDY1LCAKLSAgICAxMjgsIDc0LCA4NSwgODUsIDEyOCwgNzQsIDg1LCA4NCwgMTI4LCA3NCwgODUsIDgzLCA4NCwgNzMsIDcwLCA3MywgNjcsIAotICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NCwgODUsIDgwLCA3MywgODQsIDY5LCA4MiwgMTI4LCA3NCwgODUsIDc5LCA4NCwgCi0gICAgMTI4LCA3NCwgODUsIDc5LCA4MCwgMTI4LCA3NCwgODUsIDc4LCA3OSwgMTI4LCA3NCwgODUsIDc4LCA2OSwgMTI4LCA3NCwgCi0gICAgODUsIDc2LCA4OSwgMTI4LCA3NCwgODUsIDY5LCA4NSwgNzMsIDEyOCwgNzQsIDg1LCA2OCwgODUsIDc2LCAxMjgsIDc0LCAKLSAgICA4NSwgNjgsIDcxLCA2OSwgMTI4LCA3NCwgODUsIDY4LCA2OSwgNzksIDQ1LCA4MywgODAsIDY1LCA3OCwgNzMsIDgzLCAyMDAsIAotICAgIDc0LCA3OSwgODksIDc5LCA4NSwgMjExLCA3NCwgNzksIDg5LCAxMjgsIDc0LCA3OSwgODYsIDY5LCAxMjgsIDc0LCA3OSwgCi0gICAgMjEyLCA3NCwgNzksIDc4LCA3MSwgMTI4LCA3NCwgNzksIDc4LCAxOTMsIDc0LCA3OSwgNzUsIDY5LCA4MiwgMTI4LCA3NCwgCi0gICAgNzksIDczLCA3OCwgNjksIDY4LCAxMjgsIDc0LCA3OSwgNzMsIDc4LCAxMjgsIDc0LCA3OSwgNjUsIDEyOCwgNzQsIDc0LCAKLSAgICA4OSwgODgsIDEyOCwgNzQsIDc0LCA4OSwgODQsIDEyOCwgNzQsIDc0LCA4OSwgODAsIDEyOCwgNzQsIDc0LCA4OSwgMTI4LCAKLSAgICA3NCwgNzQsIDg1LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA4NCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzQsIAotICAgIDc0LCA4NSwgODIsIDEyOCwgNzQsIDc0LCA4NSwgODAsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc0LCA3NCwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgMTI4LCA3NCwgNzQsIDg1LCAxMjgsIDc0LCA3NCwgNzksIDg4LCAKLSAgICAxMjgsIDc0LCA3NCwgNzksIDg0LCAxMjgsIDc0LCA3NCwgNzksIDgwLCAxMjgsIDc0LCA3NCwgNzksIDEyOCwgNzQsIDc0LCAKLSAgICA3MywgODgsIDEyOCwgNzQsIDc0LCA3MywgODQsIDEyOCwgNzQsIDc0LCA3MywgODAsIDEyOCwgNzQsIDc0LCA3MywgNjksIAotICAgIDg4LCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4NCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODAsIDEyOCwgNzQsIDc0LCA3MywgCi0gICAgNjksIDEyOCwgNzQsIDc0LCA3MywgMTI4LCA3NCwgNzQsIDY5LCA2OSwgMTI4LCA3NCwgNzQsIDY5LCAxMjgsIDc0LCA3NCwgCi0gICAgNjUsIDEyOCwgNzQsIDczLCA3NiwgMTI4LCA3NCwgNzMsIDczLCAxMjgsIDc0LCA3MywgNzIsIDg2LCA2NSwgNzcsIDg1LCAKLSAgICA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NCwgNzMsIDY1LCAxMjgsIDc0LCA3MiwgNzksIDEyOCwgNzQsIDcyLCA2OSwgNzIsIAotICAgIDEyOCwgNzQsIDcyLCA2NSwgNzgsIDEyOCwgNzQsIDcyLCA2NSwgNzcsIDEyOCwgNzQsIDcyLCA2NSwgNjUsIDEyOCwgNzQsIAotICAgIDcyLCA2NSwgMTI4LCA3NCwgNjksIDg1LCAxMjgsIDc0LCA2OSwgODIsIDg1LCA4MywgNjUsIDc2LCA2OSwgNzcsIDEyOCwgCi0gICAgNzQsIDY5LCA4MiwgNjUsIDIwNiwgNzQsIDY5LCA4MiwgNjUsIDEyOCwgNzQsIDY5LCA4MiwgMTI4LCA3NCwgNjksIDcyLCAKLSAgICAxMjgsIDc0LCA2OSwgMjAwLCA3NCwgNjksIDcxLCA3OSwgNzEsIDY1LCA3OCwgMTI4LCA3NCwgNjksIDY5LCA3NywgMTI4LCAKLSAgICA3NCwgNjksIDY1LCA3OCwgODMsIDEyOCwgNzQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzQsIDY1LCA4NiwgNzMsIAotICAgIDg5LCA2NSwgNzgsIDczLCAxMjgsIDc0LCA2NSwgODUsIDEyOCwgNzQsIDY1LCA4MiwgMTI4LCA3NCwgNjUsIDgwLCA2NSwgCi0gICAgNzgsIDY5LCA4MywgMTk3LCA3NCwgNjUsIDgwLCA2NSwgNzgsIDEyOCwgNzQsIDY1LCA3OCwgODUsIDY1LCA4MiwgODksIAotICAgIDEyOCwgNzQsIDY1LCA3NiwgNzYsIDY1LCA3NCwgNjUsIDc2LCA2NSwgNzYsIDc5LCA4NSwgNzIsIDc5LCA4NSwgMTI4LCA3NCwgCi0gICAgNjUsIDczLCAxMjgsIDc0LCA2NSwgNzIsIDEyOCwgNzQsIDY1LCA2OCwgNjksIDEyOCwgNzQsIDY1LCA2NywgNzUsIDQ1LCAKLSAgICA3OSwgNDUsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIDc0LCA2NSwgNjcsIDIwMywgNzQsIDQ1LCA4MywgNzMsIAotICAgIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDIwMiwgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgNjUsIDEyOCwgCi0gICAgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgMTkzLCA3MywgOTAsIDcyLCA2OSwgMTI4LCA3MywgOTAsIDY1LCA3NSwgNjUsIDg5LCAKLSAgICAxOTMsIDczLCA4OSwgNjksIDc1LCAxMjgsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDg1LCA3NCwgNjUsIAotICAgIDEyOCwgNzMsIDg1LCAxMjgsIDczLCA4NCwgMjExLCA3MywgODQsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIAotICAgIDg0LCA2OSwgNzcsIDEyOCwgNzMsIDgzLCA4MywgNzIsIDY1LCA4MiwgMTI4LCA3MywgODMsIDc5LCA3OCwgMTI4LCA3MywgCi0gICAgODMsIDc5LCAyMDYsIDczLCA4MywgNjksIDc4LCA0NSwgNzMsIDgzLCA2OSwgNzgsIDEyOCwgNzMsIDgzLCA2NSwgNzUsIDczLCAKLSAgICAxOTMsIDczLCA4MywgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MywgODIsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzMsIDgyLCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgODIsIDc5LCA3OCwgNDUsIDY3LCA3OSwgCi0gICAgODAsIDgwLCA2OSwgMjEwLCA3MywgODIsIDc5LCA3OCwgMTI4LCA3MywgNzksIDg0LCA3MywgNzAsIDczLCA2OSwgMTk2LCAKLSAgICA3MywgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDczLCA3OSwgODQsIDY1LCAxMjgsIDczLCA3OSwgODQsIDE5MywgNzMsIAotICAgIDc5LCA4MiwgMTI4LCA3MywgNzksIDY4LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA3MywgNzgsIDg2LCA3MywgODMsIDczLCA2NiwgCi0gICAgNzYsIDE5NywgNzMsIDc4LCA4NiwgNjksIDgyLCA4NCwgNjksIDY4LCAxMjgsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCAKLSAgICAxOTYsIDczLCA3OCwgODYsIDY5LCA4MiwgODMsIDE5NywgNzMsIDc4LCA4NCwgODIsIDc5LCA2OCwgODUsIDY3LCA2OSwgODIsIAotICAgIDEyOCwgNzMsIDc4LCA4NCwgNzMsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgODksIDc2LCA3NiwgNjUsIDY2LCA3MywgCi0gICAgMTk1LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCAKLSAgICA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgCi0gICAgNzgsIDE5OSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MiwgNzksIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDczLCA3OCwgODQsIDY5LCAKLSAgICA4MiwgODAsIDc5LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzksIDY3LCA3NSwgCi0gICAgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgNzMsIDc4LCA4NCwgNjksIDgyLCAKLSAgICA3NiwgNjUsIDY3LCA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDczLCA3OSwgMjEwLCA3MywgNzgsIDg0LCA2OSwgODIsIAotICAgIDY5LCA4MywgMjEyLCA3MywgNzgsIDg0LCA2OSwgODIsIDY3LCA2NSwgNzYsIDY1LCA4NCwgNjksIDEyOCwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA3NiwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgCi0gICAgMjA0LCA3MywgNzgsIDgzLCA4NSwgNzYsIDY1LCAyMTAsIDczLCA3OCwgODMsIDg0LCA4MiwgODUsIDc3LCA2OSwgNzgsIDg0LCAKLSAgICA2NSwgMjA0LCA3MywgNzgsIDgzLCA3MywgNjgsIDY5LCAxMjgsIDczLCA3OCwgODMsIDY5LCA4MiwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA3MywgNzgsIDgzLCA2OSwgNjcsIDg0LCAxMjgsIDczLCA3OCwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAKLSAgICA3OCwgNjUsIDIwNCwgNzMsIDc4LCA4MCwgODUsIDIxMiwgNzMsIDc4LCA3OCwgNzksIDY3LCA2OSwgNzgsIDY3LCA2OSwgCi0gICAgMTI4LCA3MywgNzgsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDc4LCA2OSwgODIsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDIxMCwgCi0gICAgNzMsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDczLCA3OCwgNzMsIDEyOCwgNzMsIDc4LCAKLSAgICA3MiwgNzMsIDY2LCA3MywgMjEyLCA3MywgNzgsIDcyLCA2OSwgODIsIDY5LCA3OCwgMjEyLCA3MywgNzgsIDcxLCA4NywgNjUsIAotICAgIDkwLCAxMjgsIDczLCA3OCwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgNzAsIDc2LCA4NSwgCi0gICAgNjksIDc4LCA2NywgNjksIDEyOCwgNzMsIDc4LCA3MCwgNzMsIDc4LCA3MywgODQsIDg5LCAxMjgsIDczLCA3OCwgNzAsIDczLCAKLSAgICA3OCwgNzMsIDg0LCAyMTcsIDczLCA3OCwgNjgsIDg1LCA4MywgODQsIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc4LCA2OCwgNzMsIAotICAgIDgyLCA2OSwgNjcsIDIxMiwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3MywgNzgsIDY4LCA3MywgCi0gICAgNjcsIDY1LCA4NCwgNzksIDIxMCwgNzMsIDc4LCA2OCwgNzMsIDE5NSwgNzMsIDc4LCA2OCwgNzMsIDY1LCAyMDYsIDczLCAKLSAgICA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3MywgNzgsIDY4LCA2OSwgODAsIDY5LCA3OCwgNjgsIDY5LCA3OCwgMjEyLCA3MywgNzgsIAotICAgIDY3LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDczLCA3OCwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMjExLCA3MywgCi0gICAgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDEyOCwgNzMsIDc4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA4NCwgMTk3LCAKLSAgICA3MywgNzgsIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA3MywgNzgsIDY3LCA3NiwgODUsIDY4LCA3MywgNzgsIDE5OSwgNzMsIAotICAgIDc4LCA2NywgNzIsIDEyOCwgNzMsIDc4LCA2NiwgNzksIDIxNiwgNzMsIDc4LCA2NSwgODAsIDEyOCwgNzMsIDc4LCA0NSwgCi0gICAgNjUsIDc2LCA2NSwgNzAsIDEyOCwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc3LCA4MCwgNjksIDgyLCAKLSAgICA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIDEyOCwgNzMsIAotICAgIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA3MywgNzcsIDc4LCAxMjgsIDczLCA3NywgNzMsIDgzLCA2OSwgCi0gICAgNzksIDIxMSwgNzMsIDc3LCA3MywgNzgsIDUxLCAxMjgsIDczLCA3NywgNzMsIDc4LCAxMjgsIDczLCA3NywgNzMsIDIwNiwgCi0gICAgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIAotICAgIDgyLCA2NSwgMTI4LCA3MywgNzcsIDczLCA3MCwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgNjgsIDczLCA2NSwgCi0gICAgODIsIDcxLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA2NSwgNzEsIDE5NywgNzMsIDc2LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDczLCA3NiwgODUsIDg5LCAxMjgsIDczLCA3NiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIAotICAgIDc2LCA4NSwgODQsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgCi0gICAgNTEsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDIxMywgNzMsIDc2LCAKLSAgICA1MCwgMTI4LCA3MywgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDE5MywgNzMsIDc0LCAxMjgsIDczLCAKLSAgICA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3MSwgNzMsIDEyOCwgNzMsIDcxLCAyMDEsIDczLCA3MSwgNzEsIAotICAgIDg3LCA4MywgMTI4LCA3MywgNzAsIDczLCA3OCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgCi0gICAgODUsIDg0LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDczLCAKLSAgICA2OSwgODUsIDc4LCA3MSwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3MywgCi0gICAgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKLSAgICAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIAotICAgIDcxLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDczLCAKLSAgICA2OSwgODUsIDY3LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIAotICAgIDczLCA2OSwgODUsIDc4LCAxOTksIDczLCA2OCwgNzYsIDY5LCAxMjgsIDczLCA2OCwgNzMsIDc3LCAxMjgsIDczLCA2OCwgCi0gICAgNzMsIDIwNSwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NywgNDgsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDY4LCA1NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA2NywgNjUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDY4LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU1LCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NSwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDU0LCA2OCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgNTEsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDQ5LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU1LCA0OCwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNzAsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDY5LCA1NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNTAsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU0LCA1NCwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNTMsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUzLCA1NywgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgNTMsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNTAsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUwLCA1MiwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA3MCwgNTYsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjgsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDU3LCA0OSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NiwgNzAsIDQ4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTMsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUyLCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA1MiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNTEsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUxLCA2NywgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNjgsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA1MCwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNDksIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA2NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNTYsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDczLCA2NywgNzIsIDc5LCA4NSwgMTI4LCA3MywgCi0gICAgNjcsIDcyLCA3OSwgODMsIDEyOCwgNzMsIDY3LCA3MiwgNzMsIDc3LCA2NSwgODQsIDc5LCA4MywgMTI4LCA3MywgNjcsIDcyLCAKLSAgICA2NSwgNjgsIDczLCA3OCwgMTI4LCA3MywgNjcsIDY5LCA3NiwgNjUsIDc4LCA2OCwgNzMsIDY3LCA0NSwgODksIDgyLCAxMjgsIAotICAgIDczLCA2NiwgNzMsIDcwLCA3MywgNzYsIDczLCAxMjgsIDczLCA2NSwgODUsIDY4LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA1MywgCi0gICAgMTI4LCA3MywgNDgsIDQ5LCA1MiwgMTI4LCA3MywgNDgsIDQ5LCA1MSwgMTI4LCA3MywgNDgsIDQ5LCA1MCwgMTI4LCA3MywgCi0gICAgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDEyOCwgNzMsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDczLCAKLSAgICA0OCwgNDksIDQ4LCAxMjgsIDczLCA0OCwgNDgsIDU3LCA2NSwgMTI4LCA3MywgNDgsIDQ4LCA1NywgMTI4LCA3MywgNDgsIAotICAgIDQ4LCA1NiwgMTI4LCA3MywgNDgsIDQ4LCA1NSwgMTI4LCA3MywgNDgsIDQ4LCA1NCwgMTI4LCA3MywgNDgsIDQ4LCA1MywgCi0gICAgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgNTMsIDEyOCwgNzMsIDQ4LCA0OCwgNTIsIDEyOCwgNzMsIDQ4LCA0OCwgNTEsIDEyOCwgCi0gICAgNzMsIDQ4LCA0OCwgNTAsIDEyOCwgNzMsIDQ4LCA0OCwgNDksIDEyOCwgNzMsIDQ1LCA4OSwgODUsIDEyOCwgNzMsIDQ1LCAKLSAgICA4OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCAxMjgsIDczLCA0NSwgODksIAotICAgIDY1LCA2OSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgNDUsIDc5LCAxMjgsIDczLCA0NSwgODksIDY1LCAxMjgsIDczLCA0NSwgCi0gICAgNzksIDQ1LCA3MywgMTI4LCA3MywgNDUsIDc5LCAxMjgsIDczLCA0NSwgNjksIDg1LCAxMjgsIDczLCA0NSwgNjYsIDY5LCAKLSAgICA2NSwgNzcsIDEyOCwgNzMsIDQ1LCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgNzMsIDQ1LCA2NSwgMTI4LCA3MiwgOTAsIAotICAgIDkwLCA5MCwgNzEsIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA5MCwgODAsIDEyOCwgNzIsIDkwLCA5MCwgCi0gICAgMTI4LCA3MiwgOTAsIDg3LCA3MSwgMTI4LCA3MiwgOTAsIDg3LCAxMjgsIDcyLCA5MCwgODQsIDEyOCwgNzIsIDkwLCA3MSwgCi0gICAgMTI4LCA3MiwgODksIDgzLCA4NCwgNjksIDgyLCA2OSwgODMsIDczLCAyMTEsIDcyLCA4OSwgODAsIDc5LCA2OCwgNzMsIDY1LCAKLSAgICA4MywgODQsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzIsIAotICAgIDg5LCA4MCwgNzIsIDY5LCA3OCwgNDUsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCAKLSAgICAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgMjA2LCA3MiwgODgsIDg3LCA3MSwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODgsIAotICAgIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4MCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgCi0gICAgMTI4LCA3MiwgODgsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDc5LCA4MCwgMTI4LCA3MiwgCi0gICAgODgsIDc5LCAxMjgsIDcyLCA4OCwgNzMsIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDg0LCAxMjgsIDcyLCA4OCwgNzMsIDgwLCAKLSAgICAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODQsIDEyOCwgNzIsIDg4LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCAxMjgsIDcyLCA4OCwgNzMsIDEyOCwgNzIsIDg4LCA2OSwgODgsIDEyOCwgNzIsIAotICAgIDg4LCA2OSwgODAsIDEyOCwgNzIsIDg4LCA2OSwgMTI4LCA3MiwgODgsIDY1LCA4OCwgMTI4LCA3MiwgODgsIDY1LCA4NCwgCi0gICAgMTI4LCA3MiwgODgsIDY1LCA4MCwgMTI4LCA3MiwgODgsIDY1LCAxMjgsIDcyLCA4NywgODUsIDEyOCwgNzIsIDg3LCA2NSwgCi0gICAgNzMsIDgyLCAxMjgsIDcyLCA4NiwgMTI4LCA3MiwgODUsIDgzLCA3MiwgNjksIDE5NiwgNzIsIDg1LCA4MiwgNjUsIDc4LCAKLSAgICAxMjgsIDcyLCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDY4LCAxMjgsIDcyLCA4NSwgNzgsIAotICAgIDY4LCA4MiwgNjksIDE5NiwgNzIsIDg1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCA2NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgCi0gICAgNjUsIDIwNiwgNzIsIDg1LCA3NiwgNTAsIDEyOCwgNzIsIDg1LCA3MywgNzMsIDg0LCA3OSwgMTI4LCA3MiwgODUsIDY2LCAKLSAgICA1MCwgMTI4LCA3MiwgODUsIDY2LCAxNzgsIDcyLCA4NSwgNjYsIDEyOCwgNzIsIDg1LCA2NSwgODIsIDY1LCA2OCwgNjgsIAotICAgIDc5LCAxMjgsIDcyLCA4NCwgODMsIDEyOCwgNzIsIDg0LCA3NCwgMTI4LCA3MiwgODIsIDg5LCA4NiwgNzgsIDczLCAxOTMsIAotICAgIDcyLCA4MCwgODcsIDcxLCAxMjgsIDcyLCA4MCwgNjUsIDEyOCwgNzIsIDgwLCAxMjgsIDcyLCA3OSwgODUsIDgzLCAxOTcsIAotICAgIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgODMsIDEyOCwgNzIsIDc5LCA4NSwgODIsIDcxLCA3NiwgNjUsIDgzLCAKLSAgICAyMTEsIDcyLCA3OSwgODUsIDgyLCAxMjgsIDcyLCA3OSwgODUsIDIxMCwgNzIsIDc5LCA4NCwgNjksIDc2LCAxMjgsIDcyLCAKLSAgICA3OSwgODQsIDY1LCAxMjgsIDcyLCA3OSwgODMsIDgwLCA3MywgODQsIDY1LCA3NiwgMTI4LCA3MiwgNzksIDgyLCA4MywgNjksIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgODMsIDE5NywgNzIsIDc5LCA4MiwgNzgsIDgzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA3NiwgMjE3LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA1NCwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1NCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgCi0gICAgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIAotICAgIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCAKLSAgICA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OSwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OCwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAotICAgIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCi0gICAgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA1MiwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MiwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgCi0gICAgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIAotICAgIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCAKLSAgICA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MiwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MSwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAotICAgIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCi0gICAgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA0OSwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA0OSwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgCi0gICAgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIAotICAgIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCAKLSAgICA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA0OCwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1NCwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgMTI4LCA3MiwgNzksIDgyLCA3MywgMTI4LCA3MiwgNzksIDgyLCAxOTMsIDcyLCA3OSwgNzksIAotICAgIDgyLCA4NSwgMTI4LCA3MiwgNzksIDc5LCA4MCwgMTI4LCA3MiwgNzksIDc5LCA3OCwgMTI4LCA3MiwgNzksIDc5LCA3NSwgCi0gICAgNjksIDE5NiwgNzIsIDc5LCA3OCwgNjksIDg5LCA2NiwgNjksIDY5LCAxMjgsIDcyLCA3OSwgNzgsIDY5LCAyMTcsIDcyLCAKLSAgICA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDY3LCAxMjgsIDcyLCA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgCi0gICAgNzMsIDE5NSwgNzIsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDc5LCA3NiwgNjgsIDczLCA3OCwgMTk5LCA3MiwgNzksIDc2LCAKLSAgICA2NSwgNzcsIDEyOCwgNzIsIDc5LCA3NiwgNjUsIDIwNSwgNzIsIDc5LCA3NSwgNjUsIDEyOCwgNzIsIDc5LCA3MywgMTI4LCAKLSAgICA3MiwgNzksIDY3LCA3MiwgNzksIDEyOCwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNzIsIDc4LCA4NSwgNzksIDg4LCAxMjgsIAotICAgIDcyLCA3OCwgODUsIDc5LCAxMjgsIDcyLCA3OCwgNzksIDg4LCAxMjgsIDcyLCA3OCwgNzksIDg0LCAxMjgsIDcyLCA3OCwgCi0gICAgNzksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDg0LCAxMjgsIDcyLCA3OCwgNzMsIDgwLCAKLSAgICAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODQsIDEyOCwgNzIsIDc4LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCAxMjgsIDcyLCA3OCwgNzMsIDEyOCwgNzIsIDc4LCA2OSwgODgsIDEyOCwgNzIsIAotICAgIDc4LCA2OSwgODAsIDEyOCwgNzIsIDc4LCA2OSwgMTI4LCA3MiwgNzgsIDY1LCA4OCwgMTI4LCA3MiwgNzgsIDY1LCA4NCwgCi0gICAgMTI4LCA3MiwgNzgsIDY1LCA4MCwgMTI4LCA3MiwgNzgsIDY1LCAxMjgsIDcyLCA3NywgODksIDg4LCAxMjgsIDcyLCA3NywgCi0gICAgODksIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg5LCA4MiwgMTI4LCA3MiwgNzcsIDg5LCA4MCwgMTI4LCA3MiwgNzcsIDg5LCAKLSAgICAxMjgsIDcyLCA3NywgODUsIDg4LCAxMjgsIDcyLCA3NywgODUsIDg0LCAxMjgsIDcyLCA3NywgODUsIDgyLCA4OCwgMTI4LCAKLSAgICA3MiwgNzcsIDg1LCA4MiwgMTI4LCA3MiwgNzcsIDg1LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgODgsIDEyOCwgNzIsIAotICAgIDc3LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCAxMjgsIDcyLCA3NywgODUsIDEyOCwgNzIsIDc3LCA3OSwgCi0gICAgODgsIDEyOCwgNzIsIDc3LCA3OSwgODQsIDEyOCwgNzIsIDc3LCA3OSwgODAsIDEyOCwgNzIsIDc3LCA3OSwgMTI4LCA3MiwgCi0gICAgNzcsIDczLCA4OCwgMTI4LCA3MiwgNzcsIDczLCA4NCwgMTI4LCA3MiwgNzcsIDczLCA4MCwgMTI4LCA3MiwgNzcsIDczLCAKLSAgICA2OSwgODgsIDEyOCwgNzIsIDc3LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NywgNzMsIDY5LCAxMjgsIDcyLCA3NywgNzMsIAotICAgIDEyOCwgNzIsIDc3LCA2OSwgMTI4LCA3MiwgNzcsIDY1LCA4OCwgMTI4LCA3MiwgNzcsIDY1LCA4NCwgMTI4LCA3MiwgNzcsIAotICAgIDY1LCA4MCwgMTI4LCA3MiwgNzcsIDY1LCAxMjgsIDcyLCA3NiwgODksIDg4LCAxMjgsIDcyLCA3NiwgODksIDg0LCAxMjgsIAotICAgIDcyLCA3NiwgODksIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgMTI4LCA3MiwgNzYsIDg5LCA4MCwgMTI4LCA3MiwgCi0gICAgNzYsIDg5LCAxMjgsIDcyLCA3NiwgODUsIDg4LCAxMjgsIDcyLCA3NiwgODUsIDg0LCAxMjgsIDcyLCA3NiwgODUsIDgyLCAKLSAgICA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgMTI4LCA3MiwgNzYsIDg1LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgODgsIAotICAgIDEyOCwgNzIsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NiwgODUsIDc5LCAxMjgsIDcyLCA3NiwgODUsIDEyOCwgNzIsIAotICAgIDc2LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA3OSwgMTI4LCA3MiwgNzYsIDczLCA4OCwgCi0gICAgMTI4LCA3MiwgNzYsIDczLCA4NCwgMTI4LCA3MiwgNzYsIDczLCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgODgsIDEyOCwgCi0gICAgNzIsIDc2LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NiwgNzMsIDY5LCAxMjgsIDcyLCA3NiwgNzMsIDEyOCwgNzIsIDc2LCAKLSAgICA2OSwgODgsIDEyOCwgNzIsIDc2LCA2OSwgODAsIDEyOCwgNzIsIDc2LCA2OSwgMTI4LCA3MiwgNzYsIDY1LCA4OCwgMTI4LCAKLSAgICA3MiwgNzYsIDY1LCA4NCwgMTI4LCA3MiwgNzYsIDY1LCA4MCwgMTI4LCA3MiwgNzYsIDY1LCAxMjgsIDcyLCA3NSwgMTI4LCAKLSAgICA3MiwgNzMsIDkwLCA2NiwgMTI4LCA3MiwgNzMsIDgzLCA4NCwgNzksIDgyLCA3MywgMTk1LCA3MiwgNzMsIDgyLCA3MywgODEsIAotICAgIDEyOCwgNzIsIDczLCA3MSwgNzIsIDQ1LCA4MywgODAsIDY5LCA2OSwgMTk2LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDgyLCA2OSwgCi0gICAgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgNDUsIDE4NSwgNzIsIDczLCA3MSwgNzIsIDQ1LCA3MiwgNjksIDY5LCA3NiwgNjksIAotICAgIDE5NiwgNzIsIDczLCA2OSwgODgsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDcyLCA3MywgNjksIDg1LCAyMDAsIDcyLCAKLSAgICA3MywgNjksIDgyLCA3OSwgNzEsIDc2LCA4OSwgODAsIDcyLCA3MywgMTk1LCA3MiwgNzMsIDY5LCAxMjgsIDcyLCA3MywgNjgsIAotICAgIDczLCA3OCwgMTk5LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNzIsIDczLCA2OCwgNjksIDEyOCwgNzIsIDczLCA2NiwgCi0gICAgNzMsIDgzLCA2NywgODUsIDgzLCAxMjgsIDcyLCA3MiwgODcsIDY1LCAxMjgsIDcyLCA3MiwgODUsIDEyOCwgNzIsIDcyLCAKLSAgICA3MywgMTI4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA3MiwgNzIsIDY5LCAxMjgsIDcyLCA3MiwgNjUsIDY1LCAxMjgsIDcyLCAKLSAgICA3MSwgMTI4LCA3MiwgNjksIDg4LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA3MiwgNjksIDg4LCA2NSwgNzEsIDgyLCA2NSwgCi0gICAgMjA1LCA3MiwgNjksIDg4LCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA3MiwgNjksIDgyLCA4NSwgODQsIDg1LCAxMjgsIDcyLCAKLSAgICA2OSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgODIsIDc3LCA3MywgODQsIDczLCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNzMsIAotICAgIDc5LCA3OCwgNzMsIDY1LCAyMDYsIDcyLCA2OSwgODIsIDc3LCA2OSwgODMsIDEyOCwgNzIsIDY5LCA4MiwgNjksIDEyOCwgCi0gICAgNzIsIDY5LCA4MiwgNjYsIDEyOCwgNzIsIDY5LCA4MiwgNjUsIDY5LCA4NSwgMjA1LCA3MiwgNjksIDc4LCA3MSwgMTI4LCAKLSAgICA3MiwgNjksIDc4LCAxOTksIDcyLCA2OSwgNzcsIDgwLCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgODQsIDEyOCwgNzIsIAotICAgIDY5LCA3NiwgNzcsIDY5LCAyMTIsIDcyLCA2OSwgNzYsIDIwNSwgNzIsIDY5LCA3NiwgNzMsIDY3LCA3OSwgODAsIDg0LCA2OSwgCi0gICAgODIsIDEyOCwgNzIsIDY5LCA3NSwgODUsIDg0LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3MiwgNjksIDczLCA4MywgNjksIDczLCAKLSAgICAxMjgsIDcyLCA2OSwgNjUsIDg2LCA4OSwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDc4LCA3NiwgMjE3LCA3MiwgNjksIAotICAgIDY1LCA4NiwgNjksIDc4LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgMjA2LCA3MiwgNjksIDY1LCA4MiwgODQsIDgzLCAKLSAgICAxMjgsIDcyLCA2OSwgNjUsIDgyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA3MiwgNjksIDY1LCA4MiwgODQsIAotICAgIDEyOCwgNzIsIDY5LCA2NSwgODIsIDIxMiwgNzIsIDY5LCA2NSwgODIsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIDczLCAKLSAgICAyMDQsIDcyLCA2OSwgNjUsIDY4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIDY4LCA4MywgODQsIAotICAgIDc5LCA3OCwgMTk3LCA3MiwgNjksIDY1LCA2OCwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIDY4LCA3MywgCi0gICAgNzgsIDcxLCAxMjgsIDcyLCA2NiwgNjUsIDgzLCA2NSwgNDUsIDY5LCA4MywgNjUsIDgzLCAxOTMsIDcyLCA2NiwgNjUsIDgzLCAKLSAgICAxOTMsIDcyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcyLCA2NSwgODYsIDY5LCAxMjgsIDcyLCA2NSwgODUsIAotICAgIDgwLCA4NCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3MiwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgNzIsIDY1LCA4NCwgCi0gICAgNjksIDEyOCwgNzIsIDY1LCA4NCwgNjcsIDcyLCA3MywgNzgsIDE5OSwgNzIsIDY1LCA4NCwgNjUsIDE5OCwgNzIsIDY1LCAKLSAgICA4MywgNjksIDIxMCwgNzIsIDY1LCA4MywgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgNzgsIAotICAgIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgMjA2LCA3MiwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNjcsIDEyOCwgCi0gICAgNzIsIDY1LCA4MiwgNzUsIDc2LCA2OSwgNjUsIDIwNiwgNzIsIDY1LCA4MiwgNjgsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcyLCAKLSAgICA2NSwgODIsIDE5NiwgNzIsIDY1LCA4MCwgODAsIDIxNywgNzIsIDY1LCA3OCwgODUsIDc4LCA3OSwgMjA3LCA3MiwgNjUsIAotICAgIDc4LCA3MSwgOTAsIDcyLCA3OSwgMjEzLCA3MiwgNjUsIDc4LCA2OCwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDIxMSwgCi0gICAgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgMTI4LCA3MiwgNjUsIDc4LCAKLSAgICA2OCwgNjYsIDY1LCA3MSwgMTI4LCA3MiwgNjUsIDc4LCA2OCwgMTI4LCA3MiwgNjUsIDc4LCA0NSwgNjUsIDc1LCA2NSwgODQsIAotICAgIDEyOCwgNzIsIDY1LCA3NywgOTAsIDY1LCAxMjgsIDcyLCA2NSwgNzcsIDgzLCA4NCwgNjksIDIxMCwgNzIsIDY1LCA3NywgCi0gICAgNzcsIDY5LCA4MiwgMTI4LCA3MiwgNjUsIDc3LCA3NywgNjksIDIxMCwgNzIsIDY1LCA3NywgNjYsIDg1LCA4MiwgNzEsIDY5LCAKLSAgICA4MiwgMTI4LCA3MiwgNjUsIDc2LCA4MSwgNjUsIDEyOCwgNzIsIDY1LCA3NiwgNzksIDEyOCwgNzIsIDY1LCA3NiwgNzAsIAotICAgIDQ1LCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgNzIsIDY1LCA3NiwgNzAsIDEyOCwgNzIsIDY1LCA3NiwgNjYsIDY5LCA4MiwgCi0gICAgNjgsIDEyOCwgNzIsIDY1LCA3NiwgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA3MywgODQsIDg1LCAxMjgsIDcyLCAKLSAgICA2NSwgNzMsIDgyLCA2NywgODUsIDg0LCAxMjgsIDcyLCA2NSwgNzMsIDgyLCAxMjgsIDcyLCA2NSwgNzEsIDc2LCA2NSwgCi0gICAgMjE4LCA3MiwgNjUsIDcxLCA3NiwgMTI4LCA3MiwgNjUsIDcwLCA4NSwgNzUsIDcyLCA2NSwgMTI4LCA3MiwgNjUsIDcwLCAKLSAgICA4NSwgNzUsIDcyLCAxMjgsIDcyLCA2NSwgNjksIDcxLCAyMDQsIDcyLCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3MiwgNjUsIAotICAgIDY1LCA3NywgMTI4LCA3MiwgNjUsIDE5MywgNzIsIDY1LCA0NSwgNzIsIDY1LCAxMjgsIDcyLCA0OCwgNDgsIDU2LCAxMjgsIAotICAgIDcyLCA0OCwgNDgsIDU1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgMTI4LCA3MiwgCi0gICAgNDgsIDQ4LCA1MywgMTI4LCA3MiwgNDgsIDQ4LCA1MiwgMTI4LCA3MiwgNDgsIDQ4LCA1MSwgMTI4LCA3MiwgNDgsIDQ4LCAKLSAgICA1MCwgMTI4LCA3MiwgNDgsIDQ4LCA0OSwgMTI4LCA3MiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzEsIDg5LCA4NSwgMTI4LCAKLSAgICA3MSwgODksIDc5LCA3OCwgMTI4LCA3MSwgODksIDc5LCAxMjgsIDcxLCA4OSwgNzMsIDEyOCwgNzEsIDg5LCA3MCwgMjEzLCAKLSAgICA3MSwgODksIDY5LCA2OSwgMTI4LCA3MSwgODksIDY1LCA4MywgMTI4LCA3MSwgODksIDY1LCA2NSwgMTI4LCA3MSwgODksIAotICAgIDY1LCAxMjgsIDcxLCA4OSwgMTI4LCA3MSwgODcsIDg1LCAxMjgsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDg3LCA2OSwgNjksIAotICAgIDEyOCwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgODcsIDY1LCAxMjgsIDcxLCA4NiwgMTI4LCAKLSAgICA3MSwgODUsIDgyLCA4NSwgODMsIDcyLCAxMjgsIDcxLCA4NSwgODIsIDg1LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA2NSwgNzcsIAotICAgIDg1LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA4NSwgODIsIDU1LCAxMjgsIDcxLCA4NSwgNzgsIDg1LCAxMjgsIDcxLCA4NSwgCi0gICAgNzgsIDIxMywgNzEsIDg1LCAyMDUsIDcxLCA4NSwgNzYsIDEyOCwgNzEsIDg1LCA3MywgODQsIDY1LCA4MiwgMTI4LCA3MSwgCi0gICAgODUsIDE5OSwgNzEsIDg1LCA2OSwgNzIsIDEyOCwgNzEsIDg1LCA2OSwgMjAwLCA3MSwgODUsIDY4LCAxMjgsIDcxLCA4NSwgCi0gICAgMTk2LCA3MSwgODUsIDY1LCA4MiwgNjgsIDgzLCA3NywgNjUsIDc4LCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDY4LCAKLSAgICA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjgsIDY5LCAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgCi0gICAgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjUsIDc4LCAyMDEsIDcxLCA4NSwgMTkzLCA3MSwgODUsIDE3OCwgNzEsIDg0LCA2OSwgCi0gICAgMjEwLCA3MSwgODMsIDg1LCA3NywgMTI4LCA3MSwgODMsIDg1LCAyMDUsIDcxLCA4MiwgMjEzLCA3MSwgODIsIDc5LCA4NywgCi0gICAgNzMsIDc4LCAxOTksIDcxLCA4MiwgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzEsIDgyLCA3OSwgNzgsIDg0LCA3MiwgNzMsIDgzLCAKLSAgICA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MSwgODIsIDczLCA3OCwgNzgsIDczLCA3OCwgMTk5LCA3MSwgODIsIDczLCA3NywgNjUsIAotICAgIDY3LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA2OSwgNzEsIDc5LCA4MiwgNzMsIDY1LCAyMDYsIDcxLCA4MiwgNjksIDY5LCAKLSAgICAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIAotICAgIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCA4MiwgNDUsIDg0LCA3MiwgNjUsIDIwNiwgCi0gICAgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgMjEwLCA3MSwgODIsIDY5LCA2NSwgMjEyLCA3MSwgODIsIDY1LCA4NiwgNjksIDg5LCAKLSAgICA2NSwgODIsIDE5NiwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3MSwgODIsIAotICAgIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDEyOCwgNzEsIDgyLCAKLSAgICA2NSwgODYsIDE5NywgNzEsIDgyLCA2NSwgODQsIDY5LCA4MiwgMTI4LCA3MSwgODIsIDY1LCA4MywgODMsIDEyOCwgNzEsIAotICAgIDgyLCA2NSwgODMsIDIxMSwgNzEsIDgyLCA2NSwgODAsIDcyLCA2OSwgNzcsIDE5NywgNzEsIDgyLCA2NSwgODAsIDY5LCA4MywgCi0gICAgMTI4LCA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNzEsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIDcxLCA4MiwgNjUsIDY4LCAKLSAgICA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDgyLCA2NSwgNjcsIDY5LCAxMjgsIDcxLCA4MiwgNjUsIDY3LCAxOTcsIAotICAgIDcxLCA4MCwgNjUsIDEyOCwgNzEsIDc5LCA4MiwgODQsIDcyLCA3NywgNzMsIDc1LCA3OSwgMjA2LCA3MSwgNzksIDgyLCA4NCwgCi0gICAgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDg0LCA2OSwgODIsIDczLCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODMsIDg5LCAKLSAgICA3OCwgODQsIDcyLCA2OSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNzEsIDc5LCA4MiwgNzEsIAotICAgIDczLCAxMjgsIDcxLCA3OSwgODIsIDY1LCAxMjgsIDcxLCA3OSwgNzksIDE5NiwgNzEsIDc5LCA3OCwgNzEsIDEyOCwgNzEsIAotICAgIDc5LCA3NiwgNjgsIDEyOCwgNzEsIDc5LCA3NSwgMTI4LCA3MSwgNzksIDczLCA3OCwgMTk5LCA3MSwgNzksIDY2LCA3NiwgCi0gICAgNzMsIDc4LCAxMjgsIDcxLCA3OSwgNjUsIDc2LCAxMjgsIDcxLCA3OSwgNjUsIDIwNCwgNzEsIDc5LCA2NSwgMTI4LCA3MSwgCi0gICAgNzgsIDg5LCA3MywgODMsIDEyOCwgNzEsIDc4LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3MSwgNzYsIDc5LCAKLSAgICA4NywgNzMsIDc4LCAxOTksIDcxLCA3NiwgNzksIDg0LCA4NCwgNjUsIDIwNCwgNzEsIDc2LCA3OSwgNjYsIDE5NywgNzEsIAotICAgIDc2LCA3MywgODMsIDgzLCA2NSwgNzgsIDY4LCAyMDcsIDcxLCA3NiwgNjksIDczLCA2NywgMjAwLCA3MSwgNzYsIDY1LCA3MSwgCi0gICAgNzksIDc2LCA3MywgMTI4LCA3MSwgNzYsIDY1LCAxMjgsIDcxLCA3NCwgNjksIDEyOCwgNzEsIDczLCA4OCwgMTI4LCA3MSwgCi0gICAgNzMsIDg0LCAxMjgsIDcxLCA3MywgODMsIDcyLCAxMjgsIDcxLCA3MywgODMsIDIwMCwgNzEsIDczLCA4MywgNjUsIDc2LCAKLSAgICAxMjgsIDcxLCA3MywgODIsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIDcxLCA3MywgODIsIDc2LCAxMjgsIDcxLCA3MywgODIsIAotICAgIDUxLCAxMjgsIDcxLCA3MywgODIsIDE3OSwgNzEsIDczLCA4MiwgNTAsIDEyOCwgNzEsIDczLCA4MiwgMTc4LCA3MSwgNzMsIAotICAgIDgwLCAxMjgsIDcxLCA3MywgNzgsIDczLCA3MywgMTI4LCA3MSwgNzMsIDc3LCA2OSwgNzYsIDEyOCwgNzEsIDczLCA3NywgCi0gICAgNjksIDIwNCwgNzEsIDczLCA3NywgMTI4LCA3MSwgNzMsIDcxLCA2NSwgMTI4LCA3MSwgNzMsIDY5LCA4NCwgMTI4LCA3MSwgCi0gICAgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzEsIDczLCA2NiwgNjYsIDc5LCA4NSwgMjExLCA3MSwgNzMsIDY2LCA2NSwgMTI4LCAKLSAgICA3MSwgNzMsIDUyLCAxMjgsIDcxLCA3MywgMTgwLCA3MSwgNzIsIDkwLCAxMjgsIDcxLCA3MiwgODcsIDY1LCAxMjgsIDcxLCAKLSAgICA3MiwgODUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCAxOTMsIDcxLCA3MiwgODUsIDEyOCwgNzEsIAotICAgIDcyLCA3OSwgODUsIDEyOCwgNzEsIDcyLCA3OSwgODMsIDg0LCAxMjgsIDcxLCA3MiwgNzksIDEyOCwgNzEsIDcyLCA3MywgCi0gICAgMTI4LCA3MSwgNzIsIDcyLCA2NSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgODgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDc4LCAKLSAgICAxMjgsIDcxLCA3MiwgNjksIDg1LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIAotICAgIDcyLCA2OSwgNzgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgCi0gICAgNjUsIDY5LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjksIDg0LCAxMjgsIDcxLCA3MiwgNjksIDY5LCAKLSAgICAxMjgsIDcxLCA3MiwgNjksIDEyOCwgNzEsIDcyLCAxOTcsIDcxLCA3MiwgNjUsIDg5LCA3OCwgMTI4LCA3MSwgNzIsIDY1LCAKLSAgICA4MiwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDgwLCAxMjgsIDcxLCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIAotICAgIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDc4LCA4NSwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDEyOCwgCi0gICAgNzEsIDcyLCA2NSwgNzMsIDIwNiwgNzEsIDcyLCA2NSwgNjgsIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDc3LCA2NSwgNjksIAotICAgIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDEyOCwgNzEsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDcxLCA4NywgNjksIDY5LCAxMjgsIAotICAgIDcxLCA3MSwgODcsIDY5LCAxMjgsIDcxLCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgCi0gICAgNzEsIDg1LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4NCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzEsIDcxLCAKLSAgICA4NSwgODIsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDEyOCwgNzEsIDcxLCA3OSwgODgsIDEyOCwgNzEsIDcxLCA3OSwgCi0gICAgODQsIDEyOCwgNzEsIDcxLCA3OSwgODAsIDEyOCwgNzEsIDcxLCA3MywgODgsIDEyOCwgNzEsIDcxLCA3MywgODQsIDEyOCwgCi0gICAgNzEsIDcxLCA3MywgNjksIDg4LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgMTI4LCAKLSAgICA3MSwgNzEsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDY5LCA4NCwgMTI4LCA3MSwgNzEsIDY5LCA4MCwgMTI4LCA3MSwgNzEsIAotICAgIDY1LCA4OCwgMTI4LCA3MSwgNzEsIDY1LCA4NCwgMTI4LCA3MSwgNzEsIDY1LCA2NSwgMTI4LCA3MSwgNjksIDg0LCAxOTMsIAotICAgIDcxLCA2OSwgODMsIDg0LCA4NSwgODIsIDY5LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NSwgMTI4LCA3MSwgNjksIDgzLCA3MiwgCi0gICAgODQsIDczLCA3OCwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCAyMDYsIDcxLCA2OSwgODMsIDcyLCA1MCwgMTI4LCAKLSAgICA3MSwgNjksIDgyLCA4MywgNzIsIDY1LCA4OSwgNzMsIDc3LCAxMjgsIDcxLCA2OSwgODIsIDc3LCA2NSwgMjA2LCA3MSwgNjksIAotICAgIDgyLCA2OSwgODMsIDcyLCAxMjgsIDcxLCA2OSwgODIsIDY5LCA4MywgMjAwLCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCA4MiwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDc2LCAyMTcsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCA3MywgMTk1LCA3MSwgNjksIDc4LCAKLSAgICA4NCwgNzYsIDE5NywgNzEsIDY5LCA3OCwgNzMsIDg0LCA3MywgODYsIDY5LCAxMjgsIDcxLCA2OSwgNzgsIDczLCA3NSwgCi0gICAgMjAxLCA3MSwgNjksIDc4LCA2OSwgODIsIDczLCAxOTUsIDcxLCA2OSwgNzcsIDczLCA3OCwgNzMsIDEyOCwgNzEsIDY5LCAKLSAgICA3NywgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgNjksIDIwNSwgNzEsIDY5LCA2OCwgNzksIDc2LCA2NSwgCi0gICAgMTI4LCA3MSwgNjksIDY4LCA2OSwgMTI4LCA3MSwgNjksIDY2LCAyMDcsIDcxLCA2OSwgNjYsIDE5MywgNzEsIDY5LCA2NSwgCi0gICAgODIsIDEyOCwgNzEsIDY5LCA2NSwgMjEwLCA3MSwgNjgsIDY1LCA3OCwgMTI4LCA3MSwgNjcsIDczLCA3MSwgMTI4LCA3MSwgCi0gICAgNjcsIDY1LCAyMDYsIDcxLCA2NiwgNzksIDc4LCAxMjgsIDcxLCA2NiwgNzMsIDY5LCAxOTcsIDcxLCA2NiwgNjksIDg1LCAKLSAgICA4OCwgMTI4LCA3MSwgNjYsIDY5LCA4NCwgMTI4LCA3MSwgNjYsIDY1LCA4OSwgNzMsIDEyOCwgNzEsIDY2LCA2NSwgNzUsIAotICAgIDg1LCA4MiwgODUsIDc4LCA2OSwgNzgsIDEyOCwgNzEsIDY2LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgODUsIDc1LCA3MywgCi0gICAgODQsIDg0LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCAxMjgsIDcxLCAKLSAgICA2NSwgODUsIDc4LCA4NCwgNzYsIDY5LCA4NCwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIAotICAgIDcxLCA2NSwgODQsIDcyLCA2OSwgODIsIDczLCA3OCwgMTk5LCA3MSwgNjUsIDg0LCA2OSwgMTI4LCA3MSwgNjUsIDgzLCA3MiwgCi0gICAgNjUsIDc4LCAxMjgsIDcxLCA2NSwgODIsIDgzLCA3MiwgODUsIDc4LCA3MywgMTI4LCA3MSwgNjUsIDgyLCA3OSwgNzgsIAotICAgIDEyOCwgNzEsIDY1LCA4MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzEsIDY1LCA4MiwgNjgsIDY5LCA3OCwgMTI4LCA3MSwgCi0gICAgNjUsIDgyLCA1MSwgMTI4LCA3MSwgNjUsIDgwLCA4MCwgNjksIDE5NiwgNzEsIDY1LCAyMDgsIDcxLCA2NSwgNzgsIDc3LCAKLSAgICA2NSwgMTI4LCA3MSwgNjUsIDc4LCA3MSwgNzMsIDY1LCAxMjgsIDcxLCA2NSwgNzgsIDY4LCAxOTMsIDcxLCA2NSwgNzgsIAotICAgIDUwLCAxMjgsIDcxLCA2NSwgNzgsIDE3OCwgNzEsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDcxLCA2NSwgNzcsIDc2LCA2NSwgCi0gICAgMTI4LCA3MSwgNjUsIDc3LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA2OSwgMTI4LCA3MSwgNjUsIDc3LCAxOTcsIDcxLCA2NSwgCi0gICAgNzcsIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDIwNCwgNzEsIDY1LCAKLSAgICA3MSwgMTI4LCA3MSwgNjUsIDcwLCAxMjgsIDcxLCA2NSwgMTk4LCA3MSwgNjUsIDY5LCA4NCwgODQsIDY1LCA0NSwgODAsIAotICAgIDczLCA3NiwgNzYsIDY1LCAxMjgsIDcxLCA2NSwgNjgsIDc5LCA3NiwgMTI4LCA3MSwgNjUsIDY4LCAxMjgsIDcxLCA2NSwgCi0gICAgMTk2LCA3MSwgNjUsIDY2LCA2NSwgMTI4LCA3MSwgNjUsIDY2LCAxOTMsIDcxLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3MSwgCi0gICAgNjUsIDE3OCwgNzEsIDQ4LCA1MywgNTIsIDEyOCwgNzEsIDQ4LCA1MywgNTEsIDEyOCwgNzEsIDQ4LCA1MywgNTAsIDEyOCwgCi0gICAgNzEsIDQ4LCA1MywgNDksIDEyOCwgNzEsIDQ4LCA1MywgNDgsIDEyOCwgNzEsIDQ4LCA1MiwgNTcsIDEyOCwgNzEsIDQ4LCAKLSAgICA1MiwgNTYsIDEyOCwgNzEsIDQ4LCA1MiwgNTUsIDEyOCwgNzEsIDQ4LCA1MiwgNTQsIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIAotICAgIDY1LCAxMjgsIDcxLCA0OCwgNTIsIDUzLCAxMjgsIDcxLCA0OCwgNTIsIDUyLCAxMjgsIDcxLCA0OCwgNTIsIDUxLCA2NSwgCi0gICAgMTI4LCA3MSwgNDgsIDUyLCA1MSwgMTI4LCA3MSwgNDgsIDUyLCA1MCwgMTI4LCA3MSwgNDgsIDUyLCA0OSwgMTI4LCA3MSwgCi0gICAgNDgsIDUyLCA0OCwgMTI4LCA3MSwgNDgsIDUxLCA1NywgMTI4LCA3MSwgNDgsIDUxLCA1NiwgMTI4LCA3MSwgNDgsIDUxLCAKLSAgICA1NSwgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDEyOCwgNzEsIDQ4LCA1MSwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIAotICAgIDU0LCAxMjgsIDcxLCA0OCwgNTEsIDUzLCAxMjgsIDcxLCA0OCwgNTEsIDUyLCAxMjgsIDcxLCA0OCwgNTEsIDUxLCAxMjgsIAotICAgIDcxLCA0OCwgNTEsIDUwLCAxMjgsIDcxLCA0OCwgNTEsIDQ5LCAxMjgsIDcxLCA0OCwgNTEsIDQ4LCAxMjgsIDcxLCA0OCwgCi0gICAgNTAsIDU3LCAxMjgsIDcxLCA0OCwgNTAsIDU2LCAxMjgsIDcxLCA0OCwgNTAsIDU1LCAxMjgsIDcxLCA0OCwgNTAsIDU0LCAKLSAgICA2NSwgMTI4LCA3MSwgNDgsIDUwLCA1NCwgMTI4LCA3MSwgNDgsIDUwLCA1MywgMTI4LCA3MSwgNDgsIDUwLCA1MiwgMTI4LCAKLSAgICA3MSwgNDgsIDUwLCA1MSwgMTI4LCA3MSwgNDgsIDUwLCA1MCwgMTI4LCA3MSwgNDgsIDUwLCA0OSwgMTI4LCA3MSwgNDgsIAotICAgIDUwLCA0OCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDEyOCwgNzEsIDQ4LCA0OSwgNTcsIDEyOCwgNzEsIDQ4LCA0OSwgCi0gICAgNTYsIDEyOCwgNzEsIDQ4LCA0OSwgNTUsIDEyOCwgNzEsIDQ4LCA0OSwgNTQsIDEyOCwgNzEsIDQ4LCA0OSwgNTMsIDEyOCwgCi0gICAgNzEsIDQ4LCA0OSwgNTIsIDEyOCwgNzEsIDQ4LCA0OSwgNTEsIDEyOCwgNzEsIDQ4LCA0OSwgNTAsIDEyOCwgNzEsIDQ4LCAKLSAgICA0OSwgNDksIDY1LCAxMjgsIDcxLCA0OCwgNDksIDQ5LCAxMjgsIDcxLCA0OCwgNDksIDQ4LCAxMjgsIDcxLCA0OCwgNDgsIAotICAgIDU3LCAxMjgsIDcxLCA0OCwgNDgsIDU2LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgCi0gICAgNjUsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCAKLSAgICAxMjgsIDcxLCA0OCwgNDgsIDUzLCAxMjgsIDcxLCA0OCwgNDgsIDUyLCAxMjgsIDcxLCA0OCwgNDgsIDUxLCAxMjgsIDcxLCAKLSAgICA0OCwgNDgsIDUwLCAxMjgsIDcxLCA0OCwgNDgsIDQ5LCAxMjgsIDcwLCA4OSwgODgsIDEyOCwgNzAsIDg5LCA4NCwgMTI4LCAKLSAgICA3MCwgODksIDgwLCAxMjgsIDcwLCA4OSwgNjUsIDEyOCwgNzAsIDg3LCA3MywgMTI4LCA3MCwgODcsIDY5LCA2OSwgMTI4LCAKLSAgICA3MCwgODcsIDY5LCAxMjgsIDcwLCA4NywgNjUsIDY1LCAxMjgsIDcwLCA4NywgNjUsIDEyOCwgNzAsIDg2LCA4MywgNTEsIAotICAgIDEyOCwgNzAsIDg2LCA4MywgNTAsIDEyOCwgNzAsIDg2LCA4MywgNDksIDEyOCwgNzAsIDg1LCA4OCwgMTI4LCA3MCwgODUsIAotICAgIDg0LCAxMjgsIDcwLCA4NSwgODMsIDY5LCAxMjgsIDcwLCA4NSwgODMsIDE5MywgNzAsIDg1LCA4MiwgODgsIDEyOCwgNzAsIAotICAgIDg1LCA4MCwgMTI4LCA3MCwgODUsIDc4LCA2OSwgODIsIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgNjUsIDIwNCwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDcwLCA4NSwgNzYsIDc2LCA3OCwgNjksIDgzLCAKLSAgICA4MywgMTI4LCA3MCwgODUsIDc2LCAyMDQsIDcwLCA4NSwgNzQsIDczLCAxMjgsIDcwLCA4NSwgNjksIDg0LCAxMjgsIDcwLCAKLSAgICA4NSwgNjksIDIwNCwgNzAsIDg1LCA2OSwgMTI4LCA3MCwgODQsIDcyLCA3OSwgODIsIDE5MywgNzAsIDgyLCA3OSwgODcsIAotICAgIDc4LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA4MiwgNzksIDg3LCA3OCwgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDg3LCA3OCwgCi0gICAgMTI4LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCA4NCwgNzMsIDc2LCA4NCwgNjksIDE5NiwgNzAsIDgyLCA3OSwgNzgsIDg0LCAKLSAgICA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDIwNSwgNzAsIDgyLCA3OSwgNzEsIDEyOCwgNzAsIAotICAgIDgyLCA3OSwgMTk5LCA3MCwgODIsIDczLCA4NCwgODUsIDEyOCwgNzAsIDgyLCA3MywgNjksIDgzLCAxMjgsIDcwLCA4MiwgCi0gICAgNzMsIDY5LCAxOTYsIDcwLCA4MiwgNzMsIDY3LCA2NSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzAsIDgyLCA2OSwgODQsIDY2LCAKLSAgICA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3MCwgODIsIDY5LCA3OCwgNjcsIDIwMCwgNzAsIDgyLCA2OSwgNjksIDEyOCwgNzAsIAotICAgIDgyLCA2OSwgMTk3LCA3MCwgODIsIDY1LCA3OCwgMTk1LCA3MCwgODIsIDY1LCA3NywgNjksIDEyOCwgNzAsIDgyLCA2NSwgCi0gICAgNzEsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCAKLSAgICA2NywgODQsIDczLCA3OSwgMjA2LCA3MCwgNzksIDg4LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCA3OCwgCi0gICAgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgMjA2LCA3MCwgNzksIDg1LCA4MiwgNDUsIDg0LCA3MiwgNzMsIDgyLCAKLSAgICA4NCwgODksIDEyOCwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc5LCA4NSwgODIsIAotICAgIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgNzAsIDc5LCA4NSwgODIsIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3OSwgCi0gICAgODUsIDIxMCwgNzAsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAxMjgsIDcwLCA3OSwgODMsIDg0LCA2OSwgODIsIDczLCAKLSAgICA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgODcsIDY1LCA4MiwgNjgsIDEyOCwgNzAsIDc5LCA4MiwgODQsIDg5LCAxMjgsIAotICAgIDcwLCA3OSwgODIsIDg0LCAyMTcsIDcwLCA3OSwgODIsIDg0LCA2OSwgMTI4LCA3MCwgNzksIDgyLCA3NywgMjExLCA3MCwgCi0gICAgNzksIDgyLCA3NywgNjUsIDg0LCA4NCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA3NSwgNjksIDE5NiwgNzAsIDc5LCAKLSAgICA4MiwgNjcsIDY5LCA4MywgMTI4LCA3MCwgNzksIDgyLCA2NywgNjksIDEyOCwgNzAsIDc5LCA4MCwgMTI4LCA3MCwgNzksIAotICAgIDc5LCA4NCwgODMsIDg0LCA3OSwgNzksIDc2LCAxMjgsIDcwLCA3OSwgNzksIDg0LCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAKLSAgICAxMjgsIDcwLCA3OSwgNzksIDg0LCA3OCwgNzksIDg0LCAxOTcsIDcwLCA3OSwgNzksIDg0LCA2NiwgNjUsIDc2LCA3NiwgCi0gICAgMTI4LCA3MCwgNzksIDc5LCA4NCwgMTI4LCA3MCwgNzksIDc5LCA2OCwgMTI4LCA3MCwgNzksIDc5LCAxMjgsIDcwLCA3OSwgCi0gICAgNzgsIDcxLCA3NywgNjUsIDc4LCAxMjgsIDcwLCA3OSwgNzcsIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDg5LCAxMjgsIDcwLCAKLSAgICA3OSwgNzYsIDc2LCA3OSwgODcsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA3NiwgNjgsIDY5LCA4MiwgMTI4LCA3MCwgNzksIAotICAgIDc2LCA2OCwgNjksIDE5NiwgNzAsIDc5LCA3MSwgNzEsIDg5LCAxMjgsIDcwLCAyMDcsIDcwLCA3NywgMTI4LCA3MCwgNzYsIAotICAgIDg5LCAxMjgsIDcwLCA3NiwgODUsIDg0LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc2LCA4NSwgODQsIDY5LCAKLSAgICAxMjgsIDcwLCA3NiwgODUsIDgzLCA3MiwgNjksIDE5NiwgNzAsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MCwgNzYsIAotICAgIDc5LCA4NywgNjksIDIxMCwgNzAsIDc2LCA3OSwgODUsIDgyLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3NiwgNzksIDgyLCA2OSwgCi0gICAgODQsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjUsIDIwNCwgNzAsIDc2LCA3OSwgODAsIDgwLCAyMTcsIDcwLCAKLSAgICA3NiwgNzksIDc5LCA4MiwgMTI4LCA3MCwgNzYsIDczLCA4MCwgMTI4LCA3MCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIAotICAgIDcwLCA3NiwgNjksIDg4LCA4NSwgODMsIDEyOCwgNzAsIDc2LCA2OSwgODgsIDY5LCAxOTYsIDcwLCA3NiwgNjksIDg1LCA4MiwgCi0gICAgNDUsIDY4LCA2OSwgNDUsIDc2LCA3MywgODMsIDEyOCwgNzAsIDc2LCA2NSwgODQsIDg0LCA2OSwgNzgsIDY5LCAxOTYsIDcwLCAKLSAgICA3NiwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MCwgNzYsIDY1LCA4NCwgMTI4LCA3MCwgNzYsIDY1LCAyMTIsIAotICAgIDcwLCA3NiwgNjUsIDcxLCA4MywgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUzLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgCi0gICAgNTIsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUwLCAxMjgsIDcwLCAKLSAgICA3NiwgNjUsIDcxLCA0NSwgNDksIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDEyOCwgNzAsIDc2LCA2NSwgMTk5LCA3MCwgNzYsIAotICAgIDY1LCAxMjgsIDcwLCA3NiwgMTI4LCA3MCwgNzMsIDg4LCA2OSwgNjgsIDQ1LCA3MCwgNzksIDgyLCAyMDUsIDcwLCA3MywgCi0gICAgODgsIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3MywgODYsIDY5LCAKLSAgICA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzMsIDg2LCAxOTcsIDcwLCA3MywgODQsIDY1LCAxMjgsIDcwLCA3MywgODQsIAotICAgIDEyOCwgNzAsIDczLCA4MywgODQsIDY5LCAxOTYsIDcwLCA3MywgODMsIDg0LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MywgCi0gICAgNzgsIDE5OSwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAKLSAgICAyMDMsIDcwLCA3MywgODMsIDcyLCA2OSwgODksIDY5LCAxMjgsIDcwLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3MywgODMsIAotICAgIDIwMCwgNzAsIDczLCA4MiwgODMsIDIxMiwgNzAsIDczLCA4MiwgNzMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgCi0gICAgODIsIDc1LCA4MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIDc5LCA4MiwgMjAzLCA3MCwgNzMsIDgyLCA2OSwgMTI4LCAKLSAgICA3MCwgNzMsIDgyLCAxOTcsIDcwLCA3MywgODAsIDEyOCwgNzAsIDczLCA3OCwgNzMsIDg0LCAxOTcsIDcwLCA3MywgNzgsIAotICAgIDcxLCA2OSwgODIsIDc4LCA2NSwgNzMsIDc2LCA4MywgMTI4LCA3MCwgNzMsIDc4LCA3MSwgNjksIDgyLCA2OSwgMTk2LCA3MCwgCi0gICAgNzMsIDc4LCA2NSwgNzgsIDY3LCA3MywgNjUsIDc2LCAxMjgsIDcwLCA3MywgNzYsIDc2LCA2OSwgODIsIDEyOCwgNzAsIDczLCAKLSAgICA3NiwgNzYsIDY5LCAxOTYsIDcwLCA3MywgNzYsIDc2LCAxMjgsIDcwLCA3MywgNzYsIDIwNCwgNzAsIDczLCA3NiwgMTk3LCAKLSAgICA3MCwgNzMsIDczLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAotICAgIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCi0gICAgMTk3LCA3MCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIDczLCA3MCwgODQsIDg5LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAKLSAgICAyMTcsIDcwLCA3MywgNzAsIDg0LCA3MiwgODMsIDEyOCwgNzAsIDczLCA3MCwgODQsIDcyLCAxMjgsIDcwLCA3MywgNzAsIAotICAgIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3MywgNzAsIDg0LCA2OSwgNjksIDIwNiwgNzAsIDczLCA2OSwgNzYsIDY4LCAKLSAgICAxMjgsIDcwLCA3MiwgODQsIDc5LCA4MiwgMTkzLCA3MCwgNzAsIDc2LCAxMjgsIDcwLCA3MCwgNzMsIDEyOCwgNzAsIDY5LCAKLSAgICA4NSwgODgsIDEyOCwgNzAsIDY5LCA4NSwgNzAsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3MCwgNjksIDgzLCA4NCwgNzMsIAotICAgIDg2LCA2NSwgNzYsIDEyOCwgNzAsIDY5LCA4MiwgODIsIDg5LCAxMjgsIDcwLCA2OSwgODIsIDgyLCA3MywgMjExLCA3MCwgCi0gICAgNjksIDgyLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MCwgNjksIDgyLCA3NywgNjUsIDg0LCAxOTMsIDcwLCA2OSwgNzksIAotICAgIDIwMCwgNzAsIDY5LCA3OCwgMTk5LCA3MCwgNjksIDc4LCA2NywgNjksIDEyOCwgNzAsIDY5LCA3NywgNzMsIDc4LCA3MywgCi0gICAgNzgsIDE5NywgNzAsIDY5LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3MCwgNjksIDc3LCA2NSwgNzYsIDE5NywgNzAsIDY5LCAKLSAgICA3NiwgNzYsIDc5LCA4NywgODMsIDcyLCA3MywgODAsIDEyOCwgNzAsIDY5LCA3MywgMTI4LCA3MCwgNjksIDcyLCAyMTMsIAotICAgIDcwLCA2OSwgNzIsIDEyOCwgNzAsIDY5LCAyMDAsIDcwLCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3MCwgNjksIDY5LCA2OCwgCi0gICAgMTI4LCA3MCwgNjksIDY5LCAxOTYsIDcwLCA2OSwgNjksIDEyOCwgNzAsIDY5LCA2NiwgODIsIDg1LCA2NSwgODIsIDg5LCAKLSAgICAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIAotICAgIDY5LCA2NSwgODIsIDc4LCAxMjgsIDcwLCA2OSwgNjUsIDgyLCA3MCwgODUsIDIwNCwgNzAsIDY5LCA2NSwgODIsIDEyOCwgCi0gICAgNzAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzAsIDY1LCA4OSwgMTI4LCA3MCwgNjUsIDg4LCAxMjgsIDcwLCAKLSAgICA2NSwgMjE2LCA3MCwgNjUsIDg0LCA3MywgNzEsIDg1LCA2OSwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIAotICAgIDcwLCA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzAsIDY1LCA4NCwgCi0gICAgNzIsIDY1LCA4NCwgNjUsIDIwNiwgNzAsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIDcwLCA2NSwgODQsIDcyLCAxOTMsIDcwLCAKLSAgICA2NSwgODQsIDEyOCwgNzAsIDY1LCA4MiwgODMsIDIwMSwgNzAsIDY1LCA4MSwgMTI4LCA3MCwgNjUsIDgwLCAxMjgsIDcwLCAKLSAgICA2NSwgNzgsIDcxLCAxMjgsIDcwLCA2NSwgNzgsIDY5LCA4MiwgNzksIDgzLCA3MywgMjExLCA3MCwgNjUsIDc4LCAxMjgsIAotICAgIDcwLCA2NSwgNzcsIDczLCA3NiwgODksIDEyOCwgNzAsIDY1LCA3NiwgNzYsIDczLCA3OCwgMTk5LCA3MCwgNjUsIDc2LCA3NiwgCi0gICAgNjksIDIwNiwgNzAsIDY1LCA3MywgNzYsIDg1LCA4MiwgNjksIDEyOCwgNzAsIDY1LCA3MywgNzIsIDg1LCAxMjgsIDcwLCAKLSAgICA2NSwgNzIsIDgyLCA2OSwgNzgsIDcyLCA2OSwgNzMsIDg0LCAxMjgsIDcwLCA2NSwgNjcsIDg0LCA3OSwgODIsIDg5LCAxMjgsIAotICAgIDcwLCA2NSwgNjcsIDg0LCA3OSwgMjEwLCA3MCwgNjUsIDY3LCA4MywgNzMsIDc3LCA3MywgNzYsIDE5NywgNzAsIDY1LCA2NywgCi0gICAgNjksIDQ1LCA1NCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUzLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTIsIAotICAgIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA2NSwgCi0gICAgNjcsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3MCwgNjUsIDY1LCA3MywgMTI4LCAKLSAgICA3MCwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzAsIDQ4LCA1MywgNTEsIDEyOCwgNzAsIDQ4LCA1MywgNTAsIDEyOCwgNzAsIAotICAgIDQ4LCA1MywgNDksIDY3LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NiwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjUsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MywgNDksIDEyOCwgNzAsIDQ4LCA1MywgNDgsIDEyOCwgNzAsIDQ4LCA1MiwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MiwgNTYsIDEyOCwgNzAsIDQ4LCA1MiwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCAxMjgsIDcwLCA0OCwgNTIsIAotICAgIDU0LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgMTI4LCA3MCwgNDgsIDUyLCA1MywgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgCi0gICAgNTMsIDEyOCwgNzAsIDQ4LCA1MiwgNTIsIDEyOCwgNzAsIDQ4LCA1MiwgNTEsIDEyOCwgNzAsIDQ4LCA1MiwgNTAsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MiwgNDksIDEyOCwgNzAsIDQ4LCA1MiwgNDgsIDEyOCwgNzAsIDQ4LCA1MSwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MSwgNTYsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCAxMjgsIDcwLCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIAotICAgIDUxLCA1NSwgMTI4LCA3MCwgNDgsIDUxLCA1NCwgMTI4LCA3MCwgNDgsIDUxLCA1MywgMTI4LCA3MCwgNDgsIDUxLCA1MiwgCi0gICAgMTI4LCA3MCwgNDgsIDUxLCA1MSwgMTI4LCA3MCwgNDgsIDUxLCA1MCwgMTI4LCA3MCwgNDgsIDUxLCA0OSwgNjUsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MSwgNDksIDEyOCwgNzAsIDQ4LCA1MSwgNDgsIDEyOCwgNzAsIDQ4LCA1MCwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MCwgNTYsIDEyOCwgNzAsIDQ4LCA1MCwgNTUsIDEyOCwgNzAsIDQ4LCA1MCwgNTQsIDEyOCwgNzAsIDQ4LCA1MCwgNTMsIAotICAgIDEyOCwgNzAsIDQ4LCA1MCwgNTIsIDEyOCwgNzAsIDQ4LCA1MCwgNTEsIDEyOCwgNzAsIDQ4LCA1MCwgNTAsIDEyOCwgNzAsIAotICAgIDQ4LCA1MCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCAxMjgsIDcwLCA0OCwgNTAsIDQ4LCAxMjgsIDcwLCA0OCwgCi0gICAgNDksIDU3LCAxMjgsIDcwLCA0OCwgNDksIDU2LCAxMjgsIDcwLCA0OCwgNDksIDU1LCAxMjgsIDcwLCA0OCwgNDksIDU0LCAKLSAgICAxMjgsIDcwLCA0OCwgNDksIDUzLCAxMjgsIDcwLCA0OCwgNDksIDUyLCAxMjgsIDcwLCA0OCwgNDksIDUxLCA2NSwgMTI4LCAKLSAgICA3MCwgNDgsIDQ5LCA1MSwgMTI4LCA3MCwgNDgsIDQ5LCA1MCwgMTI4LCA3MCwgNDgsIDQ5LCA0OSwgMTI4LCA3MCwgNDgsIAotICAgIDQ5LCA0OCwgMTI4LCA3MCwgNDgsIDQ4LCA1NywgMTI4LCA3MCwgNDgsIDQ4LCA1NiwgMTI4LCA3MCwgNDgsIDQ4LCA1NSwgCi0gICAgMTI4LCA3MCwgNDgsIDQ4LCA1NCwgMTI4LCA3MCwgNDgsIDQ4LCA1MywgMTI4LCA3MCwgNDgsIDQ4LCA1MiwgMTI4LCA3MCwgCi0gICAgNDgsIDQ4LCA1MSwgMTI4LCA3MCwgNDgsIDQ4LCA1MCwgMTI4LCA3MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCAKLSAgICA0OCwgNDksIDEyOCwgNjksIDkwLCAyMDAsIDY5LCA5MCwgNjksIDc4LCAxMjgsIDY5LCA5MCwgNjksIDIwNiwgNjksIDkwLCAKLSAgICAxMjgsIDY5LCA4OSwgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjksIDcxLCA3NiwgNjUsIDgzLCA4MywgNjksIDgzLCAxMjgsIAotICAgIDY5LCA4OSwgNjYsIDY5LCA4OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgCi0gICAgODgsIDg0LCA4MiwgNjUsIDg0LCA2OSwgODIsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCAyMDQsIDY5LCA4OCwgODQsIAotICAgIDgyLCA2NSwgNDUsIDc2LCA3OSwgMjE1LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCA3MiwgNzMsIDcxLCAyMDAsIDY5LCA4OCwgCi0gICAgODQsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA4NCwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjksIDg4LCAKLSAgICA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDc2LCA2OSwgODMsIDIxMSwgNjksIDg4LCA4MCwgNzksIDc4LCA2OSwgCi0gICAgNzgsIDIxMiwgNjksIDg4LCA3OSwgMTI4LCA2OSwgODgsIDIwNywgNjksIDg4LCA3MywgODMsIDg0LCA4MywgMTI4LCA2OSwgCi0gICAgODgsIDczLCA4MywgODQsIDEyOCwgNjksIDg4LCA3MiwgNjUsIDg1LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCAKLSAgICA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCAyMDYsIDY5LCA4OCwgNjcsIDcyLCA2NSwgNzgsIDcxLCA2OSwgMTI4LCA2OSwgODgsIDY3LCA2OSwgODMsIDgzLCAKLSAgICAxMjgsIDY5LCA4OCwgNjcsIDY5LCA3NiwgNzYsIDY5LCA3OCwgODQsIDEyOCwgNjksIDg3LCA2OSwgMTI4LCA2OSwgODYsIAotICAgIDY5LCA4MiwgNzEsIDgyLCA2OSwgNjksIDIwNiwgNjksIDg2LCA2OSwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNjksIDg1LCA4MiwgCi0gICAgNzksIDgwLCA2OSwgNjUsIDIwNiwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNDUsIDY1LCA3MCwgODIsIDczLCA2NywgNjUsIAotICAgIDEyOCwgNjksIDg1LCA4MiwgNzksIDQ1LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCA2NywgMjE3LCA2OSwgODUsIDgyLCAKLSAgICAyMDcsIDY5LCA4NSwgNzYsIDY5LCAyMTAsIDY5LCA4NSwgNDUsIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDc5LCAxMjgsIDY5LCAKLSAgICA4NSwgNDUsIDY5LCA4NSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgNzksIDEyOCwgNjksIDg1LCA0NSwgNjksIDEyOCwgNjksIAotICAgIDg1LCA0NSwgNjUsIDEyOCwgNjksIDg0LCA4OCwgMTI4LCA2OSwgODQsIDc4LCA2NSwgNzIsIDg0LCA2NSwgMTI4LCA2OSwgCi0gICAgODQsIDcyLCA2OSwgMjA0LCA2OSwgODQsIDY5LCA4MiwgNzksIDIwNiwgNjksIDg0LCA2OSwgODIsIDc4LCA3MywgODQsIDg5LCAKLSAgICAxMjgsIDY5LCA4NCwgNjYsIDEyOCwgNjksIDgzLCA4NSwgNzUsIDg1LCA4NSwgNjgsIDc5LCAxMjgsIDY5LCA4MywgODQsIAotICAgIDczLCA3NywgNjUsIDg0LCA2OSwgODMsIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgODQsIDY5LCAxOTYsIDY5LCA4MywgCi0gICAgNzIsIDY5LCA1MSwgMTI4LCA2OSwgODMsIDcyLCA1MCwgNDksIDEyOCwgNjksIDgzLCA3MiwgMTc4LCA2OSwgODMsIDcyLCAKLSAgICA0OSwgNTQsIDEyOCwgNjksIDgzLCA2NywgNjUsIDgwLCA2OSwgMTI4LCA2OSwgODMsIDY3LCAxMjgsIDY5LCA4MywgNjUsIAotICAgIDEyOCwgNjksIDgzLCA0NSwgODQsIDY5LCAxMjgsIDY5LCA4MiwgODIsIDc5LCA4MiwgNDUsIDY2LCA2NSwgODIsIDgyLCA2OSwgCi0gICAgMTk2LCA2OSwgODIsIDgyLCAxMjgsIDY5LCA4MiwgNzMsIDc4LCA1MCwgMTI4LCA2OSwgODIsIDcxLCAxMjgsIDY5LCA4MiwgCi0gICAgNjUsIDgzLCAxOTcsIDY5LCA4MSwgODUsIDczLCA4NiwgNjUsIDc2LCA2OSwgNzgsIDIxMiwgNjksIDgxLCA4NSwgNzMsIDY4LCAKLSAgICAxMjgsIDY5LCA4MSwgODUsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDY5LCA4MSwgODUsIDY1LCA3NiwgODMsIAotICAgIDEyOCwgNjksIDgxLCA4NSwgNjUsIDc2LCAyMTEsIDY5LCA4MSwgODUsIDY1LCA3NiwgMTI4LCA2OSwgODAsIDgzLCA3MywgCi0gICAgNzYsIDc5LCA3OCwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCAyMDYsIDY5LCA4MCwgNzksIDY3LCA3MiwgMTI4LCAKLSAgICA2OSwgODAsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIDY5LCA4MCwgNzMsIDY4LCA2NSwgODUsIDgyLCA2OSwgCi0gICAgNjUsIDIwNiwgNjksIDgwLCA2OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3MywgMTk1LCA2OSwgODAsIDY5LCA3MSwgNjksIDgyLCAKLSAgICA3NywgNjUsIDEyOCwgNjksIDc5LCA4NCwgMTI4LCA2OSwgNzksIDc3LCAxMjgsIDY5LCA3OSwgNzYsIDcyLCA4OCwgMTI4LCAKLSAgICA2OSwgNzksIDc2LCAxMjgsIDY5LCA3OSwgNzIsIDEyOCwgNjksIDc4LCA4OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIAotICAgIDc5LCA4MCwgNjksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgODAsIDE5NywgNjksIDc4LCA4NSwgNzcsIDY5LCA4MiwgCi0gICAgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNTAsIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAKLSAgICA0NSwgNDksIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAxMjgsIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY5LCA3OCwgODQsIAotICAgIDcyLCA4NSwgODMsIDczLCA2NSwgODMsIDc3LCAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgODAsIDgyLCA3MywgODMsIDY5LCAKLSAgICAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDY5LCA3OCwgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzgsIAotICAgIDg0LCA2OSwgMjEwLCA2OSwgNzgsIDgxLCA4NSwgNzMsIDgyLCA4OSwgMTI4LCA2OSwgNzgsIDgxLCAxMjgsIDY5LCA3OCwgCi0gICAgNzksIDIxMSwgNjksIDc4LCA3OCwgMTI4LCA2OSwgNzgsIDc2LCA2NSwgODIsIDcxLCA2OSwgNzcsIDY5LCA3OCwgODQsIAotICAgIDEyOCwgNjksIDc4LCA3MSwgNzMsIDc4LCA2OSwgMTI4LCA2OSwgNzgsIDY4LCA3OSwgNzAsIDc5LCA3OCwgNzksIDc4LCAKLSAgICAxMjgsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNjksIDc4LCA2OCwgNjksIAotICAgIDY1LCA4NiwgNzksIDg1LCA4MiwgMTI4LCA2OSwgNzgsIDY3LCA3OSwgODUsIDc4LCA4NCwgNjksIDgyLCA4MywgMTI4LCA2OSwgCi0gICAgNzgsIDY3LCA3NiwgNzksIDgzLCA4NSwgODIsIDY5LCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDczLCA3OCwgMTk5LCAKLSAgICA2OSwgNzgsIDY3LCAxMjgsIDY5LCA3OCwgNjUsIDgyLCA4OCwgNzMsIDIxMSwgNjksIDc4LCA2NSwgODIsIDc3LCA3OSwgNzgsIAotICAgIDczLCA3OSwgMjExLCA2OSwgNzcsIDgwLCA4NCwgMjE3LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDg0LCA3MywgMTk1LCA2OSwgCi0gICAgNzcsIDgwLCA3MiwgNjUsIDgzLCA3MywgMjExLCA2OSwgNzcsIDY2LCA4MiwgNzksIDczLCA2OCwgNjksIDgyLCA4OSwgMTI4LCAKLSAgICA2OSwgNzcsIDY2LCA3NiwgNjksIDc3LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA3NiwgNzYsIDczLCA4MywgNzIsIDc3LCA2OSwgCi0gICAgNzgsIDg0LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA2OCwgNjgsIDczLCA3OCwgNzEsIDEyOCwgNjksIDc2LCA4NCwgMTI4LCAKLSAgICA2OSwgNzYsIDc2LCA3MywgODAsIDg0LCA3MywgMTk1LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCA3MywgODMsIDEyOCwgNjksIAotICAgIDc2LCA3NiwgNzMsIDgwLCA4MywgNjksIDEyOCwgNjksIDc2LCA3MywgNzAsIDczLCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgCi0gICAgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgNzgsIDEyOCwgNjksIDc2LCAKLSAgICA2OSwgODYsIDY5LCAyMDYsIDY5LCA3NiwgNjksIDgwLCA3MiwgNjUsIDc4LCA4NCwgMTI4LCA2OSwgNzYsIDY5LCA3NywgNjksIAotICAgIDc4LCAyMTIsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCA2NywgNjUsIDIwNCwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgCi0gICAgNzMsIDE5NSwgNjksIDc2LCA2NSwgNzAsIDgyLCA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgODQsIDgyLCA2OSwgODAsIDg0LCAKLSAgICA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgMTI4LCA2OSwgNzUsIDcwLCA3OSwgNzgsIDczLCA4NCwgNzMsIDc1LCA3OSwgNzgsIAotICAgIDEyOCwgNjksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY5LCA3NCwgNjksIDY3LCAyMTIsIDY5LCA3MywgODMsIDEyOCwgNjksIAotICAgIDczLCA3MSwgNzIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDIxNywgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgCi0gICAgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMjExLCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAxMjgsIDY5LCAKLSAgICA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDY5LCA2OSwgMjA2LCA2OSwgNzMsIAotICAgIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNjksIDEyOCwgNjksIDcyLCA4NywgCi0gICAgNjUsIDIxOCwgNjksIDcxLCA4OSwgODAsIDg0LCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzEsIDczLCAKLSAgICA4MiwgMTI4LCA2OSwgNzEsIDcxLCAxMjgsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA2OSwgNzUsIAotICAgIDY1LCA2NSwgMTI4LCA2OSwgNjksIDcyLCAxMjgsIDY5LCA2OSwgNjYsIDY5LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCi0gICAgNjksIDY4LCA3MywgODQsIDc5LCA4MiwgNzMsIDY1LCAyMDQsIDY5LCA2OCwgNzMsIDc4LCAxMjgsIDY5LCA2OCwgNjgsIAotICAgIDEyOCwgNjksIDY2LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDY1LCA4MywgODQsIDY5LCA4MiwgMjA2LCA2OSwgCi0gICAgNjUsIDgzLCAyMTIsIDY5LCA2NSwgODIsIDg0LCA3MiwgNzYsIDIxNywgNjksIDY1LCA4MiwgODQsIDcyLCAxMjgsIDY5LCAKLSAgICA2NSwgODIsIDg0LCAyMDAsIDY5LCA2NSwgODIsIDgzLCAxMjgsIDY5LCA2NSwgODIsIDc2LCAyMTcsIDY5LCA2NSwgNzcsIAotICAgIDcyLCA2NSwgNzgsIDY3LCA3MiwgNzksIDc2LCA3NiwgMTI4LCA2OSwgNjUsIDcxLCA3NiwgNjksIDEyOCwgNjksIDY1LCA2OCwgCi0gICAgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDY1LCA2NiwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDE3OCwgNjksIDQ4LCAKLSAgICA1MSwgNTYsIDEyOCwgNjksIDQ4LCA1MSwgNTUsIDEyOCwgNjksIDQ4LCA1MSwgNTQsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIAotICAgIDY1LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCAxMjgsIDY5LCA0OCwgNTEsIDUxLCAxMjgsIDY5LCA0OCwgNTEsIDUwLCAxMjgsIAotICAgIDY5LCA0OCwgNTEsIDQ5LCAxMjgsIDY5LCA0OCwgNTEsIDQ4LCAxMjgsIDY5LCA0OCwgNTAsIDU3LCAxMjgsIDY5LCA0OCwgCi0gICAgNTAsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA1NiwgMTI4LCA2OSwgNDgsIDUwLCA1NSwgMTI4LCA2OSwgNDgsIDUwLCAKLSAgICA1NCwgMTI4LCA2OSwgNDgsIDUwLCA1MywgMTI4LCA2OSwgNDgsIDUwLCA1MiwgMTI4LCA2OSwgNDgsIDUwLCA1MSwgMTI4LCAKLSAgICA2OSwgNDgsIDUwLCA1MCwgMTI4LCA2OSwgNDgsIDUwLCA0OSwgMTI4LCA2OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNjksIAotICAgIDQ4LCA1MCwgNDgsIDEyOCwgNjksIDQ4LCA0OSwgNTcsIDEyOCwgNjksIDQ4LCA0OSwgNTYsIDEyOCwgNjksIDQ4LCA0OSwgCi0gICAgNTUsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU1LCAxMjgsIDY5LCA0OCwgNDksIDU0LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCAKLSAgICA1NCwgMTI4LCA2OSwgNDgsIDQ5LCA1MywgMTI4LCA2OSwgNDgsIDQ5LCA1MiwgMTI4LCA2OSwgNDgsIDQ5LCA1MSwgMTI4LCAKLSAgICA2OSwgNDgsIDQ5LCA1MCwgMTI4LCA2OSwgNDgsIDQ5LCA0OSwgMTI4LCA2OSwgNDgsIDQ5LCA0OCwgMTI4LCA2OSwgNDgsIAotICAgIDQ4LCA1NywgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDEyOCwgNjksIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgCi0gICAgNDgsIDU2LCAxMjgsIDY5LCA0OCwgNDgsIDU1LCAxMjgsIDY5LCA0OCwgNDgsIDU0LCAxMjgsIDY5LCA0OCwgNDgsIDUzLCAKLSAgICAxMjgsIDY5LCA0OCwgNDgsIDUyLCAxMjgsIDY5LCA0OCwgNDgsIDUxLCAxMjgsIDY5LCA0OCwgNDgsIDUwLCAxMjgsIDY5LCAKLSAgICA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA0NSwgNzcsIDY1LCA3MywgMjA0LCA2OCwgOTAsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIAotICAgIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDg3LCA2OSwgMTI4LCA2OCwgOTAsIDg1LCAxMjgsIDY4LCA5MCwgNzksIDEyOCwgNjgsIAotICAgIDkwLCA3NCwgNjksIDEyOCwgNjgsIDkwLCA3MywgMTI4LCA2OCwgOTAsIDcyLCA2OSwgMTI4LCA2OCwgOTAsIDcyLCA2NSwgCi0gICAgMTI4LCA2OCwgOTAsIDY5LCA3NiwgNzksIDEyOCwgNjgsIDkwLCA2OSwgNjksIDEyOCwgNjgsIDkwLCA2OSwgMTI4LCA2OCwgCi0gICAgOTAsIDY1LCA2NSwgMTI4LCA2OCwgOTAsIDY1LCAxMjgsIDY4LCA5MCwgMTI4LCA2OCwgMjE4LCA2OCwgODksIDc5LCAxMjgsIAotICAgIDY4LCA4OSwgMjA3LCA2OCwgODksIDY5LCA3MiwgMTI4LCA2OCwgODksIDY5LCAyMDAsIDY4LCA4NywgNzksIDEyOCwgNjgsIAotICAgIDg3LCA2OSwgMTI4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA4NiwgNzMsIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2OCwgCi0gICAgODYsIDY4LCAxMjgsIDY4LCA4NiwgMTI4LCA2OCwgODUsIDg0LCA3MywgNjksIDgzLCAxMjgsIDY4LCA4NSwgODMsIDc1LCAKLSAgICAxMjgsIDY4LCA4NSwgODMsIDcyLCA2OSwgNzgsIDc4LCA2NSwgMTI4LCA2OCwgODUsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjgsIDg1LCA4MiwgNTAsIDEyOCwgNjgsIDg1LCA4MCwgNzksIDc4LCA2OCwgNzMsIDg1LCAyMTEsIDY4LCA4NSwgCi0gICAgNzksIDg4LCAxMjgsIDY4LCA4NSwgNzksIDEyOCwgNjgsIDg1LCA3OCwgNTIsIDEyOCwgNjgsIDg1LCA3OCwgNTEsIDEyOCwgCi0gICAgNjgsIDg1LCA3OCwgMTc5LCA2OCwgODUsIDc3LCAxMjgsIDY4LCA4NSwgMjA0LCA2OCwgODUsIDcyLCAxMjgsIDY4LCA4NSwgCi0gICAgNzEsIDg1LCA2OCwgMTI4LCA2OCwgODUsIDY2LCA1MCwgMTI4LCA2OCwgODUsIDY2LCAxMjgsIDY4LCA4NSwgMTk0LCA2OCwgCi0gICAgODIsIDg5LCAxMjgsIDY4LCA4MiwgMjE3LCA2OCwgODIsIDg1LCA3NywgMTI4LCA2OCwgODIsIDg1LCAyMDUsIDY4LCA4MiwgCi0gICAgNzksIDgwLCA4MywgMTI4LCA2OCwgODIsIDc5LCA4MCwgNzYsIDY5LCA4NCwgMTI4LCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCAKLSAgICA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDY4LCA4MiwgNzksIDc3LCA2OSwgNjgsIDY1LCA4MiwgMjE3LCA2OCwgODIsIAotICAgIDczLCA4NiwgNjksIDEyOCwgNjgsIDgyLCA3MywgODYsIDE5NywgNjgsIDgyLCA3MywgNzgsIDc1LCAxMjgsIDY4LCA4MiwgCi0gICAgNzMsIDIwNCwgNjgsIDgyLCA2OSwgODMsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDg1LCA3MSwgNzIsIDg0LCAyMTEsIDY4LCAKLSAgICA4MiwgNjUsIDc3LCAxMjgsIDY4LCA4MiwgNjUsIDIwNSwgNjgsIDgyLCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgODIsIAotICAgIDY1LCA3MSwgNzksIDIwNiwgNjgsIDgyLCA2NSwgNzAsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgCi0gICAgNjUsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIAotICAgIDE5MywgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgCi0gICAgNjgsIDIxMSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA2OCwgNzksIDg3LCAKLSAgICA3OCwgMTI4LCA2OCwgNzksIDg2LCA2OSwgMTI4LCA2OCwgNzksIDg1LCA3MSwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNjgsIAotICAgIDc5LCA4NSwgNjYsIDg0LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgCi0gICAgNDUsIDc2LCA3MywgNzgsIDE5NywgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY4LCAKLSAgICA3OSwgODUsIDY2LCA3NiwgNjksIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDgwLCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDg0LCA2OSwgNjgsIDQ1LCA3OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgNzYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODQsIDY5LCA2OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDE5NiwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAotICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCi0gICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIAotICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIAotICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCi0gICAgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCAKLSAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAotICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAotICAgIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAKLSAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCi0gICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAKLSAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgCi0gICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgCi0gICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKLSAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIAotICAgIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIAotICAgIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAotICAgIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCAxMjgsIDY4LCA3OSwgODQsIDc2LCA2OSwgODMsIDIxMSwgNjgsIDc5LCA4MiwgODUsIDEyOCwgNjgsIDc5LCA3OSwgCi0gICAgODIsIDEyOCwgNjgsIDc5LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzcsIDY1LCAKLSAgICA3MywgMjA2LCA2OCwgNzksIDc2LCA4MCwgNzIsIDczLCA3OCwgMTI4LCA2OCwgNzksIDc2LCA3NiwgODMsIDEyOCwgNjgsIAotICAgIDc5LCA3NiwgNzYsIDY1LCAyMTAsIDY4LCA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCA3NSwgNzcsIDY1LCA3MywgCi0gICAgMTI4LCA2OCwgNzksIDczLCA4NCwgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgMTk5LCA2OCwgNzksIDY5LCAyMTEsIAotICAgIDY4LCA3OSwgNjgsIDY5LCA3NSwgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjgsIDc5LCA2NSwgCi0gICAgNjcsIDcyLCA2NSwgODMsIDcyLCA3NywgNjksIDY5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIAotICAgIDY5LCAxOTcsIDY4LCA3OSwgNjUsIDEyOCwgNjgsIDc5LCA0NSwgNzksIDEyOCwgNjgsIDc3LCAxMjgsIDY4LCAyMDUsIDY4LCAKLSAgICA3NiwgODUsIDEyOCwgNjgsIDc2LCA3OSwgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCAKLSAgICA2OCwgNzYsIDcyLCA2NSwgMTI4LCA2OCwgNzYsIDY5LCA2OSwgMTI4LCA2OCwgNzYsIDY1LCAxMjgsIDY4LCA3NiwgMTI4LCAKLSAgICA2OCwgNzUsIDY1LCA4MiwgMTI4LCA2OCwgNzUsIDY1LCAyMTAsIDY4LCA3NCwgNjksIDgyLCA4NiwgNzMsIDEyOCwgNjgsIAotICAgIDc0LCA2OSwgODIsIDg2LCAxMjgsIDY4LCA3NCwgNjksIDEyOCwgNjgsIDc0LCA2NSwgMTI4LCA2OCwgNzMsIDkwLCA5MCwgCi0gICAgMjE3LCA2OCwgNzMsIDg2LCA3OSwgODIsIDY3LCAxOTcsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MiwgMTI4LCAKLSAgICA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAxOTYsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIDczLCA4NiwgNzMsIAotICAgIDY4LCAxOTcsIDY4LCA3MywgODYsIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA3MywgODQsIDg0LCAKLSAgICAyMDcsIDY4LCA3MywgODMsIDg0LCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzgsIAotICAgIDcxLCA4NSwgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzMsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA2OCwgNzMsIDgzLCA4MywgCi0gICAgNzksIDc2LCA4NiwgNjksIDQ1LCA1MCwgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDEyOCwgNjgsIDczLCAKLSAgICA4MywgODAsIDY5LCA4MiwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgNzUsIDEyOCwgNjgsIDczLCA4MywgNzMsIAotICAgIDc3LCA3OSwgODUsIDEyOCwgNjgsIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgNjcsIDc5LCA3OCwgODQsIDczLCA3OCwgCi0gICAgODUsIDc5LCA4NSwgMjExLCA2OCwgNzMsIDgzLCAxOTUsIDY4LCA3MywgODMsIDY1LCA4MCwgODAsIDc5LCA3MywgNzgsIDg0LCAKLSAgICA2OSwgMTk2LCA2OCwgNzMsIDgzLCA2NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzMsIDgyLCA3MSwgMTkzLCA2OCwgNzMsIAotICAgIDgyLCA2OSwgNjcsIDg0LCA3NiwgMjE3LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgCi0gICAgNzMsIDgwLCA4NCwgNjksIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzksIDg1LCAKLSAgICA3OCwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDIwMSwgNjgsIDczLCA3OCwgNzEsIAotICAgIDY2LCA2NSwgMjEyLCA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgNjgsIDczLCA3NywgCi0gICAgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIAotICAgIDc5LCA3OCwgNDUsIDUwLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNDksIDEyOCwgCi0gICAgNjgsIDczLCA3NywgNzMsIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIAotICAgIDczLCAxOTMsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNzcsIDY5LCA3OCwgCi0gICAgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgNzMsIDc2LCAxMjgsIDY4LCA3MywgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIAotICAgIDc5LCAyMTEsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgNzEsIDgyLCA2NSwgMjA1LCA2OCwgCi0gICAgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNjgsIDczLCAKLSAgICA3MSwgNjUsIDc3LCA3NywgNjUsIDEyOCwgNjgsIDczLCA3MSwgMTkzLCA2OCwgNzMsIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIAotICAgIDIxMSwgNjgsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgCi0gICAgODQsIDIxNywgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDcwLCAKLSAgICA3MCwgNjksIDgyLCA2OSwgNzgsIDg0LCA3MywgNjUsIDc2LCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgCi0gICAgNjcsIDE5NywgNjgsIDczLCA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCAKLSAgICA2OSwgODMsIDczLCAyMTEsIDY4LCA3MywgNjksIDgwLCAxMjgsIDY4LCA3MywgMTk3LCA2OCwgNzMsIDY2LCAxMjgsIDY4LCAKLSAgICA3MywgNjUsIDg0LCA3OSwgNzgsIDc5LCAyMDYsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgMjAxLCA2OCwgNzMsIAotICAgIDY1LCA4MywgODQsIDc5LCA3NiwgMjAxLCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgODMsIDEyOCwgNjgsIDczLCA2NSwgCi0gICAgNzcsIDc5LCA3OCwgNjgsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgMTk2LCA2OCwgNzMsIDY1LCA3NywgNjksIDg0LCAKLSAgICA2OSwgMjEwLCA2OCwgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIAotICAgIDczLCA3NSwgMTkzLCA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCA4NCwgNDUsIDIwOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgCi0gICAgNjUsIDc2LCAxMjgsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCAKLSAgICA3MywgOTAsIDY5LCAxOTYsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2NSwgNjksIAotICAgIDgyLCA2OSwgODMsIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgCi0gICAgNzksIDEyOCwgNjgsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIDEyOCwgCi0gICAgNjgsIDcyLCA3MiwgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCAKLSAgICA3MiwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNjUsIAotICAgIDgyLCA3NywgNjUsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY1LCA4NCwgCi0gICAgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDY1LCAKLSAgICA2NSwgNzYsIDg1LCAxMjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCA5MCwgMjAwLCAKLSAgICA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjExLCA2OCwgNjksIAotICAgIDg4LCA3MywgNjUsIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCA3NiwgNzksIDgwLCA3NywgCi0gICAgNjksIDc4LCA4NCwgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgMjAzLCA2OCwgNjksIDgzLCAKLSAgICA3MywgNzEsIDc4LCAxMjgsIDY4LCA2OSwgODMsIDczLCAxMjgsIDY4LCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgCi0gICAgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNjgsIDY5LCAKLSAgICA4MiwgNjksIDg0LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgNjksIDEyOCwgNjgsIDY5LCA4MCwgNjUsIAotICAgIDgyLCA4NCwgNzcsIDY5LCA3OCwgMjEyLCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3OCwgCi0gICAgODQsIDczLCA4MywgODQsIDgyLCAyMTcsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCAKLSAgICA3OCwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIAotICAgIDY5LCA3OCwgNzgsIDY5LCA3OCwgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDc4LCAxOTcsIDY4LCA2OSwgCi0gICAgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCAKLSAgICA2OCwgNjksIDc2LCA4NCwgMTI4LCA2OCwgNjksIDc2LCA4MCwgNzIsIDczLCAxOTUsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIAotICAgIDgyLCAyMTcsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA3MywgCi0gICAgNzcsIDczLCA4NCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMjEwLCA2OCwgNjksIDc2LCAKLSAgICA3MywgNjcsIDczLCA3OSwgODUsIDIxMSwgNjgsIDY5LCA3NiwgNjksIDg0LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA2OSwgODQsIAorICAgIDg0LCAxMjgsIDgyLCA3NiwgNzksIDEyOCwgODIsIDc2LCA3NywgMTI4LCA4MiwgNzYsIDczLCAxMjgsIDgyLCA3NiwgNjksIAorICAgIDEyOCwgODIsIDc0LCA2OSwgMjExLCA4MiwgNzQsIDY5LCAxMjgsIDgyLCA3NCwgMTk3LCA4MiwgNzMsIDg2LCA2OSwgODIsIAorICAgIDEyOCwgODIsIDczLCA4NCwgODUsIDY1LCA3NiwgMTI4LCA4MiwgNzMsIDg0LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MiwgCisgICAgNzMsIDg0LCA4MywgNzMsIDEyOCwgODIsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA3MywgODMsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgODIsIDY1LCAxMjgsIDgyLCA3MywgODAsIDEyOCwgODIsIDczLCA3OCwgNzEsIDIxMSwgODIsIDczLCA3OCwgNzAsIAorICAgIDc5LCA4MiwgOTAsIDY1LCA3OCwgNjgsIDc5LCAxMjgsIDgyLCA3MywgMjA2LCA4MiwgNzMsIDc3LCA3MSwgNjYsIDY1LCAKKyAgICAxMjgsIDgyLCA3MywgNzUsIDgyLCA3MywgNzUsIDEyOCwgODIsIDczLCA3MSwgODYsIDY5LCA2OCwgNzMsIDE5NSwgODIsIAorICAgIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgODIsIDczLCA3MSwgNzIsIDg0LCA3MiwgNjUsIDc4LCAKKyAgICAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDc2LCA2OSwgNzAsIDIxMiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCAKKyAgICA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCAKKyAgICA3OCwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgCisgICAgNzYsIDQ1LCA4OSwgNjksIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIAorICAgIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIAorICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgCisgICAgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIAorICAgIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgCisgICAgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgCisgICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAorICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAKKyAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNjUsIDc4LCAKKyAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCAKKyAgICA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCAKKyAgICA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgCisgICAgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAorICAgIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCAKKyAgICA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzIsIDczLCA2OSwgCisgICAgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MiwgNzMsIDY5LCAKKyAgICA4NSwgMjA0LCA4MiwgNzMsIDY5LCA3NiwgMTI4LCA4MiwgNzMsIDY5LCA2OSwgMTI4LCA4MiwgNzMsIDY3LCA2OSwgNzcsIAorICAgIDEyOCwgODIsIDczLCA2NywgNjksIDEyOCwgODIsIDczLCA2NywgMTk3LCA4MiwgNzMsIDY2LCA2NiwgNzksIDc4LCAxMjgsIAorICAgIDgyLCA3MywgNjUsIDIwNCwgODIsIDcyLCA3OSwgODQsIDczLCAxOTUsIDgyLCA3MiwgNzksIDEyOCwgODIsIDcyLCAyMDcsIAorICAgIDgyLCA3MiwgNjUsIDEyOCwgODIsIDcxLCA4OSwgNzMsIDc4LCA3MSwgODMsIDEyOCwgODIsIDcxLCA4OSwgNjUsIDc4LCAKKyAgICAxMjgsIDgyLCA3MSwgODksIDE5MywgODIsIDY5LCA4NiwgNzksIDc2LCA4NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgODYsIAorICAgIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODYsIDc3LCA2NSwgMTI4LCA4MiwgNjksIDg2LCA3MywgCisgICAgNjUsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDY4LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCAKKyAgICAxOTYsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDE5NywgODIsIDY5LCA4NSwgODgsIDEyOCwgODIsIDY5LCA4NSwgMTI4LCAKKyAgICA4MiwgNjksIDg0LCA4NSwgODIsIDc4LCAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgMjA2LCA4MiwgNjksIDg0LCA4MiwgNzksIAorICAgIDcwLCA3NiwgNjksIDIxNiwgODIsIDY5LCA4NCwgODIsIDY5LCA2NSwgODQsIDEyOCwgODIsIDY5LCA4NCwgNzksIDgyLCA4NCwgCisgICAgMTI4LCA4MiwgNjksIDgzLCA4NSwgODAsIDczLCA3OCwgODUsIDgzLCAxMjgsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzksIDc5LCAKKyAgICA3NywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDY5LCAxOTYsIDgyLCA2OSwgODMsIDg0LCAxMjgsIAorICAgIDgyLCA2OSwgODMsIDgwLCA3OSwgNzgsIDgzLCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgODUsIDgyLCA2NywgNjksIDEyOCwgCisgICAgODIsIDY5LCA4MywgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4MywgNzMsIDgzLCA4NCwgNjUsIAorICAgIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgNzMsIDY4LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCAKKyAgICAyMDAsIDgyLCA2OSwgODIsIDY5LCA3OCwgNzEsIDcxLCA2NSwgNzgsIDEyOCwgODIsIDY5LCA4MiwgNjksIDc1LCA2NSwgNzgsIAorICAgIDEyOCwgODIsIDY5LCA4MCwgODIsIDY5LCA4MywgNjksIDc4LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA3NiwgNjUsIDY3LCA2OSwgCisgICAgNzcsIDY5LCA3OCwgMjEyLCA4MiwgNjksIDgwLCA3MiwgMTI4LCA4MiwgNjksIDgwLCA2OSwgODQsIDczLCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDY5LCAxOTYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDEyOCwgODIsIAorICAgIDY5LCA4MCwgNjksIDY1LCAyMTIsIDgyLCA2OSwgODAsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY5LCA4MCwgNjUsIDEyOCwgCisgICAgODIsIDY5LCA4MCwgMTkzLCA4MiwgNjksIDc4LCA4NCwgNzksIDcxLCA2OSwgNzgsIDEyOCwgODIsIDY5LCA3OCwgMTI4LCAKKyAgICA4MiwgNjksIDIwNiwgODIsIDY5LCA3NywgODUsIDEyOCwgODIsIDY5LCA3NywgNjksIDY4LCA4OSwgMTI4LCA4MiwgNjksIAorICAgIDc2LCA3MywgNzEsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNzMsIDY5LCA4NiwgNjksIDE5NiwgODIsIDY5LCA3NiwgCisgICAgNjksIDY1LCA4MywgNjksIDEyOCwgODIsIDY5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDc2LCAKKyAgICA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNjUsIDY1LCAxMjgsIDgyLCA2OSwgNzQsIDY1LCA3OCwgCisgICAgMTk5LCA4MiwgNjksIDczLCAxOTYsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTIsIDEyOCwgODIsIDY5LCAKKyAgICA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MSwgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUwLCAxMjgsIAorICAgIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDIxMSwgODIsIDY5LCA3MSwgCisgICAgNzMsIDgzLCA4NCwgNjksIDgyLCA2OSwgMTk2LCA4MiwgNjksIDcxLCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDcxLCAKKyAgICA3MywgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDcxLCA3MywgNjUsIDEyOCwgODIsIDY5LCA3MCwgNzksIDgyLCA3NywgNjksIAorICAgIDE5NiwgODIsIDY5LCA3MCwgNjksIDgyLCA2OSwgNzgsIDY3LCAxOTcsIDgyLCA2OSwgNjgsIDg1LCA4MCwgNzYsIDczLCA2NywgCisgICAgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCAKKyAgICA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MiwgNjksIDY3LCA4NCwgNzMsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4MiwgNjksIAorICAgIDY3LCA4NCwgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgMjEwLCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDY5LCAKKyAgICAxMjgsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4MiwgNjksIDY3LCA4MiwgNjksIDY1LCA4NCwgNzMsIAorICAgIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDc5LCA4MiwgCisgICAgNjgsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY3LCA3OSwgODIsIDE5NiwgODIsIDY5LCA2NywgNjksIDgwLCA4NCwgNzMsIDg2LCAKKyAgICAxOTcsIDgyLCA2OSwgNjcsIDY5LCA3MywgODYsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCA4MiwgNDUsIAorICAgIDUwLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDcyLCA3NywgODUsIDc1LCAKKyAgICAxMjgsIDgyLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MiwgNjgsIDIwNywgODIsIDY4LCA2OSwgMjA0LCA4MiwgNjYsIDY1LCAKKyAgICA4MywgMTkzLCA4MiwgNjUsIDg5LCA4MywgMTI4LCA4MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIAorICAgIDg0LCA3MywgNzksIDEyOCwgODIsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDcyLCAxOTMsIDgyLCA2NSwgCisgICAgODQsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDEyOCwgODIsIDY1LCA4MywgODcsIDY1LCA2OCwgNzMsIDEyOCwgODIsIDY1LCAKKyAgICA4MywgNzksIDg1LCAyMDQsIDgyLCA2NSwgODMsIDcyLCA2NSwgMTI4LCA4MiwgNjUsIDgxLCAxMjgsIDgyLCA2NSwgODAsIAorICAgIDczLCA4MywgNzcsIDY1LCAxMjgsIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgCisgICAgNzgsIDEyOCwgODIsIDY1LCA3NywgMjExLCA4MiwgNjUsIDc3LCA2NiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgNzUsIDcyLCAKKyAgICA2NSwgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNzUsIDY1LCA2NSwgODIsIDY1LCA2NSwgNzgsIDgzLCA2NSwgODksIDY1LCAxMjgsIAorICAgIDgyLCA2NSwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDY1LCA3MywgODMsIDY5LCAxOTYsIDgyLCA2NSwgNzMsIDc4LCA2NiwgCisgICAgNzksIDg3LCAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIDg5LCAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIAorICAgIDIxNywgODIsIDY1LCA3MywgNzYsIDEyOCwgODIsIDY1LCA3MywgNjgsIDIwNywgODIsIDY1LCA3MywgNjgsIDY1LCAxMjgsIAorICAgIDgyLCA2NSwgNzIsIDc3LCA2NSwgODQsIDg1LCA3NiwgNzYsIDY1LCAyMDAsIDgyLCA2NSwgNzIsIDEyOCwgODIsIDY1LCA3MCwgCisgICAgNjksIDEyOCwgODIsIDY1LCA2OSwgNzcsIDEyOCwgODIsIDY1LCA2OCwgNzMsIDc5LCA2NSwgNjcsIDg0LCA3MywgODYsIAorICAgIDE5NywgODIsIDY1LCA2OCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgNjgsIDczLCAyMDcsIDgyLCA2NSwgNjgsIDIwMSwgODIsIAorICAgIDY1LCA2OCwgMTI4LCA4MiwgNjUsIDE5NiwgODIsIDY1LCA2NywgODEsIDg1LCA2OSwgMjEyLCA4MiwgNjUsIDY3LCA3MywgCisgICAgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNjYsIDY2LCA3MywgODQsIDEyOCwgODIsIDY1LCA2NiwgNjYsIDczLCAyMTIsIDgyLCAKKyAgICA2NSwgNjYsIDEyOCwgODIsIDY1LCA2NSwgNzMsIDEyOCwgODIsIDY1LCA1MSwgMTI4LCA4MiwgNjUsIDUwLCAxMjgsIDgyLCAKKyAgICA2NSwgNDUsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDU3LCAxMjgsIDgyLCA0OCwgNTAsIDU2LCAxMjgsIDgyLCA0OCwgNTAsIAorICAgIDU1LCAxMjgsIDgyLCA0OCwgNTAsIDU0LCAxMjgsIDgyLCA0OCwgNTAsIDUzLCAxMjgsIDgyLCA0OCwgNTAsIDUyLCAxMjgsIAorICAgIDgyLCA0OCwgNTAsIDUxLCAxMjgsIDgyLCA0OCwgNTAsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDQ5LCAxMjgsIDgyLCA0OCwgCisgICAgNTAsIDQ4LCAxMjgsIDgyLCA0OCwgNDksIDU3LCAxMjgsIDgyLCA0OCwgNDksIDU2LCAxMjgsIDgyLCA0OCwgNDksIDU1LCAKKyAgICAxMjgsIDgyLCA0OCwgNDksIDU0LCA2NSwgMTI4LCA4MiwgNDgsIDQ5LCA1NCwgMTI4LCA4MiwgNDgsIDQ5LCA1MywgMTI4LCAKKyAgICA4MiwgNDgsIDQ5LCA1MiwgMTI4LCA4MiwgNDgsIDQ5LCA1MSwgMTI4LCA4MiwgNDgsIDQ5LCA1MCwgMTI4LCA4MiwgNDgsIAorICAgIDQ5LCA0OSwgMTI4LCA4MiwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDEyOCwgODIsIDQ4LCA0OCwgCisgICAgNTcsIDEyOCwgODIsIDQ4LCA0OCwgNTYsIDEyOCwgODIsIDQ4LCA0OCwgNTUsIDEyOCwgODIsIDQ4LCA0OCwgNTQsIDEyOCwgCisgICAgODIsIDQ4LCA0OCwgNTMsIDEyOCwgODIsIDQ4LCA0OCwgNTIsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDY2LCAxMjgsIDgyLCAKKyAgICA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgMTI4LCA4MiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgODIsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgODIsIDQ4LCA0OCwgNDksIDEyOCwgODIsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDgxLCA4OSwgCisgICAgODgsIDEyOCwgODEsIDg5LCA4NSwgMTI4LCA4MSwgODksIDg0LCAxMjgsIDgxLCA4OSwgODIsIDg4LCAxMjgsIDgxLCA4OSwgCisgICAgODIsIDEyOCwgODEsIDg5LCA4MCwgMTI4LCA4MSwgODksIDc5LCAxMjgsIDgxLCA4OSwgNzMsIDEyOCwgODEsIDg5LCA2OSwgCisgICAgNjksIDEyOCwgODEsIDg5LCA2OSwgMTI4LCA4MSwgODksIDY1LCA2NSwgMTI4LCA4MSwgODksIDY1LCAxMjgsIDgxLCA4OSwgCisgICAgMTI4LCA4MSwgODcsIDczLCAxMjgsIDgxLCA4NywgNjksIDY5LCAxMjgsIDgxLCA4NywgNjksIDEyOCwgODEsIDg3LCA2NSwgCisgICAgNjUsIDEyOCwgODEsIDg3LCA2NSwgMTI4LCA4MSwgODUsIDg4LCAxMjgsIDgxLCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgCisgICAgODYsIDEyOCwgODEsIDg1LCA4NSwgMTI4LCA4MSwgODUsIDg0LCAxMjgsIDgxLCA4NSwgODMsIDcyLCA4MywgNzIsIDY1LCAKKyAgICA4OSwgNjUsIDEyOCwgODEsIDg1LCA4MiwgODgsIDEyOCwgODEsIDg1LCA4MiwgMTI4LCA4MSwgODUsIDgwLCAxMjgsIDgxLCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDgxLCA4NSwgNzksIDg0LCAxOTcsIDgxLCA4NSwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgCisgICAgMjA2LCA4MSwgODUsIDc5LCA4NCwgMTI4LCA4MSwgODUsIDc5LCA4MCwgMTI4LCA4MSwgODUsIDc5LCAxMjgsIDgxLCA4NSwgCisgICAgNzUsIDEyOCwgODEsIDg1LCA3MywgNzgsIDg0LCA2OSwgODMsIDgzLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MSwgODUsIDczLCAKKyAgICA3OCwgNjgsIDczLCA2NywgNjksIDgzLCA3MywgNzcsIDE5MywgODEsIDg1LCA3MywgNzgsIDY3LCA4NSwgNzgsIDg4LCAxMjgsIAorICAgIDgxLCA4NSwgNzMsIDc4LCA2NSwgODIsIDczLCA4NSwgMjExLCA4MSwgODUsIDczLCA3NiwgNzYsIDEyOCwgODEsIDg1LCA3MywgCisgICAgNjcsIDIwMywgODEsIDg1LCA3MywgMTI4LCA4MSwgODUsIDcwLCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCAKKyAgICA3OCwgNjksIDE5NiwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDgxLCA4NSwgNjksIDY5LCA3OCwgMTI4LCA4MSwgODUsIDY5LCA2OSwgMjA2LCA4MSwgODUsIDY5LCAxMjgsIAorICAgIDgxLCA4NSwgNjYsIDg1LCA4NCwgODMsIDEyOCwgODEsIDg1LCA2NSwgODQsIDY5LCA4MiwgNzgsIDczLCA3OSwgMjA2LCA4MSwgCisgICAgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgODMsIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDIxMSwgODEsIDg1LCAKKyAgICA2NSwgODIsIDg0LCA2OSwgODIsIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgMjEwLCA4MSwgODUsIDY1LCA3OCwgODQsIAorICAgIDczLCA4NCwgMjE3LCA4MSwgODUsIDY1LCA2OCwgODIsIDg1LCA4MCwgNzYsIDE5NywgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgCisgICAgNzgsIDg0LCAxMjgsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDc4LCAyMTIsIDgxLCA4NSwgNjUsIDY4LCAxMjgsIDgxLCAKKyAgICA4NSwgNjUsIDE5NiwgODEsIDg1LCA2NSwgMTI4LCA4MSwgODUsIDEyOCwgODEsIDIwOCwgODEsIDc5LCA4OCwgMTI4LCA4MSwgCisgICAgNzksIDg0LCAxMjgsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDgxLCA3OSwgODAsIDY1LCAxMjgsIDgxLCA3OSwgODAsIDEyOCwgCisgICAgODEsIDc5LCA3OSwgMTI4LCA4MSwgNzksIDIwNywgODEsIDc5LCA3MCwgMTI4LCA4MSwgNzksIDE5OCwgODEsIDc5LCA2NSwgCisgICAgMTI4LCA4MSwgNzksIDEyOCwgODEsIDc4LCAxMjgsIDgxLCA3MywgODgsIDEyOCwgODEsIDczLCA4NCwgODMsIDY1LCAxMjgsIAorICAgIDgxLCA3MywgODQsIDEyOCwgODEsIDczLCA4MCwgMTI4LCA4MSwgNzMsIDczLCAxMjgsIDgxLCA3MywgNjksIDg4LCAxMjgsIAorICAgIDgxLCA3MywgNjksIDg0LCAxMjgsIDgxLCA3MywgNjksIDgwLCAxMjgsIDgxLCA3MywgNjksIDEyOCwgODEsIDczLCAxMjgsIAorICAgIDgxLCA3MiwgODcsIDczLCAxMjgsIDgxLCA3MiwgODcsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDg3LCA2OSwgMTI4LCA4MSwgCisgICAgNzIsIDg3LCA2NSwgNjUsIDEyOCwgODEsIDcyLCA4NywgNjUsIDEyOCwgODEsIDcyLCA4NSwgMTI4LCA4MSwgNzIsIDc5LCAKKyAgICAxMjgsIDgxLCA3MiwgNzMsIDEyOCwgODEsIDcyLCA2OSwgNjksIDEyOCwgODEsIDcyLCA2OSwgMTI4LCA4MSwgNzIsIDY1LCAKKyAgICA2NSwgMTI4LCA4MSwgNzIsIDY1LCAxMjgsIDgxLCA3MSwgNjUsIDEyOCwgODEsIDY5LCA4NCwgNjUsIDc4LCA2NSwgMTI4LCAKKyAgICA4MSwgNjksIDY5LCAxMjgsIDgxLCA2OSwgMTI4LCA4MSwgNjUsIDg1LCAxMjgsIDgxLCA2NSwgODQsIDY1LCA3OCwgMTI4LCAKKyAgICA4MSwgNjUsIDgyLCA3OCwgNjksIDIxNywgODEsIDY1LCA4MiwgMTI4LCA4MSwgNjUsIDgxLCAxMjgsIDgxLCA2NSwgODAsIAorICAgIDcyLCAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgODMsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCAyMTEsIDgxLCA2NSwgCisgICAgNzYsIDE5MywgODEsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgxLCA2NSwgNzMsIDEyOCwgODEsIDY1LCAKKyAgICA3MCwgMTI4LCA4MSwgNjUsIDE5OCwgODEsIDY1LCA2OCwgNzcsIDY1LCAxMjgsIDgxLCA2NSwgNjUsIDczLCAxMjgsIDgxLCAKKyAgICA2NSwgNjUsIDcwLCA4NSwgMTI4LCA4MSwgNjUsIDY1LCA3MCwgMTI4LCA4MSwgNDgsIDQ4LCA1NSwgMTI4LCA4MSwgNDgsIAorICAgIDQ4LCA1NCwgMTI4LCA4MSwgNDgsIDQ4LCA1MywgMTI4LCA4MSwgNDgsIDQ4LCA1MiwgMTI4LCA4MSwgNDgsIDQ4LCA1MSwgCisgICAgMTI4LCA4MSwgNDgsIDQ4LCA1MCwgMTI4LCA4MSwgNDgsIDQ4LCA0OSwgMTI4LCA4MCwgOTAsIDEyOCwgODAsIDg5LCA4OCwgCisgICAgMTI4LCA4MCwgODksIDg0LCAxMjgsIDgwLCA4OSwgODIsIDg4LCAxMjgsIDgwLCA4OSwgODIsIDEyOCwgODAsIDg5LCA4MCwgCisgICAgMTI4LCA4MCwgODksIDEyOCwgODAsIDg3LCA3OSwgODksIDEyOCwgODAsIDg3LCA3OSwgNzksIDEyOCwgODAsIDg3LCA3OSwgCisgICAgMTI4LCA4MCwgODcsIDIwNywgODAsIDg3LCA3MywgNzMsIDEyOCwgODAsIDg3LCA3MywgMTI4LCA4MCwgODcsIDY5LCA2OSwgCisgICAgMTI4LCA4MCwgODcsIDY5LCAxMjgsIDgwLCA4NywgNjUsIDY1LCAxMjgsIDgwLCA4NywgMTI4LCA4MCwgODYsIDEyOCwgODAsIAorICAgIDg1LCA4OCwgMTI4LCA4MCwgODUsIDg1LCA4NCwgMTI4LCA4MCwgODUsIDg1LCAxMjgsIDgwLCA4NSwgODQsIDgyLCA2OSwgCisgICAgNzAsIDY1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA4NCwgMTI4LCA4MCwgODUsIDIxMiwgODAsIDg1LCAKKyAgICA4MywgNzIsIDgwLCA3MywgNzgsIDEyOCwgODAsIDg1LCA4MywgNzIsIDgwLCA3MywgNzUsIDY1LCAxMjgsIDgwLCA4NSwgODMsIAorICAgIDcyLCA3MywgNzgsIDE5OSwgODAsIDg1LCA4MiwgODgsIDEyOCwgODAsIDg1LCA4MiwgODMsIDY5LCAxMjgsIDgwLCA4NSwgCisgICAgODIsIDgwLCA3NiwgMTk3LCA4MCwgODUsIDgyLCA3OCwgNjUsIDc3LCA2NSwgMTI4LCA4MCwgODUsIDgyLCA3MywgODQsIDg5LCAKKyAgICAxMjgsIDgwLCA4NSwgODIsIDczLCA3MCwgODksIDEyOCwgODAsIDg1LCA4MiwgMTI4LCA4MCwgODUsIDgxLCAxMjgsIDgwLCAKKyAgICA4NSwgODAsIDEyOCwgODAsIDg1LCA3OSwgODgsIDEyOCwgODAsIDg1LCA3OSwgODAsIDEyOCwgODAsIDg1LCA3OSwgMTI4LCAKKyAgICA4MCwgODUsIDc4LCA3MSwgNjUsIDY1LCA3NywgMTI4LCA4MCwgODUsIDc4LCA3MSwgMTI4LCA4MCwgODUsIDc4LCA2NywgODQsIAorICAgIDg1LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA3OCwgNjcsIDg0LCA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgCisgICAgODAsIDg1LCA3NywgODAsIDEyOCwgODAsIDg1LCA3NywgMTI4LCA4MCwgODUsIDY5LCAxMjgsIDgwLCA4NSwgNjYsIDc2LCAKKyAgICA3MywgMTk1LCA4MCwgODUsIDY1LCA4MSwgMTI4LCA4MCwgODUsIDY1LCA2OSwgMTI4LCA4MCwgODUsIDUwLCAxMjgsIDgwLCAKKyAgICA4NSwgNDksIDEyOCwgODAsIDg1LCAxMjgsIDgwLCA4NCwgNzIsIDY1LCA3MiwgMTkzLCA4MCwgODQsIDY5LCAxMjgsIDgwLCAKKyAgICA4MywgNzMsIDc2LCAyMDEsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgCisgICAgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIAorICAgIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCAyMDYsIDgwLCA4MywgNzMsIDcwLCA3MywgCisgICAgODMsIDg0LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgMTI4LCA4MCwgODMsIAorICAgIDEyOCwgODAsIDgyLCA3OSwgODYsIDY5LCAxMjgsIDgwLCA4MiwgNzksIDg0LCA3OSwgODYsIDY1LCA4MiwgODksIDIxMSwgCisgICAgODAsIDgyLCA3OSwgODQsIDc5LCAyMTEsIDgwLCA4MiwgNzksIDg0LCA2OSwgNjcsIDg0LCA2OSwgMTk2LCA4MCwgODIsIDc5LCAKKyAgICA4MywgNzEsIDY5LCA3MSwgODIsIDY1LCA3NywgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODAsIDgyLCA3OSwgODAsIDc5LCA4MiwgCisgICAgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA4MiwgNzksIDgwLCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCAKKyAgICA4MiwgNzksIDgwLCA2OSwgODIsIDg0LCAyMTcsIDgwLCA4MiwgNzksIDgwLCA2OSwgNzYsIDc2LCA2OSwgMjEwLCA4MCwgODIsIAorICAgIDc5LCA3OSwgNzAsIDEyOCwgODAsIDgyLCA3OSwgNzYsIDc5LCA3OCwgNzEsIDY5LCAxOTYsIDgwLCA4MiwgNzksIDc2LCA2NSwgCisgICAgODQsIDczLCA3OSwgNzgsIDE5NywgODAsIDgyLCA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDgyLCAKKyAgICA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDgyLCA3OSwgNzEsIDgyLCA2OSwgODMsIDgzLCAxMjgsIAorICAgIDgwLCA4MiwgNzksIDcxLCA4MiwgNjUsIDIwNSwgODAsIDgyLCA3OSwgNzAsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgwLCA4MiwgCisgICAgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDIxMiwgODAsIDgyLCA3MywgODYsIDY1LCAKKyAgICA4NCwgNjksIDEyOCwgODAsIDgyLCA3MywgODYsIDY1LCA4NCwgMTk3LCA4MCwgODIsIDczLCA4NiwgNjUsIDY3LCAyMTcsIAorICAgIDgwLCA4MiwgNzMsIDgzLCA3MiwgODQsIDcyLCA2NSwgNzcsIDY1LCA4NCwgODIsIDE5MywgODAsIDgyLCA3MywgNzgsIDg0LCAKKyAgICA4MywgMTI4LCA4MCwgODIsIDczLCA3OCwgODQsIDEyOCwgODAsIDgyLCA3MywgNzgsIDIxMiwgODAsIDgyLCA3MywgNzgsIAorICAgIDY3LCA2OSwgODMsIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc3LCA2OSwgMTI4LCA4MCwgODIsIDczLCA3NywgMTk3LCA4MCwgCisgICAgODIsIDY5LCA4NiwgNzMsIDc5LCA4NSwgMjExLCA4MCwgODIsIDY5LCA4MywgNjksIDg0LCAxMjgsIDgwLCA4MiwgNjksIDgzLCAKKyAgICA2OSwgNzgsIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgCisgICAgNzksIDIwNiwgODAsIDgyLCA2OSwgODAsIDc5LCA3OCwgNjgsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgODAsIDgyLCAKKyAgICA2OSwgNzgsIDc1LCA3MiwgNjUsIDEyOCwgODAsIDgyLCA2OSwgNzAsIDY1LCA2NywgMTk3LCA4MCwgODIsIDY5LCA2NywgNzMsIAorICAgIDgwLCA3MywgODQsIDY1LCA4NCwgNjksIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA4MiwgCisgICAgNjksIDY3LCA2OSwgNjgsIDY5LCA4MywgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMjExLCA4MCwgODIsIDY5LCAKKyAgICA2NywgNjksIDY4LCA2OSwgMTk2LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIAorICAgIDY4LCAxOTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgCisgICAgMjAxLCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgNzksIDg5LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCAKKyAgICA3OSwgMjE3LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA4NSwgNzksIDc4LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIAorICAgIDg1LCA3OSwgMjA2LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgNzMsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgCisgICAgNjksIDIwMSwgODAsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDgyLCA2NSwgMjA1LCA4MCwgODIsIDEyOCwgODAsIDgwLCA4NiwgCisgICAgMTI4LCA4MCwgODAsIDc3LCAxMjgsIDgwLCA4MCwgNjUsIDEyOCwgODAsIDc5LCA4OSwgMTI4LCA4MCwgNzksIDg4LCAxMjgsIAorICAgIDgwLCA3OSwgODcsIDY5LCA4MiwgMjExLCA4MCwgNzksIDg3LCA2OSwgODIsIDEyOCwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgCisgICAgNjksIDE5NiwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg1LCA3OCwgMTk2LCA4MCwgNzksIDg1LCAKKyAgICA3NiwgODQsIDgyLCAyMTcsIDgwLCA3OSwgODUsIDY3LCA3MiwgMTI4LCA4MCwgNzksIDg0LCA2NSwgODQsIDc5LCAxMjgsIAorICAgIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIDE5NywgODAsIDc5LCAyMTIsIDgwLCA3OSwgODMsIDg0LCA4MCwgNzksIDgzLCA3MywgCisgICAgODQsIDczLCA3OSwgMjA2LCA4MCwgNzksIDgzLCA4NCwgNjYsIDc5LCA4OCwgMTI4LCA4MCwgNzksIDgzLCA4NCwgNjUsIAorICAgIDIwNCwgODAsIDc5LCA4MywgODQsIDEyOCwgODAsIDc5LCA4MywgMjEyLCA4MCwgNzksIDgzLCA4MywgNjksIDgzLCA4MywgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgODIsIDgyLCAKKyAgICA2OSwgNjcsIDg0LCA4NSwgMjExLCA4MCwgNzksIDgwLCA4MCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgODAsIDEyOCwgODAsIAorICAgIDc5LCAyMDgsIDgwLCA3OSwgNzksIDY4LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3OSwgMTI4LCA4MCwgNzksIDc4LCA2OCwgCisgICAgNzksIDEyOCwgODAsIDc5LCAyMDYsIDgwLCA3OSwgNzcsIDc3LCA2OSwgNjksIDEyOCwgODAsIDc5LCA3NywgNzcsIDY5LCAKKyAgICAxOTcsIDgwLCA3OSwgNzYsIDczLCA4MywgNzIsIDEyOCwgODAsIDc5LCA3NiwgNzMsIDY3LCAxOTcsIDgwLCA3OSwgNzYsIAorICAgIDIwMSwgODAsIDc5LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3NiwgMTk3LCA4MCwgNzksIDc1LCA4MiwgODksIDg0LCA3MywgCisgICAgNjksIDEyOCwgODAsIDc5LCA3NSwgNzksIDc0LCA3MywgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDIxMSwgODAsIDc5LCAKKyAgICA3MywgNzgsIDg0LCA3OSwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIAorICAgIDY5LCAxOTYsIDgwLCA3OSwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgNzksIDczLCA3OCwgMjEyLCA4MCwgNzksIDY5LCA4NCwgCisgICAgODIsIDIxNywgODAsIDc5LCA2OSwgODQsIDczLCAxOTUsIDgwLCA3OSwgNjgsIDY1LCA4NCwgODUsIDgzLCAxMjgsIDgwLCAKKyAgICA3OSwgNjUsIDEyOCwgODAsIDc5LCAxMjgsIDgwLCAyMDcsIDgwLCA3OCwgNjksIDg1LCA3NywgNjUsIDg0LCA2NSwgMTI4LCAKKyAgICA4MCwgNzYsIDg1LCA4NCwgNzksIDEyOCwgODAsIDc2LCA4NSwgODMsIDQ1LCA3NywgNzMsIDc4LCA4NSwgMjExLCA4MCwgNzYsIAorICAgIDg1LCA4MywgMTI4LCA4MCwgNzYsIDg1LCA4MiwgNjUsIDc2LCAxMjgsIDgwLCA3NiwgODUsIDc3LCA2OSwgMTk2LCA4MCwgCisgICAgNzYsIDg1LCA3NywgMTI4LCA4MCwgNzYsIDg1LCA3NSwgMTI4LCA4MCwgNzYsIDg1LCA3MSwgMTI4LCA4MCwgNzYsIDg1LCAKKyAgICAxMjgsIDgwLCA3NiwgNzksIDg3LCAxMjgsIDgwLCA3NiwgNzksIDgwLCA3MiwgODUsIDEyOCwgODAsIDc2LCA2OSwgODQsIAorICAgIDcyLCA4MiwgNzksIDc4LCAxMjgsIDgwLCA3NiwgNjgsIDEyOCwgODAsIDc2LCA2NSwgODksIDczLCA3OCwgMTk5LCA4MCwgCisgICAgNzYsIDY1LCA4MywgODQsIDczLCA2NywgODMsIDEyOCwgODAsIDc2LCA2NSwgNzgsIDY5LCAxMjgsIDgwLCA3NiwgNjUsIDc4LCAKKyAgICAxOTcsIDgwLCA3NiwgNjUsIDc4LCA2NywgMjAzLCA4MCwgNzYsIDY1LCA3NSwgMTI4LCA4MCwgNzYsIDY1LCA3MSwgNzMsIAorICAgIDc5LCAyMTEsIDgwLCA3NiwgNjUsIDY3LCA2OSwgNzIsIDc5LCA3NiwgNjgsIDY5LCAyMTAsIDgwLCA3NiwgNjUsIDY3LCAKKyAgICAxOTcsIDgwLCA3NiwgNjUsIDEyOCwgODAsIDczLCA5MCwgOTAsIDczLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MCwgNzMsIAorICAgIDkwLCA5MCwgNjUsIDEyOCwgODAsIDczLCA4OCwgMTI4LCA4MCwgNzMsIDg3LCA4MiwgMTI4LCA4MCwgNzMsIDg0LCA2NywgCisgICAgNzIsIDcwLCA3OSwgODIsIDc1LCAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgMjAzLCA4MCwgNzMsIDg0LCAKKyAgICAxMjgsIDgwLCA3MywgODMsIDg0LCA3OSwgNzYsIDEyOCwgODAsIDczLCA4MywgNjksIDc2LCA2OSwgNzIsIDEyOCwgODAsIAorICAgIDczLCA4MywgNjcsIDY5LCA4MywgMTI4LCA4MCwgNzMsIDgyLCA3MywgNzEsIDEyOCwgODAsIDczLCA4MiwgNzMsIDE5OSwgCisgICAgODAsIDczLCA4MiwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgODAsIDczLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNzMsIDgwLCAKKyAgICA2NSwgNjksIDc3LCA3MSwgNjYsIDczLCA2OSwgNjksIDEyOCwgODAsIDczLCA4MCwgNjUsIDY5LCA3NywgNjYsIDY1LCAxMjgsIAorICAgIDgwLCA3MywgODAsIDEyOCwgODAsIDczLCA3OCwgODcsIDcyLCA2OSwgNjksIDIwNCwgODAsIDczLCA3OCwgNjksIDY1LCA4MCwgCisgICAgODAsIDc2LCA2OSwgMTI4LCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MywgNzgsIDY1LCA4MiwgNjYsIDc5LCA4MiwgNjUsIDgzLCAKKyAgICAxMjgsIDgwLCA3MywgNzYsIDc2LCAxMjgsIDgwLCA3MywgNzYsIDE5NywgODAsIDczLCA3NiwgNjcsIDgyLCA3OSwgMjE1LCAKKyAgICA4MCwgNzMsIDc1LCA4NSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNzUsIDc5LCAxMjgsIDgwLCA3MywgNzEsIDEyOCwgODAsIAorICAgIDczLCAxOTksIDgwLCA3MywgNjksIDg4LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgCisgICAgODQsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgCisgICAgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIAorICAgIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIAorICAgIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgCisgICAgODAsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzcsIDczLCA2OSwgODUsIAorICAgIDc3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgwLCA3MywgCisgICAgNjksIDg1LCA4MCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzIsIAorICAgIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgMjA4LCA4MCwgNzMsIDY5LCA4NCwgMTI4LCA4MCwgCisgICAgNzMsIDY5LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODQsIDEyOCwgODAsIDczLCA2OSwgNjksIDgxLCAxMjgsIDgwLCAKKyAgICA3MywgNjksIDY3LCA2OSwgMTI4LCA4MCwgNzMsIDY5LCAxMjgsIDgwLCA3MywgNjcsIDc1LCA2OSwgODQsIDEyOCwgODAsIAorICAgIDczLCA2NywgNzUsIDEyOCwgODAsIDczLCA2NSwgODMsIDg1LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgCisgICAgNzcsIDE5MywgODAsIDczLCA2NSwgNzgsIDc5LCAxMjgsIDgwLCAyMDEsIDgwLCA3MiwgODcsIDY1LCAxMjgsIDgwLCA3MiwgCisgICAgODUsIDg0LCA3MiwgNjUsIDc5LCAxMjgsIDgwLCA3MiwgODUsIDIxMCwgODAsIDcyLCA4NSwgNzgsIDcxLCAxMjgsIDgwLCAKKyAgICA3MiwgODIsIDY1LCA4MywgNjksIDEyOCwgODAsIDcyLCA3OSwgNzgsIDY5LCA4MywgMTI4LCA4MCwgNzIsIDc5LCA2OSwgNzgsIAorICAgIDczLCA2NywgNzMsIDY1LCAyMDYsIDgwLCA3MiwgNzksIDY1LCAxMjgsIDgwLCA3MiwgNzksIDEyOCwgODAsIDcyLCAyMDcsIAorICAgIDgwLCA3MiwgNzgsIDY1LCA2OSwgMjAzLCA4MCwgNzIsIDczLCA3OCwgODQsIDcyLCA4NSwgMTI4LCA4MCwgNzIsIDczLCA3NiwgCisgICAgNzksIDgzLCA3OSwgODAsIDcyLCA2OSwgODIsIDIxMSwgODAsIDcyLCA3MywgNzYsIDczLCA4MCwgODAsIDczLCA3OCwgMTk3LCAKKyAgICA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MiwgCisgICAgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAorICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgMjAwLCA4MCwgNzIsIDczLCAxMjgsIDgwLCA3MiwgMjAxLCAKKyAgICA4MCwgNzIsIDY5LCA2OSwgMTI4LCA4MCwgNzIsIDY5LCAxMjgsIDgwLCA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5OCwgODAsIAorICAgIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk0LCA4MCwgNzIsIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDgwLCA3MiwgCisgICAgNjUsIDgyLCAxMjgsIDgwLCA3MiwgNjUsIDc4LCAxMjgsIDgwLCA3MiwgNjUsIDc3LCAxMjgsIDgwLCA3MiwgNjUsIDczLCAKKyAgICA4MywgODQsIDc5LCAyMTEsIDgwLCA3MiwgNjUsIDcxLCA4MywgNDUsIDgwLCAxOTMsIDgwLCA3MiwgNjUsIDY1LCA4MiwgNzUsIAorICAgIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCAxMjgsIDgwLCA3MSwgMTI4LCA4MCwgNzAsIAorICAgIDEyOCwgODAsIDY5LCA4NSwgODgsIDEyOCwgODAsIDY5LCA4NSwgODQsIDY1LCA2OSwgMTI4LCA4MCwgNjksIDg1LCA4NCwgCisgICAgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDg0LCA3OSwgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCAKKyAgICA2OSwgODQsIDY1LCA4MywgODQsIDczLCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIAorICAgIDY1LCA3NiwgNzYsIDY5LCAxOTYsIDgwLCA2OSwgODMsIDc5LCAxMjgsIDgwLCA2OSwgODMsIDIwNywgODAsIDY5LCA4MywgCisgICAgNzIsIDUwLCAxMjgsIDgwLCA2OSwgODMsIDY5LCA4NCwgMTkzLCA4MCwgNjksIDIxMSwgODAsIDY5LCA4MiwgODQsIDcyLCAKKyAgICAyMDcsIDgwLCA2OSwgODIsIDgzLCA4MCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIAorICAgIDc4LCA2NSwgMjA0LCA4MCwgNjksIDgyLCA4MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgMjA2LCA4MCwgCisgICAgNjksIDgyLCA4MywgNzMsIDY1LCAyMDYsIDgwLCA2OSwgODIsIDgzLCA2OSwgODYsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDgwLCAKKyAgICA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDgyLCAxMjgsIDgwLCA2OSwgODIsIDgwLCA2OSwgCisgICAgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODAsIDY5LCA4MiwgNzcsIDczLCA4NCwgODQsIDY5LCAxOTYsIDgwLCAKKyAgICA2OSwgODIsIDc3LCA2NSwgNzgsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgNzcsIDY5LCA3OCwgCisgICAgNzMsIDEyOCwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIDIwMSwgODAsIDY5LCA4MiwgNzAsIDc5LCAKKyAgICA4MiwgNzcsIDczLCA3OCwgMTk5LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgODAsIDY5LCA4MiwgNzAsIAorICAgIDY5LCA2NywgODQsIDY1LCAxMjgsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCAxOTMsIDgwLCA2OSwgODIsIDY3LCA4NSwgCisgICAgODMsIDgzLCA3MywgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIDY3LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MCwgNjksIDg0LCAKKyAgICAxMjgsIDgwLCA2OSwgODAsIDY5LCAyMTIsIDgwLCA2OSwgNzksIDgyLCA4NCwgMjAwLCA4MCwgNjksIDc5LCA4MCwgNzYsIAorICAgIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgODMsIDY5LCA3NywgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgCisgICAgODIsIDY1LCA3NywgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgODMsIDg1LCAKKyAgICAxMjgsIDgwLCA2OSwgNzgsIDgzLCA3MywgODYsIDE5NywgODAsIDY5LCA3OCwgNzgsIDIxNywgODAsIDY5LCA3OCwgNzMsIAorICAgIDcyLCA3MywgMTI4LCA4MCwgNjksIDc4LCA3MSwgODUsIDczLCA3OCwgMTI4LCA4MCwgNjksIDc4LCA3MSwgNzUsIDY1LCA3NiwgCisgICAgMTI4LCA4MCwgNjksIDc4LCA2OSwgODQsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgNjcsIDczLCAKKyAgICA3NiwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIAorICAgIDIwNiwgODAsIDY5LCA3MywgODQsIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgCisgICAgMjAwLCA4MCwgNjksIDcyLCAxMjgsIDgwLCA2OSwgMjAwLCA4MCwgNjksIDY5LCA5MCwgNzMsIDEyOCwgODAsIDY5LCA2OSwgCisgICAgODMsIDcyLCA3MywgMTI4LCA4MCwgNjksIDY5LCA4MCwgMTI4LCA4MCwgNjksIDY5LCA3NywgMTI4LCA4MCwgNjksIDY5LCAKKyAgICAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDgyLCA3MywgNjUsIDc4LCA4MywgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIAorICAgIDg0LCA4MiwgNzMsIDY1LCA3OCwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA2NSwgNzYsIDEyOCwgODAsIDY5LCA2OCwgCisgICAgNjksIDgzLCA4NCwgNjUsIDIwNCwgODAsIDY5LCA2OCwgNjUsIDIwNCwgODAsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgwLCAKKyAgICA2OSwgNjUsIDY3LCA2OSwgMTI4LCA4MCwgNjksIDY1LCA2NywgMTk3LCA4MCwgNjgsIDczLCAxMjgsIDgwLCA2OCwgNzAsIAorICAgIDEyOCwgODAsIDY4LCAxMjgsIDgwLCA2NywgMTI4LCA4MCwgNjUsIDkwLCA2OSwgODIsIDEyOCwgODAsIDY1LCA4OSwgNjksIAorICAgIDgyLCA3OSwgNzUsIDEyOCwgODAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODAsIDY1LCA4OSwgMTI4LCA4MCwgCisgICAgNjUsIDg4LCAxMjgsIDgwLCA2NSwgODcsIDc4LCAxMjgsIDgwLCA2NSwgMjE1LCA4MCwgNjUsIDg2LCA3MywgODksIDY1LCAKKyAgICA3OCwgNzMsIDEyOCwgODAsIDY1LCA4NSwgMTI4LCA4MCwgNjUsIDg0LCA4NCwgNjksIDgyLCA3OCwgMTI4LCA4MCwgNjUsIAorICAgIDg0LCA3MiwgNjUsIDc3LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDg0LCAyMDAsIDgwLCA2NSwgODQsIDY1LCA3NSwgCisgICAgMTI4LCA4MCwgNjUsIDg0LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDgzLCA4NSwgODEsIDEyOCwgCisgICAgODAsIDY1LCA4MywgODMsIDgwLCA3OSwgODIsIDIxMiwgODAsIDY1LCA4MywgODMsIDczLCA4NiwgNjksIDQ1LCA4MCwgODUsIAorICAgIDc2LCA3NiwgNDUsIDg1LCA4MCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgNjUsIDgzLCA4MywgNzMsIDg2LCAKKyAgICA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgCisgICAgODAsIDY1LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgODMsIDY5LCAKKyAgICA4MSwgMTI4LCA4MCwgNjUsIDgzLCA2NSwgNzgsIDcxLCA2NSwgMjA2LCA4MCwgNjUsIDgyLCA4NSwgNzcsIDEyOCwgODAsIAorICAgIDY1LCA4MiwgODQsIDIxNywgODAsIDY1LCA4MiwgODQsIDc4LCA2OSwgODIsIDgzLCA3MiwgNzMsIDIwOCwgODAsIDY1LCA4MiwgCisgICAgODQsIDczLCA2NSwgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgwLCA2NSwgODIsIAorICAgIDg0LCA3MywgNjUsIDIwNCwgODAsIDY1LCA4MiwgODQsIDcyLCA3MywgNjUsIDIwNiwgODAsIDY1LCA4MiwgMjEyLCA4MCwgCisgICAgNjUsIDgyLCA3MywgNjcsIDcyLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDgzLCA4NCwgNzMsIDcxLCA3NywgNjksIAorICAgIDc4LCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgCisgICAgNjksIDgzLCA3MywgODMsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDIxMSwgODAsIDY1LCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgODIsIDY1LCA4MywgMTk3LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDc5LCA3MSwgCisgICAgODIsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCAKKyAgICA3NiwgNjksIDIwNCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIDczLCAxMjgsIDgwLCA2NSwgODIsIAorICAgIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAyMDEsIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCAKKyAgICAxOTMsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDc5LCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA4MCwgNjUsIDgyLCA2NSwgCisgICAgMTI4LCA4MCwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgODAsIDg5LCA4MiwgODUsIDgzLCAxMjgsIDgwLCA2NSwgODAsIDY5LCAKKyAgICA4MiwgNjcsIDc2LCA3MywgODAsIDEyOCwgODAsIDY1LCA4MCwgNjksIDIxMCwgODAsIDY1LCA4MCwgMTI4LCA4MCwgNjUsIAorICAgIDIwOCwgODAsIDY1LCAyMDcsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA3MywgCisgICAgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2OSwgNjcsIDY5LCA3NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc4LCAKKyAgICA3MSwgNzEsIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4NCwgNzMsIAorICAgIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDY1LCA3OCwgCisgICAgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzgsIDcxLCA3OSwgNzgsIDY1LCA3OCwgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzYsIDc5LCAKKyAgICA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDg3LCA3MywgODMsIDY1LCA2OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODIsIAorICAgIDY1LCA3OCwgNzEsIDc1LCA2OSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc5LCA3NiwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgCisgICAgNzgsIDcxLCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzYsIDY1LCA4OSwgNjUsIDgyLCAxMjgsIDgwLCAKKyAgICA2NSwgNzgsIDcxLCA3NSwgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgNzgsIAorICAgIDcxLCA3MiwgODUsIDc2LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OSwgODUsIDc2LCA2OSwgCisgICAgODUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OCwgMTkzLCA4MCwgNjUsIDc4LCA2NSwgNjksIDc2LCA2NSwgNjksIDc4LCAKKyAgICA3MSwgMTI4LCA4MCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA3OCwgNzEsIDc1LCA2NSwgNzIsIDEyOCwgODAsIAorICAgIDY1LCA3NywgODUsIDY4LCA4MCwgNzksIDY4LCAxMjgsIDgwLCA2NSwgNzcsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgCisgICAgNzcsIDgwLCA3MiwgODksIDc2LCA3MywgNjUsIDIwNiwgODAsIDY1LCA3NywgNzMsIDc4LCA3MSwgNzUsIDY1LCA3NiwgMTI4LCAKKyAgICA4MCwgNjUsIDc3LCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgNzgsIDY5LCA3OCwgNzEsIDEyOCwgODAsIAorICAgIDY1LCA3NywgNjUsIDY4LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjUsIDY5LCA3MiwgMTI4LCA4MCwgNjUsIDc2LCA4NSwgCisgICAgODQsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc5LCA2NywgNzIsIDc1LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCAyMDUsIDgwLCAKKyAgICA2NSwgNzYsIDc2LCA2NSwgODcsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODMsIDEyOCwgODAsIDY1LCA3NiwgNjksIAorICAgIDg0LCA4NCwgNjksIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg1LCA3OCwgMTk5LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgCisgICAgNzMsIDkwLCA2OSwgMTk2LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgMjA0LCA4MCwgNjUsIDc1LCA4MCwgNjUsIDIwMywgODAsIDY1LCA3MywgCisgICAgODksIDY1LCA3OCwgNzgsIDc5LCA3MywgMTI4LCA4MCwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIDEyOCwgODAsIDY1LCAKKyAgICA3MywgODIsIDY5LCAxOTYsIDgwLCA2NSwgNzMsIDEyOCwgODAsIDY1LCA3MiwgNzYsIDY1LCA4NiwgMjAxLCA4MCwgNjUsIAorICAgIDcyLCAxMjgsIDgwLCA2NSwgNzEsIDY5LCA4MiwgMTI4LCA4MCwgNjUsIDcxLCAxOTcsIDgwLCA2NSwgNjgsIDc3LCAxOTMsIAorICAgIDgwLCA2NSwgNjgsIDY4LCA3MywgNzgsIDE5OSwgODAsIDY1LCA2OCwgMTkzLCA4MCwgNjUsIDY4LCAxMjgsIDgwLCA2NSwgCisgICAgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA2NSwgNzEsIDY5LCAxMjgsIDgwLCA2NSwgNjUsIDg0LCAKKyAgICA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODAsIDY1LCA2NSwgODIsIDY1LCA2OSwgCisgICAgMTI4LCA4MCwgNjUsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDY1LCA3MywgMTI4LCA4MCwgNjUsIDY1LCA0NSwgODAsIDczLCAKKyAgICA3NiwgNzYsIDY1LCAxMjgsIDgwLCA2NSwgNjUsIDEyOCwgODAsIDUwLCAxMjgsIDgwLCA0OCwgNDksIDQ5LCAxMjgsIDgwLCAKKyAgICA0OCwgNDksIDQ4LCAxMjgsIDgwLCA0OCwgNDgsIDU3LCAxMjgsIDgwLCA0OCwgNDgsIDU2LCAxMjgsIDgwLCA0OCwgNDgsIAorICAgIDU1LCAxMjgsIDgwLCA0OCwgNDgsIDU0LCAxMjgsIDgwLCA0OCwgNDgsIDUzLCAxMjgsIDgwLCA0OCwgNDgsIDUyLCAxMjgsIAorICAgIDgwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgMTI4LCA4MCwgNDgsIDQ4LCA1MCwgMTI4LCA4MCwgCisgICAgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDEyOCwgNzksIDg5LCA4MiwgNjUsIDc4LCA3MywgODMsIDc3LCAKKyAgICAxOTMsIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDg4LCA3MywgNjUsIDEyOCwgNzksIDg4LCA3MywgMTkzLCAKKyAgICA3OSwgODgsIDY5LCA3MywgNjUsIDIwMSwgNzksIDg4LCA2OSwgNzMsIDE5MywgNzksIDg2LCA2OSwgODIsIDgyLCA3MywgNjgsIAorICAgIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNzksIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgCisgICAgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4MCwgODAsIDczLCAKKyAgICA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA3MywgNjgsIDEyOCwgNzksIDg2LCA2OSwgODIsIDY2LCA2NSwgODIsIAorICAgIDEyOCwgNzksIDg2LCA2NSwgMjA0LCA3OSwgODYsIDEyOCwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDE5NiwgNzksIAorICAgIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg1LCA4NCwgNjksIDIxMCwgNzksIDg1LCA4NCwgNjYsIDc5LCAKKyAgICAyMTYsIDc5LCA4NSwgNzgsIDc1LCA3MywgMTkzLCA3OSwgODUsIDc4LCA2NywgNjksIDEyOCwgNzksIDg1LCA3OCwgNjcsIAorICAgIDE5NywgNzksIDg0LCA4NSwgMTI4LCA3OSwgODQsIDg0LCA2NSwgODYsIDE5MywgNzksIDg0LCA4NCwgMTI4LCA3OSwgODQsIAorICAgIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDc5LCA4NCwgNzIsIDY1LCA3NiwgMTI4LCA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAKKyAgICAxOTMsIDc5LCA4MywgNjcsIDEyOCwgNzksIDgyLCA4NCwgNzIsIDc5LCA3MSwgNzksIDc4LCA2NSwgMjA0LCA3OSwgODIsIAorICAgIDg0LCA3MiwgNzksIDY4LCA3OSwgMjE2LCA3OSwgODIsIDc4LCA2NSwgODQsIDE5NywgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgCisgICAgNzgsIDg0LCAxMjgsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCAyMTIsIDc5LCA4MiwgNzUsIDcyLCA3OSwgMjA2LCAKKyAgICA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCAxMjgsIDc5LCA4MiwgNjksIAorICAgIDQ1LCA1MCwgMTI4LCA3OSwgODIsIDY4LCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgNjgsIDY5LCAyMTAsIDc5LCA4MiwgCisgICAgNjcsIDcyLCA3MywgNjgsIDEyOCwgNzksIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDc5LCA4MCwgODQsIDczLCA3OSwgMjA2LCAKKyAgICA3OSwgODAsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc5LCA4MCwgODAsIDgyLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIAorICAgIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDc4LCAKKyAgICAxOTksIDc5LCA4MCwgODAsIDc5LCA4MywgNjksIDEyOCwgNzksIDgwLCA3MiwgNzMsIDg1LCA2NywgNzIsIDg1LCA4MywgCisgICAgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIAorICAgIDIxMCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzMsIDc4LCAxOTksIDc5LCA4MCwgNjksIDc4LCA3MywgNzgsIDE5OSwgCisgICAgNzksIDgwLCA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIAorICAgIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgCisgICAgNjcsIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNzksIDc5LCA5MCwgNjksIAorICAgIDEyOCwgNzksIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDc5LCA4NSwgMTI4LCA3OSwgNzksIDc3LCA4NSwgCisgICAgMTI4LCA3OSwgNzksIDY5LCAxMjgsIDc5LCA3OSwgNjYsIDc5LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDc4LCAKKyAgICA4NSwgMTI4LCA3OSwgNzgsIDgzLCA4NSwgMTI4LCA3OSwgNzgsIDc4LCAxMjgsIDc5LCA3OCwgNzUsIDY1LCA4MiwgMTI4LCAKKyAgICA3OSwgNzgsIDY5LCA4MywgNjksIDc2LCA3MCwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgODcsIDY1LCAyMTcsIDc5LCA3OCwgNjksIAorICAgIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDc5LCA3OCwgCisgICAgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDc5LCA3OCwgNjUsIDgwLCAxMjgsIDc5LCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCAKKyAgICAyMDYsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDIwNiwgNzksIAorICAgIDc3LCA2OSwgNzEsIDY1LCAxMjgsIDc5LCA3NywgNjksIDcxLCAxOTMsIDc5LCA3NywgNjUsIDc2LCA3OSwgNzgsIDEyOCwgCisgICAgNzksIDc2LCA3MywgODYsIDY5LCAxMjgsIDc5LCA3NiwgNzMsIDcxLCA3OSwgMjA2LCA3OSwgNzYsIDY4LCAxMjgsIDc5LCAKKyAgICA3NSwgODQsIDIwNywgNzksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDc5LCA3NSwgNjUsIDgyLCAxOTMsIDc5LCA3NCwgNzMsIAorICAgIDY2LCA4NywgNjUsIDIxNywgNzksIDc0LCA2OSwgNzksIDc4LCAxMjgsIDc5LCA3MywgNzYsIDEyOCwgNzksIDcyLCA3NywgCisgICAgMTI4LCA3OSwgNzIsIDIwNSwgNzksIDcxLCA4MiwgNjksIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCA3NSwgMTI4LCA3OSwgCisgICAgNzEsIDc5LCA3OCwgNjksIDIwMywgNzksIDcxLCA3MiwgNjUsIDIwNSwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgODIsIAorICAgIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDE5NywgNzksIDcwLCA3MCwgCisgICAgMTI4LCA3OSwgNjksIDg5LCAxMjgsIDc5LCA2OSwgNzUsIDEyOCwgNzksIDY4LCA2OSwgNzgsIDEyOCwgNzksIDY4LCAxOTYsIAorICAgIDc5LCA2NywgODQsIDc5LCA4MCwgODUsIDgzLCAxMjgsIDc5LCA2NywgODQsIDc5LCA2NiwgNjksIDgyLCAxMjgsIDc5LCA2NywgCisgICAgODQsIDY5LCAyMTIsIDc5LCA2NywgMjEwLCA3OSwgNjcsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIDc5LCA2NywgNjcsIDc2LCAKKyAgICA4NSwgODMsIDczLCA3OSwgNzgsIDEyOCwgNzksIDY2LCA4MywgODQsIDgyLCA4NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDc5LCA2NiwgNzksIDc2LCAyMTEsIDc5LCA2NiwgNzksIDIwNCwgNzksIDY2LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCisgICAgNzksIDY2LCA3NiwgNzMsIDgxLCA4NSwgMTk3LCA3OSwgNjYsIDc0LCA2OSwgNjcsIDIxMiwgNzksIDY2LCA2OSwgNzYsIDg1LCAKKyAgICA4MywgMTI4LCA3OSwgNjYsIDY5LCA3NiwgNzksIDgzLCAxMjgsIDc5LCA2NiwgMTI4LCA3OSwgNjUsIDg5LCAxMjgsIDc5LCAKKyAgICA2NSwgNzUsIDEyOCwgNzksIDY1LCA2NiwgNzksIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgMTkzLCA3OSwgNDgsIAorICAgIDUzLCA0OSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA1MywgNDgsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNTMsIDQ4LCAxMjgsIDc5LCA0OCwgNTIsIDU3LCAxMjgsIDc5LCA0OCwgNTIsIDU2LCAxMjgsIDc5LCA0OCwgNTIsIDU1LCAKKyAgICAxMjgsIDc5LCA0OCwgNTIsIDU0LCAxMjgsIDc5LCA0OCwgNTIsIDUzLCAxMjgsIDc5LCA0OCwgNTIsIDUyLCAxMjgsIDc5LCAKKyAgICA0OCwgNTIsIDUxLCAxMjgsIDc5LCA0OCwgNTIsIDUwLCAxMjgsIDc5LCA0OCwgNTIsIDQ5LCAxMjgsIDc5LCA0OCwgNTIsIAorICAgIDQ4LCAxMjgsIDc5LCA0OCwgNTEsIDU3LCAxMjgsIDc5LCA0OCwgNTEsIDU2LCAxMjgsIDc5LCA0OCwgNTEsIDU1LCAxMjgsIAorICAgIDc5LCA0OCwgNTEsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjcsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY2LCAKKyAgICAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgMTI4LCA3OSwgNDgsIDUxLCA1MywgMTI4LCAKKyAgICA3OSwgNDgsIDUxLCA1MiwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNTEsIDEyOCwgNzksIAorICAgIDQ4LCA1MSwgNTAsIDEyOCwgNzksIDQ4LCA1MSwgNDksIDEyOCwgNzksIDQ4LCA1MSwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNTEsIDQ4LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1NywgMTI4LCA3OSwgNDgsIDUwLCAKKyAgICA1NiwgMTI4LCA3OSwgNDgsIDUwLCA1NSwgMTI4LCA3OSwgNDgsIDUwLCA1NCwgMTI4LCA3OSwgNDgsIDUwLCA1MywgNjUsIAorICAgIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDUyLCAxMjgsIAorICAgIDc5LCA0OCwgNTAsIDUxLCAxMjgsIDc5LCA0OCwgNTAsIDUwLCAxMjgsIDc5LCA0OCwgNTAsIDQ5LCAxMjgsIDc5LCA0OCwgCisgICAgNTAsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgMTI4LCA3OSwgNDgsIDQ5LCA1NywgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA0OSwgNTcsIDEyOCwgNzksIDQ4LCA0OSwgNTYsIDEyOCwgNzksIDQ4LCA0OSwgNTUsIDEyOCwgNzksIDQ4LCA0OSwgNTQsIAorICAgIDEyOCwgNzksIDQ4LCA0OSwgNTMsIDEyOCwgNzksIDQ4LCA0OSwgNTIsIDEyOCwgNzksIDQ4LCA0OSwgNTEsIDEyOCwgNzksIAorICAgIDQ4LCA0OSwgNTAsIDEyOCwgNzksIDQ4LCA0OSwgNDksIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY3LCAxMjgsIDc5LCA0OCwgCisgICAgNDksIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDEyOCwgNzksIDQ4LCAKKyAgICA0OCwgNTcsIDEyOCwgNzksIDQ4LCA0OCwgNTYsIDEyOCwgNzksIDQ4LCA0OCwgNTUsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIAorICAgIDcwLCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjgsIDEyOCwgNzksIDQ4LCA0OCwgCisgICAgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA0OCwgNTQsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCAxMjgsIDc5LCA0OCwgNDgsIAorICAgIDUyLCAxMjgsIDc5LCA0OCwgNDgsIDUxLCAxMjgsIDc5LCA0OCwgNDgsIDUwLCAxMjgsIDc5LCA0OCwgNDgsIDQ5LCA2NSwgCisgICAgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgNDUsIDg5LCA2OSwgMTI4LCA3OSwgNDUsIDc5LCA0NSwgNzMsIDEyOCwgCisgICAgNzksIDQ1LCA2OSwgMTI4LCA3OCwgOTAsIDg5LCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4NCwgMTI4LCA3OCwgOTAsIDg5LCAKKyAgICA4MiwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDEyOCwgNzgsIDkwLCA4OSwgODAsIDEyOCwgNzgsIDkwLCA4OSwgMTI4LCAKKyAgICA3OCwgOTAsIDg1LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDkwLCA4NSwgODIsIDEyOCwgNzgsIAorICAgIDkwLCA4NSwgODEsIDEyOCwgNzgsIDkwLCA4NSwgODAsIDEyOCwgNzgsIDkwLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA5MCwgCisgICAgODUsIDc5LCAxMjgsIDc4LCA5MCwgODUsIDIwNiwgNzgsIDkwLCA4NSwgMTI4LCA3OCwgOTAsIDc5LCA4OCwgMTI4LCA3OCwgCisgICAgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4OCwgMTI4LCA3OCwgOTAsIDczLCA4NCwgMTI4LCA3OCwgOTAsIDczLCAKKyAgICA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA3MywgNjksIDgwLCAxMjgsIDc4LCA5MCwgNzMsIAorICAgIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDEyOCwgNzgsIDkwLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA2OSwgODUsIDc3LCAxMjgsIAorICAgIDc4LCA5MCwgNjksIDEyOCwgNzgsIDkwLCA2NSwgODgsIDEyOCwgNzgsIDkwLCA2NSwgODQsIDEyOCwgNzgsIDkwLCA2NSwgCisgICAgODEsIDEyOCwgNzgsIDkwLCA2NSwgODAsIDEyOCwgNzgsIDkwLCA2NSwgMTI4LCA3OCwgOTAsIDE5MywgNzgsIDg5LCA4NywgCisgICAgNjUsIDEyOCwgNzgsIDg5LCA4NSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgODUsIDEyOCwgNzgsIDg5LCA4NSwgODQsIDEyOCwgCisgICAgNzgsIDg5LCA4NSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4MCwgMTI4LCAKKyAgICA3OCwgODksIDg1LCA3OSwgMTI4LCA3OCwgODksIDg1LCA2OSwgMTI4LCA3OCwgODksIDg1LCAxMjgsIDc4LCA4OSwgNzksIAorICAgIDg4LCAxMjgsIDc4LCA4OSwgNzksIDg0LCAxMjgsIDc4LCA4OSwgNzksIDgwLCAxMjgsIDc4LCA4OSwgNzksIDc5LCAxMjgsIAorICAgIDc4LCA4OSwgNzksIDY1LCAxMjgsIDc4LCA4OSwgNzksIDEyOCwgNzgsIDg5LCA3NCwgNjUsIDEyOCwgNzgsIDg5LCA3MywgCisgICAgODgsIDEyOCwgNzgsIDg5LCA3MywgODQsIDEyOCwgNzgsIDg5LCA3MywgMjEyLCA3OCwgODksIDczLCAyMTEsIDc4LCA4OSwgCisgICAgNzMsIDIxMCwgNzgsIDg5LCA3MywgODAsIDEyOCwgNzgsIDg5LCA3MywgNzgsIDQ1LCA2OCwgNzksIDEyOCwgNzgsIDg5LCAKKyAgICA3MywgNzMsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgODksIAorICAgIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgMTI4LCA3OCwgODksIDIwMSwgNzgsIAorICAgIDg5LCA3MiwgNjUsIDEyOCwgNzgsIDg5LCA2OSwgODQsIDEyOCwgNzgsIDg5LCA2OSwgMjEyLCA3OCwgODksIDY5LCA3MiwgCisgICAgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA4OSwgNjksIDEyOCwgNzgsIDg5LCAxOTYsIAorICAgIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjUsIDg1LCAxMjgsIDc4LCA4OSwgNjUsIDczLCAxMjgsIDc4LCA4OSwgCisgICAgNjUsIDcyLCAxMjgsIDc4LCA4OSwgNjUsIDY5LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA4OSwgNjUsIDY1LCAxMjgsIDc4LCAKKyAgICA4NywgNzksIDc5LCAxMjgsIDc4LCA4NywgNzksIDEyOCwgNzgsIDg3LCA3MywgNzMsIDEyOCwgNzgsIDg3LCA3MywgMTI4LCAKKyAgICA3OCwgODcsIDY5LCAxMjgsIDc4LCA4NywgNjUsIDY1LCAxMjgsIDc4LCA4NywgNjUsIDEyOCwgNzgsIDg3LCAxMjgsIDc4LCAKKyAgICA4NiwgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCA4NSwgODUsIDc4LCAxMjgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDg1LCAKKyAgICA4NCwgNzMsIDc2LCA3NiwgODUsIDEyOCwgNzgsIDg1LCA4NCwgMTI4LCA3OCwgODUsIDIxMiwgNzgsIDg1LCA4MiwgODgsIAorICAgIDEyOCwgNzgsIDg1LCA4MiwgMTI4LCA3OCwgODUsIDgwLCAxMjgsIDc4LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4NSwgNzksIAorICAgIDgwLCAxMjgsIDc4LCA4NSwgNzksIDEyOCwgNzgsIDg1LCA3OCwgODUsIDkwLCAxMjgsIDc4LCA4NSwgNzgsIDg1LCAyMTgsIAorICAgIDc4LCA4NSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNzgsIDY1LCA4NiwgODUsIDIxMiwgNzgsIDg1LCA3OCwgNjUsIDg2LCA3MywgCisgICAgMjAzLCA3OCwgODUsIDc4LCAxMjgsIDc4LCA4NSwgMjA2LCA3OCwgODUsIDc3LCA2OSwgODIsIDIwNywgNzgsIDg1LCA3NywgCisgICAgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCAKKyAgICA4MiwgODMsIDEyOCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIAorICAgIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NiwgMTI4LCA3OCwgODUsIDc1LCA4NCwgNjUsIDEyOCwgNzgsIAorICAgIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgCisgICAgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDksIDE3NywgNzgsIDg1LCA0OCwgNTAsIDUwLCAKKyAgICA2NSwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIAorICAgIDUwLCA0OCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCA2NSwgMTI4LCA3OCwgCisgICAgODUsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA3OCwgODUsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MSwgCisgICAgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCAKKyAgICA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIAorICAgIDg1LCA0OCwgNDgsIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTUsIDEyOCwgCisgICAgNzgsIDg1LCA0OCwgNDgsIDU0LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTIsIAorICAgIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgCisgICAgNDksIDEyOCwgNzgsIDg0LCA4NSwgODUsIDEyOCwgNzgsIDg0LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCAyMTMsIDc4LCA4NCwgCisgICAgNzksIDgxLCA4MCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgNzMsIDY5LCAxOTcsIDc4LCA4NCwgNjksIDg1LCA3OCwgNzEsIDY2LCAKKyAgICA2NSwgMTI4LCA3OCwgODQsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCA2OSwgNzgsIDEyOCwgNzgsIDg0LCA2OSwgNjksIAorICAgIDEyOCwgNzgsIDg0LCA2NSwgODAsIDEyOCwgNzgsIDg0LCA2NSwgMjA4LCA3OCwgODQsIDY1LCA2NSwgMTI4LCA3OCwgODMsIAorICAgIDg1LCA3OSwgMjEyLCA3OCwgODMsIDg1LCA3OCwgMTI4LCA3OCwgODMsIDg1LCA3NywgMTI4LCA3OCwgODMsIDc5LCA3NywgCisgICAgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDg0LCAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODAsIDEyOCwgNzgsIDgzLCAKKyAgICA3MywgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgMjEyLCA3OCwgODMsIAorICAgIDcyLCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4MywgNzIsIDg1LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA3MywgNjksIDY5LCAKKyAgICAxMjgsIDc4LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA2NSwgODEsIDEyOCwgNzgsIDgzLCA3MiwgNjUsIAorICAgIDEyOCwgNzgsIDgzLCA2OSwgODUsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2NSwgCisgICAgMTI4LCA3OCwgODIsIDg5LCA4OCwgMTI4LCA3OCwgODIsIDg5LCA4NCwgMTI4LCA3OCwgODIsIDg5LCA4MiwgODgsIDEyOCwgCisgICAgNzgsIDgyLCA4OSwgODIsIDEyOCwgNzgsIDgyLCA4OSwgODAsIDEyOCwgNzgsIDgyLCA4OSwgMTI4LCA3OCwgODIsIDg1LCAKKyAgICA4OCwgMTI4LCA3OCwgODIsIDg1LCA4NCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDgyLCA4NSwgODIsIAorICAgIDEyOCwgNzgsIDgyLCA4NSwgODAsIDEyOCwgNzgsIDgyLCA4NSwgMTI4LCA3OCwgODIsIDc5LCA4OCwgMTI4LCA3OCwgODIsIAorICAgIDc5LCA4MCwgMTI4LCA3OCwgODIsIDc5LCAxMjgsIDc4LCA4MiwgNjksIDg4LCAxMjgsIDc4LCA4MiwgNjksIDg0LCAxMjgsIAorICAgIDc4LCA4MiwgNjksIDgwLCAxMjgsIDc4LCA4MiwgNjksIDEyOCwgNzgsIDgyLCA2NSwgODgsIDEyOCwgNzgsIDgyLCA2NSwgCisgICAgODQsIDEyOCwgNzgsIDgyLCA2NSwgODAsIDEyOCwgNzgsIDgyLCA2NSwgMTI4LCA3OCwgNzksIDg5LCAxMjgsIDc4LCA3OSwgCisgICAgODgsIDEyOCwgNzgsIDc5LCA4NiwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCA3OSwgODQsIDg0LCA3OSwgMTI4LCAKKyAgICA3OCwgNzksIDg0LCA2OSwgODMsIDEyOCwgNzgsIDc5LCA4NCwgNjksIDcyLCA2OSwgNjUsIDY4LCAxMjgsIDc4LCA3OSwgODQsIAorICAgIDY5LCA3MiwgNjksIDY1LCAxOTYsIDc4LCA3OSwgODQsIDY5LCA2NiwgNzksIDc5LCA3NSwgMTI4LCA3OCwgNzksIDg0LCA2OSwgCisgICAgNjYsIDc5LCA3OSwgMjAzLCA3OCwgNzksIDg0LCA2OSwgMTI4LCA3OCwgNzksIDg0LCAxOTcsIDc4LCA3OSwgODQsIDY3LCAKKyAgICA3MiwgNjksIDE5NiwgNzgsIDc5LCA4NCwgNjcsIDcyLCAxMjgsIDc4LCA3OSwgODQsIDEyOCwgNzgsIDc5LCAyMTIsIDc4LCAKKyAgICA3OSwgODMsIDY5LCAxMjgsIDc4LCA3OSwgODIsIDg0LCA3MiwgODcsIDY5LCA4MywgMjEyLCA3OCwgNzksIDgyLCA4NCwgNzIsIAorICAgIDY5LCA4MiwgMjA2LCA3OCwgNzksIDgyLCA4NCwgMjAwLCA3OCwgNzksIDgyLCA3NywgNjUsIDIwNCwgNzgsIDc5LCAyMTAsIAorICAgIDc4LCA3OSwgODAsIDEyOCwgNzgsIDc5LCA3OSwgNzgsIDg1LCAxMjgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIDc5LCA3OCwgCisgICAgNzAsIDc5LCA4MiwgNzUsIDczLCA3OCwgNzEsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIAorICAgIDE5NywgNzgsIDc5LCA3OCwgNDUsIDc0LCA3OSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDY2LCA4MiwgCisgICAgNjksIDY1LCA3NSwgNzMsIDc4LCAxOTksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDIwNCwgNzgsIDc5LCA3NSwgNzIsIDg1LCAKKyAgICA3NSwgMTI4LCA3OCwgNzksIDY4LCA2OSwgMTI4LCA3OCwgNzksIDY1LCAxMjgsIDc4LCA3OSwgNDUsIDY2LCA4MiwgNjksIAorICAgIDY1LCAyMDMsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIAorICAgIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OCwgCisgICAgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDczLCA3MywgMTI4LCA3OCwgNzgsIDc4LCAKKyAgICA3MywgMTI4LCA3OCwgNzgsIDc4LCA2OSwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjUsIAorICAgIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA3MywgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3OCwgCisgICAgNjUsIDEyOCwgNzgsIDc4LCA3OCwgMTI4LCA3OCwgNzgsIDcyLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA3OSwgNzksIDEyOCwgCisgICAgNzgsIDc4LCA3MSwgNzksIDEyOCwgNzgsIDc4LCA3MSwgNzMsIDczLCAxMjgsIDc4LCA3OCwgNzEsIDczLCAxMjgsIDc4LCAKKyAgICA3OCwgNzEsIDY1LCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCAxMjgsIDc4LCA3OCwgNjYsIAorICAgIDgzLCA4MCwgMTI4LCA3OCwgNzcsIDEyOCwgNzgsIDc2LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NywgCisgICAgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU0LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgNzYsIAorICAgIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgCisgICAgNzYsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NywgMTI4LCAKKyAgICA3OCwgNzYsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NCwgCisgICAgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgNzYsIDQ4LCAKKyAgICA0OCwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgNzYsIAorICAgIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDc2LCAxMjgsIDc4LCA3NSwgNzksIDc3LCAxMjgsIDc4LCA3NSwgMjA3LCA3OCwgNzUsIAorICAgIDczLCA3OCwgNjgsIDczLCAxMjgsIDc4LCA3NSwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODksIDg4LCAKKyAgICAxMjgsIDc4LCA3NCwgODksIDg0LCAxMjgsIDc4LCA3NCwgODksIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgMTI4LCAKKyAgICA3OCwgNzQsIDg5LCA4MCwgMTI4LCA3OCwgNzQsIDg5LCAxMjgsIDc4LCA3NCwgODUsIDg4LCAxMjgsIDc4LCA3NCwgODUsIAorICAgIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA4MiwgMTI4LCA3OCwgNzQsIDg1LCA4MSwgNjUsIDEyOCwgNzgsIDc0LCA4NSwgCisgICAgODAsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3NCwgODUsIDc5LCAxMjgsIDc4LCA3NCwgODUsIDY5LCAKKyAgICA4MSwgMTI4LCA3OCwgNzQsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDc0LCA4NSwgMTI4LCA3OCwgNzQsIDc5LCA4OCwgMTI4LCAKKyAgICA3OCwgNzQsIDc5LCA4NCwgMTI4LCA3OCwgNzQsIDc5LCA4MCwgMTI4LCA3OCwgNzQsIDc5LCA3OSwgMTI4LCA3OCwgNzQsIAorICAgIDc5LCAxMjgsIDc4LCA3NCwgNzMsIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDg0LCAxMjgsIDc4LCA3NCwgNzMsIDgwLCAxMjgsIAorICAgIDc4LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzgsIDc0LCA3MywgNjksIDgwLCAKKyAgICAxMjgsIDc4LCA3NCwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDczLCA2OSwgMTI4LCA3OCwgNzQsIDczLCAxMjgsIDc4LCAKKyAgICA3NCwgMjAxLCA3OCwgNzQsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3NCwgNjksIAorICAgIDg1LCA2NSwgNjksIDc4LCA2NSwgMTI4LCA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzQsIDY5LCA2OSwgCisgICAgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDE5NywgNzgsIDc0LCA2OSwgMTI4LCA3OCwgCisgICAgNzQsIDY1LCA4MSwgMTI4LCA3OCwgNzQsIDY1LCA4MCwgMTI4LCA3OCwgNzQsIDY1LCA2OSwgNzcsIDc2LCA3MywgMTI4LCAKKyAgICA3OCwgNzQsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDc0LCA2NSwgNjUsIDEyOCwgNzgsIDczLCA4OCwgMTI4LCA3OCwgNzMsIAorICAgIDg0LCA4MiwgNjksIDEyOCwgNzgsIDczLCA4MywgNjUsIDcxLCAxMjgsIDc4LCA3MywgODIsIDg1LCA3MSwgODUsIDEyOCwgCisgICAgNzgsIDczLCA4MCwgMTI4LCA3OCwgNzMsIDc4LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCA4OSwgMTI4LCAKKyAgICA3OCwgNzMsIDc4LCA2OSwgODQsIDIxNywgNzgsIDczLCA3OCwgNjksIDg0LCA2OSwgNjksIDc4LCAxMjgsIDc4LCA3MywgNzgsIAorICAgIDY5LCA4NCwgNjksIDY5LCAyMDYsIDc4LCA3MywgNzgsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3OCwgCisgICAgNzMsIDc4LCAxOTcsIDc4LCA3MywgNzgsIDY4LCA2NSwgNTAsIDEyOCwgNzgsIDczLCA3OCwgNjgsIDY1LCAxNzgsIDc4LCAKKyAgICA3MywgNzcsIDEyOCwgNzgsIDczLCAyMDUsIDc4LCA3MywgNzUsIDcyLCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIAorICAgIDc1LCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIDc1LCA2NSwgMTI4LCA3OCwgNzMsIDcyLCA4MywgNzIsIDg2LCA2NSwgCisgICAgODMsIDY1LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDc3LCA3MywgNzgsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCAKKyAgICA2NSwgNjksIDgzLCA3MiwgMTI4LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzgsIAorICAgIDczLCA3MSwgNzEsIDY1LCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgCisgICAgNzgsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDg0LCA3MiwgNzMsIAorICAgIDY5LCA4NSwgODQsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc4LCA3MywgCisgICAgNjksIDg1LCA3OCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MCwgNzMsIAorICAgIDY5LCA4NSwgODAsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgCisgICAgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAKKyAgICAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc4LCA3MywgNjksIAorICAgIDg1LCAyMDYsIDc4LCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MywgNjksIDEyOCwgNzgsIDczLCA2NiwgMTI4LCA3OCwgNzMsIAorICAgIDY1LCAxMjgsIDc4LCA3MywgNTAsIDEyOCwgNzgsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDcyLCA3NCwgNjUsIDEyOCwgNzgsIAorICAgIDcyLCAxMjgsIDc4LCA3MSwgODksIDY5LCAxMjgsIDc4LCA3MSwgODYsIDY5LCAxMjgsIDc4LCA3MSwgODUsIDg1LCAxMjgsIAorICAgIDc4LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDEyOCwgCisgICAgNzgsIDcxLCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3OSwgODgsIAorICAgIDEyOCwgNzgsIDcxLCA3OSwgODUsIDEyOCwgNzgsIDcxLCA3OSwgMjEzLCA3OCwgNzEsIDc5LCA4NCwgMTI4LCA3OCwgNzEsIAorICAgIDc5LCA4MSwgMTI4LCA3OCwgNzEsIDc5LCA4MCwgMTI4LCA3OCwgNzEsIDc5LCA3OCwgMTI4LCA3OCwgNzEsIDc5LCA3NywgCisgICAgMTI4LCA3OCwgNzEsIDc5LCA2OSwgNzIsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDIwMCwgNzgsIDcxLCAyMDcsIDc4LCA3MSwgCisgICAgNzUsIDg5LCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3NSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNzUsIDg1LCA3OCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIAorICAgIDY5LCA3OCwgOTAsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDE5NywgNzgsIDcxLCA3NSwgNzMsIDc4LCA2OCwgCisgICAgMjAxLCA3OCwgNzEsIDc1LCA3MywgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCAKKyAgICA3NSwgNjksIDg1LCA4MiwgNzMsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDc4LCA3MSwgNzUsIAorICAgIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODEsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNzUsIDY1LCA2NSwgNzcsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY1LCAxMjgsIDc4LCA3MSwgNzMsIAorICAgIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzgsIDcxLCA3MywgNjksIDEyOCwgNzgsIDcxLCA3MiwgCisgICAgNjUsIDEyOCwgNzgsIDcxLCA3MSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgyLCA2NSwgNjksIAorICAgIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgwLCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgODEsIDEyOCwgNzgsIDcxLCA3MSwgCisgICAgODUsIDc5LCAyMDksIDc4LCA3MSwgNzEsIDg1LCA3OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCA3NywgMTI4LCAKKyAgICA3OCwgNzEsIDcxLCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgODUsIAorICAgIDY1LCA2OSwgODMsIDcyLCA2NSwgMTk3LCA3OCwgNzEsIDcxLCA4NSwgNjUsIDY5LCAyMDYsIDc4LCA3MSwgNzEsIDg1LCAKKyAgICAxMjgsIDc4LCA3MSwgNzEsIDc5LCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3MywgMTI4LCAKKyAgICA3OCwgNzEsIDcxLCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNzEsIAorICAgIDcxLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgMjEzLCA3OCwgNzEsIDcxLCA2OSwgNzgsIDEyOCwgCisgICAgNzgsIDcxLCA3MSwgNjksIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCAKKyAgICA2OSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNzEsIAorICAgIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgNjUsIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDEyOCwgCisgICAgNzgsIDcxLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA2OSwgODUsIDgyLCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MSwgNjksIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNjksIDY1LCA2OCwgNjUsIAorICAgIDc2LCAxMjgsIDc4LCA3MSwgNjUsIDg4LCAxMjgsIDc4LCA3MSwgNjUsIDg1LCAxMjgsIDc4LCA3MSwgNjUsIDg0LCAxMjgsIAorICAgIDc4LCA3MSwgNjUsIDIxMSwgNzgsIDcxLCA2NSwgODEsIDEyOCwgNzgsIDcxLCA2NSwgODAsIDEyOCwgNzgsIDcxLCA2NSwgCisgICAgNzgsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDY1LCA3OCwgMTI4LCA3OCwgNzEsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDY1LCAKKyAgICA3MiwgMTI4LCA3OCwgNzEsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDcxLCAxOTMsIDc4LCA3MCwgMTI4LCA3OCwgNjksIDg4LCAKKyAgICAyMTIsIDc4LCA2OSwgODgsIDEyOCwgNzgsIDY5LCA4NywgODMsIDgwLCA2NSwgODAsIDY5LCA4MiwgMTI4LCA3OCwgNjksIAorICAgIDg3LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDg3LCAxMjgsIDc4LCA2OSwgODUsIDg0LCA4MiwgNjUsIDIwNCwgCisgICAgNzgsIDY5LCA4NSwgODQsIDY5LCA4MiwgMTI4LCA3OCwgNjksIDg0LCAxMjgsIDc4LCA2OSwgMjEyLCA3OCwgNjksIDgzLCAKKyAgICA4NCwgNjksIDE5NiwgNzgsIDY5LCA4MSwgODUsIDY4LCA2NSwgNjUsIDEyOCwgNzgsIDY5LCA4MCwgODQsIDg1LCA3OCwgNjksIAorICAgIDEyOCwgNzgsIDY5LCA4MCwgMTI4LCA3OCwgNjksIDc5LCAxMjgsIDc4LCA2OSwgMjA3LCA3OCwgNjksIDc4LCA2NSwgNzgsIAorICAgIDc5LCAxMjgsIDc4LCA2OSwgNzgsIDEyOCwgNzgsIDY5LCA3NiwgMTI4LCA3OCwgNjksIDczLCA4NCwgNzIsIDY5LCAyMTAsIAorICAgIDc4LCA2OSwgNzEsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNjksIDE5NiwgNzgsIDY5LCA2NywgCisgICAgNzUsIDg0LCA3MywgNjksIDEyOCwgNzgsIDY5LCA2NiwgNjksIDc4LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDc4LCAKKyAgICA2OCwgODUsIDg4LCAxMjgsIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc4LCA2OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNjgsIAorICAgIDg1LCA4MiwgMTI4LCA3OCwgNjgsIDg1LCA4MCwgMTI4LCA3OCwgNjgsIDg1LCA3OCwgMTI4LCA3OCwgNjgsIDIxMywgNzgsIAorICAgIDY4LCA3OSwgODgsIDEyOCwgNzgsIDY4LCA3OSwgODQsIDEyOCwgNzgsIDY4LCA3OSwgODAsIDEyOCwgNzgsIDY4LCA3OSwgCisgICAgNzksIDEyOCwgNzgsIDY4LCA3OSwgNzgsIDEyOCwgNzgsIDY4LCA3OSwgNzcsIDY2LCA4NSwgMTI4LCA3OCwgNjgsIDc5LCAKKyAgICA3NiwgMTk3LCA3OCwgNjgsIDczLCA4OCwgMTI4LCA3OCwgNjgsIDczLCA4NCwgMTI4LCA3OCwgNjgsIDczLCA4MSwgMTI4LCAKKyAgICA3OCwgNjgsIDczLCA4MCwgMTI4LCA3OCwgNjgsIDczLCA2OSwgODgsIDEyOCwgNzgsIDY4LCA3MywgNjksIDEyOCwgNzgsIAorICAgIDY4LCA3MywgNjgsIDY1LCAxMjgsIDc4LCA2OCwgNzMsIDY1LCA4MSwgMTI4LCA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3OCwgCisgICAgNjgsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA2NSwgNjksIDgyLCAKKyAgICA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNzgsIDY4LCA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgMTI4LCAKKyAgICA3OCwgNjgsIDY1LCA4OCwgMTI4LCA3OCwgNjgsIDY1LCA4NCwgMTI4LCA3OCwgNjgsIDY1LCA4MCwgMTI4LCA3OCwgNjgsIAorICAgIDY1LCA3NywgMTI4LCA3OCwgNjgsIDY1LCA2NSwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA2OCwgCisgICAgNjUsIDY1LCAxMjgsIDc4LCA2OCwgNjUsIDE5MywgNzgsIDY2LCA4OSwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODQsIDEyOCwgCisgICAgNzgsIDY2LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA2NiwgODksIDgyLCAxMjgsIDc4LCA2NiwgODksIDgwLCAxMjgsIDc4LCAKKyAgICA2NiwgODksIDEyOCwgNzgsIDY2LCA4NSwgODgsIDEyOCwgNzgsIDY2LCA4NSwgODQsIDEyOCwgNzgsIDY2LCA4NSwgODIsIAorICAgIDg4LCAxMjgsIDc4LCA2NiwgODUsIDgyLCAxMjgsIDc4LCA2NiwgODUsIDgwLCAxMjgsIDc4LCA2NiwgODUsIDEyOCwgNzgsIAorICAgIDY2LCA3OSwgODgsIDEyOCwgNzgsIDY2LCA3OSwgODQsIDEyOCwgNzgsIDY2LCA3OSwgODAsIDEyOCwgNzgsIDY2LCA3OSwgCisgICAgMTI4LCA3OCwgNjYsIDczLCA4OCwgMTI4LCA3OCwgNjYsIDczLCA4NCwgMTI4LCA3OCwgNjYsIDczLCA4MCwgMTI4LCA3OCwgCisgICAgNjYsIDczLCA2OSwgODgsIDEyOCwgNzgsIDY2LCA3MywgNjksIDgwLCAxMjgsIDc4LCA2NiwgNzMsIDY5LCAxMjgsIDc4LCAKKyAgICA2NiwgNzMsIDEyOCwgNzgsIDY2LCA3MiwgMTI4LCA3OCwgNjYsIDY1LCA4OCwgMTI4LCA3OCwgNjYsIDY1LCA4NCwgMTI4LCAKKyAgICA3OCwgNjYsIDY1LCA4MCwgMTI4LCA3OCwgNjYsIDY1LCAxMjgsIDc4LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIAorICAgIDc4LCA2NSwgODksIDEyOCwgNzgsIDY1LCA4OCwgNzMsIDY1LCAyMDYsIDc4LCA2NSwgODgsIDEyOCwgNzgsIDY1LCA4NSwgCisgICAgODQsIDcyLCA4MywgMTI4LCA3OCwgNjUsIDg1LCA2OCwgNzMsIDIxOCwgNzgsIDY1LCA4NCwgODUsIDgyLCA2NSwgMjA0LCAKKyAgICA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA3OCwgNjUsIDgzLCA3NSwgNjUsIDgwLCAyMDEsIDc4LCA2NSwgODMsIAorICAgIDcyLCA3MywgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc4LCA2NSwgCisgICAgODMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNzgsIDY1LCAKKyAgICA4MiwgMTI4LCA3OCwgNjUsIDgxLCAxMjgsIDc4LCA2NSwgNzksIDIxMSwgNzgsIDY1LCA3OCwgODMsIDY1LCA3OCwgNjUsIAorICAgIDgxLCAxMjgsIDc4LCA2NSwgNzgsIDcxLCA3NywgNzksIDc4LCA4NCwgNzIsIDc5LCAxMjgsIDc4LCA2NSwgNzgsIDY4LCAKKyAgICAxMjgsIDc4LCA2NSwgNzgsIDY1LCAxMjgsIDc4LCA2NSwgNzcsIDY5LCAxMjgsIDc4LCA2NSwgNzcsIDE5NywgNzgsIDY1LCAKKyAgICA3NywgNTAsIDEyOCwgNzgsIDY1LCA3NywgMTI4LCA3OCwgNjUsIDc1LCAxMjgsIDc4LCA2NSwgNzMsIDgyLCAxOTMsIDc4LCAKKyAgICA2NSwgNzMsIDIwNCwgNzgsIDY1LCA3MSwgODIsIDIwMSwgNzgsIDY1LCA3MSwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgNzEsIAorICAgIDY1LCAxMjgsIDc4LCA2NSwgNzEsIDE5MywgNzgsIDY1LCA3MSwgMTI4LCA3OCwgNjUsIDE5OSwgNzgsIDY1LCA2OSwgMTI4LCAKKyAgICA3OCwgNjUsIDY2LCA3NiwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgODMsIDczLCA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIAorICAgIDY1LCA2NSwgNzUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDczLCAxMjgsIDc4LCA2NSwgCisgICAgMTkzLCA3OCwgNjUsIDUwLCAxMjgsIDc4LCA2NSwgNDUsIDUwLCAxMjgsIDc4LCA0OCwgNTIsIDUwLCAxMjgsIDc4LCA0OCwgCisgICAgNTIsIDQ5LCAxMjgsIDc4LCA0OCwgNTIsIDQ4LCAxMjgsIDc4LCA0OCwgNTEsIDU3LCAxMjgsIDc4LCA0OCwgNTEsIDU2LCAKKyAgICAxMjgsIDc4LCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1NSwgMTI4LCA3OCwgNDgsIDUxLCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDUxLCA1MywgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTMsIDEyOCwgNzgsIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIAorICAgIDc4LCA0OCwgNTEsIDUyLCAxMjgsIDc4LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MSwgMTI4LCA3OCwgCisgICAgNDgsIDUxLCA1MCwgMTI4LCA3OCwgNDgsIDUxLCA0OSwgMTI4LCA3OCwgNDgsIDUxLCA0OCwgMTI4LCA3OCwgNDgsIDUwLCAKKyAgICA1NywgMTI4LCA3OCwgNDgsIDUwLCA1NiwgMTI4LCA3OCwgNDgsIDUwLCA1NSwgMTI4LCA3OCwgNDgsIDUwLCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDUwLCA1MywgNjUsIDEyOCwgNzgsIDQ4LCA1MCwgNTMsIDEyOCwgNzgsIDQ4LCA1MCwgNTIsIDEyOCwgNzgsIAorICAgIDQ4LCA1MCwgNTEsIDEyOCwgNzgsIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIDQ4LCA1MCwgCisgICAgNDgsIDEyOCwgNzgsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDY2LCAxMjgsIDc4LCA0OCwgNDksIDU2LCAKKyAgICA2NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA3OCwgNDgsIDQ5LCA0OSwgMTI4LCA3OCwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNDgsIDQ4LCA1NywgCisgICAgMTI4LCA3OCwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgCisgICAgNDgsIDQ4LCA1MywgMTI4LCA3OCwgNDgsIDQ4LCA1MiwgMTI4LCA3OCwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNDgsIDQ4LCAKKyAgICA1MCwgMTI4LCA3OCwgNDgsIDQ4LCA0OSwgMTI4LCA3OCwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzgsIDQ1LCA2NSwgODIsIAorICAgIDIxNywgNzcsIDg5LCA4OCwgMTI4LCA3NywgODksIDg0LCAxMjgsIDc3LCA4OSwgODMsIDc2LCA3MywgODQsIDY5LCAxMjgsIAorICAgIDc3LCA4OSwgODAsIDEyOCwgNzcsIDg5LCA2NSwgMTI4LCA3NywgODksIDE5MywgNzcsIDg5LCAxMjgsIDc3LCAyMTcsIDc3LCAKKyAgICA4NywgNzksIDc5LCAxMjgsIDc3LCA4NywgNzksIDEyOCwgNzcsIDg3LCA3MywgNzMsIDEyOCwgNzcsIDg3LCA3MywgMTI4LCAKKyAgICA3NywgODcsIDY5LCA2OSwgMTI4LCA3NywgODcsIDY5LCAxMjgsIDc3LCA4NywgNjUsIDY1LCAxMjgsIDc3LCA4NywgNjUsIAorICAgIDEyOCwgNzcsIDg3LCAxMjgsIDc3LCAyMTUsIDc3LCA4NiwgODMsIDEyOCwgNzcsIDg2LCA3OSwgODAsIDEyOCwgNzcsIDg2LCAKKyAgICA3MywgMTI4LCA3NywgODYsIDY5LCA4NSwgNjUsIDY5LCA3OCwgNzEsIDY1LCA3NywgMTI4LCA3NywgODYsIDEyOCwgNzcsIAorICAgIDIxNCwgNzcsIDg1LCA4OCwgMTI4LCA3NywgODUsIDg1LCA4MywgNzMsIDc1LCA2NSwgODQsIDc5LCA2NSwgNzgsIDEyOCwgCisgICAgNzcsIDg1LCA4NSwgODIsIDY4LCA3MiwgNjUsIDc0LCAxOTMsIDc3LCA4NSwgODUsIDEyOCwgNzcsIDg1LCA4NCwgMTI4LCAKKyAgICA3NywgODUsIDgzLCA3MywgNjcsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDE5NSwgNzcsIDg1LCA4MywgNzIsIDgyLCA3OSwgNzksIAorICAgIDc3LCAxMjgsIDc3LCA4NSwgODMsIDcyLCA1MSwgMTI4LCA3NywgODUsIDgzLCA3MiwgMTc5LCA3NywgODUsIDgzLCA3MiwgCisgICAgMTI4LCA3NywgODUsIDgzLCAyMDAsIDc3LCA4NSwgODIsIDg4LCAxMjgsIDc3LCA4NSwgODIsIDcxLCA4NSwgNTAsIDEyOCwgCisgICAgNzcsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDg1LCA4MiwgNjgsIDY1LCAxMjgsIDc3LCA4NSwgODIsIDY4LCAxOTMsIDc3LCAKKyAgICA4NSwgODIsIDEyOCwgNzcsIDg1LCA4MSwgNjgsIDY1LCA3NywgMTI4LCA3NywgODUsIDgwLCAxMjgsIDc3LCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDc3LCA4NSwgNzksIDg0LCAxMjgsIDc3LCA4NSwgNzksIDgwLCAxMjgsIDc3LCA4NSwgNzksIDc3LCA2NSwgCisgICAgNjksIDEyOCwgNzcsIDg1LCA3OSwgMTI4LCA3NywgODUsIDc4LCA4MywgODUsIDY2LCAxMjgsIDc3LCA4NSwgNzgsIDY1LCAKKyAgICA3MiwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgODQsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIAorICAgIDIxMiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc3LCA4NSwgCisgICAgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIAorICAgIDc2LCAxOTcsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA4NSwgNzYsIDg0LCA3MywgCisgICAgNzcsIDY1LCA4MCwgMTI4LCA3NywgODUsIDc2LCA4NCwgMjAxLCA3NywgODUsIDc1LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAKKyAgICAxMjgsIDc3LCA4NSwgNzMsIDc4LCAxMjgsIDc3LCA4NSwgNzEsIDgzLCAxMjgsIDc3LCA4NSwgNzEsIDEyOCwgNzcsIDg1LCAKKyAgICAxOTksIDc3LCA4NSwgNjksIDEyOCwgNzcsIDg1LCA2NywgNzIsIDEyOCwgNzcsIDg1LCA2NywgMjAwLCA3NywgODUsIDY3LCAKKyAgICA2NSwgNjUsIDY4LCAxMjgsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA4NSwgNDUsIAorICAgIDcxLCA2NSwgNjUsIDcyLCA3NiwgNjUsIDE5MywgNzcsIDIxMywgNzcsIDgzLCAxMjgsIDc3LCA4MCwgNjUsIDEyOCwgNzcsIAorICAgIDc5LCA4OSwgNjUsIDczLCAxMjgsIDc3LCA3OSwgODgsIDEyOCwgNzcsIDc5LCA4NiwgNzMsIDE5NywgNzcsIDc5LCA4NiwgCisgICAgNjksIDE5NiwgNzcsIDc5LCA4NSwgODQsIDcyLCAxMjgsIDc3LCA3OSwgODUsIDg0LCAyMDAsIDc3LCA3OSwgODUsIDgzLCAKKyAgICA2OSwgMTI4LCA3NywgNzksIDg1LCA4MywgMTk3LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDgzLCAxMjgsIAorICAgIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgMTI4LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgMjA2LCA3NywgCisgICAgNzksIDg1LCA3OCwgMjEyLCA3NywgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDE5NiwgNzcsIDc5LCAKKyAgICA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NywgNzksIDg0LCAxMjgsIDc3LCA3OSwgODIsIDg0LCA4NSwgODUsIDc3LCAxMjgsIAorICAgIDc3LCA3OSwgODIsIDg0LCA2NSwgODIsIDEyOCwgNzcsIDc5LCA4MiwgODAsIDcyLCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCAKKyAgICA2NSwgMjA0LCA3NywgNzksIDgyLCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3NywgNzksIDgwLCAxMjgsIDc3LCA3OSwgNzksIAorICAgIDgzLCA2OSwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzcsIDc5LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCA3OSwgMjA2LCA3NywgCisgICAgNzksIDc5LCA3NywgODAsIDg1LCA4MSwgMTI4LCA3NywgNzksIDc5LCA3NywgNjksIDg1LCA4NCwgMTI4LCA3NywgNzksIDc5LCAKKyAgICAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MywgNjksIDY5LCA3OCwgMTI4LCA3NywgNzksIDc4LCA4NCwgNzIsIDEyOCwgNzcsIAorICAgIDc5LCA3OCwgODQsIDIwMCwgNzcsIDc5LCA3OCwgODMsIDg0LCA2OSwgODIsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDgzLCA4NCwgCisgICAgNjUsIDY2LCA3NiwgMTk3LCA3NywgNzksIDc4LCA3OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgNzcsIDc5LCA3OCwgNzksIDgyLCAKKyAgICA2NSwgNzMsIDc2LCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3NywgNzksIDc4LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3NywgNzksIDc4LCA3OSwgCisgICAgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA3NywgNzksIDc4LCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzcsIDc5LCAKKyAgICA3OCwgNzUsIDY5LCA4OSwgMTI4LCA3NywgNzksIDc4LCA3NSwgNjksIDIxNywgNzcsIDc5LCA3OCwgNzMsIDEyOCwgNzcsIAorICAgIDc5LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgNzcsIDc5LCA3OCwgNjksIDIxNywgNzcsIDc5LCA3OCwgCisgICAgMTI4LCA3NywgNzksIDIwNiwgNzcsIDc5LCA3NiwgMTI4LCA3NywgNzksIDcyLCA2NSwgNzcsIDc3LCA2NSwgMTk2LCA3NywgCisgICAgNzksIDY4LCA4NSwgNzYsIDIwNywgNzcsIDc5LCA2OCwgNjksIDgzLCA4NCwgODksIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAKKyAgICA4MywgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDEyOCwgNzcsIDc5LCA2NiwgNzMsIAorICAgIDc2LCAxOTcsIDc3LCA3OSwgNjUsIDEyOCwgNzcsIDIwNywgNzcsIDc4LCA4OSwgNjUsIDIwNSwgNzcsIDc4LCA2NSwgODMsIAorICAgIDEyOCwgNzcsIDc3LCA4MywgODAsIDEyOCwgNzcsIDc3LCAxMjgsIDc3LCAyMDUsIDc3LCA3NiwgNjUsIDEyOCwgNzcsIDc2LCAKKyAgICAxMjgsIDc3LCA3NSwgODAsIDY1LCA4MiwgNjUsIDIwOSwgNzcsIDczLCA4OCwgMTI4LCA3NywgNzMsIDg0LCAxMjgsIDc3LCAKKyAgICA3MywgODMsIDgyLCA2NSwgMTI4LCA3NywgNzMsIDgyLCA3MywgNjYsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDc3LCA3MywgODIsIAorICAgIDczLCAxMjgsIDc3LCA3MywgODIsIDY5LCA2OCwgMTI4LCA3NywgNzMsIDgwLCAxMjgsIDc3LCA3MywgNzgsIDg5LCAxMjgsIAorICAgIDc3LCA3MywgNzgsIDg1LCA4MywgNDUsIDc5LCA4MiwgNDUsIDgwLCA3NiwgODUsIDIxMSwgNzcsIDczLCA3OCwgODUsIDgzLCAKKyAgICAxMjgsIDc3LCA3MywgNzgsIDczLCA4MywgODQsIDY5LCA4MiwgMTI4LCA3NywgNzMsIDc4LCA3MywgNzcsIDY1LCAxMjgsIAorICAgIDc3LCA3MywgNzgsIDczLCA2OCwgNzMsIDgzLCA2NywgMTI4LCA3NywgNzMsIDc4LCA3MywgNjYsIDg1LCA4MywgMTI4LCA3NywgCisgICAgNzMsIDc3LCA2OSwgMTI4LCA3NywgNzMsIDc3LCAxMjgsIDc3LCA3MywgNzYsIDc2LCA3MywgNzksIDc4LCAyMTEsIDc3LCAKKyAgICA3MywgNzYsIDc2LCA2OSwgODQsIDEyOCwgNzcsIDczLCA3NiwgNzYsIDE5NywgNzcsIDczLCA3NiwgMjA0LCA3NywgNzMsIAorICAgIDc2LCA3NSwgMjE3LCA3NywgNzMsIDc2LCAxMjgsIDc3LCA3MywgNzUsIDg1LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA3MywgCisgICAgNzUsIDgyLCA3OSwgMjA2LCA3NywgNzMsIDc1LCA4MiwgNzMsIDEyOCwgNzcsIDczLCA3MywgNzgsIDEyOCwgNzcsIDczLCAKKyAgICA3MywgMTI4LCA3NywgNzMsIDE5OSwgNzcsIDczLCA2OSwgODgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODQsIAorICAgIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCAKKyAgICA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgCisgICAgODUsIDc4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NywgNzMsIDY5LCAKKyAgICA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgCisgICAgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDY1LCA3OCwgODMsIAorICAgIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MywgCisgICAgNjksIDg1LCA3NywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzIsIAorICAgIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NywgNzMsIDY5LCA4NSwgMjA1LCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3NywgCisgICAgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzMsIDY5LCAxMjgsIDc3LCA3MywgNjgsIDc2LCA3MywgNzgsIDE5NywgNzcsIDczLCAKKyAgICA2OCwgNjgsIDc2LCA2OSwgNDUsIDg3LCA2OSwgNzYsIDgzLCAyMDAsIDc3LCA3MywgNjgsIDY4LCA3NiwgMTk3LCA3NywgNzMsIAorICAgIDE5NiwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgNjcsIDc5LCA4MCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDc5LCA4MCwgCisgICAgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDIwNywgNzcsIDczLCA2NywgMjEwLCA3NywgNzIsIDkwLCAKKyAgICAxMjgsIDc3LCA3MiwgNjUsIDEyOCwgNzcsIDcyLCAxMjgsIDc3LCA3MSwgODUsIDg4LCAxMjgsIDc3LCA3MSwgODUsIDg0LCAKKyAgICAxMjgsIDc3LCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4MiwgMTI4LCA3NywgNzEsIDg1LCA4MCwgMTI4LCAKKyAgICA3NywgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCAxMjgsIAorICAgIDc3LCA3MSwgODUsIDEyOCwgNzcsIDcxLCA3OSwgODgsIDEyOCwgNzcsIDcxLCA3OSwgODQsIDEyOCwgNzcsIDcxLCA3OSwgCisgICAgODAsIDEyOCwgNzcsIDcxLCA3OSwgMTI4LCA3NywgNzEsIDIwNywgNzcsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MSwgCisgICAgNzMsIDY5LCAxMjgsIDc3LCA3MSwgNjksIDg4LCAxMjgsIDc3LCA3MSwgNjksIDgwLCAxMjgsIDc3LCA3MSwgNjksIDEyOCwgCisgICAgNzcsIDcxLCA2NiwgODUsIDEyOCwgNzcsIDcxLCA2NiwgNzksIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCA3MCwgODUsIDc3LCAKKyAgICAxMjgsIDc3LCA3MSwgNjYsIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDczLCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA4NSwgNzgsIAorICAgIDEyOCwgNzcsIDcxLCA2NiwgNjksIDc4LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2OSwgCisgICAgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCA4MSwgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCAxMjgsIDc3LCAKKyAgICA3MSwgNjUsIDg4LCAxMjgsIDc3LCA3MSwgNjUsIDg0LCAxMjgsIDc3LCA3MSwgNjUsIDgwLCAxMjgsIDc3LCA3MSwgNjUsIAorICAgIDEyOCwgNzcsIDcxLCAxMjgsIDc3LCA3MCwgNzksIDc4LCAxMjgsIDc3LCA3MCwgNzksIDIwNiwgNzcsIDcwLCA3OSwgMTI4LCAKKyAgICA3NywgNzAsIDczLCA4OSwgNjUsIDgxLCAxMjgsIDc3LCA3MCwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzAsIDY5LCA4NSwgODQsIAorICAgIDEyOCwgNzcsIDcwLCA2OSwgODUsIDgxLCAxMjgsIDc3LCA3MCwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzcsIDcwLCA2NSwgCisgICAgNjUsIDEyOCwgNzcsIDY5LCA5MCwgOTAsIDc5LCAxMjgsIDc3LCA2OSwgODgsIDEyOCwgNzcsIDY5LCA4NSwgMjEyLCA3NywgCisgICAgNjksIDg1LCA4MSwgMTI4LCA3NywgNjksIDg1LCA3OCwgNzQsIDc5LCA3NywgNzgsIDY4LCA2OSwgODUsIDgxLCAxMjgsIDc3LCAKKyAgICA2OSwgODUsIDc4LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA3OSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgCisgICAgMjA0LCA3NywgNjksIDg0LCA4MiwgNzMsIDY1LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA2OSwgODQsIDY5LCAyMTEsIDc3LCAKKyAgICA2OSwgODQsIDc5LCA2NiwgNjksIDc2LCA4NSwgODMsIDEyOCwgNzcsIDY5LCA4NCwgNjksIDc1LCAxMjgsIDc3LCA2OSwgODQsIAorICAgIDY5LCA3MSwgMTI4LCA3NywgNjksIDg0LCA2NSwgNzYsIDEyOCwgNzcsIDY5LCA4NCwgMTkzLCA3NywgNjksIDgzLCA4MywgCisgICAgNjksIDc4LCA3MywgNjUsIDIwNiwgNzcsIDY5LCA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MywgODMsIDY1LCAKKyAgICA3MSwgMTk3LCA3NywgNjksIDgzLCA3OSwgMTI4LCA3NywgNjksIDgzLCA3MywgMTI4LCA3NywgNjksIDgzLCA3MiwgMTI4LCAKKyAgICA3NywgNjksIDgyLCA3OSwgNzMsIDg0LCA3MywgMTk1LCA3NywgNjksIDgyLCA3NSwgNzIsIDY1LCAxMjgsIDc3LCA2OSwgODIsIAorICAgIDc1LCA3MiwgMTkzLCA3NywgNjksIDgyLCA3MywgNjgsIDczLCA2NSwgNzgsIDgzLCAxMjgsIDc3LCA2OSwgODIsIDczLCAKKyAgICAxMjgsIDc3LCA2OSwgODIsIDcxLCA2OSwgMTI4LCA3NywgNjksIDgyLCA2NywgODUsIDgyLCA4OSwgMTI4LCA3NywgNjksIAorICAgIDgyLCA2NywgODUsIDgyLCAyMTcsIDc3LCA2OSwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzcsIDY5LCA3OCwgMTI4LCA3NywgCisgICAgNjksIDc3LCA3OSwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDgyLCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NywgNjksIDc3LCAKKyAgICA2NiwgNjksIDgyLCAxMjgsIDc3LCA2OSwgNzcsIDY2LCA2OSwgMjEwLCA3NywgNjksIDc3LCA0NSwgODEsIDc5LCA4MCwgNzIsIAorICAgIDEyOCwgNzcsIDY5LCA3NywgMTI4LCA3NywgNjksIDIwNSwgNzcsIDY5LCA3NiwgNzksIDY4LCA3MywgMTk1LCA3NywgNjksIAorICAgIDc2LCA3MywgNzUsIDEyOCwgNzcsIDY5LCA3MywgOTAsIDczLCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4NCwgNzksIDc4LCAKKyAgICAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDc2LCA3MywgCisgICAgMTI4LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA3NywgNjksIDY5LCA4NCwgMTI4LCA3NywgNjksIDY5LCAKKyAgICA3NywgODUsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIDEyOCwgNzcsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc3LCA2OSwgNjgsIAorICAgIDczLCA4NSwgNzcsIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDg1LCAyMDUsIDc3LCA2OSwgNjgsIDczLCA2NywgNzMsIDc4LCA2OSwgCisgICAgMTI4LCA3NywgNjksIDY4LCA3MywgNjcsIDY1LCAyMDQsIDc3LCA2OSwgNjUsIDg0LCAxMjgsIDc3LCA2OSwgNjUsIDIxMiwgCisgICAgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDE5NiwgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDY5LCAKKyAgICA2NSwgODMsIDg1LCA4MiwgMTk3LCA3NywgNjgsIDg1LCAyMDYsIDc3LCAxOTYsIDc3LCA2NywgNzIsIDIxMywgNzcsIDY3LCAKKyAgICA3MiwgNjUsIDIwNiwgNzcsIDE5NSwgNzcsIDY2LCA4NSwgNzksIDgxLCAxMjgsIDc3LCA2NiwgODUsIDc5LCAxMjgsIDc3LCAKKyAgICA2NiwgODUsIDY5LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY2LCA4NSwgNjUsIDY5LCAxMjgsIAorICAgIDc3LCA2NiwgNzksIDc5LCAxMjgsIDc3LCA2NiwgNzksIDEyOCwgNzcsIDY2LCA3MywgODQsIDEyOCwgNzcsIDY2LCA3MywgCisgICAgMjEyLCA3NywgNjYsIDczLCA4MiwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA3MywgMTI4LCA3NywgNjYsIDY5LCAKKyAgICA4NSwgODgsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDgyLCA3MywgMTI4LCA3NywgNjYsIDY5LCA4NSwgNzcsIDEyOCwgNzcsIAorICAgIDY2LCA2OSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY5LCA3OCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgNzUsIDY5LCA2OSwgCisgICAgODQsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDY2LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA4MSwgMTI4LCA3NywgCisgICAgNjYsIDY1LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NiwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCAKKyAgICA3NSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCAxMjgsIDc3LCA2NiwgNjUsIDE5MywgNzcsIDY2LCAxOTMsIDc3LCAKKyAgICA2NiwgNTIsIDEyOCwgNzcsIDY2LCA1MSwgMTI4LCA3NywgNjYsIDUwLCAxMjgsIDc3LCA2NiwgMTI4LCA3NywgMTk0LCA3NywgCisgICAgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDg5LCAxMjgsIDc3LCA2NSwgODgsIDczLCA3NywgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA4OCwgMTI4LCA3NywgNjUsIDg1LCAxMjgsIDc3LCA2NSwgODQsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIAorICAgIDc3LCA2NSwgODQsIDgyLCA3MywgODgsIDEyOCwgNzcsIDY1LCA4NCwgNjksIDgyLCA3MywgNjUsIDc2LCA4MywgMTI4LCA3NywgCisgICAgNjUsIDg0LCAxMjgsIDc3LCA2NSwgODMsIDIxMywgNzcsIDY1LCA4MywgODMsIDczLCA3OCwgNzEsIDEyOCwgNzcsIDY1LCAKKyAgICA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY1LCA4MywgNzksIDgyLCAxOTMsIDc3LCA2NSwgODMsIDc1LCAxMjgsIAorICAgIDc3LCA2NSwgODMsIDcyLCA3MCwgNjUsIDY1LCA4NCwgMTI4LCA3NywgNjUsIDgzLCA3MiwgNTAsIDEyOCwgNzcsIDY1LCA4MywgCisgICAgNjcsIDg1LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA2NSwgODIsIDg5LCAxMjgsIDc3LCA2NSwgODIsIDg1LCA3NSwgODUsIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgODQsIDg5LCA4MiwgNzMsIDE5MywgNzcsIDY1LCA4MiwgODIsIDg5LCA3MywgNzgsIDE5OSwgCisgICAgNzcsIDY1LCA4MiwgODIsIDczLCA2NSwgNzEsIDE5NywgNzcsIDY1LCA4MiwgNzUsIDY5LCA4MiwgMTI4LCA3NywgNjUsIDgyLCAKKyAgICA3NSwgNDUsIDUyLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTEsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MCwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDQ5LCAxMjgsIDc3LCA2NSwgODIsIDY5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCAKKyAgICA3MiwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDgzLCA3MywgODQsIDY5LCAKKyAgICAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDY1LCAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDE5MywgNzcsIAorICAgIDY1LCA4MiwgMTI4LCA3NywgNjUsIDgxLCA2NSwgNzAsIDEyOCwgNzcsIDY1LCA4MSwgMTI4LCA3NywgNjUsIDgwLCA3NiwgCisgICAgMTk3LCA3NywgNjUsIDgwLCA3MywgODEsIDEyOCwgNzcsIDY1LCAyMDgsIDc3LCA2NSwgNzksIDEyOCwgNzcsIDY1LCA3OCwgCisgICAgODMsIDg5LCA3OSwgNzgsIDEyOCwgNzcsIDY1LCA3OCwgODMsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAyMTgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDc4LCA3MSwgNjUsIDc2LCA2NSwgNzcsIDEyOCwgNzcsIAorICAgIDY1LCA3OCwgNjgsIDY1LCA3MywgNzYsIDczLCA3OCwgMTk5LCA3NywgNjUsIDc4LCA2OCwgNjUsIDczLCAxOTUsIDc3LCA2NSwgCisgICAgNzgsIDY3LCA3MiwgMjEzLCA3NywgNjUsIDc4LCA2NSwgNjcsIDc2LCA2OSwgODMsIDEyOCwgNzcsIDY1LCA3NiwgODQsIDY5LCAKKyAgICA4MywgMTk3LCA3NywgNjUsIDc2LCA2OSwgNjksIDgyLCA3MywgMTI4LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3NywgNjUsIAorICAgIDc2LCAxOTcsIDc3LCA2NSwgNzYsIDY1LCA3NSwgNzksIDIwNiwgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgNjUsIDEyOCwgCisgICAgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgMTkzLCA3NywgNjUsIDczLCA5MCwgNjksIDEyOCwgNzcsIDY1LCA3MywgODksIDY1LCAKKyAgICA3NywgNzksIDc1LCAxMjgsIDc3LCA2NSwgNzMsIDg0LCA2NSwgNzMsIDc1LCA3MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgODIsIAorICAgIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA2NSwgNzYsIDY1LCA3MywgCisgICAgMTI4LCA3NywgNjUsIDczLCA3NiwgNjYsIDc5LCAyMTYsIDc3LCA2NSwgNzMsIDc1LCA4NSwgODIsIDc5LCAxMjgsIDc3LCAKKyAgICA2NSwgNzMsIDY4LCA2OSwgNzgsIDEyOCwgNzcsIDY1LCA3MywgMTI4LCA3NywgNjUsIDcyLCA3NCwgNzksIDc4LCAxOTksIAorICAgIDc3LCA2NSwgNzIsIDcyLCA2NSwgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgCisgICAgNzIsIDY1LCA4MCwgNjUsIDc1LCA3MiwgMTI4LCA3NywgNjUsIDcyLCA2NSwgNjUsIDgwLCA4MiwgNjUsIDY1LCA3OCwgMTkzLCAKKyAgICA3NywgNjUsIDcyLCAxMjgsIDc3LCA2NSwgNzEsIDc4LCA3MywgNzAsIDg5LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA2OSwgODMsIAorICAgIDczLCAxMjgsIDc3LCA2NSwgNjksIDc4LCA4OSwgNzMsIDEyOCwgNzcsIDY1LCA2OSwgNzgsIDc0LCA2OSwgODQsIDEyOCwgCisgICAgNzcsIDY1LCA2OSwgNzcsIDg2LCA2OSwgODUsIDg4LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA3NSwgODAsIDY5LCA3OCwgMTI4LCAKKyAgICA3NywgNjUsIDY5LCA3NywgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA2NiwgNzEsIDY2LCA3MywgCisgICAgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA2NiwgNjUsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY1LCAKKyAgICA2OSwgNzYsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NSwgNjksIDg1LCA4MCwgMTI4LCA3NywgNjUsIDY4LCA4OSwgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA2OCwgODUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAyMDAsIDc3LCA2NSwgNjgsIDY4LCA2NSwgCisgICAgMTI4LCA3NywgNjUsIDY4LCA2OCwgMTkzLCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAKKyAgICAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NiwgODIsIDY5LCA4NiwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIAorICAgIDc5LCA3OCwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA2NSwgCisgICAgNjcsIDgyLCA3OSwgMjA2LCA3NywgNjUsIDY3LCA3MiwgNzMsIDc4LCA2OSwgMTI4LCA3NywgNjUsIDY1LCA4OSwgODksIDY1LCAKKyAgICA2NSwgMTI4LCA3NywgNjUsIDY1LCA3MywgMTI4LCA3NywgNjUsIDY1LCAxMjgsIDc3LCA2NSwgNTAsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MiwgNTIsIDEyOCwgNzcsIDQ4LCA1MiwgNTEsIDEyOCwgNzcsIDQ4LCA1MiwgNTAsIDEyOCwgNzcsIDQ4LCA1MiwgNDksIAorICAgIDEyOCwgNzcsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNTIsIDQ4LCAxMjgsIDc3LCA0OCwgNTEsIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNTEsIDU2LCAxMjgsIDc3LCA0OCwgNTEsIDU1LCAxMjgsIDc3LCA0OCwgNTEsIDU0LCAxMjgsIDc3LCA0OCwgCisgICAgNTEsIDUzLCAxMjgsIDc3LCA0OCwgNTEsIDUyLCAxMjgsIDc3LCA0OCwgNTEsIDUxLCA2NiwgMTI4LCA3NywgNDgsIDUxLCAKKyAgICA1MSwgNjUsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDEyOCwgNzcsIDQ4LCA1MSwgNTAsIDEyOCwgNzcsIDQ4LCA1MSwgNDksIAorICAgIDY1LCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCAxMjgsIDc3LCA0OCwgNTEsIDQ4LCAxMjgsIDc3LCA0OCwgNTAsIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1NiwgMTI4LCA3NywgNDgsIDUwLCA1NSwgMTI4LCA3NywgCisgICAgNDgsIDUwLCA1NCwgMTI4LCA3NywgNDgsIDUwLCA1MywgMTI4LCA3NywgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MCwgNTIsIDEyOCwgNzcsIDQ4LCA1MCwgNTEsIDEyOCwgNzcsIDQ4LCA1MCwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIAorICAgIDUwLCAxMjgsIDc3LCA0OCwgNTAsIDQ5LCAxMjgsIDc3LCA0OCwgNTAsIDQ4LCAxMjgsIDc3LCA0OCwgNDksIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNDksIDU2LCAxMjgsIDc3LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1NSwgMTI4LCA3NywgCisgICAgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDEyOCwgNzcsIDQ4LCA0OSwgNTMsIDY1LCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDUzLCAxMjgsIDc3LCA0OCwgNDksIDUyLCAxMjgsIDc3LCA0OCwgNDksIDUxLCAxMjgsIDc3LCA0OCwgNDksIAorICAgIDUwLCA3MiwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzEsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcwLCAxMjgsIDc3LCA0OCwgCisgICAgNDksIDUwLCA2OSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjgsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY3LCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDUwLCA2NiwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDEyOCwgNzcsIAorICAgIDQ4LCA0OSwgNDksIDEyOCwgNzcsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDQ4LCAxMjgsIDc3LCA0OCwgCisgICAgNDgsIDU3LCAxMjgsIDc3LCA0OCwgNDgsIDU2LCAxMjgsIDc3LCA0OCwgNDgsIDU1LCAxMjgsIDc3LCA0OCwgNDgsIDU0LCAKKyAgICAxMjgsIDc3LCA0OCwgNDgsIDUzLCAxMjgsIDc3LCA0OCwgNDgsIDUyLCAxMjgsIDc3LCA0OCwgNDgsIDUxLCA2NSwgMTI4LCAKKyAgICA3NywgNDgsIDQ4LCA1MSwgMTI4LCA3NywgNDgsIDQ4LCA1MCwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgNjYsIDEyOCwgNzcsIAorICAgIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCAxMjgsIDc2LCAyMTgsIDc2LCA4OSwgODksIDEyOCwgNzYsIAorICAgIDg5LCA4OCwgMTI4LCA3NiwgODksIDg0LCAxMjgsIDc2LCA4OSwgODIsIDg4LCAxMjgsIDc2LCA4OSwgODIsIDEyOCwgNzYsIAorICAgIDg5LCA4MCwgMTI4LCA3NiwgODksIDY4LCA3MywgNjUsIDIwNiwgNzYsIDg5LCA2NywgNzMsIDY1LCAyMDYsIDc2LCA4OCwgCisgICAgMTI4LCA3NiwgODcsIDc5LCA3OSwgMTI4LCA3NiwgODcsIDc5LCAxMjgsIDc2LCA4NywgNzMsIDczLCAxMjgsIDc2LCA4NywgCisgICAgNzMsIDEyOCwgNzYsIDg3LCA2OSwgMTI4LCA3NiwgODcsIDY1LCA2NSwgMTI4LCA3NiwgODcsIDY1LCAxMjgsIDc2LCA4NSwgCisgICAgODgsIDEyOCwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgODUsIDg0LCAxMjgsIDc2LCA4NSwgODIsIDg4LCAxMjgsIDc2LCA4NSwgCisgICAgODAsIDEyOCwgNzYsIDg1LCA3OSwgODgsIDEyOCwgNzYsIDg1LCA3OSwgODQsIDEyOCwgNzYsIDg1LCA3OSwgODAsIDEyOCwgCisgICAgNzYsIDg1LCA3OSwgMTI4LCA3NiwgODUsIDc4LCA3MSwgODMsIDczLCAxMjgsIDc2LCA4NSwgNzgsIDY1LCA4NCwgMTk3LCAKKyAgICA3NiwgODUsIDIwNSwgNzYsIDg1LCA3NiwgMTI4LCA3NiwgODUsIDczLCA4MywgMTI4LCA3NiwgODUsIDcyLCA4NSwgODIsIAorICAgIDEyOCwgNzYsIDg1LCA3MiwgMTI4LCA3NiwgODUsIDcxLCA3MSwgNjUsIDcxLCA2OSwgMTI4LCA3NiwgODUsIDcxLCA2NSwgCisgICAgNzYsIDEyOCwgNzYsIDg1LCA3MSwgNjUsIDIwNCwgNzYsIDg1LCA2OSwgMTI4LCA3NiwgODUsIDY1LCA2OSwgODAsIDEyOCwgCisgICAgNzYsIDg1LCA1MSwgMTI4LCA3NiwgODUsIDUwLCAxMjgsIDc2LCA4NSwgMTc4LCA3NiwgODIsIDc5LCAxMjgsIDc2LCA4MiwgCisgICAgNzcsIDEyOCwgNzYsIDgyLCA3MywgMTI4LCA3NiwgODIsIDY5LCAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDY5LCAKKyAgICAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDE5NywgNzYsIDc5LCA4OCwgMTI4LCA3NiwgNzksIDg3LCA2OSwgODIsIAorICAgIDY5LCAxOTYsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDc2LCA3OSwgODcsIDQ1LCAxODUsIDc2LCA3OSwgODYsIDE5NywgNzYsIAorICAgIDc5LCA4NSwgODIsIDY5LCAxMjgsIDc2LCA3OSwgODUsIDY4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCA4MiwgMTI4LCA3NiwgCisgICAgNzksIDg1LCA2OCwgNzYsIDIxNywgNzYsIDc5LCA4NCwgODUsIDgzLCAxMjgsIDc2LCA3OSwgODQsIDEyOCwgNzYsIDc5LCAKKyAgICA4MiwgODIsIDg5LCAxMjgsIDc2LCA3OSwgODIsIDgyLCA2NSwgNzMsIDc4LCA2OSwgMTI4LCA3NiwgNzksIDgxLCAxMjgsIAorICAgIDc2LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgODQsIDEyOCwgNzYsIDc5LCA3OSwgODAsIDY5LCAxOTYsIDc2LCA3OSwgCisgICAgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDIwOCwgNzYsIDc5LCA3OSwgNzgsIDEyOCwgNzYsIDc5LCA3OSwgMjAzLCA3NiwgCisgICAgNzksIDc5LCAxMjgsIDc2LCA3OSwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCAKKyAgICA3OSwgNzgsIDcxLCAxOTMsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDg5LCA4MiwgCisgICAgMTI4LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4MywgNzksIDIwNCwgNzYsIDc5LCAKKyAgICA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzksIDgzLCAyMTEsIDc2LCA3OSwgNzgsIDcxLCA0NSwgCisgICAgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIAorICAgIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCAKKyAgICA2NSwgNzgsIDY3LCA3MiwgNDUsIDY1LCAyMTAsIDc2LCA3OSwgNzcsIDc3LCA2NSwgNjksIDEyOCwgNzYsIDc5LCA3NywgCisgICAgMTI4LCA3NiwgNzksIDIwNSwgNzYsIDc5LCA3NiwgNzYsIDczLCA4MCwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzYsIDc2LCAKKyAgICAxMjgsIDc2LCA3OSwgNzEsIDIxMCwgNzYsIDc5LCA3MSwgNzksIDg0LCA4OSwgODAsIDE5NywgNzYsIDc5LCA3MSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDIwNSwgNzYsIDc5LCA3MSwgMTI4LCA3NiwgNzksIDY4LCA2OSwgODMsIDg0LCA3OSwgNzgsIDY5LCAKKyAgICAxMjgsIDc2LCA3OSwgNjcsIDc5LCA3NywgNzksIDg0LCA3MywgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDc1LCA3MywgNzgsIAorICAgIDcxLCA0NSwgODMsIDcyLCA3MywgNzAsIDIxMiwgNzYsIDc5LCA2NywgMjAzLCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA4NiwgCisgICAgNjksIDEyOCwgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzYsIDc5LCA2NSwgMTI4LCA3NiwgNzgsIDEyOCwgCisgICAgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCAKKyAgICA3NiwgNzYsIDg1LCAxMjgsIDc2LCA3NiwgNzYsIDc5LCA3OSwgMTI4LCA3NiwgNzYsIDc2LCA3OSwgMTI4LCA3NiwgNzYsIAorICAgIDc2LCA3MywgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNjksIDY5LCAxMjgsIDc2LCA3NiwgCisgICAgNzYsIDY5LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgNzMsIDEyOCwgNzYsIDc2LCAKKyAgICA3NiwgNjUsIDY1LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCAxMjgsIDc2LCA3NiwgNzYsIDEyOCwgNzYsIDc0LCA4NSwgNjgsIAorICAgIDczLCA3NCwgNjksIDEyOCwgNzYsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDEyOCwgNzYsIDczLCA4OCwgMTI4LCA3NiwgNzMsIAorICAgIDg3LCA3OCwgMTI4LCA3NiwgNzMsIDg2LCA4MiwgMTk3LCA3NiwgNzMsIDg0LCA4NCwgNzYsIDE5NywgNzYsIDczLCA4NCwgCisgICAgODQsIDY5LCAyMTAsIDc2LCA3MywgODQsIDgyLCAxOTMsIDc2LCA3MywgODQsIDEyOCwgNzYsIDczLCA4MywgMjEzLCA3NiwgCisgICAgNzMsIDgyLCAxOTMsIDc2LCA3MywgODEsIDg1LCA3MywgMTk2LCA3NiwgNzMsIDgxLCAxMjgsIDc2LCA3MywgODAsIDgzLCAKKyAgICA4NCwgNzMsIDY3LCA3NSwgMTI4LCA3NiwgNzMsIDc4LCA3NSwgNzMsIDc4LCAxOTksIDc2LCA3MywgNzgsIDIwMywgNzYsIAorICAgIDczLCA3OCwgNzEsIDgzLCA2NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgODMsIDEyOCwgNzYsIDczLCA3OCwgNjksIDIxMSwgCisgICAgNzYsIDczLCA3OCwgNjksIDQ1LCA1NywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCAKKyAgICA0NSwgNTEsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIAorICAgIDc2LCA3MywgNzcsIDc3LCA4NSwgNTAsIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDc2LCA3MywgNzcsIDc3LCAKKyAgICAyMTMsIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIDE5NiwgNzYsIDczLCA3NywgNzMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgNzYsIDczLCA3NywgNzMsIDg0LCAxMjgsIDc2LCA3MywgNzcsIDY5LCAxMjgsIDc2LCA3MywgNzcsIDY2LCAyMTMsIAorICAgIDc2LCA3MywgNzYsIDg5LCAxMjgsIDc2LCA3MywgNzYsIDczLCA4NCwgNzIsIDEyOCwgNzYsIDczLCA3NiwgMTI4LCA3NiwgCisgICAgNzMsIDcxLCA3MiwgODQsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzIsIDc5LCA4NSwgODMsIAorICAgIDY5LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgNzMsIDcwLCA2OSwgMTI4LCA3NiwgNzMsIDY5LCA4OCwgCisgICAgMTI4LCA3NiwgNzMsIDY5LCA4NCwgMTI4LCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3NiwgNzMsIDY5LCA2OSwgMTI4LCA3NiwgCisgICAgNzMsIDY5LCAxMjgsIDc2LCA3MywgNjgsIDEyOCwgNzYsIDczLCA2NiwgODIsIDY1LCAxMjgsIDc2LCA3MywgNjYsIDY5LCAKKyAgICA4MiwgODQsIDg5LCAxMjgsIDc2LCA3MywgNjUsIDY2LCA3MywgNzYsIDczLCA4NCwgMjE3LCA3NiwgNzIsIDczLCA3MywgCisgICAgMTI4LCA3NiwgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDc2LCA3MiwgNjUsIDE5OSwgNzYsIDcyLCAKKyAgICA2NSwgNjUsIDEyOCwgNzYsIDcyLCAxMjgsIDc2LCA2OSwgOTAsIDcyLCAxMjgsIDc2LCA2OSwgODgsIDEyOCwgNzYsIDY5LCAKKyAgICA4NiwgNjksIDIwNCwgNzYsIDY5LCA4NSwgNzcsIDEyOCwgNzYsIDY5LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NiwgNjksIAorICAgIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc2LCA2OSwgODUsIDEyOCwgNzYsIDY5LCAyMTMsIDc2LCA2OSwgODQsIDg0LCA2OSwgCisgICAgODIsIDgzLCAxMjgsIDc2LCA2OSwgODQsIDg0LCA2OSwgODIsIDEyOCwgNzYsIDY5LCAyMTIsIDc2LCA2OSwgODMsIDgzLCAKKyAgICA2OSwgMjEwLCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIAorICAgIDcyLCA2NSwgMjA2LCA3NiwgNjksIDgwLCAxMjgsIDc2LCA2OSwgNzksIDgwLCA2NSwgODIsIDY4LCAxMjgsIDc2LCA2OSwgCisgICAgNzksIDEyOCwgNzYsIDY5LCA3OCwgODQsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NiwgNjksIDc4LCA3MywgODMsIAorICAgIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCA3MiwgNjksIDc4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCAKKyAgICAyMDAsIDc2LCA2OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgNjksIDc4LCA3MSwgMTkzLCA3NiwgNjksIDc3LCA3OSwgNzgsIAorICAgIDEyOCwgNzYsIDY5LCA3NywgNzksIDczLCAxMjgsIDc2LCA2OSwgNzYsIDY5LCA4NCwgMTI4LCA3NiwgNjksIDc2LCA2OSwgCisgICAgMjEyLCA3NiwgNjksIDIwMywgNzYsIDY5LCA3MywgNzcsIDc3LCA2NSwgMTI4LCA3NiwgNjksIDczLCA3NywgNzcsIDE5MywgCisgICAgNzYsIDY5LCA3MSwgODMsIDEyOCwgNzYsIDY5LCA3MSwgNzMsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDcxLCA2OSwgODQsIDc5LCAKKyAgICAyMTEsIDc2LCA2OSwgNzEsIDEyOCwgNzYsIDY5LCA3MCwgODQsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA3NiwgNjksIAorICAgIDcwLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDgyLCA3MywgNzEsIDcyLCAyMTIsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDg0LCAKKyAgICA2OSwgMjA1LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzIsIAorICAgIDY1LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA3NiwgCisgICAgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIAorICAgIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgNzYsIDY5LCA3MCwgODQsIDEyOCwgCisgICAgNzYsIDY5LCA2OSwgODIsIDY1LCA2OSwgODcsIDY1LCAxMjgsIDc2LCA2OSwgNjksIDc1LCAxMjgsIDc2LCA2OSwgNjksIDY5LCAKKyAgICA2OSwgMTI4LCA3NiwgNjksIDY4LCA3MSwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIAorICAgIDc2LCA2OSwgNjUsIDcwLCAxMjgsIDc2LCA2OSwgNjUsIDE5OCwgNzYsIDY5LCA2NSwgNjgsIDczLCA3OCwgMTk5LCA3NiwgCisgICAgNjksIDY1LCA2OCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDE5NiwgNzYsIDY4LCA2NSwgNzgsIDEyOCwgNzYsIDY4LCAKKyAgICA1MCwgMTI4LCA3NiwgNjcsIDIwMSwgNzYsIDY3LCAxOTcsIDc2LCA2NSwgOTAsIDIxNywgNzYsIDY1LCA4OSwgNjUsIDc4LCAKKyAgICA3OCwgNjUsIDEyOCwgNzYsIDY1LCA4OCwgMTI4LCA3NiwgNjUsIDg3LCAxMjgsIDc2LCA2NSwgMjE1LCA3NiwgNjUsIDg1LCAKKyAgICA3NiwgNjUsIDEyOCwgNzYsIDY1LCA4NSwgNzUsIDY1LCAyMTgsIDc2LCA2NSwgODQsIDczLCA3OCwgNjUsIDg0LCAxOTcsIAorICAgIDc2LCA2NSwgODQsIDczLCA3NSwgMTI4LCA3NiwgNjUsIDg0LCA2OSwgODIsIDY1LCAyMDQsIDc2LCA2NSwgODQsIDE5NywgCisgICAgNzYsIDY1LCA4MywgMjEyLCA3NiwgNjUsIDgyLCA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAKKyAgICAyMTAsIDc2LCA2NSwgODIsIDcxLCA2OSwgMTI4LCA3NiwgNjUsIDgyLCA3MSwgMTk3LCA3NiwgNjUsIDgxLCAxMjgsIDc2LCAKKyAgICA2NSwgODAsIDY1LCA4MSwgMTI4LCA3NiwgNjUsIDgwLCAxMjgsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIAorICAgIDc2LCA2NSwgNzgsIDcxLCA4NSwgNjUsIDcxLCAxOTcsIDc2LCA2NSwgNzgsIDY5LCA4MywgMTI4LCA3NiwgNjUsIDc3LCA2OSwgCisgICAgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCA2OCwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgMTk2LCA3NiwgNjUsIDc3LCAKKyAgICA2OSwgMTI4LCA3NiwgNjUsIDc3LCAxOTcsIDc2LCA2NSwgNzcsIDY4LCA2NSwgMTI4LCA3NiwgNjUsIDc3LCA2OCwgMTI4LCAKKyAgICA3NiwgNjUsIDc3LCA2NiwgNjgsIDE5MywgNzYsIDY1LCA3NywgNjUsIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc2LCAxMjgsIAorICAgIDc2LCA2NSwgMjA0LCA3NiwgNjUsIDc1LCA3NSwgNzIsIDY1LCA3OCwgNzEsIDg5LCA2NSwgNzksIDEyOCwgNzYsIDY1LCA3NCwgCisgICAgNjUsIDc4LCA4OSwgNjUsIDc2LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCAyMDEsIDc2LCA2NSwgNzIsIDgzLCA3MiwgODUsIAorICAgIDEyOCwgNzYsIDY1LCA3MiwgMTI4LCA3NiwgNjUsIDcxLCA4NSwgODMsIDEyOCwgNzYsIDY1LCA3MSwgMjEzLCA3NiwgNjUsIAorICAgIDcxLCA2NSwgODIsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDIxMCwgNzYsIDY1LCA3MSwgNjUsIDY2LCAxMjgsIDc2LCA2NSwgCisgICAgNzEsIDY1LCAxOTQsIDc2LCA2NSwgNjksIDg2LCAxMjgsIDc2LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2OCwgMjE3LCA3NiwgCisgICAgNjUsIDY3LCA3NSwgMTI4LCA3NiwgNjUsIDY3LCA2NSwgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODUsIDgyLCA3MywgNzgsIDcxLCAKKyAgICAxMjgsIDc2LCA2NSwgNjYsIDc5LCA4MiwgMTI4LCA3NiwgNjUsIDY2LCA3MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDc2LCA2NSwgNjYsIDczLCA2NSwgMjA0LCA3NiwgNjUsIDY2LCA2NSwgODQsIDEyOCwgNzYsIDY1LCA2NSwgCisgICAgNzgsIDY1LCA2OSwgMTI4LCA3NiwgNjUsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIDY1LCA3NywgODUsIDEyOCwgNzYsIDY1LCAKKyAgICA2NSwgNzcsIDEyOCwgNzYsIDY1LCA2NSwgNzMsIDEyOCwgNzYsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDc2LCA0OCwgNDgsIAorICAgIDUwLCA2NSwgMTI4LCA3NiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzYsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgCisgICAgNzUsIDg5LCA4NSwgODIsIDczLCA3MywgMTI4LCA3NSwgODksIDg1LCAxMjgsIDc1LCA4OSwgNzksIDEyOCwgNzUsIDg5LCAKKyAgICA3NiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg5LCA3MywgMTI4LCA3NSwgODksIDY5LCAxMjgsIDc1LCA4OSwgNjUsIAorICAgIDg0LCA3MiwgNzksIDIxMSwgNzUsIDg5LCA2NSwgNjUsIDEyOCwgNzUsIDg5LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA3MywgCisgICAgMTI4LCA3NSwgODgsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA4NywgNjksIDEyOCwgNzUsIDg4LCA4NywgNjUsIDY1LCAKKyAgICAxMjgsIDc1LCA4OCwgODcsIDY1LCAxMjgsIDc1LCA4OCwgODUsIDEyOCwgNzUsIDg4LCA3OSwgMTI4LCA3NSwgODgsIDczLCAKKyAgICAxMjgsIDc1LCA4OCwgNjksIDY5LCAxMjgsIDc1LCA4OCwgNjksIDEyOCwgNzUsIDg4LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCAKKyAgICA2NSwgMTI4LCA3NSwgODcsIDg1LCA1MSwgNDksIDU2LCAxMjgsIDc1LCA4NywgNzksIDc5LCAxMjgsIDc1LCA4NywgNzksIAorICAgIDEyOCwgNzUsIDg3LCA3MywgNzMsIDEyOCwgNzUsIDg3LCA3MywgMTI4LCA3NSwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODcsIAorICAgIDY5LCAxMjgsIDc1LCA4NywgNjUsIDg5LCAxMjgsIDc1LCA4NywgNjUsIDY5LCA4NCwgMTI4LCA3NSwgODcsIDY1LCA2NSwgCisgICAgMTI4LCA3NSwgODYsIDY1LCAxMjgsIDc1LCA4NiwgMTI4LCA3NSwgODUsIDg4LCAxMjgsIDc1LCA4NSwgODUsIDcyLCAxMjgsIAorICAgIDc1LCA4NSwgODQsIDEyOCwgNzUsIDg1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4NSwgODMsIDcyLCA4NSwgNTAsIDEyOCwgCisgICAgNzUsIDg1LCA4MiwgODgsIDEyOCwgNzUsIDg1LCA4MiwgODUsIDkwLCA2OSwgNzMsIDgyLCA3OSwgMTI4LCA3NSwgODUsIDgyLCAKKyAgICA4NCwgMTI4LCA3NSwgODUsIDgyLCA3OSwgNzksIDc4LCA2OSwgMTI4LCA3NSwgODUsIDgyLCAxMjgsIDc1LCA4NSwgMjEwLCAKKyAgICA3NSwgODUsIDgxLCAxMjgsIDc1LCA4NSwgNzksIDg4LCAxMjgsIDc1LCA4NSwgNzksIDgwLCAxMjgsIDc1LCA4NSwgNzksIAorICAgIDIwOCwgNzUsIDg1LCA3OSwgNzcsIDEyOCwgNzUsIDg1LCA3OSwgMTI4LCA3NSwgODUsIDc4LCA3MSwgMTI4LCA3NSwgODUsIAorICAgIDc4LCA2OCwgNjgsIDY1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NSwgODUsIDc2LCAxMjgsIDc1LCA4NSwgMjA0LCA3NSwgCisgICAgODUsIDY5LCA4NCwgMTI4LCA3NSwgODUsIDU1LCAxMjgsIDc1LCA4NSwgNTIsIDEyOCwgNzUsIDg1LCAxODAsIDc1LCA4NSwgCisgICAgNTEsIDEyOCwgNzUsIDg1LCAxNzksIDc1LCA4NCwgMTI4LCA3NSwgODMsIDgzLCA4NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgCisgICAgODUsIDEyOCwgNzUsIDgzLCA4MywgNzksIDc5LCAxMjgsIDc1LCA4MywgODMsIDc5LCAxMjgsIDc1LCA4MywgODMsIDczLCAKKyAgICA3MywgMTI4LCA3NSwgODMsIDgzLCA3MywgMTI4LCA3NSwgODMsIDgzLCA2OSwgNjksIDEyOCwgNzUsIDgzLCA4MywgNjksIAorICAgIDEyOCwgNzUsIDgzLCA4MywgNjUsIDg1LCAxMjgsIDc1LCA4MywgODMsIDY1LCA3MywgMTI4LCA3NSwgODMsIDgzLCA2NSwgCisgICAgNjUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDEyOCwgNzUsIDgzLCA4MywgMTI4LCA3NSwgODMsIDczLCAxMjgsIDc1LCA4MiwgCisgICAgNjksIDc3LCA2NSwgODMsIDg0LCA3MywgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgODksIDgwLCA3OSwgODIsIAorICAgIDgyLCA3OSwgNzksIDc4LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCAKKyAgICA3NywgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIAorICAgIDc3LCAxOTMsIDc1LCA4MCwgODUsIDEyOCwgNzUsIDgwLCA3OSwgODEsIDEyOCwgNzUsIDgwLCA3OSwgNzksIDEyOCwgNzUsIAorICAgIDgwLCA3OSwgMTI4LCA3NSwgODAsIDczLCAxMjgsIDc1LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA3NSwgODAsIDY5LCA2OSwgCisgICAgMTI4LCA3NSwgODAsIDY5LCAxMjgsIDc1LCA4MCwgNjUsIDgyLCA2NSwgODEsIDEyOCwgNzUsIDgwLCA2NSwgNzgsIDEyOCwgCisgICAgNzUsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDg4LCAxMjgsIDc1LCA3OSwgODYsIDg1LCA4NSwgMTI4LCA3NSwgNzksIDg0LCAKKyAgICA3OSwgMTI4LCA3NSwgNzksIDgyLCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA3OSwgODIsIDc5LCA3OCwgNzMsIDgzLCAxMjgsIAorICAgIDc1LCA3OSwgODIsIDY5LCA2NSwgMjA2LCA3NSwgNzksIDgyLCA2NSwgNzgsIDczLCAxOTUsIDc1LCA3OSwgODEsIDc4LCA2OCwgCisgICAgNzksIDc4LCAxMjgsIDc1LCA3OSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDgwLCAxMjgsIDc1LCA3OSwgNzksIDgwLCAKKyAgICA3OSwgMTI4LCA3NSwgNzksIDc5LCA3NywgODUsIDg1LCA4NCwgMTI4LCA3NSwgNzksIDc5LCAxMjgsIDc1LCA3OSwgNzgsIAorICAgIDg0LCA2OSwgODYsIDc3LCA2NSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgMTkzLCA3NSwgNzksIDc3LCAKKyAgICAyMDEsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDY1LCAxMjgsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDE5MywgNzUsIAorICAgIDc5LCA3NywgNjYsIDIxMywgNzUsIDc5LCA3NSwgNzksIDEyOCwgNzUsIDc5LCA3NSwgMTI4LCA3NSwgNzksIDIwMywgNzUsIAorICAgIDc5LCA3MywgMTI4LCA3NSwgNzksIDIwMSwgNzUsIDc5LCA3MiwgMTI4LCA3NSwgNzksIDcxLCA3MiwgNzksIDc3LCAxMjgsIAorICAgIDc1LCA3OSwgNjksIDg0LCAxMjgsIDc1LCA3OSwgNjUsIDc2LCA2NSwgMTI4LCA3NSwgNzksIDY1LCAxMjgsIDc1LCA3OCwgCisgICAgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCAyMTIsIDc1LCA3OCwgNzMsIDcwLCA2OSwgMTI4LCAKKyAgICA3NSwgNzgsIDczLCA3MCwgMTk3LCA3NSwgNzcsIDEyOCwgNzUsIDIwNSwgNzUsIDc2LCA3MywgODQsIDc5LCA3OCwgMTI4LCAKKyAgICA3NSwgNzYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgMTkzLCA3NSwgNzYsIDY1LCAxMjgsIAorICAgIDc1LCA3NiwgMTI4LCA3NSwgNzUsIDg1LCAxMjgsIDc1LCA3NSwgNzksIDEyOCwgNzUsIDc1LCA3MywgMTI4LCA3NSwgNzUsIAorICAgIDY5LCA2OSwgMTI4LCA3NSwgNzUsIDY5LCAxMjgsIDc1LCA3NSwgNjUsIDEyOCwgNzUsIDc1LCAxMjgsIDc1LCA3NCwgNjksIAorICAgIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzUsIDczLCA4OSwgCisgICAgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3NSwgNzMsIAorICAgIDg5LCA2OSwgNzksIDc1LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgCisgICAgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzUsIDczLCAKKyAgICA4OSwgNjksIDc5LCA3NSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgCisgICAgMjAzLCA3NSwgNzMsIDg4LCAxMjgsIDc1LCA3MywgODQsIDEyOCwgNzUsIDczLCA4MywgODMsIDczLCA3OCwgMTk5LCA3NSwgCisgICAgNzMsIDgzLCA4MywgMTI4LCA3NSwgNzMsIDgzLCAyMTEsIDc1LCA3MywgODMsIDczLCA3NywgNTMsIDEyOCwgNzUsIDczLCAKKyAgICA4MywgNzMsIDc3LCAxODEsIDc1LCA3MywgODMsIDcyLCAxMjgsIDc1LCA3MywgODMsIDY1LCA3NiwgMTI4LCA3NSwgNzMsIAorICAgIDgyLCA3OSwgODcsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCAKKyAgICA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgCisgICAgMTI4LCA3NSwgNzMsIDgyLCA3MSwgNzIsIDczLCAyMTgsIDc1LCA3MywgODEsIDEyOCwgNzUsIDczLCA4MCwgMTI4LCA3NSwgCisgICAgNzMsIDIwOCwgNzUsIDczLCA3OCwgODMsIDcyLCA3MywgODAsIDEyOCwgNzUsIDczLCA3OCwgNjgsIDY5LCA4MiwgNzEsIDY1LCAKKyAgICA4MiwgODQsIDY5LCA3OCwgMTI4LCA3NSwgNzMsIDc3LCA3OSwgNzgsIDc5LCAxMjgsIDc1LCA3MywgNzMsIDEyOCwgNzUsIAorICAgIDczLCA3MiwgMTI4LCA3NSwgNzMsIDY5LCA4OCwgMTI4LCA3NSwgNzMsIDY5LCA4MCwgMTI4LCA3NSwgNzMsIDY5LCA2OSwgCisgICAgNzcsIDEyOCwgNzUsIDczLCA2OSwgMTI4LCA3NSwgNzMsIDY4LCAxMjgsIDc1LCA3MywgMTk2LCA3NSwgNzMsIDY3LCA3NSwgCisgICAgMTI4LCA3NSwgNzIsIDkwLCAxMjgsIDc1LCA3MiwgODcsIDY1LCA3MywgMTI4LCA3NSwgNzIsIDg1LCA2OSwgNzgsIDQ1LCAKKyAgICA3NiwgODUsIDE5NywgNzUsIDcyLCA4NSwgNjksIDIwNiwgNzUsIDcyLCA4NSwgNjgsIDY1LCA3NywgMTI4LCA3NSwgNzIsIAorICAgIDg1LCA2NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgODUsIDEyOCwgNzUsIDcyLCA3OSwgMjEyLCA3NSwgNzIsIDc5LCA3OCwgCisgICAgMTI4LCA3NSwgNzIsIDc5LCA3NywgODUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDEyOCwgNzUsIDcyLCAyMDcsIDc1LCA3MiwgCisgICAgNzcsIDIxMywgNzUsIDcyLCA3MywgODQsIDEyOCwgNzUsIDcyLCA3MywgNzgsIDg5LCA2NSwgMTI4LCA3NSwgNzIsIDczLCAKKyAgICA2OSwgODUsIDc1LCAyMDAsIDc1LCA3MiwgNzMsIDEyOCwgNzUsIDcyLCA3MiwgNzksIDEyOCwgNzUsIDcyLCA3MiwgNjUsIAorICAgIDEyOCwgNzUsIDcyLCA2OSwgODQsIDcyLCAxMjgsIDc1LCA3MiwgNjksIDczLCAxMjgsIDc1LCA3MiwgNjksIDY5LCAxMjgsIAorICAgIDc1LCA3MiwgNjksIDEyOCwgNzUsIDcyLCA2NSwgODIsIDc5LCA4MywgNzIsIDg0LCA3MiwgMjAxLCA3NSwgNzIsIDY1LCA4MiwgCisgICAgMTI4LCA3NSwgNzIsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIDcyLCA2NSwgNzgsIDE5OSwgNzUsIDcyLCA2NSwgNzgsIDY4LCAKKyAgICAxOTMsIDc1LCA3MiwgNjUsIDc4LCAxMjgsIDc1LCA3MiwgNjUsIDc3LCA4NCwgMjAxLCA3NSwgNzIsIDY1LCA3NSwgNjUsIAorICAgIDgzLCA4MywgNzMsIDY1LCAyMDYsIDc1LCA3MiwgNjUsIDczLCAxMjgsIDc1LCA3MiwgNjUsIDcyLCAxMjgsIDc1LCA3MiwgCisgICAgNjUsIDIwMCwgNzUsIDcyLCA2NSwgNjUsIDEyOCwgNzUsIDcxLCAxMjgsIDc1LCA2OSwgODksIDY3LCA2NSwgODAsIDEyOCwgCisgICAgNzUsIDY5LCA4OSwgNjcsIDY1LCAyMDgsIDc1LCA2OSwgODksIDY2LCA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3NSwgNjksIDg4LCAKKyAgICAxMjgsIDc1LCA2OSwgODUsIDg5LCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIAorICAgIDgwLCAxMjgsIDc1LCA2OSwgODUsIDgzLCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIDgwLCA4NSwgODEsIDEyOCwgCisgICAgNzUsIDY5LCA4NSwgNzksIDIxMiwgNzUsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY5LCA4NSwgNzUsIDY5LCA4NSwgODQsIDc4LCAKKyAgICA2OCwgNjUsIDEyOCwgNzUsIDY5LCA4NSwgNzUsIDY1LCA4MSwgMTI4LCA3NSwgNjksIDg1LCA2NSwgNjksIDg0LCA3NywgNjksIAorICAgIDg1LCA3OCwgMTI4LCA3NSwgNjksIDg1LCA2NSwgNjksIDgyLCA3MywgMTI4LCA3NSwgNjksIDg0LCA4NCwgMjAxLCA3NSwgCisgICAgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzUsIDY5LCA4MiwgNjksIDg0LCAxMjgsIDc1LCA2OSwgNzksIDg3LCAxMjgsIDc1LCAKKyAgICA2OSwgNzgsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCAxOTMsIAorICAgIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDE5MywgNzUsIDY5LCA3OCwgNjUsIDg0LCAxMjgsIDc1LCA2OSwgNzgsIDEyOCwgCisgICAgNzUsIDY5LCAyMDYsIDc1LCA2OSwgNzcsIDgwLCA4NSwgNzYsIDEyOCwgNzUsIDY5LCA3NywgODAsIDg1LCAyMDQsIDc1LCAKKyAgICA2OSwgNzcsIDgwLCA3NiwgNzMsIDEyOCwgNzUsIDY5LCA3NywgODAsIDc2LCAyMDEsIDc1LCA2OSwgNzcsIDgwLCA3MiwgODIsIAorICAgIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NywgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NiwgODYsIDczLCAKKyAgICAyMDYsIDc1LCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA3NSwgNjksIDcyLCA2OSwgMjAwLCA3NSwgNjksIDcyLCAxMjgsIDc1LCAKKyAgICA2OSwgNzAsIDg1LCA3NiwgNjUsIDEyOCwgNzUsIDY5LCA2OSwgODMsIDg1LCAxMjgsIDc1LCA2OSwgNjksIDgwLCA3MywgNzgsIAorICAgIDE5OSwgNzUsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2NywgNjUsIDc2LCAxMjgsIDc1LCA2NiwgMTI4LCA3NSwgNjUsIAorICAgIDkwLCA2NSwgNzUsIDIwMCwgNzUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4OSwgNjUsIDIwMCwgCisgICAgNzUsIDY1LCA4OCwgMTI4LCA3NSwgNjUsIDg3LCA3MywgMTI4LCA3NSwgNjUsIDg2LCA4OSwgNzUsIDY1LCAxMjgsIDc1LCAKKyAgICA2NSwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCAyMDYsIDc1LCA2NSwgODUsIDEyOCwgNzUsIDY1LCA4NCwgNzksIAorICAgIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDczLCA4MywgODQsIDczLCAxMjgsIDc1LCA2NSwgODQsIDcyLCA2NSwgNzUsIDE5MywgCisgICAgNzUsIDY1LCA4NCwgNjUsIDg2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNjUsIDg0LCA2NSwgODYsIDE5MywgNzUsIDY1LCAKKyAgICA4NCwgNjUsIDc1LCA2NSwgNzgsIDY1LCA0NSwgNzIsIDczLCA4MiwgNjUsIDcxLCA2NSwgNzgsIDE5MywgNzUsIDY1LCA4MywgCisgICAgODIsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCAyMDYsIDc1LCA2NSwgODMsIDgyLCAKKyAgICA2NSwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgMTkzLCA3NSwgNjUsIDgzLCA3NSwgNjUsIDc2LCAxMjgsIDc1LCA2NSwgODMsIAorICAgIDc1LCA2NSwgMjA0LCA3NSwgNjUsIDgzLCA3MiwgNzcsIDczLCA4MiwgMjAxLCA3NSwgNjUsIDgyLCA4MywgNzIsIDY1LCA3OCwgCisgICAgNjUsIDEyOCwgNzUsIDY1LCA4MiwgNzksIDgyLCA3MywgNzMsIDEyOCwgNzUsIDY1LCA4MiwgMjA3LCA3NSwgNjUsIDgyLCAKKyAgICA2OSwgMjA2LCA3NSwgNjUsIDgyLCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIDgyLCA2NSwgNzgsIDEyOCwgNzUsIAorICAgIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKKyAgICA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgCisgICAgNjksIDc5LCA4NSwgNzgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIAorICAgIDg1LCA3OCwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2NSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDgwLCA4MCwgCisgICAgMTkzLCA3NSwgNjUsIDgwLCA3OSwgMTI4LCA3NSwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgNzYsIDEyOCwgCisgICAgNzUsIDY1LCA4MCwgNjUsIDEyOCwgNzUsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCA3NSwgNjUsIDc4LCA3MSwgMTI4LCAKKyAgICA3NSwgNjUsIDc4LCAxOTksIDc1LCA2NSwgNzgsIDY1LCA3NSwgNzksIDEyOCwgNzUsIDY1LCA3NywgNTIsIDEyOCwgNzUsIAorICAgIDY1LCA3NywgNTAsIDEyOCwgNzUsIDY1LCA3NywgMTI4LCA3NSwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgNjUsIDc1LCA2NSwgCisgICAgNjYsIDY1LCA4NCwgMTI4LCA3NSwgNjUsIDc1LCAxMjgsIDc1LCA2NSwgMjAzLCA3NSwgNjUsIDczLCA4NCwgNzIsIDIwMSwgCisgICAgNzUsIDY1LCA3MywgODIsIDczLCAxMjgsIDc1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCAyMDEsIDc1LCA2NSwgNzAsIDY1LCAKKyAgICAxMjgsIDc1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCAxOTgsIDc1LCA2NSwgNjgsIDUzLCAxMjgsIDc1LCA2NSwgNjgsIDE4MSwgCisgICAgNzUsIDY1LCA2OCwgNTIsIDEyOCwgNzUsIDY1LCA2OCwgNTEsIDEyOCwgNzUsIDY1LCA2OCwgMTc5LCA3NSwgNjUsIDY4LCAKKyAgICA1MCwgMTI4LCA3NSwgNjUsIDY4LCAxMjgsIDc1LCA2NSwgNjYsIDE5MywgNzUsIDY1LCA2NiwgMTI4LCA3NSwgNjUsIDY1LCAKKyAgICA3MywgMTI4LCA3NSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCA1MCwgMTI4LCAKKyAgICA3NSwgNjUsIDE3OCwgNzUsIDQ4LCA0OCwgNTYsIDEyOCwgNzUsIDQ4LCA0OCwgNTUsIDEyOCwgNzUsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzUsIDQ4LCA0OCwgNTMsIDEyOCwgNzUsIDQ4LCA0OCwgNTIsIDEyOCwgNzUsIDQ4LCA0OCwgNTEsIDEyOCwgNzUsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgNzUsIDQ4LCA0OCwgNDksIDEyOCwgNzQsIDg3LCA2NSwgMTI4LCA3NCwgODUsIDg1LCAxMjgsIAorICAgIDc0LCA4NSwgODQsIDEyOCwgNzQsIDg1LCA4MywgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNzQsIDg1LCA4MCwgNzMsIDg0LCA2OSwgODIsIDEyOCwgNzQsIDg1LCA3OSwgODQsIDEyOCwgNzQsIDg1LCA3OSwgODAsIAorICAgIDEyOCwgNzQsIDg1LCA3OCwgNzksIDEyOCwgNzQsIDg1LCA3OCwgNjksIDEyOCwgNzQsIDg1LCA3NiwgODksIDEyOCwgNzQsIAorICAgIDg1LCA2OSwgODUsIDczLCAxMjgsIDc0LCA4NSwgNjgsIDg1LCA3NiwgMTI4LCA3NCwgODUsIDY4LCA3MSwgNjksIDEyOCwgCisgICAgNzQsIDg1LCA2OCwgNjksIDc5LCA0NSwgODMsIDgwLCA2NSwgNzgsIDczLCA4MywgMjAwLCA3NCwgNzksIDg5LCA3OSwgODUsIAorICAgIDIxMSwgNzQsIDc5LCA4OSwgMTI4LCA3NCwgNzksIDg2LCA2OSwgMTI4LCA3NCwgNzksIDIxMiwgNzQsIDc5LCA3OCwgNzEsIAorICAgIDEyOCwgNzQsIDc5LCA3OCwgMTkzLCA3NCwgNzksIDc1LCA2OSwgODIsIDEyOCwgNzQsIDc5LCA3MywgNzgsIDY5LCA2OCwgCisgICAgMTI4LCA3NCwgNzksIDczLCA3OCwgMTI4LCA3NCwgNzksIDY1LCAxMjgsIDc0LCA3NCwgODksIDg4LCAxMjgsIDc0LCA3NCwgCisgICAgODksIDg0LCAxMjgsIDc0LCA3NCwgODksIDgwLCAxMjgsIDc0LCA3NCwgODksIDEyOCwgNzQsIDc0LCA4NSwgODgsIDEyOCwgCisgICAgNzQsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc0LCA3NCwgODUsIDgyLCAxMjgsIDc0LCAKKyAgICA3NCwgODUsIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODAsIDEyOCwgNzQsIAorICAgIDc0LCA4NSwgNzksIDEyOCwgNzQsIDc0LCA4NSwgMTI4LCA3NCwgNzQsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDc5LCA4NCwgCisgICAgMTI4LCA3NCwgNzQsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDc5LCAxMjgsIDc0LCA3NCwgNzMsIDg4LCAxMjgsIDc0LCA3NCwgCisgICAgNzMsIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3NCwgNzQsIDczLCAKKyAgICA2OSwgODQsIDEyOCwgNzQsIDc0LCA3MywgNjksIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCAxMjgsIDc0LCA3NCwgNzMsIAorICAgIDEyOCwgNzQsIDc0LCA2OSwgNjksIDEyOCwgNzQsIDc0LCA2OSwgMTI4LCA3NCwgNzQsIDY1LCAxMjgsIDc0LCA3MywgNzYsIAorICAgIDEyOCwgNzQsIDczLCA3MywgMTI4LCA3NCwgNzMsIDcyLCA4NiwgNjUsIDc3LCA4NSwgNzYsIDczLCA4OSwgNjUsIDEyOCwgCisgICAgNzQsIDczLCA2NSwgMTI4LCA3NCwgNzIsIDc5LCAxMjgsIDc0LCA3MiwgNjksIDcyLCAxMjgsIDc0LCA3MiwgNjUsIDc4LCAKKyAgICAxMjgsIDc0LCA3MiwgNjUsIDc3LCAxMjgsIDc0LCA3MiwgNjUsIDY1LCAxMjgsIDc0LCA3MiwgNjUsIDEyOCwgNzQsIDY5LCAKKyAgICA4NSwgMTI4LCA3NCwgNjksIDgyLCA4NSwgODMsIDY1LCA3NiwgNjksIDc3LCAxMjgsIDc0LCA2OSwgODIsIDY1LCAyMDYsIAorICAgIDc0LCA2OSwgODIsIDY1LCAxMjgsIDc0LCA2OSwgODIsIDEyOCwgNzQsIDY5LCA3MiwgMTI4LCA3NCwgNjksIDIwMCwgNzQsIAorICAgIDY5LCA3MSwgNzksIDcxLCA2NSwgNzgsIDEyOCwgNzQsIDY5LCA2OSwgNzcsIDEyOCwgNzQsIDY5LCA2NSwgNzgsIDgzLCAKKyAgICAxMjgsIDc0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc0LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgCisgICAgMTI4LCA3NCwgNjUsIDg1LCAxMjgsIDc0LCA2NSwgODIsIDEyOCwgNzQsIDY1LCA4MCwgNjUsIDc4LCA2OSwgODMsIDE5NywgCisgICAgNzQsIDY1LCA4MCwgNjUsIDc4LCAxMjgsIDc0LCA2NSwgNzgsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDc0LCA2NSwgNzYsIDc2LCAKKyAgICA2NSwgNzQsIDY1LCA3NiwgNjUsIDc2LCA3OSwgODUsIDcyLCA3OSwgODUsIDEyOCwgNzQsIDY1LCA3MywgMTI4LCA3NCwgNjUsIAorICAgIDcyLCAxMjgsIDc0LCA2NSwgNjgsIDY5LCAxMjgsIDc0LCA2NSwgNjcsIDc1LCA0NSwgNzksIDQ1LCA3NiwgNjUsIDc4LCA4NCwgCisgICAgNjksIDgyLCA3OCwgMTI4LCA3NCwgNjUsIDY3LCAyMDMsIDc0LCA0NSwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCAKKyAgICA2OSwgMTk2LCAyMDIsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDY1LCAxMjgsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIAorICAgIDE5MywgNzMsIDkwLCA3MiwgNjksIDEyOCwgNzMsIDkwLCA2NSwgNzUsIDY1LCA4OSwgMTkzLCA3MywgODksIDY5LCA3NSwgCisgICAgMTI4LCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4NSwgNzQsIDY1LCAxMjgsIDczLCA4NSwgMTI4LCA3MywgCisgICAgODQsIDIxMSwgNzMsIDg0LCA2OSwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA4NCwgNjksIDc3LCAxMjgsIDczLCAKKyAgICA4MywgODMsIDcyLCA2NSwgODIsIDEyOCwgNzMsIDgzLCA3OSwgNzgsIDEyOCwgNzMsIDgzLCA3OSwgMjA2LCA3MywgODMsIAorICAgIDc5LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCA3MywgODMsIDY5LCA3OCwgNDUsIDczLCA4MywgNjksIDc4LCAxMjgsIDczLCA4MywgCisgICAgNjUsIDc1LCA3MywgMTkzLCA3MywgODMsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODksIDY1LCAKKyAgICA3OCwgNzgsIDY1LCAxMjgsIDczLCA4MiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDgyLCA3OSwgNzgsIAorICAgIDQ1LCA2NywgNzksIDgwLCA4MCwgNjksIDIxMCwgNzMsIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc5LCA4NCwgNzMsIDcwLCA3MywgCisgICAgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCA3MywgNzksIDg0LCA2NSwgMTI4LCA3MywgNzksIDg0LCAKKyAgICAxOTMsIDczLCA3OSwgODIsIDEyOCwgNzMsIDc5LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNzMsIDc4LCA4NiwgNzMsIAorICAgIDgzLCA3MywgNjYsIDc2LCAxOTcsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCA2OCwgMTI4LCA3MywgNzgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA2OSwgMTk2LCA3MywgNzgsIDg2LCA2OSwgODIsIDgzLCAxOTcsIDczLCA3OCwgODQsIDgyLCA3OSwgNjgsIDg1LCAKKyAgICA2NywgNjksIDgyLCAxMjgsIDczLCA3OCwgODQsIDczLCAxMjgsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDg5LCA3NiwgNzYsIAorICAgIDY1LCA2NiwgNzMsIDE5NSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgCisgICAgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIAorICAgIDY3LCA4NCwgNzMsIDc4LCAxOTksIDczLCA3OCwgODQsIDY5LCA4MiwgODIsIDc5LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3MywgCisgICAgNzgsIDg0LCA2OSwgODIsIDgwLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIAorICAgIDc5LCA2NywgNzUsIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDczLCA3OCwgCisgICAgODQsIDY5LCA4MiwgNzYsIDY1LCA2NywgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3MywgNzksIDIxMCwgNzMsIDc4LCAKKyAgICA4NCwgNjksIDgyLCA2OSwgODMsIDIxMiwgNzMsIDc4LCA4NCwgNjksIDgyLCA2NywgNjUsIDc2LCA2NSwgODQsIDY5LCAxMjgsIAorICAgIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCAKKyAgICA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgNzYsIDEyOCwgNzMsIDc4LCA4NCwgNjksIAorICAgIDcxLCA4MiwgNjUsIDIwNCwgNzMsIDc4LCA4MywgODUsIDc2LCA2NSwgMjEwLCA3MywgNzgsIDgzLCA4NCwgODIsIDg1LCA3NywgCisgICAgNjksIDc4LCA4NCwgNjUsIDIwNCwgNzMsIDc4LCA4MywgNzMsIDY4LCA2OSwgMTI4LCA3MywgNzgsIDgzLCA2OSwgODIsIDg0LCAKKyAgICA3MywgNzksIDIwNiwgNzMsIDc4LCA4MywgNjksIDY3LCA4NCwgMTI4LCA3MywgNzgsIDgzLCA2NywgODIsIDczLCA4MCwgODQsIAorICAgIDczLCA3OSwgNzgsIDY1LCAyMDQsIDczLCA3OCwgODAsIDg1LCAyMTIsIDczLCA3OCwgNzgsIDc5LCA2NywgNjksIDc4LCA2NywgCisgICAgNjksIDEyOCwgNzMsIDc4LCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDgyLCAxMjgsIDczLCA3OCwgNzgsIDY5LCAKKyAgICAyMTAsIDczLCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3MywgNzgsIDcxLCA4NSwgMTI4LCA3MywgNzgsIDczLCAxMjgsIDczLCAKKyAgICA3OCwgNzIsIDczLCA2NiwgNzMsIDIxMiwgNzMsIDc4LCA3MiwgNjksIDgyLCA2OSwgNzgsIDIxMiwgNzMsIDc4LCA3MSwgODcsIAorICAgIDY1LCA5MCwgMTI4LCA3MywgNzgsIDcwLCA3OSwgODIsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDcwLCA3NiwgCisgICAgODUsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDczLCA3OCwgNzAsIDczLCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA3MywgNzgsIDcwLCAKKyAgICA3MywgNzgsIDczLCA4NCwgMjE3LCA3MywgNzgsIDY4LCA4NSwgODMsIDg0LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3OCwgNjgsIAorICAgIDczLCA4MiwgNjksIDY3LCAyMTIsIDczLCA3OCwgNjgsIDczLCA2NywgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzMsIDc4LCA2OCwgCisgICAgNzMsIDY3LCA2NSwgODQsIDc5LCAyMTAsIDczLCA3OCwgNjgsIDczLCAxOTUsIDczLCA3OCwgNjgsIDczLCA2NSwgMjA2LCAKKyAgICA3MywgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzMsIDc4LCA2OCwgNjksIDgwLCA2OSwgNzgsIDY4LCA2OSwgNzgsIDIxMiwgNzMsIAorICAgIDc4LCA2NywgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDIxMSwgCisgICAgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDczLCA3OCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIAorICAgIDE5NywgNzMsIDc4LCA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA2NywgNzYsIDg1LCA2OCwgNzMsIDc4LCAKKyAgICAxOTksIDczLCA3OCwgNjcsIDcyLCAxMjgsIDczLCA3OCwgNjYsIDc5LCAyMTYsIDczLCA3OCwgNjUsIDgwLCAxMjgsIDczLCAKKyAgICA3OCwgNDUsIDY1LCA3NiwgNjUsIDcwLCAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3NywgODAsIAorICAgIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAKKyAgICAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgNzMsIDc3LCA3OCwgMTI4LCA3MywgNzcsIAorICAgIDczLCA4MywgNjksIDc5LCAyMTEsIDczLCA3NywgNzMsIDc4LCA1MSwgMTI4LCA3MywgNzcsIDczLCA3OCwgMTI4LCA3MywgCisgICAgNzcsIDczLCAyMDYsIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCA4MiwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIDcwLCAKKyAgICA4NCwgNzIsIDc5LCA4MiwgNjUsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIAorICAgIDY4LCA3MywgNjUsIDgyLCA3MSwgNzksIDc4LCAxMjgsIDczLCA3NywgNjUsIDcxLCAxOTcsIDczLCA3NiwgODUsIDg5LCA2NSwgCisgICAgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzYsIDg1LCA4OSwgMTI4LCA3MywgNzYsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDczLCA3NiwgODUsIDg0LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDczLCA3NiwgNzMsIAorICAgIDc3LCA3NywgODUsIDUxLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCAKKyAgICAyMTMsIDczLCA3NiwgNTAsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDczLCA3NSwgNjUsIDgyLCAxOTMsIDczLCAKKyAgICA3NCwgMTI4LCA3MywgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzEsIDczLCAxMjgsIDczLCA3MSwgMjAxLCAKKyAgICA3MywgNzEsIDcxLCA4NywgODMsIDEyOCwgNzMsIDcwLCA3MywgNzgsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIAorICAgIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAKKyAgICA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgCisgICAgNzUsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDczLCA2OSwgODUsIDc4LCAKKyAgICA3MSwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgNzIsIDczLCA2OSwgCisgICAgODUsIDgwLCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCAKKyAgICA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgCisgICAgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIAorICAgIDY3LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgMTk5LCA3MywgNjgsIDc2LCA2OSwgMTI4LCA3MywgNjgsIDczLCA3NywgCisgICAgMTI4LCA3MywgNjgsIDczLCAyMDUsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTcsIDQ4LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU2LCA2OCwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjcsIDY1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA2OCwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTUsIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU1LCA1NCwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDUxLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCA0OSwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA0OSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDgsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDcwLCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA2OSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDUwLCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTQsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDUzLCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA1MywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDUzLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA1MywgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTAsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDUwLCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA1MCwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNzAsIDU2LCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY4LCA2OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUzLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTYsIDcwLCAKKyAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUzLCA2NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTIsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDUxLCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUzLCA1MSwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDY4LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDQ5LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUyLCA2OSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDU2LCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA1MCwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNzAsIDczLCA2NywgNjUsIDg0LCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3MywgNjcsIDcyLCA3OSwgODUsIAorICAgIDEyOCwgNzMsIDY3LCA3MiwgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIDczLCA3NywgNjUsIDg0LCA3OSwgODMsIDEyOCwgCisgICAgNzMsIDY3LCA3MiwgNjUsIDY4LCA3MywgNzgsIDEyOCwgNzMsIDY3LCA2OSwgNzYsIDY1LCA3OCwgNjgsIDczLCA2NywgNDUsIAorICAgIDg5LCA4MiwgMTI4LCA3MywgNjYsIDczLCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3MywgNjUsIDg1LCA2OCwgNjUsIDEyOCwgCisgICAgNzMsIDQ4LCA0OSwgNTMsIDEyOCwgNzMsIDQ4LCA0OSwgNTIsIDEyOCwgNzMsIDQ4LCA0OSwgNTEsIDEyOCwgNzMsIDQ4LCAKKyAgICA0OSwgNTAsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDczLCA0OCwgNDksIDQ5LCAxMjgsIDczLCA0OCwgNDksIAorICAgIDQ4LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OCwgMTI4LCA3MywgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgCisgICAgNTcsIDEyOCwgNzMsIDQ4LCA0OCwgNTYsIDEyOCwgNzMsIDQ4LCA0OCwgNTUsIDEyOCwgNzMsIDQ4LCA0OCwgNTQsIDEyOCwgCisgICAgNzMsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDczLCA0OCwgNDgsIDUzLCAxMjgsIDczLCA0OCwgNDgsIDUyLCAxMjgsIDczLCAKKyAgICA0OCwgNDgsIDUxLCAxMjgsIDczLCA0OCwgNDgsIDUwLCAxMjgsIDczLCA0OCwgNDgsIDQ5LCAxMjgsIDczLCA0NSwgODksIAorICAgIDg1LCAxMjgsIDczLCA0NSwgODksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgCisgICAgMTI4LCA3MywgNDUsIDg5LCA2NSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDg5LCAKKyAgICA2NSwgMTI4LCA3MywgNDUsIDc5LCA0NSwgNzMsIDEyOCwgNzMsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDY5LCA4NSwgMTI4LCAKKyAgICA3MywgNDUsIDY2LCA2OSwgNjUsIDc3LCAxMjgsIDczLCA0NSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDczLCA0NSwgNjUsIAorICAgIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDcxLCAxMjgsIDcyLCA5MCwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgOTAsIDgwLCAxMjgsIAorICAgIDcyLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA4NywgNzEsIDEyOCwgNzIsIDkwLCA4NywgMTI4LCA3MiwgOTAsIDg0LCAxMjgsIAorICAgIDcyLCA5MCwgNzEsIDEyOCwgNzIsIDg5LCA4MywgODQsIDY5LCA4MiwgNjksIDgzLCA3MywgMjExLCA3MiwgODksIDgwLCA3OSwgCisgICAgNjgsIDczLCA2NSwgODMsIDg0LCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDQ1LCA3NywgNzMsIDc4LCA4NSwgODMsIDEyOCwgNzIsIDg5LCA4MCwgCisgICAgNzIsIDY5LCA3OCwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDIwNiwgNzIsIDg4LCA4NywgNzEsIDEyOCwgNzIsIDg4LCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODAsIDEyOCwgNzIsIAorICAgIDg4LCA4NSwgNzksIDEyOCwgNzIsIDg4LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA3OSwgCisgICAgODAsIDEyOCwgNzIsIDg4LCA3OSwgMTI4LCA3MiwgODgsIDczLCA4OCwgMTI4LCA3MiwgODgsIDczLCA4NCwgMTI4LCA3MiwgCisgICAgODgsIDczLCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg0LCAxMjgsIDcyLCAKKyAgICA4OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgMTI4LCA3MiwgODgsIDczLCAxMjgsIDcyLCA4OCwgNjksIAorICAgIDg4LCAxMjgsIDcyLCA4OCwgNjksIDgwLCAxMjgsIDcyLCA4OCwgNjksIDEyOCwgNzIsIDg4LCA2NSwgODgsIDEyOCwgNzIsIAorICAgIDg4LCA2NSwgODQsIDEyOCwgNzIsIDg4LCA2NSwgODAsIDEyOCwgNzIsIDg4LCA2NSwgMTI4LCA3MiwgODcsIDg1LCAxMjgsIAorICAgIDcyLCA4NywgNjUsIDczLCA4MiwgMTI4LCA3MiwgODYsIDEyOCwgNzIsIDg1LCA4MywgNzIsIDY5LCAxOTYsIDcyLCA4NSwgCisgICAgODIsIDY1LCA3OCwgMTI4LCA3MiwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCA2OCwgMTI4LCAKKyAgICA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCAxOTYsIDcyLCA4NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgNjUsIDc4LCAxMjgsIAorICAgIDcyLCA4NSwgNzcsIDY1LCAyMDYsIDcyLCA4NSwgNzYsIDUwLCAxMjgsIDcyLCA4NSwgNzMsIDczLCA4NCwgNzksIDEyOCwgCisgICAgNzIsIDg1LCA2NiwgNTAsIDEyOCwgNzIsIDg1LCA2NiwgMTc4LCA3MiwgODUsIDY2LCAxMjgsIDcyLCA4NSwgNjUsIDgyLCAKKyAgICA2NSwgNjgsIDY4LCA3OSwgMTI4LCA3MiwgODQsIDgzLCAxMjgsIDcyLCA4NCwgNzQsIDEyOCwgNzIsIDgyLCA4OSwgODYsIAorICAgIDc4LCA3MywgMTkzLCA3MiwgODAsIDg3LCA3MSwgMTI4LCA3MiwgODAsIDY1LCAxMjgsIDcyLCA4MCwgMTI4LCA3MiwgNzksIAorICAgIDg1LCA4MywgMTk3LCA3MiwgNzksIDg1LCA4MiwgNzEsIDc2LCA2NSwgODMsIDgzLCAxMjgsIDcyLCA3OSwgODUsIDgyLCA3MSwgCisgICAgNzYsIDY1LCA4MywgMjExLCA3MiwgNzksIDg1LCA4MiwgMTI4LCA3MiwgNzksIDg1LCAyMTAsIDcyLCA3OSwgODQsIDY5LCAKKyAgICA3NiwgMTI4LCA3MiwgNzksIDg0LCA2NSwgMTI4LCA3MiwgNzksIDgzLCA4MCwgNzMsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgODMsIDY5LCAxMjgsIDcyLCA3OSwgODIsIDgzLCAxOTcsIDcyLCA3OSwgODIsIDc4LCA4MywgMTI4LCA3MiwgCisgICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNzYsIDIxNywgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTQsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTQsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIAorICAgIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCAKKyAgICA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgCisgICAgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTIsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTEsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTEsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIAorICAgIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCAKKyAgICA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgCisgICAgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDgsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNDksIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNDksIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIAorICAgIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCAKKyAgICA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgCisgICAgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTEsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgMTkzLCA3MiwgNzksIDc5LCA4MiwgODUsIDEyOCwgNzIsIDc5LCA3OSwgODAsIDEyOCwgNzIsIDc5LCA3OSwgNzgsIDEyOCwgCisgICAgNzIsIDc5LCA3OSwgNzUsIDY5LCAxOTYsIDcyLCA3OSwgNzgsIDY5LCA4OSwgNjYsIDY5LCA2OSwgMTI4LCA3MiwgNzksIDc4LCAKKyAgICA2OSwgMjE3LCA3MiwgNzksIDc3LCA3OSwgODQsIDcyLCA2OSwgODQsIDczLCA2NywgMTI4LCA3MiwgNzksIDc3LCA3OSwgODQsIAorICAgIDcyLCA2OSwgODQsIDczLCAxOTUsIDcyLCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA3OSwgNzYsIDY4LCA3MywgNzgsIDE5OSwgCisgICAgNzIsIDc5LCA3NiwgNjUsIDc3LCAxMjgsIDcyLCA3OSwgNzYsIDY1LCAyMDUsIDcyLCA3OSwgNzUsIDY1LCAxMjgsIDcyLCAKKyAgICA3OSwgNzMsIDEyOCwgNzIsIDc5LCA2NywgNzIsIDc5LCAxMjgsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDcyLCA3OCwgODUsIAorICAgIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDg1LCA3OSwgMTI4LCA3MiwgNzgsIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDc5LCA4NCwgCisgICAgMTI4LCA3MiwgNzgsIDc5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA4OCwgMTI4LCA3MiwgNzgsIDczLCA4NCwgMTI4LCA3MiwgCisgICAgNzgsIDczLCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc4LCA3MywgNjksIDg0LCAxMjgsIDcyLCAKKyAgICA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgMTI4LCA3MiwgNzgsIDczLCAxMjgsIDcyLCA3OCwgNjksIAorICAgIDg4LCAxMjgsIDcyLCA3OCwgNjksIDgwLCAxMjgsIDcyLCA3OCwgNjksIDEyOCwgNzIsIDc4LCA2NSwgODgsIDEyOCwgNzIsIAorICAgIDc4LCA2NSwgODQsIDEyOCwgNzIsIDc4LCA2NSwgODAsIDEyOCwgNzIsIDc4LCA2NSwgMTI4LCA3MiwgNzcsIDg5LCA4OCwgCisgICAgMTI4LCA3MiwgNzcsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc3LCA4OSwgODIsIDEyOCwgNzIsIDc3LCA4OSwgODAsIDEyOCwgCisgICAgNzIsIDc3LCA4OSwgMTI4LCA3MiwgNzcsIDg1LCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4NCwgMTI4LCA3MiwgNzcsIDg1LCAKKyAgICA4MiwgODgsIDEyOCwgNzIsIDc3LCA4NSwgODIsIDEyOCwgNzIsIDc3LCA4NSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDcyLCA3NywgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgMTI4LCA3MiwgNzcsIDg1LCAxMjgsIAorICAgIDcyLCA3NywgNzksIDg4LCAxMjgsIDcyLCA3NywgNzksIDg0LCAxMjgsIDcyLCA3NywgNzksIDgwLCAxMjgsIDcyLCA3NywgCisgICAgNzksIDEyOCwgNzIsIDc3LCA3MywgODgsIDEyOCwgNzIsIDc3LCA3MywgODQsIDEyOCwgNzIsIDc3LCA3MywgODAsIDEyOCwgCisgICAgNzIsIDc3LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgMTI4LCAKKyAgICA3MiwgNzcsIDczLCAxMjgsIDcyLCA3NywgNjksIDEyOCwgNzIsIDc3LCA2NSwgODgsIDEyOCwgNzIsIDc3LCA2NSwgODQsIAorICAgIDEyOCwgNzIsIDc3LCA2NSwgODAsIDEyOCwgNzIsIDc3LCA2NSwgMTI4LCA3MiwgNzYsIDg5LCA4OCwgMTI4LCA3MiwgNzYsIAorICAgIDg5LCA4NCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4OSwgODIsIDEyOCwgNzIsIDc2LCA4OSwgCisgICAgODAsIDEyOCwgNzIsIDc2LCA4OSwgMTI4LCA3MiwgNzYsIDg1LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4NCwgMTI4LCA3MiwgCisgICAgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODIsIDEyOCwgNzIsIDc2LCA4NSwgODAsIDEyOCwgNzIsIDc2LCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDcyLCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgMTI4LCA3MiwgNzYsIAorICAgIDg1LCAxMjgsIDcyLCA3NiwgNzksIDg4LCAxMjgsIDcyLCA3NiwgNzksIDgwLCAxMjgsIDcyLCA3NiwgNzksIDEyOCwgNzIsIAorICAgIDc2LCA3MywgODgsIDEyOCwgNzIsIDc2LCA3MywgODQsIDEyOCwgNzIsIDc2LCA3MywgODAsIDEyOCwgNzIsIDc2LCA3MywgCisgICAgNjksIDg4LCAxMjgsIDcyLCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgMTI4LCA3MiwgNzYsIDczLCAKKyAgICAxMjgsIDcyLCA3NiwgNjksIDg4LCAxMjgsIDcyLCA3NiwgNjksIDgwLCAxMjgsIDcyLCA3NiwgNjksIDEyOCwgNzIsIDc2LCAKKyAgICA2NSwgODgsIDEyOCwgNzIsIDc2LCA2NSwgODQsIDEyOCwgNzIsIDc2LCA2NSwgODAsIDEyOCwgNzIsIDc2LCA2NSwgMTI4LCAKKyAgICA3MiwgNzUsIDEyOCwgNzIsIDczLCA5MCwgNjYsIDEyOCwgNzIsIDczLCA4MywgODQsIDc5LCA4MiwgNzMsIDE5NSwgNzIsIAorICAgIDczLCA4MiwgNzMsIDgxLCAxMjgsIDcyLCA3MywgNzEsIDcyLCA0NSwgODMsIDgwLCA2OSwgNjksIDE5NiwgNzIsIDczLCA3MSwgCisgICAgNzIsIDQ1LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgNjgsIDQ1LCAxODUsIDcyLCA3MywgNzEsIDcyLCA0NSwgNzIsIAorICAgIDY5LCA2OSwgNzYsIDY5LCAxOTYsIDcyLCA3MywgNjksIDg4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgzLCA3MywgCisgICAgNzksIDgzLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNzIsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzgsIDczLCA2OSwgCisgICAgODUsIDc4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgMjAwLCA3MiwgNzMsIDY5LCA4MiwgNzksIDcxLCA3NiwgODksIDgwLCA3MiwgNzMsIDE5NSwgNzIsIDczLCA2OSwgCisgICAgMTI4LCA3MiwgNzMsIDY4LCA3MywgNzgsIDE5OSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIDcyLCA3MywgNjgsIDY5LCAKKyAgICAxMjgsIDcyLCA3MywgNjYsIDczLCA4MywgNjcsIDg1LCA4MywgMTI4LCA3MiwgNzIsIDg3LCA2NSwgMTI4LCA3MiwgNzIsIAorICAgIDg1LCAxMjgsIDcyLCA3MiwgNzMsIDEyOCwgNzIsIDcyLCA2OSwgNjksIDEyOCwgNzIsIDcyLCA2OSwgMTI4LCA3MiwgNzIsIAorICAgIDY1LCA2NSwgMTI4LCA3MiwgNzEsIDEyOCwgNzIsIDY5LCA4OCwgNzMsIDcwLCA3OSwgODIsIDIwNSwgNzIsIDY5LCA4OCwgCisgICAgNjUsIDcxLCA4MiwgNjUsIDIwNSwgNzIsIDY5LCA4OCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDg0LCAKKyAgICA4NSwgMTI4LCA3MiwgNjksIDgyLCA4NSwgMTI4LCA3MiwgNjksIDgyLCA3NywgNzMsIDg0LCA3MywgNjUsIDIwNiwgNzIsIAorICAgIDY5LCA4MiwgNzcsIDczLCA3OSwgNzgsIDczLCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNjksIDgzLCAxMjgsIDcyLCA2OSwgCisgICAgODIsIDY5LCAxMjgsIDcyLCA2OSwgODIsIDY2LCAxMjgsIDcyLCA2OSwgODIsIDY1LCA2OSwgODUsIDIwNSwgNzIsIDY5LCAKKyAgICA3OCwgNzEsIDEyOCwgNzIsIDY5LCA3OCwgMTk5LCA3MiwgNjksIDc3LCA4MCwgMTI4LCA3MiwgNjksIDc2LCA3NywgNjksIAorICAgIDg0LCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgMjEyLCA3MiwgNjksIDc2LCAyMDUsIDcyLCA2OSwgNzYsIDczLCA2NywgCisgICAgNzksIDgwLCA4NCwgNjksIDgyLCAxMjgsIDcyLCA2OSwgNzUsIDg1LCA4NCwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIDY5LCAKKyAgICA3MywgODMsIDY5LCA3MywgMTI4LCA3MiwgNjksIDY1LCA4NiwgODksIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgNzYsIAorICAgIDIxNywgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDIwNiwgNzIsIDY5LCA2NSwgCisgICAgODIsIDg0LCA4MywgMTI4LCA3MiwgNjksIDY1LCA4MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgNzIsIDY5LCAKKyAgICA2NSwgODIsIDg0LCAxMjgsIDcyLCA2OSwgNjUsIDgyLCAyMTIsIDcyLCA2OSwgNjUsIDgyLCA0NSwgNzgsIDc5LCA0NSwgNjksIAorICAgIDg2LCA3MywgMjA0LCA3MiwgNjksIDY1LCA2OCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMTI4LCA3MiwgNjksIDY1LCA2OCwgCisgICAgODMsIDg0LCA3OSwgNzgsIDE5NywgNzIsIDY5LCA2NSwgNjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3MiwgNjksIDY1LCAKKyAgICA2OCwgNzMsIDc4LCA3MSwgMTI4LCA3MiwgNjYsIDY1LCA4MywgNjUsIDQ1LCA2OSwgODMsIDY1LCA4MywgMTkzLCA3MiwgNjYsIAorICAgIDY1LCA4MywgMTkzLCA3MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MiwgNjUsIDg2LCA2OSwgMTI4LCA3MiwgCisgICAgNjUsIDg1LCA4MCwgODQsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzIsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDcyLCAKKyAgICA2NSwgODQsIDY5LCAxMjgsIDcyLCA2NSwgODQsIDY3LCA3MiwgNzMsIDc4LCAxOTksIDcyLCA2NSwgODQsIDY1LCAxOTgsIAorICAgIDcyLCA2NSwgODMsIDY5LCAyMTAsIDcyLCA2NSwgODMsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgCisgICAgNzksIDc4LCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgNzksIDIwNiwgNzIsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDY3LCAKKyAgICAxMjgsIDcyLCA2NSwgODIsIDc1LCA3NiwgNjksIDY1LCAyMDYsIDcyLCA2NSwgODIsIDY4LCA3OCwgNjksIDgzLCA4MywgCisgICAgMTI4LCA3MiwgNjUsIDgyLCAxOTYsIDcyLCA2NSwgODAsIDgwLCAyMTcsIDcyLCA2NSwgNzgsIDg1LCA3OCwgNzksIDIwNywgCisgICAgNzIsIDY1LCA3OCwgNzEsIDkwLCA3MiwgNzksIDIxMywgNzIsIDY1LCA3OCwgNjgsIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAKKyAgICAyMTEsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDEyOCwgNzIsIAorICAgIDY1LCA3OCwgNjgsIDY2LCA2NSwgNzEsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDEyOCwgNzIsIDY1LCA3OCwgNDUsIDY1LCA3NSwgCisgICAgNjUsIDg0LCAxMjgsIDcyLCA2NSwgNzcsIDkwLCA2NSwgMTI4LCA3MiwgNjUsIDc3LCA4MywgODQsIDY5LCAyMTAsIDcyLCAKKyAgICA2NSwgNzcsIDc3LCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NywgNzcsIDY5LCAyMTAsIDcyLCA2NSwgNzcsIDY2LCA4NSwgODIsIAorICAgIDcxLCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NiwgODEsIDY1LCAxMjgsIDcyLCA2NSwgNzYsIDc5LCAxMjgsIDcyLCA2NSwgCisgICAgNzYsIDcwLCA0NSwgNjcsIDczLCA4MiwgNjcsIDc2LCAxOTcsIDcyLCA2NSwgNzYsIDcwLCAxMjgsIDcyLCA2NSwgNzYsIDY2LCAKKyAgICA2OSwgODIsIDY4LCAxMjgsIDcyLCA2NSwgNzYsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgNzMsIDg0LCA4NSwgCisgICAgMTI4LCA3MiwgNjUsIDczLCA4MiwgNjcsIDg1LCA4NCwgMTI4LCA3MiwgNjUsIDczLCA4MiwgMTI4LCA3MiwgNjUsIDcxLCAKKyAgICA3NiwgNjUsIDIxOCwgNzIsIDY1LCA3MSwgNzYsIDEyOCwgNzIsIDY1LCA3MCwgODUsIDc1LCA3MiwgNjUsIDEyOCwgNzIsIAorICAgIDY1LCA3MCwgODUsIDc1LCA3MiwgMTI4LCA3MiwgNjUsIDY5LCA3MSwgMjA0LCA3MiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgCisgICAgNzIsIDY1LCA2NSwgNzcsIDEyOCwgNzIsIDY1LCAxOTMsIDcyLCA2NSwgNDUsIDcyLCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCAKKyAgICA1NiwgMTI4LCA3MiwgNDgsIDQ4LCA1NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzIsIDQ4LCA0OCwgNTMsIDEyOCwgNzIsIDQ4LCA0OCwgNTIsIDEyOCwgNzIsIDQ4LCA0OCwgNTEsIDEyOCwgNzIsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgNzIsIDQ4LCA0OCwgNDksIDEyOCwgNzIsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDcxLCA4OSwgCisgICAgODUsIDEyOCwgNzEsIDg5LCA3OSwgNzgsIDEyOCwgNzEsIDg5LCA3OSwgMTI4LCA3MSwgODksIDczLCAxMjgsIDcxLCA4OSwgCisgICAgNzAsIDIxMywgNzEsIDg5LCA2OSwgNjksIDEyOCwgNzEsIDg5LCA2NSwgODMsIDEyOCwgNzEsIDg5LCA2NSwgNjUsIDEyOCwgCisgICAgNzEsIDg5LCA2NSwgMTI4LCA3MSwgODksIDEyOCwgNzEsIDg3LCA4NSwgMTI4LCA3MSwgODcsIDczLCAxMjgsIDcxLCA4NywgCisgICAgNjksIDY5LCAxMjgsIDcxLCA4NywgNjksIDEyOCwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgCisgICAgODYsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDgzLCA3MiwgMTI4LCA3MSwgODUsIDgyLCA4NSwgNzgsIDEyOCwgNzEsIDg1LCAKKyAgICA4MiwgNjUsIDc3LCA4NSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA1NSwgMTI4LCA3MSwgODUsIDc4LCA4NSwgCisgICAgMTI4LCA3MSwgODUsIDc4LCAyMTMsIDcxLCA4NSwgMjA1LCA3MSwgODUsIDc2LCAxMjgsIDcxLCA4NSwgNzMsIDg0LCA2NSwgCisgICAgODIsIDEyOCwgNzEsIDg1LCAxOTksIDcxLCA4NSwgNjksIDcyLCAxMjgsIDcxLCA4NSwgNjksIDIwMCwgNzEsIDg1LCA2OCwgCisgICAgMTI4LCA3MSwgODUsIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCA4MywgNzcsIDY1LCA3OCwgMTI4LCA3MSwgODUsIDY1LCAKKyAgICA4MiwgNjgsIDY5LCA2OCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY4LCA2OSwgMTk2LCA3MSwgODUsIAorICAgIDY1LCA4MiwgNjgsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY1LCA3OCwgMjAxLCA3MSwgODUsIDE5MywgNzEsIDg1LCAxNzgsIAorICAgIDcxLCA4NCwgNjksIDIxMCwgNzEsIDgzLCA4NSwgNzcsIDEyOCwgNzEsIDgzLCA4NSwgMjA1LCA3MSwgODIsIDIxMywgNzEsIAorICAgIDgyLCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MSwgODIsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDcxLCA4MiwgNzksIDc4LCA4NCwgCisgICAgNzIsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzEsIDgyLCA3MywgNzgsIDc4LCA3MywgNzgsIDE5OSwgNzEsIDgyLCAKKyAgICA3MywgNzcsIDY1LCA2NywgNzMsIDc4LCAxOTksIDcxLCA4MiwgNjksIDcxLCA3OSwgODIsIDczLCA2NSwgMjA2LCA3MSwgODIsIAorICAgIDY5LCA2OSwgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgCisgICAgNjksIDgyLCA0NSwgODQsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIAorICAgIDY1LCAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDIxMCwgNzEsIDgyLCA2OSwgNjUsIDIxMiwgNzEsIDgyLCA2NSwgCisgICAgODYsIDY5LCA4OSwgNjUsIDgyLCAxOTYsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIAorICAgIDEyOCwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAKKyAgICAxMjgsIDcxLCA4MiwgNjUsIDg2LCAxOTcsIDcxLCA4MiwgNjUsIDg0LCA2OSwgODIsIDEyOCwgNzEsIDgyLCA2NSwgODMsIAorICAgIDgzLCAxMjgsIDcxLCA4MiwgNjUsIDgzLCAyMTEsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNjksIDc3LCAxOTcsIDcxLCA4MiwgCisgICAgNjUsIDgwLCA2OSwgODMsIDEyOCwgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDcxLCA4MiwgNjUsIDczLCA3OCwgMTI4LCAKKyAgICA3MSwgODIsIDY1LCA2OCwgODUsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA4MiwgNjUsIDY3LCA2OSwgMTI4LCA3MSwgODIsIAorICAgIDY1LCA2NywgMTk3LCA3MSwgODAsIDY1LCAxMjgsIDcxLCA3OSwgODIsIDg0LCA3MiwgNzcsIDczLCA3NSwgNzksIDIwNiwgCisgICAgNzEsIDc5LCA4MiwgODQsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCA4NCwgNjksIDgyLCA3MywgMTI4LCA3MSwgNzksIDgyLCAKKyAgICA3MSwgNzksIDgzLCA4OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIAorICAgIDcxLCA3OSwgODIsIDcxLCA3MywgMTI4LCA3MSwgNzksIDgyLCA2NSwgMTI4LCA3MSwgNzksIDc5LCAxOTYsIDcxLCA3OSwgCisgICAgNzgsIDcxLCAxMjgsIDcxLCA3OSwgNzYsIDY4LCAxMjgsIDcxLCA3OSwgNzUsIDEyOCwgNzEsIDc5LCA3MywgNzgsIDE5OSwgCisgICAgNzEsIDc5LCA2NiwgNzYsIDczLCA3OCwgMTI4LCA3MSwgNzksIDY1LCA3NiwgMTI4LCA3MSwgNzksIDY1LCAyMDQsIDcxLCAKKyAgICA3OSwgNjUsIDEyOCwgNzEsIDc4LCA4OSwgNzMsIDgzLCAxMjgsIDcxLCA3OCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIAorICAgIDEyOCwgNzEsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MSwgNzYsIDc5LCA4NCwgODQsIDY1LCAyMDQsIDcxLCA3NiwgCisgICAgNzksIDY2LCAxOTcsIDcxLCA3NiwgNzMsIDgzLCA4MywgNjUsIDc4LCA2OCwgMjA3LCA3MSwgNzYsIDY5LCA3MywgNjcsIAorICAgIDIwMCwgNzEsIDc2LCA2NSwgNzEsIDc5LCA3NiwgNzMsIDEyOCwgNzEsIDc2LCA2NSwgMTI4LCA3MSwgNzQsIDY5LCAxMjgsIAorICAgIDcxLCA3MywgODgsIDEyOCwgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzMsIDgzLCA3MiwgMTI4LCA3MSwgNzMsIDgzLCAyMDAsIAorICAgIDcxLCA3MywgODMsIDY1LCA3NiwgMTI4LCA3MSwgNzMsIDgyLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCA3MSwgNzMsIDgyLCA3NiwgCisgICAgMTI4LCA3MSwgNzMsIDgyLCA1MSwgMTI4LCA3MSwgNzMsIDgyLCAxNzksIDcxLCA3MywgODIsIDUwLCAxMjgsIDcxLCA3MywgCisgICAgODIsIDE3OCwgNzEsIDczLCA4MCwgMTI4LCA3MSwgNzMsIDc4LCA3MywgNzMsIDEyOCwgNzEsIDczLCA3NywgNjksIDc2LCAKKyAgICAxMjgsIDcxLCA3MywgNzcsIDY5LCAyMDQsIDcxLCA3MywgNzcsIDEyOCwgNzEsIDczLCA3MSwgNjUsIDEyOCwgNzEsIDczLCAKKyAgICA2OSwgODQsIDEyOCwgNzEsIDczLCA2OCwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNjYsIDY2LCA3OSwgODUsIDIxMSwgNzEsIAorICAgIDczLCA2NiwgNjUsIDEyOCwgNzEsIDczLCA1MiwgMTI4LCA3MSwgNzMsIDE4MCwgNzEsIDcyLCA5MCwgMTI4LCA3MSwgNzIsIAorICAgIDg3LCA2NSwgMTI4LCA3MSwgNzIsIDg1LCA3OCwgNzgsIDY1LCAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgMTkzLCA3MSwgCisgICAgNzIsIDg1LCAxMjgsIDcxLCA3MiwgNzksIDg1LCAxMjgsIDcxLCA3MiwgNzksIDgzLCA4NCwgMTI4LCA3MSwgNzIsIDc5LCAKKyAgICAxMjgsIDcxLCA3MiwgNzMsIDEyOCwgNzEsIDcyLCA3MiwgNjUsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDg4LCAxMjgsIDcxLCAKKyAgICA3MiwgNjksIDg1LCA3OCwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzEsIAorICAgIDcyLCA2OSwgODUsIDcxLCA3MiwgNjksIDc4LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDgyLCA2NSwgNjksIDEyOCwgCisgICAgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NCwgMTI4LCAKKyAgICA3MSwgNzIsIDY5LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCAxMjgsIDcxLCA3MiwgMTk3LCA3MSwgNzIsIDY1LCA4OSwgNzgsIAorICAgIDEyOCwgNzEsIDcyLCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY1LCA4MCwgMTI4LCA3MSwgNzIsIDY1LCA3OCwgCisgICAgMTI4LCA3MSwgNzIsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCA3MiwgNjUsIDczLCA3OCwgODUsIDEyOCwgNzEsIDcyLCAKKyAgICA2NSwgNzMsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIDczLCAyMDYsIDcxLCA3MiwgNjUsIDY4LCAxMjgsIDcxLCA3MiwgNjUsIAorICAgIDY1LCA3NywgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDY1LCAxMjgsIDcxLCA3MSwgODcsIDczLCAxMjgsIDcxLCA3MSwgCisgICAgODcsIDY5LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDcxLCAKKyAgICA4NywgNjUsIDEyOCwgNzEsIDcxLCA4NSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgODQsIDEyOCwgNzEsIDcxLCA4NSwgODIsIAorICAgIDg4LCAxMjgsIDcxLCA3MSwgODUsIDgyLCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgCisgICAgODQsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgODUsIDc5LCAxMjgsIDcxLCA3MSwgNzksIDg4LCAKKyAgICAxMjgsIDcxLCA3MSwgNzksIDg0LCAxMjgsIDcxLCA3MSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgNzMsIDg4LCAxMjgsIDcxLCAKKyAgICA3MSwgNzMsIDg0LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzEsIAorICAgIDcxLCA3MywgNjksIDEyOCwgNzEsIDcxLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA2OSwgODQsIDEyOCwgNzEsIDcxLCA2OSwgCisgICAgODAsIDEyOCwgNzEsIDcxLCA2NSwgODgsIDEyOCwgNzEsIDcxLCA2NSwgODQsIDEyOCwgNzEsIDcxLCA2NSwgNjUsIDEyOCwgCisgICAgNzEsIDY5LCA4NCwgMTkzLCA3MSwgNjksIDgzLCA4NCwgODUsIDgyLCA2OSwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODUsIAorICAgIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg0LCA3MywgNzgsIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg0LCA3MywgMjA2LCA3MSwgCisgICAgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzEsIDY5LCA4MiwgODMsIDcyLCA2NSwgODksIDczLCA3NywgMTI4LCA3MSwgNjksIDgyLCAKKyAgICA3NywgNjUsIDIwNiwgNzEsIDY5LCA4MiwgNjksIDgzLCA3MiwgMTI4LCA3MSwgNjksIDgyLCA2OSwgODMsIDIwMCwgNzEsIAorICAgIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIDc2LCA3NiwgMjE3LCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCAKKyAgICA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3OCwgODQsIDc2LCAxOTcsIDcxLCA2OSwgNzgsIDczLCA4NCwgNzMsIDg2LCA2OSwgCisgICAgMTI4LCA3MSwgNjksIDc4LCA3MywgNzUsIDIwMSwgNzEsIDY5LCA3OCwgNjksIDgyLCA3MywgMTk1LCA3MSwgNjksIDc3LCAKKyAgICA3MywgNzgsIDczLCAxMjgsIDcxLCA2OSwgNzcsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDY5LCAyMDUsIAorICAgIDcxLCA2OSwgNjgsIDc5LCA3NiwgNjUsIDEyOCwgNzEsIDY5LCA2OCwgNjksIDEyOCwgNzEsIDY5LCA2NiwgMjA3LCA3MSwgCisgICAgNjksIDY2LCAxOTMsIDcxLCA2OSwgNjUsIDgyLCAxMjgsIDcxLCA2OSwgNjUsIDIxMCwgNzEsIDY4LCA2NSwgNzgsIDEyOCwgCisgICAgNzEsIDY3LCA3MywgNzEsIDEyOCwgNzEsIDY3LCA2NSwgMjA2LCA3MSwgNjYsIDc5LCA3OCwgMTI4LCA3MSwgNjYsIDczLCAKKyAgICA2OSwgMTk3LCA3MSwgNjYsIDY5LCA4NSwgODgsIDEyOCwgNzEsIDY2LCA2OSwgODQsIDEyOCwgNzEsIDY2LCA2NSwgODksIAorICAgIDczLCAxMjgsIDcxLCA2NiwgNjUsIDc1LCA4NSwgODIsIDg1LCA3OCwgNjksIDc4LCAxMjgsIDcxLCA2NiwgMTI4LCA3MSwgCisgICAgNjUsIDg5LCA2NSwgNzgsIDg1LCA3NSwgNzMsIDg0LCA4NCwgNjUsIDEyOCwgNzEsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNzEsIDY1LCA4OSwgMTI4LCA3MSwgNjUsIDg1LCA3OCwgODQsIDc2LCA2OSwgODQsIDEyOCwgNzEsIDY1LCA4NCwgCisgICAgNzIsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDE5OSwgNzEsIDY1LCAKKyAgICA4NCwgNjksIDEyOCwgNzEsIDY1LCA4MywgNzIsIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA4MywgNzIsIDg1LCA3OCwgNzMsIAorICAgIDEyOCwgNzEsIDY1LCA4MiwgNzksIDc4LCAxMjgsIDcxLCA2NSwgODIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcxLCA2NSwgCisgICAgODIsIDY4LCA2OSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgNTEsIDEyOCwgNzEsIDY1LCA4MCwgODAsIDY5LCAxOTYsIDcxLCAKKyAgICA2NSwgMjA4LCA3MSwgNjUsIDc4LCA3NywgNjUsIDEyOCwgNzEsIDY1LCA3OCwgNzEsIDczLCA2NSwgMTI4LCA3MSwgNjUsIAorICAgIDc4LCA2OCwgMTkzLCA3MSwgNjUsIDc4LCA1MCwgMTI4LCA3MSwgNjUsIDc4LCAxNzgsIDcxLCA2NSwgNzcsIDc3LCA2NSwgCisgICAgMTI4LCA3MSwgNjUsIDc3LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA3NywgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjksIDEyOCwgCisgICAgNzEsIDY1LCA3NywgMTk3LCA3MSwgNjUsIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCAKKyAgICA2NSwgNzcsIDY1LCAyMDQsIDcxLCA2NSwgNzEsIDEyOCwgNzEsIDY1LCA3MCwgMTI4LCA3MSwgNjUsIDE5OCwgNzEsIDY1LCAKKyAgICA2OSwgODQsIDg0LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIDY4LCA3OSwgNzYsIDEyOCwgNzEsIAorICAgIDY1LCA2OCwgMTI4LCA3MSwgNjUsIDE5NiwgNzEsIDY1LCA2NiwgNjUsIDEyOCwgNzEsIDY1LCA2NiwgMTkzLCA3MSwgNjUsIAorICAgIDY1LCA3MCwgODUsIDEyOCwgNzEsIDY1LCAxNzgsIDcxLCA0OCwgNTMsIDUyLCAxMjgsIDcxLCA0OCwgNTMsIDUxLCAxMjgsIAorICAgIDcxLCA0OCwgNTMsIDUwLCAxMjgsIDcxLCA0OCwgNTMsIDQ5LCAxMjgsIDcxLCA0OCwgNTMsIDQ4LCAxMjgsIDcxLCA0OCwgCisgICAgNTIsIDU3LCAxMjgsIDcxLCA0OCwgNTIsIDU2LCAxMjgsIDcxLCA0OCwgNTIsIDU1LCAxMjgsIDcxLCA0OCwgNTIsIDU0LCAKKyAgICAxMjgsIDcxLCA0OCwgNTIsIDUzLCA2NSwgMTI4LCA3MSwgNDgsIDUyLCA1MywgMTI4LCA3MSwgNDgsIDUyLCA1MiwgMTI4LCAKKyAgICA3MSwgNDgsIDUyLCA1MSwgNjUsIDEyOCwgNzEsIDQ4LCA1MiwgNTEsIDEyOCwgNzEsIDQ4LCA1MiwgNTAsIDEyOCwgNzEsIAorICAgIDQ4LCA1MiwgNDksIDEyOCwgNzEsIDQ4LCA1MiwgNDgsIDEyOCwgNzEsIDQ4LCA1MSwgNTcsIDEyOCwgNzEsIDQ4LCA1MSwgCisgICAgNTYsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIDU1LCAxMjgsIDcxLCA0OCwgNTEsIDU0LCAKKyAgICA2NSwgMTI4LCA3MSwgNDgsIDUxLCA1NCwgMTI4LCA3MSwgNDgsIDUxLCA1MywgMTI4LCA3MSwgNDgsIDUxLCA1MiwgMTI4LCAKKyAgICA3MSwgNDgsIDUxLCA1MSwgMTI4LCA3MSwgNDgsIDUxLCA1MCwgMTI4LCA3MSwgNDgsIDUxLCA0OSwgMTI4LCA3MSwgNDgsIAorICAgIDUxLCA0OCwgMTI4LCA3MSwgNDgsIDUwLCA1NywgMTI4LCA3MSwgNDgsIDUwLCA1NiwgMTI4LCA3MSwgNDgsIDUwLCA1NSwgCisgICAgMTI4LCA3MSwgNDgsIDUwLCA1NCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIDEyOCwgNzEsIDQ4LCA1MCwgNTMsIDEyOCwgCisgICAgNzEsIDQ4LCA1MCwgNTIsIDEyOCwgNzEsIDQ4LCA1MCwgNTEsIDEyOCwgNzEsIDQ4LCA1MCwgNTAsIDEyOCwgNzEsIDQ4LCAKKyAgICA1MCwgNDksIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDQ4LCAxMjgsIDcxLCA0OCwgNDksIAorICAgIDU3LCAxMjgsIDcxLCA0OCwgNDksIDU2LCAxMjgsIDcxLCA0OCwgNDksIDU1LCAxMjgsIDcxLCA0OCwgNDksIDU0LCAxMjgsIAorICAgIDcxLCA0OCwgNDksIDUzLCAxMjgsIDcxLCA0OCwgNDksIDUyLCAxMjgsIDcxLCA0OCwgNDksIDUxLCAxMjgsIDcxLCA0OCwgCisgICAgNDksIDUwLCAxMjgsIDcxLCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3MSwgNDgsIDQ5LCA0OSwgMTI4LCA3MSwgNDgsIDQ5LCAKKyAgICA0OCwgMTI4LCA3MSwgNDgsIDQ4LCA1NywgMTI4LCA3MSwgNDgsIDQ4LCA1NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgNjYsIAorICAgIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCA2NSwgCisgICAgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgMTI4LCA3MSwgNDgsIDQ4LCA1MywgMTI4LCA3MSwgNDgsIDQ4LCA1MiwgMTI4LCA3MSwgCisgICAgNDgsIDQ4LCA1MSwgMTI4LCA3MSwgNDgsIDQ4LCA1MCwgMTI4LCA3MSwgNDgsIDQ4LCA0OSwgMTI4LCA3MCwgODksIDg4LCAKKyAgICAxMjgsIDcwLCA4OSwgODQsIDEyOCwgNzAsIDg5LCA4MCwgMTI4LCA3MCwgODksIDY1LCAxMjgsIDcwLCA4NywgNzMsIDEyOCwgCisgICAgNzAsIDg3LCA2OSwgNjksIDEyOCwgNzAsIDg3LCA2OSwgMTI4LCA3MCwgODcsIDY1LCA2NSwgMTI4LCA3MCwgODcsIDY1LCAKKyAgICAxMjgsIDcwLCA4NiwgODMsIDUxLCAxMjgsIDcwLCA4NiwgODMsIDUwLCAxMjgsIDcwLCA4NiwgODMsIDQ5LCAxMjgsIDcwLCAKKyAgICA4NSwgODgsIDEyOCwgNzAsIDg1LCA4NCwgMTI4LCA3MCwgODUsIDgzLCA2OSwgMTI4LCA3MCwgODUsIDgzLCAxOTMsIDcwLCAKKyAgICA4NSwgODIsIDg4LCAxMjgsIDcwLCA4NSwgODAsIDEyOCwgNzAsIDg1LCA3OCwgNjksIDgyLCA2NSwgMjA0LCA3MCwgODUsIAorICAgIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MCwgCisgICAgODUsIDc2LCA3NiwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDg1LCA3NiwgMjA0LCA3MCwgODUsIDc0LCA3MywgMTI4LCAKKyAgICA3MCwgODUsIDY5LCA4NCwgMTI4LCA3MCwgODUsIDY5LCAyMDQsIDcwLCA4NSwgNjksIDEyOCwgNzAsIDg0LCA3MiwgNzksIAorICAgIDgyLCAxOTMsIDcwLCA4MywgNzMsIDEyOCwgNzAsIDgyLCA3OSwgODcsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA4MiwgCisgICAgNzksIDg3LCA3OCwgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDg3LCA3OCwgMTI4LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCAKKyAgICA4NCwgNzMsIDc2LCA4NCwgNjksIDE5NiwgNzAsIDgyLCA3OSwgNzgsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIAorICAgIDcwLCA4MiwgNzksIDIwNSwgNzAsIDgyLCA3OSwgNzEsIDEyOCwgNzAsIDgyLCA3OSwgMTk5LCA3MCwgODIsIDczLCA4NCwgCisgICAgODUsIDEyOCwgNzAsIDgyLCA3MywgNjksIDgzLCAxMjgsIDcwLCA4MiwgNzMsIDY5LCAxOTYsIDcwLCA4MiwgNzMsIDY3LCAKKyAgICA2NSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzAsIDgyLCA2OSwgODQsIDY2LCA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3MCwgODIsIAorICAgIDY5LCA3OCwgNjcsIDIwMCwgNzAsIDgyLCA2OSwgNjksIDEyOCwgNzAsIDgyLCA2OSwgMTk3LCA3MCwgODIsIDY1LCA3OCwgCisgICAgMTk1LCA3MCwgODIsIDY1LCA3NywgNjksIDEyOCwgNzAsIDgyLCA2NSwgNzEsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDcwLCAKKyAgICA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MCwgNzksIAorICAgIDg4LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgCisgICAgMjA2LCA3MCwgNzksIDg1LCA4MiwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzAsIDc5LCA4NSwgODIsIDQ1LCAKKyAgICA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgNzAsIAorICAgIDc5LCA4NSwgODIsIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3OSwgODUsIDIxMCwgNzAsIDc5LCA4NSwgNzgsIDg0LCA2NSwgCisgICAgNzMsIDc4LCAxMjgsIDcwLCA3OSwgODMsIDg0LCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgODcsIDY1LCAKKyAgICA4MiwgNjgsIDEyOCwgNzAsIDc5LCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3OSwgODIsIDg0LCAyMTcsIDcwLCA3OSwgODIsIAorICAgIDg0LCA2OSwgMTI4LCA3MCwgNzksIDgyLCA3NywgMjExLCA3MCwgNzksIDgyLCA3NywgNjUsIDg0LCA4NCwgNzMsIDc4LCA3MSwgCisgICAgMTI4LCA3MCwgNzksIDgyLCA3NSwgNjksIDE5NiwgNzAsIDc5LCA4MiwgNjcsIDY5LCA4MywgMTI4LCA3MCwgNzksIDgyLCAKKyAgICA2NywgNjksIDEyOCwgNzAsIDc5LCA4MCwgMTI4LCA3MCwgNzksIDc5LCA4NCwgODMsIDg0LCA3OSwgNzksIDc2LCAxMjgsIAorICAgIDcwLCA3OSwgNzksIDg0LCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAxMjgsIDcwLCA3OSwgNzksIDg0LCA3OCwgNzksIDg0LCAKKyAgICAxOTcsIDcwLCA3OSwgNzksIDg0LCA2NiwgNjUsIDc2LCA3NiwgMTI4LCA3MCwgNzksIDc5LCA4NCwgMTI4LCA3MCwgNzksIAorICAgIDc5LCA2OCwgMTI4LCA3MCwgNzksIDc5LCAxMjgsIDcwLCA3OSwgNzgsIDcxLCA3NywgNjUsIDc4LCAxMjgsIDcwLCA3OSwgCisgICAgNzcsIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDg5LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA3OSwgODcsIDczLCA3OCwgNzEsIAorICAgIDEyOCwgNzAsIDc5LCA3NiwgNjgsIDY5LCA4MiwgMTI4LCA3MCwgNzksIDc2LCA2OCwgNjksIDE5NiwgNzAsIDc5LCA3MSwgCisgICAgNzEsIDg5LCAxMjgsIDcwLCAyMDcsIDcwLCA3NywgMTI4LCA3MCwgNzYsIDg5LCAxMjgsIDcwLCA3NiwgODUsIDg0LCA4NCwgCisgICAgNjksIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc2LCA4NSwgODQsIDY5LCAxMjgsIDcwLCA3NiwgODUsIDgzLCA3MiwgNjksIAorICAgIDE5NiwgNzAsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MCwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzAsIDc2LCA3OSwgCisgICAgODUsIDgyLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3NiwgNzksIDgyLCA2OSwgODQsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDc5LCAKKyAgICA4MiwgNjUsIDIwNCwgNzAsIDc2LCA3OSwgODAsIDgwLCAyMTcsIDcwLCA3NiwgNzksIDc5LCA4MiwgMTI4LCA3MCwgNzYsIAorICAgIDczLCA4MCwgMTI4LCA3MCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCA3NiwgNjksIDg4LCA4NSwgODMsIDEyOCwgCisgICAgNzAsIDc2LCA2OSwgODgsIDY5LCAxOTYsIDcwLCA3NiwgNjksIDg1LCA4MiwgNDUsIDY4LCA2OSwgNDUsIDc2LCA3MywgODMsIAorICAgIDEyOCwgNzAsIDc2LCA2NSwgODQsIDg0LCA2OSwgNzgsIDY5LCAxOTYsIDcwLCA3NiwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgCisgICAgMTI4LCA3MCwgNzYsIDY1LCA4NCwgMTI4LCA3MCwgNzYsIDY1LCAyMTIsIDcwLCA3NiwgNjUsIDcxLCA4MywgMTI4LCA3MCwgCisgICAgNzYsIDY1LCA3MSwgNDUsIDUzLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTIsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCAKKyAgICA1MSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUwLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNDksIDEyOCwgNzAsIAorICAgIDc2LCA2NSwgNzEsIDEyOCwgNzAsIDc2LCA2NSwgMTk5LCA3MCwgNzYsIDY1LCAxMjgsIDcwLCA3NiwgMTI4LCA3MCwgNzMsIAorICAgIDg4LCA2OSwgNjgsIDQ1LCA3MCwgNzksIDgyLCAyMDUsIDcwLCA3MywgODgsIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA4NCwgCisgICAgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzMsIDg2LCAKKyAgICAxOTcsIDcwLCA3MywgODQsIDY1LCAxMjgsIDcwLCA3MywgODQsIDEyOCwgNzAsIDczLCA4MywgODQsIDY5LCAxOTYsIDcwLCAKKyAgICA3MywgODMsIDg0LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MywgNzgsIDE5OSwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIAorICAgIDc1LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAyMDMsIDcwLCA3MywgODMsIDcyLCA2OSwgODksIDY5LCAKKyAgICAxMjgsIDcwLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3MywgODMsIDIwMCwgNzAsIDczLCA4MiwgODMsIDIxMiwgNzAsIDczLCAKKyAgICA4MiwgNzMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgODIsIDc1LCA4MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIAorICAgIDc5LCA4MiwgMjAzLCA3MCwgNzMsIDgyLCA2OSwgMTI4LCA3MCwgNzMsIDgyLCAxOTcsIDcwLCA3MywgODAsIDEyOCwgNzAsIAorICAgIDczLCA3OCwgNzMsIDg0LCAxOTcsIDcwLCA3MywgNzgsIDcxLCA2OSwgODIsIDc4LCA2NSwgNzMsIDc2LCA4MywgMTI4LCA3MCwgCisgICAgNzMsIDc4LCA3MSwgNjksIDgyLCA2OSwgMTk2LCA3MCwgNzMsIDc4LCA2NSwgNzgsIDY3LCA3MywgNjUsIDc2LCAxMjgsIDcwLCAKKyAgICA3MywgNzYsIDc2LCA2OSwgODIsIDEyOCwgNzAsIDczLCA3NiwgNzYsIDY5LCAxOTYsIDcwLCA3MywgNzYsIDc2LCAxMjgsIAorICAgIDcwLCA3MywgNzYsIDIwNCwgNzAsIDczLCA3NiwgMTk3LCA3MCwgNzMsIDczLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCisgICAgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAKKyAgICA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgMTk3LCA3MCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIAorICAgIDczLCA3MCwgODQsIDg5LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAyMTcsIDcwLCA3MywgNzAsIDg0LCA3MiwgODMsIDEyOCwgCisgICAgNzAsIDczLCA3MCwgODQsIDcyLCAxMjgsIDcwLCA3MywgNzAsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAKKyAgICA2OSwgNjksIDIwNiwgNzAsIDczLCA2OSwgNzYsIDY4LCAxMjgsIDcwLCA3MiwgODQsIDc5LCA4MiwgMTkzLCA3MCwgNzAsIAorICAgIDc2LCAxMjgsIDcwLCA3MCwgNzMsIDEyOCwgNzAsIDY5LCA4NSwgODgsIDEyOCwgNzAsIDY5LCA4NSwgNzAsIDY5LCA4NSwgCisgICAgNjUsIDY5LCA4NCwgMTI4LCA3MCwgNjksIDgzLCA4NCwgNzMsIDg2LCA2NSwgNzYsIDEyOCwgNzAsIDY5LCA4MiwgODIsIDg5LCAKKyAgICAxMjgsIDcwLCA2OSwgODIsIDgyLCA3MywgMjExLCA3MCwgNjksIDgyLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MCwgNjksIAorICAgIDgyLCA3NywgNjUsIDg0LCAxOTMsIDcwLCA2OSwgNzksIDIwMCwgNzAsIDY5LCA3OCwgMTk5LCA3MCwgNjksIDc4LCA2NywgCisgICAgNjksIDEyOCwgNzAsIDY5LCA3NywgNzMsIDc4LCA3MywgNzgsIDE5NywgNzAsIDY5LCA3NywgNjUsIDc2LCA2OSwgMTI4LCAKKyAgICA3MCwgNjksIDc3LCA2NSwgNzYsIDE5NywgNzAsIDY5LCA3NiwgNzYsIDc5LCA4NywgODMsIDcyLCA3MywgODAsIDEyOCwgNzAsIAorICAgIDY5LCA3MywgMTI4LCA3MCwgNjksIDcyLCAyMTMsIDcwLCA2OSwgNzIsIDEyOCwgNzAsIDY5LCAyMDAsIDcwLCA2OSwgNjksIAorICAgIDc4LCA3MSwgMTI4LCA3MCwgNjksIDY5LCA2OCwgMTI4LCA3MCwgNjksIDY5LCAxOTYsIDcwLCA2OSwgNjksIDEyOCwgNzAsIAorICAgIDY5LCA2NiwgODIsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2OSwgCisgICAgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIDY5LCA2NSwgODIsIDc4LCAxMjgsIDcwLCA2OSwgNjUsIDgyLCA3MCwgODUsIAorICAgIDIwNCwgNzAsIDY5LCA2NSwgODIsIDEyOCwgNzAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzAsIDY1LCA4OSwgCisgICAgMTI4LCA3MCwgNjUsIDg4LCAxMjgsIDcwLCA2NSwgMjE2LCA3MCwgNjUsIDg0LCA3MywgNzEsIDg1LCA2OSwgMTI4LCA3MCwgCisgICAgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCAKKyAgICA2NSwgNzgsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgNjUsIDIwNiwgNzAsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIAorICAgIDcwLCA2NSwgODQsIDcyLCAxOTMsIDcwLCA2NSwgODQsIDEyOCwgNzAsIDY1LCA4MiwgODMsIDIwMSwgNzAsIDY1LCA4MSwgCisgICAgMTI4LCA3MCwgNjUsIDgwLCAxMjgsIDcwLCA2NSwgNzgsIDcxLCAxMjgsIDcwLCA2NSwgNzgsIDY5LCA4MiwgNzksIDgzLCAKKyAgICA3MywgMjExLCA3MCwgNjUsIDc4LCAxMjgsIDcwLCA2NSwgNzcsIDczLCA3NiwgODksIDEyOCwgNzAsIDY1LCA3NiwgNzYsIAorICAgIDczLCA3OCwgMTk5LCA3MCwgNjUsIDc2LCA3NiwgNjksIDIwNiwgNzAsIDY1LCA3MywgNzYsIDg1LCA4MiwgNjksIDEyOCwgCisgICAgNzAsIDY1LCA3MywgNzIsIDg1LCAxMjgsIDcwLCA2NSwgNzIsIDgyLCA2OSwgNzgsIDcyLCA2OSwgNzMsIDg0LCAxMjgsIDcwLCAKKyAgICA2NSwgNjcsIDg0LCA3OSwgODIsIDg5LCAxMjgsIDcwLCA2NSwgNjcsIDg0LCA3OSwgMjEwLCA3MCwgNjUsIDY3LCA4MywgNzMsIAorICAgIDc3LCA3MywgNzYsIDE5NywgNzAsIDY1LCA2NywgNjksIDQ1LCA1NCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUzLCAKKyAgICAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTIsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNjUsIAorICAgIDY3LCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDY1LCA2NSwgNzcsIDY1LCA2OSwgCisgICAgMTI4LCA3MCwgNjUsIDY1LCA3MywgMTI4LCA3MCwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzAsIDQ4LCA1MywgNTEsIDEyOCwgCisgICAgNzAsIDQ4LCA1MywgNTAsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY3LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NiwgMTI4LCAKKyAgICA3MCwgNDgsIDUzLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDEyOCwgNzAsIDQ4LCA1MywgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MiwgNTcsIDEyOCwgNzAsIDQ4LCA1MiwgNTYsIDEyOCwgNzAsIDQ4LCA1MiwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgCisgICAgNTIsIDU1LCAxMjgsIDcwLCA0OCwgNTIsIDU0LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgMTI4LCA3MCwgNDgsIDUyLCAKKyAgICA1MywgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTMsIDEyOCwgNzAsIDQ4LCA1MiwgNTIsIDEyOCwgNzAsIDQ4LCA1MiwgNTEsIAorICAgIDEyOCwgNzAsIDQ4LCA1MiwgNTAsIDEyOCwgNzAsIDQ4LCA1MiwgNDksIDEyOCwgNzAsIDQ4LCA1MiwgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MSwgNTcsIDEyOCwgNzAsIDQ4LCA1MSwgNTYsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCAxMjgsIDcwLCA0OCwgCisgICAgNTEsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA1NSwgMTI4LCA3MCwgNDgsIDUxLCA1NCwgMTI4LCA3MCwgNDgsIDUxLCAKKyAgICA1MywgMTI4LCA3MCwgNDgsIDUxLCA1MiwgMTI4LCA3MCwgNDgsIDUxLCA1MSwgMTI4LCA3MCwgNDgsIDUxLCA1MCwgMTI4LCAKKyAgICA3MCwgNDgsIDUxLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNDksIDEyOCwgNzAsIDQ4LCA1MSwgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MCwgNTcsIDEyOCwgNzAsIDQ4LCA1MCwgNTYsIDEyOCwgNzAsIDQ4LCA1MCwgNTUsIDEyOCwgNzAsIDQ4LCA1MCwgCisgICAgNTQsIDEyOCwgNzAsIDQ4LCA1MCwgNTMsIDEyOCwgNzAsIDQ4LCA1MCwgNTIsIDEyOCwgNzAsIDQ4LCA1MCwgNTEsIDEyOCwgCisgICAgNzAsIDQ4LCA1MCwgNTAsIDEyOCwgNzAsIDQ4LCA1MCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCAxMjgsIDcwLCAKKyAgICA0OCwgNTAsIDQ4LCAxMjgsIDcwLCA0OCwgNDksIDU3LCAxMjgsIDcwLCA0OCwgNDksIDU2LCAxMjgsIDcwLCA0OCwgNDksIAorICAgIDU1LCAxMjgsIDcwLCA0OCwgNDksIDU0LCAxMjgsIDcwLCA0OCwgNDksIDUzLCAxMjgsIDcwLCA0OCwgNDksIDUyLCAxMjgsIAorICAgIDcwLCA0OCwgNDksIDUxLCA2NSwgMTI4LCA3MCwgNDgsIDQ5LCA1MSwgMTI4LCA3MCwgNDgsIDQ5LCA1MCwgMTI4LCA3MCwgCisgICAgNDgsIDQ5LCA0OSwgMTI4LCA3MCwgNDgsIDQ5LCA0OCwgMTI4LCA3MCwgNDgsIDQ4LCA1NywgMTI4LCA3MCwgNDgsIDQ4LCAKKyAgICA1NiwgMTI4LCA3MCwgNDgsIDQ4LCA1NSwgMTI4LCA3MCwgNDgsIDQ4LCA1NCwgMTI4LCA3MCwgNDgsIDQ4LCA1MywgMTI4LCAKKyAgICA3MCwgNDgsIDQ4LCA1MiwgMTI4LCA3MCwgNDgsIDQ4LCA1MSwgMTI4LCA3MCwgNDgsIDQ4LCA1MCwgMTI4LCA3MCwgNDgsIAorICAgIDQ4LCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA0OCwgNDksIDEyOCwgNjksIDkwLCAyMDAsIDY5LCA5MCwgNjksIDc4LCAxMjgsIAorICAgIDY5LCA5MCwgNjksIDIwNiwgNjksIDkwLCAxMjgsIDY5LCA4OSwgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjksIDcxLCA3NiwgCisgICAgNjUsIDgzLCA4MywgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjYsIDY5LCA4OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDg5LCAKKyAgICA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgODgsIDg0LCA4MiwgNjUsIDg0LCA2OSwgODIsIDgyLCA2OSwgODMsIDg0LCA4MiwgCisgICAgNzMsIDY1LCAyMDQsIDY5LCA4OCwgODQsIDgyLCA2NSwgNDUsIDc2LCA3OSwgMjE1LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCAKKyAgICA3MiwgNzMsIDcxLCAyMDAsIDY5LCA4OCwgODQsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA4NCwgNjksIAorICAgIDc4LCA2OCwgNjksIDE5NiwgNjksIDg4LCA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDc2LCA2OSwgODMsIDIxMSwgCisgICAgNjksIDg4LCA4MCwgNzksIDc4LCA2OSwgNzgsIDIxMiwgNjksIDg4LCA3OSwgMTI4LCA2OSwgODgsIDIwNywgNjksIDg4LCAKKyAgICA3MywgODMsIDg0LCA4MywgMTI4LCA2OSwgODgsIDczLCA4MywgODQsIDEyOCwgNjksIDg4LCA3MiwgNjUsIDg1LCA4MywgODQsIAorICAgIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgCisgICAgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY5LCA4OCwgNjcsIDcyLCA2NSwgNzgsIDcxLCA2OSwgMTI4LCAKKyAgICA2OSwgODgsIDY3LCA2OSwgODMsIDgzLCAxMjgsIDY5LCA4OCwgNjcsIDY5LCA3NiwgNzYsIDY5LCA3OCwgODQsIDEyOCwgNjksIAorICAgIDg3LCA2OSwgMTI4LCA2OSwgODYsIDY5LCA4MiwgNzEsIDgyLCA2OSwgNjksIDIwNiwgNjksIDg2LCA2OSwgNzgsIDczLCA3OCwgCisgICAgNzEsIDEyOCwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNjUsIDIwNiwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNDUsIDY1LCAKKyAgICA3MCwgODIsIDczLCA2NywgNjUsIDEyOCwgNjksIDg1LCA4MiwgNzksIDQ1LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCA2NywgCisgICAgMjE3LCA2OSwgODUsIDgyLCAyMDcsIDY5LCA4NSwgNzYsIDY5LCAyMTAsIDY5LCA4NSwgNDUsIDg1LCAxMjgsIDY5LCA4NSwgCisgICAgNDUsIDc5LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCA4NSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgNzksIDEyOCwgNjksIDg1LCAKKyAgICA0NSwgNjksIDEyOCwgNjksIDg1LCA0NSwgNjUsIDEyOCwgNjksIDg0LCA4OCwgMTI4LCA2OSwgODQsIDc4LCA2NSwgNzIsIAorICAgIDg0LCA2NSwgMTI4LCA2OSwgODQsIDcyLCA2OSwgMjA0LCA2OSwgODQsIDY5LCA4MiwgNzksIDIwNiwgNjksIDg0LCA2OSwgCisgICAgODIsIDc4LCA3MywgODQsIDg5LCAxMjgsIDY5LCA4NCwgNjYsIDEyOCwgNjksIDgzLCA4NSwgNzUsIDg1LCA4NSwgNjgsIDc5LCAKKyAgICAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCA2OSwgODMsIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgODQsIAorICAgIDY5LCAxOTYsIDY5LCA4MywgNzIsIDY5LCA1MSwgMTI4LCA2OSwgODMsIDcyLCA1MCwgNDksIDEyOCwgNjksIDgzLCA3MiwgCisgICAgMTc4LCA2OSwgODMsIDcyLCA0OSwgNTQsIDEyOCwgNjksIDgzLCA2NywgNjUsIDgwLCA2OSwgMTI4LCA2OSwgODMsIDY3LCAKKyAgICAxMjgsIDY5LCA4MywgNjUsIDEyOCwgNjksIDgzLCA0NSwgODQsIDY5LCAxMjgsIDY5LCA4MiwgODIsIDc5LCA4MiwgNDUsIAorICAgIDY2LCA2NSwgODIsIDgyLCA2OSwgMTk2LCA2OSwgODIsIDgyLCAxMjgsIDY5LCA4MiwgNzMsIDc4LCA1MCwgMTI4LCA2OSwgCisgICAgODIsIDcxLCAxMjgsIDY5LCA4MiwgNjUsIDgzLCAxOTcsIDY5LCA4MSwgODUsIDczLCA4NiwgNjUsIDc2LCA2OSwgNzgsIAorICAgIDIxMiwgNjksIDgxLCA4NSwgNzMsIDY4LCAxMjgsIDY5LCA4MSwgODUsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAKKyAgICAyMTAsIDY5LCA4MSwgODUsIDY1LCA3NiwgODMsIDEyOCwgNjksIDgxLCA4NSwgNjUsIDc2LCAyMTEsIDY5LCA4MSwgODUsIAorICAgIDY1LCA3NiwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCA3OCwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCAKKyAgICAyMDYsIDY5LCA4MCwgNzksIDY3LCA3MiwgMTI4LCA2OSwgODAsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIAorICAgIDY5LCA4MCwgNzMsIDY4LCA2NSwgODUsIDgyLCA2OSwgNjUsIDIwNiwgNjksIDgwLCA2OSwgNzgsIDg0LCA3MiwgNjksIDg0LCAKKyAgICA3MywgMTk1LCA2OSwgODAsIDY5LCA3MSwgNjksIDgyLCA3NywgNjUsIDEyOCwgNjksIDc5LCA4NCwgMTI4LCA2OSwgNzksIAorICAgIDc3LCAxMjgsIDY5LCA3OSwgNzYsIDcyLCA4OCwgMTI4LCA2OSwgNzksIDc2LCAxMjgsIDY5LCA3OSwgNzIsIDEyOCwgNjksIAorICAgIDc4LCA4OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCA4MCwgNjksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgCisgICAgODAsIDE5NywgNjksIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDc4LCA4NCwgODIsIDg5LCAKKyAgICA0NSwgNTAsIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNDksIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAxMjgsIAorICAgIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY5LCA3OCwgODQsIDcyLCA4NSwgODMsIDczLCA2NSwgODMsIDc3LCAxMjgsIDY5LCA3OCwgCisgICAgODQsIDY5LCA4MiwgODAsIDgyLCA3MywgODMsIDY5LCAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDY5LCAKKyAgICA3OCwgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzgsIDg0LCA2OSwgMjEwLCA2OSwgNzgsIDgxLCA4NSwgNzMsIDgyLCA4OSwgCisgICAgMTI4LCA2OSwgNzgsIDgxLCAxMjgsIDY5LCA3OCwgNzksIDIxMSwgNjksIDc4LCA3OCwgMTI4LCA2OSwgNzgsIDc2LCA2NSwgCisgICAgODIsIDcxLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjksIDc4LCA3MSwgNzMsIDc4LCA2OSwgMTI4LCA2OSwgNzgsIDY4LCAKKyAgICA3OSwgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY4LCA2OSwgODAsIAorICAgIDEyOCwgNjksIDc4LCA2OCwgNjksIDY1LCA4NiwgNzksIDg1LCA4MiwgMTI4LCA2OSwgNzgsIDY3LCA3OSwgODUsIDc4LCA4NCwgCisgICAgNjksIDgyLCA4MywgMTI4LCA2OSwgNzgsIDY3LCA3NiwgNzksIDgzLCA4NSwgODIsIDY5LCAxMjgsIDY5LCA3OCwgNjcsIDc2LCAKKyAgICA3OSwgODMsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY3LCAxMjgsIDY5LCA3OCwgNjUsIDgyLCA4OCwgNzMsIDIxMSwgNjksIAorICAgIDc4LCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA3OSwgMjExLCA2OSwgNzcsIDgwLCA4NCwgMjE3LCA2OSwgNzcsIDgwLCA3MiwgCisgICAgNjUsIDg0LCA3MywgMTk1LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDgzLCA3MywgMjExLCA2OSwgNzcsIDY2LCA4MiwgNzksIDczLCAKKyAgICA2OCwgNjksIDgyLCA4OSwgMTI4LCA2OSwgNzcsIDY2LCA3NiwgNjksIDc3LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA3NiwgNzYsIAorICAgIDczLCA4MywgNzIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA2OCwgNjgsIDczLCA3OCwgNzEsIDEyOCwgCisgICAgNjksIDc2LCA4NCwgMTI4LCA2OSwgNzYsIDc2LCA3MywgODAsIDg0LCA3MywgMTk1LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCAKKyAgICA3MywgODMsIDEyOCwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgNjksIDEyOCwgNjksIDc2LCA3MywgNzAsIDczLCAxMjgsIAorICAgIDY5LCA3NiwgNjksIDg2LCA2OSwgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3NiwgNjksIDg2LCAKKyAgICA2OSwgNzgsIDEyOCwgNjksIDc2LCA2OSwgODYsIDY5LCAyMDYsIDY5LCA3NiwgNjksIDgwLCA3MiwgNjUsIDc4LCA4NCwgCisgICAgMTI4LCA2OSwgNzYsIDY5LCA3NywgNjksIDc4LCAyMTIsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCA2NywgNjUsIAorICAgIDIwNCwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDE5NSwgNjksIDc2LCA2NSwgNzAsIDgyLCA3OSwgNzgsIDEyOCwgCisgICAgNjksIDc1LCA4MywgODQsIDgyLCA2OSwgODAsIDg0LCA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgMTI4LCA2OSwgNzUsIDcwLCAKKyAgICA3OSwgNzgsIDczLCA4NCwgNzMsIDc1LCA3OSwgNzgsIDEyOCwgNjksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY5LCA3NCwgNjksIAorICAgIDY3LCAyMTIsIDY5LCA3MywgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgCisgICAgODQsIDIxNywgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMjExLCAKKyAgICA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA2OSwgNzMsIAorICAgIDcxLCA3MiwgODQsIDY5LCA2OSwgMjA2LCA2OSwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAKKyAgICAxMjgsIDY5LCA3MywgNjksIDEyOCwgNjksIDcyLCA4NywgNjUsIDIxOCwgNjksIDcxLCA4OSwgODAsIDg0LCA3OSwgNzYsIAorICAgIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzEsIDczLCA4MiwgMTI4LCA2OSwgNzEsIDcxLCAxMjgsIDY5LCA2OSwgCisgICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA2OSwgNzUsIDY1LCA2NSwgMTI4LCA2OSwgNjksIDcyLCAxMjgsIDY5LCAKKyAgICA2OSwgNjYsIDY5LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDY4LCA3MywgODQsIDc5LCA4MiwgNzMsIDY1LCAyMDQsIAorICAgIDY5LCA2OCwgNzMsIDc4LCAxMjgsIDY5LCA2OCwgNjgsIDEyOCwgNjksIDY2LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCisgICAgNjksIDY1LCA4MywgODQsIDY5LCA4MiwgMjA2LCA2OSwgNjUsIDgzLCAyMTIsIDY5LCA2NSwgODIsIDg0LCA3MiwgNzYsIAorICAgIDIxNywgNjksIDY1LCA4MiwgODQsIDcyLCAxMjgsIDY5LCA2NSwgODIsIDg0LCAyMDAsIDY5LCA2NSwgODIsIDgzLCAxMjgsIAorICAgIDY5LCA2NSwgODIsIDc2LCAyMTcsIDY5LCA2NSwgNzcsIDcyLCA2NSwgNzgsIDY3LCA3MiwgNzksIDc2LCA3NiwgMTI4LCA2OSwgCisgICAgNjUsIDcxLCA3NiwgNjksIDEyOCwgNjksIDY1LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDY1LCA2NiwgNzIsIDY1LCAKKyAgICA2OCwgNzIsIDEyOCwgNjksIDE3OCwgNjksIDQ4LCA1MSwgNTYsIDEyOCwgNjksIDQ4LCA1MSwgNTUsIDEyOCwgNjksIDQ4LCAKKyAgICA1MSwgNTQsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCAxMjgsIDY5LCA0OCwgNTEsIAorICAgIDUxLCAxMjgsIDY5LCA0OCwgNTEsIDUwLCAxMjgsIDY5LCA0OCwgNTEsIDQ5LCAxMjgsIDY5LCA0OCwgNTEsIDQ4LCAxMjgsIAorICAgIDY5LCA0OCwgNTAsIDU3LCAxMjgsIDY5LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA1NiwgMTI4LCA2OSwgCisgICAgNDgsIDUwLCA1NSwgMTI4LCA2OSwgNDgsIDUwLCA1NCwgMTI4LCA2OSwgNDgsIDUwLCA1MywgMTI4LCA2OSwgNDgsIDUwLCAKKyAgICA1MiwgMTI4LCA2OSwgNDgsIDUwLCA1MSwgMTI4LCA2OSwgNDgsIDUwLCA1MCwgMTI4LCA2OSwgNDgsIDUwLCA0OSwgMTI4LCAKKyAgICA2OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNjksIDQ4LCA1MCwgNDgsIDEyOCwgNjksIDQ4LCA0OSwgNTcsIDEyOCwgNjksIAorICAgIDQ4LCA0OSwgNTYsIDEyOCwgNjksIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU1LCAxMjgsIDY5LCA0OCwgCisgICAgNDksIDU0LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NCwgMTI4LCA2OSwgNDgsIDQ5LCA1MywgMTI4LCA2OSwgNDgsIDQ5LCAKKyAgICA1MiwgMTI4LCA2OSwgNDgsIDQ5LCA1MSwgMTI4LCA2OSwgNDgsIDQ5LCA1MCwgMTI4LCA2OSwgNDgsIDQ5LCA0OSwgMTI4LCAKKyAgICA2OSwgNDgsIDQ5LCA0OCwgMTI4LCA2OSwgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDEyOCwgNjksIAorICAgIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgNDgsIDU2LCAxMjgsIDY5LCA0OCwgNDgsIDU1LCAxMjgsIDY5LCA0OCwgCisgICAgNDgsIDU0LCAxMjgsIDY5LCA0OCwgNDgsIDUzLCAxMjgsIDY5LCA0OCwgNDgsIDUyLCAxMjgsIDY5LCA0OCwgNDgsIDUxLCAKKyAgICAxMjgsIDY5LCA0OCwgNDgsIDUwLCAxMjgsIDY5LCA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA0NSwgNzcsIDY1LCA3MywgMjA0LCAKKyAgICA2OCwgOTAsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDg3LCA2OSwgMTI4LCA2OCwgOTAsIAorICAgIDg1LCAxMjgsIDY4LCA5MCwgNzksIDEyOCwgNjgsIDkwLCA3NCwgNjksIDEyOCwgNjgsIDkwLCA3MywgMTI4LCA2OCwgOTAsIAorICAgIDcyLCA2OSwgMTI4LCA2OCwgOTAsIDcyLCA2NSwgMTI4LCA2OCwgOTAsIDY5LCA3NiwgNzksIDEyOCwgNjgsIDkwLCA2OSwgCisgICAgNjksIDEyOCwgNjgsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIDY1LCA2NSwgMTI4LCA2OCwgOTAsIDY1LCAxMjgsIDY4LCA5MCwgCisgICAgMTI4LCA2OCwgMjE4LCA2OCwgODksIDc5LCAxMjgsIDY4LCA4OSwgMjA3LCA2OCwgODksIDY5LCA3MiwgMTI4LCA2OCwgODksIAorICAgIDY5LCAyMDAsIDY4LCA4NywgNzksIDEyOCwgNjgsIDg3LCA2OSwgMTI4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA4NiwgNzMsIAorICAgIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2OCwgODYsIDY4LCAxMjgsIDY4LCA4NiwgMTI4LCA2OCwgODUsIDg0LCA3MywgCisgICAgNjksIDgzLCAxMjgsIDY4LCA4NSwgODMsIDc1LCAxMjgsIDY4LCA4NSwgODMsIDcyLCA2OSwgNzgsIDc4LCA2NSwgMTI4LCAKKyAgICA2OCwgODUsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDg1LCA4MiwgNTAsIDEyOCwgNjgsIDg1LCA4MCwgNzksIAorICAgIDc4LCA2OCwgNzMsIDg1LCAyMTEsIDY4LCA4NSwgNzksIDg4LCAxMjgsIDY4LCA4NSwgNzksIDEyOCwgNjgsIDg1LCA3OCwgCisgICAgNTIsIDEyOCwgNjgsIDg1LCA3OCwgNTEsIDEyOCwgNjgsIDg1LCA3OCwgMTc5LCA2OCwgODUsIDc3LCAxMjgsIDY4LCA4NSwgCisgICAgMjA0LCA2OCwgODUsIDcyLCAxMjgsIDY4LCA4NSwgNzEsIDg1LCA2OCwgMTI4LCA2OCwgODUsIDY2LCA1MCwgMTI4LCA2OCwgCisgICAgODUsIDY2LCAxMjgsIDY4LCA4NSwgMTk0LCA2OCwgODIsIDg5LCAxMjgsIDY4LCA4MiwgMjE3LCA2OCwgODIsIDg1LCA3NywgCisgICAgMTI4LCA2OCwgODIsIDg1LCAyMDUsIDY4LCA4MiwgNzksIDgwLCA4MywgMTI4LCA2OCwgODIsIDc5LCA4MCwgNzYsIDY5LCAKKyAgICA4NCwgMTI4LCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDY4LCA4MiwgNzksIAorICAgIDc3LCA2OSwgNjgsIDY1LCA4MiwgMjE3LCA2OCwgODIsIDczLCA4NiwgNjksIDEyOCwgNjgsIDgyLCA3MywgODYsIDE5NywgCisgICAgNjgsIDgyLCA3MywgNzgsIDc1LCAxMjgsIDY4LCA4MiwgNzMsIDIwNCwgNjgsIDgyLCA2OSwgODMsIDgzLCAxMjgsIDY4LCAKKyAgICA4MiwgNjUsIDg1LCA3MSwgNzIsIDg0LCAyMTEsIDY4LCA4MiwgNjUsIDc3LCAxMjgsIDY4LCA4MiwgNjUsIDIwNSwgNjgsIAorICAgIDgyLCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgODIsIDY1LCA3MSwgNzksIDIwNiwgNjgsIDgyLCA2NSwgNzAsIDg0LCA3MywgCisgICAgNzgsIDE5OSwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgNjUsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCAKKyAgICAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDE5MywgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCA4MywgCisgICAgMTI4LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA4MCwgNzksIDczLCAKKyAgICA3OCwgODQsIDczLCA3OCwgMTk5LCA2OCwgNzksIDg3LCA3OCwgMTI4LCA2OCwgNzksIDg2LCA2OSwgMTI4LCA2OCwgNzksIAorICAgIDg1LCA3MSwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDg0LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA3NiwgCisgICAgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNjgsIDc5LCA4NSwgNjYsIDc2LCAKKyAgICA2OSwgNDUsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDEyOCwgNjgsIDc5LCA4NCwgODQsIAorICAgIDY5LCA2OCwgNDUsIDgwLCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA3OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgCisgICAgNjksIDY4LCA0NSwgNzYsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIAorICAgIDE5NiwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCisgICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKKyAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAorICAgIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCisgICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAKKyAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIAorICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCisgICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKKyAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAxMjgsIDY4LCA3OSwgODQsIDc2LCAKKyAgICA2OSwgODMsIDIxMSwgNjgsIDc5LCA4MiwgODUsIDEyOCwgNjgsIDc5LCA3OSwgODIsIDEyOCwgNjgsIDc5LCA3OSwgNzgsIAorICAgIDcxLCAxMjgsIDY4LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzcsIDY1LCA3MywgMjA2LCA2OCwgNzksIDc2LCA4MCwgCisgICAgNzIsIDczLCA3OCwgMTI4LCA2OCwgNzksIDc2LCA3NiwgODMsIDEyOCwgNjgsIDc5LCA3NiwgNzYsIDY1LCAyMTAsIDY4LCAKKyAgICA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCA3NSwgNzcsIDY1LCA3MywgMTI4LCA2OCwgNzksIDczLCA4NCwgCisgICAgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgMTk5LCA2OCwgNzksIDY5LCAyMTEsIDY4LCA3OSwgNjgsIDY5LCA3NSwgCisgICAgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCAKKyAgICA3NywgNjksIDY5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIDY5LCAxOTcsIDY4LCA3OSwgNjUsIAorICAgIDEyOCwgNjgsIDc5LCA0NSwgNzksIDEyOCwgNjgsIDc3LCAxMjgsIDY4LCAyMDUsIDY4LCA3NiwgODUsIDEyOCwgNjgsIDc2LCAKKyAgICA3OSwgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCA2OCwgNzYsIDcyLCA2NSwgMTI4LCAKKyAgICA2OCwgNzYsIDY5LCA2OSwgMTI4LCA2OCwgNzYsIDY1LCAxMjgsIDY4LCA3NiwgMTI4LCA2OCwgNzUsIDY1LCA4MiwgMTI4LCAKKyAgICA2OCwgNzUsIDY1LCAyMTAsIDY4LCA3NCwgNjksIDgyLCA4NiwgNzMsIDEyOCwgNjgsIDc0LCA2OSwgODIsIDg2LCAxMjgsIAorICAgIDY4LCA3NCwgNjksIDEyOCwgNjgsIDc0LCA2NSwgMTI4LCA2OCwgNzMsIDkwLCA5MCwgMjE3LCA2OCwgNzMsIDg2LCA3OSwgCisgICAgODIsIDY3LCAxOTcsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCAKKyAgICA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIAorICAgIDY5LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAKKyAgICAxOTYsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCAxOTcsIDY4LCA3MywgODYsIAorICAgIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA3MywgODQsIDg0LCAyMDcsIDY4LCA3MywgODMsIDg0LCA3OSwgCisgICAgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzgsIDcxLCA4NSwgNzMsIDgzLCA3MiwgMTI4LCAKKyAgICA2OCwgNzMsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDQ1LCA1MCwgCisgICAgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDEyOCwgNjgsIDczLCA4MywgODAsIDY5LCA4MiwgODMsIDczLCAKKyAgICA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgNzUsIDEyOCwgNjgsIDczLCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgNjgsIAorICAgIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgNjcsIDc5LCA3OCwgODQsIDczLCA3OCwgODUsIDc5LCA4NSwgMjExLCA2OCwgCisgICAgNzMsIDgzLCAxOTUsIDY4LCA3MywgODMsIDY1LCA4MCwgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgMTk2LCA2OCwgNzMsIDgzLCAKKyAgICA2NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzMsIDgyLCA3MSwgMTkzLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3NiwgCisgICAgMjE3LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDgwLCA4NCwgNjksIAorICAgIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzksIDg1LCA3OCwgMTI4LCA2OCwgCisgICAgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDIwMSwgNjgsIDczLCA3OCwgNzEsIDY2LCA2NSwgMjEyLCAKKyAgICA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIAorICAgIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDUwLCAKKyAgICAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNDksIDEyOCwgNjgsIDczLCA3NywgNzMsIAorICAgIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIDczLCAxOTMsIDY4LCA3MywgCisgICAgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCAKKyAgICA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgNzMsIDc2LCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIAorICAgIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDY4LCA3MywgCisgICAgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgNzEsIDgyLCA2NSwgMjA1LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCAKKyAgICA3OSwgNzgsIDEyOCwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNjgsIDczLCA3MSwgNjUsIDc3LCA3NywgNjUsIAorICAgIDEyOCwgNjgsIDczLCA3MSwgMTkzLCA2OCwgNzMsIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIDIxMSwgNjgsIDczLCA3MCwgCisgICAgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgODQsIDIxNywgNjgsIDczLCAKKyAgICA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgCisgICAgNzgsIDg0LCA3MywgNjUsIDc2LCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgNjgsIDczLCAKKyAgICA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCAyMTEsIAorICAgIDY4LCA3MywgNjksIDgwLCAxMjgsIDY4LCA3MywgMTk3LCA2OCwgNzMsIDY2LCAxMjgsIDY4LCA3MywgNjUsIDg0LCA3OSwgCisgICAgNzgsIDc5LCAyMDYsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgMjAxLCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCAKKyAgICA3NiwgMjAxLCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgODMsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgNjgsIAorICAgIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgMTk2LCA2OCwgNzMsIDY1LCA3NywgNjksIDg0LCA2OSwgMjEwLCA2OCwgCisgICAgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgMTkzLCAKKyAgICA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCA4NCwgNDUsIDIwOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDc2LCAxMjgsIAorICAgIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgOTAsIDY5LCAKKyAgICAxOTYsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIAorICAgIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgNzksIDEyOCwgNjgsIAorICAgIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIDEyOCwgNjgsIDcyLCA3MiwgCisgICAgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY5LCAKKyAgICAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNjUsIDgyLCA3NywgNjUsIAorICAgIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY1LCA4NCwgNzIsIDEyOCwgCisgICAgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDY1LCA2NSwgNzYsIDg1LCAKKyAgICAxMjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCA5MCwgMjAwLCA2OCwgNjksIDg5LCAKKyAgICA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjExLCA2OCwgNjksIDg4LCA3MywgNjUsIAorICAgIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCA3NiwgNzksIDgwLCA3NywgNjksIDc4LCA4NCwgCisgICAgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgMjAzLCA2OCwgNjksIDgzLCA3MywgNzEsIDc4LCAKKyAgICAxMjgsIDY4LCA2OSwgODMsIDczLCAxMjgsIDY4LCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAyMDYsIAorICAgIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDY5LCAKKyAgICA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNjgsIDY5LCA4MiwgNjksIAorICAgIDg0LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgNjksIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgCisgICAgNzcsIDY5LCA3OCwgMjEyLCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3OCwgODQsIDczLCAKKyAgICA4MywgODQsIDgyLCAyMTcsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIAorICAgIDg0LCA3OSwgODIsIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIDY5LCA3OCwgCisgICAgNzgsIDY5LCA3OCwgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDc4LCAxOTcsIDY4LCA2OSwgNzgsIDY1LCAKKyAgICA4MiwgNzMsIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCA2OCwgNjksIAorICAgIDc2LCA4NCwgMTI4LCA2OCwgNjksIDc2LCA4MCwgNzIsIDczLCAxOTUsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCAKKyAgICAyMTcsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA3MywgNzcsIAorICAgIDczLCA4NCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMjEwLCA2OCwgNjksIDc2LCA3MywgCisgICAgNjcsIDczLCA3OSwgODUsIDIxMSwgNjgsIDY5LCA3NiwgNjksIDg0LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA2OSwgODQsIAogICAgIDE5NywgNjgsIDY5LCA3NSwgNjUsIDEyOCwgNjgsIDY5LCA3NSwgMTI4LCA2OCwgNjksIDczLCAxMjgsIDY4LCA2OSwgNzIsIAogICAgIDczLCAxMjgsIDY4LCA2OSwgNzEsIDgyLCA2OSwgMTk3LCA2OCwgNjksIDcwLCA3MywgNzgsIDczLCA4NCwgNzMsIDc5LCA3OCwgCiAgICAgMTI4LCA2OCwgNjksIDcwLCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCA3OCwgNjksIDgzLCAyMTEsIDY4LCA2OSwgNjksIDgyLCAKQEAgLTQ1NDcsOTYgKzQ1NTAsOTYgQEAKICAgICA3MywgNzksIDIwNiwgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIDY1LCA3NiwgODQsIDY1LCAxMjgsIAogICAgIDY1LCA3NiwgODAsIDcyLCA2NSwgMTI4LCA2NSwgNzYsIDgwLCA3MiwgMTkzLCA2NSwgNzYsIDgwLCA2NSwgODAsIDgyLCA2NSwgCiAgICAgNzgsIDY1LCAxMjgsIDY1LCA3NiwgODAsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNjUsIDc2LCA4MCwgNjUsIAotICAgIDEyOCwgNjUsIDc2LCA3NywgNzksIDgzLCAyMTIsIDY1LCA3NiwgNzYsIDc5LCAxMjgsIDY1LCA3NiwgNzYsIDczLCA2NSwgCi0gICAgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNzYsIDc2LCAyMDEsIDY1LCA3NiwgNzYsIDY1LCAyMDAsIDY1LCA3NiwgNzUsIDY1LCAKLSAgICA3NiwgNzMsIDQ1LCA1MCwgMTI4LCA2NSwgNzYsIDc1LCA2NSwgNzYsIDczLCAxMjgsIDY1LCA3NiwgNzMsIDcxLCA3OCwgNjksIAotICAgIDE5NiwgNjUsIDc2LCA3MywgNzAsIDg1LCAxMjgsIDY1LCA3NiwgNzMsIDY5LCA3OCwgMTI4LCA2NSwgNzYsIDczLCA2OSwgCi0gICAgMjA2LCA2NSwgNzYsIDcxLCA3MywgMjE4LCA2NSwgNzYsIDcwLCA2NSwgMTI4LCA2NSwgNzYsIDY5LCA4NSwgMjEyLCA2NSwgCi0gICAgNzYsIDY5LCA4MiwgODQsIDEyOCwgNjUsIDc2LCA2OSwgODAsIDcyLCAxMjgsIDY1LCA3NiwgNjksIDc3LCA2NiwgNzMsIDY3LCAKLSAgICAxMjgsIDY1LCA3NiwgNjksIDcwLCAxMjgsIDY1LCA3NiwgNjUsIDg5LCA3MiwgNjksIDEyOCwgNjUsIDc2LCA2NSwgODksIAotICAgIDcyLCAxOTcsIDY1LCA3NiwgNjUsIDgyLCAyMDUsIDY1LCA3NiwgNjUsIDgwLCA3MiwgMTI4LCA2NSwgNzYsIDQ1LCA3NiwgCi0gICAgNjUsIDc1LCA4NSwgNzgsIDY1LCAxMjgsIDY1LCA3NSwgODQsIDczLCA2OSwgODMsIDY5LCA3NiwgODMsIDc1LCA2NSwgNjYsIAotICAgIDEyOCwgNjUsIDc1LCA4MywgNjUsIDEyOCwgNjUsIDc1LCA3MiwgNzcsIDczLCA3NywgNzMsIDE5NSwgNjUsIDc1LCA2NiwgCi0gICAgNjUsIDIxMCwgNjUsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3NSwgNjUsIDgyLCAxOTMsIDY1LCA3MywgODksIDY1LCAKLSAgICA3OCwgNzgsIDY1LCAxMjgsIDY1LCA3MywgODYsIDczLCA3NiwgNzMsIDIwMywgNjUsIDczLCA4NCwgNzksIDIwNiwgNjUsIAotICAgIDczLCA4MiwgODAsIDc2LCA2NSwgNzgsIDY5LCAxMjgsIDY1LCA3MywgNzgsIDIxMywgNjUsIDczLCA3OCwgNzgsIDEyOCwgCi0gICAgNjUsIDczLCA3NiwgNzcsIDEyOCwgNjUsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzMsIDcyLCA4NiwgODUsIDgzLCAKLSAgICAxMjgsIDY1LCA3MiwgODMsIDY4LCA2NSwgMTI4LCA2NSwgNzIsIDgzLCA2NSwgMTI4LCA2NSwgNzIsIDY1LCA3OCwgMTk5LCAKLSAgICA2NSwgNzIsIDY1LCA3MSwgNzEsIDY1LCAyMTAsIDY1LCA3MiwgNjUsIDY4LCAxMjgsIDY1LCA3MSwgODUsIDc4LCA3MSwgCi0gICAgMTI4LCA2NSwgNzEsIDc5LCA3MSwgMjAxLCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgNzEsIDY1LCA3MywgNzgsIDEyOCwgCi0gICAgNjUsIDcwLCA4NCwgNjksIDIxMCwgNjUsIDcwLCA4MywgNjUsIDY1LCA4MSwgMTI4LCA2NSwgNzAsIDgyLCA3MywgNjcsIDY1LCAKLSAgICAyMDYsIDY1LCA3MCwgNzksIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDczLCA3OSwgNzgsIDY5LCA2OCwgMTI4LCA2NSwgNzAsIAotICAgIDcxLCA3MiwgNjUsIDc4LCAyMDEsIDY1LCA3MCwgNzAsIDgyLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA2OSwgCi0gICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgODksIDEyOCwgNjUsIDY5LCA4MywgNjcsIDg1LCA3NiwgNjUsIDgwLCAKLSAgICA3MywgODUsIDgzLCAxMjgsIDY1LCA2OSwgODMsIDY3LCAxMjgsIDY1LCA2OSwgODMsIDEyOCwgNjUsIDY5LCA4MiwgNzMsIAotICAgIDY1LCAyMDQsIDY1LCA2OSwgODIsIDEyOCwgNjUsIDY5LCA3NiwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgCi0gICAgNjUsIDY5LCA3NiwgMTI4LCA2NSwgNjksIDc1LCAxMjgsIDY1LCA2OSwgNzEsIDY5LCA2NSwgMjA2LCA2NSwgNjksIDcxLCAKLSAgICAxMjgsIDY1LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDY5LCAxMjgsIDY1LCA2OSwgNjgsIAotICAgIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDY1LCA2OSwgNjgsIDEyOCwgNjUsIDY5LCA2NiwgMTI4LCA2NSwgCi0gICAgNjgsIDg2LCA2NSwgNzgsIDg0LCA2NSwgNzEsIDY5LCAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCAKLSAgICA2OCwgNjksIDcxLCAxMjgsIDY1LCA2OCwgNjksIDE5OSwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgODMsIDY5LCAxOTYsIAotICAgIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDIxMSwgNjUsIDY4LCA2OCwgNjUsIDc1LCAxMjgsIDY1LCA2OCwgNjUsIDIwMywgCi0gICAgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgNjksIAotICAgIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNjUsIDY3LCA4NSwgODQsIDE5NywgCi0gICAgNjUsIDY3LCA4NCwgODUsIDY1LCA3NiwgNzYsIDIxNywgNjUsIDY3LCA4NCwgNzMsIDg2LCA2NSwgODQsIDE5NywgNjUsIDY3LCAKLSAgICA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA3MywgMTk1LCA2NSwgNjcsIDc1LCA3OCwgNzksIDg3LCA3NiwgNjksIDY4LCA3MSwgCi0gICAgNjksIDEyOCwgNjUsIDY3LCA2NywgODUsIDc3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDY3LCAKLSAgICA3OSwgODUsIDc4LCAyMTIsIDY1LCA2NywgNjcsIDY5LCA4MCwgODQsIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgNDUsIAotICAgIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCAxMjgsIDY1LCA2NywgCi0gICAgNjcsIDY5LCA3OCwgMjEyLCA2NSwgNjcsIDY1LCA2OCwgNjksIDc3LCAyMTcsIDY1LCA2NiwgODksIDgzLCA3NywgNjUsIAotICAgIDIwNCwgNjUsIDY2LCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNjYsIDc1LCA3MiwgNjUsIDgzLCA3MywgCi0gICAgNjUsIDIwNiwgNjUsIDY2LCA2NiwgODIsIDY5LCA4NiwgNzMsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA2NiwgNjUsIDcwLCAKLSAgICA3MywgNzYsIDczLCAxMjgsIDY1LCA2NiwgMTc4LCA2NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjUsIAotICAgIDg5LCAxMjgsIDY1LCA2NSwgODcsIDEyOCwgNjUsIDY1LCA3OSwgMTI4LCA2NSwgNjUsIDc0LCAxMjgsIDY1LCA2NSwgNjYsIAotICAgIDY1LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OSwgCi0gICAgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCAKLSAgICA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIAotICAgIDUwLCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUxLCAxMjgsIDY1LCA2NSwgCi0gICAgNDgsIDUwLCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDQ4LCAxMjgsIDY1LCAKLSAgICA2NSwgNDgsIDQ5LCA1NywgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU1LCAxMjgsIAotICAgIDY1LCA2NSwgNDgsIDQ5LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUyLCAKLSAgICAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNDksIAotICAgIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgCi0gICAgNDgsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NSwgMTI4LCAKLSAgICA2NSwgNjUsIDQ4LCA0OCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MywgCi0gICAgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCAKLSAgICA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNDksIDEyOCwgNjUsIDQ4LCA1NSwgNDgsIDEyOCwgNjUsIDQ4LCA1NCwgNTcsIAotICAgIDEyOCwgNjUsIDQ4LCA1NCwgNTYsIDEyOCwgNjUsIDQ4LCA1NCwgNTUsIDEyOCwgNjUsIDQ4LCA1NCwgNTQsIDEyOCwgNjUsIAotICAgIDQ4LCA1NCwgNTMsIDEyOCwgNjUsIDQ4LCA1NCwgNTIsIDEyOCwgNjUsIDQ4LCA1NCwgNTEsIDEyOCwgNjUsIDQ4LCA1NCwgCi0gICAgNTAsIDEyOCwgNjUsIDQ4LCA1NCwgNDksIDEyOCwgNjUsIDQ4LCA1NCwgNDgsIDEyOCwgNjUsIDQ4LCA1MywgNTcsIDEyOCwgCi0gICAgNjUsIDQ4LCA1MywgNTYsIDEyOCwgNjUsIDQ4LCA1MywgNTUsIDEyOCwgNjUsIDQ4LCA1MywgNTQsIDEyOCwgNjUsIDQ4LCAKLSAgICA1MywgNTMsIDEyOCwgNjUsIDQ4LCA1MywgNTIsIDEyOCwgNjUsIDQ4LCA1MywgNTEsIDEyOCwgNjUsIDQ4LCA1MywgNTAsIAotICAgIDEyOCwgNjUsIDQ4LCA1MywgNDksIDEyOCwgNjUsIDQ4LCA1MywgNDgsIDEyOCwgNjUsIDQ4LCA1MiwgNTcsIDEyOCwgNjUsIAotICAgIDQ4LCA1MiwgNTYsIDEyOCwgNjUsIDQ4LCA1MiwgNTUsIDEyOCwgNjUsIDQ4LCA1MiwgNTQsIDEyOCwgNjUsIDQ4LCA1MiwgCi0gICAgNTMsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUzLCAxMjgsIDY1LCA0OCwgNTIsIDUyLCAxMjgsIDY1LCA0OCwgNTIsIDUxLCAKLSAgICA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTAsIAotICAgIDEyOCwgNjUsIDQ4LCA1MiwgNDksIDEyOCwgNjUsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDQ4LCAxMjgsIAotICAgIDY1LCA0OCwgNTEsIDU3LCAxMjgsIDY1LCA0OCwgNTEsIDU2LCAxMjgsIDY1LCA0OCwgNTEsIDU1LCAxMjgsIDY1LCA0OCwgCi0gICAgNTEsIDU0LCAxMjgsIDY1LCA0OCwgNTEsIDUzLCAxMjgsIDY1LCA0OCwgNTEsIDUyLCAxMjgsIDY1LCA0OCwgNTEsIDUxLCAKLSAgICAxMjgsIDY1LCA0OCwgNTEsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNjUsIDQ4LCA0OSwgNTIsIAotICAgIDY1LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgCi0gICAgNTMsIDY1LCAxMjgsIDY1LCA0NSwgNjksIDg1LCAxMjgsIDQ1LCA4NSwgMjA1LCA0NSwgODAsIDcyLCA4MiwgODUsIDEyOCwgCi0gICAgNDUsIDc1LCA3MiwgODksIDg1LCAxOTYsIDQ1LCA3NSwgNzIsIDg5LCA3MywgNzYsIDEyOCwgNDUsIDY4LCA5MCwgODUsIAotICAgIDE5NiwgNDUsIDY3LCA3MiwgNjUsIDIxMCwgNDUsIDY3LCA3MiwgNjUsIDc2LCAxMjgsIAorICAgIDEyOCwgNjUsIDc2LCA3NywgNzksIDgzLCAyMTIsIDY1LCA3NiwgNzcsIDEyOCwgNjUsIDc2LCA3NiwgNzksIDEyOCwgNjUsIAorICAgIDc2LCA3NiwgNzMsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA3NiwgNzYsIDIwMSwgNjUsIDc2LCA3NiwgNjUsIDIwMCwgCisgICAgNjUsIDc2LCA3NSwgNjUsIDc2LCA3MywgNDUsIDUwLCAxMjgsIDY1LCA3NiwgNzUsIDY1LCA3NiwgNzMsIDEyOCwgNjUsIDc2LCAKKyAgICA3MywgNzEsIDc4LCA2OSwgMTk2LCA2NSwgNzYsIDczLCA3MCwgODUsIDEyOCwgNjUsIDc2LCA3MywgNjksIDc4LCAxMjgsIAorICAgIDY1LCA3NiwgNzMsIDY5LCAyMDYsIDY1LCA3NiwgNzEsIDczLCAyMTgsIDY1LCA3NiwgNzAsIDY1LCAxMjgsIDY1LCA3NiwgCisgICAgNjksIDg1LCAyMTIsIDY1LCA3NiwgNjksIDgyLCA4NCwgMTI4LCA2NSwgNzYsIDY5LCA4MCwgNzIsIDEyOCwgNjUsIDc2LCAKKyAgICA2OSwgNzcsIDY2LCA3MywgNjcsIDEyOCwgNjUsIDc2LCA2OSwgNzAsIDEyOCwgNjUsIDc2LCA2NSwgODksIDcyLCA2OSwgCisgICAgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDE5NywgNjUsIDc2LCA2NSwgODIsIDIwNSwgNjUsIDc2LCA2NSwgODAsIDcyLCAKKyAgICAxMjgsIDY1LCA3NiwgNDUsIDc2LCA2NSwgNzUsIDg1LCA3OCwgNjUsIDEyOCwgNjUsIDc1LCA4NCwgNzMsIDY5LCA4MywgNjksIAorICAgIDc2LCA4MywgNzUsIDY1LCA2NiwgMTI4LCA2NSwgNzUsIDgzLCA2NSwgMTI4LCA2NSwgNzUsIDcyLCA3NywgNzMsIDc3LCA3MywgCisgICAgMTk1LCA2NSwgNzUsIDY2LCA2NSwgMjEwLCA2NSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDc1LCA2NSwgODIsIDE5MywgCisgICAgNjUsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDczLCA4NiwgNzMsIDc2LCA3MywgMjAzLCA2NSwgNzMsIDg0LCAKKyAgICA3OSwgMjA2LCA2NSwgNzMsIDgyLCA4MCwgNzYsIDY1LCA3OCwgNjksIDEyOCwgNjUsIDczLCA3OCwgMjEzLCA2NSwgNzMsIAorICAgIDc4LCA3OCwgMTI4LCA2NSwgNzMsIDc2LCA3NywgMTI4LCA2NSwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3MywgCisgICAgNzIsIDg2LCA4NSwgODMsIDEyOCwgNjUsIDcyLCA4MywgNjgsIDY1LCAxMjgsIDY1LCA3MiwgODMsIDY1LCAxMjgsIDY1LCAKKyAgICA3MiwgNjUsIDc4LCAxOTksIDY1LCA3MiwgNjUsIDcxLCA3MSwgNjUsIDIxMCwgNjUsIDcyLCA2NSwgNjgsIDEyOCwgNjUsIAorICAgIDcxLCA4NSwgNzgsIDcxLCAxMjgsIDY1LCA3MSwgNzksIDcxLCAyMDEsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDY5LCAxOTYsIDY1LCA3MSwgNjUsIDczLCAKKyAgICA3OCwgMTI4LCA2NSwgNzAsIDg0LCA2OSwgMjEwLCA2NSwgNzAsIDgzLCA2NSwgNjUsIDgxLCAxMjgsIDY1LCA3MCwgODIsIAorICAgIDczLCA2NywgNjUsIDIwNiwgNjUsIDcwLCA3OSwgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgNjksIDY4LCAKKyAgICAxMjgsIDY1LCA3MCwgNzEsIDcyLCA2NSwgNzgsIDIwMSwgNjUsIDcwLCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIAorICAgIDIwNiwgNjUsIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA4OSwgMTI4LCA2NSwgNjksIDgzLCA2NywgCisgICAgODUsIDc2LCA2NSwgODAsIDczLCA4NSwgODMsIDEyOCwgNjUsIDY5LCA4MywgNjcsIDEyOCwgNjUsIDY5LCA4MywgMTI4LCAKKyAgICA2NSwgNjksIDgyLCA3MywgNjUsIDIwNCwgNjUsIDY5LCA4MiwgMTI4LCA2NSwgNjksIDc2LCA2NSwgNDUsIDgwLCA3MywgNzYsIAorICAgIDc2LCA2NSwgMTI4LCA2NSwgNjksIDc2LCAxMjgsIDY1LCA2OSwgNzUsIDEyOCwgNjUsIDY5LCA3MSwgNjksIDY1LCAyMDYsIAorICAgIDY1LCA2OSwgNzEsIDEyOCwgNjUsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgNjksIDEyOCwgCisgICAgNjUsIDY5LCA2OCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjUsIDY5LCA2OCwgMTI4LCA2NSwgNjksIDY2LCAKKyAgICAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgODQsIDY1LCA3MSwgNjksIDEyOCwgNjUsIDY4LCA4NiwgNjUsIDc4LCA2NywgNjksIAorICAgIDEyOCwgNjUsIDY4LCA2OSwgNzEsIDEyOCwgNjUsIDY4LCA2OSwgMTk5LCA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCA4MywgCisgICAgNjksIDE5NiwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgMjExLCA2NSwgNjgsIDY4LCA2NSwgNzUsIDEyOCwgNjUsIDY4LCAKKyAgICA2NSwgMjAzLCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY1LCA2NywgODUsIAorICAgIDg0LCA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA2NSwgNjcsIDg1LCAKKyAgICA4NCwgMTk3LCA2NSwgNjcsIDg0LCA4NSwgNjUsIDc2LCA3NiwgMjE3LCA2NSwgNjcsIDg0LCA3MywgODYsIDY1LCA4NCwgCisgICAgMTk3LCA2NSwgNjcsIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIDczLCAxOTUsIDY1LCA2NywgNzUsIDc4LCA3OSwgODcsIDc2LCAKKyAgICA2OSwgNjgsIDcxLCA2OSwgMTI4LCA2NSwgNjcsIDY3LCA4NSwgNzcsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDY1LCA2NywgNjcsIDc5LCA4NSwgNzgsIDIxMiwgNjUsIDY3LCA2NywgNjksIDgwLCA4NCwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgCisgICAgNzgsIDg0LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIAorICAgIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCAyMTIsIDY1LCA2NywgNjUsIDY4LCA2OSwgNzcsIDIxNywgNjUsIDY2LCA4OSwgCisgICAgODMsIDc3LCA2NSwgMjA0LCA2NSwgNjYsIDg1LCA3OCwgNjgsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA2NiwgNzUsIDcyLCAKKyAgICA2NSwgODMsIDczLCA2NSwgMjA2LCA2NSwgNjYsIDY2LCA4MiwgNjksIDg2LCA3MywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIAorICAgIDY2LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY2LCAxNzgsIDY1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDY1LCA2NSwgODksIDEyOCwgNjUsIDY1LCA4NywgMTI4LCA2NSwgNjUsIDc5LCAxMjgsIDY1LCA2NSwgNzQsIDEyOCwgCisgICAgNjUsIDY1LCA2NiwgNjUsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNTAsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNTEsIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTcsIDEyOCwgNjUsIAorICAgIDY1LCA0OCwgNTAsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTQsIDEyOCwgCisgICAgNjUsIDY1LCA0OCwgNTAsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTEsIAorICAgIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgCisgICAgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MywgMTI4LCA2NSwgNjUsIAorICAgIDQ4LCA0OSwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MCwgMTI4LCA2NSwgCisgICAgNjUsIDQ4LCA0OSwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNDksIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NywgMTI4LCAKKyAgICA2NSwgNjUsIDQ4LCA0OCwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIAorICAgIDY1LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgCisgICAgNDgsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTEsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNDgsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA0OSwgMTI4LCA2NSwgNDgsIDU1LCA0OCwgMTI4LCA2NSwgNDgsIAorICAgIDU0LCA1NywgMTI4LCA2NSwgNDgsIDU0LCA1NiwgMTI4LCA2NSwgNDgsIDU0LCA1NSwgMTI4LCA2NSwgNDgsIDU0LCA1NCwgCisgICAgMTI4LCA2NSwgNDgsIDU0LCA1MywgMTI4LCA2NSwgNDgsIDU0LCA1MiwgMTI4LCA2NSwgNDgsIDU0LCA1MSwgMTI4LCA2NSwgCisgICAgNDgsIDU0LCA1MCwgMTI4LCA2NSwgNDgsIDU0LCA0OSwgMTI4LCA2NSwgNDgsIDU0LCA0OCwgMTI4LCA2NSwgNDgsIDUzLCAKKyAgICA1NywgMTI4LCA2NSwgNDgsIDUzLCA1NiwgMTI4LCA2NSwgNDgsIDUzLCA1NSwgMTI4LCA2NSwgNDgsIDUzLCA1NCwgMTI4LCAKKyAgICA2NSwgNDgsIDUzLCA1MywgMTI4LCA2NSwgNDgsIDUzLCA1MiwgMTI4LCA2NSwgNDgsIDUzLCA1MSwgMTI4LCA2NSwgNDgsIAorICAgIDUzLCA1MCwgMTI4LCA2NSwgNDgsIDUzLCA0OSwgMTI4LCA2NSwgNDgsIDUzLCA0OCwgMTI4LCA2NSwgNDgsIDUyLCA1NywgCisgICAgMTI4LCA2NSwgNDgsIDUyLCA1NiwgMTI4LCA2NSwgNDgsIDUyLCA1NSwgMTI4LCA2NSwgNDgsIDUyLCA1NCwgMTI4LCA2NSwgCisgICAgNDgsIDUyLCA1MywgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTMsIDEyOCwgNjUsIDQ4LCA1MiwgNTIsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MiwgNTEsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUxLCAxMjgsIDY1LCA0OCwgNTIsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIAorICAgIDUyLCA1MCwgMTI4LCA2NSwgNDgsIDUyLCA0OSwgMTI4LCA2NSwgNDgsIDUyLCA0OCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgCisgICAgNDgsIDEyOCwgNjUsIDQ4LCA1MSwgNTcsIDEyOCwgNjUsIDQ4LCA1MSwgNTYsIDEyOCwgNjUsIDQ4LCA1MSwgNTUsIDEyOCwgCisgICAgNjUsIDQ4LCA1MSwgNTQsIDEyOCwgNjUsIDQ4LCA1MSwgNTMsIDEyOCwgNjUsIDQ4LCA1MSwgNTIsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MSwgNTEsIDEyOCwgNjUsIDQ4LCA1MSwgNTAsIDY1LCAxMjgsIDY1LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA2NSwgNDgsIAorICAgIDQ5LCA1MiwgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA2NSwgCisgICAgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNjUsIDQ1LCA2OSwgODUsIDEyOCwgNDUsIDg1LCAyMDUsIDQ1LCA4MCwgNzIsIDgyLCAKKyAgICA4NSwgMTI4LCA0NSwgNzUsIDcyLCA4OSwgODUsIDE5NiwgNDUsIDc1LCA3MiwgODksIDczLCA3NiwgMTI4LCA0NSwgNjgsIAorICAgIDkwLCA4NSwgMTk2LCA0NSwgNjcsIDcyLCA2NSwgMjEwLCA0NSwgNjcsIDcyLCA2NSwgNzYsIDEyOCwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGxleGljb25fb2Zmc2V0W10gPSB7Ci0gICAgMCwgMCwgNiwgMTAsIDE4LCAyMywgMjcsIDM0LCAzOSwgNDEsIDQ0LCA1MCwgNjIsIDcwLCA4MCwgOTMsIDEwMiwgMTA4LCAKKyAgICAwLCAwLCA2LCAxMCwgMTgsIDIzLCAyNywgMzQsIDM5LCA0MSwgNDcsIDUwLCA2MiwgNzAsIDgwLCA5MywgMTAyLCAxMDgsIAogICAgIDExMywgMTIxLCAxMzAsIDEzNSwgMTQwLCAxNDMsIDE0NywgMTUzLCAxNTgsIDE2MywgMTcxLCAxNzgsIDE4NiwgMTkxLCAKICAgICAxOTQsIDIwMCwgMjA4LCAyMTUsIDIyNSwgMjMwLCAyMzcsIDI0NiwgMjQ5LCAyNTQsIDI1NywgMjYzLCAyNjcsIDI3MiwgCiAgICAgMjgxLCAyODgsIDI5NSwgMzAxLCAzMTAsIDMxNSwgMzIxLCAzMjcsIDMzNSwgMTQ0LCAzNDEsIDM0OSwgMzUwLCAzNTgsIAotICAgIDM2MSwgMzY3LCAzNjksIDM3NSwgMzgyLCAzODQsIDM5MSwgMzk1LCA0MDMsIDQxMCwgNDE1LCA0MTcsIDQyMiwgNDI5LCAKLSAgICA0MzEsIDI5OSwgNDM3LCA0MzksIDQ0NCwgNDQ5LCA0NTIsIDQ1NywgNDYzLCA0NzAsIDQ3OSwgNDg5LCA0OTQsIDQ5OCwgCisgICAgMzYxLCAzNjcsIDM2OSwgMzc1LCAzODIsIDM4NCwgMzkxLCAzOTUsIDQwMywgNDEwLCA0MTIsIDQxNywgNDIyLCA0MjcsIAorICAgIDQzNCwgNDM2LCAyOTksIDQ0MiwgNDQ1LCA0NDcsIDQ1MiwgNDU3LCA0NjMsIDQ3MCwgNDc5LCA0ODksIDQ5NCwgNDk4LCAKICAgICA1MDUsIDUxOCwgNTIyLCA1MzEsIDUzOCwgNTQ1LCA1NDgsIDU1NCwgNTU4LCA1NjIsIDU3MiwgNTgwLCA1ODgsIDU5NiwgCi0gICAgNjA1LCA2MTMsIDYxOCwgNjE5LCA2MjMsIDYzMSwgNjM4LCA2NDgsIDY1OSwgNjYzLCA2NjYsIDY3MCwgNjczLCAzNDgsIAotICAgIDY3OCwgNjg3LCA2OTEsIDY5NywgNzAzLCA3MDUsIDcwOCwgNzExLCA3MTQsIDcxOCwgNzIyLCA3MzEsIDczOSwgNzQ0LCAKKyAgICA2MDUsIDYxMywgNjE4LCA2MTksIDYyMywgNjMxLCA2MzgsIDY0OCwgNjUyLCA2NjMsIDY2NywgNjcwLCA2NzMsIDY3OCwgCisgICAgMzQ4LCA2ODIsIDY5MSwgNjk3LCA3MDMsIDcwNSwgNzA4LCA3MTEsIDcxNCwgNzE4LCA3MjIsIDczMSwgNzM5LCA3NDQsIAogICAgIDc0NywgNzUxLCA3NTcsIDc2NCwgNzcxLCA3NzYsIDc4NSwgNzk0LCA4MDEsIDgwNSwgODE4LCA4MjcsIDgzNSwgODQxLCAKICAgICA1NTcsIDg1MCwgODYwLCA4NjcsIDg3MywgODc5LCA4ODYsIDg5NCwgODk4LCA3NDksIDkwNiwgOTE1LCA1MDMsIDkyMywgCiAgICAgOTI4LCA5MzQsIDE3LCA5NDMsIDk0OCwgOTUxLCA5NTUsIDk1OSwgOTY2LCA5NjksIDk3NiwgOTgwLCA5ODgsIDk5MiwgCi0gICAgMTAwMCwgMTAwNCwgMTAwNywgMTAxNCwgMTAyMSwgMTkyLCAxMDI0LCAxMDI5LCAxMDM5LCAxMDQ4LCAxMDU1LCAxMDYxLCAKLSAgICAxMDY5LCAxMDcyLCAxMDc3LCAxMDgzLCAxMDkxLCAxMDk3LCAxMTAyLCAxMTA1LCAxMTA4LCAxMTEsIDExMTMsIDExMTcsIAotICAgIDExMjMsIDExMjksIDExMzIsIDExMzgsIDExNDIsIDExNDcsIDExNTMsIDExNTgsIDExNjgsIDExNzIsIDExNzUsIDExNzgsIAorICAgIDEwMDAsIDEwMDQsIDEwMDcsIDEwMTQsIDEwMjEsIDE5MiwgMTAyNCwgMTAyOSwgMTAzOSwgMTA0OCwgMTA1NSwgMTA2MCwgCisgICAgMTA2NiwgMTA3MiwgMTA4MCwgMTA4MywgMTA4OCwgMTA5NCwgMTEwMiwgMTEwNywgMTExMCwgMTExMywgMTExLCAxMTE4LCAKKyAgICAxMTIyLCAxMTI4LCAxMTM0LCAxMTM3LCAxMTQzLCAxMTQ3LCAxMTUyLCAxMTU4LCAxMTY4LCAxMTcyLCAxMTc1LCAxMTc4LCAKICAgICAxMTg3LCAxMTkxLCAxMTk0LCAxMTk5LCAxMjA0LCAxMjEwLCAxMjE1LCAxMjIwLCAxMjI1LCAxMjI5LCAxMjM0LCAxMjQwLCAKICAgICAxMjQ1LCAxMjUwLCAxMjU0LCAxMjYwLCAxMjY1LCAxMjcwLCAxMjc1LCAxMjc5LCAxMjg0LCAxMjg5LCAxMjk0LCAxMzAwLCAKICAgICAxMzA2LCAxMzEyLCAxMzE3LCAxMzIxLCAxMzI2LCAxMzMxLCAxMzM2LCAxMzQwLCAxMzQ1LCAxMzUwLCAxMzU1LCAxMzYwLCAKQEAgLTQ2NTAsNyArNDY1Myw3IEBACiAgICAgMTY2NSwgMTY3MCwgMTY3NSwgMTY3OSwgMTY4MiwgMTY4NywgMTY5MiwgMTY5NywgMTcwMiwgMTcwOCwgMTcxMywgMTcxNywgCiAgICAgMTMyMiwgMTcyMCwgMTcyNSwgMTczMCwgMTMyNywgMTczNCwgMTczOCwgMTc0NSwgMTMzMiwgMTc1MiwgMTMzNywgMTc1NiwgCiAgICAgMTc1OCwgMTc2MywgMTc2OSwgMTM0MSwgMTc3NCwgMTc4MywgMTM0NiwgMTc4OCwgMTc5NCwgMTM1MSwgMTc5OSwgMTgwNCwgCi0gICAgMTgwNywgMTgxMiwgMTgxNiwgMTgyMCwgMTgyNCwgMTgyNywgMTgzMSwgMTM1NiwgMTM2MSwgMTE1NiwgMTgzNiwgMTg0MiwgCisgICAgMTgwNywgMTgxMiwgMTgxNiwgMTgyMCwgMTgyNCwgMTgyNywgMTgzMSwgMTM1NiwgMTM2MSwgMTA1OCwgMTgzNiwgMTg0MiwgCiAgICAgMTg0OCwgMTg1NCwgMTg2MCwgMTg2NiwgMTg3MiwgMTg3OCwgMTg4NCwgMTg4OSwgMTg5NSwgMTkwMSwgMTkwNywgMTkxMywgCiAgICAgMTkxOSwgMTkyNSwgMTkzMSwgMTkzNywgMTk0MywgMTk0OCwgMTk1MywgMTk1OCwgMTk2MywgMTk2OCwgMTk3MywgMTk3OCwgCiAgICAgMTk4MywgMTk4OCwgMTk5MywgMTk5OSwgMjAwNCwgMjAxMCwgMjAxNSwgMjAyMSwgMjAyNywgMjAzMiwgMjAzOCwgMjA0NCwgCkBAIC00Njc3LDcgKzQ2ODAsNyBAQAogICAgIDMyNDEsIDMyNDUsIDMyNDgsIDMyNjEsIDMyNjUsIDMyNjksIDMyNzMsIDMyNzcsIDMyODEsIDMyODQsIDMyODgsIDMyOTIsIAogICAgIDMyOTcsIDMzMDEsIDMzMDYsIDMzMTEsIDMzMTYsIDMzMjAsIDMzMjMsIDMzMjYsIDMzMzIsIDMzMzYsIDMzNDAsIDMzNDMsIAogICAgIDMzNDcsIDMzNTEsIDMzNTQsIDMzNjAsIDMzNjUsIDMzNzAsIDMzNzYsIDMzODEsIDMzODYsIDMzOTIsIDMzOTgsIDM0MDMsIAotICAgIDM0MDgsIDM0MTMsIDExMTUsIDU0NywgMzQxOCwgMzQyMSwgMzQyNiwgMzQzMCwgMzQzMywgMzQzNywgMzQ0MiwgMzQ0NywgCisgICAgMzQwOCwgMzQxMywgMTEyMCwgNTQ3LCAzNDE4LCAzNDIxLCAzNDI2LCAzNDMwLCAzNDMzLCAzNDM3LCAzNDQyLCAzNDQ3LCAKICAgICAzNDUxLCAzNDU2LCAzNDYwLCAzNDY1LCAzNDY5LCAzNDczLCAzNDc5LCAzNDg1LCAzNDg4LCAzNDkxLCAzNDk3LCAzNTA0LCAKICAgICAzNTExLCAzNTE3LCAzNTI0LCAzNTI5LCAzNTMzLCAzNTQwLCAzNTQ3LCAzNTUyLCAzNTU2LCAzNTY2LCAzNTcwLCAzNTc0LCAKICAgICAzNTc5LCAzNTg0LCAzNTk0LCAyMTA3LCAzNTk5LCAzNjAzLCAzNjA2LCAzNjEyLCAzNjE3LCAzNjIzLCAzNjI5LCAzNjM0LCAKQEAgLTQ3MjYsNyArNDcyOSw3IEBACiAgICAgNjY4MywgNjY5OCwgNjcxMywgNjcyOCwgNjc0MywgNjc1OCwgNjc3MywgNjc4OCwgNjgwMywgNjgxOCwgNjgzMywgNjg0OCwgCiAgICAgNjg2MywgNjg3OCwgNjg5MywgNjkwOCwgNjkyMywgNjkzOCwgNjk1MywgNjk2OCwgNjk4MywgNjk5OCwgNzAxMywgNzAyOCwgCiAgICAgNzAzNywgNzA0NiwgNzA1MSwgNzA1NywgNzA2NywgNzA3MSwgNzA3NiwgNzA4MSwgNzA4OSwgNzA5MywgNzA5NiwgNzEwMCwgCi0gICAgMjk3NSwgNzEwMywgNzEwOCwgMjk4LCA0NDIsIDcxMTQsIDcxMjIsIDcxMjYsIDcxMzAsIDcxMzMsIDcxMzcsIDcxNDMsIAorICAgIDI5NzUsIDcxMDMsIDcxMDgsIDI5OCwgNDI1LCA3MTE0LCA3MTIyLCA3MTI2LCA3MTMwLCA3MTMzLCA3MTM3LCA3MTQzLCAKICAgICA3MTQ3LCA3MTU1LCA3MTYxLCA3MTY2LCA3MTczLCA3MTgwLCA3MTg2LCA3MTkxLCA3MTk4LCA3MjA0LCA3MjEyLCA3MjE2LCAKICAgICA3MjIxLCA3MjMzLCA3MjQ0LCA3MjUxLCA3MjU1LCA3MjU5LCA3MjY1LCAzMjMzLCA3MjY5LCA3Mjc1LCA3MjgwLCA3Mjg1LCAKICAgICA3MjkwLCA3Mjk2LCA3MzAxLCA3MzA2LCA3MzExLCA3MzE2LCA3MzIyLCA3MzI3LCA3MzMyLCA3MzM4LCA3MzQzLCA3MzQ5LCAKQEAgLTQ3NTUsNzI1MiArNDc1OCw3MjUwIEBACiAgICAgODY0NSwgODY0OSwgODY1MywgODY1OCwgODY2NSwgODY3NiwgODY4NCwgODY5NCwgODcwMCwgODcwNywgODcxMiwgODcxNiwgCiAgICAgODcyNywgODc0MCwgODc1MSwgODc2NCwgODc3NSwgODc4NywgODc5OSwgODgxMSwgODgyNCwgODgzNywgODg0NCwgODg1MCwgCiAgICAgODg2NCwgODg3MSwgODg3NywgODg4MSwgODg4NiwgODg5MCwgODg5NywgODkwNSwgODkwOSwgODkxNSwgODkxOSwgODkyNSwgCi0gICAgODkzNSwgODkzOSwgODk0NCwgODk0OSwgODk1NiwgODk2MiwgODk3MiwgNzkwOSwgODk3OCwgODk4MiwgODk4OSwgNzY4LCAKLSAgICA4OTkzLCA4OTk3LCA5MDAyLCA5MDA3LCA5MDEyLCA5MDE2LCA5MDIyLCA5MDMwLCA5MDM2LCA5MDQwLCA5MDQ2LCA5MDU2LCAKLSAgICA5MDYwLCA5MDY2LCA5MDcxLCA5MDc1LCA5MDgxLCA5MDg3LCAyMTYxLCA5MDkyLCA5MDk0LCA5MDk5LCA5MTA3LCA5MTE2LCAKLSAgICA5MTIwLCA5MTI2LCA5MTMxLCA5MTM2LCA5MTQxLCA5MTQ2LCA5MTUyLCA5MTU3LCA5MTYyLCA0MDA2LCA5MTY3LCA5MTcyLCAKLSAgICA5MTc2LCA5MTgyLCA5MTg3LCA5MTkzLCA5MTk4LCA5MjAzLCA5MjA5LCA5MjE0LCA5MTIxLCA5MjIwLCA5MjI0LCA5MjMxLCAKLSAgICA5MjM3LCA5MjQyLCA5MjQ2LCA2MTgzLCA5MjUxLCA5MjYwLCA5MjY1LCA5MjcwLCA4MjE4LCA4MjI1LCA5Mjc1LCAyODUzLCAKLSAgICA5Mjc5LCA5Mjg0LCA5Mjg5LCA5MTMyLCA5MjkzLCA5Mjk4LCA5MTM3LCA5MTQyLCA5MzAzLCA5MzEwLCA5MzE3LCA5MzIzLCAKLSAgICA5MzI5LCA5MzM1LCA5MzQwLCA5MzQ1LCA5MzUwLCA5MTQ3LCA5MTUzLCA5MzU2LCA5MzYyLCA5MzY3LCA5Mzc1LCA5MTU4LCAKLSAgICA5MzgwLCA5OTAsIDkzODMsIDkzOTEsIDkzOTcsIDk0MDMsIDk0MTIsIDk0MjAsIDk0MjUsIDk0MzEsIDk0MzksIDk0NDYsIAotICAgIDk0NjEsIDk0NzgsIDk0OTcsIDk1MDYsIDk1MTQsIDk1MjksIDk1NDAsIDk1NTAsIDk1NjAsIDk1NjgsIDk1NzQsIDk1ODYsIAotICAgIDk1OTUsIDk2MDMsIDk2MTAsIDk2MTcsIDk2MjMsIDk2MjgsIDk2MzYsIDk2NDYsIDk2NTMsIDk2NjMsIDk2NzMsIDk2ODMsIAotICAgIDk2OTEsIDk2OTgsIDk3MDcsIDk3MTcsIDk3MzEsIDk3NDYsIDk3NTUsIDk3NjMsIDk3NjgsIDk3NzIsIDk3ODEsIDk3ODcsIAotICAgIDk3OTIsIDk4MDIsIDk4MTIsIDk4MjIsIDk4MjcsIDk4MzEsIDk4NDAsIDk4NDUsIDk4NTUsIDk4NjYsIDk4NzksIDk4ODcsIAotICAgIDk5MDAsIDk5MTIsIDk5MjAsIDk5MjUsIDk5MjksIDk5MzUsIDk5NDAsIDk5NDgsIDk5NTYsIDk5NjMsIDk5NjgsIDk5NzYsIAotICAgIDk5ODIsIDk5ODUsIDk5ODksIDk5OTUsIDEwMDAzLCAxMDAwOCwgMTAwMTIsIDEwMDIwLCAxMDAyOSwgMTAwMzcsIDEwMDQzLCAKLSAgICAxMDA0NywgMTAwNTQsIDEwMDY1LCAxMDA2OSwgMTAwNzIsIDEwMDc4LCA5MTYzLCAxMDA4MywgMTAwODksIDEwMDk2LCAKLSAgICAxMDEwMiwgMTAxMDcsIDEwMTE0LCAxMDEyMSwgMTAxMjgsIDEwMTM1LCAxMDE0MiwgMTAxNDksIDEwMTU2LCAxMDE2MywgCi0gICAgMTAxNjgsIDk0NzQsIDEwMTczLCAxMDE3OSwgMTAxODYsIDEwMTkzLCAxMDE5OCwgMTAyMDUsIDEwMjE0LCAxMDIxOCwgCi0gICAgMTAyMzAsIDgyNTYsIDEwMjM0LCAxMDIzNywgMTAyNDEsIDEwMjQ1LCAxMDI0OSwgMTAyNTMsIDEwMjU5LCAxMDI2NSwgCi0gICAgMTAyNzAsIDEwMjc2LCAxMDI4MSwgMTAyODYsIDEwMjkyLCAxMDI5NywgMTAzMDIsIDg5NTIsIDEwMzA3LCAxMDMxMSwgCi0gICAgMTAzMTUsIDEwMzE5LCAxMDMyNCwgMTAzMjksIDEwMzM3LCAxMDM0MywgMTAzNDcsIDEwMzUxLCAxMDM1OCwgMTAzNjMsIAotICAgIDEwMzcxLCAxMDM3NiwgMTAzODAsIDEwMzgzLCAxMDM4OSwgMTAzOTYsIDEwNDAwLCAxMDQwMywgMTA0MDgsIDEwNDEyLCAKLSAgICA0MDQ1LCAxMDQxOCwgMTA0MjcsIDM2LCAxMDQzNSwgMTA0NDEsIDEwNDQ2LCA4OTY3LCAxMDQ1MSwgMTA0NTYsIDEwNDYwLCAKLSAgICAxMDQ2MywgMTA0NzgsIDEwNDk3LCAxMDUwOSwgMTA1MjIsIDEwNTM1LCAxMDU0OCwgMTA1NjIsIDEwNTc1LCAxMDU5MCwgCi0gICAgMTA1OTcsIDkxNjgsIDEwNjAzLCAxMDYxNywgMTA2MjIsIDEwNjI4LCAxMDYzMywgMTA2NDEsIDEwNjQ2LCA4MDQwLCAKLSAgICAxMDY1MSwgMTA2NTQsIDEwNjYxLCAxMDY2NiwgMTA2NzAsIDI4NTgsIDk5OCwgMTA2NzYsIDEwNjgwLCAxMDY4NiwgMTA2OTIsIAotICAgIDEwNjk3LCAxMDcwMywgMTA3MDgsIDkxNzcsIDEwNzE0LCAxMDcyMCwgMTA3MjUsIDEwNzMwLCAxMDczOCwgMTA3NDQsIAotICAgIDEwNzU3LCAxMDc2NSwgMTA3NzIsIDkxODMsIDEwNzc4LCAxMDc4NiwgMTA3OTQsIDEwODAxLCAxMDgxNCwgMTA4MjYsIAotICAgIDEwODM2LCAxMDg0NCwgMTA4NTEsIDEwODU4LCAxMDg2NywgMTA4NzYsIDEwODg0LCAxMDg5MSwgMTA4OTYsIDEwOTAyLCAKLSAgICA5MTg4LCAxMDkwNywgMTA5MTMsIDkxOTQsIDEwOTE4LCAxMDkyMSwgMTA5MjgsIDEwOTM0LCAxMDk0NywgODY2OSwgMTA5NTgsIAotICAgIDEwOTY0LCAxMDk3MywgMTA5ODEsIDEwOTg4LCAxMDk5NCwgMTEwMDAsIDExMDA1LCAxMTAwOSwgMTEwMTQsIDEwNDcwLCAKLSAgICAxMTAyMCwgOTE5OSwgMTEwMjcsIDExMDMyLCAxMTAzOSwgMTEwNDUsIDExMDUxLCAxMTA1NiwgMTEwNjQsIDExMDcyLCAKLSAgICAxMTA3OSwgMTEwODMsIDExMDk3LCAxMTEwNywgMTExMTIsIDExMTE2LCAxMTEyNywgMTExMzMsIDExMTM4LCAxMTE0MywgCi0gICAgOTIwNCwgOTIxMCwgMTExNDcsIDExMTUwLCAxMTE1NSwgMTExNjcsIDExMTc0LCAxMTE3OSwgMTExODMsIDExMTg4LCAKLSAgICAxMTE5MiwgMTExOTksIDExMjA1LCA5MjE1LCA5MTIyLCAxMTIxMiwgMjg2MywgOCwgMTEyMTksIDExMjI0LCAxMTIyOCwgCi0gICAgMTEyMzQsIDExMjQyLCAxMTI1MiwgMTEyNTcsIDExMjYyLCAxMTI2OSwgMTEyNzYsIDExMjgwLCAxMTI5MSwgMTEzMDEsIAotICAgIDExMzEwLCAxMTMyMiwgMTEzMjcsIDExMzMxLCAxMTMzOSwgMTEzNTMsIDExMzU3LCAxMTM2MCwgMTEzNjgsIDExMzc1LCAKLSAgICAxMTM4MywgMTEzODcsIDExMzk4LCAxMTQwMiwgMTE0MDksIDExNDE0LCAxMTQxOCwgMTE0MjQsIDExNDI5LCAxMTQzMywgCi0gICAgMTE0MzksIDExNDQ0LCAxMTQ1NSwgMTE0NTksIDExNDYyLCAxMTQ2OCwgMTE0NzMsIDExNDc5LCAxMTQ4NSwgMTE0OTIsIAotICAgIDExNTAzLCAxMTUxMywgMTE1MjMsIDExNTMyLCAxMTUzOSwgMTE1NDgsIDkyMjUsIDkyMzIsIDkyMzgsIDkyNDMsIDExNTU0LCAKLSAgICAxMTU2MCwgOTI0NywgMTE1NjYsIDExNTY5LCAxMTU3NiwgMTE1ODEsIDExNTk2LCAxMTYxMiwgMTE2MjcsIDExNjM1LCAKLSAgICAxMTY0MSwgMTE2NDYsIDgzOCwgNDIwLCAxMTY1MSwgMTE2NTksIDExNjY2LCAxMTY3MiwgMTE2NzcsIDExNjgyLCA5MjUyLCAKLSAgICAxMTY4NCwgMTE2ODgsIDExNjkzLCAxMTY5NywgMTE3MDcsIDExNzEyLCAxMTcxNiwgMTE3MjUsIDExNzI5LCAxMTczMiwgCi0gICAgOTI2MSwgMTE3MzksIDExNzQyLCAxMTc1MCwgMTE3NTcsIDExNzY1LCAxMTc2OSwgMTE3NzYsIDExNzg1LCAxMTc4OCwgCi0gICAgMTE3OTIsIDExNzk2LCAxMTgwMiwgMTE4MDYsIDExODEwLCAxMTgxNCwgMTE4MjAsIDExODMwLCAxMTgzNCwgMTE4NDIsIAotICAgIDExODQ2LCAxMTg1MywgMTE4NTcsIDExODYyLCAxMTg2NiwgMTE4NzMsIDExODc5LCAxMTg4NywgMTE4OTMsIDExODk4LCAKLSAgICAxMTkwOCwgMTE5MTMsIDExOTE4LCAxMTkyMiwgMTE5MzAsIDM5MDUsIDExOTM4LCAxMTk0MywgOTI2NiwgMTE5NDcsIAotICAgIDExOTUxLCAxMTk1NCwgMTE5NjIsIDExOTY5LCAxMTk3MywgNTk5MSwgMTE5NzcsIDExOTgyLCAxMTk4NiwgMTE5OTcsIAotICAgIDEyMDA3LCAxMjAxMiwgMTIwMTgsIDEyMDIyLCAxMjAyNSwgMTIwMzMsIDEyMDM4LCAxMjA0MywgMTIwNTAsIDEyMDU1LCAKLSAgICA5MjcxLCAxMjA2MCwgMTIwNjQsIDEyMDcxLCAxNzIyLCA2MTQ1LCAxMjA3NiwgMTIwODEsIDEyMDg2LCAxMjA5MSwgMTIwOTcsIAotICAgIDEyMTAyLCAxMjEwOCwgMTIxMTMsIDEyMTE4LCAxMjEyMywgMTIxMjgsIDEyMTMzLCAxMjEzOCwgMTIxNDMsIDEyMTQ4LCAKLSAgICAxMjE1MywgMTIxNTgsIDEyMTYzLCAxMjE2OCwgMTIxNzMsIDEyMTc4LCAxMjE4MywgMTIxODgsIDEyMTk0LCAxMjE5OSwgCi0gICAgMTIyMDQsIDEyMjA5LCAxMjIxNCwgMTIyMTksIDEyMjI1LCAxMjIzMCwgMTIyMzUsIDEyMjQxLCAxMjI0NiwgMTIyNTIsIAotICAgIDEyMjU3LCAxMjI2MywgMTIyNjgsIDEyMjczLCAxMjI3OCwgMTIyODMsIDEyMjg5LCAxMjI5NCwgMTIyOTksIDEyMzA0LCAKLSAgICA3MzcsIDEzOSwgMTIzMTIsIDEyMzE2LCAxMjMyMSwgMTIzMjYsIDEyMzMwLCAxMjMzNCwgMTIzMzgsIDEyMzQzLCAxMjM0NywgCi0gICAgMTIzNTIsIDEyMzU2LCAxMjM1OSwgMTIzNjMsIDEyMzY3LCAxMjM3MywgMTIzNzgsIDEyMzg4LCAxMjM5NCwgMTI0MDIsIAotICAgIDEyNDA2LCAxMjQxMCwgMTI0MTcsIDEyNDI1LCAxMjQzNCwgMTI0NDUsIDEyNDUyLCAxMjQ1OSwgMTI0NjMsIDEyNDcyLCAKLSAgICAxMjQ4MSwgMTI0ODksIDEyNDk4LCAxMjUwNywgMTI1MTYsIDEyNTI1LCAxMjUzNSwgMTI1NDUsIDEyNTU1LCAxMjU2NSwgCi0gICAgMTI1NzUsIDEyNTg0LCAxMjU5NCwgMTI2MDQsIDEyNjE0LCAxMjYyNCwgMTI2MzQsIDEyNjQ0LCAxMjY1NCwgMTI2NjMsIAotICAgIDEyNjczLCAxMjY4MywgMTI2OTMsIDEyNzAzLCAxMjcxMywgMTI3MjMsIDEyNzMyLCAxMjc0MiwgMTI3NTIsIDEyNzYyLCAKLSAgICAxMjc3MiwgMTI3ODIsIDEyNzkyLCAxMjgwMiwgMTI4MTIsIDEyODIyLCAxMjgzMSwgMTI4NDEsIDEyODUxLCAxMjg2MSwgCi0gICAgMTI4NzEsIDEyODgxLCAxMjg5MSwgMTI5MDEsIDEyOTExLCAxMjkyMSwgMTI5MzEsIDEyOTQwLCAxMjU2LCAxMjk0NiwgCi0gICAgMTI5NDksIDEyOTUzLCAxMjk1OCwgMTI5NjUsIDEyOTcxLCAxMjk3NiwgMTI5ODAsIDEyOTg1LCAxMjk5NCwgMTMwMDIsIAotICAgIDEzMDA3LCAxMzAxMSwgMTMwMTUsIDEzMDIxLCAxMzAyNiwgMTMwMzIsIDkyODAsIDEzMDM3LCAxMzA0MiwgMTMwNTEsIAotICAgIDkyODUsIDEzMDU2LCAxMzA1OSwgMTMwNjUsIDEzMDczLCA5MjkwLCAxMzA4MCwgMTMwODQsIDEzMDg4LCAxMzA5MiwgCi0gICAgMTMxMDIsIDEzMTA4LCAxMzExNCwgMTMxMTksIDEzMTI4LCAxMzEzNiwgMTMxNDMsIDEzMTUwLCAxMzE1NSwgMTMxNjIsIAotICAgIDEzMTY3LCAxMzE3MSwgMTMxNzQsIDEzMTg1LCAxMzE5NSwgMTMyMDQsIDEzMjEyLCAxMzIyMywgMTMyMzUsIDEzMjQ1LCAKLSAgICAxMzI1MCwgMTMyNTQsIDEzMjU5LCAxMzI2NCwgMTMyNjgsIDEzMjc0LCAxMzI4MiwgMTMyODksIDEzMzAwLCAxMzMwNSwgCi0gICAgMTMzMTUsIDEzMzE5LCAxMzMyMiwgMTMzMjksIDEzMzM5LCAxMzM0OCwgMTMzNTUsIDEzMzU5LCAxMzM2NiwgMTMzNzIsIAotICAgIDEzMzc3LCAxMzM4MiwgMTMzODYsIDEzMzk1LCAxMzQwMCwgMTM0MDYsIDEzNDEwLCAxMzQxNSwgMTM0MTksIDEzNDI4LCAKLSAgICAxMzQzNiwgMTM0NDQsIDEzNDUxLCAxMzQ1OSwgMTM0NzEsIDEzNDgyLCAxMzQ5MiwgMTM0OTksIDEzNTA1LCAxMzUxNCwgCi0gICAgMTM1MjUsIDEzNTM0LCAxMzU0NiwgMTM1NTgsIDEzNTcwLCAxMzU4MCwgMTM1ODksIDEzNTk4LCAxMzYwNiwgMTM2MTMsIAotICAgIDEzNjIyLCAxMzYzMCwgMTM2MzQsIDEzNjQwLCAxMzY0NiwgMTM2NTEsIDc3NTMsIDEzNjU1LCAxMzY1NywgMTM2NjEsIAotICAgIDEzNjY2LCAxMzY3MiwgMTM2ODEsIDEzNjg1LCAxMzY5MywgMTM3MDAsIDEzNzA5LCAxMzcxOCwgMTM3MjcsIDEzNzM2LCAKLSAgICAxMzc0NSwgMTM3NTQsIDEzNzYzLCAxMzc3MiwgMTM3ODIsIDEzNzkyLCAxMzgwMSwgMTM4MDcsIDEzODE0LCAxMzgyMSwgCi0gICAgMTM4MjcsIDEzODQxLCAxMzg0OCwgMTM4NTYsIDEzODY1LCAxMzg3MSwgMTM4ODAsIDEzODg5LCAxMzkwMCwgMTM5MTAsIAotICAgIDEzOTE4LCAxMzkyNSwgMTM5MzMsIDEzOTQyLCAxMzk1NSwgMTM5NjMsIDEzOTcwLCAxMzk4MywgMTM5ODksIDEzOTk1LCAKLSAgICAxNDAwNSwgMTQwMTQsIDE0MDIzLCAxNDAyOCwgMTQwMzIsIDE0MDM4LCAxNDA0NCwgMTQwNTEsIDg5NjYsIDE0MDU2LCAKLSAgICAxNDA2MSwgMTQwNjgsIDE0MDczLCAxMjM2OSwgMTQwNzgsIDE0MDg2LCAxNDA5MiwgMTQwOTcsIDE0MTA1LCAxNDExMywgCi0gICAgMTQxMjAsIDE0MTI4LCAxNDEzNCwgMTQxNDIsIDE0MTUwLCAxNDE1NiwgMTQxNjEsIDE0MTY3LCAxNDE3NCwgMTQxODAsIAotICAgIDE0MTg1LCAxNDE4OSwgMTQyMDAsIDE0MjA4LCAxNDIxNCwgMTQyMTksIDE0MjI4LCAxNDIzNCwgMTQyMzksIDE0MjQ4LCAKLSAgICAxNDI2MiwgMzg1MywgMTQyNjYsIDE0MjcxLCAxNDI3NiwgMTQyODIsIDE0Mjg3LCAxNDI5MiwgMTQyOTYsIDE0MzAxLCAKLSAgICAxNDMwNiwgMTQzMTEsIDc3NTIsIDE0MzE2LCAxNDMyMSwgMTQzMjYsIDE0MzMxLCAxNDMzNiwgMTQzNDAsIDE0MzQ1LCAKLSAgICAxNDM1MCwgMTQzNTUsIDE0MzYwLCAxNDM2NiwgMTQzNzIsIDE0Mzc3LCAxNDM4MSwgMTQzODYsIDE0MzkxLCAxNDM5NiwgCi0gICAgOTI5NCwgMTQ0MDEsIDE0NDA2LCAxNDQxMSwgMTQ0MTYsIDE0NDIxLCAxNDQzOCwgMTQ0NTYsIDE0NDY4LCAxNDQ4MSwgCi0gICAgMTQ0OTgsIDE0NTE0LCAxNDUzMSwgMTQ1NDEsIDE0NTYwLCAxNDU3MSwgMTQ1ODIsIDE0NTkzLCAxNDYwNCwgMTQ2MTYsIAotICAgIDE0NjI3LCAxNDYzOCwgMTQ2NTUsIDE0NjY2LCAxNDY3NywgMTQ2ODIsIDkyOTksIDE0Njg3LCAxNDY5MSwgMjM4MSwgCi0gICAgMTQ2OTUsIDE0Njk4LCAxNDcwNCwgMTQ3MTIsIDE0NzIwLCAxNDcyNSwgMTQ3MzMsIDE0NzQxLCAxNDc0OCwgMTQ3NTMsIAotICAgIDE0NzU5LCAxNDc2NiwgMTQ3NzQsIDE0NzgxLCAxNDc5MywgMTQ4MDEsIDE0ODA2LCAxMTU5MCwgMTQ4MTIsIDE0ODIxLCAKLSAgICAxNDgzMCwgMTQ4MzgsIDE0ODQ1LCAxNDg1MSwgMTQ4NTksIDE0ODY2LCAxNDg3MiwgMTQ4NzksIDE0ODg1LCAxNDg5NCwgCi0gICAgMTQ5MDIsIDE0OTEyLCAxNDkxOSwgMTQ5MjUsIDE0OTMzLCAxNDkzOSwgMTQ5NDcsIDE0OTU0LCAxNDk2NywgMTQ5NzQsIAotICAgIDE0OTgzLCAxNDk5MiwgMTUwMDEsIDE1MDA5LCAxNTAxOSwgMTUwMjYsIDE1MDMxLCAzNTYwLCAxNTAzOCwgMTUwNDMsIAotICAgIDEzNzIsIDE1MDQ3LCAxNDMxNywgMTUwNTEsIDE1MDU3LCAxNTA2MSwgMTUwNjksIDE1MDgxLCAxNTA4NiwgMTUwOTMsIAotICAgIDE1MDk5LCAxNTEwNCwgMTUxMTEsIDE0MzIyLCAxNTExNSwgMTUxMTksIDE1MTIzLCAxNDMyNywgMTUxMjcsIDE0MzMyLCAKLSAgICAxNTEzMSwgMTUxMzgsIDE1MTQzLCAxNTE0NywgMTUxNTQsIDE1MTU4LCAxNTE2NiwgMTUxNzMsIDE1MTc3LCAxNTE4NCwgCi0gICAgMTUyMDEsIDE1MjEwLCAxNTIxNCwgMTUyMTcsIDE1MjI1LCAxNTIzMSwgMTUyMzYsIDM2MzgsIDE1MjQwLCAxNTI0MiwgCi0gICAgMTUyNTAsIDE1MjU3LCAxNTI2NywgMTUyNzksIDE1Mjg0LCAxNTI5MCwgMTUyOTUsIDE1Mjk5LCAxNTMwNSwgMTUzMTAsIAotICAgIDE1MzE2LCAxNTMxOSwgMTUzMjYsIDE1MzM0LCAxNTM0MSwgMTUzNDcsIDE1MzUzLCAxNTM1OCwgMTUzNjUsIDE1MzcxLCAKLSAgICAxNTM3NiwgMTUzODMsIDE1Mzg3LCAxNTM5MywgMTUzOTcsIDE1NDA0LCAxNTQxMCwgMTU0MTYsIDE1NDI0LCAxNTQzMCwgCi0gICAgMTU0MzUsIDE1NDQxLCAxNTQ0OSwgMTU0NTcsIDE1NDYzLCAxNTQ2OSwgMTU0NzQsIDE1NDgxLCAxNTQ4NiwgMTU0OTAsIAotICAgIDE1NDk2LCAxNTUwMSwgMTU1MDgsIDE1NTEzLCAxNTUxOSwgMTU1MjIsIDE1NTI4LCAxNTUzNCwgMTU1MzcsIDE1NTQxLCAKLSAgICAxNTU1MywgMTU1NTksIDE1NTY0LCAxNTU3MSwgMTU1NzcsIDE1NTgzLCAxNTU5NCwgMTU2MDQsIDE1NjEzLCAxNTYyMSwgCi0gICAgMTU2MjgsIDE1NjM5LCAxNTY0OSwgMTU2NTksIDE1NjY3LCAxNTY3MCwgMTQzNDYsIDE1Njc1LCAxNTY4MCwgMTQzNTEsIAotICAgIDE0NDg2LCAxNTY4OCwgMTU3MDEsIDE1NzE2LCAxNTcyNywgMTQ1MDMsIDE1NzQ1LCAxNTc1OCwgMTU3NzEsIDE1NzgyLCAKLSAgICAxMDQ4NSwgMTU3OTMsIDE1ODA2LCAxNTgyNSwgMTU4MzYsIDE1ODQ3LCAxNTg1OCwgMjY0OSwgMTU4NzEsIDE1ODc1LCAKLSAgICAxNTg4MywgMTU4OTgsIDE1OTEzLCAxNTkyNCwgMTU5MzEsIDE1OTM3LCAxNTk0NSwgMTU5NDksIDE1OTU1LCAxNTk1OCwgCi0gICAgMTU5NjgsIDE1OTc2LCAxNTk4MywgMTU5OTEsIDE2MDAxLCAxNjAwNiwgMTYwMTMsIDE2MDE4LCAxNjAyNSwgMTYwMzYsIAotICAgIDE2MDQ2LCAxNjA1MiwgMTYwNTcsIDE2MDYyLCAxNDM1NiwgMTYwNjYsIDE2MDcyLCAxNjA3OCwgMTYwODMsIDE2MDg4LCAKLSAgICAxNjA5MywgMTYwOTcsIDE0MzYxLCAxNDM2NywgMTYxMDEsIDE0MzczLCAxNjEwNiwgMTYxMTQsIDE2MTIzLCAxNjEzMCwgCi0gICAgOTE0MywgMTYxMzQsIDE2MTM2LCAxNjE0MSwgMTYxNDYsIDE2MTUyLCAxNjE1NywgMTYxNjIsIDE2MTY3LCAxNjE3MiwgCi0gICAgMTYxNzYsIDE2MTgyLCAxNjE4OCwgMTYxOTMsIDE2MTk5LCAxNjIwNCwgMTYyMDksIDE2MjE1LCAxNjIyMCwgMTYyMjUsIAotICAgIDE2MjMwLCAxNjIzNSwgMTYyNDEsIDE2MjQ2LCAxNjI1MSwgMTYyNTcsIDE2MjYzLCAxNjI2OCwgMTYyNzMsIDE2MjgwLCAKLSAgICAxNjI4NiwgMTYyOTcsIDE2MzA0LCAxNjMwOSwgMTYzMTMsIDE2MzE3LCAxNjMyMCwgMTYzMjgsIDE2MzMzLCAxNjM0MCwgCi0gICAgMTYzNDcsIDE2MzUzLCAxNjM1OCwgMTYzNjMsIDE2MzcwLCAxNjM4MCwgMTYzODUsIDE2MzkyLCAxNjM5OCwgMTY0MDgsIAotICAgIDE2NDE4LCAxNjQzMiwgMTY0NDYsIDE2NDYwLCAxNjQ3NCwgMTY0ODksIDE2NTA0LCAxNjUyMSwgMTY1MzksIDE2NTUyLCAKLSAgICAxNjU1OCwgMTY1NjMsIDE2NTY4LCAxNjU3MiwgMTY1NzcsIDE2NTg1LCAxNjU5MSwgMTY1OTYsIDE2NjAxLCAxNjYwNSwgCi0gICAgMTY2MTAsIDE2NjE0LCAxNjYxOSwgMTY2MjMsIDE2NjM0LCAxNjY0MCwgMTY2NDUsIDE2NjUwLCAxNjY1NywgMTY2NjIsIAotICAgIDE2NjY2LCAxNjY3MSwgMTY2NzYsIDE2NjgyLCAxNjY4OSwgMTY2OTUsIDE2NzAwLCAxNjcwNCwgMTY3MTAsIDE2NzE1LCAKLSAgICAxNjcyMCwgMTY3MjQsIDE2NzMwLCAxNjczNSwgMTY3NDAsIDE2NzQ3LCAxNjc1MiwgMTMxMDQsIDE2NzU2LCAxNjc2MSwgCi0gICAgMTY3NjUsIDE2NzcwLCAxNjc3NiwgMTY3ODIsIDE2Nzg5LCAxNjc5OSwgMTY4MDcsIDE2ODE0LCAxNjgxOSwgMTY4MjMsIAotICAgIDE2ODMyLCAxNjg0MCwgMTY4NDcsIDE2ODU0LCAxNjg2MCwgMTY4NjYsIDE2ODcxLCAxNjg3NiwgMTY4ODIsIDE2ODg3LCAKLSAgICAxNjg5MywgMTY4OTgsIDE2OTA0LCAxNjkxMCwgMTY5MTcsIDE2OTIzLCAxNjkyOCwgMTY5MzMsIDkzNDEsIDE2OTQyLCAKLSAgICAxNjk0NSwgMTY5NTEsIDE2OTU2LCAxNjk2MSwgMTY5NzEsIDE2OTc4LCAxNjk4NCwgMTY5ODksIDE2OTk0LCAxNzAwMCwgCi0gICAgMTcwMDUsIDE3MDExLCAxNzAxNiwgMTcwMjIsIDE3MDI4LCAxNzAzMywgMTcwNDEsIDE3MDQ4LCAxNzA1MywgMTcwNTgsIAotICAgIDE3MDY0LCAxNzA2OSwgMTcwNzMsIDE3MDgyLCAxNzA5MywgMTcxMDAsIDE3MTA1LCAxNzExMywgMTcxMTksIDE3MTI2LCAKLSAgICAxNzEzMiwgMTcxMzcsIDE3MTQxLCAxNzE0NywgMTcxNTIsIDE3MTU3LCAxNzE2MiwgMTQ0MCwgNzc3NywgMjg3NywgMTcxNjYsIAotICAgIDE3MTcwLCAxNzE3NCwgMTcxNzgsIDE3MTgyLCAxNzE4NiwgMTcxODksIDE3MTk2LCAxNzIwNCwgMTQzODcsIDE3MjExLCAKLSAgICAxNzIyMSwgMTcyMjksIDE3MjM2LCAxNzI0NCwgMTcyNTQsIDE3MjYzLCAxNzI3NiwgMTcyODEsIDE3Mjg2LCAxNzI5NCwgCi0gICAgMTczMDEsIDEzMjAwLCAxMzIwOSwgMTczMDgsIDE3MzE4LCAxNzMzMywgMTczMzksIDE3MzQ2LCAxNzM1MywgMTczNTksIAotICAgIDE3MzY3LCAxNzM3NywgMTczODcsIDE0MzkyLCAxNzM5NiwgMTc0MDIsIDE3NDA4LCAxNzQxNiwgMTc0MjQsIDE3NDI5LCAKLSAgICAxNzQzOCwgMTc0NDYsIDE3NDU4LCAxNzQ2OCwgMTc0NzgsIDE3NDg4LCAxNzQ5NywgMTc1MDksIDE3NTE5LCAxNzUyOSwgCi0gICAgMTc1NDAsIDE3NTQ1LCAxNzU1NywgMTc1NjksIDE3NTgxLCAxNzU5MywgMTc2MDUsIDE3NjE3LCAxNzYyOSwgMTc2NDEsIAotICAgIDE3NjUzLCAxNzY2NSwgMTc2NzYsIDE3Njg4LCAxNzcwMCwgMTc3MTIsIDE3NzI0LCAxNzczNiwgMTc3NDgsIDE3NzYwLCAKLSAgICAxNzc3MiwgMTc3ODQsIDE3Nzk2LCAxNzgwNywgMTc4MTksIDE3ODMxLCAxNzg0MywgMTc4NTUsIDE3ODY3LCAxNzg3OSwgCi0gICAgMTc4OTEsIDE3OTAzLCAxNzkxNSwgMTc5MjcsIDE3OTM4LCAxNzk1MCwgMTc5NjIsIDE3OTc0LCAxNzk4NiwgMTc5OTgsIAotICAgIDE4MDEwLCAxODAyMiwgMTgwMzQsIDE4MDQ2LCAxODA1OCwgMTgwNjksIDE4MDgxLCAxODA5MywgMTgxMDUsIDE4MTE3LCAKLSAgICAxODEyOSwgMTgxNDEsIDE4MTUzLCAxODE2NSwgMTgxNzcsIDE4MTg5LCAxODIwMCwgMTgyMTIsIDE4MjI0LCAxODIzNiwgCi0gICAgMTgyNDgsIDE4MjYwLCAxODI3MiwgMTgyODQsIDE4Mjk2LCAxODMwOCwgMTgzMjAsIDE4MzMxLCAxODM0MywgMTgzNTUsIAotICAgIDE4MzY3LCAxODM3OSwgMTgzOTEsIDE4NDAzLCAxODQxNSwgMTg0MjcsIDE4NDM5LCAxODQ1MSwgMTg0NjIsIDE4NDc0LCAKLSAgICAxODQ4NiwgMTg0OTgsIDE4NTEwLCAxODUyMywgMTg1MzYsIDE4NTQ5LCAxODU2MiwgMTg1NzUsIDE4NTg4LCAxODYwMSwgCi0gICAgMTg2MTMsIDE4NjI2LCAxODYzOSwgMTg2NTIsIDE4NjY1LCAxODY3OCwgMTg2OTEsIDE4NzA0LCAxODcxNywgMTg3MzAsIAotICAgIDE4NzQzLCAxODc1NSwgMTg3NjgsIDE4NzgxLCAxODc5NCwgMTg4MDcsIDE4ODIwLCAxODgzMywgMTg4NDYsIDE4ODU5LCAKLSAgICAxODg3MiwgMTg4ODUsIDE4ODk3LCAxODkxMCwgMTg5MjMsIDE4OTM2LCAxODk0OSwgMTg5NjIsIDE4OTc1LCAxODk4OCwgCi0gICAgMTkwMDEsIDE5MDE0LCAxOTAyNywgMTkwMzksIDE5MDUyLCAxOTA2NSwgMTkwNzgsIDE5MDkxLCAxOTEwNCwgMTkxMTcsIAotICAgIDE5MTMwLCAxOTE0MywgMTkxNTYsIDE5MTY5LCAxOTE4MSwgMTkxOTQsIDE5MjA3LCAxOTIyMCwgMTkyMzMsIDE5MjQ2LCAKLSAgICAxOTI1OSwgMTkyNzIsIDE5Mjg1LCAxOTI5OCwgMTkzMTEsIDE5MzIzLCAxOTMzNCwgMTkzNDcsIDE5MzYwLCAxOTM3MywgCi0gICAgMTkzODYsIDE5Mzk5LCAxOTQxMiwgMTk0MjUsIDE5NDM4LCAxOTQ1MSwgMTk0NjQsIDE5NDc2LCAxOTQ4OSwgMTk1MDIsIAotICAgIDE5NTE1LCAxOTUyOCwgMTk1NDEsIDE5NTU0LCAxOTU2NywgMTk1ODAsIDE5NTkzLCAxOTYwNiwgMTk2MTgsIDE5NjMxLCAKLSAgICAxOTY0NCwgMTk2NTcsIDE5NjcwLCAxOTY4MywgMTk2OTYsIDE5NzA5LCAxOTcyMiwgMTk3MzUsIDE5NzQ4LCAxOTc2MCwgCi0gICAgMTk3NzMsIDE5Nzg2LCAxOTc5OSwgMTk4MTIsIDE5ODI1LCAxOTgzOCwgMTk4NTEsIDE5ODY0LCAxOTg3NywgMTk4OTAsIAotICAgIDE5OTAyLCAxOTkxNSwgMTk5MjgsIDE5OTQxLCAxOTk1NCwgMTk5NjcsIDE5OTgwLCAxOTk5MywgMjAwMDYsIDIwMDE5LCAKLSAgICAyMDAzMiwgMjAwNDQsIDIwMDU3LCAyMDA3MCwgMjAwODMsIDIwMDk2LCAyMDEwOSwgMjAxMjIsIDIwMTM1LCAyMDE0OCwgCi0gICAgMjAxNjEsIDIwMTc0LCAyMDE4NiwgMjAxOTksIDIwMjEyLCAyMDIyNSwgMjAyMzgsIDIwMjUxLCAyMDI2NCwgMjAyNzcsIAotICAgIDIwMjkwLCAyMDMwMywgMjAzMTYsIDIwMzI4LCAyMDM0MSwgMjAzNTQsIDIwMzY3LCAyMDM4MCwgMjAzOTMsIDIwNDA2LCAKLSAgICAyMDQxOSwgMjA0MzIsIDIwNDQ1LCAyMDQ1OCwgMjA0NzAsIDIwNDgzLCAyMDQ5NiwgMjA1MDksIDIwNTIyLCAyMDUzNSwgCi0gICAgMjA1NDgsIDIwNTYxLCAyMDU3NCwgMjA1ODcsIDIwNjAwLCAyMDYxMiwgMjA2MjUsIDIwNjM4LCAyMDY1MSwgMjA2NjQsIAotICAgIDIwNjc3LCAyMDY5MCwgMjA3MDMsIDIwNzE2LCAyMDcyOSwgMjA3NDIsIDIwNzU0LCAyMDc2NSwgMjA3NzMsIDIwNzgxLCAKLSAgICAyMDc4OCwgMjA3OTQsIDIwNzk4LCAyMDgwNCwgMjA4MTAsIDIwODE4LCAyMDgyNCwgMjA4MjksIDIwODMzLCAyMDg0MiwgCi0gICAgOTE0OCwgMjA4NTMsIDIwODYwLCAyMDg2OCwgMjA4NzUsIDIwODgyLCAxMDk0MSwgMjA4ODksIDIwODk4LCAyMDkwMywgCi0gICAgMjA5MDgsIDc4MDUsIDIwOTE1LCAyMDkyMCwgMjA5MjMsIDIwOTI4LCAyMDkzNiwgMjA5NDMsIDIwOTUwLCAyMDk1NywgCi0gICAgMjA5NjMsIDIwOTcyLCAyMDk4MSwgMjA5ODcsIDIwOTk2LCAyMTAwMCwgMjEwMDYsIDIxMDExLCAyMTAyMSwgMjEwMjgsIAotICAgIDIxMDM0LCAyMTA0MiwgMjEwNDgsIDIxMDU1LCAyMTA2NSwgMjEwNzQsIDIxMDc4LCAyMTA4NSwgMjEwODksIDIxMDk0LCAKLSAgICAyMTEwMCwgMjExMDgsIDIxMTEyLCAyMTEyMiwgMTQ0MDIsIDIxMTMxLCAyMTEzNywgMjExNDEsIDIxMTUwLCAxNDQwNywgCi0gICAgMjExNTYsIDIxMTYzLCAyMTE3NCwgMjExODIsIDIxMTkxLCAyMTE5OSwgODkzMSwgMjEyMDcsIDIxMjEyLCAyMTIxOCwgCi0gICAgMjEyMjMsIDIxMjI3LCAyMTIzMSwgMjEyMzUsIDk2MzIsIDIxMjQwLCAyMTI0OCwgMjEyNTUsIDIxMjY0LCAyMTI3MSwgCi0gICAgMjEyNzgsIDEwODcxLCAyMTI4NSwgMjEyOTEsIDIxMjk1LCAyMTMwMSwgMjEzMDgsIDIxMzE0LCAyMTMyMiwgMjEzMjgsIAotICAgIDIxMzM1LCAyMTM0MSwgMjEzNDcsIDIxMzU2LCAyMTM2MCwgMjEzNjgsIDIxMzc3LCAyMTM4NCwgMjEzODksIDIxMzkzLCAKLSAgICAyMTQwNCwgMjE0MDksIDIxNDE0LCAyMTQxOSwgMjE0MzIsIDc5OTUsIDIxNDM2LCAyMTQ0MiwgMjE0NTAsIDIxNDU0LCAKLSAgICAyMTQ2MSwgMjE0NzAsIDIxNDc1LCAxNDY3OCwgMjE0ODMsIDIxNDg3LCAyMTQ5OSwgMjE1MDQsIDIxNTA4LCAyMTUxMSwgCi0gICAgMjE1MTcsIDIxNTIzLCAyMTUyOCwgMjE1MzIsIDIxNTM1LCAyMTU0NiwgMjE1NTEsIDkzNzYsIDIxNTU4LCAyMTU2MywgCi0gICAgOTM4MSwgMjE1NjgsIDIxNTczLCAyMTU3OCwgMjE1ODMsIDIxNTg4LCAyMTU5MywgMjE1OTgsIDIxNjAzLCAyMTYwOCwgCi0gICAgMjE2MTMsIDIxNjE4LCAyMTYyMywgMjE2MjksIDIxNjM0LCAyMTYzOSwgMjE2NDQsIDIxNjQ5LCAyMTY1NCwgMjE2NTksIAotICAgIDIxNjY0LCAyMTY2OSwgMjE2NzQsIDIxNjgwLCAyMTY4NiwgMjE2OTEsIDIxNjk2LCAyMTcwMSwgMjE3MDYsIDIxNzExLCAKLSAgICAyMTcxNiwgMjE3MjEsIDIxNzI2LCAyMTczMSwgMjE3MzcsIDIxNzQyLCAyMTc0NywgMjE3NTIsIDIxNzU4LCAyMTc2NCwgCi0gICAgMjE3NjksIDIxNzc0LCAyMTc3OSwgMjE3ODQsIDIxNzg5LCAyMTc5NCwgMjE3OTksIDIxODA0LCAyMTgxMCwgMjE4MTUsIAotICAgIDIxODIwLCAyMTgyNSwgMjE4MzAsIDIxODM2LCAyMTg0MSwgMjE4NDYsIDIxODUwLCAxMzY4LCAxMjksIDIxODU4LCAyMTg2MiwgCi0gICAgMjE4NjYsIDIxODcwLCAyMTg3NSwgMjE4NzksIDEzMTEwLCAxMjQ2OSwgMjE4ODMsIDIxODg4LCAyMTg5MiwgMjE4OTcsIAotICAgIDIxOTAxLCAyMTkwNiwgMjE5MTAsIDIxOTE2LCAyMTkyMSwgMjE5MjUsIDIxOTI5LCAyMTkzNywgMjE5NDEsIDIxOTQ1LCAKLSAgICAyMTk1MCwgMjE5NTUsIDIxOTU5LCAyMTk2NSwgMjE5NzAsIDIxOTc0LCAyMTk3OSwgMjE5ODQsIDIxOTg4LCAyMTk5NSwgCi0gICAgMjIwMDIsIDIyMDA5LCAyMjAxMywgMjIwMTcsIDIyMDIyLCAyMjAyNiwgMjIwMjksIDIyMDM1LCAyMjA0OCwgMjIwNTMsIAotICAgIDIyMDYyLCAyMjA2NywgOTQyMSwgMjIwNzIsIDIyMDc1LCAyNzEyLCAyNzE3LCAyMjA3OSwgMjIwODUsIDIyMDkxLCA3MjA5LCAKLSAgICAyMjA5NiwgMjIxMDEsIDIyMTA2LCAyMjExMiwgMjIxMTcsIDEzODk2LCAyMjEyMiwgMjIxMjcsIDIyMTMyLCAyMjEzNywgCi0gICAgMjIxNDMsIDIyMTQ4LCAyMjE1MywgMjIxNTksIDIyMTY0LCAyMjE2OCwgMjIxNzMsIDIyMTc4LCAyMjE4MywgMjIxODgsIAotICAgIDIyMTkyLCAyMjE5NywgMjIyMDEsIDIyMjA2LCAyMjIxMSwgMjIyMTYsIDIyMjIxLCAyMjIyNSwgMjIyMzAsIDIyMjM0LCAKLSAgICAyMjIzOSwgMjIyNDQsIDIyMjQ5LCAyMjI1NCwgMjg4NiwgMjIxNjksIDIyMjU4LCAyMjI2NiwgMjIyNzMsIDk3MjYsIAotICAgIDIyMjg1LCAyMjI5MywgMjIxNzQsIDIyMzAwLCAyMjMwNSwgMjIzMTMsIDIyMTc5LCAyMjMxOCwgMjIzMjMsIDIyMzMxLCAKLSAgICAyMjMzNiwgMjIxODQsIDIyMzQxLCAyMjM0NiwgMjIzNTAsIDIyMzU2LCAyMjM2NCwgMjIzNjcsIDIyMzc0LCAyMjM3OCwgCi0gICAgMjIzODIsIDIyMzg4LCAyMjM5NSwgMjI0MDAsIDg5NTgsIDE3MjcsIDE3MzIsIDIyNDA0LCAyMjQxMCwgMjI0MTYsIDIyNDIxLCAKLSAgICAyMjQyNSwgMjI0MjksIDIyNDMzLCAyMjQzNywgMjI0NDEsIDIyNDQ1LCAyMjQ0OSwgMjI0NTIsIDIyNDU4LCAyMjQ2NSwgCi0gICAgMjI0NzMsIDIyNDc5LCAyMjQ4NSwgMjI0OTAsIDIyNDk1LCAyMjQ5OSwgMTM4MTYsIDEzODIzLCAyMjUwNCwgMjI1MTYsIAotICAgIDIyNTE5LCAyMjUyNiwgMTYzNDksIDIyNTMzLCAyMjU0MSwgMjI1NTIsIDIyNTYxLCAyMjU3NCwgMjI1ODQsIDIyNTk4LCAKLSAgICAyMjYxMCwgMjI2MjQsIDIyNjM2LCAyMjY0NiwgMjI2NTgsIDIyNjY0LCAyMjY3OSwgMjI3MDMsIDIyNzIxLCAyMjc0MCwgCi0gICAgMjI3NTMsIDIyNzY3LCAyMjc4NSwgMjI4MDEsIDIyODE4LCAyMjgzNiwgMjI4NDcsIDIyODY2LCAyMjg4MywgMjI5MDMsIAotICAgIDIyOTIxLCAyMjkzMywgMjI5NDcsIDIyOTYxLCAyMjk3MywgMjI5OTAsIDIzMDA5LCAyMzAyNywgMjMwMzksIDIzMDU3LCAKLSAgICAyMzA3NiwgMTQ1NDYsIDIzMDg5LCAyMzEwOSwgMjMxMjEsIDEwNTE2LCAyMzEzMywgMjMxMzgsIDIzMTQzLCAyMzE0OCwgCi0gICAgMjMxNTQsIDIzMTU5LCAyMzE2MywgMjMxNzAsIDIzOTgsIDIzMTc0LCAyMzE4MCwgMjMxODQsIDIzMTg3LCAyMzE5MSwgCi0gICAgMjMxOTksIDIzMjA1LCAyMjIwMiwgMjMyMDksIDIzMjE4LCAyMzIyOSwgMjMyMzUsIDIzMjQxLCAyMzI1MCwgMjMyNTgsIAotICAgIDIzMjY1LCAyMzI3MCwgMjMyNzQsIDIzMjgxLCAyMzI4NywgMjMyOTYsIDIzMzA0LCAyMzMxMSwgMjMzMjEsIDIzMzMwLCAKLSAgICAyMzM0MCwgMjMzNDUsIDIzMzU0LCAyMzM2MywgMjMzNzQsIDIzMzg1LCAzOTYzLCAyMzM5NSwgMjMzOTksIDIzNDA5LCAKLSAgICAyMzQxNywgMjM0MjcsIDIzNDM4LCAyMzQ0MywgMjM0NTMsIDIzNDYxLCAyMzQ2OCwgMjM0NzQsIDIzNDgxLCAyMzQ4NiwgCi0gICAgMjIyMTIsIDIzNDkwLCAyMzQ5OSwgMjM1MDMsIDIzNTA2LCAyMzUxMSwgMjM1MTgsIDIzNTI3LCAyMzUzNSwgMjM1NDMsIAotICAgIDIzNTUzLCAyMzU2MiwgMjM1NjgsIDIzNTc0LCAyMjIxNywgMjIyMjIsIDIzNTc4LCAyMzU4OCwgMjM1OTgsIDIzNjA4LCAKLSAgICAyMzYxNiwgMjM2MjMsIDIzNjMzLCAyMzY0MSwgMjM2NDksIDIzNjU1LCAyMzY2MywgOTMwLCAyMzY3MiwgMTQ3MzcsIDU0MiwgCi0gICAgMjM2ODYsIDIzNjk1LCAyMzcwMywgMjM3MTQsIDIzNzI1LCAyMzczNSwgMjM3NDQsIDIzNzU2LCAyMzc2NSwgMjM3NzQsIAotICAgIDIzNzgwLCAyMzc4OSwgMjM3OTgsIDIzODA4LCAyMzgxNiwgMjM4MjQsIDkzNTMsIDIzODMwLCAyMzgzMywgMjM4MzcsIAotICAgIDIzODQyLCAyMzg0NywgOTg0MSwgMjIyMzUsIDIyMjQwLCAyMzg1NSwgMjM4NjEsIDIzODY3LCAyMzg3MiwgMjM4NzcsIAotICAgIDIzODgxLCAyMzg4OSwgMjM4OTUsIDIzOTAxLCAyMzkwNSwgMzUyNSwgMjM5MTMsIDIzOTE4LCAyMzkyMywgMjM5MjcsIAotICAgIDIzOTMxLCA5OTIxLCAyMzkzOCwgMjM5NDYsIDIzOTYwLCAyMzk2NywgMjM5NzMsIDk5MzAsIDk5MzYsIDIzOTgxLCAyMzk4OSwgCi0gICAgMjM5OTYsIDI0MDAxLCAyNDAwNiwgMjIyNDUsIDI0MDEyLCAyNDAyMywgMjQwMjcsIDI0MDMyLCAyNjAxLCAyNDAzNywgCi0gICAgMjQwNDgsIDI0MDU0LCAyNDA1OSwgMjQwNjMsIDI0MDY3LCAyNDA3MCwgMjQwNzcsIDI0MDg0LCAyNDA5MSwgMjQwOTcsIAotICAgIDI0MTAxLCAyMjI1MCwgMjQxMDYsIDI0MTEwLCAyNDExNCwgMTAzNywgMjQxMTksIDI0MTI0LCAyNDEyOSwgMjQxMzQsIAotICAgIDI0MTM5LCAyNDE0NCwgMjQxNDksIDI0MTU0LCAyNDE1OSwgMjQxNjQsIDI0MTY5LCAyNDE3NCwgMjQxNzksIDI0MTg0LCAKLSAgICAyNDE5MCwgMjQxOTUsIDI0MjAwLCAyNDIwNSwgMjQyMTAsIDI0MjE1LCAyNDIyMCwgMjQyMjYsIDI0MjMxLCAyNDIzNiwgCi0gICAgMjQyNDEsIDI0MjQ2LCAyNDI1MSwgMjQyNTYsIDI0MjYxLCAyNDI2NywgMjQyNzMsIDI0Mjc4LCAyNDI4NCwgMjQyODksIAotICAgIDI0Mjk0LCA1LCAyNDMwMCwgMjQzMDQsIDI0MzA4LCAyNDMxMiwgMjQzMTcsIDI0MzIxLCAyNDMyNSwgMjQzMjksIDI0MzMzLCAKLSAgICAyNDMzOCwgMjQzNDIsIDI0MzQ3LCAyNDM1MSwgMjQzNTQsIDI0MzU4LCAyNDM2MywgMjQzNjcsIDI0MzcyLCAyNDM3NiwgCi0gICAgMjQzODAsIDI0Mzg0LCAyNDM4OSwgMjQzOTMsIDI0Mzk3LCAyNDQwNywgMjQ0MTIsIDI0NDE2LCAyNDQyMCwgMjQ0MjUsIAotICAgIDI0NDMwLCAyNDQzOSwgMjQ0NDQsIDI0NDQ5LCAyNDQ1MywgMjQ0NTcsIDI0NDcwLCAyNDQ4MiwgMjQ0OTEsIDI0NTAwLCAKLSAgICAyNDUwNiwgMjQ1MTEsIDI0NTE1LCAyNDUxOSwgMjQ1MjksIDI0NTM4LCAyNDU0NiwgMjQ1NTIsIDI0NTU3LCAyNDU2MSwgCi0gICAgMjQ1NjgsIDI0NTc4LCAyNDU4NywgMjQ1OTUsIDI0NjAzLCAyNDYxMCwgMjQ2MTgsIDI0NjI3LCAyNDYzNiwgMjQ2NDQsIAotICAgIDI0NjQ5LCAyNDY1MywgMjQ2NTcsIDI0NjYwLCAyNDY2MiwgMjQ2NjYsIDI0NjcwLCAyNDY3NSwgMjQ2ODAsIDI0Njg0LCAKLSAgICAyNDY4OCwgMjQ2OTEsIDI0Njk1LCAyNDY5OCwgMjQ3MDIsIDI0NzA1LCAyNDcwOCwgMjQ3MTIsIDI0NzE4LCAyNDcyMiwgCi0gICAgMjQ3MjYsIDI0NzMwLCAyNDczNSwgMjQ3NDAsIDI0NzQ1LCAyNDc0OSwgMjQ3NTIsIDI0NzU3LCAyNDc2MywgMjQ3NjgsIAotICAgIDI0Nzc0LCAyNDc3OSwgMjQ3ODMsIDI0Nzg3LCAyNDc5MSwgMjQ3OTYsIDI0ODAwLCAyNDgwNSwgMjQ4MDksIDI0ODEzLCAKLSAgICAyNDgyMCwgMjQ4MjQsIDI0ODI3LCAyNDgzMSwgMjQ4MzcsIDI0ODQzLCAyNDg0NywgMjQ4NTEsIDI0ODU2LCAyNDg2MywgCi0gICAgMjQ4NjksIDI0ODczLCAyNDg4MiwgMjQ4ODYsIDI0ODkwLCAyNDg5MywgMjQ4OTksIDI0OTA0LCAyNDkxMCwgMTQ4OSwgCi0gICAgMTc5MSwgMjQ5MTUsIDI0OTIwLCAyNDkyNSwgMjQ5MzAsIDI0OTM1LCAyNDk0MCwgMjQ5NDUsIDIxNDgsIDIxOTQsIDI0OTUwLCAKLSAgICAyNDk1MywgMjQ5NTcsIDI0OTYxLCAyNDk2NiwgMjQ5NzAsIDI0OTc0LCAyNDk3NywgMjQ5ODIsIDI0OTg3LCAyNDk5MSwgCi0gICAgMjQ5OTQsIDI0OTk5LCAyNTAwMywgMjUwMDgsIDI1MDEyLCAxNDc0OSwgMjUwMTcsIDI1MDIwLCAyNTAyMywgMjUwMjcsIAotICAgIDI1MDMyLCAyNTAzNiwgMjUwNDksIDI1MDUzLCAyNTA1NiwgMjUwNjQsIDI1MDczLCAyNTA4MCwgMjUwODUsIDI1MDkxLCAKLSAgICAyNTA5NywgMjUxMDUsIDI1MTEyLCAyNTExOSwgMjUxMjMsIDI1MTI3LCAyNTEzMSwgMjUxMzYsIDI1MTQxLCAyNTE0NSwgCi0gICAgMjUxNTMsIDI1MTU4LCAyNTE3MCwgMjUxODEsIDI1MTg2LCAyNTE5MCwgMjUxOTQsIDI1MjAwLCAyNTIwNSwgMjUyMTAsIAotICAgIDI1MjE0LCAyNTIxOCwgMjUyMjEsIDI1MjI3LCA3OTE1LCAyMzE2LCAyNTIzMSwgMjUyMzYsIDI1MjUyLCA5NDY4LCAyNTI3MiwgCi0gICAgMjUyODEsIDI1Mjk3LCAyNTMwMSwgMjUzMDQsIDI1MzEwLCAyNTMyMCwgMjUzMjYsIDI1MzM1LCAyNTM1MCwgMjUzNjIsIAotICAgIDI1MzczLCAyNTM4MSwgMjUzOTAsIDI1Mzk2LCAyNTQwNSwgMjU0MTUsIDI1NDI2LCAyNTQzNywgMjU0NDYsIDI1NDUzLCAKLSAgICAyNTQ2MiwgMjU0NzAsIDI1NDc3LCAyNTQ4NSwgMjU0OTIsIDI1NDk5LCAyNTUxMiwgMjU1MTksIDI1NTI1LCAyNTUzMCwgCi0gICAgMjU1MzksIDI1NTQ1LCAyNTU1MCwgMjU1NTgsIDI1NTY1LCAyMzQxOSwgMjU1NzcsIDI1NTg5LCAyNTYwMywgMjU2MTEsIAotICAgIDI1NjE4LCAyNTYzMCwgMjU2MzksIDI1NjQ4LCAyNTY1NiwgMjU2NjQsIDI1NjcyLCAyNTY3OSwgMjU2ODgsIDI1Njk2LCAKLSAgICAyNTcwNiwgMjU3MTUsIDI1NzI1LCAyNTczNCwgMjU3NDMsIDI1NzUxLCAyNTc1NiwgMjU3NjAsIDI1NzYzLCAyNTc2NywgCi0gICAgMjU3NzEsIDI1Nzc1LCAyNTc3OSwgMjU3ODMsIDI1Nzg5LCAyNTc5NSwgMjU4MDMsIDE0Nzk0LCAyNTgxMCwgMjU4MTUsIAotICAgIDI1ODIyLCAyNTgyOCwgMjU4MzUsIDE0ODAyLCAyNTg0MiwgMjU4NDUsIDI1ODU3LCAyNTg2NSwgMjU4NzEsIDI1ODc2LCAKLSAgICAyNTg4MCwgOTg3MSwgMjU4OTEsIDI1OTAxLCAyNTkxMCwgMjU5MTcsIDI1OTIxLCAxNDgwNywgMjU5MjQsIDI1OTMxLCAKLSAgICAyNTkzNSwgMjU5NDEsIDI1OTQ0LCAyNTk1MSwgMjU5NTcsIDI1OTY0LCAyNTk3MCwgMjU5NzQsIDI1OTc5LCAyNTk4MywgCi0gICAgMjU5OTIsIDI1OTk5LCAyNjAwNSwgNzk1NiwgMjYwMTIsIDI2MDIwLCAyNjAyNywgMjYwMzMsIDI2MDM4LCAyNjA0NCwgCi0gICAgMjYwNTAsIDI2MDU4LCAyNjA2MiwgMjYwNjUsIDI2MDY3LCAyNTc2OCwgMjYwNzYsIDI2MDgyLCAyNjA5MiwgMjYwOTcsIAotICAgIDI2MTA0LCAyNjExMCwgMjYxMTUsIDI2MTIwLCAyNjEyNSwgMjYxMjksIDI2MTM0LCAyNjE0MSwgMjYxNTAsIDI2MTU0LCAKLSAgICAyNjE2MSwgMjYxNzAsIDI2MTc2LCAyNjE4MSwgMjYxODcsIDI2MTkyLCAyNjE5OSwgMjYyMTAsIDI2MjE1LCAyNjIxOSwgCi0gICAgMjYyMjksIDI2MjM1LCAyNjIzOSwgMjYyNDQsIDI2MjU0LCAyNjI2MywgMjYyNjcsIDI2Mjc0LCAyNjI4MiwgMjYyODksIAotICAgIDI2Mjk1LCAyNjMwMCwgMjYzMDgsIDI2MzE1LCAyNjMyNywgMjYzMzYsIDI2MzQwLCAxMzA0NiwgMjYzNDgsIDI2MzU4LCAKLSAgICAyNjM2MiwgMjUwNjAsIDI2MzczLCAyNjM3OCwgMjYzODIsIDI2Mzg5LCAyNjM5NiwgMjE5NjEsIDI1NjkzLCAyNjQwMSwgCi0gICAgMjY0MDUsIDI2NDA4LCAyMjg1MywgMjY0MTMsIDI2NDI3LCAyNjQ0MywgMjY0NjEsIDI2NDgwLCAyNjQ5NywgMjY1MTUsIAotICAgIDIyODcyLCAyNjUzMiwgMjY1NTIsIDIyODg5LCAyNjU2NCwgMjY1NzYsIDE1NzMyLCAyNjU4OCwgMjI5MDksIDI2NjAyLCAKLSAgICAyNjYxNCwgMTA1MjksIDI2NjI4LCAyNjYzMywgMjY2MzgsIDI2NjQzLCAyNjY0OSwgMjY2NTUsIDI2NjYxLCAyNjY2NSwgCi0gICAgMjY2NzIsIDI2Njc3LCAyNjY4NywgMjY2OTMsIDEwMTc2LCAyNjY5OSwgMjY3MDEsIDI2NzA2LCAyNjcxNCwgMjY3MTgsIAotICAgIDI2MTM3LCAyNjcyNCwgMjY3MzEsIDExNTE3LCAxMTUyNywgMjY3MzgsIDI2NzQ4LCAyNjc1MywgMjY3NTcsIDI2NzYwLCAKLSAgICAyNjc2NiwgMjY3NzQsIDI2Nzg2LCAyNjc5NiwgMjY4MTIsIDI2ODI1LCAyNjgzOSwgMTU3NTAsIDI2ODUzLCAyNjg2MCwgCi0gICAgMjY4NjQsIDI2ODY3LCAyNjg3MiwgMjY4NzYsIDI2ODgzLCAyNjg5MCwgMjY5MDAsIDI2OTA1LCAyNjkxMCwgMjY5MTUsIAotICAgIDI2OTIzLCAyNjkzMSwgMjY5NDAsIDI2OTQ1LCA5NTY1LCAyNjk0OSwgMjY5NTIsIDI2OTU1LCAyNjk2MCwgMjY5NjcsIAotICAgIDI2OTcyLCAyNjk4OCwgMjY5OTYsIDI3MDA0LCA5NDE2LCAyNzAxMiwgMjcwMTcsIDI3MDIxLCAyNzAyNywgMjcwMzMsIAotICAgIDI3MDM2LCAyNzA0MiwgMjcwNTQsIDI3MDYyLCAyNzA2OSwgMjcwNzUsIDI3MDgyLCAyNzA5MywgMjcxMDcsIDI3MTIwLCAKLSAgICAyNzEyOSwgMjcxMzgsIDI3MTUwLCAyNzE2MSwgMjcxNzEsIDI3MTgwLCAyNzE4OSwgMjcxOTcsIDI3MjA4LCA3OTM4LCAKLSAgICAyNzIxNSwgMjcyMjEsIDI3MjI2LCAyNzIzMiwgMjcyMzksIDI3MjQ5LCAyNzI1OSwgMjcyNjgsIDI3Mjc0LCAyNzI4MSwgCi0gICAgMjcyODYsIDI3MjkzLCAyNzMwMSwgMjczMDksIDI3MzIxLCA2MjQ2LCAyNzMyOCwgMjczMzcsIDI3MzQ1LCAyNzM1MSwgCi0gICAgMjczNTcsIDI3MzYyLCAyNzM2NiwgMjczNjksIDI3Mzc1LCAyNzM4MiwgMjczODcsIDI3MzkyLCAyNzM5NiwgMjc0MDgsIAotICAgIDI3NDE5LCAyNzQyOCwgMjc0MzYsIDE0OTM0LCAyNzQ0MSwgMjc0NDcsIDI3NDUzLCAxMTUxMCwgODYzNSwgMjc0NTgsIAotICAgIDI3NDYyLCAyNzQ2NSwgMjc0NjgsIDI3NDc0LCAyNzQ4MiwgMjc0OTAsIDI3NDk0LCAyNzQ5OCwgMjc1MDMsIDI3NTA2LCAKLSAgICAyNzUxNSwgMjc1MTksIDI3NTI3LCAyNzUzOCwgMjc1NDIsIDI3NTQ4LCAyNzU1NCwgMjc1NTgsIDI3NTY0LCAyNzU3MiwgCi0gICAgMjc1OTQsIDI3NjE4LCAyNzYyNSwgMjc2MzIsIDI3NjM4LCAyNzY0NiwgMjc2NTIsIDI3NjU3LCAyNzY2OCwgMjc2ODYsIAotICAgIDI3NjkzLCAyNzcwMSwgMjc3MDUsIDI3NzE0LCAyNzcyNywgMjc3MzUsIDI3NzQ3LCAyNzc1OCwgMjc3NjgsIDI3NzgyLCAKLSAgICAyNzc5MSwgMjc3OTksIDI3ODExLCA5NDg1LCAyNzgyMiwgMjc4MzMsIDI3ODQ1LCAyNzg1NSwgMjc4NjQsIDI3ODY5LCAKLSAgICAyNzg3MywgMjc4ODEsIDI3ODkxLCAyNzg5NiwgMjc5MDAsIDI3OTAzLCAyNzkwNiwgMjc5MTQsIDI3OTIyLCAyNzkzMSwgCi0gICAgMjc5NDEsIDI3OTUwLCAyNzk1NiwgMjc5NzAsIDI2NjMsIDI3OTkyLCAyODAwMywgMjgwMTIsIDI4MDIyLCAyODAzNCwgCi0gICAgMjgwNDMsIDI4MDUyLCAyODA2MiwgMjgwNzAsIDI4MDc4LCAyODA4NywgMjgwOTIsIDI4MTAzLCAyODEwOCwgMjgxMTksIAotICAgIDI4MTIzLCAyODEzMywgMjgxNDIsIDI4MTUwLCAyODE2MCwgMjgxNzAsIDI4MTc4LCAyODE4NywgMjgxOTQsIDI4MjAyLCAKLSAgICAyODIwOSwgMjgyMTgsIDI4MjIyLCAyODIzMCwgMjgyMzcsIDI4MjQ1LCAyODI1MiwgMjgyNjMsIDI4Mjc4LCAyODI4NSwgCi0gICAgMjgyOTEsIDI4MzAxLCAyODMxMCwgMjgzMTYsIDI4MzIwLCAyODMyNywgMjgzMzEsIDE0MDE4LCAyODMzNywgMjgzNDEsIAotICAgIDI4MzQ2LCAyODM1MywgMjgzNTcsIDI4MzYxLCAyODM2OSwgMjgzNzcsIDI4MzgzLCAyODM5MiwgMjgzOTksIDI4NDA0LCAKLSAgICAyODQwOSwgMjg0MTksIDIzNDg4LCAyODQyMywgMjg0MjYsIDI4NDMxLCAyODQzNiwgMjg0NDEsIDI4NDQ2LCAyODQ1MSwgCi0gICAgMjg0NTYsIDI4NDYxLCAyODQ2NiwgMjg0NzIsIDI4NDc3LCAyODQ4MiwgMjg0ODgsIDEyMTgsIDcwNCwgMjg0OTMsIDI4NTAyLCAKLSAgICAyMzY0LCAyODUwOSwgMjg1MTQsIDI4NTE4LCAyODUyNCwgMTI2NywgNTQ2LCAzMTgsIDI4NTI5LCAyODUzOCwgMjg1NDYsIAotICAgIDI4NTU1LCAyODU2MywgMjg1NzQsIDI4NTgzLCAyODU5MSwgMjg1OTUsIDI4NTk4LCAyODYwNiwgMjg2MTQsIDI4NjE5LCAKLSAgICAxNDc2MiwgMjg2MjUsIDI4NjMxLCAyODYzNywgNTg3MiwgMjg2NDIsIDI4NjQ2LCAyODY1MiwgMjg2NTYsIDI4NjYzLCAKLSAgICAxNDU1LCAyODY2OSwgMjg2NzYsIDk1NzIsIDI4NjgwLCAyODY5MCwgMjg2OTgsIDI4NzA0LCAyODcxMywgMjg3MjEsIAotICAgIDI4NzI3LCAyODczNSwgMjg3NDIsIDExMTAzLCAyODc0OCwgMjg3NTUsIDI4NzYwLCAyODc2NywgMTQ5NiwgMjE0NywgCi0gICAgMjg3NzMsIDI4Nzc5LCAyODc4NiwgMjg3OTcsIDI4ODA4LCAyODgxNiwgMjg4MjMsIDI4ODMzLCAyODg0MiwgMjg4NTAsIAotICAgIDI4ODU5LCAyODg2NiwgMjg4NzMsIDI4ODg2LCAyODg5NywgMTI3MiwgMjg5MTYsIDI4OTIxLCAyODkyOSwgMzU3NSwgCi0gICAgMjg5MzMsIDI4OTM4LCAyODk0MiwgMTQ1OSwgMjQ2ODksIDI4OTUyLCAyODk1NiwgMjg5NjEsIDI4OTY1LCAzNDkzLCAKLSAgICAyODk3MSwgMjg5NzksIDI4OTg2LCAyODk5NywgMjkwMDUsIDI5MDEzLCAzNTc2LCAyNzksIDI5MDE4LCAyOTAyNiwgMjkwMzQsIAotICAgIDI5MDQxLCAyOTA0NywgMjkwNTIsIDIyMTYsIDI5MDU5LCAyOTA2NSwgMjU5NzUsIDI2MjA1LCAyOTA3MSwgMTA2LCAyOTA3NSwgCi0gICAgMjkwNzksIDI5MDg1LCA2MTUsIDkzMjEsIDI5MDkwLCAyOTA5NywgMjkxMDMsIDIzMjcsIDI5MTA3LCAyOTExMSwgMTUxNzQsIAotICAgIDI5MTE0LCAyOTExOSwgMjkxMjYsIDI5MTMyLCAyOTEzNywgMjkxNDUsIDI5MTUyLCAyOTE1OCwgMjIzMzgsIDI5MTYyLCAKLSAgICAyOTE2NiwgMzY0NiwgMTY2MTIsIDI5MTcwLCAyOTE3NSwgMjkxNzgsIDI5MTg2LCAyOTE5NCwgMjkxOTksIDI5MjAyLCAKLSAgICAyOTIwOSwgMjkyMTksIDI5MjMxLCAyOTIzNiwgMjkyNDAsIDI5MjQ4LCAyOTI1NSwgMjkyNjEsIDI5MjY4LCAyOTI3NSwgCi0gICAgMjkyNzgsIDI5MjgyLCAyOTI4NiwgMTQ2MywgMjkyOTYsIDI5Mjk4LCAyOTMwMywgMjkzMDksIDI5MzE1LCAyOTMyMCwgCi0gICAgMjkzMjUsIDI5MzMwLCAyOTMzNSwgMjkzNDAsIDI5MzQ1LCAyOTM1MCwgMjkzNTUsIDI5MzYwLCAyOTM2NSwgMjkzNzAsIAotICAgIDI5Mzc1LCAyOTM4MCwgMjkzODUsIDI5MzkxLCAyOTM5NywgMjk0MDMsIDI5NDA5LCAyOTQxNCwgMjk0MTksIDI5NDI0LCAKLSAgICAyOTQzMCwgMjk0MzUsIDI5NDQwLCAyOTQ0NSwgMjk0NTEsIDI5NDU2LCAyOTQ2MiwgMjk0NjcsIDI5NDcyLCAyOTQ3NywgCi0gICAgMjk0ODIsIDI5NDg4LCAyOTQ5MywgMjk0OTksIDI5NTA0LCAyOTUwOSwgMjk1MTQsIDI5NTE5LCAyOTUyNSwgMjk1MzAsIAotICAgIDI5NTM2LCAyOTU0MSwgMjk1NDYsIDI5NTUxLCAyOTU1NiwgMjk1NjEsIDI5NTY2LCAyOTU3MSwgMjk1NzYsIDI5NTgxLCAKLSAgICAyOTU4NywgMjk1OTMsIDI5NTk5LCAyOTYwNCwgMjk2MDksIDI5NjE0LCAyOTYxOSwgMjk2MjUsIDI5NjMxLCAyOTYzNywgCi0gICAgMjk2NDMsIDI5NjQ5LCAyOTY1NSwgMjk2NjAsIDI5NjY2LCAyOTY3MSwgMjk2NzYsIDI5NjgxLCAyOTY4NiwgMjk2OTIsIAotICAgIDI0NDMsIDI5Njk3LCAyNDUwLCAyNDU3LCAyNzU0LCAyOTcwMiwgMjQ2MywgMjQ3MywgMjk3MDgsIDI5NzEyLCAyOTcxNywgCi0gICAgMjk3MjIsIDI5NzI4LCAyOTczMywgMjk3MzgsIDI5NzQyLCAyOTc0NywgMjk3NTMsIDI5NzU4LCAyOTc2MywgMjk3NjgsIAotICAgIDI5Nzc0LCAyOTc3OSwgMjk3ODMsIDI5Nzg3LCAyOTc5MiwgMjk3OTcsIDI5ODAyLCAyOTgwNywgMjk4MTIsIDI5ODE4LCAKLSAgICAyOTgyNCwgMjk4MjksIDI5ODMzLCAyOTgzOCwgMjk4NDQsIDI5ODQ4LCAyOTg1MywgMjk4NTgsIDI5ODYzLCAyOTg2OCwgCi0gICAgMjk4NzIsIDI5ODc1LCAyOTg4MCwgMjk4ODUsIDI5ODkwLCAyOTg5NSwgMjk5MDAsIDI5OTA2LCAyOTkxMiwgMjk5MTcsIAotICAgIDI5OTIyLCAyOTkyNiwgMjk5MzEsIDI5OTM2LCAyOTk0MSwgMjk5NDYsIDI5OTUxLCAyOTk1NSwgMjk5NjAsIDI5OTY1LCAKLSAgICAyOTk3MCwgMjk5NzQsIDI5OTc4LCAyOTk4MiwgMjk5ODcsIDI5OTk1LCAzMDAwMCwgMzAwMDYsIDMwMDEyLCAzMDAxOCwgCi0gICAgMzAwMjMsIDMwMDI3LCAzMDAzMCwgMzAwMzUsIDMwMDQwLCAzMDA0NCwgMzAwNDksIDMwMDUzLCAzMDA1OCwgMzAwNjIsIAotICAgIDMwMDY1LCAzMDA3MCwgMTcyODksIDMwMDc1LCAzMDA4MCwgMzAwODUsIDMwMDkzLCAyMTI2NywgMjg2NzMsIDkwMTksIAotICAgIDMwMDk4LCAzMDEwMywgMzAxMDcsIDMwMTEyLCAzMDExNiwgMzAxMjAsIDMwMTI1LCAzMDEyOSwgMzAxMzIsIDMwMTM1LCAKLSAgICAzMDEzOSwgMzAxNDQsIDMwMTQ4LCAzMDE1NiwgMzAxNjAsIDMwMTYzLCAzMDE2OCwgMzAxNzIsIDMwMTc2LCAzMDE4MSwgCi0gICAgMzAxODYsIDMwMTkwLCAzMDE5NiwgMzAyMDEsIDMwMjA2LCAzMDIxMywgMzAyMjAsIDMwMjI0LCAzMDIyNywgMzAyMzMsIAotICAgIDMwMjQyLCAzMDI0OSwgMzAyNTcsIDMwMjY0LCAzMDI2OCwgMzAyNzMsIDMwMjc3LCAzMDI4MSwgMzAyODcsIDMwMjkzLCAKLSAgICAzMDI5NywgMzAzMDMsIDMwMzA4LCAzMDMxMywgMzAzMjAsIDMwMzI2LCAzMDMzMiwgMzAzMzgsIDMwMzQ0LCAzMDM1MSwgCi0gICAgMzAzNTcsIDMwMzYzLCAzMDM2OSwgMzAzNzUsIDMwMzgxLCAzMDM4NywgMzAzOTMsIDMwNDAwLCAzMDQwNiwgMzA0MTMsIAotICAgIDMwNDE5LCAzMDQyNSwgMzA0MzEsIDMwNDM3LCAzMDQ0MywgMzA0NDksIDMwNDU1LCAzMDQ2MSwgMzA0NjcsIDExNDExLCAKLSAgICAzMDQ3MywgMzA0NzgsIDMwNDgzLCAzMDQ4NiwgMzA0OTQsIDMwNDk5LCAzMDUwOCwgMzA1MTQsIDMwNTE5LCAzMDUyNCwgCi0gICAgMzA1MjksIDMwNTMzLCAzMDUzOCwgMzA1NDMsIDMwNTQ4LCAzMDU1MywgMzA1NTgsIDMwNTY1LCAzMDU3MiwgMzA1NzgsIAotICAgIDMwNTg0LCAzMDU4OSwgMTYyOTAsIDMwNTk2LCAzMDYwMiwgMzA2MDksIDMwNjE1LCAzMDYyMSwgMzA2MjYsIDMwNjM0LCAKLSAgICAzMDYzOSwgMTYwNjksIDMwNjQzLCAzMDY0OCwgMzA2NTMsIDMwNjU5LCAzMDY2NCwgMzA2NjksIDMwNjczLCAzMDY3OCwgCi0gICAgMzA2ODMsIDMwNjg5LCAzMDY5NCwgMzA2OTksIDMwNzAzLCAzMDcwOCwgMzA3MTMsIDMwNzE3LCAzMDcyMiwgMzA3MjcsIAotICAgIDMwNzMyLCAzMDczNiwgMzA3NDEsIDMwNzQ2LCAzMDc1MSwgMzA3NTUsIDMwNzU5LCAxNTI4MCwgMzA3NjMsIDMwNzcyLCAKLSAgICAzMDc3OCwgMzA3ODQsIDMwNzkzLCAzMDgwMSwgMzA4MTAsIDMwODE4LCAzMDgyMywgMzA4MjcsIDMwODM0LCAzMDg0MCwgCi0gICAgMzA4NDQsIDMwODQ3LCAzMDg1MiwgMzA4NjEsIDMwODY5LCAzMDg3NCwgMTQ5NSwgMzA4ODAsIDMwODgzLCAzMDg4NywgCi0gICAgMjI0MTEsIDIyNDE3LCAzMDg5MywgMzA4OTcsIDMwOTA4LCAzMDkxOSwgMzA5MzAsIDMwOTQyLCAzMDk0OSwgMzA5NTYsIAotICAgIDMwOTYxLCAzMDk2NSwgNTkwOSwgNzU1LCAyMTI2NiwgMzA5NzMsIDMwOTc4LCAzMDk4MiwgMzA5ODcsIDMwOTkxLCAzMDk5NywgCi0gICAgMzEwMDIsIDMxMDA4LCAzMTAxMywgMzEwMTksIDMxMDI0LCAzMTAzMCwgMzEwMzUsIDMxMDQxLCAzMTA0NywgMzEwNTMsIAotICAgIDMxMDU4LCAzMTAxNCwgMzEwMjAsIDMxMDYyLCAzMTA2NywgMzEwNzMsIDMxMDc4LCAzMTA4NCwgMzEwODksIDMxMDk1LCAKLSAgICAzMTEwMCwgMzEwMjUsIDEwNDE0LCAzMTEwNCwgMzEwMzYsIDMxMDQyLCAzMTA0OCwgMjgzMSwgMzQyMywgMzExMTAsIAotICAgIDMxMTEzLCAzMTExOSwgMzExMjUsIDMxMTMxLCAzMTEzOCwgMzExNDQsIDMxMTUwLCAzMTE1NiwgMzExNjIsIDMxMTY4LCAKLSAgICAzMTE3NCwgMzExODAsIDMxMTg2LCAzMTE5MiwgMzExOTgsIDMxMjA0LCAzMTIxMCwgMzEyMTcsIDMxMjIzLCAzMTIyOSwgCi0gICAgMzEyMzUsIDMxMjQxLCAzMTI0NywgMzEyNTAsIDMxMjU1LCAzMTI1OCwgMzEyNjUsIDMxMjczLCAzMTI3OCwgMzEyODMsIAotICAgIDMxMjg5LCAzMTI5NCwgMzEyOTksIDMxMzAzLCAzMTMwOCwgMzEzMTQsIDMxMzE5LCAzMTMyNSwgMzEzMzAsIDMxMzM2LCAKLSAgICAzMTM0MSwgMzEzNDcsIDMxMzUzLCAzMTM1NywgMzEzNjIsIDMxMzY3LCAzMTM3MiwgMzEzNzcsIDMxMzgxLCAzMTM4NiwgCi0gICAgMzEzOTEsIDMxMzk2LCAzMTQwMiwgMzE0MDgsIDMxNDE0LCAzMTQyMCwgMzE0MjUsIDMxNDI5LCAzMTQzMiwgMzE0MzgsIAotICAgIDMxNDQ0LCAzMTQ1MywgMzE0NjEsIDMxNDY4LCAzMTQ3MywgMzE0NzcsIDMxNDgxLCAzMTQ4NiwgMTUxMzMsIDMxNDkxLCAKLSAgICAzMTQ5OSwgMzE1MDUsIDM2ODMsIDEzNzcsIDMxNTEwLCAzMTUxNCwgODAwNSwgMzE1MjAsIDMxNTI2LCAzMTUzMywgODAxNCwgCi0gICAgMzE1MzcsIDMxNTQzLCAzMTU1MCwgMzE1NTYsIDMxNTY1LCAzMTU3MywgMzE1ODUsIDMxNTg5LCAzMTU5NiwgMzE2MDIsIAotICAgIDMxNjA2LCAzMTYwOSwgMzE2MTgsIDMxNjI2LCAzMTAxNSwgMzE2MzEsIDMxNjQxLCAzMTY1MSwgMzE2NjEsIDMxNjY3LCAKLSAgICAzMTY3MiwgMzE2ODIsIDMxNjg3LCAzMTcwMCwgMzE3MTQsIDMxNzI1LCAzMTczNywgMzE3NDksIDMxNzYzLCAzMTc3NiwgCi0gICAgMzE3ODgsIDMxODAwLCAxNDU4NywgMzE4MTQsIDMxODE5LCAzMTgyNCwgMzE4MjgsIDMxODMyLCAzMTgzNiwgMTc4MCwgCi0gICAgMjcxNTksIDMxODQwLCAzMTg0NSwgMzEwNjMsIDMxODUwLCAzMTg1MywgMzE4NTgsIDMxODYzLCAzMTg2OCwgMzE4NzQsIAotICAgIDMxODgwLCAxMDA5MSwgMzE4ODUsIDMxODkyLCAxNTY4NCwgMzE4OTgsIDMxOTAzLCAzMTkwOCwgMzE5MTIsIDMxOTE3LCAKLSAgICAzMTkyMiwgMzEwNjgsIDMxOTI3LCAzMTkzMiwgMzE5MzcsIDMxOTQzLCAzMTA3NCwgMzE5NDgsIDMxOTUxLCAzMTk1OCwgCi0gICAgMzE5NjYsIDMxOTcyLCAzMTk3OCwgMzE5ODQsIDMxOTk1LCAzMjAwMCwgMzIwMDcsIDMyMDE0LCAzMjAyMSwgMzIwMjksIAotICAgIDMyMDM4LCAzMjA0NywgMzIwNTMsIDMyMDU5LCAzMjA2NywgMzEwNzksIDMyMDcyLCAzMjA3OCwgMzIwODQsIDMxMDg1LCAKLSAgICAzMjA4OSwgMzIwOTQsIDMyMTAyLCAzMjExMCwgMzIxMTYsIDMyMTIzLCAzMjEyOSwgMzIxMzYsIDMyMTQzLCAzMjE0OSwgCi0gICAgMzIxNTcsIDMyMTY3LCAzMjE3NCwgMzIxNzksIDMyMTg1LCAzMjE5MCwgMzIxOTUsIDMyMjAyLCAzMjIxMSwgMzIyMTksIAotICAgIDMyMjI0LCAzMjIzMCwgMzIyMzcsIDMyMjQ1LCAzMjI1MSwgMzIyNTYsIDMyMjYyLCAzMjI3MSwgMjc5MzYsIDMyMjc4LCAKLSAgICAzMjI4MiwgMzIyODcsIDMyMjk2LCAzMjMwMSwgMzIzMDYsIDMyMzExLCAxMjM5OCwgMzIzMTksIDMyMzI0LCAzMjMyOSwgCi0gICAgMzIzMzQsIDMyMzM4LCAzMjM0MywgMzIzNDgsIDMyMzU1LCAzMjM2MCwgMzIzNjUsIDMyMzcwLCAzMTA5MCwgMjEyMDMsIAotICAgIDMyMzc2LCAyNTE5LCAyNDQsIDMyMzc5LCAzMjM4MiwgMzIzODYsIDMyMzkwLCAzMjQwMCwgMzI0MDgsIDMyNDEyLCAzMjQxOSwgCi0gICAgMzI0MjYsIDMyNDMwLCAzMjQzMywgMzI0MzksIDMyNDQ3LCAzMjQ1NSwgMzI0NTksIDMyNDYzLCAzMjQ2NiwgMzI0NzMsIAotICAgIDMyNDc3LCAzMjQ4MSwgMzI0ODgsIDMyNDk2LCAzMTAyNiwgMzI1MDMsIDMyNTExLCAxMDE1MSwgNjYwLCAzMDgsIDMyNTIzLCAKLSAgICAzMjUyOCwgMzI1MzMsIDMyNTM5LCAzMjU0NCwgMzI1NDksIDM3MDQsIDMyNTU0LCAzMjU1NywgMzI1NjIsIDMyNTY3LCAKLSAgICAzMjU3MiwgMzI1NzcsIDMyNTgyLCAzMjU4OSwgMjI1MTIsIDMyNTk0LCAzMjU5OSwgMzI2MDQsIDMyNjA5LCAzMjYxNCwgCi0gICAgMzI2MjAsIDMyNjI1LCAzMjYzMSwgMzEyNjEsIDMyNjM3LCAzMjY0MiwgMzI2NDgsIDMyNjU0LCAzMjY2NCwgMzI2NjksIAotICAgIDMyNjc0LCAzMjY3OCwgMzI2ODMsIDMyNjg4LCAzMjY5MywgMzI2OTgsIDMyNzExLCAzMjcxNiwgMjIyODksIDE2NjkyLCAKLSAgICAzNzEwLCAzMjcyMCwgMzI3MjUsIDMyNzMwLCAzMjczNiwgMzI3NDEsIDMyNzQ2LCAzMjc1MCwgMzI3NTUsIDMyNzYwLCAKLSAgICAzMjc2NiwgMzI3NzEsIDMyNzc2LCAxMzgyLCAzMjc4MCwgMzI3ODUsIDMyNzkwLCAzMjc5NSwgMzI3OTksIDMyODA0LCAKLSAgICAzMjgwOSwgMzI4MTQsIDMyODIwLCAzMjgyNiwgMzI4MzEsIDMyODM1LCAzMjgzOSwgMzI4NDQsIDMyODQ5LCAzMjg1NCwgCi0gICAgMzI4NTgsIDMyODY2LCAzMjg3MCwgMzI4NzYsIDMyODgwLCAzMjg4NywgMTY0ODUsIDMxMDM3LCAzMjg5MywgMzI5MDAsIAotICAgIDMyOTA4LCAzMjkxNSwgMzI5MjEsIDMyOTM0LCAzMjk0NiwgMzI5NTIsIDMyOTU2LCAyNzczLCAzMjk2MCwgMzI5NjQsIAotICAgIDMyNDY4LCAzMjk3MywgMzI5ODQsIDMyOTg5LCAzMjk5NCwgMzI5OTksIDMzMDAzLCAzMzAwOCwgMjI0MjIsIDMzMDEyLCAKLSAgICAzMzAxNiwgMzMwMjEsIDMxMDQzLCAyMTI4NywgMzMwMjUsIDMzMDMwLCAzMzAzNiwgMzMwNDEsIDMzMDQ1LCAzMzA0OSwgCi0gICAgMzMwNTIsIDMzMDU2LCAzMzA2MiwgMzMwNzMsIDMzMDg1LCAzMTA0OSwgMzMwOTAsIDMzMDkzLCAzMzA5NywgMzQ3LCAKLSAgICAzMzEwMiwgMzMxMDcsIDMzMTEyLCAzMzExNywgMzMxMjIsIDMzMTI3LCAzMzEzMywgMzMxMzgsIDMzMTQzLCAzMzE0OSwgCi0gICAgMzMxNTQsIDMzMTYwLCAzMzE2NSwgMzMxNzEsIDMzMTc2LCAzMzE4MSwgMzMxODYsIDMzMTkxLCAzMzE5NiwgMzMyMDEsIAotICAgIDMzMjA2LCAzMzIxMSwgMzMyMTcsIDMzMjIyLCAzMzIyNywgMzMyMzIsIDMzMjM3LCAzMzI0MiwgMzMyNDcsIDMzMjUyLCAKLSAgICAzMzI1OCwgMzMyNjQsIDMzMjY5LCAzMzI3NCwgMzMyNzksIDMzMjg0LCAzMzI4OSwgMzMyOTQsIDMzMjk5LCAzMzMwNCwgCi0gICAgMzMzMDksIDMzMzE0LCAzMzMxOSwgMzMzMjQsIDMzMzI5LCAzMzMzNCwgMzMzMzksIDMzMzQ0LCAzMzM0OSwgMzMzNTQsIAotICAgIDMzMzYwLCAzMTMsIDI2LCAzMzM2NSwgMzMzNjksIDMzMzczLCAzMzM4MSwgMzMzODUsIDMzMzg5LCAzMzM5MiwgMzMzOTUsIAotICAgIDMzMzk3LCAzMzQwMiwgMzM0MDYsIDMzNDExLCAzMzQxNSwgMzM0MjAsIDMzNDI0LCAzMzQyOSwgMzM0MzMsIDMzNDM2LCAKLSAgICAzMzQzOCwgMzM0NDIsIDMzNDQ3LCAzMzQ1MSwgMzM0NjIsIDMzNDY1LCAzMzQ2NywgMzM0NzEsIDMzNDgzLCAzMzQ5MiwgCi0gICAgMzM0OTYsIDMzNTAwLCAzMzUwNiwgMzM1MTEsIDMzNTIwLCAzMzUyNiwgMzM1MzEsIDMzNTM2LCAzMzU0MCwgMzM1NDUsIAotICAgIDMzNTUyLCAzMzU1NywgMzM1NjMsIDMzNTY4LCAzMzU3MiwgMzM1NzksIDI1NzAxLCAyNTcxMSwgMzM1ODMsIDMzNTg4LCAKLSAgICAzMzU5MywgMzM1OTgsIDMzNjA1LCAzMzYwOSwgMzM2MTYsIDgxMTMsIDMzNjIyLCAzMzYzMSwgMzM2MzksIDMzNjU0LCAKLSAgICAzMzY2OCwgMzM2NzYsIDMzNjg3LCAzMzY5NiwgMzM3MDEsIDcyMjcsIDMzNzExLCAzMzcxNiwgMzM3MjEsIDMzNzI1LCAKLSAgICAzMzcyOCwgMzM3MzIsIDMzNzM3LCAzMzc0MSwgMzM3NDgsIDMzNzUzLCAzMzc1OCwgODkxMiwgMzM3NjgsIDMzNzcwLCAKLSAgICAzMzc3MywgMzM3NzcsIDMzNzgzLCAzMzc4NywgMzM3OTIsIDMzNzk3LCAzMzgwMywgMzM4MDgsIDMzODE0LCAzMzgxOSwgCi0gICAgMzM4MjksIDMzODM4LCAzMzg0NiwgMzM4NTEsIDMzODU3LCAzMzg2MiwgMzM4NjksIDMzODczLCAzMzg4MSwgMzM4ODgsIAotICAgIDMzOTAxLCAzMzkwOSwgMzM5MTMsIDMzOTIzLCAzMzkyOCwgMzM5MzIsIDMzOTQwLCAzMzk0OCwgMzM5NTIsIDMzOTYxLCAKLSAgICAzMzk2NywgMzM5NzIsIDMzOTgwLCAzMzk5MCwgMzM5OTksIDM0MDA4LCAzNDAxNywgMzQwMjgsIDM0MDM2LCAzNDA0NywgCi0gICAgMzQwNTYsIDM0MDYzLCAzNDA2OSwgMzQwNzQsIDM0MDg1LCAzNDA5MCwgMzQwOTQsIDM0MDk3LCAzNDEwMSwgMzQxMDksIAotICAgIDM0MTE1LCAzNDEyMywgMzQxMzAsIDM0MTM2LCAzNDE0MSwgMzQxNDcsIDI0MTgsIDM0MTUxLCAzNDE1MywgMzQxNTgsIAotICAgIDM0MTYzLCAzNDE2OCwgMzQxNzEsIDM0MTczLCAzNDE3NywgMzQxODAsIDM0MTg3LCAzNDE5MSwgOTg4NCwgMzQxOTUsIAotICAgIDM0MjAxLCAzNDIxMSwgMzQyMTYsIDM0MjIyLCAzNDIyNiwgMzQyMzEsIDM0MjQ0LCAyNjA4NywgMzQyNTAsIDM0MjU5LCAKLSAgICAxNzQ2MiwgMzQyNjYsIDM0Mjc1LCAzMTY0NywgMzQyODMsIDM0Mjg4LCAzNDI5MiwgMzQzMDAsIDM0MzA3LCAzNDMxMiwgCi0gICAgMzQzMTYsIDM0MzIxLCAzNDMyNSwgMzQzMzMsIDM0MzM5LCAzNDM0NSwgMzQzNTAsIDM0MzU0LCAzNDM1NywgMzQzNjIsIAotICAgIDM0Mzc1LCAzNDM5MSwgMjI5NzksIDM0NDA4LCAzNDQyMCwgMzQ0MzcsIDM0NDQ5LCAzNDQ2MywgMjI5OTYsIDIzMDE1LCAKLSAgICAzNDQ3NSwgMzQ0ODcsIDI2ODAsIDM0NTAxLCAzNDUwNiwgMzQ1MTEsIDM0NTE2LCAzNDUyMCwgMzQ1MjcsIDM0NTM5LCAKLSAgICAzNDU0NSwgMzQ1NDgsIDM0NTU5LCAzNDU3MCwgMzQ1NzUsIDMyMDY0LCA2OTUsIDM0NTc5LCAzNDU4MywgMzQ1ODcsIAotICAgIDM0NTkwLCAzNDU5NSwgMzQ2MDAsIDM0NjA2LCAzNDYxMSwgMzQ2MTYsIDM0NjIyLCAzNDYyOCwgMzQ2MzMsIDM0NjM3LCAKLSAgICAzNDY0MiwgMzQ2NDcsIDM0NjUyLCAzNDY1NiwgMzQ2NTksIDM0NjY1LCAzNDY3MCwgMzQ2NzUsIDM0NjgwLCAzNDY4NCwgCi0gICAgMzQ2ODksIDM0Njk1LCAzNDcwMywgMjYzMjAsIDM0NzA4LCAzNDcxMywgMzQ3MjAsIDM0NzI2LCAzNDczMiwgMzQ3MzcsIAotICAgIDM0NzQ1LCAyMjUyMSwgMzQ3NTIsIDM0NzU3LCAzNDc2MiwgMzQ3NjcsIDM0NzcxLCAzNDc3NCwgMzQ3NzksIDM0NzgzLCAKLSAgICAzNDc4NywgMzQ3OTQsIDM0ODAwLCAzNDgwNiwgMzQ4MTIsIDM0ODE5LCAzNDgyNCwgMzQ4MzAsIDMzOTQzLCAzNDgzNCwgCi0gICAgMzQ4MzgsIDM0ODQzLCAzNDg1NiwgMzQ4NjEsIDM0ODY3LCAzNDg3NSwgMzQ4ODIsIDM0ODkwLCAzNDkwMCwgMzQ5MDYsIAotICAgIDM0OTEyLCAzNDkxOCwgMzQ5MjIsIDM0OTMxLCAzNDkzOSwgMzQ5NDYsIDM0OTUxLCAzNDk1NiwgMTA0MzcsIDM0OTYxLCAKLSAgICAzNDk2OSwgMzQ5NzYsIDM0OTgyLCAzNDk5MiwgMzQ5OTcsIDM1MDAzLCAzNTAxMSwgMzYwOCwgMzUwMTgsIDM1MDI1LCAKLSAgICAzNjE0LCAzNTAyOSwgMzUwMzQsIDM1MDQ1LCAzNTA1MiwgMzUwNTgsIDM1MDY3LCAzNTA3MSwgNDAxNSwgMzUwNzQsIAotICAgIDM1MDgxLCAzNTA4NywgMzUwOTMsIDM1MTAxLCAzNTExMSwgMjkwNDIsIDM1MTE4LCAzNTEyNiwgMzUxMzEsIDM1MTM3LCAKLSAgICAzNTE0MiwgMjU5NDcsIDM1MTQ4LCAzNTE1NSwgMzUxNjEsIDM1MTcwLCAyMzY2MCwgMzUxNzcsIDM1MTgyLCAzNTE4NiwgCi0gICAgMzUxOTQsIDM1MjAyLCA5NjAwLCA1ODk1LCAzNTIwOSwgMzUyMTMsIDM1MjE1LCAzNTIxOSwgMzUyMjQsIDM1MjI2LCAKLSAgICAzNTIzMiwgMzUyMzcsIDM1MjQyLCAzNTI0OSwgMzI1ODUsIDM1MjU1LCAzNTI2MCwgMzUyNjQsIDM1MjY5LCAzNTI3MywgCi0gICAgMzUyODIsIDM1Mjg2LCAzNTI5MiwgMzUyOTksIDM1MzA1LCAzNTMxMiwgMzUzMTcsIDM1MzI2LCAzNTMzMSwgMzUzMzUsIAotICAgIDM1MzQwLCAzNTM0NywgMzUzNTUsIDM1MzYzLCAzNTM2OCwgMjEzNDMsIDM1MzcyLCAzNTM3NSwgMzUzNzksIDM1MzgzLCAKLSAgICAzNTM4NywgMzUzOTAsIDM1MzkyLCAzNTQwMCwgMzU0MDQsIDM1NDExLCAzNTQxNSwgMzU0MTksIDM1NDI3LCAzNTQzNCwgCi0gICAgMzU0NDQsIDM1NDQ4LCAzNTQ1MiwgMzU0NjAsIDM1NDY4LCAzNTQ3NCwgMzU0NzksIDM1NDg4LCAxMzM1MCwgMzU0OTQsIAotICAgIDM1NTAzLCAzNTUwOCwgMzU1MTUsIDM1NTIzLCAzNTUzMSwgMzU1MzksIDM1NTQ2LCAzNTU1MywgMzU1NjAsIDM1NTY3LCAKLSAgICAzNTU3NCwgMzU1NzksIDM1NTg1LCAzNTYwMiwgMzU2MTAsIDM1NjIwLCAzNTYyOCwgMzU2MzUsIDQwNywgMzU2MzksIAotICAgIDM1NjQ1LCAzNTY0OSwgMzU2NTQsIDMzNjkyLCAzNTY2MCwgMzU2NjMsIDM1NjY3LCAzNTY3NSwgMzYxOSwgMzU2ODMsIAotICAgIDM1Njg5LCAzNTY5NSwgMzU3MDQsIDM1NzE0LCAzNTcyMSwgMzU3MjcsIDM2MjUsIDM2MzEsIDM1NzM2LCAzNTc0MywgCi0gICAgMzU3NTEsIDM1NzU2LCAzNTc2MCwgMzU3NjcsIDM1Nzc1LCAzNTc4MiwgMzU3ODgsIDM1Nzk3LCAzNTgwNywgMzU4MTMsIAotICAgIDM1ODIxLCAzNTgzMCwgMzU4MzcsIDM1ODQ1LCAzNTg1MiwgMjIwMTksIDM1ODU2LCAzNTg2MywgMzU4NjksIDM1ODc5LCAKLSAgICAzNTg4OCwgMzU4OTksIDM1OTAzLCAzNTkxMywgMzU5MTksIDM1OTI2LCAzNTkzNCwgMzU5NDMsIDM1OTUyLCAzNTk2MiwgCi0gICAgMzU5NzMsIDM1OTgwLCAzNTk4NSwgMzU5OTIsIDMwMjksIDM2MDAwLCAzNjAwNiwgMzYwMTEsIDM2MDE3LCAzNjAyMywgCi0gICAgMzYwMjgsIDM2MDQxLCAzNjA1NCwgMzYwNjcsIDM2MDc0LCAzNjA4MCwgMzYwODgsIDM2MDk2LCAzNjEwMSwgMzYxMDUsIAotICAgIDE0NjksIDM2MTA5LCAzNjExNCwgMzYxMTksIDM2MTI0LCAzNjEyOSwgMzYxMzUsIDM2MTQwLCAzNjE0NSwgMzYxNTAsIAotICAgIDM2MTU1LCAzNjE2MCwgMzYxNjUsIDM2MTcwLCAzNjE3NiwgMzYxODIsIDM2MTg3LCAzNjE5MiwgMzYxOTgsIDM2MjAzLCAKLSAgICAzNjIwOCwgMzYyMTMsIDM2MjE5LCAzNjIyNCwgMzYyMjksIDM2MjM0LCAzNjIzOSwgMzYyNDUsIDM2MjUwLCAzNjI1NSwgCi0gICAgMzYyNjEsIDM2MjY2LCAzNjI3MSwgMzYyNzYsIDM2MjgxLCAzNjI4NiwgMzYyOTIsIDM2Mjk3LCAzNjMwMywgMzYzMDgsIAotICAgIDM2MzE0LCAzNjMxOSwgMzYzMjQsIDM2MzI5LCAzNjMzNSwgMzYzNDEsIDM2MzQ3LCAzNjM1MywgMzYzNTksIDM2MzY1LCAKLSAgICAzNjM3MSwgMzYzNzcsIDM2MzgyLCAzNjM4NywgMzYzOTMsIDM2Mzk4LCAzNjQwMywgMzY0MDgsIDM2NDEzLCAzNjQxOCwgCi0gICAgMzY0MjMsIDM2NDI4LCAzNjQzNCwgMzY0MzksIDM2NDQ0LCAzNjQ1MCwgMzY0NTYsIDEwMSwgMzY0NjEsIDM2NDYzLCAKLSAgICAzNjQ2NywgMzY0NzEsIDM2NDc1LCAzNjQ4MCwgMzY0ODQsIDk1MjEsIDM2NDg4LCAzNjQ5NCwgMTc0MSwgNjI4MCwgMzY1MDAsIAotICAgIDM2NTAzLCAzNjUwOCwgMzY1MTIsIDM2NTE3LCAzNjUyMSwgMzY1MjUsIDM2NTMwLCAxMDIzOCwgMzY1MzQsIDM2NTM4LCAKLSAgICAzNjU0MiwgMzY1NDYsIDE1MzcyLCAzNjU1MSwgMzY1NTUsIDM2NTYwLCAzNjU2NSwgMzY1NzAsIDM2NTc0LCAzNjU4MSwgCi0gICAgMjYxMTEsIDM2NTg3LCAzNjU5MCwgMzY1OTQsIDM2NTk5LCAzNjYwNSwgMzY2MDksIDM2NjE3LCAzNjYyMywgMzY2MjgsIAotICAgIDM2NjMyLCAzNjYzOCwgMzY2NDIsIDM2NjQ2LCAzNDYyLCAzNDY3LCAyOTIzNCwgMzY2NDksIDM2NjUzLCAzNjY1NywgCi0gICAgMzY2NjEsIDM2NjY5LCAzNjY3NiwgMzY2ODAsIDM2Njg3LCAzNjY5MiwgMzE3LCAzNjY5NywgMzY3MDEsIDM2NzA3LCAKLSAgICAzNjcxOSwgMzY3MjUsIDM2NzMxLCAzNjczNSwgMzY3NDEsIDM2NzUwLCAzNjc1NCwgMzY3NTgsIDM2NzYzLCAzNjc2OSwgCi0gICAgMzY3NzQsIDM2Nzc4LCAzNjc4MywgMzY3ODcsIDM2NzkxLCAzNjc5OCwgMzY4MDQsIDM2ODA5LCAzNjgyNCwgMzY4MzksIAotICAgIDM2ODU0LCAzNjg3MCwgMzY4ODgsIDEwMTg4LCAzNjkwMiwgMzY5MDksIDM2OTEzLCAzNjkxNiwgMzY5MjUsIDM2OTMwLCAKLSAgICAzNjkzNCwgMzY5NDIsIDMzODk0LCAzNjk1MCwgMzY5NTQsIDM2OTY0LCAzNjk3NSwgMjkyMDQsIDM2OTg4LCAzNjk5MiwgCi0gICAgMzcwMDEsIDM3MDA5LCA5Nzc4LCAxNDkwMCwgMzcwMTMsIDIyNDM0LCAzNzAxNiwgMzAxNTIsIDM3MDIxLCA5Nzc3LCAKLSAgICAzNzAyNiwgMzcwMzIsIDM3MDM3LCAzNzA0MywgMzcwNDgsIDM3MDU0LCAzNzA1OSwgMzcwNjUsIDM3MDcwLCAzNzA3NiwgCi0gICAgMzcwODIsIDM3MDg4LCAzNzA5MywgMzcwNDksIDM3MDU1LCAzNzA2MCwgMzcwNjYsIDM3MDcxLCAzNzA3NywgMzcwODMsIAotICAgIDgxMjYsIDM4NzQsIDM3MDk3LCAzNzEwNSwgMzcxMDksIDM3MTEyLCAzNzExNiwgMzcxMjEsIDM3MTI2LCAzNzEzMiwgCi0gICAgMzcxMzgsIDM3MTQzLCAzNzE0NywgMjU5NTksIDM3MTUxLCAzNzE1NSwgMzcxNjEsIDM3MTY1LCA5MDQyLCAzNzE3NCwgCi0gICAgMzcxODEsIDM3MTg1LCAxMTg2OCwgMzcxOTIsIDM3MTk4LCAzNzIwMywgMzcyMTAsIDM3MjE3LCAzNzIyNCwgMjg1NTAsIAotICAgIDgwNDksIDM3MjMxLCAzNzIzOCwgMzcyNDUsIDM3MjUxLCAzNzI1NiwgMzcyNjMsIDM3Mjc0LCAzNzI4MCwgMzcyODUsIAotICAgIDM3MjkwLCAzNzI5NSwgMzczMDIsIDM3MDUwLCAzNzMwNiwgMzczMTYsIDM3MzI3LCAzNzMzMywgMzczMzgsIDM3MzQzLCAKLSAgICAzNzM0OCwgMzczNTMsIDM3MzU4LCAzNzM2MiwgMzczNjYsIDM3MzcyLCAzNzM4MCwgMjMxOSwgODY1LCAxMDI1NCwgMTAyNjYsIAotICAgIDEwMjcxLCAxMDI3NywgMzczODksIDEwMjgyLCAxMDI4NywgMTAyOTMsIDM3Mzk0LCAzNzQwNCwgMzc0MDgsIDEwMjk4LCAKLSAgICAzNzQxMywgMTY4OTAsIDM3NDE2LCAzNzQyMSwgMzc0MjUsIDM3NDMwLCAzNzQzNSwgMzc0NDIsIDM3NDQ5LCAzNzQ1MywgCi0gICAgMzc0NTYsIDM3NDY0LCAxMDIwMSwgMzc0NzEsIDM3NDc0LCAzNzQ4MCwgMzc0OTAsIDU5MjksIDM3NDk5LCAzNzUwMywgCi0gICAgMzc1MTEsIDM3NTE1LCAzNzUyNSwgMzc1MzEsIDM3NTQyLCAzNzU0OCwgMzc1NTQsIDM3NTU5LCAzNzU2NSwgMzc1NzEsIAotICAgIDM3NTc3LCAzNzU4MiwgMzc1ODUsIDM3NTkyLCAzNzU5OCwgMzc2MDMsIDM3NjEwLCAzNzYxNywgMzc2MjEsIDM3NjMxLCAKLSAgICAzNzY0NCwgMzc2NTMsIDM3NjYyLCAzNzY3MywgMzc2ODYsIDM3Njk3LCAzNzcwNiwgMzc3MTcsIDM3NzIyLCAzNzczMSwgCi0gICAgMzc3MzYsIDEwMzAzLCAzNzc0MiwgMzc3NDksIDM3NzU3LCAzNzc2MiwgMzc3NjYsIDM3NzczLCAzNzc4MCwgMzgyOSwgMTYsIAotICAgIDM3Nzg0LCAzNzc4OSwgMTY3NDQsIDM3NzkzLCAzNzc5NiwgMzc3OTksIDI4MDU2LCAzNzgwMywgMjg1NTksIDM3ODExLCAKLSAgICAzNzgxNSwgMzc4MTksIDM3ODIyLCAzNzgyOCwgMzcwNzIsIDM3ODM0LCAzNzg0MiwgMzc4NDgsIDM3ODU1LCAyODAzOSwgCi0gICAgMzc4NTksIDI4MjMzLCAzNzg2MywgMzc4NzIsIDM3ODc4LCAzNzg4NCwgMzc4ODksIDM3ODkzLCAzNzg5OSwgMzc5MDMsIAotICAgIDM3OTExLCAzNzkxOSwgMjYxNzcsIDM3OTI1LCAzNzkzMiwgMzc5MzgsIDM3OTQzLCAzNzk0OCwgMzc5NTIsIDM3OTU4LCAKLSAgICAzNzk2MywgMzc5NjksIDQwNTYsIDc5MSwgMzc5NzYsIDM3OTgwLCAzNzk4MywgMTUyNjIsIDM3OTk1LCAzNTgyNiwgMzgwMDYsIAotICAgIDM4MDA5LCAzODAxNiwgMzgwMjAsIDM4MDI2LCAzODAzMCwgMzgwMzYsIDM4MDQxLCAzODA0NywgMzgwNTIsIDM4MDU3LCAKLSAgICAzODA2MSwgMzgwNjUsIDM4MDcwLCAzODA3NSwgMzgwODUsIDM4MDkxLCAzODEwNCwgMzgxMTAsIDM4MTE2LCAzODEyMywgCi0gICAgMzgxMjgsIDM4MTM0LCAzODEzOSwgMTY2MzAsIDE0NzIsIDEwMTksIDMxMTkzLCAzMTE5OSwgMzgxNDQsIDMxMjA1LCAKLSAgICAzMTIxOCwgMzEyMjQsIDMxMjMwLCAzODE1MCwgMzEyMzYsIDMxMjQyLCAzODE1NiwgMzgxNjIsIDIyLCAzODE3MCwgMzgxNzcsIAotICAgIDM4MTgxLCAzODE4NSwgMzgxOTMsIDMxOTUzLCAzODE5NywgMzgyMDEsIDM4MjA4LCAzODIxMywgMzgyMTcsIDM4MjIyLCAKLSAgICAzODIyOCwgMzgyMzMsIDM4MjM5LCAzODI0NCwgMzgyNDgsIDM4MjUyLCAzODI1NiwgMzgyNjEsIDM4MjY1LCAzODI3MCwgCi0gICAgMzgyNzQsIDM4MjgxLCAzODI4NiwgMzgyOTAsIDM4Mjk1LCAzODI5OSwgMzgzMDQsIDM4MzA4LCAzODMxMywgMzgzMTksIAotICAgIDE1NDgyLCAxNTQ4NywgMzgzMjQsIDM4MzI4LCAzODMzMSwgMzgzMzUsIDIxMTcwLCAzODM0MCwgMzgzNDQsIDM4MzUwLCAKLSAgICAzODM1NywgMzgzNjIsIDM4MzcyLCAzODM3NywgMzgzODUsIDM4Mzg5LCAzODM5MiwgMzE5NjgsIDM4Mzk2LCA0MTA5LCAKLSAgICAzODQwMSwgMzg0MDYsIDM4NDEwLCAzODQxNSwgMzg0MTksIDM4NDI0LCAxMzM2OCwgMzg0MzUsIDM4NDM5LCAzODQ0MiwgCi0gICAgMzg0NDcsIDM4NDUxLCAzODQ1NSwgMzg0NTgsIDM4NDYyLCA4MTQ1LCAxMzM4NCwgMzg0NjUsIDM4NDY4LCAzODQ3NCwgCi0gICAgMzg0NzksIDM4NDg1LCAzODQ5MCwgMzg0OTYsIDM4NTAxLCAzODUwNywgMzg1MTIsIDM4NTE4LCAzODUyNCwgMzg1MzAsIAotICAgIDM4NTM1LCAzODUzOSwgMzg1NDMsIDM4NTUyLCAzODU2OCwgMzg1ODQsIDM4NTk0LCAyNzk0NiwgMzg2MDEsIDM4NjA1LCAKLSAgICAzODYxMCwgMzg2MTUsIDM4NjE5LCAzODYyMywgMzU5NDcsIDM4NjI5LCAzODYzNCwgMzg2MzgsIDM4NjQ1LCAzODY1MCwgCi0gICAgMzg2NTQsIDM4NjU4LCAyNjk3OSwgMzg2NjQsIDIxNDM4LCAzODY2OSwgMzg2NzYsIDM4Njg0LCAzODY5MCwgMzg2OTcsIAotICAgIDM4NzA1LCAzODcxMSwgMzg3MTUsIDM4NzIxLCAzODcyOSwgMzg3MzMsIDM4NzQyLCA5NTAyLCAzODc1MCwgMzg3NTQsIAotICAgIDM4NzYyLCAzODc2OSwgMzg3NzQsIDM4Nzc5LCAzODc4MywgMzg3ODYsIDM4NzkwLCAzODc5MywgMzg3OTcsIDM4ODA0LCAKLSAgICAzODgwOSwgMzg4MTUsIDI2Mzk4LCAzMTI1NiwgMzg4MTksIDM4ODI2LCAzODgzMiwgMzg4MzgsIDM4ODQzLCAzODg0NiwgCi0gICAgMzg4NDgsIDM4ODU1LCAzODg2MiwgMzg4NjgsIDM4ODcyLCAzODg3NSwgMzg4NzksIDM4ODgzLCAzODg4NywgMzg4OTIsIAotICAgIDM4ODk2LCAzODkwMCwgMzg5MDMsIDM4OTA3LCAzODkyMSwgMjMwNDUsIDM4OTQwLCAzODk1MywgMzg5NjYsIDM4OTc5LCAKLSAgICAyMzA2MywgMzg5OTQsIDEwNDkwLCAzOTAwOSwgMzkwMTUsIDM5MDE5LCAzOTAyMywgMzkwMzAsIDM5MDM1LCAzOTAzOSwgCi0gICAgMzkwNDYsIDM5MDUyLCAzOTA1NywgMzkwNjMsIDM5MDczLCAzOTA4NSwgMzkwOTYsIDM5MTAxLCAzOTEwOCwgMzkxMTIsIAotICAgIDM5MTE2LCAzOTExOSwgMTU4NzgsIDM2NzcsIDM5MTI3LCAxNTUwOSwgMzkxNDAsIDM5MTQ3LCAzOTE1MSwgMzkxNTUsIAotICAgIDM5MTYwLCAzOTE2NSwgMzkxNzEsIDM5MTc1LCAzOTE3OSwgMzkxODIsIDc3NDIsIDE1NTIwLCAzOTE4NywgMzkxOTEsIAotICAgIDM5MTk3LCAzOTIwNiwgMzkyMTEsIDM5MjE4LCAzNTgwMywgMzkyMjQsIDM5MjI5LCAzOTIzMywgMzkyMzgsIDM5MjQ1LCAKLSAgICAzOTI0OSwgMzkyNTIsIDM5MjU2LCAzOTI2MSwgMTQ1NTIsIDM5MjY4LCAzOTI3NSwgMTA2NiwgMzkyNzksIDM5Mjg0LCAKLSAgICAzOTI4OSwgMzkyOTUsIDM5MzAwLCAzOTMwNSwgMzkzMDksIDM5MzE5LCAzOTMyNCwgMzkzMzAsIDM5MzM1LCAzOTM0MSwgCi0gICAgMzkzNDYsIDM5MzUyLCAzOTM2MiwgMzkzNjcsIDM5MzcyLCAzOTM3NiwgNzIyOSwgNzI0MSwgMzkzODEsIDM5Mzg0LCAKLSAgICAzOTM5MSwgMzkzOTcsIDM0MDU5LCAzNDA2NiwgMzk0MDYsIDM5NDEwLCAzMjAxNiwgMzk0MTgsIDM5NDI5LCAzOTQzNywgCi0gICAgMzU5OTUsIDM5NDQ0LCAzOTQ0OSwgMzk0NTQsIDM5NDY1LCAzOTQ3MiwgMzk0ODMsIDMyMDQwLCAyMTQ0NCwgMzk0OTEsIAotICAgIDczNSwgMzk0OTYsIDM5NTAyLCAyODAzMCwgMzk1MDgsIDM5NTEzLCAzOTUyMywgMzk1MzIsIDM5NTM5LCAzOTU0NSwgCi0gICAgMzk1NDksIDM5NTUyLCAzOTU1OSwgMzk1NjUsIDM5NTcyLCAzOTU3OCwgMzk1ODgsIDM5NTk2LCAzOTYwMiwgMzk2MDgsIAotICAgIDM5NjEzLCAzOTYxNywgMzk2MjQsIDM5NjMwLCAzOTYzNywgMzg4ODgsIDUzNSwgMTM4MDUsIDM5NjQzLCAzOTY0OCwgCi0gICAgMzk2NTEsIDM5NjU3LCAzOTY2NSwgMTM5NiwgMzk2NzAsIDM5Njc0LCAzOTY3OSwgMzk2ODYsIDM5NjkyLCAzOTY5NiwgCi0gICAgMzk3MDAsIDM5NzA1LCAzOTcxNCwgMzk3MjEsIDM5NzMxLCAzOTczNywgMjgwNzQsIDM5NzU0LCAzOTc2MywgMzk3NzEsIAotICAgIDM5Nzc3LCAzOTc4MiwgMzk3ODksIDM5Nzk1LCAzOTgwMywgMzk4MTIsIDM5ODIwLCAzOTgyNCwgMzk4MjksIDM5ODM3LCAKLSAgICAzMjA0OSwgMzk4NDMsIDM5ODYyLCAxNTgxMSwgMzk4NzYsIDM5ODkyLCAzOTkwNiwgMzk5MTIsIDM5OTE3LCAzOTkyMiwgCi0gICAgMzk5MjcsIDM5OTMzLCAzMjA1NSwgMzk5MzgsIDM5OTQ1LCAzOTk1MCwgMzk5NTQsIDM0NSwgMjkzNiwgMzk5NjEsIDM5OTY2LCAKLSAgICAzOTk3MSwgMjczMDUsIDM5NzkyLCAzOTk3NSwgMzk5ODAsIDM5OTg4LCAzOTk5MiwgMzk5OTUsIDQwMDAxLCA0MDAwNywgCi0gICAgNDAwMTEsIDI4MTI5LCA0MDAxNCwgNDAwMTksIDQwMDIzLCA0MDAyNiwgNDAwMzEsIDQwMDM1LCA0MDA0MCwgNDAwNDUsIAotICAgIDQwMDQ5LCA0MDA1NCwgNDAwNTgsIDQwMDYyLCAyMTE2NiwgMjExNzcsIDQwMDY2LCA0MDA3MSwgNDAwNzcsIDI2OTM2LCAKLSAgICA0MDA4MiwgNDAwODYsIDIxMjUzLCAxNjA1OSwgNDAwODksIDQwMDk0LCA0MDA5OSwgNDAxMDQsIDQwMTA5LCA0MDExNCwgCi0gICAgNDAxMTksIDQwMTI0LCA0NDcsIDQzLCAzMTI3NCwgMzEyNzksIDMxMjg0LCAzMTI5MCwgMzEyOTUsIDMxMzAwLCA0MDEyOSwgCi0gICAgMzEzMDQsIDQwMTMzLCA0MDEzNywgNDAxNDEsIDMxMzA5LCAzMTMxNSwgNDAxNTUsIDMxMzI2LCAzMTMzMSwgNDAxNjMsIAotICAgIDQwMTY4LCAzMTMzNywgNDAxNzMsIDQwMTc4LCA0MDE4MywgNDAxODgsIDQwMTk0LCA0MDIwMCwgNDAyMDYsIDMxMzU0LCAKLSAgICA0MDIxOSwgNDAyMjUsIDMxMzU4LCA0MDIyOSwgMzEzNjMsIDQwMjM0LCAzMTM2OCwgMzEzNzMsIDQwMjM3LCA0MDI0MiwgCi0gICAgNDAyNDYsIDMwOTIzLCA0MDI1MiwgMTM1OTIsIDQwMjU5LCA0MDI2NCwgMzEzNzgsIDQwMjY4LCA0MDI3MywgNDAyNzgsIAotICAgIDQwMjgzLCA0MDI4NywgNDAyOTIsIDQwMjk3LCA0MDMwMywgNDAzMDgsIDQwMzEzLCA0MDMxOSwgNDAzMjUsIDQwMzMwLCAKLSAgICA0MDMzNCwgNDAzMzksIDQwMzQ0LCA0MDM0OSwgNDAzNTMsIDQwMzU4LCA0MDM2MywgNDAzNjgsIDQwMzc0LCA0MDM4MCwgCi0gICAgNDAzODYsIDQwMzkxLCA0MDM5NSwgNDA0MDAsIDQwNDA0LCAzMTM4MiwgMzEzODcsIDMxMzkyLCA0MDQwOCwgNDA0MTIsIAotICAgIDQwNDE2LCAzMTM5NywgMzE0MDMsIDMxNDA5LCAzMTQyMSwgNDA0MjgsIDI1OTk2LCA0MDQzMiwgNDA0MzYsIDQwNDQxLCAKLSAgICA0MDQ0NiwgNDA0NTEsIDQwNDU2LCA0MDQ2MCwgNDA0NjQsIDQwNDc0LCA0MDQ3OSwgNDA0ODQsIDQwNDg4LCA0MDQ5MiwgCi0gICAgNDA0OTUsIDQwNTAzLCAzMTQ2OSwgNDA1MDgsIDE0NzksIDQwNTE0LCA0MDUyMiwgNDA1MzEsIDQwNTM1LCA0MDUzOSwgCi0gICAgNDA1NDcsIDQwNTUzLCA0MDU2MSwgNDA1NzcsIDQwNTgxLCA0MDU4NSwgNDA1OTAsIDQwNjA1LCAzMTUwNiwgMTc0OSwgCi0gICAgMTIwNDgsIDQwNjA5LCAxMzc4LCA0MDYyMSwgNDA2MjIsIDQwNjMwLCA0MDYzNywgNDA2NDIsIDQwNjQ5LCA0MDY1NCwgCi0gICAgOTM3MiwgMTExNCwgMTAzMjUsIDQwNjYxLCA0MDY2NiwgNDA2NjksIDQwNjcyLCA0MDY4MSwgMTI4NiwgNDA2ODYsIDM5MDM2LCAKLSAgICA0MDY5MywgNDA2OTgsIDIyNDg2LCAyNTU3LCA0MDcwMiwgMTA3MzQsIDQwNzEyLCA0MDcxOCwgMjMzNywgMjM0NywgNDA3MjcsIAotICAgIDQwNzM2LCA0MDc0NiwgNDA3NTcsIDMyOTMsIDM0MjEyLCAxMDM3NywgMzgwNywgMTY2NjgsIDEyOTEsIDQwNzYyLCA0MDc3MCwgCi0gICAgNDA3NzcsIDQwNzgyLCA0MDc4NiwgNDA3OTAsIDIzODU4LCAxMDQwNCwgNDA3OTgsIDQwODA3LCA0MDgxNiwgNDA4MjQsIAotICAgIDQwODMxLCA0MDg0MiwgNDA4NDcsIDQwODYwLCA0MDg3MywgNDA4ODUsIDQwODk3LCA0MDkwOSwgNDA5MjIsIDQwOTMzLCAKLSAgICA0MDk0NCwgNDA5NTQsIDQwOTYyLCA0MDk3MCwgNDA5ODIsIDQwOTk0LCA0MTAwNSwgNDEwMTQsIDQxMDIyLCA0MTAyOSwgCi0gICAgNDEwNDEsIDQxMDQ4LCA0MTA1NywgNDEwNjQsIDQxMDc3LCA0MTA4MiwgNDEwOTIsIDQxMDk3LCA0MTEwMywgNDExMDgsIAotICAgIDM3MTgyLCA0MTExMiwgNDExMTksIDQxMTIzLCA0MTEzMCwgNDExMzgsIDI1MTgsIDQxMTQ1LCA0MTE1NiwgNDExNjYsIAotICAgIDQxMTc1LCA0MTE4MywgNDExOTMsIDQxMjAxLCA0MTIxMSwgNDEyMjAsIDQxMjI1LCA0MTIzMSwgNDEyMzcsIDM3MDksIAotICAgIDQxMjQ4LCA0MTI1OCwgNDEyNjcsIDQxMjc2LCA0MTI4NiwgNDEyOTQsIDQxMzAzLCA0MTMwOCwgNDEzMTMsIDQxMzE4LCAKLSAgICAxNzA1LCAzNywgNDEzMjYsIDQxMzM0LCA0MTM0NSwgNDEzNTYsIDE2MzQzLCA0MTM2NiwgNDEzNzAsIDQxMzc3LCA0MTM4MywgCi0gICAgNDEzODgsIDQxMzkyLCA0MTQwMywgNDE0MTMsIDQxNDIyLCA0MTQzMywgMTY3MTcsIDE2NzIyLCA0MTQzOCwgNDE0NDcsIAotICAgIDQxNDUyLCA0MTQ2MiwgNDE0NjcsIDQxNDc1LCA0MTQ4MywgNDE0OTAsIDQxNDk2LCA3MDc4LCAyMjgsIDQxNTAwLCA0MTUwNiwgCi0gICAgNDE1MTEsIDQxNTE0LCAyMTE3LCAzOTE1MiwgNDE1MjIsIDQxNTI2LCA0MTUyOSwgMTUxMiwgNDE1MzUsIDEzOTY3LCAxMjk2LCAKLSAgICA0MTU0MCwgNDE1NTMsIDQxNTY3LCAyNjQzLCA0MTU4NSwgNDE1OTcsIDQxNjA5LCAyNjU3LCAyNjc0LCA0MTYyMywgNDE2MzYsIAotICAgIDI2ODksIDQxNjUwLCA0MTY2MiwgMjcwNCwgNDE2NzYsIDEzMDIsIDEzMDgsIDEzMTQsIDEwNjUyLCA0MTY4MSwgNDE2ODYsIAotICAgIDQxNjkxLCA0MTY5NSwgNDE3MTAsIDQxNzI1LCA0MTc0MCwgNDE3NTUsIDQxNzcwLCA0MTc4NSwgNDE4MDAsIDQxODE1LCAKLSAgICA0MTgzMCwgNDE4NDUsIDQxODYwLCA0MTg3NSwgNDE4OTAsIDQxOTA1LCA0MTkyMCwgNDE5MzUsIDQxOTUwLCA0MTk2NSwgCi0gICAgNDE5ODAsIDQxOTk1LCA0MjAxMCwgNDIwMjUsIDQyMDQwLCA0MjA1NSwgNDIwNzAsIDQyMDg1LCA0MjEwMCwgNDIxMTUsIAotICAgIDQyMTMwLCA0MjE0NSwgNDIxNjAsIDQyMTc1LCA0MjE5MCwgNDIyMDUsIDQyMjIwLCA0MjIzNSwgNDIyNTAsIDQyMjY1LCAKLSAgICA0MjI4MCwgNDIyOTUsIDQyMzEwLCA0MjMyNSwgNDIzNDAsIDQyMzU1LCA0MjM3MCwgNDIzODUsIDQyNDAwLCA0MjQxNSwgCi0gICAgNDI0MzAsIDQyNDQ1LCA0MjQ2MCwgNDI0NzUsIDQyNDkwLCA0MjUwNSwgNDI1MjAsIDQyNTM1LCA0MjU1MCwgNDI1NjUsIAotICAgIDQyNTgwLCA0MjU5NSwgNDI2MTAsIDQyNjI1LCA0MjY0MCwgNDI2NTUsIDQyNjcwLCA0MjY4NSwgNDI3MDAsIDQyNzE1LCAKLSAgICA0MjczMCwgNDI3NDUsIDQyNzYwLCA0Mjc3NSwgNDI3OTAsIDQyODA1LCA0MjgyMCwgNDI4MzUsIDQyODUwLCA0Mjg2NSwgCi0gICAgNDI4ODAsIDQyODk1LCA0MjkxMCwgNDI5MjUsIDQyOTQwLCA0Mjk1NSwgNDI5NzAsIDQyOTg1LCA0MzAwMCwgNDMwMTUsIAotICAgIDQzMDMwLCA0MzA0NSwgNDMwNjAsIDQzMDc1LCA0MzA5MCwgNDMxMDUsIDQzMTIwLCA0MzEzNSwgNDMxNTAsIDQzMTY1LCAKLSAgICA0MzE4MCwgNDMxOTUsIDQzMjEwLCA0MzIyNSwgNDMyNDAsIDQzMjU1LCA0MzI3MCwgNDMyODUsIDQzMzAwLCA0MzMxNSwgCi0gICAgNDMzMzAsIDQzMzQ1LCA0MzM2MCwgNDMzNzUsIDQzMzkwLCA0MzQwNSwgNDM0MjAsIDQzNDM1LCA0MzQ1MCwgNDM0NjUsIAotICAgIDQzNDgwLCA0MzQ5NSwgNDM1MTAsIDQzNTI1LCA0MzU0MCwgNDM1NTUsIDQzNTcwLCA0MzU4NSwgNDM2MDAsIDQzNjE1LCAKLSAgICA0MzYzMCwgNDM2NDUsIDQzNjYwLCA0MzY3NSwgNDM2OTAsIDQzNzA1LCA0MzcyMCwgNDM3MzUsIDQzNzUwLCA0Mzc2NSwgCi0gICAgNDM3ODAsIDQzNzk1LCA0MzgxMCwgNDM4MjUsIDQzODQwLCA0Mzg1NSwgNDM4NzAsIDQzODg1LCA0MzkwMCwgNDM5MTUsIAotICAgIDQzOTMwLCA0Mzk0NSwgNDM5NjAsIDQzOTc1LCA0Mzk5MCwgNDQwMDUsIDQ0MDIwLCA0NDAzNSwgNDQwNTAsIDQ0MDY1LCAKLSAgICA0NDA4MCwgNDQwOTUsIDQ0MTEwLCA0NDEyNSwgNDQxNDAsIDQ0MTU1LCA0NDE3MCwgNDQxODUsIDQ0MjAwLCA0NDIxNSwgCi0gICAgNDQyMzAsIDQ0MjQ1LCA0NDI2MCwgNDQyNzUsIDQ0MjkwLCA0NDMwNSwgNDQzMjAsIDQ0MzM1LCA0NDM1MCwgNDQzNjUsIAotICAgIDQ0MzgwLCA0NDM5NSwgNDQ0MTAsIDQ0NDI1LCA0NDQ0MCwgNDQ0NTUsIDQ0NDcwLCA0NDQ4NSwgNDQ1MDAsIDQ0NTE1LCAKLSAgICA0NDUzMCwgNDQ1NDUsIDQ0NTYwLCA0NDU3NSwgNDQ1OTAsIDQ0NjA1LCA0NDYyMCwgNDQ2MzUsIDQ0NjUwLCA0NDY2NSwgCi0gICAgNDQ2ODAsIDQ0Njk1LCA0NDcxMCwgNDQ3MjUsIDQ0NzQwLCA0NDc1NSwgNDQ3NzAsIDQ0Nzg1LCA0NDgwMCwgNDQ4MTUsIAotICAgIDQ0ODMwLCA0NDg0NSwgNDQ4NjAsIDQ0ODc1LCA0NDg5MCwgNDQ5MDUsIDQ0OTIwLCA0NDkzNSwgNDQ5NTAsIDQ0OTY1LCAKLSAgICA0NDk4MCwgNDQ5OTUsIDQ1MDEwLCA0NTAyNSwgNDUwNDAsIDQ1MDU1LCA0NTA3MCwgNDUwODUsIDQ1MTAwLCA0NTExNSwgCi0gICAgNDUxMzAsIDQ1MTQ1LCA0NTE2MCwgNDUxNzUsIDQ1MTkwLCA0NTIwNSwgNDUyMjAsIDQ1MjM1LCA0NTI1MCwgNDUyNjUsIAotICAgIDQ1MjgwLCA0NTI5NSwgNDUzMTAsIDQ1MzI1LCA0NTM0MCwgNDUzNTUsIDQ1MzcwLCA0NTM4NSwgNDU0MDAsIDQ1NDE1LCAKLSAgICA0NTQzMCwgNDU0NDUsIDQ1NDYwLCA0NTQ3NSwgNDU0OTAsIDQ1NTA1LCA0NTUyMCwgNDU1MzUsIDQ1NTUwLCA0NTU2NSwgCi0gICAgNDU1ODAsIDQ1NTk1LCA0NTYxMCwgNDU2MjUsIDQ1NjQwLCA0NTY1NSwgNDU2NzAsIDQ1Njg1LCA0NTcwMCwgNDU3MTUsIAotICAgIDQ1NzMwLCA0NTc0NSwgNDU3NjAsIDQ1Nzc1LCA0NTc5MCwgNDU4MDUsIDQ1ODIwLCA0NTgzNSwgNDU4NTAsIDQ1ODY1LCAKLSAgICA0NTg4MCwgNDU4OTUsIDQ1OTEwLCA0NTkyNSwgNDU5NDAsIDQ1OTU1LCA0NTk3MCwgNDU5ODUsIDQ2MDAwLCA0NjAxNSwgCi0gICAgNDYwMzAsIDQ2MDQ1LCA0NjA2MCwgNDYwNzUsIDQ2MDkwLCA0NjEwNSwgNDYxMjAsIDQ2MTM1LCA0NjE1MCwgNDYxNjUsIAotICAgIDQ2MTgwLCA0NjE5NSwgNDYyMTAsIDQ2MjI1LCA0NjI0MCwgNDYyNTUsIDQ2MjcwLCA0NjI4NSwgNDYzMDAsIDQ2MzE1LCAKLSAgICA0NjMzMCwgNDYzNDUsIDQ2MzYwLCA0NjM3NSwgNDYzOTAsIDQ2NDA1LCA0NjQyMCwgNDY0MzUsIDQ2NDUwLCA0NjQ2NSwgCi0gICAgNDY0ODAsIDQ2NDk1LCA0NjUxMCwgNDY1MjUsIDQ2NTQwLCA0NjU1NSwgNDY1NzAsIDQ2NTg1LCA0NjYwMCwgNDY2MTUsIAotICAgIDQ2NjMwLCA0NjY0NSwgNDY2NjAsIDQ2Njc1LCA0NjY5MCwgNDY3MDUsIDQ2NzIwLCA0NjczNSwgNDY3NTAsIDQ2NzY1LCAKLSAgICA0Njc4MCwgNDY3OTUsIDQ2ODEwLCA0NjgyNSwgNDY4NDAsIDQ2ODU1LCA0Njg3MCwgNDY4ODUsIDQ2OTAwLCA0NjkxNSwgCi0gICAgNDY5MzAsIDQ2OTQ1LCA0Njk2MCwgNDY5NzUsIDQ2OTkwLCA0NzAwNSwgNDcwMjAsIDQ3MDM1LCA0NzA1MCwgNDcwNjUsIAotICAgIDQ3MDgwLCA0NzA5NSwgNDcxMTAsIDQ3MTI1LCA0NzE0MCwgNDcxNTUsIDQ3MTcwLCA0NzE4NSwgNDcyMDAsIDQ3MjE1LCAKLSAgICA0NzIzMCwgNDcyNDUsIDQ3MjYwLCA0NzI3NSwgNDcyOTAsIDQ3MzA1LCA0NzMyMCwgNDczMzUsIDQ3MzUwLCA0NzM2NSwgCi0gICAgNDczODAsIDQ3Mzk1LCA0NzQxMCwgNDc0MjUsIDQ3NDQwLCA0NzQ1NSwgNDc0NzAsIDQ3NDg1LCA0NzUwMCwgNDc1MTUsIAotICAgIDQ3NTMwLCA0NzU0NSwgNDc1NjAsIDQ3NTc1LCA0NzU5MCwgNDc2MDUsIDQ3NjIwLCA0NzYzNSwgNDc2NTAsIDQ3NjY1LCAKLSAgICA0NzY4MCwgNDc2OTUsIDQ3NzEwLCA0NzcyNSwgNDc3NDAsIDQ3NzU1LCA0Nzc3MCwgNDc3ODUsIDQ3ODAwLCA0NzgxNSwgCi0gICAgNDc4MzAsIDQ3ODQ1LCA0Nzg2MCwgNDc4NzUsIDQ3ODkwLCA0NzkwNSwgNDc5MjAsIDQ3OTM1LCA0Nzk1MCwgNDc5NjUsIAotICAgIDQ3OTgwLCA0Nzk5NSwgNDgwMTAsIDQ4MDI1LCA0ODA0MCwgNDgwNTUsIDQ4MDcwLCA0ODA4NSwgNDgxMDAsIDQ4MTE1LCAKLSAgICA0ODEzMCwgNDgxNDUsIDQ4MTYwLCA0ODE3NSwgNDgxOTAsIDQ4MjA1LCA0ODIyMCwgNDgyMzUsIDQ4MjUwLCA0ODI2NSwgCi0gICAgNDgyODAsIDQ4Mjk1LCA0ODMxMCwgNDgzMjUsIDQ4MzQwLCA0ODM1NSwgNDgzNzAsIDQ4Mzg1LCA0ODQwMCwgNDg0MTUsIAotICAgIDQ4NDMwLCA0ODQ0NSwgNDg0NjAsIDQ4NDc1LCA0ODQ5MCwgNDg1MDUsIDQ4NTIwLCA0ODUzNSwgNDg1NTAsIDQ4NTY1LCAKLSAgICA0ODU4MCwgNDg1OTUsIDQ4NjEwLCA0ODYyNSwgNDg2NDAsIDQ4NjU1LCA0ODY3MCwgNDg2ODUsIDQ4NzAwLCA0ODcxNSwgCi0gICAgNDg3MzAsIDQ4NzQ1LCA0ODc2MCwgNDg3NzUsIDQ4NzkwLCA0ODgwNSwgNDg4MjAsIDQ4ODM1LCA0ODg1MCwgNDg4NjUsIAotICAgIDQ4ODgwLCA0ODg5NSwgNDg5MTAsIDQ4OTI1LCA0ODk0MCwgNDg5NTUsIDQ4OTcwLCA0ODk4NSwgNDkwMDAsIDQ5MDE1LCAKLSAgICA0OTAzMCwgNDkwNDUsIDQ5MDYwLCA0OTA3NSwgNDkwOTAsIDQ5MTA1LCA0OTEyMCwgNDkxMzUsIDQ5MTUwLCA0OTE2NSwgCi0gICAgNDkxODAsIDQ5MTk1LCA0OTIxMCwgNDkyMjUsIDQ5MjQwLCA0OTI1NSwgNDkyNzAsIDQ5Mjg1LCA0OTMwMCwgNDkzMTUsIAotICAgIDQ5MzMwLCA0OTM0NSwgNDkzNjAsIDQ5Mzc1LCA0OTM5MCwgNDk0MDUsIDQ5NDIwLCA0OTQzNSwgNDk0NTAsIDQ5NDY1LCAKLSAgICA0OTQ4MCwgNDk0OTUsIDQ5NTExLCA0OTUyNywgNDk1NDMsIDQ5NTU5LCA0OTU3NSwgNDk1OTEsIDQ5NjA3LCA0OTYyMywgCi0gICAgNDk2MzksIDQ5NjU1LCA0OTY3MSwgNDk2ODcsIDQ5NzAzLCA0OTcxOSwgNDk3MzUsIDQ5NzUxLCA0OTc2NywgNDk3ODMsIAotICAgIDQ5Nzk5LCA0OTgxNSwgNDk4MzEsIDQ5ODQ3LCA0OTg2MywgNDk4NzksIDQ5ODk1LCA0OTkxMSwgNDk5MjcsIDQ5OTQzLCAKLSAgICA0OTk1OSwgNDk5NzUsIDQ5OTkxLCA1MDAwNywgNTAwMjMsIDUwMDM5LCA1MDA1NSwgNTAwNzEsIDUwMDg3LCA1MDEwMywgCi0gICAgNTAxMTksIDUwMTM1LCA1MDE1MSwgNTAxNjcsIDUwMTgzLCA1MDE5OSwgNTAyMTUsIDUwMjMxLCA1MDI0NywgNTAyNjMsIAotICAgIDUwMjc5LCA1MDI5NSwgNTAzMTEsIDUwMzI3LCA1MDM0MywgNTAzNTksIDUwMzc1LCA1MDM5MSwgNTA0MDcsIDUwNDIzLCAKLSAgICA1MDQzOSwgNTA0NTUsIDUwNDcxLCA1MDQ4NywgNTA1MDMsIDUwNTE5LCA1MDUzNSwgNTA1NTEsIDUwNTY3LCA1MDU4MywgCi0gICAgNTA1OTksIDUwNjE1LCA1MDYzMSwgNTA2NDcsIDUwNjYzLCA1MDY3OSwgNTA2OTUsIDUwNzExLCA1MDcyNywgNTA3NDMsIAotICAgIDUwNzU5LCA1MDc3NSwgNTA3OTEsIDUwODA3LCA1MDgyMywgNTA4MzksIDUwODU1LCA1MDg3MSwgNTA4ODcsIDUwOTAzLCAKLSAgICA1MDkxOSwgNTA5MzUsIDUwOTUxLCA1MDk2NywgNTA5ODMsIDUwOTk5LCA1MTAxNSwgNTEwMzEsIDUxMDQ3LCA1MTA2MywgCi0gICAgNTEwNzksIDUxMDk1LCA1MTExMSwgNTExMjcsIDUxMTQzLCA1MTE1OSwgNTExNzUsIDUxMTkxLCA1MTIwNywgNTEyMjMsIAotICAgIDUxMjM5LCA1MTI1NSwgNTEyNzEsIDUxMjg3LCA1MTMwMywgNTEzMTksIDUxMzM1LCA1MTM1MSwgNTEzNjcsIDUxMzgzLCAKLSAgICA1MTM5OSwgNTE0MTUsIDUxNDMxLCA1MTQ0NywgNTE0NjMsIDUxNDc5LCA1MTQ5NSwgNTE1MTEsIDUxNTI3LCA1MTU0MywgCi0gICAgNTE1NTksIDUxNTc1LCA1MTU5MSwgNTE2MDcsIDUxNjIzLCA1MTYzOSwgNTE2NTUsIDUxNjcxLCA1MTY4NywgNTE3MDMsIAotICAgIDUxNzE5LCA1MTczNSwgNTE3NTEsIDUxNzY3LCA1MTc4MywgNTE3OTksIDUxODE1LCA1MTgzMSwgNTE4NDcsIDUxODYzLCAKLSAgICA1MTg3OSwgNTE4OTUsIDUxOTExLCA1MTkyNywgNTE5NDMsIDUxOTU5LCA1MTk3NSwgNTE5OTEsIDUyMDA3LCA1MjAyMywgCi0gICAgNTIwMzksIDUyMDU1LCA1MjA3MSwgNTIwODcsIDUyMTAzLCA1MjExOSwgNTIxMzUsIDUyMTUxLCA1MjE2NywgNTIxODMsIAotICAgIDUyMTk5LCA1MjIxNSwgNTIyMzEsIDUyMjQ3LCA1MjI2MywgNTIyNzksIDUyMjk1LCA1MjMxMSwgNTIzMjcsIDUyMzQzLCAKLSAgICA1MjM1OSwgNTIzNzUsIDUyMzkxLCA1MjQwNywgNTI0MjMsIDUyNDM5LCA1MjQ1NSwgNTI0NzEsIDUyNDg3LCA1MjUwMywgCi0gICAgNTI1MTksIDUyNTM1LCA1MjU1MSwgNTI1NjcsIDUyNTgzLCA1MjU5OSwgNTI2MTUsIDUyNjMxLCA1MjY0NywgNTI2NjMsIAotICAgIDUyNjc5LCA1MjY5NSwgNTI3MTEsIDUyNzI3LCA1Mjc0MywgNTI3NTksIDUyNzc1LCA1Mjc5MSwgNTI4MDcsIDUyODIzLCAKLSAgICA1MjgzOSwgNTI4NTUsIDUyODcxLCA1Mjg4NywgNTI5MDMsIDUyOTE5LCA1MjkzNSwgNTI5NTEsIDUyOTY3LCA1Mjk4MywgCi0gICAgNTI5OTksIDUzMDE1LCA1MzAzMSwgNTMwNDcsIDUzMDYzLCA1MzA3OSwgNTMwOTUsIDUzMTExLCA1MzEyNywgNTMxNDMsIAotICAgIDUzMTU5LCA1MzE3NSwgNTMxOTEsIDUzMjA3LCA1MzIyMywgNTMyMzksIDUzMjU1LCA1MzI3MSwgNTMyODcsIDUzMzAzLCAKLSAgICA1MzMxOSwgNTMzMzUsIDUzMzUxLCA1MzM2NywgNTMzODMsIDUzMzk5LCA1MzQxNSwgNTM0MzEsIDUzNDQ3LCA1MzQ2MywgCi0gICAgNTM0NzksIDUzNDk1LCA1MzUxMSwgNTM1MjcsIDUzNTQzLCA1MzU1OSwgNTM1NzUsIDUzNTkxLCA1MzYwNywgNTM2MjMsIAotICAgIDUzNjM5LCA1MzY1NSwgNTM2NzEsIDUzNjg3LCA1MzcwMywgNTM3MTksIDUzNzM1LCA1Mzc1MSwgNTM3NjcsIDUzNzgzLCAKLSAgICA1Mzc5OSwgNTM4MTUsIDUzODMxLCA1Mzg0NywgNTM4NjMsIDUzODc5LCA1Mzg5NSwgNTM5MTEsIDUzOTI3LCA1Mzk0MywgCi0gICAgNTM5NTksIDUzOTc1LCA1Mzk5MSwgNTQwMDcsIDU0MDIzLCA1NDAzOSwgNTQwNTUsIDU0MDcxLCA1NDA4NywgNTQxMDMsIAotICAgIDU0MTE5LCA1NDEzNSwgNTQxNTEsIDU0MTY3LCA1NDE4MywgNTQxOTksIDU0MjE1LCA1NDIzMSwgNTQyNDcsIDU0MjYzLCAKLSAgICA1NDI3OSwgNTQyOTUsIDU0MzExLCA1NDMyNywgNTQzNDMsIDU0MzU5LCA1NDM3NSwgNTQzOTEsIDU0NDA3LCA1NDQyMywgCi0gICAgNTQ0MzksIDU0NDU1LCA1NDQ3MSwgNTQ0ODcsIDU0NTAzLCA1NDUxOSwgNTQ1MzUsIDU0NTUxLCA1NDU2NywgNTQ1ODMsIAotICAgIDU0NTk5LCA1NDYxNSwgNTQ2MzEsIDU0NjQ3LCA1NDY2MywgNTQ2NzksIDU0Njk1LCA1NDcxMSwgNTQ3MjcsIDU0NzQzLCAKLSAgICA1NDc1OSwgNTQ3NzUsIDU0NzkxLCA1NDgwNywgNTQ4MjMsIDU0ODM5LCA1NDg1NSwgNTQ4NzEsIDU0ODg3LCA1NDkwMywgCi0gICAgNTQ5MTksIDU0OTM1LCA1NDk1MSwgNTQ5NjcsIDU0OTgzLCA1NDk5OSwgNTUwMTUsIDU1MDMxLCA1NTA0NywgNTUwNjMsIAotICAgIDU1MDc5LCA1NTA5NSwgNTUxMTEsIDU1MTI3LCA1NTE0MywgNTUxNTksIDU1MTc1LCA1NTE5MSwgNTUyMDcsIDU1MjIzLCAKLSAgICA1NTIzOSwgNTUyNTUsIDU1MjcxLCA1NTI4NywgNTUzMDMsIDU1MzE5LCA1NTMzNSwgNTUzNTEsIDU1MzY3LCA1NTM4MywgCi0gICAgNTUzOTksIDU1NDE1LCA1NTQzMSwgNTU0NDcsIDU1NDYzLCA1NTQ3OSwgNTU0OTUsIDU1NTExLCA1NTUyNywgNTU1NDMsIAotICAgIDU1NTU5LCA1NTU3NSwgNTU1OTEsIDU1NjA3LCA1NTYyMywgNTU2MzksIDU1NjU1LCA1NTY3MSwgNTU2ODcsIDU1NzAzLCAKLSAgICA1NTcxOSwgNTU3MzUsIDU1NzUxLCA1NTc2NywgNTU3ODMsIDU1Nzk5LCA1NTgxNSwgNTU4MzEsIDU1ODQ3LCA1NTg2MywgCi0gICAgNTU4NzksIDU1ODk1LCA1NTkxMSwgNTU5MjcsIDU1OTQzLCA1NTk1OSwgNTU5NzUsIDU1OTkxLCA1NjAwNywgNTYwMjMsIAotICAgIDU2MDM5LCA1NjA1NSwgNTYwNzEsIDU2MDg3LCA1NjEwMywgNTYxMTksIDU2MTM1LCA1NjE1MSwgNTYxNjcsIDU2MTgzLCAKLSAgICA1NjE5OSwgNTYyMTUsIDU2MjMxLCA1NjI0NywgNTYyNjMsIDU2Mjc5LCA1NjI5NSwgNTYzMTEsIDU2MzI3LCA1NjM0MywgCi0gICAgNTYzNTksIDU2Mzc1LCA1NjM5MSwgNTY0MDcsIDU2NDIzLCA1NjQzOSwgNTY0NTUsIDU2NDcxLCA1NjQ4NywgNTY1MDMsIAotICAgIDU2NTE5LCA1NjUzNSwgNTY1NTEsIDU2NTY3LCA1NjU4MywgNTY1OTksIDU2NjE1LCA1NjYzMSwgNTY2NDcsIDU2NjYzLCAKLSAgICA1NjY3OSwgNTY2OTUsIDU2NzExLCA1NjcyNywgNTY3NDMsIDU2NzU5LCA1Njc3NSwgNTY3OTEsIDU2ODA3LCA1NjgyMywgCi0gICAgNTY4MzksIDU2ODU1LCA1Njg3MSwgNTY4ODcsIDU2OTAzLCA1NjkxOSwgNTY5MzUsIDU2OTUxLCA1Njk2NywgNTY5ODMsIAotICAgIDU2OTk5LCA1NzAxNSwgNTcwMzEsIDU3MDQ3LCA1NzA2MywgNTcwNzksIDU3MDk1LCA1NzExMSwgNTcxMjcsIDU3MTQzLCAKLSAgICA1NzE1OSwgNTcxNzUsIDU3MTkxLCA1NzIwNywgNTcyMjMsIDU3MjM5LCA1NzI1NSwgNTcyNzEsIDU3Mjg3LCA1NzMwMywgCi0gICAgNTczMTksIDU3MzM1LCA1NzM1MSwgNTczNjcsIDU3MzgzLCA1NzM5OSwgNTc0MTUsIDU3NDMxLCA1NzQ0NywgNTc0NjMsIAotICAgIDU3NDc5LCA1NzQ5NSwgNTc1MTEsIDU3NTI3LCA1NzU0MywgNTc1NTksIDU3NTc1LCA1NzU5MSwgNTc2MDcsIDU3NjIzLCAKLSAgICA1NzYzOSwgNTc2NTUsIDU3NjcxLCA1NzY4NywgNTc3MDMsIDU3NzE5LCA1NzczNSwgNTc3NTEsIDU3NzY3LCA1Nzc4MywgCi0gICAgNTc3OTksIDU3ODE1LCA1NzgzMSwgNTc4NDcsIDU3ODYzLCA1Nzg3OSwgNTc4OTUsIDU3OTExLCA1NzkyNywgNTc5NDMsIAotICAgIDU3OTU5LCA1Nzk3NSwgNTc5OTEsIDU4MDA3LCA1ODAyMywgNTgwMzksIDU4MDU1LCA1ODA3MSwgNTgwODcsIDU4MTAzLCAKLSAgICA1ODExOSwgNTgxMzUsIDU4MTUxLCA1ODE2NywgNTgxODIsIDE2NzQ5LCA1ODE5MSwgNTgxOTcsIDU4MjAzLCA1ODIxMywgCi0gICAgNTgyMjEsIDE0ODgxLCAxNTQzMiwgOTk1MywgNTgyMzQsIDE1MjAsIDU4MjQyLCAzNzYxLCAyNzQxNSwgNzE4MywgNTgyNDgsIAotICAgIDU4MjUzLCA1ODI1OCwgNTgyNjMsIDU4MjY4LCA1ODI3NCwgNTgyNzksIDU4Mjg1LCA1ODI5MCwgNTgyOTYsIDU4MzAxLCAKLSAgICA1ODMwNiwgNTgzMTEsIDU4MzE2LCA1ODMyMiwgNTgzMjcsIDU4MzMyLCA1ODMzNywgNTgzNDIsIDU4MzQ3LCA1ODM1MiwgCi0gICAgNTgzNTcsIDU4MzYzLCA1ODM2OCwgNTgzNzQsIDU4MzgxLCAyNTYxLCA1ODM4NiwgNTgzOTIsIDg1MjYsIDU4Mzk2LCAKLSAgICA1ODQwMSwgNTg0MDgsIDU4NDE2LCA0MCwgNTg0MjAsIDU4NDI2LCA1ODQzMSwgNTg0MzYsIDU4NDQwLCA1ODQ0NSwgNTg0NDksIAotICAgIDU4NDUzLCAxMDY3NywgNTg0NTcsIDU4NDY3LCA1ODQ4MCwgNTg0OTEsIDU4NTA0LCA1ODUxMSwgNTg1MTcsIDU4NTIyLCAKLSAgICA1ODUyOCwgNTg1MzQsIDU4NTQwLCA1ODU0NSwgNTg1NTAsIDU4NTU1LCA1ODU2MCwgNTg1NjQsIDU4NTY5LCA1ODU3NCwgCi0gICAgNTg1NzksIDU4NTg1LCA1ODU5MSwgNTg1OTcsIDU4NjAyLCA1ODYwNiwgNTg2MTEsIDU4NjE2LCA1ODYyMCwgNTg2MjUsIAotICAgIDU4NjMwLCA1ODYzNSwgNTg2MzksIDEwNjkzLCAxMDcwNCwgMTA3MDksIDE1NjMsIDU4NjQzLCAxNTY4LCA1ODY0OSwgCi0gICAgMTYyMjYsIDU4NjUyLCA1ODY1OCwgMTU5OSwgNTg2NjQsIDE2MDUsIDE2MTEsIDEwNzM5LCA1ODY2OSwgNTg2NzcsIDU4Njg0LCAKLSAgICA1ODY4OCwgNTg2OTQsIDU4Njk5LCAzMDk1MiwgNTg3MDQsIDU4NzExLCA1ODcxNiwgNTg3MjAsIDU4NzI0LCAxNjE2LCAKLSAgICAxNjMxOCwgNTg3MzMsIDU4NzM3LCAxNjMyOSwgMTEyMCwgNTg3NDEsIDU4NzQ4LCA1ODc1MywgNTg3NTcsIDE2MzU0LCAKLSAgICAxNjIwLCAzNzMyMSwgNTg3NjAsIDU4NzY1LCA1ODc3NSwgNTg3ODQsIDU4Nzg5LCA1ODc5MywgNTg3OTksIDE2MjUsIAotICAgIDM5MjMwLCA1ODgwNCwgNTg4MTMsIDU4ODE5LCA1ODgyNCwgMTA4OTcsIDEwOTAzLCA1ODgzMCwgNTg4NDIsIDU4ODU5LCAKLSAgICA1ODg3NiwgNTg4OTMsIDU4OTEwLCA1ODkyNywgNTg5NDQsIDU4OTYxLCA1ODk3OCwgNTg5OTUsIDU5MDEyLCA1OTAyOSwgCi0gICAgNTkwNDYsIDU5MDYzLCA1OTA4MCwgNTkwOTcsIDU5MTE0LCA1OTEzMSwgNTkxNDgsIDU5MTY1LCA1OTE4MiwgNTkxOTksIAotICAgIDU5MjE2LCA1OTIzMywgNTkyNTAsIDU5MjY3LCA1OTI4NCwgNTkzMDEsIDU5MzE4LCA1OTMzNSwgNTkzNTIsIDU5MzY5LCAKLSAgICA1OTM4NiwgNTk0MDMsIDU5NDIwLCA1OTQzNywgNTk0NTQsIDU5NDcxLCA1OTQ4OCwgNTk1MDUsIDU5NTIyLCA1OTUzOSwgCi0gICAgNTk1NTYsIDU5NTczLCA1OTU5MCwgNTk2MDcsIDU5NjI0LCA1OTY0MSwgNTk2NTgsIDU5Njc1LCA1OTY4NiwgNTk2OTEsIAotICAgIDE2MzAsIDU5Njk1LCA1OTcwMSwgNTk3MDYsIDU5NzExLCA5MzE5LCAxNjM1LCA1OTcxNywgNTk3MjYsIDI3NzEwLCA1OTczMSwgCi0gICAgNTk3NDIsIDU5NzUyLCA1OTc1NywgNTk3NjQsIDU5NzcwLCA1OTc3NSwgNTk3ODAsIDE2NjA2LCA1OTc4NCwgMTA5MTQsIAotICAgIDE2NDAsIDEwOTE5LCA1OTc5MCwgNTk3OTUsIDU5ODAxLCA1OTgwNiwgNTk4MTEsIDU5ODE2LCA1OTgyMSwgNTk4MjYsIAotICAgIDU5ODMxLCA1OTgzNiwgNTk4NDIsIDU5ODQ4LCA1OTg1NCwgNTk4NTksIDU5ODYzLCA1OTg2OCwgNTk4NzMsIDU5ODc3LCAKLSAgICA1OTg4MiwgNTk4ODcsIDU5ODkyLCA1OTg5NiwgNTk5MDEsIDU5OTA3LCA1OTkxMiwgNTk5MTcsIDU5OTIxLCA1OTkyNiwgCi0gICAgNTk5MzEsIDU5OTM3LCA1OTk0MiwgNTk5NDcsIDU5OTUzLCA1OTk1OSwgNTk5NjQsIDU5OTY4LCA1OTk3MywgNTk5NzgsIAotICAgIDU5OTgzLCA1OTk4NywgNTk5OTIsIDU5OTk3LCA2MDAwMiwgNjAwMDgsIDYwMDE0LCA2MDAxOSwgNjAwMjMsIDYwMDI3LCAKLSAgICA2MDAzMiwgNjAwMzcsIDYwMDQyLCAyOTEwOCwgNjAwNDYsIDYwMDUxLCA2MDA1NiwgNjAwNjIsIDYwMDY3LCA2MDA3MiwgCi0gICAgNjAwNzYsIDYwMDgxLCA2MDA4NiwgNjAwOTIsIDYwMDk3LCA2MDEwMiwgNjAxMDgsIDYwMTE0LCA2MDExOSwgNjAxMjMsIAotICAgIDYwMTI4LCA2MDEzMywgNjAxMzcsIDYwMTQyLCA2MDE0NywgNjAxNTIsIDYwMTU4LCA2MDE2NCwgNjAxNjksIDYwMTczLCAKLSAgICA2MDE3OCwgNjAxODMsIDYwMTg3LCA2MDE5MiwgNjAxOTcsIDYwMjAyLCA2MDIwNiwgNjAyMDksIDMxNjE0LCA2MDIxNCwgCi0gICAgNjAyMjIsIDE2NjcyLCAzNjYzLCAxMTAxMCwgNjAyMjgsIDYwMjM4LCA2MDI1MywgMTEwMTUsIDYwMjY0LCA2MDI2OSwgCi0gICAgNjAyODAsIDYwMjkyLCA2MDMwNCwgNjAzMTYsIDI2OTUsIDYwMzI4LCA2MDMzMywgNjAzNDUsIDYwMzQ5LCA2MDM1NSwgCi0gICAgNjAzNjEsIDYwMzY2LCAxNjUyLCAxMDY3LCA2MDM3NSwgNjAzODAsIDM5MjgwLCA2MDM4NCwgNjAzODgsIDYwMzkzLCAKLSAgICA2MDM5NywgMTY3NTcsIDYwNDAyLCA2MDQwNSwgNjA0MTMsIDYwNDIxLCAxNjU2LCAxMTA0MCwgMTEwNDYsIDE2NjEsIAotICAgIDYwNDI5LCA2MDQzNiwgNjA0NDEsIDYwNDUwLCA2MDQ2MCwgNjA0NjcsIDYwNDcyLCA2MDQ3NywgMTY2NiwgNjA0ODQsIAotICAgIDYwNDg5LCAxNjg3MiwgNjA0OTMsIDYwNDk4LCA2MDUwNSwgNjA1MTEsIDYwNTE1LCA2MDUyNiwgNjA1MzYsIDE2ODk0LCAKLSAgICA5MjI3LCA5MjM0LCAxNjcxLCA2MDU0MywgNjA1NDksIDYwNTU3LCA2MDU2NCwgNjA1NzAsIDYwNTc3LCA2MDU4OSwgNjA1OTUsIAotICAgIDYwNjAwLCA2MDYxMiwgNjA2MjMsIDYwNjMyLCA2MDY0MiwgMzc0MCwgMzA3ODgsIDMwNzk3LCAxNjkzNCwgMTY3NiwgMTY4MCwgCi0gICAgNjA2NTAsIDYwNjYxLCA2MDY2NiwgMTY4MywgNjA2NzQsIDYwNjc5LCAxNjk4NSwgNjA2OTEsIDYwNjk3LCA2MDcwMiwgCi0gICAgNjA3MTAsIDE2ODgsIDYwNzE1LCA2MDcyMCwgNjA3MjgsIDYwNzM2LCA2MDc0MywgNjA3NTIsIDYwNzYwLCA2MDc2OSwgCi0gICAgMTY5MywgNjA3NzMsIDE2OTgsIDYwNzc4LCA2MDc4NSwgMTcwNTksIDYwNzkzLCA2MDc5OSwgNjA4MDQsIDYwODEyLCAKLSAgICA2MDgxOSwgNjA4MjcsIDIyNTU3LCA2MDgzMiwgMTExNzUsIDYwODQxLCA2MDg0NywgNjA4NTQsIDYwODYxLCA2MDg2NywgCi0gICAgNjA4NzcsIDYwODgzLCA2MDg4OCwgNjA4OTksIDYwOTA0LCA2MDkxMiwgMTExODQsIDExMTg5LCA2MDkyMCwgNjA5MjYsIAotICAgIDYwOTM0LCAzODA1LCAxNzEwMSwgMzkzNjgsIDYwOTM5LCA2MDk0NSwgNjA5NTAsIDYwOTU4LCA2MDk2NSwgMTIwMjksIAotICAgIDYwOTcwLCA2MDk3NiwgMTcwOSwgNjA5ODEsIDYwOTg0LCAxMTI3LCA2MDk5MCwgNjA5OTUsIDYxMDAwLCA2MTAwNiwgCi0gICAgNjEwMTEsIDYxMDE2LCA2MTAyMSwgNjEwMjYsIDYxMDMxLCA2MTAzNiwgMTcxOCwgOSwgNjEwNDIsIDYxMDQ2LCA2MTA1MSwgCi0gICAgNjEwNTUsIDYxMDU5LCA2MTA2MywgMzE4NTQsIDYxMDY4LCA2MTA3MywgNjEwNzgsIDYxMDgyLCA2MTA4NSwgNjEwODksIAotICAgIDYxMDkzLCA2MTA5OCwgNjExMDIsIDYxMTA3LCA2MTExMSwgMzQ1OTEsIDM0NTk2LCAzNDYwMSwgNjExMTQsIDYxMTIxLCAKLSAgICA2MTEyNywgMzkwODksIDYxMTM3LCAzNDYwNywgMzIxMTIsIDMxODY5LCAzMTg3NSwgMzQ2MjMsIDMxODgxLCA2MTE0MiwgCi0gICAgNjExNDcsIDMyMTQ1LCA2MTE1MSwgNjExNTQsIDYxMTU4LCA2MTE2NSwgNjExNjgsIDYxMTczLCA2MTE3NywgNjExODEsIAotICAgIDYxMTg0LCA2MTE5NCwgNjEyMDYsIDYxMjEzLCA2MTIxOSwgNjEyMjYsIDMzNTQ4LCA2MTIyOSwgODU0MywgODc3LCA2MTIzMiwgCi0gICAgNjEyMzYsIDYxMjQxLCAzNjkwLCA2MTI0NSwgNjEyNDgsIDEzNjI1LCA2MTI1NSwgNjEyNjIsIDYxMjc1LCA2MTI4MywgCi0gICAgNjEyOTIsIDYxMzAxLCA2MTMwNiwgNjEzMTYsIDYxMzI5LCA2MTM0MSwgNjEzNDgsIDYxMzUzLCA2MTM2MiwgNjEzNzUsIAotICAgIDM2MDM1LCA2MTM5MywgNjEzOTgsIDYxNDA1LCA2MTQxMSwgNjUyLCA2MTQxNiwgNjE0MjQsIDYxNDMxLCAyNzI1NCwgNjI3LCAKLSAgICA2MTQzNywgNjE0NDMsIDYxNDUzLCA2MTQ1OSwgNjE0NjQsIDMxODk5LCA2MDAzLCAzMTkxMywgNjE0NjgsIDYxNDc4LCAKLSAgICA2MTQ4MywgNjE0OTMsIDYxNTA4LCA2MTUxNCwgNjE1MjAsIDMxOTIzLCA2MTUyNSwgMzEwNjksIDYxNTI5LCA2MTUzNCwgCi0gICAgNjE1MzksIDYxNTQzLCA2MTU0OCwgMTY5MzcsIDYxNTU1LCA2MTU2MCwgNjE1NjQsIDYwNDQsIDMxOTQ5LCA2MTU2OCwgCi0gICAgNjE1NzQsIDMxMiwgNjE1ODQsIDYxNTkxLCA2MTU5OCwgNjE2MDMsIDYxNjEyLCA1ODc2OSwgNjE2MTgsIDYxNjI2LCAKLSAgICA2MTYzMCwgNjE2MzQsIDYxNjM4LCA2MTY0MiwgNjE2NDcsIDYxNjUxLCA2MTY1NywgNjE2NjUsIDYxNjcwLCA2MTY3NSwgCi0gICAgNjE2NzksIDYxNjg0LCA2MTY4OCwgNjE2OTIsIDYxNjk4LCA2MTcwNCwgNjE3MDksIDYxNzEzLCAzMjA3MywgNjE3MTgsIAotICAgIDMyMDc5LCAzMjA4NSwgNjE3MjMsIDYxNzI5LCA2MTczNiwgNjE3NDEsIDYxNzQ1LCAzMTA4NiwgMTY1OTksIDYxNzQ4LCAKLSAgICA2MTc1MiwgNjE3NTcsIDYxNzY0LCA2MTc3MCwgNjE3NzQsIDYxNzc5LCAzODc5OSwgNjE3ODUsIDYxNzg5LCA2MTc5MywgCi0gICAgNjE3OTgsIDYxODA0LCA2MTgxMCwgNjE4MjIsIDYxODMxLCA2MTg0MSwgNjE4NDcsIDYxODU0LCA2MTg1OSwgNjE4NjQsIAotICAgIDYxODY4LCA2MTg3MSwgNjE4NzcsIDYxODg0LCA2MTg4OSwgNjE4OTQsIDYxOTAxLCA2MTkwOCwgNjE5MTQsIDYxOTE5LCAKLSAgICA2MTkyNCwgNjE5MzIsIDMyMDkwLCAyNDIzLCA2MTkzNywgNjE5NDIsIDYxOTQ4LCA2MTk1MywgNjE5NTksIDYxOTY0LCAKLSAgICA2MTk2OSwgNjE5NzQsIDYxOTgwLCAzMjExMSwgNjE5ODUsIDYxOTkxLCA2MTk5NywgNjIwMDMsIDMyMTc1LCA2MjAwOCwgCi0gICAgNjIwMTMsIDYyMDE4LCAzMjE4NiwgNjIwMjMsIDYyMDI4LCA2MjAzMywgNjIwMzksIDYyMDQ1LCAzMjE5MSwgNjIwNTAsIAotICAgIDYyMDU1LCA2MjA2MCwgMzIyNDYsIDMyMjUyLCA2MjA2NSwgNjIwNzAsIDMyMjU3LCA2MjA3NSwgMjc5MzcsIDMyMjc5LCAKLSAgICAzMjI4MywgNjIwODAsIDYyMDU2LCA2MjA4NCwgNjIwOTIsIDYyMDk4LCA2MjEwNiwgNjIxMTMsIDYyMTE5LCA2MjEyOSwgCi0gICAgNjIxMzUsIDYyMTQyLCAxMDYyNCwgMzIyOTcsIDYyMTQ4LCA2MjE2MSwgNjIxNzAsIDYyMTc2LCA2MjE4NSwgNjIxOTEsIAotICAgIDIzNDk1LCA2MjE5OCwgNjIyMDUsIDYyMjE1LCAzMjI0NywgNjIyMTgsIDYyMjI1LCA2MjIzMCwgNjIyMzQsIDYyMjM4LCAKLSAgICA2MjI0MywgNjEyMCwgNjIyNDcsIDYyMjUyLCA2MjI1NywgMzQ2ODUsIDM0NjkwLCA2MjI2MSwgMzQ3MDQsIDYyMjY2LCAKLSAgICAzNDcwOSwgNjIyNzEsIDYyMjc3LCAzNDcyMSwgMzQ3MjcsIDM0NzMzLCA2MjI4MiwgNjIyODgsIDIyNTIyLCA2MjI5OSwgCi0gICAgNjIzMDIsIDYyMzE0LCA2MjMyMiwgMzIzMjAsIDYyMzI2LCA2MjMzNSwgNjIzNDUsIDYyMzU0LCAzMjMzMCwgNjIzNTksIAotICAgIDYyMzY2LCA2MjM3NSwgNjIzODEsIDYyMzg5LCA2MjM5NiwgNjA5NSwgNDM5NywgNjI0MDEsIDMyMjU4LCA2MjQwNywgCi0gICAgNjI0MTAsIDYyNDE2LCA2MjQyMywgNjI0MjgsIDYyNDMzLCAyMzQwNSwgNjI0MzcsIDYyNDQzLCA2MjQ0OSwgNjI0NTQsIAotICAgIDYyNDU5LCA2MjQ2MywgNjI0NjksIDYyNDc1LCAzMzQ1OCwgODYzLCAzNTY5OCwgMzY2MTksIDM2NjI1LCAzMjM2NiwgCi0gICAgNjI0ODAsIDYyNDg0LCA2MjQ4OCwgNjI0OTEsIDYyNTA0LCA2MjUxMCwgNjI1MTQsIDYyNTE3LCA2MjUyMiwgMzM3NjEsIAotICAgIDYyNTI2LCAzMTA5MSwgMjEyNzQsIDYyNTMyLCA2MDI0LCA2MDMyLCA5MDY4LCA2MjUzNSwgNjI1NDAsIDYyNTQ1LCA2MjU1MCwgCi0gICAgNjI1NTUsIDYyNTYwLCA2MjU2NSwgNjI1NzAsIDYyNTc1LCA2MjU4MCwgNjI1ODYsIDYyNTkxLCA2MjU5NiwgNjI2MDIsIAotICAgIDYyNjA3LCA2MjYxMiwgNjI2MTcsIDYyNjIyLCA2MjYyNywgNjI2MzIsIDYyNjM4LCA2MjY0MywgNjI2NDksIDYyNjU0LCAKLSAgICA2MjY1OSwgNjI2NjQsIDYyNjY5LCA2MjY3NCwgNjI2NzksIDYyNjg0LCA2MjY4OSwgNjI2OTQsIDYyNjk5LCA2MjcwNSwgCi0gICAgNjI3MTAsIDYyNzE1LCA2MjcyMCwgNjI3MjUsIDYyNzMwLCA2MjczNSwgNjI3NDEsIDYyNzQ2LCA2Mjc1MSwgNjI3NTYsIAotICAgIDYyNzYxLCA2Mjc2NiwgNjI3NzEsIDYyNzc2LCA2Mjc4MSwgNjI3ODYsIDYyNzkyLCA2Mjc5NywgNjI4MDIsIDYyODA3LCAKLSAgICA2MjgxMiwgNjI4MTgsIDYyODI0LCA2MjgyOSwgNjI4MzUsIDYyODQwLCA2Mjg0NSwgNjI4NTAsIDYyODU1LCA2Mjg2MCwgCi0gICAgMTUxMywgMjQ1LCA2Mjg2NSwgNjI4NjksIDYyODczLCA2Mjg3NywgMjUxMTYsIDYyODgxLCA2Mjg4NSwgNjI4OTAsIDYyODk0LCAKLSAgICA2Mjg5OSwgNjI5MDMsIDYyOTA4LCA2MjkxMywgNjI5MTgsIDYyOTIyLCA2MjkyNiwgNjI5MzEsIDYyOTM1LCAxMzM2MiwgCi0gICAgNjI5NDAsIDYyOTQ0LCA2Mjk1MSwgNjI5NjEsIDE1MTkzLCA2Mjk3MCwgNjI5NzksIDYyOTgzLCA2Mjk4OCwgNjI5OTMsIAotICAgIDYyOTk3LCAyNDkwNywgMzAxOSwgNjMwMDEsIDE3MzUwLCA2MzAwNywgNjMwMTYsIDYzMDI0LCA2MzAzMCwgNjMwNDIsIAotICAgIDYzMDU0LCA2MzA1OCwgNjMwNjMsIDYzMDY3LCA2MzA3MywgNjMwNzksIDYzMDg0LCA2MzA5NCwgNjMxMDQsIDYzMTEwLCAKLSAgICA2MzExNSwgNjMxMTksIDYzMTI0LCA2MzEzMCwgNjMxMzksIDYzMTQ4LCA2MzE1NiwgMTU1NDcsIDYzMTYwLCA2MzE2OSwgCi0gICAgNjMxNzcsIDYzMTg5LCA2MzIwMCwgNjMyMTEsIDYzMjIwLCA2MzIyNCwgNjMyMzMsIDYzMjQzLCA2MzI1MSwgNjMyNTcsIAotICAgIDYzMjYyLCA2MzI2OCwgNjMyNzMsIDk4LCAzMDkwMCwgNjMyODQsIDI2MjQ5LCAyNjI1OSwgNjMyOTAsIDYzMjk3LCA2MzMwMywgCi0gICAgNjMzMDcsIDYzMzE3LCA2MzMyOCwgNjMzMzYsIDYzMzQ1LCA2MzM1MCwgNjMzNTUsIDYzMzU5LCAxNzMwNCwgNjMzNjcsIAotICAgIDYzMzcxLCA2MzM3NywgNjMzODcsIDYzMzk0LCA2MzQwMCwgMzQ3ODQsIDYzNDA2LCA2MzQwOCwgNjM0MTEsIDYzNDE1LCAKLSAgICA2MzQyNSwgNjM0MzEsIDYzNDM4LCAxMzMwOCwgNjM0NDUsIDYzNDUxLCA2MzQ2MCwgNjM0NjksIDYzNDc1LCA2MzQ4MSwgCi0gICAgNjM0ODcsIDYzNDkyLCA2MzQ5OSwgNjM1MDYsIDYzNTEyLCA2MzUyNSwgNjM1MzQsIDYzNTQzLCA2MzU0OCwgNjM1NTIsIAotICAgIDYzNTU4LCA2MzU2NSwgNjM1NzIsIDYzNTc5LCA2MzU4NiwgNjM1OTMsIDYzNTk4LCA2MzYwMiwgNjM2MDYsIDYzNjA5LCAKLSAgICA2MzYxOSwgNjM2MjMsIDYzNjM1LCA2MzY0NCwgNjM2NDgsIDYzNjUzLCA2MzY1NywgNjM2NjMsIDYzNjY4LCA2MzY3NSwgCi0gICAgNjM2ODQsIDYzNjkyLCA2MzcwMCwgNjM3MDUsIDYzNzA5LCA2MzcxNCwgNjM3MTksIDYzNzI5LCA2MzczNywgNjM3NDIsIAotICAgIDYzNzQ2LCA2Mzc1MCwgNjM3NTYsIDYzNzY4LCA2Mzc3NiwgNjM3ODYsIDYzNzkzLCA2Mzc5OSwgNjM4MDQsIDYzODA4LCAKLSAgICA2MzgxMiwgNjM4MTYsIDYzODI1LCA2MzgzNCwgNjM4NDMsIDYzODQ5LCA2Mzg1NSwgNjM4NjEsIDYzODY2LCA2Mzg3MywgCi0gICAgNjM4NzksIDYzODg3LCA2Mzg5NCwgMTI0NTYsIDYzOTAwLCA2MzkwNiwgNjM5MTAsIDE0MjMxLCA2MzkxNCwgNjM5MTksIAotICAgIDYzOTI5LCA2MzkzOCwgNjM5NDQsIDYzOTUwLCA2Mzk1OCwgNjM5NjUsIDYzOTY5LCA2Mzk3MywgNjM5NzksIDYzOTg3LCAKLSAgICA2Mzk5NCwgNjQwMDAsIDY0MDExLCA2NDAxNSwgNjQwMTksIDY0MDIzLCA2NDAyNiwgNjQwMzIsIDY0MDM3LCA2NDA0MSwgCi0gICAgNjQwNDUsIDY0MDU0LCA2NDA2MiwgNjQwNjksIDY0MDc1LCA2NDA4MiwgMjQwMjksIDM4ODQxLCA2NDA4NywgNjQwOTUsIAotICAgIDY0MDk5LCA2NDEwMywgNjQxMDYsIDY0MTE0LCA2NDEyMSwgNjQxMjcsIDY0MTM2LCA2NDE0NCwgNjQxNTAsIDY0MTU1LCAKLSAgICA2NDE1OSwgNjQxNjQsIDY0MTY4LCA2NDE3MiwgNjQxNzcsIDY0MTg2LCA2NDE5MCwgNjQxOTcsIDY0MjA0LCA2NDIxMCwgCi0gICAgNjQyMTgsIDY0MjI0LCA2NDIzNSwgNjQyNDMsIDY0MjQ5LCAyMjY1MiwgNjQyNTgsIDY0MjY1LCA2NDI3MiwgNjQyNzksIAotICAgIDY0Mjg2LCA2NDI5MywgNDE4NzAsIDEzMTQ2LCA2NDMwMCwgNjQzMDcsIDY0MzEyLCAzNDgyMCwgNjIxNywgNjQzMTgsIAotICAgIDY0MzIzLCA2NDMyOCwgNjQzMzQsIDY0MzQwLCA2NDM0NiwgNjQzNTEsIDY0MzU2LCA2NDM2MSwgNjQzNjYsIDY0MzcyLCAKLSAgICA2NDM3NywgNjQzODMsIDY0Mzg4LCA2NDM5NCwgNjQzOTksIDY0NDA0LCA2NDQwOSwgNjQ0MTQsIDY0NDE5LCA2NDQyNCwgCi0gICAgNjQ0MjksIDY0NDM1LCA2NDQ0MCwgNjQ0NDYsIDY0NDUxLCA2NDQ1NiwgNjQ0NjEsIDY0NDY2LCA2NDQ3MSwgNjQ0NzYsIAotICAgIDY0NDgyLCA2NDQ4NywgNjQ0OTIsIDY0NDk3LCA2NDUwMiwgNjQ1MDcsIDY0NTEyLCA2NDUxNywgNjQ1MjIsIDY0NTI3LCAKLSAgICA2NDUzMiwgNjQ1MzgsIDY0NTQzLCA2NDU0OCwgNjQ1NTMsIDY0NTU4LCA2NDU2MywgNjQ1NjgsIDY0NTczLCA2NDU3OCwgCi0gICAgNjQ1ODQsIDY0NTg5LCA2NDU5NCwgNjQ1OTksIDY0NjA0LCA2NDYwOSwgNjQ2MTQsIDY0NjE5LCA2NDYyNCwgNjQ2MjksIAotICAgIDY0NjM0LCA2NDYzOSwgNjQ2NDQsIDY0NjUwLCAxODM0LCAyMjQsIDM3NDE3LCA2NDY1NSwgNjQ2NTgsIDY0NjYzLCA2NDY2NywgCi0gICAgNjQ2NzAsIDY0Njc1LCA2MzY5NiwgNjQ2ODYsIDY0Njk2LCA2NDcwMywgNjQ3MTksIDY0NzI4LCA2NDczOCwgNjQ3NDgsIAotICAgIDY0NzU2LCA2NDc3MCwgNjQ3NzgsIDY0NzgyLCA2NDc4NSwgNjQ3OTIsIDY0Nzk4LCA2NDgwOSwgNjQ4MjEsIDY0ODMyLCAKLSAgICA2NDg0MSwgNjQ4NDgsIDEyOTcsIDIzMjk0LCA2NDg1OCwgMjU5MCwgNjQ4NjIsIDY0ODcxLCAxMTMzLCAxNzI3NywgMzgwNTQsIAotICAgIDY0ODc5LCA2NDg4NywgNjQ5MDEsIDY0OTE0LCA2NDkxOCwgNjQ5MjMsIDY0OTI4LCA2NDkzMywgNjQ5MzksIDY0OTQ1LCAKLSAgICA2NDk1MCwgODUzNSwgNjQ5NTUsIDY0OTU5LCA2NDk2NywgMTEwNDEsIDY0OTcyLCA2NDk3OCwgNjQ5ODcsIDE3MjEsIAotICAgIDExMDUzLCA3MzYsIDY0OTkxLCA2NTAwMCwgNjUwMTAsIDI3MDEzLCA2NTAxOSwgNjUwMjUsIDE2ODQ5LCA2NTAzMSwgCi0gICAgNjUwMzUsIDM5NjQsIDExMzg0LCA2NTA0MSwgNjUwNDgsIDYwNjU2LCA2NTA1MiwgNjUwNTYsIDM5ODgsIDE4OSwgMTQxNDYsIAotICAgIDY1MDYyLCA2NTA3NCwgNjUwNzgsIDY1MDg0LCAyNzczMCwgNjUwODgsIDExMzcyLCAyNzMwLCA0LCA2NTA5MywgNjUxMDMsIAotICAgIDY1MTA5LCA2NTEyMCwgNjUxMjcsIDY1MTMzLCA2NTEzOSwgNjUxNDcsIDY1MTU0LCA2NTE2MCwgNjUxNzAsIDY1MTgwLCAKLSAgICA2NTE5MCwgMjM0ODIsIDEzMDksIDY1MTk5LCA2NTIwMywgNjUyMDcsIDY1MjEzLCA2NTIxNywgMjc1MywgMjc1OSwgODUzMiwgCi0gICAgMjI2NCwgNjUyMjEsIDY1MjI1LCA2NTIzNCwgNjUyNDIsIDY1MjUzLCA2NTI2MSwgNjUyNjksIDY1Mjc1LCA2NTI4MCwgCi0gICAgNjUyOTEsIDY1MzAyLCA2NTMxMCwgNjUzMTYsIDk2ODcsIDY1MzIxLCA2NTMyOSwgNjUzMzMsIDY1MzM3LCA2NTM0MSwgCi0gICAgNjUzNTMsIDI4MTE1LCA2NTM2MCwgNjUzNzAsIDY1Mzc2LCA2NTM4MiwgOTc4OSwgNjUzOTIsIDY1NDAzLCA2NTQxMywgCi0gICAgNjU0MjIsIDY1NDI2LCA2NTQzMywgMTEzNSwgMTE3MCwgNjU0NDMsIDY1NDQ4LCA2NTQ1NiwgNjU0NjQsIDY1NDc1LCAKLSAgICA2NTQ4MiwgNjU0OTYsIDE0MDc1LCAzOTMsIDY1NTA2LCA2NTUxMCwgNjU1MTgsIDY1NTI3LCA2NTUzNSwgNjU1NDEsIAotICAgIDY1NTU1LCA2NTU2MiwgNjU1NjgsIDY1NTc3LCA2NTU4NCwgNjU1OTQsIDY1NjAyLCAzODEyLCAxNTYsIDY1NjEwLCA2NTYyMSwgCi0gICAgNjU2MjUsIDY1NjM3LCAyNzkyOCwgMTYxLCA2NTY0MywgNjU2NDgsIDY1NjUyLCA2NTY1OSwgNjU2NjUsIDY1NjczLCAKLSAgICA2NTY4MCwgODgxOCwgNjU2ODcsIDY1Njk2LCA2NTcwNCwgMzg3OCwgNjU3MTcsIDgxOTksIDY1NzIxLCAyNzk4LCA0NTAsIAotICAgIDY1NzI2LCA2NTczOSwgNjU3NDQsIDE4MzMsIDY2OCwgNjU3NDgsIDM4OTUsIDY1NzU2LCA2NTc2MiwgNjU3NjYsIDkzMSwgCi0gICAgNjU3NzYsIDY1Nzg1LCA2NTc5MCwgMTQ5MTUsIDE0OTIyLCA0NTIzMiwgNjU3OTQsIDM4MjIsIDEzMDM0LCA2NTgwMiwgCi0gICAgNjU4MDksIDIzNTM4LCA2NTgxMywgNjU4MjAsIDY1ODI2LCA2NTgzMSwgNjU4MzYsIDE0OTM1LCAzNzIsIDY1ODQxLCAKLSAgICA2NTg1MywgNjU4NTksIDY1ODY3LCAyODEwLCAxNzUzLCA2NTg3NSwgNjU4NzcsIDY1ODgyLCA2NTg4NywgNjU4OTIsIAotICAgIDY1ODk4LCA2NTkwMywgNjU5MDgsIDY1OTEzLCA2NTkxOCwgNjU5MjMsIDY1OTI4LCA2NTkzNCwgNjU5MzksIDY1OTQ0LCAKLSAgICA2NTk0OSwgNjU5NTQsIDY1OTU5LCA2NTk2NCwgNjU5NjksIDY1OTc0LCA2NTk4MCwgNjU5ODUsIDY1OTkwLCA2NTk5NSwgCi0gICAgNjYwMDEsIDY2MDA2LCA2NjAxMiwgNjYwMTcsIDY2MDIyLCA2NjAyNywgNjYwMzIsIDY2MDM3LCA2NjA0MiwgNjYwNDcsIAotICAgIDY2MDUzLCA2NjA1OCwgNjYwNjQsIDY2MDY5LCA2NjA3NCwgNjYwNzksIDY2MDg0LCA2NjA4OSwgNjYwOTQsIDY2MDk5LCAKLSAgICA2NjEwNCwgNjYxMTAsIDY2MTE1LCA2NjEyMCwgNjYxMjUsIDY2MTI5LCA2NjEzMywgNjYxMzgsIDY2MTQyLCA2NjE0NywgCi0gICAgNjYxNTIsIDY2MTU4LCA2NjE2MywgNjYxNjcsIDY2MTcyLCA2NjE3NiwgNjYxNzksIDY2MTgxLCA2NjE4NSwgNjYxODgsIAotICAgIDY2MTkzLCA2NjE5NywgNjYyMDEsIDY2MjA1LCA2NjIwOSwgNjYyMTgsIDY2MjIyLCAzMjUyNCwgNjYyMjUsIDMyNTI5LCAKLSAgICA2NjIzMiwgNjYyMzcsIDMyNTM0LCA2NjI0NiwgNjYyNTUsIDMyNTQwLCA2NjI2MCwgMzI1NDUsIDY2MjY5LCA2NjI3NCwgCi0gICAgMTE1NzEsIDY2Mjc4LCA2NjI4MywgNjYyODgsIDMyNTUwLCA2NjI5MiwgNDAxOTYsIDY2Mjk2LCA2NjI5OSwgNjYzMDMsIAotICAgIDgyMTEsIDY2MzA5LCA2NjMxNCwgNjYzMTgsIDM3MDUsIDMyNTU1LCA2NjMyMSwgNjYzMjUsIDY2MzI4LCA2NjMzMywgCi0gICAgNjYzMzcsIDY2MzQzLCA2NjM1MSwgNjYzNjQsIDY2MzczLCA2NjM3OSwgNjYzODQsIDY2MzkwLCA2NjM5NCwgNjY0MDAsIAotICAgIDY2NDA4LCA2NjQxMywgNjY0MTcsIDY2NDI0LCA2NjQzMCwgNjY0MzgsIDY2NDQ3LCA2NjQ1NSwgMzI1NTgsIDY2NDYyLCAKLSAgICA2NjQ3MiwgNjY0ODEsIDY2NDk0LCA2NjQ5OSwgNjY1MDQsIDY2NTEzLCA2NjUxOSwgNjY1MjYsIDY2NTM3LCA2NjU0OSwgCi0gICAgNjY1NTYsIDY2NTY1LCA2NjU3NCwgNjY1ODMsIDY2NTkwLCA2NjU5NiwgNjY2MDMsIDY2NjExLCA2NjYxOCwgNjY2MjYsIAotICAgIDY2NjM1LCA2NjY0MywgNjY2NTAsIDY2NjU4LCA2NjY2NywgNjY2NzUsIDY2Njg0LCA2NjY5NCwgNjY3MDMsIDY2NzExLCAKLSAgICA2NjcxOCwgNjY3MjYsIDY2NzM1LCA2Njc0MywgNjY3NTIsIDY2NzYyLCA2Njc3MSwgNjY3NzksIDY2Nzg4LCA2Njc5OCwgCi0gICAgNjY4MDcsIDY2ODE3LCA2NjgyOCwgNjY4MzgsIDY2ODQ3LCA2Njg1NSwgNjY4NjIsIDY2ODcwLCA2Njg3OSwgNjY4ODcsIAotICAgIDY2ODk2LCA2NjkwNiwgNjY5MTUsIDY2OTIzLCA2NjkzMiwgNjY5NDIsIDY2OTUxLCA2Njk2MSwgNjY5NzIsIDY2OTgyLCAKLSAgICA2Njk5MSwgNjY5OTksIDY3MDA4LCA2NzAxOCwgNjcwMjcsIDY3MDM3LCA2NzA0OCwgNjcwNTgsIDY3MDY3LCA2NzA3NywgCi0gICAgNjcwODgsIDY3MDk4LCA2NzEwOSwgNjcxMjEsIDY3MTMyLCA2NzE0MiwgNjcxNTEsIDY3MTU5LCA2NzE2NiwgNjcxNzQsIAotICAgIDY3MTgzLCA2NzE5MSwgNjcyMDAsIDY3MjEwLCA2NzIxOSwgNjcyMjcsIDY3MjM2LCA2NzI0NiwgNjcyNTUsIDY3MjY1LCAKLSAgICA2NzI3NiwgNjcyODYsIDY3Mjk1LCA2NzMwMywgNjczMTIsIDY3MzIyLCA2NzMzMSwgNjczNDEsIDY3MzUyLCA2NzM2MiwgCi0gICAgNjczNzEsIDY3MzgxLCA2NzM5MiwgNjc0MDIsIDY3NDEzLCA2NzQyNSwgNjc0MzYsIDY3NDQ2LCA2NzQ1NSwgNjc0NjMsIAotICAgIDY3NDcyLCA2NzQ4MiwgNjc0OTEsIDY3NTAxLCA2NzUxMiwgNjc1MjIsIDY3NTMxLCA2NzU0MSwgNjc1NTIsIDY3NTYyLCAKLSAgICA2NzU3MywgNjc1ODUsIDY3NTk2LCA2NzYwNiwgNjc2MTUsIDY3NjI1LCA2NzYzNiwgNjc2NDYsIDY3NjU3LCA2NzY2OSwgCi0gICAgNjc2ODAsIDY3NjkwLCA2NzcwMSwgNjc3MTMsIDY3NzI0LCA2NzczNiwgNjc3NDksIDY3NzYxLCA2Nzc3MiwgNjc3ODIsIAotICAgIDY3NzkxLCA2Nzc5OSwgNjc4MDYsIDY3ODE0LCA2NzgyMywgNjc4MzEsIDY3ODQwLCA2Nzg1MCwgNjc4NTksIDY3ODY3LCAKLSAgICA2Nzg3NiwgNjc4ODYsIDY3ODk1LCA2NzkwNSwgNjc5MTYsIDY3OTI2LCA2NzkzNSwgNjc5NDMsIDY3OTUyLCA2Nzk2MiwgCi0gICAgNjc5NzEsIDY3OTgxLCA2Nzk5MiwgNjgwMDIsIDY4MDExLCA2ODAyMSwgNjgwMzIsIDY4MDQyLCA2ODA1MywgNjgwNjUsIAotICAgIDY4MDc2LCA2ODA4NiwgNjgwOTUsIDY4MTAzLCA2ODExMiwgNjgxMjIsIDY4MTMxLCA2ODE0MSwgNjgxNTIsIDY4MTYyLCAKLSAgICA2ODE3MSwgNjgxODEsIDY4MTkyLCA2ODIwMiwgNjgyMTMsIDY4MjI1LCA2ODIzNiwgNjgyNDYsIDY4MjU1LCA2ODI2NSwgCi0gICAgNjgyNzYsIDY4Mjg2LCA2ODI5NywgNjgzMDksIDY4MzIwLCA2ODMzMCwgNjgzNDEsIDY4MzUzLCA2ODM2NCwgNjgzNzYsIAotICAgIDY4Mzg5LCA2ODQwMSwgNjg0MTIsIDY4NDIyLCA2ODQzMSwgNjg0MzksIDY4NDQ4LCA2ODQ1OCwgNjg0NjcsIDY4NDc3LCAKLSAgICA2ODQ4OCwgNjg0OTgsIDY4NTA3LCA2ODUxNywgNjg1MjgsIDY4NTM4LCA2ODU0OSwgNjg1NjEsIDY4NTcyLCA2ODU4MiwgCi0gICAgNjg1OTEsIDY4NjAxLCA2ODYxMiwgNjg2MjIsIDY4NjMzLCA2ODY0NSwgNjg2NTYsIDY4NjY2LCA2ODY3NywgNjg2ODksIAotICAgIDY4NzAwLCA2ODcxMiwgNjg3MjUsIDY4NzM3LCA2ODc0OCwgNjg3NTgsIDY4NzY3LCA2ODc3NywgNjg3ODgsIDY4Nzk4LCAKLSAgICA2ODgwOSwgNjg4MjEsIDY4ODMyLCA2ODg0MiwgNjg4NTMsIDY4ODY1LCA2ODg3NiwgNjg4ODgsIDY4OTAxLCA2ODkxMywgCi0gICAgNjg5MjQsIDY4OTM0LCA2ODk0NSwgNjg5NTcsIDY4OTY4LCA2ODk4MCwgNjg5OTMsIDY5MDA1LCA2OTAxNiwgNjkwMjgsIAotICAgIDY5MDQxLCA2OTA1MywgNjkwNjYsIDY5MDgwLCA2OTA5MywgNjkxMDUsIDY5MTE2LCA2OTEyNiwgNjkxMzUsIDY5MTQzLCAKLSAgICA2OTE1MCwgNjkxNTUsIDgwNTgsIDY5MTYyLCAzMjU2OCwgNjkxNjcsIDY5MTcyLCAzMjU3MywgNjkxNzgsIDIwOTE2LCAKLSAgICAzMjU3OCwgNjkxODMsIDY5MTg5LCA2OTE5NywgNjkyMDMsIDY5MjA5LCA2OTIxNiwgNjkyMjMsIDY5MjI4LCA2OTIzMiwgCi0gICAgNjkyMzUsIDY5MjM5LCA2OTI0OCwgNjkyNTQsIDY5MjY2LCA2OTI3NywgNjkyODEsIDMwODEsIDgwMzMsIDY5Mjg2LCAKLSAgICA2OTI4OSwgNjkyOTEsIDY5Mjk1LCA2OTI5OSwgNjkzMDMsIDY5MzA5LCA2OTMxNCwgMjU5MjcsIDY5MzE5LCA2OTMyMywgCi0gICAgNjkzMjYsIDY5MzMxLCA2OTMzNSwgNjkzNDIsIDY5MzQ4LCA2OTM1MiwgNjE3MCwgNjkzNTYsIDMyNTk1LCA2OTM2MSwgCi0gICAgNjkzNjgsIDY5Mzc3LCA2OTM4NSwgNjkzOTYsIDY5NDA0LCA2OTQxMiwgNjk0MTksIDY5NDI2LCA2OTQzMiwgNjk0NDMsIAotICAgIDMyNjAwLCA2OTQ0OCwgNjk0NTksIDY5NDcxLCA2OTQ3OSwgNjk0OTAsIDY5NDk5LCA2OTUxMCwgNjk1MTUsIDY5NTIzLCAKLSAgICAyNTU2LCA2OTUyOCwgMzQyNzAsIDY5NTQxLCA2OTU0NSwgNjk1NTcsIDY5NTY1LCA2OTU3MCwgNjk1NzgsIDE3NDcyLCAKLSAgICA2OTU4OSwgNjk1OTUsIDY5NjAyLCA2OTYxMCwgNjk2MTYsIDMyNjEwLCA2OTYyMSwgMzkxNCwgNTgyMTcsIDY5NjI4LCAKLSAgICA2OTYzMSwgNjk2MzksIDY5NjUyLCA2OTY2NSwgNjk2NzgsIDY5NjkxLCA2OTY5OCwgNjk3MDksIDY5NzE4LCA0MTY4NywgCi0gICAgNDE2OTIsIDY5NzIzLCA2OTcyNywgNjk3MzUsIDY5NzQyLCA2OTc1MSwgNjk3NTksIDY5NzY1LCA2OTc3NCwgNjk3ODIsIAotICAgIDY5NzkwLCA2OTc5NCwgNjk4MDMsIDY5ODEyLCA2OTgyMiwgNjk4MzUsIDY5ODQ4LCA2OTg1OCwgMzI2MTUsIDY5ODY0LCAKLSAgICA2OTg3MSwgNjk4NzcsIDMyNjIxLCA2OTg4MiwgNjk4ODUsIDY5ODg5LCA2OTg5NywgNjk5MDYsIDQxNDI1LCA2OTkxNCwgCi0gICAgNjk5MjMsIDY5OTMxLCA2OTkzOCwgNjk5NDYsIDY5OTU2LCA2OTk2NSwgNjk5NzQsIDY5OTgzLCA2OTk5MSwgNzAwMDIsIAotICAgIDcwMDEyLCA5MzU5LCAyMTU1NCwgNzAwMjEsIDcwMDI2LCA3MDAzMSwgNzAwMzUsIDcwMDM5LCA3MDA0NCwgNzAwNTAsIAotICAgIDcwMDU1LCA3MDA2MCwgNzAwNjYsIDcwMDcxLCA3MDA3NiwgMjE1MTksIDcwMDgxLCA3MDA4OCwgNzAwOTYsIDcwMTA0LCAKLSAgICA3MDEwOSwgNzAxMTYsIDcwMTIzLCA3MDEyOCwgNzAxMzIsIDcwMTM2LCA3MDE0NCwgNzAxNTIsIDMyNjM4LCA3MDE1OCwgCi0gICAgNzAxNjQsIDcwMTc2LCA3MDE4MiwgNzAxODYsIDcwMTkzLCA3MDE5OCwgNzAyMDksIDcwMjE5LCA3MDIyOSwgNzAyNDEsIAotICAgIDcwMjQ3LCA3MDI1NywgNzAyNjcsIDMyNjY1LCA3MDI3NiwgNzAyODUsIDcwMjkxLCA3MDMwMywgNzAzMTQsIDcwMzIxLCAKLSAgICA3MDMyNiwgNzAzMzAsIDcwMzM4LCA3MDM0NCwgNzAzNDksIDcwMzU0LCA3MDM2MSwgNzAzNjksIDcwMzgxLCA3MDM5MSwgCi0gICAgNzA0MDAsIDcwNDA5LCA3MDQxNiwgMzQxMzIsIDIzODM0LCA3MDQyMiwgNzA0MjcsIDcwNDMxLCA3MDQzNSwgNzA0NDAsIAotICAgIDcwNDQ2LCA3MDQ1NywgNzA0NzAsIDcwNDc1LCA3MDQ4MiwgMzI2NzAsIDcwNDg3LCA3MDQ5OSwgNzA1MDgsIDcwNTE4LCAKLSAgICA3MDUyOSwgNzA1NDIsIDcwNTQ5LCA3MDU1OCwgNzA1NjcsIDcwNTc1LCA3MDU4MCwgNzA1ODYsIDEwNTgsIDcwNTkxLCAKLSAgICA3MDU5NiwgNzA2MDEsIDcwNjA2LCA3MDYxMiwgNzA2MTcsIDcwNjIyLCA3MDYyOCwgNzA2MzQsIDcwNjM5LCA3MDY0MywgCi0gICAgNzA2NDgsIDcwNjUzLCA3MDY1OCwgNTg3MjksIDcwNjYzLCA3MDY2OCwgNzA2NzMsIDcwNjc4LCA3MDY4NCwgNzA2OTAsIAotICAgIDcwNjk1LCA3MDY5OSwgNzA3MDQsIDcwNzA5LCA3MDcxNCwgNzA3MjAsIDcwNzI1LCA3MDczMSwgNzA3MzYsIDcwNzQxLCAKLSAgICA3MDc0NiwgNzA3NTEsIDcwNzU1LCA3MDc2MSwgNzA3NjYsIDcwNzc1LCA3MDc4MCwgNzA3ODUsIDcwNzkwLCA3MDc5NSwgCi0gICAgNzA3OTksIDcwODA2LCA3MDgxMiwgMTcxMjIsIDE3MTI5LCA3MDgxNywgNzA4MjEsIDcwODI1LCA3MDgyOSwgNzA4MzMsIAotICAgIDQ1NDg3LCA3MDgzNywgNzA3NjcsIDcwODM5LCA3MDg0OSwgMzI2NzksIDcwODUyLCA3MDg2MSwgNzA4NjcsIDYxNDMsIAotICAgIDMyNjg0LCA3MDg3MSwgNzA4NzcsIDcwODgyLCA3MDg4OCwgNzA4OTMsIDcwODk3LCA3MDkwNCwgNzA5MDksIDcwOTE5LCAKLSAgICA3MDkyOCwgNzA5MzIsIDcwOTM4LCA3MDk0NCwgNzA5NTAsIDcwOTU0LCA3MDk2MiwgNzA5NjksIDcwOTc3LCA3MDk4NSwgCi0gICAgMzI2ODksIDcwOTkyLCA3MDk5NSwgNzEwMDIsIDcxMDA4LCA3MTAxMywgNzEwMTcsIDcxMDIzLCA3MTAzMCwgNzEwMzUsIAotICAgIDcxMDM5LCA3MTA0OCwgNzEwNTYsIDcxMDYyLCA3MTA2NywgMzI2OTQsIDcxMDc0LCA3MTA4MSwgNzEwODcsIDcxMDkyLCAKLSAgICA3MTA5OCwgNzExMDUsIDcxMTExLCAyMTI4MSwgMjc0MzgsIDcxMTE3LCA3MTEyMiwgNzExMjgsIDcxMTQwLCA3MDgwMCwgCi0gICAgNzA4MDcsIDIxNDU3LCA3MTE1MCwgNzExNTUsIDcxMTYyLCA3MTE2OCwgNzExNzUsIDcxMTgxLCA3MTE5MiwgNzExOTcsIAotICAgIDkxMDMsIDcxMjA1LCA3MTIwOCwgNzEyMTQsIDcxMjE4LCA3MTIyMiwgNzEyMjUsIDcxMjMxLCAzMjQ0MywgNjE5NCwgOTY0LCAKLSAgICAxMzQxMiwgNzEyMzgsIDcxMjQ0LCA3MTI1MCwgNzEyNTYsIDcxMjYyLCA3MTI2OCwgNzEyNzQsIDcxMjgwLCA3MTI4NiwgCi0gICAgNzEyOTEsIDcxMjk2LCA3MTMwMSwgNzEzMDYsIDcxMzExLCA3MTMxNiwgNzEzMjEsIDcxMzI2LCA3MTMzMSwgNzEzMzYsIAotICAgIDcxMzQxLCA3MTM0NiwgNzEzNTEsIDcxMzU3LCA3MTM2MiwgNzEzNjcsIDcxMzczLCA3MTM3OCwgNzEzODMsIDcxMzg5LCAKLSAgICA3MTM5NSwgNzE0MDEsIDcxNDA3LCA3MTQxMywgNzE0MTksIDcxNDI1LCA3MTQzMSwgNzE0MzcsIDcxNDQyLCA3MTQ0NywgCi0gICAgNzE0NTMsIDcxNDU4LCA3MTQ2MywgNzE0NjksIDcxNDc0LCA3MTQ3OSwgNzE0ODQsIDcxNDg5LCA3MTQ5NCwgNzE0OTksIAotICAgIDcxNTA0LCA3MTUwOSwgNzE1MTQsIDcxNTE5LCA3MTUyNCwgNzE1MjksIDcxNTM1LCA3MTU0MCwgNzE1NDUsIDcxNTUwLCAKLSAgICA3MTU1NiwgNzE1NjEsIDcxNTY2LCA3MTU3MSwgNzE1NzYsIDcxNTgyLCA3MTU4NywgNzE1OTIsIDcxNTk3LCA3MTYwMiwgCi0gICAgNzE2MDcsIDcxNjEyLCA3MTYxNywgNzE2MjIsIDcxNjI3LCA3MTYzMiwgNzE2MzcsIDcxNjQyLCA3MTY0NywgNzE2NTIsIAotICAgIDcxNjU3LCA3MTY2MiwgNzE2NjcsIDcxNjcyLCA3MTY3NywgNzE2ODMsIDcxNjg4LCA3MTY5MywgNzE2OTgsIDcxNzAzLCAKLSAgICA3MTcwOCwgNzE3MTMsIDcxNzE4LCAxODY0LCAxNDIsIDcxNzIzLCA3MTcyNywgNzE3MzEsIDcxNzM2LCA3MTc0NCwgNzE3NDgsIAotICAgIDcxNzU1LCA3MTc2MywgNzE3NjcsIDcxNzgwLCA3MTc4OCwgNzE3OTIsIDcxNzk1LCA3MTgwMCwgNzE4MDQsIDcxODA5LCAKLSAgICA3MTgxMywgNzE4MjEsIDcxODI1LCAyMDkyNCwgNzE4MzAsIDcxODM0LCA2MDkzMCwgNzE4MzgsIDcxODQxLCA3MTg0OSwgCi0gICAgNzE4NTcsIDcxODY1LCA3MTg3MCwgNzE4NzcsIDcxODgzLCA3MTg4OSwgNzE4OTQsIDcxOTAxLCA3MTkwNiwgNzE5MTQsIAotICAgIDY0OTA2LCA3MTkyMSwgNzE5MjYsIDcxOTMxLCA3MTkzNSwgMTE2MzgsIDcxOTM5LCA3MTk0NCwgNzE5NDksIDcxOTUzLCAKLSAgICA3MTk1NiwgNzE5NjIsIDcxOTY2LCA3MTk3NiwgNzE5ODUsIDcxOTg4LCA3MTk5MiwgNzE5OTksIDcyMDEyLCA3MjAxOCwgCi0gICAgNzIwMjYsIDcyMDM3LCA3MjA0OCwgNzIwNTksIDcyMDcwLCA3MjA3OSwgNzIwODUsIDcyMDk0LCA3MjEwMiwgNzIxMTIsIAotICAgIDcyMTI1LCA3MjEzMiwgNzIxNDMsIDcyMTQ5LCA3MjE1NCwgNzIxNTksIDcyMTY1LCA3MjE3MSwgNzIxODEsIDcyMTkwLCAKLSAgICA3MDQ4OSwgNzIxOTgsIDcyMjA0LCA3MjIxMiwgNzIyMTgsIDcyMjI2LCA3MjIyOSwgNzIyMzMsIDcyMjM3LCA3MjI0MCwgCi0gICAgNzIyNDYsIDcyMjUyLCA3MjI2MCwgNzIyNzIsIDcyMjg0LCA3MjI5MSwgNzIyOTUsIDcyMzA2LCA3MjMxNCwgNzIzMjEsIAotICAgIDcyMzMzLCA3MjM0MSwgNzIzNDksIDcyMzU2LCA3MjM2MiwgNzIzNzIsIDcyMzgxLCA3MjM4NiwgNzIzOTYsIDcyNDA1LCAKLSAgICA0MDc1MSwgNzI0MTIsIDcyNDE2LCA3MjQyMSwgNzI0MjksIDcyNDM2LCA3MjQ0MiwgNzI0NDYsIDcyNDU2LCA3MjQ2NywgCi0gICAgNzI0NzUsIDcyNDgyLCA3MjQ5NCwgNzI1MDYsIDcyNTE1LCA2OTUzMSwgNzI1MjIsIDcyNTMzLCA3MjU0NywgNzI1NTUsIAotICAgIDcyNTY1LCA3MjU3MiwgNzI1ODAsIDcyNTkyLCA3MjYwMSwgNzI2MDksIDcyNjE5LCA3MjYzMCwgNzI2NDIsIDcyNjUxLCAKLSAgICA3MjY2MSwgNzI2NjgsIDcyNjc3LCA3MjY5MiwgNzI3MDAsIDcyNzEwLCA3MjcxOSwgNzI3MjcsIDcyNzQwLCA3Mjc1NSwgCi0gICAgNzI3NTksIDcyNzY4LCA3Mjc4MCwgNzI3OTEsIDcyODAyLCA3MjgxMywgNzI4MjMsIDcyODM0LCA3Mjg0MiwgNzI4NDgsIAotICAgIDcyODU4LCA3Mjg2NiwgNzI4NzIsIDI5MDA3LCA3Mjg3NywgNzI4ODMsIDcyODg4LCA3Mjg5NSwgOTcwMSwgMTc0OTIsIAotICAgIDcyOTAxLCA3MjkxMCwgNzI5MTUsIDcyOTE5LCA3MjkyNiwgNzI5MzIsIDcyOTM3LCA3Mjk0MiwgNzI5NTAsIDcyOTU4LCAKLSAgICA3Mjk2MiwgNzI5NjUsIDcyOTY4LCA3Mjk3MCwgNzI5NzcsIDcyOTgzLCA3Mjk5NCwgNzI5OTksIDczMDAzLCA3MzAxMCwgCi0gICAgNzMwMTYsIDczMDIxLCA3MzAyOSwgNjU0MDUsIDY1NDE1LCA3MzAzNSwgNzMwNDIsIDczMDUyLCAxMDYxMSwgNzMwNTksIAotICAgIDczMDY0LCAyOTIwMywgNzMwNzMsIDczMDc4LCA3MzA4NSwgNzMwOTUsIDczMTAzLCA3MzExMSwgNzMxMjAsIDczMTI2LCAKLSAgICA3MzEzMiwgNzMxMzksIDczMTQ2LCA3MzE1MSwgNzMxNTUsIDczMTYzLCA3MzE2OCwgNzMxNzMsIDczMTgxLCA3MzE4OCwgCi0gICAgNzMxOTMsIDczMTk5LCA3MzIwMiwgNzMyMDYsIDczMjE1LCA3MTc3NSwgNzMyMjQsIDczMjI4LCA3MzIzNCwgNzMyNDUsIAotICAgIDczMjU1LCAxNzUwMSwgNzMyNjYsIDczMjc0LCAxNzUxMywgNzMyODEsIDczMjg1LCA3MzI5NCwgMjczMjQsIDczMzAxLCAKLSAgICA3MzMwNSwgNzMzMTAsIDczMzI3LCA3MzMzOSwgMTA1NjksIDczMzUxLCA3MzM1NiwgNzMzNjEsIDczMzY2LCAyMDk5NywgCi0gICAgNzMzNzAsIDczMzc1LCA3MzM4MCwgNzMzODYsIDczMzkxLCA1ODQ2LCAyMTAwMSwgNzMzOTYsIDczNDAxLCA3MzQwNywgCi0gICAgNzM0MTQsIDczNDE5LCA3MzQyNCwgNzM0MzAsIDczNDM2LCA3MzQ0MiwgNzM0NDcsIDczNDUzLCA3MzQ1NywgNzM0NzEsIAotICAgIDczNDc5LCA3MzQ4NywgNzM0OTMsIDczNDk4LCA3MzUwNSwgNzM1MTUsIDczNTI0LCA3MzUyOSwgNzM1MzQsIDczNTQyLCAKLSAgICA3MzU0NywgNzM1NTMsIDczNTU4LCA3MzU2NywgNTk3ODYsIDczNTcyLCA3MzU3NSwgNzM1OTMsIDczNjEyLCA3MzYyNSwgCi0gICAgNzM2MzksIDczNjU1LCA3MzY2MiwgNzM2NjksIDczNjc1LCA3MzY4MiwgNzM2ODcsIDczNjkzLCA3MzY5OSwgNzM3MDcsIAotICAgIDczNzEzLCA3MzcxOCwgNzM3MjMsIDczNzM5LCAxMDU4MiwgNzM3NTMsIDczNzYwLCA3Mzc2OCwgNzM3NzQsIDczNzc4LCAKLSAgICA3Mzc4MSwgNzM3ODYsIDczNzkxLCA3Mzc5OCwgNzM4MDMsIDczODEyLCA3MzgxNywgNzM4MjMsIDczODMyLCA3Mzg0MSwgCi0gICAgNzM4NDYsIDczODUwLCA3Mzg1OCwgNzM4NjcsIDExNjY3LCA3Mzg3NiwgNzM4ODQsIDczODg5LCA3Mzg5NSwgMTE2NzgsIAotICAgIDczOTAwLCA3MzkwMywgNzM5MDgsIDczOTE4LCA3MzkyNywgNzM5MzIsIDczOTM4LCA3Mzk0MywgNzM5NTEsIDczOTU4LCAKLSAgICA3Mzk2OSwgNzM5NzksIDczOTg0LCA2NDgzNCwgNzM5ODksIDczOTk1LCA3NDAwMCwgNzQwMDcsIDc0MDE2LCA3NDAyNCwgCi0gICAgNzQwMzAsIDc0MDM2LCA3NDA0MywgNzQwNDksIDc0MDUzLCAxNjk0NywgMzA1NSwgNzQwNTgsIDc0MDYyLCA3NDA2NiwgCi0gICAgNzQwNzIsIDc0MDgxLCA3NDA4NywgNzQwOTQsIDc0MDk4LCA3NDExOSwgNzQxNDEsIDc0MTU3LCA3NDE3NCwgNzQxOTMsIAotICAgIDc0MjAyLCA3NDIxMiwgNzQyMTksIDc0MjI2LCAyNzIxMSwgNzQyMzIsIDc0MjM2LCA3NDI0NCwgNzQyNTYsIDc0MjYyLCAKLSAgICA3NDI3MCwgNzQyNzQsIDc0MjgyLCA3NDI4OSwgNzQyOTMsIDc0Mjk5LCA3NDMwNSwgNzQzMTAsIDM1NjMsIDQxODg3LCAKLSAgICA3NDMxNiwgNzQzMjAsIDc0MzI0LCA3NDMyOCwgNzQzMzMsIDc0MzM4LCA3NDM0MywgNzQzNDksIDc0MzU1LCA3NDM2MSwgCi0gICAgNzQzNjgsIDc0Mzc0LCA3NDM4MSwgNzQzODcsIDc0MzkzLCA3NDM5OCwgNzQ0MDQsIDc0NDA5LCA3NDQxMywgNzQ0MTgsIAotICAgIDc0NDIyLCA3NDQyNywgNDE5MDIsIDc0NDMxLCA3NDQzNiwgNzQ0NDQsIDc0NDQ4LCA3NDQ1MywgNzQ0NjAsIDc0NDY5LCAKLSAgICA3NDQ3NSwgNzQ0NzksIDc0NDg2LCA3NDQ5MCwgNzQ0OTMsIDc0NTAwLCA3NDUwOSwgNzQ1MTQsIDc0NTE4LCA3NDUyNiwgCi0gICAgNzQ1MzUsIDc0NTM5LCA3NDU0NywgNzQ1NTMsIDc0NTU4LCA3NDU2MywgNzQ1NjksIDc0NTc1LCA3NDU4MCwgNzQ1ODQsIAotICAgIDc0NTkwLCA3NDU5NSwgNzQ1OTksIDc0NjAzLCA3NDYwNiwgNzQ2MTEsIDc0NjE5LCA3NDYyOSwgNzQ2MzQsIDM5Mzg3LCAKLSAgICA3NDY0MiwgNzQ2NTQsIDc0NjU4LCA3NDY2NCwgNzQ2NzYsIDc0Njg3LCA3NDY5NCwgNzQ3MDAsIDc0NzA3LCA3NDcxOSwgCi0gICAgNzQ3MjYsIDc0NzMyLCAyMTA3NSwgNzQ3MzYsIDc0NzQyLCA3NDc0OSwgNzQ3NTUsIDc0NzYxLCA3NDc2NiwgNzQ3NzEsIAotICAgIDc0Nzc2LCA3NDc4NSwgNzAzMywgNzQ3OTAsIDE2NDEzLCA3NDc5NiwgNzQ4MDAsIDc0ODA0LCA3NDgwOCwgNzQ4MTYsIAotICAgIDc0ODI1LCA3NDgyOSwgNzQ4MzYsIDc0ODQ1LCA3NDg1OCwgNzQ4NjQsIDc0NDIzLCAzMDA2NywgNzQ4NjksIDc0ODcxLCAKLSAgICA3NDg3NiwgNzQ4ODEsIDc0ODg2LCA3NDg5MSwgNzQ4OTYsIDc0OTAxLCA3NDkwNiwgNzQ5MTEsIDc0OTE2LCA3NDkyMSwgCi0gICAgNzQ5MjYsIDc0OTMxLCA3NDkzNiwgNzQ5NDEsIDc0OTQ3LCA3NDk1MiwgNzQ5NTcsIDc0OTYyLCA3NDk2NywgNzQ5NzIsIAotICAgIDc0OTc3LCA3NDk4MiwgNzQ5ODcsIDc0OTkzLCA3NDk5OSwgNzUwMDUsIDc1MDEwLCA3NTAxNSwgNzUwMjcsIDc1MDMyLCAKLSAgICAxODcwLCA0OSwgNzUwMzcsIDc1MDQyLCAzMjcyMSwgNzUwNDYsIDMyNzI2LCAzMjczMSwgMzI3MzcsIDMyNzQyLCA3NTA1MCwgCi0gICAgMzI3NDcsIDIyMDcwLCA3NTA3MiwgNzUwNzYsIDc1MDgwLCA3NTA4NSwgNzUwODksIDMyNzUxLCA3NTA5MywgNzUxMDEsIAotICAgIDMyNzU2LCA3NTEwOCwgNzUxMTEsIDc1MTE2LCA3NTEyMCwgOTUzNiwgNzUxMjksIDMyNzYxLCAyMTkzMiwgNzUxMzIsIAotICAgIDc1MTM2LCAxNDI4LCA3NTE0MSwgMzI3NzIsIDc1MTQ0LCA3NTE0OSwgMjU3MjAsIDI1NzMwLCAzNTIzMywgNzUxNTQsIAotICAgIDc1MTU5LCA3NTE2NCwgNzUxNjksIDc1MTc1LCA3NTE4MCwgNzUxODksIDc1MTk0LCA3NTIwMSwgNzUyMDcsIDc1MjEyLCAKLSAgICA3NTIxNywgNzUyMjIsIDc1MjMyLCA3NTI0MSwgNzUyNDYsIDc1MjU0LCA3NTI1OCwgNzUyNjYsIDMyNTg2LCAzNzI4OCwgCi0gICAgNzUyNzMsIDc1Mjc5LCA3NTI4NCwgNzUyODksIDEyMDA5LCA3NTI5NCwgNzUzMDAsIDc1MzA1LCA3NTMxMiwgNzUzMTgsIAotICAgIDc1MzIzLCA3NTMzMSwgNzUzNDEsIDc1MzUxLCA3NTM1NywgNzUzNjIsIDc1MzY4LCAxNzUyMywgNzUzNzUsIDM2MDQ4LCAKLSAgICA3NTM4OCwgNzUzOTMsIDc1Mzk5LCAzMDk2OCwgNzU0MTIsIDc1NDE4LCA3NTQyMiwgNzU0MzEsIDc1NDM4LCA3NTQ0NCwgCi0gICAgNzU0NTIsIDc1NDYxLCA3NTQ2OCwgNzU0NzQsIDc1NDc3LCA3NTQ4MSwgMjU4NjEsIDc1NDg1LCA3NTQ5MiwgNzU0OTgsIAotICAgIDc1NTA2LCA3NTUxMSwgMjM5NzcsIDc1NTE3LCA3NTUyMCwgNzU1MjgsIDc1NTM2LCA3NTU1MCwgNzU1NTcsIDc1NTYzLCAKLSAgICA3NTU3MCwgNzU1NzYsIDMyNzg2LCA3NTU4MCwgNzU1ODcsIDc1NTk1LCA3NTYwMywgNzU2MDksIDMyNzkxLCA3NTYxNywgCi0gICAgNzU2MjMsIDc1NjI4LCA3NTYzOCwgNzU2NDQsIDc1NjUzLCAzMDgwNSwgMzQ2OTEsIDc1NjYxLCA3NTY2NiwgNzU2NzEsIAotICAgIDc1Njc1LCA3NTY4MCwgNzU2ODQsIDc1NjkyLCAxNDkwNywgMzk0MDAsIDc1Njk3LCA3NTcwMiwgMzI3OTYsIDYyMjMyLCAKLSAgICA3NTcwNiwgNzU3MTEsIDc1NzE1LCA3NTcyNCwgNzU3MzIsIDc1NzM4LCA3NTc0MywgNzU3NDksIDc1NzU2LCA3NTc2MiwgCi0gICAgNzU3NjcsIDc1NzcyLCA3NTc4MSwgNzU3OTMsIDc1ODA4LCAzMzA1OCwgNzU4MTQsIDE2NTMyLCAzMjgwMCwgNzU4MTgsIAotICAgIDc1ODI1LCAyNDA4NywgNzU4MzEsIDc1ODM4LCA3NTg0NywgNzU4NTQsIDc1ODYzLCA3NTg2OSwgNzU4NzQsIDc1ODgyLCAKLSAgICA3NTg4OCwgMzI4MTAsIDc1ODkzLCA3NTkwMiwgNzQ2ODIsIDc1OTExLCA3NTkxOCwgNzU5MjQsIDc1OTMwLCA3NTk0MCwgCi0gICAgNzU5NDgsIDc1OTU1LCA3NTk1OSwgMzI4MTUsIDc1OTYyLCAzMjgyMSwgMzI4MjcsIDc1OTY3LCA3NTk3NSwgNzU5ODMsIAotICAgIDc1OTkzLCA3NjAwMiwgNzYwMTAsIDc2MDE3LCA3NjAyNywgMzI4MzIsIDc2MDMxLCA3NjAzMywgNzYwMzcsIDc2MDQyLCAKLSAgICA3NjA0NiwgNzYwNTAsIDc2MDU2LCA3NjA2MSwgNzYwNjUsIDc2MDc2LCA3NjA4MSwgNzYwODYsIDMwNjAsIDc2MDkwLCAKLSAgICA3NjA5NywgNzYxMDEsIDc2MTEwLCA3NjExOCwgNzYxMjUsIDc2MTMwLCA3NjEzNSwgNjIyNzgsIDc2MTM5LCA3NjE0MiwgCi0gICAgNzYxNDgsIDc2MTU2LCA3NjE2MiwgNzYxNjYsIDc2MTcxLCA3NjE3OCwgNzYxODMsIDc2MTg5LCAzNDcyMiwgNzYxOTQsIAotICAgIDc2MTk3LCA3NjIwMiwgNzYyMDYsIDc2MjExLCA3NjIxNiwgNzYyMjAsIDc2MjI4LCA3NjIzMiwgMjU3MzksIDI1NzQ4LCAKLSAgICA3NjIzOCwgNzYyNDQsIDc2MjUwLCA3NjI1NSwgNzYyNTksIDc2MjYyLCA3NjI3MiwgNzYyODEsIDc2Mjg2LCA3NjI5MiwgCi0gICAgNzYyOTksIDc2MzA1LCA3NjMwOSwgNzYzMTcsIDc2MzIyLCAzNDcyOCwgNzYzMjYsIDc2MzM0LCA3NjM0MCwgNzYzNDcsIAotICAgIDc2MzUyLCA3NjM1NiwgNzYzNjEsIDU4NDAzLCAzNDczNCwgNzYzNjcsIDc2MzcyLCA3NjM3NiwgNzYzODEsIDc2Mzg2LCAKLSAgICA3NjM5MSwgNzYzOTUsIDc2NDAwLCA3NjQwNSwgNzY0MTEsIDc2NDE2LCA3NjQyMSwgNzY0MjcsIDc2NDMzLCA3NjQzOCwgCi0gICAgNzY0NDIsIDc2NDQ3LCA3NjQ1MiwgNzY0NTcsIDc2NDYxLCAyNDA4NiwgNzY0NjYsIDc2NDcxLCA3NjQ3NywgNzY0ODMsIAotICAgIDc2NDg5LCA3NjQ5NCwgNzY0OTgsIDc2NTAzLCA3NjUwOCwgNzY1MTMsIDc2NTE3LCA3NjUyMiwgNzY1MjcsIDc2NTMyLCAKLSAgICA3NjUzNywgNzY1NDEsIDMyODQwLCA3NjU0OSwgNzY1NTMsIDc2NTYxLCA3NjU2OSwgNzY1ODAsIDc2NTg1LCA3NjU4OSwgCi0gICAgMjIzODQsIDc2NTk0LCA3NjYwMCwgNzY2MTAsIDc2NjE3LCA3NjYyMiwgNzY2MzEsIDc2NjM2LCA3NjY0MCwgNzY2NDUsIAotICAgIDc2NjUzLCA3NjY2MSwgNzY2NjgsIDY1MDY4LCA3NjY3NCwgNzY2ODIsIDc2Njg5LCA3NjcwMCwgNzY3MDYsIDc2NzEwLCAKLSAgICA3NjcxNiwgMzI4NTAsIDc2NzE5LCA3NjcyNiwgNzY3MzQsIDc2NzM5LCAzOTU5MSwgNzY3NDMsIDc2NzQ4LCA3Njc1NSwgCi0gICAgNzY3NjAsIDg5ODUsIDc2NzY0LCA3Njc3MiwgNzY3NzksIDc2Nzg2LCA3Njc5MiwgNzY4MDYsIDYzMzQwLCA3NjgxNCwgCi0gICAgNzY4MjAsIDc2ODI0LCA3NjgyNywgNzY4MzUsIDc2ODQyLCA3Njg0NywgNzY4NjAsIDc2ODY3LCA3Njg3MSwgNzY4NzgsIAotICAgIDc2ODgzLCA2MDgyMywgNzY4ODgsIDc2ODkxLCA3Njg5OCwgNzY5MDQsIDc2OTA4LCA3NjkxNiwgNzY5MjUsIDc2OTM1LCAKLSAgICA3Njk0NSwgNzY5NTQsIDc2OTYyLCA3Njk3MywgNzY5NzgsIDc2OTgyLCA3Njk4NywgNzY5OTEsIDM1MzY0LCA3Njk5OSwgCi0gICAgMjEzNDQsIDM1MzczLCA3NzAwNCwgNzcwMDksIDc3MDE0LCA3NzAxOSwgNzcwMjQsIDc3MDI5LCA3NzAzNCwgNzcwMzgsIAotICAgIDc3MDQzLCA3NzA0OCwgNzcwNTMsIDc3MDU4LCA3NzA2MywgNzcwNjgsIDc3MDcyLCA3NzA3NywgNzcwODIsIDc3MDg2LCAKLSAgICA3NzA5MCwgNzcwOTQsIDc3MDk4LCA3NzEwMywgNzcxMDgsIDc3MTEyLCA3NzExNywgNzcxMjEsIDc3MTI1LCA3NzEzMCwgCi0gICAgNzcxMzUsIDc3MTQwLCA3NzE0NSwgNzcxNDksIDc3MTU0LCA3NzE1OSwgNzcxNjMsIDc3MTY4LCA3NzE3MywgNzcxNzgsIAotICAgIDc3MTgzLCA3NzE4OCwgNzcxOTMsIDc3MTk4LCA3NzIwMywgNzcyMDgsIDc3MjEzLCA3NzIxOCwgNzcyMjMsIDc3MjI4LCAKLSAgICA3NzIzMywgNzcyMzgsIDc3MjQzLCA3NzI0OCwgNzcyNTMsIDc3MjU4LCA3NzI2MywgNzcyNjcsIDc3MjcyLCA3NzI3NywgCi0gICAgNzcyODIsIDc3Mjg3LCA3NzI5MiwgNzcyOTcsIDc3MzAyLCA3NzMwNywgNzczMTIsIDc3MzE3LCA3NzMyMiwgNzczMjYsIAotICAgIDc3MzMxLCA3NzMzNSwgNzczNDAsIDc3MzQ1LCA3NzM1MCwgNzczNTUsIDc3MzYwLCA3NzM2NSwgNzczNzAsIDc3Mzc1LCAKLSAgICA3NzM4MCwgNzczODQsIDc3Mzg4LCA3NzM5MywgNzczOTgsIDc3NDAyLCA3NzQwNywgNzc0MTIsIDc3NDE2LCA3NzQyMSwgCi0gICAgNzc0MjYsIDc3NDMxLCA3NzQzNiwgNzc0NDAsIDc3NDQ1LCA3NzQ1MCwgNzc0NTQsIDc3NDU5LCA3NzQ2MywgNzc0NjcsIAotICAgIDc3NDcxLCA3NzQ3NSwgNzc0ODAsIDc3NDg0LCA3NzQ4OCwgNzc0OTIsIDc3NDk2LCA3NzUwMCwgNzc1MDQsIDc3NTA4LCAKLSAgICA3NzUxMiwgNzc1MTYsIDc3NTIxLCA3NzUyNiwgNzc1MzEsIDc3NTM2LCA3NzU0MSwgNzc1NDYsIDc3NTUxLCA3NzU1NiwgCi0gICAgNzc1NjEsIDc3NTY2LCA3NzU3MCwgNzc1NzQsIDc3NTc4LCA3NzU4MiwgNzc1ODYsIDc3NTkwLCA3NzU5NSwgNzc1OTksIAotICAgIDc3NjA0LCA3NzYwOCwgNzc2MTMsIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMxLCA3NzYzNSwgNzc2MzksIDc3NjQzLCAKLSAgICA3NzY0NywgNzc2NTEsIDc3NjU1LCA3NzY1OSwgNzc2NjMsIDc3NjY3LCA3NzY3MSwgNzc2NzUsIDc3Njc5LCA3NzY4MywgCi0gICAgNzc2ODcsIDc3NjkyLCA3NzY5NywgNzc3MDEsIDc3NzA1LCA3NzcwOSwgNzc3MTMsIDc3NzE3LCA3NzcyMSwgNzc3MjYsIAotICAgIDc3NzMwLCA3NzczNCwgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU1LCA3Nzc1OSwgNzc3NjQsIDc3NzY4LCAKLSAgICA3Nzc3MiwgNzc3NzYsIDc3NzgwLCA3Nzc4NCwgNzc3ODgsIDc3NzkyLCA3Nzc5NiwgNzc4MDAsIDc3ODA0LCA3NzgwOCwgCisgICAgODkzNSwgODkzOSwgODk0NCwgODk0OSwgODk1NiwgODk2MiwgODk3MiwgNzkwOSwgODk3OCwgODk4MiwgODk4OSwgODk5NiwgCisgICAgNzY4LCA5MDAwLCA5MDA0LCA5MDA5LCA5MDE0LCA5MDE5LCA5MDIzLCA5MDI5LCA5MDM3LCA5MDQzLCA5MDQ3LCA5MDUzLCAKKyAgICA5MDYzLCA5MDY3LCA5MDczLCA5MDc4LCA5MDgyLCA5MDg4LCA5MDk0LCAyMTYxLCA5MDk5LCA5MTAxLCA5MTA2LCA5MTE0LCAKKyAgICA5MTIzLCA5MTI3LCA5MTMzLCA5MTM4LCA5MTQzLCA5MTQ4LCA5MTUzLCA5MTU5LCA5MTY0LCA5MTY5LCA0MDA2LCA5MTc0LCAKKyAgICA5MTc5LCA5MTgzLCA5MTg5LCA5MTk0LCA5MjAwLCA5MjA1LCA5MjEwLCA5MjE2LCA5MjIxLCA5MTI4LCA5MjI3LCA5MjMxLCAKKyAgICA5MjM4LCA5MjQ0LCA5MjQ5LCA5MjUzLCA2MTgzLCA5MjU4LCA5MjY3LCA5MjcyLCA5Mjc3LCA4MjE4LCA4MjI1LCA5MjgyLCAKKyAgICAyODUzLCA5Mjg2LCA5MjkxLCA5Mjk2LCA5MTM5LCA5MzAwLCA5MzA1LCA5MTQ0LCA5MTQ5LCA5MzEwLCA5MzE3LCA5MzI0LCAKKyAgICA5MzMwLCA5MzM2LCA5MzQyLCA5MzQ3LCA5MzUyLCA5MzU3LCA5MTU0LCA5MTYwLCA5MzYzLCA5MzY5LCA5Mzc0LCA5MzgyLCAKKyAgICA5MTY1LCA5Mzg3LCA5OTAsIDkzOTAsIDkzOTgsIDk0MDQsIDk0MTAsIDk0MTksIDk0MjcsIDk0MzIsIDk0MzgsIDk0NDYsIAorICAgIDk0NTMsIDk0NjgsIDk0ODUsIDk1MDQsIDk1MTMsIDk1MjEsIDk1MzYsIDk1NDcsIDk1NTcsIDk1NjcsIDk1NzUsIDk1ODEsIAorICAgIDk1OTMsIDk2MDIsIDk2MTAsIDk2MTcsIDk2MjQsIDk2MzAsIDk2MzUsIDk2NDMsIDk2NTMsIDk2NjAsIDk2NzAsIDk2ODAsIAorICAgIDk2OTAsIDk2OTgsIDk3MDUsIDk3MTQsIDk3MjQsIDk3MzgsIDk3NTMsIDk3NjIsIDk3NzAsIDk3NzUsIDk3NzksIDk3ODgsIAorICAgIDk3OTQsIDk3OTksIDk4MDksIDk4MTksIDk4MjksIDk4MzQsIDk4MzgsIDk4NDcsIDk4NTIsIDk4NjIsIDk4NzMsIDk4ODYsIAorICAgIDk4OTQsIDk5MDcsIDk5MTksIDk5MjcsIDk5MzIsIDk5MzYsIDk5NDIsIDk5NDcsIDk5NTUsIDk5NjMsIDk5NzAsIDk5NzUsIAorICAgIDk5ODMsIDk5ODksIDk5OTIsIDk5OTYsIDEwMDAyLCAxMDAxMCwgMTAwMTUsIDEwMDE5LCAxMDAyNywgMTAwMzYsIDEwMDQ0LCAKKyAgICAxMDA1MCwgMTAwNTQsIDEwMDYxLCAxMDA3MiwgMTAwNzYsIDEwMDc5LCAxMDA4NSwgOTE3MCwgMTAwOTAsIDEwMDk2LCAKKyAgICAxMDEwMywgMTAxMDksIDEwMTE0LCAxMDEyMSwgMTAxMjgsIDEwMTM1LCAxMDE0MiwgMTAxNDksIDEwMTU2LCAxMDE2MywgCisgICAgMTAxNzAsIDEwMTc1LCA5NDgxLCAxMDE4MCwgMTAxODYsIDEwMTkzLCAxMDIwMCwgMTAyMDUsIDEwMjEyLCAxMDIyMSwgCisgICAgMTAyMjUsIDEwMjM3LCA4MjU2LCAxMDI0MSwgMTAyNDQsIDEwMjQ4LCAxMDI1MiwgMTAyNTYsIDEwMjYwLCAxMDI2NiwgCisgICAgMTAyNzIsIDEwMjc3LCAxMDI4MywgMTAyODgsIDEwMjkzLCAxMDI5OSwgMTAzMDQsIDEwMzA5LCA4OTUyLCAxMDMxNCwgCisgICAgMTAzMTgsIDEwMzIyLCAxMDMyNiwgMTAzMzEsIDEwMzM2LCAxMDM0NCwgMTAzNTAsIDEwMzU0LCAxMDM1OCwgMTAzNjUsIAorICAgIDEwMzcwLCAxMDM3OCwgMTAzODMsIDEwMzg3LCAxMDM5MCwgMTAzOTYsIDEwNDAzLCAxMDQwNywgMTA0MTAsIDEwNDE1LCAKKyAgICAxMDQxOSwgNDA0NSwgMTA0MjUsIDEwNDM0LCAzNiwgMTA0NDIsIDEwNDQ4LCAxMDQ1MywgODk2NywgMTA0NTgsIDEwNDYzLCAKKyAgICAxMDQ2NywgMTA0NzAsIDEwNDg1LCAxMDUwNCwgMTA1MTYsIDEwNTI5LCAxMDU0MiwgMTA1NTUsIDEwNTY5LCAxMDU4MiwgCisgICAgMTA1OTcsIDEwNjA0LCA5MTc1LCAxMDYxMCwgMTA2MjQsIDEwNjI5LCAxMDYzNSwgMTA2NDAsIDEwNjQ4LCAxMDY1MywgCisgICAgODA0MCwgMTA2NTgsIDEwNjYxLCAxMDY2OCwgMTA2NzMsIDEwNjc3LCAyODU4LCA5OTgsIDEwNjgzLCAxMDY4NywgMTA2OTMsIAorICAgIDEwNjk5LCAxMDcwNCwgMTA3MTAsIDEwNzE1LCA5MTg0LCAxMDcyMSwgMTA3MjcsIDEwNzMyLCAxMDczNywgMTA3NDUsIAorICAgIDEwNzUxLCAxMDc2NCwgMTA3NzIsIDEwNzc5LCA5MTkwLCAxMDc4NSwgMTA3OTMsIDEwODAxLCAxMDgwOCwgMTA4MjEsIAorICAgIDEwODMzLCAxMDg0MywgMTA4NTEsIDEwODU4LCAxMDg2NSwgMTA4NzQsIDEwODgzLCAxMDg5MSwgMTA4OTgsIDEwOTAzLCAKKyAgICAxMDkwOSwgOTE5NSwgMTA5MTQsIDEwOTIwLCA5MjAxLCAxMDkyNSwgMTA5MjgsIDEwOTM1LCAxMDk0MSwgMTA5NTQsIDg2NjksIAorICAgIDEwOTY1LCAxMDk3MSwgMTA5ODAsIDEwOTg4LCAxMDk5NSwgMTEwMDEsIDExMDA3LCAxMTAxMiwgMTEwMTYsIDExMDIxLCAKKyAgICAxMDQ3NywgMTEwMjcsIDkyMDYsIDExMDM0LCAxMTAzOSwgMTEwNDYsIDExMDUyLCAxMTA1OCwgMTEwNjMsIDExMDcxLCAKKyAgICAxMTA3OSwgMTEwODYsIDExMDkwLCAxMTEwNCwgMTExMTQsIDExMTE5LCAxMTEyMywgMTExMzQsIDExMTQwLCAxMTE0NSwgCisgICAgMTExNTAsIDkyMTEsIDkyMTcsIDExMTU0LCAxMTE1NywgMTExNjIsIDExMTc0LCAxMTE4MSwgMTExODYsIDExMTkwLCAKKyAgICAxMTE5NSwgMTExOTksIDExMjA2LCAxMTIxMiwgOTIyMiwgOTEyOSwgMTEyMTksIDI4NjMsIDgsIDExMjI2LCAxMTIzMSwgCisgICAgMTEyMzUsIDExMjQxLCAxMTI0OSwgMTEyNTksIDExMjY0LCAxMTI2OSwgMTEyNzYsIDExMjgzLCAxMTI4NywgMTEyOTgsIAorICAgIDExMzA4LCAxMTMxNywgMTEzMjksIDExMzM0LCAxMTMzOCwgMTEzNDYsIDExMzYwLCAxMTM2NCwgMTEzNjcsIDExMzc1LCAKKyAgICAxMTM4MiwgMTEzOTAsIDExMzk0LCAxMTQwNSwgMTE0MDksIDExNDE2LCAxMTQyMSwgMTE0MjUsIDExNDMxLCAxMTQzNiwgCisgICAgMTE0NDAsIDExNDQ2LCAxMTQ1MSwgMTE0NjIsIDExNDY2LCAxMTQ2OSwgMTE0NzUsIDExNDgwLCAxMTQ4NiwgMTE0OTIsIAorICAgIDExNDk5LCAxMTUxMCwgMTE1MjAsIDExNTMwLCAxMTUzOSwgMTE1NDYsIDExNTU1LCA5MjMyLCA5MjM5LCA5MjQ1LCA5MjUwLCAKKyAgICAxMTU2MSwgMTE1NjcsIDkyNTQsIDExNTczLCAxMTU3NiwgMTE1ODMsIDExNTg4LCAxMTYwMywgMTE2MTksIDExNjM0LCAKKyAgICAxMTY0MiwgMTE2NDgsIDExNjUzLCA4MzgsIDQyMCwgMTE2NTgsIDExNjY2LCAxMTY3MywgMTE2NzksIDExNjg0LCAxMTY4OSwgCisgICAgOTI1OSwgMTE2OTEsIDExNjk1LCAxMTcwMCwgMTE3MDQsIDExNzE0LCAxMTcxOSwgMTE3MjMsIDExNzMyLCAxMTczNiwgCisgICAgMTE3MzksIDkyNjgsIDExNzQ2LCAxMTc0OSwgMTE3NTcsIDExNzY0LCAxMTc3MiwgMTE3NzYsIDExNzgzLCAxMTc5MiwgCisgICAgMTE3OTUsIDExNzk5LCAxMTgwMywgMTE4MDksIDExODEzLCAxMTgxNywgMTE4MjEsIDExODI3LCAxMTgzNywgMTE4NDEsIAorICAgIDExODQ5LCAxMTg1MywgMTE4NjAsIDExODY0LCAxMTg2OSwgMTE4NzMsIDExODgwLCAxMTg4NiwgMTE4OTQsIDExOTAwLCAKKyAgICAxMTkwNSwgMTE5MTUsIDExOTIwLCAxMTkyNSwgMTE5MjksIDExOTM3LCAzOTA1LCAxMTk0NSwgMTE5NTAsIDkyNzMsIAorICAgIDExOTU0LCAxMTk1OCwgMTE5NjEsIDExOTY5LCAxMTk3NiwgMTE5ODAsIDU5OTEsIDExOTg0LCAxMTk4OSwgMTE5OTMsIAorICAgIDEyMDA0LCAxMjAxNCwgMTIwMTksIDEyMDI1LCAxMjAyOSwgMTIwMzIsIDEyMDQwLCAxMjA0NSwgMTIwNTAsIDEyMDU3LCAKKyAgICAxMjA2MiwgOTI3OCwgMTIwNjcsIDEyMDcxLCAxMjA3OCwgMTcyMiwgNjE0NSwgMTIwODMsIDEyMDg4LCAxMjA5MywgMTIwOTgsIAorICAgIDEyMTA0LCAxMjEwOSwgMTIxMTUsIDEyMTIwLCAxMjEyNSwgMTIxMzAsIDEyMTM1LCAxMjE0MCwgMTIxNDUsIDEyMTUwLCAKKyAgICAxMjE1NSwgMTIxNjAsIDEyMTY1LCAxMjE3MCwgMTIxNzUsIDEyMTgwLCAxMjE4NSwgMTIxOTAsIDEyMTk1LCAxMjIwMSwgCisgICAgMTIyMDYsIDEyMjExLCAxMjIxNiwgMTIyMjEsIDEyMjI2LCAxMjIzMiwgMTIyMzcsIDEyMjQyLCAxMjI0OCwgMTIyNTMsIAorICAgIDEyMjU5LCAxMjI2NCwgMTIyNzAsIDEyMjc1LCAxMjI4MCwgMTIyODUsIDEyMjkwLCAxMjI5NiwgMTIzMDEsIDEyMzA2LCAKKyAgICAxMjMxMSwgNzM3LCAxMzksIDEyMzE5LCAxMjMyMywgMTIzMjgsIDEyMzMzLCAxMjMzNywgMTIzNDEsIDEyMzQ1LCAxMjM1MCwgCisgICAgMTIzNTQsIDEyMzU5LCAxMjM2MywgMTIzNjYsIDEyMzcwLCAxMjM3NCwgMTIzODAsIDEyMzg1LCAxMjM5NSwgMTI0MDEsIAorICAgIDEyNDA5LCAxMjQxMywgMTI0MTcsIDEyNDI0LCAxMjQzMiwgMTI0NDEsIDEyNDUyLCAxMjQ1OSwgMTI0NjYsIDEyNDcwLCAKKyAgICAxMjQ3OSwgMTI0ODgsIDEyNDk2LCAxMjUwNSwgMTI1MTQsIDEyNTIzLCAxMjUzMiwgMTI1NDIsIDEyNTUyLCAxMjU2MiwgCisgICAgMTI1NzIsIDEyNTgyLCAxMjU5MSwgMTI2MDEsIDEyNjExLCAxMjYyMSwgMTI2MzEsIDEyNjQxLCAxMjY1MSwgMTI2NjEsIAorICAgIDEyNjcwLCAxMjY4MCwgMTI2OTAsIDEyNzAwLCAxMjcxMCwgMTI3MjAsIDEyNzMwLCAxMjczOSwgMTI3NDksIDEyNzU5LCAKKyAgICAxMjc2OSwgMTI3NzksIDEyNzg5LCAxMjc5OSwgMTI4MDksIDEyODE5LCAxMjgyOSwgMTI4MzgsIDEyODQ4LCAxMjg1OCwgCisgICAgMTI4NjgsIDEyODc4LCAxMjg4OCwgMTI4OTgsIDEyOTA4LCAxMjkxOCwgMTI5MjgsIDEyOTM4LCAxMjk0NywgMTI1NiwgCisgICAgMTI5NTMsIDEyOTU2LCAxMjk2MCwgMTI5NjUsIDEyOTcyLCAxMjk3OCwgMTI5ODMsIDEyOTg3LCAxMjk5MiwgMTMwMDEsIAorICAgIDEzMDA5LCAxMzAxNCwgMTMwMTgsIDEzMDIyLCAxMzAyOCwgMTMwMzMsIDEzMDM5LCA5Mjg3LCAxMzA0NCwgMTMwNDksIAorICAgIDEzMDU4LCA5MjkyLCAxMzA2MywgMTMwNjYsIDEzMDcyLCAxMzA4MCwgOTI5NywgMTMwODcsIDEzMDkxLCAxMzA5NSwgCisgICAgMTMwOTksIDEzMTA5LCAxMzExNSwgMTMxMjEsIDEzMTI2LCAxMzEzNSwgMTMxNDMsIDEzMTUwLCAxMzE1NywgMTMxNjIsIAorICAgIDEzMTY5LCAxMzE3NCwgMTMxNzgsIDEzMTgxLCAxMzE5MiwgMTMyMDIsIDEzMjExLCAxMzIxOSwgMTMyMzAsIDEzMjQyLCAKKyAgICAxMzI1MiwgMTMyNTcsIDEzMjYxLCAxMzI2NiwgMTMyNzEsIDEzMjc1LCAxMzI4MSwgMTMyODksIDEzMjk2LCAxMzMwNywgCisgICAgMTMzMTIsIDEzMzIyLCAxMzMyNiwgMTMzMjksIDEzMzM2LCAxMzM0NiwgMTMzNTUsIDEzMzYyLCAxMzM2NiwgMTMzNzMsIAorICAgIDEzMzc5LCAxMzM4NCwgMTMzODksIDEzMzkzLCAxMzQwMiwgMTM0MDcsIDEzNDEzLCAxMzQxNywgMTM0MjIsIDEzNDI2LCAKKyAgICAxMzQzNSwgMTM0NDMsIDEzNDUxLCAxMzQ1OCwgMTM0NjYsIDEzNDc4LCAxMzQ4OSwgMTM0OTksIDEzNTA2LCAxMzUxMiwgCisgICAgMTM1MjEsIDEzNTMyLCAxMzU0MSwgMTM1NTMsIDEzNTY1LCAxMzU3NywgMTM1ODcsIDEzNTk2LCAxMzYwNSwgMTM2MTMsIAorICAgIDEzNjIwLCAxMzYyOSwgMTM2MzcsIDEzNjQxLCAxMzY0NywgMTM2NTMsIDEzNjU4LCA3NzUzLCAxMzY2MiwgMTM2NjQsIAorICAgIDEzNjY4LCAxMzY3MywgMTM2NzksIDEzNjg4LCAxMzY5MiwgMTM2OTgsIDEzNzA2LCAxMzcxMywgMTM3MjIsIDEzNzMxLCAKKyAgICAxMzc0MCwgMTM3NDksIDEzNzU4LCAxMzc2NywgMTM3NzYsIDEzNzg1LCAxMzc5NSwgMTM4MDUsIDEzODE0LCAxMzgyMCwgCisgICAgMTM4MjcsIDEzODM0LCAxMzg0MCwgMTM4NTQsIDEzODYxLCAxMzg2OSwgMTM4NzgsIDEzODg0LCAxMzg5MywgMTM5MDIsIAorICAgIDEzOTEzLCAxMzkyMywgMTM5MzEsIDEzOTM4LCAxMzk0NiwgMTM5NTUsIDEzOTY4LCAxMzk3NiwgMTM5ODMsIDEzOTk2LCAKKyAgICAxNDAwMiwgMTQwMDgsIDE0MDE4LCAxNDAyNywgMTQwMzYsIDE0MDQxLCAxNDA0NSwgMTQwNTEsIDE0MDU3LCAxNDA2NCwgCisgICAgODk2NiwgMTQwNjksIDE0MDc0LCAxNDA4MSwgMTQwODYsIDEyMzc2LCAxNDA5MSwgMTQwOTksIDE0MTA1LCAxNDExMCwgCisgICAgMTQxMTgsIDE0MTI2LCAxNDEzMywgMTQxNDEsIDE0MTQ3LCAxNDE1NSwgMTQxNjMsIDE0MTY5LCAxNDE3NCwgMTQxODAsIAorICAgIDE0MTg3LCAxNDE5MywgMTQxOTgsIDE0MjAyLCAxNDIxMywgMTQyMjEsIDE0MjI3LCAxNDIzMiwgMTQyNDEsIDE0MjQ3LCAKKyAgICAxNDI1MiwgMTQyNjEsIDE0Mjc1LCAzODUzLCAxNDI3OSwgMTQyODQsIDE0Mjg5LCAxNDI5NSwgMTQzMDAsIDE0MzA1LCAKKyAgICAxNDMwOSwgMTQzMTQsIDE0MzE5LCAxNDMyNCwgNzc1MiwgMTQzMjksIDE0MzM0LCAxNDMzOSwgMTQzNDQsIDE0MzQ5LCAKKyAgICAxNDM1MywgMTQzNTgsIDE0MzYzLCAxNDM2OCwgMTQzNzMsIDE0Mzc5LCAxNDM4NSwgMTQzOTAsIDE0Mzk0LCAxNDM5OSwgCisgICAgMTQ0MDQsIDE0NDA5LCA5MzAxLCAxNDQxNCwgMTQ0MTksIDE0NDI0LCAxNDQyOSwgMTQ0MzQsIDE0NDUxLCAxNDQ2OSwgCisgICAgMTQ0ODEsIDE0NDk0LCAxNDUxMSwgMTQ1MjcsIDE0NTQ0LCAxNDU1NCwgMTQ1NzMsIDE0NTg0LCAxNDU5NSwgMTQ2MDYsIAorICAgIDE0NjE3LCAxNDYyOSwgMTQ2NDAsIDE0NjUxLCAxNDY2OCwgMTQ2NzksIDE0NjkwLCAxNDY5NSwgOTMwNiwgMTQ3MDAsIAorICAgIDE0NzA0LCAyMzgxLCAxNDcwOCwgMTQ3MTEsIDE0NzE3LCAxNDcyNSwgMTQ3MzMsIDE0NzM4LCAxNDc0NiwgMTQ3NTQsIAorICAgIDE0NzYxLCAxNDc2NiwgMTQ3NzIsIDE0Nzc5LCAxNDc4NywgMTQ3OTQsIDE0ODA2LCAxNDgxNCwgMTQ4MTksIDExNTk3LCAKKyAgICAxNDgyNSwgMTQ4MzQsIDE0ODQzLCAxNDg1MSwgMTQ4NTgsIDE0ODY0LCAxNDg3MiwgMTQ4NzksIDE0ODg1LCAxNDg5MiwgCisgICAgMTQ4OTgsIDE0OTA3LCAxNDkxNSwgMTQ5MjUsIDE0OTMyLCAxNDkzOCwgMTQ5NDYsIDE0OTUyLCAxNDk2MCwgMTQ5NjcsIAorICAgIDE0OTgwLCAxNDk4NywgMTQ5OTYsIDE1MDA1LCAxNTAxNCwgMTUwMjIsIDE1MDMyLCAxNTAzOSwgMTUwNDQsIDM1NjAsIAorICAgIDE1MDUxLCAxNTA1NiwgMTM3MiwgMTUwNjAsIDE0MzMwLCAxNTA2NCwgMTUwNzAsIDE1MDc0LCAxNTA4MiwgMTUwOTQsIAorICAgIDE1MDk5LCAxNTEwNiwgMTUxMTIsIDE1MTE3LCAxNTEyNCwgMTQzMzUsIDE1MTI4LCAxNTEzMiwgMTUxMzYsIDE0MzQwLCAKKyAgICAxNTE0MCwgMTQzNDUsIDE1MTQ0LCAxNTE1MSwgMTUxNTYsIDE1MTYwLCAxNTE2NywgMTUxNzEsIDE1MTc5LCAxNTE4NiwgCisgICAgMTUxOTAsIDE1MTk3LCAxNTIxNCwgMTUyMjMsIDE1MjI3LCAxNTIzMCwgMTUyMzgsIDE1MjQ0LCAxNTI0OSwgMzYzOCwgCisgICAgMTUyNTMsIDE1MjU1LCAxNTI2MywgMTUyNzAsIDE1MjgwLCAxNTI5MiwgMTUyOTcsIDE1MzAzLCAxNTMwOCwgMTUzMTIsIAorICAgIDE1MzE4LCAxNTMyMywgMTUzMjksIDE1MzMyLCAxNTMzOSwgMTUzNDcsIDE1MzU0LCAxNTM2MCwgMTUzNjYsIDE1MzcxLCAKKyAgICAxNTM3OCwgMTUzODQsIDE1Mzg5LCAxNTM5NiwgMTU0MDAsIDE1NDA2LCAxNTQxMCwgMTU0MTcsIDE1NDIzLCAxNTQyOSwgCisgICAgMTU0MzcsIDE1NDQzLCAxNTQ0OCwgMTU0NTQsIDE1NDYyLCAxNTQ3MCwgMTU0NzYsIDE1NDgyLCAxNTQ4NywgMTU0OTQsIAorICAgIDE1NDk5LCAxNTUwMywgMTU1MDksIDE1NTE0LCAxNTUyMSwgMTU1MjYsIDE1NTMyLCAxNTUzNSwgMTU1NDEsIDE1NTQ3LCAKKyAgICAxNTU1MCwgMTU1NTQsIDE1NTY2LCAxNTU3MiwgMTU1NzcsIDE1NTg0LCAxNTU5MCwgMTU1OTYsIDE1NjA3LCAxNTYxNywgCisgICAgMTU2MjYsIDE1NjM0LCAxNTY0MSwgMTU2NTIsIDE1NjYyLCAxNTY3MiwgMTU2ODAsIDE1NjgzLCAxNDM1OSwgMTU2ODgsIAorICAgIDE1NjkzLCAxNDM2NCwgMTQ0OTksIDE1NzAxLCAxNTcxNCwgMTU3MjksIDE1NzQwLCAxNDUxNiwgMTU3NTgsIDE1NzcxLCAKKyAgICAxNTc4NCwgMTU3OTUsIDEwNDkyLCAxNTgwNiwgMTU4MTksIDE1ODM4LCAxNTg0OSwgMTU4NjAsIDE1ODcxLCAyNjQ5LCAKKyAgICAxNTg4NCwgMTU4ODgsIDE1ODk2LCAxNTkxMSwgMTU5MjYsIDE1OTM3LCAxNTk0NCwgMTU5NTAsIDE1OTU4LCAxNTk2MiwgCisgICAgMTU5NjgsIDE1OTcxLCAxNTk4MSwgMTU5ODksIDE1OTk2LCAxNjAwNCwgMTYwMTQsIDE2MDE5LCAxNjAyNiwgMTYwMzEsIAorICAgIDE2MDM4LCAxNjA0OSwgMTYwNTksIDE2MDY1LCAxNjA3MCwgMTYwNzUsIDE0MzY5LCAxNjA3OSwgMTYwODUsIDE2MDkxLCAKKyAgICAxNjA5NiwgMTYxMDEsIDE2MTA2LCAxNjExMCwgMTQzNzQsIDE0MzgwLCAxNjExNCwgMTQzODYsIDE2MTE5LCAxNjEyNywgCisgICAgMTYxMzYsIDE2MTQzLCA5MTUwLCAxNjE0NywgMTYxNDksIDE2MTU0LCAxNjE1OSwgMTYxNjUsIDE2MTcwLCAxNjE3NSwgCisgICAgMTYxODAsIDE2MTg1LCAxNjE4OSwgMTYxOTUsIDE2MjAxLCAxNjIwNiwgMTYyMTIsIDE2MjE3LCAxNjIyMiwgMTYyMjgsIAorICAgIDE2MjMzLCAxNjIzOCwgMTYyNDMsIDE2MjQ4LCAxNjI1NCwgMTYyNTksIDE2MjY0LCAxNjI3MCwgMTYyNzYsIDE2MjgxLCAKKyAgICAxNjI4NiwgMTYyOTMsIDE2Mjk5LCAxNjMxMCwgMTYzMTcsIDE2MzIyLCAxNjMyNiwgMTYzMzAsIDE2MzMzLCAxNjM0MSwgCisgICAgMTYzNDYsIDE2MzUzLCAxNjM2MCwgMTYzNjYsIDE2MzcxLCAxNjM3NiwgMTYzODMsIDE2MzkzLCAxNjM5OCwgMTY0MDUsIAorICAgIDE2NDExLCAxNjQyMSwgMTY0MzEsIDE2NDQ1LCAxNjQ1OSwgMTY0NzMsIDE2NDg3LCAxNjUwMiwgMTY1MTcsIDE2NTM0LCAKKyAgICAxNjU1MiwgMTY1NjUsIDE2NTcxLCAxNjU3NiwgMTY1ODEsIDE2NTg1LCAxNjU5MCwgMTY1OTgsIDE2NjA0LCAxNjYwOSwgCisgICAgMTY2MTQsIDE2NjE4LCAxNjYyMywgMTY2MjcsIDE2NjMyLCAxNjYzNiwgMTY2NDcsIDE2NjUzLCAxNjY1OCwgMTY2NjMsIAorICAgIDE2NjcwLCAxNjY3NSwgMTY2NzksIDE2Njg0LCAxNjY4OSwgMTY2OTUsIDE2NzAyLCAxNjcwOCwgMTY3MTMsIDE2NzE3LCAKKyAgICAxNjcyMywgMTY3MjgsIDE2NzMzLCAxNjczNywgMTY3NDMsIDE2NzQ4LCAxNjc1MywgMTY3NjAsIDE2NzY1LCAxMzExMSwgCisgICAgMTY3NjksIDE2Nzc0LCAxNjc3OCwgMTY3ODMsIDE2Nzg5LCAxNjc5NSwgMTY4MDIsIDE2ODEyLCAxNjgyMCwgMTY4MjcsIAorICAgIDE2ODMyLCAxNjgzNiwgMTY4NDUsIDE2ODUzLCAxNjg2MCwgMTY4NjcsIDE2ODczLCAxNjg3OSwgMTY4ODQsIDE2ODg5LCAKKyAgICAxNjg5NSwgMTY5MDAsIDE2OTA2LCAxNjkxMSwgMTY5MTcsIDE2OTIzLCAxNjkzMCwgMTY5MzYsIDE2OTQxLCAxNjk0NiwgCisgICAgOTM0OCwgMTY5NTUsIDE2OTU4LCAxNjk2NCwgMTY5NjksIDE2OTc0LCAxNjk4NCwgMTY5OTEsIDE2OTk3LCAxNzAwMiwgCisgICAgMTcwMDcsIDE3MDEzLCAxNzAxOCwgMTcwMjQsIDE3MDI5LCAxNzAzNSwgMTcwNDEsIDE3MDQ2LCAxNzA1NCwgMTcwNjEsIAorICAgIDE3MDY2LCAxNzA3MSwgMTcwNzcsIDE3MDgyLCAxNzA4NiwgMTcwOTUsIDE3MTA2LCAxNzExMywgMTcxMTgsIDE3MTI2LCAKKyAgICAxNzEzMiwgMTcxMzksIDE3MTQ1LCAxNzE1MCwgMTcxNTQsIDE3MTYwLCAxNzE2NSwgMTcxNzAsIDE3MTc1LCAxNDQwLCAKKyAgICA3Nzc3LCAyODc3LCAxNzE3OSwgMTcxODMsIDE3MTg3LCAxNzE5MSwgMTcxOTUsIDE3MTk5LCAxNzIwMiwgMTcyMDksIAorICAgIDE3MjE3LCAxNDQwMCwgMTcyMjQsIDE3MjM0LCAxNzI0MiwgMTcyNDksIDE3MjU3LCAxNzI2NywgMTcyNzYsIDE3Mjg5LCAKKyAgICAxNzI5NCwgMTcyOTksIDE3MzA3LCAxNzMxNCwgMTMyMDcsIDEzMjE2LCAxNzMyMSwgMTczMzEsIDE3MzQ2LCAxNzM1MiwgCisgICAgMTczNTksIDE3MzY2LCAxNzM3MiwgMTczODAsIDE3MzkwLCAxNzQwMCwgMTQ0MDUsIDE3NDA5LCAxNzQxNSwgMTc0MjEsIAorICAgIDE3NDI5LCAxNzQzNywgMTc0NDIsIDE3NDUxLCAxNzQ1OSwgMTc0NzEsIDE3NDgxLCAxNzQ5MSwgMTc1MDEsIDE3NTEwLCAKKyAgICAxNzUyMiwgMTc1MzIsIDE3NTQyLCAxNzU1MywgMTc1NTgsIDE3NTcwLCAxNzU4MiwgMTc1OTQsIDE3NjA2LCAxNzYxOCwgCisgICAgMTc2MzAsIDE3NjQyLCAxNzY1NCwgMTc2NjYsIDE3Njc4LCAxNzY4OSwgMTc3MDEsIDE3NzEzLCAxNzcyNSwgMTc3MzcsIAorICAgIDE3NzQ5LCAxNzc2MSwgMTc3NzMsIDE3Nzg1LCAxNzc5NywgMTc4MDksIDE3ODIwLCAxNzgzMiwgMTc4NDQsIDE3ODU2LCAKKyAgICAxNzg2OCwgMTc4ODAsIDE3ODkyLCAxNzkwNCwgMTc5MTYsIDE3OTI4LCAxNzk0MCwgMTc5NTEsIDE3OTYzLCAxNzk3NSwgCisgICAgMTc5ODcsIDE3OTk5LCAxODAxMSwgMTgwMjMsIDE4MDM1LCAxODA0NywgMTgwNTksIDE4MDcxLCAxODA4MiwgMTgwOTQsIAorICAgIDE4MTA2LCAxODExOCwgMTgxMzAsIDE4MTQyLCAxODE1NCwgMTgxNjYsIDE4MTc4LCAxODE5MCwgMTgyMDIsIDE4MjEzLCAKKyAgICAxODIyNSwgMTgyMzcsIDE4MjQ5LCAxODI2MSwgMTgyNzMsIDE4Mjg1LCAxODI5NywgMTgzMDksIDE4MzIxLCAxODMzMywgCisgICAgMTgzNDQsIDE4MzU2LCAxODM2OCwgMTgzODAsIDE4MzkyLCAxODQwNCwgMTg0MTYsIDE4NDI4LCAxODQ0MCwgMTg0NTIsIAorICAgIDE4NDY0LCAxODQ3NSwgMTg0ODcsIDE4NDk5LCAxODUxMSwgMTg1MjMsIDE4NTM2LCAxODU0OSwgMTg1NjIsIDE4NTc1LCAKKyAgICAxODU4OCwgMTg2MDEsIDE4NjE0LCAxODYyNiwgMTg2MzksIDE4NjUyLCAxODY2NSwgMTg2NzgsIDE4NjkxLCAxODcwNCwgCisgICAgMTg3MTcsIDE4NzMwLCAxODc0MywgMTg3NTYsIDE4NzY4LCAxODc4MSwgMTg3OTQsIDE4ODA3LCAxODgyMCwgMTg4MzMsIAorICAgIDE4ODQ2LCAxODg1OSwgMTg4NzIsIDE4ODg1LCAxODg5OCwgMTg5MTAsIDE4OTIzLCAxODkzNiwgMTg5NDksIDE4OTYyLCAKKyAgICAxODk3NSwgMTg5ODgsIDE5MDAxLCAxOTAxNCwgMTkwMjcsIDE5MDQwLCAxOTA1MiwgMTkwNjUsIDE5MDc4LCAxOTA5MSwgCisgICAgMTkxMDQsIDE5MTE3LCAxOTEzMCwgMTkxNDMsIDE5MTU2LCAxOTE2OSwgMTkxODIsIDE5MTk0LCAxOTIwNywgMTkyMjAsIAorICAgIDE5MjMzLCAxOTI0NiwgMTkyNTksIDE5MjcyLCAxOTI4NSwgMTkyOTgsIDE5MzExLCAxOTMyNCwgMTkzMzYsIDE5MzQ3LCAKKyAgICAxOTM2MCwgMTkzNzMsIDE5Mzg2LCAxOTM5OSwgMTk0MTIsIDE5NDI1LCAxOTQzOCwgMTk0NTEsIDE5NDY0LCAxOTQ3NywgCisgICAgMTk0ODksIDE5NTAyLCAxOTUxNSwgMTk1MjgsIDE5NTQxLCAxOTU1NCwgMTk1NjcsIDE5NTgwLCAxOTU5MywgMTk2MDYsIAorICAgIDE5NjE5LCAxOTYzMSwgMTk2NDQsIDE5NjU3LCAxOTY3MCwgMTk2ODMsIDE5Njk2LCAxOTcwOSwgMTk3MjIsIDE5NzM1LCAKKyAgICAxOTc0OCwgMTk3NjEsIDE5NzczLCAxOTc4NiwgMTk3OTksIDE5ODEyLCAxOTgyNSwgMTk4MzgsIDE5ODUxLCAxOTg2NCwgCisgICAgMTk4NzcsIDE5ODkwLCAxOTkwMywgMTk5MTUsIDE5OTI4LCAxOTk0MSwgMTk5NTQsIDE5OTY3LCAxOTk4MCwgMTk5OTMsIAorICAgIDIwMDA2LCAyMDAxOSwgMjAwMzIsIDIwMDQ1LCAyMDA1NywgMjAwNzAsIDIwMDgzLCAyMDA5NiwgMjAxMDksIDIwMTIyLCAKKyAgICAyMDEzNSwgMjAxNDgsIDIwMTYxLCAyMDE3NCwgMjAxODcsIDIwMTk5LCAyMDIxMiwgMjAyMjUsIDIwMjM4LCAyMDI1MSwgCisgICAgMjAyNjQsIDIwMjc3LCAyMDI5MCwgMjAzMDMsIDIwMzE2LCAyMDMyOSwgMjAzNDEsIDIwMzU0LCAyMDM2NywgMjAzODAsIAorICAgIDIwMzkzLCAyMDQwNiwgMjA0MTksIDIwNDMyLCAyMDQ0NSwgMjA0NTgsIDIwNDcxLCAyMDQ4MywgMjA0OTYsIDIwNTA5LCAKKyAgICAyMDUyMiwgMjA1MzUsIDIwNTQ4LCAyMDU2MSwgMjA1NzQsIDIwNTg3LCAyMDYwMCwgMjA2MTMsIDIwNjI1LCAyMDYzOCwgCisgICAgMjA2NTEsIDIwNjY0LCAyMDY3NywgMjA2OTAsIDIwNzAzLCAyMDcxNiwgMjA3MjksIDIwNzQyLCAyMDc1NSwgMjA3NjcsIAorICAgIDIwNzc4LCAyMDc4NiwgMjA3OTQsIDIwODAxLCAyMDgwNywgMjA4MTEsIDIwODE3LCAyMDgyMywgMjA4MzEsIDIwODM3LCAKKyAgICAyMDg0MiwgMjA4NDYsIDIwODU1LCA5MTU1LCAyMDg2NiwgMjA4NzMsIDIwODgxLCAyMDg4OCwgMjA4OTUsIDEwOTQ4LCAKKyAgICAyMDkwMiwgMjA5MTEsIDIwOTE2LCAyMDkyMSwgNzgwNSwgMjA5MjgsIDIwOTMzLCAyMDkzNiwgMjA5NDEsIDIwOTQ5LCAKKyAgICAyMDk1NiwgMjA5NjMsIDIwOTcwLCAyMDk3NiwgMjA5ODUsIDIwOTk0LCAyMTAwMCwgMjEwMDksIDIxMDEzLCAyMTAxOSwgCisgICAgMjEwMjQsIDIxMDM0LCAyMTA0MSwgMjEwNDcsIDIxMDU1LCAyMTA2MSwgMjEwNjgsIDIxMDc4LCAyMTA4NywgMjEwOTEsIAorICAgIDIxMDk4LCAyMTEwMiwgMjExMDcsIDIxMTEzLCAyMTEyMSwgMjExMjUsIDIxMTM1LCAxNDQxNSwgMjExNDQsIDIxMTUwLCAKKyAgICAyMTE1NCwgMjExNjMsIDE0NDIwLCAyMTE2OSwgMjExNzYsIDIxMTg3LCAyMTE5NSwgMjEyMDQsIDIxMjEyLCA4OTMxLCAKKyAgICAyMTIyMCwgMjEyMjUsIDIxMjMxLCAyMTIzNiwgMjEyNDAsIDIxMjQ0LCAyMTI0OCwgOTYzOSwgMjEyNTMsIDIxMjYxLCAKKyAgICAyMTI2OCwgMjEyNzcsIDIxMjg0LCAyMTI5MSwgMTA4NzgsIDIxMjk4LCAyMTMwNCwgMjEzMDgsIDIxMzE0LCAyMTMyMSwgCisgICAgMjEzMjcsIDIxMzM1LCAyMTM0MSwgMjEzNDgsIDIxMzU0LCAyMTM2MCwgMjEzNjksIDIxMzczLCAyMTM4MSwgMjEzOTAsIAorICAgIDIxMzk3LCAyMTQwMiwgMjE0MDYsIDIxNDE3LCAyMTQyMiwgMjE0MjcsIDIxNDMyLCAyMTQ0NSwgNzk5NSwgMjE0NDksIAorICAgIDIxNDU1LCAyMTQ2MywgMjE0NjcsIDIxNDc0LCAyMTQ4MywgMjE0ODgsIDE0NjkxLCAyMTQ5NiwgMjE1MDAsIDIxNTEyLCAKKyAgICAyMTUxNywgMjE1MjEsIDIxNTI0LCAyMTUzMCwgMjE1MzYsIDIxNTQxLCAyMTU0NSwgMjE1NDgsIDIxNTU5LCAyMTU2NCwgCisgICAgOTM4MywgMjE1NzEsIDIxNTc2LCA5Mzg4LCAyMTU4MSwgMjE1ODYsIDIxNTkxLCAyMTU5NiwgMjE2MDEsIDIxNjA2LCAKKyAgICAyMTYxMSwgMjE2MTYsIDIxNjIxLCAyMTYyNiwgMjE2MzEsIDIxNjM2LCAyMTY0MiwgMjE2NDcsIDIxNjUyLCAyMTY1NywgCisgICAgMjE2NjIsIDIxNjY3LCAyMTY3MiwgMjE2NzcsIDIxNjgyLCAyMTY4NywgMjE2OTMsIDIxNjk5LCAyMTcwNCwgMjE3MDksIAorICAgIDIxNzE0LCAyMTcxOSwgMjE3MjQsIDIxNzI5LCAyMTczNCwgMjE3MzksIDIxNzQ0LCAyMTc1MCwgMjE3NTUsIDIxNzYwLCAKKyAgICAyMTc2NSwgMjE3NzEsIDIxNzc3LCAyMTc4MiwgMjE3ODcsIDIxNzkyLCAyMTc5NywgMjE4MDIsIDIxODA3LCAyMTgxMiwgCisgICAgMjE4MTcsIDIxODIzLCAyMTgyOCwgMjE4MzMsIDIxODM4LCAyMTg0MywgMjE4NDksIDIxODU0LCAyMTg1OSwgMjE4NjMsIAorICAgIDEzNjgsIDEyOSwgMjE4NzEsIDIxODc1LCAyMTg3OSwgMjE4ODMsIDIxODg4LCAyMTg5MiwgMTMxMTcsIDEyNDc2LCAyMTg5NiwgCisgICAgMjE5MDEsIDIxOTA1LCAyMTkxMCwgMjE5MTQsIDIxOTE5LCAyMTkyMywgMjE5MjksIDIxOTM0LCAyMTkzOCwgMjE5NDIsIAorICAgIDIxOTUwLCAyMTk1NCwgMjE5NTgsIDIxOTYzLCAyMTk2OCwgMjE5NzIsIDIxOTc4LCAyMTk4MywgMjE5ODcsIDIxOTkyLCAKKyAgICAyMTk5NywgMjIwMDEsIDIyMDA4LCAyMjAxNSwgMjIwMjIsIDIyMDI2LCAyMjAzMCwgMjIwMzUsIDIyMDM5LCAyMjA0MiwgCisgICAgMjIwNDgsIDIyMDYxLCAyMjA2NiwgMjIwNzUsIDIyMDgwLCA5NDI4LCAyMjA4NSwgMjIwODgsIDI3MTIsIDI3MTcsIDIyMDkyLCAKKyAgICAyMjA5OCwgMjIxMDQsIDcyMDksIDIyMTA5LCAyMjExNCwgMjIxMTksIDIyMTI1LCAyMjEzMCwgMTM5MDksIDIyMTM1LCAKKyAgICAyMjE0MCwgMjIxNDUsIDIyMTUwLCAyMjE1NiwgMjIxNjEsIDIyMTY2LCAyMjE3MiwgMjIxNzcsIDIyMTgxLCAyMjE4NiwgCisgICAgMjIxOTEsIDIyMTk2LCAyMjIwMSwgMjIyMDUsIDIyMjEwLCAyMjIxNCwgMjIyMTksIDIyMjI0LCAyMjIyOSwgMjIyMzQsIAorICAgIDIyMjM4LCAyMjI0MywgMjIyNDcsIDIyMjUyLCAyMjI1NywgMjIyNjIsIDIyMjY3LCAyODg2LCAyMjE4MiwgMjIyNzEsIAorICAgIDIyMjc5LCAyMjI4NiwgOTczMywgMjIyOTgsIDIyMzA2LCAyMjE4NywgMjIzMTMsIDIyMzE4LCAyMjMyNiwgMjIxOTIsIAorICAgIDIyMzMxLCAyMjMzNiwgMjIzNDQsIDIyMzQ5LCAyMjE5NywgMjIzNTQsIDIyMzU5LCAyMjM2MywgMjIzNjksIDIyMzc3LCAKKyAgICAyMjM4MCwgMjIzODcsIDIyMzkxLCAyMjM5NSwgMjI0MDEsIDIyNDA4LCAyMjQxMywgODk1OCwgMTcyNywgMTczMiwgMjI0MTcsIAorICAgIDIyNDIzLCAyMjQyOSwgMjI0MzQsIDIyNDM4LCAyMjQ0MiwgMjI0NDYsIDIyNDUwLCAyMjQ1NCwgMjI0NTgsIDIyNDYyLCAKKyAgICAyMjQ2NiwgMjI0NjksIDIyNDc1LCAyMjQ4MiwgMjI0OTAsIDIyNDk2LCAyMjUwMiwgMjI1MDcsIDIyNTEyLCAyMjUxNiwgCisgICAgMTM4MjksIDEzODM2LCAyMjUyMSwgMjI1MzMsIDIyNTM2LCAyMjU0MywgMTYzNjIsIDIyNTUwLCAyMjU1OCwgMjI1NjksIAorICAgIDIyNTc4LCAyMjU5MSwgMjI2MDEsIDIyNjE1LCAyMjYyNywgMjI2NDEsIDIyNjUzLCAyMjY2MywgMjI2NzUsIDIyNjgxLCAKKyAgICAyMjY5NiwgMjI3MjAsIDIyNzM4LCAyMjc1NywgMjI3NzAsIDIyNzg0LCAyMjgwMiwgMjI4MTgsIDIyODM1LCAyMjg1MywgCisgICAgMjI4NjQsIDIyODgzLCAyMjkwMCwgMjI5MjAsIDIyOTM4LCAyMjk1MCwgMjI5NjQsIDIyOTc4LCAyMjk5MCwgMjMwMDcsIAorICAgIDIzMDI2LCAyMzA0NCwgMjMwNTYsIDIzMDc0LCAyMzA5MywgMTQ1NTksIDIzMTA2LCAyMzEyNiwgMjMxMzgsIDEwNTIzLCAKKyAgICAyMzE1MCwgMjMxNTUsIDIzMTYwLCAyMzE2NSwgMjMxNzEsIDIzMTc2LCAyMzE4MCwgMjMxODcsIDIzOTgsIDIzMTkxLCAKKyAgICAyMzE5NywgMjMyMDEsIDIzMjA0LCAyMzIwOCwgMjMyMTYsIDIzMjIyLCAyMjIxNSwgMjMyMjYsIDIzMjM1LCAyMzI0NiwgCisgICAgMjMyNTIsIDIzMjU4LCAyMzI2NywgMjMyNzUsIDIzMjgyLCAyMzI4NywgMjMyOTEsIDIzMjk4LCAyMzMwNCwgMjMzMTMsIAorICAgIDIzMzIxLCAyMzMyOCwgMjMzMzgsIDIzMzQ3LCAyMzM1NywgMjMzNjIsIDIzMzcxLCAyMzM4MCwgMjMzOTEsIDIzNDAyLCAKKyAgICAzOTYzLCAyMzQxMiwgMjM0MTYsIDIzNDI2LCAyMzQzNCwgMjM0NDQsIDIzNDU1LCAyMzQ2MCwgMjM0NzAsIDIzNDc4LCAKKyAgICAyMzQ4NSwgMjM0OTEsIDIzNDk4LCAyMzUwMywgMjIyMjUsIDIzNTA3LCAyMzUxNiwgMjM1MjAsIDIzNTIzLCAyMzUyOCwgCisgICAgMjM1MzUsIDIzNTQ0LCAyMzU1MiwgMjM1NjAsIDIzNTcwLCAyMzU3OSwgMjM1ODUsIDIzNTkxLCAyMjIzMCwgMjIyMzUsIAorICAgIDIzNTk1LCAyMzYwNSwgMjM2MTUsIDIzNjI1LCAyMzYzMywgMjM2NDAsIDIzNjUwLCAyMzY1OCwgMjM2NjYsIDIzNjcyLCAKKyAgICAyMzY4MCwgOTMwLCAyMzY4OSwgMTQ3NTAsIDU0MiwgMjM3MDMsIDIzNzEyLCAyMzcyMCwgMjM3MzEsIDIzNzQyLCAyMzc1MiwgCisgICAgMjM3NjEsIDIzNzczLCAyMzc4MiwgMjM3OTEsIDIzNzk3LCAyMzgwNiwgMjM4MTUsIDIzODI1LCAyMzgzMywgMjM4NDEsIAorICAgIDkzNjAsIDIzODQ3LCAyMzg1MCwgMjM4NTQsIDIzODU5LCAyMzg2NCwgOTg0OCwgMjIyNDgsIDIyMjUzLCAyMzg3MiwgCisgICAgMjM4NzgsIDIzODg0LCAyMzg4OSwgMjM4OTQsIDIzODk4LCAyMzkwNiwgMjM5MTIsIDIzOTE4LCAyMzkyMiwgMzUyNSwgCisgICAgMjM5MzAsIDIzOTM1LCAyMzk0MCwgMjM5NDQsIDIzOTQ4LCA5OTI4LCAyMzk1NSwgMjM5NjMsIDIzOTc3LCAyMzk4NCwgCisgICAgMjM5OTAsIDk5MzcsIDk5NDMsIDIzOTk4LCAyNDAwNiwgMjQwMTMsIDI0MDE4LCAyNDAyMywgMjIyNTgsIDI0MDI5LCAKKyAgICAyNDA0MCwgMjQwNDQsIDI0MDQ5LCAyNjAxLCAyNDA1NCwgMjQwNjUsIDI0MDcxLCAyNDA3NiwgMjQwODAsIDI0MDg0LCAKKyAgICAyNDA4NywgMjQwOTQsIDI0MTAxLCAyNDEwOCwgMjQxMTQsIDI0MTE4LCAyMjI2MywgMjQxMjMsIDI0MTI3LCAyNDEzMSwgCisgICAgMTAzNywgMjQxMzYsIDI0MTQxLCAyNDE0NiwgMjQxNTEsIDI0MTU2LCAyNDE2MSwgMjQxNjYsIDI0MTcxLCAyNDE3NiwgCisgICAgMjQxODEsIDI0MTg2LCAyNDE5MSwgMjQxOTYsIDI0MjAxLCAyNDIwNywgMjQyMTIsIDI0MjE3LCAyNDIyMiwgMjQyMjcsIAorICAgIDI0MjMyLCAyNDIzNywgMjQyNDMsIDI0MjQ4LCAyNDI1MywgMjQyNTgsIDI0MjYzLCAyNDI2OCwgMjQyNzMsIDI0Mjc4LCAKKyAgICAyNDI4NCwgMjQyOTAsIDI0Mjk1LCAyNDMwMSwgMjQzMDYsIDI0MzExLCA1LCAyNDMxNywgMjQzMjEsIDI0MzI1LCAyNDMyOSwgCisgICAgMjQzMzQsIDI0MzM4LCAyNDM0MiwgMjQzNDYsIDI0MzUwLCAyNDM1NSwgMjQzNTksIDI0MzY0LCAyNDM2OCwgMjQzNzEsIAorICAgIDI0Mzc1LCAyNDM4MCwgMjQzODQsIDI0Mzg5LCAyNDM5MywgMjQzOTcsIDI0NDAxLCAyNDQwNiwgMjQ0MTAsIDI0NDE0LCAKKyAgICAyNDQyNCwgMjQ0MjksIDI0NDMzLCAyNDQzNywgMjQ0NDIsIDI0NDQ3LCAyNDQ1NiwgMjQ0NjEsIDI0NDY2LCAyNDQ3MCwgCisgICAgMjQ0NzQsIDI0NDg3LCAyNDQ5OSwgMjQ1MDgsIDI0NTE3LCAyNDUyMywgMjQ1MjgsIDI0NTMyLCAyNDUzNiwgMjQ1NDYsIAorICAgIDI0NTU1LCAyNDU2MywgMjQ1NjksIDI0NTc0LCAyNDU3OCwgMjQ1ODUsIDI0NTk1LCAyNDYwNCwgMjQ2MTIsIDI0NjIwLCAKKyAgICAyNDYyNywgMjQ2MzUsIDI0NjQ0LCAyNDY1MywgMjQ2NjEsIDI0NjY2LCAyNDY3MCwgMjQ2NzQsIDI0Njc3LCAyNDY3OSwgCisgICAgMjQ2ODMsIDI0Njg3LCAyNDY5MiwgMjQ2OTcsIDI0NzAxLCAyNDcwNSwgMjQ3MDgsIDI0NzEyLCAyNDcxNSwgMjQ3MTksIAorICAgIDI0NzIyLCAyNDcyNSwgMjQ3MjksIDI0NzM1LCAyNDczOSwgMjQ3NDMsIDI0NzQ3LCAyNDc1MiwgMjQ3NTcsIDI0NzYyLCAKKyAgICAyNDc2NiwgMjQ3NjksIDI0Nzc0LCAyNDc4MCwgMjQ3ODUsIDI0NzkxLCAyNDc5NiwgMjQ4MDAsIDI0ODA0LCAyNDgwOCwgCisgICAgMjQ4MTMsIDI0ODE3LCAyNDgyMiwgMjQ4MjYsIDI0ODMwLCAyNDgzNywgMjQ4NDEsIDI0ODQ0LCAyNDg0OCwgMjQ4NTQsIAorICAgIDI0ODYwLCAyNDg2NCwgMjQ4NjgsIDI0ODczLCAyNDg4MCwgMjQ4ODYsIDI0ODkwLCAyNDg5OSwgMjQ5MDMsIDI0OTA3LCAKKyAgICAyNDkxMCwgMjQ5MTYsIDI0OTIxLCAyNDkyNywgMTQ4OSwgMTc5MSwgMjQ5MzIsIDI0OTM3LCAyNDk0MiwgMjQ5NDcsIAorICAgIDI0OTUyLCAyNDk1NywgMjQ5NjIsIDIxNDgsIDIxOTQsIDI0OTY3LCAyNDk3MCwgMjQ5NzQsIDI0OTc4LCAyNDk4MywgCisgICAgMjQ5ODcsIDI0OTkxLCAyNDk5NCwgMjQ5OTksIDI1MDA0LCAyNTAwOCwgMjUwMTEsIDI1MDE2LCAyNTAyMCwgMjUwMjUsIAorICAgIDI1MDI5LCAxNDc2MiwgMjUwMzQsIDI1MDM3LCAyNTA0MCwgMjUwNDQsIDI1MDQ5LCAyNTA1MywgMjUwNjYsIDI1MDcwLCAKKyAgICAyNTA3MywgMjUwODEsIDI1MDkwLCAyNTA5NywgMjUxMDIsIDI1MTA4LCAyNTExNCwgMjUxMjIsIDI1MTI5LCAyNTEzNiwgCisgICAgMjUxNDAsIDI1MTQ0LCAyNTE0OCwgMjUxNTMsIDI1MTU4LCAyNTE2MiwgMjUxNzAsIDI1MTc1LCAyNTE4NywgMjUxOTgsIAorICAgIDI1MjAzLCAyNTIwNywgMjUyMTEsIDI1MjE3LCAyNTIyMiwgMjUyMjcsIDI1MjMxLCAyNTIzNSwgMjUyMzgsIDI1MjQ0LCAKKyAgICA3OTE1LCAyMzE2LCAyNTI0OCwgMjUyNTMsIDI1MjY5LCA5NDc1LCAyNTI4OSwgMjUyOTgsIDI1MzE0LCAyNTMxOCwgMjUzMjEsIAorICAgIDI1MzI3LCAyNTMzNywgMjUzNDMsIDI1MzUyLCAyNTM2NywgMjUzNzksIDI1MzkwLCAyNTM5OCwgMjU0MDcsIDI1NDEzLCAKKyAgICAyNTQyMiwgMjU0MzIsIDI1NDQzLCAyNTQ1NCwgMjU0NjMsIDI1NDcwLCAyNTQ3OSwgMjU0ODcsIDI1NDk0LCAyNTUwMiwgCisgICAgMjU1MDksIDI1NTE2LCAyNTUyOSwgMjU1MzYsIDI1NTQyLCAyNTU0NywgMjU1NTYsIDI1NTYyLCAyNTU2NywgMjU1NzUsIAorICAgIDI1NTgyLCAyMzQzNiwgMjU1OTQsIDI1NjA2LCAyNTYyMCwgMjU2MjgsIDI1NjM1LCAyNTY0NywgMjU2NTYsIDI1NjY1LCAKKyAgICAyNTY3MywgMjU2ODEsIDI1Njg5LCAyNTY5NiwgMjU3MDUsIDI1NzEzLCAyNTcyMywgMjU3MzIsIDI1NzQyLCAyNTc1MSwgCisgICAgMjU3NjAsIDI1NzY4LCAyNTc3MywgMjU3NzcsIDI1NzgwLCAyNTc4NCwgMjU3ODgsIDI1NzkyLCAyNTc5NiwgMjU4MDAsIAorICAgIDI1ODA2LCAyNTgxMiwgMjU4MjAsIDE0ODA3LCAyNTgyNywgMjU4MzIsIDI1ODM5LCAyNTg0NSwgMjU4NTIsIDE0ODE1LCAKKyAgICAyNTg1OSwgMjU4NjIsIDI1ODc0LCAyNTg4MiwgMjU4ODgsIDI1ODkzLCAyNTg5NywgOTg3OCwgMjU5MDgsIDI1OTE4LCAKKyAgICAyNTkyNywgMjU5MzQsIDI1OTM4LCAxNDgyMCwgMjU5NDEsIDI1OTQ4LCAyNTk1MiwgMjU5NTgsIDI1OTYxLCAyNTk2OCwgCisgICAgMjU5NzQsIDI1OTgxLCAyNTk4NywgMjU5OTEsIDI1OTk2LCAyNjAwMCwgMjYwMDksIDI2MDE2LCAyNjAyMiwgNzk1NiwgCisgICAgMjYwMjksIDI2MDM3LCAyNjA0NCwgMjYwNTAsIDI2MDU1LCAyNjA2MSwgMjYwNjcsIDI2MDc1LCAyNjA3OSwgMjYwODIsIAorICAgIDI2MDg0LCAyNTc4NSwgMjYwOTMsIDI2MDk5LCAyNjEwOSwgMjYxMTQsIDI2MTIxLCAyNjEyNywgMjYxMzIsIDI2MTM3LCAKKyAgICAyNjE0MiwgMjYxNDYsIDI2MTUxLCAyNjE1OCwgMjYxNjcsIDI2MTcxLCAyNjE3OCwgMjYxODcsIDI2MTkzLCAyNjE5OCwgCisgICAgMjYyMDQsIDI2MjA5LCAyNjIxNiwgMjYyMjcsIDI2MjMyLCAyNjIzNiwgMjYyNDYsIDI2MjUyLCAyNjI1NiwgMjYyNjEsIAorICAgIDI2MjcxLCAyNjI4MCwgMjYyODQsIDI2MjkxLCAyNjI5OSwgMjYzMDYsIDI2MzEyLCAyNjMxNywgMjYzMjUsIDI2MzMyLCAKKyAgICAyNjM0NCwgMjYzNTMsIDI2MzU3LCAxMzA1MywgMjYzNjUsIDI2Mzc1LCAyNjM3OSwgMjUwNzcsIDI2MzkwLCAyNjM5NSwgCisgICAgMjYzOTksIDI2NDA2LCAyNjQxMywgMjE5NzQsIDI1NzEwLCAyNjQxOCwgMjY0MjIsIDI2NDI1LCAyMjg3MCwgMjY0MzAsIAorICAgIDI2NDQ0LCAyNjQ2MCwgMjY0NzgsIDI2NDk3LCAyNjUxNCwgMjY1MzIsIDIyODg5LCAyNjU0OSwgMjY1NjksIDIyOTA2LCAKKyAgICAyNjU4MSwgMjY1OTMsIDE1NzQ1LCAyNjYwNSwgMjI5MjYsIDI2NjE5LCAyNjYzMSwgMTA1MzYsIDI2NjQ1LCAyNjY1MCwgCisgICAgMjY2NTUsIDI2NjYwLCAyNjY2NiwgMjY2NzIsIDI2Njc4LCAyNjY4MiwgMjY2ODksIDI2Njk0LCAyNjcwNCwgMjY3MTAsIAorICAgIDEwMTgzLCAyNjcxNiwgMjY3MTgsIDI2NzIzLCAyNjczMSwgMjY3MzUsIDI2MTU0LCAyNjc0MSwgMjY3NDgsIDExNTI0LCAKKyAgICAxMTUzNCwgMjY3NTUsIDI2NzY1LCAyNjc3MCwgMjY3NzQsIDI2Nzc3LCAyNjc4MywgMjY3OTEsIDI2ODAzLCAyNjgxMywgCisgICAgMjY4MjksIDI2ODQyLCAyNjg1NiwgMTU3NjMsIDI2ODcwLCAyNjg3NywgMjY4ODEsIDI2ODg0LCAyNjg4OSwgMjY4OTMsIAorICAgIDI2OTAwLCAyNjkwNywgMjY5MTcsIDI2OTIyLCAyNjkyNywgMjY5MzIsIDI2OTQwLCAyNjk0OCwgMjY5NTcsIDI2OTYyLCAKKyAgICA5NTcyLCAyNjk2NiwgMjY5NjksIDI2OTcyLCAyNjk3NywgMjY5ODQsIDI2OTg5LCAyNzAwNSwgMjcwMTMsIDI3MDIxLCAKKyAgICA5NDIzLCAyNzAyOSwgMjcwMzQsIDI3MDM4LCAyNzA0NCwgMjcwNTAsIDI3MDUzLCAyNzA1OSwgMjcwNzEsIDI3MDc5LCAKKyAgICAyNzA4NiwgMjcwOTIsIDI3MDk5LCAyNzExMCwgMjcxMjQsIDI3MTM3LCAyNzE0NiwgMjcxNTUsIDI3MTY3LCAyNzE3OCwgCisgICAgMjcxODgsIDI3MTk3LCAyNzIwNiwgMjcyMTQsIDI3MjI1LCA3OTM4LCAyNzIzMiwgMjcyMzgsIDI3MjQzLCAyNzI0OSwgCisgICAgMjcyNTYsIDI3MjY2LCAyNzI3NiwgMjcyODUsIDI3MjkxLCAyNzI5OCwgMjczMDMsIDI3MzEwLCAyNzMxOCwgMjczMjYsIAorICAgIDI3MzM4LCA2MjQ2LCAyNzM0NSwgMjczNTQsIDI3MzYyLCAyNzM2OCwgMjczNzQsIDI3Mzc5LCAyNzM4MywgMjczODYsIAorICAgIDI3MzkyLCAyNzM5OSwgMjc0MDQsIDI3NDA5LCAyNzQxMywgMjc0MjUsIDI3NDM2LCAyNzQ0NSwgMjc0NTMsIDE0OTQ3LCAKKyAgICAyNzQ1OCwgMjc0NjQsIDI3NDcwLCAxMTUxNywgODYzNSwgMjc0NzUsIDI3NDc5LCAyNzQ4MywgMjc0ODYsIDI3NDg5LCAKKyAgICAyNzQ5NSwgMjc1MDMsIDI3NTExLCAyNzUxNSwgMjc1MTksIDI3NTI0LCAyNzUyNywgMjc1MzYsIDI3NTQwLCAyNzU0OCwgCisgICAgMjc1NTksIDI3NTYzLCAyNzU2OSwgMjc1NzUsIDI3NTc5LCAyNzU4NSwgMjc1OTMsIDI3NjE1LCAyNzYzOSwgMjc2NDYsIAorICAgIDI3NjUzLCAyNzY1OSwgMjc2NjcsIDI3NjczLCAyNzY3OCwgMjc2ODksIDI3NzA3LCAyNzcxNCwgMjc3MjIsIDI3NzI2LCAKKyAgICAyNzczNSwgMjc3NDgsIDI3NzU2LCAyNzc2OCwgMjc3NzksIDI3Nzg5LCAyNzgwMywgMjc4MTIsIDI3ODIwLCAyNzgzMiwgCisgICAgOTQ5MiwgMjc4NDMsIDI3ODU0LCAyNzg2NiwgMjc4NzYsIDI3ODg1LCAyNzg5MCwgMjc4OTQsIDI3OTAyLCAyNzkxMiwgCisgICAgMjc5MTcsIDI3OTIxLCAyNzkyNCwgMjc5MjcsIDI3OTM1LCAyNzk0MywgMjc5NTIsIDI3OTYyLCAyNzk3MSwgMjc5NzcsIAorICAgIDI3OTkxLCAyNjYzLCAyODAxMywgMjgwMjQsIDI4MDMzLCAyODA0MywgMjgwNTUsIDI4MDY0LCAyODA3MywgMjgwODMsIAorICAgIDI4MDkxLCAyODA5OSwgMjgxMDgsIDI4MTEzLCAyODEyNCwgMjgxMjksIDI4MTQwLCAyODE0NCwgMjgxNTQsIDI4MTYzLCAKKyAgICAyODE3MSwgMjgxODEsIDI4MTkxLCAyODE5OSwgMjgyMDgsIDI4MjE1LCAyODIyMywgMjgyMzAsIDI4MjM5LCAyODI0MywgCisgICAgMjgyNTEsIDI4MjU4LCAyODI2NiwgMjgyNzMsIDI4Mjg0LCAyODI5OSwgMjgzMDYsIDI4MzEyLCAyODMyMiwgMjgzMzEsIAorICAgIDI4MzM3LCAyODM0MSwgMjgzNDgsIDI4MzUyLCAxNDAzMSwgMjgzNTgsIDI4MzYyLCAyODM2NywgMjgzNzQsIDI4Mzc4LCAKKyAgICAyODM4MiwgMjgzOTAsIDI4Mzk4LCAyODQwNCwgMjg0MTMsIDI4NDIwLCAyODQyNSwgMjg0MzAsIDI4NDQwLCAyMzUwNSwgCisgICAgMjg0NDQsIDI4NDQ3LCAyODQ1MiwgMjg0NTcsIDI4NDYyLCAyODQ2NywgMjg0NzIsIDI4NDc3LCAyODQ4MiwgMjg0ODcsIAorICAgIDI4NDkzLCAyODQ5OCwgMjg1MDMsIDI4NTA5LCAxMjE4LCA3MDQsIDI4NTE0LCAyODUyMywgMjM2NCwgMjg1MzAsIDI4NTM1LCAKKyAgICAyODUzOSwgMjg1NDUsIDEyNjcsIDU0NiwgMzE4LCAyODU1MCwgMjg1NTksIDI4NTY3LCAyODU3NiwgMjg1ODQsIDI4NTk1LCAKKyAgICAyODYwNCwgMjg2MTIsIDI4NjE2LCAyODYxOSwgMjg2MjcsIDI4NjM1LCAyODY0MCwgMTQ3NzUsIDI4NjQ2LCAyODY1MiwgCisgICAgMjg2NTgsIDU4NzIsIDI4NjYzLCAyODY2NywgMjg2NzMsIDI4Njc3LCAyODY4NCwgMTQ1NSwgMjg2OTAsIDI4Njk3LCA5NTc5LCAKKyAgICAyODcwMSwgMjg3MTEsIDI4NzE5LCAyODcyNSwgMjg3MzQsIDI4NzQyLCAyODc0OCwgMjg3NTYsIDI4NzYzLCAxMTExMCwgCisgICAgMjg3NjksIDI4Nzc2LCAyODc4MSwgMjg3ODgsIDE0OTYsIDIxNDcsIDI4Nzk0LCAyODgwMCwgMjg4MDcsIDI4ODE4LCAKKyAgICAyODgyOSwgMjg4MzcsIDI4ODQ0LCAyODg1NCwgMjg4NjMsIDI4ODcxLCAyODg4MCwgMjg4ODcsIDI4ODk0LCAyODkwNywgCisgICAgMjg5MTgsIDEyNzIsIDI4OTM3LCAyODk0MiwgMjg5NTAsIDM1NzUsIDI4OTU0LCAyODk1OSwgMjg5NjMsIDE0NTksIDI0NzA2LCAKKyAgICAyODk3MywgMjg5NzcsIDI4OTgyLCAyODk4NiwgMzQ5MywgMjg5OTIsIDI5MDAwLCAyOTAwNywgMjkwMTgsIDI5MDI2LCAKKyAgICAyOTAzNCwgMzU3NiwgMjc5LCAyOTAzOSwgMjkwNDcsIDI5MDU1LCAyOTA2MiwgMjkwNjgsIDI5MDczLCAyMjE2LCAyOTA4MCwgCisgICAgMjkwODYsIDI1OTkyLCAyNjIyMiwgMjkwOTIsIDEwNiwgMjkwOTYsIDI5MTAwLCAyOTEwNiwgNjE1LCA5MzI4LCAyOTExMSwgCisgICAgMjkxMTgsIDI5MTI0LCAyMzI3LCAyOTEyOCwgMjkxMzIsIDE1MTg3LCAyOTEzNSwgMjkxNDAsIDI5MTQ3LCAyOTE1MywgCisgICAgMjkxNTgsIDI5MTY2LCAyOTE3MywgMjkxNzksIDIyMzUxLCAyOTE4MywgMjkxODcsIDM2NDYsIDE2NjI1LCAyOTE5MSwgCisgICAgMjkxOTYsIDI5MTk5LCAyOTIwNywgMjkyMTUsIDI5MjIwLCAyOTIyMywgMjkyMzAsIDI5MjQwLCAyOTI1MiwgMjkyNTcsIAorICAgIDI5MjYxLCAyOTI2OSwgMjkyNzYsIDI5MjgyLCAyOTI4OSwgMjkyOTYsIDI5Mjk5LCAyOTMwMywgMjkzMDcsIDE0NjMsIAorICAgIDI5MzE3LCAyOTMxOSwgMjkzMjQsIDI5MzMwLCAyOTMzNiwgMjkzNDEsIDI5MzQ2LCAyOTM1MSwgMjkzNTYsIDI5MzYxLCAKKyAgICAyOTM2NiwgMjkzNzEsIDI5Mzc2LCAyOTM4MSwgMjkzODYsIDI5MzkxLCAyOTM5NiwgMjk0MDEsIDI5NDA2LCAyOTQxMiwgCisgICAgMjk0MTgsIDI5NDI0LCAyOTQzMCwgMjk0MzUsIDI5NDQwLCAyOTQ0NSwgMjk0NTEsIDI5NDU2LCAyOTQ2MSwgMjk0NjYsIAorICAgIDI5NDcyLCAyOTQ3NywgMjk0ODMsIDI5NDg4LCAyOTQ5MywgMjk0OTgsIDI5NTAzLCAyOTUwOSwgMjk1MTQsIDI5NTIwLCAKKyAgICAyOTUyNSwgMjk1MzAsIDI5NTM1LCAyOTU0MCwgMjk1NDYsIDI5NTUxLCAyOTU1NywgMjk1NjIsIDI5NTY3LCAyOTU3MiwgCisgICAgMjk1NzcsIDI5NTgyLCAyOTU4NywgMjk1OTIsIDI5NTk3LCAyOTYwMiwgMjk2MDgsIDI5NjE0LCAyOTYyMCwgMjk2MjUsIAorICAgIDI5NjMwLCAyOTYzNSwgMjk2NDAsIDI5NjQ2LCAyOTY1MiwgMjk2NTgsIDI5NjY0LCAyOTY3MCwgMjk2NzYsIDI5NjgxLCAKKyAgICAyOTY4NywgMjk2OTIsIDI5Njk3LCAyOTcwMiwgMjk3MDcsIDI5NzEzLCAyNDQzLCAyOTcxOCwgMjQ1MCwgMjQ1NywgMjc1NCwgCisgICAgMjk3MjMsIDI0NjMsIDI0NzMsIDI5NzI5LCAyOTczMywgMjk3MzgsIDI5NzQzLCAyOTc0OSwgMjk3NTQsIDI5NzU5LCAKKyAgICAyOTc2MywgMjk3NjgsIDI5Nzc0LCAyOTc3OSwgMjk3ODQsIDI5Nzg5LCAyOTc5NSwgMjk4MDAsIDI5ODA0LCAyOTgwOCwgCisgICAgMjk4MTMsIDI5ODE4LCAyOTgyMywgMjk4MjgsIDI5ODMzLCAyOTgzOSwgMjk4NDUsIDI5ODUwLCAyOTg1NCwgMjk4NTksIAorICAgIDI5ODY1LCAyOTg2OSwgMjk4NzQsIDI5ODc5LCAyOTg4NCwgMjk4ODksIDI5ODkzLCAyOTg5NiwgMjk5MDEsIDI5OTA2LCAKKyAgICAyOTkxMSwgMjk5MTYsIDI5OTIxLCAyOTkyNywgMjk5MzMsIDI5OTM4LCAyOTk0MywgMjk5NDcsIDI5OTUyLCAyOTk1NywgCisgICAgMjk5NjIsIDI5OTY3LCAyOTk3MiwgMjk5NzYsIDI5OTgxLCAyOTk4NiwgMjk5OTEsIDI5OTk1LCAyOTk5OSwgMzAwMDMsIAorICAgIDMwMDA4LCAzMDAxNiwgMzAwMjEsIDMwMDI3LCAzMDAzMywgMzAwMzksIDMwMDQ0LCAzMDA0OCwgMzAwNTEsIDMwMDU2LCAKKyAgICAzMDA2MSwgMzAwNjUsIDMwMDcwLCAzMDA3NCwgMzAwNzksIDMwMDgzLCAzMDA4NiwgMzAwOTEsIDE3MzAyLCAzMDA5NiwgCisgICAgMzAxMDEsIDMwMTA2LCAzMDExNCwgMjEyODAsIDI4Njk0LCA5MDI2LCAzMDExOSwgMzAxMjQsIDMwMTI4LCAzMDEzMywgCisgICAgMzAxMzcsIDMwMTQxLCAzMDE0NiwgMzAxNTAsIDMwMTUzLCAzMDE1NiwgMzAxNjAsIDMwMTY1LCAzMDE2OSwgMzAxNzcsIAorICAgIDMwMTgxLCAzMDE4NCwgMzAxODksIDMwMTkzLCAzMDE5NywgMzAyMDIsIDMwMjA3LCAzMDIxMSwgMzAyMTcsIDMwMjIyLCAKKyAgICAzMDIyNywgMzAyMzQsIDMwMjQxLCAzMDI0NSwgMzAyNDgsIDMwMjU0LCAzMDI2MywgMzAyNzAsIDMwMjc4LCAzMDI4NSwgCisgICAgMzAyODksIDMwMjk0LCAzMDI5OCwgMzAzMDIsIDMwMzA4LCAzMDMxNCwgMzAzMTgsIDMwMzI0LCAzMDMyOSwgMzAzMzQsIAorICAgIDMwMzM4LCAzMDM0NSwgMzAzNTEsIDMwMzU3LCAzMDM2MywgMzAzNjksIDMwMzc2LCAzMDM4MiwgMzAzODgsIDMwMzk0LCAKKyAgICAzMDQwMCwgMzA0MDYsIDMwNDEyLCAzMDQxOCwgMzA0MjUsIDMwNDMxLCAzMDQzOCwgMzA0NDQsIDMwNDUwLCAzMDQ1NiwgCisgICAgMzA0NjIsIDMwNDY4LCAzMDQ3NCwgMzA0ODAsIDMwNDg2LCAzMDQ5MiwgMTE0MTgsIDMwNDk4LCAzMDUwMywgMzA1MDgsIAorICAgIDMwNTExLCAzMDUxOSwgMzA1MjQsIDMwNTMzLCAzMDUzOSwgMzA1NDQsIDMwNTQ5LCAzMDU1NCwgMzA1NTgsIDMwNTYzLCAKKyAgICAzMDU2OCwgMzA1NzMsIDMwNTc4LCAzMDU4MywgMzA1OTAsIDMwNTk3LCAzMDYwMywgMzA2MDksIDMwNjE0LCAxNjMwMywgCisgICAgMzA2MjEsIDMwNjI3LCAzMDYzNCwgMzA2NDAsIDMwNjQ2LCAzMDY1MSwgMzA2NTksIDMwNjY0LCAxNjA4MiwgMzA2NjgsIAorICAgIDMwNjczLCAzMDY3OCwgMzA2ODQsIDMwNjg5LCAzMDY5NCwgMzA2OTgsIDMwNzAzLCAzMDcwOCwgMzA3MTQsIDMwNzE5LCAKKyAgICAzMDcyNCwgMzA3MjgsIDMwNzMzLCAzMDczOCwgMzA3NDIsIDMwNzQ3LCAzMDc1MiwgMzA3NTcsIDMwNzYxLCAzMDc2NiwgCisgICAgMzA3NzEsIDMwNzc2LCAzMDc4MCwgMzA3ODQsIDE1MjkzLCAzMDc4OCwgMzA3OTcsIDMwODAzLCAzMDgwOSwgMzA4MTgsIAorICAgIDMwODI2LCAzMDgzNSwgMzA4NDMsIDMwODQ4LCAzMDg1MiwgMzA4NTksIDMwODY1LCAzMDg2OSwgMzA4NzIsIDMwODc3LCAKKyAgICAzMDg4NiwgMzA4OTQsIDMwODk5LCAxNDk1LCAzMDkwNSwgMzA5MDgsIDMwOTEyLCAyMjQyNCwgMjI0MzAsIDMwOTE4LCAKKyAgICAzMDkyMiwgMzA5MzMsIDMwOTQ0LCAzMDk1NSwgMzA5NjcsIDMwOTc0LCAzMDk4MSwgMzA5ODYsIDMwOTkwLCA1OTA5LCA3NTUsIAorICAgIDIxMjc5LCAzMDk5OCwgMzEwMDMsIDMxMDA3LCAzMTAxMiwgMzEwMTYsIDMxMDIyLCAzMTAyNywgMzEwMzMsIDMxMDM4LCAKKyAgICAzMTA0NCwgMzEwNDksIDMxMDU1LCAzMTA2MCwgMzEwNjYsIDMxMDcyLCAzMTA3OCwgMzEwODMsIDMxMDM5LCAzMTA0NSwgCisgICAgMzEwODcsIDMxMDkyLCAzMTA5OCwgMzExMDMsIDMxMTA5LCAzMTExNCwgMzExMjAsIDMxMTI1LCAzMTA1MCwgMTA0MjEsIAorICAgIDMxMTI5LCAzMTA2MSwgMzEwNjcsIDMxMDczLCAyODMxLCAzNDIzLCAzMTEzNSwgMzExMzgsIDMxMTQ0LCAzMTE1MCwgCisgICAgMzExNTYsIDMxMTYzLCAzMTE2OSwgMzExNzUsIDMxMTgxLCAzMTE4NywgMzExOTMsIDMxMTk5LCAzMTIwNSwgMzEyMTEsIAorICAgIDMxMjE3LCAzMTIyMywgMzEyMjksIDMxMjM1LCAzMTI0MiwgMzEyNDgsIDMxMjU0LCAzMTI2MCwgMzEyNjYsIDMxMjcyLCAKKyAgICAzMTI3NSwgMzEyODAsIDMxMjgzLCAzMTI5MCwgMzEyOTgsIDMxMzAzLCAzMTMwOCwgMzEzMTQsIDMxMzE5LCAzMTMyNCwgCisgICAgMzEzMjgsIDMxMzMzLCAzMTMzOSwgMzEzNDQsIDMxMzUwLCAzMTM1NSwgMzEzNjEsIDMxMzY2LCAzMTM3MiwgMzEzNzgsIAorICAgIDMxMzgyLCAzMTM4NywgMzEzOTIsIDMxMzk3LCAzMTQwMiwgMzE0MDYsIDMxNDExLCAzMTQxNiwgMzE0MjEsIDMxNDI3LCAKKyAgICAzMTQzMywgMzE0MzksIDMxNDQ1LCAzMTQ1MCwgMzE0NTQsIDMxNDU3LCAzMTQ2MywgMzE0NjksIDMxNDc4LCAzMTQ4NiwgCisgICAgMzE0OTMsIDMxNDk4LCAzMTUwMiwgMzE1MDYsIDMxNTExLCAxNTE0NiwgMzE1MTYsIDMxNTI0LCAzMTUzMCwgMzY4MywgCisgICAgMTM3NywgMzE1MzUsIDMxNTM5LCA4MDA1LCAzMTU0NSwgMzE1NTEsIDMxNTU4LCA4MDE0LCAzMTU2MiwgMzE1NjgsIDMxNTc1LCAKKyAgICAzMTU4MSwgMzE1OTAsIDMxNTk4LCAzMTYxMCwgMzE2MTQsIDMxNjIxLCAzMTYyNywgMzE2MzEsIDMxNjM0LCAzMTY0MywgCisgICAgMzE2NTEsIDMxMDQwLCAzMTY1NiwgMzE2NjYsIDMxNjc2LCAzMTY4NiwgMzE2OTIsIDMxNjk3LCAzMTcwNywgMzE3MTIsIAorICAgIDMxNzI1LCAzMTczOSwgMzE3NTAsIDMxNzYyLCAzMTc3NCwgMzE3ODgsIDMxODAxLCAzMTgxMywgMzE4MjUsIDE0NjAwLCAKKyAgICAzMTgzOSwgMzE4NDQsIDMxODQ5LCAzMTg1MywgMzE4NTcsIDMxODYxLCAxNzgwLCAyNzE3NiwgMzE4NjUsIDMxODcwLCAKKyAgICAzMTA4OCwgMzE4NzUsIDMxODc4LCAzMTg4MywgMzE4ODgsIDMxODkzLCAzMTg5OSwgMzE5MDUsIDEwMDk4LCAzMTkxMCwgCisgICAgMzE5MTcsIDE1Njk3LCAzMTkyMywgMzE5MjgsIDMxOTMzLCAzMTkzNywgMzE5NDIsIDMxOTQ3LCAzMTA5MywgMzE5NTIsIAorICAgIDMxOTU3LCAzMTk2MiwgMzE5NjgsIDMxMDk5LCAzMTk3MywgMzE5NzYsIDMxOTgzLCAzMTk5MSwgMzE5OTcsIDMyMDAzLCAKKyAgICAzMjAwOSwgMzIwMjAsIDMyMDI1LCAzMjAzMiwgMzIwMzksIDMyMDQ2LCAzMjA1NCwgMzIwNjMsIDMyMDcyLCAzMjA3OCwgCisgICAgMzIwODQsIDMyMDkyLCAzMTEwNCwgMzIwOTcsIDMyMTAzLCAzMjEwOSwgMzExMTAsIDMyMTE0LCAzMjExOSwgMzIxMjcsIAorICAgIDMyMTM1LCAzMjE0MSwgMzIxNDgsIDMyMTU0LCAzMjE2MSwgMzIxNjgsIDMyMTc0LCAzMjE4MiwgMzIxOTIsIDMyMTk5LCAKKyAgICAzMjIwNCwgMzIyMTAsIDMyMjE1LCAzMjIyMCwgMzIyMjcsIDMyMjM2LCAzMjI0NCwgMzIyNDksIDMyMjU1LCAzMjI2MiwgCisgICAgMzIyNzAsIDMyMjc2LCAzMjI4MSwgMzIyODcsIDMyMjk2LCAyNzk1NywgMzIzMDMsIDMyMzA3LCAzMjMxMiwgMzIzMjEsIAorICAgIDMyMzI2LCAzMjMzMSwgMzIzMzYsIDEyNDA1LCAzMjM0NCwgMzIzNDksIDMyMzU0LCAzMjM1OSwgMzIzNjMsIDMyMzY4LCAKKyAgICAzMjM3MywgMzIzODAsIDMyMzg1LCAzMjM5MCwgMzIzOTUsIDMxMTE1LCAyMTIxNiwgMzI0MDEsIDI1MTksIDI0NCwgMzI0MDQsIAorICAgIDMyNDA3LCAzMjQxMSwgMzI0MTUsIDMyNDI1LCAzMjQzMywgMzI0MzcsIDMyNDQ0LCAzMjQ1MSwgMzI0NTUsIDMyNDU4LCAKKyAgICAzMjQ2NCwgMzI0NzIsIDMyNDgwLCAzMjQ4NCwgMzI0ODgsIDMyNDkxLCAzMjQ5OCwgMzI1MDIsIDMyNTA2LCAzMjUxMywgCisgICAgMzI1MjEsIDMxMDUxLCAzMjUyOCwgMzI1MzYsIDEwMTU4LCA2NjQsIDMwOCwgMzI1NDgsIDMyNTUzLCAzMjU1OCwgMzI1NjQsIAorICAgIDMyNTY5LCAzMjU3NCwgMzcwNCwgMzI1NzksIDMyNTgyLCAzMjU4NywgMzI1OTIsIDMyNTk3LCAzMjYwMiwgMzI2MDcsIAorICAgIDMyNjE0LCAyMjUyOSwgMzI2MTksIDMyNjI0LCAzMjYyOSwgMzI2MzQsIDMyNjM5LCAzMjY0NSwgMzI2NTAsIDMyNjU2LCAKKyAgICAzMTI4NiwgMzI2NjIsIDMyNjY3LCAzMjY3MywgMzI2NzksIDMyNjg5LCAzMjY5NCwgMzI2OTksIDMyNzAzLCAzMjcwOCwgCisgICAgMzI3MTMsIDMyNzE4LCAzMjcyMywgMzI3MzYsIDMyNzQxLCAyMjMwMiwgMTY3MDUsIDM3MTAsIDMyNzQ1LCAzMjc1MCwgCisgICAgMzI3NTUsIDMyNzYxLCAzMjc2NiwgMzI3NzEsIDMyNzc1LCAzMjc4MCwgMzI3ODUsIDMyNzkxLCAzMjc5NiwgMzI4MDEsIAorICAgIDEzODIsIDMyODA1LCAzMjgxMCwgMzI4MTUsIDMyODIwLCAzMjgyNCwgMzI4MjksIDMyODM0LCAzMjgzOSwgMzI4NDUsIAorICAgIDMyODUxLCAzMjg1NiwgMzI4NjAsIDMyODY0LCAzMjg2OSwgMzI4NzQsIDMyODc5LCAzMjg4MywgMzI4OTEsIDMyODk1LCAKKyAgICAzMjkwMSwgMzI5MDUsIDMyOTEyLCAxNjQ5OCwgMzEwNjIsIDMyOTE4LCAzMjkyNSwgMzI5MzMsIDMyOTQwLCAzMjk0NiwgCisgICAgMzI5NTksIDMyOTcxLCAzMjk3NywgMzI5ODEsIDI3NzMsIDMyOTg1LCAzMjk4OSwgMzI0OTMsIDMyOTk4LCAzMzAwOSwgCisgICAgMzMwMTQsIDMzMDE5LCAzMzAyNCwgMzMwMjgsIDMzMDMzLCAyMjQzNSwgMzMwMzcsIDMzMDQxLCAzMzA0NiwgMzEwNjgsIAorICAgIDIxMzAwLCAzMzA1MCwgMzMwNTUsIDMzMDYxLCAzMzA2NiwgMzMwNzAsIDMzMDc0LCAzMzA3NywgMzMwODEsIDMzMDg3LCAKKyAgICAzMzA5OCwgMzMxMTAsIDMxMDc0LCAzMzExNSwgMzMxMTgsIDMzMTIyLCAzNDcsIDMzMTI3LCAzMzEzMiwgMzMxMzcsIAorICAgIDMzMTQyLCAzMzE0NywgMzMxNTIsIDMzMTU4LCAzMzE2MywgMzMxNjgsIDMzMTc0LCAzMzE3OSwgMzMxODUsIDMzMTkwLCAKKyAgICAzMzE5NiwgMzMyMDEsIDMzMjA2LCAzMzIxMSwgMzMyMTYsIDMzMjIxLCAzMzIyNiwgMzMyMzEsIDMzMjM2LCAzMzI0MiwgCisgICAgMzMyNDcsIDMzMjUyLCAzMzI1NywgMzMyNjIsIDMzMjY3LCAzMzI3MiwgMzMyNzcsIDMzMjgzLCAzMzI4OSwgMzMyOTQsIAorICAgIDMzMjk5LCAzMzMwNCwgMzMzMDksIDMzMzE0LCAzMzMxOSwgMzMzMjQsIDMzMzI5LCAzMzMzNCwgMzMzMzksIDMzMzQ0LCAKKyAgICAzMzM0OSwgMzMzNTQsIDMzMzU5LCAzMzM2NCwgMzMzNjksIDMzMzc0LCAzMzM3OSwgMzMzODUsIDMxMywgMjYsIDMzMzkwLCAKKyAgICAzMzM5NCwgMzMzOTgsIDMzNDA2LCAzMzQxMCwgMzM0MTQsIDMzNDE3LCAzMzQyMCwgMzM0MjIsIDMzNDI3LCAzMzQzMSwgCisgICAgMzM0MzYsIDMzNDQwLCAzMzQ0NSwgMzM0NDksIDMzNDU0LCAzMzQ1OCwgMzM0NjEsIDMzNDYzLCAzMzQ2NywgMzM0NzIsIAorICAgIDMzNDc2LCAzMzQ4NywgMzM0OTAsIDMzNDkyLCAzMzQ5NiwgMzM1MDgsIDMzNTE3LCAzMzUyMSwgMzM1MjUsIDMzNTMxLCAKKyAgICAzMzUzNiwgMzM1NDUsIDMzNTUxLCAzMzU1NiwgMzM1NjEsIDMzNTY1LCAzMzU3MCwgMzM1NzcsIDMzNTgyLCAzMzU4OCwgCisgICAgMzM1OTMsIDMzNTk3LCAzMzYwNCwgMjU3MTgsIDI1NzI4LCAzMzYwOCwgMzM2MTMsIDMzNjE4LCAzMzYyMywgMzM2MzAsIAorICAgIDMzNjM0LCAzMzY0MSwgODExMywgMzM2NDcsIDMzNjU2LCAzMzY2NCwgMzM2NzksIDMzNjkzLCAzMzcwMSwgMzM3MTIsIAorICAgIDMzNzIxLCAzMzcyNiwgNzIyNywgMzM3MzYsIDMzNzQxLCAzMzc0NiwgMzM3NTAsIDMzNzUzLCAzMzc1NywgMzM3NjIsIAorICAgIDMzNzY2LCAzMzc3MywgMzM3NzgsIDMzNzgzLCA4OTEyLCAzMzc5MywgMzM3OTUsIDMzNzk4LCAzMzgwMiwgMzM4MDgsIAorICAgIDMzODEyLCAzMzgxNywgMzM4MjIsIDMzODI4LCAzMzgzMywgMzM4MzksIDMzODQ0LCAzMzg1NCwgMzM4NjMsIDMzODcxLCAKKyAgICAzMzg3NiwgMzM4ODIsIDMzODg3LCAzMzg5NCwgMzM4OTgsIDMzOTA2LCAzMzkxMywgMzM5MjYsIDMzOTM0LCAzMzkzOCwgCisgICAgMzM5NDgsIDMzOTUzLCAzMzk1NywgMzM5NjUsIDMzOTczLCAzMzk3NywgMzM5ODYsIDMzOTkyLCAzMzk5NywgMzQwMDUsIAorICAgIDM0MDE1LCAzNDAyNCwgMzQwMzMsIDM0MDQyLCAzNDA1MywgMzQwNjEsIDM0MDcyLCAzNDA4MSwgMzQwODgsIDM0MDk0LCAKKyAgICAzNDA5OSwgMzQxMTAsIDM0MTE1LCAzNDExOSwgMzQxMjIsIDM0MTI2LCAzNDEzNCwgMzQxNDAsIDM0MTQ4LCAzNDE1NSwgCisgICAgMzQxNjEsIDM0MTY2LCAzNDE3MiwgMjQxOCwgMzQxNzYsIDM0MTc4LCAzNDE4MywgMzQxODgsIDM0MTkzLCAzNDE5NiwgCisgICAgMzQxOTgsIDM0MjAyLCAzNDIwNSwgMzQyMTIsIDM0MjE2LCA5ODkxLCAzNDIyMCwgMzQyMjYsIDM0MjM2LCAzNDI0MSwgCisgICAgMzQyNDcsIDM0MjUxLCAzNDI1NiwgMzQyNjksIDI2MTA0LCAzNDI3NSwgMzQyODQsIDE3NDc1LCAzNDI5MSwgMzQzMDAsIAorICAgIDMxNjcyLCAzNDMwOCwgMzQzMTMsIDM0MzE3LCAzNDMyNSwgMzQzMzIsIDM0MzM3LCAzNDM0MSwgMzQzNDYsIDM0MzUwLCAKKyAgICAzNDM1OCwgMzQzNjQsIDM0MzcwLCAzNDM3NSwgMzQzNzksIDM0MzgyLCAzNDM4NywgMzQ0MDAsIDM0NDE2LCAyMjk5NiwgCisgICAgMzQ0MzMsIDM0NDQ1LCAzNDQ2MiwgMzQ0NzQsIDM0NDg4LCAyMzAxMywgMjMwMzIsIDM0NTAwLCAzNDUxMiwgMjY4MCwgCisgICAgMzQ1MjYsIDM0NTMxLCAzNDUzNiwgMzQ1NDEsIDM0NTQ1LCAzNDU1MiwgMzQ1NjQsIDM0NTcwLCAzNDU3MywgMzQ1ODQsIAorICAgIDM0NTk1LCAzNDYwMCwgMzIwODksIDY5NSwgMzQ2MDQsIDM0NjA4LCAzNDYxMiwgMzQ2MTUsIDM0NjIwLCAzNDYyNSwgCisgICAgMzQ2MzEsIDM0NjM2LCAzNDY0MSwgMzQ2NDcsIDM0NjUzLCAzNDY1OCwgMzQ2NjIsIDM0NjY3LCAzNDY3MiwgMzQ2NzcsIAorICAgIDM0NjgxLCAzNDY4NCwgMzQ2OTAsIDM0Njk1LCAzNDcwMCwgMzQ3MDUsIDM0NzA5LCAzNDcxNCwgMzQ3MjAsIDM0NzI4LCAKKyAgICAyNjMzNywgMzQ3MzMsIDM0NzM4LCAzNDc0NSwgMzQ3NTEsIDM0NzU3LCAzNDc2MiwgMzQ3NzAsIDIyNTM4LCAzNDc3NywgCisgICAgMzQ3ODIsIDM0Nzg3LCAzNDc5MiwgMzQ3OTYsIDM0Nzk5LCAzNDgwNCwgMzQ4MDgsIDM0ODEyLCAzNDgxOSwgMzQ4MjUsIAorICAgIDM0ODMxLCAzNDgzNywgMzQ4NDQsIDM0ODQ5LCAzNDg1NSwgMzM5NjgsIDM0ODU5LCAzNDg2MywgMzQ4NjgsIDM0ODgxLCAKKyAgICAzNDg4NiwgMzQ4OTIsIDM0OTAwLCAzNDkwNywgMzQ5MTUsIDM0OTI1LCAzNDkzMSwgMzQ5MzcsIDM0OTQzLCAzNDk0NywgCisgICAgMzQ5NTYsIDM0OTY0LCAzNDk3MSwgMzQ5NzYsIDM0OTgxLCAxMDQ0NCwgMzQ5ODYsIDM0OTk0LCAzNTAwMSwgMzUwMDcsIAorICAgIDM1MDE3LCAzNTAyMiwgMzUwMjgsIDM1MDM2LCAzNjA4LCAzNTA0MywgMzUwNTAsIDM2MTQsIDM1MDU0LCAzNTA1OSwgCisgICAgMzUwNzAsIDM1MDc3LCAzNTA4MywgMzUwOTIsIDM1MDk2LCA0MDE1LCAzNTA5OSwgMzUxMDYsIDM1MTEyLCAzNTExOCwgCisgICAgMzUxMjYsIDM1MTM2LCAyOTA2MywgMzUxNDMsIDM1MTUxLCAzNTE1NiwgMzUxNjIsIDM1MTY3LCAyNTk2NCwgMzUxNzMsIAorICAgIDM1MTgwLCAzNTE4NiwgMzUxOTUsIDIzNjc3LCAzNTIwMiwgMzUyMDcsIDM1MjExLCAzNTIxOSwgMzUyMjcsIDk2MDcsIAorICAgIDU4OTUsIDM1MjM0LCAzNTIzOCwgMzUyNDAsIDM1MjQ0LCAzNTI0OSwgMzUyNTEsIDM1MjU3LCAzNTI2MiwgMzUyNjcsIAorICAgIDM1Mjc0LCAzMjYxMCwgMzUyODAsIDM1Mjg1LCAzNTI4OSwgMzUyOTQsIDM1Mjk4LCAzNTMwNywgMzUzMTEsIDM1MzE3LCAKKyAgICAzNTMyNCwgMzUzMzAsIDM1MzM3LCAzNTM0MiwgMzUzNTEsIDM1MzU2LCAzNTM2MCwgMzUzNjUsIDM1MzcyLCAzNTM4MCwgCisgICAgMzUzODgsIDM1MzkzLCAyMTM1NiwgMzUzOTcsIDM1NDAwLCAzNTQwNCwgMzU0MDgsIDM1NDEyLCAzNTQxNSwgMzU0MTcsIAorICAgIDM1NDI1LCAzNTQyOSwgMzU0MzYsIDM1NDQwLCAzNTQ0NCwgMzU0NTIsIDM1NDU5LCAzNTQ2OSwgMzU0NzMsIDM1NDc3LCAKKyAgICAzNTQ4NSwgMzU0OTMsIDM1NDk5LCAzNTUwNCwgMzU1MTMsIDEzMzU3LCAzNTUxOSwgMzU1MjgsIDM1NTMzLCAzNTU0MCwgCisgICAgMzU1NDgsIDM1NTU2LCAzNTU2NCwgMzU1NzEsIDM1NTc4LCAzNTU4NSwgMzU1OTIsIDM1NTk5LCAzNTYwNCwgMzU2MTAsIAorICAgIDM1NjI3LCAzNTYzNSwgMzU2NDUsIDM1NjUzLCAzNTY2MCwgNDA3LCAzNTY2NCwgMzU2NzAsIDM1Njc0LCAzNTY3OSwgCisgICAgMzM3MTcsIDM1Njg1LCAzNTY4OCwgMzU2OTIsIDM1NzAwLCAzNjE5LCAzNTcwOCwgMzU3MTQsIDM1NzIwLCAzNTcyOSwgCisgICAgMzU3MzksIDM1NzQ2LCAzNTc1MiwgMzYyNSwgMzYzMSwgMzU3NjEsIDM1NzY4LCAzNTc3NiwgMzU3ODEsIDM1Nzg1LCAKKyAgICAzNTc5MiwgMzU4MDAsIDM1ODA3LCAzNTgxMywgMzU4MjIsIDM1ODMyLCAzNTgzOCwgMzU4NDYsIDM1ODU1LCAzNTg2MiwgCisgICAgMzU4NzAsIDM1ODc3LCAyMjAzMiwgMzU4ODEsIDM1ODg4LCAzNTg5NCwgMzU5MDQsIDM1OTEzLCAzNTkyNCwgMzU5MjgsIAorICAgIDM1OTM4LCAzNTk0NCwgMzU5NTEsIDM1OTU5LCAzNTk2OCwgMzU5NzcsIDM1OTg3LCAzNTk5OCwgMzYwMDUsIDM2MDEwLCAKKyAgICAzNjAxNywgMzAyOSwgMzYwMjUsIDM2MDMxLCAzNjAzNiwgMzYwNDIsIDM2MDQ4LCAzNjA1MywgMzYwNjYsIDM2MDc5LCAKKyAgICAzNjA5MiwgMzYwOTksIDM2MTA1LCAzNjExMywgMzYxMjEsIDM2MTI2LCAzNjEzMCwgMTQ2OSwgMzYxMzQsIDM2MTM5LCAKKyAgICAzNjE0NCwgMzYxNDksIDM2MTU0LCAzNjE2MCwgMzYxNjUsIDM2MTcwLCAzNjE3NSwgMzYxODAsIDM2MTg1LCAzNjE5MCwgCisgICAgMzYxOTUsIDM2MjAxLCAzNjIwNywgMzYyMTIsIDM2MjE3LCAzNjIyMywgMzYyMjgsIDM2MjMzLCAzNjIzOCwgMzYyNDQsIAorICAgIDM2MjQ5LCAzNjI1NCwgMzYyNTksIDM2MjY0LCAzNjI3MCwgMzYyNzUsIDM2MjgwLCAzNjI4NiwgMzYyOTEsIDM2Mjk2LCAKKyAgICAzNjMwMSwgMzYzMDYsIDM2MzExLCAzNjMxNywgMzYzMjIsIDM2MzI4LCAzNjMzMywgMzYzMzksIDM2MzQ0LCAzNjM0OSwgCisgICAgMzYzNTQsIDM2MzYwLCAzNjM2NiwgMzYzNzIsIDM2Mzc4LCAzNjM4NCwgMzYzOTAsIDM2Mzk2LCAzNjQwMiwgMzY0MDcsIAorICAgIDM2NDEyLCAzNjQxOCwgMzY0MjMsIDM2NDI4LCAzNjQzMywgMzY0MzgsIDM2NDQzLCAzNjQ0OCwgMzY0NTMsIDM2NDU5LCAKKyAgICAzNjQ2NCwgMzY0NjksIDM2NDc1LCAzNjQ4MSwgMTAxLCAzNjQ4NiwgMzY0ODgsIDM2NDkyLCAzNjQ5NiwgMzY1MDAsIAorICAgIDM2NTA1LCAzNjUwOSwgOTUyOCwgMzY1MTMsIDM2NTE5LCAxNzQxLCA2MjgwLCAzNjUyNSwgMzY1MjgsIDM2NTMzLCAzNjUzNywgCisgICAgMzY1NDIsIDM2NTQ2LCAzNjU1MCwgMzY1NTUsIDEwMjQ1LCAzNjU1OSwgMzY1NjMsIDM2NTY3LCAzNjU3MSwgMTUzODUsIAorICAgIDM2NTc2LCAzNjU4MCwgMzY1ODUsIDM2NTkwLCAzNjU5NSwgMzY1OTksIDM2NjA2LCAyNjEyOCwgMzY2MTIsIDM2NjE1LCAKKyAgICAzNjYxOSwgMzY2MjQsIDM2NjMwLCAzNjYzNCwgMzY2NDIsIDM2NjQ4LCAzNjY1MywgMzY2NTcsIDM2NjYzLCAzNjY2NywgCisgICAgMzY2NzEsIDM0NjIsIDM0NjcsIDI5MjU1LCAzNjY3NCwgMzY2NzgsIDM2NjgyLCAzNjY4NiwgMzY2OTAsIDM2Njk4LCAKKyAgICAzNjcwNSwgMzY3MDksIDM2NzE2LCAzNjcyMSwgMzE3LCAzNjcyNiwgMzY3MzAsIDM2NzM2LCAzNjc0OCwgMzY3NTQsIAorICAgIDM2NzYwLCAzNjc2NCwgMzY3NzAsIDM2Nzc5LCAzNjc4MywgMzY3ODcsIDM2NzkyLCAzNjc5OCwgMzY4MDMsIDM2ODA3LCAKKyAgICAzNjgxMiwgMzY4MTYsIDM2ODIwLCAzNjgyNywgMzY4MzMsIDM2ODM4LCAzNjg1MywgMzY4NjgsIDM2ODgzLCAzNjg5OSwgCisgICAgMzY5MTcsIDEwMTk1LCAzNjkzMSwgMzY5MzgsIDM2OTQyLCAzNjk0NSwgMzY5NTQsIDM2OTU5LCAzNjk2MywgMzY5NzEsIAorICAgIDMzOTE5LCAzNjk3OSwgMzY5ODMsIDM2OTkzLCAzNzAwNCwgMjkyMjUsIDM3MDE3LCAzNzAyMSwgMzcwMzAsIDM3MDM4LCAKKyAgICA5Nzg1LCAxNDkxMywgMzcwNDIsIDIyNDQ3LCAzNzA0NSwgMzAxNzMsIDM3MDUwLCA5Nzg0LCAzNzA1NSwgMzcwNjEsIAorICAgIDM3MDY2LCAzNzA3MiwgMzcwNzcsIDM3MDgzLCAzNzA4OCwgMzcwOTQsIDM3MDk5LCAzNzEwNSwgMzcxMTEsIDM3MTE3LCAKKyAgICAzNzEyMiwgMzcwNzgsIDM3MDg0LCAzNzA4OSwgMzcwOTUsIDM3MTAwLCAzNzEwNiwgMzcxMTIsIDgxMjYsIDM4NzQsIAorICAgIDM3MTI2LCAzNzEzNCwgMzcxMzgsIDM3MTQxLCAzNzE0NSwgMzcxNTAsIDM3MTU1LCAzNzE2MSwgMzcxNjcsIDM3MTcyLCAKKyAgICAzNzE3NiwgMjU5NzYsIDM3MTgwLCAzNzE4NCwgMzcxOTAsIDM3MTk0LCA5MDQ5LCAzNzIwMywgMzcyMTAsIDM3MjE0LCAKKyAgICAxMTg3NSwgMzcyMjEsIDM3MjI3LCAzNzIzMiwgMzcyMzksIDM3MjQ2LCAzNzI1MywgMjg1NzEsIDgwNDksIDM3MjYwLCAKKyAgICAzNzI2NywgMzcyNzQsIDM3MjgwLCAzNzI4NSwgMzcyOTIsIDM3MzAzLCAzNzMwOSwgMzczMTQsIDM3MzE5LCAzNzMyNCwgCisgICAgMzczMzEsIDM3MDc5LCAzNzMzNSwgMzczNDUsIDM3MzU2LCAzNzM2MiwgMzczNjcsIDM3MzcyLCAzNzM3NywgMzczODIsIAorICAgIDM3Mzg3LCAzNzM5MSwgMzczOTUsIDM3NDAxLCAzNzQwOSwgMjMxOSwgODY1LCAxMDI2MSwgMTAyNzMsIDEwMjc4LCAxMDI4NCwgCisgICAgMzc0MTgsIDEwMjg5LCAxMDI5NCwgMTAzMDAsIDM3NDIzLCAzNzQzMywgMzc0MzcsIDEwMzA1LCAzNzQ0MiwgMTY5MDMsIAorICAgIDM3NDQ1LCAzNzQ1MCwgMzc0NTQsIDM3NDU5LCAzNzQ2NCwgMzc0NzEsIDM3NDc4LCAzNzQ4MiwgMzc0ODUsIDM3NDkzLCAKKyAgICAxMDIwOCwgMzc1MDAsIDM3NTAzLCAzNzUwOSwgMzc1MTksIDU5MjksIDM3NTI4LCAzNzUzMiwgMzc1NDAsIDM3NTQ0LCAKKyAgICAzNzU1NCwgMzc1NjAsIDM3NTcxLCAzNzU3NywgMzc1ODMsIDM3NTg4LCAzNzU5NCwgMzc2MDAsIDM3NjA2LCAzNzYxMSwgCisgICAgMzc2MTQsIDM3NjIxLCAzNzYyNywgMzc2MzIsIDM3NjM5LCAzNzY0NiwgMzc2NTAsIDM3NjYwLCAzNzY3MywgMzc2ODIsIAorICAgIDM3NjkxLCAzNzcwMiwgMzc3MTUsIDM3NzI2LCAzNzczNSwgMzc3NDYsIDM3NzUxLCAzNzc2MCwgMzc3NjUsIDEwMzEwLCAKKyAgICAzNzc3MSwgMzc3NzgsIDM3Nzg2LCAzNzc5MSwgMzc3OTUsIDM3ODAyLCAzNzgwOSwgMzgyOSwgMTYsIDM3ODEzLCAzNzgxOCwgCisgICAgMTY3NTcsIDM3ODIyLCAzNzgyNSwgMzc4MjgsIDI4MDc3LCAzNzgzMiwgMjg1ODAsIDM3ODQwLCAzNzg0NCwgMzc4NDgsIAorICAgIDM3ODUxLCAzNzg1NywgMzcxMDEsIDM3ODYzLCAzNzg3MSwgMzc4NzcsIDM3ODg0LCAyODA2MCwgMzc4ODgsIDI4MjU0LCAKKyAgICAzNzg5MiwgMzc5MDEsIDM3OTA3LCAzNzkxMywgMzc5MTgsIDM3OTIyLCAzNzkyOCwgMzc5MzIsIDM3OTQwLCAzNzk0OCwgCisgICAgMjYxOTQsIDM3OTU0LCAzNzk2MSwgMzc5NjcsIDM3OTcyLCAzNzk3NywgMzc5ODEsIDM3OTg3LCAzNzk5MiwgMzc5OTgsIAorICAgIDQwNTYsIDc5MSwgMzgwMDUsIDM4MDA5LCAzODAxMiwgMTUyNzUsIDM4MDI0LCAzNTg1MSwgMzgwMzUsIDM4MDM4LCAzODA0NSwgCisgICAgMzgwNDksIDM4MDU1LCAzODA1OSwgMzgwNjUsIDM4MDcwLCAzODA3NiwgMzgwODEsIDM4MDg2LCAzODA5MCwgMzgwOTQsIAorICAgIDM4MDk5LCAzODEwNCwgMzgxMTQsIDM4MTIwLCAzODEzMywgMzgxMzksIDM4MTQ1LCAzODE1MiwgMzgxNTcsIDM4MTYzLCAKKyAgICAzODE2OCwgMTY2NDMsIDE0NzIsIDEwMTksIDMxMjE4LCAzMTIyNCwgMzgxNzMsIDMxMjMwLCAzMTI0MywgMzEyNDksIAorICAgIDMxMjU1LCAzODE3OSwgMzEyNjEsIDMxMjY3LCAzODE4NSwgMzgxOTEsIDIyLCAzODE5OSwgMzgyMDYsIDM4MjEwLCAzODIxNCwgCisgICAgMzgyMjIsIDMxOTc4LCAzODIyNiwgMzgyMzAsIDM4MjM3LCAzODI0MiwgMzgyNDYsIDM4MjUxLCAzODI1NywgMzgyNjIsIAorICAgIDM4MjY4LCAzODI3MywgMzgyNzcsIDM4MjgxLCAzODI4NSwgMzgyOTAsIDM4Mjk0LCAzODI5OSwgMzgzMDMsIDM4MzEwLCAKKyAgICAzODMxNSwgMzgzMTksIDM4MzI0LCAzODMyOCwgMzgzMzMsIDM4MzM3LCAzODM0MiwgMzgzNDgsIDE1NDk1LCAxNTUwMCwgCisgICAgMzgzNTMsIDM4MzU3LCAzODM2MCwgMzgzNjQsIDIxMTgzLCAzODM2OSwgMzgzNzMsIDM4Mzc5LCAzODM4NiwgMzgzOTEsIAorICAgIDM4NDAxLCAzODQwNiwgMzg0MTQsIDM4NDE4LCAzODQyMSwgMzE5OTMsIDM4NDI1LCA0MTA5LCAzODQzMCwgMzg0MzUsIAorICAgIDM4NDM5LCAzODQ0NCwgMzg0NDgsIDM4NDUzLCAxMzM3NSwgMzg0NjQsIDM4NDY4LCAzODQ3MSwgMzg0NzYsIDM4NDgwLCAKKyAgICAzODQ4NCwgMzg0ODcsIDM4NDkxLCA4MTQ1LCAxMzM5MSwgMzg0OTQsIDM4NDk3LCAzODUwMywgMzg1MDgsIDM4NTE0LCAKKyAgICAzODUxOSwgMzg1MjUsIDM4NTMwLCAzODUzNiwgMzg1NDEsIDM4NTQ3LCAzODU1MywgMzg1NTksIDM4NTY0LCAzODU2OCwgCisgICAgMzg1NzIsIDM4NTgxLCAzODU5NywgMzg2MTMsIDM4NjIzLCAyNzk2NywgMzg2MzAsIDM4NjM0LCAzODYzOSwgMzg2NDQsIAorICAgIDM4NjQ4LCAzODY1MiwgMzU5NzIsIDM4NjU4LCAzODY2MywgMzg2NjcsIDM4Njc0LCAzODY3OSwgMzg2ODMsIDM4Njg3LCAKKyAgICAyNjk5NiwgMzg2OTMsIDIxNDUxLCAzODY5OCwgMzg3MDUsIDM4NzEzLCAzODcxOSwgMzg3MjYsIDM4NzM0LCAzODc0MCwgCisgICAgMzg3NDQsIDM4NzUwLCAzODc1OCwgMzg3NjIsIDM4NzcxLCA5NTA5LCAzODc3OSwgMzg3ODMsIDM4NzkxLCAzODc5OCwgCisgICAgMzg4MDMsIDM4ODA4LCAzODgxMiwgMzg4MTUsIDM4ODE5LCAzODgyMiwgMzg4MjYsIDM4ODMzLCAzODgzOCwgMzg4NDQsIAorICAgIDI2NDE1LCAzMTI4MSwgMzg4NDgsIDM4ODU1LCAzODg2MSwgMzg4NjcsIDM4ODcyLCAzODg3NSwgMzg4NzcsIDM4ODg0LCAKKyAgICAzODg5MSwgMzg4OTcsIDM4OTAxLCAzODkwNCwgMzg5MDgsIDM4OTEyLCAzODkxNiwgMzg5MjEsIDM4OTI1LCAzODkyOSwgCisgICAgMzg5MzIsIDM4OTM2LCAzODk1MCwgMjMwNjIsIDM4OTY5LCAzODk4MiwgMzg5OTUsIDM5MDA4LCAyMzA4MCwgMzkwMjMsIAorICAgIDEwNDk3LCAzOTAzOCwgMzkwNDQsIDM5MDQ4LCAzOTA1MiwgMzkwNTksIDM5MDY0LCAzOTA2OCwgMzkwNzUsIDM5MDgxLCAKKyAgICAzOTA4NiwgMzkwOTIsIDM5MTAyLCAzOTExNCwgMzkxMjUsIDM5MTMwLCAzOTEzNywgMzkxNDEsIDM5MTQ1LCAzOTE0OCwgCisgICAgMTU4OTEsIDM2NzcsIDM5MTU2LCAxNTUyMiwgMzkxNjksIDM5MTc2LCAzOTE4MCwgMzkxODQsIDM5MTg5LCAzOTE5NCwgCisgICAgMzkyMDAsIDM5MjA0LCAzOTIwOCwgMzkyMTEsIDc3NDIsIDE1NTMzLCAzOTIxNiwgMzkyMjAsIDM5MjI2LCAzOTIzNSwgCisgICAgMzkyNDAsIDM5MjQ3LCAzNTgyOCwgMzkyNTMsIDM5MjU4LCAzOTI2MiwgMzkyNjcsIDM5Mjc0LCAzOTI3OCwgMzkyODEsIAorICAgIDM5Mjg1LCAzOTI5MCwgMTQ1NjUsIDM5Mjk3LCAzOTMwNCwgMTA3NywgMzkzMDgsIDM5MzEzLCAzOTMxOCwgMzkzMjQsIAorICAgIDM5MzI5LCAzOTMzNCwgMzkzMzgsIDM5MzQ4LCAzOTM1MywgMzkzNTksIDM5MzY0LCAzOTM3MCwgMzkzNzUsIDM5MzgxLCAKKyAgICAzOTM5MSwgMzkzOTYsIDM5NDAxLCAzOTQwNSwgNzIyOSwgNzI0MSwgMzk0MTAsIDM5NDEzLCAzOTQyMCwgMzk0MjYsIAorICAgIDM0MDg0LCAzNDA5MSwgMzk0MzUsIDM5NDM5LCAzMjA0MSwgMzk0NDcsIDM5NDU4LCAzOTQ2NiwgMzYwMjAsIDM5NDczLCAKKyAgICAzOTQ3OCwgMzk0ODMsIDM5NDk0LCAzOTUwMSwgMzk1MTIsIDMyMDY1LCAyMTQ1NywgMzk1MjAsIDczNSwgMzk1MjUsIAorICAgIDM5NTMxLCAyODA1MSwgMzk1MzcsIDM5NTQyLCAzOTU1MiwgMzk1NjEsIDM5NTY4LCAzOTU3NCwgMzk1NzgsIDM5NTgxLCAKKyAgICAzOTU4OCwgMzk1OTQsIDM5NjAxLCAzOTYwNywgMzk2MTcsIDM5NjI1LCAzOTYzMSwgMzk2MzcsIDM5NjQyLCAzOTY0NiwgCisgICAgMzk2NTMsIDM5NjU5LCAzOTY2NiwgMzg5MTcsIDUzNSwgMTM4MTgsIDM5NjcyLCAzOTY3NywgMzk2ODAsIDM5Njg2LCAKKyAgICAzOTY5NCwgMTM5NiwgMzk2OTksIDM5NzAzLCAzOTcwOCwgMzk3MTUsIDM5NzIxLCAzOTcyNSwgMzk3MjksIDM5NzM0LCAKKyAgICAzOTc0MywgMzk3NTAsIDM5NzYwLCAzOTc2NiwgMjgwOTUsIDM5NzgzLCAzOTc5MiwgMzk4MDAsIDM5ODA2LCAzOTgxMSwgCisgICAgMzk4MTgsIDM5ODI0LCAzOTgzMiwgMzk4NDEsIDM5ODQ5LCAzOTg1MywgMzk4NTgsIDM5ODY2LCAzMjA3NCwgMzk4NzIsIAorICAgIDM5ODkxLCAxNTgyNCwgMzk5MDUsIDM5OTIxLCAzOTkzNSwgMzk5NDEsIDM5OTQ2LCAzOTk1MSwgMzk5NTYsIDM5OTYyLCAKKyAgICAzMjA4MCwgMzk5NjcsIDM5OTc0LCAzOTk3OSwgMzk5ODMsIDM0NSwgMjkzNiwgMzk5OTAsIDM5OTk1LCA0MDAwMCwgMjczMjIsIAorICAgIDM5ODIxLCA0MDAwNCwgNDAwMDksIDQwMDE3LCA0MDAyMSwgNDAwMjQsIDQwMDMwLCA0MDAzNiwgNDAwNDAsIDI4MTUwLCAKKyAgICA0MDA0MywgNDAwNDgsIDQwMDUyLCA0MDA1NSwgNDAwNjAsIDQwMDY0LCA0MDA2OSwgNDAwNzQsIDQwMDc4LCA0MDA4MywgCisgICAgNDAwODcsIDQwMDkxLCAyMTE3OSwgMjExOTAsIDQwMDk1LCA0MDEwMCwgNDAxMDYsIDI2OTUzLCA0MDExMSwgNDAxMTUsIAorICAgIDIxMjY2LCAxNjA3MiwgNDAxMTgsIDQwMTIzLCA0MDEyOCwgNDAxMzMsIDQwMTM4LCA0MDE0MywgNDAxNDgsIDQwMTUzLCAKKyAgICA0NTAsIDQ5LCAzMTI5OSwgMzEzMDQsIDMxMzA5LCAzMTMxNSwgMzEzMjAsIDMxMzI1LCA0MDE1OCwgMzEzMjksIDQwMTYyLCAKKyAgICA0MDE2NiwgNDAxNzAsIDMxMzM0LCAzMTM0MCwgNDAxODQsIDMxMzUxLCAzMTM1NiwgNDAxOTIsIDQwMTk3LCAzMTM2MiwgCisgICAgNDAyMDIsIDQwMjA3LCA0MDIxMiwgNDAyMTcsIDQwMjIzLCA0MDIyOSwgNDAyMzUsIDMxMzc5LCA0MDI0OCwgNDAyNTQsIAorICAgIDMxMzgzLCA0MDI1OCwgMzEzODgsIDQwMjYzLCAzMTM5MywgMzEzOTgsIDQwMjY2LCA0MDI3MSwgNDAyNzUsIDMwOTQ4LCAKKyAgICA0MDI4MSwgMTM1OTksIDQwMjg4LCA0MDI5MywgMzE0MDMsIDQwMjk3LCA0MDMwMiwgNDAzMDcsIDQwMzEyLCA0MDMxNiwgCisgICAgNDAzMjEsIDQwMzI2LCA0MDMzMiwgNDAzMzcsIDQwMzQyLCA0MDM0OCwgNDAzNTQsIDQwMzU5LCA0MDM2MywgNDAzNjgsIAorICAgIDQwMzczLCA0MDM3OCwgNDAzODIsIDQwMzg3LCA0MDM5MiwgNDAzOTcsIDQwNDAzLCA0MDQwOSwgNDA0MTUsIDQwNDIwLCAKKyAgICA0MDQyNCwgNDA0MjksIDQwNDMzLCAzMTQwNywgMzE0MTIsIDMxNDE3LCA0MDQzNywgNDA0NDEsIDQwNDQ1LCAzMTQyMiwgCisgICAgMzE0MjgsIDMxNDM0LCAzMTQ0NiwgNDA0NTcsIDI2MDEzLCA0MDQ2MSwgNDA0NjUsIDQwNDcwLCA0MDQ3NSwgNDA0ODAsIAorICAgIDQwNDg1LCA0MDQ4OSwgNDA0OTMsIDQwNTAzLCA0MDUwOCwgNDA1MTMsIDQwNTE3LCA0MDUyMSwgNDA1MjQsIDQwNTMyLCAKKyAgICAzMTQ5NCwgNDA1MzcsIDE0NzksIDQwNTQzLCA0MDU1MSwgNDA1NjAsIDQwNTY0LCA0MDU2OCwgNDA1NzYsIDQwNTgyLCAKKyAgICA0MDU5MCwgNDA2MDYsIDQwNjEwLCA0MDYxNCwgNDA2MTksIDQwNjM0LCAzMTUzMSwgMTc0OSwgMTIwNTUsIDQwNjM4LCAKKyAgICAxMzc4LCA0MDY1MCwgNDA2NTEsIDQwNjU5LCA0MDY2NiwgNDA2NzEsIDQwNjc4LCA0MDY4MywgOTM3OSwgMTExOSwgMTAzMzIsIAorICAgIDQwNjkwLCA0MDY5NSwgNDA2OTgsIDQwNzAxLCA0MDcxMCwgMTI4NiwgNDA3MTUsIDM5MDY1LCA0MDcyMiwgNDA3MjcsIAorICAgIDQwNzMxLCAyMjUwMywgMjU1NywgNDA3MzksIDEwNzQxLCA0MDc0OSwgNDA3NTUsIDIzMzcsIDIzNDcsIDQwNzY0LCA0MDc3MywgCisgICAgNDA3ODMsIDQwNzk0LCAzMjkzLCAzNDIzNywgMTAzODQsIDM4MDcsIDE2NjgxLCAxMjkxLCA0MDc5OSwgNDA4MDcsIDQwODE0LCAKKyAgICA0MDgxOSwgNDA4MjMsIDQwODI3LCAyMzg3NSwgMTA0MTEsIDQwODM1LCA0MDg0NCwgNDA4NTMsIDQwODYxLCA0MDg2OCwgCisgICAgNDA4NzksIDQwODg0LCA0MDg5NywgNDA5MTAsIDQwOTIyLCA0MDkzNCwgNDA5NDYsIDQwOTU5LCA0MDk3MCwgNDA5ODEsIAorICAgIDQwOTkxLCA0MDk5OSwgNDEwMDcsIDQxMDE5LCA0MTAzMSwgNDEwNDIsIDQxMDUxLCA0MTA1OSwgNDEwNjYsIDQxMDc4LCAKKyAgICA0MTA4NSwgNDEwOTQsIDQxMTAxLCA0MTExNCwgNDExMTksIDQxMTI5LCA0MTEzNCwgNDExNDAsIDQxMTQ1LCAzNzIxMSwgCisgICAgNDExNDksIDQxMTU2LCA0MTE2MCwgNDExNjcsIDQxMTc1LCAyNTE4LCA0MTE4MiwgNDExOTMsIDQxMjAzLCA0MTIxMiwgCisgICAgNDEyMjAsIDQxMjMwLCA0MTIzOCwgNDEyNDgsIDQxMjU3LCA0MTI2MiwgNDEyNjgsIDQxMjc0LCAzNzA5LCA0MTI4NSwgCisgICAgNDEyOTUsIDQxMzA0LCA0MTMxMywgNDEzMjMsIDQxMzMxLCA0MTM0MCwgNDEzNDUsIDQxMzUwLCA0MTM1NSwgMTcwNSwgMzcsIAorICAgIDQxMzYzLCA0MTM3MSwgNDEzODIsIDQxMzkzLCAxNjM1NiwgNDE0MDMsIDQxNDA3LCA0MTQxNCwgNDE0MjAsIDQxNDI1LCAKKyAgICA0MTQyOSwgNDE0NDAsIDQxNDUwLCA0MTQ1OSwgNDE0NzAsIDE2NzMwLCAxNjczNSwgNDE0NzUsIDQxNDg0LCA0MTQ4OSwgCisgICAgNDE0OTksIDQxNTA0LCA0MTUxMiwgNDE1MjAsIDQxNTI3LCA0MTUzMywgNzA3OCwgMjI4LCA0MTUzNywgNDE1NDMsIDQxNTQ4LCAKKyAgICA0MTU1MSwgMjExNywgMzkxODEsIDQxNTU5LCA0MTU2MywgNDE1NjYsIDE1MTIsIDQxNTcyLCAxMzk4MCwgMTI5NiwgNDE1NzcsIAorICAgIDQxNTkwLCA0MTYwNCwgMjY0MywgNDE2MjIsIDQxNjM0LCA0MTY0NiwgMjY1NywgMjY3NCwgNDE2NjAsIDQxNjczLCAyNjg5LCAKKyAgICA0MTY4NywgNDE2OTksIDI3MDQsIDQxNzEzLCAxMzAyLCAxMzA4LCAxMzE0LCAxMDY1OSwgNDE3MTgsIDQxNzIzLCA0MTcyOCwgCisgICAgNDE3MzIsIDQxNzQ3LCA0MTc2MiwgNDE3NzcsIDQxNzkyLCA0MTgwNywgNDE4MjIsIDQxODM3LCA0MTg1MiwgNDE4NjcsIAorICAgIDQxODgyLCA0MTg5NywgNDE5MTIsIDQxOTI3LCA0MTk0MiwgNDE5NTcsIDQxOTcyLCA0MTk4NywgNDIwMDIsIDQyMDE3LCAKKyAgICA0MjAzMiwgNDIwNDcsIDQyMDYyLCA0MjA3NywgNDIwOTIsIDQyMTA3LCA0MjEyMiwgNDIxMzcsIDQyMTUyLCA0MjE2NywgCisgICAgNDIxODIsIDQyMTk3LCA0MjIxMiwgNDIyMjcsIDQyMjQyLCA0MjI1NywgNDIyNzIsIDQyMjg3LCA0MjMwMiwgNDIzMTcsIAorICAgIDQyMzMyLCA0MjM0NywgNDIzNjIsIDQyMzc3LCA0MjM5MiwgNDI0MDcsIDQyNDIyLCA0MjQzNywgNDI0NTIsIDQyNDY3LCAKKyAgICA0MjQ4MiwgNDI0OTcsIDQyNTEyLCA0MjUyNywgNDI1NDIsIDQyNTU3LCA0MjU3MiwgNDI1ODcsIDQyNjAyLCA0MjYxNywgCisgICAgNDI2MzIsIDQyNjQ3LCA0MjY2MiwgNDI2NzcsIDQyNjkyLCA0MjcwNywgNDI3MjIsIDQyNzM3LCA0Mjc1MiwgNDI3NjcsIAorICAgIDQyNzgyLCA0Mjc5NywgNDI4MTIsIDQyODI3LCA0Mjg0MiwgNDI4NTcsIDQyODcyLCA0Mjg4NywgNDI5MDIsIDQyOTE3LCAKKyAgICA0MjkzMiwgNDI5NDcsIDQyOTYyLCA0Mjk3NywgNDI5OTIsIDQzMDA3LCA0MzAyMiwgNDMwMzcsIDQzMDUyLCA0MzA2NywgCisgICAgNDMwODIsIDQzMDk3LCA0MzExMiwgNDMxMjcsIDQzMTQyLCA0MzE1NywgNDMxNzIsIDQzMTg3LCA0MzIwMiwgNDMyMTcsIAorICAgIDQzMjMyLCA0MzI0NywgNDMyNjIsIDQzMjc3LCA0MzI5MiwgNDMzMDcsIDQzMzIyLCA0MzMzNywgNDMzNTIsIDQzMzY3LCAKKyAgICA0MzM4MiwgNDMzOTcsIDQzNDEyLCA0MzQyNywgNDM0NDIsIDQzNDU3LCA0MzQ3MiwgNDM0ODcsIDQzNTAyLCA0MzUxNywgCisgICAgNDM1MzIsIDQzNTQ3LCA0MzU2MiwgNDM1NzcsIDQzNTkyLCA0MzYwNywgNDM2MjIsIDQzNjM3LCA0MzY1MiwgNDM2NjcsIAorICAgIDQzNjgyLCA0MzY5NywgNDM3MTIsIDQzNzI3LCA0Mzc0MiwgNDM3NTcsIDQzNzcyLCA0Mzc4NywgNDM4MDIsIDQzODE3LCAKKyAgICA0MzgzMiwgNDM4NDcsIDQzODYyLCA0Mzg3NywgNDM4OTIsIDQzOTA3LCA0MzkyMiwgNDM5MzcsIDQzOTUyLCA0Mzk2NywgCisgICAgNDM5ODIsIDQzOTk3LCA0NDAxMiwgNDQwMjcsIDQ0MDQyLCA0NDA1NywgNDQwNzIsIDQ0MDg3LCA0NDEwMiwgNDQxMTcsIAorICAgIDQ0MTMyLCA0NDE0NywgNDQxNjIsIDQ0MTc3LCA0NDE5MiwgNDQyMDcsIDQ0MjIyLCA0NDIzNywgNDQyNTIsIDQ0MjY3LCAKKyAgICA0NDI4MiwgNDQyOTcsIDQ0MzEyLCA0NDMyNywgNDQzNDIsIDQ0MzU3LCA0NDM3MiwgNDQzODcsIDQ0NDAyLCA0NDQxNywgCisgICAgNDQ0MzIsIDQ0NDQ3LCA0NDQ2MiwgNDQ0NzcsIDQ0NDkyLCA0NDUwNywgNDQ1MjIsIDQ0NTM3LCA0NDU1MiwgNDQ1NjcsIAorICAgIDQ0NTgyLCA0NDU5NywgNDQ2MTIsIDQ0NjI3LCA0NDY0MiwgNDQ2NTcsIDQ0NjcyLCA0NDY4NywgNDQ3MDIsIDQ0NzE3LCAKKyAgICA0NDczMiwgNDQ3NDcsIDQ0NzYyLCA0NDc3NywgNDQ3OTIsIDQ0ODA3LCA0NDgyMiwgNDQ4MzcsIDQ0ODUyLCA0NDg2NywgCisgICAgNDQ4ODIsIDQ0ODk3LCA0NDkxMiwgNDQ5MjcsIDQ0OTQyLCA0NDk1NywgNDQ5NzIsIDQ0OTg3LCA0NTAwMiwgNDUwMTcsIAorICAgIDQ1MDMyLCA0NTA0NywgNDUwNjIsIDQ1MDc3LCA0NTA5MiwgNDUxMDcsIDQ1MTIyLCA0NTEzNywgNDUxNTIsIDQ1MTY3LCAKKyAgICA0NTE4MiwgNDUxOTcsIDQ1MjEyLCA0NTIyNywgNDUyNDIsIDQ1MjU3LCA0NTI3MiwgNDUyODcsIDQ1MzAyLCA0NTMxNywgCisgICAgNDUzMzIsIDQ1MzQ3LCA0NTM2MiwgNDUzNzcsIDQ1MzkyLCA0NTQwNywgNDU0MjIsIDQ1NDM3LCA0NTQ1MiwgNDU0NjcsIAorICAgIDQ1NDgyLCA0NTQ5NywgNDU1MTIsIDQ1NTI3LCA0NTU0MiwgNDU1NTcsIDQ1NTcyLCA0NTU4NywgNDU2MDIsIDQ1NjE3LCAKKyAgICA0NTYzMiwgNDU2NDcsIDQ1NjYyLCA0NTY3NywgNDU2OTIsIDQ1NzA3LCA0NTcyMiwgNDU3MzcsIDQ1NzUyLCA0NTc2NywgCisgICAgNDU3ODIsIDQ1Nzk3LCA0NTgxMiwgNDU4MjcsIDQ1ODQyLCA0NTg1NywgNDU4NzIsIDQ1ODg3LCA0NTkwMiwgNDU5MTcsIAorICAgIDQ1OTMyLCA0NTk0NywgNDU5NjIsIDQ1OTc3LCA0NTk5MiwgNDYwMDcsIDQ2MDIyLCA0NjAzNywgNDYwNTIsIDQ2MDY3LCAKKyAgICA0NjA4MiwgNDYwOTcsIDQ2MTEyLCA0NjEyNywgNDYxNDIsIDQ2MTU3LCA0NjE3MiwgNDYxODcsIDQ2MjAyLCA0NjIxNywgCisgICAgNDYyMzIsIDQ2MjQ3LCA0NjI2MiwgNDYyNzcsIDQ2MjkyLCA0NjMwNywgNDYzMjIsIDQ2MzM3LCA0NjM1MiwgNDYzNjcsIAorICAgIDQ2MzgyLCA0NjM5NywgNDY0MTIsIDQ2NDI3LCA0NjQ0MiwgNDY0NTcsIDQ2NDcyLCA0NjQ4NywgNDY1MDIsIDQ2NTE3LCAKKyAgICA0NjUzMiwgNDY1NDcsIDQ2NTYyLCA0NjU3NywgNDY1OTIsIDQ2NjA3LCA0NjYyMiwgNDY2MzcsIDQ2NjUyLCA0NjY2NywgCisgICAgNDY2ODIsIDQ2Njk3LCA0NjcxMiwgNDY3MjcsIDQ2NzQyLCA0Njc1NywgNDY3NzIsIDQ2Nzg3LCA0NjgwMiwgNDY4MTcsIAorICAgIDQ2ODMyLCA0Njg0NywgNDY4NjIsIDQ2ODc3LCA0Njg5MiwgNDY5MDcsIDQ2OTIyLCA0NjkzNywgNDY5NTIsIDQ2OTY3LCAKKyAgICA0Njk4MiwgNDY5OTcsIDQ3MDEyLCA0NzAyNywgNDcwNDIsIDQ3MDU3LCA0NzA3MiwgNDcwODcsIDQ3MTAyLCA0NzExNywgCisgICAgNDcxMzIsIDQ3MTQ3LCA0NzE2MiwgNDcxNzcsIDQ3MTkyLCA0NzIwNywgNDcyMjIsIDQ3MjM3LCA0NzI1MiwgNDcyNjcsIAorICAgIDQ3MjgyLCA0NzI5NywgNDczMTIsIDQ3MzI3LCA0NzM0MiwgNDczNTcsIDQ3MzcyLCA0NzM4NywgNDc0MDIsIDQ3NDE3LCAKKyAgICA0NzQzMiwgNDc0NDcsIDQ3NDYyLCA0NzQ3NywgNDc0OTIsIDQ3NTA3LCA0NzUyMiwgNDc1MzcsIDQ3NTUyLCA0NzU2NywgCisgICAgNDc1ODIsIDQ3NTk3LCA0NzYxMiwgNDc2MjcsIDQ3NjQyLCA0NzY1NywgNDc2NzIsIDQ3Njg3LCA0NzcwMiwgNDc3MTcsIAorICAgIDQ3NzMyLCA0Nzc0NywgNDc3NjIsIDQ3Nzc3LCA0Nzc5MiwgNDc4MDcsIDQ3ODIyLCA0NzgzNywgNDc4NTIsIDQ3ODY3LCAKKyAgICA0Nzg4MiwgNDc4OTcsIDQ3OTEyLCA0NzkyNywgNDc5NDIsIDQ3OTU3LCA0Nzk3MiwgNDc5ODcsIDQ4MDAyLCA0ODAxNywgCisgICAgNDgwMzIsIDQ4MDQ3LCA0ODA2MiwgNDgwNzcsIDQ4MDkyLCA0ODEwNywgNDgxMjIsIDQ4MTM3LCA0ODE1MiwgNDgxNjcsIAorICAgIDQ4MTgyLCA0ODE5NywgNDgyMTIsIDQ4MjI3LCA0ODI0MiwgNDgyNTcsIDQ4MjcyLCA0ODI4NywgNDgzMDIsIDQ4MzE3LCAKKyAgICA0ODMzMiwgNDgzNDcsIDQ4MzYyLCA0ODM3NywgNDgzOTIsIDQ4NDA3LCA0ODQyMiwgNDg0MzcsIDQ4NDUyLCA0ODQ2NywgCisgICAgNDg0ODIsIDQ4NDk3LCA0ODUxMiwgNDg1MjcsIDQ4NTQyLCA0ODU1NywgNDg1NzIsIDQ4NTg3LCA0ODYwMiwgNDg2MTcsIAorICAgIDQ4NjMyLCA0ODY0NywgNDg2NjIsIDQ4Njc3LCA0ODY5MiwgNDg3MDcsIDQ4NzIyLCA0ODczNywgNDg3NTIsIDQ4NzY3LCAKKyAgICA0ODc4MiwgNDg3OTcsIDQ4ODEyLCA0ODgyNywgNDg4NDIsIDQ4ODU3LCA0ODg3MiwgNDg4ODcsIDQ4OTAyLCA0ODkxNywgCisgICAgNDg5MzIsIDQ4OTQ3LCA0ODk2MiwgNDg5NzcsIDQ4OTkyLCA0OTAwNywgNDkwMjIsIDQ5MDM3LCA0OTA1MiwgNDkwNjcsIAorICAgIDQ5MDgyLCA0OTA5NywgNDkxMTIsIDQ5MTI3LCA0OTE0MiwgNDkxNTcsIDQ5MTcyLCA0OTE4NywgNDkyMDIsIDQ5MjE3LCAKKyAgICA0OTIzMiwgNDkyNDcsIDQ5MjYyLCA0OTI3NywgNDkyOTIsIDQ5MzA3LCA0OTMyMiwgNDkzMzcsIDQ5MzUyLCA0OTM2NywgCisgICAgNDkzODIsIDQ5Mzk3LCA0OTQxMiwgNDk0MjcsIDQ5NDQyLCA0OTQ1NywgNDk0NzIsIDQ5NDg3LCA0OTUwMiwgNDk1MTcsIAorICAgIDQ5NTMyLCA0OTU0OCwgNDk1NjQsIDQ5NTgwLCA0OTU5NiwgNDk2MTIsIDQ5NjI4LCA0OTY0NCwgNDk2NjAsIDQ5Njc2LCAKKyAgICA0OTY5MiwgNDk3MDgsIDQ5NzI0LCA0OTc0MCwgNDk3NTYsIDQ5NzcyLCA0OTc4OCwgNDk4MDQsIDQ5ODIwLCA0OTgzNiwgCisgICAgNDk4NTIsIDQ5ODY4LCA0OTg4NCwgNDk5MDAsIDQ5OTE2LCA0OTkzMiwgNDk5NDgsIDQ5OTY0LCA0OTk4MCwgNDk5OTYsIAorICAgIDUwMDEyLCA1MDAyOCwgNTAwNDQsIDUwMDYwLCA1MDA3NiwgNTAwOTIsIDUwMTA4LCA1MDEyNCwgNTAxNDAsIDUwMTU2LCAKKyAgICA1MDE3MiwgNTAxODgsIDUwMjA0LCA1MDIyMCwgNTAyMzYsIDUwMjUyLCA1MDI2OCwgNTAyODQsIDUwMzAwLCA1MDMxNiwgCisgICAgNTAzMzIsIDUwMzQ4LCA1MDM2NCwgNTAzODAsIDUwMzk2LCA1MDQxMiwgNTA0MjgsIDUwNDQ0LCA1MDQ2MCwgNTA0NzYsIAorICAgIDUwNDkyLCA1MDUwOCwgNTA1MjQsIDUwNTQwLCA1MDU1NiwgNTA1NzIsIDUwNTg4LCA1MDYwNCwgNTA2MjAsIDUwNjM2LCAKKyAgICA1MDY1MiwgNTA2NjgsIDUwNjg0LCA1MDcwMCwgNTA3MTYsIDUwNzMyLCA1MDc0OCwgNTA3NjQsIDUwNzgwLCA1MDc5NiwgCisgICAgNTA4MTIsIDUwODI4LCA1MDg0NCwgNTA4NjAsIDUwODc2LCA1MDg5MiwgNTA5MDgsIDUwOTI0LCA1MDk0MCwgNTA5NTYsIAorICAgIDUwOTcyLCA1MDk4OCwgNTEwMDQsIDUxMDIwLCA1MTAzNiwgNTEwNTIsIDUxMDY4LCA1MTA4NCwgNTExMDAsIDUxMTE2LCAKKyAgICA1MTEzMiwgNTExNDgsIDUxMTY0LCA1MTE4MCwgNTExOTYsIDUxMjEyLCA1MTIyOCwgNTEyNDQsIDUxMjYwLCA1MTI3NiwgCisgICAgNTEyOTIsIDUxMzA4LCA1MTMyNCwgNTEzNDAsIDUxMzU2LCA1MTM3MiwgNTEzODgsIDUxNDA0LCA1MTQyMCwgNTE0MzYsIAorICAgIDUxNDUyLCA1MTQ2OCwgNTE0ODQsIDUxNTAwLCA1MTUxNiwgNTE1MzIsIDUxNTQ4LCA1MTU2NCwgNTE1ODAsIDUxNTk2LCAKKyAgICA1MTYxMiwgNTE2MjgsIDUxNjQ0LCA1MTY2MCwgNTE2NzYsIDUxNjkyLCA1MTcwOCwgNTE3MjQsIDUxNzQwLCA1MTc1NiwgCisgICAgNTE3NzIsIDUxNzg4LCA1MTgwNCwgNTE4MjAsIDUxODM2LCA1MTg1MiwgNTE4NjgsIDUxODg0LCA1MTkwMCwgNTE5MTYsIAorICAgIDUxOTMyLCA1MTk0OCwgNTE5NjQsIDUxOTgwLCA1MTk5NiwgNTIwMTIsIDUyMDI4LCA1MjA0NCwgNTIwNjAsIDUyMDc2LCAKKyAgICA1MjA5MiwgNTIxMDgsIDUyMTI0LCA1MjE0MCwgNTIxNTYsIDUyMTcyLCA1MjE4OCwgNTIyMDQsIDUyMjIwLCA1MjIzNiwgCisgICAgNTIyNTIsIDUyMjY4LCA1MjI4NCwgNTIzMDAsIDUyMzE2LCA1MjMzMiwgNTIzNDgsIDUyMzY0LCA1MjM4MCwgNTIzOTYsIAorICAgIDUyNDEyLCA1MjQyOCwgNTI0NDQsIDUyNDYwLCA1MjQ3NiwgNTI0OTIsIDUyNTA4LCA1MjUyNCwgNTI1NDAsIDUyNTU2LCAKKyAgICA1MjU3MiwgNTI1ODgsIDUyNjA0LCA1MjYyMCwgNTI2MzYsIDUyNjUyLCA1MjY2OCwgNTI2ODQsIDUyNzAwLCA1MjcxNiwgCisgICAgNTI3MzIsIDUyNzQ4LCA1Mjc2NCwgNTI3ODAsIDUyNzk2LCA1MjgxMiwgNTI4MjgsIDUyODQ0LCA1Mjg2MCwgNTI4NzYsIAorICAgIDUyODkyLCA1MjkwOCwgNTI5MjQsIDUyOTQwLCA1Mjk1NiwgNTI5NzIsIDUyOTg4LCA1MzAwNCwgNTMwMjAsIDUzMDM2LCAKKyAgICA1MzA1MiwgNTMwNjgsIDUzMDg0LCA1MzEwMCwgNTMxMTYsIDUzMTMyLCA1MzE0OCwgNTMxNjQsIDUzMTgwLCA1MzE5NiwgCisgICAgNTMyMTIsIDUzMjI4LCA1MzI0NCwgNTMyNjAsIDUzMjc2LCA1MzI5MiwgNTMzMDgsIDUzMzI0LCA1MzM0MCwgNTMzNTYsIAorICAgIDUzMzcyLCA1MzM4OCwgNTM0MDQsIDUzNDIwLCA1MzQzNiwgNTM0NTIsIDUzNDY4LCA1MzQ4NCwgNTM1MDAsIDUzNTE2LCAKKyAgICA1MzUzMiwgNTM1NDgsIDUzNTY0LCA1MzU4MCwgNTM1OTYsIDUzNjEyLCA1MzYyOCwgNTM2NDQsIDUzNjYwLCA1MzY3NiwgCisgICAgNTM2OTIsIDUzNzA4LCA1MzcyNCwgNTM3NDAsIDUzNzU2LCA1Mzc3MiwgNTM3ODgsIDUzODA0LCA1MzgyMCwgNTM4MzYsIAorICAgIDUzODUyLCA1Mzg2OCwgNTM4ODQsIDUzOTAwLCA1MzkxNiwgNTM5MzIsIDUzOTQ4LCA1Mzk2NCwgNTM5ODAsIDUzOTk2LCAKKyAgICA1NDAxMiwgNTQwMjgsIDU0MDQ0LCA1NDA2MCwgNTQwNzYsIDU0MDkyLCA1NDEwOCwgNTQxMjQsIDU0MTQwLCA1NDE1NiwgCisgICAgNTQxNzIsIDU0MTg4LCA1NDIwNCwgNTQyMjAsIDU0MjM2LCA1NDI1MiwgNTQyNjgsIDU0Mjg0LCA1NDMwMCwgNTQzMTYsIAorICAgIDU0MzMyLCA1NDM0OCwgNTQzNjQsIDU0MzgwLCA1NDM5NiwgNTQ0MTIsIDU0NDI4LCA1NDQ0NCwgNTQ0NjAsIDU0NDc2LCAKKyAgICA1NDQ5MiwgNTQ1MDgsIDU0NTI0LCA1NDU0MCwgNTQ1NTYsIDU0NTcyLCA1NDU4OCwgNTQ2MDQsIDU0NjIwLCA1NDYzNiwgCisgICAgNTQ2NTIsIDU0NjY4LCA1NDY4NCwgNTQ3MDAsIDU0NzE2LCA1NDczMiwgNTQ3NDgsIDU0NzY0LCA1NDc4MCwgNTQ3OTYsIAorICAgIDU0ODEyLCA1NDgyOCwgNTQ4NDQsIDU0ODYwLCA1NDg3NiwgNTQ4OTIsIDU0OTA4LCA1NDkyNCwgNTQ5NDAsIDU0OTU2LCAKKyAgICA1NDk3MiwgNTQ5ODgsIDU1MDA0LCA1NTAyMCwgNTUwMzYsIDU1MDUyLCA1NTA2OCwgNTUwODQsIDU1MTAwLCA1NTExNiwgCisgICAgNTUxMzIsIDU1MTQ4LCA1NTE2NCwgNTUxODAsIDU1MTk2LCA1NTIxMiwgNTUyMjgsIDU1MjQ0LCA1NTI2MCwgNTUyNzYsIAorICAgIDU1MjkyLCA1NTMwOCwgNTUzMjQsIDU1MzQwLCA1NTM1NiwgNTUzNzIsIDU1Mzg4LCA1NTQwNCwgNTU0MjAsIDU1NDM2LCAKKyAgICA1NTQ1MiwgNTU0NjgsIDU1NDg0LCA1NTUwMCwgNTU1MTYsIDU1NTMyLCA1NTU0OCwgNTU1NjQsIDU1NTgwLCA1NTU5NiwgCisgICAgNTU2MTIsIDU1NjI4LCA1NTY0NCwgNTU2NjAsIDU1Njc2LCA1NTY5MiwgNTU3MDgsIDU1NzI0LCA1NTc0MCwgNTU3NTYsIAorICAgIDU1NzcyLCA1NTc4OCwgNTU4MDQsIDU1ODIwLCA1NTgzNiwgNTU4NTIsIDU1ODY4LCA1NTg4NCwgNTU5MDAsIDU1OTE2LCAKKyAgICA1NTkzMiwgNTU5NDgsIDU1OTY0LCA1NTk4MCwgNTU5OTYsIDU2MDEyLCA1NjAyOCwgNTYwNDQsIDU2MDYwLCA1NjA3NiwgCisgICAgNTYwOTIsIDU2MTA4LCA1NjEyNCwgNTYxNDAsIDU2MTU2LCA1NjE3MiwgNTYxODgsIDU2MjA0LCA1NjIyMCwgNTYyMzYsIAorICAgIDU2MjUyLCA1NjI2OCwgNTYyODQsIDU2MzAwLCA1NjMxNiwgNTYzMzIsIDU2MzQ4LCA1NjM2NCwgNTYzODAsIDU2Mzk2LCAKKyAgICA1NjQxMiwgNTY0MjgsIDU2NDQ0LCA1NjQ2MCwgNTY0NzYsIDU2NDkyLCA1NjUwOCwgNTY1MjQsIDU2NTQwLCA1NjU1NiwgCisgICAgNTY1NzIsIDU2NTg4LCA1NjYwNCwgNTY2MjAsIDU2NjM2LCA1NjY1MiwgNTY2NjgsIDU2Njg0LCA1NjcwMCwgNTY3MTYsIAorICAgIDU2NzMyLCA1Njc0OCwgNTY3NjQsIDU2NzgwLCA1Njc5NiwgNTY4MTIsIDU2ODI4LCA1Njg0NCwgNTY4NjAsIDU2ODc2LCAKKyAgICA1Njg5MiwgNTY5MDgsIDU2OTI0LCA1Njk0MCwgNTY5NTYsIDU2OTcyLCA1Njk4OCwgNTcwMDQsIDU3MDIwLCA1NzAzNiwgCisgICAgNTcwNTIsIDU3MDY4LCA1NzA4NCwgNTcxMDAsIDU3MTE2LCA1NzEzMiwgNTcxNDgsIDU3MTY0LCA1NzE4MCwgNTcxOTYsIAorICAgIDU3MjEyLCA1NzIyOCwgNTcyNDQsIDU3MjYwLCA1NzI3NiwgNTcyOTIsIDU3MzA4LCA1NzMyNCwgNTczNDAsIDU3MzU2LCAKKyAgICA1NzM3MiwgNTczODgsIDU3NDA0LCA1NzQyMCwgNTc0MzYsIDU3NDUyLCA1NzQ2OCwgNTc0ODQsIDU3NTAwLCA1NzUxNiwgCisgICAgNTc1MzIsIDU3NTQ4LCA1NzU2NCwgNTc1ODAsIDU3NTk2LCA1NzYxMiwgNTc2MjgsIDU3NjQ0LCA1NzY2MCwgNTc2NzYsIAorICAgIDU3NjkyLCA1NzcwOCwgNTc3MjQsIDU3NzQwLCA1Nzc1NiwgNTc3NzIsIDU3Nzg4LCA1NzgwNCwgNTc4MjAsIDU3ODM2LCAKKyAgICA1Nzg1MiwgNTc4NjgsIDU3ODg0LCA1NzkwMCwgNTc5MTYsIDU3OTMyLCA1Nzk0OCwgNTc5NjQsIDU3OTgwLCA1Nzk5NiwgCisgICAgNTgwMTIsIDU4MDI4LCA1ODA0NCwgNTgwNjAsIDU4MDc2LCA1ODA5MiwgNTgxMDgsIDU4MTI0LCA1ODE0MCwgNTgxNTYsIAorICAgIDU4MTcyLCA1ODE4OCwgNTgyMDQsIDU4MjE5LCAxNjc2MiwgNTgyMjgsIDU4MjM0LCA1ODI0MCwgNTgyNTAsIDU4MjU4LCAKKyAgICAxNDg5NCwgMTU0NDUsIDk5NjAsIDU4MjcxLCAxNTIwLCA1ODI3OSwgMzc2MSwgMjc0MzIsIDcxODMsIDU4Mjg1LCA1ODI5MCwgCisgICAgNTgyOTUsIDU4MzAwLCA1ODMwNSwgNTgzMTEsIDU4MzE2LCA1ODMyMiwgNTgzMjcsIDU4MzMzLCA1ODMzOCwgNTgzNDMsIAorICAgIDU4MzQ4LCA1ODM1MywgNTgzNTksIDU4MzY0LCA1ODM2OSwgNTgzNzQsIDU4Mzc5LCA1ODM4NCwgNTgzODksIDU4Mzk0LCAKKyAgICA1ODQwMCwgNTg0MDUsIDU4NDExLCA1ODQxOCwgMjU2MSwgNTg0MjMsIDU4NDI5LCA4NTI2LCA1ODQzMywgNTg0MzgsIAorICAgIDU4NDQ1LCA1ODQ1MywgNDAsIDU4NDU3LCA1ODQ2MywgNTg0NjgsIDU4NDczLCA1ODQ3NywgNTg0ODIsIDU4NDg2LCA1ODQ5MCwgCisgICAgMTA2ODQsIDU4NDk0LCA1ODUwNCwgNTg1MTcsIDU4NTI4LCA1ODU0MSwgNTg1NDgsIDU4NTU0LCA1ODU1OSwgNTg1NjUsIAorICAgIDU4NTcxLCA1ODU3NywgNTg1ODIsIDU4NTg3LCA1ODU5MiwgNTg1OTcsIDU4NjAxLCA1ODYwNiwgNTg2MTEsIDU4NjE2LCAKKyAgICA1ODYyMiwgNTg2MjgsIDU4NjM0LCA1ODYzOSwgNTg2NDMsIDU4NjQ4LCA1ODY1MywgNTg2NTcsIDU4NjYyLCA1ODY2NywgCisgICAgNTg2NzIsIDU4Njc2LCAxMDcwMCwgMTA3MTEsIDEwNzE2LCAxNTYzLCA1ODY4MCwgMTU2OCwgNTg2ODYsIDE2MjM5LCAKKyAgICA1ODY4OSwgNTg2OTUsIDE1OTksIDU4NzAxLCAxNjA1LCAxNjExLCAxMDc0NiwgNTg3MDYsIDU4NzE0LCA1ODcyMSwgNTg3MjUsIAorICAgIDU4NzMxLCA1ODczNiwgMzA5NzcsIDU4NzQxLCA1ODc0OCwgNTg3NTMsIDU4NzU3LCA1ODc2MSwgMTYxNiwgMTYzMzEsIAorICAgIDU4NzcwLCA1ODc3NCwgMTYzNDIsIDExMjUsIDU4Nzc4LCA1ODc4NSwgNTg3OTAsIDU4Nzk0LCAxNjM2NywgMTYyMCwgCisgICAgMzczNTAsIDU4Nzk3LCA1ODgwMiwgNTg4MTIsIDU4ODIxLCA1ODgyNiwgNTg4MzAsIDU4ODM2LCAxNjI1LCAzOTI1OSwgCisgICAgNTg4NDEsIDU4ODUwLCA1ODg1NiwgNTg4NjEsIDEwOTA0LCAxMDkxMCwgNTg4NjcsIDU4ODc5LCA1ODg5NiwgNTg5MTMsIAorICAgIDU4OTMwLCA1ODk0NywgNTg5NjQsIDU4OTgxLCA1ODk5OCwgNTkwMTUsIDU5MDMyLCA1OTA0OSwgNTkwNjYsIDU5MDgzLCAKKyAgICA1OTEwMCwgNTkxMTcsIDU5MTM0LCA1OTE1MSwgNTkxNjgsIDU5MTg1LCA1OTIwMiwgNTkyMTksIDU5MjM2LCA1OTI1MywgCisgICAgNTkyNzAsIDU5Mjg3LCA1OTMwNCwgNTkzMjEsIDU5MzM4LCA1OTM1NSwgNTkzNzIsIDU5Mzg5LCA1OTQwNiwgNTk0MjMsIAorICAgIDU5NDQwLCA1OTQ1NywgNTk0NzQsIDU5NDkxLCA1OTUwOCwgNTk1MjUsIDU5NTQyLCA1OTU1OSwgNTk1NzYsIDU5NTkzLCAKKyAgICA1OTYxMCwgNTk2MjcsIDU5NjQ0LCA1OTY2MSwgNTk2NzgsIDU5Njk1LCA1OTcxMiwgNTk3MjMsIDU5NzI4LCAxNjMwLCAKKyAgICA1OTczMiwgNTk3MzgsIDU5NzQzLCA1OTc0OCwgOTMyNiwgMTYzNSwgNTk3NTQsIDU5NzYzLCAyNzczMSwgNTk3NjgsIAorICAgIDU5Nzc5LCA1OTc4OSwgNTk3OTQsIDU5ODAxLCA1OTgwNywgNTk4MTIsIDU5ODE3LCAxNjYxOSwgNTk4MjEsIDEwOTIxLCAKKyAgICAxNjQwLCAxMDkyNiwgNTk4MjcsIDU5ODMyLCA1OTgzOCwgNTk4NDMsIDU5ODQ4LCA1OTg1MywgNTk4NTgsIDU5ODYzLCAKKyAgICA1OTg2OCwgNTk4NzMsIDU5ODc5LCA1OTg4NSwgNTk4OTEsIDU5ODk2LCA1OTkwMCwgNTk5MDUsIDU5OTEwLCA1OTkxNCwgCisgICAgNTk5MTksIDU5OTI0LCA1OTkyOSwgNTk5MzMsIDU5OTM4LCA1OTk0NCwgNTk5NDksIDU5OTU0LCA1OTk1OCwgNTk5NjMsIAorICAgIDU5OTY4LCA1OTk3NCwgNTk5NzksIDU5OTg0LCA1OTk5MCwgNTk5OTYsIDYwMDAxLCA2MDAwNSwgNjAwMTAsIDYwMDE1LCAKKyAgICA2MDAyMCwgNjAwMjQsIDYwMDI5LCA2MDAzNCwgNjAwMzksIDYwMDQ1LCA2MDA1MSwgNjAwNTYsIDYwMDYwLCA2MDA2NCwgCisgICAgNjAwNjksIDYwMDc0LCA2MDA3OSwgMjkxMjksIDYwMDgzLCA2MDA4OCwgNjAwOTMsIDYwMDk5LCA2MDEwNCwgNjAxMDksIAorICAgIDYwMTEzLCA2MDExOCwgNjAxMjMsIDYwMTI5LCA2MDEzNCwgNjAxMzksIDYwMTQ1LCA2MDE1MSwgNjAxNTYsIDYwMTYwLCAKKyAgICA2MDE2NSwgNjAxNzAsIDYwMTc0LCA2MDE3OSwgNjAxODQsIDYwMTg5LCA2MDE5NSwgNjAyMDEsIDYwMjA2LCA2MDIxMCwgCisgICAgNjAyMTUsIDYwMjIwLCA2MDIyNCwgNjAyMjksIDYwMjM0LCA2MDIzOSwgNjAyNDMsIDYwMjQ2LCAzMTYzOSwgNjAyNTEsIAorICAgIDYwMjU5LCAxNjY4NSwgMzY2MywgMTEwMTcsIDYwMjY1LCA2MDI3NSwgNjAyOTAsIDExMDIyLCA2MDMwMSwgNjAzMDYsIAorICAgIDYwMzE3LCA2MDMyOSwgNjAzNDEsIDYwMzUzLCAyNjk1LCA2MDM2NSwgNjAzNzAsIDYwMzgyLCA2MDM4NiwgNjAzOTIsIAorICAgIDYwMzk4LCA2MDQwMywgMTY1MiwgMTA3OCwgNjA0MTIsIDYwNDE3LCAzOTMwOSwgNjA0MjEsIDYwNDI1LCA2MDQzMCwgCisgICAgNjA0MzQsIDE2NzcwLCA2MDQzOSwgNjA0NDIsIDYwNDUwLCA2MDQ1OCwgMTY1NiwgMTEwNDcsIDExMDUzLCAxNjYxLCAKKyAgICA2MDQ2NiwgNjA0NzMsIDYwNDc4LCA2MDQ4NywgNjA0OTcsIDYwNTA0LCA2MDUwOSwgNjA1MTQsIDE2NjYsIDYwNTIxLCAKKyAgICA2MDUyNiwgMTY4ODUsIDYwNTMwLCA2MDUzNSwgNjA1NDIsIDYwNTQ4LCA2MDU1MiwgNjA1NjMsIDYwNTczLCAxNjkwNywgCisgICAgOTIzNCwgOTI0MSwgMTY3MSwgNjA1ODAsIDYwNTg2LCA2MDU5NCwgNjA2MDEsIDYwNjA3LCA2MDYxNCwgNjA2MjYsIDYwNjMyLCAKKyAgICA2MDYzNywgNjA2NDksIDYwNjYwLCA2MDY2OSwgNjA2NzksIDM3NDAsIDMwODEzLCAzMDgyMiwgMTY5NDcsIDE2NzYsIDE2ODAsIAorICAgIDYwNjg3LCA2MDY5OCwgNjA3MDMsIDE2ODMsIDYwNzExLCA2MDcxNiwgMTY5OTgsIDYwNzI4LCA2MDczNCwgNjA3MzksIAorICAgIDYwNzQ3LCAxNjg4LCA2MDc1MiwgNjA3NTcsIDYwNzY1LCA2MDc3MywgNjA3ODAsIDYwNzg5LCA2MDc5NywgNjA4MDYsIAorICAgIDE2OTMsIDYwODEwLCAxNjk4LCA2MDgxNSwgNjA4MjIsIDE3MDcyLCA2MDgzMCwgNjA4MzYsIDYwODQxLCA2MDg0OSwgCisgICAgNjA4NTYsIDYwODY0LCAyMjU3NCwgNjA4NjksIDExMTgyLCA2MDg3OCwgNjA4ODQsIDYwODkxLCA2MDg5OCwgNjA5MDQsIAorICAgIDYwOTE0LCA2MDkyMCwgNjA5MjUsIDYwOTM2LCA2MDk0MSwgNjA5NDksIDExMTkxLCAxMTE5NiwgNjA5NTcsIDYwOTYzLCAKKyAgICA2MDk3MSwgMzgwNSwgMTcxMTQsIDM5Mzk3LCA2MDk3NiwgNjA5ODIsIDYwOTg3LCA2MDk5NSwgNjEwMDIsIDEyMDM2LCAKKyAgICA2MTAwNywgNjEwMTMsIDE3MDksIDYxMDE4LCA2MTAyMSwgMTEzMiwgNjEwMjcsIDYxMDMyLCA2MTAzNywgNjEwNDMsIAorICAgIDYxMDQ4LCA2MTA1MywgNjEwNTgsIDYxMDYzLCA2MTA2OCwgNjEwNzMsIDE3MTgsIDksIDYxMDc5LCA2MTA4MywgNjEwODgsIAorICAgIDYxMDkyLCA2MTA5NiwgNjExMDAsIDMxODc5LCA2MTEwNSwgNjExMTAsIDYxMTE1LCA2MTExOSwgNjExMjIsIDYxMTI2LCAKKyAgICA2MTEzMCwgNjExMzUsIDYxMTM5LCA2MTE0NCwgNjExNDgsIDM0NjE2LCAzNDYyMSwgMzQ2MjYsIDYxMTUxLCA2MTE1OCwgCisgICAgNjExNjQsIDM5MTE4LCA2MTE3NCwgMzQ2MzIsIDMyMTM3LCAzMTg5NCwgMzE5MDAsIDM0NjQ4LCAzMTkwNiwgNjExNzksIAorICAgIDYxMTg0LCAzMjE3MCwgNjExODgsIDYxMTkxLCA2MTE5NSwgNjEyMDIsIDYxMjA1LCA2MTIxMCwgNjEyMTQsIDYxMjE4LCAKKyAgICA2MTIyMSwgNjEyMzEsIDYxMjQzLCA2MTI1MCwgNjEyNTYsIDYxMjYzLCAzMzU3MywgNjEyNjYsIDg1NDMsIDg3NywgNjEyNjksIAorICAgIDYxMjczLCA2MTI3OCwgMzY5MCwgNjEyODIsIDYxMjg1LCAxMzYzMiwgNjEyOTIsIDYxMjk5LCA2MTMxMiwgNjEzMjAsIAorICAgIDYxMzI5LCA2MTMzOCwgNjEzNDMsIDYxMzUzLCA2MTM2NiwgNjEzNzgsIDYxMzg1LCA2MTM5MCwgNjEzOTksIDYxNDEyLCAKKyAgICAzNjA2MCwgNjE0MzAsIDYxNDM1LCA2MTQ0MiwgNjE0NDgsIDY1NiwgNjE0NTMsIDYxNDYxLCA2MTQ2OCwgMjcyNzEsIDYyNywgCisgICAgNjE0NzQsIDYxNDgwLCA2MTQ5MCwgNjE0OTYsIDYxNTAxLCAzMTkyNCwgNjAwMywgMzE5MzgsIDYxNTA1LCA2MTUxNSwgCisgICAgNjE1MjAsIDYxNTMwLCA2MTU0NSwgNjE1NTEsIDYxNTU3LCAzMTk0OCwgNjE1NjIsIDMxMDk0LCA2MTU2NiwgNjE1NzEsIAorICAgIDYxNTc2LCA2MTU4MCwgNjE1ODUsIDE2OTUwLCA2MTU5MiwgNjE1OTcsIDYxNjAxLCA2MDQ0LCAzMTk3NCwgNjE2MDUsIAorICAgIDYxNjExLCAzMTIsIDYxNjIxLCA2MTYyOCwgNjE2MzUsIDYxNjQwLCA2MTY0OSwgNTg4MDYsIDYxNjU1LCA2MTY2MywgCisgICAgNjE2NjcsIDYxNjcxLCA2MTY3NSwgNjE2NzksIDYxNjg0LCA2MTY4OCwgNjE2OTQsIDYxNzAyLCA2MTcwNywgNjE3MTIsIAorICAgIDYxNzE2LCA2MTcyMSwgNjE3MjUsIDYxNzI5LCA2MTczNSwgNjE3NDEsIDYxNzQ2LCA2MTc1MCwgMzIwOTgsIDYxNzU1LCAKKyAgICAzMjEwNCwgMzIxMTAsIDYxNzYwLCA2MTc2NiwgNjE3NzMsIDYxNzc4LCA2MTc4MiwgMzExMTEsIDE2NjEyLCA2MTc4NSwgCisgICAgNjE3ODksIDYxNzk0LCA2MTgwMSwgNjE4MDcsIDYxODExLCA2MTgxNiwgMzg4MjgsIDYxODIyLCA2MTgyNiwgNjE4MzAsIAorICAgIDYxODM1LCA2MTg0MSwgNjE4NDcsIDYxODU5LCA2MTg2OCwgNjE4NzgsIDYxODg0LCA2MTg5MSwgNjE4OTYsIDYxOTAxLCAKKyAgICA2MTkwNSwgNjE5MDgsIDYxOTE0LCA2MTkyMSwgNjE5MjYsIDYxOTMxLCA2MTkzOCwgNjE5NDUsIDYxOTUxLCA2MTk1NiwgCisgICAgNjE5NjEsIDYxOTY5LCAzMjExNSwgMjQyMywgNjE5NzQsIDYxOTc5LCA2MTk4NSwgNjE5OTAsIDYxOTk2LCA2MjAwMSwgCisgICAgNjIwMDYsIDYyMDExLCA2MjAxNywgMzIxMzYsIDYyMDIyLCA2MjAyOCwgNjIwMzQsIDYyMDQwLCAzMjIwMCwgNjIwNDUsIAorICAgIDYyMDUwLCA2MjA1NSwgMzIyMTEsIDYyMDYwLCA2MjA2NSwgNjIwNzAsIDYyMDc2LCA2MjA4MiwgMzIyMTYsIDYyMDg3LCAKKyAgICA2MjA5MiwgNjIwOTcsIDMyMjcxLCAzMjI3NywgNjIxMDIsIDYyMTA3LCAzMjI4MiwgNjIxMTIsIDI3OTU4LCAzMjMwNCwgCisgICAgMzIzMDgsIDYyMTE3LCA2MjA5MywgNjIxMjEsIDYyMTI5LCA2MjEzNSwgNjIxNDMsIDYyMTUwLCA2MjE1NiwgNjIxNjYsIAorICAgIDYyMTcyLCA2MjE3OSwgMTA2MzEsIDMyMzIyLCA2MjE4NSwgNjIxOTgsIDYyMjA3LCA2MjIxMywgNjIyMjIsIDYyMjI4LCAKKyAgICAyMzUxMiwgNjIyMzUsIDYyMjQyLCA2MjI1MiwgMzIyNzIsIDYyMjU1LCA2MjI2MiwgNjIyNjcsIDYyMjcxLCA2MjI3NSwgCisgICAgNjIyODAsIDYxMjAsIDYyMjg0LCA2MjI4OSwgNjIyOTQsIDM0NzEwLCAzNDcxNSwgNjIyOTgsIDM0NzI5LCA2MjMwMywgCisgICAgMzQ3MzQsIDYyMzA4LCA2MjMxNCwgMzQ3NDYsIDM0NzUyLCAzNDc1OCwgNjIzMTksIDYyMzI1LCAyMjUzOSwgNjIzMzYsIAorICAgIDYyMzM5LCA2MjM1MSwgNjIzNTksIDMyMzQ1LCA2MjM2MywgNjIzNzIsIDYyMzgyLCA2MjM5MSwgMzIzNTUsIDYyMzk2LCAKKyAgICA2MjQwMywgNjI0MTIsIDYyNDE4LCA2MjQyNiwgNjI0MzMsIDYwOTUsIDQzOTcsIDYyNDM4LCAzMjI4MywgNjI0NDQsIAorICAgIDYyNDQ3LCA2MjQ1MywgNjI0NjAsIDYyNDY1LCA2MjQ3MCwgMjM0MjIsIDYyNDc0LCA2MjQ4MCwgNjI0ODYsIDYyNDkxLCAKKyAgICA2MjQ5NiwgNjI1MDAsIDYyNTA2LCA2MjUxMiwgMzM0ODMsIDg2MywgMzU3MjMsIDM2NjQ0LCAzNjY1MCwgMzIzOTEsIAorICAgIDYyNTE3LCA2MjUyMSwgNjI1MjUsIDYyNTI4LCA2MjU0MSwgNjI1NDcsIDYyNTUxLCA2MjU1NCwgNjI1NTksIDMzNzg2LCAKKyAgICA2MjU2MywgMzExMTYsIDIxMjg3LCA2MjU2OSwgNjAyNCwgNjAzMiwgOTA3NSwgNjI1NzIsIDYyNTc3LCA2MjU4MiwgNjI1ODcsIAorICAgIDYyNTkyLCA2MjU5NywgNjI2MDIsIDYyNjA3LCA2MjYxMiwgNjI2MTcsIDYyNjIzLCA2MjYyOCwgNjI2MzMsIDYyNjM5LCAKKyAgICA2MjY0NCwgNjI2NDksIDYyNjU0LCA2MjY1OSwgNjI2NjQsIDYyNjY5LCA2MjY3NSwgNjI2ODAsIDYyNjg2LCA2MjY5MSwgCisgICAgNjI2OTYsIDYyNzAxLCA2MjcwNiwgNjI3MTEsIDYyNzE2LCA2MjcyMSwgNjI3MjYsIDYyNzMxLCA2MjczNiwgNjI3NDIsIAorICAgIDYyNzQ3LCA2Mjc1MiwgNjI3NTcsIDYyNzYyLCA2Mjc2NywgNjI3NzIsIDYyNzc4LCA2Mjc4MywgNjI3ODgsIDYyNzkzLCAKKyAgICA2Mjc5OCwgNjI4MDMsIDYyODA4LCA2MjgxMywgNjI4MTgsIDYyODIzLCA2MjgyOSwgNjI4MzQsIDYyODM5LCA2Mjg0NCwgCisgICAgNjI4NDksIDYyODU1LCA2Mjg2MSwgNjI4NjYsIDYyODcyLCA2Mjg3NywgNjI4ODIsIDYyODg3LCA2Mjg5MiwgNjI4OTcsIAorICAgIDE1MTMsIDI0NSwgNjI5MDIsIDYyOTA2LCA2MjkxMCwgNjI5MTQsIDI1MTMzLCA2MjkxOCwgNjI5MjIsIDYyOTI3LCA2MjkzMSwgCisgICAgNjI5MzYsIDYyOTQwLCA2Mjk0NSwgNjI5NTAsIDYyOTU1LCA2Mjk1OSwgNjI5NjMsIDYyOTY4LCA2Mjk3MiwgMTMzNjksIAorICAgIDYyOTc3LCA2Mjk4MSwgNjI5ODgsIDYyOTk4LCAxNTIwNiwgNjMwMDcsIDYzMDE2LCA2MzAyMCwgNjMwMjUsIDYzMDMwLCAKKyAgICA2MzAzNCwgMjQ5MjQsIDMwMTksIDYzMDM4LCA2MzA0NCwgMTczNjMsIDYzMDQ4LCA2MzA1NywgNjMwNjUsIDYzMDcxLCAKKyAgICA2MzA4MywgNjMwOTUsIDYzMDk5LCA2MzEwNCwgNjMxMDgsIDYzMTE0LCA2MzEyMCwgNjMxMjUsIDYzMTM1LCA2MzE0NSwgCisgICAgNjMxNTEsIDYzMTU2LCA2MzE2MCwgNjMxNjUsIDYzMTcxLCA2MzE4MCwgNjMxODksIDYzMTk3LCAxNTU2MCwgNjMyMDEsIAorICAgIDYzMjEwLCA2MzIxOCwgNjMyMzAsIDYzMjQxLCA2MzI1MiwgNjMyNjEsIDYzMjY1LCA2MzI3NCwgNjMyODQsIDYzMjkyLCAKKyAgICA2MzI5OCwgNjMzMDMsIDYzMzA5LCA2MzMxNCwgOTgsIDMwOTI1LCA2MzMyNSwgMjYyNjYsIDI2Mjc2LCA2MzMzMSwgNjMzMzgsIAorICAgIDYzMzQ0LCA2MzM0OCwgNjMzNTgsIDYzMzY5LCA2MzM3NywgNjMzODYsIDYzMzkxLCA2MzM5NiwgNjM0MDAsIDE3MzE3LCAKKyAgICA2MzQwOCwgNjM0MTIsIDYzNDE4LCA2MzQyOCwgNjM0MzUsIDYzNDQxLCAzNDgwOSwgNjM0NDcsIDYzNDQ5LCA2MzQ1MiwgCisgICAgNjM0NTYsIDYzNDY2LCA2MzQ3MiwgNjM0NzksIDEzMzE1LCA2MzQ4NiwgNjM0OTIsIDYzNTAxLCA2MzUxMCwgNjM1MTYsIAorICAgIDYzNTIyLCA2MzUyOCwgNjM1MzMsIDYzNTQwLCA2MzU0NywgNjM1NTMsIDYzNTY2LCA2MzU3NSwgNjM1ODQsIDYzNTg5LCAKKyAgICA2MzU5MywgNjM1OTksIDYzNjA2LCA2MzYxMywgNjM2MjAsIDYzNjI3LCA2MzYzNCwgNjM2MzksIDYzNjQzLCA2MzY0NywgCisgICAgNjM2NTAsIDYzNjYwLCA2MzY2NCwgNjM2NzYsIDYzNjg1LCA2MzY4OSwgNjM2OTQsIDYzNjk4LCA2MzcwNCwgNjM3MDksIAorICAgIDYzNzE2LCA2MzcyNSwgNjM3MzMsIDYzNzQxLCA2Mzc0NiwgNjM3NTAsIDYzNzU1LCA2Mzc2MCwgNjM3NzAsIDYzNzc4LCAKKyAgICA2Mzc4MywgNjM3ODcsIDYzNzkxLCA2Mzc5NywgNjM4MDksIDYzODE3LCA2MzgyNywgNjM4MzQsIDYzODQwLCA2Mzg0NSwgCisgICAgNjM4NDksIDYzODUzLCA2Mzg1NywgNjM4NjYsIDYzODc1LCA2Mzg4NCwgNjM4OTAsIDYzODk2LCA2MzkwMiwgNjM5MDcsIAorICAgIDYzOTE0LCA2MzkyMCwgNjM5MjgsIDYzOTM1LCAxMjQ2MywgNjM5NDEsIDYzOTQ3LCA2Mzk1MSwgMTQyNDQsIDYzOTU1LCAKKyAgICA2Mzk2MCwgNjM5NzAsIDYzOTc5LCA2Mzk4NSwgNjM5OTEsIDYzOTk5LCA2NDAwNiwgNjQwMTAsIDY0MDE0LCA2NDAyMCwgCisgICAgNjQwMjgsIDY0MDM1LCA2NDA0MSwgNjQwNTIsIDY0MDU2LCA2NDA2MCwgNjQwNjQsIDY0MDY3LCA2NDA3MywgNjQwNzgsIAorICAgIDY0MDgyLCA2NDA4NiwgNjQwOTUsIDY0MTAzLCA2NDExMCwgNjQxMTYsIDY0MTIzLCAyNDA0NiwgMzg4NzAsIDY0MTI4LCAKKyAgICA2NDEzNiwgNjQxNDAsIDY0MTQ0LCA2NDE0NywgNjQxNTUsIDY0MTYyLCA2NDE2OCwgNjQxNzcsIDY0MTg1LCA2NDE5MSwgCisgICAgNjQxOTYsIDY0MjAwLCA2NDIwNSwgNjQyMDksIDY0MjEzLCA2NDIxOCwgNjQyMjcsIDY0MjMxLCA2NDIzOCwgNjQyNDUsIAorICAgIDY0MjUxLCA2NDI1OSwgNjQyNjUsIDY0Mjc2LCA2NDI4NCwgNjQyOTAsIDIyNjY5LCA2NDI5OSwgNjQzMDYsIDY0MzEzLCAKKyAgICA2NDMyMCwgNjQzMjcsIDY0MzM0LCA0MTkwNywgMTMxNTMsIDY0MzQxLCA2NDM0OCwgNjQzNTMsIDM0ODQ1LCA2MjE3LCAKKyAgICA2NDM1OSwgNjQzNjQsIDY0MzY5LCA2NDM3NSwgNjQzODEsIDY0Mzg3LCA2NDM5MiwgNjQzOTcsIDY0NDAyLCA2NDQwNywgCisgICAgNjQ0MTMsIDY0NDE4LCA2NDQyNCwgNjQ0MjksIDY0NDM1LCA2NDQ0MCwgNjQ0NDUsIDY0NDUwLCA2NDQ1NSwgNjQ0NjAsIAorICAgIDY0NDY1LCA2NDQ3MCwgNjQ0NzYsIDY0NDgxLCA2NDQ4NywgNjQ0OTIsIDY0NDk3LCA2NDUwMiwgNjQ1MDcsIDY0NTEyLCAKKyAgICA2NDUxNywgNjQ1MjMsIDY0NTI4LCA2NDUzMywgNjQ1MzgsIDY0NTQzLCA2NDU0OCwgNjQ1NTMsIDY0NTU4LCA2NDU2MywgCisgICAgNjQ1NjgsIDY0NTczLCA2NDU3OSwgNjQ1ODQsIDY0NTg5LCA2NDU5NCwgNjQ1OTksIDY0NjA0LCA2NDYwOSwgNjQ2MTQsIAorICAgIDY0NjE5LCA2NDYyNSwgNjQ2MzAsIDY0NjM1LCA2NDY0MCwgNjQ2NDUsIDY0NjUwLCA2NDY1NSwgNjQ2NjAsIDY0NjY1LCAKKyAgICA2NDY3MCwgNjQ2NzUsIDY0NjgwLCA2NDY4NSwgNjQ2OTEsIDE4MzQsIDIyNCwgMzc0NDYsIDY0Njk2LCA2NDY5OSwgNjQ3MDQsIAorICAgIDY0NzA4LCA2NDcxMSwgNjQ3MTYsIDYzNzM3LCA2NDcyNywgNjQ3MzcsIDY0NzQ0LCA2NDc2MCwgNjQ3NjksIDY0Nzc5LCAKKyAgICA2NDc4OSwgNjQ3OTcsIDY0ODExLCA2NDgxOSwgNjQ4MjMsIDY0ODI2LCA2NDgzMywgNjQ4MzksIDY0ODUwLCA2NDg2MiwgCisgICAgNjQ4NzMsIDY0ODgyLCA2NDg4OSwgMTI5NywgMjMzMTEsIDY0ODk5LCAyNTkwLCA2NDkwMywgNjQ5MTIsIDExMzgsIDE3MjkwLCAKKyAgICAzODA4MywgNjQ5MjAsIDY0OTI4LCA2NDk0MiwgNjQ5NTUsIDY0OTU5LCA2NDk2NCwgNjQ5NjksIDY0OTc0LCA2NDk4MCwgCisgICAgNjQ5ODYsIDY0OTkxLCA4NTM1LCA2NDk5NiwgNjUwMDAsIDY1MDA4LCAxMTA0OCwgNjUwMTMsIDY1MDE5LCA2NTAyOCwgCisgICAgMTcyMSwgMTEwNjAsIDczNiwgNjUwMzIsIDY1MDQxLCA2NTA1MSwgMjcwMzAsIDY1MDYwLCA2NTA2NiwgMTY4NjIsIDY1MDcyLCAKKyAgICA2NTA3NiwgMzk2NCwgMTEzOTEsIDY1MDgyLCA2NTA4OSwgNjA2OTMsIDY1MDkzLCA2NTA5NywgMzk4OCwgMTg5LCAxNDE1OSwgCisgICAgNjUxMDMsIDY1MTE1LCA2NTExOSwgNjUxMjUsIDI3NzUxLCA2NTEyOSwgMTEzNzksIDI3MzAsIDQsIDY1MTM0LCA2NTE0NCwgCisgICAgNjUxNTAsIDY1MTYxLCA2NTE2OCwgNjUxNzQsIDY1MTgwLCA2NTE4OCwgNjUxOTUsIDY1MjAxLCA2NTIxMSwgNjUyMjEsIAorICAgIDY1MjMxLCAyMzQ5OSwgMTMwOSwgNjUyNDAsIDY1MjQ0LCA2NTI0OCwgNjUyNTQsIDY1MjU4LCAyNzUzLCAyNzU5LCA4NTMyLCAKKyAgICAyMjY0LCA2NTI2MiwgNjUyNjYsIDY1Mjc1LCA2NTI4MywgNjUyOTQsIDY1MzAyLCA2NTMxMCwgNjUzMTYsIDY1MzIxLCAKKyAgICA2NTMzMiwgNjUzNDMsIDY1MzUxLCA2NTM1NywgOTY5NCwgNjUzNjIsIDY1MzcwLCA2NTM3NCwgNjUzNzgsIDY1MzgyLCAKKyAgICA2NTM5NCwgMjgxMzYsIDY1NDAxLCA2NTQxMSwgNjU0MTcsIDY1NDIzLCA5Nzk2LCA2NTQzMywgNjU0NDQsIDY1NDU0LCAKKyAgICA2NTQ2MywgNjU0NjcsIDY1NDc0LCAxMTQwLCAxMTcwLCA2NTQ4NCwgNjU0ODksIDY1NDk3LCA2NTUwNSwgNjU1MTYsIAorICAgIDY1NTIzLCA2NTUzNywgMTQwODgsIDM5MywgNjU1NDcsIDY1NTUxLCA2NTU1OSwgNjU1NjgsIDY1NTc2LCA2NTU4MiwgCisgICAgNjU1OTYsIDY1NjAzLCA2NTYwOSwgNjU2MTgsIDY1NjI1LCA2NTYzNSwgNjU2NDMsIDM4MTIsIDE1NiwgNjU2NTEsIDY1NjYyLCAKKyAgICA2NTY2NiwgNjU2NzgsIDI3OTQ5LCAxNjEsIDY1Njg0LCA2NTY4OSwgNjU2OTMsIDY1NzAwLCA2NTcwNiwgNjU3MTQsIAorICAgIDY1NzIxLCA4ODE4LCA2NTcyOCwgNjU3MzcsIDY1NzQ1LCAzODc4LCA2NTc1OCwgODE5OSwgNjU3NjIsIDI3OTgsIDQ0MywgCisgICAgNjU3NjcsIDY1NzgwLCA2NTc4NSwgMTgzMywgNjUwLCA2NTc4OSwgMzg5NSwgNjU3OTcsIDY1ODAzLCA2NTgwNywgOTMxLCAKKyAgICA2NTgxNywgNjU4MjYsIDY1ODMxLCAxNDkyOCwgMTQ5MzUsIDQ1MjY5LCA2NTgzNSwgMzgyMiwgMTMwNDEsIDY1ODQzLCAKKyAgICA2NTg1MCwgMjM1NTUsIDY1ODU0LCA2NTg2MSwgNjU4NjcsIDY1ODcyLCA2NTg3NywgMTQ5NDgsIDM3MiwgNjU4ODIsIAorICAgIDY1ODk0LCA2NTkwMCwgNjU5MDgsIDI4MTAsIDE3NTMsIDY1OTE2LCA2NTkxOCwgNjU5MjMsIDY1OTI4LCA2NTkzMywgCisgICAgNjU5MzksIDY1OTQ0LCA2NTk0OSwgNjU5NTQsIDY1OTU5LCA2NTk2NCwgNjU5NjksIDY1OTc1LCA2NTk4MCwgNjU5ODUsIAorICAgIDY1OTkwLCA2NTk5NSwgNjYwMDAsIDY2MDA1LCA2NjAxMCwgNjYwMTUsIDY2MDIxLCA2NjAyNiwgNjYwMzEsIDY2MDM2LCAKKyAgICA2NjA0MiwgNjYwNDcsIDY2MDUzLCA2NjA1OCwgNjYwNjMsIDY2MDY4LCA2NjA3MywgNjYwNzgsIDY2MDgzLCA2NjA4OCwgCisgICAgNjYwOTQsIDY2MDk5LCA2NjEwNSwgNjYxMTAsIDY2MTE1LCA2NjEyMCwgNjYxMjUsIDY2MTMwLCA2NjEzNSwgNjYxNDAsIAorICAgIDY2MTQ1LCA2NjE1MSwgNjYxNTYsIDY2MTYxLCA2NjE2NiwgNjYxNzAsIDY2MTc0LCA2NjE3OSwgNjYxODMsIDY2MTg4LCAKKyAgICA2NjE5MywgNjYxOTksIDY2MjA0LCA2NjIwOCwgNjYyMTMsIDY2MjE3LCA2NjIyMCwgNjYyMjIsIDY2MjI2LCA2NjIyOSwgCisgICAgNjYyMzQsIDY2MjM4LCA2NjI0MiwgNjYyNDYsIDY2MjUwLCA2NjI1OSwgNjYyNjMsIDMyNTQ5LCA2NjI2NiwgMzI1NTQsIAorICAgIDY2MjczLCA2NjI3OCwgMzI1NTksIDY2Mjg3LCA2NjI5NiwgMzI1NjUsIDY2MzAxLCAzMjU3MCwgNjYzMTAsIDY2MzE1LCAKKyAgICAxMTU3OCwgNjYzMTksIDY2MzI0LCA2NjMyOSwgMzI1NzUsIDY2MzMzLCA0MDIyNSwgNjYzMzcsIDY2MzQwLCA2NjM0NCwgCisgICAgODIxMSwgNjYzNTAsIDY2MzU1LCA2NjM1OSwgMzcwNSwgMzI1ODAsIDY2MzYyLCA2NjM2NiwgNjYzNjksIDY2Mzc0LCAKKyAgICA2NjM3OCwgNjYzODQsIDY2MzkyLCA2NjQwNSwgNjY0MTQsIDY2NDIwLCA2NjQyNSwgNjY0MzEsIDY2NDM1LCA2NjQ0MSwgCisgICAgNjY0NDksIDY2NDU0LCA2NjQ1OCwgNjY0NjUsIDY2NDcxLCA2NjQ3OSwgNjY0ODgsIDY2NDk2LCAzMjU4MywgNjY1MDMsIAorICAgIDY2NTEzLCA2NjUyMiwgNjY1MzUsIDY2NTQwLCA2NjU0NSwgNjY1NTQsIDY2NTYwLCA2NjU2NywgNjY1NzgsIDY2NTkwLCAKKyAgICA2NjU5NywgNjY2MDYsIDY2NjE1LCA2NjYyNCwgNjY2MzEsIDY2NjM3LCA2NjY0NCwgNjY2NTIsIDY2NjU5LCA2NjY2NywgCisgICAgNjY2NzYsIDY2Njg0LCA2NjY5MSwgNjY2OTksIDY2NzA4LCA2NjcxNiwgNjY3MjUsIDY2NzM1LCA2Njc0NCwgNjY3NTIsIAorICAgIDY2NzU5LCA2Njc2NywgNjY3NzYsIDY2Nzg0LCA2Njc5MywgNjY4MDMsIDY2ODEyLCA2NjgyMCwgNjY4MjksIDY2ODM5LCAKKyAgICA2Njg0OCwgNjY4NTgsIDY2ODY5LCA2Njg3OSwgNjY4ODgsIDY2ODk2LCA2NjkwMywgNjY5MTEsIDY2OTIwLCA2NjkyOCwgCisgICAgNjY5MzcsIDY2OTQ3LCA2Njk1NiwgNjY5NjQsIDY2OTczLCA2Njk4MywgNjY5OTIsIDY3MDAyLCA2NzAxMywgNjcwMjMsIAorICAgIDY3MDMyLCA2NzA0MCwgNjcwNDksIDY3MDU5LCA2NzA2OCwgNjcwNzgsIDY3MDg5LCA2NzA5OSwgNjcxMDgsIDY3MTE4LCAKKyAgICA2NzEyOSwgNjcxMzksIDY3MTUwLCA2NzE2MiwgNjcxNzMsIDY3MTgzLCA2NzE5MiwgNjcyMDAsIDY3MjA3LCA2NzIxNSwgCisgICAgNjcyMjQsIDY3MjMyLCA2NzI0MSwgNjcyNTEsIDY3MjYwLCA2NzI2OCwgNjcyNzcsIDY3Mjg3LCA2NzI5NiwgNjczMDYsIAorICAgIDY3MzE3LCA2NzMyNywgNjczMzYsIDY3MzQ0LCA2NzM1MywgNjczNjMsIDY3MzcyLCA2NzM4MiwgNjczOTMsIDY3NDAzLCAKKyAgICA2NzQxMiwgNjc0MjIsIDY3NDMzLCA2NzQ0MywgNjc0NTQsIDY3NDY2LCA2NzQ3NywgNjc0ODcsIDY3NDk2LCA2NzUwNCwgCisgICAgNjc1MTMsIDY3NTIzLCA2NzUzMiwgNjc1NDIsIDY3NTUzLCA2NzU2MywgNjc1NzIsIDY3NTgyLCA2NzU5MywgNjc2MDMsIAorICAgIDY3NjE0LCA2NzYyNiwgNjc2MzcsIDY3NjQ3LCA2NzY1NiwgNjc2NjYsIDY3Njc3LCA2NzY4NywgNjc2OTgsIDY3NzEwLCAKKyAgICA2NzcyMSwgNjc3MzEsIDY3NzQyLCA2Nzc1NCwgNjc3NjUsIDY3Nzc3LCA2Nzc5MCwgNjc4MDIsIDY3ODEzLCA2NzgyMywgCisgICAgNjc4MzIsIDY3ODQwLCA2Nzg0NywgNjc4NTUsIDY3ODY0LCA2Nzg3MiwgNjc4ODEsIDY3ODkxLCA2NzkwMCwgNjc5MDgsIAorICAgIDY3OTE3LCA2NzkyNywgNjc5MzYsIDY3OTQ2LCA2Nzk1NywgNjc5NjcsIDY3OTc2LCA2Nzk4NCwgNjc5OTMsIDY4MDAzLCAKKyAgICA2ODAxMiwgNjgwMjIsIDY4MDMzLCA2ODA0MywgNjgwNTIsIDY4MDYyLCA2ODA3MywgNjgwODMsIDY4MDk0LCA2ODEwNiwgCisgICAgNjgxMTcsIDY4MTI3LCA2ODEzNiwgNjgxNDQsIDY4MTUzLCA2ODE2MywgNjgxNzIsIDY4MTgyLCA2ODE5MywgNjgyMDMsIAorICAgIDY4MjEyLCA2ODIyMiwgNjgyMzMsIDY4MjQzLCA2ODI1NCwgNjgyNjYsIDY4Mjc3LCA2ODI4NywgNjgyOTYsIDY4MzA2LCAKKyAgICA2ODMxNywgNjgzMjcsIDY4MzM4LCA2ODM1MCwgNjgzNjEsIDY4MzcxLCA2ODM4MiwgNjgzOTQsIDY4NDA1LCA2ODQxNywgCisgICAgNjg0MzAsIDY4NDQyLCA2ODQ1MywgNjg0NjMsIDY4NDcyLCA2ODQ4MCwgNjg0ODksIDY4NDk5LCA2ODUwOCwgNjg1MTgsIAorICAgIDY4NTI5LCA2ODUzOSwgNjg1NDgsIDY4NTU4LCA2ODU2OSwgNjg1NzksIDY4NTkwLCA2ODYwMiwgNjg2MTMsIDY4NjIzLCAKKyAgICA2ODYzMiwgNjg2NDIsIDY4NjUzLCA2ODY2MywgNjg2NzQsIDY4Njg2LCA2ODY5NywgNjg3MDcsIDY4NzE4LCA2ODczMCwgCisgICAgNjg3NDEsIDY4NzUzLCA2ODc2NiwgNjg3NzgsIDY4Nzg5LCA2ODc5OSwgNjg4MDgsIDY4ODE4LCA2ODgyOSwgNjg4MzksIAorICAgIDY4ODUwLCA2ODg2MiwgNjg4NzMsIDY4ODgzLCA2ODg5NCwgNjg5MDYsIDY4OTE3LCA2ODkyOSwgNjg5NDIsIDY4OTU0LCAKKyAgICA2ODk2NSwgNjg5NzUsIDY4OTg2LCA2ODk5OCwgNjkwMDksIDY5MDIxLCA2OTAzNCwgNjkwNDYsIDY5MDU3LCA2OTA2OSwgCisgICAgNjkwODIsIDY5MDk0LCA2OTEwNywgNjkxMjEsIDY5MTM0LCA2OTE0NiwgNjkxNTcsIDY5MTY3LCA2OTE3NiwgNjkxODQsIAorICAgIDY5MTkxLCA2OTE5NiwgODA1OCwgNjkyMDMsIDMyNTkzLCA2OTIwOCwgNjkyMTMsIDMyNTk4LCA2OTIxOSwgMjA5MjksIAorICAgIDMyNjAzLCA2OTIyNCwgNjkyMzAsIDY5MjM4LCA2OTI0NCwgNjkyNTAsIDY5MjU3LCA2OTI2NCwgNjkyNjksIDY5MjczLCAKKyAgICA2OTI3NiwgNjkyODAsIDY5Mjg5LCA2OTI5NSwgNjkzMDcsIDY5MzE4LCA2OTMyMiwgMzA4MSwgODAzMywgNjkzMjcsIAorICAgIDY5MzMwLCA2OTMzMiwgNjkzMzYsIDY5MzQwLCA2OTM0NCwgNjkzNTAsIDY5MzU1LCAyNTk0NCwgNjkzNjAsIDY5MzY0LCAKKyAgICA2OTM2NywgNjkzNzIsIDY5Mzc2LCA2OTM4MywgNjkzODksIDY5MzkzLCA2MTcwLCA2OTM5NywgMzI2MjAsIDY5NDAyLCAKKyAgICA2OTQwOSwgNjk0MTgsIDY5NDI2LCA2OTQzNywgNjk0NDUsIDY5NDUzLCA2OTQ2MCwgNjk0NjcsIDY5NDczLCA2OTQ4NCwgCisgICAgMzI2MjUsIDY5NDg5LCA2OTUwMCwgNjk1MTIsIDY5NTIwLCA2OTUzMSwgNjk1NDAsIDY5NTUxLCA2OTU1NiwgNjk1NjQsIAorICAgIDI1NTYsIDY5NTY5LCAzNDI5NSwgNjk1ODIsIDY5NTg2LCA2OTU5OCwgNjk2MDYsIDY5NjExLCA2OTYxOSwgMTc0ODUsIAorICAgIDY5NjMwLCA2OTYzNiwgNjk2NDMsIDY5NjUxLCA2OTY1NywgMzI2MzUsIDY5NjYyLCAzOTE0LCA1ODI1NCwgNjk2NjksIAorICAgIDY5NjcyLCA2OTY4MCwgNjk2OTMsIDY5NzA2LCA2OTcxOSwgNjk3MzIsIDY5NzM5LCA2OTc1MCwgNjk3NTksIDQxNzI0LCAKKyAgICA0MTcyOSwgNjk3NjQsIDY5NzY4LCA2OTc3NiwgNjk3ODMsIDY5NzkyLCA2OTgwMCwgNjk4MDYsIDY5ODE1LCA2OTgyMywgCisgICAgNjk4MzEsIDY5ODM1LCA2OTg0NCwgNjk4NTMsIDY5ODYzLCA2OTg3NiwgNjk4ODksIDY5ODk5LCAzMjY0MCwgNjk5MDUsIAorICAgIDY5OTEyLCA2OTkxOCwgMzI2NDYsIDY5OTIzLCA2OTkyNiwgNjk5MzAsIDY5OTM4LCA2OTk0NywgNDE0NjIsIDY5OTU1LCAKKyAgICA2OTk2NCwgNjk5NzIsIDY5OTc5LCA2OTk4NywgNjk5OTcsIDcwMDA2LCA3MDAxNSwgNzAwMjQsIDcwMDMyLCA3MDA0MywgCisgICAgNzAwNTMsIDkzNjYsIDIxNTY3LCA3MDA2MiwgNzAwNjcsIDcwMDcyLCA3MDA3NiwgNzAwODAsIDcwMDg1LCA3MDA5MSwgCisgICAgNzAwOTYsIDcwMTAxLCA3MDEwNywgNzAxMTIsIDcwMTE3LCAyMTUzMiwgNzAxMjIsIDcwMTI5LCA3MDEzNywgNzAxNDUsIAorICAgIDcwMTUwLCA3MDE1NywgNzAxNjQsIDcwMTY5LCA3MDE3MywgNzAxNzcsIDcwMTg1LCA3MDE5MywgMzI2NjMsIDcwMTk5LCAKKyAgICA3MDIwNSwgNzAyMTcsIDcwMjIzLCA3MDIyNywgNzAyMzQsIDcwMjM5LCA3MDI1MCwgNzAyNjAsIDcwMjcwLCA3MDI4MiwgCisgICAgNzAyODgsIDcwMjk4LCA3MDMwOCwgMzI2OTAsIDcwMzE3LCA3MDMyNiwgNzAzMzIsIDcwMzQ0LCA3MDM1NSwgNzAzNjIsIAorICAgIDcwMzY3LCA3MDM3MSwgNzAzNzksIDcwMzg1LCA3MDM5MCwgNzAzOTUsIDcwNDAyLCA3MDQxMCwgNzA0MjIsIDcwNDMyLCAKKyAgICA3MDQ0MSwgNzA0NTAsIDcwNDU3LCAzNDE1NywgMjM4NTEsIDcwNDYzLCA3MDQ2OCwgNzA0NzIsIDcwNDc2LCA3MDQ4MSwgCisgICAgNzA0ODcsIDcwNDk4LCA3MDUxMSwgNzA1MTYsIDcwNTIzLCAzMjY5NSwgNzA1MjgsIDcwNTQwLCA3MDU0OSwgNzA1NTksIAorICAgIDcwNTcwLCA3MDU4MywgNzA1OTAsIDcwNTk5LCA3MDYwOCwgNzA2MTYsIDcwNjIxLCA3MDYyNywgMTA2OSwgNzA2MzIsIAorICAgIDcwNjM3LCA3MDY0MiwgNzA2NDcsIDcwNjUzLCA3MDY1OCwgNzA2NjMsIDcwNjY5LCA3MDY3NSwgNzA2ODAsIDcwNjg0LCAKKyAgICA3MDY4OSwgNzA2OTQsIDcwNjk5LCA1ODc2NiwgNzA3MDQsIDcwNzA5LCA3MDcxNCwgNzA3MTksIDcwNzI1LCA3MDczMSwgCisgICAgNzA3MzYsIDcwNzQwLCA3MDc0NSwgNzA3NTAsIDcwNzU1LCA3MDc2MSwgNzA3NjYsIDcwNzcyLCA3MDc3NywgNzA3ODIsIAorICAgIDcwNzg3LCA3MDc5MiwgNzA3OTYsIDcwODAyLCA3MDgwNywgNzA4MTYsIDcwODIxLCA3MDgyNiwgNzA4MzEsIDcwODM2LCAKKyAgICA3MDg0MCwgNzA4NDcsIDcwODUzLCAxNzEzNSwgMTcxNDIsIDcwODU4LCA3MDg2MiwgNzA4NjYsIDcwODcwLCA3MDg3NCwgCisgICAgNDU1MjQsIDcwODc4LCA3MDgwOCwgNzA4ODAsIDcwODkwLCAzMjcwNCwgNzA4OTMsIDcwOTAyLCA3MDkwOCwgNjE0MywgCisgICAgMzI3MDksIDcwOTEyLCA3MDkxOCwgNzA5MjMsIDcwOTI5LCA3MDkzNCwgNzA5MzgsIDcwOTQ1LCA3MDk1MCwgNzA5NjAsIAorICAgIDcwOTY5LCA3MDk3MywgNzA5NzksIDcwOTg1LCA3MDk5MSwgNzA5OTUsIDcxMDAzLCA3MTAxMCwgNzEwMTgsIDcxMDI2LCAKKyAgICAzMjcxNCwgNzEwMzMsIDcxMDM2LCA3MTA0MywgNzEwNDksIDcxMDU0LCA3MTA1OCwgNzEwNjQsIDcxMDcxLCA3MTA3NiwgCisgICAgNzEwODAsIDcxMDg5LCA3MTA5NywgNzExMDMsIDcxMTA4LCAzMjcxOSwgNzExMTUsIDcxMTIyLCA3MTEyOCwgNzExMzMsIAorICAgIDcxMTM5LCA3MTE0NiwgNzExNTIsIDIxMjk0LCAyNzQ1NSwgNzExNTgsIDcxMTYzLCA3MTE2OSwgNzExODEsIDcwODQxLCAKKyAgICA3MDg0OCwgMjE0NzAsIDcxMTkxLCA3MTE5NiwgNzEyMDMsIDcxMjA5LCA3MTIxNiwgNzEyMjIsIDcxMjMzLCA3MTIzOCwgCisgICAgOTExMCwgNzEyNDYsIDcxMjQ5LCA3MTI1NSwgNzEyNTksIDcxMjYzLCA3MTI2NiwgNzEyNzIsIDMyNDY4LCA2MTk0LCA5NjQsIAorICAgIDEzNDE5LCA3MTI3OSwgNzEyODUsIDcxMjkxLCA3MTI5NywgNzEzMDMsIDcxMzA5LCA3MTMxNSwgNzEzMjEsIDcxMzI3LCAKKyAgICA3MTMzMiwgNzEzMzcsIDcxMzQyLCA3MTM0NywgNzEzNTIsIDcxMzU3LCA3MTM2MiwgNzEzNjcsIDcxMzcyLCA3MTM3NywgCisgICAgNzEzODIsIDcxMzg3LCA3MTM5MiwgNzEzOTgsIDcxNDAzLCA3MTQwOCwgNzE0MTQsIDcxNDE5LCA3MTQyNCwgNzE0MzAsIAorICAgIDcxNDM2LCA3MTQ0MiwgNzE0NDgsIDcxNDU0LCA3MTQ2MCwgNzE0NjYsIDcxNDcyLCA3MTQ3OCwgNzE0ODMsIDcxNDg4LCAKKyAgICA3MTQ5NCwgNzE0OTksIDcxNTA0LCA3MTUxMCwgNzE1MTUsIDcxNTIwLCA3MTUyNSwgNzE1MzAsIDcxNTM1LCA3MTU0MCwgCisgICAgNzE1NDUsIDcxNTUwLCA3MTU1NSwgNzE1NjAsIDcxNTY1LCA3MTU3MCwgNzE1NzYsIDcxNTgxLCA3MTU4NiwgNzE1OTEsIAorICAgIDcxNTk3LCA3MTYwMiwgNzE2MDcsIDcxNjEyLCA3MTYxNywgNzE2MjMsIDcxNjI4LCA3MTYzMywgNzE2MzgsIDcxNjQzLCAKKyAgICA3MTY0OCwgNzE2NTMsIDcxNjU4LCA3MTY2MywgNzE2NjgsIDcxNjczLCA3MTY3OCwgNzE2ODMsIDcxNjg4LCA3MTY5MywgCisgICAgNzE2OTgsIDcxNzAzLCA3MTcwOCwgNzE3MTMsIDcxNzE4LCA3MTcyNCwgNzE3MjksIDcxNzM0LCA3MTczOSwgNzE3NDQsIAorICAgIDcxNzQ5LCA3MTc1NCwgNzE3NTksIDE4NjQsIDE0MiwgNzE3NjQsIDcxNzY4LCA3MTc3MiwgNzE3NzcsIDcxNzg1LCA3MTc4OSwgCisgICAgNzE3OTYsIDcxODA0LCA3MTgwOCwgNzE4MjEsIDcxODI5LCA3MTgzMywgNzE4MzYsIDcxODQxLCA3MTg0NSwgNzE4NTAsIAorICAgIDcxODU0LCA3MTg2MiwgNzE4NjYsIDIwOTM3LCA3MTg3MSwgNzE4NzUsIDYwOTY3LCA3MTg3OSwgNzE4ODIsIDcxODkwLCAKKyAgICA3MTg5OCwgNzE5MDYsIDcxOTExLCA3MTkxOCwgNzE5MjQsIDcxOTMwLCA3MTkzNSwgNzE5NDIsIDcxOTQ3LCA3MTk1NSwgCisgICAgNjQ5NDcsIDcxOTYyLCA3MTk2NywgNzE5NzIsIDcxOTc2LCAxMTY0NSwgNzE5ODAsIDcxOTg1LCA3MTk5MCwgNzE5OTQsIAorICAgIDcxOTk3LCA3MjAwMywgNzIwMDcsIDcyMDE3LCA3MjAyNiwgNzIwMjksIDcyMDMzLCA3MjA0MCwgNzIwNTMsIDcyMDU5LCAKKyAgICA3MjA2NywgNzIwNzgsIDcyMDg5LCA3MjEwMCwgNzIxMTEsIDcyMTIwLCA3MjEyNiwgNzIxMzUsIDcyMTQzLCA3MjE1MywgCisgICAgNzIxNjYsIDcyMTczLCA3MjE4NCwgNzIxOTAsIDcyMTk1LCA3MjIwMCwgNzIyMDYsIDcyMjEyLCA3MjIyMiwgNzIyMzEsIAorICAgIDcwNTMwLCA3MjIzOSwgNzIyNDUsIDcyMjUzLCA3MjI1OSwgNzIyNjcsIDcyMjcwLCA3MjI3NCwgNzIyNzgsIDcyMjgxLCAKKyAgICA3MjI4NywgNzIyOTMsIDcyMzAxLCA3MjMxMywgNzIzMjUsIDcyMzMyLCA3MjMzNiwgNzIzNDcsIDcyMzU1LCA3MjM2MiwgCisgICAgNzIzNzQsIDcyMzgyLCA3MjM5MCwgNzIzOTcsIDcyNDAzLCA3MjQxMywgNzI0MjIsIDcyNDI3LCA3MjQzNywgNzI0NDYsIAorICAgIDQwNzg4LCA3MjQ1MywgNzI0NTcsIDcyNDYyLCA3MjQ3MCwgNzI0NzcsIDcyNDgzLCA3MjQ4NywgNzI0OTcsIDcyNTA4LCAKKyAgICA3MjUxNiwgNzI1MjMsIDcyNTM1LCA3MjU0NywgNzI1NTYsIDY5NTcyLCA3MjU2MywgNzI1NzQsIDcyNTg4LCA3MjU5NiwgCisgICAgNzI2MDYsIDcyNjEzLCA3MjYyMSwgNzI2MzMsIDcyNjQyLCA3MjY1MCwgNzI2NjAsIDcyNjcxLCA3MjY4MywgNzI2OTIsIAorICAgIDcyNzAyLCA3MjcwOSwgNzI3MTgsIDcyNzMzLCA3Mjc0MSwgNzI3NTEsIDcyNzYwLCA3Mjc2OCwgNzI3ODEsIDcyNzk2LCAKKyAgICA3MjgwMCwgNzI4MDksIDcyODIxLCA3MjgzMiwgNzI4NDMsIDcyODU0LCA3Mjg2NCwgNzI4NzUsIDcyODgzLCA3Mjg4OSwgCisgICAgNzI4OTksIDcyOTA3LCA3MjkxMywgMjkwMjgsIDcyOTE4LCA3MjkyNCwgNzI5MjksIDcyOTM2LCA5NzA4LCAxNzUwNSwgCisgICAgNzI5NDIsIDcyOTUxLCA3Mjk1NiwgNzI5NjAsIDcyOTY3LCA3Mjk3MywgNzI5NzgsIDcyOTgzLCA3Mjk5MSwgNzI5OTksIAorICAgIDczMDAzLCA3MzAwNiwgNzMwMDksIDczMDExLCA3MzAxOCwgNzMwMjQsIDczMDM1LCA3MzA0MCwgNzMwNDQsIDczMDUxLCAKKyAgICA3MzA1NywgNzMwNjIsIDczMDcwLCA2NTQ0NiwgNjU0NTYsIDczMDc2LCA3MzA4MywgNzMwOTMsIDEwNjE4LCA3MzEwMCwgCisgICAgNzMxMDUsIDI5MjI0LCA3MzExNCwgNzMxMTksIDczMTI2LCA3MzEzNiwgNzMxNDQsIDczMTUyLCA3MzE2MSwgNzMxNjcsIAorICAgIDczMTczLCA3MzE4MCwgNzMxODcsIDczMTkyLCA3MzE5NiwgNzMyMDQsIDczMjA5LCA3MzIxNCwgNzMyMjIsIDczMjI5LCAKKyAgICA3MzIzNCwgNzMyNDAsIDczMjQzLCA3MzI0NywgNzMyNTYsIDcxODE2LCA3MzI2NSwgNzMyNjksIDczMjc1LCA3MzI4NiwgCisgICAgNzMyOTYsIDE3NTE0LCA3MzMwNywgNzMzMTUsIDE3NTI2LCA3MzMyMiwgNzMzMjYsIDczMzM1LCAyNzM0MSwgNzMzNDIsIAorICAgIDczMzQ2LCA3MzM1MSwgNzMzNjgsIDczMzgwLCAxMDU3NiwgNzMzOTIsIDczMzk3LCA3MzQwMiwgNzM0MDcsIDIxMDEwLCAKKyAgICA3MzQxMSwgNzM0MTYsIDczNDIxLCA3MzQyNywgNzM0MzIsIDU4NDYsIDIxMDE0LCA3MzQzNywgNzM0NDIsIDczNDQ4LCAKKyAgICA3MzQ1NSwgNzM0NjAsIDczNDY1LCA3MzQ3MSwgNzM0NzcsIDczNDgzLCA3MzQ4OCwgNzM0OTQsIDczNDk4LCA3MzUxMiwgCisgICAgNzM1MjAsIDczNTI4LCA3MzUzNCwgNzM1MzksIDczNTQ2LCA3MzU1NiwgNzM1NjUsIDczNTcwLCA3MzU3NSwgNzM1ODMsIAorICAgIDczNTg4LCA3MzU5NCwgNzM1OTksIDczNjA4LCA1OTgyMywgNzM2MTMsIDczNjE2LCA3MzYzNCwgNzM2NTMsIDczNjY2LCAKKyAgICA3MzY4MCwgNzM2OTYsIDczNzAzLCA3MzcxMCwgNzM3MTYsIDczNzIzLCA3MzcyOCwgNzM3MzQsIDczNzQwLCA3Mzc0OCwgCisgICAgNzM3NTQsIDczNzU5LCA3Mzc2NCwgNzM3ODAsIDEwNTg5LCA3Mzc5NCwgNzM4MDEsIDczODA5LCA3MzgxNSwgNzM4MTksIAorICAgIDczODIyLCA3MzgyNywgNzM4MzIsIDczODM5LCA3Mzg0NCwgNzM4NTMsIDczODU4LCA3Mzg2NCwgNzM4NzMsIDczODgyLCAKKyAgICA3Mzg4NywgNzM4OTEsIDczODk5LCA3MzkwOCwgMTE2NzQsIDczOTE3LCA3MzkyNSwgNzM5MzAsIDczOTM2LCAxMTY4NSwgCisgICAgNzM5NDEsIDczOTQ0LCA3Mzk0OSwgNzM5NTksIDczOTY4LCA3Mzk3MywgNzM5NzksIDczOTg0LCA3Mzk5MiwgNzM5OTksIAorICAgIDc0MDEwLCA3NDAyMCwgNzQwMjUsIDY0ODc1LCA3NDAzMCwgNzQwMzYsIDc0MDQxLCA3NDA0OCwgNzQwNTcsIDc0MDY1LCAKKyAgICA3NDA3MSwgNzQwNzcsIDc0MDg0LCA3NDA5MCwgNzQwOTQsIDE2OTYwLCAzMDU1LCA3NDA5OSwgNzQxMDMsIDc0MTA3LCAKKyAgICA3NDExMywgNzQxMjIsIDc0MTI4LCA3NDEzNSwgNzQxMzksIDc0MTYwLCA3NDE4MiwgNzQxOTgsIDc0MjE1LCA3NDIzNCwgCisgICAgNzQyNDMsIDc0MjUzLCA3NDI2MCwgNzQyNjcsIDI3MjI4LCA3NDI3MywgNzQyNzcsIDc0Mjg1LCA3NDI5NywgNzQzMDMsIAorICAgIDc0MzExLCA3NDMxNSwgNzQzMjMsIDc0MzMwLCA3NDMzNCwgNzQzNDAsIDc0MzQ2LCA3NDM1MSwgMzU2MywgNDE5MjQsIAorICAgIDc0MzU3LCA3NDM2MSwgNzQzNjUsIDc0MzY5LCA3NDM3NCwgNzQzNzksIDc0Mzg0LCA3NDM5MCwgNzQzOTYsIDc0NDAyLCAKKyAgICA3NDQwOSwgNzQ0MTUsIDc0NDIyLCA3NDQyOCwgNzQ0MzQsIDc0NDM5LCA3NDQ0NSwgNzQ0NTAsIDc0NDU0LCA3NDQ1OSwgCisgICAgNzQ0NjMsIDc0NDY4LCA0MTkzOSwgNzQ0NzIsIDc0NDc3LCA3NDQ4NSwgNzQ0ODksIDc0NDk0LCA3NDUwMSwgNzQ1MTAsIAorICAgIDc0NTE2LCA3NDUyMCwgNzQ1MjcsIDc0NTMxLCA3NDUzNCwgNzQ1NDEsIDc0NTUwLCA3NDU1NSwgNzQ1NTksIDc0NTY3LCAKKyAgICA3NDU3NiwgNzQ1ODAsIDc0NTg4LCA3NDU5NCwgNzQ1OTksIDc0NjA0LCA3NDYxMCwgNzQ2MTYsIDc0NjIxLCA3NDYyNSwgCisgICAgNzQ2MzEsIDc0NjM2LCA3NDY0MCwgNzQ2NDQsIDc0NjQ3LCA3NDY1MiwgNzQ2NjAsIDc0NjcwLCA3NDY3NSwgMzk0MTYsIAorICAgIDc0NjgzLCA3NDY5NSwgNzQ2OTksIDc0NzA1LCA3NDcxNywgNzQ3MjgsIDc0NzM1LCA3NDc0MSwgNzQ3NDgsIDc0NzYwLCAKKyAgICA3NDc2NywgNzQ3NzMsIDIxMDg4LCA3NDc3NywgNzQ3ODMsIDc0NzkwLCA3NDc5NiwgNzQ4MDIsIDc0ODA3LCA3NDgxMiwgCisgICAgNzQ4MTcsIDc0ODI2LCA3MDMzLCA3NDgzMSwgMTY0MjYsIDc0ODM3LCA3NDg0MSwgNzQ4NDUsIDc0ODQ5LCA3NDg1NywgCisgICAgNzQ4NjYsIDc0ODcwLCA3NDg3NywgNzQ4ODYsIDc0ODk5LCA3NDkwNSwgNzQ0NjQsIDMwMDg4LCA3NDkxMCwgNzQ5MTIsIAorICAgIDc0OTE3LCA3NDkyMiwgNzQ5MjcsIDc0OTMyLCA3NDkzNywgNzQ5NDIsIDc0OTQ3LCA3NDk1MiwgNzQ5NTcsIDc0OTYyLCAKKyAgICA3NDk2NywgNzQ5NzIsIDc0OTc3LCA3NDk4MiwgNzQ5ODgsIDc0OTkzLCA3NDk5OCwgNzUwMDMsIDc1MDA4LCA3NTAxMywgCisgICAgNzUwMTgsIDc1MDIzLCA3NTAyOCwgNzUwMzQsIDc1MDQwLCA3NTA0NiwgNzUwNTEsIDc1MDU2LCA3NTA2OCwgNzUwNzMsIAorICAgIDE4NzAsIDQ2LCA3NTA3OCwgNzUwODMsIDMyNzQ2LCA3NTA4NywgMzI3NTEsIDMyNzU2LCAzMjc2MiwgMzI3NjcsIDc1MDkxLCAKKyAgICAzMjc3MiwgMjIwODMsIDc1MTEzLCA3NTExNywgNzUxMjEsIDc1MTI2LCA3NTEzMCwgMzI3NzYsIDc1MTM0LCA3NTE0MiwgCisgICAgMzI3ODEsIDc1MTQ5LCA3NTE1MiwgNzUxNTcsIDc1MTYxLCA5NTQzLCA3NTE3MCwgMzI3ODYsIDIxOTQ1LCA3NTE3MywgCisgICAgNzUxNzcsIDE0MjgsIDc1MTgyLCAzMjc5NywgNzUxODUsIDc1MTkwLCAyNTczNywgMjU3NDcsIDM1MjU4LCA3NTE5NSwgCisgICAgNzUyMDAsIDc1MjA1LCA3NTIxMCwgNzUyMTYsIDc1MjIxLCA3NTIzMCwgNzUyMzUsIDc1MjQyLCA3NTI0OCwgNzUyNTMsIAorICAgIDc1MjU4LCA3NTI2MywgNzUyNzMsIDc1MjgyLCA3NTI4NywgNzUyOTUsIDc1Mjk5LCA3NTMwNywgMzI2MTEsIDM3MzE3LCAKKyAgICA3NTMxNCwgNzUzMjAsIDc1MzI1LCA3NTMzMCwgMTIwMTYsIDc1MzM1LCA3NTM0MSwgNzUzNDYsIDc1MzUzLCA3NTM1OSwgCisgICAgNzUzNjQsIDc1MzcyLCA3NTM4MiwgNzUzOTIsIDc1Mzk4LCA3NTQwMywgNzU0MDksIDE3NTM2LCA3NTQxNiwgMzYwNzMsIAorICAgIDc1NDI5LCA3NTQzNCwgNzU0NDAsIDMwOTkzLCA3NTQ1MywgNzU0NTksIDc1NDYzLCA3NTQ3MiwgNzU0NzksIDc1NDg1LCAKKyAgICA3NTQ5MywgNzU1MDIsIDc1NTA5LCA3NTUxNSwgNzU1MTgsIDc1NTIyLCAyNTg3OCwgNzU1MjYsIDc1NTMzLCA3NTUzOSwgCisgICAgNzU1NDcsIDc1NTUyLCAyMzk5NCwgNzU1NTgsIDc1NTYxLCA3NTU2OSwgNzU1NzcsIDc1NTkxLCA3NTU5OCwgNzU2MDQsIAorICAgIDc1NjExLCA3NTYxNywgMzI4MTEsIDc1NjIxLCA3NTYyOCwgNzU2MzYsIDc1NjQ0LCA3NTY1MCwgMzI4MTYsIDc1NjU4LCAKKyAgICA3NTY2NCwgNzU2NjksIDc1Njc5LCA3NTY4NSwgNzU2OTQsIDMwODMwLCAzNDcxNiwgNzU3MDIsIDc1NzA3LCA3NTcxMiwgCisgICAgNzU3MTYsIDc1NzIxLCA3NTcyNSwgNzU3MzMsIDE0OTIwLCAzOTQyOSwgNzU3MzgsIDc1NzQzLCAzMjgyMSwgNjIyNjksIAorICAgIDc1NzQ3LCA3NTc1MiwgNzU3NTYsIDc1NzY1LCA3NTc3MywgNzU3NzksIDc1Nzg0LCA3NTc5MCwgNzU3OTcsIDc1ODAzLCAKKyAgICA3NTgwOCwgNzU4MTMsIDc1ODIyLCA3NTgzNCwgNzU4NDksIDMzMDgzLCA3NTg1NSwgMTY1NDUsIDMyODI1LCA3NTg1OSwgCisgICAgNzU4NjYsIDI0MTA0LCA3NTg3MiwgNzU4NzksIDc1ODg4LCA3NTg5NSwgNzU5MDQsIDc1OTEwLCA3NTkxNSwgNzU5MjMsIAorICAgIDc1OTI5LCAzMjgzNSwgNzU5MzQsIDc1OTQzLCA3NDcyMywgNzU5NTIsIDc1OTU5LCA3NTk2NSwgNzU5NzEsIDc1OTgxLCAKKyAgICA3NTk4OSwgNzU5OTYsIDc2MDAwLCAzMjg0MCwgNzYwMDMsIDMyODQ2LCAzMjg1MiwgNzYwMDgsIDc2MDE2LCA3NjAyNCwgCisgICAgNzYwMzQsIDc2MDQzLCA3NjA1MSwgNzYwNTgsIDc2MDY4LCAzMjg1NywgNzYwNzIsIDc2MDc0LCA3NjA3OCwgNzYwODMsIAorICAgIDc2MDg3LCA3NjA5MSwgNzYwOTcsIDc2MTAyLCA3NjEwNiwgNzYxMTcsIDc2MTIyLCA3NjEyNywgMzA2MCwgNzYxMzEsIAorICAgIDc2MTM4LCA3NjE0MiwgNzYxNTEsIDc2MTU5LCA3NjE2NiwgNzYxNzEsIDc2MTc2LCA2MjMxNSwgNzYxODAsIDc2MTgzLCAKKyAgICA3NjE4OSwgNzYxOTcsIDc2MjAzLCA3NjIwNywgNzYyMTIsIDc2MjE5LCA3NjIyNCwgNzYyMzAsIDM0NzQ3LCA3NjIzNSwgCisgICAgNzYyMzgsIDc2MjQzLCA3NjI0NywgNzYyNTIsIDc2MjU3LCA3NjI2MSwgNzYyNjksIDc2MjczLCAyNTc1NiwgMjU3NjUsIAorICAgIDc2Mjc5LCA3NjI4NSwgNzYyOTEsIDc2Mjk2LCA3NjMwMCwgNzYzMDMsIDc2MzEzLCA3NjMyMiwgNzYzMjcsIDc2MzMzLCAKKyAgICA3NjM0MCwgNzYzNDYsIDc2MzUwLCA3NjM1OCwgNzYzNjMsIDM0NzUzLCA3NjM2NywgNzYzNzUsIDc2MzgxLCA3NjM4OCwgCisgICAgNzYzOTMsIDc2Mzk3LCA3NjQwMiwgNTg0NDAsIDM0NzU5LCA3NjQwOCwgNzY0MTMsIDc2NDE3LCA3NjQyMiwgNzY0MjcsIAorICAgIDc2NDMyLCA3NjQzNiwgNzY0NDEsIDc2NDQ2LCA3NjQ1MiwgNzY0NTcsIDc2NDYyLCA3NjQ2OCwgNzY0NzQsIDc2NDc5LCAKKyAgICA3NjQ4MywgNzY0ODgsIDc2NDkzLCA3NjQ5OCwgNzY1MDIsIDI0MTAzLCA3NjUwNywgNzY1MTIsIDc2NTE4LCA3NjUyNCwgCisgICAgNzY1MzAsIDc2NTM1LCA3NjUzOSwgNzY1NDQsIDc2NTQ5LCA3NjU1NCwgNzY1NTgsIDc2NTYzLCA3NjU2OCwgNzY1NzMsIAorICAgIDc2NTc4LCA3NjU4MiwgMzI4NjUsIDc2NTkwLCA3NjU5NCwgNzY2MDIsIDc2NjEwLCA3NjYyMSwgNzY2MjYsIDc2NjMwLCAKKyAgICAyMjM5NywgNzY2MzUsIDc2NjQxLCA3NjY1MSwgNzY2NTgsIDc2NjYzLCA3NjY3MiwgNzY2NzcsIDc2NjgxLCA3NjY4NiwgCisgICAgNzY2OTQsIDc2NzAyLCA3NjcwOSwgNjUxMDksIDc2NzE1LCA3NjcyMywgNzY3MzAsIDc2NzQxLCA3Njc0NywgNzY3NTEsIAorICAgIDc2NzU3LCAzMjg3NSwgNzY3NjAsIDc2NzY3LCA3Njc3NSwgNzY3ODAsIDM5NjIwLCA3Njc4NCwgNzY3ODksIDc2Nzk2LCAKKyAgICA3NjgwMSwgODk5MiwgNzY4MDUsIDc2ODEzLCA3NjgyMCwgNzY4MjcsIDc2ODMzLCA3Njg0NywgNjMzODEsIDc2ODU1LCAKKyAgICA3Njg2MSwgNzY4NjUsIDc2ODY4LCA3Njg3NiwgNzY4ODMsIDc2ODg4LCA3NjkwMSwgNzY5MDgsIDc2OTEyLCA3NjkxOSwgCisgICAgNzY5MjQsIDYwODYwLCA3NjkyOSwgNzY5MzIsIDc2OTM5LCA3Njk0NSwgNzY5NDksIDc2OTU3LCA3Njk2NiwgNzY5NzYsIAorICAgIDc2OTg2LCA3Njk5NSwgNzcwMDMsIDc3MDE0LCA3NzAxOSwgNzcwMjMsIDc3MDI4LCA3NzAzMiwgMzUzODksIDc3MDQwLCAKKyAgICAyMTM1NywgMzUzOTgsIDc3MDQ1LCA3NzA1MCwgNzcwNTUsIDc3MDYwLCA3NzA2NSwgNzcwNzAsIDc3MDc1LCA3NzA3OSwgCisgICAgNzcwODQsIDc3MDg5LCA3NzA5NCwgNzcwOTksIDc3MTA0LCA3NzEwOSwgNzcxMTMsIDc3MTE4LCA3NzEyMywgNzcxMjcsIAorICAgIDc3MTMxLCA3NzEzNSwgNzcxMzksIDc3MTQ0LCA3NzE0OSwgNzcxNTMsIDc3MTU4LCA3NzE2MiwgNzcxNjYsIDc3MTcxLCAKKyAgICA3NzE3NiwgNzcxODEsIDc3MTg2LCA3NzE5MCwgNzcxOTUsIDc3MjAwLCA3NzIwNCwgNzcyMDksIDc3MjE0LCA3NzIxOSwgCisgICAgNzcyMjQsIDc3MjI5LCA3NzIzNCwgNzcyMzksIDc3MjQ0LCA3NzI0OSwgNzcyNTQsIDc3MjU5LCA3NzI2NCwgNzcyNjksIAorICAgIDc3Mjc0LCA3NzI3OSwgNzcyODQsIDc3Mjg5LCA3NzI5NCwgNzcyOTksIDc3MzA0LCA3NzMwOCwgNzczMTMsIDc3MzE4LCAKKyAgICA3NzMyMywgNzczMjgsIDc3MzMzLCA3NzMzOCwgNzczNDMsIDc3MzQ4LCA3NzM1MywgNzczNTgsIDc3MzYzLCA3NzM2NywgCisgICAgNzczNzIsIDc3Mzc2LCA3NzM4MSwgNzczODYsIDc3MzkxLCA3NzM5NiwgNzc0MDEsIDc3NDA2LCA3NzQxMSwgNzc0MTYsIAorICAgIDc3NDIxLCA3NzQyNSwgNzc0MjksIDc3NDM0LCA3NzQzOSwgNzc0NDMsIDc3NDQ4LCA3NzQ1MywgNzc0NTcsIDc3NDYyLCAKKyAgICA3NzQ2NywgNzc0NzIsIDc3NDc3LCA3NzQ4MSwgNzc0ODYsIDc3NDkxLCA3NzQ5NSwgNzc1MDAsIDc3NTA0LCA3NzUwOCwgCisgICAgNzc1MTIsIDc3NTE2LCA3NzUyMSwgNzc1MjUsIDc3NTI5LCA3NzUzMywgNzc1MzcsIDc3NTQxLCA3NzU0NSwgNzc1NDksIAorICAgIDc3NTUzLCA3NzU1NywgNzc1NjIsIDc3NTY3LCA3NzU3MiwgNzc1NzcsIDc3NTgyLCA3NzU4NywgNzc1OTIsIDc3NTk3LCAKKyAgICA3NzYwMiwgNzc2MDcsIDc3NjExLCA3NzYxNSwgNzc2MTksIDc3NjIzLCA3NzYyNywgNzc2MzEsIDc3NjM2LCA3NzY0MCwgCisgICAgNzc2NDUsIDc3NjQ5LCA3NzY1NCwgNzc2NTksIDc3NjYzLCA3NzY2NywgNzc2NzIsIDc3Njc2LCA3NzY4MCwgNzc2ODQsIAorICAgIDc3Njg4LCA3NzY5MiwgNzc2OTYsIDc3NzAwLCA3NzcwNCwgNzc3MDgsIDc3NzEyLCA3NzcxNiwgNzc3MjAsIDc3NzI0LCAKKyAgICA3NzcyOCwgNzc3MzMsIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NywgCisgICAgNzc3NzEsIDc3Nzc1LCA3Nzc3OSwgNzc3ODMsIDc3Nzg3LCA3Nzc5MSwgNzc3OTYsIDc3ODAwLCA3NzgwNSwgNzc4MDksIAogICAgIDc3ODEzLCA3NzgxNywgNzc4MjEsIDc3ODI1LCA3NzgyOSwgNzc4MzMsIDc3ODM3LCA3Nzg0MSwgNzc4NDUsIDc3ODQ5LCAKLSAgICA3Nzg1MywgNzc4NTcsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc1LCA3Nzg4MCwgNzc4ODQsIDc3ODg4LCA3Nzg5MiwgCi0gICAgNzc4OTYsIDc3OTAwLCA3NzkwNCwgNzc5MDgsIDc3OTEyLCA3NzkxNywgNzc5MjEsIDc3OTI2LCA3NzkzMCwgNzc5MzUsIAotICAgIDc3OTM5LCA3Nzk0NCwgNzc5NDgsIDc3OTU0LCA3Nzk1OSwgNzc5NjMsIDc3OTY4LCA3Nzk3MiwgNzc5NzcsIDc3OTgxLCAKLSAgICA3Nzk4NiwgNzc5OTAsIDc3OTk1LCAxNTIxLCA3Nzk5OSwgMjgyNCwgMTc1OSwgMTc2NCwgNzgwMDMsIDc4MDA3LCAyODI4LCAKLSAgICA3ODAxMSwgMTM5NywgNzgwMTYsIDEzNDIsIDc4MDIwLCAyODQwLCA3ODAyNCwgNzgwMzEsIDc4MDM4LCA3ODA1MiwgMjg0NCwgCi0gICAgNzEzMSwgNzgwNjEsIDc4MDY5LCA3ODA3NiwgNzgwODcsIDc4MDk2LCA3ODEwMywgNzgxMTUsIDc4MTI4LCA3ODE0MSwgCi0gICAgNzgxNTIsIDc4MTU3LCA3ODE2NCwgNzgxNzYsIDc4MTgwLCAyODQ4LCAxMTc0MCwgNzgxOTAsIDc4MTk1LCA3ODIwNCwgCi0gICAgNzgyMTQsIDI4NTIsIDc4MjE5LCA3ODIyMywgNzgyMjgsIDc4MjM1LCA3ODI0MSwgNzgyNDksIDc4MjYxLCAxMzQ3LCAKLSAgICAxMzAzNSwgNzgyNzEsIDc4Mjc1LCA3ODI4MSwgNzgyOTUsIDc4MzA3LCA3ODMxOSwgNzgzMjksIDc4MzM4LCA3ODM0NywgCi0gICAgNzgzNTYsIDc4MzY0LCA3ODM3NSwgNzgzODMsIDQwNTEsIDc4MzkzLCA3ODQwNCwgNzg0MTMsIDc4NDE5LCA3ODQzNCwgCi0gICAgNzg0NDEsIDc4NDQ3LCAzNTQ4OSwgNzg0NTIsIDI4NzYsIDEzMDM5LCA3ODQ1NiwgNzg0NjMsIDg5MzAsIDc4NDcyLCAyODgxLCAKLSAgICAzMjMzNiwgNzg0NzgsIDYwNTcyLCA3ODQ4NSwgNzg0OTEsIDc4NTAyLCA3ODUwOCwgNzg1MTUsIDc4NTIxLCA3ODUyOSwgCi0gICAgNzg1MzYsIDc4NTQyLCA3ODU1MiwgNzg1NjEsIDc4NTcyLCA3ODU3OSwgNzg1ODUsIDc4NTk1LCA3ODYwMywgNzg2MDksIAotICAgIDc4NjI0LCA3ODYzMCwgNzg2MzUsIDc4NjQyLCA3ODY0NSwgNzg2NTEsIDc4NjU4LCA3ODY2NCwgNzg2NzIsIDc4NjgxLCAKLSAgICA3ODY4OSwgNzg2OTUsIDc4NzA0LCA0MTQyNywgNzg3MTgsIDc4NzIzLCA3ODcyOSwgMTQ3NDQsIDc4NzM0LCA3ODc0NywgCi0gICAgNzg3NTYsIDc4NzY0LCA3ODc3MSwgNzg3NzUsIDc4Nzc5LCA3ODc4MiwgNzg3ODksIDc4Nzk2LCA3ODgwNCwgNzg4MTIsIAotICAgIDc4ODIxLCA3ODgyOSwgMTQ2NzEsIDc4ODM3LCA3ODg0MiwgNzg4NDYsIDc4ODU4LCA3ODg2NSwgNzg4NzQsIDc0OCwgCi0gICAgNzg4ODQsIDc4ODkzLCA3ODkwNCwgMjg5NywgNzg5MDgsIDc4OTEyLCA3ODkxOCwgNzg5MzEsIDc4OTQzLCA3ODk1MywgCi0gICAgNzg5NjIsIDc4OTc0LCAyNjM1MiwgNzg5ODUsIDc4OTkzLCA3OTAwMiwgNzkwMTMsIDc5MDI0LCA3OTAzNCwgNzkwNDQsIAotICAgIDc5MDUzLCA3OTA2MSwgMTEzMDUsIDc5MDY4LCA3OTA3MiwgNzkwNzUsIDc5MDgwLCA3OTA4NSwgNzkwODksIDc5MDk1LCAKLSAgICAxMzUyLCAxMTgxMSwgNzkxMDIsIDc5MTEzLCA3OTEyMiwgNzkxMzAsIDc5MTM5LCA3OTE0NywgNzkxNjMsIDc5MTc0LCAKLSAgICA3OTE4MywgNzkxOTEsIDc5MjAzLCA3OTIxNCwgNzkyMzAsIDc5MjQwLCA3OTI2MSwgNzkyNzQsIDc5MjgyLCA3OTI4OSwgCi0gICAgMTQ4NTUsIDc5MzAyLCA3OTMwNywgNzkzMTMsIDU5MDgsIDc5MzE5LCA3OTMyMiwgNzkzMjksIDc5MzM5LCA4MTc2LCAKLSAgICA3OTM0NiwgNzkzNTEsIDc5MzU2LCA3OTM2MSwgNzkzNjksIDc5Mzc4LCA3OTM4NiwgOTc0OSwgOTc1OCwgNzkzOTEsIAotICAgIDc5NDAyLCA3OTQwNywgNzk0MTMsIDI5MTMsIDI5MTgsIDc5NDE5LCAxMDg3MiwgNzk0MjUsIDc5NDMyLCA3OTQzOSwgCi0gICAgNzk0NTIsIDIyNTEsIDY4LCA3OTQ1NywgNzk0NjIsIDc5NDcyLCA3OTQ3OCwgNzk0ODcsIDc5NDk1LCA3OTUwNSwgNzk1MDksIAotICAgIDc5NTE0LCA3OTUxOCwgNzk1MzAsIDI5NDEsIDc5NTM4LCA3OTU0NiwgNzk1NTEsIDc5NTYyLCA3OTU3MywgNzk1ODIsIAotICAgIDc5NTg3LCA3OTU5MywgNzk1OTgsIDc5NjA4LCA3OTYxOCwgNzk2MjMsIDc5NjI5LCA3OTYzNCwgNzk2NDMsIDIxMzk3LCAKLSAgICA3OTY0NywgNDEyOCwgMjAsIDc5NjUyLCA3OTY2MSwgNzk2NjgsIDc5Njc1LCA3OTY4MSwgNzk2ODcsIDg2NCwgNzk2OTIsIAotICAgIDc5Njk3LCA2MDkwMCwgNzk3MDIsIDc5NzA3LCA3OTcxMywgNzk3MTksIDc5NzI3LCA3OTczMiwgNzk3MzksIDc5NzQ1LCAKLSAgICA3OTc1MCwgMzgwMDEsIDQxMzIxLCA3OTc1NiwgMjk0NSwgMzIsIDc5NzY2LCA3OTc3OSwgNzk3ODQsIDc5NzkyLCA3OTc5NywgCi0gICAgNzk4MDMsIDI5NjcsIDI4Mjg5LCA3OTgwOCwgNzk4MTYsIDc5ODIzLCA3OTgyOCwgNTg2NDUsIDYxOTAzLCA3OTgzNywgCi0gICAgNzk4NDEsIDE3MDQsIDE4MTMsIDc5ODQ2LCA3OTg1MSwgNzk4NTgsIDE4MTcsIDI0NywgNzk4NjUsIDc5ODcxLCAyOTg5LCAKLSAgICA3OTg3NiwgNzk4ODEsIDc5ODg4LCAxODIxLCA3OTg5MywgNzk4OTksIDc5OTA0LCA3OTkxNiwgNjExOSwgNzk5MjYsIDE4MjgsIAotICAgIDc5OTMyLCA3OTkzNywgNzk5NDQsIDc5OTUxLCA3OTk2NiwgNzk5NzMsIDc5OTg0LCA3OTk5MiwgMjYxOCwgNzk5OTYsIAotICAgIDgwMDA4LCA4MDAxMywgODAwMTcsIDgwMDIzLCAyODExNCwgMjI1NiwgODAwMjcsIDgwMDM4LCA4MDA0MiwgODAwNDYsIAotICAgIDgwMDUyLCA4MDA1NiwgODAwNjUsIDgwMDY5LCA4MDA4MCwgODAwODQsIDIzMDIsIDMyMTY1LCA4MDA4OCwgODAwOTgsIAotICAgIDMwODAsIDkzNjQsIDgwMTA2LCA4MDExMSwgODAxMTUsIDgwMTI0LCA4MDEzMSwgODAxMzcsIDMwNTAsIDE3MTM5LCA4MDE0MSwgCi0gICAgODAxNTQsIDgwMTcyLCA4MDE3NywgODAxODUsIDgwMTkzLCA4MDIwMywgOTk3OCwgMTMxNDcsIDgwMjE1LCA4MDIyOCwgCi0gICAgODAyMzUsIDgwMjQyLCA4MDI1OCwgODAyNjUsIDgwMjcxLCAxMDk1LCA4MDI3OCwgODAyODUsIDgwMjk1LCA4MDMwNCwgCi0gICAgODAzMTYsIDQyMjkxLCA4MDMyNCwgMzA2NCwgMTIwMjMsIDgwMzI3LCA4MDMzNSwgODAzMzksIDc4MjMxLCAzMDY4LCAKLSAgICA4MDM0MywgMjExNzgsIDEyMDM5LCAzNzU2LCA4MDM0NywgMzA3NCwgODAzNTEsIDgwMzYxLCA4MDM2NywgODAzNzMsIAotICAgIDgwMzc5LCA4MDM4NSwgODAzOTEsIDgwMzk3LCA4MDQwMywgODA0MDksIDgwNDE1LCA4MDQyMSwgODA0MjcsIDgwNDMzLCAKLSAgICA4MDQzOSwgODA0NDUsIDgwNDUxLCA4MDQ1NywgODA0NjMsIDgwNDY5LCA4MDQ3NSwgODA0ODEsIDgwNDg3LCA4MDQ5MywgCi0gICAgODA0OTksIDgwNTA1LCA4MDUxMSwgODA1MTgsIDgwNTI1LCA4MDUzMSwgODA1MzcsIDgwNTQzLCA4MDU0OSwgODA1NTUsIAotICAgIDgwNTYxLCAxMzU3LCAxNjA0OSwgMTIwNjEsIDgwNTY3LCA4MDU3MiwgODA1NzcsIDgwNTgyLCA4MDU4NywgODA1OTIsIAotICAgIDgwNTk3LCA4MDYwMiwgODA2MDcsIDgwNjEyLCA4MDYxNywgODA2MjIsIDgwNjI3LCA4MDYzMiwgODA2MzcsIDgwNjQyLCAKLSAgICA4MDY0NywgODA2NTIsIDgwNjU3LCA4MDY2MiwgODA2NjcsIDgwNjcyLCA4MDY3NywgODA2ODIsIDgwNjg3LCA4MDY5MiwgCi0gICAgODA2OTgsIDgwNzAzLCA4MDcwOCwgODA3MTQsIDgwNzE5LCA4MDcyNSwgODA3MzAsIDgwNzM1LCA4MDc0MSwgODA3NDYsIAotICAgIDgwNzUxLCA4MDc1NiwgODA3NjEsIDgwNzY2LCA4MDc3MSwgODA3NzYsIDgwNzgxLCA4MDM2MiwgODAzNjgsIDgwMzc0LCAKLSAgICA4MDM4MCwgODAzODYsIDgwMzkyLCA4MDM5OCwgODA0MDQsIDgwNDEwLCA4MDQxNiwgODA0MjIsIDgwNDI4LCA4MDQzNCwgCi0gICAgODA0NDAsIDgwNDQ2LCA4MDc4NywgODA0NTIsIDgwNDU4LCA4MDQ2NCwgODA3OTMsIDgwNDcwLCA4MDQ3NiwgODA0ODIsIAotICAgIDgwNDg4LCA4MDQ5NCwgODA1MDAsIDgwNTA2LCA4MDUyNiwgODA3OTksIDgwODA1LCA4MDUzMiwgODA4MTEsIDgwNTM4LCAKLSAgICA4MDU0NCwgODA1NTAsIDgwNTU2LCA4MDU2MiwgMzA5MSwgMzA5NiwgODA4MTcsIDgwODIyLCA4MDgyNSwgODA4MzEsIAotICAgIDgwODM3LCA4MDg0NCwgODA4NDksIDgwODU0LCAyMzA3LCAKKyAgICA3Nzg1NCwgNzc4NTgsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc0LCA3Nzg3OCwgNzc4ODIsIDc3ODg2LCA3Nzg5MCwgCisgICAgNzc4OTQsIDc3ODk4LCA3NzkwMywgNzc5MDcsIDc3OTExLCA3NzkxNiwgNzc5MjEsIDc3OTI1LCA3NzkyOSwgNzc5MzMsIAorICAgIDc3OTM3LCA3Nzk0MSwgNzc5NDUsIDc3OTQ5LCA3Nzk1MywgNzc5NTgsIDc3OTYyLCA3Nzk2NywgNzc5NzEsIDc3OTc2LCAKKyAgICA3Nzk4MCwgNzc5ODUsIDc3OTg5LCA3Nzk5NSwgNzgwMDAsIDc4MDA0LCA3ODAwOSwgNzgwMTMsIDc4MDE4LCA3ODAyMiwgCisgICAgNzgwMjcsIDc4MDMxLCA3ODAzNiwgMTUyMSwgNzgwNDAsIDI4MjQsIDE3NTksIDE3NjQsIDc4MDQ0LCA3ODA0OCwgMjgyOCwgCisgICAgNzgwNTIsIDEzOTcsIDc4MDU3LCAxMzQyLCA3ODA2MSwgMjg0MCwgNzgwNjUsIDc4MDcyLCA3ODA3OSwgNzgwOTMsIDI4NDQsIAorICAgIDcxMzEsIDc4MTAyLCA3ODExMCwgNzgxMTcsIDc4MTI4LCA3ODEzNywgNzgxNDQsIDc4MTU2LCA3ODE2OSwgNzgxODIsIAorICAgIDc4MTkzLCA3ODE5OCwgNzgyMDUsIDc4MjE3LCA3ODIyMSwgMjg0OCwgMTE3NDcsIDc4MjMxLCA3ODIzNiwgNzgyNDUsIAorICAgIDc4MjU1LCAyODUyLCA3ODI2MCwgNzgyNjQsIDc4MjY5LCA3ODI3NiwgNzgyODIsIDc4MjkwLCA3ODMwMiwgMTM0NywgCisgICAgMTMwNDIsIDc4MzEyLCA3ODMxNiwgNzgzMjIsIDc4MzM2LCA3ODM0OCwgNzgzNjAsIDc4MzcwLCA3ODM3OSwgNzgzODgsIAorICAgIDc4Mzk3LCA3ODQwNSwgNzg0MTYsIDc4NDI0LCA0MDUxLCA3ODQzNCwgNzg0NDUsIDc4NDU0LCA3ODQ2MCwgNzg0NzUsIAorICAgIDc4NDgyLCA3ODQ4OCwgMzU1MTQsIDc4NDkzLCAyODc2LCAxMzA0NiwgNzg0OTcsIDc4NTA0LCA4OTMwLCA3ODUxMywgMjg4MSwgCisgICAgMzIzNjEsIDc4NTE5LCA2MDYwOSwgNzg1MjYsIDc4NTMyLCA3ODU0MywgNzg1NDksIDc4NTU2LCA3ODU2MiwgNzg1NzAsIAorICAgIDc4NTc3LCA3ODU4MywgNzg1OTMsIDc4NjAyLCA3ODYxMywgNzg2MjAsIDc4NjI2LCA3ODYzNiwgNzg2NDQsIDc4NjUwLCAKKyAgICA3ODY2NSwgNzg2NzEsIDc4Njc2LCA3ODY4MywgNzg2ODYsIDc4NjkyLCA3ODY5OSwgNzg3MDUsIDc4NzEzLCA3ODcyMiwgCisgICAgNzg3MzAsIDc4NzM2LCA3ODc0NSwgNDE0NjQsIDc4NzU5LCA3ODc2NCwgNzg3NzAsIDE0NzU3LCA3ODc3NSwgNzg3ODgsIAorICAgIDc4Nzk3LCA3ODgwNSwgNzg4MTIsIDc4ODE2LCA3ODgyMCwgNzg4MjMsIDc4ODMwLCA3ODgzNywgNzg4NDUsIDc4ODUzLCAKKyAgICA3ODg2MiwgNzg4NzAsIDE0Njg0LCA3ODg3OCwgNzg4ODMsIDc4ODg3LCA3ODg5OSwgNzg5MDYsIDc4OTE1LCA3NDgsIAorICAgIDc4OTI1LCA3ODkzNCwgNzg5NDUsIDI4OTcsIDc4OTQ5LCA3ODk1MywgNzg5NTksIDc4OTcyLCA3ODk4NCwgNzg5OTQsIAorICAgIDc5MDAzLCA3OTAxNSwgMjYzNjksIDc5MDI2LCA3OTAzNCwgNzkwNDMsIDc5MDU0LCA3OTA2NSwgNzkwNzUsIDc5MDg1LCAKKyAgICA3OTA5NCwgNzkxMDIsIDExMzEyLCA3OTEwOSwgNzkxMTMsIDc5MTE2LCA3OTEyMSwgNzkxMjYsIDc5MTMwLCA3OTEzNiwgCisgICAgMTM1MiwgMTE4MTgsIDc5MTQzLCA3OTE1NCwgNzkxNjMsIDc5MTcxLCA3OTE4MCwgNzkxODgsIDc5MjA0LCA3OTIxNSwgCisgICAgNzkyMjQsIDc5MjMyLCA3OTI0NCwgNzkyNTUsIDc5MjcxLCA3OTI4MSwgNzkzMDIsIDc5MzE1LCA3OTMyMywgNzkzMzAsIAorICAgIDE0ODY4LCA3OTM0MywgNzkzNDgsIDc5MzU0LCA1OTA4LCA3OTM2MCwgNzkzNjMsIDc5MzcwLCA3OTM4MCwgODE3NiwgCisgICAgNzkzODcsIDc5MzkyLCA3OTM5NywgNzk0MDIsIDc5NDEwLCA3OTQxOSwgNzk0MjcsIDk3NTYsIDk3NjUsIDc5NDMyLCAKKyAgICA3OTQ0MywgNzk0NDgsIDc5NDU0LCAyOTEzLCAyOTE4LCA3OTQ2MCwgMTA4NzksIDc5NDY2LCA3OTQ3MywgNzk0ODAsIAorICAgIDc5NDkzLCAyMjUxLCA2OCwgNzk0OTgsIDc5NTAzLCA3OTUxMywgNzk1MTksIDc5NTI4LCA3OTUzNiwgNzk1NDYsIDc5NTUwLCAKKyAgICA3OTU1NSwgNzk1NTksIDc5NTcxLCAyOTQxLCA3OTU3OSwgNzk1ODcsIDc5NTkyLCA3OTYwMywgNzk2MTQsIDc5NjIzLCAKKyAgICA3OTYyOCwgNzk2MzQsIDc5NjM5LCA3OTY0OSwgNzk2NTksIDc5NjY0LCA3OTY3MCwgNzk2NzQsIDc5Njc5LCA3OTY4OCwgCisgICAgMjE0MTAsIDc5NjkyLCA0MTI4LCAyMCwgNzk2OTcsIDc5NzA2LCA3OTcxMywgNzk3MjAsIDc5NzI2LCA3OTczMiwgODY0LCAKKyAgICA3OTczNywgNzk3NDIsIDYwOTM3LCA3OTc0NywgNzk3NTIsIDc5NzU4LCA3OTc2NCwgNzk3NzIsIDc5Nzc3LCA3OTc4NCwgCisgICAgNzk3OTAsIDc5Nzk1LCAzODAzMCwgNDEzNTgsIDc5ODAxLCAyOTQ1LCAzMiwgNzk4MTEsIDc5ODI0LCA3OTgyOSwgNzk4MzcsIAorICAgIDc5ODQyLCA3OTg0OCwgMjk2NywgMjgzMTAsIDc5ODUzLCA3OTg2MSwgNzk4NjgsIDc5ODczLCA1ODY4MiwgNjE5NDAsIAorICAgIDc5ODgyLCA3OTg4NiwgMTcwNCwgMTgxMywgNzk4OTEsIDc5ODk2LCA3OTkwMywgMTgxNywgMjQ3LCA3OTkxMCwgNzk5MTYsIAorICAgIDI5ODksIDc5OTIxLCA3OTkyNiwgNzk5MzMsIDE4MjEsIDc5OTM4LCA3OTk0NCwgNzk5NDksIDc5OTYxLCA2MTE5LCA3OTk3MSwgCisgICAgMTgyOCwgNzk5NzcsIDc5OTgyLCA3OTk4OSwgNzk5OTYsIDgwMDExLCA4MDAxOCwgODAwMjksIDgwMDM3LCAyNjE4LCAKKyAgICA4MDA0MSwgODAwNTMsIDgwMDU4LCA4MDA2MiwgODAwNjgsIDI4MTM1LCAyMjU2LCA4MDA3MiwgODAwODMsIDgwMDg3LCAKKyAgICA4MDA5MSwgODAwOTcsIDgwMTAxLCA4MDExMCwgODAxMTQsIDgwMTI1LCA4MDEyOSwgMjMwMiwgMzIxOTAsIDgwMTMzLCAKKyAgICA4MDE0MywgMzA4MCwgOTM3MSwgODAxNTEsIDgwMTU2LCA4MDE2MCwgODAxNjksIDgwMTc2LCA4MDE4MiwgMzA1MCwgMTcxNTIsIAorICAgIDgwMTg2LCA4MDE5OSwgODAyMTcsIDgwMjIyLCA4MDIzMCwgODAyMzgsIDgwMjQ4LCA5OTg1LCAxMzE1NCwgODAyNjAsIAorICAgIDgwMjczLCA4MDI4MCwgODAyODcsIDgwMzAzLCA4MDMxMCwgODAzMTYsIDEwNjQsIDgwMzIzLCA4MDMzMCwgODAzNDAsIAorICAgIDgwMzQ5LCA4MDM2MSwgNDIzMjgsIDgwMzY5LCAzMDY0LCAxMjAzMCwgODAzNzIsIDgwMzgwLCA4MDM4NCwgNzgyNzIsIAorICAgIDMwNjgsIDgwMzg4LCAyMTE5MSwgMTIwNDYsIDM3NTYsIDgwMzkyLCAzMDc0LCA4MDM5NiwgODA0MDYsIDgwNDEyLCA4MDQxOCwgCisgICAgODA0MjQsIDgwNDMwLCA4MDQzNiwgODA0NDIsIDgwNDQ4LCA4MDQ1NCwgODA0NjAsIDgwNDY2LCA4MDQ3MiwgODA0NzgsIAorICAgIDgwNDg0LCA4MDQ5MCwgODA0OTYsIDgwNTAyLCA4MDUwOCwgODA1MTQsIDgwNTIwLCA4MDUyNiwgODA1MzIsIDgwNTM4LCAKKyAgICA4MDU0NCwgODA1NTAsIDgwNTU2LCA4MDU2MywgODA1NzAsIDgwNTc2LCA4MDU4MiwgODA1ODgsIDgwNTk0LCA4MDYwMCwgCisgICAgODA2MDYsIDEzNTcsIDE2MDYyLCAxMjA2OCwgODA2MTIsIDgwNjE3LCA4MDYyMiwgODA2MjcsIDgwNjMyLCA4MDYzNywgCisgICAgODA2NDIsIDgwNjQ3LCA4MDY1MiwgODA2NTcsIDgwNjYyLCA4MDY2NywgODA2NzIsIDgwNjc3LCA4MDY4MiwgODA2ODcsIAorICAgIDgwNjkyLCA4MDY5NywgODA3MDIsIDgwNzA3LCA4MDcxMiwgODA3MTcsIDgwNzIyLCA4MDcyNywgODA3MzIsIDgwNzM3LCAKKyAgICA4MDc0MywgODA3NDgsIDgwNzUzLCA4MDc1OSwgODA3NjQsIDgwNzcwLCA4MDc3NSwgODA3ODAsIDgwNzg2LCA4MDc5MSwgCisgICAgODA3OTYsIDgwODAxLCA4MDgwNiwgODA4MTEsIDgwODE2LCA4MDgyMSwgODA4MjYsIDgwNDA3LCA4MDQxMywgODA0MTksIAorICAgIDgwNDI1LCA4MDQzMSwgODA0MzcsIDgwNDQzLCA4MDQ0OSwgODA0NTUsIDgwNDYxLCA4MDQ2NywgODA0NzMsIDgwNDc5LCAKKyAgICA4MDQ4NSwgODA0OTEsIDgwODMyLCA4MDQ5NywgODA1MDMsIDgwNTA5LCA4MDgzOCwgODA1MTUsIDgwNTIxLCA4MDUyNywgCisgICAgODA1MzMsIDgwNTM5LCA4MDU0NSwgODA1NTEsIDgwNTcxLCA4MDg0NCwgODA4NTAsIDgwNTc3LCA4MDg1NiwgODA1ODMsIAorICAgIDgwNTg5LCA4MDU5NSwgODA2MDEsIDgwNjA3LCAzMDkxLCAzMDk2LCA4MDg2MiwgODA4NjcsIDgwODcwLCA4MDg3NiwgCisgICAgODA4ODIsIDgwODg5LCA4MDg5NCwgODA4OTksIDIzMDcsIAogfTsKIAogLyogY29kZS0+bmFtZSBwaHJhc2Vib29rICovCiAjZGVmaW5lIHBocmFzZWJvb2tfc2hpZnQgNwogI2RlZmluZSBwaHJhc2Vib29rX3Nob3J0IDIwOQogc3RhdGljIHVuc2lnbmVkIGNoYXIgcGhyYXNlYm9va1tdID0gewotICAgIDAsIDIxOSwgMTgsIDI0NSwgMzEsIDc4LCAyMjMsIDI1NCwgNzgsIDU0LCA1MCwgMjQ3LCAxMzIsIDUwLCAyMjUsIDE4MiwgCi0gICAgNTAsIDI1NCwgMTI2LCAyNTQsIDU3LCA0MywgMjI2LCAzLCA0NCwgMjI2LCAzLCAyNTMsIDIxNiwgOTYsIDUwLCAyNDksIAotICAgIDIxOSwgMjQwLCAxNjcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjE5LCA0NiwgMjEsIDIxMCwgODYsIDIxLCAxMTAsIDIxLCAKLSAgICAxMDUsIDIxLCAxNTgsIDIxLCAxNjEsIDIxLCAxODksIDIxLCAxOTQsIDIxLCAxOTgsIDIxLCAxOTUsIDIxLCAyMDAsIDI0OSwgCi0gICAgMjI2LCAyMjAsIDE1MCwgMjMzLCAxNSwgNTAsIDI0NSwgOTgsIDUwLCAyNDIsIDEzMCwgNTAsIDIyNCwgMTMsIDc4LCAyNDksIAotICAgIDIxNywgMjUzLCAyMDYsIDcsIDYsIDEsIDYxLCA3LCA2LCAxLCAyNTMsIDE1OCwgNywgNiwgMSwgMjUxLCA2NiwgNywgNiwgMSwgCi0gICAgMjQ5LCA2MCwgNywgNiwgMSwgNzUsIDcsIDYsIDEsIDI0NSwgNiwgNywgNiwgMSwgMjQzLCAyMDIsIDcsIDYsIDEsIDI0MiwgCi0gICAgNjAsIDcsIDYsIDEsIDczLCA3LCA2LCAxLCAyMzUsIDE0NCwgNywgNiwgMSwgMjM1LCAyMywgNywgNiwgMSwgMTU2LCA3LCA2LCAKLSAgICAxLCAxOTMsIDcsIDYsIDEsIDIzMCwgMjUsIDcsIDYsIDEsIDc2LCA3LCA2LCAxLCAyMjYsIDEwNSwgNywgNiwgMSwgMjI0LCAKLSAgICA5NiwgNywgNiwgMSwgMTUzLCA3LCA2LCAxLCAyMjIsIDkxLCA3LCA2LCAxLCAyMTcsIDE1MiwgNywgNiwgMSwgNzAsIDcsIDYsIAotICAgIDEsIDIxNCwgMTA1LCA3LCA2LCAxLCAyMTIsIDk4LCA3LCA2LCAxLCAyMTEsIDE3OCwgNywgNiwgMSwgMjExLCAxMTcsIDcsIAotICAgIDYsIDEsIDIxMCwgMTU5LCA0MywgNDIsIDEyNywgMjIzLCA1MCwgMjE5LCA0NiwgNDQsIDQyLCAxMjcsIDI1MCwgMzEsIDI1NSwgCi0gICAgMTQsIDEyMSwgMjMyLCAyMTMsIDI0MiwgMTM3LCAyNTUsIDE0LCA3LCA0LCAxLCA2MSwgNywgNCwgMSwgMjUzLCAxNTgsIDcsIAotICAgIDQsIDEsIDI1MSwgNjYsIDcsIDQsIDEsIDI0OSwgNjAsIDcsIDQsIDEsIDc1LCA3LCA0LCAxLCAyNDUsIDYsIDcsIDQsIDEsIAotICAgIDI0MywgMjAyLCA3LCA0LCAxLCAyNDIsIDYwLCA3LCA0LCAxLCA3MywgNywgNCwgMSwgMjM1LCAxNDQsIDcsIDQsIDEsIDIzNSwgCi0gICAgMjMsIDcsIDQsIDEsIDE1NiwgNywgNCwgMSwgMTkzLCA3LCA0LCAxLCAyMzAsIDI1LCA3LCA0LCAxLCA3NiwgNywgNCwgMSwgCi0gICAgMjI2LCAxMDUsIDcsIDQsIDEsIDIyNCwgOTYsIDcsIDQsIDEsIDE1MywgNywgNCwgMSwgMjIyLCA5MSwgNywgNCwgMSwgMjE3LCAKLSAgICAxNTIsIDcsIDQsIDEsIDcwLCA3LCA0LCAxLCAyMTQsIDEwNSwgNywgNCwgMSwgMjEyLCA5OCwgNywgNCwgMSwgMjExLCAxNzgsIAotICAgIDcsIDQsIDEsIDIxMSwgMTE3LCA3LCA0LCAxLCAyMTAsIDE1OSwgNDMsIDI0OSwgOTksIDEyNywgNjcsIDIzMiwgMjEzLCA0NCwgCi0gICAgMjQ5LCA5OSwgMTI3LCAxODIsIDIyOCwgNzMsIDIxOSwgMTgsIDIzNSwgMTkzLCAyNDUsIDMxLCA3OCwgMjUwLCAxNzYsIDUwLCAKLSAgICAyMjQsIDIyOCwgNTAsIDI0OSwgOTgsIDUwLCAyMTEsIDQwLCA1MCwgMjUxLCAxMzUsIDEzMCwgMjIxLCAxNzMsIDUwLCAyNDgsIAotICAgIDEsIDI0OSwgMTYzLCA1MCwgMjQ0LCAxMzYsIDIyNiwgMTU0LCAyMzUsIDIzOCwgMjMzLCA0MiwgNTIsIDI1NCwgMTEwLCAKLSAgICAyMjMsIDI1NCwgNzgsIDIyOCwgNTIsIDUwLCAyMTksIDUyLCAyNDAsIDE2OCwgMjIzLCAxMDIsIDUwLCAyMzEsIDIzMiwgCi0gICAgMjQ4LCA3MSwgNTAsIDIyNSwgMjEsIDUwLCAyMTgsIDIzLCAxMDUsIDIxOCwgMjMsIDE1OCwgMjU1LCAzLCAyNTUsIDE0LCAKLSAgICAyMzAsIDIyOCwgNTAsIDIyNSwgNjgsIDUwLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDI1MCwgMTgzLCAyMTgsIDIzLCAxMTAsIAotICAgIDIzMSwgMTQ4LCAyMjYsIDE1NCwgMjM1LCAyMzgsIDIyMiwgMjQ3LCA1MiwgMjU0LCAxMTAsIDIyMywgMjU0LCA3OCwgMjEyLCAKLSAgICAxMTQsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIDIxMiwgMTE0LCAyNDQsIAotICAgIDIsIDEzNCwgMjI0LCAxOSwgMjM1LCAxOTMsIDIyNCwgMTMsIDc4LCA3LCA2LCAxLCAxMTUsIDIsIDI0MiwgMTM2LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDE0MiwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAxMTUsIDIsIDE4MiwgNywgNiwgMSwgCi0gICAgMTE1LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA2LCAxLCAyNTQsIDI0MywgNywgNiwgCi0gICAgMSwgMjUxLCA2NywgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDE2MCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDE2MCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgCi0gICAgMjQyLCAxMzYsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyNTAsIDMwLCA3LCA2LCAKLSAgICAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyNDUsIDU5LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAxODIsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE0NCwgMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzAsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgMTgyLCA3LCA2LCAxLCAxNDQsIDIsIDI0OCwgMSwgMjMwLCA4NCwgNTAsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgOTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDEwNCwgMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIAotICAgIDI1MCwgMzAsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMTQyLCA3LCA2LCAxLCAKLSAgICAyMTYsIDE1MSwgNywgNCwgMSwgMjIwLCA3NiwgMjIyLCA5MSwgNywgNCwgMSwgMTE1LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgCi0gICAgMTE1LCAyLCAxNDIsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAzMCwgNywgNCwgMSwgMTE1LCAyLCAxODIsIDcsIDQsIDEsIAotICAgIDExNSwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA0OCwgNywgNCwgMSwgMjU0LCAyNDMsIDcsIDQsIAotICAgIDEsIDI1MSwgNjcsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAxNjAsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDE0MiwgCi0gICAgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAxNjAsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIAotICAgIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjUwLCAzMCwgNywgNCwgCi0gICAgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjQ1LCA1OSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMTgyLCA3LCA0LCAKLSAgICAxLCAxNDQsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMwLCA3LCAKLSAgICA0LCAxLCAxNDQsIDIsIDE4MiwgNywgNCwgMSwgMTQ0LCAyLCAyNDgsIDEsIDI0NywgMTY5LCA1MCwgNywgNCwgMSwgMTQ0LCAKLSAgICAyLCA5MSwgNywgNCwgMSwgMTA0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgCi0gICAgMjUwLCAzMCwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAxNDIsIDcsIDQsIDEsIAotICAgIDIxNiwgMTUxLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAxMTUsIDIsIDIzMSwgMjMyLCA3LCA0LCAKLSAgICAxLCAxMTUsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgCi0gICAgMTQ2LCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI0LCA3LCA0LCAxLCAxMTUsIDIsIDIyNiwgMjI0LCA3LCA2LCAxLCAyNTEsIAotICAgIDY3LCAyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDE0MiwgNywgNiwgMSwgMjUxLCA2NywgMiwgMjUwLCAzMCwgNywgNCwgCi0gICAgMSwgMjUxLCA2NywgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjUxLCA2NywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAKLSAgICA1OSwgNDgsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDIzNCwgNywgCi0gICAgNiwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDksIAotICAgIDYxLCAyLCA5MSwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgOTEsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDE2MCwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDE2MCwgMiwgMjUxLCAxNDYsIAotICAgIDcsIDYsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAotICAgIDIyNCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTYwLCAKLSAgICAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyNTAsIAotICAgIDMwLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyNTEsIDE0NiwgNywgNiwgCi0gICAgMSwgMjQzLCAyMDMsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQzLCAyMDMsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MCwgCi0gICAgMzAsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDkxLCA3LCA0LCAxLCAyNDIsIAotICAgIDYxLCAyLCA5MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDE4MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDE4MiwgNywgNiwgMSwgCi0gICAgMjQwLCAxNTQsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDI0MCwgMTU0LCAKLSAgICAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAKLSAgICAyMjQsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDU5LCA0OCwgNywgNCwgCi0gICAgMSwgMjQ3LCAxMTksIDczLCA3LCA2LCAyNywgMjM2LCAzMSwgNywgNCwgMjcsIDIzNiwgMzEsIDcsIDYsIDEsIDIzNSwgMTQ1LCAKLSAgICAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyMzUsIDE0NSwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjM1LCAyNCwgMiwgMjUwLCAxODMsIAotICAgIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMzMsIDIzOSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIAotICAgIDE0MiwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDE0MiwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAKLSAgICAyMzMsIDE0OSwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgOTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAKLSAgICA5MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMTQyLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAxNDIsIDcsIDYsIDEsIDIzMCwgMjYsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjMwLCAyNiwgMiwgMjUwLCAKLSAgICAyMzQsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzAsIDI2LCAyMjQsIDIwNCwgMjUxLCA3OCwgCi0gICAgMjU0LCA1NywgNywgNiwgMSwgMjQ1LCAxMzgsIDcsIDQsIDEsIDI0NSwgMTM4LCA3LCA2LCAxLCAxNDQsIDIsIDIzMSwgMjMyLCAKLSAgICA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxNDQsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxNDQsIDIsIAotICAgIDI1MSwgMTQ2LCA3LCA2LCAxLCAxNDQsIDIsIDUyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgNTIsIDE0MiwgNywgNiwgMjcsIAotICAgIDIyNiwgMjM0LCA3LCA0LCAyNywgMjI2LCAyMzQsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAxNDIsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCAxNDIsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDI1MCwgCi0gICAgMTgzLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyNTAsIDIzNCwgNywgCi0gICAgNiwgMSwgMjIyLCA5MiwgMiwgMTQyLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAxNDIsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIAotICAgIDI1MCwgMzAsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMTgzLCA3LCAKLSAgICA0LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIyMiwgCi0gICAgOTIsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAKLSAgICAyNTAsIDE4MywgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAyMzQsIAotICAgIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA5MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDkxLCA3LCA2LCAxLCAxMDQsIDIsIDE4MiwgCi0gICAgNywgNCwgMSwgMTA0LCAyLCAxODIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDEwNCwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDEwNCwgMiwgMjUxLCAxNDYsIDcsIDYsIDEsIDEwNCwgCi0gICAgMiwgMjIyLCAyMzQsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDIyMiwgMjM0LCA0OCwgNywgNiwgMSwgMTA0LCAyLCA1MiwgMTQyLCAKLSAgICA3LCA0LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjQsIDcsIDQsIDEsIDEwNCwgMiwgCi0gICAgMjI2LCAyMjQsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzAsIDcsIAotICAgIDYsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjExLCAKLSAgICAxMTgsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgCi0gICAgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEwLCAKLSAgICAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDE5OSwgMjIyLCA5MSwgCi0gICAgNywgNCwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCA1NywgMiwgMTAzLCA3LCA2LCAxLCA1NywgMiwgMjE2LCAxMSwgNywgNCwgCi0gICAgMSwgNTcsIDIsIDIxNiwgMTEsIDcsIDYsIDEsIDEzOCwgMTk0LCA3LCA0LCAxLCAxMzgsIDE5NCwgNywgNiwgMSwgMjA0LCAKLSAgICA3NiwgNywgNiwgMSwgMjUxLCA2NywgMiwgMTAzLCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAxMDMsIDcsIDYsIDEsIDI1NCwgCi0gICAgMjE5LCAyNDksIDYwLCA3LCA2LCAxLCAyNDksIDYxLCAyLCAxMDMsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDIxNiwgMTEsIDcsIAotICAgIDQsIDEsIDI0OSwgNjEsIDIsIDIxNiwgMTEsIDcsIDQsIDEsIDIxNSwgOTQsIDI0OCwgNTQsIDcsIDYsIDEsIDIyMywgNDksIAotICAgIDc1LCA3LCA2LCAxLCAyMjEsIDE5NSwgNywgNiwgMSwgMjA0LCA3NSwgNywgNiwgMSwgMjQ1LCA3LCAyLCAxMDMsIDcsIDQsIAotICAgIDEsIDI0NSwgNywgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIDEwNywgNywgNCwgMSwgCi0gICAgMjQwLCAyMDEsIDcsIDYsIDEsIDIzNSwgMTg1LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgOTEsIDcsIDYsIDEsIDIzNSwgMjQsIAotICAgIDIsIDEwMywgNywgNCwgMSwgMjM1LCAyNCwgMiwgMTAzLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMTMwLCA3LCA0LCAxLCAKLSAgICAyMzMsIDEwMCwgMiwgOTEsIDcsIDYsIDEsIDIxNSwgOTQsIDE5MywgNywgNiwgMSwgMjMwLCAyNiwgMiwgNDMsIDEwMywgNywgCi0gICAgNCwgMSwgMjMwLCAyNiwgMiwgMTk5LCA0NCwgMjMzLCAzNiwgNywgNiwgMSwgMTQ0LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDI0MCwgMjQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MCwgMjQ4LCA3LCA2LCAxLCAyMjYsIDIxOSwgNywgNCwgCi0gICAgMSwgMjI2LCAyMTksIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAxMDMsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAxMDMsIDcsIDEsIAotICAgIDIxMCwgMjE0LCA3LCA2LCAxLCAxMzgsIDEwNSwgNywgNCwgMSwgMTM4LCAxMDUsIDcsIDYsIDEsIDI0NSwgNzUsIDcsIDEsIAotICAgIDIyMywgNDksIDI0NSwgNzYsIDIzMiwgMTIzLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjI2LCA2NiwgMTAzLCA3LCA2LCAxLCAKLSAgICAyMTcsIDE1MywgMiwgMTAzLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMTAzLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjIzLCAKLSAgICA1NSwgMTAzLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ4LCA3LCA2LCAxLCAKLSAgICAyMTQsIDE1NywgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgNiwgMSwgMjExLCAxMTgsIDIsIDEwMywgNywgNCwgMSwgCi0gICAgMjExLCAxMTgsIDIsIDEwMywgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIAotICAgIDYsIDEsIDI0NSwgOCwgNywgNiwgMSwgMjQ1LCA5LCAyMjMsIDQ4LCA3LCA0LCAxLCAyNDUsIDksIDIyMywgNDgsIDcsIDQsIAotICAgIDEsIDI0NSwgOSwgMiwgMjE3LCA3NywgNywgMSwgMTEzLCAyLCA5MSwgNywgNiwgMSwgMTM4LCAxODksIDcsIDQsIDEsIDEzOCwgCi0gICAgMTg5LCA3LCAxLCAyMzUsIDE5MywgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgMSwgMjExLCAxODEsIDcsIDEsIAotICAgIDI0OCwgNDcsIDI1MCwgMTEsIDcsIDEsIDIzMywgNzcsIDI1MCwgMTEsIDcsIDEsIDI1NCwgMTM3LCAyNTAsIDExLCA3LCAxLCAKLSAgICAyMjMsIDU1LCAyNTAsIDExLCA3LCA2LCAxLCAyNDYsIDQwLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQ5LCA2MSwgMiwgNCwgCi0gICAgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDYsIDQwLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjMyLCAKLSAgICAxODgsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCA0LCAxLCAyMzUsIDE0NCwgNywgNCwgMSwgMjMyLCAxODgsIDcsIDYsIDEsIAotICAgIDIyOCwgMTg2LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA0LCAxLCAyMzUsIDE0NCwgNywgNCwgMSwgMjI4LCAxODYsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAKLSAgICAyNTAsIDIzNCwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMjM0LCA3LCAKLSAgICA0LCAxLCAxNDQsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgCi0gICAgMjM0LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIAotICAgIDIzMSwgMjMyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgCi0gICAgMjUwLCAyMzQsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIxNSwgOTQsIDc1LCA3LCA2LCAxLCAxMTUsIDIsIDI0OCwgMiwgMjIsIDIzMSwgCi0gICAgMjMyLCA3LCA0LCAxLCAxMTUsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxMTUsIDIsIDU5LCA3NywgMjIsIAotICAgIDIzMSwgMjMyLCA3LCA0LCAxLCAxMTUsIDIsIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAyNTQsIDI0NCwgMiwgCi0gICAgMjMxLCAyMzIsIDcsIDQsIDEsIDI1NCwgMjQ0LCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDkxLCA3LCA0LCAKLSAgICAxLCAyNDMsIDIwMywgMiwgOTEsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIAotICAgIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjUwLCAyMzQsIAotICAgIDcsIDYsIDEsIDE0NCwgMiwgMjI2LCAyMjQsIDcsIDQsIDEsIDE0NCwgMiwgMjI2LCAyMjQsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjI2LCAyMjUsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTQ0LCAyLCAyMjYsIDIyNSwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAyNDUsIDksIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDUsIDksIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzUsIDE0NSwgMiwgCi0gICAgMjUwLCAyMzQsIDcsIDYsIDEsIDI0NiwgMzksIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDQsIDEsIDIxMCwgMTU5LCA3LCA0LCAxLCAKLSAgICAyNDYsIDM5LCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMTQyLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMTQyLCA3LCA2LCAxLCAKLSAgICAyNDAsIDE5OSwgNywgNiwgMSwgMjExLCAxODEsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMzAsIAotICAgIDI2LCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNzcsIDIyLCAxNDIsIDcsIDQsIDEsIDExNSwgMiwgCi0gICAgMjIyLCAyMzQsIDc3LCAyMiwgMTQyLCA3LCA2LCAxLCAyNTQsIDI0NCwgMiwgMTQyLCA3LCA0LCAxLCAyNTQsIDI0NCwgMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDIxOCwgMTAzLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxOCwgMTAzLCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTE1LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMTUsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgCi0gICAgMSwgMTYwLCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIAotICAgIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMTYwLCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDYsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTQ0LCAKLSAgICAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDE0NCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCAKLSAgICA2LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDEwNCwgCi0gICAgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMDQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgMSwgMjIyLCAKLSAgICA5MiwgMiwgMjQ5LCAyMjAsIDUxLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyNDksIDIyMCwgNTEsIDcsIDYsIDEsIDIxNywgCi0gICAgMTUzLCAyLCAyNDksIDIyMCwgNTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNDksIDIyMCwgNTEsIDcsIDYsIDEsIDIxMCwgCi0gICAgMjMxLCA3LCA0LCAxLCAyMTAsIDIzMSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0MiwgNjEsIAotICAgIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAxOTksIDQ0LCAyMzMsIDM2LCA3LCA0LCAxLCAyNDksIDYxLCAyLCAKLSAgICAyNDksIDEwMCwgNywgNiwgMSwgMjI2LCAxMzQsIDcsIDQsIDEsIDIyNiwgMTM0LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA2LCAxLCAxMTUsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTE1LCAyLCAKLSAgICA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIAotICAgIDE0NCwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE0NCwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgODksIDIyLCAyMzEsIAotICAgIDIzMiwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAyMTEsIDExOCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDI0OSwgCi0gICAgMTAwLCA3LCA0LCAxLCAyNDcsIDExOSwgMjM1LCAxNDQsIDcsIDQsIDEsIDI0OCwgMTQzLCAyNDcsIDIyMCwgNywgNCwgMSwgCi0gICAgMjI0LCAzMSwgMjQ3LCAyMjAsIDcsIDYsIDEsIDExNSwgMiwgOTEsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDkxLCA3LCA0LCAxLCAKLSAgICAyNTEsIDY3LCAyLCA5MSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDEzMCwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI0NywgCi0gICAgMjU1LCA5MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjE3LCAyNTAsIDIxNywgNzcsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAyMTcsIDI1MCwgMjE3LCA3NywgNywgNiwgMSwgMjQyLCAxODAsIDIxOCwgMTI5LCA3LCA0LCAxLCAyNDIsIDE4MCwgMjE4LCAKLSAgICAxMjksIDcsIDYsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgMTA0LCAxMzAsIDcsIDYsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCAKLSAgICA3LCA2LCAxLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAxNjAsIDIsIDkxLCA3LCA2LCAxLCAyMzUsIDE0NSwgMiwgOTEsIDcsIDQsIAotICAgIDEsIDIzNSwgMTQ1LCAyLCA5MSwgNywgNiwgMSwgNCwgMjI0LCA5NywgMiwgMjQxLCA1MiwgMjE3LCA3NywgNywgNCwgMSwgCi0gICAgMjI0LCA5NywgMiwgMjQxLCA1MiwgMjE3LCA3NywgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDkxLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgOTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCA5MSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAKLSAgICAyMTUsIDk0LCA2MSwgNywgNCwgMSwgMjU0LCAxNDMsIDcsIDQsIDEsIDIxNSwgOTQsIDI1NCwgMTQzLCA3LCA0LCAxLCA1NywgCi0gICAgMiwgMTAzLCA3LCA0LCAxLCAyMDQsIDc2LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjQ5LCAKLSAgICA2MSwgMiwgMjE3LCA3NywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMTAzLCA3LCA0LCAxLCAyMjMsIDQ5LCA3NSwgNywgNCwgMSwgCi0gICAgMjIxLCAxOTUsIDcsIDQsIDEsIDIyMSwgMTk2LCAyLCAxMDMsIDcsIDQsIDEsIDIwNCwgNzUsIDcsIDQsIDEsIDIyMywgNDksIAotICAgIDIwNCwgNzUsIDcsIDQsIDEsIDIyMywgNDksIDIwNCwgMTYwLCAyLCAxMDMsIDcsIDQsIDEsIDI1MCwgMCwgMjIzLCA0OSwgCi0gICAgMjA0LCA3NSwgNywgNCwgMSwgMjQ3LCAxMTksIDIzNSwgMTQ1LCAyLCA5MSwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDEwMywgCi0gICAgNywgNCwgMSwgMTE5LCAyNDMsIDIwMiwgNywgMSwgNCwgNiwgMjQzLCAyMDIsIDcsIDQsIDEsIDI0MywgMTA3LCA3LCA0LCAxLCAKLSAgICAyMjMsIDE1MSwgMjQwLCAyNDgsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjAsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDEwMywgCi0gICAgNywgNCwgMSwgMjQxLCAyMDgsIDIsIDEwMywgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE4NSwgCi0gICAgNywgMSwgNCwgNiwgNzMsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjUyLCA0MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjMzLCAxLCA3LCA0LCAxLCAKLSAgICAyMTUsIDk0LCAxOTMsIDcsIDQsIDEsIDIxNSwgOTQsIDIzMiwgNTAsIDIsIDE5OSwgMjMzLCAzNiwgNywgNCwgMSwgMjMyLCAKLSAgICA1MCwgMiwgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCA0MywgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyMjMsIDU1LCAKLSAgICAxMDMsIDcsIDEsIDQsIDYsIDIzMCwgMjUsIDcsIDQsIDEsIDI1MiwgMTM0LCA3NiwgNywgMSwgNCwgNiwgMjI2LCAyMzQsIDcsIAotICAgIDQsIDEsIDI1MCwgMCwgMjI2LCAyMDEsIDcsIDQsIDEsIDIyNSwgMTMzLCA3LCA0LCAxLCAyMTUsIDk0LCAxNTMsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAxOTksIDIzMywgMzYsIDcsIDQsIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAKLSAgICAxMDMsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAxOTksIDIzMywgMzYsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyMTcsIDc3LCAKLSAgICA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjQ0LCA4NywgNywgNCwgMSwgMjIzLCA0OSwgMjIzLCAyMjQsIDIsIDI0NCwgODcsIDcsIAotICAgIDEsIDQsIDYsIDE1MywgNywgMSwgNCwgNiwgMjM1LCAxOTMsIDE1MywgNywgNCwgMSwgMjIyLCA5MiwgMiwgMTAzLCA3LCA0LCAKLSAgICAxLCAyNDUsIDc1LCA3LCA0LCAxLCAyNDcsIDExOSwgMjM1LCAxNDUsIDIsIDIxOCwgMTAzLCAyMiwgMTAzLCA3LCA0LCAxLCAKLSAgICAyMTgsIDIzMSwgMjIzLCA0OSwgMjQ1LCA3NSwgNywgNCwgMSwgMjQ1LCA3NiwgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIxNSwgCi0gICAgOTQsIDIxNywgMTUyLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAxMDQsIDEzMCwgNywgCi0gICAgNCwgMSwgMjE0LCAxNTcsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxMDMsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCA3LCAKLSAgICA0LCAxLCAyMTUsIDk0LCAyMTIsIDk4LCA3LCA0LCAxLCAyMTUsIDk0LCAyMTEsIDExNywgNywgMSwgNCwgNiwgMjExLCAxMTcsIAotICAgIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNDksIDEwMCwgNywgNCwgCi0gICAgMSwgMjQ1LCA4LCA3LCA0LCAxLCAyNDUsIDksIDIsIDI0OSwgMTAwLCA3LCAxLCAyNDIsIDE4MCwgMjE4LCAxMjksIDcsIDEsIAotICAgIDIyNSwgMTM5LCAyMTMsIDEzNSwgMjQzLCAyNDksIDcsIDEsIDIzNSwgMTkzLCAyNDIsIDE4MCwgMjE4LCAxMjksIDcsIDEsIAotICAgIDIxOCwgMTEwLCAyNTEsIDY2LCA3LCAxLCAyNTEsIDI0NiwgMjUwLCAxMSwgNywgMSwgNCwgNiwgMjUzLCAxNTgsIDcsIDQsIAotICAgIDEsIDI1MCwgMCwgMjA0LCA3NSwgNywgMSwgNCwgNiwgMjQzLCAyMDMsIDIsIDEwMywgNywgMSwgNCwgNiwgMjQyLCA2MCwgNywgCi0gICAgNCwgMSwgMjM1LCAxNDUsIDIsIDI0OSwgMTI3LCA3LCA0LCAxLCAyMTUsIDk0LCAyMzUsIDIzLCA3LCAxLCA0LCA2LCAxNTYsIAotICAgIDcsIDQsIDEsIDIyNCwgOTcsIDIsIDEwMywgNywgMSwgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgMSwgMjIzLCA0OSwgCi0gICAgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgNCwgMSwgMjQ2LCA0MCwgMjQ3LCAyMjAsIDcsIDQsIDEsIDI0OCwgMjYsIAotICAgIDI0NywgMjIwLCA3LCA0LCAxLCAyNDYsIDQwLCAyNDcsIDIyMSwgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIxNSwgMTg1LCAKLSAgICAyNDcsIDIyMCwgNywgNCwgMSwgMjE2LCAyMzUsIDI0NywgMjIwLCA3LCA0LCAxLCAyMTcsIDI5LCAyNDcsIDIyMSwgMiwgCi0gICAgMjQ5LCAxMDAsIDcsIDQsIDEsIDI0NCwgMTM0LCAyNDcsIDIyMCwgNywgNCwgMSwgMjMyLCAxMDAsIDI0NywgMjIwLCA3LCA0LCAKLSAgICAxLCAyMzIsIDUxLCAyNDcsIDIyMCwgNywgMSwgMjUxLCAyNDYsIDIyNSwgMTgxLCA3LCAxLCAyNTEsIDI1NCwgMjI1LCAxODEsIAotICAgIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjEsIDIsIDI0NCwgODcsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjEsIDIsIDI0NCwgCi0gICAgODgsIDIyLCAyMTcsIDc3LCA1OCwgMSwgNCwgMjQyLCA2MCwgNTgsIDEsIDQsIDI0MiwgNjEsIDIsIDEwMywgNTgsIDEsIDQsIAotICAgIDIzNSwgMTQ0LCA1OCwgMSwgNCwgMTUzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMTUzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjIzLCAKLSAgICAyMjQsIDIsIDEwMywgNTgsIDEsIDQsIDYsIDIzNSwgMTkzLCAxNTMsIDU4LCAxLCA0LCAyMTIsIDk4LCA1OCwgMSwgNCwgCi0gICAgMjExLCAxMTcsIDU4LCAxLCAyMjQsIDE5MCwgNTgsIDEsIDUyLCAyMjQsIDE5MCwgNTgsIDEsIDIxNSwgOTQsIDI0OSwgMjE5LCAKLSAgICA1OCwgMSwgMjU0LCA1NywgNTgsIDEsIDIyMywgNDksIDI0OSwgMjE5LCA1OCwgMSwgNDQsIDE2MywgMjIyLCAyMzMsIDU4LCAKLSAgICAxLCA0MywgMTYzLCAyMjIsIDIzMywgNTgsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgNTgsIDEsIDIyMywgNDksIDI0MiwgCi0gICAgMTgwLCAyMTgsIDEyOSwgNTgsIDEsIDQzLCAyNTMsIDI0OSwgNTgsIDEsIDQ0LCAyNTMsIDI0OSwgNTgsIDEsIDEyMCwgMjUzLCAKLSAgICAyNDksIDU4LCAxLCAxMjQsIDI1MywgMjQ5LCA1OCwgMSwgMjUwLCAzMSwgMjU1LCAxNCwgMjUwLCAyMzQsIDU4LCAxLCA2NywgCi0gICAgMjMyLCAyMTMsIDU4LCAxLCAyMzEsIDIzMiwgNTgsIDEsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDI0MiwgMTM3LCAyNTUsIAotICAgIDE0LCA1OCwgMSwgMTIxLCA2NywgMjMyLCAyMTMsIDU4LCAxLCAxMjEsIDIzMSwgMjMyLCA1OCwgMSwgMTIxLCAyNDIsIDEzNywgCi0gICAgMjU1LCAxNCwgNTgsIDEsIDEyMSwgMjU1LCAzLCAyNTUsIDE0LCA1OCwgMSwgMjE1LCAyMjIsIDI0OSwgMjI2LCA1OCwgMSwgCi0gICAgMTYzLCAyMTUsIDIyMiwgMjQ5LCAyMjYsIDU4LCAxLCAyNTAsIDE3MywgNDQsIDE2MywgMjIyLCAyMzMsIDU4LCAxLCAyNTAsIAotICAgIDE3MywgNDMsIDE2MywgMjIyLCAyMzMsIDU4LCAxLCAxMjAsIDIxNywgODcsIDU4LCAxLCAxMjQsIDIxNywgODcsIDU4LCAxLCAKLSAgICA5NiwgNTAsIDU4LCAxLCAyMzAsIDE4MiwgNTAsIDI1MSwgMTQ2LCA1OSwgNDgsIDIyMiwgMjM0LCA0OCwgMjI2LCAyMjQsIDQsIAotICAgIDE4MiwgNTIsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDIyMywgMzYsIDEwMywgNTgsIDEsIDI0OSwgMTMxLCAyNTUsIDE0LCAKLSAgICA1OCwgMSwgNCwgMjQzLCAxMDcsIDU4LCAxLCA0LCAxNTYsIDU4LCAxLCA0LCAyMjIsIDkxLCA1OCwgMSwgNCwgMjExLCAxNzgsIAotICAgIDU4LCAxLCA0LCAyMjMsIDQ5LCAyNDIsIDE4MCwgMjE4LCAxMjksIDU4LCAxLCAyNDUsIDIwLCAxMzgsIDEzMCwgNTgsIDEsIAotICAgIDEyNSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIyNSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDEzOCwgMTMwLCA1OCwgMSwgCi0gICAgMjQ1LCAxOSwgMTM4LCAxMzAsIDU4LCAxLCAyMTAsIDI1NCwgMjQ4LCA0NCwgMTM4LCA3OCwgNTgsIDEsIDIxMSwgNzAsIAotICAgIDI0OCwgNDQsIDEzOCwgNzgsIDU4LCAxLCAyMTMsIDEzMywgNTgsIDEsIDIxNCwgMTg2LCA1OCwgMSwgNTIsIDI1NCwgNTcsIAotICAgIDU4LCAxLCAxMjEsIDEyNCwgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDEyMCwgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDQzLCAKLSAgICAyNTMsIDI0OSwgNTgsIDEsIDEyMSwgNDQsIDI1MywgMjQ5LCA1OCwgMSwgMTIxLCAyMjIsIDIzMywgNTgsIDEsIDIzMCwgCi0gICAgMjI0LCAyNDIsIDEzNywgMjU1LCAxNCwgNTgsIDEsIDIzMCwgMjI0LCA1MiwgMjQyLCAxMzcsIDI1NSwgMTQsIDU4LCAxLCAKLSAgICAyMzAsIDIyNCwgNTIsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDEyMSwgMTgyLCA1OCwgMSwgMjIzLCAxNTcsIDI0OSwgCi0gICAgMjI2LCA1OCwgMSwgMjUyLCA1OCwgMTI1LCAyMTYsIDMwLCA1OCwgMSwgMjQ1LCAxNDMsIDEyNSwgMjE2LCAzMCwgNTgsIDEsIAotICAgIDI1MiwgNTgsIDEyMSwgMjE2LCAzMCwgNTgsIDEsIDI0NSwgMTQzLCAxMjEsIDIxNiwgMzAsIDU4LCAxLCAyMjAsIDU0LCA1OCwgCi0gICAgMSwgMjA0LCAyMjAsIDU0LCA1OCwgMSwgMTIxLCA0MywgNzQsIDM4LCAyNDIsIDEzNywgMjU1LCAxNCwgMzgsIDI1NSwgMywgCi0gICAgMjU1LCAxNCwgMzgsIDI1MCwgMzEsIDI1NSwgMTQsIDM4LCAxODIsIDM4LCAyMzEsIDIzMiwgMzgsIDIyNiwgMTE5LCAzOCwgCi0gICAgMjUxLCAxNDYsIDM4LCA1OSwgNDgsIDM4LCAyNDgsIDEsIDM4LCAyNDEsIDUyLCA0OCwgMzgsIDIyMiwgMjM0LCA0OCwgMzgsIAotICAgIDUyLCAyNTUsIDMsIDI1NSwgMTQsIDM4LCAyNTAsIDIzNCwgMzgsIDY3LCAyMzIsIDIxNCwgNDgsIDM4LCA1MiwgNjcsIDIzMiwgCi0gICAgMjE0LCA0OCwgMzgsIDUyLCAyNDIsIDEzNywgMjU1LCAxNCwgMzgsIDI1MCwgMjU1LCAzOCwgMjM1LCAxOTMsIDI1MSwgMTQ2LCAKLSAgICAzOCwgMjE1LCA5NCwgMjQ5LCAyMjAsIDQ4LCAzOCwgMjQ5LCAyMjAsIDQ4LCAzOCwgMjIzLCA0OSwgMjQ5LCAyMjAsIDQ4LCAKLSAgICAzOCwgMjQ5LCAyMjAsIDc3LCAyMjIsIDI1MSwgMzgsIDI0MiwgMTM3LCAyNTUsIDE1LCA1MSwgMzgsIDI1NSwgMywgMjU1LCAKLSAgICAxNSwgNTEsIDM4LCA0MywgMjE3LCA4OCwgNTEsIDM4LCA0NCwgMjE3LCA4OCwgNTEsIDM4LCA0MywgMjU0LCAxMTAsIDQ4LCAKLSAgICAzOCwgMjQwLCAyNDgsIDM4LCA0MywgMTYzLCAyMjIsIDIzNCwgNTEsIDM4LCAxMjAsIDIxNywgODgsIDUxLCAzOCwgMTI0LCAKLSAgICAyMTcsIDg4LCA1MSwgMzgsIDk2LCA1LCA1MSwgMzgsIDIzMCwgMTgyLCA1LCA1MSwgMzgsIDIyNiwgNjQsIDI0MSwgNTIsIAotICAgIDUxLCAzOCwgMjIzLCA1NSwgMjQxLCA1MiwgNTEsIDM4LCA1OSwgNTEsIDM4LCAyNDgsIDIsIDUxLCAzOCwgMjIyLCAyMzQsIAotICAgIDUxLCAzOCwgMjQ5LCAyMjAsIDUxLCAzOCwgMjUwLCAxODMsIDM4LCAyMjYsIDIyNCwgMzgsIDY3LCAyMzIsIDIxNCwgNTEsIAotICAgIDM4LCAyNTEsIDE0MCwgNTEsIDM4LCAyMzUsIDE5MywgNTIsIDI1NCwgMjQsIDUxLCAzOCwgMjUwLCAyMzUsIDUxLCAzOCwgCi0gICAgMjUwLCAzMSwgMjU1LCAxNSwgNTEsIDM4LCAyNTEsIDE0NywgNTEsIDM4LCAyMzUsIDE5MywgMjUxLCAxNDcsIDUxLCAzOCwgCi0gICAgMjE2LCA4OSwgNTEsIDM4LCAyMzEsIDIzMywgNTEsIDM4LCAxMjEsIDIzMiwgMjEzLCAzOCwgNTIsIDEyMSwgMjMyLCAyMTMsIAotICAgIDM4LCAyMTYsIDg5LCAyMjYsIDEyMCwgMzgsIDIxOSwgMjUxLCAyMTgsIDEwMywgMjI2LCAxMjAsIDM4LCAxOTksIDIxOCwgCi0gICAgMTAzLCAyMjYsIDEyMCwgMzgsIDIxOSwgMjUxLCAyMTksIDQ3LCAyMjYsIDEyMCwgMzgsIDE5OSwgMjE5LCA0NywgMjI2LCAKLSAgICAxMjAsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNCwgNTEsIDM4LCAyMzUsIDE5MywgMjUxLCAxNDAsIDUxLCAzOCwgNDIsIDUxLCAKLSAgICAzOCwgMjIxLCAxODAsIDUxLCAzOCwgMjExLCAxNzksIDQ4LCAzOCwgNjcsIDE4MiwgMzgsIDUyLCAyMjYsIDExOSwgMzgsIAotICAgIDI0MiwgMTM3LCAxMzgsIDc4LCAzOCwgMjU1LCAzLCAxMzgsIDc4LCAzOCwgMjYsIDIyNSwgMTc1LCAzOCwgMjYsIDIzNCwgMiwgCi0gICAgMzgsIDI2LCAyNDcsIDI1MiwgMjE2LCAxOCwgMzgsIDI2LCAyMTAsIDIxOSwgMzgsIDI1MSwgMTQwLCA0OCwgMzgsIDI0NSwgCi0gICAgOTgsIDUsIDUxLCAzOCwgNTIsIDY3LCAyMzIsIDIxNCwgNTEsIDM4LCA0MywgMjU0LCAxMTAsIDUxLCAzOCwgMjI4LCA1MiwgCi0gICAgMjE2LCA4OSwgNDgsIDM4LCAyNDEsIDU4LCA0OCwgMzgsIDI1NCwgMTQ4LCAxMjgsIDIxNiwgNDIsIDQ4LCAzOCwgNDMsIDQ0LCAKLSAgICA4MCwgNTEsIDM4LCAyMTQsIDE1MywgODAsIDUxLCAzOCwgMjQyLCAxNDIsIDIzNSwgNjMsIDM4LCA0NCwgMjUzLCAyNTAsIAotICAgIDQ4LCAzOCwgNDMsIDE2MywgMjIyLCAyMzQsIDQ4LCAzOCwgMjQ0LCAxMzEsIDM4LCAyMTEsIDE3OSwgNTEsIDM4LCA0MywgCi0gICAgMjUzLCAyNTAsIDUxLCAzOCwgNDQsIDI1MywgMjUwLCA1MSwgMzgsIDQ0LCAyNTMsIDI1MCwgMjIsIDEyMCwgMjUzLCAyNTAsIAotICAgIDUxLCAzOCwgNDQsIDE2MywgMjIyLCAyMzQsIDQ4LCAzOCwgNTksIDc3LCAyMjIsIDI1MSwgMzgsIDI1MywgMjE3LCA1MSwgCi0gICAgMzgsIDUyLCAyMjIsIDIzNCwgNTEsIDM4LCAyMTAsIDM1LCA0OCwgMzgsIDUyLCAyNTEsIDE0NywgNTEsIDM4LCA1MiwgMjUxLCAKLSAgICAxNDYsIDM4LCA1MiwgMjMxLCAyMzIsIDM4LCA1MiwgMjMxLCAyMzMsIDUxLCAzOCwgNTIsIDE4MiwgMzgsIDUyLCAyMzUsIAotICAgIDE5MywgMjUxLCAxNDYsIDM4LCA1MiwgOTcsIDgwLCA1MSwgMzgsIDcsIDQsIDEsIDYxLCAzOCwgNywgNCwgMSwgNzUsIDM4LCAKLSAgICA3LCA0LCAxLCA3MywgMzgsIDcsIDQsIDEsIDc2LCAzOCwgNywgNCwgMSwgNzAsIDM4LCA3LCA0LCAxLCAyNTEsIDY2LCAzOCwgCi0gICAgNywgNCwgMSwgMjQ5LCA2MCwgMzgsIDcsIDQsIDEsIDI0MiwgNjAsIDM4LCA3LCA0LCAxLCAxOTMsIDM4LCA3LCA0LCAxLCAKLSAgICAxNTMsIDM4LCA3LCA0LCAxLCAyMTcsIDE1MiwgMzgsIDcsIDQsIDEsIDIxNCwgMTA1LCAzOCwgNywgNCwgMSwgMjExLCAxNzgsIAotICAgIDI2LCA2LCAxLCAyNDEsIDE5NiwgMjYsIDQsIDEsIDI0MSwgMTk2LCAyNiwgNiwgMSwgMjU0LCAyMywgMjIxLCAyNDYsIDI2LCAKLSAgICA0LCAxLCAyNTQsIDIzLCAyMjEsIDI0NiwgMjYsIDIyNywgMTk4LCA1MCwgMjYsIDIzMiwgMTA4LCAyMjcsIDE5OCwgNTAsIAotICAgIDI2LCA2LCAxLCAyMjYsIDUxLCAyNDcsIDIyNywgMjYsIDQsIDEsIDIyNiwgNTEsIDI0NywgMjI3LCAyNiwgMjEwLCAyMTksIAotICAgIDI2LCA0LCAyMjMsIDQ5LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCA0LCAyNDYsIDExOCwgMjMyLCA4MywgMjE5LCAKLSAgICAxNzgsIDg3LCAyNiwgNCwgMjIzLCA0OSwgMjQ2LCAxMTgsIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDIyNCwgMTMsIAotICAgIDc4LCAyNiwgMjE2LCAxOCwgMjYsIDI0NywgMjUyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxNiwgMTgsIAotICAgIDI2LCAyNTQsIDk3LCAyMTcsIDIsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDI0NSwgNjQsIAotICAgIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMTYsIAotICAgIDE4LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCAxOCwgMjYsIAotICAgIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MiwgMjIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyNTQsIDE0MywgMjYsIDYsIDEsIAotICAgIDI1MiwgMjYsIDI2LCA2LCAxLCAyNDMsIDEwNywgMjYsIDYsIDEsIDI0OCwgNTQsIDI2LCA2LCAxLCAyNDUsIDEwMCwgMjYsIAotICAgIDYsIDEsIDIxMCwgODUsIDI2LCA2LCAxLCAyNDUsIDYzLCAyNiwgNiwgMSwgMjE2LCAxNzksIDI2LCA2LCAxLCAyMzUsIDE4NSwgCi0gICAgMjYsIDYsIDEsIDIzNCwgMjIyLCAyNiwgNiwgMSwgMjMzLCA5OCwgMjYsIDYsIDEsIDIzMCwgMTAyLCAyNiwgNiwgMSwgMjI3LCAKLSAgICAyMzcsIDI2LCA2LCAxLCAyMTEsIDE1NywgMjYsIDYsIDEsIDIyNiwgMTk5LCAyNiwgNiwgMSwgMjI1LCAxMDgsIDI2LCA2LCAKLSAgICAxLCAyMjMsIDM3LCAyNiwgNiwgMSwgMjE5LCAxNzcsIDI2LCA2LCAxLCAyMTcsIDQxLCAyNiwgNiwgMSwgMjE0LCAxNTcsIAotICAgIDI2LCA2LCAxLCAyMjUsIDEzMywgMjYsIDYsIDEsIDI1MCwgMTEwLCAyNiwgNiwgMSwgMjI0LCAxNjEsIDI2LCA2LCAxLCAKLSAgICAyMjYsIDIwMSwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIAotICAgIDI1MSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIxNiwgMTgsIDI2LCAKLSAgICA0LCAxLCAyNDUsIDY0LCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyMTQsIAotICAgIDE1OCwgMiwgMjQ3LCAyNTIsIDIyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjU0LCAxNDMsIDI2LCA0LCAxLCAyNTIsIDI2LCAyNiwgCi0gICAgNCwgMSwgMjQzLCAxMDcsIDI2LCA0LCAxLCAyNDgsIDU0LCAyNiwgNCwgMSwgMjQ1LCAxMDAsIDI2LCA0LCAxLCAyMTAsIDg1LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2MywgMjYsIDQsIDEsIDIxNiwgMTc5LCAyNiwgNCwgMSwgMjM1LCAxODUsIDI2LCA0LCAxLCAyMzQsIAotICAgIDIyMiwgMjYsIDQsIDEsIDIzMywgOTgsIDI2LCA0LCAxLCAyMzAsIDEwMiwgMjYsIDQsIDEsIDIyNywgMjM3LCAyNiwgNCwgMSwgCi0gICAgMjExLCAxNTcsIDI2LCA0LCAxLCAyMjYsIDE5OSwgMjYsIDQsIDEsIDIyNSwgMTA4LCAyNiwgNCwgMSwgMjIzLCAzNywgMjYsIAotICAgIDQsIDEsIDQwLCAyMTksIDE3NywgMjYsIDQsIDEsIDIxOSwgMTc3LCAyNiwgNCwgMSwgMjE3LCA0MSwgMjYsIDQsIDEsIDIxNCwgCi0gICAgMTU3LCAyNiwgNCwgMSwgMjI1LCAxMzMsIDI2LCA0LCAxLCAyNTAsIDExMCwgMjYsIDQsIDEsIDIyNCwgMTYxLCAyNiwgNCwgCi0gICAgMSwgMjI2LCAyMDEsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTEsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAKLSAgICAyNTEsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTYsIDE4LCAyNiwgCi0gICAgNCwgMSwgMjI2LCAyMDIsIDIsIDIxNiwgMTgsIDI2LCA2LCAyMzQsIDI0NywgODcsIDI2LCAyNTIsIDI3LCA4NywgMjYsIAotICAgIDIxNiwgMTgwLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDEsIDUyLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNTUsIDMsIDIyLCAKLSAgICAyNDEsIDUyLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDgsIDIsIDIyLCAyNDEsIDUyLCA4NywgMjYsIDIyNSwgMTM0LCA4NywgCi0gICAgMjYsIDIyNSwgMTA5LCA4NywgMjYsIDIzNCwgMjQ3LCA4NywgMjYsIDEsIDI1NCwgMjMsIDIzNCwgNiwgMjYsIDQsIDEsIAotICAgIDI1NCwgMjMsIDIzNCwgNiwgMjYsIDEsIDIxOCwgMTM3LCAyNiwgNCwgMSwgMjE4LCAxMzcsIDI2LCAxLCAyNDcsIDIyNywgCi0gICAgMjYsIDQsIDEsIDI0NywgMjI3LCAyNiwgMSwgMjM0LCA2LCAyNiwgNCwgMSwgMjM0LCA2LCAyNiwgMSwgMjIxLCAyNDYsIDI2LCAKLSAgICA0LCAxLCAyMjEsIDI0NiwgODEsIDYsIDEsIDIyMCwgNTUsIDgxLCA0LCAxLCAyMjAsIDU1LCA4MSwgNiwgMSwgMjQ0LCAxNDAsIAotICAgIDgxLCA0LCAxLCAyNDQsIDE0MCwgODEsIDYsIDEsIDIzNCwgMTE3LCA4MSwgNCwgMSwgMjM0LCAxMTcsIDgxLCA2LCAxLCAKLSAgICAyNDEsIDQ1LCA4MSwgNCwgMSwgMjQxLCA0NSwgODEsIDYsIDEsIDI0MywgMTAyLCA4MSwgNCwgMSwgMjQzLCAxMDIsIDgxLCAKLSAgICA2LCAxLCAyMjAsIDIyLCA4MSwgNCwgMSwgMjIwLCAyMiwgODEsIDYsIDEsIDI0OCwgNjksIDgxLCA0LCAxLCAyNDgsIDY5LCAKLSAgICAyNiwgMjM0LCAyMjMsIDg3LCAyNiwgMjIzLCAzOCwgODcsIDI2LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCAxLCAyMTAsIAotICAgIDIyNCwgMjYsIDYsIDIxNiwgMTgwLCA4NywgMjYsIDIzMiwgODMsIDI0NSwgMTAxLCA4NywgMjYsIDIyMywgNDksIDIzMiwgCi0gICAgODMsIDI0NSwgMTAxLCA4NywgMjYsIDYsIDEsIDIyMCwgNywgMjYsIDQsIDEsIDIyMCwgNywgMjYsIDYsIDIzMiwgODMsIAotICAgIDIxOSwgMTc4LCA4NywgMjYsIDYsIDEsIDIyMSwgMjQzLCAyNiwgNCwgMSwgMjIxLCAyNDMsIDI2LCAyMjMsIDM4LCAyLCAKLSAgICAyMTgsIDEwMywgODcsIDI2LCA2LCAyMjMsIDQ5LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCA2LCAyNDYsIDExOCwgCi0gICAgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgNiwgMjIzLCA0OSwgMjQ2LCAxMTgsIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgCi0gICAgMzMsIDYsIDEsIDIzNiwgNjEsIDIsIDI0MiwgMTM2LCAzMywgNiwgMSwgMjM1LCAxODksIDMzLCA2LCAxLCAyNDcsIDE2MiwgCi0gICAgMzMsIDYsIDEsIDI0MiwgMTg3LCAzMywgNiwgMSwgMjE0LCAyMDIsIDIzNiwgNjAsIDMzLCA2LCAxLCAyNDYsIDM2LCAzMywgCi0gICAgNiwgMSwgMjUxLCA3NiwgNzMsIDMzLCA2LCAxLCAyMTEsIDgsIDMzLCA2LCAxLCAyMzUsIDEyNiwgMzMsIDYsIDEsIDIzMiwgCi0gICAgMTg3LCAzMywgNiwgMSwgMjI4LCAxNzgsIDMzLCA2LCAxLCAyMTUsIDE3NCwgMzMsIDYsIDEsIDIzNCwgNDgsIDMzLCA2LCAxLCAKLSAgICAyNDAsIDE1NCwgMiwgMjQyLCAxMzYsIDMzLCA2LCAxLCAyMTksIDI1MSwgNzAsIDMzLCA2LCAxLCAyNDYsIDMyLCAzMywgNiwgCi0gICAgMSwgNjEsIDMzLCA2LCAxLCAyNTIsIDc1LCAzMywgNiwgMSwgMjEzLCAyNTUsIDMzLCA2LCAxLCAyNDIsIDIzNiwgMzMsIDYsIAotICAgIDEsIDI0OCwgOTAsIDMzLCA2LCAxLCAyMzYsIDYwLCAzMywgNiwgMSwgMjEwLCA3NCwgMzMsIDYsIDEsIDIxMCwgOTQsIDMzLCAKLSAgICA2LCAxLCA3MywgMzMsIDYsIDEsIDIxOSwgMjUxLCA3MywgMzMsIDYsIDEsIDE3NiwgMzMsIDYsIDEsIDI0NSwgMTc0LCAzMywgCi0gICAgNiwgMSwgMjQ1LCAxNTksIDMzLCA2LCAxLCAyNDUsIDE1MCwgMzMsIDYsIDEsIDc2LCAzMywgNiwgMSwgMjI1LCAyMjEsIDMzLCAKLSAgICA2LCAxLCAyNDUsIDkyLCAzMywgNiwgMSwgMjQ1LCA4MiwgMzMsIDYsIDEsIDIxNywgMjIsIDMzLCA2LCAxLCA3MCwgMzMsIDYsIAotICAgIDEsIDI0NSwgMjAyLCAzMywgNiwgMSwgMTYyLCAzMywgNiwgMSwgMjE1LCAxNzgsIDMzLCA2LCAxLCAyNTAsIDEzMSwgMzMsIAotICAgIDYsIDEsIDIyMCwgMTAyLCAzMywgNiwgMSwgMjIwLCA2NSwgMzMsIDYsIDEsIDI0MiwgMywgNTAsIDMzLCA2LCAxLCAyMTEsIAotICAgIDI3LCAzMywgNiwgMSwgMjE5LCA1MiwgNTAsIDMzLCA2LCAxLCA3NSwgMzMsIDYsIDEsIDIxMCwgMjEyLCAzMywgNiwgMSwgCi0gICAgMTkxLCAzMywgNCwgMSwgNjEsIDMzLCA0LCAxLCAyNTIsIDc1LCAzMywgNCwgMSwgMjEzLCAyNTUsIDMzLCA0LCAxLCAyNDIsIAotICAgIDIzNiwgMzMsIDQsIDEsIDI0OCwgOTAsIDMzLCA0LCAxLCAyMzYsIDYwLCAzMywgNCwgMSwgMjEwLCA3NCwgMzMsIDQsIDEsIAotICAgIDIxMCwgOTQsIDMzLCA0LCAxLCA3MywgMzMsIDQsIDEsIDIxOSwgMjUxLCA3MywgMzMsIDQsIDEsIDE3NiwgMzMsIDQsIDEsIAotICAgIDI0NSwgMTc0LCAzMywgNCwgMSwgMjQ1LCAxNTksIDMzLCA0LCAxLCAyNDUsIDE1MCwgMzMsIDQsIDEsIDc2LCAzMywgNCwgMSwgCi0gICAgMjI1LCAyMjEsIDMzLCA0LCAxLCAyNDUsIDkyLCAzMywgNCwgMSwgMjQ1LCA4MiwgMzMsIDQsIDEsIDIxNywgMjIsIDMzLCA0LCAKLSAgICAxLCA3MCwgMzMsIDQsIDEsIDI0NSwgMjAyLCAzMywgNCwgMSwgMTYyLCAzMywgNCwgMSwgMjE1LCAxNzgsIDMzLCA0LCAxLCAKLSAgICAyNTAsIDEzMSwgMzMsIDQsIDEsIDIyMCwgMTAyLCAzMywgNCwgMSwgMjIwLCA2NSwgMzMsIDQsIDEsIDI0MiwgMywgNTAsIAotICAgIDMzLCA0LCAxLCAyMTEsIDI3LCAzMywgNCwgMSwgMjE5LCA1MiwgNTAsIDMzLCA0LCAxLCA3NSwgMzMsIDQsIDEsIDIxMCwgCi0gICAgMjEyLCAzMywgNCwgMSwgMTkxLCAzMywgNCwgMSwgMjM2LCA2MSwgMiwgMjQyLCAxMzYsIDMzLCA0LCAxLCAyMzUsIDE4OSwgCi0gICAgMzMsIDQsIDEsIDI0NywgMTYyLCAzMywgNCwgMSwgMjQyLCAxODcsIDMzLCA0LCAxLCAyMTQsIDIwMiwgMjM2LCA2MCwgMzMsIAotICAgIDQsIDEsIDI0NiwgMzYsIDMzLCA0LCAxLCAyNTEsIDc2LCA3MywgMzMsIDQsIDEsIDIxMSwgOCwgMzMsIDQsIDEsIDIzNSwgCi0gICAgMTI2LCAzMywgNCwgMSwgMjMyLCAxODcsIDMzLCA0LCAxLCAyMjgsIDE3OCwgMzMsIDQsIDEsIDIxNSwgMTc0LCAzMywgNCwgCi0gICAgMSwgMjM0LCA0OCwgMzMsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNDIsIDEzNiwgMzMsIDQsIDEsIDIxOSwgMjUxLCA3MCwgMzMsIAotICAgIDQsIDEsIDI0NiwgMzIsIDMzLCA2LCAxLCAyMjYsIDIwMSwgMzMsIDQsIDEsIDIyNiwgMjAxLCAzMywgNiwgMSwgMjExLCA1OSwgCi0gICAgMzMsIDQsIDEsIDIxMSwgNTksIDMzLCA2LCAxLCAyMzUsIDE4MywgNzUsIDMzLCA0LCAxLCAyMzUsIDE4MywgNzUsIDMzLCA2LCAKLSAgICAxLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMzUsIDE4MywgCi0gICAgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxODMsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDYsIDEsIAotICAgIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDYsIDEsIDIzNSwgMTgzLCAKLSAgICAyNTEsIDI0OSwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE4MywgMjUxLCAyNDksIDIxMCwgMTgzLCAzMywgNiwgMSwgCi0gICAgMjMzLCAyMzMsIDMzLCA0LCAxLCAyMzMsIDIzMywgMzMsIDYsIDEsIDIyNCwgMTYxLCAzMywgNCwgMSwgMjI0LCAxNjEsIDMzLCAKLSAgICA2LCAxLCAyNDQsIDgyLCAzMywgNCwgMSwgMjQ0LCA4MiwgMzMsIDYsIDEsIDIzNSwgMTQ2LCAzMywgNCwgMSwgMjM1LCAxNDYsIAotICAgIDMzLCA2LCAxLCAyMzUsIDE0NywgMiwgNTIsIDI0MiwgMTM3LCAyNTUsIDE0LCAzMywgNCwgMSwgMjM1LCAxNDcsIDIsIDUyLCAKLSAgICAyNDIsIDEzNywgMjU1LCAxNCwgMzMsIDYsIDEsIDIxNCwgMjA1LCAzMywgNCwgMSwgMjE0LCAyMDUsIDMzLCA2LCAxLCAyMjIsIAotICAgIDE4NSwgMjI2LCAyMDEsIDMzLCA0LCAxLCAyMjIsIDE4NSwgMjI2LCAyMDEsIDMzLCA2LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCAKLSAgICA2NSwgMzMsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTYsIDY1LCAzMywgNiwgMSwgMjI2LCAxNDAsIDMzLCA0LCAxLCAyMjYsIAotICAgIDE0MCwgMzMsIDYsIDEsIDIzNCwgNiwgMzMsIDQsIDEsIDIzNCwgNiwgMzMsIDIxNiwgMTQ2LCA1MCwgMzgsIDMzLCAyMTYsIAotICAgIDY1LCAzOCwgMzMsIDIyNiwgNjUsIDM4LCAzMywgMjQ4LCAxNTQsIDIyNSwgMTgsIDM4LCAzMywgMjI0LCAxNTUsIDIyNSwgCi0gICAgMTgsIDM4LCAzMywgMjI1LCAzLCAzOCwgMzMsIDI0MCwgMjExLCAyMTYsIDE0NiwgNTAsIDM4LCAzMywgMjMwLCAxOTEsIDUwLCAKLSAgICAzMywgNiwgMSwgMjE5LCAyNTEsIDI0MCwgMTU0LCAyLCAyMTcsIDc3LCAzMywgNCwgMSwgMjE5LCAyNTEsIDI0MCwgMTU0LCAKLSAgICAyLCAyMTcsIDc3LCAzMywgNiwgMSwgMjIwLCAxNDYsIDUwLCAzMywgNCwgMSwgMjIwLCAxNDYsIDUwLCAzMywgNiwgMSwgCi0gICAgMjQ1LCA5MywgMiwgMjE2LCAxMTQsIDMzLCA0LCAxLCAyNDUsIDkzLCAyLCAyMTYsIDExNCwgMzMsIDYsIDEsIDI0MiwgMjM3LCAKLSAgICAyLCAyMTQsIDE1NiwgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCAyMTQsIDE1NiwgMzMsIDYsIDEsIDI0MiwgMjM3LCAyLCA5MSwgCi0gICAgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCA5MSwgMzMsIDYsIDEsIDI0MiwgMjM3LCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNCwgCi0gICAgMSwgMjQyLCAyMzcsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA2LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgCi0gICAgMjEwLCA3NSwgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNiwgMSwgMjM1LCAxMywgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDI0OCwgMzksIAotICAgIDMzLCA2LCAxLCAyMzUsIDEzLCAyLCA2NywgOTEsIDMzLCA0LCAxLCAyMzUsIDEzLCAyLCA2NywgOTEsIDMzLCA2LCAxLCAKLSAgICAyMzUsIDEzLCAyLCA5MSwgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDkxLCAzMywgNiwgMSwgMjUyLCAxMjQsIDE3NiwgMzMsIDQsIAotICAgIDEsIDI1MiwgMTI0LCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE1MSwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0NSwgMTUxLCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNiwgMjcsIDI0NSwgMTUxLCAyNDIsIDIzNiwgMzMsIDQsIDI3LCAyNDUsIDE1MSwgMjQyLCAyMzYsIAotICAgIDMzLCA2LCAxLCAyMjUsIDIyMiwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIDEsIDIyNSwgMjIyLCAyLCAyMzAsIDIyNCwgCi0gICAgMTAzLCAzMywgNiwgMSwgMjU1LCAyMCwgMTYyLCAzMywgNCwgMSwgMjU1LCAyMCwgMTYyLCAzMywgNiwgMSwgMjQ1LCA4MywgCi0gICAgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0NSwgODMsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMTcsIDIzLCAyLCAyNDgsIDM5LCAKLSAgICAzMywgNCwgMSwgMjE3LCAyMywgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIxOCwgMTIxLCA3MCwgMzMsIDQsIDEsIDIxOCwgCi0gICAgMTIxLCA3MCwgMzMsIDYsIDEsIDIxOCwgMTIxLCAxMDQsIDIsIDkxLCAzMywgNCwgMSwgMjE4LCAxMjEsIDEwNCwgMiwgOTEsIAotICAgIDMzLCA2LCAxLCAyNDIsIDQ5LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjQyLCA0OSwgMiwgMjQ4LCAzOSwgMzMsIDYsIDI3LCAKLSAgICAyMTcsIDIzLCAyMTUsIDE3OCwgMzMsIDQsIDI3LCAyMTcsIDIzLCAyMTUsIDE3OCwgMzMsIDYsIDEsIDI1MCwgMTMyLCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNCwgMSwgMjUwLCAxMzIsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyNTAsIDEzMiwgMiwgNjcsIDkxLCAKLSAgICAzMywgNCwgMSwgMjUwLCAxMzIsIDIsIDY3LCA5MSwgMzMsIDYsIDEsIDIyMCwgMzMsIDMzLCA0LCAxLCAyMjAsIDMzLCAzMywgCi0gICAgNiwgMSwgMjU1LCAyMCwgMjUwLCAxMzEsIDMzLCA0LCAxLCAyNTUsIDIwLCAyNTAsIDEzMSwgMzMsIDYsIDEsIDI1NSwgMjAsIAotICAgIDI1MCwgMTMyLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjU1LCAyMCwgMjUwLCAxMzIsIDIsIDI0OCwgMzksIDMzLCAxLCAKLSAgICAyMjYsIDU4LCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAxLCAyMTAsIDc1LCAyLCAyNTEsIDE0NiwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTMsIDIsIDEwMywgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTc1LCAKLSAgICAyLCAyMTcsIDc3LCAzMywgNCwgMSwgMjQ1LCAxNzUsIDIsIDIxNywgNzcsIDMzLCA2LCAxLCAyNDUsIDE1MSwgMiwgMTAzLCAKLSAgICAzMywgNCwgMSwgMjQ1LCAxNTEsIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTUxLCAyLCAyMTcsIDc3LCAzMywgNCwgMSwgCi0gICAgMjQ1LCAxNTEsIDIsIDIxNywgNzcsIDMzLCA2LCAxLCAyMzQsIDEyNywgMjUwLCAxMzEsIDMzLCA0LCAxLCAyMzQsIDEyNywgCi0gICAgMjUwLCAxMzEsIDMzLCA2LCAxLCAyNDUsIDE2MCwgMiwgMjE3LCA3NywgMzMsIDQsIDEsIDI0NSwgMTYwLCAyLCAyMTcsIDc3LCAKLSAgICAzMywgNCwgMSwgMjI2LCA1OCwgMzMsIDYsIDEsIDExNSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAxLCAxMTUsIDIsIDI1MSwgCi0gICAgMTQ2LCAzMywgNiwgMSwgMTE1LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAxMTUsIDIsIDI0OCwgMSwgMzMsIDYsIDI3LCAxMTUsIAotICAgIDIzNiwgNjAsIDMzLCA0LCAyNywgMTE1LCAyMzYsIDYwLCAzMywgNiwgMSwgMjM2LCA2MSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAKLSAgICAxLCAyMzYsIDYxLCAyLCAyNTEsIDE0NiwgMzMsIDYsIDEsIDIyMSwgMTk1LCAzMywgNCwgMSwgMjIxLCAxOTUsIDMzLCA2LCAKLSAgICAxLCAyMjEsIDE5NiwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjIxLCAxOTYsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDIxMCwgNzUsIAotICAgIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMSwgCi0gICAgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDI1NSwgMjAsIDI0NiwgMzYsIDMzLCA0LCAxLCAyNTUsIAotICAgIDIwLCAyNDYsIDM2LCAzMywgNiwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgMjMyLCAzMywgNCwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgCi0gICAgMjMyLCAzMywgNiwgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDEsIDMzLCA2LCAKLSAgICAxLCAxNDQsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMjUyLCAxMzQsIDc2LCAzMywgCi0gICAgNCwgMSwgMjUyLCAxMzQsIDc2LCAzMywgNiwgMSwgMjUyLCAxMzQsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjUyLCAKLSAgICAxMzQsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMTYwLCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAxNjAsIDIsIDI0OCwgMSwgCi0gICAgMzMsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzIsIDMzLCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMyLCAzMywgNiwgMSwgMTA0LCAyLCAKLSAgICAyNDgsIDEsIDMzLCA0LCAxLCAxMDQsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDQsIDEsIAotICAgIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDYsIDEsIDI1MCwgMTMyLCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyNTAsIDEzMiwgMiwgCi0gICAgMjQ4LCAxLCAzMywgNiwgMSwgMjQyLCAyMzcsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNDIsIDIzNywgMiwgMjQ4LCAzOSwgCi0gICAgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDIxMSwgMjgsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIAotICAgIDI0MiwgMjM3LCAyLCAyMTgsIDEwMywgMjIsIDEwMywgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCAyMTgsIDEwMywgMjIsIDEwMywgCi0gICAgMzMsIDYsIDEsIDI0MiwgNDksIDIsIDEwMywgMzMsIDQsIDEsIDI0MiwgNDksIDIsIDEwMywgMzMsIDYsIDEsIDI0MiwgNDksIAotICAgIDIsIDkxLCAzMywgNCwgMSwgMjQyLCA0OSwgMiwgOTEsIDMzLCA2LCAxLCAyMzQsIDE0LCAyNDgsIDkwLCAzMywgNCwgMSwgCi0gICAgMjM0LCAxNCwgMjQ4LCA5MCwgMzMsIDYsIDEsIDIzNCwgMTQsIDI0NywgMTYyLCAzMywgNCwgMSwgMjM0LCAxNCwgMjQ3LCAKLSAgICAxNjIsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMTAsIDI3LCAzMywgNCwgMSwgMjM0LCAxNCwgMjEwLCAyNywgMzMsIDYsIDEsIAotICAgIDIzNCwgMTQsIDI0NiwgMzAsIDMzLCA0LCAxLCAyMzQsIDE0LCAyNDYsIDMwLCAzMywgNiwgMSwgMjM0LCAxNCwgMjMyLCAKLSAgICAxODcsIDMzLCA0LCAxLCAyMzQsIDE0LCAyMzIsIDE4NywgMzMsIDYsIDEsIDIzNCwgMTQsIDIyOCwgMTc4LCAzMywgNCwgMSwgCi0gICAgMjM0LCAxNCwgMjI4LCAxNzgsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMTksIDEwOSwgMzMsIDQsIDEsIDIzNCwgMTQsIDIxOSwgCi0gICAgMTA5LCAzMywgNiwgMSwgMjM0LCAxNCwgMjE2LCA2MCwgMzMsIDQsIDEsIDIzNCwgMTQsIDIxNiwgNjAsIDMzLCA2LCAxLCAKLSAgICAyMjMsIDQ5LCAyMTAsIDk0LCAzMywgNCwgMSwgMjIzLCA0OSwgMjEwLCA5NCwgMzMsIDYsIDEsIDI0NSwgMTc1LCAyLCAxMDMsIAotICAgIDMzLCA0LCAxLCAyNDUsIDE3NSwgMiwgMTAzLCAzMywgNiwgMSwgMjMyLCAyNTQsIDMzLCA0LCAxLCAyMzIsIDI1NCwgMzMsIAotICAgIDYsIDEsIDIyMywgMzksIDMzLCA0LCAxLCAyMjMsIDM5LCAzMywgNiwgMSwgMjExLCA5MiwgMzMsIDQsIDEsIDIxMSwgOTIsIAotICAgIDMzLCA2LCAxLCAyMjQsIDg4LCAzMywgNCwgMSwgMjI0LCA4OCwgMzMsIDYsIDEsIDIxMiwgMjIsIDMzLCA0LCAxLCAyMTIsIAotICAgIDIyLCAzMywgNiwgMSwgMjU0LCAxNjYsIDE3NiwgMzMsIDQsIDEsIDI1NCwgMTY2LCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE3NSwgCi0gICAgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIDEsIDI0NSwgMTc1LCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgMjQ1LCAKLSAgICAxNTEsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE1MSwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDYsIDEsIAotICAgIDIyNSwgMjIyLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjI1LCAyMjIsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMjAsIDM0LCAKLSAgICAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjIwLCAzNCwgMiwgMjQ4LCAzOSwgMTUwLCA2LCAxLCAyNTMsIDE2NCwgMTUwLCA2LCAKLSAgICAxLCAyNTIsIDM5LCAxNTAsIDYsIDEsIDI0MiwgMjAzLCAxNTAsIDYsIDEsIDI0OCwgMjIxLCAxNTAsIDYsIDEsIDI0NSwgCi0gICAgMjEzLCAxNTAsIDYsIDEsIDIxMCwgMTE2LCAxNTAsIDYsIDEsIDI0NSwgMTk3LCAxNTAsIDYsIDEsIDI0NSwgNjUsIDE1MCwgCi0gICAgNiwgMSwgMTExLCAxNTAsIDYsIDEsIDIxMCwgNzQsIDE1MCwgNiwgMSwgMjM1LCAyMjcsIDE1MCwgNiwgMSwgMjMyLCAxOTAsIAotICAgIDE1MCwgNiwgMSwgMjExLCAxNjAsIDE1MCwgNiwgMSwgMjUxLCAzMywgMTUwLCA2LCAxLCAyMzQsIDE2NSwgMTUwLCA2LCAxLCAKLSAgICAyNDEsIDY4LCAxNTAsIDYsIDEsIDIzNSwgMTQxLCAxNTAsIDYsIDEsIDI0MiwgMjQ2LCAxNTAsIDYsIDEsIDI1MCwgMTI2LCAKLSAgICAxNTAsIDYsIDEsIDIzMSwgNTgsIDE1MCwgNiwgMSwgMjExLCA4LCAxNTAsIDYsIDEsIDIyOCwgMzksIDE1MCwgNiwgMSwgCi0gICAgMjIwLCAxMDIsIDE1MCwgNiwgMSwgMjEzLCAxMzgsIDE1MCwgNiwgMSwgMjUwLCAxNTcsIDE1MCwgNiwgMSwgMjI1LCAyMDUsIAotICAgIDE1MCwgNiwgMSwgMjM1LCAxMTAsIDE1MCwgNiwgMSwgMjA1LCAxNTAsIDYsIDEsIDIyMSwgMTYxLCAxNTAsIDYsIDEsIDIxMywgCi0gICAgMTc5LCAxNTAsIDYsIDEsIDIxNiwgNjIsIDE1MCwgNiwgMSwgMjIzLCA5NSwgMTUwLCA2LCAxLCAyNDksIDIzOCwgMTUwLCA2LCAKLSAgICAxLCAyMTAsIDI0OSwgMTUwLCA2LCAxLCAyMjUsIDQ2LCAxNTAsIDYsIDEsIDIzNCwgMTc2LCAxNTAsIDYsIDEsIDIyNiwgCi0gICAgMjIyLCAxNTAsIDYsIDEsIDI0NCwgMTQyLCAxNTAsIDU4LCAxLCA0MywgMTYzLCAyMjIsIDIzMywgMTUwLCAyNTQsIDU3LCAKLSAgICAxNTAsIDI0NSwgMTU0LCA3OCwgMTUwLCAyNDUsIDMxLCA3OCwgMTUwLCAyNDksIDIxOSwgMTUwLCAyMjQsIDEzLCA3OCwgCi0gICAgMTUwLCAyNTUsIDIxLCA3OCwgMTUwLCA0LCAxLCAyNTMsIDE2NCwgMTUwLCA0LCAxLCAyNTIsIDM5LCAxNTAsIDQsIDEsIAotICAgIDI0MiwgMjAzLCAxNTAsIDQsIDEsIDI0OCwgMjIxLCAxNTAsIDQsIDEsIDI0NSwgMjEzLCAxNTAsIDQsIDEsIDIxMCwgMTE2LCAKLSAgICAxNTAsIDQsIDEsIDI0NSwgMTk3LCAxNTAsIDQsIDEsIDI0NSwgNjUsIDE1MCwgNCwgMSwgMTExLCAxNTAsIDQsIDEsIDIxMCwgCi0gICAgNzQsIDE1MCwgNCwgMSwgMjM1LCAyMjcsIDE1MCwgNCwgMSwgMjMyLCAxOTAsIDE1MCwgNCwgMSwgMjExLCAxNjAsIDE1MCwgCi0gICAgNCwgMSwgMjUxLCAzMywgMTUwLCA0LCAxLCAyMzQsIDE2NSwgMTUwLCA0LCAxLCAyNDEsIDY4LCAxNTAsIDQsIDEsIDIzNSwgCi0gICAgMTQxLCAxNTAsIDQsIDEsIDI0MiwgMjQ2LCAxNTAsIDQsIDEsIDI1MCwgMTI2LCAxNTAsIDQsIDEsIDIzMSwgNTgsIDE1MCwgCi0gICAgNCwgMSwgMjExLCA4LCAxNTAsIDQsIDEsIDIyOCwgMzksIDE1MCwgNCwgMSwgMjIwLCAxMDIsIDE1MCwgNCwgMSwgMjEzLCAKLSAgICAxMzgsIDE1MCwgNCwgMSwgMjUwLCAxNTcsIDE1MCwgNCwgMSwgMjI1LCAyMDUsIDE1MCwgNCwgMSwgMjM1LCAxMTAsIDE1MCwgCi0gICAgNCwgMSwgMjA1LCAxNTAsIDQsIDEsIDIyMSwgMTYxLCAxNTAsIDQsIDEsIDIxMywgMTc5LCAxNTAsIDQsIDEsIDIxNiwgNjIsIAotICAgIDE1MCwgNCwgMSwgMjIzLCA5NSwgMTUwLCA0LCAxLCAyNDksIDIzOCwgMTUwLCA0LCAxLCAyMTAsIDI0OSwgMTUwLCA0LCAxLCAKLSAgICAyMjUsIDQ2LCAxNTAsIDQsIDEsIDIzNCwgMTc2LCAxNTAsIDQsIDEsIDIyNiwgMjIyLCAxNTAsIDQsIDEsIDI0NCwgMTQyLCAKLSAgICAxNTAsIDQsIDI3LCAyNDUsIDIxNCwgMjEwLCAyNDksIDE1MCwgMjQzLCAyMjksIDIxOCwgMTI5LCAxNTAsIDI0MCwgMTY4LCAKLSAgICAxNTAsIDI0NiwgOTUsIDUwLCA5NCwgMjU1LCAxNSwgMjQ1LCA1NywgOTQsIDI1NSwgMTUsIDIyMSwgMTYyLCA5NCwgMjU1LCAKLSAgICAxNSwgMjIwLCA4OCwgOTQsIDI1NSwgMTUsIDIxMCwgMTA0LCAyMjQsIDcxLCA5NCwgMjU1LCAxNSwgMjEwLCAxMDQsIDI0MywgCi0gICAgMTI1LCA5NCwgMjU1LCAxNSwgMjE2LCA3NSwgOTQsIDI1NSwgMTUsIDIyMywgNDcsIDk0LCAyNTUsIDE1LCAyMTAsIDEwMywgCi0gICAgOTQsIDI1NSwgMTUsIDIyNSwgMjQ1LCA5NCwgMjU1LCAxNSwgMjExLCAyMCwgOTQsIDI1NSwgMTUsIDIxNiwgMjE0LCA5NCwgCi0gICAgMjU1LCAxNSwgMjQzLCA0MSwgOTQsIDI1NSwgMTUsIDI0MywgNDIsIDIzMCwgNjksIDk0LCAyNTUsIDE1LCAyNDMsIDM5LCAKLSAgICA5NCwgMjU1LCAxNSwgMjI0LCA3MiwgMjI2LCAxNiwgOTQsIDI1NSwgMTUsIDIxNiwgMjUzLCAyNDMsIDU2LCA5NCwgMjU1LCAKLSAgICAxNSwgMjI1LCAyMjYsIDk0LCAyNTUsIDE1LCAyNTMsIDIwMCwgMjQyLCA0MSwgOTQsIDI1NSwgMTUsIDIzMCwgNzksIDk0LCAKLSAgICAyNTUsIDE1LCAyMzEsIDIwOCwgOTQsIDI1NSwgMTUsIDIzMSwgNDksIDk0LCAyNTUsIDE1LCAyMzEsIDUwLCAyMzQsIDE3NywgCi0gICAgOTQsIDI1NSwgMTUsIDI0OCwgMTYzLCA5NCwgMjU1LCAxNSwgMjI0LCA4MywgOTQsIDI1NSwgMTUsIDIxNiwgMjUzLCAyMjQsIAotICAgIDY3LCA5NCwgMjU1LCAxNSwgMjExLCAzMCwgMjUyLCA0MCwgMjEwLCAyMzAsIDk0LCAyNTUsIDE1LCAyMjYsIDIwNywgOTQsIAotICAgIDI1NSwgMTUsIDIzNiwgMTksIDk0LCAyNTUsIDE1LCAyNDgsIDcwLCA5NCwgMjU1LCAxNSwgMjEwLCAzMywgOTQsIDE2NCwgCi0gICAgMjMxLCAxNDMsIDI1MCwgMzUsIDk0LCAyMjUsIDExLCAyMjAsIDM2LCA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyMSwgMTYyLCAKLSAgICA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyNSwgMjM5LCA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyNCwgNzYsIDk0LCAyMjUsIAotICAgIDExLCAyNDEsIDE1OCwgOTQsIDIyNSwgMTEsIDIxNSwgMTc2LCA5NCwgMjI1LCAxMSwgMjIxLCAxNjIsIDk0LCAyMjUsIDExLCAKLSAgICAyMjUsIDIzOSwgOTQsIDIyNSwgMTEsIDIyNCwgNzYsIDk0LCAyMjUsIDExLCAyNDEsIDYxLCA5NCwgMjI1LCAxMSwgMjQxLCAKLSAgICA2MiwgMjQxLCAyNTIsIDMxLCAyMTQsIDMsIDk0LCAyMjUsIDExLCAyMjQsIDE3LCA5NCwgMjI1LCAxMSwgMjQ4LCAyMDgsIAotICAgIDE3NywgMjMxLCAxNzEsIDk0LCAyMjUsIDExLCAyMzEsIDM4LCA5NCwgMjI0LCAxNDEsIDIzMSwgMTY4LCA5NCwgMjI1LCAxMSwgCi0gICAgMjIzLCAxNjksIDk0LCAyMjQsIDE0MSwgMjI1LCAyNDcsIDk0LCAyMjUsIDExLCAyMjAsIDIxLCAyNDcsIDEyMCwgOTQsIAotICAgIDIyNSwgMTEsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDIyNCwgMTQxLCAyMTksIDUzLCAyMjUsIDI0MSwgOTQsIDE2NCwgCi0gICAgMjE0LCAxNjAsIDI0NywgMTIwLCA5NCwgMTY0LCAyMzIsIDEwOCwgMjQ3LCAxMjAsIDk0LCAyMjQsIDE0MSwgMjI3LCAxOTUsIAotICAgIDI0MiwgNDAsIDk0LCAyMjUsIDExLCAyMjQsIDc3LCAyMjQsIDcxLCA5NCwgMSwgMjU0LCAxNzAsIDk0LCAxLCAyNTIsIDI4LCAKLSAgICA5NCwgMSwgMjQyLCAyMDEsIDk0LCAxLCAyNDgsIDE4OSwgOTQsIDEsIDI0MSwgMjM4LCA5NCwgMSwgMjE0LCAzLCA5NCwgMSwgCi0gICAgMjEwLCA5NywgOTQsIDEsIDI0MSwgMTk3LCA5NCwgMSwgMjE2LCAyMzAsIDk0LCAxLCAyMTAsIDIzMywgOTQsIDEsIDQwLCAKLSAgICAyMzQsIDI1MCwgOTQsIDEsIDIzNCwgMjUwLCA5NCwgMSwgMjMzLCA5NCwgOTQsIDEsIDQwLCAyMzEsIDY1LCA5NCwgMSwgCi0gICAgMjMxLCA2NSwgOTQsIDEsIDQwLCAyMjcsIDE5NCwgOTQsIDEsIDIyNywgMTk0LCA5NCwgMSwgMjIxLCAyNDksIDk0LCAxLCAKLSAgICAyNTMsIDE2MiwgOTQsIDEsIDQwLCAyMjUsIDIyMSwgOTQsIDEsIDIyNSwgMjIxLCA5NCwgMSwgNDAsIDIxNSwgMTc5LCA5NCwgCi0gICAgMSwgMjE1LCAxNzksIDk0LCAxLCAyMjQsIDM5LCA5NCwgMSwgMjIzLCA2NywgOTQsIDEsIDIyMCwgMjAsIDk0LCAxLCAyMTcsIAotICAgIDM4LCA5NCwgMjcsIDIxMSwgNiwgNTIsIDIxNCwgMywgOTQsIDI3LCAyMTEsIDYsIDIxNCwgNCwgMjEwLCAyMzMsIDk0LCAyNywgCi0gICAgMjExLCA2LCA1MiwgMjEwLCAyMzMsIDk0LCAyMjQsIDE0MSwgMjQzLCA0MSwgOTQsIDIyNCwgMTQxLCAyNDMsIDM5LCAxMCwgCi0gICAgNTQsIDUwLCAxMCwgNSwgMjIxLCAyNDIsIDEwLCAyNDQsIDMwLCAyMzEsIDE1NCwgMTAsIDUsIDIyMiwgMjMsIDEwLCA1LCAKLSAgICAyMjEsIDI0NSwgMjU0LCAzNywgMjQ5LCAxMDksIDIyMiwgMTkzLCAyNTQsIDM3LCAyNDQsIDQsIDIyMiwgMTkzLCAxMCwgCi0gICAgMjIzLCAxMzQsIDI1NCwgMzcsIDIyNSwgMTgzLCAyMzAsIDE5MywgNTAsIDI1NCwgMzcsIDIyNSwgMTgzLCAyMTYsIDI0OCwgCi0gICAgMjE2LCAxNDgsIDUwLCAyNTQsIDIyMSwgNTAsIDEwLCAyNDksIDIxOSwgMTAsIDI0OCwgMTUwLCAyMjAsIDEzNywgMTAsIAotICAgIDIyNSwgMTMsIDIxMywgMjQxLCA1MCwgMTAsIDUsIDIzMCwgMTc0LCAxMCwgNSwgMjIyLCAzLCAyNTQsIDE3MiwgMjEyLCA0NSwgCi0gICAgMTAsIDUsIDI1NCwgMTcyLCAyNTMsIDIyMSwgMTAsIDUsIDIyMywgMTY3LCAyNTQsIDE3MSwgMTAsIDUsIDIyMywgMTc1LCAKLSAgICAyNTQsIDE1MiwgMjU0LCAxMDQsIDEwLCA1LCAyMTcsIDcwLCAxMCwgNCwgMTI1LCAyMTcsIDgwLCAxMCwgNCwgMTI1LCAyNywgCi0gICAgMTEyLCAyLCAyMzMsIDEwMywgMiwgMjExLCA0MywgMTAsIDQsIDEyNSwgMjEwLCAxMDgsIDEwLCA0LCAyNDQsIDE2NSwgMTAsIAotICAgIDQsIDI0OCwgMTg0LCAxMCwgNCwgMjM0LCAyMDUsIDEwLCAyMjAsIDE1MCwgMTAsIDIxNSwgMjExLCA1OSwgMjI0LCAxNDEsIAotICAgIDc4LCAxMCwgMjI0LCAxMywgNzgsIDEwLCAxLCAyMzQsIDIwOSwgMjExLCA0MywgMTAsIDEsIDI0MiwgMTksIDEwLCAxLCAKLSAgICAxMTIsIDIsIDIzMSwgMjI4LCA0OCwgMTAsIDEsIDExMiwgMiwgMjAyLCA0OCwgMTAsIDEsIDIxMiwgMzEsIDIsIDIwMiwgNDgsIAotICAgIDEwLCAxLCAxMTIsIDIsIDIwMiwgNTEsIDEwLCAxLCA3OSwgMiwgMjAyLCA0OCwgMTAsIDEsIDI1NCwgMTcwLCAxMCwgMSwgCi0gICAgMjUyLCA1NCwgMTAsIDEsIDIxNywgOCwgMjMxLCAxNjQsIDEwLCAxLCAyMTcsIDcsIDEwLCAxLCAyMTYsIDE5MiwgMTAsIDEsIAotICAgIDIzNSwgMTIzLCAxMCwgMSwgMjQyLCAzNywgMTAsIDEsIDIzNCwgMTI5LCAxMCwgMSwgMjQ4LCAxOTUsIDEwLCAxLCAyMTYsIAotICAgIDIwMiwgMTAsIDEsIDIyMywgOTUsIDEwLCAxLCAyMTAsIDEwOCwgMTAsIDEsIDIyMSwgMTY2LCAxMCwgMSwgMjIwLCA1OSwgCi0gICAgMTAsIDEsIDIyMiwgMjYsIDEwLCAxLCAyNDgsIDIxNiwgMTAsIDEsIDIxNywgODAsIDEwLCAxLCAyMTAsIDExMSwgMTAsIDEsIAotICAgIDI1NCwgMTk2LCAxMCwgMSwgMjQyLCAyNDQsIDEwLCAxLCAyMzQsIDE3NSwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjM0LCAKLSAgICAxNzUsIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMjM1LCAxOTMsIDIxNCwgMTA1LCAxMCwgMSwgCi0gICAgMjQ0LCAxNjgsIDc5LCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDIsIDEzNCwgMTcwLCA0OCwgMTAsIAotICAgIDIxNywgNDMsIDEwLCAxLCAyNDQsIDE0MiwgMTAsIDEsIDIyNCwgODEsIDEwLCAxLCAyMzQsIDI1MCwgMTAsIDEsIDIzMywgCi0gICAgMTAyLCAxMCwgMSwgMjMxLCA3OCwgMTAsIDEsIDIyOCwgNjIsIDEwLCAxLCAyNDEsIDIxOCwgMTAsIDEsIDIxMiwgMzAsIDEwLCAKLSAgICAxLCAxMTIsIDIzMSwgMTkyLCAxMCwgMSwgMjExLCA0MywgMTAsIDI0NCwgMTYzLCAxMCwgMjQ4LCAxODIsIDEwLCAyMzQsIAotICAgIDIwMywgMTAsIDI0NCwgMTY1LCAxMCwgMjQ4LCAxODQsIDEwLCAyMzQsIDIwNSwgMTAsIDIyMCwgOTMsIDEwLCAyMTgsIDQ1LCAKLSAgICAxMCwgMjMxLCAyMjYsIDQ4LCAxMCwgMjAyLCA0OCwgMTAsIDIwMiwgNTEsIDEwLCAyMTgsIDY1LCAyNTQsIDE3MCwgMTAsIAotICAgIDIzNSwgMTkzLCAyNDgsIDE4NCwgMTAsIDE2NCwgMjI4LCA2MywgMjQyLCAyMTgsIDEwLCAyMDksIDI1NSwgMTAsIDI1LCA1LCAKLSAgICA0LCAyMTQsIDEwNiwgNDgsIDEwLCAyNSwgNSwgMjM1LCAxOTMsIDQsIDIxNCwgMTA2LCA0OCwgMTAsIDI1LCA1LCA1OSwgNTEsIAotICAgIDEwLCAyMjMsIDQ5LCAyNDgsIDE4NCwgMTAsIDI0NCwgMTY2LCAyLCAxMTMsIDI0NywgMTE4LCAxMCwgMjEyLCAzMiwgMjAyLCAKLSAgICA1MSwgMjU0LCAzNywgMjEsIDIxMCwgODYsIDI1NCwgMzcsIDIxLCAxMTAsIDI1NCwgMzcsIDIxLCAxMDUsIDI1NCwgMzcsIAotICAgIDIxLCAxNTgsIDI1NCwgMzcsIDIxLCAxNjEsIDI1NCwgMzcsIDIxLCAxODksIDI1NCwgMzcsIDIxLCAxOTQsIDI1NCwgMzcsIAotICAgIDIxLCAxOTgsIDI1NCwgMzcsIDIxLCAxOTUsIDI1NCwgMzcsIDIxLCAyMDAsIDEwLCAyMjUsIDE4MiwgNTAsIDEwLCAyNDgsIAotICAgIDgzLCAyMjAsIDEzNywgMTAsIDIxNiwgMTQ2LCAyMjAsIDEzNywgMTAsIDI0NCwgODEsIDIyNSwgOSwgMjE4LCAxNTYsIDEwLCAKLSAgICAxLCAyNDcsIDExOSwgMjUyLCA1NCwgMTAsIDEsIDI0NywgMTE5LCAyMjQsIDgxLCAxMCwgMSwgMjE4LCAyMywgMjU0LCAxNzAsIAotICAgIDEwLCAxLCAxMTIsIDIxMiwgNDYsIDEwLCAxLCAxMTIsIDIsIDIxMiwgMzIsIDIwMiwgNDgsIDEwLCAxLCAxMTIsIDIsIDIxMiwgCi0gICAgMzIsIDIwMiwgNTEsIDEwLCAxLCAxMjUsIDI0MiwgMTksIDEwLCAxLCAxMjUsIDIwMiwgMjU0LCAxNzAsIDEwLCAxLCAxMjUsIAotICAgIDIwMiwgMjEyLCAzMCwgMTAsIDEsIDEwNCwgMiwgMjAyLCA0OCwgMTAsIDEsIDEyNSwgMjAyLCAyMTEsIDQzLCAxMCwgMSwgCi0gICAgMjE1LCAxNDgsIDEwLCAxLCAyMTUsIDE0NiwgMTAsIDEsIDI1MiwgNjQsIDEwLCAxLCAyMTcsIDgsIDIsIDIyMiwgMjMzLCAKLSAgICAxMCwgMSwgMjE3LCA4LCAyLCAxMzQsIDE3MCwgNzcsIDI0NiwgMTAzLCAxMCwgMSwgMjI1LCAyMDUsIDEwLCAxLCAyMTcsIDUsIAotICAgIDEwLCAxLCAyNTIsIDUyLCAxMCwgMSwgMTIyLCAyLCAyMDIsIDQ4LCAxMCwgMSwgMTIyLCAyLCAxMTMsIDE3MCwgNjcsIDQ4LCAKLSAgICAxMCwgMSwgMjI3LCAxNTMsIDEwLCAxLCAyNDYsIDQzLCAxMCwgMSwgMTIyLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIAotICAgIDI2LCAxMCwgMSwgMjE3LCAyNCwgMTAsIDEsIDI0OCwgMTMwLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDIyMiwgMjMzLCAxMCwgMSwgCi0gICAgMjQ4LCAxOTYsIDIsIDU5LCA1MSwgMTAsIDEsIDI0OCwgMTk2LCAyLCA1OSwgMjUyLCA0MywgMjIsIDQsIDIxNywgODAsIDEwLCAKLSAgICAxLCAyNDgsIDIwMSwgMTAsIDEsIDI0OCwgMTMyLCAxMCwgMSwgMjQ2LCA3MCwgMTAsIDEsIDI0OCwgMTk2LCAyLCAxMzQsIAotICAgIDE3MCwgNzcsIDI0NiwgMTAzLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAxLCAyMjIsIDE3MSwgCi0gICAgMTAsIDEsIDIyMywgOTYsIDIsIDQsIDIxNCwgMTA1LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjIyLCAyMzMsIDEwLCAxLCAyMjMsIAotICAgIDk2LCAyLCA1OSwgNTEsIDEwLCAxLCAyMjMsIDk2LCAyLCA0LCAyMTQsIDEwNiwgNTEsIDEwLCAxLCAyMjMsIDk2LCAyLCA1OSwgCi0gICAgMjUyLCA0MywgMjIsIDU5LCA0OCwgMTAsIDEsIDIyMywgOTYsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIzNSwgMTIwLCAKLSAgICAxMCwgMSwgMjIzLCA5NiwgMiwgMjQ0LCAxMSwgMTcwLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCA1OSwgMjUyLCA0MywgMjIsIAotICAgIDU5LCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAxMzQsIDE3MCwgNTEsIDEwLCAxLCAyMjEsIDE2NywgMiwgMTM0LCAxNzAsIAotICAgIDI1MiwgNDMsIDIyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMjIsIDI3LCAyLCAxMTMsIDE3MCwgNTEsIDEwLCAxLCAyMjIsIAotICAgIDI3LCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIDgxLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgCi0gICAgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjQ3LCAxMTksIDI0NCwgMTQyLCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDU5LCAyMzAsIAotICAgIDEwOSwgNTEsIDEwLCAxLCAyNDQsIDE0MywgMiwgNTksIDUxLCAxMCwgMSwgMjEzLCAyNDgsIDEwLCAxLCAyNDQsIDE0MywgMiwgCi0gICAgMTM0LCAxNzAsIDUxLCAxMCwgMSwgMjI1LCAyMDMsIDEwLCAxLCAyMjQsIDgyLCAyLCA1OSwgNDgsIDEwLCAxLCAyMjQsIDgyLCAKLSAgICAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMzQsIDE3NCwgMTAsIDEsIDIxNywgMjUwLCAyMzQsIDI1MCwgMTAsIDEsIDIzNCwgCi0gICAgMjUxLCAyLCAyMjIsIDIzMywgMTAsIDEsIDIzNCwgMjUxLCAyLCA1OSwgNDgsIDEwLCAxLCAyMjksIDc5LCAxMCwgMSwgMjM0LCAKLSAgICAyNTEsIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDI0MywgMTIyLCAxMCwgMSwgMjQzLCAxMjMsIDIsIDIyMiwgMjMzLCAxMCwgCi0gICAgMSwgMjI5LCAyLCAxMCwgMSwgMjQzLCAxMjMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIDI0MiwgMTAxLCAxMCwgMSwgMjQzLCAKLSAgICAxMjMsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIzMywgMTAzLCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDIzMywgMTAzLCAKLSAgICAyLCA1OSwgNDgsIDEwLCAxLCAyMzMsIDEwMywgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjMzLCAxMDMsIDIsIDEzNCwgCi0gICAgMTcwLCA1MSwgMTAsIDEsIDIyOCwgNjMsIDIsIDU5LCA1MSwgMTAsIDEsIDIyOCwgNjMsIDI0MiwgMjE4LCAxMCwgMSwgMjIyLCAKLSAgICAyMTQsIDEwLCAxLCAyMjgsIDYzLCAyLCAyMjIsIDIzMywgMTAsIDEsIDIyOCwgNjMsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDcsIDE0MSwgMTAsIDEsIDIxNywgMjcsIDIsIDU5LCA0OCwgMTAsIDEsIDI0MSwgMjE5LCAyLCA3OSwgCi0gICAgNDgsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzEsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDIsIDIwMiwgNDgsIDEwLCAKLSAgICAxLCAyMTcsIDgsIDIzMSwgMTY1LCAyNDIsIDE3MSwgMTAsIDEsIDIxMiwgMzEsIDIsIDIyMiwgMjMzLCAxMCwgMSwgMjM0LCAKLSAgICA3MywgMjI2LCAyMzQsIDEwLCAxLCAyMjYsIDIzNCwgMTAsIDEsIDcwLCAxMCwgMSwgMjEwLCAyMTIsIDEwLCAxLCAyMzQsIAotICAgIDczLCAyMTAsIDIxMiwgMTAsIDEsIDIxMiwgMzEsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIxMywgMjU1LCAxMCwgMSwgCi0gICAgMjQ0LCAxNjgsIDIxMSwgNDMsIDEwLCAxLCA3OSwgMiwgMjE3LCA3NywgMTAsIDEsIDc5LCAyLCA0LCAyMTQsIDEwNSwgMTAsIAotICAgIDEsIDIxMiwgMzEsIDIsIDU5LCA0OCwgMTAsIDEsIDc1LCAxMCwgMSwgNzksIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDc5LCAKLSAgICAyNTIsIDEzMiwgMTAsIDEsIDc5LCAyNTIsIDEzMywgMiwgMjAyLCA0OCwgMTAsIDI0MywgMjI5LCAyMTgsIDEyOSwgMTAsIDEsIAotICAgIDI1NCwgMjQzLCAxMCwgNCwgMTI1LCAyNywgMjIyLCAyNywgMiwgMjMzLCAxMDMsIDIsIDExMiwgMjMxLCAxOTIsIDEwLCA0LCAKLSAgICAxMjUsIDI3LCAyMjQsIDgyLCAyLCAyMzMsIDEwMywgMiwgMTEyLCAyMzEsIDE5MiwgMTAsIDQsIDEyNSwgNjYsIDY1LCAxNywgCi0gICAgMTAsIDQsIDEyNSwgMjMzLCAxMDMsIDI1NCwgMTcwLCAxMCwgNCwgMTI1LCAyMzUsIDEyMywgMTAsIDQsIDEyNSwgMTM0LCAKLSAgICAyNDcsIDExOCwgMTAsIDQsIDEyNSwgMjIxLCAxNjYsIDEwLCAyNDUsIDE0MywgNjQsIDI1MywgMTY2LCAxMCwgMjE4LCAxNTIsIAotICAgIDY0LCAyMjIsIDEzOCwgMjQ1LCAxNzUsIDI0MSwgMTU1LCAxMCwgNCwgMTI1LCAyMjIsIDE4MywgMjEwLCA4NiwgMTAsIDQsIAotICAgIDEyNSwgMjE0LCAxNTksIDIyMywgMTE1LCAyMTAsIDg2LCAxMCwgNCwgMTI1LCAyNDcsIDExOSwgMjQxLCAyMzYsIDY0LCAKLSAgICAyMzQsIDEyOSwgMTAsIDQsIDEyNSwgNjYsIDUzLCAxNywgMTAsIDQsIDEyMSwgMjIxLCAxNjYsIDEwLCA0LCAxMjUsIDIzMSwgCi0gICAgMjI3LCAxMCwgNCwgMjEyLCAzMCwgMTAsIDQsIDIxMSwgNDMsIDEwLCA0LCAxMjUsIDIxMSwgNDMsIDEwLCA0LCAxMjUsIAotICAgIDIyOCwgNjIsIDEwLCAyMjUsIDQxLCA2NCwgMjIyLCAxMywgMTAsIDI0NSwgMTUyLCAyNTAsIDE3NSwgMTIxLCAyMTgsIDEyOSwgCi0gICAgMTAsIDI0NSwgMTUyLCAyNTAsIDE3NSwgMTI1LCAyMTgsIDEyOSwgMTAsIDIyMiwgMTgzLCAxMjUsIDIxOCwgMTMwLCAyLCAKLSAgICAyNDQsIDEwNCwgMjUwLCAxNzQsIDEwLCA0LCAxMjEsIDIzMSwgNzgsIDEwLCAxLCAyNDgsIDE5NiwgMiwgMjM1LCAxOTMsIAotICAgIDIxNCwgMTA1LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjM1LCAxOTMsIDIxNCwgMTA1LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgCi0gICAgMjEwLCA4NiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDEwNSwgMjQ1LCAyMiwgCi0gICAgMjU0LCAzNywgMjEsIDE1OCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE2MSwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE4OSwgCi0gICAgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE5NCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE5OCwgMjQ1LCAyMiwgMjU0LCAzNywgCi0gICAgMjEsIDE5NSwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDIwMCwgMTAsIDEsIDIyMCwgNjAsIDIsIDU5LCA1MSwgMTAsIDEsIAotICAgIDI0OCwgMjE3LCAyLCA1OSwgNTEsIDEwLCAxLCAyNDIsIDI0NSwgMiwgNTksIDUxLCAxMCwgNSwgMjE5LCAxNTgsIDI1NCwgCi0gICAgMTI2LCAxMCwgNSwgMjE5LCAxNTgsIDIyNCwgMjM1LCAyMzEsIDU4LCAxMCwgMSwgMjQxLCAyMTksIDIsIDIzNSwgMTkzLCAKLSAgICAyMTQsIDEwNSwgMTg4LCAyNDUsIDE0MywgNjQsIDIyNiwgMTQsIDE4OCwgMjE4LCAxOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICAxODgsIDIxOCwgNjcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMTg4LCAyMTgsIDE5LCAyNDksIDIyNiwgMTg4LCAyMTgsIDY3LCAKLSAgICAyNDksIDIyNiwgMTg4LCAyMDMsIDI0OSwgMjI2LCAxODgsIDI0OSwgMjI3LCAyMTksIDEwNiwgMjMzLCA0NiwgMTg4LCAyNDksIAotICAgIDIyNywgMjE5LCAxMDYsIDIyMiwgMjUxLCAxODgsIDIxOCwgMTksIDI0OSwgMjI3LCAyMTksIDEwNiwgMjMzLCA0NiwgMTg4LCAKLSAgICAyMTgsIDY3LCAyNDksIDIyNywgMjE5LCAxMDYsIDIyMiwgMjUxLCAxODgsIDI0OSwgMTgwLCAxODgsIDI0MiwgMSwgMjI2LCAKLSAgICAyNTAsIDE4OCwgMjQyLCAxLCAyMzEsIDM2LCAxODgsIDI0MiwgMSwgMjUzLCAyMTgsIDE4OCwgMjU1LCAyMSwgNzgsIDE4OCwgCi0gICAgMSwgMjU0LCAxNzQsIDE4OCwgMSwgMjE4LCAyMywgMjU0LCAxNzQsIDE4OCwgMSwgMjUyLCAyNSwgMTg4LCAxLCAyNDMsIAotICAgIDExMywgMTg4LCAxLCAyNDMsIDExNCwgMjQzLCA5MSwgMTg4LCAxLCAyNDgsIDE5MiwgMTg4LCAxLCAyNDcsIDExOSwgMjQ4LCAKLSAgICAxOTMsIDIyMiwgMjI5LCAxODgsIDEsIDI0MSwgMjM4LCAxODgsIDEsIDIxMiwgMzAsIDE4OCwgMSwgMjEwLCAxMDgsIDE4OCwgCi0gICAgMSwgMjQxLCAxOTUsIDE4OCwgMSwgMjE2LCAyMjYsIDE4OCwgMSwgMjE2LCAyMjcsIDI0MywgOTEsIDE4OCwgMSwgMjEwLCAKLSAgICAxOTksIDE4OCwgMSwgMjEwLCAyMDAsIDI0MSwgMjM4LCAxODgsIDEsIDIzNCwgMjI1LCAxODgsIDEsIDIzMywgMTAxLCAxODgsIAotICAgIDEsIDIzMCwgMTkwLCAxODgsIDEsIDIyNywgMTk0LCAxODgsIDEsIDIyMCwgMTQzLCAxODgsIDEsIDQwLCAyMjAsIDE0MywgCi0gICAgMTg4LCAxLCA3NSwgMTg4LCAxLCAyMjUsIDIyMSwgMTg4LCAxLCAyMjMsIDQ5LCAyMjUsIDIyMSwgMTg4LCAxLCAyMjIsIDI0LCAKLSAgICAxODgsIDEsIDIyNCwgNzUsIDE4OCwgMSwgMjIyLCAyMjksIDE4OCwgMSwgMjIwLCAyMCwgMTg4LCAxLCAyMTcsIDM2LCAxODgsIAotICAgIDEsIDIyNSwgMTY5LCAyNTIsIDEyLCAxODgsIDEsIDIyNSwgMTY5LCAyNDIsIDI0MiwgMTg4LCAxLCAyMjUsIDE2OSwgMjQ4LCAKLSAgICAyMCwgMTg4LCAyMjQsIDE1MSwgNDgsIDE4OCwgMjI0LCAxNTEsIDUxLCAxODgsIDIyNCwgMTUxLCAyNDYsIDExNywgMTg4LCAKLSAgICAyMTAsIDE3LCA0OCwgMTg4LCAyMTAsIDE3LCA1MSwgMTg4LCAyMTAsIDE3LCAyNDYsIDExNywgMTg4LCAyMjMsIDEzMSwgNDgsIAotICAgIDE4OCwgMjIzLCAxMzEsIDUxLCAxODgsIDI0NiwgMTE4LCAyMTAsIDI0LCAyNDEsIDQ0LCAxODgsIDI0NiwgMTE4LCAyMTAsIAotICAgIDI0LCAyNTQsIDEwNSwgMTg4LCAyNDEsIDI0MSwgNDgsIDE4OCwgMjQxLCAyNDEsIDUxLCAxODgsIDI0MSwgMjQwLCAyNDYsIAotICAgIDExNywgMTg4LCAyNDUsIDc5LCA0OCwgMTg4LCAyNDUsIDc5LCA1MSwgMTg4LCAyMjIsIDEwNywgMTg4LCAyNDQsIDEzNiwgCi0gICAgMjQ3LCAxMjAsIDE4OCwgMjIzLCAyNDgsIDE4OCwgMjIyLCAxMzQsIDE4OCwgMTEzLCA2NywgMTcwLCA0OCwgMTg4LCAxMTMsIAotICAgIDY3LCAxNzAsIDUxLCAxODgsIDEzNCwgMTcwLCA0OCwgMTg4LCAxMzQsIDE3MCwgNTEsIDE4OCwgMjI2LCAyNDgsIDIzMiwgCi0gICAgMjE0LCA0OCwgMTg4LCAyMjYsIDI0OCwgMjMyLCAyMTQsIDUxLCAxODgsIDIzMCwgNTYsIDE4OCwgMjUyLCAxMzEsIDE4OCwgCi0gICAgMSwgMjE5LCA0OSwgMjEwLCA4MCwgMTg4LCAxLCAyMTksIDQ5LCAyMzQsIDEyMiwgMTg4LCAxLCAyMTksIDQ5LCAyNDQsIAotICAgIDE1NCwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyNDAsIDI1MCwgNTEsIDEwLCAxLCAyNTIsIDU1LCAyLCA1OSwgCi0gICAgMjUyLCA0MywgMjIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCAKLSAgICA1MSwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCAyNTIsIDQzLCAyMiwgMTEzLCAxNzAsIAotICAgIDQ4LCAxMCwgMSwgMjUyLCA1NSwgMiwgMTEzLCAxNzAsIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDEwLCAxLCAyNTIsIDU1LCAyLCAKLSAgICAyMzUsIDE5MywgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMjUyLCA1NSwgMiwgNCwgMjE0LCAxMDUsIDEwLCAxLCAxMjIsIDIsIAotICAgIDExMywgMTcwLCA0OCwgMTAsIDEsIDEyMiwgMiwgMTM0LCAxNzAsIDIyNSwgNywgMjE0LCAxNTMsIDUxLCAxMCwgMSwgMjQ4LCAKLSAgICAxOTYsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgMjUyLCA0MywgMjIsIDQsIDIxNywgODAsIDEwLCAxLCAyNDgsIDE5NiwgMiwgCi0gICAgMjM1LCAxOTMsIDQsIDIxNCwgMTA2LCA1MSwgMTAsIDEsIDIyMywgOTYsIDIsIDkxLCAxMCwgMSwgMjIxLCAxNjcsIDIsIAotICAgIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjU0LCAxOTcsIDIsIAotICAgIDEzNCwgMTcwLCAyMjUsIDcsIDI0NiwgMTA0LCA0OCwgMTAsIDEsIDI1NCwgMTk3LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIAotICAgIDQ4LCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIDI0NCwgMTQzLCAyLCAxMzQsIDE3MCwgMjI1LCAKLSAgICA3LCAyMTQsIDE1MywgNTEsIDEwLCAxLCAyMzQsIDE3NSwgMiwgNTksIDQ4LCAxMCwgMSwgMjM0LCAxNzUsIDIsIDEzNCwgCi0gICAgMTcwLCA0OCwgMTAsIDEsIDIzNCwgMTc1LCAyLCAxMzQsIDE3MCwgMjI1LCA3LCAyMTQsIDE1MywgNTEsIDEwLCAxLCA2NiwgCi0gICAgMiwgNTksIDQ4LCAxMCwgMSwgNjYsIDIsIDU5LCA1MSwgMTAsIDEsIDIyOCwgNjMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIAotICAgIDIyOCwgNjMsIDIsIDQsIDIxNywgODAsIDEwLCAxLCAyMjgsIDYzLCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDIzMywgMTAzLCAKLSAgICAyLCAxMzAsIDEwLCAxLCAyMjMsIDk2LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCAxMCwgMSwgMjIzLCA5NiwgMiwgCi0gICAgMjAyLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCAxMCwgMSwgMTIyLCAyLCA0LCAKLSAgICAxMCwgMSwgMjE3LCA4MSwgNTEsIDEwLCAxLCAxMjIsIDIsIDQsIDEwLCAxLCAyMTcsIDgxLCAyMiwgMTEzLCAyNDcsIDExOCwgCi0gICAgMTAsIDEsIDIyMSwgMTY3LCAyLCA0LCAxMCwgMSwgMjE3LCA4MSwgMjIsIDExMywgMjQ3LCAxMTgsIDEwLCAxLCAyMjMsIDk2LCAKLSAgICAyLCA0LCAxMCwgMSwgMjE3LCA4MSwgMjIsIDExMywgMjQ3LCAxMTgsIDEwLCAxLCAxMjIsIDIsIDQsIDEwLCAxLCAyMTcsIAotICAgIDgxLCA0OCwgMTAsIDEsIDExMiwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMywgNDgsIDEwLCAxLCAxMTIsIDIsIDI0NSwgCi0gICAgMjIsIDI1NCwgMzcsIDIxLCAxMzQsIDQ4LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgCi0gICAgMTEzLCA0OCwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDEzNCwgNDgsIDEwLCAxLCAKLSAgICAyNDQsIDE2OCwgNzksIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAyNDQsIDExLCA1MSwgMTAsIDEsIDIxMiwgMzEsIDIsIAotICAgIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTMsIDQ4LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIAotICAgIDEzNCwgNDgsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTMsIDQ4LCAxMCwgMSwgCi0gICAgNzksIDI1MiwgMTMzLCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTM0LCA0OCwgMTAsIDEsIDEyMiwgMiwgMjQ1LCAyMiwgCi0gICAgMjU0LCAzNywgMjEsIDI0NCwgMTEsIDUxLCAxMCwgMSwgMjIxLCAxNjcsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAyNDQsIAotICAgIDExLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAyMzUsIDE5MywgMjE0LCAxMDUsIDEwLCAxLCAyMzQsIDI1MSwgMiwgMTEzLCAKLSAgICAxNzAsIDQ4LCAyMTYsIDIwNSwgMSwgMjQyLCA0NiwgMjE2LCAyMDUsIDEsIDIyMCwgNjgsIDIxNiwgMjA1LCAxLCAyMjgsIAotICAgIDYxLCAyMTYsIDIwNSwgMSwgMjIzLCAxODQsIDIxNiwgMjA1LCAxLCAyNTIsIDE4OSwgMjE2LCAyMDUsIDEsIDIzMiwgMjUxLCAKLSAgICAyMTYsIDIwNSwgMSwgMjM1LCA4LCAyMTYsIDIwNSwgMSwgMjU0LCAxNTksIDIxNiwgMjA1LCAxLCAyMTQsIDI1LCAyMTYsIAotICAgIDIwNSwgMSwgMjMxLCA3NywgMjE2LCAyMDUsIDEsIDI0NCwgMTk0LCAyMTYsIDIwNSwgMSwgMjQ4LCAyMywgMjE2LCAyMDUsIAotICAgIDEsIDIxNiwgMjA3LCAyMTYsIDIwNSwgMSwgMjMzLCAxMzEsIDIxNiwgMjA1LCAxLCAyNDMsIDEzMSwgMjE2LCAyMDUsIDEsIAotICAgIDI0MiwgMTc3LCAyMTYsIDIwNSwgMSwgMjIxLCAxNjUsIDIxNiwgMjA1LCAxLCAyNDgsIDE0OCwgMjE2LCAyMDUsIDEsIDIxMCwgCi0gICAgMTAwLCAyMTYsIDIwNSwgMSwgMjE3LCAzNywgMjE2LCAyMDUsIDEsIDIxMSwgMTAzLCAyMTYsIDIwNSwgMSwgMjI1LCAyMzMsIAotICAgIDIxNiwgMjA1LCAxLCAyMzUsIDEyOCwgMjE2LCAyMDUsIDEsIDI1MCwgMTM0LCAyMTYsIDIwNSwgMSwgMjE1LCAxNTUsIDIxNiwgCi0gICAgMjA1LCAxLCAyNDEsIDE4OCwgMjE2LCAyMDUsIDEsIDIzNCwgMTMxLCAyMTYsIDIwNSwgMSwgMjE2LCAyMDYsIDIxNiwgMjA1LCAKLSAgICAxLCAyMTAsIDExNSwgMjE2LCAyMDUsIDEsIDIyMCwgNTgsIDIxNiwgMjA1LCAxLCAyMjIsIDMwLCAyMTYsIDIwNSwgMSwgCi0gICAgMjQ4LCAyMTksIDIxNiwgMjA1LCAxLCAxMTEsIDIxNiwgMjA1LCAxLCAyMTAsIDIzLCAyMTYsIDIwNSwgMSwgMjU0LCAxOTMsIAotICAgIDIxNiwgMjA1LCAxLCAyNDIsIDI0MywgMjE2LCAyMDUsIDEsIDIyNCwgODUsIDIxNiwgMjA1LCAxLCAyMTIsIDYzLCAyMTYsIAotICAgIDIwNSwgMjU1LCAyMiwgMjE2LCAyMDUsIDI1NSwgMzgsIDIxNiwgMjA1LCAyNDAsIDExNCwgMjE2LCAyMDUsIDI0NSwgMjA4LCAKLSAgICAyMTYsIDIwNSwgMjE0LCAyMjIsIDIxNiwgMjA1LCAyMjYsIDE4MiwgMjE2LCAyMDUsIDI0NSwgMjE2LCAyMTYsIDIwNSwgCi0gICAgMjQ1LCAxNiwgMjE2LCAyMDUsIDIyNiwgMjQ3LCAyMTYsIDIwNSwgMjI2LCAyNTUsIDIxNiwgMjA1LCAyMTgsIDQ1LCAyMTYsIAotICAgIDIwNSwgMSwgMjI5LCAyMjUsIDIyOCwgMTM3LCAyMSwgMjEwLCA4NiwgMjI4LCAxMzcsIDIxLCAxMTAsIDIyOCwgMTM3LCAyMSwgCi0gICAgMTA1LCAyMjgsIDEzNywgMjEsIDE1OCwgMjI4LCAxMzcsIDIxLCAxNjEsIDIyOCwgMTM3LCAyMSwgMTg5LCAyMjgsIDEzNywgCi0gICAgMjEsIDE5NCwgMjI4LCAxMzcsIDIxLCAxOTgsIDIyOCwgMTM3LCAyMSwgMTk1LCAyMjgsIDEzNywgMjEsIDIwMCwgMjI4LCAKLSAgICAxMzcsIDEsIDYxLCAyMjgsIDEzNywgMSwgMjQ1LCAyMDksIDIyOCwgMTM3LCAxLCA3MywgMjI4LCAxMzcsIDEsIDc1LCAyMjgsIAotICAgIDEzNywgMSwgNzAsIDIyOCwgMTM3LCAxLCAyMjYsIDE4MywgMjI4LCAxMzcsIDEsIDc2LCAyMjgsIDEzNywgMSwgMjQ4LCAKLSAgICAyMDksIDIyOCwgMTM3LCAxLCAyMzAsIDI1LCAyMjgsIDEzNywgMSwgMjUyLCAxOTEsIDIyOCwgMTM3LCAxLCAxOTAsIDIyOCwgCi0gICAgMTM3LCAxLCAyMTcsIDEwNSwgMjI4LCAxMzcsIDEsIDIzNSwgMTQxLCAyMjgsIDEzNywgMSwgMjUwLCAxNTcsIDIyOCwgMTM3LCAKLSAgICAxLCAyNDgsIDIyMSwgMjI4LCAxMzcsIDEsIDIwNSwgMjI4LCAxMzcsIDEsIDIyMiwgMTc5LCAyMjgsIDEzNywgMSwgMjA2LCAKLSAgICAyMjgsIDEzNywgMSwgMjQzLCA3OSwgMjI4LCAxMzcsIDEsIDI0NCwgMTk2LCAyMjgsIDEzNywgMSwgMTc2LCAyMjgsIDEzNywgCi0gICAgMSwgMjMzLCAxMzUsIDIyOCwgMTM3LCAxLCAyMjksIDIyOSwgMjExLCAyMjMsIDIyOCwgMTM3LCAxLCAxODQsIDIyOCwgMTM3LCAKLSAgICAxLCAyMjcsIDE2NSwgMjI4LCAxMzcsIDEsIDE5NywgMjI4LCAxMzcsIDEsIDE2MiwgMjI4LCAxMzcsIDEsIDIxMiwgNjUsIAotICAgIDIyOCwgMTM3LCAxLCAxOTEsIDIyOCwgMTM3LCAxLCAyMjcsIDE2NiwgMjExLCAyMjMsIDIyOCwgMTM3LCAxLCAyMzUsIDYxLCAKLSAgICAyMzUsIDE0MSwgMjI4LCAxMzcsIDEsIDIzNSwgNjEsIDI1MCwgMTU3LCAyMjgsIDEzNywgMSwgMjM1LCA2MSwgMjA1LCAyMjgsIAotICAgIDEzNywgMzgsIDIxOSwgMjUxLCAxMjUsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMjE5LCAyNTEsIDEyMSwgMjE2LCAzMCwgCi0gICAgMjI4LCAxMzcsIDM4LCAyMTksIDI1MSwgMjIyLCAyMjgsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMTk5LCAyNDgsIDM4LCAKLSAgICAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMTI1LCAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMTIxLCAyMTYsIAotICAgIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMjIyLCAyMjgsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMjI5LCAxOTMsIDc4LCAKLSAgICAyMjgsIDEzNywgMzgsIDUyLCA1OSwgNDgsIDIyOCwgMTM3LCAxMjUsIDEzOCwgMjU0LCA1NywgMjI4LCAxMzcsIDEyMSwgCi0gICAgMTM4LCAyNTQsIDU3LCAyMjgsIDEzNywgMTYsIDIyNiwgMTg0LCAyNDgsIDUwLCAyMjgsIDEzNywgMTYsIDI0MywgNzgsIAotICAgIDIyOCwgMTM3LCAyNDksIDIxOSwgMjI4LCAxMzcsIDI0NSwgMzEsIDc4LCAyMjgsIDEzNywgMjMzLCAxMDgsIDIyMSwgMjUyLCAKLSAgICAxLCAyNTQsIDE3NiwgMjIxLCAyNTIsIDEsIDI1MSwgMjI4LCAyMjEsIDI1MiwgMSwgMjQzLCAxMTIsIDIyMSwgMjUyLCAxLCAKLSAgICAyNDgsIDE5NCwgMjIxLCAyNTIsIDEsIDIzNSwgMTUyLCAyMjEsIDI1MiwgMSwgMjUyLCAxODksIDIyMSwgMjUyLCAxLCAyMTAsIAotICAgIDg5LCAyMjEsIDI1MiwgMSwgMjM1LCAxNjAsIDIyMSwgMjUyLCAxLCAyMTYsIDY3LCAyMjEsIDI1MiwgMSwgMjEwLCAxODIsIAotICAgIDIyMSwgMjUyLCAxLCAyMzUsIDksIDIyMSwgMjUyLCAxLCAyMzMsIDEyOCwgMjIxLCAyNTIsIDEsIDIzMCwgMTkwLCAyMjEsIAotICAgIDI1MiwgMSwgMjI3LCAxOTQsIDIyMSwgMjUyLCAxLCAyMTksIDE1NiwgMjIxLCAyNTIsIDEsIDIzNSwgMjU1LCAyMjEsIDI1MiwgCi0gICAgMSwgMjQ0LCAxMjEsIDIyMSwgMjUyLCAxLCAyMTUsIDE4MSwgMjIxLCAyNTIsIDEsIDIyNCwgMTAsIDIyMSwgMjUyLCAxLCAKLSAgICAyMjIsIDIyOSwgMjIxLCAyNTIsIDEsIDIyMCwgODUsIDIyMSwgMjUyLCAxLCAyMTcsIDEwMCwgMjIxLCAyNTIsIDE2NCwgCi0gICAgMjM1LCAyNTUsIDIyMSwgMjUyLCAxNjQsIDIzNSwgMjU0LCAyMjEsIDI1MiwgMTY0LCAyMjYsIDI0MywgMjIxLCAyNTIsIAotICAgIDE2NCwgMjQ4LCAyMDcsIDIyMSwgMjUyLCA1OCwgMSwgMjQ1LCAxMDUsIDIxMCwgMTgyLCAyMjEsIDI1MiwgMTY0LCAyNDUsIAotICAgIDEwNSwgMjEwLCAxODIsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA3NSwgMjIxLCAyNTIsIDI1LCA1LCA3NSwgMjIxLCAyNTIsIAotICAgIDI1LCA1LCAyMjYsIDExOCwgMjU1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDI1NSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCAyMjYsIDExOCwgNjEsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA2MSwgMjIxLCAKLSAgICAyNTIsIDI1LCA1LCA2MSwgMjIxLCAyNTIsIDU4LCAxLCAyMTksIDI1MSwgNjEsIDIyMSwgMjUyLCAyNSwgNSwgMjE5LCAyNTEsIAotICAgIDYxLCAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgNzAsIDIyMSwgMjUyLCAyNSwgNSwgNzAsIDIyMSwgMjUyLCA1OCwgMSwgNzMsIAotICAgIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA3MywgMjIxLCAyNTIsIDI1LCA1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCA3NiwgMjIxLCAKLSAgICAyNTIsIDI1LCA1LCAyMTgsIDQ1LCAyMjEsIDI1MiwgMTY0LCAyMjksIDkyLCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIyOSwgOTIsIAotICAgIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAyMTgsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAxMTQsIDIyMSwgMjUyLCAKLSAgICAyMjQsIDE0MSwgMjUyLCAxMTQsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjUzLCAyMDEsIDIyMSwgMjUyLCAyMjQsIDE0MSwgCi0gICAgMjIwLCA4LCAyMjEsIDI1MiwgMjU1LCAyMSwgNzgsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjMxLCA2OCwgMjI0LCA0NSwgMjIxLCAKLSAgICAyNTIsIDIyNCwgMTQxLCAyMTAsIDMxLCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIyNCwgNDUsIDIyMSwgMjUyLCAyMjQsIDE0MSwgCi0gICAgMjEwLCAxMTQsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjE1LCA5MCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTQsIDksIDIyMSwgCi0gICAgMjUyLCAyMjQsIDE0MSwgMjE5LCA1MywgMjMxLCAxNDUsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAxMDAsIDIzMSwgMTgyLCAKLSAgICAxLCAyNDIsIDI0LCAyMzEsIDE4MiwgMSwgMjU1LCAyNSwgMjMxLCAxODIsIDEsIDI1NCwgMjE2LCAyMzEsIDE4MiwgMSwgCi0gICAgMjU0LCAyNTUsIDIzMSwgMTgyLCAxLCAyNTQsIDIwOSwgMjMxLCAxODIsIDEsIDIxNCwgMTI0LCAyMzEsIDE4MiwgMSwgMjUzLCAKLSAgICAxNjAsIDIzMSwgMTgyLCAxLCAyMzUsIDE2MCwgMjMxLCAxODIsIDEsIDI1MywgMTk4LCAyMzEsIDE4MiwgMSwgMjU0LCAxODEsIAotICAgIDIzMSwgMTgyLCAxLCAyNTQsIDE4NiwgMjMxLCAxODIsIDEsIDI1NCwgMTc4LCAyMzEsIDE4MiwgMSwgMjU0LCAxMzYsIDIzMSwgCi0gICAgMTgyLCAxLCAyNTQsIDEyMywgMjMxLCAxODIsIDEsIDI1MywgMjM3LCAyMzEsIDE4MiwgMSwgMjM1LCAyNTUsIDIzMSwgMTgyLCAKLSAgICAxLCAyNTQsIDcyLCAyMzEsIDE4MiwgMSwgMjUzLCAyMDgsIDIzMSwgMTgyLCAxLCAyNTQsIDQ1LCAyMzEsIDE4MiwgMSwgCi0gICAgMjU0LCA0MSwgMjMxLCAxODIsIDEsIDI1MywgMjMxLCAyMzEsIDE4MiwgMSwgMjUzLCAyMDYsIDIzMSwgMTgyLCAxLCAyNDYsIAotICAgIDU1LCAyMzEsIDE4MiwgMSwgMjM1LCAyLCAyMzEsIDE4MiwgMSwgMjU0LCAxOTYsIDIzMSwgMTgyLCAyNTQsIDIyMiwgNzgsIAotICAgIDIzMSwgMTgyLCAyMTMsIDEzNiwgNzgsIDIzMSwgMTgyLCAyNDMsIDUzLCA3OCwgMjMxLCAxODIsIDIyNCwgMTQwLCAxMCwgMSwgCi0gICAgMjUyLCA1NSwgMiwgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMTUxLCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIDgxLCAKLSAgICAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyNDQsIDE0MywgMiwgNTksIDI1MiwgNDMsIDIyLCAxMzQsIDE3MCwgNDgsIDEwLCAKLSAgICAxLCAyMjQsIDgyLCAyLCA1OSwgNTEsIDEwLCAxLCAyMzMsIDEwMywgMiwgNTIsIDEzMCwgMTAsIDEsIDY2LCAyLCAxMzQsIAotICAgIDE3MCwgNDgsIDEwLCAxLCA3OSwgMiwgMTEzLCAxNzAsIDI1MiwgNDMsIDIyLCAyMDIsIDQ4LCAxMCwgMSwgNzksIDIsIDExMywgCi0gICAgMTcwLCAyNTIsIDQzLCAyMiwgNTksIDQ4LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjMyLCAxMjMsIDEwLCAxLCAyMTIsIDMxLCAyLCAKLSAgICA1OSwgMjExLCAyMzEsIDEwLCAxLCAyMjIsIDIwMSwgMjExLCA0MywgMTAsIDI0OSwgOTksIDI0NCwgMTY1LCAxMCwgMjQ5LCAKLSAgICA5OSwgMjQ4LCAxODQsIDEwLCAyNDksIDk5LCAyMzQsIDIwNSwgMTAsIDI0OSwgOTksIDI0NCwgMTYzLCAxMCwgMjQ5LCA5OSwgCi0gICAgMjQ4LCAxODIsIDEwLCAyNDksIDk5LCAyMzQsIDIwMywgMTAsIDEzOCwgMTIzLCA1OSwgNDgsIDEwLCAxMzgsIDExMywgMTcwLCAKLSAgICA0OCwgMTAsIDEzOCwgMjMyLCAxMjQsIDQ4LCAxMCwgMTM4LCAxMjMsIDU5LCA1MSwgMTAsIDEzOCwgMTEzLCAxNzAsIDUxLCAKLSAgICAxMCwgMTM4LCAyMzIsIDEyNCwgNTEsIDEwLCAyMDQsIDI0NCwgMTYzLCAxMCwgMjA0LCAyNDgsIDE4MiwgMTAsIDIwNCwgCi0gICAgMjM0LCAyMDMsIDEwLCA0LCAxMjUsIDIxMiwgMzAsIDEwLCAyNDQsIDE2NiwgMiwgMjIyLCAyMzMsIDEwLCAyNDQsIDE2NiwgCi0gICAgMiwgNTksIDQ4LCAxMCwgMjM0LCAyMDYsIDIsIDU5LCA1MSwgMTAsIDQzLCAyNTMsIDI1MCwgNDgsIDEwLCA0NCwgMjUzLCAKLSAgICAyNTAsIDQ4LCAxMCwgNDMsIDI1MywgMjUwLCA1MSwgMTAsIDQ0LCAyNTMsIDI1MCwgNTEsIDEwLCA1MiwgNDQsIDI1MywgCi0gICAgMjUwLCA0OCwgMTAsIDUyLCA0NCwgMjUzLCAyNTAsIDc3LCAyLCAyNDcsIDEyMCwgMTAsIDQ0LCAyNTMsIDI1MCwgNzcsIDIsIAotICAgIDI0NywgMTIwLCAxMCwgMjQ4LCAxODUsIDIsIDI0NywgMTIwLCA4NCwgNSwgMjM1LCAxOTMsIDI1MCwgMjU1LCA4NCwgNSwgCi0gICAgMjUwLCAyNTUsIDg0LCA1LCAyNTQsIDc1LCA4NCwgNSwgMjEzLCAxNDcsIDg0LCAxLCAyMTksIDI1MSwgNjEsIDg0LCAxLCAKLSAgICA2MSwgODQsIDEsIDI1NSwgNzMsIDg0LCAxLCA3MywgODQsIDEsIDIzNiwgMzMsIDg0LCAxLCA3MCwgODQsIDEsIDIxNCwgCi0gICAgMTE4LCA4NCwgMSwgMTQ5LCAxNTMsIDg0LCAxLCAxNDksIDE1NiwgODQsIDEsIDI1MSwgMiwgNzUsIDg0LCAxLCAyMTksIAotICAgIDI1MSwgNzUsIDg0LCAxLCA3NSwgODQsIDEsIDI1NCwgMjAxLCA4NCwgMSwgMjUxLCAyLCA3NiwgODQsIDEsIDIxOSwgMjUxLCAKLSAgICA3NiwgODQsIDEsIDc2LCA4NCwgMSwgMjUzLCAxOTIsIDg0LCAxLCAxNzYsIDg0LCAxLCAyMzQsIDEzMiwgODQsIDEsIDI0MywgCi0gICAgMTM1LCA4NCwgMSwgMjQyLCAyNDksIDg0LCAxLCAyMjksIDc3LCA4NCwgMSwgMjUxLCAzMywgODQsIDEsIDI1MCwgMTU3LCAKLSAgICA4NCwgMSwgMjM1LCAxNDEsIDg0LCAxLCAyMzUsIDExNCwgODQsIDEsIDIyNywgMTY1LCA4NCwgMSwgMjE1LCAxNTYsIDg0LCAKLSAgICAxLCAyMTUsIDE0NCwgODQsIDEsIDI0OCwgMTM1LCA4NCwgMSwgMjQ4LCAxMTksIDg0LCAxLCAyMjgsIDExMCwgODQsIDEsIAotICAgIDIxNywgMTA1LCA4NCwgMSwgMjE2LCAyMDgsIDg0LCAxLCAyNDgsIDIyMSwgODQsIDEsIDI0OCwgMjUsIDg0LCAxLCAxOTcsIAotICAgIDg0LCAxLCAyMjgsIDkyLCA4NCwgMSwgMTkwLCA4NCwgMSwgMjI1LCAxNDcsIDg0LCAxLCAyNTIsIDE5MSwgODQsIDEsIDI1MiwgCi0gICAgMTgsIDg0LCAxLCAxODQsIDg0LCAxLCAxOTEsIDg0LCAxLCAyMDUsIDg0LCAxLCAyMjIsIDE3OSwgODQsIDEsIDIzMywgMTM1LCAKLSAgICA4NCwgMSwgMjMyLCAxODQsIDg0LCAxLCAyMzIsIDE3NSwgODQsIDEsIDIxNCwgMjcsIDg0LCAxLCAyMjAsIDEwMiwgODQsIDEsIAotICAgIDIxOCwgMjIzLCA4NCwgMSwgMjA2LCA4NCwgMSwgMTYyLCA4NCwgMjUsIDUsIDIyNiwgMjM0LCA4NCwgMjUsIDUsIDIyNiwgCi0gICAgMTgxLCA4NCwgNSwgMjI3LCAyMDUsIDg0LCA1LCAyNTMsIDE3NSwgODQsIDI1LCA1LCAyNTUsIDczLCA4NCwgMjUsIDUsIDczLCAKLSAgICA4NCwgMjUsIDUsIDIzNiwgMzMsIDg0LCAyNSwgNSwgNzAsIDg0LCAyNSwgNSwgMjE0LCAxMTgsIDg0LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTMsIDg0LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgODQsIDI1LCA1LCAyNTEsIDIsIDc1LCA4NCwgMjUsIDUsIDIxOSwgCi0gICAgMjUxLCA3NSwgODQsIDI1LCA1LCA3NSwgODQsIDI1LCA1LCAyNTQsIDIwMSwgODQsIDI1LCA1LCAyNTEsIDIsIDc2LCA4NCwgCi0gICAgMjUsIDUsIDIxOSwgMjUxLCA3NiwgODQsIDI1LCA1LCA3NiwgODQsIDI1LCA1LCAyNTMsIDE5MiwgODQsIDUsIDIxMywgMTUyLCAKLSAgICA4NCwgMjUsIDUsIDIyNCwgMTg1LCA3NSwgODQsIDI1LCA1LCAyNTMsIDE3MSwgODQsIDIyNiwgMjA0LCA4NCwgMjE4LCAxMTEsIAotICAgIDUsIDIxNCwgMjE2LCA4NCwgMjE4LCAxMTEsIDUsIDI1NCwgNzcsIDg0LCAyNDIsIDEzNywgMjU1LCAxNCwgODQsIDI1NSwgMywgCi0gICAgMjU1LCAxNCwgODQsIDI1LCA1LCAyNTEsIDIsIDE5OSwgNzUsIDg0LCAyNSwgNSwgMjE0LCAyMTQsIDg0LCAyNSwgNSwgMjE0LCAKLSAgICAxMTcsIDg0LCAxLCAyMjQsIDg4LCA4NCwgMSwgMjM0LCAxMTUsIDg0LCAxLCAyNDIsIDIyNiwgODQsIDEsIDIxMCwgMTE2LCAKLSAgICA4NCwgMSwgMjQ4LCAxMjQsIDg0LCAxLCAyMjMsIDM5LCA4NCwgMSwgMjQ0LCAxOTYsIDg0LCAxLCAyMTAsIDE2OCwgODQsIDEsIAotICAgIDE0OSwgMjIyLCAxODAsIDg0LCAxLCAxNDksIDIzMiwgMTg1LCA4NCwgMjUsIDUsIDE0OSwgMTU2LCA4NCwgMjUsIDUsIDE0OSwgCi0gICAgMjMyLCAxODUsIDg0LCAyNDgsIDE3OCwgODQsIDUyLCAyNDgsIDE3OCwgODQsIDIxLCAyMTAsIDg2LCA4NCwgMjEsIDExMCwgCi0gICAgODQsIDIxLCAxMDUsIDg0LCAyMSwgMTU4LCA4NCwgMjEsIDE2MSwgODQsIDIxLCAxODksIDg0LCAyMSwgMTk0LCA4NCwgMjEsIAotICAgIDE5OCwgODQsIDIxLCAxOTUsIDg0LCAyMSwgMjAwLCA4NCwgMjU1LCAyMSwgNTAsIDg0LCA1LCAxMjUsIDIxOSwgMTcsIDI0NywgCi0gICAgMTIwLCA4NCwgMSwgMjUxLCAyLCA2MSwgODQsIDEsIDIyNiwgMjM0LCA4NCwgMSwgMjI2LCAxODEsIDg0LCAxLCAyNTMsIAotICAgIDE3MSwgODQsIDEsIDIxNCwgMjE0LCA4NCwgMSwgMjE0LCAxMTcsIDg0LCAxLCAyMTAsIDgyLCA4NCwgMSwgMTE0LCAxOTEsIAotICAgIDg0LCAxLCAyNDMsIDI5LCA4NCwgMSwgMjM1LCA5NiwgODQsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgODQsIDEsIDI0OCwgCi0gICAgMTI1LCA4NCwgMSwgMjUyLCAxMTEsIDE0NiwgNSwgMjUwLCAyNTUsIDE0NiwgNSwgMjU0LCA3NSwgMTQ2LCA1LCAyMTMsIAotICAgIDE0NywgMTQ2LCAxLCA2MSwgMTQ2LCAxLCAyNTUsIDczLCAxNDYsIDEsIDczLCAxNDYsIDEsIDIzNiwgMzMsIDE0NiwgMSwgCi0gICAgNzAsIDE0NiwgMSwgMjE0LCAxMTgsIDE0NiwgMSwgMTQ5LCAxNTMsIDE0NiwgMSwgMTQ5LCAxNTYsIDE0NiwgMSwgNzUsIAotICAgIDE0NiwgMSwgMjU0LCAyMDEsIDE0NiwgMSwgNzYsIDE0NiwgMSwgMjUzLCAxOTIsIDE0NiwgMSwgMTc2LCAxNDYsIDEsIDIzNCwgCi0gICAgMTMyLCAxNDYsIDEsIDI0MywgMTM1LCAxNDYsIDEsIDI0MiwgMjQ5LCAxNDYsIDEsIDIyOSwgNzcsIDE0NiwgMSwgMjUxLCAKLSAgICAzMywgMTQ2LCAxLCAyNTAsIDE1NywgMTQ2LCAxLCAyMzUsIDE0MSwgMTQ2LCAxLCAyMzUsIDExNCwgMTQ2LCAxLCAyMjcsIAotICAgIDE2NSwgMTQ2LCAxLCAyMTUsIDE1NiwgMTQ2LCAxLCAyMTUsIDE0NCwgMTQ2LCAxLCAyNDgsIDEzNSwgMTQ2LCAxLCAyNDgsIAotICAgIDExOSwgMTQ2LCAxLCAyMjgsIDExMCwgMTQ2LCAxLCAyMTcsIDEwNSwgMTQ2LCAxLCAyMTYsIDIwOCwgMTQ2LCAxLCAyNDgsIAotICAgIDIyMSwgMTQ2LCAxLCAyNDgsIDI1LCAxNDYsIDEsIDE5NywgMTQ2LCAxLCAxOTAsIDE0NiwgMSwgMjI1LCAxNDcsIDE0NiwgMSwgCi0gICAgMjUyLCAxOTEsIDE0NiwgMSwgMjUyLCAxOCwgMTQ2LCAxLCAxODQsIDE0NiwgMSwgMTkxLCAxNDYsIDEsIDIwNSwgMTQ2LCAxLCAKLSAgICAyMzMsIDEzNSwgMTQ2LCAxLCAyMjAsIDEwMiwgMTQ2LCAxLCAyMTgsIDIyMywgMTQ2LCAxLCAyMDYsIDE0NiwgMSwgMTYyLCAKLSAgICAxNDYsIDUsIDIyNywgMjA1LCAxNDYsIDUsIDI1MywgMTc1LCAxNDYsIDI1LCA1LCAyNTUsIDczLCAxNDYsIDI1LCA1LCA3MywgCi0gICAgMTQ2LCAyNSwgNSwgMjM2LCAzMywgMTQ2LCAyNSwgNSwgNzAsIDE0NiwgMjUsIDUsIDIxNCwgMTE4LCAxNDYsIDI1LCA1LCAKLSAgICAxNDksIDE1MywgMTQ2LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTQ2LCAyNSwgNSwgNzUsIDE0NiwgMjUsIDUsIDI1NCwgCi0gICAgMjAxLCAxNDYsIDI1LCA1LCA3NiwgMTQ2LCAyNSwgNSwgMjUzLCAxOTIsIDE0NiwgNSwgMjEzLCAxNTIsIDE0NiwgMSwgMjM0LCAKLSAgICAxMjQsIDIxNywgMTA1LCAxNDYsIDI1MywgMTkzLCAyMzMsIDIzLCA3OCwgMTQ2LCAxLCAyMjIsIDE3OSwgMTQ2LCAxLCAyMjMsIAotICAgIDM5LCAxNDYsIDEsIDIxMCwgMTY4LCAxNDYsIDEsIDE0OSwgMjIyLCAxODAsIDE0NiwgMSwgMTQ5LCAyMzIsIDE4NSwgMTQ2LCAKLSAgICAyNSwgNSwgMTQ5LCAxNTYsIDE0NiwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE0NiwgMjEsIDIxMCwgODYsIDE0NiwgMjEsIAotICAgIDExMCwgMTQ2LCAyMSwgMTA1LCAxNDYsIDIxLCAxNTgsIDE0NiwgMjEsIDE2MSwgMTQ2LCAyMSwgMTg5LCAxNDYsIDIxLCAKLSAgICAxOTQsIDE0NiwgMjEsIDE5OCwgMTQ2LCAyMSwgMTk1LCAxNDYsIDIxLCAyMDAsIDE0NiwgMSwgMjIzLCAxODgsIDIsIDIzMCwgCi0gICAgMjI0LCAyNDcsIDI1NCwgMTQ2LCAxLCAyMjMsIDE4OCwgMiwgMjMyLCAxMDgsIDI0NywgMjU0LCAxNDYsIDIyMiwgMTE4LCAKLSAgICA3OCwgMTQ2LCAyMjIsIDExOCwgNTAsIDE0NiwgMjQ5LCA5OCwgMjI3LCAxOTcsIDExMCwgMTQ2LCAyNDksIDk4LCAyMjcsIAotICAgIDE5NywgMTA1LCAxNDYsIDI0OSwgOTgsIDIyNywgMTk3LCAxNTgsIDE0NiwgMjQ5LCA5OCwgMjI3LCAxOTcsIDE2MSwgMTQ2LCAKLSAgICAyNDksIDk4LCAyMjcsIDE5NywgMTIzLCAyMzMsIDE2LCAyMTYsIDIwMSwgMjE2LCAxOTYsIDI0OCwgNDgsIDE0NiwgMjQ5LCAKLSAgICA5OCwgMjQ4LCA0OSwgMjE5LCAxMTksIDE0NiwgMjM1LCAxNjEsIDE0NiwgMjQzLCAxMDMsIDc4LCAxODMsIDUsIDI1NCwgCi0gICAgMjU0LCAyNTEsIDI0MywgMTgzLCA1LCAyNTEsIDI0MywgMTgzLCA1LCAyMTMsIDE0NywgMTgzLCAxLCA2MSwgMTgzLCAxLCAKLSAgICAyNTUsIDczLCAxODMsIDEsIDczLCAxODMsIDEsIDIzNiwgMzMsIDE4MywgMSwgNzAsIDE4MywgMSwgMjE0LCAxMTgsIDE4MywgCi0gICAgMSwgMjQ1LCAyMDksIDE4MywgMSwgMjU0LCAyMDEsIDE4MywgMSwgMjI2LCAxODMsIDE4MywgMSwgMjUzLCAxOTIsIDE4MywgCi0gICAgMSwgMTc2LCAxODMsIDEsIDIzNCwgMTMyLCAxODMsIDEsIDI0MywgMTM1LCAxODMsIDEsIDI0MiwgMjQ5LCAxODMsIDEsIAotICAgIDIyOSwgNzcsIDE4MywgMSwgMjUxLCAzMywgMTgzLCAxLCAyNTAsIDE1NywgMTgzLCAxLCAyMzUsIDE0MSwgMTgzLCAxLCAKLSAgICAyMzUsIDExNCwgMTgzLCAxLCAyMjcsIDE2NSwgMTgzLCAxLCAyMTUsIDE1NiwgMTgzLCAxLCAyMTUsIDE0NCwgMTgzLCAxLCAKLSAgICAyNDgsIDEzNSwgMTgzLCAxLCAyNDgsIDExOSwgMTgzLCAxLCAyMjgsIDExMCwgMTgzLCAxLCAyMTcsIDEwNSwgMTgzLCAxLCAKLSAgICAyMTYsIDIwOCwgMTgzLCAxLCAyNDgsIDIyMSwgMTgzLCAxLCAyNDgsIDI1LCAxODMsIDEsIDE5NywgMTgzLCAxLCAxOTAsIAotICAgIDE4MywgMSwgMjI1LCAxNDcsIDE4MywgMSwgMjUyLCAxOTEsIDE4MywgMSwgMjUyLCAxOCwgMTgzLCAxLCAxODQsIDE4MywgMSwgCi0gICAgMTkxLCAxODMsIDEsIDIwNSwgMTgzLCAxLCAyMzMsIDEzNSwgMTgzLCAxLCAyMzIsIDE4NCwgMTgzLCAxLCAyMTQsIDI3LCAKLSAgICAxODMsIDEsIDIyMCwgMTAyLCAxODMsIDEsIDIwNiwgMTgzLCAxLCAxNjIsIDE4MywgNSwgMjI3LCAyMDUsIDE4MywgMjUsIDUsIAotICAgIDI1NSwgNzMsIDE4MywgMjUsIDUsIDczLCAxODMsIDI1LCA1LCAyMzYsIDMzLCAxODMsIDI1LCA1LCA3MCwgMTgzLCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDE4MywgMjUsIDUsIDI0NSwgMjA5LCAxODMsIDI1LCA1LCAyNTQsIDIwMSwgMTgzLCAyNSwgNSwgMjI2LCAKLSAgICAxODMsIDE4MywgMjUsIDUsIDI1MywgMTkyLCAxODMsIDUsIDIxMywgMTUyLCAxODMsIDUsIDIxNCwgMjE4LCAxODMsIDEsIAotICAgIDIzNCwgMTE1LCAxODMsIDEsIDI0MiwgMjI2LCAxODMsIDEsIDIxMCwgMTE2LCAxODMsIDEsIDIyMiwgMTc5LCAxODMsIDEsIAotICAgIDI0NCwgMTk2LCAxODMsIDIxLCAyMTAsIDg2LCAxODMsIDIxLCAxMTAsIDE4MywgMjEsIDEwNSwgMTgzLCAyMSwgMTU4LCAKLSAgICAxODMsIDIxLCAxNjEsIDE4MywgMjEsIDE4OSwgMTgzLCAyMSwgMTk0LCAxODMsIDIxLCAxOTgsIDE4MywgMjEsIDE5NSwgCi0gICAgMTgzLCAyMSwgMjAwLCAxODMsIDIxNiwgNzQsIDE4MywgMjU0LCAyNTMsIDE4MywgMjM1LCAxNzgsIDE4MywgMjE0LCAxNDYsIAotICAgIDE4MywgMjQ1LCAxODEsIDIyNiwgMTg4LCAxODMsIDUsIDIxMSwgNzgsIDE3MSwgNSwgMjUwLCAyNTUsIDE3MSwgNSwgMjU0LCAKLSAgICA3NSwgMTcxLCA1LCAyMTMsIDE0NywgMTcxLCAxLCA2MSwgMTcxLCAxLCAyNTUsIDczLCAxNzEsIDEsIDczLCAxNzEsIDEsIAotICAgIDIzNiwgMzMsIDE3MSwgMSwgNzAsIDE3MSwgMSwgMjE0LCAxMTgsIDE3MSwgMSwgMTQ5LCAxNTMsIDE3MSwgMSwgMTQ5LCAKLSAgICAxNTYsIDE3MSwgMjUsIDI1MSwgMiwgNzUsIDE3MSwgMSwgNzUsIDE3MSwgMSwgMjU0LCAyMDEsIDE3MSwgMjUsIDI1MSwgMiwgCi0gICAgNzYsIDE3MSwgMSwgNzYsIDE3MSwgMSwgMjUzLCAxOTIsIDE3MSwgMSwgMTc2LCAxNzEsIDEsIDIzNCwgMTMyLCAxNzEsIDEsIAotICAgIDI0MywgMTM1LCAxNzEsIDEsIDI0MiwgMjQ5LCAxNzEsIDEsIDIyOSwgNzcsIDE3MSwgMSwgMjUxLCAzMywgMTcxLCAxLCAKLSAgICAyNTAsIDE1NywgMTcxLCAxLCAyMzUsIDE0MSwgMTcxLCAxLCAyMzUsIDExNCwgMTcxLCAxLCAyMjcsIDE2NSwgMTcxLCAxLCAKLSAgICAyMTUsIDE1NiwgMTcxLCAxLCAyMTUsIDE0NCwgMTcxLCAxLCAyNDgsIDEzNSwgMTcxLCAxLCAyNDgsIDExOSwgMTcxLCAxLCAKLSAgICAyMjgsIDExMCwgMTcxLCAxLCAyMTcsIDEwNSwgMTcxLCAxLCAyMTYsIDIwOCwgMTcxLCAxLCAyNDgsIDIyMSwgMTcxLCAxLCAKLSAgICAyNDgsIDI1LCAxNzEsIDEsIDE5NywgMTcxLCAxLCAxOTAsIDE3MSwgMSwgMjI1LCAxNDcsIDE3MSwgMSwgMjUyLCAxOTEsIAotICAgIDE3MSwgMSwgMjUyLCAxOCwgMTcxLCAxLCAxODQsIDE3MSwgMSwgMTkxLCAxNzEsIDEsIDIwNSwgMTcxLCAxLCAyMzMsIDEzNSwgCi0gICAgMTcxLCAxLCAyMzIsIDE4NCwgMTcxLCAxLCAyMTQsIDI3LCAxNzEsIDEsIDIyMCwgMTAyLCAxNzEsIDEsIDIxOCwgMjIzLCAKLSAgICAxNzEsIDEsIDIwNiwgMTcxLCAxLCAxNjIsIDE3MSwgNSwgMjI3LCAyMDUsIDE3MSwgNSwgMjUzLCAxNzUsIDE3MSwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDE3MSwgMjUsIDUsIDczLCAxNzEsIDI1LCA1LCAyMzYsIDMzLCAxNzEsIDI1LCA1LCA3MCwgMTcxLCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDE3MSwgMjUsIDUsIDE0OSwgMTUzLCAxNzEsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNzEsIDI1LCA1LCAKLSAgICAyNTEsIDIsIDc1LCAxNzEsIDI1LCA1LCA3NSwgMTcxLCAyNSwgNSwgMjU0LCAyMDEsIDE3MSwgMjUsIDUsIDI1MSwgMiwgNzYsIAotICAgIDE3MSwgMjUsIDUsIDc2LCAxNzEsIDI1LCA1LCAyNTMsIDE5MiwgMTcxLCA1LCAyMTMsIDE1MiwgMTcxLCAyMjYsIDIwNCwgCi0gICAgMTcxLCAxLCAxNDksIDIyMiwgMTgwLCAxNzEsIDEsIDE0OSwgMjMyLCAxODUsIDE3MSwgMjUsIDUsIDE0OSwgMTU2LCAxNzEsIAotICAgIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNzEsIDIxLCAyMTAsIDg2LCAxNzEsIDIxLCAxMTAsIDE3MSwgMjEsIDEwNSwgMTcxLCAKLSAgICAyMSwgMTU4LCAxNzEsIDIxLCAxNjEsIDE3MSwgMjEsIDE4OSwgMTcxLCAyMSwgMTk0LCAxNzEsIDIxLCAxOTgsIDE3MSwgMjEsIAotICAgIDE5NSwgMTcxLCAyMSwgMjAwLCAxNzEsIDI1NSwgMjEsIDUwLCAxNzEsIDIyMiwgMTE4LCA1MCwgMTU3LCA1LCAyNTAsIDI1NSwgCi0gICAgMTU3LCA1LCAyNTQsIDc1LCAxNTcsIDUsIDIxMywgMTQ3LCAxNTcsIDEsIDYxLCAxNTcsIDEsIDI1NSwgNzMsIDE1NywgMSwgCi0gICAgNzMsIDE1NywgMSwgMjM2LCAzMywgMTU3LCAxLCA3MCwgMTU3LCAxLCAyMTQsIDExOCwgMTU3LCAxLCAxNDksIDE1MywgMTU3LCAKLSAgICAxLCAxNDksIDE1NiwgMTU3LCAxLCA3NSwgMTU3LCAxLCAyNTQsIDIwMSwgMTU3LCAxLCA3NiwgMTU3LCAxLCAyNTMsIDE5MiwgCi0gICAgMTU3LCAxLCAxNzYsIDE1NywgMSwgMjM0LCAxMzIsIDE1NywgMSwgMjQzLCAxMzUsIDE1NywgMSwgMjQyLCAyNDksIDE1NywgCi0gICAgMSwgMjI5LCA3NywgMTU3LCAxLCAyNTEsIDMzLCAxNTcsIDEsIDI1MCwgMTU3LCAxNTcsIDEsIDIzNSwgMTQxLCAxNTcsIDEsIAotICAgIDIzNSwgMTE0LCAxNTcsIDEsIDIyNywgMTY1LCAxNTcsIDEsIDIxNSwgMTU2LCAxNTcsIDEsIDIxNSwgMTQ0LCAxNTcsIDEsIAotICAgIDI0OCwgMTM1LCAxNTcsIDEsIDI0OCwgMTE5LCAxNTcsIDEsIDIyOCwgMTEwLCAxNTcsIDEsIDIxNywgMTA1LCAxNTcsIDEsIAotICAgIDIxNiwgMjA4LCAxNTcsIDEsIDI0OCwgMjIxLCAxNTcsIDEsIDI0OCwgMjUsIDE1NywgMSwgMTk3LCAxNTcsIDEsIDE5MCwgCi0gICAgMTU3LCAxLCAyMjUsIDE0NywgMTU3LCAxLCAyNTIsIDE5MSwgMTU3LCAxLCAyNTIsIDE4LCAxNTcsIDEsIDE4NCwgMTU3LCAxLCAKLSAgICAxOTEsIDE1NywgMSwgMjA1LCAxNTcsIDEsIDIzMywgMTM1LCAxNTcsIDEsIDIzMiwgMTg0LCAxNTcsIDEsIDIxNCwgMjcsIAotICAgIDE1NywgMSwgMjIwLCAxMDIsIDE1NywgMSwgMjE4LCAyMjMsIDE1NywgMSwgMjA2LCAxNTcsIDEsIDE2MiwgMTU3LCA1LCAKLSAgICAyMjcsIDIwNSwgMTU3LCA1LCAyNTMsIDE3NSwgMTU3LCAyNSwgNSwgMjU1LCA3MywgMTU3LCAyNSwgNSwgNzMsIDE1NywgMjUsIAotICAgIDUsIDIzNiwgMzMsIDE1NywgMjUsIDUsIDcwLCAxNTcsIDI1LCA1LCAyMTQsIDExOCwgMTU3LCAyNSwgNSwgMTQ5LCAxNTMsIAotICAgIDE1NywgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE1NywgMjUsIDUsIDc1LCAxNTcsIDI1LCA1LCAyNTQsIDIwMSwgMTU3LCAyNSwgCi0gICAgNSwgNzYsIDE1NywgMjUsIDUsIDI1MywgMTkyLCAxNTcsIDUsIDIxMywgMTUyLCAxNTcsIDI1NCwgMjAyLCAyMzMsIDIzLCAKLSAgICA3OCwgMTU3LCAyNTMsIDE5MywgMjMzLCAyMywgNzgsIDE1NywgMSwgMjIyLCAxNzksIDE1NywgMSwgMjIzLCAzOSwgMTU3LCAKLSAgICAxLCAyMTAsIDE2OCwgMTU3LCAxLCAxNDksIDIyMiwgMTgwLCAxNTcsIDEsIDE0OSwgMjMyLCAxODUsIDE1NywgMjUsIDUsIAotICAgIDE0OSwgMTU2LCAxNTcsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNTcsIDIxLCAyMTAsIDg2LCAxNTcsIDIxLCAxMTAsIDE1NywgCi0gICAgMjEsIDEwNSwgMTU3LCAyMSwgMTU4LCAxNTcsIDIxLCAxNjEsIDE1NywgMjEsIDE4OSwgMTU3LCAyMSwgMTk0LCAxNTcsIDIxLCAKLSAgICAxOTgsIDE1NywgMjEsIDE5NSwgMTU3LCAyMSwgMjAwLCAxNTcsIDIzNSwgMTYxLCAxNTcsIDEsIDIxMiwgNjUsIDE1NywgCi0gICAgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDE1NywgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIDE1NywgMjQ0LCAyLCAxMzQsIDIyNCwgCi0gICAgMTksIDE1NywgMjQ0LCAyLCAxMjMsIDIxOSwgMTE3LCAxNTcsIDI0NCwgMiwgMTIzLCAyNDUsIDE4OCwgMTU3LCAyNDQsIDIsIAotICAgIDEzNCwgMjE5LCAxMTYsIDM2LCA1LCAyNTQsIDc1LCAzNiwgNSwgMjEzLCAxNDcsIDM2LCAxLCA2MSwgMzYsIDEsIDI1NSwgCi0gICAgNzMsIDM2LCAxLCA3MywgMzYsIDEsIDIzNiwgMzMsIDM2LCAxLCA3MCwgMzYsIDEsIDIxNCwgMTE4LCAzNiwgMSwgNzUsIDM2LCAKLSAgICAxLCAyNDUsIDIwOSwgMzYsIDEsIDI1NCwgMjAxLCAzNiwgMSwgNzYsIDM2LCAxLCAyMjYsIDE4MywgMzYsIDEsIDI1MywgCi0gICAgMTkyLCAzNiwgMSwgMTc2LCAzNiwgMSwgMjI5LCA3NywgMzYsIDEsIDI1MSwgMzMsIDM2LCAxLCAyMzUsIDE0MSwgMzYsIDEsIAotICAgIDIyNywgMTY1LCAzNiwgMSwgMjE1LCAxNTYsIDM2LCAxLCAyMjgsIDExMCwgMzYsIDEsIDIxNywgMTA1LCAzNiwgMSwgMTk3LCAKLSAgICAzNiwgMSwgMjI4LCA5MiwgMzYsIDEsIDE5MCwgMzYsIDEsIDE4NCwgMzYsIDEsIDE5MSwgMzYsIDEsIDIwNSwgMzYsIDEsIAotICAgIDIyMiwgMTc5LCAzNiwgMSwgMjMzLCAxMzUsIDM2LCAxLCAyMzIsIDE4NCwgMzYsIDEsIDIzMiwgMTc1LCAzNiwgMSwgMjE0LCAKLSAgICAyNywgMzYsIDEsIDIyMCwgMTAyLCAzNiwgMSwgMjE4LCAyMjMsIDM2LCAxLCAyMDYsIDM2LCAxLCAxNjIsIDM2LCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMzYsIDI1LCA1LCA3MywgMzYsIDI1LCA1LCAyMzYsIDMzLCAzNiwgMjUsIDUsIDcwLCAzNiwgMjUsIDUsIAotICAgIDIxNCwgMTE4LCAzNiwgMjUsIDUsIDc1LCAzNiwgMjUsIDUsIDI0NSwgMjA5LCAzNiwgMjUsIDUsIDI1NCwgMjAxLCAzNiwgCi0gICAgMjUsIDUsIDc2LCAzNiwgMjUsIDUsIDIyNiwgMTgzLCAzNiwgMjUsIDUsIDI1MywgMTkyLCAzNiwgNSwgMjEzLCAxNTIsIDM2LCAKLSAgICAyMjYsIDIwNCwgMzYsIDI1MywgMTkzLCAyMzMsIDIzLCA3OCwgMzYsIDIxLCAyMTAsIDg2LCAzNiwgMjEsIDExMCwgMzYsIAotICAgIDIxLCAxMDUsIDM2LCAyMSwgMTU4LCAzNiwgMjEsIDE2MSwgMzYsIDIxLCAxODksIDM2LCAyMSwgMTk0LCAzNiwgMjEsIDE5OCwgCi0gICAgMzYsIDIxLCAxOTUsIDM2LCAyMSwgMjAwLCAzNiwgNTQsIDIxNiwgMjQ3LCAzNiwgNTQsIDEyMywgMjQwLCAyMTAsIDM2LCAKLSAgICA1NCwgMTIzLCAyMTYsIDE0NywgMzYsIDI0OCwgMTQ2LCA1MCwgMzYsIDIzMCwgMTM1LCA1MCwgMzYsIDIxMSwgNDUsIDUwLCAKLSAgICAzNiwgMjQ4LCA4NywgNTAsIDM2LCAyNDksIDEzOSwgNTAsIDM2LCAyNTMsIDIzOCwgNzcsIDUwLCAzNiwgMjIyLCAxMTgsIAotICAgIDUwLCAzNiwgNTQsIDUwLCAxNDgsIDUsIDI1MCwgMjU1LCAxNDgsIDUsIDI1NCwgNzUsIDE0OCwgNSwgMjEzLCAxNDcsIDE0OCwgCi0gICAgMSwgNjEsIDE0OCwgMSwgMjU1LCA3MywgMTQ4LCAxLCA3MywgMTQ4LCAxLCAyMzYsIDMzLCAxNDgsIDEsIDcwLCAxNDgsIDEsIAotICAgIDIxNCwgMTE4LCAxNDgsIDEsIDE0OSwgMTUzLCAxNDgsIDEsIDE0OSwgMTU2LCAxNDgsIDEsIDc1LCAxNDgsIDEsIDI0NSwgCi0gICAgMjA5LCAxNDgsIDEsIDI1NCwgMjAxLCAxNDgsIDEsIDc2LCAxNDgsIDEsIDIyNiwgMTgzLCAxNDgsIDEsIDI1MywgMTkyLCAKLSAgICAxNDgsIDEsIDE3NiwgMTQ4LCAxLCAyMzQsIDEzMiwgMTQ4LCAxLCAyNDMsIDEzNSwgMTQ4LCAxLCAyNDIsIDI0OSwgMTQ4LCAKLSAgICAxLCAyMjksIDc3LCAxNDgsIDEsIDI1MSwgMzMsIDE0OCwgMSwgMjUwLCAxNTcsIDE0OCwgMSwgMjM1LCAxNDEsIDE0OCwgMSwgCi0gICAgMjM1LCAxMTQsIDE0OCwgMSwgMjI3LCAxNjUsIDE0OCwgMSwgMjE1LCAxNTYsIDE0OCwgMSwgMjE1LCAxNDQsIDE0OCwgMSwgCi0gICAgMjQ4LCAxMzUsIDE0OCwgMSwgMjQ4LCAxMTksIDE0OCwgMSwgMjI4LCAxMTAsIDE0OCwgMSwgMjE3LCAxMDUsIDE0OCwgMSwgCi0gICAgMjE2LCAyMDgsIDE0OCwgMSwgMjQ4LCAyMjEsIDE0OCwgMSwgMjQ4LCAyNSwgMTQ4LCAxLCAxOTcsIDE0OCwgMSwgMTkwLCAKLSAgICAxNDgsIDEsIDIyNSwgMTQ3LCAxNDgsIDEsIDI1MiwgMTkxLCAxNDgsIDEsIDI1MiwgMTgsIDE0OCwgMSwgMTg0LCAxNDgsIDEsIAotICAgIDE5MSwgMTQ4LCAxLCAyMDUsIDE0OCwgMSwgMjIyLCAxNzksIDE0OCwgMSwgMjMzLCAxMzUsIDE0OCwgMSwgMjMyLCAxODQsIAotICAgIDE0OCwgMSwgMjE0LCAyNywgMTQ4LCAxLCAyMjAsIDEwMiwgMTQ4LCAxLCAyMTgsIDIyMywgMTQ4LCAxLCAyMDYsIDE0OCwgMSwgCi0gICAgMTYyLCAxNDgsIDUsIDI1MywgMTc1LCAxNDgsIDI1LCA1LCAyNTUsIDczLCAxNDgsIDI1LCA1LCA3MywgMTQ4LCAyNSwgNSwgCi0gICAgMjM2LCAzMywgMTQ4LCAyNSwgNSwgNzAsIDE0OCwgMjUsIDUsIDIxNCwgMTE4LCAxNDgsIDI1LCA1LCAxNDksIDE1MywgMTQ4LCAKLSAgICAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTQ4LCAyNSwgNSwgNzUsIDE0OCwgMjUsIDUsIDI0NSwgMjA5LCAxNDgsIDI1LCA1LCAKLSAgICAyNTQsIDIwMSwgMTQ4LCAyNSwgNSwgNzYsIDE0OCwgMjUsIDUsIDIyNiwgMTgzLCAxNDgsIDI1LCA1LCAyNTMsIDE5MiwgCi0gICAgMTQ4LCA1LCAyMTMsIDE1MiwgMTQ4LCAyMzMsIDIzLCA3OCwgMTQ4LCAyNTQsIDIwMiwgMjMzLCAyMywgNzgsIDE0OCwgMSwgCi0gICAgMjE1LCAxODMsIDE0OCwgMSwgMjQ2LCAzOCwgMTQ4LCAxLCAxNDksIDIyMiwgMTgwLCAxNDgsIDEsIDE0OSwgMjMyLCAxODUsIAotICAgIDE0OCwgMjUsIDUsIDE0OSwgMTU2LCAxNDgsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNDgsIDIxLCAyMTAsIDg2LCAxNDgsIAotICAgIDIxLCAxMTAsIDE0OCwgMjEsIDEwNSwgMTQ4LCAyMSwgMTU4LCAxNDgsIDIxLCAxNjEsIDE0OCwgMjEsIDE4OSwgMTQ4LCAyMSwgCi0gICAgMTk0LCAxNDgsIDIxLCAxOTgsIDE0OCwgMjEsIDE5NSwgMTQ4LCAyMSwgMjAwLCAxNDgsIDI0NCwgMiwgMjEsIDIxMCwgODcsIAotICAgIDMxLCAyMjYsIDIzNywgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTIzLCAzMSwgMjI2LCAyMzcsIDIyNCwgCi0gICAgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDExMywgMzEsIDIyNiwgMjM3LCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAKLSAgICAyNDQsIDIsIDIxLCAxMzQsIDMxLCAyMjYsIDIzNywgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTIzLCAKLSAgICAzMSwgMjQ1LCA0MiwgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTEzLCAzMSwgMjQ1LCA0MiwgMjI0LCAKLSAgICAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTM0LCAzMSwgMjQ1LCA0MiwgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgCi0gICAgNSwgMjE1LCA4NCwgMTY1LCA1LCAyNTQsIDc1LCAxNjUsIDUsIDIxMywgMTQ3LCAxNjUsIDEsIDYxLCAxNjUsIDEsIDI1NSwgCi0gICAgNzMsIDE2NSwgMSwgNzMsIDE2NSwgMSwgMjM2LCAzMywgMTY1LCAxLCA3MCwgMTY1LCAxLCAyMTQsIDExOCwgMTY1LCAxLCAKLSAgICAxNDksIDE1MywgMTY1LCAxLCAxNDksIDE1NiwgMTY1LCAxLCA3NSwgMTY1LCAxLCAyNDUsIDIwOSwgMTY1LCAxLCAyNTQsIAotICAgIDIwMSwgMTY1LCAxLCA3NiwgMTY1LCAxLCAyMjYsIDE4MywgMTY1LCAxLCAyNTMsIDE5MiwgMTY1LCAxLCAxNzYsIDE2NSwgMSwgCi0gICAgMjM0LCAxMzIsIDE2NSwgMSwgMjQzLCAxMzUsIDE2NSwgMSwgMjQyLCAyNDksIDE2NSwgMSwgMjI5LCA3NywgMTY1LCAxLCAKLSAgICAyNTEsIDMzLCAxNjUsIDEsIDI1MCwgMTU3LCAxNjUsIDEsIDIzNSwgMTQxLCAxNjUsIDEsIDIzNSwgMTE0LCAxNjUsIDEsIAotICAgIDIyNywgMTY1LCAxNjUsIDEsIDIxNSwgMTU2LCAxNjUsIDEsIDIxNSwgMTQ0LCAxNjUsIDEsIDI0OCwgMTM1LCAxNjUsIDEsIAotICAgIDI0OCwgMTE5LCAxNjUsIDEsIDIyOCwgMTEwLCAxNjUsIDEsIDIxNywgMTA1LCAxNjUsIDEsIDIxNiwgMjA4LCAxNjUsIDEsIAotICAgIDI0OCwgMjIxLCAxNjUsIDEsIDI0OCwgMjUsIDE2NSwgMSwgMTk3LCAxNjUsIDEsIDE5MCwgMTY1LCAxLCAyMjUsIDE0NywgCi0gICAgMTY1LCAxLCAyNTIsIDE5MSwgMTY1LCAxLCAyNTIsIDE4LCAxNjUsIDEsIDE4NCwgMTY1LCAxLCAxOTEsIDE2NSwgMSwgMjA1LCAKLSAgICAxNjUsIDEsIDIyMiwgMTc5LCAxNjUsIDEsIDIzMywgMTM1LCAxNjUsIDEsIDIzMiwgMTg0LCAxNjUsIDEsIDIxNCwgMjcsIAotICAgIDE2NSwgMSwgMjIwLCAxMDIsIDE2NSwgMSwgMjE4LCAyMjMsIDE2NSwgMSwgMjA2LCAxNjUsIDEsIDE2MiwgMTY1LCA1LCAKLSAgICAyMjcsIDIwNSwgMTY1LCA1LCAyNTMsIDE3NSwgMTY1LCAyNSwgNSwgMjU1LCA3MywgMTY1LCAyNSwgNSwgNzMsIDE2NSwgMjUsIAotICAgIDUsIDIzNiwgMzMsIDE2NSwgMjUsIDUsIDcwLCAxNjUsIDI1LCA1LCAyMTQsIDExOCwgMTY1LCAyNSwgNSwgMTQ5LCAxNTMsIAotICAgIDE2NSwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE2NSwgMjUsIDUsIDc1LCAxNjUsIDI1LCA1LCAyNDUsIDIwOSwgMTY1LCAyNSwgCi0gICAgNSwgMjU0LCAyMDEsIDE2NSwgMjUsIDUsIDc2LCAxNjUsIDI1LCA1LCAyMjYsIDE4MywgMTY1LCAyNSwgNSwgMjUzLCAxOTIsIAotICAgIDE2NSwgNSwgMjEzLCAxNTIsIDE2NSwgMjMzLCAyMywgNzgsIDE2NSwgMjU0LCAyMDIsIDIzMywgMjMsIDc4LCAxNjUsIDEsIAotICAgIDI0NCwgMTk2LCAxNjUsIDEsIDE0OSwgMjIyLCAxODAsIDE2NSwgMSwgMTQ5LCAyMzIsIDE4NSwgMTY1LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTYsIDE2NSwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE2NSwgMjEsIDIxMCwgODYsIDE2NSwgMjEsIDExMCwgMTY1LCAyMSwgCi0gICAgMTA1LCAxNjUsIDIxLCAxNTgsIDE2NSwgMjEsIDE2MSwgMTY1LCAyMSwgMTg5LCAxNjUsIDIxLCAxOTQsIDE2NSwgMjEsIAotICAgIDE5OCwgMTY1LCAyMSwgMTk1LCAxNjUsIDIxLCAyMDAsIDE2NSwgNSwgMjM1LCAxMDIsIDE2NSwgNSwgMjE0LCAxNjEsIDEzNiwgCi0gICAgNSwgMjU0LCA3NSwgMTM2LCA1LCAyMTMsIDE0NywgMTM2LCAxLCA2MSwgMTM2LCAxLCAyNTUsIDczLCAxMzYsIDEsIDczLCAKLSAgICAxMzYsIDEsIDIzNiwgMzMsIDEzNiwgMSwgNzAsIDEzNiwgMSwgMjE0LCAxMTgsIDEzNiwgMSwgMTQ5LCAxNTMsIDEzNiwgMSwgCi0gICAgMTQ5LCAxNTYsIDEzNiwgMSwgNzUsIDEzNiwgMSwgMjQ1LCAyMDksIDEzNiwgMSwgMjU0LCAyMDEsIDEzNiwgMSwgNzYsIAotICAgIDEzNiwgMSwgMjI2LCAxODMsIDEzNiwgMSwgMjUzLCAxOTIsIDEzNiwgMSwgMTc2LCAxMzYsIDEsIDIzNCwgMTMyLCAxMzYsIAotICAgIDEsIDI0MywgMTM1LCAxMzYsIDEsIDI0MiwgMjQ5LCAxMzYsIDEsIDIyOSwgNzcsIDEzNiwgMSwgMjUxLCAzMywgMTM2LCAxLCAKLSAgICAyNTAsIDE1NywgMTM2LCAxLCAyMzUsIDE0MSwgMTM2LCAxLCAyMzUsIDExNCwgMTM2LCAxLCAyMjcsIDE2NSwgMTM2LCAxLCAKLSAgICAyMTUsIDE1NiwgMTM2LCAxLCAyMTUsIDE0NCwgMTM2LCAxLCAyNDgsIDEzNSwgMTM2LCAxLCAyNDgsIDExOSwgMTM2LCAxLCAKLSAgICAyMjgsIDExMCwgMTM2LCAxLCAyMTcsIDEwNSwgMTM2LCAxLCAyMTYsIDIwOCwgMTM2LCAxLCAyNDgsIDIyMSwgMTM2LCAxLCAKLSAgICAyNDgsIDI1LCAxMzYsIDEsIDE5NywgMTM2LCAxLCAyMjgsIDkyLCAxMzYsIDEsIDE5MCwgMTM2LCAxLCAyMjUsIDE0NywgCi0gICAgMTM2LCAxLCAyNTIsIDE5MSwgMTM2LCAxLCAyNTIsIDE4LCAxMzYsIDEsIDE4NCwgMTM2LCAxLCAxOTEsIDEzNiwgMSwgMjA1LCAKLSAgICAxMzYsIDEsIDIyMiwgMTc5LCAxMzYsIDEsIDIzMywgMTM1LCAxMzYsIDEsIDIzMiwgMTg0LCAxMzYsIDEsIDIzMiwgMTc1LCAKLSAgICAxMzYsIDEsIDIxNCwgMjcsIDEzNiwgMSwgMjIwLCAxMDIsIDEzNiwgMSwgMjE4LCAyMjMsIDEzNiwgMSwgMjA2LCAxMzYsIDEsIAotICAgIDE2MiwgMTM2LCAxLCAyMTUsIDEyNSwgMTM2LCA1LCAyNTMsIDE3NSwgMTM2LCAyNSwgNSwgMjU1LCA3MywgMTM2LCAyNSwgNSwgCi0gICAgNzMsIDEzNiwgMjUsIDUsIDIzNiwgMzMsIDEzNiwgMjUsIDUsIDcwLCAxMzYsIDI1LCA1LCAyMTQsIDExOCwgMTM2LCAyNSwgCi0gICAgNSwgMTQ5LCAxNTMsIDEzNiwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDEzNiwgMjUsIDUsIDc1LCAxMzYsIDI1LCA1LCAyNDUsIAotICAgIDIwOSwgMTM2LCAyNSwgNSwgMjU0LCAyMDEsIDEzNiwgMjUsIDUsIDc2LCAxMzYsIDI1LCA1LCAyMjYsIDE4MywgMTM2LCAyNSwgCi0gICAgNSwgMjUzLCAxOTIsIDEzNiwgNSwgMjEzLCAxNTIsIDEzNiwgMSwgNTksIDIyMywgNzMsIDEzNiwgMjUzLCAxOTMsIDIzMywgCi0gICAgMjMsIDc4LCAxMzYsIDEsIDE0OSwgMjIyLCAxODAsIDEzNiwgMSwgMTQ5LCAyMzIsIDE4NSwgMTM2LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTYsIDEzNiwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDEzNiwgMjEsIDIxMCwgODYsIDEzNiwgMjEsIDExMCwgMTM2LCAyMSwgCi0gICAgMTA1LCAxMzYsIDIxLCAxNTgsIDEzNiwgMjEsIDE2MSwgMTM2LCAyMSwgMTg5LCAxMzYsIDIxLCAxOTQsIDEzNiwgMjEsIAotICAgIDE5OCwgMTM2LCAyMSwgMTk1LCAxMzYsIDIxLCAyMDAsIDEzNiwgNTQsIDIxNiwgMjQ3LCAxMzYsIDU0LCAxMjMsIDI0MCwgCi0gICAgMjEwLCAxMzYsIDU0LCAxMjMsIDIxNiwgMTQ3LCAxMzYsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAxMzYsIDI0NCwgMiwgMTIzLCAKLSAgICAyNDIsIDI3LCAxMzYsIDI0NCwgMiwgMTM0LCAyMjQsIDE5LCAxMzYsIDI0OCwgMTUwLCA3OCwgMTM2LCAxLCAyNTAsIDk5LCAKLSAgICAyMjgsIDExMSwgMTM2LCAxLCAyNTAsIDk5LCAyMzAsIDI1LCAxMzYsIDEsIDI1MCwgOTksIDIyMiwgMTgwLCAxMzYsIDEsIAotICAgIDI1MCwgOTksIDE1NiwgMTM2LCAxLCAyNTAsIDk5LCAyMzIsIDE4NSwgMTM2LCAxLCAyNTAsIDk5LCAyMzUsIDIzLCAxNzUsIAotICAgIDUsIDI1NCwgNzQsIDE3NSwgNSwgMjEzLCAxNDYsIDE3NSwgMSwgMjUzLCAxNjUsIDE3NSwgMSwgMjU1LCAyNywgMTc1LCAxLCAKLSAgICAyNTQsIDIyMywgMTc1LCAxLCAyNTQsIDIzOCwgMTc1LCAxLCAyMzUsIDE1MSwgMTc1LCAxLCAyMzYsIDMyLCAxNzUsIDEsIAotICAgIDIxNCwgMTEwLCAxNzUsIDEsIDIxNCwgMTEyLCAxNzUsIDEsIDIzNSwgMTczLCAxNzUsIDEsIDIzNSwgMTc0LCAxNzUsIDEsIAotICAgIDIzNiwgMTgsIDE3NSwgMSwgMjM2LCAyMCwgMTc1LCAxLCAyNDUsIDE3LCAxNzUsIDEsIDI0NSwgMjA0LCAxNzUsIDEsIDI1NCwgCi0gICAgMTg4LCAxNzUsIDEsIDIyNiwgMTA4LCAxNzUsIDEsIDIyNiwgMTc3LCAxNzUsIDEsIDI1MywgMTc4LCAxNzUsIDEsIDI1NCwgCi0gICAgMTQ2LCAyMzQsIDE4NywgMTc1LCAxLCAyMzEsIDIwOSwgMjM0LCAxODcsIDE3NSwgMSwgMjU0LCAxNDYsIDI0MywgODIsIAotICAgIDE3NSwgMSwgMjMxLCAyMDksIDI0MywgODIsIDE3NSwgMSwgMjM0LCAyMjksIDIyOSwgMjIyLCAxNzUsIDEsIDIyMSwgMjM2LCAKLSAgICAyNDMsIDgyLCAxNzUsIDEsIDI1NCwgMTQ2LCAyNTAsIDIxNiwgMTc1LCAxLCAyMzEsIDIwOSwgMjUwLCAyMTYsIDE3NSwgMSwgCi0gICAgMjU0LCAxNDYsIDIzNSwgMTI3LCAxNzUsIDEsIDIzMSwgMjA5LCAyMzUsIDEyNywgMTc1LCAxLCAyMTcsIDk4LCAyMjksIAotICAgIDIyMiwgMTc1LCAxLCAyMTcsIDk4LCAyMjEsIDIzNSwgMjI5LCAyMjMsIDE3NSwgMSwgMjIxLCAyMzYsIDIzNSwgMTI3LCAKLSAgICAxNzUsIDEsIDI1NCwgMTQ2LCAyMTUsIDE1MiwgMTc1LCAxLCAyMzEsIDIwOSwgMjE1LCAxNTIsIDE3NSwgMSwgMjU0LCAxNDYsIAotICAgIDI0OCwgMTI2LCAxNzUsIDEsIDIzMSwgMjA5LCAyNDgsIDEyNiwgMTc1LCAxLCAyMzAsIDUzLCAyMjksIDE4MCwgMTc1LCAxLCAKLSAgICAyMjEsIDIzNiwgMjQ4LCAxMjYsIDE3NSwgMSwgMjU0LCAxNDYsIDIxNywgMzAsIDE3NSwgMSwgMjMxLCAyMDksIDIxNywgMzAsIAotICAgIDE3NSwgMSwgMjU0LCAxNDYsIDI0OCwgMTQ0LCAxNzUsIDEsIDIzMSwgMjA5LCAyNDgsIDE0NCwgMTc1LCAxLCAyNDgsIDE3NCwgCi0gICAgMjI5LCAxODAsIDE3NSwgMSwgMjIxLCAyMzYsIDI0OCwgMTQ0LCAxNzUsIDEsIDI1NCwgMTQ2LCAyMjUsIDIyOCwgMTc1LCAxLCAKLSAgICAyMzEsIDIwOSwgMjI1LCAyMjgsIDE3NSwgMSwgMjU0LCAxNDYsIDI1MiwgMTEyLCAxNzUsIDEsIDIzMSwgMjA5LCAyNTIsIAotICAgIDExMiwgMTc1LCAxLCAyMzEsIDEzMSwgMTc1LCAxLCAyNTQsIDEzMSwgMjUyLCAxMTIsIDE3NSwgMSwgMjExLCA1MSwgMTc1LCAKLSAgICAxLCAyMjMsIDEzMywgMTc1LCAxLCAyNDgsIDE3NCwgMjMzLCA2NywgMTc1LCAxLCAyMTQsIDEsIDE3NSwgMSwgMjE3LCA5OCwgCi0gICAgMjIxLCAyMTAsIDE3NSwgMSwgMjMwLCA1MywgMjIxLCAyMTAsIDE3NSwgMSwgMjQ4LCAxNzQsIDIyMSwgMjEwLCAxNzUsIDEsIAotICAgIDI0MSwgMjQyLCAxNzUsIDEsIDIzMCwgNTMsIDIzMywgNjcsIDE3NSwgMSwgMjQ0LCAxNTYsIDE3NSwgNSwgMjU0LCAxNzcsIAotICAgIDE3NSwgMjUsIDUsIDI1NCwgMjMzLCAxNzUsIDI1LCA1LCAyMzQsIDE1NSwgMjU0LCAyNDAsIDE3NSwgMjUsIDUsIDI0NywgCi0gICAgMjI4LCAyNTQsIDI0MCwgMTc1LCAyNSwgNSwgMjM0LCAxNTUsIDIzNSwgMTcwLCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjM1LCAKLSAgICAxNzAsIDE3NSwgMjUsIDUsIDIzNCwgMTU1LCAyMjYsIDg4LCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjI2LCA4OCwgMTc1LCAKLSAgICAyNSwgNSwgMjQzLCAxMjQsIDE3NSwgMjUsIDUsIDIzNCwgMTUsIDE3NSwgMjUsIDUsIDI0NywgMjI4LCAyMzQsIDE1LCAxNzUsIAotICAgIDI1LCA1LCAyMzQsIDE3LCAyNDgsIDY3LCAxNzUsIDI1LCA1LCAyMzQsIDE2LCAyNDIsIDQ3LCAyNTQsIDIzMywgMTc1LCAyNSwgCi0gICAgNSwgMjM0LCAxNiwgMjQyLCA0NywgMjQ3LCAyMjgsIDI1NCwgMjMzLCAxNzUsIDI1LCA1LCAyMzQsIDE2LCAyNDIsIDQ3LCAKLSAgICAyNDMsIDgxLCAxNzUsIDI1LCA1LCAyNDMsIDgxLCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjQzLCAxMjQsIDE3NSwgMjUsIDUsIAotICAgIDI0NywgMjI4LCAyNDMsIDgxLCAxNzUsIDIyNCwgMTQxLCAyMzMsIDIwNywgMTY4LCAxMzUsIDIzNCwgMjksIDIzNCwgMjQ2LCAKLSAgICAxNjgsIDEzNSwgMjM0LCAxMDYsIDIzNCwgMTI4LCAxNjgsIDEzNSwgMjM0LCAxMDYsIDIzNCwgOTksIDE2OCwgMTM1LCAyMzQsIAotICAgIDEwNiwgMjM0LCA5NSwgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMzQsIDEwMywgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMjMsIDE1NCwgCi0gICAgMTY4LCAxMzUsIDIyOSwgNSwgMjI4LCAyNDgsIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDE0NywgMTY4LCAxMzUsIDI1MCwgCi0gICAgODcsIDI1MCwgOTUsIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDE0NiwgMTY4LCAxMzUsIDIxOSwgNTksIDIxOSwgNTgsIAotICAgIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDgzLCAxNjgsIDEzNSwgMjEwLCAyNDUsIDIxMCwgMjUyLCAxNjgsIDEzNSwgMjQ3LCAKLSAgICAxNDYsIDI1MCwgMTU0LCAxNjgsIDEzNSwgMjE2LCA0MiwgMjI1LCAyMzgsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjE2LCAyMDAsIAotICAgIDE2OCwgMTM1LCAyMTYsIDE1NywgMjI5LCAyMDEsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjI1LCAxMTEsIDE2OCwgMTM1LCAKLSAgICAyMjgsIDc1LCAyMjksIDk4LCAxNjgsIDEzNSwgMjQ3LCAxNDYsIDI0OCwgNjgsIDE2OCwgMTM1LCAyMTYsIDQyLCAyMTcsIAotICAgIDU1LCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIxNiwgMTMxLCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIxNiwgMjA0LCAxNjgsIDEzNSwgCi0gICAgMjE2LCAxNTcsIDIxNiwgMTU0LCAxNjgsIDEzNSwgMjI4LCA3NSwgMjI3LCAyMzcsIDE2OCwgMTM1LCAyNTEsIDIwNiwgMjUyLCAKLSAgICAxNjQsIDE2OCwgMTM1LCAyMjUsIDE3LCAyMjUsIDQyLCAxNjgsIDEzNSwgMjI1LCAxMjIsIDIyNSwgMTEzLCAxNjgsIDEzNSwgCi0gICAgMjQ0LCA0NCwgMjQ0LCAxOTYsIDE2OCwgMTM1LCAyMjUsIDEyMiwgMjI1LCAxNDEsIDE2OCwgMTM1LCAyNDQsIDQ0LCAyNDQsIAotICAgIDE3MywgMTY4LCAxMzUsIDIyNSwgMTIyLCAyMjEsIDI0NywgMTY4LCAxMzUsIDIzMCwgMTYyLCAxODQsIDE2OCwgMTM1LCAKLSAgICAyMTAsIDI0NSwgMjExLCA3OSwgMTY4LCAxMzUsIDIyMiwgMjEyLCAyMjIsIDEzOSwgMTY4LCAxMzUsIDIyMiwgMTQwLCAxNjgsIAotICAgIDEzNSwgMjMyLCAxNTcsIDIzMiwgMjA2LCAxNjgsIDEzNSwgMjMyLCA5OCwgMTY4LCAxMzUsIDIxMSwgMjI4LCAyMTIsIDYxLCAKLSAgICAxNjgsIDEzNSwgMjE5LCA1OSwgMjIyLCA2LCAxNjgsIDEzNSwgMjE5LCA1OSwgMjIyLCAxMTQsIDE2OCwgMTM1LCAyMTksIAotICAgIDU5LCAyMTgsIDgyLCAxNjgsIDEzNSwgMjQxLCA2OSwgMjQxLCAxNTksIDE2OCwgMTM1LCAyMzIsIDE1NywgMjUwLCA2OCwgCi0gICAgMTY4LCAxMzUsIDE0NCwgMjU0LCAxMTUsIDE2OCwgMTM1LCAyNDEsIDY5LCAyMjgsIDcwLCAxNjgsIDEzNSwgMjI2LCA2OCwgCi0gICAgMTY4LCAxMzUsIDIyMSwgMjMwLCA2MSwgMTY4LCAxMzUsIDIzMSwgMjA0LCAyNDIsIDE3LCAxNjgsIDEzNSwgMjIxLCAyMzAsIAotICAgIDI1NSwgNzMsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjU0LCAxMzYsIDE2OCwgMTM1LCAyMjEsIDIzMCwgNzMsIDE2OCwgMTM1LCAKLSAgICAyMjEsIDIzMCwgMjM2LCAzMywgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIDIxNCwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIAotICAgIDIxMiwgMTY4LCAxMzUsIDIyMSwgMjMwLCA3MCwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIDExOCwgMTY4LCAxMzUsIDIyNSwgCi0gICAgMTI0LCAxNjgsIDI0OSwgOTgsIDE2LCAyNTIsIDE2NSwgMTY4LCAxMzUsIDIyMSwgMjMwLCA3NSwgMTY4LCAxMzUsIDIyMSwgCi0gICAgMjMwLCAyNTQsIDI0MywgMTY4LCAxMzUsIDIyMSwgMjMwLCA3NiwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyNTQsIDIwMiwgMjMxLCAKLSAgICAxOTgsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjU0LCAyMDIsIDIzMSwgMTk5LCAxNjgsIDEzNSwgMjMzLCAxMDYsIDE2OCwgCi0gICAgMTM1LCAyMzEsIDE5NSwgMTY4LCAxMzUsIDIzMSwgMTk2LCAxNjgsIDEzNSwgMjMxLCAyMDQsIDI0NSwgMTgwLCAxNjgsIAotICAgIDEzNSwgMjMxLCAyMDQsIDIxNiwgMTU2LCAxNjgsIDEzNSwgMjMxLCAyMDQsIDIxNSwgMjI4LCAxNjgsIDEzNSwgMjMxLCAKLSAgICAyMDQsIDI1MCwgMTM1LCAxNjgsIDEzNSwgMjE2LCAxOTgsIDE2OCwgMTM1LCAyMjgsIDIwNSwgMTY4LCAxMzUsIDIxMSwgNzMsIAotICAgIDE2OCwgMTM1LCAyNDQsIDM1LCAxNjgsIDIxLCAyMTAsIDg2LCAxNjgsIDIxLCAxMTAsIDE2OCwgMjEsIDEwNSwgMTY4LCAyMSwgCi0gICAgMTU4LCAxNjgsIDIxLCAxNjEsIDE2OCwgMjEsIDE4OSwgMTY4LCAyMSwgMTk0LCAxNjgsIDIxLCAxOTgsIDE2OCwgMjEsIAotICAgIDE5NSwgMTY4LCAyMSwgMjAwLCAxNjgsIDEzNSwgMjU0LCAxMTEsIDE2OCwgMTM1LCAyMzQsIDEwNCwgMjA5LCAyMDksIDEsIAotICAgIDIzNCwgMjgsIDIwOSwgMjA5LCAxLCAyMzQsIDEwNiwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDIzNCwgMTA2LCAyMTcsIDYyLCAKLSAgICAyMDksIDIwOSwgMSwgMjI5LCA0LCAyMDksIDIwOSwgMSwgMjQ5LCAyMzgsIDIwOSwgMjA5LCAxLCAyMTksIDU5LCAyMTcsIAotICAgIDYyLCAyMDksIDIwOSwgMSwgMjI3LCAxMzQsIDIwOSwgMjA5LCAxLCAyNDcsIDE0NSwgMjA5LCAyMDksIDEsIDExMSwgMjA5LCAKLSAgICAyMDksIDEsIDIxNiwgMTU3LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjE2LCAxNTcsIDIxNywgNjIsIDIwOSwgMjA5LCAxLCAKLSAgICAyMjgsIDc0LCAyMDksIDIwOSwgMSwgMjUxLCAyMDUsIDIwOSwgMjA5LCAxLCAyMjUsIDE2LCAyMDksIDIwOSwgMSwgMjI1LCAKLSAgICAxMjIsIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAyMTcsIDYyLCAyMDksIDIwOSwgMSwgMjI1LCAxMjIsIDIxNywgCi0gICAgNjIsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjMwLCAxNjEsIDIwOSwgMjA5LCAxLCAKLSAgICAyMTAsIDI0NCwgMjA5LCAyMDksIDEsIDIzMiwgMTU3LCAyMzIsIDIwNiwgMjA5LCAyMDksIDEsIDIzMiwgMTU3LCAyMzIsIAotICAgIDEyMSwgMjA5LCAyMDksIDEsIDIxMSwgMjI3LCAyMDksIDIwOSwgMSwgMjE5LCA1OSwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIAotICAgIDI0MSwgNjksIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCA3NiwgMjA5LCAyMDksIDEsIDI0MSwgNjksIDIxNywgNjIsIDIwOSwgCi0gICAgMjA5LCAyNDUsIDE2MywgMjA5LCAyMDksIDI1LCA1LCA2MSwgMjA5LCAyMDksIDI1LCA1LCAyMzEsIDIwNCwgMjM0LCAyMzQsIAotICAgIDIwOSwgMjA5LCAyNSwgNSwgMjU1LCA3MywgMjA5LCAyMDksIDI1LCA1LCAyNTQsIDEzNiwgMjA5LCAyMDksIDI1LCA1LCA3MywgCi0gICAgMjA5LCAyMDksIDI1LCA1LCAyMzYsIDMzLCAyMDksIDIwOSwgMjUsIDUsIDIxMSwgMTE3LCAyMDksIDIwOSwgMjUsIDUsIAotICAgIDIxMCwgMTY5LCAyMDksIDIwOSwgMjUsIDUsIDcwLCAyMDksIDIwOSwgMjUsIDUsIDIxNCwgMTE4LCAyMDksIDIwOSwgMjUsIAotICAgIDUsIDIzMSwgMjA0LCAyMzQsIDEzLCAyMDksIDIwOSwgMjIwLCAxNDUsIDUsIDIzMiwgMTU2LCAyMDksIDIwOSwgMjIwLCAKLSAgICAxNDUsIDUsIDIyNywgMTM0LCAyMDksIDIwOSwgMjUsIDUsIDc1LCAyMDksIDIwOSwgMjUsIDUsIDI0NSwgMTk1LCAyMDksIAotICAgIDIwOSwgMjUsIDUsIDc2LCAyMDksIDIwOSwgMjUsIDUsIDI1MywgMTY3LCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMjAxLCAKLSAgICAyMDksIDIwOSwgMjM0LCAyOSwgMjMzLCAxMzUsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA0LCAyNDUsIDE4MCwgMjA5LCAyMDksIAotICAgIDEzOCwgMjMxLCAyMDQsIDIxNiwgMTU2LCAyMDksIDIwOSwgMTM4LCAyMzEsIDIwNCwgMjE2LCAxMTcsIDIwOSwgMjA5LCAKLSAgICAxMzgsIDIzMSwgMjA0LCAyNTAsIDIyMywgMjA5LCAyMDksIDI1MSwgNCwgNzgsIDIwOSwgMjA5LCAyMjgsIDIxNCwgMjA5LCAKLSAgICAyMDksIDIxLCAyMTAsIDg2LCAyMDksIDIwOSwgMjEsIDExMCwgMjA5LCAyMDksIDIxLCAxMDUsIDIwOSwgMjA5LCAyMSwgCi0gICAgMTU4LCAyMDksIDIwOSwgMjEsIDE2MSwgMjA5LCAyMDksIDIxLCAxODksIDIwOSwgMjA5LCAyMSwgMTk0LCAyMDksIDIwOSwgCi0gICAgMjEsIDE5OCwgMjA5LCAyMDksIDIxLCAxOTUsIDIwOSwgMjA5LCAyMSwgMjAwLCAyMDksIDIwOSwgMjQxLCA2OSwgMjI4LCAKLSAgICA3NCwgMjA5LCAyMDksIDI0MSwgNjksIDIzMCwgMTYxLCAyMDksIDIwOSwgMSwgMjM0LCAxMDcsIDI0MiwgMTc0LCAyMDksIAotICAgIDIwOSwgMSwgMjM0LCAxMDcsIDIyNywgMTM0LCA2MywgMywgMjI2LCAyMDQsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTEsIDAsIAotICAgIDIzMCwgMjQ4LCAyMTUsIDE4OSwgNjEsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTEsIDAsIDIzMCwgMjQ4LCAyNTUsIDE1OSwgCi0gICAgMjIyLCAyMTYsIDI1MiwgNzcsIDE4NCwgNjMsIDE2NCwgMjQyLCAxMTUsIDIxMSwgMCwgMjMwLCAyNDgsIDI1NSwgMTU5LCAKLSAgICAyNDIsIDExNSwgMjE1LCAxNzMsIDE4NCwgNjMsIDE2NCwgNjUsIDIxMSwgMCwgMjMwLCAyNDgsIDIzMSwgOTMsIDE4NCwgNjMsIAotICAgIDE2NCwgMjQ5LCAyNTIsIDIxMSwgMCwgMjMwLCAyNDgsIDIyMCwgMTA5LCAxODQsIDYzLCAxNjQsIDI1MCwgMjM5LCAyMTEsIAotICAgIDAsIDIzMCwgMjQ4LCAyMjUsIDExMiwgMjIwLCA5NiwgMTg0LCA2MywgMTY0LCAyMTEsIDAsIDIzMCwgMjQ4LCAyMTUsIDE3MywgCi0gICAgMjIwLCA5NiwgMTg0LCA2MywgMTY0LCAyMjEsIDIwOCwgMjIwLCA5NSwgNjMsIDE2NCwgMjUxLCAxMjgsIDIxMSwgMCwgMjMwLCAKLSAgICAyNDcsIDYzLCAxNjQsIDI1MSwgMjIzLCAyMjAsIDMsIDIxMSwgMCwgMjMwLCAyNDcsIDYzLCAxNjQsIDIzNSwgMTk3LCAyMTUsIAotICAgIDE3MiwgNjMsIDE2NCwgMjQ4LCA2MSwgMjE1LCAxNzMsIDI1MSwgMTI3LCA2MywgMTY0LCAyMjAsIDk1LCA2MywgMTY0LCAKLSAgICAyMjcsIDEzOSwgMjIwLCA5NSwgNjMsIDE2NCwgMjE1LCAxNzMsIDIyMCwgOTUsIDYzLCAxNjQsIDIyNywgMTM5LCAyMTUsIAotICAgIDE3MywgMjIwLCA5NSwgNjMsIDE2NCwgMjIyLCAyMzYsIDI1MCwgMTIyLCAyMTgsIDIzNiwgMjIwLCA5NSwgNjMsIDE2NCwgCi0gICAgMjIzLCA0MiwgMjQyLCAxNDYsIDIyMCwgOTUsIDYzLCAxNjQsIDI1MCwgMjM5LCAyNTUsIDE2MywgMjIyLCAxNDQsIDIzMSwgCi0gICAgOTIsIDE5OSwgMjUxLCA3LCA2MywgMTY0LCAyNDIsIDExNSwgMjE1LCAxNzIsIDYzLCAyMzIsIDE0NCwgNSwgMjUwLCAxNTUsIAotICAgIDIyMiwgMTQzLCA2MywgMjMyLCAxNDQsIDUsIDIzMiwgMjUyLCAyMjIsIDE0MywgNjMsIDI1MywgMjEyLCA1LCAyMjAsIDEwNSwgCi0gICAgMjQzLCA2NSwgMjU1LCAxNjQsIDIyMiwgMTQzLCA2MywgMjUzLCAyMTIsIDUsIDI1NSwgMTYxLCAxOTAsIDYzLCAyNTMsIAotICAgIDIxMiwgNSwgMjIxLCAxODIsIDIxNSwgMTY4LCA2MywgNSwgMjIzLCAxMzAsIDI0NywgMTU5LCAyNDMsIDY0LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDI0NywgMTU5LCAyNDIsIDE3NiwgNjMsIDUsIDIyMywgMTMwLCAyNDcsIDE1OSwgMjQyLCAxMTYsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MywgNjQsIDYzLCA1LCAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MiwgMTc2LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDI0NywgMTU5LCAyMjMsIDEzMCwgMjI5LCAyMTgsIDYzLCAyMSwgMjEwLCA4NiwgNjMsIDIxLCAxMTAsIDYzLCAKLSAgICAyMSwgMTA1LCA2MywgMjEsIDE1OCwgNjMsIDIxLCAxNjEsIDYzLCAyMSwgMTg5LCA2MywgMjEsIDE5NCwgNjMsIDIxLCAxOTgsIAotICAgIDYzLCAyMSwgMTk1LCA2MywgMjEsIDIwMCwgNjMsIDIxLCAxNjMsIDExMCwgNjMsIDIxLCAxNjMsIDEwNSwgNjMsIDIxLCAKLSAgICAxNjMsIDE1OCwgNjMsIDIxLCAxNjMsIDE2MSwgNjMsIDIxLCAxNjMsIDE4OSwgNjMsIDIxLCAxNjMsIDE5NCwgNjMsIDIxLCAKLSAgICAxNjMsIDE5OCwgNjMsIDIxLCAxNjMsIDE5NSwgNjMsIDIxLCAxNjMsIDIwMCwgNjMsIDIxLCAxNjMsIDIxMCwgODYsIDYzLCAKLSAgICAxNjQsIDI1MSwgMTMwLCAyMjIsIDE0MywgNjMsIDE2NCwgMjI5LCA2OCwgMjUxLCA2OCwgMjI3LCAxNDksIDIxMCwgMjUsIAotICAgIDYzLCAxNjQsIDI1MCwgMjM5LCAyNTUsIDE2MywgMjIyLCAxNDQsIDI1MSwgNjksIDIzMCwgMjAyLCAyNTEsIDcsIDYzLCAKLSAgICAxNjQsIDIyOSwgNjgsIDI1MSwgNjgsIDIyMCwgMTA2LCAyMjIsIDE0MywgNjMsIDE2NCwgMjUwLCAxMzIsIDIzMCwgMjQ3LCAKLSAgICA2MywgMTY0LCAyMTUsIDE4NCwgMjU1LCAxNjAsIDYzLCAxNjQsIDI0MiwgMTAwLCAyMjIsIDE0NCwgMjQyLCA2MywgNjMsIAotICAgIDE2NCwgMjQyLCAxMDAsIDIyMiwgMTQ0LCAyNDIsIDY5LCA2MywgMTY0LCAyNTQsIDExNiwgMjM0LCAxMjMsIDI0MiwgNjMsIAotICAgIDYzLCAxNjQsIDI1NCwgMTE2LCAyMzQsIDEyMywgMjQyLCA2OSwgNjMsIDUsIDIxMSwgNjUsIDIxNSwgMTcxLCA2MywgNSwgCi0gICAgMjMxLCAxNjcsIDIxNSwgMTcxLCA2MywgMSwgMTc2LCA2MywgMSwgMjM0LCAxMzIsIDYzLCAxLCAyNDMsIDEzNSwgNjMsIDEsIAotICAgIDI0MiwgMjQ5LCA2MywgMSwgMjI5LCA3NywgNjMsIDEsIDI1MSwgMzMsIDYzLCAxLCAyNTAsIDE1NywgNjMsIDEsIDIzNSwgCi0gICAgMTQxLCA2MywgMSwgMjI3LCAxNjUsIDYzLCAxLCAyMTUsIDE1NiwgNjMsIDEsIDIxNSwgMTQ0LCA2MywgMSwgMjQ4LCAxMzUsIAotICAgIDYzLCAxLCAyNDgsIDExOSwgNjMsIDEsIDIyOCwgMTEwLCA2MywgMSwgMjE3LCAxMDUsIDYzLCAxLCAyMTYsIDIwOCwgNjMsIAotICAgIDEsIDI0OCwgMjIxLCA2MywgMSwgMjQ4LCAyNSwgNjMsIDEsIDE5NywgNjMsIDEsIDE5MCwgNjMsIDEsIDIyNSwgMTQ3LCA2MywgCi0gICAgMSwgMjUyLCAxOTEsIDYzLCAxLCAyNTIsIDE4LCA2MywgMSwgMTg0LCA2MywgMSwgMjE1LCAxODMsIDYzLCAxLCAyMTUsIAotICAgIDE3NSwgNjMsIDEsIDI0NiwgMzgsIDYzLCAxLCAyNDYsIDMzLCA2MywgMSwgMjEyLCA2NSwgNjMsIDEsIDIxMCwgODIsIDYzLCAKLSAgICAxLCAyMTAsIDExNiwgNjMsIDEsIDI1NSwgMTY2LCA2MywgMSwgMTkxLCA2MywgMSwgMjA1LCA2MywgMSwgMjMzLCAxMzUsIAotICAgIDYzLCAxLCAyMjAsIDEwMiwgNjMsIDEsIDIxOCwgMjIzLCA2MywgMSwgMjA2LCA2MywgMSwgMTYyLCA2MywgMSwgNjEsIDYzLCAKLSAgICAxLCAyMzMsIDIzMSwgNjMsIDEsIDI0NCwgNzcsIDIwNSwgNjMsIDEsIDIzNCwgNDYsIDYzLCAxLCAyMjIsIDE3OSwgNjMsIAotICAgIDI1LCA1LCAyNTUsIDczLCA2MywgMjUsIDUsIDczLCA2MywgMjUsIDUsIDIzNiwgMzMsIDYzLCAyNSwgNSwgNzAsIDYzLCAyNSwgCi0gICAgNSwgMjE0LCAxMTgsIDYzLCAyNSwgNSwgMTQ5LCAxNTMsIDYzLCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgNjMsIDI1LCA1LCAKLSAgICAxNDksIDE1NiwgNjMsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCA2MywgMjUsIDUsIDc1LCA2MywgMjUsIDUsIDI0NSwgMjA5LCAKLSAgICA2MywgMjUsIDUsIDc2LCA2MywgMjUsIDUsIDIyNiwgMTgzLCA2MywgNSwgMjIyLCAyMjEsIDIxOCwgODQsIDIyOSwgNzgsIAotICAgIDIyMiwgMjExLCA2MywgNSwgMjIyLCAyMTYsIDI1MiwgNzYsIDYzLCAyNSwgNSwgMjIzLCA0OSwgNzMsIDYzLCAyNSwgNSwgCi0gICAgMjIzLCA0OSwgMjM2LCAzMywgNjMsIDUsIDIyNywgMTQ5LCAyMTAsIDI2LCAyMjksIDIyNiwgMjQ4LCAyMjEsIDYzLCA1LCAKLSAgICAyMTksIDcxLCAyMzMsIDYwLCA2MywgMTY0LCAyNDIsIDI5LCA2MywgMTY0LCAyMjYsIDU3LCA2MywgNSwgMjMzLCA2MywgCi0gICAgMjIyLCAxNDMsIDYzLCA1LCAyMTEsIDcwLCAyMjIsIDE0MywgNjMsIDUsIDIzMywgNjQsIDIxNSwgMTg0LCAyNTEsIDcsIDYzLCAKLSAgICA1LCAyMzEsIDk1LCAyNTEsIDcsIDYzLCA1LCAyNDIsIDExOSwgMjUxLCA4LCAyMjMsIDQwLCA2MywgNSwgMjQyLCAxMTksIAotICAgIDIzMSwgODUsIDIyMywgNDAsIDYzLCA1LCAyMzUsIDE5MywgMjMxLCA5NSwgMjUxLCA3LCA2MywgMjE4LCA3MywgNSwgMjMzLCAKLSAgICA2NCwgMjE1LCAxODQsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDUsIDIzMSwgOTUsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDUsIAotICAgIDIzNSwgMTkzLCAyMzEsIDk1LCAyNTEsIDcsIDYzLCAyMTgsIDczLCAxLCAxNzYsIDYzLCAyMTgsIDczLCAxLCAyMzQsIDEzMiwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDI0MywgMTM1LCA2MywgMjE4LCA3MywgMSwgMjQyLCAyNDksIDYzLCAyMTgsIDczLCAxLCAyMjksIAotICAgIDc3LCA2MywgMjE4LCA3MywgMSwgMjUxLCAzMywgNjMsIDIxOCwgNzMsIDEsIDI1MCwgMTU3LCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjM1LCAxNDEsIDYzLCAyMTgsIDczLCAxLCAyMjcsIDE2NSwgNjMsIDIxOCwgNzMsIDEsIDIxNSwgMTU2LCA2MywgMjE4LCAKLSAgICA3MywgMSwgMjE1LCAxNDQsIDYzLCAyMTgsIDczLCAxLCAyNDgsIDEzNSwgNjMsIDIxOCwgNzMsIDEsIDI0OCwgMTE5LCA2MywgCi0gICAgMjE4LCA3MywgMSwgMjI4LCAxMTAsIDYzLCAyMTgsIDczLCAxLCAyMTcsIDEwNSwgNjMsIDIxOCwgNzMsIDEsIDIxNiwgMjA4LCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjQ4LCAyMjEsIDYzLCAyMTgsIDczLCAxLCAyNDgsIDI1LCA2MywgMjE4LCA3MywgMSwgMTk3LCAKLSAgICA2MywgMjE4LCA3MywgMSwgMTkwLCA2MywgMjE4LCA3MywgMSwgMjI1LCAxNDcsIDYzLCAyMTgsIDczLCAxLCAyNTIsIDE5MSwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDI1MiwgMTgsIDYzLCAyMTgsIDczLCAxLCAxODQsIDYzLCAyMTgsIDczLCAxLCAyMTUsIDE4MywgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDIxNSwgMTc1LCA2MywgMjE4LCA3MywgMSwgMjQ2LCAzOCwgNjMsIDIxOCwgNzMsIDEsIDI0NiwgCi0gICAgMzMsIDYzLCAyMTgsIDczLCAxLCAyMTIsIDY1LCA2MywgMjE4LCA3MywgMSwgMjEwLCA4MiwgNjMsIDIxOCwgNzMsIDEsIAotICAgIDIxMCwgMTE2LCA2MywgMjE4LCA3MywgMSwgMjU1LCAxNjYsIDYzLCAyMTgsIDczLCAxLCAxOTEsIDYzLCAyMTgsIDczLCAxLCAKLSAgICAyMDUsIDYzLCAyMTgsIDczLCAxLCAyMzMsIDEzNSwgNjMsIDIxOCwgNzMsIDEsIDIyMCwgMTAyLCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjE4LCAyMjMsIDYzLCAyMTgsIDczLCAxLCAyMDYsIDYzLCAyMTgsIDczLCAxLCAxNjIsIDYzLCAyMTgsIDczLCAxLCA2MSwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDIzMywgMjMxLCA2MywgMjE4LCA3MywgMSwgMjQ0LCA3NywgMjEyLCA2NSwgNjMsIDIxOCwgNzMsIAotICAgIDEsIDI0NCwgNzcsIDE5MSwgNjMsIDIxOCwgNzMsIDEsIDI0NCwgNzcsIDIwNSwgNjMsIDIzMywgMjE4LCAyMjIsIDE0MSwgCi0gICAgMjM0LCAxMzIsIDYzLCAyMzMsIDIxOCwgMjIyLCAxNDEsIDIzNCwgMTMzLCAyNTEsIDY5LCAyMzAsIDIwMiwgMjUxLCA3LCAKLSAgICA2MywgMjUwLCAyNTIsIDUsIDExNCwgMjUyLCA3MCwgNjMsIDI1MCwgMjUyLCA1LCAxOTIsIDI1MiwgNzAsIDYzLCAyNTAsIAotICAgIDI1MiwgNSwgMjUwLCAyNTMsIDIxNywgMjAsIDYzLCAyNTAsIDI1MiwgNSwgMjIxLCAyMDcsIDI1NSwgMTY1LCA2MywgMTYsIAotICAgIDI0NiwgOTEsIDI1MSwgMTI1LCA2MywgMTYsIDIyMywgMTI5LCAyMjIsIDIyMiwgNjMsIDE2LCAyMjYsIDc3LCAyNDMsIDYzLCAKLSAgICA2MywgMTYsIDIyMywgMTI5LCAyMjIsIDIyMywgMjIzLCA0MiwgMjQyLCAxNDUsIDYzLCAxNiwgMjI1LCAxMTIsIDE5MCwgNjMsIAotICAgIDE2LCAyMjgsIDU5LCAyNTEsIDEyNSwgNjMsIDE2LCAyMjgsIDU5LCAyNTEsIDEyNiwgMjI3LCAxMzksIDI1NSwgMTYyLCA2MywgCi0gICAgMTYsIDIyOCwgNTksIDI1MSwgMTI2LCAyNDIsIDExNywgMjU1LCAxNjIsIDYzLCAxNiwgMjI4LCA1OSwgMjUxLCAxMjYsIAotICAgIDI1MSwgNjksIDI1NSwgMTYyLCA2MywgNSwgMjIzLCAxMzAsIDIyOSwgMjE5LCAyMjMsIDEzMCwgMjQ3LCAxNTgsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MiwgMTE2LCA2MywgMTY0LCAyNTEsIDEyOSwgMjIwLCAzLCAyNDIsIDIxNSwgMjMwLCAKLSAgICAyNDgsIDIyMywgNDEsIDYzLCAxNjQsIDIzMCwgMTYzLCAyMTEsIDAsIDI0MiwgMjE1LCAyMzAsIDI0OCwgMjIzLCA0MSwgNjMsIAotICAgIDE2NCwgMjI3LCAxMzksIDIxNSwgMTcyLCA2MywgMTY0LCA2NSwgMjUxLCAxNTIsIDIyMiwgMjEzLCAyMTEsIDAsIDIzMCwgCi0gICAgMjQ4LCAyMzEsIDkzLCAxODQsIDYzLCAxNjQsIDI0OSwgMjUyLCAyNTEsIDE1MiwgMjIyLCAyMTMsIDIxMSwgMCwgMjMwLCAKLSAgICAyNDgsIDIyMCwgMTA5LCAxODQsIDIyMiwgMjUwLCAyMTcsIDI1NSwgNTAsIDIzMywgNDUsIDIxNywgMjU1LCA1MCwgMjIyLCAKLSAgICAyNTAsIDIxNywgMjU1LCA1LCAyLCAyNDcsIDExOCwgMjMzLCA0NSwgMjE3LCAyNTUsIDUsIDIsIDI0NywgMTE4LCA2MywgCi0gICAgMTY0LCAyMzMsIDU1LCAyMzEsIDk2LCAyMjIsIDE0MywgNjMsIDE2NCwgMjE1LCAyNTAsIDIzMSwgOTYsIDIyMiwgMTQzLCAKLSAgICA2OCwgMSwgMTc2LCA2OCwgMSwgMjM0LCAxMzIsIDY4LCAxLCAyNDMsIDEzNSwgNjgsIDEsIDI0MiwgMjQ5LCA2OCwgMSwgCi0gICAgMjI5LCA3NywgNjgsIDEsIDI1MSwgMzMsIDY4LCAxLCAyNTAsIDE1NywgNjgsIDEsIDIzNSwgMTQxLCA2OCwgMSwgMjM1LCAKLSAgICAxMTQsIDY4LCAxLCAyMjcsIDE2NSwgNjgsIDEsIDIyOCwgNzYsIDY4LCAxLCAyMTUsIDE1NiwgNjgsIDEsIDIxNSwgMTQ0LCAKLSAgICA2OCwgMSwgMjQ4LCAxMzUsIDY4LCAxLCAyNDgsIDExOSwgNjgsIDEsIDIyOCwgMTEwLCA2OCwgMSwgMjE3LCAxMDUsIDY4LCAKLSAgICAxLCAyMTYsIDIwOCwgNjgsIDEsIDI0OCwgMjIxLCA2OCwgMSwgMjQ4LCAyNSwgNjgsIDEsIDE5NywgNjgsIDEsIDE5MCwgNjgsIAotICAgIDEsIDIyNSwgMTQ3LCA2OCwgMSwgMjUyLCAxOTEsIDY4LCAxLCAyNTIsIDE4LCA2OCwgMSwgMTg0LCA2OCwgMSwgMTkxLCA2OCwgCi0gICAgMSwgMjA1LCA2OCwgMSwgMjMzLCAxMzUsIDY4LCAxLCAyMTIsIDY1LCA2OCwgMSwgMjA2LCA2OCwgMSwgMTYyLCA2OCwgMSwgCi0gICAgMjMyLCAxODQsIDY4LCAxLCA2MSwgNjgsIDEsIDIyMCwgODYsIDYxLCA2OCwgMSwgNzMsIDY4LCAxLCAyMzYsIDMzLCA2OCwgCi0gICAgMSwgNzAsIDY4LCAxLCAyMTQsIDExOCwgNjgsIDEsIDc1LCA2OCwgMSwgMjMwLCAxNTEsIDc1LCA2OCwgMSwgNzYsIDY4LCAxLCAKLSAgICAyNTMsIDE5MiwgNjgsIDI1LCA1LCAyMTcsIDY0LCAyNTUsIDczLCA2OCwgMjUsIDUsIDI1NSwgNzMsIDY4LCAyNSwgNSwgNzMsIAotICAgIDY4LCAyNSwgNSwgMjM2LCAzMywgNjgsIDI1LCA1LCA3MCwgNjgsIDI1LCA1LCAyMTQsIDExOCwgNjgsIDI1LCA1LCA3NSwgCi0gICAgNjgsIDI1LCA1LCAyNTQsIDIwMSwgNjgsIDI1LCA1LCAyMzAsIDE1MSwgMjM2LCAzMywgNjgsIDI1LCA1LCAyMzAsIDE1MSwgCi0gICAgNzYsIDY4LCAyNSwgNSwgMTYwLCA0OCwgNjgsIDUsIDI1NCwgNzUsIDY4LCA1LCA1OSwgNTEsIDY4LCA1LCAyMTMsIDE0NywgCi0gICAgNjgsIDUsIDIxMywgMTUyLCA2OCwgNSwgMjUzLCAyMzUsIDY4LCAxMTYsIDUsIDE0NywgMTkxLCA2OCwgMTE2LCA1LCAxNDcsIAotICAgIDIwNSwgNjgsIDExNiwgNSwgMTQ3LCAyMTIsIDY1LCA2OCwgMTE2LCA1LCAxNDcsIDE2MiwgNjgsIDEsIDI0MiwgMTMyLCAKLSAgICAyMDYsIDY4LCAyMSwgMjEwLCA4NiwgNjgsIDIxLCAxMTAsIDY4LCAyMSwgMTA1LCA2OCwgMjEsIDE1OCwgNjgsIDIxLCAxNjEsIAotICAgIDY4LCAyMSwgMTg5LCA2OCwgMjEsIDE5NCwgNjgsIDIxLCAxOTgsIDY4LCAyMSwgMTk1LCA2OCwgMjEsIDIwMCwgNjgsIDUsIAotICAgIDIzMiwgMTkyLCAyMjEsIDE3MiwgNjgsIDUsIDIyMSwgMTcyLCA2OCwgMTYsIDIzMiwgMTUzLCA2OCwgMTYsIDI0OSwgMjEzLCAKLSAgICA2OCwgMTYsIDI1NCwgMjIwLCA2OCwgMTYsIDI0MywgNDgsIDY4LCAxLCAyMjAsIDEwMiwgNjgsIDEsIDIxOCwgMjIzLCA2OCwgCi0gICAgMSwgMTQ5LCAxNTMsIDY4LCAxLCAxNDksIDIyMiwgMTgwLCA2OCwgMSwgMTQ5LCAxNTYsIDY4LCAxLCAxNDksIDIzMiwgMTg1LCAKLSAgICA2OCwgMjUsIDUsIDE0OSwgMTUzLCA2OCwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDY4LCAyNSwgNSwgMTQ5LCAxNTYsIDY4LCAKLSAgICAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgNjgsIDEsIDIzMCwgMTUxLCAyMjksIDc3LCA2OCwgMSwgMjMwLCAxNTEsIDIzNSwgCi0gICAgMTE0LCA2OCwgMSwgMjMwLCAxNTEsIDI1MiwgMTExLCA2OCwgMSwgMjMwLCAxNTEsIDI1MiwgMTA2LCA2OCwgMTE2LCA1LCAKLSAgICAyMzAsIDE1MSwgMTQ3LCAxOTcsIDY4LCAxMTYsIDUsIDIzMCwgMTUxLCAxNDcsIDE4NCwgNjgsIDExNiwgNSwgMjMwLCAxNTEsIAotICAgIDE0NywgMjMzLCAxMzUsIDY4LCAxLCAyMjAsIDEwOCwgMjM0LCAyMTMsIDIyMCwgMTAyLCA2OCwgMjUsIDUsIDIyMCwgMTA4LCAKLSAgICAyMzQsIDIxMywgMjQ1LCA1NSwgNjgsIDEzOCwgMTY0LCAyMjAsIDEwOCwgMjM0LCAyMTMsIDI0MSwgMjQ3LCA2OCwgMTM4LCAKLSAgICAxNjQsIDIyMCwgMTA4LCAyMzQsIDIxMywgMjM0LCAxODMsIDIyNSwgMTIxLCA2OCwgMSwgMjEyLCA3LCAyMjQsIDEwOCwgCi0gICAgMjM0LCAyMTMsIDIxNiwgMjA4LCA2OCwgMSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIyNCwgMTE0LCA2OCwgMjUsIAotICAgIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyNDUsIDU1LCA2OCwgMjUsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgCi0gICAgMjEzLCAyMTQsIDIxNCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI5LCA2OCwgNSwgMjEyLCA3LCAKLSAgICAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxNiwgMjgsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjE2LCAyNywgCi0gICAgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI2LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAKLSAgICAyMTMsIDIxNiwgMjUsIDY4LCAxLCAyNDUsIDIxOSwgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMjgsIDExMCwgNjgsIDEsIDI0NSwgCi0gICAgMjE5LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxMCwgMTc2LCA2OCwgMSwgMjQ1LCAyMTksIDIyNCwgMTA4LCAyMzQsIDIxMywgCi0gICAgMjQyLCAyMTcsIDY4LCAyNSwgNSwgMjQzLCA1OSwgMjM0LCAyMTMsIDczLCA2OCwgMjUsIDUsIDIzNCwgMTg4LCAyMjYsIAotICAgIDIzNCwgNjgsIDI1LCA1LCAyMzQsIDE4OCwgNzAsIDY4LCAyNSwgNSwgMjM0LCAxODgsIDI0NSwgMjA5LCA2OCwgMSwgMjIwLCAKLSAgICA4NiwgMTc2LCA2OCwgMSwgMjIwLCA4NiwgMjM0LCAxMzIsIDY4LCAxLCAyMjAsIDg2LCAyNDMsIDEzNSwgNjgsIDEsIDIyMCwgCi0gICAgODYsIDI1MSwgMzMsIDY4LCAxLCAyMjAsIDg2LCAyMTAsIDExNiwgNjgsIDEsIDIyMCwgODYsIDIyNywgMTY1LCA2OCwgMSwgCi0gICAgMjIwLCA4NiwgMjQ4LCAyMjEsIDY4LCAxLCAyMjAsIDg2LCAxOTcsIDY4LCAxLCAyMjAsIDg2LCAyMjUsIDE0NywgNjgsIDEsIAotICAgIDIyMCwgODYsIDI0NCwgMTk2LCA2OCwgMSwgMjIwLCA4NiwgMjUyLCAxOTEsIDY4LCAxLCAyMjAsIDg2LCAyMTYsIDIwOCwgCi0gICAgNjgsIDEsIDIyMCwgODYsIDE2MiwgNjgsIDExNiwgNSwgMjIwLCA4NiwgMTQ3LCAyMTIsIDY1LCA2OCwgMjUsIDUsIDIyMCwgCi0gICAgODYsIDI1NSwgNzMsIDY4LCAyNSwgNSwgMjIwLCA4NiwgNzUsIDY4LCAyNSwgNSwgMjIwLCA4NiwgMTYwLCA0OCwgNjgsIDI1LCAKLSAgICA1LCAyMjAsIDg2LCA0MCwgMjExLCAxMTcsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4NiwgMjE2LCAKLSAgICAyNywgNjgsIDUsIDIyMCwgODYsIDIxNiwgMjUsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIDI0LCA2OCwgNSwgMjIwLCA4NiwgCi0gICAgMjQ5LCAxNTIsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg2LCAyNDksIDE1MiwgMjE2LCAyNywgNjgsIDUsIDIyMCwgODYsIAotICAgIDI0OSwgMTUyLCAyNDUsIDE1MywgMjE2LCAzMCwgNjgsIDEsIDIyMiwgMTI4LCAyMjYsIDYzLCAyNDQsIDE5NiwgNjgsIDUsIAotICAgIDIyMiwgMTI4LCAyMjYsIDYzLCAyMTYsIDI1LCA2OCwgMjIwLCA4NiwgMjEsIDIxMCwgODYsIDY4LCAyMjAsIDg2LCAyMSwgCi0gICAgMTEwLCA2OCwgMjIwLCA4NiwgMjEsIDEwNSwgNjgsIDIyMCwgODYsIDIxLCAxNTgsIDY4LCAyMjAsIDg2LCAyMSwgMTYxLCAKLSAgICA2OCwgMjIwLCA4NiwgMjEsIDE4OSwgNjgsIDIyMCwgODYsIDIxLCAxOTQsIDY4LCAyMjAsIDg2LCAyMSwgMTk4LCA2OCwgCi0gICAgMjIwLCA4NiwgMjEsIDE5NSwgNjgsIDIyMCwgODYsIDIxLCAyMDAsIDY4LCA1LCAyMzQsIDEyNiwgMjE2LCAyOSwgNjgsIDUsIAotICAgIDIzNCwgMTI2LCAyMTYsIDI3LCA2OCwgMjUsIDUsIDI1NCwgMTkwLCA2MSwgNjgsIDI1LCA1LCAyNTQsIDE5MCwgMjU0LCAKLSAgICAyMDEsIDY4LCAxNiwgMjIwLCA4NiwgMTEwLCA2OCwgMTYsIDIyMCwgODYsIDI0NSwgMzAsIDk4LCA2LCAxLCAyNTQsIDEyMywgCi0gICAgOTgsIDYsIDEsIDI1MiwgMTUyLCA5OCwgNiwgMSwgMjQzLCAxMDYsIDk4LCA2LCAxLCAyNDcsIDEyOCwgOTgsIDYsIDEsIAotICAgIDI0NSwgMTUwLCA5OCwgNiwgMSwgMjEzLCAxNjAsIDk4LCA2LCAxLCAyMTAsIDg5LCA5OCwgNiwgMSwgMjE3LCA2MCwgOTgsIAotICAgIDYsIDEsIDIzNSwgMjU1LCA5OCwgNiwgMSwgMjM0LCAyMzQsIDk4LCA2LCAxLCAyMzMsIDgxLCA5OCwgNiwgMSwgMjMxLCAKLSAgICAxODUsIDk4LCA2LCAxLCAyMjksIDE5NSwgOTgsIDYsIDEsIDIyNiwgMTk2LCA5OCwgNiwgMSwgMjI2LCAxNywgOTgsIDYsIDEsIAotICAgIDIxMCwgNzgsIDk4LCA2LCAxLCAyMjMsIDE3MSwgOTgsIDYsIDEsIDIyMSwgMjQzLCA5OCwgNiwgMSwgMjE3LCA1MCwgOTgsIAotICAgIDYsIDEsIDIxNCwgMTkwLCA5OCwgNiwgMSwgMjI1LCAxNDAsIDk4LCA2LCAxLCAyMzQsIDEyMSwgOTgsIDYsIDEsIDI0MiwgCi0gICAgMjQxLCA5OCwgNiwgMSwgMjI0LCA3MywgOTgsIDYsIDEsIDIyMCwgMjAsIDk4LCA2LCAxLCAyNTAsIDk3LCA5OCwgNiwgMSwgCi0gICAgMjUxLCA3LCA5OCwgNiwgMSwgMjM1LCAxMDAsIDk4LCA2LCAxLCAyNTAsIDQwLCA5OCwgNiwgMSwgMjUwLCAxNDMsIDk4LCA2LCAKLSAgICAxLCAyMTEsIDE2MywgOTgsIDYsIDEsIDIzNSwgMTExLCA5OCwgNiwgMSwgMjQyLCA0MywgOTgsIDYsIDEsIDI0MSwgMjM4LCAKLSAgICA5OCwgNiwgMSwgMjQxLCAxNzUsIDk4LCA2LCAxLCAyMTIsIDIyLCA5OCwgNiwgMSwgMjQyLCA0LCA5OCwgNiwgMSwgMjQxLCAKLSAgICA2NSwgOTgsIDYsIDEsIDIxMCwgMjQ2LCA5OCwgNiwgMSwgMjU0LCAyMzIsIDk4LCAxLCAyNTQsIDEyMywgOTgsIDEsIDI1MiwgCi0gICAgMTUyLCA5OCwgMSwgMjQzLCAxMDYsIDk4LCAxLCAyNDcsIDEyOCwgOTgsIDEsIDI0NSwgMTUwLCA5OCwgMSwgMjEzLCAxNjAsIAotICAgIDk4LCAxLCAyMTAsIDg5LCA5OCwgMSwgMjE3LCA2MCwgOTgsIDEsIDIzNSwgMjU1LCA5OCwgMSwgMjM0LCAyMzQsIDk4LCAxLCAKLSAgICAyMzMsIDgxLCA5OCwgMSwgMjMxLCAxODUsIDk4LCAxLCAyMjksIDE5NSwgOTgsIDEsIDIyNiwgMTk2LCA5OCwgMSwgMjI2LCAKLSAgICAxNywgOTgsIDEsIDIxMCwgNzgsIDk4LCAxLCAyMjMsIDE3MSwgOTgsIDEsIDIyMSwgMjQzLCA5OCwgMSwgMjE3LCA1MCwgOTgsIAotICAgIDEsIDIxNCwgMTkwLCA5OCwgMSwgMjI1LCAxNDAsIDk4LCAxLCAyMzQsIDEyMSwgOTgsIDEsIDI0MiwgMjQxLCA5OCwgMSwgCi0gICAgMjI0LCA3MywgOTgsIDEsIDIyMCwgMjAsIDk4LCAxLCAyNTAsIDk3LCA5OCwgMSwgMjUxLCA3LCA5OCwgMSwgMjM1LCAxMDAsIAotICAgIDk4LCAxLCAyNTAsIDQwLCA5OCwgMSwgMjUwLCAxNDMsIDk4LCAxLCAyMTEsIDE2MywgOTgsIDEsIDIzNSwgMTExLCA5OCwgMSwgCi0gICAgMjQyLCA0MywgOTgsIDEsIDI0MSwgMjM4LCA5OCwgMSwgMjQxLCAxNzUsIDk4LCAxLCAyMTIsIDIyLCA5OCwgMSwgMjQyLCA0LCAKLSAgICA5OCwgMSwgMjQxLCA2NSwgOTgsIDEsIDI0NCwgMTIxLCA5OCwgMSwgMjEwLCAyNDYsIDk4LCAxLCAyNDUsIDE2NSwgOTgsIDEsIAotICAgIDIxNSwgOTQsIDI0MywgMTA2LCA5OCwgMSwgMjU0LCAxOTYsIDk4LCAyMjYsIDE1LCAyMjAsIDEzNywgNTgsIDEsIDk4LCAKLSAgICAyMjksIDE5NSwgOTgsIDEsIDI1NCwgMjMyLCA5OCwgMSwgMjQyLCAzLCA1MCwgOTgsIDEsIDIzMywgMTI3LCA1MCwgMjQsIAotICAgIDEwMCwgMjM0LCA1OCwgMjQsIDEwMCwgMjE4LCAyMTUsIDI0LCAxMDAsIDIyOCwgMjI2LCAyNCwgMTAwLCAyMTYsIDEwMSwgCi0gICAgMjQsIDEwMCwgMjE4LCAyMDQsIDI0LCAxMDAsIDIyMywgMjYsIDI0LCAxMDAsIDIzMCwgMjE3LCAyNCwgMTAwLCAyMjUsIDk1LCAKLSAgICAyNCwgMTAwLCAyMTgsIDIxMiwgMjQsIDEwMCwgMjE5LCAxNDgsIDI0LCAxMDAsIDIxOCwgMjA5LCAyNCwgMTAwLCAyMzYsIAotICAgIDU2LCAyNCwgMTAwLCAyNTAsIDQ2LCAyNCwgMTAwLCAyMTgsIDIxOSwgMjQsIDEwMCwgMjUwLCAxMDYsIDI0LCAxMDAsIDIzNCwgCi0gICAgMTEwLCAyNCwgMTAwLCAyMTYsIDE3MywgMjQsIDEwMCwgMjI1LCAxMzEsIDI0LCAxMDAsIDI0MSwgMTcyLCAyNCwgMTAwLCAKLSAgICAyMjgsIDIyMiwgMjQsIDEwMCwgMjE4LCAyMTMsIDI0LCAxMDAsIDIyOCwgMjE2LCAyNCwgMTAwLCAyMjgsIDIyMCwgMjQsIAotICAgIDEwMCwgMjE2LCA5OCwgMjQsIDEwMCwgMjIzLCAxNCwgMjQsIDEwMCwgMjE4LCAyMTEsIDI0LCAxMDAsIDIyMywgMjQsIDI0LCAKLSAgICAxMDAsIDIzNCwgMjE4LCAyNCwgMTAwLCAyMzAsIDIxMCwgMjQsIDEwMCwgMjM0LCAyMjEsIDI0LCAxMDAsIDIyNSwgOTAsIAotICAgIDI0LCAxMDAsIDIyNSwgODgsIDI0LCAxMDAsIDIyNSwgNzYsIDI0LCAxMDAsIDIyNSwgODQsIDI0LCAxMDAsIDIyNSwgODIsIAotICAgIDI0LCAxMDAsIDIyNSwgNzksIDI0LCAxMDAsIDIyNSwgODEsIDI0LCAxMDAsIDIyNSwgNzgsIDI0LCAxMDAsIDIyNSwgODMsIAotICAgIDI0LCAxMDAsIDIyNSwgOTMsIDI0LCAxMDAsIDIyNSwgOTQsIDI0LCAxMDAsIDIyNSwgNzcsIDI0LCAxMDAsIDIyNSwgODcsIAotICAgIDI0LCAxMDAsIDIzNCwgMjE5LCAyNCwgMTAwLCAyMzQsIDIxNywgMjQsIDEwMCwgMjE5LCAxNDEsIDI0LCAxMDAsIDIxOSwgCi0gICAgMTM5LCAyNCwgMTAwLCAyMTksIDEzMSwgMjQsIDEwMCwgMjE5LCAxMzQsIDI0LCAxMDAsIDIxOSwgMTQwLCAyNCwgMTAwLCAKLSAgICAyMTksIDEzNiwgMjQsIDEwMCwgMjE5LCAxMzUsIDI0LCAxMDAsIDIxOSwgMTMzLCAyNCwgMTAwLCAyMTksIDE0NCwgMjQsIAotICAgIDEwMCwgMjE5LCAxNDYsIDI0LCAxMDAsIDIxOSwgMTQ3LCAyNCwgMTAwLCAyMTksIDE0MiwgMjQsIDEwMCwgMjE5LCAxMzIsIAotICAgIDI0LCAxMDAsIDIxOSwgMTM3LCAyNCwgMTAwLCAyMTksIDE0NSwgMjQsIDEwMCwgMjUwLCA5MCwgMjQsIDEwMCwgMjUwLCA4OCwgCi0gICAgMjQsIDEwMCwgMjUwLCAxNjgsIDI0LCAxMDAsIDI1MCwgMTY2LCAyNCwgMTAwLCAyMjYsIDMyLCAyNCwgMTAwLCAyMzYsIDUxLCAKLSAgICAyNCwgMTAwLCAyMzYsIDQyLCAyNCwgMTAwLCAyMzYsIDUwLCAyNCwgMTAwLCAyMzYsIDQ3LCAyNCwgMTAwLCAyMzYsIDQ1LCAKLSAgICAyNCwgMTAwLCAyMzYsIDQ5LCAyNCwgMTAwLCAyMTgsIDIxNiwgMjQsIDEwMCwgMjM2LCA1NCwgMjQsIDEwMCwgMjM2LCA1NSwgCi0gICAgMjQsIDEwMCwgMjM2LCA0MywgMjQsIDEwMCwgMjM2LCA0OCwgMjQsIDEwMCwgMjExLCAyNiwgMjQsIDEwMCwgMjUwLCA0NSwgCi0gICAgMjQsIDEwMCwgMjUwLCA5MSwgMjQsIDEwMCwgMjUwLCA4OSwgMjQsIDEwMCwgMjUwLCAxNjksIDI0LCAxMDAsIDI1MCwgMTY3LCAKLSAgICAyNCwgMTAwLCAyNTAsIDEwNCwgMjQsIDEwMCwgMjUwLCAxMDUsIDI0LCAxMDAsIDI1MCwgOTIsIDI0LCAxMDAsIDI1MCwgCi0gICAgMTcwLCAyNCwgMTAwLCAyMjUsIDEyOSwgMjQsIDEwMCwgMjM0LCAyMjAsIDI0LCAxMDAsIDIxOCwgMjE3LCAyNCwgMTAwLCAKLSAgICAyMTEsIDMyLCAyNCwgMTAwLCAyMzQsIDQ5LCAyNCwgMTAwLCAyMjgsIDIxOCwgMjQsIDEwMCwgMjI4LCAyMjQsIDI0LCAxMDAsIAotICAgIDIyOCwgMjIzLCAyNCwgMTAwLCAyMTYsIDk1LCAyNCwgMTAwLCAyNDQsIDEwMywgMjQsIDE0MywgMjQ0LCAxMDMsIDI0LCAKLSAgICAxNDMsIDYxLCAyNCwgMTQzLCAyNTQsIDI0MywgMjQsIDE0MywgMTkxLCAyNCwgMTQzLCAyMTEsIDkyLCAyNCwgMTQzLCAyNDUsIAotICAgIDExNywgMjQsIDE0MywgNzUsIDI0LCAxNDMsIDIxMSwgMzYsIDI0LCAxNDMsIDIxMSwgNDcsIDI0LCAxNDMsIDc2LCAyNCwgCi0gICAgMTQzLCAyMTIsIDY1LCAyNCwgMTQzLCAyMTIsIDYyLCAyNCwgMTQzLCAyMjYsIDIzNCwgMjQsIDE0MywgMjEwLCAyNDQsIDI0LCAKLSAgICAxNDMsIDcwLCAyNCwgMTQzLCAyMTIsIDExLCAyNCwgMTQzLCAyMTIsIDIyLCAyNCwgMTQzLCAyMTEsIDI1MCwgMjQsIDE0MywgCi0gICAgMjEwLCAyMTIsIDI0LCAxNDMsIDI0NSwgNTUsIDI0LCAxNDMsIDIxMSwgOCwgMjQsIDE0MywgNzMsIDI0LCAxNDMsIDI1NSwgCi0gICAgMTU3LCAyNCwgMTQzLCAyNTUsIDE1NiwgMjQsIDE0MywgMjExLCAxMDYsIDI0LCAxNDMsIDIxMSwgMTA0LCAyNCwgMTQzLCAKLSAgICAyNDUsIDExNSwgMjQsIDE0MywgMjQ1LCAxMTQsIDI0LCAxNDMsIDI0NSwgMTE2LCAyNCwgMTQzLCAyMTEsIDM1LCAyNCwgCi0gICAgMTQzLCAyMTEsIDM0LCAyNCwgMTQzLCAyMjcsIDg0LCAyNCwgMTQzLCAyMjcsIDg1LCAyNCwgMTQzLCAyMjcsIDc4LCAyNCwgCi0gICAgMTQzLCAyMjcsIDgzLCAyNCwgMTQzLCAyMjcsIDgxLCAyNCwgMTQzLCAyMTAsIDIzOCwgMjQsIDE0MywgMjEwLCAyMzcsIDI0LCAKLSAgICAxNDMsIDIxMCwgMjM2LCAyNCwgMTQzLCAyMTAsIDIzOSwgMjQsIDE0MywgMjEwLCAyNDAsIDI0LCAxNDMsIDIxNSwgMzAsIAotICAgIDI0LCAxNDMsIDIxNSwgMjksIDI0LCAxNDMsIDIxNSwgMjcsIDI0LCAxNDMsIDIxNSwgMjQsIDI0LCAxNDMsIDIxNSwgMjUsIAotICAgIDI0LCAxNDMsIDIxMCwgMjExLCAyNCwgMTQzLCAyMTAsIDIwOCwgMjQsIDE0MywgMjEwLCAyMDksIDI0LCAxNDMsIDIxMCwgCi0gICAgMjAzLCAyNCwgMTQzLCAyMTAsIDIwNCwgMjQsIDE0MywgMjEwLCAyMDUsIDI0LCAxNDMsIDIxMCwgMjA3LCAyNCwgMTQzLCAKLSAgICAyNDUsIDQ5LCAyNCwgMTQzLCAyNDUsIDUxLCAyNCwgMTQzLCAyMTEsIDcsIDI0LCAxNDMsIDI0MCwgMTUzLCAyNCwgMTQzLCAKLSAgICAyNDAsIDE0NSwgMjQsIDE0MywgMjQwLCAxNDgsIDI0LCAxNDMsIDI0MCwgMTQ2LCAyNCwgMTQzLCAyNDAsIDE1MCwgMjQsIAotICAgIDE0MywgMjQwLCAxNTIsIDI0LCAxNDMsIDI1NCwgMzQsIDI0LCAxNDMsIDI1NCwgMzEsIDI0LCAxNDMsIDI1NCwgMjksIDI0LCAKLSAgICAxNDMsIDI1NCwgMzAsIDI0LCAxNDMsIDIxOCwgMjIwLCAyNCwgMTQzLCAyNTUsIDE1OCwgMjQsIDE0MywgMjExLCAxMDUsIAotICAgIDI0LCAxNDMsIDIxMSwgMzMsIDI0LCAxNDMsIDIyNywgODAsIDI0LCAxNDMsIDIyNywgNzksIDI0LCA5MCwgMjM0LCA1OCwgCi0gICAgMjQsIDkwLCAyMTgsIDIxNSwgMjQsIDkwLCAyMzQsIDUxLCAyNCwgOTAsIDIyOCwgMjI2LCAyNCwgOTAsIDIyOCwgMjI0LCAKLSAgICAyNCwgOTAsIDIyOCwgMjIzLCAyNCwgOTAsIDIxNiwgMTAxLCAyNCwgOTAsIDIyMywgMjYsIDI0LCA5MCwgMjIzLCAyMSwgMjQsIAotICAgIDkwLCAyMjMsIDE4LCAyNCwgOTAsIDIyMywgMTEsIDI0LCA5MCwgMjIzLCA2LCAyNCwgOTAsIDIyMywgMSwgMjQsIDkwLCAKLSAgICAyMjMsIDEyLCAyNCwgOTAsIDIyMywgMjQsIDI0LCA5MCwgMjMwLCAyMTcsIDI0LCA5MCwgMjI1LCA5NSwgMjQsIDkwLCAyMjUsIAotICAgIDg0LCAyNCwgOTAsIDIxOSwgMTQ4LCAyNCwgOTAsIDIxOCwgMjA5LCAyNCwgOTAsIDIzNiwgNTYsIDI0LCA5MCwgMjUwLCA0NiwgCi0gICAgMjQsIDkwLCAyNTAsIDEwNiwgMjQsIDkwLCAyMzQsIDExMCwgMjQsIDkwLCAyMTYsIDE3MywgMjQsIDkwLCAyMjUsIDEzMSwgCi0gICAgMjQsIDkwLCAyNDEsIDE3MiwgMjQsIDkwLCAyMzQsIDUyLCAyNCwgOTAsIDIzNCwgNTAsIDI0LCA5MCwgMjI4LCAyMjIsIDI0LCAKLSAgICA5MCwgMjI4LCAyMTYsIDI0LCA5MCwgMjI4LCAyMTgsIDI0LCA5MCwgMjI4LCAyMjEsIDI0LCA5MCwgMjI4LCAyMTcsIDI0LCAKLSAgICA5MCwgMjE2LCA5OCwgMjQsIDkwLCAyMTYsIDk1LCAyNCwgOTAsIDIyMywgMTksIDI0LCA5MCwgMjIzLCAxNCwgMjQsIDkwLCAKLSAgICAyMjMsIDAsIDI0LCA5MCwgMjIyLCAyNTUsIDI0LCA5MCwgMjE4LCAyMTEsIDI0LCA5MCwgMjIzLCAxNiwgMjQsIDkwLCAyMjMsIAotICAgIDE1LCAyNCwgOTAsIDIyMywgOCwgMjQsIDkwLCAyMjMsIDEwLCAyNCwgOTAsIDIyMywgMjMsIDI0LCA5MCwgMjIzLCAzLCAyNCwgCi0gICAgOTAsIDIyMywgMTMsIDI0LCA5MCwgMjIzLCAyMiwgMjQsIDkwLCAyMjIsIDI1NCwgMjQsIDkwLCAyMzAsIDIxMywgMjQsIDkwLCAKLSAgICAyMzAsIDIwOCwgMjQsIDkwLCAyMzAsIDIxMCwgMjQsIDkwLCAyMzAsIDIwNywgMjQsIDkwLCAyMzAsIDIwNSwgMjQsIDkwLCAKLSAgICAyMzAsIDIxMSwgMjQsIDkwLCAyMzAsIDIxNiwgMjQsIDkwLCAyMzAsIDIxNCwgMjQsIDkwLCAyMzQsIDIyMSwgMjQsIDkwLCAKLSAgICAyMjUsIDg2LCAyNCwgOTAsIDIyNSwgODcsIDI0LCA5MCwgMjI1LCA5MiwgMjQsIDkwLCAyMzQsIDIxOSwgMjQsIDkwLCAyMTksIAotICAgIDE0MSwgMjQsIDkwLCAyMTksIDEzMSwgMjQsIDkwLCAyMTksIDEzNCwgMjQsIDkwLCAyMTksIDEzNiwgMjQsIDkwLCAyMjYsIAotICAgIDMyLCAyNCwgOTAsIDIzNiwgNTEsIDI0LCA5MCwgMjM2LCA0NCwgMjQsIDkwLCAyMTgsIDIxNiwgMjQsIDkwLCAyMzYsIDUyLCAKLSAgICAyNCwgOTAsIDIxMSwgMjYsIDI0LCA5MCwgMjExLCAyMiwgMjQsIDkwLCAyMTEsIDIzLCAyNCwgOTAsIDIyNSwgMTI5LCAyNCwgCi0gICAgOTAsIDIzNCwgMjIwLCAyNCwgOTAsIDI0MSwgMTcwLCAyNCwgOTAsIDI0MSwgMTY4LCAyNCwgOTAsIDI0MSwgMTcxLCAyNCwgCi0gICAgOTAsIDI0MSwgMTY5LCAyNCwgOTAsIDIxMSwgMzIsIDI0LCA5MCwgMjM0LCA1NCwgMjQsIDkwLCAyMzQsIDUzLCAyNCwgOTAsIAotICAgIDIzNCwgNTcsIDI0LCA5MCwgMjM0LCA1NSwgMjQsIDkwLCAyMzQsIDU2LCAyNCwgOTAsIDIxOCwgMjEzLCAyOSwgMywgMTYyLCAKLSAgICAyOSwgMywgMjQwLCAyMjIsIDI5LCAzLCAyNDEsIDE4MCwgMjksIDMsIDI0MiwgNDYsIDI5LCAzLCAyNDEsIDIyMCwgMjksIDMsIAotICAgIDI0MSwgMjM4LCAyOSwgMywgMjQxLCA2OCwgMjksIDMsIDI0MSwgNjcsIDI5LCAzLCAyMzMsIDEzNSwgMjksIDMsIDIzMiwgCi0gICAgOTgsIDI5LCAzLCAyMzIsIDI0MSwgMjksIDMsIDIzMywgMTM0LCAyOSwgMywgMjMzLCA1MCwgMjksIDMsIDIzMywgNTgsIDI5LCAKLSAgICAzLCAyMzIsIDE1NiwgMjksIDMsIDIzMiwgNzAsIDI5LCAzLCAyNDEsIDE4OSwgMjksIDMsIDI0MSwgMTgzLCAyOSwgMywgCi0gICAgMjQxLCAxODUsIDI5LCAzLCAyNDEsIDE4OCwgMjksIDMsIDI0MSwgMTg2LCAyOSwgMywgMjQxLCAxODcsIDI5LCAzLCAyNDEsIAotICAgIDE4NCwgMjksIDMsIDI0MSwgMTgyLCAyOSwgMywgMTg0LCAyOSwgMywgMjMwLCAxMDIsIDI5LCAzLCAyMzAsIDIzMCwgMjksIAotICAgIDMsIDIzMSwgMjM3LCAyOSwgMywgMjMxLCA4MCwgMjksIDMsIDIzMSwgOTEsIDI5LCAzLCAyMzAsIDE2MSwgMjksIDMsIDIzMCwgCi0gICAgNDIsIDI5LCAzLCAyMTcsIDE2MywgMjksIDMsIDIxNywgMTU3LCAyOSwgMywgMjE3LCAxNTksIDI5LCAzLCAyMTcsIDE2MiwgCi0gICAgMjksIDMsIDIxNywgMTYwLCAyOSwgMywgMjE3LCAxNjEsIDI5LCAzLCAyMTcsIDE1OCwgMjksIDMsIDIxNywgMTU2LCAyOSwgCi0gICAgMywgMjA1LCAyOSwgMywgMjIyLCAxNDAsIDI5LCAzLCAyMjMsIDM1LCAyOSwgMywgMjIzLCAxODQsIDI5LCAzLCAyMjMsIAotICAgIDEwOCwgMjksIDMsIDIyMywgMTI4LCAyOSwgMywgMjIyLCAyMTEsIDI5LCAzLCAyMjIsIDEwOSwgMjksIDMsIDIwNiwgMjksIAotICAgIDMsIDIxOCwgODMsIDI5LCAzLCAyMTksIDE5MSwgMjksIDMsIDIyMiwgMzEsIDI5LCAzLCAyMjEsIDE3MCwgMjksIDMsIDIyMSwgCi0gICAgMTgxLCAyOSwgMywgMjE5LCA1OCwgMjksIDMsIDIxNywgMjUzLCAyOSwgMywgMjIwLCAxMDIsIDI5LCAzLCAyMTksIDIyNSwgCi0gICAgMjksIDMsIDIyMCwgMzIsIDI5LCAzLCAyMjAsIDk4LCAyOSwgMywgMjIwLCA2MSwgMjksIDMsIDIyMCwgNjMsIDI5LCAzLCAKLSAgICAyMjAsIDcsIDI5LCAzLCAyMTksIDIwOCwgMjksIDMsIDIyNCwgODgsIDI5LCAzLCAyMjQsIDMwLCAyOSwgMywgMjI0LCA1MywgCi0gICAgMjksIDMsIDIyNCwgODcsIDI5LCAzLCAyMjQsIDY4LCAyOSwgMywgMjI0LCA2OSwgMjksIDMsIDIyNCwgNDIsIDI5LCAzLCAKLSAgICAyMjQsIDQxLCAyOSwgMywgMjIzLCAyNDIsIDI5LCAzLCAyMjMsIDIzOCwgMjksIDMsIDIyMywgMjQxLCAyOSwgMywgMjIzLCAKLSAgICAyMzksIDI5LCAzLCAyMjMsIDI0MCwgMjksIDMsIDIyNCwgNjUsIDI5LCAzLCAyMjQsIDU5LCAyOSwgMywgMjI0LCA2MSwgMjksIAotICAgIDMsIDIyNCwgNjQsIDI5LCAzLCAyMjQsIDYyLCAyOSwgMywgMjI0LCA2MywgMjksIDMsIDIyNCwgNjAsIDI5LCAzLCAyMjQsIAotICAgIDU4LCAyOSwgMywgMjI0LCA1NCwgMjksIDMsIDIyNCwgNTcsIDI5LCAzLCAyMjQsIDU1LCAyOSwgMywgMjI0LCA1NiwgMjksIAotICAgIDMsIDI1MiwgMTkxLCAyOSwgMywgMjUxLCAxMjUsIDI5LCAzLCAyNTIsIDYsIDI5LCAzLCAyNTIsIDE4OSwgMjksIDMsIDI1MiwgCi0gICAgNjYsIDI5LCAzLCAyNTIsIDc1LCAyOSwgMywgMjUxLCAyMDUsIDI5LCAzLCAyNTEsIDgzLCAyOSwgMywgMjE0LCAyNywgMjksIAotICAgIDMsIDIxMiwgMTE2LCAyOSwgMywgMjEzLCAxNzYsIDI5LCAzLCAyMTQsIDI2LCAyOSwgMywgMjEzLCAyNTAsIDI5LCAzLCAKLSAgICAyMTMsIDI1NSwgMjksIDMsIDIxMywgMTM4LCAyOSwgMywgMjEyLCAxMDcsIDI5LCAzLCAyMTcsIDEwNSwgMjksIDMsIDIxNSwgCi0gICAgMTE4LCAyOSwgMywgMjE2LCAxMTcsIDI5LCAzLCAyMTcsIDEwMSwgMjksIDMsIDIxNywgMTEsIDI5LCAzLCAyMTcsIDIyLCAKLSAgICAyOSwgMywgMTExLCAyOSwgMywgMjE1LCA4MCwgMjksIDMsIDI1MSwgMzMsIDI5LCAzLCAyNDksIDExMiwgMjksIDMsIDI1MCwgCi0gICAgNTEsIDI5LCAzLCAyNTEsIDMyLCAyOSwgMywgMjUwLCAxODIsIDI5LCAzLCAyNTAsIDE5MCwgMjksIDMsIDI0OSwgMjM4LCAKLSAgICAyOSwgMywgMjQ5LCA4MSwgMjksIDMsIDIxMSwgMTY1LCAyOSwgMywgMjExLCAxNDEsIDI5LCAzLCAyMTEsIDE1NywgMjksIDMsIAotICAgIDIxMSwgMTY0LCAyOSwgMywgMjExLCAxNjEsIDI5LCAzLCAyMTEsIDE2MiwgMjksIDMsIDIxMSwgMTQ4LCAyOSwgMywgMjExLCAKLSAgICAxNDcsIDI5LCAzLCAyMTEsIDEzNiwgMjksIDMsIDIxMSwgMTMyLCAyOSwgMywgMjExLCAxMzUsIDI5LCAzLCAyMTEsIDEzMywgCi0gICAgMjksIDMsIDIxMSwgMTM0LCAyOSwgMywgMTk3LCAyOSwgMywgMjI3LCAyMzcsIDI5LCAzLCAyMjgsIDIzMywgMjksIDMsIAotICAgIDIyOSwgMjI1LCAyOSwgMywgMjI5LCAxMDMsIDI5LCAzLCAyMjksIDEwNywgMjksIDMsIDIyOCwgNzQsIDI5LCAzLCAyMjcsIAotICAgIDE3NCwgMjksIDMsIDIyNywgMTY1LCAyOSwgMywgMjI3LCAxMjgsIDI5LCAzLCAyMjcsIDE0OCwgMjksIDMsIDIyNywgMTY0LCAKLSAgICAyOSwgMywgMjI3LCAxNTUsIDI5LCAzLCAyMjcsIDE1NiwgMjksIDMsIDIyNywgMTM0LCAyOSwgMywgMjI3LCAxMTksIDI5LCAKLSAgICAzLCAyNDIsIDE4MCwgNjEsIDI5LCAzLCAyNDIsIDE4MCwgNzAsIDI5LCAzLCAyNDIsIDE4MCwgNzMsIDI5LCAzLCAyNDIsIAotICAgIDE4MCwgMjU1LCA3MywgMjksIDMsIDI0MiwgMTgwLCAyNDUsIDIwOSwgMjksIDMsIDI0MiwgMTgwLCA3NSwgMjksIDMsIDI0MiwgCi0gICAgMTgwLCA3NiwgMjksIDMsIDI0MiwgMTgwLCAyMTIsIDY1LCAyOSwgMywgMTc2LCAyOSwgMywgMjMzLCAyMTcsIDI5LCAzLCAKLSAgICAyMzQsIDkyLCAyOSwgMywgMjM1LCAxMCwgMjksIDMsIDIzNCwgMTgxLCAyOSwgMywgMjM0LCAxODIsIDI5LCAzLCAyMzQsIAotICAgIDI4LCAyOSwgMywgMjM0LCAyNywgMjksIDMsIDIzMywgMTgyLCAyOSwgMywgMjMzLCAxNzYsIDI5LCAzLCAyMzMsIDE4MSwgCi0gICAgMjksIDMsIDIzMywgMTc3LCAyOSwgMywgMjMzLCAxNzgsIDI5LCAzLCAyMzMsIDE3MSwgMjksIDMsIDIzMywgMTY1LCAyOSwgCi0gICAgMywgMjMzLCAxNjcsIDI5LCAzLCAyMzMsIDE3MCwgMjksIDMsIDIzMywgMTY4LCAyOSwgMywgMjMzLCAxNjksIDI5LCAzLCAKLSAgICAyMzMsIDE2NiwgMjksIDMsIDIzMywgMTY0LCAyOSwgMywgMjMzLCAxNjAsIDI5LCAzLCAyMzMsIDE2MywgMjksIDMsIDIzMywgCi0gICAgMTYxLCAyOSwgMywgMjMzLCAxNjIsIDI5LCAzLCAyMTIsIDY1LCAyOSwgMywgMjExLCAxOTUsIDI5LCAzLCAyMTEsIDI1MCwgCi0gICAgMjksIDMsIDIxMiwgNjQsIDI5LCAzLCAyMTIsIDE3LCAyOSwgMywgMjEyLCAyMiwgMjksIDMsIDIxMSwgMjI3LCAyOSwgMywgCi0gICAgMjExLCAyMjYsIDI5LCAzLCAyMjUsIDEzOSwgNjEsIDI5LCAzLCAyMjUsIDEzOSwgNzAsIDI5LCAzLCAyMjUsIDEzOSwgNzMsIAotICAgIDI5LCAzLCAyMjUsIDEzOSwgMjU1LCA3MywgMjksIDMsIDIyNSwgMTM5LCAyNDUsIDIwOSwgMjksIDMsIDIyNSwgMTM5LCA3NSwgCi0gICAgMjksIDMsIDIyNSwgMTM5LCA3NiwgMjksIDMsIDIxMCwgMTE2LCAyOSwgMywgMjEwLCAxMywgMjksIDMsIDIxMCwgNDQsIDI5LCAKLSAgICAzLCAyMTAsIDExNSwgMjksIDMsIDIxMCwgOTIsIDI5LCAzLCAyMTAsIDk0LCAyOSwgMywgMjEwLCAyMywgMjksIDMsIDIxMCwgCi0gICAgMCwgMjksIDMsIDIxMCwgODIsIDI5LCAzLCAyMTAsIDYyLCAyOSwgMywgMjEwLCA2OSwgMjksIDMsIDIxMCwgODEsIDI5LCAzLCAKLSAgICAyMTAsIDczLCAyOSwgMywgMjEwLCA3NCwgMjksIDMsIDIxMCwgNjcsIDI5LCAzLCAyMTAsIDUzLCAyOSwgMywgMTkxLCAyOSwgCi0gICAgMywgMjEwLCAyMTIsIDI5LCAzLCAyMTEsIDgsIDI5LCAzLCAyMTEsIDEwMywgMjksIDMsIDIxMSwgNDQsIDI5LCAzLCAyMTEsIAotICAgIDQ3LCAyOSwgMywgMjEwLCAyNDQsIDI5LCAzLCAyMTAsIDIzNSwgMjksIDMsIDI0OCwgMjIxLCAyOSwgMywgMjQ2LCA3OCwgCi0gICAgMjksIDMsIDI0OCwgMywgMjksIDMsIDI0OCwgMjIwLCAyOSwgMywgMjQ4LCA3NywgMjksIDMsIDI0OCwgOTAsIDI5LCAzLCAKLSAgICAyNDcsIDE0NSwgMjksIDMsIDI0NiwgNDcsIDI5LCAzLCAyNDgsIDEzNSwgMjksIDMsIDI0OCwgMTAwLCAyOSwgMywgMjQ4LCAKLSAgICAxMTIsIDI5LCAzLCAyNDgsIDEzNCwgMjksIDMsIDI0OCwgMTIyLCAyOSwgMywgMjQ4LCAxMjMsIDI5LCAzLCAyNDgsIDEwNSwgCi0gICAgMjksIDMsIDI0OCwgOTEsIDI5LCAzLCAyMzUsIDE0MSwgMjksIDMsIDIzNSwgNTEsIDI5LCAzLCAyMzUsIDEwOCwgMjksIDMsIAotICAgIDIzNSwgMTQwLCAyOSwgMywgMjM1LCAxMjQsIDI5LCAzLCAyMzUsIDEyNiwgMjksIDMsIDIzNSwgNjgsIDI5LCAzLCAyMzUsIAotICAgIDMxLCAyOSwgMywgMjQzLCAxMzUsIDI5LCAzLCAyNDIsIDExMywgMjksIDMsIDI0MiwgMjE0LCAyOSwgMywgMjQzLCAxMzIsIAotICAgIDI5LCAzLCAyNDMsIDU1LCAyOSwgMywgMjQzLCA2MiwgMjksIDMsIDI0MiwgMTc0LCAyOSwgMywgMjQyLCAxNzMsIDI5LCAzLCAKLSAgICAyNDIsIDc4LCAyOSwgMywgMjQyLCA3NCwgMjksIDMsIDI0MiwgNzcsIDI5LCAzLCAyNDIsIDc1LCAyOSwgMywgMjQyLCA3NiwgCi0gICAgMjksIDMsIDI0MywgMjksIDI5LCAzLCAyNDMsIDksIDI5LCAzLCAyNDMsIDE5LCAyOSwgMywgMjQzLCAyOCwgMjksIDMsIAotICAgIDI0MywgMjMsIDI5LCAzLCAyNDMsIDI0LCAyOSwgMywgMjQzLCAxMywgMjksIDMsIDI0MiwgMjU0LCAyOSwgMywgMjE2LCAKLSAgICAyMDgsIDI5LCAzLCAyMTYsIDEzNiwgMjksIDMsIDIxNiwgMTc1LCAyOSwgMywgMjE2LCAyMDcsIDI5LCAzLCAyMTYsIDE5NCwgCi0gICAgMjksIDMsIDIxNiwgMTk1LCAyOSwgMywgMjE2LCAxNTYsIDI5LCAzLCAyMTYsIDEyOCwgMjksIDMsIDI1MCwgMTU3LCAyOSwgCi0gICAgMywgMjUwLCA2OSwgMjksIDMsIDI1MCwgMTEwLCAyOSwgMywgMjUwLCAxNTYsIDI5LCAzLCAyNTAsIDEyOCwgMjksIDMsIAotICAgIDI1MCwgMTMxLCAyOSwgMywgMjUwLCA4NiwgMjksIDMsIDI1MCwgNTgsIDI5LCAzLCAyMjUsIDE0NywgMjksIDMsIDIyNSwgCi0gICAgMTE0LCAyOSwgMywgMjI1LCAxMzMsIDI5LCAzLCAyMjUsIDE0NiwgMjksIDMsIDIyNSwgMTM1LCAyOSwgMywgMjI1LCAxMzYsIAotICAgIDI5LCAzLCAyMjUsIDEyMSwgMjksIDMsIDIyNSwgMTEwLCAyOSwgMywgMjE1LCAxODMsIDI5LCAzLCAyMTUsIDE2MywgMjksIAotICAgIDMsIDIxNSwgMTY3LCAyOSwgMywgMjE1LCAxODIsIDI5LCAzLCAyMTUsIDE3NywgMjksIDMsIDIxNSwgMTc4LCAyOSwgMywgCi0gICAgMjE1LCAxNjYsIDI5LCAzLCAyMTUsIDE2MSwgMjksIDMsIDIxNSwgMzksIDI5LCAzLCAyMTUsIDMxLCAyOSwgMywgMjE1LCAKLSAgICAzNSwgMjksIDMsIDIxNSwgMzgsIDI5LCAzLCAyMTUsIDM2LCAyOSwgMywgMjE1LCAzNywgMjksIDMsIDIxNSwgMzMsIDI5LCAKLSAgICAzLCAyMTUsIDMyLCAyOSwgMywgMjQ0LCAxOTYsIDI5LCAzLCAyNDMsIDIzNCwgMjksIDMsIDI0NCwgMTIxLCAyOSwgMywgCi0gICAgMjQ0LCAxOTUsIDI5LCAzLCAyNDQsIDE0NywgMjksIDMsIDI0NCwgMTU0LCAyOSwgMywgMjQ0LCA0MywgMjksIDMsIDI0MywgCi0gICAgMjEzLCAyOSwgMywgMTkwLCAyOSwgMywgMjI0LCAxNTAsIDI5LCAzLCAyMjUsIDEwOCwgMjksIDMsIDIyNiwgODksIDI5LCAzLCAKLSAgICAyMjUsIDIxMSwgMjksIDMsIDIyNSwgMjIxLCAyOSwgMywgMjI1LCAxNiwgMjksIDMsIDIyNCwgMTE0LCAyOSwgMywgMjIyLCAKLSAgICA5OSwgMjksIDMsIDIzMCwgMzEsIDI5LCAzLCAyNDMsIDIwNywgMjksIDM4LCAyNDMsIDUzLCAyMiwgMjUsIDIzMywgMjMsIAotICAgIDc4LCAyOSwgMzgsIDI1LCAyMzMsIDIzLCA3OCwgMjksIDM4LCAyNDMsIDUzLCA3OCwgMjksIDIyMSwgMTczLCA3OCwgMjksIAotICAgIDIxMSwgMjA4LCAyOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyOSwgMjQ5LCAyMTksIDI5LCAyMjAsIDE1MCwgMjksIDI0OSwgCi0gICAgMjI2LCAyOSwgMjI0LCAxOTksIDI0OSwgMjI2LCAyOSwgMjI0LCAxMywgNzgsIDI5LCAyMjYsIDE1LCAyMjAsIDEzNywgMjksIAotICAgIDIxLCAxMTAsIDI5LCAyMSwgMTA1LCAyOSwgMjEsIDE1OCwgMjksIDIxLCAxNjEsIDI5LCAyMSwgMTg5LCAyOSwgMjEsIDE5NCwgCi0gICAgMjksIDIxLCAxOTgsIDI5LCAyMSwgMTk1LCAyOSwgMjEsIDIwMCwgMjksIDU0LCAyMTYsIDI0NywgMjksIDU0LCAyMTUsIDczLCAKLSAgICAyOSwgNTQsIDIxNiwgMTYyLCAyOSwgNTQsIDI0NCwgMTUsIDI5LCA1NCwgMjQ0LCAxMTQsIDI5LCA1NCwgMjE5LCAxMTEsIAotICAgIDI5LCA1NCwgMjIwLCAxMTYsIDI5LCA1NCwgMjQ1LCAxODQsIDI5LCA1NCwgMjI4LCAxOTUsIDI5LCA1NCwgMjQwLCAyMTAsIAotICAgIDI5LCA1NCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyOSwgMywgMjIxLCAxNzcsIDIzMCwgNDIsIDI5LCAzLCAyMzAsIDM4LCAyOSwgCi0gICAgMywgMjMwLCAzOSwgMjksIDMsIDIzMCwgNDAsIDI5LCAzLCAyMjEsIDE3NywgMjUxLCA4MywgMjksIDMsIDI1MSwgODAsIDI5LCAKLSAgICAzLCAyNTEsIDgxLCAyOSwgMywgMjUxLCA4MiwgMjksIDMsIDIyMSwgMTc3LCAyNDMsIDIxMywgMjksIDMsIDI0MywgMjA5LCAKLSAgICAyOSwgMywgMjQzLCAyMTAsIDI5LCAzLCAyNDMsIDIxMSwgMjksIDMsIDIyMSwgMTc3LCAyMjQsIDExNCwgMjksIDMsIDIyNCwgCi0gICAgMTEwLCAyOSwgMywgMjI0LCAxMTEsIDI5LCAzLCAyMjQsIDExMiwgMjksIDIxNiwgMzEsIDE2NCwgMjEwLCAyNDcsIDI5LCAKLSAgICAyMTYsIDMxLCAxNjQsIDI0OCwgNDEsIDI5LCAyMTYsIDMxLCAxNjQsIDIyMiwgMjM4LCAyOSwgMjE2LCAzMSwgMTY0LCAyMTksIAotICAgIDI1MSwgMjIyLCAyMzgsIDI5LCAyMTYsIDMxLCAxNjQsIDI0NywgMjM1LCAyOSwgMjE2LCAzMSwgMTY0LCAyMzQsIDE2NCwgCi0gICAgMjksIDIxNiwgMzEsIDE2NCwgMjUwLCA5NCwgMjksIDIxNiwgMzEsIDE2NCwgMjQxLCAxNzcsIDI5LCAyMTYsIDMxLCAxNjQsIAotICAgIDI0OCwgNDAsIDI5LCAyMTYsIDMxLCAxNjQsIDIzMywgMTk0LCAxNjksIDEsIDYxLCAxNjksIDEsIDc1LCAxNjksIDEsIDczLCAKLSAgICAxNjksIDEsIDc2LCAxNjksIDEsIDcwLCAxNjksIDEsIDIxNCwgMTA1LCAxNjksIDEsIDI0MywgMTM1LCAxNjksIDEsIDE3NiwgCi0gICAgMTY5LCAxLCAyNDMsIDYyLCAxNjksIDEsIDI0MiwgMjE0LCAxNjksIDEsIDI0MiwgMTc0LCAxNjksIDEsIDI0MiwgMTEzLCAKLSAgICAxNjksIDEsIDI0MiwgNzksIDE2OSwgMSwgMTYyLCAxNjksIDEsIDI0MSwgMjM4LCAxNjksIDEsIDI0MSwgMTgwLCAxNjksIDEsIAotICAgIDI0MSwgNjgsIDE2OSwgMSwgMjQwLCAyMjIsIDE2OSwgMSwgMjQwLCAyMDEsIDE2OSwgMSwgMjMzLCAxMzUsIDE2OSwgMSwgCi0gICAgMjMzLCA1OCwgMTY5LCAxLCAyMzIsIDI0MSwgMTY5LCAxLCAyMzIsIDE1NiwgMTY5LCAxLCAyMzIsIDk4LCAxNjksIDEsIAotICAgIDIzMiwgNzEsIDE2OSwgMSwgMTg0LCAxNjksIDEsIDIzMSwgOTEsIDE2OSwgMSwgMjMwLCAyMzAsIDE2OSwgMSwgMjMwLCAKLSAgICAxNjEsIDE2OSwgMSwgMjMwLCAxMDIsIDE2OSwgMSwgMTk3LCAxNjksIDEsIDI0MSwgOTAsIDE2OSwgMSwgMjI5LCAyMTMsIAotICAgIDE2OSwgMSwgMjI5LCAxMDcsIDE2OSwgMSwgMjI4LCAyMzMsIDE2OSwgMSwgMjI4LCA3NCwgMTY5LCAxLCAyMjcsIDIzNywgCi0gICAgMTY5LCAxLCAyMjcsIDE3NiwgMTY5LCAxLCAyMjQsIDI5LCAxNjksIDEsIDIyNCwgMTYsIDE2OSwgMSwgMjI0LCA5LCAxNjksIAotICAgIDEsIDIyNCwgMSwgMTY5LCAxLCAyMjMsIDI0NiwgMTY5LCAxLCAyMjMsIDI0NCwgMTY5LCAxLCAyMDYsIDE2OSwgMSwgMjIyLCAKLSAgICA5MSwgMTY5LCAxLCAyMjEsIDE4MSwgMTY5LCAxLCAyMTksIDE5MSwgMTY5LCAxLCAyMTksIDU4LCAxNjksIDEsIDIxOCwgODMsIAotICAgIDE2OSwgMSwgMjE4LCAyLCAxNjksIDEsIDI0OCwgMjIxLCAxNjksIDEsIDIxNywgMTA1LCAxNjksIDEsIDI0OCwgOTAsIDE2OSwgCi0gICAgMSwgMjE3LCAyMiwgMTY5LCAxLCAyNDgsIDMsIDE2OSwgMSwgMjE2LCAxMTcsIDE2OSwgMSwgMjQ3LCAxNDUsIDE2OSwgMSwgCi0gICAgMjQ2LCA3OCwgMTY5LCAxLCAyNDYsIDUwLCAxNjksIDEsIDI0NywgMTU2LCAxNjksIDEsIDIxNiwgNTksIDE2OSwgMSwgMjE2LCAKLSAgICA1OCwgMTY5LCAxLCAyMTYsIDQ3LCAxNjksIDEsIDIxNiwgNDYsIDE2OSwgMSwgMjE2LCA0NSwgMTY5LCAxLCAyMTYsIDQ0LCAKLSAgICAxNjksIDEsIDIxNSwgMTgzLCAxNjksIDEsIDIxNSwgMTc4LCAxNjksIDEsIDIxNSwgMTY3LCAxNjksIDEsIDIxNSwgMTY2LCAKLSAgICAxNjksIDEsIDIxNSwgMTYzLCAxNjksIDEsIDIxNSwgMTYyLCAxNjksIDEsIDIxMiwgNjUsIDE2OSwgMSwgMjEyLCAyMiwgCi0gICAgMTY5LCAxLCAyMTEsIDI1MCwgMTY5LCAxLCAyMTEsIDIyNywgMTY5LCAxLCAyMTEsIDE5NSwgMTY5LCAxLCAyMTEsIDE4MywgCi0gICAgMTY5LCAxLCAxOTEsIDE2OSwgMSwgMjExLCA0NywgMTY5LCAxLCAyMTEsIDgsIDE2OSwgMSwgMjEwLCAyNDQsIDE2OSwgMSwgCi0gICAgMjEwLCAyMTIsIDE2OSwgMSwgMjEwLCAxNzcsIDE4LCAxOSwgMjQwLCAxNjgsIDE4LCAxOSwgNzUsIDE4LCAxOSwgMjU1LCAKLSAgICAzNywgMTgsIDE5LCA3MywgMTgsIDE5LCAyMzYsIDMzLCAxOCwgMTksIDc2LCAxOCwgMTksIDIyNiwgMTgzLCAxOCwgMTksIAotICAgIDIxMSwgMTE2LCAyMjYsIDE4MywgMTgsIDE5LCA3MiwgMjQ1LCAyMDksIDE4LCAxOSwgNzIsIDczLCAxOCwgMTksIDYxLCAxOCwgCi0gICAgMTksIDI1NSwgNzMsIDE4LCAxOSwgMjEyLCAyMiwgMTgsIDE5LCAxNTksIDIxMiwgMjIsIDE4LCAxOSwgMjExLCAyNTAsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTEsIDI1MCwgMTgsIDE5LCAyMTEsIDI0MiwgMTgsIDE5LCAxNTksIDIxMSwgMjQyLCAxOCwgMTksIDIxMSwgCi0gICAgMjI3LCAxOCwgMTksIDE1OSwgMjExLCAyMjcsIDE4LCAxOSwgMjExLCAyMTUsIDE4LCAxOSwgMTU5LCAyMTEsIDIxNSwgMTgsIAotICAgIDE5LCAyMjksIDE5MCwgMjExLCAyMTUsIDE4LCAxOSwgMjEyLCA2NSwgMTgsIDE5LCAxNTksIDIxMiwgNjUsIDE4LCAxOSwgCi0gICAgMjEyLCA2NCwgMTgsIDE5LCAxNTksIDIxMiwgNjQsIDE4LCAxOSwgMjI5LCAxOTAsIDIxMiwgNjQsIDE4LCAxOSwgMjU0LCAKLSAgICAyMDEsIDE4LCAxOSwgMjExLCAxMTYsIDIxMiwgOTgsIDE4LCAxOSwgMjQyLCAxODAsIDIxOCwgMTI5LCAxOCwgMTksIDQwLCAKLSAgICAxNDIsIDE4LCAxOSwgNDAsIDI0MiwgMTM2LCAxOCwgMTksIDQwLCAyNTEsIDE3NSwgMTYzLCAyMjIsIDIzMywgMTgsIDE5LCAKLSAgICA0MCwgMjE2LCAxNCwgMTYzLCAyMjIsIDIzMywgMTgsIDE5LCA0MCwgNDQsIDE2MywgMjIyLCAyMzMsIDE4LCAxOSwgNDAsIAotICAgIDIyMiwgMjMzLCAxOCwgMTksIDQwLCA1MiwgMTQyLCAxOCwgMTksIDQwLCA1MiwgMjE5LCAyNTEsIDY3LCAyMTgsIDkwLCAxOCwgCi0gICAgMTksIDQwLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDE4LCAxOSwgNDAsIDIxOSwgMjUxLCAyMDMsIDkxLCAxOCwgMTksIDQwLCAKLSAgICAyMjUsIDIyLCAxOCwgMTksIDQwLCAxMjQsIDIxNywgODcsIDE4LCAxOSwgMjQ1LCAxNTAsIDE4LCAxOSwgMjM1LCAyNTUsIAotICAgIDE4LCAxOSwgMjI2LCAxOTYsIDE4LCAxOSwgMjU0LCAxMjMsIDE4LCAxOSwgMjI1LCAyMjEsIDE4LCAxOSwgMjI2LCA4NywgCi0gICAgMTgsIDE5LCAyMjUsIDEwOCwgMTgsIDE5LCAyMjUsIDcxLCAxOCwgMTksIDIyNSwgMTYsIDE4LCAxOSwgMjI0LCAyNDksIDE4LCAKLSAgICAxOSwgMjExLCAxMTYsIDIyNCwgMjQ5LCAxOCwgMTksIDcyLCAyNDEsIDIyMCwgMTgsIDE5LCA3MiwgMjQxLCAxODAsIDE4LCAKLSAgICAxOSwgMTkwLCAxOCwgMTksIDIyNiwgODksIDE4LCAxOSwgMjI0LCAxMTIsIDE4LCAxOSwgMTU5LCAyMjQsIDExMiwgMTgsIAotICAgIDE5LCAyMjQsIDExMCwgMTgsIDE5LCAxNTksIDIyNCwgMTEwLCAxOCwgMTksIDIyNCwgMTA5LCAxOCwgMTksIDE1OSwgMjI0LCAKLSAgICAxMDksIDE4LCAxOSwgMjI0LCAxMDcsIDE4LCAxOSwgMTU5LCAyMjQsIDEwNywgMTgsIDE5LCAyMjQsIDEwNiwgMTgsIDE5LCAKLSAgICAxNTksIDIyNCwgMTA2LCAxOCwgMTksIDIyNCwgMTE0LCAxOCwgMTksIDE1OSwgMjI0LCAxMTQsIDE4LCAxOSwgMjI0LCAxMTMsIAotICAgIDE4LCAxOSwgMTU5LCAyMjQsIDExMywgMTgsIDE5LCAyMTEsIDExNiwgMjI0LCAxMTMsIDE4LCAxOSwgMjI2LCAxMDUsIDE4LCAKLSAgICAxOSwgMTU5LCAyMjYsIDEwNSwgMTgsIDE5LCA3MiwgMjQyLCA2MCwgMTgsIDE5LCAyMTcsIDIyLCAxOCwgMTksIDIxNywgOTksIAotICAgIDE4LCAxOSwgMjE2LCAxMTcsIDE4LCAxOSwgMjE2LCAxMDMsIDE4LCAxOSwgMTExLCAxOCwgMTksIDIxNiwgMTcsIDE4LCAxOSwgCi0gICAgMjExLCAxMTYsIDIxNiwgMTcsIDE4LCAxOSwgNzIsIDI0OCwgNzcsIDE4LCAxOSwgNzIsIDI0OCwgMywgMTgsIDE5LCAyMTcsIAotICAgIDEwNSwgMTgsIDE5LCAyMTcsIDEwMSwgMTgsIDE5LCAyMTUsIDc4LCAxOCwgMTksIDE1OSwgMjE1LCA3OCwgMTgsIDE5LCAKLSAgICAyMTUsIDYyLCAxOCwgMTksIDE1OSwgMjE1LCA2MiwgMTgsIDE5LCAyMTUsIDYxLCAxOCwgMTksIDE1OSwgMjE1LCA2MSwgMTgsIAotICAgIDE5LCAxMDUsIDE4LCAxOSwgMTU5LCAxMDUsIDE4LCAxOSwgMjE1LCA1NCwgMTgsIDE5LCAxNTksIDIxNSwgNTQsIDE4LCAxOSwgCi0gICAgMjE1LCA4MCwgMTgsIDE5LCAxNTksIDIxNSwgODAsIDE4LCAxOSwgMjE1LCA3OSwgMTgsIDE5LCAxNTksIDIxNSwgNzksIDE4LCAKLSAgICAxOSwgMjI5LCAxOTAsIDIxNSwgNzksIDE4LCAxOSwgMjE3LCAxNTIsIDE4LCAxOSwgMjE1LCAxNTEsIDE4LCAxOSwgMjE1LCAKLSAgICAxMzUsIDE4LCAxOSwgMjE1LCAxMzMsIDE4LCAxOSwgMjE1LCAxNTYsIDE4LCAxOSwgMjM0LCAxODIsIDE4LCAxOSwgMjM1LCAKLSAgICA3LCAxOCwgMTksIDIzNCwgOTIsIDE4LCAxOSwgMjM0LCA4MywgMTgsIDE5LCAyMzQsIDI4LCAxOCwgMTksIDIzNCwgMTAsIAotICAgIDE4LCAxOSwgMjExLCAxMTYsIDIzNCwgMTAsIDE4LCAxOSwgMTc2LCAxOCwgMTksIDIzNSwgMTAsIDE4LCAxOSwgMjMzLCAKLSAgICAxNzgsIDE4LCAxOSwgMTU5LCAyMzMsIDE3OCwgMTgsIDE5LCAyMzMsIDE3NiwgMTgsIDE5LCAxNTksIDIzMywgMTc2LCAxOCwgCi0gICAgMTksIDIzMywgMTc1LCAxOCwgMTksIDE1OSwgMjMzLCAxNzUsIDE4LCAxOSwgMjMzLCAxNzQsIDE4LCAxOSwgMTU5LCAyMzMsIAotICAgIDE3NCwgMTgsIDE5LCAyMzMsIDE3MywgMTgsIDE5LCAxNTksIDIzMywgMTczLCAxOCwgMTksIDIzMywgMTgyLCAxOCwgMTksIAotICAgIDE1OSwgMjMzLCAxODIsIDE4LCAxOSwgMjMzLCAxODEsIDE4LCAxOSwgMTU5LCAyMzMsIDE4MSwgMTgsIDE5LCAyMjksIDE5MCwgCi0gICAgMjMzLCAxODEsIDE4LCAxOSwgMjM1LCAyMywgMTgsIDE5LCAyMzMsIDE4MywgMTgsIDE5LCAyMTksIDI3LCAyMzQsIDE3NiwgCi0gICAgMTgsIDE5LCAyMTksIDI3LCAyMzQsIDg0LCAxOCwgMTksIDIxOSwgMjcsIDIzNCwgMjMsIDE4LCAxOSwgMjE5LCAyNywgMjM0LCAKLSAgICAyNDgsIDE4LCAxOSwgMjUwLCAxOTAsIDE4LCAxOSwgMjUxLCAzMSwgMTgsIDE5LCAyNTAsIDUxLCAxOCwgMTksIDI1MCwgNDEsIAotICAgIDE4LCAxOSwgMjQ5LCAyMzgsIDE4LCAxOSwgMjQ5LCAxNzQsIDE4LCAxOSwgMjExLCAxMTYsIDI0OSwgMTc0LCAxOCwgMTksIAotICAgIDI1MSwgMzMsIDE4LCAxOSwgMjUxLCAzMiwgMTgsIDE5LCAyNDksIDc5LCAxOCwgMTksIDE1OSwgMjQ5LCA3OSwgMTgsIDE5LCAKLSAgICAyNDksIDc3LCAxOCwgMTksIDE1OSwgMjQ5LCA3NywgMTgsIDE5LCAyNDksIDc2LCAxOCwgMTksIDE1OSwgMjQ5LCA3NiwgMTgsIAotICAgIDE5LCAyNDksIDc1LCAxOCwgMTksIDE1OSwgMjQ5LCA3NSwgMTgsIDE5LCAyNDksIDc0LCAxOCwgMTksIDE1OSwgMjQ5LCA3NCwgCi0gICAgMTgsIDE5LCAyNDksIDgxLCAxOCwgMTksIDE1OSwgMjQ5LCA4MSwgMTgsIDE5LCAyNDksIDgwLCAxOCwgMTksIDE1OSwgMjQ5LCAKLSAgICA4MCwgMTgsIDE5LCAyMjksIDE5MCwgMjQ5LCA4MCwgMTgsIDE5LCAyNTEsIDY2LCAxOCwgMTksIDIyMSwgMjA5LCAyMTYsIAotICAgIDIxMCwgMTgsIDE5LCAyMzEsIDkxLCAxOCwgMTksIDIzMSwgMjM2LCAxOCwgMTksIDIzMCwgMjMwLCAxOCwgMTksIDIzMCwgCi0gICAgMjAxLCAxOCwgMTksIDIzMCwgMTYxLCAxOCwgMTksIDIzMCwgMTMyLCAxOCwgMTksIDIxMSwgMTE2LCAyMzAsIDEzMiwgMTgsIAotICAgIDE5LCAxODQsIDE4LCAxOSwgMjMxLCAyMzcsIDE4LCAxOSwgMjMwLCA0MCwgMTgsIDE5LCAxNTksIDIzMCwgNDAsIDE4LCAxOSwgCi0gICAgMjMwLCAzOCwgMTgsIDE5LCAxNTksIDIzMCwgMzgsIDE4LCAxOSwgMjMwLCAzNywgMTgsIDE5LCAxNTksIDIzMCwgMzcsIDE4LCAKLSAgICAxOSwgMjMwLCAzNiwgMTgsIDE5LCAxNTksIDIzMCwgMzYsIDE4LCAxOSwgMjMwLCAzNSwgMTgsIDE5LCAxNTksIDIzMCwgMzUsIAotICAgIDE4LCAxOSwgMjMwLCA0MiwgMTgsIDE5LCAxNTksIDIzMCwgNDIsIDE4LCAxOSwgMjMwLCA0MSwgMTgsIDE5LCAxNTksIDIzMCwgCi0gICAgNDEsIDE4LCAxOSwgMjI5LCAxOTAsIDIzMCwgNDEsIDE4LCAxOSwgMTkzLCAxOCwgMTksIDE1OSwgMTkzLCAxOCwgMTksIAotICAgIDIzMCwgMjM0LCAxOCwgMTksIDI1MywgMjA1LCAxOTMsIDE4LCAxOSwgMjIxLCAyMDksIDE5MywgMTgsIDE5LCAyMjksIDEwNywgCi0gICAgMTgsIDE5LCAyMjksIDIyNCwgMTgsIDE5LCAyMjgsIDIzMywgMTgsIDE5LCAyMjgsIDIwOCwgMTgsIDE5LCAyMjgsIDc0LCAKLSAgICAxOCwgMTksIDIyOCwgNjQsIDE4LCAxOSwgMjExLCAxMTYsIDIyOCwgNjQsIDE4LCAxOSwgMTk3LCAxOCwgMTksIDIyOSwgCi0gICAgMjI1LCAxOCwgMTksIDIyNywgMTcyLCAxOCwgMTksIDE1OSwgMjI3LCAxNzIsIDE4LCAxOSwgMjI3LCAxNzQsIDE4LCAxOSwgCi0gICAgMTU5LCAyMjcsIDE3NCwgMTgsIDE5LCAyMjcsIDE3MywgMTgsIDE5LCAxNTksIDIyNywgMTczLCAxOCwgMTksIDIyOSwgMTkwLCAKLSAgICAyMjcsIDE3MywgMTgsIDE5LCAyMzAsIDI1LCAxOCwgMTksIDcyLCAyMjksIDc5LCAxOCwgMTksIDIyOCwgMjM4LCAxOCwgMTksIAotICAgIDIzMywgNTgsIDE4LCAxOSwgMjMzLCAxMzMsIDE4LCAxOSwgMjMyLCAyNDEsIDE4LCAxOSwgMjMyLCAyMjcsIDE4LCAxOSwgCi0gICAgMjMyLCAxNTYsIDE4LCAxOSwgMjMyLCAxMjcsIDE4LCAxOSwgMjExLCAxMTYsIDIzMiwgMTI3LCAxOCwgMTksIDIzMywgMTM1LCAKLSAgICAxOCwgMTksIDIzMywgMTM0LCAxOCwgMTksIDIzMiwgNjgsIDE4LCAxOSwgMTU5LCAyMzIsIDY4LCAxOCwgMTksIDIzMiwgNjcsIAotICAgIDE4LCAxOSwgMTU5LCAyMzIsIDY3LCAxOCwgMTksIDIzMiwgNjYsIDE4LCAxOSwgMTU5LCAyMzIsIDY2LCAxOCwgMTksIDIzMiwgCi0gICAgNjUsIDE4LCAxOSwgMTU5LCAyMzIsIDY1LCAxOCwgMTksIDIzMiwgNjQsIDE4LCAxOSwgMTU5LCAyMzIsIDY0LCAxOCwgMTksIAotICAgIDIzMiwgNzAsIDE4LCAxOSwgMTU5LCAyMzIsIDcwLCAxOCwgMTksIDIzMiwgNjksIDE4LCAxOSwgMTU5LCAyMzIsIDY5LCAxOCwgCi0gICAgMTksIDE1NiwgMTgsIDE5LCAxNTksIDE1NiwgMTgsIDE5LCAxNDcsIDE1NiwgMTgsIDE5LCAyMjEsIDE4MSwgMTgsIDE5LCAKLSAgICAyMjIsIDI5LCAxOCwgMTksIDIxOSwgMTkxLCAxOCwgMTksIDIxOSwgMTc1LCAxOCwgMTksIDIxOSwgNTgsIDE4LCAxOSwgCi0gICAgMjE5LCA0MCwgMTgsIDE5LCAyMTEsIDExNiwgMjE5LCA0MCwgMTgsIDE5LCAyMDYsIDE4LCAxOSwgMjIyLCAzMSwgMTgsIDE5LCAKLSAgICAyMTcsIDI0OSwgMTgsIDE5LCAxNTksIDIxNywgMjQ5LCAxOCwgMTksIDIxNywgMjQzLCAxOCwgMTksIDE1OSwgMjE3LCAyNDMsIAotICAgIDE4LCAxOSwgMjE3LCAyNDIsIDE4LCAxOSwgMTU5LCAyMTcsIDI0MiwgMTgsIDE5LCAyMTcsIDIzOCwgMTgsIDE5LCAxNTksIAotICAgIDIxNywgMjM4LCAxOCwgMTksIDIxNywgMjM3LCAxOCwgMTksIDE1OSwgMjE3LCAyMzcsIDE4LCAxOSwgMjE3LCAyNTMsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTcsIDI1MywgMTgsIDE5LCAyMTcsIDI1MiwgMTgsIDE5LCAxNTksIDIxNywgMjUyLCAxOCwgMTksIDIyOSwgCi0gICAgMTkwLCAyMTcsIDI1MiwgMTgsIDE5LCAyMjIsIDkxLCAxOCwgMTksIDI1MywgMjA1LCAyMjIsIDkxLCAxOCwgMTksIDIxNywgCi0gICAgMjU0LCAxOCwgMTksIDI1MSwgMjE4LCAyMjIsIDkxLCAxOCwgMTksIDIzMCwgMTI3LCAyMTksIDEwOCwgMTgsIDE5LCAyMjksIAotICAgIDE5MCwgMjE5LCA5OSwgMTgsIDE5LCAyMjksIDE5MCwgMjIyLCA4OSwgMTgsIDE5LCAyMjksIDE5MCwgMjE4LCAyMzUsIDE4LCAKLSAgICAxOSwgMjI5LCAxOTAsIDIxOCwgODYsIDE4LCAxOSwgMjI5LCAxOTAsIDIxOSwgOTgsIDE4LCAxOSwgMjI5LCAxOTAsIDIyMSwgCi0gICAgMTg0LCAxOCwgMTksIDIyMCwgNjMsIDE4LCAxOSwgMjIwLCAzMiwgMTgsIDE5LCAyMjAsIDI3LCAxOCwgMTksIDIyMCwgNywgCi0gICAgMTgsIDE5LCAyMjAsIDEsIDE4LCAxOSwgMjIwLCAxMDIsIDE4LCAxOSwgMjIwLCA5OCwgMTgsIDE5LCAyMTksIDIwNiwgMTgsIAotICAgIDE5LCAxNTksIDIxOSwgMjA2LCAxOCwgMTksIDIxOSwgMjA1LCAxOCwgMTksIDE1OSwgMjE5LCAyMDUsIDE4LCAxOSwgMjE5LCAKLSAgICAyMDQsIDE4LCAxOSwgMTU5LCAyMTksIDIwNCwgMTgsIDE5LCAyMTksIDIwMywgMTgsIDE5LCAxNTksIDIxOSwgMjAzLCAxOCwgCi0gICAgMTksIDIxOSwgMjAyLCAxOCwgMTksIDE1OSwgMjE5LCAyMDIsIDE4LCAxOSwgMjE5LCAyMDgsIDE4LCAxOSwgMTU5LCAyMTksIAotICAgIDIwOCwgMTgsIDE5LCAyMTksIDIwNywgMTgsIDE5LCAxNTksIDIxOSwgMjA3LCAxOCwgMTksIDIyMCwgMTA0LCAxOCwgMTksIAotICAgIDIxMSwgNDcsIDE4LCAxOSwgMjExLCAxMDEsIDE4LCAxOSwgMjExLCA4LCAxOCwgMTksIDIxMCwgMjU1LCAxOCwgMTksIDIxMCwgCi0gICAgMjQ0LCAxOCwgMTksIDIxMCwgMjI5LCAxOCwgMTksIDIxMSwgMTE2LCAyMTAsIDIyOSwgMTgsIDE5LCAxOTEsIDE4LCAxOSwgCi0gICAgMjExLCAxMDMsIDE4LCAxOSwgMjEwLCAxNzQsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NCwgMTgsIDE5LCAyMTAsIDE3MywgMTgsIAotICAgIDE5LCAxNTksIDIxMCwgMTczLCAxOCwgMTksIDIxMCwgMTcyLCAxOCwgMTksIDE1OSwgMjEwLCAxNzIsIDE4LCAxOSwgMjEwLCAKLSAgICAxNzEsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MSwgMTgsIDE5LCAyMTAsIDE3MCwgMTgsIDE5LCAxNTksIDIxMCwgMTcwLCAxOCwgCi0gICAgMTksIDIxMCwgMTc2LCAxOCwgMTksIDE1OSwgMjEwLCAxNzYsIDE4LCAxOSwgMjEwLCAxNzUsIDE4LCAxOSwgMTU5LCAyMTAsIAotICAgIDE3NSwgMTgsIDE5LCAyMjksIDE5MCwgMjEwLCAxNzUsIDE4LCAxOSwgMjExLCAxMTcsIDE4LCAxOSwgMjUyLCA0LCAyMTEsIAotICAgIDExNywgMTgsIDE5LCAxNTksIDIxMSwgMTE3LCAxOCwgMTksIDIyMSwgMjA5LCAyMTEsIDgsIDE4LCAxOSwgMjIzLCAxMjgsIAotICAgIDE4LCAxOSwgMjIzLCAyMjMsIDIyMywgMTI4LCAxOCwgMTksIDE1OSwgMjMzLCA1OCwgMTgsIDE5LCAyMjMsIDE4MywgMTgsIAotICAgIDE5LCAyMjMsIDM1LCAxOCwgMTksIDIyMiwgMjM5LCAxOCwgMTksIDIyMiwgMjExLCAxOCwgMTksIDIyMiwgMTk3LCAxOCwgCi0gICAgMTksIDE1OSwgMjMyLCAxNTYsIDE4LCAxOSwgMjA1LCAxOCwgMTksIDIyMywgMTg0LCAxOCwgMTksIDE1OSwgMjMzLCAxMzUsIAotICAgIDE4LCAxOSwgMjIyLCAxMDgsIDE4LCAxOSwgMTU5LCAyMjIsIDEwOCwgMTgsIDE5LCAxNTMsIDE4LCAxOSwgMTU5LCAxNTMsIAotICAgIDE4LCAxOSwgMTQ3LCAxNTMsIDE4LCAxOSwgMjQ0LCAxNTQsIDE4LCAxOSwgMjQ0LCAxOTMsIDE4LCAxOSwgMjQ0LCAxMjEsIAotICAgIDE4LCAxOSwgMjQ0LCAxMDgsIDE4LCAxOSwgMjQ0LCA0MywgMTgsIDE5LCAyNDQsIDM0LCAxOCwgMTksIDI0NCwgMTk2LCAxOCwgCi0gICAgMTksIDI0NCwgMTk1LCAxOCwgMTksIDI0MywgMjEyLCAxOCwgMTksIDE1OSwgMjQzLCAyMTIsIDE4LCAxOSwgMjQ1LCA2LCAKLSAgICAxOCwgMTksIDIxNiwgMTk1LCAxOCwgMTksIDIzMCwgMjMsIDIxNiwgMTk1LCAxOCwgMTksIDIxNiwgMTc1LCAxOCwgMTksIAotICAgIDIzMCwgMjMsIDIxNiwgMTc1LCAxOCwgMTksIDIxNiwgMTcxLCAxOCwgMTksIDIzMCwgMjMsIDIxNiwgMTcxLCAxOCwgMTksIAotICAgIDIxNiwgMTU2LCAxOCwgMTksIDIxNiwgMTUzLCAxOCwgMTksIDIxNiwgMjA4LCAxOCwgMTksIDIxNiwgMjA3LCAxOCwgMTksIAotICAgIDIxNiwgMTI3LCAxOCwgMTksIDE1OSwgMjE2LCAxMjcsIDE4LCAxOSwgMjE2LCAyMTAsIDE4LCAxOSwgMjE1LCAxNDIsIDE4LCAKLSAgICAxOSwgMjE1LCAxNDAsIDE4LCAxOSwgMjE1LCAxMzksIDE4LCAxOSwgMjE1LCAxNDQsIDE4LCAxOSwgMjE1LCAxNDUsIDE4LCAKLSAgICAxOSwgMjE1LCA1MiwgMTgsIDE5LCAyMTUsIDUxLCAxOCwgMTksIDIxNSwgNTAsIDE4LCAxOSwgMjE1LCA1MywgMTgsIDE5LCAKLSAgICAyMjcsIDE5MywgMjQxLCAyMzgsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MSwgMTgwLCAxOCwgMTksIDIyNywgMTkzLCAyNDEsIAotICAgIDE2MSwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCA2OCwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCA1MywgMTgsIDE5LCAyMjcsIAotICAgIDE5MywgMTYyLCAxOCwgMTksIDIyNywgMTkzLCAyNDIsIDQ2LCAxOCwgMTksIDIyNywgMTkzLCAyNDIsIDYwLCAxOCwgMTksIAotICAgIDIyNywgMTkyLCAyNDIsIDYwLCAxOCwgMTksIDI0MSwgMTU0LCAxOCwgMTksIDIyNCwgODQsIDE4LCAxOSwgMjI0LCA1MywgCi0gICAgMTgsIDE5LCAyMjQsIDQ4LCAxOCwgMTksIDIyNCwgNDIsIDE4LCAxOSwgMjI0LCAzNywgMTgsIDE5LCAyMjQsIDg4LCAxOCwgCi0gICAgMTksIDIyNCwgODcsIDE4LCAxOSwgMjI0LCA5NiwgMTgsIDE5LCAyMTYsIDU1LCAxOCwgMTksIDIxNiwgNTMsIDE4LCAxOSwgCi0gICAgMjE2LCA1MiwgMTgsIDE5LCAyMTYsIDU2LCAxOCwgMTksIDE1OSwgMjIzLCAxMjgsIDE4LCAxOSwgMTU5LCAyMjMsIDM1LCAKLSAgICAxOCwgMTksIDE1OSwgMjIyLCAyMTEsIDE4LCAxOSwgMTU5LCAyMDUsIDE4LCAxOSwgMjI5LCA3NSwgMTgsIDE5LCAyMjksIAotICAgIDI3LCAxOCwgMTksIDIyOSwgMjMsIDE4LCAxOSwgMjI5LCA0LCAxOCwgMTksIDIyOCwgMjU1LCAxOCwgMTksIDIyOSwgNzcsIAotICAgIDE4LCAxOSwgMjI5LCA3NiwgMTgsIDE5LCAyMjksIDc5LCAxOCwgMTksIDIyOCwgMTAzLCAxOCwgMTksIDIyMSwgMjA5LCAKLSAgICAyMjAsIDYzLCAxOCwgMTksIDIyMSwgMjA5LCAyMjAsIDMyLCAxOCwgMTksIDIyMSwgMjA5LCAyMjAsIDcsIDE4LCAxOSwgCi0gICAgMjIxLCAyMDksIDIyMCwgMTAyLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDE5NSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAKLSAgICAxNzUsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTU2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDIwOCwgMTgsIDE5LCAyMTEsIAotICAgIDIxMywgMjE2LCAyMTAsIDE4LCAxOSwgMjMyLCAyNDgsIDE4LCAxOSwgMjMyLCAyNDcsIDE4LCAxOSwgMjMyLCAyNDYsIDE4LCAKLSAgICAxOSwgMjMyLCAyNDUsIDE4LCAxOSwgMjMyLCAyNTQsIDE4LCAxOSwgMjMyLCAyNTMsIDE4LCAxOSwgMjMyLCAyNTUsIDE4LCAKLSAgICAxOSwgMjE2LCAyMDksIDIxNiwgMTk1LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDE3NSwgMTgsIDE5LCAyMTYsIDIwOSwgCi0gICAgMjE2LCAxNzEsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMTU2LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDE1MywgMTgsIDE5LCAKLSAgICAyMTYsIDIwOSwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMjA3LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIAotICAgIDIxMCwgMTgsIDE5LCAyNTQsIDE4OSwgMjUzLCAxNTgsIDE4LCAxOSwgMjUxLCAyMTgsIDc1LCAxOCwgMTksIDI1MSwgMjE4LCAKLSAgICA3MywgMTgsIDE5LCAyNTEsIDIxOCwgNzYsIDE4LCAxOSwgMjUxLCAyMTgsIDYxLCAxOCwgMTksIDI1MSwgMjE4LCAyMTIsIAotICAgIDIyLCAxOCwgMTksIDI1MSwgMjE4LCAyMTEsIDI1MCwgMTgsIDE5LCAyNTEsIDIxOCwgMjExLCAyMjcsIDE4LCAxOSwgMjUxLCAKLSAgICAyMTgsIDIxMiwgNjUsIDE4LCAxOSwgMjUxLCAyMTgsIDIyOSwgMTA3LCAxOCwgMTksIDI1MSwgMjE4LCAyMjgsIDIzMywgMTgsIAotICAgIDE5LCAyNTEsIDIxOCwgMjI4LCA3NCwgMTgsIDE5LCAyNTEsIDIxOCwgMTk3LCAxOCwgMTksIDI1MSwgMjE4LCAyMzQsIDE4MiwgCi0gICAgMTgsIDE5LCAyNTEsIDIxOCwgMjM0LCA5MiwgMTgsIDE5LCAyNTEsIDIxOCwgMjM0LCAyOCwgMTgsIDE5LCAyNTEsIDIxOCwgCi0gICAgMTc2LCAxOCwgMTksIDIyMSwgMjA5LCAyNDEsIDIzOCwgMTgsIDE5LCAyMjEsIDIwOSwgMjQxLCAxODAsIDE4LCAxOSwgMjIxLCAKLSAgICAyMDksIDI0MSwgNjgsIDE4LCAxOSwgMjIxLCAyMDksIDE2MiwgMTgsIDE5LCA3MiwgMjQyLCAyMjAsIDE4LCAxOSwgNzIsIAotICAgIDI0MiwgMjI0LCAxOCwgMTksIDcyLCAyNDIsIDIzNiwgMTgsIDE5LCA3MiwgMjQyLCAyMzUsIDE4LCAxOSwgNzIsIDI0MiwgCi0gICAgMjI1LCAxOCwgMTksIDcyLCAyNDIsIDI0OSwgMTgsIDE5LCA3MiwgMjIyLCAxNDAsIDE4LCAxOSwgNzIsIDIyMiwgMjExLCAKLSAgICAxOCwgMTksIDcyLCAyMjMsIDEyOCwgMTgsIDE5LCA3MiwgMjIzLCAxMDgsIDE4LCAxOSwgNzIsIDIyMywgMzUsIDE4LCAxOSwgCi0gICAgNzIsIDIwNSwgMTgsIDE5LCA3MiwgMjExLCAxOTUsIDE4LCAxOSwgNzIsIDIxMSwgMjI3LCAxOCwgMTksIDcyLCAyMTIsIDIyLCAKLSAgICAxOCwgMTksIDcyLCAyMTIsIDE3LCAxOCwgMTksIDcyLCAyMTEsIDI1MCwgMTgsIDE5LCA3MiwgMjEyLCA2NSwgMTgsIDE5LCAKLSAgICA3MiwgMjQwLCAxOTQsIDE4LCAxOSwgNzIsIDI0MCwgMTk1LCAxOCwgMTksIDcyLCAyNDAsIDE5OCwgMTgsIDE5LCA3MiwgCi0gICAgMjQwLCAxOTcsIDE4LCAxOSwgNzIsIDI0MCwgMTk2LCAxOCwgMTksIDcyLCAyNDAsIDIwMCwgMTgsIDE5LCA3MiwgMjE2LCAKLSAgICAxMzYsIDE4LCAxOSwgNzIsIDIxNiwgMTU2LCAxOCwgMTksIDcyLCAyMTYsIDE5NSwgMTgsIDE5LCA3MiwgMjE2LCAxOTQsIAotICAgIDE4LCAxOSwgNzIsIDIxNiwgMTc1LCAxOCwgMTksIDcyLCAyMTYsIDIwOCwgMTgsIDE5LCA3MiwgMjE1LCAxMjMsIDE4LCAxOSwgCi0gICAgNzIsIDIxNSwgMTMzLCAxOCwgMTksIDcyLCAyMTUsIDE1MSwgMTgsIDE5LCA3MiwgMjE1LCAxNTAsIDE4LCAxOSwgNzIsIAotICAgIDIxNSwgMTM1LCAxOCwgMTksIDcyLCAyMTUsIDE1NiwgMTgsIDE5LCA3MiwgMjI0LCAxNTAsIDE4LCAxOSwgNzIsIDIyNSwgCi0gICAgMTYsIDE4LCAxOSwgNzIsIDIyNSwgMjIxLCAxOCwgMTksIDcyLCAyMjUsIDIxMSwgMTgsIDE5LCA3MiwgMjI1LCAxMDgsIDE4LCAKLSAgICAxOSwgNzIsIDE5MCwgMTgsIDE5LCA3MiwgMjI2LCAxMDUsIDE4LCAxOSwgNzIsIDI0MiwgMTEzLCAxOCwgMTksIDcyLCAyNDIsIAotICAgIDE3NCwgMTgsIDE5LCA3MiwgMjQzLCA2MiwgMTgsIDE5LCA3MiwgMjQzLCA1NSwgMTgsIDE5LCA3MiwgMjQyLCAyMTQsIDE4LCAKLSAgICAxOSwgNzIsIDI0MywgMTM1LCAxOCwgMTksIDcyLCAyMzQsIDEwMCwgMTgsIDE5LCA3MiwgMjM0LCAxMDUsIDE4LCAxOSwgNzIsIAotICAgIDIzNCwgMTE5LCAxOCwgMTksIDcyLCAyMzQsIDExOCwgMTgsIDE5LCA3MiwgMjM0LCAxMTIsIDE4LCAxOSwgNzIsIDIzNCwgCi0gICAgMTMyLCAxOCwgMTksIDcyLCAyMzQsIDQxLCAxOCwgMTksIDcyLCAyMzQsIDQyLCAxOCwgMTksIDcyLCAyMzQsIDQ1LCAxOCwgCi0gICAgMTksIDcyLCAyMzQsIDQ0LCAxOCwgMTksIDcyLCAyMzQsIDQzLCAxOCwgMTksIDcyLCAyMzQsIDQ2LCAxOCwgMTksIDcyLCAKLSAgICAyMzQsIDQ3LCAxOCwgMTksIDcyLCAyMjcsIDIzNywgMTgsIDE5LCA3MiwgMjI4LCA3NCwgMTgsIDE5LCA3MiwgMjI5LCAxMDcsIAotICAgIDE4LCAxOSwgNzIsIDIyOSwgMTAzLCAxOCwgMTksIDcyLCAyMjgsIDIzMywgMTgsIDE5LCA3MiwgMTk3LCAxOCwgMTksIDcyLCAKLSAgICAyMzAsIDEwMiwgMTgsIDE5LCA3MiwgMjMwLCAxNjEsIDE4LCAxOSwgNzIsIDIzMSwgOTEsIDE4LCAxOSwgNzIsIDIzMSwgODAsIAotICAgIDE4LCAxOSwgNzIsIDIzMCwgMjMwLCAxOCwgMTksIDcyLCAxODQsIDE4LCAxOSwgNzIsIDIxMCwgMjEyLCAxOCwgMTksIDcyLCAKLSAgICAyMTAsIDI0NCwgMTgsIDE5LCA3MiwgMjExLCA0NywgMTgsIDE5LCA3MiwgMjExLCA0NCwgMTgsIDE5LCA3MiwgMjExLCA4LCAKLSAgICAxOCwgMTksIDcyLCAxOTEsIDE4LCAxOSwgNzIsIDIzNSwgNTEsIDE4LCAxOSwgMjIxLCAyMDksIDIzNSwgNTEsIDE4LCAxOSwgCi0gICAgNzIsIDIzNSwgNjgsIDE4LCAxOSwgNzIsIDIzNSwgMTI2LCAxOCwgMTksIDcyLCAyMzUsIDEyNCwgMTgsIDE5LCA3MiwgMjM1LCAKLSAgICAxMDgsIDE4LCAxOSwgMjIxLCAyMDksIDIzNSwgMTA4LCAxOCwgMTksIDcyLCAyMzUsIDE0MSwgMTgsIDE5LCA3MiwgMjM1LCAKLSAgICA4MSwgMTgsIDE5LCA3MiwgMjM1LCA4NSwgMTgsIDE5LCA3MiwgMjM1LCA5NSwgMTgsIDE5LCA3MiwgMjM1LCA5NCwgMTgsIAotICAgIDE5LCA3MiwgMjM1LCA5MywgMTgsIDE5LCA3MiwgMjM1LCA5NiwgMTgsIDE5LCA3MiwgMjMyLCA5OCwgMTgsIDE5LCA3MiwgCi0gICAgMjMyLCAxNTYsIDE4LCAxOSwgNzIsIDIzMywgNTgsIDE4LCAxOSwgNzIsIDIzMywgNTAsIDE4LCAxOSwgNzIsIDIzMiwgMjQxLCAKLSAgICAxOCwgMTksIDcyLCAyMzMsIDEzNSwgMTgsIDE5LCA3MiwgMjQ3LCAxNDksIDE4LCAxOSwgNzIsIDI0NywgMTUwLCAxOCwgMTksIAotICAgIDcyLCAyNDcsIDE1NSwgMTgsIDE5LCA3MiwgMjQ3LCAxNTQsIDE4LCAxOSwgNzIsIDI0NywgMTUxLCAxOCwgMTksIDcyLCAKLSAgICAyNDcsIDE1NiwgMTgsIDE5LCA3MiwgMjMyLCAyNDQsIDE4LCAxOSwgNzIsIDIzMiwgMjQ2LCAxOCwgMTksIDcyLCAyMzIsIAotICAgIDI1MCwgMTgsIDE5LCA3MiwgMjMyLCAyNDksIDE4LCAxOSwgNzIsIDIzMiwgMjQ4LCAxOCwgMTksIDcyLCAyMzIsIDI1NCwgCi0gICAgMTgsIDE5LCA3MiwgMjE2LCA1MCwgMTgsIDE5LCA3MiwgMjE2LCA1MiwgMTgsIDE5LCA3MiwgMjE2LCA1NSwgMTgsIDE5LCAKLSAgICA3MiwgMjE2LCA1NCwgMTgsIDE5LCA3MiwgMjE2LCA1MywgMTgsIDE5LCA3MiwgMjE2LCA1NiwgMTgsIDE5LCA3MiwgMjE2LCAKLSAgICA0NSwgMTgsIDE5LCA3MiwgMjE2LCA0NiwgMTgsIDE5LCA3MiwgMjE2LCA1OCwgMTgsIDE5LCA3MiwgMjE2LCA1NywgMTgsIAotICAgIDE5LCA3MiwgMjE2LCA0NywgMTgsIDE5LCA3MiwgMjE2LCA1OSwgMTgsIDE5LCA3MiwgMjEwLCAxMywgMTgsIDE5LCA3MiwgCi0gICAgMjEwLCAyMywgMTgsIDE5LCA3MiwgMjEwLCA5NCwgMTgsIDE5LCA3MiwgMjEwLCA5MiwgMTgsIDE5LCA3MiwgMjEwLCA0NCwgCi0gICAgMTgsIDE5LCA3MiwgMjEwLCAxMTYsIDE4LCAxOSwgNzIsIDIxMCwgMTU5LCAxOCwgMTksIDcyLCA2NSwgMjEwLCAxNTksIDE4LCAKLSAgICAxOSwgNzIsIDI0NiwgMjgsIDE4LCAxOSwgNzIsIDI0NiwgMjksIDE4LCAxOSwgNzIsIDI0NiwgMzYsIDE4LCAxOSwgNzIsIAotICAgIDI0NiwgMzUsIDE4LCAxOSwgNzIsIDI0NiwgMzEsIDE4LCAxOSwgNzIsIDI0NiwgMzgsIDE4LCAxOSwgNzIsIDIxOCwgODMsIAotICAgIDE4LCAxOSwgNzIsIDIxOSwgNTgsIDE4LCAxOSwgNzIsIDIyMSwgMTgxLCAxOCwgMTksIDcyLCAyMjEsIDE3MCwgMTgsIDE5LCAKLSAgICA3MiwgMjE5LCAxOTEsIDE4LCAxOSwgNzIsIDIwNiwgMTgsIDE5LCA3MiwgMjE5LCAyMjUsIDE4LCAxOSwgNzIsIDIyMCwgNywgCi0gICAgMTgsIDE5LCA3MiwgMjIwLCA2MywgMTgsIDE5LCA3MiwgMjIwLCA2MSwgMTgsIDE5LCA3MiwgMjIwLCAzMiwgMTgsIDE5LCAKLSAgICA3MiwgMjIwLCAxMDIsIDE4LCAxOSwgNzIsIDIyMCwgMTA0LCAxOCwgMTksIDcyLCAyMTUsIDE2MywgMTgsIDE5LCA3MiwgCi0gICAgMjE1LCAxNjYsIDE4LCAxOSwgNzIsIDIxNSwgMTc4LCAxOCwgMTksIDcyLCAyMTUsIDE3NywgMTgsIDE5LCA3MiwgMjE1LCAKLSAgICAxNjcsIDE4LCAxOSwgNzIsIDIxNSwgMTgzLCAxOCwgMTksIDcyLCAyNTAsIDY5LCAxOCwgMTksIDcyLCAyNTAsIDg2LCAxOCwgCi0gICAgMTksIDcyLCAyNTAsIDEzMSwgMTgsIDE5LCA3MiwgMjUwLCAxMjgsIDE4LCAxOSwgNzIsIDI1MCwgMTEwLCAxOCwgMTksIDcyLCAKLSAgICAyNTAsIDE1NywgMTgsIDE5LCA3MiwgMjE1LCAxMjYsIDE4LCAxOSwgNzIsIDIxNSwgMTI3LCAxOCwgMTksIDcyLCAyMTUsIAotICAgIDEzMCwgMTgsIDE5LCA3MiwgMjE1LCAxMjksIDE4LCAxOSwgNzIsIDIxNSwgMTI4LCAxOCwgMTksIDcyLCAyMTUsIDEzMSwgCi0gICAgMTgsIDE5LCAyNTAsIDExMSwgNTAsIDE4LCAxOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAxOCwgMTksIDIyNCwgODAsIDE4LCAKLSAgICAxOSwgMjI5LCA3MywgMTgsIDE5LCAyMjgsIDEwMCwgMTgsIDE5LCAyMjgsIDk5LCAxOCwgMTksIDIyOCwgOTgsIDE4LCAxOSwgCi0gICAgMjI4LCA5NywgMTgsIDE5LCAyMjgsIDEwMiwgMTgsIDE5LCAyMjgsIDEwMSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjUsIAotICAgIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI0LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyMywgMTgsIDE5LCAyMTEsIDIxMywgCi0gICAgMjE2LCAxMjIsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIxLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyOCwgMTgsIDE5LCAKLSAgICAyMTEsIDIxMywgMjE2LCAxMjcsIDE4LCAxOSwgMjExLCAyMTMsIDQwLCAyMTYsIDIxMCwgMTgsIDE5LCAyNTEsIDIxOCwgCi0gICAgMjEyLCA5OCwgMjI2LCAyMjYsIDIxOSwgMTksIDc4LCAyMjYsIDIyNiwgMSwgMjUyLCA0OCwgMjI2LCAyMjYsIDEsIDIzMiwgCi0gICAgODcsIDIyNiwgMjI2LCAxLCAyNDQsIDE1MSwgMjI2LCAyMjYsIDEsIDIyMiwgMTUsIDIyNiwgMjI2LCAxLCAyMjgsIDE5MywgCi0gICAgMjI2LCAyMjYsIDEsIDIxNCwgMjI2LCAyMjYsIDIyNiwgMSwgMjQ4LCAxOTcsIDIyNiwgMjI2LCAxLCAyMTYsIDgwLCAyMjYsIAotICAgIDIyNiwgMSwgMjQ5LCAyMjksIDIyNiwgMjI2LCAxLCAyNTAsIDE4MCwgMjI2LCAyMjYsIDEsIDIzMCwgOTEsIDIyNiwgMjI2LCAKLSAgICAxLCAyNDIsIDE1NiwgMjI2LCAyMjYsIDEsIDIyOSwgNjMsIDIyNiwgMjI2LCAxLCAyMTgsIDEyMiwgMjI2LCAyMjYsIDEsIAotICAgIDIyMiwgMTM1LCAyMjYsIDIyNiwgMSwgMjU0LCAxOTgsIDIyNiwgMjI2LCAxLCAyMjYsIDE4NywgMjI2LCAyMjYsIDEsIDIxNCwgCi0gICAgMTUwLCAyMjYsIDIyNiwgMSwgMjQ1LCAyMzEsIDIyNiwgMjI2LCAxLCAyMzUsIDE4OCwgMjI2LCAyMjYsIDEsIDI0NSwgMjMyLCAKLSAgICAyMjYsIDIyNiwgMSwgMjI2LCAxNTgsIDIyNiwgMjI2LCAxLCAyMTQsIDIwNiwgMjI2LCAyMjYsIDEsIDIzNiwgMzksIDIyNiwgCi0gICAgMjI2LCAxLCAyNDUsIDIyOSwgMjI2LCAyMjYsIDEsIDIyNSwgMjAyLCAyMjYsIDIyNiwgMjQ0LCAxNTAsIDc4LCAyMjYsIAotICAgIDIyNiwgMjIzLCA0OSwgMjQ0LCAxNTAsIDc4LCAxNzgsIDEsIDI0NCwgMTQxLCAyNDQsIDEzMywgMjQ0LCAxNTUsIDI0NSwgNiwgCi0gICAgMTc4LCAxLCAyMTQsIDEwNSwgMTc4LCAxLCAyMTQsIDEzNSwgMjE0LCAxNTEsIDcwLCAxNzgsIDEsIDIxMCwgMjE0LCAxNzgsIAotICAgIDEsIDIxMSwgMTE3LCAxNzgsIDEsIDIxMiwgOTgsIDE3OCwgMSwgMjE2LCAxMzAsIDIxNiwgMTI5LCAyMTYsIDE1MSwgMTc4LCAKLSAgICAxLCAyNDUsIDU5LCAxNzgsIDEsIDI1NCwgOTMsIDYxLCAxNzgsIDEsIDIyNiwgMTQzLCA3NiwgMTc4LCAxLCAyNTUsIDE3LCAKLSAgICA2MSwgMTc4LCAxLCAyNTQsIDIyNywgMTc4LCAxLCAyMzIsIDEzMywgNzYsIDE3OCwgMSwgMjE5LCAyNDQsIDc2LCAxNzgsIDEsIAotICAgIDc2LCAxNzgsIDEsIDIyNiwgMjM0LCAxNzgsIDEsIDIyNiwgMTk2LCAxNzgsIDEsIDIyMywgMTY0LCAyMjMsIDE3NywgMjIzLCAKLSAgICA5NCwgMTUzLCAxNzgsIDEsIDIzNCwgMTkzLCAxNzgsIDEsIDI1MCwgMTc3LCAxNzgsIDEsIDIzNCwgMTk0LCAyMzUsIDIzLCAKLSAgICAxNzgsIDEsIDI0MywgMjAyLCAxNzgsIDEsIDI0NSwgMTM4LCAxNzgsIDEsIDI0MywgNTgsIDI0MiwgNjYsIDI0MywgMjAyLCAKLSAgICAxNzgsIDEsIDI0MywgOTYsIDE3OCwgMSwgMjExLCAxODgsIDIxMSwgMTgyLCAyMTIsIDk4LCAxNzgsIDEsIDI0MiwgMzgsIAotICAgIDI0MiwgNjAsIDE3OCwgMSwgMjQyLCA0MiwgMjQyLCA2MCwgMTc4LCAxLCAyMzIsIDEzNSwgMjQyLCA2MCwgMTc4LCAxLCAKLSAgICAyMTksIDI0NywgMjQyLCA2MCwgMTc4LCAxLCAyMjksIDE4NSwgMjI3LCAxNTcsIDIyOSwgMTg2LCAyMzAsIDI1LCAxNzgsIDEsIAotICAgIDIxOSwgMjQ1LCAyMzAsIDI1LCAxNzgsIDEsIDI0NiwgMTE1LCAxNzgsIDEsIDIzNSwgMTY4LCAyMzUsIDE3MiwgMjM1LCAKLSAgICAxNjIsIDczLCAxNzgsIDEsIDc1LCAxNzgsIDEsIDIzNSwgMTE3LCAyMzUsIDE0NCwgMTc4LCAxLCAyNDMsIDQzLCAxNzgsIDEsIAotICAgIDIzMiwgMTM2LCAyNTQsIDI0MywgMTc4LCAxLCAyMTksIDI0OSwgNjEsIDE3OCwgMSwgMjM1LCAxNTQsIDI0NSwgMTEzLCAKLSAgICAxNzgsIDEsIDIyNSwgMTY0LCAyMjUsIDE4NiwgMjI2LCAxMDUsIDE3OCwgMSwgMjU0LCAxNjMsIDI0NSwgMTExLCAxNzgsIDEsIAotICAgIDIxOSwgMjQsIDIyMiwgOTEsIDE3OCwgMSwgMjE5LCAxNzksIDIzMiwgMTMyLCAyMjIsIDkxLCAxNzgsIDEsIDIxOSwgMjQzLCAKLSAgICAyMjIsIDkxLCAxNzgsIDEsIDI1MSwgNjYsIDE3OCwgMSwgMjEwLCAxNTksIDE3OCwgMSwgMjE2LCA2MywgMjE2LCA3MywgCi0gICAgMjE1LCA0MSwgMjE3LCAxNTIsIDE3OCwgMSwgMjE5LCAyNDIsIDIxNywgMTUyLCAxNzgsIDEsIDI0OSwgNjAsIDE3OCwgMSwgCi0gICAgMjUyLCAzMSwgMjUyLCAzNCwgMjUxLCAyMjQsIDI1MywgMTU4LCAxNzgsIDEsIDIxOSwgMjQ4LCAyNTMsIDE1OCwgMTc4LCAxLCAKLSAgICAyNDYsIDExNCwgMTc4LCAxLCAyMjYsIDE3MSwgMTc4LCAxLCAyNDUsIDE5NiwgMjQ1LCAxOTgsIDc1LCAxNzgsIDEsIDIzMSwgCi0gICAgMTc4LCAyMzEsIDE4NiwgMTkzLCAxNzgsIDEsIDIzMiwgMTM0LCAxOTMsIDE3OCwgMSwgMjE5LCAyNDYsIDE5MywgMTc4LCAxLCAKLSAgICAyMzMsIDczLCAyMzMsIDExNCwgMjMyLCAxNDMsIDE1NiwgMTc4LCAxLCAyNDYsIDExNiwgMTc4LCAxLCAyMzUsIDIzMCwgCi0gICAgMTc4LCAxLCAyMzUsIDIzMSwgMTc4LCAxLCAyNDgsIDIxMCwgMjQ4LCAyMTUsIDI0OSwgNjAsIDE3OCwgMSwgMjI2LCAxMzgsIAotICAgIDI0NSwgNTgsIDc2LCAxNzgsIDEsIDI0NSwgMjI3LCAxNzgsIDEsIDIzNSwgMTg3LCAxNzgsIDEsIDI0OSwgNzgsIDE3OCwgMSwgCi0gICAgMjUxLCAxNywgMTc4LCAxLCAyNTAsIDE4OSwgMTc4LCAxLCAyMTgsIDE2MSwgMTc4LCAxLCAyMzIsIDEzMSwgMTc4LCAxLCAKLSAgICAyMTksIDI0MSwgMTc4LCAxLCAyNDAsIDExMCwgMTc4LCAxLCAyMjQsIDk2LCAxNzgsIDEsIDIxMSwgMTc4LCAxNzgsIDIxOSwgCi0gICAgMTU1LCAyMjQsIDE0MCwgMTc4LCAyMzAsIDg1LCAyMjQsIDE0MCwgMTc4LCAyNDksIDEzMSwgMjI0LCAxNDAsIDE3OCwgMjU0LCAKLSAgICA2LCA4NywgMTc4LCAyMTUsIDgyLCA4NywgMTc4LCAyNTIsIDQ2LCA4NywgMjE3LCA4MywgMSwgNjEsIDIxNywgODMsIDEsIAotICAgIDczLCAyMTcsIDgzLCAxLCA3MCwgMjE3LCA4MywgMSwgMTc2LCAyMTcsIDgzLCAxLCAyNDMsIDEzNSwgMjE3LCA4MywgMSwgCi0gICAgMjI5LCA3NywgMjE3LCA4MywgMSwgMjE3LCAxMDUsIDIxNywgODMsIDEsIDI0OCwgMjIxLCAyMTcsIDgzLCAxLCAxOTcsIAotICAgIDIxNywgODMsIDEsIDE5MCwgMjE3LCA4MywgMSwgMjUyLCAxOTEsIDIxNywgODMsIDEsIDE4NCwgMjE3LCA4MywgMSwgMTkxLCAKLSAgICAyMTcsIDgzLCAxLCAyMzMsIDEzNSwgMjE3LCA4MywgMSwgMjEyLCA2NSwgMjE3LCA4MywgMSwgMjA2LCAyMTcsIDgzLCAxLCAKLSAgICAxNjIsIDIxNywgODMsIDI1LCA1LCA3MywgMjE3LCA4MywgMjUsIDUsIDcwLCAyMTcsIDgzLCA1LCAyMTMsIDE1MiwgMjQyLCAKLSAgICA3LCAxLCA2MSwgMjQyLCA3LCAxLCA3MywgMjQyLCA3LCAxLCA3MCwgMjQyLCA3LCAxLCAxNzYsIDI0MiwgNywgMSwgMjQzLCAKLSAgICAxMzUsIDI0MiwgNywgMSwgMjI5LCA3NywgMjQyLCA3LCAxLCAyMTcsIDEwNSwgMjQyLCA3LCAxLCAyNDgsIDIyMSwgMjQyLCAKLSAgICA3LCAxLCAxOTcsIDI0MiwgNywgMSwgMTkwLCAyNDIsIDcsIDEsIDI1MiwgMTkxLCAyNDIsIDcsIDEsIDE4NCwgMjQyLCA3LCAKLSAgICAxLCAxOTEsIDI0MiwgNywgMSwgMjA1LCAyNDIsIDcsIDEsIDIzMywgMTM1LCAyNDIsIDcsIDEsIDIxMiwgNjUsIDI0MiwgNywgCi0gICAgMSwgMjA2LCAyNDIsIDcsIDEsIDE2MiwgMjQyLCA3LCAyNSwgNSwgNzMsIDI0MiwgNywgMjUsIDUsIDcwLCAyNDIsIDcsIDUsIAotICAgIDIyNiwgNDksIDIyNSwgMTI2LCAyMTksIDE1NSwgMjI0LCAxNDAsIDIyNSwgMTI2LCA1MiwgMjI0LCAxNDAsIDI1MSwgMTIwLCAKLSAgICAxLCA2MSwgMjUxLCAxMjAsIDEsIDczLCAyNTEsIDEyMCwgMSwgNzAsIDI1MSwgMTIwLCAxLCAxNzYsIDI1MSwgMTIwLCAxLCAKLSAgICAyNDMsIDEzNSwgMjUxLCAxMjAsIDEsIDIyOSwgNzcsIDI1MSwgMTIwLCAxLCAyMTcsIDEwNSwgMjUxLCAxMjAsIDEsIDI0OCwgCi0gICAgMjIxLCAyNTEsIDEyMCwgMSwgMTk3LCAyNTEsIDEyMCwgMSwgMTkwLCAyNTEsIDEyMCwgMSwgMjUyLCAxOTEsIDI1MSwgMTIwLCAKLSAgICAxLCAxODQsIDI1MSwgMTIwLCAxLCAxOTEsIDI1MSwgMTIwLCAxLCAyMDUsIDI1MSwgMTIwLCAxLCAyMzMsIDEzNSwgMjUxLCAKLSAgICAxMjAsIDEsIDIxMiwgNjUsIDI1MSwgMTIwLCAxLCAyMDYsIDI1MSwgMTIwLCAxLCAxNjIsIDI1MSwgMTIwLCAyNSwgNSwgNzMsIAotICAgIDI1MSwgMTIwLCAyNSwgNSwgNzAsIDIxNywgODIsIDEsIDYxLCAyMTcsIDgyLCAxLCA3MywgMjE3LCA4MiwgMSwgNzAsIDIxNywgCi0gICAgODIsIDEsIDE3NiwgMjE3LCA4MiwgMSwgMjQzLCAxMzUsIDIxNywgODIsIDEsIDIyOSwgNzcsIDIxNywgODIsIDEsIDIxNywgCi0gICAgMTA1LCAyMTcsIDgyLCAxLCAyNDgsIDIyMSwgMjE3LCA4MiwgMSwgMTk3LCAyMTcsIDgyLCAxLCAxOTAsIDIxNywgODIsIDEsIAotICAgIDI1MiwgMTkxLCAyMTcsIDgyLCAxLCAxODQsIDIxNywgODIsIDEsIDE5MSwgMjE3LCA4MiwgMSwgMjMzLCAxMzUsIDIxNywgCi0gICAgODIsIDEsIDIxMiwgNjUsIDIxNywgODIsIDEsIDIwNiwgMjE3LCA4MiwgMjUsIDUsIDczLCAyMTcsIDgyLCAyNSwgNSwgNzAsIAotICAgIDY5LCAxLCAxNzYsIDY5LCAxLCAyMzQsIDEzMiwgNjksIDEsIDIzNCwgMjgsIDY5LCAxLCAyMzQsIDEwNSwgNjksIDEsIDIyOSwgCi0gICAgNCwgNjksIDEsIDI1MSwgMzMsIDY5LCAxLCAyNTAsIDE1NywgNjksIDEsIDI0OSwgMjM4LCA2OSwgMSwgMjUwLCA4NiwgNjksIAotICAgIDEsIDIyNywgMTM0LCA2OSwgMSwgMjQ4LCAyMjEsIDY5LCAxLCAyMTUsIDE0NCwgNjksIDEsIDI0NywgMTQ1LCA2OSwgMSwgCi0gICAgMjE1LCAxMzksIDY5LCAxLCAyMjgsIDgwLCA2OSwgMSwgMjE3LCAxMDUsIDY5LCAxLCAyMTYsIDIwOCwgNjksIDEsIDExMSwgCi0gICAgNjksIDEsIDIxNiwgMTU2LCA2OSwgMSwgMjI4LCA3NCwgNjksIDEsIDI1MiwgMTkxLCA2OSwgMSwgMjI1LCAxNDcsIDY5LCAxLCAKLSAgICAyMjUsIDE2LCA2OSwgMSwgMjI1LCAxMjEsIDY5LCAxLCAyMzAsIDE2MSwgNjksIDEsIDIxMCwgMjQ0LCA2OSwgMSwgMjIyLCAKLSAgICAyMTEsIDY5LCAxLCAyMzIsIDE1NiwgNjksIDEsIDIxMywgMTM4LCA2OSwgMSwgMjIwLCAxMDIsIDY5LCAxLCAyMTgsIDE4NCwgCi0gICAgNjksIDEsIDIwNiwgNjksIDEsIDE2MiwgNjksIDEsIDIzMywgMTM1LCA2OSwgMSwgMjI0LCA4OCwgNjksIDIzNSwgMjQzLCAKLSAgICAyNSwgMjI0LCA3NCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA4NywgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA1MywgNjksIAotICAgIDIzNSwgMjQzLCAyNSwgMjI0LCA0OCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAzMCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAKLSAgICAyLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjMsIDI0NiwgNjksIDIzNSwgMjQzLCAyNSwgMjIzLCAyNDUsIDY5LCAyMzUsIDI0MywgCi0gICAgMjUsIDIyMiwgMTAwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjIsIDkzLCA2OSwgMjM1LCAyNDMsIDI1LCAyMzIsIDYyLCA2OSwgCi0gICAgMjM1LCAyNDMsIDI1LCAyMzIsIDUyLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDY5LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIAotICAgIDgwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDM4LCAyMTUsIDQ5LCAxMTAsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgMzgsIAotICAgIDIxNSwgNDksIDEwNSwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA3MCwgNjksIDI1LCAyMzUsIDIyOSwgMjU0LCA0NSwgNjksIAotICAgIDI1LCAyMzUsIDIyOSwgMjU1LCA3MywgNjksIDI1LCA1LCAyNTUsIDczLCA2OSwgMjUsIDUsIDczLCA2OSwgMjUsIDUsIDIzNiwgCi0gICAgMzMsIDY5LCAyNSwgNSwgMjExLCAxMTcsIDY5LCAyNSwgNSwgMjEwLCAxNjksIDY5LCAyNSwgNSwgNzAsIDY5LCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDY5LCAyNSwgNSwgMjE0LCAyMjksIDY5LCAyNSwgNSwgMjI2LCAyMzQsIDY5LCAyNSwgNSwgMTkxLCA2OSwgCi0gICAgMjUsIDUsIDIzNiwgNjAsIDY5LCAyNSwgNSwgNzUsIDY5LCAyNSwgNSwgMjU0LCAyNDMsIDY5LCAyNSwgNSwgMjU0LCAyMDEsIAotICAgIDY5LCAyNSwgNSwgMjI2LCAxODMsIDY5LCAyNSwgNSwgMjUzLCAxOTIsIDY5LCA1LCAyMjgsIDIwNiwgNjksIDUsIDIyMywgCi0gICAgMTI2LCA2OSwgNSwgMjEwLCAxODAsIDY5LCA1LCAyMzAsIDUyLCA2OSwgNSwgMjE1LCAyMTMsIDY5LCA1LCAyNTIsIDE0MywgCi0gICAgNjksIDUsIDIyMiwgMjA2LCA2OSwgNSwgMjE2LCA0MCwgNjksIDUsIDIzNCwgMjQxLCA2OSwgNSwgMjU0LCAyMDMsIDY5LCA1LCAKLSAgICAyMjEsIDI0NCwgMjIxLCAyMzgsIDY5LCA1LCAyMTMsIDE0OSwgNjksIDUsIDI0OSwgMjMyLCA2OSwgNSwgMjUyLCAxMTcsIAotICAgIDY5LCA1LCAyMzQsIDEyNSwgNjksIDUsIDI1MiwgMTM3LCA2OSwgNSwgMjUxLCA5LCAyMjUsIDcyLCAyMzMsIDE4NywgNjksIAotICAgIDUsIDIzMywgMzAsIDIxNiwgMTcsIDY5LCA1LCAyNTIsIDIwLCA2OSwgNSwgMjI1LCAxMjMsIDIzMCwgOTksIDY5LCA1LCAKLSAgICAyMzQsIDksIDY5LCAyNDksIDk4LCAxNiwgMjIzLCAyOCwgNjksIDUsIDI1MywgMTc0LCA2OSwgNSwgMjUzLCAxOTUsIDY5LCAKLSAgICAyMSwgMjEwLCA4NiwgNjksIDIxLCAxMTAsIDY5LCAyMSwgMTA1LCA2OSwgMjEsIDE1OCwgNjksIDIxLCAxNjEsIDY5LCAyMSwgCi0gICAgMTg5LCA2OSwgMjEsIDE5NCwgNjksIDIxLCAxOTgsIDY5LCAyMSwgMTk1LCA2OSwgMjEsIDIwMCwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjE5LCA0MywgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjMwLCA3MSwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjI1LCA3MSwgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjUyLCA0OSwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjUxLCAxMDMsIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDIyNCwgMjE1LCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyMjQsIDIwOSwgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjI0LCAyMDcsIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDIyNCwgMjEzLCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyMjQsIDIxMSwgODMsIDI1MSwgMjM2LCAKLSAgICA4MywgMjQ1LCAxNjMsIDgzLCAyNDksIDIxOSwgODMsIDI0MywgMjI5LCAyMTgsIDEyOSwgODMsIDI0OSwgMjI2LCA4MywgCi0gICAgMjQ0LCAxMSwgMjQ3LCAxMTgsIDgzLCAyMTYsIDM5LCAyMTksIDUyLCAyNDAsIDE2OCwgODMsIDIxOSwgMTkwLCAzLCAyNTEsIAotICAgIDE3MiwgMjMxLCAxNTQsIDgzLCAyMzEsIDE4MywgMjQ5LCAyMTksIDgzLCAyMzEsIDE4MywgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA4MywgMjI4LCAxOTEsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgMTU3LCAxMTAsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgCi0gICAgMTU3LCAxMDUsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgMTU3LCAxNTgsIDgzLCAyNSwgMjIwLCAxMzcsIDgzLCAyMSwgMjEwLCAKLSAgICA4NiwgODMsIDIxLCAxMTAsIDgzLCAyMSwgMTA1LCA4MywgMjEsIDE1OCwgODMsIDIxLCAxNjEsIDgzLCAyMSwgMTg5LCA4MywgCi0gICAgMjEsIDE5NCwgODMsIDIxLCAxOTgsIDgzLCAyMSwgMTk1LCA4MywgMjEsIDIwMCwgODMsIDEsIDYxLCA4MywgMSwgNzUsIDgzLCAKLSAgICAxLCA3MywgODMsIDEsIDc2LCA4MywgMSwgNzAsIDgzLCAxLCAyMjYsIDIzNCwgODMsIDEsIDIxNCwgMjE0LCA4MywgMSwgCi0gICAgMjQ1LCAyMDksIDgzLCAxLCAxOTcsIDgzLCAxLCAyNTQsIDExNSwgODMsIDEsIDI1MiwgMTkxLCA4MywgMSwgMTkwLCA4MywgCi0gICAgMSwgMjI0LCA4OCwgODMsIDEsIDI0MywgMTM1LCA4MywgMSwgMTg0LCA4MywgMSwgMjMzLCAxMzUsIDgzLCAxLCAyMDYsIDgzLCAKLSAgICAxLCAyMjAsIDEwMiwgODMsIDEsIDIxNywgMTA1LCA4MywgMSwgMjQ4LCAyMjEsIDgzLCAxLCAyNTAsIDE1NywgODMsIDEsIAotICAgIDIzNSwgMTQxLCA4MywgMSwgMTkxLCA4MywgMSwgMjA1LCA4MywgMSwgMjEyLCA2NSwgODMsIDEsIDI0NCwgMTk2LCA4MywgMSwgCi0gICAgMTc2LCA4MywgMSwgMjM0LCAxMzIsIDgzLCAxLCAyMTUsIDE4MywgODMsIDEsIDIxMCwgMTE2LCA4MywgMSwgMjQyLCA0NiwgCi0gICAgODMsIDEsIDIxMCwgMTYsIDgzLCAxLCAyMzIsIDI1NCwgODMsIDEsIDIxMCwgNjksIDgzLCAxLCAyNTAsIDExMCwgODMsIDEsIAotICAgIDIxNiwgMzksIDE5OSwgMjUsIDUwLCA4MywgMSwgMjE2LCAzOSwgNzUsIDgzLCAxLCAyMTYsIDM5LCA3MywgODMsIDEsIDIxNiwgCi0gICAgMzksIDc2LCA4MywgMSwgMjE2LCAzOSwgNzAsIDgzLCAxLCAyMTYsIDM5LCAyMjYsIDIzNCwgODMsIDEsIDIxNiwgMzksIAotICAgIDIxNCwgMjE0LCA4MywgMSwgMjE2LCAzOSwgMjU0LCAxMTUsIDgzLCAxLCAyMTYsIDM5LCAyNTIsIDE5MSwgODMsIDEsIDIxNiwgCi0gICAgMzksIDE5MCwgODMsIDEsIDIxNiwgMzksIDIyNCwgODgsIDgzLCAxLCAyMTYsIDM5LCAyNDMsIDEzNSwgODMsIDEsIDIxNiwgCi0gICAgMzksIDE4NCwgODMsIDEsIDIxNiwgMzksIDIxNywgMTA1LCA4MywgMSwgMjE2LCAzOSwgMjQ4LCAyMjEsIDgzLCAxLCAyMTYsIAotICAgIDM5LCAyNTAsIDE1NywgODMsIDEsIDIxNiwgMzksIDIzNSwgMTQxLCA4MywgMSwgMjE2LCAzOSwgMjE1LCAxODMsIDgzLCAxLCAKLSAgICAyMTYsIDM5LCAxOTEsIDgzLCAxLCAyMTYsIDM5LCAyMTIsIDY1LCA4MywgMSwgMjE2LCAzOSwgMTc2LCA4MywgMSwgMjE2LCAKLSAgICAzOSwgMjQzLCAxMzIsIDgzLCAxLCAyMTYsIDM5LCAyNDIsIDQ2LCA4MywgMSwgMjE2LCAzOSwgMjM1LCAxMDcsIDgzLCAxLCAKLSAgICAyMTYsIDM5LCAyMjgsIDIzMSwgODMsIDEsIDIxNiwgMzksIDI0NiwgMzgsIDgzLCAxLCAyMTksIDE5MCwgNzUsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgNzMsIDgzLCAxLCAyMTksIDE5MCwgMjM1LCAxNTIsIDgzLCAxLCAyMTksIDE5MCwgMjE0LCAyMTQsIDgzLCAKLSAgICAxLCAyMTksIDE5MCwgNzAsIDgzLCAxLCAyMTksIDE5MCwgMjU0LCAxMTUsIDgzLCAxLCAyMTksIDE5MCwgMTc2LCA4MywgMSwgCi0gICAgMjE5LCAxOTAsIDI0MywgMTM1LCA4MywgMSwgMjE5LCAxOTAsIDE2MiwgODMsIDEsIDIxOSwgMTkwLCAxOTAsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgMjIwLCAxMDIsIDgzLCAxLCAyMTksIDE5MCwgMjE3LCAxMDUsIDgzLCAxLCAyMTksIDE5MCwgMjQ4LCAyMjEsIAotICAgIDgzLCAxLCAyMTksIDE5MCwgMjM1LCAxNDEsIDgzLCAxLCAyMTksIDE5MCwgMjQ0LCAxOTYsIDgzLCAxLCAyMTksIDE5MCwgCi0gICAgMjQzLCAxMzIsIDgzLCAxLCAyMTksIDE5MCwgMjQyLCA0NiwgODMsIDEsIDIxOSwgMTkwLCAyMTUsIDE4MywgODMsIDEsIAotICAgIDIxOSwgMTkwLCAyMTAsIDExNiwgODMsIDEsIDIxOSwgMTkwLCAyMjMsIDE4NCwgODMsIDEsIDIxOSwgMTkwLCAyNTAsIDE1NywgCi0gICAgODMsIDEsIDIxOSwgMTkwLCAyMTAsIDgyLCA4MywgMSwgMjMxLCAxODMsIDczLCA4MywgMSwgMjMxLCAxODMsIDE3NiwgODMsIAotICAgIDEsIDIzMSwgMTgzLCAyMDUsIDgzLCAxLCAyMzEsIDE4MywgMjQ0LCAxOTYsIDgzLCAxLCAyMzEsIDE4MywgMjEwLCA4MiwgCi0gICAgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjU0LCA3NiwgMTEwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTMsIAotICAgIDE0OCwgMTEwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDgsIDE4NiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIzNSwgMTkzLCAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTYyLCAKLSAgICAyNDMsIDExNiwgMjUyLCAxNTUsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDEzNCwgMjUyLCAxNTUsIDgzLCAxLCAyNTQsIAotICAgIDE2MiwgMjQzLCAxMTYsIDYxLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCA3MywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMTc2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMjksIDc3LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyNTEsIDMzLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTUsIDE1NiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjE1LCAxNDQsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OCwgMTM1LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMjgsIDExMCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE3LCAxMDUsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDI0OCwgMjIxLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAxOTAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIyNSwgCi0gICAgMTQ3LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTgsIDIyMywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAKLSAgICA4MiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAxMTYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI1NCwgCi0gICAgMjA5LCA4MywgMSwgMjE2LCAzOSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTcsIDEwNSwgODMsIDEsIDIxNiwgMzksIDI1NCwgCi0gICAgMTYyLCAyNDMsIDExNiwgMjEwLCA4MiwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0MiwgMjQ5LCAKLSAgICA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjI5LCA3NywgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgCi0gICAgMjQzLCAxMTYsIDI1MSwgMzMsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMzUsIDExNCwgODMsIDEsIAotICAgIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNSwgMTU2LCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMjQ4LCAxMTksIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTcsIDEwNSwgODMsIDEsIDIzMSwgCi0gICAgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OCwgMjUsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMTgsIDIyMywgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OSwgNzIsIDgzLCAxLCAyMzEsIDE4MywgCi0gICAgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTAsIDgyLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAKLSAgICAxMTYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDE2MywgNzAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDE2MywgCi0gICAgMTkxLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjUyLCAxOCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMjQ4LCAyMTEsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMzIsIDI1NCwgMTgsIDE5LCAKLSAgICAyMjYsIDEwOSwgMTgsIDE5LCAyNTMsIDE2NywgMTgsIDE5LCAyNTUsIDI4LCAxOCwgMTksIDIxMiwgMjUsIDE4LCAxOSwgCi0gICAgMjI0LCAyMjEsIDE4LCAxOSwgMjI1LCAyMjksIDE4LCAxOSwgMjI0LCAxMDUsIDE4LCAxOSwgMjE3LCAzMSwgMTgsIDE5LCAKLSAgICAyMzQsIDE4OSwgMTgsIDE5LCAyMzMsIDE3OSwgMTgsIDE5LCAyMzEsIDEzMiwgMTgsIDE5LCAyMjgsIDM3LCAxOCwgMTksIAotICAgIDIyOSwgMTgxLCAxOCwgMTksIDIzMywgNjgsIDE4LCAxOSwgMjE5LCAyMiwgMTgsIDE5LCAyMjEsIDIxMSwgMTgsIDE5LCAKLSAgICAyMTksIDIzMiwgMTgsIDE5LCAyMjAsIDY2LCAxOCwgMTksIDIxOSwgMjAxLCAxOCwgMTksIDIxMCwgMjIwLCAxOCwgMTksIAotICAgIDIxMSwgNTIsIDE4LCAxOSwgMjIzLCAxMzQsIDE4LCAxOSwgMjI3LCAxNzEsIDE4LCAxOSwgMjI2LCAyMTYsIDIyNywgMTcxLCAKLSAgICAxOCwgMTksIDIyNywgMTcwLCAxOCwgMTksIDIyNiwgMjE2LCAyMjcsIDE3MCwgMTgsIDE5LCAyMjcsIDE2OSwgMTgsIDE5LCAKLSAgICAyMjYsIDIxNiwgMjI3LCAxNjksIDE4LCAxOSwgMjI3LCAxNjgsIDE4LCAxOSwgMjI2LCAyMTYsIDIyNywgMTY4LCAxOCwgMTksIAotICAgIDIyMiwgMTA1LCAxOCwgMTksIDIyMiwgMTA0LCAxOCwgMTksIDIyMiwgMTAzLCAxOCwgMTksIDIyMiwgMTAyLCAxOCwgMTksIAotICAgIDIyMiwgMTAxLCAxOCwgMTksIDIyMiwgMTA5LCAxOCwgMTksIDIyNiwgMjE2LCAyMjYsIDEwNSwgMTgsIDE5LCAyMjYsIDIxNiwgCi0gICAgMjE3LCAxNTIsIDE4LCAxOSwgMjI2LCAyMTYsIDIzNSwgMjMsIDE4LCAxOSwgMjI2LCAyMTYsIDI1MSwgNjYsIDE4LCAxOSwgCi0gICAgMjI2LCAyMTYsIDE5MywgMTgsIDE5LCAyMjYsIDIxNiwgMjMwLCAyNSwgMTgsIDE5LCAyMjYsIDIxNiwgMjIyLCA5MSwgMTgsIAotICAgIDE5LCAyMjYsIDIxNiwgMjIwLCAxMDQsIDE4LCAxOSwgMjQ1LCAyMTksIDIxMiwgOTgsIDE4LCAxOSwgMjEyLCA3LCAyMTIsIAotICAgIDk4LCAxOCwgMTksIDQwLCA0LCAyMjIsIDIzMywgMTgsIDE5LCA0MCwgMjIzLCAxNTcsIDI0NywgMTIwLCAxOCwgMTksIDIyMywgCi0gICAgMjIzLCAyMjIsIDEwNiwgMTgsIDE5LCAxNTksIDIzMiwgMTI3LCAxOCwgMTksIDE1OSwgMjMzLCAxMzQsIDE4LCAxOSwgMjE2LCAKLSAgICAxMjYsIDE4LCAxOSwgMjE2LCAxMjgsIDE4LCAxOSwgMjE1LCAxMzYsIDE4LCAxOSwgMjE1LCAxMzgsIDE4LCAxOSwgMjE1LCAKLSAgICAxNDMsIDE4LCAxOSwgMjE2LCA0OSwgMTgsIDE5LCAyMTYsIDUxLCAxOCwgMTksIDIyMSwgMjA5LCAyMTksIDIwNiwgMTgsIAotICAgIDE5LCAyMjEsIDIwOSwgMjIwLCAxLCAxOCwgMTksIDIyMSwgMjA5LCAyNDEsIDUzLCAxOCwgMTksIDcyLCAyNDIsIDczLCAxOCwgCi0gICAgMTksIDcyLCAyNDgsIDUyLCAyNDMsIDU1LCAxOCwgMTksIDcyLCAyNDMsIDEzMiwgMTgsIDE5LCA3MiwgMjQyLCA3OCwgMTgsIAotICAgIDE5LCAyMjEsIDIwOSwgMjM1LCAzMywgMTgsIDE5LCA3MiwgMjM1LCAzMSwgMTgsIDE5LCAyNTIsIDY4LCAyNDgsIDUyLCAKLSAgICAxNTYsIDE4LCAxOSwgMjUyLCA2OCwgMjQ4LCA1MiwgMTUzLCAxOCwgMTksIDcyLCAyNDgsIDQ3LCAyMjIsIDkxLCAyMzIsIAotICAgIDIyMywgMjEzLCAxMjIsIDIzMywgMTAsIDIzMiwgMjIzLCAxLCAxNzYsIDIzMiwgMjIzLCAxLCAyMzQsIDEzMiwgMjMyLCAKLSAgICAyMjMsIDEsIDI0MywgMTM1LCAyMzIsIDIyMywgMSwgMjQyLCAyNDksIDIzMiwgMjIzLCAxLCAyMjksIDc3LCAyMzIsIDIyMywgCi0gICAgMSwgMjUxLCAzMywgMjMyLCAyMjMsIDEsIDI1MCwgMTU3LCAyMzIsIDIyMywgMSwgMjM1LCAxNDEsIDIzMiwgMjIzLCAxLCAKLSAgICAyMzUsIDExNCwgMjMyLCAyMjMsIDEsIDIxMSwgNzEsIDIzMiwgMjIzLCAxLCAyMTcsIDEwNSwgMjMyLCAyMjMsIDEsIDIxNiwgCi0gICAgMjA4LCAyMzIsIDIyMywgMSwgMjQ4LCAyMjEsIDIzMiwgMjIzLCAxLCAyNDgsIDI1LCAyMzIsIDIyMywgMSwgMTk3LCAyMzIsIAotICAgIDIyMywgMSwgMTkwLCAyMzIsIDIyMywgMSwgMjI1LCAxNDcsIDIzMiwgMjIzLCAxLCAyNTIsIDE5MSwgMjMyLCAyMjMsIDEsIAotICAgIDI1MiwgMTgsIDIzMiwgMjIzLCAxLCAxODQsIDIzMiwgMjIzLCAxLCAxOTEsIDIzMiwgMjIzLCAxLCAyMDUsIDIzMiwgMjIzLCAKLSAgICAxLCAyMzMsIDEzNSwgMjMyLCAyMjMsIDEsIDIxMiwgNjUsIDIzMiwgMjIzLCAxLCAyMjAsIDEwMiwgMjMyLCAyMjMsIDEsIAotICAgIDIxOCwgMjIzLCAyMzIsIDIyMywgMSwgMjA2LCAyMzIsIDIyMywgMSwgMTYyLCAyMzIsIDIyMywgMjUsIDUsIDYxLCAyMzIsIAotICAgIDIyMywgMjUsIDUsIDczLCAyMzIsIDIyMywgMjUsIDUsIDcwLCAyMzIsIDIyMywgMjUsIDUsIDI0NSwgMjA5LCAyMzIsIDIyMywgCi0gICAgMjUsIDUsIDI1NCwgMjAxLCAyMzIsIDIyMywgMjUsIDUsIDIyNiwgMTgzLCAyMzIsIDIyMywgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAyMzIsIDIyMywgMjUsIDUsIDc1LCAyMzIsIDIyMywgMjUsIDUsIDc2LCAyMzIsIDIyMywgMjE4LCA3MywgMSwgMTkxLCAyMzIsIAotICAgIDIyMywgMjE4LCA3MywgMSwgMjA1LCAyMzIsIDIyMywgMjE4LCA3MywgMSwgMjEyLCA2NSwgMjMyLCAyMjMsIDQsIDEsIDE3NiwgCi0gICAgMjMyLCAyMjMsIDQsIDEsIDIyOSwgNzcsIDIzMiwgMjIzLCA0LCAxLCAyNTQsIDc1LCAyMzIsIDIyMywgNCwgMSwgMjE3LCAKLSAgICAxMDUsIDIzMiwgMjIzLCA0LCAxLCAxOTcsIDIzMiwgMjIzLCA0LCAxLCAxOTAsIDIzMiwgMjIzLCA0LCAxLCAxODQsIDIzMiwgCi0gICAgMjIzLCA0LCAxLCAyMDUsIDIzMiwgMjIzLCA0LCAxLCAyMzMsIDEzNSwgMjMyLCAyMjMsIDUsIDIzMCwgODksIDIzMiwgMjIzLCAKLSAgICA1LCAyMzQsIDE3MSwgMjMyLCAyMjMsIDUsIDIyMiwgMzIsIDIzMiwgMjIzLCA1LCAyMzIsIDEyNywgMjMyLCAyMjMsIDI0NSwgCi0gICAgMzEsIDc4LCAyMzIsIDIyMywgMjI0LCAxMywgNzgsIDIzMiwgMjIzLCAyMSwgMjEwLCA4NiwgMjMyLCAyMjMsIDIxLCAxMTAsIAotICAgIDIzMiwgMjIzLCAyMSwgMTA1LCAyMzIsIDIyMywgMjEsIDE1OCwgMjMyLCAyMjMsIDIxLCAxNjEsIDIzMiwgMjIzLCAyMSwgCi0gICAgMTg5LCAyMzIsIDIyMywgMjEsIDE5NCwgMjMyLCAyMjMsIDIxLCAxOTgsIDIzMiwgMjIzLCAyMSwgMTk1LCAyMzIsIDIyMywgCi0gICAgMjEsIDIwMCwgMzksIDIzMywgNTksIDEsIDE3NiwgMzksIDIzMywgNTksIDEsIDIxMSwgMTY1LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMjI5LCA3NywgMzksIDIzMywgNTksIDEsIDIxNSwgMTgzLCAzOSwgMjMzLCA1OSwgMSwgMjA2LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMTkxLCAzOSwgMjMzLCA1OSwgMSwgMjE3LCAxMDUsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDIwOCwgMzksIDIzMywgNTksIDEsIAotICAgIDIzMywgMTM1LCAzOSwgMjMzLCA1OSwgMSwgMTkwLCAzOSwgMjMzLCA1OSwgMSwgMjI1LCAxNDcsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAxODQsIDM5LCAyMzMsIDU5LCAxLCAyNDQsIDE5NiwgMzksIDIzMywgNTksIDEsIDIxNCwgMjcsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAxNjIsIDM5LCAyMzMsIDU5LCAxLCAyMjQsIDg4LCAzOSwgMjMzLCA1OSwgMSwgMjM0LCAxMzIsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAyMTUsIDE3NSwgMzksIDIzMywgNTksIDEsIDE5NywgMzksIDIzMywgNTksIDEsIDYxLCAzOSwgMjMzLCA1OSwgMSwgNzMsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyNDUsIDIwOSwgMzksIDIzMywgNTksIDEsIDI0NSwgMTk3LCAzOSwgMjMzLCA1OSwgMSwgNzAsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyMjYsIDE4MywgMzksIDIzMywgNTksIDEsIDc2LCAzOSwgMjMzLCA1OSwgMSwgMjE0LCAyMTQsIAotICAgIDM5LCAyMzMsIDU5LCAxLCA3NSwgMzksIDIzMywgNTksIDEsIDI1MywgMTkwLCAzOSwgMjMzLCA1OSwgMSwgMjU0LCAyMDEsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI4LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyNywgMzksIDIzMywgNTksIDEsIDIxNiwgCi0gICAgMjYsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI1LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyNCwgMTY2LCAzOSwgMTczLCAxLCAKLSAgICAxMjUsIDIyNCwgODgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjQsIDg4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTc2LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjksIDc3LCAxNjYsIDM5LCAKLSAgICAxNzMsIDEsIDEyMSwgMTc2LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKLSAgICAyMjksIDc3LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE1LCAxODMsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMDYsIDE2NiwgCi0gICAgMzksIDE3MywgMSwgMTI1LCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTUsIDE4MywgMTY2LCAzOSwgMTczLCAxLCAKLSAgICAxMjEsIDIwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNywgMTA1LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMjE2LCAyMDgsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTcsIDE2NiwgMzksIDE3MywgMSwgCi0gICAgMTIxLCAyMTcsIDEwNSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxNiwgMjA4LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTk3LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjI1LCAxNDcsIDE2NiwgMzksIDE3MywgCi0gICAgMSwgMTI1LCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxOTAsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjUsIDE0NywgCi0gICAgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDI0NCwgMTk2LCAxNjYsIDM5LCAxNzMsIAotICAgIDEsIDEyNSwgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTM1LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCi0gICAgMjQ0LCAxOTYsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxMzUsIAotICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNjIsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyNDgsIDIyMSwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjUsIDI1MiwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ4LCAKLSAgICAyMjEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNTIsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTg0LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxMzgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMzMsIDE4NCwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjEsIDIxMSwgMTM4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE4LCA4MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAotICAgIDIxOCwgODIsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1LCAyMTksIDIzOSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCA3MywgCi0gICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjM2LCAzMywgMTY2LCAzOSwgMTczLCAyNSwgNSwgNzAsIDE2NiwgMzksIDE3MywgMjUsIAotICAgIDUsIDIxNCwgMTE4LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCA3NSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU0LCAyNDMsIDE2NiwgCi0gICAgMzksIDE3MywgMjUsIDUsIDc2LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjcsIDAsIDE2NiwgMzksIDE3MywgMjUsIDUsIAotICAgIDIxNCwgMjE0LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTMsIDE2NywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCAyOCwgCi0gICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAxMTEsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNiwgMTA5LCAxNjYsIDM5LCAKLSAgICAxNzMsIDI1LCA1LCAyMjYsIDI1MywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAyMTAsIDE2NiwgMzksIDE3MywgMjUsIDUsIAotICAgIDIzNSwgMTUyLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMTQsIDEwNSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjI5LCA3OSwgCi0gICAgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjMwLCAyNSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMTkzLCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDQwLCAyMzUsIDIzLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNDksIDYwLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNTMsIDE1OCwgCi0gICAgMTY2LCAzOSwgMTczLCAxMzgsIDIzMSwgMTU4LCAxNjYsIDM5LCAxNzMsIDEzOCwgMjMxLCAxNTcsIDE2NiwgMzksIDE3MywgCi0gICAgMjEsIDIxMCwgODYsIDE2NiwgMzksIDE3MywgMjEsIDExMCwgMTY2LCAzOSwgMTczLCAyMSwgMTA1LCAxNjYsIDM5LCAxNzMsIAotICAgIDIxLCAxNTgsIDE2NiwgMzksIDE3MywgMjEsIDE2MSwgMTY2LCAzOSwgMTczLCAyMSwgMTg5LCAxNjYsIDM5LCAxNzMsIDIxLCAKLSAgICAxOTQsIDE2NiwgMzksIDE3MywgMjEsIDE5OCwgMTY2LCAzOSwgMTczLCAyMSwgMTk1LCAxNjYsIDM5LCAxNzMsIDIxLCAyMDAsIAotICAgIDE2NiwgMzksIDE3MywgODksIDIxLCAxMTAsIDE2NiwgMzksIDE3MywgNSwgMjMzLCAxMjAsIDE2NiwgMzksIDE3MywgNSwgCi0gICAgMjMzLCAxMTksIDY5LCAxNiwgMjI1LCAyMzYsIDY5LCAxNiwgMjMwLCA3MiwgMjM0LCAyNSwgNjksIDE2LCAyMjUsIDcyLCAKLSAgICAyMzQsIDI1LCA2OSwgMTYsIDI1MiwgNTAsIDIzNCwgMjUsIDY5LCAxNiwgMjUxLCAxMDQsIDIzNCwgMjUsIDY5LCAxNiwgCi0gICAgMjI0LCAyMTYsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMTAsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMDgsIDIzNCwgMjUsIAotICAgIDY5LCAxNiwgMjI0LCAyMTQsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMTIsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNzMsIAotICAgIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjksIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjgsIDIzNCwgMjUsIDY5LCAxNiwgCi0gICAgMjQ4LCAxNzEsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNzAsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjcsIDIzNCwgMjUsIAotICAgIDY5LCAxNiwgMjE1LCA4NywgNjksIDE2LCAyMzAsIDcyLCAyMjIsIDIwNSwgNjksIDE2LCAyMjUsIDcyLCAyMjIsIDIwNSwgCi0gICAgNjksIDE2LCAyNTIsIDUwLCAyMjIsIDIwNSwgNjksIDE2LCAyNTEsIDEwNCwgMjIyLCAyMDUsIDY5LCAxNiwgMjI0LCAyMTYsIAotICAgIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjEwLCAyMjIsIDIwNSwgNjksIDE2LCAyMjQsIDIwOCwgMjIyLCAyMDUsIDY5LCAxNiwgCi0gICAgMjI0LCAyMTQsIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjEyLCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIDE3MywgMjIyLCAKLSAgICAyMDUsIDY5LCAxNiwgMjQ4LCAxNjksIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTY4LCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIAotICAgIDE3MSwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAxNzAsIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTY3LCAyMjIsIDIwNSwgCi0gICAgMjUxLCAxMjEsIDEsIDE3NiwgMjUxLCAxMjEsIDEsIDI0MywgMTM1LCAyNTEsIDEyMSwgMSwgMjI5LCA3NywgMjUxLCAxMjEsIAotICAgIDEsIDIyOSwgMjIsIDI1MSwgMTIxLCAxLCAxOTAsIDI1MSwgMTIxLCAxLCAyNTIsIDE5MSwgMjUxLCAxMjEsIDEsIDE4NCwgCi0gICAgMjUxLCAxMjEsIDEsIDIzMCwgMTA1LCAyNTEsIDEyMSwgMSwgMjE3LCAxMDUsIDI1MSwgMTIxLCAxLCAyNDgsIDIyMSwgMjUxLCAKLSAgICAxMjEsIDEsIDE5NywgMjUxLCAxMjEsIDEsIDIyOCwgMzYsIDI1MSwgMTIxLCAxLCAyNTEsIDMzLCAyNTEsIDEyMSwgMSwgCi0gICAgMjM1LCAxNDEsIDI1MSwgMTIxLCAxLCAyMjcsIDE2NSwgMjUxLCAxMjEsIDEsIDIyNywgMTU4LCAyNTEsIDEyMSwgMSwgMTkxLCAKLSAgICAyNTEsIDEyMSwgMSwgMjA1LCAyNTEsIDEyMSwgMSwgMjMzLCAxMzUsIDI1MSwgMTIxLCAxLCAyMTQsIDI3LCAyNTEsIDEyMSwgCi0gICAgMSwgMjA2LCAyNTEsIDEyMSwgMSwgNjEsIDI1MSwgMTIxLCAxLCAxNjIsIDI1MSwgMTIxLCAyNSwgNSwgNzMsIDI1MSwgMTIxLCAKLSAgICAyNSwgNSwgNzAsIDI1MSwgMTIxLCAyNSwgNSwgNzUsIDI1MSwgMTIxLCAyNSwgNSwgNzYsIDI1MSwgMTIxLCAyNSwgNSwgCi0gICAgMjU0LCAyNDMsIDI1MSwgMTIxLCAyMjYsIDYwLCAyNTEsIDEyMSwgMjQ1LCAxNDMsIDY0LCAyMjEsIDE3MiwgMzksIDg5LCAxLCAKLSAgICAxMjUsIDE3NiwgMzksIDg5LCAxLCAxMjUsIDIzNCwgMTMyLCAzOSwgODksIDEsIDEyNSwgMjMzLCAxNzEsIDM5LCA4OSwgMSwgCi0gICAgMTIxLCAxNzYsIDM5LCA4OSwgMSwgMTIxLCAyMzMsIDE3MSwgMzksIDg5LCAxLCAxMjEsIDIzNCwgMTMyLCAzOSwgODksIDEsIAotICAgIDIyOSwgNzcsIDM5LCA4OSwgMSwgMTI1LCAyNTEsIDMzLCAzOSwgODksIDEsIDEyNSwgMjUwLCAxNTcsIDM5LCA4OSwgMSwgCi0gICAgMTIxLCAyNTEsIDMzLCAzOSwgODksIDEsIDEyMSwgMjA2LCAzOSwgODksIDEsIDEyMSwgMjUwLCAxNTcsIDM5LCA4OSwgMSwgCi0gICAgMjI3LCAxNjUsIDM5LCA4OSwgMSwgMjIzLCAxNDAsIDM5LCA4OSwgMSwgMTI1LCAyMjMsIDEzOCwgMzksIDg5LCAxLCAyNDgsIAotICAgIDIyMSwgMzksIDg5LCAxLCAxMjEsIDIyMywgMTM4LCAzOSwgODksIDEsIDIyMywgMTQ5LCAzOSwgODksIDEsIDEyNSwgMjE3LCAKLSAgICAxMDUsIDM5LCA4OSwgMSwgMTI1LCAyMTYsIDIwOCwgMzksIDg5LCAxLCAxMjEsIDIxNywgMTA1LCAzOSwgODksIDEsIDEyMSwgCi0gICAgMjE2LCAyMDgsIDM5LCA4OSwgMSwgMTk3LCAzOSwgODksIDEsIDI1MiwgMTkxLCAzOSwgODksIDEsIDEyNSwgMTkwLCAzOSwgCi0gICAgODksIDEsIDEyNSwgMjI1LCAxNDcsIDM5LCA4OSwgMSwgMTI1LCAyNDQsIDE5NiwgMzksIDg5LCAxLCAxMjEsIDE5MCwgMzksIAotICAgIDg5LCAxLCAxMjEsIDI0NCwgMTk2LCAzOSwgODksIDEsIDEyMSwgMjI1LCAxNDcsIDM5LCA4OSwgMSwgMTg0LCAzOSwgODksIAotICAgIDEsIDEyMSwgMTkxLCAzOSwgODksIDEsIDEyNSwgMTkxLCAzOSwgODksIDEsIDIwNSwgMzksIDg5LCAxLCAyMjIsIDEzNywgCi0gICAgMzksIDg5LCAxLCAyMzMsIDEzNSwgMzksIDg5LCAxLCAyMzIsIDkzLCAzOSwgODksIDEsIDIxMiwgNjUsIDM5LCA4OSwgMSwgCi0gICAgMTI1LCAyMjAsIDEwMiwgMzksIDg5LCAxLCAxMjUsIDIxOCwgMjIzLCAzOSwgODksIDEsIDEyNSwgMjA2LCAzOSwgODksIDEsIAotICAgIDEyNSwgMTYyLCAzOSwgODksIDEsIDIzMiwgMTg0LCAzOSwgODksIDEsIDYxLCAzOSwgODksIDEsIDEyMSwgMTYyLCAzOSwgCi0gICAgODksIDEsIDczLCAzOSwgODksIDEsIDIzNiwgMzMsIDM5LCA4OSwgMSwgNzAsIDM5LCA4OSwgMSwgMjE0LCAxMTgsIDM5LCAKLSAgICA4OSwgMSwgMjQ1LCAyMDksIDM5LCA4OSwgMSwgMjI2LCAxODMsIDM5LCA4OSwgMSwgMjMzLCAxMjAsIDM5LCA4OSwgMSwgCi0gICAgMjQyLCAxMzIsIDIwNiwgMzksIDg5LCAxMTYsIDUsIDE0NywgMjA1LCAzOSwgODksIDExNiwgNSwgMTQ3LCAyMzMsIDEzNSwgCi0gICAgMzksIDg5LCAxMTYsIDUsIDIzMywgMTM2LCAyMTcsIDU4LCAyMzMsIDEwOSwgMzksIDg5LCA1LCAyMzEsIDIwNCwgMjM0LCAKLSAgICAyMzEsIDIzMywgMTA5LCAzOSwgODksIDExNiwgNSwgNDAsIDIyOSwgNzcsIDM5LCA4OSwgMTE2LCA1LCAxMjEsIDE5MCwgMzksIAotICAgIDg5LCAxMTYsIDUsIDEyNSwgMjIzLCAxMzksIDE3NywgMTIxLCAxOTAsIDM5LCA4OSwgMTE2LCA1LCAxODQsIDM5LCA4OSwgCi0gICAgMTE2LCA1LCAyNTIsIDE5MSwgMzksIDg5LCAxMTYsIDUsIDIwNiwgMzksIDg5LCA1LCAyMjIsIDEwLCAzOSwgODksIDI1LCA1LCAKLSAgICA2MSwgMzksIDg5LCAyNSwgNSwgMjMxLCAyMDQsIDIyMSwgMjI2LCAzOSwgODksIDI1LCA1LCAyNTUsIDczLCAzOSwgODksIAotICAgIDI1LCA1LCAyMTcsIDY0LCAyNTUsIDczLCAzOSwgODksIDI1LCA1LCA3MywgMzksIDg5LCAyNSwgNSwgMjM2LCAzMywgMzksIAotICAgIDg5LCAyNSwgNSwgMjE0LCAyMTQsIDM5LCA4OSwgMjUsIDUsIDIxNCwgMTE3LCAzOSwgODksIDI1LCA1LCA3MCwgMzksIDg5LCAKLSAgICAyNSwgNSwgMjE0LCAxMTgsIDM5LCA4OSwgMjUsIDUsIDc2LCAzOSwgODksIDI1LCA1LCAyMjcsIDEsIDUxLCAzOSwgODksIAotICAgIDI1LCA1LCAyMjYsIDEwOSwgMzksIDg5LCAyNSwgNSwgNzUsIDM5LCA4OSwgMjUsIDUsIDI1NCwgMjQzLCAzOSwgODksIDI1LCAKLSAgICA1LCAyMjYsIDE4MywgMzksIDg5LCAyNSwgNSwgMjU0LCAyMDEsIDM5LCA4OSwgMjUsIDUsIDg5LCAyNTQsIDIwMSwgMzksIAotICAgIDg5LCAyNSwgNSwgMjI3LCAxLCA0OCwgMzksIDg5LCA1LCAyMzEsIDIwNCwgMjM0LCAyMzAsIDM5LCA4OSwgNSwgMjE2LCAyOSwgCi0gICAgMzksIDg5LCA1LCAyMTYsIDI4LCAzOSwgODksIDUsIDIzNCwgOTcsIDIxNiwgMjcsIDM5LCA4OSwgNSwgMjM0LCA5NywgMjE2LCAKLSAgICAyNiwgMzksIDg5LCA1LCAyMzQsIDk3LCAyMTYsIDI1LCAzOSwgODksIDUsIDIyMywgMTg4LCAyNDIsIDQ1LCAzOSwgODksIDUsIAotICAgIDIzMSwgMjA0LCAyMjEsIDI1MywgMzksIDg5LCA1LCAyMzQsIDk2LCAyMzQsIDIxNSwgMzksIDg5LCAzOCwgMjQ5LCAxMTUsIAotICAgIDI0NywgMTIwLCAzOSwgODksIDI0MSwgNDYsIDIxLCAyMTAsIDg2LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxMTAsIDM5LCA4OSwgCi0gICAgMjQxLCA0NiwgMjEsIDEwNSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTU4LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxNjEsIDM5LCAKLSAgICA4OSwgMjQxLCA0NiwgMjEsIDE4OSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTk0LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxOTgsIAotICAgIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE5NSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMjAwLCAzOSwgODksIDg5LCAyMSwgMjEwLCAKLSAgICA4NiwgMzksIDg5LCA4OSwgMjEsIDExMCwgMzksIDg5LCA4OSwgMjEsIDEwNSwgMzksIDg5LCA4OSwgMjEsIDE1OCwgMzksIAotICAgIDg5LCA4OSwgMjEsIDE2MSwgMzksIDg5LCA4OSwgMjEsIDE4OSwgMzksIDg5LCA4OSwgMjEsIDE5NCwgMzksIDg5LCA4OSwgCi0gICAgMjEsIDE5OCwgMzksIDg5LCA4OSwgMjEsIDE5NSwgMzksIDg5LCA4OSwgMjEsIDIwMCwgMzksIDg5LCA1LCAyMTEsIDI0OSwgCi0gICAgMzksIDg5LCA1LCAyMTEsIDI0OCwgMzksIDg5LCA1LCAyMjEsIDIxNSwgMzksIDg5LCA1LCAyMzQsIDE2MCwgMzksIDg5LCA1LCAKLSAgICAyNDAsIDIzMiwgMzksIDg5LCA1LCAyNDcsIDEzNCwgMzksIDg5LCA1LCAyMjMsIDQ5LCAyMjIsIDE4NywgMjIzLCAxNDksIAotICAgIDM5LCA4OSwgNSwgMjMxLCAyMDQsIDIxMSwgNzIsIDM5LCA4OSwgNSwgMjM1LCA2LCAzOSwgODksIDUsIDIzNSwgNSwgMzksIAotICAgIDg5LCA1LCAyMjEsIDIyMiwgMzksIDg5LCA1LCAyMjEsIDIyMSwgMzksIDg5LCA1LCAyNDIsIDksIDM5LCA4OSwgNSwgMjUxLCAKLSAgICAzMCwgMTAyLCA1LCAyMTQsIDIwMCwgMjIzLCAzMCwgMTAyLCA1LCAyMTQsIDIwMCwgMjUxLCAxLCAxMDIsIDUsIDI1MCwgCi0gICAgMTg2LCAxMDIsIDUsIDIxOCwgMTUsIDEwMiwgNSwgMjUxLCAyMzMsIDEwMiwgMSwgMjU0LCAxODQsIDEwMiwgMSwgMjU0LCAKLSAgICAxODUsIDIxNywgMTMsIDEwMiwgMSwgMjM2LCAyOSwgMTAyLCAxLCAyMzYsIDMwLCAyMTcsIDEzLCAxMDIsIDEsIDIxNCwgCi0gICAgMjAzLCAxMDIsIDEsIDIxNCwgMjA0LCAyMTcsIDEzLCAxMDIsIDEsIDIyMywgMTg4LCAyMjMsIDc5LCAxMDIsIDEsIDIyMywgCi0gICAgMTg4LCAyMjMsIDgwLCAyMTcsIDEzLCAxMDIsIDEsIDIzMywgMTM2LCAyMzMsIDI0LCAxMDIsIDEsIDIzMywgMTM2LCAyMzMsIAotICAgIDI1LCAyMTcsIDEzLCAxMDIsIDEsIDI0NSwgMTc5LCAxMDIsIDEsIDI1NCwgMTk5LCAxMDIsIDEsIDIyNiwgMjEyLCAxMDIsIAotICAgIDEsIDIyNiwgMjEzLCAyMTcsIDEzLCAxMDIsIDEsIDE3NiwgMTAyLCAxLCAyMzUsIDEzLCAyMzEsIDIwNywgMTAyLCAxLCAKLSAgICAyNDMsIDEzNSwgMTAyLCAxLCAyNDMsIDEzNiwgMjQyLCAxNjEsIDEwMiwgMSwgMjI5LCA3NywgMTAyLCAxLCAyNTEsIDMzLCAKLSAgICAxMDIsIDEsIDI1MSwgMzQsIDIzMywgMTIzLCAxMDIsIDEsIDIzNSwgMTQxLCAxMDIsIDEsIDIzNSwgMTQyLCAyMzUsIDExOCwgCi0gICAgMTAyLCAxLCAyMjcsIDE2NSwgMTAyLCAxLCAyMTcsIDEwNiwgMjMzLCA3NiwgMTAyLCAxLCAyMTcsIDEwNiwgMjMwLCA2NywgCi0gICAgMjMxLCAyMDcsIDEwMiwgMSwgMjQ4LCAyMjIsIDIzMCwgNjcsIDI1NCwgMTQ1LCAxMDIsIDEsIDI0OCwgMjIyLCAyMzAsIDY3LCAKLSAgICAyMzEsIDIwNywgMTAyLCAxLCAyMjksIDIyOSwgMjIzLCAxNTIsIDEwMiwgMSwgMjE3LCAxMDUsIDEwMiwgMSwgMjE3LCAxMDYsIAotICAgIDIxNywgMzUsIDEwMiwgMSwgMjQ4LCAyMjEsIDEwMiwgMSwgMjQ4LCAyMjIsIDIzMSwgMjI1LCAxMDIsIDEsIDE5NywgMTAyLCAKLSAgICAxLCAxOTAsIDEwMiwgMSwgMjI2LCA5MCwgMjM0LCAyMjYsIDEwMiwgMSwgMjUyLCAxOTEsIDEwMiwgMSwgMjUyLCAxOTIsIAotICAgIDIzNCwgMTcyLCAxMDIsIDEsIDE4NCwgMTAyLCAxLCAxOTEsIDEwMiwgMSwgMjA1LCAxMDIsIDEsIDIzMywgMTM1LCAxMDIsIAotICAgIDEsIDIxMiwgNjUsIDEwMiwgMSwgMjIyLCAzNCwgMjIyLCAyMCwgMTAyLCAxLCAyMjIsIDM0LCAyMjEsIDIzMywgMTAyLCAxLCAKLSAgICAyMDYsIDEwMiwgMSwgMTYyLCAxMDIsIDUsIDIyMywgNzAsIDEwMiwgMjUsIDUsIDIxNywgMTMsIDEwMiwgMjUsIDUsIDIxNCwgCi0gICAgMTk5LCAxMDIsIDI1LCA1LCAyMTQsIDIwMCwgMjIxLCAyMjksIDEwMiwgMjUsIDUsIDIxOCwgNDcsIDEwMiwgMjUsIDUsIAotICAgIDIxOCwgNDgsIDIzNiwgMjEsIDEwMiwgMjUsIDUsIDIyMywgMTg4LCAyMjMsIDc5LCAxMDIsIDI1LCA1LCAyMjMsIDE4OCwgCi0gICAgMjIzLCA4MCwgMjE3LCAxMywgMTAyLCAyNSwgNSwgMjMzLCAxMzYsIDIzMywgMjQsIDEwMiwgMjUsIDUsIDIzMywgMTM2LCAKLSAgICAyMzMsIDI1LCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMTcsIDY1LCAxMDIsIDI1LCA1LCAyMTcsIDY2LCAyMjMsIDc5LCAxMDIsIAotICAgIDI1LCA1LCAyMTcsIDY2LCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMTcsIDY2LCAyMjMsIDgwLCAyMTcsIDEzLCAxMDIsIDI1LCAKLSAgICA1LCAyMjUsIDE4NCwgMTAyLCAyNSwgNSwgMjI1LCAxODUsIDIxNywgMTMsIDEwMiwgMjU0LCAyNTAsIDI1NCwgMjQ5LCAxMDIsIAotICAgIDEsIDIzNCwgMjUxLCAyMjEsIDIyOCwgMTAyLCAxLCAyMzQsIDEwMiwgMjIxLCAyMjgsIDEwMiwgMSwgMjE1LCAzNCwgMjIxLCAKLSAgICAyMjgsIDEwMiwgMSwgMjQ1LCAyMDMsIDIyMSwgMjI4LCAxMDIsIDEsIDIxNCwgMCwgMjIxLCAyMjgsIDEwMiwgMSwgMjEwLCAKLSAgICAxMDcsIDIyMSwgMjI4LCAxMDIsIDEsIDI1MywgMjA5LCAyMjEsIDIyOCwgMTAyLCAyMSwgMjEwLCA4NiwgMTAyLCAyMSwgCi0gICAgMTEwLCAxMDIsIDIxLCAxMDUsIDEwMiwgMjEsIDE1OCwgMTAyLCAyMSwgMTYxLCAxMDIsIDIxLCAxODksIDEwMiwgMjEsIAotICAgIDE5NCwgMTAyLCAyMSwgMTk4LCAxMDIsIDIxLCAxOTUsIDEwMiwgMjEsIDIwMCwgMTAyLCAyMjYsIDI5LCAxMDIsIDIyNiwgCi0gICAgNTUsIDEwMiwgMjExLCAyMzgsIDEwMiwgMjUwLCAyMzYsIDIyNiwgNDgsIDEwMiwgMjUwLCAyMzYsIDIxOSwgMTcyLCAxMDIsIAotICAgIDI1MCwgMjM2LCAyMjYsIDIsIDEwMiwgMjI2LCA1NCwgMTAyLCAyOCwgMTYsIDI0NywgMTI2LCAxMDIsIDI4LCAxNiwgMjQ4LCAKLSAgICA1MSwgMTAyLCAyOCwgMTYsIDI0NiwgNjQsIDEwMiwgMjgsIDE2LCAyNDgsIDE3NiwgMTAyLCAyOCwgMTYsIDI0OCwgMTc3LCAKLSAgICAyMTgsIDE1LCAxMDIsIDI4LCAxNiwgMjQ3LCAyMDUsIDEwMiwgMjgsIDE2LCAyNDgsIDIxNCwgMTAyLCAyOCwgMTYsIDI0OCwgCi0gICAgMzMsIDEwMiwgMjgsIDE2LCAyNDgsIDE5OCwgMTAyLCAyOCwgMTYsIDI0OCwgMTc3LCAyNDMsIDU3LCAxMDIsIDI4LCAxNiwgCi0gICAgMzgsIDIxNywgOSwgMTAyLCAyOCwgMTYsIDM4LCAyNDUsIDE0MSwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE2NywgMTAyLCAKLSAgICAyOCwgMTYsIDM4LCAyMzQsIDE2OSwgMTAyLCAyOCwgMTYsIDM4LCAyMzUsIDEyMiwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIAotICAgIDE2OCwgMiwgMjM1LCAxMjIsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzAsIDIsIDIzNSwgMTIyLCAxMDIsIDI4LCAxNiwgCi0gICAgMzgsIDI1MiwgMzcsIDEwMiwgMjgsIDE2LCAzOCwgMjQyLCAxNjUsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjA0LCAyNDYsIAotICAgIDc0LCAxMDIsIDI4LCAxNiwgMjIyLCAyNDksIDIwNCwgMjQ4LCAyMTIsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjUwLCAwLCAKLSAgICAyMTUsIDExMSwgMTAyLCAyOCwgMTYsIDIyMiwgMjQ5LCAyNTAsIDAsIDIxNywgNzMsIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAKLSAgICAyMDQsIDIyNiwgNDMsIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAyMDQsIDIyNCwgMTM5LCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgCi0gICAgMjUwLCAwLCAyMjUsIDM4LCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgMjUwLCAwLCAyMjUsIDI2LCAxMDIsIDI4LCAxNiwgMjMzLCAKLSAgICA0NCwgMjA0LCAyMjUsIDYxLCAyMDcsIDUsIDIyNiwgMjYsIDIwNywgNSwgMjI2LCAzOSwgMjA3LCA1LCAyMjYsIDM1LCAyMDcsIAotICAgIDEsIDYxLCAyMDcsIDEsIDczLCAyMDcsIDEsIDcwLCAyMDcsIDEsIDI1NCwgMjQzLCAyMDcsIDEsIDc2LCAyMDcsIDEsIDc1LCAKLSAgICAyMDcsIDEsIDI0NSwgNTUsIDIwNywgMSwgMTc2LCAyMDcsIDEsIDIyNCwgODgsIDIwNywgMSwgMjQzLCAxMzUsIDIwNywgMSwgCi0gICAgMjI5LCA3NywgMjA3LCAxLCAyNTEsIDMzLCAyMDcsIDEsIDIzNSwgMTQxLCAyMDcsIDEsIDIxMCwgMTE2LCAyMDcsIDEsIAotICAgIDIyNywgMTY1LCAyMDcsIDEsIDIxNywgMTA1LCAyMDcsIDEsIDI0OCwgMjIxLCAyMDcsIDEsIDE5NywgMjA3LCAxLCAxOTAsIAotICAgIDIwNywgMSwgMjQ0LCAxOTYsIDIwNywgMSwgMjE0LCAyNywgMjA3LCAxLCAyNTIsIDE5MSwgMjA3LCAxLCAxODQsIDIwNywgMSwgCi0gICAgMTkxLCAyMDcsIDEsIDIwNSwgMjA3LCAxLCAyMzMsIDEzNSwgMjA3LCAxLCAyMTIsIDY1LCAyMDcsIDEsIDIwNiwgMjA3LCAxLCAKLSAgICAyMTEsIDE2NSwgMjA3LCAxLCAxNjIsIDIwNywgMTE2LCA1LCAyMjYsIDUyLCAyMDcsIDExNiwgNSwgMjI2LCAyOCwgMjA3LCAKLSAgICAxMTYsIDUsIDIyNiwgMjUsIDIwNywgMjUsIDUsIDIyNiwgNDIsIDIwNywgMjUsIDUsIDIyNiwgMjQsIDIwNywgMjUsIDUsIAotICAgIDIyNiwgNDYsIDIwNywgMjUsIDUsIDIyNiwgMzQsIDIwNywgMjUsIDUsIDIyNiwgNTMsIDIwNywgMjUsIDUsIDIyNiwgNDQsIAotICAgIDIwNywgNSwgMjI2LCA1NiwgMjA3LCA1LCAyMTMsIDE1MiwgMjA3LCAxMTYsIDUsIDIyNSwgMjQ4LCAxODQsIDIwNywgMTE2LCAKLSAgICA1LCAyMjUsIDI0OCwgMjEyLCA2NSwgMjA3LCAxLCAyMzQsIDEzMiwgMjA3LCAxLCAyMTcsIDIzMSwgMjA3LCAyMSwgMjEwLCAKLSAgICA4NiwgMjA3LCAyMSwgMTEwLCAyMDcsIDIxLCAxMDUsIDIwNywgMjEsIDE1OCwgMjA3LCAyMSwgMTYxLCAyMDcsIDIxLCAxODksIAotICAgIDIwNywgMjEsIDE5NCwgMjA3LCAyMSwgMTk4LCAyMDcsIDIxLCAxOTUsIDIwNywgMjEsIDIwMCwgMjA3LCAyNTMsIDE3NSwgCi0gICAgMjA3LCAxLCAyMjMsIDUyLCAyMDcsIDEsIDIzMywgNywgMjA3LCAxLCAyNTIsIDE4LCAyMDcsIDEsIDQwLCAyMzUsIDIzLCAKLSAgICAyMDcsIDEsIDQwLCAxOTMsIDI1MiwgMTIwLCAxLCA2MSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCA2MSwgMjUyLCAxMjAsIDEsIAotICAgIDE2MiwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAxNjIsIDI1MiwgMTIwLCAxLCAyMzEsIDE4MSwgMTYyLCAyNTIsIDEyMCwgMSwgCi0gICAgMjUyLCAxOTEsIDI1MiwgMTIwLCAxLCAyMzQsIDIxMiwgMjUyLCAxOTEsIDI1MiwgMTIwLCAxLCAxOTAsIDI1MiwgMTIwLCAxLCAKLSAgICAyMTksIDE2NCwgMTkwLCAyNTIsIDEyMCwgMSwgMTk3LCAyNTIsIDEyMCwgMSwgMjMxLCAxODEsIDE5NywgMjUyLCAxMjAsIDEsIAotICAgIDIxMiwgNjUsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMjEyLCA2NSwgMjUyLCAxMjAsIDEsIDIyNiwgNjcsIDIxMiwgNjUsIAotICAgIDI1MiwgMTIwLCAxLCAyNDMsIDEzNSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAyNDMsIDEzNSwgMjUyLCAxMjAsIDEsIDIzNSwgCi0gICAgMTQxLCAyNTIsIDEyMCwgMSwgMjQ4LCAyMjEsIDI1MiwgMTIwLCAxLCAyMDUsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMjA1LCAKLSAgICAyNTIsIDEyMCwgMSwgMTg0LCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDE4NCwgMjUyLCAxMjAsIDEsIDIxOSwgMjYsIDIxNywgCi0gICAgMTA1LCAyNTIsIDEyMCwgMSwgMjI4LCA1NSwgMjE3LCAxMDUsIDI1MiwgMTIwLCAxLCAyMDYsIDI1MiwgMTIwLCAxLCAyMTksIAotICAgIDE2NCwgMjA2LCAyNTIsIDEyMCwgMSwgMjMxLCAxODEsIDIwNiwgMjUyLCAxMjAsIDEsIDE5MSwgMjUyLCAxMjAsIDEsIDIxOSwgCi0gICAgMTY0LCAxOTEsIDI1MiwgMTIwLCAxLCAyMjksIDc3LCAyNTIsIDEyMCwgMSwgMjMzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMTksIAotICAgIDE2NCwgMjMzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMjcsIDE2NSwgMjUyLCAxMjAsIDEsIDI1MSwgMzMsIDI1MiwgMTIwLCAxLCAKLSAgICAyMjksIDE0OCwgMjUyLCAxMjAsIDEsIDIzMSwgMTI0LCAyNTIsIDEyMCwgMSwgNzMsIDI1MiwgMTIwLCAxLCA3MCwgMjUyLCAKLSAgICAxMjAsIDUsIDIxNiwgMzMsIDI1MiwgMTIwLCAyNSwgNSwgNzUsIDI1MiwgMTIwLCAyNSwgNSwgMjI2LCA2NywgNzUsIDI1MiwgCi0gICAgMTIwLCAyNSwgNSwgMjQ1LCAyMDksIDI1MiwgMTIwLCAyNSwgNSwgNzMsIDI1MiwgMTIwLCAyNSwgNSwgMjM0LCAyMTIsIDczLCAKLSAgICAyNTIsIDEyMCwgMjUsIDUsIDc2LCAyNTIsIDEyMCwgMjUsIDUsIDIzNCwgMjEyLCA3NiwgMjUyLCAxMjAsIDI1LCA1LCA3MCwgCi0gICAgMjUyLCAxMjAsIDI1LCA1LCAxMDQsIDMxLCAyMTksIDE2NCwgMjA2LCAyNTIsIDEyMCwgMTE2LCA1LCAyMjksIDc5LCAyNTIsIAotICAgIDEyMCwgMTE2LCA1LCAyNDIsIDYwLCAyNTIsIDEyMCwgMjI2LCAzNywgMjUyLCAxMjAsIDIyNiwgMzMsIDI1MiwgMTIwLCAxNiwgCi0gICAgMjUxLCAyNDEsIDIyOSwgMjI5LCAyMzEsIDM3LCAyNTIsIDEyMCwgMTYsIDI1MSwgMjQxLCAyMjUsIDY0LCAyNTIsIDEyMCwgCi0gICAgMTYsIDI1MSwgMjQxLCAyMzUsIDQ4LCAyNTIsIDEyMCwgMTYsIDI1MSwgMjQxLCAyMjYsIDM3LCAxOTYsIDEsIDE3NiwgMTk2LCAKLSAgICAxLCAyMzQsIDM5LCAxOTYsIDEsIDIzNCwgMTMyLCAxOTYsIDEsIDI0MywgMTM1LCAxOTYsIDEsIDI0MiwgMTg2LCAxOTYsIDEsIAotICAgIDIyOSwgNzcsIDE5NiwgMSwgMjUxLCAzMywgMTk2LCAxLCAyNTAsIDE1NywgMTk2LCAxLCAyMzUsIDE0MSwgMTk2LCAxLCAKLSAgICAyMjcsIDE2NSwgMTk2LCAxLCAyMTcsIDEwNSwgMTk2LCAxLCAyMTYsIDIwOCwgMTk2LCAxLCAyNDgsIDIyMSwgMTk2LCAxLCAKLSAgICAxOTcsIDE5NiwgMSwgMTkwLCAxOTYsIDEsIDIyNSwgNDIsIDE5NiwgMSwgMjI1LCAxNDcsIDE5NiwgMSwgMjQ0LCAxOTYsIAotICAgIDE5NiwgMSwgMjQ0LCA3NSwgMTk2LCAxLCAyNTIsIDE5MSwgMTk2LCAxLCAyNTEsIDIyMiwgMTk2LCAxLCAxODQsIDE5NiwgMSwgCi0gICAgMjMwLCAxNjgsIDE5NiwgMSwgMjE1LCAxODMsIDE5NiwgMSwgMjE1LCAxNzUsIDE5NiwgMSwgMjQ2LCAzOCwgMTk2LCAxLCAKLSAgICAxOTEsIDE5NiwgMSwgMjA1LCAxOTYsIDEsIDIzMywgMTM1LCAxOTYsIDEsIDE2MiwgMTk2LCAxLCAyNDEsIDE1MywgMTk2LCAKLSAgICAxLCAyMTQsIDI3LCAxOTYsIDEsIDIwNiwgMTk2LCAxLCAyMjAsIDEwMiwgMTk2LCAxLCAyMTIsIDY1LCAxOTYsIDEsIDYxLCAKLSAgICAxOTYsIDIxOCwgNzMsIDEsIDE5MSwgMTk2LCAyMTgsIDczLCAxLCAyMDUsIDE5NiwgMjUsIDUsIDI1NSwgNzMsIDE5NiwgMjUsIAotICAgIDUsIDczLCAxOTYsIDI1LCA1LCA3NiwgMTk2LCAyNSwgNSwgMjI2LCAxODMsIDE5NiwgMjUsIDUsIDcwLCAxOTYsIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgMTk2LCAyNSwgNSwgNzUsIDE5NiwgMTE2LCA1LCAyMzUsIDIzLCAxOTYsIDExNiwgNSwgMTkzLCAxOTYsIAotICAgIDExNiwgNSwgMTU2LCAxOTYsIDExNiwgNSwgMjMwLCAyNSwgMTk2LCAxMTYsIDUsIDIyNiwgMTA1LCAxOTYsIDExNiwgNSwgCi0gICAgMTUzLCAxOTYsIDExNiwgNSwgMjE3LCAxNTIsIDE5NiwgMTE2LCA1LCAyMjcsIDE0MiwgMTk2LCAxMTYsIDUsIDIzNCwgMjMwLCAKLSAgICAxOTYsIDUsIDIyMywgMTUwLCAxOTYsIDUsIDIyNywgMjA1LCAxOTYsIDIyNCwgMTQxLCAyMTcsIDEwMywgMTk2LCAyMjQsIAotICAgIDE0MSwgMjI3LCAxNTIsIDIxNiwgMTIwLCAyMTcsIDEwMywgMTk2LCAyMjQsIDE0MSwgMjUwLCAxNjQsIDE5NiwgMjI0LCAKLSAgICAxNDEsIDIxNSwgMTcwLCAyNTAsIDE2NCwgMTk2LCAyMjQsIDE0MSwgMjE1LCAxNjksIDE5NiwgMjEsIDIxMCwgODYsIDE5NiwgCi0gICAgMjEsIDExMCwgMTk2LCAyMSwgMTA1LCAxOTYsIDIxLCAxNTgsIDE5NiwgMjEsIDE2MSwgMTk2LCAyMSwgMTg5LCAxOTYsIDIxLCAKLSAgICAxOTQsIDE5NiwgMjEsIDE5OCwgMTk2LCAyMSwgMTk1LCAxOTYsIDIxLCAyMDAsIDE5NiwgMSwgMjE1LCAxNTYsIDE5NiwgMSwgCi0gICAgMjE1LCAxNDQsIDE5NiwgMSwgMjQ4LCAxMzUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDIxMCwgODYsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMjEsIDExMCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTA1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAKLSAgICAxNTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDE2MSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTg5LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDIxLCAxOTQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDE5OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgCi0gICAgMTk1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAyMDAsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMzLCAxMzUsIDIyNiwgCi0gICAgMjEwLCAyNTAsIDEwMywgMSwgMjUzLCAyMDYsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU0LCAyMTYsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMSwgMjU0LCAxMTUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU0LCAxNzgsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMSwgMjMzLCAxMzQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU1LCAzNSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAKLSAgICAyNTUsIDM2LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NSwgMzQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU1LCAyOSwgCi0gICAgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzIsIDI0MSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzUsIDE3MSwgMjI2LCAKLSAgICAyMTAsIDI1MCwgMTAzLCAxLCAyMzYsIDM0LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzNSwgMTkwLCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDEsIDIzNSwgMTc5LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzMiwgOTgsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMSwgMjE0LCAyMjEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjE0LCAyMTksIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgCi0gICAgMjE0LCAxNjgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjE0LCAxMTEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMzLCAKLSAgICA1OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDEwOCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDIxMiwgCi0gICAgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDE1MCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDg2LCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDEsIDIzMiwgMTU2LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIyNiwgMTM3LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDEsIDIyNiwgMjUyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIyNiwgMTI1LCAyMjYsIDIxMCwgMjUwLCAKLSAgICAxMDMsIDEsIDIyNiwgMjIyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIzMCwgMTAzLCAyMTUsIDEyMSwgMjI2LCAyMTAsIDI1MCwgCi0gICAgMTAzLCAyNDMsIDEzMCwgMjE1LCAxMjIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjMwLCAxMDEsIDIxNSwgMTIyLCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDIyMywgOTIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI1LCAxNDUsIDIyNiwgMjEwLCAyNTAsIDEwMywgCi0gICAgMjU0LCAyMDgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI0LCAxNDEsIDIzMCwgOTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI0LCAKLSAgICAxNDEsIDUyLCAyMzAsIDk4LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjE4LCA4LCAyMDcsIDIyNCwgMTQxLCAyNTEsIAotICAgIDI0MSwgMjI2LCAzOCwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDIyNCwgMTI5LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgCi0gICAgMjUxLCAxOSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDIzMywgOCwgMjIxLCAyMjUsIDIwNywgMjI0LCAxNDEsIDI1MSwgCi0gICAgMjQxLCAyMzUsIDEzLCAyMjEsIDIyNSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDI0OCwgMjIyLCAyMjEsIDIyNSwgMjA3LCAKLSAgICAyMjQsIDE0MSwgMjUxLCAyNDEsIDI1MiwgMTkyLCAyMjEsIDIyNSwgMjEzLCAyNTIsIDEzOCwgMjM0LCAyMTAsIDIxMywgCi0gICAgMjUyLCAxMzgsIDIyMCwgNzcsIDIxMywgMjUyLCAxMzgsIDIyNCwgMTk4LCAyMTMsIDI1MiwgNSwgMjI4LCAyMDksIDIxMywgCi0gICAgMjUyLCA1LCAyMTEsIDgwLCAyMzAsIDIyMiwgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyNTQsIDIxMywgMjM1LCAKLSAgICAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgCi0gICAgMjExLCA4MCwgMjM0LCAxOTgsIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDI1MSwgMiwgNTEsIDIxMywgMjUyLCAKLSAgICAxMzgsIDIxMSwgODAsIDIzNCwgMTk4LCAyMzUsIDI0MywgMjE4LCAxLCAyMjEsIDE5NywgMjEzLCAyNTIsIDEzOCwgNTIsIAotICAgIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjE1LCAyMTEsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjM0LCAxOTgsIDI1NCwgCi0gICAgNzcsIDIxMywgMjUyLCAxMzgsIDU5LCA1MSwgMjEzLCAyNTIsIDEzOCwgMTEzLCAxNzAsIDUxLCAyMTMsIDI1MiwgMTM4LCAKLSAgICAxMzQsIDE3MCwgNTEsIDIxMywgMjUyLCAxMzgsIDIyMiwgMjQwLCAyMzQsIDIwOSwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAKLSAgICAyNTIsIDEzOCwgMjUzLCAyMDQsIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjE4LCAwLCAyMTMsIAotICAgIDI1MiwgNSwgMjEzLCAxNDgsIDIxNCwgMjE2LCAyMTMsIDI1MiwgNSwgMjIzLCA0OSwgMjEzLCAxNDgsIDIxNCwgMjE2LCAKLSAgICAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDI1NCwgNzcsIDIxMywgMjUyLCA1LCAyMjMsIDQ5LCAyMTMsIDE0OCwgMjU0LCA3NywgCi0gICAgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyMTQsIDIxNywgMiwgMjE3LCA3NywgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyNTQsIAotICAgIDc4LCAyLCAyMTcsIDc3LCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjU0LCA5MSwgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDI1MiwgCi0gICAgMTY2LCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjE0LCAyMCwgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDIxNCwgMjEsIDIsIAotICAgIDIxNywgNzcsIDIxMywgMjUyLCA1LCAyMTYsIDY4LCAyMTMsIDI1MiwgNSwgMjQxLCAxOTEsIDE5OSwgMjU0LCA3NSwgMjEzLCAKLSAgICAyNTIsIDUsIDE5OSwgMjU0LCA3NSwgMjEzLCAyNTIsIDUsIDIyMiwgMTQyLCAxOTksIDI1NCwgNzUsIDIxMywgMjUyLCA1LCAKLSAgICAyNTQsIDc2LCAyMTQsIDIyMywgMjMwLCA5MCwgMjEzLCAyNTIsIDUsIDI1NCwgMjAsIDIxMywgMjUyLCA1LCAyMjIsIDE4NywgCi0gICAgMjU0LCAyMCwgMjEzLCAyNTIsIDEzOCwgMjUxLCAyLCA0OCwgMjEzLCAyNTIsIDUsIDIzNSwgMTAyLCAyMTMsIDI1MiwgNSwgCi0gICAgMjE0LCAxNjEsIDcsIDEsIDQsIDYsIDYxLCA3LCAxLCA0LCA2LCAyNTQsIDI0MywgNywgNCwgMSwgMjE1LCA5NCwgMjU0LCAKLSAgICAyNDMsIDcsIDEsIDQsIDYsIDI1MiwgMTM0LCAyNTMsIDE1OCwgNywgMSwgNCwgNiwgMjUxLCA2NiwgNywgMSwgNCwgNiwgCi0gICAgMjQ5LCA2MCwgNywgMSwgNCwgNiwgMjQ1LCA1OSwgNywgMSwgNCwgNiwgNzUsIDcsIDQsIDEsIDIxNSwgOTQsIDIwNCwgNzUsIAotICAgIDcsIDQsIDEsIDIxNSwgOTQsIDczLCA3LCAxLCA0LCA2LCAyMzUsIDE0NCwgNywgMSwgNCwgNiwgMjM1LCAyMywgNywgMSwgNCwgCi0gICAgNiwgMjMzLCAxNDksIDIsIDkxLCA3LCAxLCA0LCA2LCAxOTMsIDcsIDEsIDQsIDYsIDIyMywgNDksIDIzMCwgMjUsIDcsIDEsIAotICAgIDQsIDYsIDc2LCA3LCAxLCA0LCA2LCAyMDQsIDc2LCA3LCA0LCAxLCAyMTksIDE4NywgNzYsIDcsIDQsIDEsIDIxOSwgMTg3LCAKLSAgICAyMDQsIDc2LCA3LCA0LCAxLCAyMTksIDE4NywgMTQ0LCAyLCA5MSwgNywgNCwgMSwgMjE1LCA5NCwgMjI2LCAyMzQsIDcsIDEsIAotICAgIDQsIDYsIDIyNiwgMTM0LCA3LCA0LCAxLCAyMTYsIDE0LCAxNjMsIDc2LCA3LCA0LCAxLCAyNTEsIDE3NSwgMTYzLCA3NiwgNywgCi0gICAgMSwgNCwgNiwgMjI2LCAxMDUsIDcsIDEsIDQsIDYsIDIyMywgNDksIDE1MywgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTUzLCA3LCAKLSAgICAxLCA0LCA2LCAyMTcsIDE1MiwgNywgMSwgNCwgNiwgNzAsIDcsIDQsIDEsIDIxOSwgMTg3LCA3MCwgNywgNCwgMSwgMjE5LCAKLSAgICAxODcsIDI0OCwgMCwgNzAsIDcsIDQsIDEsIDIxOSwgMTg3LCAyMTUsIDk0LCAxOTMsIDcsIDEsIDQsIDYsIDIxNCwgMTA1LCAKLSAgICA3LCAxLCA0LCA2LCAyMTIsIDk4LCA3LCAxLCA0LCA2LCAyMTAsIDE1OSwgNywgMSwgNCwgNiwgMjQ1LCA4LCA3LCAxLCAyMTMsIAotICAgIDEzNSwgMjMzLCA4MiwgMjE4LCAyNTAsIDcsIDEsIDI1NCwgMTk2LCAyNiwgMSwgNCwgNiwgMjQzLCAxMDcsIDI2LCAxLCA0LCAKLSAgICA2LCAyMzMsIDk4LCAyNiwgMSwgNCwgNiwgMjI1LCAxMDgsIDI2LCAxLCA0LCA2LCAyMjMsIDM3LCAyNiwgMSwgNCwgNiwgCi0gICAgMjI0LCAxNjEsIDMzLCAxLCA0LCA2LCAyNDUsIDE3NCwgNTgsIDEsIDYsIDYxLCA1OCwgMSwgNiwgMjU0LCAyNDMsIDU4LCAxLCAKLSAgICA2LCAyNTMsIDE1OCwgNTgsIDEsIDYsIDI1MiwgMTM0LCAyNTMsIDE1OCwgNTgsIDEsIDYsIDI0OSwgNjAsIDU4LCAxLCA2LCAKLSAgICA3NSwgNTgsIDEsIDYsIDIyMywgNDksIDc1LCA1OCwgMSwgNiwgMjQzLCAyMDIsIDU4LCAxLCA2LCAyNDIsIDYwLCA1OCwgMSwgCi0gICAgNiwgNzMsIDU4LCAxLCA2LCAyMzUsIDE0NCwgNTgsIDEsIDYsIDIzNSwgMjMsIDU4LCAxLCA2LCAxNTYsIDU4LCAxLCA2LCAKLSAgICAxOTMsIDU4LCAxLCA2LCAyMzAsIDI1LCA1OCwgMSwgNiwgMjIzLCA0OSwgMjMwLCAyNSwgNTgsIDEsIDYsIDc2LCA1OCwgMSwgCi0gICAgNiwgMjI2LCAxMzQsIDU4LCAxLCA2LCAyMjYsIDEwNSwgNTgsIDEsIDYsIDE1MywgNTgsIDEsIDYsIDIxNywgMTUyLCA1OCwgCi0gICAgMSwgNiwgNzAsIDU4LCAxLCA2LCAyMTIsIDk4LCA1OCwgMSwgNCwgNjEsIDU4LCAxLCA0LCAyMTUsIDk0LCA2MSwgNTgsIDEsIAotICAgIDQsIDI1NCwgMTQzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjU0LCAyNDMsIDU4LCAxLCA0LCAyNTMsIDE1OCwgNTgsIDEsIDQsIAotICAgIDI0OSwgNjAsIDU4LCAxLCA0LCA3NSwgNTgsIDEsIDQsIDIyMSwgMTk1LCA1OCwgMSwgNCwgMjA0LCA3NSwgNTgsIDEsIDQsIAotICAgIDIxNSwgOTQsIDIwNCwgNzUsIDU4LCAxLCA0LCAyNDMsIDIwMiwgNTgsIDEsIDQsIDIxNSwgOTQsIDczLCA1OCwgMSwgNCwgCi0gICAgMjM1LCAyMywgNTgsIDEsIDQsIDE5MywgNTgsIDEsIDQsIDI0NSwgMTM4LCA1OCwgMSwgNCwgNzYsIDU4LCAxLCA0LCAyMDQsIAotICAgIDc2LCA1OCwgMSwgNCwgMjE2LCAxNCwgMTYzLCA3NiwgNTgsIDEsIDQsIDI1MSwgMTc1LCAxNjMsIDc2LCA1OCwgMSwgNCwgCi0gICAgMjI2LCAxMDUsIDU4LCAxLCA0LCAyMTcsIDE1MiwgNTgsIDEsIDQsIDcwLCA1OCwgMSwgNCwgMjE5LCAxODcsIDcwLCA1OCwgCi0gICAgMSwgNCwgMjE1LCA5NCwgMTkzLCA1OCwgMSwgNCwgMjE0LCAxMDUsIDU4LCAxLCA0LCAyNTQsIDE5NiwgNTgsIDEsIDQsIAotICAgIDI1MiwgMjYsIDU4LCAxLCA0LCAyNiwgMjQzLCAxMDcsIDU4LCAxLCA0LCAyNDgsIDU0LCA1OCwgMSwgNCwgMjYsIDIyNSwgCi0gICAgMTMzLCA1OCwgMSwgNCwgMjUwLCAxMTAsIDcsIDIxOCwgNjUsIDQsIDEsIDczLCA3LCAyMTgsIDY1LCA0LCAxLCAxNTMsIDcsIAotICAgIDIxOCwgNjUsIDQsIDEsIDcwLCA3LCAyMTgsIDY1LCA0LCAxLCAyMTQsIDEwNSwgMjYsIDIxOCwgNjUsIDQsIDEsIDI1MiwgCi0gICAgMjYsIDI2LCAyMTgsIDY1LCA0LCAxLCAyNDMsIDEwNywgMjYsIDIxOCwgNjUsIDQsIDEsIDIyMywgMzcsIDI2LCAyMTgsIDY1LCAKLSAgICA0LCAxLCAyMjUsIDEzMywgMjYsIDIxOCwgNjUsIDQsIDEsIDI1MCwgMTEwLCA3LCA0LCAxLCAyMTQsIDIxNCwgNywgNCwgMSwgCi0gICAgNTcsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDI0NSwgCi0gICAgNywgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjMyLCA1MCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjMwLCAKLSAgICAyNiwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjQ0LCA4OCwgMjIsIDIzMCwgMjI0LCAxODIsIAotICAgIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyMzAsIDIyNCwgMTgyLCAKLSAgICA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjE1LCA5NCwgMjQzLCAyMDIsIDU4LCAxLCAKLSAgICAzMywgMjQ1LCAxNTAsIDcsIDQsIDEsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNCwgMSwgMjE2LCAyMTEsIDIsIDIxOCwgCi0gICAgMTA3LCA3LCA0LCA2LCAxLCAyNDAsIDE1NCwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTg2LCAyLCA5MSwgNywgNCwgMSwgMjI2LCAKLSAgICAxMDYsIDIsIDkxLCA3LCA0LCA2LCAxLCAxMDQsIDIsIDkxLCA3LCA0LCAxLCAyMTQsIDE1OCwgMiwgOTEsIDcsIDQsIDEsIAotICAgIDU3LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQ1LCA3LCAKLSAgICAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjMyLCA1MCwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQ1LCA3NiwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAxMTUsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjU0LCAxNDQsIDIsIDIyMywgCi0gICAgNTUsIDEwMywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjQxLCA1MiwgMjIsIDIxNywgNzcsIDcsIDQsIDEsIDE2MCwgMiwgMjIzLCAKLSAgICA1NSwgMTAzLCA3LCA0LCAxLCAyMDQsIDE2MCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMjMsIDQ5LCAyMDQsIDE2MCwgCi0gICAgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMjEsIDE5NiwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDAsIDE1NCwgCi0gICAgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMDQsIDE0NCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDUsIDc2LCAyLCAKLSAgICAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDEwNCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDUsIDksIDIsIDIyMywgNTUsIAotICAgIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDI1NCwgMTQzLCA1OCwgMSwgNCwgMjUxLCA2NiwgNTgsIDEsIDQsIDI1MSwgNjcsIAotICAgIDIsIDI0OSwgMTAwLCA1OCwgMSwgNCwgMjQ1LCA1OSwgNTgsIDEsIDQsIDIyMywgNDksIDIwNCwgNzUsIDU4LCAxLCA0LCAKLSAgICAyNDUsIDYsIDU4LCAxLCA0LCAyNDcsIDExOSwgMjM1LCAxNDUsIDIsIDkxLCA1OCwgMSwgNCwgMTE5LCAyNDMsIDIwMiwgNTgsIAotICAgIDEsIDQsIDIxNSwgOTQsIDI0MiwgNjAsIDU4LCAxLCA0LCAyNDAsIDE1NCwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE4NSwgCi0gICAgNTgsIDEsIDQsIDYsIDczLCA1OCwgMSwgNCwgNiwgMjQwLCAxNTQsIDIsIDkxLCA1OCwgMSwgNCwgMjM1LCAxNDUsIDIsIAotICAgIDI0OSwgMTI3LCA1OCwgMSwgNCwgMjMzLCAxNDksIDIsIDIyMywgNTUsIDEwMywgNTgsIDEsIDQsIDIzMywgMTQ5LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDU4LCAxLCA0LCA2LCAxNTYsIDU4LCAxLCA0LCAyMzIsIDUwLCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIAotICAgIDk0LCAyMzIsIDUwLCAyLCAxOTksIDIzMywgMzYsIDU4LCAxLCA0LCAyMzAsIDI2LCAyLCA0MywgMTAzLCA1OCwgMSwgNCwgCi0gICAgMjMwLCAyNiwgMiwgMjIzLCA1NSwgMTAzLCA1OCwgMSwgNCwgNiwgMjMwLCAyNSwgNTgsIDEsIDQsIDI1MiwgMTM0LCA3NiwgCi0gICAgNTgsIDEsIDQsIDIyNSwgMTMzLCA1OCwgMSwgNCwgMjIyLCA5MiwgMiwgMTAzLCA1OCwgMSwgNCwgMjQ1LCA3NSwgNTgsIDEsIAotICAgIDQsIDIxNywgMTUzLCAyLCAyMjYsIDY2LCAxMDMsIDU4LCAxLCA0LCAxMDQsIDEzMCwgNTgsIDEsIDQsIDIxNCwgMTU3LCA1OCwgCi0gICAgMSwgNCwgNiwgNzAsIDU4LCAxLCA0LCAyMTQsIDEwNiwgMiwgMTAzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjE0LCAxMDUsIDU4LCAKLSAgICAxLCA0LCAyMTAsIDE1OSwgNTgsIDEsIDQsIDIxMCwgMTYwLCAyLCAyMjMsIDU1LCAxMDMsIDU4LCAxLCA0LCAyMTAsIDE2MCwgCi0gICAgMiwgMjQ5LCAxMDAsIDU4LCAxLCA0LCAyNDUsIDgsIDU4LCAxLCA0LCAyMTYsIDE3OSwgMzgsIDI0NiwgMTE4LCAyNDIsIAotICAgIDEzNywgMjU1LCAxNCwgMzgsIDI0NiwgMTE4LCAyNTUsIDMsIDI1NSwgMTQsIDM4LCAyMTksIDY5LCA1MSwgMzgsIDIxOCwgNiwgCi0gICAgNzgsIDM4LCAyMzEsIDIzMSwgMzgsIDI0MiwgMTM0LCAzOCwgMjMxLCAyMjksIDM4LCAyNTUsIDEsIDM4LCAyNDIsIDEzNSwgCi0gICAgMzgsIDI1NSwgMiwgMzgsIDcsIDQsIDEsIDIyMywgMjI0LCA1MSwgMzgsIDI1MSwgMTQ1LCAzOCwgMjMxLCAyMzAsIDM4LCAKLSAgICA1MiwgMjUwLCAzMSwgNDgsIDM4LCAyMjYsIDIyNSwgNDgsIDM4LCAyMTAsIDM1LCA1MSwgMzgsIDIzNSwgMTcyLCA1MSwgMzgsIAotICAgIDIxNCwgMTUxLCA0OCwgMzgsIDIxNCwgMTM0LCA0OCwgMzgsIDcsIDQsIDEsIDI0NCwgNjMsIDIwNCwgMTE1LCA0OCwgMzgsIAotICAgIDcsIDQsIDEsIDI1NCwgMjQzLCAzOCwgNywgNCwgMSwgMjU0LCA3MywgMzgsIDcsIDQsIDEsIDI1MywgMTc2LCAzOCwgNywgNCwgCi0gICAgMSwgMjUxLCA2NywgMjUwLCAxODMsIDM4LCA3LCA0LCAxLCAyMzUsIDIxMywgMjQ5LCA2MCwgMzgsIDcsIDQsIDEsIDI0NSwgCi0gICAgNTksIDM4LCA3LCA0LCAxLCAyNDMsIDIwMiwgMzgsIDcsIDEsIDQsIDYsIDI0MywgMjAyLCAzOCwgNywgNCwgMSwgMjM1LCAKLSAgICAyMywgMzgsIDcsIDQsIDEsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE5MywgMzgsIDcsIDQsIAotICAgIDEsIDIzMCwgMjUsIDM4LCA3LCAxLCA0LCA2LCAyMzAsIDI1LCAzOCwgNywgMSwgNCwgNiwgMTUzLCAzOCwgNywgNCwgMSwgCi0gICAgMjIzLCAyMjQsIDIyMiwgMTg2LCAzOCwgNywgNCwgMSwgMjIyLCA5MSwgMzgsIDcsIDQsIDEsIDE5OSwgMjIyLCA5MSwgMzgsIAotICAgIDcsIDQsIDEsIDIxMCwgMTU5LCAzOCwgNTIsIDIzNSwgMTkzLCAyNTEsIDE0NywgNTEsIDM4LCAyNTQsIDE0OCwgMTI4LCAKLSAgICAyMTYsIDQyLCA1MSwgMzgsIDQzLCAyNTMsIDI1MCwgNDgsIDM4LCA0NCwgMjUzLCAyNTAsIDIyLCAxMjQsIDI1MywgMjUwLCAKLSAgICA1MSwgNywgNiwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNTEsIDcsIDQsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDUxLCA3LCA2LCAKLSAgICAxLCA1NywgMiwgNTksIDQ4LCA3LCA0LCAxLCA1NywgMiwgNTksIDQ4LCA3LCA2LCAxLCA1NywgMiwgNTksIDUxLCA3LCA0LCAKLSAgICAxLCA1NywgMiwgNTksIDUxLCA3LCA2LCAxLCA1NywgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCA1NywgMiwgMjMyLCAyMTQsIAotICAgIDUxLCA3LCA2LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDE4NCwgMjIsIDE0MiwgNywgNCwgMSwgMjUxLCA2NywgMiwgMjUwLCAKLSAgICAxODQsIDIyLCAxNDIsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgNTksIDQ4LCAKLSAgICA3LCA2LCAxLCAyNDksIDYxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQ5LCAKLSAgICA2MSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDI0OSwgNjEsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAzMSwgCi0gICAgNTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAKLSAgICAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzMywgCi0gICAgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAKLSAgICA1MSwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyMTYsIDg5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE4NCwgMjIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDI1MCwgMTg0LCAyMiwgMjUxLCAxNDYsIDcsIDYsIDEsIDI0NSwgNywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDUsIAotICAgIDcsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQyLCA2MSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAKLSAgICAyNDIsIDYxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgCi0gICAgMjQ4LCAxLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAyNDgsIDEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MCwgMTgzLCA3LCA0LCAKLSAgICAxLCAyNDIsIDYxLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUxLCAxNDcsIDUxLCA3LCA0LCAxLCAyNDIsIAotICAgIDYxLCAyLCAyNTEsIDE0NywgNTEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDIxNiwgODksIDUxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAyLCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgMjQ4LCAyLCAyMiwgMTQyLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAxNDIsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIAotICAgIDE0MiwgNywgNiwgMSwgMjM1LCAyNCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIAotICAgIDIzNSwgMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAKLSAgICAyMzMsIDE0OSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgCi0gICAgNTksIDI1MiwgNDMsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDU5LCAyNTIsIDQzLCAyMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMzIsIDIxNCwgCi0gICAgNTEsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMzEsIDUxLCAKLSAgICA3LCA2LCAxLCAyMzIsIDUwLCAyLCAxNDIsIDcsIDQsIDEsIDIzMiwgNTAsIDIsIDE0MiwgNywgNiwgMSwgMjMyLCA1MCwgMiwgCi0gICAgNTksIDQ4LCA3LCA0LCAxLCAyMzIsIDUwLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIzMiwgNTAsIDIsIDU5LCA1MSwgNywgNCwgCi0gICAgMSwgMjMyLCA1MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIAotICAgIDU5LCA0OCwgNywgNiwgMSwgMjMwLCAyNiwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCA1OSwgNTEsIDcsIDYsIAotICAgIDEsIDIzMCwgMjYsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAKLSAgICAyMzAsIDI2LCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDE0NCwgCi0gICAgMiwgMjE2LCA4OSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDg5LCAyMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDIxNiwgODksIDIyLCAyNDgsIDEsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDI0OCwgMSwgNywgNiwgMSwgMTQ0LCAKLSAgICAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDYsIAotICAgIDEsIDIyNiwgMTA2LCAyLCAxNDIsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAxNDIsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCA1OSwgCi0gICAgNDgsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIAotICAgIDIyMywgMjI0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAKLSAgICA1OSwgNTEsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgMjUyLCA0MywgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgNTksIDI1MiwgNDMsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgCi0gICAgNCwgMSwgMjIzLCAyMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAKLSAgICAyMjIsIDkyLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgNTksIAotICAgIDUxLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyNTUsIDMsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDI1NSwgMywgCi0gICAgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjUwLCAyMzUsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTIsIAotICAgIDIsIDI1MCwgMjM1LCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDkyLCAyLCA1OSwgMjUyLCA0MywgMjIsIDU5LCA0OCwgNywgCi0gICAgNCwgMSwgMjIyLCA5MiwgMiwgNTksIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA1OSwgNDgsIAotICAgIDcsIDQsIDEsIDIxNywgMTUzLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUzLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAKLSAgICAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIAotICAgIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCA1MSwgNywgCi0gICAgNiwgMSwgMTA0LCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyMTYsIDg5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAKLSAgICAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyMTYsIDg5LCAyMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgODksIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAKLSAgICAyNDgsIDEsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAyNDgsIDEsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAxODIsIAotICAgIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxODIsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNCwgCi0gICAgMTA2LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNDIsIAotICAgIDEzNiwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMTQyLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDYsIDEsIDIxMiwgCi0gICAgOTksIDIsIDI0OCwgMSwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgNDgsIAotICAgIDcsIDQsIDEsIDIxMiwgOTksIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEyLCA5OSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTIsIAotICAgIDk5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCA1OSwgCi0gICAgNDgsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDEsIDcsIDYsIDEsIAotICAgIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAyNTAsIDMwLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgCi0gICAgMjEwLCAxNjAsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAKLSAgICAyMTcsIDE1MywgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDIxMSwgCi0gICAgMTE4LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDExNSwgMiwgNDQsIDE2MywgMjIyLCAyMzMsIDcsIDQsIDEsIDE5OSwgCi0gICAgMjIyLCA5MiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxOTksIDIyMiwgOTIsIDIsIDI0NywgMjU1LCA5MSwgNywgNCwgMSwgMTk5LCAKLSAgICAyMjIsIDkyLCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAyMjAsIDc2LCAyMjIsIDkxLCA3LCA0LCAxLCAyNDgsIDU0LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTE1LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDExNSwgMiwgMjQxLCA1MiwgNDgsIAotICAgIDcsIDQsIDEsIDExNSwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDE0MiwgNywgNCwgMSwgCi0gICAgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNCwgCi0gICAgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAKLSAgICAyMiwgMTgyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIAotICAgIDU5LCA1MSwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAKLSAgICAyMiwgMTQyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAKLSAgICAyNTEsIDE0NywgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMjQxLCA1MiwgNDgsIDcsIAotICAgIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAxODIsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAxODIsIDcsIAotICAgIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCA1OSwgCisgICAgMCwgMjE5LCAyMCwgMjQ1LCAzOSwgNzksIDIyNCwgMSwgNzksIDU0LCA1MCwgMjQ3LCAxNDAsIDUwLCAyMjUsIDE4NSwgNTAsIAorICAgIDI1NCwgMTM0LCAyNTQsIDY1LCA0MywgMjI2LCA3LCA0NCwgMjI2LCA3LCAyNTMsIDIyNCwgOTYsIDUwLCAyNDksIDIyNywgCisgICAgMjQwLCAxNzQsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjE5LCA0OCwgMjEsIDIxMCwgODYsIDIxLCAxMTEsIDIxLCAxMDUsIDIxLCAKKyAgICAxNTgsIDIxLCAxNjEsIDIxLCAxOTAsIDIxLCAxOTUsIDIxLCAxOTksIDIxLCAxOTYsIDIxLCAyMDEsIDI0OSwgMjM0LCAyMjAsIAorICAgIDE1MiwgMjMzLCAyMSwgNTAsIDI0NSwgMTA2LCA1MCwgMjQyLCAxMzcsIDUwLCAyMjQsIDE2LCA3OSwgMjQ5LCAyMjUsIDI1MywgCisgICAgMjE0LCA3LCA2LCAxLCA2MSwgNywgNiwgMSwgMjUzLCAxNjYsIDcsIDYsIDEsIDI1MSwgNzQsIDcsIDYsIDEsIDI0OSwgNjgsIAorICAgIDcsIDYsIDEsIDc2LCA3LCA2LCAxLCAyNDUsIDE0LCA3LCA2LCAxLCAyNDMsIDIwOSwgNywgNiwgMSwgMjQyLCA2NywgNywgNiwgCisgICAgMSwgNzQsIDcsIDYsIDEsIDIzNSwgMTUwLCA3LCA2LCAxLCAyMzUsIDI5LCA3LCA2LCAxLCAxNTYsIDcsIDYsIDEsIDE5NCwgCisgICAgNywgNiwgMSwgMjMwLCAzMCwgNywgNiwgMSwgNzgsIDcsIDYsIDEsIDIyNiwgMTA5LCA3LCA2LCAxLCAyMjQsIDk5LCA3LCA2LCAKKyAgICAxLCAxNTMsIDcsIDYsIDEsIDIyMiwgOTMsIDcsIDYsIDEsIDIxNywgMTUzLCA3LCA2LCAxLCA2OSwgNywgNiwgMSwgMjE0LCAKKyAgICAxMDUsIDcsIDYsIDEsIDIxMiwgOTgsIDcsIDYsIDEsIDIxMSwgMTc4LCA3LCA2LCAxLCAyMTEsIDExNywgNywgNiwgMSwgCisgICAgMjEwLCAxNTksIDQzLCA0MiwgMTI3LCAyMjMsIDUzLCAyMTksIDQ4LCA0NCwgNDIsIDEyNywgMjUwLCAzOSwgMjU1LCAyMywgCisgICAgMTIxLCAyMzIsIDIxOSwgMjQyLCAxNDQsIDI1NSwgMjMsIDcsIDQsIDEsIDYxLCA3LCA0LCAxLCAyNTMsIDE2NiwgNywgNCwgCisgICAgMSwgMjUxLCA3NCwgNywgNCwgMSwgMjQ5LCA2OCwgNywgNCwgMSwgNzYsIDcsIDQsIDEsIDI0NSwgMTQsIDcsIDQsIDEsIAorICAgIDI0MywgMjA5LCA3LCA0LCAxLCAyNDIsIDY3LCA3LCA0LCAxLCA3NCwgNywgNCwgMSwgMjM1LCAxNTAsIDcsIDQsIDEsIDIzNSwgCisgICAgMjksIDcsIDQsIDEsIDE1NiwgNywgNCwgMSwgMTk0LCA3LCA0LCAxLCAyMzAsIDMwLCA3LCA0LCAxLCA3OCwgNywgNCwgMSwgCisgICAgMjI2LCAxMDksIDcsIDQsIDEsIDIyNCwgOTksIDcsIDQsIDEsIDE1MywgNywgNCwgMSwgMjIyLCA5MywgNywgNCwgMSwgMjE3LCAKKyAgICAxNTMsIDcsIDQsIDEsIDY5LCA3LCA0LCAxLCAyMTQsIDEwNSwgNywgNCwgMSwgMjEyLCA5OCwgNywgNCwgMSwgMjExLCAxNzgsIAorICAgIDcsIDQsIDEsIDIxMSwgMTE3LCA3LCA0LCAxLCAyMTAsIDE1OSwgNDMsIDI0OSwgMTA3LCAxMjcsIDY3LCAyMzIsIDIxOSwgCisgICAgNDQsIDI0OSwgMTA3LCAxMjcsIDE4NCwgMjI4LCA3OCwgMjE5LCAyMCwgMjM1LCAyMDAsIDI0NSwgMzksIDc5LCAyNTAsIAorICAgIDE4NCwgNTAsIDIyNCwgMjMxLCA1MCwgMjQ5LCAxMDYsIDUwLCAyMTEsIDQwLCA1MCwgMjUxLCAxNDMsIDEzMCwgMjIxLCAKKyAgICAxNzUsIDUwLCAyNDgsIDksIDI0OSwgMTcxLCA1MCwgMjQ0LCAxNDQsIDIyNiwgMTU4LCAyMzUsIDI0NSwgMjMzLCA0OCwgNTIsIAorICAgIDI1NCwgMTE4LCAyMjQsIDEsIDc5LCAyMjgsIDU3LCA1MCwgMjE5LCA1NCwgMjQwLCAxNzUsIDIyMywgMTA1LCA1MCwgMjMxLCAKKyAgICAyMzcsIDI0OCwgNzksIDUwLCAyMjUsIDI0LCA1MCwgMjE4LCAyNCwgMTA1LCAyMTgsIDI0LCAxNTgsIDI1NSwgMTIsIDI1NSwgCisgICAgMjMsIDIzMCwgMjMzLCA1MCwgMjI1LCA3MSwgNTAsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjUwLCAxOTEsIDIxOCwgMjQsIAorICAgIDExMSwgMjMxLCAxNTMsIDIyNiwgMTU4LCAyMzUsIDI0NSwgMjIyLCAyNTAsIDUyLCAyNTQsIDExOCwgMjI0LCAxLCA3OSwgCisgICAgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgMjEyLCAKKyAgICAxMTQsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMjM1LCAyMDAsIDIyNCwgMTYsIDc5LCA3LCA2LCAxLCAxMTYsIDIsIDI0MiwgCisgICAgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDE4NCwgNywgNiwgMSwgMTE2LCAyLCAyNDgsIDksIDcsIDYsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA2LCAxLCAKKyAgICAyNTQsIDI1MiwgNywgNiwgMSwgMjUxLCA3NSwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDE2MCwgMiwgMjQyLCAxNDMsIDcsIDYsIAorICAgIDEsIDE2MCwgMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDE2MCwgMiwgMjQ4LCA5LCA3LCA2LCAKKyAgICAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMTYxLCAKKyAgICAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyNDUsIDY3LCA3LCA2LCAxLCAyMzAsIAorICAgIDMxLCAyLCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgMTQyLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDE0NCwgMiwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0OCwgOSwgMjMwLCA4OSwgCisgICAgNTAsIDcsIDYsIDEsIDE0NCwgMiwgOTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgMTQyLCAKKyAgICA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgCisgICAgMTQyLCA3LCA2LCAxLCAyMTYsIDE1MiwgNywgNCwgMSwgMjIwLCA3OCwgMjIyLCA5MywgNywgNCwgMSwgMTE2LCAyLCAyNDIsIAorICAgIDE0MywgNywgNCwgMSwgMTE2LCAyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTE2LCAyLCAKKyAgICAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgCisgICAgMjU0LCAyNTIsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAxNjAsIDIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxNjAsIDIsIDI0OCwgOSwgNywgNCwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgOSwgNywgNCwgMSwgMjQ1LCA2NywgNywgNCwgMSwgMjMwLCAKKyAgICAzMSwgMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgCisgICAgMTQ0LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxNDQsIDIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNDgsIDksIDI0NywgMTc3LCAKKyAgICA1MCwgNywgNCwgMSwgMTQ0LCAyLCA5MSwgNywgNCwgMSwgMTA0LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAxNDIsIAorICAgIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAKKyAgICAxNDIsIDcsIDQsIDEsIDIxNiwgMTUyLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDIzMSwgMjM3LCA3LCA0LCAxLCAxMTYsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAKKyAgICAxMTYsIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAxMTYsIDIsIDIyNiwgMjI4LCA3LCA0LCAxLCAxMTYsIDIsIDIyNiwgMjI4LCAKKyAgICA3LCA2LCAxLCAyNTEsIDc1LCAyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDE0MiwgNywgNiwgMSwgMjUxLCA3NSwgMiwgCisgICAgMjUwLCAzOCwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjUxLCA3NSwgMiwgNTksIDQ4LCA3LCA0LCAKKyAgICAxLCAyNTEsIDc1LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNTEsIDc1LCAKKyAgICAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDI1MCwgCisgICAgMjQyLCA3LCA2LCAxLCAyNDksIDY5LCAyLCA5MSwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgOTEsIDcsIDYsIDEsIDE2MCwgMiwgCisgICAgMjMxLCAyMzcsIDcsIDQsIDEsIDE2MCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE2MCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgCisgICAgMSwgMTYwLCAyLCAyMjYsIDIyOCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIAorICAgIDI0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIAorICAgIDI0MywgMjEwLCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDI0MywgMjEwLCAKKyAgICAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIAorICAgIDkxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCA5MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDE4NCwgNywgNCwgMSwgMjQwLCAKKyAgICAxNjEsIDIsIDE4NCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAKKyAgICAyMzcsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI1MSwgMTU0LCA3LCAKKyAgICA2LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjgsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgCisgICAgMjQwLCAxNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ3LCAxMjcsIDc0LCA3LCA2LCAyNywgMjM2LCAzOCwgNywgNCwgMjcsIAorICAgIDIzNiwgMzgsIDcsIDYsIDEsIDIzNSwgMTUxLCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjUwLCAzOCwgNywgCisgICAgNiwgMSwgMjM1LCAzMCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzMsIAorICAgIDI0NSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDE0MiwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDE0MiwgNywgNiwgMSwgMjMzLCAKKyAgICAxNTUsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAKKyAgICAyNTAsIDI0MiwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIAorICAgIDI0NywgMTI4LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIDI0NywgMTI4LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgOTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA5MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgMTQyLCA3LCA0LCAxLCAyMzAsIDMxLCAKKyAgICAyLCAxNDIsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDE5MSwgNywgCisgICAgNiwgMSwgMjMwLCAzMSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzAsIAorICAgIDMxLCAyMjQsIDIwNywgMjUxLCA4NiwgMjU0LCA2NSwgNywgNiwgMSwgMjQ1LCAxNDYsIDcsIDQsIDEsIDI0NSwgMTQ2LCA3LCAKKyAgICA2LCAxLCAxNDQsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNDQsIDIsIDI1MSwgCisgICAgMTU0LCA3LCA0LCAxLCAxNDQsIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNDQsIDIsIDUyLCAxNDIsIDcsIDQsIDEsIDE0NCwgCisgICAgMiwgNTIsIDE0MiwgNywgNiwgMjcsIDIyNiwgMjM4LCA3LCA0LCAyNywgMjI2LCAyMzgsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAKKyAgICAxNDIsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAxNDIsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgCisgICAgMjIzLCAyMjcsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIyMywgMjI3LCAKKyAgICAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMTQyLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAxNDIsIDcsIDYsIDEsIAorICAgIDIyMiwgOTQsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIAorICAgIDI1MCwgMTkxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjUwLCAyNDIsIAorICAgIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMTcsIDE1NCwgCisgICAgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA5MSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDkxLCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDE4NCwgNywgNCwgMSwgMTA0LCAyLCAxODQsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIAorICAgIDEwNCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDEwNCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDEwNCwgMiwgMjUxLCAxNTQsIAorICAgIDcsIDYsIDEsIDEwNCwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDIyMiwgMjM3LCA0OCwgNywgNiwgMSwgCisgICAgMTA0LCAyLCA1MiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjgsIDcsIAorICAgIDQsIDEsIDEwNCwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIxMiwgOTksIAorICAgIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzOCwgCisgICAgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMjEwLCAKKyAgICAxNjAsIDIsIDE0MiwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIAorICAgIDIwMCwgMjIyLCA5MywgNywgNCwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCA1NywgMiwgMTAzLCA3LCA2LCAxLCA1NywgMiwgCisgICAgMjE2LCAxMiwgNywgNCwgMSwgNTcsIDIsIDIxNiwgMTIsIDcsIDYsIDEsIDEzOCwgMTk1LCA3LCA0LCAxLCAxMzgsIDE5NSwgCisgICAgNywgNiwgMSwgMjA0LCA3OCwgNywgNiwgMSwgMjUxLCA3NSwgMiwgMTAzLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAxMDMsIDcsIAorICAgIDYsIDEsIDI1NCwgMjI4LCAyNDksIDY4LCA3LCA2LCAxLCAyNDksIDY5LCAyLCAxMDMsIDcsIDYsIDEsIDI0OSwgNjksIDIsIAorICAgIDIxNiwgMTIsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDIxNiwgMTIsIDcsIDQsIDEsIDIxNSwgOTQsIDI0OCwgNjIsIDcsIDYsIAorICAgIDEsIDIyMywgNTIsIDc2LCA3LCA2LCAxLCAyMjEsIDE5NywgNywgNiwgMSwgMjA0LCA3NiwgNywgNiwgMSwgMjQ1LCAxNSwgMiwgCisgICAgMTAzLCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgCisgICAgMTE0LCA3LCA0LCAxLCAyNDAsIDIwOCwgNywgNiwgMSwgMjM1LCAxOTIsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCA5MSwgNywgCisgICAgNiwgMSwgMjM1LCAzMCwgMiwgMTAzLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAxMDMsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAKKyAgICAxMzAsIDcsIDQsIDEsIDIzMywgMTA2LCAyLCA5MSwgNywgNiwgMSwgMjE1LCA5NCwgMTk0LCA3LCA2LCAxLCAyMzAsIDMxLCAKKyAgICAyLCA0MywgMTAzLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyMDAsIDQ0LCAyMzMsIDQyLCA3LCA2LCAxLCAxNDQsIDIsIDIzMCwgCisgICAgMjI5LCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNTUsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNTUsIDcsIDYsIDEsIAorICAgIDIyNiwgMjIzLCA3LCA0LCAxLCAyMjYsIDIyMywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDEwMywgNywgNCwgMSwgMjI2LCAKKyAgICAxMTAsIDIsIDEwMywgNywgMSwgMjEwLCAyMTQsIDcsIDYsIDEsIDEzOCwgMTA1LCA3LCA0LCAxLCAxMzgsIDEwNSwgNywgNiwgCisgICAgMSwgMjQ1LCA4MywgNywgMSwgMjIzLCA1MiwgMjQ1LCA4NCwgMjMyLCAxMjksIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyMjYsIAorICAgIDcwLCAxMDMsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAxMDMsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAxMDMsIDcsIDYsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNTUsIDcsIDQsIDEsIDEwNCwgMiwgCisgICAgMjQwLCAyNTUsIDcsIDYsIDEsIDIxNCwgMTU3LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMTAzLCA3LCA2LCAxLCAyMTEsIAorICAgIDExOCwgMiwgMTAzLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMTAzLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIDQsIAorICAgIDEsIDIxMCwgMTYwLCAyLCA5MSwgNywgNiwgMSwgMjQ1LCAxNiwgNywgNiwgMSwgMjQ1LCAxNywgMjIzLCA1MSwgNywgNCwgMSwgCisgICAgMjQ1LCAxNywgMjIzLCA1MSwgNywgNCwgMSwgMjQ1LCAxNywgMiwgMjE3LCA3OCwgNywgMSwgMTEzLCAyLCA5MSwgNywgNiwgCisgICAgMSwgMTM4LCAxOTAsIDcsIDQsIDEsIDEzOCwgMTkwLCA3LCAxLCAyMzUsIDIwMCwgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCAKKyAgICA5MSwgNywgMSwgMjExLCAxODEsIDcsIDEsIDI0OCwgNTUsIDI1MCwgMTksIDcsIDEsIDIzMywgODMsIDI1MCwgMTksIDcsIDEsIAorICAgIDI1NCwgMTQ1LCAyNTAsIDE5LCA3LCAxLCAyMjMsIDU4LCAyNTAsIDE5LCA3LCA2LCAxLCAyNDYsIDQ4LCAyLCAyNTAsIDI0MiwgCisgICAgNywgNiwgMSwgMjQ5LCA2OSwgMiwgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDYsIDQ4LCAyLCAKKyAgICAyNTAsIDI0MiwgNywgNiwgMSwgMjMyLCAxOTQsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCA0LCAxLCAyMzUsIDE1MCwgNywgNCwgCisgICAgMSwgMjMyLCAxOTQsIDcsIDYsIDEsIDIyOCwgMTkxLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCA0LCAxLCAyMzUsIDE1MCwgNywgCisgICAgNCwgMSwgMjI4LCAxOTEsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAyNDIsIDcsIAorICAgIDYsIDEsIDI0MCwgMTYxLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMjQyLCAKKyAgICA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDE0MiwgNywgCisgICAgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyNTAsIDI0MiwgCisgICAgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIAorICAgIDI0MiwgMTQzLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMjE1LCA5NCwgNzYsIAorICAgIDcsIDYsIDEsIDExNiwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxMTYsIDIsIDI0OCwgMTAsIDIyLCAKKyAgICAyMzEsIDIzNywgNywgNiwgMSwgMTE2LCAyLCA1OSwgNzIsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMTE2LCAyLCA1OSwgNzIsIAorICAgIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjU0LCAyNTMsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyNTQsIDI1MywgMiwgMjMxLCAKKyAgICAyMzcsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCA5MSwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDkxLCA3LCA2LCAxLCAyNDMsIAorICAgIDIxMCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjM1LCAzMCwgMiwgCisgICAgMjUwLCAyNDIsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxNDQsIDIsIDIyNiwgMjI4LCA3LCA0LCAKKyAgICAxLCAxNDQsIDIsIDIyNiwgMjI4LCA3LCA2LCAxLCAxNDQsIDIsIDIyNiwgMjI5LCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIAorICAgIDE0NCwgMiwgMjI2LCAyMjksIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjQ1LCAxNywgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIAorICAgIDI0NSwgMTcsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0NiwgNDcsIAorICAgIDcsIDYsIDEsIDI0OSwgNjksIDIsIDQsIDEsIDIxMCwgMTU5LCA3LCA0LCAxLCAyNDYsIDQ3LCA3LCA2LCAxLCAyNDMsIDIxMCwgCisgICAgMiwgMTQyLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMTQyLCA3LCA2LCAxLCAyNDAsIDIwNiwgNywgNiwgMSwgMjExLCAxODEsIAorICAgIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNDIsIDE0MywgNywgNiwgMSwgCisgICAgMTE2LCAyLCAyMjIsIDIzNywgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDcyLCAyMiwgMTQyLCA3LCAKKyAgICA2LCAxLCAyNTQsIDI1MywgMiwgMTQyLCA3LCA0LCAxLCAyNTQsIDI1MywgMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDIxOCwgCisgICAgMTA1LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxOCwgMTA1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDUyLCAKKyAgICAyNDIsIDE0MywgNywgNCwgMSwgMTE2LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMjM1LCAyMDAsIDI1MSwgCisgICAgMTU0LCA3LCA0LCAxLCAxMTYsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMTYwLCAyLCA1MiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNCwgCisgICAgMSwgMTYwLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCA1MiwgMjQyLCAxNDMsIDcsIDQsIAorICAgIDEsIDI0MCwgMTYxLCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIAorICAgIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDQsIAorICAgIDEsIDE0NCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAyMjMsIDIyNywgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCAKKyAgICA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA0LCAKKyAgICAxLCAyMjIsIDk0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDYsIDEsIDIxMCwgMjMxLCA3LCA0LCAxLCAyMTAsIDIzMSwgNywgNiwgMSwgCisgICAgMjQyLCA2OCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAKKyAgICAyMDAsIDQ0LCAyMzMsIDQyLCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyNDksIDEwOCwgNywgNiwgMSwgMjI2LCAxMzgsIDcsIDQsIAorICAgIDEsIDIyNiwgMTM4LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA2LCAKKyAgICAxLCAxMTYsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTE2LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxOTEsIDcsIAorICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDE0NCwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAKKyAgICAxNDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAyMiwgMjMxLCAyMzcsIDcsIAorICAgIDQsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA0OCwgNywgNCwgMSwgCisgICAgMTQ0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDcyLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDE0NCwgMiwgCisgICAgNTksIDcyLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjExLCAxMTgsIAorICAgIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI0OSwgCisgICAgMTA4LCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0NywgMTI3LCAyMzUsIDE1MCwgNywgNCwgCisgICAgMSwgMjQ4LCAxNTEsIDI0NywgMjI4LCA3LCA0LCAxLCAyMjQsIDM0LCAyNDcsIDIyOCwgNywgNiwgMSwgMTE2LCAyLCA5MSwgCisgICAgNywgNiwgMSwgMjUxLCA3NSwgMiwgOTEsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDkxLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgMTMwLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjE3LCAyNTEsIAorICAgIDIxNywgNzgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMTcsIDI1MSwgMjE3LCA3OCwgNywgNiwgMSwgMjQyLCAxODcsIDIxOCwgCisgICAgMTMxLCA3LCA0LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDcsIDYsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgMTA0LCAxMzAsIAorICAgIDcsIDYsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCA3LCA2LCAxLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAxNjAsIDIsIDkxLCA3LCAKKyAgICA2LCAxLCAyMzUsIDE1MSwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTUxLCAyLCA5MSwgNywgNiwgMSwgNCwgMjI0LCAxMDAsIDIsIAorICAgIDI0MSwgNTksIDIxNywgNzgsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAyNDEsIDU5LCAyMTcsIDc4LCA3LCA2LCAxLCAyMjMsIAorICAgIDIyNywgMiwgOTEsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCA5MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAKKyAgICAyMTEsIDExOCwgMiwgOTEsIDcsIDQsIDEsIDIxNSwgOTQsIDYxLCA3LCA0LCAxLCAyNTQsIDE1MSwgNywgNCwgMSwgMjE1LCAKKyAgICA5NCwgMjU0LCAxNTEsIDcsIDQsIDEsIDU3LCAyLCAxMDMsIDcsIDQsIDEsIDIwNCwgNzgsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIAorICAgIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAxMDMsIDcsIDQsIAorICAgIDEsIDIyMywgNTIsIDc2LCA3LCA0LCAxLCAyMjEsIDE5NywgNywgNCwgMSwgMjIxLCAxOTgsIDIsIDEwMywgNywgNCwgMSwgCisgICAgMjA0LCA3NiwgNywgNCwgMSwgMjIzLCA1MiwgMjA0LCA3NiwgNywgNCwgMSwgMjIzLCA1MiwgMjA0LCAxNjAsIDIsIDEwMywgCisgICAgNywgNCwgMSwgMjUwLCA4LCAyMjMsIDUyLCAyMDQsIDc2LCA3LCA0LCAxLCAyNDcsIDEyNywgMjM1LCAxNTEsIDIsIDkxLCA3LCAKKyAgICA0LCAxLCAyNDMsIDIxMCwgMiwgMTAzLCA3LCA0LCAxLCAxMTksIDI0MywgMjA5LCA3LCAxLCA0LCA2LCAyNDMsIDIwOSwgNywgCisgICAgNCwgMSwgMjQzLCAxMTQsIDcsIDQsIDEsIDIyMywgMTU0LCAyNDAsIDI1NSwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2NywgCisgICAgNywgNCwgMSwgMjQyLCA2OCwgMiwgMTAzLCA3LCA0LCAxLCAyNDEsIDIxNSwgMiwgMTAzLCA3LCA0LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTkyLCA3LCAxLCA0LCA2LCA3NCwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTIsIDQ5LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjIzLCA1OCwgMTAzLCAKKyAgICA3LCA0LCAxLCAyMzMsIDcsIDcsIDQsIDEsIDIxNSwgOTQsIDE5NCwgNywgNCwgMSwgMjE1LCA5NCwgMjMyLCA1NSwgMiwgCisgICAgMjAwLCAyMzMsIDQyLCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAxMDMsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDQzLCAxMDMsIDcsIAorICAgIDQsIDEsIDIzMCwgMzEsIDIsIDIyMywgNTgsIDEwMywgNywgMSwgNCwgNiwgMjMwLCAzMCwgNywgNCwgMSwgMjUyLCAxNDIsIAorICAgIDc4LCA3LCAxLCA0LCA2LCAyMjYsIDIzOCwgNywgNCwgMSwgMjUwLCA4LCAyMjYsIDIwNSwgNywgNCwgMSwgMjI1LCAxMzYsIAorICAgIDcsIDQsIDEsIDIxNSwgOTQsIDE1MywgNywgNCwgMSwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDIwMCwgMjMzLCA0MiwgNywgNCwgCisgICAgMSwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDEwMywgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDIwMCwgMjMzLCA0MiwgNywgNCwgCisgICAgMSwgMjIzLCAyMjcsIDIsIDIxNywgNzgsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyNDQsIDk1LCA3LCA0LCAxLCAyMjMsIDUyLCAKKyAgICAyMjMsIDIyNywgMiwgMjQ0LCA5NSwgNywgMSwgNCwgNiwgMTUzLCA3LCAxLCA0LCA2LCAyMzUsIDIwMCwgMTUzLCA3LCA0LCAKKyAgICAxLCAyMjIsIDk0LCAyLCAxMDMsIDcsIDQsIDEsIDI0NSwgODMsIDcsIDQsIDEsIDI0NywgMTI3LCAyMzUsIDE1MSwgMiwgCisgICAgMjE4LCAxMDUsIDIyLCAxMDMsIDcsIDQsIDEsIDIxOCwgMjMzLCAyMjMsIDUyLCAyNDUsIDgzLCA3LCA0LCAxLCAyNDUsIDg0LCAKKyAgICAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjE1LCA5NCwgMjE3LCAxNTMsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyMjMsIDU4LCAKKyAgICAxMDMsIDcsIDQsIDEsIDEwNCwgMTMwLCA3LCA0LCAxLCAyMTQsIDE1NywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgCisgICAgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDUsIDcsIDQsIDEsIDIxNSwgOTQsIDIxMiwgOTgsIDcsIDQsIDEsIDIxNSwgOTQsIAorICAgIDIxMSwgMTE3LCA3LCAxLCA0LCA2LCAyMTEsIDExNywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgCisgICAgMSwgMjEwLCAxNjAsIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDUsIDE2LCA3LCA0LCAxLCAyNDUsIDE3LCAyLCAyNDksIAorICAgIDEwOCwgNywgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA3LCAxLCAyMjUsIDE0MiwgMjEzLCAxMzUsIDI0NCwgMSwgNywgMSwgCisgICAgMjM1LCAyMDAsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNywgMSwgMjE4LCAxMTIsIDI1MSwgNzQsIDcsIDEsIDI1MSwgMjU0LCAKKyAgICAyNTAsIDE5LCA3LCAxLCA0LCA2LCAyNTMsIDE2NiwgNywgNCwgMSwgMjUwLCA4LCAyMDQsIDc2LCA3LCAxLCA0LCA2LCAyNDMsIAorICAgIDIxMCwgMiwgMTAzLCA3LCAxLCA0LCA2LCAyNDIsIDY3LCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjQ5LCAxMzUsIDcsIDQsIAorICAgIDEsIDIxNSwgOTQsIDIzNSwgMjksIDcsIDEsIDQsIDYsIDE1NiwgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDEwMywgNywgMSwgCisgICAgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCA5MSwgNywgMSwgMjIzLCA1MiwgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCA5MSwgNywgCisgICAgNCwgMSwgMjQ2LCA0OCwgMjQ3LCAyMjgsIDcsIDQsIDEsIDI0OCwgMzQsIDI0NywgMjI4LCA3LCA0LCAxLCAyNDYsIDQ4LCAKKyAgICAyNDcsIDIyOSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDIxNSwgMTg2LCAyNDcsIDIyOCwgNywgNCwgMSwgMjE2LCAyMzYsIAorICAgIDI0NywgMjI4LCA3LCA0LCAxLCAyMTcsIDMwLCAyNDcsIDIyOSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0NCwgMTQyLCAKKyAgICAyNDcsIDIyOCwgNywgNCwgMSwgMjMyLCAxMDUsIDI0NywgMjI4LCA3LCA0LCAxLCAyMzIsIDU2LCAyNDcsIDIyOCwgNywgMSwgCisgICAgMjUxLCAyNTQsIDIyNSwgMTg0LCA3LCAxLCAyNTIsIDYsIDIyNSwgMTg0LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDY4LCAyLCAKKyAgICAyNDQsIDk1LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDY4LCAyLCAyNDQsIDk2LCAyMiwgMjE3LCA3OCwgNTgsIDEsIDQsIAorICAgIDI0MiwgNjcsIDU4LCAxLCA0LCAyNDIsIDY4LCAyLCAxMDMsIDU4LCAxLCA0LCAyMzUsIDE1MCwgNTgsIDEsIDQsIDE1MywgCisgICAgNTgsIDEsIDQsIDIxNSwgOTQsIDE1MywgNTgsIDEsIDQsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAxMDMsIDU4LCAxLCA0LCA2LCAKKyAgICAyMzUsIDIwMCwgMTUzLCA1OCwgMSwgNCwgMjEyLCA5OCwgNTgsIDEsIDQsIDIxMSwgMTE3LCA1OCwgMSwgMjI0LCAxOTMsIAorICAgIDU4LCAxLCA1MiwgMjI0LCAxOTMsIDU4LCAxLCAyMTUsIDk0LCAyNDksIDIyNywgNTgsIDEsIDI1NCwgNjUsIDU4LCAxLCAKKyAgICAyMjMsIDUyLCAyNDksIDIyNywgNTgsIDEsIDQ0LCAxNjMsIDIyMiwgMjM2LCA1OCwgMSwgNDMsIDE2MywgMjIyLCAyMzYsIAorICAgIDU4LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDU4LCAxLCAyMjMsIDUyLCAyNDIsIDE4NywgMjE4LCAxMzEsIDU4LCAxLCA0MywgCisgICAgMjU0LCAxLCA1OCwgMSwgNDQsIDI1NCwgMSwgNTgsIDEsIDEyMCwgMjU0LCAxLCA1OCwgMSwgMTI0LCAyNTQsIDEsIDU4LCAxLCAKKyAgICAyNTAsIDM5LCAyNTUsIDIzLCAyNTAsIDI0MiwgNTgsIDEsIDY3LCAyMzIsIDIxOSwgNTgsIDEsIDIzMSwgMjM3LCA1OCwgMSwgCisgICAgMjU1LCAxMiwgMjU1LCAyMywgNTgsIDEsIDI0MiwgMTQ0LCAyNTUsIDIzLCA1OCwgMSwgMTIxLCA2NywgMjMyLCAyMTksIDU4LCAKKyAgICAxLCAxMjEsIDIzMSwgMjM3LCA1OCwgMSwgMTIxLCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDEyMSwgMjU1LCAxMiwgCisgICAgMjU1LCAyMywgNTgsIDEsIDIxNSwgMjIzLCAyNDksIDIzNCwgNTgsIDEsIDE2MywgMjE1LCAyMjMsIDI0OSwgMjM0LCA1OCwgCisgICAgMSwgMjUwLCAxODEsIDQ0LCAxNjMsIDIyMiwgMjM2LCA1OCwgMSwgMjUwLCAxODEsIDQzLCAxNjMsIDIyMiwgMjM2LCA1OCwgCisgICAgMSwgMTIwLCAyMTcsIDg4LCA1OCwgMSwgMTI0LCAyMTcsIDg4LCA1OCwgMSwgOTYsIDUwLCA1OCwgMSwgMjMwLCAxODcsIDUwLCAKKyAgICAyNTEsIDE1NCwgNTksIDQ4LCAyMjIsIDIzNywgNDgsIDIyNiwgMjI4LCA0LCAxODQsIDUyLCAyNTUsIDEyLCAyNTUsIDIzLCAKKyAgICA1OCwgMSwgMjIzLCAzOSwgMTAzLCA1OCwgMSwgMjQ5LCAxMzksIDI1NSwgMjMsIDU4LCAxLCA0LCAyNDMsIDExNCwgNTgsIDEsIAorICAgIDQsIDE1NiwgNTgsIDEsIDQsIDIyMiwgOTMsIDU4LCAxLCA0LCAyMTEsIDE3OCwgNTgsIDEsIDQsIDIyMywgNTIsIDI0MiwgCisgICAgMTg3LCAyMTgsIDEzMSwgNTgsIDEsIDI0NSwgMjgsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAxMzgsIDEzMCwgNTgsIDEsIAorICAgIDIzMCwgMjMwLCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI3LCAxMzgsIDEzMCwgNTgsIAorICAgIDEsIDIxMCwgMjU0LCAyNDgsIDUyLCAxMzgsIDc5LCA1OCwgMSwgMjExLCA3MCwgMjQ4LCA1MiwgMTM4LCA3OSwgNTgsIDEsIAorICAgIDIxMywgMTMzLCA1OCwgMSwgMjE0LCAxODYsIDU4LCAxLCA1MiwgMjU0LCA2NSwgNTgsIDEsIDEyMSwgMTI0LCAyNTQsIDEsIAorICAgIDU4LCAxLCAxMjEsIDEyMCwgMjU0LCAxLCA1OCwgMSwgMTIxLCA0MywgMjU0LCAxLCA1OCwgMSwgMTIxLCA0NCwgMjU0LCAxLCAKKyAgICA1OCwgMSwgMTIxLCAyMjIsIDIzNiwgNTgsIDEsIDIzMCwgMjI5LCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDIzMCwgCisgICAgMjI5LCA1MiwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAyMzAsIDIyOSwgNTIsIDI1NSwgMTIsIDI1NSwgMjMsIDU4LCAxLCAKKyAgICAxMjEsIDE4NCwgNTgsIDEsIDIyMywgMTYwLCAyNDksIDIzNCwgNTgsIDEsIDI1MiwgNjYsIDEyNSwgMjE2LCAzMSwgNTgsIDEsIAorICAgIDI0NSwgMTUxLCAxMjUsIDIxNiwgMzEsIDU4LCAxLCAyNTIsIDY2LCAxMjEsIDIxNiwgMzEsIDU4LCAxLCAyNDUsIDE1MSwgCisgICAgMTIxLCAyMTYsIDMxLCA1OCwgMSwgMjIwLCA1NiwgNTgsIDEsIDIwNCwgMjIwLCA1NiwgNTgsIDEsIDEyMSwgNDMsIDc1LCAKKyAgICAzOCwgMjQyLCAxNDQsIDI1NSwgMjMsIDM4LCAyNTUsIDEyLCAyNTUsIDIzLCAzOCwgMjUwLCAzOSwgMjU1LCAyMywgMzgsIAorICAgIDE4NCwgMzgsIDIzMSwgMjM3LCAzOCwgMjI2LCAxMjMsIDM4LCAyNTEsIDE1NCwgMzgsIDU5LCA0OCwgMzgsIDI0OCwgOSwgCisgICAgMzgsIDI0MSwgNTksIDQ4LCAzOCwgMjIyLCAyMzcsIDQ4LCAzOCwgNTIsIDI1NSwgMTIsIDI1NSwgMjMsIDM4LCAyNTAsIAorICAgIDI0MiwgMzgsIDY3LCAyMzIsIDIyMCwgNDgsIDM4LCA1MiwgNjcsIDIzMiwgMjIwLCA0OCwgMzgsIDUyLCAyNDIsIDE0NCwgCisgICAgMjU1LCAyMywgMzgsIDI1MSwgNywgMzgsIDIzNSwgMjAwLCAyNTEsIDE1NCwgMzgsIDIxNSwgOTQsIDI0OSwgMjI4LCA0OCwgCisgICAgMzgsIDI0OSwgMjI4LCA0OCwgMzgsIDIyMywgNTIsIDI0OSwgMjI4LCA0OCwgMzgsIDI0OSwgMjI4LCA3MiwgMjIyLCAyNTQsIAorICAgIDM4LCAyNDIsIDE0NCwgMjU1LCAyNCwgNTEsIDM4LCAyNTUsIDEyLCAyNTUsIDI0LCA1MSwgMzgsIDQzLCAyMTcsIDg5LCA1MSwgCisgICAgMzgsIDQ0LCAyMTcsIDg5LCA1MSwgMzgsIDQzLCAyNTQsIDExOCwgNDgsIDM4LCAyNDAsIDI1NSwgMzgsIDQzLCAxNjMsIAorICAgIDIyMiwgMjM3LCA1MSwgMzgsIDEyMCwgMjE3LCA4OSwgNTEsIDM4LCAxMjQsIDIxNywgODksIDUxLCAzOCwgOTYsIDUsIDUxLCAKKyAgICAzOCwgMjMwLCAxODcsIDUsIDUxLCAzOCwgMjI2LCA2OCwgMjQxLCA1OSwgNTEsIDM4LCAyMjMsIDU4LCAyNDEsIDU5LCA1MSwgCisgICAgMzgsIDU5LCA1MSwgMzgsIDI0OCwgMTAsIDUxLCAzOCwgMjIyLCAyMzcsIDUxLCAzOCwgMjQ5LCAyMjgsIDUxLCAzOCwgMjUwLCAKKyAgICAxOTEsIDM4LCAyMjYsIDIyOCwgMzgsIDY3LCAyMzIsIDIyMCwgNTEsIDM4LCAyNTEsIDE0OCwgNTEsIDM4LCAyMzUsIDIwMCwgCisgICAgNTIsIDI1NCwgMzIsIDUxLCAzOCwgMjUwLCAyNDMsIDUxLCAzOCwgMjUwLCAzOSwgMjU1LCAyNCwgNTEsIDM4LCAyNTEsIAorICAgIDE1NSwgNTEsIDM4LCAyMzUsIDIwMCwgMjUxLCAxNTUsIDUxLCAzOCwgMjE2LCA5MCwgNTEsIDM4LCAyMzEsIDIzOCwgNTEsIAorICAgIDM4LCAxMjEsIDIzMiwgMjE5LCAzOCwgNTIsIDEyMSwgMjMyLCAyMTksIDM4LCAyMTYsIDkwLCAyMjYsIDEyNCwgMzgsIDIxOSwgCisgICAgMjUzLCAyMTgsIDEwNSwgMjI2LCAxMjQsIDM4LCAyMDAsIDIxOCwgMTA1LCAyMjYsIDEyNCwgMzgsIDIxOSwgMjUzLCAyMTksIAorICAgIDQ5LCAyMjYsIDEyNCwgMzgsIDIwMCwgMjE5LCA0OSwgMjI2LCAxMjQsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNywgNTEsIDM4LCAKKyAgICAyMzUsIDIwMCwgMjUxLCAxNDgsIDUxLCAzOCwgNDIsIDUxLCAzOCwgMjIxLCAxODIsIDUxLCAzOCwgMjExLCAxNzksIDQ4LCAKKyAgICAzOCwgNjcsIDE4NCwgMzgsIDUyLCAyMjYsIDEyMywgMzgsIDI0MiwgMTQ0LCAxMzgsIDc5LCAzOCwgMjU1LCAxMiwgMTM4LCAKKyAgICA3OSwgMzgsIDI2LCAyMjUsIDE3OCwgMzgsIDI2LCAyMzQsIDgsIDM4LCAyNiwgMjQ4LCA0LCAyMTYsIDE5LCAzOCwgMjYsIAorICAgIDIxMCwgMjE5LCAzOCwgMjUxLCAxNDgsIDQ4LCAzOCwgMjQ1LCAxMDYsIDUsIDUxLCAzOCwgNTIsIDY3LCAyMzIsIDIyMCwgCisgICAgNTEsIDM4LCA0MywgMjU0LCAxMTgsIDUxLCAzOCwgMjI4LCA1NywgMjE2LCA5MCwgNDgsIDM4LCAyNDEsIDY1LCA0OCwgMzgsIAorICAgIDI1NCwgMTU2LCAxMjgsIDIxNiwgNDMsIDQ4LCAzOCwgNDMsIDQ0LCA4MCwgNTEsIDM4LCAyMTQsIDE1MywgODAsIDUxLCAzOCwgCisgICAgMjQyLCAxNDksIDIzNSwgNjksIDM4LCA0NCwgMjU0LCAyLCA0OCwgMzgsIDQzLCAxNjMsIDIyMiwgMjM3LCA0OCwgMzgsIAorICAgIDI0NCwgMTM5LCAzOCwgMjExLCAxNzksIDUxLCAzOCwgNDMsIDI1NCwgMiwgNTEsIDM4LCA0NCwgMjU0LCAyLCA1MSwgMzgsIAorICAgIDQ0LCAyNTQsIDIsIDIyLCAxMjAsIDI1NCwgMiwgNTEsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNywgNDgsIDM4LCA1OSwgNzIsIAorICAgIDIyMiwgMjU0LCAzOCwgMjUzLCAyMjUsIDUxLCAzOCwgNTIsIDIyMiwgMjM3LCA1MSwgMzgsIDIxMCwgMzUsIDQ4LCAzOCwgCisgICAgNTIsIDI1MSwgMTU1LCA1MSwgMzgsIDUyLCAyNTEsIDE1NCwgMzgsIDUyLCAyMzEsIDIzNywgMzgsIDUyLCAyMzEsIDIzOCwgCisgICAgNTEsIDM4LCA1MiwgMTg0LCAzOCwgNTIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgMzgsIDUyLCA5NywgODAsIDUxLCAzOCwgNywgCisgICAgNCwgMSwgNjEsIDM4LCA3LCA0LCAxLCA3NiwgMzgsIDcsIDQsIDEsIDc0LCAzOCwgNywgNCwgMSwgNzgsIDM4LCA3LCA0LCAxLCAKKyAgICA2OSwgMzgsIDcsIDQsIDEsIDI1MSwgNzQsIDM4LCA3LCA0LCAxLCAyNDksIDY4LCAzOCwgNywgNCwgMSwgMjQyLCA2NywgMzgsIAorICAgIDcsIDQsIDEsIDE5NCwgMzgsIDcsIDQsIDEsIDE1MywgMzgsIDcsIDQsIDEsIDIxNywgMTUzLCAzOCwgNywgNCwgMSwgMjE0LCAKKyAgICAxMDUsIDM4LCA3LCA0LCAxLCAyMTEsIDE3OCwgMjYsIDYsIDEsIDI0MSwgMjAzLCAyNiwgNCwgMSwgMjQxLCAyMDMsIDI2LCAKKyAgICA2LCAxLCAyNTQsIDMxLCAyMjEsIDI0OCwgMjYsIDQsIDEsIDI1NCwgMzEsIDIyMSwgMjQ4LCAyNiwgMjI3LCAyMDIsIDUwLCAKKyAgICAyNiwgMjMyLCAxMTQsIDIyNywgMjAyLCA1MCwgMjYsIDYsIDEsIDIyNiwgNTUsIDI0NywgMjM1LCAyNiwgNCwgMSwgMjI2LCAKKyAgICA1NSwgMjQ3LCAyMzUsIDI2LCAyMTAsIDIxOSwgMjYsIDQsIDIyMywgNTIsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDQsIAorICAgIDI0NiwgMTI2LCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA0LCAyMjMsIDUyLCAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAKKyAgICAxODAsIDg3LCAyNiwgMjI0LCAxNiwgNzksIDI2LCAyMTYsIDE5LCAyNiwgMjQ4LCA0LCAyMTYsIDE5LCAyNiwgNiwgMSwgCisgICAgMjU0LCAxNTIsIDIsIDIxNiwgMTksIDI2LCAyNTQsIDEwNSwgMjE3LCAzLCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIxNiwgCisgICAgMTksIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMTYsIDE5LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIxNiwgMTksIDI2LCA2LCAKKyAgICAxLCAyMjYsIDIwNCwgMiwgMjE2LCAxOSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTYsIDE5LCAyNiwgNiwgMSwgMjI2LCAKKyAgICAyMDYsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjE2LCAxOSwgMjYsIDYsIDEsIAorICAgIDI1NCwgMTUxLCAyNiwgNiwgMSwgMjUyLCAzNCwgMjYsIDYsIDEsIDI0MywgMTE0LCAyNiwgNiwgMSwgMjQ4LCA2MiwgMjYsIAorICAgIDYsIDEsIDI0NSwgMTA4LCAyNiwgNiwgMSwgMjEwLCA4NSwgMjYsIDYsIDEsIDI0NSwgNzEsIDI2LCA2LCAxLCAyMTYsIDE4MCwgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkyLCAyNiwgNiwgMSwgMjM0LCAyMjgsIDI2LCA2LCAxLCAyMzMsIDEwNCwgMjYsIDYsIDEsIAorICAgIDIzMCwgMTA3LCAyNiwgNiwgMSwgMjI3LCAyNDIsIDI2LCA2LCAxLCAyMTEsIDE1NywgMjYsIDYsIDEsIDIyNiwgMjAzLCAyNiwgCisgICAgNiwgMSwgMjI1LCAxMTEsIDI2LCA2LCAxLCAyMjMsIDQwLCAyNiwgNiwgMSwgMjE5LCAxNzksIDI2LCA2LCAxLCAyMTcsIDQyLCAKKyAgICAyNiwgNiwgMSwgMjE0LCAxNTcsIDI2LCA2LCAxLCAyMjUsIDEzNiwgMjYsIDYsIDEsIDI1MCwgMTE4LCAyNiwgNiwgMSwgCisgICAgMjI0LCAxNjQsIDI2LCA2LCAxLCAyMjYsIDIwNSwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDMsIDI2LCA2LCAxLCAKKyAgICAyMTQsIDE1OCwgMiwgMjQ4LCAzLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyNDUsIDEwOSwgCisgICAgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjE2LCAKKyAgICAxOSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjU0LCAxNTEsIDI2LCAKKyAgICA0LCAxLCAyNTIsIDM0LCAyNiwgNCwgMSwgMjQzLCAxMTQsIDI2LCA0LCAxLCAyNDgsIDYyLCAyNiwgNCwgMSwgMjQ1LCAxMDgsIAorICAgIDI2LCA0LCAxLCAyMTAsIDg1LCAyNiwgNCwgMSwgMjQ1LCA3MSwgMjYsIDQsIDEsIDIxNiwgMTgwLCAyNiwgNCwgMSwgMjM1LCAKKyAgICAxOTIsIDI2LCA0LCAxLCAyMzQsIDIyOCwgMjYsIDQsIDEsIDIzMywgMTA0LCAyNiwgNCwgMSwgMjMwLCAxMDcsIDI2LCA0LCAKKyAgICAxLCAyMjcsIDI0MiwgMjYsIDQsIDEsIDIxMSwgMTU3LCAyNiwgNCwgMSwgMjI2LCAyMDMsIDI2LCA0LCAxLCAyMjUsIDExMSwgCisgICAgMjYsIDQsIDEsIDIyMywgNDAsIDI2LCA0LCAxLCA0MCwgMjE5LCAxNzksIDI2LCA0LCAxLCAyMTksIDE3OSwgMjYsIDQsIDEsIAorICAgIDIxNywgNDIsIDI2LCA0LCAxLCAyMTQsIDE1NywgMjYsIDQsIDEsIDIyNSwgMTM2LCAyNiwgNCwgMSwgMjUwLCAxMTgsIDI2LCAKKyAgICA0LCAxLCAyMjQsIDE2NCwgMjYsIDQsIDEsIDIyNiwgMjA1LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMywgMjYsIDQsIAorICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDMsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDIxNCwgCisgICAgMTU4LCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNiwgMTksIDI2LCA2LCAyMzQsIDI1MywgODcsIDI2LCAKKyAgICAyNTIsIDM1LCA4NywgMjYsIDIxNiwgMTgxLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDEsIDU5LCA4NywgMjYsIDIxNCwgCisgICAgMTU4LCAyLCAyNTUsIDEyLCAyMiwgMjQxLCA1OSwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjQ4LCAxMCwgMjIsIDI0MSwgNTksIAorICAgIDg3LCAyNiwgMjI1LCAxMzcsIDg3LCAyNiwgMjI1LCAxMTIsIDg3LCAyNiwgMjM0LCAyNTMsIDg3LCAyNiwgMSwgMjU0LCAzMSwgCisgICAgMjM0LCAxMiwgMjYsIDQsIDEsIDI1NCwgMzEsIDIzNCwgMTIsIDI2LCAxLCAyMTgsIDEzOSwgMjYsIDQsIDEsIDIxOCwgMTM5LCAKKyAgICAyNiwgMSwgMjQ3LCAyMzUsIDI2LCA0LCAxLCAyNDcsIDIzNSwgMjYsIDEsIDIzNCwgMTIsIDI2LCA0LCAxLCAyMzQsIDEyLCAKKyAgICAyNiwgMSwgMjIxLCAyNDgsIDI2LCA0LCAxLCAyMjEsIDI0OCwgODEsIDYsIDEsIDIyMCwgNTcsIDgxLCA0LCAxLCAyMjAsIAorICAgIDU3LCA4MSwgNiwgMSwgMjQ0LCAxNDgsIDgxLCA0LCAxLCAyNDQsIDE0OCwgODEsIDYsIDEsIDIzNCwgMTIzLCA4MSwgNCwgMSwgCisgICAgMjM0LCAxMjMsIDgxLCA2LCAxLCAyNDEsIDUyLCA4MSwgNCwgMSwgMjQxLCA1MiwgODEsIDYsIDEsIDI0MywgMTA5LCA4MSwgCisgICAgNCwgMSwgMjQzLCAxMDksIDgxLCA2LCAxLCAyMjAsIDI0LCA4MSwgNCwgMSwgMjIwLCAyNCwgODEsIDYsIDEsIDI0OCwgNzcsIAorICAgIDgxLCA0LCAxLCAyNDgsIDc3LCAyNiwgMjM0LCAyMjksIDg3LCAyNiwgMjIzLCA0MSwgODcsIDI2LCAyMzIsIDg4LCAyMTksIAorICAgIDE4MCwgODcsIDI2LCAxLCAyMTAsIDIyNCwgMjYsIDYsIDIxNiwgMTgxLCA4NywgMjYsIDIzMiwgODgsIDI0NSwgMTA5LCA4NywgCisgICAgMjYsIDIyMywgNTIsIDIzMiwgODgsIDI0NSwgMTA5LCA4NywgMjYsIDYsIDEsIDIyMCwgOSwgMjYsIDQsIDEsIDIyMCwgOSwgCisgICAgMjYsIDYsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDYsIDEsIDIyMSwgMjQ1LCAyNiwgNCwgMSwgMjIxLCAyNDUsIDI2LCAKKyAgICAyMjMsIDQxLCAyLCAyMTgsIDEwNSwgODcsIDI2LCA2LCAyMjMsIDUyLCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA2LCAKKyAgICAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNiwgMjIzLCA1MiwgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgCisgICAgMTgwLCA4NywgMzMsIDYsIDEsIDIzNiwgNjgsIDIsIDI0MiwgMTQzLCAzMywgNiwgMSwgMjM1LCAxOTYsIDMzLCA2LCAxLCAKKyAgICAyNDcsIDE3MCwgMzMsIDYsIDEsIDI0MiwgMTk0LCAzMywgNiwgMSwgMjE0LCAyMDIsIDIzNiwgNjcsIDMzLCA2LCAxLCAyNDYsIAorICAgIDQ0LCAzMywgNiwgMSwgMjUxLCA4NCwgNzQsIDMzLCA2LCAxLCAyMTEsIDgsIDMzLCA2LCAxLCAyMzUsIDEzMiwgMzMsIDYsIAorICAgIDEsIDIzMiwgMTkzLCAzMywgNiwgMSwgMjI4LCAxODMsIDMzLCA2LCAxLCAyMTUsIDE3NSwgMzMsIDYsIDEsIDIzNCwgNTQsIAorICAgIDMzLCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDMzLCA2LCAxLCAyMTksIDI1MywgNjksIDMzLCA2LCAxLCAyNDYsIAorICAgIDQwLCAzMywgNiwgMSwgNjEsIDMzLCA2LCAxLCAyNTIsIDgzLCAzMywgNiwgMSwgMjEzLCAyNTUsIDMzLCA2LCAxLCAyNDIsIAorICAgIDI0MywgMzMsIDYsIDEsIDI0OCwgOTgsIDMzLCA2LCAxLCAyMzYsIDY3LCAzMywgNiwgMSwgMjEwLCA3NCwgMzMsIDYsIDEsIAorICAgIDIxMCwgOTQsIDMzLCA2LCAxLCA3NCwgMzMsIDYsIDEsIDIxOSwgMjUzLCA3NCwgMzMsIDYsIDEsIDE3NiwgMzMsIDYsIDEsIAorICAgIDI0NSwgMTgyLCAzMywgNiwgMSwgMjQ1LCAxNjcsIDMzLCA2LCAxLCAyNDUsIDE1OCwgMzMsIDYsIDEsIDc4LCAzMywgNiwgMSwgCisgICAgMjI1LCAyMjQsIDMzLCA2LCAxLCAyNDUsIDEwMCwgMzMsIDYsIDEsIDI0NSwgOTAsIDMzLCA2LCAxLCAyMTcsIDIzLCAzMywgCisgICAgNiwgMSwgNjksIDMzLCA2LCAxLCAyNDUsIDIxMCwgMzMsIDYsIDEsIDE2MiwgMzMsIDYsIDEsIDIxNSwgMTc5LCAzMywgNiwgCisgICAgMSwgMjUwLCAxMzksIDMzLCA2LCAxLCAyMjAsIDEwNCwgMzMsIDYsIDEsIDIyMCwgNjcsIDMzLCA2LCAxLCAyNDIsIDEwLCAKKyAgICA1MCwgMzMsIDYsIDEsIDIxMSwgMjcsIDMzLCA2LCAxLCAyMTksIDU0LCA1MCwgMzMsIDYsIDEsIDc2LCAzMywgNiwgMSwgCisgICAgMjEwLCAyMTIsIDMzLCA2LCAxLCAxOTIsIDMzLCA0LCAxLCA2MSwgMzMsIDQsIDEsIDI1MiwgODMsIDMzLCA0LCAxLCAyMTMsIAorICAgIDI1NSwgMzMsIDQsIDEsIDI0MiwgMjQzLCAzMywgNCwgMSwgMjQ4LCA5OCwgMzMsIDQsIDEsIDIzNiwgNjcsIDMzLCA0LCAxLCAKKyAgICAyMTAsIDc0LCAzMywgNCwgMSwgMjEwLCA5NCwgMzMsIDQsIDEsIDc0LCAzMywgNCwgMSwgMjE5LCAyNTMsIDc0LCAzMywgNCwgCisgICAgMSwgMTc2LCAzMywgNCwgMSwgMjQ1LCAxODIsIDMzLCA0LCAxLCAyNDUsIDE2NywgMzMsIDQsIDEsIDI0NSwgMTU4LCAzMywgCisgICAgNCwgMSwgNzgsIDMzLCA0LCAxLCAyMjUsIDIyNCwgMzMsIDQsIDEsIDI0NSwgMTAwLCAzMywgNCwgMSwgMjQ1LCA5MCwgMzMsIAorICAgIDQsIDEsIDIxNywgMjMsIDMzLCA0LCAxLCA2OSwgMzMsIDQsIDEsIDI0NSwgMjEwLCAzMywgNCwgMSwgMTYyLCAzMywgNCwgMSwgCisgICAgMjE1LCAxNzksIDMzLCA0LCAxLCAyNTAsIDEzOSwgMzMsIDQsIDEsIDIyMCwgMTA0LCAzMywgNCwgMSwgMjIwLCA2NywgMzMsIAorICAgIDQsIDEsIDI0MiwgMTAsIDUwLCAzMywgNCwgMSwgMjExLCAyNywgMzMsIDQsIDEsIDIxOSwgNTQsIDUwLCAzMywgNCwgMSwgCisgICAgNzYsIDMzLCA0LCAxLCAyMTAsIDIxMiwgMzMsIDQsIDEsIDE5MiwgMzMsIDQsIDEsIDIzNiwgNjgsIDIsIDI0MiwgMTQzLCAKKyAgICAzMywgNCwgMSwgMjM1LCAxOTYsIDMzLCA0LCAxLCAyNDcsIDE3MCwgMzMsIDQsIDEsIDI0MiwgMTk0LCAzMywgNCwgMSwgCisgICAgMjE0LCAyMDIsIDIzNiwgNjcsIDMzLCA0LCAxLCAyNDYsIDQ0LCAzMywgNCwgMSwgMjUxLCA4NCwgNzQsIDMzLCA0LCAxLCAKKyAgICAyMTEsIDgsIDMzLCA0LCAxLCAyMzUsIDEzMiwgMzMsIDQsIDEsIDIzMiwgMTkzLCAzMywgNCwgMSwgMjI4LCAxODMsIDMzLCAKKyAgICA0LCAxLCAyMTUsIDE3NSwgMzMsIDQsIDEsIDIzNCwgNTQsIDMzLCA0LCAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDMzLCAKKyAgICA0LCAxLCAyMTksIDI1MywgNjksIDMzLCA0LCAxLCAyNDYsIDQwLCAzMywgNiwgMSwgMjI2LCAyMDUsIDMzLCA0LCAxLCAyMjYsIAorICAgIDIwNSwgMzMsIDYsIDEsIDIxMSwgNTksIDMzLCA0LCAxLCAyMTEsIDU5LCAzMywgNiwgMSwgMjM1LCAxOTAsIDc2LCAzMywgNCwgCisgICAgMSwgMjM1LCAxOTAsIDc2LCAzMywgNiwgMSwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjMyLCAxOTgsIDIxMCwgCisgICAgMTgzLCAzMywgNiwgMSwgMjM1LCAxOTAsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTkwLCAyMzIsIAorICAgIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUyLCAxLCAyMTAsIDE4MywgCisgICAgMzMsIDYsIDEsIDIzNSwgMTkwLCAyNTIsIDEsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxOTAsIDI1MiwgMSwgMjEwLCAKKyAgICAxODMsIDMzLCA2LCAxLCAyMzMsIDIzOSwgMzMsIDQsIDEsIDIzMywgMjM5LCAzMywgNiwgMSwgMjI0LCAxNjQsIDMzLCA0LCAKKyAgICAxLCAyMjQsIDE2NCwgMzMsIDYsIDEsIDI0NCwgOTAsIDMzLCA0LCAxLCAyNDQsIDkwLCAzMywgNiwgMSwgMjM1LCAxNTIsIAorICAgIDMzLCA0LCAxLCAyMzUsIDE1MiwgMzMsIDYsIDEsIDIzNSwgMTUzLCAyLCA1MiwgMjQyLCAxNDQsIDI1NSwgMjMsIDMzLCA0LCAKKyAgICAxLCAyMzUsIDE1MywgMiwgNTIsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzMywgNiwgMSwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMTQsIAorICAgIDIwNSwgMzMsIDYsIDEsIDIyMiwgMTg3LCAyMjYsIDIwNSwgMzMsIDQsIDEsIDIyMiwgMTg3LCAyMjYsIDIwNSwgMzMsIDYsIAorICAgIDEsIDIyNiwgMjA2LCAyLCAyMTYsIDY2LCAzMywgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNiwgNjYsIDMzLCA2LCAxLCAyMjYsIAorICAgIDE0NCwgMzMsIDQsIDEsIDIyNiwgMTQ0LCAzMywgNiwgMSwgMjM0LCAxMiwgMzMsIDQsIDEsIDIzNCwgMTIsIDMzLCAyMTYsIAorICAgIDE0NywgNTAsIDM4LCAzMywgMjE2LCA2NiwgMzgsIDMzLCAyMjYsIDY5LCAzOCwgMzMsIDI0OCwgMTYyLCAyMjUsIDIxLCAzOCwgCisgICAgMzMsIDIyNCwgMTU4LCAyMjUsIDIxLCAzOCwgMzMsIDIyNSwgNiwgMzgsIDMzLCAyNDAsIDIxOCwgMjE2LCAxNDcsIDUwLCAKKyAgICAzOCwgMzMsIDIzMCwgMTk2LCA1MCwgMzMsIDYsIDEsIDIxOSwgMjUzLCAyNDAsIDE2MSwgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIAorICAgIDIxOSwgMjUzLCAyNDAsIDE2MSwgMiwgMjE3LCA3OCwgMzMsIDYsIDEsIDIyMCwgMTQ4LCA1MCwgMzMsIDQsIDEsIDIyMCwgCisgICAgMTQ4LCA1MCwgMzMsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIDExNSwgMzMsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIAorICAgIDExNSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCAyMTQsIDE1NiwgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCAyMTQsIDE1NiwgCisgICAgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCA5MSwgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCA5MSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAKKyAgICAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjQyLCAyNDQsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA2LCAxLCAyMTAsIAorICAgIDc1LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjEwLCA3NSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgCisgICAgNDcsIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgMjQ4LCA0NywgMzMsIDQsIAorICAgIDEsIDIzNSwgMTksIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCA2NywgOTEsIDMzLCA0LCAxLCAyMzUsIDE5LCAKKyAgICAyLCA2NywgOTEsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCA5MSwgMzMsIDQsIDEsIDIzNSwgMTksIDIsIDkxLCAzMywgNiwgMSwgCisgICAgMjUyLCAxMzIsIDE3NiwgMzMsIDQsIDEsIDI1MiwgMTMyLCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE1OSwgMiwgMjQ4LCA0NywgCisgICAgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAyNDgsIDQ3LCAzMywgNiwgMjcsIDI0NSwgMTU5LCAyNDIsIDI0MywgMzMsIDQsIDI3LCAKKyAgICAyNDUsIDE1OSwgMjQyLCAyNDMsIDMzLCA2LCAxLCAyMjUsIDIyNSwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDIyNSwgCisgICAgMjI1LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNiwgMSwgMjU1LCAyOSwgMTYyLCAzMywgNCwgMSwgMjU1LCAyOSwgMTYyLCAKKyAgICAzMywgNiwgMSwgMjQ1LCA5MSwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI0NSwgOTEsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAKKyAgICAyMTcsIDI0LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjE3LCAyNCwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxOCwgMTIzLCAKKyAgICA2OSwgMzMsIDQsIDEsIDIxOCwgMTIzLCA2OSwgMzMsIDYsIDEsIDIxOCwgMTIzLCAxMDQsIDIsIDkxLCAzMywgNCwgMSwgCisgICAgMjE4LCAxMjMsIDEwNCwgMiwgOTEsIDMzLCA2LCAxLCAyNDIsIDU2LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjQyLCA1NiwgCisgICAgMiwgMjQ4LCA0NywgMzMsIDYsIDI3LCAyMTcsIDI0LCAyMTUsIDE3OSwgMzMsIDQsIDI3LCAyMTcsIDI0LCAyMTUsIDE3OSwgCisgICAgMzMsIDYsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjUwLCAxNDAsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAKKyAgICAyNTAsIDE0MCwgMiwgNjcsIDkxLCAzMywgNCwgMSwgMjUwLCAxNDAsIDIsIDY3LCA5MSwgMzMsIDYsIDEsIDIyMCwgMzUsIAorICAgIDMzLCA0LCAxLCAyMjAsIDM1LCAzMywgNiwgMSwgMjU1LCAyOSwgMjUwLCAxMzksIDMzLCA0LCAxLCAyNTUsIDI5LCAyNTAsIAorICAgIDEzOSwgMzMsIDYsIDEsIDI1NSwgMjksIDI1MCwgMTQwLCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjU1LCAyOSwgMjUwLCAKKyAgICAxNDAsIDIsIDI0OCwgNDcsIDMzLCAxLCAyMjYsIDYyLCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNTQsIDMzLCA0LCAKKyAgICAxLCAyMTAsIDc1LCAyLCAyNTEsIDE1NCwgMzMsIDYsIDEsIDIzNSwgMTksIDIsIDEwMywgMzMsIDQsIDEsIDIzNSwgMTksIDIsIAorICAgIDEwMywgMzMsIDYsIDEsIDI0NSwgMTgzLCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjQ1LCAxODMsIDIsIDIxNywgNzgsIDMzLCAKKyAgICA2LCAxLCAyNDUsIDE1OSwgMiwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTU5LCAKKyAgICAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDIxNywgNzgsIDMzLCA2LCAxLCAyMzQsIDEzMywgMjUwLCAxMzksIAorICAgIDMzLCA0LCAxLCAyMzQsIDEzMywgMjUwLCAxMzksIDMzLCA2LCAxLCAyNDUsIDE2OCwgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIAorICAgIDI0NSwgMTY4LCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjI2LCA2MiwgMzMsIDYsIDEsIDExNiwgMiwgMjUxLCAxNTQsIDMzLCAKKyAgICA0LCAxLCAxMTYsIDIsIDI1MSwgMTU0LCAzMywgNiwgMSwgMTE2LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAxMTYsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDI3LCAxMTYsIDIzNiwgNjcsIDMzLCA0LCAyNywgMTE2LCAyMzYsIDY3LCAzMywgNiwgMSwgMjM2LCA2OCwgCisgICAgMiwgMjUxLCAxNTQsIDMzLCA0LCAxLCAyMzYsIDY4LCAyLCAyNTEsIDE1NCwgMzMsIDYsIDEsIDIyMSwgMTk3LCAzMywgNCwgCisgICAgMSwgMjIxLCAxOTcsIDMzLCA2LCAxLCAyMjEsIDE5OCwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjIxLCAxOTgsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDEsIDIxMCwgNzUsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIAorICAgIDIxMCwgOTUsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDI1NSwgMjksIDI0NiwgCisgICAgNDQsIDMzLCA0LCAxLCAyNTUsIDI5LCAyNDYsIDQ0LCAzMywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCAzMywgNCwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCAzMywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDI0MCwgCisgICAgMTYxLCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxNDQsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDE0NCwgMiwgMjQ4LCA5LCAzMywgCisgICAgNiwgMSwgMjUyLCAxNDIsIDc4LCAzMywgNCwgMSwgMjUyLCAxNDIsIDc4LCAzMywgNiwgMSwgMjUyLCAxNDIsIDE0NCwgMiwgCisgICAgMjQ4LCA5LCAzMywgNCwgMSwgMjUyLCAxNDIsIDE0NCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMTYwLCAyLCAyNDgsIDksIDMzLCAKKyAgICA0LCAxLCAxNjAsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzcsIDMzLCA0LCAxLCAxMDQsIDIsIDIzMSwgCisgICAgMjM3LCAzMywgNiwgMSwgMTA0LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAxMDQsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDEwNCwgCisgICAgMiwgNTIsIDE0MiwgMzMsIDQsIDEsIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDYsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDksIDMzLCAKKyAgICA0LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMjQyLCAyNDQsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNDIsIAorICAgIDI0NCwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMSwgMjgsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCAyMTgsIDEwNSwgMjIsIDEwMywgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCAyMTgsIAorICAgIDEwNSwgMjIsIDEwMywgMzMsIDYsIDEsIDI0MiwgNTYsIDIsIDEwMywgMzMsIDQsIDEsIDI0MiwgNTYsIDIsIDEwMywgMzMsIAorICAgIDYsIDEsIDI0MiwgNTYsIDIsIDkxLCAzMywgNCwgMSwgMjQyLCA1NiwgMiwgOTEsIDMzLCA2LCAxLCAyMzQsIDIwLCAyNDgsIAorICAgIDk4LCAzMywgNCwgMSwgMjM0LCAyMCwgMjQ4LCA5OCwgMzMsIDYsIDEsIDIzNCwgMjAsIDI0NywgMTcwLCAzMywgNCwgMSwgCisgICAgMjM0LCAyMCwgMjQ3LCAxNzAsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMTAsIDI3LCAzMywgNCwgMSwgMjM0LCAyMCwgMjEwLCAKKyAgICAyNywgMzMsIDYsIDEsIDIzNCwgMjAsIDI0NiwgMzgsIDMzLCA0LCAxLCAyMzQsIDIwLCAyNDYsIDM4LCAzMywgNiwgMSwgCisgICAgMjM0LCAyMCwgMjMyLCAxOTMsIDMzLCA0LCAxLCAyMzQsIDIwLCAyMzIsIDE5MywgMzMsIDYsIDEsIDIzNCwgMjAsIDIyOCwgCisgICAgMTgzLCAzMywgNCwgMSwgMjM0LCAyMCwgMjI4LCAxODMsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMTksIDExMSwgMzMsIDQsIDEsIAorICAgIDIzNCwgMjAsIDIxOSwgMTExLCAzMywgNiwgMSwgMjM0LCAyMCwgMjE2LCA2MSwgMzMsIDQsIDEsIDIzNCwgMjAsIDIxNiwgCisgICAgNjEsIDMzLCA2LCAxLCAyMjMsIDUyLCAyMTAsIDk0LCAzMywgNCwgMSwgMjIzLCA1MiwgMjEwLCA5NCwgMzMsIDYsIDEsIAorICAgIDI0NSwgMTgzLCAyLCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE4MywgMiwgMTAzLCAzMywgNiwgMSwgMjMzLCA0LCAzMywgNCwgMSwgCisgICAgMjMzLCA0LCAzMywgNiwgMSwgMjIzLCA0MiwgMzMsIDQsIDEsIDIyMywgNDIsIDMzLCA2LCAxLCAyMTEsIDkyLCAzMywgNCwgCisgICAgMSwgMjExLCA5MiwgMzMsIDYsIDEsIDIyNCwgOTEsIDMzLCA0LCAxLCAyMjQsIDkxLCAzMywgNiwgMSwgMjEyLCAyMiwgMzMsIAorICAgIDQsIDEsIDIxMiwgMjIsIDMzLCA2LCAxLCAyNTQsIDE3NSwgMTc2LCAzMywgNCwgMSwgMjU0LCAxNzUsIDE3NiwgMzMsIDYsIAorICAgIDEsIDI0NSwgMTgzLCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxODMsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCAKKyAgICA2LCAxLCAyNDUsIDE1OSwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAyMzAsIDIyOSwgMTAzLCAKKyAgICAzMywgNiwgMSwgMjI1LCAyMjUsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMjUsIDIyNSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIAorICAgIDIyMCwgMzYsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMjAsIDM2LCAyLCAyNDgsIDQ3LCAxNTAsIDYsIDEsIDI1MywgMTcyLCAKKyAgICAxNTAsIDYsIDEsIDI1MiwgNDcsIDE1MCwgNiwgMSwgMjQyLCAyMTAsIDE1MCwgNiwgMSwgMjQ4LCAyMjksIDE1MCwgNiwgMSwgCisgICAgMjQ1LCAyMjEsIDE1MCwgNiwgMSwgMjEwLCAxMTYsIDE1MCwgNiwgMSwgMjQ1LCAyMDUsIDE1MCwgNiwgMSwgMjQ1LCA3MywgCisgICAgMTUwLCA2LCAxLCAxMTIsIDE1MCwgNiwgMSwgMjEwLCA3NCwgMTUwLCA2LCAxLCAyMzUsIDIzNCwgMTUwLCA2LCAxLCAyMzIsIAorICAgIDE5NiwgMTUwLCA2LCAxLCAyMTEsIDE2MCwgMTUwLCA2LCAxLCAyNTEsIDQxLCAxNTAsIDYsIDEsIDIzNCwgMTcxLCAxNTAsIAorICAgIDYsIDEsIDI0MSwgNzUsIDE1MCwgNiwgMSwgMjM1LCAxNDcsIDE1MCwgNiwgMSwgMjQyLCAyNTMsIDE1MCwgNiwgMSwgMjUwLCAKKyAgICAxMzQsIDE1MCwgNiwgMSwgMjMxLCA2MywgMTUwLCA2LCAxLCAyMTEsIDgsIDE1MCwgNiwgMSwgMjI4LCA0NCwgMTUwLCA2LCAKKyAgICAxLCAyMjAsIDEwNCwgMTUwLCA2LCAxLCAyMTMsIDEzOCwgMTUwLCA2LCAxLCAyNTAsIDE2NSwgMTUwLCA2LCAxLCAyMjUsIAorICAgIDIwOCwgMTUwLCA2LCAxLCAyMzUsIDExNiwgMTUwLCA2LCAxLCAyMDUsIDE1MCwgNiwgMSwgMjIxLCAxNjMsIDE1MCwgNiwgMSwgCisgICAgMjEzLCAxNzksIDE1MCwgNiwgMSwgMjE2LCA2MywgMTUwLCA2LCAxLCAyMjMsIDk4LCAxNTAsIDYsIDEsIDI0OSwgMjQ2LCAKKyAgICAxNTAsIDYsIDEsIDIxMCwgMjQ5LCAxNTAsIDYsIDEsIDIyNSwgNDksIDE1MCwgNiwgMSwgMjM0LCAxODIsIDE1MCwgNiwgMSwgCisgICAgMjI2LCAyMjYsIDE1MCwgNiwgMSwgMjQ0LCAxNTAsIDE1MCwgNTgsIDEsIDQzLCAxNjMsIDIyMiwgMjM2LCAxNTAsIDI1NCwgCisgICAgNjUsIDE1MCwgMjQ1LCAxNjIsIDc5LCAxNTAsIDI0NSwgMzksIDc5LCAxNTAsIDI0OSwgMjI3LCAxNTAsIDIyNCwgMTYsIDc5LCAKKyAgICAxNTAsIDI1NSwgMzAsIDc5LCAxNTAsIDQsIDEsIDI1MywgMTcyLCAxNTAsIDQsIDEsIDI1MiwgNDcsIDE1MCwgNCwgMSwgCisgICAgMjQyLCAyMTAsIDE1MCwgNCwgMSwgMjQ4LCAyMjksIDE1MCwgNCwgMSwgMjQ1LCAyMjEsIDE1MCwgNCwgMSwgMjEwLCAxMTYsIAorICAgIDE1MCwgNCwgMSwgMjQ1LCAyMDUsIDE1MCwgNCwgMSwgMjQ1LCA3MywgMTUwLCA0LCAxLCAxMTIsIDE1MCwgNCwgMSwgMjEwLCAKKyAgICA3NCwgMTUwLCA0LCAxLCAyMzUsIDIzNCwgMTUwLCA0LCAxLCAyMzIsIDE5NiwgMTUwLCA0LCAxLCAyMTEsIDE2MCwgMTUwLCAKKyAgICA0LCAxLCAyNTEsIDQxLCAxNTAsIDQsIDEsIDIzNCwgMTcxLCAxNTAsIDQsIDEsIDI0MSwgNzUsIDE1MCwgNCwgMSwgMjM1LCAKKyAgICAxNDcsIDE1MCwgNCwgMSwgMjQyLCAyNTMsIDE1MCwgNCwgMSwgMjUwLCAxMzQsIDE1MCwgNCwgMSwgMjMxLCA2MywgMTUwLCAKKyAgICA0LCAxLCAyMTEsIDgsIDE1MCwgNCwgMSwgMjI4LCA0NCwgMTUwLCA0LCAxLCAyMjAsIDEwNCwgMTUwLCA0LCAxLCAyMTMsIAorICAgIDEzOCwgMTUwLCA0LCAxLCAyNTAsIDE2NSwgMTUwLCA0LCAxLCAyMjUsIDIwOCwgMTUwLCA0LCAxLCAyMzUsIDExNiwgMTUwLCAKKyAgICA0LCAxLCAyMDUsIDE1MCwgNCwgMSwgMjIxLCAxNjMsIDE1MCwgNCwgMSwgMjEzLCAxNzksIDE1MCwgNCwgMSwgMjE2LCA2MywgCisgICAgMTUwLCA0LCAxLCAyMjMsIDk4LCAxNTAsIDQsIDEsIDI0OSwgMjQ2LCAxNTAsIDQsIDEsIDIxMCwgMjQ5LCAxNTAsIDQsIDEsIAorICAgIDIyNSwgNDksIDE1MCwgNCwgMSwgMjM0LCAxODIsIDE1MCwgNCwgMSwgMjI2LCAyMjYsIDE1MCwgNCwgMSwgMjQ0LCAxNTAsIAorICAgIDE1MCwgNCwgMjcsIDI0NSwgMjIyLCAyMTAsIDI0OSwgMTUwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDE1MCwgMjQwLCAxNzUsIAorICAgIDE1MCwgMjQ2LCAxMDMsIDUwLCA5NCwgMjU1LCAyNCwgMjQ1LCA2NSwgOTQsIDI1NSwgMjQsIDIyMSwgMTY0LCA5NCwgMjU1LCAKKyAgICAyNCwgMjIwLCA5MCwgOTQsIDI1NSwgMjQsIDIxMCwgMTA0LCAyMjQsIDc0LCA5NCwgMjU1LCAyNCwgMjEwLCAxMDQsIDI0MywgCisgICAgMTMyLCA5NCwgMjU1LCAyNCwgMjE2LCA3NiwgOTQsIDI1NSwgMjQsIDIyMywgNTAsIDk0LCAyNTUsIDI0LCAyMTAsIDEwMywgCisgICAgOTQsIDI1NSwgMjQsIDIyNSwgMjQ5LCA5NCwgMjU1LCAyNCwgMjExLCAyMCwgOTQsIDI1NSwgMjQsIDIxNiwgMjE1LCA5NCwgCisgICAgMjU1LCAyNCwgMjQzLCA0OCwgOTQsIDI1NSwgMjQsIDI0MywgNDksIDIzMCwgNzQsIDk0LCAyNTUsIDI0LCAyNDMsIDQ2LCAKKyAgICA5NCwgMjU1LCAyNCwgMjI0LCA3NSwgMjI2LCAyMCwgOTQsIDI1NSwgMjQsIDIxNiwgMjU0LCAyNDMsIDYzLCA5NCwgMjU1LCAKKyAgICAyNCwgMjI1LCAyMzAsIDk0LCAyNTUsIDI0LCAyNTMsIDIwOCwgMjQyLCA0OCwgOTQsIDI1NSwgMjQsIDIzMCwgODQsIDk0LCAKKyAgICAyNTUsIDI0LCAyMzEsIDIxMywgOTQsIDI1NSwgMjQsIDIzMSwgNTQsIDk0LCAyNTUsIDI0LCAyMzEsIDU1LCAyMzQsIDE4MywgCisgICAgOTQsIDI1NSwgMjQsIDI0OCwgMTcxLCA5NCwgMjU1LCAyNCwgMjI0LCA4NiwgOTQsIDI1NSwgMjQsIDIxNiwgMjU0LCAyMjQsIAorICAgIDcwLCA5NCwgMjU1LCAyNCwgMjExLCAzMCwgMjUyLCA0OCwgMjEwLCAyMzAsIDk0LCAyNTUsIDI0LCAyMjYsIDIxMSwgOTQsIAorICAgIDI1NSwgMjQsIDIzNiwgMjYsIDk0LCAyNTUsIDI0LCAyNDgsIDc4LCA5NCwgMjU1LCAyNCwgMjEwLCAzMywgOTQsIDE2NCwgCisgICAgMjMxLCAxNDgsIDI1MCwgNDMsIDk0LCAyMjUsIDE0LCAyMjAsIDM4LCA5NCwgMjI1LCAxNCwgMjQyLCAxLCAyMjEsIDE2NCwgCisgICAgOTQsIDIyNSwgMTQsIDI0MiwgMSwgMjI1LCAyNDMsIDk0LCAyMjUsIDE0LCAyNDIsIDEsIDIyNCwgNzksIDk0LCAyMjUsIDE0LCAKKyAgICAyNDEsIDE2NSwgOTQsIDIyNSwgMTQsIDIxNSwgMTc3LCA5NCwgMjI1LCAxNCwgMjIxLCAxNjQsIDk0LCAyMjUsIDE0LCAyMjUsIAorICAgIDI0MywgOTQsIDIyNSwgMTQsIDIyNCwgNzksIDk0LCAyMjUsIDE0LCAyNDEsIDY4LCA5NCwgMjI1LCAxNCwgMjQxLCA2OSwgCisgICAgMjQyLCAzLCAzMSwgMjE0LCAzLCA5NCwgMjI1LCAxNCwgMjI0LCAyMCwgOTQsIDIyNSwgMTQsIDI0OCwgMjE2LCAxNzcsIAorICAgIDIzMSwgMTc2LCA5NCwgMjI1LCAxNCwgMjMxLCA0MywgOTQsIDIyNCwgMTQ0LCAyMzEsIDE3MywgOTQsIDIyNSwgMTQsIDIyMywgCisgICAgMTcyLCA5NCwgMjI0LCAxNDQsIDIyNSwgMjUxLCA5NCwgMjI1LCAxNCwgMjIwLCAyMywgMjQ3LCAxMjgsIDk0LCAyMjUsIDE0LCAKKyAgICAyMTksIDE2MSwgMjQ3LCAxMjgsIDk0LCAyMjQsIDE0NCwgMjE5LCA1NSwgMjI1LCAyNDUsIDk0LCAxNjQsIDIxNCwgMTYwLCAKKyAgICAyNDcsIDEyOCwgOTQsIDE2NCwgMjMyLCAxMTQsIDI0NywgMTI4LCA5NCwgMjI0LCAxNDQsIDIyNywgMTk5LCAyNDIsIDQ3LCAKKyAgICA5NCwgMjI1LCAxNCwgMjI0LCA4MCwgMjI0LCA3NCwgOTQsIDEsIDI1NCwgMTc5LCA5NCwgMSwgMjUyLCAzNiwgOTQsIDEsIAorICAgIDI0MiwgMjA4LCA5NCwgMSwgMjQ4LCAxOTcsIDk0LCAxLCAyNDEsIDI0NSwgOTQsIDEsIDIxNCwgMywgOTQsIDEsIDIxMCwgCisgICAgOTcsIDk0LCAxLCAyNDEsIDIwNCwgOTQsIDEsIDIxNiwgMjMxLCA5NCwgMSwgMjEwLCAyMzMsIDk0LCAxLCA0MCwgMjM1LCAwLCAKKyAgICA5NCwgMSwgMjM1LCAwLCA5NCwgMSwgMjMzLCAxMDAsIDk0LCAxLCA0MCwgMjMxLCA3MCwgOTQsIDEsIDIzMSwgNzAsIDk0LCAKKyAgICAxLCA0MCwgMjI3LCAxOTgsIDk0LCAxLCAyMjcsIDE5OCwgOTQsIDEsIDIyMSwgMjUxLCA5NCwgMSwgMjUzLCAxNzAsIDk0LCAKKyAgICAxLCA0MCwgMjI1LCAyMjQsIDk0LCAxLCAyMjUsIDIyNCwgOTQsIDEsIDQwLCAyMTUsIDE4MCwgOTQsIDEsIDIxNSwgMTgwLCAKKyAgICA5NCwgMSwgMjI0LCA0MiwgOTQsIDEsIDIyMywgNzAsIDk0LCAxLCAyMjAsIDIyLCA5NCwgMSwgMjE3LCAzOSwgOTQsIDI3LCAKKyAgICAyMTEsIDYsIDUyLCAyMTQsIDMsIDk0LCAyNywgMjExLCA2LCAyMTQsIDQsIDIxMCwgMjMzLCA5NCwgMjcsIDIxMSwgNiwgNTIsIAorICAgIDIxMCwgMjMzLCA5NCwgMjI0LCAxNDQsIDI0MywgNDgsIDk0LCAyMjQsIDE0NCwgMjQzLCA0NiwgOSwgNTQsIDUwLCA5LCA1LCAKKyAgICAyMjEsIDI0NCwgOSwgMjQ0LCAzOCwgMjMxLCAxNTksIDksIDUsIDIyMiwgMjUsIDksIDUsIDIyMSwgMjQ3LCAyNTQsIDQ1LCAKKyAgICAyNDksIDExNywgMjIyLCAxOTUsIDI1NCwgNDUsIDI0NCwgMTIsIDIyMiwgMTk1LCA5LCAyMjMsIDEzNywgMjU0LCA0NSwgCisgICAgMjI1LCAxODYsIDIzMCwgMTk4LCA1MCwgMjU0LCA0NSwgMjI1LCAxODYsIDIxNiwgMjQ5LCAyMTYsIDE0OSwgNTAsIDI1NCwgCisgICAgMjMwLCA1MCwgOSwgMjQ5LCAyMjcsIDksIDI0OCwgMTU4LCAyMjAsIDEzOSwgOSwgMjI1LCAxNiwgMjEzLCAyNDEsIDUwLCA5LCAKKyAgICA1LCAyMzAsIDE3OSwgOSwgNSwgMjIyLCA1LCAyNTQsIDE4MSwgMjEyLCA0NSwgOSwgNSwgMjU0LCAxODEsIDI1MywgMjI5LCAKKyAgICA5LCA1LCAyMjMsIDE3MCwgMjU0LCAxODAsIDksIDUsIDIyMywgMTc4LCAyNTQsIDE2MSwgMjU0LCAxMTIsIDksIDUsIDIxNywgCisgICAgNzEsIDksIDQsIDEyNSwgMjE3LCA4MSwgOSwgNCwgMTI1LCAyNywgMTA5LCAyLCAyMzMsIDEwOSwgMiwgMjExLCA0MywgOSwgCisgICAgNCwgMTI1LCAyMTAsIDEwOCwgOSwgNCwgMjQ0LCAxNzMsIDksIDQsIDI0OCwgMTkyLCA5LCA0LCAyMzQsIDIxMSwgOSwgMjIwLCAKKyAgICAxNTIsIDksIDEsIDc5LCA5LCAyMTUsIDIxMiwgNTksIDIyNCwgMTQ0LCA3OSwgOSwgMjI0LCAxNiwgNzksIDksIDEsIDIzNCwgCisgICAgMjE1LCAyMTEsIDQzLCA5LCAxLCAyNDIsIDI2LCA5LCAxLCAxMDksIDIsIDIzMSwgMjMzLCA0OCwgOSwgMSwgMTA5LCAyLCAKKyAgICAxODIsIDQ4LCA5LCAxLCAyMTIsIDMxLCAyLCAxODIsIDQ4LCA5LCAxLCAxMDksIDIsIDE4MiwgNTEsIDksIDEsIDc3LCAyLCAKKyAgICAxODIsIDQ4LCA5LCAxLCAyNTQsIDE3OSwgOSwgMSwgMjUyLCA2MiwgOSwgMSwgMjE3LCA5LCAyMzEsIDE2OSwgOSwgMSwgCisgICAgMjE3LCA4LCA5LCAxLCAyMTYsIDE5MywgOSwgMSwgMjM1LCAxMjksIDksIDEsIDI0MiwgNDQsIDksIDEsIDIzNCwgMTM1LCA5LCAKKyAgICAxLCAyNDgsIDIwMywgOSwgMSwgMjE2LCAyMDMsIDksIDEsIDIyMywgOTgsIDksIDEsIDIxMCwgMTA4LCA5LCAxLCAyMjEsIAorICAgIDE2OCwgOSwgMSwgMjIwLCA2MSwgOSwgMSwgMjIyLCAyOCwgOSwgMSwgMjQ4LCAyMjQsIDksIDEsIDIxNywgODEsIDksIDEsIAorICAgIDIxMCwgMTExLCA5LCAxLCAyNTQsIDIwNSwgOSwgMSwgMjQyLCAyNTEsIDksIDEsIDIzNCwgMTgxLCAyLCAxMTMsIDE3MCwgCisgICAgNDgsIDksIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMjM1LCAyMDAsIAorICAgIDIxNCwgMTA1LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAKKyAgICAxMzQsIDE3MCwgNDgsIDksIDIxNywgNDQsIDksIDEsIDI0NCwgMTUwLCA5LCAxLCAyMjQsIDg0LCA5LCAxLCAyMzUsIDAsIDksIAorICAgIDEsIDIzMywgMTA4LCA5LCAxLCAyMzEsIDgzLCA5LCAxLCAyMjgsIDY3LCA5LCAxLCAyNDEsIDIyNSwgOSwgMSwgMjEyLCAzMCwgCisgICAgOSwgMSwgMTA5LCAyMzEsIDE5NywgOSwgMSwgMjExLCA0MywgOSwgMjQ0LCAxNzEsIDksIDI0OCwgMTkwLCA5LCAyMzQsIAorICAgIDIwOSwgOSwgMjQ0LCAxNzMsIDksIDI0OCwgMTkyLCA5LCAyMzQsIDIxMSwgOSwgMjIwLCA5NSwgOSwgMjE4LCA0NiwgOSwgCisgICAgMjMxLCAyMzEsIDQ4LCA5LCAxODIsIDQ4LCA5LCAxODIsIDUxLCA5LCAyMTgsIDY2LCAyNTQsIDE3OSwgOSwgMjM1LCAyMDAsIAorICAgIDI0OCwgMTkyLCA5LCAxNjQsIDIyOCwgNjgsIDI0MiwgMjI1LCA5LCAyMDksIDI1NSwgOSwgMjUsIDUsIDQsIDIxNCwgMTA2LCAKKyAgICA0OCwgOSwgMjUsIDUsIDIzNSwgMjAwLCA0LCAyMTQsIDEwNiwgNDgsIDksIDI1LCA1LCA1OSwgNTEsIDksIDIyMywgNTIsIAorICAgIDI0OCwgMTkyLCA5LCAyNDQsIDE3NCwgMiwgMTEzLCAyNDcsIDEyNiwgOSwgMjEyLCAzMiwgMTgyLCA1MSwgMjU0LCA0NSwgCisgICAgMjEsIDIxMCwgODYsIDI1NCwgNDUsIDIxLCAxMTEsIDI1NCwgNDUsIDIxLCAxMDUsIDI1NCwgNDUsIDIxLCAxNTgsIDI1NCwgCisgICAgNDUsIDIxLCAxNjEsIDI1NCwgNDUsIDIxLCAxOTAsIDI1NCwgNDUsIDIxLCAxOTUsIDI1NCwgNDUsIDIxLCAxOTksIDI1NCwgCisgICAgNDUsIDIxLCAxOTYsIDI1NCwgNDUsIDIxLCAyMDEsIDksIDIyNSwgMTg1LCA1MCwgOSwgMjQ4LCA5MSwgMjIwLCAxMzksIDksIAorICAgIDIxNiwgMTQ3LCAyMjAsIDEzOSwgOSwgMjQ0LCA4OSwgMjI1LCAxMiwgMjE4LCAxNTgsIDksIDEsIDI0NywgMTI3LCAyNTIsIAorICAgIDYyLCA5LCAxLCAyNDcsIDEyNywgMjI0LCA4NCwgOSwgMSwgMjE4LCAyNCwgMjU0LCAxNzksIDksIDEsIDEwOSwgMjEyLCA0NiwgCisgICAgOSwgMSwgMTA5LCAyLCAyMTIsIDMyLCAxODIsIDQ4LCA5LCAxLCAxMDksIDIsIDIxMiwgMzIsIDE4MiwgNTEsIDksIDEsIAorICAgIDEyNSwgMjQyLCAyNiwgOSwgMSwgMTI1LCAxODIsIDI1NCwgMTc5LCA5LCAxLCAxMjUsIDE4MiwgMjEyLCAzMCwgOSwgMSwgCisgICAgMTA0LCAyLCAxODIsIDQ4LCA5LCAxLCAxMjUsIDE4MiwgMjExLCA0MywgOSwgMSwgMjE1LCAxNDksIDksIDEsIDIxNSwgMTQ3LCAKKyAgICA5LCAxLCAyNTIsIDcyLCA5LCAxLCAyMTcsIDksIDIsIDIyMiwgMjM2LCA5LCAxLCAyMTcsIDksIDIsIDEzNCwgMTcwLCA3MiwgCisgICAgMjQ2LCAxMTEsIDksIDEsIDIyNSwgMjA4LCA5LCAxLCAyMTcsIDYsIDksIDEsIDI1MiwgNjAsIDksIDEsIDEyMiwgMiwgMTgyLCAKKyAgICA0OCwgOSwgMSwgMTIyLCAyLCAxMTMsIDE3MCwgNjcsIDQ4LCA5LCAxLCAyMjcsIDE1NywgOSwgMSwgMjQ2LCA1MSwgOSwgMSwgCisgICAgMTIyLCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIxNywgMjcsIDksIDEsIDIxNywgMjUsIDksIDEsIDI0OCwgMTM4LCA5LCAxLCAKKyAgICAyNDgsIDIwNCwgMiwgMjIyLCAyMzYsIDksIDEsIDI0OCwgMjA0LCAyLCA1OSwgNTEsIDksIDEsIDI0OCwgMjA0LCAyLCA1OSwgCisgICAgMjUyLCA1MSwgMjIsIDQsIDIxNywgODEsIDksIDEsIDI0OCwgMjA5LCA5LCAxLCAyNDgsIDE0MCwgOSwgMSwgMjQ2LCA3OCwgCisgICAgOSwgMSwgMjQ4LCAyMDQsIDIsIDEzNCwgMTcwLCA3MiwgMjQ2LCAxMTEsIDksIDEsIDI0OCwgMjA0LCAyLCAyNDQsIDE5LCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAyMjIsIDE3MywgOSwgMSwgMjIzLCA5OSwgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIyMywgOTksIDIsIAorICAgIDIyMiwgMjM2LCA5LCAxLCAyMjMsIDk5LCAyLCA1OSwgNTEsIDksIDEsIDIyMywgOTksIDIsIDQsIDIxNCwgMTA2LCA1MSwgOSwgCisgICAgMSwgMjIzLCA5OSwgMiwgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDIyMywgOTksIDIsIDExMywgMTcwLCA0OCwgCisgICAgOSwgMSwgMjM1LCAxMjYsIDksIDEsIDIyMywgOTksIDIsIDI0NCwgMTksIDE3MCwgNDgsIDksIDEsIDIyMSwgMTY5LCAyLCAKKyAgICA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgOSwgMSwgMjIxLCAxNjksIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjIxLCAxNjksIAorICAgIDIsIDEzNCwgMTcwLCAyNTIsIDUxLCAyMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMjIsIDI5LCAyLCAxMTMsIDE3MCwgNTEsIAorICAgIDksIDEsIDIyMiwgMjksIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjE3LCA4MiwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNDcsIDEyNywgMjQ0LCAxNTAsIDksIDEsIDI0NCwgMTUxLCAyLCAKKyAgICA1OSwgMjMwLCAxMTQsIDUxLCA5LCAxLCAyNDQsIDE1MSwgMiwgNTksIDUxLCA5LCAxLCAyMTMsIDI0OCwgOSwgMSwgMjQ0LCAKKyAgICAxNTEsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjI1LCAyMDYsIDksIDEsIDIyNCwgODUsIDIsIDU5LCA0OCwgOSwgMSwgCisgICAgMjI0LCA4NSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMzQsIDE4MCwgOSwgMSwgMjE3LCAyNTEsIDIzNSwgMCwgOSwgMSwgCisgICAgMjM1LCAxLCAyLCAyMjIsIDIzNiwgOSwgMSwgMjM1LCAxLCAyLCA1OSwgNDgsIDksIDEsIDIyOSwgODQsIDksIDEsIDIzNSwgCisgICAgMSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCAyNDMsIDEyOSwgOSwgMSwgMjQzLCAxMzAsIDIsIDIyMiwgMjM2LCA5LCAxLCAKKyAgICAyMjksIDcsIDksIDEsIDI0MywgMTMwLCAyLCAxMTMsIDE3MCwgNTEsIDksIDEsIDI0MiwgMTA4LCA5LCAxLCAyNDMsIDEzMCwgCisgICAgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMzMsIDEwOSwgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIzMywgMTA5LCAyLCA1OSwgCisgICAgNDgsIDksIDEsIDIzMywgMTA5LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIzMywgMTA5LCAyLCAxMzQsIDE3MCwgNTEsIDksIAorICAgIDEsIDIyOCwgNjgsIDIsIDU5LCA1MSwgOSwgMSwgMjI4LCA2OCwgMjQyLCAyMjUsIDksIDEsIDIyMiwgMjE2LCA5LCAxLCAKKyAgICAyMjgsIDY4LCAyLCAyMjIsIDIzNiwgOSwgMSwgMjI4LCA2OCwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNDEsIDIyNiwgCisgICAgMjQ3LCAxNDksIDksIDEsIDIxNywgMjgsIDIsIDU5LCA0OCwgOSwgMSwgMjQxLCAyMjYsIDIsIDc3LCA0OCwgOSwgMSwgMjQxLCAKKyAgICAyMjYsIDI0MiwgMTc4LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDIsIDE4MiwgNDgsIDksIDEsIDIxNywgOSwgMjMxLCAKKyAgICAxNzAsIDI0MiwgMTc4LCA5LCAxLCAyMTIsIDMxLCAyLCAyMjIsIDIzNiwgOSwgMSwgMjM0LCA3OSwgMjI2LCAyMzgsIDksIDEsIAorICAgIDIyNiwgMjM4LCA5LCAxLCA2OSwgOSwgMSwgMjEwLCAyMTIsIDksIDEsIDIzNCwgNzksIDIxMCwgMjEyLCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDIxMywgMjU1LCA5LCAxLCAyNDQsIDE3NiwgMjExLCA0MywgOSwgMSwgNzcsIAorICAgIDIsIDIxNywgNzgsIDksIDEsIDc3LCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMjEyLCAzMSwgMiwgNTksIDQ4LCA5LCAxLCA3NiwgCisgICAgOSwgMSwgNzcsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgNzcsIDI1MiwgMTQwLCA5LCAxLCA3NywgMjUyLCAxNDEsIDIsIAorICAgIDE4MiwgNDgsIDksIDI0MywgMjM2LCAyMTgsIDEzMSwgOSwgMSwgMjU0LCAyNTIsIDksIDQsIDEyNSwgMjcsIDIyMiwgMjksIAorICAgIDIsIDIzMywgMTA5LCAyLCAxMDksIDIzMSwgMTk3LCA5LCA0LCAxMjUsIDI3LCAyMjQsIDg1LCAyLCAyMzMsIDEwOSwgMiwgCisgICAgMTA5LCAyMzEsIDE5NywgOSwgNCwgMTI1LCA2NiwgNjUsIDE3LCA5LCA0LCAxMjUsIDIzMywgMTA5LCAyNTQsIDE3OSwgOSwgCisgICAgNCwgMTI1LCAyMzUsIDEyOSwgOSwgNCwgMTI1LCAxMzQsIDI0NywgMTI2LCA5LCA0LCAxMjUsIDIyMSwgMTY4LCA5LCAyNDUsIAorICAgIDE1MSwgNjQsIDI1MywgMTc0LCA5LCAyMTgsIDE1NCwgNjQsIDIyMiwgMTQwLCAyNDUsIDE4MywgMjQxLCAxNjIsIDksIDQsIAorICAgIDEyNSwgMjIyLCAxODUsIDIxMCwgODYsIDksIDQsIDEyNSwgMjE0LCAxNTksIDIyMywgMTE4LCAyMTAsIDg2LCA5LCA0LCAKKyAgICAxMjUsIDI0NywgMTI3LCAyNDEsIDI0MywgNjQsIDIzNCwgMTM1LCA5LCA0LCAxMjUsIDY2LCA1MywgMTcsIDksIDQsIDEyMSwgCisgICAgMjIxLCAxNjgsIDksIDQsIDEyNSwgMjMxLCAyMzIsIDksIDQsIDIxMiwgMzAsIDksIDQsIDIxMSwgNDMsIDksIDQsIDEyNSwgCisgICAgMjExLCA0MywgOSwgNCwgMTI1LCAyMjgsIDY3LCA5LCAyMjUsIDQ0LCA2NCwgMjIyLCAxNSwgOSwgMjQ1LCAxNjAsIDI1MCwgCisgICAgMTgzLCAxMjEsIDIxOCwgMTMxLCA5LCAyNDUsIDE2MCwgMjUwLCAxODMsIDEyNSwgMjE4LCAxMzEsIDksIDIyMiwgMTg1LCAKKyAgICAxMjUsIDIxOCwgMTMyLCAyLCAyNDQsIDExMiwgMjUwLCAxODIsIDksIDQsIDEyMSwgMjMxLCA4MywgOSwgMSwgMjQ4LCAyMDQsIAorICAgIDIsIDIzNSwgMjAwLCAyMTQsIDEwNSwgOSwgMSwgMjIzLCA5OSwgMiwgMjM1LCAyMDAsIDIxNCwgMTA1LCAyNDUsIDMwLCAKKyAgICAyNTQsIDQ1LCAyMSwgMjEwLCA4NiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDExMSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIAorICAgIDEwNSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE1OCwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE2MSwgMjQ1LCAzMCwgMjU0LCAKKyAgICA0NSwgMjEsIDE5MCwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE5NSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE5OSwgMjQ1LCAKKyAgICAzMCwgMjU0LCA0NSwgMjEsIDE5NiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDIwMSwgOSwgMSwgMjIwLCA2MiwgMiwgNTksIAorICAgIDUxLCA5LCAxLCAyNDgsIDIyNSwgMiwgNTksIDUxLCA5LCAxLCAyNDIsIDI1MiwgMiwgNTksIDUxLCA5LCA1LCAyMTksIDE2MCwgCisgICAgMjU0LCAxMzQsIDksIDUsIDIxOSwgMTYwLCAyMjQsIDIzOCwgMjMxLCA2MywgOSwgMSwgMjQxLCAyMjYsIDIsIDIzNSwgMjAwLCAKKyAgICAyMTQsIDEwNSwgMTgzLCAyNDUsIDE1MSwgNjQsIDIyNiwgMTgsIDE4MywgMjE4LCAyMCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAKKyAgICAxODMsIDIxOCwgNjgsIDI0MywgMjM2LCAyMTgsIDEzMSwgMTgzLCAyMTgsIDIwLCAyNDksIDIzNCwgMTgzLCAyMTgsIDY4LCAKKyAgICAyNDksIDIzNCwgMTgzLCAyMDMsIDI0OSwgMjM0LCAxODMsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTgzLCAyNDksIAorICAgIDIzNSwgMjE5LCAxMDgsIDIyMiwgMjU0LCAxODMsIDIxOCwgMjAsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTgzLCAKKyAgICAyMTgsIDY4LCAyNDksIDIzNSwgMjE5LCAxMDgsIDIyMiwgMjU0LCAxODMsIDI0OSwgMTg4LCAxODMsIDI0MiwgOCwgMjI2LCAKKyAgICAyNTQsIDE4MywgMjQyLCA4LCAyMzEsIDQxLCAxODMsIDI0MiwgOCwgMjUzLCAyMjYsIDE4MywgMjU1LCAzMCwgNzksIDE4MywgCisgICAgMSwgMjU0LCAxODMsIDE4MywgMSwgMjE4LCAyNCwgMjU0LCAxODMsIDE4MywgMSwgMjUyLCAzMywgMTgzLCAxLCAyNDMsIAorICAgIDEyMCwgMTgzLCAxLCAyNDMsIDEyMSwgMjQzLCA5OCwgMTgzLCAxLCAyNDgsIDIwMCwgMTgzLCAxLCAyNDcsIDEyNywgMjQ4LCAKKyAgICAyMDEsIDIyMiwgMjMyLCAxODMsIDEsIDI0MSwgMjQ1LCAxODMsIDEsIDIxMiwgMzAsIDE4MywgMSwgMjEwLCAxMDgsIDE4MywgCisgICAgMSwgMjQxLCAyMDIsIDE4MywgMSwgMjE2LCAyMjcsIDE4MywgMSwgMjE2LCAyMjgsIDI0MywgOTgsIDE4MywgMSwgMjEwLCAKKyAgICAxOTksIDE4MywgMSwgMjEwLCAyMDAsIDI0MSwgMjQ1LCAxODMsIDEsIDIzNCwgMjMxLCAxODMsIDEsIDIzMywgMTA3LCAxODMsIAorICAgIDEsIDIzMCwgMTk1LCAxODMsIDEsIDIyNywgMTk4LCAxODMsIDEsIDIyMCwgMTQ1LCAxODMsIDEsIDQwLCAyMjAsIDE0NSwgCisgICAgMTgzLCAxLCA3NiwgMTgzLCAxLCAyMjUsIDIyNCwgMTgzLCAxLCAyMjMsIDUyLCAyMjUsIDIyNCwgMTgzLCAxLCAyMjIsIDI2LCAKKyAgICAxODMsIDEsIDIyNCwgNzgsIDE4MywgMSwgMjIyLCAyMzIsIDE4MywgMSwgMjIwLCAyMiwgMTgzLCAxLCAyMTcsIDM3LCAxODMsIAorICAgIDEsIDIyNSwgMTcyLCAyNTIsIDIwLCAxODMsIDEsIDIyNSwgMTcyLCAyNDIsIDI0OSwgMTgzLCAxLCAyMjUsIDE3MiwgMjQ4LCAKKyAgICAyOCwgMTgzLCAyMjQsIDE1NCwgNDgsIDE4MywgMjI0LCAxNTQsIDUxLCAxODMsIDIyNCwgMTU0LCAyNDYsIDEyNSwgMTgzLCAKKyAgICAyMTAsIDE3LCA0OCwgMTgzLCAyMTAsIDE3LCA1MSwgMTgzLCAyMTAsIDE3LCAyNDYsIDEyNSwgMTgzLCAyMjMsIDEzNCwgNDgsIAorICAgIDE4MywgMjIzLCAxMzQsIDUxLCAxODMsIDI0NiwgMTI2LCAyMTAsIDI0LCAyNDEsIDUxLCAxODMsIDI0NiwgMTI2LCAyMTAsIAorICAgIDI0LCAyNTQsIDExMywgMTgzLCAyNDEsIDI0OCwgNDgsIDE4MywgMjQxLCAyNDgsIDUxLCAxODMsIDI0MSwgMjQ3LCAyNDYsIAorICAgIDEyNSwgMTgzLCAyNDUsIDg3LCA0OCwgMTgzLCAyNDUsIDg3LCA1MSwgMTgzLCAyMjIsIDEwOSwgMTgzLCAyNDQsIDE0NCwgCisgICAgMjQ3LCAxMjgsIDE4MywgMjIzLCAyNTEsIDE4MywgMjIyLCAxMzYsIDE4MywgMTEzLCA2NywgMTcwLCA0OCwgMTgzLCAxMTMsIAorICAgIDY3LCAxNzAsIDUxLCAxODMsIDEzNCwgMTcwLCA0OCwgMTgzLCAxMzQsIDE3MCwgNTEsIDE4MywgMjI2LCAyNTIsIDIzMiwgCisgICAgMjIwLCA0OCwgMTgzLCAyMjYsIDI1MiwgMjMyLCAyMjAsIDUxLCAxODMsIDIzMCwgNjEsIDE4MywgMjUyLCAxMzksIDE4MywgCisgICAgMSwgMjE5LCA1MSwgMjEwLCA4MCwgMTgzLCAxLCAyMTksIDUxLCAyMzQsIDEyOCwgMTgzLCAxLCAyMTksIDUxLCAyNDQsIAorICAgIDE2MiwgOSwgMSwgMjUyLCA2MywgMiwgMTM0LCAxNzAsIDI0MSwgMSwgNTEsIDksIDEsIDI1MiwgNjMsIDIsIDU5LCAyNTIsIAorICAgIDUxLCAyMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNTIsIDYzLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDUxLCAKKyAgICA5LCAxLCAyNTIsIDYzLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDI1MiwgNTEsIDIyLCAxMTMsIDE3MCwgNDgsIAorICAgIDksIDEsIDI1MiwgNjMsIDIsIDExMywgMTcwLCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyNTIsIDYzLCAyLCAyMzUsIAorICAgIDIwMCwgNCwgMjE0LCAxMDYsIDUxLCA5LCAxLCAyNTIsIDYzLCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMTIyLCAyLCAxMTMsIAorICAgIDE3MCwgNDgsIDksIDEsIDEyMiwgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCA1MSwgOSwgMSwgMjQ4LCAyMDQsIAorICAgIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgMjUyLCA1MSwgMjIsIDQsIDIxNywgODEsIDksIDEsIDI0OCwgMjA0LCAyLCAyMzUsIAorICAgIDIwMCwgNCwgMjE0LCAxMDYsIDUxLCA5LCAxLCAyMjMsIDk5LCAyLCA5MSwgOSwgMSwgMjIxLCAxNjksIDIsIDI0NCwgMTksIAorICAgIDE3MCwgNDgsIDksIDEsIDI1NCwgMjA2LCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDI1NCwgMjA2LCAyLCAxMzQsIDE3MCwgCisgICAgMjI1LCAxMCwgMjQ2LCAxMTIsIDQ4LCA5LCAxLCAyNTQsIDIwNiwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgOSwgMSwgCisgICAgMjQ0LCAxNTEsIDIsIDExMywgMTcwLCA1MSwgOSwgMSwgMjQ0LCAxNTEsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIAorICAgIDE1MywgNTEsIDksIDEsIDIzNCwgMTgxLCAyLCA1OSwgNDgsIDksIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgNDgsIDksIAorICAgIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDUxLCA5LCAxLCA2NiwgMiwgNTksIDQ4LCA5LCAKKyAgICAxLCA2NiwgMiwgNTksIDUxLCA5LCAxLCAyMjgsIDY4LCAyLCAxMTMsIDE3MCwgNTEsIDksIDEsIDIyOCwgNjgsIDIsIDQsIAorICAgIDIxNywgODEsIDksIDEsIDIyOCwgNjgsIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMzMsIDEwOSwgMiwgMTMwLCA5LCAxLCAKKyAgICAyMjMsIDk5LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCA5LCAxLCAyMjMsIDk5LCAyLCAxODIsIDQ4LCA5LCAxLCAyMjEsIAorICAgIDE2OSwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgOSwgMSwgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCA1MSwgOSwgMSwgCisgICAgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCAyMiwgMTEzLCAyNDcsIDEyNiwgOSwgMSwgMjIxLCAxNjksIDIsIDQsIDksIDEsIAorICAgIDIxNywgODIsIDIyLCAxMTMsIDI0NywgMTI2LCA5LCAxLCAyMjMsIDk5LCAyLCA0LCA5LCAxLCAyMTcsIDgyLCAyMiwgMTEzLCAKKyAgICAyNDcsIDEyNiwgOSwgMSwgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCA0OCwgOSwgMSwgMTA5LCAyLCAyNDUsIDMwLCAyNTQsIAorICAgIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgMTA5LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgMjQ0LCAKKyAgICAxNzYsIDc3LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAyNDUsIAorICAgIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgCisgICAgMjQ0LCAxOSwgNTEsIDksIDEsIDIxMiwgMzEsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMTMsIDQ4LCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAyNDUsIDMwLCAKKyAgICAyNTQsIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCAKKyAgICA0OCwgOSwgMSwgMTIyLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMjQ0LCAxOSwgNTEsIDksIDEsIDIyMSwgMTY5LCAyLCAKKyAgICAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMjQ0LCAxOSwgNDgsIDksIDEsIDIyMSwgMTY5LCAyLCAyMzUsIDIwMCwgMjE0LCAxMDUsIAorICAgIDksIDEsIDIzNSwgMSwgMiwgMTEzLCAxNzAsIDQ4LCAyMTYsIDIwNiwgMSwgMjQyLCA1MywgMjE2LCAyMDYsIDEsIDIyMCwgCisgICAgNzAsIDIxNiwgMjA2LCAxLCAyMjgsIDY2LCAyMTYsIDIwNiwgMSwgMjIzLCAxODcsIDIxNiwgMjA2LCAxLCAyNTIsIDE5NywgCisgICAgMjE2LCAyMDYsIDEsIDIzMywgMSwgMjE2LCAyMDYsIDEsIDIzNSwgMTQsIDIxNiwgMjA2LCAxLCAyNTQsIDE2OCwgMjE2LCAKKyAgICAyMDYsIDEsIDIxNCwgMjUsIDIxNiwgMjA2LCAxLCAyMzEsIDgyLCAyMTYsIDIwNiwgMSwgMjQ0LCAyMDIsIDIxNiwgMjA2LCAKKyAgICAxLCAyNDgsIDMxLCAyMTYsIDIwNiwgMSwgMjE2LCAyMDgsIDIxNiwgMjA2LCAxLCAyMzMsIDEzNywgMjE2LCAyMDYsIDEsIAorICAgIDI0MywgMTM4LCAyMTYsIDIwNiwgMSwgMjQyLCAxODQsIDIxNiwgMjA2LCAxLCAyMjEsIDE2NywgMjE2LCAyMDYsIDEsIDI0OCwgCisgICAgMTU2LCAyMTYsIDIwNiwgMSwgMjEwLCAxMDAsIDIxNiwgMjA2LCAxLCAyMTcsIDM4LCAyMTYsIDIwNiwgMSwgMjExLCAxMDMsIAorICAgIDIxNiwgMjA2LCAxLCAyMjUsIDIzNywgMjE2LCAyMDYsIDEsIDIzNSwgMTM0LCAyMTYsIDIwNiwgMSwgMjUwLCAxNDIsIDIxNiwgCisgICAgMjA2LCAxLCAyMTUsIDE1NiwgMjE2LCAyMDYsIDEsIDI0MSwgMTk1LCAyMTYsIDIwNiwgMSwgMjM0LCAxMzcsIDIxNiwgMjA2LCAKKyAgICAxLCAyMTYsIDIwNywgMjE2LCAyMDYsIDEsIDIxMCwgMTE1LCAyMTYsIDIwNiwgMSwgMjIwLCA2MCwgMjE2LCAyMDYsIDEsIAorICAgIDIyMiwgMzIsIDIxNiwgMjA2LCAxLCAyNDgsIDIyNywgMjE2LCAyMDYsIDEsIDExMiwgMjE2LCAyMDYsIDEsIDIxMCwgMjMsIAorICAgIDIxNiwgMjA2LCAxLCAyNTQsIDIwMiwgMjE2LCAyMDYsIDEsIDI0MiwgMjUwLCAyMTYsIDIwNiwgMSwgMjI0LCA4OCwgMjE2LCAKKyAgICAyMDYsIDEsIDIxMiwgNjMsIDIxNiwgMjA2LCAyNTUsIDMxLCAyMTYsIDIwNiwgMjU1LCA0NywgMjE2LCAyMDYsIDI0MCwgCisgICAgMTIxLCAyMTYsIDIwNiwgMjQ1LCAyMTYsIDIxNiwgMjA2LCAyMTQsIDIyMiwgMjE2LCAyMDYsIDIyNiwgMTg2LCAyMTYsIAorICAgIDIwNiwgMjQ1LCAyMjQsIDIxNiwgMjA2LCAyNDUsIDI0LCAyMTYsIDIwNiwgMjI2LCAyNTEsIDIxNiwgMjA2LCAyMjcsIDMsIAorICAgIDIxNiwgMjA2LCAyMTgsIDQ2LCAyMTYsIDIwNiwgMSwgMjI5LCAyMzAsIDIyOCwgMTQyLCAyMSwgMjEwLCA4NiwgMjI4LCAKKyAgICAxNDIsIDIxLCAxMTEsIDIyOCwgMTQyLCAyMSwgMTA1LCAyMjgsIDE0MiwgMjEsIDE1OCwgMjI4LCAxNDIsIDIxLCAxNjEsIAorICAgIDIyOCwgMTQyLCAyMSwgMTkwLCAyMjgsIDE0MiwgMjEsIDE5NSwgMjI4LCAxNDIsIDIxLCAxOTksIDIyOCwgMTQyLCAyMSwgCisgICAgMTk2LCAyMjgsIDE0MiwgMjEsIDIwMSwgMjI4LCAxNDIsIDEsIDYxLCAyMjgsIDE0MiwgMSwgMjQ1LCAyMTcsIDIyOCwgMTQyLCAKKyAgICAxLCA3NCwgMjI4LCAxNDIsIDEsIDc2LCAyMjgsIDE0MiwgMSwgNjksIDIyOCwgMTQyLCAxLCAyMjYsIDE4NywgMjI4LCAxNDIsIAorICAgIDEsIDc4LCAyMjgsIDE0MiwgMSwgMjQ4LCAyMTcsIDIyOCwgMTQyLCAxLCAyMzAsIDMwLCAyMjgsIDE0MiwgMSwgMjUyLCAKKyAgICAxOTksIDIyOCwgMTQyLCAxLCAxOTEsIDIyOCwgMTQyLCAxLCAyMTcsIDEwNiwgMjI4LCAxNDIsIDEsIDIzNSwgMTQ3LCAyMjgsIAorICAgIDE0MiwgMSwgMjUwLCAxNjUsIDIyOCwgMTQyLCAxLCAyNDgsIDIyOSwgMjI4LCAxNDIsIDEsIDIwNSwgMjI4LCAxNDIsIDEsIAorICAgIDIyMiwgMTgxLCAyMjgsIDE0MiwgMSwgMjA2LCAyMjgsIDE0MiwgMSwgMjQzLCA4NiwgMjI4LCAxNDIsIDEsIDI0NCwgMjA0LCAKKyAgICAyMjgsIDE0MiwgMSwgMTc2LCAyMjgsIDE0MiwgMSwgMjMzLCAxNDEsIDIyOCwgMTQyLCAxLCAyMjksIDIzNCwgMjExLCAyMjMsIAorICAgIDIyOCwgMTQyLCAxLCAxODYsIDIyOCwgMTQyLCAxLCAyMjcsIDE2OSwgMjI4LCAxNDIsIDEsIDE5OCwgMjI4LCAxNDIsIDEsIAorICAgIDE2MiwgMjI4LCAxNDIsIDEsIDIxMiwgNjUsIDIyOCwgMTQyLCAxLCAxOTIsIDIyOCwgMTQyLCAxLCAyMjcsIDE3MCwgMjExLCAKKyAgICAyMjMsIDIyOCwgMTQyLCAxLCAyMzUsIDY3LCAyMzUsIDE0NywgMjI4LCAxNDIsIDEsIDIzNSwgNjcsIDI1MCwgMTY1LCAyMjgsIAorICAgIDE0MiwgMSwgMjM1LCA2NywgMjA1LCAyMjgsIDE0MiwgMzgsIDIxOSwgMjUzLCAxMjUsIDIxNiwgMzEsIDIyOCwgMTQyLCAzOCwgCisgICAgMjE5LCAyNTMsIDEyMSwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAyMTksIDI1MywgMjIyLCAyMzEsIDIxNiwgMzEsIDIyOCwgCisgICAgMTQyLCAzOCwgMjAwLCAyNDgsIDQ2LCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIDIwMCwgMTI1LCAyMTYsIDMxLCAyMjgsIAorICAgIDE0MiwgMzgsIDIwMCwgMTIxLCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIDIwMCwgMjIyLCAyMzEsIDIxNiwgMzEsIDIyOCwgCisgICAgMTQyLCAzOCwgMjI5LCAxOTgsIDc5LCAyMjgsIDE0MiwgMzgsIDUyLCA1OSwgNDgsIDIyOCwgMTQyLCAxMjUsIDEzOCwgMjU0LCAKKyAgICA2NSwgMjI4LCAxNDIsIDEyMSwgMTM4LCAyNTQsIDY1LCAyMjgsIDE0MiwgMTYsIDIyNiwgMTg4LCAyNDgsIDU4LCAyMjgsIAorICAgIDE0MiwgMTYsIDI0MywgODUsIDIyOCwgMTQyLCAyNDksIDIyNywgMjI4LCAxNDIsIDI0NSwgMzksIDc5LCAyMjgsIDE0MiwgCisgICAgMjMzLCAxMTQsIDIyMSwgMjU0LCAxLCAyNTQsIDE4NSwgMjIxLCAyNTQsIDEsIDI1MSwgMjM2LCAyMjEsIDI1NCwgMSwgMjQzLCAKKyAgICAxMTksIDIyMSwgMjU0LCAxLCAyNDgsIDIwMiwgMjIxLCAyNTQsIDEsIDIzNSwgMTU4LCAyMjEsIDI1NCwgMSwgMjUyLCAxOTcsIAorICAgIDIyMSwgMjU0LCAxLCAyMTAsIDg5LCAyMjEsIDI1NCwgMSwgMjM1LCAxNjYsIDIyMSwgMjU0LCAxLCAyMTYsIDY4LCAyMjEsIAorICAgIDI1NCwgMSwgMjEwLCAxODIsIDIyMSwgMjU0LCAxLCAyMzUsIDE1LCAyMjEsIDI1NCwgMSwgMjMzLCAxMzQsIDIyMSwgMjU0LCAKKyAgICAxLCAyMzAsIDE5NSwgMjIxLCAyNTQsIDEsIDIyNywgMTk4LCAyMjEsIDI1NCwgMSwgMjE5LCAxNTgsIDIyMSwgMjU0LCAxLCAKKyAgICAyMzYsIDYsIDIyMSwgMjU0LCAxLCAyNDQsIDEyOSwgMjIxLCAyNTQsIDEsIDIxNSwgMTgyLCAyMjEsIDI1NCwgMSwgMjI0LCAKKyAgICAxMywgMjIxLCAyNTQsIDEsIDIyMiwgMjMyLCAyMjEsIDI1NCwgMSwgMjIwLCA4NywgMjIxLCAyNTQsIDEsIDIxNywgMTAxLCAKKyAgICAyMjEsIDI1NCwgMTY0LCAyMzYsIDYsIDIyMSwgMjU0LCAxNjQsIDIzNiwgNSwgMjIxLCAyNTQsIDE2NCwgMjI2LCAyNDcsIAorICAgIDIyMSwgMjU0LCAxNjQsIDI0OCwgMjE1LCAyMjEsIDI1NCwgNTgsIDEsIDI0NSwgMTEzLCAyMTAsIDE4MiwgMjIxLCAyNTQsIAorICAgIDE2NCwgMjQ1LCAxMTMsIDIxMCwgMTgyLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgNzYsIDIyMSwgMjU0LCAyNSwgNSwgNzYsIAorICAgIDIyMSwgMjU0LCAyNSwgNSwgMjI2LCAxMjIsIDI1NSwgODIsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCAyNTUsIDgyLCAyMjEsIAorICAgIDI1NCwgMjUsIDUsIDI1NSwgODIsIDIyMSwgMjU0LCAyNSwgNSwgMjI2LCAxMjIsIDYxLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgCisgICAgNjEsIDIyMSwgMjU0LCAyNSwgNSwgNjEsIDIyMSwgMjU0LCA1OCwgMSwgMjE5LCAyNTMsIDYxLCAyMjEsIDI1NCwgMjUsIDUsIAorICAgIDIxOSwgMjUzLCA2MSwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDY5LCAyMjEsIDI1NCwgMjUsIDUsIDY5LCAyMjEsIDI1NCwgCisgICAgNTgsIDEsIDc0LCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgNzQsIDIyMSwgMjU0LCAyNSwgNSwgNzQsIDIyMSwgMjU0LCAyNSwgCisgICAgNSwgNzgsIDIyMSwgMjU0LCAyNSwgNSwgMjE4LCA0NiwgMjIxLCAyNTQsIDE2NCwgMjI5LCA5NywgMjIxLCAyNTQsIDIyNCwgCisgICAgMTQ0LCAyMjksIDk3LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1NCwgMjI3LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1NCwgMTIyLCAKKyAgICAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1MiwgMTIyLCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1MywgMjA5LCAyMjEsIDI1NCwgCisgICAgMjI0LCAxNDQsIDIyMCwgMTAsIDIyMSwgMjU0LCAyNTUsIDMwLCA3OSwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMzEsIDczLCAKKyAgICAyMjQsIDQ4LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIxMCwgMzEsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjI0LCA0OCwgMjIxLCAKKyAgICAyNTQsIDIyNCwgMTQ0LCAyMTAsIDExNCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMTUsIDkwLCAyMjEsIDI1NCwgMjI0LCAxNDQsIAorICAgIDI1NCwgMTcsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjE5LCA1NSwgMjMxLCAxNTAsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjU0LCAKKyAgICAxMDgsIDIzMSwgMTg3LCAxLCAyNDIsIDMxLCAyMzEsIDE4NywgMSwgMjU1LCAzNCwgMjMxLCAxODcsIDEsIDI1NCwgMjI1LCAKKyAgICAyMzEsIDE4NywgMSwgMjU1LCA4LCAyMzEsIDE4NywgMSwgMjU0LCAyMTgsIDIzMSwgMTg3LCAxLCAyMTQsIDEyNCwgMjMxLCAKKyAgICAxODcsIDEsIDI1MywgMTY4LCAyMzEsIDE4NywgMSwgMjM1LCAxNjYsIDIzMSwgMTg3LCAxLCAyNTMsIDIwNiwgMjMxLCAxODcsIAorICAgIDEsIDI1NCwgMTkwLCAyMzEsIDE4NywgMSwgMjU0LCAxOTUsIDIzMSwgMTg3LCAxLCAyNTQsIDE4NywgMjMxLCAxODcsIDEsIAorICAgIDI1NCwgMTQ0LCAyMzEsIDE4NywgMSwgMjU0LCAxMzEsIDIzMSwgMTg3LCAxLCAyNTMsIDI0NSwgMjMxLCAxODcsIDEsIDIzNiwgCisgICAgNiwgMjMxLCAxODcsIDEsIDI1NCwgODAsIDIzMSwgMTg3LCAxLCAyNTMsIDIxNiwgMjMxLCAxODcsIDEsIDI1NCwgNTMsIAorICAgIDIzMSwgMTg3LCAxLCAyNTQsIDQ5LCAyMzEsIDE4NywgMSwgMjUzLCAyMzksIDIzMSwgMTg3LCAxLCAyNTMsIDIxNCwgMjMxLCAKKyAgICAxODcsIDEsIDI0NiwgNjMsIDIzMSwgMTg3LCAxLCAyMzUsIDgsIDIzMSwgMTg3LCAxLCAyNTQsIDIwNSwgMjMxLCAxODcsIAorICAgIDI1NCwgMjMxLCA3OSwgMjMxLCAxODcsIDIxMywgMTM2LCA3OSwgMjMxLCAxODcsIDI0MywgNjAsIDc5LCAyMzEsIDE4NywgCisgICAgMjI0LCAxNDMsIDksIDEsIDI1MiwgNjMsIDIsIDQsIDIxNCwgMTA2LCA1MSwgOSwgMSwgMTUxLCAyLCAxMTMsIDE3MCwgNDgsIAorICAgIDksIDEsIDIxNywgODIsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjQ0LCAxNTEsIDIsIDU5LCAyNTIsIDUxLCAyMiwgMTM0LCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAyMjQsIDg1LCAyLCA1OSwgNTEsIDksIDEsIDIzMywgMTA5LCAyLCA1MiwgMTMwLCA5LCAxLCA2NiwgCisgICAgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCA3NywgMiwgMTEzLCAxNzAsIDI1MiwgNTEsIDIyLCAxODIsIDQ4LCA5LCAxLCA3NywgCisgICAgMiwgMTEzLCAxNzAsIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDIyMywgOTksIDIsIDIzMiwgMTI5LCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCA1OSwgMjExLCAyMzEsIDksIDEsIDIyMiwgMjAzLCAyMTEsIDQzLCA5LCAyNDksIDEwNywgMjQ0LCAxNzMsIDksIAorICAgIDI0OSwgMTA3LCAyNDgsIDE5MiwgOSwgMjQ5LCAxMDcsIDIzNCwgMjExLCA5LCAyNDksIDEwNywgMjQ0LCAxNzEsIDksIDI0OSwgCisgICAgMTA3LCAyNDgsIDE5MCwgOSwgMjQ5LCAxMDcsIDIzNCwgMjA5LCA5LCAxMzgsIDEyMywgNTksIDQ4LCA5LCAxMzgsIDExMywgCisgICAgMTcwLCA0OCwgOSwgMTM4LCAyMzIsIDEzMCwgNDgsIDksIDEzOCwgMTIzLCA1OSwgNTEsIDksIDEzOCwgMTEzLCAxNzAsIDUxLCAKKyAgICA5LCAxMzgsIDIzMiwgMTMwLCA1MSwgOSwgMjA0LCAyNDQsIDE3MSwgOSwgMjA0LCAyNDgsIDE5MCwgOSwgMjA0LCAyMzQsIAorICAgIDIwOSwgOSwgNCwgMTI1LCAyMTIsIDMwLCA5LCAyNDQsIDE3NCwgMiwgMjIyLCAyMzYsIDksIDI0NCwgMTc0LCAyLCA1OSwgCisgICAgNDgsIDksIDIzNCwgMjEyLCAyLCA1OSwgNTEsIDksIDQzLCAyNTQsIDIsIDQ4LCA5LCA0NCwgMjU0LCAyLCA0OCwgOSwgNDMsIAorICAgIDI1NCwgMiwgNTEsIDksIDQ0LCAyNTQsIDIsIDUxLCA5LCA1MiwgNDQsIDI1NCwgMiwgNDgsIDksIDUyLCA0NCwgMjU0LCAyLCAKKyAgICA3MiwgMiwgMjQ3LCAxMjgsIDksIDQ0LCAyNTQsIDIsIDcyLCAyLCAyNDcsIDEyOCwgOSwgMjQ4LCAxOTMsIDIsIDI0NywgCisgICAgMTI4LCA4NCwgNSwgMjM1LCAyMDAsIDI1MSwgNywgODQsIDUsIDI1MSwgNywgODQsIDUsIDI1NCwgODMsIDg0LCA1LCAyMTMsIAorICAgIDE0NywgODQsIDEsIDIxOSwgMjUzLCA2MSwgODQsIDEsIDYxLCA4NCwgMSwgMjU1LCA4MiwgODQsIDEsIDc0LCA4NCwgMSwgCisgICAgMjM2LCA0MCwgODQsIDEsIDY5LCA4NCwgMSwgMjE0LCAxMTgsIDg0LCAxLCAxNDksIDE1MywgODQsIDEsIDE0OSwgMTU2LCAKKyAgICA4NCwgMSwgMjUxLCAxMCwgNzYsIDg0LCAxLCAyMTksIDI1MywgNzYsIDg0LCAxLCA3NiwgODQsIDEsIDI1NCwgMjEwLCA4NCwgCisgICAgMSwgMjUxLCAxMCwgNzgsIDg0LCAxLCAyMTksIDI1MywgNzgsIDg0LCAxLCA3OCwgODQsIDEsIDI1MywgMjAwLCA4NCwgMSwgCisgICAgMTc2LCA4NCwgMSwgMjM0LCAxMzgsIDg0LCAxLCAyNDMsIDE0MiwgODQsIDEsIDI0MywgMCwgODQsIDEsIDIyOSwgODIsIDg0LCAKKyAgICAxLCAyNTEsIDQxLCA4NCwgMSwgMjUwLCAxNjUsIDg0LCAxLCAyMzUsIDE0NywgODQsIDEsIDIzNSwgMTIwLCA4NCwgMSwgCisgICAgMjI3LCAxNjksIDg0LCAxLCAyMTUsIDE1NywgODQsIDEsIDIxNSwgMTQ1LCA4NCwgMSwgMjQ4LCAxNDMsIDg0LCAxLCAyNDgsIAorICAgIDEyNywgODQsIDEsIDIyOCwgMTE1LCA4NCwgMSwgMjE3LCAxMDYsIDg0LCAxLCAyMTYsIDIwOSwgODQsIDEsIDI0OCwgMjI5LCAKKyAgICA4NCwgMSwgMjQ4LCAzMywgODQsIDEsIDE5OCwgODQsIDEsIDIyOCwgOTcsIDg0LCAxLCAxOTEsIDg0LCAxLCAyMjUsIDE1MCwgCisgICAgODQsIDEsIDI1MiwgMTk5LCA4NCwgMSwgMjUyLCAyNiwgODQsIDEsIDE4NiwgODQsIDEsIDE5MiwgODQsIDEsIDIwNSwgODQsIAorICAgIDEsIDIyMiwgMTgxLCA4NCwgMSwgMjMzLCAxNDEsIDg0LCAxLCAyMzIsIDE5MCwgODQsIDEsIDIzMiwgMTgxLCA4NCwgMSwgCisgICAgMjE0LCAyNywgODQsIDEsIDIyMCwgMTA0LCA4NCwgMSwgMjE4LCAyMjUsIDg0LCAxLCAyMDYsIDg0LCAxLCAxNjIsIDg0LCAKKyAgICAyNSwgNSwgMjI2LCAyMzgsIDg0LCAyNSwgNSwgMjI2LCAxODUsIDg0LCA1LCAyMjcsIDIwOSwgODQsIDUsIDI1MywgMTgzLCAKKyAgICA4NCwgMjUsIDUsIDI1NSwgODIsIDg0LCAyNSwgNSwgNzQsIDg0LCAyNSwgNSwgMjM2LCA0MCwgODQsIDI1LCA1LCA2OSwgODQsIAorICAgIDI1LCA1LCAyMTQsIDExOCwgODQsIDI1LCA1LCAxNDksIDE1MywgODQsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA4NCwgMjUsIAorICAgIDUsIDI1MSwgMTAsIDc2LCA4NCwgMjUsIDUsIDIxOSwgMjUzLCA3NiwgODQsIDI1LCA1LCA3NiwgODQsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgODQsIDI1LCA1LCAyNTEsIDEwLCA3OCwgODQsIDI1LCA1LCAyMTksIDI1MywgNzgsIDg0LCAyNSwgNSwgNzgsIDg0LCAKKyAgICAyNSwgNSwgMjUzLCAyMDAsIDg0LCA1LCAyMTMsIDE1MiwgODQsIDI1LCA1LCAyMjQsIDE4OCwgNzYsIDg0LCAyNSwgNSwgCisgICAgMjUzLCAxNzksIDg0LCAyMjYsIDIwOCwgODQsIDIxOCwgMTEzLCA1LCAyMTQsIDIxNiwgODQsIDIxOCwgMTEzLCA1LCAyNTQsIAorICAgIDg1LCA4NCwgMjQyLCAxNDQsIDI1NSwgMjMsIDg0LCAyNTUsIDEyLCAyNTUsIDIzLCA4NCwgMjUsIDUsIDI1MSwgMTAsIDIwMCwgCisgICAgNzYsIDg0LCAyNSwgNSwgMjE0LCAyMTQsIDg0LCAyNSwgNSwgMjE0LCAxMTcsIDg0LCAxLCAyMjQsIDkxLCA4NCwgMSwgMjM0LCAKKyAgICAxMjEsIDg0LCAxLCAyNDIsIDIzMywgODQsIDEsIDIxMCwgMTE2LCA4NCwgMSwgMjQ4LCAxMzIsIDg0LCAxLCAyMjMsIDQyLCAKKyAgICA4NCwgMSwgMjQ0LCAyMDQsIDg0LCAxLCAyMTAsIDE2OCwgODQsIDEsIDE0OSwgMjIyLCAxODIsIDg0LCAxLCAxNDksIDIzMiwgCisgICAgMTkxLCA4NCwgMjUsIDUsIDE0OSwgMTU2LCA4NCwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDg0LCAyNDgsIDE4NiwgODQsIDUyLCAKKyAgICAyNDgsIDE4NiwgODQsIDIxLCAyMTAsIDg2LCA4NCwgMjEsIDExMSwgODQsIDIxLCAxMDUsIDg0LCAyMSwgMTU4LCA4NCwgMjEsIAorICAgIDE2MSwgODQsIDIxLCAxOTAsIDg0LCAyMSwgMTk1LCA4NCwgMjEsIDE5OSwgODQsIDIxLCAxOTYsIDg0LCAyMSwgMjAxLCA4NCwgCisgICAgMjU1LCAzMCwgNTAsIDg0LCA1LCAxMjUsIDIxOSwgMTksIDI0NywgMTI4LCA4NCwgMSwgMjUxLCAxMCwgNjEsIDg0LCAxLCAKKyAgICAyMjYsIDIzOCwgODQsIDEsIDIyNiwgMTg1LCA4NCwgMSwgMjUzLCAxNzksIDg0LCAxLCAyMTQsIDIxNCwgODQsIDEsIDIxNCwgCisgICAgMTE3LCA4NCwgMSwgMjEwLCA4MiwgODQsIDEsIDExNCwgMTkyLCA4NCwgMSwgMjQzLCAzNiwgODQsIDEsIDIzNSwgMTAyLCAKKyAgICA4NCwgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA4NCwgMSwgMjQ4LCAxMzMsIDg0LCAxLCAyNTIsIDExOSwgMTQ2LCA1LCAyNTEsIAorICAgIDcsIDE0NiwgNSwgMjU0LCA4MywgMTQ2LCA1LCAyMTMsIDE0NywgMTQ2LCAxLCA2MSwgMTQ2LCAxLCAyNTUsIDgyLCAxNDYsIAorICAgIDEsIDc0LCAxNDYsIDEsIDIzNiwgNDAsIDE0NiwgMSwgNjksIDE0NiwgMSwgMjE0LCAxMTgsIDE0NiwgMSwgMTQ5LCAxNTMsIAorICAgIDE0NiwgMSwgMTQ5LCAxNTYsIDE0NiwgMSwgNzYsIDE0NiwgMSwgMjU0LCAyMTAsIDE0NiwgMSwgNzgsIDE0NiwgMSwgMjUzLCAKKyAgICAyMDAsIDE0NiwgMSwgMTc2LCAxNDYsIDEsIDIzNCwgMTM4LCAxNDYsIDEsIDI0MywgMTQyLCAxNDYsIDEsIDI0MywgMCwgCisgICAgMTQ2LCAxLCAyMjksIDgyLCAxNDYsIDEsIDI1MSwgNDEsIDE0NiwgMSwgMjUwLCAxNjUsIDE0NiwgMSwgMjM1LCAxNDcsIAorICAgIDE0NiwgMSwgMjM1LCAxMjAsIDE0NiwgMSwgMjI3LCAxNjksIDE0NiwgMSwgMjE1LCAxNTcsIDE0NiwgMSwgMjE1LCAxNDUsIAorICAgIDE0NiwgMSwgMjQ4LCAxNDMsIDE0NiwgMSwgMjQ4LCAxMjcsIDE0NiwgMSwgMjI4LCAxMTUsIDE0NiwgMSwgMjE3LCAxMDYsIAorICAgIDE0NiwgMSwgMjE2LCAyMDksIDE0NiwgMSwgMjQ4LCAyMjksIDE0NiwgMSwgMjQ4LCAzMywgMTQ2LCAxLCAxOTgsIDE0NiwgMSwgCisgICAgMTkxLCAxNDYsIDEsIDIyNSwgMTUwLCAxNDYsIDEsIDI1MiwgMTk5LCAxNDYsIDEsIDI1MiwgMjYsIDE0NiwgMSwgMTg2LCAKKyAgICAxNDYsIDEsIDE5MiwgMTQ2LCAxLCAyMDUsIDE0NiwgMSwgMjMzLCAxNDEsIDE0NiwgMSwgMjIwLCAxMDQsIDE0NiwgMSwgCisgICAgMjE4LCAyMjUsIDE0NiwgMSwgMjA2LCAxNDYsIDEsIDE2MiwgMTQ2LCA1LCAyMjcsIDIwOSwgMTQ2LCA1LCAyNTMsIDE4MywgCisgICAgMTQ2LCAyNSwgNSwgMjU1LCA4MiwgMTQ2LCAyNSwgNSwgNzQsIDE0NiwgMjUsIDUsIDIzNiwgNDAsIDE0NiwgMjUsIDUsIDY5LCAKKyAgICAxNDYsIDI1LCA1LCAyMTQsIDExOCwgMTQ2LCAyNSwgNSwgMTQ5LCAxNTMsIDE0NiwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIAorICAgIDE0NiwgMjUsIDUsIDc2LCAxNDYsIDI1LCA1LCAyNTQsIDIxMCwgMTQ2LCAyNSwgNSwgNzgsIDE0NiwgMjUsIDUsIDI1MywgCisgICAgMjAwLCAxNDYsIDUsIDIxMywgMTUyLCAxNDYsIDEsIDIzNCwgMTMwLCAyMTcsIDEwNiwgMTQ2LCAyNTMsIDIwMSwgMjMzLCAKKyAgICAyOSwgNzksIDE0NiwgMSwgMjIyLCAxODEsIDE0NiwgMSwgMjIzLCA0MiwgMTQ2LCAxLCAyMTAsIDE2OCwgMTQ2LCAxLCAxNDksIAorICAgIDIyMiwgMTgyLCAxNDYsIDEsIDE0OSwgMjMyLCAxOTEsIDE0NiwgMjUsIDUsIDE0OSwgMTU2LCAxNDYsIDI1LCA1LCAxNDksIAorICAgIDIzMiwgMTkxLCAxNDYsIDIxLCAyMTAsIDg2LCAxNDYsIDIxLCAxMTEsIDE0NiwgMjEsIDEwNSwgMTQ2LCAyMSwgMTU4LCAKKyAgICAxNDYsIDIxLCAxNjEsIDE0NiwgMjEsIDE5MCwgMTQ2LCAyMSwgMTk1LCAxNDYsIDIxLCAxOTksIDE0NiwgMjEsIDE5NiwgCisgICAgMTQ2LCAyMSwgMjAxLCAxNDYsIDEsIDIyMywgMTkxLCAyLCAyMzAsIDIyOSwgMjQ4LCA2LCAxNDYsIDEsIDIyMywgMTkxLCAyLCAKKyAgICAyMzIsIDExNCwgMjQ4LCA2LCAxNDYsIDIyMiwgMTIwLCA3OSwgMTQ2LCAyMjIsIDEyMCwgNTAsIDE0NiwgMjQ5LCAxMDYsIAorICAgIDIyNywgMjAxLCAxMTEsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxMDUsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAKKyAgICAxNTgsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxNjEsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxMjMsIDIzMywgMjIsIAorICAgIDIxNiwgMjAyLCAyMTYsIDE5NywgMjQ4LCA1NiwgMTQ2LCAyNDksIDEwNiwgMjQ4LCA1NywgMjE5LCAxMjEsIDE0NiwgMjM1LCAKKyAgICAxNjcsIDE0NiwgMjQzLCAxMTAsIDc5LCAxODUsIDUsIDI1NSwgNywgMjUxLCAyNTEsIDE4NSwgNSwgMjUxLCAyNTEsIDE4NSwgCisgICAgNSwgMjEzLCAxNDcsIDE4NSwgMSwgNjEsIDE4NSwgMSwgMjU1LCA4MiwgMTg1LCAxLCA3NCwgMTg1LCAxLCAyMzYsIDQwLCAKKyAgICAxODUsIDEsIDY5LCAxODUsIDEsIDIxNCwgMTE4LCAxODUsIDEsIDI0NSwgMjE3LCAxODUsIDEsIDI1NCwgMjEwLCAxODUsIDEsIAorICAgIDIyNiwgMTg3LCAxODUsIDEsIDI1MywgMjAwLCAxODUsIDEsIDE3NiwgMTg1LCAxLCAyMzQsIDEzOCwgMTg1LCAxLCAyNDMsIAorICAgIDE0MiwgMTg1LCAxLCAyNDMsIDAsIDE4NSwgMSwgMjI5LCA4MiwgMTg1LCAxLCAyNTEsIDQxLCAxODUsIDEsIDI1MCwgMTY1LCAKKyAgICAxODUsIDEsIDIzNSwgMTQ3LCAxODUsIDEsIDIzNSwgMTIwLCAxODUsIDEsIDIyNywgMTY5LCAxODUsIDEsIDIxNSwgMTU3LCAKKyAgICAxODUsIDEsIDIxNSwgMTQ1LCAxODUsIDEsIDI0OCwgMTQzLCAxODUsIDEsIDI0OCwgMTI3LCAxODUsIDEsIDIyOCwgMTE1LCAKKyAgICAxODUsIDEsIDIxNywgMTA2LCAxODUsIDEsIDIxNiwgMjA5LCAxODUsIDEsIDI0OCwgMjI5LCAxODUsIDEsIDI0OCwgMzMsIAorICAgIDE4NSwgMSwgMTk4LCAxODUsIDEsIDE5MSwgMTg1LCAxLCAyMjUsIDE1MCwgMTg1LCAxLCAyNTIsIDE5OSwgMTg1LCAxLCAKKyAgICAyNTIsIDI2LCAxODUsIDEsIDE4NiwgMTg1LCAxLCAxOTIsIDE4NSwgMSwgMjA1LCAxODUsIDEsIDIzMywgMTQxLCAxODUsIDEsIAorICAgIDIzMiwgMTkwLCAxODUsIDEsIDIxNCwgMjcsIDE4NSwgMSwgMjIwLCAxMDQsIDE4NSwgMSwgMjA2LCAxODUsIDEsIDE2MiwgCisgICAgMTg1LCA1LCAyMjcsIDIwOSwgMTg1LCAyNSwgNSwgMjU1LCA4MiwgMTg1LCAyNSwgNSwgNzQsIDE4NSwgMjUsIDUsIDIzNiwgCisgICAgNDAsIDE4NSwgMjUsIDUsIDY5LCAxODUsIDI1LCA1LCAyMTQsIDExOCwgMTg1LCAyNSwgNSwgMjQ1LCAyMTcsIDE4NSwgMjUsIAorICAgIDUsIDI1NCwgMjEwLCAxODUsIDI1LCA1LCAyMjYsIDE4NywgMTg1LCAyNSwgNSwgMjUzLCAyMDAsIDE4NSwgNSwgMjEzLCAKKyAgICAxNTIsIDE4NSwgNSwgMjE0LCAyMTgsIDE4NSwgMSwgMjM0LCAxMjEsIDE4NSwgMSwgMjQyLCAyMzMsIDE4NSwgMSwgMjEwLCAKKyAgICAxMTYsIDE4NSwgMSwgMjIyLCAxODEsIDE4NSwgMSwgMjQ0LCAyMDQsIDE4NSwgMjEsIDIxMCwgODYsIDE4NSwgMjEsIDExMSwgCisgICAgMTg1LCAyMSwgMTA1LCAxODUsIDIxLCAxNTgsIDE4NSwgMjEsIDE2MSwgMTg1LCAyMSwgMTkwLCAxODUsIDIxLCAxOTUsIAorICAgIDE4NSwgMjEsIDE5OSwgMTg1LCAyMSwgMTk2LCAxODUsIDIxLCAyMDEsIDE4NSwgMjE2LCA3NSwgMTg1LCAyNTUsIDYsIDE4NSwgCisgICAgMjM1LCAxODUsIDE4NSwgMjE0LCAxNDYsIDE4NSwgMjQ1LCAxODksIDIyNiwgMTkyLCAxODUsIDUsIDIxMSwgNzgsIDE3MSwgCisgICAgNSwgMjUxLCA3LCAxNzEsIDUsIDI1NCwgODMsIDE3MSwgNSwgMjEzLCAxNDcsIDE3MSwgMSwgNjEsIDE3MSwgMSwgMjU1LCAKKyAgICA4MiwgMTcxLCAxLCA3NCwgMTcxLCAxLCAyMzYsIDQwLCAxNzEsIDEsIDY5LCAxNzEsIDEsIDIxNCwgMTE4LCAxNzEsIDEsIAorICAgIDE0OSwgMTUzLCAxNzEsIDEsIDE0OSwgMTU2LCAxNzEsIDI1LCAyNTEsIDEwLCA3NiwgMTcxLCAxLCA3NiwgMTcxLCAxLCAKKyAgICAyNTQsIDIxMCwgMTcxLCAyNSwgMjUxLCAxMCwgNzgsIDE3MSwgMSwgNzgsIDE3MSwgMSwgMjUzLCAyMDAsIDE3MSwgMSwgCisgICAgMTc2LCAxNzEsIDEsIDIzNCwgMTM4LCAxNzEsIDEsIDI0MywgMTQyLCAxNzEsIDEsIDI0MywgMCwgMTcxLCAxLCAyMjksIDgyLCAKKyAgICAxNzEsIDEsIDI1MSwgNDEsIDE3MSwgMSwgMjUwLCAxNjUsIDE3MSwgMSwgMjM1LCAxNDcsIDE3MSwgMSwgMjM1LCAxMjAsIAorICAgIDE3MSwgMSwgMjI3LCAxNjksIDE3MSwgMSwgMjE1LCAxNTcsIDE3MSwgMSwgMjE1LCAxNDUsIDE3MSwgMSwgMjQ4LCAxNDMsIAorICAgIDE3MSwgMSwgMjQ4LCAxMjcsIDE3MSwgMSwgMjI4LCAxMTUsIDE3MSwgMSwgMjE3LCAxMDYsIDE3MSwgMSwgMjE2LCAyMDksIAorICAgIDE3MSwgMSwgMjQ4LCAyMjksIDE3MSwgMSwgMjQ4LCAzMywgMTcxLCAxLCAxOTgsIDE3MSwgMSwgMTkxLCAxNzEsIDEsIDIyNSwgCisgICAgMTUwLCAxNzEsIDEsIDI1MiwgMTk5LCAxNzEsIDEsIDI1MiwgMjYsIDE3MSwgMSwgMTg2LCAxNzEsIDEsIDE5MiwgMTcxLCAxLCAKKyAgICAyMDUsIDE3MSwgMSwgMjMzLCAxNDEsIDE3MSwgMSwgMjMyLCAxOTAsIDE3MSwgMSwgMjE0LCAyNywgMTcxLCAxLCAyMjAsIAorICAgIDEwNCwgMTcxLCAxLCAyMTgsIDIyNSwgMTcxLCAxLCAyMDYsIDE3MSwgMSwgMTYyLCAxNzEsIDUsIDIyNywgMjA5LCAxNzEsIAorICAgIDUsIDI1MywgMTgzLCAxNzEsIDI1LCA1LCAyNTUsIDgyLCAxNzEsIDI1LCA1LCA3NCwgMTcxLCAyNSwgNSwgMjM2LCA0MCwgCisgICAgMTcxLCAyNSwgNSwgNjksIDE3MSwgMjUsIDUsIDIxNCwgMTE4LCAxNzEsIDI1LCA1LCAxNDksIDE1MywgMTcxLCAyNSwgNSwgCisgICAgMTQ5LCAyMjIsIDE4MiwgMTcxLCAyNSwgNSwgMjUxLCAxMCwgNzYsIDE3MSwgMjUsIDUsIDc2LCAxNzEsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgMTcxLCAyNSwgNSwgMjUxLCAxMCwgNzgsIDE3MSwgMjUsIDUsIDc4LCAxNzEsIDI1LCA1LCAyNTMsIDIwMCwgMTcxLCAKKyAgICA1LCAyMTMsIDE1MiwgMTcxLCAyMjYsIDIwOCwgMTcxLCAxLCAxNDksIDIyMiwgMTgyLCAxNzEsIDEsIDE0OSwgMjMyLCAxOTEsIAorICAgIDE3MSwgMjUsIDUsIDE0OSwgMTU2LCAxNzEsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNzEsIDIxLCAyMTAsIDg2LCAxNzEsIAorICAgIDIxLCAxMTEsIDE3MSwgMjEsIDEwNSwgMTcxLCAyMSwgMTU4LCAxNzEsIDIxLCAxNjEsIDE3MSwgMjEsIDE5MCwgMTcxLCAyMSwgCisgICAgMTk1LCAxNzEsIDIxLCAxOTksIDE3MSwgMjEsIDE5NiwgMTcxLCAyMSwgMjAxLCAxNzEsIDI1NSwgMzAsIDUwLCAxNzEsIAorICAgIDIyMiwgMTIwLCA1MCwgMTU3LCA1LCAyNTEsIDcsIDE1NywgNSwgMjU0LCA4MywgMTU3LCA1LCAyMTMsIDE0NywgMTU3LCAxLCAKKyAgICA2MSwgMTU3LCAxLCAyNTUsIDgyLCAxNTcsIDEsIDc0LCAxNTcsIDEsIDIzNiwgNDAsIDE1NywgMSwgNjksIDE1NywgMSwgCisgICAgMjE0LCAxMTgsIDE1NywgMSwgMTQ5LCAxNTMsIDE1NywgMSwgMTQ5LCAxNTYsIDE1NywgMSwgNzYsIDE1NywgMSwgMjU0LCAKKyAgICAyMTAsIDE1NywgMSwgNzgsIDE1NywgMSwgMjUzLCAyMDAsIDE1NywgMSwgMTc2LCAxNTcsIDEsIDIzNCwgMTM4LCAxNTcsIDEsIAorICAgIDI0MywgMTQyLCAxNTcsIDEsIDI0MywgMCwgMTU3LCAxLCAyMjksIDgyLCAxNTcsIDEsIDI1MSwgNDEsIDE1NywgMSwgMjUwLCAKKyAgICAxNjUsIDE1NywgMSwgMjM1LCAxNDcsIDE1NywgMSwgMjM1LCAxMjAsIDE1NywgMSwgMjI3LCAxNjksIDE1NywgMSwgMjE1LCAKKyAgICAxNTcsIDE1NywgMSwgMjE1LCAxNDUsIDE1NywgMSwgMjQ4LCAxNDMsIDE1NywgMSwgMjQ4LCAxMjcsIDE1NywgMSwgMjI4LCAKKyAgICAxMTUsIDE1NywgMSwgMjE3LCAxMDYsIDE1NywgMSwgMjE2LCAyMDksIDE1NywgMSwgMjQ4LCAyMjksIDE1NywgMSwgMjQ4LCAKKyAgICAzMywgMTU3LCAxLCAxOTgsIDE1NywgMSwgMTkxLCAxNTcsIDEsIDIyNSwgMTUwLCAxNTcsIDEsIDI1MiwgMTk5LCAxNTcsIDEsIAorICAgIDI1MiwgMjYsIDE1NywgMSwgMTg2LCAxNTcsIDEsIDE5MiwgMTU3LCAxLCAyMDUsIDE1NywgMSwgMjMzLCAxNDEsIDE1NywgMSwgCisgICAgMjMyLCAxOTAsIDE1NywgMSwgMjE0LCAyNywgMTU3LCAxLCAyMjAsIDEwNCwgMTU3LCAxLCAyMTgsIDIyNSwgMTU3LCAxLCAKKyAgICAyMDYsIDE1NywgMSwgMTYyLCAxNTcsIDUsIDIyNywgMjA5LCAxNTcsIDUsIDI1MywgMTgzLCAxNTcsIDI1LCA1LCAyNTUsIAorICAgIDgyLCAxNTcsIDI1LCA1LCA3NCwgMTU3LCAyNSwgNSwgMjM2LCA0MCwgMTU3LCAyNSwgNSwgNjksIDE1NywgMjUsIDUsIDIxNCwgCisgICAgMTE4LCAxNTcsIDI1LCA1LCAxNDksIDE1MywgMTU3LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgMTU3LCAyNSwgNSwgNzYsIAorICAgIDE1NywgMjUsIDUsIDI1NCwgMjEwLCAxNTcsIDI1LCA1LCA3OCwgMTU3LCAyNSwgNSwgMjUzLCAyMDAsIDE1NywgNSwgMjEzLCAKKyAgICAxNTIsIDE1NywgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNTcsIDI1MywgMjAxLCAyMzMsIDI5LCA3OSwgMTU3LCAxLCAyMjIsIAorICAgIDE4MSwgMTU3LCAxLCAyMjMsIDQyLCAxNTcsIDEsIDIxMCwgMTY4LCAxNTcsIDEsIDE0OSwgMjIyLCAxODIsIDE1NywgMSwgCisgICAgMTQ5LCAyMzIsIDE5MSwgMTU3LCAyNSwgNSwgMTQ5LCAxNTYsIDE1NywgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE1NywgMjEsIAorICAgIDIxMCwgODYsIDE1NywgMjEsIDExMSwgMTU3LCAyMSwgMTA1LCAxNTcsIDIxLCAxNTgsIDE1NywgMjEsIDE2MSwgMTU3LCAyMSwgCisgICAgMTkwLCAxNTcsIDIxLCAxOTUsIDE1NywgMjEsIDE5OSwgMTU3LCAyMSwgMTk2LCAxNTcsIDIxLCAyMDEsIDE1NywgMjM1LCAKKyAgICAxNjcsIDE1NywgMSwgMjEyLCA2NSwgMTU3LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDE1NywgMjQ0LCAxMCwgMTIzLCAyNDIsIAorICAgIDM0LCAxNTcsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMTU3LCAyNDQsIDEwLCAxMjMsIDIxOSwgMTE5LCAxNTcsIDI0NCwgCisgICAgMTAsIDEyMywgMjQ1LCAxOTYsIDE1NywgMjQ0LCAxMCwgMTM0LCAyMTksIDExOCwgMzYsIDUsIDI1NCwgODMsIDM2LCA1LCAKKyAgICAyMTMsIDE0NywgMzYsIDEsIDYxLCAzNiwgMSwgMjU1LCA4MiwgMzYsIDEsIDc0LCAzNiwgMSwgMjM2LCA0MCwgMzYsIDEsIAorICAgIDY5LCAzNiwgMSwgMjE0LCAxMTgsIDM2LCAxLCA3NiwgMzYsIDEsIDI0NSwgMjE3LCAzNiwgMSwgMjU0LCAyMTAsIDM2LCAxLCAKKyAgICA3OCwgMzYsIDEsIDIyNiwgMTg3LCAzNiwgMSwgMjUzLCAyMDAsIDM2LCAxLCAxNzYsIDM2LCAxLCAyMjksIDgyLCAzNiwgMSwgCisgICAgMjUxLCA0MSwgMzYsIDEsIDIzNSwgMTQ3LCAzNiwgMSwgMjI3LCAxNjksIDM2LCAxLCAyMTUsIDE1NywgMzYsIDEsIDIyOCwgCisgICAgMTE1LCAzNiwgMSwgMjE3LCAxMDYsIDM2LCAxLCAxOTgsIDM2LCAxLCAyMjgsIDk3LCAzNiwgMSwgMTkxLCAzNiwgMSwgMTg2LCAKKyAgICAzNiwgMSwgMTkyLCAzNiwgMSwgMjA1LCAzNiwgMSwgMjIyLCAxODEsIDM2LCAxLCAyMzMsIDE0MSwgMzYsIDEsIDIzMiwgCisgICAgMTkwLCAzNiwgMSwgMjMyLCAxODEsIDM2LCAxLCAyMTQsIDI3LCAzNiwgMSwgMjIwLCAxMDQsIDM2LCAxLCAyMTgsIDIyNSwgCisgICAgMzYsIDEsIDIwNiwgMzYsIDEsIDE2MiwgMzYsIDI1LCA1LCAyNTUsIDgyLCAzNiwgMjUsIDUsIDc0LCAzNiwgMjUsIDUsIAorICAgIDIzNiwgNDAsIDM2LCAyNSwgNSwgNjksIDM2LCAyNSwgNSwgMjE0LCAxMTgsIDM2LCAyNSwgNSwgNzYsIDM2LCAyNSwgNSwgCisgICAgMjQ1LCAyMTcsIDM2LCAyNSwgNSwgMjU0LCAyMTAsIDM2LCAyNSwgNSwgNzgsIDM2LCAyNSwgNSwgMjI2LCAxODcsIDM2LCAKKyAgICAyNSwgNSwgMjUzLCAyMDAsIDM2LCA1LCAyMTMsIDE1MiwgMzYsIDIyNiwgMjA4LCAzNiwgMjUzLCAyMDEsIDIzMywgMjksIAorICAgIDc5LCAzNiwgMjEsIDIxMCwgODYsIDM2LCAyMSwgMTExLCAzNiwgMjEsIDEwNSwgMzYsIDIxLCAxNTgsIDM2LCAyMSwgMTYxLCAKKyAgICAzNiwgMjEsIDE5MCwgMzYsIDIxLCAxOTUsIDM2LCAyMSwgMTk5LCAzNiwgMjEsIDE5NiwgMzYsIDIxLCAyMDEsIDM2LCA1NCwgCisgICAgMjE2LCAyNDgsIDM2LCA1NCwgMTIzLCAyNDAsIDIxNywgMzYsIDU0LCAxMjMsIDIxNiwgMTQ4LCAzNiwgMjQ4LCAxNTQsIDUwLCAKKyAgICAzNiwgMjMwLCAxNDAsIDUwLCAzNiwgMjExLCA0NSwgNTAsIDM2LCAyNDgsIDk1LCA1MCwgMzYsIDI0OSwgMTQ3LCA1MCwgMzYsIAorICAgIDI1MywgMjQ2LCA3MiwgNTAsIDM2LCAyMjIsIDEyMCwgNTAsIDM2LCA1NCwgNTAsIDE0OCwgNSwgMjUxLCA3LCAxNDgsIDUsIAorICAgIDI1NCwgODMsIDE0OCwgNSwgMjEzLCAxNDcsIDE0OCwgMSwgNjEsIDE0OCwgMSwgMjU1LCA4MiwgMTQ4LCAxLCA3NCwgMTQ4LCAKKyAgICAxLCAyMzYsIDQwLCAxNDgsIDEsIDY5LCAxNDgsIDEsIDIxNCwgMTE4LCAxNDgsIDEsIDE0OSwgMTUzLCAxNDgsIDEsIDE0OSwgCisgICAgMTU2LCAxNDgsIDEsIDc2LCAxNDgsIDEsIDI0NSwgMjE3LCAxNDgsIDEsIDI1NCwgMjEwLCAxNDgsIDEsIDc4LCAxNDgsIDEsIAorICAgIDIyNiwgMTg3LCAxNDgsIDEsIDI1MywgMjAwLCAxNDgsIDEsIDE3NiwgMTQ4LCAxLCAyMzQsIDEzOCwgMTQ4LCAxLCAyNDMsIAorICAgIDE0MiwgMTQ4LCAxLCAyNDMsIDAsIDE0OCwgMSwgMjI5LCA4MiwgMTQ4LCAxLCAyNTEsIDQxLCAxNDgsIDEsIDI1MCwgMTY1LCAKKyAgICAxNDgsIDEsIDIzNSwgMTQ3LCAxNDgsIDEsIDIzNSwgMTIwLCAxNDgsIDEsIDIyNywgMTY5LCAxNDgsIDEsIDIxNSwgMTU3LCAKKyAgICAxNDgsIDEsIDIxNSwgMTQ1LCAxNDgsIDEsIDI0OCwgMTQzLCAxNDgsIDEsIDI0OCwgMTI3LCAxNDgsIDEsIDIyOCwgMTE1LCAKKyAgICAxNDgsIDEsIDIxNywgMTA2LCAxNDgsIDEsIDIxNiwgMjA5LCAxNDgsIDEsIDI0OCwgMjI5LCAxNDgsIDEsIDI0OCwgMzMsIAorICAgIDE0OCwgMSwgMTk4LCAxNDgsIDEsIDE5MSwgMTQ4LCAxLCAyMjUsIDE1MCwgMTQ4LCAxLCAyNTIsIDE5OSwgMTQ4LCAxLCAKKyAgICAyNTIsIDI2LCAxNDgsIDEsIDE4NiwgMTQ4LCAxLCAxOTIsIDE0OCwgMSwgMjA1LCAxNDgsIDEsIDIyMiwgMTgxLCAxNDgsIDEsIAorICAgIDIzMywgMTQxLCAxNDgsIDEsIDIzMiwgMTkwLCAxNDgsIDEsIDIxNCwgMjcsIDE0OCwgMSwgMjIwLCAxMDQsIDE0OCwgMSwgCisgICAgMjE4LCAyMjUsIDE0OCwgMSwgMjA2LCAxNDgsIDEsIDE2MiwgMTQ4LCA1LCAyNTMsIDE4MywgMTQ4LCAyNSwgNSwgMjU1LCAKKyAgICA4MiwgMTQ4LCAyNSwgNSwgNzQsIDE0OCwgMjUsIDUsIDIzNiwgNDAsIDE0OCwgMjUsIDUsIDY5LCAxNDgsIDI1LCA1LCAyMTQsIAorICAgIDExOCwgMTQ4LCAyNSwgNSwgMTQ5LCAxNTMsIDE0OCwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDE0OCwgMjUsIDUsIDc2LCAKKyAgICAxNDgsIDI1LCA1LCAyNDUsIDIxNywgMTQ4LCAyNSwgNSwgMjU0LCAyMTAsIDE0OCwgMjUsIDUsIDc4LCAxNDgsIDI1LCA1LCAKKyAgICAyMjYsIDE4NywgMTQ4LCAyNSwgNSwgMjUzLCAyMDAsIDE0OCwgNSwgMjEzLCAxNTIsIDE0OCwgMjMzLCAyOSwgNzksIDE0OCwgCisgICAgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNDgsIDEsIDIxNSwgMTg0LCAxNDgsIDEsIDI0NiwgNDYsIDE0OCwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgMTQ4LCAxLCAxNDksIDIzMiwgMTkxLCAxNDgsIDI1LCA1LCAxNDksIDE1NiwgMTQ4LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTQ4LCAyMSwgMjEwLCA4NiwgMTQ4LCAyMSwgMTExLCAxNDgsIDIxLCAxMDUsIDE0OCwgMjEsIDE1OCwgCisgICAgMTQ4LCAyMSwgMTYxLCAxNDgsIDIxLCAxOTAsIDE0OCwgMjEsIDE5NSwgMTQ4LCAyMSwgMTk5LCAxNDgsIDIxLCAxOTYsIAorICAgIDE0OCwgMjEsIDIwMSwgMTQ4LCAyNDQsIDEwLCAyMSwgMjEwLCA4NywgMzEsIDIyNiwgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgCisgICAgMTQ4LCAyNDQsIDEwLCAyMSwgMTIzLCAzMSwgMjI2LCAyNDEsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAKKyAgICAxMTMsIDMxLCAyMjYsIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIDEzNCwgMzEsIDIyNiwgCisgICAgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAyMSwgMTIzLCAzMSwgMjQ1LCA1MCwgMjI0LCAyMjYsIDY0LCAKKyAgICAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIDExMywgMzEsIDI0NSwgNTAsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIAorICAgIDIxLCAxMzQsIDMxLCAyNDUsIDUwLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCA1LCAyMTUsIDg0LCAxNjUsIDUsIDI1NCwgCisgICAgODMsIDE2NSwgNSwgMjEzLCAxNDcsIDE2NSwgMSwgNjEsIDE2NSwgMSwgMjU1LCA4MiwgMTY1LCAxLCA3NCwgMTY1LCAxLCAKKyAgICAyMzYsIDQwLCAxNjUsIDEsIDY5LCAxNjUsIDEsIDIxNCwgMTE4LCAxNjUsIDEsIDE0OSwgMTUzLCAxNjUsIDEsIDE0OSwgCisgICAgMTU2LCAxNjUsIDEsIDc2LCAxNjUsIDEsIDI0NSwgMjE3LCAxNjUsIDEsIDI1NCwgMjEwLCAxNjUsIDEsIDc4LCAxNjUsIDEsIAorICAgIDIyNiwgMTg3LCAxNjUsIDEsIDI1MywgMjAwLCAxNjUsIDEsIDE3NiwgMTY1LCAxLCAyMzQsIDEzOCwgMTY1LCAxLCAyNDMsIAorICAgIDE0MiwgMTY1LCAxLCAyNDMsIDAsIDE2NSwgMSwgMjI5LCA4MiwgMTY1LCAxLCAyNTEsIDQxLCAxNjUsIDEsIDI1MCwgMTY1LCAKKyAgICAxNjUsIDEsIDIzNSwgMTQ3LCAxNjUsIDEsIDIzNSwgMTIwLCAxNjUsIDEsIDIyNywgMTY5LCAxNjUsIDEsIDIxNSwgMTU3LCAKKyAgICAxNjUsIDEsIDIxNSwgMTQ1LCAxNjUsIDEsIDI0OCwgMTQzLCAxNjUsIDEsIDI0OCwgMTI3LCAxNjUsIDEsIDIyOCwgMTE1LCAKKyAgICAxNjUsIDEsIDIxNywgMTA2LCAxNjUsIDEsIDIxNiwgMjA5LCAxNjUsIDEsIDI0OCwgMjI5LCAxNjUsIDEsIDI0OCwgMzMsIAorICAgIDE2NSwgMSwgMTk4LCAxNjUsIDEsIDE5MSwgMTY1LCAxLCAyMjUsIDE1MCwgMTY1LCAxLCAyNTIsIDE5OSwgMTY1LCAxLCAKKyAgICAyNTIsIDI2LCAxNjUsIDEsIDE4NiwgMTY1LCAxLCAxOTIsIDE2NSwgMSwgMjA1LCAxNjUsIDEsIDIyMiwgMTgxLCAxNjUsIDEsIAorICAgIDIzMywgMTQxLCAxNjUsIDEsIDIzMiwgMTkwLCAxNjUsIDEsIDIxNCwgMjcsIDE2NSwgMSwgMjIwLCAxMDQsIDE2NSwgMSwgCisgICAgMjE4LCAyMjUsIDE2NSwgMSwgMjA2LCAxNjUsIDEsIDE2MiwgMTY1LCA1LCAyMjcsIDIwOSwgMTY1LCA1LCAyNTMsIDE4MywgCisgICAgMTY1LCAyNSwgNSwgMjU1LCA4MiwgMTY1LCAyNSwgNSwgNzQsIDE2NSwgMjUsIDUsIDIzNiwgNDAsIDE2NSwgMjUsIDUsIDY5LCAKKyAgICAxNjUsIDI1LCA1LCAyMTQsIDExOCwgMTY1LCAyNSwgNSwgMTQ5LCAxNTMsIDE2NSwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIAorICAgIDE2NSwgMjUsIDUsIDc2LCAxNjUsIDI1LCA1LCAyNDUsIDIxNywgMTY1LCAyNSwgNSwgMjU0LCAyMTAsIDE2NSwgMjUsIDUsIAorICAgIDc4LCAxNjUsIDI1LCA1LCAyMjYsIDE4NywgMTY1LCAyNSwgNSwgMjUzLCAyMDAsIDE2NSwgNSwgMjEzLCAxNTIsIDE2NSwgCisgICAgMjMzLCAyOSwgNzksIDE2NSwgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNjUsIDEsIDI0NCwgMjA0LCAxNjUsIDEsIDE0OSwgCisgICAgMjIyLCAxODIsIDE2NSwgMSwgMTQ5LCAyMzIsIDE5MSwgMTY1LCAyNSwgNSwgMTQ5LCAxNTYsIDE2NSwgMjUsIDUsIDE0OSwgCisgICAgMjMyLCAxOTEsIDE2NSwgMjEsIDIxMCwgODYsIDE2NSwgMjEsIDExMSwgMTY1LCAyMSwgMTA1LCAxNjUsIDIxLCAxNTgsIAorICAgIDE2NSwgMjEsIDE2MSwgMTY1LCAyMSwgMTkwLCAxNjUsIDIxLCAxOTUsIDE2NSwgMjEsIDE5OSwgMTY1LCAyMSwgMTk2LCAKKyAgICAxNjUsIDIxLCAyMDEsIDE2NSwgNSwgMjM1LCAxMDgsIDE2NSwgNSwgMjE0LCAxNjEsIDEzNiwgNSwgMjU0LCA4MywgMTM2LCAKKyAgICA1LCAyMTMsIDE0NywgMTM2LCAxLCA2MSwgMTM2LCAxLCAyNTUsIDgyLCAxMzYsIDEsIDc0LCAxMzYsIDEsIDIzNiwgNDAsIAorICAgIDEzNiwgMSwgNjksIDEzNiwgMSwgMjE0LCAxMTgsIDEzNiwgMSwgMTQ5LCAxNTMsIDEzNiwgMSwgMTQ5LCAxNTYsIDEzNiwgMSwgCisgICAgNzYsIDEzNiwgMSwgMjQ1LCAyMTcsIDEzNiwgMSwgMjU0LCAyMTAsIDEzNiwgMSwgNzgsIDEzNiwgMSwgMjI2LCAxODcsIAorICAgIDEzNiwgMSwgMjUzLCAyMDAsIDEzNiwgMSwgMTc2LCAxMzYsIDEsIDIzNCwgMTM4LCAxMzYsIDEsIDI0MywgMTQyLCAxMzYsIAorICAgIDEsIDI0MywgMCwgMTM2LCAxLCAyMjksIDgyLCAxMzYsIDEsIDI1MSwgNDEsIDEzNiwgMSwgMjUwLCAxNjUsIDEzNiwgMSwgCisgICAgMjM1LCAxNDcsIDEzNiwgMSwgMjM1LCAxMjAsIDEzNiwgMSwgMjI3LCAxNjksIDEzNiwgMSwgMjE1LCAxNTcsIDEzNiwgMSwgCisgICAgMjE1LCAxNDUsIDEzNiwgMSwgMjQ4LCAxNDMsIDEzNiwgMSwgMjQ4LCAxMjcsIDEzNiwgMSwgMjI4LCAxMTUsIDEzNiwgMSwgCisgICAgMjE3LCAxMDYsIDEzNiwgMSwgMjE2LCAyMDksIDEzNiwgMSwgMjQ4LCAyMjksIDEzNiwgMSwgMjQ4LCAzMywgMTM2LCAxLCAKKyAgICAxOTgsIDEzNiwgMSwgMjI4LCA5NywgMTM2LCAxLCAxOTEsIDEzNiwgMSwgMjI1LCAxNTAsIDEzNiwgMSwgMjUyLCAxOTksIAorICAgIDEzNiwgMSwgMjUyLCAyNiwgMTM2LCAxLCAxODYsIDEzNiwgMSwgMTkyLCAxMzYsIDEsIDIwNSwgMTM2LCAxLCAyMjIsIDE4MSwgCisgICAgMTM2LCAxLCAyMzMsIDE0MSwgMTM2LCAxLCAyMzIsIDE5MCwgMTM2LCAxLCAyMzIsIDE4MSwgMTM2LCAxLCAyMTQsIDI3LCAKKyAgICAxMzYsIDEsIDIyMCwgMTA0LCAxMzYsIDEsIDIxOCwgMjI1LCAxMzYsIDEsIDIwNiwgMTM2LCAxLCAxNjIsIDEzNiwgMSwgCisgICAgMjE1LCAxMjYsIDEzNiwgNSwgMjUzLCAxODMsIDEzNiwgMjUsIDUsIDI1NSwgODIsIDEzNiwgMjUsIDUsIDc0LCAxMzYsIDI1LCAKKyAgICA1LCAyMzYsIDQwLCAxMzYsIDI1LCA1LCA2OSwgMTM2LCAyNSwgNSwgMjE0LCAxMTgsIDEzNiwgMjUsIDUsIDE0OSwgMTUzLCAKKyAgICAxMzYsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxMzYsIDI1LCA1LCA3NiwgMTM2LCAyNSwgNSwgMjQ1LCAyMTcsIDEzNiwgMjUsIAorICAgIDUsIDI1NCwgMjEwLCAxMzYsIDI1LCA1LCA3OCwgMTM2LCAyNSwgNSwgMjI2LCAxODcsIDEzNiwgMjUsIDUsIDI1MywgMjAwLCAKKyAgICAxMzYsIDUsIDIxMywgMTUyLCAxMzYsIDEsIDU5LCAyMjMsIDc2LCAxMzYsIDI1MywgMjAxLCAyMzMsIDI5LCA3OSwgMTM2LCAKKyAgICAxLCAxNDksIDIyMiwgMTgyLCAxMzYsIDEsIDE0OSwgMjMyLCAxOTEsIDEzNiwgMjUsIDUsIDE0OSwgMTU2LCAxMzYsIDI1LCAKKyAgICA1LCAxNDksIDIzMiwgMTkxLCAxMzYsIDIxLCAyMTAsIDg2LCAxMzYsIDIxLCAxMTEsIDEzNiwgMjEsIDEwNSwgMTM2LCAyMSwgCisgICAgMTU4LCAxMzYsIDIxLCAxNjEsIDEzNiwgMjEsIDE5MCwgMTM2LCAyMSwgMTk1LCAxMzYsIDIxLCAxOTksIDEzNiwgMjEsIAorICAgIDE5NiwgMTM2LCAyMSwgMjAxLCAxMzYsIDU0LCAyMTYsIDI0OCwgMTM2LCA1NCwgMTIzLCAyNDAsIDIxNywgMTM2LCA1NCwgCisgICAgMTIzLCAyMTYsIDE0OCwgMTM2LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDEzNiwgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCAKKyAgICAxMzYsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMTM2LCAyNDgsIDE1OCwgNzksIDEzNiwgMSwgMjUwLCAxMDcsIDIyOCwgCisgICAgMTE2LCAxMzYsIDEsIDI1MCwgMTA3LCAyMzAsIDMwLCAxMzYsIDEsIDI1MCwgMTA3LCAyMjIsIDE4MiwgMTM2LCAxLCAyNTAsIAorICAgIDEwNywgMTU2LCAxMzYsIDEsIDI1MCwgMTA3LCAyMzIsIDE5MSwgMTM2LCAxLCAyNTAsIDEwNywgMjM1LCAyOSwgMTc1LCA1LCAKKyAgICAyNTQsIDgyLCAxNzUsIDUsIDIxMywgMTQ2LCAxNzUsIDEsIDI1MywgMTczLCAxNzUsIDEsIDI1NSwgMzYsIDE3NSwgMSwgCisgICAgMjU0LCAyMzIsIDE3NSwgMSwgMjU0LCAyNDcsIDE3NSwgMSwgMjM1LCAxNTcsIDE3NSwgMSwgMjM2LCAzOSwgMTc1LCAxLCAKKyAgICAyMTQsIDExMCwgMTc1LCAxLCAyMTQsIDExMiwgMTc1LCAxLCAyMzUsIDE4MCwgMTc1LCAxLCAyMzUsIDE4MSwgMTc1LCAxLCAKKyAgICAyMzYsIDI1LCAxNzUsIDEsIDIzNiwgMjcsIDE3NSwgMSwgMjQ1LCAyNSwgMTc1LCAxLCAyNDUsIDIxMiwgMTc1LCAxLCAyNTQsIAorICAgIDE5NywgMTc1LCAxLCAyMjYsIDExMiwgMTc1LCAxLCAyMjYsIDE4MSwgMTc1LCAxLCAyNTMsIDE4NiwgMTc1LCAxLCAyNTQsIAorICAgIDE1NCwgMjM0LCAxOTMsIDE3NSwgMSwgMjMxLCAyMTQsIDIzNCwgMTkzLCAxNzUsIDEsIDI1NCwgMTU0LCAyNDMsIDg5LCAKKyAgICAxNzUsIDEsIDIzMSwgMjE0LCAyNDMsIDg5LCAxNzUsIDEsIDIzNCwgMjM1LCAyMjksIDIyNywgMTc1LCAxLCAyMjEsIDIzOCwgCisgICAgMjQzLCA4OSwgMTc1LCAxLCAyNTQsIDE1NCwgMjUwLCAyMjQsIDE3NSwgMSwgMjMxLCAyMTQsIDI1MCwgMjI0LCAxNzUsIDEsIAorICAgIDI1NCwgMTU0LCAyMzUsIDEzMywgMTc1LCAxLCAyMzEsIDIxNCwgMjM1LCAxMzMsIDE3NSwgMSwgMjE3LCA5OSwgMjI5LCAKKyAgICAyMjcsIDE3NSwgMSwgMjE3LCA5OSwgMjIxLCAyMzcsIDIyOSwgMjI4LCAxNzUsIDEsIDIyMSwgMjM4LCAyMzUsIDEzMywgCisgICAgMTc1LCAxLCAyNTQsIDE1NCwgMjE1LCAxNTMsIDE3NSwgMSwgMjMxLCAyMTQsIDIxNSwgMTUzLCAxNzUsIDEsIDI1NCwgMTU0LCAKKyAgICAyNDgsIDEzNCwgMTc1LCAxLCAyMzEsIDIxNCwgMjQ4LCAxMzQsIDE3NSwgMSwgMjMwLCA1OCwgMjI5LCAxODUsIDE3NSwgMSwgCisgICAgMjIxLCAyMzgsIDI0OCwgMTM0LCAxNzUsIDEsIDI1NCwgMTU0LCAyMTcsIDMxLCAxNzUsIDEsIDIzMSwgMjE0LCAyMTcsIDMxLCAKKyAgICAxNzUsIDEsIDI1NCwgMTU0LCAyNDgsIDE1MiwgMTc1LCAxLCAyMzEsIDIxNCwgMjQ4LCAxNTIsIDE3NSwgMSwgMjQ4LCAxODIsIAorICAgIDIyOSwgMTg1LCAxNzUsIDEsIDIyMSwgMjM4LCAyNDgsIDE1MiwgMTc1LCAxLCAyNTQsIDE1NCwgMjI1LCAyMzIsIDE3NSwgMSwgCisgICAgMjMxLCAyMTQsIDIyNSwgMjMyLCAxNzUsIDEsIDI1NCwgMTU0LCAyNTIsIDEyMCwgMTc1LCAxLCAyMzEsIDIxNCwgMjUyLCAKKyAgICAxMjAsIDE3NSwgMSwgMjMxLCAxMzYsIDE3NSwgMSwgMjU0LCAxMzksIDI1MiwgMTIwLCAxNzUsIDEsIDIxMSwgNTEsIDE3NSwgCisgICAgMSwgMjIzLCAxMzYsIDE3NSwgMSwgMjQ4LCAxODIsIDIzMywgNzMsIDE3NSwgMSwgMjE0LCAxLCAxNzUsIDEsIDIxNywgOTksIAorICAgIDIyMSwgMjEyLCAxNzUsIDEsIDIzMCwgNTgsIDIyMSwgMjEyLCAxNzUsIDEsIDI0OCwgMTgyLCAyMjEsIDIxMiwgMTc1LCAxLCAKKyAgICAyNDEsIDI0OSwgMTc1LCAxLCAyMzAsIDU4LCAyMzMsIDczLCAxNzUsIDEsIDI0NCwgMTY0LCAxNzUsIDUsIDI1NCwgMTg2LCAKKyAgICAxNzUsIDI1LCA1LCAyNTQsIDI0MiwgMTc1LCAyNSwgNSwgMjM0LCAxNjEsIDI1NCwgMjQ5LCAxNzUsIDI1LCA1LCAyNDcsIAorICAgIDIzNiwgMjU0LCAyNDksIDE3NSwgMjUsIDUsIDIzNCwgMTYxLCAyMzUsIDE3NywgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDIzNSwgCisgICAgMTc3LCAxNzUsIDI1LCA1LCAyMzQsIDE2MSwgMjI2LCA5MiwgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDIyNiwgOTIsIDE3NSwgCisgICAgMjUsIDUsIDI0MywgMTMxLCAxNzUsIDI1LCA1LCAyMzQsIDIxLCAxNzUsIDI1LCA1LCAyNDcsIDIzNiwgMjM0LCAyMSwgMTc1LCAKKyAgICAyNSwgNSwgMjM0LCAyMywgMjQ4LCA3NSwgMTc1LCAyNSwgNSwgMjM0LCAyMiwgMjQyLCA1NCwgMjU0LCAyNDIsIDE3NSwgMjUsIAorICAgIDUsIDIzNCwgMjIsIDI0MiwgNTQsIDI0NywgMjM2LCAyNTQsIDI0MiwgMTc1LCAyNSwgNSwgMjM0LCAyMiwgMjQyLCA1NCwgCisgICAgMjQzLCA4OCwgMTc1LCAyNSwgNSwgMjQzLCA4OCwgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDI0MywgMTMxLCAxNzUsIDI1LCA1LCAKKyAgICAyNDcsIDIzNiwgMjQzLCA4OCwgMTc1LCAyMjQsIDE0NCwgMjMzLCAyMTMsIDE2OCwgMTM1LCAyMzQsIDM1LCAyMzQsIDI1MiwgCisgICAgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEzNCwgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEwNSwgMTY4LCAxMzUsIAorICAgIDIzNCwgMTEyLCAyMzQsIDEwMSwgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEwOSwgMTY4LCAxMzUsIDIzNCwgMTEyLCAKKyAgICAyMjMsIDE1NywgMTY4LCAxMzUsIDIyOSwgMTAsIDIyOCwgMjUzLCAxNjgsIDEzNSwgMjUwLCA5NSwgMjUwLCAxNTUsIDE2OCwgCisgICAgMTM1LCAyNTAsIDk1LCAyNTAsIDEwMywgMTY4LCAxMzUsIDI1MCwgOTUsIDI1MCwgMTU0LCAxNjgsIDEzNSwgMjE5LCA2MSwgCisgICAgMjE5LCA2MCwgMTY4LCAxMzUsIDI1MCwgOTUsIDI1MCwgOTEsIDE2OCwgMTM1LCAyMTAsIDI0NSwgMjEwLCAyNTIsIDE2OCwgCisgICAgMTM1LCAyNDcsIDE1NCwgMjUwLCAxNjIsIDE2OCwgMTM1LCAyMTYsIDQzLCAyMjUsIDI0MiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAKKyAgICAyMTYsIDIwMSwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMjksIDIwNiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMjUsIDExNCwgCisgICAgMTY4LCAxMzUsIDIyOCwgODAsIDIyOSwgMTAzLCAxNjgsIDEzNSwgMjQ3LCAxNTQsIDI0OCwgNzYsIDE2OCwgMTM1LCAyMTYsIAorICAgIDQzLCAyMTcsIDU2LCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMTMyLCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMjA1LCAKKyAgICAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMTU1LCAxNjgsIDEzNSwgMjI4LCA4MCwgMjI3LCAyNDIsIDE2OCwgMTM1LCAyNTEsIAorICAgIDIxNCwgMjUyLCAxNzIsIDE2OCwgMTM1LCAyMjUsIDIwLCAyMjUsIDQ1LCAxNjgsIDEzNSwgMjI1LCAxMjUsIDIyNSwgMTE2LCAKKyAgICAxNjgsIDEzNSwgMjQ0LCA1MiwgMjQ0LCAyMDQsIDE2OCwgMTM1LCAyMjUsIDEyNSwgMjI1LCAxNDQsIDE2OCwgMTM1LCAyNDQsIAorICAgIDUyLCAyNDQsIDE4MSwgMTY4LCAxMzUsIDIyNSwgMTI1LCAyMjEsIDI0OSwgMTY4LCAxMzUsIDIzMCwgMTY3LCAxODYsIDE2OCwgCisgICAgMTM1LCAyMTAsIDI0NSwgMjExLCA3OSwgMTY4LCAxMzUsIDIyMiwgMjE0LCAyMjIsIDE0MSwgMTY4LCAxMzUsIDIyMiwgMTQyLCAKKyAgICAxNjgsIDEzNSwgMjMyLCAxNjMsIDIzMiwgMjEyLCAxNjgsIDEzNSwgMjMyLCAxMDMsIDE2OCwgMTM1LCAyMTEsIDIyOCwgCisgICAgMjEyLCA2MSwgMTY4LCAxMzUsIDIxOSwgNjEsIDIyMiwgOCwgMTY4LCAxMzUsIDIxOSwgNjEsIDIyMiwgMTE2LCAxNjgsIAorICAgIDEzNSwgMjE5LCA2MSwgMjE4LCA4MywgMTY4LCAxMzUsIDI0MSwgNzYsIDI0MSwgMTY2LCAxNjgsIDEzNSwgMjMyLCAxNjMsIAorICAgIDI1MCwgNzYsIDE2OCwgMTM1LCAxNDQsIDI1NCwgMTIzLCAxNjgsIDEzNSwgMjQxLCA3NiwgMjI4LCA3NSwgMTY4LCAxMzUsIAorICAgIDIyNiwgNzIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNjEsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjQyLCAyNCwgMTY4LCAxMzUsIAorICAgIDIyMSwgMjMyLCAyNTUsIDgyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDI1NCwgMTQ0LCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc0LCAKKyAgICAxNjgsIDEzNSwgMjIxLCAyMzIsIDIzNiwgNDAsIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjE0LCAyMTQsIDE2OCwgMTM1LCAyMjEsIAorICAgIDIzMiwgMjE0LCAyMTIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNjksIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjE0LCAxMTgsIDE2OCwgCisgICAgMTM1LCAyMjUsIDEyNywgMTY4LCAyNDksIDEwNiwgMTYsIDI1MiwgMTczLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc2LCAxNjgsIAorICAgIDEzNSwgMjIxLCAyMzIsIDI1NCwgMjUyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc4LCAxNjgsIDEzNSwgMjIxLCAyMzIsIDI1NCwgCisgICAgMjExLCAyMzEsIDIwMywgMTY4LCAxMzUsIDIyMSwgMjMyLCAyNTQsIDIxMSwgMjMxLCAyMDQsIDE2OCwgMTM1LCAyMzMsIAorICAgIDExMiwgMTY4LCAxMzUsIDIzMSwgMjAwLCAxNjgsIDEzNSwgMjMxLCAyMDEsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjQ1LCAKKyAgICAxODgsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjE2LCAxNTcsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjE1LCAyMjksIDE2OCwgCisgICAgMTM1LCAyMzEsIDIwOSwgMjUwLCAxNDMsIDE2OCwgMTM1LCAyMTYsIDE5OSwgMTY4LCAxMzUsIDIyOCwgMjEwLCAxNjgsIAorICAgIDEzNSwgMjExLCA3MywgMTY4LCAxMzUsIDI0NCwgNDMsIDE2OCwgMjEsIDIxMCwgODYsIDE2OCwgMjEsIDExMSwgMTY4LCAyMSwgCisgICAgMTA1LCAxNjgsIDIxLCAxNTgsIDE2OCwgMjEsIDE2MSwgMTY4LCAyMSwgMTkwLCAxNjgsIDIxLCAxOTUsIDE2OCwgMjEsIAorICAgIDE5OSwgMTY4LCAyMSwgMTk2LCAxNjgsIDIxLCAyMDEsIDE2OCwgMTM1LCAyNTQsIDExOSwgMTY4LCAxMzUsIDIzNCwgMTEwLCAKKyAgICAyMDksIDIwOSwgMSwgMjM0LCAzNCwgMjA5LCAyMDksIDEsIDIzNCwgMTEyLCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjM0LCAKKyAgICAxMTIsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAyMjksIDksIDIwOSwgMjA5LCAxLCAyNDksIDI0NiwgMjA5LCAyMDksIDEsIAorICAgIDIxOSwgNjEsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAyMjcsIDEzOCwgMjA5LCAyMDksIDEsIDI0NywgMTUzLCAyMDksIDIwOSwgCisgICAgMSwgMTEyLCAyMDksIDIwOSwgMSwgMjE2LCAxNTgsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyMTYsIDE1OCwgMjE3LCA2MywgCisgICAgMjA5LCAyMDksIDEsIDIyOCwgNzksIDIwOSwgMjA5LCAxLCAyNTEsIDIxMywgMjA5LCAyMDksIDEsIDIyNSwgMTksIDIwOSwgCisgICAgMjA5LCAxLCAyMjUsIDEyNSwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDI0NCwgNTIsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAKKyAgICAyMjUsIDEyNSwgMjE3LCA2MywgMjA5LCAyMDksIDEsIDI0NCwgNTIsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyMzAsIDE2NiwgCisgICAgMjA5LCAyMDksIDEsIDIxMCwgMjQ0LCAyMDksIDIwOSwgMSwgMjMyLCAxNjMsIDIzMiwgMjEyLCAyMDksIDIwOSwgMSwgMjMyLCAKKyAgICAxNjMsIDIzMiwgMTI3LCAyMDksIDIwOSwgMSwgMjExLCAyMjcsIDIwOSwgMjA5LCAxLCAyMTksIDYxLCAyMTgsIDM2LCAyMDksIAorICAgIDIwOSwgMSwgMjQxLCA3NiwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDc4LCAyMDksIDIwOSwgMSwgMjQxLCA3NiwgMjE3LCA2MywgCisgICAgMjA5LCAyMDksIDI0NSwgMTcxLCAyMDksIDIwOSwgMjUsIDUsIDYxLCAyMDksIDIwOSwgMjUsIDUsIDIzMSwgMjA5LCAyMzQsIAorICAgIDI0MCwgMjA5LCAyMDksIDI1LCA1LCAyNTUsIDgyLCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMTQ0LCAyMDksIDIwOSwgMjUsIAorICAgIDUsIDc0LCAyMDksIDIwOSwgMjUsIDUsIDIzNiwgNDAsIDIwOSwgMjA5LCAyNSwgNSwgMjExLCAxMTcsIDIwOSwgMjA5LCAyNSwgCisgICAgNSwgMjEwLCAxNjksIDIwOSwgMjA5LCAyNSwgNSwgNjksIDIwOSwgMjA5LCAyNSwgNSwgMjE0LCAxMTgsIDIwOSwgMjA5LCAKKyAgICAyNSwgNSwgMjMxLCAyMDksIDIzNCwgMTksIDIwOSwgMjA5LCAyMjAsIDE0NywgNSwgMjMyLCAxNjIsIDIwOSwgMjA5LCAyMjAsIAorICAgIDE0NywgNSwgMjI3LCAxMzgsIDIwOSwgMjA5LCAyNSwgNSwgNzYsIDIwOSwgMjA5LCAyNSwgNSwgMjQ1LCAyMDMsIDIwOSwgCisgICAgMjA5LCAyNSwgNSwgNzgsIDIwOSwgMjA5LCAyNSwgNSwgMjUzLCAxNzUsIDIwOSwgMjA5LCAyNSwgNSwgMjU0LCAyMTAsIAorICAgIDIwOSwgMjA5LCAyMzQsIDM1LCAyMzMsIDE0MSwgMjA5LCAyMDksIDEzOCwgMjMxLCAyMDksIDI0NSwgMTg4LCAyMDksIDIwOSwgCisgICAgMTM4LCAyMzEsIDIwOSwgMjE2LCAxNTcsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA5LCAyMTYsIDExOCwgMjA5LCAyMDksIAorICAgIDEzOCwgMjMxLCAyMDksIDI1MCwgMjMxLCAyMDksIDIwOSwgMjUxLCAxMiwgNzksIDIwOSwgMjA5LCAyMjgsIDIxOSwgMjA5LCAKKyAgICAyMDksIDIxLCAyMTAsIDg2LCAyMDksIDIwOSwgMjEsIDExMSwgMjA5LCAyMDksIDIxLCAxMDUsIDIwOSwgMjA5LCAyMSwgCisgICAgMTU4LCAyMDksIDIwOSwgMjEsIDE2MSwgMjA5LCAyMDksIDIxLCAxOTAsIDIwOSwgMjA5LCAyMSwgMTk1LCAyMDksIDIwOSwgCisgICAgMjEsIDE5OSwgMjA5LCAyMDksIDIxLCAxOTYsIDIwOSwgMjA5LCAyMSwgMjAxLCAyMDksIDIwOSwgMjQxLCA3NiwgMjI4LCAKKyAgICA3OSwgMjA5LCAyMDksIDI0MSwgNzYsIDIzMCwgMTY2LCAyMDksIDIwOSwgMSwgMjM0LCAxMTMsIDI0MiwgMTgxLCAyMDksIAorICAgIDIwOSwgMSwgMjM0LCAxMTMsIDIyNywgMTM4LCA2MywgMywgMjI2LCAyMDgsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTEsIDAsIAorICAgIDIzMCwgMjUzLCAyMTUsIDE5MCwgNjEsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTEsIDAsIDIzMCwgMjUzLCAyNTUsIDE2OCwgCisgICAgMjIyLCAyMTgsIDI1MiwgODUsIDE4NiwgNjMsIDE2NCwgMjQyLCAxMjIsIDIxMSwgMCwgMjMwLCAyNTMsIDI1NSwgMTY4LCAKKyAgICAyNDIsIDEyMiwgMjE1LCAxNzQsIDE4NiwgNjMsIDE2NCwgNjUsIDIxMSwgMCwgMjMwLCAyNTMsIDIzMSwgOTgsIDE4NiwgNjMsIAorICAgIDE2NCwgMjUwLCA0LCAyMTEsIDAsIDIzMCwgMjUzLCAyMjAsIDExMSwgMTg2LCA2MywgMTY0LCAyNTAsIDI0NywgMjExLCAwLCAKKyAgICAyMzAsIDI1MywgMjI1LCAxMTUsIDIyMCwgOTgsIDE4NiwgNjMsIDE2NCwgMjExLCAwLCAyMzAsIDI1MywgMjE1LCAxNzQsIAorICAgIDIyMCwgOTgsIDE4NiwgNjMsIDE2NCwgMjIxLCAyMTAsIDIyMCwgOTcsIDYzLCAxNjQsIDI1MSwgMTM2LCAyMTEsIDAsIDIzMCwgCisgICAgMjUyLCA2MywgMTY0LCAyNTEsIDIzMSwgMjIwLCA1LCAyMTEsIDAsIDIzMCwgMjUyLCA2MywgMTY0LCAyMzUsIDIwNCwgMjE1LCAKKyAgICAxNzMsIDYzLCAxNjQsIDI0OCwgNjksIDIxNSwgMTc0LCAyNTEsIDEzNSwgNjMsIDE2NCwgMjIwLCA5NywgNjMsIDE2NCwgCisgICAgMjI3LCAxNDMsIDIyMCwgOTcsIDYzLCAxNjQsIDIxNSwgMTc0LCAyMjAsIDk3LCA2MywgMTY0LCAyMjcsIDE0MywgMjE1LCAKKyAgICAxNzQsIDIyMCwgOTcsIDYzLCAxNjQsIDIyMiwgMjM5LCAyNTAsIDEzMCwgMjE4LCAyMzgsIDIyMCwgOTcsIDYzLCAxNjQsIAorICAgIDIyMywgNDUsIDI0MiwgMTUzLCAyMjAsIDk3LCA2MywgMTY0LCAyNTAsIDI0NywgMjU1LCAxNzIsIDIyMiwgMTQ2LCAyMzEsIAorICAgIDk3LCAyMDAsIDI1MSwgMTUsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTUsIDE3MywgNjMsIDIzMiwgMTUwLCA1LCAyNTAsIDE2MywgCisgICAgMjIyLCAxNDUsIDYzLCAyMzIsIDE1MCwgNSwgMjMzLCAyLCAyMjIsIDE0NSwgNjMsIDI1MywgMjIwLCA1LCAyMjAsIDEwNywgCisgICAgMjQzLCA3MiwgMjU1LCAxNzMsIDIyMiwgMTQ1LCA2MywgMjUzLCAyMjAsIDUsIDI1NSwgMTcwLCAxOTEsIDYzLCAyNTMsIAorICAgIDIyMCwgNSwgMjIxLCAxODQsIDIxNSwgMTY5LCA2MywgNSwgMjIzLCAxMzMsIDI0NywgMTY3LCAyNDMsIDcxLCA2MywgNSwgCisgICAgMjIzLCAxMzMsIDI0NywgMTY3LCAyNDIsIDE4MywgNjMsIDUsIDIyMywgMTMzLCAyNDcsIDE2NywgMjQyLCAxMjMsIDYzLCA1LCAKKyAgICAyMjMsIDEzMywgMjI5LCAyMjQsIDI0MywgNzEsIDYzLCA1LCAyMjMsIDEzMywgMjI5LCAyMjQsIDI0MiwgMTgzLCA2MywgNSwgCisgICAgMjIzLCAxMzMsIDI0NywgMTY3LCAyMjMsIDEzMywgMjI5LCAyMjMsIDYzLCAyMSwgMjEwLCA4NiwgNjMsIDIxLCAxMTEsIDYzLCAKKyAgICAyMSwgMTA1LCA2MywgMjEsIDE1OCwgNjMsIDIxLCAxNjEsIDYzLCAyMSwgMTkwLCA2MywgMjEsIDE5NSwgNjMsIDIxLCAxOTksIAorICAgIDYzLCAyMSwgMTk2LCA2MywgMjEsIDIwMSwgNjMsIDIxLCAxNjMsIDExMSwgNjMsIDIxLCAxNjMsIDEwNSwgNjMsIDIxLCAKKyAgICAxNjMsIDE1OCwgNjMsIDIxLCAxNjMsIDE2MSwgNjMsIDIxLCAxNjMsIDE5MCwgNjMsIDIxLCAxNjMsIDE5NSwgNjMsIDIxLCAKKyAgICAxNjMsIDE5OSwgNjMsIDIxLCAxNjMsIDE5NiwgNjMsIDIxLCAxNjMsIDIwMSwgNjMsIDIxLCAxNjMsIDIxMCwgODYsIDYzLCAKKyAgICAxNjQsIDI1MSwgMTM4LCAyMjIsIDE0NSwgNjMsIDE2NCwgMjI5LCA3MywgMjUxLCA3NiwgMjI3LCAxNTMsIDIxMCwgMjUsIAorICAgIDYzLCAxNjQsIDI1MCwgMjQ3LCAyNTUsIDE3MiwgMjIyLCAxNDYsIDI1MSwgNzcsIDIzMCwgMjA3LCAyNTEsIDE1LCA2MywgCisgICAgMTY0LCAyMjksIDczLCAyNTEsIDc2LCAyMjAsIDEwOCwgMjIyLCAxNDUsIDYzLCAxNjQsIDI1MCwgMTQwLCAyMzAsIDI1MiwgCisgICAgNjMsIDE2NCwgMjE1LCAxODUsIDI1NSwgMTY5LCA2MywgMTY0LCAyNDIsIDEwNywgMjIyLCAxNDYsIDI0MiwgNzAsIDYzLCAKKyAgICAxNjQsIDI0MiwgMTA3LCAyMjIsIDE0NiwgMjQyLCA3NiwgNjMsIDE2NCwgMjU0LCAxMjQsIDIzNCwgMTI5LCAyNDIsIDcwLCAKKyAgICA2MywgMTY0LCAyNTQsIDEyNCwgMjM0LCAxMjksIDI0MiwgNzYsIDYzLCA1LCAyMTEsIDY1LCAyMTUsIDE3MiwgNjMsIDUsIAorICAgIDIzMSwgMTcyLCAyMTUsIDE3MiwgNjMsIDEsIDE3NiwgNjMsIDEsIDIzNCwgMTM4LCA2MywgMSwgMjQzLCAxNDIsIDYzLCAxLCAKKyAgICAyNDMsIDAsIDYzLCAxLCAyMjksIDgyLCA2MywgMSwgMjUxLCA0MSwgNjMsIDEsIDI1MCwgMTY1LCA2MywgMSwgMjM1LCAxNDcsIAorICAgIDYzLCAxLCAyMjcsIDE2OSwgNjMsIDEsIDIxNSwgMTU3LCA2MywgMSwgMjE1LCAxNDUsIDYzLCAxLCAyNDgsIDE0MywgNjMsIAorICAgIDEsIDI0OCwgMTI3LCA2MywgMSwgMjI4LCAxMTUsIDYzLCAxLCAyMTcsIDEwNiwgNjMsIDEsIDIxNiwgMjA5LCA2MywgMSwgCisgICAgMjQ4LCAyMjksIDYzLCAxLCAyNDgsIDMzLCA2MywgMSwgMTk4LCA2MywgMSwgMTkxLCA2MywgMSwgMjI1LCAxNTAsIDYzLCAxLCAKKyAgICAyNTIsIDE5OSwgNjMsIDEsIDI1MiwgMjYsIDYzLCAxLCAxODYsIDYzLCAxLCAyMTUsIDE4NCwgNjMsIDEsIDIxNSwgMTc2LCAKKyAgICA2MywgMSwgMjQ2LCA0NiwgNjMsIDEsIDI0NiwgNDEsIDYzLCAxLCAyMTIsIDY1LCA2MywgMSwgMjEwLCA4MiwgNjMsIDEsIAorICAgIDIxMCwgMTE2LCA2MywgMSwgMjU1LCAxNzUsIDYzLCAxLCAxOTIsIDYzLCAxLCAyMDUsIDYzLCAxLCAyMzMsIDE0MSwgNjMsIAorICAgIDEsIDIyMCwgMTA0LCA2MywgMSwgMjE4LCAyMjUsIDYzLCAxLCAyMDYsIDYzLCAxLCAxNjIsIDYzLCAxLCA2MSwgNjMsIDEsIAorICAgIDIzMywgMjM3LCA2MywgMSwgMjQ0LCA4NSwgMjA1LCA2MywgMSwgMjM0LCA1MiwgNjMsIDEsIDIyMiwgMTgxLCA2MywgMjUsIAorICAgIDUsIDI1NSwgODIsIDYzLCAyNSwgNSwgNzQsIDYzLCAyNSwgNSwgMjM2LCA0MCwgNjMsIDI1LCA1LCA2OSwgNjMsIDI1LCA1LCAKKyAgICAyMTQsIDExOCwgNjMsIDI1LCA1LCAxNDksIDE1MywgNjMsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA2MywgMjUsIDUsIDE0OSwgCisgICAgMTU2LCA2MywgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDYzLCAyNSwgNSwgNzYsIDYzLCAyNSwgNSwgMjQ1LCAyMTcsIDYzLCAKKyAgICAyNSwgNSwgNzgsIDYzLCAyNSwgNSwgMjI2LCAxODcsIDYzLCA1LCAyMjIsIDIyNCwgMjE4LCA4NSwgMjI5LCA4MywgMjIyLCAKKyAgICAyMTMsIDYzLCA1LCAyMjIsIDIxOCwgMjUyLCA4NCwgNjMsIDI1LCA1LCAyMjMsIDUyLCA3NCwgNjMsIDI1LCA1LCAyMjMsIAorICAgIDUyLCAyMzYsIDQwLCA2MywgNSwgMjI3LCAxNTMsIDIxMCwgMjYsIDIyOSwgMjMxLCAyNDgsIDIyOSwgNjMsIDUsIDIxOSwgCisgICAgNzMsIDIzMywgNjYsIDYzLCAxNjQsIDI0MiwgMzYsIDYzLCAxNjQsIDIyNiwgNjEsIDYzLCA1LCAyMzMsIDY5LCAyMjIsIAorICAgIDE0NSwgNjMsIDUsIDIxMSwgNzAsIDIyMiwgMTQ1LCA2MywgNSwgMjMzLCA3MCwgMjE1LCAxODUsIDI1MSwgMTUsIDYzLCA1LCAKKyAgICAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDUsIDI0MiwgMTI2LCAyNTEsIDE2LCAyMjMsIDQzLCA2MywgNSwgMjQyLCAxMjYsIAorICAgIDIzMSwgOTAsIDIyMywgNDMsIDYzLCA1LCAyMzUsIDIwMCwgMjMxLCAxMDAsIDI1MSwgMTUsIDYzLCAyMTgsIDc0LCA1LCAKKyAgICAyMzMsIDcwLCAyMTUsIDE4NSwgMjUxLCAxNSwgNjMsIDIxOCwgNzQsIDUsIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgMjE4LCAKKyAgICA3NCwgNSwgMjM1LCAyMDAsIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgMjE4LCA3NCwgMSwgMTc2LCA2MywgMjE4LCA3NCwgMSwgCisgICAgMjM0LCAxMzgsIDYzLCAyMTgsIDc0LCAxLCAyNDMsIDE0MiwgNjMsIDIxOCwgNzQsIDEsIDI0MywgMCwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIyOSwgODIsIDYzLCAyMTgsIDc0LCAxLCAyNTEsIDQxLCA2MywgMjE4LCA3NCwgMSwgMjUwLCAxNjUsIDYzLCAyMTgsIAorICAgIDc0LCAxLCAyMzUsIDE0NywgNjMsIDIxOCwgNzQsIDEsIDIyNywgMTY5LCA2MywgMjE4LCA3NCwgMSwgMjE1LCAxNTcsIDYzLCAKKyAgICAyMTgsIDc0LCAxLCAyMTUsIDE0NSwgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMTQzLCA2MywgMjE4LCA3NCwgMSwgMjQ4LCAxMjcsIAorICAgIDYzLCAyMTgsIDc0LCAxLCAyMjgsIDExNSwgNjMsIDIxOCwgNzQsIDEsIDIxNywgMTA2LCA2MywgMjE4LCA3NCwgMSwgMjE2LCAKKyAgICAyMDksIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDIyOSwgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMzMsIDYzLCAyMTgsIDc0LCAxLCAKKyAgICAxOTgsIDYzLCAyMTgsIDc0LCAxLCAxOTEsIDYzLCAyMTgsIDc0LCAxLCAyMjUsIDE1MCwgNjMsIDIxOCwgNzQsIDEsIDI1MiwgCisgICAgMTk5LCA2MywgMjE4LCA3NCwgMSwgMjUyLCAyNiwgNjMsIDIxOCwgNzQsIDEsIDE4NiwgNjMsIDIxOCwgNzQsIDEsIDIxNSwgCisgICAgMTg0LCA2MywgMjE4LCA3NCwgMSwgMjE1LCAxNzYsIDYzLCAyMTgsIDc0LCAxLCAyNDYsIDQ2LCA2MywgMjE4LCA3NCwgMSwgCisgICAgMjQ2LCA0MSwgNjMsIDIxOCwgNzQsIDEsIDIxMiwgNjUsIDYzLCAyMTgsIDc0LCAxLCAyMTAsIDgyLCA2MywgMjE4LCA3NCwgCisgICAgMSwgMjEwLCAxMTYsIDYzLCAyMTgsIDc0LCAxLCAyNTUsIDE3NSwgNjMsIDIxOCwgNzQsIDEsIDE5MiwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIwNSwgNjMsIDIxOCwgNzQsIDEsIDIzMywgMTQxLCA2MywgMjE4LCA3NCwgMSwgMjIwLCAxMDQsIDYzLCAyMTgsIDc0LCAKKyAgICAxLCAyMTgsIDIyNSwgNjMsIDIxOCwgNzQsIDEsIDIwNiwgNjMsIDIxOCwgNzQsIDEsIDE2MiwgNjMsIDIxOCwgNzQsIDEsIAorICAgIDYxLCA2MywgMjE4LCA3NCwgMSwgMjMzLCAyMzcsIDYzLCAyMTgsIDc0LCAxLCAyNDQsIDg1LCAyMTIsIDY1LCA2MywgMjE4LCAKKyAgICA3NCwgMSwgMjQ0LCA4NSwgMTkyLCA2MywgMjE4LCA3NCwgMSwgMjQ0LCA4NSwgMjA1LCA2MywgMjMzLCAyMjQsIDIyMiwgCisgICAgMTQzLCAyMzQsIDEzOCwgNjMsIDIzMywgMjI0LCAyMjIsIDE0MywgMjM0LCAxMzksIDI1MSwgNzcsIDIzMCwgMjA3LCAyNTEsIAorICAgIDE1LCA2MywgMjUxLCA0LCA1LCAxMTQsIDI1MiwgNzgsIDYzLCAyNTEsIDQsIDUsIDE5MywgMjUyLCA3OCwgNjMsIDI1MSwgNCwgCisgICAgNSwgMjUxLCA1LCAyMTcsIDIxLCA2MywgMjUxLCA0LCA1LCAyMjEsIDIwOSwgMjU1LCAxNzQsIDYzLCAxNiwgMjQ2LCA5OSwgCisgICAgMjUxLCAxMzMsIDYzLCAxNiwgMjIzLCAxMzIsIDIyMiwgMjI1LCA2MywgMTYsIDIyNiwgODEsIDI0MywgNzAsIDYzLCAxNiwgCisgICAgMjIzLCAxMzIsIDIyMiwgMjI2LCAyMjMsIDQ1LCAyNDIsIDE1MiwgNjMsIDE2LCAyMjUsIDExNSwgMTkxLCA2MywgMTYsIAorICAgIDIyOCwgNjQsIDI1MSwgMTMzLCA2MywgMTYsIDIyOCwgNjQsIDI1MSwgMTM0LCAyMjcsIDE0MywgMjU1LCAxNzEsIDYzLCAxNiwgCisgICAgMjI4LCA2NCwgMjUxLCAxMzQsIDI0MiwgMTI0LCAyNTUsIDE3MSwgNjMsIDE2LCAyMjgsIDY0LCAyNTEsIDEzNCwgMjUxLCAKKyAgICA3NywgMjU1LCAxNzEsIDYzLCA1LCAyMjMsIDEzMywgMjI5LCAyMjQsIDIyMywgMTMzLCAyNDcsIDE2NiwgNjMsIDUsIDIyMywgCisgICAgMTMzLCAyMjksIDIyNCwgMjQyLCAxMjMsIDYzLCAxNjQsIDI1MSwgMTM3LCAyMjAsIDUsIDI0MiwgMjIyLCAyMzAsIDI1MywgCisgICAgMjIzLCA0NCwgNjMsIDE2NCwgMjMwLCAxNjgsIDIxMSwgMCwgMjQyLCAyMjIsIDIzMCwgMjUzLCAyMjMsIDQ0LCA2MywgMTY0LCAKKyAgICAyMjcsIDE0MywgMjE1LCAxNzMsIDYzLCAxNjQsIDY1LCAyNTEsIDE2MCwgMjIyLCAyMTUsIDIxMSwgMCwgMjMwLCAyNTMsIAorICAgIDIzMSwgOTgsIDE4NiwgNjMsIDE2NCwgMjUwLCA0LCAyNTEsIDE2MCwgMjIyLCAyMTUsIDIxMSwgMCwgMjMwLCAyNTMsIDIyMCwgCisgICAgMTExLCAxODYsIDIyMiwgMjUzLCAyMTgsIDAsIDUwLCAyMzMsIDUxLCAyMTgsIDAsIDUwLCAyMjIsIDI1MywgMjE4LCAwLCA1LCAKKyAgICAyLCAyNDcsIDEyNiwgMjMzLCA1MSwgMjE4LCAwLCA1LCAyLCAyNDcsIDEyNiwgNjMsIDE2NCwgMjMzLCA2MSwgMjMxLCAxMDEsIAorICAgIDIyMiwgMTQ1LCA2MywgMTY0LCAyMTUsIDI1MSwgMjMxLCAxMDEsIDIyMiwgMTQ1LCA2OCwgMSwgMTc2LCA2OCwgMSwgMjM0LCAKKyAgICAxMzgsIDY4LCAxLCAyNDMsIDE0MiwgNjgsIDEsIDI0MywgMCwgNjgsIDEsIDIyOSwgODIsIDY4LCAxLCAyNTEsIDQxLCA2OCwgCisgICAgMSwgMjUwLCAxNjUsIDY4LCAxLCAyMzUsIDE0NywgNjgsIDEsIDIzNSwgMTIwLCA2OCwgMSwgMjI3LCAxNjksIDY4LCAxLCAKKyAgICAyMjgsIDgxLCA2OCwgMSwgMjE1LCAxNTcsIDY4LCAxLCAyMTUsIDE0NSwgNjgsIDEsIDI0OCwgMTQzLCA2OCwgMSwgMjQ4LCAKKyAgICAxMjcsIDY4LCAxLCAyMjgsIDExNSwgNjgsIDEsIDIxNywgMTA2LCA2OCwgMSwgMjE2LCAyMDksIDY4LCAxLCAyNDgsIDIyOSwgCisgICAgNjgsIDEsIDI0OCwgMzMsIDY4LCAxLCAxOTgsIDY4LCAxLCAxOTEsIDY4LCAxLCAyMjUsIDE1MCwgNjgsIDEsIDI1MiwgMTk5LCAKKyAgICA2OCwgMSwgMjUyLCAyNiwgNjgsIDEsIDE4NiwgNjgsIDEsIDE5MiwgNjgsIDEsIDIwNSwgNjgsIDEsIDIzMywgMTQxLCA2OCwgCisgICAgMSwgMjEyLCA2NSwgNjgsIDEsIDIwNiwgNjgsIDEsIDE2MiwgNjgsIDEsIDIzMiwgMTkwLCA2OCwgMSwgNjEsIDY4LCAxLCAKKyAgICAyMjAsIDg4LCA2MSwgNjgsIDEsIDc0LCA2OCwgMSwgMjM2LCA0MCwgNjgsIDEsIDY5LCA2OCwgMSwgMjE0LCAxMTgsIDY4LCAKKyAgICAxLCA3NiwgNjgsIDEsIDIzMCwgMTU2LCA3NiwgNjgsIDEsIDc4LCA2OCwgMSwgMjUzLCAyMDAsIDY4LCAyNSwgNSwgMjE3LCAKKyAgICA2NSwgMjU1LCA4MiwgNjgsIDI1LCA1LCAyNTUsIDgyLCA2OCwgMjUsIDUsIDc0LCA2OCwgMjUsIDUsIDIzNiwgNDAsIDY4LCAKKyAgICAyNSwgNSwgNjksIDY4LCAyNSwgNSwgMjE0LCAxMTgsIDY4LCAyNSwgNSwgNzYsIDY4LCAyNSwgNSwgMjU0LCAyMTAsIDY4LCAKKyAgICAyNSwgNSwgMjMwLCAxNTYsIDIzNiwgNDAsIDY4LCAyNSwgNSwgMjMwLCAxNTYsIDc4LCA2OCwgMjUsIDUsIDE2MCwgNDgsIAorICAgIDY4LCA1LCAyNTQsIDgzLCA2OCwgNSwgNTksIDUxLCA2OCwgNSwgMjEzLCAxNDcsIDY4LCA1LCAyMTMsIDE1MiwgNjgsIDUsIAorICAgIDI1MywgMjQzLCA2OCwgMTE3LCA1LCAxNDcsIDE5MiwgNjgsIDExNywgNSwgMTQ3LCAyMDUsIDY4LCAxMTcsIDUsIDE0NywgCisgICAgMjEyLCA2NSwgNjgsIDExNywgNSwgMTQ3LCAxNjIsIDY4LCAxLCAyNDIsIDEzOSwgMjA2LCA2OCwgMjEsIDIxMCwgODYsIDY4LCAKKyAgICAyMSwgMTExLCA2OCwgMjEsIDEwNSwgNjgsIDIxLCAxNTgsIDY4LCAyMSwgMTYxLCA2OCwgMjEsIDE5MCwgNjgsIDIxLCAxOTUsIAorICAgIDY4LCAyMSwgMTk5LCA2OCwgMjEsIDE5NiwgNjgsIDIxLCAyMDEsIDY4LCA1LCAyMzIsIDE5OCwgMjIxLCAxNzQsIDY4LCA1LCAKKyAgICAyMjEsIDE3NCwgNjgsIDE2LCAyMzIsIDE1OSwgNjgsIDE2LCAyNDksIDIyMSwgNjgsIDE2LCAyNTQsIDIyOSwgNjgsIDE2LCAKKyAgICAyNDMsIDU1LCA2OCwgMSwgMjIwLCAxMDQsIDY4LCAxLCAyMTgsIDIyNSwgNjgsIDEsIDE0OSwgMTUzLCA2OCwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgNjgsIDEsIDE0OSwgMTU2LCA2OCwgMSwgMTQ5LCAyMzIsIDE5MSwgNjgsIDI1LCA1LCAxNDksIDE1MywgNjgsIAorICAgIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA2OCwgMjUsIDUsIDE0OSwgMTU2LCA2OCwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDY4LCAKKyAgICAxLCAyMzAsIDE1NiwgMjI5LCA4MiwgNjgsIDEsIDIzMCwgMTU2LCAyMzUsIDEyMCwgNjgsIDEsIDIzMCwgMTU2LCAyNTIsIAorICAgIDExOSwgNjgsIDEsIDIzMCwgMTU2LCAyNTIsIDExNCwgNjgsIDExNywgNSwgMjMwLCAxNTYsIDE0NywgMTk4LCA2OCwgMTE3LCAKKyAgICA1LCAyMzAsIDE1NiwgMTQ3LCAxODYsIDY4LCAxMTcsIDUsIDIzMCwgMTU2LCAxNDcsIDIzMywgMTQxLCA2OCwgMSwgMjIwLCAKKyAgICAxMTAsIDIzNCwgMjE5LCAyMjAsIDEwNCwgNjgsIDI1LCA1LCAyMjAsIDExMCwgMjM0LCAyMTksIDI0NSwgNjMsIDY4LCAxMzgsIAorICAgIDE2NCwgMjIwLCAxMTAsIDIzNCwgMjE5LCAyNDEsIDI1NCwgNjgsIDEzOCwgMTY0LCAyMjAsIDExMCwgMjM0LCAyMTksIDIzNCwgCisgICAgMTg5LCAyMjUsIDEyNCwgNjgsIDEsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDIwOSwgNjgsIDEsIDIxMiwgCisgICAgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMjQsIDExNywgNjgsIDI1LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgCisgICAgMjQ1LCA2MywgNjgsIDI1LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE0LCAyMTQsIDY4LCA1LCAyMTIsIDcsIAorICAgIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAzMCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDI5LCAKKyAgICA2OCwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMjgsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIAorICAgIDIxOSwgMjE2LCAyNywgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDI2LCA2OCwgMSwgMjQ1LCAKKyAgICAyMjcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjI4LCAxMTUsIDY4LCAxLCAyNDUsIDIyNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAKKyAgICAyMTAsIDE3NiwgNjgsIDEsIDI0NSwgMjI3LCAyMjQsIDExMSwgMjM0LCAyMTksIDI0MiwgMjI0LCA2OCwgMjUsIDUsIDI0MywgCisgICAgNjYsIDIzNCwgMjE5LCA3NCwgNjgsIDI1LCA1LCAyMzQsIDE5NCwgMjI2LCAyMzgsIDY4LCAyNSwgNSwgMjM0LCAxOTQsIDY5LCAKKyAgICA2OCwgMjUsIDUsIDIzNCwgMTk0LCAyNDUsIDIxNywgNjgsIDEsIDIyMCwgODgsIDE3NiwgNjgsIDEsIDIyMCwgODgsIDIzNCwgCisgICAgMTM4LCA2OCwgMSwgMjIwLCA4OCwgMjQzLCAxNDIsIDY4LCAxLCAyMjAsIDg4LCAyNTEsIDQxLCA2OCwgMSwgMjIwLCA4OCwgCisgICAgMjEwLCAxMTYsIDY4LCAxLCAyMjAsIDg4LCAyMjcsIDE2OSwgNjgsIDEsIDIyMCwgODgsIDI0OCwgMjI5LCA2OCwgMSwgMjIwLCAKKyAgICA4OCwgMTk4LCA2OCwgMSwgMjIwLCA4OCwgMjI1LCAxNTAsIDY4LCAxLCAyMjAsIDg4LCAyNDQsIDIwNCwgNjgsIDEsIDIyMCwgCisgICAgODgsIDI1MiwgMTk5LCA2OCwgMSwgMjIwLCA4OCwgMjE2LCAyMDksIDY4LCAxLCAyMjAsIDg4LCAxNjIsIDY4LCAxMTcsIDUsIAorICAgIDIyMCwgODgsIDE0NywgMjEyLCA2NSwgNjgsIDI1LCA1LCAyMjAsIDg4LCAyNTUsIDgyLCA2OCwgMjUsIDUsIDIyMCwgODgsIAorICAgIDc2LCA2OCwgMjUsIDUsIDIyMCwgODgsIDE2MCwgNDgsIDY4LCAyNSwgNSwgMjIwLCA4OCwgNDAsIDIxMSwgMTE3LCA2OCwgNSwgCisgICAgMjIwLCA4OCwgMjE2LCAyOSwgNjgsIDUsIDIyMCwgODgsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg4LCAyMTYsIDI2LCA2OCwgCisgICAgNSwgMjIwLCA4OCwgMjE2LCAyNSwgNjgsIDUsIDIyMCwgODgsIDI0OSwgMTYwLCAyMTYsIDI5LCA2OCwgNSwgMjIwLCA4OCwgCisgICAgMjQ5LCAxNjAsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg4LCAyNDksIDE2MCwgMjQ1LCAxNjEsIDIxNiwgMzEsIDY4LCAxLCAKKyAgICAyMjIsIDEzMCwgMjI2LCA2NywgMjQ0LCAyMDQsIDY4LCA1LCAyMjIsIDEzMCwgMjI2LCA2NywgMjE2LCAyNiwgNjgsIDIyMCwgCisgICAgODgsIDIxLCAyMTAsIDg2LCA2OCwgMjIwLCA4OCwgMjEsIDExMSwgNjgsIDIyMCwgODgsIDIxLCAxMDUsIDY4LCAyMjAsIDg4LCAKKyAgICAyMSwgMTU4LCA2OCwgMjIwLCA4OCwgMjEsIDE2MSwgNjgsIDIyMCwgODgsIDIxLCAxOTAsIDY4LCAyMjAsIDg4LCAyMSwgCisgICAgMTk1LCA2OCwgMjIwLCA4OCwgMjEsIDE5OSwgNjgsIDIyMCwgODgsIDIxLCAxOTYsIDY4LCAyMjAsIDg4LCAyMSwgMjAxLCAKKyAgICA2OCwgNSwgMjM0LCAxMzIsIDIxNiwgMzAsIDY4LCA1LCAyMzQsIDEzMiwgMjE2LCAyOCwgNjgsIDI1LCA1LCAyNTQsIDE5OSwgCisgICAgNjEsIDY4LCAyNSwgNSwgMjU0LCAxOTksIDI1NCwgMjEwLCA2OCwgMTYsIDIyMCwgODgsIDExMSwgNjgsIDE2LCAyMjAsIDg4LCAKKyAgICAyNDUsIDM4LCA5OCwgNiwgMSwgMjU0LCAxMzEsIDk4LCA2LCAxLCAyNTIsIDE2MCwgOTgsIDYsIDEsIDI0MywgMTEzLCA5OCwgCisgICAgNiwgMSwgMjQ3LCAxMzYsIDk4LCA2LCAxLCAyNDUsIDE1OCwgOTgsIDYsIDEsIDIxMywgMTYwLCA5OCwgNiwgMSwgMjEwLCAKKyAgICA4OSwgOTgsIDYsIDEsIDIxNywgNjEsIDk4LCA2LCAxLCAyMzYsIDYsIDk4LCA2LCAxLCAyMzQsIDI0MCwgOTgsIDYsIDEsIAorICAgIDIzMywgODcsIDk4LCA2LCAxLCAyMzEsIDE5MCwgOTgsIDYsIDEsIDIyOSwgMjAwLCA5OCwgNiwgMSwgMjI2LCAyMDAsIDk4LCAKKyAgICA2LCAxLCAyMjYsIDIxLCA5OCwgNiwgMSwgMjEwLCA3OCwgOTgsIDYsIDEsIDIyMywgMTc0LCA5OCwgNiwgMSwgMjIxLCAyNDUsIAorICAgIDk4LCA2LCAxLCAyMTcsIDUxLCA5OCwgNiwgMSwgMjE0LCAxOTAsIDk4LCA2LCAxLCAyMjUsIDE0MywgOTgsIDYsIDEsIDIzNCwgCisgICAgMTI3LCA5OCwgNiwgMSwgMjQyLCAyNDgsIDk4LCA2LCAxLCAyMjQsIDc2LCA5OCwgNiwgMSwgMjIwLCAyMiwgOTgsIDYsIDEsIAorICAgIDI1MCwgMTA1LCA5OCwgNiwgMSwgMjUxLCAxNSwgOTgsIDYsIDEsIDIzNSwgMTA2LCA5OCwgNiwgMSwgMjUwLCA0OCwgOTgsIAorICAgIDYsIDEsIDI1MCwgMTUxLCA5OCwgNiwgMSwgMjExLCAxNjMsIDk4LCA2LCAxLCAyMzUsIDExNywgOTgsIDYsIDEsIDI0MiwgCisgICAgNTAsIDk4LCA2LCAxLCAyNDEsIDI0NSwgOTgsIDYsIDEsIDI0MSwgMTgyLCA5OCwgNiwgMSwgMjEyLCAyMiwgOTgsIDYsIDEsIAorICAgIDI0MiwgMTEsIDk4LCA2LCAxLCAyNDEsIDcyLCA5OCwgNiwgMSwgMjEwLCAyNDYsIDk4LCA2LCAxLCAyNTQsIDI0MSwgOTgsIAorICAgIDEsIDI1NCwgMTMxLCA5OCwgMSwgMjUyLCAxNjAsIDk4LCAxLCAyNDMsIDExMywgOTgsIDEsIDI0NywgMTM2LCA5OCwgMSwgCisgICAgMjQ1LCAxNTgsIDk4LCAxLCAyMTMsIDE2MCwgOTgsIDEsIDIxMCwgODksIDk4LCAxLCAyMTcsIDYxLCA5OCwgMSwgMjM2LCA2LCAKKyAgICA5OCwgMSwgMjM0LCAyNDAsIDk4LCAxLCAyMzMsIDg3LCA5OCwgMSwgMjMxLCAxOTAsIDk4LCAxLCAyMjksIDIwMCwgOTgsIDEsIAorICAgIDIyNiwgMjAwLCA5OCwgMSwgMjI2LCAyMSwgOTgsIDEsIDIxMCwgNzgsIDk4LCAxLCAyMjMsIDE3NCwgOTgsIDEsIDIyMSwgCisgICAgMjQ1LCA5OCwgMSwgMjE3LCA1MSwgOTgsIDEsIDIxNCwgMTkwLCA5OCwgMSwgMjI1LCAxNDMsIDk4LCAxLCAyMzQsIDEyNywgCisgICAgOTgsIDEsIDI0MiwgMjQ4LCA5OCwgMSwgMjI0LCA3NiwgOTgsIDEsIDIyMCwgMjIsIDk4LCAxLCAyNTAsIDEwNSwgOTgsIDEsIAorICAgIDI1MSwgMTUsIDk4LCAxLCAyMzUsIDEwNiwgOTgsIDEsIDI1MCwgNDgsIDk4LCAxLCAyNTAsIDE1MSwgOTgsIDEsIDIxMSwgCisgICAgMTYzLCA5OCwgMSwgMjM1LCAxMTcsIDk4LCAxLCAyNDIsIDUwLCA5OCwgMSwgMjQxLCAyNDUsIDk4LCAxLCAyNDEsIDE4MiwgCisgICAgOTgsIDEsIDIxMiwgMjIsIDk4LCAxLCAyNDIsIDExLCA5OCwgMSwgMjQxLCA3MiwgOTgsIDEsIDI0NCwgMTI5LCA5OCwgMSwgCisgICAgMjEwLCAyNDYsIDk4LCAxLCAyNDUsIDE3MywgOTgsIDEsIDIxNSwgOTQsIDI0MywgMTEzLCA5OCwgMSwgMjU0LCAyMDUsIDk4LCAKKyAgICAyMjYsIDE5LCAyMjAsIDEzOSwgNTgsIDEsIDk4LCAyMjksIDIwMCwgOTgsIDEsIDI1NCwgMjQxLCA5OCwgMSwgMjQyLCAxMCwgCisgICAgNTAsIDk4LCAxLCAyMzMsIDEzMywgNTAsIDI0LCAxMDAsIDIzNCwgNjQsIDI0LCAxMDAsIDIxOCwgMjE3LCAyNCwgMTAwLCAKKyAgICAyMjgsIDIzMSwgMjQsIDEwMCwgMjE2LCAxMDIsIDI0LCAxMDAsIDIxOCwgMjA2LCAyNCwgMTAwLCAyMjMsIDI5LCAyNCwgCisgICAgMTAwLCAyMzAsIDIyMiwgMjQsIDEwMCwgMjI1LCA5OCwgMjQsIDEwMCwgMjE4LCAyMTQsIDI0LCAxMDAsIDIxOSwgMTUwLCAKKyAgICAyNCwgMTAwLCAyMTgsIDIxMSwgMjQsIDEwMCwgMjM2LCA2MywgMjQsIDEwMCwgMjUwLCA1NCwgMjQsIDEwMCwgMjE4LCAyMjEsIAorICAgIDI0LCAxMDAsIDI1MCwgMTE0LCAyNCwgMTAwLCAyMzQsIDExNiwgMjQsIDEwMCwgMjE2LCAxNzQsIDI0LCAxMDAsIDIyNSwgCisgICAgMTM0LCAyNCwgMTAwLCAyNDEsIDE3OSwgMjQsIDEwMCwgMjI4LCAyMjcsIDI0LCAxMDAsIDIxOCwgMjE1LCAyNCwgMTAwLCAKKyAgICAyMjgsIDIyMSwgMjQsIDEwMCwgMjI4LCAyMjUsIDI0LCAxMDAsIDIxNiwgOTksIDI0LCAxMDAsIDIyMywgMTcsIDI0LCAxMDAsIAorICAgIDIxOCwgMjEzLCAyNCwgMTAwLCAyMjMsIDI3LCAyNCwgMTAwLCAyMzQsIDIyNCwgMjQsIDEwMCwgMjMwLCAyMTUsIDI0LCAKKyAgICAxMDAsIDIzNCwgMjI3LCAyNCwgMTAwLCAyMjUsIDkzLCAyNCwgMTAwLCAyMjUsIDkxLCAyNCwgMTAwLCAyMjUsIDc5LCAyNCwgCisgICAgMTAwLCAyMjUsIDg3LCAyNCwgMTAwLCAyMjUsIDg1LCAyNCwgMTAwLCAyMjUsIDgyLCAyNCwgMTAwLCAyMjUsIDg0LCAyNCwgCisgICAgMTAwLCAyMjUsIDgxLCAyNCwgMTAwLCAyMjUsIDg2LCAyNCwgMTAwLCAyMjUsIDk2LCAyNCwgMTAwLCAyMjUsIDk3LCAyNCwgCisgICAgMTAwLCAyMjUsIDgwLCAyNCwgMTAwLCAyMjUsIDkwLCAyNCwgMTAwLCAyMzQsIDIyNSwgMjQsIDEwMCwgMjM0LCAyMjMsIDI0LCAKKyAgICAxMDAsIDIxOSwgMTQzLCAyNCwgMTAwLCAyMTksIDE0MSwgMjQsIDEwMCwgMjE5LCAxMzMsIDI0LCAxMDAsIDIxOSwgMTM2LCAKKyAgICAyNCwgMTAwLCAyMTksIDE0MiwgMjQsIDEwMCwgMjE5LCAxMzgsIDI0LCAxMDAsIDIxOSwgMTM3LCAyNCwgMTAwLCAyMTksIAorICAgIDEzNSwgMjQsIDEwMCwgMjE5LCAxNDYsIDI0LCAxMDAsIDIxOSwgMTQ4LCAyNCwgMTAwLCAyMTksIDE0OSwgMjQsIDEwMCwgCisgICAgMjE5LCAxNDQsIDI0LCAxMDAsIDIxOSwgMTM0LCAyNCwgMTAwLCAyMTksIDEzOSwgMjQsIDEwMCwgMjE5LCAxNDcsIDI0LCAKKyAgICAxMDAsIDI1MCwgOTgsIDI0LCAxMDAsIDI1MCwgOTYsIDI0LCAxMDAsIDI1MCwgMTc2LCAyNCwgMTAwLCAyNTAsIDE3NCwgMjQsIAorICAgIDEwMCwgMjI2LCAzNiwgMjQsIDEwMCwgMjM2LCA1OCwgMjQsIDEwMCwgMjM2LCA0OSwgMjQsIDEwMCwgMjM2LCA1NywgMjQsIAorICAgIDEwMCwgMjM2LCA1NCwgMjQsIDEwMCwgMjM2LCA1MiwgMjQsIDEwMCwgMjM2LCA1NiwgMjQsIDEwMCwgMjE4LCAyMTgsIDI0LCAKKyAgICAxMDAsIDIzNiwgNjEsIDI0LCAxMDAsIDIzNiwgNjIsIDI0LCAxMDAsIDIzNiwgNTAsIDI0LCAxMDAsIDIzNiwgNTUsIDI0LCAKKyAgICAxMDAsIDIxMSwgMjYsIDI0LCAxMDAsIDI1MCwgNTMsIDI0LCAxMDAsIDI1MCwgOTksIDI0LCAxMDAsIDI1MCwgOTcsIDI0LCAKKyAgICAxMDAsIDI1MCwgMTc3LCAyNCwgMTAwLCAyNTAsIDE3NSwgMjQsIDEwMCwgMjUwLCAxMTIsIDI0LCAxMDAsIDI1MCwgMTEzLCAKKyAgICAyNCwgMTAwLCAyNTAsIDEwMCwgMjQsIDEwMCwgMjUwLCAxNzgsIDI0LCAxMDAsIDIyNSwgMTMyLCAyNCwgMTAwLCAyMzQsIAorICAgIDIyNiwgMjQsIDEwMCwgMjE4LCAyMTksIDI0LCAxMDAsIDIxMSwgMzIsIDI0LCAxMDAsIDIzNCwgNTUsIDI0LCAxMDAsIDIyOCwgCisgICAgMjIzLCAyNCwgMTAwLCAyMjgsIDIyOSwgMjQsIDEwMCwgMjI4LCAyMjgsIDI0LCAxMDAsIDIxNiwgOTYsIDI0LCAxMDAsIAorICAgIDI0NCwgMTExLCAyNCwgMTQzLCAyNDQsIDExMSwgMjQsIDE0MywgNjEsIDI0LCAxNDMsIDI1NCwgMjUyLCAyNCwgMTQzLCAKKyAgICAxOTIsIDI0LCAxNDMsIDIxMSwgOTIsIDI0LCAxNDMsIDI0NSwgMTI1LCAyNCwgMTQzLCA3NiwgMjQsIDE0MywgMjExLCAzNiwgCisgICAgMjQsIDE0MywgMjExLCA0NywgMjQsIDE0MywgNzgsIDI0LCAxNDMsIDIxMiwgNjUsIDI0LCAxNDMsIDIxMiwgNjIsIDI0LCAKKyAgICAxNDMsIDIyNiwgMjM4LCAyNCwgMTQzLCAyMTAsIDI0NCwgMjQsIDE0MywgNjksIDI0LCAxNDMsIDIxMiwgMTEsIDI0LCAxNDMsIAorICAgIDIxMiwgMjIsIDI0LCAxNDMsIDIxMSwgMjUwLCAyNCwgMTQzLCAyMTAsIDIxMiwgMjQsIDE0MywgMjQ1LCA2MywgMjQsIDE0MywgCisgICAgMjExLCA4LCAyNCwgMTQzLCA3NCwgMjQsIDE0MywgMjU1LCAxNjYsIDI0LCAxNDMsIDI1NSwgMTY1LCAyNCwgMTQzLCAyMTEsIAorICAgIDEwNiwgMjQsIDE0MywgMjExLCAxMDQsIDI0LCAxNDMsIDI0NSwgMTIzLCAyNCwgMTQzLCAyNDUsIDEyMiwgMjQsIDE0MywgCisgICAgMjQ1LCAxMjQsIDI0LCAxNDMsIDIxMSwgMzUsIDI0LCAxNDMsIDIxMSwgMzQsIDI0LCAxNDMsIDIyNywgODgsIDI0LCAxNDMsIAorICAgIDIyNywgODksIDI0LCAxNDMsIDIyNywgODIsIDI0LCAxNDMsIDIyNywgODcsIDI0LCAxNDMsIDIyNywgODUsIDI0LCAxNDMsIAorICAgIDIxMCwgMjM4LCAyNCwgMTQzLCAyMTAsIDIzNywgMjQsIDE0MywgMjEwLCAyMzYsIDI0LCAxNDMsIDIxMCwgMjM5LCAyNCwgCisgICAgMTQzLCAyMTAsIDI0MCwgMjQsIDE0MywgMjE1LCAzMCwgMjQsIDE0MywgMjE1LCAyOSwgMjQsIDE0MywgMjE1LCAyNywgMjQsIAorICAgIDE0MywgMjE1LCAyNCwgMjQsIDE0MywgMjE1LCAyNSwgMjQsIDE0MywgMjEwLCAyMTEsIDI0LCAxNDMsIDIxMCwgMjA4LCAyNCwgCisgICAgMTQzLCAyMTAsIDIwOSwgMjQsIDE0MywgMjEwLCAyMDMsIDI0LCAxNDMsIDIxMCwgMjA0LCAyNCwgMTQzLCAyMTAsIDIwNSwgCisgICAgMjQsIDE0MywgMjEwLCAyMDcsIDI0LCAxNDMsIDI0NSwgNTcsIDI0LCAxNDMsIDI0NSwgNTksIDI0LCAxNDMsIDIxMSwgNywgCisgICAgMjQsIDE0MywgMjQwLCAxNjAsIDI0LCAxNDMsIDI0MCwgMTUyLCAyNCwgMTQzLCAyNDAsIDE1NSwgMjQsIDE0MywgMjQwLCAKKyAgICAxNTMsIDI0LCAxNDMsIDI0MCwgMTU3LCAyNCwgMTQzLCAyNDAsIDE1OSwgMjQsIDE0MywgMjU0LCA0MiwgMjQsIDE0MywgCisgICAgMjU0LCAzOSwgMjQsIDE0MywgMjU0LCAzNywgMjQsIDE0MywgMjU0LCAzOCwgMjQsIDE0MywgMjE4LCAyMjIsIDI0LCAxNDMsIAorICAgIDI1NSwgMTY3LCAyNCwgMTQzLCAyMTEsIDEwNSwgMjQsIDE0MywgMjExLCAzMywgMjQsIDE0MywgMjI3LCA4NCwgMjQsIDE0MywgCisgICAgMjI3LCA4MywgMjQsIDkwLCAyMzQsIDY0LCAyNCwgOTAsIDIxOCwgMjE3LCAyNCwgOTAsIDIzNCwgNTcsIDI0LCA5MCwgMjI4LCAKKyAgICAyMzEsIDI0LCA5MCwgMjI4LCAyMjksIDI0LCA5MCwgMjI4LCAyMjgsIDI0LCA5MCwgMjE2LCAxMDIsIDI0LCA5MCwgMjIzLCAKKyAgICAyOSwgMjQsIDkwLCAyMjMsIDI0LCAyNCwgOTAsIDIyMywgMjEsIDI0LCA5MCwgMjIzLCAxNCwgMjQsIDkwLCAyMjMsIDksIAorICAgIDI0LCA5MCwgMjIzLCA0LCAyNCwgOTAsIDIyMywgMTUsIDI0LCA5MCwgMjIzLCAyNywgMjQsIDkwLCAyMzAsIDIyMiwgMjQsIAorICAgIDkwLCAyMjUsIDk4LCAyNCwgOTAsIDIyNSwgODcsIDI0LCA5MCwgMjE5LCAxNTAsIDI0LCA5MCwgMjE4LCAyMTEsIDI0LCA5MCwgCisgICAgMjM2LCA2MywgMjQsIDkwLCAyNTAsIDU0LCAyNCwgOTAsIDI1MCwgMTE0LCAyNCwgOTAsIDIzNCwgMTE2LCAyNCwgOTAsIAorICAgIDIxNiwgMTc0LCAyNCwgOTAsIDIyNSwgMTM0LCAyNCwgOTAsIDI0MSwgMTc5LCAyNCwgOTAsIDIzNCwgNTgsIDI0LCA5MCwgCisgICAgMjM0LCA1NiwgMjQsIDkwLCAyMjgsIDIyNywgMjQsIDkwLCAyMjgsIDIyMSwgMjQsIDkwLCAyMjgsIDIyMywgMjQsIDkwLCAKKyAgICAyMjgsIDIyNiwgMjQsIDkwLCAyMjgsIDIyMiwgMjQsIDkwLCAyMTYsIDk5LCAyNCwgOTAsIDIxNiwgOTYsIDI0LCA5MCwgCisgICAgMjIzLCAyMiwgMjQsIDkwLCAyMjMsIDE3LCAyNCwgOTAsIDIyMywgMywgMjQsIDkwLCAyMjMsIDIsIDI0LCA5MCwgMjE4LCAKKyAgICAyMTMsIDI0LCA5MCwgMjIzLCAxOSwgMjQsIDkwLCAyMjMsIDE4LCAyNCwgOTAsIDIyMywgMTEsIDI0LCA5MCwgMjIzLCAxMywgCisgICAgMjQsIDkwLCAyMjMsIDI2LCAyNCwgOTAsIDIyMywgNiwgMjQsIDkwLCAyMjMsIDE2LCAyNCwgOTAsIDIyMywgMjUsIDI0LCAKKyAgICA5MCwgMjIzLCAxLCAyNCwgOTAsIDIzMCwgMjE4LCAyNCwgOTAsIDIzMCwgMjEzLCAyNCwgOTAsIDIzMCwgMjE1LCAyNCwgOTAsIAorICAgIDIzMCwgMjEyLCAyNCwgOTAsIDIzMCwgMjEwLCAyNCwgOTAsIDIzMCwgMjE2LCAyNCwgOTAsIDIzMCwgMjIxLCAyNCwgOTAsIAorICAgIDIzMCwgMjE5LCAyNCwgOTAsIDIzNCwgMjI3LCAyNCwgOTAsIDIyNSwgODksIDI0LCA5MCwgMjI1LCA5MCwgMjQsIDkwLCAKKyAgICAyMjUsIDk1LCAyNCwgOTAsIDIzNCwgMjI1LCAyNCwgOTAsIDIxOSwgMTQzLCAyNCwgOTAsIDIxOSwgMTMzLCAyNCwgOTAsIAorICAgIDIxOSwgMTM2LCAyNCwgOTAsIDIxOSwgMTM4LCAyNCwgOTAsIDIyNiwgMzYsIDI0LCA5MCwgMjM2LCA1OCwgMjQsIDkwLCAKKyAgICAyMzYsIDUxLCAyNCwgOTAsIDIxOCwgMjE4LCAyNCwgOTAsIDIzNiwgNTksIDI0LCA5MCwgMjExLCAyNiwgMjQsIDkwLCAyMTEsIAorICAgIDIyLCAyNCwgOTAsIDIxMSwgMjMsIDI0LCA5MCwgMjI1LCAxMzIsIDI0LCA5MCwgMjM0LCAyMjYsIDI0LCA5MCwgMjQxLCAKKyAgICAxNzcsIDI0LCA5MCwgMjQxLCAxNzUsIDI0LCA5MCwgMjQxLCAxNzgsIDI0LCA5MCwgMjQxLCAxNzYsIDI0LCA5MCwgMjExLCAKKyAgICAzMiwgMjQsIDkwLCAyMzQsIDYwLCAyNCwgOTAsIDIzNCwgNTksIDI0LCA5MCwgMjM0LCA2MywgMjQsIDkwLCAyMzQsIDYxLCAKKyAgICAyNCwgOTAsIDIzNCwgNjIsIDI0LCA5MCwgMjE4LCAyMTUsIDI5LCAzLCAxNjIsIDI5LCAzLCAyNDAsIDIyOSwgMjksIDMsIAorICAgIDI0MSwgMTg3LCAyOSwgMywgMjQyLCA1MywgMjksIDMsIDI0MSwgMjI3LCAyOSwgMywgMjQxLCAyNDUsIDI5LCAzLCAyNDEsIAorICAgIDc1LCAyOSwgMywgMjQxLCA3NCwgMjksIDMsIDIzMywgMTQxLCAyOSwgMywgMjMyLCAxMDMsIDI5LCAzLCAyMzIsIDI0NywgCisgICAgMjksIDMsIDIzMywgMTQwLCAyOSwgMywgMjMzLCA1NiwgMjksIDMsIDIzMywgNjQsIDI5LCAzLCAyMzIsIDE2MiwgMjksIDMsIAorICAgIDIzMiwgNzUsIDI5LCAzLCAyNDEsIDE5NiwgMjksIDMsIDI0MSwgMTkwLCAyOSwgMywgMjQxLCAxOTIsIDI5LCAzLCAyNDEsIAorICAgIDE5NSwgMjksIDMsIDI0MSwgMTkzLCAyOSwgMywgMjQxLCAxOTQsIDI5LCAzLCAyNDEsIDE5MSwgMjksIDMsIDI0MSwgMTg5LCAKKyAgICAyOSwgMywgMTg2LCAyOSwgMywgMjMwLCAxMDcsIDI5LCAzLCAyMzAsIDIzNSwgMjksIDMsIDIzMSwgMjQyLCAyOSwgMywgCisgICAgMjMxLCA4NSwgMjksIDMsIDIzMSwgOTYsIDI5LCAzLCAyMzAsIDE2NiwgMjksIDMsIDIzMCwgNDcsIDI5LCAzLCAyMTcsIAorICAgIDE2NCwgMjksIDMsIDIxNywgMTU4LCAyOSwgMywgMjE3LCAxNjAsIDI5LCAzLCAyMTcsIDE2MywgMjksIDMsIDIxNywgMTYxLCAKKyAgICAyOSwgMywgMjE3LCAxNjIsIDI5LCAzLCAyMTcsIDE1OSwgMjksIDMsIDIxNywgMTU3LCAyOSwgMywgMjA1LCAyOSwgMywgCisgICAgMjIyLCAxNDIsIDI5LCAzLCAyMjMsIDM4LCAyOSwgMywgMjIzLCAxODcsIDI5LCAzLCAyMjMsIDExMSwgMjksIDMsIDIyMywgCisgICAgMTMxLCAyOSwgMywgMjIyLCAyMTMsIDI5LCAzLCAyMjIsIDExMSwgMjksIDMsIDIwNiwgMjksIDMsIDIxOCwgODQsIDI5LCAzLCAKKyAgICAyMTksIDE5MywgMjksIDMsIDIyMiwgMzMsIDI5LCAzLCAyMjEsIDE3MiwgMjksIDMsIDIyMSwgMTgzLCAyOSwgMywgMjE5LCAKKyAgICA2MCwgMjksIDMsIDIxNywgMjU0LCAyOSwgMywgMjIwLCAxMDQsIDI5LCAzLCAyMTksIDIyNywgMjksIDMsIDIyMCwgMzQsIAorICAgIDI5LCAzLCAyMjAsIDEwMCwgMjksIDMsIDIyMCwgNjMsIDI5LCAzLCAyMjAsIDY1LCAyOSwgMywgMjIwLCA5LCAyOSwgMywgCisgICAgMjE5LCAyMTAsIDI5LCAzLCAyMjQsIDkxLCAyOSwgMywgMjI0LCAzMywgMjksIDMsIDIyNCwgNTYsIDI5LCAzLCAyMjQsIDkwLCAKKyAgICAyOSwgMywgMjI0LCA3MSwgMjksIDMsIDIyNCwgNzIsIDI5LCAzLCAyMjQsIDQ1LCAyOSwgMywgMjI0LCA0NCwgMjksIDMsIAorICAgIDIyMywgMjQ1LCAyOSwgMywgMjIzLCAyNDEsIDI5LCAzLCAyMjMsIDI0NCwgMjksIDMsIDIyMywgMjQyLCAyOSwgMywgMjIzLCAKKyAgICAyNDMsIDI5LCAzLCAyMjQsIDY4LCAyOSwgMywgMjI0LCA2MiwgMjksIDMsIDIyNCwgNjQsIDI5LCAzLCAyMjQsIDY3LCAyOSwgCisgICAgMywgMjI0LCA2NSwgMjksIDMsIDIyNCwgNjYsIDI5LCAzLCAyMjQsIDYzLCAyOSwgMywgMjI0LCA2MSwgMjksIDMsIDIyNCwgCisgICAgNTcsIDI5LCAzLCAyMjQsIDYwLCAyOSwgMywgMjI0LCA1OCwgMjksIDMsIDIyNCwgNTksIDI5LCAzLCAyNTIsIDE5OSwgMjksIAorICAgIDMsIDI1MSwgMTMzLCAyOSwgMywgMjUyLCAxNCwgMjksIDMsIDI1MiwgMTk3LCAyOSwgMywgMjUyLCA3NCwgMjksIDMsIDI1MiwgCisgICAgODMsIDI5LCAzLCAyNTEsIDIxMywgMjksIDMsIDI1MSwgOTEsIDI5LCAzLCAyMTQsIDI3LCAyOSwgMywgMjEyLCAxMTYsIDI5LCAKKyAgICAzLCAyMTMsIDE3NiwgMjksIDMsIDIxNCwgMjYsIDI5LCAzLCAyMTMsIDI1MCwgMjksIDMsIDIxMywgMjU1LCAyOSwgMywgCisgICAgMjEzLCAxMzgsIDI5LCAzLCAyMTIsIDEwNywgMjksIDMsIDIxNywgMTA2LCAyOSwgMywgMjE1LCAxMTksIDI5LCAzLCAyMTYsIAorICAgIDExOCwgMjksIDMsIDIxNywgMTAyLCAyOSwgMywgMjE3LCAxMiwgMjksIDMsIDIxNywgMjMsIDI5LCAzLCAxMTIsIDI5LCAzLCAKKyAgICAyMTUsIDgwLCAyOSwgMywgMjUxLCA0MSwgMjksIDMsIDI0OSwgMTIwLCAyOSwgMywgMjUwLCA1OSwgMjksIDMsIDI1MSwgNDAsIAorICAgIDI5LCAzLCAyNTAsIDE5MCwgMjksIDMsIDI1MCwgMTk4LCAyOSwgMywgMjQ5LCAyNDYsIDI5LCAzLCAyNDksIDg5LCAyOSwgMywgCisgICAgMjExLCAxNjUsIDI5LCAzLCAyMTEsIDE0MSwgMjksIDMsIDIxMSwgMTU3LCAyOSwgMywgMjExLCAxNjQsIDI5LCAzLCAyMTEsIAorICAgIDE2MSwgMjksIDMsIDIxMSwgMTYyLCAyOSwgMywgMjExLCAxNDgsIDI5LCAzLCAyMTEsIDE0NywgMjksIDMsIDIxMSwgMTM2LCAKKyAgICAyOSwgMywgMjExLCAxMzIsIDI5LCAzLCAyMTEsIDEzNSwgMjksIDMsIDIxMSwgMTMzLCAyOSwgMywgMjExLCAxMzQsIDI5LCAKKyAgICAzLCAxOTgsIDI5LCAzLCAyMjcsIDI0MiwgMjksIDMsIDIyOCwgMjM4LCAyOSwgMywgMjI5LCAyMzAsIDI5LCAzLCAyMjksIAorICAgIDEwOCwgMjksIDMsIDIyOSwgMTEyLCAyOSwgMywgMjI4LCA3OSwgMjksIDMsIDIyNywgMTc4LCAyOSwgMywgMjI3LCAxNjksIAorICAgIDI5LCAzLCAyMjcsIDEzMiwgMjksIDMsIDIyNywgMTUyLCAyOSwgMywgMjI3LCAxNjgsIDI5LCAzLCAyMjcsIDE1OSwgMjksIAorICAgIDMsIDIyNywgMTYwLCAyOSwgMywgMjI3LCAxMzgsIDI5LCAzLCAyMjcsIDEyMywgMjksIDMsIDI0MiwgMTg3LCA2MSwgMjksIAorICAgIDMsIDI0MiwgMTg3LCA2OSwgMjksIDMsIDI0MiwgMTg3LCA3NCwgMjksIDMsIDI0MiwgMTg3LCAyNTUsIDgyLCAyOSwgMywgCisgICAgMjQyLCAxODcsIDI0NSwgMjE3LCAyOSwgMywgMjQyLCAxODcsIDc2LCAyOSwgMywgMjQyLCAxODcsIDc4LCAyOSwgMywgMjQyLCAKKyAgICAxODcsIDIxMiwgNjUsIDI5LCAzLCAxNzYsIDI5LCAzLCAyMzMsIDIyMywgMjksIDMsIDIzNCwgOTgsIDI5LCAzLCAyMzUsIAorICAgIDE2LCAyOSwgMywgMjM0LCAxODcsIDI5LCAzLCAyMzQsIDE4OCwgMjksIDMsIDIzNCwgMzQsIDI5LCAzLCAyMzQsIDMzLCAyOSwgCisgICAgMywgMjMzLCAxODgsIDI5LCAzLCAyMzMsIDE4MiwgMjksIDMsIDIzMywgMTg3LCAyOSwgMywgMjMzLCAxODMsIDI5LCAzLCAKKyAgICAyMzMsIDE4NCwgMjksIDMsIDIzMywgMTc3LCAyOSwgMywgMjMzLCAxNzEsIDI5LCAzLCAyMzMsIDE3MywgMjksIDMsIDIzMywgCisgICAgMTc2LCAyOSwgMywgMjMzLCAxNzQsIDI5LCAzLCAyMzMsIDE3NSwgMjksIDMsIDIzMywgMTcyLCAyOSwgMywgMjMzLCAxNzAsIAorICAgIDI5LCAzLCAyMzMsIDE2NiwgMjksIDMsIDIzMywgMTY5LCAyOSwgMywgMjMzLCAxNjcsIDI5LCAzLCAyMzMsIDE2OCwgMjksIAorICAgIDMsIDIxMiwgNjUsIDI5LCAzLCAyMTEsIDE5NSwgMjksIDMsIDIxMSwgMjUwLCAyOSwgMywgMjEyLCA2NCwgMjksIDMsIDIxMiwgCisgICAgMTcsIDI5LCAzLCAyMTIsIDIyLCAyOSwgMywgMjExLCAyMjcsIDI5LCAzLCAyMTEsIDIyNiwgMjksIDMsIDIyNSwgMTQyLCAKKyAgICA2MSwgMjksIDMsIDIyNSwgMTQyLCA2OSwgMjksIDMsIDIyNSwgMTQyLCA3NCwgMjksIDMsIDIyNSwgMTQyLCAyNTUsIDgyLCAKKyAgICAyOSwgMywgMjI1LCAxNDIsIDI0NSwgMjE3LCAyOSwgMywgMjI1LCAxNDIsIDc2LCAyOSwgMywgMjI1LCAxNDIsIDc4LCAyOSwgCisgICAgMywgMjEwLCAxMTYsIDI5LCAzLCAyMTAsIDEzLCAyOSwgMywgMjEwLCA0NCwgMjksIDMsIDIxMCwgMTE1LCAyOSwgMywgMjEwLCAKKyAgICA5MiwgMjksIDMsIDIxMCwgOTQsIDI5LCAzLCAyMTAsIDIzLCAyOSwgMywgMjEwLCAwLCAyOSwgMywgMjEwLCA4MiwgMjksIDMsIAorICAgIDIxMCwgNjIsIDI5LCAzLCAyMTAsIDY5LCAyOSwgMywgMjEwLCA4MSwgMjksIDMsIDIxMCwgNzMsIDI5LCAzLCAyMTAsIDc0LCAKKyAgICAyOSwgMywgMjEwLCA2NywgMjksIDMsIDIxMCwgNTMsIDI5LCAzLCAxOTIsIDI5LCAzLCAyMTAsIDIxMiwgMjksIDMsIDIxMSwgCisgICAgOCwgMjksIDMsIDIxMSwgMTAzLCAyOSwgMywgMjExLCA0NCwgMjksIDMsIDIxMSwgNDcsIDI5LCAzLCAyMTAsIDI0NCwgMjksIAorICAgIDMsIDIxMCwgMjM1LCAyOSwgMywgMjQ4LCAyMjksIDI5LCAzLCAyNDYsIDg2LCAyOSwgMywgMjQ4LCAxMSwgMjksIDMsIDI0OCwgCisgICAgMjI4LCAyOSwgMywgMjQ4LCA4NSwgMjksIDMsIDI0OCwgOTgsIDI5LCAzLCAyNDcsIDE1MywgMjksIDMsIDI0NiwgNTUsIDI5LCAKKyAgICAzLCAyNDgsIDE0MywgMjksIDMsIDI0OCwgMTA4LCAyOSwgMywgMjQ4LCAxMjAsIDI5LCAzLCAyNDgsIDE0MiwgMjksIDMsIAorICAgIDI0OCwgMTMwLCAyOSwgMywgMjQ4LCAxMzEsIDI5LCAzLCAyNDgsIDExMywgMjksIDMsIDI0OCwgOTksIDI5LCAzLCAyMzUsIAorICAgIDE0NywgMjksIDMsIDIzNSwgNTcsIDI5LCAzLCAyMzUsIDExNCwgMjksIDMsIDIzNSwgMTQ2LCAyOSwgMywgMjM1LCAxMzAsIAorICAgIDI5LCAzLCAyMzUsIDEzMiwgMjksIDMsIDIzNSwgNzQsIDI5LCAzLCAyMzUsIDM3LCAyOSwgMywgMjQzLCAxNDIsIDI5LCAzLCAKKyAgICAyNDIsIDEyMCwgMjksIDMsIDI0MiwgMjIxLCAyOSwgMywgMjQzLCAxMzksIDI5LCAzLCAyNDMsIDYyLCAyOSwgMywgMjQzLCAKKyAgICA2OSwgMjksIDMsIDI0MiwgMTgxLCAyOSwgMywgMjQyLCAxODAsIDI5LCAzLCAyNDIsIDg1LCAyOSwgMywgMjQyLCA4MSwgMjksIAorICAgIDMsIDI0MiwgODQsIDI5LCAzLCAyNDIsIDgyLCAyOSwgMywgMjQyLCA4MywgMjksIDMsIDI0MywgMzYsIDI5LCAzLCAyNDMsIAorICAgIDE2LCAyOSwgMywgMjQzLCAyNiwgMjksIDMsIDI0MywgMzUsIDI5LCAzLCAyNDMsIDMwLCAyOSwgMywgMjQzLCAzMSwgMjksIAorICAgIDMsIDI0MywgMjAsIDI5LCAzLCAyNDMsIDUsIDI5LCAzLCAyMTYsIDIwOSwgMjksIDMsIDIxNiwgMTM3LCAyOSwgMywgMjE2LCAKKyAgICAxNzYsIDI5LCAzLCAyMTYsIDIwOCwgMjksIDMsIDIxNiwgMTk1LCAyOSwgMywgMjE2LCAxOTYsIDI5LCAzLCAyMTYsIDE1NywgCisgICAgMjksIDMsIDIxNiwgMTI5LCAyOSwgMywgMjUwLCAxNjUsIDI5LCAzLCAyNTAsIDc3LCAyOSwgMywgMjUwLCAxMTgsIDI5LCAzLCAKKyAgICAyNTAsIDE2NCwgMjksIDMsIDI1MCwgMTM2LCAyOSwgMywgMjUwLCAxMzksIDI5LCAzLCAyNTAsIDk0LCAyOSwgMywgMjUwLCAKKyAgICA2NiwgMjksIDMsIDIyNSwgMTUwLCAyOSwgMywgMjI1LCAxMTcsIDI5LCAzLCAyMjUsIDEzNiwgMjksIDMsIDIyNSwgMTQ5LCAKKyAgICAyOSwgMywgMjI1LCAxMzgsIDI5LCAzLCAyMjUsIDEzOSwgMjksIDMsIDIyNSwgMTI0LCAyOSwgMywgMjI1LCAxMTMsIDI5LCAKKyAgICAzLCAyMTUsIDE4NCwgMjksIDMsIDIxNSwgMTY0LCAyOSwgMywgMjE1LCAxNjgsIDI5LCAzLCAyMTUsIDE4MywgMjksIDMsIAorICAgIDIxNSwgMTc4LCAyOSwgMywgMjE1LCAxNzksIDI5LCAzLCAyMTUsIDE2NywgMjksIDMsIDIxNSwgMTYyLCAyOSwgMywgMjE1LCAKKyAgICAzOSwgMjksIDMsIDIxNSwgMzEsIDI5LCAzLCAyMTUsIDM1LCAyOSwgMywgMjE1LCAzOCwgMjksIDMsIDIxNSwgMzYsIDI5LCAKKyAgICAzLCAyMTUsIDM3LCAyOSwgMywgMjE1LCAzMywgMjksIDMsIDIxNSwgMzIsIDI5LCAzLCAyNDQsIDIwNCwgMjksIDMsIDI0MywgCisgICAgMjQxLCAyOSwgMywgMjQ0LCAxMjksIDI5LCAzLCAyNDQsIDIwMywgMjksIDMsIDI0NCwgMTU1LCAyOSwgMywgMjQ0LCAxNjIsIAorICAgIDI5LCAzLCAyNDQsIDUxLCAyOSwgMywgMjQzLCAyMjAsIDI5LCAzLCAxOTEsIDI5LCAzLCAyMjQsIDE1MywgMjksIDMsIDIyNSwgCisgICAgMTExLCAyOSwgMywgMjI2LCA5MywgMjksIDMsIDIyNSwgMjE0LCAyOSwgMywgMjI1LCAyMjQsIDI5LCAzLCAyMjUsIDE5LCAKKyAgICAyOSwgMywgMjI0LCAxMTcsIDI5LCAzLCAyMjIsIDEwMSwgMjksIDMsIDIzMCwgMzYsIDI5LCAzLCAyNDMsIDIxNCwgMjksIAorICAgIDM4LCAyNDMsIDYwLCAyMiwgMjUsIDIzMywgMjksIDc5LCAyOSwgMzgsIDI1LCAyMzMsIDI5LCA3OSwgMjksIDM4LCAyNDMsIAorICAgIDYwLCA3OSwgMjksIDIyMSwgMTc1LCA3OSwgMjksIDIxMSwgMjA4LCAyOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyOSwgMjQ5LCAKKyAgICAyMjcsIDI5LCAyMjAsIDE1MiwgMjksIDI0OSwgMjM0LCAyOSwgMjI0LCAyMDIsIDI0OSwgMjM0LCAyOSwgMjI0LCAxNiwgNzksIAorICAgIDI5LCAyMjYsIDE5LCAyMjAsIDEzOSwgMjksIDIxLCAxMTEsIDI5LCAyMSwgMTA1LCAyOSwgMjEsIDE1OCwgMjksIDIxLCAKKyAgICAxNjEsIDI5LCAyMSwgMTkwLCAyOSwgMjEsIDE5NSwgMjksIDIxLCAxOTksIDI5LCAyMSwgMTk2LCAyOSwgMjEsIDIwMSwgMjksIAorICAgIDU0LCAyMTYsIDI0OCwgMjksIDU0LCAyMTUsIDczLCAyOSwgNTQsIDIxNiwgMTYzLCAyOSwgNTQsIDI0NCwgMjMsIDI5LCA1NCwgCisgICAgMjQ0LCAxMjIsIDI5LCA1NCwgMjE5LCAxMTMsIDI5LCA1NCwgMjIwLCAxMTgsIDI5LCA1NCwgMjQ1LCAxOTIsIDI5LCA1NCwgCisgICAgMjI4LCAyMDAsIDI5LCA1NCwgMjQwLCAyMTcsIDI5LCA1NCwgMjE2LCAyNDksIDIxNiwgMTQ4LCAyOSwgMywgMjIxLCAxNzksIAorICAgIDIzMCwgNDcsIDI5LCAzLCAyMzAsIDQzLCAyOSwgMywgMjMwLCA0NCwgMjksIDMsIDIzMCwgNDUsIDI5LCAzLCAyMjEsIDE3OSwgCisgICAgMjUxLCA5MSwgMjksIDMsIDI1MSwgODgsIDI5LCAzLCAyNTEsIDg5LCAyOSwgMywgMjUxLCA5MCwgMjksIDMsIDIyMSwgMTc5LCAKKyAgICAyNDMsIDIyMCwgMjksIDMsIDI0MywgMjE2LCAyOSwgMywgMjQzLCAyMTcsIDI5LCAzLCAyNDMsIDIxOCwgMjksIDMsIDIyMSwgCisgICAgMTc5LCAyMjQsIDExNywgMjksIDMsIDIyNCwgMTEzLCAyOSwgMywgMjI0LCAxMTQsIDI5LCAzLCAyMjQsIDExNSwgMjksIAorICAgIDIxNiwgMzIsIDE2NCwgMjEwLCAyNDcsIDI5LCAyMTYsIDMyLCAxNjQsIDI0OCwgNDksIDI5LCAyMTYsIDMyLCAxNjQsIDIyMiwgCisgICAgMjQxLCAyOSwgMjE2LCAzMiwgMTY0LCAyMTksIDI1MywgMjIyLCAyNDEsIDI5LCAyMTYsIDMyLCAxNjQsIDI0NywgMjQzLCAKKyAgICAyOSwgMjE2LCAzMiwgMTY0LCAyMzQsIDE3MCwgMjksIDIxNiwgMzIsIDE2NCwgMjUwLCAxMDIsIDI5LCAyMTYsIDMyLCAxNjQsIAorICAgIDI0MSwgMTg0LCAyOSwgMjE2LCAzMiwgMTY0LCAyNDgsIDQ4LCAyOSwgMjE2LCAzMiwgMTY0LCAyMzMsIDIwMCwgMTY5LCAxLCAKKyAgICA2MSwgMTY5LCAxLCA3NiwgMTY5LCAxLCA3NCwgMTY5LCAxLCA3OCwgMTY5LCAxLCA2OSwgMTY5LCAxLCAyMTQsIDEwNSwgCisgICAgMTY5LCAxLCAyNDMsIDE0MiwgMTY5LCAxLCAxNzYsIDE2OSwgMSwgMjQzLCA2OSwgMTY5LCAxLCAyNDIsIDIyMSwgMTY5LCAxLCAKKyAgICAyNDIsIDE4MSwgMTY5LCAxLCAyNDIsIDEyMCwgMTY5LCAxLCAyNDIsIDg2LCAxNjksIDEsIDE2MiwgMTY5LCAxLCAyNDEsIAorICAgIDI0NSwgMTY5LCAxLCAyNDEsIDE4NywgMTY5LCAxLCAyNDEsIDc1LCAxNjksIDEsIDI0MCwgMjI5LCAxNjksIDEsIDI0MCwgCisgICAgMjA4LCAxNjksIDEsIDIzMywgMTQxLCAxNjksIDEsIDIzMywgNjQsIDE2OSwgMSwgMjMyLCAyNDcsIDE2OSwgMSwgMjMyLCAKKyAgICAxNjIsIDE2OSwgMSwgMjMyLCAxMDMsIDE2OSwgMSwgMjMyLCA3NiwgMTY5LCAxLCAxODYsIDE2OSwgMSwgMjMxLCA5NiwgCisgICAgMTY5LCAxLCAyMzAsIDIzNSwgMTY5LCAxLCAyMzAsIDE2NiwgMTY5LCAxLCAyMzAsIDEwNywgMTY5LCAxLCAxOTgsIDE2OSwgCisgICAgMSwgMjQxLCA5NywgMTY5LCAxLCAyMjksIDIxOCwgMTY5LCAxLCAyMjksIDExMiwgMTY5LCAxLCAyMjgsIDIzOCwgMTY5LCAxLCAKKyAgICAyMjgsIDc5LCAxNjksIDEsIDIyNywgMjQyLCAxNjksIDEsIDIyNywgMTgwLCAxNjksIDEsIDIyNCwgMzIsIDE2OSwgMSwgCisgICAgMjI0LCAxOSwgMTY5LCAxLCAyMjQsIDEyLCAxNjksIDEsIDIyNCwgNCwgMTY5LCAxLCAyMjMsIDI0OSwgMTY5LCAxLCAyMjMsIAorICAgIDI0NywgMTY5LCAxLCAyMDYsIDE2OSwgMSwgMjIyLCA5MywgMTY5LCAxLCAyMjEsIDE4MywgMTY5LCAxLCAyMTksIDE5MywgCisgICAgMTY5LCAxLCAyMTksIDYwLCAxNjksIDEsIDIxOCwgODQsIDE2OSwgMSwgMjE4LCAzLCAxNjksIDEsIDI0OCwgMjI5LCAxNjksIAorICAgIDEsIDIxNywgMTA2LCAxNjksIDEsIDI0OCwgOTgsIDE2OSwgMSwgMjE3LCAyMywgMTY5LCAxLCAyNDgsIDExLCAxNjksIDEsIAorICAgIDIxNiwgMTE4LCAxNjksIDEsIDI0NywgMTUzLCAxNjksIDEsIDI0NiwgODYsIDE2OSwgMSwgMjQ2LCA1OCwgMTY5LCAxLCAKKyAgICAyNDcsIDE2NCwgMTY5LCAxLCAyMTYsIDYwLCAxNjksIDEsIDIxNiwgNTksIDE2OSwgMSwgMjE2LCA0OCwgMTY5LCAxLCAyMTYsIAorICAgIDQ3LCAxNjksIDEsIDIxNiwgNDYsIDE2OSwgMSwgMjE2LCA0NSwgMTY5LCAxLCAyMTUsIDE4NCwgMTY5LCAxLCAyMTUsIDE3OSwgCisgICAgMTY5LCAxLCAyMTUsIDE2OCwgMTY5LCAxLCAyMTUsIDE2NywgMTY5LCAxLCAyMTUsIDE2NCwgMTY5LCAxLCAyMTUsIDE2MywgCisgICAgMTY5LCAxLCAyMTIsIDY1LCAxNjksIDEsIDIxMiwgMjIsIDE2OSwgMSwgMjExLCAyNTAsIDE2OSwgMSwgMjExLCAyMjcsIAorICAgIDE2OSwgMSwgMjExLCAxOTUsIDE2OSwgMSwgMjExLCAxODMsIDE2OSwgMSwgMTkyLCAxNjksIDEsIDIxMSwgNDcsIDE2OSwgMSwgCisgICAgMjExLCA4LCAxNjksIDEsIDIxMCwgMjQ0LCAxNjksIDEsIDIxMCwgMjEyLCAxNjksIDEsIDIxMCwgMTc3LCAxOCwgMTksIAorICAgIDI0MCwgMTc1LCAxOCwgMTksIDc2LCAxOCwgMTksIDI1NSwgNDYsIDE4LCAxOSwgNzQsIDE4LCAxOSwgMjM2LCA0MCwgMTgsIAorICAgIDE5LCA3OCwgMTgsIDE5LCAyMjYsIDE4NywgMTgsIDE5LCAyMTEsIDExNiwgMjI2LCAxODcsIDE4LCAxOSwgNzMsIDI0NSwgCisgICAgMjE3LCAxOCwgMTksIDczLCA3NCwgMTgsIDE5LCA2MSwgMTgsIDE5LCAyNTUsIDgyLCAxOCwgMTksIDIxMiwgMjIsIDE4LCAKKyAgICAxOSwgMTU5LCAyMTIsIDIyLCAxOCwgMTksIDIxMSwgMjUwLCAxOCwgMTksIDE1OSwgMjExLCAyNTAsIDE4LCAxOSwgMjExLCAKKyAgICAyNDIsIDE4LCAxOSwgMTU5LCAyMTEsIDI0MiwgMTgsIDE5LCAyMTEsIDIyNywgMTgsIDE5LCAxNTksIDIxMSwgMjI3LCAxOCwgCisgICAgMTksIDIxMSwgMjE1LCAxOCwgMTksIDE1OSwgMjExLCAyMTUsIDE4LCAxOSwgMjI5LCAxOTUsIDIxMSwgMjE1LCAxOCwgMTksIAorICAgIDIxMiwgNjUsIDE4LCAxOSwgMTU5LCAyMTIsIDY1LCAxOCwgMTksIDIxMiwgNjQsIDE4LCAxOSwgMTU5LCAyMTIsIDY0LCAxOCwgCisgICAgMTksIDIyOSwgMTk1LCAyMTIsIDY0LCAxOCwgMTksIDI1NCwgMjEwLCAxOCwgMTksIDIxMSwgMTE2LCAyMTIsIDk4LCAxOCwgCisgICAgMTksIDI0MiwgMTg3LCAyMTgsIDEzMSwgMTgsIDE5LCA0MCwgMTQyLCAxOCwgMTksIDQwLCAyNDIsIDE0MywgMTgsIDE5LCAKKyAgICA0MCwgMjUxLCAxODMsIDE2MywgMjIyLCAyMzYsIDE4LCAxOSwgNDAsIDIxNiwgMTUsIDE2MywgMjIyLCAyMzYsIDE4LCAxOSwgCisgICAgNDAsIDQ0LCAxNjMsIDIyMiwgMjM2LCAxOCwgMTksIDQwLCAyMjIsIDIzNiwgMTgsIDE5LCA0MCwgNTIsIDE0MiwgMTgsIDE5LCAKKyAgICA0MCwgNTIsIDIxOSwgMjUzLCA2NywgMjE4LCA5MiwgMTgsIDE5LCA0MCwgMjMwLCAyMjksIDI0NywgMTI4LCAxOCwgMTksIAorICAgIDQwLCAyMTksIDI1MywgMjAzLCA5MSwgMTgsIDE5LCA0MCwgMjI1LCAyNSwgMTgsIDE5LCA0MCwgMTI0LCAyMTcsIDg4LCAxOCwgCisgICAgMTksIDI0NSwgMTU4LCAxOCwgMTksIDIzNiwgNiwgMTgsIDE5LCAyMjYsIDIwMCwgMTgsIDE5LCAyNTQsIDEzMSwgMTgsIDE5LCAKKyAgICAyMjUsIDIyNCwgMTgsIDE5LCAyMjYsIDkxLCAxOCwgMTksIDIyNSwgMTExLCAxOCwgMTksIDIyNSwgNzQsIDE4LCAxOSwgCisgICAgMjI1LCAxOSwgMTgsIDE5LCAyMjQsIDI1MiwgMTgsIDE5LCAyMTEsIDExNiwgMjI0LCAyNTIsIDE4LCAxOSwgNzMsIDI0MSwgCisgICAgMjI3LCAxOCwgMTksIDczLCAyNDEsIDE4NywgMTgsIDE5LCAxOTEsIDE4LCAxOSwgMjI2LCA5MywgMTgsIDE5LCAyMjQsIAorICAgIDExNSwgMTgsIDE5LCAxNTksIDIyNCwgMTE1LCAxOCwgMTksIDIyNCwgMTEzLCAxOCwgMTksIDE1OSwgMjI0LCAxMTMsIDE4LCAKKyAgICAxOSwgMjI0LCAxMTIsIDE4LCAxOSwgMTU5LCAyMjQsIDExMiwgMTgsIDE5LCAyMjQsIDExMCwgMTgsIDE5LCAxNTksIDIyNCwgCisgICAgMTEwLCAxOCwgMTksIDIyNCwgMTA5LCAxOCwgMTksIDE1OSwgMjI0LCAxMDksIDE4LCAxOSwgMjI0LCAxMTcsIDE4LCAxOSwgCisgICAgMTU5LCAyMjQsIDExNywgMTgsIDE5LCAyMjQsIDExNiwgMTgsIDE5LCAxNTksIDIyNCwgMTE2LCAxOCwgMTksIDIxMSwgMTE2LCAKKyAgICAyMjQsIDExNiwgMTgsIDE5LCAyMjYsIDEwOSwgMTgsIDE5LCAxNTksIDIyNiwgMTA5LCAxOCwgMTksIDczLCAyNDIsIDY3LCAKKyAgICAxOCwgMTksIDIxNywgMjMsIDE4LCAxOSwgMjE3LCAxMDAsIDE4LCAxOSwgMjE2LCAxMTgsIDE4LCAxOSwgMjE2LCAxMDQsIAorICAgIDE4LCAxOSwgMTEyLCAxOCwgMTksIDIxNiwgMTgsIDE4LCAxOSwgMjExLCAxMTYsIDIxNiwgMTgsIDE4LCAxOSwgNzMsIDI0OCwgCisgICAgODUsIDE4LCAxOSwgNzMsIDI0OCwgMTEsIDE4LCAxOSwgMjE3LCAxMDYsIDE4LCAxOSwgMjE3LCAxMDIsIDE4LCAxOSwgMjE1LCAKKyAgICA3OCwgMTgsIDE5LCAxNTksIDIxNSwgNzgsIDE4LCAxOSwgMjE1LCA2MiwgMTgsIDE5LCAxNTksIDIxNSwgNjIsIDE4LCAxOSwgCisgICAgMjE1LCA2MSwgMTgsIDE5LCAxNTksIDIxNSwgNjEsIDE4LCAxOSwgMTA1LCAxOCwgMTksIDE1OSwgMTA1LCAxOCwgMTksIAorICAgIDIxNSwgNTQsIDE4LCAxOSwgMTU5LCAyMTUsIDU0LCAxOCwgMTksIDIxNSwgODAsIDE4LCAxOSwgMTU5LCAyMTUsIDgwLCAxOCwgCisgICAgMTksIDIxNSwgNzksIDE4LCAxOSwgMTU5LCAyMTUsIDc5LCAxOCwgMTksIDIyOSwgMTk1LCAyMTUsIDc5LCAxOCwgMTksIAorICAgIDIxNywgMTUzLCAxOCwgMTksIDIxNSwgMTUyLCAxOCwgMTksIDIxNSwgMTM2LCAxOCwgMTksIDIxNSwgMTM0LCAxOCwgMTksIAorICAgIDIxNSwgMTU3LCAxOCwgMTksIDIzNCwgMTg4LCAxOCwgMTksIDIzNSwgMTMsIDE4LCAxOSwgMjM0LCA5OCwgMTgsIDE5LCAKKyAgICAyMzQsIDg5LCAxOCwgMTksIDIzNCwgMzQsIDE4LCAxOSwgMjM0LCAxNiwgMTgsIDE5LCAyMTEsIDExNiwgMjM0LCAxNiwgMTgsIAorICAgIDE5LCAxNzYsIDE4LCAxOSwgMjM1LCAxNiwgMTgsIDE5LCAyMzMsIDE4NCwgMTgsIDE5LCAxNTksIDIzMywgMTg0LCAxOCwgCisgICAgMTksIDIzMywgMTgyLCAxOCwgMTksIDE1OSwgMjMzLCAxODIsIDE4LCAxOSwgMjMzLCAxODEsIDE4LCAxOSwgMTU5LCAyMzMsIAorICAgIDE4MSwgMTgsIDE5LCAyMzMsIDE4MCwgMTgsIDE5LCAxNTksIDIzMywgMTgwLCAxOCwgMTksIDIzMywgMTc5LCAxOCwgMTksIAorICAgIDE1OSwgMjMzLCAxNzksIDE4LCAxOSwgMjMzLCAxODgsIDE4LCAxOSwgMTU5LCAyMzMsIDE4OCwgMTgsIDE5LCAyMzMsIDE4NywgCisgICAgMTgsIDE5LCAxNTksIDIzMywgMTg3LCAxOCwgMTksIDIyOSwgMTk1LCAyMzMsIDE4NywgMTgsIDE5LCAyMzUsIDI5LCAxOCwgCisgICAgMTksIDIzMywgMTg5LCAxOCwgMTksIDIxOSwgMjksIDIzNCwgMTgyLCAxOCwgMTksIDIxOSwgMjksIDIzNCwgOTAsIDE4LCAKKyAgICAxOSwgMjE5LCAyOSwgMjM0LCAyOSwgMTgsIDE5LCAyMTksIDI5LCAyMzQsIDI1NCwgMTgsIDE5LCAyNTAsIDE5OCwgMTgsIAorICAgIDE5LCAyNTEsIDM5LCAxOCwgMTksIDI1MCwgNTksIDE4LCAxOSwgMjUwLCA0OSwgMTgsIDE5LCAyNDksIDI0NiwgMTgsIDE5LCAKKyAgICAyNDksIDE4MiwgMTgsIDE5LCAyMTEsIDExNiwgMjQ5LCAxODIsIDE4LCAxOSwgMjUxLCA0MSwgMTgsIDE5LCAyNTEsIDQwLCAKKyAgICAxOCwgMTksIDI0OSwgODcsIDE4LCAxOSwgMTU5LCAyNDksIDg3LCAxOCwgMTksIDI0OSwgODUsIDE4LCAxOSwgMTU5LCAyNDksIAorICAgIDg1LCAxOCwgMTksIDI0OSwgODQsIDE4LCAxOSwgMTU5LCAyNDksIDg0LCAxOCwgMTksIDI0OSwgODMsIDE4LCAxOSwgMTU5LCAKKyAgICAyNDksIDgzLCAxOCwgMTksIDI0OSwgODIsIDE4LCAxOSwgMTU5LCAyNDksIDgyLCAxOCwgMTksIDI0OSwgODksIDE4LCAxOSwgCisgICAgMTU5LCAyNDksIDg5LCAxOCwgMTksIDI0OSwgODgsIDE4LCAxOSwgMTU5LCAyNDksIDg4LCAxOCwgMTksIDIyOSwgMTk1LCAKKyAgICAyNDksIDg4LCAxOCwgMTksIDI1MSwgNzQsIDE4LCAxOSwgMjIxLCAyMTEsIDIxNiwgMjExLCAxOCwgMTksIDIzMSwgOTYsIAorICAgIDE4LCAxOSwgMjMxLCAyNDEsIDE4LCAxOSwgMjMwLCAyMzUsIDE4LCAxOSwgMjMwLCAyMDYsIDE4LCAxOSwgMjMwLCAxNjYsIAorICAgIDE4LCAxOSwgMjMwLCAxMzcsIDE4LCAxOSwgMjExLCAxMTYsIDIzMCwgMTM3LCAxOCwgMTksIDE4NiwgMTgsIDE5LCAyMzEsIAorICAgIDI0MiwgMTgsIDE5LCAyMzAsIDQ1LCAxOCwgMTksIDE1OSwgMjMwLCA0NSwgMTgsIDE5LCAyMzAsIDQzLCAxOCwgMTksIDE1OSwgCisgICAgMjMwLCA0MywgMTgsIDE5LCAyMzAsIDQyLCAxOCwgMTksIDE1OSwgMjMwLCA0MiwgMTgsIDE5LCAyMzAsIDQxLCAxOCwgMTksIAorICAgIDE1OSwgMjMwLCA0MSwgMTgsIDE5LCAyMzAsIDQwLCAxOCwgMTksIDE1OSwgMjMwLCA0MCwgMTgsIDE5LCAyMzAsIDQ3LCAxOCwgCisgICAgMTksIDE1OSwgMjMwLCA0NywgMTgsIDE5LCAyMzAsIDQ2LCAxOCwgMTksIDE1OSwgMjMwLCA0NiwgMTgsIDE5LCAyMjksIAorICAgIDE5NSwgMjMwLCA0NiwgMTgsIDE5LCAxOTQsIDE4LCAxOSwgMTU5LCAxOTQsIDE4LCAxOSwgMjMwLCAyMzksIDE4LCAxOSwgCisgICAgMjUzLCAyMTMsIDE5NCwgMTgsIDE5LCAyMjEsIDIxMSwgMTk0LCAxOCwgMTksIDIyOSwgMTEyLCAxOCwgMTksIDIyOSwgMjI5LCAKKyAgICAxOCwgMTksIDIyOCwgMjM4LCAxOCwgMTksIDIyOCwgMjEzLCAxOCwgMTksIDIyOCwgNzksIDE4LCAxOSwgMjI4LCA2OSwgMTgsIAorICAgIDE5LCAyMTEsIDExNiwgMjI4LCA2OSwgMTgsIDE5LCAxOTgsIDE4LCAxOSwgMjI5LCAyMzAsIDE4LCAxOSwgMjI3LCAxNzYsIAorICAgIDE4LCAxOSwgMTU5LCAyMjcsIDE3NiwgMTgsIDE5LCAyMjcsIDE3OCwgMTgsIDE5LCAxNTksIDIyNywgMTc4LCAxOCwgMTksIAorICAgIDIyNywgMTc3LCAxOCwgMTksIDE1OSwgMjI3LCAxNzcsIDE4LCAxOSwgMjI5LCAxOTUsIDIyNywgMTc3LCAxOCwgMTksIDIzMCwgCisgICAgMzAsIDE4LCAxOSwgNzMsIDIyOSwgODQsIDE4LCAxOSwgMjI4LCAyNDMsIDE4LCAxOSwgMjMzLCA2NCwgMTgsIDE5LCAyMzMsIAorICAgIDEzOSwgMTgsIDE5LCAyMzIsIDI0NywgMTgsIDE5LCAyMzIsIDIzMywgMTgsIDE5LCAyMzIsIDE2MiwgMTgsIDE5LCAyMzIsIAorICAgIDEzMywgMTgsIDE5LCAyMTEsIDExNiwgMjMyLCAxMzMsIDE4LCAxOSwgMjMzLCAxNDEsIDE4LCAxOSwgMjMzLCAxNDAsIDE4LCAKKyAgICAxOSwgMjMyLCA3MywgMTgsIDE5LCAxNTksIDIzMiwgNzMsIDE4LCAxOSwgMjMyLCA3MiwgMTgsIDE5LCAxNTksIDIzMiwgNzIsIAorICAgIDE4LCAxOSwgMjMyLCA3MSwgMTgsIDE5LCAxNTksIDIzMiwgNzEsIDE4LCAxOSwgMjMyLCA3MCwgMTgsIDE5LCAxNTksIDIzMiwgCisgICAgNzAsIDE4LCAxOSwgMjMyLCA2OSwgMTgsIDE5LCAxNTksIDIzMiwgNjksIDE4LCAxOSwgMjMyLCA3NSwgMTgsIDE5LCAxNTksIAorICAgIDIzMiwgNzUsIDE4LCAxOSwgMjMyLCA3NCwgMTgsIDE5LCAxNTksIDIzMiwgNzQsIDE4LCAxOSwgMTU2LCAxOCwgMTksIDE1OSwgCisgICAgMTU2LCAxOCwgMTksIDE0NywgMTU2LCAxOCwgMTksIDIyMSwgMTgzLCAxOCwgMTksIDIyMiwgMzEsIDE4LCAxOSwgMjE5LCAKKyAgICAxOTMsIDE4LCAxOSwgMjE5LCAxNzcsIDE4LCAxOSwgMjE5LCA2MCwgMTgsIDE5LCAyMTksIDQyLCAxOCwgMTksIDIxMSwgCisgICAgMTE2LCAyMTksIDQyLCAxOCwgMTksIDIwNiwgMTgsIDE5LCAyMjIsIDMzLCAxOCwgMTksIDIxNywgMjUwLCAxOCwgMTksIAorICAgIDE1OSwgMjE3LCAyNTAsIDE4LCAxOSwgMjE3LCAyNDQsIDE4LCAxOSwgMTU5LCAyMTcsIDI0NCwgMTgsIDE5LCAyMTcsIDI0MywgCisgICAgMTgsIDE5LCAxNTksIDIxNywgMjQzLCAxOCwgMTksIDIxNywgMjM5LCAxOCwgMTksIDE1OSwgMjE3LCAyMzksIDE4LCAxOSwgCisgICAgMjE3LCAyMzgsIDE4LCAxOSwgMTU5LCAyMTcsIDIzOCwgMTgsIDE5LCAyMTcsIDI1NCwgMTgsIDE5LCAxNTksIDIxNywgMjU0LCAKKyAgICAxOCwgMTksIDIxNywgMjUzLCAxOCwgMTksIDE1OSwgMjE3LCAyNTMsIDE4LCAxOSwgMjI5LCAxOTUsIDIxNywgMjUzLCAxOCwgCisgICAgMTksIDIyMiwgOTMsIDE4LCAxOSwgMjUzLCAyMTMsIDIyMiwgOTMsIDE4LCAxOSwgMjE3LCAyNTUsIDE4LCAxOSwgMjUxLCAKKyAgICAyMjYsIDIyMiwgOTMsIDE4LCAxOSwgMjMwLCAxMzIsIDIxOSwgMTEwLCAxOCwgMTksIDIyOSwgMTk1LCAyMTksIDEwMSwgMTgsIAorICAgIDE5LCAyMjksIDE5NSwgMjIyLCA5MSwgMTgsIDE5LCAyMjksIDE5NSwgMjE4LCAyMzcsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOCwgCisgICAgODcsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOSwgMTAwLCAxOCwgMTksIDIyOSwgMTk1LCAyMjEsIDE4NiwgMTgsIDE5LCAyMjAsIAorICAgIDY1LCAxOCwgMTksIDIyMCwgMzQsIDE4LCAxOSwgMjIwLCAyOSwgMTgsIDE5LCAyMjAsIDksIDE4LCAxOSwgMjIwLCAzLCAxOCwgCisgICAgMTksIDIyMCwgMTA0LCAxOCwgMTksIDIyMCwgMTAwLCAxOCwgMTksIDIxOSwgMjA4LCAxOCwgMTksIDE1OSwgMjE5LCAyMDgsIAorICAgIDE4LCAxOSwgMjE5LCAyMDcsIDE4LCAxOSwgMTU5LCAyMTksIDIwNywgMTgsIDE5LCAyMTksIDIwNiwgMTgsIDE5LCAxNTksIAorICAgIDIxOSwgMjA2LCAxOCwgMTksIDIxOSwgMjA1LCAxOCwgMTksIDE1OSwgMjE5LCAyMDUsIDE4LCAxOSwgMjE5LCAyMDQsIDE4LCAKKyAgICAxOSwgMTU5LCAyMTksIDIwNCwgMTgsIDE5LCAyMTksIDIxMCwgMTgsIDE5LCAxNTksIDIxOSwgMjEwLCAxOCwgMTksIDIxOSwgCisgICAgMjA5LCAxOCwgMTksIDE1OSwgMjE5LCAyMDksIDE4LCAxOSwgMjIwLCAxMDYsIDE4LCAxOSwgMjExLCA0NywgMTgsIDE5LCAKKyAgICAyMTEsIDEwMSwgMTgsIDE5LCAyMTEsIDgsIDE4LCAxOSwgMjEwLCAyNTUsIDE4LCAxOSwgMjEwLCAyNDQsIDE4LCAxOSwgCisgICAgMjEwLCAyMjksIDE4LCAxOSwgMjExLCAxMTYsIDIxMCwgMjI5LCAxOCwgMTksIDE5MiwgMTgsIDE5LCAyMTEsIDEwMywgMTgsIAorICAgIDE5LCAyMTAsIDE3NCwgMTgsIDE5LCAxNTksIDIxMCwgMTc0LCAxOCwgMTksIDIxMCwgMTczLCAxOCwgMTksIDE1OSwgMjEwLCAKKyAgICAxNzMsIDE4LCAxOSwgMjEwLCAxNzIsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MiwgMTgsIDE5LCAyMTAsIDE3MSwgMTgsIDE5LCAKKyAgICAxNTksIDIxMCwgMTcxLCAxOCwgMTksIDIxMCwgMTcwLCAxOCwgMTksIDE1OSwgMjEwLCAxNzAsIDE4LCAxOSwgMjEwLCAxNzYsIAorICAgIDE4LCAxOSwgMTU5LCAyMTAsIDE3NiwgMTgsIDE5LCAyMTAsIDE3NSwgMTgsIDE5LCAxNTksIDIxMCwgMTc1LCAxOCwgMTksIAorICAgIDIyOSwgMTk1LCAyMTAsIDE3NSwgMTgsIDE5LCAyMTEsIDExNywgMTgsIDE5LCAyNTIsIDEyLCAyMTEsIDExNywgMTgsIDE5LCAKKyAgICAxNTksIDIxMSwgMTE3LCAxOCwgMTksIDIyMSwgMjExLCAyMTEsIDgsIDE4LCAxOSwgMjIzLCAxMzEsIDE4LCAxOSwgMjIzLCAKKyAgICAyMjYsIDIyMywgMTMxLCAxOCwgMTksIDE1OSwgMjMzLCA2NCwgMTgsIDE5LCAyMjMsIDE4NiwgMTgsIDE5LCAyMjMsIDM4LCAKKyAgICAxOCwgMTksIDIyMiwgMjQyLCAxOCwgMTksIDIyMiwgMjEzLCAxOCwgMTksIDIyMiwgMTk5LCAxOCwgMTksIDE1OSwgMjMyLCAKKyAgICAxNjIsIDE4LCAxOSwgMjA1LCAxOCwgMTksIDIyMywgMTg3LCAxOCwgMTksIDE1OSwgMjMzLCAxNDEsIDE4LCAxOSwgMjIyLCAKKyAgICAxMTAsIDE4LCAxOSwgMTU5LCAyMjIsIDExMCwgMTgsIDE5LCAxNTMsIDE4LCAxOSwgMTU5LCAxNTMsIDE4LCAxOSwgMTQ3LCAKKyAgICAxNTMsIDE4LCAxOSwgMjQ0LCAxNjIsIDE4LCAxOSwgMjQ0LCAyMDEsIDE4LCAxOSwgMjQ0LCAxMjksIDE4LCAxOSwgMjQ0LCAKKyAgICAxMTYsIDE4LCAxOSwgMjQ0LCA1MSwgMTgsIDE5LCAyNDQsIDQyLCAxOCwgMTksIDI0NCwgMjA0LCAxOCwgMTksIDI0NCwgCisgICAgMjAzLCAxOCwgMTksIDI0MywgMjE5LCAxOCwgMTksIDE1OSwgMjQzLCAyMTksIDE4LCAxOSwgMjQ1LCAxNCwgMTgsIDE5LCAKKyAgICAyMTYsIDE5NiwgMTgsIDE5LCAyMzAsIDI4LCAyMTYsIDE5NiwgMTgsIDE5LCAyMTYsIDE3NiwgMTgsIDE5LCAyMzAsIDI4LCAKKyAgICAyMTYsIDE3NiwgMTgsIDE5LCAyMTYsIDE3MiwgMTgsIDE5LCAyMzAsIDI4LCAyMTYsIDE3MiwgMTgsIDE5LCAyMTYsIDE1NywgCisgICAgMTgsIDE5LCAyMTYsIDE1NCwgMTgsIDE5LCAyMTYsIDIwOSwgMTgsIDE5LCAyMTYsIDIwOCwgMTgsIDE5LCAyMTYsIDEyOCwgCisgICAgMTgsIDE5LCAxNTksIDIxNiwgMTI4LCAxOCwgMTksIDIxNiwgMjExLCAxOCwgMTksIDIxNSwgMTQzLCAxOCwgMTksIDIxNSwgCisgICAgMTQxLCAxOCwgMTksIDIxNSwgMTQwLCAxOCwgMTksIDIxNSwgMTQ1LCAxOCwgMTksIDIxNSwgMTQ2LCAxOCwgMTksIDIxNSwgCisgICAgNTIsIDE4LCAxOSwgMjE1LCA1MSwgMTgsIDE5LCAyMTUsIDUwLCAxOCwgMTksIDIxNSwgNTMsIDE4LCAxOSwgMjI3LCAxOTcsIAorICAgIDI0MSwgMjQ1LCAxOCwgMTksIDIyNywgMTk3LCAyNDEsIDE4NywgMTgsIDE5LCAyMjcsIDE5NywgMjQxLCAxNjgsIDE4LCAxOSwgCisgICAgMjI3LCAxOTcsIDI0MSwgNzUsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MSwgNjAsIDE4LCAxOSwgMjI3LCAxOTcsIDE2MiwgMTgsIAorICAgIDE5LCAyMjcsIDE5NywgMjQyLCA1MywgMTgsIDE5LCAyMjcsIDE5NywgMjQyLCA2NywgMTgsIDE5LCAyMjcsIDE5NiwgMjQyLCAKKyAgICA2NywgMTgsIDE5LCAyNDEsIDE2MSwgMTgsIDE5LCAyMjQsIDg3LCAxOCwgMTksIDIyNCwgNTYsIDE4LCAxOSwgMjI0LCA1MSwgCisgICAgMTgsIDE5LCAyMjQsIDQ1LCAxOCwgMTksIDIyNCwgNDAsIDE4LCAxOSwgMjI0LCA5MSwgMTgsIDE5LCAyMjQsIDkwLCAxOCwgCisgICAgMTksIDIyNCwgOTksIDE4LCAxOSwgMjE2LCA1NiwgMTgsIDE5LCAyMTYsIDU0LCAxOCwgMTksIDIxNiwgNTMsIDE4LCAxOSwgCisgICAgMjE2LCA1NywgMTgsIDE5LCAxNTksIDIyMywgMTMxLCAxOCwgMTksIDE1OSwgMjIzLCAzOCwgMTgsIDE5LCAxNTksIDIyMiwgCisgICAgMjEzLCAxOCwgMTksIDE1OSwgMjA1LCAxOCwgMTksIDIyOSwgODAsIDE4LCAxOSwgMjI5LCAzMiwgMTgsIDE5LCAyMjksIDI4LCAKKyAgICAxOCwgMTksIDIyOSwgOSwgMTgsIDE5LCAyMjksIDQsIDE4LCAxOSwgMjI5LCA4MiwgMTgsIDE5LCAyMjksIDgxLCAxOCwgMTksIAorICAgIDIyOSwgODQsIDE4LCAxOSwgMjI4LCAxMDgsIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgNjUsIDE4LCAxOSwgMjIxLCAyMTEsIAorICAgIDIyMCwgMzQsIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgOSwgMTgsIDE5LCAyMjEsIDIxMSwgMjIwLCAxMDQsIDE4LCAxOSwgCisgICAgMjExLCAyMTMsIDIxNiwgMTk2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDE3NiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAKKyAgICAxNTcsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMjA5LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDIxMSwgMTgsIDE5LCAyMzIsIAorICAgIDI1NCwgMTgsIDE5LCAyMzIsIDI1MywgMTgsIDE5LCAyMzIsIDI1MiwgMTgsIDE5LCAyMzIsIDI1MSwgMTgsIDE5LCAyMzMsIAorICAgIDQsIDE4LCAxOSwgMjMzLCAzLCAxOCwgMTksIDIzMywgNSwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAxOTYsIDE4LCAxOSwgCisgICAgMjE2LCAyMTAsIDIxNiwgMTc2LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDE3MiwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAKKyAgICAxNTcsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMTU0LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDIwOSwgMTgsIDE5LCAyMTYsIAorICAgIDIxMCwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMjExLCAxOCwgMTksIDI1NCwgMTk4LCAyNTMsIDE2NiwgCisgICAgMTgsIDE5LCAyNTEsIDIyNiwgNzYsIDE4LCAxOSwgMjUxLCAyMjYsIDc0LCAxOCwgMTksIDI1MSwgMjI2LCA3OCwgMTgsIDE5LCAKKyAgICAyNTEsIDIyNiwgNjEsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMiwgMjIsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMSwgMjUwLCAxOCwgCisgICAgMTksIDI1MSwgMjI2LCAyMTEsIDIyNywgMTgsIDE5LCAyNTEsIDIyNiwgMjEyLCA2NSwgMTgsIDE5LCAyNTEsIDIyNiwgMjI5LCAKKyAgICAxMTIsIDE4LCAxOSwgMjUxLCAyMjYsIDIyOCwgMjM4LCAxOCwgMTksIDI1MSwgMjI2LCAyMjgsIDc5LCAxOCwgMTksIDI1MSwgCisgICAgMjI2LCAxOTgsIDE4LCAxOSwgMjUxLCAyMjYsIDIzNCwgMTg4LCAxOCwgMTksIDI1MSwgMjI2LCAyMzQsIDk4LCAxOCwgMTksIAorICAgIDI1MSwgMjI2LCAyMzQsIDM0LCAxOCwgMTksIDI1MSwgMjI2LCAxNzYsIDE4LCAxOSwgMjIxLCAyMTEsIDI0MSwgMjQ1LCAxOCwgCisgICAgMTksIDIyMSwgMjExLCAyNDEsIDE4NywgMTgsIDE5LCAyMjEsIDIxMSwgMjQxLCA3NSwgMTgsIDE5LCAyMjEsIDIxMSwgMTYyLCAKKyAgICAxOCwgMTksIDczLCAyNDIsIDIyNywgMTgsIDE5LCA3MywgMjQyLCAyMzEsIDE4LCAxOSwgNzMsIDI0MiwgMjQzLCAxOCwgMTksIAorICAgIDczLCAyNDIsIDI0MiwgMTgsIDE5LCA3MywgMjQyLCAyMzIsIDE4LCAxOSwgNzMsIDI0MywgMCwgMTgsIDE5LCA3MywgMjIyLCAKKyAgICAxNDIsIDE4LCAxOSwgNzMsIDIyMiwgMjEzLCAxOCwgMTksIDczLCAyMjMsIDEzMSwgMTgsIDE5LCA3MywgMjIzLCAxMTEsIAorICAgIDE4LCAxOSwgNzMsIDIyMywgMzgsIDE4LCAxOSwgNzMsIDIwNSwgMTgsIDE5LCA3MywgMjExLCAxOTUsIDE4LCAxOSwgNzMsIAorICAgIDIxMSwgMjI3LCAxOCwgMTksIDczLCAyMTIsIDIyLCAxOCwgMTksIDczLCAyMTIsIDE3LCAxOCwgMTksIDczLCAyMTEsIDI1MCwgCisgICAgMTgsIDE5LCA3MywgMjEyLCA2NSwgMTgsIDE5LCA3MywgMjQwLCAyMDEsIDE4LCAxOSwgNzMsIDI0MCwgMjAyLCAxOCwgMTksIAorICAgIDczLCAyNDAsIDIwNSwgMTgsIDE5LCA3MywgMjQwLCAyMDQsIDE4LCAxOSwgNzMsIDI0MCwgMjAzLCAxOCwgMTksIDczLCAKKyAgICAyNDAsIDIwNywgMTgsIDE5LCA3MywgMjE2LCAxMzcsIDE4LCAxOSwgNzMsIDIxNiwgMTU3LCAxOCwgMTksIDczLCAyMTYsIAorICAgIDE5NiwgMTgsIDE5LCA3MywgMjE2LCAxOTUsIDE4LCAxOSwgNzMsIDIxNiwgMTc2LCAxOCwgMTksIDczLCAyMTYsIDIwOSwgCisgICAgMTgsIDE5LCA3MywgMjE1LCAxMjQsIDE4LCAxOSwgNzMsIDIxNSwgMTM0LCAxOCwgMTksIDczLCAyMTUsIDE1MiwgMTgsIDE5LCAKKyAgICA3MywgMjE1LCAxNTEsIDE4LCAxOSwgNzMsIDIxNSwgMTM2LCAxOCwgMTksIDczLCAyMTUsIDE1NywgMTgsIDE5LCA3MywgCisgICAgMjI0LCAxNTMsIDE4LCAxOSwgNzMsIDIyNSwgMTksIDE4LCAxOSwgNzMsIDIyNSwgMjI0LCAxOCwgMTksIDczLCAyMjUsIAorICAgIDIxNCwgMTgsIDE5LCA3MywgMjI1LCAxMTEsIDE4LCAxOSwgNzMsIDE5MSwgMTgsIDE5LCA3MywgMjI2LCAxMDksIDE4LCAxOSwgCisgICAgNzMsIDI0MiwgMTIwLCAxOCwgMTksIDczLCAyNDIsIDE4MSwgMTgsIDE5LCA3MywgMjQzLCA2OSwgMTgsIDE5LCA3MywgMjQzLCAKKyAgICA2MiwgMTgsIDE5LCA3MywgMjQyLCAyMjEsIDE4LCAxOSwgNzMsIDI0MywgMTQyLCAxOCwgMTksIDczLCAyMzQsIDEwNiwgMTgsIAorICAgIDE5LCA3MywgMjM0LCAxMTEsIDE4LCAxOSwgNzMsIDIzNCwgMTI1LCAxOCwgMTksIDczLCAyMzQsIDEyNCwgMTgsIDE5LCA3MywgCisgICAgMjM0LCAxMTgsIDE4LCAxOSwgNzMsIDIzNCwgMTM4LCAxOCwgMTksIDczLCAyMzQsIDQ3LCAxOCwgMTksIDczLCAyMzQsIDQ4LCAKKyAgICAxOCwgMTksIDczLCAyMzQsIDUxLCAxOCwgMTksIDczLCAyMzQsIDUwLCAxOCwgMTksIDczLCAyMzQsIDQ5LCAxOCwgMTksIAorICAgIDczLCAyMzQsIDUyLCAxOCwgMTksIDczLCAyMzQsIDUzLCAxOCwgMTksIDczLCAyMjcsIDI0MiwgMTgsIDE5LCA3MywgMjI4LCAKKyAgICA3OSwgMTgsIDE5LCA3MywgMjI5LCAxMTIsIDE4LCAxOSwgNzMsIDIyOSwgMTA4LCAxOCwgMTksIDczLCAyMjgsIDIzOCwgMTgsIAorICAgIDE5LCA3MywgMTk4LCAxOCwgMTksIDczLCAyMzAsIDEwNywgMTgsIDE5LCA3MywgMjMwLCAxNjYsIDE4LCAxOSwgNzMsIDIzMSwgCisgICAgOTYsIDE4LCAxOSwgNzMsIDIzMSwgODUsIDE4LCAxOSwgNzMsIDIzMCwgMjM1LCAxOCwgMTksIDczLCAxODYsIDE4LCAxOSwgCisgICAgNzMsIDIxMCwgMjEyLCAxOCwgMTksIDczLCAyMTAsIDI0NCwgMTgsIDE5LCA3MywgMjExLCA0NywgMTgsIDE5LCA3MywgMjExLCAKKyAgICA0NCwgMTgsIDE5LCA3MywgMjExLCA4LCAxOCwgMTksIDczLCAxOTIsIDE4LCAxOSwgNzMsIDIzNSwgNTcsIDE4LCAxOSwgCisgICAgMjIxLCAyMTEsIDIzNSwgNTcsIDE4LCAxOSwgNzMsIDIzNSwgNzQsIDE4LCAxOSwgNzMsIDIzNSwgMTMyLCAxOCwgMTksIDczLCAKKyAgICAyMzUsIDEzMCwgMTgsIDE5LCA3MywgMjM1LCAxMTQsIDE4LCAxOSwgMjIxLCAyMTEsIDIzNSwgMTE0LCAxOCwgMTksIDczLCAKKyAgICAyMzUsIDE0NywgMTgsIDE5LCA3MywgMjM1LCA4NywgMTgsIDE5LCA3MywgMjM1LCA5MSwgMTgsIDE5LCA3MywgMjM1LCAxMDEsIAorICAgIDE4LCAxOSwgNzMsIDIzNSwgMTAwLCAxOCwgMTksIDczLCAyMzUsIDk5LCAxOCwgMTksIDczLCAyMzUsIDEwMiwgMTgsIDE5LCAKKyAgICA3MywgMjMyLCAxMDMsIDE4LCAxOSwgNzMsIDIzMiwgMTYyLCAxOCwgMTksIDczLCAyMzMsIDY0LCAxOCwgMTksIDczLCAyMzMsIAorICAgIDU2LCAxOCwgMTksIDczLCAyMzIsIDI0NywgMTgsIDE5LCA3MywgMjMzLCAxNDEsIDE4LCAxOSwgNzMsIDI0NywgMTU3LCAxOCwgCisgICAgMTksIDczLCAyNDcsIDE1OCwgMTgsIDE5LCA3MywgMjQ3LCAxNjMsIDE4LCAxOSwgNzMsIDI0NywgMTYyLCAxOCwgMTksIDczLCAKKyAgICAyNDcsIDE1OSwgMTgsIDE5LCA3MywgMjQ3LCAxNjQsIDE4LCAxOSwgNzMsIDIzMiwgMjUwLCAxOCwgMTksIDczLCAyMzIsIAorICAgIDI1MiwgMTgsIDE5LCA3MywgMjMzLCAwLCAxOCwgMTksIDczLCAyMzIsIDI1NSwgMTgsIDE5LCA3MywgMjMyLCAyNTQsIDE4LCAKKyAgICAxOSwgNzMsIDIzMywgNCwgMTgsIDE5LCA3MywgMjE2LCA1MSwgMTgsIDE5LCA3MywgMjE2LCA1MywgMTgsIDE5LCA3MywgCisgICAgMjE2LCA1NiwgMTgsIDE5LCA3MywgMjE2LCA1NSwgMTgsIDE5LCA3MywgMjE2LCA1NCwgMTgsIDE5LCA3MywgMjE2LCA1NywgCisgICAgMTgsIDE5LCA3MywgMjE2LCA0NiwgMTgsIDE5LCA3MywgMjE2LCA0NywgMTgsIDE5LCA3MywgMjE2LCA1OSwgMTgsIDE5LCAKKyAgICA3MywgMjE2LCA1OCwgMTgsIDE5LCA3MywgMjE2LCA0OCwgMTgsIDE5LCA3MywgMjE2LCA2MCwgMTgsIDE5LCA3MywgMjEwLCAKKyAgICAxMywgMTgsIDE5LCA3MywgMjEwLCAyMywgMTgsIDE5LCA3MywgMjEwLCA5NCwgMTgsIDE5LCA3MywgMjEwLCA5MiwgMTgsIAorICAgIDE5LCA3MywgMjEwLCA0NCwgMTgsIDE5LCA3MywgMjEwLCAxMTYsIDE4LCAxOSwgNzMsIDIxMCwgMTU5LCAxOCwgMTksIDczLCAKKyAgICA2NSwgMjEwLCAxNTksIDE4LCAxOSwgNzMsIDI0NiwgMzYsIDE4LCAxOSwgNzMsIDI0NiwgMzcsIDE4LCAxOSwgNzMsIDI0NiwgCisgICAgNDQsIDE4LCAxOSwgNzMsIDI0NiwgNDMsIDE4LCAxOSwgNzMsIDI0NiwgMzksIDE4LCAxOSwgNzMsIDI0NiwgNDYsIDE4LCAKKyAgICAxOSwgNzMsIDIxOCwgODQsIDE4LCAxOSwgNzMsIDIxOSwgNjAsIDE4LCAxOSwgNzMsIDIyMSwgMTgzLCAxOCwgMTksIDczLCAKKyAgICAyMjEsIDE3MiwgMTgsIDE5LCA3MywgMjE5LCAxOTMsIDE4LCAxOSwgNzMsIDIwNiwgMTgsIDE5LCA3MywgMjE5LCAyMjcsIAorICAgIDE4LCAxOSwgNzMsIDIyMCwgOSwgMTgsIDE5LCA3MywgMjIwLCA2NSwgMTgsIDE5LCA3MywgMjIwLCA2MywgMTgsIDE5LCA3MywgCisgICAgMjIwLCAzNCwgMTgsIDE5LCA3MywgMjIwLCAxMDQsIDE4LCAxOSwgNzMsIDIyMCwgMTA2LCAxOCwgMTksIDczLCAyMTUsIAorICAgIDE2NCwgMTgsIDE5LCA3MywgMjE1LCAxNjcsIDE4LCAxOSwgNzMsIDIxNSwgMTc5LCAxOCwgMTksIDczLCAyMTUsIDE3OCwgCisgICAgMTgsIDE5LCA3MywgMjE1LCAxNjgsIDE4LCAxOSwgNzMsIDIxNSwgMTg0LCAxOCwgMTksIDczLCAyNTAsIDc3LCAxOCwgMTksIAorICAgIDczLCAyNTAsIDk0LCAxOCwgMTksIDczLCAyNTAsIDEzOSwgMTgsIDE5LCA3MywgMjUwLCAxMzYsIDE4LCAxOSwgNzMsIDI1MCwgCisgICAgMTE4LCAxOCwgMTksIDczLCAyNTAsIDE2NSwgMTgsIDE5LCA3MywgMjE1LCAxMjcsIDE4LCAxOSwgNzMsIDIxNSwgMTI4LCAKKyAgICAxOCwgMTksIDczLCAyMTUsIDEzMSwgMTgsIDE5LCA3MywgMjE1LCAxMzAsIDE4LCAxOSwgNzMsIDIxNSwgMTI5LCAxOCwgMTksIAorICAgIDczLCAyMTUsIDEzMiwgMTgsIDE5LCAyNTAsIDExOSwgNTAsIDE4LCAxOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxOCwgMTksIAorICAgIDIyNCwgODMsIDE4LCAxOSwgMjI5LCA3OCwgMTgsIDE5LCAyMjgsIDEwNSwgMTgsIDE5LCAyMjgsIDEwNCwgMTgsIDE5LCAKKyAgICAyMjgsIDEwMywgMTgsIDE5LCAyMjgsIDEwMiwgMTgsIDE5LCAyMjgsIDEwNywgMTgsIDE5LCAyMjgsIDEwNiwgMTgsIDE5LCAKKyAgICAyMTEsIDIxMywgMjE2LCAxMjYsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI1LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIAorICAgIDEyNCwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjMsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIyLCAxOCwgMTksIDIxMSwgCisgICAgMjEzLCAyMTYsIDEyOSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjgsIDE4LCAxOSwgMjExLCAyMTMsIDQwLCAyMTYsIAorICAgIDIxMSwgMTgsIDE5LCAyNTEsIDIyNiwgMjEyLCA5OCwgMjI2LCAyMzAsIDIxOSwgMjEsIDc5LCAyMjYsIDIzMCwgMSwgMjUyLCAKKyAgICA1NiwgMjI2LCAyMzAsIDEsIDIzMiwgOTIsIDIyNiwgMjMwLCAxLCAyNDQsIDE1OSwgMjI2LCAyMzAsIDEsIDIyMiwgMTcsIAorICAgIDIyNiwgMjMwLCAxLCAyMjgsIDE5OCwgMjI2LCAyMzAsIDEsIDIxNCwgMjI2LCAyMjYsIDIzMCwgMSwgMjQ4LCAyMDUsIDIyNiwgCisgICAgMjMwLCAxLCAyMTYsIDgxLCAyMjYsIDIzMCwgMSwgMjQ5LCAyMzcsIDIyNiwgMjMwLCAxLCAyNTAsIDE4OCwgMjI2LCAyMzAsIAorICAgIDEsIDIzMCwgOTYsIDIyNiwgMjMwLCAxLCAyNDIsIDE2MywgMjI2LCAyMzAsIDEsIDIyOSwgNjgsIDIyNiwgMjMwLCAxLCAKKyAgICAyMTgsIDEyNCwgMjI2LCAyMzAsIDEsIDIyMiwgMTM3LCAyMjYsIDIzMCwgMSwgMjU0LCAyMDcsIDIyNiwgMjMwLCAxLCAyMjYsIAorICAgIDE5MSwgMjI2LCAyMzAsIDEsIDIxNCwgMTUwLCAyMjYsIDIzMCwgMSwgMjQ1LCAyMzksIDIyNiwgMjMwLCAxLCAyMzUsIDE5NSwgCisgICAgMjI2LCAyMzAsIDEsIDI0NSwgMjQwLCAyMjYsIDIzMCwgMSwgMjI2LCAxNjIsIDIyNiwgMjMwLCAxLCAyMTQsIDIwNiwgMjI2LCAKKyAgICAyMzAsIDEsIDIzNiwgNDYsIDIyNiwgMjMwLCAxLCAyNDUsIDIzNywgMjI2LCAyMzAsIDEsIDIyNSwgMjA1LCAyMjYsIDIzMCwgCisgICAgMjQ0LCAxNTgsIDc5LCAyMjYsIDIzMCwgMjIzLCA1MiwgMjQ0LCAxNTgsIDc5LCAxNzgsIDEsIDI0NCwgMTQ5LCAyNDQsIAorICAgIDE0MSwgMjQ0LCAxNjMsIDI0NSwgMTQsIDE3OCwgMSwgMjE0LCAxMDUsIDE3OCwgMSwgMjE0LCAxMzUsIDIxNCwgMTUxLCA2OSwgCisgICAgMTc4LCAxLCAyMTAsIDIxNCwgMTc4LCAxLCAyMTEsIDExNywgMTc4LCAxLCAyMTIsIDk4LCAxNzgsIDEsIDIxNiwgMTMxLCAKKyAgICAyMTYsIDEzMCwgMjE2LCAxNTIsIDE3OCwgMSwgMjQ1LCA2NywgMTc4LCAxLCAyNTQsIDEwMSwgNjEsIDE3OCwgMSwgMjI2LCAKKyAgICAxNDcsIDc4LCAxNzgsIDEsIDI1NSwgMjYsIDYxLCAxNzgsIDEsIDI1NCwgMjM2LCAxNzgsIDEsIDIzMiwgMTM5LCA3OCwgCisgICAgMTc4LCAxLCAyMTksIDI0NiwgNzgsIDE3OCwgMSwgNzgsIDE3OCwgMSwgMjI2LCAyMzgsIDE3OCwgMSwgMjI2LCAyMDAsIAorICAgIDE3OCwgMSwgMjIzLCAxNjcsIDIyMywgMTgwLCAyMjMsIDk3LCAxNTMsIDE3OCwgMSwgMjM0LCAxOTksIDE3OCwgMSwgMjUwLCAKKyAgICAxODUsIDE3OCwgMSwgMjM0LCAyMDAsIDIzNSwgMjksIDE3OCwgMSwgMjQzLCAyMDksIDE3OCwgMSwgMjQ1LCAxNDYsIDE3OCwgCisgICAgMSwgMjQzLCA2NSwgMjQyLCA3MywgMjQzLCAyMDksIDE3OCwgMSwgMjQzLCAxMDMsIDE3OCwgMSwgMjExLCAxODgsIDIxMSwgCisgICAgMTgyLCAyMTIsIDk4LCAxNzgsIDEsIDI0MiwgNDUsIDI0MiwgNjcsIDE3OCwgMSwgMjQyLCA0OSwgMjQyLCA2NywgMTc4LCAxLCAKKyAgICAyMzIsIDE0MSwgMjQyLCA2NywgMTc4LCAxLCAyMTksIDI0OSwgMjQyLCA2NywgMTc4LCAxLCAyMjksIDE5MCwgMjI3LCAxNjEsIAorICAgIDIyOSwgMTkxLCAyMzAsIDMwLCAxNzgsIDEsIDIxOSwgMjQ3LCAyMzAsIDMwLCAxNzgsIDEsIDI0NiwgMTIzLCAxNzgsIDEsIAorICAgIDIzNSwgMTc1LCAyMzUsIDE3OSwgMjM1LCAxNjgsIDc0LCAxNzgsIDEsIDc2LCAxNzgsIDEsIDIzNSwgMTIzLCAyMzUsIDE1MCwgCisgICAgMTc4LCAxLCAyNDMsIDUwLCAxNzgsIDEsIDIzMiwgMTQyLCAyNTQsIDI1MiwgMTc4LCAxLCAyMTksIDI1MSwgNjEsIDE3OCwgCisgICAgMSwgMjM1LCAxNjAsIDI0NSwgMTIxLCAxNzgsIDEsIDIyNSwgMTY3LCAyMjUsIDE4OSwgMjI2LCAxMDksIDE3OCwgMSwgMjU0LCAKKyAgICAxNzIsIDI0NSwgMTE5LCAxNzgsIDEsIDIxOSwgMjYsIDIyMiwgOTMsIDE3OCwgMSwgMjE5LCAxODEsIDIzMiwgMTM4LCAyMjIsIAorICAgIDkzLCAxNzgsIDEsIDIxOSwgMjQ1LCAyMjIsIDkzLCAxNzgsIDEsIDI1MSwgNzQsIDE3OCwgMSwgMjEwLCAxNTksIDE3OCwgMSwgCisgICAgMjE2LCA2NCwgMjE2LCA3NCwgMjE1LCA0MSwgMjE3LCAxNTMsIDE3OCwgMSwgMjE5LCAyNDQsIDIxNywgMTUzLCAxNzgsIDEsIAorICAgIDI0OSwgNjgsIDE3OCwgMSwgMjUyLCAzOSwgMjUyLCA0MiwgMjUxLCAyMzIsIDI1MywgMTY2LCAxNzgsIDEsIDIxOSwgMjUwLCAKKyAgICAyNTMsIDE2NiwgMTc4LCAxLCAyNDYsIDEyMiwgMTc4LCAxLCAyMjYsIDE3NSwgMTc4LCAxLCAyNDUsIDIwNCwgMjQ1LCAyMDYsIAorICAgIDc2LCAxNzgsIDEsIDIzMSwgMTgzLCAyMzEsIDE5MSwgMTk0LCAxNzgsIDEsIDIzMiwgMTQwLCAxOTQsIDE3OCwgMSwgMjE5LCAKKyAgICAyNDgsIDE5NCwgMTc4LCAxLCAyMzMsIDc5LCAyMzMsIDEyMCwgMjMyLCAxNDksIDE1NiwgMTc4LCAxLCAyNDYsIDEyNCwgCisgICAgMTc4LCAxLCAyMzUsIDIzNywgMTc4LCAxLCAyMzUsIDIzOCwgMTc4LCAxLCAyNDgsIDIxOCwgMjQ4LCAyMjMsIDI0OSwgNjgsIAorICAgIDE3OCwgMSwgMjI2LCAxNDIsIDI0NSwgNjYsIDc4LCAxNzgsIDEsIDI0NSwgMjM1LCAxNzgsIDEsIDIzNSwgMTk0LCAxNzgsIAorICAgIDEsIDI0OSwgODYsIDE3OCwgMSwgMjUxLCAyNSwgMTc4LCAxLCAyNTAsIDE5NywgMTc4LCAxLCAyMTgsIDE2MywgMTc4LCAxLCAKKyAgICAyMzIsIDEzNywgMTc4LCAxLCAyMTksIDI0MywgMTc4LCAxLCAyNDAsIDExNywgMTc4LCAxLCAyMjQsIDk5LCAxNzgsIDEsIAorICAgIDIxMSwgMTc4LCAxNzgsIDIxOSwgMTU3LCAyMjQsIDE0MywgMTc4LCAyMzAsIDkwLCAyMjQsIDE0MywgMTc4LCAyNDksIDEzOSwgCisgICAgMjI0LCAxNDMsIDE3OCwgMjU0LCAxNCwgODcsIDE3OCwgMjE1LCA4MiwgODcsIDE3OCwgMjUyLCA1NCwgODcsIDIxNywgODQsIAorICAgIDEsIDYxLCAyMTcsIDg0LCAxLCA3NCwgMjE3LCA4NCwgMSwgNjksIDIxNywgODQsIDEsIDE3NiwgMjE3LCA4NCwgMSwgMjQzLCAKKyAgICAxNDIsIDIxNywgODQsIDEsIDIyOSwgODIsIDIxNywgODQsIDEsIDIxNywgMTA2LCAyMTcsIDg0LCAxLCAyNDgsIDIyOSwgCisgICAgMjE3LCA4NCwgMSwgMTk4LCAyMTcsIDg0LCAxLCAxOTEsIDIxNywgODQsIDEsIDI1MiwgMTk5LCAyMTcsIDg0LCAxLCAxODYsIAorICAgIDIxNywgODQsIDEsIDE5MiwgMjE3LCA4NCwgMSwgMjMzLCAxNDEsIDIxNywgODQsIDEsIDIxMiwgNjUsIDIxNywgODQsIDEsIAorICAgIDIwNiwgMjE3LCA4NCwgMSwgMTYyLCAyMTcsIDg0LCAyNSwgNSwgNzQsIDIxNywgODQsIDI1LCA1LCA2OSwgMjE3LCA4NCwgNSwgCisgICAgMjEzLCAxNTIsIDI0MiwgMTQsIDEsIDYxLCAyNDIsIDE0LCAxLCA3NCwgMjQyLCAxNCwgMSwgNjksIDI0MiwgMTQsIDEsIAorICAgIDE3NiwgMjQyLCAxNCwgMSwgMjQzLCAxNDIsIDI0MiwgMTQsIDEsIDIyOSwgODIsIDI0MiwgMTQsIDEsIDIxNywgMTA2LCAKKyAgICAyNDIsIDE0LCAxLCAyNDgsIDIyOSwgMjQyLCAxNCwgMSwgMTk4LCAyNDIsIDE0LCAxLCAxOTEsIDI0MiwgMTQsIDEsIDI1MiwgCisgICAgMTk5LCAyNDIsIDE0LCAxLCAxODYsIDI0MiwgMTQsIDEsIDE5MiwgMjQyLCAxNCwgMSwgMjA1LCAyNDIsIDE0LCAxLCAyMzMsIAorICAgIDE0MSwgMjQyLCAxNCwgMSwgMjEyLCA2NSwgMjQyLCAxNCwgMSwgMjA2LCAyNDIsIDE0LCAxLCAxNjIsIDI0MiwgMTQsIDI1LCAKKyAgICA1LCA3NCwgMjQyLCAxNCwgMjUsIDUsIDY5LCAyNDIsIDE0LCA1LCAyMjYsIDUzLCAyMjUsIDEyOSwgMjE5LCAxNTcsIDIyNCwgCisgICAgMTQzLCAyMjUsIDEyOSwgNTIsIDIyNCwgMTQzLCAyNTEsIDEyOCwgMSwgNjEsIDI1MSwgMTI4LCAxLCA3NCwgMjUxLCAxMjgsIAorICAgIDEsIDY5LCAyNTEsIDEyOCwgMSwgMTc2LCAyNTEsIDEyOCwgMSwgMjQzLCAxNDIsIDI1MSwgMTI4LCAxLCAyMjksIDgyLCAKKyAgICAyNTEsIDEyOCwgMSwgMjE3LCAxMDYsIDI1MSwgMTI4LCAxLCAyNDgsIDIyOSwgMjUxLCAxMjgsIDEsIDE5OCwgMjUxLCAxMjgsIAorICAgIDEsIDE5MSwgMjUxLCAxMjgsIDEsIDI1MiwgMTk5LCAyNTEsIDEyOCwgMSwgMTg2LCAyNTEsIDEyOCwgMSwgMTkyLCAyNTEsIAorICAgIDEyOCwgMSwgMjA1LCAyNTEsIDEyOCwgMSwgMjMzLCAxNDEsIDI1MSwgMTI4LCAxLCAyMTIsIDY1LCAyNTEsIDEyOCwgMSwgCisgICAgMjA2LCAyNTEsIDEyOCwgMSwgMTYyLCAyNTEsIDEyOCwgMjUsIDUsIDc0LCAyNTEsIDEyOCwgMjUsIDUsIDY5LCAyMTcsIDgzLCAKKyAgICAxLCA2MSwgMjE3LCA4MywgMSwgNzQsIDIxNywgODMsIDEsIDY5LCAyMTcsIDgzLCAxLCAxNzYsIDIxNywgODMsIDEsIDI0MywgCisgICAgMTQyLCAyMTcsIDgzLCAxLCAyMjksIDgyLCAyMTcsIDgzLCAxLCAyMTcsIDEwNiwgMjE3LCA4MywgMSwgMjQ4LCAyMjksIAorICAgIDIxNywgODMsIDEsIDE5OCwgMjE3LCA4MywgMSwgMTkxLCAyMTcsIDgzLCAxLCAyNTIsIDE5OSwgMjE3LCA4MywgMSwgMTg2LCAKKyAgICAyMTcsIDgzLCAxLCAxOTIsIDIxNywgODMsIDEsIDIzMywgMTQxLCAyMTcsIDgzLCAxLCAyMTIsIDY1LCAyMTcsIDgzLCAxLCAKKyAgICAyMDYsIDIxNywgODMsIDI1LCA1LCA3NCwgMjE3LCA4MywgMjUsIDUsIDY5LCA3MCwgMSwgMTc2LCA3MCwgMSwgMjM0LCAxMzgsIAorICAgIDcwLCAxLCAyMzQsIDM0LCA3MCwgMSwgMjM0LCAxMTEsIDcwLCAxLCAyMjksIDksIDcwLCAxLCAyNTEsIDQxLCA3MCwgMSwgCisgICAgMjUwLCAxNjUsIDcwLCAxLCAyNDksIDI0NiwgNzAsIDEsIDI1MCwgOTQsIDcwLCAxLCAyMjcsIDEzOCwgNzAsIDEsIDI0OCwgCisgICAgMjI5LCA3MCwgMSwgMjE1LCAxNDUsIDcwLCAxLCAyNDcsIDE1MywgNzAsIDEsIDIxNSwgMTQwLCA3MCwgMSwgMjI4LCA4NSwgCisgICAgNzAsIDEsIDIxNywgMTA2LCA3MCwgMSwgMjE2LCAyMDksIDcwLCAxLCAxMTIsIDcwLCAxLCAyMTYsIDE1NywgNzAsIDEsIAorICAgIDIyOCwgNzksIDcwLCAxLCAyNTIsIDE5OSwgNzAsIDEsIDIyNSwgMTUwLCA3MCwgMSwgMjI1LCAxOSwgNzAsIDEsIDIyNSwgCisgICAgMTI0LCA3MCwgMSwgMjMwLCAxNjYsIDcwLCAxLCAyMTAsIDI0NCwgNzAsIDEsIDIyMiwgMjEzLCA3MCwgMSwgMjMyLCAxNjIsIAorICAgIDcwLCAxLCAyMTMsIDEzOCwgNzAsIDEsIDIyMCwgMTA0LCA3MCwgMSwgMjE4LCAxODYsIDcwLCAxLCAyMDYsIDcwLCAxLCAKKyAgICAxNjIsIDcwLCAxLCAyMzMsIDE0MSwgNzAsIDEsIDIyNCwgOTEsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNzcsIDcwLCAyMzUsIAorICAgIDI1MCwgMjUsIDIyNCwgOTAsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNTYsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNTEsIAorICAgIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgMzMsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNSwgNzAsIDIzNSwgMjUwLCAyNSwgCisgICAgMjIzLCAyNDksIDcwLCAyMzUsIDI1MCwgMjUsIDIyMywgMjQ4LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjIsIDEwMiwgNzAsIAorICAgIDIzNSwgMjUwLCAyNSwgMjIyLCA5NSwgNzAsIDIzNSwgMjUwLCAyNSwgMjMyLCA2NywgNzAsIDIzNSwgMjUwLCAyNSwgMjMyLCAKKyAgICA1NywgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA3MiwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA4MywgNzAsIDIzNSwgMjUwLCAKKyAgICAyNSwgMjI0LCA0MSwgMjE1LCA0OSwgMTExLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDQxLCAyMTUsIDQ5LCAxMDUsIDcwLCAKKyAgICAyMzUsIDI1MCwgMjUsIDIyNCwgNzMsIDcwLCAyNSwgMjM1LCAyMzYsIDI1NCwgNTMsIDcwLCAyNSwgMjM1LCAyMzYsIDI1NSwgCisgICAgODIsIDcwLCAyNSwgNSwgMjU1LCA4MiwgNzAsIDI1LCA1LCA3NCwgNzAsIDI1LCA1LCAyMzYsIDQwLCA3MCwgMjUsIDUsIAorICAgIDIxMSwgMTE3LCA3MCwgMjUsIDUsIDIxMCwgMTY5LCA3MCwgMjUsIDUsIDY5LCA3MCwgMjUsIDUsIDIxNCwgMTE4LCA3MCwgCisgICAgMjUsIDUsIDIxNCwgMjI5LCA3MCwgMjUsIDUsIDIyNiwgMjM4LCA3MCwgMjUsIDUsIDE5MiwgNzAsIDI1LCA1LCAyMzYsIDY3LCAKKyAgICA3MCwgMjUsIDUsIDc2LCA3MCwgMjUsIDUsIDI1NCwgMjUyLCA3MCwgMjUsIDUsIDI1NCwgMjEwLCA3MCwgMjUsIDUsIDIyNiwgCisgICAgMTg3LCA3MCwgMjUsIDUsIDI1MywgMjAwLCA3MCwgNSwgMjI4LCAyMTEsIDcwLCA1LCAyMjMsIDEyOSwgNzAsIDUsIDIxMCwgCisgICAgMTgwLCA3MCwgNSwgMjMwLCA1NywgNzAsIDUsIDIxNSwgMjE0LCA3MCwgNSwgMjUyLCAxNTEsIDcwLCA1LCAyMjIsIDIwOCwgCisgICAgNzAsIDUsIDIxNiwgNDEsIDcwLCA1LCAyMzQsIDI0NywgNzAsIDUsIDI1NCwgMjEyLCA3MCwgNSwgMjIxLCAyNDYsIDIyMSwgCisgICAgMjQwLCA3MCwgNSwgMjEzLCAxNDksIDcwLCA1LCAyNDksIDI0MCwgNzAsIDUsIDI1MiwgMTI1LCA3MCwgNSwgMjM0LCAxMzEsIAorICAgIDcwLCA1LCAyNTIsIDE0NSwgNzAsIDUsIDI1MSwgMTcsIDIyNSwgNzUsIDIzMywgMTkzLCA3MCwgNSwgMjMzLCAzNiwgMjE2LCAKKyAgICAxOCwgNzAsIDUsIDI1MiwgMjgsIDcwLCA1LCAyMjUsIDEyNiwgMjMwLCAxMDQsIDcwLCA1LCAyMzQsIDE1LCA3MCwgMjQ5LCAKKyAgICAxMDYsIDE2LCAyMjMsIDMxLCA3MCwgNSwgMjUzLCAxODIsIDcwLCA1LCAyNTMsIDIwMywgNzAsIDIxLCAyMTAsIDg2LCA3MCwgCisgICAgMjEsIDExMSwgNzAsIDIxLCAxMDUsIDcwLCAyMSwgMTU4LCA3MCwgMjEsIDE2MSwgNzAsIDIxLCAxOTAsIDcwLCAyMSwgMTk1LCAKKyAgICA3MCwgMjEsIDE5OSwgNzAsIDIxLCAxOTYsIDcwLCAyMSwgMjAxLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMTksIAorICAgIDQ1LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMzAsIDc2LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjUsIAorICAgIDc0LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyNTIsIDU3LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyNTEsIAorICAgIDExMSwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAyMTgsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgCisgICAgMjEyLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIDIxMCwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAKKyAgICAyMTYsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgMjE0LCA4MywgMjUxLCAyNDQsIDgzLCAyNDUsIDE3MSwgODMsIAorICAgIDI0OSwgMjI3LCA4MywgMjQzLCAyMzYsIDIxOCwgMTMxLCA4MywgMjQ5LCAyMzQsIDgzLCAyNDQsIDE5LCAyNDcsIDEyNiwgCisgICAgODMsIDIxNiwgNDAsIDIxOSwgNTQsIDI0MCwgMTc1LCA4MywgMjE5LCAxOTIsIDMsIDI1MSwgMTgwLCAyMzEsIDE1OSwgODMsIAorICAgIDIzMSwgMTg4LCAyNDksIDIyNywgODMsIDIzMSwgMTg4LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDgzLCAyMjgsIDE5NiwgODMsIAorICAgIDI0NCwgNSwgNDUsIDIyMSwgMTU5LCAxMTEsIDgzLCAyNDQsIDUsIDQ1LCAyMjEsIDE1OSwgMTA1LCA4MywgMjQ0LCA1LCA0NSwgCisgICAgMjIxLCAxNTksIDE1OCwgODMsIDI1LCAyMjAsIDEzOSwgODMsIDIxLCAyMTAsIDg2LCA4MywgMjEsIDExMSwgODMsIDIxLCAKKyAgICAxMDUsIDgzLCAyMSwgMTU4LCA4MywgMjEsIDE2MSwgODMsIDIxLCAxOTAsIDgzLCAyMSwgMTk1LCA4MywgMjEsIDE5OSwgODMsIAorICAgIDIxLCAxOTYsIDgzLCAyMSwgMjAxLCA4MywgMSwgNjEsIDgzLCAxLCA3NiwgODMsIDEsIDc0LCA4MywgMSwgNzgsIDgzLCAxLCAKKyAgICA2OSwgODMsIDEsIDIyNiwgMjM4LCA4MywgMSwgMjE0LCAyMTQsIDgzLCAxLCAyNDUsIDIxNywgODMsIDEsIDE5OCwgODMsIDEsIAorICAgIDI1NCwgMTIzLCA4MywgMSwgMjUyLCAxOTksIDgzLCAxLCAxOTEsIDgzLCAxLCAyMjQsIDkxLCA4MywgMSwgMjQzLCAxNDIsIAorICAgIDgzLCAxLCAxODYsIDgzLCAxLCAyMzMsIDE0MSwgODMsIDEsIDIwNiwgODMsIDEsIDIyMCwgMTA0LCA4MywgMSwgMjE3LCAKKyAgICAxMDYsIDgzLCAxLCAyNDgsIDIyOSwgODMsIDEsIDI1MCwgMTY1LCA4MywgMSwgMjM1LCAxNDcsIDgzLCAxLCAxOTIsIDgzLCAKKyAgICAxLCAyMDUsIDgzLCAxLCAyMTIsIDY1LCA4MywgMSwgMjQ0LCAyMDQsIDgzLCAxLCAxNzYsIDgzLCAxLCAyMzQsIDEzOCwgODMsIAorICAgIDEsIDIxNSwgMTg0LCA4MywgMSwgMjEwLCAxMTYsIDgzLCAxLCAyNDIsIDUzLCA4MywgMSwgMjEwLCAxNiwgODMsIDEsIDIzMywgCisgICAgNCwgODMsIDEsIDIxMCwgNjksIDgzLCAxLCAyNTAsIDExOCwgODMsIDEsIDIxNiwgNDAsIDIwMCwgMjUsIDUwLCA4MywgMSwgCisgICAgMjE2LCA0MCwgNzYsIDgzLCAxLCAyMTYsIDQwLCA3NCwgODMsIDEsIDIxNiwgNDAsIDc4LCA4MywgMSwgMjE2LCA0MCwgNjksIAorICAgIDgzLCAxLCAyMTYsIDQwLCAyMjYsIDIzOCwgODMsIDEsIDIxNiwgNDAsIDIxNCwgMjE0LCA4MywgMSwgMjE2LCA0MCwgMjU0LCAKKyAgICAxMjMsIDgzLCAxLCAyMTYsIDQwLCAyNTIsIDE5OSwgODMsIDEsIDIxNiwgNDAsIDE5MSwgODMsIDEsIDIxNiwgNDAsIDIyNCwgCisgICAgOTEsIDgzLCAxLCAyMTYsIDQwLCAyNDMsIDE0MiwgODMsIDEsIDIxNiwgNDAsIDE4NiwgODMsIDEsIDIxNiwgNDAsIDIxNywgCisgICAgMTA2LCA4MywgMSwgMjE2LCA0MCwgMjQ4LCAyMjksIDgzLCAxLCAyMTYsIDQwLCAyNTAsIDE2NSwgODMsIDEsIDIxNiwgNDAsIAorICAgIDIzNSwgMTQ3LCA4MywgMSwgMjE2LCA0MCwgMjE1LCAxODQsIDgzLCAxLCAyMTYsIDQwLCAxOTIsIDgzLCAxLCAyMTYsIDQwLCAKKyAgICAyMTIsIDY1LCA4MywgMSwgMjE2LCA0MCwgMTc2LCA4MywgMSwgMjE2LCA0MCwgMjQzLCAxMzksIDgzLCAxLCAyMTYsIDQwLCAKKyAgICAyNDIsIDUzLCA4MywgMSwgMjE2LCA0MCwgMjM1LCAxMTMsIDgzLCAxLCAyMTYsIDQwLCAyMjgsIDIzNiwgODMsIDEsIDIxNiwgCisgICAgNDAsIDI0NiwgNDYsIDgzLCAxLCAyMTksIDE5MiwgNzYsIDgzLCAxLCAyMTksIDE5MiwgNzQsIDgzLCAxLCAyMTksIDE5MiwgCisgICAgMjM1LCAxNTgsIDgzLCAxLCAyMTksIDE5MiwgMjE0LCAyMTQsIDgzLCAxLCAyMTksIDE5MiwgNjksIDgzLCAxLCAyMTksIAorICAgIDE5MiwgMjU0LCAxMjMsIDgzLCAxLCAyMTksIDE5MiwgMTc2LCA4MywgMSwgMjE5LCAxOTIsIDI0MywgMTQyLCA4MywgMSwgCisgICAgMjE5LCAxOTIsIDE2MiwgODMsIDEsIDIxOSwgMTkyLCAxOTEsIDgzLCAxLCAyMTksIDE5MiwgMjIwLCAxMDQsIDgzLCAxLCAKKyAgICAyMTksIDE5MiwgMjE3LCAxMDYsIDgzLCAxLCAyMTksIDE5MiwgMjQ4LCAyMjksIDgzLCAxLCAyMTksIDE5MiwgMjM1LCAxNDcsIAorICAgIDgzLCAxLCAyMTksIDE5MiwgMjQ0LCAyMDQsIDgzLCAxLCAyMTksIDE5MiwgMjQzLCAxMzksIDgzLCAxLCAyMTksIDE5MiwgCisgICAgMjQyLCA1MywgODMsIDEsIDIxOSwgMTkyLCAyMTUsIDE4NCwgODMsIDEsIDIxOSwgMTkyLCAyMTAsIDExNiwgODMsIDEsIAorICAgIDIxOSwgMTkyLCAyMjMsIDE4NywgODMsIDEsIDIxOSwgMTkyLCAyNTAsIDE2NSwgODMsIDEsIDIxOSwgMTkyLCAyMTAsIDgyLCAKKyAgICA4MywgMSwgMjMxLCAxODgsIDc0LCA4MywgMSwgMjMxLCAxODgsIDE3NiwgODMsIDEsIDIzMSwgMTg4LCAyMDUsIDgzLCAxLCAKKyAgICAyMzEsIDE4OCwgMjQ0LCAyMDQsIDgzLCAxLCAyMzEsIDE4OCwgMjEwLCA4MiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgCisgICAgMjU0LCA4NCwgMTExLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTMsIDE0OCwgMTExLCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyNDgsIDE5NCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDIzNSwgMjAwLCAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjUyLCAxNjMsIDgzLCAxLCAKKyAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDEzNCwgMjUyLCAxNjMsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDYxLCA4MywgMSwgCisgICAgMjU0LCAxNzEsIDI0MywgMTIzLCA3NCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMTc2LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMjksIDgyLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTEsIDQxLCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMTUsIDE1NywgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE1LCAxNDUsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDI0OCwgMTQzLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMjgsIDExNSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjE3LCAxMDYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMjI5LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAxOTEsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIyNSwgMTUwLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgCisgICAgMTIzLCAyMTgsIDIyNSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIAorICAgIDEyMywgMjEwLCAxMTYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI1NCwgMjE4LCA4MywgMSwgMjE2LCA0MCwgMjU0LCAKKyAgICAxNzEsIDI0MywgMTIzLCAyMTcsIDEwNiwgODMsIDEsIDIxNiwgNDAsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIAorICAgIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0MywgMCwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAKKyAgICAxMjMsIDIyOSwgODIsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTEsIDQxLCA4MywgMSwgMjMxLCAKKyAgICAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjM1LCAxMjAsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAKKyAgICAyMTUsIDE1NywgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMTI3LCA4MywgMSwgMjMxLCAxODgsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE3LCAxMDYsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIAorICAgIDMzLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE4LCAyMjUsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAKKyAgICAxNzEsIDI0MywgMTIzLCAyNDksIDgwLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIAorICAgIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgMTE2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAKKyAgICAxNjMsIDY5LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAxNjMsIDE5MiwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDI1MiwgMjYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMjE5LCA4MywgMSwgMjMxLCAxODgsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgMjMzLCA0LCAxOCwgMTksIDIyNiwgMTEzLCAxOCwgMTksIDI1MywgMTc1LCAxOCwgMTksIAorICAgIDI1NSwgMzcsIDE4LCAxOSwgMjEyLCAyNSwgMTgsIDE5LCAyMjQsIDIyNCwgMTgsIDE5LCAyMjUsIDIzMywgMTgsIDE5LCAKKyAgICAyMjQsIDEwOCwgMTgsIDE5LCAyMTcsIDMyLCAxOCwgMTksIDIzNCwgMTk1LCAxOCwgMTksIDIzMywgMTg1LCAxOCwgMTksIAorICAgIDIzMSwgMTM3LCAxOCwgMTksIDIyOCwgNDIsIDE4LCAxOSwgMjI5LCAxODYsIDE4LCAxOSwgMjMzLCA3NCwgMTgsIDE5LCAKKyAgICAyMTksIDI0LCAxOCwgMTksIDIyMSwgMjEzLCAxOCwgMTksIDIxOSwgMjM0LCAxOCwgMTksIDIyMCwgNjgsIDE4LCAxOSwgCisgICAgMjE5LCAyMDMsIDE4LCAxOSwgMjEwLCAyMjAsIDE4LCAxOSwgMjExLCA1MiwgMTgsIDE5LCAyMjMsIDEzNywgMTgsIDE5LCAKKyAgICAyMjcsIDE3NSwgMTgsIDE5LCAyMjYsIDIyMCwgMjI3LCAxNzUsIDE4LCAxOSwgMjI3LCAxNzQsIDE4LCAxOSwgMjI2LCAyMjAsIAorICAgIDIyNywgMTc0LCAxOCwgMTksIDIyNywgMTczLCAxOCwgMTksIDIyNiwgMjIwLCAyMjcsIDE3MywgMTgsIDE5LCAyMjcsIDE3MiwgCisgICAgMTgsIDE5LCAyMjYsIDIyMCwgMjI3LCAxNzIsIDE4LCAxOSwgMjIyLCAxMDcsIDE4LCAxOSwgMjIyLCAxMDYsIDE4LCAxOSwgCisgICAgMjIyLCAxMDUsIDE4LCAxOSwgMjIyLCAxMDQsIDE4LCAxOSwgMjIyLCAxMDMsIDE4LCAxOSwgMjIyLCAxMTEsIDE4LCAxOSwgCisgICAgMjI2LCAyMjAsIDIyNiwgMTA5LCAxOCwgMTksIDIyNiwgMjIwLCAyMTcsIDE1MywgMTgsIDE5LCAyMjYsIDIyMCwgMjM1LCAKKyAgICAyOSwgMTgsIDE5LCAyMjYsIDIyMCwgMjUxLCA3NCwgMTgsIDE5LCAyMjYsIDIyMCwgMTk0LCAxOCwgMTksIDIyNiwgMjIwLCAKKyAgICAyMzAsIDMwLCAxOCwgMTksIDIyNiwgMjIwLCAyMjIsIDkzLCAxOCwgMTksIDIyNiwgMjIwLCAyMjAsIDEwNiwgMTgsIDE5LCAKKyAgICAyNDUsIDIyNywgMjEyLCA5OCwgMTgsIDE5LCAyMTIsIDcsIDIxMiwgOTgsIDE4LCAxOSwgNDAsIDQsIDIyMiwgMjM2LCAxOCwgCisgICAgMTksIDQwLCAyMjMsIDE2MCwgMjQ3LCAxMjgsIDE4LCAxOSwgMjIzLCAyMjYsIDIyMiwgMTA4LCAxOCwgMTksIDE1OSwgMjMyLCAKKyAgICAxMzMsIDE4LCAxOSwgMTU5LCAyMzMsIDE0MCwgMTgsIDE5LCAyMTYsIDEyNywgMTgsIDE5LCAyMTYsIDEyOSwgMTgsIDE5LCAKKyAgICAyMTUsIDEzNywgMTgsIDE5LCAyMTUsIDEzOSwgMTgsIDE5LCAyMTUsIDE0NCwgMTgsIDE5LCAyMTYsIDUwLCAxOCwgMTksIAorICAgIDIxNiwgNTIsIDE4LCAxOSwgMjIxLCAyMTEsIDIxOSwgMjA4LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDMsIDE4LCAxOSwgCisgICAgMjIxLCAyMTEsIDI0MSwgNjAsIDE4LCAxOSwgNzMsIDI0MiwgODAsIDE4LCAxOSwgNzMsIDI0OCwgNjAsIDI0MywgNjIsIDE4LCAKKyAgICAxOSwgNzMsIDI0MywgMTM5LCAxOCwgMTksIDczLCAyNDIsIDg1LCAxOCwgMTksIDIyMSwgMjExLCAyMzUsIDM5LCAxOCwgMTksIAorICAgIDczLCAyMzUsIDM3LCAxOCwgMTksIDI1MiwgNzYsIDI0OCwgNjAsIDE1NiwgMTgsIDE5LCAyNTIsIDc2LCAyNDgsIDYwLCAKKyAgICAxNTMsIDE4LCAxOSwgNzMsIDI0OCwgNTUsIDIyMiwgOTMsIDIzMiwgMjI5LCAyMTMsIDEyMiwgMjMzLCAxNiwgMjMyLCAyMjksIAorICAgIDEsIDE3NiwgMjMyLCAyMjksIDEsIDIzNCwgMTM4LCAyMzIsIDIyOSwgMSwgMjQzLCAxNDIsIDIzMiwgMjI5LCAxLCAyNDMsIAorICAgIDAsIDIzMiwgMjI5LCAxLCAyMjksIDgyLCAyMzIsIDIyOSwgMSwgMjUxLCA0MSwgMjMyLCAyMjksIDEsIDI1MCwgMTY1LCAKKyAgICAyMzIsIDIyOSwgMSwgMjM1LCAxNDcsIDIzMiwgMjI5LCAxLCAyMzUsIDEyMCwgMjMyLCAyMjksIDEsIDIxMSwgNzEsIDIzMiwgCisgICAgMjI5LCAxLCAyMTcsIDEwNiwgMjMyLCAyMjksIDEsIDIxNiwgMjA5LCAyMzIsIDIyOSwgMSwgMjQ4LCAyMjksIDIzMiwgMjI5LCAKKyAgICAxLCAyNDgsIDMzLCAyMzIsIDIyOSwgMSwgMTk4LCAyMzIsIDIyOSwgMSwgMTkxLCAyMzIsIDIyOSwgMSwgMjI1LCAxNTAsIAorICAgIDIzMiwgMjI5LCAxLCAyNTIsIDE5OSwgMjMyLCAyMjksIDEsIDI1MiwgMjYsIDIzMiwgMjI5LCAxLCAxODYsIDIzMiwgMjI5LCAKKyAgICAxLCAxOTIsIDIzMiwgMjI5LCAxLCAyMDUsIDIzMiwgMjI5LCAxLCAyMzMsIDE0MSwgMjMyLCAyMjksIDEsIDIxMiwgNjUsIAorICAgIDIzMiwgMjI5LCAxLCAyMjAsIDEwNCwgMjMyLCAyMjksIDEsIDIxOCwgMjI1LCAyMzIsIDIyOSwgMSwgMjA2LCAyMzIsIDIyOSwgCisgICAgMSwgMTYyLCAyMzIsIDIyOSwgMjUsIDUsIDYxLCAyMzIsIDIyOSwgMjUsIDUsIDc0LCAyMzIsIDIyOSwgMjUsIDUsIDY5LCAKKyAgICAyMzIsIDIyOSwgMjUsIDUsIDI0NSwgMjE3LCAyMzIsIDIyOSwgMjUsIDUsIDI1NCwgMjEwLCAyMzIsIDIyOSwgMjUsIDUsIAorICAgIDIyNiwgMTg3LCAyMzIsIDIyOSwgMjUsIDUsIDI1MywgMjAwLCAyMzIsIDIyOSwgMjUsIDUsIDc2LCAyMzIsIDIyOSwgMjUsIAorICAgIDUsIDc4LCAyMzIsIDIyOSwgMjE4LCA3NCwgMSwgMTkyLCAyMzIsIDIyOSwgMjE4LCA3NCwgMSwgMjA1LCAyMzIsIDIyOSwgCisgICAgMjE4LCA3NCwgMSwgMjEyLCA2NSwgMjMyLCAyMjksIDQsIDEsIDE3NiwgMjMyLCAyMjksIDQsIDEsIDIyOSwgODIsIDIzMiwgCisgICAgMjI5LCA0LCAxLCAyNTQsIDgzLCAyMzIsIDIyOSwgNCwgMSwgMjE3LCAxMDYsIDIzMiwgMjI5LCA0LCAxLCAxOTgsIDIzMiwgCisgICAgMjI5LCA0LCAxLCAxOTEsIDIzMiwgMjI5LCA0LCAxLCAxODYsIDIzMiwgMjI5LCA0LCAxLCAyMDUsIDIzMiwgMjI5LCA0LCAxLCAKKyAgICAyMzMsIDE0MSwgMjMyLCAyMjksIDUsIDIzMCwgOTQsIDIzMiwgMjI5LCA1LCAyMzQsIDE3NywgMjMyLCAyMjksIDUsIDIyMiwgCisgICAgMzQsIDIzMiwgMjI5LCA1LCAyMzIsIDEzMywgMjMyLCAyMjksIDI0NSwgMzksIDc5LCAyMzIsIDIyOSwgMjI0LCAxNiwgNzksIAorICAgIDIzMiwgMjI5LCAyMSwgMjEwLCA4NiwgMjMyLCAyMjksIDIxLCAxMTEsIDIzMiwgMjI5LCAyMSwgMTA1LCAyMzIsIDIyOSwgCisgICAgMjEsIDE1OCwgMjMyLCAyMjksIDIxLCAxNjEsIDIzMiwgMjI5LCAyMSwgMTkwLCAyMzIsIDIyOSwgMjEsIDE5NSwgMjMyLCAKKyAgICAyMjksIDIxLCAxOTksIDIzMiwgMjI5LCAyMSwgMTk2LCAyMzIsIDIyOSwgMjEsIDIwMSwgMzksIDIzMywgNjUsIDEsIDE3NiwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxMSwgMTY1LCAzOSwgMjMzLCA2NSwgMSwgMjI5LCA4MiwgMzksIDIzMywgNjUsIDEsIDIxNSwgCisgICAgMTg0LCAzOSwgMjMzLCA2NSwgMSwgMjA2LCAzOSwgMjMzLCA2NSwgMSwgMTkyLCAzOSwgMjMzLCA2NSwgMSwgMjE3LCAxMDYsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDIwOSwgMzksIDIzMywgNjUsIDEsIDIzMywgMTQxLCAzOSwgMjMzLCA2NSwgMSwgMTkxLCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjI1LCAxNTAsIDM5LCAyMzMsIDY1LCAxLCAxODYsIDM5LCAyMzMsIDY1LCAxLCAyNDQsIDIwNCwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxNCwgMjcsIDM5LCAyMzMsIDY1LCAxLCAxNjIsIDM5LCAyMzMsIDY1LCAxLCAyMjQsIDkxLCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjM0LCAxMzgsIDM5LCAyMzMsIDY1LCAxLCAyMTUsIDE3NiwgMzksIDIzMywgNjUsIDEsIDE5OCwgCisgICAgMzksIDIzMywgNjUsIDEsIDYxLCAzOSwgMjMzLCA2NSwgMSwgNzQsIDM5LCAyMzMsIDY1LCAxLCAyNDUsIDIxNywgMzksIAorICAgIDIzMywgNjUsIDEsIDI0NSwgMjA1LCAzOSwgMjMzLCA2NSwgMSwgNjksIDM5LCAyMzMsIDY1LCAxLCAyMjYsIDE4NywgMzksIAorICAgIDIzMywgNjUsIDEsIDc4LCAzOSwgMjMzLCA2NSwgMSwgMjE0LCAyMTQsIDM5LCAyMzMsIDY1LCAxLCA3NiwgMzksIDIzMywgCisgICAgNjUsIDEsIDI1MywgMTk4LCAzOSwgMjMzLCA2NSwgMSwgMjU0LCAyMTAsIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI5LCAzOSwgCisgICAgMjMzLCA2NSwgMSwgMjE2LCAyOCwgMzksIDIzMywgNjUsIDEsIDIxNiwgMjcsIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI2LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyNSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIyNCwgOTEsIDE2NiwgMzksIDE3MywgMSwgCisgICAgMTIxLCAyMjQsIDkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTc2LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxNjUsIAorICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjksIDgyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTc2LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyMSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjksIDgyLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgCisgICAgMjE1LCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMDYsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTIsIDE2NiwgMzksIAorICAgIDE3MywgMSwgMTIxLCAyMTUsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAorICAgIDE5MiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNywgMTA2LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE2LCAyMDksIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAxOTgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTcsIDEwNiwgMTY2LCAzOSwgMTczLCAxLCAKKyAgICAxMjEsIDIxNiwgMjA5LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTk4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTkxLCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyNSwgMjI1LCAxNTAsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxODYsIDE2NiwgMzksIDE3MywgMSwgCisgICAgMTIxLCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjUsIDE1MCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE4NiwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjUsIDI0NCwgMjA0LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAKKyAgICAxLCAxMjUsIDIzMywgMTQxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ0LCAyMDQsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKKyAgICAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxNDEsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNjIsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAyNDgsIDIyOSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDI1MiwgMTk5LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ4LCAyMjksIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNTIsIAorICAgIDE5OSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxMzgsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTIxLCAyMzMsIDE5MCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxMSwgMTM4LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyNSwgMjE4LCA4MywgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxOCwgODMsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1LCAKKyAgICAyMTksIDI0MSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCA4MiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjM2LCA0MCwgCisgICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgNjksIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMTE4LCAxNjYsIDM5LCAxNzMsIDI1LCAKKyAgICA1LCA3NiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU0LCAyNTIsIDE2NiwgMzksIDE3MywgMjUsIDUsIDc4LCAxNjYsIDM5LCAKKyAgICAxNzMsIDI1LCA1LCAyMjcsIDQsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMjE0LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAKKyAgICAyNTMsIDE3NSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCAzNywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAxMTEsIAorICAgIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNiwgMTEzLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjcsIDEsIDE2NiwgMzksIDE3MywgCisgICAgMjUsIDUsIDIxNCwgMjEwLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMzUsIDE1OCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjE0LCAKKyAgICAxMDUsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIyOSwgODQsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIzMCwgMzAsIDE2NiwgMzksIAorICAgIDE3MywgMSwgNDAsIDE5NCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjM1LCAyOSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjQ5LCAKKyAgICA2OCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjUzLCAxNjYsIDE2NiwgMzksIDE3MywgMTM4LCAyMzEsIDE2MywgMTY2LCAzOSwgCisgICAgMTczLCAxMzgsIDIzMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDIxLCAyMTAsIDg2LCAxNjYsIDM5LCAxNzMsIDIxLCAxMTEsIAorICAgIDE2NiwgMzksIDE3MywgMjEsIDEwNSwgMTY2LCAzOSwgMTczLCAyMSwgMTU4LCAxNjYsIDM5LCAxNzMsIDIxLCAxNjEsIDE2NiwgCisgICAgMzksIDE3MywgMjEsIDE5MCwgMTY2LCAzOSwgMTczLCAyMSwgMTk1LCAxNjYsIDM5LCAxNzMsIDIxLCAxOTksIDE2NiwgMzksIAorICAgIDE3MywgMjEsIDE5NiwgMTY2LCAzOSwgMTczLCAyMSwgMjAxLCAxNjYsIDM5LCAxNzMsIDg5LCAyMSwgMTExLCAxNjYsIDM5LCAKKyAgICAxNzMsIDUsIDIzMywgMTI2LCAxNjYsIDM5LCAxNzMsIDUsIDIzMywgMTI1LCA3MCwgMTYsIDIyNSwgMjQwLCA3MCwgMTYsIAorICAgIDIzMCwgNzcsIDIzNCwgMzEsIDcwLCAxNiwgMjI1LCA3NSwgMjM0LCAzMSwgNzAsIDE2LCAyNTIsIDU4LCAyMzQsIDMxLCA3MCwgCisgICAgMTYsIDI1MSwgMTEyLCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjE5LCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjEzLCAyMzQsIAorICAgIDMxLCA3MCwgMTYsIDIyNCwgMjExLCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjE3LCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgCisgICAgMjE1LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTgxLCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc3LCAyMzQsIDMxLCA3MCwgCisgICAgMTYsIDI0OCwgMTc2LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc5LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc4LCAyMzQsIAorICAgIDMxLCA3MCwgMTYsIDI0OCwgMTc1LCAyMzQsIDMxLCA3MCwgMTYsIDIxNSwgODcsIDcwLCAxNiwgMjMwLCA3NywgMjIyLCAKKyAgICAyMDcsIDcwLCAxNiwgMjI1LCA3NSwgMjIyLCAyMDcsIDcwLCAxNiwgMjUyLCA1OCwgMjIyLCAyMDcsIDcwLCAxNiwgMjUxLCAKKyAgICAxMTIsIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjE5LCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxMywgMjIyLCAyMDcsIAorICAgIDcwLCAxNiwgMjI0LCAyMTEsIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjE3LCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxNSwgCisgICAgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxODEsIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTc3LCAyMjIsIDIwNywgNzAsIDE2LCAKKyAgICAyNDgsIDE3NiwgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxNzksIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTc4LCAyMjIsIAorICAgIDIwNywgNzAsIDE2LCAyNDgsIDE3NSwgMjIyLCAyMDcsIDI1MSwgMTI5LCAxLCAxNzYsIDI1MSwgMTI5LCAxLCAyNDMsIDE0MiwgCisgICAgMjUxLCAxMjksIDEsIDIyOSwgODIsIDI1MSwgMTI5LCAxLCAyMjksIDI3LCAyNTEsIDEyOSwgMSwgMTkxLCAyNTEsIDEyOSwgCisgICAgMSwgMjUyLCAxOTksIDI1MSwgMTI5LCAxLCAxODYsIDI1MSwgMTI5LCAxLCAyMzAsIDExMCwgMjUxLCAxMjksIDEsIDIxNywgCisgICAgMTA2LCAyNTEsIDEyOSwgMSwgMjQ4LCAyMjksIDI1MSwgMTI5LCAxLCAxOTgsIDI1MSwgMTI5LCAxLCAyMjgsIDQxLCAyNTEsIAorICAgIDEyOSwgMSwgMjUxLCA0MSwgMjUxLCAxMjksIDEsIDIzNSwgMTQ3LCAyNTEsIDEyOSwgMSwgMjI3LCAxNjksIDI1MSwgMTI5LCAKKyAgICAxLCAyMjcsIDE2MiwgMjUxLCAxMjksIDEsIDE5MiwgMjUxLCAxMjksIDEsIDIwNSwgMjUxLCAxMjksIDEsIDIzMywgMTQxLCAKKyAgICAyNTEsIDEyOSwgMSwgMjE0LCAyNywgMjUxLCAxMjksIDEsIDIwNiwgMjUxLCAxMjksIDEsIDYxLCAyNTEsIDEyOSwgMSwgCisgICAgMTYyLCAyNTEsIDEyOSwgMjUsIDUsIDc0LCAyNTEsIDEyOSwgMjUsIDUsIDY5LCAyNTEsIDEyOSwgMjUsIDUsIDc2LCAyNTEsIAorICAgIDEyOSwgMjUsIDUsIDc4LCAyNTEsIDEyOSwgMjUsIDUsIDI1NCwgMjUyLCAyNTEsIDEyOSwgMjI2LCA2NCwgMjUxLCAxMjksIAorICAgIDI0NSwgMTUxLCA2NCwgMjIxLCAxNzQsIDM5LCA4OSwgMSwgMTI1LCAxNzYsIDM5LCA4OSwgMSwgMTI1LCAyMzQsIDEzOCwgCisgICAgMzksIDg5LCAxLCAxMjUsIDIzMywgMTc3LCAzOSwgODksIDEsIDEyMSwgMTc2LCAzOSwgODksIDEsIDEyMSwgMjMzLCAxNzcsIAorICAgIDM5LCA4OSwgMSwgMTIxLCAyMzQsIDEzOCwgMzksIDg5LCAxLCAyMjksIDgyLCAzOSwgODksIDEsIDEyNSwgMjUxLCA0MSwgCisgICAgMzksIDg5LCAxLCAxMjUsIDI1MCwgMTY1LCAzOSwgODksIDEsIDEyMSwgMjUxLCA0MSwgMzksIDg5LCAxLCAxMjEsIDIwNiwgCisgICAgMzksIDg5LCAxLCAxMjEsIDI1MCwgMTY1LCAzOSwgODksIDEsIDIyNywgMTY5LCAzOSwgODksIDEsIDIyMywgMTQzLCAzOSwgCisgICAgODksIDEsIDEyNSwgMjIzLCAxNDEsIDM5LCA4OSwgMSwgMjQ4LCAyMjksIDM5LCA4OSwgMSwgMTIxLCAyMjMsIDE0MSwgMzksIAorICAgIDg5LCAxLCAyMjMsIDE1MiwgMzksIDg5LCAxLCAxMjUsIDIxNywgMTA2LCAzOSwgODksIDEsIDEyNSwgMjE2LCAyMDksIDM5LCAKKyAgICA4OSwgMSwgMTIxLCAyMTcsIDEwNiwgMzksIDg5LCAxLCAxMjEsIDIxNiwgMjA5LCAzOSwgODksIDEsIDE5OCwgMzksIDg5LCAKKyAgICAxLCAyNTIsIDE5OSwgMzksIDg5LCAxLCAxMjUsIDE5MSwgMzksIDg5LCAxLCAxMjUsIDIyNSwgMTUwLCAzOSwgODksIDEsIAorICAgIDEyNSwgMjQ0LCAyMDQsIDM5LCA4OSwgMSwgMTIxLCAxOTEsIDM5LCA4OSwgMSwgMTIxLCAyNDQsIDIwNCwgMzksIDg5LCAxLCAKKyAgICAxMjEsIDIyNSwgMTUwLCAzOSwgODksIDEsIDE4NiwgMzksIDg5LCAxLCAxMjEsIDE5MiwgMzksIDg5LCAxLCAxMjUsIDE5MiwgCisgICAgMzksIDg5LCAxLCAyMDUsIDM5LCA4OSwgMSwgMjIyLCAxMzksIDM5LCA4OSwgMSwgMjMzLCAxNDEsIDM5LCA4OSwgMSwgMjMyLCAKKyAgICA5OCwgMzksIDg5LCAxLCAyMTIsIDY1LCAzOSwgODksIDEsIDEyNSwgMjIwLCAxMDQsIDM5LCA4OSwgMSwgMTI1LCAyMTgsIAorICAgIDIyNSwgMzksIDg5LCAxLCAxMjUsIDIwNiwgMzksIDg5LCAxLCAxMjUsIDE2MiwgMzksIDg5LCAxLCAyMzIsIDE5MCwgMzksIAorICAgIDg5LCAxLCA2MSwgMzksIDg5LCAxLCAxMjEsIDE2MiwgMzksIDg5LCAxLCA3NCwgMzksIDg5LCAxLCAyMzYsIDQwLCAzOSwgCisgICAgODksIDEsIDY5LCAzOSwgODksIDEsIDIxNCwgMTE4LCAzOSwgODksIDEsIDI0NSwgMjE3LCAzOSwgODksIDEsIDIyNiwgMTg3LCAKKyAgICAzOSwgODksIDEsIDIzMywgMTI2LCAzOSwgODksIDEsIDI0MiwgMTM5LCAyMDYsIDM5LCA4OSwgMTE3LCA1LCAxNDcsIDIwNSwgCisgICAgMzksIDg5LCAxMTcsIDUsIDE0NywgMjMzLCAxNDEsIDM5LCA4OSwgMTE3LCA1LCAyMzMsIDE0MiwgMjE3LCA1OSwgMjMzLCAKKyAgICAxMTUsIDM5LCA4OSwgNSwgMjMxLCAyMDksIDIzNCwgMjM3LCAyMzMsIDExNSwgMzksIDg5LCAxMTcsIDUsIDQwLCAyMjksIAorICAgIDgyLCAzOSwgODksIDExNywgNSwgMTIxLCAxOTEsIDM5LCA4OSwgMTE3LCA1LCAxMjUsIDIyMywgMTQyLCAxNzcsIDEyMSwgCisgICAgMTkxLCAzOSwgODksIDExNywgNSwgMTg2LCAzOSwgODksIDExNywgNSwgMjUyLCAxOTksIDM5LCA4OSwgMTE3LCA1LCAyMDYsIAorICAgIDM5LCA4OSwgNSwgMjIyLCAxMiwgMzksIDg5LCAyNSwgNSwgNjEsIDM5LCA4OSwgMjUsIDUsIDIzMSwgMjA5LCAyMjEsIDIyOCwgCisgICAgMzksIDg5LCAyNSwgNSwgMjU1LCA4MiwgMzksIDg5LCAyNSwgNSwgMjE3LCA2NSwgMjU1LCA4MiwgMzksIDg5LCAyNSwgNSwgCisgICAgNzQsIDM5LCA4OSwgMjUsIDUsIDIzNiwgNDAsIDM5LCA4OSwgMjUsIDUsIDIxNCwgMjE0LCAzOSwgODksIDI1LCA1LCAyMTQsIAorICAgIDExNywgMzksIDg5LCAyNSwgNSwgNjksIDM5LCA4OSwgMjUsIDUsIDIxNCwgMTE4LCAzOSwgODksIDI1LCA1LCA3OCwgMzksIAorICAgIDg5LCAyNSwgNSwgMjI3LCA1LCA1MSwgMzksIDg5LCAyNSwgNSwgMjI2LCAxMTMsIDM5LCA4OSwgMjUsIDUsIDc2LCAzOSwgCisgICAgODksIDI1LCA1LCAyNTQsIDI1MiwgMzksIDg5LCAyNSwgNSwgMjI2LCAxODcsIDM5LCA4OSwgMjUsIDUsIDI1NCwgMjEwLCAKKyAgICAzOSwgODksIDI1LCA1LCA4OSwgMjU0LCAyMTAsIDM5LCA4OSwgMjUsIDUsIDIyNywgNSwgNDgsIDM5LCA4OSwgNSwgMjMxLCAKKyAgICAyMDksIDIzNCwgMjM2LCAzOSwgODksIDUsIDIxNiwgMzAsIDM5LCA4OSwgNSwgMjE2LCAyOSwgMzksIDg5LCA1LCAyMzQsIAorICAgIDEwMywgMjE2LCAyOCwgMzksIDg5LCA1LCAyMzQsIDEwMywgMjE2LCAyNywgMzksIDg5LCA1LCAyMzQsIDEwMywgMjE2LCAyNiwgCisgICAgMzksIDg5LCA1LCAyMjMsIDE5MSwgMjQyLCA1MiwgMzksIDg5LCA1LCAyMzEsIDIwOSwgMjIxLCAyNTUsIDM5LCA4OSwgNSwgCisgICAgMjM0LCAxMDIsIDIzNCwgMjIxLCAzOSwgODksIDM4LCAyNDksIDEyMywgMjQ3LCAxMjgsIDM5LCA4OSwgMjQxLCA1MywgMjEsIAorICAgIDIxMCwgODYsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDExMSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTA1LCAzOSwgODksIDI0MSwgCisgICAgNTMsIDIxLCAxNTgsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE2MSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTkwLCAzOSwgODksIAorICAgIDI0MSwgNTMsIDIxLCAxOTUsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE5OSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTk2LCAzOSwgCisgICAgODksIDI0MSwgNTMsIDIxLCAyMDEsIDM5LCA4OSwgODksIDIxLCAyMTAsIDg2LCAzOSwgODksIDg5LCAyMSwgMTExLCAzOSwgCisgICAgODksIDg5LCAyMSwgMTA1LCAzOSwgODksIDg5LCAyMSwgMTU4LCAzOSwgODksIDg5LCAyMSwgMTYxLCAzOSwgODksIDg5LCAKKyAgICAyMSwgMTkwLCAzOSwgODksIDg5LCAyMSwgMTk1LCAzOSwgODksIDg5LCAyMSwgMTk5LCAzOSwgODksIDg5LCAyMSwgMTk2LCAKKyAgICAzOSwgODksIDg5LCAyMSwgMjAxLCAzOSwgODksIDUsIDIxMSwgMjQ5LCAzOSwgODksIDUsIDIxMSwgMjQ4LCAzOSwgODksIDUsIAorICAgIDIyMSwgMjE3LCAzOSwgODksIDUsIDIzNCwgMTY2LCAzOSwgODksIDUsIDI0MCwgMjM5LCAzOSwgODksIDUsIDI0NywgMTQyLCAKKyAgICAzOSwgODksIDUsIDIyMywgNTIsIDIyMiwgMTg5LCAyMjMsIDE1MiwgMzksIDg5LCA1LCAyMzEsIDIwOSwgMjExLCA3MiwgMzksIAorICAgIDg5LCA1LCAyMzUsIDEyLCAzOSwgODksIDUsIDIzNSwgMTEsIDM5LCA4OSwgNSwgMjIxLCAyMjQsIDM5LCA4OSwgNSwgMjIxLCAKKyAgICAyMjMsIDM5LCA4OSwgNSwgMjQyLCAxNiwgMzksIDg5LCA1LCAyNTEsIDM4LCAxMDIsIDUsIDIxNCwgMjAwLCAyMjMsIDMzLCAKKyAgICAxMDIsIDUsIDIxNCwgMjAwLCAyNTEsIDksIDEwMiwgNSwgMjUwLCAxOTQsIDEwMiwgNSwgMjE4LCAxNiwgMTAyLCA1LCAyNTEsIAorICAgIDI0MSwgMTAyLCAxLCAyNTQsIDE5MywgMTAyLCAxLCAyNTQsIDE5NCwgMjE3LCAxNCwgMTAyLCAxLCAyMzYsIDM2LCAxMDIsIAorICAgIDEsIDIzNiwgMzcsIDIxNywgMTQsIDEwMiwgMSwgMjE0LCAyMDMsIDEwMiwgMSwgMjE0LCAyMDQsIDIxNywgMTQsIDEwMiwgMSwgCisgICAgMjIzLCAxOTEsIDIyMywgODIsIDEwMiwgMSwgMjIzLCAxOTEsIDIyMywgODMsIDIxNywgMTQsIDEwMiwgMSwgMjMzLCAxNDIsIAorICAgIDIzMywgMzAsIDEwMiwgMSwgMjMzLCAxNDIsIDIzMywgMzEsIDIxNywgMTQsIDEwMiwgMSwgMjQ1LCAxODcsIDEwMiwgMSwgCisgICAgMjU0LCAyMDgsIDEwMiwgMSwgMjI2LCAyMTYsIDEwMiwgMSwgMjI2LCAyMTcsIDIxNywgMTQsIDEwMiwgMSwgMTc2LCAxMDIsIAorICAgIDEsIDIzNSwgMTksIDIzMSwgMjEyLCAxMDIsIDEsIDI0MywgMTQyLCAxMDIsIDEsIDI0MywgMTQzLCAyNDIsIDE2OCwgMTAyLCAKKyAgICAxLCAyMjksIDgyLCAxMDIsIDEsIDI1MSwgNDEsIDEwMiwgMSwgMjUxLCA0MiwgMjMzLCAxMjksIDEwMiwgMSwgMjM1LCAxNDcsIAorICAgIDEwMiwgMSwgMjM1LCAxNDgsIDIzNSwgMTI0LCAxMDIsIDEsIDIyNywgMTY5LCAxMDIsIDEsIDIxNywgMTA3LCAyMzMsIDgyLCAKKyAgICAxMDIsIDEsIDIxNywgMTA3LCAyMzAsIDcyLCAyMzEsIDIxMiwgMTAyLCAxLCAyNDgsIDIzMCwgMjMwLCA3MiwgMjU0LCAxNTMsIAorICAgIDEwMiwgMSwgMjQ4LCAyMzAsIDIzMCwgNzIsIDIzMSwgMjEyLCAxMDIsIDEsIDIyOSwgMjM0LCAyMjMsIDE1NSwgMTAyLCAxLCAKKyAgICAyMTcsIDEwNiwgMTAyLCAxLCAyMTcsIDEwNywgMjE3LCAzNiwgMTAyLCAxLCAyNDgsIDIyOSwgMTAyLCAxLCAyNDgsIDIzMCwgCisgICAgMjMxLCAyMzAsIDEwMiwgMSwgMTk4LCAxMDIsIDEsIDE5MSwgMTAyLCAxLCAyMjYsIDk0LCAyMzQsIDIzMiwgMTAyLCAxLCAKKyAgICAyNTIsIDE5OSwgMTAyLCAxLCAyNTIsIDIwMCwgMjM0LCAxNzgsIDEwMiwgMSwgMTg2LCAxMDIsIDEsIDE5MiwgMTAyLCAxLCAKKyAgICAyMDUsIDEwMiwgMSwgMjMzLCAxNDEsIDEwMiwgMSwgMjEyLCA2NSwgMTAyLCAxLCAyMjIsIDM2LCAyMjIsIDIyLCAxMDIsIDEsIAorICAgIDIyMiwgMzYsIDIyMSwgMjM1LCAxMDIsIDEsIDIwNiwgMTAyLCAxLCAxNjIsIDEwMiwgNSwgMjIzLCA3MywgMTAyLCAyNSwgNSwgCisgICAgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjE0LCAxOTksIDEwMiwgMjUsIDUsIDIxNCwgMjAwLCAyMjEsIDIzMSwgMTAyLCAyNSwgCisgICAgNSwgMjE4LCA0OCwgMTAyLCAyNSwgNSwgMjE4LCA0OSwgMjM2LCAyOCwgMTAyLCAyNSwgNSwgMjIzLCAxOTEsIDIyMywgODIsIAorICAgIDEwMiwgMjUsIDUsIDIyMywgMTkxLCAyMjMsIDgzLCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMzMsIDE0MiwgMjMzLCAzMCwgCisgICAgMTAyLCAyNSwgNSwgMjMzLCAxNDIsIDIzMywgMzEsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIxNywgNjYsIDEwMiwgMjUsIDUsIAorICAgIDIxNywgNjcsIDIyMywgODIsIDEwMiwgMjUsIDUsIDIxNywgNjcsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIxNywgNjcsIDIyMywgCisgICAgODMsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIyNSwgMTg3LCAxMDIsIDI1LCA1LCAyMjUsIDE4OCwgMjE3LCAxNCwgMTAyLCAKKyAgICAyNTUsIDMsIDI1NSwgMiwgMTAyLCAxLCAyMzUsIDEsIDIyMSwgMjMwLCAxMDIsIDEsIDIzNCwgMTA4LCAyMjEsIDIzMCwgCisgICAgMTAyLCAxLCAyMTUsIDM0LCAyMjEsIDIzMCwgMTAyLCAxLCAyNDUsIDIxMSwgMjIxLCAyMzAsIDEwMiwgMSwgMjE0LCAwLCAKKyAgICAyMjEsIDIzMCwgMTAyLCAxLCAyMTAsIDEwNywgMjIxLCAyMzAsIDEwMiwgMSwgMjUzLCAyMTcsIDIyMSwgMjMwLCAxMDIsIAorICAgIDIxLCAyMTAsIDg2LCAxMDIsIDIxLCAxMTEsIDEwMiwgMjEsIDEwNSwgMTAyLCAyMSwgMTU4LCAxMDIsIDIxLCAxNjEsIDEwMiwgCisgICAgMjEsIDE5MCwgMTAyLCAyMSwgMTk1LCAxMDIsIDIxLCAxOTksIDEwMiwgMjEsIDE5NiwgMTAyLCAyMSwgMjAxLCAxMDIsIAorICAgIDIyNiwgMzMsIDEwMiwgMjI2LCA1OSwgMTAyLCAyMTEsIDIzOCwgMTAyLCAyNTAsIDI0NCwgMjI2LCA1MiwgMTAyLCAyNTAsIAorICAgIDI0NCwgMjE5LCAxNzQsIDEwMiwgMjUwLCAyNDQsIDIyNiwgNiwgMTAyLCAyMjYsIDU4LCAxMDIsIDI4LCAxNiwgMjQ3LCAKKyAgICAxMzQsIDEwMiwgMjgsIDE2LCAyNDgsIDU5LCAxMDIsIDI4LCAxNiwgMjQ2LCA3MiwgMTAyLCAyOCwgMTYsIDI0OCwgMTg0LCAKKyAgICAxMDIsIDI4LCAxNiwgMjQ4LCAxODUsIDIxOCwgMTYsIDEwMiwgMjgsIDE2LCAyNDcsIDIxMywgMTAyLCAyOCwgMTYsIDI0OCwgCisgICAgMjIyLCAxMDIsIDI4LCAxNiwgMjQ4LCA0MSwgMTAyLCAyOCwgMTYsIDI0OCwgMjA2LCAxMDIsIDI4LCAxNiwgMjQ4LCAxODUsIAorICAgIDI0MywgNjQsIDEwMiwgMjgsIDE2LCAzOCwgMjE3LCAxMCwgMTAyLCAyOCwgMTYsIDM4LCAyNDUsIDE0OSwgMTAyLCAyOCwgCisgICAgMTYsIDM4LCAyMzQsIDE3MywgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3NSwgMTAyLCAyOCwgMTYsIDM4LCAyMzUsIDEyOCwgCisgICAgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3NCwgMiwgMjM1LCAxMjgsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzYsIDIsIAorICAgIDIzNSwgMTI4LCAxMDIsIDI4LCAxNiwgMzgsIDI1MiwgNDUsIDEwMiwgMjgsIDE2LCAzOCwgMjQyLCAxNzIsIDEwMiwgMjgsIAorICAgIDE2LCAyMjIsIDI1MiwgMjA0LCAyNDYsIDgyLCAxMDIsIDI4LCAxNiwgMjIyLCAyNTIsIDIwNCwgMjQ4LCAyMjAsIDEwMiwgCisgICAgMjgsIDE2LCAyMjIsIDI1MiwgMjUwLCA4LCAyMTUsIDExMiwgMTAyLCAyOCwgMTYsIDIyMiwgMjUyLCAyNTAsIDgsIDIxNywgCisgICAgNzQsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyMDQsIDIyNiwgNDcsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyMDQsIDIyNCwgCisgICAgMTQyLCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjUwLCA4LCAyMjUsIDQxLCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjUwLCA4LCAKKyAgICAyMjUsIDI5LCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjA0LCAyMjUsIDY0LCAyMDcsIDUsIDIyNiwgMzAsIDIwNywgNSwgCisgICAgMjI2LCA0MywgMjA3LCA1LCAyMjYsIDM5LCAyMDcsIDEsIDYxLCAyMDcsIDEsIDc0LCAyMDcsIDEsIDY5LCAyMDcsIDEsIAorICAgIDI1NCwgMjUyLCAyMDcsIDEsIDc4LCAyMDcsIDEsIDc2LCAyMDcsIDEsIDI0NSwgNjMsIDIwNywgMSwgMTc2LCAyMDcsIDEsIAorICAgIDIyNCwgOTEsIDIwNywgMSwgMjQzLCAxNDIsIDIwNywgMSwgMjI5LCA4MiwgMjA3LCAxLCAyNTEsIDQxLCAyMDcsIDEsIDIzNSwgCisgICAgMTQ3LCAyMDcsIDEsIDIxMCwgMTE2LCAyMDcsIDEsIDIyNywgMTY5LCAyMDcsIDEsIDIxNywgMTA2LCAyMDcsIDEsIDI0OCwgCisgICAgMjI5LCAyMDcsIDEsIDE5OCwgMjA3LCAxLCAxOTEsIDIwNywgMSwgMjQ0LCAyMDQsIDIwNywgMSwgMjE0LCAyNywgMjA3LCAxLCAKKyAgICAyNTIsIDE5OSwgMjA3LCAxLCAxODYsIDIwNywgMSwgMTkyLCAyMDcsIDEsIDIwNSwgMjA3LCAxLCAyMzMsIDE0MSwgMjA3LCAKKyAgICAxLCAyMTIsIDY1LCAyMDcsIDEsIDIwNiwgMjA3LCAxLCAyMTEsIDE2NSwgMjA3LCAxLCAxNjIsIDIwNywgMTE3LCA1LCAyMjYsIAorICAgIDU2LCAyMDcsIDExNywgNSwgMjI2LCAzMiwgMjA3LCAxMTcsIDUsIDIyNiwgMjksIDIwNywgMjUsIDUsIDIyNiwgNDYsIDIwNywgCisgICAgMjUsIDUsIDIyNiwgMjgsIDIwNywgMjUsIDUsIDIyNiwgNTAsIDIwNywgMjUsIDUsIDIyNiwgMzgsIDIwNywgMjUsIDUsIAorICAgIDIyNiwgNTcsIDIwNywgMjUsIDUsIDIyNiwgNDgsIDIwNywgNSwgMjI2LCA2MCwgMjA3LCA1LCAyMTMsIDE1MiwgMjA3LCAKKyAgICAxMTcsIDUsIDIyNSwgMjUyLCAxODYsIDIwNywgMTE3LCA1LCAyMjUsIDI1MiwgMjEyLCA2NSwgMjA3LCAxLCAyMzQsIDEzOCwgCisgICAgMjA3LCAxLCAyMTcsIDIzMiwgMjA3LCAyMSwgMjEwLCA4NiwgMjA3LCAyMSwgMTExLCAyMDcsIDIxLCAxMDUsIDIwNywgMjEsIAorICAgIDE1OCwgMjA3LCAyMSwgMTYxLCAyMDcsIDIxLCAxOTAsIDIwNywgMjEsIDE5NSwgMjA3LCAyMSwgMTk5LCAyMDcsIDIxLCAKKyAgICAxOTYsIDIwNywgMjEsIDIwMSwgMjA3LCAyNTMsIDE4MywgMjA3LCAxLCAyMjMsIDU1LCAyMDcsIDEsIDIzMywgMTMsIDIwNywgCisgICAgMSwgMjUyLCAyNiwgMjA3LCAxLCA0MCwgMjM1LCAyOSwgMjA3LCAxLCA0MCwgMTk0LCAyNTIsIDEyOCwgMSwgNjEsIDI1MiwgCisgICAgMTI4LCAxLCAyMTksIDE2NiwgNjEsIDI1MiwgMTI4LCAxLCAxNjIsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMTYyLCAyNTIsIAorICAgIDEyOCwgMSwgMjMxLCAxODYsIDE2MiwgMjUyLCAxMjgsIDEsIDI1MiwgMTk5LCAyNTIsIDEyOCwgMSwgMjM0LCAyMTgsIDI1MiwgCisgICAgMTk5LCAyNTIsIDEyOCwgMSwgMTkxLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDE5MSwgMjUyLCAxMjgsIDEsIDE5OCwgMjUyLCAKKyAgICAxMjgsIDEsIDIzMSwgMTg2LCAxOTgsIDI1MiwgMTI4LCAxLCAyMTIsIDY1LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIxMiwgCisgICAgNjUsIDI1MiwgMTI4LCAxLCAyMjYsIDcxLCAyMTIsIDY1LCAyNTIsIDEyOCwgMSwgMjQzLCAxNDIsIDI1MiwgMTI4LCAxLCAKKyAgICAyMTksIDE2NiwgMjQzLCAxNDIsIDI1MiwgMTI4LCAxLCAyMzUsIDE0NywgMjUyLCAxMjgsIDEsIDI0OCwgMjI5LCAyNTIsIAorICAgIDEyOCwgMSwgMjA1LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIwNSwgMjUyLCAxMjgsIDEsIDE4NiwgMjUyLCAxMjgsIDEsIAorICAgIDIxOSwgMTY2LCAxODYsIDI1MiwgMTI4LCAxLCAyMTksIDI4LCAyMTcsIDEwNiwgMjUyLCAxMjgsIDEsIDIyOCwgNjAsIDIxNywgCisgICAgMTA2LCAyNTIsIDEyOCwgMSwgMjA2LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIwNiwgMjUyLCAxMjgsIDEsIDIzMSwgMTg2LCAKKyAgICAyMDYsIDI1MiwgMTI4LCAxLCAxOTIsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMTkyLCAyNTIsIDEyOCwgMSwgMjI5LCA4MiwgCisgICAgMjUyLCAxMjgsIDEsIDIzMywgMTQxLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIzMywgMTQxLCAyNTIsIDEyOCwgMSwgMjI3LCAKKyAgICAxNjksIDI1MiwgMTI4LCAxLCAyNTEsIDQxLCAyNTIsIDEyOCwgMSwgMjI5LCAxNTMsIDI1MiwgMTI4LCAxLCAyMzEsIDEyOSwgCisgICAgMjUyLCAxMjgsIDEsIDc0LCAyNTIsIDEyOCwgMSwgNjksIDI1MiwgMTI4LCA1LCAyMTYsIDM0LCAyNTIsIDEyOCwgMjUsIDUsIAorICAgIDc2LCAyNTIsIDEyOCwgMjUsIDUsIDIyNiwgNzEsIDc2LCAyNTIsIDEyOCwgMjUsIDUsIDI0NSwgMjE3LCAyNTIsIDEyOCwgCisgICAgMjUsIDUsIDc0LCAyNTIsIDEyOCwgMjUsIDUsIDIzNCwgMjE4LCA3NCwgMjUyLCAxMjgsIDI1LCA1LCA3OCwgMjUyLCAxMjgsIAorICAgIDI1LCA1LCAyMzQsIDIxOCwgNzgsIDI1MiwgMTI4LCAyNSwgNSwgNjksIDI1MiwgMTI4LCAyNSwgNSwgMTA0LCAzMSwgMjE5LCAKKyAgICAxNjYsIDIwNiwgMjUyLCAxMjgsIDExNywgNSwgMjI5LCA4NCwgMjUyLCAxMjgsIDExNywgNSwgMjQyLCA2NywgMjUyLCAxMjgsIAorICAgIDIyNiwgNDEsIDI1MiwgMTI4LCAyMjYsIDM3LCAyNTIsIDEyOCwgMTYsIDI1MSwgMjQ5LCAyMjksIDIzNCwgMjMxLCA0MiwgCisgICAgMjUyLCAxMjgsIDE2LCAyNTEsIDI0OSwgMjI1LCA2NywgMjUyLCAxMjgsIDE2LCAyNTEsIDI0OSwgMjM1LCA1NCwgMjUyLCAKKyAgICAxMjgsIDE2LCAyNTEsIDI0OSwgMjI2LCA0MSwgMTk3LCAxLCAxNzYsIDE5NywgMSwgMjM0LCA0NSwgMTk3LCAxLCAyMzQsIAorICAgIDEzOCwgMTk3LCAxLCAyNDMsIDE0MiwgMTk3LCAxLCAyNDIsIDE5MywgMTk3LCAxLCAyMjksIDgyLCAxOTcsIDEsIDI1MSwgCisgICAgNDEsIDE5NywgMSwgMjUwLCAxNjUsIDE5NywgMSwgMjM1LCAxNDcsIDE5NywgMSwgMjI3LCAxNjksIDE5NywgMSwgMjE3LCAKKyAgICAxMDYsIDE5NywgMSwgMjE2LCAyMDksIDE5NywgMSwgMjQ4LCAyMjksIDE5NywgMSwgMTk4LCAxOTcsIDEsIDE5MSwgMTk3LCAKKyAgICAxLCAyMjUsIDQ1LCAxOTcsIDEsIDIyNSwgMTUwLCAxOTcsIDEsIDI0NCwgMjA0LCAxOTcsIDEsIDI0NCwgODMsIDE5NywgMSwgCisgICAgMjUyLCAxOTksIDE5NywgMSwgMjUxLCAyMzAsIDE5NywgMSwgMTg2LCAxOTcsIDEsIDIzMCwgMTczLCAxOTcsIDEsIDIxNSwgCisgICAgMTg0LCAxOTcsIDEsIDIxNSwgMTc2LCAxOTcsIDEsIDI0NiwgNDYsIDE5NywgMSwgMTkyLCAxOTcsIDEsIDIwNSwgMTk3LCAxLCAKKyAgICAyMzMsIDE0MSwgMTk3LCAxLCAxNjIsIDE5NywgMSwgMjQxLCAxNjAsIDE5NywgMSwgMjE0LCAyNywgMTk3LCAxLCAyMDYsIAorICAgIDE5NywgMSwgMjIwLCAxMDQsIDE5NywgMSwgMjEyLCA2NSwgMTk3LCAxLCA2MSwgMTk3LCAyMTgsIDc0LCAxLCAxOTIsIDE5NywgCisgICAgMjE4LCA3NCwgMSwgMjA1LCAxOTcsIDI1LCA1LCAyNTUsIDgyLCAxOTcsIDI1LCA1LCA3NCwgMTk3LCAyNSwgNSwgNzgsIAorICAgIDE5NywgMjUsIDUsIDIyNiwgMTg3LCAxOTcsIDI1LCA1LCA2OSwgMTk3LCAyNSwgNSwgMjE0LCAxMTgsIDE5NywgMjUsIDUsIAorICAgIDc2LCAxOTcsIDExNywgNSwgMjM1LCAyOSwgMTk3LCAxMTcsIDUsIDE5NCwgMTk3LCAxMTcsIDUsIDE1NiwgMTk3LCAxMTcsIAorICAgIDUsIDIzMCwgMzAsIDE5NywgMTE3LCA1LCAyMjYsIDEwOSwgMTk3LCAxMTcsIDUsIDE1MywgMTk3LCAxMTcsIDUsIDIxNywgCisgICAgMTUzLCAxOTcsIDExNywgNSwgMjI3LCAxNDYsIDE5NywgMTE3LCA1LCAyMzQsIDIzNiwgMTk3LCA1LCAyMjMsIDE1MywgMTk3LCAKKyAgICA1LCAyMjcsIDIwOSwgMTk3LCAyMjQsIDE0NCwgMjE3LCAxMDQsIDE5NywgMjI0LCAxNDQsIDIyNywgMTU2LCAyMTYsIDEyMSwgCisgICAgMjE3LCAxMDQsIDE5NywgMjI0LCAxNDQsIDI1MCwgMTcyLCAxOTcsIDIyNCwgMTQ0LCAyMTUsIDE3MSwgMjUwLCAxNzIsIAorICAgIDE5NywgMjI0LCAxNDQsIDIxNSwgMTcwLCAxOTcsIDIxLCAyMTAsIDg2LCAxOTcsIDIxLCAxMTEsIDE5NywgMjEsIDEwNSwgCisgICAgMTk3LCAyMSwgMTU4LCAxOTcsIDIxLCAxNjEsIDE5NywgMjEsIDE5MCwgMTk3LCAyMSwgMTk1LCAxOTcsIDIxLCAxOTksIAorICAgIDE5NywgMjEsIDE5NiwgMTk3LCAyMSwgMjAxLCAxOTcsIDEsIDIxNSwgMTU3LCAxOTcsIDEsIDIxNSwgMTQ1LCAxOTcsIDEsIAorICAgIDI0OCwgMTQzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAyMTAsIDg2LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxMTEsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDEwNSwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTU4LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDIxLCAxNjEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5MCwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTk1LCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTksIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5NiwgMjI2LCAyMTQsIDI1MCwgCisgICAgMTExLCAyMSwgMjAxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMywgMTQxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIAorICAgIDI1MywgMjE0LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgMjI1LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgCisgICAgMTIzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgMTg3LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMywgMTQwLCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NSwgNDQsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU1LCA0NSwgMjI2LCAyMTQsIAorICAgIDI1MCwgMTExLCAxLCAyNTUsIDQzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NSwgMzgsIDIyNiwgMjE0LCAyNTAsIDExMSwgCisgICAgMSwgMjMyLCAyNDcsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM1LCAxNzgsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM2LCAKKyAgICA0MSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzUsIDE5NywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzUsIDE4NiwgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzIsIDEwMywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDIyMSwgMjI2LCAKKyAgICAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDIxOSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDE2OCwgMjI2LCAyMTQsIAorICAgIDI1MCwgMTExLCAxLCAyMTQsIDExMSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzMsIDY0LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDEsIDI0NSwgMTE2LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI0NSwgMjIwLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIAorICAgIDI0NSwgMTU4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI0NSwgOTQsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMyLCAKKyAgICAxNjIsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjI2LCAxNDEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjI3LCAwLCAyMjYsIAorICAgIDIxNCwgMjUwLCAxMTEsIDEsIDIyNiwgMTI5LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIyNiwgMjI2LCAyMjYsIDIxNCwgCisgICAgMjUwLCAxMTEsIDIzMCwgMTA4LCAyMTUsIDEyMiwgMjI2LCAyMTQsIDI1MCwgMTExLCAyNDMsIDEzNywgMjE1LCAxMjMsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMjMwLCAxMDYsIDIxNSwgMTIzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIyMywgOTUsIDIyNiwgCisgICAgMjE0LCAyNTAsIDExMSwgMjI1LCAxNDgsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjU0LCAyMTcsIDIyNiwgMjE0LCAyNTAsIAorICAgIDExMSwgMjI0LCAxNDQsIDIzMCwgMTAzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIyNCwgMTQ0LCA1MiwgMjMwLCAxMDMsIDIwNywgCisgICAgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMTgsIDksIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMjYsIDQyLCAyMDcsIDIyNCwgCisgICAgMTQ0LCAyNTEsIDI0OSwgMjI0LCAxMzIsIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyNTEsIDI3LCAyMDcsIDIyNCwgMTQ0LCAKKyAgICAyNTEsIDI0OSwgMjMzLCAxNCwgMjIxLCAyMjcsIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMzUsIDE5LCAyMjEsIDIyNywgCisgICAgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIDI0OCwgMjMwLCAyMjEsIDIyNywgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIAorICAgIDI1MiwgMjAwLCAyMjEsIDIyNywgMjEzLCAyNTIsIDEzOCwgMjM0LCAyMTYsIDIxMywgMjUyLCAxMzgsIDIyMCwgNzksIDIxMywgCisgICAgMjUyLCAxMzgsIDIyNCwgMjAxLCAyMTMsIDI1MiwgNSwgMjI4LCAyMTQsIDIxMywgMjUyLCA1LCAyMTEsIDgwLCAyMzAsIAorICAgIDIyNywgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyNTQsIDIyMiwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAKKyAgICAyNTIsIDEzOCwgMjExLCA4MCwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjM0LCAyMDQsIAorICAgIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDI1MSwgMTAsIDUxLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAKKyAgICAyMzQsIDIwNCwgMjM1LCAyNTAsIDIxOCwgMiwgMjIxLCAxOTksIDIxMywgMjUyLCAxMzgsIDUyLCAyMTgsIDEsIDIxMywgCisgICAgMjUyLCAxMzgsIDIxNSwgMjEyLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDIzNCwgMjA0LCAyNTQsIDg1LCAyMTMsIDI1MiwgCisgICAgMTM4LCA1OSwgNTEsIDIxMywgMjUyLCAxMzgsIDExMywgMTcwLCA1MSwgMjEzLCAyNTIsIDEzOCwgMTM0LCAxNzAsIDUxLCAKKyAgICAyMTMsIDI1MiwgMTM4LCAyMjIsIDI0MywgMjM0LCAyMTUsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDI1MywgCisgICAgMjEyLCAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDIxOCwgMSwgMjEzLCAyNTIsIDUsIDIxMywgCisgICAgMTQ4LCAyMTQsIDIxNiwgMjEzLCAyNTIsIDUsIDIyMywgNTIsIDIxMywgMTQ4LCAyMTQsIDIxNiwgMjEzLCAyNTIsIDUsIAorICAgIDIxMywgMTQ4LCAyNTQsIDg1LCAyMTMsIDI1MiwgNSwgMjIzLCA1MiwgMjEzLCAxNDgsIDI1NCwgODUsIDIxMywgMjUyLCA1LCAKKyAgICAyMTMsIDE0OCwgMjE0LCAyMTcsIDIsIDIxNywgNzgsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjU0LCA4NiwgMiwgMjE3LCAKKyAgICA3OCwgMjEzLCAyNTIsIDUsIDI1NCwgODQsIDI1NCwgOTksIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyNTIsIDE3NCwgMjEzLCAKKyAgICAyNTIsIDUsIDI1NCwgODQsIDIxNCwgMjAsIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyMTQsIDIxLCAyLCAyMTcsIDc4LCAyMTMsIAorICAgIDI1MiwgNSwgMjE2LCA2OSwgMjEzLCAyNTIsIDUsIDI0MSwgMTk4LCAyMDAsIDI1NCwgODMsIDIxMywgMjUyLCA1LCAyMDAsIAorICAgIDI1NCwgODMsIDIxMywgMjUyLCA1LCAyMjIsIDE0NCwgMjAwLCAyNTQsIDgzLCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjE0LCAKKyAgICAyMjMsIDIzMCwgOTUsIDIxMywgMjUyLCA1LCAyNTQsIDI4LCAyMTMsIDI1MiwgNSwgMjIyLCAxODksIDI1NCwgMjgsIDIxMywgCisgICAgMjUyLCAxMzgsIDI1MSwgMTAsIDQ4LCAyMTMsIDI1MiwgNSwgMjM1LCAxMDgsIDIxMywgMjUyLCA1LCAyMTQsIDE2MSwgNywgCisgICAgMSwgNCwgNiwgNjEsIDcsIDEsIDQsIDYsIDI1NCwgMjUyLCA3LCA0LCAxLCAyMTUsIDk0LCAyNTQsIDI1MiwgNywgMSwgNCwgCisgICAgNiwgMjUyLCAxNDIsIDI1MywgMTY2LCA3LCAxLCA0LCA2LCAyNTEsIDc0LCA3LCAxLCA0LCA2LCAyNDksIDY4LCA3LCAxLCA0LCAKKyAgICA2LCAyNDUsIDY3LCA3LCAxLCA0LCA2LCA3NiwgNywgNCwgMSwgMjE1LCA5NCwgMjA0LCA3NiwgNywgNCwgMSwgMjE1LCA5NCwgCisgICAgNzQsIDcsIDEsIDQsIDYsIDIzNSwgMTUwLCA3LCAxLCA0LCA2LCAyMzUsIDI5LCA3LCAxLCA0LCA2LCAyMzMsIDE1NSwgMiwgCisgICAgOTEsIDcsIDEsIDQsIDYsIDE5NCwgNywgMSwgNCwgNiwgMjIzLCA1MiwgMjMwLCAzMCwgNywgMSwgNCwgNiwgNzgsIDcsIDEsIAorICAgIDQsIDYsIDIwNCwgNzgsIDcsIDQsIDEsIDIxOSwgMTg5LCA3OCwgNywgNCwgMSwgMjE5LCAxODksIDIwNCwgNzgsIDcsIDQsIAorICAgIDEsIDIxOSwgMTg5LCAxNDQsIDIsIDkxLCA3LCA0LCAxLCAyMTUsIDk0LCAyMjYsIDIzOCwgNywgMSwgNCwgNiwgMjI2LCAKKyAgICAxMzgsIDcsIDQsIDEsIDIxNiwgMTUsIDE2MywgNzgsIDcsIDQsIDEsIDI1MSwgMTgzLCAxNjMsIDc4LCA3LCAxLCA0LCA2LCAKKyAgICAyMjYsIDEwOSwgNywgMSwgNCwgNiwgMjIzLCA1MiwgMTUzLCA3LCAxLCA0LCA2LCAyMTUsIDk0LCAxNTMsIDcsIDEsIDQsIDYsIAorICAgIDIxNywgMTUzLCA3LCAxLCA0LCA2LCA2OSwgNywgNCwgMSwgMjE5LCAxODksIDY5LCA3LCA0LCAxLCAyMTksIDE4OSwgMjQ4LCAKKyAgICA4LCA2OSwgNywgNCwgMSwgMjE5LCAxODksIDIxNSwgOTQsIDE5NCwgNywgMSwgNCwgNiwgMjE0LCAxMDUsIDcsIDEsIDQsIDYsIAorICAgIDIxMiwgOTgsIDcsIDEsIDQsIDYsIDIxMCwgMTU5LCA3LCAxLCA0LCA2LCAyNDUsIDE2LCA3LCAxLCAyMTMsIDEzNSwgMjMzLCAKKyAgICA4OCwgMjE4LCAyNTIsIDcsIDEsIDI1NCwgMjA1LCAyNiwgMSwgNCwgNiwgMjQzLCAxMTQsIDI2LCAxLCA0LCA2LCAyMzMsIAorICAgIDEwNCwgMjYsIDEsIDQsIDYsIDIyNSwgMTExLCAyNiwgMSwgNCwgNiwgMjIzLCA0MCwgMjYsIDEsIDQsIDYsIDIyNCwgMTY0LCAKKyAgICAzMywgMSwgNCwgNiwgMjQ1LCAxODIsIDU4LCAxLCA2LCA2MSwgNTgsIDEsIDYsIDI1NCwgMjUyLCA1OCwgMSwgNiwgMjUzLCAKKyAgICAxNjYsIDU4LCAxLCA2LCAyNTIsIDE0MiwgMjUzLCAxNjYsIDU4LCAxLCA2LCAyNDksIDY4LCA1OCwgMSwgNiwgNzYsIDU4LCAKKyAgICAxLCA2LCAyMjMsIDUyLCA3NiwgNTgsIDEsIDYsIDI0MywgMjA5LCA1OCwgMSwgNiwgMjQyLCA2NywgNTgsIDEsIDYsIDc0LCAKKyAgICA1OCwgMSwgNiwgMjM1LCAxNTAsIDU4LCAxLCA2LCAyMzUsIDI5LCA1OCwgMSwgNiwgMTU2LCA1OCwgMSwgNiwgMTk0LCA1OCwgCisgICAgMSwgNiwgMjMwLCAzMCwgNTgsIDEsIDYsIDIyMywgNTIsIDIzMCwgMzAsIDU4LCAxLCA2LCA3OCwgNTgsIDEsIDYsIDIyNiwgCisgICAgMTM4LCA1OCwgMSwgNiwgMjI2LCAxMDksIDU4LCAxLCA2LCAxNTMsIDU4LCAxLCA2LCAyMTcsIDE1MywgNTgsIDEsIDYsIDY5LCAKKyAgICA1OCwgMSwgNiwgMjEyLCA5OCwgNTgsIDEsIDQsIDYxLCA1OCwgMSwgNCwgMjE1LCA5NCwgNjEsIDU4LCAxLCA0LCAyNTQsIAorICAgIDE1MSwgNTgsIDEsIDQsIDIxNSwgOTQsIDI1NCwgMjUyLCA1OCwgMSwgNCwgMjUzLCAxNjYsIDU4LCAxLCA0LCAyNDksIDY4LCAKKyAgICA1OCwgMSwgNCwgNzYsIDU4LCAxLCA0LCAyMjEsIDE5NywgNTgsIDEsIDQsIDIwNCwgNzYsIDU4LCAxLCA0LCAyMTUsIDk0LCAKKyAgICAyMDQsIDc2LCA1OCwgMSwgNCwgMjQzLCAyMDksIDU4LCAxLCA0LCAyMTUsIDk0LCA3NCwgNTgsIDEsIDQsIDIzNSwgMjksIAorICAgIDU4LCAxLCA0LCAxOTQsIDU4LCAxLCA0LCAyNDUsIDE0NiwgNTgsIDEsIDQsIDc4LCA1OCwgMSwgNCwgMjA0LCA3OCwgNTgsIAorICAgIDEsIDQsIDIxNiwgMTUsIDE2MywgNzgsIDU4LCAxLCA0LCAyNTEsIDE4MywgMTYzLCA3OCwgNTgsIDEsIDQsIDIyNiwgMTA5LCAKKyAgICA1OCwgMSwgNCwgMjE3LCAxNTMsIDU4LCAxLCA0LCA2OSwgNTgsIDEsIDQsIDIxOSwgMTg5LCA2OSwgNTgsIDEsIDQsIDIxNSwgCisgICAgOTQsIDE5NCwgNTgsIDEsIDQsIDIxNCwgMTA1LCA1OCwgMSwgNCwgMjU0LCAyMDUsIDU4LCAxLCA0LCAyNTIsIDM0LCA1OCwgCisgICAgMSwgNCwgMjYsIDI0MywgMTE0LCA1OCwgMSwgNCwgMjQ4LCA2MiwgNTgsIDEsIDQsIDI2LCAyMjUsIDEzNiwgNTgsIDEsIDQsIAorICAgIDI1MCwgMTE4LCA3LCAyMTgsIDY2LCA0LCAxLCA3NCwgNywgMjE4LCA2NiwgNCwgMSwgMTUzLCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICA2OSwgNywgMjE4LCA2NiwgNCwgMSwgMjE0LCAxMDUsIDI2LCAyMTgsIDY2LCA0LCAxLCAyNTIsIDM0LCAyNiwgMjE4LCA2NiwgCisgICAgNCwgMSwgMjQzLCAxMTQsIDI2LCAyMTgsIDY2LCA0LCAxLCAyMjMsIDQwLCAyNiwgMjE4LCA2NiwgNCwgMSwgMjI1LCAxMzYsIAorICAgIDI2LCAyMTgsIDY2LCA0LCAxLCAyNTAsIDExOCwgNywgNCwgMSwgMjE0LCAyMTQsIDcsIDQsIDEsIDU3LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyNDQsIDk2LCAyMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjIyLCA5NCwgCisgICAgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIxMCwgMTYwLCAKKyAgICAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDMsIDIwOSwgNTgsIDEsIDMzLCAyNDUsIDE1OCwgNywgNCwgCisgICAgMSwgMjM1LCAyMjAsIDI0MywgMjA5LCA3LCA0LCAxLCAyMTYsIDIxMiwgMiwgMjE4LCAxMDksIDcsIDQsIDYsIDEsIDI0MCwgCisgICAgMTYxLCAyLCA5MSwgNywgNCwgMSwgMjM1LCAxOTMsIDIsIDkxLCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgOTEsIDcsIDQsIDYsIAorICAgIDEsIDEwNCwgMiwgOTEsIDcsIDQsIDEsIDIxNCwgMTU4LCAyLCA5MSwgNywgNCwgMSwgNTcsIDIsIDIyNiwgNzAsIDEwMywgNywgCisgICAgNCwgMSwgMjQ5LCA2OSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIAorICAgIDEsIDI0MywgMjEwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjMzLCAxNTUsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjMyLCA1NSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMzAsIDMxLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIyNiwgMTEwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDIyMywgMjI3LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjQ1LCA4NCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMTEsIDE3OSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAxMTYsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjU0LCAxNTIsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQ5LCAKKyAgICA2OSwgMiwgMjQxLCA1OSwgMjIsIDIxNywgNzgsIDcsIDQsIDEsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyMDQsIAorICAgIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyMjMsIDUyLCAyMDQsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMjEsIDE5OCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMDQsIDE0NCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDUsIDg0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIAorICAgIDEwNCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDUsIDE3LCAyLCAyMjMsIDU4LCAxMDMsIDU4LCAxLCA0LCAyMTUsIAorICAgIDk0LCAyNTQsIDE1MSwgNTgsIDEsIDQsIDI1MSwgNzQsIDU4LCAxLCA0LCAyNTEsIDc1LCAyLCAyNDksIDEwOCwgNTgsIDEsIAorICAgIDQsIDI0NSwgNjcsIDU4LCAxLCA0LCAyMjMsIDUyLCAyMDQsIDc2LCA1OCwgMSwgNCwgMjQ1LCAxNCwgNTgsIDEsIDQsIDI0NywgCisgICAgMTI3LCAyMzUsIDE1MSwgMiwgOTEsIDU4LCAxLCA0LCAxMTksIDI0MywgMjA5LCA1OCwgMSwgNCwgMjE1LCA5NCwgMjQyLCAKKyAgICA2NywgNTgsIDEsIDQsIDI0MCwgMTYxLCAyLCA5MSwgNTgsIDEsIDQsIDIzNSwgMTkyLCA1OCwgMSwgNCwgNiwgNzQsIDU4LCAKKyAgICAxLCA0LCA2LCAyNDAsIDE2MSwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE1MSwgMiwgMjQ5LCAxMzUsIDU4LCAxLCA0LCAyMzMsIAorICAgIDE1NSwgMiwgMjIzLCA1OCwgMTAzLCA1OCwgMSwgNCwgMjMzLCAxNTUsIDIsIDIyNiwgNzAsIDEwMywgNTgsIDEsIDQsIDYsIAorICAgIDE1NiwgNTgsIDEsIDQsIDIzMiwgNTUsIDIsIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDIzMiwgNTUsIDIsIDIwMCwgMjMzLCAKKyAgICA0MiwgNTgsIDEsIDQsIDIzMCwgMzEsIDIsIDQzLCAxMDMsIDU4LCAxLCA0LCAyMzAsIDMxLCAyLCAyMjMsIDU4LCAxMDMsIAorICAgIDU4LCAxLCA0LCA2LCAyMzAsIDMwLCA1OCwgMSwgNCwgMjUyLCAxNDIsIDc4LCA1OCwgMSwgNCwgMjI1LCAxMzYsIDU4LCAxLCAKKyAgICA0LCAyMjIsIDk0LCAyLCAxMDMsIDU4LCAxLCA0LCAyNDUsIDgzLCA1OCwgMSwgNCwgMjE3LCAxNTQsIDIsIDIyNiwgNzAsIAorICAgIDEwMywgNTgsIDEsIDQsIDEwNCwgMTMwLCA1OCwgMSwgNCwgMjE0LCAxNTcsIDU4LCAxLCA0LCA2LCA2OSwgNTgsIDEsIDQsIAorICAgIDIxNCwgMTA2LCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMTQsIDEwNSwgNTgsIDEsIDQsIDIxMCwgMTU5LCA1OCwgMSwgCisgICAgNCwgMjEwLCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNTgsIDEsIDQsIDIxMCwgMTYwLCAyLCAyNDksIDEwOCwgNTgsIDEsIDQsIAorICAgIDI0NSwgMTYsIDU4LCAxLCA0LCAyMTYsIDE4MCwgMzgsIDI0NiwgMTI2LCAyNDIsIDE0NCwgMjU1LCAyMywgMzgsIDI0NiwgCisgICAgMTI2LCAyNTUsIDEyLCAyNTUsIDIzLCAzOCwgMjE5LCA3MSwgNTEsIDM4LCAyMTgsIDcsIDc5LCAzOCwgMjMxLCAyMzYsIDM4LCAKKyAgICAyNDIsIDE0MSwgMzgsIDIzMSwgMjM0LCAzOCwgMjU1LCAxMCwgMzgsIDI0MiwgMTQyLCAzOCwgMjU1LCAxMSwgMzgsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCA1MSwgMzgsIDI1MSwgMTUzLCAzOCwgMjMxLCAyMzUsIDM4LCA1MiwgMjUwLCAzOSwgNDgsIDM4LCAKKyAgICAyMjYsIDIyOSwgNDgsIDM4LCAyMTAsIDM1LCA1MSwgMzgsIDIzNSwgMTc5LCA1MSwgMzgsIDIxNCwgMTUxLCA0OCwgMzgsIAorICAgIDIxNCwgMTM0LCA0OCwgMzgsIDcsIDQsIDEsIDI0NCwgNzEsIDIwNCwgMTE2LCA0OCwgMzgsIDcsIDQsIDEsIDI1NCwgMjUyLCAKKyAgICAzOCwgNywgNCwgMSwgMjU0LCA4MSwgMzgsIDcsIDQsIDEsIDI1MywgMTg0LCAzOCwgNywgNCwgMSwgMjUxLCA3NSwgMjUwLCAKKyAgICAxOTEsIDM4LCA3LCA0LCAxLCAyMzUsIDIyMCwgMjQ5LCA2OCwgMzgsIDcsIDQsIDEsIDI0NSwgNjcsIDM4LCA3LCA0LCAxLCAKKyAgICAyNDMsIDIwOSwgMzgsIDcsIDEsIDQsIDYsIDI0MywgMjA5LCAzOCwgNywgNCwgMSwgMjM1LCAyOSwgMzgsIDcsIDQsIDEsIAorICAgIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE5NCwgMzgsIDcsIDQsIDEsIDIzMCwgMzAsIDM4LCAKKyAgICA3LCAxLCA0LCA2LCAyMzAsIDMwLCAzOCwgNywgMSwgNCwgNiwgMTUzLCAzOCwgNywgNCwgMSwgMjIzLCAyMjcsIDIyMiwgCisgICAgMTg4LCAzOCwgNywgNCwgMSwgMjIyLCA5MywgMzgsIDcsIDQsIDEsIDIwMCwgMjIyLCA5MywgMzgsIDcsIDQsIDEsIDIxMCwgCisgICAgMTU5LCAzOCwgNTIsIDIzNSwgMjAwLCAyNTEsIDE1NSwgNTEsIDM4LCAyNTQsIDE1NiwgMTI4LCAyMTYsIDQzLCA1MSwgMzgsIAorICAgIDQzLCAyNTQsIDIsIDQ4LCAzOCwgNDQsIDI1NCwgMiwgMjIsIDEyNCwgMjU0LCAyLCA1MSwgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAyMjIsIDIzNywgNTEsIDcsIDQsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDUxLCA3LCA2LCAxLCA1NywgMiwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCA1NywgMiwgNTksIDQ4LCA3LCA2LCAxLCA1NywgMiwgNTksIDUxLCA3LCA0LCAxLCA1NywgMiwgNTksIDUxLCA3LCAKKyAgICA2LCAxLCA1NywgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCA1NywgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyNTEsIAorICAgIDc1LCAyLCAyNTAsIDE5MiwgMjIsIDE0MiwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMjUwLCAxOTIsIDIyLCAxNDIsIDcsIDYsIAorICAgIDEsIDI0OSwgNjksIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNDksIDY5LCAyLCAKKyAgICA1OSwgNTEsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjMyLCAyMjAsIDUxLCAKKyAgICA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDI1MCwgMTkxLCA3LCA0LCAKKyAgICAxLCAyNDksIDY5LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDI0OSwgCisgICAgNjksIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMTYwLCAKKyAgICAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMTYsIDkwLCA1MSwgNywgNCwgMSwgMTYwLCAyLCAyMTYsIDkwLCAKKyAgICA1MSwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE5MiwgMjIsIDI1MSwgMTU0LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMTkyLCAKKyAgICAyMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDI0NSwgMTUsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ1LCAxNSwgMiwgNTksIDQ4LCAKKyAgICA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAyMzEsIDIzNywgNywgNiwgMSwgCisgICAgMjQyLCA2OCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDIsIDY4LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDU5LCAKKyAgICA1MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNDgsIDksIDcsIDQsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIAorICAgIDI1MCwgMTkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNTEsIDE1NSwgNTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MSwgCisgICAgMTU1LCA1MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIxNiwgOTAsIDUxLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjE2LCAKKyAgICA5MCwgNTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDEwLCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgCisgICAgMjQ4LCAxMCwgMjIsIDE0MiwgNywgNiwgMSwgMjM1LCAzMCwgMiwgMTQyLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAxNDIsIDcsIAorICAgIDYsIDEsIDIzNSwgMzAsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzUsIDMwLCAKKyAgICAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDU5LCA1MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDU5LCAyNTIsIDUxLCAKKyAgICAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAKKyAgICAyMzMsIDE1NSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAKKyAgICAyMzMsIDE1NSwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgCisgICAgMjMyLCA1NSwgMiwgMTQyLCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAxNDIsIDcsIDYsIDEsIDIzMiwgNTUsIDIsIDU5LCA0OCwgCisgICAgNywgNCwgMSwgMjMyLCA1NSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMzIsIDU1LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzMiwgCisgICAgNTUsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCA1OSwgNDgsIAorICAgIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzAsIAorICAgIDMxLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjMwLCAzMSwgCisgICAgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDIxNiwgCisgICAgOTAsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAKKyAgICAyMiwgMjQ4LCA5LCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAyNDgsIDksIDcsIDYsIDEsIDE0NCwgMiwgMjMxLCAKKyAgICAyMzgsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNDQsIAorICAgIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA2LCAxLCAyMjYsIAorICAgIDExMCwgMiwgMTQyLCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgMTQyLCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCAyMjYsIDExMCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjMsIAorICAgIDIyNywgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDUxLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgNTksIAorICAgIDUxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDI1MiwgNTEsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMjIzLCAyMjcsIAorICAgIDIsIDU5LCAyNTIsIDUxLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCAKKyAgICA5NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDU5LCA1MSwgCisgICAgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjU1LCAxMiwgMjIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjU1LCAxMiwgCisgICAgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjUwLCAyNDMsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTQsIAorICAgIDIsIDI1MCwgMjQzLCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgNywgCisgICAgNCwgMSwgMjIyLCA5NCwgMiwgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA1OSwgNDgsIAorICAgIDcsIDQsIDEsIDIxNywgMTU0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNywgCisgICAgMTU0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAKKyAgICAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIAorICAgIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDUxLCAKKyAgICA3LCA2LCAxLCAxMDQsIDIsIDIxNiwgOTAsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgOTAsIDUxLCA3LCA2LCAxLCAxMDQsIAorICAgIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIxNiwgOTAsIAorICAgIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjE2LCA5MCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgCisgICAgMjIsIDI0OCwgOSwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDI0OCwgOSwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIAorICAgIDE4NCwgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDE4NCwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDU5LCA1MSwgNywgNCwgMSwgCisgICAgMjE0LCAxMDYsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxMiwgOTksIDIsIAorICAgIDI0MiwgMTQzLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDE0MiwgNywgNiwgMSwgCisgICAgMjEyLCA5OSwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNDgsIDksIDcsIDYsIDEsIDIxMiwgOTksIDIsIDU5LCAKKyAgICA0OCwgNywgNCwgMSwgMjEyLCA5OSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAorICAgIDIxMiwgOTksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxNzksIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxNzksIDIsIAorICAgIDU5LCA0OCwgNywgNiwgMSwgMjExLCAxNzksIDIsIDI0OCwgOSwgNywgNCwgMSwgMjExLCAxNzksIDIsIDI0OCwgOSwgNywgNiwgCisgICAgMSwgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEwLCAxNjAsIAorICAgIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCAKKyAgICA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAKKyAgICAxLCAyMTAsIDE2MCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMiwgOTksIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgMjExLCAKKyAgICAxMTgsIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgMTE2LCAyLCA0NCwgMTYzLCAyMjIsIDIzNiwgNywgNCwgMSwgMjAwLCAKKyAgICAyMjIsIDk0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIwMCwgMjIyLCA5NCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjAwLCAKKyAgICAyMjIsIDk0LCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAyMjAsIDc4LCAyMjIsIDkzLCA3LCA0LCAxLCAyNDgsIDYyLCA3LCA2LCAKKyAgICAxLCAxMTYsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTE2LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDExNiwgMiwgMjQxLCA1OSwgNDgsIAorICAgIDcsIDQsIDEsIDExNiwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNCwgMSwgCisgICAgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNCwgCisgICAgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIAorICAgIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAKKyAgICAyMiwgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIAorICAgIDU5LCA1MSwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAKKyAgICAyMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAKKyAgICAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAyNTEsIDE1NSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMjQxLCA1OSwgNDgsIDcsIAorICAgIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAxODQsIDcsIAorICAgIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCA1OSwgCiAgICAgNTEsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAKLSAgICAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTYwLCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTYwLCAyLCAxODIsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgCi0gICAgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAKLSAgICAzMSwgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgNywgCi0gICAgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDI0MSwgNTIsIDQ4LCA3LCAKLSAgICA0LCAxLCAyNDAsIDE1NCwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAotICAgIDI0MCwgMTU0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA1MSwgNywgCi0gICAgNiwgMSwgMTQ0LCAyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAyNTAsIDMxLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgCi0gICAgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgCi0gICAgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCA1OSwgCi0gICAgNTEsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgCi0gICAgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE0NCwgCi0gICAgMiwgMjQwLCAyNDksIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNCwgCi0gICAgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAotICAgIDEwNCwgMiwgNTksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDksIAotICAgIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMDQsIAotICAgIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDQsIAotICAgIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNDIsIDEzNiwgNywgNCwgCi0gICAgMSwgMjExLCAxMTgsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTEsIAotICAgIDExOCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAKLSAgICAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDE4MiwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDE4MiwgNywgNiwgCi0gICAgMSwgMjMwLCAyMjMsIDIzMiwgMTg1LCA3LCA0LCAxLCAyMzAsIDIyMywgMjMyLCAxODUsIDcsIDYsIDEsIDIzMCwgMjIzLCAKLSAgICAyMTQsIDEwNSwgNywgNCwgMSwgMjMwLCAyMjMsIDIxNCwgMTA1LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjMyLCAxMjMsIDcsIAotICAgIDQsIDEsIDIxMSwgMTE4LCAyLCAyMzIsIDEyMywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCAKLSAgICA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIAotICAgIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTQsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgCi0gICAgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAKLSAgICAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTUzLCAyNiwgNCwgCi0gICAgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIAotICAgIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU0LCAyNiwgCi0gICAgNiwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAKLSAgICAxMywgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgCi0gICAgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIAotICAgIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgCi0gICAgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIAotICAgIDE1NCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIAotICAgIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAKLSAgICAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAKLSAgICAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIAotICAgIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTQsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAKLSAgICAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgCi0gICAgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMjUsIDE3NSwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDAsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIAotICAgIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCAKLSAgICA0LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIAotICAgIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU0LCAyNiwgNiwgMSwgMjI2LCAyMDAsIAotICAgIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIAotICAgIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIAotICAgIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKLSAgICAyMTQsIDE1OCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIAotICAgIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMTQsIAotICAgIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1MywgMjYsIDYsIAotICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgCi0gICAgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyMjQsIDE1NCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1MywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAKLSAgICAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAKLSAgICAxMDEsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIAotICAgIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyMjYsIDExMCwgMjYsIAotICAgIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNTQsIAotICAgIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCi0gICAgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIAotICAgIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzYsIDIyLCAKLSAgICAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAKLSAgICAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIAotICAgIDE0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAKLSAgICAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgCi0gICAgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTAsIDIxOSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCi0gICAgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIAotICAgIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAKLSAgICAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIAotICAgIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIAotICAgIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgCi0gICAgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIAotICAgIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAKLSAgICAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc2LCAyMiwgCi0gICAgMjEwLCAyMTksIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgCi0gICAgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIAotICAgIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyMzEsIDIzMiwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCAKLSAgICA0LCAxLCAyNTQsIDE0NCwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI2LCAxMTEsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjUsIDE3NiwgCi0gICAgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIAotICAgIDIzMSwgMjMyLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNjcsIDI2LCAyMzQsIDIsIDI2LCAyMjQsIDE2NywgMjYsIDIyNCwgCi0gICAgMTU0LCAyNiwgMjI1LCAxNzUsIDI2LCAyNDcsIDI1MiwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAKLSAgICAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNDUsIAotICAgIDY0LCAyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKLSAgICAyNDUsIDEwMSwgMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE2NywgMjYsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgCi0gICAgMjYsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAKLSAgICAxODYsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIzMSwgMjMyLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIAotICAgIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MiwgMjIsIDIyNiwgMTEwLCAyNiwgCi0gICAgNCwgMSwgMjM1LCAxODYsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUyLCAyMiwgMjI1LCAKLSAgICAxNzUsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjMxLCAyMzIsIAotICAgIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjYsIDExMCwgMjYsIDI0OCwgCi0gICAgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIzMSwgMjMyLCAyNiwgNCwgCi0gICAgMSwgMjE0LCAxNTgsIDIsIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIDI1MiwgCi0gICAgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjIzLCAzOCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMjMsIDM4LCAyLCAyNDgsIAotICAgIDE1MywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIDI1MiwgCi0gICAgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIAotICAgIDIzMSwgMjMyLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyMjMsIDM4LCAyLCAyNDgsIDE1MywgMjYsIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDI0NywgCi0gICAgMjUyLCAyMiwgMjI2LCAxMTAsIDI2LCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjYsIDExMSwgCi0gICAgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDIyNSwgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAwLCAyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTY3LCAyNiwgMjI2LCAxMTAsIDI2LCAyNDgsIDE1MywgCi0gICAgMjQ1LCAxNTEsIDIyNCwgMjcsIDI0NSwgMTYwLCAyMjQsIDI3LCAyNDUsIDE1MSwgMjE5LCAxOCwgMjQ1LCAxNjAsIDIxOSwgCi0gICAgMTgsIDIxNiwgMTQxLCAyMTksIDE4LCAyNDQsIDksIDIxOSwgMTgsIDIxOSwgMTIzLCAyMTksIDE4LCAyNDQsIDExMiwgMjE5LCAKLSAgICAxOCwgMjI0LCAxNDEsIDIxOSwgMTgsIDIxNiwgMTcwLCAyMTksIDE4LCAyNDIsIDM1LCAyMTksIDE4LCAyMTAsIDg3LCAyMTEsIAotICAgIDI0NSwgMjE5LCAxOCwgMjEwLCA4NywgMjExLCAyNDUsIDIyOCwgNjcsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMzUsIDYzLCAKLSAgICAyMzMsIDM4LCA3OCwgMjIyLCAyNDMsIDc4LCAyNDAsIDE2OCwgMjI4LCA2OCwgMjQwLCAxNjgsIDI0NCwgMTEyLCAyNDgsIAotICAgIDE1NiwgMjQ1LCAxNTEsIDI0OCwgMTU2LCAyNDUsIDE2MCwgMjQ4LCAxNTYsIDIwMywgMTMwLCA1MiwgNjcsIDIzMiwgMjEzLCAKLSAgICA1MiwgMTIxLCAyMzIsIDIxMywgNDMsIDIxOSwgMTU1LCAyMjMsIDI1NCwgNzgsIDQ0LCAyMTksIDE1NSwgMjIzLCAyNTQsIAotICAgIDc4LCAyMTksIDE1NSwgMjMyLCAxMDksIDIyMywgMjU0LCA3OCwgMjE5LCAxNTUsIDI0MSwgMTYzLCAyMjMsIDI1NCwgNzgsIAotICAgIDQzLCA1MiwgMjIzLCAyNTQsIDc4LCA0NCwgNTIsIDIyMywgMjU0LCA3OCwgNTIsIDIzMiwgMTA5LCAyMjMsIDI1NCwgNzgsIAotICAgIDUyLCAyNDEsIDE2MywgMjIzLCAyNTQsIDc4LCAyNDgsIDIwNSwgNTIsIDI0OCwgMjA1LCAyNTEsIDExMywgMjE1LCAyMjIsIAotICAgIDI1MSwgMTEzLCAxMjMsIDU5LCAyMzMsIDU2LCAxMTMsIDU5LCAyMzMsIDU2LCAyMDMsIDI0NSwgMTYzLCAyNDAsIDE2NiwgCi0gICAgMjI1LCAxMCwgMjMyLCAyMTQsIDIyMCwgMTM3LCAyMjYsIDE1LCAyMjAsIDEzNywgMjMzLCAzOCwgMjQ1LCAxNTgsIDIyMiwgCi0gICAgMjQzLCAyNDUsIDE1OCwgMjI0LCAyNDYsIDI0NywgMTk2LCAyNDQsIDE5LCAyMzMsIDM4LCAyMjYsIDExNywgMjIyLCAyNDMsIAotICAgIDIyNiwgMTE3LCAyMjksIDE5NCwgMjI4LCA3MywgMjE5LCAxOCwgMjI1LCAxODMsIDIzMCwgMTkzLCA1MCwgMjI1LCAxODMsIAotICAgIDIxNiwgMjQ4LCAyMTYsIDE0OCwgNTAsIDIyNCwgMTkwLCA1MiwgMjI0LCAxOTAsIDIxNSwgMjExLCAyMjQsIDE5MCwgMjIzLCAKLSAgICA0OSwgMjI0LCAxOTAsIDIyMywgNDksIDUyLCAyMjQsIDE5MCwgMjIzLCA0OSwgMjE1LCAyMTEsIDIyNCwgMTkwLCAyNTAsIAotICAgIDIzOCwgMjE5LCAxNTUsIDIzMywgNDIsIDI1NCwgMTEwLCAyMjMsIDI1NCwgNzgsIDIxOSwgMTU1LCAyMjIsIDI0NywgMjU0LCAKLSAgICAxMTAsIDIyMywgMjU0LCA3OCwgMjIzLCAxMDcsIDc4LCA1MiwgMjQ1LCAzMSwgNzgsIDIzNSwgMjAxLCAyMjYsIDExOSwgCi0gICAgMjE0LCAxODAsIDEzNSwgMjE2LCAxMTEsIDI1MCwgMjM5LCAyMzUsIDIxNiwgMjI1LCAxMCwgMjUzLCAyMTQsIDI0MCwgMTY5LCAKLSAgICAyNTEsIDExMywgMjQ0LCAyLCAyMTksIDk1LCA0MywgNDIsIDI1MSwgMTU4LCAyLCAyMjQsIDcsIDQ0LCA0MiwgMjUxLCAxNTgsIAotICAgIDIsIDIyNCwgNywgNTIsIDIyNCwgMTMsIDc4LCAyMjQsIDEzLCAyNDUsIDMxLCA3OCwgMjQ1LCAzMSwgMjI0LCAxMywgNzgsIAotICAgIDIxNiwgNzAsIDUsIDI0NSwgNjUsIDIyMywgNDksIDIyNSwgNjgsIDUwLCA4NSwgMTQwLCAyNTEsIDExMywgODUsIDk3LCAKLSAgICAyNTEsIDExMywgMTIxLCAyNTMsIDIxNiwgMjIzLCA0OSwgMjIwLCAxNTAsIDI1MCwgMSwgMjE0LCAxNjMsIDExMywgMjUzLCAKLSAgICAyMTUsIDI1NCwgMTU4LCAyMTMsIDE4OCwgMjQ5LCAyMTcsIDIzMCwgMTgyLCA1MCwgMjE3LCAyMzQsIDI0OCwgMTU2LCAyMzUsIAotICAgIDE5MywgMjE0LCAxODAsIDI0NCwgNTIsIDIyNCwgMTQxLCA3OCwgMTM0LCA1OSwgMjI0LCAxNDAsIDIyNCwgMjQsIDIyNCwgCi0gICAgMTkwLCAyNDQsIDExLCA1OSwgMjI0LCAxNDAsIDI0NCwgODEsIDU5LCAyMjQsIDE0MCwgMTEzLCA1OSwgMjI0LCAxNDAsIAotICAgIDI0NCwgMTEsIDU5LCA3OCwgMjQ2LCAxMTgsIDI0OSwgMTMwLCAyMTUsIDIyMSwgNjcsIDI0NCwgMTEsIDI0NywgMTE4LCAKLSAgICAyMzEsIDgyLCAxMSwgMjE5LCAxOCwgMjExLCAyMDksIDIzNSwgNjMsIDI0MywgMjI3LCAyNTQsIDUyLCAyMzUsIDE5MSwgCi0gICAgMjE2LCA4NSwgMjM1LCAxOTEsIDIyMCwgMTM3LCAyMzUsIDE5MSwgMjI1LCAyMiwgMjM1LCAyMjgsIDIxNywgMTgyLCAyMTcsIAotICAgIDI1MSwgMjU1LCA1LCAyMTcsIDE4MiwgMjE3LCAyNTEsIDIzNSwgMjI4LCAxMCwgMjQ0LCAyMCwgMjIwLCA4MCwgMjU1LCA1LCAKLSAgICAxMCwgMjQ0LCAyMCwgMjIwLCA4MCwgMjI5LCAxODksIDIxLCAyMjAsIDgxLCAyMjgsIDY5LCAyMSwgMjIwLCA4MSwgMjE4LCAKLSAgICAyMywgMjEwLCA4NiwgMjE4LCAyMywgNywgNCwgMSwgNzMsIDIxOCwgMjMsIDE2MSwgMjE4LCAyMywgMTg5LCAyMTgsIDIzLCAKLSAgICAxOTQsIDIxOCwgMjMsIDE5OCwgMjE4LCAyMywgMTk1LCAyMTgsIDIzLCAyMDAsIDIxOCwgMjMsIDk2LCA1MCwgMjE4LCAyMywgCi0gICAgMjMwLCAxODEsIDIxOCwgMjMsIDI0NSwgOTgsIDUwLCAyMTgsIDIzLCA0MywgMjI2LCAzLCAyMTgsIDIzLCA0NCwgMjI2LCAzLCAKLSAgICAyMTgsIDIzLCA3LCA0LCAxLCAyMzAsIDI1LCAyMTgsIDY1LCAyMTAsIDg2LCAyMTgsIDY1LCAxMTAsIDIxOCwgNjUsIDEwNSwgCi0gICAgMjE4LCA2NSwgMTU4LCAyMTgsIDY1LCAxNjEsIDIxOCwgNjUsIDE4OSwgMjE4LCA2NSwgMTk0LCAyMTgsIDY1LCAxOTgsIAotICAgIDIxOCwgNjUsIDE5NSwgMjE4LCA2NSwgMjAwLCAyMTgsIDY1LCA5NiwgNTAsIDIxOCwgNjUsIDIzMCwgMTgxLCAyMTgsIDY1LCAKLSAgICAyNDUsIDk4LCA1MCwgMjE4LCA2NSwgNDMsIDIyNiwgMywgMjE4LCA2NSwgNDQsIDIyNiwgMywgNywgMjE4LCA2NSwgNCwgMSwgCi0gICAgNjEsIDcsIDIxOCwgNjUsIDQsIDEsIDc1LCA3LCAyMTgsIDY1LCA0LCAxLCA3NiwgNywgMjE4LCA2NSwgNCwgMSwgMjExLCAKLSAgICAxNzgsIDcsIDIxOCwgNjUsIDQsIDEsIDIyMSwgMTk1LCA3LCAyMTgsIDY1LCA0LCAxLCAyNDIsIDYwLCA3LCAyMTgsIDY1LCAKLSAgICA0LCAxLCAyMzUsIDIzLCA3LCAyMTgsIDY1LCA0LCAxLCAxNTYsIDcsIDIxOCwgNjUsIDQsIDEsIDE5MywgNywgMjE4LCA2NSwgCi0gICAgNCwgMSwgMjMwLCAyNSwgNywgMjE4LCA2NSwgNCwgMSwgMjI2LCAxMDUsIDcsIDIxOCwgNjUsIDQsIDEsIDIyMiwgOTEsIDcsIAotICAgIDIxOCwgNjUsIDQsIDEsIDIxNywgMTUyLCAyNDUsIDQ2LCA1MCwgMjQ5LCAyMjcsIDUwLCAyNDksIDExNywgNTAsIDI0MywgCi0gICAgMjUxLCAyNDMsIDI1NCwgNTAsIDIzMiwgMTk4LCA1MCwgMjMwLCAxOTQsIDUwLCAyMjksIDIxMCwgNTAsIDIyNSwgMTYyLCAKLSAgICA1MCwgMjIyLCAxMTgsIDUwLCAyMTEsIDIxNywgNTAsIDE2NiwgMjIwLCA0OSwgNTAsIDI0NywgMTI3LCA1MCwgMjQ1LCA0NywgCi0gICAgNTAsIDIzNCwgNzYsIDUwLCAyMTUsIDExMiwgNTAsIDI0NiwgMTAxLCA1MCwgMjQzLCA0MCwgMjI1LCAxOTMsIDUwLCAyMjUsIAotICAgIDE2MCwgNTAsIDI0MiwgMTA5LCA1MCwgMjUzLCAxODIsIDUwLCAyNDAsIDIyOCwgNTAsIDI1MCwgMTg1LCA1MCwgMjMyLCAKLSAgICAxOTEsIDIxNiwgMywgNTAsIDIxOSwgMCwgNTAsIDIxNiwgMjQ1LCA1MCwgMjM1LCAyNDEsIDIyMiwgMTE4LCA1MCwgMzgsIAotICAgIDQzLCAyNDEsIDI1NSwgNDgsIDM4LCA0NCwgMjQxLCAyNTUsIDQ4LCAzOCwgMTk5LCA2NywgMjMyLCAyMTQsIDIyNiwgMTIwLCAKLSAgICAzOCwgMjE5LCAyNTEsIDY3LCAyMzIsIDIxNCwgMjI2LCAxMjAsIDM4LCAyNTQsIDg4LCA4MCwgNDgsIDM4LCAyNTAsIDIsIAotICAgIDgwLCA0OCwgMzgsIDQzLCA4MCwgNDgsIDM4LCA0NCwgODAsIDQ4LCAzOCwgMjIyLCAyMzQsIDIyNiwgMTIwLCAzOCwgMjUwLCAKLSAgICAyLCAyMjIsIDIzNCwgMjI2LCAxMjAsIDM4LCAyNTQsIDg4LCAyMjIsIDIzNCwgMjI2LCAxMjAsIDM4LCAxMzQsIDE3MCwgNDgsIAotICAgIDM4LCAyNDQsIDExLCAxNzAsIDQ4LCAzOCwgMjQ1LCAxNDYsIDI1MCwgMzUsIDM4LCAyNDUsIDE0NiwgMjE4LCAyMzQsIDM4LCAKLSAgICAyNDUsIDE0NiwgMjQ3LCAyNDgsIDM4LCAyNDUsIDE0NiwgMjUwLCAzNiwgMjUyLCAxODAsIDM4LCA0MywgNDQsIDgwLCA0OCwgCi0gICAgMzgsIDI0NSwgMTQ2LCAyMjEsIDE4OCwgMzgsIDI0NSwgMTQ2LCAyMzQsIDEzNSwgMzgsIDI0NSwgMTQ2LCAyMTQsIDE1NSwgCi0gICAgMjI1LCA3LCAyMTUsIDIyNSwgMzgsIDIyMywgNTAsIDIxOSwgNDcsIDIyNiwgMTIwLCAzOCwgNTIsIDY3LCAyMTgsIDEwMywgCi0gICAgMjI2LCAxMjAsIDM4LCAyNTQsIDk4LCA4NywgMzgsIDIxNSwgMjExLCAyMTQsIDE4MiwgMzgsIDIxMSwgMjQ3LCAyNTEsIAotICAgIDE0MCwgNDgsIDM4LCAxNDAsIDgwLCAyMjYsIDEyMCwgMzgsIDE5OSwgNTIsIDIxOSwgNDcsIDIyNiwgMTIwLCAzOCwgOTcsIAotICAgIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDMsIDM4LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAKLSAgICAxMDMsIDM4LCA0MywgODAsIDUxLCAzOCwgNDQsIDgwLCA1MSwgMzgsIDI1MywgMjE3LCA0OCwgMjU1LCAxMSwgMjI2LCAyMzEsIAotICAgIDI1NCwgMjUxLCAyMTYsIDQyLCAyMTYsIDE5NiwgMjE4LCA3NCwgMTM5LCA2LCAyNTEsIDY2LCAyNDgsIDcxLCAyNTAsIDE3OCwgCi0gICAgMjUwLCAxNzUsIDIzMiwgMjE0LCA4NywgMjUwLCAyNDAsIDIyNiwgMjMxLCAyNTEsIDI2LCAyMTQsIDE4OSwgMjQ1LCA0OCwgCi0gICAgMjQ5LCAxOTEsIDIyMSwgMTg1LCAyNDgsIDcxLCAyNDQsIDE3OSwgMTE5LCA0LCAyNDMsIDIwMiwgMTE5LCA2LCAyNDIsIDYwLCAKLSAgICAyNTEsIDIxOSwgNiwgMjQyLCA2MCwgMTM5LCA2LCAyNDIsIDYwLCAyMjUsIDM3LCAyNDksIDE5MSwgMjI1LCAzNywgMjQ5LCAKLSAgICAxOTIsIDExNywgMTEzLCAyMjUsIDEwOCwgMTE5LCA2LCA3MywgMjUxLCAyMTksIDYsIDczLCAxMTksIDYsIDE1NiwgMTE5LCAKLSAgICA0LCAxNTYsIDIzMywgMTQ5LCA1NywgMjUyLCAxNDEsIDg3LCAxMzksIDYsIDIzMCwgMjUsIDIyNywgMTk2LCA1MCwgMjE5LCAKLSAgICAzMSwgMjIzLCAxMTksIDI0OSwgMTYyLCAxMTksIDYsIDIyNiwgMTA1LCAxMzksIDYsIDIyNiwgMTA1LCAxMzksIDYsIDIyNCwgCi0gICAgOTYsIDExOSwgNiwgMTUzLCAyNTEsIDIxOSwgNiwgMTUzLCAxMzksIDYsIDE1MywgMjI0LCAxOTYsIDIxNywgNzEsIDIyMywgCi0gICAgNjIsIDIyMCwgMTMyLCA3OCwgMjE3LCAxLCA1MCwgMjE1LCAyNTMsIDE2NCwgNTAsIDIxMywgMjQwLCAxMzksIDYsIDIxMCwgCi0gICAgMTU5LCAyMjYsIDEzMywgNTAsIDIyNiwgMjIxLCA1MCwgMjM1LCAxOTMsIDIyNiwgMjIxLCA1MCwgMjUxLCAyMTksIDYsIAotICAgIDIxMCwgMTU5LCAyMTUsIDk0LCAyNiwgNCwgMSwgMjM1LCAxODUsIDIzNCwgMTczLCA1MCwgMjU0LCAxMDcsIDUwLCAxMTksIAotICAgIDYsIDI1MywgMTU4LCAyNTEsIDIxOSwgNiwgMjUxLCA2NiwgMjQ1LCA2OCwgODcsIDExOSwgNCwgNzUsIDExOSwgNiwgNzUsIAotICAgIDExOSwgNiwgMjQ1LCA2LCAyMTUsIDk0LCA2LCAyNDUsIDYsIDExOSwgNiwgMTkzLCAxMTksIDQsIDc2LCAxMTIsIDg3LCAKLSAgICAyNTIsIDI5LCA4NywgMjQyLCAyMDIsIDg3LCAyNDgsIDE5MCwgODcsIDIzNSwgMjMyLCAyMTksIDI5LCAyMjIsIDE4NywgNiwgCi0gICAgMjI0LCA5NiwgMjQ0LCAxODIsIDUwLCAxMzksIDQsIDIyNSwgMTA4LCAxMzksIDQsIDI0MywgMTA3LCAxMzksIDYsIDI0MywgCi0gICAgMTA3LCAxMzksIDYsIDIyNSwgMTA4LCAxMzksIDIzMCwgMjQsIDIxOCwgNDAsIDIxNSwgOTQsIDM1LCA2LCAyNDMsIDIwMiwgCi0gICAgMjE1LCA5NCwgMzUsIDYsIDE1NiwgMjIzLCA0OSwgMzUsIDYsIDE1NiwgMjE1LCA5NCwgMzUsIDYsIDIxMSwgMTE3LCAxMzksIAotICAgIDMyLCA2LCAyNDksIDYwLCAxMzksIDMyLCA0LCAyNDksIDYwLCAxMzksIDMyLCA0LCA3NSwgMTM5LCAzMiwgNCwgNzMsIDEzOSwgCi0gICAgMzIsIDQsIDIzNSwgMTQ0LCAyMjQsIDE3MCwgMjMyLCAyMTMsIDIxNSwgOTQsIDI1NCwgMTI2LCAyMjUsIDE4MywgNTAsIAotICAgIDI1NCwgMTgwLCAyMTUsIDk0LCA0LCAyNDUsIDYsIDE2LCAzMSwgMjIxLCAyNTIsIDIxOSwgMjksIDIxMiwgMTE0LCAyNDQsIAotICAgIDIsIDEyMywgMjIwLCAxMTgsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjI4LCAxOTQsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgCi0gICAgMjE2LCAyNDEsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjE2LCAxNjgsIDIxMiwgMTE0LCAyNDQsIDIsIDExMywgMjE2LCAKLSAgICAxNjYsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjQ0LCAxMTcsIDIxMiwgMTE0LCAyNDQsIDIsIDExMywgMjQ0LCAxMTYsIAotICAgIDIxMiwgMTE0LCAyNDQsIDIsIDEzNCwgMjQ0LCAxMTYsIDIxMiwgMTE0LCAyNDQsIDIsIDI0NCwgMTEsIDI0NCwgMTE2LCAKLSAgICAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDIxOSwgMTE1LCAyMTIsIDExNCwgMjQ0LCAyLCAyNDQsIDgxLCAyMTksIDExMywgCi0gICAgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyNDUsIDE4OCwgMjEyLCAxMTQsIDI0NCwgMiwgMTM0LCAyNDUsIDE4NiwgMjEyLCAKLSAgICAxMTQsIDI0NCwgMiwgMjQ0LCA4MSwgMjQ1LCAxODYsIDIxMiwgMTE0LCAyNDQsIDIsIDIyMCwgMTIyLCAyNDUsIDE4NiwgCi0gICAgMjQ0LCAyLCAyMjcsIDE5NywgMTEwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDExMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMDUsIAotICAgIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTU4LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE2MSwgMjIyLCAxOTgsIDIyNywgMTk4LCAKLSAgICAxODksIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE5OCwgMjIyLCAxOTgsIDIyNywgCi0gICAgMTk4LCAxOTUsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjAwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNiwgMjQ3LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDI0NSwgMTY3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNSwgNzYsIDIyMiwgMTk4LCAyMjcsIDE5OCwgCi0gICAgMjQ0LCAxMTQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyNDAsIDIxMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDgxLCAKLSAgICAyNDAsIDIxMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDIxNiwgMTQ3LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDExMCwgCi0gICAgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMDUsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTU4LCA0LCAyMjIsIDE5OCwgMjI3LCAKLSAgICAxOTgsIDE2MSwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxODksIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk0LCA0LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDE5OCwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxOTUsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgCi0gICAgMjAwLCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNiwgMjQ3LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NSwgMTY3LCA0LCAKLSAgICAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNSwgNzYsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCAxMTQsIDQsIDIyMiwgCi0gICAgMTk4LCAyMjcsIDE5OCwgMTIzLCAyNDAsIDIxMCwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDgxLCAyNDAsIDIxMCwgCi0gICAgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDIxNiwgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjE2LCAxNDgsIAotICAgIDI1MSwgNjcsIDI0OSwgNjAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCA4MSwgMjE2LCAxNDcsIDIyMiwgMTk4LCAyMjcsIAotICAgIDE5OCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIyMywgNDksIDEyMywgMjQwLCAyMTAsIDcsIAotICAgIDQsIDEsIDIyMywgNDksIDI1MSwgNjYsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE5LCAxMjUsIDIzMywgNzgsIDE3LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDI0NCwgMTE1LCAyNDUsIDIyNiwgMTcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCAxMTUsIDIxNiwgCi0gICAgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjQwLCAyMTEsIDIxNiwgMTQ3LCAyMTIsIDExNCwgMjQ0LCAyLCAyMTAsIAotICAgIDg3LCAyMTYsIDE2NiwgMTQwLCA3NCwgMjE0LCAxNTMsIDc0LCA5NywgNzQsIDI0NiwgMTA0LCA3NCwgNDMsIDQ0LCA3NCwgCi0gICAgMTIwLCAxMjQsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIxOSwgMjgsIDI0NSwgCi0gICAgMjIwLCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA3NCwgMTQwLCA4MCwgMiwgOTEsIDk3LCA4MCwgMiwgOTEsIDE0MCwgMjEyLCAKLSAgICAzNiwgNzQsIDk3LCAyMTIsIDM2LCA3NCwgMTQwLCAxMTMsIDI0MSwgMjM0LCA3NCwgMjE0LCAxNTMsIDExMywgMjQxLCAyMzQsIAotICAgIDc0LCA5NywgMTEzLCAyNDEsIDIzNCwgNzQsIDI0NiwgMTA0LCAxMTMsIDI0MSwgMjM0LCA3NCwgMTQwLCA4MCwgMiwgMjE3LCAKLSAgICA3NywgOTcsIDgwLCAyLCAyMTcsIDc3LCAxNDAsIDgwLCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgODAsIDI0MywgMjQzLCAKLSAgICAxMzAsIDk3LCA4MCwgMjQzLCAyNDMsIDEzMCwgMjQ2LCAxMDQsIDgwLCAyNDMsIDI0MywgMTMwLCAxMjAsIDEyNCwgODAsIDIsIAotICAgIDI1MiwgMTI3LCAxNDAsIDgwLCAyLCAxMDMsIDk3LCA4MCwgMiwgMTAzLCAxNDAsIDgwLCAyLCAyMzIsIDEyMywgOTcsIDgwLCAKLSAgICAyLCAyMzIsIDEyMywgNDMsIDQ0LCAyMTIsIDM2LCA3NCwgNDMsIDQ0LCA4MCwgMiwgOTEsIDI0NiwgMTA0LCAyMTAsIDM1LCAKLSAgICA3NCwgMjE0LCAxNTMsIDgwLCAyLCAyMTYsIDc3LCAyMzMsIDM3LCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzcsIDIyMiwgCi0gICAgMjQxLCAyNDYsIDEwNCwgODAsIDIsIDIxNiwgNzcsIDIzMywgMzcsIDI0NiwgMTA0LCA4MCwgMiwgMjE2LCA3NywgMjIyLCAKLSAgICAyNDEsIDk3LCA4MCwgMiwgMjQ5LCAxNjEsIDI0NiwgMTAzLCAyNDYsIDEwNCwgODAsIDIsIDI0OSwgMTYxLCAyMzMsIDM3LCAKLSAgICAyNTQsIDg4LCAyMTYsIDE0LCAyMjAsIDE1MywgNzQsIDI1MCwgMiwgMjE2LCAxNCwgMjIwLCAxNTMsIDc0LCAyMjgsIDU2LCAKLSAgICAyMTIsIDksIDgwLCAyMTYsIDQyLCAxOTksIDEzMCwgMTQwLCA4MCwgMjE2LCA0MiwgMjUyLCAxNDEsIDExNywgOTcsIDgwLCAKLSAgICAyMTYsIDQyLCAxMzAsIDI1NCwgODgsIDIwNCwgMjUwLCAzNiwgNzQsIDI1MCwgMiwgMjA0LCAyNTAsIDM2LCA3NCwgMTQwLCAKLSAgICAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIxNCwgMTUyLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDMsIAotICAgIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjQxLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgCi0gICAgMTM5LCAyMzMsIDM3LCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMTQsIDE1MiwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIAotICAgIDEzOSwgMjQ2LCAxMDMsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjQxLCAyNDYsIDEwNCwgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCAyMzMsIDM3LCA5NywgODAsIDExNywgMTQwLCA3NCwgMjE0LCAxNTMsIDgwLCAxNDAsIDY0LCAKLSAgICAyNDYsIDEwNCwgNzQsIDE0MCwgODAsIDExNywgOTcsIDc0LCAxNDAsIDIyNiwgNzAsIDI1MywgMjQ3LCAyMTQsIDE1MywgCi0gICAgMjI2LCA3MCwgMjUzLCAyNDcsIDk3LCAyMjYsIDcwLCAyNTMsIDI0NywgMjQ2LCAxMDQsIDIyNiwgNzAsIDI1MywgMjQ3LCAKLSAgICAxNDAsIDI0MSwgMjU1LCAxMTcsIDk3LCAyNDEsIDI1NCwgOTcsIDI0MSwgMjU1LCAxMTcsIDE0MCwgMjQxLCAyNTQsIDE0MCwgCi0gICAgNTIsIDgwLCAyLCA5MSwgNDMsIDQ0LCA1MiwgODAsIDIsIDkxLCA5NywgNTIsIDgwLCAyLCA5MSwgMTQwLCA1MiwgNzQsIAotICAgIDIxNCwgMTUzLCA1MiwgNzQsIDk3LCA1MiwgNzQsIDI0NiwgMTA0LCA1MiwgNzQsIDQzLCA0NCwgNTIsIDc0LCAxMjAsIDEyNCwgCi0gICAgNTIsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDUyLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDUyLCA3NCwgMjE5LCAyOCwgMjQ1LCAKLSAgICAyMjAsIDUyLCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA1MiwgNzQsIDE0MCwgMjE1LCAyMTEsIDc0LCA5NywgMjE1LCAyMTEsIAotICAgIDc0LCAxNDAsIDIxOCwgMjMwLCA3NCwgOTcsIDIxOCwgMjMwLCA3NCwgMjE0LCAxNTMsIDgwLCAyLCA1MiwgOTEsIDI0NiwgCi0gICAgMTA0LCA4MCwgMiwgNTIsIDkxLCAxNDAsIDI0OCwgMTU1LCA3NCwgMjE0LCAxNTMsIDI0OCwgMTU1LCA3NCwgOTcsIDI0OCwgCi0gICAgMTU1LCA3NCwgMjQ2LCAxMDQsIDI0OCwgMTU1LCA3NCwgMTQwLCA4MCwgMjE2LCA0MiwgMTMwLCA5NywgODAsIDIxNiwgNDIsIAotICAgIDEzMCwgMTQwLCA3MSwgNzQsIDIxNCwgMTUzLCA3MSwgNzQsIDk3LCA3MSwgNzQsIDI0NiwgMTA0LCA3MSwgNzQsIDIxNCwgCi0gICAgMTUzLCA3MSwgODAsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMTk3LCAyMjUsIDIxNCwgMjE0LCAKLSAgICAxNTMsIDcxLCA4MCwgMjI2LCAxOTcsIDIyNSwgMjE1LCAyLCAyMDMsIDEzMCwgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAxOTcsIAotICAgIDIyNSwgMjE1LCAyLCA2NywgMTMwLCAyMTQsIDE1MywgNzEsIDUyLCA3NCwgMjE0LCAxNTMsIDcxLCA1MiwgODAsIDIyNiwgCi0gICAgMTk3LCAyMjUsIDIxNCwgOTcsIDcxLCA4MCwgMjQzLCAyNDMsIDIxMiwgNTYsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIxNiwgCi0gICAgNDIsIDI0OSwgMTYwLCAyMTksIDI4LCAyNDUsIDIyMCwgODAsIDIxNiwgNDIsIDI0OSwgMTYwLCAxMjAsIDEyNCwgNzEsIDc0LCAKLSAgICA0NCwgODAsIDIsIDQsIDI1MCwgMzUsIDI0NiwgMTA0LCA4MCwgMTQwLCA2NCwgMjE0LCAxNTMsIDc0LCAxMzQsIDk3LCAyNTMsIAotICAgIDI0NywgMTQwLCA4MCwgMiwgNjcsIDkxLCA5NywgODAsIDIsIDY3LCA5MSwgNDMsIDQ0LCA4MCwgMiwgNjcsIDkxLCAxNDAsIAotICAgIDgwLCAyLCA1MiwgNjcsIDkxLCA5NywgODAsIDIsIDUyLCA2NywgOTEsIDQzLCA0NCwgODAsIDIsIDUyLCA2NywgOTEsIDE0MCwgCi0gICAgMjI2LCAxNzMsIDc0LCA5NywgMjI2LCAxNzMsIDc0LCA0MywgNDQsIDIyNiwgMTczLCA3NCwgMzEsIDI1NCwgMTU0LCAyNDksIAotICAgIDIxNCwgMjI1LCAyNTMsIDI0NywgMjMzLCAyMTYsIDE4NywgMjQ1LCAyNywgMjE2LCAxODcsIDI0NywgMTM4LCAyMjgsIDUyLCAKLSAgICAyNDUsIDI4LCAyNDUsIDE1MiwgMjIwLCAxMjcsIDIzNSwgMjQ1LCAyMjksIDIyMSwgMjQ1LCAxNzAsIDIyNiwgMjMxLCAyMjgsIAotICAgIDUyLCAyNTQsIDEyNCwgMjQ1LCAxNzAsIDIyNiwgMjMxLCA0LCAyNDUsIDE3MCwgMjI2LCAyMzEsIDI0OSwgMTg2LCAyNTMsIAotICAgIDIzOCwgMjMxLCA2MiwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0OSwgMTg4LCAyNTMsIDIzOCwgMjMxLCA2MiwgNCwgMjQ5LCAKLSAgICAxODYsIDI1MywgMjM4LCAyMzEsIDYyLCAyNDUsIDE0MywgNjQsIDIyNCwgMTcyLCAyMzAsIDI0LCAyMjQsIDE4MCwgMjMwLCAKLSAgICAyNCwgMjQ5LCAxNjUsIDIzMCwgMjQsIDIxOCwgNDAsIDIzMCwgMTgyLCA1MCwgMjMwLCAxODAsIDUwLCA1OSwgMjI1LCAyMiwgCi0gICAgMjQ3LCAxNjksIDIxOSwgOTUsIDIyMCwgMTI4LCAyMzAsIDE4MSwgMjUzLCAyMTcsIDIyNiwgMTY3LCAyMjIsIDIzNCwgMjI2LCAKLSAgICAxNjcsIDI1MSwgMTE0LCAyMjYsIDE2NywgNDIsIDIyMiwgMTkzLCAyNDksIDEwOSwgMjIyLCAxOTMsIDI0NCwgNCwgMjIyLCAKLSAgICAxOTMsIDIyNCwgMTY4LCAxMTEsIDIzNSwgMjM0LCA0NCwgMjU0LCAxMDksIDI1NCwgMTA5LCAyMzEsIDg4LCAyNTQsIDEwOSwgCi0gICAgMjE4LCAyNTUsIDI1NCwgMTA5LCAyNDcsIDE3MSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0NywgMTc0LCAyMjYsIDgsIDExMSwgCi0gICAgMjI4LCA1MiwgMjI2LCA4LCAxMTEsIDIzMiwgMTQ2LCAyNTQsIDExOCwgMjMyLCAxNDYsIDIyNiwgMTU4LCAyMzUsIDE5OCwgCi0gICAgMjE0LCAxNzUsIDIzNSwgMjExLCA1MiwgMjM1LCAyMTEsIDIxNSwgMjExLCAyMzUsIDIxMSwgMjQ5LCAxODIsIDIzNSwgMjExLCAKLSAgICAyMTgsIDEzLCAyMzUsIDIxMSwgMjEzLCAxMjksIDIzNSwgMjExLCAyNTAsIDIsIDIzNSwgMjExLCAyNTAsIDIsIDI0OSwgCi0gICAgMTgyLCAyMzUsIDIxMSwgMjU0LCA4OCwgMjQ5LCAxODIsIDIzNSwgMjExLCAyMTYsIDE4NiwgMjUyLCA2NywgMjIzLCAxMzcsIAotICAgIDIyNCwgMTY5LCA1OSwgMjMwLCAxODEsIDI0NSwgMzMsIDI0MywgNDYsIDIyNCwgMTY5LCAyNDEsIDU3LCAyMTYsIDg5LCAKLSAgICAyMjYsIDE2NywgMjIzLCA0OSwgMTgyLCAyMzUsIDE5MywgMjMzLCA2NSwgMjIyLCA5MSwgMjE5LCAxNTcsIDIxMiwgMzUsIAotICAgIDIxMSwgMjAwLCAyMjQsIDE4MCwgMjI4LCA1MiwgMTgyLCAyMzAsIDE4MiwgMTgyLCAyNTMsIDIxMCwgMTI4LCAxMTEsIDIyOCwgCi0gICAgNTIsIDI1MywgMjEwLCAxMjgsIDExMSwgMjU0LCA0OCwgMTI4LCAxMTEsIDI1NCwgNDgsIDI1MSwgODgsIDIyOCwgNTIsIAotICAgIDI1NSwgNCwgMTI4LCAxMTEsIDIyOSwgMTAwLCAyNTQsIDQ4LCAyMjgsIDU5LCAyNTUsIDQsIDEyOCwgMTExLCAyNTQsIDE0OCwgCi0gICAgMTI4LCAxMTEsIDIyOCwgNTIsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjU0LCAxNDgsIDEyOCwgMTc3LCAxMjgsIDExMSwgMjE1LCAKLSAgICAyMTEsIDE4MiwgMjU0LCAxNTUsIDEyOCwgMTExLCAyNDUsIDk0LCAxMTEsIDI0MywgNDUsIDI0NSwgOTQsIDExMSwgMjQ3LCAKLSAgICAyMzQsIDI1MiwgMjMsIDI1NCwgNTAsIDIxNiwgMTk2LCAyMzIsIDIyMSwgMjQzLCA0NSwgMTI4LCAxMTEsIDI1NCwgNDgsIAotICAgIDEyOCwgMjE2LCA0MiwgMTc3LCAyMTYsIDE5NiwgMjM2LCAxNSwgMjI2LCAyMzEsIDIzNiwgMTUsIDY0LCAxNzcsIDI1NCwgCi0gICAgNDgsIDEyOCwgMTExLCAyNDksIDIyNywgMjQ1LCA5NywgMjQ1LCA5OCwgMjQ5LCAyMjYsIDIyMiwgMjM0LCAyMzYsIDAsIAotICAgIDEyOCwgMTExLCAyMjIsIDIzNCwgMTI4LCAxMTEsIDI0OSwgMTU0LCAxMTEsIDI0NSwgNjcsIDI0NSwgOTYsIDExMSwgMjE4LCAKLSAgICAxNTcsIDI0NSwgOTcsIDI0OCwgNTUsIDEyOCwgMTExLCAxMjgsIDIxNiwgNDIsIDI1MSwgNzgsIDI0OCwgNzIsIDIzMSwgODgsIAotICAgIDI1MSwgNzcsIDIyNCwgMTEsIDEyOCwgMTExLCAyMjgsIDUyLCAxMjgsIDExMSwgMjQwLCAxMDQsIDExMSwgMjI4LCA1MiwgCi0gICAgMjQwLCAxMDQsIDExMSwgMjE4LCAxMDksIDI0NSwgOTQsIDExMSwgMjMzLCAxNSwgMTc3LCAxMjgsIDExMSwgMjQyLCAxMzAsIAotICAgIDE3NywgMTI4LCAxMTEsIDIzMywgMTUsIDExNywgMTI4LCAxMTEsIDI0MiwgMTMwLCAxMTcsIDEyOCwgMTExLCAyMzMsIDE1LCAKLSAgICAyNTEsIDg4LCAyMjgsIDUyLCAxMjgsIDExMSwgMjQyLCAxMzAsIDI1MSwgODgsIDIyOCwgNTIsIDEyOCwgMTExLCAyMzAsIAotICAgIDk3LCAyMzMsIDE0LCAyMzAsIDk3LCAyNDIsIDEyOSwgMjUyLCAyMywgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyMjgsIDUyLCAKLSAgICAyMzMsIDE0LCAyMjgsIDUyLCAyNDIsIDEyOSwgMjI5LCAxMDAsIDIzMywgMTUsIDIyOCwgNTksIDEyOCwgMTExLCAyMjksIAotICAgIDEwMCwgMjQyLCAxMzAsIDIyOCwgNTksIDEyOCwgMTExLCAyMzMsIDE1LCAxNzcsIDI0NSwgOTQsIDExMSwgMjQyLCAxMzAsIAotICAgIDE3NywgMjQ1LCA5NCwgMTExLCAyMjksIDEwMCwgMjMzLCAxNSwgMjI4LCA1OSwgMjQ1LCA5NCwgMTExLCAyMjksIDEwMCwgCi0gICAgMjQyLCAxMzAsIDIyOCwgNTksIDI0NSwgOTQsIDExMSwgMjMzLCAxNSwgMTc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDE3NywgCi0gICAgMjMzLCAxNCwgMjI5LCAxMDAsIDIzMywgMTUsIDIyOCwgNTksIDI0MiwgMTI5LCAyMjksIDEwMCwgMjQyLCAxMzAsIDIyOCwgCi0gICAgNTksIDIzMywgMTQsIDIyNCwgMjAyLCAyMTgsIDU1LCAyMjQsIDIwMywgMTc3LCAxMjgsIDExMSwgMjE4LCA1NiwgMTc3LCAKLSAgICAxMjgsIDExMSwgMjI0LCAyMDMsIDE3NywgMjQ1LCA5NCwgMTExLCAyMTgsIDU2LCAxNzcsIDI0NSwgOTQsIDExMSwgMjQ3LCAKLSAgICAxMzgsIDIyOCwgNTIsIDIyNCwgMjA1LCAyNDcsIDEzOCwgMjI4LCA1MiwgMjE4LCA1NywgMjE4LCA2NCwgMjI2LCAyMzEsIAotICAgIDIxOCwgMjIsIDIyNiwgMjMxLCAyMjgsIDUyLCAxMTUsIDIxOCwgNjQsIDIyNiwgMjMxLCAyMjgsIDUyLCAxMTUsIDIxOCwgCi0gICAgMjIsIDIyNiwgMjMxLCAyMTgsIDY0LCA2NCwgMTc3LCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDE3NywgMTI4LCAxMTEsIAotICAgIDIyOSwgMTAwLCAxMTUsIDIxOCwgNjQsIDY0LCAyMjgsIDU5LCAxMjgsIDExMSwgMjI5LCAxMDAsIDExNSwgMjE4LCAyMiwgCi0gICAgNjQsIDIyOCwgNTksIDEyOCwgMTExLCAyMTgsIDY0LCA2NCwgMiwgMjI4LCA1MiwgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCAyLCAKLSAgICAyMjgsIDUyLCAxMjgsIDExMSwgMjMwLCA4MSwgMjMwLCA4MiwgMjMwLCA4MywgMjMwLCA4MiwgMjE0LCAxNzUsIDQyLCAyMzYsIAotICAgIDE1LCAyMjYsIDIzMSwgNDIsIDIyNiwgMTUwLCAyMjYsIDIzMSwgNDIsIDIzNiwgMTUsIDY0LCAxNzcsIDEyOCwgMTExLCA0MiwgCi0gICAgMjI2LCAxNTAsIDY0LCAxNzcsIDEyOCwgMTExLCA0MiwgMjUwLCAyNTEsIDQyLCAyNDksIDEwMiwgMzcsIDIyNSwgMjIsIDM3LCAKLSAgICAyMzAsIDE4MSwgMzcsIDIxNiwgODUsIDM3LCAyNDcsIDE2OSwgMjE5LCA5NSwgMzcsIDU5LCAyMjYsIDE2NywgMzcsIDIyMiwgCi0gICAgMjM0LCAyMjYsIDE2NywgMzcsIDI1MywgMjE3LCAyMjYsIDE2NywgMzcsIDI0NSwgOTcsIDM3LCAyNDgsIDE1NiwgOTIsIAotICAgIDIyNSwgMjIsIDkyLCAyMzAsIDE4MSwgOTIsIDIxNiwgODUsIDkyLCA1OSwgMjI2LCAxNjcsIDQ0LCAyMTcsIDg3LCA0MywgCi0gICAgMjE3LCA4NywgMTI0LCAyMTcsIDg3LCAxMjAsIDIxNywgODcsIDI1MywgMjIwLCAyMzAsIDE1NiwgMjE1LCAxOTEsIDI0NCwgCi0gICAgMjUsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIDQ0LCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQxLCA1MiwgNDQsIDIxNSwgCi0gICAgOTMsIDI0NywgMTM4LCAyMjgsIDUyLCAyMjQsIDE2MywgMjI4LCA1MiwgMjE1LCAxOTEsIDI0NywgMTM4LCAyMjgsIDUyLCAKLSAgICAyNDQsIDI2LCAyMjksIDEwMiwgNTIsIDY3LCAyNTIsIDE0MSwgNTIsIDQ0LCAyMTUsIDkzLCAyMjQsIDIwMywgMjE0LCAxODQsIAotICAgIDIyMywgOTEsIDIxOCwgNTYsIDIxNCwgMTg0LCAyMjMsIDkxLCAyMjgsIDU3LCAyMTgsIDc3LCAyMjYsIDIzMSwgMjQ5LCAKLSAgICAxODYsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc2LCAyMjgsIDU3LCAyMTgsIDc3LCA2NCwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjQ5LCAxODYsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc3LCAxNzcsIDEyOCwgMTExLCAyMjYsIDE1MCwgMjI2LCAyMzEsIAotICAgIDIzNiwgMTUsIDIyNiwgMjMxLCAyMzAsIDg3LCAyNDEsIDIwMCwgMjQ5LCAxOTYsIDIzMSwgMTM3LCAyMzUsIDIwOCwgMjExLCAKLSAgICAxNDUsIDIyOSwgMjAyLCAyMjgsIDU4LCA0NCwgMjU0LCAxMTAsIDIsIDI1NCwgMjUsIDQ0LCAyMTUsIDIyNSwgMjMwLCAyNCwgCi0gICAgMjMyLCAxNDYsIDI1NCwgMTE4LCAyMzAsIDI0LCAyMzIsIDE0NiwgMjI2LCAxNTgsIDIzMCwgMjQsIDIzNSwgMTk4LCAyMzAsIAotICAgIDI0LCAyMTQsIDE3NSwgMjQ3LCAyNDksIDIyNiwgMTY3LCA1OSwgMjI2LCAxNjcsIDIxOCwgMTU3LCAyMjYsIDE2NywgMjQ3LCAKLSAgICAxNjksIDIxNiwgODUsIDI1MSwgMTY0LCA0MywgMjI4LCA1NywgMjQ0LCAxODEsIDIyMCwgMTQ5LCAyMjQsIDE4MCwgNDQsIAotICAgIDIyOCwgNTcsIDI0NCwgMTgxLCAyMjAsIDE0OSwgMjI0LCAxODAsIDQzLCAyMjAsIDE0OSwgMjI0LCAxODAsIDQ0LCAyMjAsIAotICAgIDE0OSwgMjI0LCAxODAsIDIyMywgNDksIDIxNiwgODksIDI0NSwgOTcsIDI0OSwgOTksIDIzMiwgMTQ2LCAyMjYsIDE1OCwgCi0gICAgMjQ5LCA5OSwgMjMyLCAxNDYsIDI1NCwgMTE4LCA1MiwgMjE4LCA2MywgNTIsIDIxOCwgMjEsIDUyLCAyMzUsIDE5OCwgNTIsIAotICAgIDIxNCwgMTc1LCAyMjUsIDQ3LCAxMjgsIDIyLCAyMjYsIDgsIDExMSwgMjMzLCAxNSwgMiwgMjQ3LCAxMjAsIDI0MiwgMTMwLCAKLSAgICAyLCAyNDcsIDEyMCwgMjEzLCAxODcsIDIzMCwgOTcsIDIzMywgMTQsIDIxMywgMTg3LCAyMzAsIDk3LCAyNDIsIDEyOSwgCi0gICAgMjMzLCAxNSwgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgCi0gICAgMTQsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAxMjgsIDIxNiwgNDIsIDE3NywgMjQyLCAxMjksIDEyOCwgMjE2LCAKLSAgICA0MiwgMTc3LCAyMjQsIDIwMiwgMTI4LCAyMTYsIDQyLCAxNzcsIDIxOCwgNTUsIDI0NywgMTM4LCAyMjgsIDUyLCAyMjQsIAotICAgIDIwNiwgMTc3LCAyNDUsIDk5LCAyNDcsIDEzOCwgMjI4LCA1MiwgMjE4LCA1OCwgMTc3LCAyNDUsIDk5LCAyMjgsIDUyLCA0MiwgCi0gICAgMjM2LCAxNSwgNjQsIDE3NywgMTI4LCAxMTEsIDIyOCwgNTIsIDQyLCAyMjYsIDE1MCwgNjQsIDE3NywgMTI4LCAxMTEsIDQyLCAKLSAgICAyMzYsIDE1LCA2NCwgMTc3LCAyMjgsIDUyLCAxMjgsIDExMSwgNDIsIDIyNiwgMTUwLCA2NCwgMTc3LCAyMjgsIDUyLCAxMjgsIAotICAgIDExMSwgMjMzLCAxNSwgMjUxLCA4OCwgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyNDIsIDEzMCwgMjUxLCA4OCwgMjI4LCA1MiwgCi0gICAgMjQ1LCA5NCwgMTExLCAyMjQsIDIwMywgMjUxLCA4OCwgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyMTgsIDU2LCAyNTEsIDg4LCAKLSAgICAyMjgsIDUyLCAyNDUsIDk0LCAxMTEsIDIyOCwgNTIsIDIyOCwgNTcsIDIxOCwgNzcsIDIyNiwgMjMxLCAyNDcsIDEzOCwgCi0gICAgMjI4LCA1MiwgMjQ5LCAxODgsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc2LCAyMjgsIDUyLCAyMjgsIDU3LCAyMTgsIDc3LCAKLSAgICA2NCwgMTc3LCAxMjgsIDExMSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0OSwgMTg4LCAyNTMsIDIzOCwgMjI4LCA1NywgMjE4LCAKLSAgICA3NywgMTc3LCAyNDUsIDk5LCA2NywgMjQ1LCAxNjMsIDIzMCwgMjIyLCAyMDMsIDI0NSwgMTYzLCAxMjAsIDQ0LCAyNDcsIAotICAgIDI1NSwgMjQ1LCAxNjMsIDEyNCwgNDQsIDI0NywgMjU1LCAyNDUsIDE2MywgMjQ1LCAxNzAsIDY0LCAyLCAxOTksIDIwMywgCi0gICAgOTEsIDI0NSwgMTcwLCA2NCwgMiwgNjcsIDI1MiwgMTQxLCAyNTMsIDIwNywgMjQ1LCAxNDMsIDY0LCAyMDMsIDkxLCA0LCAKLSAgICAyNDUsIDE3MCwgNjQsIDIsIDY3LCAyNTIsIDE0MSwgMjUzLCAyMDcsIDI0NSwgMTQzLCA2NCwgMjAzLCA5MSwgMjQ1LCAxNzAsIAotICAgIDY0LCAyLCA1OSwgNDgsIDI0NSwgMTcwLCA2NCwgMiwgMjI2LCAxMjMsIDQsIDI0NSwgMTcwLCA2NCwgMiwgMjI2LCAxMjMsIAotICAgIDI0NSwgMTcwLCA2NCwgMiwgMjE0LCAxODMsIDI0NSwgMTcwLCA2NCwgMiwgMTEzLCAyMDMsIDIxOCwgOTAsIDI0OSwgMTg2LCAKLSAgICAyLCAxOTksIDIwMywgOTEsIDI0OSwgMTg2LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgCi0gICAgOTEsIDQsIDI0OSwgMTg2LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgOTEsIDI0OSwgCi0gICAgMTg2LCAyLCAyMjYsIDEyMywgNCwgMjQ5LCAxODYsIDIsIDIyNiwgMTIzLCAyMTAsIDE2MCwgMTg3LCAyNTIsIDE3MywgMjMxLCAKLSAgICA2MSwgMjQ3LCAyNTAsIDUwLCAyNDUsIDE3MiwgNzQsIDI0MCwgMjM0LCAxMjAsIDI1MywgMjQ5LCAxMjQsIDI1MywgMjQ5LCAKLSAgICAyMjQsIDE3NSwgMjI1LCAxNjUsIDIxMiwgMzIsIDIzMiwgMjEzLCA0MywgMjUwLCAxODEsIDQ0LCAyNTAsIDE4MSwgNDMsIAotICAgIDI0NCwgNTcsIDQ0LCAyNDQsIDU3LCAyNTEsIDE3NSwgNDQsIDI0OSwgMTMyLCAyNTEsIDE3NSwgNDMsIDI0OSwgMTMyLCAKLSAgICAyMTYsIDE0LCA0NCwgMjQ5LCAxMzIsIDIxNiwgMTQsIDQzLCAyNDksIDEzMiwgMjIzLCA0OSwgMjI4LCA1MiwgNTAsIDQyLCAKLSAgICAyMzIsIDEwNCwgMjU0LCAyNSwgMjIxLCAxNjQsIDIyMSwgMTcxLCAyMTcsIDEsIDIyMywgMTIwLCAyMjQsIDI0MSwgMjM1LCAKLSAgICAyMzgsIDIxMywgMTY1LCAyMTgsIDIzNCwgMjI1LCA0MSwgNjQsIDIzNSwgMjA3LCA1MCwgMjE1LCA5NCwgMjI4LCA1MiwgNTAsIAotICAgIDIxMiwgNDIsIDI0MCwgMjM2LCAyMTYsIDE0LCA0MywgMjQ5LCAxNjAsIDIxNiwgMTQsIDQ0LCAyNDksIDE2MCwgMjUxLCAKLSAgICAxNzUsIDQzLCAyNDksIDE2MCwgMjUxLCAxNzUsIDQ0LCAyNDksIDE2MCwgMjE2LCAxNCwgMTYzLCAyMzUsIDIxMSwgMjUxLCAKLSAgICAxNzUsIDE2MywgMjM1LCAyMTEsIDI0MywgMjQwLCAyMTksIDc1LCAxMjAsIDI1MywgMjUwLCAyNTIsIDI0LCAxMTMsIDIwMywgCi0gICAgMjUyLCAxMjksIDIyNiwgMTYwLCAyMzQsIDEzOCwgMjQ1LCA5MCwgMjE2LCA0MiwgMjE2LCAxOTYsIDIyMiwgMjUxLCAyMTEsIAotICAgIDE3OSwgMjM2LCAwLCAxMTUsIDIyMywgMTE3LCAyNTEsIDE2MywgMjM0LCAxMzcsIDIzMywgNDIsIDI1NCwgMTEwLCAxMjcsIAotICAgIDIyMiwgMjQ3LCAyNTQsIDExMCwgMTI3LCAyNDUsIDkwLCAyMTYsIDQyLCAyMTYsIDE5NiwgMjMzLCA0NiwgMjUyLCAzNSwgCi0gICAgMjIyLCAyMzMsIDI0OSwgNzAsIDI1NCwgMTU1LCAyNTQsIDEsIDIxNywgMTgxLCAyMTYsIDQsIDIyMiwgMTIzLCAyNDcsIAotICAgIDIxNSwgMjI2LCAxNTEsIDI0OSwgMTk4LCAyMTcsIDUyLCAyMTksIDg2LCAyNDksIDE1MSwgMjQ5LCAxNTAsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjQwLCAxNTEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjE4LCAyMjgsIDIyNCwgMjcsIDI1NCwgCi0gICAgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ1LCA5OSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDcsIAotICAgIDE3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDcsIDI0OCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyMjQsIDI4LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI1MCwgMzUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjUwLCAzNiwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUwLCAzNiwgMjM1LCA1NiwgMjU0LCAKLSAgICA2NiwgMjQzLCAyMjUsIDE2LCAyMTksIDk2LCAxMzAsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUyLCAxODEsIDEzMCwgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyMTksIDk1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIAotICAgIDI1MiwgMTgwLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDIzMywgMTQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjI0LCAyOCwgMjQyLCAxMjksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTQwLCAyMTQsIDE5LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDk3LCAyMTQsIDE5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDE0MCwgNzQsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgOTcsIDc0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDI1MiwgMTgwLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjE3LCA4OCwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjQ4LCA1NSwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMTI0LCAyNTAsIDIzOCwgMjU0LCAKLSAgICA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDgsIDU0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjE3LCA4OCwgCi0gICAgMjM1LCA1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTQsIDE1MywgMjE0LCAxOSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyMjQsIDI4LCAyMTQsIDE1MywgNzQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTIwLCAyMTcsIDg4LCAyMjYsIDEyMywgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDgsIDY2LCAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAKLSAgICAxMjAsIDI1MCwgMjM4LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0OCwgNjUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMTIwLCAyMTcsIDg4LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0NiwgMTA0LCAyMTQsIDE5LCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0NiwgMTA0LCA3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjMsIAotICAgIDI1MywgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ4LCA1NSwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjQ3LCAyNDksIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIzNSwgNTcsIDIxNCwgMTgzLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyMCwgCi0gICAgMjIwLCA1LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyMywgMjUzLCAyMjQsIDI3LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDI1MCwgMzYsIDIxOCwgMTU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0OSwgMjI2LCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyMCwgMjE3LCA4OCwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OCwgCi0gICAgNjYsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTgsIDE1NywgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgCi0gICAgMTYsIDIzNSwgNTcsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTAsIDM2LCAyNDgsIDEsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMTI0LCAyMjAsIDUsIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDQzLCAyMjAsIDUsIAotICAgIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxNiwgODksIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyNDIsIDEzMCwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OSwgMjIwLCAxMzAsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjQ4LCA2NiwgMTgyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxMCwgMzQsIDI1NCwgNjYsIDI0MywgMjI1LCAKLSAgICAxNiwgMjE4LCAxMzYsIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjAsIDE1MSwgMjE0LCAxODMsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjI4LCA1MiwgMjQ1LCA5OSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAKLSAgICAyMjQsIDEyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjUwLCAyMzksIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIAotICAgIDE2LCAxMjAsIDI1MCwgMjM5LCAxODIsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjM1LCAxODUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjIzLCAzNywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjYsIDIwMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyNTQsIDE0NCwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ1LCAxMDEsIDIxNCwgMTgzLCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDIzNSwgMTg2LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjYsIDIwMiwgMjE0LCAKLSAgICAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjU0LCAxNDMsIDIyOCwgNTIsIDI1MCwgMTMwLCA3OCwgNDQsIDI1NCwgCi0gICAgMTEwLCAyLCAyNDYsIDEwNCwgMjEwLCAzNSwgNzQsIDIxOSwgMjM1LCAyMDQsIDI1MSwgMTYzLCAyNTIsIDQ1LCA4NywgNjcsIAotICAgIDIzMiwgMjE0LCAyLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDIzNSwgMjE2LCA4NywgMjQ5LCAxODMsIDIxNCwgMTgxLCA4NywgCi0gICAgMjQ3LCAxODksIDIxNCwgMTgxLCA4NywgMjQ1LCAxNTQsIDg3LCAyNDksIDIxMCwgODcsIDcxLCA0MiwgMiwgMjUwLCAxNzUsIAotICAgIDY3LCAyMzIsIDIxMywgMjQ1LCAxMzAsIDg3LCAyNTQsIDEzOSwgMjM0LCAxMzksIDg3LCAyNDEsIDIxMywgODcsIDM3LCAKLSAgICAyMDMsIDI1MiwgMTQxLCAyLCAyMjgsIDUwLCAzNywgMjE1LCAyMjYsIDI0NiwgMTA2LCAyNTEsIDEzNSwgMjUwLCAzNiwgMiwgCi0gICAgMjI4LCA1NCwgNzQsIDIxNCwgMTc5LCA4NywgMjMwLCAxMzcsIDg3LCAyNDAsIDE2NCwgODcsIDIyNiwgMTc0LCAyNDIsIDU5LCAKLSAgICA4NywgMjI2LCAxNzQsIDIzMywgMTQ3LCA4NywgMjI1LCAyNDQsIDg3LCAyMjUsIDI0MywgODcsIDI0NywgMTk3LCAyNDksIAotICAgIDk3LCAxNiwgMjQ0LCAyMCwgMTA1LCAyMTksIDUwLCA4NywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI3LCAyNDgsIAotICAgIDgzLCAyMjAsIDEzOCwgMjM0LCAxMzksIDg3LCAyMjQsIDE5MiwgMjI2LCA3NSwgMjI5LCA4MiwgMjI2LCA3NSwgMjI0LCAKLSAgICAxODgsIDIyMSwgMTg5LCA4NywgMjUwLCAxNywgMjIxLCAxODksIDg3LCA0MywgMjI2LCA0LCAyMTQsIDE2MCwgMTAzLCA0MywgCi0gICAgMjI2LCA0LCAyNDUsIDIxLCA0MywgMjI2LCA0LCAyMzIsIDEwOCwgMTAzLCA0NCwgMjI2LCA0LCAyMTQsIDE2MCwgMTAzLCAKLSAgICA0NCwgMjI2LCA0LCAyNDUsIDIxLCA0NCwgMjI2LCA0LCAyMzIsIDEwOCwgMTAzLCA0MywgNDIsIDI1MSwgMTU4LCAyMTQsIAotICAgIDE2MCwgMjQ5LCAxNjAsIDQzLCA0MiwgMjUxLCAxNTgsIDI0NSwgMjEsIDQzLCA0MiwgMjUxLCAxNTgsIDIzMiwgMTA4LCAKLSAgICAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMjE0LCAxNjAsIDI0OSwgMTYwLCA0NCwgNDIsIDI1MSwgMTU4LCAyNDUsIAotICAgIDIxLCA0NCwgNDIsIDI1MSwgMTU4LCAyMzIsIDEwOCwgMjQ5LCAxNjAsIDQzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjE0LCAKLSAgICAxNjAsIDEwMywgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMzAsIDIyNCwgMjI1LCAxMDEsIDQzLCAyNDksIDk5LCAyNTEsIAotICAgIDE1OCwgMjMyLCAxMDgsIDEwMywgMjQ5LCA5OSwgMjUxLCAxNTgsIDI0NSwgMjEsIDQ0LCAyNDksIDk5LCAyNTEsIDE1OCwgCi0gICAgMjE0LCAxNjAsIDEwMywgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAyMzAsIDIyNCwgMjI1LCAxMDEsIDQ0LCAyNDksIDk5LCAKLSAgICAyNTEsIDE1OCwgMjMyLCAxMDgsIDEwMywgMjM1LCAyMTIsIDI0NSwgMjEsIDIwMywgMjMyLCAyMTQsIDI0NSwgMjEsIDIxNCwgCi0gICAgMTYwLCA0MywgMTc3LCAyMzIsIDEwOCwgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAyMjEsIDE3MiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAxNzcsIDIzMiwgMTA4LCA0MywgMjQ5LCA5OSwgMjUxLCAxNTgsIDIyMSwgMTcyLCAyMTgsIDQxLCAyMTYsIDEzLCAyMTgsIAotICAgIDQxLCAyNTEsIDE3NCwgMjE2LCAxNCwgNDIsIDEyNywgMjUxLCAxNzUsIDQyLCAxMjcsIDI1MSwgMTc1LCA0MiwgMjUxLCAKLSAgICAxNTgsIDExNywgMjE2LCAxNCwgNDIsIDEyNywgMzQsIDE2LCAyNTEsIDE3NCwgNDMsIDY3LCA5MywgMjMyLCAyMTMsIDQ0LCAKLSAgICA2NywgOTMsIDIzMiwgMjEzLCAyMDMsIDIyMSwgMjA1LCAyMzIsIDIxMiwgMjAzLCAyMjEsIDIwNSwgMjMyLCAyMTEsIDIwMywgCi0gICAgMjIxLCAyMDUsIDIzMiwgMjEwLCAyMDMsIDIyMSwgMjA1LCAyMzIsIDIwOSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAKLSAgICAyMTYsIDE0LCAyMjIsIDI1MSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAyNTEsIDE3NSwgMjIyLCAyNTEsIDI0OCwgNDYsIAotICAgIDE2LCAxOTIsIDY3LCAyLCAyNTAsIDM1LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyMDMsIDIsIDI1MCwgMzUsIDI0OCwgCi0gICAgNDYsIDE2LCAxOTIsIDEyMCwgMjIsIDIwMywgMiwgMjUwLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIsIDIxNSwgMjI1LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyMDMsIDIsIDIxNSwgMjI1LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAKLSAgICAyMDMsIDIsIDIxNSwgMjI1LCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIDIxMiwgMzUsIDI0OCwgNDYsIDE2LCAxOTIsIAotICAgIDEyNCwgMjIsIDIwMywgMiwgMjEyLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgMTIwLCAyMiwgMjAzLCAyLCAyMTIsIDM1LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyNDEsIDQ0LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAyNDEsIDQ0LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIDIxNiwgMTQsIDIzMywgNDYsIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgCi0gICAgMjUxLCAxNzUsIDIzMywgNDYsIDQyLCAyNDQsIDMyLCAyMjMsIDU0LCA4NywgMjQ1LCAxODIsIDg3LCA2NywgMjMyLCAyMTQsIAotICAgIDI0NSwgMjEsIDIzMSwgMzMsIDI1MSwgMTQ2LCAyMzEsIDMzLCAxOTksIDExNywgMjE5LCAyNTAsIDIzMSwgMzMsIDIxOSwgCi0gICAgMjUxLCAxMTcsIDIzMiwgMTM3LCAyMzEsIDMzLCAxOTksIDExNywgMTEzLCAyMTksIDIzNywgMjMxLCAzMywgMTEzLCAyMTksIAotICAgIDIzOCwgMTE3LCAyMzIsIDEzNywgMjMxLCAzMywgMTEzLCAyMTksIDIzOCwgMjM1LCA2NCwgMjMxLCAzMywgMjE1LCAyMDgsIAotICAgIDIzMSwgMzMsIDIxNiwgMjIzLCAyMzEsIDMzLCAyMjUsIDE4OCwgMjQ1LCAyMjQsIDI0MiwgMTIyLCAyNDMsIDIxOSwgMjE2LCAKLSAgICAxNCwgMjI2LCAzLCAyNTEsIDE3NSwgMjI2LCAzLCAyMTYsIDE0LCAyNDksIDk5LCAxMjcsIDI1MSwgMTc1LCAyNDksIDk5LCAKLSAgICAxMjcsIDIxNiwgMTQsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAyNTEsIDE3NSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDcxLCAKLSAgICAyMTUsIDIzOSwgMjUyLCAzNSwgMjIyLCAyMzQsIDIsIDI1MCwgMzUsIDIxOCwgMTIwLCAyNDQsIDY0LCAyNTUsIDE3LCAyNDksIAotICAgIDk2LCAyNDUsIDE3MSwgMjM1LCAxOTgsIDI0OCwgODMsIDI0NSwgMjQsIDg3LCA4NSwgMjIyLCAyNDcsIDUyLCAyMTUsIDIyNSwgCi0gICAgODUsIDIzMywgNDIsIDUyLCAyMTUsIDIyNSwgODUsIDIxNCwgMTYyLCA1MiwgMjE1LCAyMjUsIDg1LCAyNDYsIDEwNSwgNTIsIAotICAgIDIxNSwgMjI1LCA4NSwgMjIyLCAyNDcsIDUyLCAyMTUsIDIyNiwgMiwgNjcsIDEzMCwgODUsIDIzMywgNDIsIDUyLCAyMTUsIAotICAgIDIyNiwgMiwgNjcsIDEzMCwgODUsIDIyMiwgMjQ3LCAyMTUsIDIyNiwgMiwgNTIsIDY3LCAxMzAsIDI1NCwgMTczLCAyNTAsIAotICAgIDMsIDIxOCwgMTI2LCAyMTYsIDg2LCAyNTAsIDMsIDI0MCwgMjM3LCAyLCAyNDQsIDUwLCAyMjEsIDI0MSwgMTYsIDMxLCAKLSAgICAyMjcsIDIwMiwgMTYsIDMxLCAyMTgsIDE1MiwgNjQsIDI0MSwgMjMzLCAxNiwgMzEsIDIxOCwgMTUyLCA2NCwgMjE2LCAyMTIsIAotICAgIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMTYsIDIxMiwgMTYsIDMxLCAyNDUsIDE0MywgNjQsIDIxNSwgMjQzLCAxNiwgMzEsIAotICAgIDI0NSwgMTMyLCAxNiwgMzEsIDI1NSwgNywgMTYsIDMxLCAyNTIsIDQ0LCAxNiwgMzEsIDI1MiwgMTc5LCAxNiwgMzEsIDIwMywgCi0gICAgMjE3LCA4OSwgMTYsIDMxLCAyMzIsIDIxNCwgMjQ0LCAxNDUsIDE2LCAzMSwgNjcsIDIxNywgODksIDE2LCAzMSwgMjQ0LCAKLSAgICAyMCwgMjQ0LCAxNDUsIDE2LCAzMSwgMjUwLCAyMzAsIDIyMywgNTMsIDE2LCAzMSwgMjIwLCAyOCwgMjI2LCAxMzAsIDE2LCAKLSAgICAzMSwgMjIwLCAyOCwgMjM1LCAyNTUsIDE2LCAzMSwgMjQ4LCAxNTEsIDIzMiwgMjA0LCAyNDUsIDc3LCAxNiwgMzEsIDI0OCwgCi0gICAgMzEsIDI0OSwgMTc4LCAxMTAsIDE2LCAzMSwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDEwNSwgMTYsIDMxLCAyNDgsIDMxLCAyNDksIAotICAgIDE3OCwgMTU4LCAxNiwgMzEsIDI0OCwgMzEsIDI0OSwgMTc4LCAxNjEsIDE2LCAzMSwgMTUyLCAyNTUsIDcsIDE2LCAzMSwgCi0gICAgMjE3LCAxNzcsIDIzNiwgNjIsIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMTUsIDI0NCwgMjUxLCAyMTMsIDE2LCAzMSwgMjUxLCAKLSAgICA1LCAxNiwgMzEsIDI0NSwgMTQzLCA2NCwgMjMxLCA4MSwgMTYsIDMxLCAyMTgsIDYxLCAxNiwgMzEsIDI0NSwgNzcsIDE2LCAKLSAgICAzMSwgMjQ0LCAxMDcsIDIyMCwgMTM3LCAxNiwgMzEsIDI0MiwgMTIxLCAyMjAsIDEzNywgMTYsIDMxLCAyMjMsIDEyMSwgCi0gICAgMjIwLCAxMzcsIDE2LCAzMSwgMjE0LCAxNzQsIDIyMCwgMTM3LCAxNiwgMzEsIDIxOSwgMTgsIDE2LCAzMSwgMjQ4LCA2MywgCi0gICAgMjUxLCAyMTYsIDg3LCAyMDQsIDI1MSwgMTYzLCAxNiwgMzEsIDIyOSwgODUsIDE2LCAzMSwgMjQ4LCA2NCwgMjQ0LCAyMCwgCi0gICAgMTA1LCAxNiwgMzEsIDIxOCwgNjIsIDI0NCwgMjAsIDEwNSwgMjI2LCAyNDEsIDEwMywgMjI2LCAyNDEsIDI1MCwgMTUyLCAKLSAgICAyMjYsIDI0MSwgMjQ0LCAyMywgMjI2LCAyNDEsIDIzNSwgMTkzLCAyNDQsIDIzLCAyMjYsIDI0MSwgMjUyLCA0MiwgMjUxLCAKLSAgICAxMjQsIDIyNiwgMjQxLCAyNTEsIDE3MCwgMjE2LCAxMTEsIDIyNiwgMjQxLCAyNTEsIDE1NSwgMjUyLCAxNDYsIDI0MCwgCi0gICAgMTAzLCAyMjYsIDI0MSwgMjU0LCAxMjcsIDY0LCAyNTAsIDEyOSwgMjI2LCAyNDEsIDI0OCwgMTU2LCAyMjYsIDI0MSwgMjQ5LCAKLSAgICA4NywgMjU1LCAxMSwgMjI3LCAyMDAsIDIyNiwgMjQxLCA1MiwgMjUyLCAxODAsIDM3LCAyMSwgMTEwLCAzNywgMjEsIDEwNSwgCi0gICAgMzcsIDIxLCAxNTgsIDM3LCAyMSwgMTYxLCAzNywgMjEsIDE4OSwgMzcsIDIxLCAxOTQsIDM3LCAyMSwgMTk4LCAzNywgMjEsIAotICAgIDE5NSwgMzcsIDIxLCAyMDAsIDM3LCA1NCwgMjE2LCAyNDcsIDM3LCA1NCwgMjQ1LCAxNjcsIDM3LCA1NCwgMjE1LCA3NiwgCi0gICAgMzcsIDU0LCAyMTYsIDE2NCwgMzcsIDU0LCAyNDQsIDUsIDM3LCA1NCwgMjQ0LCAxMTgsIDM3LCA1NCwgMjE5LCAxMTksIDM3LCAKLSAgICA1NCwgMjIwLCAxMTksIDM3LCA1NCwgMjQ1LCAxOTAsIDM3LCA1NCwgMjI4LCAxOTcsIDM3LCA1NCwgMjE1LCA3MywgODgsIAotICAgIDIxLCAxMTAsIDg4LCAyMSwgMTA1LCA4OCwgMjEsIDE1OCwgODgsIDIxLCAxNjEsIDg4LCAyMSwgMTg5LCA4OCwgMjEsIDE5NCwgCi0gICAgODgsIDIxLCAxOTgsIDg4LCAyMSwgMTk1LCA4OCwgMjEsIDIwMCwgODgsIDU0LCAyMTYsIDI0NywgODgsIDU0LCAyNDUsIAotICAgIDE2NywgODgsIDU0LCAyMTUsIDc2LCA4OCwgNTQsIDIxNiwgMTY0LCA4OCwgNTQsIDI0NCwgNSwgODgsIDU0LCAyNDQsIDExOCwgCi0gICAgODgsIDU0LCAyMTksIDExOSwgODgsIDU0LCAyMjAsIDExOSwgODgsIDU0LCAyNDUsIDE5MCwgODgsIDU0LCAyMjgsIDE5NywgCi0gICAgODgsIDU0LCAyMTUsIDczLCAyMSwgMTIzLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAxMTMsIDI0MywgMjI5LCAyMTgsIAotICAgIDEyOSwgMjEsIDEzNCwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjQ0LCAxMSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgCi0gICAgMjQ0LCA4MSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjE5LCAxMjUsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIyMCwgCi0gICAgMTIyLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyNDUsIDE5MywgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjI4LCAyMDAsIAotICAgIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIxNiwgMjQ4LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyNDUsIDE2OCwgMjQzLCAKLSAgICAyMjksIDIxOCwgMTI5LCA1NCwgMjE1LCA3NywgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjE2LCAxNjUsIDI0MywgMjI5LCAKLSAgICAyMTgsIDEyOSwgNTQsIDI0NCwgNiwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjQ0LCAxMTksIDI0MywgMjI5LCAyMTgsIAotICAgIDEyOSwgNTQsIDIxOSwgMTIwLCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyMjAsIDEyMCwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA1NCwgMjQ1LCAxOTEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIyOCwgMTk4LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAKLSAgICAyMTUsIDc0LCAyNDMsIDIyOSwgMjE4LCAxMjksIDg4LCA3LCA0LCAxLCA2MSwgODgsIDcsIDQsIDEsIDI1MywgMTU4LCA4OCwgCi0gICAgNywgNCwgMSwgMjUxLCA2NiwgODgsIDcsIDQsIDEsIDI0OSwgNjAsIDg4LCA3LCA0LCAxLCA3NSwgODgsIDcsIDQsIDEsIAotICAgIDI0NSwgNiwgODgsIDcsIDQsIDEsIDI0MywgMjAyLCA4OCwgNywgNCwgMSwgMjQyLCA2MCwgODgsIDcsIDQsIDEsIDczLCA4OCwgCi0gICAgNywgNCwgMSwgMjM1LCAxNDQsIDg4LCA3LCA0LCAxLCAyMzUsIDIzLCA4OCwgNywgNCwgMSwgMTU2LCA4OCwgNywgNCwgMSwgCi0gICAgMTkzLCA4OCwgNywgNCwgMSwgMjMwLCAyNSwgODgsIDcsIDQsIDEsIDc2LCA4OCwgNywgNCwgMSwgMjI2LCAxMDUsIDg4LCA3LCAKLSAgICA0LCAxLCAyMjQsIDk2LCA4OCwgNywgNCwgMSwgMTUzLCA4OCwgNywgNCwgMSwgMjIyLCA5MSwgODgsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUyLCA4OCwgNywgNCwgMSwgNzAsIDg4LCA3LCA0LCAxLCAyMTQsIDEwNSwgODgsIDcsIDQsIDEsIDIxMiwgOTgsIDg4LCA3LCAKLSAgICA0LCAxLCAyMTEsIDE3OCwgODgsIDcsIDQsIDEsIDIxMSwgMTE3LCA4OCwgNywgNCwgMSwgMjEwLCAxNTksIDM3LCA3LCA2LCAKLSAgICAxLCA2MSwgMzcsIDcsIDYsIDEsIDI1MywgMTU4LCAzNywgNywgNiwgMSwgMjUxLCA2NiwgMzcsIDcsIDYsIDEsIDI0OSwgNjAsIAotICAgIDM3LCA3LCA2LCAxLCA3NSwgMzcsIDcsIDYsIDEsIDI0NSwgNiwgMzcsIDcsIDYsIDEsIDI0MywgMjAyLCAzNywgNywgNiwgMSwgCi0gICAgMjQyLCA2MCwgMzcsIDcsIDYsIDEsIDczLCAzNywgNywgNiwgMSwgMjM1LCAxNDQsIDM3LCA3LCA2LCAxLCAyMzUsIDIzLCAKLSAgICAzNywgNywgNiwgMSwgMTU2LCAzNywgNywgNiwgMSwgMTkzLCAzNywgNywgNiwgMSwgMjMwLCAyNSwgMzcsIDcsIDYsIDEsIAotICAgIDc2LCAzNywgNywgNiwgMSwgMjI2LCAxMDUsIDM3LCA3LCA2LCAxLCAyMjQsIDk2LCAzNywgNywgNiwgMSwgMTUzLCAzNywgNywgCi0gICAgNiwgMSwgMjIyLCA5MSwgMzcsIDcsIDYsIDEsIDIxNywgMTUyLCAzNywgNywgNiwgMSwgNzAsIDM3LCA3LCA2LCAxLCAyMTQsIAotICAgIDEwNSwgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDM3LCA3LCA2LCAxLCAyMTEsIDE3OCwgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAKLSAgICAzNywgNywgNiwgMSwgMjEwLCAxNTksIDM3LCA3LCA0LCAxLCA2MSwgMzcsIDcsIDQsIDEsIDI1MywgMTU4LCAzNywgNywgNCwgCi0gICAgMSwgMjUxLCA2NiwgMzcsIDcsIDQsIDEsIDI0OSwgNjAsIDM3LCA3LCA0LCAxLCA3NSwgMzcsIDcsIDQsIDEsIDI0NSwgNiwgCi0gICAgMzcsIDcsIDQsIDEsIDI0MywgMjAyLCAzNywgNywgNCwgMSwgMjQyLCA2MCwgMzcsIDcsIDQsIDEsIDczLCAzNywgNywgNCwgCi0gICAgMSwgMjM1LCAxNDQsIDM3LCA3LCA0LCAxLCAyMzUsIDIzLCAzNywgNywgNCwgMSwgMTU2LCAzNywgNywgNCwgMSwgMTkzLCAKLSAgICAzNywgNywgNCwgMSwgMjMwLCAyNSwgMzcsIDcsIDQsIDEsIDc2LCAzNywgNywgNCwgMSwgMjI2LCAxMDUsIDM3LCA3LCA0LCAKLSAgICAxLCAyMjQsIDk2LCAzNywgNywgNCwgMSwgMTUzLCAzNywgNywgNCwgMSwgMjIyLCA5MSwgMzcsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUyLCAzNywgNywgNCwgMSwgNzAsIDM3LCA3LCA0LCAxLCAyMTQsIDEwNSwgMzcsIDcsIDQsIDEsIDIxMiwgOTgsIDM3LCA3LCAKLSAgICA0LCAxLCAyMTEsIDE3OCwgMzcsIDcsIDQsIDEsIDIxMSwgMTE3LCAzNywgNywgNCwgMSwgMjEwLCAxNTksIDM3LCAyMSwgCi0gICAgMjEwLCA4NiwgMTUyLCAzNywgNTQsIDI0NSwgMTY3LCAxNTIsIDM3LCA1NCwgMjE1LCA3NiwgMTUyLCAzNywgNTQsIDIxNiwgCi0gICAgMTY0LCAxNTIsIDM3LCA1NCwgMjQ0LCA1LCAxNTIsIDM3LCA1NCwgMjQ0LCAxMTgsIDE1MiwgMzcsIDU0LCAyMTksIDExOSwgCi0gICAgMTUyLCAzNywgNTQsIDIyMCwgMTE5LCAxNTIsIDM3LCA1NCwgMjQ1LCAxOTAsIDE1MiwgMzcsIDU0LCAyMjgsIDE5NywgMTUyLCAKLSAgICAzNywgNTQsIDIxNSwgNzMsIDUyLCAzNywgMjEsIDExMCwgNTIsIDM3LCAyMSwgMTA1LCA1MiwgMzcsIDIxLCAxNTgsIDUyLCAKLSAgICAzNywgMjEsIDE2MSwgNTIsIDM3LCAyMSwgMTg5LCA1MiwgMzcsIDIxLCAxOTQsIDUyLCAzNywgMjEsIDE5OCwgNTIsIDM3LCAKLSAgICAyMSwgMTk1LCA1MiwgMzcsIDIxLCAyMDAsIDUyLCAzNywgNTQsIDIxNiwgMjQ3LCAxNTIsIDM3LCAyMSwgMjEwLCA4NiwgOTMsIAotICAgIDk5LCAxOTIsIDI0MSwgNDQsIDkzLCA5OSwgMTE0LCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMjEzLCAyMzksIDkzLCA5OSwgCi0gICAgMTE0LCAyMTMsIDIzOSwgOTMsIDk5LCAxOTIsIDIxNSwgMjExLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxMTQsIAotICAgIDIxNSwgMjExLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDIxNSwgMjExLCAyNDgsIDE1NywgMjEzLCAyMzksIAotICAgIDkzLCA5OSwgMTE0LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIDE5MiwgMjI0LCAyNCwgMjQ4LCAKLSAgICAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTE0LCAyMjQsIDI0LCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDIyNCwgCi0gICAgMjQsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIyNCwgMjQsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCAKLSAgICAxOTIsIDEyNCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyNCwgMTkyLCAyMiwgNDQsIDI0MSwgMjIxLCA5MywgOTksIDEyNCwgCi0gICAgMTE0LCAyMiwgNDQsIDIzMiwgMjMwLCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAxMjQsIAotICAgIDIyLCAyMzMsIDQ2LCA5MywgOTksIDEyNCwgMTkyLCAyMiwgNDMsIDI0MSwgMjIxLCA5MywgOTksIDEyNCwgMTE0LCAyMiwgCi0gICAgNDMsIDIzMiwgMjMwLCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDEyMCwgMjIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgNDQsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDQsIDIzMiwgCi0gICAgMjMwLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAyMzMsIDQ2LCA5MywgCi0gICAgOTksIDEyMCwgMTkyLCAyMiwgNDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDMsIDIzMiwgMjMwLCA5MywgCi0gICAgOTksIDExNCwgMTIwLCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDY3LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgNjcsIAotICAgIDE5MiwgMjIsIDQ0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQ0LCAxMjQsIDIzMiwgMjMwLCA5MywgOTksIAotICAgIDEyNCwgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgNjcsIDExNCwgMjIsIDQ0LCAyMzIsIDIzMCwgOTMsIAotICAgIDk5LCAxMjQsIDE5MiwgMjIsIDQ0LCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgNDQsIDEyNCwgMjQxLCAKLSAgICAyMjEsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgNjcsIDIyLCAyMzMsIDQ2LCA5MywgOTksIAotICAgIDY3LCAxOTIsIDIyLCA0MywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzMCwgOTMsIAotICAgIDk5LCAxMjQsIDExNCwgMjIsIDQzLCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDY3LCAxMTQsIDIyLCA0MywgMjMyLCAyMzAsIAotICAgIDkzLCA5OSwgMTI0LCAxOTIsIDIyLCA0MywgMTIwLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDQzLCAxMjQsIAotICAgIDI0MSwgMjIxLCA5MywgOTksIDExNCwgNjcsIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMTI0LCAyMiwgMjQxLCA0NCwgCi0gICAgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDEyNCwgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDExNCwgMjIsIDQzLCAxMjQsIAotICAgIDIzMiwgMjMwLCA5MywgOTksIDEyNCwgMTkyLCAyMiwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDIwMywgCi0gICAgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDE5MiwgMjIsIDQzLCAxMjQsIDI0MSwgMjIxLCA5MywgOTksIDQzLCAxOTIsIDIyLCAKLSAgICA0NCwgMTI0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAKLSAgICAyNDEsIDQ0LCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTE0LCAyMiwgNDMsIAotICAgIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCAyMDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgCi0gICAgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTkyLCAyMiwgNDMsIDEyMCwgMjQxLCAyMjEsIDkzLCA5OSwgNDMsIDE5MiwgCi0gICAgMjIsIDQ0LCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDY3LCAKLSAgICAyMiwgMjQxLCA0NCwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDY3LCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTE0LCAyMiwgCi0gICAgNDMsIDY3LCAyMzIsIDIzMCwgOTMsIDk5LCA2NywgMTkyLCAyMiwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgCi0gICAgMjIsIDEyNCwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDEyMCwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCAKLSAgICA2NywgMTE0LCAyMiwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCA0MywgMTIwLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzMCwgCi0gICAgOTMsIDk5LCA0NCwgMTIwLCAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzMCwgOTMsIDk5LCA0MywgMTI0LCAxMTQsIDIyLCAKLSAgICA0NCwgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTI0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCAKLSAgICAxMjQsIDE5MiwgMjIsIDEyMCwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDEyNCwgMjAzLCAyNDEsIAotICAgIDIyMSwgOTMsIDk5LCA0NCwgMTkyLCAyMiwgNDMsIDY3LCAyNDEsIDIyMSwgOTMsIDk5LCA0MywgMTkyLCAyMiwgNDQsIDY3LCAKLSAgICAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDUyLCAyNDgsIDE1NywgMjQxLCAKLSAgICA0NCwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDUyLCAyNDgsIDE1NywgMjEzLCAKLSAgICAyMzksIDkzLCA5OSwgMTE0LCA1MiwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIDUyLCAyNDEsIDQ0LCA5MywgOTksIAotICAgIDUyLCAyMTMsIDIzOSwgOTMsIDk5LCAxMjQsIDIxOSwgMTU1LCAyMiwgNDQsIDI0NiwgMTEzLCA5MywgOTksIDEyNCwgNTIsIAotICAgIDIyLCA0NCwgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyNCwgMjE5LCAxNTUsIAotICAgIDIyLCA0MywgMjQ2LCAxMTMsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDQzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgCi0gICAgMjMzLCA0NiwgOTMsIDk5LCAxMjAsIDIxOSwgMTU1LCAyMiwgNDQsIDI0NiwgMTEzLCA5MywgOTksIDEyMCwgNTIsIDIyLCAKLSAgICA0NCwgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyMCwgMjE5LCAxNTUsIDIyLCAKLSAgICA0MywgMjQ2LCAxMTMsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDQzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgCi0gICAgMjMzLCA0NiwgOTMsIDk5LCA2NywgMjE5LCAxNTUsIDIyLCA0NCwgMjQ2LCAxMTMsIDkzLCA5OSwgNjcsIDUyLCAyMiwgNDQsIAotICAgIDIxOSwgMTU0LCA5MywgOTksIDUyLCA2NywgMjIsIDIyMiwgMjUxLCA5MywgOTksIDY3LCAyMTksIDE1NSwgMjIsIDQzLCAKLSAgICAyNDYsIDExMywgOTMsIDk5LCA2NywgNTIsIDIyLCA0MywgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjMzLCA0NiwgCi0gICAgOTMsIDk5LCAxMjQsIDIxOSwgMTU1LCAyMiwgMjAzLCAyNDYsIDExMywgOTMsIDk5LCAxMjQsIDUyLCAyMiwgMjAzLCAyMTksIAotICAgIDE1NCwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxMjAsIDIxOSwgMTU1LCAyMiwgMjAzLCAyNDYsIAotICAgIDExMywgOTMsIDk5LCAxMjAsIDUyLCAyMiwgMjAzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjQxLCA0NCwgCi0gICAgOTMsIDk5LCA2NywgMjE5LCAxNTUsIDIyLCAyMDMsIDI0NiwgMTEzLCA5MywgOTksIDY3LCA1MiwgMjIsIDIwMywgMjE5LCAKLSAgICAxNTQsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyNCwgMjIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDE5MiwgMjU0LCAyNiwgMTI0LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyMCwgCi0gICAgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAyNTQsIDI2LCAxMjAsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDI0NywgCi0gICAgMjU1LCAyMTQsIDE2MCwgNDQsIDIxNiwgNDIsIDIzMiwgMTA4LCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMjQ3LCAyNTUsIAotICAgIDIxNCwgMTYwLCA0MywgMjE2LCA0MiwgMjMyLCAxMDgsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgMjQ3LCAyNTUsIDI0OSwgCi0gICAgMTMwLCA5MywgOTksIDE5MiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDIxNCwgMTYzLCA5MywgOTksIDE5MiwgMjIyLCAyNTEsIAotICAgIDkzLCA5OSwgMTkyLCAyNDYsIDEwNiwgOTMsIDk5LCAxMTQsIDIzMywgNDYsIDkzLCA5OSwgMTE0LCAyMTQsIDE2MywgOTMsIAotICAgIDk5LCAxMTQsIDIyMiwgMjUxLCA5MywgOTksIDExNCwgMjQ2LCAxMDYsIDkzLCA5OSwgMTkyLCA0MywgMjIsIDExNCwgMjIyLCAKLSAgICAyNTEsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAxMTQsIDI0NiwgMTA2LCA5MywgOTksIDExNCwgNDMsIDIyLCAxOTIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMTkyLCAyNDYsIDEwNiwgMjE0LCAxNjAsIDE2MywgMjUxLCAyMTMsIDIzMiwgCi0gICAgMTA4LCAxMjMsIDI0NSwgMTg5LCAyNTEsIDIxMywgMjMyLCAxMDgsIDEyMywgMjI0LCAyMiwgMjUxLCAyMTMsIDIzMiwgMTA4LCAKLSAgICAxMzQsIDI0NSwgMTg3LCAyNTEsIDIxMywgMjMyLCAxMDgsIDE2MywgMjUxLCAyMTMsIDIzMiwgMTA4LCAyNDQsIDgxLCAyNDUsIAotICAgIDE4NywgMjUxLCAyMTMsIDIzMiwgMTA4LCAxMzQsIDIyNCwgMjAsIDI1MSwgMjEzLCAyMzIsIDEwOCwgMjIwLCAxMjIsIDI0NSwgCi0gICAgMTg3LCAyNTEsIDIxMywgMjQzLCAyMjksIDI1MSwgMjEzLCA0MywgMjIwLCAxMjIsIDI0NSwgMTg3LCAyNTEsIDIxMywgNDMsIAotICAgIDEzNCwgMjI0LCAyMCwgMjUxLCAyMTMsIDQzLCAyNDQsIDgxLCAyNDUsIDE4NywgMjUxLCAyMTMsIDQzLCAxNjMsIDI1MSwgCi0gICAgMjEzLCA0MywgMTM0LCAyNDUsIDE4NywgMjUxLCAyMTMsIDQzLCAxMjMsIDIyNCwgMjIsIDI1MSwgMjEzLCA0MywgMTIzLCAKLSAgICAyNDUsIDE4OSwgMjUxLCAyMTMsIDQ0LCAxNjMsIDI1MSwgMjEzLCAxOTIsIDIyMCwgOTIsIDIzMSwgODIsIDIyMCwgOTIsIAotICAgIDI0OCwgMTYyLCAyMjAsIDkyLCAyMTQsIDE2MCwgMTIzLCAyNDUsIDE4OSwgMjUxLCAyMTMsIDQ0LCAxMjMsIDI0NSwgMTg5LCAKLSAgICAyNTEsIDIxMywgMjI0LCAyNiwgMjMyLCAxMDgsIDIzMywgNDYsIDIyNCwgMjYsIDIzMiwgMTA4LCAyMjIsIDI1MSwgMjI0LCAKLSAgICAyNiwgMjE0LCAxNjAsIDIzMywgNDYsIDIyNCwgMjYsIDIxNCwgMTYwLCA0MywgMjIsIDIzMiwgMTA4LCA0MywgMjIsIDIzMiwgCi0gICAgMTA4LCAyMjIsIDI1MSwgMjI0LCAyNiwgMjE0LCAxNjAsIDQzLCAyMiwgMjMyLCAxMDgsIDIyMiwgMjUxLCAyMjQsIDI2LCAKLSAgICAyMTQsIDE2MCwgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDEwOCwgMjMzLCA0NiwgMjI0LCAyNiwgMjE0LCAxNjAsIAotICAgIDQzLCAyMiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMDgsIDIyMiwgMjUxLCAyMjQsIDI2LCAyMTQsIDE2MCwgMjIyLCAKLSAgICAyNTEsIDIyNCwgMjYsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTA4LCAyMzMsIDQ2LCAyMjQsIDI2LCAyMTQsIDE2MCwgNDQsIAotICAgIDIyLCAyMzIsIDEwOCwgNDMsIDIyLCAyMzIsIDEwOCwgMjIyLCAyNTEsIDg1LCAyMTgsIDIzNCwgNzEsIDIxOCwgMjM0LCA3MSwgCi0gICAgNDIsIDIsIDIyMiwgMTgzLCAyNDksIDE1OSwgNzEsIDQyLCAyNDksIDE4NywgODUsIDQsIDIxOCwgMjM0LCA0MiwgMiwgMjAzLCAKLSAgICAyNDQsIDEwNSwgNDIsIDIsIDY3LCAyNDQsIDEwNSwgNDIsIDIsIDIyNiwgMTQ0LCAyNDksIDEyNiwgMjQ0LCAxMDUsIDQyLCAKLSAgICAyLCAyMTQsIDE2MCwgNDMsIDIxNiwgNDIsIDIzMiwgMTA4LCA0NCwgMjQ0LCAxMDUsIDQyLCAyLCAyMTQsIDE2MCwgNDQsIAotICAgIDIxNiwgNDIsIDIzMiwgMTA4LCA0MywgMjQ0LCAxMDUsIDQyLCAyLCAyNDcsIDI1NSwgMjQ5LCAxMjYsIDI0NCwgMTA1LCA4NSwgCi0gICAgNCwgMjE4LCAyMzQsIDcxLCA0LCAyMTgsIDIzNCwgODUsIDIyMywgMTE2LCA3MSwgMjIzLCAxMTYsIDg1LCA2NywgMjIzLCAKLSAgICAxMTYsIDcxLCA2NywgMjIzLCAxMTYsIDg1LCAyMjYsIDYsIDcxLCAyMjYsIDYsIDg1LCAyMTQsIDE2MiwgMjE1LCAyMjUsIAotICAgIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjUsIDg1LCAyMTQsIDE2MiwgNCwgMjE1LCAyMjUsIDcxLCAyMTQsIDE2MiwgNCwgMjE1LCAKLSAgICAyMjUsIDg1LCAyMjIsIDI0NywgMjE1LCAyMjUsIDcxLCAyMjIsIDI0NywgMjE1LCAyMjUsIDg1LCAyMjIsIDI0NywgNCwgCi0gICAgMjE1LCAyMjUsIDcxLCAyMjIsIDI0NywgNCwgMjE1LCAyMjUsIDg1LCAyMjIsIDI0NywgMjI1LCA4LCA3MSwgMjIyLCAyNDcsIAotICAgIDIyNSwgOCwgODUsIDI0NiwgMTA1LCAyMTUsIDIyNSwgNzEsIDI0NiwgMTA1LCAyMTUsIDIyNSwgODUsIDI0NiwgMTA1LCA0LCAKLSAgICAyMTUsIDIyNSwgNzEsIDI0NiwgMTA1LCA0LCAyMTUsIDIyNSwgODUsIDIzMywgNDIsIDIxNSwgMjI1LCA3MSwgMjMzLCA0MiwgCi0gICAgMjE1LCAyMjUsIDg1LCAyMzMsIDQyLCA0LCAyMTUsIDIyNSwgNzEsIDIzMywgNDIsIDQsIDIxNSwgMjI1LCA4NSwgMjMzLCAKLSAgICA0MiwgMjI1LCA4LCA3MSwgMjMzLCA0MiwgMjI1LCA4LCA4NSwgMjQ3LCAyNDgsIDcxLCAyNDcsIDI0OCwgNzEsIDI0NywgCi0gICAgMjQ5LCAyNDksIDE4NywgODUsIDQsIDI0NywgMjQ4LCAyNDQsIDg5LCAyMzIsIDEwNCwgNzEsIDI1MCwgMzUsIDI0NiwgMTE4LCAKLSAgICAyNTAsIDM1LCAyNTAsIDM2LCAyLCA2NywgMjQ0LCAxMDUsIDI1MSwgMTExLCA4NSwgMjUwLCAzNSwgMjUwLCAzNiwgMiwgNDMsIAotICAgIDE2MywgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCAyMzIsIDEwOCwgMTYzLCAKLSAgICAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgMjE0LCAxNjAsIDE2MywgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjI0LCAyNiwgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDI1NCwgMTU1LCAyNTEsIDg4LCAyMTQsIDE2MCwgNDMsIDIyNCwgMjYsIAotICAgIDI1MSwgMjIxLCA0MywgMTYzLCA4NSwgMjUwLCAzNSwgNDQsIDE2MywgODUsIDI1MCwgMzUsIDIzNSwgMTk0LCAyNTEsIDExMywgCi0gICAgMjM1LCAxOTQsIDcxLCAyNTAsIDM1LCAyMTQsIDE2MCwgMTYzLCAyMzUsIDE5NCwgNzEsIDI1MCwgMzUsIDIzMiwgMTA4LCAKLSAgICAxNjMsIDIzNSwgMTk0LCA3MSwgMjUwLCAzNSwgMjE0LCAxNjAsIDQzLCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIDI1LCAyMTQsIAotICAgIDE2MCwgNDQsIDIyNCwgMjYsIDI1MCwgMzMsIDI1NCwgMjUsIDIzMiwgMTA4LCA0NCwgMjI0LCAyNiwgMjUwLCAzMywgMjU0LCAKLSAgICAyNSwgMjMyLCAxMDgsIDQzLCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIDI1LCAyMTQsIDE2MCwgMTYzLCAyNTAsIDM1LCAyMzIsIAotICAgIDEwOCwgMTYzLCAyNTAsIDM1LCA4NSwgMjMyLCAxMDgsIDQ0LCAyMTUsIDIyNSwgODUsIDIzMiwgMTA4LCA0MywgMjE1LCAKLSAgICAyMjUsIDg1LCAyMTQsIDE2MCwgNDMsIDIxNSwgMjI1LCA4NSwgMjE0LCAxNjAsIDQ0LCAyMTUsIDIyNSwgNzEsIDI1MSwgCi0gICAgMTEzLCA0MiwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIxNCwgMTYwLCAKLSAgICA0MywgMjQ3LCAyNTUsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyMzIsIDEwOCwgNDQsIDI0NywgMjU1LCAxNjMsIDI1MSwgCi0gICAgMjIxLCA3MSwgNDIsIDIsIDY3LCAyNTEsIDIzMiwgMjMyLCAyMTMsIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDI0NywgCi0gICAgMTIwLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDQ0LCAKLSAgICAxNjMsIDI1MSwgMjIxLCAyMzMsIDg1LCAyNTAsIDM1LCA3MSwgNDIsIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyNSwgNzEsIAotICAgIDQyLCAyLCAyMzIsIDEwOCwgNDMsIDIyNCwgMjUsIDcxLCA0MiwgMiwgMjMyLCAxMDgsIDQ0LCAyMjQsIDI1LCA3MSwgNDIsIAotICAgIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyNSwgNzEsIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyNSwgNzEsIDI1MCwgCi0gICAgMzYsIDIsIDIzMiwgMTA4LCA0MywgMjI0LCAyNSwgNzEsIDI1MCwgMzYsIDIsIDIzMiwgMTA4LCA0NCwgMjI0LCAyNSwgNzEsIAotICAgIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyNSwgMjE0LCAxNjAsIDQzLCAyMTUsIDIyNSwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyMTUsIDIyNSwgMjMyLCAxMDgsIDQzLCAyMTUsIDIyNSwgNzEsIDIzMSwgODIsIDIxOCwgMjM0LCA4NSwgMjMxLCA4MiwgCi0gICAgMjE4LCAyMzQsIDcxLCAyMzEsIDgyLCA0LCAyMTgsIDIzNCwgODUsIDIzMSwgODIsIDQsIDIxOCwgMjM0LCAyMzIsIDEwOCwgCi0gICAgNDQsIDIxNSwgMjI1LCA4NSwgMjE4LCAzOCwgMiwgMjIzLCAxMzIsIDI0OSwgMjQ3LCAyMTQsIDE5NCwgMjE5LCA2MCwgMjQ5LCAKLSAgICAyMjIsIDg1LCAyMTgsIDE1NiwgNzEsIDIxOCwgMTU2LCAyMzIsIDIyOCwgMjE2LCAxMzIsIDIxOCwgMzcsIDI1MywgMjM0LCAKLSAgICAyMjgsIDcxLCAyNDgsIDM4LCAyMjgsIDcxLCAyNDksIDE5NSwgMjI2LCAxNjMsIDg1LCAyMTcsIDAsIDcxLCAyMTcsIDAsIAotICAgIDI1MiwgMTU2LCAyNTEsIDE2MywgMjUyLCAxNTYsIDkzLCAyLCAyNTAsIDEyOSwgMjUyLCAxNTYsIDkzLCAyLCAyMTEsIDE3OCwgCi0gICAgMjIxLCAyNTQsIDIxNCwgMTk1LCAyLCAyMjMsIDE2MCwgMjQ2LCA4NCwgMjQwLCAyNDMsIDI1MiwgMjIsIDcxLCAyMjAsIDIsIAotICAgIDIyNSwgMTAxLCA4NSwgMjIwLCAyLCAyMjUsIDEwMSwgMjIwLCA4NywgMjIzLCA0OSwgMjIyLCAxODcsIDI0NCwgNTUsIDI0MSwgCi0gICAgMjI4LCAyNTEsIDExMywgODUsIDQzLCAyMjUsIDcsIDIzNSwgMjQyLCA4NSwgNDQsIDIyNSwgNywgMjM1LCAyNDIsIDcxLCAKLSAgICA0MywgMjI1LCA3LCAyMzUsIDI0MiwgNzEsIDEyMCwgMjI1LCA3LCAyMzUsIDI0MiwgNzEsIDQ0LCAyMjUsIDcsIDIzNSwgCi0gICAgMjQyLCA3MSwgMTI0LCAyMjUsIDcsIDIzNSwgMjQyLCAyMTksIDEwMSwgMjIsIDI0OSwgMTI5LCAyNTAsIDIxOSwgNTAsIAotICAgIDIyMywgMTcyLCA1MCwgMjUxLCAyMzksIDUwLCAyNTEsIDI1LCAyNTQsIDEwMiwgMjI2LCAxNDUsIDI0OSwgMTMwLCAyNTAsIAotICAgIDExMSwgMjIzLCAzNywgMjQ5LCAxMzEsIDY0LCAyMzIsIDExOCwgMjQ5LCAxMzEsIDY0LCAyMzUsIDExNiwgMjE4LCAxNTcsIAotICAgIDIyLCAyNDksIDEzNiwgMjQ0LCAxNjgsIDg3LCAyNTQsIDI0OCwgMjIwLCA4OSwgMjQyLCAyMiwgMjIsIDIxOSwgMTg5LCAKLSAgICAyMjUsIDIyMCwgODcsIDIxMCwgMjU0LCAyMTEsIDY5LCAyMTUsIDIxNSwgMzEsIDI0MSwgMjIzLCAyMTUsIDIxNSwgMzEsIAotICAgIDIzMywgMTA3LCAyMTUsIDIxNSwgMzEsIDI0NCwgOTYsIDIxNSwgMjE1LCAzMSwgMjE2LCAxMzMsIDIxNSwgMjE1LCAzMSwgCi0gICAgMjExLCAyMzksIDIxNSwgMjE1LCAzMSwgMjEyLCA0MCwgMjE1LCAyMTUsIDMxLCAyMzAsIDExNSwgMjE1LCAyMTUsIDMxLCAKLSAgICAyNDUsIDIyMywgMjEyLCAxLCA2NCwgMjQ4LCAxOCwgNzEsIDI0MywgMjM5LCAyNDQsIDE5MCwgNzEsIDIxOSwgNzQsIDI0NCwgCi0gICAgMTkwLCA4NSwgMjE5LCA3NCwgMjQ0LCAxOTAsIDcxLCAyMTgsIDM4LCAyLCAyMjMsIDEzMiwgMjQ0LCA5MiwgMjI0LCAyMiwgCi0gICAgMjMwLCAxMjgsIDIzMywgODAsIDIyNCwgMjIsIDIzMCwgMTI4LCAyMzEsIDU0LCAyNDQsIDEzOCwgNTAsIDI0NSwgMjIzLCAKLSAgICAyMzEsIDE5MCwgNTAsIDIzNSwgMzgsIDIyMSwgMjIwLCAyMTQsIDE0NSwgMjI5LCA5MywgMjI1LCAyMCwgMjU0LCAxMiwgCi0gICAgMjE3LCA0MCwgMjQzLCA1MiwgMjUxLCAzLCAyMzMsIDE5LCAyMTMsIDE1MCwgMjMyLCAyMzgsIDIyMSwgMTkxLCAyMjIsIDE5LCAKLSAgICAyNTAsIDI0OCwgMjU0LCA0MiwgMjI1LCA1MiwgNzEsIDI1MCwgMTE3LCAyMzQsIDc4LCA3MSwgMjUwLCAxMTcsIDIyNCwgMTQsIAotICAgIDcxLCAyNTAsIDExNywgMjIyLCAxOTUsIDcxLCAyNTAsIDExNywgMjUxLCAyMzEsIDcxLCAyNTAsIDExNywgMjM0LCAzMCwgCi0gICAgNzEsIDI1MCwgMTE3LCAyMjUsIDIzMSwgODUsIDI1MCwgMTE3LCAyMzQsIDc4LCA4NSwgMjUwLCAxMTcsIDIyNCwgMTQsIDg1LCAKLSAgICAyNTAsIDExNywgMjIyLCAxOTUsIDg1LCAyNTAsIDExNywgMjUxLCAyMzEsIDg1LCAyNTAsIDExNywgMjM0LCAzMCwgODUsIAotICAgIDI1MCwgMTE3LCAyMjUsIDIzMSwgODUsIDIxOSwgMTYsIDIxOCwgNTAsIDcxLCAyNDEsIDIyOCwgMjE4LCA1MCwgNzEsIDI0NywgCi0gICAgMjQ5LCAyMTgsIDUwLCA4NSwgMjQ5LCAyNDUsIDIxOCwgNTAsIDcxLCAyMTksIDE2LCAyMTgsIDUwLCA4NSwgMjQxLCAyMjgsIAotICAgIDIxOCwgNTAsIDg1LCAyNDcsIDI0OSwgMjE4LCA1MCwgNzEsIDI0OSwgMjQ1LCAyMTgsIDUwLCAyNDAsIDI0MywgMjE4LCAKLSAgICAyMzgsIDIyNCwgMjIsIDIyOCwgNDcsIDI0NSwgMTg5LCAyMjgsIDQ3LCAyNTIsIDczLCAyNDUsIDE4OSwgMjI4LCA0MiwgCi0gICAgMjUyLCA3MywgMjE5LCAxMTgsIDIyOCwgNDIsIDIzMCwgNTcsIDI0NCwgNjYsIDUwLCAyMzAsIDU3LCAyMjksIDE4OCwgNTAsIAotICAgIDIzMCwgNTcsIDIyMCwgNzYsIDUwLCAyMTIsIDksIDE4OCwgMjQ5LCAxMzAsIDI0NSwgMjIwLCAxODgsIDI0OSwgMTMwLCAKLSAgICAyMTQsIDE3MSwgMjIzLCAxMTIsIDg3LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ4LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQ3LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ2LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQ1LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ0LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQzLCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQyLCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyNDMsIDUwLCAyMzEsIDEzOCwgODUsIDIxNCwgMTcxLCAyMjMsIDExMiwgODcsIDIyMywgMTEzLCAyMjYsIDIwLCA4NywgCi0gICAgMjI1LCAyNTIsIDIyNiwgMjAsIDg3LCAyMjUsIDE3NCwgMjI2LCAyMCwgNTAsIDIxMSwgMjU1LCA4NywgMjQ3LCAyNDEsIAotICAgIDI0NCwgMTg5LCAyNDcsIDI0MSwgMjQ0LCAxODgsIDI0NywgMjQxLCAyNDQsIDE4NywgMjQ3LCAyNDEsIDI0NCwgMTg2LCAKLSAgICAyNDcsIDI0MSwgMjQ0LCAxODUsIDI0NywgMjQxLCAyNDQsIDE4NCwgNzEsIDI1MCwgMzYsIDIsIDU5LCAyMjIsIDI1MSwgNzEsIAotICAgIDI1MCwgMzYsIDIsIDExMywgMjQ3LCAxMTgsIDg1LCAyNTAsIDM2LCAyLCA3MSwgNTksIDIyMiwgMjUxLCA4NSwgMjUwLCAzNiwgCi0gICAgMiwgMTEzLCA3MSwgMjQ3LCAxMTgsIDIzMCwgMTQyLCAzMSwgMjExLCA2OSwgMjMwLCAxNDIsIDMxLCAyMTAsIDI1MywgMjQ3LCAKLSAgICAyMjQsIDMxLCAyNDIsIDEzMSwgMjExLCA2OSwgMjQ3LCAyMjQsIDMxLCAyMzMsIDEzLCAyMTAsIDI1MywgMjQ3LCAyMjQsIAotICAgIDMxLCAyMzMsIDEzLCAyMTEsIDY5LCAyNDcsIDIyNCwgMzEsIDI0MiwgMTMxLCAyMTAsIDI1MywgNzEsIDI0NCwgNzMsIDg1LCAKLSAgICAyNDQsIDczLCAyNDIsIDIyLCAyMiwgMjI1LCAxMDQsIDI1NCwgMTIwLCAyNDksIDEyOCwgMjE3LCAyMzUsIDIxOCwgMTY0LCAKLSAgICA2NCwgMjU0LCAyMjYsIDIyMSwgMjA2LCAyNTQsIDE2OSwgMjQ0LCA1MSwgMjQzLCA2MCwgMjE4LCAxNjQsIDY0LCAyNDEsIAotICAgIDIwMiwgMjUzLCAxOTksIDg3LCAyNDQsIDYyLCAyMjYsIDEyNiwgNzEsIDIxOCwgMTU2LCAxMzQsIDIzMiwgMjA4LCAyNDksIAotICAgIDE3NSwgMjIyLCAyNTEsIDEzNCwgMjMyLCAyMDgsIDI0OSwgMTc1LCAyMzMsIDQ2LCAyMTIsIDUwLCA1MCwgMTI1LCAyMTMsIAotICAgIDEzMCwgNTAsIDI0NiwgMTEwLCAyNDQsIDEzOCwgNTAsIDI0NiwgMTEwLCAyMzEsIDE5MCwgNTAsIDIzNSwgMjAzLCAyNDQsIAotICAgIDEzOCwgMjIsIDIzMSwgMTkwLCA1MCwgMjMxLCAxOTAsIDIyLCAyNDQsIDEzOCwgNTAsIDIzMSwgMTkwLCAyLCAyMTgsIDEwMywgCi0gICAgNTAsIDIzMSwgMTkwLCAyLCAyMTgsIDEwMywgMjIsIDIzMSwgMTkwLCAyMiwgMjQ0LCAxMzgsIDUwLCA2NywgMjMxLCAxOTAsIAotICAgIDIsIDIxOCwgMTAzLCA1MCwgMjAzLCAyMzEsIDE5MCwgMiwgMjE4LCAxMDMsIDUwLCAyMzEsIDgyLCA3MSwgMjUwLCAzNSwgCi0gICAgMjMxLCA4MiwgODUsIDI1MCwgMzUsIDIzMSwgODIsIDQsIDcxLCAyNTAsIDM1LCAyMzEsIDE1MywgODcsIDI0NywgMTY3LCAKLSAgICA4NywgMjE0LCAxNjksIDIyNSwgMjUxLCA4NywgMjQ5LCAyMzEsIDI0MywgMjI0LCAyMTQsIDE0MSwgMjI5LCA4OCwgMjUwLCAKLSAgICAxNjEsIDIyNiwgNjEsIDIzNSwgNDQsIDIxMywgMTg1LCAyNTAsIDkzLCA4NSwgMjMwLCAxMjksIDIzMiwgMjI1LCAyMjAsIAotICAgIDExMiwgMjIwLCAxNDcsIDIyNCwgNSwgMjIwLCAxMzAsIDIxOSwgNTUsIDI1MiwgMTU5LCAyNTIsIDEyNiwgOTIsIDIzNCwgCi0gICAgMTM4LCA3MSwgMjQ2LCA5MywgMjMxLCAxODUsIDcxLCAyNDYsIDkzLCAyMzQsIDc4LCA4NSwgMjQ2LCA5MywgMjMxLCAxODUsIAotICAgIDg1LCAyNDYsIDkzLCAyMzQsIDc4LCAyMTksIDYxLCAyMTEsIDIzMCwgMjE5LCA2NCwgMjE4LCAzOCwgMjUyLCA1MSwgMjQ5LCAKLSAgICAyNDcsIDIyMywgMTU5LCA4NSwgMjE5LCA2MCwgMjE2LCAxMzQsIDI0OSwgMjQ4LCAyMiwgMjIzLCAxNTksIDIxNSwgOTQsIAotICAgIDcxLCAyMjAsIDIsIDIyNSwgMTAxLCAyMTUsIDk0LCA4NSwgMjIwLCAyLCAyMjUsIDEwMSwgNzEsIDI0NywgMjQ5LCAyMzYsIAotICAgIDAsIDIxOCwgMjM0LCAyNDksIDEyNSwgMjMzLCA5MSwgMjQ3LCAxOTMsIDI1MCwgMjQ0LCAyMjYsIDE2NiwgMjI1LCAxMDQsIAotICAgIDI1MCwgMjQ1LCAyMTksIDg4LCAyNDEsIDIxMiwgMiwgNzEsIDI0OSwgMTMwLCAzNywgMjQ5LCAxMjUsIDIzMywgOTEsIDI1MCwgCi0gICAgMTUzLCAyMjgsIDc1LCAyNDUsIDEyNCwgMjU0LCAxNDEsIDIyNiwgMTkxLCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDg1LCAKLSAgICAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDcxLCAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDg1LCAKLSAgICA0MywgMjMzLCA5MiwgMjMxLCA1MywgNzEsIDQzLCAyMzMsIDkyLCAyMzEsIDUzLCAyNDYsIDg5LCAyMTksIDgyLCA1MCwgCi0gICAgMTE0LCA3MSwgMjQ2LCAxMDUsIDIxNSwgMjI1LCA0MywgMjUwLCAwLCAyNDUsIDEyNCwgOTIsIDIyMSwgMjU0LCAyNDQsIAotICAgIDE3NSwgMjQ3LCAyNTUsIDIzNiwgMCwgNzEsIDI1MCwgMzYsIDIzNiwgMCwgODUsIDIxOCwgMjM0LCA4NSwgMjE1LCAxOTIsIAotICAgIDIyMywgNjAsIDQzLCAyNDUsIDEyMywgMjIzLCA2MCwgNDMsIDI0NSwgMTIyLCAyNTMsIDIxMSwgMTYsIDMxLCAyMTQsIDE0NSwgCi0gICAgMTE0LCAyNTAsIDM2LCAyLCAyMTgsIDEwMywgMjIsIDExMywgMTcwLCA0OCwgMjI1LCAxODksIDIyMiwgMjQ4LCAyMzUsIAotICAgIDIwNSwgMjI1LCAxODksIDIzMywgNDMsIDIzNSwgMjA1LCAyMjUsIDE4OSwgMjM1LCAxOTMsIDIyNSwgMTg5LCA4NSwgMjQ5LCAKLSAgICAxMzEsIDIyNiwgMTk3LCAyMjAsIDI5LCAyMjAsIDE3LCAyMTksIDIyOSwgMjUwLCA2MSwgMjUwLCAyMjYsIDI0MSwgMTU3LCAKLSAgICAyMTksIDEyNiwgMjQzLCA2MSwgMjExLCAyMzAsIDI0MCwgMjIwLCAyNDMsIDYxLCAyLCAyNDIsIDEyLCAyMzEsIDE3MywgMTYsIAotICAgIDMxLCAyMzIsIDIyOSwgMjMwLCAxMTUsIDIxNCwgMTk1LCAyMjYsIDE5NywgMjQyLCAxMjIsIDI0NCwgMTIsIDI0NCwgNzQsIAotICAgIDIzNiwgMCwgMjQxLCA1OSwgMjQ0LCAxMjksIDIyMiwgMTQsIDQyLCAyNDQsIDExLCAyNDksIDE1OSwgMjE5LCAxMDQsIDI0MCwgCi0gICAgMTEyLCAyMTksIDEwNywgMjI1LCAxNjgsIDIsIDI1MiwgMTU5LCAyMTYsIDI0MiwgMjM1LCAxMzEsIDI1MiwgMTQ2LCA4NywgCi0gICAgMjQxLCAyMzEsIDI0MiwgMTMzLCA4NywgMjQzLCAyMzIsIDIyNCwgMTQyLCAyNDksIDEwMywgMjI2LCAxOTcsIDg1LCAyMTgsIAotICAgIDIzNCwgNzEsIDI0NCwgNzQsIDIsIDIwMywgMjMwLCAyMjQsIDg1LCAyMTgsIDEwNCwgMjE0LCAxNjAsIDI1MSwgMjE3LCAKLSAgICAyMjEsIDE5MywgODUsIDIyMSwgMTkzLCAyMzIsIDEwOCwgMjUxLCAyMTcsIDIyMSwgMTkzLCA3MSwgMjIxLCAxOTMsIDcxLCAKLSAgICAxMTQsIDI1MCwgMTMwLCA3OCwgMjE3LCAxLCAyMzIsIDE1NCwgNTAsIDIxNywgNTMsIDI0NiwgODgsIDI1NCwgMTkxLCAyNDUsIAotICAgIDExOSwgMjIzLCAxNTcsIDI0NCwgODUsIDIyMywgMTU3LCAyNDIsIDE1LCAyMTMsIDE3NCwgMjQyLCAxNSwgMjExLCAxOTgsIAotICAgIDI0MiwgMTUsIDIzMiwgMTA4LCA0NCwgMjI1LCAxOTgsIDIyNSwgMTk4LCAyMTQsIDE2MCwgNDQsIDIyNSwgMTk4LCA3MSwgCi0gICAgMjI4LCAyMzAsIDg1LCAyMjgsIDIzMCwgMjUwLCAxMzAsIDc4LCAxMTQsIDI1MCwgMTMwLCA3OCwgMjMwLCA4NCwgMjExLCAKLSAgICAxNzgsIDExNCwgMjMwLCA4NCwgMjExLCAxNzgsIDI1MiwgMTU2LCAyMTEsIDE3OCwgMTE0LCAyNTIsIDE1NiwgMjExLCAxNzgsIAotICAgIDIyNiwgMTI2LCAyNiwgMjQ5LCAxMzAsIDExNCwgMjYsIDI0OSwgMTMwLCAyMDQsIDI1MCwgMTc1LCAyNDksIDEzMCwgMTE0LCAKLSAgICAyMDQsIDI1MCwgMTc1LCAyNDksIDEzMCwgNywgMjQ5LCAxMzAsIDIyMCwgOTEsIDcxLCA3LCAyNDksIDEzMCwgMjI2LCAxMjYsIAotICAgIDcsIDI0OSwgMTMwLCAyMzEsIDE4NywgMjQ5LCAxMzAsIDIxOCwgMTU3LCA2NCwgMjQ4LCAxNDksIDI0NCwgMTEsIDIxNywgCi0gICAgMTUsIDI1MywgMjE2LCAyNDQsIDExLCAyNTIsIDE1NywgMjUzLCAyMTYsIDExNCwgMjQ0LCAxMSwgMjUyLCAxNTcsIDI1MywgCi0gICAgMjE2LCAyNDQsIDExLCAyNDksIDI0MywgMjUzLCAyMTYsIDg1LCAyNDQsIDExLCAyMjUsIDksIDIxOCwgMTU2LCA3MSwgMjQ0LCAKLSAgICAxMSwgMjI1LCA5LCAyMTgsIDE1NiwgMjE5LCAxMSwgMjE4LCAxMTEsIDIyNiwgMTI2LCA3MSwgMjE4LCAxNTYsIDM3LCA3MSwgCi0gICAgMjE4LCAxNTYsIDIwNCwgMjUwLCAxNzUsIDg1LCAyMTgsIDE1NiwgODUsIDI1MCwgMTc1LCA3MSwgMjE4LCAxNTYsIDIyNiwgCi0gICAgMTI2LCA4NSwgMjE4LCAxNTYsIDExNCwgMjI2LCAxMjYsIDg1LCAyMTgsIDE1NiwgMjI1LCA2MCwgMjE4LCAxNTYsIDIyMCwgCi0gICAgOTEsIDcxLCAyMTgsIDE1NiwgMTE0LCAyNTMsIDIxNiwgMjA0LCAyNTAsIDE3NSwgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMTgsIAotICAgIDI0NCwgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMjUsIDksIDg1LCAyMTgsIDE1NiwgMjQ1LCAxOTMsIDIyNSwgOSwgMjI1LCA2MCwgCi0gICAgMjE4LCAxNTYsIDIxOSwgMTI1LCAyMjUsIDksIDg1LCAyMTgsIDE1NiwgMjQ1LCAxOTMsIDIyNSwgOSwgMjIzLCAxMTQsIDg1LCAKLSAgICAyMTgsIDE1NiwgMTE0LCAyNDUsIDE5MywgMjI1LCA5LCAyMjMsIDExNCwgODUsIDIxOCwgMTU2LCAyMTUsIDc3LCAyMjUsIDksIAotICAgIDg1LCAyMTgsIDE1NiwgMjE5LCAxMjAsIDIyNSwgOSwgMjUzLCAyMTYsIDIxNywgMTUsIDI1MywgMjE2LCAyMDQsIDI1MCwgCi0gICAgMTc1LCAyMTcsIDE1LCAyNTMsIDIxNiwgMTE0LCAyMTcsIDE1LCAyNTMsIDIxNiwgMjE5LCAxMjUsIDIyNSwgMTU3LCA4NSwgCi0gICAgMjIsIDcxLCAyNDQsIDU0LCA4NSwgMjQ0LCA1NCwgNzEsIDI0NCwgNTQsIDI0NSwgMTkzLCAyMjUsIDE1NywgMjI2LCAxMjYsIAotICAgIDg1LCAyNDQsIDU0LCAzNywgMjA0LCAyNTAsIDE3NSwgMjQ1LCAxOTMsIDIyNSwgOSwgMjE4LCAxNTYsIDExNCwgMjE3LCAxNSwgCi0gICAgMjI1LCA2MCwgMjUzLCAyMTYsIDIxOSwgNjIsIDIxNiwgMTA1LCAyMTUsIDIxOCwgMjE5LCA2MiwgMTE0LCAyNTAsIDExNCwgCi0gICAgMjE5LCA2MiwgMjE5LCAxMywgMTE0LCAyMTksIDEzLCAyNTIsIDE1NywgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMTcsIDE1LCAKLSAgICAyMjQsIDE3MSwgMjUzLCAyMTYsIDExNCwgMjQ1LCAxOTMsIDIxNywgMTUsIDIyNCwgMTcxLCAyNTMsIDIxNiwgMjQ5LCAxMzEsIAotICAgIDc4LCAyMjAsIDkxLCA3MSwgMjUwLCAzNSwgMTUyLCA5MiwgMjQ5LCAxMzEsIDc4LCAyMzIsIDEwOCwgNDQsIDI0NiwgODYsIAotICAgIDcxLCAyMTgsIDIzNCwgMjE0LCAxNjAsIDQ0LCAyNDYsIDg2LCA3MSwgMjE4LCAyMzQsIDIzMiwgMTA4LCA0NCwgMjIwLCA5MSwgCi0gICAgNzEsIDIxOCwgMjM0LCAyMTQsIDE2MCwgNDQsIDIyMCwgOTEsIDcxLCAyMTgsIDIzNCwgODUsIDIyNCwgMTMsIDE2NCwgMjI2LCAKLSAgICAxNDcsIDcxLCAyMjQsIDEzLCAxNjQsIDIyNiwgMTQ3LCA3MSwgMjQ1LCAzMSwgMTY0LCAyMjYsIDE0NywgODUsIDI0NywgCi0gICAgMjQ5LCAyMzAsIDE4MiwgNzEsIDIxMSwgMTc4LCAxMTQsIDI0NSwgMzEsIDE2NCwgODcsIDE5MiwgNjcsIDEzMCwgMjMxLCAKLSAgICA4MiwgNjcsIDEzMCwgMTE0LCA2NywgMTMwLCAxMTQsIDIxOSwgMTU1LCAyMTUsIDk0LCAyNDksIDIyMCwgMjIzLCAyNTQsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgMjE5LCAxNTUsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCA1MiwgCi0gICAgMjE1LCA5NCwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDUyLCAyNDksIDIyMCwgMjIzLCAyNTQsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgMTIxLCAyMTksIDE1NSwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAKLSAgICAxMTQsIDEyMSwgNTIsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMjQ5LCA5MSwgMjE4LCAxNDAsIDIyNiwgCi0gICAgMTUsIDUsIDIyNiwgMTQ3LCAxMTQsIDI0NSwgMzEsIDE2NCwgMjI2LCAxNDcsIDExNCwgMjQxLCAyMjgsIDI0NSwgMzEsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgODUsIDI0MSwgMjI3LCAyMjIsIDE4NywgMTE0LCA4NSwgMjQxLCAyMjgsIDI1MSwgMTEzLCAKLSAgICAyNDQsIDU1LCAyNDEsIDIyNywgMjIyLCAxODcsIDI0NCwgNTUsIDI0MSwgMjI4LCAyNTEsIDExMywgMjMxLCA4MiwgNDMsIAotICAgIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDQ0LCAyMjYsIDQsIDIyNiwgMTQ3LCAyMzEsIDgyLCAyNDQsIDYzLCA0MywgCi0gICAgMjI2LCA0LCAyMjYsIDE0NywgMjMxLCA4MiwgMjQ0LCA2MywgNDQsIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDIzMywgCi0gICAgNDIsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAxNDcsIDIzMSwgODIsIDIyMiwgMjQ3LCAyNTQsIDExMCwgMjUxLCAxNTgsIAotICAgIDIyNiwgMTQ3LCAxMTQsIDIzMywgNDIsIDI1NCwgMTEwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCAyMjIsIDI0NywgCi0gICAgMjU0LCAxMTAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDIzMywgNDIsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAKLSAgICAxNDcsIDExNCwgMjIyLCAyNDcsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAxNDcsIDE5MiwgNDMsIDIxNiwgNiwgMjIwLCAKLSAgICA1MywgMjUxLCAxNTgsIDIyNiwgMTQ3LCAxOTIsIDQ0LCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU4LCAyMjYsIDE0NywgCi0gICAgMjMxLCA4MiwgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMjYsIDE0NywgMjMxLCA4MiwgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAKLSAgICAyMjYsIDE0NywgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxMTAsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTA1LCAyNDcsIAotICAgIDIwNCwgMTUyLCAzNywgMjEsIDE1OCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxNjEsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgCi0gICAgMTg5LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDE5NCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxOTgsIDI0NywgMjA0LCAKLSAgICAxNTIsIDM3LCAyMSwgMTk1LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDIwMCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDU0LCAyMTYsIAotICAgIDI0NywgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDExMCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDEwNSwgMjQ3LCAyMDQsIDM3LCAKLSAgICAzNSwgMjEsIDE1OCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE2MSwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE4OSwgMjQ3LCAKLSAgICAyMDQsIDM3LCAzNSwgMjEsIDE5NCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE5OCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIAotICAgIDE5NSwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDIwMCwgMjQ3LCAyMDQsIDM3LCAzNSwgNTQsIDIxNiwgMjQ3LCAyNDcsIDIwNCwgCi0gICAgMTUyLCAzNywgMzUsIDIxLCAxMTAsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDEwNSwgMjQ3LCAyMDQsIDE1MiwgMzcsIAotICAgIDM1LCAyMSwgMTU4LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxNjEsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIAotICAgIDE4OSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTk0LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxOTgsIDI0NywgCi0gICAgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDE5NSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMjAwLCAyNDcsIDIwNCwgMTUyLCAKLSAgICAzNywgMzUsIDU0LCAyMTYsIDI0NywgMTE0LCAyMTEsIDI0NiwgOTcsIDc0LCAxMTQsIDk2LCA1MCwgMTE0LCAyMzAsIDE4MiwgCi0gICAgNTAsIDExNCwgMjQ3LCAxNjksIDUwLCAxMTQsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMTE0LCA5NywgNzQsIDExNCwgMjI4LCAKLSAgICA1NiwgMjQ1LCAyMjAsIDc0LCAyNDYsIDk4LCAyMjUsIDExLCA5NywgNzQsIDExNCwgMjIyLCAxODQsIDk3LCA3NCwgMjE1LCAKLSAgICAyMjQsIDk3LCA3NCwgMTE0LCAyMTUsIDIyNCwgOTcsIDc0LCAyNDgsIDE1NSwgMjE1LCAyMjQsIDk3LCA3NCwgMTE0LCAyNDgsIAotICAgIDE1NSwgMjE1LCAyMjQsIDk3LCA3NCwgODUsIDk3LCA3NCwgMjE2LCAxNDQsIDIxNiwgMTIsIDk3LCAyNTMsIDI0OSwgMjE2LCAKLSAgICAxNDQsIDI1MSwgMTczLCA5NywgMjUzLCAyNDksIDg1LCA5NywgMjUzLCAyNDksIDExNCwgODUsIDI0OSwgOTEsIDI0NiwgCi0gICAgMTA0LCAyMiwgOTcsIDc0LCAxMTQsIDg1LCAyNDksIDkxLCAyMTQsIDE1MywgMjIsIDk3LCA3NCwgMjE4LCAyMzEsIDg1LCAKLSAgICA5NywgNzQsIDExNCwgMjQ5LCAyMDYsIDg1LCA5NywgNzQsIDIyMiwgMjQ2LCA3MSwgOTcsIDc0LCAyMzMsIDQxLCA3MSwgOTcsIAotICAgIDc0LCAyNTIsIDE4MywgMjIwLCA5MSwgNzEsIDk3LCA3NCwgMjQzLCAyNDEsIDIyMCwgOTEsIDcxLCA5NywgNzQsIDExNCwgCi0gICAgMjMyLCAxMDgsIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAxMTQsIDIxNCwgMTYwLCAyMjIsIDI0NSwgNzEsIDk3LCA3NCwgMjI4LCAKLSAgICA0OSwgMjMyLCAxMDgsIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAyNDksIDk5LCAyMzIsIDEyMywgMjI4LCA0OSwgMjE0LCAxNjAsIAotICAgIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAzNywgMTE0LCA3MSwgOTcsIDc0LCAyMTEsIDI1MiwgOTcsIDc0LCAyNTEsIDIyMCwgCi0gICAgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAyNTEsIDIyMCwgOTcsIDc0LCAyNTEsIDIyMCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAKLSAgICAxMTQsIDI1MSwgMjIwLCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDExNCwgMjUxLCAyMjAsIDk3LCA3NCwgMTE0LCAyNTEsIAotICAgIDIyMCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAyMTcsIDE3LCA5NywgNzQsIDExNCwgMjE3LCAxNiwgOTcsIDc0LCAyMTIsIAotICAgIDE4LCA5NywgNzQsIDExNCwgMjEyLCAxOCwgOTcsIDc0LCAyMjYsIDE3MiwgOTcsIDc0LCA1MiwgMjQ5LCA5OSwgMjMyLCAKLSAgICAxMjMsIDEzNCwgMjQ3LCAyMTQsIDI1NCwgMTA5LCA3MSwgMjE1LCAyMjYsIDI0OSwgMTg3LCA0LCA3MSwgMjE1LCAyMjUsIAotICAgIDIyNSwgMTcxLCAyMDQsIDIxOCwgNjMsIDIwNCwgMjE4LCAyMSwgNDMsIDIyMiwgOTAsIDI1MiwgMTczLCAyNDgsIDYwLCA0NCwgCi0gICAgMjIyLCA5MCwgMjUyLCAxNzMsIDI0OCwgNjAsIDE3NywgMiwgNTksIDIzNSwgMjE1LCAyMjMsIDUwLCAyMTksIDQ3LCAyMjQsIAotICAgIDIwMSwgMjE4LCA2MywgMjE4LCAyMiwgMjI0LCAyMDEsIDIxOSwgNDYsIDY3LCAyNTIsIDE0MSwgMiwgMjAzLCA5MSwgMTEsIAotICAgIDIyMiwgMjI4LCAyNDcsIDI1NCwgMTk5LCAyNDcsIDE2OCwgMTEsIDI0NCwgMTc1LCAyNDcsIDI1NCwgOTIsIDIzMiwgMTQ2LCAKLSAgICAyNTQsIDExOCwgOTIsIDIzMiwgMTQ2LCAyMjYsIDE1OCwgNzEsIDI0NywgMjQ5LCAyLCAyNTAsIDE3MywgMjQ3LCAxMjAsIAotICAgIDIyLCAyLCAyNDcsIDEyMCwgMjQ1LCAxNzAsIDY0LCAyMjYsIDE3MCwgMjE0LCAxNTIsIDIzMiwgMTA4LCA0NCwgMjQ5LCAKLSAgICAxNjEsIDIsIDI0NywgMTIwLCAyMTQsIDE2MCwgNDMsIDI0OSwgMTYxLCAyLCAyNDcsIDEyMCwgNDMsIDIyNiwgMTI4LCAyMzUsIAotICAgIDY2LCA0NCwgMjI2LCAxMjgsIDIzNSwgNjYsIDI0MywgMjI5LCAyMjYsIDEyOCwgMjM1LCA2NiwgMjMzLCA4NSwgMTIwLCAKLSAgICAyMTcsIDg3LCAyMzMsIDg1LCAxMjQsIDIxNywgODcsIDQzLCAyMiwgNDQsIDUyLCAyMTUsIDkzLCA0MywgMjIsIDQ0LCAyMTcsIAotICAgIDg3LCA0MywgMjMwLCA4NywgMTk5LCA0NCwgMjE3LCA4NywgMTk5LCA0MywgMjE3LCA4NywgMTIwLCAyMTcsIDg4LCAyLCAKLSAgICAyNTAsIDM2LCA0OCwgMjMyLCAxMDUsIDI0NywgMTczLCAyNTEsIDc4LCAyMDMsIDIyMiwgMTMzLCA3MSwgMjQ5LCAyMDUsIAotICAgIDI0NywgMjQ4LCA3MSwgMjQ5LCAyMDUsIDI0NywgMjQ5LCAyLCAxNDAsIDIxNiwgMTE0LCA3MSwgMjQ5LCAyMDUsIDI0NywgCi0gICAgMjQ5LCAyLCA5NywgMjE2LCAxMTQsIDcxLCA0MiwgMiwgMTQwLCAyMTYsIDExNCwgNzEsIDQyLCAyLCA5NywgMjE2LCAxMTQsIAotICAgIDExLCA0MywgNzEsIDQyLCAxMjcsIDExLCA0NCwgNzEsIDQyLCAxMjcsIDExLCA0MywgMjU0LCAxMTAsIDEyNywgMTEsIDQ0LCAKLSAgICAyNTQsIDExMCwgMTI3LCAxMSwgNDMsIDUyLCAyNTQsIDExMCwgMTI3LCAxMSwgNDQsIDUyLCAyNTQsIDExMCwgMTI3LCAxMSwgCi0gICAgNDMsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMTEsIDQ0LCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDExLCA0MywgCi0gICAgMjQ0LCA2MywgMjI2LCAzLCAxMSwgNDQsIDI0NCwgNjMsIDIyNiwgMywgMjE0LCAxNTMsIDIyNCwgMjQsIDc0LCAyNDYsIAotICAgIDEwNCwgMjI0LCAyNCwgNzQsIDI1NCwgODgsIDI0MywgOTgsIDI1MCwgMzYsIDc0LCAyNTAsIDIsIDI0MywgOTgsIDI1MCwgCi0gICAgMzYsIDc0LCA0NCwgODAsIDIsIDM3LCAyMjUsIDIyLCAxOTksIDE0MCwgNzQsIDE5OSwgOTcsIDc0LCAxOTksIDQzLCA0NCwgCi0gICAgNzQsIDE5OSwgMTQwLCA1MiwgNzQsIDE5OSwgOTcsIDUyLCA3NCwgMTk5LCA0MywgNDQsIDUyLCA3NCwgMTk5LCAxNDAsIDgwLCAKLSAgICAyNDMsIDI0MywgMTMwLCAxOTksIDk3LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTk5LCAxNDAsIDUyLCA4MCwgMjQzLCAyNDMsIAotICAgIDEzMCwgMTk5LCA5NywgNTIsIDgwLCAyNDMsIDI0MywgMTMwLCAxOTksIDk3LCAyMTgsIDIzMCwgNzQsIDQ2LCA0NywgMjUxLCAKLSAgICAyMTUsIDQ2LCA0NywgMjQ3LCAxMTcsIDQ2LCA0NywgMjQ2LCAyNDUsIDQ2LCA0NywgMjQ3LCAxMTYsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODEsIDQ2LCA0NywgMjQ3LCA1MiwgNDYsIDQ3LCAyNDYsIDI0NCwgNDYsIDQ3LCAyNDcsIDExNSwgNDYsIDQ3LCAyNDYsIAotICAgIDE0OSwgNDYsIDQ3LCAyNDcsIDIwLCA0NiwgNDcsIDI0NiwgMjEyLCA0NiwgNDcsIDI0NywgODMsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODAsIDQ2LCA0NywgMjQ3LCA1MSwgNDYsIDQ3LCAyNDYsIDI0MywgNDYsIDQ3LCAyNDcsIDExNCwgNDYsIDQ3LCAyNDYsIAotICAgIDEzMywgNDYsIDQ3LCAyNDcsIDQsIDQ2LCA0NywgMjQ2LCAxOTYsIDQ2LCA0NywgMjQ3LCA2NywgNDYsIDQ3LCAyNDYsIDE2NCwgCi0gICAgNDYsIDQ3LCAyNDcsIDM1LCA0NiwgNDcsIDI0NiwgMjI3LCA0NiwgNDcsIDI0NywgOTgsIDQ2LCA0NywgMjQ2LCAxNDgsIDQ2LCAKLSAgICA0NywgMjQ3LCAxOSwgNDYsIDQ3LCAyNDYsIDIxMSwgNDYsIDQ3LCAyNDcsIDgyLCA0NiwgNDcsIDI0NiwgMTc5LCA0NiwgNDcsIAotICAgIDI0NywgNTAsIDQ2LCA0NywgMjQ2LCAyNDIsIDQ2LCA0NywgMjQ3LCAxMTMsIDQ2LCA0NywgMjQ2LCAxMjUsIDQ2LCA0NywgCi0gICAgMjQ2LCAyNTIsIDQ2LCA0NywgMjQ2LCAxODgsIDQ2LCA0NywgMjQ3LCA1OSwgNDYsIDQ3LCAyNDYsIDE1NiwgNDYsIDQ3LCAKLSAgICAyNDcsIDI3LCA0NiwgNDcsIDI0NiwgMjE5LCA0NiwgNDcsIDI0NywgOTAsIDQ2LCA0NywgMjQ2LCAxNDAsIDQ2LCA0NywgCi0gICAgMjQ3LCAxMSwgNDYsIDQ3LCAyNDYsIDIwMywgNDYsIDQ3LCAyNDcsIDc0LCA0NiwgNDcsIDI0NiwgMTcxLCA0NiwgNDcsIAotICAgIDI0NywgNDIsIDQ2LCA0NywgMjQ2LCAyMzQsIDQ2LCA0NywgMjQ3LCAxMDUsIDQ2LCA0NywgMjQ2LCAxMzIsIDQ2LCA0NywgCi0gICAgMjQ3LCAzLCA0NiwgNDcsIDI0NiwgMTk1LCA0NiwgNDcsIDI0NywgNjYsIDQ2LCA0NywgMjQ2LCAxNjMsIDQ2LCA0NywgMjQ3LCAKLSAgICAzNCwgNDYsIDQ3LCAyNDYsIDIyNiwgNDYsIDQ3LCAyNDcsIDk3LCA0NiwgNDcsIDI0NiwgMTQ3LCA0NiwgNDcsIDI0NywgMTgsIAotICAgIDQ2LCA0NywgMjQ2LCAyMTAsIDQ2LCA0NywgMjQ3LCA4MSwgNDYsIDQ3LCAyNDYsIDE3OCwgNDYsIDQ3LCAyNDcsIDQ5LCA0NiwgCi0gICAgNDcsIDI0NiwgMjQxLCA0NiwgNDcsIDI0NywgMTEyLCA0NiwgNDcsIDI0NiwgMTIxLCA0NiwgNDcsIDI0NiwgMjQ4LCA0NiwgCi0gICAgNDcsIDI0NiwgMTg0LCA0NiwgNDcsIDI0NywgNTUsIDQ2LCA0NywgMjQ2LCAxNTIsIDQ2LCA0NywgMjQ3LCAyMywgNDYsIDQ3LCAKLSAgICAyNDYsIDIxNSwgNDYsIDQ3LCAyNDcsIDg2LCA0NiwgNDcsIDI0NiwgMTM2LCA0NiwgNDcsIDI0NywgNywgNDYsIDQ3LCAyNDYsIAotICAgIDE5OSwgNDYsIDQ3LCAyNDcsIDcwLCA0NiwgNDcsIDI0NiwgMTY3LCA0NiwgNDcsIDI0NywgMzgsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzAsIDQ2LCA0NywgMjQ3LCAxMDEsIDQ2LCA0NywgMjQ2LCAxMjgsIDQ2LCA0NywgMjQ2LCAyNTUsIDQ2LCA0NywgMjQ2LCAKLSAgICAxOTEsIDQ2LCA0NywgMjQ3LCA2MiwgNDYsIDQ3LCAyNDYsIDE1OSwgNDYsIDQ3LCAyNDcsIDMwLCA0NiwgNDcsIDI0NiwgCi0gICAgMjIyLCA0NiwgNDcsIDI0NywgOTMsIDQ2LCA0NywgMjQ2LCAxNDMsIDQ2LCA0NywgMjQ3LCAxNCwgNDYsIDQ3LCAyNDYsIAotICAgIDIwNiwgNDYsIDQ3LCAyNDcsIDc3LCA0NiwgNDcsIDI0NiwgMTc0LCA0NiwgNDcsIDI0NywgNDUsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzcsIDQ2LCA0NywgMjQ3LCAxMDgsIDQ2LCA0NywgMjQ2LCAxMjQsIDQ2LCA0NywgMjQ2LCAyNTEsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODcsIDQ2LCA0NywgMjQ3LCA1OCwgNDYsIDQ3LCAyNDYsIDE1NSwgNDYsIDQ3LCAyNDcsIDI2LCA0NiwgNDcsIDI0NiwgCi0gICAgMjE4LCA0NiwgNDcsIDI0NywgODksIDQ2LCA0NywgMjQ2LCAxMzksIDQ2LCA0NywgMjQ3LCAxMCwgNDYsIDQ3LCAyNDYsIAotICAgIDIwMiwgNDYsIDQ3LCAyNDcsIDczLCA0NiwgNDcsIDI0NiwgMTcwLCA0NiwgNDcsIDI0NywgNDEsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzMsIDQ2LCA0NywgMjQ3LCAxMDQsIDQ2LCA0NywgMjQ2LCAxMzEsIDQ2LCA0NywgMjQ3LCAyLCA0NiwgNDcsIDI0NiwgCi0gICAgMTk0LCA0NiwgNDcsIDI0NywgNjUsIDQ2LCA0NywgMjQ2LCAxNjIsIDQ2LCA0NywgMjQ3LCAzMywgNDYsIDQ3LCAyNDYsIAotICAgIDIyNSwgNDYsIDQ3LCAyNDcsIDk2LCA0NiwgNDcsIDI0NiwgMTQ2LCA0NiwgNDcsIDI0NywgMTcsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMDksIDQ2LCA0NywgMjQ3LCA4MCwgNDYsIDQ3LCAyNDYsIDE3NywgNDYsIDQ3LCAyNDcsIDQ4LCA0NiwgNDcsIDI0NiwgCi0gICAgMjQwLCA0NiwgNDcsIDI0NywgMTExLCA0NiwgNDcsIDI0NiwgMTE5LCA0NiwgNDcsIDI0NiwgMjQ2LCA0NiwgNDcsIDI0NiwgCi0gICAgMTgyLCA0NiwgNDcsIDI0NywgNTMsIDQ2LCA0NywgMjQ2LCAxNTAsIDQ2LCA0NywgMjQ3LCAyMSwgNDYsIDQ3LCAyNDYsIAotICAgIDIxMywgNDYsIDQ3LCAyNDcsIDg0LCA0NiwgNDcsIDI0NiwgMTM0LCA0NiwgNDcsIDI0NywgNSwgNDYsIDQ3LCAyNDYsIDE5NywgCi0gICAgNDYsIDQ3LCAyNDcsIDY4LCA0NiwgNDcsIDI0NiwgMTY1LCA0NiwgNDcsIDI0NywgMzYsIDQ2LCA0NywgMjQ2LCAyMjgsIDQ2LCAKLSAgICA0NywgMjQ3LCA5OSwgNDYsIDQ3LCAyNDYsIDEyNiwgNDYsIDQ3LCAyNDYsIDI1MywgNDYsIDQ3LCAyNDYsIDE4OSwgNDYsIAotICAgIDQ3LCAyNDcsIDYwLCA0NiwgNDcsIDI0NiwgMTU3LCA0NiwgNDcsIDI0NywgMjgsIDQ2LCA0NywgMjQ2LCAyMjAsIDQ2LCA0NywgCi0gICAgMjQ3LCA5MSwgNDYsIDQ3LCAyNDYsIDE0MSwgNDYsIDQ3LCAyNDcsIDEyLCA0NiwgNDcsIDI0NiwgMjA0LCA0NiwgNDcsIAotICAgIDI0NywgNzUsIDQ2LCA0NywgMjQ2LCAxNzIsIDQ2LCA0NywgMjQ3LCA0MywgNDYsIDQ3LCAyNDYsIDIzNSwgNDYsIDQ3LCAKLSAgICAyNDcsIDEwNiwgNDYsIDQ3LCAyNDYsIDEyMiwgNDYsIDQ3LCAyNDYsIDI0OSwgNDYsIDQ3LCAyNDYsIDE4NSwgNDYsIDQ3LCAKLSAgICAyNDcsIDU2LCA0NiwgNDcsIDI0NiwgMTUzLCA0NiwgNDcsIDI0NywgMjQsIDQ2LCA0NywgMjQ2LCAyMTYsIDQ2LCA0NywgCi0gICAgMjQ3LCA4NywgNDYsIDQ3LCAyNDYsIDEzNywgNDYsIDQ3LCAyNDcsIDgsIDQ2LCA0NywgMjQ2LCAyMDAsIDQ2LCA0NywgMjQ3LCAKLSAgICA3MSwgNDYsIDQ3LCAyNDYsIDE2OCwgNDYsIDQ3LCAyNDcsIDM5LCA0NiwgNDcsIDI0NiwgMjMxLCA0NiwgNDcsIDI0NywgCi0gICAgMTAyLCA0NiwgNDcsIDI0NiwgMTI5LCA0NiwgNDcsIDI0NywgMCwgNDYsIDQ3LCAyNDYsIDE5MiwgNDYsIDQ3LCAyNDcsIDYzLCAKLSAgICA0NiwgNDcsIDI0NiwgMTYwLCA0NiwgNDcsIDI0NywgMzEsIDQ2LCA0NywgMjQ2LCAyMjMsIDQ2LCA0NywgMjQ3LCA5NCwgNDYsIAotICAgIDQ3LCAyNDYsIDE0NCwgNDYsIDQ3LCAyNDcsIDE1LCA0NiwgNDcsIDI0NiwgMjA3LCA0NiwgNDcsIDI0NywgNzgsIDQ2LCA0NywgCi0gICAgMjQ2LCAxNzUsIDQ2LCA0NywgMjQ3LCA0NiwgNDYsIDQ3LCAyNDYsIDIzOCwgNDYsIDQ3LCAyNDcsIDEwOSwgNDYsIDQ3LCAKLSAgICAyNDYsIDEyMCwgNDYsIDQ3LCAyNDYsIDI0NywgNDYsIDQ3LCAyNDYsIDE4MywgNDYsIDQ3LCAyNDcsIDU0LCA0NiwgNDcsIAotICAgIDI0NiwgMTUxLCA0NiwgNDcsIDI0NywgMjIsIDQ2LCA0NywgMjQ2LCAyMTQsIDQ2LCA0NywgMjQ3LCA4NSwgNDYsIDQ3LCAKLSAgICAyNDYsIDEzNSwgNDYsIDQ3LCAyNDcsIDYsIDQ2LCA0NywgMjQ2LCAxOTgsIDQ2LCA0NywgMjQ3LCA2OSwgNDYsIDQ3LCAyNDYsIAotICAgIDE2NiwgNDYsIDQ3LCAyNDcsIDM3LCA0NiwgNDcsIDI0NiwgMjI5LCA0NiwgNDcsIDI0NywgMTAwLCA0NiwgNDcsIDI0NiwgCi0gICAgMTI3LCA0NiwgNDcsIDI0NiwgMjU0LCA0NiwgNDcsIDI0NiwgMTkwLCA0NiwgNDcsIDI0NywgNjEsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNTgsIDQ2LCA0NywgMjQ3LCAyOSwgNDYsIDQ3LCAyNDYsIDIyMSwgNDYsIDQ3LCAyNDcsIDkyLCA0NiwgNDcsIDI0NiwgCi0gICAgMTQyLCA0NiwgNDcsIDI0NywgMTMsIDQ2LCA0NywgMjQ2LCAyMDUsIDQ2LCA0NywgMjQ3LCA3NiwgNDYsIDQ3LCAyNDYsIAotICAgIDE3MywgNDYsIDQ3LCAyNDcsIDQ0LCA0NiwgNDcsIDI0NiwgMjM2LCA0NiwgNDcsIDI0NywgMTA3LCA0NiwgNDcsIDI0NiwgCi0gICAgMTIzLCA0NiwgNDcsIDI0NiwgMjUwLCA0NiwgNDcsIDI0NiwgMTg2LCA0NiwgNDcsIDI0NywgNTcsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNTQsIDQ2LCA0NywgMjQ3LCAyNSwgNDYsIDQ3LCAyNDYsIDIxNywgNDYsIDQ3LCAyNDcsIDg4LCA0NiwgNDcsIDI0NiwgCi0gICAgMTM4LCA0NiwgNDcsIDI0NywgOSwgNDYsIDQ3LCAyNDYsIDIwMSwgNDYsIDQ3LCAyNDcsIDcyLCA0NiwgNDcsIDI0NiwgMTY5LCAKLSAgICA0NiwgNDcsIDI0NywgNDAsIDQ2LCA0NywgMjQ2LCAyMzIsIDQ2LCA0NywgMjQ3LCAxMDMsIDQ2LCA0NywgMjQ2LCAxMzAsIAotICAgIDQ2LCA0NywgMjQ3LCAxLCA0NiwgNDcsIDI0NiwgMTkzLCA0NiwgNDcsIDI0NywgNjQsIDQ2LCA0NywgMjQ2LCAxNjEsIDQ2LCAKLSAgICA0NywgMjQ3LCAzMiwgNDYsIDQ3LCAyNDYsIDIyNCwgNDYsIDQ3LCAyNDcsIDk1LCA0NiwgNDcsIDI0NiwgMTQ1LCA0NiwgNDcsIAotICAgIDI0NywgMTYsIDQ2LCA0NywgMjQ2LCAyMDgsIDQ2LCA0NywgMjQ3LCA3OSwgNDYsIDQ3LCAyNDYsIDE3NiwgNDYsIDQ3LCAKLSAgICAyNDcsIDQ3LCA0NiwgNDcsIDI0NiwgMjM5LCA0NiwgNDcsIDI0NywgMTEwLCA5NywgMjE1LCA1OCwgODAsIDIsIDY3LCA5MSwgCi0gICAgOTcsIDIxNSwgNTgsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIDUyLCA4MCwgMiwgNjcsIDkxLCA5NywgNTIsIDgwLCAyLCAKLSAgICA2NywgOTEsIDQzLCA0NCwgNTIsIDgwLCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTQwLCAKLSAgICA1MiwgODAsIDI0MywgMjQzLCAxMzAsIDk3LCA1MiwgODAsIDI0MywgMjQzLCAxMzAsIDI0NiwgMTA0LCA4MCwgMiwgMjAzLCAKLSAgICA5MSwgMjE0LCAxNTMsIDgwLCAyLCAyMDMsIDkxLCAyMTQsIDE1MywgMjE1LCAyMTEsIDc0LCAyNDYsIDEwNCwgMjE1LCAyMTEsIAotICAgIDc0LCAxNDAsIDUyLCAyNDgsIDE1NywgNzQsIDk3LCA1MiwgMjQ4LCAxNTcsIDc0LCAxNDAsIDIxNSwgMjExLCAyNDgsIDE1NywgCi0gICAgNzQsIDk3LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDc0LCA5NywgMjE1LCA1OCwgMjE1LCAyMTEsIDI0OCwgMTU3LCA3NCwgOTcsIAotICAgIDgwLCAyLCAyNDYsIDExOCwgMjE4LCAxMzksIDIxNCwgMTUzLCA4MCwgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgODAsIDIxNiwgCi0gICAgNDIsIDEzMCwgOTcsIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCAKLSAgICA5MSwgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc3LCA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgCi0gICAgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc4LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDI1MywgMjUxLCA5NywgMjUzLCAyNTEsIAotICAgIDE0MCwgNTIsIDI1MywgMjUxLCA5NywgNTIsIDI1MywgMjUxLCAxNDAsIDgwLCAyMTYsIDQyLCA4NSwgMjQ3LCAyNDgsIDk3LCAKLSAgICA4MCwgMjE2LCA0MiwgODUsIDI0NywgMjQ4LCAxNDAsIDgwLCAyNDMsIDI0MywgMjUyLCAxNDEsIDIxNiwgNDIsIDg1LCAyNDcsIAotICAgIDI0OCwgOTcsIDgwLCAyNDMsIDI0MywgMjUyLCAxNDEsIDIxNiwgNDIsIDg1LCAyNDcsIDI0OCwgMjI4LCA1NiwgMjEyLCA5LCAKLSAgICAyMiwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgMjIsIDIxOSwgMjgsIDIxMiwgOSwgNzQsIAotICAgIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIsIDEwMywgMjI4LCA1NiwgMjQ1LCAyMjAsIDgwLCAyLCAxMDMsIDIxOSwgMjgsIDI0NSwgCi0gICAgMjIwLCA4MCwgMiwgMTAzLCAyMTksIDI4LCAyMTIsIDksIDgwLCAyLCAxMDMsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIyLCAKLSAgICAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA4MCwgMjIsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgCi0gICAgMjE5LCAyOCwgMjQ1LCAyMjAsIDgwLCAyMiwgMjE5LCAyOCwgMjEyLCA5LCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA4MCwgMjIsIAotICAgIDIyOCwgNTYsIDIxMiwgOSwgNzQsIDIyMiwgMjI4LCAyNDcsIDI1NSwgMjQ5LCAxMjUsIDI0NCwgMTc1LCAyNDcsIDI1NCwgCi0gICAgMjQ0LCAxNzUsIDI0NywgMjU1LCAyNDksIDEyNSwgMjIyLCAyMjgsIDI0NywgMjU0LCAyMTksIDI4LCAyNDUsIDIyMCwgODAsIAotICAgIDI0OSwgMTI1LCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA4MCwgMjQ5LCAxMjUsIDIxOSwgCi0gICAgMjgsIDI0NSwgMjIwLCA3NCwgMjQ0LCAxNzUsIDI0NywgMjU1LCAyNDksIDEyNSwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAKLSAgICAyMjIsIDIyOCwgMjQ3LCAyNTUsIDI0OSwgMTI1LCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCAKLSAgICA4MCwgMjQ5LCAxMjUsIDIyOCwgNTYsIDIxMiwgOSwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDI0OSwgMTI1LCAyMjgsIAotICAgIDU2LCAyNDUsIDIyMCwgNzQsIDIxMiwgMzYsIDgwLCAyMjUsIDcsIDI0NywgMTk1LCAyMjIsIDI1MSwgODAsIDIyNSwgNywgCi0gICAgOTcsIDIxNiwgMTg4LCAyNDksIDkwLCAyMTQsIDE1MiwgODAsIDIyNSwgNywgOTcsIDIxNiwgMTg4LCAyNDksIDkwLCAyNDYsIAotICAgIDEwMywgODAsIDIyNSwgNywgMjQ2LCAxMDQsIDIxNiwgMTg4LCAyNDksIDkwLCAyMzMsIDM3LCA4MCwgMjI1LCA3LCAyNDYsIAotICAgIDEwNCwgMjE2LCAxODgsIDI0OSwgOTAsIDIyMiwgMjQxLCAyMjIsIDI0NCwgMjU0LCAyNiwgMjUwLCAyLCA3NCwgMjMzLCA0MCwgCi0gICAgMjU0LCAyNiwgMjU0LCA4OCwgNzQsIDIxNiwgMTQsIDI1NCwgMjYsIDI1NCwgODgsIDc0LCAyNTEsIDE3NSwgMjU0LCAyNiwgCi0gICAgMjU0LCA4OCwgNzQsIDIxNiwgMTQsIDI1NCwgMjYsIDI1MCwgMiwgODAsIDIsIDIzMCwgMTgxLCAyMTYsIDE0LCAyNTQsIDI2LCAKLSAgICAyNTQsIDg4LCA4MCwgMiwgMjI1LCAyMiwgMjMyLCAxMDgsIDQ0LCAyMjAsIDE1MiwgMjUwLCAyLCA3NCwgMjMyLCAxMDgsIAotICAgIDQzLCAyMjAsIDE1MiwgMjU0LCA4OCwgNzQsIDI1NCwgODgsIDI1MCwgMCwgMjUwLCAzNiwgNzQsIDI1MCwgMiwgMjUwLCAwLCAKLSAgICAyNTAsIDM2LCA3NCwgOTcsIDgwLCA3NywgMjE5LCAyNTEsIDE0MCwgNzQsIDE0MCwgODAsIDc3LCAyMTksIDI1MSwgOTcsIAotICAgIDc0LCAyMTksIDI1MSwgOTcsIDgwLCA3NywgMTQwLCA3NCwgOTcsIDgwLCAyLCA5NiwgNTEsIDE0MCwgODAsIDIsIDk2LCA1MSwgCi0gICAgOTcsIDgwLCAyMTYsIDEzOSwgMjExLCAxNzgsIDQzLCA0NCwgODAsIDIxNiwgMTM5LCA0LCAyNTAsIDM1LCAyMTQsIDE1MywgCi0gICAgMjE1LCA1OCwgODAsIDI0MywgMjQzLCA0LCAyNTAsIDM1LCA0MywgMjUyLCAxMzksIDEyMCwgNDQsIDI1MiwgMTM5LCAxMjQsIAotICAgIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyNCwgNDQsIDI1MiwgMTM5LCAxMjAsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCAKLSAgICA0NCwgMTI0LCAyNTIsIDEzOSwgNDMsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCA0MywgMTI0LCAyNTIsIDEzOSwgNDQsIAotICAgIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyMCwgNDQsIDI1MiwgMTM5LCAxMjAsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCAKLSAgICA0NCwgMTI0LCAyNTIsIDEzOSwgNDQsIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyNCwgNDQsIDI1MiwgMTM5LCAxMjQsIAotICAgIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCA0MywgMTI0LCAyNTIsIDEzOSwgNDMsIDI0MSwgMjU0LCAxNDAsIDI0MSwgMjU1LCAKLSAgICAyLCAyNTIsIDEzOSwgMTIwLCAyMTYsIDQyLCAxMzAsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgMjE2LCA0MiwgCi0gICAgMTMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjE2LCA0MiwgMTMwLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyMTYsIAotICAgIDQyLCAxMzAsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjE2LCA0MiwgMTMwLCAyMTQsIDE1MywgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgCi0gICAgMjE2LCA0MiwgMTMwLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCAyNDMsIDI0MywgMTMwLCA5NywgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIAotICAgIDQ0LCAyNDMsIDI0MywgMTMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjQzLCAyNDMsIDEzMCwgCi0gICAgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjQzLCAyNDMsIDEzMCwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIAotICAgIDEzOSwgMTI0LCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjQzLCAyNDMsIAotICAgIDEzMCwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI0MywgMjQzLCAxMzAsIDE0MCwgMjQxLCAyNTUsIAotICAgIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDYsIDIxNCwgMTUzLCAKLSAgICAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNTIsIDMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIAotICAgIDI1MSwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAKLSAgICAxMDYsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNTIsIDMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyMjIsIDI1MSwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDk3LCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDIxNCwgMTYzLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCA3NywgOTcsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjQ2LCAxMDYsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDE0MCwgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyMTQsIDE2MywgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCA3NywgMTQwLCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDI0NiwgMTA2LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgMTk5LCAyNDgsIDE1NiwgCi0gICAgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjUyLCA0MywgMTk5LCAyNDgsIDE1NiwgOTcsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMTIwLCA3NywgMTk5LCAyNDgsIDE1NiwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyNTIsIAotICAgIDQzLCAxOTksIDI0OCwgMTU2LCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjUyLCAzMCwgMjQ2LCAKLSAgICAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAyNTEsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIAotICAgIDQzLCAyNTIsIDMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIDI1MSwgNDQsIDUyLCA4MCwgMiwgCi0gICAgMjIyLCAxODMsIDI0MSwgMjM1LCAyNDUsIDk4LCA1LCA3NywgOTcsIDc0LCAyMTYsIDg5LCAyMjYsIDE2OCwgNzcsIDk3LCAKLSAgICA3NCwgMTQwLCA4MCwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCA5NywgODAsIDc3LCAyMTYsIDg5LCAyMjYsIDE2NywgOTcsIAotICAgIDgwLCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAyMzMsIDE1LCA3NywgMTQwLCA3NCwgMTQwLCA4MCwgMjE2LCAxMzksIDIzMywgCi0gICAgMTQsIDI0MiwgMTMwLCA3NywgOTcsIDc0LCAyMTgsIDY0LCA3NywgOTcsIDc0LCAxNDAsIDgwLCAyMTYsIDEzOSwgMjE4LCAKLSAgICA2MywgMjE4LCAyMiwgNzcsIDE0MCwgNzQsIDQzLCAyNDQsIDkxLCAyMTcsIDc3LCA0NCwgMjQ0LCA5MSwgMjE3LCA3NywgCi0gICAgMTIwLCAyNDQsIDkxLCAyMTcsIDc3LCAxMjQsIDI0NCwgOTEsIDIxNywgNzcsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIAotICAgIDI0OCwgNjAsIDIxMCwgMTYwLCAxODcsIDIxOCwgMjQyLCAyMTAsIDE2MCwgMTg3LCAyMTUsIDQ5LCAyNDksIDIyNiwgNDMsIAotICAgIDcxLCAyNDksIDk5LCAxMjcsIDQ0LCA3MSwgMjQ5LCA5OSwgMTI3LCA0MywgNzEsIDIyNiwgMywgNDQsIDcxLCAyMjYsIDMsIAotICAgIDIxMCwgMTYwLCAxODcsIDQzLCAyMzYsIDE1LCAxMjcsIDIxMCwgMTYwLCAxODcsIDQ0LCAyMzYsIDE1LCAxMjcsIDIxMCwgCi0gICAgMTYwLCAxODcsIDQzLCAyNTEsIDI0MiwgMTI3LCAyMTAsIDE2MCwgMTg3LCA0NCwgMjUxLCAyNDIsIDEyNywgNDMsIDQyLCAKLSAgICAyNTEsIDE1OCwgMiwgMjE0LCAxODMsIDQ0LCA0MiwgMjUxLCAxNTgsIDIsIDIxNCwgMTgzLCA0MywgNDIsIDI1MSwgMTU4LCAKLSAgICAyLCAyMTYsIDExNSwgMjM2LCAwLCAyMTYsIDE0LCAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMiwgMjE2LCAxMTUsIAotICAgIDIzNiwgMCwgMjUxLCAxNzUsIDI0OSwgMTYwLCA0MywgNDIsIDI1MSwgMTU4LCAyLCAyMTYsIDExNSwgMjM2LCAwLCAyNTEsIAotICAgIDE3NSwgMjQ5LCAxNjAsIDQ0LCA0MiwgMjUxLCAxNTgsIDIsIDIxNiwgMTE1LCAyMzYsIDAsIDIxNiwgMTQsIDI0OSwgMTYwLCAKLSAgICA0MywgMjU0LCAxMTAsIDI1MSwgMTU4LCAyLCAyNDcsIDEyMCwgNDQsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMiwgMjQ3LCAxMjAsIAotICAgIDQzLCAyNTQsIDI2LCAyMzMsIDE1LCAxMjcsIDQ0LCAyNTQsIDI2LCAyNDIsIDEzMCwgMTI3LCA1MiwgNDMsIDI1NCwgMjYsIAotICAgIDI0MiwgMTMwLCAxMjcsIDUyLCA0NCwgMjU0LCAyNiwgMjMzLCAxNSwgMTI3LCA0MywgODUsIDIxNiwgNiwgMjIwLCA1MywgCi0gICAgMTI3LCA0NCwgODUsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAyNDYsIDExOCwgMjQ0LCAxMzUsIDY3LCAyMTAsIDM1LCAyMzIsIAotICAgIDIxMywgMjMxLCA4OCwgMjU0LCAxMTAsIDIyNiwgMTcwLCAyMzMsIDQ2LCA0NCwgMjU0LCAxMTAsIDIxNCwgMTIsIDIsIDIxOCwgCi0gICAgMjM0LCAyMzEsIDg4LCA0NCwgMjU0LCAxMTAsIDIsIDI0NywgMTIwLCAyNTQsIDExMCwgMiwgMjIyLCA5MiwgMjM1LCAyMTUsIAotICAgIDI1NSwgMywgMjU0LCAxMDksIDIxOCwgMjU1LCAyNTQsIDExMCwgMjI2LCAxNzAsIDIzMywgNDYsIDIxOCwgMjU1LCAyNTQsIAotICAgIDExMCwgMjI2LCAxNzAsIDIxNCwgMTYzLCAyMTUsIDk0LCAyNTQsIDEwOSwgMjIzLCA0OSwgMjU0LCAxMDksIDI1NCwgMTEwLCAKLSAgICAyLCAyMTQsIDE4MywgMjIzLCA0OSwgMjU0LCAxMTAsIDIsIDIxNCwgMTgzLCAyMjYsIDI0OCwgMjU0LCAxMTAsIDIyNiwgCi0gICAgMTcwLCAyMTQsIDE2MywgMjI2LCAyNDgsIDI1NCwgMTEwLCAyMjYsIDE3MCwgMjQ2LCAxMDYsIDIzMSwgODgsIDI1NCwgMTEwLCAKLSAgICAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgMTIwLCAyMiwgMjIyLCAyNTEsIDIzMSwgODgsIAotICAgIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgMTIwLCAyMiwgMjMzLCA0NiwgCi0gICAgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCAxMjQsIDIyLCAKLSAgICAyMjIsIDI1MSwgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCAKLSAgICA3LCAxMjQsIDIyLCAyMzMsIDQ2LCAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIAotICAgIDgwLCAyMjUsIDcsIDQ0LCAyMiwgMjE0LCAxNjMsIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAKLSAgICAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgNDMsIDIyLCAyMTQsIDE2MywgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgCi0gICAgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCA0NCwgMjIsIDI0NiwgMTA2LCAyMzEsIDg4LCAyNTQsIAotICAgIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDQzLCAyMiwgMjQ2LCAxMDYsIDIyMywgCi0gICAgNDksIDI0NSwgMTUyLCAyMjAsIDEyNywgMjQ1LCAxNTIsIDIyMCwgMTI4LCAyLCAyMjYsIDEyMywgMjQ1LCAxNTIsIDIyMCwgCi0gICAgMTI4LCAyLCA0LCAyNTAsIDM2LCA0OCwgMjQ1LCAxNTIsIDIyMCwgMTI4LCAyLCA0NCwgODAsIDQ4LCAyNDUsIDE1MiwgMjIwLCAKLSAgICAxMjgsIDIsIDQzLCA4MCwgNDgsIDI1MCwgMzYsIDIsIDIwMywgMTMwLCAzNywgNjcsIDEzMCwgMzcsIDIyNiwgNywgMzcsIAotICAgIDIyMywgNTAsIDIxOSwgNDYsIDM3LCAyMjUsIDE3MSwgMjUwLCAzNiwgMjQ3LCAxNzMsIDI1MSwgNzgsIDIwMywgMjUyLCAKLSAgICAxNDEsIDIyLCAyMTYsIDE0LCAxNjMsIDI0NywgMTczLCAyNTEsIDc4LCA2NywgMTMwLCAyNTAsIDM2LCAyLCAyMTgsIDI0LCAKLSAgICAyMTEsIDE3OCwgMzcsIDI1NCwgODcsIDI0NywgMTY5LCA1MCwgMTIwLCA4MCwgMjE2LCAxMzksIDI1MCwgMzUsIDM3LCA3MSwgCi0gICAgMjUxLCAxMTMsIDM3LCAyNTEsIDExMywgMzcsIDIzMywgMTQsIDM3LCAyNDIsIDEyOSwgMjUwLCAzNiwgMiwgNCwgMjUwLCAKLSAgICAzNiwgMjE2LCA0MiwgMjE2LCAxOTYsIDIyMiwgMjUxLCAyNTAsIDM2LCAyLCAxMTMsIDIwMywgMjE4LCA5MSwgMjE2LCA0MiwgCi0gICAgMjE2LCAxOTYsIDIyMiwgMjUxLCA5MiwgMjIyLCAyMjgsIDI0NywgMjU1LCAyMTksIDk1LCA5MiwgMjQ0LCAxNzUsIDI0NywgCi0gICAgMjU1LCAyMTksIDk1LCA5MiwgMjUzLCAyMTYsIDkyLCA0LCAyNTAsIDM1LCA5MiwgMjE4LCAyMzQsIDExMywgMjM1LCA2NSwgCi0gICAgMjE4LCAyMzIsIDIxNSwgMjI2LCAyLCA1OSwgNDgsIDIxNSwgMjI2LCAyLCAyMTQsIDE4MywgMjIyLCA5MiwgMjM2LCAwLCAKLSAgICAyMTUsIDIyNSwgMjE1LCAyMjYsIDIsIDIyMCwgMTM0LCAyNTMsIDIwNywgMjUxLCAxNzQsIDQ0LCAyMTUsIDIyNiwgNzcsIAotICAgIDQzLCAyMTUsIDIyNSwgNDMsIDIxNSwgMjI2LCAyNTIsIDMwLCA2NywgMTMwLCA2NywgMjUyLCAxNDEsIDI1MiwgMzAsIDQ0LCAKLSAgICAyMTUsIDIyNSwgMjUxLCAxNjUsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyNTEsIDE2NSwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIAotICAgIDg1LCAyNTEsIDE2NCwgMzAsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAzMCwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDcxLCAKLSAgICAyNDAsIDIzNiwgODUsIDI0MCwgMjM2LCA0MywgMjExLCAyNDQsIDI0NCwgMTM1LCA0NCwgMjExLCAyNDQsIDI0NCwgMTM1LCAKLSAgICA0MywgNTIsIDIxMSwgMjQ0LCAyNDQsIDEzNSwgNDQsIDUyLCAyMTEsIDI0NCwgMjQ0LCAxMzUsIDIzNSwgMjQ4LCAyMzUsIAotICAgIDIzNCwgMjE2LCAxMTIsIDExNywgMjM1LCAyMzQsIDIzNSwgMjM1LCAyMjksIDEwMiwgMiwgNjcsIDEzMCwgMjQ2LCAxMTIsIAotICAgIDIzMCwgODcsIDQyLCAyLCAyNDksIDE4MSwgMjI2LCAxMjcsIDIzNSwgMjQ2LCAyNTMsIDIzNywgMjE5LCAyMTksIDIyNCwgCi0gICAgMTgwLCAyNDUsIDk4LCA1LCAyMiwgMjE5LCA5NywgMjI2LCA3LCAyNDUsIDk4LCA1LCAyMiwgMjE5LCA5NywgMjI2LCA4LCAyLCAKLSAgICAyMTYsIDg5LCA0OCwgMjQwLCAxMDQsIDIxNiwgNDIsIDIyLCAyMTksIDk3LCAyMjYsIDcsIDI0MiwgMTgzLCAyMTgsIDE1NSwgCi0gICAgMjE2LCAxODUsIDI0NiwgMTA1LCAyMTUsIDIyNiwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDI0NiwgMTA1LCAyMTUsIDIyNiwgCi0gICAgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDg1LCAyNDcsIDI0OSwgMiwgMTI0LCA3NCwgODUsIDIzMiwgMTA0LCA3MSwgMjUwLCAKLSAgICAzNiwgMiwgMTI0LCA3NCwgODUsIDI1MCwgMzYsIDIsIDEyNCwgNzQsIDI0NSwgODUsIDcxLCAyMTgsIDIzNCwgMjQ1LCA4NSwgCi0gICAgODUsIDIxOCwgMjM0LCAyNDUsIDg1LCA3MSwgMjQ3LCAyNDgsIDI0NSwgODUsIDg1LCAyNDcsIDI0OCwgMjQ1LCA4NSwgNzEsIAotICAgIDI1MCwgMzUsIDI0NSwgODUsIDg1LCAyNTAsIDM1LCAyMjIsIDEzMiwgMjIzLCA1MCwgMjE5LCA0NywgMjI2LCAxNjcsIDIxOSwgCi0gICAgNDcsIDIsIDIyNiwgMTIzLCAyMjMsIDUwLCAyMTksIDQ3LCAyLCAyMDMsIDkxLCAyNTEsIDI0OSwgMjE5LCA0NiwgMjUxLCAKLSAgICAyNDksIDIyMywgNTAsIDIxOSwgNDYsIDUyLCAyMjUsIDIyLCAyMTUsIDIxMSwgMjI1LCAyMiwgMjMzLCA0MiwgMjQ5LCA5MSwgCi0gICAgMjU0LCAxMTAsIDEyNywgMjIyLCAyNDcsIDI0OSwgOTEsIDI1NCwgMTEwLCAxMjcsIDIxNiwgNzgsIDIzMCwgMTc5LCAyMzAsIAotICAgIDI0LCAzNywgNTksIDIyNiwgMTY3LCAyMzAsIDI0LCAzNywgOTYsIDIyNiwgMTY3LCAyMzAsIDI0LCAzNywgMzAsIDIyNiwgCi0gICAgMTY3LCAyMzAsIDI0LCAyMTQsIDE3NiwgMjI2LCAxNjgsIDIsIDI0NywgMTIwLCAyMzAsIDI0LCAyMTQsIDE3NiwgMjI2LCAKLSAgICAxNjgsIDIsIDIyNSwgMjIsIDIzMCwgMjQsIDQyLCAyMzUsIDE5OSwgMjI2LCAxNjcsIDIzMCwgMjQsIDQyLCAyMTQsIDE3NiwgCi0gICAgMjI2LCAxNjcsIDExMywgMjMyLCAxNDYsIDIyLCAyMjYsIDE2NywgMTEzLCAyMzIsIDE0NiwgMTc3LCAyMjYsIDE2NywgMjMwLCAKLSAgICAyNCwgMzAsIDIyNiwgMTY3LCAyMzAsIDE1NCwgMTEzLCAyMTgsIDQzLCAyMTgsIDQxLCAyLCAyMzUsIDIxMSwgMjI0LCAyNCwgCi0gICAgMjM1LCAyMTIsIDIyNiwgMTY3LCAyNDQsIDk5LCAyMjUsIDI1NSwgMjM1LCAyMTEsIDIzNSwgMjEyLCAyLCA1MiwgOTEsIAotICAgIDIzNSwgMjEyLCAyNTMsIDE3MywgMiwgMjE5LCA5NSwgMjUwLCAzMiwgMjQzLCAyMjYsIDI1NCwgODgsIDIzNSwgMjA5LCAKLSAgICAyMzIsIDIxNCwgMjM1LCAyMTAsIDIsIDIyMywgMTE1LCAyMjUsIDIzNywgMjU0LCAyLCAyMjUsIDEsIDIzMiwgMjE0LCAyMzUsIAotICAgIDIxMCwgMiwgMjIwLCAxNTIsIDIyNSwgMjM3LCAyNTQsIDIsIDIyNSwgMSwgMjMyLCAyMTQsIDIzNSwgMjEwLCAyMjgsIDUyLCAKLSAgICAyMzUsIDI1MCwgMjE2LCAxOTYsIDIyNSwgMSwgMjM1LCAyMTIsIDI1NCwgMiwgMTE1LCAyMjUsIDExLCAyMjYsIDE2NywgCi0gICAgMjI0LCAxOCwgMjM1LCAyMTIsIDIyNiwgMTY3LCAyMzUsIDIxMiwgMiwgMTQwLCA4MCwgMiwgMTAzLCAyMzUsIDIxMiwgMiwgCi0gICAgMzAsIDUwLCAyMzUsIDIxMiwgMiwgMjM1LCAxOTgsIDIzNSwgMjEyLCAyLCAyMTQsIDE3NSwgMjM1LCAyMTIsIDIsIDIyNiwgCi0gICAgMTIzLCAyMzUsIDIxMiwgMiwgMjE0LCAxODMsIDIzNSwgNjYsIDIzMywgODUsIDQzLCAyMTUsIDIyNiwgMjI2LCAxNjcsIAotICAgIDIxMCwgMTYwLCAxODcsIDIyMSwgMjAxLCAyNDksIDIwOSwgMjEwLCAxNjAsIDE4NywgMjIxLCAyMDEsIDIyNSwgNTYsIDIxMCwgCi0gICAgMTYwLCAxODcsIDIyMSwgMjAxLCAyMjQsIDE3NiwgOTYsIDUsIDIsIDQsIDI1MCwgMzYsIDQ4LCA5NiwgNSwgMiwgMjUwLCAKLSAgICAzMSwgMjU1LCAxNSwgNDgsIDk2LCA1LCAyLCAyMTYsIDg5LCA0OCwgOTYsIDUsIDIsIDU5LCA1MSwgOTYsIDUsIDIsIDIxNiwgCi0gICAgODksIDUxLCA5NiwgNSwgMiwgMjE4LCA2NSwgMTA1LCA5NiwgNSwgMiwgODUsIDIxNSwgMjI1LCAyMzAsIDE4MiwgNSwgMiwgCi0gICAgMjQ5LCAyMjAsIDQ4LCAyMzAsIDE4MiwgNSwgMiwgNTksIDUxLCAyMzAsIDE4MiwgNSwgMiwgMjQ0LCAxNzUsIDI0NywgMTE4LCAKLSAgICAyMzAsIDE4MiwgNSwgMiwgMjIyLCAyMjgsIDI0NywgMTE4LCA5NiwgNSwgMjM2LCAwLCA0MywgMTYzLCAyNTAsIDM1LCA5NiwgCi0gICAgNSwgMjM2LCAwLCA0NCwgMTYzLCAyNTAsIDM1LCAyMTMsIDI1NCwgMTc3LCAyNDksIDEzMSwgMjI0LCAxODAsIDIzMCwgODQsIAotICAgIDUsIDIsIDU5LCA0OCwgMjMwLCA4NCwgNSwgMiwgMjE0LCAxODMsIDIyMCwgMTQ5LCAyMjQsIDE4MSwgMiwgMjUxLCAxNzUsIAotICAgIDI0OSwgMjU1LCAyMTksIDc3LCAyMjQsIDE4MCwgMjMwLCA4NCwgNSwgMjM2LCAwLCA0MywgMTYzLCAyNTAsIDM1LCAyMzAsIAotICAgIDg0LCA1LCAyMzYsIDAsIDQ0LCAxNjMsIDI1MCwgMzUsIDM3LCAyMzAsIDg0LCA1LCAyLCAyNTAsIDMxLCAyNTUsIDE0LCAKLSAgICAyMzAsIDg0LCA1LCAyMzYsIDAsIDUyLCAyNTAsIDM1LCAzNywgMjQ3LCAxNjksIDUwLCA5NiwgNSwgMjM2LCAwLCAyMTUsIAotICAgIDIyNSwgMjMwLCAxODIsIDUsIDIzNiwgMCwgMjE1LCAyMjUsIDIzMCwgODQsIDUsIDIzNiwgMCwgMjE1LCAyMjUsIDIzNSwgCi0gICAgMjA2LCAyMjQsIDE4MCwgMjIyLCAyNDIsIDIzNSwgMjA2LCAyMjQsIDE4MCwgMjEwLCAxNjAsIDE4NywgMjIzLCA5MCwgMjQ5LCAKLSAgICAyMDksIDI1NCwgMTM0LCAxNzcsIDI0OSwgMTY1LCAyMzUsIDE5OSwgMiwgMjQ3LCAxMjAsIDIxNCwgMTc2LCAyLCAyMzAsIAotICAgIDE4MiwgNTAsIDIxNCwgMTc2LCAyLCAyMjYsIDEyMywgMjM1LCAxOTksIDIsIDIyNiwgMTIzLCAyMzUsIDE5OSwgMiwgMjMyLCAKLSAgICAxNDYsIDI1NCwgMTE4LCAyMTQsIDE3NiwgMiwgMjMyLCAxNDYsIDIyNiwgMTU4LCAyMTQsIDE3NiwgNzcsIDIzNSwgMTk4LCAKLSAgICAyMzUsIDE5OSwgNzcsIDIxNCwgMTc1LCAyMTQsIDE3NiwgNzcsIDI1MiwgMTQxLCA3NywgMjM1LCAxOTgsIDIzNSwgMTk5LCAKLSAgICA3NywgMjUyLCAxNDEsIDc3LCAyMTQsIDE3NSwgMjE0LCAxNzYsIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyLCAyMTQsIDE3NSwgCi0gICAgMjM1LCAxOTksIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyLCAyMzUsIDE5OCwgMjUwLCAwLCAyMTQsIDE3NiwgMiwgMjIwLCAKLSAgICAxMzMsIDI1MCwgMCwgMjM1LCAxOTksIDIsIDIyMCwgMTMzLCA1MiwgNDIsIDIzNSwgMTk4LCA1MiwgNDIsIDIxNCwgMTc1LCAKLSAgICAyNTAsIDAsIDIxNCwgMTc2LCAyLCAyMjAsIDEzNCwgMjIsIDIxOSwgNzcsIDIyNCwgMTgwLCAyMzIsIDE0NiwgMjIsIDIsIAotICAgIDU5LCA0OCwgMjMyLCAxNDYsIDE3NywgMiwgNTksIDQ4LCA1MiwgMjMyLCAxNDYsIDI1NCwgMTE4LCA1MiwgMjMyLCAxNDYsIAotICAgIDIyNiwgMTU4LCAxMTMsIDIzNSwgMjAwLCAyMzIsIDE0NiwgMjU0LCAxMTgsIDExMywgMjM1LCAyMDAsIDIzMiwgMTQ2LCAKLSAgICAyMjYsIDE1OCwgMjE5LCA4NSwgMjMzLCA4NSwgMjI2LCAxNTgsIDIxOSwgODUsIDIzMywgODUsIDI1NCwgMTE4LCAyMzIsIAotICAgIDE0NiwgMTc3LCAyMjYsIDEyMSwgMjMyLCAxNDYsIDI1NCwgMTE4LCAyMzIsIDE0NiwgMjIsIDIsIDIzMCwgMjI0LCAyMTgsIAotICAgIDEzOSwgMjMyLCAxNDYsIDE3NywgMiwgMjMwLCAyMjQsIDIxOCwgMTM5LCAyMzIsIDE0NiwgMjIsIDIsIDIwMywgMjQ4LCAKLSAgICAxNTYsIDIzMiwgMTQ2LCAxNzcsIDIsIDIwMywgMjQ4LCAxNTYsIDIzMiwgMTQ2LCAyMiwgMiwgNTIsIDIyNiwgMTIzLCAyMzIsIAotICAgIDE0NiwgMjIsIDIsIDIxNCwgMTgzLCAyMzIsIDE0NiwgMjIsIDIsIDUyLCAyMTQsIDE4MywgNCwgMjEzLCAyNTEsIDIsIDIxNCwgCi0gICAgMTgzLCAyMzIsIDE0NiwgMTc3LCAyLCA1MiwgMjI2LCAxMjMsIDIzMiwgMTQ2LCAxNzcsIDIsIDUyLCAyMTQsIDE4MywgMjEwLCAKLSAgICAxNjAsIDE4NywgMjQ3LCAxMjksIDI1NCwgNzksIDIxMCwgMTYwLCAxODcsIDIyMywgMTQ4LCAyNTQsIDc5LCAyNDUsIDk4LCAKLSAgICA1LCAyLCA1OSwgNTEsIDI0MCwgMTA0LCAyLCA1OSwgNDgsIDIxNSwgMjExLCAyMDMsIDI1MiwgMTQxLCAyLCA1MiwgNjcsIAotICAgIDkxLCAyMTUsIDIxMSwgMjAzLCAyNTIsIDE0MSwgMiwgMjE1LCAyMTEsIDY3LCA5MSwgMjE2LCA4OSwgMjI2LCAxNjgsIDIsIAotICAgIDU5LCA0OCwgMjE2LCA4OSwgMjI2LCAxNjgsIDIsIDIyMiwgMjI4LCAyNDcsIDExOCwgMjE5LCAxNjIsIDIzMCwgMTgyLCAKLSAgICAyMTksIDE2MSwgMjQ5LCAxOTksIDIsIDU5LCA0OCwgMjQ1LCA5OCwgMiwgMjUzLCAyMTYsIDI1NCwgMTQ4LCAxMjgsIDIxNiwgCi0gICAgNDIsIDIsIDI1MCwgMzEsIDI1NSwgMTQsIDI1NCwgNDgsIDEyOCwgMTc3LCAxMjgsIDExMSwgMjQ1LCA5OCwgNSwgNzcsIDk2LCAKLSAgICA1MCwgOTYsIDUsIDc3LCAyNDUsIDk4LCA1MCwgMjQ1LCA5OCwgNSwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCA1MiwgMjQ5LCAKLSAgICAyMjcsIDI0NSwgOTksIDExMywgMjQ5LCAxOTQsIDI0NSwgOTgsIDIxOSwgMTc2LCAxMzQsIDI0OSwgMTk0LCAyNDUsIDk4LCAKLSAgICAyMTksIDE3NiwgMjQ1LCA5OCwgNSwgMiwgMTEzLCAxNzAsIDc3LCAyMiwgMTEzLCAxNzAsIDUxLCAyNDUsIDk0LCAyLCAyNDQsIAotICAgIDExLCAxNzAsIDQ4LCAyMzMsIDE1LCAyLCAyNTAsIDM2LCAyMzUsIDIxNSwgMjQyLCAxMzAsIDIsIDI1MCwgMzYsIDIzNSwgCi0gICAgMjE1LCAyMzMsIDE1LCAyLCAyMjQsIDEzLCAxNjQsIDQ4LCAyNDIsIDEzMCwgMiwgMjI0LCAxMywgMTY0LCA0OCwgMjMzLCAKLSAgICAxNSwgMTc3LCAyMTksIDk3LCAxMjgsIDExMSwgMjQyLCAxMzAsIDE3NywgMjE5LCA5NywgMTI4LCAxMTEsIDIzMywgMTUsIAotICAgIDE3NywgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAyLCA1OSwgMjM1LCAyMTUsIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgCi0gICAgMjE2LCA0MiwgMiwgNTksIDIzNSwgMjE1LCAyMzMsIDE1LCAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDQ4LCAKLSAgICAyNDIsIDEzMCwgMTc3LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDIsIDU5LCA0OCwgMjMzLCAxNSwgMTc3LCAyMTksIDk3LCAKLSAgICAxMjgsIDIxNiwgNDIsIDIsIDU5LCA3NywgMjIyLCAyNTEsIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgCi0gICAgMiwgNTksIDc3LCAyMzMsIDQ2LCAyMzMsIDE1LCAxNzcsIDI1NCwgNDksIDI0MiwgMTMwLCAxNzcsIDI1NCwgNDksIDIzMywgCi0gICAgMTUsIDIyLCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIDI0MiwgMTMwLCAyMiwgMjE5LCAxNTMsIDIyOCwgNTIsIAotICAgIDEyOCwgMTExLCAyMzMsIDE1LCAyMiwgMjI4LCA1MiwgMjU0LCA0OSwgMjQyLCAxMzAsIDIyLCAyMjgsIDUyLCAyNTQsIDQ5LCAKLSAgICAyMzMsIDE1LCA3NywgMjQ2LCAxMTEsIDEyOCwgNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgNzcsIDI0NiwgMTExLCAxMjgsIAotICAgIDc3LCAyMzMsIDE0LCAyMzMsIDE1LCA3NywgMjE5LCAxNjIsIDE3NywgMjQ1LCA5OSwgMjQyLCAxMzAsIDc3LCAyMTksIDE2MiwgCi0gICAgMTc3LCAyNDUsIDk5LCAyMzMsIDE1LCA3NywgMjE5LCAxNjIsIDc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDc3LCAyMTksIAotICAgIDE2MiwgNzcsIDIzMywgMTQsIDIzMywgMTUsIDc3LCAyNDIsIDEzMCwgNzcsIDI0NiwgMTExLCAyNDUsIDk5LCAyNDIsIDEzMCwgCi0gICAgNzcsIDIzMywgMTUsIDc3LCAyNDYsIDExMSwgMjQ1LCA5OSwgMjMzLCAxNSwgNzcsIDIxOSwgOTcsIDEyOCwgNzcsIDI0MiwgCi0gICAgMTMwLCA3NywgMjE5LCA5NywgMjQ1LCA5OSwgMjQyLCAxMzAsIDc3LCAyMTksIDk3LCAxMjgsIDc3LCAyMzMsIDE1LCA3NywgCi0gICAgMjE5LCA5NywgMjQ1LCA5OSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTQsIDIxOSwgOTcsIDEyOCwgMjE2LCAKLSAgICA0MiwgMTc3LCAyNDIsIDEyOSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTUsIDIsIDU5LCAyMzUsIDIxNSwgCi0gICAgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTMwLCAyLCA1OSwgMjM1LCAyMTUsIDI0NiwgMTExLCAxMjgsIAotICAgIDIxNiwgNDIsIDE3NywgMjMzLCAxNCwgMjQ2LCAxMTEsIDEyOCwgMjE2LCA0MiwgMTc3LCAyNDIsIDEyOSwgMjQ2LCAxMTEsIAotICAgIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAyNDYsIDExMSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAKLSAgICAxNzcsIDI0MiwgMTI5LCAyMTksIDE2MiwgMTc3LCAyMzMsIDE0LCAyMTksIDE2MiwgMTc3LCAyNDIsIDEyOSwgMjE5LCAxNjIsIAotICAgIDc3LCAyMzMsIDE1LCA3NywgMjQ1LCA5OCwgNTAsIDIxOSwgMTYyLCA3NywgMjQyLCAxMzAsIDc3LCAyNDUsIDk4LCA1MCwgCi0gICAgNTIsIDIyOSwgOTEsIDIzMywgMTQsIDUyLCAyMjksIDkxLCAyNDIsIDEyOSwgNTIsIDIyOSwgOTEsIDIzMywgMTUsIDIsIAotICAgIDIxNCwgMTgzLCAyNDIsIDEzMCwgMjI2LCAxMjEsIDIzMywgMTQsIDI0MiwgMTMwLCAyNTIsIDMwLCAyMzMsIDE0LCAyMzMsIAotICAgIDE1LCAyNTAsIDAsIDI1MSwgNzgsIDI0OSwgOTIsIDI0MiwgMTMwLCAyNTAsIDAsIDI1MSwgNzgsIDI0OSwgOTIsIDIzMywgCi0gICAgMTUsIDI1MCwgMCwgMjUxLCA3OCwgMjQ5LCA5MywgNzcsIDIxOSwgOTcsIDI0NSwgOTksIDI0MiwgMTMwLCAyNTAsIDAsIAotICAgIDI1MSwgNzgsIDI0OSwgOTMsIDc3LCAyMTksIDk3LCAyNDUsIDk5LCAyMTksIDc4LCAyMTYsIDIwMCwgMjMzLCA4MywgMjE2LCAKLSAgICAyMDAsIDIxOSwgNzgsIDIxNiwgMjAxLCAxNzcsIDEyOCwgMTExLCAyMzMsIDgzLCAyMTYsIDIwMSwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjQ1LCA5OCwgNSwgMiwgMjUxLCAxMDgsIDQ4LCAyMjQsIDIwMywgNzcsIDIxOSwgMTUzLCAyNDUsIDk4LCA1MCwgMjE4LCAKLSAgICA1NiwgNzcsIDIxOSwgMTUzLCAyNDUsIDk4LCA1MCwgMjI0LCAyMDMsIDc3LCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIAotICAgIDIxOCwgNTYsIDc3LCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIDIyNCwgMjAzLCA3NywgMjQ1LCA5OCwgNTAsIDIxOCwgCi0gICAgNTYsIDc3LCAyNDUsIDk4LCA1MCwgMjI0LCAyMDMsIDc3LCAyMjgsIDUyLCAxMjgsIDExMSwgMjE4LCA1NiwgNzcsIDIyOCwgCi0gICAgNTIsIDEyOCwgMTExLCAyMjQsIDIwMywgNzcsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE4LCA1NiwgNzcsIDI1NCwgMTQ4LCAKLSAgICAxMjgsIDExMSwgMjI0LCAyMDMsIDc3LCAyMjgsIDUyLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxOCwgNTYsIDc3LCAyMjgsIAotICAgIDUyLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDUyLCAyMjQsIDIwMiwgNTIsIDIxOCwgNTUsIDIxOCwgNjQsIDIsIDI0NywgMTIwLCAKLSAgICAyMTgsIDIyLCAyLCAyNDcsIDEyMCwgMjE4LCA2NCwgMiwgOTYsIDUsIDUxLCAyMTgsIDIyLCAyLCA5NiwgNSwgNTEsIDIxOCwgCi0gICAgNjQsIDIsIDIzMCwgODQsIDUsIDUxLCAyMTgsIDIyLCAyLCAyMzAsIDg0LCA1LCA1MSwgMjE4LCA2NCwgNjQsIDE3NywgMTI4LCAKLSAgICAyMTYsIDQyLCAyLCA1OSwgNDgsIDIxOCwgMjIsIDY0LCAxNzcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDQ4LCAyMTgsIDY0LCAKLSAgICA2NCwgNzcsIDI0NSwgOTgsIDUwLCAyMTgsIDIyLCA2NCwgNzcsIDI0NSwgOTgsIDUwLCAyMTgsIDY0LCA2NCwgNzcsIDIxNiwgCi0gICAgODksIDIyNiwgMTY3LCAyMTgsIDIyLCA2NCwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCAyMTgsIDY0LCA2NCwgNzcsIDI1NCwgCi0gICAgMTQ4LCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDc3LCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxOCwgNjQsIDY0LCA3NywgMjI4LCAKLSAgICA1MiwgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCA3NywgMjI4LCA1MiwgMTI4LCAxMTEsIDQyLCA0MywgMjA0LCA5MywgMjI2LCAKLSAgICAxNjcsIDQyLCA0NCwgMjA0LCA5MywgMjI2LCAxNjcsIDI1MCwgMCwgMjE4LCA2MywgMjUwLCAwLCAyMTgsIDIxLCAyNTAsIDAsIAotICAgIDIxOCwgNjQsIDE3NywgMTI4LCAxMTEsIDI1MCwgMCwgMjE4LCAyMiwgMTc3LCAxMjgsIDExMSwgMjE4LCA2NCwgNzcsIDIxOCwgCi0gICAgMjEsIDIxOCwgMjIsIDc3LCAyMTgsIDYzLCAyMTgsIDY0LCA3NywgMjE4LCA2MywgMjE4LCAyMiwgNzcsIDIxOCwgMjEsIAotICAgIDIxOCwgMjIsIDI1MiwgMzAsIDIxOCwgNjMsIDIxOCwgMjIsIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyNTEsIDc4LCAyNDgsIAotICAgIDE1NywgMiwgMjE4LCA2MywgMjQ1LCAxNzAsIDY0LCAyMjYsIDE3MCwgMjQ2LCAxMDMsIDIyNSwgNDgsIDIsIDIxNywgMTIsIAotICAgIDIxNiwgMTMsIDIxNSwgMjQwLCAyMzUsIDE5OCwgMjQ0LCAyMSwgMjI4LCA2NSwgMjE5LCAyNTEsIDQzLCAyMTcsIDg3LCAKLSAgICAyMTksIDI1MSwgMTI0LCAyMTcsIDg3LCAyMTksIDI1MSwgMTIwLCAyMTcsIDg3LCAyMjUsIDE3MiwgMiwgMjIyLCA5MSwgNjcsIAotICAgIDI1MiwgMTQxLCAyMTUsIDIxMSwgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDEsIDQzLCAyMTUsIDkzLCA2NywgMjUyLCAKLSAgICAxNDEsIDUyLCA0MywgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0MSwgNTIsIDQzLCAyMTUsIDkzLCAxOTksIDI0OCwgMTU3LCAKLSAgICAyNDMsIDI0MywgNDMsIDIzMSwgNjMsIDY0LCA1MiwgMjEzLCAyMzksIDIxOSwgMjUxLCAxMjQsIDIxNywgODgsIDIsIDIyNiwgCi0gICAgMTIzLCAyMTksIDI1MSwgMTIwLCAyMTcsIDg4LCAyLCAyMTQsIDE4MywgMjE5LCAyNTEsIDEyMCwgMjE3LCA4OCwgNzcsIAotICAgIDIxOSwgMjUxLCAxMjQsIDIxNywgODcsIDUyLCAxMjQsIDIxNywgODcsIDUyLCAxMjAsIDIxNywgODcsIDUyLCAyMTgsIDEwMywgCi0gICAgMjI4LCA1MiwgNTAsIDIyMywgNDksIDUyLCAyMTgsIDEwMywgMjI4LCA1MiwgNTAsIDI0NywgMTM4LCAyMjgsIDUyLCAyNDcsIAotICAgIDE3NSwgMiwgMjIzLCA0OSwgMjI5LCAxMDEsIDIxOSwgOTUsIDY3LCAyMzIsIDIxNCwgMiwgMjUwLCAzNiwgNDgsIDY3LCAKLSAgICAyMzIsIDIxNCwgMiwgMjUwLCAzNiwgNTEsIDEyNCwgMjE3LCA4OCwgMiwgMjUwLCAzNiwgNTEsIDIyNiwgOCwgMiwgMjAzLCAKLSAgICA5MSwgMjI2LCA4LCAyLCAyMTYsIDg5LCAyMjYsIDE2NywgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgMjUxLCAyNDQsIDIyMywgCi0gICAgOTEsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIDIsIDIwMywgOTEsIDIxNSwgMjExLCAyNDksIDIyNywgMjI2LCAxNjcsIAotICAgIDIxNSwgMjExLCAyMjksIDkxLCAyMzMsIDE0LCAyMTUsIDIxMSwgMjI5LCA5MSwgMjQyLCAxMjksIDI0NiwgMTExLCAyMTksIAotICAgIDk3LCAyMzMsIDE1LCAxNzcsIDEyOCwgMTExLCAyNDYsIDExMSwgMjE5LCA5NywgMjQyLCAxMzAsIDE3NywgMTI4LCAxMTEsIAotICAgIDIxNSwgMjExLCAyMTksIDQ3LCAyNTEsIDI0NCwgMjIzLCA5MSwgMjMzLCA4NSwgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgCi0gICAgMjI2LCAxNjcsIDUyLCAyMTksIDQ3LCAyMjYsIDE2NywgNzEsIDY3LCAxMzAsIDIzMCwgMjQsIDcxLCA2NywgMTMwLCAyMjgsIAotICAgIDU2LCAyNDUsIDIyMCwgNzEsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDcxLCA3NCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDcxLCA3NCwgCi0gICAgMjE5LCAyOCwgMjEyLCA5LCA3MSwgNzQsIDQzLCA0NCwgNzEsIDc0LCAxNDAsIDg1LCA3NCwgMjE0LCAxNTMsIDg1LCA3NCwgCi0gICAgMjQ2LCAxMDQsIDg1LCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDg1LCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA4NSwgNzQsIAotICAgIDIxOSwgMjgsIDI0NSwgMjIwLCA4NSwgNzQsIDIxOSwgMjgsIDIxMiwgOSwgODUsIDc0LCA0MywgNDQsIDg1LCA3NCwgMTIwLCAKLSAgICAxMjQsIDg1LCA3NCwgOTcsIDgwLCAyLCAyMTYsIDc3LCAyNDYsIDEwMywgOTcsIDgwLCAyLCAyMTYsIDc3LCAyMTQsIDE1MiwgCi0gICAgMTQwLCA4MCwgMiwgMjE2LCA3NywgMjQ2LCAxMDMsIDE0MCwgODAsIDIsIDIxNiwgNzcsIDIxNCwgMTUyLCA0MiwgMiwgMjE2LCAKLSAgICAxNCwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDI1MSwgMTc1LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyNDcsIDI1NSwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIzMiwgMTA4LCA0MywgMjQ3LCAyNTUsIDE2MywgMjUxLCAyMjEsIAotICAgIDI0NywgMjQ5LCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMjQ3LCAyNDksIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCAyNDcsIDI0OSwgCi0gICAgMiwgMjE2LCAxNCwgMTYzLCAyNTEsIDIyMSwgMjQ3LCAyNDksIDIsIDI1MSwgMTc1LCAxNjMsIDI1MSwgMjIxLCAyNDYsIAotICAgIDExOCwgMjE4LCAyMzQsIDg1LCAyMzMsIDg1LCAyMTgsIDIzNCwgNzEsIDIzMywgODUsIDIxOCwgMjM0LCA4NSwgMjEzLCAKLSAgICAxODcsIDQsIDIxOCwgMjM0LCA3MSwgMjEzLCAxODcsIDQsIDIxOCwgMjM0LCA4NSwgMjI1LCAxOTAsIDcxLCAyMjUsIDE5MCwgCi0gICAgNzEsIDI0MSwgMTkzLCA4NSwgMjQxLCAxOTMsIDIwMywgODUsIDI0MSwgMTkzLCA4NSwgMjMzLCA4NSwgMjUwLCAzNSwgODUsIAotICAgIDIzMSwgODIsIDI0NywgMjQ4LCA3MSwgMjMxLCA4MiwgMjQ3LCAyNDgsIDg1LCAyMzEsIDgyLCAyMzIsIDEwNCwgNzEsIDIzMSwgCi0gICAgODIsIDIzMiwgMTA0LCA4NSwgNCwgMjQ3LCAyNDgsIDg1LCA0LCAyMzIsIDEwNCwgNzEsIDQsIDIzMiwgMTA0LCA4NSwgMjAzLCAKLSAgICAyNDUsIDE2NCwgNzEsIDIwMywgMjQ1LCAxNjQsIDg1LCA2NywgMjQ1LCAxNjQsIDcxLCA2NywgMjQ1LCAxNjQsIDQzLCA4MCwgCi0gICAgMiwgNCwgMjUwLCAzNSwgMTM0LCAxNDAsIDI1MywgMjQ3LCA0MywgODAsIDIsIDM3LCAyMjUsIDIyLCAxOTksIDE0MCwgMjE4LCAKLSAgICAyMzAsIDc0LCAxNDAsIDIxNSwgNTgsIDgwLCAyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDUyLCA2NywgOTEsIAotICAgIDE0MCwgMjE1LCA1OCwgODAsIDI0MywgMjQzLCAxMzAsIDE0MCwgMjE1LCA1OCwgMjE1LCAyMTEsIDI0OCwgMTU3LCA3NCwgCi0gICAgMTQwLCA4MCwgMiwgMjQ2LCAxMTgsIDIxOCwgMTM5LCAxNDAsIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIDE0MCwgODAsIAotICAgIDIsIDIxNywgNzgsIDIsIDUyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDIxNywgNzcsIDE0MCwgMjE1LCA1OCwgCi0gICAgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCA5MSwgCi0gICAgMTQwLCA4MCwgMjE2LCAxMzksIDIxMSwgMTc4LCAyMTIsIDM2LCA4MCwgMjI1LCA3LCAyNDcsIDE5NSwgMjMzLCA0NiwgMjQ1LCAKLSAgICA5OCwgNSwgNzcsIDE0MCwgNzQsIDIyMywgNTAsIDIxNiwgODksIDIyNiwgMTY4LCA3NywgMTQwLCA3NCwgMTQwLCA4MCwgNzcsIAotICAgIDIyMywgNTAsIDI1NCwgMTQ4LCAxMjgsIDExMSwgOTcsIDgwLCAyMTYsIDEzOSwgMjQyLCAxMjksIDk3LCA4MCwgMjE2LCAKLSAgICAxMzksIDIxOCwgMjEsIDE0MCwgMjI0LCAyNCwgNzQsIDk3LCAyMjQsIDI0LCA3NCwgMjIzLCA1MCwgMjE2LCA4OSwgMjI2LCAKLSAgICAxNjgsIDc3LCA5NywgNzQsIDk3LCA4MCwgNzcsIDIyMywgNTAsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE2LCA4OSwgMjI2LCAKLSAgICAxNjgsIDc3LCAxNDAsIDc0LCAxNDAsIDgwLCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAxNDAsIDgwLCA3NywgMjIzLCA1MCwgCi0gICAgMjE2LCA4OSwgMjI2LCAxNjcsIDk3LCA4MCwgNzcsIDIyMywgNTAsIDIxNiwgODksIDIyNiwgMTY3LCA3MSwgMjMxLCA4MiwgCi0gICAgMjE4LCAxNTYsIDg1LCA0LCAyMTgsIDE1NiwgNzEsIDQsIDIxOCwgMTU2LCA4NSwgMjIyLCAyNDcsIDIyNSwgMTkwLCA3MSwgCi0gICAgMjIyLCAyNDcsIDIyNSwgMTkwLCAxMTQsIDIzMywgODUsIDI1MCwgMzUsIDExNCwgMjI2LCAxMjQsIDIsIDIyNiwgMTI0LCAKLSAgICAyMzUsIDIxNSwgMTE0LCAyNTAsIDM2LCAyLCAyNTAsIDM2LCAyMzUsIDIxNSwgMTE0LCAyNTAsIDM1LCAxMTQsIDM3LCAyMjEsIAotICAgIDI1NCwgMTQ1LCA2LCAxLCAyNTMsIDE1OSwgMTQ1LCA2LCAxLCAyNTEsIDExNywgMTQ1LCA2LCAxLCAyMTMsIDI1MywgMTQ1LCAKLSAgICA2LCAxLCAyNDIsIDE4NSwgMTQ1LCA2LCAxLCAyNDcsIDE0MCwgMTQ1LCA2LCAxLCAyMTEsIDIxLCAxNDUsIDYsIDEsIDIxMCwgCi0gICAgNjgsIDE0NSwgNiwgMSwgMjQ2LCAzNCwgMTQ1LCA2LCAxLCAyMTAsIDkxLCAxNDUsIDYsIDEsIDIzNSwgMTQ4LCAxNDUsIDYsIAotICAgIDEsIDY1LCAyMzUsIDE0OCwgMTQ1LCA2LCAxLCA3MywgMTQ1LCA2LCAxLCAyNDcsIDE2MCwgMTQ1LCA2LCAxLCAyMzQsIDI0MCwgCi0gICAgMTQ1LCA2LCAxLCAyMzIsIDE4NiwgMTQ1LCA2LCAxLCAyMzAsIDI5LCAxNDUsIDYsIDEsIDIyOSwgMTkxLCAxNDUsIDYsIDEsIAotICAgIDIyNiwgMTg1LCAxNDUsIDYsIDEsIDIyNSwgNCwgMTQ1LCA2LCAxLCAyMjIsIDIyNywgMTQ1LCA2LCAxLCAyMTksIDgzLCAKLSAgICAxNDUsIDYsIDEsIDIxNSwgODEsIDE0NSwgNiwgMSwgMjE0LCAyMDEsIDE0NSwgNiwgMSwgMjQzLCAyNDYsIDE0NSwgNiwgMSwgCi0gICAgMjQxLCAxOTksIDE0NSwgNiwgMSwgMjI2LCAxMzUsIDE0NSwgNiwgMSwgMjI1LCAyMjEsIDE0NSwgNiwgMSwgMjE5LCAyMjgsIAotICAgIDE0NSwgNiwgMSwgMjE1LCAxNjcsIDE0NSwgNiwgMSwgMjUwLCA3NSwgMTQ1LCA2LCAxLCAyMjAsIDEwMiwgMTQ1LCA2LCAxLCAKLSAgICAyMTEsIDI3LCAxNDUsIDYsIDEsIDIxMSwgMjksIDE0NSwgNiwgMSwgMjExLCA1NywgMTQ1LCA2LCAxLCAyMTgsIDI1MywgCi0gICAgMTYyLCAxNDUsIDYsIDEsIDIxMCwgMjEyLCAxNDUsIDYsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDQsIDIxMCwgMTg0LCAKLSAgICAyLCAyMTcsIDc3LCAxNDUsIDYsIDEsIDIxMCwgMjQ0LCAxNDUsIDYsIDEsIDIzNSwgMTg0LCA0LCAyMTAsIDE4MywgMTQ1LCAKLSAgICA2LCAxLCAyNTEsIDI0OSwgMjEwLCAxODMsIDE0NSwgNiwgMSwgMjM1LCAxODQsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMTQ1LCAKLSAgICA2LCAxLCAyNDQsIDgyLCAxNDUsIDYsIDEsIDIzNSwgMTQ2LCAxNDUsIDYsIDEsIDIxOSwgMjI3LCAxNDUsIDYsIDEsIDIxNSwgCi0gICAgMjAyLCA2MSwgMTQ1LCA2LCAxLCAyMzMsIDc1LCAyMzAsIDI5LCAxNDUsIDQsIDEsIDI1MywgMTU5LCAxNDUsIDQsIDEsIAotICAgIDI1MSwgMTE3LCAxNDUsIDQsIDEsIDIxMywgMjUzLCAxNDUsIDQsIDEsIDI0MiwgMTg1LCAxNDUsIDQsIDEsIDI0NywgMTQwLCAKLSAgICAxNDUsIDQsIDEsIDIxMSwgMjEsIDE0NSwgNCwgMSwgMjEwLCA2OCwgMTQ1LCA0LCAxLCAyNDYsIDM0LCAxNDUsIDQsIDEsIAotICAgIDIxMCwgOTEsIDE0NSwgNCwgMSwgMjM1LCAxNDgsIDE0NSwgNCwgMSwgNjUsIDIzNSwgMTQ4LCAxNDUsIDQsIDEsIDczLCAKLSAgICAxNDUsIDQsIDEsIDI0NywgMTYwLCAxNDUsIDQsIDEsIDIzNCwgMjQwLCAxNDUsIDQsIDEsIDIzMiwgMTg2LCAxNDUsIDQsIDEsIAotICAgIDIzMCwgMjksIDE0NSwgNCwgMSwgMjI5LCAxOTEsIDE0NSwgNCwgMSwgMjI2LCAxODUsIDE0NSwgNCwgMSwgMjI1LCA0LCAKLSAgICAxNDUsIDQsIDEsIDIyMiwgMjI3LCAxNDUsIDQsIDEsIDIxOSwgODMsIDE0NSwgNCwgMSwgMjE1LCA4MSwgMTQ1LCA0LCAxLCAKLSAgICAyMTQsIDIwMSwgMTQ1LCA0LCAxLCAyNDMsIDI0NiwgMTQ1LCA0LCAxLCAyNDEsIDE5OSwgMTQ1LCA0LCAxLCAyMjYsIDEzNSwgCi0gICAgMTQ1LCA0LCAxLCAyMjUsIDIyMSwgMTQ1LCA0LCAxLCAyMTksIDIyOCwgMTQ1LCA0LCAxLCAyMTUsIDE2NywgMTQ1LCA0LCAxLCAKLSAgICAyNTAsIDc1LCAxNDUsIDQsIDEsIDIyMCwgMTAyLCAxNDUsIDQsIDEsIDIxMSwgMjcsIDE0NSwgNCwgMSwgMjExLCAyOSwgCi0gICAgMTQ1LCA0LCAxLCAyMTEsIDU3LCAxNDUsIDQsIDEsIDIxOCwgMjUzLCAxNjIsIDE0NSwgNCwgMSwgMjEwLCAyMTIsIDE0NSwgCi0gICAgNCwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNCwgMSwgNCwgMjEwLCAxODQsIDIsIDIxNywgNzcsIDE0NSwgNCwgMSwgMjEwLCAKLSAgICAyNDQsIDE0NSwgNCwgMSwgMjM1LCAxODQsIDQsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDI1MSwgMjQ5LCAyMTAsIDE4MywgCi0gICAgMTQ1LCA0LCAxLCAyMzUsIDE4NCwgMjUxLCAyNDksIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDI0NCwgODIsIDE0NSwgNCwgMSwgCi0gICAgMjM1LCAxNDYsIDE0NSwgNCwgMSwgMjE5LCAyMjcsIDE0NSwgNCwgMSwgMjE1LCAyMDIsIDYxLCAxNDUsIDQsIDEsIDIzMywgCi0gICAgNzUsIDIzMCwgMjksIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCA1MiwgMTMwLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgNTIsIAotICAgIDEzMCwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDIzMCwgMjI0LCAxODIsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCA5MSwgNywgNiwgCi0gICAgMSwgMjIzLCAyMjQsIDIsIDIxNywgNzcsIDcsIDQsIDEsIDExNSwgMiwgOTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNDcsIAotICAgIDI1NSwgOTEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDI0OCwgMzksIDcsIAotICAgIDYsIDEsIDIzNSwgMjQsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI0OCwgMzksIDcsIDYsIDEsIDIxMCwgCi0gICAgMTYwLCAyLCAyNDgsIDM5LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjQ4LCAzOSwgNywgNiwgMSwgMjU0LCAxNDMsIDcsIDYsIAotICAgIDEsIDIzMiwgNTAsIDIsIDEwMywgNywgNiwgMSwgMjE1LCA5NCwgNjEsIDcsIDYsIDEsIDIxNSwgOTQsIDI1NCwgMTQzLCA3LCAKLSAgICA0LCAxLCAyMTQsIDEwNiwgMiwgNDQsIDEwMywgNywgNiwgMSwgMjEyLCA5OSwgMiwgMTAzLCA3LCA0LCAxLCAyMTIsIDk5LCAKLSAgICAyLCAxMDMsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAyNDksIDEwMCwgNywgNiwgMSwgMTYzLCAyNDIsIDYwLCA3LCA0LCAxLCAKLSAgICAxNjMsIDI0MiwgNjAsIDcsIDQsIDEsIDIxNywgNzUsIDIyNSwgMTMzLCA3LCA0LCAxLCAxNjAsIDIsIDIyOCwgNTAsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAyMTcsIDc3LCA3LCA0LCAxLCAxNDQsIDIsIDEyMSwgMjIyLCAyMzQsIDIzNSwgCi0gICAgMjE1LCA3LCAxLCA0LCA2LCAyMTUsIDk0LCA3NSwgNywgMjE4LCA2NSwgNCwgMSwgMjM1LCAxNDQsIDU4LCAxLCA2LCAyMTQsIAotICAgIDEwNSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjE3LCAyNTAsIDIxNywgNzcsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyMTcsIAotICAgIDI1MCwgMjE3LCA3NywgODEsIDYsIDEsIDI1NCwgMTY0LCA4MSwgNCwgMSwgMjU0LCAxNjQsIDgxLCA2LCAxLCAyMTMsIDE3MywgCi0gICAgODEsIDQsIDEsIDIxMywgMTczLCA4MSwgNiwgMSwgMjQzLCAxMDcsIDgxLCA0LCAxLCAyNDMsIDEwNywgODEsIDYsIDEsIAotICAgIDI0OCwgMTkxLCA4MSwgNCwgMSwgMjQ4LCAxOTEsIDgxLCA2LCAxLCAyNDUsIDE5NCwgODEsIDQsIDEsIDI0NSwgMTk0LCA4MSwgCi0gICAgNiwgMSwgMjE5LCAzMywgODEsIDQsIDEsIDIxOSwgMzMsIDgxLCA2LCAxLCAyMTAsIDEwMSwgODEsIDQsIDEsIDIxMCwgMTAxLCAKLSAgICA4MSwgNiwgMSwgMjQxLCAyNDgsIDgxLCA0LCAxLCAyNDEsIDI0OCwgODEsIDYsIDEsIDIxNiwgMTc3LCA4MSwgNCwgMSwgCi0gICAgMjE2LCAxNzcsIDgxLCA2LCAxLCAyNDAsIDExNiwgODEsIDQsIDEsIDI0MCwgMTE2LCA4MSwgNiwgMSwgMjM0LCAyMjcsIDgxLCAKLSAgICA0LCAxLCAyMzQsIDIyNywgODEsIDYsIDEsIDIzMywgNzIsIDgxLCA0LCAxLCAyMzMsIDcyLCA4MSwgNiwgMSwgMjMwLCAyMzAsIAotICAgIDgxLCA0LCAxLCAyMzAsIDIzMCwgODEsIDYsIDEsIDIyOCwgMjMzLCA4MSwgNCwgMSwgMjI4LCAyMzMsIDgxLCA2LCAxLCAKLSAgICAyMzMsIDIzMywgODEsIDQsIDEsIDIzMywgMjMzLCA4MSwgNiwgMSwgNzYsIDgxLCA0LCAxLCA3NiwgODEsIDYsIDEsIDIyNSwgCi0gICAgMTA4LCA4MSwgNCwgMSwgMjI1LCAxMDgsIDgxLCA2LCAxLCAyMjIsIDIxMSwgODEsIDQsIDEsIDIyMiwgMjExLCA4MSwgNiwgCi0gICAgMSwgMjE5LCAxNjUsIDgxLCA0LCAxLCAyMTksIDE2NSwgODEsIDYsIDEsIDIxNywgNDEsIDgxLCA0LCAxLCAyMTcsIDQxLCAKLSAgICA4MSwgNiwgMSwgMjE0LCAyMjksIDgxLCA0LCAxLCAyMTQsIDIyOSwgODEsIDYsIDEsIDI0NCwgMTIxLCA4MSwgNCwgMSwgCi0gICAgMjQ0LCAxMjEsIDgxLCA2LCAxLCAyMzQsIDExMiwgODEsIDQsIDEsIDIzNCwgMTEyLCA4MSwgNiwgMSwgMjI0LCAxNjEsIDgxLCAKLSAgICA0LCAxLCAyMjQsIDE2MSwgODEsIDYsIDEsIDIyNiwgMTc4LCA4MSwgNCwgMSwgMjI2LCAxNzgsIDgxLCA2LCAxLCAyNDcsIAotICAgIDI1MywgMjU0LCAxNzAsIDgxLCA0LCAxLCAyNDcsIDI1MywgMjU0LCAxNzAsIDgxLCA2LCAxLCA1NSwgODEsIDI1NCwgMTk2LCAKLSAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNTQsIDE5NiwgODEsIDYsIDEsIDI0OSwgMTE1LCAyNDUsIDE5NCwgODEsIDQsIDEsIDI0OSwgCi0gICAgMTE1LCAyNDUsIDE5NCwgODEsIDYsIDEsIDI0NywgMjUzLCAyMzQsIDIyNywgODEsIDQsIDEsIDI0NywgMjUzLCAyMzQsIAotICAgIDIyNywgODEsIDYsIDEsIDI0NywgMjUzLCAyMjgsIDIzMywgODEsIDQsIDEsIDI0NywgMjUzLCAyMjgsIDIzMywgODEsIDYsIAotICAgIDEsIDI0OSwgMTE1LCAyMjgsIDIzMywgODEsIDQsIDEsIDI0OSwgMTE1LCAyMjgsIDIzMywgODEsIDYsIDEsIDU1LCA4MSwgCi0gICAgMjI2LCAxNzgsIDgxLCA0LCAxLCA1NSwgODEsIDIyNiwgMTc4LCA4MSwgNiwgMSwgMjIxLCAyNDYsIDgxLCA0LCAxLCAyMjEsIAotICAgIDI0NiwgODEsIDYsIDEsIDI0OSwgMTI4LCAyMjAsIDU1LCA4MSwgNCwgMSwgMjQ5LCAxMjgsIDIyMCwgNTUsIDgxLCA2LCAxLCAKLSAgICA1NSwgODEsIDIyMCwgNTUsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgNTUsIDgxLCA2LCAxLCA1NSwgODEsIDI0NSwgNzUsIAotICAgIDgxLCA0LCAxLCA1NSwgODEsIDI0NSwgNzUsIDgxLCA2LCAxLCAyNTQsIDE4MiwgMjM0LCAxMTcsIDgxLCA0LCAxLCAyNTQsIAotICAgIDE4MiwgMjM0LCAxMTcsIDgxLCA2LCAxLCAyNDcsIDI1MywgMjQxLCA0NSwgODEsIDQsIDEsIDI0NywgMjUzLCAyNDEsIDQ1LCAKLSAgICA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDQ1LCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDQ1LCA4MSwgNiwgMSwgNTUsIDgxLCAKLSAgICAxNjIsIDgxLCA0LCAxLCA1NSwgODEsIDE2MiwgODEsIDYsIDEsIDIzMywgMTQ4LCAxNjIsIDgxLCA0LCAxLCAyMzMsIDE0OCwgCi0gICAgMTYyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDIxNywgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCAyMTcsIDgxLCA2LCAxLCAKLSAgICA1NSwgODEsIDI0MSwgMjUxLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDI1MSwgODEsIDYsIDEsIDU1LCA4MSwgMjQzLCAxMDIsIAotICAgIDgxLCA0LCAxLCA1NSwgODEsIDI0MywgMTAyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDcsIDE2MywgODEsIDQsIDEsIDU1LCA4MSwgCi0gICAgMjQ3LCAxNjMsIDgxLCA2LCAxLCA1NSwgODEsIDIyMCwgMjIsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgMjIsIDgxLCA2LCAxLCAKLSAgICA1NSwgMjI3LCAyMDgsIDIyMCwgMjIsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIyMCwgMjIsIDgxLCA2LCAxLCA1NSwgCi0gICAgMjI3LCAyMDgsIDIyOSwgMjcsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIyOSwgMjcsIDgxLCA2LCAxLCA1NSwgMjI3LCAKLSAgICAyMDgsIDIyNywgMTQ4LCA4MSwgNCwgMSwgNTUsIDIyNywgMjA4LCAyMjcsIDE0OCwgODEsIDYsIDEsIDU1LCAyMjcsIDIwOCwgCi0gICAgMjEyLCAzNywgODEsIDQsIDEsIDU1LCAyMjcsIDIwOCwgMjEyLCAzNywgODEsIDE2LCAyMzQsIDI0NiwgODEsIDE2LCAyMzAsIAotICAgIDIzMSwgMjIyLCAyMTEsIDgxLCAxNiwgMjI1LCAxMDksIDIyMiwgMjExLCA4MSwgMTYsIDIxOCwgMTQ3LCA4MSwgMTYsIDIxNywgCi0gICAgNDIsIDIyMiwgMjExLCA4MSwgMTYsIDIzNCwgMTEzLCAyMjIsIDIxMSwgODEsIDE2LCAyMjAsIDIzLCAyMTksIDE2NSwgODEsIAotICAgIDYsIDEsIDI0OSwgMTE1LCAyMjAsIDU1LCA4MSwgNCwgMSwgMjQ5LCAxMTUsIDIyMCwgNTUsIDgxLCA2LCAxLCAyNDksIDExNSwgCi0gICAgMjQzLCAxMDIsIDgxLCA0LCAxLCAyNDksIDExNSwgMjQzLCAxMDIsIDgxLCAzOCwgMjI4LCAyMzQsIDQ4LCA4MSwgMzgsIAotICAgIDIxOCwgMjQ3LCAyNTMsIDIyNCwgODEsIDM4LCAyMTgsIDI0NywgMjMzLCAyMSwgODEsIDYsIDEsIDI1MSwgMTk5LCAyMzQsIAotICAgIDExNywgODEsIDQsIDEsIDI1MSwgMTk5LCAyMzQsIDExNywgODEsIDU1LCAyMjcsIDIwOCwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA4MSwgNTUsIDIyNywgMjA4LCAyNDcsIDE5NywgMjI0LCAxMywgNzgsIDgxLCA1NSwgMjI3LCAyMDgsIDIzNSwgMjM3LCAyMjQsIAotICAgIDEzLCA3OCwgODEsIDU1LCAyMjcsIDIwOCwgMjEzLCAyNDEsIDI0NywgMTcyLCA4MSwgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIAotICAgIDgxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDgxLCAyMzAsIDEyNCwgMjQ3LCAxNzIsIDk4LCA0LCAxLCAyNTQsIDEyMywgOTgsIAotICAgIDQsIDEsIDI1MiwgMTUyLCA5OCwgNCwgMSwgMjQzLCAxMDYsIDk4LCA0LCAxLCAyNDcsIDEyOCwgOTgsIDQsIDEsIDI0NSwgCi0gICAgMTUwLCA5OCwgNCwgMSwgMjEzLCAxNjAsIDk4LCA0LCAxLCAyMTAsIDg5LCA5OCwgNCwgMSwgMjE3LCA2MCwgOTgsIDQsIDEsIAotICAgIDIzNSwgMjU1LCA5OCwgNCwgMSwgMjM0LCAyMzQsIDk4LCA0LCAxLCAyMzMsIDgxLCA5OCwgNCwgMSwgMjMxLCAxODUsIDk4LCAKLSAgICA0LCAxLCAyMjksIDE5NSwgOTgsIDQsIDEsIDIyNiwgMTk2LCA5OCwgNCwgMSwgMjI2LCAxNywgOTgsIDQsIDEsIDIxMCwgNzgsIAotICAgIDk4LCA0LCAxLCAyMjMsIDE3MSwgOTgsIDQsIDEsIDIyMSwgMjQzLCA5OCwgNCwgMSwgMjE3LCA1MCwgOTgsIDQsIDEsIDIxNCwgCi0gICAgMTkwLCA5OCwgNCwgMSwgMjI1LCAxNDAsIDk4LCA0LCAxLCAyMzQsIDEyMSwgOTgsIDQsIDEsIDI0MiwgMjQxLCA5OCwgNCwgCi0gICAgMSwgMjI0LCA3MywgOTgsIDQsIDEsIDIyMCwgMjAsIDk4LCA0LCAxLCAyNTAsIDk3LCA5OCwgNCwgMSwgMjUxLCA3LCA5OCwgCi0gICAgNCwgMSwgMjM1LCAxMDAsIDk4LCA0LCAxLCAyNTAsIDQwLCA5OCwgNCwgMSwgMjUwLCAxNDMsIDk4LCA0LCAxLCAyMTEsIAotICAgIDE2MywgOTgsIDQsIDEsIDIzNSwgMTExLCA5OCwgNCwgMSwgMjQyLCA0MywgOTgsIDQsIDEsIDI0MSwgMjM4LCA5OCwgNCwgMSwgCi0gICAgMjQxLCAxNzUsIDk4LCA0LCAxLCAyMTIsIDIyLCA5OCwgNCwgMSwgMjQyLCA0LCA5OCwgNCwgMSwgMjQxLCA2NSwgOTgsIDQsIAotICAgIDEsIDIxMCwgMjQ2LCA5OCwgNCwgMSwgMjU0LCAyMzIsIDIxNiwgMTA4LCAxLCAxOTEsIDIxNiwgMTA4LCAxLCAyMTEsIDk5LCAKLSAgICAyMTYsIDEwOCwgMSwgMjExLCA5OCwgMjE2LCAxMDgsIDEsIDIxMSwgODgsIDIxNiwgMTA4LCAxLCAyMTEsIDg2LCAyMTYsIAotICAgIDEwOCwgMSwgMjUyLCAzMiwgMjU1LCAxNiwgMjExLCA4MSwgMjE2LCAxMDgsIDEsIDIxMSwgODEsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTEsIDk2LCAyMTYsIDEwOCwgMSwgMjExLCA5MywgMjE2LCAxMDgsIDEsIDIxMSwgOTUsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDk0LCAyMTYsIDEwOCwgMSwgMjExLCAxMiwgMjE2LCAxMDgsIDEsIDIxMSwgOTAsIDIxNiwgMTA4LCAxLCAyMTEsIDc5LCAKLSAgICAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgNzksIDIxNiwgMTA4LCAxLCAyMTEsIDc2LCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA4NCwgMjE2LCAxMDgsIDEsIDI1MiwgMzIsIDI1NSwgMTYsIDIxMSwgODQsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCAKLSAgICA4NCwgMjE2LCAxMDgsIDEsIDIxMSwgODMsIDIxNiwgMTA4LCAxLCAyMTEsIDEwMywgMjE2LCAxMDgsIDEsIDIxMSwgNzcsIAotICAgIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA3NywgMjE2LCAxMDgsIDEsIDIxMSwgNjYsIDIxNiwgMTA4LCAxLCAyMTUsIAotICAgIDExNSwgMjExLCA2NiwgMjE2LCAxMDgsIDEsIDIxMSwgOCwgMjE2LCAxMDgsIDEsIDIxMSwgNDksIDIxNiwgMTA4LCAxLCAKLSAgICAyNTQsIDIwNywgMjExLCA0OSwgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDQ5LCAyMTYsIDEwOCwgMSwgMjExLCA3NSwgCi0gICAgMjE2LCAxMDgsIDEsIDIxMSwgNzQsIDIxNiwgMTA4LCAxLCAyMTEsIDcxLCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgCi0gICAgODUsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA2OSwgMjE2LCAxMDgsIDEsIDIxMSwgNjcsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTAsIDIxMiwgMjE2LCAxMDgsIDEsIDIxMSwgNjQsIDIxNiwgMTA4LCAxLCAyMTEsIDYzLCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA4NywgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDg3LCAyMTYsIDEwOCwgMSwgMjUzLCAxNjMsIDIxMSwgODcsIDIxNiwgCi0gICAgMTA4LCAxLCAyMTEsIDYyLCAyMTYsIDEwOCwgMSwgMjExLCA2MCwgMjE2LCAxMDgsIDEsIDIxMSwgNjEsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTEsIDU5LCAyMTYsIDEwOCwgMSwgMjExLCA1OCwgMjE2LCAxMDgsIDEsIDIxMSwgOTcsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDU2LCAyMTYsIDEwOCwgMSwgMjExLCA1NCwgMjE2LCAxMDgsIDEsIDIxMSwgNTMsIDIxNiwgMTA4LCAxLCAyMTEsIDUyLCAKLSAgICAyMTYsIDEwOCwgMSwgMjExLCA1MCwgMjE2LCAxMDgsIDEsIDIxNywgMzQsIDIxMSwgNTAsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDQ4LCAyMTYsIDEwOCwgMSwgMjExLCA0NywgMjE2LCAxMDgsIDEsIDIxMCwgMjQ0LCAyMTYsIDEwOCwgNTgsIDEsIDIzMywgCi0gICAgMTI2LCA3OCwgMjE2LCAxMDgsIDIyMCwgMTM4LCA3OCwgMjE2LCAxMDgsIDExNiwgMjM1LCA2MywgMjksIDMsIDIzMiwgMTU1LCAKLSAgICAyOSwgMywgMjMwLCAxNjAsIDI5LCAzLCAyMjIsIDIwOSwgMjksIDMsIDIxOSwgNTcsIDI5LCAzLCAyMjAsIDYsIDI5LCAzLCAKLSAgICAyNTEsIDIwNCwgMjksIDMsIDIxNiwgNDEsIDI5LCAzLCAyNDksIDIzNywgMjksIDMsIDIyOCwgNzIsIDI5LCAzLCAyMjcsIAotICAgIDEzMywgMjksIDMsIDI0MiwgMTgwLCAyMjcsIDAsIDI5LCAzLCAyMTAsIDIyLCAyOSwgMywgMjQ3LCAxNDMsIDI5LCAzLCAKLSAgICAyNDgsIDEwNCwgMjksIDMsIDIzNSwgNjcsIDI5LCAzLCAyMTYsIDE1NSwgMjksIDMsIDI1MCwgODUsIDI5LCAzLCAyMjUsIAotICAgIDEyMCwgMjksIDMsIDIyNSwgMTUsIDI5LCAzLCAyNDIsIDI1NSwgMjksIDMsIDI0MiwgMjUxLCAyOSwgMywgMjQyLCAyNTIsIAotICAgIDI5LCAzLCAyNDIsIDI1MywgMjksIDMsIDIxOCwgMjIzLCAyOSwgMywgMjE4LCAxNzksIDI5LCAzLCAyMTgsIDE5MiwgMjksIAotICAgIDMsIDIxOCwgMjIyLCAyOSwgMywgMjE4LCAxOTYsIDI5LCAzLCAyMTgsIDE5NywgMjksIDMsIDIxOCwgMTg0LCAyOSwgMywgCi0gICAgMjUwLCAyMTMsIDI5LCAzLCAyNTAsIDE5MiwgMjksIDMsIDI1MCwgMTk0LCAyOSwgMywgMjUwLCAyMTIsIDI5LCAzLCAyNTAsIAotICAgIDIxMCwgMjksIDMsIDI1MCwgMjExLCAyOSwgMywgMjUwLCAxOTMsIDI5LCAzLCAyMDksIDI0MywgMjksIDMsIDIwOSwgMjIxLCAKLSAgICAyOSwgMywgMjA5LCAyMzQsIDI5LCAzLCAyMDksIDI0MiwgMjksIDMsIDIwOSwgMjM3LCAyOSwgMywgMjA5LCAyMzgsIDI5LCAKLSAgICAzLCAyMDksIDIyNiwgMjksIDMsIDI1MCwgMjA4LCAyOSwgMywgMjUwLCAxOTUsIDI5LCAzLCAyNTAsIDE5NywgMjksIDMsIAotICAgIDI1MCwgMjA3LCAyOSwgMywgMjUwLCAyMDUsIDI5LCAzLCAyNTAsIDIwNiwgMjksIDMsIDI1MCwgMTk2LCAyOSwgMywgMjIzLCAKLSAgICAyMzYsIDI5LCAzLCAyMjMsIDIyNiwgMjksIDMsIDIyMywgMjMyLCAyOSwgMywgMjIzLCAyMzUsIDI5LCAzLCAyMjMsIDIzMywgCi0gICAgMjksIDMsIDIyMywgMjM0LCAyOSwgMywgMjIzLCAyMzEsIDI5LCAzLCAyMzMsIDE1OSwgMjksIDMsIDIzMywgMTUxLCAyOSwgCi0gICAgMywgMjMzLCAxNTQsIDI5LCAzLCAyMzMsIDE1OCwgMjksIDMsIDIzMywgMTU1LCAyOSwgMywgMjMzLCAxNTYsIDI5LCAzLCAKLSAgICAyMzMsIDE1MiwgMjksIDMsIDIxMSwgMTMwLCAyOSwgMywgMjExLCAxMjAsIDI5LCAzLCAyMTEsIDEyNiwgMjksIDMsIDIxMSwgCi0gICAgMTI5LCAyOSwgMywgMjExLCAxMjcsIDI5LCAzLCAyMTEsIDEyOCwgMjksIDMsIDIxMSwgMTI1LCAyOSwgMywgMjQyLCA3MSwgCi0gICAgMjksIDMsIDI0MiwgNjIsIDI5LCAzLCAyNDIsIDY1LCAyOSwgMywgMjQyLCA3MCwgMjksIDMsIDI0MiwgNjcsIDI5LCAzLCAKLSAgICAyNDIsIDY4LCAyOSwgMywgMjQyLCA2NCwgMzgsIDMzLCAxLCAyNTIsIDc1LCAzOCwgMzMsIDEsIDIxMywgMjU1LCAzOCwgMzMsIAotICAgIDEsIDI0MiwgMjM2LCAzOCwgMzMsIDEsIDI0OCwgOTAsIDM4LCAzMywgMSwgMjEwLCA3NCwgMzgsIDMzLCAxLCAyMTAsIDk0LCAKLSAgICAzOCwgMzMsIDEsIDE3NiwgMzgsIDMzLCAxLCAyNDUsIDE3NCwgMzgsIDMzLCAxLCAyNDUsIDE1OSwgMzgsIDMzLCAxLCAyNDUsIAotICAgIDE1MCwgMzgsIDMzLCAxLCA3NiwgMzgsIDMzLCAxLCAyMjUsIDIyMSwgMzgsIDMzLCAxLCAyNDUsIDkyLCAzOCwgMzMsIDEsIAotICAgIDI0NSwgODIsIDM4LCAzMywgMSwgMjE3LCAyMiwgMzgsIDMzLCAxLCAxNjIsIDM4LCAzMywgMSwgMjE1LCAxNzgsIDM4LCAzMywgCi0gICAgMSwgMjUwLCAxMzEsIDM4LCAzMywgMSwgMjIwLCAxMDIsIDM4LCAzMywgMSwgMjIwLCA2NSwgMzgsIDMzLCAxLCAyNDQsIDgyLCAKLSAgICAzOCwgMzMsIDEsIDI0NSwgODEsIDM4LCAzMywgMSwgNjEsIDM4LCAzMywgMSwgMjM2LCA2MCwgMzgsIDMzLCAxLCAyNDcsIAotICAgIDE2MSwgMzgsIDMzLCAxLCAyMzAsIDE0MCwgMjE0LCAyMDUsIDM4LCAzMywgMSwgMjExLCA1OSwgMzgsIDMzLCAxLCAyMTAsIAotICAgIDIxMiwgMzgsIDMzLCAxLCAyMzUsIDE4MywgNjEsIDM4LCAzMywgMSwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzOCwgMzMsIDEsIAotICAgIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzgsIDMzLCAxLCAyMzUsIDE4MywgMjUxLCAyNDksIDIxMCwgMTgzLCA0NCwgMjU0LCAKLSAgICAxMTAsIDIxOCwgNjAsIDIzMSwgMTU0LCA0NCwgMjU0LCAxMTAsIDI0NiwgMTE4LCAyMTgsIDYwLCAyMzEsIDE1NCwgNDMsIAotICAgIDIxOCwgNjAsIDEyNywgNDQsIDIxOCwgNjAsIDEyNywgNDMsIDI0NiwgMTE4LCAyMTgsIDYwLCAxMjcsIDQ0LCAyNDYsIDExOCwgCi0gICAgMjE4LCA2MCwgMTI3LCAyMjMsIDE1NywgMjM1LCAyMDIsIDIzMSwgMTU0LCAyMjMsIDE1NywgMjQ2LCAxMTgsIDIzNSwgMjAyLCAKLSAgICAyMzEsIDE1NCwgMjQ2LCAxMTgsIDIxNSwgMjQxLCAyMzEsIDE1NCwgNDMsIDIxNSwgMjQxLCAxMjcsIDQ0LCAyMTUsIDI0MSwgCi0gICAgMTI3LCAyMjMsIDE1NywgMjE4LCAyMzQsIDQzLCAyMjMsIDE1NywgMjI2LCAxOTgsIDEyNywgNDQsIDIyMywgMTU3LCAyMjYsIAotICAgIDE5OCwgMTI3LCAyNDUsIDIxMCwgMjQ5LCAxNTgsIDIyNiwgMTMsIDI0NCwgMjIsIDIyNiwgMTMsIDIyMywgNDksIDI0NCwgCi0gICAgMjIsIDIyNiwgMTMsIDI0MCwgMTY1LCAyNDYsIDExOCwgMjI2LCAyNTEsIDI0NiwgMTA0LCAyNTQsIDExOSwgMjE0LCAxNTMsIAotICAgIDI1NCwgMTE5LCAyNDYsIDExOCwgMjIyLCAyNDcsIDI1NCwgMTA5LCA1MiwgMjI2LCAyNDgsIDI0MCwgMTY4LCAyMzUsIDE5MywgCi0gICAgMjM1LCAyMDEsIDIyNiwgNTksIDI1MSwgMTU0LCAyNDAsIDE2OSwgMiwgMjQ4LCAxLCAyMTYsIDg5LCAyLCAyMjIsIDIzNCwgCi0gICAgNDgsIDQzLCAxMjEsIDIyNiwgNSwgMTI3LCA0NCwgMTIxLCAyMjYsIDUsIDEyNywgMjE2LCA4OSwgMiwgNTksIDQ4LCAyMTYsIAotICAgIDg5LCAyLCA1OSwgNTEsIDQzLCA2NywgMjUyLCAxNDEsIDIsIDIyNCwgNywgNDQsIDY3LCAyNTIsIDE0MSwgMiwgMjI0LCA3LCAKLSAgICAyMTYsIDE0LCA0MywgMTYzLCAxMjcsIDIxNiwgMTQsIDQ0LCAxNjMsIDEyNywgMjUxLCAxNzUsIDQzLCAxNjMsIDEyNywgCi0gICAgMjUxLCAxNzUsIDQ0LCAxNjMsIDEyNywgNDMsIDIxOSwgMTg3LCAxMDQsIDEyNywgNDQsIDIxOSwgMTg3LCAxMDQsIDEyNywgCi0gICAgNDMsIDUyLCAyMjYsIDMsIDQ0LCA1MiwgMjI2LCAzLCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIDE0MCwgMTIzLCAKLSAgICA1OSwgMTE3LCAxMTMsIDE3MCwgMjI0LCAxNDAsIDkyLCAyNDQsIDExLCA1OSwgMjI0LCAxNDAsIDI0NCwgODEsIDU5LCA3OCwgCi0gICAgMjIzLCA0OSwgMjI0LCAxMywgNzgsIDY3LCAxODIsIDIyMiwgMjM0LCAyMjUsIDEwLCAyMTEsIDIwOSwgMjIwLCAxMzgsIAotICAgIDIzMCwgMjI0LCAyNDcsIDEyMCwgMjE1LCA5NCwgMjQ5LCAyMTksIDIyMywgMTU3LCAyNDcsIDEyMCwgMjIzLCAxNTcsIDI0OSwgCi0gICAgMjE5LCAyMTUsIDk0LCAyMjAsIDE1MCwgMjQ4LCAyMDYsIDIsIDQzLCAyNDIsIDEwOCwgMjQ4LCAyMDYsIDIsIDQ0LCAyNDIsIAotICAgIDEwOCwgMjE1LCA5NCwgMjQ4LCAyMDUsIDIxNiwgMTQsIDE2MywgMjIxLCAxNzMsIDUwLCAyMTUsIDU5LCAyNDgsIDE1NiwgCi0gICAgMjE2LCAxNDMsIDI0OCwgMTU2LCA5LCAzNCwgMjIzLCA3NiwgOSwgMzQsIDI1MCwgMTAsIDksIDM0LCAyMjEsIDE3NiwgMTEwLCAKLSAgICA5LCAzNCwgMjIxLCAxNzYsIDEwNSwgOSwgMzQsIDIyMSwgMTc2LCAxNTgsIDksIDM0LCAyMjUsIDE2NywgOSwgMzQsIDI1MSwgCi0gICAgMTYzLCA5LCAzNCwgMjE3LCA5MiwgOSwgMzQsIDIzNCwgMzMsIDExMCwgOSwgMzQsIDIzNCwgMzMsIDEwNSwgOSwgMzQsIAotICAgIDI0NywgMTcwLCA5LCAzNCwgMjIxLCAxNzksIDksIDM0LCA0LCAxMTAsIDksIDM0LCA0LCAxMDUsIDksIDM0LCAyMzMsIDk3LCAKLSAgICAxMTAsIDksIDM0LCAyMzMsIDk3LCAxMDUsIDksIDM0LCAyMzMsIDk3LCAxNTgsIDksIDM0LCAyMzMsIDk3LCAxNjEsIDksIAotICAgIDM0LCAyMTksIDY4LCA5LCAzNCwgMjE2LCAxNDUsIDksIDM0LCAyMTksIDY2LCAxMTAsIDksIDM0LCAyMTksIDY2LCAxMDUsIAotICAgIDksIDM0LCAyNDEsIDIyOCwgMTEwLCA5LCAzNCwgMjQxLCAyMjgsIDEwNSwgOSwgMzQsIDI0MiwgMTUsIDksIDM0LCAyMjMsIAotICAgIDE0NywgOSwgMzQsIDI1MCwgODIsIDksIDM0LCAyMTgsIDM3LCA5LCAzNCwgMjMwLCAxMjgsIDksIDM0LCAyNDgsIDg4LCA5LCAKLSAgICAzNCwgMjMwLCAxMjAsIDksIDM0LCAyNTAsIDI1LCA5LCAzNCwgMjEyLCA0MSwgMTEwLCA5LCAzNCwgMjEyLCA0MSwgMTA1LCAKLSAgICA5LCAzNCwgMjQ0LCA5NiwgOSwgMzQsIDIyNSwgMjMyLCAxMTAsIDksIDM0LCAyMjUsIDIzMiwgMTA1LCA5LCAzNCwgMjE5LCAKLSAgICAxNjAsIDE2MywgMjE1LCAyMzYsIDIxNSwgMTg4LCA5LCAzNCwgMjQ5LCAxNDUsIDksIDM0LCAyNDcsIDEzNiwgOSwgMzQsIAotICAgIDIzNSwgMTM3LCA5LCAzNCwgMjUxLCAxOTgsIDY0LCAyNDksIDI1MCwgOSwgMzQsIDI0NSwgMTUsIDksIDM0LCAyMTgsIDI0OSwgCi0gICAgMTEwLCA5LCAzNCwgMjE4LCAyNDksIDEwNSwgOSwgMzQsIDI1MiwgMTU0LCA5LCAzNCwgMjE5LCAxNjcsIDksIDM0LCAyNTEsIAotICAgIDYzLCAyMTksIDE2NywgOSwgMzQsIDIyOSwgOTAsIDExMCwgOSwgMzQsIDIyOSwgOTAsIDEwNSwgOSwgMzQsIDIyOSwgOTAsIAotICAgIDE1OCwgOSwgMzQsIDIyOSwgOTAsIDE2MSwgOSwgMzQsIDIzMSwgNDYsIDksIDM0LCAyMjAsIDU3LCA5LCAzNCwgMjIzLCAKLSAgICAxNTMsIDksIDM0LCAyNDUsIDM3LCA5LCAzNCwgMjI2LCAyMDksIDksIDM0LCAyNTEsIDEzMywgMTEwLCA5LCAzNCwgMjUxLCAKLSAgICAxMzMsIDEwNSwgOSwgMzQsIDIzMSwgODYsIDksIDM0LCAyMzAsIDEyMywgOSwgMzQsIDI0MiwgMTQwLCAxMTAsIDksIDM0LCAKLSAgICAyNDIsIDE0MCwgMTA1LCA5LCAzNCwgMjQyLCAxNDAsIDE1OCwgOSwgMzQsIDIxNiwgMTA2LCA5LCAzNCwgMjQ5LCAyNDksIDksIAotICAgIDM0LCAyMTIsIDksIDExMCwgOSwgMzQsIDIxMiwgOSwgMTA1LCA5LCAzNCwgMjUxLCA2MywgMjIxLCAxNzAsIDksIDM0LCAKLSAgICAyMTksIDE2MCwgMjQwLCAyNDgsIDksIDM0LCAyNDAsIDI0OCwgOSwgMzQsIDI1MSwgNjMsIDIxOSwgMiwgOSwgMzQsIDI1MSwgCi0gICAgNjMsIDIyMCwgNTIsIDksIDM0LCAyNDQsIDMyLCA5LCAzNCwgMjUxLCA2MywgMjUwLCAyMjgsIDksIDM0LCAyMTksIDE2MCwgCi0gICAgMjEyLCA1NywgOSwgMzQsIDIxMiwgNTgsIDExMCwgOSwgMzQsIDIxMiwgNTgsIDEwNSwgOSwgMzQsIDI1MCwgMjcsIDksIDM0LCAKLSAgICAyNTEsIDYzLCAyNDIsIDE2NiwgOSwgMzQsIDE5OSwgMTEwLCA5LCAzNCwgMTk5LCAxMDUsIDksIDM0LCAyNTEsIDYzLCAyMzIsIAotICAgIDEzNywgOSwgMzQsIDI1MSwgNjMsIDI0MywgODgsIDksIDM0LCAyMzAsIDExOSwgMTEwLCA5LCAzNCwgMjMwLCAxMTksIDEwNSwgCi0gICAgOSwgMzQsIDIyMywgMTU5LCA5LCAzNCwgMjUxLCAyMDcsIDksIDM0LCAyNTEsIDYzLCAyMTcsIDU2LCAyMzMsIDUyLCA5LCAKLSAgICAzNCwgMjUxLCA2MywgMjMzLCA1MywgOSwgMzQsIDI1MSwgNjMsIDIxMSwgMjM5LCA5LCAzNCwgMjUxLCA2MywgMjQ0LCA0NiwgCi0gICAgOSwgMzQsIDI0NSwgMjE4LCAxMTAsIDksIDM0LCAyNDUsIDIxOCwgMTA1LCA5LCAzNCwgMjQ1LCAyMTgsIDE1OCwgOSwgMzQsIAotICAgIDI1MSwgNjMsIDI0NSwgMjE3LCA5LCAzNCwgMjQxLCAyMzUsIDksIDM0LCAyNTEsIDYzLCAyNDAsIDI0NSwgOSwgMzQsIDI1MSwgCi0gICAgMTk0LCA5LCAzNCwgMjQyLCAyMjIsIDksIDM0LCAyNTEsIDYzLCAyNDQsIDkwLCA5LCAzNCwgMjUxLCA2MywgMjUxLCAyMzcsIAotICAgIDksIDM0LCAyNTEsIDYzLCAyMjIsIDEsIDksIDM0LCAyMTksIDE2MCwgMjEyLCAyLCA5LCAzNCwgMjE5LCAxNjAsIDIxMSwgCi0gICAgNDEsIDksIDM0LCAyNTEsIDYzLCAyNDMsIDI0NCwgOSwgMzQsIDIzNSwgMTQzLCAyNDUsIDQxLCA5LCAzNCwgMjUxLCA2MywgCi0gICAgMjQ1LCA0MSwgOSwgMzQsIDIzNSwgMTQzLCAyMTYsIDE1LCA5LCAzNCwgMjUxLCA2MywgMjE2LCAxNSwgOSwgMzQsIDIzNSwgCi0gICAgMTQzLCAyNDYsIDk2LCA5LCAzNCwgMjUxLCA2MywgMjQ2LCA5NiwgOSwgMzQsIDIxNSwgOTEsIDksIDM0LCAyMzUsIDE0MywgCi0gICAgMjE1LCA5MSwgOSwgMzQsIDI1MSwgNjMsIDIxNSwgOTEsIDYwLCAzNCwgMTEwLCA2MCwgMzQsIDIzMiwgMjEzLCA2MCwgMzQsIAotICAgIDI0NywgMTIwLCA2MCwgMzQsIDIxOSwgOTUsIDYwLCAzNCwgMjIxLCAxNzUsIDYwLCAzNCwgMTAzLCA2MCwgMzQsIDEwNSwgCi0gICAgNjAsIDM0LCAyMzIsIDIzNywgNjAsIDM0LCAyMzEsIDE4NSwgNjAsIDM0LCAyMzMsIDMzLCA2MCwgMzQsIDI0NSwgMTI5LCAKLSAgICA2MCwgMzQsIDE5NSwgNjAsIDM0LCAxMjQsIDI1MSwgMTYzLCA2MCwgMzQsIDI0OSwgMTQ3LCA2MCwgMzQsIDI0MCwgMTExLCAKLSAgICA2MCwgMzQsIDIxNywgOTIsIDYwLCAzNCwgMjA0LCAyNTEsIDE2MywgNjAsIDM0LCAyMzQsIDMyLCA2MCwgMzQsIDIyNCwgCi0gICAgMjI0LCA2MCwgMzQsIDIxMSwgMjAyLCA2MCwgMzQsIDIxOCwgMjQzLCA2MCwgMzQsIDQ0LCAyMDQsIDI1MSwgMTYzLCA2MCwgCi0gICAgMzQsIDI0MSwgMTc2LCAyNDUsIDE0NSwgNjAsIDM0LCAyMTYsIDI0NywgNjAsIDM0LCAyNDcsIDE3MCwgNjAsIDM0LCAyMjEsIAotICAgIDE3OSwgNjAsIDM0LCAyNTAsIDEwLCA2MCwgMzQsIDIyNCwgMTgyLCA2MCwgMzQsIDI1NCwgMjE1LCA2MCwgMzQsIDIzMCwgCi0gICAgMTEwLCA2MCwgMzQsIDI0NSwgMTQ1LCA2MCwgMzQsIDI0NSwgMjIzLCA2MCwgMzQsIDIyMSwgMjAwLCA2MCwgMzQsIDI0MiwgCi0gICAgMTc0LCA2MCwgMzQsIDI0MiwgMTc1LCAyMTksIDgxLCA2MCwgMzQsIDI0NSwgNDAsIDYwLCAzNCwgMjUxLCAyNDgsIDYwLCAKLSAgICAzNCwgMjExLCAyMjEsIDYwLCAzNCwgMjUwLCAxMDEsIDYwLCAzNCwgMjIyLCAxOTYsIDYwLCAzNCwgMjM1LCAyNTEsIDYwLCAKLSAgICAzNCwgMjE5LCA3OSwgNjAsIDM0LCAyMzMsIDk2LCA2MCwgMzQsIDI0OSwgMTU2LCA2MCwgMzQsIDIxOCwgMjM3LCA2MCwgMzQsIAotICAgIDIzMCwgMTE1LCA2MCwgMzQsIDIyMiwgMjI0LCA2MCwgMzQsIDIxMSwgMjA2LCA2MCwgMzQsIDIyNiwgMTkwLCA2MCwgMzQsIAotICAgIDIxNSwgOTcsIDYwLCAzNCwgMjQ2LCA4MCwgNjAsIDM0LCAyMTksIDI1MSwgMjE2LCAxNDUsIDYwLCAzNCwgMjQ2LCAxMTgsIAotICAgIDI1MCwgMTAsIDYwLCAzNCwgMTk5LCAyMTgsIDEwOCwgNjAsIDM0LCAxMTMsIDI0MiwgMTAsIDYwLCAzNCwgMjIwLCAwLCA2MCwgCi0gICAgMzQsIDI1MSwgMTY5LCA2MCwgMzQsIDIxOSwgNjUsIDYwLCAzNCwgMjUxLCAxMzcsIDYwLCAzNCwgMjE4LCAxMzgsIDYwLCAKLSAgICAzNCwgMjQxLCAyMjcsIDYwLCAzNCwgMjQyLCAyOCwgNjAsIDM0LCAyNDcsIDEyMywgNjAsIDM0LCAyNDIsIDE1LCA2MCwgMzQsIAotICAgIDI1MSwgMTU0LCA2MCwgMzQsIDIyMywgMTQ3LCA2MCwgMzQsIDIyMSwgMTg3LCA2MCwgMzQsIDI0NywgMTk5LCA2MCwgMzQsIAotICAgIDI1MywgMTY4LCA2MCwgMzQsIDIxOCwgMjM0LCA2MCwgMzQsIDIyOCwgNTEsIDYwLCAzNCwgMjE4LCAzNywgNjAsIDM0LCAKLSAgICAyMjEsIDIxMSwgNjAsIDM0LCAyMzAsIDEyOCwgNjAsIDM0LCAyMTUsIDIzNSwgNjAsIDM0LCAyMzMsIDEyMiwgNjAsIDM0LCAKLSAgICAyMTgsIDEyOSwgNjAsIDM0LCAyNDgsIDg4LCA2MCwgMzQsIDIxMiwgMjEsIDYwLCAzNCwgMjQ3LCAxNDYsIDIyOCwgNTEsIAotICAgIDYwLCAzNCwgMjQ5LCAyMTUsIDYwLCAzNCwgMjQzLCAyMjIsIDYwLCAzNCwgMjUwLCAyMSwgNjAsIDM0LCAyMTgsIDE0MiwgCi0gICAgNjAsIDM0LCAyMTIsIDQwLCA2MCwgMzQsIDI0NCwgOTYsIDYwLCAzNCwgMjUwLCAxOCwgNjAsIDM0LCAyNDQsIDE2MSwgNjAsIAotICAgIDM0LCA1MiwgMjExLCAxNzgsIDYwLCAzNCwgMTYzLCAyMTUsIDIzNiwgMjE1LCAxODgsIDYwLCAzNCwgMjE5LCA4OSwgNjAsIAotICAgIDM0LCAyNDQsIDE3MSwgNjAsIDM0LCAyNDksIDE0NSwgNjAsIDM0LCAyNDcsIDEzNiwgNjAsIDM0LCAyMjQsIDE3OSwgNjAsIAotICAgIDM0LCAyMzUsIDEzNywgNjAsIDM0LCAyMzEsIDY3LCA2MCwgMzQsIDIxNiwgODgsIDYwLCAzNCwgMjE3LCAyNDUsIDYwLCAzNCwgCi0gICAgMjMyLCAyMzEsIDYwLCAzNCwgMjE0LCAxMzEsIDYwLCAzNCwgMjQ0LCAxMjAsIDYwLCAzNCwgMjUxLCAxOTgsIDY0LCAyNDksIAotICAgIDI1MCwgNjAsIDM0LCAyMTksIDE4OCwgNjAsIDM0LCAyNDYsIDExOCwgMjE2LCAyNDIsIDYwLCAzNCwgMjExLCAyNTMsIDYwLCAKLSAgICAzNCwgMjE5LCAxMDMsIDYwLCAzNCwgMjQ3LCAxODcsIDYwLCAzNCwgMjQ1LCAxNSwgNjAsIDM0LCAyMTksIDUsIDYwLCAzNCwgCi0gICAgNzQsIDYwLCAzNCwgMjE4LCAxMzEsIDYwLCAzNCwgMjE4LCAyNDgsIDYwLCAzNCwgMjE1LCAyNTUsIDYwLCAzNCwgMjQyLCAKLSAgICAxNDcsIDYwLCAzNCwgMjUwLCAyMTgsIDYwLCAzNCwgMjE4LCAxNjAsIDYwLCAzNCwgMjUyLCAxNTQsIDYwLCAzNCwgMjIzLCAKLSAgICAzMSwgNjAsIDM0LCAyMTksIDE2NywgNjAsIDM0LCAyMzUsIDEzMCwgNjAsIDM0LCAyMjksIDg5LCA2MCwgMzQsIDIyMCwgNTcsIAotICAgIDYwLCAzNCwgMjQ0LCAxNDksIDYwLCAzNCwgMjI2LCAyMDksIDYwLCAzNCwgMjU0LCAxMTgsIDYwLCAzNCwgMjI1LCAyOSwgCi0gICAgNjAsIDM0LCAyNDUsIDIyNywgNjAsIDM0LCAyNTEsIDEzMiwgNjAsIDM0LCAyMzEsIDg2LCA2MCwgMzQsIDIzMCwgMTgzLCAKLSAgICA2MCwgMzQsIDIyMCwgMTU2LCA2MCwgMzQsIDI1MywgMjUyLCA2MCwgMzQsIDIzMCwgMTIzLCA2MCwgMzQsIDIxNiwgMTksIAotICAgIDYwLCAzNCwgMjI2LCAxNjUsIDYwLCAzNCwgMjUxLCAyMDEsIDYwLCAzNCwgMjE4LCAxMjcsIDYwLCAzNCwgMjQ5LCAyMjUsIAotICAgIDYwLCAzNCwgMjQyLCAxMzksIDYwLCAzNCwgMjE2LCAxMDYsIDYwLCAzNCwgMjM1LCAyMTcsIDYwLCAzNCwgMjUxLCAyMTEsIAotICAgIDYwLCAzNCwgMjEyLCA1OCwgMjQ1LCAxNDUsIDYwLCAzNCwgMjQ5LCAyNDksIDYwLCAzNCwgMjEyLCA4LCA2MCwgMzQsIDIyMSwgCi0gICAgMTcwLCA2MCwgMzQsIDI0MCwgMjQ4LCA2MCwgMzQsIDIxOSwgMiwgNjAsIDM0LCAyMTQsIDIyLCA2MCwgMzQsIDI1MiwgNzIsIAotICAgIDYwLCAzNCwgMjI1LCA3MywgNjAsIDM0LCAyNTIsIDE3NCwgNjAsIDM0LCAyMjAsIDUyLCA2MCwgMzQsIDIyMywgMTEwLCA2MCwgCi0gICAgMzQsIDIyMiwgMTI2LCA2MCwgMzQsIDI0NCwgMzIsIDYwLCAzNCwgMjUxLCAyMDAsIDYwLCAzNCwgMjUwLCAyMjgsIDYwLCAKLSAgICAzNCwgMjUxLCAyMjYsIDYwLCAzNCwgMjMwLCAxMjUsIDYwLCAzNCwgMjEyLCA1NywgNjAsIDM0LCAyNTAsIDI3LCA2MCwgMzQsIAotICAgIDIxMSwgMjM2LCA2MCwgMzQsIDI0NywgMTgwLCA2MCwgMzQsIDIxMywgMTYxLCA2MCwgMzQsIDI0MiwgMTY2LCA2MCwgMzQsIAotICAgIDIzMiwgMTM3LCA2MCwgMzQsIDI0MywgODgsIDYwLCAzNCwgMjMwLCAxMTgsIDYwLCAzNCwgMjE5LCA5NCwgNjAsIDM0LCAKLSAgICAyMTksIDI1MSwgMjE3LCA3NiwgMjUxLCAyMzcsIDYwLCAzNCwgMjIzLCAxNTksIDYwLCAzNCwgMjUxLCAyMDcsIDYwLCAzNCwgCi0gICAgMjExLCAxOTcsIDYwLCAzNCwgMjQ0LCAxOTAsIDYwLCAzNCwgMjMzLCA1MiwgNjAsIDM0LCAyMTcsIDU2LCAyMzMsIDUyLCAKLSAgICA2MCwgMzQsIDIzMywgNDgsIDYwLCAzNCwgMjE5LCAzMCwgNjAsIDM0LCAyMzMsIDUzLCA2MCwgMzQsIDIxMSwgMjM5LCA2MCwgCi0gICAgMzQsIDI0NCwgNDYsIDYwLCAzNCwgMjQ1LCAyMTcsIDYwLCAzNCwgMjQxLCAyMzUsIDYwLCAzNCwgMjQ0LCAwLCA2MCwgMzQsIAotICAgIDI0MCwgMjQ1LCA2MCwgMzQsIDI1MSwgMTk0LCA2MCwgMzQsIDIxNywgNjMsIDYwLCAzNCwgMjQyLCAzNCwgNjAsIDM0LCAKLSAgICAyNDQsIDExMywgNjAsIDM0LCAyMjIsIDI4LCAyMTEsIDIzNiwgNjAsIDM0LCAyNTAsIDIyMCwgNjAsIDM0LCAyNDIsIDIyMiwgCi0gICAgNjAsIDM0LCAyNDQsIDkwLCA2MCwgMzQsIDI1MSwgMjM3LCA2MCwgMzQsIDIyMiwgMSwgNjAsIDM0LCAyNDgsIDc0LCA2MCwgCi0gICAgMzQsIDIxMiwgMiwgNjAsIDM0LCAyNDEsIDIxMCwgNjAsIDM0LCAyMTEsIDQxLCA2MCwgMzQsIDIzMCwgMTkyLCA2MCwgMzQsIAotICAgIDI1MSwgMjIxLCA2MCwgMzQsIDI0NSwgMTU1LCA2MCwgMzQsIDI0MywgMjQ0LCA2MCwgMzQsIDIxNSwgMjA5LCA2MCwgMzQsIAotICAgIDI0NiwgODIsIDYwLCAzNCwgMjIzLCAxNDEsIDYwLCAzNCwgMjI4LCA1MywgNjAsIDM0LCAyNDUsIDQxLCA2MCwgMzQsIDIxNiwgCi0gICAgMTUsIDYwLCAzNCwgMjQ2LCA5NiwgNjAsIDM0LCAyMTUsIDkxLCA2MCwgMzQsIDI0NCwgNDgsIDEwOSwgMjQ4LCAzNywgMTM1LCAKLSAgICA0MywgMjE2LCA0MiwgMjIyLCAyNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCA3NywgMjE2LCA0MiwgNTEsIDEwOSwgMjQ4LCAzNywgCi0gICAgMTM1LCA0MywgMjE2LCA0MiwgMjMwLCAyMjQsIDIyLCAyMjIsIDI1MSwgMTA5LCAyNDgsIDM3LCAxMzUsIDc3LCAyMTYsIDQyLCAKLSAgICAyMzAsIDIyNCwgMjIsIDUxLCAxMDksIDI0OCwgMzcsIDEzNSwgMjQzLCAyMjksIDIxOCwgMTAsIDEwOSwgMjQ4LCAzNywgCi0gICAgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgNDgsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgNTEsIAotICAgIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgMjMzLCA0NiwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgCi0gICAgMTEsIDI0MywgMjQzLCAyMTQsIDE2MCwgMjMzLCA0NiwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCAKLSAgICAyMTQsIDE2MCwgMjIyLCAyNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgMjMyLCAxMDgsIDIzMywgCi0gICAgNDYsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMjYsIDEyMiwgMTA5LCAyMTksIDE4LCAxMDksIDI0OSwgMjE5LCAxMDksIDI0MywgCi0gICAgMjI5LCAyMTgsIDEyOSwgMjQ3LCAxNzcsIDc4LCAyMzUsIDEzMSwgMjM1LCAyMzYsIDIxOCwgMTU5LCA4NywgMTA5LCAyMzUsIAotICAgIDE1OCwgNzgsIDEwOSwgMjQ5LCAyNTIsIDc4LCAxMDksIDU0LCAyMTAsIDg2LCA0MywgMjU0LCAxMTAsIDEyNywgNDQsIDI1NCwgCi0gICAgMTEwLCAxMjcsIDQzLCA1MiwgMjU0LCAxMTAsIDEyNywgNDQsIDUyLCAyNTQsIDExMCwgMTI3LCA0MywgMjQ5LCAxNjEsIAotICAgIDEyNywgNDQsIDI0OSwgMTYxLCAxMjcsIDQzLCA3MSwgMjQ5LCAxNjEsIDEyNywgNDQsIDcxLCAyNDksIDE2MSwgMTI3LCA0MywgCi0gICAgODUsIDIzMywgMjAsIDEyNywgNDQsIDg1LCAyMzMsIDIwLCAxMjcsIDIyNCwgMjM3LCA3OCwgMjQzLCAzMiwgNzgsIDQzLCAKLSAgICAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNDQsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA0MywgNzEsIDIzMywgMjAsIDEyNywgNDQsIAotICAgIDcxLCAyMzMsIDIwLCAxMjcsIDQzLCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDQ0LCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAKLSAgICAxMjcsIDQzLCA3MSwgNDIsIDEyNywgNDQsIDcxLCA0MiwgMTI3LCAyMTIsIDM2LCAyNDgsIDE1NiwgMjIzLCA0OSwgNTIsIAotICAgIDIyNCwgMTkxLCAyMjMsIDI1NCwgNzgsIDUyLCAyMjQsIDE5MSwgMjIzLCAyNTQsIDc4LCAxMjEsIDUyLCAyMjQsIDE5MSwgCi0gICAgMjIzLCAyNTQsIDc4LCAyMjQsIDIzNywgMTY0LCAyNDQsIDE5MCwgMjQyLCA4LCAyMjcsIDE5OCwgMTEwLCAyNDIsIDgsIAotICAgIDIyNywgMTk4LCAxMDUsIDI0MiwgOCwgMjI3LCAxOTgsIDE1OCwgMjQyLCA4LCAyMjcsIDE5OCwgMTYxLCAyNDIsIDgsIDIyNywgCi0gICAgMTk4LCAxODksIDI0MiwgOCwgMjI3LCAxOTgsIDE5NCwgMjQyLCA4LCAyMjcsIDE5OCwgMTk4LCAyNDIsIDgsIDIyNywgMTk4LCAKLSAgICAxOTUsIDI0MiwgOCwgMjI3LCAxOTgsIDIwMCwgMTA5LCAyMzMsIDMsIDEzOCwgNzgsIDEwOSwgMjIyLCAyMjgsIDEzOCwgNzgsIAotICAgIDEwOSwgMjQ4LCA0NCwgMTM4LCA3OCwgMTA5LCAyNDUsIDEyOCwgMTM4LCA3OCwgMjQsIDIxOSwgMTU1LCA1OSwgMTM4LCA3OCwgCi0gICAgMjQsIDUyLCA1OSwgMTM4LCA3OCwgMjEyLCAzMiwgMjQ4LCAxNTYsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgNzgsIDY3LCAKLSAgICAyMzQsIDIzMywgMjIzLCA3NywgMiwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCA2NywgMjM0LCAyMzMsIDIyMywgNzcsIDE2NCwgCi0gICAgMjE0LCAxNjAsIDI0MiwgMjcsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgMiwgMjEzLCAxMzUsIDIxOSwgMzEsIDE2NCwgMjE0LCAKLSAgICAxNjAsIDI0MiwgMjcsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgMTY0LCAyMzIsIDEwOCwgMjQyLCAyNywgMzcsIDIyNCwgCi0gICAgMjM3LCA3OCwgMTA5LCAyMTcsIDMsIDIzMiwgMjE0LCAyNDQsIDE0NiwgMjIwLCAxMzgsIDg3LCAyNDIsIDgsIDIyNywgMTk4LCAKLSAgICAyMTYsIDI0NywgMjQyLCA4LCAyMjcsIDE5OCwgMjE1LCA3MywgMjQyLCA4LCAyMjcsIDE5OCwgMjE2LCAxNjIsIDY3LCAxMDksIAotICAgIDIzNSwgMTU4LCA3OCwgMjMxLCAxNDAsIDc4LCAyMjUsIDI1NSwgMjU0LCAxNDAsIDc4LCAxMDksIDQ1LCAyMzUsIDIzOCwgCi0gICAgMTA5LCAxNjMsIDI0NCwgMTA2LCAyMTksIDE4LCAxNDEsIDEsIDQsIDYxLCAxNDEsIDEsIDYxLCAxNDEsIDEsIDQsIDczLCAKLSAgICAxNDEsIDEsIDczLCAxNDEsIDEsIDQsIDcwLCAxNDEsIDEsIDcwLCAxNDEsIDEsIDQsIDc1LCAxNDEsIDEsIDc1LCAxNDEsIDEsIAotICAgIDQsIDc2LCAxNDEsIDEsIDc2LCAxNDEsIDEsIDE3NiwgMTQxLCAxLCAyNDMsIDEzNSwgMTQxLCAxLCAyMzQsIDkyLCAxNDEsIAotICAgIDEsIDI0MiwgMjE0LCAxNDEsIDEsIDIzMywgMjE3LCAxNDEsIDEsIDI0MiwgMTEzLCAxNDEsIDEsIDIzNCwgMTgyLCAxNDEsIAotICAgIDEsIDI0MywgNjIsIDE0MSwgMSwgMjM0LCAyOCwgMTQxLCAxLCAyNDIsIDE3NCwgMTQxLCAxLCAyMDYsIDE0MSwgMSwgMjEwLCAKLSAgICAxMTYsIDE0MSwgMSwgMjE5LCAxOTEsIDE0MSwgMSwgMjEwLCA0NCwgMTQxLCAxLCAyMTgsIDgzLCAxNDEsIDEsIDIxMCwgMTMsIAotICAgIDE0MSwgMSwgMjIxLCAxODEsIDE0MSwgMSwgMjEwLCA5NCwgMTQxLCAxLCAyMTksIDU4LCAxNDEsIDEsIDIxMCwgMjMsIDE0MSwgCi0gICAgMSwgMjE3LCAxMDUsIDE0MSwgMSwgMjQ4LCAyMjEsIDE0MSwgMSwgMjE2LCAxMTcsIDE0MSwgMSwgMjQ4LCAzLCAxNDEsIDEsIAotICAgIDQsIDIxNSwgMTE4LCAxNDEsIDEsIDIxNSwgMTE4LCAxNDEsIDEsIDI0NiwgNzgsIDE0MSwgMSwgMjE3LCAyMiwgMTQxLCAxLCAKLSAgICAyNDgsIDkwLCAxNDEsIDEsIDExMSwgMTQxLCAxLCAyNDcsIDE0NSwgMTQxLCAxLCAxOTcsIDE0MSwgMSwgMjI4LCAyMzMsIAotICAgIDE0MSwgMSwgMjI3LCAyMzcsIDE0MSwgMSwgMjI5LCAxMDcsIDE0MSwgMSwgMjI4LCA3NCwgMTQxLCAxLCAxNjIsIDE0MSwgMSwgCi0gICAgMjUyLCAxOTEsIDE0MSwgMSwgMTkwLCAxNDEsIDEsIDI0MSwgMTgwLCAxNDEsIDEsIDI1MiwgNiwgMTQxLCAxLCAyMjUsIAotICAgIDEwOCwgMTQxLCAxLCAyNDAsIDIyMiwgMTQxLCAxLCAyNTEsIDEyNSwgMTQxLCAxLCAyMjQsIDE1MCwgMTQxLCAxLCAyNDEsIAotICAgIDIzOCwgMTQxLCAxLCAyNTIsIDc1LCAxNDEsIDEsIDIyNSwgMjIxLCAxNDEsIDEsIDI0MSwgNjgsIDE0MSwgMSwgMjUxLCAKLSAgICAyMDUsIDE0MSwgMSwgMjI1LCAxNiwgMTQxLCAxLCAxODQsIDE0MSwgMSwgMjMwLCAyMzAsIDE0MSwgMSwgMjMwLCAxMDIsIAotICAgIDE0MSwgMSwgMjMxLCA5MSwgMTQxLCAxLCAyMzAsIDE2MSwgMTQxLCAxLCA0LCAxOTEsIDE0MSwgMSwgMTkxLCAxNDEsIDEsIAotICAgIDQsIDIxMCwgMjEyLCAxNDEsIDEsIDIxMCwgMjEyLCAxNDEsIDEsIDQsIDIxMCwgMjQ0LCAxNDEsIDEsIDIxMCwgMjQ0LCAKLSAgICAxNDEsIDEsIDIwNSwgMTQxLCAxLCAyMjMsIDM1LCAxNDEsIDEsIDIyMiwgMTQwLCAxNDEsIDEsIDIyMywgMTI4LCAxNDEsIDEsIAotICAgIDIyMiwgMjExLCAxNDEsIDEsIDQsIDIxMiwgNjUsIDE0MSwgMSwgMjEyLCA2NSwgMTQxLCAxLCAyMTEsIDI1MCwgMTQxLCAxLCAKLSAgICAyMTIsIDIyLCAxNDEsIDEsIDIxMSwgMjI3LCAxNDEsIDEsIDIzMCwgMjUsIDE0MSwgMSwgMjEyLCAxMTYsIDE0MSwgMSwgNCwgCi0gICAgMTc2LCAxNDEsIDEsIDQsIDIzNCwgMTgyLCAzOCwgMjM0LCAyMDEsIDIxMywgMTM1LCAyMTksIDMxLCA3OCwgMzgsIDIzNCwgCi0gICAgMjAxLCAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDIzNCwgMjAxLCAyMTMsIDEzNSwgMjE5LCAzMSwgNzgsIDIzNCwgMjAxLCAKLSAgICAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDE0MSwgMjM1LCAxNTgsIDc4LCAxNDEsIDIxMywgMTM1LCAyMzUsIDE1OCwgNzgsIAotICAgIDE0MSwgMjQ3LCAyMjEsIDIxMCwgMjI1LCAyMzQsIDIwMSwgNTIsIDI0MCwgMTY4LCA1NiwgMSwgNCwgNjEsIDU2LCAxLCA2MSwgCi0gICAgNTYsIDEsIDQsIDczLCA1NiwgMSwgNzMsIDU2LCAxLCA0LCA3MCwgNTYsIDEsIDcwLCA1NiwgMSwgNCwgNzUsIDU2LCAxLCAKLSAgICA3NSwgNTYsIDEsIDQsIDc2LCA1NiwgMSwgNzYsIDU2LCAxLCAxNzYsIDU2LCAxLCAyNDMsIDEzNSwgNTYsIDEsIDIzNCwgOTIsIAotICAgIDU2LCAxLCAyNDIsIDIxNCwgNTYsIDEsIDIzMywgMjE3LCA1NiwgMSwgMjQyLCAxMTMsIDU2LCAxLCAyMzQsIDE4MiwgNTYsIAotICAgIDEsIDI0MywgNjIsIDU2LCAxLCAyMzQsIDI4LCA1NiwgMSwgMjQyLCAxNzQsIDU2LCAxLCAyMDYsIDU2LCAxLCAyMTAsIDExNiwgCi0gICAgNTYsIDEsIDIxOSwgMTkxLCA1NiwgMSwgMjEwLCA0NCwgNTYsIDEsIDIxOCwgODMsIDU2LCAxLCAyMTAsIDEzLCA1NiwgMSwgCi0gICAgMjIxLCAxODEsIDU2LCAxLCAyMTAsIDk0LCA1NiwgMSwgMjE5LCA1OCwgNTYsIDEsIDIxMCwgMjMsIDU2LCAxLCAyMTcsIAotICAgIDEwNSwgNTYsIDEsIDI0OCwgMjIxLCA1NiwgMSwgMjE2LCAxMTcsIDU2LCAxLCAyNDgsIDMsIDU2LCAxLCA0LCAyMTUsIDExOCwgCi0gICAgNTYsIDEsIDIxNSwgMTE4LCA1NiwgMSwgMjQ2LCA3OCwgNTYsIDEsIDIxNywgMjIsIDU2LCAxLCAyNDgsIDkwLCA1NiwgMSwgCi0gICAgMTExLCA1NiwgMSwgMjQ3LCAxNDUsIDU2LCAxLCAxOTcsIDU2LCAxLCAyMjgsIDIzMywgNTYsIDEsIDIyNywgMjM3LCA1NiwgCi0gICAgMSwgMjI5LCAxMDcsIDU2LCAxLCAyMjgsIDc0LCA1NiwgMSwgMTYyLCA1NiwgMSwgMjUyLCAxOTEsIDU2LCAxLCAxOTAsIDU2LCAKLSAgICAxLCAyNDEsIDE4MCwgNTYsIDEsIDI1MiwgNiwgNTYsIDEsIDIyNSwgMTA4LCA1NiwgMSwgMjQwLCAyMjIsIDU2LCAxLCAyNTEsIAotICAgIDEyNSwgNTYsIDEsIDIyNCwgMTUwLCA1NiwgMSwgMjQxLCAyMzgsIDU2LCAxLCAyNTIsIDc1LCA1NiwgMSwgMjI1LCAyMjEsIAotICAgIDU2LCAxLCAyNDEsIDY4LCA1NiwgMSwgMjUxLCAyMDUsIDU2LCAxLCAyMjUsIDE2LCA1NiwgMSwgMTg0LCA1NiwgMSwgMjMwLCAKLSAgICAyMzAsIDU2LCAxLCAyMzAsIDEwMiwgNTYsIDEsIDIzMSwgOTEsIDU2LCAxLCAyMzAsIDE2MSwgNTYsIDEsIDQsIDE5MSwgNTYsIAotICAgIDEsIDE5MSwgNTYsIDEsIDQsIDIxMCwgMjEyLCA1NiwgMSwgMjEwLCAyMTIsIDU2LCAxLCA0LCAyMTAsIDI0NCwgNTYsIDEsIAotICAgIDIxMCwgMjQ0LCA1NiwgMSwgMjA1LCA1NiwgMSwgMjIzLCAzNSwgNTYsIDEsIDIyMiwgMTQwLCA1NiwgMSwgMjIzLCAxMjgsIAotICAgIDU2LCAxLCAyMjIsIDIxMSwgNTYsIDEsIDQsIDIxMiwgNjUsIDU2LCAxLCAyMTIsIDY1LCA1NiwgMSwgMjExLCAyNTAsIDU2LCAKLSAgICAxLCAyMTIsIDIyLCA1NiwgMSwgMjExLCAyMjcsIDU2LCAxLCAyMzAsIDI1LCA1NiwgMSwgMjEyLCAxMTYsIDU2LCAxLCA0LCAKLSAgICAxNzYsIDU2LCAxLCA0LCAyMzQsIDE4MiwgNTYsIDEsIDIxNCwgMjcsIDU2LCAxLCAyMTMsIDE3NiwgNTYsIDEsIDIxMywgCi0gICAgMjU1LCA1NiwgMSwgMjEzLCAxMzgsIDU2LCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDIzNCwgMjAxLCAyMjQsIDE3MywgMjE5LCAKLSAgICAzMSwgNzgsIDU2LCAyMzUsIDE1OCwgNzgsIDU2LCAyMTMsIDEzNSwgMjM1LCAxNTgsIDc4LCA1NiwgMjQ3LCAyMjEsIDIzMywgCi0gICAgMjU1LCAyNTEsIDE4NCwgMSwgMjUzLCAxNTgsIDI1MSwgMTg0LCAxLCAyMjYsIDEwNSwgMjUxLCAxODQsIDEsIDE5MywgMjUxLCAKLSAgICAxODQsIDEsIDI0NSwgNiwgMjUxLCAxODQsIDEsIDI0OSwgNjAsIDI1MSwgMTg0LCAxLCAyMTcsIDE1MiwgMjUxLCAxODQsIDEsIAotICAgIDIzMCwgMjUsIDI1MSwgMTg0LCAxLCAxNTYsIDI1MSwgMTg0LCAxLCAyNDMsIDIwMiwgMjUxLCAxODQsIDEsIDIzNSwgMjMsIAotICAgIDI1MSwgMTg0LCAxLCAyNDIsIDYwLCAyNTEsIDE4NCwgMSwgMjM1LCAxNDQsIDI1MSwgMTg0LCAxLCAyMjQsIDk2LCAyNTEsIAotICAgIDE4NCwgMSwgMjExLCAxNzgsIDI1MSwgMTg0LCAxLCAyMTAsIDgzLCAyNTEsIDE4NCwgMSwgMjUwLCAxNTgsIDI1MSwgMTg0LCAKLSAgICAxLCAyMjAsIDEwNCwgMjUxLCAxODQsIDEsIDE1MywgMjUxLCAxODQsIDEsIDIxMCwgMTU5LCAyNTEsIDE4NCwgMSwgMjUxLCAKLSAgICA2NiwgMjUxLCAxODQsIDEsIDIyMiwgOTEsIDI1MSwgMTg0LCAxLCA2MSwgMjUxLCAxODQsIDEsIDc2LCAyNTEsIDE4NCwgMSwgCi0gICAgNzUsIDI1MSwgMTg0LCAxLCAyNDUsIDE5NywgMjUxLCAxODQsIDEsIDI1NCwgMjAxLCAyNTEsIDE4NCwgMSwgMjQ1LCAxOTUsIAotICAgIDI1MSwgMTg0LCAxLCAyNTMsIDE5MiwgMjUxLCAxODQsIDEsIDIyNiwgMTM0LCAyNTEsIDE4NCwgMSwgMjU0LCAxMjMsIDI1MSwgCi0gICAgMTg0LCAxLCAyNDUsIDE1MCwgMjUxLCAxODQsIDEsIDI1NCwgMTE1LCAyNTEsIDE4NCwgMSwgMjQ1LCAxMzgsIDI1MSwgMTg0LCAKLSAgICAxLCAyNDUsIDkyLCAyNTEsIDE4NCwgMSwgNzMsIDI1MSwgMTg0LCAxLCA3MCwgMjUxLCAxODQsIDEsIDIzNSwgMTU2LCAyNTEsIAotICAgIDE4NCwgMSwgMjE0LCAxMDUsIDI1MSwgMTg0LCAxLCAyMjksIDc5LCAyNTEsIDE4NCwgMSwgMjQyLCAxNzgsIDI1MSwgMTg0LCAKLSAgICAxLCAyMzYsIDM0LCAyNCwgMSwgMjM0LCA1OCwgMjQsIDEsIDIxOCwgMjE1LCAyNCwgMSwgMjM0LCA1MSwgMjQsIDEsIDIyOCwgCi0gICAgMjI2LCAyNCwgMSwgMjI4LCAyMjQsIDI0LCAxLCAyMjgsIDIyMywgMjQsIDEsIDIxNiwgMTAxLCAyNCwgMSwgMjE4LCAyMDQsIAotICAgIDI0LCAxLCAyMjMsIDI2LCAyNCwgMSwgMjIzLCAyMSwgMjQsIDEsIDIyMywgMTgsIDI0LCAxLCAyMjMsIDExLCAyNCwgMSwgCi0gICAgMjIzLCA2LCAyNCwgMSwgMjIzLCAxLCAyNCwgMSwgMjIzLCAxMiwgMjQsIDEsIDIyMywgMjQsIDI0LCAxLCAyMzAsIDIxNywgCi0gICAgMjQsIDEsIDIyNSwgOTUsIDI0LCAxLCAyMTgsIDIxMiwgMjQsIDEsIDIyNSwgODQsIDI0LCAxLCAyMTksIDE0OCwgMjQsIDEsIAotICAgIDIxOCwgMjA5LCAyNCwgMSwgMjM2LCA1NiwgMjQsIDEsIDI1MCwgNDYsIDI0LCAxLCAyMTgsIDIxOSwgMjQsIDEsIDI1MCwgCi0gICAgMTA2LCAyNCwgMSwgMjM0LCAxMTAsIDI0LCAxLCAyMTYsIDE3MywgMjQsIDEsIDIyNSwgMTMxLCAyNCwgMSwgMjQxLCAxNzIsIAotICAgIDI0LCAxLCA2MSwgMjQsIDEsIDI1NCwgMjQzLCAyNCwgMSwgMTkxLCAyNCwgMSwgMjExLCA5MiwgMjQsIDEsIDI0NSwgMTE3LCAKLSAgICAyNCwgMSwgNzUsIDI0LCAxLCAyMTEsIDM2LCAyNCwgMSwgMjExLCA0NywgMjQsIDEsIDc2LCAyNCwgMSwgMjEyLCA2NSwgMjQsIAotICAgIDEsIDIxMiwgNjIsIDI0LCAxLCAyMjYsIDIzNCwgMjQsIDEsIDIxMCwgMjQ0LCAyNCwgMSwgNzAsIDI0LCAxLCAyMTIsIDExLCAKLSAgICAyNCwgMSwgMjEyLCAyMiwgMjQsIDEsIDIxMSwgMjUwLCAyNCwgMSwgMjEwLCAyMTIsIDI0LCAxLCAyNDUsIDU1LCAyNCwgMSwgCi0gICAgMjExLCA4LCAyNCwgMSwgNzMsIDI0LCAyNDQsIDEwMywgMjQsIDEsIDIxOCwgMjEzLCAyNCwgMSwgMjI4LCAyMTYsIDI0LCAxLCAKLSAgICAyMjgsIDIxOCwgMjQsIDEsIDIyOCwgMjIxLCAyNCwgMSwgMjIzLCAxOSwgMjQsIDEsIDIyMywgMCwgMjQsIDEsIDIyMywgOCwgCi0gICAgMjQsIDEsIDIyMywgMTMsIDI0LCAxLCAyMjIsIDI1NCwgMjQsIDEsIDIzMCwgMjEwLCAyNCwgMSwgMjMwLCAyMDcsIDI0LCAxLCAKLSAgICAyMzAsIDIxMSwgMjQsIDEsIDIzNCwgMjIxLCAyNCwgMSwgMjI1LCA5MCwgMjQsIDEsIDIyNSwgNzYsIDI0LCAxLCAyMjUsIAotICAgIDgyLCAyNCwgMSwgMjI1LCA3OSwgMjQsIDEsIDIyNSwgOTMsIDI0LCAxLCAyMjUsIDc3LCAyNCwgMSwgMjM0LCAyMTksIDI0LCAKLSAgICAxLCAyMzQsIDIxNywgMjQsIDEsIDIxOSwgMTQxLCAyNCwgMSwgMjE5LCAxMzksIDI0LCAxLCAyMTksIDEzMSwgMjQsIDEsIAotICAgIDIxOSwgMTM2LCAyNCwgMSwgMjE5LCAxNDYsIDI0LCAxLCAyMjYsIDMyLCAyNCwgMSwgMjE4LCAyMTYsIDI0LCAxLCAyMTEsIAotICAgIDI2LCAyNCwgMSwgMjExLCAyMiwgMjQsIDEsIDIxMSwgMjMsIDI0LCAxLCAyMzQsIDIyMCwgMjQsIDEsIDIxOCwgMjE3LCAyNCwgCi0gICAgMSwgMjExLCAzMiwgMjQsIDEsIDIxMCwgMjM4LCAyNCwgMSwgMjEwLCAyMzcsIDI0LCAxLCAyMTAsIDI0MCwgMjQsIDEsIAotICAgIDIxMCwgMjAzLCAyNCwgMSwgMjEwLCAyMDQsIDI0LCAxLCAyMTAsIDIwNywgMjQsIDEsIDI1NCwgMzQsIDI0LCAxLCAyNTQsIAotICAgIDI4LCAxMDksIDI1NCwgOTksIDIzMiwgMjAzLCA3OCwgMTA5LCAyNTQsIDk5LCAyMjMsIDUwLCA3OCwgMTA5LCAyNTQsIDk5LCAKLSAgICAxMjMsIDc4LCAxMDksIDI1NCwgOTksIDExMywgNzgsIDEwOSwgMjU0LCA5OSwgMTM0LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDQsIAotICAgIDExLCA3OCwgMTA5LCAyNTQsIDk5LCAyMTYsIDE0LCA3OCwgMTA5LCAyNTQsIDk5LCAyMzAsIDIyNCwgNzgsIDEwOSwgMjU0LCAKLSAgICA5OSwgMjUxLCAxNzUsIDc4LCAxMDksIDI1NCwgOTksIDI0NCwgOTIsIDc4LCAxMDksIDI1NCwgOTksIDIyMSwgMTc2LCA3OCwgCi0gICAgMTA5LCAyNTQsIDk5LCAyMTYsIDE2OSwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ0LCA0LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDEsIAotICAgIDIyNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ1LCAyMjQsIDc4LCAxMDksIDI1NCwgOTksIDIzMSwgMTg2LCA3OCwgMjUxLCAKLSAgICAxODQsIDEsIDI1MSwgMTI1LCAyNTEsIDE4NCwgMSwgMjEwLCA0NCwgMjUxLCAxODQsIDEsIDIzNSwgMTA4LCAyNTEsIDE4NCwgCi0gICAgMSwgMjQyLCAxMTMsIDI1MSwgMTg0LCAxLCAyNDUsIDIwOSwgMjUxLCAxODQsIDEsIDI0NSwgMTM1LCAyNTEsIDE4NCwgMSwgCi0gICAgMjI2LCAxODMsIDI1MSwgMTg0LCAxLCAyMjYsIDE4NywgMjUxLCAxODQsIDEsIDIzNSwgMTc5LCAyNTEsIDE4NCwgMSwgMjU0LCAKLSAgICAxMDEsIDI1MSwgMTg0LCAxLCAyMzUsIDIyNCwgMjUxLCAxODQsIDEsIDIxNCwgMTY4LCAyNTEsIDE4NCwgMSwgMjM2LCAxNiwgCi0gICAgMjUxLCAxODQsIDEsIDIyOSwgNTcsIDI1MSwgMTg0LCAxLCAyNTQsIDE5NSwgMjUxLCAxODQsIDEsIDI1MywgMTg3LCAyNTEsIAotICAgIDE4NCwgMSwgMjU0LCAxMzYsIDI1MSwgMTg0LCAxLCAyMjYsIDIwNCwgMjUxLCAxODQsIDEsIDIyNiwgMTg5LCAyNTEsIDE4NCwgCi0gICAgMSwgMjM1LCAyMjEsIDI1MSwgMTg0LCA0MCwgMSwgMjI2LCAxMDUsIDI1MSwgMTg0LCA0MCwgMSwgMjE3LCAxNTIsIDI1MSwgCi0gICAgMTg0LCA0MCwgMSwgMjM1LCAyMywgMjUxLCAxODQsIDQwLCAxLCAyNDIsIDYwLCAyNTEsIDE4NCwgMSwgMjQyLCAyNTAsIAotICAgIDI1MSwgMTg0LCAxLCAyMzIsIDI1NSwgMjUxLCAxODQsIDEsIDIwOSwgMjUwLCA5LCAyMTgsIDEwMywgMjE3LCAxNTIsIDksIAotICAgIDIxOCwgMTAzLCAyMTIsIDQsIDksIDIxOCwgMTAzLCAyMTEsIDE1OCwgOSwgMjE4LCAxMDMsIDI1MSwgNzksIDksIDIxOCwgCi0gICAgMTAzLCAyMTcsIDI1NCwgOSwgMjE4LCAxMDMsIDI0MCwgMTU4LCA5LCAyMTgsIDEwMywgMjQwLCAxNjIsIDksIDIxOCwgMTAzLCAKLSAgICAyNDAsIDIzMSwgOSwgMjE4LCAxMDMsIDI0MCwgMTU5LCA5LCAyMTgsIDEwMywgMjE3LCAxNTUsIDksIDIxOCwgMTAzLCAyNDAsIAotICAgIDE2MSwgOSwgMjE4LCAxMDMsIDI0MCwgMTU3LCA5LCAyMTgsIDEwMywgMjQwLCAyMjksIDksIDIxOCwgMTAzLCAyNDAsIDE2MCwgCi0gICAgOSwgMjE4LCAxMDMsIDI0MCwgMTU2LCA5LCAyMTgsIDEwMywgMjMwLCAyNSwgOSwgMjE4LCAxMDMsIDI0MiwgNjAsIDksIAotICAgIDIxOCwgMTAzLCAyMjIsIDkxLCA5LCAyMTgsIDEwMywgMjI2LCAxMDUsIDksIDIxOCwgMTAzLCAyMTksIDIxLCA5LCAyMTgsIAotICAgIDEwMywgMjQ5LCA2MCwgOSwgMjE4LCAxMDMsIDI0MCwgMTYzLCA5LCAyMTgsIDEwMywgMjQxLCAxOTAsIDksIDIxOCwgMTAzLCAKLSAgICAyMTcsIDE2NCwgOSwgMjE4LCAxMDMsIDIxNywgMjMzLCA5LCAyMTgsIDEwMywgMjE4LCAxNjgsIDksIDIxOCwgMTAzLCAyMjAsIAotICAgIDExMCwgOSwgMjE4LCAxMDMsIDIyNSwgMjI0LCA5LCAyMTgsIDEwMywgMjI0LCA5OCwgOSwgMjE4LCAxMDMsIDIxNiwgNDMsIAotICAgIDksIDIxOCwgMTAzLCAyMTcsIDE1NCwgOSwgMjE4LCAxMDMsIDIxNywgMjQ0LCA5LCAyMTgsIDEwMywgMjQwLCAxNzAsIDksIAotICAgIDIxOCwgMTAzLCAyNDAsIDE1NSwgOSwgMjE4LCAxMDMsIDIyNSwgMTQ5LCA5LCAyMTgsIDEwMywgMjI0LCA5NiwgNTYsIDEsIAotICAgIDQsIDIzMywgMjE3LCA1NiwgMSwgNCwgMjE5LCAxOTEsIDU2LCAxLCA0LCAyMTgsIDgzLCA1NiwgMSwgNCwgMTExLCA1NiwgMSwgCi0gICAgNCwgMjI3LCAyMzcsIDU2LCAxLCA0LCAxNjIsIDU2LCAxLCA0LCAyNDEsIDE4MCwgNTYsIDEsIDQsIDI0MCwgMjIyLCA1NiwgCi0gICAgMSwgNCwgMjQxLCAyMzgsIDU2LCAxLCA0LCAyNDEsIDY4LCA1NiwgMSwgNCwgMjMwLCAxMDIsIDU2LCAxLCA0LCAyMDUsIDU2LCAKLSAgICAxLCA0LCAyMjMsIDM1LCA1NiwgMSwgNCwgMjIyLCAxNDAsIDU2LCAxLCA0LCAyMjMsIDEyOCwgNTYsIDEsIDQsIDIyMiwgCi0gICAgMjExLCA4OCwgMjQsIDIzNCwgNTgsIDg4LCAyNCwgMjI4LCAyMjYsIDg4LCAyNCwgMjE2LCAxMDEsIDg4LCAyNCwgMjIzLCAKLSAgICAyNiwgODgsIDI0LCAyMzAsIDIxNywgODgsIDI0LCAyMjUsIDk1LCA4OCwgMjQsIDIxOSwgMTQ4LCA4OCwgMjQsIDIzNiwgNTYsIAotICAgIDg4LCAyNCwgMjUwLCA0NiwgODgsIDI0LCAyNTAsIDEwNiwgODgsIDI0LCAyMzQsIDExMCwgODgsIDI0LCAyMTYsIDE3MywgCi0gICAgODgsIDI0LCAyMjUsIDEzMSwgODgsIDI0LCAyNDEsIDE3MiwgODgsIDI0LCAyMzQsIDU5LCA2MSwgODgsIDI0LCAyMjgsIAotICAgIDIyNywgNjEsIDg4LCAyNCwgMjE2LCAxMDIsIDYxLCA4OCwgMjQsIDIyMywgMjcsIDYxLCA4OCwgMjQsIDIzMCwgMjE4LCA2MSwgCi0gICAgODgsIDI0LCAyMjUsIDk2LCA2MSwgODgsIDI0LCAyMTksIDE0OSwgNjEsIDg4LCAyNCwgMjM2LCA1NywgNjEsIDg4LCAyNCwgCi0gICAgMjUwLCA0NywgNjEsIDg4LCAyNCwgMjUwLCAxMDcsIDYxLCA4OCwgMjQsIDIzNCwgMTExLCA2MSwgODgsIDI0LCAyMTYsIAotICAgIDE3NCwgNjEsIDg4LCAyNCwgMjI1LCAxMzIsIDYxLCA4OCwgMjQsIDI0MSwgMTczLCA2MSwgODgsIDI0LCAyNTAsIDQ3LCA3MCwgCi0gICAgODgsIDIzNCwgMywgMTM1LCAyMjYsIDIxNywgODgsIDIzNCwgMywgMTM1LCAxNDQsIDI0MCwgMjIyLCA4OCwgMTU0LCAxMTAsIAotICAgIDg4LCAxNTQsIDEwNSwgODgsIDE1NCwgMTU4LCA4OCwgMTU0LCAxNjEsIDg4LCAxNTQsIDE4OSwgODgsIDE1NCwgMTk0LCA4OCwgCi0gICAgMTU0LCAxOTgsIDg4LCAxNTQsIDE5NSwgODgsIDE1NCwgMjAwLCA4OCwgMTU0LCAyMTYsIDI0NywgODgsIDE1NCwgMjMwLCAKLSAgICAxMjgsIDg4LCAxNTQsIDI0NCwgOTYsIDg4LCAxNTQsIDIxMiwgNDAsIDg4LCAxNTQsIDIxMSwgMjE0LCA4OCwgMTU0LCAyMzEsIAotICAgIDM5LCA4OCwgMTU0LCAyNDUsIDIyMywgODgsIDE1NCwgMjE4LCAzNywgODgsIDE1NCwgMjE4LCAxMzIsIDg4LCAxNTQsIDI0MSwgCi0gICAgMjQ0LCA4OCwgMTU0LCAyMTksIDU0LCA4OCwgMTU0LCAyMjksIDIwNCwgODgsIDE1NCwgMjE5LCA0LCA4OCwgMTU0LCAyNDQsIAotICAgIDEwMiwgODgsIDE1NCwgMjQ5LCAyMDAsIDg4LCAxNTQsIDIzMywgMTI1LCA4OCwgMTU0LCAyMjMsIDcxLCA4OCwgMTU0LCAKLSAgICAyNTEsIDE1LCA4OCwgMTU0LCAyMTgsIDg3LCA4OCwgMTU0LCAyMTgsIDIwLCA4OCwgMTU0LCAyNDUsIDEyNywgODgsIDE1NCwgCi0gICAgMjIzLCA2MywgODgsIDE1NCwgMjU0LCAxNTAsIDg4LCAxNTQsIDI0NCwgMTI4LCA4OCwgMTU0LCAyMjMsIDYxLCA4OCwgMTU0LCAKLSAgICAyMjAsIDE1NiwgODgsIDE1NCwgMjIzLCAxMjcsIDM3LCAxNTQsIDIyNCwgMTIsIDM3LCAxNTQsIDIzNCwgODAsIDM3LCAxNTQsIAotICAgIDIyMSwgMTk4LCAzNywgMTU0LCAyMzMsIDI1NSwgMzcsIDU0LCAyMTYsIDI0OCwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgCi0gICAgMzcsIDU0LCAyMTUsIDc0LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDIxNiwgMTYzLCAyMjYsIDE5NywgODUsIAotICAgIDIxOCwgMjM0LCAzNywgNTQsIDI0NCwgMTYsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjQ0LCAxMTUsIDIyNiwgCi0gICAgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjE5LCAxMTIsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjIwLCAKLSAgICAxMTcsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjQ1LCAxODUsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIAotICAgIDIyNSwgMjUxLCA1MCwgMzcsIDU0LCAyMTUsIDc0LCAxMTAsIDM3LCA1NCwgMjE1LCA3NCwgMTA1LCAzNywgNTQsIDIxNSwgCi0gICAgNzQsIDE1OCwgMzcsIDU0LCAyMTUsIDc0LCAxNjEsIDM3LCA1NCwgMjE1LCA3NCwgMTg5LCAzNywgNTQsIDIxNSwgNzQsIAotICAgIDE5NCwgMzcsIDU0LCAyMTUsIDc0LCAxOTgsIDM3LCA1NCwgMjE1LCA3NCwgMTk1LCAzNywgNTQsIDIxNSwgNzQsIDIwMCwgCi0gICAgMzcsIDU0LCAyMTYsIDE2MiwgMzcsIDU0LCAyMTYsIDE2MywgMTEwLCAzNywgNTQsIDIxNiwgMTYzLCAxMDUsIDM3LCA1NCwgCi0gICAgMjE2LCAxNjMsIDE1OCwgMzcsIDU0LCAyMTYsIDE2MywgMTYxLCAzNywgNTQsIDIxNiwgMTYzLCAxODksIDM3LCAyNCwgMjM0LCAKLSAgICA1OCwgMzcsIDI0LCAyMjgsIDIyNiwgMzcsIDI0LCAyMTYsIDEwMSwgMzcsIDI0LCAyMjMsIDI2LCAzNywgMjQsIDIzMCwgCi0gICAgMjE3LCAzNywgMjQsIDIyNSwgOTUsIDM3LCAyNCwgMjE5LCAxNDgsIDM3LCAyNCwgMjM2LCA1NiwgMzcsIDI0LCAyNTAsIDQ2LCAKLSAgICAzNywgMjQsIDI1MCwgMTA2LCAzNywgMjQsIDIzNCwgMTEwLCAzNywgMjQsIDIxNiwgMTczLCAzNywgMjQsIDIyNSwgMTMxLCAKLSAgICAzNywgMjQsIDI0MSwgMTcyLCAzNywgMjQsIDIzNCwgNTksIDYxLCAzNywgMjQsIDIyOCwgMjI3LCA2MSwgMzcsIDI0LCAyMTYsIAotICAgIDEwMiwgNjEsIDM3LCAyNCwgMjIzLCAyNywgNjEsIDM3LCAyNCwgMjMwLCAyMTgsIDYxLCAzNywgMjQsIDIyNSwgOTYsIDYxLCAKLSAgICAzNywgMjQsIDIxOSwgMTQ5LCA2MSwgMzcsIDI0LCAyMzYsIDU3LCA2MSwgMzcsIDI0LCAyNTAsIDQ3LCA2MSwgMzcsIDI0LCAKLSAgICAyNTAsIDEwNywgNjEsIDM3LCAyNCwgMjM0LCAxMTEsIDYxLCAzNywgMjQsIDIxNiwgMTc0LCA2MSwgMzcsIDI0LCAyMjUsIAotICAgIDEzMiwgNjEsIDM3LCAyNCwgMjQxLCAxNzMsIDYxLCAzNywgMjM0LCAzLCAxMzUsIDI1MCwgMTQ4LCAzNywgMjM0LCAzLCAKLSAgICAxMzUsIDIzNSwgNDcsIDM3LCAyNCwgMjM2LCA1NywgNzAsIDIzNCwgMywgMjE4LCAxNTksIDg3LCAzNywgMTU0LCAxMTAsIAotICAgIDM3LCAxNTQsIDEwNSwgMzcsIDE1NCwgMTU4LCAzNywgMTU0LCAxNjEsIDM3LCAxNTQsIDE4OSwgMzcsIDE1NCwgMTk0LCAzNywgCi0gICAgMTU0LCAxOTgsIDM3LCAxNTQsIDE5NSwgMzcsIDE1NCwgMjAwLCAzNywgMTU0LCAyMTYsIDI0NywgMzcsIDE1NCwgMjMwLCAKLSAgICAxMjgsIDM3LCAxNTQsIDI0NCwgOTYsIDM3LCAxNTQsIDIxMiwgNDAsIDM3LCAxNTQsIDIxMSwgMjE0LCAzNywgMTU0LCAyMzEsIAotICAgIDM5LCAzNywgMTU0LCAyNDUsIDIyMywgMzcsIDE1NCwgMjE4LCAzNywgMzcsIDE1NCwgMjE4LCAxMzIsIDM3LCAxNTQsIDI0MSwgCi0gICAgMjQ0LCAzNywgMTU0LCAyMTksIDU0LCAzNywgMTU0LCAyMjksIDIwNCwgMzcsIDE1NCwgMjE5LCA0LCAzNywgMTU0LCAyNDQsIAotICAgIDEwMiwgMzcsIDE1NCwgMjQ5LCAyMDAsIDM3LCAxNTQsIDIzMywgMTI1LCAzNywgMTU0LCAyMjEsIDE3NCwgMzcsIDE1NCwgCi0gICAgMjMxLCAxODksIDM3LCAxNTQsIDI0NCwgMTM3LCAzNywgMTU0LCAyMTgsIDQ5LCAzNywgMTU0LCAyNDUsIDM0LCAzNywgMTU0LCAKLSAgICAyMjQsIDE4NywgMzcsIDE1NCwgMjUzLCAxOTYsIDM3LCAxNTQsIDIzNSwgMTU5LCAzNywgMTU0LCAyMjMsIDYxLCAzNywgCi0gICAgMTU0LCAyNDksIDE2NCwgMzcsIDE1NCwgMjQ5LCAxNTUsIDM3LCAxNTQsIDI0MSwgMTY1LCAzNywgMTU0LCAyNTAsIDE3NCwgCi0gICAgMzcsIDE1NCwgMjMyLCAxMTAsIDM3LCAxNTQsIDIzMywgNDYsIDM3LCAxNTQsIDIyMiwgMjUxLCAzNywgMTU0LCAyMzEsIDgzLCAKLSAgICAzNywgMTU0LCAyMjMsIDg3LCAzNywgMTU0LCAyMTgsIDg3LCAzNywgMTU0LCAyMTgsIDIwLCAzNywgMTU0LCAyNDUsIDEyNywgCi0gICAgMzcsIDE1NCwgMjIzLCA2MywgMzcsIDE1NCwgMjU0LCAxNTAsIDM3LCAxNTQsIDIyOCwgMjEyLCAzNywgNTQsIDIxNiwgMTYzLCAKLSAgICAxOTQsIDM3LCA1NCwgMjE2LCAxNjMsIDE5OCwgMzcsIDU0LCAyMTYsIDE2MywgMTk1LCAzNywgNTQsIDIxNiwgMTYzLCAyMDAsIAotICAgIDM3LCA1NCwgMjQ0LCAxNSwgMzcsIDU0LCAyNDQsIDE2LCAxMTAsIDM3LCA1NCwgMjQ0LCAxNiwgMTA1LCAzNywgNTQsIDI0NCwgCi0gICAgMTYsIDE1OCwgMzcsIDU0LCAyNDQsIDE2LCAxNjEsIDM3LCA1NCwgMjQ0LCAxNiwgMTg5LCAzNywgNTQsIDI0NCwgMTYsIAotICAgIDE5NCwgMzcsIDU0LCAyNDQsIDE2LCAxOTgsIDM3LCA1NCwgMjQ0LCAxNiwgMTk1LCAzNywgNTQsIDI0NCwgMTYsIDIwMCwgCi0gICAgMzcsIDU0LCAyNDQsIDExNCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjM1LCAxMzMsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIAotICAgIDI0NCwgMTQ4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMzEsIDE2MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjU0LCA0NywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjMxLCAxMzIsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIzNSwgNDUsIDEwOSwgMjE3LCAzLCAKLSAgICAxNiwgMzEsIDIzNSwgNDYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI1MywgMTg4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMjAsIAotICAgIDEzNiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjI2LCAyMzksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIyOCwgNDAsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0OCwgODUsIDQyLCAyNDEsIDE5MCwgNDIsIDI0NSwgODgsIDQyLCAyNDUsIDQzLCAyMzIsIAotICAgIDIxOSwgMjMyLCAyNDAsIDUwLCAzNywgNTYsIDYxLCAzNywgNTYsIDczLCAzNywgNTYsIDcwLCAzNywgNTYsIDc1LCAzNywgCi0gICAgNTYsIDc2LCAzNywgNTYsIDE3NiwgMzcsIDU2LCAyMzQsIDkyLCAzNywgNTYsIDIzMywgMjE3LCAzNywgNTYsIDIzNCwgMTgyLCAKLSAgICAzNywgNTYsIDIzNCwgMjgsIDM3LCA1NiwgMjA2LCAzNywgNTYsIDIxOSwgMTkxLCAzNywgNTYsIDIxOCwgODMsIDM3LCA1NiwgCi0gICAgMjIxLCAxODEsIDM3LCA1NiwgMjE5LCA1OCwgMzcsIDU2LCAyMTcsIDEwNSwgMzcsIDU2LCAyMTYsIDExNywgMzcsIDU2LCAKLSAgICAyMTUsIDExOCwgMzcsIDU2LCAyMTcsIDIyLCAzNywgNTYsIDExMSwgMzcsIDU2LCAxOTcsIDM3LCA1NiwgMjI4LCAyMzMsIAotICAgIDM3LCA1NiwgMjI3LCAyMzcsIDM3LCA1NiwgMjI5LCAxMDcsIDM3LCA1NiwgMjI4LCA3NCwgMzcsIDU2LCAxNjIsIDM3LCA1NiwgCi0gICAgMjQxLCAxODAsIDM3LCA1NiwgMjQwLCAyMjIsIDM3LCA1NiwgMjQxLCAyMzgsIDM3LCA1NiwgMjQxLCA2OCwgMzcsIDU2LCAKLSAgICAxODQsIDM3LCA1NiwgMjMwLCAyMzAsIDM3LCA1NiwgMjMwLCAxMDIsIDM3LCA1NiwgMjMxLCA5MSwgMzcsIDU2LCAyMzAsIAotICAgIDE2MSwgMzcsIDU2LCAxOTEsIDM3LCA1NiwgMjEwLCAyMTIsIDM3LCA1NiwgMjEwLCAyNDQsIDM3LCA1NiwgMjA1LCAzNywgCi0gICAgNTYsIDIyMywgMzUsIDM3LCA1NiwgMjIyLCAxNDAsIDM3LCA1NiwgMjIzLCAxMjgsIDM3LCA1NiwgMjIyLCAyMTEsIDM3LCAKLSAgICA1NiwgMjEyLCA2NSwgMzcsIDU2LCAyMTEsIDI1MCwgMzcsIDU2LCAyMTIsIDIyLCAzNywgNTYsIDIxMSwgMjI3LCA0MiwgCi0gICAgMjU0LCA3MSwgNDIsIDI1MywgMjM5LCA0MiwgMjU0LCA5NSwgNDIsIDI1NSwgMzEsIDQyLCAyMzUsIDIyNiwgNDIsIDIzNSwgCi0gICAgMTk2LCA0MiwgMjE0LCAxNjYsIDQyLCAyNDUsIDY2LCA0MiwgMjQ1LCAyMDYsIDQyLCAyMjYsIDE4NiwgNDIsIDIyNiwgMTgwLCAKLSAgICA0MiwgMjM0LCAyNDUsIDQyLCAyMzQsIDIxNCwgNDIsIDIzNCwgMjExLCA0MiwgMjQzLCA5MiwgNDIsIDI0MywgMTAxLCA0MiwgCi0gICAgMjQyLCAyMDQsIDQyLCAyNDIsIDIwMCwgNDIsIDIzMywgMTUwLCA0MiwgMjQyLCAxOTMsIDQyLCAyMzQsIDcyLCA0MiwgMjM0LCAKLSAgICA3MSwgNDIsIDIzNCwgNzAsIDQyLCAyMzQsIDY5LCA0MiwgMjQyLCA4NiwgNDIsIDI0MiwgODUsIDQyLCAyMzMsIDE5MywgNDIsIAotICAgIDIzMywgMTk1LCA0MiwgMjM0LCAxNzgsIDQyLCAyMzQsIDEsIDQyLCAyMzQsIDgsIDQyLCAyMjIsIDE2LCA0MiwgMjIxLCAKLSAgICAyMzcsIDQyLCAyMTksIDEyOSwgNDIsIDIyMCwgMTQxLCA0MiwgMjIwLCAxNDAsIDQyLCAyNDgsIDIxOCwgNDIsIDI0OCwgMzYsIAotICAgIDQyLCAyNDcsIDEyMSwgNDIsIDIxNiwgMzIsIDQyLCAyMjksIDIwMCwgNDIsIDIyOCwgNDEsIDQyLCAyNDIsIDMyLCA0MiwgCi0gICAgMjI2LCA4NCwgNDIsIDIyNiwgODMsIDQyLCAyNTIsIDE4OCwgNDIsIDIyNSwgMTA1LCA0MiwgMjI1LCA2OSwgNDIsIDIyNSwgCi0gICAgNzAsIDQyLCAyNTEsIDIzNCwgNDIsIDI0MCwgMjIxLCA0MiwgMjQwLCAyMTcsIDQyLCAyNTEsIDkxLCA0MiwgMjQwLCAyMDQsIAotICAgIDQyLCAyNDEsIDIxNSwgNDIsIDIyNSwgMTU5LCA0MiwgMjI1LCAxOTQsIDQyLCAyNDEsIDE5OCwgNDIsIDIyNSwgMTkxLCA0MiwgCi0gICAgMjI1LCAyMDcsIDQyLCAyNTIsIDYxLCA0MiwgMjI1LCA2LCA0MiwgMjUxLCAxODAsIDQyLCAyNDEsIDU2LCA0MiwgMjI0LCAKLSAgICAyNTAsIDQyLCAyNDEsIDQ4LCA0MiwgMjQxLCA1MCwgNDIsIDIzMSwgMjAxLCA0MiwgMjMxLCAxOTcsIDQyLCAyMzEsIDIwNiwgCi0gICAgNDIsIDIzMSwgMTUwLCA0MiwgMjMxLCAxNzUsIDQyLCAyMzAsIDE5NywgNDIsIDIzMCwgMTc2LCA0MiwgMjMwLCAxNzUsIDQyLCAKLSAgICAyMzEsIDc0LCA0MiwgMjMxLCA3MSwgNDIsIDIzMSwgNzUsIDQyLCAyMTEsIDEwMiwgNDIsIDIxMSwgMTAwLCA0MiwgMjEwLCAKLSAgICAyMDEsIDQyLCAyMjIsIDIyNiwgNDIsIDIyMiwgMjMwLCA0MiwgMjIyLCAxMTcsIDQyLCAyMjIsIDExMSwgNDIsIDIyMywgODUsIAotICAgIDQyLCAyMjMsIDgyLCA0MiwgMjEyLCAzOCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxMCwgODYsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxMTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxMDUsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxNTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxNjEsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxODksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTQsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTUsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMDAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTYsIDI0NywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDI0NSwgMTY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgCi0gICAgMjE1LCA3NiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNiwgMTY0LCAxMDksIDIxNywgMywgMTYsIDMxLCAKLSAgICAyNDAsIDIzOSwgMjQ0LCA1LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjQ0LCAxMTgsIDEwOSwgMjE3LCAzLCAKLSAgICAxNiwgMzEsIDI0MCwgMjM5LCAyMTksIDExOSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIyMCwgMTE5LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjQ1LCAxOTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMjgsIAotICAgIDE5NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNSwgNzMsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgCi0gICAgMjM5LCAyMTUsIDY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE1LCA2MywgMTA5LCAyMTcsIDMsIDE2LCAKLSAgICAzMSwgMjQwLCAyMzksIDIxNSwgNjQsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTUsIDY5LCA0MiwgMjQwLCAKLSAgICAyMzAsIDQyLCAyNDgsIDIyMSwgNDIsIDI1MywgMTkyLCA0MiwgMTMwLCA0MiwgMjI2LCAxMjUsIDQyLCAyMjUsIDIyNSwgNDIsIAotICAgIDI0NywgMTQ3LCA0MiwgMjQ3LCAxNDgsIDIxOCwgMjMzLCA0MiwgMjQ3LCAxNDgsIDI0OSwgMTA4LCA0MiwgMjM1LCAxNTYsIAotICAgIDQyLCAyNDUsIDkxLCAyMjksIDIwNSwgMjQxLCAyMTYsIDQyLCAyNDUsIDkxLCAyMjksIDIwNSwgMjE3LCAxNzQsIDQyLCAKLSAgICAyNDUsIDkxLCAyMjksIDIwNSwgMjE3LCA3NCwgNDIsIDI0NSwgOTEsIDIyOSwgMjA1LCAyMzEsIDcwLCA0MiwgMjQ5LCAxNTcsIAotICAgIDQyLCAyMjYsIDkwLCAyNTQsIDEyNSwgNDIsIDE5NywgNDIsIDIzMCwgMTAzLCA2MSwgNDIsIDE4NCwgNDIsIDE3NiwgNDIsIAotICAgIDIzNCwgMTg1LCA0MiwgMjMxLCAxMjksIDQyLCAyNDMsIDgwLCA0MiwgMjUxLCAxOCwgNDIsIDIzNCwgMTg0LCA0MiwgMjI1LCAKLSAgICAxNTAsIDQyLCAyMjksIDgxLCA0MiwgMjMwLCAxMDMsIDI0NSwgNiwgNDIsIDIzMCwgMTAzLCAyNDMsIDIwMiwgNDIsIDIzMSwgCi0gICAgMTUsIDQyLCAyMzQsIDEzNCwgNDIsIDI0MCwgMTYzLCA0MiwgMjM0LCA5NCwgNDIsIDIzMCwgMjMyLCA0MiwgMjQyLCAyMTYsIAotICAgIDQyLCAyMTYsIDExOSwgNDIsIDIzMCwgMTAzLCAxNTYsIDQyLCAyMzAsIDE2OSwgNDIsIDI0NywgMTU3LCA0MiwgMjM0LCA0MCwgCi0gICAgNDIsIDI0NCwgNDUsIDQyLCAyMjgsIDExMiwgNDIsIDIzMCwgMTAzLCAxOTMsIDQyLCAyMzAsIDE2NiwgNDIsIDI0OSwgMjM5LCAKLSAgICA0MiwgMjM0LCAzNCwgNDIsIDIzMCwgMTY3LCAyMTgsIDIzMywgNDIsIDI0OSwgMjQwLCAyMTgsIDIzMywgNDIsIDIzMiwgNTAsIAotICAgIDIxOCwgMjMzLCA0MiwgMjM0LCAzNSwgMjE4LCAyMzMsIDQyLCAyMzAsIDE2NywgMjQ5LCAxMDgsIDQyLCAyNDksIDI0MCwgCi0gICAgMjQ5LCAxMDgsIDQyLCAyMzIsIDUwLCAyNDksIDEwOCwgNDIsIDIzNCwgMzUsIDI0OSwgMTA4LCA0MiwgMjMyLCA1MCwgMTE3LCAKLSAgICAyMjIsIDkxLCA0MiwgMjMyLCA1MCwgMTE3LCAyMjIsIDkyLCAyMTgsIDIzMywgNDIsIDE5MCwgNDIsIDIzMywgMjUxLCA0MiwgCi0gICAgMjMwLCAxMDUsIDQyLCAyNDIsIDE1MSwgNDIsIDIyMywgMTc2LCA0MiwgMjIzLCAxNzcsIDExNywgMjIyLCA5MSwgNDIsIAotICAgIDIyMywgMTc3LCAxMTcsIDIyMiwgOTIsIDIxOCwgMjMzLCA0MiwgMjI0LCAxNjIsIDQyLCAyMjgsIDEzLCA0MiwgMjMwLCAKLSAgICAxMDMsIDIyMiwgOTEsIDQyLCAyMzAsIDEwNCwgNDIsIDIyNCwgMTE2LCA0MiwgMjI3LCAxNzYsIDQyLCAyMzAsIDEwMywgCi0gICAgMjE0LCAxMDUsIDQyLCAyMzAsIDQ5LCA0MiwgMjMzLCAxODUsIDQyLCAyMzAsIDUwLCAyMzEsIDc0LCA0MiwgMjI0LCAxMTUsIAotICAgIDQyLCAyMjcsIDE3NSwgNDIsIDIzMCwgMTAzLCAyMTIsIDk4LCA0MiwgMjMwLCA0MywgNDIsIDIzMywgMTgzLCA0MiwgMjMwLCAKLSAgICA0NCwgMjMxLCA3NCwgNDIsIDIzNSwgMjQsIDIyNiwgMjIwLCA0MiwgMjMyLCA1MCwgMjI2LCAyMjAsIDQyLCAyNTQsIDEzNiwgCi0gICAgNDIsIDI1MSwgMTYwLCA0MiwgMjUwLCAyMTQsIDQyLCAyNTAsIDE5MSwgNDIsIDI1MSwgNjcsIDExNywgMjM0LCAxMzQsIDQyLCAKLSAgICAyNDksIDIzOCwgNDIsIDI0OCwgMTQyLCA0MiwgMjQyLCA3MiwgNDIsIDE2MiwgNDIsIDI0MCwgMjMxLCA0MiwgMjM1LCAyNTUsIAotICAgIDQyLCAyMzQsIDQ3LCA0MiwgMjM0LCAzNSwgMjUwLCAyNTAsIDQyLCAyMzMsIDIxOSwgNDIsIDIzMiwgMTU5LCA0MiwgMjMyLCAKLSAgICAxNTgsIDQyLCAyMzIsIDE0NywgNDIsIDIzMiwgNjMsIDQyLCAyMzEsIDEzMCwgMjE5LCA3OSwgNDIsIDIzMCwgMTk2LCA0MiwgCi0gICAgMjMwLCAxNTIsIDQyLCAyMjUsIDE0OCwgNDIsIDIyNSwgMTksIDQyLCAyMjQsIDIxOSwgNDIsIDIyNCwgMjE3LCA0MiwgMjE4LCAKLSAgICAyMjcsIDQyLCAyMTgsIDIsIDQyLCAyMTIsIDI0LCA0MiwgMjE0LCAxMDYsIDExNywgMTkzLCA0MiwgMTE1LCAxMTcsIDE5MywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDExMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDEwNSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE1OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE2MSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE4OSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5NCwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5NSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIwMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNiwgCi0gICAgMjQ3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjQ1LCAxNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgCi0gICAgMTQ2LCAyMTUsIDc2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE2LCAxNjQsIDEwOSwgMjE3LCAzLCAxNiwgCi0gICAgMzEsIDI0OCwgMTQ2LCAyNDQsIDUsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyNDQsIDExOCwgMTA5LCAyMTcsIAotICAgIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxOSwgMTE5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjIwLCAxMTksIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyNDUsIDE5MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIAotICAgIDIyOCwgMTk3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA3MywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgCi0gICAgMjQ4LCAxNDYsIDIxNSwgNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDYzLCAxMDksIDIxNywgMywgCi0gICAgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2NCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjksIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDcwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCAKLSAgICA2NSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgCi0gICAgMTQ2LCAyMTUsIDcyLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2OCwgMTA5LCAyMTcsIDMsIDE2LCAKLSAgICAzMSwgMjQ4LCAxNDYsIDIxNiwgMTYyLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE2LCAxNjEsIDQyLCAyNDMsIAotICAgIDExOCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjQ5LCAxNDAsIDI0MSwgMjIzLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAKLSAgICAyMjMsIDEyMiwgMjQ1LCAyMjMsIDI0MSwgMTkyLCAzMSwgMjQ3LCAyMzEsIDI1MywgMjA3LCAyMTYsIDE5NiwgMjUyLCA1NiwgCi0gICAgMjQxLCAxOTIsIDMxLCAyMTAsIDIyMywgMjQ0LCAzOCwgMjQxLCAxOTIsIDMxLCAyMTIsIDU5LCAyNDEsIDE5MiwgMzEsIAotICAgIDI0OSwgMjAzLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTQsIDMsIDI0MSwgMTkyLCAzMSwgMjQxLCA2MCwgMjE2LCAzOCwgCi0gICAgMjQxLCAxOTIsIDMxLCA0LCAyMTcsIDYxLCAyNDEsIDE5MiwgMzEsIDIxNSwgMjM3LCAyNDEsIDE5MiwgMzEsIDIyNSwgMjE5LCAKLSAgICAyNDEsIDE5MiwgMzEsIDIxOCwgMTU4LCAyNDEsIDE5MiwgMzEsIDI0NCwgMTM5LCAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAKLSAgICAyMjQsIDI0MCwgMjQxLCAxOTIsIDMxLCAyMzAsIDE1NSwgMjQxLCAxOTIsIDMxLCAyNDUsIDEyNiwgMjQxLCAxOTIsIDMxLCAKLSAgICAyNDQsIDM5LCAyNDEsIDE5MiwgMzEsIDIxMSwgMjA3LCAyMjYsIDE5NywgMjE2LCAxOTYsIDI0OCwgODYsIDI0MSwgMTkyLCAKLSAgICAzMSwgMjU0LCA1MSwgMjQxLCAxOTIsIDMxLCAyNDksIDE4NSwgMjQxLCAxOTIsIDMxLCAyNTEsIDIyNywgMjE2LCAxMzgsIAotICAgIDI0MSwgMTkyLCAzMSwgMjQyLCAxNDksIDI0MSwgMTkyLCAzMSwgMjE4LCAyNDUsIDI1NCwgNzAsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjIzLCA1MywgMjQxLCAxOTIsIDMxLCAyMzUsIDIyMCwgMjQxLCAxOTIsIDMxLCAyNDIsIDEzMiwgMjE3LCA2MSwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMzAsIDExMSwgMjQ5LCAxNTksIDI0MSwgMTkyLCAzMSwgMjQyLCAxMzIsIDIyNCwgMTk3LCAyNDEsIDE5MiwgCi0gICAgMzEsIDIxNiwgMTk2LCAyNTUsIDE4LCAyMTIsIDQwLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTAsIDgsIDI0NCwgOTYsIAotICAgIDI0MSwgMTkyLCAzMSwgMjM1LCAyMzMsIDI0MSwgMTkyLCAzMSwgMjQ2LCA1NywgMjQxLCAxOTIsIDMxLCAyMjMsIDU2LCAKLSAgICAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAyMjQsIDIyNCwgMjQxLCAxOTIsIDMxLCAyMjQsIDE3NywgMjQxLCAxOTIsIDMxLCAKLSAgICAyNDgsIDE2MSwgNjQsIDIxNiwgMTk2LCAyMzIsIDIzMCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjQ0LCAxNzQsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjI2LCAxNjMsIDI0MSwgMTkyLCAzMSwgMjI2LCAyNDQsIDI0MSwgMTkyLCAzMSwgMjQ4LCA1OSwgMjQxLCAKLSAgICAxOTIsIDMxLCAyNDgsIDc5LCAyNDEsIDE5MiwgMzEsIDIzNSwgMjQ3LCAyNDEsIDE5MiwgMzEsIDI1MSwgMTQ5LCAyNDEsIAotICAgIDE5MiwgMzEsIDI0OSwgMjIxLCAyMTYsIDQyLCAyMzEsIDc2LCAyNDEsIDE5MiwgMzEsIDI0MywgODcsIDIxNiwgMzgsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjI0LCAxMjUsIDIxNCwgMTU0LCAyNDEsIDE5MiwgMzEsIDIyNiwgMTYyLCAyNDEsIDE5MiwgMzEsIDIxNiwgCi0gICAgMTk2LCAyMTIsIDEzLCAyNDEsIDE5MiwgMzEsIDIyMywgNDUsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI1MCwgMjIwLCAKLSAgICAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTMsIDI1NSwgMjE2LCAxMzMsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDIzNCwgCi0gICAgMTc5LCAyMTgsIDEzNCwgMjMwLCAxMTUsIDI0MSwgMTkyLCAzMSwgMjQ4LCAzMiwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgCi0gICAgMjMxLCAxNTIsIDIzMSwgMjAyLCAyNDEsIDE5MiwgMzEsIDI1NSwgMTksIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDIxMiwgCi0gICAgNTQsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI0MywgNDcsIDIxMSwgMjM5LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAKLSAgICAyMzUsIDUyLCAyMzMsIDEwNywgMjQxLCAxOTIsIDMxLCAyNDcsIDE4NCwgMjQxLCAxOTIsIDMxLCAyMzIsIDIyMCwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMzUsIDIyMywgMjE1LCAxODcsIDI0MSwgMTkyLCAzMSwgNCwgMjI0LCAxOTcsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjU0LCAyMTcsIDI0OSwgMjEyLCAyNDEsIDE5MiwgMzEsIDI1MiwgNTksIDI0OSwgMjEyLCA4LCAzLCAyMzUsIDE2MCwgOCwgCi0gICAgMywgMjM1LCAxNTMsIDgsIDMsIDczLCA4LCAzLCAyMzUsIDE4MiwgOCwgMywgMjM2LCA1OCwgOCwgMywgMjM2LCA0MSwgOCwgCi0gICAgMywgMjM2LCA2MCwgOCwgMywgMjM2LCA1OSwgOCwgMywgMjUzLCAyMDYsIDgsIDMsIDI1MywgMTY5LCA4LCAzLCA2MSwgOCwgCi0gICAgMywgMjU0LCA3MiwgOCwgMywgMjE0LCAxNjQsIDgsIDMsIDIxNCwgMTY3LCA4LCAzLCAyMTQsIDE2NSwgOCwgMywgMjI2LCAKLSAgICAxNDAsIDgsIDMsIDIyNiwgMTE0LCA4LCAzLCA3NiwgOCwgMywgMjI2LCAxNzUsIDgsIDMsIDI0NSwgMzUsIDgsIDMsIDc1LCAKLSAgICA4LCAzLCAyMTEsIDE5NSwgOCwgMywgMjUxLCAyMjgsIDgsIDMsIDI1MSwgMjI1LCA4LCAzLCAyNTIsIDYsIDgsIDMsIDI1MSwgCi0gICAgMjM4LCA4LCAzLCAyNTEsIDI1MSwgOCwgMywgMjUxLCAyNTAsIDgsIDMsIDI1MSwgMjUzLCA4LCAzLCAyNTEsIDI1MiwgOCwgCi0gICAgMywgMjUyLCAxMjEsIDgsIDMsIDI1MiwgMTEzLCA4LCAzLCAyNTIsIDE5MSwgOCwgMywgMjUyLCAxNDIsIDgsIDMsIDI1MSwgCi0gICAgMTAxLCA4LCAzLCAyNTEsIDEwNSwgOCwgMywgMjUxLCAxMDIsIDgsIDMsIDI1MSwgMTc5LCA4LCAzLCAyNTEsIDE2MywgOCwgCi0gICAgMywgMjUxLCAyMDUsIDgsIDMsIDI1MSwgMTg1LCA4LCAzLCAyNTIsIDIxLCA4LCAzLCAyNTIsIDc1LCA4LCAzLCAyNTIsIDMzLCAKLSAgICA4LCAzLCAyNTEsIDg3LCA4LCAzLCAyNTEsIDg0LCA4LCAzLCAyNTEsIDEyNSwgOCwgMywgMjUxLCAxMDAsIDgsIDMsIDI1MSwgCi0gICAgOTQsIDgsIDMsIDI1MSwgOTgsIDgsIDMsIDI1MSwgNzIsIDgsIDMsIDI1MSwgNzAsIDgsIDMsIDI1MSwgNzcsIDgsIDMsIAotICAgIDI1MSwgNzUsIDgsIDMsIDI1MSwgNzMsIDgsIDMsIDI1MSwgNzQsIDgsIDMsIDIyNSwgNDksIDgsIDMsIDIyNSwgNDUsIDgsIAotICAgIDMsIDIyNSwgMTA4LCA4LCAzLCAyMjUsIDU5LCA4LCAzLCAyMjUsIDc1LCA4LCAzLCAyMjUsIDEwMiwgOCwgMywgMjI1LCA5OCwgCi0gICAgOCwgMywgMjI1LCAyNDAsIDgsIDMsIDIyNSwgMjMwLCA4LCAzLCAxOTAsIDgsIDMsIDIyNiwgMjEsIDgsIDMsIDIyNCwgMTM1LCAKLSAgICA4LCAzLCAyMjQsIDEzNywgOCwgMywgMjI0LCAxMzYsIDgsIDMsIDIyNCwgMjMzLCA4LCAzLCAyMjQsIDIyMiwgOCwgMywgCi0gICAgMjI1LCAxNiwgOCwgMywgMjI0LCAyNDUsIDgsIDMsIDIyNCwgMTIxLCA4LCAzLCAyMjQsIDExNywgOCwgMywgMjI0LCAxNTAsIAotICAgIDgsIDMsIDIyNCwgMTM0LCA4LCAzLCAyMjQsIDEyNiwgOCwgMywgMjI0LCAxMzIsIDgsIDMsIDIyNCwgMTAwLCA4LCAzLCAKLSAgICAyMjQsIDk5LCA4LCAzLCAyMjQsIDEwNCwgOCwgMywgMjI0LCAxMDMsIDgsIDMsIDIyNCwgMTAxLCA4LCAzLCAyMjQsIDEwMiwgCi0gICAgOCwgMywgMjUyLCA5NiwgOCwgMywgMjUyLCA5NSwgOCwgMywgMjUyLCAxMDIsIDgsIDMsIDI1MiwgOTcsIDgsIDMsIDI1MiwgCi0gICAgOTksIDgsIDMsIDI1MiwgOTgsIDgsIDMsIDI1MiwgMTAxLCA4LCAzLCAyNTIsIDEwMCwgOCwgMywgMjUyLCAxMDgsIDgsIDMsIAotICAgIDI1MiwgMTA3LCA4LCAzLCAyNTIsIDExMSwgOCwgMywgMjUyLCAxMDksIDgsIDMsIDI1MiwgODcsIDgsIDMsIDI1MiwgODksIAotICAgIDgsIDMsIDI1MiwgODgsIDgsIDMsIDI1MiwgOTIsIDgsIDMsIDI1MiwgOTEsIDgsIDMsIDI1MiwgOTQsIDgsIDMsIDI1MiwgCi0gICAgOTMsIDgsIDMsIDI1MiwgMTAzLCA4LCAzLCAyNTIsIDEwNiwgOCwgMywgMjUyLCAxMDQsIDgsIDMsIDI1MiwgODMsIDgsIDMsIAotICAgIDI1MiwgODIsIDgsIDMsIDI1MiwgOTAsIDgsIDMsIDI1MiwgODYsIDgsIDMsIDI1MiwgODQsIDgsIDMsIDI1MiwgODUsIDgsIAotICAgIDMsIDI1MiwgNzksIDgsIDMsIDI1MiwgNzgsIDgsIDMsIDI1MiwgODEsIDgsIDMsIDI1MiwgODAsIDgsIDMsIDIyOSwgMTY5LCAKLSAgICA4LCAzLCAyMjksIDE2OCwgOCwgMywgMjI5LCAxNzQsIDgsIDMsIDIyOSwgMTcwLCA4LCAzLCAyMjksIDE3MSwgOCwgMywgCi0gICAgMjI5LCAxNzMsIDgsIDMsIDIyOSwgMTcyLCA4LCAzLCAyMjksIDE3NywgOCwgMywgMjI5LCAxNzYsIDgsIDMsIDIyOSwgMTc5LCAKLSAgICA4LCAzLCAyMjksIDE3OCwgOCwgMywgMjI5LCAxNjUsIDgsIDMsIDIyOSwgMTY0LCA4LCAzLCAyMjksIDE2NywgOCwgMywgCi0gICAgMjI5LCAxNjYsIDgsIDMsIDIyOSwgMTU4LCA4LCAzLCAyMjksIDE1NywgOCwgMywgMjI5LCAxNjIsIDgsIDMsIDIyOSwgMTYxLCAKLSAgICA4LCAzLCAyMjksIDE1OSwgOCwgMywgMjI5LCAxNjAsIDgsIDMsIDIyOSwgMTUyLCA4LCAzLCAyMjksIDE1MSwgOCwgMywgCi0gICAgMjI5LCAxNTYsIDgsIDMsIDIyOSwgMTU1LCA4LCAzLCAyMjksIDE1MywgOCwgMywgMjI5LCAxNTQsIDgsIDMsIDI0MSwgMTEwLCAKLSAgICA4LCAzLCAyNDEsIDEwOSwgOCwgMywgMjQxLCAxMTUsIDgsIDMsIDI0MSwgMTExLCA4LCAzLCAyNDEsIDExMiwgOCwgMywgCi0gICAgMjQxLCAxMTQsIDgsIDMsIDI0MSwgMTEzLCA4LCAzLCAyNDEsIDExOCwgOCwgMywgMjQxLCAxMTcsIDgsIDMsIDI0MSwgMTIwLCAKLSAgICA4LCAzLCAyNDEsIDExOSwgOCwgMywgMjQxLCAxMDEsIDgsIDMsIDI0MSwgMTAzLCA4LCAzLCAyNDEsIDEwMiwgOCwgMywgCi0gICAgMjQxLCAxMDYsIDgsIDMsIDI0MSwgMTA1LCA4LCAzLCAyNDEsIDEwOCwgOCwgMywgMjQxLCAxMDcsIDgsIDMsIDI0MSwgOTcsIAotICAgIDgsIDMsIDI0MSwgOTYsIDgsIDMsIDI0MSwgMTA0LCA4LCAzLCAyNDEsIDEwMCwgOCwgMywgMjQxLCA5OCwgOCwgMywgMjQxLCAKLSAgICA5OSwgOCwgMywgMjQxLCA5MSwgOCwgMywgMjQxLCA5NSwgOCwgMywgMjQxLCA5NCwgOCwgMywgMjQxLCA5MiwgOCwgMywgCi0gICAgMjQxLCA5MywgOCwgMywgMjMwLCAxNzIsIDgsIDMsIDIzMCwgMTcxLCA4LCAzLCAyMzAsIDIzMCwgOCwgMywgMjMwLCAxNzgsIAotICAgIDgsIDMsIDIzMCwgMjAzLCA4LCAzLCAyMzAsIDIyMSwgOCwgMywgMjMwLCAyMTksIDgsIDMsIDIzMSwgMTM5LCA4LCAzLCAKLSAgICAyMzEsIDEzNCwgOCwgMywgMTg0LCA4LCAzLCAyMzEsIDE3MiwgOCwgMywgMjMwLCA3NCwgOCwgMywgMjMwLCA3MywgOCwgMywgCi0gICAgMjMwLCA3NywgOCwgMywgMjMwLCA3NSwgOCwgMywgMjMwLCAxMjEsIDgsIDMsIDIzMCwgMTA3LCA4LCAzLCAyMzAsIDE2MSwgCi0gICAgOCwgMywgMjMwLCAxMjYsIDgsIDMsIDIzMSwgMjYsIDgsIDMsIDIzMSwgOTEsIDgsIDMsIDIzMCwgNTUsIDgsIDMsIDIzMCwgCi0gICAgNTEsIDgsIDMsIDIzMCwgMTAyLCA4LCAzLCAyMzAsIDcwLCA4LCAzLCAyMzAsIDYzLCA4LCAzLCAyMzAsIDY4LCA4LCAzLCAKLSAgICAyMzAsIDI4LCA4LCAzLCAyMzAsIDI3LCA4LCAzLCAyMzAsIDMzLCA4LCAzLCAyMzAsIDMwLCA4LCAzLCAyNDQsIDgzLCA4LCAKLSAgICAzLCAyNDQsIDc4LCA4LCAzLCAyNDQsIDEyMSwgOCwgMywgMjQ0LCA5OCwgOCwgMywgMjQ0LCAxNjcsIDgsIDMsIDI0NCwgCi0gICAgMTU4LCA4LCAzLCAyNDQsIDE5NiwgOCwgMywgMjQ0LCAxNzAsIDgsIDMsIDI0NCwgMywgOCwgMywgMjQ0LCA0MywgOCwgMywgCi0gICAgMjQ0LCAyNywgOCwgMywgMjQzLCAyMTgsIDgsIDMsIDI0MywgMjE3LCA4LCAzLCAyNDMsIDIzNCwgOCwgMywgMjQzLCAyMjMsIAotICAgIDgsIDMsIDI0MywgMjIxLCA4LCAzLCAyNDMsIDIyMiwgOCwgMywgMjQzLCAyMDUsIDgsIDMsIDI0MywgMjA0LCA4LCAzLCAKLSAgICAyNDMsIDIwOCwgOCwgMywgMjQzLCAyMDYsIDgsIDMsIDIxMywgMTQ0LCA4LCAzLCAyMTMsIDEzOSwgOCwgMywgMjEzLCAxNzYsIAotICAgIDgsIDMsIDIxMywgMTUzLCA4LCAzLCAyMTMsIDE2NiwgOCwgMywgMjEzLCAxNjMsIDgsIDMsIDIxMywgMTY4LCA4LCAzLCAKLSAgICAyMTMsIDE2NywgOCwgMywgMjE0LCA3LCA4LCAzLCAyMTQsIDIsIDgsIDMsIDIxNCwgMjcsIDgsIDMsIDIxNCwgMTgsIDgsIDMsIAotICAgIDIxMywgMTI1LCA4LCAzLCAyMTMsIDEyMSwgOCwgMywgMjEzLCAxMzgsIDgsIDMsIDIxMywgMTI2LCA4LCAzLCAyMTMsIDE3OCwgCi0gICAgOCwgMywgMjEzLCAyNDQsIDgsIDMsIDIxMiwgMTEwLCA4LCAzLCAyMTIsIDEwOCwgOCwgMywgMjEyLCAxMTYsIDgsIDMsIAotICAgIDIxMiwgMTEzLCA4LCAzLCAyMTIsIDExMSwgOCwgMywgMjEyLCAxMTIsIDgsIDMsIDIxMiwgMTAyLCA4LCAzLCAyMTIsIDEwMSwgCi0gICAgOCwgMywgMjEyLCAxMDYsIDgsIDMsIDIxMiwgMTA1LCA4LCAzLCAyMTIsIDEwMywgOCwgMywgMjEyLCAxMDQsIDgsIDMsIAotICAgIDI0NywgMTc4LCA4LCAzLCAyNDcsIDE2NiwgOCwgMywgMjQ4LCAzLCA4LCAzLCAyNDcsIDIwMywgOCwgMywgMjQ3LCAyMzYsIAotICAgIDgsIDMsIDI0NywgMjQwLCA4LCAzLCAyNDcsIDIzOSwgOCwgMywgMjQ4LCAxNTIsIDgsIDMsIDI0OCwgMTQ3LCA4LCAzLCAKLSAgICAyNDgsIDIyMSwgOCwgMywgMjQ4LCAxNzIsIDgsIDMsIDI0NiwgNjIsIDgsIDMsIDI0NiwgNjMsIDgsIDMsIDI0NywgMTIwLCAKLSAgICA4LCAzLCAyNDYsIDEwMiwgOCwgMywgMjQ3LCAxNDUsIDgsIDMsIDI0NywgMTIyLCA4LCAzLCAyNDgsIDMwLCA4LCAzLCAyNDgsIAotICAgIDkwLCA4LCAzLCAyNDgsIDQ1LCA4LCAzLCAyNDYsIDUzLCA4LCAzLCAyNDYsIDUxLCA4LCAzLCAyNDYsIDc4LCA4LCAzLCAKLSAgICAyNDYsIDYxLCA4LCAzLCAyNDYsIDU2LCA4LCAzLCAyNDYsIDU5LCA4LCAzLCAyMTYsIDY3LCA4LCAzLCAyMTYsIDYxLCA4LCAKLSAgICAzLCAyMTYsIDExNywgOCwgMywgMjE2LCA3NiwgOCwgMywgMjE2LCAxMDksIDgsIDMsIDIxNiwgMTExLCA4LCAzLCAyMTYsIAotICAgIDExMCwgOCwgMywgMjE3LCA0NiwgOCwgMywgMjE3LCAzMywgOCwgMywgMjE3LCAxMDUsIDgsIDMsIDIxNywgNTQsIDgsIDMsIAotICAgIDIxNSwgMTAyLCA4LCAzLCAyMTUsIDEwMSwgOCwgMywgMjE1LCAxMDQsIDgsIDMsIDIxNSwgMTAzLCA4LCAzLCAyMTYsIDUsIAotICAgIDgsIDMsIDIxNiwgMSwgOCwgMywgMTExLCA4LCAzLCAyMTYsIDEzLCA4LCAzLCAyMTYsIDIxMywgOCwgMywgMjE3LCAyMiwgOCwgCi0gICAgMywgMjE2LCAyMzcsIDgsIDMsIDIxNSwgODgsIDgsIDMsIDIxNSwgODMsIDgsIDMsIDIxNSwgMTE4LCA4LCAzLCAyMTUsIAotICAgIDEwMCwgOCwgMywgMjE1LCA4OSwgOCwgMywgMjE1LCA5OCwgOCwgMywgMjQ4LCAxMDcsIDgsIDMsIDI0OCwgMTA2LCA4LCAzLCAKLSAgICAyNDgsIDExMiwgOCwgMywgMjQ4LCAxMDgsIDgsIDMsIDI0OCwgMTA5LCA4LCAzLCAyNDgsIDExMSwgOCwgMywgMjQ4LCAxMTAsIAotICAgIDgsIDMsIDI0OCwgMTI4LCA4LCAzLCAyNDgsIDEyNywgOCwgMywgMjQ4LCAxMzUsIDgsIDMsIDI0OCwgMTI5LCA4LCAzLCAKLSAgICAyNDgsIDk3LCA4LCAzLCAyNDgsIDk5LCA4LCAzLCAyNDgsIDk4LCA4LCAzLCAyNDgsIDEwMiwgOCwgMywgMjQ4LCAxMDEsIDgsIAotICAgIDMsIDI0OCwgMTA1LCA4LCAzLCAyNDgsIDEwMywgOCwgMywgMjQ4LCAxMjAsIDgsIDMsIDI0OCwgMTIzLCA4LCAzLCAyNDgsIAotICAgIDEyMSwgOCwgMywgMjQ4LCA5MywgOCwgMywgMjQ4LCA5MiwgOCwgMywgMjQ4LCAxMDAsIDgsIDMsIDI0OCwgOTYsIDgsIDMsIAotICAgIDI0OCwgOTQsIDgsIDMsIDI0OCwgOTUsIDgsIDMsIDIyOSwgMTI2LCA4LCAzLCAyMjksIDEyNSwgOCwgMywgMjI5LCAxMzMsIAotICAgIDgsIDMsIDIyOSwgMTI4LCA4LCAzLCAyMjksIDEyOSwgOCwgMywgMjI5LCAxMzAsIDgsIDMsIDIyOSwgMTQyLCA4LCAzLCAKLSAgICAyMjksIDE0MSwgOCwgMywgMjI5LCAxNDgsIDgsIDMsIDIyOSwgMTQzLCA4LCAzLCAyMjksIDExOCwgOCwgMywgMjI5LCAxMTcsIAotICAgIDgsIDMsIDIyOSwgMTI0LCA4LCAzLCAyMjksIDExOSwgOCwgMywgMjI5LCAxMzQsIDgsIDMsIDIyOSwgMTQwLCA4LCAzLCAKLSAgICAyMjksIDEzOCwgOCwgMywgMjI5LCAxMTAsIDgsIDMsIDIyOSwgMTA5LCA4LCAzLCAyMjksIDExNSwgOCwgMywgMjI5LCAxMTMsIAotICAgIDgsIDMsIDIyOSwgMTExLCA4LCAzLCAyMjksIDExMiwgOCwgMywgMjQxLCA3NywgOCwgMywgMjQxLCA3NiwgOCwgMywgMjQxLCAKLSAgICA4MywgOCwgMywgMjQxLCA3OCwgOCwgMywgMjQxLCA4MCwgOCwgMywgMjQxLCA3OSwgOCwgMywgMjQxLCA4MiwgOCwgMywgCi0gICAgMjQxLCA4MSwgOCwgMywgMjQxLCA4OCwgOCwgMywgMjQxLCA4NywgOCwgMywgMjQxLCA5MCwgOCwgMywgMjQxLCA4OSwgOCwgCi0gICAgMywgMjQxLCA3MSwgOCwgMywgMjQxLCA3MiwgOCwgMywgMjQxLCA3NCwgOCwgMywgMjQxLCA3MywgOCwgMywgMjQxLCA3NSwgCi0gICAgOCwgMywgMjQxLCA4NCwgOCwgMywgMjQxLCA4NiwgOCwgMywgMjQxLCA4NSwgOCwgMywgMjQxLCA3MCwgOCwgMywgMjI4LCAKLSAgICAxODksIDgsIDMsIDIyOCwgMTg3LCA4LCAzLCAyMjgsIDIzMywgOCwgMywgMjI4LCAxOTIsIDgsIDMsIDIyOCwgMjE1LCA4LCAKLSAgICAzLCAyMjgsIDIyOSwgOCwgMywgMjI4LCAyMjgsIDgsIDMsIDIyOSwgMTgzLCA4LCAzLCAxOTcsIDgsIDMsIDIyOSwgMTk3LCAKLSAgICA4LCAzLCAyMjcsIDE4NiwgOCwgMywgMjI3LCAxODgsIDgsIDMsIDIyNywgMTg3LCA4LCAzLCAyMjgsIDUxLCA4LCAzLCAyMjgsIAotICAgIDM4LCA4LCAzLCAyMjgsIDc0LCA4LCAzLCAyMjgsIDYwLCA4LCAzLCAyMjksIDgzLCA4LCAzLCAyMjksIDEwNywgOCwgMywgCi0gICAgMjI5LCA5NCwgOCwgMywgMjI3LCAxODEsIDgsIDMsIDIyNywgMTc3LCA4LCAzLCAyMjcsIDIzNywgOCwgMywgMjI3LCAxODUsIAotICAgIDgsIDMsIDIyNywgMTgzLCA4LCAzLCAyMjcsIDE4NCwgOCwgMywgMjQxLCAxNDEsIDgsIDMsIDI0MSwgMTQwLCA4LCAzLCAKLSAgICAyNDEsIDE0NiwgOCwgMywgMjQxLCAxNDIsIDgsIDMsIDI0MSwgMTQzLCA4LCAzLCAyNDEsIDE0NSwgOCwgMywgMjQxLCAxNDQsIAotICAgIDgsIDMsIDI0MSwgMTUxLCA4LCAzLCAyNDEsIDE1MCwgOCwgMywgMjQxLCAxNTMsIDgsIDMsIDI0MSwgMTUyLCA4LCAzLCAKLSAgICAyNDEsIDEzMywgOCwgMywgMjQxLCAxMzUsIDgsIDMsIDI0MSwgMTM0LCA4LCAzLCAyNDEsIDEzNywgOCwgMywgMjQxLCAxMzksIAotICAgIDgsIDMsIDI0MSwgMTM4LCA4LCAzLCAyNDEsIDE0NywgOCwgMywgMjQxLCAxNDksIDgsIDMsIDI0MSwgMTQ4LCA4LCAzLCAKLSAgICAyNDEsIDEyOSwgOCwgMywgMjQxLCAxMjgsIDgsIDMsIDI0MSwgMTM2LCA4LCAzLCAyNDEsIDEzMiwgOCwgMywgMjQxLCAxMzAsIAotICAgIDgsIDMsIDI0MSwgMTMxLCA4LCAzLCAyNDEsIDEyMywgOCwgMywgMjQxLCAxMjIsIDgsIDMsIDI0MSwgMTI3LCA4LCAzLCAKLSAgICAyNDEsIDEyNiwgOCwgMywgMjQxLCAxMjQsIDgsIDMsIDI0MSwgMTI1LCA4LCAzLCAyMzIsIDE5NSwgOCwgMywgMjMyLCAxODksIAotICAgIDgsIDMsIDIzMiwgMjQxLCA4LCAzLCAyMzIsIDIwMiwgOCwgMywgMjMyLCAyMzMsIDgsIDMsIDIzMiwgMjMyLCA4LCAzLCAKLSAgICAyMzIsIDIzNiwgOCwgMywgMjMyLCAyMzQsIDgsIDMsIDIzMywgNzksIDgsIDMsIDIzMywgNjksIDgsIDMsIDIzMywgMTM1LCAKLSAgICA4LCAzLCAyMzMsIDg4LCA4LCAzLCAyMzIsIDc5LCA4LCAzLCAyMzIsIDc4LCA4LCAzLCAyMzIsIDgxLCA4LCAzLCAyMzIsIAotICAgIDgwLCA4LCAzLCAyMzIsIDExNiwgOCwgMywgMjMyLCAxMDYsIDgsIDMsIDIzMiwgMTU2LCA4LCAzLCAyMzIsIDEyMCwgOCwgMywgCi0gICAgMjMzLCAyLCA4LCAzLCAyMzMsIDU4LCA4LCAzLCAyMzMsIDE3LCA4LCAzLCAyMzIsIDc0LCA4LCAzLCAyMzIsIDcyLCA4LCAzLCAKLSAgICAyMzIsIDk4LCA4LCAzLCAyMzIsIDc3LCA4LCAzLCAyMzIsIDc1LCA4LCAzLCAyMzIsIDc2LCA4LCAzLCAyMzIsIDU0LCA4LCAKLSAgICAzLCAyMzIsIDUzLCA4LCAzLCAyMzIsIDYyLCA4LCAzLCAyMzIsIDU3LCA4LCAzLCAyMzIsIDU1LCA4LCAzLCAyMzIsIDU2LCAKLSAgICA4LCAzLCAyNDIsIDE4OSwgOCwgMywgMjQyLCAxODgsIDgsIDMsIDI0MiwgMjE0LCA4LCAzLCAyNDIsIDE5OSwgOCwgMywgCi0gICAgMjQyLCAyMDYsIDgsIDMsIDI0MiwgMjA1LCA4LCAzLCAyNDIsIDIwOCwgOCwgMywgMjQyLCAyMDcsIDgsIDMsIDI0MywgODksIAotICAgIDgsIDMsIDI0MywgODQsIDgsIDMsIDI0MywgMTM1LCA4LCAzLCAyNDMsIDk5LCA4LCAzLCAyNDIsIDkxLCA4LCAzLCAyNDIsIAotICAgIDkwLCA4LCAzLCAyNDIsIDkzLCA4LCAzLCAyNDIsIDkyLCA4LCAzLCAyNDIsIDE1NCwgOCwgMywgMjQyLCAxNTIsIDgsIDMsIAotICAgIDI0MiwgMTc0LCA4LCAzLCAyNDIsIDE2MiwgOCwgMywgMjQzLCAzMywgOCwgMywgMjQzLCAzMSwgOCwgMywgMjQzLCA2MiwgOCwgCi0gICAgMywgMjQzLCA0NCwgOCwgMywgMjQyLCA4MSwgOCwgMywgMjQyLCA4MCwgOCwgMywgMjQyLCAxMTMsIDgsIDMsIDI0MiwgODksIAotICAgIDgsIDMsIDI0MiwgODIsIDgsIDMsIDI0MiwgODgsIDgsIDMsIDIzNCwgNjEsIDgsIDMsIDIzNCwgNjAsIDgsIDMsIDIzNCwgCi0gICAgOTIsIDgsIDMsIDIzNCwgNzUsIDgsIDMsIDIzNCwgODUsIDgsIDMsIDIzNCwgODgsIDgsIDMsIDIzNCwgODYsIDgsIDMsIAotICAgIDIzNCwgMjAyLCA4LCAzLCAyMzQsIDE5MCwgOCwgMywgMTc2LCA4LCAzLCAyMzQsIDIyOCwgOCwgMywgMjMzLCAyMDAsIDgsIAotICAgIDMsIDIzMywgMjA1LCA4LCAzLCAyMzMsIDIwMiwgOCwgMywgMjM0LCAwLCA4LCAzLCAyMzMsIDI1MiwgOCwgMywgMjM0LCAyOCwgCi0gICAgOCwgMywgMjM0LCA3LCA4LCAzLCAyMzQsIDE1NiwgOCwgMywgMjM0LCAxNDAsIDgsIDMsIDIzNCwgMTgyLCA4LCAzLCAyMzQsIAotICAgIDE1OSwgOCwgMywgMjMzLCAxODksIDgsIDMsIDIzMywgMTg2LCA4LCAzLCAyMzMsIDIxNywgOCwgMywgMjMzLCAxOTksIDgsIAotICAgIDMsIDIzMywgMTkyLCA4LCAzLCAyMzMsIDE5NiwgOCwgMywgMjQzLCAxNSwgOCwgMywgMjQzLCAxNCwgOCwgMywgMjQzLCAxOSwgCi0gICAgOCwgMywgMjQzLCAxNiwgOCwgMywgMjQzLCAxOCwgOCwgMywgMjQzLCAxNywgOCwgMywgMjQzLCAyNiwgOCwgMywgMjQzLCAKLSAgICAyNSwgOCwgMywgMjQzLCAyOSwgOCwgMywgMjQzLCAyNywgOCwgMywgMjQzLCA2LCA4LCAzLCAyNDMsIDUsIDgsIDMsIDI0MywgCi0gICAgOCwgOCwgMywgMjQzLCA3LCA4LCAzLCAyNDMsIDExLCA4LCAzLCAyNDMsIDEwLCA4LCAzLCAyNDMsIDEzLCA4LCAzLCAyNDMsIAotICAgIDEyLCA4LCAzLCAyNDMsIDIxLCA4LCAzLCAyNDMsIDIwLCA4LCAzLCAyNDMsIDI0LCA4LCAzLCAyNDMsIDIyLCA4LCAzLCAKLSAgICAyNDMsIDEsIDgsIDMsIDI0MywgMCwgOCwgMywgMjQzLCA5LCA4LCAzLCAyNDMsIDQsIDgsIDMsIDI0MywgMiwgOCwgMywgCi0gICAgMjQzLCAzLCA4LCAzLCAyMzAsIDI0OSwgOCwgMywgMjMwLCAyNTAsIDgsIDMsIDIzMSwgMTIsIDgsIDMsIDIzMSwgMTEsIDgsIAotICAgIDMsIDIzMSwgMTQsIDgsIDMsIDIzMSwgMTMsIDgsIDMsIDIzMCwgMjQwLCA4LCAzLCAyMzAsIDI0MiwgOCwgMywgMjMwLCAKLSAgICAyNDEsIDgsIDMsIDIzMCwgMjQ1LCA4LCAzLCAyMzAsIDI0NCwgOCwgMywgMjMwLCAyNDcsIDgsIDMsIDIzMCwgMjQ2LCA4LCAKLSAgICAzLCAyMzAsIDI1MSwgOCwgMywgMjMwLCAyNTMsIDgsIDMsIDIzMCwgMjUyLCA4LCAzLCAyMzAsIDIzNiwgOCwgMywgMjMwLCAKLSAgICAyMzUsIDgsIDMsIDIzMCwgMjQzLCA4LCAzLCAyMzAsIDIzOSwgOCwgMywgMjMwLCAyMzcsIDgsIDMsIDIzMCwgMjM4LCA4LCAKLSAgICAzLCAyNDAsIDE4MCwgOCwgMywgMjQwLCAxNzksIDgsIDMsIDI0MCwgMTg2LCA4LCAzLCAyNDAsIDE4MSwgOCwgMywgMjQwLCAKLSAgICAxODMsIDgsIDMsIDI0MCwgMTgyLCA4LCAzLCAyNDAsIDE4NSwgOCwgMywgMjQwLCAxODQsIDgsIDMsIDI0MCwgMTkxLCA4LCAKLSAgICAzLCAyNDAsIDE5MCwgOCwgMywgMjQwLCAxOTMsIDgsIDMsIDI0MCwgMTkyLCA4LCAzLCAyNDAsIDE3MiwgOCwgMywgMjQwLCAKLSAgICAxNzEsIDgsIDMsIDI0MCwgMTc0LCA4LCAzLCAyNDAsIDE3MywgOCwgMywgMjQwLCAxNzYsIDgsIDMsIDI0MCwgMTc1LCA4LCAKLSAgICAzLCAyNDAsIDE3OCwgOCwgMywgMjQwLCAxNzcsIDgsIDMsIDI0MCwgMTg3LCA4LCAzLCAyNDAsIDE4OSwgOCwgMywgMjQwLCAKLSAgICAxODgsIDgsIDMsIDIyOSwgMjQsIDgsIDMsIDIyOSwgMjYsIDgsIDMsIDIyOSwgMjUsIDgsIDMsIDIyOSwgNjcsIDgsIDMsIAotICAgIDIyOSwgNjUsIDgsIDMsIDIyOSwgNzcsIDgsIDMsIDIyOSwgNzAsIDgsIDMsIDIyOCwgMjQzLCA4LCAzLCAyMjgsIDI0MiwgOCwgCi0gICAgMywgMjI4LCAyNDQsIDgsIDMsIDIyOCwgMjUyLCA4LCAzLCAyMjgsIDI0OSwgOCwgMywgMjI5LCA0LCA4LCAzLCAyMjgsIAotICAgIDI1NCwgOCwgMywgMjI5LCA1OCwgOCwgMywgMjI5LCA2NCwgOCwgMywgMjI5LCA2MCwgOCwgMywgMjQxLCAxNTYsIDgsIDMsIAotICAgIDI0MSwgMTY2LCA4LCAzLCAyNDEsIDE3NSwgOCwgMywgMjQxLCAyNTEsIDgsIDMsIDI0MSwgMjQzLCA4LCAzLCAxNjIsIDgsIAotICAgIDMsIDI0MiwgNiwgOCwgMywgMjQwLCAyMDYsIDgsIDMsIDI0MCwgMjA1LCA4LCAzLCAyNDAsIDIwOCwgOCwgMywgMjQwLCAKLSAgICAyMDcsIDgsIDMsIDI0MCwgMjQyLCA4LCAzLCAyNDAsIDIzMywgOCwgMywgMjQxLCA2OCwgOCwgMywgMjQxLCA0NywgOCwgMywgCi0gICAgMjQxLCAxOTQsIDgsIDMsIDI0MSwgMjM4LCA4LCAzLCAyNDEsIDIwNiwgOCwgMywgMjEyLCA0MywgOCwgMywgMjEyLCAyOCwgCi0gICAgOCwgMywgMjEyLCA2NSwgOCwgMywgMjEyLCA1MSwgOCwgMywgMjExLCAxODUsIDgsIDMsIDIxMSwgMTg3LCA4LCAzLCAyMTEsIAotICAgIDE4NiwgOCwgMywgMjExLCAyMDMsIDgsIDMsIDIxMSwgMjI3LCA4LCAzLCAyMTEsIDIxMCwgOCwgMywgMjEyLCA1LCA4LCAzLCAKLSAgICAyMTIsIDIyLCA4LCAzLCAyMTIsIDEwLCA4LCAzLCAyMTAsIDMwLCA4LCAzLCAyMTAsIDI5LCA4LCAzLCAyMTAsIDQ0LCA4LCAKLSAgICAzLCAyMTAsIDMyLCA4LCAzLCAyMTAsIDM3LCA4LCAzLCAyMTAsIDM5LCA4LCAzLCAyMTAsIDM4LCA4LCAzLCAyMTAsIDEwMiwgCi0gICAgOCwgMywgMjEwLCA5OSwgOCwgMywgMjEwLCAxMTYsIDgsIDMsIDIxMCwgMTA1LCA4LCAzLCAyMTAsIDYsIDgsIDMsIDIxMCwgCi0gICAgOCwgOCwgMywgMjEwLCA3LCA4LCAzLCAyMTAsIDE5LCA4LCAzLCAyMTAsIDE4LCA4LCAzLCAyMTAsIDIzLCA4LCAzLCAyMTAsIAotICAgIDIwLCA4LCAzLCAyMTAsIDg0LCA4LCAzLCAyMTAsIDk0LCA4LCAzLCAyMTAsIDg4LCA4LCAzLCAyMTAsIDIsIDgsIDMsIDIxMCwgCi0gICAgMSwgOCwgMywgMjEwLCAxMywgOCwgMywgMjEwLCA1LCA4LCAzLCAyMTAsIDMsIDgsIDMsIDIxMCwgNCwgOCwgMywgMjA5LCAKLSAgICAyNDUsIDgsIDMsIDIwOSwgMjQ0LCA4LCAzLCAyMDksIDI1MCwgOCwgMywgMjA5LCAyNDgsIDgsIDMsIDIwOSwgMjQ2LCA4LCAKLSAgICAzLCAyMDksIDI0NywgOCwgMywgMjUwLCAyOCwgOCwgMywgMjUwLCAyNCwgOCwgMywgMjUwLCA1MSwgOCwgMywgMjUwLCAzNywgCi0gICAgOCwgMywgMjUwLCA0OCwgOCwgMywgMjUwLCA0MiwgOCwgMywgMjUwLCA1MCwgOCwgMywgMjUwLCA0OSwgOCwgMywgMjUwLCAKLSAgICAyMjQsIDgsIDMsIDI1MCwgMjE3LCA4LCAzLCAyNTEsIDMzLCA4LCAzLCAyNTAsIDI1MSwgOCwgMywgMjQ5LCAxMDQsIDgsIDMsIAotICAgIDI0OSwgMTA2LCA4LCAzLCAyNDksIDEwNSwgOCwgMywgMjQ5LCAxNTMsIDgsIDMsIDI0OSwgMTQ0LCA4LCAzLCAyNDksIDIzOCwgCi0gICAgOCwgMywgMjQ5LCAxNjksIDgsIDMsIDI1MCwgMTYwLCA4LCAzLCAyNTAsIDE5MCwgOCwgMywgMjUwLCAxNjUsIDgsIDMsIAotICAgIDI0OSwgODQsIDgsIDMsIDI0OSwgODIsIDgsIDMsIDI0OSwgMTEyLCA4LCAzLCAyNDksIDEwMiwgOCwgMywgMjQ5LCA4OSwgOCwgCi0gICAgMywgMjQ5LCAxMDEsIDgsIDMsIDI0OSwgNjMsIDgsIDMsIDI0OSwgNjIsIDgsIDMsIDI0OSwgNzMsIDgsIDMsIDI0OSwgNjksIAotICAgIDgsIDMsIDI0OSwgNjQsIDgsIDMsIDI0OSwgNjYsIDgsIDMsIDIwOSwgMjI4LCA4LCAzLCAyMDksIDIyNywgOCwgMywgMjA5LCAKLSAgICAyMzQsIDgsIDMsIDIwOSwgMjI5LCA4LCAzLCAyMDksIDIzMSwgOCwgMywgMjA5LCAyMzAsIDgsIDMsIDIwOSwgMjMzLCA4LCAKLSAgICAzLCAyMDksIDIzMiwgOCwgMywgMjA5LCAyNDAsIDgsIDMsIDIwOSwgMjM5LCA4LCAzLCAyMDksIDI0MywgOCwgMywgMjA5LCAKLSAgICAyNDEsIDgsIDMsIDIwOSwgMjI0LCA4LCAzLCAyMDksIDIyNiwgOCwgMywgMjA5LCAyMjUsIDgsIDMsIDIwOSwgMjM1LCA4LCAKLSAgICAzLCAyMDksIDIzOCwgOCwgMywgMjA5LCAyMzYsIDgsIDMsIDIwOSwgMjE3LCA4LCAzLCAyMDksIDIyMSwgOCwgMywgMjA5LCAKLSAgICAyMjAsIDgsIDMsIDIwOSwgMjE4LCA4LCAzLCAyMDksIDIxOSwgOCwgMywgMjA5LCAyMTEsIDgsIDMsIDIwOSwgMjEwLCA4LCAKLSAgICAzLCAyMDksIDIxNiwgOCwgMywgMjA5LCAyMTQsIDgsIDMsIDIwOSwgMjEyLCA4LCAzLCAyMDksIDIxMywgOCwgMywgMjI3LCAKLSAgICAxMDQsIDgsIDMsIDIyNywgMTAzLCA4LCAzLCAyMjcsIDEwOSwgOCwgMywgMjI3LCAxMDUsIDgsIDMsIDIyNywgMTA2LCA4LCAKLSAgICAzLCAyMjcsIDEwOCwgOCwgMywgMjI3LCAxMDcsIDgsIDMsIDIyNywgMTE0LCA4LCAzLCAyMjcsIDExMywgOCwgMywgMjI3LCAKLSAgICAxMTcsIDgsIDMsIDIyNywgMTE2LCA4LCAzLCAyMjcsIDk3LCA4LCAzLCAyMjcsIDk4LCA4LCAzLCAyMjcsIDEwMSwgOCwgMywgCi0gICAgMjI3LCAxMDIsIDgsIDMsIDIyNywgMTEwLCA4LCAzLCAyMjcsIDExMiwgOCwgMywgMjI3LCA5MiwgOCwgMywgMjI3LCAxMDAsIAotICAgIDgsIDMsIDIyNywgOTYsIDgsIDMsIDIyNywgOTMsIDgsIDMsIDIyNywgOTQsIDgsIDMsIDIyNywgODcsIDgsIDMsIDIyNywgCi0gICAgODYsIDgsIDMsIDIyNywgOTEsIDgsIDMsIDIyNywgOTAsIDgsIDMsIDIyNywgODgsIDgsIDMsIDIyNywgODksIDgsIDMsIAotICAgIDIxOSwgMTI3LCA4LCAzLCAxOTQsIDgsIDMsIDIxOSwgMTkxLCA4LCAzLCAyMTksIDEzMCwgOCwgMywgMjE5LCAxODMsIDgsIAotICAgIDMsIDIxOSwgMTg2LCA4LCAzLCAyMTksIDE4NCwgOCwgMywgMjIxLCAyMjYsIDgsIDMsIDIyMSwgMjE0LCA4LCAzLCAyMDYsIAotICAgIDgsIDMsIDIyMSwgMjM0LCA4LCAzLCAyMTgsIDI4LCA4LCAzLCAyMTgsIDMwLCA4LCAzLCAyMTgsIDI5LCA4LCAzLCAyMTksIAotICAgIDM0LCA4LCAzLCAyMTksIDIzLCA4LCAzLCAyMTksIDU4LCA4LCAzLCAyMTksIDM4LCA4LCAzLCAyMjAsIDExNCwgOCwgMywgCi0gICAgMjIxLCAxODEsIDgsIDMsIDIyMCwgMTM5LCA4LCAzLCAyMTgsIDUsIDgsIDMsIDIxOCwgMywgOCwgMywgMjE4LCA4MywgOCwgCi0gICAgMywgMjE4LCAyNywgOCwgMywgMjE4LCA5LCA4LCAzLCAyMTgsIDE3LCA4LCAzLCAyMTcsIDE2NiwgOCwgMywgMjE3LCAxNjUsIAotICAgIDgsIDMsIDIxNywgMjMyLCA4LCAzLCAyMTcsIDE3MywgOCwgMywgMjE3LCAxNjgsIDgsIDMsIDIxNywgMTcyLCA4LCAzLCAKLSAgICAyMTgsIDE4NiwgOCwgMywgMjE4LCAxODUsIDgsIDMsIDIxOCwgMTkyLCA4LCAzLCAyMTgsIDE4NywgOCwgMywgMjE4LCAxODksIAotICAgIDgsIDMsIDIxOCwgMTkxLCA4LCAzLCAyMTgsIDE5MCwgOCwgMywgMjE4LCAyMDAsIDgsIDMsIDIxOCwgMTk4LCA4LCAzLCAKLSAgICAyMTgsIDIyMywgOCwgMywgMjE4LCAyMDEsIDgsIDMsIDIxOCwgMTgxLCA4LCAzLCAyMTgsIDE4MCwgOCwgMywgMjE4LCAxODQsIAotICAgIDgsIDMsIDIxOCwgMTgyLCA4LCAzLCAyMTgsIDE5NCwgOCwgMywgMjE4LCAxOTcsIDgsIDMsIDIxOCwgMTk1LCA4LCAzLCAKLSAgICAyMTgsIDE3NywgOCwgMywgMjE4LCAxNzUsIDgsIDMsIDIxOCwgMTc5LCA4LCAzLCAyMTgsIDE3OCwgOCwgMywgMjE4LCAxNzAsIAotICAgIDgsIDMsIDIxOCwgMTY5LCA4LCAzLCAyMTgsIDE3NCwgOCwgMywgMjE4LCAxNzMsIDgsIDMsIDIxOCwgMTcxLCA4LCAzLCAKLSAgICAyMTgsIDE3MiwgOCwgMywgMjEwLCA3NywgOCwgMywgMjEwLCA3NiwgOCwgMywgMjEwLCA4MiwgOCwgMywgMjEwLCA3OSwgOCwgCi0gICAgMywgMjEwLCA1OSwgOCwgMywgMjEwLCA2MSwgOCwgMywgMjEwLCA2MCwgOCwgMywgMjEwLCA2NCwgOCwgMywgMjEwLCA2MywgCi0gICAgOCwgMywgMjEwLCA2NywgOCwgMywgMjEwLCA2NSwgOCwgMywgMjEwLCA3MSwgOCwgMywgMjEwLCA3MCwgOCwgMywgMjEwLCAKLSAgICA3NCwgOCwgMywgMjEwLCA3MiwgOCwgMywgMjEwLCA1NSwgOCwgMywgMjEwLCA1NCwgOCwgMywgMjEwLCA2MiwgOCwgMywgCi0gICAgMjEwLCA1OCwgOCwgMywgMjEwLCA1NiwgOCwgMywgMjEwLCA1NywgOCwgMywgMjEwLCA0NywgOCwgMywgMjEwLCA0NiwgOCwgCi0gICAgMywgMjEwLCA1MSwgOCwgMywgMjEwLCA1MCwgOCwgMywgMjEwLCA0OCwgOCwgMywgMjEwLCA0OSwgOCwgMywgMjUwLCAxMzYsIAotICAgIDgsIDMsIDI1MCwgMTMzLCA4LCAzLCAyNTAsIDE1NywgOCwgMywgMjUwLCAxNDQsIDgsIDMsIDI1MCwgNjUsIDgsIDMsIDI1MCwgCi0gICAgNjQsIDgsIDMsIDI1MCwgNjcsIDgsIDMsIDI1MCwgNjYsIDgsIDMsIDI1MCwgNzksIDgsIDMsIDI1MCwgNzgsIDgsIDMsIAotICAgIDI1MCwgODYsIDgsIDMsIDI1MCwgODEsIDgsIDMsIDI1MCwgMTE1LCA4LCAzLCAyNTAsIDExMywgOCwgMywgMjUwLCAxMzEsIAotICAgIDgsIDMsIDI1MCwgMTIxLCA4LCAzLCAyNTAsIDU5LCA4LCAzLCAyNTAsIDY5LCA4LCAzLCAyNTAsIDYzLCA4LCAzLCAyNTAsIAotICAgIDYwLCA4LCAzLCAyNTAsIDYyLCA4LCAzLCAyNTAsIDUzLCA4LCAzLCAyNTAsIDUyLCA4LCAzLCAyNTAsIDU3LCA4LCAzLCAKLSAgICAyNTAsIDU2LCA4LCAzLCAyNTAsIDU0LCA4LCAzLCAyNTAsIDU1LCA4LCAzLCAyMjIsIDE3NSwgOCwgMywgMjIyLCAxNzksIDgsIAotICAgIDMsIDIyMiwgMTU4LCA4LCAzLCAyMjIsIDE1OSwgOCwgMywgMjIyLCAxNjIsIDgsIDMsIDIyMiwgMTYxLCA4LCAzLCAyMjIsIAotICAgIDE2NSwgOCwgMywgMjIyLCAxNjMsIDgsIDMsIDIyMiwgMTY5LCA4LCAzLCAyMjIsIDE2OCwgOCwgMywgMjIyLCAxNzQsIDgsIAotICAgIDMsIDIyMiwgMTcwLCA4LCAzLCAyMjIsIDE1NCwgOCwgMywgMjIyLCAxNTIsIDgsIDMsIDIyMiwgMTYwLCA4LCAzLCAyMjIsIAotICAgIDE1NywgOCwgMywgMjIyLCAxNTUsIDgsIDMsIDIyMiwgMTU2LCA4LCAzLCAyMjIsIDE0NywgOCwgMywgMjIyLCAxNDYsIDgsIAotICAgIDMsIDIyMiwgMTUxLCA4LCAzLCAyMjIsIDE1MCwgOCwgMywgMjIyLCAxNDgsIDgsIDMsIDIyMiwgMTQ5LCA4LCAzLCAyMjgsIAotICAgIDM0LCA4LCAzLCAyMjgsIDMzLCA4LCAzLCAyMjgsIDM2LCA4LCAzLCAyMjgsIDM1LCA4LCAzLCAyMjgsIDI2LCA4LCAzLCAKLSAgICAyMjgsIDI4LCA4LCAzLCAyMjgsIDI3LCA4LCAzLCAyMjgsIDMwLCA4LCAzLCAyMjgsIDI5LCA4LCAzLCAyMjgsIDMyLCA4LCAKLSAgICAzLCAyMjgsIDMxLCA4LCAzLCAyMjgsIDIxLCA4LCAzLCAyMjgsIDIwLCA4LCAzLCAyMjgsIDI1LCA4LCAzLCAyMjgsIDI0LCAKLSAgICA4LCAzLCAyMjgsIDIyLCA4LCAzLCAyMjgsIDIzLCA4LCAzLCAyMjgsIDE1LCA4LCAzLCAyMjgsIDE0LCA4LCAzLCAyMjgsIAotICAgIDE5LCA4LCAzLCAyMjgsIDE4LCA4LCAzLCAyMjgsIDE2LCA4LCAzLCAyMjgsIDE3LCA4LCAzLCAyMjAsIDcyLCA4LCAzLCAKLSAgICAyMjAsIDY3LCA4LCAzLCAyMjAsIDEwMiwgOCwgMywgMjIwLCA4MywgOCwgMywgMjE5LCAyMTUsIDgsIDMsIDIxOSwgMjE3LCAKLSAgICA4LCAzLCAyMTksIDIxNiwgOCwgMywgMjE5LCAyMzYsIDgsIDMsIDIxOSwgMjMzLCA4LCAzLCAyMjAsIDcsIDgsIDMsIDIxOSwgCi0gICAgMjU0LCA4LCAzLCAyMjAsIDQyLCA4LCAzLCAyMjAsIDM1LCA4LCAzLCAyMjAsIDYzLCA4LCAzLCAyMjAsIDUwLCA4LCAzLCAKLSAgICAyMTksIDIxMSwgOCwgMywgMjE5LCAyMDksIDgsIDMsIDIxOSwgMjI1LCA4LCAzLCAyMTksIDIxNCwgOCwgMywgMjE5LCAyMTIsIAotICAgIDgsIDMsIDIxOSwgMjEzLCA4LCAzLCAyMTksIDE5NCwgOCwgMywgMjE5LCAxOTMsIDgsIDMsIDIxOSwgMjAwLCA4LCAzLCAKLSAgICAyMTksIDE5NywgOCwgMywgMjE5LCAxOTUsIDgsIDMsIDIxOSwgMTk2LCA4LCAzLCAyMjMsIDE0MSwgOCwgMywgMjIzLCAxMzUsIAotICAgIDgsIDMsIDIwNSwgOCwgMywgMjIzLCAxNDcsIDgsIDMsIDIyMiwgMTIwLCA4LCAzLCAyMjIsIDEyMiwgOCwgMywgMjIyLCAKLSAgICAxMjEsIDgsIDMsIDIyMiwgMTg4LCA4LCAzLCAyMjIsIDE4MSwgOCwgMywgMjIyLCAyMTEsIDgsIDMsIDIyMiwgMTkyLCA4LCAKLSAgICAzLCAyMjMsIDQzLCA4LCAzLCAyMjMsIDEyOCwgOCwgMywgMjIzLCA4MSwgOCwgMywgMjIyLCAxMTMsIDgsIDMsIDIyMiwgCi0gICAgMTEwLCA4LCAzLCAyMjIsIDE0MCwgOCwgMywgMjIyLCAxMTksIDgsIDMsIDIyMiwgMTE1LCA4LCAzLCAyMjIsIDExNiwgOCwgCi0gICAgMywgMjIyLCA5NSwgOCwgMywgMjIyLCA5NCwgOCwgMywgMjIyLCAxMDAsIDgsIDMsIDIyMiwgOTgsIDgsIDMsIDIyMiwgOTYsIAotICAgIDgsIDMsIDIyMiwgOTcsIDgsIDMsIDIzNSwgOTgsIDgsIDMsIDIzNSwgOTcsIDgsIDMsIDIzNSwgMTA4LCA4LCAzLCAyMzUsIAotICAgIDk5LCA4LCAzLCAyMzUsIDEwNCwgOCwgMywgMjM1LCAxMDMsIDgsIDMsIDIzNSwgMTA2LCA4LCAzLCAyMzUsIDEwNSwgOCwgMywgCi0gICAgMjM1LCA0MSwgOCwgMywgMjM1LCA0MCwgOCwgMywgMjM1LCA0MywgOCwgMywgMjM1LCA0MiwgOCwgMywgMjM1LCA1NiwgOCwgCi0gICAgMywgMjM1LCA1NCwgOCwgMywgMjM1LCA2OCwgOCwgMywgMjM1LCA1OCwgOCwgMywgMjM1LCAzNCwgOCwgMywgMjM1LCAzMiwgCi0gICAgOCwgMywgMjM1LCA1MSwgOCwgMywgMjM1LCAzOSwgOCwgMywgMjM1LCAzNiwgOCwgMywgMjM1LCAzNywgOCwgMywgMjM1LCAKLSAgICAyNiwgOCwgMywgMjM1LCAyNSwgOCwgMywgMjM1LCAzMCwgOCwgMywgMjM1LCAyOSwgOCwgMywgMjM1LCAyNywgOCwgMywgCi0gICAgMjM1LCAyOCwgOCwgMywgMjI0LCA0NiwgOCwgMywgMjI0LCA0NCwgOCwgMywgMjI0LCA1MywgOCwgMywgMjI0LCA0NywgOCwgCi0gICAgMywgMjI0LCA1MCwgOCwgMywgMjI0LCA0OSwgOCwgMywgMjI0LCA1MiwgOCwgMywgMjI0LCA1MSwgOCwgMywgMjIzLCAyNTUsIAotICAgIDgsIDMsIDIyMywgMjUyLCA4LCAzLCAyMjQsIDEsIDgsIDMsIDIyNCwgMCwgOCwgMywgMjI0LCAzMywgOCwgMywgMjI0LCAzMiwgCi0gICAgOCwgMywgMjI0LCA0MiwgOCwgMywgMjI0LCAzNiwgOCwgMywgMjIzLCAyNDcsIDgsIDMsIDIyMywgMjQzLCA4LCAzLCAyMjQsIAotICAgIDMwLCA4LCAzLCAyMjMsIDI1MSwgOCwgMywgMjIzLCAyNDksIDgsIDMsIDIyMywgMjUwLCA4LCAzLCAyMjMsIDIyNywgOCwgMywgCi0gICAgMjIzLCAyMjUsIDgsIDMsIDIyMywgMjM3LCA4LCAzLCAyMjMsIDIzMCwgOCwgMywgMjIzLCAyMjgsIDgsIDMsIDIyMywgMjI5LCAKLSAgICA4LCAzLCAyMzUsIDg3LCA4LCAzLCAyMzUsIDg2LCA4LCAzLCAyMzUsIDkzLCA4LCAzLCAyMzUsIDg4LCA4LCAzLCAyMzUsIAotICAgIDkwLCA4LCAzLCAyMzUsIDg5LCA4LCAzLCAyMzUsIDkyLCA4LCAzLCAyMzUsIDkxLCA4LCAzLCAyMzUsIDc4LCA4LCAzLCAKLSAgICAyMzUsIDgwLCA4LCAzLCAyMzUsIDc5LCA4LCAzLCAyMzUsIDgzLCA4LCAzLCAyMzUsIDgyLCA4LCAzLCAyMzUsIDg1LCA4LCAKLSAgICAzLCAyMzUsIDg0LCA4LCAzLCAyMzUsIDc0LCA4LCAzLCAyMzUsIDczLCA4LCAzLCAyMzUsIDgxLCA4LCAzLCAyMzUsIDc3LCAKLSAgICA4LCAzLCAyMzUsIDc1LCA4LCAzLCAyMzUsIDc2LCA4LCAzLCAyMzUsIDcwLCA4LCAzLCAyMzUsIDY5LCA4LCAzLCAyMzUsIAotICAgIDcyLCA4LCAzLCAyMzUsIDcxLCA4LCAzLCAyMjgsIDE2MiwgOCwgMywgMjI4LCAxNjEsIDgsIDMsIDIyOCwgMTY5LCA4LCAzLCAKLSAgICAyMjgsIDE2MywgOCwgMywgMjI4LCAxNjUsIDgsIDMsIDIyOCwgMTY0LCA4LCAzLCAyMjgsIDE2OCwgOCwgMywgMjI4LCAxNjYsIAotICAgIDgsIDMsIDIyOCwgMTUxLCA4LCAzLCAyMjgsIDE1MiwgOCwgMywgMjI4LCAxNTcsIDgsIDMsIDIyOCwgMTU2LCA4LCAzLCAKLSAgICAyMjgsIDE2MCwgOCwgMywgMjI4LCAxNTgsIDgsIDMsIDIyOCwgMTQ2LCA4LCAzLCAyMjgsIDE1NSwgOCwgMywgMjI4LCAxNTAsIAotICAgIDgsIDMsIDIyOCwgMTQ3LCA4LCAzLCAyMjgsIDE0OCwgOCwgMywgMjI4LCAxNDEsIDgsIDMsIDIyOCwgMTQwLCA4LCAzLCAKLSAgICAyMjgsIDE0NSwgOCwgMywgMjI4LCAxNDQsIDgsIDMsIDIyOCwgMTQyLCA4LCAzLCAyMjgsIDE0MywgOCwgMywgMjI3LCAxMzcsIAotICAgIDgsIDMsIDIyNywgMTM2LCA4LCAzLCAyMjcsIDE0OCwgOCwgMywgMjI3LCAxNDEsIDgsIDMsIDIyNywgMTQ1LCA4LCAzLCAKLSAgICAyMjcsIDE0NCwgOCwgMywgMjI3LCAxNDcsIDgsIDMsIDIyNywgMTQ2LCA4LCAzLCAyMjcsIDEyNCwgOCwgMywgMjI3LCAxMjYsIAotICAgIDgsIDMsIDIyNywgMTI1LCA4LCAzLCAyMjcsIDEzMCwgOCwgMywgMjI3LCAxMjksIDgsIDMsIDIyNywgMTM0LCA4LCAzLCAKLSAgICAyMjcsIDEzMSwgOCwgMywgMjI3LCAxMjIsIDgsIDMsIDIyNywgMTIwLCA4LCAzLCAyMjcsIDEyOCwgOCwgMywgMjI3LCAxMjMsIAotICAgIDgsIDMsIDIxMSwgMTUwLCA4LCAzLCAyMTEsIDE0OSwgOCwgMywgMjExLCAxNTcsIDgsIDMsIDIxMSwgMTUyLCA4LCAzLCAKLSAgICAyMTEsIDE1NCwgOCwgMywgMjExLCAxNTMsIDgsIDMsIDIxMSwgMTU2LCA4LCAzLCAyMTEsIDE1NSwgOCwgMywgMjExLCAxMzksIAotICAgIDgsIDMsIDIxMSwgMTQwLCA4LCAzLCAyMTEsIDE0NCwgOCwgMywgMjExLCAxNDMsIDgsIDMsIDIxMSwgMTQ4LCA4LCAzLCAKLSAgICAyMTEsIDE0NiwgOCwgMywgMjExLCAxMjEsIDgsIDMsIDIxMSwgMTE5LCA4LCAzLCAyMTEsIDEzMSwgOCwgMywgMjExLCAxMjQsIAotICAgIDgsIDMsIDIxMSwgMTIyLCA4LCAzLCAyMTEsIDEyMywgOCwgMywgMjEwLCAyNTAsIDgsIDMsIDIxMCwgMjQ4LCA4LCAzLCAKLSAgICAyMTEsIDgsIDgsIDMsIDIxMCwgMjUxLCA4LCAzLCAyMTEsIDIsIDgsIDMsIDIxMSwgMSwgOCwgMywgMjExLCA1LCA4LCAzLCAKLSAgICAyMTEsIDMsIDgsIDMsIDIxMCwgMTkxLCA4LCAzLCAyMTAsIDE5MCwgOCwgMywgMjEwLCAxOTQsIDgsIDMsIDIxMCwgMTkyLCAKLSAgICA4LCAzLCAyMTAsIDIyNCwgOCwgMywgMjEwLCAyMjEsIDgsIDMsIDIxMCwgMjQ0LCA4LCAzLCAyMTAsIDIyOCwgOCwgMywgCi0gICAgMjEwLCAxODIsIDgsIDMsIDIxMCwgMTc4LCA4LCAzLCAyMTAsIDIxMiwgOCwgMywgMjEwLCAxODksIDgsIDMsIDIxMCwgMTg1LCAKLSAgICA4LCAzLCAyMTAsIDE4NiwgOCwgMywgMjEwLCAxNjIsIDgsIDMsIDIxMCwgMTYxLCA4LCAzLCAyMTAsIDE2OSwgOCwgMywgCi0gICAgMjEwLCAxNjUsIDgsIDMsIDIxMCwgMTYzLCA4LCAzLCAyMTAsIDE2NCwgOCwgMzQsIDIyNCwgMzMsIDgsIDM0LCAyMzIsIAotICAgIDI0MSwgOCwgMzQsIDIzNCwgNjEsIDgsIDM0LCAyMjcsIDE0MSwgOCwgMzQsIDI0OSwgNjksIDgsIDM0LCAyMTgsIDE5MiwgOCwgCi0gICAgMzQsIDI0MywgMTIsIDgsIDM0LCAyNDMsIDQ0LCA4LCAzNCwgMjMwLCAyMzAsIDgsIDM0LCAyNDAsIDE4MCwgOCwgMzQsIAotICAgIDIzMiwgNTYsIDgsIDM0LCAyNTIsIDgzLCA4LCAzNCwgMjMwLCAxMjYsIDgsIDM0LCAyMTAsIDI0NCwgOCwgMzQsIDIyNCwgCi0gICAgMTIxLCA4LCAzNCwgMjQwLCAxNzQsIDgsIDM0LCAyMTcsIDQ2LCA4LCAzNCwgMjQzLCAxMzUsIDgsIDM0LCAyMTAsIDUsIDgsIAotICAgIDM0LCAyNDksIDYzLCA4LCAzNCwgMjQ4LCA5NSwgOCwgMzQsIDI1MSwgOTgsIDgsIDM0LCAyNDMsIDgsIDgsIDM0LCAyMjcsIAotICAgIDEzMSwgOCwgMzQsIDIxNSwgMTE4LCA4LCAzNCwgMjI2LCAxNzUsIDgsIDM0LCAyMzUsIDc0LCA4LCAzNCwgMjEwLCAxOSwgOCwgCi0gICAgMzQsIDIyNCwgMTAwLCA4LCAzNCwgMjQxLCAxMDgsIDgsIDM0LCAyMTAsIDI1MCwgOCwgMzQsIDIxMiwgMTEyLCA4LCAzNCwgCi0gICAgMjE5LCAyMDAsIDgsIDM0LCAyMTMsIDI0NCwgOCwgMzQsIDIxMCwgMTE2LCA4LCAzNCwgMjM1LCA2OCwgOCwgMzQsIDIyNywgCi0gICAgOTYsIDgsIDM0LCAyMzUsIDcyLCA4LCAzNCwgMjQyLCAxNTQsIDgsIDM0LCAyMzUsIDkyLCA4LCAzNCwgMjExLCAyMjcsIDgsIAotICAgIDM0LCAyNDYsIDc4LCA4LCAzNCwgMjE5LCAyMTMsIDgsIDM0LCAyMzIsIDIzNiwgOCwgMzQsIDI0OSwgNzMsIDgsIDM0LCAKLSAgICAyNDksIDEwNSwgOCwgMzQsIDI1MCwgMzcsIDgsIDM0LCAyNDAsIDE3NywgOCwgMzQsIDIyMCwgNzIsIDgsIDM0LCAyMTAsIDQsIAotICAgIDgsIDM0LCAyMTksIDI1NCwgOCwgMzQsIDI1MCwgMTMxLCA4LCAzNCwgMjA5LCAyMzEsIDgsIDM0LCAyMjksIDE3MywgOCwgCi0gICAgMzQsIDIzNCwgMTgyLCAyMzIsIDE5NiwgMSwgMjUyLCAxOTEsIDIzMiwgMTk2LCAxLCAxOTAsIDIzMiwgMTk2LCAxLCAyMjUsIAotICAgIDE0NywgMjMyLCAxOTYsIDEsIDI0OCwgMjIxLCAyMzIsIDE5NiwgMSwgMjE3LCAxMDUsIDIzMiwgMTk2LCAxLCAyMTYsIDIwOCwgCi0gICAgMjMyLCAxOTYsIDEsIDI0MywgMTM1LCAyMzIsIDE5NiwgMSwgMTc2LCAyMzIsIDE5NiwgMSwgMjM0LCAxMzIsIDIzMiwgMTk2LCAKLSAgICAxLCAyMzUsIDE0MSwgMjMyLCAxOTYsIDEsIDI1MSwgMzMsIDIzMiwgMTk2LCAxLCAyNTAsIDE1NywgMjMyLCAxOTYsIDEsIAotICAgIDI0NiwgMzgsIDIzMiwgMTk2LCAxLCAyMTUsIDE4MywgMjMyLCAxOTYsIDEsIDIxNSwgMTc1LCAyMzIsIDE5NiwgMSwgMTg0LCAKLSAgICAyMzIsIDE5NiwgMSwgMTk3LCAyMzIsIDE5NiwgMSwgMjMzLCAxMzUsIDIzMiwgMTk2LCAxLCAyMDYsIDIzMiwgMTk2LCAxLCAKLSAgICAyMTAsIDgyLCAyMzIsIDE5NiwgMSwgMjEwLCAxMTYsIDIzMiwgMTk2LCAxLCAyMjksIDc3LCAyMzIsIDE5NiwgMSwgMTYyLCAKLSAgICAyMzIsIDE5NiwgMSwgMjExLCAxNjUsIDIzMiwgMTk2LCAxLCAyNDEsIDE4OSwgMjMyLCAxOTYsIDEsIDI0NCwgMTk2LCAyMzIsIAotICAgIDE5NiwgMSwgMjEyLCA2NSwgMjMyLCAxOTYsIDEsIDIyMCwgMTAyLCAyMzIsIDE5NiwgMSwgMTkxLCAyMzIsIDE5NiwgMSwgCi0gICAgMjQyLCAyNDksIDIzMiwgMTk2LCAxLCA2MSwgMjMyLCAxOTYsIDEsIDI1NCwgMjQzLCAyMzIsIDE5NiwgMSwgNzUsIDIzMiwgCi0gICAgMTk2LCAxLCAyNDUsIDU1LCAyMzIsIDE5NiwgMSwgNzMsIDIzMiwgMTk2LCAxLCA3NiwgMjMyLCAxOTYsIDEsIDcwLCAyMzIsIAotICAgIDE5NiwgMSwgMjE0LCAyMTQsIDIzMiwgMTk2LCAxLCAyMTQsIDIwOCwgMjMyLCAxOTYsIDEsIDIyNiwgMjM0LCAyMzIsIDE5NiwgCi0gICAgMSwgMTM4LCAyMzAsIDMyLCAyMTYsIDExNywgMjMyLCAxOTYsIDEsIDEzOCwgMjI5LCAyMjksIDIyNSwgMTYsIDIzMiwgMTk2LCAKLSAgICAxLCAxMzgsIDIzMCwgMzIsIDI0OSwgNzIsIDIzMiwgMTk2LCAxLCAxMzgsIDIzMCwgMzIsIDI1MSwgMjA1LCAyMzIsIDE5NiwgCi0gICAgMSwgMTM4LCAyMzAsIDMyLCAxOTcsIDIzMiwgMTk2LCAxLCAxMzgsIDIzMCwgMzIsIDIzNSwgMTE1LCAyMzIsIDE5NiwgMjI0LCAKLSAgICAxNDEsIDI0OSwgMjE5LCAyMzIsIDE5NiwgMjI0LCAxNDEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNDEsIDMsIDI0NSwgMjA5LCAKLSAgICA0MSwgMywgMjQ1LCAyMDUsIDQxLCAzLCAyNDEsIDIyMCwgNDEsIDMsIDIxMiwgMTcsIDQxLCAzLCAyMTIsIDE2LCA0MSwgMywgCi0gICAgMjI1LCAyMTEsIDQxLCAzLCAyNTIsIDEzLCA0MSwgMywgMjUyLCA2NiwgNDEsIDMsIDIzMSwgMTE2LCA0MSwgMywgMjMzLCAKLSAgICAyNDcsIDQxLCAzLCAyMzEsIDYsIDQxLCAzLCAyNDMsIDc1LCA0MSwgMywgMjQ0LCAxNDcsIDQxLCAzLCAyMTMsIDI1MCwgNDEsIAotICAgIDMsIDIxNywgMTEsIDQxLCAzLCAyMTYsIDE5NCwgNDEsIDMsIDI0OCwgMTYsIDQxLCAzLCAyNDgsIDEzLCA0MSwgMywgMjMzLCAKLSAgICA1MCwgNDEsIDMsIDIyMywgMTA4LCA0MSwgMywgMjQ4LCA3NywgNDEsIDMsIDIyOSwgMTM5LCA0MSwgMywgMjIxLCAxNzAsIAotICAgIDQxLCAzLCAyMjAsIDYxLCA0MSwgMywgMjEwLCA5MiwgNDEsIDMsIDIxMCwgNzMsIDQxLCAzLCAyNTAsIDE4MiwgNDEsIDMsIAotICAgIDIzNSwgMTI0LCA0MSwgMywgMjI4LCAxNzYsIDQxLCAzLCAyMTEsIDQ0LCA0MSwgMywgMjM0LCAxODEsIDQxLCAzLCAyMjksIAotICAgIDUxLCA0MSwgMywgMjQzLCA1NSwgNDEsIDMsIDIzMSwgODAsIDQxLCAzLCAyMjksIDEwMywgNDEsIDMsIDIyNywgMTU1LCA0MSwgCi0gICAgMywgNzMsIDQxLCAzLCAyMzUsIDI1NSwgNDEsIDMsIDI0MSwgMTgwLCA0MSwgMywgMjQxLCAxNjAsIDQxLCAzLCAyMTEsIAotICAgIDI1MCwgNDEsIDMsIDIxMSwgMjQxLCA0MSwgMywgMjI1LCAxMDgsIDQxLCAzLCAyNTIsIDExLCA0MSwgMywgMjUyLCA2LCA0MSwgCi0gICAgMywgMjMxLCAxMDksIDQxLCAzLCAyMzMsIDI0NCwgNDEsIDMsIDIzMSwgMywgNDEsIDMsIDI0MywgNzEsIDQxLCAzLCAyNDQsIAotICAgIDEyMSwgNDEsIDMsIDIxMywgMTc2LCA0MSwgMywgMjE2LCAxMTcsIDQxLCAzLCAyMTYsIDE3NSwgNDEsIDMsIDI0OCwgOCwgCi0gICAgNDEsIDMsIDI0OCwgMTIsIDQxLCAzLCAyMzIsIDI0MSwgNDEsIDMsIDIyMywgMzUsIDQxLCAzLCAyNDgsIDMsIDQxLCAzLCAKLSAgICAyMjksIDEzMywgNDEsIDMsIDIxOSwgMTkxLCA0MSwgMywgMjIwLCAzMiwgNDEsIDMsIDIxMCwgNDQsIDQxLCAzLCAyMTAsIAotICAgIDY5LCA0MSwgMywgMjUwLCA1MSwgNDEsIDMsIDIzNSwgMTA4LCA0MSwgMywgMjI4LCAxNjksIDQxLCAzLCAyMTEsIDgsIDQxLCAKLSAgICAzLCAyMzQsIDkyLCA0MSwgMywgMjI5LCA0MywgNDEsIDMsIDI0MiwgMjE0LCA0MSwgMywgMjMwLCAyMzAsIDQxLCAzLCAyMjgsIAotICAgIDIzMywgNDEsIDMsIDIyNywgMTQ4LCA0MSwgMywgNjEsIDQxLCAzLCAyNTQsIDEyMywgNDEsIDMsIDIyOSwgNzIsIDQxLCAzLCAKLSAgICAxNjIsIDQxLCAzLCAyNDIsIDE4LCA0MSwgMywgMjEyLCA2NSwgNDEsIDMsIDIxMiwgNTUsIDQxLCAzLCAxOTAsIDQxLCAzLCAKLSAgICAyNTIsIDE4LCA0MSwgMywgMjUyLCAxOTEsIDQxLCAzLCAyMzEsIDEyNCwgNDEsIDMsIDIzMywgMjUxLCA0MSwgMywgMjMzLCAKLSAgICAyNTAsIDQxLCAzLCAyMzEsIDEwLCA0MSwgMywgMjQzLCA3OSwgNDEsIDMsIDI0NCwgMTk2LCA0MSwgMywgMjE0LCAyNywgNDEsIAotICAgIDMsIDIxNywgMTA1LCA0MSwgMywgMjE2LCAyMDgsIDQxLCAzLCAyNDgsIDI1LCA0MSwgMywgMjQ4LCAxNSwgNDEsIDMsIDIzMywgCi0gICAgMTM1LCA0MSwgMywgMjA1LCA0MSwgMywgMjQ4LCAyMjEsIDQxLCAzLCAyMjksIDE0OCwgNDEsIDMsIDIwNiwgNDEsIDMsIAotICAgIDIyMCwgMTAyLCA0MSwgMywgMjEwLCAxMTYsIDQxLCAzLCAyMTAsIDgyLCA0MSwgMywgMjUxLCAzMywgNDEsIDMsIDIzNSwgCi0gICAgMTQxLCA0MSwgMywgMjI4LCAxODUsIDQxLCAzLCAxOTEsIDQxLCAzLCAxNzYsIDQxLCAzLCAyMzQsIDIzNCwgNDEsIDMsIAotICAgIDIyOSwgNTYsIDQxLCAzLCAyNDMsIDEzNSwgNDEsIDMsIDE4NCwgNDEsIDMsIDE5NywgNDEsIDMsIDIyNywgMTY1LCA0MSwgMywgCi0gICAgMjI2LCAxODMsIDQxLCAzLCAyMjYsIDE3OSwgNDEsIDMsIDI0MSwgNTMsIDQxLCAzLCAyMTEsIDIxNSwgNDEsIDMsIDIxMSwgCi0gICAgMjExLCA0MSwgMywgMjI0LCAyNDksIDQxLCAzLCAyNTIsIDksIDQxLCAzLCAyNTEsIDE5MywgNDEsIDMsIDIzMSwgMTA0LCAKLSAgICA0MSwgMywgMjMzLCAyNDIsIDQxLCAzLCAyMzAsIDI1NSwgNDEsIDMsIDI0MywgNjcsIDQxLCAzLCAyNDQsIDM0LCA0MSwgMywgCi0gICAgMjEzLCAxMjcsIDQxLCAzLCAyMTYsIDE3LCA0MSwgMywgMjE2LCAxNTMsIDQxLCAzLCAyNDgsIDYsIDQxLCAzLCAyNDgsIDEwLCAKLSAgICA0MSwgMywgMjMyLCAxMjcsIDQxLCAzLCAyMjIsIDE5NywgNDEsIDMsIDI0NywgMTI1LCA0MSwgMywgMjI5LCAxMjAsIDQxLCAKLSAgICAzLCAyMTksIDQwLCA0MSwgMywgMjIwLCAxLCA0MSwgMywgMjEwLCAyMSwgNDEsIDMsIDIxMCwgNjYsIDQxLCAzLCAyNDksIAotICAgIDE3NCwgNDEsIDMsIDIzNSwgNTksIDQxLCAzLCAyMjgsIDE1OSwgNDEsIDMsIDIxMCwgMjI5LCA0MSwgMywgMjM0LCAxMCwgCi0gICAgNDEsIDMsIDIyOSwgNDEsIDQxLCAzLCAyNDIsIDE2NCwgNDEsIDMsIDIzMCwgMTMyLCA0MSwgMywgMjI4LCA2NCwgNDEsIDMsIAotICAgIDIyNywgMTMyLCA0MSwgMywgNzAsIDQxLCAzLCAyMTQsIDE5MCwgNDEsIDMsIDI0MCwgMjIyLCA0MSwgMywgMjQwLCAyMTIsIAotICAgIDQxLCAzLCAyMTEsIDE5NSwgNDEsIDMsIDIxMSwgMTg5LCA0MSwgMywgMjI0LCAxNTAsIDQxLCAzLCAyNTIsIDgsIDQxLCAzLCAKLSAgICAyNTEsIDEyNSwgNDEsIDMsIDIzMSwgMTAzLCA0MSwgMywgMjMzLCAyNDAsIDQxLCAzLCAyMzAsIDI1NCwgNDEsIDMsIDI0MywgCi0gICAgNjYsIDQxLCAzLCAyNDMsIDIzNCwgNDEsIDMsIDIxMiwgMTE2LCA0MSwgMywgMjE1LCAxMTgsIDQxLCAzLCAyMTYsIDEzNiwgCi0gICAgNDEsIDMsIDI0OCwgNCwgNDEsIDMsIDI0OCwgOSwgNDEsIDMsIDIzMiwgOTgsIDQxLCAzLCAyMjIsIDE0MCwgNDEsIDMsIAotICAgIDI0NiwgNzgsIDQxLCAzLCAyMjksIDExNSwgNDEsIDMsIDIxOCwgODMsIDQxLCAzLCAyMTksIDIyNSwgNDEsIDMsIDIxMCwgCi0gICAgMTMsIDQxLCAzLCAyMTAsIDYyLCA0MSwgMywgMjQ5LCAxMTIsIDQxLCAzLCAyMzUsIDUxLCA0MSwgMywgMjI4LCAxNTUsIDQxLCAKLSAgICAzLCAyMTAsIDIxMiwgNDEsIDMsIDIzMywgMjE3LCA0MSwgMywgMjI5LCA0MCwgNDEsIDMsIDI0MiwgMTEzLCA0MSwgMywgCi0gICAgMjMwLCAxMDIsIDQxLCAzLCAyMjcsIDIzNywgNDEsIDMsIDIyNywgMTI4LCA0MSwgMywgNzYsIDQxLCAzLCAyMjYsIDE5NiwgCi0gICAgNDEsIDMsIDIyOSwgMCwgNDEsIDMsIDI0MSwgNjgsIDQxLCAzLCAyNDEsIDU2LCA0MSwgMywgMjExLCAyMjcsIDQxLCAzLCAKLSAgICAyMTEsIDIxNiwgNDEsIDMsIDIyNSwgMTYsIDQxLCAzLCAyNTIsIDEwLCA0MSwgMywgMjUxLCAyMDUsIDQxLCAzLCAyMzEsIAotICAgIDEwNSwgNDEsIDMsIDIzMywgMjQzLCA0MSwgMywgMjMxLCAxLCA0MSwgMywgMjQzLCA2OSwgNDEsIDMsIDI0MywgNjgsIDQxLCAKLSAgICAzLCAyNDQsIDQzLCA0MSwgMywgMjEzLCAxMzgsIDQxLCAzLCAxMTEsIDQxLCAzLCAyMTYsIDE1NiwgNDEsIDMsIDI0OCwgNywgCi0gICAgNDEsIDMsIDI0OCwgMTEsIDQxLCAzLCAyMzIsIDE1NiwgNDEsIDMsIDIyMiwgMjExLCA0MSwgMywgMjQ3LCAxNDUsIDQxLCAzLCAKLSAgICAyMjksIDEyNCwgNDEsIDMsIDIxOSwgNTgsIDQxLCAzLCAyMjAsIDcsIDQxLCAzLCAyMTAsIDIzLCA0MSwgMywgMjEwLCA2NywgCi0gICAgNDEsIDMsIDI0OSwgMjM4LCA0MSwgMywgMjM1LCA2OCwgNDEsIDMsIDIyOCwgMTYwLCA0MSwgMywgMjEwLCAyNDQsIDQxLCAzLCAKLSAgICAyMzQsIDI4LCA0MSwgMywgMjI5LCA0MiwgNDEsIDMsIDI0MiwgMTc0LCA0MSwgMywgMjMwLCAxNjEsIDQxLCAzLCAyMjgsIAotICAgIDc0LCA0MSwgMywgMjI3LCAxMzQsIDQxLCAzLCA3NSwgNDEsIDMsIDI0NSwgMTUwLCA0MSwgMywgMjI5LCA2MSwgNDEsIDMsIAotICAgIDI0MSwgMjM4LCA0MSwgMywgMjQxLCAyMDksIDQxLCAzLCAyMTIsIDIyLCA0MSwgMywgMjEyLCAxMiwgNDEsIDMsIDIyNSwgCi0gICAgMjIxLCA0MSwgMywgMjUyLCAxNCwgNDEsIDMsIDI1MiwgNzUsIDQxLCAzLCAyMzEsIDExNywgNDEsIDMsIDIzMywgMjQ4LCAKLSAgICA0MSwgMywgMjMzLCAyNDYsIDQxLCAzLCAyMzEsIDcsIDQxLCAzLCAyNDMsIDc2LCA0MSwgMywgMjQzLCA3NCwgNDEsIDMsIAotICAgIDI0NCwgMTU0LCA0MSwgMywgMjEzLCAyNTUsIDQxLCAzLCAyMTcsIDIyLCA0MSwgMywgMjE2LCAxOTUsIDQxLCAzLCAyNDgsIAotICAgIDE3LCA0MSwgMywgMjQ4LCAxNCwgNDEsIDMsIDIzMywgNTgsIDQxLCAzLCAyMjMsIDEyOCwgNDEsIDMsIDI0OCwgOTAsIDQxLCAKLSAgICAzLCAyMjksIDE0MCwgNDEsIDMsIDIyMSwgMTgxLCA0MSwgMywgMjIwLCA2MywgNDEsIDMsIDIxMCwgOTQsIDQxLCAzLCAyMTAsIAotICAgIDc0LCA0MSwgMywgMjUwLCAxOTAsIDQxLCAzLCAyMzUsIDEyNiwgNDEsIDMsIDIyOCwgMTc4LCA0MSwgMywgMjExLCA0NywgCi0gICAgNDEsIDMsIDIzNCwgMTgyLCA0MSwgMywgMjI5LCA1MiwgNDEsIDMsIDIyOSwgNDgsIDQxLCAzLCAyNDMsIDYyLCA0MSwgMywgCi0gICAgMjQzLCA1MSwgNDEsIDMsIDIzMSwgOTEsIDQxLCAzLCAyMjksIDEwNywgNDEsIDMsIDIyNywgMTU2LCA0MSwgMywgMjI5LCAKLSAgICA3OSwgNDEsIDMsIDIzMywgMjIsIDQxLCAyNDksIDIxOSwgNDEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNDEsIDIyNCwgMTMsIAotICAgIDc4LCA0MSwgMywgMjI5LCAxMjMsIDI0NCwgMTk2LCA0MSwgMywgMjI5LCAxMjMsIDE3NiwgNDEsIDMsIDIyOSwgMTIzLCAKLSAgICAyMTksIDQwLCA0MSwgMTYsIDI0NCwgMTQ0LCA0MSwgMTYsIDIzNCwgMTgwLCA0MSwgMTYsIDIxNiwgODEsIDQxLCAxNiwgCi0gICAgMjI4LCAyMDgsIDQxLCAxNiwgMjUyLCAxNDcsIDQxLCAxNiwgMjQ0LCAxOTUsIDQxLCAxNiwgMjE3LCAxMDEsIDQxLCAxNiwgCi0gICAgMjQ4LCAxNzYsIDQxLCAxNiwgMjQ3LCAxMjQsIDQxLCAxNiwgMjMzLCAyMDYsIDQxLCAxNiwgMjE2LCAyMSwgNDEsIDE2LCAKLSAgICAyNDcsIDE0NCwgNDEsIDE2LCAyMzUsIDYwLCA0MSwgMjEsIDIxMCwgODYsIDQxLCAyMSwgMTEwLCA0MSwgMjEsIDEwNSwgNDEsIAotICAgIDIxLCAxNTgsIDQxLCAyMSwgMTYxLCA0MSwgMjEsIDE4OSwgNDEsIDIxLCAxOTQsIDQxLCAyMSwgMTk4LCA0MSwgMjEsIDE5NSwgCi0gICAgNDEsIDIxLCAyMDAsIDQxLCAzLCAyMjksIDEyMywgMTg0LCA0MSwgMywgMjI5LCAxMjMsIDI0NywgMTQ1LCAzMywgNiwgMSwgCi0gICAgMjEwLCA5MCwgMzMsIDQsIDEsIDIxMCwgOTAsIDMzLCA2LCAxLCAyNDYsIDM0LCAzMywgNCwgMSwgMjQ2LCAzNCwgMzMsIDYsIAotICAgIDEsIDIyMywgNDksIDI0NiwgMzYsIDMzLCA0LCAxLCAyMjMsIDQ5LCAyNDYsIDM2LCAzMywgNiwgMSwgMjM1LCAxODUsIDMzLCAKLSAgICA0LCAxLCAyMzUsIDE4NSwgMzMsIDYsIDEsIDI0NywgMTYxLCAzMywgNCwgMSwgMjQ3LCAxNjEsIDMzLCA2LCAxLCAyMzAsIAotICAgIDE0MCwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMzAsIDE0MCwgMjE0LCAyMDUsIDMzLCA2LCAxLCAyNTEsIDEzNiwgMjI2LCAKLSAgICAyMDEsIDMzLCA0LCAxLCAyNTEsIDEzNiwgMjI2LCAyMDEsIDMzLCA2LCAxLCAyMjksIDg3LCAyMTEsIDMxLCAzMywgNCwgMSwgCi0gICAgMjI5LCA4NywgMjExLCAzMSwgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI1MiwgMTg1LCAyMTEsIDMxLCAzMywgNCwgMSwgMjExLCAKLSAgICAyOCwgMiwgMjUyLCAxODUsIDIxMSwgMzEsIDMzLCA2LCAxLCAyMzUsIDE4MywgMjExLCA1OSwgMzMsIDQsIDEsIDIzNSwgCi0gICAgMTgzLCAyMTEsIDU5LCAzMywgNiwgMSwgMjIzLCA0OSwgMjEwLCAyMTIsIDMzLCA0LCAxLCAyMjMsIDQ5LCAyMTAsIDIxMiwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTgzLCA2MSwgMzMsIDQsIDEsIDIzNSwgMTgzLCA2MSwgMzMsIDYsIDEsIDI1MCwgMCwgMjMyLCAKLSAgICAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUwLCAwLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTEsIDIxNCwgCi0gICAgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTEsIDIxNCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMzUsIDE4MywgMjUwLCAwLCAyMzIsIAotICAgIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE4MywgMjUwLCAwLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAKLSAgICAyMTAsIDI0NiwgMzMsIDQsIDEsIDIxMCwgMjQ2LCAzMywgNiwgMSwgMjIzLCA0OSwgMjE1LCAxNzgsIDMzLCA0LCAxLCAyMjMsIAotICAgIDQ5LCAyMTUsIDE3OCwgMzMsIDYsIDEsIDIxOSwgNTIsIDI0OCwgOTAsIDMzLCA0LCAxLCAyMTksIDUyLCAyNDgsIDkwLCAzMywgCi0gICAgNiwgMSwgMjE5LCA1MiwgMjQ1LCAxNzQsIDMzLCA0LCAxLCAyMTksIDUyLCAyNDUsIDE3NCwgMzMsIDYsIDEsIDIxOSwgNTIsIAotICAgIDI0NSwgMTU5LCAzMywgNCwgMSwgMjE5LCA1MiwgMjQ1LCAxNTksIDMzLCA2LCAxLCAyMzAsIDE0NCwgNzYsIDMzLCA0LCAxLCAKLSAgICAyMzAsIDE0NCwgNzYsIDMzLCA2LCAxLCAyNTEsIDI0MCwgNzYsIDMzLCA0LCAxLCAyNTEsIDI0MCwgNzYsIDMzLCA2LCAxLCAKLSAgICA1MiwgMjMwLCAxNDQsIDc2LCAzMywgNCwgMSwgNTIsIDIzMCwgMTQ0LCA3NiwgMzMsIDEsIDIzMCwgODYsIDc2LCAzOCwgMzMsIAotICAgIDIxMiwgMTAwLCAzOCwgMzMsIDIxNiwgMjQ4LCAyMzAsIDE5MSwgNTAsIDM4LCAzMywgMjQwLCAyMTEsIDIzMCwgMTkxLCA1MCwgCi0gICAgMzgsIDMzLCAyMTYsIDE0OCwgMjMwLCAxOTEsIDUwLCAyMTksIDkzLCAyNTMsIDIxNiwgMzgsIDMzLCAxLCAyMTQsIDIwMiwgCi0gICAgMjM2LCA2MCwgMzgsIDMzLCAxLCA3MywgMzgsIDMzLCAxLCAyMTEsIDgsIDM4LCAzMywgMSwgNzAsIDM4LCAzMywgMSwgMjQyLCAKLSAgICAzLCA1MCwgMzgsIDMzLCAxLCAyMTEsIDI3LCAzOCwgMzMsIDEsIDIxOSwgNTIsIDUwLCAzOCwgMzMsIDEsIDIyNiwgMjAxLCAKLSAgICAzOCwgMzMsIDIzNCwgMTkyLCAzOCwgMzMsIDIyNSwgMjI3LCAzMywgMjM0LCAxOTIsIDMzLCAyMjUsIDIyNywgMzMsIDYsIDEsIAotICAgIDI0NiwgNDYsIDMzLCA0LCAxLCAyNDYsIDQ2LCAzMywgNiwgMSwgMjQ2LCAyNywgMzMsIDQsIDEsIDI0NiwgMjcsIDMzLCA2LCAKLSAgICAxLCAyMTAsIDUyLCAzMywgNCwgMSwgMjEwLCA1MiwgMzMsIDYsIDEsIDI1MCwgMjA2LCAzMywgNCwgMSwgMjUwLCAyMDYsIAotICAgIDMzLCA2LCAxLCAyNDYsIDI1LCAzMywgNCwgMSwgMjQ2LCAyNSwgMzMsIDYsIDEsIDIxNywgMjMsIDIsIDIzMCwgMjI0LCAKLSAgICAxMDMsIDMzLCA0LCAxLCAyMTcsIDIzLCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgMjE1LCA3OCwgMzMsIDQsIDEsIAotICAgIDIxNSwgNzgsIDMzLCA2LCAxLCAyMTUsIDE2MCwgMzMsIDQsIDEsIDIxNSwgMTYwLCAzMywgNiwgMSwgMjE1LCAxNjQsIDMzLCAKLSAgICA0LCAxLCAyMTUsIDE2NCwgMzMsIDYsIDEsIDIxNywgMjgsIDMzLCA0LCAxLCAyMTcsIDI4LCAzMywgNiwgMSwgMjQwLCAxOTgsIAotICAgIDMzLCA0LCAxLCAyNDAsIDE5OCwgMzMsIDYsIDEsIDIxOSwgMjA2LCAzMywgNCwgMSwgMjE5LCAyMDYsIDM4LCAzMywgMSwgCi0gICAgMjM1LCAxODMsIDc1LCAyMCwgMSwgNjEsIDIwLCAxLCAxNzYsIDIwLCAxLCA3MCwgMjAsIDEsIDIzMywgMjE3LCAyMCwgMSwgCi0gICAgMjQ1LCAyMDksIDIwLCAxLCAyMjMsIDEwOCwgMjAsIDEsIDIxNywgODYsIDIwLCAxLCA3NiwgMjAsIDEsIDIyNywgMTQ4LCAKLSAgICAyMCwgMSwgNzMsIDIwLCAxLCAyMzMsIDEzNSwgMjAsIDEsIDE5MCwgMjAsIDEsIDIyMiwgMjM5LCAyMCwgMSwgMjIzLCAyOSwgCi0gICAgMjAsIDEsIDIzMywgNDksIDIwLCAxLCAyMzEsIDc5LCAyMCwgMSwgMjE3LCAxMDEsIDIwLCAxLCAyMjksIDE0NiwgMjAsIDEsIAotICAgIDIyOCwgMTgzLCAyMCwgMSwgMTkzLCAyMCwgMSwgMjE4LCA0LCAyMCwgMSwgMjMwLCAxMDIsIDIwLCAxLCAyMjAsIDI3LCAyMCwgCi0gICAgMSwgMjE5LCAxOTEsIDIwLCAxLCAyMjAsIDM3LCAyMCwgMSwgMjIwLCAxMjMsIDIwLCAxLCAyMzMsIDE1NSwgMjAsIDEsIAotICAgIDIzNCwgMTU2LCAyMCwgMSwgMjI3LCAyMDksIDIwLCAxLCAyMjcsIDIzNywgMjAsIDEsIDIyOCwgMTU0LCAyMCwgMSwgMjEwLCAKLSAgICAyMjYsIDIwLCAxLCAyMTksIDIyNSwgMjAsIDEsIDIxMCwgMTg3LCAyMCwgMSwgMTkxLCAyMCwgMSwgMjI4LCA5LCAyMCwgMSwgCi0gICAgMjM0LCAxNDIsIDIwLCAxLCAyMjUsIDE1MSwgMjAsIDEsIDIyOCwgMTc2LCAyMCwgMSwgMjI3LCAyNDYsIDIwLCAxLCAyMjQsIAotICAgIDE0NCwgMjAsIDEsIDIxMSwgMTkyLCAyMCwgMSwgMjI1LCAyMTEsIDIwLCAxLCAyNDQsIDE0NywgMjAsIDEsIDIyMiwgMTQwLCAKLSAgICAyMCwgMSwgMjMyLCA5OCwgMjAsIDEsIDIzMCwgMjMwLCAyMCwgMSwgMjI4LCAyMzMsIDIwLCAxLCAyMjMsIDUxLCAyMCwgMSwgCi0gICAgMjIzLCAxNzEsIDIwLCAxLCAyMzQsIDE2NSwgMjAsIDEsIDIyOSwgNywgMjAsIDEsIDIyOSwgNTYsIDIwLCAxLCAyMjksIDc3LCAKLSAgICAyMCwgMSwgMjIwLCA3LCAyMCwgMSwgMjI0LCAxNDcsIDIwLCAxLCAyNDMsIDIzNCwgMjAsIDEsIDI0NCwgMzcsIDIwLCAxLCAKLSAgICAyMTIsIDY1LCAyMCwgMSwgMTk3LCAyMCwgMSwgMjMyLCAyNDEsIDIwLCAxLCAyMjUsIDEwOCwgMjAsIDEsIDIzMiwgMTE5LCAKLSAgICAyMCwgMSwgMjM0LCAyOCwgMjAsIDEsIDIzMSwgMTE0LCAyMCwgMSwgMjIzLCA4MywgMjAsIDEsIDIzMSwgNTgsIDIwLCAxLCAKLSAgICAxODQsIDIwLCAxLCAyMTYsIDExNywgMjAsIDEsIDIzNCwgOTIsIDIwLCAxLCAyMzAsIDE2MSwgMjAsIDEsIDIzMSwgMTIyLCAKLSAgICAyMCwgMSwgMjE2LCAyMzAsIDIwLCAxLCAyMzMsIDI1MSwgMjAsIDEsIDIxNiwgMjQ3LCAyMCwgMSwgMjI3LCAyMzgsIDIwLCAKLSAgICAxLCAyMjEsIDI1MSwgMjAsIDEsIDI0NCwgMTkyLCAyMCwgMSwgMjMzLCAyNTMsIDIwLCAxLCAyMzQsIDI0LCAyMCwgMzgsIAotICAgIDE2NCwgMjM0LCA1LCAyMCwgMzgsIDE2NCwgMjE1LCAxMTAsIDIwLCAyMjgsIDE4MiwgMjAsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgMjAsIDI0OSwgMjI2LCAyMCwgMjQ5LCAyMTksIDIwLCAyMjAsIDE1MCwgMjAsIDIyNCwgMTMsIDc4LCA1OCwgMSwgMjUwLCAKLSAgICA5NiwgMTM4LCAyMTAsIDI1NCwgMjI1LCA2MSwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjExLCA3MCwgMjI1LCA2MSwgNTgsIDEsIAotICAgIDI1MCwgOTYsIDEzOCwgMjEwLCAyNTQsIDIyMCwgODQsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMSwgNzAsIDIyMCwgODQsIAotICAgIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMCwgMjU0LCAyMjQsIDMwLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTEsIDcwLCAKLSAgICAyMjQsIDMwLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTAsIDI1NCwgMjIyLCAxNDAsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIAotICAgIDIxMSwgNzAsIDIyMiwgMTQwLCA1OCwgMSwgMjQ1LCAyMCwgMjQ2LCAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIAotICAgIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIyNSwgMjQ2LCAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDExOCwgCi0gICAgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyNDYsIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDIwLCAyNDYsIDExOCwgCi0gICAgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgCi0gICAgMjI1LCAyNDYsIDExOCwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIAotICAgIDEzMCwgNTgsIDEsIDI0NSwgMTksIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjAsIDIzMywgCi0gICAgMzksIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjI1LCAyMzMsIDM5LCAKLSAgICAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyMzMsIDM5LCAxMzgsIAotICAgIDEzMCwgNTgsIDEsIDU5LCA2NywgMTMwLCA1OCwgMSwgNTksIDIxOSwgOTUsIDU4LCAxLCA1OSwgMjAzLCAxMzAsIDU4LCAxLCAKLSAgICAyMzIsIDEwOCwgNDQsIDI0OSwgMTYxLCAyNTQsIDEwOSwgNTgsIDEsIDIyMywgMTU3LCAxMjAsIDc0LCA1OCwgMSwgMjIzLCAKLSAgICAxNTcsIDEyNCwgNzQsIDU4LCAxLCAyMjMsIDE1NywgMjQ1LCAzMSwgNzgsIDU4LCAxLCAyMjMsIDE1NywgMjM1LCAxOTMsIAotICAgIDI0NSwgMzEsIDc4LCA1OCwgMSwgMTIxLCAyMzUsIDE5MywgMjQ1LCAzMSwgNzgsIDU4LCAxLCAyMTgsIDExMSwgMjIsIDEyNSwgCi0gICAgMjE2LCAzMCwgNTgsIDEsIDIxOCwgMTExLCAyMiwgMTIxLCAyMTYsIDMwLCA3LCA2LCAxLCAyNDUsIDE5OSwgMjU0LCAxNzAsIAotICAgIDcsIDQsIDEsIDI0NSwgMTk5LCAyNTQsIDE3MCwgNywgNiwgMSwgMjQ1LCAxOTksIDI1NCwgMTk2LCA3LCA0LCAxLCAyNDUsIAotICAgIDE5OSwgMjU0LCAxOTYsIDcsIDYsIDEsIDI0MSwgMjA3LCA3LCA0LCAxLCAyNDEsIDIwNywgNywgNiwgMSwgMjE1LCA0MCwgNywgCi0gICAgNCwgMSwgMjE1LCA0MCwgNywgNiwgMSwgMjE1LCAyMjksIDcsIDQsIDEsIDIxNSwgMjI5LCA3LCA2LCAxLCAyNDksIDExMCwgCi0gICAgNywgNCwgMSwgMjQ5LCAxMTAsIDcsIDYsIDEsIDI0OSwgMTExLCAyLCAyNDksIDIxOSwgNywgNCwgMSwgMjQ5LCAxMTEsIDIsIAotICAgIDI0OSwgMjE5LCA3LCAxLCA0LCA2LCAyNDUsIDYsIDcsIDEsIDQsIDYsIDIyMiwgOTEsIDcsIDYsIDEsIDI1NSwgNzMsIDcsIAotICAgIDQsIDEsIDI1NSwgNzMsIDcsIDYsIDEsIDI1NCwgNzMsIDcsIDQsIDEsIDI1NCwgNzMsIDcsIDYsIDEsIDI1MywgMTkyLCA3LCAKLSAgICA0LCAxLCAyNTMsIDE5MiwgNywgNiwgMSwgMjUzLCAxNzYsIDcsIDQsIDEsIDI1MywgMTc2LCA3LCA2LCAxLCAyNTMsIDE3NywgCi0gICAgMiwgMjAzLCAxMzAsIDcsIDQsIDEsIDI1MywgMTc3LCAyLCAyMDMsIDEzMCwgNywgNiwgMSwgMjUzLCAxNjcsIDcsIDQsIDEsIAotICAgIDI1MywgMTY3LCA3LCA2LCAxLCAyMjMsIDQ5LCAyNTEsIDY3LCAyLCAyNDcsIDEyMCwgNywgNCwgMSwgMjIzLCA0OSwgMjUxLCAKLSAgICA2NywgMiwgMjQ3LCAxMjAsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCA5MSwgNywgNiwgCi0gICAgMSwgMjM1LCAyNCwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDYsIDEsIAotICAgIDIzNSwgMjQsIDIsIDIxOCwgMTAzLCAyMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyMTgsIDEwMywgCi0gICAgMjIsIDI0NywgMjU1LCA5MSwgNywgNiwgMSwgMjUxLCAxMzUsIDE1NiwgNywgNCwgMSwgMjUxLCAxMzUsIDE1NiwgNywgNiwgCi0gICAgMSwgMjMzLCAxNDksIDIsIDEyNSwgOTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDE5OSwgMjE4LCAxMDMsIDIyNiwgMTIwLCA3LCA0LCAxLCAxNDQsIDIsIDE5OSwgMjE4LCAxMDMsIDIyNiwgMTIwLCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDIzMiwgMTIzLCA3LCA0LCAxLCAxNDQsIDIsIDIzMiwgMTIzLCA3LCA2LCAxLCAyMjYsIDE4MywgNywgNCwgCi0gICAgMSwgMjI2LCAxODMsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIDQsIDEsIAotICAgIDIyNiwgMTA2LCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAyNDQsIDUzLCAKLSAgICA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMjQ0LCA1MywgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDIxOCwgMjI5LCAyMTcsIDc3LCAKLSAgICA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMjE4LCAyMjksIDIxNywgNzcsIDcsIDYsIDEsIDIyNCwgOTcsIDIsIDIxOCwgMTAzLCAKLSAgICAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNCwgMSwgMjI0LCA5NywgMiwgMjE4LCAxMDMsIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCAKLSAgICA2LCAxLCAyMjQsIDk3LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDQsIDEsIDIyNCwgOTcsIDIsIDI0NywgMjU1LCA5MSwgNywgNiwgCi0gICAgMSwgMjIzLCAyMjQsIDIyMiwgMTg2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMjIyLCAxODYsIDcsIDYsIDEsIDIyMiwgMTMwLCAKLSAgICAyMjIsIDE4NiwgNywgNCwgMSwgMjIyLCAxMzAsIDIyMiwgMTg2LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMjQ3LCAyNTUsIAotICAgIDkxLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA2LCAxLCAyMTIsIDEwNiwgNywgNCwgMSwgMjEyLCAKLSAgICAxMDYsIDcsIDYsIDEsIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNCwgMSwgMjEzLCAxNDUsIDIxMCwgMTU5LCA3LCA2LCAxLCAKLSAgICAyMTYsIDE1MiwgMiwgOTEsIDcsIDQsIDEsIDIxNiwgMTUyLCAyLCA5MSwgNywgNiwgMSwgMjE2LCAxNTIsIDIsIDIxOCwgCi0gICAgMTAzLCAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNCwgMSwgMjE2LCAxNTIsIDIsIDIxOCwgMTAzLCAyMTYsIDEzOSwgMjQ4LCAKLSAgICAzOSwgNywgNiwgMSwgMjEzLCAyNDUsIDcsIDQsIDEsIDIxMywgMjQ1LCA3LCA2LCAxLCAyNDUsIDY1LCA3LCA0LCAxLCAyNDUsIAotICAgIDY1LCA3LCA2LCAxLCAyMzUsIDE3MSwgNywgNCwgMSwgMjM1LCAxNzEsIDcsIDYsIDEsIDI0OSwgMjA3LCA3LCA0LCAxLCAKLSAgICAyNDksIDIwNywgNTgsIDEsIDIxNCwgMTMzLCA3LCA0LCAxLCAyNDYsIDY5LCA3LCA0LCAxLCAyMzIsIDg0LCA3LCA0LCAxLCAKLSAgICAyMzAsIDgwLCA3LCA0LCAxLCAyMjcsIDIwMSwgNywgNCwgMSwgMjIyLCAxMjksIDcsIDEsIDQsIDYsIDIyMiwgMTI5LCA3LCAKLSAgICA0LCAxLCAyMTUsIDEwOCwgNywgNCwgMSwgMjE0LCAxOTcsIDcsIDYsIDEsIDIzNSwgMjEzLCAyNDksIDYwLCA3LCA0LCAxLCAKLSAgICAyMzUsIDIxMywgMjQ5LCA2MCwgNywgNiwgMSwgMjM1LCAyMTMsIDI0NSwgNiwgNywgNCwgMSwgMjM1LCAyMTMsIDI0NSwgNiwgCi0gICAgNywgNiwgMSwgMjM1LCAyMTMsIDI0MywgMjAyLCA3LCA2LCAxLCAyMTUsIDk0LCAyMzUsIDIxMywgMjQzLCAyMDIsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNiwgMSwgMjE1LCA5NCwgMTU2LCA3LCA0LCAxLCAyMTUsIDk0LCAKLSAgICAxNTYsIDcsIDYsIDEsIDIzNSwgMjEzLCAxNTMsIDcsIDQsIDEsIDIzNSwgMjEzLCAxNTMsIDcsIDYsIDEsIDIzNSwgMjEzLCAKLSAgICAyMjIsIDkxLCA3LCA0LCAxLCAyMzUsIDIxMywgMjIyLCA5MSwgNywgNiwgMSwgMjM1LCAyMTMsIDIxNywgMTUyLCA3LCA0LCAKLSAgICAxLCAyMzUsIDIxMywgMjE3LCAxNTIsIDU4LCAxLCAxMjEsIDI1MCwgMzEsIDI1NSwgMTQsIDU4LCAxLCAyNDksIDIyNiwgNTgsIAotICAgIDEsIDIxOSwgMjUxLCAyNDUsIDk4LCA1MCwgNywgNiwgMSwgMjIxLCAyNTUsIDcsIDQsIDEsIDIyMSwgMjU1LCA3LCA2LCAxLCAKLSAgICAyMTUsIDk0LCAyNDIsIDYwLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjIzLCA1NSwgMjQxLCA1MiwgMjIsIDI1MiwgNDEsIDcsIAotICAgIDYsIDEsIDIzMCwgMjYsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI0OCwgMzksIDcsIDYsIDEsIDI1MSwgCi0gICAgNjcsIDIsIDEzMCwgNywgNCwgMSwgMjUxLCA2NywgMiwgMTMwLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjI2LCAyNDgsIDkxLCAKLSAgICA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIAotICAgIDQsIDEsIDIzNSwgMjQsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA0LCAKLSAgICAxLCAyMzAsIDI2LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDQsIDEsIAotICAgIDIyMywgMjI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNCwgMSwgCi0gICAgMjIyLCA5MiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAxMDMsIDU4LCAxLCA2LCAyNDIsIDYxLCAyLCAKLSAgICA5MSwgNTgsIDEsIDQsIDI3LCAyMjYsIDIzNCwgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTkzLCA3LCAyNDUsIDEwMywgMSwgCi0gICAgMjIzLCA0OSwgMjQ1LCA2LCA3LCAyNDUsIDEwMywgMSwgMjIzLCA0OSwgMjI2LCAxMDUsIDcsIDI0NSwgMTAzLCAxLCAyMzUsIAotICAgIDE5MywgMTkzLCA3LCAyNDUsIDEwMywgMSwgMjQwLCAxNTQsIDIzMiwgMTI5LCA3LCAyNDUsIDEwMywgMSwgMjU0LCAyMywgCi0gICAgMTkzLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDYxLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDczLCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDUsIDI0NiwgNDgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzAsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzUsIAotICAgIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzYsIDIxNywgMjMwLCAyMjksIDIxNCwgNSwgMjQxLCAyNTMsIDIxNywgMjMwLCAKLSAgICAyMjksIDIxNCwgMSwgMjM0LCAyOCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMzQsIDEwNSwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAxLCAyNDIsIDE3NCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDIsIDIyNCwgMjE3LCAyMzAsIDIyOSwgMjE0LCA1LCAKLSAgICAyNTQsIDc1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0OSwgMjM4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI1MCwgODYsIAotICAgIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjM1LCA2OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMzUsIDEwOSwgMjE3LCAKLSAgICAyMzAsIDIyOSwgMjE0LCAxLCAyMTUsIDEzMywgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMTUsIDEzOSwgMjE3LCAyMzAsIAotICAgIDIyOSwgMjE0LCAxLCAyNDgsIDEwNSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDgsIDExNCwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAxLCAxMTEsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjE2LCAxNTYsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ3LCAKLSAgICAxNDUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ4LCA3LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyOCwgNzQsIDIxNywgCi0gICAgMjMwLCAyMjksIDIxNCwgMSwgMjI1LCAxNiwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMjUsIDEyMSwgMjE3LCAyMzAsIAotICAgIDIyOSwgMjE0LCAxLCAyNTEsIDIwNSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNTIsIDEwLCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDEsIDIzMCwgMTYxLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyMiwgMjExLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIAotICAgIDIzMiwgMTU2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyMiwgMTY1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIxOSwgCi0gICAgNTgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQxLCA2OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAyNSwgNSwgNjEsIDIxNywgCi0gICAgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDczLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDI1LCA1LCA3MCwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAyNSwgNSwgNzUsIDIxNywgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDIyNiwgMTgzLCAyMTcsIDIzMCwgMjI5LCAyMTQsIAotICAgIDIyNSwgMTIsIDIzMSwgMTU4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDIyNSwgMTIsIDIzMSwgMTU3LCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDIyNSwgMTIsIDIzMSwgMTU2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDIyNSwgMTIsIDIzMSwgMTU1LCAyMjgsIDU2LCAKLSAgICAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDIyOCwgNTYsIDIzNSwgMjQwLCAyNDQsIDIsIDEyMywgMjQyLCAyNywgCi0gICAgMjI4LCA1NiwgMjM1LCAyNDAsIDI0NCwgMiwgMTM0LCAyMjQsIDE5LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIAotICAgIDIxOSwgMTE3LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIDI0NSwgMTg4LCAyMjgsIDU2LCAyMzUsIDI0MCwgCi0gICAgMjQ0LCAyLCAxMzQsIDIxOSwgMTE2LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjI0LCAyMiwgNzgsIDIyOCwgNTYsIDIzNSwgMjQwLCAKLSAgICAyMjUsIDQwLCA3OCwgMjI4LCA1NiwgMjM1LCAyNDAsIDIyMiwgMTE4LCA3OCwgMjI4LCA1NiwgMjM1LCAyNDAsIDIyNCwgMjMsIAotICAgIDc4LCAyMjUsIDE0NCwgMSwgMTc2LCAyMjUsIDE0NCwgMSwgMjM0LCAxMzIsIDIyNSwgMTQ0LCAxLCAyNDMsIDEzNSwgMjI1LCAKLSAgICAxNDQsIDEsIDIyOSwgNzcsIDIyNSwgMTQ0LCAxLCAyNTEsIDMzLCAyMjUsIDE0NCwgMSwgMjUwLCAxNTcsIDIyNSwgMTQ0LCAKLSAgICAxLCAyMzUsIDE0MSwgMjI1LCAxNDQsIDEsIDIyNywgMTY1LCAyMjUsIDE0NCwgMSwgMjE3LCAxMDUsIDIyNSwgMTQ0LCAxLCAKLSAgICAyMTYsIDIwOCwgMjI1LCAxNDQsIDEsIDI0OCwgMjIxLCAyMjUsIDE0NCwgMSwgMTk3LCAyMjUsIDE0NCwgMSwgMTkwLCAyMjUsIAotICAgIDE0NCwgMSwgMjI1LCAxNDcsIDIyNSwgMTQ0LCAxLCAyNTIsIDE5MSwgMjI1LCAxNDQsIDEsIDE4NCwgMjI1LCAxNDQsIDEsIAotICAgIDIxNSwgMTgzLCAyMjUsIDE0NCwgMSwgMjE1LCAxNzUsIDIyNSwgMTQ0LCAxLCAyNDYsIDM4LCAyMjUsIDE0NCwgMSwgMjEyLCAKLSAgICA2NSwgMjI1LCAxNDQsIDEsIDIxMCwgODIsIDIyNSwgMTQ0LCAxLCAyMTAsIDExNiwgMjI1LCAxNDQsIDEsIDQsIDYxLCAyMjUsIAotICAgIDE0NCwgMSwgMTkxLCAyMjUsIDE0NCwgMSwgMjA1LCAyMjUsIDE0NCwgMSwgMjMzLCAxMzUsIDIyNSwgMTQ0LCAxLCAyMjAsIAotICAgIDEwMiwgMjI1LCAxNDQsIDEsIDIwNiwgMjI1LCAxNDQsIDEsIDE2MiwgMjI1LCAxNDQsIDEsIDYxLCAyMjUsIDE0NCwgMSwgCi0gICAgNzMsIDIyNSwgMTQ0LCAxLCA3MCwgMjI1LCAxNDQsIDEsIDc1LCAyMjUsIDE0NCwgMSwgNzYsIDIyNSwgMTQ0LCAxLCAyMjQsIAotICAgIDg4LCAyMjUsIDE0NCwgMSwgMjExLCAxNjUsIDIyNSwgMTQ0LCAxLCAyNDQsIDE5NiwgMjI1LCAxNDQsIDEsIDI0MywgMjksIAotICAgIDIyNSwgMTQ0LCAxLCAyNDUsIDIwOSwgMjI1LCAxNDQsIDIxOCwgNzMsIDEsIDIxMiwgNjUsIDIyNSwgMTQ0LCAyMTgsIDczLCAKLSAgICAxLCAxOTEsIDIyNSwgMTQ0LCAxLCAyMTUsIDE1NiwgMjI1LCAxNDQsIDEsIDIxNSwgMTQ0LCAyMjUsIDE0NCwgMSwgMjQ4LCAKLSAgICAxMzUsIDIyNSwgMTQ0LCAxLCAyMjgsIDExMCwgMjI1LCAxNDQsIDEsIDI1NCwgMTQxLCAxOTEsIDIyNSwgMTQ0LCAxLCAyMTMsIAotICAgIDEzNCwgMjIwLCAxMDIsIDIyNSwgMTQ0LCAxLCAyMTMsIDEzNSwgMTYyLCAyMjUsIDE0NCwgMSwgMjUzLCAyMjMsIDI0NCwgCi0gICAgMTk2LCAyMjUsIDE0NCwgMjE4LCA3MywgMSwgMjA1LCAyMjUsIDE0NCwgMjE4LCAyNSwgMSwgMjA1LCAyMjUsIDE0NCwgMSwgCi0gICAgMjUwLCAyNTUsIDIyNSwgMTQ0LCAyMTksIDE1NSwgMjQxLCAyMzYsIDc4LCAyMjUsIDE0NCwgNTIsIDI0MSwgMjM2LCA3OCwgCi0gICAgMjI1LCAxNDQsIDE2NCwgMjIwLCA5NSwgMjI1LCAxNDQsIDE2NCwgNTIsIDIyMCwgOTUsIDE3OSwgNSwgMjU0LCA3NSwgMTc5LCAKLSAgICA1LCAyMTMsIDE0NywgMTc5LCAxLCA2MSwgMTc5LCAxLCAyNTUsIDczLCAxNzksIDEsIDczLCAxNzksIDEsIDIzNiwgMzMsIAotICAgIDE3OSwgMSwgNzAsIDE3OSwgMSwgMjE0LCAxMTgsIDE3OSwgMSwgMTQ5LCAxNTMsIDE3OSwgMSwgMTQ5LCAyMjIsIDE4MCwgCi0gICAgMTc5LCAxLCAxNDksIDE1NiwgMTc5LCAxLCAxNDksIDIzMiwgMTg1LCAxNzksIDEsIDc1LCAxNzksIDEsIDI0NSwgMjA5LCAKLSAgICAxNzksIDEsIDI1NCwgMjAxLCAxNzksIDEsIDc2LCAxNzksIDEsIDIyNiwgMTgzLCAxNzksIDEsIDI1MywgMTkyLCAxNzksIDEsIAotICAgIDE3NiwgMTc5LCAxLCAyMzQsIDEzMiwgMTc5LCAxLCAyNDMsIDEzNSwgMTc5LCAxLCAyNDIsIDI0OSwgMTc5LCAxLCAyMjksIAotICAgIDc3LCAxNzksIDEsIDI1MSwgMzMsIDE3OSwgMSwgMjUwLCAxNTcsIDE3OSwgMSwgMjM1LCAxNDEsIDE3OSwgMSwgMjM1LCAKLSAgICAxMTQsIDE3OSwgMSwgMjI3LCAxNjUsIDE3OSwgMSwgMjE1LCAxNTYsIDE3OSwgMSwgMjE1LCAxNDQsIDE3OSwgMSwgMjQ4LCAKLSAgICAxMzUsIDE3OSwgMSwgMjQ4LCAxMTksIDE3OSwgMSwgMjI4LCAxMTAsIDE3OSwgMSwgMjE3LCAxMDUsIDE3OSwgMSwgMjE2LCAKLSAgICAyMDgsIDE3OSwgMSwgMjQ4LCAyMjEsIDE3OSwgMSwgMjQ4LCAyNSwgMTc5LCAxLCAxOTcsIDE3OSwgMSwgMTkwLCAxNzksIDEsIAotICAgIDIyNSwgMTQ3LCAxNzksIDEsIDI1MiwgMTkxLCAxNzksIDEsIDI1MiwgMTgsIDE3OSwgMSwgMTg0LCAxNzksIDEsIDE5MSwgCi0gICAgMTc5LCAxLCAyMDUsIDE3OSwgMSwgMjMzLCAxMzUsIDE3OSwgMSwgMjE0LCAyNywgMTc5LCAxLCAyMjAsIDEwMiwgMTc5LCAxLCAKLSAgICAyMTgsIDIyMywgMTc5LCAxLCAyMDYsIDE3OSwgMSwgMTYyLCAxNzksIDEsIDIzMiwgMTg0LCAxNzksIDExNiwgNSwgMjQyLCAKLSAgICA0NCwgMTc5LCAyNSwgNSwgMjU1LCA3MywgMTc5LCAyNSwgNSwgNzMsIDE3OSwgMjUsIDUsIDIzNiwgMzMsIDE3OSwgMjUsIDUsIAotICAgIDcwLCAxNzksIDI1LCA1LCAyMTQsIDExOCwgMTc5LCAyNSwgNSwgMTQ5LCAxNTMsIDE3OSwgMjUsIDUsIDE0OSwgMjIyLCAKLSAgICAxODAsIDE3OSwgMjUsIDUsIDE0OSwgMTU2LCAxNzksIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNzksIDI1LCA1LCA3NSwgCi0gICAgMTc5LCAyNSwgNSwgMjQ1LCAyMDksIDE3OSwgMjUsIDUsIDI1NCwgMjAxLCAxNzksIDI1LCA1LCA3NiwgMTc5LCAyNSwgNSwgCi0gICAgMjI2LCAxODMsIDE3OSwgMjUsIDUsIDI1MywgMTkyLCAxNzksIDUsIDIxMywgMTUyLCAxNzksIDI0OCwgMTc4LCAxNzksIDUyLCAKLSAgICAyNDgsIDE3OCwgMTc5LCAyMSwgMjEwLCA4NiwgMTc5LCAyMSwgMTEwLCAxNzksIDIxLCAxMDUsIDE3OSwgMjEsIDE1OCwgCi0gICAgMTc5LCAyMSwgMTYxLCAxNzksIDIxLCAxODksIDE3OSwgMjEsIDE5NCwgMTc5LCAyMSwgMTk4LCAxNzksIDIxLCAxOTUsIAotICAgIDE3OSwgMjEsIDIwMCwgMzgsIDg0LCAyMSwgMjEwLCA4NiwgMzgsIDg0LCAyMSwgMTEwLCAzOCwgODQsIDIxLCAxMDUsIDM4LCAKLSAgICA4NCwgMjEsIDE1OCwgMzgsIDg0LCAyMSwgMTYxLCAzOCwgODQsIDIxLCAxODksIDM4LCA4NCwgMjEsIDE5NCwgMzgsIDg0LCAKLSAgICAyMSwgMTk4LCAzOCwgODQsIDIxLCAxOTUsIDM4LCA4NCwgMjEsIDIwMCwgMzgsIDg0LCAxLCA2MSwgMzgsIDg0LCAxLCA3MCwgCi0gICAgMzgsIDg0LCAxLCAxNzYsIDM4LCA4NCwgMSwgMTk3LCAzOCwgODQsIDEsIDE5MCwgMzgsIDg0LCAxLCAyMDUsIDM4LCA4NCwgCi0gICAgMSwgMjEzLCAxNzYsIDM4LCA4NCwgNSwgMjUzLCAxNzUsIDg0LCA1LCAyMTksIDE3LCAyNTAsIDI1NSwgODQsIDUsIDI1MSwgCi0gICAgMCwgMjEzLCAxNTIsIDg0LCA1LCA1MiwgMjUxLCAwLCAyMTMsIDE1MiwgODQsIDUsIDI1MSwgMCwgMTA1LCA4NCwgNSwgMjUxLCAKLSAgICAwLCAxNTgsIDg0LCA1LCAyNTEsIDAsIDI1MywgMTc1LCA4NCwgNSwgMjI0LCAxMjQsIDg0LCAyNDMsIDEwMCwgMjQ0LCAxMDMsIAotICAgIDg0LCAyNTAsIDIzOCwgODQsIDI0MSwgMjMwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAyMTAsIDg2LCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDIxLCAxMTAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDEwNSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgCi0gICAgMTU4LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxNjEsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDE4OSwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAyMSwgMTk0LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxOTgsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIAotICAgIDE5NSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMjAwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE3NiwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAxLCAyMzQsIDEzMiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDMsIDEzNSwgMjM0LCAxODgsIDIzMiwgCi0gICAgMjQyLCAxLCAyMjksIDc3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIwNiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjAsIAotICAgIDEwMiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTAsIDExNiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjcsIDE2NSwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTcsIDEwNSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDAsIDIyNiwgMjM0LCAKLSAgICAxODgsIDIzMiwgMjQyLCAxLCAxOTcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTkwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIAotICAgIDIyNSwgMTQ3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE4NCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDgsIDIyMSwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNTIsIDE5MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMDUsIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMSwgMTkxLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIzMywgMTM1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIAotICAgIDIxMiwgNjUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjE2LCAyMDgsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTYyLCAKLSAgICAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIxNCwgMjcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjUxLCAzMywgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAxLCA2MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjYsIDIzNCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAKLSAgICA3MywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjYsIDE4MywgMjM0LCAxODgsIDIzMiwgMjQyLCAyNSwgMjE0LCAyMTQsIAotICAgIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDc1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDI1LCA3MCwgMjM0LCAxODgsIDIzMiwgCi0gICAgMjQyLCAyNSwgMjQ1LCAyMDksIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDc2LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEzOCwgCi0gICAgMjI1LCAzMCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxMzgsIDI1MSwgMTIsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMTM4LCAyNTEsIAotICAgIDEzLCAyMjUsIDMwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDUsIDI0OSwgNzcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgNSwgMjE5LCAKLSAgICAxOTksIDIyMywgOTMsIDEsIDE3NiwgMjIzLCA5MywgMSwgMjQzLCAxMzUsIDIyMywgOTMsIDEsIDIyOSwgNzcsIDIyMywgOTMsIAotICAgIDEsIDIxNywgMTA1LCAyMjMsIDkzLCAxLCAyNDgsIDIyMSwgMjIzLCA5MywgMSwgMTk3LCAyMjMsIDkzLCAxLCAxOTAsIDIyMywgCi0gICAgOTMsIDEsIDI1MiwgMTkxLCAyMjMsIDkzLCAxLCAxODQsIDIyMywgOTMsIDEsIDI1MSwgMzMsIDIyMywgOTMsIDEsIDIzNSwgCi0gICAgMTQxLCAyMjMsIDkzLCAxLCAyMjcsIDE2NSwgMjIzLCA5MywgMSwgMjA2LCAyMjMsIDkzLCAxLCAyMDUsIDIyMywgOTMsIDEsIAotICAgIDIzMywgMTM1LCAyMjMsIDkzLCAxLCAxOTEsIDIyMywgOTMsIDEsIDIxMiwgNjUsIDIyMywgOTMsIDEsIDE2MiwgMjIzLCA5MywgCi0gICAgMSwgMjMxLCAxMjQsIDIyMywgOTMsIDEsIDIyOSwgNTYsIDIyMywgOTMsIDEsIDIyOSwgMTQ4LCAyMjMsIDkzLCAxLCAyMjcsIAotICAgIDEzNSwgMjIzLCA5MywgMSwgNjEsIDIyMywgOTMsIDI1LCA1LCA3MywgMjIzLCA5MywgMjUsIDUsIDcwLCAyMjMsIDkzLCAyNSwgCi0gICAgNSwgNzUsIDIyMywgOTMsIDI1LCA1LCAyNTQsIDIwMSwgMjIzLCA5MywgMjUsIDUsIDc2LCAyMjMsIDkzLCAyNSwgNSwgMjUzLCAKLSAgICAxOTIsIDIyMywgOTMsIDI1LCA1LCAyNDUsIDU1LCAyMjMsIDkzLCAyNSwgNSwgMjQ1LCAyMzMsIDIyMywgOTMsIDExNiwgNSwgCi0gICAgMjI5LCA3OSwgMjIzLCA5MywgMTE2LCA1LCAyMzAsIDI1LCAyMjMsIDkzLCAxMTYsIDUsIDE1MywgMjIzLCA5MywgMTE2LCA1LCAKLSAgICAyNDIsIDYwLCAyMjMsIDkzLCAyMTMsIDE1MiwgMjIzLCA5MywgMjIxLCAxNzMsIDc4LCAyNCwgMTAwLCAyMTYsIDk3LCAyNCwgCi0gICAgMTAwLCAyMTYsIDk2LCAyNCwgMTAwLCAyMTYsIDk0LCAyNCwgMTAwLCAyMTYsIDk5LCAyNCwgMTAwLCAyMjMsIDIxLCAyNCwgCi0gICAgMTAwLCAyMjMsIDUsIDI0LCAxMDAsIDIyMywgMCwgMjQsIDEwMCwgMjIzLCAyLCAyNCwgMTAwLCAyMjMsIDE4LCAyNCwgMTAwLCAKLSAgICAyMjMsIDExLCAyNCwgMTAwLCAyMjMsIDQsIDI0LCAxMDAsIDIyMywgMjMsIDI0LCAxMDAsIDIyMywgNiwgMjQsIDEwMCwgCi0gICAgMjIzLCAyNSwgMjQsIDEwMCwgMjIzLCAyMiwgMjQsIDEwMCwgMjMwLCAyMTMsIDI0LCAxMDAsIDIzMCwgMjA0LCAyNCwgMTAwLCAKLSAgICAyMzAsIDIwNywgMjQsIDEwMCwgMjI1LCA4MCwgMjQsIDEwMCwgMjI1LCA5MSwgMjQsIDEwMCwgMjI1LCA5MiwgMjQsIDEwMCwgCi0gICAgMjE4LCAyMDcsIDI0LCAxMDAsIDIzNiwgNDYsIDI0LCAxMDAsIDIzNiwgNTMsIDI0LCAxMDAsIDIxOCwgMjE4LCAyNCwgMTAwLCAKLSAgICAyMTgsIDIwNSwgMjQsIDEwMCwgMjI1LCAxMzAsIDI0LCAxMDAsIDI0MSwgMTY3LCAyNCwgMTAwLCAyMTgsIDIwMiwgMTU1LCAKLSAgICA1LCAyMjYsIDI3LCAxNTUsIDUsIDI1MCwgMTg3LCAxNTUsIDUsIDIzMywgNjYsIDE1NSwgNSwgMjExLCAyNDMsIDE1NSwgMSwgCi0gICAgNjEsIDE1NSwgMSwgMjQwLCAxNTQsIDIzNCwgMTkxLCAxNTUsIDEsIDczLCAxNTUsIDEsIDIzNiwgMzMsIDE1NSwgMSwgNzAsIAotICAgIDE1NSwgMSwgMjI2LCA5MCwgMjUwLCAxNjMsIDE1NSwgMSwgMjI5LCA3OCwgMjMzLCAyOCwgMTU1LCAxLCAyMjksIDc4LCAKLSAgICAyMzMsIDI5LCAyMjMsIDE0MiwgMTU1LCAxLCA3NSwgMTU1LCAxLCAyNTQsIDIwMSwgMTU1LCAxLCA3NiwgMTU1LCAxLCAxNzYsIAotICAgIDE1NSwgMSwgMjM1LCAxMywgMjIxLCAyMjgsIDE1NSwgMSwgMjM1LCAxMywgMjMwLCA2NiwgMTU1LCAxLCAyNDMsIDEzNSwgCi0gICAgMTU1LCAxLCAyNDMsIDEzNiwgMjMwLCA2NiwgMTU1LCAxLCAyMjksIDc3LCAxNTUsIDEsIDI1MSwgMzMsIDE1NSwgMSwgMjUxLCAKLSAgICAzNCwgMjMwLCA2NiwgMTU1LCAxLCAyMzUsIDE0MSwgMTU1LCAxLCAyMjcsIDE2NiwgMjMwLCA2NiwgMTU1LCAxLCAyMzUsIAotICAgIDE0MiwgMjMxLCAyMDcsIDE1NSwgMSwgMjI3LCAxNjUsIDE1NSwgMSwgMjE1LCAxNTYsIDE1NSwgMSwgMjE1LCAxNTcsIDIzMSwgCi0gICAgMjA3LCAxNTUsIDEsIDI0OCwgMTM1LCAxNTUsIDEsIDI0OCwgMTM2LCAyMzEsIDIwNywgMTU1LCAxLCAyMjksIDIyOSwgMjMwLCAKLSAgICA2NiwgMTU1LCAxLCAyMTcsIDEwNSwgMTU1LCAxLCAyMTcsIDEwNiwgMjMwLCA2NiwgMTU1LCAxLCAyNDgsIDIyMSwgMTU1LCAKLSAgICAxLCAyNDgsIDIyMiwgMjMxLCAyMDcsIDE1NSwgMSwgMTk3LCAxNTUsIDEsIDE5MCwgMTU1LCAxLCAyMjYsIDkwLCAyMzAsIAotICAgIDY2LCAxNTUsIDEsIDI1MiwgMTkxLCAxNTUsIDEsIDI1MiwgMTkyLCAyMzAsIDY2LCAxNTUsIDEsIDE4NCwgMTU1LCAxLCAKLSAgICAxOTEsIDE1NSwgMSwgMjA1LCAxNTUsIDEsIDIyMywgMTg4LCAyNTQsIDIxMCwgMTU1LCAxLCAyMzMsIDEzNSwgMTU1LCAxLCAKLSAgICAyMTIsIDY1LCAxNTUsIDEsIDIyMiwgMzQsIDIzMCwgNjYsIDE1NSwgMSwgMjIyLCAzNCwgMjMxLCAyMDcsIDE1NSwgMSwgCi0gICAgMjA2LCAxNTUsIDEsIDE2MiwgMTU1LCA1LCAyNTAsIDE4OCwgMjE2LCAyNTAsIDE1NSwgMjUsIDUsIDIxNywgNDcsIDE1NSwgCi0gICAgMjUsIDUsIDIxNiwgMzUsIDE1NSwgMjUsIDUsIDIxMSwgMTkwLCAxNTUsIDI1LCA1LCAyMTEsIDE5MSwgMjMxLCA2OSwgMTU1LCAKLSAgICAyNSwgNSwgMjE4LCA0NywgMTU1LCAyNSwgNSwgMjE4LCA0OCwgMjMxLCA1NywgMTU1LCAyNSwgNSwgMjE3LCA2NSwgMTU1LCAKLSAgICAyNSwgNSwgMjQ3LCAxOTQsIDIzMCwgNjUsIDE1NSwgMjUsIDUsIDIyNSwgMTg0LCAxNTUsIDExNiwgNSwgMjM0LCAxNTgsIAotICAgIDE1NSwgMTE2LCA1LCAyMjUsIDE5NiwgMTU1LCAxMTYsIDUsIDI1MSwgMTksIDE1NSwgMjI2LCA0MCwgMTU1LCA0MywgMjIzLCAKLSAgICA2OSwgMTU1LCA0NCwgMjIzLCA2OSwgMTU1LCAyMjYsIDc5LCAyNTQsIDExNywgMTU1LCAyMjYsIDc5LCAyMzEsIDIyNCwgCi0gICAgMTU1LCAyMjYsIDc5LCAyMzIsIDg4LCAxNTUsIDIyNiwgNzksIDIxMSwgMjM4LCAxNTUsIDIyNiwgNzksIDIyNiwgNDEsIAotICAgIDE1NSwgMjI2LCA3OSwgMjMyLCAyMDUsIDE1NSwgMjI2LCA3OSwgMjMyLCA4MiwgMTU1LCAyMjYsIDc5LCAyNTQsIDI0OSwgCi0gICAgMTU1LCAyMjYsIDc5LCAyNTQsIDI1MCwgMjU0LCAyNDksIDE1NSwgMjI2LCA3OSwgMjI1LCA1MSwgMTU1LCAyMTUsIDk0LCAKLSAgICAyMjYsIDc5LCAyMjUsIDUxLCAxNTUsIDIyNiwgMzYsIDE1NSwgMjEsIDIxMCwgODYsIDE1NSwgMjEsIDExMCwgMTU1LCAyMSwgCi0gICAgMTA1LCAxNTUsIDIxLCAxNTgsIDE1NSwgMjEsIDE2MSwgMTU1LCAyMSwgMTg5LCAxNTUsIDIxLCAxOTQsIDE1NSwgMjEsIAotICAgIDE5OCwgMTU1LCAyMSwgMTk1LCAxNTUsIDIxLCAyMDAsIDE1NSwgMjI2LCA3OSwgMjE2LCA2OSwgMjE1LCAxMDYsIDE1NSwgCi0gICAgMjI2LCA3OSwgMjM1LCAxNjcsIDE3MiwgMSwgNjEsIDE3MiwgMSwgNzMsIDE3MiwgMSwgNzAsIDE3MiwgMSwgNzUsIDE3MiwgCi0gICAgMSwgMjU0LCAyMDEsIDE3MiwgMSwgNzYsIDE3MiwgMSwgMTc2LCAxNzIsIDEsIDIzNCwgMTMyLCAxNzIsIDEsIDI0MywgMTM1LCAKLSAgICAxNzIsIDEsIDI0MiwgMjQ5LCAxNzIsIDEsIDIyOCwgMjQ1LCAxNzIsIDEsIDIyOSwgNzcsIDE3MiwgMSwgMjUwLCAxNTcsIAotICAgIDE3MiwgMSwgMjUwLCAxMTIsIDE3MiwgMSwgMjM1LCAxNDEsIDE3MiwgMSwgMjM1LCAxMTQsIDE3MiwgMSwgMjI4LCAyMzUsIAotICAgIDE3MiwgMSwgMjI4LCAyMzcsIDE3MiwgMSwgMjI4LCAyMzYsIDE3MiwgMSwgMjE3LCAxMDUsIDE3MiwgMSwgMjE2LCAyMDgsIAotICAgIDE3MiwgMSwgMjQ4LCAyMjEsIDE3MiwgMSwgMjQ4LCAyNSwgMTcyLCAxLCAyMjcsIDIwNywgMTcyLCAxLCAxOTcsIDE3MiwgMSwgCi0gICAgMjQ4LCAxMzUsIDE3MiwgMSwgMTkwLCAxNzIsIDEsIDIyNCwgMjIwLCAxNzIsIDEsIDIyNSwgMTQ3LCAxNzIsIDEsIDI1MiwgCi0gICAgMTkxLCAxNzIsIDEsIDI1MiwgMTgsIDE3MiwgMSwgMjMwLCA5NSwgMTcyLCAxLCAxODQsIDE3MiwgMSwgMjUyLCAxMTEsIAotICAgIDE3MiwgMSwgMTkxLCAxNzIsIDEsIDIwNSwgMTcyLCAxLCAyMzMsIDEzNSwgMTcyLCAxLCAyMTQsIDI3LCAxNzIsIDEsIDIxOCwgCi0gICAgMjIzLCAxNzIsIDEsIDIwNiwgMTcyLCAxLCAxNjIsIDE3MiwgMjUsIDUsIDI1NSwgNzMsIDE3MiwgMjUsIDUsIDczLCAxNzIsIAotICAgIDI1LCA1LCAyMzYsIDMzLCAxNzIsIDI1LCA1LCAyNDUsIDE5NSwgMTcyLCAyNSwgNSwgNzAsIDE3MiwgMjUsIDUsIDIyNiwgCi0gICAgMjM0LCAxNzIsIDI1LCA1LCA3NiwgMTcyLCAyNSwgNSwgMjU0LCAyMDEsIDE3MiwgMjUsIDUsIDI1MywgMTkyLCAxNzIsIDI1LCAKLSAgICA1LCAyMTQsIDIxNCwgMTcyLCAxMTYsIDUsIDE5MSwgMTcyLCAxMTYsIDUsIDIwNSwgMTcyLCAxMTYsIDUsIDIzMywgMTM1LCAKLSAgICAxNzIsIDExNiwgNSwgMjEyLCA2NSwgMTcyLCAxLCA0MCwgMjM1LCAyMywgMTcyLCAxLCA0MCwgMjQzLCAyMDIsIDE3MiwgMSwgCi0gICAgNDAsIDIyOSwgNzksIDE3MiwgMTE2LCA1LCA0MCwgMjI5LCA3OSwgMTcyLCAxLCA0MCwgMjUwLCAxNTgsIDE3MiwgMSwgNDAsIAotICAgIDIxNywgMTUyLCAxNzIsIDEsIDQwLCAyMzAsIDI1LCAxNzIsIDEsIDQwLCAyMjYsIDEwNSwgMTcyLCAxLCA0MCwgMjExLCAKLSAgICAxMTcsIDE3MiwgMSwgNDAsIDE1MywgMTcyLCAxLCA0MCwgMTU2LCAxNzIsIDEsIDQwLCAyMTgsIDIyNiwgMTcyLCAxMTYsIDUsIAotICAgIDQwLCAxOTMsIDE3MiwgMTE2LCA1LCA0MCwgMjQyLCA2MCwgMTcyLCAyMSwgMjEwLCA4NiwgMTcyLCAyMSwgMTEwLCAxNzIsIAotICAgIDIxLCAxMDUsIDE3MiwgMjEsIDE1OCwgMTcyLCAyMSwgMTYxLCAxNzIsIDIxLCAxODksIDE3MiwgMjEsIDE5NCwgMTcyLCAyMSwgCi0gICAgMTk4LCAxNzIsIDIxLCAxOTUsIDE3MiwgMjEsIDIwMCwgMTcyLCAyMjQsIDE0MSwgMjE4LCAyNTEsIDE3MiwgMjI0LCAxNDEsIAotICAgIDI0OCwgMTc4LCAxNzIsIDIyNCwgMTQxLCA1MiwgMjQ4LCAxNzgsIDE3MiwgMjI0LCAxNDEsIDIxNSwgMjExLCAyNDgsIDE3OCwgCi0gICAgNjgsIDEsIDIzNCwgMTI2LCAyNDMsIDEzNSwgNjgsIDEsIDIzNCwgMTI2LCAyNTEsIDMzLCA2OCwgMSwgMjM0LCAxMjYsIAotICAgIDI1MCwgMTU3LCA2OCwgMSwgMjM0LCAxMjYsIDIzNSwgMTQxLCA2OCwgMSwgMjM0LCAxMjYsIDIzNSwgMTE0LCA2OCwgMSwgCi0gICAgMjM0LCAxMjYsIDIyNywgMTY1LCA2OCwgMSwgMjM0LCAxMjYsIDIxNSwgMTU2LCA2OCwgMSwgMjM0LCAxMjYsIDIxNSwgMTQ0LCAKLSAgICA2OCwgMSwgMjM0LCAxMjYsIDI0OCwgMTM1LCA2OCwgMSwgMjM0LCAxMjYsIDI0OCwgMTE5LCA2OCwgMSwgMjM0LCAxMjYsIAotICAgIDI0OCwgMjUsIDY4LCAxLCAyMzQsIDEyNiwgMTk3LCA2OCwgMSwgMjM0LCAxMjYsIDIwNiwgNjgsIDEsIDIzNCwgMTI2LCAKLSAgICAxNjIsIDY4LCAxLCAyMzQsIDEyNiwgMjQxLCAxODksIDY4LCAxLCAyMzQsIDEyNiwgMjQ0LCAxOTYsIDY4LCA1OCwgMSwgCi0gICAgMjM0LCAxMjYsIDIyMywgMTA5LCA2OCwgMSwgMjM0LCAxMjYsIDIxMSwgMTY1LCA2OCwgMSwgMjM0LCAxMjYsIDIxMCwgMTE2LCAKLSAgICA2OCwgMSwgMjM0LCAxMjYsIDIwNSwgNjgsIDIzMiwgMTQ1LCAyMzQsIDEyNiwgMjI2LCAyNTMsIDY4LCAyMzIsIDE0NSwgCi0gICAgMjM0LCAxMjYsIDIyNCwgNDMsIDY4LCAyMzIsIDE0NSwgMjM0LCAxMjYsIDI0MSwgMTIxLCA2OCwgMTYsIDI1NCwgMTkwLCAKLSAgICAyNDUsIDMwLCA2OCwgMTYsIDI1NCwgMTkwLCAxMTAsIDY4LCAxNiwgMjU0LCAxOTAsIDEwNSwgNjgsIDEsIDI1NCwgMTkwLCAKLSAgICAyMDUsIDY4LCA1LCAyMjYsIDIzLCAyMzQsIDIxMywgMjE2LCAzMCwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIDI4LCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIzNCwgMjgsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAxMDUsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAKLSAgICAxMDUsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAxMTQsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAxMTQsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjQyLCAxNzQsIDM5LCAyMDgsIDEsIDEyNSwgMjQyLCAxNzQsIDM5LCAyMDgsIDEsIDEyMSwgMjI5LCA0LCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIyOSwgNCwgMzksIDIwOCwgMSwgMTIxLCAyNDksIDIzOCwgMzksIDIwOCwgMSwgMTI1LCAyNDksIAotICAgIDIzOCwgMzksIDIwOCwgMSwgMTIxLCAyNTAsIDg2LCAzOSwgMjA4LCAxLCAxMjUsIDI1MCwgODYsIDM5LCAyMDgsIDEsIDEyMSwgCi0gICAgMjE5LCA1OCwgMzksIDIwOCwgMSwgMTI1LCAyMTksIDU4LCAzOSwgMjA4LCAxLCAxMjEsIDIyNywgMTM0LCAzOSwgMjA4LCAxLCAKLSAgICAxMjUsIDIyNywgMTM0LCAzOSwgMjA4LCAxLCAxMjEsIDI0NywgMTQ1LCAzOSwgMjA4LCAxLCAxMjUsIDI0NywgMTQ1LCAzOSwgCi0gICAgMjA4LCAxLCAxMjEsIDExMSwgMzksIDIwOCwgMSwgMTI1LCAxMTEsIDM5LCAyMDgsIDEsIDEyMSwgMjE2LCAxNTYsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjE2LCAxNTYsIDM5LCAyMDgsIDEsIDEyMSwgMjI4LCA3NCwgMzksIDIwOCwgMSwgMTI1LCAyMjgsIAotICAgIDc0LCAzOSwgMjA4LCAxLCAxMjEsIDI1MSwgMjA1LCAzOSwgMjA4LCAxLCAxMjUsIDI1MSwgMjA1LCAzOSwgMjA4LCAxLCAKLSAgICAxMjEsIDIyNSwgMTYsIDM5LCAyMDgsIDEsIDEyNSwgMjI1LCAxNiwgMzksIDIwOCwgMSwgMTIxLCAyMjUsIDEyMSwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMjUsIDEyMSwgMzksIDIwOCwgMSwgMTIxLCAyNDQsIDQzLCAzOSwgMjA4LCAxLCAxMjUsIDI0NCwgCi0gICAgNDMsIDM5LCAyMDgsIDEsIDEyMSwgMjMwLCAxNjEsIDM5LCAyMDgsIDEsIDEyNSwgMjMwLCAxNjEsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIDEyNSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIDEyMSwgMjIyLCAyMTEsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjIyLCAyMTEsIDM5LCAyMDgsIDEsIDEyMSwgMjMyLCAxNTYsIDM5LCAyMDgsIDEsIDEyNSwgMjMyLCAKLSAgICAxNTYsIDM5LCAyMDgsIDEsIDEyMSwgMjEzLCAxMzgsIDM5LCAyMDgsIDEsIDEyNSwgMjEzLCAxMzgsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjQxLCA2OCwgMzksIDIwOCwgMSwgMTI1LCAyNDEsIDY4LCAzOSwgMjA4LCAxLCAxMjEsIDc2LCAzOSwgMjA4LCAxLCAKLSAgICAxMjUsIDc2LCAzOSwgMjA4LCAyMzEsIDIwNCwgMjM0LCAyMzAsIDM5LCAyMDgsIDI1LCAyNTUsIDczLCAzOSwgMjA4LCAyNSwgCi0gICAgNzMsIDM5LCAyMDgsIDI1LCAyMTQsIDIxNCwgMzksIDIwOCwgMjUsIDcwLCAzOSwgMjA4LCAyNSwgNzUsIDM5LCAyMDgsIDI1LCAKLSAgICA3NiwgMzksIDIwOCwgMjMxLCAyMDQsIDIzNCwgMTA4LCAzOSwgMjA4LCAyNSwgMjQwLCAxMTksIDM5LCAyMDgsIDI1LCAyMTQsIAotICAgIDIxMywgMzksIDIwOCwgMjUsIDIxNCwgMjI5LCAzOSwgMjA4LCAyNSwgMjUzLCAxOTAsIDM5LCAyMDgsIDI1LCAyNTMsIDE2NywgCi0gICAgMzksIDIwOCwgMjUsIDI1NCwgMTIzLCAzOSwgMjA4LCAyNSwgMjU0LCAxMzYsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIAotICAgIDI0NSwgMTgwLCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA0LCAyMjcsIDIwNiwgMzksIDIwOCwgMTM4LCAyMzEsIDIwNCwgMjE2LCAKLSAgICAxNTYsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIDIxOSwgNDIsIDM5LCAyMDgsIDE2LCAyMzQsIDEzLCAzOSwgMjA4LCAxNiwgCi0gICAgMjI3LCAyMDYsIDM5LCAyMDgsIDE2LCAyMjEsIDI1MywgMzksIDIwOCwgMTYsIDI0MSwgNjksIDI0MSwgNjQsIDM5LCAyMDgsIAotICAgIDE2LCAyMzQsIDIyLCAyMzQsIDIxLCAxODYsIDE4NSwgMSwgNzUsIDE4NiwgMTg1LCAxLCA3NiwgMTg2LCAxODUsIDEsIDI1MCwgCi0gICAgMTU3LCAxODYsIDE4NSwgMSwgMjI3LCAxNjUsIDE4NiwgMTg1LCAxLCAyMTUsIDE1NiwgMTg2LCAxODUsIDEsIDIxNSwgMTQ0LCAKLSAgICAxODYsIDE4NSwgMSwgMjQ4LCAxMzUsIDE4NiwgMTg1LCAxLCAyNDgsIDExOSwgMTg2LCAxODUsIDEsIDIyOCwgMTEwLCAxODYsIAotICAgIDE4NSwgMSwgMjIwLCAxMDIsIDE4NiwgMTg1LCAxLCAyMTgsIDIyMywgMTg2LCAxODUsIDI1LCA1LCAyMzYsIDMzLCAxODYsIAotICAgIDE4NSwgMjUsIDUsIDIxNCwgMTE4LCAxODYsIDE4NSwgMjUsIDUsIDI1NSwgMzcsIDE4NiwgMTg1LCAyNSwgNSwgMjUzLCAKLSAgICAxOTIsIDE4NiwgMTg1LCAyNSwgNSwgMjU1LCAzMCwgMTg2LCAxODUsIDI1MCwgMTI1LCAxODYsIDE4NSwgMjU0LCAyMDYsIAotICAgIDIzNCwgOTgsIDE4NiwgMTg1LCAyNTQsIDEwMywgMTg2LCAxODUsIDMsIDIyMywgNzQsIDc4LCAxODYsIDE4NSwgMjExLCAKLSAgICAyMDksIDIyMywgNzQsIDc4LCAxODYsIDE4NSwgMjUsIDUsIDIxMywgMTQ3LCAxODYsIDE4NSwgMjEzLCAxNTIsIDI5LCAzLCAKLSAgICAyMTUsIDEzNywgMjksIDMsIDIxNSwgMTQwLCAyOSwgMywgMjE1LCAxNDMsIDI5LCAzLCAyMTUsIDE0MSwgMjksIDMsIDIxNSwgCi0gICAgMTQyLCAyOSwgMywgMjE1LCAxMzksIDI5LCAzLCAyNDgsIDExMywgMjksIDMsIDI0OCwgMTE1LCAyOSwgMywgMjQ4LCAxMTgsIAotICAgIDI5LCAzLCAyNDgsIDExNiwgMjksIDMsIDI0OCwgMTE3LCAyOSwgMywgMjQ4LCAxMTQsIDI5LCAzLCAyNDYsIDI4LCAyOSwgMywgCi0gICAgMjQ2LCAzMSwgMjksIDMsIDI0NiwgMzcsIDI5LCAzLCAyNDYsIDM1LCAyOSwgMywgMjQ2LCAzNiwgMjksIDMsIDI0NiwgMjksIAotICAgIDI5LCAzLCAyNTAsIDIwNCwgMjksIDMsIDI1MCwgMTk4LCAyOSwgMywgMjUwLCAyMDAsIDI5LCAzLCAyNTAsIDIwMywgMjksIAotICAgIDMsIDI1MCwgMjAxLCAyOSwgMywgMjUwLCAyMDIsIDI5LCAzLCAyNTAsIDE5OSwgMjksIDMsIDI1MiwgMTExLCAyOSwgMywgCi0gICAgMjUyLCA5MCwgMjksIDMsIDI1MiwgMTAyLCAyOSwgMywgMjUyLCAxMTAsIDI5LCAzLCAyNTIsIDEwNSwgMjksIDMsIDI1MiwgCi0gICAgMTA2LCAyOSwgMywgMjUyLCA5NCwgMTg2LCAxODUsIDEsIDIzNCwgMTksIDE4NiwgMTg1LCAxLCAyMjEsIDI1MywgMTg2LCAKLSAgICAxODUsIDEsIDIzMywgMTA5LCAxODYsIDE4NSwgMSwgMjMwLCAxNzIsIDE4NiwgMTg1LCAxLCAxOTAsIDE4NiwgMTg1LCAxLCAKLSAgICAxOTcsIDE4NiwgMTg1LCAxLCAyNTAsIDEwMiwgMTg2LCAxODUsIDEsIDIxNiwgOTAsIDE4NiwgMTg1LCAxLCAyMzQsIDEwMSwgCi0gICAgMTg2LCAxODUsIDEsIDIyOCwgMjUwLCAxODYsIDE4NSwgMSwgMjE2LCAxNTAsIDE4NiwgMTg1LCAxLCAyMTIsIDYwLCAxODYsIAotICAgIDE4NSwgMSwgMjExLCA2OSwgMTg2LCAxODUsIDEsIDI0MCwgMjE2LCAxODYsIDE4NSwgMSwgMjE0LCAxOTAsIDE4NiwgMTg1LCAKLSAgICAxLCA3MywgMTg2LCAxODUsIDEsIDIyNSwgMTQyLCAxODYsIDE4NSwgMSwgMjUzLCAyMDIsIDE4NiwgMTg1LCAxLCAyNDIsIAotICAgIDE2NywgMTg2LCAxODUsIDEsIDIzNSwgMTEyLCAxODYsIDE4NSwgMSwgMjIzLCAxNjYsIDE4NiwgMTg1LCAxLCAyNTIsIDE5MSwgCi0gICAgMTg2LCAxODUsIDEsIDIzNSwgMTAwLCAxODYsIDE4NSwgMSwgMjQ3LCAyMTksIDE4NiwgMTg1LCAxLCAyNDIsIDIyMSwgMTg2LCAKLSAgICAxODUsIDEsIDI0OCwgNSwgMTg2LCAxODUsIDEsIDI1MiwgMTYsIDE4NiwgMTg1LCAxLCAyMzQsIDIwLCAyMzIsIDEyOCwgCi0gICAgMTg2LCAxODUsIDEsIDIzMywgMTEwLCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIDIzMCwgMTczLCAyMzIsIDEyOCwgMTg2LCAKLSAgICAxODUsIDEsIDIyNiwgOTAsIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgMjI5LCAyMjksIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgCi0gICAgMjE2LCA5MSwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyMjgsIDI1MSwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyNDAsIAotICAgIDE1NCwgMjMyLCAxMjgsIDE4NiwgMTg1LCAyNSwgNSwgMjI2LCAxOTUsIDE4NiwgMTg1LCAyNSwgNSwgMjM1LCAyNTMsIDE4NiwgCi0gICAgMTg1LCAyNSwgNSwgMjU0LCAxMjIsIDE4NiwgMTg1LCAyNSwgNSwgMjExLCAzOCwgMTg2LCAxODUsIDI1LCA1LCAyMTksIDMyLCAKLSAgICAxODYsIDE4NSwgMjUsIDUsIDIxNCwgMTg3LCAxODYsIDE4NSwgMjUsIDUsIDI1MCwgMTIzLCAxODYsIDE4NSwgMjUsIDUsIAotICAgIDIyNywgMTkxLCAxODYsIDE4NSwgMjUwLCAxMjQsIDE4NiwgMTg1LCAyMzIsIDg1LCAyMzUsIDE1MCwgMTg2LCAxODUsIDI1NCwgCi0gICAgNDYsIDIzNSwgMTUwLCAxODYsIDE4NSwgMjEsIDIxMCwgODYsIDE4NiwgMTg1LCAyMSwgMTEwLCAxODYsIDE4NSwgMjEsIAotICAgIDEwNSwgMTg2LCAxODUsIDIxLCAxNTgsIDE4NiwgMTg1LCAyMSwgMTYxLCAxODYsIDE4NSwgMjEsIDE4OSwgMTg2LCAxODUsIAotICAgIDIxLCAxOTQsIDE4NiwgMTg1LCAyMSwgMTk4LCAxODYsIDE4NSwgMjEsIDE5NSwgMTg2LCAxODUsIDIxLCAyMDAsIDI0LCAKLSAgICAxNDMsIDIyNywgNzcsIDI0LCAxNDMsIDIyNywgODIsIDI0LCAxNDMsIDIxMCwgMjQzLCAyNCwgMTQzLCAyMTAsIDI0MiwgMjQsIAotICAgIDE0MywgMjEwLCAyNDEsIDI0LCAxNDMsIDIxNSwgMjMsIDI0LCAxNDMsIDIxNSwgMjYsIDI0LCAxNDMsIDIxMCwgMjEwLCAyNCwgCi0gICAgMTQzLCAyMTAsIDIwNiwgMjQsIDE0MywgMjQ1LCA1NCwgMjQsIDE0MywgMjQ1LCA1MiwgMjQsIDE0MywgMjQ1LCA1MywgMjQsIAotICAgIDE0MywgMjQ1LCA1MCwgMjQsIDE0MywgMjQwLCAxNDQsIDI0LCAxNDMsIDI0MCwgMTQzLCAyNCwgMTQzLCAyNDAsIDE0MSwgCi0gICAgMjQsIDE0MywgMjQwLCAxNDIsIDI0LCAxNDMsIDI0MCwgMTQ3LCAyNCwgMTQzLCAyNDAsIDE0MCwgMjQsIDE0MywgMjQwLCAKLSAgICAxMzksIDI0LCAxNDMsIDI0MCwgMTQ5LCAyNCwgMTQzLCAyNTQsIDMzLCAyNCwgMTQzLCAyNTQsIDMyLCAyNCwgOTAsIDIyOCwgCi0gICAgMjE5LCAyNCwgOTAsIDIyOCwgMjI1LCAyNCwgOTAsIDIxOCwgMjA0LCAyNCwgOTAsIDIxOCwgMjAzLCAyNCwgOTAsIDIxNiwgCi0gICAgOTYsIDI0LCA5MCwgMjE2LCA5NCwgMjQsIDkwLCAyMTYsIDkzLCAyNCwgOTAsIDIxNiwgOTksIDI0LCA5MCwgMjE2LCAxMDAsIAotICAgIDI0LCA5MCwgMjE2LCA5MiwgMjQsIDkwLCAyMjMsIDUsIDI0LCA5MCwgMjIzLCAyMCwgMjQsIDkwLCAyMTgsIDIxMCwgMjQsIAotICAgIDkwLCAyMjMsIDE3LCAyNCwgOTAsIDIyMywgNywgMjQsIDkwLCAyMjMsIDksIDI0LCA5MCwgMjIyLCAyNTIsIDI0LCA5MCwgCi0gICAgMjIyLCAyNTMsIDI0LCA5MCwgMjM0LCAyMTgsIDI0LCA5MCwgMjMwLCAyMTIsIDI0LCA5MCwgMjMwLCAyMDYsIDI0LCA5MCwgCi0gICAgMjE4LCAyMTQsIDI0LCA5MCwgMjMwLCAyMDksIDI0LCA5MCwgMjMwLCAyMTUsIDI0LCA5MCwgMjI1LCA3NiwgMjQsIDkwLCAKLSAgICAyMjUsIDg1LCAyNCwgOTAsIDIyNSwgODksIDI0LCA5MCwgMjE4LCAyMTIsIDI0LCA5MCwgMjI1LCA3OSwgMjQsIDkwLCAyMjUsIAotICAgIDkzLCAyNCwgOTAsIDIyNSwgOTQsIDI0LCA5MCwgMjE5LCAxNDAsIDI0LCA5MCwgMjE5LCAxNDMsIDI0LCA5MCwgMjE4LCAKLSAgICAyMDgsIDI0LCA5MCwgMjE4LCAyMDYsIDI0LCA5MCwgMjE5LCAxMzgsIDI0LCA5MCwgMjE5LCAxNDYsIDI0LCA5MCwgMjE5LCAKLSAgICAxNDcsIDI0LCA5MCwgMjE5LCAxMzIsIDI0LCA5MCwgMjE5LCAxNDUsIDI0LCA5MCwgMjI2LCAzMCwgMjQsIDkwLCAyMjYsIAotICAgIDMxLCAyNCwgOTAsIDIxMSwgMjQsIDI0LCA5MCwgMjExLCAyNSwgMjQsIDkwLCAyNTAsIDQ0LCAyNCwgOTAsIDI1MCwgNDMsIAotICAgIDI0LCA5MCwgMjE4LCAyMTksIDI0LCA5MCwgMjI1LCAxMjgsIDI0LCA5MCwgMjI1LCAxMjcsIDksIDE0LCAyMzgsIDI0LCA5LCAKLSAgICAxNCwgMjM4LCAyMywgOSwgMTQsIDIzOCwgMjIsIDksIDE0LCAyMzgsIDIxLCA5LCAxNCwgMjM4LCAyMCwgOSwgMTQsIDIzOCwgCi0gICAgMTksIDksIDE0LCAyMzgsIDE4LCA5LCAxNCwgMjM4LCAxNywgOSwgMTQsIDIzOCwgMTYsIDksIDE0LCAyMzgsIDE1LCA5LCAKLSAgICAxNCwgMjM4LCAxNCwgOSwgMTQsIDIzOCwgMTMsIDksIDE0LCAyMzgsIDEyLCA5LCAxNCwgMjM4LCAxMSwgOSwgMTQsIDIzOCwgCi0gICAgMTAsIDksIDE0LCAyMzgsIDksIDksIDE0LCAyMzgsIDgsIDksIDE0LCAyMzgsIDcsIDksIDE0LCAyMzgsIDYsIDksIDE0LCAKLSAgICAyMzgsIDUsIDksIDE0LCAyMzgsIDQsIDksIDE0LCAyMzgsIDMsIDksIDE0LCAyMzgsIDIsIDksIDE0LCAyMzgsIDEsIDksIAotICAgIDE0LCAyMzgsIDAsIDksIDE0LCAyMzcsIDI1NSwgOSwgMTQsIDIzNywgMjU0LCA5LCAxNCwgMjM3LCAyNTMsIDksIDE0LCAKLSAgICAyMzcsIDI1MiwgOSwgMTQsIDIzNywgMjUxLCA5LCAxNCwgMjM3LCAyNTAsIDksIDE0LCAyMzcsIDI0OSwgOSwgMTQsIDIzNywgCi0gICAgMjQ4LCA5LCAxNCwgMjM3LCAyNDcsIDksIDE0LCAyMzcsIDI0NiwgOSwgMTQsIDIzNywgMjQ1LCA5LCAxNCwgMjM3LCAyNDQsIAotICAgIDksIDE0LCAyMzcsIDI0MywgOSwgMTQsIDIzNywgMjQyLCA5LCAxNCwgMjM3LCAyNDEsIDksIDE0LCAyMzcsIDI0MCwgOSwgCi0gICAgMTQsIDIzNywgMjM5LCA5LCAxNCwgMjM3LCAyMzgsIDksIDE0LCAyMzcsIDIzNywgOSwgMTQsIDIzNywgMjM2LCA5LCAxNCwgCi0gICAgMjM3LCAyMzUsIDksIDE0LCAyMzcsIDIzNCwgOSwgMTQsIDIzNywgMjMzLCA5LCAxNCwgMjM3LCAyMzIsIDksIDE0LCAyMzcsIAotICAgIDIzMSwgOSwgMTQsIDIzNywgMjMwLCA5LCAxNCwgMjM3LCAyMjksIDksIDE0LCAyMzcsIDIyOCwgOSwgMTQsIDIzNywgMjI3LCAKLSAgICA5LCAxNCwgMjM3LCAyMjYsIDksIDE0LCAyMzcsIDIyNSwgOSwgMTQsIDIzNywgMjI0LCA5LCAxNCwgMjM3LCAyMjMsIDksIAotICAgIDE0LCAyMzcsIDIyMiwgOSwgMTQsIDIzNywgMjIxLCA5LCAxNCwgMjM3LCAyMjAsIDksIDE0LCAyMzcsIDIxOSwgOSwgMTQsIAotICAgIDIzNywgMjE4LCA5LCAxNCwgMjM3LCAyMTcsIDksIDE0LCAyMzcsIDIxNiwgOSwgMTQsIDIzNywgMjE1LCA5LCAxNCwgMjM3LCAKLSAgICAyMTQsIDksIDE0LCAyMzcsIDIxMywgOSwgMTQsIDIzNywgMjEyLCA5LCAxNCwgMjM3LCAyMTEsIDksIDE0LCAyMzcsIDIxMCwgCi0gICAgOSwgMTQsIDIzNywgMjA5LCA5LCAxNCwgMjM3LCAyMDgsIDksIDE0LCAyMzcsIDIwNywgOSwgMTQsIDIzNywgMjA2LCA5LCAKLSAgICAxNCwgMjM3LCAyMDUsIDksIDE0LCAyMzcsIDIwNCwgOSwgMTQsIDIzNywgMjAzLCA5LCAxNCwgMjM3LCAyMDIsIDksIDE0LCAKLSAgICAyMzcsIDIwMSwgOSwgMTQsIDIzNywgMjAwLCA5LCAxNCwgMjM3LCAxOTksIDksIDE0LCAyMzcsIDE5OCwgOSwgMTQsIDIzNywgCi0gICAgMTk3LCA5LCAxNCwgMjM3LCAxOTYsIDksIDE0LCAyMzcsIDE5NSwgOSwgMTQsIDIzNywgMTk0LCA5LCAxNCwgMjM3LCAxOTMsIAotICAgIDksIDE0LCAyMzcsIDE5MiwgOSwgMTQsIDIzNywgMTkxLCA5LCAxNCwgMjM3LCAxOTAsIDksIDE0LCAyMzcsIDE4OSwgOSwgCi0gICAgMTQsIDIzNywgMTg4LCA5LCAxNCwgMjM3LCAxODcsIDksIDE0LCAyMzcsIDE4NiwgOSwgMTQsIDIzNywgMTg1LCA5LCAxNCwgCi0gICAgMjM3LCAxODQsIDksIDE0LCAyMzcsIDE4MywgOSwgMTQsIDIzNywgMTgyLCA5LCAxNCwgMjM3LCAxODEsIDksIDE0LCAyMzcsIAotICAgIDE4MCwgOSwgMTQsIDIzNywgMTc5LCA5LCAxNCwgMjM3LCAxNzgsIDksIDE0LCAyMzcsIDE3NywgOSwgMTQsIDIzNywgMTc2LCAKLSAgICA5LCAxNCwgMjM3LCAxNzUsIDksIDE0LCAyMzcsIDE3NCwgOSwgMTQsIDIzNywgMTczLCA5LCAxNCwgMjM3LCAxNzIsIDksIAotICAgIDE0LCAyMzcsIDE3MSwgOSwgMTQsIDIzNywgMTcwLCA5LCAxNCwgMjM3LCAxNjksIDksIDE0LCAyMzcsIDE2OCwgOSwgMTQsIAotICAgIDIzNywgMTY3LCA5LCAxNCwgMjM3LCAxNjYsIDksIDE0LCAyMzcsIDE2NSwgOSwgMTQsIDIzNywgMTY0LCA5LCAxNCwgMjM3LCAKLSAgICAxNjMsIDksIDE0LCAyMzcsIDE2MiwgOSwgMTQsIDIzNywgMTYxLCA5LCAxNCwgMjM3LCAxNjAsIDksIDE0LCAyMzcsIDE1OSwgCi0gICAgOSwgMTQsIDIzNywgMTU4LCA5LCAxNCwgMjM3LCAxNTcsIDksIDE0LCAyMzcsIDE1NiwgOSwgMTQsIDIzNywgMTU1LCA5LCAKLSAgICAxNCwgMjM3LCAxNTQsIDksIDE0LCAyMzcsIDE1MywgOSwgMTQsIDIzNywgMTUyLCA5LCAxNCwgMjM3LCAxNTEsIDksIDE0LCAKLSAgICAyMzcsIDE1MCwgOSwgMTQsIDIzNywgMTQ5LCA5LCAxNCwgMjM3LCAxNDgsIDksIDE0LCAyMzcsIDE0NywgOSwgMTQsIDIzNywgCi0gICAgMTQ2LCA5LCAxNCwgMjM3LCAxNDUsIDksIDE0LCAyMzcsIDE0NCwgOSwgMTQsIDIzNywgMTQzLCA5LCAxNCwgMjM3LCAxNDIsIAotICAgIDksIDE0LCAyMzcsIDE0MSwgOSwgMTQsIDIzNywgMTQwLCA5LCAxNCwgMjM3LCAxMzksIDksIDE0LCAyMzcsIDEzOCwgOSwgCi0gICAgMTQsIDIzNywgMTM3LCA5LCAxNCwgMjM3LCAxMzYsIDksIDE0LCAyMzcsIDEzNSwgOSwgMTQsIDIzNywgMTM0LCA5LCAxNCwgCi0gICAgMjM3LCAxMzMsIDksIDE0LCAyMzcsIDEzMiwgOSwgMTQsIDIzNywgMTMxLCA5LCAxNCwgMjM3LCAxMzAsIDksIDE0LCAyMzcsIAotICAgIDEyOSwgOSwgMTQsIDIzNywgMTI4LCA5LCAxNCwgMjM3LCAxMjcsIDksIDE0LCAyMzcsIDEyNiwgOSwgMTQsIDIzNywgMTI1LCAKLSAgICA5LCAxNCwgMjM3LCAxMjQsIDksIDE0LCAyMzcsIDEyMywgOSwgMTQsIDIzNywgMTIyLCA5LCAxNCwgMjM3LCAxMjEsIDksIAotICAgIDE0LCAyMzcsIDEyMCwgOSwgMTQsIDIzNywgMTE5LCA5LCAxNCwgMjM3LCAxMTgsIDksIDE0LCAyMzcsIDExNywgOSwgMTQsIAotICAgIDIzNywgMTE2LCA5LCAxNCwgMjM3LCAxMTUsIDksIDE0LCAyMzcsIDExNCwgOSwgMTQsIDIzNywgMTEzLCA5LCAxNCwgMjM3LCAKLSAgICAxMTIsIDksIDE0LCAyMzcsIDExMSwgOSwgMTQsIDIzNywgMTEwLCA5LCAxNCwgMjM3LCAxMDksIDksIDE0LCAyMzcsIDEwOCwgCi0gICAgOSwgMTQsIDIzNywgMTA3LCA5LCAxNCwgMjM3LCAxMDYsIDksIDE0LCAyMzcsIDEwNSwgOSwgMTQsIDIzNywgMTA0LCA5LCAKLSAgICAxNCwgMjM3LCAxMDMsIDksIDE0LCAyMzcsIDEwMiwgOSwgMTQsIDIzNywgMTAxLCA5LCAxNCwgMjM3LCAxMDAsIDksIDE0LCAKLSAgICAyMzcsIDk5LCA5LCAxNCwgMjM3LCA5OCwgOSwgMTQsIDIzNywgOTcsIDksIDE0LCAyMzcsIDk2LCA5LCAxNCwgMjM3LCA5NSwgCi0gICAgOSwgMTQsIDIzNywgOTQsIDksIDE0LCAyMzcsIDkzLCA5LCAxNCwgMjM3LCA5MiwgOSwgMTQsIDIzNywgOTEsIDksIDE0LCAKLSAgICAyMzcsIDkwLCA5LCAxNCwgMjM3LCA4OSwgOSwgMTQsIDIzNywgODgsIDksIDE0LCAyMzcsIDg3LCA5LCAxNCwgMjM3LCA4NiwgCi0gICAgOSwgMTQsIDIzNywgODUsIDksIDE0LCAyMzcsIDg0LCA5LCAxNCwgMjM3LCA4MywgOSwgMTQsIDIzNywgODIsIDksIDE0LCAKLSAgICAyMzcsIDgxLCA5LCAxNCwgMjM3LCA4MCwgOSwgMTQsIDIzNywgNzksIDksIDE0LCAyMzcsIDc4LCA5LCAxNCwgMjM3LCA3NywgCi0gICAgOSwgMTQsIDIzNywgNzYsIDksIDE0LCAyMzcsIDc1LCA5LCAxNCwgMjM3LCA3NCwgOSwgMTQsIDIzNywgNzMsIDksIDE0LCAKLSAgICAyMzcsIDcyLCA5LCAxNCwgMjM3LCA3MSwgOSwgMTQsIDIzNywgNzAsIDksIDE0LCAyMzcsIDY5LCA5LCAxNCwgMjM3LCA2OCwgCi0gICAgOSwgMTQsIDIzNywgNjcsIDksIDE0LCAyMzcsIDY2LCA5LCAxNCwgMjM3LCA2NSwgOSwgMTQsIDIzNywgNjQsIDksIDE0LCAKLSAgICAyMzcsIDYzLCA5LCAxNCwgMjM3LCA2MiwgOSwgMTQsIDIzNywgNjEsIDksIDE0LCAyMzcsIDYwLCA5LCAxNCwgMjM3LCA1OSwgCi0gICAgOSwgMTQsIDIzNywgNTgsIDksIDE0LCAyMzcsIDU3LCA5LCAxNCwgMjM3LCA1NiwgOSwgMTQsIDIzNywgNTUsIDksIDE0LCAKLSAgICAyMzcsIDU0LCA5LCAxNCwgMjM3LCA1MywgOSwgMTQsIDIzNywgNTIsIDksIDE0LCAyMzcsIDUxLCA5LCAxNCwgMjM3LCA1MCwgCi0gICAgOSwgMTQsIDIzNywgNDksIDksIDE0LCAyMzcsIDQ4LCA5LCAxNCwgMjM3LCA0NywgOSwgMTQsIDIzNywgNDYsIDksIDE0LCAKLSAgICAyMzcsIDQ1LCA5LCAxNCwgMjM3LCA0NCwgOSwgMTQsIDIzNywgNDMsIDksIDE0LCAyMzcsIDQyLCA5LCAxNCwgMjM3LCA0MSwgCi0gICAgOSwgMTQsIDIzNywgNDAsIDksIDE0LCAyMzcsIDM5LCA5LCAxNCwgMjM3LCAzOCwgOSwgMTQsIDIzNywgMzcsIDksIDE0LCAKLSAgICAyMzcsIDM2LCA5LCAxNCwgMjM3LCAzNSwgOSwgMTQsIDIzNywgMzQsIDksIDE0LCAyMzcsIDMzLCA5LCAxNCwgMjM3LCAzMiwgCi0gICAgOSwgMTQsIDIzNywgMzEsIDksIDE0LCAyMzcsIDMwLCA5LCAxNCwgMjM3LCAyOSwgOSwgMTQsIDIzNywgMjgsIDksIDE0LCAKLSAgICAyMzcsIDI3LCA5LCAxNCwgMjM3LCAyNiwgOSwgMTQsIDIzNywgMjUsIDksIDE0LCAyMzcsIDI0LCA5LCAxNCwgMjM3LCAyMywgCi0gICAgOSwgMTQsIDIzNywgMjIsIDksIDE0LCAyMzcsIDIxLCA5LCAxNCwgMjM3LCAyMCwgOSwgMTQsIDIzNywgMTksIDksIDE0LCAKLSAgICAyMzcsIDE4LCA5LCAxNCwgMjM3LCAxNywgOSwgMTQsIDIzNywgMTYsIDksIDE0LCAyMzcsIDE1LCA5LCAxNCwgMjM3LCAxNCwgCi0gICAgOSwgMTQsIDIzNywgMTMsIDksIDE0LCAyMzcsIDEyLCA5LCAxNCwgMjM3LCAxMSwgOSwgMTQsIDIzNywgMTAsIDksIDE0LCAKLSAgICAyMzcsIDksIDksIDE0LCAyMzcsIDgsIDksIDE0LCAyMzcsIDcsIDksIDE0LCAyMzcsIDYsIDksIDE0LCAyMzcsIDUsIDksIAotICAgIDE0LCAyMzcsIDQsIDksIDE0LCAyMzcsIDMsIDksIDE0LCAyMzcsIDIsIDksIDE0LCAyMzcsIDEsIDksIDE0LCAyMzcsIDAsIAotICAgIDksIDE0LCAyMzYsIDI1NSwgOSwgMTQsIDIzNiwgMjU0LCA5LCAxNCwgMjM2LCAyNTMsIDksIDE0LCAyMzYsIDI1MiwgOSwgCi0gICAgMTQsIDIzNiwgMjUxLCA5LCAxNCwgMjM2LCAyNTAsIDksIDE0LCAyMzYsIDI0OSwgOSwgMTQsIDIzNiwgMjQ4LCA5LCAxNCwgCi0gICAgMjM2LCAyNDcsIDksIDE0LCAyMzYsIDI0NiwgOSwgMTQsIDIzNiwgMjQ1LCA5LCAxNCwgMjM2LCAyNDQsIDksIDE0LCAyMzYsIAotICAgIDI0MywgOSwgMTQsIDIzNiwgMjQyLCA5LCAxNCwgMjM2LCAyNDEsIDksIDE0LCAyMzYsIDI0MCwgOSwgMTQsIDIzNiwgMjM5LCAKLSAgICA5LCAxNCwgMjM2LCAyMzgsIDksIDE0LCAyMzYsIDIzNywgOSwgMTQsIDIzNiwgMjM2LCA5LCAxNCwgMjM2LCAyMzUsIDksIAotICAgIDE0LCAyMzYsIDIzNCwgOSwgMTQsIDIzNiwgMjMzLCA5LCAxNCwgMjM2LCAyMzIsIDksIDE0LCAyMzYsIDIzMSwgOSwgMTQsIAotICAgIDIzNiwgMjMwLCA5LCAxNCwgMjM2LCAyMjksIDksIDE0LCAyMzYsIDIyOCwgOSwgMTQsIDIzNiwgMjI3LCA5LCAxNCwgMjM2LCAKLSAgICAyMjYsIDksIDE0LCAyMzYsIDIyNSwgOSwgMTQsIDIzNiwgMjI0LCA5LCAxNCwgMjM2LCAyMjMsIDksIDE0LCAyMzYsIDIyMiwgCi0gICAgOSwgMTQsIDIzNiwgMjIxLCA5LCAxNCwgMjM2LCAyMjAsIDksIDE0LCAyMzYsIDIxOSwgOSwgMTQsIDIzNiwgMjE4LCA5LCAKLSAgICAxNCwgMjM2LCAyMTcsIDksIDE0LCAyMzYsIDIxNiwgOSwgMTQsIDIzNiwgMjE1LCA5LCAxNCwgMjM2LCAyMTQsIDksIDE0LCAKLSAgICAyMzYsIDIxMywgOSwgMTQsIDIzNiwgMjEyLCA5LCAxNCwgMjM2LCAyMTEsIDksIDE0LCAyMzYsIDIxMCwgOSwgMTQsIDIzNiwgCi0gICAgMjA5LCA5LCAxNCwgMjM2LCAyMDgsIDksIDE0LCAyMzYsIDIwNywgOSwgMTQsIDIzNiwgMjA2LCA5LCAxNCwgMjM2LCAyMDUsIAotICAgIDksIDE0LCAyMzYsIDIwNCwgOSwgMTQsIDIzNiwgMjAzLCA5LCAxNCwgMjM2LCAyMDIsIDksIDE0LCAyMzYsIDIwMSwgOSwgCi0gICAgMTQsIDIzNiwgMjAwLCA5LCAxNCwgMjM2LCAxOTksIDksIDE0LCAyMzYsIDE5OCwgOSwgMTQsIDIzNiwgMTk3LCA5LCAxNCwgCi0gICAgMjM2LCAxOTYsIDksIDE0LCAyMzYsIDE5NSwgOSwgMTQsIDIzNiwgMTk0LCA5LCAxNCwgMjM2LCAxOTMsIDksIDE0LCAyMzYsIAotICAgIDE5MiwgOSwgMTQsIDIzNiwgMTkxLCA5LCAxNCwgMjM2LCAxOTAsIDksIDE0LCAyMzYsIDE4OSwgOSwgMTQsIDIzNiwgMTg4LCAKLSAgICA5LCAxNCwgMjM2LCAxODcsIDksIDE0LCAyMzYsIDE4NiwgOSwgMTQsIDIzNiwgMTg1LCA5LCAxNCwgMjM2LCAxODQsIDksIAotICAgIDE0LCAyMzYsIDE4MywgOSwgMTQsIDIzNiwgMTgyLCA5LCAxNCwgMjM2LCAxODEsIDksIDE0LCAyMzYsIDE4MCwgOSwgMTQsIAotICAgIDIzNiwgMTc5LCA5LCAxNCwgMjM2LCAxNzgsIDksIDE0LCAyMzYsIDE3NywgOSwgMTQsIDIzNiwgMTc2LCA5LCAxNCwgMjM2LCAKLSAgICAxNzUsIDksIDE0LCAyMzYsIDE3NCwgOSwgMTQsIDIzNiwgMTczLCA5LCAxNCwgMjM2LCAxNzIsIDksIDE0LCAyMzYsIDE3MSwgCi0gICAgOSwgMTQsIDIzNiwgMTcwLCA5LCAxNCwgMjM2LCAxNjksIDksIDE0LCAyMzYsIDE2OCwgOSwgMTQsIDIzNiwgMTY3LCA5LCAKLSAgICAxNCwgMjM2LCAxNjYsIDksIDE0LCAyMzYsIDE2NSwgOSwgMTQsIDIzNiwgMTY0LCA5LCAxNCwgMjM2LCAxNjMsIDksIDE0LCAKLSAgICAyMzYsIDE2MiwgOSwgMTQsIDIzNiwgMTYxLCA5LCAxNCwgMjM2LCAxNjAsIDksIDE0LCAyMzYsIDE1OSwgOSwgMTQsIDIzNiwgCi0gICAgMTU4LCA5LCAxNCwgMjM2LCAxNTcsIDksIDE0LCAyMzYsIDE1NiwgOSwgMTQsIDIzNiwgMTU1LCA5LCAxNCwgMjM2LCAxNTQsIAotICAgIDksIDE0LCAyMzYsIDE1MywgOSwgMTQsIDIzNiwgMTUyLCA5LCAxNCwgMjM2LCAxNTEsIDksIDE0LCAyMzYsIDE1MCwgOSwgCi0gICAgMTQsIDIzNiwgMTQ5LCA5LCAxNCwgMjM2LCAxNDgsIDksIDE0LCAyMzYsIDE0NywgOSwgMTQsIDIzNiwgMTQ2LCA5LCAxNCwgCi0gICAgMjM2LCAxNDUsIDksIDE0LCAyMzYsIDE0NCwgOSwgMTQsIDIzNiwgMTQzLCA5LCAxNCwgMjM2LCAxNDIsIDksIDE0LCAyMzYsIAotICAgIDE0MSwgOSwgMTQsIDIzNiwgMTQwLCA5LCAxNCwgMjM2LCAxMzksIDksIDE0LCAyMzYsIDEzOCwgOSwgMTQsIDIzNiwgMTM3LCAKLSAgICA5LCAxNCwgMjM2LCAxMzYsIDksIDE0LCAyMzYsIDEzNSwgOSwgMTQsIDIzNiwgMTM0LCA5LCAxNCwgMjM2LCAxMzMsIDksIAotICAgIDE0LCAyMzYsIDEzMiwgOSwgMTQsIDIzNiwgMTMxLCA5LCAxNCwgMjM2LCAxMzAsIDksIDE0LCAyMzYsIDEyOSwgOSwgMTQsIAotICAgIDIzNiwgMTI4LCA5LCAxNCwgMjM2LCAxMjcsIDksIDE0LCAyMzYsIDEyNiwgOSwgMTQsIDIzNiwgMTI1LCA5LCAxNCwgMjM2LCAKLSAgICAxMjQsIDksIDE0LCAyMzYsIDEyMywgOSwgMTQsIDIzNiwgMTIyLCA5LCAxNCwgMjM2LCAxMjEsIDksIDE0LCAyMzYsIDEyMCwgCi0gICAgOSwgMTQsIDIzNiwgMTE5LCA5LCAxNCwgMjM2LCAxMTgsIDksIDE0LCAyMzYsIDExNywgOSwgMTQsIDIzNiwgMTE2LCA5LCAKLSAgICAxNCwgMjM2LCAxMTUsIDksIDE0LCAyMzYsIDExNCwgOSwgMTQsIDIzNiwgMTEzLCA5LCAxNCwgMjM2LCAxMTIsIDksIDE0LCAKLSAgICAyMzYsIDExMSwgOSwgMTQsIDIzNiwgMTEwLCA5LCAxNCwgMjM2LCAxMDksIDksIDE0LCAyMzYsIDEwOCwgOSwgMTQsIDIzNiwgCi0gICAgMTA3LCA5LCAxNCwgMjM2LCAxMDYsIDksIDE0LCAyMzYsIDEwNSwgOSwgMTQsIDIzNiwgMTA0LCA5LCAxNCwgMjM2LCAxMDMsIAotICAgIDksIDE0LCAyMzYsIDEwMiwgOSwgMTQsIDIzNiwgMTAxLCA5LCAxNCwgMjM2LCAxMDAsIDksIDE0LCAyMzYsIDk5LCA5LCAxNCwgCi0gICAgMjM2LCA5OCwgOSwgMTQsIDIzNiwgOTcsIDksIDE0LCAyMzYsIDk2LCA5LCAxNCwgMjM2LCA5NSwgOSwgMTQsIDIzNiwgOTQsIAotICAgIDksIDE0LCAyMzYsIDkzLCA5LCAxNCwgMjM2LCA5MiwgOSwgMTQsIDIzNiwgOTEsIDksIDE0LCAyMzYsIDkwLCA5LCAxNCwgCi0gICAgMjM2LCA4OSwgOSwgMTQsIDIzNiwgODgsIDksIDE0LCAyMzYsIDg3LCA5LCAxNCwgMjM2LCA4NiwgOSwgMTQsIDIzNiwgODUsIAotICAgIDksIDE0LCAyMzYsIDg0LCA5LCAxNCwgMjM2LCA4MywgOSwgMTQsIDIzNiwgODIsIDksIDE0LCAyMzYsIDgxLCA5LCAxNCwgCi0gICAgMjM2LCA4MCwgOSwgMTQsIDIzNiwgNzksIDksIDE0LCAyMzYsIDc4LCA5LCAxNCwgMjM2LCA3NywgOSwgMTQsIDIzNiwgNzYsIAotICAgIDksIDE0LCAyMzYsIDc1LCA5LCAxNCwgMjM2LCA3NCwgOSwgMTQsIDIzNiwgNzMsIDksIDE0LCAyMzYsIDcyLCA5LCAxNCwgCi0gICAgMjM2LCA3MSwgOSwgMTQsIDIzNiwgNzAsIDksIDE0LCAyMzYsIDY5LCA5LCAxNCwgMjM2LCA2OCwgOSwgMTQsIDIzNiwgNjcsIAotICAgIDksIDE0LCAyMzYsIDY2LCA5LCAxNCwgMjM2LCA2NSwgNywgNCwgMjcsIDI0NCwgMTI1LCA3LCA0LCAyNywgMjQ0LCAxMjEsIAotICAgIDcsIDQsIDI3LCAyNDQsIDc2LCA3LCA0LCAyNywgMjQ0LCAxMjQsIDcsIDQsIDI3LCAyNDQsIDEyMywgNywgNCwgMjcsIDE5OSwgCi0gICAgMjIyLCA5MiwgMjE3LCAxNTIsIDcsIDQsIDI3LCAyMTgsIDE2OCwgMTUwLCA0LCAyNywgMjMxLCA1OSwgMjI4LCAzOSwgMTUwLCAKLSAgICA0LCAyNywgMjMxLCA1OSwgMjQ1LCAyMTMsIDE1MCwgNCwgMjcsIDIzMSwgNTksIDIzNSwgMjI3LCAxNTAsIDQsIDI3LCAyMTMsIAotICAgIDE4MCwgMjI4LCAzOSwgMTUwLCA0LCAyNywgMjMxLCA1OSwgMjExLCAxNjAsIDk0LCAxLCAyMTAsIDIzNCwgMiwgMjQxLCAKLSAgICAxNTgsIDk0LCAyMjUsIDExLCAyMzUsIDUwLCAyMTQsIDExLCA5NCwgMjcsIDIxMSwgNiwgMjEwLCAyMzQsIDIxMCwgMjM0LCAKLSAgICAyMjUsIDIzOSwgOTQsIDEsIDI1NCwgMTM5LCAyNTMsIDE2MiwgOTQsIDEsIDIxMSwgMjQ3LCAyNTQsIDE3MCwgOTQsIDEsIAotICAgIDIxMSwgMjQ3LCAyNDgsIDE4OSwgOTQsIDEsIDIxMSwgMjQ3LCAyNDEsIDIzOCwgOTQsIDEsIDIxMSwgMjQ3LCAyMzQsIDI1MCwgCi0gICAgOTQsIDEsIDIxMSwgMjQ3LCAyMzMsIDk0LCA5NCwgMSwgMjExLCAyNDcsIDQwLCAyMzEsIDY1LCA5NCwgMSwgMjExLCAyNDcsIAotICAgIDIyMywgNjcsIDk0LCAxLCAyMTEsIDI0NywgMjE3LCAzOCwgOTQsIDEsIDI1NCwgMTM5LCA5NiwgNTAsIDk0LCAxLCAyMjAsIAotICAgIDIxLCAyLCAyMjAsIDIxLCAyNDcsIDEyMCwgOTQsIDEsIDIyMCwgMjEsIDIsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDEsIAotICAgIDIyMCwgMjEsIDIsIDI0OCwgMjA4LCAyMiwgMjIwLCAyMSwgMjQ3LCAxMjAsIDk0LCAxLCAyMjAsIDIxLCAyLCAyNDgsIDIwOCwgCi0gICAgMjIsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDEsIDExMiwgMiwgMjI1LCAyMzksIDk0LCAxLCAxMTIsIDIsIDIyNCwgNzYsIAotICAgIDk0LCAxLCAxMTIsIDIsIDIzMSwgMTcxLCA5NCwgMSwgMjUyLCAyOSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyNDIsIDIwMiwgMiwgCi0gICAgMjQ4LCAyMDcsIDk0LCAxLCAyNDgsIDE5MCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyNDEsIDIzOSwgMiwgMjMxLCAxNzEsIDk0LCAKLSAgICAxLCAyMTQsIDQsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjEwLCA5OCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMTYsIDIzMSwgMiwgCi0gICAgMjQ4LCAyMDcsIDk0LCAxLCAyMTAsIDIzNCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCA0MCwgMjM0LCAyNTEsIDIsIDI0OCwgMjA3LCAKLSAgICA5NCwgMSwgMjM0LCAyNTEsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjMzLCA5NSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMzEsIAotICAgIDY2LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyNywgMTk1LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyMSwgMjUwLCAyLCAyNDgsIAotICAgIDIwNywgOTQsIDEsIDQwLCAyMjUsIDIyMiwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjUsIDIyMiwgMiwgMjQ4LCAyMDcsIDk0LCAKLSAgICAxLCAyMTUsIDE4MCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjQsIDQwLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyMywgNjgsIDIsIAotICAgIDI0OCwgMjA3LCA5NCwgMSwgMjIwLCAyMSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMTcsIDM5LCAyLCAyNDgsIDIwNywgOTQsIAotICAgIDEsIDIxNCwgNCwgMiwgMjQxLCA2MSwgOTQsIDEsIDI1MiwgMjksIDIsIDIyMywgMTY5LCA5NCwgMSwgMjM0LCAyNTEsIDIsIAotICAgIDIyMywgMTY5LCA5NCwgMSwgMjI1LCAyMjIsIDIsIDIyMywgMTY5LCA5NCwgMjcsIDExMiwgMjMzLCA5NCwgMTAsIDEsIDExMiwgCi0gICAgMjEyLCA0NywgNTMsIDE3LCAxMCwgMSwgMTEyLCAyMTIsIDQ3LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDY1LCA1MywgMTcsIDEwLCAKLSAgICAxLCAyNTIsIDY1LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDY1LCA2NSwgMTcsIDEwLCAxLCAyNTIsIDY1LCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjI1LCAyMDYsIDUzLCAxNywgMTAsIDEsIDIyNSwgMjA2LCA0MCwgMTcsIDEwLCAxLCAyMjUsIDIwNiwgNjUsIDE3LCAKLSAgICAxMCwgMSwgMjI1LCAyMDYsIDE0NywgMTcsIDEwLCAxLCAyNTIsIDUzLCA1MywgMTcsIDEwLCAxLCAyNTIsIDUzLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyNTIsIDUzLCA2NSwgMTcsIDEwLCAxLCAyNTIsIDUzLCAxNDcsIDE3LCAxMCwgMSwgMjE1LCAxNDcsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIxNSwgMTQ3LCA0MCwgMTcsIDEwLCAxLCAyMTUsIDE0NywgNjUsIDE3LCAxMCwgMSwgMjE1LCAxNDcsIDE0NywgCi0gICAgMTcsIDEwLCAxLCAyMTcsIDYsIDUzLCAxNywgMTAsIDEsIDIxNywgNiwgNDAsIDE3LCAxMCwgMSwgMjE3LCA2LCA2NSwgMTcsIAotICAgIDEwLCAxLCAyMTcsIDYsIDE0NywgMTcsIDEwLCAxLCAyMTUsIDE0OSwgNTMsIDE3LCAxMCwgMSwgMjE1LCAxNDksIDQwLCAxNywgCi0gICAgMTAsIDEsIDIxNSwgMTQ5LCA2NSwgMTcsIDEwLCAxLCAyMTUsIDE0OSwgMTQ3LCAxNywgMTAsIDEsIDIxMywgMjQ5LCA1MywgCi0gICAgMTcsIDEwLCAxLCAyMTMsIDI0OSwgNDAsIDE3LCAxMCwgMSwgMjEzLCAyNDksIDY1LCAxNywgMTAsIDEsIDIxMywgMjQ5LCAKLSAgICAxNDcsIDE3LCAxMCwgMSwgMjI1LCAyMDQsIDUzLCAxNywgMTAsIDEsIDIyNSwgMjA0LCA0MCwgMTcsIDEwLCAxLCAyMjUsIAotICAgIDIwNCwgNjUsIDE3LCAxMCwgMSwgMjI1LCAyMDQsIDE0NywgMTcsIDEwLCAxLCAyNDYsIDQ0LCA1MywgMTcsIDEwLCAxLCAKLSAgICAyNDYsIDQ0LCA0MCwgMTcsIDEwLCAxLCAyNDYsIDQ0LCA2NSwgMTcsIDEwLCAxLCAyNDYsIDQ0LCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMjI3LCAxNTQsIDUzLCAxNywgMTAsIDEsIDIyNywgMTU0LCA0MCwgMTcsIDEwLCAxLCAyMjcsIDE1NCwgNjUsIDE3LCAxMCwgCi0gICAgMSwgMjI3LCAxNTQsIDE0NywgMTcsIDEwLCAxLCAyMTcsIDI3LCA1MywgMTcsIDEwLCAxLCAyMTcsIDI3LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyMTcsIDI3LCA2NSwgMTcsIDEwLCAxLCAyMTcsIDI3LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCAyNSwgNTMsIDE3LCAxMCwgCi0gICAgMSwgMjE3LCAyNSwgNDAsIDE3LCAxMCwgMSwgMjE3LCAyNSwgNjUsIDE3LCAxMCwgMSwgMjE3LCAyNSwgMTQ3LCAxNywgMTAsIAotICAgIDEsIDI0OCwgMTMzLCA1MywgMTcsIDEwLCAxLCAyNDgsIDEzMywgNDAsIDE3LCAxMCwgMSwgMjQ4LCAyMDIsIDUzLCAxNywgCi0gICAgMTAsIDEsIDI0OCwgMjAyLCA0MCwgMTcsIDEwLCAxLCAyNDYsIDcxLCA1MywgMTcsIDEwLCAxLCAyNDYsIDcxLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyNDgsIDEzMSwgNTMsIDE3LCAxMCwgMSwgMjQ4LCAxMzEsIDQwLCAxNywgMTAsIDEsIDIzNSwgMTIxLCA1MywgCi0gICAgMTcsIDEwLCAxLCAyMzUsIDEyMSwgNDAsIDE3LCAxMCwgMSwgMjIyLCAxNzIsIDUzLCAxNywgMTAsIDEsIDIyMiwgMTcyLCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMzQsIDE3NSwgNTMsIDE3LCAxMCwgMSwgMjM0LCAxNzUsIDQwLCAxNywgMTAsIDEsIDIzNCwgCi0gICAgMTc1LCA2NSwgMTcsIDEwLCAxLCAyMzQsIDE3NSwgMTQ3LCAxNywgMTAsIDEsIDI0MywgMTIzLCA1MywgMTcsIDEwLCAxLCAKLSAgICAyNDMsIDEyMywgNDAsIDE3LCAxMCwgMSwgMjQzLCAxMjMsIDY1LCAxNywgMTAsIDEsIDI0MywgMTIzLCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjQyLCAxMDIsIDUzLCAxNywgMTAsIDEsIDI0MiwgMTAyLCA0MCwgMTcsIDEwLCAxLCAyNDIsIDEwMiwgNjUsIDE3LCAKLSAgICAxMCwgMSwgMjQyLCAxMDIsIDE0NywgMTcsIDEwLCAxLCAyMjksIDMsIDUzLCAxNywgMTAsIDEsIDIyOSwgMywgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjI5LCAzLCA2NSwgMTcsIDEwLCAxLCAyMjksIDMsIDE0NywgMTcsIDEwLCAxLCAyMjgsIDYzLCAyNDIsIDIxOSwgCi0gICAgNTMsIDE3LCAxMCwgMSwgMjI4LCA2MywgMjQyLCAyMTksIDQwLCAxNywgMTAsIDEsIDIyMiwgMjE1LCA1MywgMTcsIDEwLCAxLCAKLSAgICAyMjIsIDIxNSwgNDAsIDE3LCAxMCwgMSwgMjIyLCAyMTUsIDY1LCAxNywgMTAsIDEsIDIyMiwgMjE1LCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjQxLCAyMTksIDIsIDc5LCA3NywgNTMsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDIsIDc5LCA3NywgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDQwLCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDIsIDE3MiwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDI0NywgMTQyLCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQ3LCAxNDIsIDQwLCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDcsIDE0MiwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0NywgMTQyLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgNzksIDI1MiwgMTMzLCA1MywgMTcsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDQwLCAxNywgMTAsIDEsIDc5LCAyNTIsIDEzMywgCi0gICAgMiwgMjAyLCA3NywgNTMsIDE3LCAxMCwgMSwgNzksIDI1MiwgMTMzLCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAxNiwgNTksIAotICAgIDQ4LCAxMCwgMTYsIDU5LCA1MSwgMTAsIDE2LCAxMTMsIDE3MCwgNDgsIDEwLCAxNiwgMTEzLCAxNzAsIDUxLCAxMCwgMTYsIAotICAgIDEzNCwgMTcwLCA0OCwgMTAsIDE2LCAxMzQsIDE3MCwgNTEsIDEwLCAxNiwgMTM0LCAxNzAsIDIyNSwgNywgMjQ2LCAxMDQsIAotICAgIDQ4LCAxMCwgMTYsIDEzNCwgMTcwLCAyMjUsIDcsIDI0NiwgMTA0LCA1MSwgMTAsIDE2LCAyNDQsIDExLCAxNzAsIDQ4LCAxMCwgCi0gICAgMTYsIDI0NCwgMTEsIDE3MCwgNTEsIDEwLCAxNiwgNTIsIDY3LCAyNTIsIDE0MSwgNTEsIDEwLCAxNiwgMTEzLCAxNzAsIAotICAgIDIxMywgMTg5LCA0OCwgMTAsIDE2LCAxMTMsIDE3MCwgMjEzLCAxODksIDUxLCAxMCwgMTYsIDIyMiwgMjMzLCAxMCwgMTYsIAotICAgIDQsIDIxNywgODEsIDQ4LCAxMCwgMTYsIDQsIDIxNywgODEsIDUxLCAxMCwgMSwgMjI5LCA4MCwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjI5LCA4MCwgNDAsIDE3LCAxMCwgMSwgMjI5LCA4MCwgNjUsIDE3LCAxMCwgMSwgMjI5LCA4MCwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDEwNCwgNTMsIDE3LCAxMCwgMSwgMTA0LCA0MCwgMTcsIDEwLCAxLCAyMjYsIDIzNSwgNTMsIDE3LCAxMCwgMSwgMjI2LCAKLSAgICAyMzUsIDQwLCAxNywgMTAsIDEsIDIxMCwgMjEzLCA1MywgMTcsIDEwLCAxLCAyMTAsIDIxMywgNDAsIDE3LCAxMCwgMSwgCi0gICAgMTA0LCAyLCAyMDIsIDc3LCA1MywgMTcsIDEwLCAxLCAyMTQsIDAsIDUzLCAxNywgMTAsIDEsIDIxNCwgMCwgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjM0LCA3MywgMjI2LCAyMzUsIDUzLCAxNywgMTAsIDEsIDIzNCwgNzMsIDIyNiwgMjM1LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyMzQsIDczLCAyMTAsIDIxMywgNTMsIDE3LCAxMCwgMSwgMjM0LCA3MywgMjEwLCAyMTMsIDQwLCAxNywgMTAsIDEsIAotICAgIDE2MCwgNTMsIDE3LCAxMCwgMSwgMTYwLCA0MCwgMTcsIDEwLCAxLCAxNjAsIDY1LCAxNywgMTAsIDEsIDE2MCwgMTQ3LCAxNywgCi0gICAgMTAsIDEsIDIxNCwgMjA3LCAyMzQsIDE4NiwgMjM0LCA3MywgMTEyLCAyMzEsIDE5MywgNjUsIDE3LCAxMCwgMSwgMjE0LCAKLSAgICAyMDcsIDIzNCwgMTg2LCAyMzQsIDczLCAxMTIsIDIzMSwgMTkzLCAxNDcsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAKLSAgICAyLCAxMTIsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTEyLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIAotICAgIDIwMiwgNzcsIDIsIDI1NCwgMjQ0LCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDI1NCwgMjQ0LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIxMiwgMzEsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgCi0gICAgMiwgMjEyLCAzMSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxMDQsIDUzLCAxNywgMTAsIDI3LCA3OSwgCi0gICAgMiwgMjAyLCA3NywgMiwgMTA0LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyNiwgMjM1LCA1MywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyNiwgMjM1LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIAotICAgIDIxMCwgMjEzLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIxMCwgMjEzLCA0MCwgMTcsIDEwLCAyNywgCi0gICAgNzksIDIsIDIwMiwgNzcsIDIsIDE2MCwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNjAsIDQwLCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTYwLCA2NSwgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAKLSAgICAyMDIsIDc3LCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAyMDIsIAotICAgIDc3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAyMDIsIDc3LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDUzLCAxNywgMTAsIDEsIDI0NCwgMTY4LCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDE0NywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxMjIsIAotICAgIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDI1MiwgNTUsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgCi0gICAgNTUsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIAotICAgIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMzQsIAotICAgIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDExMiwgMjMxLCAKLSAgICAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDE1MSwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAxMTIsIDIzMSwgMTkzLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCAxMjIsIDUzLCAxNywgMTAsIAotICAgIDI3LCAxNTEsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMTIyLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIDY2LCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxMjIsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTUxLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyMiwgMjcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgCi0gICAgMjE3LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyNDgsIAotICAgIDIxNywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAKLSAgICA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgMTUxLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDE1MSwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMjM0LCAxMzAsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyNDQsIDE0MywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTEyLCAyMzEsIDE5MywgNTMsIAotICAgIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDEyMiwgNTMsIDE3LCAxMCwgCi0gICAgMjcsIDIyNCwgODIsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDIyNCwgODIsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzNCwgMjUxLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjM0LCAKLSAgICAyNTEsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjM0LCAyNTEsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIAotICAgIDI3LCAyMzQsIDI1MSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjMzLCAxMDMsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAKLSAgICAyNywgMjMzLCAxMDMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCAKLSAgICAxMjIsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgNjYsIDUzLCAxNywgCi0gICAgMTAsIDI3LCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyOCwgNjMsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgCi0gICAgNjMsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNDEsIAotICAgIDIxOSwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQxLCAyMTksIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgCi0gICAgMTUxLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgCi0gICAgNzksIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjE2LCAyMDMsIDIsIDIxOCwgMjMsIDExMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyMywgOTYsIDIsIDIxOCwgMjMsIDExMiwgNTMsIDE3LCAxMCwgMjcsIDExMiwgMjMxLCAxOTMsIDIsIDIxOCwgMjMsIDExMiwgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDI0OCwgMTgzLCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjM0LCAKLSAgICAyMDQsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyNDQsIDE2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIAotICAgIDI0OCwgMTg1LCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjM0LCAyMDYsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAKLSAgICAyLCAyMTgsIDIzLCAxMTIsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA2NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgCi0gICAgNzcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMjEwLCAxMDksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMTcsIDgsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIxNywgOCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMTYsIDE5MywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIxNiwgMTkzLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAyMjgsIDYzLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE2LCAxOTMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMTIsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjMzLCAKLSAgICAxMDMsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAKLSAgICA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIyOCwgNjMsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIyOCwgNjMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDExMiwgMjMxLCAxOTMsIDIsIDIxOCwgMjMsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMjMsIDk2LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDc5LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgCi0gICAgMjAyLCA3NywgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDI0MSwgMjE5LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjUyLCA1NSwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyMTcsIDgsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMTcsIAotICAgIDgsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAKLSAgICAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMTUxLCAyLCA2NiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgCi0gICAgMTMwLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgCi0gICAgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAKLSAgICAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIAotICAgIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDEyMiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCA2NiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjQ0LCAxNDMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyNDQsIAotICAgIDE0MywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjQsIAotICAgIDgyLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAKLSAgICAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzNCwgCi0gICAgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIAotICAgIDY2LCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMjIsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCA2NSwgCi0gICAgMTcsIDEwLCAyNywgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIAotICAgIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCAKLSAgICAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgMjE4LCAKLSAgICAyMywgMTEyLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA3OSwgCi0gICAgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgNzksIAotICAgIDIsIDIwMiwgNzcsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjE2LCAxOTMsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIwLCA2MCwgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCAxNDcsIAotICAgIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIDE0NywgMTcsIAotICAgIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjQxLCAyMTksIDE0NywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDc5LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAKLSAgICAyMjAsIDk0LCAyLCAyNDQsIDE2NiwgMTQ3LCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyNDgsIDE4NSwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjAsIDk0LCAyLCAyMzQsIDIwNiwgMTQ3LCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgMTEyLCAyMzEsIDE5MywgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCAxMTIsIDIzMSwgCi0gICAgMTkzLCA1MywgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjAsIAotICAgIDYwLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAKLSAgICAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgCi0gICAgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgCi0gICAgMiwgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjE3LCAKLSAgICA4MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjU0LCAxOTcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMTIyLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDE1MSwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMzQsIDEzMCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIAotICAgIDc5LCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMjM0LCAxMzAsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjIzLCA5NiwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjIzLCA5NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDE1MSwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMTIyLCAxNDcsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIDEzMCwgMTQ3LCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAxNTEsIDE0NywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMCwgNjAsIDIsIDIzNCwgMTMwLCAxNDcsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIxMCwgMTEyLCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCAxMTIsIDIsIDI0NCwgMTY0LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMTEyLCAyLCAyNDQsIDE2NCwgNTMsIDE3LCAyMjYsIDE0NiwgNDMsIDIyNiwgMywgMjI2LCAxNDYsIDQ0LCAyMjYsIDMsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMjIsIDIsIDE1MSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDEyMiwgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgCi0gICAgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIxNywgOCwgMiwgNjYsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMTIyLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxMjIsIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgCi0gICAgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAKLSAgICAxNjcsIDIsIDE1MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMiwgMTIyLCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIAotICAgIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgCi0gICAgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTIyLCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAKLSAgICAyMjIsIDI3LCAyLCAxMjIsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAKLSAgICAyLCAyMzQsIDEzMCwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIyMCwgNjAsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI0OCwgMjE3LCAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAKLSAgICAxMzAsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIxNywgODEsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDE1MSwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDIsIAotICAgIDY2LCA0MCwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAKLSAgICA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCAyLCAxMTIsIDIzMSwgCi0gICAgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI0NCwgCi0gICAgMTQzLCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDEyMiwgMiwgNjYsIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAKLSAgICAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCAxNTEsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCAxNTEsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIAotICAgIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzMywgCi0gICAgMTAzLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIAotICAgIDI3LCA2NiwgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDY2LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNjYsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDIsIDE1MSwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCAyLCAyMzQsIDEzMCwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCAKLSAgICAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAKLSAgICAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIAotICAgIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAyMzQsIDEzMCwgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDE1MSwgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDIsIDc5LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAyMzQsIDEzMCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDE1MSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMTUxLCAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxNTEsIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgCi0gICAgMTMwLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTIyLCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAKLSAgICAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDE1MSwgMiwgCi0gICAgNzksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDY2LCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgCi0gICAgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIAotICAgIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjM0LCAyNTEsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIAotICAgIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAxNTEsIDIsIAotICAgIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAxMjIsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgCi0gICAgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNTIsIAotICAgIDU1LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgNjYsIDIsIDY2LCA2NSwgCi0gICAgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIAotICAgIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjIsIDQsIDIxNCwgMTI4LCAyNTMsIDIzOCwgMjM0LCA0LCAyMTgsIDEzMCwgCi0gICAgNSwgNTMsIDE3LCAxMCwgMjcsIDIyNCwgNzgsIDIxNCwgMTI4LCAyNTMsIDIzOCwgMjM0LCA0LCAyMTgsIDEzMCwgNSwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDI1NCwgMTUzLCA1MywgMTcsIDEwLCAyNywgMjU0LCAxODMsIDUzLCAxNywgMTAsIDI3LCAyMzAsIDE1MywgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIyMiwgNSwgNTMsIDE3LCAxMCwgMjcsIDIyMywgMTQzLCA1MywgMTcsIDEwLCAyNywgMjU0LCAKLSAgICAxNzIsIDUzLCAxNywgMTAsIDI3LCAyMTIsIDQ5LCA1MywgMTcsIDEwLCAyNywgMjIyLCA0LCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjIyLCAzLCAyNTQsIDE3MiwgMjEyLCA0OCwgMTAsIDI3LCAyMzUsIDEzNCwgMjIzLCAzNCwgNTAsIDEwLCAyNywgMjUxLCAKLSAgICAyMzAsIDI1NCwgMzksIDI1NCwgNDAsIDQ1LCAyMjEsIDE1NiwgNDUsIDIyMSwgNDUsIDQ1LCAyMjAsIDIzMywgNDUsIDIyMCwgCi0gICAgMjIyLCA0NSwgMjIwLCAyMTEsIDQ1LCAyMjAsIDIwMCwgNDUsIDIyMCwgMTg5LCA0NSwgMjIwLCAxNzgsIDQ1LCAyMjAsIAotICAgIDE2NywgNDUsIDIyMSwgMTU1LCA0NSwgMjIxLCAxNDQsIDQ1LCAyMjEsIDEzMywgNDUsIDIyMSwgMTIyLCA0NSwgMjIxLCAKLSAgICAxMTEsIDQ1LCAyMjEsIDEwMCwgNDUsIDIyMSwgODksIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0OSwgMjE5LCAyMjQsIAotICAgIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAxMDksIDI0OSwgMjE5LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAxMDksIDI0MywgCi0gICAgMjI5LCAyMTgsIDEyOSwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ5LCAyMjYsIDIyNCwgMTk0LCAyNDQsIDIwLCAKLSAgICAzMSwgNjcsIDIyMCwgMTUwLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDUsIDMxLCA3OCwgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgMjI0LCAxMywgNzgsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCA3MSwgMjMzLCAyMCwgMTI3LCAKLSAgICAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNzEsIDIzMywgMjAsIDI1MSwgMTU2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgCi0gICAgMzEsIDY3LCAyMDMsIDI0NSwgMTYzLCAzOCwgMjcsIDQzLCAyNDIsIDI3LCAzOCwgMjcsIDQ0LCAyNDIsIDI3LCAzOCwgNTIsIAotICAgIDIxNiwgODksIDQzLCAyNDIsIDI3LCAzOCwgNTIsIDIxNiwgODksIDQ0LCAyNDIsIDI3LCAzOCwgMjMxLCAyMzMsIDQzLCAKLSAgICAyNDIsIDI3LCAzOCwgMjMxLCAyMzMsIDQ0LCAyNDIsIDI3LCAzOCwgMjQ5LCAxOTcsIDIzMSwgMjMyLCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCAxMTMsIDU5LCAyMzMsIDU2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDUsIDE2MCwgCi0gICAgMjQ4LCAxNTYsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0NSwgMTUxLCAyNDgsIDE1NiwgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgMTIxLCAyMzIsIDIxMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjEyLCAzMiwgMTIxLCAyMzIsIAotICAgIDIxMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDIyNiwgMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgCi0gICAgNDQsIDIyNiwgMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDI0OSwgOTksIDEyNywgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgNDQsIDI0OSwgOTksIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDIxNiwgNiwgMjIwLCAKLSAgICA1MywgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQzLCA4NSwgMjMzLCAyMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgODUsIAotICAgIDIzMywgMjAsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDUyLCAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNTIsIDI1NCwgMTEwLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCAKLSAgICAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgMjU0LCAxMTAsIDEyNywgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgNDMsIDI0OSwgMTYxLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCAyNDksIAotICAgIDE2MSwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNzEsIDI0OSwgMTYxLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA3MSwgMjQ5LCAxNjEsIDEyNywgMjIwLCAxMzEsIDI0NywgMTIwLCA3MSwgMjIwLCAxMzEsIAotICAgIDI0NywgMTIwLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNDIsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCAKLSAgICA2NywgNDQsIDQyLCAxMjcsIDI0OCwgMTU1LCAyMjYsIDExOSwgMjUwLCAxNzIsIDIyNiwgMTE5LCAyMTIsIDMyLCAyMjYsIAotICAgIDExOSwgNTIsIDIxMiwgMzIsIDIyNiwgMTE5LCAyNDgsIDE1NSwgMTIxLCAyMzIsIDIxMywgMjUwLCAxNzIsIDEyMSwgMjMyLCAKLSAgICAyMTMsIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTMsIDQsIDI0OSwgMjE5LCA0LCAxMDksIDI0OSwgMjE5LCA0LCAyNDMsIDIyOSwgCi0gICAgMjE4LCAxMjksIDQsIDIyMCwgMTUwLCA0LCAyNDksIDIyNiwgNCwgMjI0LCAxMywgNzgsIDQsIDI0NSwgMzEsIDc4LCA0LCAKLSAgICAyNDUsIDE2MCwgMjQ4LCAxNTYsIDQsIDQzLCAyMjYsIDMsIDQsIDQ0LCAyMjYsIDMsIDQsIDQzLCAyNDksIDk5LCAxMjcsIDQsIAotICAgIDQ0LCAyNDksIDk5LCAxMjcsIDQsIDQzLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNCwgNDQsIDIxNiwgNiwgMjIwLCA1MywgCi0gICAgMTI3LCA0LCA1NCwgNTAsIDQsIDI1NCwgMTI2LCA0LCAyNTMsIDIxNiwgNCwgOTYsIDUwLCA0LCAyNDAsIDE2NywgNCwgMjMzLCAKLSAgICAxNSwgNTAsIDQsIDI0MiwgMTMwLCA1MCwgNCwgMjQ1LCA5OCwgNTAsIDQsIDIyMywgNTAsIDIxOSwgNDYsIDQsIDI0NywgCi0gICAgMTMyLCA1MCwgNCwgMjI1LCAxODIsIDUwLCA0LCAyNDksIDIxNywgMjUzLCAyMDYsIDEwLCAyNDQsIDE2NCwgNTMsIDE3LCAKLSAgICAxMCwgMjE3LCA0NCwgMiwgMjQ0LCAxNjQsIDQ4LCAxMCwgMjQ4LCAxODMsIDUzLCAxNywgMTAsIDIxNywgNzgsIDI0NCwgMSwgCi0gICAgMTAsIDIzNCwgMjA0LCA1MywgMTcsIDEwLCAyNDQsIDE2NiwgNTMsIDE3LCAxMCwgMjQ0LCAxNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNDgsIDE4NSwgNTMsIDE3LCAxMCwgMjQ4LCAxODUsIDE0NywgMTcsIDEwLCAyMzQsIDIwNiwgNTMsIDE3LCAxMCwgMjM0LCAKLSAgICAyMDYsIDE0NywgMTcsIDEwLCAyMjAsIDk0LCA1MywgMTcsIDEwLCAyMjAsIDk0LCAxNDcsIDE3LCAxMCwgMjE4LCA0NiwgNTMsIAotICAgIDE3LCAxMCwgMjE4LCA0NiwgMTQ3LCAxNywgMTAsIDEsIDIwMiwgNTMsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMzEsIDIyOCwgCi0gICAgNzcsIDUzLCAxNywgMTAsIDEsIDExMiwgMiwgMjMxLCAyMjgsIDc3LCA0MCwgMTcsIDEwLCAxLCAxMTIsIDIsIDIwMiwgNzcsIAotICAgIDUzLCAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjAyLCA3NywgNTMsIAotICAgIDE3LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDI1MiwgNDMsIDUzLCAKLSAgICAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCAyNTIsIDQzLCA0MCwgMTcsIDEwLCAxLCA3OSwgMiwgMjAyLCA3NywgNTMsIDE3LCAKLSAgICAxMCwgMSwgNzksIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDEsIDc5LCAyLCAyMDIsIDc3LCA2NSwgMTcsIDEwLCAxLCA3OSwgCi0gICAgMiwgMjAyLCA3NywgMTQ3LCAxNywgMTAsIDEsIDExMiwgNTMsIDE3LCAxMCwgMSwgMTEyLCA0MCwgMTcsIDEwLCAxLCAyNTIsIAotICAgIDU1LCA1MywgMTcsIDEwLCAxLCAyNTIsIDU1LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDU1LCA2NSwgMTcsIDEwLCAxLCAyNTIsIAotICAgIDU1LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCA4LCAyMzEsIDE2NSwgNTMsIDE3LCAxMCwgMSwgMjE3LCA4LCAyMzEsIDE2NSwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjE3LCA4LCA1MywgMTcsIDEwLCAxLCAyMTcsIDgsIDQwLCAxNywgMTAsIDEsIDIxNywgOCwgNjUsIAotICAgIDE3LCAxMCwgMSwgMjE3LCA4LCAxNDcsIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDUzLCAxNywgMTAsIDEsIDIxNiwgMTkzLCA0MCwgCi0gICAgMTcsIDEwLCAxLCAyMTYsIDE5MywgNjUsIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDE0NywgMTcsIDEwLCAxLCAxNTEsIDUzLCAKLSAgICAxNywgMTAsIDEsIDE1MSwgNDAsIDE3LCAxMCwgMSwgMTUxLCA2NSwgMTcsIDEwLCAxLCAxNTEsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAxMjIsIDUzLCAxNywgMTAsIDEsIDEyMiwgNDAsIDE3LCAxMCwgMSwgMTIyLCA2NSwgMTcsIDEwLCAxLCAxMjIsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMSwgMjM0LCAxMzAsIDQwLCAxNywgMTAsIDEsIDIzNCwgMTMwLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMzQsIDEzMCwgMTQ3LCAxNywgMTAsIDEsIDI0OCwgMTk2LCA1MywgMTcsIDEwLCAxLCAyNDgsIDE5NiwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjE2LCAyMDMsIDUzLCAxNywgMTAsIDEsIDIxNiwgMjAzLCA0MCwgMTcsIDEwLCAxLCAyMjMsIDk2LCAKLSAgICA1MywgMTcsIDEwLCAxLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAxLCAyMTAsIDEwOSwgNTMsIDE3LCAxMCwgMSwgMjEwLCAxMDksIAotICAgIDQwLCAxNywgMTAsIDEsIDIyMSwgMTY3LCA1MywgMTcsIDEwLCAxLCAyMjEsIDE2NywgNDAsIDE3LCAxMCwgMSwgMjIxLCAKLSAgICAxNjcsIDY1LCAxNywgMTAsIDEsIDIyMSwgMTY3LCAxNDcsIDE3LCAxMCwgMSwgMjIwLCA2MCwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjIwLCA2MCwgNDAsIDE3LCAxMCwgMSwgMjIwLCA2MCwgNjUsIDE3LCAxMCwgMSwgMjIwLCA2MCwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDIyMiwgMjcsIDUzLCAxNywgMTAsIDEsIDIyMiwgMjcsIDQwLCAxNywgMTAsIDEsIDIyMiwgMjcsIDY1LCAxNywgMTAsIDEsIAotICAgIDIyMiwgMjcsIDE0NywgMTcsIDEwLCAxLCAyNDgsIDIxNywgNTMsIDE3LCAxMCwgMSwgMjQ4LCAyMTcsIDQwLCAxNywgMTAsIAotICAgIDEsIDI0OCwgMjE3LCA2NSwgMTcsIDEwLCAxLCAyNDgsIDIxNywgMTQ3LCAxNywgMTAsIDEsIDIxNywgODEsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIxNywgODEsIDQwLCAxNywgMTAsIDEsIDIxNywgODEsIDY1LCAxNywgMTAsIDEsIDIxNywgODEsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMTAsIDExMiwgNTMsIDE3LCAxMCwgMSwgMjEwLCAxMTIsIDQwLCAxNywgMTAsIDEsIDIxMCwgMTEyLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMTAsIDExMiwgMTQ3LCAxNywgMTAsIDEsIDI1NCwgMTk3LCA1MywgMTcsIDEwLCAxLCAyNTQsIDE5NywgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjU0LCAxOTcsIDY1LCAxNywgMTAsIDEsIDI1NCwgMTk3LCAxNDcsIDE3LCAxMCwgMSwgMjQyLCAKLSAgICAyNDUsIDUzLCAxNywgMTAsIDEsIDI0MiwgMjQ1LCA0MCwgMTcsIDEwLCAxLCAyNDIsIDI0NSwgNjUsIDE3LCAxMCwgMSwgCi0gICAgMjQyLCAyNDUsIDE0NywgMTcsIDEwLCAxLCAyNDQsIDE0MywgNTMsIDE3LCAxMCwgMSwgMjQ0LCAxNDMsIDQwLCAxNywgMTAsIAotICAgIDEsIDI0NCwgMTQzLCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE0MywgMTQ3LCAxNywgMTAsIDEsIDIyNCwgODIsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIyNCwgODIsIDQwLCAxNywgMTAsIDEsIDIyNCwgODIsIDY1LCAxNywgMTAsIDEsIDIyNCwgODIsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMzQsIDI1MSwgNTMsIDE3LCAxMCwgMSwgMjM0LCAyNTEsIDQwLCAxNywgMTAsIDEsIDIzNCwgMjUxLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMzQsIDI1MSwgMTQ3LCAxNywgMTAsIDEsIDIzMywgMTAzLCA1MywgMTcsIDEwLCAxLCAyMzMsIDEwMywgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjMzLCAxMDMsIDY1LCAxNywgMTAsIDEsIDIzMywgMTAzLCAxNDcsIDE3LCAxMCwgMSwgNjYsIDUzLCAKLSAgICAxNywgMTAsIDEsIDY2LCA0MCwgMTcsIDEwLCAxLCA2NiwgNjUsIDE3LCAxMCwgMSwgNjYsIDE0NywgMTcsIDEwLCAxLCAyMjgsIAotICAgIDYzLCA1MywgMTcsIDEwLCAxLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAxLCAyMjgsIDYzLCA2NSwgMTcsIDEwLCAxLCAyMjgsIAotICAgIDYzLCAxNDcsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDUzLCAxNywgMTAsIDEsIDI0MSwgMjE5LCA0MCwgMTcsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAxLCAyMTIsIDMxLCA1MywgMTcsIDEwLCAKLSAgICAxLCAyMTIsIDMxLCA0MCwgMTcsIDEwLCAxLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAxLCAxMTIsIDIzMSwgMTkzLCAKLSAgICA0MCwgMTcsIDEwLCAxLCA3OSwgNTMsIDE3LCAxMCwgMSwgNzksIDQwLCAxNywgMTAsIDEsIDc5LCA2NSwgMTcsIDEwLCAxLCAKLSAgICA3OSwgMTQ3LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMzEsIDIyOCwgNzcsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMzEsIDIyOCwgNzcsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAKLSAgICAyMDIsIDc3LCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCAxMTIsIDIsIDIwMiwgMjUyLCA0MywgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIsIAotICAgIDIwMiwgMjUyLCA0MywgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgCi0gICAgMiwgMTEyLCA0MCwgMTcsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMjgsIDczLCAyMTksIDE4LCAxMjYsIDI0NSwgMzEsIDc4LCAKLSAgICAxMjYsIDIyMywgMjU0LCA3OCwgMTI2LCA1NCwgNTAsIDEyNiwgMjQ3LCAxMzIsIDUwLCAxMjYsIDIyNSwgMTgyLCA1MCwgCi0gICAgMTI2LCAyNTQsIDEyNiwgMTI2LCAyNTQsIDU3LCAxMjYsIDQzLCAyMjYsIDMsIDEyNiwgNDQsIDIyNiwgMywgMTI2LCAyNTMsIAotICAgIDIxNiwgMTI2LCA5NiwgNTAsIDEyNiwgMjQ5LCAyMTksIDEyNiwgMjQwLCAxNjcsIDEyNiwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICAxMjYsIDIxOSwgNDYsIDEyNiwgMjEsIDIxMCwgODYsIDEyNiwgMjEsIDExMCwgMTI2LCAyMSwgMTA1LCAxMjYsIDIxLCAxNTgsIAotICAgIDEyNiwgMjEsIDE2MSwgMTI2LCAyMSwgMTg5LCAxMjYsIDIxLCAxOTQsIDEyNiwgMjEsIDE5OCwgMTI2LCAyMSwgMTk1LCAKLSAgICAxMjYsIDIxLCAyMDAsIDEyNiwgMjQ5LCAyMjYsIDEyNiwgMjIwLCAxNTAsIDEyNiwgMjMzLCAxNSwgNTAsIDEyNiwgMjQ1LCAKLSAgICA5OCwgNTAsIDEyNiwgMjQyLCAxMzAsIDUwLCAxMjYsIDIyNCwgMTMsIDc4LCAxMjYsIDI0OSwgMjE3LCAyNTMsIDIwNiwgCi0gICAgMTI2LCA3LCA2LCAxLCA2MSwgMTI2LCA3LCA2LCAxLCAyNTMsIDE1OCwgMTI2LCA3LCA2LCAxLCAyNTEsIDY2LCAxMjYsIDcsIAotICAgIDYsIDEsIDI0OSwgNjAsIDEyNiwgNywgNiwgMSwgNzUsIDEyNiwgNywgNiwgMSwgMjQ1LCA2LCAxMjYsIDcsIDYsIDEsIDI0MywgCi0gICAgMjAyLCAxMjYsIDcsIDYsIDEsIDI0MiwgNjAsIDEyNiwgNywgNiwgMSwgNzMsIDEyNiwgNywgNiwgMSwgMjM1LCAxNDQsIAotICAgIDEyNiwgNywgNiwgMSwgMjM1LCAyMywgMTI2LCA3LCA2LCAxLCAxNTYsIDEyNiwgNywgNiwgMSwgMTkzLCAxMjYsIDcsIDYsIAotICAgIDEsIDIzMCwgMjUsIDEyNiwgNywgNiwgMSwgNzYsIDEyNiwgNywgNiwgMSwgMjI2LCAxMDUsIDEyNiwgNywgNiwgMSwgMjI0LCAKLSAgICA5NiwgMTI2LCA3LCA2LCAxLCAxNTMsIDEyNiwgNywgNiwgMSwgMjIyLCA5MSwgMTI2LCA3LCA2LCAxLCAyMTcsIDE1MiwgCi0gICAgMTI2LCA3LCA2LCAxLCA3MCwgMTI2LCA3LCA2LCAxLCAyMTQsIDEwNSwgMTI2LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjYsIDcsIAotICAgIDYsIDEsIDIxMSwgMTc4LCAxMjYsIDcsIDYsIDEsIDIxMSwgMTE3LCAxMjYsIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjYsIDQzLCAKLSAgICA0MiwgMTI3LCAxMjYsIDIyMywgNTAsIDIxOSwgNDYsIDEyNiwgNDQsIDQyLCAxMjcsIDEyNiwgMjUwLCAzMSwgMjU1LCAxNCwgCi0gICAgMTI2LCAxMjEsIDIzMiwgMjEzLCAxMjYsIDI0MiwgMTM3LCAyNTUsIDE0LCAxMjYsIDcsIDQsIDEsIDYxLCAxMjYsIDcsIDQsIAotICAgIDEsIDI1MywgMTU4LCAxMjYsIDcsIDQsIDEsIDI1MSwgNjYsIDEyNiwgNywgNCwgMSwgMjQ5LCA2MCwgMTI2LCA3LCA0LCAxLCAKLSAgICA3NSwgMTI2LCA3LCA0LCAxLCAyNDUsIDYsIDEyNiwgNywgNCwgMSwgMjQzLCAyMDIsIDEyNiwgNywgNCwgMSwgMjQyLCA2MCwgCi0gICAgMTI2LCA3LCA0LCAxLCA3MywgMTI2LCA3LCA0LCAxLCAyMzUsIDE0NCwgMTI2LCA3LCA0LCAxLCAyMzUsIDIzLCAxMjYsIDcsIAotICAgIDQsIDEsIDE1NiwgMTI2LCA3LCA0LCAxLCAxOTMsIDEyNiwgNywgNCwgMSwgMjMwLCAyNSwgMTI2LCA3LCA0LCAxLCA3NiwgCi0gICAgMTI2LCA3LCA0LCAxLCAyMjYsIDEwNSwgMTI2LCA3LCA0LCAxLCAyMjQsIDk2LCAxMjYsIDcsIDQsIDEsIDE1MywgMTI2LCA3LCAKLSAgICA0LCAxLCAyMjIsIDkxLCAxMjYsIDcsIDQsIDEsIDIxNywgMTUyLCAxMjYsIDcsIDQsIDEsIDcwLCAxMjYsIDcsIDQsIDEsIAotICAgIDIxNCwgMTA1LCAxMjYsIDcsIDQsIDEsIDIxMiwgOTgsIDEyNiwgNywgNCwgMSwgMjExLCAxNzgsIDEyNiwgNywgNCwgMSwgCi0gICAgMjExLCAxMTcsIDEyNiwgNywgNCwgMSwgMjEwLCAxNTksIDEyNiwgNDMsIDI0OSwgOTksIDEyNywgMTI2LCA2NywgMjMyLCAKLSAgICAyMTMsIDEyNiwgNDQsIDI0OSwgOTksIDEyNywgMTI2LCAxODIsIDEyNiwgNDMsIDcxLCAyMjYsIDMsIDEyNiwgNDQsIDcxLCAKLSAgICAyMjYsIDMsIDEwMSwgMTA5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDEwMSwgNDMsIDI0OSwgMTYxLCAxMjcsIDEwMSwgNDQsIAotICAgIDI0OSwgMTYxLCAxMjcsIDEwMSwgMTA5LCAyNDksIDIxOSwgMTAxLCA1NiwgMjMwLCAyMjQsIDI0NywgMTIwLCAxMDEsIDU2LCAKLSAgICAxLCAyMTEsIDIyNywgMTAxLCA1NiwgMSwgNCwgNjEsIDEwMSwgNTYsIDEsIDQsIDczLCAxMDEsIDU2LCAxLCA0LCA3MCwgCi0gICAgMTAxLCA1NiwgMSwgNCwgNzUsIDEwMSwgNTYsIDEsIDQsIDc2LCAxMDEsIDU2LCAxLCA0LCAxOTEsIDEwMSwgNTYsIDEsIDQsIAotICAgIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCA0LCAyMTAsIDI0NCwgMTAxLCA1NiwgMSwgNCwgMjE1LCAxMTgsIDEwMSwgMjM0LCAKLSAgICAyMDEsIDIyNCwgMTczLCAyMTksIDMxLCA3OCwgMTAxLCA1NiwgMSwgNjEsIDEwMSwgNTYsIDEsIDczLCAxMDEsIDU2LCAxLCAKLSAgICA3MCwgMTAxLCA1NiwgMSwgNzUsIDEwMSwgNTYsIDEsIDc2LCAxMDEsIDU2LCAxLCAxNzYsIDEwMSwgNTYsIDEsIDIzNCwgOTIsIAotICAgIDEwMSwgNTYsIDEsIDIzMywgMjE3LCAxMDEsIDU2LCAxLCAyMzQsIDE4MiwgMTAxLCA1NiwgMSwgMjM0LCAyOCwgMTAxLCA1NiwgCi0gICAgMSwgMjA2LCAxMDEsIDU2LCAxLCAyMTksIDE5MSwgMTAxLCA1NiwgMSwgMjE4LCA4MywgMTAxLCA1NiwgMSwgMjIxLCAxODEsIAotICAgIDEwMSwgNTYsIDEsIDIxOSwgNTgsIDEwMSwgNTYsIDEsIDIxNywgMTA1LCAxMDEsIDU2LCAxLCAyMTYsIDExNywgMTAxLCA1NiwgCi0gICAgMSwgMjE1LCAxMTgsIDEwMSwgNTYsIDEsIDIxNywgMjIsIDEwMSwgNTYsIDEsIDExMSwgMTAxLCA1NiwgMSwgMTk3LCAxMDEsIAotICAgIDU2LCAxLCAyMjgsIDIzMywgMTAxLCA1NiwgMSwgMjI3LCAyMzcsIDEwMSwgNTYsIDEsIDIyOSwgMTA3LCAxMDEsIDU2LCAxLCAKLSAgICAyMjgsIDc0LCAxMDEsIDU2LCAxLCAxNjIsIDEwMSwgNTYsIDEsIDI0MSwgMTgwLCAxMDEsIDU2LCAxLCAyNDAsIDIyMiwgCi0gICAgMTAxLCA1NiwgMSwgMjQxLCAyMzgsIDEwMSwgNTYsIDEsIDI0MSwgNjgsIDEwMSwgNTYsIDEsIDE4NCwgMTAxLCA1NiwgMSwgCi0gICAgMjMwLCAyMzAsIDEwMSwgNTYsIDEsIDIzMCwgMTAyLCAxMDEsIDU2LCAxLCAyMzEsIDkxLCAxMDEsIDU2LCAxLCAyMzAsIAotICAgIDE2MSwgMTAxLCA1NiwgMSwgMTkxLCAxMDEsIDU2LCAxLCAyMTAsIDIxMiwgMTAxLCA1NiwgMSwgMjEwLCAyNDQsIDEwMSwgCi0gICAgNTYsIDEsIDIwNSwgMTAxLCA1NiwgMSwgMjIzLCAzNSwgMTAxLCA1NiwgMSwgMjIyLCAxNDAsIDEwMSwgNTYsIDEsIDIyMywgCi0gICAgMTI4LCAxMDEsIDU2LCAxLCAyMjIsIDIxMSwgMTAxLCA1NiwgMSwgMjEyLCA2NSwgMTAxLCA1NiwgMSwgMjMwLCAyNSwgMTAxLCAKLSAgICA1NiwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCAxMDEsIDU2LCAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDEwMSwgMjQsIDI0NCwgCi0gICAgMTAzLCAxMDEsIDI0LCAxLCAyMzQsIDU4LCAxMDEsIDI0LCAxLCAyMTgsIDIxNSwgMTAxLCAyNCwgMSwgMjM0LCA1MSwgMTAxLCAKLSAgICAyNCwgMSwgMjI4LCAyMjYsIDEwMSwgMjQsIDEsIDIyOCwgMjI0LCAxMDEsIDI0LCAxLCAyMjgsIDIyMywgMTAxLCAyNCwgMSwgCi0gICAgMjE2LCAxMDEsIDEwMSwgMjQsIDEsIDIxOCwgMjA0LCAxMDEsIDI0LCAxLCAyMjMsIDI2LCAxMDEsIDI0LCAxLCAyMjMsIDIxLCAKLSAgICAxMDEsIDI0LCAxLCAyMjMsIDE4LCAxMDEsIDI0LCAxLCAyMjMsIDExLCAxMDEsIDI0LCAxLCAyMjMsIDYsIDEwMSwgMjQsIDEsIAotICAgIDIyMywgMSwgMTAxLCAyNCwgMSwgMjIzLCAxMiwgMTAxLCAyNCwgMSwgMjIzLCAyNCwgMTAxLCAyNCwgMSwgMjMwLCAyMTcsIAotICAgIDEwMSwgMjQsIDEsIDIyNSwgOTUsIDEwMSwgMjQsIDEsIDIxOCwgMjEyLCAxMDEsIDI0LCAxLCAyMjUsIDg0LCAxMDEsIDI0LCAKLSAgICAxLCAyMTksIDE0OCwgMTAxLCAyNCwgMSwgMjE4LCAyMDksIDEwMSwgMjQsIDEsIDIzNiwgNTYsIDEwMSwgMjQsIDEsIDI1MCwgCi0gICAgNDYsIDEwMSwgMjQsIDEsIDIxOCwgMjE5LCAxMDEsIDI0LCAxLCAyNTAsIDEwNiwgMTAxLCAyNCwgMSwgMjM0LCAxMTAsIAotICAgIDEwMSwgMjQsIDEsIDIxNiwgMTczLCAxMDEsIDI0LCAxLCAyMjUsIDEzMSwgMTAxLCAyNCwgMSwgMjQxLCAxNzIsIDEwMSwgCi0gICAgMjQsIDEsIDYxLCAxMDEsIDI0LCAxLCAyNTQsIDI0MywgMTAxLCAyNCwgMSwgMTkxLCAxMDEsIDI0LCAxLCAyMTEsIDkyLCAKLSAgICAxMDEsIDI0LCAxLCAyNDUsIDExNywgMTAxLCAyNCwgMSwgNzUsIDEwMSwgMjQsIDEsIDIxMSwgMzYsIDEwMSwgMjQsIDEsIAotICAgIDIxMSwgNDcsIDEwMSwgMjQsIDEsIDc2LCAxMDEsIDI0LCAxLCAyMTIsIDY1LCAxMDEsIDI0LCAxLCAyMTIsIDYyLCAxMDEsIAotICAgIDI0LCAxLCAyMjYsIDIzNCwgMTAxLCAyNCwgMSwgMjEwLCAyNDQsIDEwMSwgMjQsIDEsIDcwLCAxMDEsIDI0LCAxLCAyMTIsIAotICAgIDExLCAxMDEsIDI0LCAxLCAyMTIsIDIyLCAxMDEsIDI0LCAxLCAyMTEsIDI1MCwgMTAxLCAyNCwgMSwgMjEwLCAyMTIsIDEwMSwgCi0gICAgMjQsIDEsIDI0NSwgNTUsIDEwMSwgMjQsIDEsIDIxMSwgOCwgMTAxLCAyNCwgMSwgNzMsIDEyNiwgMjUwLCAxNzYsIDUwLCAKLSAgICAxMjYsIDIyNCwgMjI4LCA1MCwgMTI2LCAyMjgsIDUyLCA1MCwgMTI2LCAyMzEsIDIzMiwgMTI2LCAyNTEsIDEzNSwgMTMwLCAKLSAgICAxMjYsIDIxMSwgNDAsIDUwLCAxMjYsIDIxMSwgMjE3LCA1MCwgMTAxLCAyNDQsIDE4LCAxOTIsIDIxMywgMjM5LCAxMDEsIAotICAgIDE0MCwgNzQsIDEwMSwgMjE0LCAxNTMsIDc0LCAxMDEsIDk3LCA3NCwgMTAxLCAyNDYsIDEwNCwgNzQsIDEwMSwgODUsIDIxOCwgCi0gICAgMjM0LCAxMDEsIDcxLCAyNTAsIDM1LCAyMzUsIDIwNCwgMjU0LCA5OSwgMjU0LCAxMjAsIDIzNSwgMjA0LCAyNTQsIDk5LCAKLSAgICAyMjAsIDEzNywgMjM1LCAyMDQsIDI1NCwgOTksIDIxNiwgMjM2LCAyMjYsIDI0OSwgMjIzLCA3MiwgMjUwLCAxNDIsIDIyMywgCi0gICAgNzIsIDI1MCwgMTQyLCA2MiwgNTcsIDMsIDI1MywgMTQyLCA2MSwgNjIsIDU3LCAzLCAyNTMsIDExMSwgNzUsIDYyLCA1NywgCi0gICAgMywgMjUzLCAxMjAsIDczLCA2MiwgNTcsIDMsIDI1MywgODgsIDc2LCA2MiwgNTcsIDMsIDI1MywgMTM4LCA3MCwgNjIsIDU3LCAKLSAgICAzLCAyNTMsIDE1NywgMjQ4LCAyMjEsIDYyLCA1NywgMywgMjUzLCAxMDQsIDI0OCwgOTAsIDYyLCA1NywgMywgMjUzLCAxNDQsIAotICAgIDI0OCwgMywgNjIsIDU3LCAzLCAyNTMsIDEzNCwgMjQ3LCAxNDUsIDYyLCA1NywgMywgMjUzLCA5OCwgMjQ2LCA3OCwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDkyLCAyMzUsIDE0MSwgNjIsIDU3LCAzLCAyNTMsIDEwMywgMjM1LCAxMjYsIDYyLCA1NywgMywgMjUzLCAKLSAgICAxMTMsIDIzNSwgNjgsIDYyLCA1NywgMywgMjUzLCA4NCwgMjM1LCA1MSwgNjIsIDU3LCAzLCAyNTMsIDcyLCAxNzYsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMDUsIDIzNCwgMTgyLCA2MiwgNTcsIDMsIDI1MywgODIsIDIzNCwgOTIsIDYyLCA1NywgMywgMjUzLCAKLSAgICA3OSwgMjM0LCAyOCwgNjIsIDU3LCAzLCAyNTMsIDY4LCAyMzMsIDIxNywgNjIsIDU3LCAzLCAyNTMsIDY5LCAxODQsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMzUsIDIzMSwgOTEsIDYyLCA1NywgMywgMjUzLCA3NiwgMjMwLCAyMzAsIDYyLCA1NywgMywgMjUzLCAKLSAgICAxMzMsIDIzMCwgMTYxLCA2MiwgNTcsIDMsIDI1MywgMTI1LCAyMzAsIDEwMiwgNjIsIDU3LCAzLCAyNTMsIDE0NiwgMTk3LCAKLSAgICA2MiwgNTcsIDMsIDI1MywgMTI0LCAyMjksIDEwNywgNjIsIDU3LCAzLCAyNTMsIDExOCwgMjI4LCAyMzMsIDYyLCA1NywgMywgCi0gICAgMjUzLCA5NywgMjI4LCA3NCwgNjIsIDU3LCAzLCAyNTMsIDk0LCAyMjcsIDIzNywgNjIsIDU3LCAzLCAyNTMsIDE1MywgMTkwLCAKLSAgICA2MiwgNTcsIDMsIDI1MywgNzcsIDIyNSwgMjIxLCA2MiwgNTcsIDMsIDI1MywgMTEwLCAyMjUsIDEwOCwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDEzNywgMjI1LCAxNiwgNjIsIDU3LCAzLCAyNTMsIDk5LCAyMjQsIDE1MCwgNjIsIDU3LCAzLCAyNTMsIDEzMiwgCi0gICAgMjI0LCA4OCwgNjIsIDU3LCAzLCAyNTMsIDcxLCAyMjQsIDY5LCA2MiwgNTcsIDMsIDI1MywgMTI3LCAyMjQsIDUzLCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTE2LCAyMjQsIDQyLCA2MiwgNTcsIDMsIDI1MywgODksIDIwNSwgNjIsIDU3LCAzLCAyNTMsIDEyMSwgCi0gICAgMjIzLCAxMjgsIDYyLCA1NywgMywgMjUzLCA5NiwgMjIzLCAzNSwgNjIsIDU3LCAzLCAyNTMsIDE1NSwgMjIyLCAyMTEsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMjIsIDIyMiwgMTQwLCA2MiwgNTcsIDMsIDI1MywgMTE3LCAyMDYsIDYyLCA1NywgMywgMjUzLCAxNDAsIAotICAgIDIyMSwgMTgxLCA2MiwgNTcsIDMsIDI1MywgMTA4LCAyMTksIDE5MSwgNjIsIDU3LCAzLCAyNTMsIDEzNiwgMjE5LCA1OCwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDkxLCAyMTgsIDgzLCA2MiwgNTcsIDMsIDI1MywgOTAsIDIxNywgMTA1LCA2MiwgNTcsIDMsIAotICAgIDI1MywgMTUxLCAyMTcsIDIyLCA2MiwgNTcsIDMsIDI1MywgMTEyLCAyMTYsIDExNywgNjIsIDU3LCAzLCAyNTMsIDE0OSwgCi0gICAgMTExLCA2MiwgNTcsIDMsIDI1MywgODAsIDIxNSwgMTE4LCA2MiwgNTcsIDMsIDI1MywgOTUsIDIxMiwgNjUsIDYyLCA1NywgCi0gICAgMywgMjUzLCA3NCwgMjEyLCAyMiwgNjIsIDU3LCAzLCAyNTMsIDEwOSwgMjExLCAyNTAsIDYyLCA1NywgMywgMjUzLCAxMDcsIAotICAgIDIxMSwgMjI3LCA2MiwgNTcsIDMsIDI1MywgMTMxLCAyMTAsIDExNiwgNjIsIDU3LCAzLCAyNTMsIDc1LCAyMTAsIDk0LCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTI4LCAyMTAsIDIzLCA2MiwgNTcsIDMsIDI1MywgMTIzLCAyNTUsIDc1LCA2MiwgNTcsIDMsIDI1MywgCi0gICAgMTA2LCAyNTUsIDc0LCA2MiwgNTcsIDMsIDI1MywgNjUsIDI1MywgMTkyLCA2MiwgNTcsIDMsIDI1MywgNzgsIDI0NiwgNDYsIAotICAgIDYyLCA1NywgMywgMjUzLCA2MSwgMjQ2LCA0NSwgNjIsIDU3LCAzLCAyNTMsIDEwMSwgMjI3LCAxNzQsIDYyLCA1NywgMywgCi0gICAgMjUzLCAxMTksIDIyNCwgMTQ4LCA2MiwgNTcsIDMsIDI1MywgODcsIDIyNCwgMTUyLCA2MiwgNTcsIDMsIDI1MywgNzMsIAotICAgIDIyMywgMTg2LCA2MiwgNTcsIDMsIDI1MywgMTE1LCAyMjMsIDE4NSwgNjIsIDU3LCAzLCAyNTMsIDgxLCAyMjIsIDIxMCwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDgzLCAyMTcsIDEwMiwgNjIsIDU3LCAzLCAyNTMsIDYzLCAyMTUsIDc4LCA2MiwgNTcsIDMsIAotICAgIDI1MywgNjAsIDEwNSwgNjIsIDU3LCAxNiwgMjUzLCAxMzAsIDYyLCA1NywgMTYsIDI1MywgMTI5LCA2MiwgNTcsIDE2LCAKLSAgICAyNTMsIDEyNiwgNjIsIDU3LCAxNiwgMjUzLCAxMTQsIDYyLCA1NywgMTYsIDI1MywgMTAyLCA2MiwgNTcsIDE2LCAyNTMsIAotICAgIDEwMCwgNjIsIDU3LCAxNiwgMjUzLCA5MywgNjIsIDU3LCAxNiwgMjUzLCA4NiwgNjIsIDU3LCAxNiwgMjUzLCA4NSwgNjIsIAotICAgIDU3LCAxNiwgMjUzLCA3MCwgNjIsIDU3LCAxNiwgMjUzLCA2NywgNjIsIDU3LCAxNiwgMjUzLCA2NiwgNjIsIDU3LCAxNiwgCi0gICAgMjUzLCA2NCwgNjIsIDU3LCAxNiwgMjUzLCA2MiwgNjIsIDU3LCAxMDYsIDI1MywgNTksIDIzMSwgMTg1LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCA1OCwgMjExLCAyMjEsIDYyLCA1NywgMTA2LCAyNTMsIDU3LCAyNDgsIDc0LCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICA1NiwgMjQ1LCA5NSwgNjIsIDU3LCAxMDYsIDI1MywgNTUsIDIzMSwgMTU5LCA2MiwgNTcsIDEwNiwgMjUzLCA1NCwgMjE4LCAKLSAgICAxNjIsIDYyLCA1NywgMTA2LCAyNTMsIDUzLCAyNDUsIDM3LCA2MiwgNTcsIDEwNiwgMjUzLCA1MiwgMjIzLCAxNTMsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDUxLCAyMjAsIDYyLCA2MiwgNTcsIDEwNiwgMjUzLCA1MCwgMjQxLCAyMzcsIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDQ5LCAyMTksIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCA0OCwgMjUxLCAyMDMsIDYyLCA1NywgMTA2LCAyNTMsIDQ3LCAKLSAgICAyNDksIDE0NSwgNjIsIDU3LCAxMDYsIDI1MywgNDYsIDI1MSwgMTE1LCA2MiwgNTcsIDEwNiwgMjUzLCA0NSwgMjEyLCAyLCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCA0NCwgMjUyLCAxMzYsIDYyLCA1NywgMTA2LCAyNTMsIDQzLCAyMjYsIDIwNSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgNDIsIDIxOCwgMjU0LCA2MiwgNTcsIDEwNiwgMjUzLCA0MSwgMjQ5LCA2OCwgNjIsIDU3LCAyMzAsIDE0MiwgCi0gICAgMjUzLCA0MCwgMjM0LCAyMjQsIDYyLCA1NywgMjMwLCAxNDIsIDI1MywgMzksIDIzNCwgMjMyLCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICAzOCwgMjI2LCAyMTgsIDYyLCA1NywgMTA2LCAyNTMsIDM3LCAyMTEsIDIzNiwgNjIsIDU3LCAxMDYsIDI1MywgMzYsIDYyLCAKLSAgICA1NywgMjMwLCAxNDIsIDI1MywgMzUsIDI1NCwgMTcsIDYyLCA1NywgMjMwLCAxNDIsIDI1MywgMzQsIDIzMSwgNTIsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDMzLCAyNTEsIDEzNCwgNjIsIDU3LCAxMDYsIDI1MywgMzIsIDI0MiwgMTY2LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUzLCAzMSwgNjIsIDU3LCAxMDYsIDI1MywgMzAsIDIxMSwgMjEyLCA2MiwgNTcsIDEwNiwgMjUzLCAyOSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgMjgsIDYyLCA1NywgMTA2LCAyNTMsIDI3LCAyNDAsIDI0OCwgNjIsIDU3LCAxMDYsIDI1MywgMjYsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCAyNCwgNjIsIDU3LCAyMzAsIDE0MiwgMjUzLCAyMiwgMjE1LCAKLSAgICA5MiwgNjIsIDU3LCAxMDYsIDI1MywgMjEsIDYyLCA1NywgMTA2LCAyNTMsIDIwLCA2MiwgNTcsIDEwNiwgMjUzLCAxOSwgCi0gICAgMjQ5LCAyNTAsIDYyLCA1NywgMTA2LCAyNTMsIDE4LCA2MiwgNTcsIDEwNiwgMjUzLCAxNywgNjIsIDU3LCAxMDYsIDI1MywgCi0gICAgMTYsIDI0MywgOTMsIDYyLCA1NywgMTA2LCAyNTMsIDE1LCAyNTQsIDQsIDYyLCA1NywgMTA2LCAyNTMsIDE0LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCAxMywgNjIsIDU3LCAxMDYsIDI1MywgMTIsIDYyLCA1NywgMTA2LCAyNTMsIDExLCA2MiwgNTcsIDEwNiwgCi0gICAgMjUzLCAxMCwgNjIsIDU3LCAxMDYsIDI1MywgOSwgNjIsIDU3LCAxMDYsIDI1MywgOCwgNjIsIDU3LCAxMDYsIDI1MywgNywgCi0gICAgNjIsIDU3LCAxMDYsIDI1MywgNiwgNjIsIDU3LCAxMDYsIDI1MywgNSwgMjMwLCAxMzQsIDYyLCA1NywgMTA2LCAyNTMsIDQsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDMsIDIxNSwgMjM1LCA2MiwgNTcsIDEwNiwgMjUzLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCAxLCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTUsIDYyLCA1NywgMTA2LCAyNTIsIDI1NCwgNjIsIAotICAgIDU3LCAxMDYsIDI1MiwgMjUzLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTIsIDYyLCA1NywgMTA2LCAyNTIsIDI1MSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MiwgMjUwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNDksIDYyLCA1NywgMTA2LCAyNTIsIDI0OCwgNjIsIDU3LCAxMDYsIAotICAgIDI1MiwgMjQ3LCAyNDEsIDIxMSwgNjIsIDU3LCAxMDYsIDI1MiwgMjI2LCAyNDQsIDI4LCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAyMjMsIDI1MiwgMTE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTgsIDIxOSwgNSwgNjIsIDU3LCAxMDYsIDI1MiwgMjE3LCA3NCwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMjE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTUsIDIxNywgMjM2LCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAyMTQsIDYyLCA1NywgMTA2LCAyNTIsIDIxMywgNjIsIDU3LCAxMDYsIDI1MiwgMjEyLCAyMTEsIDI1NCwgMjUwLCAxMzksIAotICAgIDYyLCA1NywgMTA2LCAyNTIsIDIxMSwgMjUwLCAxMzksIDYyLCA1NywgMTA2LCAyNTIsIDIxMCwgMjUwLCAxNDAsIDI0MywgCi0gICAgMjU1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDksIDIxMiwgMCwgNjIsIDU3LCAxMDYsIDI1MiwgMjA4LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUyLCAyMDcsIDYyLCA1NywgMjMwLCAxNDIsIDI1MiwgMjA2LCAyNDcsIDE5OCwgNjIsIDU3LCAxMDYsIDI1MiwgMjA1LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUyLCAyMDQsIDYyLCA1NywgMTA2LCAyNTIsIDIwMiwgNjIsIDU3LCAxMDYsIDI1MiwgMjAxLCA2MiwgCi0gICAgNTcsIDEwNiwgMjUyLCAyMDAsIDYyLCA1NywgMTA2LCAyNTIsIDE5OSwgMjQ4LCAxNTksIDYyLCA1NywgMTA2LCAyNTIsIAotICAgIDE5OCwgNjIsIDU3LCAxMDYsIDI1MiwgMTk3LCA2MiwgNTcsIDEwNiwgMjUyLCAxOTYsIDYyLCA1NywgMTA2LCAyNTIsIDE5NSwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMTk0LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MywgMjMsIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyNDYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCi0gICAgMjUyLCAyNDQsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKLSAgICAyNDIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDAsIAotICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzgsIDYyLCA1NywgCi0gICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzYsIDYyLCA1NywgMTA2LCAKLSAgICAyMTMsIDE4NiwgMjUyLCAyMzUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzQsIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyMzMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCi0gICAgMjUyLCAyMzEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKLSAgICAyMjksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjcsIAotICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjQsIDYyLCA1NywgCi0gICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjEsIDYyLCA1NywgMTA2LCAKLSAgICAyMTMsIDE4NiwgMjUyLCAyMjAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMTksIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyMDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAxOTMsIDI1NCwgMjM2LCAyMTEsIDIwOSwgMjIwLCAKLSAgICAxMzgsIDIzMiwgMjEzLCAyNTQsIDIzNiwgMjExLCAyMDksIDIyMCwgMTM4LCAyNDcsIDEyMCwgMjU0LCAyMzYsIDI1MCwgCi0gICAgMTMwLCA3OCwgMjU0LCAyMzYsIDU0LCAxMTAsIDI1NCwgMjM2LCA1NCwgMTA1LCAyNTQsIDIzNiwgNTQsIDE1OCwgMjU0LCAKLSAgICAyMzYsIDU0LCAxNjEsIDI1NCwgMjM2LCA1NCwgMTg5LCAyNTQsIDIzNiwgNTQsIDE5NCwgMjU0LCAyMzYsIDU0LCAxOTgsIAotICAgIDI1NCwgMjM2LCA1NCwgMTk1LCAyNTQsIDIzNiwgNTQsIDIwMCwgMjU0LCAyMzYsIDU0LCAyMTYsIDI0NywgMjU0LCAyMzYsIAotICAgIDU0LCAyMTUsIDczLCAyNTQsIDIzNiwgNTQsIDIxNiwgMTYyLCAyNTQsIDIzNiwgNTQsIDI0NCwgMTUsIDI1NCwgMjM2LCA1NCwgCi0gICAgMjQ0LCAxMTQsIDI1NCwgMjM2LCA1NCwgMjE5LCAxMTEsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMTYsIDI1NCwgMjM2LCA1NCwgCi0gICAgMjQ1LCAxODQsIDI1NCwgMjM2LCA1NCwgMjI4LCAxOTUsIDI1NCwgMjM2LCA1NCwgMTIzLCAyNDAsIDIxMCwgMjU0LCAyMzYsIAotICAgIDU0LCAxMTMsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDEzNCwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjQ0LCAxMSwgCi0gICAgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjE5LCAxMjUsIDI0MCwgCi0gICAgMjEwLCAyNTQsIDIzNiwgNTQsIDIyMCwgMTIyLCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAyNDUsIDE5MywgMjQwLCAyMTAsIAotICAgIDI1NCwgMjM2LCA1NCwgMjI4LCAyMDAsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDEyMywgMjE2LCAxNDcsIDI1NCwgMjM2LCAKLSAgICA1NCwgMTEzLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAxMzQsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgMTEsIAotICAgIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgODEsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIxOSwgMTI1LCAyMTYsIAotICAgIDE0NywgMjU0LCAyMzYsIDU0LCAyMjAsIDEyMiwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ1LCAxOTMsIDIxNiwgMTQ3LCAKLSAgICAyNTQsIDIzNiwgNTQsIDIyOCwgMjAwLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDI1NCwgCi0gICAgMjM2LCA1NCwgMjE1LCA3NCwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjE2LCAxNjMsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgCi0gICAgNTQsIDI0NCwgMTYsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgMTE1LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAKLSAgICAyMTksIDExMiwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMTcsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NSwgCi0gICAgMTg1LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMjgsIDE5NiwgMjE2LCAxNDcsIDI1NCwgMjM2LCAyMTIsIDE0LCAyNTIsIAotICAgIDEyOCwgMjE0LCAxNzMsIDI1NCwgMjM2LCAyMTIsIDE0LCAyNDQsIDkyLCAyMTgsIDU5LCAyNTQsIDIzNiwgMjEyLCAxNCwgCi0gICAgMjIxLCAxNzYsIDIxOCwgNTksIDI1NCwgMjM2LCAyMTIsIDE0LCAyMTYsIDE2OSwgMjE4LCA1OSwgMjU0LCAyMzYsIDIxMiwgCi0gICAgMTQsIDI0NCwgNCwgMjE4LCA1OSwgMjU0LCAyMzYsIDI0NiwgODEsIDIzMSwgOTAsIDI0NCwgOTIsIDIxOCwgNTksIDI1NCwgCi0gICAgMjM2LCAyMzIsIDE5OSwgMjMxLCA5MCwgMjQ0LCA5MiwgMjE4LCA1OSwgMjU0LCAyMzYsIDIzMSwgOTAsIDIyMSwgMTc2LCAKLSAgICAyMTgsIDU5LCAyNTQsIDIzNiwgMjMxLCA5MCwgMjE2LCAxNjksIDIxOCwgNTksIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDIyNCwgMjEsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIDI0MiwgMjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDI0NiwgMTAwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTg5LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTQsIDI2LCAKLSAgICAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDIxNiwgCi0gICAgMTQ3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTUsIDIxNiwgMTQ3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAKLSAgICA4MSwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIAotICAgIDE5NCwgMjQ0LCAxMTUsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIDI0MCwgMjExLCAyMTcsIDY3LCAyNiwgCi0gICAgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjQwLCAyMTEsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDIxNiwgMTQ4LCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjE2LCAxNDgsIDIxNywgNjcsIDI2LCAKLSAgICAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMTgsIAotICAgIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgMTE1LCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgCi0gICAgMjQwLCAyMTEsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjQwLCAyMTEsIDIxOCwgMTUwLCAKLSAgICAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAyMTYsIDE0OCwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyMTYsIAotICAgIDI0OCwgMjE2LCAxNDgsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTUsIDIxNiwgMTQ4LCAyMTgsIAotICAgIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMzAsIDE2NCwgMjYsIDI1NSwgNiwgMjQxLCAyMDUsIDEyMywgCi0gICAgMjI1LCAzMSwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDExMCwgMjYsIDI1NSwgNiwgMjQxLCAyMDEsIDExMCwgMjYsIDI1NSwgCi0gICAgNiwgMjQ1LCAxMDQsIDEwNSwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDEwNSwgMjYsIDI1NSwgNiwgMjQ5LCA2NSwgMTEzLCAKLSAgICAyNDYsIDk5LCAyNiwgMjU1LCA2LCAyNDUsIDEwNCwgMTEzLCAyNDYsIDk5LCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMTg5LCAKLSAgICAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAyMTYsIDI0OCwgMjU0LCAxNDEsIAotICAgIDE3LCAyNiwgMjU1LCA2LCAyNDEsIDIwMSwgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIzMSwgNDEsIDIxNiwgMjQ3LCAyNiwgCi0gICAgMjU1LCA2LCAyMTYsIDE4MSwgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAyMTYsIDE2MiwgMjYsIDI1NSwgNiwgCi0gICAgMjE1LCAyMDMsIDI0NCwgMTE0LCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjQ0LCAxMTUsIDI1NCwgMTQxLCAxNywgMjYsIAotICAgIDI1NSwgNiwgMjQxLCAyMDEsIDI0NCwgMTE0LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMjQ0LCAxMTQsIDI2LCAyNTUsIDYsIAotICAgIDIxNiwgMTgxLCAxMjMsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMTM0LCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgCi0gICAgMjQ1LCAxMDQsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAKLSAgICAyNTUsIDYsIDIxNiwgMTgxLCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjUwLCAyMjcsIDI0NCwgODEsIDI0MCwgCi0gICAgMjEwLCAyNiwgMjU1LCA2LCAyMjksIDE4MiwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAxMjMsIAotICAgIDIxNiwgMTQ3LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMjQ0LCA4MSwgMjE2LCAxNDcsIDI2LCAyNTUsIDYsIDI0OCwgNTcsIAotICAgIDI0NCwgODEsIDIzMCwgMTY0LCAyNiwgMjU1LCA2LCAyMTgsIDExOCwgMjQ0LCAxMTUsIDIzMCwgMTY0LCAyNiwgMTIzLCAKLSAgICAxNjMsIDUwLCAyNiwgMTIzLCAxNjMsIDUsIDI1NCwgMTQxLCAxNywgMjYsIDExMywgMjE2LCAxNjcsIDUwLCAyNiwgMTM0LCAKLSAgICAyMjQsIDIwLCA1MCwgMjYsIDIxMSwgNDUsIDUwLCAyNiwgMjE3LCA2OCwgNTAsIDI2LCAyNDYsIDEwMSwgNTAsIDI2LCAyMjYsIAotICAgIDI0NiwgNTAsIDI2LCAxMTMsIDIyNiwgMjQ1LCA1MCwgMjYsIDEzNCwgMjI2LCAyNDUsIDUwLCAyNiwgMjQ0LCAxMSwgMjI2LCAKLSAgICAyNDUsIDUwLCAyNiwgMjQ0LCA4MSwgMjI2LCAyNDUsIDUwLCAyNiwgMjMxLCAzNSwgNTAsIDI2LCAyMzMsIDE1NywgMjUyLCAKLSAgICAxMjgsIDUwLCAyNiwgMjMyLCAxOTQsIDUwLCAyNiwgMjI2LCAxMzEsIDUwLCAyNiwgMjExLCAxNTksIDUwLCAyNiwgMjUzLCAKLSAgICAyNDMsIDUwLCAyNiwgMjU0LCAwLCA1MCwgMjYsIDI0MiwgMTQ0LCA1MCwgMjYsIDIxNSwgMTg2LCAyNTIsIDEyOCwgNTAsIAotICAgIDI2LCAyMTAsIDg3LCA1MCwgMjIyLCAxOTgsIDIyMCwgMTEzLCA1MCwgMjIyLCAxOTgsIDIxNCwgMTg1LCA1MCwgMjIyLCAKLSAgICAxOTgsIDIyMCwgMTQyLCA1MCwgMjIyLCAxOTgsIDIyMCwgMTExLCA1MCwgMjIyLCAxOTgsIDI0NywgMjEzLCAyMjAsIDExMSwgCi0gICAgNTAsIDIyMiwgMTk4LCAyMTksIDE2OCwgNTAsIDIyMiwgMTk4LCAyNDgsIDUzLCA1MCwgMjIyLCAxOTgsIDIyNCwgNiwgNTAsIAotICAgIDIyMiwgMTk4LCAyMjAsIDEyOSwgNTAsIDIyMiwgMTk4LCAyNDYsIDYwLCA1MCwgMjIyLCAxOTgsIDI1MywgMjM4LCA1MCwgCi0gICAgMjIyLCAxOTgsIDI1MCwgMTcxLCA1MCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjUsIDIxMywgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyMjUsIDI0LCAyNDEsIDIzNSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTcsIDQ1LCAyNDEsIDIzNSwgMjI1LCAKLSAgICAxNDMsIDI0NywgMTkxLCA1LCAyNTAsIDI0NywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTAsIDEwMSwgMjI1LCAxNDMsIAotICAgIDI0NywgMTkxLCA1LCAyMTEsIDIyMSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDEsIDIxMSwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyNDMsIDg1LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxNiwgMTE2LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDc0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MSwgMTY5LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyMCwgMjksIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjQ5LCAyNDQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjMxLCAxODQsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjMxLCAxMzYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjIxLCAyMTYsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjMyLCAyMzcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUxLCAxODgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgCi0gICAgMjUwLCAyMzEsIDIyNSwgMzUsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ3LCAxMzMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgCi0gICAgNSwgMjQ5LCAyMjMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE5LCA4NywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDksIAotICAgIDIyNCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTIsIDYzLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyMCwgMTYsIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjQwLCAyNDgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQxLCAxNzgsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjUxLCAxMTIsIDIzMywgMzYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUwLCAyMjQsIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjIzLCAxNTMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ1LCAyMzAsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjQ2LCAxMDcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE1LCAxMDUsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjUyLCA2NiwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjUsIDM2LCAyMTUsIDIzNSwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyMTMsIDE1OSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjYsIDE4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDIyMiwgMTkwLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIzMiwgMjI0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyNiwgCi0gICAgMTE1LCAyNTIsIDE4NCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDQsIDQ4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDI0MiwgMTM4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxOCwgMTE5LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDQsIDI1MywgCi0gICAgMTY4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxMiwgMzIsIDI1MiwgMTQ4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDM4LCAKLSAgICAyMjYsIDI0OCwgOTEsIDIzMiwgNjAsIDEsIDYxLCAyMzIsIDYwLCAxLCA3NSwgMjMyLCA2MCwgMSwgMjUzLCAxNTgsIDIzMiwgCi0gICAgNjAsIDEsIDI1MiwgMTksIDIzMiwgNjAsIDEsIDI0MywgMjAyLCAyMzIsIDYwLCAxLCAyNDksIDYwLCAyMzIsIDYwLCAxLCAKLSAgICA3MywgMjMyLCA2MCwgMSwgMjEyLCA5OCwgMjMyLCA2MCwgMSwgMjEwLCAxNTksIDIzMiwgNjAsIDEsIDIxNiwgMjEwLCAyMzIsIAotICAgIDYwLCAxLCAyMzUsIDE0NCwgMjMyLCA2MCwgMSwgMjM1LCAyMywgMjMyLCA2MCwgMSwgMjI0LCA5NiwgMjMyLCA2MCwgMSwgCi0gICAgMTU2LCAyMzIsIDYwLCAxLCAxOTMsIDIzMiwgNjAsIDEsIDIzMCwgMjUsIDIzMiwgNjAsIDEsIDIzMCwgMTY2LCAyMzIsIDYwLCAKLSAgICAxLCAyMjgsIDExMSwgMjMyLCA2MCwgMSwgNzAsIDIzMiwgNjAsIDEsIDIyNiwgMTA1LCAyMzIsIDYwLCAxLCAyMzQsIDQ3LCAKLSAgICAyMzIsIDYwLCAxLCAxNTMsIDIzMiwgNjAsIDEsIDIyMiwgOTEsIDIzMiwgNjAsIDEsIDIxNywgMTUyLCAyMzIsIDYwLCAxLCAKLSAgICAyMTUsIDE1OSwgMjMyLCA2MCwgMSwgMjU0LCAxMjMsIDIzMiwgNjAsIDEsIDI0NSwgMTUwLCAyMzIsIDYwLCAxLCAyNDIsIAotICAgIDYwLCAyMzIsIDYwLCAxLCAyMTEsIDE3OCwgMjUwLCAyMzcsIDEsIDYxLCAyNTAsIDIzNywgMSwgMjI2LCA5MSwgMjUwLCAKLSAgICAyMzcsIDEsIDI0OSwgNjAsIDI1MCwgMjM3LCAxLCAxNTYsIDI1MCwgMjM3LCAxLCAyMTQsIDExNiwgMjUwLCAyMzcsIDEsIAotICAgIDE1MywgMjUwLCAyMzcsIDEsIDIzMywgNjIsIDI1MCwgMjM3LCAxLCAyNTUsIDc1LCAyNTAsIDIzNywgMSwgMjI0LCA5NiwgCi0gICAgMjUwLCAyMzcsIDEsIDI1MywgMTU4LCAyNTAsIDIzNywgMSwgMTkzLCAyNTAsIDIzNywgMSwgNzYsIDI1MCwgMjM3LCAxLCAKLSAgICAyNDgsIDIyMywgMjUwLCAyMzcsIDEsIDIxNywgMTUyLCAyNTAsIDIzNywgMSwgMjIwLCAxMDQsIDI1MCwgMjM3LCAxLCAyMjAsIAotICAgIDEwMywgMjUwLCAyMzcsIDEsIDIyMiwgOTEsIDI1MCwgMjM3LCAxLCAyNTEsIDY1LCAyNTAsIDIzNywgMSwgNzAsIDI1MCwgCi0gICAgMjM3LCAxLCAyMjgsIDExMSwgMjUwLCAyMzcsIDEsIDIxMSwgMTc4LCAyNTAsIDIzNywgMSwgMjMwLCAyNSwgMjUwLCAyMzcsIAotICAgIDEsIDIxNSwgMTU4LCAyNTAsIDIzNywgMSwgMjI2LCAxMDUsIDI1MCwgMjM3LCAxLCAyMTgsIDIyNiwgMjUwLCAyMzcsIDEsIAotICAgIDczLCAyNTAsIDIzNywgMSwgNzUsIDI1MCwgMjM3LCAxLCAyMTQsIDExMywgMjUwLCAyMzcsIDEsIDIzNSwgMjMsIDI1MCwgCi0gICAgMjM3LCAxLCAyMzUsIDE0LCAyNTAsIDIzNywgMSwgMjI5LCAxNTAsIDI1MCwgMjM3LCAxLCAyMTQsIDExOCwgMjUwLCAyMzcsIAotICAgIDEsIDI0MywgMjAyLCAyNTAsIDIzNywgMSwgMjQzLCAxMzcsIDI1MCwgMjM3LCAxLCAyMTgsIDE2OCwgMjUwLCAyMzcsIDEsIAotICAgIDIxOCwgMTY3LCAyNTAsIDIzNywgMSwgMjI5LCA3OSwgMjUwLCAyMzcsIDEsIDIzNiwgMzMsIDI1MCwgMjM3LCAxLCAyNTEsIAotICAgIDY0LCAyNTAsIDIzNywgMSwgMjE1LCAxNTksIDI1MCwgMjM3LCAxLCAyMTQsIDExNSwgMjUwLCAyMzcsIDEsIDIyMiwgMTgwLCAKLSAgICAyNTAsIDIzNywgMSwgMjMxLCAxMjksIDI1MCwgMjM3LCAxLCAyMzEsIDEyOCwgMjUwLCAyMzcsIDEsIDIzMSwgMTI3LCAyNTAsIAotICAgIDIzNywgMSwgMjMxLCAxMjYsIDI1MCwgMjM3LCAxLCAyMzMsIDYxLCAyNTAsIDIzNywgMSwgMjQ1LCAyMzQsIDI1MCwgMjM3LCAKLSAgICAxLCAyMTQsIDExNCwgNTUsIDMyLCAxLCA2MSwgNTUsIDMyLCAxLCAyNTIsIDc1LCA1NSwgMzIsIDEsIDIzNCwgMTgyLCA1NSwgCi0gICAgMzIsIDEsIDI0OCwgOTAsIDU1LCAzMiwgMSwgNzUsIDU1LCAzMiwgMSwgMjEzLCAyNTUsIDU1LCAzMiwgMSwgMjEwLCA5NCwgCi0gICAgNTUsIDMyLCAxLCAyNDEsIDIzOCwgNTUsIDMyLCAxLCAyMTYsIDE5NSwgNTUsIDMyLCAxLCA3MywgNTUsIDMyLCAxLCAxNzYsIAotICAgIDU1LCAzMiwgMSwgMjQ1LCAxNzQsIDU1LCAzMiwgMSwgMjQ1LCAxNTksIDU1LCAzMiwgMSwgMjQ1LCAxNTAsIDU1LCAzMiwgMSwgCi0gICAgMjQ1LCA3NSwgNTUsIDMyLCAxLCA3NiwgNTUsIDMyLCAxLCAyMjUsIDIyMSwgNTUsIDMyLCAxLCAyMjAsIDYzLCA1NSwgMzIsIAotICAgIDEsIDIzMywgMjE3LCA1NSwgMzIsIDEsIDI0NSwgOTIsIDU1LCAzMiwgMSwgMjQ1LCA4MiwgNTUsIDMyLCAxLCAyMTcsIDIyLCAKLSAgICA1NSwgMzIsIDEsIDcwLCA1NSwgMzIsIDEsIDI0NSwgMTc3LCA1NSwgMzIsIDEsIDIyNSwgMTM2LCA1NSwgMzIsIDEsIDIzNCwgCi0gICAgMTE5LCA1NSwgMzIsIDEsIDI0NSwgMjAyLCA1NSwgMzIsIDEsIDI0NSwgODQsIDU1LCAzMiwgMSwgMjUwLCAxMzEsIDU1LCAKLSAgICAzMiwgMSwgMjM2LCAzMywgNTUsIDMyLCAxLCAyMTQsIDExOCwgNTUsIDMyLCAyMjcsIDE5OCwgMTEwLCA1NSwgMzIsIDIyNywgCi0gICAgMTk4LCAxODksIDU1LCAzMiwgMjI3LCAxOTgsIDIxNiwgMjQ3LCA1NSwgMzIsIDIyNywgMTk4LCAyNDQsIDExNCwgMjQyLCAKLSAgICAxNTMsIDEsIDI1NCwgMjA0LCAyNDIsIDE1MywgMSwgMjUyLCAxNjMsIDI0MiwgMTUzLCAxLCAyNDIsIDIxMSwgMjQyLCAxNTMsIAotICAgIDEsIDI0OCwgMjA0LCAyNDIsIDE1MywgMSwgMjU0LCAyMDAsIDI0MiwgMTUzLCAxLCAyMjQsIDc5LCAyNDIsIDE1MywgMSwgCi0gICAgMjM1LCAxNTUsIDI0MiwgMTUzLCAxLCAyNDIsIDM5LCAyNDIsIDE1MywgMSwgMjE2LCAxNTgsIDI0MiwgMTUzLCAxLCAyNDUsIAotICAgIDE4MywgMjQyLCAxNTMsIDEsIDIzMywgMTkwLCAyNDIsIDE1MywgMSwgMjMzLCAxMTMsIDI0MiwgMTUzLCAxLCAyMzEsIDE3OSwgCi0gICAgMjQyLCAxNTMsIDEsIDIyOSwgMTg0LCAyNDIsIDE1MywgMSwgMjM1LCAxMTksIDI0MiwgMTUzLCAxLCAyMTQsIDEzNiwgMjQyLCAKLSAgICAxNTMsIDEsIDIyNiwgNjksIDI0MiwgMTUzLCAxLCAyMjgsIDE5NSwgMjQyLCAxNTMsIDEsIDIyMywgMTY1LCAyNDIsIDE1MywgCi0gICAgMSwgMjIxLCAyMTgsIDI0MiwgMTUzLCAxLCAyMTcsIDQsIDI0MiwgMTUzLCAxLCAyMTEsIDIzNCwgMjQyLCAxNTMsIDEsIAotICAgIDI0NCwgMTc4LCAyNDIsIDE1MywgMSwgMjM2LCAzNywgMjQyLCAxNTMsIDEsIDI0MCwgMTk5LCAyNDIsIDE1MywgMSwgMjI2LCAKLSAgICAxMzksIDI0MiwgMTUzLCAxLCAyMjgsIDIwMCwgMjQwLCAyMTAsIDIxNCwgMjA5LCAxLCAyNTQsIDE0NywgMjE0LCAyMDksIDEsIAotICAgIDI1MiwgMjYsIDIxNCwgMjA5LCAxLCAyNDMsIDEwOCwgMjE0LCAyMDksIDEsIDIzNCwgMTMyLCAyMTQsIDIwOSwgMSwgMjQ4LCAKLSAgICA1NCwgMjE0LCAyMDksIDEsIDI0MSwgNjgsIDIxNCwgMjA5LCAxLCAyMTEsIDIyNywgMjE0LCAyMDksIDEsIDIxMCwgODUsIAotICAgIDIxNCwgMjA5LCAxLCAyNDAsIDI0MSwgMjE0LCAyMDksIDEsIDIxNiwgMjMwLCAyMTQsIDIwOSwgMSwgMjEwLCAyMzMsIDIxNCwgCi0gICAgMjA5LCAxLCAyMzQsIDI1MCwgMjE0LCAyMDksIDEsIDIyMCwgMjAsIDIxNCwgMjA5LCAxLCAyMzMsIDk4LCAyMTQsIDIwOSwgCi0gICAgMSwgMjMxLCA2NSwgMjE0LCAyMDksIDEsIDI0OCwgMjEsIDIxNCwgMjA5LCAxLCAyMjcsIDE5NCwgMjE0LCAyMDksIDEsIAotICAgIDIxMCwgMTMsIDIxNCwgMjA5LCAxLCAyMjEsIDI0OCwgMjE0LCAyMDksIDEsIDI1NCwgMTk2LCAyMTQsIDIwOSwgMSwgMjI0LCAKLSAgICAxNTAsIDIxNCwgMjA5LCAxLCAyMjIsIDI1LCAyMTQsIDIwOSwgMSwgMjI0LCAzNSwgMjE0LCAyMDksIDEsIDIyMywgMTQ0LCAKLSAgICAyMTQsIDIwOSwgMSwgMjE2LCAxOTksIDIxNCwgMjA5LCAxLCAyNDIsIDI0NCwgMjE0LCAyMDksIDEsIDExMSwgMjE0LCAyMDksIAotICAgIDEsIDczLCAyMTQsIDIwOSwgMSwgNzAsIDIxNCwgMjA5LCAxLCAyMTgsIDE3OSwgMjE0LCAyMDksIDIxMSwgMjA5LCAyNDcsIAotICAgIDE3MiwgNTUsIDIyNSwgMTY5LCA1LCA2MSwgNTUsIDIyNSwgMTY5LCA1LCA3MywgNTUsIDIyNSwgMTY5LCA1LCA3MCwgNTUsIAotICAgIDIyNSwgMTY5LCA1LCAxNzYsIDU1LCAyMjUsIDE2OSwgNSwgMjMzLCAyMTcsIDU1LCAyMjUsIDE2OSwgNSwgMjQzLCAxMzUsIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjQyLCAxMTMsIDU1LCAyMjUsIDE2OSwgNSwgMjExLCAxNjUsIDU1LCAyMjUsIDE2OSwgNSwgCi0gICAgMjUxLCAzMywgNTUsIDIyNSwgMTY5LCA1LCAyMzUsIDE0MSwgNTUsIDIyNSwgMTY5LCA1LCAyMzUsIDEwOCwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAyMTcsIDEwNSwgNTUsIDIyNSwgMTY5LCA1LCAyMTUsIDExOCwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDIyMSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDMsIDU1LCAyMjUsIDE2OSwgNSwgMjQ2LCA3OCwgNTUsIDIyNSwgMTY5LCA1LCAyMTYsIAotICAgIDIwOCwgNTUsIDIyNSwgMTY5LCA1LCAxOTAsIDU1LCAyMjUsIDE2OSwgNSwgMjUyLCAxOTEsIDU1LCAyMjUsIDE2OSwgNSwgCi0gICAgMjQ0LCAxOTYsIDU1LCAyMjUsIDE2OSwgNSwgMTk3LCA1NSwgMjI1LCAxNjksIDUsIDIyNywgMjM3LCA1NSwgMjI1LCAxNjksIAotICAgIDUsIDE4NCwgNTUsIDIyNSwgMTY5LCA1LCAyMzAsIDIzMCwgNTUsIDIyNSwgMTY5LCA1LCAyMzAsIDEwMiwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAxOTEsIDU1LCAyMjUsIDE2OSwgNSwgMjE0LCAyNywgNTUsIDIyNSwgMTY5LCA1LCAyMTMsIDE3NiwgNTUsIAotICAgIDIyNSwgMTY5LCA1LCAyMDUsIDU1LCAyMjUsIDE2OSwgNSwgMjIyLCAxNDAsIDU1LCAyMjUsIDE2OSwgNSwgMjMzLCAxMzUsIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjA2LCA1NSwgMjI1LCAxNjksIDUsIDIxMCwgMTE2LCA1NSwgMjI1LCAxNjksIDUsIDIyMCwgCi0gICAgMTAyLCA1NSwgMjI1LCAxNjksIDUsIDIxOCwgMjIzLCA1NSwgMjI1LCAxNjksIDUsIDE2MiwgNTUsIDIyNSwgMTY5LCA1LCAKLSAgICAyNTMsIDE4NiwgNTUsIDIyNSwgMTY5LCA1LCAyNTMsIDE4NSwgNTUsIDIyNSwgMTY5LCA1LCAyNTMsIDE4NCwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAyMTEsIDE0MiwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDIwMCwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDE5OSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyNTIsIDE3MCwgNTUsIDIyNSwgMTY5LCA1LCAyNTEsIDg1LCA1NSwgMjI1LCAxNjksIDIxMSwgCi0gICAgMjA5LCAyNDcsIDE3MiwgNTUsIDIyNSwgMTY5LCA1NCwgMTEwLCA1NSwgMjI1LCAxNjksIDU0LCAxMDUsIDU1LCAyMjUsIAotICAgIDE2OSwgNTQsIDIxNiwgMjQ3LCA1NSwgMjI1LCAxNjksIDU0LCAyMTUsIDczLCA1NSwgMjI1LCAxNjksIDU0LCAyNDAsIDIxMCwgCi0gICAgMTgxLCA2LCAxLCAxOTksIDczLCAxODEsIDYsIDEsIDE5OSwgNzUsIDE4MSwgNiwgMSwgMTk5LCA2MSwgMTgxLCA2LCAxLCAKLSAgICAxOTksIDI1NCwgMjA5LCAxODEsIDYsIDEsIDE5OSwgNzYsIDE4MSwgNiwgMSwgMTk5LCAyMjYsIDE4MywgMTgxLCA2LCAxLCAKLSAgICAyMTksIDI1MSwgNzMsIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDc1LCAxODEsIDYsIDEsIDIxOSwgMjUxLCA2MSwgMTgxLCA2LCAKLSAgICAxLCAyMTksIDI1MSwgMjU0LCAyMDksIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDc2LCAxODEsIDYsIDEsIDIxOSwgMjUxLCAyMjYsIAotICAgIDE4MywgMTgxLCA2LCAxLCAyNTMsIDE2NywgMTgxLCA2LCAxLCAyMjYsIDExNiwgMTgxLCA2LCAxLCAyMTEsIDE5NSwgMTgxLCAKLSAgICA2LCAxLCAyMTEsIDQ0LCAxODEsIDYsIDEsIDI0MiwgNjAsIDE4MSwgNiwgMSwgMjI1LCAyMTEsIDE4MSwgNiwgMSwgMjUyLCAKLSAgICA2NiwgMTgxLCA2LCAxLCAyMTcsIDExLCAxODEsIDYsIDEsIDI0OCwgNzcsIDE4MSwgNiwgMSwgMjUwLCAxMjgsIDE4MSwgNiwgCi0gICAgMSwgMjM1LCAxMjQsIDE4MSwgNiwgMSwgMjM0LCAxODksIDE4MSwgNiwgMSwgMjQzLCA4MywgMTgxLCA2LCAxLCAyNDUsIAotICAgIDIwMiwgMTgxLCA2LCAxLCAyMTMsIDI1MCwgMTgxLCA2LCAxLCAyNDUsIDU5LCAxODEsIDYsIDEsIDIxNiwgMTk0LCAxODEsIAotICAgIDYsIDEsIDI0NSwgODIsIDE4MSwgNiwgMSwgMjEwLCA5MiwgMTgxLCA2LCAxLCAyNDUsIDc1LCAxODEsIDYsIDEsIDIxMCwgCi0gICAgNzMsIDE4MSwgNiwgMSwgMjQ1LCA5MiwgMTgxLCA2LCAxLCAyNDUsIDE3NCwgMTgxLCA2LCAxLCAyNDUsIDE1OSwgMTgxLCA2LCAKLSAgICAxLCAyNDUsIDE1MCwgMTgxLCA2LCAxLCAyNDUsIDEzOCwgMTgxLCA2LCAxLCAyMjYsIDIxOSwgMTgxLCA2LCAxLCAyNDUsIAotICAgIDM4LCAxODEsIDQsIDEsIDE5OSwgNzMsIDE4MSwgNCwgMSwgMTk5LCA3NSwgMTgxLCA0LCAxLCAxOTksIDYxLCAxODEsIDQsIAotICAgIDEsIDE5OSwgMjU0LCAyMDksIDE4MSwgNCwgMSwgMTk5LCA3NiwgMTgxLCA0LCAxLCAxOTksIDIyNiwgMTgzLCAxODEsIDQsIAotICAgIDEsIDIxOSwgMjUxLCA3MywgMTgxLCA0LCAxLCAyMTksIDI1MSwgNzUsIDE4MSwgNCwgMSwgMjE5LCAyNTEsIDYxLCAxODEsIAotICAgIDQsIDEsIDIxOSwgMjUxLCAyNTQsIDIwOSwgMTgxLCA0LCAxLCAyMTksIDI1MSwgNzYsIDE4MSwgNCwgMSwgMjE5LCAyNTEsIAotICAgIDIyNiwgMTgzLCAxODEsIDQsIDEsIDI1MywgMTY3LCAxODEsIDQsIDEsIDIyNiwgMTE2LCAxODEsIDQsIDEsIDIxMSwgMTk1LCAKLSAgICAxODEsIDQsIDEsIDIxMSwgNDQsIDE4MSwgNCwgMSwgMjQyLCA2MCwgMTgxLCA0LCAxLCAyMjUsIDIxMSwgMTgxLCA0LCAxLCAKLSAgICAyNTIsIDY2LCAxODEsIDQsIDEsIDIxNywgMTEsIDE4MSwgNCwgMSwgMjQ4LCA3NywgMTgxLCA0LCAxLCAyNTAsIDEyOCwgCi0gICAgMTgxLCA0LCAxLCAyMzUsIDEyNCwgMTgxLCA0LCAxLCAyMzQsIDE4OSwgMTgxLCA0LCAxLCAyNDMsIDgzLCAxODEsIDQsIDEsIAotICAgIDI0NSwgMjAyLCAxODEsIDQsIDEsIDIxMywgMjUwLCAxODEsIDQsIDEsIDI0NSwgNTksIDE4MSwgNCwgMSwgMjE2LCAxOTQsIAotICAgIDE4MSwgNCwgMSwgMjQ1LCA4MiwgMTgxLCA0LCAxLCAyMTAsIDkyLCAxODEsIDQsIDEsIDI0NSwgNzUsIDE4MSwgNCwgMSwgCi0gICAgMjEwLCA3MywgMTgxLCA0LCAxLCAyNDUsIDkyLCAxODEsIDQsIDEsIDI0NSwgMTc0LCAxODEsIDQsIDEsIDI0NSwgMTU5LCAKLSAgICAxODEsIDQsIDEsIDI0NSwgMTUwLCAxODEsIDQsIDEsIDI0NSwgMTM4LCAxODEsIDQsIDEsIDIyNiwgMjE5LCAxODEsIDQsIDEsIAotICAgIDI0NSwgMzgsIDIyMCwgNjksIDEsIDIyNSwgMjA5LCAyMjAsIDY5LCAxLCAyMTYsIDUsIDIyMCwgNjksIDEsIDIzNCwgOTEsIAotICAgIDIyMCwgNjksIDEsIDI0NCwgMTQ3LCAyMjAsIDY5LCAxLCAyMTYsIDE3MiwgMjIwLCA2OSwgMSwgMjE5LCA1OCwgMjIwLCA2OSwgCi0gICAgMSwgMjE4LCAxNCwgMjIwLCA2OSwgMSwgMjUwLCA2MSwgMjIwLCA2OSwgMSwgMjExLCA0NiwgMjIwLCA2OSwgMSwgMjQwLCAKLSAgICAyMDksIDIyMCwgNjksIDEsIDI1MiwgNSwgMjIwLCA2OSwgMSwgMjQ4LCA4OSwgMjIwLCA2OSwgMSwgMjQzLCAxMjEsIDIyMCwgCi0gICAgNjksIDEsIDIxMywgMTIzLCAyMjAsIDY5LCAxLCAyMTYsIDE3NiwgMjIwLCA2OSwgMSwgMjEwLCAyMSwgMjIwLCA2OSwgMSwgCi0gICAgMjMxLCA4OSwgMjIwLCA2OSwgMSwgMjM1LCA0OSwgMjIwLCA2OSwgMSwgMjExLCAyMjUsIDIyMCwgNjksIDEsIDI0MiwgNDgsIAotICAgIDIyMCwgNjksIDEsIDIzMiwgMTQyLCAyMjAsIDY5LCAxLCAyMzAsIDE4OSwgMjIwLCA2OSwgMSwgMjM2LCA0MCwgMjIwLCA2OSwgCi0gICAgMSwgMjQ1LCAyMDEsIDIyMCwgNjksIDEsIDI1MywgMjMxLCAyMjAsIDY5LCAxLCAyNTQsIDI0NywgMjIwLCA2OSwgMSwgMjI2LCAKLSAgICAxOTYsIDIyMCwgNjksIDEsIDIxMSwgMjEyLCAyMjAsIDY5LCAxLCAyMjYsIDEzMCwgMjIwLCA2OSwgMSwgMjU0LCAyMDksIAotICAgIDIyMCwgNjksIDEsIDIyMiwgMjA4LCAyMjAsIDY5LCAxLCAyMjcsIDE5NCwgMjIwLCA2OSwgMSwgMjQ1LCAyMTcsIDIyMCwgCi0gICAgNjksIDEsIDI1NCwgMjE0LCAyMjAsIDY5LCAxLCAyNDAsIDExMSwgMjIwLCA2OSwgMSwgMjE0LCAxNjMsIDIyMCwgNjksIDEsIAotICAgIDIyNiwgMjU0LCAyMjAsIDY5LCAxLCAyMjYsIDE3NiwgMjIwLCA2OSwgMSwgMjI2LCAyMTgsIDIyMCwgNjksIDEsIDI1MywgCi0gICAgMTcwLCAyMjAsIDY5LCAxLCAyNTQsIDE5LCAyMjAsIDY5LCAxLCAyMjYsIDE1OCwgMjIwLCA2OSwgMSwgMjU0LCAxOTIsIAotICAgIDIyMCwgNjksIDEsIDI0NSwgODYsIDIyMCwgNjksIDEsIDI1MywgMjUzLCAyMjAsIDY5LCAxLCAyNDUsIDIyNywgMjIwLCA2OSwgCi0gICAgMSwgMjQwLCAxMTgsIDIyMCwgNjksIDEsIDIxMSwgMTMsIDIyNiwgMTQxLCAxLCAyNTQsIDE3MCwgMjI2LCAxNDEsIDEsIAotICAgIDI1MiwgMTkxLCAyMjYsIDE0MSwgMSwgMjE3LCAxMDUsIDIyNiwgMTQxLCAxLCAyMzUsIDE0MSwgMjI2LCAxNDEsIDEsIDIxMSwgCi0gICAgMTY1LCAyMjYsIDE0MSwgMSwgMjM0LCAxMzIsIDIyNiwgMTQxLCAxLCAyNDgsIDc2LCAyMjYsIDE0MSwgMSwgMjA1LCAyMjYsIAotICAgIDE0MSwgMSwgMjA2LCAyMjYsIDE0MSwgMSwgMjIwLCAyNiwgMjI2LCAxNDEsIDEsIDI0OCwgMjUsIDIyNiwgMTQxLCAxLCAKLSAgICAyNTAsIDIxNSwgMjI2LCAxNDEsIDEsIDI0MywgMTM1LCAyMjYsIDE0MSwgMSwgMjQ0LCAxOTYsIDIyNiwgMTQxLCAxLCAyMjQsIAotICAgIDg2LCAyMjYsIDE0MSwgMSwgMjM1LCA5LCAyMjYsIDE0MSwgMSwgMjMzLCAxMzAsIDIyNiwgMTQxLCAxLCAyMzAsIDIwMCwgCi0gICAgMjI2LCAxNDEsIDEsIDIyNywgMTc4LCAyMjYsIDE0MSwgMSwgMjEyLCAzMCwgMjI2LCAxNDEsIDEsIDE2MiwgMjI2LCAxNDEsIAotICAgIDEsIDE5MSwgMjI2LCAxNDEsIDEsIDYxLCAyMjYsIDE0MSwgMSwgNzUsIDIyNiwgMTQxLCAxLCA3MywgMjI2LCAxNDEsIDEsIAotICAgIDc2LCAyMjYsIDE0MSwgMSwgNzAsIDIyNiwgMTQxLCAxLCAyNTUsIDczLCAyMjYsIDE0MSwgMSwgMjQ1LCAyMDksIDIyNiwgCi0gICAgMTQxLCAxLCAyMjYsIDE4MywgMjI2LCAxNDEsIDIxLCAyMTAsIDg2LCAyMjYsIDE0MSwgMjEsIDExMCwgMjI2LCAxNDEsIDIxLCAKLSAgICAxMDUsIDIyNiwgMTQxLCAyMSwgMTU4LCAyMjYsIDE0MSwgMjEsIDE2MSwgMjI2LCAxNDEsIDIxLCAxODksIDIyNiwgMTQxLCAKLSAgICAyMSwgMTk0LCAyMjYsIDE0MSwgMjEsIDE5OCwgMjI2LCAxNDEsIDIxLCAxOTUsIDIyNiwgMTQxLCAyMSwgMjAwLCAyNDksIAotICAgIDY3LCAzLCA2MSwgMjQ5LCA2NywgMywgNzUsIDI0OSwgNjcsIDMsIDczLCAyNDksIDY3LCAzLCA3NiwgMjQ5LCA2NywgMywgCi0gICAgNzAsIDI0OSwgNjcsIDMsIDIzNSwgMTQxLCAyNDksIDY3LCAzLCAyMzUsIDY4LCAyNDksIDY3LCAzLCAxNzYsIDI0OSwgNjcsIAotICAgIDMsIDIzNCwgMTgyLCAyNDksIDY3LCAzLCAyMzQsIDkyLCAyNDksIDY3LCAzLCAyMzQsIDI4LCAyNDksIDY3LCAzLCAyMzMsIAotICAgIDIxNywgMjQ5LCA2NywgMywgMjMzLCAxMzUsIDI0OSwgNjcsIDMsIDIzMywgNTgsIDI0OSwgNjcsIDMsIDIzMiwgMjQxLCAKLSAgICAyNDksIDY3LCAzLCAyMzIsIDE1NiwgMjQ5LCA2NywgMywgMjMyLCA5OCwgMjQ5LCA2NywgMywgMTg0LCAyNDksIDY3LCAzLCAKLSAgICAyMzEsIDkxLCAyNDksIDY3LCAzLCAyMzAsIDIzMCwgMjQ5LCA2NywgMywgMjMwLCAxNjEsIDI0OSwgNjcsIDMsIDIzMCwgCi0gICAgMTAyLCAyNDksIDY3LCAzLCAxOTcsIDI0OSwgNjcsIDMsIDIyOSwgMTA3LCAyNDksIDY3LCAzLCAyMjgsIDIzMywgMjQ5LCAKLSAgICA2NywgMywgMjI4LCA3NCwgMjQ5LCA2NywgMywgMjI3LCAyMzcsIDI0OSwgNjcsIDMsIDE5MCwgMjQ5LCA2NywgMywgMjI1LCAKLSAgICAyMjEsIDI0OSwgNjcsIDMsIDIyNSwgMTA4LCAyNDksIDY3LCAzLCAyMjUsIDE2LCAyNDksIDY3LCAzLCAyMjQsIDE1MCwgCi0gICAgMjQ5LCA2NywgMywgMjA1LCAyNDksIDY3LCAzLCAyMjMsIDEyOCwgMjQ5LCA2NywgMywgMjIzLCAzNSwgMjQ5LCA2NywgMywgCi0gICAgMjIyLCAyMTEsIDI0OSwgNjcsIDMsIDIyMiwgMTQwLCAyNDksIDY3LCAzLCAyMDYsIDI0OSwgNjcsIDMsIDIyMSwgMTgxLCAKLSAgICAyNDksIDY3LCAzLCAyMTksIDE5MSwgMjQ5LCA2NywgMywgMjE5LCA1OCwgMjQ5LCA2NywgMywgMjE4LCA4MywgMjQ5LCA2NywgCi0gICAgMywgMjE3LCAxMDUsIDI0OSwgNjcsIDMsIDIxNywgMjIsIDI0OSwgNjcsIDMsIDIxNiwgMTE3LCAyNDksIDY3LCAzLCAxMTEsIAotICAgIDI0OSwgNjcsIDMsIDIxNSwgMTE4LCAyNDksIDY3LCAzLCAyMTIsIDY1LCAyNDksIDY3LCAzLCAyMTIsIDIyLCAyNDksIDY3LCAKLSAgICAzLCAyMTEsIDI1MCwgMjQ5LCA2NywgMywgMjExLCAyMjcsIDI0OSwgNjcsIDMsIDIxMSwgMTY1LCAyNDksIDY3LCAzLCAyMTEsIAotICAgIDE2MiwgMjQ5LCA2NywgMywgMjEwLCAxMTYsIDI0OSwgNjcsIDMsIDIxMCwgMjMsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjU0LCAKLSAgICAxNjgsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjUyLCAyNSwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNDIsIDIwMSwgMjM2LCAxLCAKLSAgICAyNTQsIDI3LCAxLCAyNDgsIDE4OCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNDEsIDIzOCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAKLSAgICAyMTIsIDMwLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIxMCwgOTcsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjQxLCAxOTUsIDIzNiwgCi0gICAgMSwgMjU0LCAyNywgMSwgMjE2LCAyMjYsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjEwLCAyMzIsIDIzNiwgMSwgMjU0LCAyNywgCi0gICAgMSwgMjM0LCAyMjUsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjMzLCA5MywgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMzEsIDY1LCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyNywgMTk0LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyMSwgMjQ5LCAyMzYsIDEsIDI1NCwgCi0gICAgMjcsIDEsIDI1MywgMTYyLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyNSwgMjIxLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyMiwgCi0gICAgMjQsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjI0LCAzNCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjMsIDY3LCAyMzYsIDEsIAotICAgIDI1NCwgMjcsIDEsIDIyMCwgMjAsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjE3LCAzNiwgMjM2LCAxLCAyNTQsIDI3LCAyMjEsIAotICAgIDE3MywgNTAsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDExMCwgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMTA1LCAyMzYsIDEsIDI1NCwgCi0gICAgMjcsIDU0LCAxNTgsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDIxNiwgMjQ3LCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAyMTUsIDczLCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMjMsIDI0MCwgMjEwLCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDU0LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDIyNSwgMTE5LCAxLCAyNTQsIDE2NSwgMjI1LCAxMTksIAotICAgIDEsIDI1MiwgMjgsIDIyNSwgMTE5LCAxLCAyNDMsIDEwOSwgMjI1LCAxMTksIDEsIDI0OCwgNTYsIDIyNSwgMTE5LCAxLCAKLSAgICAyNDEsIDIzOCwgMjI1LCAxMTksIDEsIDIxMiwgMzcsIDIyNSwgMTE5LCAxLCAyMTAsIDExMCwgMjI1LCAxMTksIDEsIDI0MSwgCi0gICAgMTk3LCAyMjUsIDExOSwgMSwgMjE2LCAyMzAsIDIyNSwgMTE5LCAxLCAyMTAsIDIzMywgMjI1LCAxMTksIDEsIDIzNCwgMjUwLCAKLSAgICAyMjUsIDExOSwgMSwgMjMzLCA5OSwgMjI1LCAxMTksIDEsIDIzMSwgNjUsIDIyNSwgMTE5LCAxLCAyMjcsIDE5NCwgMjI1LCAKLSAgICAxMTksIDEsIDIyMCwgMTQ0LCAyMjUsIDExOSwgMSwgMjU0LCAxOTYsIDIyNSwgMTE5LCAxLCAyMjUsIDIyMSwgMjI1LCAxMTksIAotICAgIDEsIDIyMiwgMjUsIDIyNSwgMTE5LCAxLCAyMjQsIDM5LCAyMjUsIDExOSwgMSwgMjIyLCAxODksIDIyNSwgMTE5LCAxLCAKLSAgICAyMjAsIDIwLCAyMjUsIDExOSwgMSwgMjE3LCA0MSwgMjI1LCAxMTksIDU0LCAxMTAsIDIyNSwgMTE5LCA1NCwgMjE2LCAyNDcsIAotICAgIDIyNSwgMTE5LCA1NCwgMjE1LCA3MywgMjI1LCAxMTksIDU0LCAxMjMsIDI0MCwgMjEwLCAyMjUsIDExOSwgNTQsIDEwNSwgCi0gICAgMjI1LCAxMTksIDU0LCAxNTgsIDIyNSwgMTE5LCAyMTEsIDIwOSwgMjIwLCAxMzcsIDIzMiwgNTksIDEsIDYxLCAyMzIsIDU5LCAKLSAgICAxLCAyNTMsIDE1OCwgMjMyLCA1OSwgMSwgMjQzLCAyMDIsIDIzMiwgNTksIDEsIDI0OSwgNjAsIDIzMiwgNTksIDEsIDc1LCAKLSAgICAyMzIsIDU5LCAxLCAyMTQsIDEwNSwgMjMyLCA1OSwgMSwgNzMsIDIzMiwgNTksIDEsIDIxMSwgMTE3LCAyMzIsIDU5LCAxLCAKLSAgICAyMzUsIDIzLCAyMzIsIDU5LCAxLCAxNTYsIDIzMiwgNTksIDEsIDE5MywgMjMyLCA1OSwgMSwgMjMwLCAyNSwgMjMyLCA1OSwgCi0gICAgMSwgNzYsIDIzMiwgNTksIDEsIDE1MywgMjMyLCA1OSwgMSwgMjE4LCAyMjYsIDIzMiwgNTksIDEsIDIxNywgMTUyLCAyMzIsIAotICAgIDU5LCAxLCA3MCwgMjMyLCA1OSwgMSwgMjQ1LCA2LCAyMzIsIDU5LCAxLCAyMjQsIDk2LCAyMzIsIDU5LCAxLCAyMjIsIDkxLCAKLSAgICAyMzIsIDU5LCAxLCAyMTUsIDE1OSwgMjMyLCA1OSwgMSwgMjU0LCAxMjMsIDIzMiwgNTksIDEsIDI0NSwgMTUwLCAyMzIsIAotICAgIDU5LCAxLCAyMzIsIDYyLCAyMzIsIDU5LCAxLCAyMjgsIDExMSwgMjMyLCA1OSwgMSwgMjUxLCA2NiwgMjMyLCA1OSwgMjE1LCAKLSAgICAyMjIsIDc4LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgNjEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCA3NSwgMjMxLCA0OCwgCi0gICAgMjQxLCAxNzQsIDEsIDczLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgNzYsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAxOTEsIAotICAgIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMTIsIDY1LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjUyLCAxOTEsIDIzMSwgNDgsIAotICAgIDI0MSwgMTc0LCAxLCAyNTIsIDE5MCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE5MCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDE4NCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE5NywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyOSwgMjI4LCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgMjI5LCAxMDcsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjksIDEwNiwgMjMxLCA0OCwgMjQxLCAxNzQsIAotICAgIDEsIDIwNSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyMywgMTg3LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjMzLCAxMzUsIAotICAgIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMzQsIDEzMiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDI0MSwgMTg5LCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgMjA2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjIyLCAzMywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDIyMSwgMTgxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMTc2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjI0LCA4OCwgMjMxLCAKLSAgICA0OCwgMjQxLCAxNzQsIDEsIDIxNywgMTA1LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjE3LCAxMDQsIDIzMSwgNDgsIDI0MSwgCi0gICAgMTc0LCAxLCAyMTcsIDIyLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjE3LCAyMSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDExMSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDI0OCwgMjIxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMTYsIDIxMywgMTcwLCAKLSAgICAyMzEsIDQ4LCAyNDEsIDE3NCwgMTYsIDIxMywgMTY5LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCA2MSwgMjMxLCA0OCwgMjQ5LCAKLSAgICA5NCwgMSwgNzUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDczLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCA3NiwgMjMxLCA0OCwgCi0gICAgMjQ5LCA5NCwgMSwgMTkxLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMTIsIDY1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyNTIsIAotICAgIDE5MSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMTkwLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxODQsIDIzMSwgNDgsIDI0OSwgCi0gICAgOTQsIDEsIDE5NywgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjI5LCAxMDcsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIwNSwgMjMxLCAKLSAgICA0OCwgMjQ5LCA5NCwgMSwgMjMzLCAxMzUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIzNCwgMTMyLCAyMzEsIDQ4LCAyNDksIAotICAgIDk0LCAxLCAyNDEsIDE4OSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjA2LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyNTQsIDIzLCAKLSAgICAyMDYsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIyMSwgMTgxLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxNzYsIDIzMSwgNDgsIAotICAgIDI0OSwgOTQsIDEsIDIyNCwgODgsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIxNywgMTA1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAKLSAgICAyMTcsIDIyLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxMTEsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDI0OCwgMjIxLCAyMzEsIAotICAgIDQ4LCAyNDksIDk0LCAyMzIsIDE0NSwgMjIyLCAyMTcsIDIzMSwgNDgsIDI0OSwgOTQsIDIzMiwgMTQ1LCAyMzYsIDYsIDIzNCwgCi0gICAgMTIwLCAxLCA2MSwgMjM0LCAxMjAsIDI1LCA1LCA3MywgMjM0LCAxMjAsIDI1LCA1LCA3MCwgMjM0LCAxMjAsIDI1LCA1LCAKLSAgICAxNDksIDE1MywgMjM0LCAxMjAsIDI1LCA1LCA3NSwgMjM0LCAxMjAsIDI1LCA1LCA3NiwgMjM0LCAxMjAsIDI1LCAyMzMsIAotICAgIDIzLCA3OCwgMjM0LCAxMjAsIDUsIDUyLCAyMjIsIDIzNCwgNTEsIDIzNCwgMTIwLCA1LCAyNTQsIDc1LCAyMzQsIDEyMCwgNSwgCi0gICAgMjEzLCAxNDcsIDIzNCwgMTIwLCAxLCAxNzYsIDIzNCwgMTIwLCAxLCAyMzQsIDEzMiwgMjM0LCAxMjAsIDEsIDI0MywgMTM1LCAKLSAgICAyMzQsIDEyMCwgMSwgMjQyLCAyNDksIDIzNCwgMTIwLCAxLCAyNTEsIDMzLCAyMzQsIDEyMCwgMSwgMjUwLCAxNTcsIDIzNCwgCi0gICAgMTIwLCAxLCAyMzUsIDE0MSwgMjM0LCAxMjAsIDEsIDIyNywgMTY1LCAyMzQsIDEyMCwgMSwgMjE1LCAxNTYsIDIzNCwgMTIwLCAKLSAgICAxLCAyMTUsIDE0NCwgMjM0LCAxMjAsIDEsIDI0OCwgMTM1LCAyMzQsIDEyMCwgMSwgMjQ4LCAxMTksIDIzNCwgMTIwLCAxLCAKLSAgICAyMjgsIDExMCwgMjM0LCAxMjAsIDEsIDIxNywgMTA1LCAyMzQsIDEyMCwgMSwgMjE2LCAyMDgsIDIzNCwgMTIwLCAxLCAyNDgsIAotICAgIDIyMSwgMjM0LCAxMjAsIDEsIDI0OCwgMjUsIDIzNCwgMTIwLCAxLCAxOTcsIDIzNCwgMTIwLCAxLCAxOTAsIDIzNCwgMTIwLCAKLSAgICAxLCAyMjUsIDE0NywgMjM0LCAxMjAsIDEsIDI1MiwgMTkxLCAyMzQsIDEyMCwgMSwgMjUyLCAxOCwgMjM0LCAxMjAsIDEsIAotICAgIDE4NCwgMjM0LCAxMjAsIDEsIDE5MSwgMjM0LCAxMjAsIDEsIDIwNSwgMjM0LCAxMjAsIDEsIDIzMywgMTM1LCAyMzQsIDEyMCwgCi0gICAgMSwgMjE0LCAyNywgMjM0LCAxMjAsIDEsIDIyMCwgMTAyLCAyMzQsIDEyMCwgMSwgMjE4LCAyMjMsIDIzNCwgMTIwLCAxLCAKLSAgICAyMDYsIDIzNCwgMTIwLCAxLCAyMTAsIDExNiwgMjM0LCAxMjAsIDEsIDE2MiwgMjM0LCAxMjAsIDEsIDIzNCwgNDYsIDIzNCwgCi0gICAgMTIwLCAxLCAyMTUsIDEyNCwgMjM0LCAxMjAsIDUsIDI1MiwgMTQxLCA0OCwgMjM0LCAxMjAsIDUsIDI1MCwgMjIxLCAyMzQsIAotICAgIDEyMCwgNSwgNTksIDUxLCAyMzQsIDEyMCwgMjEzLCAxNTIsIDIzNCwgMTIwLCAyMSwgMTEwLCAyMzQsIDEyMCwgMjEsIDEwNSwgCi0gICAgMjM0LCAxMjAsIDIxLCAxNTgsIDIzNCwgMTIwLCAyMSwgMTYxLCAyMzQsIDEyMCwgNTQsIDIxNiwgMjQ3LCAyMzQsIDEyMCwgCi0gICAgNTQsIDIxNSwgNzMsIDIzNCwgMTIwLCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM0LCAxMjAsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICAyMzQsIDEyMCwgMjI0LCAxNDEsIDI0NywgMTIwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIDQsIDI1MCwgMzUsIDIzNCwgMTIwLCAKLSAgICAyMjQsIDE0MSwgMjUwLCAzNSwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyNDksIDEzNywgMTMwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIAotICAgIDIzMSwgMTgwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIDIzMiwgMTE1LCAyMzQsIDEyMCwgMjI0LCAxNDEsIDI0OCwgMTc4LCAKLSAgICAyMzQsIDEyMCwgMjI0LCAxNDEsIDUyLCAyNDgsIDE3OCwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyMzIsIDIwNywgNTUsIDIxOSwgCi0gICAgMjgsIDI1NCwgMzgsIDEsIDI0MSwgMjM4LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjMzLCA5MywgNTUsIDIxOSwgMjgsIAotICAgIDI1NCwgMzgsIDEsIDI0MSwgMTk1LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjMxLCA2NSwgNTUsIDIxOSwgMjgsIDI1NCwgCi0gICAgMzgsIDEsIDIyNCwgMzQsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTIsIDMwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgCi0gICAgMSwgMjIwLCAyMCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMywgNjcsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAKLSAgICAyNTIsIDI1LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjE3LCAzNiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMSwgCi0gICAgMjI2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjM0LCAyMjUsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjcsIAotICAgIDE5NCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIzNCwgMTE2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjIyLCAyNCwgCi0gICAgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMSwgMjQ5LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQ0LCAxNTQsIDU1LCAKLSAgICAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNTQsIDE3MCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI1MywgMTYxLCA1NSwgCi0gICAgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQ4LCAyMiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI0MiwgMjAxLCA1NSwgMjE5LCAKLSAgICAyOCwgMjU0LCAzOCwgMSwgMjQ4LCAxODgsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNDIsIDIzOCwgNTUsIDIxOSwgMjgsIAotICAgIDI1NCwgMzgsIDEsIDIxNiwgMjI2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjEwLCA5NiwgNTUsIDIxOSwgMjgsIDI1NCwgCi0gICAgMzgsIDEsIDI0OCwgMTksIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTAsIDIzMiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIAotICAgIDEsIDIxNiwgMTk3LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjE2LCAxNzgsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCA1NCwgCi0gICAgMTEwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgNTQsIDI0NCwgMTE0LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMTMyLCAyMzUsIAotICAgIDIzOCwgMjUzLCAxNzIsIDEsIDYxLCAyNTMsIDE3MiwgMSwgMjU1LCA3MywgMjUzLCAxNzIsIDEsIDI1NCwgNzMsIDI1MywgCi0gICAgMTcyLCAxLCAyNTUsIDMyLCAyNTMsIDE3MiwgMSwgMjU0LCAxMjMsIDI1MywgMTcyLCAxLCAyNTUsIDMzLCAyNTMsIDE3MiwgCi0gICAgMSwgMjU0LCAyNDMsIDI1MywgMTcyLCAxLCAyNTQsIDIzOSwgMjUzLCAxNzIsIDEsIDc1LCAyNTMsIDE3MiwgMSwgMjQ1LCAKLSAgICAyMDksIDI1MywgMTcyLCAxLCA3NiwgMjUzLCAxNzIsIDEsIDIyNiwgMTgzLCAyNTMsIDE3MiwgMSwgNzMsIDI1MywgMTcyLCAKLSAgICAxLCAyMzYsIDMzLCAyNTMsIDE3MiwgMSwgNzAsIDI1MywgMTcyLCAxLCAyMTQsIDExOCwgMjUzLCAxNzIsIDEsIDIzNCwgCi0gICAgMTgyLCAyNTMsIDE3MiwgMSwgMjExLCAxNjIsIDI1MywgMTcyLCAxLCAyMTEsIDEyOCwgMjUzLCAxNzIsIDEsIDIxMSwgMTM3LCAKLSAgICAyNTMsIDE3MiwgMSwgMjQzLCA2MiwgMjUzLCAxNzIsIDEsIDI0MywgMjQsIDI1MywgMTcyLCAxLCAyNDIsIDIzNiwgMjUzLCAKLSAgICAxNzIsIDEsIDI1MCwgMTkwLCAyNTMsIDE3MiwgMSwgMjM1LCAxMjYsIDI1MywgMTcyLCAxLCAyMTcsIDIyLCAyNTMsIDE3MiwgCi0gICAgMSwgMjE2LCAxOTUsIDI1MywgMTcyLCAxLCAyNDgsIDkwLCAyNTMsIDE3MiwgMSwgMjQ4LCAxNywgMjUzLCAxNzIsIDEsIAotICAgIDIxNSwgMTUxLCAyNTMsIDE3MiwgMSwgMjI1LCAyMjEsIDI1MywgMTcyLCAxLCAyNDQsIDE1NCwgMjUzLCAxNzIsIDEsIDI1MiwgCi0gICAgNzUsIDI1MywgMTcyLCAxLCAyNTIsIDE0LCAyNTMsIDE3MiwgMSwgMjI5LCA2NCwgMjUzLCAxNzIsIDEsIDIyOCwgMjM5LCAKLSAgICAyNTMsIDE3MiwgMSwgMjI4LCAyNDAsIDI1MywgMTcyLCAxLCAyMjksIDEwNywgMjUzLCAxNzIsIDEsIDIyNywgMTU2LCAyNTMsIAotICAgIDE3MiwgMSwgMjI4LCAxMDUsIDI1MywgMTcyLCAxLCAyMzEsIDkxLCAyNTMsIDE3MiwgMSwgMjQxLCAxMTYsIDI1MywgMTcyLCAKLSAgICAxLCAyMTAsIDE2NiwgMjUzLCAxNzIsIDEsIDIxMSwgNDcsIDI1MywgMTcyLCAxLCAyMTMsIDI1NSwgMjUzLCAxNzIsIDEsIAotICAgIDIyMywgMTI4LCAyNTMsIDE3MiwgMSwgMjMzLCA1OCwgMjUzLCAxNzIsIDEsIDIyMSwgMTgxLCAyNTMsIDE3MiwgMSwgMjEwLCAKLSAgICA5NCwgMjUzLCAxNzIsIDEsIDIyMCwgNjMsIDI1MywgMTcyLCAxLCAyMTAsIDc0LCAyNTMsIDE3MiwgMSwgMjE5LCAxOTgsIAotICAgIDI1MywgMTcyLCAxLCAyMTgsIDE5MywgMjUzLCAxNzIsIDEsIDI0MSwgMjM4LCAyNTMsIDE3MiwgMjU1LCAyMSwgNzgsIDIxNiwgCi0gICAgNzksIDExMywgMTcwLCAxMTcsIDEyMywgNTksIDIyNCwgMTQwLCA0LCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIAotICAgIDE0MCwgMjMzLCA4NSwgMTEzLCAxNzAsIDExNywgMTIzLCA1OSwgMjI0LCAxNDAsIDIzMywgODUsIDEyMywgNTksIDExNywgCi0gICAgMTEzLCAxNzAsIDIyNCwgMTQwLCAyMzMsIDg1LCAxMTMsIDIyMiwgMjMyLCAxMTcsIDEyMywgMjIyLCAyMzQsIDIyNCwgMTQwLCAKLSAgICAyMzMsIDg1LCAxMjMsIDIyMiwgMjM0LCAxMTcsIDExMywgMjIyLCAyMzIsIDIyNCwgMTQwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIAotICAgIDEsIDI1NCwgMTY4LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI1MiwgMjUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQyLCAKLSAgICAyMDEsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQ4LCAxODgsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQxLCAyMzgsIAotICAgIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjEyLCAzMCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMTAsIDk3LCAyMzUsIDIxOCwgCi0gICAgMjI1LCAyNTQsIDEsIDI0MSwgMTk1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxNiwgMjI2LCAyMzUsIDIxOCwgMjI1LCAKLSAgICAyNTQsIDEsIDIxMCwgMjMyLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIzNCwgMjI1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIAotICAgIDIzMywgOTMsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjMxLCA2NSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjcsIDE5NCwgCi0gICAgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjEsIDI0OSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNTMsIDE2MiwgMjM1LCAKLSAgICAyMTgsIDIyNSwgMjU0LCAxLCAyMjUsIDIyMSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjIsIDI0LCAyMzUsIDIxOCwgCi0gICAgMjI1LCAyNTQsIDEsIDIyNCwgMzQsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjIzLCA2NywgMjM1LCAyMTgsIDIyNSwgMjU0LCAKLSAgICAxLCAyMjAsIDIwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxNywgMzYsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDExMCwgCi0gICAgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMTA1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAxNTgsIDIzNSwgMjE4LCAyMjUsIAotICAgIDI1NCwgNTQsIDE2MSwgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMjE2LCAyNDcsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIAotICAgIDIxNSwgNzMsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDEyMywgMjQwLCAyMTAsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIAotICAgIDEyMywgMjE2LCAxNDcsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNTQsIDE2OCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI1MiwgCi0gICAgMjUsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNDIsIDIwMSwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI0OCwgMTg4LCAyMzUsIAotICAgIDIxOCwgMjI2LCA3MiwgMSwgMjQxLCAyMzgsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMTIsIDI5LCAyMzUsIDIxOCwgMjI2LCAKLSAgICA3MiwgMSwgMjEwLCA5NywgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI0MSwgMTk1LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgCi0gICAgMjE2LCAyMjYsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMTAsIDIzMiwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIzNCwgMjI1LCAKLSAgICAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjMzLCA5MywgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIzMSwgNjQsIDIzNSwgMjE4LCAKLSAgICAyMjYsIDcyLCAxLCAyMjcsIDE5NCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIyMSwgMjQ5LCAyMzUsIDIxOCwgMjI2LCA3MiwgCi0gICAgMSwgMjI1LCAyMjEsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMjIsIDI0LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjIwLCAKLSAgICAyMCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIxNywgMzYsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTEwLCAyMzUsIDIxOCwgCi0gICAgMjI2LCA3MiwgNTQsIDEwNSwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxNTgsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTYxLCAKLSAgICAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDIxNiwgMjQ3LCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDIxNSwgNzMsIDIzNSwgCi0gICAgMjE4LCAyMjYsIDcyLCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgNjEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDYxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAKLSAgICAyNTQsIDI0MywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDczLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCA3MywgNTUsIDIwMSwgMSwgCi0gICAgMjExLCAzNywgNzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCA3NiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMjM0LCAKLSAgICA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyMjYsIDIzNCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NSwgMjUsIDU1LCAyMDEsIDEsIAotICAgIDIxMSwgMzcsIDI1NSwgMjUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDI0MiwgNTUsIDIwMSwgMSwgMjExLCAzNywgCi0gICAgMjU0LCAyNDIsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIxNiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMTYsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIzNywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzcsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNTQsIDI1NSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyNTUsIDU1LCAyMDEsIDEsIDIyNiwgCi0gICAgMTQ5LCAyNTQsIDI0MSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTIsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgCi0gICAgMTIsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTMsIDE2NywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjUzLCAxNjcsIDU1LCAKLSAgICAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyNCwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMjQsIDU1LCAyMDEsIDEsIAotICAgIDIyNiwgMTQ5LCAyNTQsIDIzNSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAKLSAgICAyMjYsIDIzMywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjI2LCAyMzMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDE3OCwgCi0gICAgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAxNzgsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIzNCwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI0NSwgMTYxLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxNTksIDU1LCAyMDEsIDEsIDIyNiwgCi0gICAgMTQ5LCAyNTQsIDEyMywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjMyLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIAotICAgIDIzMiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTMxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDEzMSwgNTUsIAotICAgIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTQ3LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDE0NywgNTUsIDIwMSwgMSwgCi0gICAgMjI2LCAxNDksIDI0NSwgMTE4LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDExOCwgNTUsIDIwMSwgMSwgMjExLCAzNywgCi0gICAgMjU0LCAxMTUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEzOCwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzEsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEwOCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMTc1LCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjQwLCAxMTMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDIxNSwgNTUsIDIwMSwgMSwgMjExLCAKLSAgICAzNywgMjQ1LCAyMTUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDQ1LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIAotICAgIDQ1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjM1LCAxODEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIzNSwgMTgxLCA1NSwgCi0gICAgMjAxLCAxLCAyMjYsIDE0OSwgMjI2LCAxNTksIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIyNiwgMTU5LCA1NSwgMjAxLCAxLCAKLSAgICAyMjYsIDE0OSwgMjU0LCA0MSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCA0MSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIAotICAgIDI1NCwgMjMwLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjUzLCAyMzcsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyOCwgCi0gICAgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1MywgMjMxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTMsIDIzMSwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI0NSwgNzUsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgNzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAKLSAgICAyNTMsIDIwNiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjUzLCAyMDYsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyNSwgCi0gICAgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMjUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyMjYsIDE0MCwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI1MiwgMTI1LCAyMjIsIDEyNywgMjEsIDExMCwgMjIyLCAxMjcsIDIxLCAxMDUsIDIyMiwgMTI3LCAKLSAgICAyMSwgMTU4LCAyMjIsIDEyNywgMjEsIDE2MSwgMjIyLCAxMjcsIDIxLCAxODksIDIyMiwgMTI3LCAyMSwgMTk0LCAyMjIsIAotICAgIDEyNywgMjEsIDE5OCwgMjIyLCAxMjcsIDIxLCAxOTUsIDIyMiwgMTI3LCAyMSwgMjAwLCAyMjIsIDEyNywgNTQsIDIxNiwgCi0gICAgMjQ3LCAyMjIsIDEyNywgNTQsIDIxNSwgNzMsIDIyMiwgMTI3LCA1NCwgMjE2LCAxNjIsIDIyMiwgMTI3LCA1NCwgMjQ0LCAKLSAgICAxNSwgMjIyLCAxMjcsIDU0LCAyNDQsIDExNCwgMjIyLCAxMjcsIDU0LCAyMTksIDExMSwgMjIyLCAxMjcsIDU0LCAyMjAsIAotICAgIDExNiwgMjIyLCAxMjcsIDU0LCAyNDUsIDE4NCwgMjIyLCAxMjcsIDU0LCAyMjgsIDE5NSwgMjIyLCAxMjcsIDU0LCAxMjMsIAotICAgIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDExMywgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMTM0LCAyNDAsIDIxMCwgMjIyLCAKLSAgICAxMjcsIDU0LCAyNDQsIDExLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjIyLCAxMjcsIAotICAgIDU0LCAyMTksIDEyNSwgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMjIwLCAxMjIsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIAotICAgIDI0NSwgMTkzLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAyMjgsIDIwMCwgMjQwLCAyMTAsIDIyMiwgMTI3LCAyNDQsIDIsIAotICAgIDEyMywgMjQyLCAyNywgMjIyLCAxMjcsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAyMjIsIDEyNywgMjQ0LCAyLCAxMjMsIDIxNiwgCi0gICAgMTY4LCAyMjIsIDEyNywgMjQ0LCAyLCAxMTMsIDIxNiwgMTY2LCAxMTgsIDUsIDI1MCwgMjU1LCAxMTgsIDUsIDI1NCwgNzUsIAotICAgIDExOCwgNSwgMjEzLCAxNDcsIDExOCwgNSwgMjM1LCAxMDIsIDExOCwgNSwgMjE0LCAxNjEsIDExOCwgMSwgNjEsIDExOCwgMSwgCi0gICAgMjU1LCA3MywgMTE4LCAxLCA3MywgMTE4LCAxLCAyMzYsIDMzLCAxMTgsIDEsIDcwLCAxMTgsIDEsIDIxNCwgMTE4LCAxMTgsIAotICAgIDEsIDE0OSwgMTUzLCAxMTgsIDEsIDE0OSwgMjIyLCAxODAsIDExOCwgMSwgMTQ5LCAxNTYsIDExOCwgMSwgMTQ5LCAyMzIsIAotICAgIDE4NSwgMTE4LCAxLCA3NSwgMTE4LCAxLCAyNTQsIDIwMSwgMTE4LCAxLCA3NiwgMTE4LCAxLCAyNTMsIDE5MiwgMTE4LCAxLCAKLSAgICAxNzYsIDExOCwgMSwgMjM0LCAxMzIsIDExOCwgMSwgMjQzLCAxMzUsIDExOCwgMSwgMjQyLCAyNDksIDExOCwgMSwgMjI5LCAKLSAgICA3NywgMTE4LCAxLCAyNTEsIDMzLCAxMTgsIDEsIDI1MCwgMTU3LCAxMTgsIDEsIDIzNSwgMTQxLCAxMTgsIDEsIDIzNSwgCi0gICAgMTE0LCAxMTgsIDEsIDIyNywgMTY1LCAxMTgsIDEsIDIxNSwgMTU2LCAxMTgsIDEsIDIxNSwgMTQ0LCAxMTgsIDEsIDI0OCwgCi0gICAgMTM1LCAxMTgsIDEsIDI0OCwgMTE5LCAxMTgsIDEsIDIyOCwgMTEwLCAxMTgsIDEsIDIxNywgMTA1LCAxMTgsIDEsIDIxNiwgCi0gICAgMjA4LCAxMTgsIDEsIDI0OCwgMjIxLCAxMTgsIDEsIDI0OCwgMjUsIDExOCwgMSwgMTk3LCAxMTgsIDEsIDE5MCwgMTE4LCAxLCAKLSAgICAyMjUsIDE0NywgMTE4LCAxLCAyNTIsIDE5MSwgMTE4LCAxLCAyNTIsIDE4LCAxMTgsIDEsIDE4NCwgMTE4LCAxLCAxOTEsIAotICAgIDExOCwgMSwgMjA1LCAxMTgsIDEsIDIzMywgMTM1LCAxMTgsIDEsIDIxNCwgMjcsIDExOCwgMSwgMjIwLCAxMDIsIDExOCwgMSwgCi0gICAgMjE4LCAyMjMsIDExOCwgMSwgMjA2LCAxMTgsIDEsIDE2MiwgMTE4LCAxLCAyMzIsIDE4NCwgMTE4LCAxLCA1NSwgMzYsIAotICAgIDIzMiwgMTc1LCAxMTgsIDEsIDU1LCAzNiwgMjIyLCAxNzksIDExOCwgMSwgNTUsIDM2LCAyMjgsIDkyLCAxMTgsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAxMTgsIDI1LCA1LCAyNTIsIDE1LCAyNTUsIDczLCAxMTgsIDI1LCA1LCA3MywgMTE4LCAyNSwgNSwgMjM2LCAKLSAgICAzMywgMTE4LCAyNSwgNSwgNzAsIDExOCwgMjUsIDUsIDIxNCwgMTE4LCAxMTgsIDI1LCA1LCAxNDksIDE1MywgMTE4LCAyNSwgCi0gICAgNSwgMTQ5LCAyMjIsIDE4MCwgMTE4LCAyNSwgNSwgMTQ5LCAxNTYsIDExOCwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDExOCwgCi0gICAgMjUsIDUsIDc1LCAxMTgsIDI1LCA1LCAyNTQsIDIwMSwgMTE4LCAyNSwgNSwgNzYsIDExOCwgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAxMTgsIDIxMywgMTUyLCAxMTgsIDI0OCwgMTc4LCAxMTgsIDUyLCAyNDgsIDE3OCwgMTE4LCAyMjQsIDE0MSwgMjQ3LCAxMjAsIAotICAgIDExOCwgMjI0LCAxNDEsIDUyLCAyNDcsIDEyMCwgMTE4LCAyMjQsIDE0MSwgMjMyLCAyMTMsIDExOCwgMjI0LCAxNDEsIDI0OSwgCi0gICAgMTM3LCAxMzAsIDExOCwgMjI0LCAxNDEsIDIzMiwgMTE1LCAxMTgsIDU0LCAxMTAsIDExOCwgNTQsIDEwNSwgMTE4LCA1NCwgCi0gICAgMTU4LCAxMTgsIDU0LCAxNjEsIDExOCwgNTQsIDE4OSwgMTE4LCA1NCwgMTk0LCAxMTgsIDU0LCAxOTgsIDExOCwgNTQsIAotICAgIDE5NSwgMTE4LCA1NCwgMjAwLCAxMTgsIDU0LCAyMTYsIDI0NywgMTE4LCA1NCwgMjE1LCA3MywgMTE4LCA1NCwgMjE2LCAKLSAgICAxNjIsIDExOCwgNTQsIDI0NCwgMTUsIDExOCwgNTQsIDI0NCwgMTE0LCAxMTgsIDU0LCAyMTksIDExMSwgMTE4LCA1NCwgCi0gICAgMjIwLCAxMTYsIDExOCwgNTQsIDI0NSwgMTg0LCAxMTgsIDU0LCAyMjgsIDE5NSwgMTE4LCA1NCwgMTIzLCAyNDAsIDIxMCwgCi0gICAgMTE4LCA1NCwgMTIzLCAyMTYsIDE0NywgMTE4LCAyMSwgMjEwLCA4NiwgMTE4LCAyMSwgMTEwLCAxMTgsIDIxLCAxMDUsIAotICAgIDExOCwgMjEsIDE1OCwgMTE4LCAyMSwgMTYxLCAxMTgsIDIxLCAxODksIDExOCwgMjEsIDE5NCwgMTE4LCAyMSwgMTk4LCAKLSAgICAxMTgsIDIxLCAxOTUsIDExOCwgMjEsIDIwMCwgMjM0LCAyNDQsIDUsIDI1MCwgMjU1LCAyMzQsIDI0NCwgNSwgMjU0LCA3NSwgCi0gICAgMjM0LCAyNDQsIDUsIDIxMywgMTQ3LCAyMzQsIDI0NCwgMSwgNjEsIDIzNCwgMjQ0LCAxLCAyNTUsIDczLCAyMzQsIDI0NCwgCi0gICAgMSwgNzMsIDIzNCwgMjQ0LCAxLCAyMzYsIDMzLCAyMzQsIDI0NCwgMSwgNzAsIDIzNCwgMjQ0LCAxLCAyMTQsIDExOCwgMjM0LCAKLSAgICAyNDQsIDEsIDc1LCAyMzQsIDI0NCwgMSwgMjU0LCAyMDEsIDIzNCwgMjQ0LCAxLCA3NiwgMjM0LCAyNDQsIDEsIDI1MywgCi0gICAgMTkyLCAyMzQsIDI0NCwgMSwgMTc2LCAyMzQsIDI0NCwgMSwgMjM0LCAxMzIsIDIzNCwgMjQ0LCAxLCAyNDMsIDEzNSwgMjM0LCAKLSAgICAyNDQsIDEsIDI0MiwgMjQ5LCAyMzQsIDI0NCwgMSwgMjI5LCA3NywgMjM0LCAyNDQsIDEsIDI1MSwgMzMsIDIzNCwgMjQ0LCAKLSAgICAxLCAyNTAsIDE1NywgMjM0LCAyNDQsIDEsIDIzNSwgMTQxLCAyMzQsIDI0NCwgMSwgMjM1LCAxMTQsIDIzNCwgMjQ0LCAxLCAKLSAgICAyMjcsIDE2NSwgMjM0LCAyNDQsIDEsIDIxNSwgMTU2LCAyMzQsIDI0NCwgMSwgMjE1LCAxNDQsIDIzNCwgMjQ0LCAxLCAyNDgsIAotICAgIDEzNSwgMjM0LCAyNDQsIDEsIDI0OCwgMTI0LCAyMzQsIDI0NCwgMSwgMjQ4LCAxMTksIDIzNCwgMjQ0LCAxLCAyMjMsIDM5LCAKLSAgICAyMzQsIDI0NCwgMSwgMjI4LCAxMTAsIDIzNCwgMjQ0LCAxLCAyMTcsIDEwNSwgMjM0LCAyNDQsIDEsIDIxNiwgMjA4LCAyMzQsIAotICAgIDI0NCwgMSwgMjQ4LCAyMjEsIDIzNCwgMjQ0LCAxLCAyNDgsIDI1LCAyMzQsIDI0NCwgMSwgMTk3LCAyMzQsIDI0NCwgMSwgCi0gICAgMTkwLCAyMzQsIDI0NCwgMSwgMjI1LCAxNDcsIDIzNCwgMjQ0LCAxLCAyNTIsIDE5MSwgMjM0LCAyNDQsIDEsIDI1MiwgMTgsIAotICAgIDIzNCwgMjQ0LCAxLCAxODQsIDIzNCwgMjQ0LCAxLCAxOTEsIDIzNCwgMjQ0LCAxLCAyMDUsIDIzNCwgMjQ0LCAxLCAyMzMsIAotICAgIDEzNSwgMjM0LCAyNDQsIDEsIDIxNCwgMjcsIDIzNCwgMjQ0LCAxLCAyMjAsIDEwMiwgMjM0LCAyNDQsIDEsIDIxOCwgMjIzLCAKLSAgICAyMzQsIDI0NCwgMSwgMjA2LCAyMzQsIDI0NCwgMSwgMTYyLCAyMzQsIDI0NCwgMjUsIDUsIDI1NSwgNzMsIDIzNCwgMjQ0LCAKLSAgICAyNSwgNSwgNzMsIDIzNCwgMjQ0LCAyNSwgNSwgMjM2LCAzMywgMjM0LCAyNDQsIDI1LCA1LCA3MCwgMjM0LCAyNDQsIDI1LCAKLSAgICA1LCAyMTQsIDExOCwgMjM0LCAyNDQsIDI1LCA1LCA3NSwgMjM0LCAyNDQsIDI1LCA1LCAyNTQsIDIwMSwgMjM0LCAyNDQsIAotICAgIDI1LCA1LCA3NiwgMjM0LCAyNDQsIDI1LCA1LCAyNTMsIDE5MiwgMjM0LCAyNDQsIDUsIDIxMywgMTUyLCAyMzQsIDI0NCwgNSwgCi0gICAgMjI3LCAyMDUsIDIzNCwgMjQ0LCAyNTUsIDIxLCA1MCwgMjM0LCAyNDQsIDI0NSwgMTIxLCA1MCwgMjM0LCAyNDQsIDU0LCAKLSAgICA1MCwgMjM0LCAyNDQsIDIyMSwgMTczLCA3OCwgMjM0LCAyNDQsIDUyLCAyMjEsIDE3MywgNzgsIDIzNCwgMjQ0LCAyNDgsIAotICAgIDE3OCwgMjM0LCAyNDQsIDUyLCAyNDgsIDE3OCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjIyLCAxOCwgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjE3LCA4MCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjUyLCAxNjgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI1MSwgCi0gICAgMjMsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0OCwgMjAzLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDMsIDEyMCwgMjE5LCAKLSAgICAzNiwgMjE5LCA0NCwgMSwgMjMxLCAyMTAsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyOSwgNzQsIDIxOSwgMzYsIDIxOSwgNDQsIAotICAgIDEsIDIzMywgMTEyLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjksIDIxMywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjE0LCAyNCwgCi0gICAgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI2LCA3MywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjExLCA4NCwgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjIzLCAxNjgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0MiwgMzcsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIzNCwgCi0gICAgMjQ4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMzUsIDEzNiwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI3LCAxNjIsIDIxOSwgCi0gICAgMzYsIDIxOSwgNDQsIDEsIDI1NCwgMjA5LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDUsIDIwNywgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjM2LCAzNCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjE0LCAyMDgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyNiwgCi0gICAgMjIyLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDUsIDE5NywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjMxLCAyMjMsIDIxOSwgCi0gICAgMzYsIDIxOSwgNDQsIDIxLCAyMTAsIDg2LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTEwLCAyMTksIDM2LCAyMTksIDQ0LCAKLSAgICAyMSwgMTA1LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTU4LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTYxLCAyMTksIDM2LCAKLSAgICAyMTksIDQ0LCAyMSwgMTg5LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk0LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk4LCAKLSAgICAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk1LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMjAwLCAyNTAsIDE1MSwgNSwgMjUwLCAKLSAgICAyNTUsIDI1MCwgMTUxLCA1LCAyNTQsIDc1LCAyNTAsIDE1MSwgNSwgMjEzLCAxNDcsIDI1MCwgMTUxLCAxLCAyNTUsIDczLCAKLSAgICAyNTAsIDE1MSwgMSwgNzMsIDI1MCwgMTUxLCAxLCA3MCwgMjUwLCAxNTEsIDEsIDc1LCAyNTAsIDE1MSwgMSwgMjM1LCAxMCwgCi0gICAgMjUwLCAxNTEsIDEsIDIzNCwgMTMxLCAyNTAsIDE1MSwgMSwgMjQzLCAxMzIsIDI1MCwgMTUxLCAxLCAyNDIsIDI0OCwgMjUwLCAKLSAgICAxNTEsIDEsIDIyOSwgNzYsIDI1MCwgMTUxLCAxLCAyNTEsIDMyLCAyNTAsIDE1MSwgMSwgMjUwLCAxNTYsIDI1MCwgMTUxLCAKLSAgICAxLCAyMzUsIDE0MCwgMjUwLCAxNTEsIDEsIDIzNSwgMTEzLCAyNTAsIDE1MSwgMSwgMjI3LCAxNjQsIDI1MCwgMTUxLCAxLCAKLSAgICAyMTUsIDE1NSwgMjUwLCAxNTEsIDEsIDIxNSwgMTQzLCAyNTAsIDE1MSwgMSwgMjQ4LCAxMzQsIDI1MCwgMTUxLCAxLCAyNDgsIAotICAgIDExOCwgMjUwLCAxNTEsIDEsIDIyOCwgMTA5LCAyNTAsIDE1MSwgMSwgMjE3LCAxMDEsIDI1MCwgMTUxLCAxLCAyMTYsIDIwNywgCi0gICAgMjUwLCAxNTEsIDEsIDI0OCwgMjIwLCAyNTAsIDE1MSwgMSwgMjQ4LCAyNCwgMjUwLCAxNTEsIDEsIDIyOSwgMjI1LCAyNTAsIAotICAgIDE1MSwgMSwgMjI2LCA4OSwgMjUwLCAxNTEsIDEsIDIyNSwgMTQ2LCAyNTAsIDE1MSwgMSwgMjUyLCAxODksIDI1MCwgMTUxLCAKLSAgICAxLCAyNTIsIDE3LCAyNTAsIDE1MSwgMSwgMjMxLCAyMzcsIDI1MCwgMTUxLCAxLCAyMTAsIDE2NywgMjUwLCAxNTEsIDEsIAotICAgIDIxMSwgMTAzLCAyNTAsIDE1MSwgMSwgMjIzLCAxODQsIDI1MCwgMTUxLCAxLCAyMzMsIDEzNCwgMjUwLCAxNTEsIDEsIDIxMiwgCi0gICAgNjQsIDI1MCwgMTUxLCAxLCAyMjIsIDMxLCAyNTAsIDE1MSwgMSwgMjQyLCA0NiwgMjUwLCAxNTEsIDI1LCA1LCA2MSwgMjUwLCAKLSAgICAxNTEsIDI1LCA1LCA3MywgMjUwLCAxNTEsIDI1LCA1LCAyMzYsIDMzLCAyNTAsIDE1MSwgMjUsIDUsIDcwLCAyNTAsIDE1MSwgCi0gICAgMjUsIDUsIDIxNCwgMTE4LCAyNTAsIDE1MSwgMjUsIDUsIDc1LCAyNTAsIDE1MSwgMjUsIDUsIDI1NCwgMjAxLCAyNTAsIAotICAgIDE1MSwgMjUsIDUsIDc2LCAyNTAsIDE1MSwgMjUsIDUsIDI1MywgMTkyLCAyNTAsIDE1MSwgMjUsIDUsIDIyNiwgMjE5LCAKLSAgICAyNTAsIDE1MSwgMTQ0LCA3OCwgMjUwLCAxNTEsIDI1MywgMTkzLCA3OCwgMjUwLCAxNTEsIDIxMywgMTUyLCAyNTAsIDE1MSwgCi0gICAgMjMxLCAyMzUsIDI1MCwgMTUxLCAyMSwgMjEwLCA4NiwgMjUwLCAxNTEsIDIxLCAxMTAsIDI1MCwgMTUxLCAyMSwgMTA1LCAKLSAgICAyNTAsIDE1MSwgMjEsIDE1OCwgMjUwLCAxNTEsIDIxLCAxNjEsIDI1MCwgMTUxLCAyMSwgMTg5LCAyNTAsIDE1MSwgMjEsIAotICAgIDE5NCwgMjUwLCAxNTEsIDIxLCAxOTgsIDI1MCwgMTUxLCAyMSwgMTk1LCAyNTAsIDE1MSwgMjEsIDIwMCwgMjUwLCAxNTEsIAotICAgIDIyMSwgMTczLCA3OCwgMjUwLCAxNTEsIDI0OCwgMTc4LCAyNTAsIDE1MSwgNTIsIDI0OCwgMTc4LCAyNTAsIDE1MSwgMjI0LCAKLSAgICAxMywgNzgsIDE3NCwgNSwgMjUwLCAyNTUsIDE3NCwgNSwgMjU0LCA3NSwgMTc0LCA1LCAyMTMsIDE0NywgMTc0LCAxLCA2MSwgCi0gICAgMTc0LCAxLCAyNTUsIDczLCAxNzQsIDEsIDczLCAxNzQsIDEsIDIzNiwgMzMsIDE3NCwgMSwgNzAsIDE3NCwgMSwgMjE0LCAKLSAgICAxMTgsIDE3NCwgMSwgMTQ5LCAxNTMsIDE3NCwgMSwgMTQ5LCAyMjIsIDE4MCwgMTc0LCAxLCAxNDksIDE1NiwgMTc0LCAxLCAKLSAgICAxNDksIDIzMiwgMTg1LCAxNzQsIDEsIDc1LCAxNzQsIDEsIDI1NCwgMjAxLCAxNzQsIDEsIDc2LCAxNzQsIDEsIDI1MywgCi0gICAgMTkyLCAxNzQsIDEsIDE3NiwgMTc0LCAxLCAyMzQsIDEzMiwgMTc0LCAxLCAyNDMsIDEzNSwgMTc0LCAxLCAyNDIsIDI0OSwgCi0gICAgMTc0LCAxLCAyMjksIDc3LCAxNzQsIDEsIDI1MSwgMzMsIDE3NCwgMSwgMjUwLCAxNTcsIDE3NCwgMSwgMjM1LCAxNDEsIAotICAgIDE3NCwgMSwgMjM1LCAxMTQsIDE3NCwgMSwgMjI3LCAxNjUsIDE3NCwgMSwgMjE1LCAxNTYsIDE3NCwgMSwgMjE1LCAxNDQsIAotICAgIDE3NCwgMSwgMjQ4LCAxMzUsIDE3NCwgMSwgMjQ4LCAxMTksIDE3NCwgMSwgMjI4LCAxMTAsIDE3NCwgMSwgMjE3LCAxMDUsIAotICAgIDE3NCwgMSwgMjE2LCAyMDgsIDE3NCwgMSwgMjQ4LCAyMjEsIDE3NCwgMSwgMjQ4LCAyNSwgMTc0LCAxLCAxOTcsIDE3NCwgMSwgCi0gICAgMTkwLCAxNzQsIDEsIDIyNSwgMTQ3LCAxNzQsIDEsIDI1MiwgMTkxLCAxNzQsIDEsIDI1MiwgMTgsIDE3NCwgMSwgMTg0LCAKLSAgICAxNzQsIDEsIDE5MSwgMTc0LCAxLCAyMDUsIDE3NCwgMSwgMjMzLCAxMzUsIDE3NCwgMSwgMjMyLCAxODQsIDE3NCwgMSwgCi0gICAgMjE0LCAyNywgMTc0LCAxLCAyMjAsIDEwMiwgMTc0LCAxLCAyMTgsIDIyMywgMTc0LCAxLCAyMDYsIDE3NCwgMSwgMTYyLCAKLSAgICAxNzQsIDI1LCA1LCAyNTUsIDczLCAxNzQsIDI1LCA1LCA3MywgMTc0LCAyNSwgNSwgMjM2LCAzMywgMTc0LCAyNSwgNSwgNzAsIAotICAgIDE3NCwgMjUsIDUsIDIxNCwgMTE4LCAxNzQsIDI1LCA1LCAxNDksIDE1MywgMTc0LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgCi0gICAgMTc0LCAyNSwgNSwgMTQ5LCAxNTYsIDE3NCwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE3NCwgMjUsIDUsIDc1LCAxNzQsIDI1LCAKLSAgICA1LCAyNTQsIDIwMSwgMTc0LCAyNSwgNSwgNzYsIDE3NCwgMjUsIDUsIDI1MywgMTkyLCAxNzQsIDUsIDIxMywgMTUyLCAxNzQsIAotICAgIDUsIDI1MywgMTc1LCAxNzQsIDUsIDIzNSwgMTAyLCAxNzQsIDUsIDIxNCwgMTYxLCAxNzQsIDIyNiwgMjA0LCAxNzQsIDI0OCwgCi0gICAgMTc4LCAxNzQsIDUyLCAyNDgsIDE3OCwgMTc0LCAyNTUsIDIxLCA1MCwgMTc0LCAyMjAsIDEzNywgMTc0LCAyMSwgMjEwLCAKLSAgICA4NiwgMTc0LCAyMSwgMTEwLCAxNzQsIDIxLCAxMDUsIDE3NCwgMjEsIDE1OCwgMTc0LCAyMSwgMTYxLCAxNzQsIDIxLCAxODksIAotICAgIDE3NCwgMjEsIDE5NCwgMTc0LCAyMSwgMTk4LCAxNzQsIDIxLCAxOTUsIDE3NCwgMjEsIDIwMCwgMjE3LCA2OSwgMSwgNjEsIAotICAgIDIxNywgNjksIDEsIDI1NSwgNzMsIDIxNywgNjksIDEsIDczLCAyMTcsIDY5LCAxLCAyMzYsIDMzLCAyMTcsIDY5LCAxLCA3MCwgCi0gICAgMjE3LCA2OSwgMSwgMjE0LCAxMTgsIDIxNywgNjksIDEsIDc1LCAyMTcsIDY5LCAxLCAyNTQsIDIwMSwgMjE3LCA2OSwgMSwgCi0gICAgNzYsIDIxNywgNjksIDEsIDI1MywgMTkyLCAyMTcsIDY5LCAxLCAxNzYsIDIxNywgNjksIDEsIDIzNCwgMTMyLCAyMTcsIDY5LCAKLSAgICAxLCAyNDMsIDEzNSwgMjE3LCA2OSwgMSwgMjQyLCAyNDksIDIxNywgNjksIDEsIDIyOSwgNzcsIDIxNywgNjksIDEsIDI1MSwgCi0gICAgMzMsIDIxNywgNjksIDEsIDI1MCwgMTU3LCAyMTcsIDY5LCAxLCAyMzUsIDE0MSwgMjE3LCA2OSwgMSwgMjM1LCAxMTQsIAotICAgIDIxNywgNjksIDEsIDIyNywgMTY1LCAyMTcsIDY5LCAxLCAyMTUsIDE1NiwgMjE3LCA2OSwgMSwgMjE1LCAxNDQsIDIxNywgCi0gICAgNjksIDEsIDI0OCwgMTM1LCAyMTcsIDY5LCAxLCAyNDgsIDExOSwgMjE3LCA2OSwgMSwgMjI4LCAxMTAsIDIxNywgNjksIDEsIAotICAgIDIxNywgMTA1LCAyMTcsIDY5LCAxLCAyMTYsIDIwOCwgMjE3LCA2OSwgMSwgMjQ4LCAyMjEsIDIxNywgNjksIDEsIDI0OCwgCi0gICAgMjUsIDIxNywgNjksIDEsIDE5NywgMjE3LCA2OSwgMSwgMTkwLCAyMTcsIDY5LCAxLCAyMjUsIDE0NywgMjE3LCA2OSwgMSwgCi0gICAgMjUyLCAxOTEsIDIxNywgNjksIDEsIDI1MiwgMTgsIDIxNywgNjksIDEsIDE4NCwgMjE3LCA2OSwgMSwgMTkxLCAyMTcsIDY5LCAKLSAgICAxLCAyMDUsIDIxNywgNjksIDEsIDIzMywgMTM1LCAyMTcsIDY5LCAxLCAyMTQsIDI3LCAyMTcsIDY5LCAxLCAyMjAsIDEwMiwgCi0gICAgMjE3LCA2OSwgMSwgMjA2LCAyMTcsIDY5LCAxLCAxNjIsIDIxNywgNjksIDEsIDIyMiwgMTc5LCAyMTcsIDY5LCA1LCAyNTQsIAotICAgIDc1LCAyMTcsIDY5LCA1LCAyMTMsIDE0NywgMjE3LCA2OSwgMjUsIDUsIDI1NSwgNzMsIDIxNywgNjksIDI1LCA1LCA3MywgCi0gICAgMjE3LCA2OSwgMjUsIDUsIDIzNiwgMzMsIDIxNywgNjksIDI1LCA1LCA3MCwgMjE3LCA2OSwgMjUsIDUsIDIxNCwgMTE4LCAKLSAgICAyMTcsIDY5LCAyNSwgNSwgNzUsIDIxNywgNjksIDI1LCA1LCAyNTQsIDIwMSwgMjE3LCA2OSwgMjUsIDUsIDc2LCAyMTcsIAotICAgIDY5LCAyNSwgNSwgMjUzLCAxOTIsIDIxNywgNjksIDUsIDIxMywgMTUyLCAyMTcsIDY5LCA1LCAyMjcsIDIwNSwgMjE3LCA2OSwgCi0gICAgMjEsIDIxMCwgODYsIDIxNywgNjksIDIxLCAxMTAsIDIxNywgNjksIDIxLCAxMDUsIDIxNywgNjksIDIxLCAxNTgsIDIxNywgCi0gICAgNjksIDIxLCAxNjEsIDIxNywgNjksIDIxLCAxODksIDIxNywgNjksIDIxLCAxOTQsIDIxNywgNjksIDIxLCAxOTgsIDIxNywgCi0gICAgNjksIDIxLCAxOTUsIDIxNywgNjksIDIxLCAyMDAsIDE1LCA1LCA2MSwgMTUsIDUsIDExNSwgMzAsIDYxLCAxNSwgNSwgMTE1LCAKLSAgICAzMCwgMjUyLCAxNzYsIDE1LCA1LCAxMTUsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAxMTUsIDMwLCAxNjIsIAotICAgIDE1LCA1LCAxMTUsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMTE1LCAzMCwgMjMzLCAxMTYsIDI0MiwgOTQsIDE1LCA1LCAxMTUsIAotICAgIDMwLCAyMzAsIDYxLCAxNSwgNSwgMTE1LCAzMCwgMjIyLCAyMSwgMTUsIDUsIDI1NSwgNzUsIDE1LCA1LCAyNTUsIDI1LCAxNSwgCi0gICAgNSwgMjU1LCAyNiwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjU1LCAyNiwgMzAsIDI0NiwgNjcsIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyNTUsIDI2LCAzMCwgMjQzLCAxMTgsIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjU1LCAyNiwgMzAsIDE2MiwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjU1LCAyNiwgCi0gICAgMzAsIDIzNiwgOSwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMzMsIDExNywgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMjAsIDQ4LCAKLSAgICAxNSwgNSwgMjU1LCAyNiwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDcwLCAxNSwgNSwgMjU1LCAyNiwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI1NSwgMjMsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjUyLCAxNjAsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjQzLCAxMDUsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjU1LCAyNCwgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyMjAsIAotICAgIDEwMCwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjU0LCAyNTUsIDE1LCA1LCAyNTQsIDE4NiwgMTUsIAotICAgIDUsIDI1NCwgMTg3LCAzMCwgMjQ1LCA4NywgMTUsIDUsIDI1NCwgMTg3LCAzMCwgMjIwLCAxMCwgOTYsIDI0MiwgMTkwLCAxNSwgCi0gICAgNSwgMjU0LCAxNzgsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDI1NCwgMTc4LCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyNDcsIAotICAgIDIxNiwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjQyLCAxOTAsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDE2MiwgMTUsIDUsIDI1NCwgCi0gICAgMTc5LCAzMCwgMjM0LCAyNTUsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDIzNCwgOTIsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIAotICAgIDIyMCwgNjMsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjU0LCAxNzUsIDE1LCA1LCAyNTQsIDE2OCwgCi0gICAgMTUsIDUsIDI1NCwgMTMyLCAxNSwgNSwgMjU0LCAxMzMsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjU0LCAxMjMsIDE1LCA1LCAKLSAgICAyNTQsIDEyNCwgMTE3LCAyNTQsIDEyMywgMTUsIDUsIDI1NCwgMTI0LCAxMzQsIDIxNiwgODUsIDE1LCA1LCAyNTQsIDEyNCwgCi0gICAgOTYsIDIyOSwgMjE3LCAyMjYsIDE2NCwgMjU0LCAxMjQsIDk2LCAyMjksIDIxNiwgMTUsIDUsIDI1NCwgMTI0LCA5NiwgMjI5LCAKLSAgICAyMTcsIDIxOCwgMjMzLCAxNSwgNSwgMjU0LCA5NCwgMTUsIDUsIDI1NCwgNjcsIDE1LCA1LCAyNTQsIDM1LCAxNSwgNSwgCi0gICAgMjU0LCAzNiwgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjU0LCA4LCAxNSwgNSwgMjUzLCAyMzYsIDE1LCA1LCAyNTMsIDIzMSwgCi0gICAgMTUsIDUsIDI1MywgMjMyLCAyMTAsIDQwLCAyMTYsIDIzOSwgMTUsIDUsIDI1MywgMjMyLCAyMzUsIDMsIDIxNiwgMjM5LCAKLSAgICAxNSwgNSwgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDIxNSwgMTE0LCAxMTcsIDIxNSwgMTE0LCAyMTUsIDExNCwgMTE3LCAKLSAgICAyMTUsIDExNCwgMjI2LCAyMSwgMTUsIDUsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMxLCAxNSwgNSwgCi0gICAgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDI0OSwgMTI1LCAyNTMsIDIzMiwgMTE3LCAyNTMsIAotICAgIDIzMiwgMTE3LCAyNTMsIDIzMSwgMTUsIDUsIDI1MywgMjI5LCAxNSwgNSwgMjUzLCAyMjYsIDE1LCA1LCAyNTIsIDE5MSwgCi0gICAgMTUsIDUsIDI1MiwgMTc2LCAxNSwgNSwgMjUyLCAxNzEsIDE1LCA1LCAyNTIsIDE2NywgMTUsIDUsIDI1MiwgMTYxLCAxNSwgCi0gICAgNSwgMjUyLCAxNjIsIDExNywgMjUyLCAxNjEsIDE1LCA1LCAyNTIsIDE2MCwgMTUsIDUsIDEzMCwgMTUsIDUsIDI1MiwgMTQwLCAKLSAgICAxNSwgNSwgMjUyLCA2LCAxNSwgNSwgMjUyLCA3LCAzMCwgNjEsIDE1LCA1LCAyNTIsIDcsIDMwLCAyNDMsIDk2LCAxNSwgNSwgCi0gICAgMjUyLCA3LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI1MSwgMTI1LCAxNSwgNSwgMjUxLCAxMjYsIDExNywgMjUxLCAKLSAgICAxMjYsIDI1NSwgMjUsIDE1LCA1LCAyNTEsIDEyNiwgMTE3LCAyNTEsIDEyNiwgMjE0LCAxOTAsIDE1LCA1LCAyNTEsIDEyNiwgCi0gICAgMjQ5LCAxMjUsIDI1MSwgMTI1LCAxNSwgNSwgMjUxLCAxMDksIDE1LCA1LCAyNTEsIDExMCwgMTE3LCAyNTEsIDEwOSwgMTUsIAotICAgIDUsIDI1MSwgOTgsIDE1LCA1LCAyNTEsIDk3LCAxNSwgNSwgMjQ4LCAyMjEsIDE1LCA1LCAyNDgsIDIxMiwgMTUsIDUsIDI0OCwgCi0gICAgMjEzLCAyMzQsIDY2LCAzMCwgMTE1LCA5NiwgMjMxLCAxNDcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI1NCwgCi0gICAgMTMyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNTIsIDE2MCwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAKLSAgICAzMCwgMjUyLCA2LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIAotICAgIDY2LCAzMCwgMjQzLCAxMzYsIDk2LCAyMzEsIDE0NywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjQyLCAyMTQsIAotICAgIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI0MiwgMTk3LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAKLSAgICAyNDIsIDEwMywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMTYyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIAotICAgIDMwLCAyMzUsIDE3OSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjM1LCAxODAsIDk2LCAyMzIsIDk4LCAxNSwgNSwgCi0gICAgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMzLCAxMzUsIAotICAgIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMiwgOTgsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMiwgCi0gICAgOTksIDk2LCAyMzEsIDE0NiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMyLCA4NCwgMTUsIDUsIDI0OCwgMjEzLCAKLSAgICAyMzQsIDY2LCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIyNiwgMjIsIDk2LCAyMjYsIAotICAgIDIxLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMTksIDE5MSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgCi0gICAgMjE3LCA3MiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjE0LCAyMzEsIDk2LCAyNDIsIDE5NywgMTUsIDUsIAotICAgIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyNDgsIDE4NywgMTUsIDUsIDI0OCwgMTY2LCAxNSwgNSwgCi0gICAgMjQ4LCAxNjUsIDE1LCA1LCAyNDgsIDE2NCwgMTUsIDUsIDI0OCwgMywgMTUsIDUsIDI0NywgMjQyLCAxNSwgNSwgMjQ3LCAKLSAgICAyMTcsIDE1LCA1LCAyNDcsIDIxOCwgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNDcsIDIxNiwgMTUsIDUsIDI0NywgMjA2LCAxNSwgCi0gICAgNSwgMjQ3LCAyMDcsIDIzNCwgMjA4LCAxMDQsIDI0MiwgOTUsIDI0NywgMTg3LCAxNSwgNSwgMjQ3LCAxODcsIDE1LCA1LCAKLSAgICAyNDYsIDc4LCAxNSwgNSwgMjQ2LCA3OSwgMTE3LCAyNDYsIDc4LCAxNSwgNSwgMjQ2LCA3OSwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI0NiwgNzksIDIyMCwgNDUsIDE1LCA1LCAyNDYsIDc2LCAxNSwgNSwgMjQ2LCA3NywgMzAsIDI0NSwgNzIsIDE1LCA1LCAKLSAgICAyNDYsIDc1LCAxNSwgNSwgMjQ2LCA3NCwgMTUsIDUsIDI0NiwgNzMsIDE1LCA1LCAyNDYsIDcyLCAxNSwgNSwgMjQ2LCA2OCwgCi0gICAgMTUsIDUsIDI0NiwgNjYsIDE1LCA1LCAyNDYsIDY3LCAyNDIsIDk0LCAxNSwgNSwgMjQ2LCA2NywgMjQyLCA5NSwgMjQyLCAKLSAgICA5NCwgMTUsIDUsIDI0NiwgNjUsIDE1LCA1LCAyNDYsIDU4LCAxNSwgNSwgNzUsIDE1LCA1LCAxNjAsIDMwLCAyMjYsIDIxLCAKLSAgICAxNSwgNSwgMTYwLCAxMTcsIDE2MCwgMjI3LCAxOTUsIDExNywgMjI3LCAxOTQsIDE1LCA1LCAyNDUsIDIzNCwgMTUsIDUsIAotICAgIDI0NSwgMjM1LCAzMCwgMTE1LCA5NiwgMjQyLCA0OSwgOTYsIDI0OCwgMjIxLCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCAyNDMsIAotICAgIDk2LCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDI0NSwgMjM1LCAzMCwgMjIyLCA4LCAxNSwgNSwgCi0gICAgMjQ1LCAyMzUsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCA3MCwgMTUsIDUsIDI0NSwgMjExLCAxNSwgNSwgCi0gICAgMjQ1LCAyMDAsIDE1LCA1LCAyNDUsIDE3NCwgMTUsIDUsIDI0NSwgMTUwLCAxNSwgNSwgMjQ1LCAxNTEsIDMwLCAyNDMsIAotICAgIDEwNCwgMTUsIDUsIDI0NSwgMTUxLCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjQ1LCAxNTEsIDMwLCAyMzEsIAotICAgIDkxLCAxNSwgNSwgMjQ1LCAxNTEsIDI0OSwgMTI1LCAyNDUsIDE1MCwgMTUsIDUsIDI0NSwgMTUxLCAyMjYsIDE2NCwgMjQ1LCAKLSAgICAxNTAsIDE1LCA1LCAyNDUsIDE1MSwgMjE4LCAyMzMsIDE1LCA1LCAyNDUsIDg5LCAxNSwgNSwgMjQ1LCA4NywgMTUsIDUsIAotICAgIDI0NSwgNzIsIDE1LCA1LCAyNDUsIDEwLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDYxLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDExNSwgCi0gICAgOTYsIDIzMywgMTA0LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDExNSwgOTYsIDIzMywgMTA1LCAzMCwgMjMzLCAxMDQsIDE1LCA1LCAKLSAgICAyNDUsIDExLCAzMCwgMjU0LCAxMjMsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjQ2LCA2NywgMjQyLCA5NCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyNDYsIDY3LCAyNDIsIDk1LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjQ1LCAxMSwgMzAsIDE2MiwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyNDIsIDQ5LCAyNDIsIDk0LCAxNSwgNSwgMjQ1LCAxMSwgCi0gICAgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjM0LCAyMDgsIDIxOCwgMjMzLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzMywgMjE1LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIAotICAgIDIzMywgMTM1LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzMywgMTA1LCAzMCwgMjMzLCAxMDQsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjMyLCAyNDEsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjMyLCA5OCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMTQsIDIzMCwgMTUsIAotICAgIDUsIDI0NSwgMTEsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTM1LCAxNSwgNSwgMjQzLCAxMzYsIDI0MiwgOTQsIDE1LCAKLSAgICA1LCAyNDMsIDEzMywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMTE1LCA5NiwgMjQ4LCAyMjIsIDk2LCAxNjIsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDExNSwgOTYsIDE2MiwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMTE1LCA5NiwgMjM2LCAzNSwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjU1LCAyNCwgMjE2LCAyNDAsIDk2LCAyMTcsIDkzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTQsIDEyMywgCi0gICAgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUzLCAyMzEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MywgMjMwLCA5NiwgMjQzLCAKLSAgICAxMTgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTIsIDE0MSwgOTYsIAotICAgIDIwNSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUxLCA5OCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUxLCA5OSwgOTYsIDIwNSwgCi0gICAgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ4LCAyMjEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0OCwgMywgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQ3LCAyMTgsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDYsIDc2LCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNDUsIDE3NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ1LCAxNzUsIDk2LCAyMzMsIDEzNSwgMTUsIDUsIAotICAgIDI0MywgMTM0LCAzMCwgMjQ1LCAxNTAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0NSwgMTUxLCAzMCwgMjQzLCAxMDUsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MywgCi0gICAgOTYsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMjE0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDIxMiwgMTUsIDUsIAotICAgIDI0MywgMTM0LCAzMCwgMjQyLCAyMTMsIDk2LCA2MSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCAxOTgsIDk2LCAyMTgsIAotICAgIDgzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDQ5LCA5NiwgMjMyLCA5OSwgOTYsIDI0NSwgNzIsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI0MiwgMzAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMzEsIDk2LCAyMzMsIDEzNSwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQxLCAxODEsIDk2LCAyMzIsIDI0MSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQwLCAyMTgsIDE1LCA1LCAKLSAgICAyNDMsIDEzNCwgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzNSwgMTY2LCA5NiwgMjQwLCAKLSAgICAyMjMsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIAotICAgIDIzNCwgMjA3LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzQsIDg5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzQsIDkwLCA5NiwgCi0gICAgMjMzLCAxMDQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzMywgMjE2LCA5NiwgMjU0LCAxMjMsIDE1LCA1LCAyNDMsIDEzNCwgCi0gICAgMzAsIDIzMywgMTM1LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzEsIDkyLCA5NiwgMjQ1LCAxNTAsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgCi0gICAgMjI3LCAxOTUsIDExNywgMjI3LCAxOTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDE5MCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgCi0gICAgMjIyLCA4LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjEsIDIzMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjIwLCA2MywgMTUsIAotICAgIDUsIDI0MywgMTM0LCAzMCwgMjIwLCA2NCwgOTYsIDIxNSwgOTgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIyMCwgMzAsIDE1LCAKLSAgICA1LCAyNDMsIDEzNCwgMzAsIDIxOCwgNDMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIxNywgNzIsIDE1LCA1LCAyNDMsIDEzNCwgCi0gICAgMzAsIDcwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjE0LCAyMjAsIDk2LCAKLSAgICAyNDYsIDc4LCAxNSwgNSwgMjQzLCAxMzQsIDExNywgMjQzLCAxMzMsIDE1LCA1LCAyNDMsIDEyOCwgMTUsIDUsIDI0MywgCi0gICAgMTI5LCAyNDksIDEyNSwgMjQzLCAxMjgsIDE1LCA1LCAyNDMsIDEyNiwgMTUsIDUsIDI0MywgMTI3LCAxMTcsIDI0MywgMTI3LCAKLSAgICAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAyNDMsIDExOCwgMTUsIDUsIDI0MywgMTE5LCAyNDMsIDEyNywgMTE3LCAKLSAgICAyNDMsIDEyNywgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAxNSwgNSwgMjQzLCAxMTcsIDE1LCA1LCAyNDMsIDExNSwgMTUsIDUsIAotICAgIDI0MywgMTA2LCAxNSwgNSwgMjQzLCAxMDQsIDE1LCA1LCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDMsIDEwNSwgCi0gICAgMTE3LCAyNDMsIDEwNCwgMTUsIDUsIDI0MywgMTA1LCAyNDksIDEyNSwgMjQzLCAxMDQsIDE1LCA1LCAyNDMsIDk2LCAxNSwgCi0gICAgNSwgMjQzLCA5NSwgMTUsIDUsIDI0MywgOTAsIDE1LCA1LCAyNDMsIDM2LCAxNSwgNSwgMjQzLCAzNywgMzAsIDIzMywgMTk2LCAKLSAgICAxNSwgNSwgMjQyLCAyMTQsIDE1LCA1LCAyNDIsIDIxNSwgMzAsIDc1LCAxNSwgNSwgMjQyLCAyMTUsIDMwLCA3MCwgMTUsIDUsIAotICAgIDI0MiwgMjE1LCAyNDksIDEyNSwgMjQyLCAyMTQsIDE1LCA1LCAyNDIsIDIxMiwgMTUsIDUsIDI0MiwgMjEzLCAxMTcsIDI0MiwgCi0gICAgMjEyLCAxNSwgNSwgMjQyLCAyMTMsIDI0OSwgMTI1LCAyNDIsIDIxMiwgMTUsIDUsIDI0MiwgMjA5LCAxNSwgNSwgMjQyLCAKLSAgICAxOTcsIDE1LCA1LCAyNDIsIDE5OCwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMTk1LCAxNSwgNSwgMjQyLCAxOTYsIDMwLCAxMTUsIAotICAgIDk2LCAyMzYsIDM1LCAxNSwgNSwgMjQyLCAxOTYsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDIsIDE5NiwgCi0gICAgMzAsIDIzNiwgMzUsIDE1LCA1LCAyNDIsIDE5NiwgMzAsIDIzMiwgOTksIDk2LCAyMzYsIDM1LCAxNSwgNSwgMjQyLCAxOTYsIAotICAgIDMwLCAxOTAsIDE1LCA1LCAyNDIsIDE5MiwgMTUsIDUsIDI0MiwgMTkwLCAxNSwgNSwgMjQyLCAxOTEsIDI0OSwgMTI1LCAKLSAgICAyNDIsIDE5MCwgMTUsIDUsIDI0MiwgMTkxLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyNDIsIDE5MSwgMzAsIDIxNywgNzIsIAotICAgIDE1LCA1LCAyNDIsIDE5MSwgMjE2LCAyMzksIDE1LCA1LCAyNDIsIDExMywgMTUsIDUsIDI0MiwgMTE0LCAyNDksIDEyNSwgCi0gICAgMjQyLCAxMTMsIDE1LCA1LCAyNDIsIDExMSwgMTUsIDUsIDI0MiwgMTEyLCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyNDIsIAotICAgIDExMiwgMzAsIDIzNCwgMjQzLCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMTEyLCAzMCwgMjI3LCAxOTQsIAotICAgIDE1LCA1LCAyNDIsIDExMiwgMzAsIDIyMiwgOSwgOTYsIDIxNSwgMTEzLCAxNSwgNSwgMjQyLCAxMTIsIDI0MiwgOTQsIDE1LCAKLSAgICA1LCAyNDIsIDEwMywgMTUsIDUsIDI0MiwgMTA0LCAzMCwgMTE1LCA5NiwgMjMzLCAxOTYsIDE1LCA1LCAyNDIsIDEwNCwgMzAsIAotICAgIDIzMywgMTk2LCAxNSwgNSwgMjQyLCAxMDQsIDExNywgMjQyLCAxMDQsIDIzMiwgOTEsIDE1LCA1LCAyNDIsIDk4LCAxNSwgNSwgCi0gICAgMjQyLCA5NiwgMTUsIDUsIDI0MiwgOTcsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQyLCA4OCwgMTUsIDUsIDI0MiwgODcsIDE1LCAKLSAgICA1LCAyNDIsIDg0LCAxNSwgNSwgMjQyLCA4MywgMTUsIDUsIDE2MiwgMTUsIDUsIDI0MiwgNDksIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjQyLCA0OSwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMzAsIDE1LCA1LCAyNDEsIDE4MCwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgCi0gICAgMjUzLCAyMzEsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyNTIsIDE3NiwgCi0gICAgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjQ3LCAxODcsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI0MywgMTI2LCAxNSwgNSwgMjQxLCAKLSAgICAxODEsIDMwLCAyMzQsIDgxLCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgCi0gICAgMjIwLCA2MywgMTUsIDUsIDI0MSwgMTgxLCAzMCwgNzAsIDE1LCA1LCAyNDAsIDIyMiwgMTUsIDUsIDI0MCwgMjE4LCAxNSwgCi0gICAgNSwgMjQwLCAyMTksIDMwLCAyNTQsIDEyMywgMTUsIDUsIDI0MCwgMjE5LCAzMCwgMjQyLCAzMCwgMTUsIDUsIDI0MCwgMjE5LCAKLSAgICAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyNDAsIDIxOSwgMzAsIDIzMiwgMTk3LCAxNSwgNSwgMjQwLCAyMTksIDMwLCAyMTQsIAotICAgIDIxOSwgMTUsIDUsIDI0MCwgMjE1LCAxNSwgNSwgNzMsIDE1LCA1LCAyNDAsIDE1NCwgNjEsIDE1LCA1LCAyNDAsIDExNSwgCi0gICAgMTUsIDUsIDIzNiwgNjMsIDE1LCA1LCAyMzYsIDY0LCAxMTcsIDIzNiwgNjQsIDI1MSwgOTgsIDE1LCA1LCAyMzYsIDY0LCAKLSAgICAxMTcsIDIzNiwgNjQsIDIxOCwgMjMzLCAxNSwgNSwgMjM2LCAzOCwgMTUsIDUsIDIzNiwgMzUsIDE1LCA1LCAyMzYsIDM2LCAKLSAgICAyNDcsIDI0MiwgMTUsIDUsIDIzNiwgMzYsIDIyMywgMzUsIDE1LCA1LCAyMzYsIDM2LCAxMTcsIDIzNiwgMzYsIDIyMCwgMTQsIAotICAgIDExNywgMjIwLCAxNCwgMjE0LCAyMjAsIDExNywgMjE0LCAyMTksIDE1LCA1LCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjM2LCAyNywgMTUsIDUsIDIzNiwgMjgsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMzYsIDI2LCAxNSwgNSwgCi0gICAgMjM2LCAxNiwgMTUsIDUsIDIzNiwgMTcsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjM2LCAxNywgMjQ5LCAxMjUsIDIzNiwgMTYsIAotICAgIDE1LCA1LCAyMzYsIDE3LCAyMjYsIDE2NCwgMjM2LCAxNiwgMTUsIDUsIDIzNiwgMTcsIDIxOCwgMjMzLCAxNSwgNSwgMjM2LCAKLSAgICA5LCAxNSwgNSwgMjM1LCAyNTUsIDE1LCA1LCAyMzUsIDE3OSwgMTUsIDUsIDIzNSwgMTY1LCAxNSwgNSwgMTc2LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDYxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1NCwgMjU1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1NSwgCi0gICAgMCwgOTYsIDIzMywgMjE1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MiwgCi0gICAgMTc2LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MiwgMTYwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDEzMCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQ1LCA4NywgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDUsIDcyLCAKLSAgICAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MywgMTM1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MywgMTE4LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjM1LCAxMywgCi0gICAgMzAsIDI0MywgOTcsIDk2LCAyMjAsIDEwMSwgOTYsIDYxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgMjE0LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDI0MiwgMTk3LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgMTkxLCA5NiwgMjIxLCAyMzEsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjQyLCAxOTEsIDI0OSwgMTI1LCAyNDIsIDE5MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDExMywgCi0gICAgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDg3LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNiwgMzUsIDE1LCA1LCAyMzUsIDEzLCAKLSAgICAzMCwgMjM2LCAxNiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzQsIDkyLCAKLSAgICAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNCwgODksIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMyLCAyNDEsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjMyLCA5OCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzEsIDkxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMSwgCi0gICAgOTIsIDk2LCAyNDYsIDc4LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMSwgOTIsIDk2LCAyNDIsIDIxNCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMzEsIDkyLCA5NiwgMjE3LCAyMiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMzAsIDIzMSwgOTYsIDIyNywgMTg5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyNSwgMTA4LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMiwgCi0gICAgMTQwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIwNiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjEsIDIzMSwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMjAsIDEwMiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMCwgCi0gICAgMzAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE5LCAxODIsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjE4LCA1MSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTcsIDUwLCAxNSwgNSwgMjM1LCAxMywgMzAsIAotICAgIDcwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMjE5LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDIxNCwgMTkzLCAzMCwgMTkwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIxMCwgNDQsIDE1LCA1LCAyMzUsIDExLCAxNSwgNSwgMjM1LCAxMiwgMjQ5LCAxMjUsIDIzNSwgMTEsIDE1LCAKLSAgICA1LCAyMzUsIDQsIDE1LCA1LCAyMzUsIDEsIDE1LCA1LCAyMzQsIDI1NSwgMTUsIDUsIDIzNCwgMjU0LCAxNSwgNSwgMjM0LCAKLSAgICAyNTIsIDE1LCA1LCAyMzQsIDI1MywgMTE3LCAyMzQsIDI1MiwgMTUsIDUsIDIzNCwgMjQyLCAxNSwgNSwgMjM0LCAyNDMsIAotICAgIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjM0LCAyMzgsIDE1LCA1LCAyMzQsIDIzOSwgMzAsIDI1MiwgMTc2LCAxNSwgCi0gICAgNSwgMjM0LCAyMzksIDI0OSwgMTI1LCAyMzQsIDIzOCwgMTUsIDUsIDIzNCwgMjM2LCAxNSwgNSwgMjM0LCAyMzUsIDE1LCA1LCAKLSAgICAyMzQsIDIwNywgMTUsIDUsIDIzNCwgMjA4LCAyMzMsIDExOCwgMzAsIDEwNCwgMTE3LCAyMzMsIDExOCwgMzAsIDcwLCAxNSwgCi0gICAgNSwgMjM0LCAyMDgsIDExNywgMjM0LCAyMDgsIDIzMywgMTE4LCAzMCwgMTA0LCAxMTcsIDIzMywgMTE4LCAzMCwgNzAsIDE1LCAKLSAgICA1LCAyMzQsIDE1NywgMTUsIDUsIDIzNCwgOTIsIDE1LCA1LCAyMzQsIDkzLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzQsIAotICAgIDkzLCAzMCwgNzAsIDE1LCA1LCAyMzQsIDkzLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMzQsIDg5LCAxNSwgNSwgMjM0LCA4MSwgCi0gICAgMTUsIDUsIDIzNCwgNjgsIDE1LCA1LCAyMzQsIDY3LCAxNSwgNSwgMjM0LCA2NSwgMTUsIDUsIDIzNCwgNjYsIDExNywgMjM0LCAKLSAgICA2NSwgMTUsIDUsIDIzMywgMjE3LCAxNSwgNSwgMjMzLCAyMTgsIDExNywgMjQxLCAxODEsIDMwLCAyNTMsIDIzMCwgMjMzLCAKLSAgICAyMTgsIDExNywgMjQxLCAxODEsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDIzMywgMjE1LCAxNSwgNSwgMjMzLCAyMTMsIDE1LCAKLSAgICA1LCAyMzMsIDIxNCwgMjE0LCAxMiwgMTcsIDE1LCA1LCAyMzMsIDIxMiwgMTUsIDUsIDIzMywgMjA5LCAxNSwgNSwgMjMzLCAKLSAgICAyMTAsIDI0MiwgOTQsIDE1LCA1LCAyMzMsIDIwOCwgMTUsIDUsIDIzMywgMTk2LCAxNSwgNSwgMjMzLCAxOTcsIDIyNiwgCi0gICAgMTY0LCAyMzMsIDE5NiwgMTUsIDUsIDIzMywgMTkxLCAxNSwgNSwgMjMzLCAxNzIsIDE1LCA1LCAyMzMsIDEzNSwgMTUsIDUsIAotICAgIDIzMywgMTE3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCA2MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMTE1LCA5NiwgMjQ4LCAKLSAgICAyMjIsIDk2LCAxNjIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDExNSwgOTYsIDI0MywgOTYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDExNSwgOTYsIDIzMywgMTA0LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNTQsIDE3OCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMjU0LCAxMjMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI1MywgMjMyLCAyMTAsIDQwLCAyMTYsIDIzOSwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI1MiwgNiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQ4LCAKLSAgICAxNjYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0NSwgMTUwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDI0MiwgMTA0LCA5NiwgMjQyLCAxMDMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDE2MiwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjQyLCAzMCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQxLCAxODEsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjM2LCAxNiwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjM2LCAxNywgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjM2LCAxNywgOTYsIDIzMiwgOTgsIDE1LCA1LCAKLSAgICAyMzMsIDExOCwgMzAsIDIzNCwgOTIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzNCwgODEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDIzMywgMjE1LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzMsIDIwOSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMzLCAyMTAsIAotICAgIDk2LCAyNDEsIDE4MSwgOTYsIDYxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzMsIDExNywgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMjMyLCAxOTcsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMiwgOTgsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMiwgODYsIDE1LCAKLSAgICA1LCAyMzMsIDExOCwgMzAsIDIzMSwgOTEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIAotICAgIDUsIDIzMywgMTE4LCAzMCwgMjMwLCA2MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDIyMCwgNjQsIDk2LCAyMTgsIDQzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMjAsIDEwLCA5NiwgMjQyLCAxOTEsIDk2LCAKLSAgICAyNDUsIDg3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMjAsIDEwLCA5NiwgMjQyLCAxOTEsIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjMzLCAxMTgsIDMwLCAyMTksIDIyMywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE5LCAyMjQsIDk2LCAyMTksIDIyMywgMTUsIAotICAgIDUsIDIzMywgMTE4LCAzMCwgMjE4LCA0MywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE3LCA4NCwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjE3LCA3MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE3LCAyMywgOTYsIDExNSwgOTYsIDIxOCwgODQsIDk2LCAxOTcsIAotICAgIDE1LCA1LCAyMzMsIDExOCwgMzAsIDcwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNzAsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAKLSAgICAyMzEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAyMTgsIDIzMywgMTUsIDUsIDIzMywgMTE1LCAxNSwgNSwgMjMzLCAxMTYsIDMwLCAyMjAsIDYzLCAxNSwgNSwgCi0gICAgMjMzLCAxMTYsIDMwLCAyMjAsIDY0LCA5NiwgMjE4LCA0MywgMTUsIDUsIDIzMywgMTE2LCAyNDIsIDk0LCAxNSwgNSwgMjMzLCAKLSAgICAxMTYsIDI0MiwgOTUsIDExNywgMjMzLCAxMTYsIDI0MiwgOTUsIDIyMCwgNjMsIDE1LCA1LCAyMzMsIDExMSwgMTUsIDUsIAotICAgIDIzMywgMTA0LCAxNSwgNSwgMjMzLCAxMDUsIDMwLCAyMzMsIDEwNCwgMTUsIDUsIDIzMywgMTAyLCAxNSwgNSwgMjMzLCAKLSAgICAxMDMsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIzMywgMTAzLCAzMCwgMjMzLCAxOTcsIDk2LCAyMjIsIDE0MCwgMTUsIDUsIAotICAgIDIzMiwgMjQxLCAxNSwgNSwgMjMyLCAyMjYsIDE1LCA1LCAyMzIsIDIxNiwgMTUsIDUsIDIzMiwgMTk3LCAxNSwgNSwgMjMyLCAKLSAgICA5OCwgMTUsIDUsIDIzMiwgOTksIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgCi0gICAgMjU0LCAxNzgsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjQ1LCA3MiwgMTUsIAotICAgIDUsIDIzMiwgOTcsIDMwLCAyNDUsIDczLCAyMTYsIDIzOSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyNDMsIDEwNSwgMjE2LCAKLSAgICAyMzksIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjQxLCAxODEsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzYsIAotICAgIDE2LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzNSwgMSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzQsIDI1NSwgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMzUsIDAsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIzMywgMTM2LCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjMxLCA5MiwgOTYsIDI0NSwgMTUwLCAxNSwgNSwgMjMyLCA5NywgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIyNywgMjM3LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIxOSwgMTkyLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjE5LCAxNzQsIDk2LCAyNTEsIDEyNSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMTUsIDExMywgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDIxNiwgMjM5LCAxNSwgNSwgMjMyLCA5NywgMjQ5LCAxMjUsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAyMjYsIAotICAgIDE2NCwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDIxOCwgMjMzLCAxNSwgNSwgMjMyLCA5NywgMjIwLCA0NSwgMTUsIDUsIAotICAgIDIzMiwgOTUsIDE1LCA1LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA5MiwgMTE3LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA5MiwgCi0gICAgMjI2LCAxNjQsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDkyLCAyMjAsIDQ1LCAxNSwgNSwgMjMyLCA4OSwgMTUsIDUsIDIzMiwgCi0gICAgODYsIDE1LCA1LCAyMzIsIDg0LCAxNSwgNSwgMjMyLCA4NSwgMTE3LCAyMzIsIDg0LCAxNSwgNSwgMjMyLCA4NSwgMTE3LCAKLSAgICAyMzIsIDg1LCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAxODQsIDE1LCA1LCAyMzEsIDIzOSwgMzAsIDIxNywgNzIsIAotICAgIDE1LCA1LCAyMzEsIDIzOSwgMjQyLCA5NCwgMTUsIDUsIDIzMSwgMjM4LCAxNSwgNSwgMjMxLCAyMTAsIDE1LCA1LCAyMzEsIAotICAgIDE2NiwgMTUsIDUsIDIzMSwgMTQ3LCAxNSwgNSwgMjMxLCAxNDYsIDE1LCA1LCAyMzEsIDkxLCAxNSwgNSwgMjMxLCA0NywgCi0gICAgMTUsIDUsIDIzMCwgMjMwLCAxNSwgNSwgMjMwLCAxODgsIDE1LCA1LCAyMzAsIDEwMiwgMTUsIDUsIDIzMCwgMTAzLCAxMTcsIAotICAgIDIzMCwgMTAyLCAxNSwgNSwgMjMwLCA5MywgMTUsIDUsIDIzMCwgOTQsIDI0MiwgOTQsIDE1LCA1LCAyMzAsIDc4LCAxNSwgNSwgCi0gICAgMjMwLCA2NCwgMTUsIDUsIDIzMCwgNjEsIDE1LCA1LCAyMzAsIDYyLCAzMCwgNjEsIDE1LCA1LCAyMzAsIDYyLCAzMCwgMjMzLCAKLSAgICAxOTYsIDE1LCA1LCAyMzAsIDYyLCAzMCwgMjEwLCAxMTYsIDE1LCA1LCAyMzAsIDYyLCAxMTcsIDIzMCwgNjEsIDE1LCA1LCAKLSAgICAyMzAsIDYyLCAxMTcsIDIzMCwgNjIsIDMwLCAxMTUsIDk2LCAxOTcsIDE1LCA1LCAyMzAsIDYyLCAyNDksIDEyNSwgMjMwLCAKLSAgICA2MSwgMTUsIDUsIDIzMCwgNTksIDE1LCA1LCAyMzAsIDYwLCAzMCwgNjEsIDE1LCA1LCAyMzAsIDYwLCAzMCwgMTE1LCA5NiwgCi0gICAgMjQ4LCAzLCAxNSwgNSwgMjMwLCA2MCwgMzAsIDI0OCwgMywgMTUsIDUsIDIzMCwgNjAsIDI0MiwgOTQsIDE1LCA1LCAxOTcsIAotICAgIDE1LCA1LCAyMjksIDIyNywgMTUsIDUsIDIyOSwgMjE2LCAxNSwgNSwgMjI5LCAyMTcsIDIzNSwgMTkyLCAxNSwgNSwgMjI5LCAKLSAgICAyMTcsIDMwLCAyMTksIDIyNiwgMjE2LCAyMzksIDE1LCA1LCAyMjksIDIxNywgMjI2LCAxNjQsIDIyOSwgMjE2LCAxNSwgNSwgCi0gICAgMjI5LCAyMTUsIDE1LCA1LCAyMjksIDIwOCwgMjI3LCAxODAsIDE1LCA1LCAyMjksIDIwNywgMTUsIDUsIDIyOSwgMjA2LCAKLSAgICAxNSwgNSwgMjI5LCAxMDcsIDE1LCA1LCAyMjksIDEwOCwgMzAsIDYxLCAxNSwgNSwgMjI5LCAxMDgsIDMwLCAyMTQsIDIxOSwgCi0gICAgMTUsIDUsIDIyOSwgMTA4LCAyMjAsIDQ1LCAxNSwgNSwgMjI4LCAyMzMsIDE1LCA1LCAyMjgsIDIzNCwgMzAsIDc1LCAxNSwgCi0gICAgNSwgMjI4LCAyMzIsIDE1LCA1LCAyMjgsIDIwMywgMTUsIDUsIDIyOCwgMjA0LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAKLSAgICAxNSwgNSwgMjI4LCAyMDQsIDMwLCAyNDMsIDk3LCA5NiwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjI4LCAyMDEsIAotICAgIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDI1NCwgMTIzLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgCi0gICAgMjAyLCAzMCwgMjUzLCAyMzIsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAKLSAgICAyMjgsIDIwMiwgMzAsIDIzMSwgOTIsIDk2LCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyOSwgCi0gICAgMTA3LCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjIwLCA2MywgMTUsIDUsIAotICAgIDIyOCwgMjAyLCAzMCwgMjIwLCA2NCwgOTYsIDExNSwgMjU0LCAxMjMsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyMCwgNjQsIAotICAgIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjIwLCA2NCwgOTYsIDI1MywgMjMyLCA5NiwgMjUzLCAyMzEsIAotICAgIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIxNCwgCi0gICAgMTI2LCAxNSwgNSwgMjI4LCAxOTAsIDE1LCA1LCAyMjcsIDIzNywgMTUsIDUsIDIyNywgMjEwLCAxNSwgNSwgMjI3LCAxOTQsIAotICAgIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgCi0gICAgMjMxLCAxNDcsIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAKLSAgICAxMTYsIDMwLCAyMjIsIDksIDExNywgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgMjIyLCA4LCAxNSwgNSwgMjI3LCAxOTUsIAotICAgIDIzMywgMTE2LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjcsIDE5NSwgMjE2LCAyMzksIDE1LCA1LCAyMjcsIDE5NSwgMTE3LCAKLSAgICAyMjcsIDE5NCwgMTUsIDUsIDIyNywgMTk1LCAyNDksIDEyNSwgMjI3LCAxOTQsIDE1LCA1LCAyMjcsIDE5NSwgMjQ5LCAxMjUsIAotICAgIDIyNywgMTk1LCAyMzMsIDExNiwgMTE3LCAyMzMsIDExNSwgMTUsIDUsIDIyNywgMTg5LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgCi0gICAgMjQsIDMwLCAyNTMsIDIyNiwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjUyLCA2LCAxNSwgNSwgMjI3LCAxOTAsIAotICAgIDI1NSwgMjQsIDMwLCAyNDYsIDc0LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyNDIsIDEwMywgMTUsIDUsIDIyNywgCi0gICAgMTkwLCAyNTUsIDI0LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjM0LCAKLSAgICAyNTUsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDIzMywgMTM1LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIAotICAgIDMwLCAyMjksIDEwNywgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjE5LCAxNzEsIDE1LCA1LCAyMjcsIDE5MCwgCi0gICAgMjU1LCAyNCwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI3LCAxOTAsIDIzNCwgNjYsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMjcsIAotICAgIDE5MCwgMjM0LCA2NiwgMzAsIDI1MiwgNywgNzAsIDE1LCA1LCAxOTAsIDE1LCA1LCAyMjYsIDgwLCAxNSwgNSwgMjI2LCA0NywgCi0gICAgMTUsIDUsIDIyNiwgMjEsIDE1LCA1LCAyMjUsIDE2MSwgMTUsIDUsIDIyNSwgMTA4LCAxNSwgNSwgMjI1LCAxMDksIDMwLCAKLSAgICA2MSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgMjU1LCAyNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgMjUyLCA2LCAxNSwgNSwgCi0gICAgMjI1LCAxMDksIDMwLCAyNTEsIDEyNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgNzUsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDczLCAKLSAgICAxNSwgNSwgMjI1LCAxMDksIDMwLCAyNDAsIDExNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgNzAsIDE1LCA1LCAyMjUsIDEwOSwgCi0gICAgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI1LCAxMDksIDI0OSwgMTI1LCAyMjUsIDEwOCwgMTUsIDUsIDIyNSwgNTMsIDE1LCA1LCAKLSAgICAyMjUsIDU0LCAzMCwgMjM0LCAyMzgsIDE1LCA1LCAyMjUsIDU0LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMjUsIDU0LCAzMCwgCi0gICAgMjEwLCAxMTYsIDE1LCA1LCAyMjUsIDU0LCAyMjYsIDE2NCwgMjI1LCA1MywgMTUsIDUsIDIwNSwgMTUsIDUsIDIyMywgMTgyLCAKLSAgICAxNSwgNSwgMjIzLCAzNSwgMTUsIDUsIDIyMiwgMTQwLCAxNSwgNSwgMjA2LCAxNSwgNSwgMjIyLCAyMiwgMjI3LCAxODAsIAotICAgIDE1LCA1LCAyMjIsIDIxLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDYxLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDI0NiwgNzgsIDE1LCAKLSAgICA1LCAyMjIsIDIyLCAzMCwgMjQ2LCA3NiwgMTUsIDUsIDIyMiwgMjIsIDMwLCAxNjIsIDE1LCA1LCAyMjIsIDIyLCAzMCwgCi0gICAgMjM0LCAyNDIsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjMyLCA4NCwgMTUsIAotICAgIDUsIDIyMiwgMjIsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIyMiwgMjIsIAotICAgIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjIwLCAzMCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMTcsIDkzLCAxNSwgCi0gICAgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMjI1LCAxNSwgNSwgMjIyLCAyMiwgCi0gICAgMzAsIDIxNCwgMTk3LCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMTUwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMTI2LCAKLSAgICAxNSwgNSwgMjIyLCAyMiwgMTE3LCAyMjIsIDIxLCAxNSwgNSwgMjIyLCAyMiwgMjQyLCA5NCwgMTUsIDUsIDIyMiwgOCwgMTUsIAotICAgIDUsIDIyMiwgOSwgMjMzLCAxMTgsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDIyMSwgMjM5LCAxNSwgNSwgMjIxLCAyMzEsIDE1LCAKLSAgICA1LCAyMjAsIDEwMiwgMTUsIDUsIDIyMCwgMTAwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCA2MSwgMTUsIDUsIDIyMCwgMTAxLCAKLSAgICAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDI0MiwgMTkwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAyMjksIAotICAgIDEwNywgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMjE5LCAyMjMsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDIxNSwgOTgsIDE1LCA1LCAKLSAgICAyMjAsIDEwMSwgMzAsIDcwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIDUsIDIyMCwgOTksIDE1LCAKLSAgICA1LCAyMjAsIDk3LCAxNSwgNSwgMjIwLCA3OCwgMTUsIDUsIDIyMCwgNjMsIDE1LCA1LCAyMjAsIDY0LCAyNDAsIDIyMiwgMTUsIAotICAgIDUsIDIyMCwgNjQsIDExNywgMjIwLCA2NCwgMjQzLCAxMjcsIDExNywgMjQzLCAxMjcsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgCi0gICAgMTUsIDUsIDIyMCwgNjQsIDExNywgMjIwLCA2NCwgMjE3LCA5NCwgMTE3LCAyMTcsIDk0LCAyNDMsIDk3LCAxMTcsIDI0MywgCi0gICAgOTYsIDE1LCA1LCAyMjAsIDU2LCAxNSwgNSwgMjIwLCA1MSwgMTUsIDUsIDIyMCwgNDgsIDE1LCA1LCAyMjAsIDQ3LCAxNSwgCi0gICAgNSwgMjIwLCA0NCwgMTUsIDUsIDIyMCwgMzAsIDE1LCA1LCAyMjAsIDMxLCAzMCwgNjEsIDE1LCA1LCAyMjAsIDMxLCAzMCwgCi0gICAgMjM2LCAxNiwgMTUsIDUsIDIyMCwgMjQsIDE1LCA1LCAyMjAsIDI1LCAzMCwgNjEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjUyLCAKLSAgICAxNjEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjUxLCAxMDksIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjQ3LCAyMDYsIDE1LCA1LCAKLSAgICAyMjAsIDI1LCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMjIwLCAyNSwgMzAsIAotICAgIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjMzLCAxOTEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjMyLCAKLSAgICA4NiwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzAsIDkzLCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIyMiwgOCwgMTUsIDUsIDIyMCwgCi0gICAgMTgsIDE1LCA1LCAyMjAsIDEzLCAxNSwgNSwgMjIwLCAxNCwgMjE2LCAyMzksIDE1LCA1LCAyMjAsIDE0LCAxMTcsIDIyMCwgCi0gICAgMTQsIDI1MSwgOTksIDExNywgMjUxLCA5OCwgMTUsIDUsIDIyMCwgOSwgMTUsIDUsIDIxOSwgMjI1LCAxNSwgNSwgMjE5LCAKLSAgICAyMjYsIDExNywgMjM1LCAxOTMsIDIxOSwgMjI1LCAxNSwgNSwgMjE5LCAyMjMsIDE1LCA1LCAyMTksIDIyMiwgMTUsIDUsIAotICAgIDIxOSwgMTkxLCAxNSwgNSwgMjE5LCAxOTIsIDI0MiwgOTQsIDE1LCA1LCAyMTksIDE4MiwgMTUsIDUsIDIxOSwgMTgwLCAxNSwgCi0gICAgNSwgMjE5LCAxODEsIDExNywgMjE5LCAxODEsIDIxOSwgMjIzLCAxNSwgNSwgMjE5LCAxNzMsIDE1LCA1LCAyMTksIDE3MSwgCi0gICAgMTUsIDUsIDIxOCwgODMsIDE1LCA1LCAyMTgsIDg0LCAxMTcsIDIxOCwgODMsIDE1LCA1LCAyMTgsIDU0LCAxNSwgNSwgMjE4LCAKLSAgICA1MywgMTUsIDUsIDIxOCwgNTEsIDE1LCA1LCAyMTgsIDQzLCAxNSwgNSwgMjE4LCA0MiwgMTUsIDUsIDIxOCwgMTcsIDE1LCAKLSAgICA1LCAyMTgsIDE2LCAxNSwgNSwgMjE3LCAxMDUsIDE1LCA1LCAyMTcsIDEwNiwgMjUzLCAyMTYsIDE1LCA1LCAyMTcsIDEwNiwgCi0gICAgMzAsIDI0MSwgMTgwLCAxNSwgNSwgMjE3LCAxMDYsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIxNywgMTA2LCAyNDIsIDk0LCAKLSAgICAxNSwgNSwgMjE3LCA5MywgMTUsIDUsIDIxNywgOTQsIDExNywgMjE3LCA5NCwgMjI4LCAyMzQsIDExNywgMjI4LCAyMzQsIAotICAgIDI0NywgMTg4LCAxMTcsIDI0NywgMTg3LCAxNSwgNSwgMjE3LCA5NCwgMjE4LCAyMzMsIDE1LCA1LCAyMTcsIDg0LCAxNSwgNSwgCi0gICAgMTI5LCAzMCwgMjUyLCA2LCAxNSwgNSwgMTI5LCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAxMjksIDMwLCAyMjAsIDYzLCAxNSwgCi0gICAgNSwgMTI5LCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAxMjksIDMwLCAyMTUsIDExMywgMTUsIDUsIDEyOSwgMzAsIDIxNCwgMjE5LCAKLSAgICAxNSwgNSwgMjE3LCA3MiwgMTUsIDUsIDIxNywgNTAsIDE1LCA1LCAyMTcsIDIyLCAxNSwgNSwgMjE3LCAyMywgMjQyLCA5NCwgCi0gICAgMTUsIDUsIDIxNiwgMTE3LCAxNSwgNSwgMjE2LCAxMTgsIDIxNiwgMjM5LCAxNSwgNSwgMjE2LCA5MCwgMTUsIDUsIDIxNiwgCi0gICAgNzIsIDE1LCA1LCAyMTYsIDczLCAzMCwgMjE3LCA3MiwgMTUsIDUsIDIxNiwgNzMsIDExNywgMjE2LCA3MiwgMTUsIDUsIAotICAgIDIxNiwgNzMsIDExNywgMjE2LCA3MywgMjQzLCAxMjcsIDExNywgMjQzLCAxMjcsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgCi0gICAgMTUsIDUsIDIxNSwgMTE4LCAxNSwgNSwgMjE1LCAxMTMsIDE1LCA1LCAyMTUsIDExMSwgMTUsIDUsIDIxNSwgMTA4LCAxNSwgCi0gICAgNSwgMjE1LCA5OCwgMTUsIDUsIDIxNSwgOTksIDExNywgMjE1LCA5OSwgMjEwLCAxMTcsIDExNywgMjEwLCAxMTYsIDE1LCA1LCAKLSAgICA3MCwgMTUsIDUsIDEwNCwgMjQyLCAxMDMsIDE1LCA1LCAxMDQsIDEwNCwgNzAsIDE1LCA1LCAxMDQsIDExNywgMTA0LCAyMjYsIAotICAgIDkwLCAxMTcsIDIyNiwgOTAsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgMTUsIDUsIDEwNCwgMTE3LCAxMDQsIDIxOCwgMTgsIAotICAgIDExNywgMjE4LCAxNywgMTUsIDUsIDEwNCwgMTE3LCAxMDQsIDEwNCwgMjIzLCA0OSwgMTE3LCAxMDQsIDIyMywgNDgsIDE1LCAKLSAgICA1LCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMjI1LCAxNSwgNSwgMjE0LCAyMTksIDE1LCA1LCAyMTQsIDIyMCwgMjMzLCAxOTEsIAotICAgIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIxNCwgCi0gICAgMjIwLCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNzAsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIAotICAgIDEwNCwgMjQyLCA5NCwgMTUsIDUsIDIxNCwgMjIwLCAyNDIsIDk0LCAxNSwgNSwgMjE0LCAyMjAsIDIyMCwgNDUsIDE1LCA1LCAKLSAgICAyMTQsIDIyMCwgMjIwLCA0NiwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjE0LCAyMTUsIDE1LCA1LCAyMTQsIDE5NywgMTUsIDUsIAotICAgIDIxNCwgMTk4LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDIzMSwgOTIsIDk2LCAyNDgsIDIyMSwgMTUsIAotICAgIDUsIDIxNCwgMTk4LCAzMCwgMjIwLCAxMDAsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDcwLCAxNSwgNSwgMjE0LCAxOTYsIDE1LCAKLSAgICA1LCAyMTQsIDE5MiwgMTUsIDUsIDIxNCwgMTkzLCAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyMTQsIDE5MywgMzAsIDE5MCwgMTUsIAotICAgIDUsIDIxNCwgMTkwLCAxNSwgNSwgMjE0LCAxOTEsIDI0MiwgOTQsIDE1LCA1LCAyMTQsIDE1MCwgMTUsIDUsIDIxNCwgMTUxLCAKLSAgICAyNDksIDEyNSwgMjE0LCAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgMjIwLCA0NSwgMTUsIDUsIDIxNCwgMTQ4LCAxNSwgNSwgCi0gICAgMjE0LCAxNDksIDMwLCAxMTUsIDk2LCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDExNSwgOTYsIDE5NywgMTUsIDUsIAotICAgIDIxNCwgMTQ5LCAzMCwgMjU0LCAxNzgsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDE2MiwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgCi0gICAgMjI3LCAxOTQsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgCi0gICAgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgOTYsIDI1MiwgNiwgMTUsIDUsIDIxNCwgMTQ3LCAKLSAgICAxNSwgNSwgMjE0LCAxNDQsIDE1LCA1LCAyMTQsIDE0MywgMTUsIDUsIDIxNCwgMTM5LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICA2MSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjUzLCAyMjYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDEzMCwgMTUsIDUsIDIxNCwgCi0gICAgMTQwLCAzMCwgMjQ2LCA2OCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMzUsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDI0MywgMTE4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDI0MywgOTYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MiwgMTEzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxNjIsIDE1LCA1LCAKLSAgICAyMTQsIDE0MCwgMzAsIDIzNiwgMzUsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNiwgMTYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDIzNSwgMTY1LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzIsIDg0LCAxNSwgCi0gICAgNSwgMjE0LCAxNDAsIDMwLCAyMzAsIDE4OCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTkwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICAyMjAsIDYzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTksIDE4MCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE1LCAxMTgsIAotICAgIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDEwNCwgOTYsIDI0MiwgMTAzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTQsIDIxOSwgCi0gICAgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM4LCAzMCwgNzAsIAotICAgIDE1LCA1LCAyMTQsIDEyNiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgNjEsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIzMywgMjE3LCAKLSAgICAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjE3LCA3MiwgMTUsIDUsIDIxNCwgCi0gICAgMTIyLCAxNSwgNSwgMjE0LCAxMjUsIDE1LCA1LCAyMTQsIDEyMywgMTUsIDUsIDIxNCwgMTE5LCAxNSwgNSwgMjE0LCAxMDgsIAotICAgIDE1LCA1LCAyMTQsIDEwOSwgMzAsIDIzNCwgMjA3LCAxNSwgNSwgMjE0LCAxMDcsIDE1LCA1LCAyMTAsIDExNiwgMTUsIDUsIAotICAgIDIxMCwgMTE3LCAyMTYsIDIzOSwgMTUsIDUsIDIxMCwgMTE3LCA5MiwgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjEwLCAxMTMsIAotICAgIDE1LCA1LCAyMTAsIDEwNiwgMTUsIDUsIDIxMCwgOTMsIDE1LCA1LCAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0NSwgMTE3LCAKLSAgICAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0MywgMTUsIDUsIDIxMCwgNDEsIDE1LCA1LCAyMTAsIDQyLCAyMzUsIDMsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjEwLCAzNiwgMTUsIDUsIDIxMCwgMjgsIDE1LCA1LCAyMTAsIDEzLCAxNSwgNSwgMjEwLCAxMSwgMTUsIAotICAgIDUsIDIxMCwgMTIsIDMwLCA2MSwgMTUsIDUsIDIxMCwgMTAsIDE1LCA1LCAyMTAsIDksIDE1LCAxMzIsIDUsIDExMywgMjUzLCAKLSAgICAyMzEsIDE1LCAxMzIsIDUsIDEzNCwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI1MywgMjMxLCAxNSwgMTMyLCAKLSAgICA1LCAyNDQsIDgxLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjE5LCAxMjUsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyMjAsIAotICAgIDEyMiwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDI1MywgCi0gICAgMjMxLCAxNSwgMTMyLCA1LCAxMzQsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNDcsIDE4NywgMTUsIDEzMiwgCi0gICAgNSwgMjQ0LCA4MSwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjIwLCAKLSAgICAxMjIsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyNDcsIAotICAgIDE4NywgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgNzAsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDcwLCAxNSwgMTMyLCA1LCAyMTksIAotICAgIDEyNSwgNzAsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCA3MCwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDcwLCAxNSwgMTMyLCA1LCAKLSAgICAyMjgsIDIwMCwgNzAsIDE1LCAxMzIsIDUsIDEyMywgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMTEzLCAyNDMsIDM4LCAxNSwgCi0gICAgMTMyLCA1LCAxMzQsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDI0NCwgODEsIAotICAgIDI0MywgMzgsIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjQzLCAzOCwgCi0gICAgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAKLSAgICAxMjMsIDI0MywgMzUsIDE1LCAxMzIsIDUsIDExMywgMjQzLCAzNSwgMTUsIDEzMiwgNSwgMTM0LCAyNDMsIDM1LCAxNSwgCi0gICAgMTMyLCA1LCAyNDQsIDExLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAxMTMsIAotICAgIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc5LCAyMTQsIDEyLCAxNywgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgCi0gICAgMjE5LCAxMjUsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgCi0gICAgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDEyMywgMjIwLCA3MywgMTUsIAotICAgIDEzMiwgNSwgMTEzLCAyMjAsIDczLCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzMsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3NCwgCi0gICAgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIyMCwgNzMsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDIyMCwgNzMsIAotICAgIDE1LCAxMzIsIDUsIDIyMCwgNzksIDMwLCAyNDMsIDExOSwgOTYsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyMjAsIDc5LCAzMCwgCi0gICAgMjQzLCAxMTksIDk2LCAyMzAsIDE4OCwgMTUsIDEzMiwgNSwgMTIzLCAyNTEsIDk1LCAxNSwgMTMyLCA1LCAxMTMsIDI1MSwgCi0gICAgOTUsIDE1LCAxMzIsIDUsIDEzNCwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMTM0LCAyNTEsIDk2LCAyMTQsIDEyLCAxNywgMTUsIAotICAgIDEzMiwgNSwgMjQ0LCAxMSwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMTM0LCAKLSAgICAyMTQsIDEyLCAyNDQsIDIwLCAyNDUsIDc0LCAxNSwgMTMyLCA1LCAxMzQsIDIxNCwgMTIsIDI0NCwgMjAsIDI0NSwgNzEsIAotICAgIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIxNCwgMTIsIDI0NCwgMjAsIDIzMiwgMjE3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAKLSAgICAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIDIxNSwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjE0LCAxMiwgMjQ0LCAyMCwgMjMyLCAKLSAgICAyMTgsIDYxLCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIDIxOCwgMjUzLCAxNTgsIDE1LCAKLSAgICAxMzIsIDUsIDIxOSwgMTI1LCAyMTQsIDEyLCAyNDQsIDIwLCAyNTMsIDIyOCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIxNCwgCi0gICAgMTIsIDI0NCwgMjAsIDIzNiwgOCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMTAsIDYxLCAKLSAgICAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAxMCwgMjUzLCAxNTgsIDE1LCAxMzIsIDUsIAotICAgIDI0NSwgMTkzLCAyMTQsIDEyLCAyNDQsIDIwLCAyMTQsIDEyMSwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDIxNCwgMTIsIDI0NCwgCi0gICAgMjAsIDIxNCwgMTIwLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAyNCwgMTUsIDEzMiwgCi0gICAgNSwgMjI4LCAyMDAsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMjMsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyMTQsIDEyLCAKLSAgICAyNDQsIDIwLCAyMzYsIDIyLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAyNSwgNjEsIAotICAgIDE1LCAxMzIsIDUsIDExMywgMjUzLCAyMzIsIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAxMzQsIDI1MywgMjMyLCAyMTYsIDIzOSwgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjUzLCAyMzIsIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNTMsIDIzMiwgCi0gICAgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNTMsIDIzMiwgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDEyMywgMjUyLCAKLSAgICAxNTAsIDE1LCAxMzIsIDUsIDExMywgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIDEzNCwgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIAotICAgIDI0NCwgMTEsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNTIsIDE1MSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIAotICAgIDUsIDI0NCwgODEsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNTIsIDE1MSwgMjE0LCAxMiwgMTcsIDE1LCAKLSAgICAxMzIsIDUsIDIyOCwgMjEwLCAxNSwgMTMyLCA1LCAyMjgsIDIxMSwgMTUsIDEzMiwgNSwgMTIzLCAyNDUsIDcwLCAxNSwgCi0gICAgMTMyLCA1LCAxMTMsIDI0NSwgNzAsIDE1LCAxMzIsIDUsIDEyMywgMjE2LCAxNjksIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAKLSAgICAxMTMsIDIxNiwgMTY3LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjE5LCAxMTQsIDI0NywgMTg3LCAxNSwgCi0gICAgMTMyLCA1LCAxMjMsIDIxNiwgMTY5LCAyMTQsIDEyLCAyNDQsIDIwLCA2MSwgMTUsIDEzMiwgNSwgMTEzLCAyMTYsIDE2NywgCi0gICAgMjE0LCAxMiwgMjQ0LCAyMCwgNjEsIDE1LCAxMzIsIDUsIDEyMywgMjQ1LCAxODksIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAKLSAgICAxMjMsIDIyNCwgMjIsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCA1NSwgMjUzLCAyMTksIDEyMywgMjE5LCAxMTUsIDE1LCAxMzIsIAotICAgIDUsIDU1LCAyNTMsIDIxOSwgMTIzLCAyMjQsIDIxLCAxNSwgMjI0LCAxNDEsIDUsIDU1LCAyNTMsIDIxOSwgMjExLCAyMDksIAotICAgIDI0NywgMTcyLCAxNSwgMjI0LCAxNDEsIDUsIDY3LCAyNDksIDIyNiwgMTUsIDIyNCwgMTQxLCA1LCAyNDcsIDI1NSwgMjQ5LCAKLSAgICAyMjYsIDE1LCAyMjQsIDE0MSwgNSwgMjQ3LCAyNTUsIDIxNSwgMjIxLCAxMiwgMTMsIDI1NSwgMTU1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTU0LCAxMiwgMTMsIDI1NSwgMTUzLCAxMiwgMTMsIDI1NSwgMTUyLCAxMiwgMTMsIDI1NSwgMTUxLCAxMiwgMTMsIDI1NSwgCi0gICAgMTUwLCAxMiwgMTMsIDI1NSwgMTQ5LCAxMiwgMTMsIDI1NSwgMTQ4LCAxMiwgMTMsIDI1NSwgMTQ3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTQ2LCAxMiwgMTMsIDI1NSwgMTQ1LCAxMiwgMTMsIDI1NSwgMTQ0LCAxMiwgMTMsIDI1NSwgMTQzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTQyLCAxMiwgMTMsIDI1NSwgMTQxLCAxMiwgMTMsIDI1NSwgMTQwLCAxMiwgMTMsIDI1NSwgMTM5LCAxMiwgMTMsIDI1NSwgCi0gICAgMTM4LCAxMiwgMTMsIDI1NSwgMTM3LCAxMiwgMTMsIDI1NSwgMTM2LCAxMiwgMTMsIDI1NSwgMTM1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTM0LCAxMiwgMTMsIDI1NSwgMTMzLCAxMiwgMTMsIDI1NSwgMTMyLCAxMiwgMTMsIDI1NSwgMTMxLCAxMiwgMTMsIDI1NSwgCi0gICAgMTMwLCAxMiwgMTMsIDI1NSwgMTI5LCAxMiwgMTMsIDI1NSwgMTI4LCAxMiwgMTMsIDI1NSwgMTI3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTI2LCAxMiwgMTMsIDI1NSwgMTI1LCAxMiwgMTMsIDI1NSwgMTI0LCAxMiwgMTMsIDI1NSwgMTIzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTIyLCAxMiwgMTMsIDI1NSwgMTIxLCAxMiwgMTMsIDI1NSwgMTIwLCAxMiwgMTMsIDI1NSwgMTE5LCAxMiwgMTMsIDI1NSwgCi0gICAgMTE4LCAxMiwgMTMsIDI1NSwgMTE3LCAxMiwgMTMsIDI1NSwgMTE2LCAxMiwgMTMsIDI1NSwgMTE1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTE0LCAxMiwgMTMsIDI1NSwgMTEzLCAxMiwgMTMsIDI1NSwgMTEyLCAxMiwgMTMsIDI1NSwgMTExLCAxMiwgMTMsIDI1NSwgCi0gICAgMTEwLCAxMiwgMTMsIDI1NSwgMTA5LCAxMiwgMTMsIDI1NSwgMTA4LCAxMiwgMTMsIDI1NSwgMTA3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTA2LCAxMiwgMTMsIDI1NSwgMTA1LCAxMiwgMTMsIDI1NSwgMTA0LCAxMiwgMTMsIDI1NSwgMTAzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTAyLCAxMiwgMTMsIDI1NSwgMTAxLCAxMiwgMTMsIDI1NSwgMTAwLCAxMiwgMTMsIDI1NSwgOTksIDEyLCAxMywgMjU1LCAKLSAgICA5OCwgMTIsIDEzLCAyNTUsIDk3LCAxMiwgMTMsIDI1NSwgOTYsIDEyLCAxMywgMjU1LCA5NSwgMTIsIDEzLCAyNTUsIDk0LCAKLSAgICAxMiwgMTMsIDI1NSwgOTMsIDEyLCAxMywgMjU1LCA5MiwgMTIsIDEzLCAyNTUsIDkxLCAxMiwgMTMsIDI1NSwgOTAsIDEyLCAKLSAgICAxMywgMjU1LCA4OSwgMTIsIDEzLCAyNTUsIDg4LCAxMiwgMTMsIDI1NSwgODcsIDEyLCAxMywgMjU1LCA4NiwgMTIsIDEzLCAKLSAgICAyNTUsIDg1LCAxMiwgMTMsIDI1NSwgODQsIDEyLCAxMywgMjU1LCA4MywgMTIsIDEzLCAyNTUsIDgyLCAxMiwgMTMsIDI1NSwgCi0gICAgODEsIDEyLCAxMywgMjU1LCA4MCwgMTIsIDEzLCAyNTUsIDc5LCAxMiwgMTMsIDI1NSwgNzgsIDEyLCAxMywgMjU1LCA3NywgCi0gICAgMTIsIDEzLCAyNTUsIDc2LCAxMiwgMTMsIDI1MywgMTU2LCAxMiwgMTMsIDI1MywgMTU0LCAxMiwgMTMsIDI1MywgMTUyLCAKLSAgICAxMiwgMTMsIDI1MywgMTUwLCAxMiwgMTMsIDI1MywgMTQ4LCAxMiwgMTMsIDI1MywgMTQ3LCAxMiwgMTMsIDI1MywgMTQ1LCAKLSAgICAxMiwgMTMsIDI1MywgMTQzLCAxMiwgMTMsIDI1MywgMTQxLCAxMiwgMTMsIDI1MywgMTM5LCAxMiwgMTMsIDI1MSwgNjIsIAotICAgIDEyLCAxMywgMjUxLCA2MSwgMTIsIDEzLCAyNTEsIDYwLCAxMiwgMTMsIDI1MSwgNTksIDEyLCAxMywgMjUxLCA1OCwgMTIsIAotICAgIDEzLCAyNTEsIDU3LCAxMiwgMTMsIDI1MSwgNTYsIDEyLCAxMywgMjUxLCA1NSwgMTIsIDEzLCAyNTEsIDU0LCAxMiwgMTMsIAotICAgIDI1MSwgNTMsIDEyLCAxMywgMjUxLCA1MiwgMTIsIDEzLCAyNTEsIDUxLCAxMiwgMTMsIDI1MSwgNTAsIDEyLCAxMywgMjUxLCAKLSAgICA0OSwgMTIsIDEzLCAyNTEsIDQ4LCAxMiwgMTMsIDI1MSwgNDcsIDEyLCAxMywgMjUxLCA0NiwgMTIsIDEzLCAyNTEsIDQ1LCAKLSAgICAxMiwgMTMsIDI1MSwgNDQsIDEyLCAxMywgMjUxLCA0MywgMTIsIDEzLCAyNTEsIDQyLCAxMiwgMTMsIDI1MSwgNDEsIDEyLCAKLSAgICAxMywgMjUxLCA0MCwgMTIsIDEzLCAyNTEsIDM5LCAxMiwgMTMsIDI1MSwgMzgsIDEyLCAxMywgMjUxLCAzNywgMTIsIDEzLCAKLSAgICAyNTEsIDM2LCAxMiwgMTMsIDI1MSwgMzUsIDEyLCAxMywgMjQ5LCA1OSwgMTIsIDEzLCAyNDksIDU4LCAxMiwgMTMsIDI0OSwgCi0gICAgNTcsIDEyLCAxMywgMjQ5LCA1NiwgMTIsIDEzLCAyNDksIDU1LCAxMiwgMTMsIDI0OSwgNTQsIDEyLCAxMywgMjQ5LCA1MywgCi0gICAgMTIsIDEzLCAyNDksIDUyLCAxMiwgMTMsIDI0OSwgNTEsIDEyLCAxMywgMjQ5LCA1MCwgMTIsIDEzLCAyNDksIDQ5LCAxMiwgCi0gICAgMTMsIDI0OSwgNDgsIDEyLCAxMywgMjQ5LCA0NywgMTIsIDEzLCAyNDksIDQ2LCAxMiwgMTMsIDI0OSwgNDUsIDEyLCAxMywgCi0gICAgMjQ5LCA0NCwgMTIsIDEzLCAyNDksIDQzLCAxMiwgMTMsIDI0OSwgNDIsIDEyLCAxMywgMjQ5LCA0MSwgMTIsIDEzLCAyNDksIAotICAgIDQwLCAxMiwgMTMsIDI0OSwgMzksIDEyLCAxMywgMjQ5LCAzOCwgMTIsIDEzLCAyNDksIDM3LCAxMiwgMTMsIDI0OSwgMzYsIAotICAgIDEyLCAxMywgMjQ5LCAzNSwgMTIsIDEzLCAyNDksIDM0LCAxMiwgMTMsIDI0OSwgMzMsIDEyLCAxMywgMjQ5LCAzMiwgMTIsIAotICAgIDEzLCAyNDksIDMxLCAxMiwgMTMsIDI0OSwgMzAsIDEyLCAxMywgMjQ5LCAyOSwgMTIsIDEzLCAyNDksIDI4LCAxMiwgMTMsIAotICAgIDI0OSwgMjcsIDEyLCAxMywgMjQ5LCAyNiwgMTIsIDEzLCAyNDksIDI1LCAxMiwgMTMsIDI0OSwgMjQsIDEyLCAxMywgMjQ5LCAKLSAgICAyMywgMTIsIDEzLCAyNDksIDIyLCAxMiwgMTMsIDI0OSwgMjEsIDEyLCAxMywgMjQ5LCAyMCwgMTIsIDEzLCAyNDksIDE5LCAKLSAgICAxMiwgMTMsIDI0OSwgMTgsIDEyLCAxMywgMjQ5LCAxNywgMTIsIDEzLCAyNDksIDE2LCAxMiwgMTMsIDI0OSwgMTUsIDEyLCAKLSAgICAxMywgMjQ5LCAxNCwgMTIsIDEzLCAyNDksIDEzLCAxMiwgMTMsIDI0OSwgMTIsIDEyLCAxMywgMjQ5LCAxMSwgMTIsIDEzLCAKLSAgICAyNDksIDEwLCAxMiwgMTMsIDI0OSwgOSwgMTIsIDEzLCAyNDksIDgsIDEyLCAxMywgMjQ5LCA3LCAxMiwgMTMsIDI0OSwgNiwgCi0gICAgMTIsIDEzLCAyNDksIDUsIDEyLCAxMywgMjQ5LCA0LCAxMiwgMTMsIDI0OSwgMywgMTIsIDEzLCAyNDksIDIsIDEyLCAxMywgCi0gICAgMjQ5LCAxLCAxMiwgMTMsIDI0OSwgMCwgMTIsIDEzLCAyNDgsIDI1NSwgMTIsIDEzLCAyNDgsIDI1NCwgMTIsIDEzLCAyNDgsIAotICAgIDI1MywgMTIsIDEzLCAyNDgsIDI1MiwgMTIsIDEzLCAyNDgsIDI1MSwgMTIsIDEzLCAyNDgsIDI1MCwgMTIsIDEzLCAyNDgsIAotICAgIDI0OSwgMTIsIDEzLCAyNDgsIDI0OCwgMTIsIDEzLCAyNDgsIDI0NywgMTIsIDEzLCAyNDgsIDI0NiwgMTIsIDEzLCAyNDgsIAotICAgIDI0NSwgMTIsIDEzLCAyNDgsIDI0NCwgMTIsIDEzLCAyNDgsIDI0MywgMTIsIDEzLCAyNDgsIDI0MiwgMTIsIDEzLCAyNDgsIAotICAgIDI0MSwgMTIsIDEzLCAyNDgsIDI0MCwgMTIsIDEzLCAyNDgsIDIzOSwgMTIsIDEzLCAyNDgsIDIzOCwgMTIsIDEzLCAyNDgsIAotICAgIDIzNywgMTIsIDEzLCAyNDgsIDIzNiwgMTIsIDEzLCAyNDgsIDIzNSwgMTIsIDEzLCAyNDgsIDIzNCwgMTIsIDEzLCAyNDgsIAotICAgIDIzMywgMTIsIDEzLCAyNDgsIDIzMiwgMTIsIDEzLCAyNDgsIDIzMSwgMTIsIDEzLCAyNDgsIDIzMCwgMTIsIDEzLCAyNDgsIAotICAgIDIyOSwgMTIsIDEzLCAyNDgsIDIyOCwgMTIsIDEzLCAyNDgsIDIyNywgMTIsIDEzLCAyNDgsIDIyNiwgMTIsIDEzLCAyNDgsIAotICAgIDIyNSwgMTIsIDEzLCAyNDgsIDIyNCwgMTIsIDEzLCAyNDYsIDIzLCAxMiwgMTMsIDI0NiwgMjIsIDEyLCAxMywgMjQ2LCAyMSwgCi0gICAgMTIsIDEzLCAyNDYsIDIwLCAxMiwgMTMsIDI0NiwgMTksIDEyLCAxMywgMjQ2LCAxOCwgMTIsIDEzLCAyNDYsIDE3LCAxMiwgCi0gICAgMTMsIDI0NiwgMTYsIDEyLCAxMywgMjQ2LCAxNSwgMTIsIDEzLCAyNDYsIDE0LCAxMiwgMTMsIDI0NiwgMTMsIDEyLCAxMywgCi0gICAgMjQ2LCAxMiwgMTIsIDEzLCAyNDYsIDExLCAxMiwgMTMsIDI0NiwgMTAsIDEyLCAxMywgMjQ2LCA5LCAxMiwgMTMsIDI0NiwgCi0gICAgOCwgMTIsIDEzLCAyNDYsIDcsIDEyLCAxMywgMjQ2LCA2LCAxMiwgMTMsIDI0NiwgNSwgMTIsIDEzLCAyNDYsIDQsIDEyLCAKLSAgICAxMywgMjQ2LCAzLCAxMiwgMTMsIDI0NiwgMiwgMTIsIDEzLCAyNDYsIDEsIDEyLCAxMywgMjQ2LCAwLCAxMiwgMTMsIDI0NSwgCi0gICAgMjU1LCAxMiwgMTMsIDI0NSwgMjU0LCAxMiwgMTMsIDI0NSwgMjUzLCAxMiwgMTMsIDI0NSwgMjUyLCAxMiwgMTMsIDI0NSwgCi0gICAgMjUxLCAxMiwgMTMsIDI0NSwgMjUwLCAxMiwgMTMsIDI0NSwgMjQ5LCAxMiwgMTMsIDI0NSwgMjQ4LCAxMiwgMTMsIDI0NSwgCi0gICAgMjQ3LCAxMiwgMTMsIDI0NSwgMjQ2LCAxMiwgMTMsIDI0NSwgMjQ1LCAxMiwgMTMsIDI0NSwgMjQ0LCAxMiwgMTMsIDI0NSwgCi0gICAgMjQzLCAxMiwgMTMsIDI0NSwgMjQyLCAxMiwgMTMsIDI0NSwgMjQxLCAxMiwgMTMsIDI0NSwgMjQwLCAxMiwgMTMsIDI0NSwgCi0gICAgMjM5LCAxMiwgMTMsIDI0NSwgMjM4LCAxMiwgMTMsIDI0NSwgMjM3LCAxMiwgMTMsIDI0NSwgMjM2LCAxMiwgMTMsIDI0NSwgCi0gICAgNSwgMTIsIDEzLCAyNDUsIDQsIDEyLCAxMywgMjQ1LCAzLCAxMiwgMTMsIDI0NSwgMiwgMTIsIDEzLCAyNDUsIDEsIDEyLCAKLSAgICAxMywgMjQ1LCAwLCAxMiwgMTMsIDI0NCwgMjU1LCAxMiwgMTMsIDI0NCwgMjU0LCAxMiwgMTMsIDI0NCwgMjUzLCAxMiwgMTMsIAotICAgIDI0NCwgMjUyLCAxMiwgMTMsIDI0NCwgMjUxLCAxMiwgMTMsIDI0NCwgMjUwLCAxMiwgMTMsIDI0NCwgMjQ5LCAxMiwgMTMsIAotICAgIDI0NCwgMjQ4LCAxMiwgMTMsIDI0NCwgMjQ3LCAxMiwgMTMsIDI0NCwgMjQ2LCAxMiwgMTMsIDI0NCwgMjQ1LCAxMiwgMTMsIAotICAgIDI0NCwgMjQ0LCAxMiwgMTMsIDI0NCwgMjQzLCAxMiwgMTMsIDI0NCwgMjQyLCAxMiwgMTMsIDI0NCwgMjQxLCAxMiwgMTMsIAotICAgIDI0NCwgMjQwLCAxMiwgMTMsIDI0NCwgMjM5LCAxMiwgMTMsIDI0NCwgMjM4LCAxMiwgMTMsIDI0NCwgMjM3LCAxMiwgMTMsIAotICAgIDI0NCwgMjM2LCAxMiwgMTMsIDI0NCwgMjM1LCAxMiwgMTMsIDI0NCwgMjM0LCAxMiwgMTMsIDI0NCwgMjMzLCAxMiwgMTMsIAotICAgIDI0NCwgMjMyLCAxMiwgMTMsIDI0NCwgMjMxLCAxMiwgMTMsIDI0NCwgMjMwLCAxMiwgMTMsIDI0NCwgMjI5LCAxMiwgMTMsIAotICAgIDI0NCwgMjI4LCAxMiwgMTMsIDI0NCwgMjI3LCAxMiwgMTMsIDI0NCwgMjI2LCAxMiwgMTMsIDI0NCwgMjI1LCAxMiwgMTMsIAotICAgIDI0NCwgMjI0LCAxMiwgMTMsIDI0NCwgMjIzLCAxMiwgMTMsIDI0NCwgMjIyLCAxMiwgMTMsIDI0NCwgMjIxLCAxMiwgMTMsIAotICAgIDI0NCwgMjIwLCAxMiwgMTMsIDI0NCwgMjE5LCAxMiwgMTMsIDI0NCwgMjE4LCAxMiwgMTMsIDI0NCwgMjE3LCAxMiwgMTMsIAotICAgIDI0NCwgMjE2LCAxMiwgMTMsIDI0NCwgMjE1LCAxMiwgMTMsIDI0NCwgMjE0LCAxMiwgMTMsIDI0NCwgMjEzLCAxMiwgMTMsIAotICAgIDI0NCwgMjEyLCAxMiwgMTMsIDI0NCwgMjExLCAxMiwgMTMsIDI0NCwgMjEwLCAxMiwgMTMsIDI0NCwgMjA5LCAxMiwgMTMsIAotICAgIDI0NCwgMjA4LCAxMiwgMTMsIDI0NCwgMjA3LCAxMiwgMTMsIDI0NCwgMjA2LCAxMiwgMTMsIDI0NCwgMjA1LCAxMiwgMTMsIAotICAgIDI0NCwgMjA0LCAxMiwgMTMsIDI0NCwgMjAzLCAxMiwgMTMsIDI0NCwgMjAyLCAxMiwgMTMsIDI0NCwgMjAxLCAxMiwgMTMsIAotICAgIDI0NCwgMjAwLCAxMiwgMTMsIDI0NCwgMTk5LCAxMiwgMTMsIDI0NCwgMTk4LCAxMiwgMTMsIDI0NCwgMTk3LCAxMiwgMTMsIAorICAgIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDE4NCwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDM5LCAKKyAgICAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTYwLCAyLCAyNTAsIAorICAgIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCAKKyAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgCisgICAgNCwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQxLCA1OSwgNDgsIDcsIAorICAgIDQsIDEsIDI0MCwgMTYxLCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDU5LCA1MSwgNywgNCwgMSwgCisgICAgMjQwLCAxNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCAKKyAgICA2LCAxLCAxNDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIAorICAgIDI1MCwgMzksIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAKKyAgICAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgCisgICAgNDgsIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMTg0LCAKKyAgICA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDU5LCAKKyAgICA1MSwgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMTQyLCAKKyAgICA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MiwgCisgICAgMTQzLCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgCisgICAgMjIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIAorICAgIDAsIDIyLCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgCisgICAgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgNTksIDUxLCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDI0MSwgCisgICAgMCwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQxLCAwLCAKKyAgICAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgCisgICAgMjQxLCAwLCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIAorICAgIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMTg0LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDE4NCwgNywgNiwgMSwgCisgICAgMTA0LCAyLCAyNDEsIDAsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgNTksIDUxLCA3LCA2LCAxLCAKKyAgICAyMTEsIDExOCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNDIsIDE0MywgNywgNiwgMSwgMjExLCAxMTgsIAorICAgIDIsIDU5LCA1MSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0MSwgNTksIAorICAgIDQ4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAxODQsIDcsIDQsIAorICAgIDEsIDIxMSwgMTE4LCAyLCAxODQsIDcsIDYsIDEsIDIzMCwgMjI4LCAyMzIsIDE5MSwgNywgNCwgMSwgMjMwLCAyMjgsIDIzMiwgCisgICAgMTkxLCA3LCA2LCAxLCAyMzAsIDIyOCwgMjE0LCAxMDUsIDcsIDQsIDEsIDIzMCwgMjI4LCAyMTQsIDEwNSwgNywgNiwgMSwgCisgICAgMjExLCAxMTgsIDIsIDIzMiwgMTI5LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjMyLCAxMjksIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgCisgICAgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIAorICAgIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU3LCAKKyAgICAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgCisgICAgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgCisgICAgMTE0LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIAorICAgIDI0NSwgMTA5LCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCAKKyAgICA0LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDI0NSwgCisgICAgMTA5LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIAorICAgIDEzLCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKKyAgICAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgCisgICAgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MSwgMjYsIAorICAgIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgCisgICAgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAorICAgIDIzNSwgMTkzLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIzNSwgCisgICAgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU3LCAyNiwgNiwgCisgICAgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAKKyAgICAyNDgsIDE2MSwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIAorICAgIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAKKyAgICAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIyNiwgMjA0LCAKKyAgICAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCisgICAgMjI2LCAyMDQsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIAorICAgIDE2MSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCAKKyAgICA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAKKyAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAKKyAgICAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIyNiwgCisgICAgMjA2LCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgCisgICAgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjEsIAorICAgIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIAorICAgIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgCisgICAgMjU0LCAxNTIsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIAorICAgIDEwOSwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIAorICAgIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMTQsIDEzLCAKKyAgICAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIxNCwgMTMsIDI2LCA0LCAKKyAgICAxLCAyMjYsIDIwNCwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgCisgICAgMTU4LCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgCisgICAgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIAorICAgIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAKKyAgICAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIAorICAgIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgCisgICAgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDQsIDEsIDI0NSwgNzIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxMCwgMjE5LCAKKyAgICAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAKKyAgICAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIAorICAgIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIAorICAgIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIAorICAgIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgCisgICAgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAKKyAgICAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIAorICAgIDIsIDI0OCwgMTYyLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAKKyAgICAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIAorICAgIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgCisgICAgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAKKyAgICAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAKKyAgICAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAKKyAgICAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDYsIAorICAgIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA0LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjMxLCAyMzcsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjE0LCAKKyAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIAorICAgIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMTMsIDEyMCwgMjYsIDYsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyMzEsIDIzNywgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTcwLCAyNiwgMjM0LCA4LCAyNiwgMjI0LCAKKyAgICAxNzAsIDI2LCAyMjQsIDE1NywgMjYsIDIyNSwgMTc4LCAyNiwgMjQ4LCA0LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIAorICAgIDI0NSwgNzIsIDIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjUsIDE3OCwgMjYsIAorICAgIDQsIDEsIDI0NSwgNzIsIDIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjE0LCAxMywgCisgICAgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKKyAgICAyNDUsIDcyLCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTcwLCAyNiwgMjI0LCAxNTgsIDIyLCAKKyAgICAyMTQsIDEzLCAyNiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAKKyAgICAxLCAyMzUsIDE5MywgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjMxLCAyMzcsIDI2LCA0LCAxLCAyMzUsIAorICAgIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMjYsIDExNCwgCisgICAgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMzEsIDIzNywgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNiwgMTE0LCAyNiwgMjQ4LCAKKyAgICAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIAorICAgIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjMxLCAyMzcsIDI2LCA0LCAKKyAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIyMywgNDEsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjIzLCA0MSwgMiwgMjQ4LCAxNjEsIAorICAgIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjMxLCAyMzcsIAorICAgIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDIyMywgNDEsIDIsIDI0OCwgMTYxLCAyNiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDI0OCwgNCwgMjIsIDIyNiwgCisgICAgMTE0LCAyNiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIAorICAgIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjUsIDE3OSwgMjIsIDIxMCwgCisgICAgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjI2LCAxMTQsIDI2LCAKKyAgICA2LCAxLCAyMjYsIDIwNiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIAorICAgIDIyNiwgMjA2LCAyLCAyMjQsIDE3MCwgMjYsIDIyNiwgMTE0LCAyNiwgMjQ4LCAxNjEsIDI0NSwgMTU5LCAyMjQsIDMwLCAKKyAgICAyNDUsIDE2OCwgMjI0LCAzMCwgMjQ1LCAxNTksIDIxOSwgMjAsIDI0NSwgMTY4LCAyMTksIDIwLCAyMTYsIDE0MiwgMjE5LCAKKyAgICAyMCwgMjQ0LCAxNywgMjE5LCAyMCwgMjE5LCAxMjUsIDIxOSwgMjAsIDI0NCwgMTIwLCAyMTksIDIwLCAyMjQsIDE0NCwgCisgICAgMjE5LCAyMCwgMjE2LCAxNzEsIDIxOSwgMjAsIDI0MiwgNDIsIDIxOSwgMjAsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMTksIDIwLCAKKyAgICAyMTAsIDg3LCAyMTEsIDI0NSwgMjI4LCA3MiwgMjEwLCA4NywgMjExLCAyNDUsIDIzNSwgNjksIDIzMywgNDQsIDc5LCAyMjIsIAorICAgIDI0NiwgNzksIDI0MCwgMTc1LCAyMjgsIDczLCAyNDAsIDE3NSwgMjQ0LCAxMjAsIDI0OCwgMTY0LCAyNDUsIDE1OSwgMjQ4LCAKKyAgICAxNjQsIDI0NSwgMTY4LCAyNDgsIDE2NCwgMjAzLCAxMzAsIDUyLCA2NywgMjMyLCAyMTksIDUyLCAxMjEsIDIzMiwgMjE5LCAKKyAgICA0MywgMjE5LCAxNTcsIDIyNCwgMSwgNzksIDQ0LCAyMTksIDE1NywgMjI0LCAxLCA3OSwgMjE5LCAxNTcsIDIzMiwgMTE1LCAKKyAgICAyMjQsIDEsIDc5LCAyMTksIDE1NywgMjQxLCAxNzAsIDIyNCwgMSwgNzksIDQzLCA1MiwgMjI0LCAxLCA3OSwgNDQsIDUyLCAKKyAgICAyMjQsIDEsIDc5LCA1MiwgMjMyLCAxMTUsIDIyNCwgMSwgNzksIDUyLCAyNDEsIDE3MCwgMjI0LCAxLCA3OSwgMjQ4LCAyMTMsIAorICAgIDUyLCAyNDgsIDIxMywgMjUxLCAxMjEsIDIxNSwgMjIzLCAyNTEsIDEyMSwgMTIzLCA1OSwgMjMzLCA2MiwgMTEzLCA1OSwgCisgICAgMjMzLCA2MiwgMjAzLCAyNDUsIDE3MSwgMjQwLCAxNzMsIDIyNSwgMTMsIDIzMiwgMjIwLCAyMjAsIDEzOSwgMjI2LCAxOSwgCisgICAgMjIwLCAxMzksIDIzMywgNDQsIDI0NSwgMTY2LCAyMjIsIDI0NiwgMjQ1LCAxNjYsIDIyNCwgMjQ5LCAyNDcsIDIwNCwgMjQ0LCAKKyAgICAyNywgMjMzLCA0NCwgMjI2LCAxMjEsIDIyMiwgMjQ2LCAyMjYsIDEyMSwgMjI5LCAxOTksIDIyOCwgNzgsIDIxOSwgMjAsIAorICAgIDIyNSwgMTg2LCAyMzAsIDE5OCwgNTAsIDIyNSwgMTg2LCAyMTYsIDI0OSwgMjE2LCAxNDksIDUwLCAyMjQsIDE5MywgNTIsIAorICAgIDIyNCwgMTkzLCAyMTUsIDIxMiwgMjI0LCAxOTMsIDIyMywgNTIsIDIyNCwgMTkzLCAyMjMsIDUyLCA1MiwgMjI0LCAxOTMsIAorICAgIDIyMywgNTIsIDIxNSwgMjEyLCAyMjQsIDE5MywgMjUwLCAyNDYsIDIxOSwgMTU3LCAyMzMsIDQ4LCAyNTQsIDExOCwgMjI0LCAKKyAgICAxLCA3OSwgMjE5LCAxNTcsIDIyMiwgMjUwLCAyNTQsIDExOCwgMjI0LCAxLCA3OSwgMjIzLCAxMTAsIDc5LCA1MiwgMjQ1LCAKKyAgICAzOSwgNzksIDIzNSwgMjA4LCAyMjYsIDEyMywgMjE0LCAxODAsIDEzNSwgMjE2LCAxMTIsIDI1MCwgMjQ3LCAyMzUsIDIyMywgCisgICAgMjI1LCAxMywgMjUzLCAyMjIsIDI0MCwgMTc2LCAyNTEsIDEyMSwgMjQ0LCAxMCwgMjE5LCA5NywgNDMsIDQyLCAyNTEsIAorICAgIDE2NiwgMiwgMjI0LCAxMCwgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjI0LCAxMCwgNTIsIDIyNCwgMTYsIDc5LCAyMjQsIDE2LCAKKyAgICAyNDUsIDM5LCA3OSwgMjQ1LCAzOSwgMjI0LCAxNiwgNzksIDIxNiwgNzEsIDUsIDI0NSwgNzMsIDIyMywgNTIsIDIyNSwgNzEsIAorICAgIDUwLCA4NSwgMTQwLCAyNTEsIDEyMSwgODUsIDk3LCAyNTEsIDEyMSwgMTIxLCAyNTMsIDIyNCwgMjIzLCA1MiwgMjIwLCAKKyAgICAxNTIsIDI1MCwgOSwgMjE0LCAxNjMsIDExMywgMjUzLCAyMjMsIDI1NCwgMTY3LCAyMTMsIDE4OCwgMjQ5LCAyMjUsIDIzMCwgCisgICAgMTg3LCA1MCwgMjE3LCAyMzUsIDI0OCwgMTY0LCAyMzUsIDIwMCwgMjE0LCAxODAsIDI0NCwgNjAsIDIyNCwgMTQ0LCA3OSwgCisgICAgMTM0LCA1OSwgMjI0LCAxNDMsIDIyNCwgMjcsIDIyNCwgMTkzLCAyNDQsIDE5LCA1OSwgMjI0LCAxNDMsIDI0NCwgODksIDU5LCAKKyAgICAyMjQsIDE0MywgMTEzLCA1OSwgMjI0LCAxNDMsIDI0NCwgMTksIDU5LCA3OSwgMjQ2LCAxMjYsIDI0OSwgMTM4LCAyMTUsIAorICAgIDIyMiwgNjcsIDI0NCwgMTksIDI0NywgMTI2LCAyMzEsIDg3LCAxMSwgMjE5LCAyMCwgMjExLCAyMDksIDIzNSwgNjksIDI0MywgCisgICAgMjM0LCAyNTQsIDYwLCAyMzUsIDE5OCwgMjE2LCA4NiwgMjM1LCAxOTgsIDIyMCwgMTM5LCAyMzUsIDE5OCwgMjI1LCAyNSwgCisgICAgMjMzLCA0NCwgMjM1LCAxNzEsIDIyMiwgMjQ2LCAyMzUsIDE3MSwgMjQ0LCAxMDAsIDIxOCwgOTEsIDIzNSwgMTcxLCAyMjQsIAorICAgIDI0OSwgMjQ3LCAyMDQsIDIzNSwgMTcxLCAyMzUsIDIzNSwgMjE3LCAxODMsIDIxNywgMjUyLCAyNTUsIDE0LCAyMTcsIDE4MywgCisgICAgMjE3LCAyNTIsIDIzNSwgMjM1LCA5LCAyNDQsIDI4LCAyMjAsIDgyLCAyNTUsIDE0LCA5LCAyNDQsIDI4LCAyMjAsIDgyLCAKKyAgICAyMjksIDE5NCwgMjEsIDIyMCwgODMsIDIyOCwgNzQsIDIxLCAyMjAsIDgzLCAyMTgsIDI0LCAyMTAsIDg2LCAyMTgsIDI0LCAKKyAgICA3LCA0LCAxLCA3NCwgMjE4LCAyNCwgMTYxLCAyMTgsIDI0LCAxOTAsIDIxOCwgMjQsIDE5NSwgMjE4LCAyNCwgMTk5LCAyMTgsIAorICAgIDI0LCAxOTYsIDIxOCwgMjQsIDIwMSwgMjE4LCAyNCwgOTYsIDUwLCAyMTgsIDI0LCAyMzAsIDE4NiwgMjE4LCAyNCwgMjQ1LCAKKyAgICAxMDYsIDUwLCAyMTgsIDI0LCA0MywgMjI2LCA3LCAyMTgsIDI0LCA0NCwgMjI2LCA3LCAyMTgsIDI0LCA3LCA0LCAxLCAyMzAsIAorICAgIDMwLCAyMTgsIDY2LCAyMTAsIDg2LCAyMTgsIDY2LCAxMTEsIDIxOCwgNjYsIDEwNSwgMjE4LCA2NiwgMTU4LCAyMTgsIDY2LCAKKyAgICAxNjEsIDIxOCwgNjYsIDE5MCwgMjE4LCA2NiwgMTk1LCAyMTgsIDY2LCAxOTksIDIxOCwgNjYsIDE5NiwgMjE4LCA2NiwgCisgICAgMjAxLCAyMTgsIDY2LCA5NiwgNTAsIDIxOCwgNjYsIDIzMCwgMTg2LCAyMTgsIDY2LCAyNDUsIDEwNiwgNTAsIDIxOCwgNjYsIAorICAgIDQzLCAyMjYsIDcsIDIxOCwgNjYsIDQ0LCAyMjYsIDcsIDcsIDIxOCwgNjYsIDQsIDEsIDYxLCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICA3NiwgNywgMjE4LCA2NiwgNCwgMSwgNzgsIDcsIDIxOCwgNjYsIDQsIDEsIDIxMSwgMTc4LCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICAyMjEsIDE5NywgNywgMjE4LCA2NiwgNCwgMSwgMjQyLCA2NywgNywgMjE4LCA2NiwgNCwgMSwgMjM1LCAyOSwgNywgMjE4LCAKKyAgICA2NiwgNCwgMSwgMTU2LCA3LCAyMTgsIDY2LCA0LCAxLCAxOTQsIDcsIDIxOCwgNjYsIDQsIDEsIDIzMCwgMzAsIDcsIDIxOCwgCisgICAgNjYsIDQsIDEsIDIyNiwgMTA5LCA3LCAyMTgsIDY2LCA0LCAxLCAyMjIsIDkzLCA3LCAyMTgsIDY2LCA0LCAxLCAyMTcsIAorICAgIDE1MywgMjQ1LCA1NCwgNTAsIDI0OSwgMjM1LCA1MCwgMjQ5LCAxMjUsIDUwLCAyNDQsIDMsIDI0NCwgNiwgNTAsIDIzMiwgCisgICAgMjA0LCA1MCwgMjMwLCAxOTksIDUwLCAyMjksIDIxNSwgNTAsIDIyNSwgMTY1LCA1MCwgMjIyLCAxMjAsIDUwLCAyMTEsIAorICAgIDIxNywgNTAsIDE2NiwgMjIwLCA1MSwgNTAsIDI0NywgMTM1LCA1MCwgMjQ1LCA1NSwgNTAsIDIzNCwgODIsIDUwLCAyMTUsIAorICAgIDExMywgNTAsIDI0NiwgMTA5LCA1MCwgMjQzLCA0NywgMjI1LCAxOTYsIDUwLCAyMjUsIDE2MywgNTAsIDI0MiwgMTE2LCA1MCwgCisgICAgMjUzLCAxOTAsIDUwLCAyNDAsIDIzNSwgNTAsIDI1MCwgMTkzLCA1MCwgMjMyLCAxOTcsIDIxNiwgNCwgNTAsIDIxOSwgMiwgCisgICAgNTAsIDIxNiwgMjQ2LCA1MCwgMjM1LCAyNDgsIDIyMiwgMTIwLCA1MCwgMjE1LCA5NywgMjMyLCAyMDQsIDUwLCAzOCwgNDMsIAorICAgIDI0MiwgNiwgNDgsIDM4LCA0NCwgMjQyLCA2LCA0OCwgMzgsIDIwMCwgNjcsIDIzMiwgMjIwLCAyMjYsIDEyNCwgMzgsIDIxOSwgCisgICAgMjUzLCA2NywgMjMyLCAyMjAsIDIyNiwgMTI0LCAzOCwgMjU0LCA5NiwgODAsIDQ4LCAzOCwgMjUwLCAxMCwgODAsIDQ4LCAKKyAgICAzOCwgNDMsIDgwLCA0OCwgMzgsIDQ0LCA4MCwgNDgsIDM4LCAyMjIsIDIzNywgMjI2LCAxMjQsIDM4LCAyNTAsIDEwLCAyMjIsIAorICAgIDIzNywgMjI2LCAxMjQsIDM4LCAyNTQsIDk2LCAyMjIsIDIzNywgMjI2LCAxMjQsIDM4LCAxMzQsIDE3MCwgNDgsIDM4LCAKKyAgICAyNDQsIDE5LCAxNzAsIDQ4LCAzOCwgMjQ1LCAxNTQsIDI1MCwgNDMsIDM4LCAyNDUsIDE1NCwgMjE4LCAyMzYsIDM4LCAyNDUsIAorICAgIDE1NCwgMjQ4LCAwLCAzOCwgMjQ1LCAxNTQsIDI1MCwgNDQsIDI1MiwgMTg4LCAzOCwgNDMsIDQ0LCA4MCwgNDgsIDM4LCAKKyAgICAyNDUsIDE1NCwgMjIxLCAxOTAsIDM4LCAyNDUsIDE1NCwgMjM0LCAxNDEsIDM4LCAyNDUsIDE1NCwgMjE0LCAxNTUsIDIyNSwgCisgICAgMTAsIDIxNSwgMjI2LCAzOCwgMjIzLCA1MywgMjE5LCA0OSwgMjI2LCAxMjQsIDM4LCA1MiwgNjcsIDIxOCwgMTA1LCAyMjYsIAorICAgIDEyNCwgMzgsIDI1NCwgMTA2LCA4NywgMzgsIDIxNSwgMjEyLCAyMTQsIDE4MiwgMzgsIDIxMSwgMjQ3LCAyNTEsIDE0OCwgCisgICAgNDgsIDM4LCAxNDAsIDgwLCAyMjYsIDEyNCwgMzgsIDIwMCwgNTIsIDIxOSwgNDksIDIyNiwgMTI0LCAzOCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAzOCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExMSwgMzgsIDQzLCAKKyAgICA4MCwgNTEsIDM4LCA0NCwgODAsIDUxLCAzOCwgMjUzLCAyMjUsIDQ4LCAyNTUsIDIwLCAyMjYsIDIzNSwgMjU1LCA0LCAyMTYsIAorICAgIDQzLCAyMTYsIDE5NywgMjE4LCA3NSwgMTM5LCA2LCAyNTEsIDc0LCAyNDgsIDc5LCAyNTAsIDE4NiwgMjUwLCAxODMsIDIzMiwgCisgICAgMjIwLCA4NywgMjUwLCAyNDgsIDIyNiwgMjM1LCAyNTEsIDM0LCAyMTQsIDE4OSwgMjQ1LCA1NiwgMjQ5LCAxOTksIDIyMSwgCisgICAgMTg3LCAyNDgsIDc5LCAyNDQsIDE4NywgMTE5LCA0LCAyNDMsIDIwOSwgMTE5LCA2LCAyNDIsIDY3LCAyNTEsIDIyNywgNiwgCisgICAgMjQyLCA2NywgMTM5LCA2LCAyNDIsIDY3LCAyMjUsIDQwLCAyNDksIDE5OSwgMjI1LCA0MCwgMjQ5LCAyMDAsIDExNSwgMTEzLCAKKyAgICAyMjUsIDExMSwgMTE5LCA2LCA3NCwgMjUxLCAyMjcsIDYsIDc0LCAxMTksIDYsIDE1NiwgMTE5LCA0LCAxNTYsIDIzMywgCisgICAgMTU1LCA1NywgMjUyLCAxNDksIDg3LCAxMzksIDYsIDIzMCwgMzAsIDIyNywgMjAwLCA1MCwgMjE5LCAzMywgMjIzLCAxMjIsIAorICAgIDI0OSwgMTcwLCAxMTksIDYsIDIyNiwgMTA5LCAxMzksIDYsIDIyNiwgMTA5LCAxMzksIDYsIDIyNCwgOTksIDExOSwgNiwgCisgICAgMTUzLCAyNTEsIDIyNywgNiwgMTUzLCAxMzksIDYsIDE1MywgMjI0LCAxOTksIDIxNywgNzIsIDIyMywgNjUsIDIyMCwgMTM0LCAKKyAgICA3OSwgMjE3LCAyLCA1MCwgMjE1LCAyNTQsIDE2NCwgNTAsIDIxMywgMjQwLCAxMzksIDYsIDIxMCwgMTU5LCAyMjYsIDEzNywgCisgICAgNTAsIDIyNiwgMjI1LCA1MCwgMjM1LCAyMDAsIDIyNiwgMjI1LCA1MCwgMjUxLCAyMjcsIDYsIDIxMCwgMTU5LCAyMTUsIDk0LCAKKyAgICAyNiwgNCwgMSwgMjM1LCAxOTIsIDIzNCwgMTc5LCA1MCwgMjU0LCAxMTUsIDUwLCAxMTksIDYsIDI1MywgMTY2LCAyNTEsIAorICAgIDIyNywgNiwgMjUxLCA3NCwgMjQ1LCA3NiwgODcsIDExOSwgNCwgNzYsIDExOSwgNiwgNzYsIDExOSwgNiwgMjQ1LCAxNCwgCisgICAgMjE1LCA5NCwgNiwgMjQ1LCAxNCwgMTE5LCA2LCAxOTQsIDExOSwgNCwgNzgsIDEwOSwgODcsIDI1MiwgMzcsIDg3LCAyNDIsIAorICAgIDIwOSwgODcsIDI0OCwgMTk4LCA4NywgMjM1LCAyMzksIDIxOSwgMzEsIDIyMiwgMTg5LCA2LCAyMjQsIDk5LCAyNDQsIDE5MCwgCisgICAgNTAsIDEzOSwgNCwgMjI1LCAxMTEsIDEzOSwgNCwgMjQzLCAxMTQsIDEzOSwgNiwgMjQzLCAxMTQsIDEzOSwgNiwgMjI1LCAKKyAgICAxMTEsIDEzOSwgMjMwLCAyOSwgMjE4LCA0MSwgMjE1LCA5NCwgMzUsIDYsIDI0MywgMjA5LCAyMTUsIDk0LCAzNSwgNiwgCisgICAgMTU2LCAyMjMsIDUyLCAzNSwgNiwgMTU2LCAyMTUsIDk0LCAzNSwgNiwgMjExLCAxMTcsIDEzOSwgMzIsIDYsIDI0OSwgNjgsIAorICAgIDEzOSwgMzIsIDQsIDI0OSwgNjgsIDEzOSwgMzIsIDQsIDc2LCAxMzksIDMyLCA0LCA3NCwgMTM5LCAzMiwgNCwgMjM1LCAKKyAgICAxNTAsIDIyNCwgMTczLCAyMzIsIDIxOSwgMjE1LCA5NCwgMjU0LCAxMzQsIDIyNSwgMTg2LCA1MCwgMjU0LCAxODksIDIxNSwgCisgICAgOTQsIDQsIDI0NSwgMTQsIDE2LCAzMSwgMjIxLCAyNTQsIDIxOSwgMzEsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIyMCwgCisgICAgMTIwLCAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMjgsIDE5OSwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjE2LCAyNDIsIAorICAgIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIxNiwgMTY5LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTEzLCAyMTYsIDE2NywgMjEyLCAKKyAgICAxMTQsIDI0NCwgMTAsIDEyMywgMjQ0LCAxMjUsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMTMsIDI0NCwgMTI0LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTM0LCAyNDQsIDEyNCwgMjEyLCAxMTQsIDI0NCwgMTAsIDI0NCwgMTksIDI0NCwgMTI0LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTIzLCAyMTksIDExNywgMjEyLCAxMTQsIDI0NCwgMTAsIDI0NCwgODksIDIxOSwgMTE1LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTIzLCAyNDUsIDE5NiwgMjEyLCAxMTQsIDI0NCwgMTAsIDEzNCwgMjQ1LCAxOTQsIDIxMiwgMTE0LCAyNDQsIAorICAgIDEwLCAyNDQsIDg5LCAyNDUsIDE5NCwgMjEyLCAxMTQsIDI0NCwgMTAsIDIyMCwgMTI0LCAyNDUsIDE5NCwgMjQ0LCAxMCwgCisgICAgMjI3LCAyMDEsIDExMSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMTEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTA1LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDE1OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxNjEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTkwLCAKKyAgICAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5NSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTksIDIyMiwgMjAwLCAyMjcsIDIwMiwgCisgICAgMTk2LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIwMSwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTYsIDI0OCwgMjIyLCAyMDAsIAorICAgIDIyNywgMjAyLCAyNDUsIDE3NSwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTUsIDc2LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgCisgICAgMTIyLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjQwLCAyMTcsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCA4OSwgMjQwLCAKKyAgICAyMTcsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyMTYsIDE0OCwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMTEsIDQsIAorICAgIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTA1LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE1OCwgNCwgMjIyLCAyMDAsIDIyNywgCisgICAgMjAyLCAxNjEsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTkwLCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5NSwgNCwgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAxOTksIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk2LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIAorICAgIDIwMSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTYsIDI0OCwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDUsIDE3NSwgNCwgCisgICAgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTUsIDc2LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgMTIyLCA0LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDEyMywgMjQwLCAyMTcsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTcsIAorICAgIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyMTYsIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDIxNiwgMTQ5LCAKKyAgICAyNTEsIDc1LCAyNDksIDY4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgODksIDIxNiwgMTQ4LCAyMjIsIDIwMCwgMjI3LCAKKyAgICAyMDIsIDIxNiwgMjQ5LCAyMTYsIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMjMsIDUyLCAxMjMsIDI0MCwgMjE3LCA3LCAKKyAgICA0LCAxLCAyMjMsIDUyLCAyNTEsIDc0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxOSwgMTI3LCAyMzMsIDg0LCAxNywgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAyNDQsIDEyMywgMjQ1LCAyMzQsIDE3LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgMTIzLCAyMTYsIAorICAgIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDI0MCwgMjE4LCAyMTYsIDE0OCwgMjEyLCAxMTQsIDI0NCwgMTAsIDIxMCwgCisgICAgODcsIDIxNiwgMTY3LCAxNDAsIDc1LCAyMTQsIDE1MywgNzUsIDk3LCA3NSwgMjQ2LCAxMTIsIDc1LCA0MywgNDQsIDc1LCAKKyAgICAxMjAsIDEyNCwgNzUsIDIyOCwgNjEsIDIxMiwgOSwgNzUsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjE5LCAzMCwgMjQ1LCAKKyAgICAyMjgsIDc1LCAyMTksIDMwLCAyMTIsIDksIDc1LCAxNDAsIDgwLCAyLCA5MSwgOTcsIDgwLCAyLCA5MSwgMTQwLCAyMTIsIAorICAgIDM2LCA3NSwgOTcsIDIxMiwgMzYsIDc1LCAxNDAsIDExMywgMjQxLCAyNDEsIDc1LCAyMTQsIDE1MywgMTEzLCAyNDEsIDI0MSwgCisgICAgNzUsIDk3LCAxMTMsIDI0MSwgMjQxLCA3NSwgMjQ2LCAxMTIsIDExMywgMjQxLCAyNDEsIDc1LCAxNDAsIDgwLCAyLCAyMTcsIAorICAgIDc4LCA5NywgODAsIDIsIDIxNywgNzgsIDE0MCwgODAsIDI0MywgMjUxLCAxMzAsIDIxNCwgMTUzLCA4MCwgMjQzLCAyNTEsIAorICAgIDEzMCwgOTcsIDgwLCAyNDMsIDI1MSwgMTMwLCAyNDYsIDExMiwgODAsIDI0MywgMjUxLCAxMzAsIDEyMCwgMTI0LCA4MCwgMiwgCisgICAgMjUyLCAxMzUsIDE0MCwgODAsIDIsIDEwMywgOTcsIDgwLCAyLCAxMDMsIDE0MCwgODAsIDIsIDIzMiwgMTI5LCA5NywgODAsIAorICAgIDIsIDIzMiwgMTI5LCA0MywgNDQsIDIxMiwgMzYsIDc1LCA0MywgNDQsIDgwLCAyLCA5MSwgMjQ2LCAxMTIsIDIxMCwgMzUsIAorICAgIDc1LCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzgsIDIzMywgNDMsIDIxNCwgMTUzLCA4MCwgMiwgMjE2LCA3OCwgMjIyLCAKKyAgICAyNDQsIDI0NiwgMTEyLCA4MCwgMiwgMjE2LCA3OCwgMjMzLCA0MywgMjQ2LCAxMTIsIDgwLCAyLCAyMTYsIDc4LCAyMjIsIAorICAgIDI0NCwgOTcsIDgwLCAyLCAyNDksIDE2OSwgMjQ2LCAxMTEsIDI0NiwgMTEyLCA4MCwgMiwgMjQ5LCAxNjksIDIzMywgNDMsIAorICAgIDI1NCwgOTYsIDIxNiwgMTUsIDIyMCwgMTU1LCA3NSwgMjUwLCAxMCwgMjE2LCAxNSwgMjIwLCAxNTUsIDc1LCAyMjgsIDYxLCAKKyAgICAyMTIsIDksIDgwLCAyMTYsIDQzLCAyMDAsIDEzMCwgMTQwLCA4MCwgMjE2LCA0MywgMjUyLCAxNDksIDExNSwgOTcsIDgwLCAKKyAgICAyMTYsIDQzLCAxMzAsIDI1NCwgOTYsIDIwNCwgMjUwLCA0NCwgNzUsIDI1MCwgMTAsIDIwNCwgMjUwLCA0NCwgNzUsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNTIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIDIxNCwgCisgICAgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI0NCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIzMywgCisgICAgNDMsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE1MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAKKyAgICAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNDQsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAKKyAgICAyMzMsIDQzLCA5NywgODAsIDExNSwgMTQwLCA3NSwgMjE0LCAxNTMsIDgwLCAxNDAsIDY0LCAyNDYsIDExMiwgNzUsIDE0MCwgCisgICAgODAsIDExNSwgOTcsIDc1LCAxNDAsIDIyNiwgNzQsIDI1MywgMjU1LCAyMTQsIDE1MywgMjI2LCA3NCwgMjUzLCAyNTUsIDk3LCAKKyAgICAyMjYsIDc0LCAyNTMsIDI1NSwgMjQ2LCAxMTIsIDIyNiwgNzQsIDI1MywgMjU1LCAxNDAsIDI0MiwgNiwgMTE1LCA5NywgCisgICAgMjQyLCA1LCA5NywgMjQyLCA2LCAxMTUsIDE0MCwgMjQyLCA1LCAxNDAsIDUyLCA4MCwgMiwgOTEsIDQzLCA0NCwgNTIsIDgwLCAKKyAgICAyLCA5MSwgOTcsIDUyLCA4MCwgMiwgOTEsIDE0MCwgNTIsIDc1LCAyMTQsIDE1MywgNTIsIDc1LCA5NywgNTIsIDc1LCAyNDYsIAorICAgIDExMiwgNTIsIDc1LCA0MywgNDQsIDUyLCA3NSwgMTIwLCAxMjQsIDUyLCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA1MiwgNzUsIAorICAgIDIyOCwgNjEsIDI0NSwgMjI4LCA1MiwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA1MiwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgCisgICAgNTIsIDc1LCAxNDAsIDIxNSwgMjEyLCA3NSwgOTcsIDIxNSwgMjEyLCA3NSwgMTQwLCAyMTgsIDIzMiwgNzUsIDk3LCAyMTgsIAorICAgIDIzMiwgNzUsIDIxNCwgMTUzLCA4MCwgMiwgNTIsIDkxLCAyNDYsIDExMiwgODAsIDIsIDUyLCA5MSwgMTQwLCAyNDgsIDE2MywgCisgICAgNzUsIDIxNCwgMTUzLCAyNDgsIDE2MywgNzUsIDk3LCAyNDgsIDE2MywgNzUsIDI0NiwgMTEyLCAyNDgsIDE2MywgNzUsIAorICAgIDE0MCwgODAsIDIxNiwgNDMsIDEzMCwgOTcsIDgwLCAyMTYsIDQzLCAxMzAsIDE0MCwgNzEsIDc1LCAyMTQsIDE1MywgNzEsIAorICAgIDc1LCA5NywgNzEsIDc1LCAyNDYsIDExMiwgNzEsIDc1LCAyMTQsIDE1MywgNzEsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMTQsIAorICAgIDE1MywgNzEsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTcsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMjAxLCAyMjUsIDIxOCwgMiwgCisgICAgMjAzLCAxMzAsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMjAxLCAyMjUsIDIxOCwgMiwgNjcsIDEzMCwgMjE0LCAxNTMsIDcxLCAKKyAgICA1MiwgNzUsIDIxNCwgMTUzLCA3MSwgNTIsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTcsIDk3LCA3MSwgODAsIDI0MywgMjUxLCAKKyAgICAyMTIsIDU2LCAyMjgsIDYxLCAyMTIsIDksIDgwLCAyMTYsIDQzLCAyNDksIDE2OCwgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAKKyAgICAyMTYsIDQzLCAyNDksIDE2OCwgMTIwLCAxMjQsIDcxLCA3NSwgNDQsIDgwLCAyLCA0LCAyNTAsIDQzLCAyNDYsIDExMiwgODAsIAorICAgIDE0MCwgNjQsIDIxNCwgMTUzLCA3NSwgMTM0LCA5NywgMjUzLCAyNTUsIDE0MCwgODAsIDIsIDY3LCA5MSwgOTcsIDgwLCAyLCAKKyAgICA2NywgOTEsIDQzLCA0NCwgODAsIDIsIDY3LCA5MSwgMTQwLCA4MCwgMiwgNTIsIDY3LCA5MSwgOTcsIDgwLCAyLCA1MiwgNjcsIAorICAgIDkxLCA0MywgNDQsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIDIyNiwgMTc3LCA3NSwgOTcsIDIyNiwgMTc3LCA3NSwgNDMsIAorICAgIDQ0LCAyMjYsIDE3NywgNzUsIDMxLCAyNTQsIDE2MywgMjQ5LCAyMjIsIDIyNiwgMSwgMjQ3LCAyNDEsIDIxNiwgMTg4LCAKKyAgICAyNDUsIDM1LCAyMTYsIDE4OCwgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NSwgMzYsIDI0NSwgMTYwLCAyMjAsIDEyOSwgMjM1LCAKKyAgICAyNTIsIDIyOSwgMjI2LCAyNDUsIDE3OCwgMjI2LCAyMzUsIDIyOCwgNTcsIDI1NCwgMTMyLCAyNDUsIDE3OCwgMjI2LCAyMzUsIAorICAgIDQsIDI0NSwgMTc4LCAyMjYsIDIzNSwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAyMzEsIDY3LCAyNDcsIDE0NiwgMjI4LCA1NywgCisgICAgMjQ5LCAxOTYsIDI1MywgMjQ2LCAyMzEsIDY3LCA0LCAyNDksIDE5NCwgMjUzLCAyNDYsIDIzMSwgNjcsIDI0NSwgMTUxLCAKKyAgICA2NCwgMjI0LCAxNzUsIDIzMCwgMjksIDIyNCwgMTgzLCAyMzAsIDI5LCAyNDksIDE3MywgMjMwLCAyOSwgMjE4LCA0MSwgCisgICAgMjMwLCAxODcsIDUwLCAyMzAsIDE4NSwgNTAsIDU5LCAyMjUsIDI1LCAyNDcsIDE3NywgMjE5LCA5NywgMjIwLCAxMzAsIAorICAgIDIzMCwgMTg2LCAyNTMsIDIyNSwgMjI2LCAxNzEsIDIyMiwgMjM3LCAyMjYsIDE3MSwgMjUxLCAxMjIsIDIyNiwgMTcxLCA0MiwgCisgICAgMjIyLCAxOTUsIDI0OSwgMTE3LCAyMjIsIDE5NSwgMjQ0LCAxMiwgMjIyLCAxOTUsIDIyNCwgMTcxLCAxMTIsIDIzNSwgMjQxLCAKKyAgICA0NCwgMjU0LCAxMTcsIDI1NCwgMTE3LCAyMzEsIDkzLCAyNTQsIDExNywgMjE5LCAxLCAyNTQsIDExNywgMjQ3LCAxNzksIAorICAgIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDcsIDE4MiwgMjI2LCAxMiwgMTEyLCAyMjgsIDU3LCAyMjYsIDEyLCAxMTIsIDIzMiwgCisgICAgMTUyLCAyNTQsIDEyNiwgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMzUsIDIwNSwgMjE0LCAxNzUsIDIzNSwgMjE4LCA1MiwgMjM1LCAKKyAgICAyMTgsIDIxNSwgMjEyLCAyMzUsIDIxOCwgMjQ5LCAxOTAsIDIzNSwgMjE4LCAyMTgsIDE0LCAyMzUsIDIxOCwgMjEzLCAxMjksIAorICAgIDIzNSwgMjE4LCAyNTAsIDEwLCAyMzUsIDIxOCwgMjUwLCAxMCwgMjQ5LCAxOTAsIDIzNSwgMjE4LCAyNTQsIDk2LCAyNDksIAorICAgIDE5MCwgMjM1LCAyMTgsIDIxNiwgMTg3LCAyNTIsIDc1LCAyMjMsIDE0MCwgMjI0LCAxNzIsIDU5LCAyMzAsIDE4NiwgMjQ1LCAKKyAgICA0MSwgMjQzLCA1MywgMjI0LCAxNzIsIDI0MSwgNjQsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMjMsIDUyLCAxODQsIDIzNSwgCisgICAgMjAwLCAyMzMsIDcxLCAyMjIsIDkzLCAyMTksIDE1OSwgMjEyLCAzNSwgMjExLCAyMDAsIDIyNCwgMTgzLCAyMjgsIDU3LCAKKyAgICAxODQsIDIzMCwgMTg3LCAxODQsIDI1MywgMjE4LCAxMjgsIDExMiwgMjI4LCA1NywgMjUzLCAyMTgsIDEyOCwgMTEyLCAyNTQsIAorICAgIDU2LCAxMjgsIDExMiwgMjU0LCA1NiwgMjUxLCA5NiwgMjI4LCA1NywgMjU1LCAxMywgMTI4LCAxMTIsIDIyOSwgMTA1LCAKKyAgICAyNTQsIDU2LCAyMjgsIDY0LCAyNTUsIDEzLCAxMjgsIDExMiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMjgsIDU3LCAyNTQsIAorICAgIDE1NiwgMTI4LCAxMTIsIDI1NCwgMTU2LCAxMjgsIDE3NywgMTI4LCAxMTIsIDIxNSwgMjEyLCAxODQsIDI1NCwgMTY0LCAKKyAgICAxMjgsIDExMiwgMjQ1LCAxMDIsIDExMiwgMjQzLCA1MiwgMjQ1LCAxMDIsIDExMiwgMjQ3LCAyNDIsIDI1MiwgMzEsIDI1NCwgCisgICAgNTgsIDIxNiwgMTk3LCAyMzIsIDIyNywgMjQzLCA1MiwgMTI4LCAxMTIsIDI1NCwgNTYsIDEyOCwgMjE2LCA0MywgMTc3LCAKKyAgICAyMTYsIDE5NywgMjM2LCAyMiwgMjI2LCAyMzUsIDIzNiwgMjIsIDY0LCAxNzcsIDI1NCwgNTYsIDEyOCwgMTEyLCAyNDksIAorICAgIDIzNSwgMjQ1LCAxMDUsIDI0NSwgMTA2LCAyNDksIDIzNCwgMjIyLCAyMzcsIDIzNiwgNywgMTI4LCAxMTIsIDIyMiwgMjM3LCAKKyAgICAxMjgsIDExMiwgMjQ5LCAxNjIsIDExMiwgMjQ1LCA3NSwgMjQ1LCAxMDQsIDExMiwgMjE4LCAxNTksIDI0NSwgMTA1LCAyNDgsIAorICAgIDYzLCAxMjgsIDExMiwgMTI4LCAyMTYsIDQzLCAyNTEsIDg2LCAyNDgsIDgwLCAyMzEsIDkzLCAyNTEsIDg1LCAyMjQsIDE0LCAKKyAgICAxMjgsIDExMiwgMjI4LCA1NywgMTI4LCAxMTIsIDI0MCwgMTExLCAxMTIsIDIyOCwgNTcsIDI0MCwgMTExLCAxMTIsIDIxOCwgCisgICAgMTExLCAyNDUsIDEwMiwgMTEyLCAyMzMsIDIxLCAxNzcsIDEyOCwgMTEyLCAyNDIsIDEzNywgMTc3LCAxMjgsIDExMiwgMjMzLCAKKyAgICAyMSwgMTE1LCAxMjgsIDExMiwgMjQyLCAxMzcsIDExNSwgMTI4LCAxMTIsIDIzMywgMjEsIDI1MSwgOTYsIDIyOCwgNTcsIAorICAgIDEyOCwgMTEyLCAyNDIsIDEzNywgMjUxLCA5NiwgMjI4LCA1NywgMTI4LCAxMTIsIDIzMCwgMTAyLCAyMzMsIDIwLCAyMzAsIAorICAgIDEwMiwgMjQyLCAxMzYsIDI1MiwgMzEsIDIyOCwgNTcsIDI0NSwgMTAyLCAxMTIsIDIyOCwgNTcsIDIzMywgMjAsIDIyOCwgCisgICAgNTcsIDI0MiwgMTM2LCAyMjksIDEwNSwgMjMzLCAyMSwgMjI4LCA2NCwgMTI4LCAxMTIsIDIyOSwgMTA1LCAyNDIsIDEzNywgCisgICAgMjI4LCA2NCwgMTI4LCAxMTIsIDIzMywgMjEsIDE3NywgMjQ1LCAxMDIsIDExMiwgMjQyLCAxMzcsIDE3NywgMjQ1LCAxMDIsIAorICAgIDExMiwgMjI5LCAxMDUsIDIzMywgMjEsIDIyOCwgNjQsIDI0NSwgMTAyLCAxMTIsIDIyOSwgMTA1LCAyNDIsIDEzNywgMjI4LCAKKyAgICA2NCwgMjQ1LCAxMDIsIDExMiwgMjMzLCAyMSwgMTc3LCAyNDIsIDEzNiwgMjQyLCAxMzcsIDE3NywgMjMzLCAyMCwgMjI5LCAKKyAgICAxMDUsIDIzMywgMjEsIDIyOCwgNjQsIDI0MiwgMTM2LCAyMjksIDEwNSwgMjQyLCAxMzcsIDIyOCwgNjQsIDIzMywgMjAsIAorICAgIDIyNCwgMjA1LCAyMTgsIDU2LCAyMjQsIDIwNiwgMTc3LCAxMjgsIDExMiwgMjE4LCA1NywgMTc3LCAxMjgsIDExMiwgMjI0LCAKKyAgICAyMDYsIDE3NywgMjQ1LCAxMDIsIDExMiwgMjE4LCA1NywgMTc3LCAyNDUsIDEwMiwgMTEyLCAyNDcsIDE0NiwgMjI4LCA1NywgCisgICAgMjI0LCAyMDgsIDI0NywgMTQ2LCAyMjgsIDU3LCAyMTgsIDU4LCAyMTgsIDY1LCAyMjYsIDIzNSwgMjE4LCAyMywgMjI2LCAKKyAgICAyMzUsIDIyOCwgNTcsIDExNiwgMjE4LCA2NSwgMjI2LCAyMzUsIDIyOCwgNTcsIDExNiwgMjE4LCAyMywgMjI2LCAyMzUsIAorICAgIDIxOCwgNjUsIDY0LCAxNzcsIDEyOCwgMTEyLCAyMTgsIDIzLCA2NCwgMTc3LCAxMjgsIDExMiwgMjI5LCAxMDUsIDExNiwgCisgICAgMjE4LCA2NSwgNjQsIDIyOCwgNjQsIDEyOCwgMTEyLCAyMjksIDEwNSwgMTE2LCAyMTgsIDIzLCA2NCwgMjI4LCA2NCwgMTI4LCAKKyAgICAxMTIsIDIxOCwgNjUsIDY0LCAyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCAyMywgNjQsIDIsIDIyOCwgNTcsIDEyOCwgCisgICAgMTEyLCAyMzAsIDg2LCAyMzAsIDg3LCAyMzAsIDg4LCAyMzAsIDg3LCAyMTQsIDE3NSwgNDIsIDIzNiwgMjIsIDIyNiwgMjM1LCAKKyAgICA0MiwgMjI2LCAxNTQsIDIyNiwgMjM1LCA0MiwgMjM2LCAyMiwgNjQsIDE3NywgMTI4LCAxMTIsIDQyLCAyMjYsIDE1NCwgNjQsIAorICAgIDE3NywgMTI4LCAxMTIsIDQyLCAyNTEsIDMsIDQyLCAyNDksIDExMCwgMzcsIDIyNSwgMjUsIDM3LCAyMzAsIDE4NiwgMzcsIAorICAgIDIxNiwgODYsIDM3LCAyNDcsIDE3NywgMjE5LCA5NywgMzcsIDU5LCAyMjYsIDE3MSwgMzcsIDIyMiwgMjM3LCAyMjYsIDE3MSwgCisgICAgMzcsIDI1MywgMjI1LCAyMjYsIDE3MSwgMzcsIDI0NSwgMTA1LCAzNywgMjQ4LCAxNjQsIDkyLCAyMjUsIDI1LCA5MiwgMjMwLCAKKyAgICAxODYsIDkyLCAyMTYsIDg2LCA5MiwgNTksIDIyNiwgMTcxLCA0NCwgMjE3LCA4OCwgNDMsIDIxNywgODgsIDEyNCwgMjE3LCAKKyAgICA4OCwgMTIwLCAyMTcsIDg4LCAyNTMsIDIyOCwgMjMwLCAxNjEsIDIxNSwgMTkyLCAyNDQsIDMzLCAyMTUsIDIxMiwgNjcsIAorICAgIDI1MiwgMTQ5LCA0NCwgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0OSwgNTIsIDQ0LCAyMTUsIDkzLCAyNDcsIDE0NiwgMjI4LCAKKyAgICA1NywgMjI0LCAxNjYsIDIyOCwgNTcsIDIxNSwgMTkyLCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ0LCAzNCwgMjI5LCAxMDcsIAorICAgIDUyLCA2NywgMjUyLCAxNDksIDUyLCA0NCwgMjE1LCA5MywgMjI0LCAyMDYsIDIxNCwgMTg0LCAyMjMsIDk0LCAyMTgsIDU3LCAKKyAgICAyMTQsIDE4NCwgMjIzLCA5NCwgMjI4LCA2MiwgMjE4LCA3OCwgMjI2LCAyMzUsIDI0OSwgMTk0LCAyNTMsIDI0NiwgMjI4LCAKKyAgICA2MiwgMjE4LCA3NywgMjI4LCA2MiwgMjE4LCA3OCwgNjQsIDE3NywgMTI4LCAxMTIsIDI0OSwgMTk0LCAyNTMsIDI0NiwgCisgICAgMjI4LCA2MiwgMjE4LCA3OCwgMTc3LCAxMjgsIDExMiwgMjI2LCAxNTQsIDIyNiwgMjM1LCAyMzYsIDIyLCAyMjYsIDIzNSwgCisgICAgMjMwLCA5MiwgMjQxLCAyMDcsIDI0OSwgMjA0LCAyMzEsIDE0MiwgMjM1LCAyMTUsIDIxMSwgMTQ1LCAyMjksIDIwNywgMjI4LCAKKyAgICA2MywgNDQsIDI1NCwgMTE4LCAyLCAyNTQsIDMzLCA0NCwgMjE1LCAyMjYsIDIzMCwgMjksIDIzMiwgMTUyLCAyNTQsIDEyNiwgCisgICAgMjMwLCAyOSwgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMzAsIDI5LCAyMzUsIDIwNSwgMjMwLCAyOSwgMjE0LCAxNzUsIDI0OCwgCisgICAgMSwgMjI2LCAxNzEsIDU5LCAyMjYsIDE3MSwgMjE4LCAxNTksIDIyNiwgMTcxLCAyNDcsIDE3NywgMjE2LCA4NiwgMjUxLCAKKyAgICAxNzIsIDQzLCAyMjgsIDYyLCAyNDQsIDE4OSwgMjIwLCAxNTEsIDIyNCwgMTgzLCA0NCwgMjI4LCA2MiwgMjQ0LCAxODksIAorICAgIDIyMCwgMTUxLCAyMjQsIDE4MywgNDMsIDIyMCwgMTUxLCAyMjQsIDE4MywgNDQsIDIyMCwgMTUxLCAyMjQsIDE4MywgMjIzLCAKKyAgICA1MiwgMjE2LCA5MCwgMjQ1LCAxMDUsIDI0OSwgMTA3LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDI0OSwgMTA3LCAyMzIsIDE1MiwgCisgICAgMjU0LCAxMjYsIDUyLCAyMTgsIDY0LCA1MiwgMjE4LCAyMiwgNTIsIDIzNSwgMjA1LCA1MiwgMjE0LCAxNzUsIDIyNSwgNTAsIAorICAgIDEyOCwgMjIsIDIyNiwgMTIsIDExMiwgMjMzLCAyMSwgMiwgMjQ3LCAxMjgsIDI0MiwgMTM3LCAyLCAyNDcsIDEyOCwgMjEzLCAKKyAgICAxODcsIDIzMCwgMTAyLCAyMzMsIDIwLCAyMTMsIDE4NywgMjMwLCAxMDIsIDI0MiwgMTM2LCAyMzMsIDIxLCAxMjgsIDIxNiwgCisgICAgNDMsIDE3NywgMjQyLCAxMzYsIDI0MiwgMTM3LCAxMjgsIDIxNiwgNDMsIDE3NywgMjMzLCAyMCwgMTI4LCAyMTYsIDQzLCAKKyAgICAxNzcsIDIzMywgMjAsIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNiwgMTI4LCAyMTYsIDQzLCAxNzcsIDIyNCwgMjA1LCAKKyAgICAxMjgsIDIxNiwgNDMsIDE3NywgMjE4LCA1NiwgMjQ3LCAxNDYsIDIyOCwgNTcsIDIyNCwgMjA5LCAxNzcsIDI0NSwgMTA3LCAKKyAgICAyNDcsIDE0NiwgMjI4LCA1NywgMjE4LCA1OSwgMTc3LCAyNDUsIDEwNywgMjI4LCA1NywgNDIsIDIzNiwgMjIsIDY0LCAxNzcsIAorICAgIDEyOCwgMTEyLCAyMjgsIDU3LCA0MiwgMjI2LCAxNTQsIDY0LCAxNzcsIDEyOCwgMTEyLCA0MiwgMjM2LCAyMiwgNjQsIDE3NywgCisgICAgMjI4LCA1NywgMTI4LCAxMTIsIDQyLCAyMjYsIDE1NCwgNjQsIDE3NywgMjI4LCA1NywgMTI4LCAxMTIsIDIzMywgMjEsIAorICAgIDI1MSwgOTYsIDIyOCwgNTcsIDI0NSwgMTAyLCAxMTIsIDI0MiwgMTM3LCAyNTEsIDk2LCAyMjgsIDU3LCAyNDUsIDEwMiwgCisgICAgMTEyLCAyMjQsIDIwNiwgMjUxLCA5NiwgMjI4LCA1NywgMjQ1LCAxMDIsIDExMiwgMjE4LCA1NywgMjUxLCA5NiwgMjI4LCAKKyAgICA1NywgMjQ1LCAxMDIsIDExMiwgMjI4LCA1NywgMjI4LCA2MiwgMjE4LCA3OCwgMjI2LCAyMzUsIDI0NywgMTQ2LCAyMjgsIAorICAgIDU3LCAyNDksIDE5NiwgMjUzLCAyNDYsIDIyOCwgNjIsIDIxOCwgNzcsIDIyOCwgNTcsIDIyOCwgNjIsIDIxOCwgNzgsIDY0LCAKKyAgICAxNzcsIDEyOCwgMTEyLCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ5LCAxOTYsIDI1MywgMjQ2LCAyMjgsIDYyLCAyMTgsIDc4LCAKKyAgICAxNzcsIDI0NSwgMTA3LCA2NywgMjQ1LCAxNzEsIDIzMCwgMjI3LCAyMDMsIDI0NSwgMTcxLCAxMjAsIDQ0LCAyNDgsIDcsIAorICAgIDI0NSwgMTcxLCAxMjQsIDQ0LCAyNDgsIDcsIDI0NSwgMTcxLCAyNDUsIDE3OCwgNjQsIDIsIDIwMCwgMjAzLCA5MSwgMjQ1LCAKKyAgICAxNzgsIDY0LCAyLCA2NywgMjUyLCAxNDksIDI1MywgMjE1LCAyNDUsIDE1MSwgNjQsIDIwMywgOTEsIDQsIDI0NSwgMTc4LCAKKyAgICA2NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCAyNDUsIDE3OCwgNjQsIDIsIAorICAgIDU5LCA0OCwgMjQ1LCAxNzgsIDY0LCAyLCAyMjYsIDEyNywgNCwgMjQ1LCAxNzgsIDY0LCAyLCAyMjYsIDEyNywgMjQ1LCAKKyAgICAxNzgsIDY0LCAyLCAyMTQsIDE4MywgMjQ1LCAxNzgsIDY0LCAyLCAxMTMsIDIwMywgMjE4LCA5MiwgMjQ5LCAxOTQsIDIsIAorICAgIDIwMCwgMjAzLCA5MSwgMjQ5LCAxOTQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgCisgICAgNCwgMjQ5LCAxOTQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgMjQ5LCAxOTQsIAorICAgIDIsIDIyNiwgMTI3LCA0LCAyNDksIDE5NCwgMiwgMjI2LCAxMjcsIDIxMCwgMTYwLCAxODksIDI1MiwgMTgxLCAyMzEsIDY2LCAKKyAgICAyNDgsIDIsIDUwLCAyNDUsIDE4MCwgNzUsIDI0MCwgMjQxLCAxMjAsIDI1NCwgMSwgMTI0LCAyNTQsIDEsIDIyNCwgMTc4LCAKKyAgICAyMjUsIDE2OCwgMjEyLCAzMiwgMjMyLCAyMTksIDQzLCAyNTAsIDE4OSwgNDQsIDI1MCwgMTg5LCA0MywgMjQ0LCA2NSwgNDQsIAorICAgIDI0NCwgNjUsIDI1MSwgMTgzLCA0NCwgMjQ5LCAxNDAsIDI1MSwgMTgzLCA0MywgMjQ5LCAxNDAsIDIxNiwgMTUsIDQ0LCAKKyAgICAyNDksIDE0MCwgMjE2LCAxNSwgNDMsIDI0OSwgMTQwLCAyMjMsIDUyLCAyMjgsIDU3LCA1MCwgNDIsIDIzMiwgMTEwLCAyNTQsIAorICAgIDMzLCAyMjEsIDE2NiwgMjIxLCAxNzMsIDIxNywgMiwgMjIzLCAxMjMsIDIyNCwgMjQ0LCAyMzUsIDI0NSwgMjEzLCAxNjUsIAorICAgIDIxOCwgMjM2LCAyMjUsIDQ0LCA2NCwgMjM1LCAyMTQsIDUwLCAyMTUsIDk0LCAyMjgsIDU3LCA1MCwgMjEyLCA0MiwgMjQwLCAKKyAgICAyNDMsIDIxNiwgMTUsIDQzLCAyNDksIDE2OCwgMjE2LCAxNSwgNDQsIDI0OSwgMTY4LCAyNTEsIDE4MywgNDMsIDI0OSwgCisgICAgMTY4LCAyNTEsIDE4MywgNDQsIDI0OSwgMTY4LCAyMTYsIDE1LCAxNjMsIDIzNSwgMjE4LCAyNTEsIDE4MywgMTYzLCAyMzUsIAorICAgIDIxOCwgMjQzLCAyNDgsIDIxOSwgNzcsIDEyMCwgMjU0LCAyLCAyNTIsIDMyLCAxMTMsIDIwMywgMjUyLCAxMzcsIDIyNiwgCisgICAgMTY0LCAyMzQsIDE0NCwgMjQ1LCA5OCwgMjE2LCA0MywgMjE2LCAxOTcsIDIyMiwgMjU0LCAyMTEsIDE3OSwgMjM2LCA3LCAKKyAgICAxMTYsIDIyMywgMTIwLCAyNTEsIDE3MSwgMjM0LCAxNDMsIDIzMywgNDgsIDI1NCwgMTE4LCAxMjcsIDIyMiwgMjUwLCAyNTQsIAorICAgIDExOCwgMTI3LCAyNDUsIDk4LCAyMTYsIDQzLCAyMTYsIDE5NywgMjMzLCA1MiwgMjUyLCA0MywgMjIyLCAyMzYsIDI0OSwgCisgICAgNzgsIDI1NCwgMTY0LCAyNTQsIDksIDIxNywgMTgyLCAyMTYsIDUsIDIyMiwgMTI1LCAyNDcsIDIyMywgMjI2LCAxNTUsIAorICAgIDI0OSwgMjA2LCAyMTcsIDUzLCAyMTksIDg4LCAyNDksIDE1OSwgMjQ5LCAxNTgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjQwLCAxNTgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE4LCAyMzAsIDIyNCwgMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjI0LCAzMSwgMjQ1LCAxMDcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjQ3LCAxODIsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjQ4LCAwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIzNSwgNjIsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjUwLCA0MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAKKyAgICAyMTgsIDEzNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyMzUsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIxOSwgOTgsIDEzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTIsIDE4OSwgMTMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIyNCwgMzEsIDIxOSwgOTcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjUyLCAxODgsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjMzLCAyMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNDIsIDEzNiwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxNDAsIDIxNCwgMTksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgOTcsIDIxNCwgMTksIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMTQwLCA3NSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAKKyAgICA5NywgNzUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjUyLCAxODgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMTI0LCAyMTcsIDg5LCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDYzLCAyMTgsIDEzNywgMjU0LCAKKyAgICA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAxMjQsIDI1MCwgMjQ2LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIAorICAgIDI0OCwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTI0LCAyMTcsIDg5LCAyMzUsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIxNCwgMTUzLCAyMTQsIDE5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIxNCwgMTUzLCA3NSwgMjU0LCAKKyAgICA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIxNywgODksIDIyNiwgMTI3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNzQsIAorICAgIDIxOCwgMTM3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDEyMCwgMjUwLCAyNDYsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMSwgMjQ4LCA3MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIxNywgODksIDIzNSwgNjIsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ2LCAxMTIsIDIxNCwgMTksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgCisgICAgMjQ2LCAxMTIsIDc1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMCwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjQ4LCA2MywgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCAxLCAyMTQsIDE4MywgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMzUsIDYzLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyMTQsIAorICAgIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIyMCwgNywgMjM1LCA2MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyMjQsIDAsIDIyNCwgMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjE4LCAxNTgsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMSwgMjQ5LCAyMzQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyMTcsIDg5LCAyNDgsIDksIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCA3NCwgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIxOCwgMTU5LCAKKyAgICAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjM1LCA2MywgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDI1MCwgNDQsIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjQsIDIyMCwgNywgMjE4LCAxMzcsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgNDMsIDIyMCwgNywgMjE4LCAxMzcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE2LCA5MCwgMjQ4LCAKKyAgICA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0MiwgMTM3LCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ5LCAKKyAgICAyMjgsIDEzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDc0LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjEwLCAzNCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTgsIDEzOCwgMTg0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIyMCwgMTUzLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMjgsIDU3LCAyNDUsIDEwNywgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMjQsIDE1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyNCwgMjUwLCAKKyAgICAyNDcsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDI1MCwgMjQ3LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjM1LCAxOTIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjIzLCA0MCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjYsIAorICAgIDIwNSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTQsIDE1MiwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjQ1LCAxMDksIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIzNSwgMTkzLCAyMTQsIDE4MywgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMjYsIDIwNiwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjU0LCAxNTEsIDIyOCwgCisgICAgNTcsIDI1MCwgMTM4LCA3OSwgNDQsIDI1NCwgMTE4LCAyLCAyNDYsIDExMiwgMjEwLCAzNSwgNzUsIDIxOSwgMjM3LCAyMDQsIAorICAgIDI1MSwgMTcxLCAyNTIsIDUzLCA4NywgNjcsIDIzMiwgMjIwLCAyLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDIzNSwgMjIzLCA4NywgCisgICAgMjQ5LCAxOTEsIDIxNCwgMTgxLCA4NywgMjQ3LCAxOTcsIDIxNCwgMTgxLCA4NywgMjQ1LCAxNjIsIDg3LCAyNDksIDIxOCwgCisgICAgODcsIDcxLCA0MiwgMiwgMjUwLCAxODMsIDY3LCAyMzIsIDIxOSwgMjQ1LCAxMzgsIDg3LCAyNTQsIDE0NywgMjM0LCAxNDUsIAorICAgIDg3LCAyNDEsIDIyMCwgODcsIDM3LCAyMDMsIDI1MiwgMTQ5LCAyLCAyMjgsIDU1LCAzNywgMjE1LCAyMjcsIDI0NiwgMTE0LCAKKyAgICAyNTEsIDE0MywgMjUwLCA0NCwgMiwgMjI4LCA1OSwgNzUsIDIxNCwgMTc5LCA4NywgMjMwLCAxNDIsIDg3LCAyNDAsIDE3MSwgCisgICAgODcsIDIyNiwgMTc4LCAyNDIsIDY2LCA4NywgMjI2LCAxNzgsIDIzMywgMTUzLCA4NywgMjI1LCAyNDgsIDg3LCAyMjUsIAorICAgIDI0NywgODcsIDI0NywgMjA1LCAyNDksIDEwNSwgMTYsIDI0NCwgMjgsIDEwNSwgMjE5LCA1MiwgODcsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMCwgMjQ4LCA5MSwgMjIwLCAxNDAsIDIzNCwgMTQ1LCA4NywgMjI0LCAxOTUsIDIyNiwgNzksIAorICAgIDIyOSwgODcsIDIyNiwgNzksIDIyNCwgMTkxLCAyMjEsIDE5MSwgODcsIDI1MCwgMjUsIDIyMSwgMTkxLCA4NywgNDMsIDIyNiwgCisgICAgOCwgMjE0LCAxNjAsIDEwMywgNDMsIDIyNiwgOCwgMjQ1LCAyOSwgNDMsIDIyNiwgOCwgMjMyLCAxMTQsIDEwMywgNDQsIAorICAgIDIyNiwgOCwgMjE0LCAxNjAsIDEwMywgNDQsIDIyNiwgOCwgMjQ1LCAyOSwgNDQsIDIyNiwgOCwgMjMyLCAxMTQsIDEwMywgCisgICAgNDMsIDQyLCAyNTEsIDE2NiwgMjE0LCAxNjAsIDI0OSwgMTY4LCA0MywgNDIsIDI1MSwgMTY2LCAyNDUsIDI5LCA0MywgNDIsIAorICAgIDI1MSwgMTY2LCAyMzIsIDExNCwgMjQ5LCAxNjgsIDQ0LCA0MiwgMjUxLCAxNjYsIDIxNCwgMTYwLCAyNDksIDE2OCwgNDQsIAorICAgIDQyLCAyNTEsIDE2NiwgMjQ1LCAyOSwgNDQsIDQyLCAyNTEsIDE2NiwgMjMyLCAxMTQsIDI0OSwgMTY4LCA0MywgMjQ5LCAKKyAgICAxMDcsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMTAzLCA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzAsIDIyOSwgMjI1LCAxMDQsIAorICAgIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMiwgMTE0LCAxMDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjQ1LCAyOSwgNDQsIAorICAgIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjE0LCAxNjAsIDEwMywgNDQsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjMwLCAyMjksIDIyNSwgCisgICAgMTA0LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzIsIDExNCwgMTAzLCAyMzUsIDIxOSwgMjQ1LCAyOSwgMjAzLCAyMzIsIAorICAgIDIyMCwgMjQ1LCAyOSwgMjE0LCAxNjAsIDQzLCAxNzcsIDIzMiwgMTE0LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjEsIAorICAgIDE3NCwgMjE0LCAxNjAsIDQ0LCAxNzcsIDIzMiwgMTE0LCA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjEsIDE3NCwgMjE4LCAKKyAgICA0MiwgMjE2LCAxNCwgMjE4LCA0MiwgMjUxLCAxODIsIDIxNiwgMTUsIDQyLCAxMjcsIDI1MSwgMTgzLCA0MiwgMTI3LCAyNTEsIAorICAgIDE4MywgNDIsIDI1MSwgMTY2LCAxMTUsIDIxNiwgMTUsIDQyLCAxMjcsIDM0LCAxNiwgMjUxLCAxODIsIDQzLCA2NywgOTMsIAorICAgIDIzMiwgMjE5LCA0NCwgNjcsIDkzLCAyMzIsIDIxOSwgMjAzLCAyMjEsIDIwNywgMjMyLCAyMTgsIDIwMywgMjIxLCAyMDcsIAorICAgIDIzMiwgMjE3LCAyMDMsIDIyMSwgMjA3LCAyMzIsIDIxNiwgMjAzLCAyMjEsIDIwNywgMjMyLCAyMTUsIDI0OCwgNTQsIDE2LCAKKyAgICAxOTMsIDY3LCAyMiwgMjE2LCAxNSwgMjIyLCAyNTQsIDI0OCwgNTQsIDE2LCAxOTMsIDY3LCAyMiwgMjUxLCAxODMsIDIyMiwgCisgICAgMjU0LCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMiwgMjUwLCA0MywgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjAzLCAyLCAKKyAgICAyNTAsIDQzLCAyNDgsIDU0LCAxNiwgMTkzLCAxMjAsIDIyLCAyMDMsIDIsIDI1MCwgNDMsIDI0OCwgNTQsIDE2LCAxOTMsIAorICAgIDY3LCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjAzLCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgCisgICAgMTYsIDE5MywgMTIwLCAyMiwgMjAzLCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIyLCAyMTIsIDM1LCAKKyAgICAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyMDMsIDIsIDIxMiwgMzUsIDI0OCwgNTQsIDE2LCAxOTMsIDEyMCwgMjIsIAorICAgIDIwMywgMiwgMjEyLCAzNSwgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjQxLCA1MSwgMjQ4LCA1NCwgMTYsIDE5MywgCisgICAgMTIwLCAyMiwgMjQxLCA1MSwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIyLCAyMTYsIDE1LCAyMzMsIDUyLCAyNDgsIDU0LCAKKyAgICAxNiwgMTkzLCA2NywgMjIsIDI1MSwgMTgzLCAyMzMsIDUyLCA0MiwgMjQ0LCA0MCwgMjIzLCA1NywgODcsIDI0NSwgMTkwLCAKKyAgICA4NywgNjcsIDIzMiwgMjIwLCAyNDUsIDI5LCAyMzEsIDM4LCAyNTEsIDE1NCwgMjMxLCAzOCwgMjAwLCAxMTUsIDIxOSwgCisgICAgMjUyLCAyMzEsIDM4LCAyMTksIDI1MywgMTE1LCAyMzIsIDE0MywgMjMxLCAzOCwgMjAwLCAxMTUsIDExMywgMjE5LCAyMzksIAorICAgIDIzMSwgMzgsIDExMywgMjE5LCAyNDAsIDExNSwgMjMyLCAxNDMsIDIzMSwgMzgsIDExMywgMjE5LCAyNDAsIDIzNSwgNzAsIAorICAgIDIzMSwgMzgsIDIxNSwgMjA5LCAyMzEsIDM4LCAyMTYsIDIyNCwgMjMxLCAzOCwgMjI1LCAxOTEsIDI0NSwgMjMyLCAyNDIsIAorICAgIDEyOSwgMjQzLCAyMjYsIDIxNiwgMTUsIDIyNiwgNywgMjUxLCAxODMsIDIyNiwgNywgMjE2LCAxNSwgMjQ5LCAxMDcsIDEyNywgCisgICAgMjUxLCAxODMsIDI0OSwgMTA3LCAxMjcsIDIxNiwgMTUsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyNTEsIDE4MywgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAxMjcsIDcxLCAyMTUsIDI0MCwgMjUyLCA0MywgMjIyLCAyMzcsIDIsIDI1MCwgNDMsIDIxOCwgMTIyLCAyNDQsIAorICAgIDcyLCAyNTUsIDI2LCAyNDksIDEwNCwgMjQ1LCAxNzksIDIzNSwgMjA1LCAyNDgsIDkxLCAyNDUsIDMyLCA4NywgODUsIDIyMiwgCisgICAgMjUwLCA1MiwgMjE1LCAyMjYsIDg1LCAyMzMsIDQ4LCA1MiwgMjE1LCAyMjYsIDg1LCAyMTQsIDE2MiwgNTIsIDIxNSwgMjI2LCAKKyAgICA4NSwgMjQ2LCAxMTMsIDUyLCAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCA1MiwgMjE1LCAyMjcsIDIsIDY3LCAxMzAsIDg1LCAKKyAgICAyMzMsIDQ4LCA1MiwgMjE1LCAyMjcsIDIsIDY3LCAxMzAsIDg1LCAyMjIsIDI1MCwgMjE1LCAyMjcsIDIsIDUyLCA2NywgCisgICAgMTMwLCAyNTQsIDE4MiwgMjUwLCAxMSwgMjE4LCAxMjgsIDIxNiwgODcsIDI1MCwgMTEsIDI0MCwgMjQ0LCAyLCAyNDQsIDU4LCAKKyAgICAyMjEsIDI0MywgMTYsIDMxLCAyMjcsIDIwNiwgMTYsIDMxLCAyMTgsIDE1NCwgNjQsIDI0MSwgMjQwLCAxNiwgMzEsIDIxOCwgCisgICAgMTU0LCA2NCwgMjE2LCAyMTMsIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAyMTYsIDIxMywgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIAorICAgIDIxNSwgMjQ0LCAxNiwgMzEsIDI0NSwgMTQwLCAxNiwgMzEsIDI1NSwgMTYsIDE2LCAzMSwgMjUyLCA1MiwgMTYsIDMxLCAKKyAgICAyNTIsIDE4NywgMTYsIDMxLCAyMDMsIDIxNywgOTAsIDE2LCAzMSwgMjMyLCAyMjAsIDI0NCwgMTUzLCAxNiwgMzEsIDY3LCAKKyAgICAyMTcsIDkwLCAxNiwgMzEsIDI0NCwgMjgsIDI0NCwgMTUzLCAxNiwgMzEsIDI1MCwgMjM4LCAyMjMsIDU2LCAxNiwgMzEsIAorICAgIDIyMCwgMzAsIDIyNiwgMTM0LCAxNiwgMzEsIDIyMCwgMzAsIDIzNiwgNiwgMTYsIDMxLCAyNDgsIDE1OSwgMjMyLCAyMTAsIAorICAgIDI0NSwgODUsIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDExMSwgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTA1LCAKKyAgICAxNiwgMzEsIDI0OCwgMzksIDI0OSwgMTg2LCAxNTgsIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDE2MSwgMTYsIDMxLCAKKyAgICAxNTIsIDI1NSwgMTYsIDE2LCAzMSwgMjE3LCAxNzgsIDIzNiwgNjksIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAyMTUsIDI0NSwgCisgICAgMjUxLCAyMjEsIDE2LCAzMSwgMjUxLCAxMywgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIDIzMSwgODYsIDE2LCAzMSwgMjE4LCAKKyAgICA2MiwgMTYsIDMxLCAyNDUsIDg1LCAxNiwgMzEsIDI0NCwgMTE1LCAyMjAsIDEzOSwgMTYsIDMxLCAyNDIsIDEyOCwgMjIwLCAKKyAgICAxMzksIDE2LCAzMSwgMjIzLCAxMjQsIDIyMCwgMTM5LCAxNiwgMzEsIDIxNCwgMTc0LCAyMjAsIDEzOSwgMTYsIDMxLCAyMTksIAorICAgIDIwLCAxNiwgMzEsIDI0OCwgNzEsIDI1MSwgMjI0LCA4NywgMjA0LCAyNTEsIDE3MSwgMTYsIDMxLCAyMjksIDkwLCAxNiwgCisgICAgMzEsIDI0OCwgNzIsIDI0NCwgMjgsIDEwNSwgMTYsIDMxLCAyMTgsIDYzLCAyNDQsIDI4LCAxMDUsIDIyNiwgMjQ1LCAxMDMsIAorICAgIDIyNiwgMjQ1LCAyNTAsIDE2MCwgMjI2LCAyNDUsIDI0NCwgMzEsIDIyNiwgMjQ1LCAyMzUsIDIwMCwgMjQ0LCAzMSwgMjI2LCAKKyAgICAyNDUsIDI1MiwgNTAsIDI1MSwgMTMyLCAyMjYsIDI0NSwgMjUxLCAxNzgsIDIxNiwgMTEyLCAyMjYsIDI0NSwgMjUxLCAxNjMsIAorICAgIDI1MiwgMTU0LCAyNDAsIDExMCwgMjI2LCAyNDUsIDI1NCwgMTM1LCA2NCwgMjUwLCAxMzcsIDIyNiwgMjQ1LCAyNDgsIDE2NCwgCisgICAgMjI2LCAyNDUsIDI0OSwgOTUsIDI1NSwgMjAsIDIyNywgMjA0LCAyMjYsIDI0NSwgNTIsIDI1MiwgMTg4LCAzNywgMjEsIAorICAgIDExMSwgMzcsIDIxLCAxMDUsIDM3LCAyMSwgMTU4LCAzNywgMjEsIDE2MSwgMzcsIDIxLCAxOTAsIDM3LCAyMSwgMTk1LCAzNywgCisgICAgMjEsIDE5OSwgMzcsIDIxLCAxOTYsIDM3LCAyMSwgMjAxLCAzNywgNTQsIDIxNiwgMjQ4LCAzNywgNTQsIDI0NSwgMTc1LCAKKyAgICAzNywgNTQsIDIxNSwgNzYsIDM3LCA1NCwgMjE2LCAxNjUsIDM3LCA1NCwgMjQ0LCAxMywgMzcsIDU0LCAyNDQsIDEyNiwgMzcsIAorICAgIDU0LCAyMTksIDEyMSwgMzcsIDU0LCAyMjAsIDEyMSwgMzcsIDU0LCAyNDUsIDE5OCwgMzcsIDU0LCAyMjgsIDIwMiwgMzcsIAorICAgIDU0LCAyMTUsIDczLCA4OCwgMjEsIDExMSwgODgsIDIxLCAxMDUsIDg4LCAyMSwgMTU4LCA4OCwgMjEsIDE2MSwgODgsIDIxLCAKKyAgICAxOTAsIDg4LCAyMSwgMTk1LCA4OCwgMjEsIDE5OSwgODgsIDIxLCAxOTYsIDg4LCAyMSwgMjAxLCA4OCwgNTQsIDIxNiwgCisgICAgMjQ4LCA4OCwgNTQsIDI0NSwgMTc1LCA4OCwgNTQsIDIxNSwgNzYsIDg4LCA1NCwgMjE2LCAxNjUsIDg4LCA1NCwgMjQ0LCAKKyAgICAxMywgODgsIDU0LCAyNDQsIDEyNiwgODgsIDU0LCAyMTksIDEyMSwgODgsIDU0LCAyMjAsIDEyMSwgODgsIDU0LCAyNDUsIAorICAgIDE5OCwgODgsIDU0LCAyMjgsIDIwMiwgODgsIDU0LCAyMTUsIDczLCAyMSwgMTIzLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAKKyAgICAxMTMsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDEzNCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjQ0LCAxOSwgMjQzLCAKKyAgICAyMzYsIDIxOCwgMTMxLCAyMSwgMjQ0LCA4OSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjE5LCAxMjcsIDI0MywgMjM2LCAKKyAgICAyMTgsIDEzMSwgMjEsIDIyMCwgMTI0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyNDUsIDIwMSwgMjQzLCAyMzYsIDIxOCwgCisgICAgMTMxLCAyMSwgMjI4LCAyMDUsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIxNiwgMjQ5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIAorICAgIDU0LCAyNDUsIDE3NiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjE1LCA3NywgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgCisgICAgMjE2LCAxNjYsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NCwgMTQsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NCwgCisgICAgMTI3LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTksIDEyMiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjIwLCAxMjIsIAorICAgIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NSwgMTk5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMjgsIDIwMywgMjQzLCAKKyAgICAyMzYsIDIxOCwgMTMxLCA1NCwgMjE1LCA3NCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA4OCwgNywgNCwgMSwgNjEsIDg4LCA3LCAKKyAgICA0LCAxLCAyNTMsIDE2NiwgODgsIDcsIDQsIDEsIDI1MSwgNzQsIDg4LCA3LCA0LCAxLCAyNDksIDY4LCA4OCwgNywgNCwgMSwgCisgICAgNzYsIDg4LCA3LCA0LCAxLCAyNDUsIDE0LCA4OCwgNywgNCwgMSwgMjQzLCAyMDksIDg4LCA3LCA0LCAxLCAyNDIsIDY3LCAKKyAgICA4OCwgNywgNCwgMSwgNzQsIDg4LCA3LCA0LCAxLCAyMzUsIDE1MCwgODgsIDcsIDQsIDEsIDIzNSwgMjksIDg4LCA3LCA0LCAKKyAgICAxLCAxNTYsIDg4LCA3LCA0LCAxLCAxOTQsIDg4LCA3LCA0LCAxLCAyMzAsIDMwLCA4OCwgNywgNCwgMSwgNzgsIDg4LCA3LCAKKyAgICA0LCAxLCAyMjYsIDEwOSwgODgsIDcsIDQsIDEsIDIyNCwgOTksIDg4LCA3LCA0LCAxLCAxNTMsIDg4LCA3LCA0LCAxLCAyMjIsIAorICAgIDkzLCA4OCwgNywgNCwgMSwgMjE3LCAxNTMsIDg4LCA3LCA0LCAxLCA2OSwgODgsIDcsIDQsIDEsIDIxNCwgMTA1LCA4OCwgNywgCisgICAgNCwgMSwgMjEyLCA5OCwgODgsIDcsIDQsIDEsIDIxMSwgMTc4LCA4OCwgNywgNCwgMSwgMjExLCAxMTcsIDg4LCA3LCA0LCAxLCAKKyAgICAyMTAsIDE1OSwgMzcsIDcsIDYsIDEsIDYxLCAzNywgNywgNiwgMSwgMjUzLCAxNjYsIDM3LCA3LCA2LCAxLCAyNTEsIDc0LCAKKyAgICAzNywgNywgNiwgMSwgMjQ5LCA2OCwgMzcsIDcsIDYsIDEsIDc2LCAzNywgNywgNiwgMSwgMjQ1LCAxNCwgMzcsIDcsIDYsIDEsIAorICAgIDI0MywgMjA5LCAzNywgNywgNiwgMSwgMjQyLCA2NywgMzcsIDcsIDYsIDEsIDc0LCAzNywgNywgNiwgMSwgMjM1LCAxNTAsIAorICAgIDM3LCA3LCA2LCAxLCAyMzUsIDI5LCAzNywgNywgNiwgMSwgMTU2LCAzNywgNywgNiwgMSwgMTk0LCAzNywgNywgNiwgMSwgCisgICAgMjMwLCAzMCwgMzcsIDcsIDYsIDEsIDc4LCAzNywgNywgNiwgMSwgMjI2LCAxMDksIDM3LCA3LCA2LCAxLCAyMjQsIDk5LCAKKyAgICAzNywgNywgNiwgMSwgMTUzLCAzNywgNywgNiwgMSwgMjIyLCA5MywgMzcsIDcsIDYsIDEsIDIxNywgMTUzLCAzNywgNywgNiwgCisgICAgMSwgNjksIDM3LCA3LCA2LCAxLCAyMTQsIDEwNSwgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDM3LCA3LCA2LCAxLCAyMTEsIAorICAgIDE3OCwgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAzNywgNywgNiwgMSwgMjEwLCAxNTksIDM3LCA3LCA0LCAxLCA2MSwgMzcsIAorICAgIDcsIDQsIDEsIDI1MywgMTY2LCAzNywgNywgNCwgMSwgMjUxLCA3NCwgMzcsIDcsIDQsIDEsIDI0OSwgNjgsIDM3LCA3LCA0LCAKKyAgICAxLCA3NiwgMzcsIDcsIDQsIDEsIDI0NSwgMTQsIDM3LCA3LCA0LCAxLCAyNDMsIDIwOSwgMzcsIDcsIDQsIDEsIDI0MiwgNjcsIAorICAgIDM3LCA3LCA0LCAxLCA3NCwgMzcsIDcsIDQsIDEsIDIzNSwgMTUwLCAzNywgNywgNCwgMSwgMjM1LCAyOSwgMzcsIDcsIDQsIAorICAgIDEsIDE1NiwgMzcsIDcsIDQsIDEsIDE5NCwgMzcsIDcsIDQsIDEsIDIzMCwgMzAsIDM3LCA3LCA0LCAxLCA3OCwgMzcsIDcsIAorICAgIDQsIDEsIDIyNiwgMTA5LCAzNywgNywgNCwgMSwgMjI0LCA5OSwgMzcsIDcsIDQsIDEsIDE1MywgMzcsIDcsIDQsIDEsIDIyMiwgCisgICAgOTMsIDM3LCA3LCA0LCAxLCAyMTcsIDE1MywgMzcsIDcsIDQsIDEsIDY5LCAzNywgNywgNCwgMSwgMjE0LCAxMDUsIDM3LCA3LCAKKyAgICA0LCAxLCAyMTIsIDk4LCAzNywgNywgNCwgMSwgMjExLCAxNzgsIDM3LCA3LCA0LCAxLCAyMTEsIDExNywgMzcsIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAzNywgMjEsIDIxMCwgODYsIDE1MiwgMzcsIDU0LCAyNDUsIDE3NSwgMTUyLCAzNywgNTQsIDIxNSwgNzYsIAorICAgIDE1MiwgMzcsIDU0LCAyMTYsIDE2NSwgMTUyLCAzNywgNTQsIDI0NCwgMTMsIDE1MiwgMzcsIDU0LCAyNDQsIDEyNiwgMTUyLCAKKyAgICAzNywgNTQsIDIxOSwgMTIxLCAxNTIsIDM3LCA1NCwgMjIwLCAxMjEsIDE1MiwgMzcsIDU0LCAyNDUsIDE5OCwgMTUyLCAzNywgCisgICAgNTQsIDIyOCwgMjAyLCAxNTIsIDM3LCA1NCwgMjE1LCA3MywgNTIsIDM3LCAyMSwgMTExLCA1MiwgMzcsIDIxLCAxMDUsIDUyLCAKKyAgICAzNywgMjEsIDE1OCwgNTIsIDM3LCAyMSwgMTYxLCA1MiwgMzcsIDIxLCAxOTAsIDUyLCAzNywgMjEsIDE5NSwgNTIsIDM3LCAKKyAgICAyMSwgMTk5LCA1MiwgMzcsIDIxLCAxOTYsIDUyLCAzNywgMjEsIDIwMSwgNTIsIDM3LCA1NCwgMjE2LCAyNDgsIDE1MiwgMzcsIAorICAgIDIxLCAyMTAsIDg2LCA5MywgOTksIDE5MywgMjQxLCA1MSwgOTMsIDk5LCAxMTQsIDI0MSwgNTEsIDkzLCA5OSwgMTkzLCAKKyAgICAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIxMywgMjM5LCA5MywgOTksIDE5MywgMjE1LCAyMTIsIDI0OCwgMTY1LCAyNDEsIAorICAgIDUxLCA5MywgOTksIDExNCwgMjE1LCAyMTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIDE5MywgMjE1LCAyMTIsIDI0OCwgCisgICAgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIxNSwgMjEyLCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgMTkzLCAKKyAgICAyMjQsIDI3LCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIDk5LCAxMTQsIDIyNCwgMjcsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgCisgICAgOTksIDE5MywgMjI0LCAyNywgMjQ4LCAxNjUsIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjI0LCAyNywgMjQ4LCAxNjUsIAorICAgIDIxMywgMjM5LCA5MywgOTksIDE5MywgMTI0LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0NCwgMjQxLCAKKyAgICAyMjgsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCA0NCwgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMjIsIDI1NCwgCisgICAgOTMsIDk5LCAxOTMsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0MywgMjQxLCAyMjgsIDkzLCAKKyAgICA5OSwgMTI0LCAxMTQsIDIyLCA0MywgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgOTksIAorICAgIDE5MywgMTIwLCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTIwLCAxOTMsIDIyLCA0NCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAKKyAgICAxMTQsIDIyLCA0NCwgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDEyMCwgCisgICAgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTIwLCAxOTMsIDIyLCA0MywgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAKKyAgICA0MywgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyMzMsIDUyLCA5MywgOTksIDE5MywgNjcsIDIyLCAyMjIsIAorICAgIDI1NCwgOTMsIDk5LCA2NywgMTkzLCAyMiwgNDQsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDQsIDEyNCwgCisgICAgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCA2NywgMTE0LCAyMiwgCisgICAgNDQsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgNDQsIDEyMCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxOTMsIAorICAgIDIyLCA0NCwgMTI0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCA2NywgCisgICAgMjIsIDIzMywgNTIsIDkzLCA5OSwgNjcsIDE5MywgMjIsIDQzLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQzLCAKKyAgICAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgNDMsIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDExNCwgCisgICAgMjIsIDQzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQzLCAxMjAsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgCisgICAgMTkzLCAyMiwgNDMsIDEyNCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCAKKyAgICAxMjQsIDIyLCAyNDEsIDUxLCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgCisgICAgMTE0LCAyMiwgNDMsIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIAorICAgIDEyNCwgMTE0LCAyMiwgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgMTkzLCAyMiwgNDMsIDEyNCwgMjQxLCAyMjgsIDkzLCAKKyAgICA5OSwgNDMsIDE5MywgMjIsIDQ0LCAxMjQsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjQxLCA1MSwgOTMsIAorICAgIDk5LCAxOTMsIDEyMCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjM2LCA5MywgCisgICAgOTksIDQ0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjAsIDE5MywgMjIsIDIwMywgMjQxLCAyMjgsIAorICAgIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxOTMsIDIyLCA0MywgMTIwLCAyNDEsIAorICAgIDIyOCwgOTMsIDk5LCA0MywgMTkzLCAyMiwgNDQsIDEyMCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyNDEsIAorICAgIDUxLCA5MywgOTksIDE5MywgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgNjcsIDIzMiwgMjM2LCAKKyAgICA5MywgOTksIDQ0LCAxMTQsIDIyLCA0MywgNjcsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxOTMsIDIyLCAyMDMsIDI0MSwgCisgICAgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgMTI0LCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgMTIwLCAKKyAgICAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxMTQsIDIyLCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDQzLCAxMjAsIDExNCwgCisgICAgMjIsIDQ0LCAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxMjAsIDExNCwgMjIsIDQzLCAxMjQsIDIzMiwgMjM2LCA5MywgCisgICAgOTksIDQzLCAxMjQsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxMjQsIDExNCwgMjIsIDQzLCAKKyAgICAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgMTIwLCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgCisgICAgMTkzLCAyMiwgMTI0LCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIDQ0LCAxOTMsIDIyLCA0MywgNjcsIDI0MSwgMjI4LCA5MywgCisgICAgOTksIDQzLCAxOTMsIDIyLCA0NCwgNjcsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIAorICAgIDE5MywgNTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIDExNCwgNTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIAorICAgIDE5MywgNTIsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgCisgICAgNTIsIDI0MSwgNTEsIDkzLCA5OSwgNTIsIDIxMywgMjM5LCA5MywgOTksIDEyNCwgMjE5LCAxNTcsIDIyLCA0NCwgMjQ2LCAKKyAgICAxMjEsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDQ0LCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjIyLCAyNTQsIAorICAgIDkzLCA5OSwgMTI0LCAyMTksIDE1NywgMjIsIDQzLCAyNDYsIDEyMSwgOTMsIDk5LCAxMjQsIDUyLCAyMiwgNDMsIDIxOSwgCisgICAgMTU2LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyMCwgMjE5LCAxNTcsIDIyLCA0NCwgMjQ2LCAKKyAgICAxMjEsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDQ0LCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjIyLCAyNTQsIAorICAgIDkzLCA5OSwgMTIwLCAyMTksIDE1NywgMjIsIDQzLCAyNDYsIDEyMSwgOTMsIDk5LCAxMjAsIDUyLCAyMiwgNDMsIDIxOSwgCisgICAgMTU2LCA5MywgOTksIDUyLCAxMjAsIDIyLCAyMzMsIDUyLCA5MywgOTksIDY3LCAyMTksIDE1NywgMjIsIDQ0LCAyNDYsIAorICAgIDEyMSwgOTMsIDk5LCA2NywgNTIsIDIyLCA0NCwgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjIyLCAyNTQsIDkzLCAKKyAgICA5OSwgNjcsIDIxOSwgMTU3LCAyMiwgNDMsIDI0NiwgMTIxLCA5MywgOTksIDY3LCA1MiwgMjIsIDQzLCAyMTksIDE1NiwgOTMsIAorICAgIDk5LCA1MiwgNjcsIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyNCwgMjE5LCAxNTcsIDIyLCAyMDMsIDI0NiwgMTIxLCA5MywgCisgICAgOTksIDEyNCwgNTIsIDIyLCAyMDMsIDIxOSwgMTU2LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyNDEsIDUxLCA5MywgOTksIAorICAgIDEyMCwgMjE5LCAxNTcsIDIyLCAyMDMsIDI0NiwgMTIxLCA5MywgOTksIDEyMCwgNTIsIDIyLCAyMDMsIDIxOSwgMTU2LCA5MywgCisgICAgOTksIDUyLCAxMjAsIDIyLCAyNDEsIDUxLCA5MywgOTksIDY3LCAyMTksIDE1NywgMjIsIDIwMywgMjQ2LCAxMjEsIDkzLCAKKyAgICA5OSwgNjcsIDUyLCAyMiwgMjAzLCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIDE5MywgCisgICAgMjU0LCAzNCwgMTI0LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAyNTQsIDM0LCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgCisgICAgOTksIDE5MywgMjU0LCAzNCwgMTIwLCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxOTMsIDI1NCwgMzQsIDEyMCwgMjIsIDIyMiwgCisgICAgMjU0LCA5MywgOTksIDE5MywgMjQ4LCA3LCAyMTQsIDE2MCwgNDQsIDIxNiwgNDMsIDIzMiwgMTE0LCAyMzMsIDUyLCA5MywgCisgICAgOTksIDE5MywgMjQ4LCA3LCAyMTQsIDE2MCwgNDMsIDIxNiwgNDMsIDIzMiwgMTE0LCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIAorICAgIDI0OCwgNywgMjQ5LCAxMzgsIDkzLCA5OSwgMTkzLCAyMzMsIDUyLCA5MywgOTksIDE5MywgMjE0LCAxNjMsIDkzLCA5OSwgCisgICAgMTkzLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDI0NiwgMTE0LCA5MywgOTksIDExNCwgMjMzLCA1MiwgOTMsIDk5LCAxMTQsIAorICAgIDIxNCwgMTYzLCA5MywgOTksIDExNCwgMjIyLCAyNTQsIDkzLCA5OSwgMTE0LCAyNDYsIDExNCwgOTMsIDk5LCAxOTMsIDQzLCAKKyAgICAyMiwgMTE0LCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDEyMCwgMjIsIDExNCwgMjQ2LCAxMTQsIDkzLCA5OSwgMTE0LCA0MywgCisgICAgMjIsIDE5MywgMjIyLCAyNTQsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAxOTMsIDI0NiwgMTE0LCAyMTQsIDE2MCwgMTYzLCAKKyAgICAyNTEsIDIyMSwgMjMyLCAxMTQsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCAyMzIsIDExNCwgMTIzLCAyMjQsIDI1LCAyNTEsIAorICAgIDIyMSwgMjMyLCAxMTQsIDEzNCwgMjQ1LCAxOTUsIDI1MSwgMjIxLCAyMzIsIDExNCwgMTYzLCAyNTEsIDIyMSwgMjMyLCAKKyAgICAxMTQsIDI0NCwgODksIDI0NSwgMTk1LCAyNTEsIDIyMSwgMjMyLCAxMTQsIDEzNCwgMjI0LCAyMywgMjUxLCAyMjEsIDIzMiwgCisgICAgMTE0LCAyMjAsIDEyNCwgMjQ1LCAxOTUsIDI1MSwgMjIxLCAyNDMsIDIzNiwgMjUxLCAyMjEsIDQzLCAyMjAsIDEyNCwgMjQ1LCAKKyAgICAxOTUsIDI1MSwgMjIxLCA0MywgMTM0LCAyMjQsIDIzLCAyNTEsIDIyMSwgNDMsIDI0NCwgODksIDI0NSwgMTk1LCAyNTEsIAorICAgIDIyMSwgNDMsIDE2MywgMjUxLCAyMjEsIDQzLCAxMzQsIDI0NSwgMTk1LCAyNTEsIDIyMSwgNDMsIDEyMywgMjI0LCAyNSwgCisgICAgMjUxLCAyMjEsIDQzLCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgNDQsIDE2MywgMjUxLCAyMjEsIDE5MywgMjIwLCA5NCwgCisgICAgMjMxLCA4NywgMjIwLCA5NCwgMjQ4LCAxNzAsIDIyMCwgOTQsIDIxNCwgMTYwLCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgCisgICAgNDQsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCAyMjQsIDI5LCAyMzIsIDExNCwgMjMzLCA1MiwgMjI0LCAyOSwgMjMyLCAKKyAgICAxMTQsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgMjMzLCA1MiwgMjI0LCAyOSwgMjE0LCAxNjAsIDQzLCAyMiwgCisgICAgMjMyLCAxMTQsIDQzLCAyMiwgMjMyLCAxMTQsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAyMzIsIAorICAgIDExNCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCAKKyAgICAyMzMsIDUyLCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDExNCwgMjIyLCAyNTQsIAorICAgIDIyNCwgMjksIDIxNCwgMTYwLCAyMjIsIDI1NCwgMjI0LCAyOSwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIDIzMywgCisgICAgNTIsIDIyNCwgMjksIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCA0MywgMjIsIDIzMiwgMTE0LCAyMjIsIDI1NCwgODUsIAorICAgIDIxOCwgMjM2LCA3MSwgMjE4LCAyMzYsIDcxLCA0MiwgMiwgMjIyLCAxODUsIDI0OSwgMTY3LCA3MSwgNDIsIDI0OSwgMTk1LCAKKyAgICA4NSwgNCwgMjE4LCAyMzYsIDQyLCAyLCAyMDMsIDI0NCwgMTEzLCA0MiwgMiwgNjcsIDI0NCwgMTEzLCA0MiwgMiwgMjI2LCAKKyAgICAxNDgsIDI0OSwgMTM0LCAyNDQsIDExMywgNDIsIDIsIDIxNCwgMTYwLCA0MywgMjE2LCA0MywgMjMyLCAxMTQsIDQ0LCAyNDQsIAorICAgIDExMywgNDIsIDIsIDIxNCwgMTYwLCA0NCwgMjE2LCA0MywgMjMyLCAxMTQsIDQzLCAyNDQsIDExMywgNDIsIDIsIDI0OCwgNywgCisgICAgMjQ5LCAxMzQsIDI0NCwgMTEzLCA4NSwgNCwgMjE4LCAyMzYsIDcxLCA0LCAyMTgsIDIzNiwgODUsIDIyMywgMTE5LCA3MSwgCisgICAgMjIzLCAxMTksIDg1LCA2NywgMjIzLCAxMTksIDcxLCA2NywgMjIzLCAxMTksIDg1LCAyMjYsIDEwLCA3MSwgMjI2LCAxMCwgCisgICAgODUsIDIxNCwgMTYyLCAyMTUsIDIyNiwgNzEsIDIxNCwgMTYyLCAyMTUsIDIyNiwgODUsIDIxNCwgMTYyLCA0LCAyMTUsIAorICAgIDIyNiwgNzEsIDIxNCwgMTYyLCA0LCAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCAyMTUsIDIyNiwgNzEsIDIyMiwgMjUwLCAKKyAgICAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCA0LCAyMTUsIDIyNiwgNzEsIDIyMiwgMjUwLCA0LCAyMTUsIDIyNiwgODUsIDIyMiwgCisgICAgMjUwLCAyMjUsIDExLCA3MSwgMjIyLCAyNTAsIDIyNSwgMTEsIDg1LCAyNDYsIDExMywgMjE1LCAyMjYsIDcxLCAyNDYsIAorICAgIDExMywgMjE1LCAyMjYsIDg1LCAyNDYsIDExMywgNCwgMjE1LCAyMjYsIDcxLCAyNDYsIDExMywgNCwgMjE1LCAyMjYsIDg1LCAKKyAgICAyMzMsIDQ4LCAyMTUsIDIyNiwgNzEsIDIzMywgNDgsIDIxNSwgMjI2LCA4NSwgMjMzLCA0OCwgNCwgMjE1LCAyMjYsIDcxLCAKKyAgICAyMzMsIDQ4LCA0LCAyMTUsIDIyNiwgODUsIDIzMywgNDgsIDIyNSwgMTEsIDcxLCAyMzMsIDQ4LCAyMjUsIDExLCA4NSwgCisgICAgMjQ4LCAwLCA3MSwgMjQ4LCAwLCA3MSwgMjQ4LCAxLCAyNDksIDE5NSwgODUsIDQsIDI0OCwgMCwgMjQ0LCA5NywgMjMyLCAKKyAgICAxMTAsIDcxLCAyNTAsIDQzLCAyNDYsIDEyNiwgMjUwLCA0MywgMjUwLCA0NCwgMiwgNjcsIDI0NCwgMTEzLCAyNTEsIDExOSwgCisgICAgODUsIDI1MCwgNDMsIDI1MCwgNDQsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAyNTAsIDQ0LCAyLCA0NCwgMTYzLCAyNTEsIAorICAgIDIyOSwgMjUwLCA0NCwgMiwgMjMyLCAxMTQsIDE2MywgMjUxLCAyMjksIDI1MCwgNDQsIDIsIDIxNCwgMTYwLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyNTAsIDQ0LCAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjksIDI1MSwgMjI5LCAyNTAsIDQ0LCAyLCAyNTQsIDE2NCwgCisgICAgMjUxLCA5NiwgMjE0LCAxNjAsIDQzLCAyMjQsIDI5LCAyNTEsIDIyOSwgNDMsIDE2MywgODUsIDI1MCwgNDMsIDQ0LCAxNjMsIAorICAgIDg1LCAyNTAsIDQzLCAyMzUsIDIwMSwgMjUxLCAxMjEsIDIzNSwgMjAxLCA3MSwgMjUwLCA0MywgMjE0LCAxNjAsIDE2MywgCisgICAgMjM1LCAyMDEsIDcxLCAyNTAsIDQzLCAyMzIsIDExNCwgMTYzLCAyMzUsIDIwMSwgNzEsIDI1MCwgNDMsIDIxNCwgMTYwLCAKKyAgICA0MywgMjI0LCAyOSwgMjUwLCA0MSwgMjU0LCAzMywgMjE0LCAxNjAsIDQ0LCAyMjQsIDI5LCAyNTAsIDQxLCAyNTQsIDMzLCAKKyAgICAyMzIsIDExNCwgNDQsIDIyNCwgMjksIDI1MCwgNDEsIDI1NCwgMzMsIDIzMiwgMTE0LCA0MywgMjI0LCAyOSwgMjUwLCA0MSwgCisgICAgMjU0LCAzMywgMjE0LCAxNjAsIDE2MywgMjUwLCA0MywgMjMyLCAxMTQsIDE2MywgMjUwLCA0MywgODUsIDIzMiwgMTE0LCAKKyAgICA0NCwgMjE1LCAyMjYsIDg1LCAyMzIsIDExNCwgNDMsIDIxNSwgMjI2LCA4NSwgMjE0LCAxNjAsIDQzLCAyMTUsIDIyNiwgODUsIAorICAgIDIxNCwgMTYwLCA0NCwgMjE1LCAyMjYsIDcxLCAyNTEsIDEyMSwgNDIsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCA0MiwgMiwgCisgICAgNDQsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAyMTQsIDE2MCwgNDMsIDI0OCwgNywgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIAorICAgIDIzMiwgMTE0LCA0NCwgMjQ4LCA3LCAxNjMsIDI1MSwgMjI5LCA3MSwgNDIsIDIsIDY3LCAyNTEsIDI0MCwgMjMyLCAyMTksIAorICAgIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDI0NywgMTI4LCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDQzLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCAyMzMsIDkxLCAyNTAsIDQzLCA3MSwgNDIsIAorICAgIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyOCwgNzEsIDQyLCAyLCAyMzIsIDExNCwgNDMsIDIyNCwgMjgsIDcxLCA0MiwgMiwgCisgICAgMjMyLCAxMTQsIDQ0LCAyMjQsIDI4LCA3MSwgNDIsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIAorICAgIDIxNCwgMTYwLCA0MywgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIDIzMiwgMTE0LCA0MywgMjI0LCAyOCwgNzEsIDI1MCwgCisgICAgNDQsIDIsIDIzMiwgMTE0LCA0NCwgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOCwgMjE0LCAKKyAgICAxNjAsIDQzLCAyMTUsIDIyNiwgMjE0LCAxNjAsIDQ0LCAyMTUsIDIyNiwgMjMyLCAxMTQsIDQzLCAyMTUsIDIyNiwgNzEsIAorICAgIDIzMSwgODcsIDIxOCwgMjM2LCA4NSwgMjMxLCA4NywgMjE4LCAyMzYsIDcxLCAyMzEsIDg3LCA0LCAyMTgsIDIzNiwgODUsIAorICAgIDIzMSwgODcsIDQsIDIxOCwgMjM2LCAyMzIsIDExNCwgNDQsIDIxNSwgMjI2LCA4NSwgMjE4LCAzOSwgMiwgMjIzLCAxMzUsIAorICAgIDI0OSwgMjU1LCAyMTQsIDE5NCwgMjE5LCA2MiwgMjQ5LCAyMzAsIDg1LCAyMTgsIDE1OCwgNzEsIDIxOCwgMTU4LCAyMzIsIAorICAgIDIzNCwgMjE2LCAxMzMsIDIxOCwgMzgsIDI1MywgMjQyLCAyMjgsIDc2LCAyNDgsIDQ2LCAyMjgsIDc2LCAyNDksIDIwMywgCisgICAgMjI2LCAxNjcsIDg1LCAyMTcsIDEsIDcxLCAyMTcsIDEsIDI1MiwgMTY0LCAyNTEsIDE3MSwgMjUyLCAxNjQsIDkzLCAyLCAKKyAgICAyNTAsIDEzNywgMjUyLCAxNjQsIDkzLCAyLCAyMTEsIDE3OCwgMjIyLCAwLCAyMTQsIDE5NSwgMiwgMjIzLCAxNjMsIDI0NiwgCisgICAgOTIsIDI0MCwgMjUwLCAyNTIsIDMwLCA3MSwgMjIwLCA0LCAyMjUsIDEwNCwgODUsIDIyMCwgNCwgMjI1LCAxMDQsIDIyMCwgCisgICAgODksIDIyMywgNTIsIDIyMiwgMTg5LCAyNDQsIDYzLCAyNDEsIDIzNSwgMjUxLCAxMjEsIDg1LCA0MywgMjI1LCAxMCwgMjM1LCAKKyAgICAyNDksIDg1LCA0NCwgMjI1LCAxMCwgMjM1LCAyNDksIDcxLCA0MywgMjI1LCAxMCwgMjM1LCAyNDksIDcxLCAxMjAsIDIyNSwgCisgICAgMTAsIDIzNSwgMjQ5LCA3MSwgNDQsIDIyNSwgMTAsIDIzNSwgMjQ5LCA3MSwgMTI0LCAyMjUsIDEwLCAyMzUsIDI0OSwgMjE5LCAKKyAgICAxMDMsIDIyLCAyNDksIDEzNywgMjUwLCAyMjcsIDUwLCAyMjMsIDE3NSwgNTAsIDI1MSwgMjQ3LCA1MCwgMjUxLCAzMywgCisgICAgMjU0LCAxMTAsIDIyNiwgMTQ5LCAyNDksIDEzOCwgMjUwLCAxMTksIDIyMywgNDAsIDI0OSwgMTM5LCA2NCwgMjMyLCAxMjQsIAorICAgIDI0OSwgMTM5LCA2NCwgMjM1LCAxMjIsIDIxOCwgMTU5LCAyMiwgMjQ5LCAxNDQsIDI0NCwgMTc2LCA4NywgMjU1LCAxLCAKKyAgICAyMjAsIDkxLCAyNDIsIDI5LCAyMiwgMjE5LCAxOTEsIDIyNSwgMjIzLCA4NywgMjEwLCAyNTQsIDIxMSwgNjksIDIxNSwgCisgICAgMjE2LCAzMSwgMjQxLCAyMzAsIDIxNSwgMjE2LCAzMSwgMjMzLCAxMTMsIDIxNSwgMjE2LCAzMSwgMjQ0LCAxMDQsIDIxNSwgCisgICAgMjE2LCAzMSwgMjE2LCAxMzQsIDIxNSwgMjE2LCAzMSwgMjExLCAyMzksIDIxNSwgMjE2LCAzMSwgMjEyLCA0MCwgMjE1LCAKKyAgICAyMTYsIDMxLCAyMzAsIDEyMCwgMjE1LCAyMTYsIDMxLCAyNDUsIDIzMSwgMjEyLCAxLCA2NCwgMjQ4LCAyNiwgNzEsIDI0MywgCisgICAgMjQ3LCAyNDQsIDE5OCwgNzEsIDIxOSwgNzYsIDI0NCwgMTk4LCA4NSwgMjE5LCA3NiwgMjQ0LCAxOTgsIDcxLCAyMTgsIDM5LCAKKyAgICAyLCAyMjMsIDEzNSwgMjQ0LCAxMDAsIDIyNCwgMjUsIDIzMCwgMTMzLCAyMzMsIDg2LCAyMjQsIDI1LCAyMzAsIDEzMywgCisgICAgMjMxLCA1OSwgMjQ0LCAxNDYsIDUwLCAyNDUsIDIzMSwgMjMxLCAxOTUsIDUwLCAyMzUsIDQ0LCAyMjEsIDIyMiwgMjE0LCAKKyAgICAxNDUsIDIyOSwgOTgsIDIyNSwgMjMsIDI1NCwgMjAsIDIxNywgNDEsIDI0MywgNTksIDI1MSwgMTEsIDIzMywgMjUsIDIxMywgCisgICAgMTUwLCAyMzIsIDI0NCwgMjIxLCAxOTMsIDIyMiwgMjEsIDI1MSwgMCwgMjU0LCA1MCwgMjI1LCA1NSwgNzEsIDI1MCwgMTI1LCAKKyAgICAyMzQsIDg0LCA3MSwgMjUwLCAxMjUsIDIyNCwgMTcsIDcxLCAyNTAsIDEyNSwgMjIyLCAxOTcsIDcxLCAyNTAsIDEyNSwgCisgICAgMjUxLCAyMzksIDcxLCAyNTAsIDEyNSwgMjM0LCAzNiwgNzEsIDI1MCwgMTI1LCAyMjUsIDIzNSwgODUsIDI1MCwgMTI1LCAKKyAgICAyMzQsIDg0LCA4NSwgMjUwLCAxMjUsIDIyNCwgMTcsIDg1LCAyNTAsIDEyNSwgMjIyLCAxOTcsIDg1LCAyNTAsIDEyNSwgCisgICAgMjUxLCAyMzksIDg1LCAyNTAsIDEyNSwgMjM0LCAzNiwgODUsIDI1MCwgMTI1LCAyMjUsIDIzNSwgODUsIDIxOSwgMTgsIAorICAgIDIxOCwgNTEsIDcxLCAyNDEsIDIzNSwgMjE4LCA1MSwgNzEsIDI0OCwgMSwgMjE4LCA1MSwgODUsIDI0OSwgMjUzLCAyMTgsIAorICAgIDUxLCA3MSwgMjE5LCAxOCwgMjE4LCA1MSwgODUsIDI0MSwgMjM1LCAyMTgsIDUxLCA4NSwgMjQ4LCAxLCAyMTgsIDUxLCA3MSwgCisgICAgMjQ5LCAyNTMsIDIxOCwgNTEsIDI0MCwgMjUwLCAyMTgsIDI0MCwgMjI0LCAyNSwgMjI4LCA1MiwgMjQ1LCAxOTcsIDIyOCwgCisgICAgNTIsIDI1MiwgODEsIDI0NSwgMTk3LCAyMjgsIDQ3LCAyNTIsIDgxLCAyMTksIDEyMCwgMjI4LCA0NywgMjMwLCA2MiwgMjQ0LCAKKyAgICA3NCwgNTAsIDIzMCwgNjIsIDIyOSwgMTkzLCA1MCwgMjMwLCA2MiwgMjIwLCA3OCwgNTAsIDIxMiwgOSwgMTgzLCAyNDksIAorICAgIDEzOCwgMjQ1LCAyMjgsIDE4MywgMjQ5LCAxMzgsIDIxNCwgMTcxLCAyMjMsIDExNSwgODcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDgsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDcsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDYsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDUsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDQsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDMsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDIsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDI0MywgNTcsIDIzMSwgMTQzLCA4NSwgMjE0LCAxNzEsIDIyMywgCisgICAgMTE1LCA4NywgMjIzLCAxMTYsIDIyNiwgMjQsIDg3LCAyMjYsIDAsIDIyNiwgMjQsIDg3LCAyMjUsIDE3NywgMjI2LCAyNCwgCisgICAgNTAsIDIxMSwgMjU1LCA4NywgMjQ3LCAyNDksIDI0NCwgMTk3LCAyNDcsIDI0OSwgMjQ0LCAxOTYsIDI0NywgMjQ5LCAyNDQsIAorICAgIDE5NSwgMjQ3LCAyNDksIDI0NCwgMTk0LCAyNDcsIDI0OSwgMjQ0LCAxOTMsIDI0NywgMjQ5LCAyNDQsIDE5MiwgNzEsIDI1MCwgCisgICAgNDQsIDIsIDU5LCAyMjIsIDI1NCwgNzEsIDI1MCwgNDQsIDIsIDExMywgMjQ3LCAxMjYsIDg1LCAyNTAsIDQ0LCAyLCA3MSwgCisgICAgNTksIDIyMiwgMjU0LCA4NSwgMjUwLCA0NCwgMiwgMTEzLCA3MSwgMjQ3LCAxMjYsIDIzMCwgMTQ3LCAzMSwgMjExLCA2OSwgCisgICAgMjMwLCAxNDcsIDMxLCAyMTAsIDI1MywgMjQ3LCAyMzIsIDMxLCAyNDIsIDEzOCwgMjExLCA2OSwgMjQ3LCAyMzIsIDMxLCAKKyAgICAyMzMsIDE5LCAyMTAsIDI1MywgMjQ3LCAyMzIsIDMxLCAyMzMsIDE5LCAyMTEsIDY5LCAyNDcsIDIzMiwgMzEsIDI0MiwgCisgICAgMTM4LCAyMTAsIDI1MywgNzEsIDI0NCwgODEsIDg1LCAyNDQsIDgxLCAyNDIsIDI5LCAyMiwgMjI1LCAxMDcsIDI1NCwgMTI4LCAKKyAgICAyNDksIDEzNiwgMjE3LCAyMzYsIDIxOCwgMTY2LCA2NCwgMjU0LCAyMzUsIDIyMSwgMjA4LCAyNTQsIDE3OCwgMjQ0LCA1OSwgCisgICAgMjQzLCA2NywgMjE4LCAxNjYsIDY0LCAyNDEsIDIwOSwgMjUzLCAyMDcsIDg3LCAyNDQsIDcwLCAyMjYsIDEzMCwgNzEsIAorICAgIDIxOCwgMTU4LCAxMzQsIDIzMiwgMjE0LCAyNDksIDE4MywgMjIyLCAyNTQsIDEzNCwgMjMyLCAyMTQsIDI0OSwgMTgzLCAKKyAgICAyMzMsIDUyLCAyMTIsIDUwLCA1MCwgMTI1LCAyMTMsIDEzMCwgNTAsIDI0NiwgMTE4LCAyNDQsIDE0NiwgNTAsIDI0NiwgCisgICAgMTE4LCAyMzEsIDE5NSwgNTAsIDIzNSwgMjEwLCAyNDQsIDE0NiwgMjIsIDIzMSwgMTk1LCA1MCwgMjMxLCAxOTUsIDIyLCAKKyAgICAyNDQsIDE0NiwgNTAsIDIzMSwgMTk1LCAyLCAyMTgsIDEwNSwgNTAsIDIzMSwgMTk1LCAyLCAyMTgsIDEwNSwgMjIsIDIzMSwgCisgICAgMTk1LCAyMiwgMjQ0LCAxNDYsIDUwLCA2NywgMjMxLCAxOTUsIDIsIDIxOCwgMTA1LCA1MCwgMjAzLCAyMzEsIDE5NSwgMiwgCisgICAgMjE4LCAxMDUsIDUwLCAyMzEsIDg3LCA3MSwgMjUwLCA0MywgMjMxLCA4NywgODUsIDI1MCwgNDMsIDIzMSwgODcsIDQsIDcxLCAKKyAgICAyNTAsIDQzLCAyMzEsIDE1OCwgODcsIDI0NywgMTc1LCA4NywgMjE0LCAxNjksIDIyNSwgMjU1LCA4NywgMjQ5LCAyMzksIAorICAgIDI0MywgMjMxLCAyMTQsIDE0MSwgMjI5LCA5MywgMjUwLCAxNjksIDIyNiwgNjUsIDIzNSwgNTAsIDIxMywgMTg1LCAyNTAsIAorICAgIDEwMSwgODUsIDIzMCwgMTM0LCAyMzIsIDIzMSwgMjIwLCAxMTQsIDIyMCwgMTQ5LCAyMjQsIDgsIDIyMCwgMTMyLCAyMTksIAorICAgIDU3LCAyNTIsIDE2NywgMjUyLCAxMzQsIDkyLCAyMzQsIDE0NCwgNzEsIDI0NiwgMTAxLCAyMzEsIDE5MCwgNzEsIDI0NiwgCisgICAgMTAxLCAyMzQsIDg0LCA4NSwgMjQ2LCAxMDEsIDIzMSwgMTkwLCA4NSwgMjQ2LCAxMDEsIDIzNCwgODQsIDIxOSwgNjMsIAorICAgIDIxMSwgMjMwLCAyMTksIDY2LCAyMTgsIDM5LCAyNTIsIDU5LCAyNDksIDI1NSwgMjIzLCAxNjIsIDg1LCAyMTksIDYyLCAKKyAgICAyMTYsIDEzNSwgMjUwLCAwLCAyMiwgMjIzLCAxNjIsIDIxNSwgOTQsIDcxLCAyMjAsIDQsIDIyNSwgMTA0LCAyMTUsIDk0LCAKKyAgICA4NSwgMjIwLCA0LCAyMjUsIDEwNCwgNzEsIDI0OCwgMSwgMjM2LCA3LCAyMTgsIDIzNiwgMjQ5LCAxMzMsIDIzMywgOTcsIAorICAgIDI0NywgMjAxLCAyNTAsIDI1MiwgMjI2LCAxNzAsIDIyNSwgMTA3LCAyNTAsIDI1MywgMjE5LCA5MCwgMjQxLCAyMTksIDIsIAorICAgIDcxLCAyNDksIDEzOCwgMzcsIDI0OSwgMTMzLCAyMzMsIDk3LCAyNTAsIDE2MSwgMjI4LCA4MCwgMjQ1LCAxMzIsIDI1NCwgCisgICAgMTQ5LCAyMjYsIDE5NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCA4NSwgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCAKKyAgICA3MSwgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCA4NSwgNDMsIDIzMywgOTgsIDIzMSwgNTgsIDcxLCA0MywgCisgICAgMjMzLCA5OCwgMjMxLCA1OCwgMjQ2LCA5NywgMjE5LCA4NCwgNTAsIDExNCwgNzEsIDI0NiwgMTEzLCAyMTUsIDIyNiwgNDMsIAorICAgIDI1MCwgOCwgMjQ1LCAxMzIsIDkyLCAyMjIsIDAsIDI0NCwgMTgzLCAyNDgsIDcsIDIzNiwgNywgNzEsIDI1MCwgNDQsIDIzNiwgCisgICAgNywgODUsIDIxOCwgMjM2LCA4NSwgMjE1LCAxOTMsIDIyMywgNjMsIDQzLCAyNDUsIDEzMSwgMjIzLCA2MywgNDMsIDI0NSwgCisgICAgMTMwLCAyNTMsIDIxOSwgMTYsIDMxLCAyMTQsIDE0NSwgMTE0LCAyNTAsIDQ0LCAyLCAyMTgsIDEwNSwgMjIsIDExMywgMTcwLCAKKyAgICA0OCwgMjI1LCAxOTIsIDIyMiwgMjUxLCAyMzUsIDIxMiwgMjI1LCAxOTIsIDIzMywgNDksIDIzNSwgMjEyLCAyMjUsIDE5MiwgCisgICAgMjM1LCAyMDAsIDIyNSwgMTkyLCA4NSwgMjQ5LCAxMzksIDIyNiwgMjAxLCAyMjAsIDMxLCAyMjAsIDE5LCAyMTksIDIzMSwgCisgICAgMjUwLCA2OSwgMjUwLCAyMzQsIDI0MSwgMTY0LCAyMTksIDEyOCwgMjQzLCA2OCwgMjExLCAyMzAsIDI0MCwgMjI3LCAyNDMsIAorICAgIDY4LCAyLCAyNDIsIDE5LCAyMzEsIDE3OCwgMTYsIDMxLCAyMzIsIDIzNSwgMjMwLCAxMjAsIDIxNCwgMTk1LCAyMjYsIDIwMSwgCisgICAgMjQyLCAxMjksIDI0NCwgMjAsIDI0NCwgODIsIDIzNiwgNywgMjQxLCA2NiwgMjQ0LCAxMzcsIDIyMiwgMTYsIDQyLCAyNDQsIAorICAgIDE5LCAyNDksIDE2NywgMjE5LCAxMDYsIDI0MCwgMTE5LCAyMTksIDEwOSwgMjI1LCAxNzEsIDIsIDI1MiwgMTY3LCAyMTYsIAorICAgIDI0MywgMjM1LCAxMzcsIDI1MiwgMTU0LCA4NywgMjQxLCAyMzgsIDI0MiwgMTQwLCA4NywgMjQzLCAyMzksIDIyNCwgMTQ1LCAKKyAgICAyNDksIDExMSwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgNzEsIDI0NCwgODIsIDIsIDIwMywgMjMwLCAyMjksIDg1LCAyMTgsIAorICAgIDEwNiwgMjE0LCAxNjAsIDI1MSwgMjI1LCAyMjEsIDE5NSwgODUsIDIyMSwgMTk1LCAyMzIsIDExNCwgMjUxLCAyMjUsIDIyMSwgCisgICAgMTk1LCA3MSwgMjIxLCAxOTUsIDcxLCAxMTQsIDI1MCwgMTM4LCA3OSwgMjE3LCAyLCAyMzIsIDE2MCwgNTAsIDIxNywgNTQsIAorICAgIDI0NiwgOTYsIDI1NCwgMjAwLCAyNDUsIDEyNywgMjIzLCAxNjAsIDI0NCwgOTMsIDIyMywgMTYwLCAyNDIsIDIyLCAyMTMsIAorICAgIDE3NCwgMjQyLCAyMiwgMjExLCAxOTgsIDI0MiwgMjIsIDIzMiwgMTE0LCA0NCwgMjI1LCAyMDEsIDIyNSwgMjAxLCAyMTQsIAorICAgIDE2MCwgNDQsIDIyNSwgMjAxLCA3MSwgMjI4LCAyMzUsIDg1LCAyMjgsIDIzNSwgMjUwLCAxMzgsIDc5LCAxMTQsIDI1MCwgCisgICAgMTM4LCA3OSwgMjMwLCA4OSwgMjExLCAxNzgsIDExNCwgMjMwLCA4OSwgMjExLCAxNzgsIDI1MiwgMTY0LCAyMTEsIDE3OCwgCisgICAgMTE0LCAyNTIsIDE2NCwgMjExLCAxNzgsIDIyNiwgMTMwLCAyNiwgMjQ5LCAxMzgsIDExNCwgMjYsIDI0OSwgMTM4LCAyMDQsIAorICAgIDI1MCwgMTgzLCAyNDksIDEzOCwgMTE0LCAyMDQsIDI1MCwgMTgzLCAyNDksIDEzOCwgNywgMjQ5LCAxMzgsIDIyMCwgOTMsIAorICAgIDcxLCA3LCAyNDksIDEzOCwgMjI2LCAxMzAsIDcsIDI0OSwgMTM4LCAyMzEsIDE5MiwgMjQ5LCAxMzgsIDIxOCwgMTU5LCA2NCwgCisgICAgMjQ4LCAxNTcsIDI0NCwgMTksIDIxNywgMTYsIDI1MywgMjI0LCAyNDQsIDE5LCAyNTIsIDE2NSwgMjUzLCAyMjQsIDExNCwgCisgICAgMjQ0LCAxOSwgMjUyLCAxNjUsIDI1MywgMjI0LCAyNDQsIDE5LCAyNDksIDI1MSwgMjUzLCAyMjQsIDg1LCAyNDQsIDE5LCAKKyAgICAyMjUsIDEyLCAyMTgsIDE1OCwgNzEsIDI0NCwgMTksIDIyNSwgMTIsIDIxOCwgMTU4LCAyMTksIDEzLCAyMTgsIDExMywgCisgICAgMjI2LCAxMzAsIDcxLCAyMTgsIDE1OCwgMzcsIDcxLCAyMTgsIDE1OCwgMjA0LCAyNTAsIDE4MywgODUsIDIxOCwgMTU4LCAKKyAgICA4NSwgMjUwLCAxODMsIDcxLCAyMTgsIDE1OCwgMjI2LCAxMzAsIDg1LCAyMTgsIDE1OCwgMTE0LCAyMjYsIDEzMCwgODUsIAorICAgIDIxOCwgMTU4LCAyMjUsIDYzLCAyMTgsIDE1OCwgMjIwLCA5MywgNzEsIDIxOCwgMTU4LCAxMTQsIDI1MywgMjI0LCAyMDQsIAorICAgIDI1MCwgMTgzLCAyNTMsIDIyNCwgMjQ1LCAyMDEsIDIxOCwgMjQ2LCAyNTMsIDIyNCwgMjQ1LCAyMDEsIDIyNSwgMTIsIDg1LCAKKyAgICAyMTgsIDE1OCwgMjQ1LCAyMDEsIDIyNSwgMTIsIDIyNSwgNjMsIDIxOCwgMTU4LCAyMTksIDEyNywgMjI1LCAxMiwgODUsIAorICAgIDIxOCwgMTU4LCAyNDUsIDIwMSwgMjI1LCAxMiwgMjIzLCAxMTcsIDg1LCAyMTgsIDE1OCwgMTE0LCAyNDUsIDIwMSwgMjI1LCAKKyAgICAxMiwgMjIzLCAxMTcsIDg1LCAyMTgsIDE1OCwgMjE1LCA3NywgMjI1LCAxMiwgODUsIDIxOCwgMTU4LCAyMTksIDEyMiwgCisgICAgMjI1LCAxMiwgMjUzLCAyMjQsIDIxNywgMTYsIDI1MywgMjI0LCAyMDQsIDI1MCwgMTgzLCAyMTcsIDE2LCAyNTMsIDIyNCwgCisgICAgMTE0LCAyMTcsIDE2LCAyNTMsIDIyNCwgMjE5LCAxMjcsIDIyNSwgMTYwLCA4NSwgMjIsIDcxLCAyNDQsIDYyLCA4NSwgMjQ0LCAKKyAgICA2MiwgNzEsIDI0NCwgNjIsIDI0NSwgMjAxLCAyMjUsIDE2MCwgMjI2LCAxMzAsIDg1LCAyNDQsIDYyLCAzNywgMjA0LCAyNTAsIAorICAgIDE4MywgMjQ1LCAyMDEsIDIyNSwgMTIsIDIxOCwgMTU4LCAxMTQsIDIxNywgMTYsIDIyNSwgNjMsIDI1MywgMjI0LCAyMTksIAorICAgIDY0LCAyMTYsIDEwNiwgMjE1LCAyMTksIDIxOSwgNjQsIDExNCwgMjUwLCAxMjIsIDIxOSwgNjQsIDIxOSwgMTUsIDExNCwgCisgICAgMjE5LCAxNSwgMjUyLCAxNjUsIDI1MywgMjI0LCAyNDUsIDIwMSwgMjE3LCAxNiwgMjI0LCAxNzQsIDI1MywgMjI0LCAxMTQsIAorICAgIDI0NSwgMjAxLCAyMTcsIDE2LCAyMjQsIDE3NCwgMjUzLCAyMjQsIDI0OSwgMTM5LCA3OSwgMjIwLCA5MywgNzEsIDI1MCwgCisgICAgNDMsIDE1MiwgOTIsIDI0OSwgMTM5LCA3OSwgMjMyLCAxMTQsIDQ0LCAyNDYsIDk0LCA3MSwgMjE4LCAyMzYsIDIxNCwgMTYwLCAKKyAgICA0NCwgMjQ2LCA5NCwgNzEsIDIxOCwgMjM2LCAyMzIsIDExNCwgNDQsIDIyMCwgOTMsIDcxLCAyMTgsIDIzNiwgMjE0LCAxNjAsIAorICAgIDQ0LCAyMjAsIDkzLCA3MSwgMjE4LCAyMzYsIDg1LCAyMjQsIDE2LCAxNjQsIDIyNiwgMTUxLCA3MSwgMjI0LCAxNiwgMTY0LCAKKyAgICAyMjYsIDE1MSwgNzEsIDI0NSwgMzksIDE2NCwgMjI2LCAxNTEsIDg1LCAyNDgsIDEsIDIzMCwgMTg3LCA3MSwgMjExLCAxNzgsIAorICAgIDExNCwgMjQ1LCAzOSwgMTY0LCA4NywgMTkzLCA2NywgMTMwLCAyMzEsIDg3LCA2NywgMTMwLCAxMTQsIDY3LCAxMzAsIDExNCwgCisgICAgMjE5LCAxNTcsIDIxNSwgOTQsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMjE5LCAxNTcsIDI0OSwgCisgICAgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgNTIsIDIxNSwgOTQsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAKKyAgICAxNTEsIDExNCwgNTIsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMTIxLCAyMTksIDE1NywgMjQ5LCAKKyAgICAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAxMjEsIDUyLCAyNDksIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgCisgICAgMTUxLCAyNDksIDk5LCAyMTgsIDE0MiwgMjI2LCAxOSwgNSwgMjI2LCAxNTEsIDExNCwgMjQ1LCAzOSwgMTY0LCAyMjYsIAorICAgIDE1MSwgMTE0LCAyNDEsIDIzNSwgMjQ1LCAzOSwgMTY0LCAyMjYsIDE1MSwgMTE0LCA4NSwgMjQxLCAyMzQsIDIyMiwgMTg5LCAKKyAgICAxMTQsIDg1LCAyNDEsIDIzNSwgMjUxLCAxMjEsIDI0NCwgNjMsIDI0MSwgMjM0LCAyMjIsIDE4OSwgMjQ0LCA2MywgMjQxLCAKKyAgICAyMzUsIDI1MSwgMTIxLCAyMzEsIDg3LCA0MywgMjI2LCA4LCAyMjYsIDE1MSwgMjMxLCA4NywgNDQsIDIyNiwgOCwgMjI2LCAKKyAgICAxNTEsIDIzMSwgODcsIDI0NCwgNzEsIDQzLCAyMjYsIDgsIDIyNiwgMTUxLCAyMzEsIDg3LCAyNDQsIDcxLCA0NCwgMjI2LCAKKyAgICA4LCAyMjYsIDE1MSwgMjMxLCA4NywgMjMzLCA0OCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjMxLCA4NywgCisgICAgMjIyLCAyNTAsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDExNCwgMjMzLCA0OCwgMjU0LCAxMTgsIDIyNCwgMSwgCisgICAgMTY0LCAyMjYsIDE1MSwgMTE0LCAyMjIsIDI1MCwgMjU0LCAxMTgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAyMzMsIAorICAgIDQ4LCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgMTUxLCAxMTQsIDIyMiwgMjUwLCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgCisgICAgMTUxLCAxOTMsIDQzLCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMTkzLCA0NCwgMjE2LCA3LCAyMjAsIAorICAgIDU1LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDIzMSwgODcsIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIyNiwgMTUxLCAyMzEsIAorICAgIDg3LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxMTEsIDI0NywgCisgICAgMjEyLCAxNTIsIDM3LCAyMSwgMTA1LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE1OCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAKKyAgICAxNjEsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTkwLCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE5NSwgMjQ3LCAyMTIsIAorICAgIDE1MiwgMzcsIDIxLCAxOTksIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTk2LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDIwMSwgCisgICAgMjQ3LCAyMTIsIDE1MiwgMzcsIDU0LCAyMTYsIDI0OCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDExMSwgMjQ3LCAyMTIsIDM3LCAKKyAgICAzNSwgMjEsIDEwNSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE1OCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE2MSwgMjQ3LCAKKyAgICAyMTIsIDM3LCAzNSwgMjEsIDE5MCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE5NSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIAorICAgIDE5OSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE5NiwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDIwMSwgMjQ3LCAyMTIsIDM3LCAKKyAgICAzNSwgNTQsIDIxNiwgMjQ4LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxMTEsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgCisgICAgMjEsIDEwNSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTU4LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxNjEsIAorICAgIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE5MCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTk1LCAyNDcsIDIxMiwgCisgICAgMTUyLCAzNywgMzUsIDIxLCAxOTksIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE5NiwgMjQ3LCAyMTIsIDE1MiwgMzcsIAorICAgIDM1LCAyMSwgMjAxLCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDU0LCAyMTYsIDI0OCwgMTE0LCAyMTEsIDI0NiwgOTcsIDc1LCAKKyAgICAxMTQsIDk2LCA1MCwgMTE0LCAyMzAsIDE4NywgNTAsIDExNCwgMjQ3LCAxNzcsIDUwLCAxMTQsIDIxOSwgMzAsIDI0NSwgCisgICAgMjI4LCA3NSwgMTE0LCA5NywgNzUsIDExNCwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyNDYsIDEwNiwgMjI1LCAxNCwgOTcsIAorICAgIDc1LCAxMTQsIDIyMiwgMTg2LCA5NywgNzUsIDIxNSwgMjI1LCA5NywgNzUsIDExNCwgMjE1LCAyMjUsIDk3LCA3NSwgMjQ4LCAKKyAgICAxNjMsIDIxNSwgMjI1LCA5NywgNzUsIDExNCwgMjQ4LCAxNjMsIDIxNSwgMjI1LCA5NywgNzUsIDg1LCA5NywgNzUsIDIxNiwgCisgICAgMTQ1LCAyMTYsIDEzLCA5NywgMjU0LCAxLCAyMTYsIDE0NSwgMjUxLCAxODEsIDk3LCAyNTQsIDEsIDg1LCA5NywgMjU0LCAxLCAKKyAgICAxMTQsIDg1LCAyNDksIDk5LCAyNDYsIDExMiwgMjIsIDk3LCA3NSwgMTE0LCA4NSwgMjQ5LCA5OSwgMjE0LCAxNTMsIDIyLCAKKyAgICA5NywgNzUsIDIxOCwgMjMzLCA4NSwgOTcsIDc1LCAxMTQsIDI0OSwgMjE0LCA4NSwgOTcsIDc1LCAyMjIsIDI0OSwgNzEsIAorICAgIDk3LCA3NSwgMjMzLCA0NywgNzEsIDk3LCA3NSwgMjUyLCAxOTEsIDIyMCwgOTMsIDcxLCA5NywgNzUsIDI0MywgMjQ5LCAKKyAgICAyMjAsIDkzLCA3MSwgOTcsIDc1LCAxMTQsIDIzMiwgMTE0LCAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMTE0LCAyMTQsIDE2MCwgCisgICAgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDIyOCwgNTQsIDIzMiwgMTE0LCAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMjQ5LCAxMDcsIAorICAgIDIzMiwgMTI5LCAyMjgsIDU0LCAyMTQsIDE2MCwgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDM3LCAxMTQsIDcxLCA5NywgNzUsIAorICAgIDIxMSwgMjUyLCA5NywgNzUsIDI1MSwgMjI4LCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIDI1MSwgMjI4LCA5NywgNzUsIDI1MSwgCisgICAgMjI4LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDExNCwgMjUxLCAyMjgsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMTE0LCAKKyAgICAyNTEsIDIyOCwgOTcsIDc1LCAxMTQsIDI1MSwgMjI4LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIxNywgMTgsIDk3LCA3NSwgCisgICAgMTE0LCAyMTcsIDE3LCA5NywgNzUsIDIxMiwgMTgsIDk3LCA3NSwgMTE0LCAyMTIsIDE4LCA5NywgNzUsIDIyNiwgMTc2LCAKKyAgICA5NywgNzUsIDUyLCAyNDksIDEwNywgMjMyLCAxMjksIDEzNCwgMjQ3LCAyMjIsIDI1NCwgMTE3LCA3MSwgMjE1LCAyMjcsIAorICAgIDI0OSwgMTk1LCA0LCA3MSwgMjE1LCAyMjYsIDIyNSwgMTc0LCAyMDQsIDIxOCwgNjQsIDIwNCwgMjE4LCAyMiwgNDMsIDIyMiwgCisgICAgOTIsIDI1MiwgMTgxLCAyNDgsIDY4LCA0NCwgMjIyLCA5MiwgMjUyLCAxODEsIDI0OCwgNjgsIDE3NywgMiwgNTksIDIzNSwgCisgICAgMjIyLCAyMjMsIDUzLCAyMTksIDQ5LCAyMjQsIDIwNCwgMjE4LCA2NCwgMjE4LCAyMywgMjI0LCAyMDQsIDIxOSwgNDgsIDY3LCAKKyAgICAyNTIsIDE0OSwgMiwgMjAzLCA5MSwgMTEsIDIyMiwgMjMxLCAyNDgsIDYsIDIwMCwgMjQ3LCAxNzYsIDExLCAyNDQsIDE4MywgCisgICAgMjQ4LCA2LCA5MiwgMjMyLCAxNTIsIDI1NCwgMTI2LCA5MiwgMjMyLCAxNTIsIDIyNiwgMTYyLCA3MSwgMjQ4LCAxLCAyLCAKKyAgICAyNTAsIDE4MSwgMjQ3LCAxMjgsIDIyLCAyLCAyNDcsIDEyOCwgMjQ1LCAxNzgsIDY0LCAyMjYsIDE3NCwgMjE0LCAxNTIsIAorICAgIDIzMiwgMTE0LCA0NCwgMjQ5LCAxNjksIDIsIDI0NywgMTI4LCAyMTQsIDE2MCwgNDMsIDI0OSwgMTY5LCAyLCAyNDcsIDEyOCwgCisgICAgNDMsIDIyNiwgMTMyLCAyMzUsIDcyLCA0NCwgMjI2LCAxMzIsIDIzNSwgNzIsIDI0MywgMjM2LCAyMjYsIDEzMiwgMjM1LCAKKyAgICA3MiwgMjMzLCA5MSwgMTIwLCAyMTcsIDg4LCAyMzMsIDkxLCAxMjQsIDIxNywgODgsIDQzLCAyMiwgNDQsIDUyLCAyMTUsIAorICAgIDkzLCA0MywgMjIsIDQ0LCAyMTcsIDg4LCA0MywgMjMwLCA5MiwgMjAwLCA0NCwgMjE3LCA4OCwgMjAwLCA0MywgMjE3LCA4OCwgCisgICAgMTIwLCAyMTcsIDg5LCAyLCAyNTAsIDQ0LCA0OCwgMjMyLCAxMTEsIDI0NywgMTgxLCAyNTEsIDg2LCAyMDMsIDIyMiwgMTM1LCAKKyAgICA3MSwgMjQ5LCAyMTMsIDI0OCwgMCwgNzEsIDI0OSwgMjEzLCAyNDgsIDEsIDIsIDE0MCwgMjE2LCAxMTUsIDcxLCAyNDksIAorICAgIDIxMywgMjQ4LCAxLCAyLCA5NywgMjE2LCAxMTUsIDcxLCA0MiwgMiwgMTQwLCAyMTYsIDExNSwgNzEsIDQyLCAyLCA5NywgCisgICAgMjE2LCAxMTUsIDExLCA0MywgNzEsIDQyLCAxMjcsIDExLCA0NCwgNzEsIDQyLCAxMjcsIDExLCA0MywgMjU0LCAxMTgsIAorICAgIDEyNywgMTEsIDQ0LCAyNTQsIDExOCwgMTI3LCAxMSwgNDMsIDUyLCAyNTQsIDExOCwgMTI3LCAxMSwgNDQsIDUyLCAyNTQsIAorICAgIDExOCwgMTI3LCAxMSwgNDMsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMTEsIDQ0LCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAKKyAgICAxMjcsIDExLCA0MywgMjQ0LCA3MSwgMjI2LCA3LCAxMSwgNDQsIDI0NCwgNzEsIDIyNiwgNywgMjE0LCAxNTMsIDIyNCwgMjcsIAorICAgIDc1LCAyNDYsIDExMiwgMjI0LCAyNywgNzUsIDI1NCwgOTYsIDI0MywgMTA1LCAyNTAsIDQ0LCA3NSwgMjUwLCAxMCwgMjQzLCAKKyAgICAxMDUsIDI1MCwgNDQsIDc1LCA0NCwgODAsIDIsIDM3LCAyMjUsIDI1LCAyMDAsIDE0MCwgNzUsIDIwMCwgOTcsIDc1LCAyMDAsIAorICAgIDQzLCA0NCwgNzUsIDIwMCwgMTQwLCA1MiwgNzUsIDIwMCwgOTcsIDUyLCA3NSwgMjAwLCA0MywgNDQsIDUyLCA3NSwgMjAwLCAKKyAgICAxNDAsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMDAsIDk3LCA4MCwgMjQzLCAyNTEsIDEzMCwgMjAwLCAxNDAsIDUyLCA4MCwgCisgICAgMjQzLCAyNTEsIDEzMCwgMjAwLCA5NywgNTIsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMDAsIDk3LCAyMTgsIDIzMiwgNzUsIDQ2LCAKKyAgICA0NywgMjUxLCAyMjMsIDQ2LCA0NywgMjQ3LCAxMjUsIDQ2LCA0NywgMjQ2LCAyNTMsIDQ2LCA0NywgMjQ3LCAxMjQsIDQ2LCAKKyAgICA0NywgMjQ2LCAxODksIDQ2LCA0NywgMjQ3LCA2MCwgNDYsIDQ3LCAyNDYsIDI1MiwgNDYsIDQ3LCAyNDcsIDEyMywgNDYsIAorICAgIDQ3LCAyNDYsIDE1NywgNDYsIDQ3LCAyNDcsIDI4LCA0NiwgNDcsIDI0NiwgMjIwLCA0NiwgNDcsIDI0NywgOTEsIDQ2LCA0NywgCisgICAgMjQ2LCAxODgsIDQ2LCA0NywgMjQ3LCA1OSwgNDYsIDQ3LCAyNDYsIDI1MSwgNDYsIDQ3LCAyNDcsIDEyMiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE0MSwgNDYsIDQ3LCAyNDcsIDEyLCA0NiwgNDcsIDI0NiwgMjA0LCA0NiwgNDcsIDI0NywgNzUsIDQ2LCA0NywgCisgICAgMjQ2LCAxNzIsIDQ2LCA0NywgMjQ3LCA0MywgNDYsIDQ3LCAyNDYsIDIzNSwgNDYsIDQ3LCAyNDcsIDEwNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE1NiwgNDYsIDQ3LCAyNDcsIDI3LCA0NiwgNDcsIDI0NiwgMjE5LCA0NiwgNDcsIDI0NywgOTAsIDQ2LCA0NywgCisgICAgMjQ2LCAxODcsIDQ2LCA0NywgMjQ3LCA1OCwgNDYsIDQ3LCAyNDYsIDI1MCwgNDYsIDQ3LCAyNDcsIDEyMSwgNDYsIDQ3LCAKKyAgICAyNDYsIDEzMywgNDYsIDQ3LCAyNDcsIDQsIDQ2LCA0NywgMjQ2LCAxOTYsIDQ2LCA0NywgMjQ3LCA2NywgNDYsIDQ3LCAyNDYsIAorICAgIDE2NCwgNDYsIDQ3LCAyNDcsIDM1LCA0NiwgNDcsIDI0NiwgMjI3LCA0NiwgNDcsIDI0NywgOTgsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNDgsIDQ2LCA0NywgMjQ3LCAxOSwgNDYsIDQ3LCAyNDYsIDIxMSwgNDYsIDQ3LCAyNDcsIDgyLCA0NiwgNDcsIDI0NiwgCisgICAgMTc5LCA0NiwgNDcsIDI0NywgNTAsIDQ2LCA0NywgMjQ2LCAyNDIsIDQ2LCA0NywgMjQ3LCAxMTMsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNDAsIDQ2LCA0NywgMjQ3LCAxMSwgNDYsIDQ3LCAyNDYsIDIwMywgNDYsIDQ3LCAyNDcsIDc0LCA0NiwgNDcsIDI0NiwgCisgICAgMTcxLCA0NiwgNDcsIDI0NywgNDIsIDQ2LCA0NywgMjQ2LCAyMzQsIDQ2LCA0NywgMjQ3LCAxMDUsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNTUsIDQ2LCA0NywgMjQ3LCAyNiwgNDYsIDQ3LCAyNDYsIDIxOCwgNDYsIDQ3LCAyNDcsIDg5LCA0NiwgNDcsIDI0NiwgCisgICAgMTg2LCA0NiwgNDcsIDI0NywgNTcsIDQ2LCA0NywgMjQ2LCAyNDksIDQ2LCA0NywgMjQ3LCAxMjAsIDQ2LCA0NywgMjQ2LCAKKyAgICAxMjksIDQ2LCA0NywgMjQ3LCAwLCA0NiwgNDcsIDI0NiwgMTkyLCA0NiwgNDcsIDI0NywgNjMsIDQ2LCA0NywgMjQ2LCAxNjAsIAorICAgIDQ2LCA0NywgMjQ3LCAzMSwgNDYsIDQ3LCAyNDYsIDIyMywgNDYsIDQ3LCAyNDcsIDk0LCA0NiwgNDcsIDI0NiwgMTQ0LCA0NiwgCisgICAgNDcsIDI0NywgMTUsIDQ2LCA0NywgMjQ2LCAyMDcsIDQ2LCA0NywgMjQ3LCA3OCwgNDYsIDQ3LCAyNDYsIDE3NSwgNDYsIDQ3LCAKKyAgICAyNDcsIDQ2LCA0NiwgNDcsIDI0NiwgMjM4LCA0NiwgNDcsIDI0NywgMTA5LCA0NiwgNDcsIDI0NiwgMTM2LCA0NiwgNDcsIAorICAgIDI0NywgNywgNDYsIDQ3LCAyNDYsIDE5OSwgNDYsIDQ3LCAyNDcsIDcwLCA0NiwgNDcsIDI0NiwgMTY3LCA0NiwgNDcsIDI0NywgCisgICAgMzgsIDQ2LCA0NywgMjQ2LCAyMzAsIDQ2LCA0NywgMjQ3LCAxMDEsIDQ2LCA0NywgMjQ2LCAxNTEsIDQ2LCA0NywgMjQ3LCAKKyAgICAyMiwgNDYsIDQ3LCAyNDYsIDIxNCwgNDYsIDQ3LCAyNDcsIDg1LCA0NiwgNDcsIDI0NiwgMTgyLCA0NiwgNDcsIDI0NywgNTMsIAorICAgIDQ2LCA0NywgMjQ2LCAyNDUsIDQ2LCA0NywgMjQ3LCAxMTYsIDQ2LCA0NywgMjQ2LCAxMzIsIDQ2LCA0NywgMjQ3LCAzLCA0NiwgCisgICAgNDcsIDI0NiwgMTk1LCA0NiwgNDcsIDI0NywgNjYsIDQ2LCA0NywgMjQ2LCAxNjMsIDQ2LCA0NywgMjQ3LCAzNCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyNiwgNDYsIDQ3LCAyNDcsIDk3LCA0NiwgNDcsIDI0NiwgMTQ3LCA0NiwgNDcsIDI0NywgMTgsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTAsIDQ2LCA0NywgMjQ3LCA4MSwgNDYsIDQ3LCAyNDYsIDE3OCwgNDYsIDQ3LCAyNDcsIDQ5LCA0NiwgNDcsIAorICAgIDI0NiwgMjQxLCA0NiwgNDcsIDI0NywgMTEyLCA0NiwgNDcsIDI0NiwgMTM5LCA0NiwgNDcsIDI0NywgMTAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDIsIDQ2LCA0NywgMjQ3LCA3MywgNDYsIDQ3LCAyNDYsIDE3MCwgNDYsIDQ3LCAyNDcsIDQxLCA0NiwgNDcsIAorICAgIDI0NiwgMjMzLCA0NiwgNDcsIDI0NywgMTA0LCA0NiwgNDcsIDI0NiwgMTU0LCA0NiwgNDcsIDI0NywgMjUsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTcsIDQ2LCA0NywgMjQ3LCA4OCwgNDYsIDQ3LCAyNDYsIDE4NSwgNDYsIDQ3LCAyNDcsIDU2LCA0NiwgNDcsIAorICAgIDI0NiwgMjQ4LCA0NiwgNDcsIDI0NywgMTE5LCA0NiwgNDcsIDI0NiwgMTI3LCA0NiwgNDcsIDI0NiwgMjU0LCA0NiwgNDcsIAorICAgIDI0NiwgMTkwLCA0NiwgNDcsIDI0NywgNjEsIDQ2LCA0NywgMjQ2LCAxNTgsIDQ2LCA0NywgMjQ3LCAyOSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyMSwgNDYsIDQ3LCAyNDcsIDkyLCA0NiwgNDcsIDI0NiwgMTQyLCA0NiwgNDcsIDI0NywgMTMsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDUsIDQ2LCA0NywgMjQ3LCA3NiwgNDYsIDQ3LCAyNDYsIDE3MywgNDYsIDQ3LCAyNDcsIDQ0LCA0NiwgNDcsIAorICAgIDI0NiwgMjM2LCA0NiwgNDcsIDI0NywgMTA3LCA0NiwgNDcsIDI0NiwgMTM0LCA0NiwgNDcsIDI0NywgNSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5NywgNDYsIDQ3LCAyNDcsIDY4LCA0NiwgNDcsIDI0NiwgMTY1LCA0NiwgNDcsIDI0NywgMzYsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjgsIDQ2LCA0NywgMjQ3LCA5OSwgNDYsIDQ3LCAyNDYsIDE0OSwgNDYsIDQ3LCAyNDcsIDIwLCA0NiwgNDcsIAorICAgIDI0NiwgMjEyLCA0NiwgNDcsIDI0NywgODMsIDQ2LCA0NywgMjQ2LCAxODAsIDQ2LCA0NywgMjQ3LCA1MSwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0MywgNDYsIDQ3LCAyNDcsIDExNCwgNDYsIDQ3LCAyNDYsIDEzMCwgNDYsIDQ3LCAyNDcsIDEsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTMsIDQ2LCA0NywgMjQ3LCA2NCwgNDYsIDQ3LCAyNDYsIDE2MSwgNDYsIDQ3LCAyNDcsIDMyLCA0NiwgNDcsIAorICAgIDI0NiwgMjI0LCA0NiwgNDcsIDI0NywgOTUsIDQ2LCA0NywgMjQ2LCAxNDUsIDQ2LCA0NywgMjQ3LCAxNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwOCwgNDYsIDQ3LCAyNDcsIDc5LCA0NiwgNDcsIDI0NiwgMTc2LCA0NiwgNDcsIDI0NywgNDcsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzksIDQ2LCA0NywgMjQ3LCAxMTAsIDQ2LCA0NywgMjQ2LCAxMzcsIDQ2LCA0NywgMjQ3LCA4LCA0NiwgNDcsIAorICAgIDI0NiwgMjAwLCA0NiwgNDcsIDI0NywgNzEsIDQ2LCA0NywgMjQ2LCAxNjgsIDQ2LCA0NywgMjQ3LCAzOSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzMSwgNDYsIDQ3LCAyNDcsIDEwMiwgNDYsIDQ3LCAyNDYsIDE1MiwgNDYsIDQ3LCAyNDcsIDIzLCA0NiwgNDcsIAorICAgIDI0NiwgMjE1LCA0NiwgNDcsIDI0NywgODYsIDQ2LCA0NywgMjQ2LCAxODMsIDQ2LCA0NywgMjQ3LCA1NCwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0NiwgNDYsIDQ3LCAyNDcsIDExNywgNDYsIDQ3LCAyNDYsIDEyOCwgNDYsIDQ3LCAyNDYsIDI1NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5MSwgNDYsIDQ3LCAyNDcsIDYyLCA0NiwgNDcsIDI0NiwgMTU5LCA0NiwgNDcsIDI0NywgMzAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjIsIDQ2LCA0NywgMjQ3LCA5MywgNDYsIDQ3LCAyNDYsIDE0MywgNDYsIDQ3LCAyNDcsIDE0LCA0NiwgNDcsIAorICAgIDI0NiwgMjA2LCA0NiwgNDcsIDI0NywgNzcsIDQ2LCA0NywgMjQ2LCAxNzQsIDQ2LCA0NywgMjQ3LCA0NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzNywgNDYsIDQ3LCAyNDcsIDEwOCwgNDYsIDQ3LCAyNDYsIDEzNSwgNDYsIDQ3LCAyNDcsIDYsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTgsIDQ2LCA0NywgMjQ3LCA2OSwgNDYsIDQ3LCAyNDYsIDE2NiwgNDYsIDQ3LCAyNDcsIDM3LCA0NiwgNDcsIAorICAgIDI0NiwgMjI5LCA0NiwgNDcsIDI0NywgMTAwLCA0NiwgNDcsIDI0NiwgMTUwLCA0NiwgNDcsIDI0NywgMjEsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTMsIDQ2LCA0NywgMjQ3LCA4NCwgNDYsIDQ3LCAyNDYsIDE4MSwgNDYsIDQ3LCAyNDcsIDUyLCA0NiwgNDcsIAorICAgIDI0NiwgMjQ0LCA0NiwgNDcsIDI0NywgMTE1LCA0NiwgNDcsIDI0NiwgMTMxLCA0NiwgNDcsIDI0NywgMiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5NCwgNDYsIDQ3LCAyNDcsIDY1LCA0NiwgNDcsIDI0NiwgMTYyLCA0NiwgNDcsIDI0NywgMzMsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjUsIDQ2LCA0NywgMjQ3LCA5NiwgNDYsIDQ3LCAyNDYsIDE0NiwgNDYsIDQ3LCAyNDcsIDE3LCA0NiwgNDcsIAorICAgIDI0NiwgMjA5LCA0NiwgNDcsIDI0NywgODAsIDQ2LCA0NywgMjQ2LCAxNzcsIDQ2LCA0NywgMjQ3LCA0OCwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0MCwgNDYsIDQ3LCAyNDcsIDExMSwgNDYsIDQ3LCAyNDYsIDEzOCwgNDYsIDQ3LCAyNDcsIDksIDQ2LCA0NywgCisgICAgMjQ2LCAyMDEsIDQ2LCA0NywgMjQ3LCA3MiwgNDYsIDQ3LCAyNDYsIDE2OSwgNDYsIDQ3LCAyNDcsIDQwLCA0NiwgNDcsIAorICAgIDI0NiwgMjMyLCA0NiwgNDcsIDI0NywgMTAzLCA0NiwgNDcsIDI0NiwgMTUzLCA0NiwgNDcsIDI0NywgMjQsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTYsIDQ2LCA0NywgMjQ3LCA4NywgNDYsIDQ3LCAyNDYsIDE4NCwgNDYsIDQ3LCAyNDcsIDU1LCA0NiwgNDcsIAorICAgIDI0NiwgMjQ3LCA0NiwgNDcsIDI0NywgMTE4LCA5NywgMjE1LCA1OCwgODAsIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAKKyAgICAyLCA1MiwgNjcsIDkxLCAxNDAsIDUyLCA4MCwgMiwgNjcsIDkxLCA5NywgNTIsIDgwLCAyLCA2NywgOTEsIDQzLCA0NCwgNTIsIAorICAgIDgwLCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDEzMCwgMTQwLCA1MiwgODAsIDI0MywgMjUxLCAKKyAgICAxMzAsIDk3LCA1MiwgODAsIDI0MywgMjUxLCAxMzAsIDI0NiwgMTEyLCA4MCwgMiwgMjAzLCA5MSwgMjE0LCAxNTMsIDgwLCAKKyAgICAyLCAyMDMsIDkxLCAyMTQsIDE1MywgMjE1LCAyMTIsIDc1LCAyNDYsIDExMiwgMjE1LCAyMTIsIDc1LCAxNDAsIDUyLCAyNDgsIAorICAgIDE2NSwgNzUsIDk3LCA1MiwgMjQ4LCAxNjUsIDc1LCAxNDAsIDIxNSwgMjEyLCAyNDgsIDE2NSwgNzUsIDk3LCAyMTUsIDIxMiwgCisgICAgMjQ4LCAxNjUsIDc1LCA5NywgMjE1LCA1OCwgMjE1LCAyMTIsIDI0OCwgMTY1LCA3NSwgOTcsIDgwLCAyLCAyNDYsIDEyNiwgCisgICAgMjE4LCAxNDEsIDIxNCwgMTUzLCA4MCwgMjE2LCA0MywgMTMwLCAyNDYsIDExMiwgODAsIDIxNiwgNDMsIDEzMCwgOTcsIDgwLCAKKyAgICAyLCAyMTcsIDc5LCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIAorICAgIDgwLCAyLCAyMTcsIDc4LCA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAKKyAgICAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDI1NCwgMywgOTcsIDI1NCwgMywgMTQwLCA1MiwgMjU0LCAzLCA5NywgCisgICAgNTIsIDI1NCwgMywgMTQwLCA4MCwgMjE2LCA0MywgODUsIDI0OCwgMCwgOTcsIDgwLCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCAKKyAgICAxNDAsIDgwLCAyNDMsIDI1MSwgMjUyLCAxNDksIDIxNiwgNDMsIDg1LCAyNDgsIDAsIDk3LCA4MCwgMjQzLCAyNTEsIDI1MiwgCisgICAgMTQ5LCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCAyMjgsIDYxLCAyMTIsIDksIDIyLCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIAorICAgIDIyOCwgNjEsIDI0NSwgMjI4LCAyMiwgMjE5LCAzMCwgMjEyLCA5LCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA4MCwgMiwgMTAzLCAKKyAgICAyMjgsIDYxLCAyNDUsIDIyOCwgODAsIDIsIDEwMywgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAyLCAxMDMsIDIxOSwgMzAsIAorICAgIDIxMiwgOSwgODAsIDIsIDEwMywgMjI4LCA2MSwgMjEyLCA5LCA4MCwgMjIsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjI4LCAKKyAgICA2MSwgMjQ1LCAyMjgsIDgwLCAyMiwgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIDIyLCAKKyAgICAyMTksIDMwLCAyMTIsIDksIDc1LCAyMTksIDMwLCAyMTIsIDksIDgwLCAyMiwgMjI4LCA2MSwgMjEyLCA5LCA3NSwgMjIyLCAKKyAgICAyMzEsIDI0OCwgNywgMjQ5LCAxMzMsIDI0NCwgMTgzLCAyNDgsIDYsIDI0NCwgMTgzLCAyNDgsIDcsIDI0OSwgMTMzLCAyMjIsIAorICAgIDIzMSwgMjQ4LCA2LCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIDI0OSwgMTMzLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIyOCwgCisgICAgNjEsIDI0NSwgMjI4LCA4MCwgMjQ5LCAxMzMsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMjQ0LCAxODMsIDI0OCwgNywgMjQ5LCAKKyAgICAxMzMsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjIyLCAyMzEsIDI0OCwgNywgMjQ5LCAxMzMsIDIxOSwgMzAsIDI0NSwgCisgICAgMjI4LCA3NSwgMjI4LCA2MSwgMjQ1LCAyMjgsIDgwLCAyNDksIDEzMywgMjI4LCA2MSwgMjEyLCA5LCA3NSwgMjI4LCA2MSwgCisgICAgMjEyLCA5LCA4MCwgMjQ5LCAxMzMsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjEyLCAzNiwgODAsIDIyNSwgMTAsIDI0NywgCisgICAgMjAzLCAyMjIsIDI1NCwgODAsIDIyNSwgMTAsIDk3LCAyMTYsIDE4OSwgMjQ5LCA5OCwgMjE0LCAxNTIsIDgwLCAyMjUsIDEwLCAKKyAgICA5NywgMjE2LCAxODksIDI0OSwgOTgsIDI0NiwgMTExLCA4MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDIxNiwgMTg5LCAyNDksIAorICAgIDk4LCAyMzMsIDQzLCA4MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDIxNiwgMTg5LCAyNDksIDk4LCAyMjIsIDI0NCwgMjIyLCAKKyAgICAyNDcsIDI1NCwgMzQsIDI1MCwgMTAsIDc1LCAyMzMsIDQ2LCAyNTQsIDM0LCAyNTQsIDk2LCA3NSwgMjE2LCAxNSwgMjU0LCAKKyAgICAzNCwgMjU0LCA5NiwgNzUsIDI1MSwgMTgzLCAyNTQsIDM0LCAyNTQsIDk2LCA3NSwgMjE2LCAxNSwgMjU0LCAzNCwgMjUwLCAKKyAgICAxMCwgODAsIDIsIDIzMCwgMTg2LCAyMTYsIDE1LCAyNTQsIDM0LCAyNTQsIDk2LCA4MCwgMiwgMjI1LCAyNSwgMjMyLCAxMTQsIAorICAgIDQ0LCAyMjAsIDE1NCwgMjUwLCAxMCwgNzUsIDIzMiwgMTE0LCA0MywgMjIwLCAxNTQsIDI1NCwgOTYsIDc1LCAyNTQsIDk2LCAKKyAgICAyNTAsIDgsIDI1MCwgNDQsIDc1LCAyNTAsIDEwLCAyNTAsIDgsIDI1MCwgNDQsIDc1LCA5NywgODAsIDcyLCAyMTksIDI1MywgCisgICAgMTQwLCA3NSwgMTQwLCA4MCwgNzIsIDIxOSwgMjUzLCA5NywgNzUsIDIxOSwgMjUzLCA5NywgODAsIDcyLCAxNDAsIDc1LCAKKyAgICA5NywgODAsIDIsIDk2LCA1MSwgMTQwLCA4MCwgMiwgOTYsIDUxLCA5NywgODAsIDIxNiwgMTQwLCAyMTEsIDE3OCwgNDMsIAorICAgIDQ0LCA4MCwgMjE2LCAxNDAsIDQsIDI1MCwgNDMsIDIxNCwgMTUzLCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDQsIDI1MCwgCisgICAgNDMsIDQzLCAyNTIsIDE0NywgMTIwLCA0NCwgMjUyLCAxNDcsIDEyNCwgMjQyLCA1LCA0MywgMjUyLCAxNDcsIDEyNCwgNDQsIAorICAgIDI1MiwgMTQ3LCAxMjAsIDI0MiwgNSwgMTIwLCAyNTIsIDE0NywgNDQsIDEyNCwgMjUyLCAxNDcsIDQzLCAyNDIsIDUsIDEyMCwgCisgICAgMjUyLCAxNDcsIDQzLCAxMjQsIDI1MiwgMTQ3LCA0NCwgMjQyLCA1LCA0MywgMjUyLCAxNDcsIDEyMCwgNDQsIDI1MiwgMTQ3LCAKKyAgICAxMjAsIDI0MiwgNSwgMTIwLCAyNTIsIDE0NywgNDQsIDEyNCwgMjUyLCAxNDcsIDQ0LCAyNDIsIDUsIDQzLCAyNTIsIDE0NywgCisgICAgMTI0LCA0NCwgMjUyLCAxNDcsIDEyNCwgMjQyLCA1LCAxMjAsIDI1MiwgMTQ3LCA0MywgMTI0LCAyNTIsIDE0NywgNDMsIAorICAgIDI0MiwgNSwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDIxNiwgNDMsIDEzMCwgOTcsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDEyMCwgMjE2LCA0MywgMTMwLCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDQsIDIxNiwgNDMsIDEzMCwgCisgICAgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQ0LCAyMTYsIDQzLCAxMzAsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgMTI0LCAyMTYsIDQzLCAxMzAsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDIxNiwgNDMsIDEzMCwgMjE0LCAKKyAgICAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQzLCAyMTYsIDQzLCAxMzAsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCA0MywgMjE2LCA0MywgMTMwLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgMjQzLCAyNTEsIDEzMCwgOTcsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgMjQzLCAyNTEsIDEzMCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIAorICAgIDQ0LCAyNDMsIDI1MSwgMTMwLCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDQsIDI0MywgMjUxLCAxMzAsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAyNDMsIDI1MSwgMTMwLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAKKyAgICAyNDMsIDI1MSwgMTMwLCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDMsIDI0MywgMjUxLCAxMzAsIDI0NiwgCisgICAgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjQzLCAyNTEsIDEzMCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAKKyAgICAxMjAsIDcyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgNDMsIDI1MiwgMzgsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgOTcsIDI0MiwgNiwgMiwgCisgICAgMjUyLCAxNDcsIDEyMCwgNzIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgMjQ2LCAxMTIsIDI0MiwgNiwgCisgICAgMiwgMjUyLCAxNDcsIDQzLCAyNTIsIDM4LCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCA3MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIxNCwgMTYzLCAxNDAsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgNzIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDEyMCwgNzIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNjMsIDk3LCAyNDIsIDYsIAorICAgIDIsIDI1MiwgMTQ3LCAxMjQsIDcyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCAxNDAsIDI0MiwgNiwgMiwgCisgICAgMjUyLCAxNDcsIDEyMCwgNzIsIDIwMCwgMjQ4LCAxNjQsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAyNTIsIDUxLCAKKyAgICAyMDAsIDI0OCwgMTY0LCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCA3MiwgMjAwLCAyNDgsIDE2NCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDEyNCwgMjUyLCA1MSwgMjAwLCAyNDgsIDE2NCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDQzLCAyNTIsIDM4LCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDI0NiwgMTEyLCAyNDIsIAorICAgIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjUyLCAzOCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjU0LCA0NCwgCisgICAgNTIsIDgwLCAyLCAyMjIsIDE4NSwgMjQxLCAyNDIsIDI0NSwgMTA2LCA1LCA3MiwgOTcsIDc1LCAyMTYsIDkwLCAyMjYsIAorICAgIDE3MiwgNzIsIDk3LCA3NSwgMTQwLCA4MCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCA5NywgODAsIDcyLCAyMTYsIDkwLCAKKyAgICAyMjYsIDE3MSwgOTcsIDgwLCA3MiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMzMsIDIxLCA3MiwgMTQwLCA3NSwgMTQwLCA4MCwgCisgICAgMjE2LCAxNDAsIDIzMywgMjAsIDI0MiwgMTM3LCA3MiwgOTcsIDc1LCAyMTgsIDY1LCA3MiwgOTcsIDc1LCAxNDAsIDgwLCAKKyAgICAyMTYsIDE0MCwgMjE4LCA2NCwgMjE4LCAyMywgNzIsIDE0MCwgNzUsIDQzLCAyNDQsIDk5LCAyMTcsIDc4LCA0NCwgMjQ0LCAKKyAgICA5OSwgMjE3LCA3OCwgMTIwLCAyNDQsIDk5LCAyMTcsIDc4LCAxMjQsIDI0NCwgOTksIDIxNywgNzgsIDIxNSwgMjEyLCA2NywgCisgICAgMjUyLCAxNDksIDI0OCwgNjgsIDIxMCwgMTYwLCAxODksIDIxOCwgMjQ0LCAyMTAsIDE2MCwgMTg5LCAyMTUsIDQ5LCAyNDksIAorICAgIDIzNCwgNDMsIDcxLCAyNDksIDEwNywgMTI3LCA0NCwgNzEsIDI0OSwgMTA3LCAxMjcsIDQzLCA3MSwgMjI2LCA3LCA0NCwgCisgICAgNzEsIDIyNiwgNywgMjEwLCAxNjAsIDE4OSwgNDMsIDIzNiwgMjIsIDEyNywgMjEwLCAxNjAsIDE4OSwgNDQsIDIzNiwgMjIsIAorICAgIDEyNywgMjEwLCAxNjAsIDE4OSwgNDMsIDI1MSwgMjUwLCAxMjcsIDIxMCwgMTYwLCAxODksIDQ0LCAyNTEsIDI1MCwgMTI3LCAKKyAgICA0MywgNDIsIDI1MSwgMTY2LCAyLCAyMTQsIDE4MywgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjE0LCAxODMsIDQzLCA0MiwgCisgICAgMjUxLCAxNjYsIDIsIDIxNiwgMTE2LCAyMzYsIDcsIDIxNiwgMTUsIDI0OSwgMTY4LCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAKKyAgICAyMTYsIDExNiwgMjM2LCA3LCAyNTEsIDE4MywgMjQ5LCAxNjgsIDQzLCA0MiwgMjUxLCAxNjYsIDIsIDIxNiwgMTE2LCAyMzYsIAorICAgIDcsIDI1MSwgMTgzLCAyNDksIDE2OCwgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjE2LCAxMTYsIDIzNiwgNywgMjE2LCAxNSwgCisgICAgMjQ5LCAxNjgsIDQzLCAyNTQsIDExOCwgMjUxLCAxNjYsIDIsIDI0NywgMTI4LCA0NCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyLCAKKyAgICAyNDcsIDEyOCwgNDMsIDI1NCwgMzQsIDIzMywgMjEsIDEyNywgNDQsIDI1NCwgMzQsIDI0MiwgMTM3LCAxMjcsIDUyLCA0MywgCisgICAgMjU0LCAzNCwgMjQyLCAxMzcsIDEyNywgNTIsIDQ0LCAyNTQsIDM0LCAyMzMsIDIxLCAxMjcsIDQzLCA4NSwgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAxMjcsIDQ0LCA4NSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDI0NiwgMTI2LCAyNDQsIDE0MywgNjcsIDIxMCwgCisgICAgMzUsIDIzMiwgMjE5LCAyMzEsIDkzLCAyNTQsIDExOCwgMjI2LCAxNzQsIDIzMywgNTIsIDQ0LCAyNTQsIDExOCwgMjE0LCAKKyAgICAxMiwgMiwgMjE4LCAyMzYsIDIzMSwgOTMsIDQ0LCAyNTQsIDExOCwgMiwgMjQ3LCAxMjgsIDI1NCwgMTE4LCAyLCAyMjIsIAorICAgIDk0LCAyMzUsIDIyMiwgMjU1LCAxMiwgMjU0LCAxMTcsIDIxOSwgMSwgMjU0LCAxMTgsIDIyNiwgMTc0LCAyMzMsIDUyLCAKKyAgICAyMTksIDEsIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjE0LCAxNjMsIDIxNSwgOTQsIDI1NCwgMTE3LCAyMjMsIDUyLCAyNTQsIAorICAgIDExNywgMjU0LCAxMTgsIDIsIDIxNCwgMTgzLCAyMjMsIDUyLCAyNTQsIDExOCwgMiwgMjE0LCAxODMsIDIyNiwgMjUyLCAKKyAgICAyNTQsIDExOCwgMjI2LCAxNzQsIDIxNCwgMTYzLCAyMjYsIDI1MiwgMjU0LCAxMTgsIDIyNiwgMTc0LCAyNDYsIDExNCwgCisgICAgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDEyMCwgCisgICAgMjIsIDIyMiwgMjU0LCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgCisgICAgMjI1LCAxMCwgMTIwLCAyMiwgMjMzLCA1MiwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIAorICAgIDIzNiwgNywgODAsIDIyNSwgMTAsIDEyNCwgMjIsIDIyMiwgMjU0LCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIAorICAgIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgMTI0LCAyMiwgMjMzLCA1MiwgMjMxLCA5MywgMjU0LCAxMTgsIAorICAgIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDQ0LCAyMiwgMjE0LCAxNjMsIDIzMSwgCisgICAgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIDEwLCA0MywgMjIsIAorICAgIDIxNCwgMTYzLCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAKKyAgICAxMCwgNDQsIDIyLCAyNDYsIDExNCwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgCisgICAgNywgODAsIDIyNSwgMTAsIDQzLCAyMiwgMjQ2LCAxMTQsIDIyMywgNTIsIDI0NSwgMTYwLCAyMjAsIDEyOSwgMjQ1LCAxNjAsIAorICAgIDIyMCwgMTMwLCAyLCAyMjYsIDEyNywgMjQ1LCAxNjAsIDIyMCwgMTMwLCAyLCA0LCAyNTAsIDQ0LCA0OCwgMjQ1LCAxNjAsIAorICAgIDIyMCwgMTMwLCAyLCA0NCwgODAsIDQ4LCAyNDUsIDE2MCwgMjIwLCAxMzAsIDIsIDQzLCA4MCwgNDgsIDI1MCwgNDQsIDIsIAorICAgIDIwMywgMTMwLCAzNywgNjcsIDEzMCwgMzcsIDIyNiwgMTEsIDM3LCAyMjMsIDUzLCAyMTksIDQ4LCAzNywgMjI1LCAxNzQsIAorICAgIDI1MCwgNDQsIDI0NywgMTgxLCAyNTEsIDg2LCAyMDMsIDI1MiwgMTQ5LCAyMiwgMjE2LCAxNSwgMTYzLCAyNDcsIDE4MSwgCisgICAgMjUxLCA4NiwgNjcsIDEzMCwgMjUwLCA0NCwgMiwgMjE4LCAyNSwgMjExLCAxNzgsIDM3LCAyNTQsIDk1LCAyNDcsIDE3NywgCisgICAgNTAsIDEyMCwgODAsIDIxNiwgMTQwLCAyNTAsIDQzLCAzNywgNzEsIDI1MSwgMTIxLCAzNywgMjUxLCAxMjEsIDM3LCAyMzMsIAorICAgIDIwLCAzNywgMjQyLCAxMzYsIDI1MCwgNDQsIDIsIDQsIDI1MCwgNDQsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMjIsIDI1NCwgCisgICAgMjUwLCA0NCwgMiwgMTEzLCAyMDMsIDIxOCwgOTMsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMjIsIDI1NCwgOTIsIDIyMiwgMjMxLCAKKyAgICAyNDgsIDcsIDIxOSwgOTcsIDkyLCAyNDQsIDE4MywgMjQ4LCA3LCAyMTksIDk3LCA5MiwgMjUzLCAyMjQsIDkyLCA0LCAyNTAsIAorICAgIDQzLCA5MiwgMjE4LCAyMzYsIDExMywgMjM1LCA3MSwgMjE4LCAyMzQsIDIxNSwgMjI3LCAyLCA1OSwgNDgsIDIxNSwgMjI3LCAKKyAgICAyLCAyMTQsIDE4MywgMjIyLCA5NCwgMjM2LCA3LCAyMTUsIDIyNiwgMjE1LCAyMjcsIDIsIDIyMCwgMTM2LCAyNTMsIDIxNSwgCisgICAgMjUxLCAxODIsIDQ0LCAyMTUsIDIyNywgNzIsIDQzLCAyMTUsIDIyNiwgNDMsIDIxNSwgMjI3LCAyNTIsIDM4LCA2NywgMTMwLCAKKyAgICA2NywgMjUyLCAxNDksIDI1MiwgMzgsIDQ0LCAyMTUsIDIyNiwgMjUxLCAxNzMsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAyNTEsIAorICAgIDE3MywgMiwgNDQsIDE2MywgMjUxLCAyMjksIDg1LCAyNTEsIDE3MiwgMzAsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAzMCwgMiwgCisgICAgNDQsIDE2MywgMjUxLCAyMjksIDcxLCAyNDAsIDI0MywgODUsIDI0MCwgMjQzLCA0MywgMjExLCAyNDQsIDI0NCwgMTQzLCAKKyAgICA0NCwgMjExLCAyNDQsIDI0NCwgMTQzLCA0MywgNTIsIDIxMSwgMjQ0LCAyNDQsIDE0MywgNDQsIDUyLCAyMTEsIDI0NCwgCisgICAgMjQ0LCAxNDMsIDIzNSwgMjU1LCAyMzUsIDI0MSwgMjE2LCAxMTMsIDExNSwgMjM1LCAyNDEsIDIzNSwgMjQyLCAyMjksIAorICAgIDEwNywgMiwgNjcsIDEzMCwgMjQ2LCAxMjAsIDIzMCwgOTIsIDQyLCAyLCAyNDksIDE4OSwgMjI2LCAxMzEsIDIzNSwgMjUzLCAKKyAgICAyNTMsIDI0NSwgMjE5LCAyMjEsIDIyNCwgMTgzLCAyNDUsIDEwNiwgNSwgMjIsIDIxOSwgOTksIDIyNiwgMTEsIDI0NSwgCisgICAgMTA2LCA1LCAyMiwgMjE5LCA5OSwgMjI2LCAxMiwgMiwgMjE2LCA5MCwgNDgsIDI0MCwgMTExLCAyMTYsIDQzLCAyMiwgMjE5LCAKKyAgICA5OSwgMjI2LCAxMSwgMjQyLCAxOTAsIDIxOCwgMTU3LCAyMTYsIDE4NiwgMjQ2LCAxMTMsIDIxNSwgMjI3LCAyLCA0MywgCisgICAgMTYzLCAyNTEsIDIyOSwgMjQ2LCAxMTMsIDIxNSwgMjI3LCAyLCA0NCwgMTYzLCAyNTEsIDIyOSwgODUsIDI0OCwgMSwgMiwgCisgICAgMTI0LCA3NSwgODUsIDIzMiwgMTEwLCA3MSwgMjUwLCA0NCwgMiwgMTI0LCA3NSwgODUsIDI1MCwgNDQsIDIsIDEyNCwgNzUsIAorICAgIDI0NSwgOTMsIDcxLCAyMTgsIDIzNiwgMjQ1LCA5MywgODUsIDIxOCwgMjM2LCAyNDUsIDkzLCA3MSwgMjQ4LCAwLCAyNDUsIAorICAgIDkzLCA4NSwgMjQ4LCAwLCAyNDUsIDkzLCA3MSwgMjUwLCA0MywgMjQ1LCA5MywgODUsIDI1MCwgNDMsIDIyMiwgMTM0LCAKKyAgICAyMjMsIDUzLCAyMTksIDQ5LCAyMjYsIDE3MSwgMjE5LCA0OSwgMiwgMjI2LCAxMjcsIDIyMywgNTMsIDIxOSwgNDksIDIsIAorICAgIDIwMywgOTEsIDI1MiwgMSwgMjE5LCA0OCwgMjUyLCAxLCAyMjMsIDUzLCAyMTksIDQ4LCA1MiwgMjI1LCAyNSwgMjE1LCAKKyAgICAyMTIsIDIyNSwgMjUsIDIzMywgNDgsIDI0OSwgOTksIDI1NCwgMTE4LCAxMjcsIDIyMiwgMjUwLCAyNDksIDk5LCAyNTQsIAorICAgIDExOCwgMTI3LCAyMTYsIDc5LCAyMzAsIDE4NCwgMjMwLCAyOSwgMzcsIDU5LCAyMjYsIDE3MSwgMjMwLCAyOSwgMzcsIDk2LCAKKyAgICAyMjYsIDE3MSwgMjMwLCAyOSwgMzcsIDMwLCAyMjYsIDE3MSwgMjMwLCAyOSwgMjE0LCAxNzYsIDIyNiwgMTcyLCAyLCAyNDcsIAorICAgIDEyOCwgMjMwLCAyOSwgMjE0LCAxNzYsIDIyNiwgMTcyLCAyLCAyMjUsIDI1LCAyMzAsIDI5LCA0MiwgMjM1LCAyMDYsIDIyNiwgCisgICAgMTcxLCAyMzAsIDI5LCA0MiwgMjE0LCAxNzYsIDIyNiwgMTcxLCAxMTMsIDIzMiwgMTUyLCAyMiwgMjI2LCAxNzEsIDExMywgCisgICAgMjMyLCAxNTIsIDE3NywgMjI2LCAxNzEsIDIzMCwgMjksIDMwLCAyMjYsIDE3MSwgMjMwLCAxNTksIDExMywgMjE4LCA0NCwgCisgICAgMjE4LCA0MiwgMiwgMjM1LCAyMTgsIDIyNCwgMjcsIDIzNSwgMjE5LCAyMjYsIDE3MSwgMjQ0LCAxMDcsIDIyNiwgMywgMjM1LCAKKyAgICAyMTgsIDIzNSwgMjE5LCAyLCA1MiwgOTEsIDIzNSwgMjE5LCAyNTMsIDE4MSwgMiwgMjE5LCA5NywgMjUwLCA0MCwgMjQzLCAKKyAgICAyMzMsIDI1NCwgOTYsIDIzNSwgMjE2LCAyMzIsIDIyMCwgMjM1LCAyMTcsIDIsIDIyMywgMTE4LCAyMjUsIDI0MSwgMjU0LCAKKyAgICAxMCwgMjI1LCA0LCAyMzIsIDIyMCwgMjM1LCAyMTcsIDIsIDIyMCwgMTU0LCAyMjUsIDI0MSwgMjU0LCAxMCwgMjI1LCA0LCAKKyAgICAyMzIsIDIyMCwgMjM1LCAyMTcsIDIyOCwgNTcsIDIzNiwgMSwgMjE2LCAxOTcsIDIyNSwgNCwgMjM1LCAyMTksIDI1NCwgMTAsIAorICAgIDExNiwgMjI1LCAxNCwgMjI2LCAxNzEsIDIyNCwgMjEsIDIzNSwgMjE5LCAyMjYsIDE3MSwgMjM1LCAyMTksIDIsIDE0MCwgCisgICAgODAsIDIsIDEwMywgMjM1LCAyMTksIDIsIDMwLCA1MCwgMjM1LCAyMTksIDIsIDIzNSwgMjA1LCAyMzUsIDIxOSwgMiwgMjE0LCAKKyAgICAxNzUsIDIzNSwgMjE5LCAyLCAyMjYsIDEyNywgMjM1LCAyMTksIDIsIDIxNCwgMTgzLCAyMzUsIDcyLCAyMzMsIDkxLCA0MywgCisgICAgMjE1LCAyMjcsIDIyNiwgMTcxLCAyMTAsIDE2MCwgMTg5LCAyMjEsIDIwMywgMjQ5LCAyMTcsIDIxMCwgMTYwLCAxODksIAorICAgIDIyMSwgMjAzLCAyMjUsIDU5LCAyMTAsIDE2MCwgMTg5LCAyMjEsIDIwMywgMjI0LCAxNzksIDk2LCA1LCAyLCA0LCAyNTAsIAorICAgIDQ0LCA0OCwgOTYsIDUsIDIsIDI1MCwgMzksIDI1NSwgMjQsIDQ4LCA5NiwgNSwgMiwgMjE2LCA5MCwgNDgsIDk2LCA1LCAyLCAKKyAgICA1OSwgNTEsIDk2LCA1LCAyLCAyMTYsIDkwLCA1MSwgOTYsIDUsIDIsIDIxOCwgNjYsIDEwNSwgOTYsIDUsIDIsIDg1LCAyMTUsIAorICAgIDIyNiwgMjMwLCAxODcsIDUsIDIsIDI0OSwgMjI4LCA0OCwgMjMwLCAxODcsIDUsIDIsIDU5LCA1MSwgMjMwLCAxODcsIDUsIAorICAgIDIsIDI0NCwgMTgzLCAyNDcsIDEyNiwgMjMwLCAxODcsIDUsIDIsIDIyMiwgMjMxLCAyNDcsIDEyNiwgOTYsIDUsIDIzNiwgNywgCisgICAgNDMsIDE2MywgMjUwLCA0MywgOTYsIDUsIDIzNiwgNywgNDQsIDE2MywgMjUwLCA0MywgMjEzLCAyNTQsIDE3NywgMjQ5LCAKKyAgICAxMzksIDIyNCwgMTgzLCAyMzAsIDg5LCA1LCAyLCA1OSwgNDgsIDIzMCwgODksIDUsIDIsIDIxNCwgMTgzLCAyMjAsIDE1MSwgCisgICAgMjI0LCAxODQsIDIsIDI1MSwgMTgzLCAyNTAsIDcsIDIxOSwgNzksIDIyNCwgMTgzLCAyMzAsIDg5LCA1LCAyMzYsIDcsIDQzLCAKKyAgICAxNjMsIDI1MCwgNDMsIDIzMCwgODksIDUsIDIzNiwgNywgNDQsIDE2MywgMjUwLCA0MywgMzcsIDIzMCwgODksIDUsIDIsIAorICAgIDI1MCwgMzksIDI1NSwgMjMsIDIzMCwgODksIDUsIDIzNiwgNywgNTIsIDI1MCwgNDMsIDM3LCAyNDcsIDE3NywgNTAsIDk2LCAKKyAgICA1LCAyMzYsIDcsIDIxNSwgMjI2LCAyMzAsIDE4NywgNSwgMjM2LCA3LCAyMTUsIDIyNiwgMjMwLCA4OSwgNSwgMjM2LCA3LCAKKyAgICAyMTUsIDIyNiwgMjM1LCAyMTMsIDIyNCwgMTgzLCAyMjIsIDI0NSwgMjM1LCAyMTMsIDIyNCwgMTgzLCAyMTAsIDE2MCwgCisgICAgMTg5LCAyMjMsIDkzLCAyNDksIDIxNywgMjU0LCAxNDIsIDE3NywgMjQ5LCAxNzMsIDIzNSwgMjA2LCAyLCAyNDcsIDEyOCwgCisgICAgMjE0LCAxNzYsIDIsIDIzMCwgMTg3LCA1MCwgMjE0LCAxNzYsIDIsIDIyNiwgMTI3LCAyMzUsIDIwNiwgMiwgMjI2LCAxMjcsIAorICAgIDIzNSwgMjA2LCAyLCAyMzIsIDE1MiwgMjU0LCAxMjYsIDIxNCwgMTc2LCAyLCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIxNCwgCisgICAgMTc2LCA3MiwgMjM1LCAyMDUsIDIzNSwgMjA2LCA3MiwgMjE0LCAxNzUsIDIxNCwgMTc2LCA3MiwgMjUyLCAxNDksIDcyLCAKKyAgICAyMzUsIDIwNSwgMjM1LCAyMDYsIDcyLCAyNTIsIDE0OSwgNzIsIDIxNCwgMTc1LCAyMTQsIDE3NiwgMjUyLCAzOCwgMjIsIAorICAgIDIzNSwgNzEsIDIsIDIxNCwgMTc1LCAyMzUsIDIwNiwgMjUyLCAzOCwgMjIsIDIzNSwgNzEsIDIsIDIzNSwgMjA1LCAyNTAsIAorICAgIDgsIDIxNCwgMTc2LCAyLCAyMjAsIDEzNSwgMjUwLCA4LCAyMzUsIDIwNiwgMiwgMjIwLCAxMzUsIDUyLCA0MiwgMjM1LCAKKyAgICAyMDUsIDUyLCA0MiwgMjE0LCAxNzUsIDI1MCwgOCwgMjE0LCAxNzYsIDIsIDIyMCwgMTM2LCAyMiwgMjE5LCA3OSwgMjI0LCAKKyAgICAxODMsIDIzMiwgMTUyLCAyMiwgMiwgNTksIDQ4LCAyMzIsIDE1MiwgMTc3LCAyLCA1OSwgNDgsIDUyLCAyMzIsIDE1MiwgCisgICAgMjU0LCAxMjYsIDUyLCAyMzIsIDE1MiwgMjI2LCAxNjIsIDExMywgMjM1LCAyMDcsIDIzMiwgMTUyLCAyNTQsIDEyNiwgMTEzLCAKKyAgICAyMzUsIDIwNywgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMTksIDg3LCAyMzMsIDkxLCAyMjYsIDE2MiwgMjE5LCA4NywgMjMzLCAKKyAgICA5MSwgMjU0LCAxMjYsIDIzMiwgMTUyLCAxNzcsIDIyNiwgMTI1LCAyMzIsIDE1MiwgMjU0LCAxMjYsIDIzMiwgMTUyLCAyMiwgCisgICAgMiwgMjMwLCAyMjksIDIxOCwgMTQxLCAyMzIsIDE1MiwgMTc3LCAyLCAyMzAsIDIyOSwgMjE4LCAxNDEsIDIzMiwgMTUyLCAKKyAgICAyMiwgMiwgMjAzLCAyNDgsIDE2NCwgMjMyLCAxNTIsIDE3NywgMiwgMjAzLCAyNDgsIDE2NCwgMjMyLCAxNTIsIDIyLCAyLCAKKyAgICA1MiwgMjI2LCAxMjcsIDIzMiwgMTUyLCAyMiwgMiwgMjE0LCAxODMsIDIzMiwgMTUyLCAyMiwgMiwgNTIsIDIxNCwgMTgzLCAKKyAgICA0LCAyMTMsIDI1MSwgMiwgMjE0LCAxODMsIDIzMiwgMTUyLCAxNzcsIDIsIDUyLCAyMjYsIDEyNywgMjMyLCAxNTIsIDE3NywgCisgICAgMiwgNTIsIDIxNCwgMTgzLCAyMTAsIDE2MCwgMTg5LCAyNDcsIDEzNywgMjU0LCA4NywgMjEwLCAxNjAsIDE4OSwgMjIzLCAKKyAgICAxNTEsIDI1NCwgODcsIDI0NSwgMTA2LCA1LCAyLCA1OSwgNTEsIDI0MCwgMTExLCAyLCA1OSwgNDgsIDIxNSwgMjEyLCAyMDMsIAorICAgIDI1MiwgMTQ5LCAyLCA1MiwgNjcsIDkxLCAyMTUsIDIxMiwgMjAzLCAyNTIsIDE0OSwgMiwgMjE1LCAyMTIsIDY3LCA5MSwgCisgICAgMjE2LCA5MCwgMjI2LCAxNzIsIDIsIDU5LCA0OCwgMjE2LCA5MCwgMjI2LCAxNzIsIDIsIDIyMiwgMjMxLCAyNDcsIDEyNiwgCisgICAgMjE5LCAxNjQsIDIzMCwgMTg3LCAyMTksIDE2MywgMjQ5LCAyMDcsIDIsIDU5LCA0OCwgMjQ1LCAxMDYsIDIsIDI1MywgMjI0LCAKKyAgICAyNTQsIDE1NiwgMTI4LCAyMTYsIDQzLCAyLCAyNTAsIDM5LCAyNTUsIDIzLCAyNTQsIDU2LCAxMjgsIDE3NywgMTI4LCAxMTIsIAorICAgIDI0NSwgMTA2LCA1LCA3MiwgOTYsIDUwLCA5NiwgNSwgNzIsIDI0NSwgMTA2LCA1MCwgMjQ1LCAxMDYsIDUsIDcyLCAyMTYsIAorICAgIDkwLCAyMjYsIDE3MSwgNTIsIDI0OSwgMjM1LCAyNDUsIDEwNywgMTEzLCAyNDksIDIwMiwgMjQ1LCAxMDYsIDIxOSwgMTc4LCAKKyAgICAxMzQsIDI0OSwgMjAyLCAyNDUsIDEwNiwgMjE5LCAxNzgsIDI0NSwgMTA2LCA1LCAyLCAxMTMsIDE3MCwgNzIsIDIyLCAxMTMsIAorICAgIDE3MCwgNTEsIDI0NSwgMTAyLCAyLCAyNDQsIDE5LCAxNzAsIDQ4LCAyMzMsIDIxLCAyLCAyNTAsIDQ0LCAyMzUsIDIyMiwgCisgICAgMjQyLCAxMzcsIDIsIDI1MCwgNDQsIDIzNSwgMjIyLCAyMzMsIDIxLCAyLCAyMjQsIDE2LCAxNjQsIDQ4LCAyNDIsIDEzNywgCisgICAgMiwgMjI0LCAxNiwgMTY0LCA0OCwgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAxMjgsIDExMiwgMjQyLCAxMzcsIDE3NywgMjE5LCAKKyAgICA5OSwgMTI4LCAxMTIsIDIzMywgMjEsIDE3NywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgMjM1LCAyMjIsIDI0MiwgCisgICAgMTM3LCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDIzNSwgMjIyLCAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIAorICAgIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAyNDIsIDEzNywgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgCisgICAgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA3MiwgMjIyLCAyNTQsIDI0MiwgMTM3LCAxNzcsIAorICAgIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDcyLCAyMzMsIDUyLCAyMzMsIDIxLCAxNzcsIDI1NCwgNTcsIDI0MiwgCisgICAgMTM3LCAxNzcsIDI1NCwgNTcsIDIzMywgMjEsIDIyLCAyMTksIDE1NSwgMjI4LCA1NywgMTI4LCAxMTIsIDI0MiwgMTM3LCAKKyAgICAyMiwgMjE5LCAxNTUsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMzMsIDIxLCAyMiwgMjI4LCA1NywgMjU0LCA1NywgMjQyLCAxMzcsIAorICAgIDIyLCAyMjgsIDU3LCAyNTQsIDU3LCAyMzMsIDIxLCA3MiwgMjQ2LCAxMTksIDEyOCwgNzIsIDI0MiwgMTM2LCAyNDIsIDEzNywgCisgICAgNzIsIDI0NiwgMTE5LCAxMjgsIDcyLCAyMzMsIDIwLCAyMzMsIDIxLCA3MiwgMjE5LCAxNjQsIDE3NywgMjQ1LCAxMDcsIAorICAgIDI0MiwgMTM3LCA3MiwgMjE5LCAxNjQsIDE3NywgMjQ1LCAxMDcsIDIzMywgMjEsIDcyLCAyMTksIDE2NCwgNzIsIDI0MiwgCisgICAgMTM2LCAyNDIsIDEzNywgNzIsIDIxOSwgMTY0LCA3MiwgMjMzLCAyMCwgMjMzLCAyMSwgNzIsIDI0MiwgMTM3LCA3MiwgMjQ2LCAKKyAgICAxMTksIDI0NSwgMTA3LCAyNDIsIDEzNywgNzIsIDIzMywgMjEsIDcyLCAyNDYsIDExOSwgMjQ1LCAxMDcsIDIzMywgMjEsIAorICAgIDcyLCAyMTksIDk5LCAxMjgsIDcyLCAyNDIsIDEzNywgNzIsIDIxOSwgOTksIDI0NSwgMTA3LCAyNDIsIDEzNywgNzIsIDIxOSwgCisgICAgOTksIDEyOCwgNzIsIDIzMywgMjEsIDcyLCAyMTksIDk5LCAyNDUsIDEwNywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIAorICAgIDIzMywgMjAsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNiwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAKKyAgICAxNzcsIDIzMywgMjEsIDIsIDU5LCAyMzUsIDIyMiwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM3LCAyLCAKKyAgICA1OSwgMjM1LCAyMjIsIDI0NiwgMTE5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjMzLCAyMCwgMjQ2LCAxMTksIDEyOCwgMjE2LCAKKyAgICA0MywgMTc3LCAyNDIsIDEzNiwgMjQ2LCAxMTksIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyMzMsIDIwLCAyNDYsIAorICAgIDExOSwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM2LCAyMTksIDE2NCwgMTc3LCAyMzMsIDIwLCAyMTksIAorICAgIDE2NCwgMTc3LCAyNDIsIDEzNiwgMjE5LCAxNjQsIDcyLCAyMzMsIDIxLCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTksIDE2NCwgCisgICAgNzIsIDI0MiwgMTM3LCA3MiwgMjQ1LCAxMDYsIDUwLCA1MiwgMjI5LCA5NiwgMjMzLCAyMCwgNTIsIDIyOSwgOTYsIDI0MiwgCisgICAgMTM2LCA1MiwgMjI5LCA5NiwgMjMzLCAyMSwgMiwgMjE0LCAxODMsIDI0MiwgMTM3LCAyMjYsIDEyNSwgMjMzLCAyMCwgMjQyLCAKKyAgICAxMzcsIDI1MiwgMzgsIDIzMywgMjAsIDIzMywgMjEsIDI1MCwgOCwgMjUxLCA4NiwgMjQ5LCAxMDAsIDI0MiwgMTM3LCAyNTAsIAorICAgIDgsIDI1MSwgODYsIDI0OSwgMTAwLCAyMzMsIDIxLCAyNTAsIDgsIDI1MSwgODYsIDI0OSwgMTAxLCA3MiwgMjE5LCA5OSwgCisgICAgMjQ1LCAxMDcsIDI0MiwgMTM3LCAyNTAsIDgsIDI1MSwgODYsIDI0OSwgMTAxLCA3MiwgMjE5LCA5OSwgMjQ1LCAxMDcsIAorICAgIDIxOSwgODAsIDIxNiwgMjAxLCAyMzMsIDg5LCAyMTYsIDIwMSwgMjE5LCA4MCwgMjE2LCAyMDIsIDE3NywgMTI4LCAxMTIsIAorICAgIDIzMywgODksIDIxNiwgMjAyLCAxNzcsIDEyOCwgMTEyLCAyNDUsIDEwNiwgNSwgMiwgMjUxLCAxMTYsIDQ4LCAyMjQsIDIwNiwgCisgICAgNzIsIDIxOSwgMTU1LCAyNDUsIDEwNiwgNTAsIDIxOCwgNTcsIDcyLCAyMTksIDE1NSwgMjQ1LCAxMDYsIDUwLCAyMjQsIAorICAgIDIwNiwgNzIsIDIxOSwgMTU1LCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDIxOSwgMTU1LCAyMjgsIDU3LCAKKyAgICAxMjgsIDExMiwgMjI0LCAyMDYsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOCwgNTcsIDcyLCAyNDUsIDEwNiwgNTAsIDIyNCwgCisgICAgMjA2LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjI0LCAyMDYsIDcyLCAKKyAgICAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIyNCwgMjA2LCA3MiwgMjI4LCAKKyAgICA1NywgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTgsIDU3LCA3MiwgMjI4LCA1NywgMjU0LCAxNTYsIDEyOCwgMTEyLCA1MiwgCisgICAgMjI0LCAyMDUsIDUyLCAyMTgsIDU2LCAyMTgsIDY1LCAyLCAyNDcsIDEyOCwgMjE4LCAyMywgMiwgMjQ3LCAxMjgsIDIxOCwgCisgICAgNjUsIDIsIDk2LCA1LCA1MSwgMjE4LCAyMywgMiwgOTYsIDUsIDUxLCAyMTgsIDY1LCAyLCAyMzAsIDg5LCA1LCA1MSwgMjE4LCAKKyAgICAyMywgMiwgMjMwLCA4OSwgNSwgNTEsIDIxOCwgNjUsIDY0LCAxNzcsIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAyMTgsIAorICAgIDIzLCA2NCwgMTc3LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgMjE4LCA2NSwgNjQsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOCwgCisgICAgMjMsIDY0LCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTgsIDY1LCA2NCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMTgsIDIzLCAKKyAgICA2NCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMTgsIDY1LCA2NCwgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCAyMywgCisgICAgNjQsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgNjUsIDY0LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgMjMsIAorICAgIDY0LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDQyLCA0MywgMjA0LCA5MywgMjI2LCAxNzEsIDQyLCA0NCwgMjA0LCA5MywgCisgICAgMjI2LCAxNzEsIDI1MCwgOCwgMjE4LCA2NCwgMjUwLCA4LCAyMTgsIDIyLCAyNTAsIDgsIDIxOCwgNjUsIDE3NywgMTI4LCAKKyAgICAxMTIsIDI1MCwgOCwgMjE4LCAyMywgMTc3LCAxMjgsIDExMiwgMjE4LCA2NSwgNzIsIDIxOCwgMjIsIDIxOCwgMjMsIDcyLCAKKyAgICAyMTgsIDY0LCAyMTgsIDY1LCA3MiwgMjE4LCA2NCwgMjE4LCAyMywgNzIsIDIxOCwgMjIsIDIxOCwgMjMsIDI1MiwgMzgsIAorICAgIDIxOCwgNjQsIDIxOCwgMjMsIDI1MiwgMzgsIDIyLCAyMzUsIDcxLCAyNTEsIDg2LCAyNDgsIDE2NSwgMiwgMjE4LCA2NCwgCisgICAgMjQ1LCAxNzgsIDY0LCAyMjYsIDE3NCwgMjQ2LCAxMTEsIDIyNSwgNTEsIDIsIDIxNywgMTMsIDIxNiwgMTQsIDIxNSwgMjQxLCAKKyAgICAyMzUsIDIwNSwgMjQ0LCAyOSwgMjI4LCA3MCwgMjE5LCAyNTMsIDQzLCAyMTcsIDg4LCAyMTksIDI1MywgMTI0LCAyMTcsIAorICAgIDg4LCAyMTksIDI1MywgMTIwLCAyMTcsIDg4LCAyMjUsIDE3NSwgMiwgMjIyLCA5MywgNjcsIDI1MiwgMTQ5LCAyMTUsIDIxMiwgCisgICAgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDksIDQzLCAyMTUsIDkzLCA2NywgMjUyLCAxNDksIDUyLCA0MywgMjE1LCAKKyAgICA5MywgNTIsIDY3LCAyNTIsIDE0OSwgNTIsIDQzLCAyMTUsIDkzLCAyMDAsIDI0OCwgMTY1LCAyNDMsIDI1MSwgNDMsIDIzMSwgCisgICAgNjgsIDY0LCA1MiwgMjEzLCAyMzksIDIxOSwgMjUzLCAxMjQsIDIxNywgODksIDIsIDIyNiwgMTI3LCAyMTksIDI1MywgMTIwLCAKKyAgICAyMTcsIDg5LCAyLCAyMTQsIDE4MywgMjE5LCAyNTMsIDEyMCwgMjE3LCA4OSwgNzIsIDIxOSwgMjUzLCAxMjQsIDIxNywgODgsIAorICAgIDUyLCAxMjQsIDIxNywgODgsIDUyLCAxMjAsIDIxNywgODgsIDUyLCAyMTgsIDEwNSwgMjI4LCA1NywgNTAsIDIyMywgNTIsIAorICAgIDUyLCAyMTgsIDEwNSwgMjI4LCA1NywgNTAsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDcsIDE4MywgMiwgMjIzLCA1MiwgMjI5LCAKKyAgICAxMDYsIDIxOSwgOTcsIDY3LCAyMzIsIDIyMCwgMiwgMjUwLCA0NCwgNDgsIDY3LCAyMzIsIDIyMCwgMiwgMjUwLCA0NCwgNTEsIAorICAgIDEyNCwgMjE3LCA4OSwgMiwgMjUwLCA0NCwgNTEsIDIyNiwgMTIsIDIsIDIwMywgOTEsIDIyNiwgMTIsIDIsIDIxNiwgOTAsIAorICAgIDIyNiwgMTcxLCAyMTUsIDIxMiwgNjcsIDI1MiwgMTQ5LCAyNTEsIDI1MiwgMjIzLCA5NCwgMjE1LCAyMTIsIDY3LCAyNTIsIAorICAgIDE0OSwgMiwgMjAzLCA5MSwgMjE1LCAyMTIsIDI0OSwgMjM1LCAyMjYsIDE3MSwgMjE1LCAyMTIsIDIyOSwgOTYsIDIzMywgCisgICAgMjAsIDIxNSwgMjEyLCAyMjksIDk2LCAyNDIsIDEzNiwgMjQ2LCAxMTksIDIxOSwgOTksIDIzMywgMjEsIDE3NywgMTI4LCAKKyAgICAxMTIsIDI0NiwgMTE5LCAyMTksIDk5LCAyNDIsIDEzNywgMTc3LCAxMjgsIDExMiwgMjE1LCAyMTIsIDIxOSwgNDksIDI1MSwgCisgICAgMjUyLCAyMjMsIDk0LCAyMzMsIDkxLCAyMTUsIDIxMiwgNjcsIDI1MiwgMTQ5LCAyMjYsIDE3MSwgNTIsIDIxOSwgNDksIAorICAgIDIyNiwgMTcxLCA3MSwgNjcsIDEzMCwgMjMwLCAyOSwgNzEsIDY3LCAxMzAsIDIyOCwgNjEsIDI0NSwgMjI4LCA3MSwgNzUsIAorICAgIDIyOCwgNjEsIDIxMiwgOSwgNzEsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgNzEsIDc1LCAyMTksIDMwLCAyMTIsIDksIDcxLCAKKyAgICA3NSwgNDMsIDQ0LCA3MSwgNzUsIDE0MCwgODUsIDc1LCAyMTQsIDE1MywgODUsIDc1LCAyNDYsIDExMiwgODUsIDc1LCAyMjgsIAorICAgIDYxLCAyNDUsIDIyOCwgODUsIDc1LCAyMjgsIDYxLCAyMTIsIDksIDg1LCA3NSwgMjE5LCAzMCwgMjQ1LCAyMjgsIDg1LCA3NSwgCisgICAgMjE5LCAzMCwgMjEyLCA5LCA4NSwgNzUsIDQzLCA0NCwgODUsIDc1LCAxMjAsIDEyNCwgODUsIDc1LCA5NywgODAsIDIsIAorICAgIDIxNiwgNzgsIDI0NiwgMTExLCA5NywgODAsIDIsIDIxNiwgNzgsIDIxNCwgMTUyLCAxNDAsIDgwLCAyLCAyMTYsIDc4LCAKKyAgICAyNDYsIDExMSwgMTQwLCA4MCwgMiwgMjE2LCA3OCwgMjE0LCAxNTIsIDQyLCAyLCAyMTYsIDE1LCAxNjMsIDI1MSwgMjI5LCAKKyAgICA0MiwgMiwgMjUxLCAxODMsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAyMTQsIDE2MCwgNDQsIDI0OCwgNywgMTYzLCAyNTEsIAorICAgIDIyOSwgNDIsIDIsIDIzMiwgMTE0LCA0MywgMjQ4LCA3LCAxNjMsIDI1MSwgMjI5LCAyNDgsIDEsIDIsIDQzLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyNDgsIDEsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCAyNDgsIDEsIDIsIDIxNiwgMTUsIDE2MywgMjUxLCAyMjksIAorICAgIDI0OCwgMSwgMiwgMjUxLCAxODMsIDE2MywgMjUxLCAyMjksIDI0NiwgMTI2LCAyMTgsIDIzNiwgODUsIDIzMywgOTEsIDIxOCwgCisgICAgMjM2LCA3MSwgMjMzLCA5MSwgMjE4LCAyMzYsIDg1LCAyMTMsIDE4NywgNCwgMjE4LCAyMzYsIDcxLCAyMTMsIDE4NywgNCwgCisgICAgMjE4LCAyMzYsIDg1LCAyMjUsIDE5MywgNzEsIDIyNSwgMTkzLCA3MSwgMjQxLCAyMDAsIDg1LCAyNDEsIDIwMCwgMjAzLCAKKyAgICA4NSwgMjQxLCAyMDAsIDg1LCAyMzMsIDkxLCAyNTAsIDQzLCA4NSwgMjMxLCA4NywgMjQ4LCAwLCA3MSwgMjMxLCA4NywgCisgICAgMjQ4LCAwLCA4NSwgMjMxLCA4NywgMjMyLCAxMTAsIDcxLCAyMzEsIDg3LCAyMzIsIDExMCwgODUsIDQsIDI0OCwgMCwgODUsIAorICAgIDQsIDIzMiwgMTEwLCA3MSwgNCwgMjMyLCAxMTAsIDg1LCAyMDMsIDI0NSwgMTcyLCA3MSwgMjAzLCAyNDUsIDE3MiwgODUsIAorICAgIDY3LCAyNDUsIDE3MiwgNzEsIDY3LCAyNDUsIDE3MiwgNDMsIDgwLCAyLCA0LCAyNTAsIDQzLCAxMzQsIDE0MCwgMjUzLCAKKyAgICAyNTUsIDQzLCA4MCwgMiwgMzcsIDIyNSwgMjUsIDIwMCwgMTQwLCAyMTgsIDIzMiwgNzUsIDE0MCwgMjE1LCA1OCwgODAsIDIsIAorICAgIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDEzMCwgCisgICAgMTQwLCAyMTUsIDU4LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDc1LCAxNDAsIDgwLCAyLCAyNDYsIDEyNiwgMjE4LCAxNDEsIAorICAgIDE0MCwgODAsIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgMTQwLCA4MCwgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgMTQwLCAKKyAgICAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCAxNDAsIAorICAgIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDgwLCAyMTYsIDE0MCwgMjExLCAxNzgsIDIxMiwgCisgICAgMzYsIDgwLCAyMjUsIDEwLCAyNDcsIDIwMywgMjMzLCA1MiwgMjQ1LCAxMDYsIDUsIDcyLCAxNDAsIDc1LCAyMjMsIDUzLCAKKyAgICAyMTYsIDkwLCAyMjYsIDE3MiwgNzIsIDE0MCwgNzUsIDE0MCwgODAsIDcyLCAyMjMsIDUzLCAyNTQsIDE1NiwgMTI4LCAxMTIsIAorICAgIDk3LCA4MCwgMjE2LCAxNDAsIDI0MiwgMTM2LCA5NywgODAsIDIxNiwgMTQwLCAyMTgsIDIyLCAxNDAsIDIyNCwgMjcsIDc1LCAKKyAgICA5NywgMjI0LCAyNywgNzUsIDIyMywgNTMsIDIxNiwgOTAsIDIyNiwgMTcyLCA3MiwgOTcsIDc1LCA5NywgODAsIDcyLCAyMjMsIAorICAgIDUzLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxNiwgOTAsIDIyNiwgMTcyLCA3MiwgMTQwLCA3NSwgMTQwLCA4MCwgNzIsIDI1NCwgCisgICAgMTU2LCAxMjgsIDExMiwgMTQwLCA4MCwgNzIsIDIyMywgNTMsIDIxNiwgOTAsIDIyNiwgMTcxLCA5NywgODAsIDcyLCAyMjMsIAorICAgIDUzLCAyMTYsIDkwLCAyMjYsIDE3MSwgNzEsIDIzMSwgODcsIDIxOCwgMTU4LCA4NSwgNCwgMjE4LCAxNTgsIDcxLCA0LCAKKyAgICAyMTgsIDE1OCwgODUsIDIyMiwgMjUwLCAyMjUsIDE5MywgNzEsIDIyMiwgMjUwLCAyMjUsIDE5MywgMTE0LCAyMzMsIDkxLCAKKyAgICAyNTAsIDQzLCAxMTQsIDIyNiwgMTI4LCAyLCAyMjYsIDEyOCwgMjM1LCAyMjIsIDExNCwgMjUwLCA0NCwgMiwgMjUwLCA0NCwgCisgICAgMjM1LCAyMjIsIDExNCwgMjUwLCA0MywgMTE0LCAzNywgMjIyLCAwLCAxNDUsIDYsIDEsIDI1MywgMTY3LCAxNDUsIDYsIDEsIAorICAgIDI1MSwgMTI1LCAxNDUsIDYsIDEsIDIxMywgMjUzLCAxNDUsIDYsIDEsIDI0MiwgMTkyLCAxNDUsIDYsIDEsIDI0NywgMTQ4LCAKKyAgICAxNDUsIDYsIDEsIDIxMSwgMjEsIDE0NSwgNiwgMSwgMjEwLCA2OCwgMTQ1LCA2LCAxLCAyNDYsIDQyLCAxNDUsIDYsIDEsIAorICAgIDIxMCwgOTEsIDE0NSwgNiwgMSwgMjM1LCAxNTQsIDE0NSwgNiwgMSwgNjUsIDIzNSwgMTU0LCAxNDUsIDYsIDEsIDc0LCAKKyAgICAxNDUsIDYsIDEsIDI0NywgMTY4LCAxNDUsIDYsIDEsIDIzNCwgMjQ2LCAxNDUsIDYsIDEsIDIzMiwgMTkyLCAxNDUsIDYsIDEsIAorICAgIDIzMCwgMzQsIDE0NSwgNiwgMSwgMjI5LCAxOTYsIDE0NSwgNiwgMSwgMjI2LCAxODksIDE0NSwgNiwgMSwgMjI1LCA3LCAKKyAgICAxNDUsIDYsIDEsIDIyMiwgMjMwLCAxNDUsIDYsIDEsIDIxOSwgODUsIDE0NSwgNiwgMSwgMjE1LCA4MSwgMTQ1LCA2LCAxLCAKKyAgICAyMTQsIDIwMSwgMTQ1LCA2LCAxLCAyNDMsIDI1NCwgMTQ1LCA2LCAxLCAyNDEsIDIwNiwgMTQ1LCA2LCAxLCAyMjYsIDEzOSwgCisgICAgMTQ1LCA2LCAxLCAyMjUsIDIyNCwgMTQ1LCA2LCAxLCAyMTksIDIzMCwgMTQ1LCA2LCAxLCAyMTUsIDE2OCwgMTQ1LCA2LCAxLCAKKyAgICAyNTAsIDgzLCAxNDUsIDYsIDEsIDIyMCwgMTA0LCAxNDUsIDYsIDEsIDIxMSwgMjcsIDE0NSwgNiwgMSwgMjExLCAyOSwgCisgICAgMTQ1LCA2LCAxLCAyMTEsIDU3LCAxNDUsIDYsIDEsIDIxOCwgMjU1LCAxNjIsIDE0NSwgNiwgMSwgMjEwLCAyMTIsIDE0NSwgCisgICAgNiwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNiwgMSwgNCwgMjEwLCAxODQsIDIsIDIxNywgNzgsIDE0NSwgNiwgMSwgMjEwLCAKKyAgICAyNDQsIDE0NSwgNiwgMSwgMjM1LCAxOTEsIDQsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDI1MiwgMSwgMjEwLCAxODMsIDE0NSwgCisgICAgNiwgMSwgMjM1LCAxOTEsIDI1MiwgMSwgMjEwLCAxODMsIDE0NSwgNiwgMSwgMjQ0LCA5MCwgMTQ1LCA2LCAxLCAyMzUsIAorICAgIDE1MiwgMTQ1LCA2LCAxLCAyMTksIDIyOSwgMTQ1LCA2LCAxLCAyMTUsIDIwMywgNjEsIDE0NSwgNiwgMSwgMjMzLCA4MSwgCisgICAgMjMwLCAzNCwgMTQ1LCA0LCAxLCAyNTMsIDE2NywgMTQ1LCA0LCAxLCAyNTEsIDEyNSwgMTQ1LCA0LCAxLCAyMTMsIDI1MywgCisgICAgMTQ1LCA0LCAxLCAyNDIsIDE5MiwgMTQ1LCA0LCAxLCAyNDcsIDE0OCwgMTQ1LCA0LCAxLCAyMTEsIDIxLCAxNDUsIDQsIDEsIAorICAgIDIxMCwgNjgsIDE0NSwgNCwgMSwgMjQ2LCA0MiwgMTQ1LCA0LCAxLCAyMTAsIDkxLCAxNDUsIDQsIDEsIDIzNSwgMTU0LCAKKyAgICAxNDUsIDQsIDEsIDY1LCAyMzUsIDE1NCwgMTQ1LCA0LCAxLCA3NCwgMTQ1LCA0LCAxLCAyNDcsIDE2OCwgMTQ1LCA0LCAxLCAKKyAgICAyMzQsIDI0NiwgMTQ1LCA0LCAxLCAyMzIsIDE5MiwgMTQ1LCA0LCAxLCAyMzAsIDM0LCAxNDUsIDQsIDEsIDIyOSwgMTk2LCAKKyAgICAxNDUsIDQsIDEsIDIyNiwgMTg5LCAxNDUsIDQsIDEsIDIyNSwgNywgMTQ1LCA0LCAxLCAyMjIsIDIzMCwgMTQ1LCA0LCAxLCAKKyAgICAyMTksIDg1LCAxNDUsIDQsIDEsIDIxNSwgODEsIDE0NSwgNCwgMSwgMjE0LCAyMDEsIDE0NSwgNCwgMSwgMjQzLCAyNTQsIAorICAgIDE0NSwgNCwgMSwgMjQxLCAyMDYsIDE0NSwgNCwgMSwgMjI2LCAxMzksIDE0NSwgNCwgMSwgMjI1LCAyMjQsIDE0NSwgNCwgMSwgCisgICAgMjE5LCAyMzAsIDE0NSwgNCwgMSwgMjE1LCAxNjgsIDE0NSwgNCwgMSwgMjUwLCA4MywgMTQ1LCA0LCAxLCAyMjAsIDEwNCwgCisgICAgMTQ1LCA0LCAxLCAyMTEsIDI3LCAxNDUsIDQsIDEsIDIxMSwgMjksIDE0NSwgNCwgMSwgMjExLCA1NywgMTQ1LCA0LCAxLCAKKyAgICAyMTgsIDI1NSwgMTYyLCAxNDUsIDQsIDEsIDIxMCwgMjEyLCAxNDUsIDQsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDQsIAorICAgIDIxMCwgMTg0LCAyLCAyMTcsIDc4LCAxNDUsIDQsIDEsIDIxMCwgMjQ0LCAxNDUsIDQsIDEsIDIzNSwgMTkxLCA0LCAyMTAsIAorICAgIDE4MywgMTQ1LCA0LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDIzNSwgMTkxLCAyNTIsIDEsIDIxMCwgMTgzLCAKKyAgICAxNDUsIDQsIDEsIDI0NCwgOTAsIDE0NSwgNCwgMSwgMjM1LCAxNTIsIDE0NSwgNCwgMSwgMjE5LCAyMjksIDE0NSwgNCwgMSwgCisgICAgMjE1LCAyMDMsIDYxLCAxNDUsIDQsIDEsIDIzMywgODEsIDIzMCwgMzQsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCA1MiwgMTMwLCAKKyAgICA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgNTIsIDEzMCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDYsIAorICAgIDEsIDIyNiwgMTEwLCAyLCA5MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIxNywgNzgsIDcsIDQsIDEsIDExNiwgMiwgOTEsIAorICAgIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNDgsIDQ3LCA3LCA0LCAxLCAKKyAgICAyNDIsIDY4LCAyLCAyNDgsIDQ3LCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAKKyAgICAyNDgsIDQ3LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjQ4LCA0NywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI0OCwgNDcsIDcsIAorICAgIDYsIDEsIDI1NCwgMTUxLCA3LCA2LCAxLCAyMzIsIDU1LCAyLCAxMDMsIDcsIDYsIDEsIDIxNSwgOTQsIDYxLCA3LCA2LCAxLCAKKyAgICAyMTUsIDk0LCAyNTQsIDE1MSwgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDQ0LCAxMDMsIDcsIDYsIDEsIDIxMiwgOTksIDIsIAorICAgIDEwMywgNywgNCwgMSwgMjEyLCA5OSwgMiwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjQ5LCAxMDgsIDcsIDYsIDEsIAorICAgIDE2MywgMjQyLCA2NywgNywgNCwgMSwgMTYzLCAyNDIsIDY3LCA3LCA0LCAxLCAyMTcsIDc2LCAyMjUsIDEzNiwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAyMjgsIDU1LCA3LCA0LCAxLCAyMTUsIDk0LCAyMjMsIDIyNywgMiwgMjE3LCA3OCwgNywgNCwgMSwgMTQ0LCAyLCAKKyAgICAxMjEsIDIyMiwgMjM3LCAyMzUsIDIyMiwgNywgMSwgNCwgNiwgMjE1LCA5NCwgNzYsIDcsIDIxOCwgNjYsIDQsIDEsIDIzNSwgCisgICAgMTUwLCA1OCwgMSwgNiwgMjE0LCAxMDUsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDIxNywgMjUxLCAyMTcsIDc4LCA3LCA2LCAxLCAKKyAgICAyMTAsIDE2MCwgMiwgMjE3LCAyNTEsIDIxNywgNzgsIDgxLCA2LCAxLCAyNTQsIDE3MywgODEsIDQsIDEsIDI1NCwgMTczLCAKKyAgICA4MSwgNiwgMSwgMjEzLCAxNzMsIDgxLCA0LCAxLCAyMTMsIDE3MywgODEsIDYsIDEsIDI0MywgMTE0LCA4MSwgNCwgMSwgCisgICAgMjQzLCAxMTQsIDgxLCA2LCAxLCAyNDgsIDE5OSwgODEsIDQsIDEsIDI0OCwgMTk5LCA4MSwgNiwgMSwgMjQ1LCAyMDIsIDgxLCAKKyAgICA0LCAxLCAyNDUsIDIwMiwgODEsIDYsIDEsIDIxOSwgMzUsIDgxLCA0LCAxLCAyMTksIDM1LCA4MSwgNiwgMSwgMjEwLCAxMDEsIAorICAgIDgxLCA0LCAxLCAyMTAsIDEwMSwgODEsIDYsIDEsIDI0MSwgMjU1LCA4MSwgNCwgMSwgMjQxLCAyNTUsIDgxLCA2LCAxLCAKKyAgICAyMTYsIDE3OCwgODEsIDQsIDEsIDIxNiwgMTc4LCA4MSwgNiwgMSwgMjQwLCAxMjMsIDgxLCA0LCAxLCAyNDAsIDEyMywgODEsIAorICAgIDYsIDEsIDIzNCwgMjMzLCA4MSwgNCwgMSwgMjM0LCAyMzMsIDgxLCA2LCAxLCAyMzMsIDc4LCA4MSwgNCwgMSwgMjMzLCA3OCwgCisgICAgODEsIDYsIDEsIDIzMCwgMjM1LCA4MSwgNCwgMSwgMjMwLCAyMzUsIDgxLCA2LCAxLCAyMjgsIDIzOCwgODEsIDQsIDEsIAorICAgIDIyOCwgMjM4LCA4MSwgNiwgMSwgMjMzLCAyMzksIDgxLCA0LCAxLCAyMzMsIDIzOSwgODEsIDYsIDEsIDc4LCA4MSwgNCwgMSwgCisgICAgNzgsIDgxLCA2LCAxLCAyMjUsIDExMSwgODEsIDQsIDEsIDIyNSwgMTExLCA4MSwgNiwgMSwgMjIyLCAyMTMsIDgxLCA0LCAxLCAKKyAgICAyMjIsIDIxMywgODEsIDYsIDEsIDIxOSwgMTY3LCA4MSwgNCwgMSwgMjE5LCAxNjcsIDgxLCA2LCAxLCAyMTcsIDQyLCA4MSwgCisgICAgNCwgMSwgMjE3LCA0MiwgODEsIDYsIDEsIDIxNCwgMjI5LCA4MSwgNCwgMSwgMjE0LCAyMjksIDgxLCA2LCAxLCAyNDQsIAorICAgIDEyOSwgODEsIDQsIDEsIDI0NCwgMTI5LCA4MSwgNiwgMSwgMjM0LCAxMTgsIDgxLCA0LCAxLCAyMzQsIDExOCwgODEsIDYsIAorICAgIDEsIDIyNCwgMTY0LCA4MSwgNCwgMSwgMjI0LCAxNjQsIDgxLCA2LCAxLCAyMjYsIDE4MiwgODEsIDQsIDEsIDIyNiwgMTgyLCAKKyAgICA4MSwgNiwgMSwgMjQ4LCA1LCAyNTQsIDE3OSwgODEsIDQsIDEsIDI0OCwgNSwgMjU0LCAxNzksIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDI1NCwgMjA1LCA4MSwgNCwgMSwgNTUsIDgxLCAyNTQsIDIwNSwgODEsIDYsIDEsIDI0OSwgMTIzLCAyNDUsIDIwMiwgODEsIAorICAgIDQsIDEsIDI0OSwgMTIzLCAyNDUsIDIwMiwgODEsIDYsIDEsIDI0OCwgNSwgMjM0LCAyMzMsIDgxLCA0LCAxLCAyNDgsIDUsIAorICAgIDIzNCwgMjMzLCA4MSwgNiwgMSwgMjQ4LCA1LCAyMjgsIDIzOCwgODEsIDQsIDEsIDI0OCwgNSwgMjI4LCAyMzgsIDgxLCA2LCAKKyAgICAxLCAyNDksIDEyMywgMjI4LCAyMzgsIDgxLCA0LCAxLCAyNDksIDEyMywgMjI4LCAyMzgsIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDIyNiwgMTgyLCA4MSwgNCwgMSwgNTUsIDgxLCAyMjYsIDE4MiwgODEsIDYsIDEsIDIyMSwgMjQ4LCA4MSwgNCwgMSwgMjIxLCAKKyAgICAyNDgsIDgxLCA2LCAxLCAyNDksIDEzNiwgMjIwLCA1NywgODEsIDQsIDEsIDI0OSwgMTM2LCAyMjAsIDU3LCA4MSwgNiwgMSwgCisgICAgNTUsIDgxLCAyMjAsIDU3LCA4MSwgNCwgMSwgNTUsIDgxLCAyMjAsIDU3LCA4MSwgNiwgMSwgNTUsIDgxLCAyNDUsIDgzLCAKKyAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNDUsIDgzLCA4MSwgNiwgMSwgMjU0LCAxOTEsIDIzNCwgMTIzLCA4MSwgNCwgMSwgMjU0LCAKKyAgICAxOTEsIDIzNCwgMTIzLCA4MSwgNiwgMSwgMjQ4LCA1LCAyNDEsIDUyLCA4MSwgNCwgMSwgMjQ4LCA1LCAyNDEsIDUyLCA4MSwgCisgICAgNiwgMSwgNTUsIDgxLCAyNDEsIDUyLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDUyLCA4MSwgNiwgMSwgNTUsIDgxLCAxNjIsIAorICAgIDgxLCA0LCAxLCA1NSwgODEsIDE2MiwgODEsIDYsIDEsIDIzMywgMTU0LCAxNjIsIDgxLCA0LCAxLCAyMzMsIDE1NCwgMTYyLCAKKyAgICA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDIyNCwgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCAyMjQsIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDI0MiwgMiwgODEsIDQsIDEsIDU1LCA4MSwgMjQyLCAyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDMsIDEwOSwgODEsIDQsIDEsIAorICAgIDU1LCA4MSwgMjQzLCAxMDksIDgxLCA2LCAxLCA1NSwgODEsIDI0NywgMTcxLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDcsIDE3MSwgCisgICAgODEsIDYsIDEsIDU1LCA4MSwgMjIwLCAyNCwgODEsIDQsIDEsIDU1LCA4MSwgMjIwLCAyNCwgODEsIDYsIDEsIDU1LCAyMjcsIAorICAgIDIxMiwgMjIwLCAyNCwgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjIwLCAyNCwgODEsIDYsIDEsIDU1LCAyMjcsIDIxMiwgCisgICAgMjI5LCAzMiwgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjI5LCAzMiwgODEsIDYsIDEsIDU1LCAyMjcsIDIxMiwgMjI3LCAKKyAgICAxNTIsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMTIsIDIyNywgMTUyLCA4MSwgNiwgMSwgNTUsIDIyNywgMjEyLCAyMTIsIDM3LCAKKyAgICA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMTIsIDM3LCA4MSwgMTYsIDIzNCwgMjUyLCA4MSwgMTYsIDIzMCwgMjM2LCAyMjIsIAorICAgIDIxMywgODEsIDE2LCAyMjUsIDExMiwgMjIyLCAyMTMsIDgxLCAxNiwgMjE4LCAxNDksIDgxLCAxNiwgMjE3LCA0MywgMjIyLCAKKyAgICAyMTMsIDgxLCAxNiwgMjM0LCAxMTksIDIyMiwgMjEzLCA4MSwgMTYsIDIyMCwgMjUsIDIxOSwgMTY3LCA4MSwgNiwgMSwgCisgICAgMjQ5LCAxMjMsIDIyMCwgNTcsIDgxLCA0LCAxLCAyNDksIDEyMywgMjIwLCA1NywgODEsIDYsIDEsIDI0OSwgMTIzLCAyNDMsIAorICAgIDEwOSwgODEsIDQsIDEsIDI0OSwgMTIzLCAyNDMsIDEwOSwgODEsIDM4LCAyMjgsIDIzOSwgNDgsIDgxLCAzOCwgMjE4LCAKKyAgICAyNDksIDI1MywgMjMyLCA4MSwgMzgsIDIxOCwgMjQ5LCAyMzMsIDI3LCA4MSwgNiwgMSwgMjUxLCAyMDcsIDIzNCwgMTIzLCAKKyAgICA4MSwgNCwgMSwgMjUxLCAyMDcsIDIzNCwgMTIzLCA4MSwgNTUsIDIyNywgMjEyLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDgxLCAKKyAgICA1NSwgMjI3LCAyMTIsIDI0NywgMjA1LCAyMjQsIDE2LCA3OSwgODEsIDU1LCAyMjcsIDIxMiwgMjM1LCAyNDQsIDIyNCwgMTYsIAorICAgIDc5LCA4MSwgNTUsIDIyNywgMjEyLCAyMTMsIDI0MSwgMjQ3LCAxODAsIDgxLCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIDgxLCAKKyAgICAyNDMsIDIzNiwgMjE4LCAxMzEsIDgxLCAyMzAsIDEyOSwgMjQ3LCAxODAsIDk4LCA0LCAxLCAyNTQsIDEzMSwgOTgsIDQsIDEsIAorICAgIDI1MiwgMTYwLCA5OCwgNCwgMSwgMjQzLCAxMTMsIDk4LCA0LCAxLCAyNDcsIDEzNiwgOTgsIDQsIDEsIDI0NSwgMTU4LCA5OCwgCisgICAgNCwgMSwgMjEzLCAxNjAsIDk4LCA0LCAxLCAyMTAsIDg5LCA5OCwgNCwgMSwgMjE3LCA2MSwgOTgsIDQsIDEsIDIzNiwgNiwgCisgICAgOTgsIDQsIDEsIDIzNCwgMjQwLCA5OCwgNCwgMSwgMjMzLCA4NywgOTgsIDQsIDEsIDIzMSwgMTkwLCA5OCwgNCwgMSwgMjI5LCAKKyAgICAyMDAsIDk4LCA0LCAxLCAyMjYsIDIwMCwgOTgsIDQsIDEsIDIyNiwgMjEsIDk4LCA0LCAxLCAyMTAsIDc4LCA5OCwgNCwgMSwgCisgICAgMjIzLCAxNzQsIDk4LCA0LCAxLCAyMjEsIDI0NSwgOTgsIDQsIDEsIDIxNywgNTEsIDk4LCA0LCAxLCAyMTQsIDE5MCwgOTgsIAorICAgIDQsIDEsIDIyNSwgMTQzLCA5OCwgNCwgMSwgMjM0LCAxMjcsIDk4LCA0LCAxLCAyNDIsIDI0OCwgOTgsIDQsIDEsIDIyNCwgCisgICAgNzYsIDk4LCA0LCAxLCAyMjAsIDIyLCA5OCwgNCwgMSwgMjUwLCAxMDUsIDk4LCA0LCAxLCAyNTEsIDE1LCA5OCwgNCwgMSwgCisgICAgMjM1LCAxMDYsIDk4LCA0LCAxLCAyNTAsIDQ4LCA5OCwgNCwgMSwgMjUwLCAxNTEsIDk4LCA0LCAxLCAyMTEsIDE2MywgOTgsIAorICAgIDQsIDEsIDIzNSwgMTE3LCA5OCwgNCwgMSwgMjQyLCA1MCwgOTgsIDQsIDEsIDI0MSwgMjQ1LCA5OCwgNCwgMSwgMjQxLCAKKyAgICAxODIsIDk4LCA0LCAxLCAyMTIsIDIyLCA5OCwgNCwgMSwgMjQyLCAxMSwgOTgsIDQsIDEsIDI0MSwgNzIsIDk4LCA0LCAxLCAKKyAgICAyMTAsIDI0NiwgOTgsIDQsIDEsIDI1NCwgMjQxLCAyMTYsIDEwOSwgMSwgMTkyLCAyMTYsIDEwOSwgMSwgMjExLCA5OSwgCisgICAgMjE2LCAxMDksIDEsIDIxMSwgOTgsIDIxNiwgMTA5LCAxLCAyMTEsIDg4LCAyMTYsIDEwOSwgMSwgMjExLCA4NiwgMjE2LCAKKyAgICAxMDksIDEsIDI1MiwgNDAsIDI1NSwgMjUsIDIxMSwgODEsIDIxNiwgMTA5LCAxLCAyMTEsIDgxLCAyMTYsIDEwOSwgMSwgCisgICAgMjExLCA5NiwgMjE2LCAxMDksIDEsIDIxMSwgOTMsIDIxNiwgMTA5LCAxLCAyMTEsIDk1LCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA5NCwgMjE2LCAxMDksIDEsIDIxMSwgMTIsIDIxNiwgMTA5LCAxLCAyMTEsIDkwLCAyMTYsIDEwOSwgMSwgMjExLCA3OSwgCisgICAgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDc5LCAyMTYsIDEwOSwgMSwgMjExLCA3NiwgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgODQsIDIxNiwgMTA5LCAxLCAyNTIsIDQwLCAyNTUsIDI1LCAyMTEsIDg0LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgCisgICAgODQsIDIxNiwgMTA5LCAxLCAyMTEsIDgzLCAyMTYsIDEwOSwgMSwgMjExLCAxMDMsIDIxNiwgMTA5LCAxLCAyMTEsIDc3LCAKKyAgICAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNzcsIDIxNiwgMTA5LCAxLCAyMTEsIDY2LCAyMTYsIDEwOSwgMSwgMjE1LCAKKyAgICAxMTYsIDIxMSwgNjYsIDIxNiwgMTA5LCAxLCAyMTEsIDgsIDIxNiwgMTA5LCAxLCAyMTEsIDQ5LCAyMTYsIDEwOSwgMSwgCisgICAgMjU0LCAyMTYsIDIxMSwgNDksIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA0OSwgMjE2LCAxMDksIDEsIDIxMSwgNzUsIAorICAgIDIxNiwgMTA5LCAxLCAyMTEsIDc0LCAyMTYsIDEwOSwgMSwgMjExLCA3MSwgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIAorICAgIDg1LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNjksIDIxNiwgMTA5LCAxLCAyMTEsIDY3LCAyMTYsIDEwOSwgMSwgCisgICAgMjEwLCAyMTIsIDIxNiwgMTA5LCAxLCAyMTEsIDY0LCAyMTYsIDEwOSwgMSwgMjExLCA2MywgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgODcsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA4NywgMjE2LCAxMDksIDEsIDI1MywgMTcxLCAyMTEsIDg3LCAyMTYsIAorICAgIDEwOSwgMSwgMjExLCA2MiwgMjE2LCAxMDksIDEsIDIxMSwgNjAsIDIxNiwgMTA5LCAxLCAyMTEsIDYxLCAyMTYsIDEwOSwgMSwgCisgICAgMjExLCA1OSwgMjE2LCAxMDksIDEsIDIxMSwgNTgsIDIxNiwgMTA5LCAxLCAyMTEsIDk3LCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA1NiwgMjE2LCAxMDksIDEsIDIxMSwgNTQsIDIxNiwgMTA5LCAxLCAyMTEsIDUzLCAyMTYsIDEwOSwgMSwgMjExLCA1MiwgCisgICAgMjE2LCAxMDksIDEsIDIxMSwgNTAsIDIxNiwgMTA5LCAxLCAyMTcsIDM1LCAyMTEsIDUwLCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA0OCwgMjE2LCAxMDksIDEsIDIxMSwgNDcsIDIxNiwgMTA5LCAxLCAyMTAsIDI0NCwgMjE2LCAxMDksIDU4LCAxLCAyMzMsIAorICAgIDEzMiwgNzksIDIxNiwgMTA5LCAyMjAsIDE0MCwgNzksIDIxNiwgMTA5LCAxMTcsIDIzNSwgNjksIDI5LCAzLCAyMzIsIDE2MSwgCisgICAgMjksIDMsIDIzMCwgMTY1LCAyOSwgMywgMjIyLCAyMTEsIDI5LCAzLCAyMTksIDU5LCAyOSwgMywgMjIwLCA4LCAyOSwgMywgCisgICAgMjUxLCAyMTIsIDI5LCAzLCAyMTYsIDQyLCAyOSwgMywgMjQ5LCAyNDUsIDI5LCAzLCAyMjgsIDc3LCAyOSwgMywgMjI3LCAKKyAgICAxMzcsIDI5LCAzLCAyNDIsIDE4NywgMjI3LCA0LCAyOSwgMywgMjEwLCAyMiwgMjksIDMsIDI0NywgMTUxLCAyOSwgMywgCisgICAgMjQ4LCAxMTIsIDI5LCAzLCAyMzUsIDczLCAyOSwgMywgMjE2LCAxNTYsIDI5LCAzLCAyNTAsIDkzLCAyOSwgMywgMjI1LCAKKyAgICAxMjMsIDI5LCAzLCAyMjUsIDE4LCAyOSwgMywgMjQzLCA2LCAyOSwgMywgMjQzLCAyLCAyOSwgMywgMjQzLCAzLCAyOSwgMywgCisgICAgMjQzLCA0LCAyOSwgMywgMjE4LCAyMjUsIDI5LCAzLCAyMTgsIDE4MSwgMjksIDMsIDIxOCwgMTk0LCAyOSwgMywgMjE4LCAKKyAgICAyMjQsIDI5LCAzLCAyMTgsIDE5OCwgMjksIDMsIDIxOCwgMTk5LCAyOSwgMywgMjE4LCAxODYsIDI5LCAzLCAyNTAsIDIyMSwgCisgICAgMjksIDMsIDI1MCwgMjAwLCAyOSwgMywgMjUwLCAyMDIsIDI5LCAzLCAyNTAsIDIyMCwgMjksIDMsIDI1MCwgMjE4LCAyOSwgCisgICAgMywgMjUwLCAyMTksIDI5LCAzLCAyNTAsIDIwMSwgMjksIDMsIDIwOSwgMjQzLCAyOSwgMywgMjA5LCAyMjEsIDI5LCAzLCAKKyAgICAyMDksIDIzNCwgMjksIDMsIDIwOSwgMjQyLCAyOSwgMywgMjA5LCAyMzcsIDI5LCAzLCAyMDksIDIzOCwgMjksIDMsIDIwOSwgCisgICAgMjI2LCAyOSwgMywgMjUwLCAyMTYsIDI5LCAzLCAyNTAsIDIwMywgMjksIDMsIDI1MCwgMjA1LCAyOSwgMywgMjUwLCAyMTUsIAorICAgIDI5LCAzLCAyNTAsIDIxMywgMjksIDMsIDI1MCwgMjE0LCAyOSwgMywgMjUwLCAyMDQsIDI5LCAzLCAyMjMsIDIzOSwgMjksIAorICAgIDMsIDIyMywgMjI5LCAyOSwgMywgMjIzLCAyMzUsIDI5LCAzLCAyMjMsIDIzOCwgMjksIDMsIDIyMywgMjM2LCAyOSwgMywgCisgICAgMjIzLCAyMzcsIDI5LCAzLCAyMjMsIDIzNCwgMjksIDMsIDIzMywgMTY1LCAyOSwgMywgMjMzLCAxNTcsIDI5LCAzLCAyMzMsIAorICAgIDE2MCwgMjksIDMsIDIzMywgMTY0LCAyOSwgMywgMjMzLCAxNjEsIDI5LCAzLCAyMzMsIDE2MiwgMjksIDMsIDIzMywgMTU4LCAKKyAgICAyOSwgMywgMjExLCAxMzAsIDI5LCAzLCAyMTEsIDEyMCwgMjksIDMsIDIxMSwgMTI2LCAyOSwgMywgMjExLCAxMjksIDI5LCAKKyAgICAzLCAyMTEsIDEyNywgMjksIDMsIDIxMSwgMTI4LCAyOSwgMywgMjExLCAxMjUsIDI5LCAzLCAyNDIsIDc4LCAyOSwgMywgCisgICAgMjQyLCA2OSwgMjksIDMsIDI0MiwgNzIsIDI5LCAzLCAyNDIsIDc3LCAyOSwgMywgMjQyLCA3NCwgMjksIDMsIDI0MiwgNzUsIAorICAgIDI5LCAzLCAyNDIsIDcxLCAzOCwgMzMsIDEsIDI1MiwgODMsIDM4LCAzMywgMSwgMjEzLCAyNTUsIDM4LCAzMywgMSwgMjQyLCAKKyAgICAyNDMsIDM4LCAzMywgMSwgMjQ4LCA5OCwgMzgsIDMzLCAxLCAyMTAsIDc0LCAzOCwgMzMsIDEsIDIxMCwgOTQsIDM4LCAzMywgCisgICAgMSwgMTc2LCAzOCwgMzMsIDEsIDI0NSwgMTgyLCAzOCwgMzMsIDEsIDI0NSwgMTY3LCAzOCwgMzMsIDEsIDI0NSwgMTU4LCAKKyAgICAzOCwgMzMsIDEsIDc4LCAzOCwgMzMsIDEsIDIyNSwgMjI0LCAzOCwgMzMsIDEsIDI0NSwgMTAwLCAzOCwgMzMsIDEsIDI0NSwgCisgICAgOTAsIDM4LCAzMywgMSwgMjE3LCAyMywgMzgsIDMzLCAxLCAxNjIsIDM4LCAzMywgMSwgMjE1LCAxNzksIDM4LCAzMywgMSwgCisgICAgMjUwLCAxMzksIDM4LCAzMywgMSwgMjIwLCAxMDQsIDM4LCAzMywgMSwgMjIwLCA2NywgMzgsIDMzLCAxLCAyNDQsIDkwLCAKKyAgICAzOCwgMzMsIDEsIDI0NSwgODksIDM4LCAzMywgMSwgNjEsIDM4LCAzMywgMSwgMjM2LCA2NywgMzgsIDMzLCAxLCAyNDcsIAorICAgIDE2OSwgMzgsIDMzLCAxLCAyMzAsIDE0NSwgMjE0LCAyMDUsIDM4LCAzMywgMSwgMjExLCA1OSwgMzgsIDMzLCAxLCAyMTAsIAorICAgIDIxMiwgMzgsIDMzLCAxLCAyMzUsIDE5MCwgNjEsIDM4LCAzMywgMSwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzOCwgMzMsIDEsIAorICAgIDI1MiwgMSwgMjEwLCAxODMsIDM4LCAzMywgMSwgMjM1LCAxOTAsIDI1MiwgMSwgMjEwLCAxODMsIDQ0LCAyNTQsIDExOCwgCisgICAgMjE4LCA2MSwgMjMxLCAxNTksIDQ0LCAyNTQsIDExOCwgMjQ2LCAxMjYsIDIxOCwgNjEsIDIzMSwgMTU5LCA0MywgMjE4LCAKKyAgICA2MSwgMTI3LCA0NCwgMjE4LCA2MSwgMTI3LCA0MywgMjQ2LCAxMjYsIDIxOCwgNjEsIDEyNywgNDQsIDI0NiwgMTI2LCAyMTgsIAorICAgIDYxLCAxMjcsIDIyMywgMTYwLCAyMzUsIDIwOSwgMjMxLCAxNTksIDIyMywgMTYwLCAyNDYsIDEyNiwgMjM1LCAyMDksIDIzMSwgCisgICAgMTU5LCAyNDYsIDEyNiwgMjE1LCAyNDIsIDIzMSwgMTU5LCA0MywgMjE1LCAyNDIsIDEyNywgNDQsIDIxNSwgMjQyLCAxMjcsIAorICAgIDIyMywgMTYwLCAyMTgsIDIzNiwgNDMsIDIyMywgMTYwLCAyMjYsIDIwMiwgMTI3LCA0NCwgMjIzLCAxNjAsIDIyNiwgMjAyLCAKKyAgICAxMjcsIDI0NSwgMjE4LCAyNDksIDE2NiwgMjI2LCAxNywgMjQ0LCAzMCwgMjI2LCAxNywgMjIzLCA1MiwgMjQ0LCAzMCwgCisgICAgMjI2LCAxNywgMjQwLCAxNzIsIDI0NiwgMTI2LCAyMjYsIDI1NSwgMjQ2LCAxMTIsIDI1NCwgMTI3LCAyMTQsIDE1MywgMjU0LCAKKyAgICAxMjcsIDI0NiwgMTI2LCAyMjIsIDI1MCwgMjU0LCAxMTcsIDUyLCAyMjYsIDI1MiwgMjQwLCAxNzUsIDIzNSwgMjAwLCAyMzUsIAorICAgIDIwOCwgMjI2LCA2MywgMjUxLCAxNjIsIDI0MCwgMTc2LCAyLCAyNDgsIDksIDIxNiwgOTAsIDIsIDIyMiwgMjM3LCA0OCwgCisgICAgNDMsIDEyMSwgMjI2LCA5LCAxMjcsIDQ0LCAxMjEsIDIyNiwgOSwgMTI3LCAyMTYsIDkwLCAyLCA1OSwgNDgsIDIxNiwgOTAsIAorICAgIDIsIDU5LCA1MSwgNDMsIDY3LCAyNTIsIDE0OSwgMiwgMjI0LCAxMCwgNDQsIDY3LCAyNTIsIDE0OSwgMiwgMjI0LCAxMCwgCisgICAgMjE2LCAxNSwgNDMsIDE2MywgMTI3LCAyMTYsIDE1LCA0NCwgMTYzLCAxMjcsIDI1MSwgMTgzLCA0MywgMTYzLCAxMjcsIAorICAgIDI1MSwgMTgzLCA0NCwgMTYzLCAxMjcsIDQzLCAyMTksIDE4OSwgMTA0LCAxMjcsIDQ0LCAyMTksIDE4OSwgMTA0LCAxMjcsIAorICAgIDQzLCA1MiwgMjI2LCA3LCA0NCwgNTIsIDIyNiwgNywgMTEzLCAxNzAsIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDEyMywgCisgICAgNTksIDExNSwgMTEzLCAxNzAsIDIyNCwgMTQzLCA5MiwgMjQ0LCAxOSwgNTksIDIyNCwgMTQzLCAyNDQsIDg5LCA1OSwgNzksIAorICAgIDIyMywgNTIsIDIyNCwgMTYsIDc5LCA2NywgMTg0LCAyMjIsIDIzNywgMjI1LCAxMywgMjExLCAyMDksIDIyMCwgMTQwLCAKKyAgICAyMzAsIDIyOSwgMjQ3LCAxMjgsIDIxNSwgOTQsIDI0OSwgMjI3LCAyMjMsIDE2MCwgMjQ3LCAxMjgsIDIyMywgMTYwLCAyNDksIAorICAgIDIyNywgMjE1LCA5NCwgMjIwLCAxNTIsIDI0OCwgMjE0LCAyLCA0MywgMjQyLCAxMTUsIDI0OCwgMjE0LCAyLCA0NCwgMjQyLCAKKyAgICAxMTUsIDIxNSwgOTQsIDI0OCwgMjEzLCAyMTYsIDE1LCAxNjMsIDIyMSwgMTc1LCA1MCwgMjE1LCA1OSwgMjQ4LCAxNjQsIAorICAgIDIxNiwgMTQ0LCAyNDgsIDE2NCwgMTAsIDM0LCAyMjMsIDc5LCAxMCwgMzQsIDI1MCwgMTgsIDEwLCAzNCwgMjIxLCAxNzgsIAorICAgIDExMSwgMTAsIDM0LCAyMjEsIDE3OCwgMTA1LCAxMCwgMzQsIDIyMSwgMTc4LCAxNTgsIDEwLCAzNCwgMjI1LCAxNzAsIDEwLCAKKyAgICAzNCwgMjUxLCAxNzEsIDEwLCAzNCwgMjE3LCA5MywgMTAsIDM0LCAyMzQsIDM5LCAxMTEsIDEwLCAzNCwgMjM0LCAzOSwgCisgICAgMTA1LCAxMCwgMzQsIDI0NywgMTc4LCAxMCwgMzQsIDIyMSwgMTgxLCAxMCwgMzQsIDQsIDExMSwgMTAsIDM0LCA0LCAxMDUsIAorICAgIDEwLCAzNCwgMjMzLCAxMDMsIDExMSwgMTAsIDM0LCAyMzMsIDEwMywgMTA1LCAxMCwgMzQsIDIzMywgMTAzLCAxNTgsIDEwLCAKKyAgICAzNCwgMjMzLCAxMDMsIDE2MSwgMTAsIDM0LCAyMTksIDcwLCAxMCwgMzQsIDIxNiwgMTQ2LCAxMCwgMzQsIDIxOSwgNjgsIAorICAgIDExMSwgMTAsIDM0LCAyMTksIDY4LCAxMDUsIDEwLCAzNCwgMjQxLCAyMzUsIDExMSwgMTAsIDM0LCAyNDEsIDIzNSwgMTA1LCAKKyAgICAxMCwgMzQsIDI0MiwgMjIsIDEwLCAzNCwgMjIzLCAxNTAsIDEwLCAzNCwgMjUwLCA5MCwgMTAsIDM0LCAyMTgsIDM4LCAxMCwgCisgICAgMzQsIDIzMCwgMTMzLCAxMCwgMzQsIDI0OCwgOTYsIDEwLCAzNCwgMjMwLCAxMjUsIDEwLCAzNCwgMjUwLCAzMywgMTAsIDM0LCAKKyAgICAyMTIsIDQxLCAxMTEsIDEwLCAzNCwgMjEyLCA0MSwgMTA1LCAxMCwgMzQsIDI0NCwgMTA0LCAxMCwgMzQsIDIyNSwgMjM2LCAKKyAgICAxMTEsIDEwLCAzNCwgMjI1LCAyMzYsIDEwNSwgMTAsIDM0LCAyMTksIDE2MiwgMTYzLCAyMTUsIDIzNywgMjE1LCAxODksIAorICAgIDEwLCAzNCwgMjQ5LCAxNTMsIDEwLCAzNCwgMjQ3LCAxNDQsIDEwLCAzNCwgMjM1LCAxNDMsIDEwLCAzNCwgMjUxLCAyMDYsIAorICAgIDY0LCAyNTAsIDIsIDEwLCAzNCwgMjQ1LCAyMywgMTAsIDM0LCAyMTgsIDI1MSwgMTExLCAxMCwgMzQsIDIxOCwgMjUxLCAKKyAgICAxMDUsIDEwLCAzNCwgMjUyLCAxNjIsIDEwLCAzNCwgMjE5LCAxNjksIDEwLCAzNCwgMjUxLCA3MSwgMjE5LCAxNjksIDEwLCAKKyAgICAzNCwgMjI5LCA5NSwgMTExLCAxMCwgMzQsIDIyOSwgOTUsIDEwNSwgMTAsIDM0LCAyMjksIDk1LCAxNTgsIDEwLCAzNCwgCisgICAgMjI5LCA5NSwgMTYxLCAxMCwgMzQsIDIzMSwgNTEsIDEwLCAzNCwgMjIwLCA1OSwgMTAsIDM0LCAyMjMsIDE1NiwgMTAsIDM0LCAKKyAgICAyNDUsIDQ1LCAxMCwgMzQsIDIyNiwgMjEzLCAxMCwgMzQsIDI1MSwgMTQxLCAxMTEsIDEwLCAzNCwgMjUxLCAxNDEsIDEwNSwgCisgICAgMTAsIDM0LCAyMzEsIDkxLCAxMCwgMzQsIDIzMCwgMTI4LCAxMCwgMzQsIDI0MiwgMTQ3LCAxMTEsIDEwLCAzNCwgMjQyLCAKKyAgICAxNDcsIDEwNSwgMTAsIDM0LCAyNDIsIDE0NywgMTU4LCAxMCwgMzQsIDIxNiwgMTA3LCAxMCwgMzQsIDI1MCwgMSwgMTAsIAorICAgIDM0LCAyMTIsIDksIDExMSwgMTAsIDM0LCAyMTIsIDksIDEwNSwgMTAsIDM0LCAyNTEsIDcxLCAyMjEsIDE3MiwgMTAsIDM0LCAKKyAgICAyMTksIDE2MiwgMjQwLCAyNTUsIDEwLCAzNCwgMjQwLCAyNTUsIDEwLCAzNCwgMjUxLCA3MSwgMjE5LCA0LCAxMCwgMzQsIAorICAgIDI1MSwgNzEsIDIyMCwgNTQsIDEwLCAzNCwgMjQ0LCA0MCwgMTAsIDM0LCAyNTEsIDcxLCAyNTAsIDIzNiwgMTAsIDM0LCAKKyAgICAyMTksIDE2MiwgMjEyLCA1NywgMTAsIDM0LCAyMTIsIDU4LCAxMTEsIDEwLCAzNCwgMjEyLCA1OCwgMTA1LCAxMCwgMzQsIAorICAgIDI1MCwgMzUsIDEwLCAzNCwgMjUxLCA3MSwgMjQyLCAxNzMsIDEwLCAzNCwgMjAwLCAxMTEsIDEwLCAzNCwgMjAwLCAxMDUsIAorICAgIDEwLCAzNCwgMjUxLCA3MSwgMjMyLCAxNDMsIDEwLCAzNCwgMjUxLCA3MSwgMjQzLCA5NSwgMTAsIDM0LCAyMzAsIDEyNCwgCisgICAgMTExLCAxMCwgMzQsIDIzMCwgMTI0LCAxMDUsIDEwLCAzNCwgMjIzLCAxNjIsIDEwLCAzNCwgMjUxLCAyMTUsIDEwLCAzNCwgCisgICAgMjUxLCA3MSwgMjE3LCA1NywgMjMzLCA1OCwgMTAsIDM0LCAyNTEsIDcxLCAyMzMsIDU5LCAxMCwgMzQsIDI1MSwgNzEsIAorICAgIDIxMSwgMjM5LCAxMCwgMzQsIDI1MSwgNzEsIDI0NCwgNTQsIDEwLCAzNCwgMjQ1LCAyMjYsIDExMSwgMTAsIDM0LCAyNDUsIAorICAgIDIyNiwgMTA1LCAxMCwgMzQsIDI0NSwgMjI2LCAxNTgsIDEwLCAzNCwgMjUxLCA3MSwgMjQ1LCAyMjUsIDEwLCAzNCwgMjQxLCAKKyAgICAyNDIsIDEwLCAzNCwgMjUxLCA3MSwgMjQwLCAyNTIsIDEwLCAzNCwgMjUxLCAyMDIsIDEwLCAzNCwgMjQyLCAyMjksIDEwLCAKKyAgICAzNCwgMjUxLCA3MSwgMjQ0LCA5OCwgMTAsIDM0LCAyNTEsIDcxLCAyNTEsIDI0NSwgMTAsIDM0LCAyNTEsIDcxLCAyMjIsIDMsIAorICAgIDEwLCAzNCwgMjE5LCAxNjIsIDIxMiwgMiwgMTAsIDM0LCAyMTksIDE2MiwgMjExLCA0MSwgMTAsIDM0LCAyNTEsIDcxLCAKKyAgICAyNDMsIDI1MiwgMTAsIDM0LCAyMzUsIDE0OSwgMjQ1LCA0OSwgMTAsIDM0LCAyNTEsIDcxLCAyNDUsIDQ5LCAxMCwgMzQsIAorICAgIDIzNSwgMTQ5LCAyMTYsIDE2LCAxMCwgMzQsIDI1MSwgNzEsIDIxNiwgMTYsIDEwLCAzNCwgMjM1LCAxNDksIDI0NiwgMTA0LCAKKyAgICAxMCwgMzQsIDI1MSwgNzEsIDI0NiwgMTA0LCAxMCwgMzQsIDIxNSwgOTEsIDEwLCAzNCwgMjM1LCAxNDksIDIxNSwgOTEsIAorICAgIDEwLCAzNCwgMjUxLCA3MSwgMjE1LCA5MSwgNjAsIDM0LCAxMTEsIDYwLCAzNCwgMjMyLCAyMTksIDYwLCAzNCwgMjQ3LCAKKyAgICAxMjgsIDYwLCAzNCwgMjE5LCA5NywgNjAsIDM0LCAyMjEsIDE3NywgNjAsIDM0LCAxMDMsIDYwLCAzNCwgMTA1LCA2MCwgMzQsIAorICAgIDIzMiwgMjQzLCA2MCwgMzQsIDIzMSwgMTkwLCA2MCwgMzQsIDIzMywgMzksIDYwLCAzNCwgMjQ1LCAxMzcsIDYwLCAzNCwgCisgICAgMTk2LCA2MCwgMzQsIDEyNCwgMjUxLCAxNzEsIDYwLCAzNCwgMjQ5LCAxNTUsIDYwLCAzNCwgMjQwLCAxMTgsIDYwLCAzNCwgCisgICAgMjE3LCA5MywgNjAsIDM0LCAyMDQsIDI1MSwgMTcxLCA2MCwgMzQsIDIzNCwgMzgsIDYwLCAzNCwgMjI0LCAyMjcsIDYwLCAKKyAgICAzNCwgMjExLCAyMDIsIDYwLCAzNCwgMjE4LCAyNDUsIDYwLCAzNCwgNDQsIDIwNCwgMjUxLCAxNzEsIDYwLCAzNCwgMjQxLCAKKyAgICAxODMsIDI0NSwgMTUzLCA2MCwgMzQsIDIxNiwgMjQ4LCA2MCwgMzQsIDI0NywgMTc4LCA2MCwgMzQsIDIyMSwgMTgxLCA2MCwgCisgICAgMzQsIDI1MCwgMTgsIDYwLCAzNCwgMjI0LCAxODUsIDYwLCAzNCwgMjU0LCAyMjQsIDYwLCAzNCwgMjMwLCAxMTUsIDYwLCAKKyAgICAzNCwgMjQ1LCAxNTMsIDYwLCAzNCwgMjQ1LCAyMzEsIDYwLCAzNCwgMjIxLCAyMDIsIDYwLCAzNCwgMjQyLCAxODEsIDYwLCAKKyAgICAzNCwgMjQyLCAxODIsIDIxOSwgODMsIDYwLCAzNCwgMjQ1LCA0OCwgNjAsIDM0LCAyNTIsIDAsIDYwLCAzNCwgMjExLCAyMjEsIAorICAgIDYwLCAzNCwgMjUwLCAxMDksIDYwLCAzNCwgMjIyLCAxOTgsIDYwLCAzNCwgMjM2LCAyLCA2MCwgMzQsIDIxOSwgODEsIDYwLCAKKyAgICAzNCwgMjMzLCAxMDIsIDYwLCAzNCwgMjQ5LCAxNjQsIDYwLCAzNCwgMjE4LCAyMzksIDYwLCAzNCwgMjMwLCAxMjAsIDYwLCAKKyAgICAzNCwgMjIyLCAyMjcsIDYwLCAzNCwgMjExLCAyMDYsIDYwLCAzNCwgMjI2LCAxOTQsIDYwLCAzNCwgMjE1LCA5OCwgNjAsIAorICAgIDM0LCAyNDYsIDg4LCA2MCwgMzQsIDIxOSwgMjUzLCAyMTYsIDE0NiwgNjAsIDM0LCAyNDYsIDEyNiwgMjUwLCAxOCwgNjAsIAorICAgIDM0LCAyMDAsIDIxOCwgMTEwLCA2MCwgMzQsIDExMywgMjQyLCAxNywgNjAsIDM0LCAyMjAsIDIsIDYwLCAzNCwgMjUxLCAKKyAgICAxNzcsIDYwLCAzNCwgMjE5LCA2NywgNjAsIDM0LCAyNTEsIDE0NSwgNjAsIDM0LCAyMTgsIDE0MCwgNjAsIDM0LCAyNDEsIAorICAgIDIzNCwgNjAsIDM0LCAyNDIsIDM1LCA2MCwgMzQsIDI0NywgMTMxLCA2MCwgMzQsIDI0MiwgMjIsIDYwLCAzNCwgMjUxLCAKKyAgICAxNjIsIDYwLCAzNCwgMjIzLCAxNTAsIDYwLCAzNCwgMjIxLCAxODksIDYwLCAzNCwgMjQ3LCAyMDcsIDYwLCAzNCwgMjUzLCAKKyAgICAxNzYsIDYwLCAzNCwgMjE4LCAyMzYsIDYwLCAzNCwgMjI4LCA1NiwgNjAsIDM0LCAyMTgsIDM4LCA2MCwgMzQsIDIyMSwgCisgICAgMjEzLCA2MCwgMzQsIDIzMCwgMTMzLCA2MCwgMzQsIDIxNSwgMjM2LCA2MCwgMzQsIDIzMywgMTI4LCA2MCwgMzQsIDIxOCwgCisgICAgMTMxLCA2MCwgMzQsIDI0OCwgOTYsIDYwLCAzNCwgMjEyLCAyMSwgNjAsIDM0LCAyNDcsIDE1NCwgMjI4LCA1NiwgNjAsIDM0LCAKKyAgICAyNDksIDIyMywgNjAsIDM0LCAyNDMsIDIyOSwgNjAsIDM0LCAyNTAsIDI5LCA2MCwgMzQsIDIxOCwgMTQ0LCA2MCwgMzQsIAorICAgIDIxMiwgNDAsIDYwLCAzNCwgMjQ0LCAxMDQsIDYwLCAzNCwgMjUwLCAyNiwgNjAsIDM0LCAyNDQsIDE2OSwgNjAsIDM0LCA1MiwgCisgICAgMjExLCAxNzgsIDYwLCAzNCwgMTYzLCAyMTUsIDIzNywgMjE1LCAxODksIDYwLCAzNCwgMjE5LCA5MSwgNjAsIDM0LCAyNDQsIAorICAgIDE3OSwgNjAsIDM0LCAyNDksIDE1MywgNjAsIDM0LCAyNDcsIDE0NCwgNjAsIDM0LCAyMjQsIDE4MiwgNjAsIDM0LCAyMzUsIAorICAgIDE0MywgNjAsIDM0LCAyMzEsIDcyLCA2MCwgMzQsIDIxNiwgODksIDYwLCAzNCwgMjE3LCAyNDYsIDYwLCAzNCwgMjMyLCAKKyAgICAyMzcsIDYwLCAzNCwgMjE0LCAxMzEsIDYwLCAzNCwgMjQ0LCAxMjgsIDYwLCAzNCwgMjUxLCAyMDYsIDY0LCAyNTAsIDIsIAorICAgIDYwLCAzNCwgMjE5LCAxOTAsIDYwLCAzNCwgMjQ2LCAxMjYsIDIxNiwgMjQzLCA2MCwgMzQsIDIxMSwgMjUzLCA2MCwgMzQsIAorICAgIDIxOSwgMTA1LCA2MCwgMzQsIDI0NywgMTk1LCA2MCwgMzQsIDI0NSwgMjMsIDYwLCAzNCwgMjE5LCA3LCA2MCwgMzQsIDc1LCAKKyAgICA2MCwgMzQsIDIxOCwgMTMzLCA2MCwgMzQsIDIxOCwgMjUwLCA2MCwgMzQsIDIxNiwgMCwgNjAsIDM0LCAyNDIsIDE1NCwgNjAsIAorICAgIDM0LCAyNTAsIDIyNiwgNjAsIDM0LCAyMTgsIDE2MiwgNjAsIDM0LCAyNTIsIDE2MiwgNjAsIDM0LCAyMjMsIDM0LCA2MCwgCisgICAgMzQsIDIxOSwgMTY5LCA2MCwgMzQsIDIzNSwgMTM2LCA2MCwgMzQsIDIyOSwgOTQsIDYwLCAzNCwgMjIwLCA1OSwgNjAsIDM0LCAKKyAgICAyNDQsIDE1NywgNjAsIDM0LCAyMjYsIDIxMywgNjAsIDM0LCAyNTQsIDEyNiwgNjAsIDM0LCAyMjUsIDMyLCA2MCwgMzQsIAorICAgIDI0NSwgMjM1LCA2MCwgMzQsIDI1MSwgMTQwLCA2MCwgMzQsIDIzMSwgOTEsIDYwLCAzNCwgMjMwLCAxODgsIDYwLCAzNCwgCisgICAgMjIwLCAxNTgsIDYwLCAzNCwgMjU0LCA0LCA2MCwgMzQsIDIzMCwgMTI4LCA2MCwgMzQsIDIxNiwgMjAsIDYwLCAzNCwgMjI2LCAKKyAgICAxNjksIDYwLCAzNCwgMjUxLCAyMDksIDYwLCAzNCwgMjE4LCAxMjksIDYwLCAzNCwgMjQ5LCAyMzMsIDYwLCAzNCwgMjQyLCAKKyAgICAxNDYsIDYwLCAzNCwgMjE2LCAxMDcsIDYwLCAzNCwgMjM1LCAyMjQsIDYwLCAzNCwgMjUxLCAyMTksIDYwLCAzNCwgMjEyLCAKKyAgICA1OCwgMjQ1LCAxNTMsIDYwLCAzNCwgMjUwLCAxLCA2MCwgMzQsIDIxMiwgOCwgNjAsIDM0LCAyMjEsIDE3MiwgNjAsIDM0LCAKKyAgICAyNDAsIDI1NSwgNjAsIDM0LCAyMTksIDQsIDYwLCAzNCwgMjE0LCAyMiwgNjAsIDM0LCAyNTIsIDgwLCA2MCwgMzQsIDIyNSwgCisgICAgNzYsIDYwLCAzNCwgMjUyLCAxODIsIDYwLCAzNCwgMjIwLCA1NCwgNjAsIDM0LCAyMjMsIDExMywgNjAsIDM0LCAyMjIsIAorICAgIDEyOCwgNjAsIDM0LCAyNDQsIDQwLCA2MCwgMzQsIDI1MSwgMjA4LCA2MCwgMzQsIDI1MCwgMjM2LCA2MCwgMzQsIDI1MSwgCisgICAgMjM0LCA2MCwgMzQsIDIzMCwgMTMwLCA2MCwgMzQsIDIxMiwgNTcsIDYwLCAzNCwgMjUwLCAzNSwgNjAsIDM0LCAyMTEsIAorICAgIDIzNiwgNjAsIDM0LCAyNDcsIDE4OCwgNjAsIDM0LCAyMTMsIDE2MSwgNjAsIDM0LCAyNDIsIDE3MywgNjAsIDM0LCAyMzIsIAorICAgIDE0MywgNjAsIDM0LCAyNDMsIDk1LCA2MCwgMzQsIDIzMCwgMTIzLCA2MCwgMzQsIDIxOSwgOTYsIDYwLCAzNCwgMjE5LCAKKyAgICAyNTMsIDIxNywgNzcsIDI1MSwgMjQ1LCA2MCwgMzQsIDIyMywgMTYyLCA2MCwgMzQsIDI1MSwgMjE1LCA2MCwgMzQsIDIxMSwgCisgICAgMTk3LCA2MCwgMzQsIDI0NCwgMTk4LCA2MCwgMzQsIDIzMywgNTgsIDYwLCAzNCwgMjE3LCA1NywgMjMzLCA1OCwgNjAsIDM0LCAKKyAgICAyMzMsIDU0LCA2MCwgMzQsIDIxOSwgMzIsIDYwLCAzNCwgMjMzLCA1OSwgNjAsIDM0LCAyMTEsIDIzOSwgNjAsIDM0LCAyNDQsIAorICAgIDU0LCA2MCwgMzQsIDI0NSwgMjI1LCA2MCwgMzQsIDI0MSwgMjQyLCA2MCwgMzQsIDI0NCwgOCwgNjAsIDM0LCAyNDAsIDI1MiwgCisgICAgNjAsIDM0LCAyNTEsIDIwMiwgNjAsIDM0LCAyMTcsIDY0LCA2MCwgMzQsIDI0MiwgNDEsIDYwLCAzNCwgMjQ0LCAxMjEsIDYwLCAKKyAgICAzNCwgMjIyLCAzMCwgMjExLCAyMzYsIDYwLCAzNCwgMjUwLCAyMjgsIDYwLCAzNCwgMjQyLCAyMjksIDYwLCAzNCwgMjQ0LCAKKyAgICA5OCwgNjAsIDM0LCAyNTEsIDI0NSwgNjAsIDM0LCAyMjIsIDMsIDYwLCAzNCwgMjQ4LCA4MiwgNjAsIDM0LCAyMTIsIDIsIAorICAgIDYwLCAzNCwgMjQxLCAyMTcsIDYwLCAzNCwgMjExLCA0MSwgNjAsIDM0LCAyMzAsIDE5NywgNjAsIDM0LCAyNTEsIDIyOSwgCisgICAgNjAsIDM0LCAyNDUsIDE2MywgNjAsIDM0LCAyNDMsIDI1MiwgNjAsIDM0LCAyMTUsIDIxMCwgNjAsIDM0LCAyNDYsIDkwLCAKKyAgICA2MCwgMzQsIDIyMywgMTQ0LCA2MCwgMzQsIDIyOCwgNTgsIDYwLCAzNCwgMjQ1LCA0OSwgNjAsIDM0LCAyMTYsIDE2LCA2MCwgCisgICAgMzQsIDI0NiwgMTA0LCA2MCwgMzQsIDIxNSwgOTEsIDYwLCAzNCwgMjQ0LCA1NiwgMTEwLCAyNDgsIDQ1LCAxMzUsIDQzLCAKKyAgICAyMTYsIDQzLCAyMjIsIDI1NCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDcyLCAyMTYsIDQzLCA1MSwgMTEwLCAyNDgsIDQ1LCAxMzUsIAorICAgIDQzLCAyMTYsIDQzLCAyMzAsIDIyOSwgMjIsIDIyMiwgMjU0LCAxMTAsIDI0OCwgNDUsIDEzNSwgNzIsIDIxNiwgNDMsIDIzMCwgCisgICAgMjI5LCAyMiwgNTEsIDExMCwgMjQ4LCA0NSwgMTM1LCAyNDMsIDIzNiwgMjE4LCAxMSwgMTEwLCAyNDgsIDQ1LCAxMzUsIAorICAgIDIxOCwgMTIsIDI0MywgMjUxLCA0OCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCA1MSwgMTEwLCAKKyAgICAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCAyMzMsIDUyLCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgCisgICAgMjQzLCAyNTEsIDIxNCwgMTYwLCAyMzMsIDUyLCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDIxNCwgCisgICAgMTYwLCAyMjIsIDI1NCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCAyMzIsIDExNCwgMjMzLCA1MiwgCisgICAgMTEwLCAyNDgsIDQ1LCAxMzUsIDIyNiwgMTI2LCAxMTAsIDIxOSwgMjAsIDExMCwgMjQ5LCAyMjcsIDExMCwgMjQzLCAyMzYsIAorICAgIDIxOCwgMTMxLCAyNDcsIDE4NSwgNzksIDIzNSwgMTM3LCAyMzUsIDI0MywgMjE4LCAxNjEsIDg3LCAxMTAsIDIzNSwgMTY0LCAKKyAgICA3OSwgMTEwLCAyNTAsIDQsIDc5LCAxMTAsIDU0LCAyMTAsIDg2LCA0MywgMjU0LCAxMTgsIDEyNywgNDQsIDI1NCwgMTE4LCAKKyAgICAxMjcsIDQzLCA1MiwgMjU0LCAxMTgsIDEyNywgNDQsIDUyLCAyNTQsIDExOCwgMTI3LCA0MywgMjQ5LCAxNjksIDEyNywgNDQsIAorICAgIDI0OSwgMTY5LCAxMjcsIDQzLCA3MSwgMjQ5LCAxNjksIDEyNywgNDQsIDcxLCAyNDksIDE2OSwgMTI3LCA0MywgODUsIDIzMywgCisgICAgMjYsIDEyNywgNDQsIDg1LCAyMzMsIDI2LCAxMjcsIDIyNCwgMjQwLCA3OSwgMjQzLCAzOSwgNzksIDQzLCAyMTYsIDcsIAorICAgIDIyMCwgNTUsIDEyNywgNDQsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCA0MywgNzEsIDIzMywgMjYsIDEyNywgNDQsIDcxLCAKKyAgICAyMzMsIDI2LCAxMjcsIDQzLCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDQ0LCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIAorICAgIDQzLCA3MSwgNDIsIDEyNywgNDQsIDcxLCA0MiwgMTI3LCAyMTIsIDM2LCAyNDgsIDE2NCwgMjIzLCA1MiwgNTIsIDIyNCwgCisgICAgMTk0LCAyMjQsIDEsIDc5LCA1MiwgMjI0LCAxOTQsIDIyNCwgMSwgNzksIDEyMSwgNTIsIDIyNCwgMTk0LCAyMjQsIDEsIDc5LCAKKyAgICAyMjQsIDI0MCwgMTY0LCAyNDQsIDE5OCwgMjQyLCAxNSwgMjI3LCAyMDIsIDExMSwgMjQyLCAxNSwgMjI3LCAyMDIsIDEwNSwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDE1OCwgMjQyLCAxNSwgMjI3LCAyMDIsIDE2MSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5MCwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDE5NSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5OSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5NiwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDIwMSwgMTEwLCAyMzMsIDksIDEzOCwgNzksIDExMCwgMjIyLCAyMzEsIDEzOCwgNzksIAorICAgIDExMCwgMjQ4LCA1MiwgMTM4LCA3OSwgMTEwLCAyNDUsIDEzNiwgMTM4LCA3OSwgMjQsIDIxOSwgMTU3LCA1OSwgMTM4LCA3OSwgCisgICAgMjQsIDUyLCA1OSwgMTM4LCA3OSwgMjEyLCAzMiwgMjQ4LCAxNjQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgNzksIDY3LCAKKyAgICAyMzQsIDIzOSwgMjIzLCA4MCwgMiwgMjEzLCAxMzUsIDIxOSwgMzMsIDc5LCA2NywgMjM0LCAyMzksIDIyMywgODAsIDE2NCwgCisgICAgMjE0LCAxNjAsIDI0MiwgMzQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgMiwgMjEzLCAxMzUsIDIxOSwgMzMsIDE2NCwgMjE0LCAKKyAgICAxNjAsIDI0MiwgMzQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgMTY0LCAyMzIsIDExNCwgMjQyLCAzNCwgMzcsIDIyNCwgCisgICAgMjQwLCA3OSwgMTEwLCAyMTcsIDQsIDIzMiwgMjIwLCAyNDQsIDE1NCwgMjIwLCAxNDAsIDg3LCAyNDIsIDE1LCAyMjcsIAorICAgIDIwMiwgMjE2LCAyNDgsIDI0MiwgMTUsIDIyNywgMjAyLCAyMTUsIDczLCAyNDIsIDE1LCAyMjcsIDIwMiwgMjE2LCAxNjMsIAorICAgIDY3LCAxMTAsIDIzNSwgMTY0LCA3OSwgMjMxLCAxNDUsIDc5LCAyMjYsIDMsIDI1NCwgMTQ4LCA3OSwgMTEwLCA0NSwgMjM1LCAKKyAgICAyNDUsIDExMCwgMTYzLCAyNDQsIDExNCwgMjE5LCAyMCwgMTQxLCAxLCA0LCA2MSwgMTQxLCAxLCA2MSwgMTQxLCAxLCA0LCAKKyAgICA3NCwgMTQxLCAxLCA3NCwgMTQxLCAxLCA0LCA2OSwgMTQxLCAxLCA2OSwgMTQxLCAxLCA0LCA3NiwgMTQxLCAxLCA3NiwgCisgICAgMTQxLCAxLCA0LCA3OCwgMTQxLCAxLCA3OCwgMTQxLCAxLCAxNzYsIDE0MSwgMSwgMjQzLCAxNDIsIDE0MSwgMSwgMjM0LCAKKyAgICA5OCwgMTQxLCAxLCAyNDIsIDIyMSwgMTQxLCAxLCAyMzMsIDIyMywgMTQxLCAxLCAyNDIsIDEyMCwgMTQxLCAxLCAyMzQsIAorICAgIDE4OCwgMTQxLCAxLCAyNDMsIDY5LCAxNDEsIDEsIDIzNCwgMzQsIDE0MSwgMSwgMjQyLCAxODEsIDE0MSwgMSwgMjA2LCAKKyAgICAxNDEsIDEsIDIxMCwgMTE2LCAxNDEsIDEsIDIxOSwgMTkzLCAxNDEsIDEsIDIxMCwgNDQsIDE0MSwgMSwgMjE4LCA4NCwgCisgICAgMTQxLCAxLCAyMTAsIDEzLCAxNDEsIDEsIDIyMSwgMTgzLCAxNDEsIDEsIDIxMCwgOTQsIDE0MSwgMSwgMjE5LCA2MCwgMTQxLCAKKyAgICAxLCAyMTAsIDIzLCAxNDEsIDEsIDIxNywgMTA2LCAxNDEsIDEsIDI0OCwgMjI5LCAxNDEsIDEsIDIxNiwgMTE4LCAxNDEsIDEsIAorICAgIDI0OCwgMTEsIDE0MSwgMSwgNCwgMjE1LCAxMTksIDE0MSwgMSwgMjE1LCAxMTksIDE0MSwgMSwgMjQ2LCA4NiwgMTQxLCAxLCAKKyAgICAyMTcsIDIzLCAxNDEsIDEsIDI0OCwgOTgsIDE0MSwgMSwgMTEyLCAxNDEsIDEsIDI0NywgMTUzLCAxNDEsIDEsIDE5OCwgCisgICAgMTQxLCAxLCAyMjgsIDIzOCwgMTQxLCAxLCAyMjcsIDI0MiwgMTQxLCAxLCAyMjksIDExMiwgMTQxLCAxLCAyMjgsIDc5LCAKKyAgICAxNDEsIDEsIDE2MiwgMTQxLCAxLCAyNTIsIDE5OSwgMTQxLCAxLCAxOTEsIDE0MSwgMSwgMjQxLCAxODcsIDE0MSwgMSwgCisgICAgMjUyLCAxNCwgMTQxLCAxLCAyMjUsIDExMSwgMTQxLCAxLCAyNDAsIDIyOSwgMTQxLCAxLCAyNTEsIDEzMywgMTQxLCAxLCAKKyAgICAyMjQsIDE1MywgMTQxLCAxLCAyNDEsIDI0NSwgMTQxLCAxLCAyNTIsIDgzLCAxNDEsIDEsIDIyNSwgMjI0LCAxNDEsIDEsIAorICAgIDI0MSwgNzUsIDE0MSwgMSwgMjUxLCAyMTMsIDE0MSwgMSwgMjI1LCAxOSwgMTQxLCAxLCAxODYsIDE0MSwgMSwgMjMwLCAKKyAgICAyMzUsIDE0MSwgMSwgMjMwLCAxMDcsIDE0MSwgMSwgMjMxLCA5NiwgMTQxLCAxLCAyMzAsIDE2NiwgMTQxLCAxLCA0LCAxOTIsIAorICAgIDE0MSwgMSwgMTkyLCAxNDEsIDEsIDQsIDIxMCwgMjEyLCAxNDEsIDEsIDIxMCwgMjEyLCAxNDEsIDEsIDQsIDIxMCwgMjQ0LCAKKyAgICAxNDEsIDEsIDIxMCwgMjQ0LCAxNDEsIDEsIDIwNSwgMTQxLCAxLCAyMjMsIDM4LCAxNDEsIDEsIDIyMiwgMTQyLCAxNDEsIDEsIAorICAgIDIyMywgMTMxLCAxNDEsIDEsIDIyMiwgMjEzLCAxNDEsIDEsIDQsIDIxMiwgNjUsIDE0MSwgMSwgMjEyLCA2NSwgMTQxLCAxLCAKKyAgICAyMTEsIDI1MCwgMTQxLCAxLCAyMTIsIDIyLCAxNDEsIDEsIDIxMSwgMjI3LCAxNDEsIDEsIDIzMCwgMzAsIDE0MSwgMSwgCisgICAgMjEyLCAxMTYsIDE0MSwgMSwgNCwgMTc2LCAxNDEsIDEsIDQsIDIzNCwgMTg4LCAzOCwgMjM0LCAyMDcsIDIxMywgMTM1LCAKKyAgICAyMTksIDMzLCA3OSwgMzgsIDIzNCwgMjA3LCAyMjAsIDE1NywgMjE5LCAzMywgNzksIDIzNCwgMjA3LCAyMTMsIDEzNSwgCisgICAgMjE5LCAzMywgNzksIDIzNCwgMjA3LCAyMjAsIDE1NywgMjE5LCAzMywgNzksIDE0MSwgMjM1LCAxNjQsIDc5LCAxNDEsIAorICAgIDIxMywgMTM1LCAyMzUsIDE2NCwgNzksIDE0MSwgMjQ3LCAyMjksIDIxMCwgMjI1LCAyMzQsIDIwNywgNTIsIDI0MCwgMTc1LCAKKyAgICA1NiwgMSwgNCwgNjEsIDU2LCAxLCA2MSwgNTYsIDEsIDQsIDc0LCA1NiwgMSwgNzQsIDU2LCAxLCA0LCA2OSwgNTYsIDEsIAorICAgIDY5LCA1NiwgMSwgNCwgNzYsIDU2LCAxLCA3NiwgNTYsIDEsIDQsIDc4LCA1NiwgMSwgNzgsIDU2LCAxLCAxNzYsIDU2LCAxLCAKKyAgICAyNDMsIDE0MiwgNTYsIDEsIDIzNCwgOTgsIDU2LCAxLCAyNDIsIDIyMSwgNTYsIDEsIDIzMywgMjIzLCA1NiwgMSwgMjQyLCAKKyAgICAxMjAsIDU2LCAxLCAyMzQsIDE4OCwgNTYsIDEsIDI0MywgNjksIDU2LCAxLCAyMzQsIDM0LCA1NiwgMSwgMjQyLCAxODEsIAorICAgIDU2LCAxLCAyMDYsIDU2LCAxLCAyMTAsIDExNiwgNTYsIDEsIDIxOSwgMTkzLCA1NiwgMSwgMjEwLCA0NCwgNTYsIDEsIDIxOCwgCisgICAgODQsIDU2LCAxLCAyMTAsIDEzLCA1NiwgMSwgMjIxLCAxODMsIDU2LCAxLCAyMTAsIDk0LCA1NiwgMSwgMjE5LCA2MCwgNTYsIAorICAgIDEsIDIxMCwgMjMsIDU2LCAxLCAyMTcsIDEwNiwgNTYsIDEsIDI0OCwgMjI5LCA1NiwgMSwgMjE2LCAxMTgsIDU2LCAxLCAKKyAgICAyNDgsIDExLCA1NiwgMSwgNCwgMjE1LCAxMTksIDU2LCAxLCAyMTUsIDExOSwgNTYsIDEsIDI0NiwgODYsIDU2LCAxLCAyMTcsIAorICAgIDIzLCA1NiwgMSwgMjQ4LCA5OCwgNTYsIDEsIDExMiwgNTYsIDEsIDI0NywgMTUzLCA1NiwgMSwgMTk4LCA1NiwgMSwgMjI4LCAKKyAgICAyMzgsIDU2LCAxLCAyMjcsIDI0MiwgNTYsIDEsIDIyOSwgMTEyLCA1NiwgMSwgMjI4LCA3OSwgNTYsIDEsIDE2MiwgNTYsIDEsIAorICAgIDI1MiwgMTk5LCA1NiwgMSwgMTkxLCA1NiwgMSwgMjQxLCAxODcsIDU2LCAxLCAyNTIsIDE0LCA1NiwgMSwgMjI1LCAxMTEsIAorICAgIDU2LCAxLCAyNDAsIDIyOSwgNTYsIDEsIDI1MSwgMTMzLCA1NiwgMSwgMjI0LCAxNTMsIDU2LCAxLCAyNDEsIDI0NSwgNTYsIAorICAgIDEsIDI1MiwgODMsIDU2LCAxLCAyMjUsIDIyNCwgNTYsIDEsIDI0MSwgNzUsIDU2LCAxLCAyNTEsIDIxMywgNTYsIDEsIDIyNSwgCisgICAgMTksIDU2LCAxLCAxODYsIDU2LCAxLCAyMzAsIDIzNSwgNTYsIDEsIDIzMCwgMTA3LCA1NiwgMSwgMjMxLCA5NiwgNTYsIDEsIAorICAgIDIzMCwgMTY2LCA1NiwgMSwgNCwgMTkyLCA1NiwgMSwgMTkyLCA1NiwgMSwgNCwgMjEwLCAyMTIsIDU2LCAxLCAyMTAsIDIxMiwgCisgICAgNTYsIDEsIDQsIDIxMCwgMjQ0LCA1NiwgMSwgMjEwLCAyNDQsIDU2LCAxLCAyMDUsIDU2LCAxLCAyMjMsIDM4LCA1NiwgMSwgCisgICAgMjIyLCAxNDIsIDU2LCAxLCAyMjMsIDEzMSwgNTYsIDEsIDIyMiwgMjEzLCA1NiwgMSwgNCwgMjEyLCA2NSwgNTYsIDEsIAorICAgIDIxMiwgNjUsIDU2LCAxLCAyMTEsIDI1MCwgNTYsIDEsIDIxMiwgMjIsIDU2LCAxLCAyMTEsIDIyNywgNTYsIDEsIDIzMCwgCisgICAgMzAsIDU2LCAxLCAyMTIsIDExNiwgNTYsIDEsIDQsIDE3NiwgNTYsIDEsIDQsIDIzNCwgMTg4LCA1NiwgMSwgMjE0LCAyNywgCisgICAgNTYsIDEsIDIxMywgMTc2LCA1NiwgMSwgMjEzLCAyNTUsIDU2LCAxLCAyMTMsIDEzOCwgNTYsIDIzMCwgMjI5LCAyNDcsIAorICAgIDEyOCwgMjM0LCAyMDcsIDIyNCwgMTc2LCAyMTksIDMzLCA3OSwgNTYsIDIzNSwgMTY0LCA3OSwgNTYsIDIxMywgMTM1LCAKKyAgICAyMzUsIDE2NCwgNzksIDU2LCAyNDcsIDIyOSwgMjM0LCA1LCAyNTEsIDE5MiwgMSwgMjUzLCAxNjYsIDI1MSwgMTkyLCAxLCAKKyAgICAyMjYsIDEwOSwgMjUxLCAxOTIsIDEsIDE5NCwgMjUxLCAxOTIsIDEsIDI0NSwgMTQsIDI1MSwgMTkyLCAxLCAyNDksIDY4LCAKKyAgICAyNTEsIDE5MiwgMSwgMjE3LCAxNTMsIDI1MSwgMTkyLCAxLCAyMzAsIDMwLCAyNTEsIDE5MiwgMSwgMTU2LCAyNTEsIDE5MiwgCisgICAgMSwgMjQzLCAyMDksIDI1MSwgMTkyLCAxLCAyMzUsIDI5LCAyNTEsIDE5MiwgMSwgMjQyLCA2NywgMjUxLCAxOTIsIDEsIAorICAgIDIzNSwgMTUwLCAyNTEsIDE5MiwgMSwgMjI0LCA5OSwgMjUxLCAxOTIsIDEsIDIxMSwgMTc4LCAyNTEsIDE5MiwgMSwgMjEwLCAKKyAgICA4MywgMjUxLCAxOTIsIDEsIDI1MCwgMTY2LCAyNTEsIDE5MiwgMSwgMjIwLCAxMDYsIDI1MSwgMTkyLCAxLCAxNTMsIDI1MSwgCisgICAgMTkyLCAxLCAyMTAsIDE1OSwgMjUxLCAxOTIsIDEsIDI1MSwgNzQsIDI1MSwgMTkyLCAxLCAyMjIsIDkzLCAyNTEsIDE5MiwgCisgICAgMSwgNjEsIDI1MSwgMTkyLCAxLCA3OCwgMjUxLCAxOTIsIDEsIDc2LCAyNTEsIDE5MiwgMSwgMjQ1LCAyMDUsIDI1MSwgMTkyLCAKKyAgICAxLCAyNTQsIDIxMCwgMjUxLCAxOTIsIDEsIDI0NSwgMjAzLCAyNTEsIDE5MiwgMSwgMjUzLCAyMDAsIDI1MSwgMTkyLCAxLCAKKyAgICAyMjYsIDEzOCwgMjUxLCAxOTIsIDEsIDI1NCwgMTMxLCAyNTEsIDE5MiwgMSwgMjQ1LCAxNTgsIDI1MSwgMTkyLCAxLCAyNTQsIAorICAgIDEyMywgMjUxLCAxOTIsIDEsIDI0NSwgMTQ2LCAyNTEsIDE5MiwgMSwgMjQ1LCAxMDAsIDI1MSwgMTkyLCAxLCA3NCwgMjUxLCAKKyAgICAxOTIsIDEsIDY5LCAyNTEsIDE5MiwgMSwgMjM1LCAxNjIsIDI1MSwgMTkyLCAxLCAyMTQsIDEwNSwgMjUxLCAxOTIsIDEsIAorICAgIDIyOSwgODQsIDI1MSwgMTkyLCAxLCAyNDIsIDE4NSwgMjUxLCAxOTIsIDEsIDIzNiwgNDEsIDI0LCAxLCAyMzQsIDY0LCAyNCwgCisgICAgMSwgMjE4LCAyMTcsIDI0LCAxLCAyMzQsIDU3LCAyNCwgMSwgMjI4LCAyMzEsIDI0LCAxLCAyMjgsIDIyOSwgMjQsIDEsIAorICAgIDIyOCwgMjI4LCAyNCwgMSwgMjE2LCAxMDIsIDI0LCAxLCAyMTgsIDIwNiwgMjQsIDEsIDIyMywgMjksIDI0LCAxLCAyMjMsIAorICAgIDI0LCAyNCwgMSwgMjIzLCAyMSwgMjQsIDEsIDIyMywgMTQsIDI0LCAxLCAyMjMsIDksIDI0LCAxLCAyMjMsIDQsIDI0LCAxLCAKKyAgICAyMjMsIDE1LCAyNCwgMSwgMjIzLCAyNywgMjQsIDEsIDIzMCwgMjIyLCAyNCwgMSwgMjI1LCA5OCwgMjQsIDEsIDIxOCwgCisgICAgMjE0LCAyNCwgMSwgMjI1LCA4NywgMjQsIDEsIDIxOSwgMTUwLCAyNCwgMSwgMjE4LCAyMTEsIDI0LCAxLCAyMzYsIDYzLCAKKyAgICAyNCwgMSwgMjUwLCA1NCwgMjQsIDEsIDIxOCwgMjIxLCAyNCwgMSwgMjUwLCAxMTQsIDI0LCAxLCAyMzQsIDExNiwgMjQsIDEsIAorICAgIDIxNiwgMTc0LCAyNCwgMSwgMjI1LCAxMzQsIDI0LCAxLCAyNDEsIDE3OSwgMjQsIDEsIDYxLCAyNCwgMSwgMjU0LCAyNTIsIAorICAgIDI0LCAxLCAxOTIsIDI0LCAxLCAyMTEsIDkyLCAyNCwgMSwgMjQ1LCAxMjUsIDI0LCAxLCA3NiwgMjQsIDEsIDIxMSwgMzYsIAorICAgIDI0LCAxLCAyMTEsIDQ3LCAyNCwgMSwgNzgsIDI0LCAxLCAyMTIsIDY1LCAyNCwgMSwgMjEyLCA2MiwgMjQsIDEsIDIyNiwgCisgICAgMjM4LCAyNCwgMSwgMjEwLCAyNDQsIDI0LCAxLCA2OSwgMjQsIDEsIDIxMiwgMTEsIDI0LCAxLCAyMTIsIDIyLCAyNCwgMSwgCisgICAgMjExLCAyNTAsIDI0LCAxLCAyMTAsIDIxMiwgMjQsIDEsIDI0NSwgNjMsIDI0LCAxLCAyMTEsIDgsIDI0LCAxLCA3NCwgMjQsIAorICAgIDI0NCwgMTExLCAyNCwgMSwgMjE4LCAyMTUsIDI0LCAxLCAyMjgsIDIyMSwgMjQsIDEsIDIyOCwgMjIzLCAyNCwgMSwgMjI4LCAKKyAgICAyMjYsIDI0LCAxLCAyMjMsIDIyLCAyNCwgMSwgMjIzLCAzLCAyNCwgMSwgMjIzLCAxMSwgMjQsIDEsIDIyMywgMTYsIDI0LCAKKyAgICAxLCAyMjMsIDEsIDI0LCAxLCAyMzAsIDIxNSwgMjQsIDEsIDIzMCwgMjEyLCAyNCwgMSwgMjMwLCAyMTYsIDI0LCAxLCAyMzQsIAorICAgIDIyNywgMjQsIDEsIDIyNSwgOTMsIDI0LCAxLCAyMjUsIDc5LCAyNCwgMSwgMjI1LCA4NSwgMjQsIDEsIDIyNSwgODIsIDI0LCAKKyAgICAxLCAyMjUsIDk2LCAyNCwgMSwgMjI1LCA4MCwgMjQsIDEsIDIzNCwgMjI1LCAyNCwgMSwgMjM0LCAyMjMsIDI0LCAxLCAyMTksIAorICAgIDE0MywgMjQsIDEsIDIxOSwgMTQxLCAyNCwgMSwgMjE5LCAxMzMsIDI0LCAxLCAyMTksIDEzOCwgMjQsIDEsIDIxOSwgMTQ4LCAKKyAgICAyNCwgMSwgMjI2LCAzNiwgMjQsIDEsIDIxOCwgMjE4LCAyNCwgMSwgMjExLCAyNiwgMjQsIDEsIDIxMSwgMjIsIDI0LCAxLCAKKyAgICAyMTEsIDIzLCAyNCwgMSwgMjM0LCAyMjYsIDI0LCAxLCAyMTgsIDIxOSwgMjQsIDEsIDIxMSwgMzIsIDI0LCAxLCAyMTAsIAorICAgIDIzOCwgMjQsIDEsIDIxMCwgMjM3LCAyNCwgMSwgMjEwLCAyNDAsIDI0LCAxLCAyMTAsIDIwMywgMjQsIDEsIDIxMCwgMjA0LCAKKyAgICAyNCwgMSwgMjEwLCAyMDcsIDI0LCAxLCAyNTQsIDQyLCAyNCwgMSwgMjU0LCAzNiwgMTEwLCAyNTQsIDEwNywgMjMyLCAyMDksIAorICAgIDc5LCAxMTAsIDI1NCwgMTA3LCAyMjMsIDUzLCA3OSwgMTEwLCAyNTQsIDEwNywgMTIzLCA3OSwgMTEwLCAyNTQsIDEwNywgCisgICAgMTEzLCA3OSwgMTEwLCAyNTQsIDEwNywgMTM0LCA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxOSwgNzksIDExMCwgMjU0LCAKKyAgICAxMDcsIDIxNiwgMTUsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMzAsIDIyOSwgNzksIDExMCwgMjU0LCAxMDcsIDI1MSwgMTgzLCAKKyAgICA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxMDAsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMjEsIDE3OCwgNzksIDExMCwgMjU0LCAKKyAgICAxMDcsIDIxNiwgMTcwLCA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxMiwgNzksIDExMCwgMjU0LCAxMDcsIDI0MSwgMjMxLCAKKyAgICA3OSwgMTEwLCAyNTQsIDEwNywgMjQ1LCAyMzIsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMzEsIDE5MSwgNzksIDI1MSwgMTkyLCAKKyAgICAxLCAyNTEsIDEzMywgMjUxLCAxOTIsIDEsIDIxMCwgNDQsIDI1MSwgMTkyLCAxLCAyMzUsIDExNCwgMjUxLCAxOTIsIDEsIAorICAgIDI0MiwgMTIwLCAyNTEsIDE5MiwgMSwgMjQ1LCAyMTcsIDI1MSwgMTkyLCAxLCAyNDUsIDE0MywgMjUxLCAxOTIsIDEsIDIyNiwgCisgICAgMTg3LCAyNTEsIDE5MiwgMSwgMjI2LCAxOTEsIDI1MSwgMTkyLCAxLCAyMzUsIDE4NiwgMjUxLCAxOTIsIDEsIDI1NCwgMTA5LCAKKyAgICAyNTEsIDE5MiwgMSwgMjM1LCAyMzEsIDI1MSwgMTkyLCAxLCAyMTQsIDE2OCwgMjUxLCAxOTIsIDEsIDIzNiwgMjMsIDI1MSwgCisgICAgMTkyLCAxLCAyMjksIDYyLCAyNTEsIDE5MiwgMSwgMjU0LCAyMDQsIDI1MSwgMTkyLCAxLCAyNTMsIDE5NSwgMjUxLCAxOTIsIAorICAgIDEsIDI1NCwgMTQ0LCAyNTEsIDE5MiwgMSwgMjI2LCAyMDgsIDI1MSwgMTkyLCAxLCAyMjYsIDE5MywgMjUxLCAxOTIsIDEsIAorICAgIDIzNSwgMjI4LCAyNTEsIDE5MiwgNDAsIDEsIDIyNiwgMTA5LCAyNTEsIDE5MiwgNDAsIDEsIDIxNywgMTUzLCAyNTEsIDE5MiwgCisgICAgNDAsIDEsIDIzNSwgMjksIDI1MSwgMTkyLCA0MCwgMSwgMjQyLCA2NywgMjUxLCAxOTIsIDEsIDI0MywgMSwgMjUxLCAxOTIsIAorICAgIDEsIDIzMywgNSwgMjUxLCAxOTIsIDEsIDIwOSwgMjUwLCAxMCwgMjE4LCAxMDUsIDIxNywgMTUzLCAxMCwgMjE4LCAxMDUsIAorICAgIDIxMiwgNCwgMTAsIDIxOCwgMTA1LCAyMTEsIDE1OCwgMTAsIDIxOCwgMTA1LCAyNTEsIDg3LCAxMCwgMjE4LCAxMDUsIDIxNywgCisgICAgMjU1LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY1LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY5LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMjM4LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY2LCAxMCwgMjE4LCAxMDUsIDIxNywgMTU2LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMTY4LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY0LCAxMCwgMjE4LCAxMDUsIDI0MCwgMjM2LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMTY3LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTYzLCAxMCwgMjE4LCAxMDUsIDIzMCwgMzAsIDEwLCAyMTgsIDEwNSwgMjQyLCAKKyAgICA2NywgMTAsIDIxOCwgMTA1LCAyMjIsIDkzLCAxMCwgMjE4LCAxMDUsIDIyNiwgMTA5LCAxMCwgMjE4LCAxMDUsIDIxOSwgMjMsIAorICAgIDEwLCAyMTgsIDEwNSwgMjQ5LCA2OCwgMTAsIDIxOCwgMTA1LCAyNDAsIDE3MCwgMTAsIDIxOCwgMTA1LCAyNDEsIDE5NywgCisgICAgMTAsIDIxOCwgMTA1LCAyMTcsIDE2NSwgMTAsIDIxOCwgMTA1LCAyMTcsIDIzNCwgMTAsIDIxOCwgMTA1LCAyMTgsIDE3MCwgCisgICAgMTAsIDIxOCwgMTA1LCAyMjAsIDExMiwgMTAsIDIxOCwgMTA1LCAyMjUsIDIyOCwgMTAsIDIxOCwgMTA1LCAyMjQsIDEwMSwgCisgICAgMTAsIDIxOCwgMTA1LCAyMTYsIDQ0LCAxMCwgMjE4LCAxMDUsIDIxNywgMTU1LCAxMCwgMjE4LCAxMDUsIDIxNywgMjQ1LCAKKyAgICAxMCwgMjE4LCAxMDUsIDI0MCwgMTc3LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTYyLCAxMCwgMjE4LCAxMDUsIDIyNSwgMTUyLCAKKyAgICAxMCwgMjE4LCAxMDUsIDIyNCwgOTksIDU2LCAxLCA0LCAyMzMsIDIyMywgNTYsIDEsIDQsIDIxOSwgMTkzLCA1NiwgMSwgNCwgCisgICAgMjE4LCA4NCwgNTYsIDEsIDQsIDExMiwgNTYsIDEsIDQsIDIyNywgMjQyLCA1NiwgMSwgNCwgMTYyLCA1NiwgMSwgNCwgMjQxLCAKKyAgICAxODcsIDU2LCAxLCA0LCAyNDAsIDIyOSwgNTYsIDEsIDQsIDI0MSwgMjQ1LCA1NiwgMSwgNCwgMjQxLCA3NSwgNTYsIDEsIDQsIAorICAgIDIzMCwgMTA3LCA1NiwgMSwgNCwgMjA1LCA1NiwgMSwgNCwgMjIzLCAzOCwgNTYsIDEsIDQsIDIyMiwgMTQyLCA1NiwgMSwgNCwgCisgICAgMjIzLCAxMzEsIDU2LCAxLCA0LCAyMjIsIDIxMywgODgsIDI0LCAyMzQsIDY0LCA4OCwgMjQsIDIyOCwgMjMxLCA4OCwgMjQsIAorICAgIDIxNiwgMTAyLCA4OCwgMjQsIDIyMywgMjksIDg4LCAyNCwgMjMwLCAyMjIsIDg4LCAyNCwgMjI1LCA5OCwgODgsIDI0LCAKKyAgICAyMTksIDE1MCwgODgsIDI0LCAyMzYsIDYzLCA4OCwgMjQsIDI1MCwgNTQsIDg4LCAyNCwgMjUwLCAxMTQsIDg4LCAyNCwgCisgICAgMjM0LCAxMTYsIDg4LCAyNCwgMjE2LCAxNzQsIDg4LCAyNCwgMjI1LCAxMzQsIDg4LCAyNCwgMjQxLCAxNzksIDg4LCAyNCwgCisgICAgMjM0LCA2NSwgNjEsIDg4LCAyNCwgMjI4LCAyMzIsIDYxLCA4OCwgMjQsIDIxNiwgMTAzLCA2MSwgODgsIDI0LCAyMjMsIDMwLCAKKyAgICA2MSwgODgsIDI0LCAyMzAsIDIyMywgNjEsIDg4LCAyNCwgMjI1LCA5OSwgNjEsIDg4LCAyNCwgMjE5LCAxNTEsIDYxLCA4OCwgCisgICAgMjQsIDIzNiwgNjQsIDYxLCA4OCwgMjQsIDI1MCwgNTUsIDYxLCA4OCwgMjQsIDI1MCwgMTE1LCA2MSwgODgsIDI0LCAyMzQsIAorICAgIDExNywgNjEsIDg4LCAyNCwgMjE2LCAxNzUsIDYxLCA4OCwgMjQsIDIyNSwgMTM1LCA2MSwgODgsIDI0LCAyNDEsIDE4MCwgCisgICAgNjEsIDg4LCAyNCwgMjUwLCA1NSwgNjksIDg4LCAyMzQsIDksIDEzNSwgMjI2LCAyMjEsIDg4LCAyMzQsIDksIDEzNSwgMTQ0LCAKKyAgICAyNDAsIDIyOSwgODgsIDE1NCwgMTExLCA4OCwgMTU0LCAxMDUsIDg4LCAxNTQsIDE1OCwgODgsIDE1NCwgMTYxLCA4OCwgCisgICAgMTU0LCAxOTAsIDg4LCAxNTQsIDE5NSwgODgsIDE1NCwgMTk5LCA4OCwgMTU0LCAxOTYsIDg4LCAxNTQsIDIwMSwgODgsIAorICAgIDE1NCwgMjE2LCAyNDgsIDg4LCAxNTQsIDIzMCwgMTMzLCA4OCwgMTU0LCAyNDQsIDEwNCwgODgsIDE1NCwgMjEyLCA0MCwgCisgICAgODgsIDE1NCwgMjExLCAyMTQsIDg4LCAxNTQsIDIzMSwgNDQsIDg4LCAxNTQsIDI0NSwgMjMxLCA4OCwgMTU0LCAyMTgsIDM4LCAKKyAgICA4OCwgMTU0LCAyMTgsIDEzNCwgODgsIDE1NCwgMjQxLCAyNTEsIDg4LCAxNTQsIDIxOSwgNTYsIDg4LCAxNTQsIDIyOSwgCisgICAgMjA5LCA4OCwgMTU0LCAyMTksIDYsIDg4LCAxNTQsIDI0NCwgMTEwLCA4OCwgMTU0LCAyNDksIDIwOCwgODgsIDE1NCwgMjMzLCAKKyAgICAxMzEsIDg4LCAxNTQsIDIyMywgNzQsIDg4LCAxNTQsIDI1MSwgMjMsIDg4LCAxNTQsIDIxOCwgODgsIDg4LCAxNTQsIDIxOCwgCisgICAgMjEsIDg4LCAxNTQsIDI0NSwgMTM1LCA4OCwgMTU0LCAyMjMsIDY2LCA4OCwgMTU0LCAyNTQsIDE1OSwgODgsIDE1NCwgMjQ0LCAKKyAgICAxMzYsIDg4LCAxNTQsIDIyMywgNjQsIDg4LCAxNTQsIDIyMCwgMTU4LCA4OCwgMTU0LCAyMjMsIDEzMCwgMzcsIDE1NCwgCisgICAgMjI0LCAxNSwgMzcsIDE1NCwgMjM0LCA4NiwgMzcsIDE1NCwgMjIxLCAyMDAsIDM3LCAxNTQsIDIzNCwgNSwgMzcsIDU0LCAKKyAgICAyMTYsIDI0OSwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyMTUsIDc0LCAyMjYsIDIwMSwgODUsIDIxOCwgCisgICAgMjM2LCAzNywgNTQsIDIxNiwgMTY0LCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIDI0NCwgMjQsIDIyNiwgMjAxLCAKKyAgICA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjQ0LCAxMjMsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjE5LCAxMTQsIAorICAgIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjIwLCAxMTksIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgCisgICAgMjQ1LCAxOTMsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDIyNSwgMjU1LCA1MCwgMzcsIDU0LCAyMTUsIDc0LCAxMTEsIDM3LCAKKyAgICA1NCwgMjE1LCA3NCwgMTA1LCAzNywgNTQsIDIxNSwgNzQsIDE1OCwgMzcsIDU0LCAyMTUsIDc0LCAxNjEsIDM3LCA1NCwgCisgICAgMjE1LCA3NCwgMTkwLCAzNywgNTQsIDIxNSwgNzQsIDE5NSwgMzcsIDU0LCAyMTUsIDc0LCAxOTksIDM3LCA1NCwgMjE1LCAKKyAgICA3NCwgMTk2LCAzNywgNTQsIDIxNSwgNzQsIDIwMSwgMzcsIDU0LCAyMTYsIDE2MywgMzcsIDU0LCAyMTYsIDE2NCwgMTExLCAKKyAgICAzNywgNTQsIDIxNiwgMTY0LCAxMDUsIDM3LCA1NCwgMjE2LCAxNjQsIDE1OCwgMzcsIDU0LCAyMTYsIDE2NCwgMTYxLCAzNywgCisgICAgNTQsIDIxNiwgMTY0LCAxOTAsIDM3LCAyNCwgMjM0LCA2NCwgMzcsIDI0LCAyMjgsIDIzMSwgMzcsIDI0LCAyMTYsIDEwMiwgCisgICAgMzcsIDI0LCAyMjMsIDI5LCAzNywgMjQsIDIzMCwgMjIyLCAzNywgMjQsIDIyNSwgOTgsIDM3LCAyNCwgMjE5LCAxNTAsIDM3LCAKKyAgICAyNCwgMjM2LCA2MywgMzcsIDI0LCAyNTAsIDU0LCAzNywgMjQsIDI1MCwgMTE0LCAzNywgMjQsIDIzNCwgMTE2LCAzNywgMjQsIAorICAgIDIxNiwgMTc0LCAzNywgMjQsIDIyNSwgMTM0LCAzNywgMjQsIDI0MSwgMTc5LCAzNywgMjQsIDIzNCwgNjUsIDYxLCAzNywgCisgICAgMjQsIDIyOCwgMjMyLCA2MSwgMzcsIDI0LCAyMTYsIDEwMywgNjEsIDM3LCAyNCwgMjIzLCAzMCwgNjEsIDM3LCAyNCwgMjMwLCAKKyAgICAyMjMsIDYxLCAzNywgMjQsIDIyNSwgOTksIDYxLCAzNywgMjQsIDIxOSwgMTUxLCA2MSwgMzcsIDI0LCAyMzYsIDY0LCA2MSwgCisgICAgMzcsIDI0LCAyNTAsIDU1LCA2MSwgMzcsIDI0LCAyNTAsIDExNSwgNjEsIDM3LCAyNCwgMjM0LCAxMTcsIDYxLCAzNywgMjQsIAorICAgIDIxNiwgMTc1LCA2MSwgMzcsIDI0LCAyMjUsIDEzNSwgNjEsIDM3LCAyNCwgMjQxLCAxODAsIDYxLCAzNywgMjM0LCA5LCAKKyAgICAxMzUsIDI1MCwgMTU2LCAzNywgMjM0LCA5LCAxMzUsIDIzNSwgNTMsIDM3LCAyNCwgMjM2LCA2NCwgNjksIDIzNCwgOSwgCisgICAgMjE4LCAxNjEsIDg3LCAzNywgMTU0LCAxMTEsIDM3LCAxNTQsIDEwNSwgMzcsIDE1NCwgMTU4LCAzNywgMTU0LCAxNjEsIDM3LCAKKyAgICAxNTQsIDE5MCwgMzcsIDE1NCwgMTk1LCAzNywgMTU0LCAxOTksIDM3LCAxNTQsIDE5NiwgMzcsIDE1NCwgMjAxLCAzNywgCisgICAgMTU0LCAyMTYsIDI0OCwgMzcsIDE1NCwgMjMwLCAxMzMsIDM3LCAxNTQsIDI0NCwgMTA0LCAzNywgMTU0LCAyMTIsIDQwLCAKKyAgICAzNywgMTU0LCAyMTEsIDIxNCwgMzcsIDE1NCwgMjMxLCA0NCwgMzcsIDE1NCwgMjQ1LCAyMzEsIDM3LCAxNTQsIDIxOCwgMzgsIAorICAgIDM3LCAxNTQsIDIxOCwgMTM0LCAzNywgMTU0LCAyNDEsIDI1MSwgMzcsIDE1NCwgMjE5LCA1NiwgMzcsIDE1NCwgMjI5LCAKKyAgICAyMDksIDM3LCAxNTQsIDIxOSwgNiwgMzcsIDE1NCwgMjQ0LCAxMTAsIDM3LCAxNTQsIDI0OSwgMjA4LCAzNywgMTU0LCAyMzMsIAorICAgIDEzMSwgMzcsIDE1NCwgMjIxLCAxNzYsIDM3LCAxNTQsIDIzMSwgMTk0LCAzNywgMTU0LCAyNDQsIDE0NSwgMzcsIDE1NCwgCisgICAgMjE4LCA1MCwgMzcsIDE1NCwgMjQ1LCA0MiwgMzcsIDE1NCwgMjI0LCAxOTAsIDM3LCAxNTQsIDI1MywgMjA0LCAzNywgMTU0LCAKKyAgICAyMzUsIDE2NSwgMzcsIDE1NCwgMjIzLCA2NCwgMzcsIDE1NCwgMjQ5LCAxNzIsIDM3LCAxNTQsIDI0OSwgMTYzLCAzNywgCisgICAgMTU0LCAyNDEsIDE3MiwgMzcsIDE1NCwgMjUwLCAxODIsIDM3LCAxNTQsIDIzMiwgMTE2LCAzNywgMTU0LCAyMzMsIDUyLCAKKyAgICAzNywgMTU0LCAyMjIsIDI1NCwgMzcsIDE1NCwgMjMxLCA4OCwgMzcsIDE1NCwgMjIzLCA5MCwgMzcsIDE1NCwgMjE4LCA4OCwgCisgICAgMzcsIDE1NCwgMjE4LCAyMSwgMzcsIDE1NCwgMjQ1LCAxMzUsIDM3LCAxNTQsIDIyMywgNjYsIDM3LCAxNTQsIDI1NCwgMTU5LCAKKyAgICAzNywgMTU0LCAyMjgsIDIxNywgMzcsIDU0LCAyMTYsIDE2NCwgMTk1LCAzNywgNTQsIDIxNiwgMTY0LCAxOTksIDM3LCA1NCwgCisgICAgMjE2LCAxNjQsIDE5NiwgMzcsIDU0LCAyMTYsIDE2NCwgMjAxLCAzNywgNTQsIDI0NCwgMjMsIDM3LCA1NCwgMjQ0LCAyNCwgCisgICAgMTExLCAzNywgNTQsIDI0NCwgMjQsIDEwNSwgMzcsIDU0LCAyNDQsIDI0LCAxNTgsIDM3LCA1NCwgMjQ0LCAyNCwgMTYxLCAKKyAgICAzNywgNTQsIDI0NCwgMjQsIDE5MCwgMzcsIDU0LCAyNDQsIDI0LCAxOTUsIDM3LCA1NCwgMjQ0LCAyNCwgMTk5LCAzNywgNTQsIAorICAgIDI0NCwgMjQsIDE5NiwgMzcsIDU0LCAyNDQsIDI0LCAyMDEsIDM3LCA1NCwgMjQ0LCAxMjIsIDExMCwgMjE3LCA0LCAxNiwgCisgICAgMzEsIDIzNSwgMTM5LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDQsIDE1NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjMxLCAKKyAgICAxNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI1NCwgNTUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIzMSwgMTM3LCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyMzUsIDUxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMzUsIDUyLCAxMTAsIDIxNywgNCwgMTYsIAorICAgIDMxLCAyNTMsIDE5NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjIwLCAxMzgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIyNiwgCisgICAgMjQzLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMjgsIDQ1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDkzLCA0MiwgMjQxLCAKKyAgICAxOTcsIDQyLCAyNDUsIDk2LCA0MiwgMjQ1LCA1MSwgMjMyLCAyMjUsIDIzMiwgMjQ2LCA1MCwgMzcsIDU2LCA2MSwgMzcsIAorICAgIDU2LCA3NCwgMzcsIDU2LCA2OSwgMzcsIDU2LCA3NiwgMzcsIDU2LCA3OCwgMzcsIDU2LCAxNzYsIDM3LCA1NiwgMjM0LCA5OCwgCisgICAgMzcsIDU2LCAyMzMsIDIyMywgMzcsIDU2LCAyMzQsIDE4OCwgMzcsIDU2LCAyMzQsIDM0LCAzNywgNTYsIDIwNiwgMzcsIDU2LCAKKyAgICAyMTksIDE5MywgMzcsIDU2LCAyMTgsIDg0LCAzNywgNTYsIDIyMSwgMTgzLCAzNywgNTYsIDIxOSwgNjAsIDM3LCA1NiwgCisgICAgMjE3LCAxMDYsIDM3LCA1NiwgMjE2LCAxMTgsIDM3LCA1NiwgMjE1LCAxMTksIDM3LCA1NiwgMjE3LCAyMywgMzcsIDU2LCAKKyAgICAxMTIsIDM3LCA1NiwgMTk4LCAzNywgNTYsIDIyOCwgMjM4LCAzNywgNTYsIDIyNywgMjQyLCAzNywgNTYsIDIyOSwgMTEyLCAKKyAgICAzNywgNTYsIDIyOCwgNzksIDM3LCA1NiwgMTYyLCAzNywgNTYsIDI0MSwgMTg3LCAzNywgNTYsIDI0MCwgMjI5LCAzNywgNTYsIAorICAgIDI0MSwgMjQ1LCAzNywgNTYsIDI0MSwgNzUsIDM3LCA1NiwgMTg2LCAzNywgNTYsIDIzMCwgMjM1LCAzNywgNTYsIDIzMCwgCisgICAgMTA3LCAzNywgNTYsIDIzMSwgOTYsIDM3LCA1NiwgMjMwLCAxNjYsIDM3LCA1NiwgMTkyLCAzNywgNTYsIDIxMCwgMjEyLCAKKyAgICAzNywgNTYsIDIxMCwgMjQ0LCAzNywgNTYsIDIwNSwgMzcsIDU2LCAyMjMsIDM4LCAzNywgNTYsIDIyMiwgMTQyLCAzNywgNTYsIAorICAgIDIyMywgMTMxLCAzNywgNTYsIDIyMiwgMjEzLCAzNywgNTYsIDIxMiwgNjUsIDM3LCA1NiwgMjExLCAyNTAsIDM3LCA1NiwgCisgICAgMjEyLCAyMiwgMzcsIDU2LCAyMTEsIDIyNywgNDIsIDI1NCwgNzksIDQyLCAyNTMsIDI0NywgNDIsIDI1NCwgMTAzLCA0MiwgCisgICAgMjU1LCA0MCwgNDIsIDIzNSwgMjMzLCA0MiwgMjM1LCAyMDMsIDQyLCAyMTQsIDE2NiwgNDIsIDI0NSwgNzQsIDQyLCAyNDUsIAorICAgIDIxNCwgNDIsIDIyNiwgMTkwLCA0MiwgMjI2LCAxODQsIDQyLCAyMzQsIDI1MSwgNDIsIDIzNCwgMjIwLCA0MiwgMjM0LCAKKyAgICAyMTcsIDQyLCAyNDMsIDk5LCA0MiwgMjQzLCAxMDgsIDQyLCAyNDIsIDIxMSwgNDIsIDI0MiwgMjA3LCA0MiwgMjMzLCAxNTYsIAorICAgIDQyLCAyNDIsIDIwMCwgNDIsIDIzNCwgNzgsIDQyLCAyMzQsIDc3LCA0MiwgMjM0LCA3NiwgNDIsIDIzNCwgNzUsIDQyLCAKKyAgICAyNDIsIDkzLCA0MiwgMjQyLCA5MiwgNDIsIDIzMywgMTk5LCA0MiwgMjMzLCAyMDEsIDQyLCAyMzQsIDE4NCwgNDIsIDIzNCwgCisgICAgNywgNDIsIDIzNCwgMTQsIDQyLCAyMjIsIDE4LCA0MiwgMjIxLCAyMzksIDQyLCAyMTksIDEzMSwgNDIsIDIyMCwgMTQzLCAKKyAgICA0MiwgMjIwLCAxNDIsIDQyLCAyNDgsIDIyNiwgNDIsIDI0OCwgNDQsIDQyLCAyNDcsIDEyOSwgNDIsIDIxNiwgMzMsIDQyLCAKKyAgICAyMjksIDIwNSwgNDIsIDIyOCwgNDYsIDQyLCAyNDIsIDM5LCA0MiwgMjI2LCA4OCwgNDIsIDIyNiwgODcsIDQyLCAyNTIsIAorICAgIDE5NiwgNDIsIDIyNSwgMTA4LCA0MiwgMjI1LCA3MiwgNDIsIDIyNSwgNzMsIDQyLCAyNTEsIDI0MiwgNDIsIDI0MCwgMjI4LCAKKyAgICA0MiwgMjQwLCAyMjQsIDQyLCAyNTEsIDk5LCA0MiwgMjQwLCAyMTEsIDQyLCAyNDEsIDIyMiwgNDIsIDIyNSwgMTYyLCA0MiwgCisgICAgMjI1LCAxOTcsIDQyLCAyNDEsIDIwNSwgNDIsIDIyNSwgMTk0LCA0MiwgMjI1LCAyMTAsIDQyLCAyNTIsIDY5LCA0MiwgMjI1LCAKKyAgICA5LCA0MiwgMjUxLCAxODgsIDQyLCAyNDEsIDYzLCA0MiwgMjI0LCAyNTMsIDQyLCAyNDEsIDU1LCA0MiwgMjQxLCA1NywgNDIsIAorICAgIDIzMSwgMjA2LCA0MiwgMjMxLCAyMDIsIDQyLCAyMzEsIDIxMSwgNDIsIDIzMSwgMTU1LCA0MiwgMjMxLCAxODAsIDQyLCAKKyAgICAyMzAsIDIwMiwgNDIsIDIzMCwgMTgxLCA0MiwgMjMwLCAxODAsIDQyLCAyMzEsIDc5LCA0MiwgMjMxLCA3NiwgNDIsIDIzMSwgCisgICAgODAsIDQyLCAyMTEsIDEwMiwgNDIsIDIxMSwgMTAwLCA0MiwgMjEwLCAyMDEsIDQyLCAyMjIsIDIyOSwgNDIsIDIyMiwgMjMzLCAKKyAgICA0MiwgMjIyLCAxMTksIDQyLCAyMjIsIDExMywgNDIsIDIyMywgODgsIDQyLCAyMjMsIDg1LCA0MiwgMjEyLCAzOCwgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxMCwgODYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxMTEsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxMDUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxNTgsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxNjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTAsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTksIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMDEsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTYsIDI0OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIAorICAgIDI0NSwgMTc1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA3NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgCisgICAgMjQwLCAyNDYsIDIxNiwgMTY1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjQ0LCAxMywgMTEwLCAyMTcsIDQsIAorICAgIDE2LCAzMSwgMjQwLCAyNDYsIDI0NCwgMTI2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE5LCAxMjEsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMjAsIDEyMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDI0NSwgCisgICAgMTk4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjI4LCAyMDIsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgCisgICAgMjQ2LCAyMTUsIDczLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA2NywgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjQwLCAyNDYsIDIxNSwgNjMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDY0LCAxMTAsIDIxNywgCisgICAgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA2OSwgNDIsIDI0MCwgMjM3LCA0MiwgMjQ4LCAyMjksIDQyLCAyNTMsIDIwMCwgCisgICAgNDIsIDEzMCwgNDIsIDIyNiwgMTI5LCA0MiwgMjI1LCAyMjksIDQyLCAyNDcsIDE1NSwgNDIsIDI0NywgMTU2LCAyMTgsIAorICAgIDIzNSwgNDIsIDI0NywgMTU2LCAyNDksIDExNiwgNDIsIDIzNSwgMTYyLCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDI0MSwgCisgICAgMjIzLCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDIxNywgMTc1LCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDIxNywgNzUsIDQyLCAKKyAgICAyNDUsIDk5LCAyMjksIDIxMCwgMjMxLCA3NSwgNDIsIDI0OSwgMTY1LCA0MiwgMjI2LCA5NCwgMjU0LCAxMzMsIDQyLCAxOTgsIAorICAgIDQyLCAyMzAsIDEwOCwgNjEsIDQyLCAxODYsIDQyLCAxNzYsIDQyLCAyMzQsIDE5MSwgNDIsIDIzMSwgMTM0LCA0MiwgMjQzLCAKKyAgICA4NywgNDIsIDI1MSwgMjYsIDQyLCAyMzQsIDE5MCwgNDIsIDIyNSwgMTUzLCA0MiwgMjI5LCA4NiwgNDIsIDIzMCwgMTA4LCAKKyAgICAyNDUsIDE0LCA0MiwgMjMwLCAxMDgsIDI0MywgMjA5LCA0MiwgMjMxLCAyMCwgNDIsIDIzNCwgMTQwLCA0MiwgMjQwLCAxNzAsIAorICAgIDQyLCAyMzQsIDEwMCwgNDIsIDIzMCwgMjM3LCA0MiwgMjQyLCAyMjMsIDQyLCAyMTYsIDEyMCwgNDIsIDIzMCwgMTA4LCAKKyAgICAxNTYsIDQyLCAyMzAsIDE3NCwgNDIsIDI0NywgMTY1LCA0MiwgMjM0LCA0NiwgNDIsIDI0NCwgNTMsIDQyLCAyMjgsIDExNywgCisgICAgNDIsIDIzMCwgMTA4LCAxOTQsIDQyLCAyMzAsIDE3MSwgNDIsIDI0OSwgMjQ3LCA0MiwgMjM0LCA0MCwgNDIsIDIzMCwgMTcyLCAKKyAgICAyMTgsIDIzNSwgNDIsIDI0OSwgMjQ4LCAyMTgsIDIzNSwgNDIsIDIzMiwgNTUsIDIxOCwgMjM1LCA0MiwgMjM0LCA0MSwgCisgICAgMjE4LCAyMzUsIDQyLCAyMzAsIDE3MiwgMjQ5LCAxMTYsIDQyLCAyNDksIDI0OCwgMjQ5LCAxMTYsIDQyLCAyMzIsIDU1LCAKKyAgICAyNDksIDExNiwgNDIsIDIzNCwgNDEsIDI0OSwgMTE2LCA0MiwgMjMyLCA1NSwgMTE1LCAyMjIsIDkzLCA0MiwgMjMyLCA1NSwgCisgICAgMTE1LCAyMjIsIDk0LCAyMTgsIDIzNSwgNDIsIDE5MSwgNDIsIDIzNCwgMSwgNDIsIDIzMCwgMTEwLCA0MiwgMjQyLCAxNTgsIAorICAgIDQyLCAyMjMsIDE3OSwgNDIsIDIyMywgMTgwLCAxMTUsIDIyMiwgOTMsIDQyLCAyMjMsIDE4MCwgMTE1LCAyMjIsIDk0LCAKKyAgICAyMTgsIDIzNSwgNDIsIDIyNCwgMTY1LCA0MiwgMjI4LCAxOCwgNDIsIDIzMCwgMTA4LCAyMjIsIDkzLCA0MiwgMjMwLCAxMDksIAorICAgIDQyLCAyMjQsIDExOSwgNDIsIDIyNywgMTgwLCA0MiwgMjMwLCAxMDgsIDIxNCwgMTA1LCA0MiwgMjMwLCA1NCwgNDIsIDIzMywgCisgICAgMTkxLCA0MiwgMjMwLCA1NSwgMjMxLCA3OSwgNDIsIDIyNCwgMTE4LCA0MiwgMjI3LCAxNzksIDQyLCAyMzAsIDEwOCwgMjEyLCAKKyAgICA5OCwgNDIsIDIzMCwgNDgsIDQyLCAyMzMsIDE4OSwgNDIsIDIzMCwgNDksIDIzMSwgNzksIDQyLCAyMzUsIDMwLCAyMjYsIAorICAgIDIyNCwgNDIsIDIzMiwgNTUsIDIyNiwgMjI0LCA0MiwgMjU0LCAxNDQsIDQyLCAyNTEsIDE2OCwgNDIsIDI1MCwgMjIyLCA0MiwgCisgICAgMjUwLCAxOTksIDQyLCAyNTEsIDc1LCAxMTUsIDIzNCwgMTQwLCA0MiwgMjQ5LCAyNDYsIDQyLCAyNDgsIDE1MCwgNDIsIAorICAgIDI0MiwgNzksIDQyLCAxNjIsIDQyLCAyNDAsIDIzOCwgNDIsIDIzNiwgNiwgNDIsIDIzNCwgNTMsIDQyLCAyMzQsIDQxLCAKKyAgICAyNTEsIDIsIDQyLCAyMzMsIDIyNSwgNDIsIDIzMiwgMTY1LCA0MiwgMjMyLCAxNjQsIDQyLCAyMzIsIDE1MywgNDIsIDIzMiwgCisgICAgNjgsIDQyLCAyMzEsIDEzNSwgMjE5LCA4MSwgNDIsIDIzMCwgMjAxLCA0MiwgMjMwLCAxNTcsIDQyLCAyMjUsIDE1MSwgNDIsIAorICAgIDIyNSwgMjIsIDQyLCAyMjQsIDIyMiwgNDIsIDIyNCwgMjIwLCA0MiwgMjE4LCAyMjksIDQyLCAyMTgsIDMsIDQyLCAyMTIsIAorICAgIDI0LCA0MiwgMjE0LCAxMDYsIDExNSwgMTk0LCA0MiwgMTE2LCAxMTUsIDE5NCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDExMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDEwNSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE1OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE2MSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE5MCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE5NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE5OSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE5NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDIwMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMjQ4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAKKyAgICAyNDgsIDE1NCwgMjQ1LCAxNzUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDc2LCAxMTAsIDIxNywgNCwgCisgICAgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAxNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyNDQsIDEzLCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjQ0LCAxMjYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTksIAorICAgIDEyMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIyMCwgMTIxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMjQ1LCAxOTgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMjgsIDIwMiwgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjQ4LCAxNTQsIDIxNSwgNzMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY3LCAxMTAsIDIxNywgCisgICAgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjQsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY5LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgCisgICAgMjE1LCA3MCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIAorICAgIDI0OCwgMTU0LCAyMTUsIDY2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA3MiwgMTEwLCAyMTcsIDQsIAorICAgIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTYsIDE2MywgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMTYyLCA0MiwgMjQzLCAxMjUsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIAorICAgIDI0OSwgMTQ4LCAyNDEsIDIzMCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjIzLCAxMjUsIDI0NSwgMjMxLCAyNDEsIDE5OSwgCisgICAgMzEsIDI0NywgMjM5LCAyNTMsIDIxNSwgMjE2LCAxOTcsIDI1MiwgNjQsIDI0MSwgMTk5LCAzMSwgMjEwLCAyMjMsIDI0NCwgCisgICAgNDYsIDI0MSwgMTk5LCAzMSwgMjEyLCA1OSwgMjQxLCAxOTksIDMxLCAyNDksIDIxMSwgMjQxLCAxOTksIDMxLCAyMTYsIAorICAgIDE5NywgMjU0LCAxMSwgMjQxLCAxOTksIDMxLCAyNDEsIDY3LCAyMTYsIDM5LCAyNDEsIDE5OSwgMzEsIDQsIDIxNywgNjIsIAorICAgIDI0MSwgMTk5LCAzMSwgMjE1LCAyMzgsIDI0MSwgMTk5LCAzMSwgMjI1LCAyMjIsIDI0MSwgMTk5LCAzMSwgMjE4LCAxNjAsIAorICAgIDI0MSwgMTk5LCAzMSwgMjQ0LCAxNDcsIDI0MSwgMTk5LCAzMSwgMjQyLCAxMzksIDIyNCwgMjQzLCAyNDEsIDE5OSwgMzEsIAorICAgIDIzMCwgMTYwLCAyNDEsIDE5OSwgMzEsIDI0NSwgMTM0LCAyNDEsIDE5OSwgMzEsIDI0NCwgNDcsIDI0MSwgMTk5LCAzMSwgCisgICAgMjExLCAyMDcsIDIyNiwgMjAxLCAyMTYsIDE5NywgMjQ4LCA5NCwgMjQxLCAxOTksIDMxLCAyNTQsIDU5LCAyNDEsIDE5OSwgCisgICAgMzEsIDI0OSwgMTkzLCAyNDEsIDE5OSwgMzEsIDI1MSwgMjM1LCAyMTYsIDEzOSwgMjQxLCAxOTksIDMxLCAyNDIsIDE1NiwgCisgICAgMjQxLCAxOTksIDMxLCAyMTgsIDI0NywgMjU0LCA3OCwgMjQxLCAxOTksIDMxLCAyMjMsIDU2LCAyNDEsIDE5OSwgMzEsIAorICAgIDIzNSwgMjI3LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTM5LCAyMTcsIDYyLCAyNDEsIDE5OSwgMzEsIDIzMCwgMTE2LCAyNDksIAorICAgIDE2NywgMjQxLCAxOTksIDMxLCAyNDIsIDEzOSwgMjI0LCAyMDAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI1NSwgMjcsIAorICAgIDIxMiwgNDAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI1MCwgMTYsIDI0NCwgMTA0LCAyNDEsIDE5OSwgMzEsIDIzNSwgCisgICAgMjQwLCAyNDEsIDE5OSwgMzEsIDI0NiwgNjUsIDI0MSwgMTk5LCAzMSwgMjIzLCA1OSwgMjQxLCAxOTksIDMxLCAyNDIsIAorICAgIDEzOSwgMjI0LCAyMjcsIDI0MSwgMTk5LCAzMSwgMjI0LCAxODAsIDI0MSwgMTk5LCAzMSwgMjQ4LCAxNjksIDY0LCAyMTYsIAorICAgIDE5NywgMjMyLCAyMzYsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI0NCwgMTgyLCAyNDEsIDE5OSwgMzEsIDIyNiwgMTY3LCAKKyAgICAyNDEsIDE5OSwgMzEsIDIyNiwgMjQ4LCAyNDEsIDE5OSwgMzEsIDI0OCwgNjcsIDI0MSwgMTk5LCAzMSwgMjQ4LCA4NywgCisgICAgMjQxLCAxOTksIDMxLCAyMzUsIDI1NCwgMjQxLCAxOTksIDMxLCAyNTEsIDE1NywgMjQxLCAxOTksIDMxLCAyNDksIDIyOSwgCisgICAgMjE2LCA0MywgMjMxLCA4MSwgMjQxLCAxOTksIDMxLCAyNDMsIDk0LCAyMTYsIDM5LCAyNDEsIDE5OSwgMzEsIDIyNCwgMTI4LCAKKyAgICAyMTQsIDE1NCwgMjQxLCAxOTksIDMxLCAyMjYsIDE2NiwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjEyLCAxMywgMjQxLCAKKyAgICAxOTksIDMxLCAyMjMsIDQ4LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyNTAsIDIyOCwgMjQxLCAxOTksIDMxLCAyMTYsIAorICAgIDE5NywgMjU0LCA3LCAyMTYsIDEzNCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjM0LCAxODUsIDIxOCwgMTM2LCAyMzAsIAorICAgIDEyMCwgMjQxLCAxOTksIDMxLCAyNDgsIDQwLCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMzEsIDE1NywgMjMxLCAyMDcsIAorICAgIDI0MSwgMTk5LCAzMSwgMjU1LCAyOCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjEyLCA1NCwgMjQxLCAxOTksIDMxLCAKKyAgICAyMTYsIDE5NywgMjQzLCA1NCwgMjExLCAyMzksIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIzNSwgNTgsIDIzMywgMTEzLCAKKyAgICAyNDEsIDE5OSwgMzEsIDI0NywgMTkyLCAyNDEsIDE5OSwgMzEsIDIzMiwgMjI2LCAyNDEsIDE5OSwgMzEsIDIzNSwgMjMwLCAKKyAgICAyMTUsIDE4OCwgMjQxLCAxOTksIDMxLCA0LCAyMjQsIDIwMCwgMjQxLCAxOTksIDMxLCAyNTQsIDIyNiwgMjQ5LCAyMjAsIAorICAgIDI0MSwgMTk5LCAzMSwgMjUyLCA2NywgMjQ5LCAyMjAsIDgsIDMsIDIzNSwgMTY2LCA4LCAzLCAyMzUsIDE1OSwgOCwgMywgCisgICAgNzQsIDgsIDMsIDIzNSwgMTg5LCA4LCAzLCAyMzYsIDY1LCA4LCAzLCAyMzYsIDQ4LCA4LCAzLCAyMzYsIDY3LCA4LCAzLCAKKyAgICAyMzYsIDY2LCA4LCAzLCAyNTMsIDIxNCwgOCwgMywgMjUzLCAxNzcsIDgsIDMsIDYxLCA4LCAzLCAyNTQsIDgwLCA4LCAzLCAKKyAgICAyMTQsIDE2NCwgOCwgMywgMjE0LCAxNjcsIDgsIDMsIDIxNCwgMTY1LCA4LCAzLCAyMjYsIDE0NCwgOCwgMywgMjI2LCAxMTgsIAorICAgIDgsIDMsIDc4LCA4LCAzLCAyMjYsIDE3OSwgOCwgMywgMjQ1LCA0MywgOCwgMywgNzYsIDgsIDMsIDIxMSwgMTk1LCA4LCAzLCAKKyAgICAyNTEsIDIzNiwgOCwgMywgMjUxLCAyMzMsIDgsIDMsIDI1MiwgMTQsIDgsIDMsIDI1MSwgMjQ2LCA4LCAzLCAyNTIsIDMsIDgsIAorICAgIDMsIDI1MiwgMiwgOCwgMywgMjUyLCA1LCA4LCAzLCAyNTIsIDQsIDgsIDMsIDI1MiwgMTI5LCA4LCAzLCAyNTIsIDEyMSwgOCwgCisgICAgMywgMjUyLCAxOTksIDgsIDMsIDI1MiwgMTUwLCA4LCAzLCAyNTEsIDEwOSwgOCwgMywgMjUxLCAxMTMsIDgsIDMsIDI1MSwgCisgICAgMTEwLCA4LCAzLCAyNTEsIDE4NywgOCwgMywgMjUxLCAxNzEsIDgsIDMsIDI1MSwgMjEzLCA4LCAzLCAyNTEsIDE5MywgOCwgCisgICAgMywgMjUyLCAyOSwgOCwgMywgMjUyLCA4MywgOCwgMywgMjUyLCA0MSwgOCwgMywgMjUxLCA5NSwgOCwgMywgMjUxLCA5MiwgCisgICAgOCwgMywgMjUxLCAxMzMsIDgsIDMsIDI1MSwgMTA4LCA4LCAzLCAyNTEsIDEwMiwgOCwgMywgMjUxLCAxMDYsIDgsIDMsIAorICAgIDI1MSwgODAsIDgsIDMsIDI1MSwgNzgsIDgsIDMsIDI1MSwgODUsIDgsIDMsIDI1MSwgODMsIDgsIDMsIDI1MSwgODEsIDgsIAorICAgIDMsIDI1MSwgODIsIDgsIDMsIDIyNSwgNTIsIDgsIDMsIDIyNSwgNDgsIDgsIDMsIDIyNSwgMTExLCA4LCAzLCAyMjUsIDYyLCAKKyAgICA4LCAzLCAyMjUsIDc4LCA4LCAzLCAyMjUsIDEwNSwgOCwgMywgMjI1LCAxMDEsIDgsIDMsIDIyNSwgMjQ0LCA4LCAzLCAyMjUsIAorICAgIDIzNCwgOCwgMywgMTkxLCA4LCAzLCAyMjYsIDI1LCA4LCAzLCAyMjQsIDEzOCwgOCwgMywgMjI0LCAxNDAsIDgsIDMsIDIyNCwgCisgICAgMTM5LCA4LCAzLCAyMjQsIDIzNiwgOCwgMywgMjI0LCAyMjUsIDgsIDMsIDIyNSwgMTksIDgsIDMsIDIyNCwgMjQ4LCA4LCAzLCAKKyAgICAyMjQsIDEyNCwgOCwgMywgMjI0LCAxMjAsIDgsIDMsIDIyNCwgMTUzLCA4LCAzLCAyMjQsIDEzNywgOCwgMywgMjI0LCAxMjksIAorICAgIDgsIDMsIDIyNCwgMTM1LCA4LCAzLCAyMjQsIDEwMywgOCwgMywgMjI0LCAxMDIsIDgsIDMsIDIyNCwgMTA3LCA4LCAzLCAKKyAgICAyMjQsIDEwNiwgOCwgMywgMjI0LCAxMDQsIDgsIDMsIDIyNCwgMTA1LCA4LCAzLCAyNTIsIDEwNCwgOCwgMywgMjUyLCAxMDMsIAorICAgIDgsIDMsIDI1MiwgMTEwLCA4LCAzLCAyNTIsIDEwNSwgOCwgMywgMjUyLCAxMDcsIDgsIDMsIDI1MiwgMTA2LCA4LCAzLCAKKyAgICAyNTIsIDEwOSwgOCwgMywgMjUyLCAxMDgsIDgsIDMsIDI1MiwgMTE2LCA4LCAzLCAyNTIsIDExNSwgOCwgMywgMjUyLCAxMTksIAorICAgIDgsIDMsIDI1MiwgMTE3LCA4LCAzLCAyNTIsIDk1LCA4LCAzLCAyNTIsIDk3LCA4LCAzLCAyNTIsIDk2LCA4LCAzLCAyNTIsIAorICAgIDEwMCwgOCwgMywgMjUyLCA5OSwgOCwgMywgMjUyLCAxMDIsIDgsIDMsIDI1MiwgMTAxLCA4LCAzLCAyNTIsIDExMSwgOCwgMywgCisgICAgMjUyLCAxMTQsIDgsIDMsIDI1MiwgMTEyLCA4LCAzLCAyNTIsIDkxLCA4LCAzLCAyNTIsIDkwLCA4LCAzLCAyNTIsIDk4LCA4LCAKKyAgICAzLCAyNTIsIDk0LCA4LCAzLCAyNTIsIDkyLCA4LCAzLCAyNTIsIDkzLCA4LCAzLCAyNTIsIDg3LCA4LCAzLCAyNTIsIDg2LCAKKyAgICA4LCAzLCAyNTIsIDg5LCA4LCAzLCAyNTIsIDg4LCA4LCAzLCAyMjksIDE3NCwgOCwgMywgMjI5LCAxNzMsIDgsIDMsIDIyOSwgCisgICAgMTc5LCA4LCAzLCAyMjksIDE3NSwgOCwgMywgMjI5LCAxNzYsIDgsIDMsIDIyOSwgMTc4LCA4LCAzLCAyMjksIDE3NywgOCwgCisgICAgMywgMjI5LCAxODIsIDgsIDMsIDIyOSwgMTgxLCA4LCAzLCAyMjksIDE4NCwgOCwgMywgMjI5LCAxODMsIDgsIDMsIDIyOSwgCisgICAgMTcwLCA4LCAzLCAyMjksIDE2OSwgOCwgMywgMjI5LCAxNzIsIDgsIDMsIDIyOSwgMTcxLCA4LCAzLCAyMjksIDE2MywgOCwgCisgICAgMywgMjI5LCAxNjIsIDgsIDMsIDIyOSwgMTY3LCA4LCAzLCAyMjksIDE2NiwgOCwgMywgMjI5LCAxNjQsIDgsIDMsIDIyOSwgCisgICAgMTY1LCA4LCAzLCAyMjksIDE1NywgOCwgMywgMjI5LCAxNTYsIDgsIDMsIDIyOSwgMTYxLCA4LCAzLCAyMjksIDE2MCwgOCwgCisgICAgMywgMjI5LCAxNTgsIDgsIDMsIDIyOSwgMTU5LCA4LCAzLCAyNDEsIDExNywgOCwgMywgMjQxLCAxMTYsIDgsIDMsIDI0MSwgCisgICAgMTIyLCA4LCAzLCAyNDEsIDExOCwgOCwgMywgMjQxLCAxMTksIDgsIDMsIDI0MSwgMTIxLCA4LCAzLCAyNDEsIDEyMCwgOCwgCisgICAgMywgMjQxLCAxMjUsIDgsIDMsIDI0MSwgMTI0LCA4LCAzLCAyNDEsIDEyNywgOCwgMywgMjQxLCAxMjYsIDgsIDMsIDI0MSwgCisgICAgMTA4LCA4LCAzLCAyNDEsIDExMCwgOCwgMywgMjQxLCAxMDksIDgsIDMsIDI0MSwgMTEzLCA4LCAzLCAyNDEsIDExMiwgOCwgCisgICAgMywgMjQxLCAxMTUsIDgsIDMsIDI0MSwgMTE0LCA4LCAzLCAyNDEsIDEwNCwgOCwgMywgMjQxLCAxMDMsIDgsIDMsIDI0MSwgCisgICAgMTExLCA4LCAzLCAyNDEsIDEwNywgOCwgMywgMjQxLCAxMDUsIDgsIDMsIDI0MSwgMTA2LCA4LCAzLCAyNDEsIDk4LCA4LCAzLCAKKyAgICAyNDEsIDEwMiwgOCwgMywgMjQxLCAxMDEsIDgsIDMsIDI0MSwgOTksIDgsIDMsIDI0MSwgMTAwLCA4LCAzLCAyMzAsIDE3NywgCisgICAgOCwgMywgMjMwLCAxNzYsIDgsIDMsIDIzMCwgMjM1LCA4LCAzLCAyMzAsIDE4MywgOCwgMywgMjMwLCAyMDgsIDgsIDMsIAorICAgIDIzMCwgMjI2LCA4LCAzLCAyMzAsIDIyNCwgOCwgMywgMjMxLCAxNDQsIDgsIDMsIDIzMSwgMTM5LCA4LCAzLCAxODYsIDgsIAorICAgIDMsIDIzMSwgMTc3LCA4LCAzLCAyMzAsIDc5LCA4LCAzLCAyMzAsIDc4LCA4LCAzLCAyMzAsIDgyLCA4LCAzLCAyMzAsIDgwLCAKKyAgICA4LCAzLCAyMzAsIDEyNiwgOCwgMywgMjMwLCAxMTIsIDgsIDMsIDIzMCwgMTY2LCA4LCAzLCAyMzAsIDEzMSwgOCwgMywgCisgICAgMjMxLCAzMSwgOCwgMywgMjMxLCA5NiwgOCwgMywgMjMwLCA2MCwgOCwgMywgMjMwLCA1NiwgOCwgMywgMjMwLCAxMDcsIDgsIAorICAgIDMsIDIzMCwgNzUsIDgsIDMsIDIzMCwgNjgsIDgsIDMsIDIzMCwgNzMsIDgsIDMsIDIzMCwgMzMsIDgsIDMsIDIzMCwgMzIsIAorICAgIDgsIDMsIDIzMCwgMzgsIDgsIDMsIDIzMCwgMzUsIDgsIDMsIDI0NCwgOTEsIDgsIDMsIDI0NCwgODYsIDgsIDMsIDI0NCwgCisgICAgMTI5LCA4LCAzLCAyNDQsIDEwNiwgOCwgMywgMjQ0LCAxNzUsIDgsIDMsIDI0NCwgMTY2LCA4LCAzLCAyNDQsIDIwNCwgOCwgCisgICAgMywgMjQ0LCAxNzgsIDgsIDMsIDI0NCwgMTEsIDgsIDMsIDI0NCwgNTEsIDgsIDMsIDI0NCwgMzUsIDgsIDMsIDI0MywgMjI1LCAKKyAgICA4LCAzLCAyNDMsIDIyNCwgOCwgMywgMjQzLCAyNDEsIDgsIDMsIDI0MywgMjMwLCA4LCAzLCAyNDMsIDIyOCwgOCwgMywgCisgICAgMjQzLCAyMjksIDgsIDMsIDI0MywgMjEyLCA4LCAzLCAyNDMsIDIxMSwgOCwgMywgMjQzLCAyMTUsIDgsIDMsIDI0MywgMjEzLCAKKyAgICA4LCAzLCAyMTMsIDE0NCwgOCwgMywgMjEzLCAxMzksIDgsIDMsIDIxMywgMTc2LCA4LCAzLCAyMTMsIDE1MywgOCwgMywgCisgICAgMjEzLCAxNjYsIDgsIDMsIDIxMywgMTYzLCA4LCAzLCAyMTMsIDE2OCwgOCwgMywgMjEzLCAxNjcsIDgsIDMsIDIxNCwgNywgCisgICAgOCwgMywgMjE0LCAyLCA4LCAzLCAyMTQsIDI3LCA4LCAzLCAyMTQsIDE4LCA4LCAzLCAyMTMsIDEyNSwgOCwgMywgMjEzLCAKKyAgICAxMjEsIDgsIDMsIDIxMywgMTM4LCA4LCAzLCAyMTMsIDEyNiwgOCwgMywgMjEzLCAxNzgsIDgsIDMsIDIxMywgMjQ0LCA4LCAKKyAgICAzLCAyMTIsIDExMCwgOCwgMywgMjEyLCAxMDgsIDgsIDMsIDIxMiwgMTE2LCA4LCAzLCAyMTIsIDExMywgOCwgMywgMjEyLCAKKyAgICAxMTEsIDgsIDMsIDIxMiwgMTEyLCA4LCAzLCAyMTIsIDEwMiwgOCwgMywgMjEyLCAxMDEsIDgsIDMsIDIxMiwgMTA2LCA4LCAKKyAgICAzLCAyMTIsIDEwNSwgOCwgMywgMjEyLCAxMDMsIDgsIDMsIDIxMiwgMTA0LCA4LCAzLCAyNDcsIDE4NiwgOCwgMywgMjQ3LCAKKyAgICAxNzQsIDgsIDMsIDI0OCwgMTEsIDgsIDMsIDI0NywgMjExLCA4LCAzLCAyNDcsIDI0NCwgOCwgMywgMjQ3LCAyNDgsIDgsIDMsIAorICAgIDI0NywgMjQ3LCA4LCAzLCAyNDgsIDE2MCwgOCwgMywgMjQ4LCAxNTUsIDgsIDMsIDI0OCwgMjI5LCA4LCAzLCAyNDgsIDE4MCwgCisgICAgOCwgMywgMjQ2LCA3MCwgOCwgMywgMjQ2LCA3MSwgOCwgMywgMjQ3LCAxMjgsIDgsIDMsIDI0NiwgMTEwLCA4LCAzLCAyNDcsIAorICAgIDE1MywgOCwgMywgMjQ3LCAxMzAsIDgsIDMsIDI0OCwgMzgsIDgsIDMsIDI0OCwgOTgsIDgsIDMsIDI0OCwgNTMsIDgsIDMsIAorICAgIDI0NiwgNjEsIDgsIDMsIDI0NiwgNTksIDgsIDMsIDI0NiwgODYsIDgsIDMsIDI0NiwgNjksIDgsIDMsIDI0NiwgNjQsIDgsIAorICAgIDMsIDI0NiwgNjcsIDgsIDMsIDIxNiwgNjgsIDgsIDMsIDIxNiwgNjIsIDgsIDMsIDIxNiwgMTE4LCA4LCAzLCAyMTYsIDc3LCAKKyAgICA4LCAzLCAyMTYsIDExMCwgOCwgMywgMjE2LCAxMTIsIDgsIDMsIDIxNiwgMTExLCA4LCAzLCAyMTcsIDQ3LCA4LCAzLCAyMTcsIAorICAgIDM0LCA4LCAzLCAyMTcsIDEwNiwgOCwgMywgMjE3LCA1NSwgOCwgMywgMjE1LCAxMDMsIDgsIDMsIDIxNSwgMTAyLCA4LCAzLCAKKyAgICAyMTUsIDEwNSwgOCwgMywgMjE1LCAxMDQsIDgsIDMsIDIxNiwgNiwgOCwgMywgMjE2LCAyLCA4LCAzLCAxMTIsIDgsIDMsIAorICAgIDIxNiwgMTQsIDgsIDMsIDIxNiwgMjE0LCA4LCAzLCAyMTcsIDIzLCA4LCAzLCAyMTYsIDIzOCwgOCwgMywgMjE1LCA4OCwgOCwgCisgICAgMywgMjE1LCA4MywgOCwgMywgMjE1LCAxMTksIDgsIDMsIDIxNSwgMTAxLCA4LCAzLCAyMTUsIDg5LCA4LCAzLCAyMTUsIDk5LCAKKyAgICA4LCAzLCAyNDgsIDExNSwgOCwgMywgMjQ4LCAxMTQsIDgsIDMsIDI0OCwgMTIwLCA4LCAzLCAyNDgsIDExNiwgOCwgMywgCisgICAgMjQ4LCAxMTcsIDgsIDMsIDI0OCwgMTE5LCA4LCAzLCAyNDgsIDExOCwgOCwgMywgMjQ4LCAxMzYsIDgsIDMsIDI0OCwgMTM1LCAKKyAgICA4LCAzLCAyNDgsIDE0MywgOCwgMywgMjQ4LCAxMzcsIDgsIDMsIDI0OCwgMTA1LCA4LCAzLCAyNDgsIDEwNywgOCwgMywgCisgICAgMjQ4LCAxMDYsIDgsIDMsIDI0OCwgMTEwLCA4LCAzLCAyNDgsIDEwOSwgOCwgMywgMjQ4LCAxMTMsIDgsIDMsIDI0OCwgMTExLCAKKyAgICA4LCAzLCAyNDgsIDEyOCwgOCwgMywgMjQ4LCAxMzEsIDgsIDMsIDI0OCwgMTI5LCA4LCAzLCAyNDgsIDEwMSwgOCwgMywgCisgICAgMjQ4LCAxMDAsIDgsIDMsIDI0OCwgMTA4LCA4LCAzLCAyNDgsIDEwNCwgOCwgMywgMjQ4LCAxMDIsIDgsIDMsIDI0OCwgMTAzLCAKKyAgICA4LCAzLCAyMjksIDEzMSwgOCwgMywgMjI5LCAxMzAsIDgsIDMsIDIyOSwgMTM4LCA4LCAzLCAyMjksIDEzMywgOCwgMywgCisgICAgMjI5LCAxMzQsIDgsIDMsIDIyOSwgMTM1LCA4LCAzLCAyMjksIDE0NywgOCwgMywgMjI5LCAxNDYsIDgsIDMsIDIyOSwgMTUzLCAKKyAgICA4LCAzLCAyMjksIDE0OCwgOCwgMywgMjI5LCAxMjMsIDgsIDMsIDIyOSwgMTIyLCA4LCAzLCAyMjksIDEyOSwgOCwgMywgCisgICAgMjI5LCAxMjQsIDgsIDMsIDIyOSwgMTM5LCA4LCAzLCAyMjksIDE0NSwgOCwgMywgMjI5LCAxNDMsIDgsIDMsIDIyOSwgMTE1LCAKKyAgICA4LCAzLCAyMjksIDExNCwgOCwgMywgMjI5LCAxMjAsIDgsIDMsIDIyOSwgMTE4LCA4LCAzLCAyMjksIDExNiwgOCwgMywgCisgICAgMjI5LCAxMTcsIDgsIDMsIDI0MSwgODQsIDgsIDMsIDI0MSwgODMsIDgsIDMsIDI0MSwgOTAsIDgsIDMsIDI0MSwgODUsIDgsIAorICAgIDMsIDI0MSwgODcsIDgsIDMsIDI0MSwgODYsIDgsIDMsIDI0MSwgODksIDgsIDMsIDI0MSwgODgsIDgsIDMsIDI0MSwgOTUsIAorICAgIDgsIDMsIDI0MSwgOTQsIDgsIDMsIDI0MSwgOTcsIDgsIDMsIDI0MSwgOTYsIDgsIDMsIDI0MSwgNzgsIDgsIDMsIDI0MSwgCisgICAgNzksIDgsIDMsIDI0MSwgODEsIDgsIDMsIDI0MSwgODAsIDgsIDMsIDI0MSwgODIsIDgsIDMsIDI0MSwgOTEsIDgsIDMsIAorICAgIDI0MSwgOTMsIDgsIDMsIDI0MSwgOTIsIDgsIDMsIDI0MSwgNzcsIDgsIDMsIDIyOCwgMTk0LCA4LCAzLCAyMjgsIDE5MiwgOCwgCisgICAgMywgMjI4LCAyMzgsIDgsIDMsIDIyOCwgMTk3LCA4LCAzLCAyMjgsIDIyMCwgOCwgMywgMjI4LCAyMzQsIDgsIDMsIDIyOCwgCisgICAgMjMzLCA4LCAzLCAyMjksIDE4OCwgOCwgMywgMTk4LCA4LCAzLCAyMjksIDIwMiwgOCwgMywgMjI3LCAxOTAsIDgsIDMsIAorICAgIDIyNywgMTkyLCA4LCAzLCAyMjcsIDE5MSwgOCwgMywgMjI4LCA1NiwgOCwgMywgMjI4LCA0MywgOCwgMywgMjI4LCA3OSwgOCwgCisgICAgMywgMjI4LCA2NSwgOCwgMywgMjI5LCA4OCwgOCwgMywgMjI5LCAxMTIsIDgsIDMsIDIyOSwgOTksIDgsIDMsIDIyNywgMTg1LCAKKyAgICA4LCAzLCAyMjcsIDE4MSwgOCwgMywgMjI3LCAyNDIsIDgsIDMsIDIyNywgMTg5LCA4LCAzLCAyMjcsIDE4NywgOCwgMywgCisgICAgMjI3LCAxODgsIDgsIDMsIDI0MSwgMTQ4LCA4LCAzLCAyNDEsIDE0NywgOCwgMywgMjQxLCAxNTMsIDgsIDMsIDI0MSwgMTQ5LCAKKyAgICA4LCAzLCAyNDEsIDE1MCwgOCwgMywgMjQxLCAxNTIsIDgsIDMsIDI0MSwgMTUxLCA4LCAzLCAyNDEsIDE1OCwgOCwgMywgCisgICAgMjQxLCAxNTcsIDgsIDMsIDI0MSwgMTYwLCA4LCAzLCAyNDEsIDE1OSwgOCwgMywgMjQxLCAxNDAsIDgsIDMsIDI0MSwgMTQyLCAKKyAgICA4LCAzLCAyNDEsIDE0MSwgOCwgMywgMjQxLCAxNDQsIDgsIDMsIDI0MSwgMTQ2LCA4LCAzLCAyNDEsIDE0NSwgOCwgMywgCisgICAgMjQxLCAxNTQsIDgsIDMsIDI0MSwgMTU2LCA4LCAzLCAyNDEsIDE1NSwgOCwgMywgMjQxLCAxMzYsIDgsIDMsIDI0MSwgMTM1LCAKKyAgICA4LCAzLCAyNDEsIDE0MywgOCwgMywgMjQxLCAxMzksIDgsIDMsIDI0MSwgMTM3LCA4LCAzLCAyNDEsIDEzOCwgOCwgMywgCisgICAgMjQxLCAxMzAsIDgsIDMsIDI0MSwgMTI5LCA4LCAzLCAyNDEsIDEzNCwgOCwgMywgMjQxLCAxMzMsIDgsIDMsIDI0MSwgMTMxLCAKKyAgICA4LCAzLCAyNDEsIDEzMiwgOCwgMywgMjMyLCAyMDEsIDgsIDMsIDIzMiwgMTk1LCA4LCAzLCAyMzIsIDI0NywgOCwgMywgCisgICAgMjMyLCAyMDgsIDgsIDMsIDIzMiwgMjM5LCA4LCAzLCAyMzIsIDIzOCwgOCwgMywgMjMyLCAyNDIsIDgsIDMsIDIzMiwgMjQwLCAKKyAgICA4LCAzLCAyMzMsIDg1LCA4LCAzLCAyMzMsIDc1LCA4LCAzLCAyMzMsIDE0MSwgOCwgMywgMjMzLCA5NCwgOCwgMywgMjMyLCAKKyAgICA4NCwgOCwgMywgMjMyLCA4MywgOCwgMywgMjMyLCA4NiwgOCwgMywgMjMyLCA4NSwgOCwgMywgMjMyLCAxMjIsIDgsIDMsIAorICAgIDIzMiwgMTEyLCA4LCAzLCAyMzIsIDE2MiwgOCwgMywgMjMyLCAxMjYsIDgsIDMsIDIzMywgOCwgOCwgMywgMjMzLCA2NCwgOCwgCisgICAgMywgMjMzLCAyMywgOCwgMywgMjMyLCA3OSwgOCwgMywgMjMyLCA3NywgOCwgMywgMjMyLCAxMDMsIDgsIDMsIDIzMiwgODIsIAorICAgIDgsIDMsIDIzMiwgODAsIDgsIDMsIDIzMiwgODEsIDgsIDMsIDIzMiwgNTksIDgsIDMsIDIzMiwgNTgsIDgsIDMsIDIzMiwgCisgICAgNjcsIDgsIDMsIDIzMiwgNjIsIDgsIDMsIDIzMiwgNjAsIDgsIDMsIDIzMiwgNjEsIDgsIDMsIDI0MiwgMTk2LCA4LCAzLCAKKyAgICAyNDIsIDE5NSwgOCwgMywgMjQyLCAyMjEsIDgsIDMsIDI0MiwgMjA2LCA4LCAzLCAyNDIsIDIxMywgOCwgMywgMjQyLCAyMTIsIAorICAgIDgsIDMsIDI0MiwgMjE1LCA4LCAzLCAyNDIsIDIxNCwgOCwgMywgMjQzLCA5NiwgOCwgMywgMjQzLCA5MSwgOCwgMywgMjQzLCAKKyAgICAxNDIsIDgsIDMsIDI0MywgMTA2LCA4LCAzLCAyNDIsIDk4LCA4LCAzLCAyNDIsIDk3LCA4LCAzLCAyNDIsIDEwMCwgOCwgMywgCisgICAgMjQyLCA5OSwgOCwgMywgMjQyLCAxNjEsIDgsIDMsIDI0MiwgMTU5LCA4LCAzLCAyNDIsIDE4MSwgOCwgMywgMjQyLCAxNjksIAorICAgIDgsIDMsIDI0MywgNDAsIDgsIDMsIDI0MywgMzgsIDgsIDMsIDI0MywgNjksIDgsIDMsIDI0MywgNTEsIDgsIDMsIDI0MiwgCisgICAgODgsIDgsIDMsIDI0MiwgODcsIDgsIDMsIDI0MiwgMTIwLCA4LCAzLCAyNDIsIDk2LCA4LCAzLCAyNDIsIDg5LCA4LCAzLCAKKyAgICAyNDIsIDk1LCA4LCAzLCAyMzQsIDY3LCA4LCAzLCAyMzQsIDY2LCA4LCAzLCAyMzQsIDk4LCA4LCAzLCAyMzQsIDgxLCA4LCAKKyAgICAzLCAyMzQsIDkxLCA4LCAzLCAyMzQsIDk0LCA4LCAzLCAyMzQsIDkyLCA4LCAzLCAyMzQsIDIwOCwgOCwgMywgMjM0LCAxOTYsIAorICAgIDgsIDMsIDE3NiwgOCwgMywgMjM0LCAyMzQsIDgsIDMsIDIzMywgMjA2LCA4LCAzLCAyMzMsIDIxMSwgOCwgMywgMjMzLCAKKyAgICAyMDgsIDgsIDMsIDIzNCwgNiwgOCwgMywgMjM0LCAyLCA4LCAzLCAyMzQsIDM0LCA4LCAzLCAyMzQsIDEzLCA4LCAzLCAyMzQsIAorICAgIDE2MiwgOCwgMywgMjM0LCAxNDYsIDgsIDMsIDIzNCwgMTg4LCA4LCAzLCAyMzQsIDE2NSwgOCwgMywgMjMzLCAxOTUsIDgsIAorICAgIDMsIDIzMywgMTkyLCA4LCAzLCAyMzMsIDIyMywgOCwgMywgMjMzLCAyMDUsIDgsIDMsIDIzMywgMTk4LCA4LCAzLCAyMzMsIAorICAgIDIwMiwgOCwgMywgMjQzLCAyMiwgOCwgMywgMjQzLCAyMSwgOCwgMywgMjQzLCAyNiwgOCwgMywgMjQzLCAyMywgOCwgMywgCisgICAgMjQzLCAyNSwgOCwgMywgMjQzLCAyNCwgOCwgMywgMjQzLCAzMywgOCwgMywgMjQzLCAzMiwgOCwgMywgMjQzLCAzNiwgOCwgCisgICAgMywgMjQzLCAzNCwgOCwgMywgMjQzLCAxMywgOCwgMywgMjQzLCAxMiwgOCwgMywgMjQzLCAxNSwgOCwgMywgMjQzLCAxNCwgCisgICAgOCwgMywgMjQzLCAxOCwgOCwgMywgMjQzLCAxNywgOCwgMywgMjQzLCAyMCwgOCwgMywgMjQzLCAxOSwgOCwgMywgMjQzLCAKKyAgICAyOCwgOCwgMywgMjQzLCAyNywgOCwgMywgMjQzLCAzMSwgOCwgMywgMjQzLCAyOSwgOCwgMywgMjQzLCA4LCA4LCAzLCAyNDMsIAorICAgIDcsIDgsIDMsIDI0MywgMTYsIDgsIDMsIDI0MywgMTEsIDgsIDMsIDI0MywgOSwgOCwgMywgMjQzLCAxMCwgOCwgMywgMjMwLCAKKyAgICAyNTQsIDgsIDMsIDIzMCwgMjU1LCA4LCAzLCAyMzEsIDE3LCA4LCAzLCAyMzEsIDE2LCA4LCAzLCAyMzEsIDE5LCA4LCAzLCAKKyAgICAyMzEsIDE4LCA4LCAzLCAyMzAsIDI0NSwgOCwgMywgMjMwLCAyNDcsIDgsIDMsIDIzMCwgMjQ2LCA4LCAzLCAyMzAsIDI1MCwgCisgICAgOCwgMywgMjMwLCAyNDksIDgsIDMsIDIzMCwgMjUyLCA4LCAzLCAyMzAsIDI1MSwgOCwgMywgMjMxLCAwLCA4LCAzLCAyMzEsIAorICAgIDIsIDgsIDMsIDIzMSwgMSwgOCwgMywgMjMwLCAyNDEsIDgsIDMsIDIzMCwgMjQwLCA4LCAzLCAyMzAsIDI0OCwgOCwgMywgCisgICAgMjMwLCAyNDQsIDgsIDMsIDIzMCwgMjQyLCA4LCAzLCAyMzAsIDI0MywgOCwgMywgMjQwLCAxODcsIDgsIDMsIDI0MCwgMTg2LCAKKyAgICA4LCAzLCAyNDAsIDE5MywgOCwgMywgMjQwLCAxODgsIDgsIDMsIDI0MCwgMTkwLCA4LCAzLCAyNDAsIDE4OSwgOCwgMywgCisgICAgMjQwLCAxOTIsIDgsIDMsIDI0MCwgMTkxLCA4LCAzLCAyNDAsIDE5OCwgOCwgMywgMjQwLCAxOTcsIDgsIDMsIDI0MCwgMjAwLCAKKyAgICA4LCAzLCAyNDAsIDE5OSwgOCwgMywgMjQwLCAxNzksIDgsIDMsIDI0MCwgMTc4LCA4LCAzLCAyNDAsIDE4MSwgOCwgMywgCisgICAgMjQwLCAxODAsIDgsIDMsIDI0MCwgMTgzLCA4LCAzLCAyNDAsIDE4MiwgOCwgMywgMjQwLCAxODUsIDgsIDMsIDI0MCwgMTg0LCAKKyAgICA4LCAzLCAyNDAsIDE5NCwgOCwgMywgMjQwLCAxOTYsIDgsIDMsIDI0MCwgMTk1LCA4LCAzLCAyMjksIDI5LCA4LCAzLCAyMjksIAorICAgIDMxLCA4LCAzLCAyMjksIDMwLCA4LCAzLCAyMjksIDcyLCA4LCAzLCAyMjksIDcwLCA4LCAzLCAyMjksIDgyLCA4LCAzLCAKKyAgICAyMjksIDc1LCA4LCAzLCAyMjgsIDI0OCwgOCwgMywgMjI4LCAyNDcsIDgsIDMsIDIyOCwgMjQ5LCA4LCAzLCAyMjksIDEsIDgsIAorICAgIDMsIDIyOCwgMjU0LCA4LCAzLCAyMjksIDksIDgsIDMsIDIyOSwgMywgOCwgMywgMjI5LCA2MywgOCwgMywgMjI5LCA2OSwgOCwgCisgICAgMywgMjI5LCA2NSwgOCwgMywgMjQxLCAxNjMsIDgsIDMsIDI0MSwgMTczLCA4LCAzLCAyNDEsIDE4MiwgOCwgMywgMjQyLCAyLCAKKyAgICA4LCAzLCAyNDEsIDI1MCwgOCwgMywgMTYyLCA4LCAzLCAyNDIsIDEzLCA4LCAzLCAyNDAsIDIxMywgOCwgMywgMjQwLCAyMTIsIAorICAgIDgsIDMsIDI0MCwgMjE1LCA4LCAzLCAyNDAsIDIxNCwgOCwgMywgMjQwLCAyNDksIDgsIDMsIDI0MCwgMjQwLCA4LCAzLCAKKyAgICAyNDEsIDc1LCA4LCAzLCAyNDEsIDU0LCA4LCAzLCAyNDEsIDIwMSwgOCwgMywgMjQxLCAyNDUsIDgsIDMsIDI0MSwgMjEzLCAKKyAgICA4LCAzLCAyMTIsIDQzLCA4LCAzLCAyMTIsIDI4LCA4LCAzLCAyMTIsIDY1LCA4LCAzLCAyMTIsIDUxLCA4LCAzLCAyMTEsIAorICAgIDE4NSwgOCwgMywgMjExLCAxODcsIDgsIDMsIDIxMSwgMTg2LCA4LCAzLCAyMTEsIDIwMywgOCwgMywgMjExLCAyMjcsIDgsIAorICAgIDMsIDIxMSwgMjEwLCA4LCAzLCAyMTIsIDUsIDgsIDMsIDIxMiwgMjIsIDgsIDMsIDIxMiwgMTAsIDgsIDMsIDIxMCwgMzAsIAorICAgIDgsIDMsIDIxMCwgMjksIDgsIDMsIDIxMCwgNDQsIDgsIDMsIDIxMCwgMzIsIDgsIDMsIDIxMCwgMzcsIDgsIDMsIDIxMCwgCisgICAgMzksIDgsIDMsIDIxMCwgMzgsIDgsIDMsIDIxMCwgMTAyLCA4LCAzLCAyMTAsIDk5LCA4LCAzLCAyMTAsIDExNiwgOCwgMywgCisgICAgMjEwLCAxMDUsIDgsIDMsIDIxMCwgNiwgOCwgMywgMjEwLCA4LCA4LCAzLCAyMTAsIDcsIDgsIDMsIDIxMCwgMTksIDgsIDMsIAorICAgIDIxMCwgMTgsIDgsIDMsIDIxMCwgMjMsIDgsIDMsIDIxMCwgMjAsIDgsIDMsIDIxMCwgODQsIDgsIDMsIDIxMCwgOTQsIDgsIAorICAgIDMsIDIxMCwgODgsIDgsIDMsIDIxMCwgMiwgOCwgMywgMjEwLCAxLCA4LCAzLCAyMTAsIDEzLCA4LCAzLCAyMTAsIDUsIDgsIAorICAgIDMsIDIxMCwgMywgOCwgMywgMjEwLCA0LCA4LCAzLCAyMDksIDI0NSwgOCwgMywgMjA5LCAyNDQsIDgsIDMsIDIwOSwgMjUwLCAKKyAgICA4LCAzLCAyMDksIDI0OCwgOCwgMywgMjA5LCAyNDYsIDgsIDMsIDIwOSwgMjQ3LCA4LCAzLCAyNTAsIDM2LCA4LCAzLCAyNTAsIAorICAgIDMyLCA4LCAzLCAyNTAsIDU5LCA4LCAzLCAyNTAsIDQ1LCA4LCAzLCAyNTAsIDU2LCA4LCAzLCAyNTAsIDUwLCA4LCAzLCAKKyAgICAyNTAsIDU4LCA4LCAzLCAyNTAsIDU3LCA4LCAzLCAyNTAsIDIzMiwgOCwgMywgMjUwLCAyMjUsIDgsIDMsIDI1MSwgNDEsIDgsIAorICAgIDMsIDI1MSwgMywgOCwgMywgMjQ5LCAxMTIsIDgsIDMsIDI0OSwgMTE0LCA4LCAzLCAyNDksIDExMywgOCwgMywgMjQ5LCAKKyAgICAxNjEsIDgsIDMsIDI0OSwgMTUyLCA4LCAzLCAyNDksIDI0NiwgOCwgMywgMjQ5LCAxNzcsIDgsIDMsIDI1MCwgMTY4LCA4LCAKKyAgICAzLCAyNTAsIDE5OCwgOCwgMywgMjUwLCAxNzMsIDgsIDMsIDI0OSwgOTIsIDgsIDMsIDI0OSwgOTAsIDgsIDMsIDI0OSwgCisgICAgMTIwLCA4LCAzLCAyNDksIDExMCwgOCwgMywgMjQ5LCA5NywgOCwgMywgMjQ5LCAxMDksIDgsIDMsIDI0OSwgNzEsIDgsIDMsIAorICAgIDI0OSwgNzAsIDgsIDMsIDI0OSwgODEsIDgsIDMsIDI0OSwgNzcsIDgsIDMsIDI0OSwgNzIsIDgsIDMsIDI0OSwgNzQsIDgsIAorICAgIDMsIDIwOSwgMjI4LCA4LCAzLCAyMDksIDIyNywgOCwgMywgMjA5LCAyMzQsIDgsIDMsIDIwOSwgMjI5LCA4LCAzLCAyMDksIAorICAgIDIzMSwgOCwgMywgMjA5LCAyMzAsIDgsIDMsIDIwOSwgMjMzLCA4LCAzLCAyMDksIDIzMiwgOCwgMywgMjA5LCAyNDAsIDgsIAorICAgIDMsIDIwOSwgMjM5LCA4LCAzLCAyMDksIDI0MywgOCwgMywgMjA5LCAyNDEsIDgsIDMsIDIwOSwgMjI0LCA4LCAzLCAyMDksIAorICAgIDIyNiwgOCwgMywgMjA5LCAyMjUsIDgsIDMsIDIwOSwgMjM1LCA4LCAzLCAyMDksIDIzOCwgOCwgMywgMjA5LCAyMzYsIDgsIAorICAgIDMsIDIwOSwgMjE3LCA4LCAzLCAyMDksIDIyMSwgOCwgMywgMjA5LCAyMjAsIDgsIDMsIDIwOSwgMjE4LCA4LCAzLCAyMDksIAorICAgIDIxOSwgOCwgMywgMjA5LCAyMTEsIDgsIDMsIDIwOSwgMjEwLCA4LCAzLCAyMDksIDIxNiwgOCwgMywgMjA5LCAyMTQsIDgsIAorICAgIDMsIDIwOSwgMjEyLCA4LCAzLCAyMDksIDIxMywgOCwgMywgMjI3LCAxMDgsIDgsIDMsIDIyNywgMTA3LCA4LCAzLCAyMjcsIAorICAgIDExMywgOCwgMywgMjI3LCAxMDksIDgsIDMsIDIyNywgMTEwLCA4LCAzLCAyMjcsIDExMiwgOCwgMywgMjI3LCAxMTEsIDgsIAorICAgIDMsIDIyNywgMTE4LCA4LCAzLCAyMjcsIDExNywgOCwgMywgMjI3LCAxMjEsIDgsIDMsIDIyNywgMTIwLCA4LCAzLCAyMjcsIAorICAgIDEwMSwgOCwgMywgMjI3LCAxMDIsIDgsIDMsIDIyNywgMTA1LCA4LCAzLCAyMjcsIDEwNiwgOCwgMywgMjI3LCAxMTQsIDgsIAorICAgIDMsIDIyNywgMTE2LCA4LCAzLCAyMjcsIDk2LCA4LCAzLCAyMjcsIDEwNCwgOCwgMywgMjI3LCAxMDAsIDgsIDMsIDIyNywgCisgICAgOTcsIDgsIDMsIDIyNywgOTgsIDgsIDMsIDIyNywgOTEsIDgsIDMsIDIyNywgOTAsIDgsIDMsIDIyNywgOTUsIDgsIDMsIAorICAgIDIyNywgOTQsIDgsIDMsIDIyNywgOTIsIDgsIDMsIDIyNywgOTMsIDgsIDMsIDIxOSwgMTI5LCA4LCAzLCAxOTUsIDgsIDMsIAorICAgIDIxOSwgMTkzLCA4LCAzLCAyMTksIDEzMiwgOCwgMywgMjE5LCAxODUsIDgsIDMsIDIxOSwgMTg4LCA4LCAzLCAyMTksIDE4NiwgCisgICAgOCwgMywgMjIxLCAyMjgsIDgsIDMsIDIyMSwgMjE2LCA4LCAzLCAyMDYsIDgsIDMsIDIyMSwgMjM2LCA4LCAzLCAyMTgsIDI5LCAKKyAgICA4LCAzLCAyMTgsIDMxLCA4LCAzLCAyMTgsIDMwLCA4LCAzLCAyMTksIDM2LCA4LCAzLCAyMTksIDI1LCA4LCAzLCAyMTksIAorICAgIDYwLCA4LCAzLCAyMTksIDQwLCA4LCAzLCAyMjAsIDExNiwgOCwgMywgMjIxLCAxODMsIDgsIDMsIDIyMCwgMTQxLCA4LCAzLCAKKyAgICAyMTgsIDYsIDgsIDMsIDIxOCwgNCwgOCwgMywgMjE4LCA4NCwgOCwgMywgMjE4LCAyOCwgOCwgMywgMjE4LCAxMCwgOCwgMywgCisgICAgMjE4LCAxOCwgOCwgMywgMjE3LCAxNjcsIDgsIDMsIDIxNywgMTY2LCA4LCAzLCAyMTcsIDIzMywgOCwgMywgMjE3LCAxNzQsIAorICAgIDgsIDMsIDIxNywgMTY5LCA4LCAzLCAyMTcsIDE3MywgOCwgMywgMjE4LCAxODgsIDgsIDMsIDIxOCwgMTg3LCA4LCAzLCAKKyAgICAyMTgsIDE5NCwgOCwgMywgMjE4LCAxODksIDgsIDMsIDIxOCwgMTkxLCA4LCAzLCAyMTgsIDE5MywgOCwgMywgMjE4LCAxOTIsIAorICAgIDgsIDMsIDIxOCwgMjAyLCA4LCAzLCAyMTgsIDIwMCwgOCwgMywgMjE4LCAyMjUsIDgsIDMsIDIxOCwgMjAzLCA4LCAzLCAKKyAgICAyMTgsIDE4MywgOCwgMywgMjE4LCAxODIsIDgsIDMsIDIxOCwgMTg2LCA4LCAzLCAyMTgsIDE4NCwgOCwgMywgMjE4LCAxOTYsIAorICAgIDgsIDMsIDIxOCwgMTk5LCA4LCAzLCAyMTgsIDE5NywgOCwgMywgMjE4LCAxNzksIDgsIDMsIDIxOCwgMTc3LCA4LCAzLCAKKyAgICAyMTgsIDE4MSwgOCwgMywgMjE4LCAxODAsIDgsIDMsIDIxOCwgMTcyLCA4LCAzLCAyMTgsIDE3MSwgOCwgMywgMjE4LCAxNzYsIAorICAgIDgsIDMsIDIxOCwgMTc1LCA4LCAzLCAyMTgsIDE3MywgOCwgMywgMjE4LCAxNzQsIDgsIDMsIDIxMCwgNzcsIDgsIDMsIDIxMCwgCisgICAgNzYsIDgsIDMsIDIxMCwgODIsIDgsIDMsIDIxMCwgNzksIDgsIDMsIDIxMCwgNTksIDgsIDMsIDIxMCwgNjEsIDgsIDMsIAorICAgIDIxMCwgNjAsIDgsIDMsIDIxMCwgNjQsIDgsIDMsIDIxMCwgNjMsIDgsIDMsIDIxMCwgNjcsIDgsIDMsIDIxMCwgNjUsIDgsIAorICAgIDMsIDIxMCwgNzEsIDgsIDMsIDIxMCwgNzAsIDgsIDMsIDIxMCwgNzQsIDgsIDMsIDIxMCwgNzIsIDgsIDMsIDIxMCwgNTUsIAorICAgIDgsIDMsIDIxMCwgNTQsIDgsIDMsIDIxMCwgNjIsIDgsIDMsIDIxMCwgNTgsIDgsIDMsIDIxMCwgNTYsIDgsIDMsIDIxMCwgCisgICAgNTcsIDgsIDMsIDIxMCwgNDcsIDgsIDMsIDIxMCwgNDYsIDgsIDMsIDIxMCwgNTEsIDgsIDMsIDIxMCwgNTAsIDgsIDMsIAorICAgIDIxMCwgNDgsIDgsIDMsIDIxMCwgNDksIDgsIDMsIDI1MCwgMTQ0LCA4LCAzLCAyNTAsIDE0MSwgOCwgMywgMjUwLCAxNjUsIAorICAgIDgsIDMsIDI1MCwgMTUyLCA4LCAzLCAyNTAsIDczLCA4LCAzLCAyNTAsIDcyLCA4LCAzLCAyNTAsIDc1LCA4LCAzLCAyNTAsIAorICAgIDc0LCA4LCAzLCAyNTAsIDg3LCA4LCAzLCAyNTAsIDg2LCA4LCAzLCAyNTAsIDk0LCA4LCAzLCAyNTAsIDg5LCA4LCAzLCAKKyAgICAyNTAsIDEyMywgOCwgMywgMjUwLCAxMjEsIDgsIDMsIDI1MCwgMTM5LCA4LCAzLCAyNTAsIDEyOSwgOCwgMywgMjUwLCA2NywgCisgICAgOCwgMywgMjUwLCA3NywgOCwgMywgMjUwLCA3MSwgOCwgMywgMjUwLCA2OCwgOCwgMywgMjUwLCA3MCwgOCwgMywgMjUwLCAKKyAgICA2MSwgOCwgMywgMjUwLCA2MCwgOCwgMywgMjUwLCA2NSwgOCwgMywgMjUwLCA2NCwgOCwgMywgMjUwLCA2MiwgOCwgMywgCisgICAgMjUwLCA2MywgOCwgMywgMjIyLCAxNzcsIDgsIDMsIDIyMiwgMTgxLCA4LCAzLCAyMjIsIDE2MCwgOCwgMywgMjIyLCAxNjEsIAorICAgIDgsIDMsIDIyMiwgMTY0LCA4LCAzLCAyMjIsIDE2MywgOCwgMywgMjIyLCAxNjcsIDgsIDMsIDIyMiwgMTY1LCA4LCAzLCAKKyAgICAyMjIsIDE3MSwgOCwgMywgMjIyLCAxNzAsIDgsIDMsIDIyMiwgMTc2LCA4LCAzLCAyMjIsIDE3MiwgOCwgMywgMjIyLCAxNTYsIAorICAgIDgsIDMsIDIyMiwgMTU0LCA4LCAzLCAyMjIsIDE2MiwgOCwgMywgMjIyLCAxNTksIDgsIDMsIDIyMiwgMTU3LCA4LCAzLCAKKyAgICAyMjIsIDE1OCwgOCwgMywgMjIyLCAxNDksIDgsIDMsIDIyMiwgMTQ4LCA4LCAzLCAyMjIsIDE1MywgOCwgMywgMjIyLCAxNTIsIAorICAgIDgsIDMsIDIyMiwgMTUwLCA4LCAzLCAyMjIsIDE1MSwgOCwgMywgMjI4LCAzOSwgOCwgMywgMjI4LCAzOCwgOCwgMywgMjI4LCAKKyAgICA0MSwgOCwgMywgMjI4LCA0MCwgOCwgMywgMjI4LCAzMSwgOCwgMywgMjI4LCAzMywgOCwgMywgMjI4LCAzMiwgOCwgMywgCisgICAgMjI4LCAzNSwgOCwgMywgMjI4LCAzNCwgOCwgMywgMjI4LCAzNywgOCwgMywgMjI4LCAzNiwgOCwgMywgMjI4LCAyNiwgOCwgCisgICAgMywgMjI4LCAyNSwgOCwgMywgMjI4LCAzMCwgOCwgMywgMjI4LCAyOSwgOCwgMywgMjI4LCAyNywgOCwgMywgMjI4LCAyOCwgCisgICAgOCwgMywgMjI4LCAyMCwgOCwgMywgMjI4LCAxOSwgOCwgMywgMjI4LCAyNCwgOCwgMywgMjI4LCAyMywgOCwgMywgMjI4LCAKKyAgICAyMSwgOCwgMywgMjI4LCAyMiwgOCwgMywgMjIwLCA3NCwgOCwgMywgMjIwLCA2OSwgOCwgMywgMjIwLCAxMDQsIDgsIDMsIAorICAgIDIyMCwgODUsIDgsIDMsIDIxOSwgMjE3LCA4LCAzLCAyMTksIDIxOSwgOCwgMywgMjE5LCAyMTgsIDgsIDMsIDIxOSwgMjM4LCAKKyAgICA4LCAzLCAyMTksIDIzNSwgOCwgMywgMjIwLCA5LCA4LCAzLCAyMjAsIDAsIDgsIDMsIDIyMCwgNDQsIDgsIDMsIDIyMCwgMzcsIAorICAgIDgsIDMsIDIyMCwgNjUsIDgsIDMsIDIyMCwgNTIsIDgsIDMsIDIxOSwgMjEzLCA4LCAzLCAyMTksIDIxMSwgOCwgMywgMjE5LCAKKyAgICAyMjcsIDgsIDMsIDIxOSwgMjE2LCA4LCAzLCAyMTksIDIxNCwgOCwgMywgMjE5LCAyMTUsIDgsIDMsIDIxOSwgMTk2LCA4LCAKKyAgICAzLCAyMTksIDE5NSwgOCwgMywgMjE5LCAyMDIsIDgsIDMsIDIxOSwgMTk5LCA4LCAzLCAyMTksIDE5NywgOCwgMywgMjE5LCAKKyAgICAxOTgsIDgsIDMsIDIyMywgMTQ0LCA4LCAzLCAyMjMsIDEzOCwgOCwgMywgMjA1LCA4LCAzLCAyMjMsIDE1MCwgOCwgMywgCisgICAgMjIyLCAxMjIsIDgsIDMsIDIyMiwgMTI0LCA4LCAzLCAyMjIsIDEyMywgOCwgMywgMjIyLCAxOTAsIDgsIDMsIDIyMiwgMTgzLCAKKyAgICA4LCAzLCAyMjIsIDIxMywgOCwgMywgMjIyLCAxOTQsIDgsIDMsIDIyMywgNDYsIDgsIDMsIDIyMywgMTMxLCA4LCAzLCAyMjMsIAorICAgIDg0LCA4LCAzLCAyMjIsIDExNSwgOCwgMywgMjIyLCAxMTIsIDgsIDMsIDIyMiwgMTQyLCA4LCAzLCAyMjIsIDEyMSwgOCwgMywgCisgICAgMjIyLCAxMTcsIDgsIDMsIDIyMiwgMTE4LCA4LCAzLCAyMjIsIDk3LCA4LCAzLCAyMjIsIDk2LCA4LCAzLCAyMjIsIDEwMiwgCisgICAgOCwgMywgMjIyLCAxMDAsIDgsIDMsIDIyMiwgOTgsIDgsIDMsIDIyMiwgOTksIDgsIDMsIDIzNSwgMTA0LCA4LCAzLCAyMzUsIAorICAgIDEwMywgOCwgMywgMjM1LCAxMTQsIDgsIDMsIDIzNSwgMTA1LCA4LCAzLCAyMzUsIDExMCwgOCwgMywgMjM1LCAxMDksIDgsIAorICAgIDMsIDIzNSwgMTEyLCA4LCAzLCAyMzUsIDExMSwgOCwgMywgMjM1LCA0NywgOCwgMywgMjM1LCA0NiwgOCwgMywgMjM1LCA0OSwgCisgICAgOCwgMywgMjM1LCA0OCwgOCwgMywgMjM1LCA2MiwgOCwgMywgMjM1LCA2MCwgOCwgMywgMjM1LCA3NCwgOCwgMywgMjM1LCAKKyAgICA2NCwgOCwgMywgMjM1LCA0MCwgOCwgMywgMjM1LCAzOCwgOCwgMywgMjM1LCA1NywgOCwgMywgMjM1LCA0NSwgOCwgMywgCisgICAgMjM1LCA0MiwgOCwgMywgMjM1LCA0MywgOCwgMywgMjM1LCAzMiwgOCwgMywgMjM1LCAzMSwgOCwgMywgMjM1LCAzNiwgOCwgCisgICAgMywgMjM1LCAzNSwgOCwgMywgMjM1LCAzMywgOCwgMywgMjM1LCAzNCwgOCwgMywgMjI0LCA0OSwgOCwgMywgMjI0LCA0NywgCisgICAgOCwgMywgMjI0LCA1NiwgOCwgMywgMjI0LCA1MCwgOCwgMywgMjI0LCA1MywgOCwgMywgMjI0LCA1MiwgOCwgMywgMjI0LCAKKyAgICA1NSwgOCwgMywgMjI0LCA1NCwgOCwgMywgMjI0LCAyLCA4LCAzLCAyMjMsIDI1NSwgOCwgMywgMjI0LCA0LCA4LCAzLCAyMjQsIAorICAgIDMsIDgsIDMsIDIyNCwgMzYsIDgsIDMsIDIyNCwgMzUsIDgsIDMsIDIyNCwgNDUsIDgsIDMsIDIyNCwgMzksIDgsIDMsIDIyMywgCisgICAgMjUwLCA4LCAzLCAyMjMsIDI0NiwgOCwgMywgMjI0LCAzMywgOCwgMywgMjIzLCAyNTQsIDgsIDMsIDIyMywgMjUyLCA4LCAzLCAKKyAgICAyMjMsIDI1MywgOCwgMywgMjIzLCAyMzAsIDgsIDMsIDIyMywgMjI4LCA4LCAzLCAyMjMsIDI0MCwgOCwgMywgMjIzLCAyMzMsIAorICAgIDgsIDMsIDIyMywgMjMxLCA4LCAzLCAyMjMsIDIzMiwgOCwgMywgMjM1LCA5MywgOCwgMywgMjM1LCA5MiwgOCwgMywgMjM1LCAKKyAgICA5OSwgOCwgMywgMjM1LCA5NCwgOCwgMywgMjM1LCA5NiwgOCwgMywgMjM1LCA5NSwgOCwgMywgMjM1LCA5OCwgOCwgMywgCisgICAgMjM1LCA5NywgOCwgMywgMjM1LCA4NCwgOCwgMywgMjM1LCA4NiwgOCwgMywgMjM1LCA4NSwgOCwgMywgMjM1LCA4OSwgOCwgCisgICAgMywgMjM1LCA4OCwgOCwgMywgMjM1LCA5MSwgOCwgMywgMjM1LCA5MCwgOCwgMywgMjM1LCA4MCwgOCwgMywgMjM1LCA3OSwgCisgICAgOCwgMywgMjM1LCA4NywgOCwgMywgMjM1LCA4MywgOCwgMywgMjM1LCA4MSwgOCwgMywgMjM1LCA4MiwgOCwgMywgMjM1LCAKKyAgICA3NiwgOCwgMywgMjM1LCA3NSwgOCwgMywgMjM1LCA3OCwgOCwgMywgMjM1LCA3NywgOCwgMywgMjI4LCAxNjcsIDgsIDMsIAorICAgIDIyOCwgMTY2LCA4LCAzLCAyMjgsIDE3NCwgOCwgMywgMjI4LCAxNjgsIDgsIDMsIDIyOCwgMTcwLCA4LCAzLCAyMjgsIDE2OSwgCisgICAgOCwgMywgMjI4LCAxNzMsIDgsIDMsIDIyOCwgMTcxLCA4LCAzLCAyMjgsIDE1NiwgOCwgMywgMjI4LCAxNTcsIDgsIDMsIAorICAgIDIyOCwgMTYyLCA4LCAzLCAyMjgsIDE2MSwgOCwgMywgMjI4LCAxNjUsIDgsIDMsIDIyOCwgMTYzLCA4LCAzLCAyMjgsIDE1MSwgCisgICAgOCwgMywgMjI4LCAxNjAsIDgsIDMsIDIyOCwgMTU1LCA4LCAzLCAyMjgsIDE1MiwgOCwgMywgMjI4LCAxNTMsIDgsIDMsIAorICAgIDIyOCwgMTQ2LCA4LCAzLCAyMjgsIDE0NSwgOCwgMywgMjI4LCAxNTAsIDgsIDMsIDIyOCwgMTQ5LCA4LCAzLCAyMjgsIDE0NywgCisgICAgOCwgMywgMjI4LCAxNDgsIDgsIDMsIDIyNywgMTQxLCA4LCAzLCAyMjcsIDE0MCwgOCwgMywgMjI3LCAxNTIsIDgsIDMsIAorICAgIDIyNywgMTQ1LCA4LCAzLCAyMjcsIDE0OSwgOCwgMywgMjI3LCAxNDgsIDgsIDMsIDIyNywgMTUxLCA4LCAzLCAyMjcsIDE1MCwgCisgICAgOCwgMywgMjI3LCAxMjgsIDgsIDMsIDIyNywgMTMwLCA4LCAzLCAyMjcsIDEyOSwgOCwgMywgMjI3LCAxMzQsIDgsIDMsIAorICAgIDIyNywgMTMzLCA4LCAzLCAyMjcsIDEzOCwgOCwgMywgMjI3LCAxMzUsIDgsIDMsIDIyNywgMTI2LCA4LCAzLCAyMjcsIDEyNCwgCisgICAgOCwgMywgMjI3LCAxMzIsIDgsIDMsIDIyNywgMTI3LCA4LCAzLCAyMTEsIDE1MCwgOCwgMywgMjExLCAxNDksIDgsIDMsIAorICAgIDIxMSwgMTU3LCA4LCAzLCAyMTEsIDE1MiwgOCwgMywgMjExLCAxNTQsIDgsIDMsIDIxMSwgMTUzLCA4LCAzLCAyMTEsIDE1NiwgCisgICAgOCwgMywgMjExLCAxNTUsIDgsIDMsIDIxMSwgMTM5LCA4LCAzLCAyMTEsIDE0MCwgOCwgMywgMjExLCAxNDQsIDgsIDMsIAorICAgIDIxMSwgMTQzLCA4LCAzLCAyMTEsIDE0OCwgOCwgMywgMjExLCAxNDYsIDgsIDMsIDIxMSwgMTIxLCA4LCAzLCAyMTEsIDExOSwgCisgICAgOCwgMywgMjExLCAxMzEsIDgsIDMsIDIxMSwgMTI0LCA4LCAzLCAyMTEsIDEyMiwgOCwgMywgMjExLCAxMjMsIDgsIDMsIAorICAgIDIxMCwgMjUwLCA4LCAzLCAyMTAsIDI0OCwgOCwgMywgMjExLCA4LCA4LCAzLCAyMTAsIDI1MSwgOCwgMywgMjExLCAyLCA4LCAKKyAgICAzLCAyMTEsIDEsIDgsIDMsIDIxMSwgNSwgOCwgMywgMjExLCAzLCA4LCAzLCAyMTAsIDE5MSwgOCwgMywgMjEwLCAxOTAsIDgsIAorICAgIDMsIDIxMCwgMTk0LCA4LCAzLCAyMTAsIDE5MiwgOCwgMywgMjEwLCAyMjQsIDgsIDMsIDIxMCwgMjIxLCA4LCAzLCAyMTAsIAorICAgIDI0NCwgOCwgMywgMjEwLCAyMjgsIDgsIDMsIDIxMCwgMTgyLCA4LCAzLCAyMTAsIDE3OCwgOCwgMywgMjEwLCAyMTIsIDgsIAorICAgIDMsIDIxMCwgMTg5LCA4LCAzLCAyMTAsIDE4NSwgOCwgMywgMjEwLCAxODYsIDgsIDMsIDIxMCwgMTYyLCA4LCAzLCAyMTAsIAorICAgIDE2MSwgOCwgMywgMjEwLCAxNjksIDgsIDMsIDIxMCwgMTY1LCA4LCAzLCAyMTAsIDE2MywgOCwgMywgMjEwLCAxNjQsIDgsIAorICAgIDM0LCAyMjQsIDM2LCA4LCAzNCwgMjMyLCAyNDcsIDgsIDM0LCAyMzQsIDY3LCA4LCAzNCwgMjI3LCAxNDUsIDgsIDM0LCAKKyAgICAyNDksIDc3LCA4LCAzNCwgMjE4LCAxOTQsIDgsIDM0LCAyNDMsIDE5LCA4LCAzNCwgMjQzLCA1MSwgOCwgMzQsIDIzMCwgCisgICAgMjM1LCA4LCAzNCwgMjQwLCAxODcsIDgsIDM0LCAyMzIsIDYxLCA4LCAzNCwgMjUyLCA5MSwgOCwgMzQsIDIzMCwgMTMxLCA4LCAKKyAgICAzNCwgMjEwLCAyNDQsIDgsIDM0LCAyMjQsIDEyNCwgOCwgMzQsIDI0MCwgMTgxLCA4LCAzNCwgMjE3LCA0NywgOCwgMzQsIAorICAgIDI0MywgMTQyLCA4LCAzNCwgMjEwLCA1LCA4LCAzNCwgMjQ5LCA3MSwgOCwgMzQsIDI0OCwgMTAzLCA4LCAzNCwgMjUxLCAKKyAgICAxMDYsIDgsIDM0LCAyNDMsIDE1LCA4LCAzNCwgMjI3LCAxMzUsIDgsIDM0LCAyMTUsIDExOSwgOCwgMzQsIDIyNiwgMTc5LCAKKyAgICA4LCAzNCwgMjM1LCA4MCwgOCwgMzQsIDIxMCwgMTksIDgsIDM0LCAyMjQsIDEwMywgOCwgMzQsIDI0MSwgMTE1LCA4LCAzNCwgCisgICAgMjEwLCAyNTAsIDgsIDM0LCAyMTIsIDExMiwgOCwgMzQsIDIxOSwgMjAyLCA4LCAzNCwgMjEzLCAyNDQsIDgsIDM0LCAyMTAsIAorICAgIDExNiwgOCwgMzQsIDIzNSwgNzQsIDgsIDM0LCAyMjcsIDEwMCwgOCwgMzQsIDIzNSwgNzgsIDgsIDM0LCAyNDIsIDE2MSwgOCwgCisgICAgMzQsIDIzNSwgOTgsIDgsIDM0LCAyMTEsIDIyNywgOCwgMzQsIDI0NiwgODYsIDgsIDM0LCAyMTksIDIxNSwgOCwgMzQsIAorICAgIDIzMiwgMjQyLCA4LCAzNCwgMjQ5LCA4MSwgOCwgMzQsIDI0OSwgMTEzLCA4LCAzNCwgMjUwLCA0NSwgOCwgMzQsIDI0MCwgCisgICAgMTg0LCA4LCAzNCwgMjIwLCA3NCwgOCwgMzQsIDIxMCwgNCwgOCwgMzQsIDIyMCwgMCwgOCwgMzQsIDI1MCwgMTM5LCA4LCAKKyAgICAzNCwgMjA5LCAyMzEsIDgsIDM0LCAyMjksIDE3OCwgOCwgMzQsIDIzNCwgMTg4LCAyMzIsIDIwMiwgMSwgMjUyLCAxOTksIAorICAgIDIzMiwgMjAyLCAxLCAxOTEsIDIzMiwgMjAyLCAxLCAyMjUsIDE1MCwgMjMyLCAyMDIsIDEsIDI0OCwgMjI5LCAyMzIsIDIwMiwgCisgICAgMSwgMjE3LCAxMDYsIDIzMiwgMjAyLCAxLCAyMTYsIDIwOSwgMjMyLCAyMDIsIDEsIDI0MywgMTQyLCAyMzIsIDIwMiwgMSwgCisgICAgMTc2LCAyMzIsIDIwMiwgMSwgMjM0LCAxMzgsIDIzMiwgMjAyLCAxLCAyMzUsIDE0NywgMjMyLCAyMDIsIDEsIDI1MSwgNDEsIAorICAgIDIzMiwgMjAyLCAxLCAyNTAsIDE2NSwgMjMyLCAyMDIsIDEsIDI0NiwgNDYsIDIzMiwgMjAyLCAxLCAyMTUsIDE4NCwgMjMyLCAKKyAgICAyMDIsIDEsIDIxNSwgMTc2LCAyMzIsIDIwMiwgMSwgMTg2LCAyMzIsIDIwMiwgMSwgMTk4LCAyMzIsIDIwMiwgMSwgMjMzLCAKKyAgICAxNDEsIDIzMiwgMjAyLCAxLCAyMDYsIDIzMiwgMjAyLCAxLCAyMTAsIDgyLCAyMzIsIDIwMiwgMSwgMjEwLCAxMTYsIDIzMiwgCisgICAgMjAyLCAxLCAyMjksIDgyLCAyMzIsIDIwMiwgMSwgMTYyLCAyMzIsIDIwMiwgMSwgMjExLCAxNjUsIDIzMiwgMjAyLCAxLCAKKyAgICAyNDEsIDE5NiwgMjMyLCAyMDIsIDEsIDI0NCwgMjA0LCAyMzIsIDIwMiwgMSwgMjEyLCA2NSwgMjMyLCAyMDIsIDEsIDIyMCwgCisgICAgMTA0LCAyMzIsIDIwMiwgMSwgMTkyLCAyMzIsIDIwMiwgMSwgMjQzLCAwLCAyMzIsIDIwMiwgMSwgNjEsIDIzMiwgMjAyLCAxLCAKKyAgICAyNTQsIDI1MiwgMjMyLCAyMDIsIDEsIDc2LCAyMzIsIDIwMiwgMSwgMjQ1LCA2MywgMjMyLCAyMDIsIDEsIDc0LCAyMzIsIAorICAgIDIwMiwgMSwgNzgsIDIzMiwgMjAyLCAxLCA2OSwgMjMyLCAyMDIsIDEsIDIxNCwgMjE0LCAyMzIsIDIwMiwgMSwgMjE0LCAKKyAgICAyMDgsIDIzMiwgMjAyLCAxLCAyMjYsIDIzOCwgMjMyLCAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMjE2LCAxMTgsIDIzMiwgCisgICAgMjAyLCAxLCAxMzgsIDIyOSwgMjM0LCAyMjUsIDE5LCAyMzIsIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAyNDksIDgwLCAyMzIsIAorICAgIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAyNTEsIDIxMywgMjMyLCAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMTk4LCAyMzIsIDIwMiwgCisgICAgMSwgMTM4LCAyMzAsIDM3LCAyMzUsIDEyMSwgMjMyLCAyMDIsIDIyNCwgMTQ0LCAyNDksIDIyNywgMjMyLCAyMDIsIDIyNCwgCisgICAgMTQ0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDQxLCAzLCAyNDUsIDIxNywgNDEsIDMsIDI0NSwgMjEzLCA0MSwgMywgMjQxLCAKKyAgICAyMjcsIDQxLCAzLCAyMTIsIDE3LCA0MSwgMywgMjEyLCAxNiwgNDEsIDMsIDIyNSwgMjE0LCA0MSwgMywgMjUyLCAyMSwgNDEsIAorICAgIDMsIDI1MiwgNzQsIDQxLCAzLCAyMzEsIDEyMSwgNDEsIDMsIDIzMywgMjUzLCA0MSwgMywgMjMxLCAxMSwgNDEsIDMsIDI0MywgCisgICAgODIsIDQxLCAzLCAyNDQsIDE1NSwgNDEsIDMsIDIxMywgMjUwLCA0MSwgMywgMjE3LCAxMiwgNDEsIDMsIDIxNiwgMTk1LCAKKyAgICA0MSwgMywgMjQ4LCAyNCwgNDEsIDMsIDI0OCwgMjEsIDQxLCAzLCAyMzMsIDU2LCA0MSwgMywgMjIzLCAxMTEsIDQxLCAzLCAKKyAgICAyNDgsIDg1LCA0MSwgMywgMjI5LCAxNDQsIDQxLCAzLCAyMjEsIDE3MiwgNDEsIDMsIDIyMCwgNjMsIDQxLCAzLCAyMTAsIAorICAgIDkyLCA0MSwgMywgMjEwLCA3MywgNDEsIDMsIDI1MCwgMTkwLCA0MSwgMywgMjM1LCAxMzAsIDQxLCAzLCAyMjgsIDE4MSwgCisgICAgNDEsIDMsIDIxMSwgNDQsIDQxLCAzLCAyMzQsIDE4NywgNDEsIDMsIDIyOSwgNTYsIDQxLCAzLCAyNDMsIDYyLCA0MSwgMywgCisgICAgMjMxLCA4NSwgNDEsIDMsIDIyOSwgMTA4LCA0MSwgMywgMjI3LCAxNTksIDQxLCAzLCA3NCwgNDEsIDMsIDIzNiwgNiwgNDEsIAorICAgIDMsIDI0MSwgMTg3LCA0MSwgMywgMjQxLCAxNjcsIDQxLCAzLCAyMTEsIDI1MCwgNDEsIDMsIDIxMSwgMjQxLCA0MSwgMywgCisgICAgMjI1LCAxMTEsIDQxLCAzLCAyNTIsIDE5LCA0MSwgMywgMjUyLCAxNCwgNDEsIDMsIDIzMSwgMTE0LCA0MSwgMywgMjMzLCAKKyAgICAyNTAsIDQxLCAzLCAyMzEsIDgsIDQxLCAzLCAyNDMsIDc4LCA0MSwgMywgMjQ0LCAxMjksIDQxLCAzLCAyMTMsIDE3NiwgNDEsIAorICAgIDMsIDIxNiwgMTE4LCA0MSwgMywgMjE2LCAxNzYsIDQxLCAzLCAyNDgsIDE2LCA0MSwgMywgMjQ4LCAyMCwgNDEsIDMsIDIzMiwgCisgICAgMjQ3LCA0MSwgMywgMjIzLCAzOCwgNDEsIDMsIDI0OCwgMTEsIDQxLCAzLCAyMjksIDEzOCwgNDEsIDMsIDIxOSwgMTkzLCAKKyAgICA0MSwgMywgMjIwLCAzNCwgNDEsIDMsIDIxMCwgNDQsIDQxLCAzLCAyMTAsIDY5LCA0MSwgMywgMjUwLCA1OSwgNDEsIDMsIAorICAgIDIzNSwgMTE0LCA0MSwgMywgMjI4LCAxNzQsIDQxLCAzLCAyMTEsIDgsIDQxLCAzLCAyMzQsIDk4LCA0MSwgMywgMjI5LCA0OCwgCisgICAgNDEsIDMsIDI0MiwgMjIxLCA0MSwgMywgMjMwLCAyMzUsIDQxLCAzLCAyMjgsIDIzOCwgNDEsIDMsIDIyNywgMTUyLCA0MSwgCisgICAgMywgNjEsIDQxLCAzLCAyNTQsIDEzMSwgNDEsIDMsIDIyOSwgNzcsIDQxLCAzLCAxNjIsIDQxLCAzLCAyNDIsIDI1LCA0MSwgCisgICAgMywgMjEyLCA2NSwgNDEsIDMsIDIxMiwgNTUsIDQxLCAzLCAxOTEsIDQxLCAzLCAyNTIsIDI2LCA0MSwgMywgMjUyLCAxOTksIAorICAgIDQxLCAzLCAyMzEsIDEyOSwgNDEsIDMsIDIzNCwgMSwgNDEsIDMsIDIzNCwgMCwgNDEsIDMsIDIzMSwgMTUsIDQxLCAzLCAKKyAgICAyNDMsIDg2LCA0MSwgMywgMjQ0LCAyMDQsIDQxLCAzLCAyMTQsIDI3LCA0MSwgMywgMjE3LCAxMDYsIDQxLCAzLCAyMTYsIAorICAgIDIwOSwgNDEsIDMsIDI0OCwgMzMsIDQxLCAzLCAyNDgsIDIzLCA0MSwgMywgMjMzLCAxNDEsIDQxLCAzLCAyMDUsIDQxLCAzLCAKKyAgICAyNDgsIDIyOSwgNDEsIDMsIDIyOSwgMTUzLCA0MSwgMywgMjA2LCA0MSwgMywgMjIwLCAxMDQsIDQxLCAzLCAyMTAsIDExNiwgCisgICAgNDEsIDMsIDIxMCwgODIsIDQxLCAzLCAyNTEsIDQxLCA0MSwgMywgMjM1LCAxNDcsIDQxLCAzLCAyMjgsIDE5MCwgNDEsIDMsIAorICAgIDE5MiwgNDEsIDMsIDE3NiwgNDEsIDMsIDIzNCwgMjQwLCA0MSwgMywgMjI5LCA2MSwgNDEsIDMsIDI0MywgMTQyLCA0MSwgMywgCisgICAgMTg2LCA0MSwgMywgMTk4LCA0MSwgMywgMjI3LCAxNjksIDQxLCAzLCAyMjYsIDE4NywgNDEsIDMsIDIyNiwgMTgzLCA0MSwgCisgICAgMywgMjQxLCA2MCwgNDEsIDMsIDIxMSwgMjE1LCA0MSwgMywgMjExLCAyMTEsIDQxLCAzLCAyMjQsIDI1MiwgNDEsIDMsIAorICAgIDI1MiwgMTcsIDQxLCAzLCAyNTEsIDIwMSwgNDEsIDMsIDIzMSwgMTA5LCA0MSwgMywgMjMzLCAyNDgsIDQxLCAzLCAyMzEsIAorICAgIDQsIDQxLCAzLCAyNDMsIDc0LCA0MSwgMywgMjQ0LCA0MiwgNDEsIDMsIDIxMywgMTI3LCA0MSwgMywgMjE2LCAxOCwgNDEsIAorICAgIDMsIDIxNiwgMTU0LCA0MSwgMywgMjQ4LCAxNCwgNDEsIDMsIDI0OCwgMTgsIDQxLCAzLCAyMzIsIDEzMywgNDEsIDMsIDIyMiwgCisgICAgMTk5LCA0MSwgMywgMjQ3LCAxMzMsIDQxLCAzLCAyMjksIDEyNSwgNDEsIDMsIDIxOSwgNDIsIDQxLCAzLCAyMjAsIDMsIDQxLCAKKyAgICAzLCAyMTAsIDIxLCA0MSwgMywgMjEwLCA2NiwgNDEsIDMsIDI0OSwgMTgyLCA0MSwgMywgMjM1LCA2NSwgNDEsIDMsIDIyOCwgCisgICAgMTY0LCA0MSwgMywgMjEwLCAyMjksIDQxLCAzLCAyMzQsIDE2LCA0MSwgMywgMjI5LCA0NiwgNDEsIDMsIDI0MiwgMTcxLCAKKyAgICA0MSwgMywgMjMwLCAxMzcsIDQxLCAzLCAyMjgsIDY5LCA0MSwgMywgMjI3LCAxMzYsIDQxLCAzLCA2OSwgNDEsIDMsIDIxNCwgCisgICAgMTkwLCA0MSwgMywgMjQwLCAyMjksIDQxLCAzLCAyNDAsIDIxOSwgNDEsIDMsIDIxMSwgMTk1LCA0MSwgMywgMjExLCAxODksIAorICAgIDQxLCAzLCAyMjQsIDE1MywgNDEsIDMsIDI1MiwgMTYsIDQxLCAzLCAyNTEsIDEzMywgNDEsIDMsIDIzMSwgMTA4LCA0MSwgMywgCisgICAgMjMzLCAyNDYsIDQxLCAzLCAyMzEsIDMsIDQxLCAzLCAyNDMsIDczLCA0MSwgMywgMjQzLCAyNDEsIDQxLCAzLCAyMTIsIAorICAgIDExNiwgNDEsIDMsIDIxNSwgMTE5LCA0MSwgMywgMjE2LCAxMzcsIDQxLCAzLCAyNDgsIDEyLCA0MSwgMywgMjQ4LCAxNywgCisgICAgNDEsIDMsIDIzMiwgMTAzLCA0MSwgMywgMjIyLCAxNDIsIDQxLCAzLCAyNDYsIDg2LCA0MSwgMywgMjI5LCAxMjAsIDQxLCAzLCAKKyAgICAyMTgsIDg0LCA0MSwgMywgMjE5LCAyMjcsIDQxLCAzLCAyMTAsIDEzLCA0MSwgMywgMjEwLCA2MiwgNDEsIDMsIDI0OSwgCisgICAgMTIwLCA0MSwgMywgMjM1LCA1NywgNDEsIDMsIDIyOCwgMTYwLCA0MSwgMywgMjEwLCAyMTIsIDQxLCAzLCAyMzMsIDIyMywgCisgICAgNDEsIDMsIDIyOSwgNDUsIDQxLCAzLCAyNDIsIDEyMCwgNDEsIDMsIDIzMCwgMTA3LCA0MSwgMywgMjI3LCAyNDIsIDQxLCAzLCAKKyAgICAyMjcsIDEzMiwgNDEsIDMsIDc4LCA0MSwgMywgMjI2LCAyMDAsIDQxLCAzLCAyMjksIDUsIDQxLCAzLCAyNDEsIDc1LCA0MSwgCisgICAgMywgMjQxLCA2MywgNDEsIDMsIDIxMSwgMjI3LCA0MSwgMywgMjExLCAyMTYsIDQxLCAzLCAyMjUsIDE5LCA0MSwgMywgMjUyLCAKKyAgICAxOCwgNDEsIDMsIDI1MSwgMjEzLCA0MSwgMywgMjMxLCAxMTAsIDQxLCAzLCAyMzMsIDI0OSwgNDEsIDMsIDIzMSwgNiwgNDEsIAorICAgIDMsIDI0MywgNzYsIDQxLCAzLCAyNDMsIDc1LCA0MSwgMywgMjQ0LCA1MSwgNDEsIDMsIDIxMywgMTM4LCA0MSwgMywgMTEyLCAKKyAgICA0MSwgMywgMjE2LCAxNTcsIDQxLCAzLCAyNDgsIDE1LCA0MSwgMywgMjQ4LCAxOSwgNDEsIDMsIDIzMiwgMTYyLCA0MSwgMywgCisgICAgMjIyLCAyMTMsIDQxLCAzLCAyNDcsIDE1MywgNDEsIDMsIDIyOSwgMTI5LCA0MSwgMywgMjE5LCA2MCwgNDEsIDMsIDIyMCwgCisgICAgOSwgNDEsIDMsIDIxMCwgMjMsIDQxLCAzLCAyMTAsIDY3LCA0MSwgMywgMjQ5LCAyNDYsIDQxLCAzLCAyMzUsIDc0LCA0MSwgCisgICAgMywgMjI4LCAxNjUsIDQxLCAzLCAyMTAsIDI0NCwgNDEsIDMsIDIzNCwgMzQsIDQxLCAzLCAyMjksIDQ3LCA0MSwgMywgMjQyLCAKKyAgICAxODEsIDQxLCAzLCAyMzAsIDE2NiwgNDEsIDMsIDIyOCwgNzksIDQxLCAzLCAyMjcsIDEzOCwgNDEsIDMsIDc2LCA0MSwgMywgCisgICAgMjQ1LCAxNTgsIDQxLCAzLCAyMjksIDY2LCA0MSwgMywgMjQxLCAyNDUsIDQxLCAzLCAyNDEsIDIxNiwgNDEsIDMsIDIxMiwgCisgICAgMjIsIDQxLCAzLCAyMTIsIDEyLCA0MSwgMywgMjI1LCAyMjQsIDQxLCAzLCAyNTIsIDIyLCA0MSwgMywgMjUyLCA4MywgNDEsIAorICAgIDMsIDIzMSwgMTIyLCA0MSwgMywgMjMzLCAyNTQsIDQxLCAzLCAyMzMsIDI1MiwgNDEsIDMsIDIzMSwgMTIsIDQxLCAzLCAKKyAgICAyNDMsIDgzLCA0MSwgMywgMjQzLCA4MSwgNDEsIDMsIDI0NCwgMTYyLCA0MSwgMywgMjEzLCAyNTUsIDQxLCAzLCAyMTcsIAorICAgIDIzLCA0MSwgMywgMjE2LCAxOTYsIDQxLCAzLCAyNDgsIDI1LCA0MSwgMywgMjQ4LCAyMiwgNDEsIDMsIDIzMywgNjQsIDQxLCAKKyAgICAzLCAyMjMsIDEzMSwgNDEsIDMsIDI0OCwgOTgsIDQxLCAzLCAyMjksIDE0NSwgNDEsIDMsIDIyMSwgMTgzLCA0MSwgMywgCisgICAgMjIwLCA2NSwgNDEsIDMsIDIxMCwgOTQsIDQxLCAzLCAyMTAsIDc0LCA0MSwgMywgMjUwLCAxOTgsIDQxLCAzLCAyMzUsIAorICAgIDEzMiwgNDEsIDMsIDIyOCwgMTgzLCA0MSwgMywgMjExLCA0NywgNDEsIDMsIDIzNCwgMTg4LCA0MSwgMywgMjI5LCA1NywgCisgICAgNDEsIDMsIDIyOSwgNTMsIDQxLCAzLCAyNDMsIDY5LCA0MSwgMywgMjQzLCA1OCwgNDEsIDMsIDIzMSwgOTYsIDQxLCAzLCAKKyAgICAyMjksIDExMiwgNDEsIDMsIDIyNywgMTYwLCA0MSwgMywgMjI5LCA4NCwgNDEsIDMsIDIzMywgMjgsIDQxLCAyNDksIDIyNywgCisgICAgNDEsIDI0MywgMjM2LCAyMTgsIDEzMSwgNDEsIDIyNCwgMTYsIDc5LCA0MSwgMywgMjI5LCAxMjgsIDI0NCwgMjA0LCA0MSwgCisgICAgMywgMjI5LCAxMjgsIDE3NiwgNDEsIDMsIDIyOSwgMTI4LCAyMTksIDQyLCA0MSwgMTYsIDI0NCwgMTUyLCA0MSwgMTYsIAorICAgIDIzNCwgMTg2LCA0MSwgMTYsIDIxNiwgODIsIDQxLCAxNiwgMjI4LCAyMTMsIDQxLCAxNiwgMjUyLCAxNTUsIDQxLCAxNiwgCisgICAgMjQ0LCAyMDMsIDQxLCAxNiwgMjE3LCAxMDIsIDQxLCAxNiwgMjQ4LCAxODQsIDQxLCAxNiwgMjQ3LCAxMzIsIDQxLCAxNiwgCisgICAgMjMzLCAyMTIsIDQxLCAxNiwgMjE2LCAyMiwgNDEsIDE2LCAyNDcsIDE1MiwgNDEsIDE2LCAyMzUsIDY2LCA0MSwgMjEsIAorICAgIDIxMCwgODYsIDQxLCAyMSwgMTExLCA0MSwgMjEsIDEwNSwgNDEsIDIxLCAxNTgsIDQxLCAyMSwgMTYxLCA0MSwgMjEsIDE5MCwgCisgICAgNDEsIDIxLCAxOTUsIDQxLCAyMSwgMTk5LCA0MSwgMjEsIDE5NiwgNDEsIDIxLCAyMDEsIDQxLCAzLCAyMjksIDEyOCwgMTg2LCAKKyAgICA0MSwgMywgMjI5LCAxMjgsIDI0NywgMTUzLCAzMywgNiwgMSwgMjEwLCA5MCwgMzMsIDQsIDEsIDIxMCwgOTAsIDMzLCA2LCAKKyAgICAxLCAyNDYsIDQyLCAzMywgNCwgMSwgMjQ2LCA0MiwgMzMsIDYsIDEsIDIyMywgNTIsIDI0NiwgNDQsIDMzLCA0LCAxLCAyMjMsIAorICAgIDUyLCAyNDYsIDQ0LCAzMywgNiwgMSwgMjM1LCAxOTIsIDMzLCA0LCAxLCAyMzUsIDE5MiwgMzMsIDYsIDEsIDI0NywgMTY5LCAKKyAgICAzMywgNCwgMSwgMjQ3LCAxNjksIDMzLCA2LCAxLCAyMzAsIDE0NSwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMzAsIDE0NSwgCisgICAgMjE0LCAyMDUsIDMzLCA2LCAxLCAyNTEsIDE0NCwgMjI2LCAyMDUsIDMzLCA0LCAxLCAyNTEsIDE0NCwgMjI2LCAyMDUsIDMzLCAKKyAgICA2LCAxLCAyMjksIDkyLCAyMTEsIDMxLCAzMywgNCwgMSwgMjI5LCA5MiwgMjExLCAzMSwgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIAorICAgIDI1MiwgMTkzLCAyMTEsIDMxLCAzMywgNCwgMSwgMjExLCAyOCwgMiwgMjUyLCAxOTMsIDIxMSwgMzEsIDMzLCA2LCAxLCAKKyAgICAyMzUsIDE5MCwgMjExLCA1OSwgMzMsIDQsIDEsIDIzNSwgMTkwLCAyMTEsIDU5LCAzMywgNiwgMSwgMjIzLCA1MiwgMjEwLCAKKyAgICAyMTIsIDMzLCA0LCAxLCAyMjMsIDUyLCAyMTAsIDIxMiwgMzMsIDYsIDEsIDIzNSwgMTkwLCA2MSwgMzMsIDQsIDEsIDIzNSwgCisgICAgMTkwLCA2MSwgMzMsIDYsIDEsIDI1MCwgOCwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUwLCA4LCAyMzIsIAorICAgIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTEsIDIyMiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTEsIDIyMiwgMjEwLCAKKyAgICAxODMsIDMzLCA2LCAxLCAyMzUsIDE5MCwgMjUwLCA4LCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE5MCwgCisgICAgMjUwLCA4LCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMTAsIDI0NiwgMzMsIDQsIDEsIDIxMCwgMjQ2LCAzMywgCisgICAgNiwgMSwgMjIzLCA1MiwgMjE1LCAxNzksIDMzLCA0LCAxLCAyMjMsIDUyLCAyMTUsIDE3OSwgMzMsIDYsIDEsIDIxOSwgNTQsIAorICAgIDI0OCwgOTgsIDMzLCA0LCAxLCAyMTksIDU0LCAyNDgsIDk4LCAzMywgNiwgMSwgMjE5LCA1NCwgMjQ1LCAxODIsIDMzLCA0LCAKKyAgICAxLCAyMTksIDU0LCAyNDUsIDE4MiwgMzMsIDYsIDEsIDIxOSwgNTQsIDI0NSwgMTY3LCAzMywgNCwgMSwgMjE5LCA1NCwgCisgICAgMjQ1LCAxNjcsIDMzLCA2LCAxLCAyMzAsIDE0OSwgNzgsIDMzLCA0LCAxLCAyMzAsIDE0OSwgNzgsIDMzLCA2LCAxLCAyNTEsIAorICAgIDI0OCwgNzgsIDMzLCA0LCAxLCAyNTEsIDI0OCwgNzgsIDMzLCA2LCAxLCA1MiwgMjMwLCAxNDksIDc4LCAzMywgNCwgMSwgCisgICAgNTIsIDIzMCwgMTQ5LCA3OCwgMzMsIDEsIDIzMCwgOTEsIDc4LCAzOCwgMzMsIDIxMiwgMTAwLCAzOCwgMzMsIDIxNiwgMjQ5LCAKKyAgICAyMzAsIDE5NiwgNTAsIDM4LCAzMywgMjQwLCAyMTgsIDIzMCwgMTk2LCA1MCwgMzgsIDMzLCAyMTYsIDE0OSwgMjMwLCAxOTYsIAorICAgIDUwLCAyMTksIDk1LCAyNTMsIDIyNCwgMzgsIDMzLCAxLCAyMTQsIDIwMiwgMjM2LCA2NywgMzgsIDMzLCAxLCA3NCwgMzgsIAorICAgIDMzLCAxLCAyMTEsIDgsIDM4LCAzMywgMSwgNjksIDM4LCAzMywgMSwgMjQyLCAxMCwgNTAsIDM4LCAzMywgMSwgMjExLCAyNywgCisgICAgMzgsIDMzLCAxLCAyMTksIDU0LCA1MCwgMzgsIDMzLCAxLCAyMjYsIDIwNSwgMzgsIDMzLCAyMzQsIDE5OCwgMzgsIDMzLCAKKyAgICAyMjUsIDIzMSwgMzMsIDIzNCwgMTk4LCAzMywgMjI1LCAyMzEsIDMzLCA2LCAxLCAyNDYsIDU0LCAzMywgNCwgMSwgMjQ2LCAKKyAgICA1NCwgMzMsIDYsIDEsIDI0NiwgMzUsIDMzLCA0LCAxLCAyNDYsIDM1LCAzMywgNiwgMSwgMjEwLCA1MiwgMzMsIDQsIDEsIAorICAgIDIxMCwgNTIsIDMzLCA2LCAxLCAyNTAsIDIxNCwgMzMsIDQsIDEsIDI1MCwgMjE0LCAzMywgNiwgMSwgMjQ2LCAzMywgMzMsIAorICAgIDQsIDEsIDI0NiwgMzMsIDMzLCA2LCAxLCAyMTcsIDI0LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjE3LCAyNCwgMiwgCisgICAgMjMwLCAyMjksIDEwMywgMzMsIDYsIDEsIDIxNSwgNzgsIDMzLCA0LCAxLCAyMTUsIDc4LCAzMywgNiwgMSwgMjE1LCAxNjEsIAorICAgIDMzLCA0LCAxLCAyMTUsIDE2MSwgMzMsIDYsIDEsIDIxNSwgMTY1LCAzMywgNCwgMSwgMjE1LCAxNjUsIDMzLCA2LCAxLCAKKyAgICAyMTcsIDI5LCAzMywgNCwgMSwgMjE3LCAyOSwgMzMsIDYsIDEsIDI0MCwgMjA1LCAzMywgNCwgMSwgMjQwLCAyMDUsIDMzLCAKKyAgICA2LCAxLCAyMTksIDIwOCwgMzMsIDQsIDEsIDIxOSwgMjA4LCAzOCwgMzMsIDEsIDIzNSwgMTkwLCA3NiwgMjAsIDEsIDYxLCAKKyAgICAyMCwgMSwgMTc2LCAyMCwgMSwgNjksIDIwLCAxLCAyMzMsIDIyMywgMjAsIDEsIDI0NSwgMjE3LCAyMCwgMSwgMjIzLCAxMTEsIAorICAgIDIwLCAxLCAyMTcsIDg3LCAyMCwgMSwgNzgsIDIwLCAxLCAyMjcsIDE1MiwgMjAsIDEsIDc0LCAyMCwgMSwgMjMzLCAxNDEsIAorICAgIDIwLCAxLCAxOTEsIDIwLCAxLCAyMjIsIDI0MiwgMjAsIDEsIDIyMywgMzIsIDIwLCAxLCAyMzMsIDU1LCAyMCwgMSwgMjMxLCAKKyAgICA4NCwgMjAsIDEsIDIxNywgMTAyLCAyMCwgMSwgMjI5LCAxNTEsIDIwLCAxLCAyMjgsIDE4OCwgMjAsIDEsIDE5NCwgMjAsIDEsIAorICAgIDIxOCwgNSwgMjAsIDEsIDIzMCwgMTA3LCAyMCwgMSwgMjIwLCAyOSwgMjAsIDEsIDIxOSwgMTkzLCAyMCwgMSwgMjIwLCAzOSwgCisgICAgMjAsIDEsIDIyMCwgMTI1LCAyMCwgMSwgMjMzLCAxNjEsIDIwLCAxLCAyMzQsIDE2MiwgMjAsIDEsIDIyNywgMjEzLCAyMCwgCisgICAgMSwgMjI3LCAyNDIsIDIwLCAxLCAyMjgsIDE1OSwgMjAsIDEsIDIxMCwgMjI2LCAyMCwgMSwgMjE5LCAyMjcsIDIwLCAxLCAKKyAgICAyMTAsIDE4NywgMjAsIDEsIDE5MiwgMjAsIDEsIDIyOCwgMTQsIDIwLCAxLCAyMzQsIDE0OCwgMjAsIDEsIDIyNSwgMTU0LCAKKyAgICAyMCwgMSwgMjI4LCAxODEsIDIwLCAxLCAyMjcsIDI1MSwgMjAsIDEsIDIyNCwgMTQ3LCAyMCwgMSwgMjExLCAxOTIsIDIwLCAKKyAgICAxLCAyMjUsIDIxNCwgMjAsIDEsIDI0NCwgMTU1LCAyMCwgMSwgMjIyLCAxNDIsIDIwLCAxLCAyMzIsIDEwMywgMjAsIDEsIAorICAgIDIzMCwgMjM1LCAyMCwgMSwgMjI4LCAyMzgsIDIwLCAxLCAyMjMsIDU0LCAyMCwgMSwgMjIzLCAxNzQsIDIwLCAxLCAyMzQsIAorICAgIDE3MSwgMjAsIDEsIDIyOSwgMTIsIDIwLCAxLCAyMjksIDYxLCAyMCwgMSwgMjI5LCA4MiwgMjAsIDEsIDIyMCwgOSwgMjAsIAorICAgIDEsIDIyNCwgMTUwLCAyMCwgMSwgMjQzLCAyNDEsIDIwLCAxLCAyNDQsIDQ1LCAyMCwgMSwgMjEyLCA2NSwgMjAsIDEsIDE5OCwgCisgICAgMjAsIDEsIDIzMiwgMjQ3LCAyMCwgMSwgMjI1LCAxMTEsIDIwLCAxLCAyMzIsIDEyNSwgMjAsIDEsIDIzNCwgMzQsIDIwLCAxLCAKKyAgICAyMzEsIDExOSwgMjAsIDEsIDIyMywgODYsIDIwLCAxLCAyMzEsIDYzLCAyMCwgMSwgMTg2LCAyMCwgMSwgMjE2LCAxMTgsIAorICAgIDIwLCAxLCAyMzQsIDk4LCAyMCwgMSwgMjMwLCAxNjYsIDIwLCAxLCAyMzEsIDEyNywgMjAsIDEsIDIxNiwgMjMxLCAyMCwgMSwgCisgICAgMjM0LCAxLCAyMCwgMSwgMjE2LCAyNDgsIDIwLCAxLCAyMjcsIDI0MywgMjAsIDEsIDIyMSwgMjUzLCAyMCwgMSwgMjQ0LCAKKyAgICAyMDAsIDIwLCAxLCAyMzQsIDMsIDIwLCAxLCAyMzQsIDMwLCAyMCwgMzgsIDE2NCwgMjM0LCAxMSwgMjAsIDM4LCAxNjQsIAorICAgIDIxNSwgMTExLCAyMCwgMjI4LCAxODcsIDIwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIwLCAyNDksIDIzNCwgMjAsIDI0OSwgCisgICAgMjI3LCAyMCwgMjIwLCAxNTIsIDIwLCAyMjQsIDE2LCA3OSwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMCwgMjU0LCAyMjUsIAorICAgIDY0LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjI1LCA2NCwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMCwgCisgICAgMjU0LCAyMjAsIDg2LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjIwLCA4NiwgNTgsIDEsIDI1MCwgMTA0LCAKKyAgICAxMzgsIDIxMCwgMjU0LCAyMjQsIDMzLCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjI0LCAzMywgNTgsIDEsIAorICAgIDI1MCwgMTA0LCAxMzgsIDIxMCwgMjU0LCAyMjIsIDE0MiwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMSwgNzAsIDIyMiwgCisgICAgMTQyLCA1OCwgMSwgMjQ1LCAyOCwgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIDEyNiwgMTM4LCAxMzAsIAorICAgIDU4LCAxLCAyMzAsIDIzMCwgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAKKyAgICAxLCAyNDUsIDI3LCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI4LCAyNDYsIDEyNiwgMjMzLCA0NSwgMTM4LCAKKyAgICAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjMwLCAyNDYsIDEyNiwgCisgICAgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgCisgICAgMjcsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjgsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgCisgICAgMSwgMTI1LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjMwLCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIAorICAgIDEyMSwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI3LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDU5LCA2NywgCisgICAgMTMwLCA1OCwgMSwgNTksIDIxOSwgOTcsIDU4LCAxLCA1OSwgMjAzLCAxMzAsIDU4LCAxLCAyMzIsIDExNCwgNDQsIDI0OSwgCisgICAgMTY5LCAyNTQsIDExNywgNTgsIDEsIDIyMywgMTYwLCAxMjAsIDc1LCA1OCwgMSwgMjIzLCAxNjAsIDEyNCwgNzUsIDU4LCAxLCAKKyAgICAyMjMsIDE2MCwgMjQ1LCAzOSwgNzksIDU4LCAxLCAyMjMsIDE2MCwgMjM1LCAyMDAsIDI0NSwgMzksIDc5LCA1OCwgMSwgCisgICAgMTIxLCAyMzUsIDIwMCwgMjQ1LCAzOSwgNzksIDU4LCAxLCAyMTgsIDExMywgMjIsIDEyNSwgMjE2LCAzMSwgNTgsIDEsIAorICAgIDIxOCwgMTEzLCAyMiwgMTIxLCAyMTYsIDMxLCA3LCA2LCAxLCAyNDUsIDIwNywgMjU0LCAxNzksIDcsIDQsIDEsIDI0NSwgCisgICAgMjA3LCAyNTQsIDE3OSwgNywgNiwgMSwgMjQ1LCAyMDcsIDI1NCwgMjA1LCA3LCA0LCAxLCAyNDUsIDIwNywgMjU0LCAyMDUsIAorICAgIDcsIDYsIDEsIDI0MSwgMjE0LCA3LCA0LCAxLCAyNDEsIDIxNCwgNywgNiwgMSwgMjE1LCA0MCwgNywgNCwgMSwgMjE1LCA0MCwgCisgICAgNywgNiwgMSwgMjE1LCAyMzAsIDcsIDQsIDEsIDIxNSwgMjMwLCA3LCA2LCAxLCAyNDksIDExOCwgNywgNCwgMSwgMjQ5LCAKKyAgICAxMTgsIDcsIDYsIDEsIDI0OSwgMTE5LCAyLCAyNDksIDIyNywgNywgNCwgMSwgMjQ5LCAxMTksIDIsIDI0OSwgMjI3LCA3LCAKKyAgICAxLCA0LCA2LCAyNDUsIDE0LCA3LCAxLCA0LCA2LCAyMjIsIDkzLCA3LCA2LCAxLCAyNTUsIDgyLCA3LCA0LCAxLCAyNTUsIAorICAgIDgyLCA3LCA2LCAxLCAyNTQsIDgxLCA3LCA0LCAxLCAyNTQsIDgxLCA3LCA2LCAxLCAyNTMsIDIwMCwgNywgNCwgMSwgMjUzLCAKKyAgICAyMDAsIDcsIDYsIDEsIDI1MywgMTg0LCA3LCA0LCAxLCAyNTMsIDE4NCwgNywgNiwgMSwgMjUzLCAxODUsIDIsIDIwMywgCisgICAgMTMwLCA3LCA0LCAxLCAyNTMsIDE4NSwgMiwgMjAzLCAxMzAsIDcsIDYsIDEsIDI1MywgMTc1LCA3LCA0LCAxLCAyNTMsIAorICAgIDE3NSwgNywgNiwgMSwgMjIzLCA1MiwgMjUxLCA3NSwgMiwgMjQ3LCAxMjgsIDcsIDQsIDEsIDIyMywgNTIsIDI1MSwgNzUsIAorICAgIDIsIDI0NywgMTI4LCA3LCA2LCAxLCAyMzUsIDMwLCAyLCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgOTEsIDcsIDYsIDEsIAorICAgIDIzNSwgMzAsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDIzNSwgCisgICAgMzAsIDIsIDIxOCwgMTA1LCAyMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjE4LCAxMDUsIDIyLCAyNDgsIAorICAgIDcsIDkxLCA3LCA2LCAxLCAyNTEsIDE0MywgMTU2LCA3LCA0LCAxLCAyNTEsIDE0MywgMTU2LCA3LCA2LCAxLCAyMzMsIDE1NSwgCisgICAgMiwgMTI1LCA5MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDEyNSwgOTEsIDcsIDYsIDEsIDE0NCwgMiwgMjAwLCAyMTgsIAorICAgIDEwNSwgMjI2LCAxMjQsIDcsIDQsIDEsIDE0NCwgMiwgMjAwLCAyMTgsIDEwNSwgMjI2LCAxMjQsIDcsIDYsIDEsIDE0NCwgMiwgCisgICAgMjMyLCAxMjksIDcsIDQsIDEsIDE0NCwgMiwgMjMyLCAxMjksIDcsIDYsIDEsIDIyNiwgMTg3LCA3LCA0LCAxLCAyMjYsIAorICAgIDE4NywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNCwgMSwgMjI2LCAKKyAgICAxMTAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDI0NCwgNjEsIDcsIDQsIAorICAgIDEsIDIyNiwgMTEwLCAyLCAyNDQsIDYxLCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMjE4LCAyMzEsIDIxNywgNzgsIDcsIDQsIAorICAgIDEsIDIyNiwgMTEwLCAyLCAyMTgsIDIzMSwgMjE3LCA3OCwgNywgNiwgMSwgMjI0LCAxMDAsIDIsIDIxOCwgMTA1LCAyMTYsIAorICAgIDE0MCwgMjQ4LCA0NywgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNiwgMSwgCisgICAgMjI0LCAxMDAsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyMjMsIAorICAgIDIyNywgMjIyLCAxODgsIDcsIDQsIDEsIDIyMywgMjI3LCAyMjIsIDE4OCwgNywgNiwgMSwgMjIyLCAxMzIsIDIyMiwgMTg4LCAKKyAgICA3LCA0LCAxLCAyMjIsIDEzMiwgMjIyLCAxODgsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAKKyAgICAyMTQsIDEwNiwgMiwgMjQ4LCA3LCA5MSwgNywgNiwgMSwgMjEyLCAxMDYsIDcsIDQsIDEsIDIxMiwgMTA2LCA3LCA2LCAxLCAKKyAgICAyMTMsIDE0NSwgMjEwLCAxNTksIDcsIDQsIDEsIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNiwgMSwgMjE2LCAxNTMsIDIsIAorICAgIDkxLCA3LCA0LCAxLCAyMTYsIDE1MywgMiwgOTEsIDcsIDYsIDEsIDIxNiwgMTUzLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIAorICAgIDI0OCwgNDcsIDcsIDQsIDEsIDIxNiwgMTUzLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIDI0OCwgNDcsIDcsIDYsIDEsIDIxMywgCisgICAgMjQ1LCA3LCA0LCAxLCAyMTMsIDI0NSwgNywgNiwgMSwgMjQ1LCA3MywgNywgNCwgMSwgMjQ1LCA3MywgNywgNiwgMSwgMjM1LCAKKyAgICAxNzgsIDcsIDQsIDEsIDIzNSwgMTc4LCA3LCA2LCAxLCAyNDksIDIxNSwgNywgNCwgMSwgMjQ5LCAyMTUsIDU4LCAxLCAyMTQsIAorICAgIDEzMywgNywgNCwgMSwgMjQ2LCA3NywgNywgNCwgMSwgMjMyLCA4OSwgNywgNCwgMSwgMjMwLCA4NSwgNywgNCwgMSwgMjI3LCAKKyAgICAyMDUsIDcsIDQsIDEsIDIyMiwgMTMxLCA3LCAxLCA0LCA2LCAyMjIsIDEzMSwgNywgNCwgMSwgMjE1LCAxMDksIDcsIDQsIDEsIAorICAgIDIxNCwgMTk3LCA3LCA2LCAxLCAyMzUsIDIyMCwgMjQ5LCA2OCwgNywgNCwgMSwgMjM1LCAyMjAsIDI0OSwgNjgsIDcsIDYsIAorICAgIDEsIDIzNSwgMjIwLCAyNDUsIDE0LCA3LCA0LCAxLCAyMzUsIDIyMCwgMjQ1LCAxNCwgNywgNiwgMSwgMjM1LCAyMjAsIDI0MywgCisgICAgMjA5LCA3LCA2LCAxLCAyMTUsIDk0LCAyMzUsIDIyMCwgMjQzLCAyMDksIDcsIDQsIDEsIDIxNSwgOTQsIDIzNSwgMjIwLCAKKyAgICAyNDMsIDIwOSwgNywgNiwgMSwgMjE1LCA5NCwgMTU2LCA3LCA0LCAxLCAyMTUsIDk0LCAxNTYsIDcsIDYsIDEsIDIzNSwgCisgICAgMjIwLCAxNTMsIDcsIDQsIDEsIDIzNSwgMjIwLCAxNTMsIDcsIDYsIDEsIDIzNSwgMjIwLCAyMjIsIDkzLCA3LCA0LCAxLCAKKyAgICAyMzUsIDIyMCwgMjIyLCA5MywgNywgNiwgMSwgMjM1LCAyMjAsIDIxNywgMTUzLCA3LCA0LCAxLCAyMzUsIDIyMCwgMjE3LCAKKyAgICAxNTMsIDU4LCAxLCAxMjEsIDI1MCwgMzksIDI1NSwgMjMsIDU4LCAxLCAyNDksIDIzNCwgNTgsIDEsIDIxOSwgMjUzLCAyNDUsIAorICAgIDEwNiwgNTAsIDcsIDYsIDEsIDIyMiwgMSwgNywgNCwgMSwgMjIyLCAxLCA3LCA2LCAxLCAyMTUsIDk0LCAyNDIsIDY3LCA3LCAKKyAgICA0LCAxLCAyMzMsIDE1NSwgMiwgMjIzLCA1OCwgMjQxLCA1OSwgMjIsIDI1MiwgNDksIDcsIDYsIDEsIDIzMCwgMzEsIDIsIAorICAgIDI0OCwgNDcsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI0OCwgNDcsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDEzMCwgNywgNCwgMSwgCisgICAgMjUxLCA3NSwgMiwgMTMwLCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyNDMsIDIxMCwgCisgICAgMiwgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIAorICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgCisgICAgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAxMDMsIDU4LCAxLCA2LCAyNDIsIDY4LCAyLCA5MSwgNTgsIDEsIAorICAgIDQsIDI3LCAyMjYsIDIzOCwgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTk0LCA3LCAyNDUsIDExMSwgMSwgMjIzLCA1MiwgMjQ1LCAKKyAgICAxNCwgNywgMjQ1LCAxMTEsIDEsIDIyMywgNTIsIDIyNiwgMTA5LCA3LCAyNDUsIDExMSwgMSwgMjM1LCAyMDAsIDE5NCwgNywgCisgICAgMjQ1LCAxMTEsIDEsIDI0MCwgMTYxLCAyMzIsIDEzNSwgNywgMjQ1LCAxMTEsIDEsIDI1NCwgMzEsIDE5NCwgMjE3LCAyMzEsIAorICAgIDIyOSwgMjE5LCAxLCA2MSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCA3NCwgMjE3LCAyMzEsIDIyOSwgMjE5LCA1LCAyNDYsIAorICAgIDU2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDY5LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDc2LCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDEsIDc4LCAyMTcsIDIzMSwgMjI5LCAyMTksIDUsIDI0MiwgNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzQsIAorICAgIDM0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzNCwgMTExLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0MiwgMTgxLCAKKyAgICAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0MiwgMjMxLCAyMTcsIDIzMSwgMjI5LCAyMTksIDUsIDI1NCwgODMsIDIxNywgCisgICAgMjMxLCAyMjksIDIxOSwgMSwgMjQ5LCAyNDYsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjUwLCA5NCwgMjE3LCAyMzEsIAorICAgIDIyOSwgMjE5LCAxLCAyMzUsIDc0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzNSwgMTE1LCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDEsIDIxNSwgMTM0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIxNSwgMTQwLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIAorICAgIDI0OCwgMTEzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0OCwgMTIyLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDExMiwgCisgICAgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMTYsIDE1NywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNDcsIDE1MywgMjE3LCAKKyAgICAyMzEsIDIyOSwgMjE5LCAxLCAyNDgsIDE1LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyOCwgNzksIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMSwgMjI1LCAxOSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMjUsIDEyNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAKKyAgICAyNTEsIDIxMywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNTIsIDE4LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzMCwgCisgICAgMTY2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyMiwgMjEzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzMiwgMTYyLCAKKyAgICAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyMiwgMTY3LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIxOSwgNjAsIDIxNywgCisgICAgMjMxLCAyMjksIDIxOSwgMSwgMjQxLCA3NSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgNjEsIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMjUsIDUsIDc0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCA2OSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgCisgICAgNzYsIDIxNywgMjMxLCAyMjksIDIxOSwgMjUsIDUsIDIyNiwgMTg3LCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIAorICAgIDIzMSwgMTYzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIDIzMSwgMTYyLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgCisgICAgMTUsIDIzMSwgMTYxLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIDIzMSwgMTYwLCAyMjgsIDYxLCAyMzUsIDI0NywgCisgICAgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCAyMjgsIDYxLCAKKyAgICAyMzUsIDI0NywgMjQ0LCAxMCwgMTM0LCAyMjQsIDIyLCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAxMCwgMTIzLCAyMTksIAorICAgIDExOSwgMjI4LCA2MSwgMjM1LCAyNDcsIDI0NCwgMTAsIDEyMywgMjQ1LCAxOTYsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIAorICAgIDEwLCAxMzQsIDIxOSwgMTE4LCAyMjgsIDYxLCAyMzUsIDI0NywgMjI0LCAyNSwgNzksIDIyOCwgNjEsIDIzNSwgMjQ3LCAKKyAgICAyMjUsIDQzLCA3OSwgMjI4LCA2MSwgMjM1LCAyNDcsIDIyMiwgMTIwLCA3OSwgMjI4LCA2MSwgMjM1LCAyNDcsIDIyNCwgMjYsIAorICAgIDc5LCAyMjUsIDE0NywgMSwgMTc2LCAyMjUsIDE0NywgMSwgMjM0LCAxMzgsIDIyNSwgMTQ3LCAxLCAyNDMsIDE0MiwgMjI1LCAKKyAgICAxNDcsIDEsIDIyOSwgODIsIDIyNSwgMTQ3LCAxLCAyNTEsIDQxLCAyMjUsIDE0NywgMSwgMjUwLCAxNjUsIDIyNSwgMTQ3LCAKKyAgICAxLCAyMzUsIDE0NywgMjI1LCAxNDcsIDEsIDIyNywgMTY5LCAyMjUsIDE0NywgMSwgMjE3LCAxMDYsIDIyNSwgMTQ3LCAxLCAKKyAgICAyMTYsIDIwOSwgMjI1LCAxNDcsIDEsIDI0OCwgMjI5LCAyMjUsIDE0NywgMSwgMTk4LCAyMjUsIDE0NywgMSwgMTkxLCAyMjUsIAorICAgIDE0NywgMSwgMjI1LCAxNTAsIDIyNSwgMTQ3LCAxLCAyNTIsIDE5OSwgMjI1LCAxNDcsIDEsIDE4NiwgMjI1LCAxNDcsIDEsIAorICAgIDIxNSwgMTg0LCAyMjUsIDE0NywgMSwgMjE1LCAxNzYsIDIyNSwgMTQ3LCAxLCAyNDYsIDQ2LCAyMjUsIDE0NywgMSwgMjEyLCAKKyAgICA2NSwgMjI1LCAxNDcsIDEsIDIxMCwgODIsIDIyNSwgMTQ3LCAxLCAyMTAsIDExNiwgMjI1LCAxNDcsIDEsIDQsIDYxLCAyMjUsIAorICAgIDE0NywgMSwgMTkyLCAyMjUsIDE0NywgMSwgMjA1LCAyMjUsIDE0NywgMSwgMjMzLCAxNDEsIDIyNSwgMTQ3LCAxLCAyMjAsIAorICAgIDEwNCwgMjI1LCAxNDcsIDEsIDIwNiwgMjI1LCAxNDcsIDEsIDE2MiwgMjI1LCAxNDcsIDEsIDYxLCAyMjUsIDE0NywgMSwgCisgICAgNzQsIDIyNSwgMTQ3LCAxLCA2OSwgMjI1LCAxNDcsIDEsIDc2LCAyMjUsIDE0NywgMSwgNzgsIDIyNSwgMTQ3LCAxLCAyMjQsIAorICAgIDkxLCAyMjUsIDE0NywgMSwgMjExLCAxNjUsIDIyNSwgMTQ3LCAxLCAyNDQsIDIwNCwgMjI1LCAxNDcsIDEsIDI0MywgMzYsIAorICAgIDIyNSwgMTQ3LCAxLCAyNDUsIDIxNywgMjI1LCAxNDcsIDIxOCwgNzQsIDEsIDIxMiwgNjUsIDIyNSwgMTQ3LCAyMTgsIDc0LCAKKyAgICAxLCAxOTIsIDIyNSwgMTQ3LCAxLCAyMTUsIDE1NywgMjI1LCAxNDcsIDEsIDIxNSwgMTQ1LCAyMjUsIDE0NywgMSwgMjQ4LCAKKyAgICAxNDMsIDIyNSwgMTQ3LCAxLCAyMjgsIDExNSwgMjI1LCAxNDcsIDEsIDI1NCwgMTQ5LCAxOTIsIDIyNSwgMTQ3LCAxLCAyMTMsIAorICAgIDEzNCwgMjIwLCAxMDQsIDIyNSwgMTQ3LCAxLCAyMTMsIDEzNSwgMTYyLCAyMjUsIDE0NywgMSwgMjUzLCAyMzEsIDI0NCwgCisgICAgMjA0LCAyMjUsIDE0NywgMjE4LCA3NCwgMSwgMjA1LCAyMjUsIDE0NywgMjE4LCAyNiwgMSwgMjA1LCAyMjUsIDE0NywgMSwgCisgICAgMjUxLCA3LCAyMjUsIDE0NywgMjE5LCAxNTcsIDI0MSwgMjQzLCA3OSwgMjI1LCAxNDcsIDUyLCAyNDEsIDI0MywgNzksIAorICAgIDIyNSwgMTQ3LCAxNjQsIDIyMCwgOTcsIDIyNSwgMTQ3LCAxNjQsIDUyLCAyMjAsIDk3LCAxNzksIDUsIDI1NCwgODMsIDE3OSwgCisgICAgNSwgMjEzLCAxNDcsIDE3OSwgMSwgNjEsIDE3OSwgMSwgMjU1LCA4MiwgMTc5LCAxLCA3NCwgMTc5LCAxLCAyMzYsIDQwLCAKKyAgICAxNzksIDEsIDY5LCAxNzksIDEsIDIxNCwgMTE4LCAxNzksIDEsIDE0OSwgMTUzLCAxNzksIDEsIDE0OSwgMjIyLCAxODIsIAorICAgIDE3OSwgMSwgMTQ5LCAxNTYsIDE3OSwgMSwgMTQ5LCAyMzIsIDE5MSwgMTc5LCAxLCA3NiwgMTc5LCAxLCAyNDUsIDIxNywgCisgICAgMTc5LCAxLCAyNTQsIDIxMCwgMTc5LCAxLCA3OCwgMTc5LCAxLCAyMjYsIDE4NywgMTc5LCAxLCAyNTMsIDIwMCwgMTc5LCAxLCAKKyAgICAxNzYsIDE3OSwgMSwgMjM0LCAxMzgsIDE3OSwgMSwgMjQzLCAxNDIsIDE3OSwgMSwgMjQzLCAwLCAxNzksIDEsIDIyOSwgODIsIAorICAgIDE3OSwgMSwgMjUxLCA0MSwgMTc5LCAxLCAyNTAsIDE2NSwgMTc5LCAxLCAyMzUsIDE0NywgMTc5LCAxLCAyMzUsIDEyMCwgCisgICAgMTc5LCAxLCAyMjcsIDE2OSwgMTc5LCAxLCAyMTUsIDE1NywgMTc5LCAxLCAyMTUsIDE0NSwgMTc5LCAxLCAyNDgsIDE0MywgCisgICAgMTc5LCAxLCAyNDgsIDEyNywgMTc5LCAxLCAyMjgsIDExNSwgMTc5LCAxLCAyMTcsIDEwNiwgMTc5LCAxLCAyMTYsIDIwOSwgCisgICAgMTc5LCAxLCAyNDgsIDIyOSwgMTc5LCAxLCAyNDgsIDMzLCAxNzksIDEsIDE5OCwgMTc5LCAxLCAxOTEsIDE3OSwgMSwgMjI1LCAKKyAgICAxNTAsIDE3OSwgMSwgMjUyLCAxOTksIDE3OSwgMSwgMjUyLCAyNiwgMTc5LCAxLCAxODYsIDE3OSwgMSwgMTkyLCAxNzksIDEsIAorICAgIDIwNSwgMTc5LCAxLCAyMzMsIDE0MSwgMTc5LCAxLCAyMTQsIDI3LCAxNzksIDEsIDIyMCwgMTA0LCAxNzksIDEsIDIxOCwgCisgICAgMjI1LCAxNzksIDEsIDIwNiwgMTc5LCAxLCAxNjIsIDE3OSwgMSwgMjMyLCAxOTAsIDE3OSwgMTE3LCA1LCAyNDIsIDUxLCAKKyAgICAxNzksIDI1LCA1LCAyNTUsIDgyLCAxNzksIDI1LCA1LCA3NCwgMTc5LCAyNSwgNSwgMjM2LCA0MCwgMTc5LCAyNSwgNSwgNjksIAorICAgIDE3OSwgMjUsIDUsIDIxNCwgMTE4LCAxNzksIDI1LCA1LCAxNDksIDE1MywgMTc5LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgCisgICAgMTc5LCAyNSwgNSwgMTQ5LCAxNTYsIDE3OSwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE3OSwgMjUsIDUsIDc2LCAxNzksIDI1LCAKKyAgICA1LCAyNDUsIDIxNywgMTc5LCAyNSwgNSwgMjU0LCAyMTAsIDE3OSwgMjUsIDUsIDc4LCAxNzksIDI1LCA1LCAyMjYsIDE4NywgCisgICAgMTc5LCAyNSwgNSwgMjUzLCAyMDAsIDE3OSwgNSwgMjEzLCAxNTIsIDE3OSwgMjQ4LCAxODYsIDE3OSwgNTIsIDI0OCwgMTg2LCAKKyAgICAxNzksIDIxLCAyMTAsIDg2LCAxNzksIDIxLCAxMTEsIDE3OSwgMjEsIDEwNSwgMTc5LCAyMSwgMTU4LCAxNzksIDIxLCAxNjEsIAorICAgIDE3OSwgMjEsIDE5MCwgMTc5LCAyMSwgMTk1LCAxNzksIDIxLCAxOTksIDE3OSwgMjEsIDE5NiwgMTc5LCAyMSwgMjAxLCAzOCwgCisgICAgODQsIDIxLCAyMTAsIDg2LCAzOCwgODQsIDIxLCAxMTEsIDM4LCA4NCwgMjEsIDEwNSwgMzgsIDg0LCAyMSwgMTU4LCAzOCwgCisgICAgODQsIDIxLCAxNjEsIDM4LCA4NCwgMjEsIDE5MCwgMzgsIDg0LCAyMSwgMTk1LCAzOCwgODQsIDIxLCAxOTksIDM4LCA4NCwgCisgICAgMjEsIDE5NiwgMzgsIDg0LCAyMSwgMjAxLCAzOCwgODQsIDEsIDYxLCAzOCwgODQsIDEsIDY5LCAzOCwgODQsIDEsIDE3NiwgCisgICAgMzgsIDg0LCAxLCAxOTgsIDM4LCA4NCwgMSwgMTkxLCAzOCwgODQsIDEsIDIwNSwgMzgsIDg0LCAxLCAyMTMsIDE3NiwgMzgsIAorICAgIDg0LCA1LCAyNTMsIDE4MywgODQsIDUsIDIxOSwgMTksIDI1MSwgNywgODQsIDUsIDI1MSwgOCwgMjEzLCAxNTIsIDg0LCA1LCAKKyAgICA1MiwgMjUxLCA4LCAyMTMsIDE1MiwgODQsIDUsIDI1MSwgOCwgMTA1LCA4NCwgNSwgMjUxLCA4LCAxNTgsIDg0LCA1LCAyNTEsIAorICAgIDgsIDI1MywgMTgzLCA4NCwgNSwgMjI0LCAxMjcsIDg0LCAyNDMsIDEwNywgMjQ0LCAxMTEsIDg0LCAyNTAsIDI0NiwgODQsIAorICAgIDI0MSwgMjM3LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAyMTAsIDg2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxMTEsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDEwNSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTU4LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDIxLCAxNjEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5MCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTk1LCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxOTksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5NiwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAyMSwgMjAxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDE3NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMzQsIAorICAgIDEzOCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDMsIDE0MiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjksIDgyLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIwNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjAsIDEwNCwgMjM0LCAxOTQsIAorICAgIDIzMiwgMjQ4LCAxLCAyMTAsIDExNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjcsIDE2OSwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAxLCAyMTcsIDEwNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDAsIDIzMywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAKKyAgICAxOTgsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTkxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyNSwgMTUwLCAyMzQsIAorICAgIDE5NCwgMjMyLCAyNDgsIDEsIDE4NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDgsIDIyOSwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAxLCAyNTIsIDE5OSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMDUsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTkyLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIzMywgMTQxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIxMiwgNjUsIDIzNCwgCisgICAgMTk0LCAyMzIsIDI0OCwgMSwgMjE2LCAyMDksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTYyLCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDEsIDIxNCwgMjcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjUxLCA0MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAKKyAgICA2MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjYsIDIzOCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCA3NCwgMjM0LCAxOTQsIAorICAgIDIzMiwgMjQ4LCAxLCAyMjYsIDE4NywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgMjE0LCAyMTQsIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMjUsIDc2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCA2OSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgMjQ1LCAKKyAgICAyMTcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjUsIDc4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEzOCwgMjI1LCAzMywgMjM0LCAKKyAgICAxOTQsIDIzMiwgMjQ4LCAxMzgsIDI1MSwgMjAsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMTM4LCAyNTEsIDIxLCAyMjUsIDMzLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDUsIDI0OSwgODUsIDIzNCwgMTk0LCAyMzIsIDI0OCwgNSwgMjE5LCAyMDEsIDIyMywgOTYsIAorICAgIDEsIDE3NiwgMjIzLCA5NiwgMSwgMjQzLCAxNDIsIDIyMywgOTYsIDEsIDIyOSwgODIsIDIyMywgOTYsIDEsIDIxNywgMTA2LCAKKyAgICAyMjMsIDk2LCAxLCAyNDgsIDIyOSwgMjIzLCA5NiwgMSwgMTk4LCAyMjMsIDk2LCAxLCAxOTEsIDIyMywgOTYsIDEsIDI1MiwgCisgICAgMTk5LCAyMjMsIDk2LCAxLCAxODYsIDIyMywgOTYsIDEsIDI1MSwgNDEsIDIyMywgOTYsIDEsIDIzNSwgMTQ3LCAyMjMsIDk2LCAKKyAgICAxLCAyMjcsIDE2OSwgMjIzLCA5NiwgMSwgMjA2LCAyMjMsIDk2LCAxLCAyMDUsIDIyMywgOTYsIDEsIDIzMywgMTQxLCAyMjMsIAorICAgIDk2LCAxLCAxOTIsIDIyMywgOTYsIDEsIDIxMiwgNjUsIDIyMywgOTYsIDEsIDE2MiwgMjIzLCA5NiwgMSwgMjMxLCAxMjksIAorICAgIDIyMywgOTYsIDEsIDIyOSwgNjEsIDIyMywgOTYsIDEsIDIyOSwgMTUzLCAyMjMsIDk2LCAxLCAyMjcsIDEzOSwgMjIzLCA5NiwgCisgICAgMSwgNjEsIDIyMywgOTYsIDI1LCA1LCA3NCwgMjIzLCA5NiwgMjUsIDUsIDY5LCAyMjMsIDk2LCAyNSwgNSwgNzYsIDIyMywgCisgICAgOTYsIDI1LCA1LCAyNTQsIDIxMCwgMjIzLCA5NiwgMjUsIDUsIDc4LCAyMjMsIDk2LCAyNSwgNSwgMjUzLCAyMDAsIDIyMywgCisgICAgOTYsIDI1LCA1LCAyNDUsIDYzLCAyMjMsIDk2LCAyNSwgNSwgMjQ1LCAyNDEsIDIyMywgOTYsIDExNywgNSwgMjI5LCA4NCwgCisgICAgMjIzLCA5NiwgMTE3LCA1LCAyMzAsIDMwLCAyMjMsIDk2LCAxMTcsIDUsIDE1MywgMjIzLCA5NiwgMTE3LCA1LCAyNDIsIDY3LCAKKyAgICAyMjMsIDk2LCAyMTMsIDE1MiwgMjIzLCA5NiwgMjIxLCAxNzUsIDc5LCAyNCwgMTAwLCAyMTYsIDk4LCAyNCwgMTAwLCAyMTYsIAorICAgIDk3LCAyNCwgMTAwLCAyMTYsIDk1LCAyNCwgMTAwLCAyMTYsIDEwMCwgMjQsIDEwMCwgMjIzLCAyNCwgMjQsIDEwMCwgMjIzLCAKKyAgICA4LCAyNCwgMTAwLCAyMjMsIDMsIDI0LCAxMDAsIDIyMywgNSwgMjQsIDEwMCwgMjIzLCAyMSwgMjQsIDEwMCwgMjIzLCAxNCwgCisgICAgMjQsIDEwMCwgMjIzLCA3LCAyNCwgMTAwLCAyMjMsIDI2LCAyNCwgMTAwLCAyMjMsIDksIDI0LCAxMDAsIDIyMywgMjgsIDI0LCAKKyAgICAxMDAsIDIyMywgMjUsIDI0LCAxMDAsIDIzMCwgMjE4LCAyNCwgMTAwLCAyMzAsIDIwOSwgMjQsIDEwMCwgMjMwLCAyMTIsIAorICAgIDI0LCAxMDAsIDIyNSwgODMsIDI0LCAxMDAsIDIyNSwgOTQsIDI0LCAxMDAsIDIyNSwgOTUsIDI0LCAxMDAsIDIxOCwgMjA5LCAKKyAgICAyNCwgMTAwLCAyMzYsIDUzLCAyNCwgMTAwLCAyMzYsIDYwLCAyNCwgMTAwLCAyMTgsIDIyMCwgMjQsIDEwMCwgMjE4LCAyMDcsIAorICAgIDI0LCAxMDAsIDIyNSwgMTMzLCAyNCwgMTAwLCAyNDEsIDE3NCwgMjQsIDEwMCwgMjE4LCAyMDQsIDE1NSwgNSwgMjI2LCAzMSwgCisgICAgMTU1LCA1LCAyNTAsIDE5NSwgMTU1LCA1LCAyMzMsIDcyLCAxNTUsIDUsIDIxMSwgMjQzLCAxNTUsIDEsIDYxLCAxNTUsIDEsIAorICAgIDI0MCwgMTYxLCAyMzQsIDE5NywgMTU1LCAxLCA3NCwgMTU1LCAxLCAyMzYsIDQwLCAxNTUsIDEsIDY5LCAxNTUsIDEsIDIyNiwgCisgICAgOTQsIDI1MCwgMTcxLCAxNTUsIDEsIDIyOSwgODMsIDIzMywgMzQsIDE1NSwgMSwgMjI5LCA4MywgMjMzLCAzNSwgMjIzLCAKKyAgICAxNDUsIDE1NSwgMSwgNzYsIDE1NSwgMSwgMjU0LCAyMTAsIDE1NSwgMSwgNzgsIDE1NSwgMSwgMTc2LCAxNTUsIDEsIDIzNSwgCisgICAgMTksIDIyMSwgMjMwLCAxNTUsIDEsIDIzNSwgMTksIDIzMCwgNzEsIDE1NSwgMSwgMjQzLCAxNDIsIDE1NSwgMSwgMjQzLCAKKyAgICAxNDMsIDIzMCwgNzEsIDE1NSwgMSwgMjI5LCA4MiwgMTU1LCAxLCAyNTEsIDQxLCAxNTUsIDEsIDI1MSwgNDIsIDIzMCwgNzEsIAorICAgIDE1NSwgMSwgMjM1LCAxNDcsIDE1NSwgMSwgMjI3LCAxNzAsIDIzMCwgNzEsIDE1NSwgMSwgMjM1LCAxNDgsIDIzMSwgMjEyLCAKKyAgICAxNTUsIDEsIDIyNywgMTY5LCAxNTUsIDEsIDIxNSwgMTU3LCAxNTUsIDEsIDIxNSwgMTU4LCAyMzEsIDIxMiwgMTU1LCAxLCAKKyAgICAyNDgsIDE0MywgMTU1LCAxLCAyNDgsIDE0NCwgMjMxLCAyMTIsIDE1NSwgMSwgMjI5LCAyMzQsIDIzMCwgNzEsIDE1NSwgMSwgCisgICAgMjE3LCAxMDYsIDE1NSwgMSwgMjE3LCAxMDcsIDIzMCwgNzEsIDE1NSwgMSwgMjQ4LCAyMjksIDE1NSwgMSwgMjQ4LCAyMzAsIAorICAgIDIzMSwgMjEyLCAxNTUsIDEsIDE5OCwgMTU1LCAxLCAxOTEsIDE1NSwgMSwgMjI2LCA5NCwgMjMwLCA3MSwgMTU1LCAxLCAKKyAgICAyNTIsIDE5OSwgMTU1LCAxLCAyNTIsIDIwMCwgMjMwLCA3MSwgMTU1LCAxLCAxODYsIDE1NSwgMSwgMTkyLCAxNTUsIDEsIAorICAgIDIwNSwgMTU1LCAxLCAyMjMsIDE5MSwgMjU0LCAyMTksIDE1NSwgMSwgMjMzLCAxNDEsIDE1NSwgMSwgMjEyLCA2NSwgMTU1LCAKKyAgICAxLCAyMjIsIDM2LCAyMzAsIDcxLCAxNTUsIDEsIDIyMiwgMzYsIDIzMSwgMjEyLCAxNTUsIDEsIDIwNiwgMTU1LCAxLCAxNjIsIAorICAgIDE1NSwgNSwgMjUwLCAxOTYsIDIxNiwgMjUxLCAxNTUsIDI1LCA1LCAyMTcsIDQ4LCAxNTUsIDI1LCA1LCAyMTYsIDM2LCAKKyAgICAxNTUsIDI1LCA1LCAyMTEsIDE5MCwgMTU1LCAyNSwgNSwgMjExLCAxOTEsIDIzMSwgNzQsIDE1NSwgMjUsIDUsIDIxOCwgNDgsIAorICAgIDE1NSwgMjUsIDUsIDIxOCwgNDksIDIzMSwgNjIsIDE1NSwgMjUsIDUsIDIxNywgNjYsIDE1NSwgMjUsIDUsIDI0NywgMjAyLCAKKyAgICAyMzAsIDcwLCAxNTUsIDI1LCA1LCAyMjUsIDE4NywgMTU1LCAxMTcsIDUsIDIzNCwgMTY0LCAxNTUsIDExNywgNSwgMjI1LCAKKyAgICAxOTksIDE1NSwgMTE3LCA1LCAyNTEsIDI3LCAxNTUsIDIyNiwgNDQsIDE1NSwgNDMsIDIyMywgNzIsIDE1NSwgNDQsIDIyMywgCisgICAgNzIsIDE1NSwgMjI2LCA4MywgMjU0LCAxMjUsIDE1NSwgMjI2LCA4MywgMjMxLCAyMjksIDE1NSwgMjI2LCA4MywgMjMyLCAKKyAgICA5MywgMTU1LCAyMjYsIDgzLCAyMTEsIDIzOCwgMTU1LCAyMjYsIDgzLCAyMjYsIDQ1LCAxNTUsIDIyNiwgODMsIDIzMiwgCisgICAgMjExLCAxNTUsIDIyNiwgODMsIDIzMiwgODcsIDE1NSwgMjI2LCA4MywgMjU1LCAyLCAxNTUsIDIyNiwgODMsIDI1NSwgMywgCisgICAgMjU1LCAyLCAxNTUsIDIyNiwgODMsIDIyNSwgNTQsIDE1NSwgMjE1LCA5NCwgMjI2LCA4MywgMjI1LCA1NCwgMTU1LCAyMjYsIAorICAgIDQwLCAxNTUsIDIxLCAyMTAsIDg2LCAxNTUsIDIxLCAxMTEsIDE1NSwgMjEsIDEwNSwgMTU1LCAyMSwgMTU4LCAxNTUsIDIxLCAKKyAgICAxNjEsIDE1NSwgMjEsIDE5MCwgMTU1LCAyMSwgMTk1LCAxNTUsIDIxLCAxOTksIDE1NSwgMjEsIDE5NiwgMTU1LCAyMSwgCisgICAgMjAxLCAxNTUsIDIyNiwgODMsIDIxNiwgNzAsIDIxNSwgMTA3LCAxNTUsIDIyNiwgODMsIDIzNSwgMTc0LCAxNzIsIDEsIDYxLCAKKyAgICAxNzIsIDEsIDc0LCAxNzIsIDEsIDY5LCAxNzIsIDEsIDc2LCAxNzIsIDEsIDI1NCwgMjEwLCAxNzIsIDEsIDc4LCAxNzIsIDEsIAorICAgIDE3NiwgMTcyLCAxLCAyMzQsIDEzOCwgMTcyLCAxLCAyNDMsIDE0MiwgMTcyLCAxLCAyNDMsIDAsIDE3MiwgMSwgMjI4LCAKKyAgICAyNTAsIDE3MiwgMSwgMjI5LCA4MiwgMTcyLCAxLCAyNTAsIDE2NSwgMTcyLCAxLCAyNTAsIDEyMCwgMTcyLCAxLCAyMzUsIAorICAgIDE0NywgMTcyLCAxLCAyMzUsIDEyMCwgMTcyLCAxLCAyMjgsIDI0MCwgMTcyLCAxLCAyMjgsIDI0MiwgMTcyLCAxLCAyMjgsIAorICAgIDI0MSwgMTcyLCAxLCAyMTcsIDEwNiwgMTcyLCAxLCAyMTYsIDIwOSwgMTcyLCAxLCAyNDgsIDIyOSwgMTcyLCAxLCAyNDgsIAorICAgIDMzLCAxNzIsIDEsIDIyNywgMjExLCAxNzIsIDEsIDE5OCwgMTcyLCAxLCAyNDgsIDE0MywgMTcyLCAxLCAxOTEsIDE3MiwgMSwgCisgICAgMjI0LCAyMjMsIDE3MiwgMSwgMjI1LCAxNTAsIDE3MiwgMSwgMjUyLCAxOTksIDE3MiwgMSwgMjUyLCAyNiwgMTcyLCAxLCAKKyAgICAyMzAsIDEwMCwgMTcyLCAxLCAxODYsIDE3MiwgMSwgMjUyLCAxMTksIDE3MiwgMSwgMTkyLCAxNzIsIDEsIDIwNSwgMTcyLCAKKyAgICAxLCAyMzMsIDE0MSwgMTcyLCAxLCAyMTQsIDI3LCAxNzIsIDEsIDIxOCwgMjI1LCAxNzIsIDEsIDIwNiwgMTcyLCAxLCAxNjIsIAorICAgIDE3MiwgMjUsIDUsIDI1NSwgODIsIDE3MiwgMjUsIDUsIDc0LCAxNzIsIDI1LCA1LCAyMzYsIDQwLCAxNzIsIDI1LCA1LCAKKyAgICAyNDUsIDIwMywgMTcyLCAyNSwgNSwgNjksIDE3MiwgMjUsIDUsIDIyNiwgMjM4LCAxNzIsIDI1LCA1LCA3OCwgMTcyLCAyNSwgCisgICAgNSwgMjU0LCAyMTAsIDE3MiwgMjUsIDUsIDI1MywgMjAwLCAxNzIsIDI1LCA1LCAyMTQsIDIxNCwgMTcyLCAxMTcsIDUsIAorICAgIDE5MiwgMTcyLCAxMTcsIDUsIDIwNSwgMTcyLCAxMTcsIDUsIDIzMywgMTQxLCAxNzIsIDExNywgNSwgMjEyLCA2NSwgMTcyLCAKKyAgICAxLCA0MCwgMjM1LCAyOSwgMTcyLCAxLCA0MCwgMjQzLCAyMDksIDE3MiwgMSwgNDAsIDIyOSwgODQsIDE3MiwgMTE3LCA1LCAKKyAgICA0MCwgMjI5LCA4NCwgMTcyLCAxLCA0MCwgMjUwLCAxNjYsIDE3MiwgMSwgNDAsIDIxNywgMTUzLCAxNzIsIDEsIDQwLCAyMzAsIAorICAgIDMwLCAxNzIsIDEsIDQwLCAyMjYsIDEwOSwgMTcyLCAxLCA0MCwgMjExLCAxMTcsIDE3MiwgMSwgNDAsIDE1MywgMTcyLCAxLCAKKyAgICA0MCwgMTU2LCAxNzIsIDEsIDQwLCAyMTgsIDIyOCwgMTcyLCAxMTcsIDUsIDQwLCAxOTQsIDE3MiwgMTE3LCA1LCA0MCwgCisgICAgMjQyLCA2NywgMTcyLCAyMSwgMjEwLCA4NiwgMTcyLCAyMSwgMTExLCAxNzIsIDIxLCAxMDUsIDE3MiwgMjEsIDE1OCwgMTcyLCAKKyAgICAyMSwgMTYxLCAxNzIsIDIxLCAxOTAsIDE3MiwgMjEsIDE5NSwgMTcyLCAyMSwgMTk5LCAxNzIsIDIxLCAxOTYsIDE3MiwgMjEsIAorICAgIDIwMSwgMTcyLCAyMjQsIDE0NCwgMjE4LCAyNTMsIDE3MiwgMjI0LCAxNDQsIDI0OCwgMTg2LCAxNzIsIDIyNCwgMTQ0LCA1MiwgCisgICAgMjQ4LCAxODYsIDE3MiwgMjI0LCAxNDQsIDIxNSwgMjEyLCAyNDgsIDE4NiwgNjgsIDEsIDIzNCwgMTMyLCAyNDMsIDE0MiwgCisgICAgNjgsIDEsIDIzNCwgMTMyLCAyNTEsIDQxLCA2OCwgMSwgMjM0LCAxMzIsIDI1MCwgMTY1LCA2OCwgMSwgMjM0LCAxMzIsIAorICAgIDIzNSwgMTQ3LCA2OCwgMSwgMjM0LCAxMzIsIDIzNSwgMTIwLCA2OCwgMSwgMjM0LCAxMzIsIDIyNywgMTY5LCA2OCwgMSwgCisgICAgMjM0LCAxMzIsIDIxNSwgMTU3LCA2OCwgMSwgMjM0LCAxMzIsIDIxNSwgMTQ1LCA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMTQzLCAKKyAgICA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMTI3LCA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMzMsIDY4LCAxLCAyMzQsIDEzMiwgCisgICAgMTk4LCA2OCwgMSwgMjM0LCAxMzIsIDIwNiwgNjgsIDEsIDIzNCwgMTMyLCAxNjIsIDY4LCAxLCAyMzQsIDEzMiwgMjQxLCAKKyAgICAxOTYsIDY4LCAxLCAyMzQsIDEzMiwgMjQ0LCAyMDQsIDY4LCA1OCwgMSwgMjM0LCAxMzIsIDIyMywgMTEyLCA2OCwgMSwgCisgICAgMjM0LCAxMzIsIDIxMSwgMTY1LCA2OCwgMSwgMjM0LCAxMzIsIDIxMCwgMTE2LCA2OCwgMSwgMjM0LCAxMzIsIDIwNSwgNjgsIAorICAgIDIzMiwgMTUxLCAyMzQsIDEzMiwgMjI3LCAxLCA2OCwgMjMyLCAxNTEsIDIzNCwgMTMyLCAyMjQsIDQ2LCA2OCwgMjMyLCAKKyAgICAxNTEsIDIzNCwgMTMyLCAyNDEsIDEyOCwgNjgsIDE2LCAyNTQsIDE5OSwgMjQ1LCAzOCwgNjgsIDE2LCAyNTQsIDE5OSwgCisgICAgMTExLCA2OCwgMTYsIDI1NCwgMTk5LCAxMDUsIDY4LCAxLCAyNTQsIDE5OSwgMjA1LCA2OCwgNSwgMjI2LCAyNywgMjM0LCAKKyAgICAyMTksIDIxNiwgMzEsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAzNCwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIDM0LCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIzNCwgMTExLCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMTExLCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgCisgICAgMTIwLCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMTIwLCAzOSwgMjA4LCAxLCAxMjEsIDI0MiwgMTgxLCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDI0MiwgMTgxLCAzOSwgMjA4LCAxLCAxMjEsIDIyOSwgOSwgMzksIDIwOCwgMSwgMTI1LCAyMjksIDksIDM5LCAyMDgsIAorICAgIDEsIDEyMSwgMjQ5LCAyNDYsIDM5LCAyMDgsIDEsIDEyNSwgMjQ5LCAyNDYsIDM5LCAyMDgsIDEsIDEyMSwgMjUwLCA5NCwgCisgICAgMzksIDIwOCwgMSwgMTI1LCAyNTAsIDk0LCAzOSwgMjA4LCAxLCAxMjEsIDIxOSwgNjAsIDM5LCAyMDgsIDEsIDEyNSwgMjE5LCAKKyAgICA2MCwgMzksIDIwOCwgMSwgMTIxLCAyMjcsIDEzOCwgMzksIDIwOCwgMSwgMTI1LCAyMjcsIDEzOCwgMzksIDIwOCwgMSwgCisgICAgMTIxLCAyNDcsIDE1MywgMzksIDIwOCwgMSwgMTI1LCAyNDcsIDE1MywgMzksIDIwOCwgMSwgMTIxLCAxMTIsIDM5LCAyMDgsIAorICAgIDEsIDEyNSwgMTEyLCAzOSwgMjA4LCAxLCAxMjEsIDIxNiwgMTU3LCAzOSwgMjA4LCAxLCAxMjUsIDIxNiwgMTU3LCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIyOCwgNzksIDM5LCAyMDgsIDEsIDEyNSwgMjI4LCA3OSwgMzksIDIwOCwgMSwgMTIxLCAyNTEsIAorICAgIDIxMywgMzksIDIwOCwgMSwgMTI1LCAyNTEsIDIxMywgMzksIDIwOCwgMSwgMTIxLCAyMjUsIDE5LCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDIyNSwgMTksIDM5LCAyMDgsIDEsIDEyMSwgMjI1LCAxMjQsIDM5LCAyMDgsIDEsIDEyNSwgMjI1LCAxMjQsIDM5LCAKKyAgICAyMDgsIDEsIDEyMSwgMjQ0LCA1MSwgMzksIDIwOCwgMSwgMTI1LCAyNDQsIDUxLCAzOSwgMjA4LCAxLCAxMjEsIDIzMCwgCisgICAgMTY2LCAzOSwgMjA4LCAxLCAxMjUsIDIzMCwgMTY2LCAzOSwgMjA4LCAxLCAxMjEsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAxMjEsIDIyMiwgMjEzLCAzOSwgMjA4LCAxLCAxMjUsIDIyMiwgMjEzLCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIzMiwgMTYyLCAzOSwgMjA4LCAxLCAxMjUsIDIzMiwgMTYyLCAzOSwgMjA4LCAxLCAxMjEsIDIxMywgCisgICAgMTM4LCAzOSwgMjA4LCAxLCAxMjUsIDIxMywgMTM4LCAzOSwgMjA4LCAxLCAxMjEsIDI0MSwgNzUsIDM5LCAyMDgsIDEsIAorICAgIDEyNSwgMjQxLCA3NSwgMzksIDIwOCwgMSwgMTIxLCA3OCwgMzksIDIwOCwgMSwgMTI1LCA3OCwgMzksIDIwOCwgMjMxLCAKKyAgICAyMDksIDIzNCwgMjM2LCAzOSwgMjA4LCAyNSwgMjU1LCA4MiwgMzksIDIwOCwgMjUsIDc0LCAzOSwgMjA4LCAyNSwgMjE0LCAKKyAgICAyMTQsIDM5LCAyMDgsIDI1LCA2OSwgMzksIDIwOCwgMjUsIDc2LCAzOSwgMjA4LCAyNSwgNzgsIDM5LCAyMDgsIDIzMSwgCisgICAgMjA5LCAyMzQsIDExNCwgMzksIDIwOCwgMjUsIDI0MCwgMTI2LCAzOSwgMjA4LCAyNSwgMjE0LCAyMTMsIDM5LCAyMDgsIDI1LCAKKyAgICAyMTQsIDIyOSwgMzksIDIwOCwgMjUsIDI1MywgMTk4LCAzOSwgMjA4LCAyNSwgMjUzLCAxNzUsIDM5LCAyMDgsIDI1LCAyNTQsIAorICAgIDEzMSwgMzksIDIwOCwgMjUsIDI1NCwgMTQ0LCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA5LCAyNDUsIDE4OCwgMzksIDIwOCwgCisgICAgMTM4LCAyMzEsIDIwOSwgMjI3LCAyMTAsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDksIDIxNiwgMTU3LCAzOSwgMjA4LCAxMzgsIAorICAgIDIzMSwgMjA5LCAyMTksIDQ0LCAzOSwgMjA4LCAxNiwgMjM0LCAxOSwgMzksIDIwOCwgMTYsIDIyNywgMjEwLCAzOSwgMjA4LCAKKyAgICAxNiwgMjIxLCAyNTUsIDM5LCAyMDgsIDE2LCAyNDEsIDc2LCAyNDEsIDcxLCAzOSwgMjA4LCAxNiwgMjM0LCAyOCwgMjM0LCAKKyAgICAyNywgMTg4LCAxODcsIDEsIDc2LCAxODgsIDE4NywgMSwgNzgsIDE4OCwgMTg3LCAxLCAyNTAsIDE2NSwgMTg4LCAxODcsIDEsIAorICAgIDIyNywgMTY5LCAxODgsIDE4NywgMSwgMjE1LCAxNTcsIDE4OCwgMTg3LCAxLCAyMTUsIDE0NSwgMTg4LCAxODcsIDEsIDI0OCwgCisgICAgMTQzLCAxODgsIDE4NywgMSwgMjQ4LCAxMjcsIDE4OCwgMTg3LCAxLCAyMjgsIDExNSwgMTg4LCAxODcsIDEsIDIyMCwgMTA0LCAKKyAgICAxODgsIDE4NywgMSwgMjE4LCAyMjUsIDE4OCwgMTg3LCAyNSwgNSwgMjM2LCA0MCwgMTg4LCAxODcsIDI1LCA1LCAyMTQsIAorICAgIDExOCwgMTg4LCAxODcsIDI1LCA1LCAyNTUsIDQ2LCAxODgsIDE4NywgMjUsIDUsIDI1MywgMjAwLCAxODgsIDE4NywgMjUsIAorICAgIDUsIDI1NSwgMzksIDE4OCwgMTg3LCAyNTAsIDEzMywgMTg4LCAxODcsIDI1NCwgMjE1LCAyMzQsIDEwNCwgMTg4LCAxODcsIAorICAgIDI1NCwgMTExLCAxODgsIDE4NywgMywgMjIzLCA3NywgNzksIDE4OCwgMTg3LCAyMTEsIDIwOSwgMjIzLCA3NywgNzksIDE4OCwgCisgICAgMTg3LCAyNSwgNSwgMjEzLCAxNDcsIDE4OCwgMTg3LCAyMTMsIDE1MiwgMjksIDMsIDIxNSwgMTM4LCAyOSwgMywgMjE1LCAKKyAgICAxNDEsIDI5LCAzLCAyMTUsIDE0NCwgMjksIDMsIDIxNSwgMTQyLCAyOSwgMywgMjE1LCAxNDMsIDI5LCAzLCAyMTUsIDE0MCwgCisgICAgMjksIDMsIDI0OCwgMTIxLCAyOSwgMywgMjQ4LCAxMjMsIDI5LCAzLCAyNDgsIDEyNiwgMjksIDMsIDI0OCwgMTI0LCAyOSwgCisgICAgMywgMjQ4LCAxMjUsIDI5LCAzLCAyNDgsIDEyMiwgMjksIDMsIDI0NiwgMzYsIDI5LCAzLCAyNDYsIDM5LCAyOSwgMywgMjQ2LCAKKyAgICA0NSwgMjksIDMsIDI0NiwgNDMsIDI5LCAzLCAyNDYsIDQ0LCAyOSwgMywgMjQ2LCAzNywgMjksIDMsIDI1MCwgMjEyLCAyOSwgCisgICAgMywgMjUwLCAyMDYsIDI5LCAzLCAyNTAsIDIwOCwgMjksIDMsIDI1MCwgMjExLCAyOSwgMywgMjUwLCAyMDksIDI5LCAzLCAKKyAgICAyNTAsIDIxMCwgMjksIDMsIDI1MCwgMjA3LCAyOSwgMywgMjUyLCAxMTksIDI5LCAzLCAyNTIsIDk4LCAyOSwgMywgMjUyLCAKKyAgICAxMTAsIDI5LCAzLCAyNTIsIDExOCwgMjksIDMsIDI1MiwgMTEzLCAyOSwgMywgMjUyLCAxMTQsIDI5LCAzLCAyNTIsIDEwMiwgCisgICAgMTg4LCAxODcsIDEsIDIzNCwgMjUsIDE4OCwgMTg3LCAxLCAyMjEsIDI1NSwgMTg4LCAxODcsIDEsIDIzMywgMTE1LCAxODgsIAorICAgIDE4NywgMSwgMjMwLCAxNzcsIDE4OCwgMTg3LCAxLCAxOTEsIDE4OCwgMTg3LCAxLCAxOTgsIDE4OCwgMTg3LCAxLCAyNTAsIAorICAgIDExMCwgMTg4LCAxODcsIDEsIDIxNiwgOTEsIDE4OCwgMTg3LCAxLCAyMzQsIDEwNywgMTg4LCAxODcsIDEsIDIyOCwgMjU1LCAKKyAgICAxODgsIDE4NywgMSwgMjE2LCAxNTEsIDE4OCwgMTg3LCAxLCAyMTIsIDYwLCAxODgsIDE4NywgMSwgMjExLCA2OSwgMTg4LCAKKyAgICAxODcsIDEsIDI0MCwgMjIzLCAxODgsIDE4NywgMSwgMjE0LCAxOTAsIDE4OCwgMTg3LCAxLCA3NCwgMTg4LCAxODcsIDEsIAorICAgIDIyNSwgMTQ1LCAxODgsIDE4NywgMSwgMjUzLCAyMTAsIDE4OCwgMTg3LCAxLCAyNDIsIDE3NCwgMTg4LCAxODcsIDEsIDIzNSwgCisgICAgMTE4LCAxODgsIDE4NywgMSwgMjIzLCAxNjksIDE4OCwgMTg3LCAxLCAyNTIsIDE5OSwgMTg4LCAxODcsIDEsIDIzNSwgMTA2LCAKKyAgICAxODgsIDE4NywgMSwgMjQ3LCAyMjcsIDE4OCwgMTg3LCAxLCAyNDIsIDIyOCwgMTg4LCAxODcsIDEsIDI0OCwgMTMsIDE4OCwgCisgICAgMTg3LCAxLCAyNTIsIDI0LCAxODgsIDE4NywgMSwgMjM0LCAyNiwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMzMsIDExNiwgCisgICAgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMzAsIDE3OCwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMjYsIDk0LCAyMzIsIAorICAgIDEzNCwgMTg4LCAxODcsIDEsIDIyOSwgMjM0LCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIxNiwgOTIsIDIzMiwgMTM0LCAKKyAgICAxODgsIDE4NywgMSwgMjI5LCAwLCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDI0MCwgMTYxLCAyMzIsIDEzNCwgMTg4LCAxODcsIAorICAgIDI1LCA1LCAyMjYsIDE5OSwgMTg4LCAxODcsIDI1LCA1LCAyMzYsIDQsIDE4OCwgMTg3LCAyNSwgNSwgMjU0LCAxMzAsIDE4OCwgCisgICAgMTg3LCAyNSwgNSwgMjExLCAzOCwgMTg4LCAxODcsIDI1LCA1LCAyMTksIDM0LCAxODgsIDE4NywgMjUsIDUsIDIxNCwgMTg3LCAKKyAgICAxODgsIDE4NywgMjUsIDUsIDI1MCwgMTMxLCAxODgsIDE4NywgMjUsIDUsIDIyNywgMTk1LCAxODgsIDE4NywgMjUwLCAxMzIsIAorICAgIDE4OCwgMTg3LCAyMzIsIDkwLCAyMzUsIDE1NiwgMTg4LCAxODcsIDI1NCwgNTQsIDIzNSwgMTU2LCAxODgsIDE4NywgMjEsIAorICAgIDIxMCwgODYsIDE4OCwgMTg3LCAyMSwgMTExLCAxODgsIDE4NywgMjEsIDEwNSwgMTg4LCAxODcsIDIxLCAxNTgsIDE4OCwgCisgICAgMTg3LCAyMSwgMTYxLCAxODgsIDE4NywgMjEsIDE5MCwgMTg4LCAxODcsIDIxLCAxOTUsIDE4OCwgMTg3LCAyMSwgMTk5LCAKKyAgICAxODgsIDE4NywgMjEsIDE5NiwgMTg4LCAxODcsIDIxLCAyMDEsIDI0LCAxNDMsIDIyNywgODEsIDI0LCAxNDMsIDIyNywgODYsIAorICAgIDI0LCAxNDMsIDIxMCwgMjQzLCAyNCwgMTQzLCAyMTAsIDI0MiwgMjQsIDE0MywgMjEwLCAyNDEsIDI0LCAxNDMsIDIxNSwgCisgICAgMjMsIDI0LCAxNDMsIDIxNSwgMjYsIDI0LCAxNDMsIDIxMCwgMjEwLCAyNCwgMTQzLCAyMTAsIDIwNiwgMjQsIDE0MywgMjQ1LCAKKyAgICA2MiwgMjQsIDE0MywgMjQ1LCA2MCwgMjQsIDE0MywgMjQ1LCA2MSwgMjQsIDE0MywgMjQ1LCA1OCwgMjQsIDE0MywgMjQwLCAKKyAgICAxNTEsIDI0LCAxNDMsIDI0MCwgMTUwLCAyNCwgMTQzLCAyNDAsIDE0OCwgMjQsIDE0MywgMjQwLCAxNDksIDI0LCAxNDMsIAorICAgIDI0MCwgMTU0LCAyNCwgMTQzLCAyNDAsIDE0NywgMjQsIDE0MywgMjQwLCAxNDYsIDI0LCAxNDMsIDI0MCwgMTU2LCAyNCwgCisgICAgMTQzLCAyNTQsIDQxLCAyNCwgMTQzLCAyNTQsIDQwLCAyNCwgOTAsIDIyOCwgMjI0LCAyNCwgOTAsIDIyOCwgMjMwLCAyNCwgCisgICAgOTAsIDIxOCwgMjA2LCAyNCwgOTAsIDIxOCwgMjA1LCAyNCwgOTAsIDIxNiwgOTcsIDI0LCA5MCwgMjE2LCA5NSwgMjQsIDkwLCAKKyAgICAyMTYsIDk0LCAyNCwgOTAsIDIxNiwgMTAwLCAyNCwgOTAsIDIxNiwgMTAxLCAyNCwgOTAsIDIxNiwgOTMsIDI0LCA5MCwgCisgICAgMjIzLCA4LCAyNCwgOTAsIDIyMywgMjMsIDI0LCA5MCwgMjE4LCAyMTIsIDI0LCA5MCwgMjIzLCAyMCwgMjQsIDkwLCAyMjMsIAorICAgIDEwLCAyNCwgOTAsIDIyMywgMTIsIDI0LCA5MCwgMjIyLCAyNTUsIDI0LCA5MCwgMjIzLCAwLCAyNCwgOTAsIDIzNCwgMjI0LCAKKyAgICAyNCwgOTAsIDIzMCwgMjE3LCAyNCwgOTAsIDIzMCwgMjExLCAyNCwgOTAsIDIxOCwgMjE2LCAyNCwgOTAsIDIzMCwgMjE0LCAKKyAgICAyNCwgOTAsIDIzMCwgMjIwLCAyNCwgOTAsIDIyNSwgNzksIDI0LCA5MCwgMjI1LCA4OCwgMjQsIDkwLCAyMjUsIDkyLCAyNCwgCisgICAgOTAsIDIxOCwgMjE0LCAyNCwgOTAsIDIyNSwgODIsIDI0LCA5MCwgMjI1LCA5NiwgMjQsIDkwLCAyMjUsIDk3LCAyNCwgOTAsIAorICAgIDIxOSwgMTQyLCAyNCwgOTAsIDIxOSwgMTQ1LCAyNCwgOTAsIDIxOCwgMjEwLCAyNCwgOTAsIDIxOCwgMjA4LCAyNCwgOTAsIAorICAgIDIxOSwgMTQwLCAyNCwgOTAsIDIxOSwgMTQ4LCAyNCwgOTAsIDIxOSwgMTQ5LCAyNCwgOTAsIDIxOSwgMTM0LCAyNCwgOTAsIAorICAgIDIxOSwgMTQ3LCAyNCwgOTAsIDIyNiwgMzQsIDI0LCA5MCwgMjI2LCAzNSwgMjQsIDkwLCAyMTEsIDI0LCAyNCwgOTAsIDIxMSwgCisgICAgMjUsIDI0LCA5MCwgMjUwLCA1MiwgMjQsIDkwLCAyNTAsIDUxLCAyNCwgOTAsIDIxOCwgMjIxLCAyNCwgOTAsIDIyNSwgMTMxLCAKKyAgICAyNCwgOTAsIDIyNSwgMTMwLCAxMCwgMTQsIDIzOCwgMzEsIDEwLCAxNCwgMjM4LCAzMCwgMTAsIDE0LCAyMzgsIDI5LCAxMCwgCisgICAgMTQsIDIzOCwgMjgsIDEwLCAxNCwgMjM4LCAyNywgMTAsIDE0LCAyMzgsIDI2LCAxMCwgMTQsIDIzOCwgMjUsIDEwLCAxNCwgCisgICAgMjM4LCAyNCwgMTAsIDE0LCAyMzgsIDIzLCAxMCwgMTQsIDIzOCwgMjIsIDEwLCAxNCwgMjM4LCAyMSwgMTAsIDE0LCAyMzgsIAorICAgIDIwLCAxMCwgMTQsIDIzOCwgMTksIDEwLCAxNCwgMjM4LCAxOCwgMTAsIDE0LCAyMzgsIDE3LCAxMCwgMTQsIDIzOCwgMTYsIAorICAgIDEwLCAxNCwgMjM4LCAxNSwgMTAsIDE0LCAyMzgsIDE0LCAxMCwgMTQsIDIzOCwgMTMsIDEwLCAxNCwgMjM4LCAxMiwgMTAsIAorICAgIDE0LCAyMzgsIDExLCAxMCwgMTQsIDIzOCwgMTAsIDEwLCAxNCwgMjM4LCA5LCAxMCwgMTQsIDIzOCwgOCwgMTAsIDE0LCAKKyAgICAyMzgsIDcsIDEwLCAxNCwgMjM4LCA2LCAxMCwgMTQsIDIzOCwgNSwgMTAsIDE0LCAyMzgsIDQsIDEwLCAxNCwgMjM4LCAzLCAKKyAgICAxMCwgMTQsIDIzOCwgMiwgMTAsIDE0LCAyMzgsIDEsIDEwLCAxNCwgMjM4LCAwLCAxMCwgMTQsIDIzNywgMjU1LCAxMCwgMTQsIAorICAgIDIzNywgMjU0LCAxMCwgMTQsIDIzNywgMjUzLCAxMCwgMTQsIDIzNywgMjUyLCAxMCwgMTQsIDIzNywgMjUxLCAxMCwgMTQsIAorICAgIDIzNywgMjUwLCAxMCwgMTQsIDIzNywgMjQ5LCAxMCwgMTQsIDIzNywgMjQ4LCAxMCwgMTQsIDIzNywgMjQ3LCAxMCwgMTQsIAorICAgIDIzNywgMjQ2LCAxMCwgMTQsIDIzNywgMjQ1LCAxMCwgMTQsIDIzNywgMjQ0LCAxMCwgMTQsIDIzNywgMjQzLCAxMCwgMTQsIAorICAgIDIzNywgMjQyLCAxMCwgMTQsIDIzNywgMjQxLCAxMCwgMTQsIDIzNywgMjQwLCAxMCwgMTQsIDIzNywgMjM5LCAxMCwgMTQsIAorICAgIDIzNywgMjM4LCAxMCwgMTQsIDIzNywgMjM3LCAxMCwgMTQsIDIzNywgMjM2LCAxMCwgMTQsIDIzNywgMjM1LCAxMCwgMTQsIAorICAgIDIzNywgMjM0LCAxMCwgMTQsIDIzNywgMjMzLCAxMCwgMTQsIDIzNywgMjMyLCAxMCwgMTQsIDIzNywgMjMxLCAxMCwgMTQsIAorICAgIDIzNywgMjMwLCAxMCwgMTQsIDIzNywgMjI5LCAxMCwgMTQsIDIzNywgMjI4LCAxMCwgMTQsIDIzNywgMjI3LCAxMCwgMTQsIAorICAgIDIzNywgMjI2LCAxMCwgMTQsIDIzNywgMjI1LCAxMCwgMTQsIDIzNywgMjI0LCAxMCwgMTQsIDIzNywgMjIzLCAxMCwgMTQsIAorICAgIDIzNywgMjIyLCAxMCwgMTQsIDIzNywgMjIxLCAxMCwgMTQsIDIzNywgMjIwLCAxMCwgMTQsIDIzNywgMjE5LCAxMCwgMTQsIAorICAgIDIzNywgMjE4LCAxMCwgMTQsIDIzNywgMjE3LCAxMCwgMTQsIDIzNywgMjE2LCAxMCwgMTQsIDIzNywgMjE1LCAxMCwgMTQsIAorICAgIDIzNywgMjE0LCAxMCwgMTQsIDIzNywgMjEzLCAxMCwgMTQsIDIzNywgMjEyLCAxMCwgMTQsIDIzNywgMjExLCAxMCwgMTQsIAorICAgIDIzNywgMjEwLCAxMCwgMTQsIDIzNywgMjA5LCAxMCwgMTQsIDIzNywgMjA4LCAxMCwgMTQsIDIzNywgMjA3LCAxMCwgMTQsIAorICAgIDIzNywgMjA2LCAxMCwgMTQsIDIzNywgMjA1LCAxMCwgMTQsIDIzNywgMjA0LCAxMCwgMTQsIDIzNywgMjAzLCAxMCwgMTQsIAorICAgIDIzNywgMjAyLCAxMCwgMTQsIDIzNywgMjAxLCAxMCwgMTQsIDIzNywgMjAwLCAxMCwgMTQsIDIzNywgMTk5LCAxMCwgMTQsIAorICAgIDIzNywgMTk4LCAxMCwgMTQsIDIzNywgMTk3LCAxMCwgMTQsIDIzNywgMTk2LCAxMCwgMTQsIDIzNywgMTk1LCAxMCwgMTQsIAorICAgIDIzNywgMTk0LCAxMCwgMTQsIDIzNywgMTkzLCAxMCwgMTQsIDIzNywgMTkyLCAxMCwgMTQsIDIzNywgMTkxLCAxMCwgMTQsIAorICAgIDIzNywgMTkwLCAxMCwgMTQsIDIzNywgMTg5LCAxMCwgMTQsIDIzNywgMTg4LCAxMCwgMTQsIDIzNywgMTg3LCAxMCwgMTQsIAorICAgIDIzNywgMTg2LCAxMCwgMTQsIDIzNywgMTg1LCAxMCwgMTQsIDIzNywgMTg0LCAxMCwgMTQsIDIzNywgMTgzLCAxMCwgMTQsIAorICAgIDIzNywgMTgyLCAxMCwgMTQsIDIzNywgMTgxLCAxMCwgMTQsIDIzNywgMTgwLCAxMCwgMTQsIDIzNywgMTc5LCAxMCwgMTQsIAorICAgIDIzNywgMTc4LCAxMCwgMTQsIDIzNywgMTc3LCAxMCwgMTQsIDIzNywgMTc2LCAxMCwgMTQsIDIzNywgMTc1LCAxMCwgMTQsIAorICAgIDIzNywgMTc0LCAxMCwgMTQsIDIzNywgMTczLCAxMCwgMTQsIDIzNywgMTcyLCAxMCwgMTQsIDIzNywgMTcxLCAxMCwgMTQsIAorICAgIDIzNywgMTcwLCAxMCwgMTQsIDIzNywgMTY5LCAxMCwgMTQsIDIzNywgMTY4LCAxMCwgMTQsIDIzNywgMTY3LCAxMCwgMTQsIAorICAgIDIzNywgMTY2LCAxMCwgMTQsIDIzNywgMTY1LCAxMCwgMTQsIDIzNywgMTY0LCAxMCwgMTQsIDIzNywgMTYzLCAxMCwgMTQsIAorICAgIDIzNywgMTYyLCAxMCwgMTQsIDIzNywgMTYxLCAxMCwgMTQsIDIzNywgMTYwLCAxMCwgMTQsIDIzNywgMTU5LCAxMCwgMTQsIAorICAgIDIzNywgMTU4LCAxMCwgMTQsIDIzNywgMTU3LCAxMCwgMTQsIDIzNywgMTU2LCAxMCwgMTQsIDIzNywgMTU1LCAxMCwgMTQsIAorICAgIDIzNywgMTU0LCAxMCwgMTQsIDIzNywgMTUzLCAxMCwgMTQsIDIzNywgMTUyLCAxMCwgMTQsIDIzNywgMTUxLCAxMCwgMTQsIAorICAgIDIzNywgMTUwLCAxMCwgMTQsIDIzNywgMTQ5LCAxMCwgMTQsIDIzNywgMTQ4LCAxMCwgMTQsIDIzNywgMTQ3LCAxMCwgMTQsIAorICAgIDIzNywgMTQ2LCAxMCwgMTQsIDIzNywgMTQ1LCAxMCwgMTQsIDIzNywgMTQ0LCAxMCwgMTQsIDIzNywgMTQzLCAxMCwgMTQsIAorICAgIDIzNywgMTQyLCAxMCwgMTQsIDIzNywgMTQxLCAxMCwgMTQsIDIzNywgMTQwLCAxMCwgMTQsIDIzNywgMTM5LCAxMCwgMTQsIAorICAgIDIzNywgMTM4LCAxMCwgMTQsIDIzNywgMTM3LCAxMCwgMTQsIDIzNywgMTM2LCAxMCwgMTQsIDIzNywgMTM1LCAxMCwgMTQsIAorICAgIDIzNywgMTM0LCAxMCwgMTQsIDIzNywgMTMzLCAxMCwgMTQsIDIzNywgMTMyLCAxMCwgMTQsIDIzNywgMTMxLCAxMCwgMTQsIAorICAgIDIzNywgMTMwLCAxMCwgMTQsIDIzNywgMTI5LCAxMCwgMTQsIDIzNywgMTI4LCAxMCwgMTQsIDIzNywgMTI3LCAxMCwgMTQsIAorICAgIDIzNywgMTI2LCAxMCwgMTQsIDIzNywgMTI1LCAxMCwgMTQsIDIzNywgMTI0LCAxMCwgMTQsIDIzNywgMTIzLCAxMCwgMTQsIAorICAgIDIzNywgMTIyLCAxMCwgMTQsIDIzNywgMTIxLCAxMCwgMTQsIDIzNywgMTIwLCAxMCwgMTQsIDIzNywgMTE5LCAxMCwgMTQsIAorICAgIDIzNywgMTE4LCAxMCwgMTQsIDIzNywgMTE3LCAxMCwgMTQsIDIzNywgMTE2LCAxMCwgMTQsIDIzNywgMTE1LCAxMCwgMTQsIAorICAgIDIzNywgMTE0LCAxMCwgMTQsIDIzNywgMTEzLCAxMCwgMTQsIDIzNywgMTEyLCAxMCwgMTQsIDIzNywgMTExLCAxMCwgMTQsIAorICAgIDIzNywgMTEwLCAxMCwgMTQsIDIzNywgMTA5LCAxMCwgMTQsIDIzNywgMTA4LCAxMCwgMTQsIDIzNywgMTA3LCAxMCwgMTQsIAorICAgIDIzNywgMTA2LCAxMCwgMTQsIDIzNywgMTA1LCAxMCwgMTQsIDIzNywgMTA0LCAxMCwgMTQsIDIzNywgMTAzLCAxMCwgMTQsIAorICAgIDIzNywgMTAyLCAxMCwgMTQsIDIzNywgMTAxLCAxMCwgMTQsIDIzNywgMTAwLCAxMCwgMTQsIDIzNywgOTksIDEwLCAxNCwgCisgICAgMjM3LCA5OCwgMTAsIDE0LCAyMzcsIDk3LCAxMCwgMTQsIDIzNywgOTYsIDEwLCAxNCwgMjM3LCA5NSwgMTAsIDE0LCAyMzcsIAorICAgIDk0LCAxMCwgMTQsIDIzNywgOTMsIDEwLCAxNCwgMjM3LCA5MiwgMTAsIDE0LCAyMzcsIDkxLCAxMCwgMTQsIDIzNywgOTAsIAorICAgIDEwLCAxNCwgMjM3LCA4OSwgMTAsIDE0LCAyMzcsIDg4LCAxMCwgMTQsIDIzNywgODcsIDEwLCAxNCwgMjM3LCA4NiwgMTAsIAorICAgIDE0LCAyMzcsIDg1LCAxMCwgMTQsIDIzNywgODQsIDEwLCAxNCwgMjM3LCA4MywgMTAsIDE0LCAyMzcsIDgyLCAxMCwgMTQsIAorICAgIDIzNywgODEsIDEwLCAxNCwgMjM3LCA4MCwgMTAsIDE0LCAyMzcsIDc5LCAxMCwgMTQsIDIzNywgNzgsIDEwLCAxNCwgMjM3LCAKKyAgICA3NywgMTAsIDE0LCAyMzcsIDc2LCAxMCwgMTQsIDIzNywgNzUsIDEwLCAxNCwgMjM3LCA3NCwgMTAsIDE0LCAyMzcsIDczLCAKKyAgICAxMCwgMTQsIDIzNywgNzIsIDEwLCAxNCwgMjM3LCA3MSwgMTAsIDE0LCAyMzcsIDcwLCAxMCwgMTQsIDIzNywgNjksIDEwLCAKKyAgICAxNCwgMjM3LCA2OCwgMTAsIDE0LCAyMzcsIDY3LCAxMCwgMTQsIDIzNywgNjYsIDEwLCAxNCwgMjM3LCA2NSwgMTAsIDE0LCAKKyAgICAyMzcsIDY0LCAxMCwgMTQsIDIzNywgNjMsIDEwLCAxNCwgMjM3LCA2MiwgMTAsIDE0LCAyMzcsIDYxLCAxMCwgMTQsIDIzNywgCisgICAgNjAsIDEwLCAxNCwgMjM3LCA1OSwgMTAsIDE0LCAyMzcsIDU4LCAxMCwgMTQsIDIzNywgNTcsIDEwLCAxNCwgMjM3LCA1NiwgCisgICAgMTAsIDE0LCAyMzcsIDU1LCAxMCwgMTQsIDIzNywgNTQsIDEwLCAxNCwgMjM3LCA1MywgMTAsIDE0LCAyMzcsIDUyLCAxMCwgCisgICAgMTQsIDIzNywgNTEsIDEwLCAxNCwgMjM3LCA1MCwgMTAsIDE0LCAyMzcsIDQ5LCAxMCwgMTQsIDIzNywgNDgsIDEwLCAxNCwgCisgICAgMjM3LCA0NywgMTAsIDE0LCAyMzcsIDQ2LCAxMCwgMTQsIDIzNywgNDUsIDEwLCAxNCwgMjM3LCA0NCwgMTAsIDE0LCAyMzcsIAorICAgIDQzLCAxMCwgMTQsIDIzNywgNDIsIDEwLCAxNCwgMjM3LCA0MSwgMTAsIDE0LCAyMzcsIDQwLCAxMCwgMTQsIDIzNywgMzksIAorICAgIDEwLCAxNCwgMjM3LCAzOCwgMTAsIDE0LCAyMzcsIDM3LCAxMCwgMTQsIDIzNywgMzYsIDEwLCAxNCwgMjM3LCAzNSwgMTAsIAorICAgIDE0LCAyMzcsIDM0LCAxMCwgMTQsIDIzNywgMzMsIDEwLCAxNCwgMjM3LCAzMiwgMTAsIDE0LCAyMzcsIDMxLCAxMCwgMTQsIAorICAgIDIzNywgMzAsIDEwLCAxNCwgMjM3LCAyOSwgMTAsIDE0LCAyMzcsIDI4LCAxMCwgMTQsIDIzNywgMjcsIDEwLCAxNCwgMjM3LCAKKyAgICAyNiwgMTAsIDE0LCAyMzcsIDI1LCAxMCwgMTQsIDIzNywgMjQsIDEwLCAxNCwgMjM3LCAyMywgMTAsIDE0LCAyMzcsIDIyLCAKKyAgICAxMCwgMTQsIDIzNywgMjEsIDEwLCAxNCwgMjM3LCAyMCwgMTAsIDE0LCAyMzcsIDE5LCAxMCwgMTQsIDIzNywgMTgsIDEwLCAKKyAgICAxNCwgMjM3LCAxNywgMTAsIDE0LCAyMzcsIDE2LCAxMCwgMTQsIDIzNywgMTUsIDEwLCAxNCwgMjM3LCAxNCwgMTAsIDE0LCAKKyAgICAyMzcsIDEzLCAxMCwgMTQsIDIzNywgMTIsIDEwLCAxNCwgMjM3LCAxMSwgMTAsIDE0LCAyMzcsIDEwLCAxMCwgMTQsIDIzNywgCisgICAgOSwgMTAsIDE0LCAyMzcsIDgsIDEwLCAxNCwgMjM3LCA3LCAxMCwgMTQsIDIzNywgNiwgMTAsIDE0LCAyMzcsIDUsIDEwLCAKKyAgICAxNCwgMjM3LCA0LCAxMCwgMTQsIDIzNywgMywgMTAsIDE0LCAyMzcsIDIsIDEwLCAxNCwgMjM3LCAxLCAxMCwgMTQsIDIzNywgCisgICAgMCwgMTAsIDE0LCAyMzYsIDI1NSwgMTAsIDE0LCAyMzYsIDI1NCwgMTAsIDE0LCAyMzYsIDI1MywgMTAsIDE0LCAyMzYsIAorICAgIDI1MiwgMTAsIDE0LCAyMzYsIDI1MSwgMTAsIDE0LCAyMzYsIDI1MCwgMTAsIDE0LCAyMzYsIDI0OSwgMTAsIDE0LCAyMzYsIAorICAgIDI0OCwgMTAsIDE0LCAyMzYsIDI0NywgMTAsIDE0LCAyMzYsIDI0NiwgMTAsIDE0LCAyMzYsIDI0NSwgMTAsIDE0LCAyMzYsIAorICAgIDI0NCwgMTAsIDE0LCAyMzYsIDI0MywgMTAsIDE0LCAyMzYsIDI0MiwgMTAsIDE0LCAyMzYsIDI0MSwgMTAsIDE0LCAyMzYsIAorICAgIDI0MCwgMTAsIDE0LCAyMzYsIDIzOSwgMTAsIDE0LCAyMzYsIDIzOCwgMTAsIDE0LCAyMzYsIDIzNywgMTAsIDE0LCAyMzYsIAorICAgIDIzNiwgMTAsIDE0LCAyMzYsIDIzNSwgMTAsIDE0LCAyMzYsIDIzNCwgMTAsIDE0LCAyMzYsIDIzMywgMTAsIDE0LCAyMzYsIAorICAgIDIzMiwgMTAsIDE0LCAyMzYsIDIzMSwgMTAsIDE0LCAyMzYsIDIzMCwgMTAsIDE0LCAyMzYsIDIyOSwgMTAsIDE0LCAyMzYsIAorICAgIDIyOCwgMTAsIDE0LCAyMzYsIDIyNywgMTAsIDE0LCAyMzYsIDIyNiwgMTAsIDE0LCAyMzYsIDIyNSwgMTAsIDE0LCAyMzYsIAorICAgIDIyNCwgMTAsIDE0LCAyMzYsIDIyMywgMTAsIDE0LCAyMzYsIDIyMiwgMTAsIDE0LCAyMzYsIDIyMSwgMTAsIDE0LCAyMzYsIAorICAgIDIyMCwgMTAsIDE0LCAyMzYsIDIxOSwgMTAsIDE0LCAyMzYsIDIxOCwgMTAsIDE0LCAyMzYsIDIxNywgMTAsIDE0LCAyMzYsIAorICAgIDIxNiwgMTAsIDE0LCAyMzYsIDIxNSwgMTAsIDE0LCAyMzYsIDIxNCwgMTAsIDE0LCAyMzYsIDIxMywgMTAsIDE0LCAyMzYsIAorICAgIDIxMiwgMTAsIDE0LCAyMzYsIDIxMSwgMTAsIDE0LCAyMzYsIDIxMCwgMTAsIDE0LCAyMzYsIDIwOSwgMTAsIDE0LCAyMzYsIAorICAgIDIwOCwgMTAsIDE0LCAyMzYsIDIwNywgMTAsIDE0LCAyMzYsIDIwNiwgMTAsIDE0LCAyMzYsIDIwNSwgMTAsIDE0LCAyMzYsIAorICAgIDIwNCwgMTAsIDE0LCAyMzYsIDIwMywgMTAsIDE0LCAyMzYsIDIwMiwgMTAsIDE0LCAyMzYsIDIwMSwgMTAsIDE0LCAyMzYsIAorICAgIDIwMCwgMTAsIDE0LCAyMzYsIDE5OSwgMTAsIDE0LCAyMzYsIDE5OCwgMTAsIDE0LCAyMzYsIDE5NywgMTAsIDE0LCAyMzYsIAorICAgIDE5NiwgMTAsIDE0LCAyMzYsIDE5NSwgMTAsIDE0LCAyMzYsIDE5NCwgMTAsIDE0LCAyMzYsIDE5MywgMTAsIDE0LCAyMzYsIAorICAgIDE5MiwgMTAsIDE0LCAyMzYsIDE5MSwgMTAsIDE0LCAyMzYsIDE5MCwgMTAsIDE0LCAyMzYsIDE4OSwgMTAsIDE0LCAyMzYsIAorICAgIDE4OCwgMTAsIDE0LCAyMzYsIDE4NywgMTAsIDE0LCAyMzYsIDE4NiwgMTAsIDE0LCAyMzYsIDE4NSwgMTAsIDE0LCAyMzYsIAorICAgIDE4NCwgMTAsIDE0LCAyMzYsIDE4MywgMTAsIDE0LCAyMzYsIDE4MiwgMTAsIDE0LCAyMzYsIDE4MSwgMTAsIDE0LCAyMzYsIAorICAgIDE4MCwgMTAsIDE0LCAyMzYsIDE3OSwgMTAsIDE0LCAyMzYsIDE3OCwgMTAsIDE0LCAyMzYsIDE3NywgMTAsIDE0LCAyMzYsIAorICAgIDE3NiwgMTAsIDE0LCAyMzYsIDE3NSwgMTAsIDE0LCAyMzYsIDE3NCwgMTAsIDE0LCAyMzYsIDE3MywgMTAsIDE0LCAyMzYsIAorICAgIDE3MiwgMTAsIDE0LCAyMzYsIDE3MSwgMTAsIDE0LCAyMzYsIDE3MCwgMTAsIDE0LCAyMzYsIDE2OSwgMTAsIDE0LCAyMzYsIAorICAgIDE2OCwgMTAsIDE0LCAyMzYsIDE2NywgMTAsIDE0LCAyMzYsIDE2NiwgMTAsIDE0LCAyMzYsIDE2NSwgMTAsIDE0LCAyMzYsIAorICAgIDE2NCwgMTAsIDE0LCAyMzYsIDE2MywgMTAsIDE0LCAyMzYsIDE2MiwgMTAsIDE0LCAyMzYsIDE2MSwgMTAsIDE0LCAyMzYsIAorICAgIDE2MCwgMTAsIDE0LCAyMzYsIDE1OSwgMTAsIDE0LCAyMzYsIDE1OCwgMTAsIDE0LCAyMzYsIDE1NywgMTAsIDE0LCAyMzYsIAorICAgIDE1NiwgMTAsIDE0LCAyMzYsIDE1NSwgMTAsIDE0LCAyMzYsIDE1NCwgMTAsIDE0LCAyMzYsIDE1MywgMTAsIDE0LCAyMzYsIAorICAgIDE1MiwgMTAsIDE0LCAyMzYsIDE1MSwgMTAsIDE0LCAyMzYsIDE1MCwgMTAsIDE0LCAyMzYsIDE0OSwgMTAsIDE0LCAyMzYsIAorICAgIDE0OCwgMTAsIDE0LCAyMzYsIDE0NywgMTAsIDE0LCAyMzYsIDE0NiwgMTAsIDE0LCAyMzYsIDE0NSwgMTAsIDE0LCAyMzYsIAorICAgIDE0NCwgMTAsIDE0LCAyMzYsIDE0MywgMTAsIDE0LCAyMzYsIDE0MiwgMTAsIDE0LCAyMzYsIDE0MSwgMTAsIDE0LCAyMzYsIAorICAgIDE0MCwgMTAsIDE0LCAyMzYsIDEzOSwgMTAsIDE0LCAyMzYsIDEzOCwgMTAsIDE0LCAyMzYsIDEzNywgMTAsIDE0LCAyMzYsIAorICAgIDEzNiwgMTAsIDE0LCAyMzYsIDEzNSwgMTAsIDE0LCAyMzYsIDEzNCwgMTAsIDE0LCAyMzYsIDEzMywgMTAsIDE0LCAyMzYsIAorICAgIDEzMiwgMTAsIDE0LCAyMzYsIDEzMSwgMTAsIDE0LCAyMzYsIDEzMCwgMTAsIDE0LCAyMzYsIDEyOSwgMTAsIDE0LCAyMzYsIAorICAgIDEyOCwgMTAsIDE0LCAyMzYsIDEyNywgMTAsIDE0LCAyMzYsIDEyNiwgMTAsIDE0LCAyMzYsIDEyNSwgMTAsIDE0LCAyMzYsIAorICAgIDEyNCwgMTAsIDE0LCAyMzYsIDEyMywgMTAsIDE0LCAyMzYsIDEyMiwgMTAsIDE0LCAyMzYsIDEyMSwgMTAsIDE0LCAyMzYsIAorICAgIDEyMCwgMTAsIDE0LCAyMzYsIDExOSwgMTAsIDE0LCAyMzYsIDExOCwgMTAsIDE0LCAyMzYsIDExNywgMTAsIDE0LCAyMzYsIAorICAgIDExNiwgMTAsIDE0LCAyMzYsIDExNSwgMTAsIDE0LCAyMzYsIDExNCwgMTAsIDE0LCAyMzYsIDExMywgMTAsIDE0LCAyMzYsIAorICAgIDExMiwgMTAsIDE0LCAyMzYsIDExMSwgMTAsIDE0LCAyMzYsIDExMCwgMTAsIDE0LCAyMzYsIDEwOSwgMTAsIDE0LCAyMzYsIAorICAgIDEwOCwgMTAsIDE0LCAyMzYsIDEwNywgMTAsIDE0LCAyMzYsIDEwNiwgMTAsIDE0LCAyMzYsIDEwNSwgMTAsIDE0LCAyMzYsIAorICAgIDEwNCwgMTAsIDE0LCAyMzYsIDEwMywgMTAsIDE0LCAyMzYsIDEwMiwgMTAsIDE0LCAyMzYsIDEwMSwgMTAsIDE0LCAyMzYsIAorICAgIDEwMCwgMTAsIDE0LCAyMzYsIDk5LCAxMCwgMTQsIDIzNiwgOTgsIDEwLCAxNCwgMjM2LCA5NywgMTAsIDE0LCAyMzYsIDk2LCAKKyAgICAxMCwgMTQsIDIzNiwgOTUsIDEwLCAxNCwgMjM2LCA5NCwgMTAsIDE0LCAyMzYsIDkzLCAxMCwgMTQsIDIzNiwgOTIsIDEwLCAKKyAgICAxNCwgMjM2LCA5MSwgMTAsIDE0LCAyMzYsIDkwLCAxMCwgMTQsIDIzNiwgODksIDEwLCAxNCwgMjM2LCA4OCwgMTAsIDE0LCAKKyAgICAyMzYsIDg3LCAxMCwgMTQsIDIzNiwgODYsIDEwLCAxNCwgMjM2LCA4NSwgMTAsIDE0LCAyMzYsIDg0LCAxMCwgMTQsIDIzNiwgCisgICAgODMsIDEwLCAxNCwgMjM2LCA4MiwgMTAsIDE0LCAyMzYsIDgxLCAxMCwgMTQsIDIzNiwgODAsIDEwLCAxNCwgMjM2LCA3OSwgCisgICAgMTAsIDE0LCAyMzYsIDc4LCAxMCwgMTQsIDIzNiwgNzcsIDEwLCAxNCwgMjM2LCA3NiwgMTAsIDE0LCAyMzYsIDc1LCAxMCwgCisgICAgMTQsIDIzNiwgNzQsIDEwLCAxNCwgMjM2LCA3MywgMTAsIDE0LCAyMzYsIDcyLCA3LCA0LCAyNywgMjQ0LCAxMzMsIDcsIDQsIAorICAgIDI3LCAyNDQsIDEyOSwgNywgNCwgMjcsIDI0NCwgODQsIDcsIDQsIDI3LCAyNDQsIDEzMiwgNywgNCwgMjcsIDI0NCwgMTMxLCAKKyAgICA3LCA0LCAyNywgMjAwLCAyMjIsIDk0LCAyMTcsIDE1MywgNywgNCwgMjcsIDIxOCwgMTcwLCAxNTAsIDQsIDI3LCAyMzEsIAorICAgIDY0LCAyMjgsIDQ0LCAxNTAsIDQsIDI3LCAyMzEsIDY0LCAyNDUsIDIyMSwgMTUwLCA0LCAyNywgMjMxLCA2NCwgMjM1LCAKKyAgICAyMzQsIDE1MCwgNCwgMjcsIDIxMywgMTgwLCAyMjgsIDQ0LCAxNTAsIDQsIDI3LCAyMzEsIDY0LCAyMTEsIDE2MCwgOTQsIDEsIAorICAgIDIxMCwgMjM0LCAyLCAyNDEsIDE2NSwgOTQsIDIyNSwgMTQsIDIzNSwgNTYsIDIxNCwgMTEsIDk0LCAyNywgMjExLCA2LCAKKyAgICAyMTAsIDIzNCwgMjEwLCAyMzQsIDIyNSwgMjQzLCA5NCwgMSwgMjU0LCAxNDcsIDI1MywgMTcwLCA5NCwgMSwgMjExLCAyNDcsIAorICAgIDI1NCwgMTc5LCA5NCwgMSwgMjExLCAyNDcsIDI0OCwgMTk3LCA5NCwgMSwgMjExLCAyNDcsIDI0MSwgMjQ1LCA5NCwgMSwgCisgICAgMjExLCAyNDcsIDIzNSwgMCwgOTQsIDEsIDIxMSwgMjQ3LCAyMzMsIDEwMCwgOTQsIDEsIDIxMSwgMjQ3LCA0MCwgMjMxLCAKKyAgICA3MCwgOTQsIDEsIDIxMSwgMjQ3LCAyMjMsIDcwLCA5NCwgMSwgMjExLCAyNDcsIDIxNywgMzksIDk0LCAxLCAyNTQsIDE0NywgCisgICAgOTYsIDUwLCA5NCwgMSwgMjIwLCAyMywgMiwgMjIwLCAyMywgMjQ3LCAxMjgsIDk0LCAxLCAyMjAsIDIzLCAyLCAyMTksIAorICAgIDE2MSwgMjQ3LCAxMjgsIDk0LCAxLCAyMjAsIDIzLCAyLCAyNDgsIDIxNiwgMjIsIDIyMCwgMjMsIDI0NywgMTI4LCA5NCwgMSwgCisgICAgMjIwLCAyMywgMiwgMjQ4LCAyMTYsIDIyLCAyMTksIDE2MSwgMjQ3LCAxMjgsIDk0LCAxLCAxMDksIDIsIDIyNSwgMjQzLCAKKyAgICA5NCwgMSwgMTA5LCAyLCAyMjQsIDc5LCA5NCwgMSwgMTA5LCAyLCAyMzEsIDE3NiwgOTQsIDEsIDI1MiwgMzcsIDIsIDI0OCwgCisgICAgMjE1LCA5NCwgMSwgMjQyLCAyMDksIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjQ4LCAxOTgsIDIsIDI0OCwgMjE1LCA5NCwgMSwgCisgICAgMjQxLCAyNDYsIDIsIDIzMSwgMTc2LCA5NCwgMSwgMjE0LCA0LCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIxMCwgOTgsIDIsIAorICAgIDI0OCwgMjE1LCA5NCwgMSwgMjE2LCAyMzIsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjEwLCAyMzQsIDIsIDI0OCwgMjE1LCA5NCwgCisgICAgMSwgNDAsIDIzNSwgMSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMzUsIDEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjMzLCAxMDEsIAorICAgIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjMxLCA3MSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMjcsIDE5OSwgMiwgMjQ4LCAyMTUsIAorICAgIDk0LCAxLCAyMjEsIDI1MiwgMiwgMjQ4LCAyMTUsIDk0LCAxLCA0MCwgMjI1LCAyMjUsIDIsIDI0OCwgMjE1LCA5NCwgMSwgCisgICAgMjI1LCAyMjUsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjE1LCAxODEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjI0LCA0MywgMiwgCisgICAgMjQ4LCAyMTUsIDk0LCAxLCAyMjMsIDcxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIyMCwgMjMsIDIsIDI0OCwgMjE1LCA5NCwgCisgICAgMSwgMjE3LCA0MCwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTQsIDQsIDIsIDI0MSwgNjgsIDk0LCAxLCAyNTIsIDM3LCAyLCAKKyAgICAyMjMsIDE3MiwgOTQsIDEsIDIzNSwgMSwgMiwgMjIzLCAxNzIsIDk0LCAxLCAyMjUsIDIyNSwgMiwgMjIzLCAxNzIsIDk0LCAKKyAgICAyNywgMTA5LCAyMzMsIDEwMCwgOSwgMSwgMTA5LCAyMTIsIDQ3LCA1MywgMTcsIDksIDEsIDEwOSwgMjEyLCA0NywgNDAsIAorICAgIDE3LCA5LCAxLCAyNTIsIDczLCA1MywgMTcsIDksIDEsIDI1MiwgNzMsIDQwLCAxNywgOSwgMSwgMjUyLCA3MywgNjUsIDE3LCAKKyAgICA5LCAxLCAyNTIsIDczLCAxNDcsIDE3LCA5LCAxLCAyMjUsIDIwOSwgNTMsIDE3LCA5LCAxLCAyMjUsIDIwOSwgNDAsIDE3LCAKKyAgICA5LCAxLCAyMjUsIDIwOSwgNjUsIDE3LCA5LCAxLCAyMjUsIDIwOSwgMTQ3LCAxNywgOSwgMSwgMjUyLCA2MSwgNTMsIDE3LCAKKyAgICA5LCAxLCAyNTIsIDYxLCA0MCwgMTcsIDksIDEsIDI1MiwgNjEsIDY1LCAxNywgOSwgMSwgMjUyLCA2MSwgMTQ3LCAxNywgOSwgCisgICAgMSwgMjE1LCAxNDgsIDUzLCAxNywgOSwgMSwgMjE1LCAxNDgsIDQwLCAxNywgOSwgMSwgMjE1LCAxNDgsIDY1LCAxNywgOSwgCisgICAgMSwgMjE1LCAxNDgsIDE0NywgMTcsIDksIDEsIDIxNywgNywgNTMsIDE3LCA5LCAxLCAyMTcsIDcsIDQwLCAxNywgOSwgMSwgCisgICAgMjE3LCA3LCA2NSwgMTcsIDksIDEsIDIxNywgNywgMTQ3LCAxNywgOSwgMSwgMjE1LCAxNTAsIDUzLCAxNywgOSwgMSwgMjE1LCAKKyAgICAxNTAsIDQwLCAxNywgOSwgMSwgMjE1LCAxNTAsIDY1LCAxNywgOSwgMSwgMjE1LCAxNTAsIDE0NywgMTcsIDksIDEsIDIxMywgCisgICAgMjQ5LCA1MywgMTcsIDksIDEsIDIxMywgMjQ5LCA0MCwgMTcsIDksIDEsIDIxMywgMjQ5LCA2NSwgMTcsIDksIDEsIDIxMywgCisgICAgMjQ5LCAxNDcsIDE3LCA5LCAxLCAyMjUsIDIwNywgNTMsIDE3LCA5LCAxLCAyMjUsIDIwNywgNDAsIDE3LCA5LCAxLCAyMjUsIAorICAgIDIwNywgNjUsIDE3LCA5LCAxLCAyMjUsIDIwNywgMTQ3LCAxNywgOSwgMSwgMjQ2LCA1MiwgNTMsIDE3LCA5LCAxLCAyNDYsIAorICAgIDUyLCA0MCwgMTcsIDksIDEsIDI0NiwgNTIsIDY1LCAxNywgOSwgMSwgMjQ2LCA1MiwgMTQ3LCAxNywgOSwgMSwgMjI3LCAKKyAgICAxNTgsIDUzLCAxNywgOSwgMSwgMjI3LCAxNTgsIDQwLCAxNywgOSwgMSwgMjI3LCAxNTgsIDY1LCAxNywgOSwgMSwgMjI3LCAKKyAgICAxNTgsIDE0NywgMTcsIDksIDEsIDIxNywgMjgsIDUzLCAxNywgOSwgMSwgMjE3LCAyOCwgNDAsIDE3LCA5LCAxLCAyMTcsIAorICAgIDI4LCA2NSwgMTcsIDksIDEsIDIxNywgMjgsIDE0NywgMTcsIDksIDEsIDIxNywgMjYsIDUzLCAxNywgOSwgMSwgMjE3LCAyNiwgCisgICAgNDAsIDE3LCA5LCAxLCAyMTcsIDI2LCA2NSwgMTcsIDksIDEsIDIxNywgMjYsIDE0NywgMTcsIDksIDEsIDI0OCwgMTQxLCAKKyAgICA1MywgMTcsIDksIDEsIDI0OCwgMTQxLCA0MCwgMTcsIDksIDEsIDI0OCwgMjEwLCA1MywgMTcsIDksIDEsIDI0OCwgMjEwLCAKKyAgICA0MCwgMTcsIDksIDEsIDI0NiwgNzksIDUzLCAxNywgOSwgMSwgMjQ2LCA3OSwgNDAsIDE3LCA5LCAxLCAyNDgsIDEzOSwgNTMsIAorICAgIDE3LCA5LCAxLCAyNDgsIDEzOSwgNDAsIDE3LCA5LCAxLCAyMzUsIDEyNywgNTMsIDE3LCA5LCAxLCAyMzUsIDEyNywgNDAsIAorICAgIDE3LCA5LCAxLCAyMjIsIDE3NCwgNTMsIDE3LCA5LCAxLCAyMjIsIDE3NCwgNDAsIDE3LCA5LCAxLCAyMzQsIDE4MSwgNTMsIAorICAgIDE3LCA5LCAxLCAyMzQsIDE4MSwgNDAsIDE3LCA5LCAxLCAyMzQsIDE4MSwgNjUsIDE3LCA5LCAxLCAyMzQsIDE4MSwgMTQ3LCAKKyAgICAxNywgOSwgMSwgMjQzLCAxMzAsIDUzLCAxNywgOSwgMSwgMjQzLCAxMzAsIDQwLCAxNywgOSwgMSwgMjQzLCAxMzAsIDY1LCAKKyAgICAxNywgOSwgMSwgMjQzLCAxMzAsIDE0NywgMTcsIDksIDEsIDI0MiwgMTA5LCA1MywgMTcsIDksIDEsIDI0MiwgMTA5LCA0MCwgCisgICAgMTcsIDksIDEsIDI0MiwgMTA5LCA2NSwgMTcsIDksIDEsIDI0MiwgMTA5LCAxNDcsIDE3LCA5LCAxLCAyMjksIDgsIDUzLCAKKyAgICAxNywgOSwgMSwgMjI5LCA4LCA0MCwgMTcsIDksIDEsIDIyOSwgOCwgNjUsIDE3LCA5LCAxLCAyMjksIDgsIDE0NywgMTcsIDksIAorICAgIDEsIDIyOCwgNjgsIDI0MiwgMjI2LCA1MywgMTcsIDksIDEsIDIyOCwgNjgsIDI0MiwgMjI2LCA0MCwgMTcsIDksIDEsIDIyMiwgCisgICAgMjE3LCA1MywgMTcsIDksIDEsIDIyMiwgMjE3LCA0MCwgMTcsIDksIDEsIDIyMiwgMjE3LCA2NSwgMTcsIDksIDEsIDIyMiwgCisgICAgMjE3LCAxNDcsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMiwgNzcsIDcyLCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCAyLCA3NywgCisgICAgNzIsIDQwLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgCisgICAgNDAsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDY1LCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCAxNDcsIAorICAgIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0NywgMTUwLCA0MCwgMTcsIAorICAgIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgNjUsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDE0NywgMTcsIDksIAorICAgIDEsIDc3LCAyNTIsIDE0MSwgNTMsIDE3LCA5LCAxLCA3NywgMjUyLCAxNDEsIDQwLCAxNywgOSwgMSwgNzcsIDI1MiwgMTQxLCAKKyAgICAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAxNiwgNTksIAorICAgIDQ4LCA5LCAxNiwgNTksIDUxLCA5LCAxNiwgMTEzLCAxNzAsIDQ4LCA5LCAxNiwgMTEzLCAxNzAsIDUxLCA5LCAxNiwgMTM0LCAKKyAgICAxNzAsIDQ4LCA5LCAxNiwgMTM0LCAxNzAsIDUxLCA5LCAxNiwgMTM0LCAxNzAsIDIyNSwgMTAsIDI0NiwgMTEyLCA0OCwgOSwgCisgICAgMTYsIDEzNCwgMTcwLCAyMjUsIDEwLCAyNDYsIDExMiwgNTEsIDksIDE2LCAyNDQsIDE5LCAxNzAsIDQ4LCA5LCAxNiwgMjQ0LCAKKyAgICAxOSwgMTcwLCA1MSwgOSwgMTYsIDUyLCA2NywgMjUyLCAxNDksIDUxLCA5LCAxNiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgCisgICAgOSwgMTYsIDExMywgMTcwLCAyMTMsIDE4OSwgNTEsIDksIDE2LCAyMjIsIDIzNiwgOSwgMTYsIDQsIDIxNywgODIsIDQ4LCA5LCAKKyAgICAxNiwgNCwgMjE3LCA4MiwgNTEsIDksIDEsIDIyOSwgODUsIDUzLCAxNywgOSwgMSwgMjI5LCA4NSwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMjksIDg1LCA2NSwgMTcsIDksIDEsIDIyOSwgODUsIDE0NywgMTcsIDksIDEsIDEwNCwgNTMsIDE3LCA5LCAxLCAxMDQsIAorICAgIDQwLCAxNywgOSwgMSwgMjI2LCAyMzksIDUzLCAxNywgOSwgMSwgMjI2LCAyMzksIDQwLCAxNywgOSwgMSwgMjEwLCAyMTMsIAorICAgIDUzLCAxNywgOSwgMSwgMjEwLCAyMTMsIDQwLCAxNywgOSwgMSwgMTA0LCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDIxNCwgCisgICAgMCwgNTMsIDE3LCA5LCAxLCAyMTQsIDAsIDQwLCAxNywgOSwgMSwgMjM0LCA3OSwgMjI2LCAyMzksIDUzLCAxNywgOSwgMSwgCisgICAgMjM0LCA3OSwgMjI2LCAyMzksIDQwLCAxNywgOSwgMSwgMjM0LCA3OSwgMjEwLCAyMTMsIDUzLCAxNywgOSwgMSwgMjM0LCAKKyAgICA3OSwgMjEwLCAyMTMsIDQwLCAxNywgOSwgMSwgMTYwLCA1MywgMTcsIDksIDEsIDE2MCwgNDAsIDE3LCA5LCAxLCAxNjAsIAorICAgIDY1LCAxNywgOSwgMSwgMTYwLCAxNDcsIDE3LCA5LCAxLCAyMTQsIDIwNywgMjM0LCAxOTIsIDIzNCwgNzksIDEwOSwgMjMxLCAKKyAgICAxOTgsIDY1LCAxNywgOSwgMSwgMjE0LCAyMDcsIDIzNCwgMTkyLCAyMzQsIDc5LCAxMDksIDIzMSwgMTk4LCAxNDcsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgNDAsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDI1NCwgMjUzLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgCisgICAgMjU0LCAyNTMsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMTIsIDMxLCA1MywgMTcsIDksIDI3LCA3NywgCisgICAgMiwgMTgyLCA3MiwgMiwgMjEyLCAzMSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwNCwgNTMsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwNCwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIyNiwgMjM5LCAKKyAgICA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjI2LCAyMzksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAyMTAsIDIxMywgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIxMCwgMjEzLCA0MCwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA0MCwgCisgICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA2NSwgMTcsIDksIDI3LCAyMTQsIDIwNywgMjM0LCA3OSwgNzcsIAorICAgIDIsIDE4MiwgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDIxNCwgMjA3LCAyMzQsIDc5LCA3NywgMiwgCisgICAgMTgyLCA3MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE0LCAyMDcsIDIzNCwgNzksIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA2NSwgMTcsIDksIDEsIDI0NCwgMTc2LCA3NywgNTMsIDE3LCA5LCAxLCAyNDQsIDE3NiwgCisgICAgNzcsIDQwLCAxNywgOSwgMSwgMjQ0LCAxNzYsIDc3LCA2NSwgMTcsIDksIDEsIDI0NCwgMTc2LCA3NywgMTQ3LCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMjIsIDUzLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgCisgICAgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgCisgICAgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDIzNCwgCisgICAgMTM2LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTA5LCAyMzEsIAorICAgIDE5OCwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTUxLCA1MywgCisgICAgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA5LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIAorICAgIDI3LCAyMTcsIDksIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMTYsIAorICAgIDE5NCwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMTYsIDE5NCwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDE1MSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAKKyAgICA1MywgMTcsIDksIDI3LCAxMjIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMTIyLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjM0LCAxMzYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjM0LCAKKyAgICAxMzYsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgCisgICAgMTIyLCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAKKyAgICA2NiwgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCA2NiwgNTMsIAorICAgIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEyMiwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjQ4LCAyMjUsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIAorICAgIDIxNywgODIsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIxMCwgMTEyLCAKKyAgICAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCAKKyAgICA1MywgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDUzLCAxNywgCisgICAgOSwgMjcsIDI0NCwgMTUxLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIAorICAgIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAKKyAgICAyNDQsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDc3LCA1MywgMTcsIDksIAorICAgIDI3LCAyMjQsIDg1LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMjQsIAorICAgIDg1LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjM1LCAKKyAgICAxLCAyLCAxMDksIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEyMiwgCisgICAgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIDEwOSwgCisgICAgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCA1MywgMTcsIDksIAorICAgIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgCisgICAgOSwgMjcsIDIzMywgMTA5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIAorICAgIDEyMiwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCA2NiwgMiwgNjYsIDUzLCAxNywgOSwgCisgICAgMjcsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCA2NiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyOCwgCisgICAgNjgsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAKKyAgICAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEwOSwgCisgICAgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgMTUxLCAKKyAgICA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCAxMDksIDIzMSwgCisgICAgMTk4LCA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxNTEsIDUzLCAxNywgCisgICAgOSwgMjcsIDc3LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIAorICAgIDY2LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDc3LCA1MywgCisgICAgMTcsIDksIDI3LCAyMTYsIDIwNCwgMiwgMjE4LCAyNCwgMTA5LCA1MywgMTcsIDksIDI3LCAyMjMsIDk5LCAyLCAyMTgsIDI0LCAKKyAgICAxMDksIDUzLCAxNywgOSwgMjcsIDEwOSwgMjMxLCAxOTgsIDIsIDIxOCwgMjQsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjQ4LCAxOTEsIDUzLCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDIzNCwgMjEwLCA1MywgMTcsIDksIDI3LCAyMjAsIAorICAgIDk2LCAyLCAyNDQsIDE3NCwgNTMsIDE3LCA5LCAyNywgMjIwLCA5NiwgMiwgMjQ4LCAxOTMsIDUzLCAxNywgOSwgMjcsIDIyMCwgCisgICAgOTYsIDIsIDIzNCwgMjEyLCA1MywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyMTgsIDI0LCAxMDksIDUzLCAxNywgOSwgMjcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEwLCAxMDksIAorICAgIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIAorICAgIDIyOCwgNjgsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIAorICAgIDI1MiwgNjMsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjUyLCAKKyAgICA2MywgMiwgMjI4LCA2OCwgNDAsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgMjUyLCA2MywgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAKKyAgICAyLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMjgsIAorICAgIDY4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjEwLCAKKyAgICAxMDksIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDIyOCwgNjgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDQsIDE1MSwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIDEwOSwgCisgICAgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDQwLCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNzcsIDQwLCAxNywgCisgICAgOSwgMjcsIDY2LCAyLCAxMDksIDQwLCAxNywgOSwgMjcsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgCisgICAgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjEwLCAxMDksIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIAorICAgIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyMjgsIDY4LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMDksIAorICAgIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTA5LCAyMzEsIDE5OCwgMiwgCisgICAgMjE4LCAyNCwgMTA5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDIxMCwgCisgICAgMTA5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAyMjgsIDY4LCA0MCwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgCisgICAgMTgyLCA3MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxNTEsIAorICAgIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjM0LCAxMzYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyNDEsIDIyNiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMTcsIAorICAgIDksIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIAorICAgIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDE1MSwgMiwgMTIyLCA2NSwgCisgICAgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAxMjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMTIyLCAyLCAKKyAgICA2NiwgNjUsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDY2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTIyLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjIyLCAyOSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjIyLCAKKyAgICAyOSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAKKyAgICAxMjIsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIAorICAgIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCA2NSwgMTcsIDksIAorICAgIDI3LCAyNDIsIDI1MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI0NCwgCisgICAgMTUxLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAKKyAgICAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCAxMjIsIAorICAgIDY1LCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDE1MSwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjM1LCAxLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIAorICAgIDIzNSwgMSwgMiwgMjMzLCAxMDksIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzMywgCisgICAgMTA5LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKKyAgICAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxMjIsIDY1LCAxNywgCisgICAgOSwgMjcsIDY2LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAKKyAgICAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjM0LCAKKyAgICAxMzYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyNDEsIDIyNiwgCisgICAgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDY2LCA2NSwgMTcsIAorICAgIDksIDI3LCAyNDEsIDIyNiwgMiwgMjE4LCAyNCwgMTA5LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTUxLCA2NSwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgCisgICAgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAKKyAgICA2NiwgMTQ3LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIAorICAgIDEwOSwgMTQ3LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDE0NywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDE0NywgCisgICAgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgNzcsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjQ0LCAxNzQsIDE0NywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyNDgsIDE5MywgMTQ3LCAxNywgOSwgMjcsIAorICAgIDIyMCwgOTYsIDIsIDIzNCwgMjEyLCAxNDcsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjE3LCA4MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIAorICAgIDksIDI3LCAyNTQsIDIwNiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgCisgICAgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAKKyAgICAxNywgOSwgMjcsIDEyMiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAKKyAgICAyNywgMTUxLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAorICAgIDIzNCwgMTM2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgCisgICAgMjIyLCAyOSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyNDgsIDIyNSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgCisgICAgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgCisgICAgNjYsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIyMywgOTksIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMjMsIAorICAgIDk5LCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMjMsIDk5LCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjIzLCAKKyAgICA5OSwgNTMsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDIsIAorICAgIDI1MiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMjEsIDE2OSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyMCwgNjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDEyMiwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA3NywgCisgICAgNDAsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMzQsIDEzNiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMjMsIDk5LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjIzLCA5OSwgNDAsIAorICAgIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDY1LCAxNywgOSwgCisgICAgMjcsIDIyMCwgNjIsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjIxLCAxNjksIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyNDEsIDIyNiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA4MiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDE0NywgMTcsIDksIDI3LCAyMjEsIAorICAgIDE2OSwgMiwgMTIyLCAxNDcsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCAxNDcsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA2MiwgMiwgMTUxLCAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgCisgICAgMjM0LCAxMzYsIDE0NywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDIxMCwgMTEyLCAyLCAKKyAgICA2NiwgMTQ3LCAxNywgOSwgMjcsIDEwOSwgMiwgMjQ0LCAxNzIsIDQwLCAxNywgOSwgMjcsIDEwOSwgMiwgMjQ0LCAxNzIsIAorICAgIDUzLCAxNywgMjI2LCAxNTAsIDQzLCAyMjYsIDcsIDIyNiwgMTUwLCA0NCwgMjI2LCA3LCA5LCAyNywgMjE3LCA5LCAyLCAKKyAgICAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgMiwgMTUxLCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIAorICAgIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgCisgICAgOSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgCisgICAgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgMiwgMjM0LCAxMzYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIAorICAgIDksIDI3LCAxMjIsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTIyLCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCAKKyAgICAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyMSwgMTY5LCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgNjYsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEyMiwgMiwgCisgICAgMTIyLCA0MCwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMjIsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgCisgICAgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAKKyAgICAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjAsIAorICAgIDYyLCAyLCA2NiwgMiwgMjM0LCAxMzYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAyLCAyMzQsIDEzNiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgMiwgNjYsIAorICAgIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0OCwgCisgICAgMjI1LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCAxMjIsIAorICAgIDY1LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTUxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIAorICAgIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjU0LCAKKyAgICAyMDYsIDIsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIDY2LCA0MCwgCisgICAgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIAorICAgIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgMiwgNjYsIDQwLCAxNywgOSwgCisgICAgMjcsIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCAxMjIsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEyMiwgMiwgCisgICAgNjYsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCAyLCAxNTEsIDY1LCAxNywgCisgICAgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDIsIDE1MSwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDIzNCwgMTM2LCAyLCAKKyAgICA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIAorICAgIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA2NiwgCisgICAgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgCisgICAgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCAKKyAgICAyLCA2NiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAyMzQsIAorICAgIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyNDEsIAorICAgIDIyNiwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjI4LCA2OCwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIAorICAgIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyOCwgCisgICAgNjgsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDI1MiwgNjMsIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDIsIDc3LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAKKyAgICAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAKKyAgICAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCAKKyAgICAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjIyLCAKKyAgICAyOSwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgCisgICAgMjQ4LCAyMjUsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIAorICAgIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIAorICAgIDY2LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgCisgICAgMjI4LCA2OCwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjMzLCAxMDksIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCA2NiwgMiwgNzcsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDEyMiwgCisgICAgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgCisgICAgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMTUxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDE1MSwgCisgICAgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTIyLCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA2NiwgMiwgCisgICAgMTUxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjUyLCAKKyAgICA2MywgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIAorICAgIDI1NCwgMjA2LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgNzcsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMiwgNiwgMjE0LCAxMjgsIDI1MywgMjQ2LCAyMzQsIDEwLCAyMTgsIDEzMiwgNSwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjI0LCA4MSwgMjE0LCAxMjgsIDI1MywgMjQ2LCAyMzQsIDEwLCAyMTgsIDEzMiwgNSwgNTMsIDE3LCA5LCAyNywgCisgICAgMjU0LCAxNjIsIDUzLCAxNywgOSwgMjcsIDI1NCwgMTkyLCA1MywgMTcsIDksIDI3LCAyMzAsIDE1OCwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjIyLCA3LCA1MywgMTcsIDksIDI3LCAyMjMsIDE0NiwgNTMsIDE3LCA5LCAyNywgMjU0LCAxODEsIDUzLCAxNywgOSwgCisgICAgMjcsIDIxMiwgNDksIDUzLCAxNywgOSwgMjcsIDIyMiwgNiwgNTMsIDE3LCA5LCAyNywgMjIyLCA1LCAyNTQsIDE4MSwgMjEyLCAKKyAgICA0OCwgOSwgMjcsIDIzNSwgMTQwLCAyMjMsIDM3LCA1MCwgOSwgMjcsIDI1MSwgMjM4LCAyNTQsIDQ3LCAyNTQsIDQ4LCA0NSwgCisgICAgMjIxLCAxNTgsIDQ1LCAyMjEsIDQ3LCA0NSwgMjIwLCAyMzUsIDQ1LCAyMjAsIDIyNCwgNDUsIDIyMCwgMjEzLCA0NSwgMjIwLCAKKyAgICAyMDIsIDQ1LCAyMjAsIDE5MSwgNDUsIDIyMCwgMTgwLCA0NSwgMjIwLCAxNjksIDQ1LCAyMjEsIDE1NywgNDUsIDIyMSwgCisgICAgMTQ2LCA0NSwgMjIxLCAxMzUsIDQ1LCAyMjEsIDEyNCwgNDUsIDIyMSwgMTEzLCA0NSwgMjIxLCAxMDIsIDQ1LCAyMjEsIDkxLCAKKyAgICAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyNDksIDIyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEwLCAyNDksIAorICAgIDIyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIyNCwgMTk3LCAyNDQsIAorICAgIDI4LCAzMSwgNjcsIDI0OSwgMjM0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyMjAsIDE1MiwgMjI0LCAxOTcsIDI0NCwgCisgICAgMjgsIDMxLCA2NywgMjQ1LCAzOSwgNzksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIyNCwgMTYsIDc5LCAyMjQsIAorICAgIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgNzEsIDIzMywgMjYsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgCisgICAgNDQsIDcxLCAyMzMsIDI2LCAyNTEsIDE2NCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjAzLCAyNDUsIDE3MSwgMzgsIAorICAgIDI3LCA0MywgMjQyLCAzNCwgMzgsIDI3LCA0NCwgMjQyLCAzNCwgMzgsIDUyLCAyMTYsIDkwLCA0MywgMjQyLCAzNCwgMzgsIAorICAgIDUyLCAyMTYsIDkwLCA0NCwgMjQyLCAzNCwgMzgsIDIzMSwgMjM4LCA0MywgMjQyLCAzNCwgMzgsIDIzMSwgMjM4LCA0NCwgCisgICAgMjQyLCAzNCwgMzgsIDI0OSwgMjA1LCAyMzEsIDIzNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEzLCA1OSwgMjMzLCAKKyAgICA2MiwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjQ1LCAxNjgsIDI0OCwgMTY0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCAyNDUsIDE1OSwgMjQ4LCAxNjQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDEyMSwgMjMyLCAyMTksIDIyNCwgCisgICAgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIAorICAgIDQzLCAyMjYsIDcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCAyMjYsIDcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDQzLCAyNDksIDEwNywgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgMjQ5LCAxMDcsIDEyNywgMjI0LCAKKyAgICAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0NCwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCA4NSwgMjMzLCAyNiwgCisgICAgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgODUsIDIzMywgMjYsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIAorICAgIDMxLCA2NywgNDMsIDUyLCAyNTQsIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgNTIsIDI1NCwgCisgICAgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCAyNTQsIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAKKyAgICAyOCwgMzEsIDY3LCA0NCwgMjU0LCAxMTgsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDI0OSwgMTY5LCAKKyAgICAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCAyNDksIDE2OSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0MywgNzEsIDI0OSwgMTY5LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA3MSwgMjQ5LCAxNjksIAorICAgIDEyNywgMjIwLCAxMzMsIDI0NywgMTI4LCA3MSwgMjIwLCAxMzMsIDI0NywgMTI4LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0MywgNDIsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDQyLCAxMjcsIDI0OCwgMTYzLCAyMjYsIAorICAgIDEyMywgMjUwLCAxODAsIDIyNiwgMTIzLCAyMTIsIDMyLCAyMjYsIDEyMywgNTIsIDIxMiwgMzIsIDIyNiwgMTIzLCAyNDgsIAorICAgIDE2MywgMTIxLCAyMzIsIDIxOSwgMjUwLCAxODAsIDEyMSwgMjMyLCAyMTksIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTksIDQsIAorICAgIDI0OSwgMjI3LCA0LCAxMTAsIDI0OSwgMjI3LCA0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDQsIDIyMCwgMTUyLCA0LCAyNDksIAorICAgIDIzNCwgNCwgMjI0LCAxNiwgNzksIDQsIDI0NSwgMzksIDc5LCA0LCAyNDUsIDE2OCwgMjQ4LCAxNjQsIDQsIDQzLCAyMjYsIAorICAgIDcsIDQsIDQ0LCAyMjYsIDcsIDQsIDQzLCAyNDksIDEwNywgMTI3LCA0LCA0NCwgMjQ5LCAxMDcsIDEyNywgNCwgNDMsIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMTI3LCA0LCA0NCwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDQsIDU0LCA1MCwgNCwgMjU0LCAxMzQsIDQsIAorICAgIDI1MywgMjI0LCA0LCA5NiwgNTAsIDQsIDI0MCwgMTc0LCA0LCAyMzMsIDIxLCA1MCwgNCwgMjQyLCAxMzcsIDUwLCA0LCAKKyAgICAyNDUsIDEwNiwgNTAsIDQsIDIyMywgNTMsIDIxOSwgNDgsIDQsIDI0NywgMTQwLCA1MCwgNCwgMjI1LCAxODUsIDUwLCA0LCAKKyAgICAyNDksIDIyNSwgMjUzLCAyMTQsIDksIDI0NCwgMTcyLCA1MywgMTcsIDksIDIxNywgNDUsIDIsIDI0NCwgMTcyLCA0OCwgOSwgCisgICAgMjQ4LCAxOTEsIDUzLCAxNywgOSwgMjE3LCA3OSwgMjQ0LCA5LCA5LCAyMzQsIDIxMCwgNTMsIDE3LCA5LCAyNDQsIDE3NCwgCisgICAgNTMsIDE3LCA5LCAyNDQsIDE3NCwgMTQ3LCAxNywgOSwgMjQ4LCAxOTMsIDUzLCAxNywgOSwgMjQ4LCAxOTMsIDE0NywgMTcsIAorICAgIDksIDIzNCwgMjEyLCA1MywgMTcsIDksIDIzNCwgMjEyLCAxNDcsIDE3LCA5LCAyMjAsIDk2LCA1MywgMTcsIDksIDIyMCwgCisgICAgOTYsIDE0NywgMTcsIDksIDIxOCwgNDcsIDUzLCAxNywgOSwgMjE4LCA0NywgMTQ3LCAxNywgOSwgMSwgMTgyLCA1MywgMTcsIAorICAgIDksIDEsIDEwOSwgMiwgMjMxLCAyMzMsIDcyLCA1MywgMTcsIDksIDEsIDEwOSwgMiwgMjMxLCAyMzMsIDcyLCA0MCwgMTcsIAorICAgIDksIDEsIDEwOSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCAxMDksIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMSwgMjEyLCAKKyAgICAzMSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCAyMTIsIDMxLCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDEsIDEwOSwgMiwgCisgICAgMTgyLCAyNTIsIDUxLCA1MywgMTcsIDksIDEsIDEwOSwgMiwgMTgyLCAyNTIsIDUxLCA0MCwgMTcsIDksIDEsIDc3LCAyLCAKKyAgICAxODIsIDcyLCA1MywgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCA2NSwgCisgICAgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCAxNDcsIDE3LCA5LCAxLCAxMDksIDUzLCAxNywgOSwgMSwgMTA5LCA0MCwgMTcsIAorICAgIDksIDEsIDI1MiwgNjMsIDUzLCAxNywgOSwgMSwgMjUyLCA2MywgNDAsIDE3LCA5LCAxLCAyNTIsIDYzLCA2NSwgMTcsIDksIAorICAgIDEsIDI1MiwgNjMsIDE0NywgMTcsIDksIDEsIDIxNywgOSwgMjMxLCAxNzAsIDUzLCAxNywgOSwgMSwgMjE3LCA5LCAyMzEsIAorICAgIDE3MCwgNDAsIDE3LCA5LCAxLCAyMTcsIDksIDUzLCAxNywgOSwgMSwgMjE3LCA5LCA0MCwgMTcsIDksIDEsIDIxNywgOSwgCisgICAgNjUsIDE3LCA5LCAxLCAyMTcsIDksIDE0NywgMTcsIDksIDEsIDIxNiwgMTk0LCA1MywgMTcsIDksIDEsIDIxNiwgMTk0LCAKKyAgICA0MCwgMTcsIDksIDEsIDIxNiwgMTk0LCA2NSwgMTcsIDksIDEsIDIxNiwgMTk0LCAxNDcsIDE3LCA5LCAxLCAxNTEsIDUzLCAKKyAgICAxNywgOSwgMSwgMTUxLCA0MCwgMTcsIDksIDEsIDE1MSwgNjUsIDE3LCA5LCAxLCAxNTEsIDE0NywgMTcsIDksIDEsIDEyMiwgCisgICAgNTMsIDE3LCA5LCAxLCAxMjIsIDQwLCAxNywgOSwgMSwgMTIyLCA2NSwgMTcsIDksIDEsIDEyMiwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjM0LCAxMzYsIDUzLCAxNywgOSwgMSwgMjM0LCAxMzYsIDQwLCAxNywgOSwgMSwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMSwgCisgICAgMjM0LCAxMzYsIDE0NywgMTcsIDksIDEsIDI0OCwgMjA0LCA1MywgMTcsIDksIDEsIDI0OCwgMjA0LCA0MCwgMTcsIDksIDEsIAorICAgIDIxNiwgMjA0LCA1MywgMTcsIDksIDEsIDIxNiwgMjA0LCA0MCwgMTcsIDksIDEsIDIyMywgOTksIDUzLCAxNywgOSwgMSwgCisgICAgMjIzLCA5OSwgNDAsIDE3LCA5LCAxLCAyMTAsIDEwOSwgNTMsIDE3LCA5LCAxLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMjEsIDE2OSwgNTMsIDE3LCA5LCAxLCAyMjEsIDE2OSwgNDAsIDE3LCA5LCAxLCAyMjEsIDE2OSwgNjUsIDE3LCA5LCAxLCAKKyAgICAyMjEsIDE2OSwgMTQ3LCAxNywgOSwgMSwgMjIwLCA2MiwgNTMsIDE3LCA5LCAxLCAyMjAsIDYyLCA0MCwgMTcsIDksIDEsIAorICAgIDIyMCwgNjIsIDY1LCAxNywgOSwgMSwgMjIwLCA2MiwgMTQ3LCAxNywgOSwgMSwgMjIyLCAyOSwgNTMsIDE3LCA5LCAxLCAKKyAgICAyMjIsIDI5LCA0MCwgMTcsIDksIDEsIDIyMiwgMjksIDY1LCAxNywgOSwgMSwgMjIyLCAyOSwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjQ4LCAyMjUsIDUzLCAxNywgOSwgMSwgMjQ4LCAyMjUsIDQwLCAxNywgOSwgMSwgMjQ4LCAyMjUsIDY1LCAxNywgOSwgMSwgCisgICAgMjQ4LCAyMjUsIDE0NywgMTcsIDksIDEsIDIxNywgODIsIDUzLCAxNywgOSwgMSwgMjE3LCA4MiwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMTcsIDgyLCA2NSwgMTcsIDksIDEsIDIxNywgODIsIDE0NywgMTcsIDksIDEsIDIxMCwgMTEyLCA1MywgMTcsIDksIDEsIAorICAgIDIxMCwgMTEyLCA0MCwgMTcsIDksIDEsIDIxMCwgMTEyLCA2NSwgMTcsIDksIDEsIDIxMCwgMTEyLCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgNTMsIDE3LCA5LCAxLCAyNTQsIDIwNiwgNDAsIDE3LCA5LCAxLCAyNTQsIDIwNiwgNjUsIDE3LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgMTQ3LCAxNywgOSwgMSwgMjQyLCAyNTIsIDUzLCAxNywgOSwgMSwgMjQyLCAyNTIsIDQwLCAxNywgOSwgMSwgCisgICAgMjQyLCAyNTIsIDY1LCAxNywgOSwgMSwgMjQyLCAyNTIsIDE0NywgMTcsIDksIDEsIDI0NCwgMTUxLCA1MywgMTcsIDksIDEsIAorICAgIDI0NCwgMTUxLCA0MCwgMTcsIDksIDEsIDI0NCwgMTUxLCA2NSwgMTcsIDksIDEsIDI0NCwgMTUxLCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyMjQsIDg1LCA1MywgMTcsIDksIDEsIDIyNCwgODUsIDQwLCAxNywgOSwgMSwgMjI0LCA4NSwgNjUsIDE3LCA5LCAxLCAyMjQsIAorICAgIDg1LCAxNDcsIDE3LCA5LCAxLCAyMzUsIDEsIDUzLCAxNywgOSwgMSwgMjM1LCAxLCA0MCwgMTcsIDksIDEsIDIzNSwgMSwgCisgICAgNjUsIDE3LCA5LCAxLCAyMzUsIDEsIDE0NywgMTcsIDksIDEsIDIzMywgMTA5LCA1MywgMTcsIDksIDEsIDIzMywgMTA5LCAKKyAgICA0MCwgMTcsIDksIDEsIDIzMywgMTA5LCA2NSwgMTcsIDksIDEsIDIzMywgMTA5LCAxNDcsIDE3LCA5LCAxLCA2NiwgNTMsIAorICAgIDE3LCA5LCAxLCA2NiwgNDAsIDE3LCA5LCAxLCA2NiwgNjUsIDE3LCA5LCAxLCA2NiwgMTQ3LCAxNywgOSwgMSwgMjI4LCA2OCwgCisgICAgNTMsIDE3LCA5LCAxLCAyMjgsIDY4LCA0MCwgMTcsIDksIDEsIDIyOCwgNjgsIDY1LCAxNywgOSwgMSwgMjI4LCA2OCwgMTQ3LCAKKyAgICAxNywgOSwgMSwgMjQxLCAyMjYsIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDQwLCAxNywgOSwgMSwgMjQxLCAyMjYsIDY1LCAKKyAgICAxNywgOSwgMSwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDEsIDIxMiwgMzEsIDUzLCAxNywgOSwgMSwgMjEyLCAzMSwgNDAsIAorICAgIDE3LCA5LCAxLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDEsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMSwgNzcsIAorICAgIDUzLCAxNywgOSwgMSwgNzcsIDQwLCAxNywgOSwgMSwgNzcsIDY1LCAxNywgOSwgMSwgNzcsIDE0NywgMTcsIDksIDI3LCAKKyAgICAyMzMsIDEwOSwgMiwgMTA5LCAyLCAyMzEsIDIzMywgNzIsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIsIAorICAgIDIzMSwgMjMzLCA3MiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCAKKyAgICAyNTIsIDUxLCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIDI1MiwgNTEsIDQwLCAxNywgOSwgMjcsIAorICAgIDIzMywgMTA5LCAyLCAxMDksIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDQwLCAxNywgMjEwLCA4NywgMjExLCAKKyAgICAyNDUsIDIyOCwgNzgsIDIxOSwgMjAsIDEyNiwgMjQ1LCAzOSwgNzksIDEyNiwgMjI0LCAxLCA3OSwgMTI2LCA1NCwgNTAsIAorICAgIDEyNiwgMjQ3LCAxNDAsIDUwLCAxMjYsIDIyNSwgMTg1LCA1MCwgMTI2LCAyNTQsIDEzNCwgMTI2LCAyNTQsIDY1LCAxMjYsIAorICAgIDQzLCAyMjYsIDcsIDEyNiwgNDQsIDIyNiwgNywgMTI2LCAyNTMsIDIyNCwgMTI2LCA5NiwgNTAsIDEyNiwgMjQ5LCAyMjcsIAorICAgIDEyNiwgMjQwLCAxNzQsIDEyNiwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxMjYsIDIxOSwgNDgsIDEyNiwgMjEsIDIxMCwgODYsIAorICAgIDEyNiwgMjEsIDExMSwgMTI2LCAyMSwgMTA1LCAxMjYsIDIxLCAxNTgsIDEyNiwgMjEsIDE2MSwgMTI2LCAyMSwgMTkwLCAKKyAgICAxMjYsIDIxLCAxOTUsIDEyNiwgMjEsIDE5OSwgMTI2LCAyMSwgMTk2LCAxMjYsIDIxLCAyMDEsIDEyNiwgMjQ5LCAyMzQsIAorICAgIDEyNiwgMjIwLCAxNTIsIDEyNiwgMjMzLCAyMSwgNTAsIDEyNiwgMjQ1LCAxMDYsIDUwLCAxMjYsIDI0MiwgMTM3LCA1MCwgCisgICAgMTI2LCAyMjQsIDE2LCA3OSwgMTI2LCAyNDksIDIyNSwgMjUzLCAyMTQsIDEyNiwgNywgNiwgMSwgNjEsIDEyNiwgNywgNiwgCisgICAgMSwgMjUzLCAxNjYsIDEyNiwgNywgNiwgMSwgMjUxLCA3NCwgMTI2LCA3LCA2LCAxLCAyNDksIDY4LCAxMjYsIDcsIDYsIDEsIAorICAgIDc2LCAxMjYsIDcsIDYsIDEsIDI0NSwgMTQsIDEyNiwgNywgNiwgMSwgMjQzLCAyMDksIDEyNiwgNywgNiwgMSwgMjQyLCA2NywgCisgICAgMTI2LCA3LCA2LCAxLCA3NCwgMTI2LCA3LCA2LCAxLCAyMzUsIDE1MCwgMTI2LCA3LCA2LCAxLCAyMzUsIDI5LCAxMjYsIDcsIAorICAgIDYsIDEsIDE1NiwgMTI2LCA3LCA2LCAxLCAxOTQsIDEyNiwgNywgNiwgMSwgMjMwLCAzMCwgMTI2LCA3LCA2LCAxLCA3OCwgCisgICAgMTI2LCA3LCA2LCAxLCAyMjYsIDEwOSwgMTI2LCA3LCA2LCAxLCAyMjQsIDk5LCAxMjYsIDcsIDYsIDEsIDE1MywgMTI2LCA3LCAKKyAgICA2LCAxLCAyMjIsIDkzLCAxMjYsIDcsIDYsIDEsIDIxNywgMTUzLCAxMjYsIDcsIDYsIDEsIDY5LCAxMjYsIDcsIDYsIDEsIAorICAgIDIxNCwgMTA1LCAxMjYsIDcsIDYsIDEsIDIxMiwgOTgsIDEyNiwgNywgNiwgMSwgMjExLCAxNzgsIDEyNiwgNywgNiwgMSwgCisgICAgMjExLCAxMTcsIDEyNiwgNywgNiwgMSwgMjEwLCAxNTksIDEyNiwgNDMsIDQyLCAxMjcsIDEyNiwgMjIzLCA1MywgMjE5LCAKKyAgICA0OCwgMTI2LCA0NCwgNDIsIDEyNywgMTI2LCAyNTAsIDM5LCAyNTUsIDIzLCAxMjYsIDEyMSwgMjMyLCAyMTksIDEyNiwgCisgICAgMjQyLCAxNDQsIDI1NSwgMjMsIDEyNiwgNywgNCwgMSwgNjEsIDEyNiwgNywgNCwgMSwgMjUzLCAxNjYsIDEyNiwgNywgNCwgCisgICAgMSwgMjUxLCA3NCwgMTI2LCA3LCA0LCAxLCAyNDksIDY4LCAxMjYsIDcsIDQsIDEsIDc2LCAxMjYsIDcsIDQsIDEsIDI0NSwgCisgICAgMTQsIDEyNiwgNywgNCwgMSwgMjQzLCAyMDksIDEyNiwgNywgNCwgMSwgMjQyLCA2NywgMTI2LCA3LCA0LCAxLCA3NCwgMTI2LCAKKyAgICA3LCA0LCAxLCAyMzUsIDE1MCwgMTI2LCA3LCA0LCAxLCAyMzUsIDI5LCAxMjYsIDcsIDQsIDEsIDE1NiwgMTI2LCA3LCA0LCAKKyAgICAxLCAxOTQsIDEyNiwgNywgNCwgMSwgMjMwLCAzMCwgMTI2LCA3LCA0LCAxLCA3OCwgMTI2LCA3LCA0LCAxLCAyMjYsIDEwOSwgCisgICAgMTI2LCA3LCA0LCAxLCAyMjQsIDk5LCAxMjYsIDcsIDQsIDEsIDE1MywgMTI2LCA3LCA0LCAxLCAyMjIsIDkzLCAxMjYsIDcsIAorICAgIDQsIDEsIDIxNywgMTUzLCAxMjYsIDcsIDQsIDEsIDY5LCAxMjYsIDcsIDQsIDEsIDIxNCwgMTA1LCAxMjYsIDcsIDQsIDEsIAorICAgIDIxMiwgOTgsIDEyNiwgNywgNCwgMSwgMjExLCAxNzgsIDEyNiwgNywgNCwgMSwgMjExLCAxMTcsIDEyNiwgNywgNCwgMSwgCisgICAgMjEwLCAxNTksIDEyNiwgNDMsIDI0OSwgMTA3LCAxMjcsIDEyNiwgNjcsIDIzMiwgMjE5LCAxMjYsIDQ0LCAyNDksIDEwNywgCisgICAgMTI3LCAxMjYsIDE4NCwgMTI2LCA0MywgNzEsIDIyNiwgNywgMTI2LCA0NCwgNzEsIDIyNiwgNywgMTAxLCAxMTAsIDI0MywgCisgICAgMjM2LCAyMTgsIDEzMSwgMTAxLCA0MywgMjQ5LCAxNjksIDEyNywgMTAxLCA0NCwgMjQ5LCAxNjksIDEyNywgMTAxLCAxMTAsIAorICAgIDI0OSwgMjI3LCAxMDEsIDU2LCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDEwMSwgNTYsIDEsIDIxMSwgMjI3LCAxMDEsIDU2LCAxLCAKKyAgICA0LCA2MSwgMTAxLCA1NiwgMSwgNCwgNzQsIDEwMSwgNTYsIDEsIDQsIDY5LCAxMDEsIDU2LCAxLCA0LCA3NiwgMTAxLCA1NiwgCisgICAgMSwgNCwgNzgsIDEwMSwgNTYsIDEsIDQsIDE5MiwgMTAxLCA1NiwgMSwgNCwgMjEwLCAyMTIsIDEwMSwgNTYsIDEsIDQsIAorICAgIDIxMCwgMjQ0LCAxMDEsIDU2LCAxLCA0LCAyMTUsIDExOSwgMTAxLCAyMzQsIDIwNywgMjI0LCAxNzYsIDIxOSwgMzMsIDc5LCAKKyAgICAxMDEsIDU2LCAxLCA2MSwgMTAxLCA1NiwgMSwgNzQsIDEwMSwgNTYsIDEsIDY5LCAxMDEsIDU2LCAxLCA3NiwgMTAxLCA1NiwgCisgICAgMSwgNzgsIDEwMSwgNTYsIDEsIDE3NiwgMTAxLCA1NiwgMSwgMjM0LCA5OCwgMTAxLCA1NiwgMSwgMjMzLCAyMjMsIDEwMSwgCisgICAgNTYsIDEsIDIzNCwgMTg4LCAxMDEsIDU2LCAxLCAyMzQsIDM0LCAxMDEsIDU2LCAxLCAyMDYsIDEwMSwgNTYsIDEsIDIxOSwgCisgICAgMTkzLCAxMDEsIDU2LCAxLCAyMTgsIDg0LCAxMDEsIDU2LCAxLCAyMjEsIDE4MywgMTAxLCA1NiwgMSwgMjE5LCA2MCwgMTAxLCAKKyAgICA1NiwgMSwgMjE3LCAxMDYsIDEwMSwgNTYsIDEsIDIxNiwgMTE4LCAxMDEsIDU2LCAxLCAyMTUsIDExOSwgMTAxLCA1NiwgMSwgCisgICAgMjE3LCAyMywgMTAxLCA1NiwgMSwgMTEyLCAxMDEsIDU2LCAxLCAxOTgsIDEwMSwgNTYsIDEsIDIyOCwgMjM4LCAxMDEsIDU2LCAKKyAgICAxLCAyMjcsIDI0MiwgMTAxLCA1NiwgMSwgMjI5LCAxMTIsIDEwMSwgNTYsIDEsIDIyOCwgNzksIDEwMSwgNTYsIDEsIDE2MiwgCisgICAgMTAxLCA1NiwgMSwgMjQxLCAxODcsIDEwMSwgNTYsIDEsIDI0MCwgMjI5LCAxMDEsIDU2LCAxLCAyNDEsIDI0NSwgMTAxLCAKKyAgICA1NiwgMSwgMjQxLCA3NSwgMTAxLCA1NiwgMSwgMTg2LCAxMDEsIDU2LCAxLCAyMzAsIDIzNSwgMTAxLCA1NiwgMSwgMjMwLCAKKyAgICAxMDcsIDEwMSwgNTYsIDEsIDIzMSwgOTYsIDEwMSwgNTYsIDEsIDIzMCwgMTY2LCAxMDEsIDU2LCAxLCAxOTIsIDEwMSwgNTYsIAorICAgIDEsIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCAyMTAsIDI0NCwgMTAxLCA1NiwgMSwgMjA1LCAxMDEsIDU2LCAxLCAyMjMsIDM4LCAKKyAgICAxMDEsIDU2LCAxLCAyMjIsIDE0MiwgMTAxLCA1NiwgMSwgMjIzLCAxMzEsIDEwMSwgNTYsIDEsIDIyMiwgMjEzLCAxMDEsIAorICAgIDU2LCAxLCAyMTIsIDY1LCAxMDEsIDU2LCAxLCAyMzAsIDMwLCAxMDEsIDU2LCAyMTMsIDEzNSwgMjE5LCAzMywgNzksIDEwMSwgCisgICAgNTYsIDIyMCwgMTU3LCAyMTksIDMzLCA3OSwgMTAxLCAyNCwgMjQ0LCAxMTEsIDEwMSwgMjQsIDEsIDIzNCwgNjQsIDEwMSwgCisgICAgMjQsIDEsIDIxOCwgMjE3LCAxMDEsIDI0LCAxLCAyMzQsIDU3LCAxMDEsIDI0LCAxLCAyMjgsIDIzMSwgMTAxLCAyNCwgMSwgCisgICAgMjI4LCAyMjksIDEwMSwgMjQsIDEsIDIyOCwgMjI4LCAxMDEsIDI0LCAxLCAyMTYsIDEwMiwgMTAxLCAyNCwgMSwgMjE4LCAKKyAgICAyMDYsIDEwMSwgMjQsIDEsIDIyMywgMjksIDEwMSwgMjQsIDEsIDIyMywgMjQsIDEwMSwgMjQsIDEsIDIyMywgMjEsIDEwMSwgCisgICAgMjQsIDEsIDIyMywgMTQsIDEwMSwgMjQsIDEsIDIyMywgOSwgMTAxLCAyNCwgMSwgMjIzLCA0LCAxMDEsIDI0LCAxLCAyMjMsIAorICAgIDE1LCAxMDEsIDI0LCAxLCAyMjMsIDI3LCAxMDEsIDI0LCAxLCAyMzAsIDIyMiwgMTAxLCAyNCwgMSwgMjI1LCA5OCwgMTAxLCAKKyAgICAyNCwgMSwgMjE4LCAyMTQsIDEwMSwgMjQsIDEsIDIyNSwgODcsIDEwMSwgMjQsIDEsIDIxOSwgMTUwLCAxMDEsIDI0LCAxLCAKKyAgICAyMTgsIDIxMSwgMTAxLCAyNCwgMSwgMjM2LCA2MywgMTAxLCAyNCwgMSwgMjUwLCA1NCwgMTAxLCAyNCwgMSwgMjE4LCAyMjEsIAorICAgIDEwMSwgMjQsIDEsIDI1MCwgMTE0LCAxMDEsIDI0LCAxLCAyMzQsIDExNiwgMTAxLCAyNCwgMSwgMjE2LCAxNzQsIDEwMSwgCisgICAgMjQsIDEsIDIyNSwgMTM0LCAxMDEsIDI0LCAxLCAyNDEsIDE3OSwgMTAxLCAyNCwgMSwgNjEsIDEwMSwgMjQsIDEsIDI1NCwgCisgICAgMjUyLCAxMDEsIDI0LCAxLCAxOTIsIDEwMSwgMjQsIDEsIDIxMSwgOTIsIDEwMSwgMjQsIDEsIDI0NSwgMTI1LCAxMDEsIDI0LCAKKyAgICAxLCA3NiwgMTAxLCAyNCwgMSwgMjExLCAzNiwgMTAxLCAyNCwgMSwgMjExLCA0NywgMTAxLCAyNCwgMSwgNzgsIDEwMSwgMjQsIAorICAgIDEsIDIxMiwgNjUsIDEwMSwgMjQsIDEsIDIxMiwgNjIsIDEwMSwgMjQsIDEsIDIyNiwgMjM4LCAxMDEsIDI0LCAxLCAyMTAsIAorICAgIDI0NCwgMTAxLCAyNCwgMSwgNjksIDEwMSwgMjQsIDEsIDIxMiwgMTEsIDEwMSwgMjQsIDEsIDIxMiwgMjIsIDEwMSwgMjQsIAorICAgIDEsIDIxMSwgMjUwLCAxMDEsIDI0LCAxLCAyMTAsIDIxMiwgMTAxLCAyNCwgMSwgMjQ1LCA2MywgMTAxLCAyNCwgMSwgMjExLCAKKyAgICA4LCAxMDEsIDI0LCAxLCA3NCwgMTI2LCAyNTAsIDE4NCwgNTAsIDEyNiwgMjI0LCAyMzEsIDUwLCAxMjYsIDIyOCwgNTcsIAorICAgIDUwLCAxMjYsIDIzMSwgMjM3LCAxMjYsIDI1MSwgMTQzLCAxMzAsIDEyNiwgMjExLCA0MCwgNTAsIDEyNiwgMjExLCAyMTcsIAorICAgIDUwLCAxMDEsIDI0NCwgMjYsIDE5MywgMjEzLCAyMzksIDEwMSwgMTQwLCA3NSwgMTAxLCAyMTQsIDE1MywgNzUsIDEwMSwgCisgICAgOTcsIDc1LCAxMDEsIDI0NiwgMTEyLCA3NSwgMTAxLCA4NSwgMjE4LCAyMzYsIDEwMSwgNzEsIDI1MCwgNDMsIDIzNSwgMjExLCAKKyAgICAyNTQsIDEwNywgMjU0LCAxMjgsIDIzNSwgMjExLCAyNTQsIDEwNywgMjIwLCAxMzksIDIzNSwgMjExLCAyNTQsIDEwNywgCisgICAgMjE2LCAyMzcsIDIyNiwgMjUzLCAyMjMsIDc1LCAyNTAsIDE1MCwgMjIzLCA3NSwgMjUwLCAxNTAsIDYyLCA1NywgMywgMjUzLCAKKyAgICAxNTAsIDYxLCA2MiwgNTcsIDMsIDI1MywgMTE5LCA3NiwgNjIsIDU3LCAzLCAyNTMsIDEyOCwgNzQsIDYyLCA1NywgMywgCisgICAgMjUzLCA5NiwgNzgsIDYyLCA1NywgMywgMjUzLCAxNDYsIDY5LCA2MiwgNTcsIDMsIDI1MywgMTY1LCAyNDgsIDIyOSwgNjIsIAorICAgIDU3LCAzLCAyNTMsIDExMiwgMjQ4LCA5OCwgNjIsIDU3LCAzLCAyNTMsIDE1MiwgMjQ4LCAxMSwgNjIsIDU3LCAzLCAyNTMsIAorICAgIDE0MiwgMjQ3LCAxNTMsIDYyLCA1NywgMywgMjUzLCAxMDYsIDI0NiwgODYsIDYyLCA1NywgMywgMjUzLCAxMDAsIDIzNSwgCisgICAgMTQ3LCA2MiwgNTcsIDMsIDI1MywgMTExLCAyMzUsIDEzMiwgNjIsIDU3LCAzLCAyNTMsIDEyMSwgMjM1LCA3NCwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDkyLCAyMzUsIDU3LCA2MiwgNTcsIDMsIDI1MywgODAsIDE3NiwgNjIsIDU3LCAzLCAyNTMsIDExMywgMjM0LCAKKyAgICAxODgsIDYyLCA1NywgMywgMjUzLCA5MCwgMjM0LCA5OCwgNjIsIDU3LCAzLCAyNTMsIDg3LCAyMzQsIDM0LCA2MiwgNTcsIDMsIAorICAgIDI1MywgNzYsIDIzMywgMjIzLCA2MiwgNTcsIDMsIDI1MywgNzcsIDE4NiwgNjIsIDU3LCAzLCAyNTMsIDE0MywgMjMxLCA5NiwgCisgICAgNjIsIDU3LCAzLCAyNTMsIDg0LCAyMzAsIDIzNSwgNjIsIDU3LCAzLCAyNTMsIDE0MSwgMjMwLCAxNjYsIDYyLCA1NywgMywgCisgICAgMjUzLCAxMzMsIDIzMCwgMTA3LCA2MiwgNTcsIDMsIDI1MywgMTU0LCAxOTgsIDYyLCA1NywgMywgMjUzLCAxMzIsIDIyOSwgCisgICAgMTEyLCA2MiwgNTcsIDMsIDI1MywgMTI2LCAyMjgsIDIzOCwgNjIsIDU3LCAzLCAyNTMsIDEwNSwgMjI4LCA3OSwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDEwMiwgMjI3LCAyNDIsIDYyLCA1NywgMywgMjUzLCAxNjEsIDE5MSwgNjIsIDU3LCAzLCAyNTMsIDg1LCAyMjUsIAorICAgIDIyNCwgNjIsIDU3LCAzLCAyNTMsIDExOCwgMjI1LCAxMTEsIDYyLCA1NywgMywgMjUzLCAxNDUsIDIyNSwgMTksIDYyLCA1NywgCisgICAgMywgMjUzLCAxMDcsIDIyNCwgMTUzLCA2MiwgNTcsIDMsIDI1MywgMTQwLCAyMjQsIDkxLCA2MiwgNTcsIDMsIDI1MywgNzksIAorICAgIDIyNCwgNzIsIDYyLCA1NywgMywgMjUzLCAxMzUsIDIyNCwgNTYsIDYyLCA1NywgMywgMjUzLCAxMjQsIDIyNCwgNDUsIDYyLCAKKyAgICA1NywgMywgMjUzLCA5NywgMjA1LCA2MiwgNTcsIDMsIDI1MywgMTI5LCAyMjMsIDEzMSwgNjIsIDU3LCAzLCAyNTMsIDEwNCwgCisgICAgMjIzLCAzOCwgNjIsIDU3LCAzLCAyNTMsIDE2MywgMjIyLCAyMTMsIDYyLCA1NywgMywgMjUzLCAxMzAsIDIyMiwgMTQyLCAKKyAgICA2MiwgNTcsIDMsIDI1MywgMTI1LCAyMDYsIDYyLCA1NywgMywgMjUzLCAxNDgsIDIyMSwgMTgzLCA2MiwgNTcsIDMsIDI1MywgCisgICAgMTE2LCAyMTksIDE5MywgNjIsIDU3LCAzLCAyNTMsIDE0NCwgMjE5LCA2MCwgNjIsIDU3LCAzLCAyNTMsIDk5LCAyMTgsIDg0LCAKKyAgICA2MiwgNTcsIDMsIDI1MywgOTgsIDIxNywgMTA2LCA2MiwgNTcsIDMsIDI1MywgMTU5LCAyMTcsIDIzLCA2MiwgNTcsIDMsIAorICAgIDI1MywgMTIwLCAyMTYsIDExOCwgNjIsIDU3LCAzLCAyNTMsIDE1NywgMTEyLCA2MiwgNTcsIDMsIDI1MywgODgsIDIxNSwgCisgICAgMTE5LCA2MiwgNTcsIDMsIDI1MywgMTAzLCAyMTIsIDY1LCA2MiwgNTcsIDMsIDI1MywgODIsIDIxMiwgMjIsIDYyLCA1NywgCisgICAgMywgMjUzLCAxMTcsIDIxMSwgMjUwLCA2MiwgNTcsIDMsIDI1MywgMTE1LCAyMTEsIDIyNywgNjIsIDU3LCAzLCAyNTMsIAorICAgIDEzOSwgMjEwLCAxMTYsIDYyLCA1NywgMywgMjUzLCA4MywgMjEwLCA5NCwgNjIsIDU3LCAzLCAyNTMsIDEzNiwgMjEwLCAyMywgCisgICAgNjIsIDU3LCAzLCAyNTMsIDEzMSwgMjU1LCA4NCwgNjIsIDU3LCAzLCAyNTMsIDExNCwgMjU1LCA4MywgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDczLCAyNTMsIDIwMCwgNjIsIDU3LCAzLCAyNTMsIDg2LCAyNDYsIDU0LCA2MiwgNTcsIDMsIDI1MywgNjksIDI0NiwgCisgICAgNTMsIDYyLCA1NywgMywgMjUzLCAxMDksIDIyNywgMTc4LCA2MiwgNTcsIDMsIDI1MywgMTI3LCAyMjQsIDE1MSwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDk1LCAyMjQsIDE1NSwgNjIsIDU3LCAzLCAyNTMsIDgxLCAyMjMsIDE4OSwgNjIsIDU3LCAzLCAyNTMsIDEyMywgCisgICAgMjIzLCAxODgsIDYyLCA1NywgMywgMjUzLCA4OSwgMjIyLCAyMTIsIDYyLCA1NywgMywgMjUzLCA5MSwgMjE3LCAxMDMsIDYyLCAKKyAgICA1NywgMywgMjUzLCA3MSwgMjE1LCA3OCwgNjIsIDU3LCAzLCAyNTMsIDY4LCAxMDUsIDYyLCA1NywgMTYsIDI1MywgMTM4LCAKKyAgICA2MiwgNTcsIDE2LCAyNTMsIDEzNywgNjIsIDU3LCAxNiwgMjUzLCAxMzQsIDYyLCA1NywgMTYsIDI1MywgMTIyLCA2MiwgNTcsIAorICAgIDE2LCAyNTMsIDExMCwgNjIsIDU3LCAxNiwgMjUzLCAxMDgsIDYyLCA1NywgMTYsIDI1MywgMTAxLCA2MiwgNTcsIDE2LCAKKyAgICAyNTMsIDk0LCA2MiwgNTcsIDE2LCAyNTMsIDkzLCA2MiwgNTcsIDE2LCAyNTMsIDc4LCA2MiwgNTcsIDE2LCAyNTMsIDc1LCAKKyAgICA2MiwgNTcsIDE2LCAyNTMsIDc0LCA2MiwgNTcsIDE2LCAyNTMsIDcyLCA2MiwgNTcsIDE2LCAyNTMsIDcwLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCA2NywgMjMxLCAxOTAsIDYyLCA1NywgMTA2LCAyNTMsIDY2LCAyMTEsIDIyMSwgNjIsIDU3LCAxMDYsIDI1MywgCisgICAgNjUsIDI0OCwgODIsIDYyLCA1NywgMTA2LCAyNTMsIDY0LCAyNDUsIDEwMywgNjIsIDU3LCAxMDYsIDI1MywgNjMsIDIzMSwgCisgICAgMTY0LCA2MiwgNTcsIDEwNiwgMjUzLCA2MiwgMjE4LCAxNjQsIDYyLCA1NywgMTA2LCAyNTMsIDYxLCAyNDUsIDQ1LCA2MiwgCisgICAgNTcsIDEwNiwgMjUzLCA2MCwgMjIzLCAxNTYsIDYyLCA1NywgMTA2LCAyNTMsIDU5LCAyMjAsIDY0LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCA1OCwgMjQxLCAyNDQsIDYyLCA1NywgMTA2LCAyNTMsIDU3LCAyMTksIDI3LCA2MiwgNTcsIDEwNiwgMjUzLCA1NiwgCisgICAgMjUxLCAyMTEsIDYyLCA1NywgMTA2LCAyNTMsIDU1LCAyNDksIDE1MywgNjIsIDU3LCAxMDYsIDI1MywgNTQsIDI1MSwgMTIzLCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCA1MywgMjEyLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCA1MiwgMjUyLCAxNDQsIDYyLCA1NywgCisgICAgMTA2LCAyNTMsIDUxLCAyMjYsIDIwOSwgNjIsIDU3LCAxMDYsIDI1MywgNTAsIDIxOSwgMCwgNjIsIDU3LCAxMDYsIDI1MywgCisgICAgNDksIDI0OSwgNzYsIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgNDgsIDIzNCwgMjMwLCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIAorICAgIDQ3LCAyMzQsIDIzOCwgNjIsIDU3LCAxMDYsIDI1MywgNDYsIDIyNiwgMjIyLCA2MiwgNTcsIDEwNiwgMjUzLCA0NSwgMjExLCAKKyAgICAyMzYsIDYyLCA1NywgMTA2LCAyNTMsIDQ0LCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIDQzLCAyNTQsIDI1LCA2MiwgNTcsIAorICAgIDIzMCwgMTQ3LCAyNTMsIDQyLCAyMzEsIDU3LCA2MiwgNTcsIDEwNiwgMjUzLCA0MSwgMjUxLCAxNDIsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDQwLCAyNDIsIDE3MywgNjIsIDU3LCAxMDYsIDI1MywgMzksIDYyLCA1NywgMTA2LCAyNTMsIDM4LCAyMTEsIDIxMiwgCisgICAgNjIsIDU3LCAxMDYsIDI1MywgMzcsIDYyLCA1NywgMTA2LCAyNTMsIDM2LCA2MiwgNTcsIDEwNiwgMjUzLCAzNSwgMjQwLCAKKyAgICAyNTUsIDYyLCA1NywgMTA2LCAyNTMsIDM0LCA2MiwgNTcsIDEwNiwgMjUzLCAzMywgNjIsIDU3LCAxMDYsIDI1MywgMzIsIAorICAgIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgMzAsIDIxNSwgOTIsIDYyLCA1NywgMTA2LCAyNTMsIDI5LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCAyOCwgNjIsIDU3LCAxMDYsIDI1MywgMjcsIDI1MCwgMiwgNjIsIDU3LCAxMDYsIDI1MywgMjYsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCAyNCwgMjQzLCAxMDAsIDYyLCA1NywgMTA2LCAyNTMsIDIzLCAyNTQsIDEyLCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCAyMiwgNjIsIDU3LCAxMDYsIDI1MywgMjEsIDYyLCA1NywgMTA2LCAyNTMsIDIwLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCAxOSwgNjIsIDU3LCAxMDYsIDI1MywgMTgsIDYyLCA1NywgMTA2LCAyNTMsIDE3LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCAxNiwgNjIsIDU3LCAxMDYsIDI1MywgMTUsIDYyLCA1NywgMTA2LCAyNTMsIDE0LCA2MiwgNTcsIDEwNiwgMjUzLCAKKyAgICAxMywgMjMwLCAxMzksIDYyLCA1NywgMTA2LCAyNTMsIDEyLCA2MiwgNTcsIDEwNiwgMjUzLCAxMSwgMjE1LCAyMzYsIDYyLCAKKyAgICA1NywgMTA2LCAyNTMsIDEwLCA2MiwgNTcsIDEwNiwgMjUzLCA5LCA2MiwgNTcsIDEwNiwgMjUzLCA4LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCA3LCA2MiwgNTcsIDEwNiwgMjUzLCA2LCA2MiwgNTcsIDEwNiwgMjUzLCA1LCA2MiwgNTcsIDEwNiwgMjUzLCA0LCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCAzLCA2MiwgNTcsIDEwNiwgMjUzLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCAxLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTUsIDI0MSwgMjE4LCA2MiwgNTcsIDEwNiwgMjUyLCAyMzQsIDI0NCwgCisgICAgMzYsIDYyLCA1NywgMTA2LCAyNTIsIDIzMSwgMjUyLCAxMjQsIDYyLCA1NywgMTA2LCAyNTIsIDIyNiwgMjE5LCA3LCA2MiwgCisgICAgNTcsIDEwNiwgMjUyLCAyMjUsIDc1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMjQsIDYyLCA1NywgMTA2LCAyNTIsIDIyMywgMjE3LCAKKyAgICAyMzcsIDYyLCA1NywgMTA2LCAyNTIsIDIyMiwgNjIsIDU3LCAxMDYsIDI1MiwgMjIxLCA2MiwgNTcsIDEwNiwgMjUyLCAyMjAsIAorICAgIDIxMSwgMjU0LCAyNTAsIDE0NywgNjIsIDU3LCAxMDYsIDI1MiwgMjE5LCAyNTAsIDE0NywgNjIsIDU3LCAxMDYsIDI1MiwgCisgICAgMjE4LCAyNTAsIDE0OCwgMjQ0LCA3LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTcsIDIxMiwgMCwgNjIsIDU3LCAxMDYsIDI1MiwgCisgICAgMjE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTUsIDYyLCA1NywgMjMwLCAxNDcsIDI1MiwgMjE0LCAyNDcsIDIwNiwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MiwgMjEzLCA2MiwgNTcsIDEwNiwgMjUyLCAyMTIsIDYyLCA1NywgMTA2LCAyNTIsIDIxMCwgNjIsIDU3LCAxMDYsIAorICAgIDI1MiwgMjA5LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDgsIDYyLCA1NywgMTA2LCAyNTIsIDIwNywgMjQ4LCAxNjcsIDYyLCA1NywgCisgICAgMTA2LCAyNTIsIDIwNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjA1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDQsIDYyLCA1NywgMTA2LCAKKyAgICAyNTIsIDIwMywgNjIsIDU3LCAxMDYsIDI1MiwgMjAyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MywgMzEsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTQsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTMsIDYyLCA1NywgMTA2LCAKKyAgICAyMTMsIDE4NiwgMjUyLCAyNTIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTEsIDYyLCA1NywgMTA2LCAyMTMsIAorICAgIDE4NiwgMjUyLCAyNTAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCisgICAgMjUyLCAyNDgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKKyAgICAyNDYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDQsIAorICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDIsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDAsIDYyLCA1NywgMTA2LCAKKyAgICAyMTMsIDE4NiwgMjUyLCAyMzksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzgsIDYyLCA1NywgMTA2LCAyMTMsIAorICAgIDE4NiwgMjUyLCAyMzcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCisgICAgMjUyLCAyMzUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKKyAgICAyMzIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjksIAorICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjcsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMTEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMDEsIDI1NCwgMjQ1LCAyMTEsIAorICAgIDIwOSwgMjIwLCAxNDAsIDIzMiwgMjE5LCAyNTQsIDI0NSwgMjExLCAyMDksIDIyMCwgMTQwLCAyNDcsIDEyOCwgMjU0LCAKKyAgICAyNDUsIDI1MCwgMTM4LCA3OSwgMjU0LCAyNDUsIDU0LCAxMTEsIDI1NCwgMjQ1LCA1NCwgMTA1LCAyNTQsIDI0NSwgNTQsIAorICAgIDE1OCwgMjU0LCAyNDUsIDU0LCAxNjEsIDI1NCwgMjQ1LCA1NCwgMTkwLCAyNTQsIDI0NSwgNTQsIDE5NSwgMjU0LCAyNDUsIAorICAgIDU0LCAxOTksIDI1NCwgMjQ1LCA1NCwgMTk2LCAyNTQsIDI0NSwgNTQsIDIwMSwgMjU0LCAyNDUsIDU0LCAyMTYsIDI0OCwgCisgICAgMjU0LCAyNDUsIDU0LCAyMTUsIDczLCAyNTQsIDI0NSwgNTQsIDIxNiwgMTYzLCAyNTQsIDI0NSwgNTQsIDI0NCwgMjMsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjQ0LCAxMjIsIDI1NCwgMjQ1LCA1NCwgMjE5LCAxMTMsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMTgsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjQ1LCAxOTIsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDAsIDI1NCwgMjQ1LCA1NCwgMTIzLCAyNDAsIAorICAgIDIxNywgMjU0LCAyNDUsIDU0LCAxMTMsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDEzNCwgMjQwLCAyMTcsIDI1NCwgMjQ1LCAKKyAgICA1NCwgMjQ0LCAxOSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgCisgICAgMjE5LCAxMjcsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDIyMCwgMTI0LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyNDUsIAorICAgIDIwMSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDUsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDEyMywgMjE2LCAKKyAgICAxNDgsIDI1NCwgMjQ1LCA1NCwgMTEzLCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAxMzQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgCisgICAgNTQsIDI0NCwgMTksIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgODksIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIAorICAgIDIxOSwgMTI3LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjAsIDEyNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ1LCAKKyAgICAyMDEsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyOCwgMjA1LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMTYsIDI0OSwgCisgICAgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjE1LCA3NCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjE2LCAxNjQsIDIxNiwgCisgICAgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgMjQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgMTIzLCAyMTYsIDE0OCwgCisgICAgMjU0LCAyNDUsIDU0LCAyMTksIDExNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMTksIDIxNiwgMTQ4LCAyNTQsIAorICAgIDI0NSwgNTQsIDI0NSwgMTkzLCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjgsIDIwMSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCAKKyAgICAyMTIsIDE0LCAyNTIsIDEzNiwgMjE0LCAxNzMsIDI1NCwgMjQ1LCAyMTIsIDE0LCAyNDQsIDEwMCwgMjE4LCA2MCwgMjU0LCAKKyAgICAyNDUsIDIxMiwgMTQsIDIyMSwgMTc4LCAyMTgsIDYwLCAyNTQsIDI0NSwgMjEyLCAxNCwgMjE2LCAxNzAsIDIxOCwgNjAsIAorICAgIDI1NCwgMjQ1LCAyMTIsIDE0LCAyNDQsIDEyLCAyMTgsIDYwLCAyNTQsIDI0NSwgMjQ2LCA4OSwgMjMxLCA5NSwgMjQ0LCAKKyAgICAxMDAsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyMzIsIDIwNSwgMjMxLCA5NSwgMjQ0LCAxMDAsIDIxOCwgNjAsIDI1NCwgMjQ1LCAKKyAgICAyMzEsIDk1LCAyMjEsIDE3OCwgMjE4LCA2MCwgMjU0LCAyNDUsIDIzMSwgOTUsIDIxNiwgMTcwLCAyMTgsIDYwLCAyNiwgCisgICAgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjI0LCAyNCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDI0MiwgMzQsIDI2LCAKKyAgICAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyNDYsIDEwOCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxOTAsIDI2LCAyNTUsIAorICAgIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAKKyAgICAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjE2LCAxNDgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIAorICAgIDIxNiwgMTQ4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgCisgICAgMjE2LCAyNDksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAKKyAgICAyNTMsIDIwMiwgMTIzLCAyNDAsIDIxOCwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyNDAsIAorICAgIDIxOCwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDIxNiwgMTQ5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgCisgICAgMjUzLCAyMDIsIDI0NCwgODksIDIxNiwgMTQ5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIAorICAgIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDIxNiwgMjQ5LCAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgCisgICAgMjAyLCAyNDQsIDEyMywgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyNDAsIDIxOCwgMjE4LCAxNTIsIAorICAgIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTgsIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAKKyAgICAyMDIsIDEyMywgMjE2LCAxNDksIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDIxNiwgMjQ5LCAyMTYsIDE0OSwgCisgICAgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIDIxNiwgMTQ5LCAyMTgsIDE1MiwgMjYsIDI1NSwgCisgICAgMTUsIDI1MywgMjAyLCAyMTYsIDI0OSwgMjMwLCAxNjksIDI2LCAyNTUsIDE1LCAyNDEsIDIxMiwgMTIzLCAyMjUsIDM0LCAKKyAgICAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDExMSwgMjYsIDI1NSwgMTUsIDI0MSwgMjA4LCAxMTEsIDI2LCAyNTUsIDE1LCAyNDUsIAorICAgIDExMiwgMTA1LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDEwNSwgMjYsIDI1NSwgMTUsIDI0OSwgNzMsIDExMywgMjQ2LCAKKyAgICAxMDcsIDI2LCAyNTUsIDE1LCAyNDUsIDExMiwgMTEzLCAyNDYsIDEwNywgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAxOTAsIAorICAgIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjE2LCAyNDgsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjE2LCAyNDksIDI1NCwgCisgICAgMTQ5LCAxNywgMjYsIDI1NSwgMTUsIDI0MSwgMjA4LCAyMTYsIDI0OCwgMjYsIDI1NSwgMTUsIDIzMSwgNDYsIDIxNiwgMjQ4LCAKKyAgICAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDIxNiwgMjQ4LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDIxNiwgMTYzLCAyNiwgCisgICAgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgMTIyLCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgMTIzLCAyNTQsIDE0OSwgCisgICAgMTcsIDI2LCAyNTUsIDE1LCAyNDEsIDIwOCwgMjQ0LCAxMjIsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjQ0LCAxMjIsIDI2LCAKKyAgICAyNTUsIDE1LCAyMTYsIDE4MiwgMTIzLCAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAxMzQsIDI0MCwgMjE3LCAKKyAgICAyNiwgMjU1LCAxNSwgMjQ1LCAxMTIsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgODksIAorICAgIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjUwLCAKKyAgICAyMzUsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjI5LCAxODcsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgCisgICAgMjU1LCAxNSwgMjE2LCAxODIsIDEyMywgMjE2LCAxNDgsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjQ0LCA4OSwgMjE2LCAKKyAgICAxNDgsIDI2LCAyNTUsIDE1LCAyNDgsIDY1LCAyNDQsIDg5LCAyMzAsIDE2OSwgMjYsIDI1NSwgMTUsIDIxOCwgMTIwLCAyNDQsIAorICAgIDEyMywgMjMwLCAxNjksIDI2LCAxMjMsIDE2MywgNTAsIDI2LCAxMjMsIDE2MywgNSwgMjU0LCAxNDksIDE3LCAyNiwgMTEzLCAKKyAgICAyMTYsIDE2OCwgNTAsIDI2LCAxMzQsIDIyNCwgMjMsIDUwLCAyNiwgMjExLCA0NSwgNTAsIDI2LCAyMTcsIDY5LCA1MCwgMjYsIAorICAgIDI0NiwgMTA5LCA1MCwgMjYsIDIyNiwgMjUwLCA1MCwgMjYsIDExMywgMjI2LCAyNDksIDUwLCAyNiwgMTM0LCAyMjYsIDI0OSwgCisgICAgNTAsIDI2LCAyNDQsIDE5LCAyMjYsIDI0OSwgNTAsIDI2LCAyNDQsIDg5LCAyMjYsIDI0OSwgNTAsIDI2LCAyMzEsIDQwLCAKKyAgICA1MCwgMjYsIDIzMywgMTYzLCAyNTIsIDEzNiwgNTAsIDI2LCAyMzIsIDIwMCwgNTAsIDI2LCAyMjYsIDEzNSwgNTAsIDI2LCAKKyAgICAyMTEsIDE1OSwgNTAsIDI2LCAyNTMsIDI1MSwgNTAsIDI2LCAyNTQsIDgsIDUwLCAyNiwgMjQyLCAxNTEsIDUwLCAyNiwgCisgICAgMjE1LCAxODcsIDI1MiwgMTM2LCA1MCwgMjYsIDIxMCwgODcsIDUwLCAyMjIsIDIwMCwgMjIwLCAxMTUsIDUwLCAyMjIsIAorICAgIDIwMCwgMjE0LCAxODUsIDUwLCAyMjIsIDIwMCwgMjIwLCAxNDQsIDUwLCAyMjIsIDIwMCwgMjIwLCAxMTMsIDUwLCAyMjIsIAorICAgIDIwMCwgMjQ3LCAyMjEsIDIyMCwgMTEzLCA1MCwgMjIyLCAyMDAsIDIxOSwgMTcwLCA1MCwgMjIyLCAyMDAsIDI0OCwgNjEsIAorICAgIDUwLCAyMjIsIDIwMCwgMjI0LCA5LCA1MCwgMjIyLCAyMDAsIDIyMCwgMTMxLCA1MCwgMjIyLCAyMDAsIDI0NiwgNjgsIDUwLCAKKyAgICAyMjIsIDIwMCwgMjUzLCAyNDYsIDUwLCAyMjIsIDIwMCwgMjUwLCAxNzksIDUwLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDIyNSwgMjE2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIyNSwgMjcsIDI0MSwgMjQyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIAorICAgIDUsIDIxNywgNDYsIDI0MSwgMjQyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MCwgMjU1LCAyMjUsIDE0NiwgMjQ3LCAKKyAgICAxOTksIDUsIDI1MCwgMTA5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxMSwgMjIxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDI0MSwgMjE4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0MywgOTIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjE2LCAKKyAgICAxMTcsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgNzUsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUxLCAxNzcsIDIyNSwgCisgICAgMTQ2LCAyNDcsIDE5OSwgNSwgMjIwLCAzMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDksIDI1MiwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyMzEsIDE4OSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMzEsIDE0MSwgMjI1LCAxNDYsIDI0NywgCisgICAgMTk5LCA1LCAyMjEsIDIxOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMzIsIDI0MywgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyNTEsIDE5NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTAsIDIzOSwgMjI1LCAzOCwgMjI1LCAxNDYsIDI0NywgMTk5LCAKKyAgICA1LCAyNDcsIDE0MSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDksIDIzMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTksIAorICAgIDg5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0OSwgMjMyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MiwgNzEsIDIyNSwgCisgICAgMTQ2LCAyNDcsIDE5OSwgNSwgMjIwLCAxOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDAsIDI1NSwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyNDEsIDE4NSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTEsIDEyMCwgMjMzLCA0MiwgMjI1LCAKKyAgICAxNDYsIDI0NywgMTk5LCA1LCAyNTAsIDIzMiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjMsIDE1NiwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyNDUsIDIzOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDYsIDExNSwgMjI1LCAxNDYsIDI0NywgCisgICAgMTk5LCA1LCAyMTUsIDEwNiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTIsIDc0LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDIyNSwgMzksIDIxNSwgMjM2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxMywgMTU5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIAorICAgIDUsIDIyNiwgMjIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjIyLCAxOTIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjMyLCAKKyAgICAyMzAsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjI2LCAxMTksIDI1MiwgMTkyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDI0NCwgNTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQyLCAxNDUsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjE4LCAKKyAgICAxMjEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgNCwgMjUzLCAxNzYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjEyLCAzMiwgCisgICAgMjUyLCAxNTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMzgsIDIyNiwgMjUyLCA5MSwgMjMyLCA2NSwgMSwgNjEsIDIzMiwgCisgICAgNjUsIDEsIDc2LCAyMzIsIDY1LCAxLCAyNTMsIDE2NiwgMjMyLCA2NSwgMSwgMjUyLCAyNywgMjMyLCA2NSwgMSwgMjQzLCAKKyAgICAyMDksIDIzMiwgNjUsIDEsIDI0OSwgNjgsIDIzMiwgNjUsIDEsIDc0LCAyMzIsIDY1LCAxLCAyMTIsIDk4LCAyMzIsIDY1LCAKKyAgICAxLCAyMTAsIDE1OSwgMjMyLCA2NSwgMSwgMjE2LCAyMTEsIDIzMiwgNjUsIDEsIDIzNSwgMTUwLCAyMzIsIDY1LCAxLCAyMzUsIAorICAgIDI5LCAyMzIsIDY1LCAxLCAyMjQsIDk5LCAyMzIsIDY1LCAxLCAxNTYsIDIzMiwgNjUsIDEsIDE5NCwgMjMyLCA2NSwgMSwgCisgICAgMjMwLCAzMCwgMjMyLCA2NSwgMSwgMjMwLCAxNzEsIDIzMiwgNjUsIDEsIDIyOCwgMTE2LCAyMzIsIDY1LCAxLCA2OSwgMjMyLCAKKyAgICA2NSwgMSwgMjI2LCAxMDksIDIzMiwgNjUsIDEsIDIzNCwgNTMsIDIzMiwgNjUsIDEsIDE1MywgMjMyLCA2NSwgMSwgMjIyLCAKKyAgICA5MywgMjMyLCA2NSwgMSwgMjE3LCAxNTMsIDIzMiwgNjUsIDEsIDIxNSwgMTYwLCAyMzIsIDY1LCAxLCAyNTQsIDEzMSwgCisgICAgMjMyLCA2NSwgMSwgMjQ1LCAxNTgsIDIzMiwgNjUsIDEsIDI0MiwgNjcsIDIzMiwgNjUsIDEsIDIxMSwgMTc4LCAyNTAsIAorICAgIDI0NSwgMSwgNjEsIDI1MCwgMjQ1LCAxLCAyMjYsIDk1LCAyNTAsIDI0NSwgMSwgMjQ5LCA2OCwgMjUwLCAyNDUsIDEsIDE1NiwgCisgICAgMjUwLCAyNDUsIDEsIDIxNCwgMTE2LCAyNTAsIDI0NSwgMSwgMTUzLCAyNTAsIDI0NSwgMSwgMjMzLCA2OCwgMjUwLCAyNDUsIAorICAgIDEsIDI1NSwgODQsIDI1MCwgMjQ1LCAxLCAyMjQsIDk5LCAyNTAsIDI0NSwgMSwgMjUzLCAxNjYsIDI1MCwgMjQ1LCAxLCAKKyAgICAxOTQsIDI1MCwgMjQ1LCAxLCA3OCwgMjUwLCAyNDUsIDEsIDI0OCwgMjMxLCAyNTAsIDI0NSwgMSwgMjE3LCAxNTMsIDI1MCwgCisgICAgMjQ1LCAxLCAyMjAsIDEwNiwgMjUwLCAyNDUsIDEsIDIyMCwgMTA1LCAyNTAsIDI0NSwgMSwgMjIyLCA5MywgMjUwLCAyNDUsIAorICAgIDEsIDI1MSwgNzMsIDI1MCwgMjQ1LCAxLCA2OSwgMjUwLCAyNDUsIDEsIDIyOCwgMTE2LCAyNTAsIDI0NSwgMSwgMjExLCAKKyAgICAxNzgsIDI1MCwgMjQ1LCAxLCAyMzAsIDMwLCAyNTAsIDI0NSwgMSwgMjE1LCAxNTksIDI1MCwgMjQ1LCAxLCAyMjYsIDEwOSwgCisgICAgMjUwLCAyNDUsIDEsIDIxOCwgMjI4LCAyNTAsIDI0NSwgMSwgNzQsIDI1MCwgMjQ1LCAxLCA3NiwgMjUwLCAyNDUsIDEsIAorICAgIDIxNCwgMTEzLCAyNTAsIDI0NSwgMSwgMjM1LCAyOSwgMjUwLCAyNDUsIDEsIDIzNSwgMjAsIDI1MCwgMjQ1LCAxLCAyMjksIAorICAgIDE1NSwgMjUwLCAyNDUsIDEsIDIxNCwgMTE4LCAyNTAsIDI0NSwgMSwgMjQzLCAyMDksIDI1MCwgMjQ1LCAxLCAyNDMsIDE0NCwgCisgICAgMjUwLCAyNDUsIDEsIDIxOCwgMTcwLCAyNTAsIDI0NSwgMSwgMjE4LCAxNjksIDI1MCwgMjQ1LCAxLCAyMjksIDg0LCAyNTAsIAorICAgIDI0NSwgMSwgMjM2LCA0MCwgMjUwLCAyNDUsIDEsIDI1MSwgNzIsIDI1MCwgMjQ1LCAxLCAyMTUsIDE2MCwgMjUwLCAyNDUsIAorICAgIDEsIDIxNCwgMTE1LCAyNTAsIDI0NSwgMSwgMjIyLCAxODIsIDI1MCwgMjQ1LCAxLCAyMzEsIDEzNCwgMjUwLCAyNDUsIDEsIAorICAgIDIzMSwgMTMzLCAyNTAsIDI0NSwgMSwgMjMxLCAxMzIsIDI1MCwgMjQ1LCAxLCAyMzEsIDEzMSwgMjUwLCAyNDUsIDEsIDIzMywgCisgICAgNjcsIDI1MCwgMjQ1LCAxLCAyNDUsIDI0MiwgMjUwLCAyNDUsIDEsIDIxNCwgMTE0LCA1NSwgMzIsIDEsIDYxLCA1NSwgMzIsIAorICAgIDEsIDI1MiwgODMsIDU1LCAzMiwgMSwgMjM0LCAxODgsIDU1LCAzMiwgMSwgMjQ4LCA5OCwgNTUsIDMyLCAxLCA3NiwgNTUsIAorICAgIDMyLCAxLCAyMTMsIDI1NSwgNTUsIDMyLCAxLCAyMTAsIDk0LCA1NSwgMzIsIDEsIDI0MSwgMjQ1LCA1NSwgMzIsIDEsIDIxNiwgCisgICAgMTk2LCA1NSwgMzIsIDEsIDc0LCA1NSwgMzIsIDEsIDE3NiwgNTUsIDMyLCAxLCAyNDUsIDE4MiwgNTUsIDMyLCAxLCAyNDUsIAorICAgIDE2NywgNTUsIDMyLCAxLCAyNDUsIDE1OCwgNTUsIDMyLCAxLCAyNDUsIDgzLCA1NSwgMzIsIDEsIDc4LCA1NSwgMzIsIDEsIAorICAgIDIyNSwgMjI0LCA1NSwgMzIsIDEsIDIyMCwgNjUsIDU1LCAzMiwgMSwgMjMzLCAyMjMsIDU1LCAzMiwgMSwgMjQ1LCAxMDAsIAorICAgIDU1LCAzMiwgMSwgMjQ1LCA5MCwgNTUsIDMyLCAxLCAyMTcsIDIzLCA1NSwgMzIsIDEsIDY5LCA1NSwgMzIsIDEsIDI0NSwgCisgICAgMTg1LCA1NSwgMzIsIDEsIDIyNSwgMTM5LCA1NSwgMzIsIDEsIDIzNCwgMTI1LCA1NSwgMzIsIDEsIDI0NSwgMjEwLCA1NSwgCisgICAgMzIsIDEsIDI0NSwgOTIsIDU1LCAzMiwgMSwgMjUwLCAxMzksIDU1LCAzMiwgMSwgMjM2LCA0MCwgNTUsIDMyLCAxLCAyMTQsIAorICAgIDExOCwgNTUsIDMyLCAyMjcsIDIwMiwgMTExLCA1NSwgMzIsIDIyNywgMjAyLCAxOTAsIDU1LCAzMiwgMjI3LCAyMDIsIDIxNiwgCisgICAgMjQ4LCA1NSwgMzIsIDIyNywgMjAyLCAyNDQsIDEyMiwgMjQyLCAxNjAsIDEsIDI1NCwgMjEzLCAyNDIsIDE2MCwgMSwgMjUyLCAKKyAgICAxNzEsIDI0MiwgMTYwLCAxLCAyNDIsIDIxOCwgMjQyLCAxNjAsIDEsIDI0OCwgMjEyLCAyNDIsIDE2MCwgMSwgMjU0LCAyMDksIAorICAgIDI0MiwgMTYwLCAxLCAyMjQsIDgyLCAyNDIsIDE2MCwgMSwgMjM1LCAxNjEsIDI0MiwgMTYwLCAxLCAyNDIsIDQ2LCAyNDIsIAorICAgIDE2MCwgMSwgMjE2LCAxNTksIDI0MiwgMTYwLCAxLCAyNDUsIDE5MSwgMjQyLCAxNjAsIDEsIDIzMywgMTk2LCAyNDIsIDE2MCwgCisgICAgMSwgMjMzLCAxMTksIDI0MiwgMTYwLCAxLCAyMzEsIDE4NCwgMjQyLCAxNjAsIDEsIDIyOSwgMTg5LCAyNDIsIDE2MCwgMSwgCisgICAgMjM1LCAxMjUsIDI0MiwgMTYwLCAxLCAyMTQsIDEzNiwgMjQyLCAxNjAsIDEsIDIyNiwgNzMsIDI0MiwgMTYwLCAxLCAyMjgsIAorICAgIDIwMCwgMjQyLCAxNjAsIDEsIDIyMywgMTY4LCAyNDIsIDE2MCwgMSwgMjIxLCAyMjAsIDI0MiwgMTYwLCAxLCAyMTcsIDUsIAorICAgIDI0MiwgMTYwLCAxLCAyMTEsIDIzNCwgMjQyLCAxNjAsIDEsIDI0NCwgMTg2LCAyNDIsIDE2MCwgMSwgMjM2LCA0NCwgMjQyLCAKKyAgICAxNjAsIDEsIDI0MCwgMjA2LCAyNDIsIDE2MCwgMSwgMjI2LCAxNDMsIDI0MiwgMTYwLCAxLCAyMjgsIDIwNSwgMjQwLCAyMTcsIAorICAgIDIxNCwgMjA5LCAxLCAyNTQsIDE1NSwgMjE0LCAyMDksIDEsIDI1MiwgMzQsIDIxNCwgMjA5LCAxLCAyNDMsIDExNSwgMjE0LCAKKyAgICAyMDksIDEsIDIzNCwgMTM4LCAyMTQsIDIwOSwgMSwgMjQ4LCA2MiwgMjE0LCAyMDksIDEsIDI0MSwgNzUsIDIxNCwgMjA5LCAKKyAgICAxLCAyMTEsIDIyNywgMjE0LCAyMDksIDEsIDIxMCwgODUsIDIxNCwgMjA5LCAxLCAyNDAsIDI0OCwgMjE0LCAyMDksIDEsIAorICAgIDIxNiwgMjMxLCAyMTQsIDIwOSwgMSwgMjEwLCAyMzMsIDIxNCwgMjA5LCAxLCAyMzUsIDAsIDIxNCwgMjA5LCAxLCAyMjAsIAorICAgIDIyLCAyMTQsIDIwOSwgMSwgMjMzLCAxMDQsIDIxNCwgMjA5LCAxLCAyMzEsIDcwLCAyMTQsIDIwOSwgMSwgMjQ4LCAyOSwgCisgICAgMjE0LCAyMDksIDEsIDIyNywgMTk4LCAyMTQsIDIwOSwgMSwgMjEwLCAxMywgMjE0LCAyMDksIDEsIDIyMSwgMjUwLCAyMTQsIAorICAgIDIwOSwgMSwgMjU0LCAyMDUsIDIxNCwgMjA5LCAxLCAyMjQsIDE1MywgMjE0LCAyMDksIDEsIDIyMiwgMjcsIDIxNCwgMjA5LCAKKyAgICAxLCAyMjQsIDM4LCAyMTQsIDIwOSwgMSwgMjIzLCAxNDcsIDIxNCwgMjA5LCAxLCAyMTYsIDIwMCwgMjE0LCAyMDksIDEsIAorICAgIDI0MiwgMjUxLCAyMTQsIDIwOSwgMSwgMTEyLCAyMTQsIDIwOSwgMSwgNzQsIDIxNCwgMjA5LCAxLCA2OSwgMjE0LCAyMDksIAorICAgIDEsIDIxOCwgMTgxLCAyMTQsIDIwOSwgMjExLCAyMDksIDI0NywgMTgwLCA1NSwgMjI1LCAxNzIsIDUsIDYxLCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDc0LCA1NSwgMjI1LCAxNzIsIDUsIDY5LCA1NSwgMjI1LCAxNzIsIDUsIDE3NiwgNTUsIDIyNSwgMTcyLCA1LCAKKyAgICAyMzMsIDIyMywgNTUsIDIyNSwgMTcyLCA1LCAyNDMsIDE0MiwgNTUsIDIyNSwgMTcyLCA1LCAyNDIsIDEyMCwgNTUsIDIyNSwgCisgICAgMTcyLCA1LCAyMTEsIDE2NSwgNTUsIDIyNSwgMTcyLCA1LCAyNTEsIDQxLCA1NSwgMjI1LCAxNzIsIDUsIDIzNSwgMTQ3LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDIzNSwgMTE0LCA1NSwgMjI1LCAxNzIsIDUsIDIxNywgMTA2LCA1NSwgMjI1LCAxNzIsIDUsIAorICAgIDIxNSwgMTE5LCA1NSwgMjI1LCAxNzIsIDUsIDI0OCwgMjI5LCA1NSwgMjI1LCAxNzIsIDUsIDI0OCwgMTEsIDU1LCAyMjUsIAorICAgIDE3MiwgNSwgMjQ2LCA4NiwgNTUsIDIyNSwgMTcyLCA1LCAyMTYsIDIwOSwgNTUsIDIyNSwgMTcyLCA1LCAxOTEsIDU1LCAKKyAgICAyMjUsIDE3MiwgNSwgMjUyLCAxOTksIDU1LCAyMjUsIDE3MiwgNSwgMjQ0LCAyMDQsIDU1LCAyMjUsIDE3MiwgNSwgMTk4LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDIyNywgMjQyLCA1NSwgMjI1LCAxNzIsIDUsIDE4NiwgNTUsIDIyNSwgMTcyLCA1LCAyMzAsIAorICAgIDIzNSwgNTUsIDIyNSwgMTcyLCA1LCAyMzAsIDEwNywgNTUsIDIyNSwgMTcyLCA1LCAxOTIsIDU1LCAyMjUsIDE3MiwgNSwgCisgICAgMjE0LCAyNywgNTUsIDIyNSwgMTcyLCA1LCAyMTMsIDE3NiwgNTUsIDIyNSwgMTcyLCA1LCAyMDUsIDU1LCAyMjUsIDE3MiwgCisgICAgNSwgMjIyLCAxNDIsIDU1LCAyMjUsIDE3MiwgNSwgMjMzLCAxNDEsIDU1LCAyMjUsIDE3MiwgNSwgMjA2LCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDIxMCwgMTE2LCA1NSwgMjI1LCAxNzIsIDUsIDIyMCwgMTA0LCA1NSwgMjI1LCAxNzIsIDUsIDIxOCwgMjI1LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDE2MiwgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIDE5NCwgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIAorICAgIDE5MywgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIDE5MiwgNTUsIDIyNSwgMTcyLCA1LCAyMTEsIDE0MiwgNTUsIDIyNSwgMTcyLCAKKyAgICA1LCAyNDgsIDIwOCwgNTUsIDIyNSwgMTcyLCA1LCAyNDgsIDIwNywgNTUsIDIyNSwgMTcyLCA1LCAyNTIsIDE3OCwgNTUsIAorICAgIDIyNSwgMTcyLCA1LCAyNTEsIDkzLCA1NSwgMjI1LCAxNzIsIDIxMSwgMjA5LCAyNDcsIDE4MCwgNTUsIDIyNSwgMTcyLCA1NCwgCisgICAgMTExLCA1NSwgMjI1LCAxNzIsIDU0LCAxMDUsIDU1LCAyMjUsIDE3MiwgNTQsIDIxNiwgMjQ4LCA1NSwgMjI1LCAxNzIsIDU0LCAKKyAgICAyMTUsIDczLCA1NSwgMjI1LCAxNzIsIDU0LCAyNDAsIDIxNywgMTgxLCA2LCAxLCAyMDAsIDc0LCAxODEsIDYsIDEsIDIwMCwgCisgICAgNzYsIDE4MSwgNiwgMSwgMjAwLCA2MSwgMTgxLCA2LCAxLCAyMDAsIDI1NCwgMjE4LCAxODEsIDYsIDEsIDIwMCwgNzgsIAorICAgIDE4MSwgNiwgMSwgMjAwLCAyMjYsIDE4NywgMTgxLCA2LCAxLCAyMTksIDI1MywgNzQsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIAorICAgIDc2LCAxODEsIDYsIDEsIDIxOSwgMjUzLCA2MSwgMTgxLCA2LCAxLCAyMTksIDI1MywgMjU0LCAyMTgsIDE4MSwgNiwgMSwgCisgICAgMjE5LCAyNTMsIDc4LCAxODEsIDYsIDEsIDIxOSwgMjUzLCAyMjYsIDE4NywgMTgxLCA2LCAxLCAyNTMsIDE3NSwgMTgxLCA2LCAKKyAgICAxLCAyMjYsIDEyMCwgMTgxLCA2LCAxLCAyMTEsIDE5NSwgMTgxLCA2LCAxLCAyMTEsIDQ0LCAxODEsIDYsIDEsIDI0MiwgNjcsIAorICAgIDE4MSwgNiwgMSwgMjI1LCAyMTQsIDE4MSwgNiwgMSwgMjUyLCA3NCwgMTgxLCA2LCAxLCAyMTcsIDEyLCAxODEsIDYsIDEsIAorICAgIDI0OCwgODUsIDE4MSwgNiwgMSwgMjUwLCAxMzYsIDE4MSwgNiwgMSwgMjM1LCAxMzAsIDE4MSwgNiwgMSwgMjM0LCAxOTUsIAorICAgIDE4MSwgNiwgMSwgMjQzLCA5MCwgMTgxLCA2LCAxLCAyNDUsIDIxMCwgMTgxLCA2LCAxLCAyMTMsIDI1MCwgMTgxLCA2LCAxLCAKKyAgICAyNDUsIDY3LCAxODEsIDYsIDEsIDIxNiwgMTk1LCAxODEsIDYsIDEsIDI0NSwgOTAsIDE4MSwgNiwgMSwgMjEwLCA5MiwgCisgICAgMTgxLCA2LCAxLCAyNDUsIDgzLCAxODEsIDYsIDEsIDIxMCwgNzMsIDE4MSwgNiwgMSwgMjQ1LCAxMDAsIDE4MSwgNiwgMSwgCisgICAgMjQ1LCAxODIsIDE4MSwgNiwgMSwgMjQ1LCAxNjcsIDE4MSwgNiwgMSwgMjQ1LCAxNTgsIDE4MSwgNiwgMSwgMjQ1LCAxNDYsIAorICAgIDE4MSwgNiwgMSwgMjI2LCAyMjMsIDE4MSwgNiwgMSwgMjQ1LCA0NiwgMTgxLCA0LCAxLCAyMDAsIDc0LCAxODEsIDQsIDEsIAorICAgIDIwMCwgNzYsIDE4MSwgNCwgMSwgMjAwLCA2MSwgMTgxLCA0LCAxLCAyMDAsIDI1NCwgMjE4LCAxODEsIDQsIDEsIDIwMCwgCisgICAgNzgsIDE4MSwgNCwgMSwgMjAwLCAyMjYsIDE4NywgMTgxLCA0LCAxLCAyMTksIDI1MywgNzQsIDE4MSwgNCwgMSwgMjE5LCAKKyAgICAyNTMsIDc2LCAxODEsIDQsIDEsIDIxOSwgMjUzLCA2MSwgMTgxLCA0LCAxLCAyMTksIDI1MywgMjU0LCAyMTgsIDE4MSwgNCwgCisgICAgMSwgMjE5LCAyNTMsIDc4LCAxODEsIDQsIDEsIDIxOSwgMjUzLCAyMjYsIDE4NywgMTgxLCA0LCAxLCAyNTMsIDE3NSwgMTgxLCAKKyAgICA0LCAxLCAyMjYsIDEyMCwgMTgxLCA0LCAxLCAyMTEsIDE5NSwgMTgxLCA0LCAxLCAyMTEsIDQ0LCAxODEsIDQsIDEsIDI0MiwgCisgICAgNjcsIDE4MSwgNCwgMSwgMjI1LCAyMTQsIDE4MSwgNCwgMSwgMjUyLCA3NCwgMTgxLCA0LCAxLCAyMTcsIDEyLCAxODEsIDQsIAorICAgIDEsIDI0OCwgODUsIDE4MSwgNCwgMSwgMjUwLCAxMzYsIDE4MSwgNCwgMSwgMjM1LCAxMzAsIDE4MSwgNCwgMSwgMjM0LCAKKyAgICAxOTUsIDE4MSwgNCwgMSwgMjQzLCA5MCwgMTgxLCA0LCAxLCAyNDUsIDIxMCwgMTgxLCA0LCAxLCAyMTMsIDI1MCwgMTgxLCAKKyAgICA0LCAxLCAyNDUsIDY3LCAxODEsIDQsIDEsIDIxNiwgMTk1LCAxODEsIDQsIDEsIDI0NSwgOTAsIDE4MSwgNCwgMSwgMjEwLCAKKyAgICA5MiwgMTgxLCA0LCAxLCAyNDUsIDgzLCAxODEsIDQsIDEsIDIxMCwgNzMsIDE4MSwgNCwgMSwgMjQ1LCAxMDAsIDE4MSwgNCwgCisgICAgMSwgMjQ1LCAxODIsIDE4MSwgNCwgMSwgMjQ1LCAxNjcsIDE4MSwgNCwgMSwgMjQ1LCAxNTgsIDE4MSwgNCwgMSwgMjQ1LCAKKyAgICAxNDYsIDE4MSwgNCwgMSwgMjI2LCAyMjMsIDE4MSwgNCwgMSwgMjQ1LCA0NiwgMjIwLCA3MSwgMSwgMjI1LCAyMTIsIDIyMCwgCisgICAgNzEsIDEsIDIxNiwgNiwgMjIwLCA3MSwgMSwgMjM0LCA5NywgMjIwLCA3MSwgMSwgMjQ0LCAxNTUsIDIyMCwgNzEsIDEsIAorICAgIDIxNiwgMTczLCAyMjAsIDcxLCAxLCAyMTksIDYwLCAyMjAsIDcxLCAxLCAyMTgsIDE1LCAyMjAsIDcxLCAxLCAyNTAsIDY5LCAKKyAgICAyMjAsIDcxLCAxLCAyMTEsIDQ2LCAyMjAsIDcxLCAxLCAyNDAsIDIxNiwgMjIwLCA3MSwgMSwgMjUyLCAxMywgMjIwLCA3MSwgCisgICAgMSwgMjQ4LCA5NywgMjIwLCA3MSwgMSwgMjQzLCAxMjgsIDIyMCwgNzEsIDEsIDIxMywgMTIzLCAyMjAsIDcxLCAxLCAyMTYsIAorICAgIDE3NywgMjIwLCA3MSwgMSwgMjEwLCAyMSwgMjIwLCA3MSwgMSwgMjMxLCA5NCwgMjIwLCA3MSwgMSwgMjM1LCA1NSwgMjIwLCAKKyAgICA3MSwgMSwgMjExLCAyMjUsIDIyMCwgNzEsIDEsIDI0MiwgNTUsIDIyMCwgNzEsIDEsIDIzMiwgMTQ4LCAyMjAsIDcxLCAxLCAKKyAgICAyMzAsIDE5NCwgMjIwLCA3MSwgMSwgMjM2LCA0NywgMjIwLCA3MSwgMSwgMjQ1LCAyMDksIDIyMCwgNzEsIDEsIDI1MywgCisgICAgMjM5LCAyMjAsIDcxLCAxLCAyNTUsIDAsIDIyMCwgNzEsIDEsIDIyNiwgMjAwLCAyMjAsIDcxLCAxLCAyMTEsIDIxMiwgMjIwLCAKKyAgICA3MSwgMSwgMjI2LCAxMzQsIDIyMCwgNzEsIDEsIDI1NCwgMjE4LCAyMjAsIDcxLCAxLCAyMjIsIDIxMCwgMjIwLCA3MSwgMSwgCisgICAgMjI3LCAxOTgsIDIyMCwgNzEsIDEsIDI0NSwgMjI1LCAyMjAsIDcxLCAxLCAyNTQsIDIyMywgMjIwLCA3MSwgMSwgMjQwLCAKKyAgICAxMTgsIDIyMCwgNzEsIDEsIDIxNCwgMTYzLCAyMjAsIDcxLCAxLCAyMjcsIDIsIDIyMCwgNzEsIDEsIDIyNiwgMTgwLCAyMjAsIAorICAgIDcxLCAxLCAyMjYsIDIyMiwgMjIwLCA3MSwgMSwgMjUzLCAxNzgsIDIyMCwgNzEsIDEsIDI1NCwgMjcsIDIyMCwgNzEsIDEsIAorICAgIDIyNiwgMTYyLCAyMjAsIDcxLCAxLCAyNTQsIDIwMSwgMjIwLCA3MSwgMSwgMjQ1LCA5NCwgMjIwLCA3MSwgMSwgMjU0LCA1LCAKKyAgICAyMjAsIDcxLCAxLCAyNDUsIDIzNSwgMjIwLCA3MSwgMSwgMjQwLCAxMjUsIDIyMCwgNzEsIDEsIDIxMSwgMTMsIDIyNiwgCisgICAgMTQ1LCAxLCAyNTQsIDE3OSwgMjI2LCAxNDUsIDEsIDI1MiwgMTk5LCAyMjYsIDE0NSwgMSwgMjE3LCAxMDYsIDIyNiwgMTQ1LCAKKyAgICAxLCAyMzUsIDE0NywgMjI2LCAxNDUsIDEsIDIxMSwgMTY1LCAyMjYsIDE0NSwgMSwgMjM0LCAxMzgsIDIyNiwgMTQ1LCAxLCAKKyAgICAyNDgsIDg0LCAyMjYsIDE0NSwgMSwgMjA1LCAyMjYsIDE0NSwgMSwgMjA2LCAyMjYsIDE0NSwgMSwgMjIwLCAyOCwgMjI2LCAKKyAgICAxNDUsIDEsIDI0OCwgMzMsIDIyNiwgMTQ1LCAxLCAyNTAsIDIyMywgMjI2LCAxNDUsIDEsIDI0MywgMTQyLCAyMjYsIDE0NSwgCisgICAgMSwgMjQ0LCAyMDQsIDIyNiwgMTQ1LCAxLCAyMjQsIDg5LCAyMjYsIDE0NSwgMSwgMjM1LCAxNSwgMjI2LCAxNDUsIDEsIAorICAgIDIzMywgMTM2LCAyMjYsIDE0NSwgMSwgMjMwLCAyMDUsIDIyNiwgMTQ1LCAxLCAyMjcsIDE4MiwgMjI2LCAxNDUsIDEsIDIxMiwgCisgICAgMzAsIDIyNiwgMTQ1LCAxLCAxNjIsIDIyNiwgMTQ1LCAxLCAxOTIsIDIyNiwgMTQ1LCAxLCA2MSwgMjI2LCAxNDUsIDEsIDc2LCAKKyAgICAyMjYsIDE0NSwgMSwgNzQsIDIyNiwgMTQ1LCAxLCA3OCwgMjI2LCAxNDUsIDEsIDY5LCAyMjYsIDE0NSwgMSwgMjU1LCA4MiwgCisgICAgMjI2LCAxNDUsIDEsIDI0NSwgMjE3LCAyMjYsIDE0NSwgMSwgMjI2LCAxODcsIDIyNiwgMTQ1LCAyMSwgMjEwLCA4NiwgMjI2LCAKKyAgICAxNDUsIDIxLCAxMTEsIDIyNiwgMTQ1LCAyMSwgMTA1LCAyMjYsIDE0NSwgMjEsIDE1OCwgMjI2LCAxNDUsIDIxLCAxNjEsIAorICAgIDIyNiwgMTQ1LCAyMSwgMTkwLCAyMjYsIDE0NSwgMjEsIDE5NSwgMjI2LCAxNDUsIDIxLCAxOTksIDIyNiwgMTQ1LCAyMSwgCisgICAgMTk2LCAyMjYsIDE0NSwgMjEsIDIwMSwgMjQ5LCA3NSwgMywgNjEsIDI0OSwgNzUsIDMsIDc2LCAyNDksIDc1LCAzLCA3NCwgCisgICAgMjQ5LCA3NSwgMywgNzgsIDI0OSwgNzUsIDMsIDY5LCAyNDksIDc1LCAzLCAyMzUsIDE0NywgMjQ5LCA3NSwgMywgMjM1LCAKKyAgICA3NCwgMjQ5LCA3NSwgMywgMTc2LCAyNDksIDc1LCAzLCAyMzQsIDE4OCwgMjQ5LCA3NSwgMywgMjM0LCA5OCwgMjQ5LCA3NSwgCisgICAgMywgMjM0LCAzNCwgMjQ5LCA3NSwgMywgMjMzLCAyMjMsIDI0OSwgNzUsIDMsIDIzMywgMTQxLCAyNDksIDc1LCAzLCAyMzMsIAorICAgIDY0LCAyNDksIDc1LCAzLCAyMzIsIDI0NywgMjQ5LCA3NSwgMywgMjMyLCAxNjIsIDI0OSwgNzUsIDMsIDIzMiwgMTAzLCAKKyAgICAyNDksIDc1LCAzLCAxODYsIDI0OSwgNzUsIDMsIDIzMSwgOTYsIDI0OSwgNzUsIDMsIDIzMCwgMjM1LCAyNDksIDc1LCAzLCAKKyAgICAyMzAsIDE2NiwgMjQ5LCA3NSwgMywgMjMwLCAxMDcsIDI0OSwgNzUsIDMsIDE5OCwgMjQ5LCA3NSwgMywgMjI5LCAxMTIsIAorICAgIDI0OSwgNzUsIDMsIDIyOCwgMjM4LCAyNDksIDc1LCAzLCAyMjgsIDc5LCAyNDksIDc1LCAzLCAyMjcsIDI0MiwgMjQ5LCA3NSwgCisgICAgMywgMTkxLCAyNDksIDc1LCAzLCAyMjUsIDIyNCwgMjQ5LCA3NSwgMywgMjI1LCAxMTEsIDI0OSwgNzUsIDMsIDIyNSwgMTksIAorICAgIDI0OSwgNzUsIDMsIDIyNCwgMTUzLCAyNDksIDc1LCAzLCAyMDUsIDI0OSwgNzUsIDMsIDIyMywgMTMxLCAyNDksIDc1LCAzLCAKKyAgICAyMjMsIDM4LCAyNDksIDc1LCAzLCAyMjIsIDIxMywgMjQ5LCA3NSwgMywgMjIyLCAxNDIsIDI0OSwgNzUsIDMsIDIwNiwgCisgICAgMjQ5LCA3NSwgMywgMjIxLCAxODMsIDI0OSwgNzUsIDMsIDIxOSwgMTkzLCAyNDksIDc1LCAzLCAyMTksIDYwLCAyNDksIDc1LCAKKyAgICAzLCAyMTgsIDg0LCAyNDksIDc1LCAzLCAyMTcsIDEwNiwgMjQ5LCA3NSwgMywgMjE3LCAyMywgMjQ5LCA3NSwgMywgMjE2LCAKKyAgICAxMTgsIDI0OSwgNzUsIDMsIDExMiwgMjQ5LCA3NSwgMywgMjE1LCAxMTksIDI0OSwgNzUsIDMsIDIxMiwgNjUsIDI0OSwgNzUsIAorICAgIDMsIDIxMiwgMjIsIDI0OSwgNzUsIDMsIDIxMSwgMjUwLCAyNDksIDc1LCAzLCAyMTEsIDIyNywgMjQ5LCA3NSwgMywgMjExLCAKKyAgICAxNjUsIDI0OSwgNzUsIDMsIDIxMSwgMTYyLCAyNDksIDc1LCAzLCAyMTAsIDExNiwgMjQ5LCA3NSwgMywgMjEwLCAyMywgCisgICAgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNTQsIDE3NywgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNTIsIDMzLCAyMzYsIDgsIDI1NCwgCisgICAgMzUsIDEsIDI0MiwgMjA4LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI0OCwgMTk2LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI0MSwgCisgICAgMjQ1LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxMiwgMzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjEwLCA5NywgMjM2LCA4LCAKKyAgICAyNTQsIDM1LCAxLCAyNDEsIDIwMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTYsIDIyNywgMjM2LCA4LCAyNTQsIDM1LCAxLCAKKyAgICAyMTAsIDIzMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMzQsIDIzMSwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMzMsIDk5LCAyMzYsIAorICAgIDgsIDI1NCwgMzUsIDEsIDIzMSwgNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjI3LCAxOTgsIDIzNiwgOCwgMjU0LCAzNSwgMSwgCisgICAgMjIxLCAyNTEsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjUzLCAxNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjI1LCAyMjQsIAorICAgIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjIyLCAyNiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjQsIDM3LCAyMzYsIDgsIDI1NCwgCisgICAgMzUsIDEsIDIyMywgNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjIwLCAyMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTcsIDM3LCAKKyAgICAyMzYsIDgsIDI1NCwgMzUsIDIyMSwgMTc1LCA1MCwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMTExLCAyMzYsIDgsIDI1NCwgMzUsIAorICAgIDU0LCAxMDUsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDE1OCwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMjE2LCAyNDgsIDIzNiwgOCwgCisgICAgMjU0LCAzNSwgNTQsIDIxNSwgNzMsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDEyMywgMjQwLCAyMTcsIDIzNiwgOCwgMjU0LCAKKyAgICAzNSwgNTQsIDEyMywgMjE2LCAxNDgsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDIxNiwgMjQ5LCAyMTYsIDE0OCwgMjI1LCAxMjIsIAorICAgIDEsIDI1NCwgMTc0LCAyMjUsIDEyMiwgMSwgMjUyLCAzNiwgMjI1LCAxMjIsIDEsIDI0MywgMTE2LCAyMjUsIDEyMiwgMSwgCisgICAgMjQ4LCA2NCwgMjI1LCAxMjIsIDEsIDI0MSwgMjQ1LCAyMjUsIDEyMiwgMSwgMjEyLCAzNywgMjI1LCAxMjIsIDEsIDIxMCwgCisgICAgMTEwLCAyMjUsIDEyMiwgMSwgMjQxLCAyMDQsIDIyNSwgMTIyLCAxLCAyMTYsIDIzMSwgMjI1LCAxMjIsIDEsIDIxMCwgMjMzLCAKKyAgICAyMjUsIDEyMiwgMSwgMjM1LCAwLCAyMjUsIDEyMiwgMSwgMjMzLCAxMDUsIDIyNSwgMTIyLCAxLCAyMzEsIDcwLCAyMjUsIAorICAgIDEyMiwgMSwgMjI3LCAxOTgsIDIyNSwgMTIyLCAxLCAyMjAsIDE0NiwgMjI1LCAxMjIsIDEsIDI1NCwgMjA1LCAyMjUsIDEyMiwgCisgICAgMSwgMjI1LCAyMjQsIDIyNSwgMTIyLCAxLCAyMjIsIDI3LCAyMjUsIDEyMiwgMSwgMjI0LCA0MiwgMjI1LCAxMjIsIDEsIAorICAgIDIyMiwgMTkxLCAyMjUsIDEyMiwgMSwgMjIwLCAyMiwgMjI1LCAxMjIsIDEsIDIxNywgNDIsIDIyNSwgMTIyLCA1NCwgMTExLCAKKyAgICAyMjUsIDEyMiwgNTQsIDIxNiwgMjQ4LCAyMjUsIDEyMiwgNTQsIDIxNSwgNzMsIDIyNSwgMTIyLCA1NCwgMTIzLCAyNDAsIAorICAgIDIxNywgMjI1LCAxMjIsIDU0LCAxMDUsIDIyNSwgMTIyLCA1NCwgMTU4LCAyMjUsIDEyMiwgMjExLCAyMDksIDIyMCwgMTM5LCAKKyAgICAyMzIsIDY0LCAxLCA2MSwgMjMyLCA2NCwgMSwgMjUzLCAxNjYsIDIzMiwgNjQsIDEsIDI0MywgMjA5LCAyMzIsIDY0LCAxLCAKKyAgICAyNDksIDY4LCAyMzIsIDY0LCAxLCA3NiwgMjMyLCA2NCwgMSwgMjE0LCAxMDUsIDIzMiwgNjQsIDEsIDc0LCAyMzIsIDY0LCAKKyAgICAxLCAyMTEsIDExNywgMjMyLCA2NCwgMSwgMjM1LCAyOSwgMjMyLCA2NCwgMSwgMTU2LCAyMzIsIDY0LCAxLCAxOTQsIDIzMiwgCisgICAgNjQsIDEsIDIzMCwgMzAsIDIzMiwgNjQsIDEsIDc4LCAyMzIsIDY0LCAxLCAxNTMsIDIzMiwgNjQsIDEsIDIxOCwgMjI4LCAKKyAgICAyMzIsIDY0LCAxLCAyMTcsIDE1MywgMjMyLCA2NCwgMSwgNjksIDIzMiwgNjQsIDEsIDI0NSwgMTQsIDIzMiwgNjQsIDEsIAorICAgIDIyNCwgOTksIDIzMiwgNjQsIDEsIDIyMiwgOTMsIDIzMiwgNjQsIDEsIDIxNSwgMTYwLCAyMzIsIDY0LCAxLCAyNTQsIDEzMSwgCisgICAgMjMyLCA2NCwgMSwgMjQ1LCAxNTgsIDIzMiwgNjQsIDEsIDIzMiwgNjcsIDIzMiwgNjQsIDEsIDIyOCwgMTE2LCAyMzIsIDY0LCAKKyAgICAxLCAyNTEsIDc0LCAyMzIsIDY0LCAyMTUsIDIyMywgNzksIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCA2MSwgMjMxLCA1MywgCisgICAgMjQxLCAxODEsIDEsIDc2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgNzQsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCA3OCwgMjMxLCAKKyAgICA1MywgMjQxLCAxODEsIDEsIDE5MiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxMiwgNjUsIDIzMSwgNTMsIDI0MSwgMTgxLCAKKyAgICAxLCAyNTIsIDE5OSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDI1MiwgMTk4LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTkxLCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTg2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTk4LCAyMzEsIDUzLCAyNDEsIDE4MSwgCisgICAgMSwgMjI5LCAyMzMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjksIDExMiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyOSwgCisgICAgMTExLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjA1LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjIzLCAxOTAsIDIzMSwgNTMsIAorICAgIDI0MSwgMTgxLCAxLCAyMzMsIDE0MSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIzNCwgMTM4LCAyMzEsIDUzLCAyNDEsIDE4MSwgCisgICAgMSwgMjQxLCAxOTYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMDYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjIsIDM1LCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjIxLCAxODMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxNzYsIDIzMSwgNTMsIDI0MSwgCisgICAgMTgxLCAxLCAyMjQsIDkxLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjE3LCAxMDYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAKKyAgICAyMTcsIDEwNSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxNywgMjMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMTcsIDIyLCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTEyLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjQ4LCAyMjksIDIzMSwgNTMsIDI0MSwgCisgICAgMTgxLCAxNiwgMjEzLCAxNzAsIDIzMSwgNTMsIDI0MSwgMTgxLCAxNiwgMjEzLCAxNjksIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAKKyAgICA2MSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDc2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgNzQsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCA3OCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5MiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIxMiwgNjUsIAorICAgIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNTIsIDE5OSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5MSwgMjMxLCA1MywgMjQ5LCAKKyAgICAxMDIsIDEsIDE4NiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5OCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIyOSwgMTEyLCAKKyAgICAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjA1LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjMzLCAxNDEsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCAyMzQsIDEzOCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDI0MSwgMTk2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgCisgICAgMjA2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjU0LCAzMSwgMjA2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjIxLCAxODMsIAorICAgIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAxNzYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMjQsIDkxLCAyMzEsIDUzLCAyNDksIAorICAgIDEwMiwgMSwgMjE3LCAxMDYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMTcsIDIzLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgCisgICAgMTEyLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjQ4LCAyMjksIDIzMSwgNTMsIDI0OSwgMTAyLCAyMzIsIDE1MSwgMjIyLCAKKyAgICAyMTksIDIzMSwgNTMsIDI0OSwgMTAyLCAyMzIsIDE1MSwgMjM2LCAxMywgMjM0LCAxMjYsIDEsIDYxLCAyMzQsIDEyNiwgMjUsIAorICAgIDUsIDc0LCAyMzQsIDEyNiwgMjUsIDUsIDY5LCAyMzQsIDEyNiwgMjUsIDUsIDE0OSwgMTUzLCAyMzQsIDEyNiwgMjUsIDUsIAorICAgIDc2LCAyMzQsIDEyNiwgMjUsIDUsIDc4LCAyMzQsIDEyNiwgMjUsIDIzMywgMjksIDc5LCAyMzQsIDEyNiwgNSwgNTIsIDIyMiwgCisgICAgMjM3LCA1MSwgMjM0LCAxMjYsIDUsIDI1NCwgODMsIDIzNCwgMTI2LCA1LCAyMTMsIDE0NywgMjM0LCAxMjYsIDEsIDE3NiwgCisgICAgMjM0LCAxMjYsIDEsIDIzNCwgMTM4LCAyMzQsIDEyNiwgMSwgMjQzLCAxNDIsIDIzNCwgMTI2LCAxLCAyNDMsIDAsIDIzNCwgCisgICAgMTI2LCAxLCAyNTEsIDQxLCAyMzQsIDEyNiwgMSwgMjUwLCAxNjUsIDIzNCwgMTI2LCAxLCAyMzUsIDE0NywgMjM0LCAxMjYsIAorICAgIDEsIDIyNywgMTY5LCAyMzQsIDEyNiwgMSwgMjE1LCAxNTcsIDIzNCwgMTI2LCAxLCAyMTUsIDE0NSwgMjM0LCAxMjYsIDEsIAorICAgIDI0OCwgMTQzLCAyMzQsIDEyNiwgMSwgMjQ4LCAxMjcsIDIzNCwgMTI2LCAxLCAyMjgsIDExNSwgMjM0LCAxMjYsIDEsIDIxNywgCisgICAgMTA2LCAyMzQsIDEyNiwgMSwgMjE2LCAyMDksIDIzNCwgMTI2LCAxLCAyNDgsIDIyOSwgMjM0LCAxMjYsIDEsIDI0OCwgMzMsIAorICAgIDIzNCwgMTI2LCAxLCAxOTgsIDIzNCwgMTI2LCAxLCAxOTEsIDIzNCwgMTI2LCAxLCAyMjUsIDE1MCwgMjM0LCAxMjYsIDEsIAorICAgIDI1MiwgMTk5LCAyMzQsIDEyNiwgMSwgMjUyLCAyNiwgMjM0LCAxMjYsIDEsIDE4NiwgMjM0LCAxMjYsIDEsIDE5MiwgMjM0LCAKKyAgICAxMjYsIDEsIDIwNSwgMjM0LCAxMjYsIDEsIDIzMywgMTQxLCAyMzQsIDEyNiwgMSwgMjE0LCAyNywgMjM0LCAxMjYsIDEsIAorICAgIDIyMCwgMTA0LCAyMzQsIDEyNiwgMSwgMjE4LCAyMjUsIDIzNCwgMTI2LCAxLCAyMDYsIDIzNCwgMTI2LCAxLCAyMTAsIDExNiwgCisgICAgMjM0LCAxMjYsIDEsIDE2MiwgMjM0LCAxMjYsIDEsIDIzNCwgNTIsIDIzNCwgMTI2LCAxLCAyMTUsIDEyNSwgMjM0LCAxMjYsIAorICAgIDUsIDI1MiwgMTQ5LCA0OCwgMjM0LCAxMjYsIDUsIDI1MCwgMjI5LCAyMzQsIDEyNiwgNSwgNTksIDUxLCAyMzQsIDEyNiwgCisgICAgMjEzLCAxNTIsIDIzNCwgMTI2LCAyMSwgMTExLCAyMzQsIDEyNiwgMjEsIDEwNSwgMjM0LCAxMjYsIDIxLCAxNTgsIDIzNCwgCisgICAgMTI2LCAyMSwgMTYxLCAyMzQsIDEyNiwgNTQsIDIxNiwgMjQ4LCAyMzQsIDEyNiwgNTQsIDIxNSwgNzMsIDIzNCwgMTI2LCAKKyAgICA1NCwgMTIzLCAyNDAsIDIxNywgMjM0LCAxMjYsIDU0LCAxMjMsIDIxNiwgMTQ4LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDI0NywgCisgICAgMTI4LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDQsIDI1MCwgNDMsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjUwLCA0MywgMjM0LCAKKyAgICAxMjYsIDIyNCwgMTQ0LCAyNDksIDE0NSwgMTMwLCAyMzQsIDEyNiwgMjI0LCAxNDQsIDIzMSwgMTg1LCAyMzQsIDEyNiwgCisgICAgMjI0LCAxNDQsIDIzMiwgMTIxLCAyMzQsIDEyNiwgMjI0LCAxNDQsIDI0OCwgMTg2LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDUyLCAKKyAgICAyNDgsIDE4NiwgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyMzIsIDIxMywgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MSwgCisgICAgMjQ1LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjMzLCA5OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MSwgMjAyLCAKKyAgICA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjMxLCA3MCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyNCwgMzcsIDU1LCAKKyAgICAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTIsIDMwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjIwLCAyMiwgNTUsIDIxOSwgCisgICAgMzAsIDI1NCwgNDYsIDEsIDIyMywgNzAsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNTIsIDMzLCA1NSwgMjE5LCAzMCwgCisgICAgMjU0LCA0NiwgMSwgMjE3LCAzNywgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyMSwgMjI4LCA1NSwgMjE5LCAzMCwgMjU0LCAKKyAgICA0NiwgMSwgMjM0LCAyMzEsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjcsIDE5OCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIAorICAgIDEsIDIzNCwgMTIyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjIyLCAyNiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIAorICAgIDIyMSwgMjUxLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQ0LCAxNjIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAKKyAgICAyNTQsIDE3OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI1MywgMTY5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgCisgICAgMjQ4LCAzMCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MiwgMjA4LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQ4LCAKKyAgICAxOTYsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDIsIDI0NSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxNiwgCisgICAgMjI3LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjEwLCA5NiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0OCwgMjcsIAorICAgIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTAsIDIzMiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxNiwgMTk4LCA1NSwgCisgICAgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjE2LCAxNzksIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCA1NCwgMTExLCA1NSwgMjE5LCAKKyAgICAzMCwgMjU0LCA0NiwgNTQsIDI0NCwgMTIyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMTMyLCAyMzUsIDI0NSwgMjUzLCAxODAsIAorICAgIDEsIDYxLCAyNTMsIDE4MCwgMSwgMjU1LCA4MiwgMjUzLCAxODAsIDEsIDI1NCwgODEsIDI1MywgMTgwLCAxLCAyNTUsIDQxLCAKKyAgICAyNTMsIDE4MCwgMSwgMjU0LCAxMzEsIDI1MywgMTgwLCAxLCAyNTUsIDQyLCAyNTMsIDE4MCwgMSwgMjU0LCAyNTIsIDI1MywgCisgICAgMTgwLCAxLCAyNTQsIDI0OCwgMjUzLCAxODAsIDEsIDc2LCAyNTMsIDE4MCwgMSwgMjQ1LCAyMTcsIDI1MywgMTgwLCAxLCAKKyAgICA3OCwgMjUzLCAxODAsIDEsIDIyNiwgMTg3LCAyNTMsIDE4MCwgMSwgNzQsIDI1MywgMTgwLCAxLCAyMzYsIDQwLCAyNTMsIAorICAgIDE4MCwgMSwgNjksIDI1MywgMTgwLCAxLCAyMTQsIDExOCwgMjUzLCAxODAsIDEsIDIzNCwgMTg4LCAyNTMsIDE4MCwgMSwgCisgICAgMjExLCAxNjIsIDI1MywgMTgwLCAxLCAyMTEsIDEyOCwgMjUzLCAxODAsIDEsIDIxMSwgMTM3LCAyNTMsIDE4MCwgMSwgMjQzLCAKKyAgICA2OSwgMjUzLCAxODAsIDEsIDI0MywgMzEsIDI1MywgMTgwLCAxLCAyNDIsIDI0MywgMjUzLCAxODAsIDEsIDI1MCwgMTk4LCAKKyAgICAyNTMsIDE4MCwgMSwgMjM1LCAxMzIsIDI1MywgMTgwLCAxLCAyMTcsIDIzLCAyNTMsIDE4MCwgMSwgMjE2LCAxOTYsIDI1MywgCisgICAgMTgwLCAxLCAyNDgsIDk4LCAyNTMsIDE4MCwgMSwgMjQ4LCAyNSwgMjUzLCAxODAsIDEsIDIxNSwgMTUyLCAyNTMsIDE4MCwgCisgICAgMSwgMjI1LCAyMjQsIDI1MywgMTgwLCAxLCAyNDQsIDE2MiwgMjUzLCAxODAsIDEsIDI1MiwgODMsIDI1MywgMTgwLCAxLCAKKyAgICAyNTIsIDIyLCAyNTMsIDE4MCwgMSwgMjI5LCA2OSwgMjUzLCAxODAsIDEsIDIyOCwgMjQ0LCAyNTMsIDE4MCwgMSwgMjI4LCAKKyAgICAyNDUsIDI1MywgMTgwLCAxLCAyMjksIDExMiwgMjUzLCAxODAsIDEsIDIyNywgMTYwLCAyNTMsIDE4MCwgMSwgMjI4LCAxMTAsIAorICAgIDI1MywgMTgwLCAxLCAyMzEsIDk2LCAyNTMsIDE4MCwgMSwgMjQxLCAxMjMsIDI1MywgMTgwLCAxLCAyMTAsIDE2NiwgMjUzLCAKKyAgICAxODAsIDEsIDIxMSwgNDcsIDI1MywgMTgwLCAxLCAyMTMsIDI1NSwgMjUzLCAxODAsIDEsIDIyMywgMTMxLCAyNTMsIDE4MCwgCisgICAgMSwgMjMzLCA2NCwgMjUzLCAxODAsIDEsIDIyMSwgMTgzLCAyNTMsIDE4MCwgMSwgMjEwLCA5NCwgMjUzLCAxODAsIDEsIAorICAgIDIyMCwgNjUsIDI1MywgMTgwLCAxLCAyMTAsIDc0LCAyNTMsIDE4MCwgMSwgMjE5LCAyMDAsIDI1MywgMTgwLCAxLCAyMTgsIAorICAgIDE5NSwgMjUzLCAxODAsIDEsIDI0MSwgMjQ1LCAyNTMsIDE4MCwgMjU1LCAzMCwgNzksIDIxNiwgODAsIDExMywgMTcwLCAKKyAgICAxMTUsIDEyMywgNTksIDIyNCwgMTQzLCA0LCAxMTMsIDE3MCwgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgMjMzLCA5MSwgCisgICAgMTEzLCAxNzAsIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDIzMywgOTEsIDEyMywgNTksIDExNSwgMTEzLCAxNzAsIDIyNCwgCisgICAgMTQzLCAyMzMsIDkxLCAxMTMsIDIyMiwgMjM1LCAxMTUsIDEyMywgMjIyLCAyMzcsIDIyNCwgMTQzLCAyMzMsIDkxLCAxMjMsIAorICAgIDIyMiwgMjM3LCAxMTUsIDExMywgMjIyLCAyMzUsIDIyNCwgMTQzLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNTQsIDE3NywgCisgICAgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjUyLCAzMywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjQyLCAyMDgsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDEsIDI0OCwgMTk2LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNDEsIDI0NSwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgCisgICAgMjEyLCAzMCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjEwLCA5NywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjQxLCAyMDIsIAorICAgIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxNiwgMjI3LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTAsIDIzMiwgMjM1LCAyMjUsIAorICAgIDIyNiwgMiwgMSwgMjM0LCAyMzEsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIzMywgOTksIDIzNSwgMjI1LCAyMjYsIDIsIDEsIAorICAgIDIzMSwgNzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyNywgMTk4LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjEsIDI1MSwgCisgICAgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjUzLCAxNzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyNSwgMjI0LCAyMzUsIDIyNSwgCisgICAgMjI2LCAyLCAxLCAyMjIsIDI2LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjQsIDM3LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAKKyAgICAyMjMsIDcwLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjAsIDIyLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTcsIDM3LCAyMzUsIAorICAgIDIyNSwgMjI2LCAyLCA1NCwgMTExLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTA1LCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgCisgICAgMTU4LCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTYxLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMjE2LCAyNDgsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDU0LCAyMTUsIDczLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTIzLCAyNDAsIDIxNywgMjM1LCAyMjUsIDIyNiwgCisgICAgMiwgNTQsIDEyMywgMjE2LCAxNDgsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNTQsIDE3NywgMjM1LCAyMjUsIDIyNiwgNzYsIAorICAgIDEsIDI1MiwgMzMsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNDIsIDIwOCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0OCwgCisgICAgMTk2LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQxLCAyNDUsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMTIsIDI5LCAyMzUsIAorICAgIDIyNSwgMjI2LCA3NiwgMSwgMjEwLCA5NywgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0MSwgMjAyLCAyMzUsIDIyNSwgMjI2LCAKKyAgICA3NiwgMSwgMjE2LCAyMjcsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMTAsIDIzMiwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIAorICAgIDIzNCwgMjMxLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjMzLCA5OSwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIzMSwgNjksIAorICAgIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMjcsIDE5OCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIyMSwgMjUxLCAyMzUsIDIyNSwgCisgICAgMjI2LCA3NiwgMSwgMjI1LCAyMjQsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMjIsIDI2LCAyMzUsIDIyNSwgMjI2LCA3NiwgCisgICAgMSwgMjIwLCAyMiwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIxNywgMzcsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTExLCAKKyAgICAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDEwNSwgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxNTgsIDIzNSwgMjI1LCAyMjYsIAorICAgIDc2LCA1NCwgMTYxLCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDIxNiwgMjQ4LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDIxNSwgCisgICAgNzMsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTIzLCAyNDAsIDIxNywgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMjMsIAorICAgIDIxNiwgMTQ4LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgNjEsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDYxLCA1NSwgMjAyLCAxLCAKKyAgICAyMTEsIDM3LCAyNTQsIDI1MiwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDc0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCA3NCwgNTUsIAorICAgIDIwMiwgMSwgMjExLCAzNywgNzYsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCA3OCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgCisgICAgMjM4LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMjYsIDIzOCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NSwgMzQsIDU1LCAKKyAgICAyMDIsIDEsIDIxMSwgMzcsIDI1NSwgMzQsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI1MSwgNTUsIDIwMiwgMSwgCisgICAgMjExLCAzNywgMjU0LCAyNTEsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDIyNSwgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjU0LCAyMjUsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI0NiwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAyNDYsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTUsIDgsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NSwgOCwgNTUsIDIwMiwgMSwgCisgICAgMjI2LCAxNTMsIDI1NCwgMjUwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAyMCwgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjQ1LCAyMCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1MywgMTc1LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTMsIDE3NSwgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjMzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDIzMywgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI1NCwgMjQ0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDI0NCwgNTUsIDIwMiwgMSwgMjI2LCAKKyAgICAxNTMsIDIyNiwgMjM3LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMjYsIDIzNywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgCisgICAgMTg3LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDE4NywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjQzLCA1NSwgCisgICAgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNjksIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE2NywgNTUsIDIwMiwgMSwgCisgICAgMjI2LCAxNTMsIDI1NCwgMTMxLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyNDEsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI1NCwgMjQxLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxMzksIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTM5LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNTUsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTU1LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjQ1LCAxMjYsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTI2LCA1NSwgMjAyLCAxLCAyMTEsIAorICAgIDM3LCAyNTQsIDEyMywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTQ2LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIAorICAgIDI0MCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTE2LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAxNzksIDU1LCAKKyAgICAyMDIsIDEsIDIyNiwgMTUzLCAyNDAsIDEyMCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMjIzLCA1NSwgMjAyLCAxLCAKKyAgICAyMTEsIDM3LCAyNDUsIDIyMywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgNTMsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI1NCwgNTMsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMzUsIDE4OCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjM1LCAxODgsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMjYsIDE2MywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjI2LCAxNjMsIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNTQsIDQ5LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDQ5LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgCisgICAgMjU0LCAyMzksIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTMsIDI0NSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjM3LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjUzLCAyMzksIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1MywgMjM5LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjQ1LCA4MywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCA4MywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIAorICAgIDI1MywgMjE0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTMsIDIxNCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjM0LCAKKyAgICA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDIzNCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgMTQ0LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjUyLCAxMzMsIDIyMiwgMTI5LCAyMSwgMTExLCAyMjIsIDEyOSwgMjEsIDEwNSwgMjIyLCAxMjksIAorICAgIDIxLCAxNTgsIDIyMiwgMTI5LCAyMSwgMTYxLCAyMjIsIDEyOSwgMjEsIDE5MCwgMjIyLCAxMjksIDIxLCAxOTUsIDIyMiwgCisgICAgMTI5LCAyMSwgMTk5LCAyMjIsIDEyOSwgMjEsIDE5NiwgMjIyLCAxMjksIDIxLCAyMDEsIDIyMiwgMTI5LCA1NCwgMjE2LCAKKyAgICAyNDgsIDIyMiwgMTI5LCA1NCwgMjE1LCA3MywgMjIyLCAxMjksIDU0LCAyMTYsIDE2MywgMjIyLCAxMjksIDU0LCAyNDQsIAorICAgIDIzLCAyMjIsIDEyOSwgNTQsIDI0NCwgMTIyLCAyMjIsIDEyOSwgNTQsIDIxOSwgMTEzLCAyMjIsIDEyOSwgNTQsIDIyMCwgCisgICAgMTE4LCAyMjIsIDEyOSwgNTQsIDI0NSwgMTkyLCAyMjIsIDEyOSwgNTQsIDIyOCwgMjAwLCAyMjIsIDEyOSwgNTQsIDEyMywgCisgICAgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMTEzLCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAxMzQsIDI0MCwgMjE3LCAyMjIsIAorICAgIDEyOSwgNTQsIDI0NCwgMTksIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDI0NCwgODksIDI0MCwgMjE3LCAyMjIsIDEyOSwgCisgICAgNTQsIDIxOSwgMTI3LCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAyMjAsIDEyNCwgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgCisgICAgMjQ1LCAyMDEsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDIyOCwgMjA1LCAyNDAsIDIxNywgMjIyLCAxMjksIDI0NCwgMTAsIAorICAgIDEyMywgMjQyLCAzNCwgMjIyLCAxMjksIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMjIyLCAxMjksIDI0NCwgMTAsIDEyMywgCisgICAgMjE2LCAxNjksIDIyMiwgMTI5LCAyNDQsIDEwLCAxMTMsIDIxNiwgMTY3LCAxMTgsIDUsIDI1MSwgNywgMTE4LCA1LCAyNTQsIAorICAgIDgzLCAxMTgsIDUsIDIxMywgMTQ3LCAxMTgsIDUsIDIzNSwgMTA4LCAxMTgsIDUsIDIxNCwgMTYxLCAxMTgsIDEsIDYxLCAKKyAgICAxMTgsIDEsIDI1NSwgODIsIDExOCwgMSwgNzQsIDExOCwgMSwgMjM2LCA0MCwgMTE4LCAxLCA2OSwgMTE4LCAxLCAyMTQsIAorICAgIDExOCwgMTE4LCAxLCAxNDksIDE1MywgMTE4LCAxLCAxNDksIDIyMiwgMTgyLCAxMTgsIDEsIDE0OSwgMTU2LCAxMTgsIDEsIAorICAgIDE0OSwgMjMyLCAxOTEsIDExOCwgMSwgNzYsIDExOCwgMSwgMjU0LCAyMTAsIDExOCwgMSwgNzgsIDExOCwgMSwgMjUzLCAKKyAgICAyMDAsIDExOCwgMSwgMTc2LCAxMTgsIDEsIDIzNCwgMTM4LCAxMTgsIDEsIDI0MywgMTQyLCAxMTgsIDEsIDI0MywgMCwgCisgICAgMTE4LCAxLCAyMjksIDgyLCAxMTgsIDEsIDI1MSwgNDEsIDExOCwgMSwgMjUwLCAxNjUsIDExOCwgMSwgMjM1LCAxNDcsIAorICAgIDExOCwgMSwgMjM1LCAxMjAsIDExOCwgMSwgMjI3LCAxNjksIDExOCwgMSwgMjE1LCAxNTcsIDExOCwgMSwgMjE1LCAxNDUsIAorICAgIDExOCwgMSwgMjQ4LCAxNDMsIDExOCwgMSwgMjQ4LCAxMjcsIDExOCwgMSwgMjI4LCAxMTUsIDExOCwgMSwgMjE3LCAxMDYsIAorICAgIDExOCwgMSwgMjE2LCAyMDksIDExOCwgMSwgMjQ4LCAyMjksIDExOCwgMSwgMjQ4LCAzMywgMTE4LCAxLCAxOTgsIDExOCwgMSwgCisgICAgMTkxLCAxMTgsIDEsIDIyNSwgMTUwLCAxMTgsIDEsIDI1MiwgMTk5LCAxMTgsIDEsIDI1MiwgMjYsIDExOCwgMSwgMTg2LCAKKyAgICAxMTgsIDEsIDE5MiwgMTE4LCAxLCAyMDUsIDExOCwgMSwgMjMzLCAxNDEsIDExOCwgMSwgMjE0LCAyNywgMTE4LCAxLCAyMjAsIAorICAgIDEwNCwgMTE4LCAxLCAyMTgsIDIyNSwgMTE4LCAxLCAyMDYsIDExOCwgMSwgMTYyLCAxMTgsIDEsIDIzMiwgMTkwLCAxMTgsIAorICAgIDEsIDU1LCAzNiwgMjMyLCAxODEsIDExOCwgMSwgNTUsIDM2LCAyMjIsIDE4MSwgMTE4LCAxLCA1NSwgMzYsIDIyOCwgOTcsIAorICAgIDExOCwgMjUsIDUsIDI1NSwgODIsIDExOCwgMjUsIDUsIDI1MiwgMjMsIDI1NSwgODIsIDExOCwgMjUsIDUsIDc0LCAxMTgsIAorICAgIDI1LCA1LCAyMzYsIDQwLCAxMTgsIDI1LCA1LCA2OSwgMTE4LCAyNSwgNSwgMjE0LCAxMTgsIDExOCwgMjUsIDUsIDE0OSwgCisgICAgMTUzLCAxMTgsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxMTgsIDI1LCA1LCAxNDksIDE1NiwgMTE4LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTE4LCAyNSwgNSwgNzYsIDExOCwgMjUsIDUsIDI1NCwgMjEwLCAxMTgsIDI1LCA1LCA3OCwgMTE4LCAyNSwgCisgICAgNSwgMjUzLCAyMDAsIDExOCwgMjEzLCAxNTIsIDExOCwgMjQ4LCAxODYsIDExOCwgNTIsIDI0OCwgMTg2LCAxMTgsIDIyNCwgCisgICAgMTQ0LCAyNDcsIDEyOCwgMTE4LCAyMjQsIDE0NCwgNTIsIDI0NywgMTI4LCAxMTgsIDIyNCwgMTQ0LCAyMzIsIDIxOSwgMTE4LCAKKyAgICAyMjQsIDE0NCwgMjQ5LCAxNDUsIDEzMCwgMTE4LCAyMjQsIDE0NCwgMjMyLCAxMjEsIDExOCwgNTQsIDExMSwgMTE4LCA1NCwgCisgICAgMTA1LCAxMTgsIDU0LCAxNTgsIDExOCwgNTQsIDE2MSwgMTE4LCA1NCwgMTkwLCAxMTgsIDU0LCAxOTUsIDExOCwgNTQsIAorICAgIDE5OSwgMTE4LCA1NCwgMTk2LCAxMTgsIDU0LCAyMDEsIDExOCwgNTQsIDIxNiwgMjQ4LCAxMTgsIDU0LCAyMTUsIDczLCAKKyAgICAxMTgsIDU0LCAyMTYsIDE2MywgMTE4LCA1NCwgMjQ0LCAyMywgMTE4LCA1NCwgMjQ0LCAxMjIsIDExOCwgNTQsIDIxOSwgCisgICAgMTEzLCAxMTgsIDU0LCAyMjAsIDExOCwgMTE4LCA1NCwgMjQ1LCAxOTIsIDExOCwgNTQsIDIyOCwgMjAwLCAxMTgsIDU0LCAKKyAgICAxMjMsIDI0MCwgMjE3LCAxMTgsIDU0LCAxMjMsIDIxNiwgMTQ4LCAxMTgsIDIxLCAyMTAsIDg2LCAxMTgsIDIxLCAxMTEsIAorICAgIDExOCwgMjEsIDEwNSwgMTE4LCAyMSwgMTU4LCAxMTgsIDIxLCAxNjEsIDExOCwgMjEsIDE5MCwgMTE4LCAyMSwgMTk1LCAKKyAgICAxMTgsIDIxLCAxOTksIDExOCwgMjEsIDE5NiwgMTE4LCAyMSwgMjAxLCAyMzQsIDI1MCwgNSwgMjUxLCA3LCAyMzQsIDI1MCwgCisgICAgNSwgMjU0LCA4MywgMjM0LCAyNTAsIDUsIDIxMywgMTQ3LCAyMzQsIDI1MCwgMSwgNjEsIDIzNCwgMjUwLCAxLCAyNTUsIDgyLCAKKyAgICAyMzQsIDI1MCwgMSwgNzQsIDIzNCwgMjUwLCAxLCAyMzYsIDQwLCAyMzQsIDI1MCwgMSwgNjksIDIzNCwgMjUwLCAxLCAyMTQsIAorICAgIDExOCwgMjM0LCAyNTAsIDEsIDc2LCAyMzQsIDI1MCwgMSwgMjU0LCAyMTAsIDIzNCwgMjUwLCAxLCA3OCwgMjM0LCAyNTAsIAorICAgIDEsIDI1MywgMjAwLCAyMzQsIDI1MCwgMSwgMTc2LCAyMzQsIDI1MCwgMSwgMjM0LCAxMzgsIDIzNCwgMjUwLCAxLCAyNDMsIAorICAgIDE0MiwgMjM0LCAyNTAsIDEsIDI0MywgMCwgMjM0LCAyNTAsIDEsIDIyOSwgODIsIDIzNCwgMjUwLCAxLCAyNTEsIDQxLCAKKyAgICAyMzQsIDI1MCwgMSwgMjUwLCAxNjUsIDIzNCwgMjUwLCAxLCAyMzUsIDE0NywgMjM0LCAyNTAsIDEsIDIzNSwgMTIwLCAyMzQsIAorICAgIDI1MCwgMSwgMjI3LCAxNjksIDIzNCwgMjUwLCAxLCAyMTUsIDE1NywgMjM0LCAyNTAsIDEsIDIxNSwgMTQ1LCAyMzQsIDI1MCwgCisgICAgMSwgMjQ4LCAxNDMsIDIzNCwgMjUwLCAxLCAyNDgsIDEzMiwgMjM0LCAyNTAsIDEsIDI0OCwgMTI3LCAyMzQsIDI1MCwgMSwgCisgICAgMjIzLCA0MiwgMjM0LCAyNTAsIDEsIDIyOCwgMTE1LCAyMzQsIDI1MCwgMSwgMjE3LCAxMDYsIDIzNCwgMjUwLCAxLCAyMTYsIAorICAgIDIwOSwgMjM0LCAyNTAsIDEsIDI0OCwgMjI5LCAyMzQsIDI1MCwgMSwgMjQ4LCAzMywgMjM0LCAyNTAsIDEsIDE5OCwgMjM0LCAKKyAgICAyNTAsIDEsIDE5MSwgMjM0LCAyNTAsIDEsIDIyNSwgMTUwLCAyMzQsIDI1MCwgMSwgMjUyLCAxOTksIDIzNCwgMjUwLCAxLCAKKyAgICAyNTIsIDI2LCAyMzQsIDI1MCwgMSwgMTg2LCAyMzQsIDI1MCwgMSwgMTkyLCAyMzQsIDI1MCwgMSwgMjA1LCAyMzQsIDI1MCwgCisgICAgMSwgMjMzLCAxNDEsIDIzNCwgMjUwLCAxLCAyMTQsIDI3LCAyMzQsIDI1MCwgMSwgMjIwLCAxMDQsIDIzNCwgMjUwLCAxLCAKKyAgICAyMTgsIDIyNSwgMjM0LCAyNTAsIDEsIDIwNiwgMjM0LCAyNTAsIDEsIDE2MiwgMjM0LCAyNTAsIDI1LCA1LCAyNTUsIDgyLCAKKyAgICAyMzQsIDI1MCwgMjUsIDUsIDc0LCAyMzQsIDI1MCwgMjUsIDUsIDIzNiwgNDAsIDIzNCwgMjUwLCAyNSwgNSwgNjksIDIzNCwgCisgICAgMjUwLCAyNSwgNSwgMjE0LCAxMTgsIDIzNCwgMjUwLCAyNSwgNSwgNzYsIDIzNCwgMjUwLCAyNSwgNSwgMjU0LCAyMTAsIAorICAgIDIzNCwgMjUwLCAyNSwgNSwgNzgsIDIzNCwgMjUwLCAyNSwgNSwgMjUzLCAyMDAsIDIzNCwgMjUwLCA1LCAyMTMsIDE1MiwgCisgICAgMjM0LCAyNTAsIDUsIDIyNywgMjA5LCAyMzQsIDI1MCwgMjU1LCAzMCwgNTAsIDIzNCwgMjUwLCAyNDUsIDEyOSwgNTAsIAorICAgIDIzNCwgMjUwLCA1NCwgNTAsIDIzNCwgMjUwLCAyMjEsIDE3NSwgNzksIDIzNCwgMjUwLCA1MiwgMjIxLCAxNzUsIDc5LCAKKyAgICAyMzQsIDI1MCwgMjQ4LCAxODYsIDIzNCwgMjUwLCA1MiwgMjQ4LCAxODYsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyMiwgMjAsIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIxNywgODEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI1MiwgMTc2LCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAxLCAyNTEsIDMxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNDgsIDIxMSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgCisgICAgMjQzLCAxMjcsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzMSwgMjE1LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjksIDc5LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzMsIDExOCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjI5LCAyMTgsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIxNCwgMjQsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyNiwgNzcsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIAorICAgIDIxMSwgODQsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyMywgMTcxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNDIsIDQ0LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzQsIDI1NCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjM1LCAxNDIsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIyNywgMTY2LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNTQsIDIxOCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgCisgICAgMjQ1LCAyMTUsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzNiwgNDEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIxNCwgMjA4LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjYsIDIyNiwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjQ1LCAyMDUsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIzMSwgMjI4LCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMjEwLCA4NiwgMjE5LCAzOCwgMjE5LCA0NiwgCisgICAgMjEsIDExMSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDEwNSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE1OCwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMjEsIDE2MSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5MCwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5NSwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5OSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5NiwgMjE5LCAzOCwgMjE5LCA0NiwgCisgICAgMjEsIDIwMSwgMjUwLCAxNTksIDUsIDI1MSwgNywgMjUwLCAxNTksIDUsIDI1NCwgODMsIDI1MCwgMTU5LCA1LCAyMTMsIAorICAgIDE0NywgMjUwLCAxNTksIDEsIDI1NSwgODIsIDI1MCwgMTU5LCAxLCA3NCwgMjUwLCAxNTksIDEsIDY5LCAyNTAsIDE1OSwgMSwgCisgICAgNzYsIDI1MCwgMTU5LCAxLCAyMzUsIDE2LCAyNTAsIDE1OSwgMSwgMjM0LCAxMzcsIDI1MCwgMTU5LCAxLCAyNDMsIDEzOSwgCisgICAgMjUwLCAxNTksIDEsIDI0MiwgMjU1LCAyNTAsIDE1OSwgMSwgMjI5LCA4MSwgMjUwLCAxNTksIDEsIDI1MSwgNDAsIDI1MCwgCisgICAgMTU5LCAxLCAyNTAsIDE2NCwgMjUwLCAxNTksIDEsIDIzNSwgMTQ2LCAyNTAsIDE1OSwgMSwgMjM1LCAxMTksIDI1MCwgMTU5LCAKKyAgICAxLCAyMjcsIDE2OCwgMjUwLCAxNTksIDEsIDIxNSwgMTU2LCAyNTAsIDE1OSwgMSwgMjE1LCAxNDQsIDI1MCwgMTU5LCAxLCAKKyAgICAyNDgsIDE0MiwgMjUwLCAxNTksIDEsIDI0OCwgMTI2LCAyNTAsIDE1OSwgMSwgMjI4LCAxMTQsIDI1MCwgMTU5LCAxLCAyMTcsIAorICAgIDEwMiwgMjUwLCAxNTksIDEsIDIxNiwgMjA4LCAyNTAsIDE1OSwgMSwgMjQ4LCAyMjgsIDI1MCwgMTU5LCAxLCAyNDgsIDMyLCAKKyAgICAyNTAsIDE1OSwgMSwgMjI5LCAyMzAsIDI1MCwgMTU5LCAxLCAyMjYsIDkzLCAyNTAsIDE1OSwgMSwgMjI1LCAxNDksIDI1MCwgCisgICAgMTU5LCAxLCAyNTIsIDE5NywgMjUwLCAxNTksIDEsIDI1MiwgMjUsIDI1MCwgMTU5LCAxLCAyMzEsIDI0MiwgMjUwLCAxNTksIAorICAgIDEsIDIxMCwgMTY3LCAyNTAsIDE1OSwgMSwgMjExLCAxMDMsIDI1MCwgMTU5LCAxLCAyMjMsIDE4NywgMjUwLCAxNTksIDEsIAorICAgIDIzMywgMTQwLCAyNTAsIDE1OSwgMSwgMjEyLCA2NCwgMjUwLCAxNTksIDEsIDIyMiwgMzMsIDI1MCwgMTU5LCAxLCAyNDIsIAorICAgIDUzLCAyNTAsIDE1OSwgMjUsIDUsIDYxLCAyNTAsIDE1OSwgMjUsIDUsIDc0LCAyNTAsIDE1OSwgMjUsIDUsIDIzNiwgNDAsIAorICAgIDI1MCwgMTU5LCAyNSwgNSwgNjksIDI1MCwgMTU5LCAyNSwgNSwgMjE0LCAxMTgsIDI1MCwgMTU5LCAyNSwgNSwgNzYsIDI1MCwgCisgICAgMTU5LCAyNSwgNSwgMjU0LCAyMTAsIDI1MCwgMTU5LCAyNSwgNSwgNzgsIDI1MCwgMTU5LCAyNSwgNSwgMjUzLCAyMDAsIAorICAgIDI1MCwgMTU5LCAyNSwgNSwgMjI2LCAyMjMsIDI1MCwgMTU5LCAxNDQsIDc5LCAyNTAsIDE1OSwgMjUzLCAyMDEsIDc5LCAKKyAgICAyNTAsIDE1OSwgMjEzLCAxNTIsIDI1MCwgMTU5LCAyMzEsIDI0MCwgMjUwLCAxNTksIDIxLCAyMTAsIDg2LCAyNTAsIDE1OSwgCisgICAgMjEsIDExMSwgMjUwLCAxNTksIDIxLCAxMDUsIDI1MCwgMTU5LCAyMSwgMTU4LCAyNTAsIDE1OSwgMjEsIDE2MSwgMjUwLCAKKyAgICAxNTksIDIxLCAxOTAsIDI1MCwgMTU5LCAyMSwgMTk1LCAyNTAsIDE1OSwgMjEsIDE5OSwgMjUwLCAxNTksIDIxLCAxOTYsIAorICAgIDI1MCwgMTU5LCAyMSwgMjAxLCAyNTAsIDE1OSwgMjIxLCAxNzUsIDc5LCAyNTAsIDE1OSwgMjQ4LCAxODYsIDI1MCwgMTU5LCAKKyAgICA1MiwgMjQ4LCAxODYsIDI1MCwgMTU5LCAyMjQsIDE2LCA3OSwgMTc0LCA1LCAyNTEsIDcsIDE3NCwgNSwgMjU0LCA4MywgCisgICAgMTc0LCA1LCAyMTMsIDE0NywgMTc0LCAxLCA2MSwgMTc0LCAxLCAyNTUsIDgyLCAxNzQsIDEsIDc0LCAxNzQsIDEsIDIzNiwgCisgICAgNDAsIDE3NCwgMSwgNjksIDE3NCwgMSwgMjE0LCAxMTgsIDE3NCwgMSwgMTQ5LCAxNTMsIDE3NCwgMSwgMTQ5LCAyMjIsIAorICAgIDE4MiwgMTc0LCAxLCAxNDksIDE1NiwgMTc0LCAxLCAxNDksIDIzMiwgMTkxLCAxNzQsIDEsIDc2LCAxNzQsIDEsIDI1NCwgCisgICAgMjEwLCAxNzQsIDEsIDc4LCAxNzQsIDEsIDI1MywgMjAwLCAxNzQsIDEsIDE3NiwgMTc0LCAxLCAyMzQsIDEzOCwgMTc0LCAxLCAKKyAgICAyNDMsIDE0MiwgMTc0LCAxLCAyNDMsIDAsIDE3NCwgMSwgMjI5LCA4MiwgMTc0LCAxLCAyNTEsIDQxLCAxNzQsIDEsIDI1MCwgCisgICAgMTY1LCAxNzQsIDEsIDIzNSwgMTQ3LCAxNzQsIDEsIDIzNSwgMTIwLCAxNzQsIDEsIDIyNywgMTY5LCAxNzQsIDEsIDIxNSwgCisgICAgMTU3LCAxNzQsIDEsIDIxNSwgMTQ1LCAxNzQsIDEsIDI0OCwgMTQzLCAxNzQsIDEsIDI0OCwgMTI3LCAxNzQsIDEsIDIyOCwgCisgICAgMTE1LCAxNzQsIDEsIDIxNywgMTA2LCAxNzQsIDEsIDIxNiwgMjA5LCAxNzQsIDEsIDI0OCwgMjI5LCAxNzQsIDEsIDI0OCwgCisgICAgMzMsIDE3NCwgMSwgMTk4LCAxNzQsIDEsIDE5MSwgMTc0LCAxLCAyMjUsIDE1MCwgMTc0LCAxLCAyNTIsIDE5OSwgMTc0LCAxLCAKKyAgICAyNTIsIDI2LCAxNzQsIDEsIDE4NiwgMTc0LCAxLCAxOTIsIDE3NCwgMSwgMjA1LCAxNzQsIDEsIDIzMywgMTQxLCAxNzQsIDEsIAorICAgIDIzMiwgMTkwLCAxNzQsIDEsIDIxNCwgMjcsIDE3NCwgMSwgMjIwLCAxMDQsIDE3NCwgMSwgMjE4LCAyMjUsIDE3NCwgMSwgCisgICAgMjA2LCAxNzQsIDEsIDE2MiwgMTc0LCAyNSwgNSwgMjU1LCA4MiwgMTc0LCAyNSwgNSwgNzQsIDE3NCwgMjUsIDUsIDIzNiwgCisgICAgNDAsIDE3NCwgMjUsIDUsIDY5LCAxNzQsIDI1LCA1LCAyMTQsIDExOCwgMTc0LCAyNSwgNSwgMTQ5LCAxNTMsIDE3NCwgMjUsIAorICAgIDUsIDE0OSwgMjIyLCAxODIsIDE3NCwgMjUsIDUsIDE0OSwgMTU2LCAxNzQsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNzQsIAorICAgIDI1LCA1LCA3NiwgMTc0LCAyNSwgNSwgMjU0LCAyMTAsIDE3NCwgMjUsIDUsIDc4LCAxNzQsIDI1LCA1LCAyNTMsIDIwMCwgCisgICAgMTc0LCA1LCAyMTMsIDE1MiwgMTc0LCA1LCAyNTMsIDE4MywgMTc0LCA1LCAyMzUsIDEwOCwgMTc0LCA1LCAyMTQsIDE2MSwgCisgICAgMTc0LCAyMjYsIDIwOCwgMTc0LCAyNDgsIDE4NiwgMTc0LCA1MiwgMjQ4LCAxODYsIDE3NCwgMjU1LCAzMCwgNTAsIDE3NCwgCisgICAgMjIwLCAxMzksIDE3NCwgMjEsIDIxMCwgODYsIDE3NCwgMjEsIDExMSwgMTc0LCAyMSwgMTA1LCAxNzQsIDIxLCAxNTgsIAorICAgIDE3NCwgMjEsIDE2MSwgMTc0LCAyMSwgMTkwLCAxNzQsIDIxLCAxOTUsIDE3NCwgMjEsIDE5OSwgMTc0LCAyMSwgMTk2LCAKKyAgICAxNzQsIDIxLCAyMDEsIDIxNywgNzAsIDEsIDYxLCAyMTcsIDcwLCAxLCAyNTUsIDgyLCAyMTcsIDcwLCAxLCA3NCwgMjE3LCAKKyAgICA3MCwgMSwgMjM2LCA0MCwgMjE3LCA3MCwgMSwgNjksIDIxNywgNzAsIDEsIDIxNCwgMTE4LCAyMTcsIDcwLCAxLCA3NiwgCisgICAgMjE3LCA3MCwgMSwgMjU0LCAyMTAsIDIxNywgNzAsIDEsIDc4LCAyMTcsIDcwLCAxLCAyNTMsIDIwMCwgMjE3LCA3MCwgMSwgCisgICAgMTc2LCAyMTcsIDcwLCAxLCAyMzQsIDEzOCwgMjE3LCA3MCwgMSwgMjQzLCAxNDIsIDIxNywgNzAsIDEsIDI0MywgMCwgMjE3LCAKKyAgICA3MCwgMSwgMjI5LCA4MiwgMjE3LCA3MCwgMSwgMjUxLCA0MSwgMjE3LCA3MCwgMSwgMjUwLCAxNjUsIDIxNywgNzAsIDEsIAorICAgIDIzNSwgMTQ3LCAyMTcsIDcwLCAxLCAyMzUsIDEyMCwgMjE3LCA3MCwgMSwgMjI3LCAxNjksIDIxNywgNzAsIDEsIDIxNSwgCisgICAgMTU3LCAyMTcsIDcwLCAxLCAyMTUsIDE0NSwgMjE3LCA3MCwgMSwgMjQ4LCAxNDMsIDIxNywgNzAsIDEsIDI0OCwgMTI3LCAKKyAgICAyMTcsIDcwLCAxLCAyMjgsIDExNSwgMjE3LCA3MCwgMSwgMjE3LCAxMDYsIDIxNywgNzAsIDEsIDIxNiwgMjA5LCAyMTcsIAorICAgIDcwLCAxLCAyNDgsIDIyOSwgMjE3LCA3MCwgMSwgMjQ4LCAzMywgMjE3LCA3MCwgMSwgMTk4LCAyMTcsIDcwLCAxLCAxOTEsIAorICAgIDIxNywgNzAsIDEsIDIyNSwgMTUwLCAyMTcsIDcwLCAxLCAyNTIsIDE5OSwgMjE3LCA3MCwgMSwgMjUyLCAyNiwgMjE3LCA3MCwgCisgICAgMSwgMTg2LCAyMTcsIDcwLCAxLCAxOTIsIDIxNywgNzAsIDEsIDIwNSwgMjE3LCA3MCwgMSwgMjMzLCAxNDEsIDIxNywgNzAsIAorICAgIDEsIDIxNCwgMjcsIDIxNywgNzAsIDEsIDIyMCwgMTA0LCAyMTcsIDcwLCAxLCAyMDYsIDIxNywgNzAsIDEsIDE2MiwgMjE3LCAKKyAgICA3MCwgMSwgMjIyLCAxODEsIDIxNywgNzAsIDUsIDI1NCwgODMsIDIxNywgNzAsIDUsIDIxMywgMTQ3LCAyMTcsIDcwLCAyNSwgCisgICAgNSwgMjU1LCA4MiwgMjE3LCA3MCwgMjUsIDUsIDc0LCAyMTcsIDcwLCAyNSwgNSwgMjM2LCA0MCwgMjE3LCA3MCwgMjUsIDUsIAorICAgIDY5LCAyMTcsIDcwLCAyNSwgNSwgMjE0LCAxMTgsIDIxNywgNzAsIDI1LCA1LCA3NiwgMjE3LCA3MCwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCAyMTcsIDcwLCAyNSwgNSwgNzgsIDIxNywgNzAsIDI1LCA1LCAyNTMsIDIwMCwgMjE3LCA3MCwgNSwgMjEzLCAxNTIsIAorICAgIDIxNywgNzAsIDUsIDIyNywgMjA5LCAyMTcsIDcwLCAyMSwgMjEwLCA4NiwgMjE3LCA3MCwgMjEsIDExMSwgMjE3LCA3MCwgCisgICAgMjEsIDEwNSwgMjE3LCA3MCwgMjEsIDE1OCwgMjE3LCA3MCwgMjEsIDE2MSwgMjE3LCA3MCwgMjEsIDE5MCwgMjE3LCA3MCwgCisgICAgMjEsIDE5NSwgMjE3LCA3MCwgMjEsIDE5OSwgMjE3LCA3MCwgMjEsIDE5NiwgMjE3LCA3MCwgMjEsIDIwMSwgMTUsIDUsIDYxLCAKKyAgICAxNSwgNSwgMTE2LCAzMCwgNjEsIDE1LCA1LCAxMTYsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDExNiwgMzAsIDI0MywgMTEyLCAKKyAgICAyMTYsIDI0MCwgMTUsIDUsIDExNiwgMzAsIDE2MiwgMTUsIDUsIDExNiwgMzAsIDIzNiwgNDIsIDE1LCA1LCAxMTYsIDMwLCAKKyAgICAyMzMsIDEyMiwgMjQyLCAxMDEsIDE1LCA1LCAxMTYsIDMwLCAyMzAsIDY2LCAxNSwgNSwgMTE2LCAzMCwgMjIyLCAyMywgMTUsIAorICAgIDUsIDI1NSwgODQsIDE1LCA1LCAyNTUsIDM0LCAxNSwgNSwgMjU1LCAzNSwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjU1LCAzNSwgCisgICAgMzAsIDI0NiwgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDI0MywgMTI1LCAxNSwgNSwgMjU1LCAzNSwgMzAsIAorICAgIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI1NSwgMzUsIDMwLCAxNjIsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjM2LCA0MywgCisgICAgMjQyLCAxMDEsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjM2LCAxNiwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyMzMsIDEyMywgMTUsIAorICAgIDUsIDI1NSwgMzUsIDMwLCAyMjAsIDUwLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDY5LCAxNSwgNSwgCisgICAgMjU1LCAzNSwgMjQyLCAxMDEsIDE1LCA1LCAyNTUsIDMyLCAxNSwgNSwgMjU1LCAzMywgMzAsIDI1MiwgMTY4LCAxNSwgNSwgCisgICAgMjU1LCAzMywgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAKKyAgICAxNTgsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjIwLCAxMDIsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjE3LCA3MywgMTUsIDUsIAorICAgIDI1NSwgOCwgMTUsIDUsIDI1NCwgMTk1LCAxNSwgNSwgMjU0LCAxOTYsIDMwLCAyNDUsIDk1LCAxNSwgNSwgMjU0LCAxOTYsIAorICAgIDMwLCAyMjAsIDEyLCA5NiwgMjQyLCAxOTcsIDE1LCA1LCAyNTQsIDE4NywgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjU0LCAKKyAgICAxODcsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDI0NywgMjI0LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyNDIsIDE5NywgMTUsIDUsIAorICAgIDI1NCwgMTg4LCAzMCwgMTYyLCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyMzUsIDUsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIzNCwgCisgICAgOTgsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgCisgICAgMjU0LCAxODQsIDE1LCA1LCAyNTQsIDE3NywgMTUsIDUsIDI1NCwgMTQwLCAxNSwgNSwgMjU0LCAxNDEsIDMwLCAyMjAsIDY1LCAKKyAgICAxNSwgNSwgMjU0LCAxMzEsIDE1LCA1LCAyNTQsIDEzMiwgMTE1LCAyNTQsIDEzMSwgMTUsIDUsIDI1NCwgMTMyLCAxMzQsIAorICAgIDIxNiwgODYsIDE1LCA1LCAyNTQsIDEzMiwgOTYsIDIyOSwgMjIyLCAyMjYsIDE2OCwgMjU0LCAxMzIsIDk2LCAyMjksIDIyMSwgCisgICAgMTUsIDUsIDI1NCwgMTMyLCA5NiwgMjI5LCAyMjIsIDIxOCwgMjM1LCAxNSwgNSwgMjU0LCAxMDIsIDE1LCA1LCAyNTQsIDc1LCAKKyAgICAxNSwgNSwgMjU0LCA0MywgMTUsIDUsIDI1NCwgNDQsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDI1NCwgMTYsIDE1LCA1LCAyNTMsIAorICAgIDI0NCwgMTUsIDUsIDI1MywgMjM5LCAxNSwgNSwgMjUzLCAyNDAsIDIxMCwgNDAsIDIxNiwgMjQwLCAxNSwgNSwgMjUzLCAKKyAgICAyNDAsIDIzNSwgOSwgMjE2LCAyNDAsIDE1LCA1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMjE1LCAxMTUsIDExNSwgCisgICAgMjE1LCAxMTUsIDIxNSwgMTE1LCAxMTUsIDIxNSwgMTE1LCAyMjYsIDI1LCAxNSwgNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAKKyAgICAyNDAsIDExNSwgMjUzLCAyMzksIDE1LCA1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMjQ5LCAKKyAgICAxMzMsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjM5LCAxNSwgNSwgMjUzLCAyMzcsIDE1LCA1LCAyNTMsIAorICAgIDIzNCwgMTUsIDUsIDI1MiwgMTk5LCAxNSwgNSwgMjUyLCAxODQsIDE1LCA1LCAyNTIsIDE3OSwgMTUsIDUsIDI1MiwgMTc1LCAKKyAgICAxNSwgNSwgMjUyLCAxNjksIDE1LCA1LCAyNTIsIDE3MCwgMTE1LCAyNTIsIDE2OSwgMTUsIDUsIDI1MiwgMTY4LCAxNSwgNSwgCisgICAgMTMwLCAxNSwgNSwgMjUyLCAxNDgsIDE1LCA1LCAyNTIsIDE0LCAxNSwgNSwgMjUyLCAxNSwgMzAsIDYxLCAxNSwgNSwgMjUyLCAKKyAgICAxNSwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjUyLCAxNSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjUxLCAxMzMsIAorICAgIDE1LCA1LCAyNTEsIDEzNCwgMTE1LCAyNTEsIDEzNCwgMjU1LCAzNCwgMTUsIDUsIDI1MSwgMTM0LCAxMTUsIDI1MSwgMTM0LCAKKyAgICAyMTQsIDE5MCwgMTUsIDUsIDI1MSwgMTM0LCAyNDksIDEzMywgMjUxLCAxMzMsIDE1LCA1LCAyNTEsIDExNywgMTUsIDUsIAorICAgIDI1MSwgMTE4LCAxMTUsIDI1MSwgMTE3LCAxNSwgNSwgMjUxLCAxMDYsIDE1LCA1LCAyNTEsIDEwNSwgMTUsIDUsIDI0OCwgCisgICAgMjI5LCAxNSwgNSwgMjQ4LCAyMjAsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDExNiwgOTYsIDIzMSwgMTUyLCAKKyAgICAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNTQsIDE0MCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgCisgICAgMjUyLCAxNjgsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI1MiwgMTQsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCAKKyAgICA3MiwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNDMsIDE0MywgOTYsIDIzMSwgMTUyLCAKKyAgICAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNDIsIDIyMSwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgCisgICAgMjQyLCAyMDQsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI0MiwgMTEwLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgCisgICAgNzIsIDMwLCAxNjIsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzNSwgMTg2LCAxNSwgNSwgMjQ4LCAyMjEsIAorICAgIDIzNCwgNzIsIDMwLCAyMzUsIDE4NywgOTYsIDIzMiwgMTAzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzQsIAorICAgIDI0OCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjMzLCAxNDEsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgCisgICAgMzAsIDIzMiwgMTAzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzIsIDEwNCwgOTYsIDIzMSwgMTUxLCAxNSwgCisgICAgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzIsIDg5LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMjksIAorICAgIDExMiwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjI2LCAyNiwgOTYsIDIyNiwgMjUsIDE1LCA1LCAyNDgsIDIyMSwgCisgICAgMjM0LCA3MiwgMzAsIDIxOSwgMTkzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjQ4LCAKKyAgICAyMjEsIDIzNCwgNzIsIDMwLCAyMTQsIDIzMSwgOTYsIDI0MiwgMjA0LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAKKyAgICAyMTQsIDEyNiwgMTUsIDUsIDI0OCwgMTk1LCAxNSwgNSwgMjQ4LCAxNzQsIDE1LCA1LCAyNDgsIDE3MywgMTUsIDUsIDI0OCwgCisgICAgMTcyLCAxNSwgNSwgMjQ4LCAxMSwgMTUsIDUsIDI0NywgMjUwLCAxNSwgNSwgMjQ3LCAyMjUsIDE1LCA1LCAyNDcsIDIyNiwgCisgICAgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDcsIDIyNCwgMTUsIDUsIDI0NywgMjE0LCAxNSwgNSwgMjQ3LCAyMTUsIDIzNCwgMjE0LCAKKyAgICAxMDQsIDI0MiwgMTAyLCAyNDcsIDE5NSwgMTUsIDUsIDI0NywgMTk1LCAxNSwgNSwgMjQ2LCA4NiwgMTUsIDUsIDI0NiwgODcsIAorICAgIDExNSwgMjQ2LCA4NiwgMTUsIDUsIDI0NiwgODcsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA4NywgMjIwLCA0NywgMTUsIDUsIAorICAgIDI0NiwgODQsIDE1LCA1LCAyNDYsIDg1LCAzMCwgMjQ1LCA4MCwgMTUsIDUsIDI0NiwgODMsIDE1LCA1LCAyNDYsIDgyLCAxNSwgCisgICAgNSwgMjQ2LCA4MSwgMTUsIDUsIDI0NiwgODAsIDE1LCA1LCAyNDYsIDc2LCAxNSwgNSwgMjQ2LCA3NCwgMTUsIDUsIDI0NiwgCisgICAgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA3NSwgMjQyLCAxMDIsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA3MywgMTUsIDUsIAorICAgIDI0NiwgNjYsIDE1LCA1LCA3NiwgMTUsIDUsIDE2MCwgMzAsIDIyNiwgMjUsIDE1LCA1LCAxNjAsIDExNSwgMTYwLCAyMjcsIAorICAgIDE5OSwgMTE1LCAyMjcsIDE5OCwgMTUsIDUsIDI0NSwgMjQyLCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAxMTYsIDk2LCAyNDIsIAorICAgIDU2LCA5NiwgMjQ4LCAyMjksIDE1LCA1LCAyNDUsIDI0MywgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAKKyAgICAyMzAsIDIzNSwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMjIyLCAxMCwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMjIwLCA2NSwgMTUsIAorICAgIDUsIDI0NSwgMjQzLCAzMCwgNjksIDE1LCA1LCAyNDUsIDIxOSwgMTUsIDUsIDI0NSwgMjA4LCAxNSwgNSwgMjQ1LCAxODIsIAorICAgIDE1LCA1LCAyNDUsIDE1OCwgMTUsIDUsIDI0NSwgMTU5LCAzMCwgMjQzLCAxMTEsIDE1LCA1LCAyNDUsIDE1OSwgMzAsIDI0MywgCisgICAgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0NSwgMTU5LCAzMCwgMjMxLCA5NiwgMTUsIDUsIDI0NSwgMTU5LCAyNDksIDEzMywgCisgICAgMjQ1LCAxNTgsIDE1LCA1LCAyNDUsIDE1OSwgMjI2LCAxNjgsIDI0NSwgMTU4LCAxNSwgNSwgMjQ1LCAxNTksIDIxOCwgMjM1LCAKKyAgICAxNSwgNSwgMjQ1LCA5NywgMTUsIDUsIDI0NSwgOTUsIDE1LCA1LCAyNDUsIDgwLCAxNSwgNSwgMjQ1LCAxOCwgMTUsIDUsIAorICAgIDI0NSwgMTksIDMwLCA2MSwgMTUsIDUsIDI0NSwgMTksIDMwLCAxMTYsIDk2LCAyMzMsIDExMCwgMTUsIDUsIDI0NSwgMTksIAorICAgIDMwLCAxMTYsIDk2LCAyMzMsIDExMSwgMzAsIDIzMywgMTEwLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDI0NiwgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjQ1LCAKKyAgICAxOSwgMzAsIDI0NiwgNzUsIDI0MiwgMTAyLCAyNDIsIDEwMSwgMTUsIDUsIDI0NSwgMTksIDMwLCAxNjIsIDE1LCA1LCAyNDUsIAorICAgIDE5LCAzMCwgMjQyLCA1NiwgMjQyLCAxMDEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAKKyAgICAyNDUsIDE5LCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjM0LCAyMTQsIDIxOCwgMjM1LCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDIzMywgMjIxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIzMywgMTQxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIAorICAgIDIzMywgMTExLCAzMCwgMjMzLCAxMTAsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjMyLCAyNDcsIDE1LCA1LCAyNDUsIDE5LCAzMCwgCisgICAgMjMyLCAxMDMsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjE0LCAyMTksIDE1LCAKKyAgICA1LCAyNDMsIDE0MiwgMTUsIDUsIDI0MywgMTQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MywgMTQwLCAxNSwgNSwgMjQzLCAxNDEsIAorICAgIDMwLCAxMTYsIDk2LCAyNDgsIDIzMCwgOTYsIDE2MiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMTE2LCA5NiwgMTYyLCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAxMTYsIDk2LCAyMzYsIDQyLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTUsIDMzLCAyMTYsIDI0MSwgCisgICAgOTYsIDIxNywgOTQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTMsIAorICAgIDIzOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUzLCAyMzgsIDk2LCAyNDMsIDEyNSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1MiwgMTQ5LCA5NiwgMjA1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyNTEsIDEwNiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUxLCAxMDcsIDk2LCAyMDUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDI0OCwgMjI5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDgsIDExLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDcsIDIyNiwgCisgICAgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NiwgODQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgMTgyLCAKKyAgICAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIDE4MywgOTYsIDIzMywgMTQxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIAorICAgIDE1OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ1LCAxNTksIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDI0MiwgMjIxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIDIxOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjQyLCAyMjAsIDk2LCA2MSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQyLCAyMDUsIDk2LCAyMTgsIDg0LCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyNDIsIDU2LCA5NiwgMjMyLCAxMDQsIDk2LCAyNDUsIDgwLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIAorICAgIDM3LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIDM4LCA5NiwgMjMzLCAxNDEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MSwgCisgICAgMTg4LCA5NiwgMjMyLCAyNDcsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MCwgMjI1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM1LCAxNzMsIDk2LCAyNDAsIDIzMCwgOTYsIDI1MywgCisgICAgMjM5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAKKyAgICAyNDMsIDE0MSwgMzAsIDIzNCwgOTUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzNCwgOTYsIDk2LCAyMzMsIDExMCwgMTUsIDUsIAorICAgIDI0MywgMTQxLCAzMCwgMjMzLCAyMjIsIDk2LCAyNTQsIDEzMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjMzLCAxNDEsIDE1LCAKKyAgICA1LCAyNDMsIDE0MSwgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIDE1OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjMwLCAyMzUsIAorICAgIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjcsIDE5OSwgMTE1LCAyMjcsIAorICAgIDE5OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMTkxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyMjEsIDIzMywgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjIwLCA2NiwgOTYsIDIxNSwgOTksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDIxOCwgNDQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIxNywgNzMsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDY5LCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjE0LCAyMjAsIDk2LCAyNDYsIDg2LCAxNSwgCisgICAgNSwgMjQzLCAxNDEsIDExNSwgMjQzLCAxNDAsIDE1LCA1LCAyNDMsIDEzNSwgMTUsIDUsIDI0MywgMTM2LCAyNDksIDEzMywgCisgICAgMjQzLCAxMzUsIDE1LCA1LCAyNDMsIDEzMywgMTUsIDUsIDI0MywgMTM0LCAxMTUsIDI0MywgMTM0LCAyNDMsIDEwNCwgMTE1LCAKKyAgICAyNDMsIDEwMywgMTUsIDUsIDI0MywgMTI1LCAxNSwgNSwgMjQzLCAxMjYsIDI0MywgMTM0LCAxMTUsIDI0MywgMTM0LCAyNDMsIAorICAgIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDI0MywgMTI0LCAxNSwgNSwgMjQzLCAxMjIsIDE1LCA1LCAyNDMsIDExMywgCisgICAgMTUsIDUsIDI0MywgMTExLCAxNSwgNSwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQzLCAxMTIsIDExNSwgMjQzLCAKKyAgICAxMTEsIDE1LCA1LCAyNDMsIDExMiwgMjQ5LCAxMzMsIDI0MywgMTExLCAxNSwgNSwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIAorICAgIDEwMiwgMTUsIDUsIDI0MywgOTcsIDE1LCA1LCAyNDMsIDQzLCAxNSwgNSwgMjQzLCA0NCwgMzAsIDIzMywgMjAyLCAxNSwgNSwgCisgICAgMjQyLCAyMjEsIDE1LCA1LCAyNDIsIDIyMiwgMzAsIDc2LCAxNSwgNSwgMjQyLCAyMjIsIDMwLCA2OSwgMTUsIDUsIDI0MiwgCisgICAgMjIyLCAyNDksIDEzMywgMjQyLCAyMjEsIDE1LCA1LCAyNDIsIDIxOSwgMTUsIDUsIDI0MiwgMjIwLCAxMTUsIDI0MiwgMjE5LCAKKyAgICAxNSwgNSwgMjQyLCAyMjAsIDI0OSwgMTMzLCAyNDIsIDIxOSwgMTUsIDUsIDI0MiwgMjE2LCAxNSwgNSwgMjQyLCAyMDQsIAorICAgIDE1LCA1LCAyNDIsIDIwNSwgMjQyLCAxMDEsIDE1LCA1LCAyNDIsIDIwMiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgMTE2LCA5NiwgCisgICAgMjM2LCA0MiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAKKyAgICAyMzYsIDQyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAyMzIsIDEwNCwgOTYsIDIzNiwgNDIsIDE1LCA1LCAyNDIsIDIwMywgMzAsIAorICAgIDE5MSwgMTUsIDUsIDI0MiwgMTk5LCAxNSwgNSwgMjQyLCAxOTcsIDE1LCA1LCAyNDIsIDE5OCwgMjQ5LCAxMzMsIDI0MiwgCisgICAgMTk3LCAxNSwgNSwgMjQyLCAxOTgsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDI0MiwgMTk4LCAzMCwgMjE3LCA3MywgMTUsIDUsIAorICAgIDI0MiwgMTk4LCAyMTYsIDI0MCwgMTUsIDUsIDI0MiwgMTIwLCAxNSwgNSwgMjQyLCAxMjEsIDI0OSwgMTMzLCAyNDIsIDEyMCwgCisgICAgMTUsIDUsIDI0MiwgMTE4LCAxNSwgNSwgMjQyLCAxMTksIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDI0MiwgMTE5LCAzMCwgMjM0LCAKKyAgICAyNDksIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgMTE5LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyNDIsIAorICAgIDExOSwgMzAsIDIyMiwgMTEsIDk2LCAyMTUsIDExNCwgMTUsIDUsIDI0MiwgMTE5LCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgCisgICAgMTEwLCAxNSwgNSwgMjQyLCAxMTEsIDMwLCAxMTYsIDk2LCAyMzMsIDIwMiwgMTUsIDUsIDI0MiwgMTExLCAzMCwgMjMzLCAKKyAgICAyMDIsIDE1LCA1LCAyNDIsIDExMSwgMTE1LCAyNDIsIDExMSwgMjMyLCA5NiwgMTUsIDUsIDI0MiwgMTA1LCAxNSwgNSwgCisgICAgMjQyLCAxMDMsIDE1LCA1LCAyNDIsIDEwNCwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDIsIDk1LCAxNSwgNSwgMjQyLCA5NCwgCisgICAgMTUsIDUsIDI0MiwgOTEsIDE1LCA1LCAyNDIsIDkwLCAxNSwgNSwgMTYyLCAxNSwgNSwgMjQyLCA1NiwgMjE2LCAyNDAsIDE1LCAKKyAgICA1LCAyNDIsIDU2LCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgMzcsIDE1LCA1LCAyNDEsIDE4NywgMTUsIDUsIDI0MSwgMTg4LCAKKyAgICAzMCwgMjUzLCAyMzksIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjQ3LCAxOTUsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI0MywgMTMzLCAxNSwgNSwgCisgICAgMjQxLCAxODgsIDMwLCAyMzQsIDg3LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDI0MSwgMTg4LCAKKyAgICAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgNjksIDE1LCA1LCAyNDAsIDIyOSwgMTUsIDUsIDI0MCwgMjI1LCAKKyAgICAxNSwgNSwgMjQwLCAyMjYsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDI0MCwgMjI2LCAzMCwgMjQyLCAzNywgMTUsIDUsIDI0MCwgCisgICAgMjI2LCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyNDAsIDIyNiwgMzAsIDIzMiwgMjAzLCAxNSwgNSwgMjQwLCAyMjYsIDMwLCAKKyAgICAyMTQsIDIxOSwgMTUsIDUsIDI0MCwgMjIyLCAxNSwgNSwgNzQsIDE1LCA1LCAyNDAsIDE2MSwgNjEsIDE1LCA1LCAyNDAsIAorICAgIDEyMiwgMTUsIDUsIDIzNiwgNzAsIDE1LCA1LCAyMzYsIDcxLCAxMTUsIDIzNiwgNzEsIDI1MSwgMTA2LCAxNSwgNSwgMjM2LCAKKyAgICA3MSwgMTE1LCAyMzYsIDcxLCAyMTgsIDIzNSwgMTUsIDUsIDIzNiwgNDUsIDE1LCA1LCAyMzYsIDQyLCAxNSwgNSwgMjM2LCAKKyAgICA0MywgMjQ3LCAyNTAsIDE1LCA1LCAyMzYsIDQzLCAyMjMsIDM4LCAxNSwgNSwgMjM2LCA0MywgMTE1LCAyMzYsIDQzLCAyMjAsIAorICAgIDE2LCAxMTUsIDIyMCwgMTYsIDIxNCwgMjIwLCAxMTUsIDIxNCwgMjE5LCAxNSwgNSwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCAKKyAgICA1LCAyMzYsIDM0LCAxNSwgNSwgMjM2LCAzNSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIzNiwgMzMsIDE1LCAKKyAgICA1LCAyMzYsIDIzLCAxNSwgNSwgMjM2LCAyNCwgMzAsIDIxNywgNzMsIDE1LCA1LCAyMzYsIDI0LCAyNDksIDEzMywgMjM2LCAKKyAgICAyMywgMTUsIDUsIDIzNiwgMjQsIDIyNiwgMTY4LCAyMzYsIDIzLCAxNSwgNSwgMjM2LCAyNCwgMjE4LCAyMzUsIDE1LCA1LCAKKyAgICAyMzYsIDE2LCAxNSwgNSwgMjM2LCA2LCAxNSwgNSwgMjM1LCAxODYsIDE1LCA1LCAyMzUsIDE3MiwgMTUsIDUsIDE3NiwgMTUsIAorICAgIDUsIDIzNSwgMTksIDMwLCA2MSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTUsIDgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjU1LCAKKyAgICA5LCA5NiwgMjMzLCAyMjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUyLCAKKyAgICAxODQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUyLCAxNjgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMTMwLCAxNSwgNSwgMjM1LCAKKyAgICAxOSwgMzAsIDI1MiwgMTQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQ1LCA5NSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDUsIAorICAgIDgwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MywgMTI1LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDMsIDEwMywgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyNDMsIDEwNCwgOTYsIDIyMCwgMTAzLCA5NiwgNjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAKKyAgICAyMjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAyMDQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAxOTgsIDk2LCAyMjEsIAorICAgIDIzMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDE5OCwgMjQ5LCAxMzMsIDI0MiwgMTk3LCAxNSwgNSwgMjM1LCAxOSwgCisgICAgMzAsIDI0MiwgMTIwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgOTQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM2LCA0MiwgCisgICAgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjM1LCAKKyAgICAxOSwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM0LCA5NSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzIsIAorICAgIDI0NywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzIsIDEwMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzEsIDk2LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIzMSwgOTcsIDk2LCAyNDYsIDg2LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMSwgOTcsIDk2LCAyNDIsIAorICAgIDIyMSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzEsIDk3LCA5NiwgMjE3LCAyMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzAsIAorICAgIDIzNSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzAsIDIzNiwgOTYsIDIyNywgMTkzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyOSwgCisgICAgMTEyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyNSwgMTExLCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIyMiwgMTQyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIwNiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjEsIAorICAgIDIzMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjAsIDEwNCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjAsIDY1LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE5LCAyMjcsIDE1LCA1LCAyMzUsIDE5LCAzMCwgCisgICAgMjE5LCAxODQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE4LCA1MiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTcsIDUxLCAxNSwgCisgICAgNSwgMjM1LCAxOSwgMzAsIDY5LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIAorICAgIDIxNCwgMjE5LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgMTkzLCAzMCwgMTkxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgCisgICAgMTI2LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxMCwgNDQsIDE1LCA1LCAyMzUsIDE3LCAxNSwgNSwgMjM1LCAxOCwgMjQ5LCAKKyAgICAxMzMsIDIzNSwgMTcsIDE1LCA1LCAyMzUsIDEwLCAxNSwgNSwgMjM1LCA3LCAxNSwgNSwgMjM1LCA1LCAxNSwgNSwgMjM1LCAKKyAgICA0LCAxNSwgNSwgMjM1LCAyLCAxNSwgNSwgMjM1LCAzLCAxMTUsIDIzNSwgMiwgMTUsIDUsIDIzNCwgMjQ4LCAxNSwgNSwgCisgICAgMjM0LCAyNDksIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIzNCwgMjQ0LCAxNSwgNSwgMjM0LCAyNDUsIDMwLCAKKyAgICAyNTIsIDE4NCwgMTUsIDUsIDIzNCwgMjQ1LCAyNDksIDEzMywgMjM0LCAyNDQsIDE1LCA1LCAyMzQsIDI0MiwgMTUsIDUsIAorICAgIDIzNCwgMjQxLCAxNSwgNSwgMjM0LCAyMTMsIDE1LCA1LCAyMzQsIDIxNCwgMjMzLCAxMjQsIDMwLCAxMDQsIDExNSwgMjMzLCAKKyAgICAxMjQsIDMwLCA2OSwgMTUsIDUsIDIzNCwgMjE0LCAxMTUsIDIzNCwgMjE0LCAyMzMsIDEyNCwgMzAsIDEwNCwgMTE1LCAyMzMsIAorICAgIDEyNCwgMzAsIDY5LCAxNSwgNSwgMjM0LCAxNjMsIDE1LCA1LCAyMzQsIDk4LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDI1MiwgCisgICAgMTg0LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDY5LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjM0LCAKKyAgICA5NSwgMTUsIDUsIDIzNCwgODcsIDE1LCA1LCAyMzQsIDc0LCAxNSwgNSwgMjM0LCA3MywgMTUsIDUsIDIzNCwgNzEsIDE1LCAKKyAgICA1LCAyMzQsIDcyLCAxMTUsIDIzNCwgNzEsIDE1LCA1LCAyMzMsIDIyMywgMTUsIDUsIDIzMywgMjI0LCAxMTUsIDI0MSwgCisgICAgMTg4LCAzMCwgMjUzLCAyMzgsIDIzMywgMjI0LCAxMTUsIDI0MSwgMTg4LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMzMsIAorICAgIDIyMSwgMTUsIDUsIDIzMywgMjE5LCAxNSwgNSwgMjMzLCAyMjAsIDIxNCwgMTIsIDE3LCAxNSwgNSwgMjMzLCAyMTgsIDE1LCAKKyAgICA1LCAyMzMsIDIxNSwgMTUsIDUsIDIzMywgMjE2LCAyNDIsIDEwMSwgMTUsIDUsIDIzMywgMjE0LCAxNSwgNSwgMjMzLCAyMDIsIAorICAgIDE1LCA1LCAyMzMsIDIwMywgMjI2LCAxNjgsIDIzMywgMjAyLCAxNSwgNSwgMjMzLCAxOTcsIDE1LCA1LCAyMzMsIDE3OCwgCisgICAgMTUsIDUsIDIzMywgMTQxLCAxNSwgNSwgMjMzLCAxMjMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDYxLCAxNSwgNSwgMjMzLCAKKyAgICAxMjQsIDMwLCAxMTYsIDk2LCAyNDgsIDIzMCwgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMTE2LCA5NiwgMjQzLCAKKyAgICAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDExNiwgOTYsIDIzMywgMTEwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTQsIAorICAgIDE4NywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1MywgMjQwLCAyMTAsIAorICAgIDQwLCAyMTYsIDI0MCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1MiwgCisgICAgMTQsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0OCwgMTc0LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDUsIDE1OCwgMTUsIDUsIAorICAgIDIzMywgMTI0LCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyNDIsIDExMCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQyLCAxMTEsIDk2LCAyNDIsIDExMCwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMTYyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDIsIDM3LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDEsIAorICAgIDE4OCwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMjM2LCAyMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjM2LCAyNCwgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTI0LCAKKyAgICAzMCwgMjM2LCAyNCwgOTYsIDIzMiwgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyMzQsIDg3LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzMsIDIyMSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMzLCAKKyAgICAyMTUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMywgMjE2LCA5NiwgMjQxLCAxODgsIDk2LCA2MSwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMjMzLCAxMjMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMiwgMjAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAKKyAgICAyMzIsIDEwMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMyLCA5MSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMxLCA5NiwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMjMxLCA5NywgOTYsIDI0NSwgMTU4LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzAsIDY2LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjIwLCA2NiwgOTYsIDIxOCwgNDQsIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDIyMCwgMTIsIDk2LCAyNDIsIDE5OCwgOTYsIDI0NSwgOTUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIAorICAgIDIyMCwgMTIsIDk2LCAyNDIsIDE5OCwgMjE2LCAyNDAsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxOSwgMjI1LCAxNSwgNSwgCisgICAgMjMzLCAxMjQsIDMwLCAyMTksIDIyNiwgOTYsIDIxOSwgMjI1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTgsIDQ0LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMTcsIDg1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyMTcsIDI0LCA5NiwgMTE2LCA5NiwgMjE4LCA4NSwgOTYsIDE5OCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgNjksIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDEwNCwgOTYsIDYxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA2OSwgCisgICAgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE0LCAKKyAgICAyMTksIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjMzLCAxMjQsIDIxOCwgMjM1LCAxNSwgNSwgCisgICAgMjMzLCAxMjEsIDE1LCA1LCAyMzMsIDEyMiwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyMzMsIDEyMiwgMzAsIDIyMCwgNjYsIDk2LCAKKyAgICAyMTgsIDQ0LCAxNSwgNSwgMjMzLCAxMjIsIDI0MiwgMTAxLCAxNSwgNSwgMjMzLCAxMjIsIDI0MiwgMTAyLCAxMTUsIDIzMywgCisgICAgMTIyLCAyNDIsIDEwMiwgMjIwLCA2NSwgMTUsIDUsIDIzMywgMTE3LCAxNSwgNSwgMjMzLCAxMTAsIDE1LCA1LCAyMzMsIAorICAgIDExMSwgMzAsIDIzMywgMTEwLCAxNSwgNSwgMjMzLCAxMDgsIDE1LCA1LCAyMzMsIDEwOSwgMzAsIDIzMywgMjAyLCAxNSwgNSwgCisgICAgMjMzLCAxMDksIDMwLCAyMzMsIDIwMywgOTYsIDIyMiwgMTQyLCAxNSwgNSwgMjMyLCAyNDcsIDE1LCA1LCAyMzIsIDIzMiwgCisgICAgMTUsIDUsIDIzMiwgMjIyLCAxNSwgNSwgMjMyLCAyMDMsIDE1LCA1LCAyMzIsIDEwMywgMTUsIDUsIDIzMiwgMTA0LCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyMzIsIDEwMSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjU0LCAxODcsIDE1LCA1LCAyMzIsIAorICAgIDEwMiwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyNDUsIDgwLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAKKyAgICAyNDUsIDgxLCAyMTYsIDI0MCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDMwLCAyNDEsIDE4OCwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMzYsIDIzLCAxNSwgNSwgCisgICAgMjMyLCAxMDIsIDMwLCAyMzUsIDcsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzNSwgNSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgCisgICAgMjM1LCA2LCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIAorICAgIDIzMywgMTQyLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzMywgMTIzLCAxNSwgNSwgMjMyLCAxMDIsIAorICAgIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAxNTgsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDMwLCAyMjcsIDI0MiwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjE5LCAxOTQsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIAorICAgIDIzMiwgMTAyLCAzMCwgMjE5LCAxNzYsIDk2LCAyNTEsIDEzMywgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjE1LCAxMTQsIDE1LCAKKyAgICA1LCAyMzIsIDEwMiwgMjE2LCAyNDAsIDE1LCA1LCAyMzIsIDEwMiwgMjQ5LCAxMzMsIDIzMiwgMTAxLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDIyNiwgMTY4LCAyMzIsIDEwMSwgMTUsIDUsIDIzMiwgMTAyLCAyMTgsIDIzNSwgMTUsIDUsIDIzMiwgMTAyLCAyMjAsIAorICAgIDQ3LCAxNSwgNSwgMjMyLCAxMDAsIDE1LCA1LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMTE1LCAyMzIsIDk2LCAxNSwgNSwgCisgICAgMjMyLCA5NywgMjI2LCAxNjgsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAyMjAsIDQ3LCAxNSwgNSwgMjMyLCA5NCwgMTUsIAorICAgIDUsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDg5LCAxNSwgNSwgMjMyLCA5MCwgMTE1LCAyMzIsIDg5LCAxNSwgNSwgMjMyLCA5MCwgCisgICAgMTE1LCAyMzIsIDkwLCAyNDMsIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDE4NiwgMTUsIDUsIDIzMSwgMjQ0LCAzMCwgCisgICAgMjE3LCA3MywgMTUsIDUsIDIzMSwgMjQ0LCAyNDIsIDEwMSwgMTUsIDUsIDIzMSwgMjQzLCAxNSwgNSwgMjMxLCAyMTUsIDE1LCAKKyAgICA1LCAyMzEsIDE3MSwgMTUsIDUsIDIzMSwgMTUyLCAxNSwgNSwgMjMxLCAxNTEsIDE1LCA1LCAyMzEsIDk2LCAxNSwgNSwgCisgICAgMjMxLCA1MiwgMTUsIDUsIDIzMCwgMjM1LCAxNSwgNSwgMjMwLCAxOTMsIDE1LCA1LCAyMzAsIDEwNywgMTUsIDUsIDIzMCwgCisgICAgMTA4LCAxMTUsIDIzMCwgMTA3LCAxNSwgNSwgMjMwLCA5OCwgMTUsIDUsIDIzMCwgOTksIDI0MiwgMTAxLCAxNSwgNSwgMjMwLCAKKyAgICA4MywgMTUsIDUsIDIzMCwgNjksIDE1LCA1LCAyMzAsIDY2LCAxNSwgNSwgMjMwLCA2NywgMzAsIDYxLCAxNSwgNSwgMjMwLCAKKyAgICA2NywgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjMwLCA2NywgMzAsIDIxMCwgMTE2LCAxNSwgNSwgMjMwLCA2NywgMTE1LCAyMzAsIAorICAgIDY2LCAxNSwgNSwgMjMwLCA2NywgMTE1LCAyMzAsIDY3LCAzMCwgMTE2LCA5NiwgMTk4LCAxNSwgNSwgMjMwLCA2NywgMjQ5LCAKKyAgICAxMzMsIDIzMCwgNjYsIDE1LCA1LCAyMzAsIDY0LCAxNSwgNSwgMjMwLCA2NSwgMzAsIDYxLCAxNSwgNSwgMjMwLCA2NSwgMzAsIAorICAgIDExNiwgOTYsIDI0OCwgMTEsIDE1LCA1LCAyMzAsIDY1LCAzMCwgMjQ4LCAxMSwgMTUsIDUsIDIzMCwgNjUsIDI0MiwgMTAxLCAKKyAgICAxNSwgNSwgMTk4LCAxNSwgNSwgMjI5LCAyMzIsIDE1LCA1LCAyMjksIDIyMSwgMTUsIDUsIDIyOSwgMjIyLCAyMzUsIDE5OSwgCisgICAgMTUsIDUsIDIyOSwgMjIyLCAzMCwgMjE5LCAyMjgsIDIxNiwgMjQwLCAxNSwgNSwgMjI5LCAyMjIsIDIyNiwgMTY4LCAyMjksIAorICAgIDIyMSwgMTUsIDUsIDIyOSwgMjIwLCAxNSwgNSwgMjI5LCAyMTMsIDIyNywgMTg0LCAxNSwgNSwgMjI5LCAyMTIsIDE1LCA1LCAKKyAgICAyMjksIDIxMSwgMTUsIDUsIDIyOSwgMTEyLCAxNSwgNSwgMjI5LCAxMTMsIDMwLCA2MSwgMTUsIDUsIDIyOSwgMTEzLCAzMCwgCisgICAgMjE0LCAyMTksIDE1LCA1LCAyMjksIDExMywgMjIwLCA0NywgMTUsIDUsIDIyOCwgMjM4LCAxNSwgNSwgMjI4LCAyMzksIDMwLCAKKyAgICA3NiwgMTUsIDUsIDIyOCwgMjM3LCAxNSwgNSwgMjI4LCAyMDgsIDE1LCA1LCAyMjgsIDIwOSwgMzAsIDI0MywgMTEyLCAyMTYsIAorICAgIDI0MCwgMTUsIDUsIDIyOCwgMjA5LCAzMCwgMjQzLCAxMDQsIDk2LCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMjgsIAorICAgIDIwNiwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDI1MywgMjM5LCAxNSwgNSwgCisgICAgMjI4LCAyMDcsIDMwLCAyNTMsIDI0MCwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyNDIsIDExMCwgMTUsIAorICAgIDUsIDIyOCwgMjA3LCAzMCwgMjMxLCA5NywgOTYsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgCisgICAgMjI5LCAxMTIsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY1LCAKKyAgICAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY2LCA5NiwgMTE2LCAyNTQsIDEzMSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgCisgICAgMjIwLCA2NiwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY2LCA5NiwgMjUzLCAyNDAsIDk2LCAKKyAgICAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAKKyAgICAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjgsIDE5NSwgMTUsIDUsIDIyNywgMjQyLCAxNSwgNSwgMjI3LCAyMTQsIDE1LCA1LCAKKyAgICAyMjcsIDE5OCwgMTUsIDUsIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjI3LCAxOTksIDIzMywgCisgICAgMTIyLCAzMCwgMjMxLCAxNTIsIDE1LCA1LCAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjI3LCAKKyAgICAxOTksIDIzMywgMTIyLCAzMCwgMjIyLCAxMSwgMTE1LCAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyMjIsIDEwLCAxNSwgNSwgCisgICAgMjI3LCAxOTksIDIzMywgMTIyLCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjcsIDE5OSwgMjE2LCAyNDAsIDE1LCA1LCAyMjcsIAorICAgIDE5OSwgMTE1LCAyMjcsIDE5OCwgMTUsIDUsIDIyNywgMTk5LCAyNDksIDEzMywgMjI3LCAxOTgsIDE1LCA1LCAyMjcsIDE5OSwgCisgICAgMjQ5LCAxMzMsIDIyNywgMTk5LCAyMzMsIDEyMiwgMTE1LCAyMzMsIDEyMSwgMTUsIDUsIDIyNywgMTkzLCAxNSwgNSwgMjI3LCAKKyAgICAxOTQsIDI1NSwgMzMsIDMwLCAyNTMsIDIzNCwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjUyLCAxNCwgMTUsIDUsIAorICAgIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjQ2LCA4MiwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjQyLCAxMTAsIAorICAgIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgCisgICAgMzMsIDMwLCAyMzUsIDUsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIzMywgMTQxLCAxNSwgNSwgMjI3LCAxOTQsIAorICAgIDI1NSwgMzMsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjE5LCAxNzMsIDE1LCA1LCAKKyAgICAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI3LCAxOTQsIDIzNCwgNzIsIDMwLCAyNTIsIDE0LCAKKyAgICAxNSwgNSwgMjI3LCAxOTQsIDIzNCwgNzIsIDMwLCAyNTIsIDE1LCA2OSwgMTUsIDUsIDE5MSwgMTUsIDUsIDIyNiwgODQsIAorICAgIDE1LCA1LCAyMjYsIDUxLCAxNSwgNSwgMjI2LCAyNSwgMTUsIDUsIDIyNSwgMTY0LCAxNSwgNSwgMjI1LCAxMTEsIDE1LCA1LCAKKyAgICAyMjUsIDExMiwgMzAsIDYxLCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTUsIDM0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTIsIAorICAgIDE0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTEsIDEzMywgMTUsIDUsIDIyNSwgMTEyLCAzMCwgNzYsIDE1LCA1LCAyMjUsIAorICAgIDExMiwgMzAsIDc0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNDAsIDEyMiwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgNjksIDE1LCAKKyAgICA1LCAyMjUsIDExMiwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI1LCAxMTIsIDI0OSwgMTMzLCAyMjUsIDExMSwgMTUsIDUsIAorICAgIDIyNSwgNTYsIDE1LCA1LCAyMjUsIDU3LCAzMCwgMjM0LCAyNDQsIDE1LCA1LCAyMjUsIDU3LCAzMCwgMjE0LCAyMTksIDE1LCAKKyAgICA1LCAyMjUsIDU3LCAzMCwgMjEwLCAxMTYsIDE1LCA1LCAyMjUsIDU3LCAyMjYsIDE2OCwgMjI1LCA1NiwgMTUsIDUsIDIwNSwgCisgICAgMTUsIDUsIDIyMywgMTg1LCAxNSwgNSwgMjIzLCAzOCwgMTUsIDUsIDIyMiwgMTQyLCAxNSwgNSwgMjA2LCAxNSwgNSwgMjIyLCAKKyAgICAyNCwgMjI3LCAxODQsIDE1LCA1LCAyMjIsIDIzLCAxNSwgNSwgMjIyLCAyNCwgMzAsIDYxLCAxNSwgNSwgMjIyLCAyNCwgMzAsIAorICAgIDI0NiwgODYsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjQ2LCA4NCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAxNjIsIDE1LCA1LCAKKyAgICAyMjIsIDI0LCAzMCwgMjM0LCAyNDgsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMjIsIDI0LCAzMCwgCisgICAgMjMyLCA4OSwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMzAsIDIzNSwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMjcsIDE5OCwgMTUsIAorICAgIDUsIDIyMiwgMjQsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyMjIsIDI0LCAzMCwgCisgICAgMjE3LCA5NCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDIyNSwgMTUsIAorICAgIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDE5NywgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDE1MCwgMTUsIDUsIDIyMiwgMjQsIAorICAgIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyMiwgMjQsIDExNSwgMjIyLCAyMywgMTUsIDUsIDIyMiwgMjQsIDI0MiwgMTAxLCAxNSwgCisgICAgNSwgMjIyLCAxMCwgMTUsIDUsIDIyMiwgMTEsIDIzMywgMTI0LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMjEsIDI0MSwgMTUsIAorICAgIDUsIDIyMSwgMjMzLCAxNSwgNSwgMjIwLCAxMDQsIDE1LCA1LCAyMjAsIDEwMiwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgNjEsIAorICAgIDE1LCA1LCAyMjAsIDEwMywgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAyNDIsIDE5NywgMTUsIDUsIDIyMCwgCisgICAgMTAzLCAzMCwgMjI5LCAxMTIsIDE1LCA1LCAyMjAsIDEwMywgMzAsIDIxOSwgMjI1LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAKKyAgICAyMTUsIDk5LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCA2OSwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMTA0LCA5NiwgNjEsIDE1LCAKKyAgICA1LCAyMjAsIDEwMSwgMTUsIDUsIDIyMCwgOTksIDE1LCA1LCAyMjAsIDgwLCAxNSwgNSwgMjIwLCA2NSwgMTUsIDUsIDIyMCwgCisgICAgNjYsIDI0MCwgMjI5LCAxNSwgNSwgMjIwLCA2NiwgMTE1LCAyMjAsIDY2LCAyNDMsIDEzNCwgMTE1LCAyNDMsIDEzNCwgMjQzLCAKKyAgICAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDY2LCAxMTUsIDIyMCwgNjYsIDIxNywgOTUsIDExNSwgMjE3LCA5NSwgCisgICAgMjQzLCAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDU4LCAxNSwgNSwgMjIwLCA1MywgMTUsIDUsIDIyMCwgNTAsIAorICAgIDE1LCA1LCAyMjAsIDQ5LCAxNSwgNSwgMjIwLCA0NiwgMTUsIDUsIDIyMCwgMzIsIDE1LCA1LCAyMjAsIDMzLCAzMCwgNjEsIAorICAgIDE1LCA1LCAyMjAsIDMzLCAzMCwgMjM2LCAyMywgMTUsIDUsIDIyMCwgMjYsIDE1LCA1LCAyMjAsIDI3LCAzMCwgNjEsIDE1LCAKKyAgICA1LCAyMjAsIDI3LCAzMCwgMjUyLCAxNjksIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjUxLCAxMTcsIDE1LCA1LCAyMjAsIDI3LCAKKyAgICAzMCwgMjQ3LCAyMTQsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjM2LCA0MiwgCisgICAgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzMsIDE5NywgMTUsIAorICAgIDUsIDIyMCwgMjcsIDMwLCAyMzIsIDkxLCAxNSwgNSwgMjIwLCAyNywgMzAsIDIzMCwgOTgsIDE1LCA1LCAyMjAsIDI3LCAzMCwgCisgICAgMjIyLCAxMCwgMTUsIDUsIDIyMCwgMjAsIDE1LCA1LCAyMjAsIDE1LCAxNSwgNSwgMjIwLCAxNiwgMjE2LCAyNDAsIDE1LCA1LCAKKyAgICAyMjAsIDE2LCAxMTUsIDIyMCwgMTYsIDI1MSwgMTA3LCAxMTUsIDI1MSwgMTA2LCAxNSwgNSwgMjIwLCAxMSwgMTUsIDUsIAorICAgIDIxOSwgMjI3LCAxNSwgNSwgMjE5LCAyMjgsIDExNSwgMjM1LCAyMDAsIDIxOSwgMjI3LCAxNSwgNSwgMjE5LCAyMjUsIDE1LCAKKyAgICA1LCAyMTksIDIyNCwgMTUsIDUsIDIxOSwgMTkzLCAxNSwgNSwgMjE5LCAxOTQsIDI0MiwgMTAxLCAxNSwgNSwgMjE5LCAxODQsIAorICAgIDE1LCA1LCAyMTksIDE4MiwgMTUsIDUsIDIxOSwgMTgzLCAxMTUsIDIxOSwgMTgzLCAyMTksIDIyNSwgMTUsIDUsIDIxOSwgCisgICAgMTc1LCAxNSwgNSwgMjE5LCAxNzMsIDE1LCA1LCAyMTgsIDg0LCAxNSwgNSwgMjE4LCA4NSwgMTE1LCAyMTgsIDg0LCAxNSwgCisgICAgNSwgMjE4LCA1NSwgMTUsIDUsIDIxOCwgNTQsIDE1LCA1LCAyMTgsIDUyLCAxNSwgNSwgMjE4LCA0NCwgMTUsIDUsIDIxOCwgCisgICAgNDMsIDE1LCA1LCAyMTgsIDE4LCAxNSwgNSwgMjE4LCAxNywgMTUsIDUsIDIxNywgMTA2LCAxNSwgNSwgMjE3LCAxMDcsIAorICAgIDI1MywgMjI0LCAxNSwgNSwgMjE3LCAxMDcsIDMwLCAyNDEsIDE4NywgMTUsIDUsIDIxNywgMTA3LCAzMCwgMjMwLCAyMzUsIAorICAgIDE1LCA1LCAyMTcsIDEwNywgMjQyLCAxMDEsIDE1LCA1LCAyMTcsIDk0LCAxNSwgNSwgMjE3LCA5NSwgMTE1LCAyMTcsIDk1LCAKKyAgICAyMjgsIDIzOSwgMTE1LCAyMjgsIDIzOSwgMjQ3LCAxOTYsIDExNSwgMjQ3LCAxOTUsIDE1LCA1LCAyMTcsIDk1LCAyMTgsIAorICAgIDIzNSwgMTUsIDUsIDIxNywgODUsIDE1LCA1LCAxMjksIDMwLCAyNTIsIDE0LCAxNSwgNSwgMTI5LCAzMCwgMjQyLCAxMTAsIAorICAgIDE1LCA1LCAxMjksIDMwLCAyMjAsIDY1LCAxNSwgNSwgMTI5LCAzMCwgMjE5LCAyMjcsIDE1LCA1LCAxMjksIDMwLCAyMTUsIAorICAgIDExNCwgMTUsIDUsIDEyOSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjE3LCA3MywgMTUsIDUsIDIxNywgNTEsIDE1LCA1LCAKKyAgICAyMTcsIDIzLCAxNSwgNSwgMjE3LCAyNCwgMjQyLCAxMDEsIDE1LCA1LCAyMTYsIDExOCwgMTUsIDUsIDIxNiwgMTE5LCAyMTYsIAorICAgIDI0MCwgMTUsIDUsIDIxNiwgOTEsIDE1LCA1LCAyMTYsIDczLCAxNSwgNSwgMjE2LCA3NCwgMzAsIDIxNywgNzMsIDE1LCA1LCAKKyAgICAyMTYsIDc0LCAxMTUsIDIxNiwgNzMsIDE1LCA1LCAyMTYsIDc0LCAxMTUsIDIxNiwgNzQsIDI0MywgMTM0LCAxMTUsIDI0MywgCisgICAgMTM0LCAyNDMsIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDIxNSwgMTE5LCAxNSwgNSwgMjE1LCAxMTQsIDE1LCA1LCAKKyAgICAyMTUsIDExMiwgMTUsIDUsIDIxNSwgMTA5LCAxNSwgNSwgMjE1LCA5OSwgMTUsIDUsIDIxNSwgMTAwLCAxMTUsIDIxNSwgCisgICAgMTAwLCAyMTAsIDExNywgMTE1LCAyMTAsIDExNiwgMTUsIDUsIDY5LCAxNSwgNSwgMTA0LCAyNDIsIDExMCwgMTUsIDUsIAorICAgIDEwNCwgMTA0LCA2OSwgMTUsIDUsIDEwNCwgMTE1LCAxMDQsIDIyNiwgOTQsIDExNSwgMjI2LCA5NCwgMjQzLCAxMDQsIDExNSwgCisgICAgMjQzLCAxMDMsIDE1LCA1LCAxMDQsIDExNSwgMTA0LCAyMTgsIDE5LCAxMTUsIDIxOCwgMTgsIDE1LCA1LCAxMDQsIDExNSwgCisgICAgMTA0LCAxMDQsIDIyMywgNTIsIDExNSwgMTA0LCAyMjMsIDUxLCAxNSwgNSwgMjE0LCAyMzAsIDE1LCA1LCAyMTQsIDIyNSwgCisgICAgMTUsIDUsIDIxNCwgMjE5LCAxNSwgNSwgMjE0LCAyMjAsIDIzMywgMTk3LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMjMwLCAyMzUsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgCisgICAgOTYsIDY5LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCAxMDQsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAKKyAgICAyMjAsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAyMjAsIDIyMCwgNDcsIDE1LCA1LCAyMTQsIDIyMCwgMjIwLCA0OCwgMzAsIAorICAgIDI1MiwgMTg0LCAxNSwgNSwgMjE0LCAyMTUsIDE1LCA1LCAyMTQsIDE5NywgMTUsIDUsIDIxNCwgMTk4LCAzMCwgMjMzLCAKKyAgICAxMjMsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDIzMSwgOTcsIDk2LCAyNDgsIDIyOSwgMTUsIDUsIDIxNCwgMTk4LCAzMCwgCisgICAgMjIwLCAxMDIsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDY5LCAxNSwgNSwgMjE0LCAxOTYsIDE1LCA1LCAyMTQsIDE5MiwgMTUsIAorICAgIDUsIDIxNCwgMTkzLCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyMTQsIDE5MywgMzAsIDE5MSwgMTUsIDUsIDIxNCwgMTkwLCAxNSwgCisgICAgNSwgMjE0LCAxOTEsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgMjQ5LCAxMzMsIDIxNCwgCisgICAgMTUwLCAxNSwgNSwgMjE0LCAxNTEsIDIyMCwgNDcsIDE1LCA1LCAyMTQsIDE0OCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTE2LCAKKyAgICA5NiwgMTYyLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxMTYsIDk2LCAxOTgsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDI1NCwgCisgICAgMTg3LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjE0LCAKKyAgICAxNDksIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIAorICAgIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTIsIDE0LCAxNSwgNSwgMjE0LCAxNDcsIDE1LCA1LCAyMTQsIDE0NCwgCisgICAgMTUsIDUsIDIxNCwgMTQzLCAxNSwgNSwgMjE0LCAxMzksIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDYxLCAxNSwgNSwgMjE0LCAKKyAgICAxNDAsIDMwLCAyNTMsIDIzNCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTMwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDYsIAorICAgIDc2LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDE0MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMjUsIDE1LCA1LCAKKyAgICAyMTQsIDE0MCwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAKKyAgICAyMTQsIDE0MCwgMzAsIDI0MiwgMTIwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxNjIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAorICAgIDIzNiwgNDIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNiwgMjMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNSwgMTcyLCAxNSwgCisgICAgNSwgMjE0LCAxNDAsIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzIsIDg5LCAxNSwgNSwgMjE0LCAxNDAsIAorICAgIDMwLCAyMzAsIDE5MywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTkxLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMjAsIDY1LCAxNSwgCisgICAgNSwgMjE0LCAxNDAsIDMwLCAyMTksIDE4MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE1LCAxMTksIDE1LCA1LCAyMTQsIAorICAgIDE0MCwgMzAsIDEwNCwgOTYsIDI0MiwgMTEwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIxNCwgCisgICAgMTQwLCAzMCwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM4LCAzMCwgNjksIDE1LCA1LCAyMTQsIAorICAgIDEyNiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgNjEsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIzMywgMjIzLCAxNSwgNSwgMjE0LCAKKyAgICAxMjcsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjE3LCA3MywgMTUsIDUsIDIxNCwgMTIyLCAxNSwgNSwgCisgICAgMjE0LCAxMjUsIDE1LCA1LCAyMTQsIDEyMywgMTUsIDUsIDIxNCwgMTE5LCAxNSwgNSwgMjE0LCAxMDgsIDE1LCA1LCAyMTQsIAorICAgIDEwOSwgMzAsIDIzNCwgMjEzLCAxNSwgNSwgMjE0LCAxMDcsIDE1LCA1LCAyMTAsIDExNiwgMTUsIDUsIDIxMCwgMTE3LCAKKyAgICAyMTYsIDI0MCwgMTUsIDUsIDIxMCwgMTE3LCA5MiwgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjEwLCAxMTMsIDE1LCA1LCAyMTAsIAorICAgIDEwNiwgMTUsIDUsIDIxMCwgOTMsIDE1LCA1LCAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0NSwgMTE1LCAyMTAsIDQ0LCAxNSwgNSwgCisgICAgMjEwLCA0MywgMTUsIDUsIDIxMCwgNDEsIDE1LCA1LCAyMTAsIDQyLCAyMzUsIDksIDIxNiwgMjQwLCAxNSwgNSwgMjEwLCAKKyAgICAzNiwgMTUsIDUsIDIxMCwgMjgsIDE1LCA1LCAyMTAsIDEzLCAxNSwgNSwgMjEwLCAxMSwgMTUsIDUsIDIxMCwgMTIsIDMwLCAKKyAgICA2MSwgMTUsIDUsIDIxMCwgMTAsIDE1LCA1LCAyMTAsIDksIDE1LCAxMzIsIDUsIDExMywgMjUzLCAyMzksIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTMsIAorICAgIDIzOSwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjUzLCAyMzksIDE1LCAKKyAgICAxMzIsIDUsIDI0NSwgMjAxLCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAKKyAgICAxMzQsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjQ3LCAKKyAgICAxOTUsIDE1LCAxMzIsIDUsIDIxOSwgMTI3LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDI0NywgMTk1LCAxNSwgCisgICAgMTMyLCA1LCAyNDUsIDIwMSwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgCisgICAgMjQ0LCAxOSwgNjksIDE1LCAxMzIsIDUsIDI0NCwgODksIDY5LCAxNSwgMTMyLCA1LCAyMTksIDEyNywgNjksIDE1LCAxMzIsIAorICAgIDUsIDIyMCwgMTI0LCA2OSwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIDY5LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgNjksIDE1LCAKKyAgICAxMzIsIDUsIDEyMywgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMTEzLCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAxMzQsIDI0MywgNDUsIAorICAgIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI0MywgNDUsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI0MywgNDUsIDE1LCAxMzIsIDUsIAorICAgIDIxOSwgMTI3LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIAorICAgIDI0MywgNDUsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAxMjMsIDI0MywgNDIsIDE1LCAKKyAgICAxMzIsIDUsIDExMywgMjQzLCA0MiwgMTUsIDEzMiwgNSwgMTM0LCAyNDMsIDQyLCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNDMsIAorICAgIDQyLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNDMsIDQyLCAxNSwgMTMyLCA1LCAxMTMsIDIyMCwgODAsIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDgxLCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgCisgICAgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDIyMCwgODAsIDE1LCAKKyAgICAxMzIsIDUsIDIyMCwgMTI0LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgCisgICAgMjI4LCAyMDUsIDIyMCwgODAsIDE1LCAxMzIsIDUsIDEyMywgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMTEzLCAyMjAsIDc1LCAKKyAgICAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3NiwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIAorICAgIDUsIDI0NCwgMTksIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDI0NCwgODksIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDIyMCwgODEsIAorICAgIDMwLCAyNDMsIDEyNiwgOTYsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyMjAsIDgxLCAzMCwgMjQzLCAxMjYsIDk2LCAyMzAsIAorICAgIDE5MywgMTUsIDEzMiwgNSwgMTIzLCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTEzLCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgCisgICAgMTM0LCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTM0LCAyNTEsIDEwNCwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgCisgICAgMTksIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTM0LCAyMTQsIDEyLCAKKyAgICAyNDQsIDI4LCAyNDUsIDgyLCAxNSwgMTMyLCA1LCAxMzQsIDIxNCwgMTIsIDI0NCwgMjgsIDI0NSwgNzksIDE1LCAxMzIsIDUsIAorICAgIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgMjgsIDIzMiwgMjIzLCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIAorICAgIDI4LCAyMzIsIDIyMSwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjMyLCAyMjQsIDYxLCAxNSwgCisgICAgMTMyLCA1LCAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzIsIDIyNCwgMjUzLCAxNjYsIDE1LCAxMzIsIDUsIDIxOSwgCisgICAgMTI3LCAyMTQsIDEyLCAyNDQsIDI4LCAyNTMsIDIzNiwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDIxNCwgMTIsIDI0NCwgMjgsIAorICAgIDIzNiwgMTUsIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDE3LCA2MSwgMTUsIDEzMiwgNSwgCisgICAgMjIwLCAxMjQsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMTcsIDI1MywgMTY2LCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgMjE0LCAKKyAgICAxMiwgMjQ0LCAyOCwgMjE0LCAxMjEsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAyMTQsIDEyLCAyNDQsIDI4LCAyMTQsIDEyMCwgCisgICAgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMzEsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAKKyAgICAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDMwLCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAKKyAgICAyOSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMzIsIDYxLCAxNSwgMTMyLCA1LCAxMTMsIAorICAgIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMTM0LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIDUsIDI0NCwgCisgICAgMTksIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCAKKyAgICA1LCAyMTksIDEyNywgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAxMjMsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAKKyAgICAxMTMsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAxMzQsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNTIsIDE1OCwgCisgICAgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjUyLCAxNTksIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTIsIAorICAgIDE1OCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUyLCAxNTksIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyMjgsIDIxNSwgCisgICAgMTUsIDEzMiwgNSwgMjI4LCAyMTYsIDE1LCAxMzIsIDUsIDEyMywgMjQ1LCA3OCwgMTUsIDEzMiwgNSwgMTEzLCAyNDUsIDc4LCAKKyAgICAxNSwgMTMyLCA1LCAxMjMsIDIxNiwgMTcwLCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMTEzLCAyMTYsIDE2OCwgMjQ3LCAxOTUsIAorICAgIDE1LCAxMzIsIDUsIDI0NCwgODksIDIxOSwgMTE2LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMTIzLCAyMTYsIDE3MCwgMjE0LCAKKyAgICAxMiwgMjQ0LCAyOCwgNjEsIDE1LCAxMzIsIDUsIDExMywgMjE2LCAxNjgsIDIxNCwgMTIsIDI0NCwgMjgsIDYxLCAxNSwgCisgICAgMTMyLCA1LCAxMjMsIDI0NSwgMTk3LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMTIzLCAyMjQsIDI1LCAyNTMsIDIzOSwgMTUsIAorICAgIDEzMiwgNSwgNTUsIDI1MywgMjI3LCAxMjMsIDIxOSwgMTE3LCAxNSwgMTMyLCA1LCA1NSwgMjUzLCAyMjcsIDEyMywgMjI0LCAKKyAgICAyNCwgMTUsIDIyNCwgMTQ0LCA1LCA1NSwgMjUzLCAyMjcsIDIxMSwgMjA5LCAyNDcsIDE4MCwgMTUsIDIyNCwgMTQ0LCA1LCAKKyAgICA2NywgMjQ5LCAyMzQsIDE1LCAyMjQsIDE0NCwgNSwgMjQ4LCA3LCAyNDksIDIzNCwgMTUsIDIyNCwgMTQ0LCA1LCAyNDgsIDcsIAorICAgIDIxNSwgMjIyLCAxMiwgMTMsIDI1NSwgMTY0LCAxMiwgMTMsIDI1NSwgMTYzLCAxMiwgMTMsIDI1NSwgMTYyLCAxMiwgMTMsIAorICAgIDI1NSwgMTYxLCAxMiwgMTMsIDI1NSwgMTYwLCAxMiwgMTMsIDI1NSwgMTU5LCAxMiwgMTMsIDI1NSwgMTU4LCAxMiwgMTMsIAorICAgIDI1NSwgMTU3LCAxMiwgMTMsIDI1NSwgMTU2LCAxMiwgMTMsIDI1NSwgMTU1LCAxMiwgMTMsIDI1NSwgMTU0LCAxMiwgMTMsIAorICAgIDI1NSwgMTUzLCAxMiwgMTMsIDI1NSwgMTUyLCAxMiwgMTMsIDI1NSwgMTUxLCAxMiwgMTMsIDI1NSwgMTUwLCAxMiwgMTMsIAorICAgIDI1NSwgMTQ5LCAxMiwgMTMsIDI1NSwgMTQ4LCAxMiwgMTMsIDI1NSwgMTQ3LCAxMiwgMTMsIDI1NSwgMTQ2LCAxMiwgMTMsIAorICAgIDI1NSwgMTQ1LCAxMiwgMTMsIDI1NSwgMTQ0LCAxMiwgMTMsIDI1NSwgMTQzLCAxMiwgMTMsIDI1NSwgMTQyLCAxMiwgMTMsIAorICAgIDI1NSwgMTQxLCAxMiwgMTMsIDI1NSwgMTQwLCAxMiwgMTMsIDI1NSwgMTM5LCAxMiwgMTMsIDI1NSwgMTM4LCAxMiwgMTMsIAorICAgIDI1NSwgMTM3LCAxMiwgMTMsIDI1NSwgMTM2LCAxMiwgMTMsIDI1NSwgMTM1LCAxMiwgMTMsIDI1NSwgMTM0LCAxMiwgMTMsIAorICAgIDI1NSwgMTMzLCAxMiwgMTMsIDI1NSwgMTMyLCAxMiwgMTMsIDI1NSwgMTMxLCAxMiwgMTMsIDI1NSwgMTMwLCAxMiwgMTMsIAorICAgIDI1NSwgMTI5LCAxMiwgMTMsIDI1NSwgMTI4LCAxMiwgMTMsIDI1NSwgMTI3LCAxMiwgMTMsIDI1NSwgMTI2LCAxMiwgMTMsIAorICAgIDI1NSwgMTI1LCAxMiwgMTMsIDI1NSwgMTI0LCAxMiwgMTMsIDI1NSwgMTIzLCAxMiwgMTMsIDI1NSwgMTIyLCAxMiwgMTMsIAorICAgIDI1NSwgMTIxLCAxMiwgMTMsIDI1NSwgMTIwLCAxMiwgMTMsIDI1NSwgMTE5LCAxMiwgMTMsIDI1NSwgMTE4LCAxMiwgMTMsIAorICAgIDI1NSwgMTE3LCAxMiwgMTMsIDI1NSwgMTE2LCAxMiwgMTMsIDI1NSwgMTE1LCAxMiwgMTMsIDI1NSwgMTE0LCAxMiwgMTMsIAorICAgIDI1NSwgMTEzLCAxMiwgMTMsIDI1NSwgMTEyLCAxMiwgMTMsIDI1NSwgMTExLCAxMiwgMTMsIDI1NSwgMTEwLCAxMiwgMTMsIAorICAgIDI1NSwgMTA5LCAxMiwgMTMsIDI1NSwgMTA4LCAxMiwgMTMsIDI1NSwgMTA3LCAxMiwgMTMsIDI1NSwgMTA2LCAxMiwgMTMsIAorICAgIDI1NSwgMTA1LCAxMiwgMTMsIDI1NSwgMTA0LCAxMiwgMTMsIDI1NSwgMTAzLCAxMiwgMTMsIDI1NSwgMTAyLCAxMiwgMTMsIAorICAgIDI1NSwgMTAxLCAxMiwgMTMsIDI1NSwgMTAwLCAxMiwgMTMsIDI1NSwgOTksIDEyLCAxMywgMjU1LCA5OCwgMTIsIDEzLCAKKyAgICAyNTUsIDk3LCAxMiwgMTMsIDI1NSwgOTYsIDEyLCAxMywgMjU1LCA5NSwgMTIsIDEzLCAyNTUsIDk0LCAxMiwgMTMsIDI1NSwgCisgICAgOTMsIDEyLCAxMywgMjU1LCA5MiwgMTIsIDEzLCAyNTUsIDkxLCAxMiwgMTMsIDI1NSwgOTAsIDEyLCAxMywgMjU1LCA4OSwgCisgICAgMTIsIDEzLCAyNTUsIDg4LCAxMiwgMTMsIDI1NSwgODcsIDEyLCAxMywgMjU1LCA4NiwgMTIsIDEzLCAyNTUsIDg1LCAxMiwgCisgICAgMTMsIDI1MywgMTY0LCAxMiwgMTMsIDI1MywgMTYyLCAxMiwgMTMsIDI1MywgMTYwLCAxMiwgMTMsIDI1MywgMTU4LCAxMiwgCisgICAgMTMsIDI1MywgMTU2LCAxMiwgMTMsIDI1MywgMTU1LCAxMiwgMTMsIDI1MywgMTUzLCAxMiwgMTMsIDI1MywgMTUxLCAxMiwgCisgICAgMTMsIDI1MywgMTQ5LCAxMiwgMTMsIDI1MywgMTQ3LCAxMiwgMTMsIDI1MSwgNzAsIDEyLCAxMywgMjUxLCA2OSwgMTIsIDEzLCAKKyAgICAyNTEsIDY4LCAxMiwgMTMsIDI1MSwgNjcsIDEyLCAxMywgMjUxLCA2NiwgMTIsIDEzLCAyNTEsIDY1LCAxMiwgMTMsIDI1MSwgCisgICAgNjQsIDEyLCAxMywgMjUxLCA2MywgMTIsIDEzLCAyNTEsIDYyLCAxMiwgMTMsIDI1MSwgNjEsIDEyLCAxMywgMjUxLCA2MCwgCisgICAgMTIsIDEzLCAyNTEsIDU5LCAxMiwgMTMsIDI1MSwgNTgsIDEyLCAxMywgMjUxLCA1NywgMTIsIDEzLCAyNTEsIDU2LCAxMiwgCisgICAgMTMsIDI1MSwgNTUsIDEyLCAxMywgMjUxLCA1NCwgMTIsIDEzLCAyNTEsIDUzLCAxMiwgMTMsIDI1MSwgNTIsIDEyLCAxMywgCisgICAgMjUxLCA1MSwgMTIsIDEzLCAyNTEsIDUwLCAxMiwgMTMsIDI1MSwgNDksIDEyLCAxMywgMjUxLCA0OCwgMTIsIDEzLCAyNTEsIAorICAgIDQ3LCAxMiwgMTMsIDI1MSwgNDYsIDEyLCAxMywgMjUxLCA0NSwgMTIsIDEzLCAyNTEsIDQ0LCAxMiwgMTMsIDI1MSwgNDMsIAorICAgIDEyLCAxMywgMjQ5LCA2NywgMTIsIDEzLCAyNDksIDY2LCAxMiwgMTMsIDI0OSwgNjUsIDEyLCAxMywgMjQ5LCA2NCwgMTIsIAorICAgIDEzLCAyNDksIDYzLCAxMiwgMTMsIDI0OSwgNjIsIDEyLCAxMywgMjQ5LCA2MSwgMTIsIDEzLCAyNDksIDYwLCAxMiwgMTMsIAorICAgIDI0OSwgNTksIDEyLCAxMywgMjQ5LCA1OCwgMTIsIDEzLCAyNDksIDU3LCAxMiwgMTMsIDI0OSwgNTYsIDEyLCAxMywgMjQ5LCAKKyAgICA1NSwgMTIsIDEzLCAyNDksIDU0LCAxMiwgMTMsIDI0OSwgNTMsIDEyLCAxMywgMjQ5LCA1MiwgMTIsIDEzLCAyNDksIDUxLCAKKyAgICAxMiwgMTMsIDI0OSwgNTAsIDEyLCAxMywgMjQ5LCA0OSwgMTIsIDEzLCAyNDksIDQ4LCAxMiwgMTMsIDI0OSwgNDcsIDEyLCAKKyAgICAxMywgMjQ5LCA0NiwgMTIsIDEzLCAyNDksIDQ1LCAxMiwgMTMsIDI0OSwgNDQsIDEyLCAxMywgMjQ5LCA0MywgMTIsIDEzLCAKKyAgICAyNDksIDQyLCAxMiwgMTMsIDI0OSwgNDEsIDEyLCAxMywgMjQ5LCA0MCwgMTIsIDEzLCAyNDksIDM5LCAxMiwgMTMsIDI0OSwgCisgICAgMzgsIDEyLCAxMywgMjQ5LCAzNywgMTIsIDEzLCAyNDksIDM2LCAxMiwgMTMsIDI0OSwgMzUsIDEyLCAxMywgMjQ5LCAzNCwgCisgICAgMTIsIDEzLCAyNDksIDMzLCAxMiwgMTMsIDI0OSwgMzIsIDEyLCAxMywgMjQ5LCAzMSwgMTIsIDEzLCAyNDksIDMwLCAxMiwgCisgICAgMTMsIDI0OSwgMjksIDEyLCAxMywgMjQ5LCAyOCwgMTIsIDEzLCAyNDksIDI3LCAxMiwgMTMsIDI0OSwgMjYsIDEyLCAxMywgCisgICAgMjQ5LCAyNSwgMTIsIDEzLCAyNDksIDI0LCAxMiwgMTMsIDI0OSwgMjMsIDEyLCAxMywgMjQ5LCAyMiwgMTIsIDEzLCAyNDksIAorICAgIDIxLCAxMiwgMTMsIDI0OSwgMjAsIDEyLCAxMywgMjQ5LCAxOSwgMTIsIDEzLCAyNDksIDE4LCAxMiwgMTMsIDI0OSwgMTcsIAorICAgIDEyLCAxMywgMjQ5LCAxNiwgMTIsIDEzLCAyNDksIDE1LCAxMiwgMTMsIDI0OSwgMTQsIDEyLCAxMywgMjQ5LCAxMywgMTIsIAorICAgIDEzLCAyNDksIDEyLCAxMiwgMTMsIDI0OSwgMTEsIDEyLCAxMywgMjQ5LCAxMCwgMTIsIDEzLCAyNDksIDksIDEyLCAxMywgCisgICAgMjQ5LCA4LCAxMiwgMTMsIDI0OSwgNywgMTIsIDEzLCAyNDksIDYsIDEyLCAxMywgMjQ5LCA1LCAxMiwgMTMsIDI0OSwgNCwgCisgICAgMTIsIDEzLCAyNDksIDMsIDEyLCAxMywgMjQ5LCAyLCAxMiwgMTMsIDI0OSwgMSwgMTIsIDEzLCAyNDksIDAsIDEyLCAxMywgCisgICAgMjQ4LCAyNTUsIDEyLCAxMywgMjQ4LCAyNTQsIDEyLCAxMywgMjQ4LCAyNTMsIDEyLCAxMywgMjQ4LCAyNTIsIDEyLCAxMywgCisgICAgMjQ4LCAyNTEsIDEyLCAxMywgMjQ4LCAyNTAsIDEyLCAxMywgMjQ4LCAyNDksIDEyLCAxMywgMjQ4LCAyNDgsIDEyLCAxMywgCisgICAgMjQ4LCAyNDcsIDEyLCAxMywgMjQ4LCAyNDYsIDEyLCAxMywgMjQ4LCAyNDUsIDEyLCAxMywgMjQ4LCAyNDQsIDEyLCAxMywgCisgICAgMjQ4LCAyNDMsIDEyLCAxMywgMjQ4LCAyNDIsIDEyLCAxMywgMjQ4LCAyNDEsIDEyLCAxMywgMjQ4LCAyNDAsIDEyLCAxMywgCisgICAgMjQ4LCAyMzksIDEyLCAxMywgMjQ4LCAyMzgsIDEyLCAxMywgMjQ4LCAyMzcsIDEyLCAxMywgMjQ4LCAyMzYsIDEyLCAxMywgCisgICAgMjQ4LCAyMzUsIDEyLCAxMywgMjQ4LCAyMzQsIDEyLCAxMywgMjQ4LCAyMzMsIDEyLCAxMywgMjQ4LCAyMzIsIDEyLCAxMywgCisgICAgMjQ2LCAzMSwgMTIsIDEzLCAyNDYsIDMwLCAxMiwgMTMsIDI0NiwgMjksIDEyLCAxMywgMjQ2LCAyOCwgMTIsIDEzLCAyNDYsIAorICAgIDI3LCAxMiwgMTMsIDI0NiwgMjYsIDEyLCAxMywgMjQ2LCAyNSwgMTIsIDEzLCAyNDYsIDI0LCAxMiwgMTMsIDI0NiwgMjMsIAorICAgIDEyLCAxMywgMjQ2LCAyMiwgMTIsIDEzLCAyNDYsIDIxLCAxMiwgMTMsIDI0NiwgMjAsIDEyLCAxMywgMjQ2LCAxOSwgMTIsIAorICAgIDEzLCAyNDYsIDE4LCAxMiwgMTMsIDI0NiwgMTcsIDEyLCAxMywgMjQ2LCAxNiwgMTIsIDEzLCAyNDYsIDE1LCAxMiwgMTMsIAorICAgIDI0NiwgMTQsIDEyLCAxMywgMjQ2LCAxMywgMTIsIDEzLCAyNDYsIDEyLCAxMiwgMTMsIDI0NiwgMTEsIDEyLCAxMywgMjQ2LCAKKyAgICAxMCwgMTIsIDEzLCAyNDYsIDksIDEyLCAxMywgMjQ2LCA4LCAxMiwgMTMsIDI0NiwgNywgMTIsIDEzLCAyNDYsIDYsIDEyLCAKKyAgICAxMywgMjQ2LCA1LCAxMiwgMTMsIDI0NiwgNCwgMTIsIDEzLCAyNDYsIDMsIDEyLCAxMywgMjQ2LCAyLCAxMiwgMTMsIDI0NiwgCisgICAgMSwgMTIsIDEzLCAyNDYsIDAsIDEyLCAxMywgMjQ1LCAyNTUsIDEyLCAxMywgMjQ1LCAyNTQsIDEyLCAxMywgMjQ1LCAyNTMsIAorICAgIDEyLCAxMywgMjQ1LCAyNTIsIDEyLCAxMywgMjQ1LCAyNTEsIDEyLCAxMywgMjQ1LCAyNTAsIDEyLCAxMywgMjQ1LCAyNDksIAorICAgIDEyLCAxMywgMjQ1LCAyNDgsIDEyLCAxMywgMjQ1LCAyNDcsIDEyLCAxMywgMjQ1LCAyNDYsIDEyLCAxMywgMjQ1LCAyNDUsIAorICAgIDEyLCAxMywgMjQ1LCAyNDQsIDEyLCAxMywgMjQ1LCAxMywgMTIsIDEzLCAyNDUsIDEyLCAxMiwgMTMsIDI0NSwgMTEsIDEyLCAKKyAgICAxMywgMjQ1LCAxMCwgMTIsIDEzLCAyNDUsIDksIDEyLCAxMywgMjQ1LCA4LCAxMiwgMTMsIDI0NSwgNywgMTIsIDEzLCAyNDUsIAorICAgIDYsIDEyLCAxMywgMjQ1LCA1LCAxMiwgMTMsIDI0NSwgNCwgMTIsIDEzLCAyNDUsIDMsIDEyLCAxMywgMjQ1LCAyLCAxMiwgCisgICAgMTMsIDI0NSwgMSwgMTIsIDEzLCAyNDUsIDAsIDEyLCAxMywgMjQ0LCAyNTUsIDEyLCAxMywgMjQ0LCAyNTQsIDEyLCAxMywgCisgICAgMjQ0LCAyNTMsIDEyLCAxMywgMjQ0LCAyNTIsIDEyLCAxMywgMjQ0LCAyNTEsIDEyLCAxMywgMjQ0LCAyNTAsIDEyLCAxMywgCisgICAgMjQ0LCAyNDksIDEyLCAxMywgMjQ0LCAyNDgsIDEyLCAxMywgMjQ0LCAyNDcsIDEyLCAxMywgMjQ0LCAyNDYsIDEyLCAxMywgCisgICAgMjQ0LCAyNDUsIDEyLCAxMywgMjQ0LCAyNDQsIDEyLCAxMywgMjQ0LCAyNDMsIDEyLCAxMywgMjQ0LCAyNDIsIDEyLCAxMywgCisgICAgMjQ0LCAyNDEsIDEyLCAxMywgMjQ0LCAyNDAsIDEyLCAxMywgMjQ0LCAyMzksIDEyLCAxMywgMjQ0LCAyMzgsIDEyLCAxMywgCisgICAgMjQ0LCAyMzcsIDEyLCAxMywgMjQ0LCAyMzYsIDEyLCAxMywgMjQ0LCAyMzUsIDEyLCAxMywgMjQ0LCAyMzQsIDEyLCAxMywgCisgICAgMjQ0LCAyMzMsIDEyLCAxMywgMjQ0LCAyMzIsIDEyLCAxMywgMjQ0LCAyMzEsIDEyLCAxMywgMjQ0LCAyMzAsIDEyLCAxMywgCisgICAgMjQ0LCAyMjksIDEyLCAxMywgMjQ0LCAyMjgsIDEyLCAxMywgMjQ0LCAyMjcsIDEyLCAxMywgMjQ0LCAyMjYsIDEyLCAxMywgCisgICAgMjQ0LCAyMjUsIDEyLCAxMywgMjQ0LCAyMjQsIDEyLCAxMywgMjQ0LCAyMjMsIDEyLCAxMywgMjQ0LCAyMjIsIDEyLCAxMywgCisgICAgMjQ0LCAyMjEsIDEyLCAxMywgMjQ0LCAyMjAsIDEyLCAxMywgMjQ0LCAyMTksIDEyLCAxMywgMjQ0LCAyMTgsIDEyLCAxMywgCisgICAgMjQ0LCAyMTcsIDEyLCAxMywgMjQ0LCAyMTYsIDEyLCAxMywgMjQ0LCAyMTUsIDEyLCAxMywgMjQ0LCAyMTQsIDEyLCAxMywgCisgICAgMjQ0LCAyMTMsIDEyLCAxMywgMjQ0LCAyMTIsIDEyLCAxMywgMjQ0LCAyMTEsIDEyLCAxMywgMjQ0LCAyMTAsIDEyLCAxMywgCisgICAgMjQ0LCAyMDksIDEyLCAxMywgMjQ0LCAyMDgsIDEyLCAxMywgMjQ0LCAyMDcsIDEyLCAxMywgMjQ0LCAyMDYsIDEyLCAxMywgCisgICAgMjQ0LCAyMDUsIDEyLCAxMywgMjQzLCAyMDgsIDEyLCAxMywgMjQzLCAyMDcsIDEyLCAxMywgMjQzLCAyMDYsIDEyLCAxMywgCisgICAgMjQzLCAyMDUsIDEyLCAxMywgMjQzLCAyMDQsIDEyLCAxMywgMjQzLCAyMDMsIDEyLCAxMywgMjQzLCAyMDIsIDEyLCAxMywgCiAgICAgMjQzLCAyMDEsIDEyLCAxMywgMjQzLCAyMDAsIDEyLCAxMywgMjQzLCAxOTksIDEyLCAxMywgMjQzLCAxOTgsIDEyLCAxMywgCiAgICAgMjQzLCAxOTcsIDEyLCAxMywgMjQzLCAxOTYsIDEyLCAxMywgMjQzLCAxOTUsIDEyLCAxMywgMjQzLCAxOTQsIDEyLCAxMywgCiAgICAgMjQzLCAxOTMsIDEyLCAxMywgMjQzLCAxOTIsIDEyLCAxMywgMjQzLCAxOTEsIDEyLCAxMywgMjQzLCAxOTAsIDEyLCAxMywgCkBAIC0xMjAxNSw4MSArMTIwMTYsODAgQEAKICAgICAyNDMsIDE1NywgMTIsIDEzLCAyNDMsIDE1NiwgMTIsIDEzLCAyNDMsIDE1NSwgMTIsIDEzLCAyNDMsIDE1NCwgMTIsIDEzLCAKICAgICAyNDMsIDE1MywgMTIsIDEzLCAyNDMsIDE1MiwgMTIsIDEzLCAyNDMsIDE1MSwgMTIsIDEzLCAyNDMsIDE1MCwgMTIsIDEzLCAKICAgICAyNDMsIDE0OSwgMTIsIDEzLCAyNDMsIDE0OCwgMTIsIDEzLCAyNDMsIDE0NywgMTIsIDEzLCAyNDMsIDE0NiwgMTIsIDEzLCAKLSAgICAyNDMsIDE0NSwgMTIsIDEzLCAyNDMsIDE0NCwgMTIsIDEzLCAyNDMsIDE0MywgMTIsIDEzLCAyNDMsIDE0MiwgMTIsIDEzLCAKLSAgICAyNDMsIDE0MSwgMTIsIDEzLCAyNDMsIDE0MCwgMTIsIDEzLCAyNDMsIDEzOSwgMTIsIDEzLCAyNDMsIDEzOCwgMTIsIDEzLCAKLSAgICAyNDIsIDU4LCAxMiwgMTMsIDI0MiwgNTcsIDEyLCAxMywgMjQyLCA1NiwgMTIsIDEzLCAyNDIsIDU1LCAxMiwgMTMsIDI0MiwgCi0gICAgNTQsIDEyLCAxMywgMjQyLCA1MywgMTIsIDEzLCAyNDIsIDUyLCAxMiwgMTMsIDI0MiwgNTEsIDEyLCAxMywgMjQyLCA1MCwgCisgICAgMjQzLCAxNDUsIDEyLCAxMywgMjQyLCA2NSwgMTIsIDEzLCAyNDIsIDY0LCAxMiwgMTMsIDI0MiwgNjMsIDEyLCAxMywgMjQyLCAKKyAgICA2MiwgMTIsIDEzLCAyNDIsIDYxLCAxMiwgMTMsIDI0MiwgNjAsIDEyLCAxMywgMjQyLCA1OSwgMTIsIDEzLCAyNDIsIDU4LCAKKyAgICAxMiwgMTMsIDI0MiwgNTcsIDEyLCAxMywgMjQwLCAxNDUsIDEyLCAxMywgMjQwLCAxNDQsIDEyLCAxMywgMjQwLCAxNDMsIAorICAgIDEyLCAxMywgMjQwLCAxNDIsIDEyLCAxMywgMjQwLCAxNDEsIDEyLCAxMywgMjQwLCAxNDAsIDEyLCAxMywgMjQwLCAxMzksIAogICAgIDEyLCAxMywgMjQwLCAxMzgsIDEyLCAxMywgMjQwLCAxMzcsIDEyLCAxMywgMjQwLCAxMzYsIDEyLCAxMywgMjQwLCAxMzUsIAogICAgIDEyLCAxMywgMjQwLCAxMzQsIDEyLCAxMywgMjQwLCAxMzMsIDEyLCAxMywgMjQwLCAxMzIsIDEyLCAxMywgMjQwLCAxMzEsIAogICAgIDEyLCAxMywgMjQwLCAxMzAsIDEyLCAxMywgMjQwLCAxMjksIDEyLCAxMywgMjQwLCAxMjgsIDEyLCAxMywgMjQwLCAxMjcsIAotICAgIDEyLCAxMywgMjQwLCAxMjYsIDEyLCAxMywgMjQwLCAxMjUsIDEyLCAxMywgMjQwLCAxMjQsIDEyLCAxMywgMjQwLCAxMjMsIAotICAgIDEyLCAxMywgMjQwLCAxMjIsIDEyLCAxMywgMjQwLCAxMjEsIDEyLCAxMywgMjQwLCAxMjAsIDEyLCAxMywgMjM1LCAyMiwgCi0gICAgMTIsIDEzLCAyMzUsIDIxLCAxMiwgMTMsIDIzNSwgMjAsIDEyLCAxMywgMjM1LCAxOSwgMTIsIDEzLCAyMzUsIDE4LCAxMiwgCi0gICAgMTMsIDIzNSwgMTcsIDEyLCAxMywgMjM1LCAxNiwgMTIsIDEzLCAyMzUsIDE1LCAxMiwgMTMsIDIzMywgMTQ2LCAxMiwgMTMsIAotICAgIDIzMywgMTQ1LCAxMiwgMTMsIDIzMywgMTQ0LCAxMiwgMTMsIDIzMywgMTQzLCAxMiwgMTMsIDIzMywgMTQyLCAxMiwgMTMsIAotICAgIDIzMywgMTQxLCAxMiwgMTMsIDIzMywgMTQwLCAxMiwgMTMsIDIzMywgMTM5LCAxMiwgMTMsIDIzMywgMTM4LCAxMiwgMTMsIAotICAgIDIzMywgMTM3LCAxMiwgMTMsIDIzMiwgNDksIDEyLCAxMywgMjMyLCA0OCwgMTIsIDEzLCAyMzIsIDQ3LCAxMiwgMTMsIDIzMiwgCi0gICAgNDYsIDEyLCAxMywgMjMyLCA0NSwgMTIsIDEzLCAyMzIsIDQ0LCAxMiwgMTMsIDIzMiwgNDMsIDEyLCAxMywgMjMyLCA0MiwgCi0gICAgMTIsIDEzLCAyMzIsIDQxLCAxMiwgMTMsIDIzMiwgNDAsIDEyLCAxMywgMjMyLCAzOSwgMTIsIDEzLCAyMzIsIDM4LCAxMiwgCi0gICAgMTMsIDIzMiwgMzcsIDEyLCAxMywgMjMyLCAzNiwgMTIsIDEzLCAyMzIsIDM1LCAxMiwgMTMsIDIzMiwgMzQsIDEyLCAxMywgCi0gICAgMjMyLCAzMywgMTIsIDEzLCAyMzIsIDMyLCAxMiwgMTMsIDIzMiwgMzEsIDEyLCAxMywgMjMyLCAzMCwgMTIsIDEzLCAyMzIsIAotICAgIDI5LCAxMiwgMTMsIDIzMiwgMjgsIDEyLCAxMywgMjMyLCAyNywgMTIsIDEzLCAyMzIsIDI2LCAxMiwgMTMsIDIzMiwgMjUsIAotICAgIDEyLCAxMywgMjMyLCAyNCwgMTIsIDEzLCAyMzIsIDIzLCAxMiwgMTMsIDIzMiwgMjIsIDEyLCAxMywgMjMyLCAyMSwgMTIsIAotICAgIDEzLCAyMzIsIDIwLCAxMiwgMTMsIDIzMiwgMTksIDEyLCAxMywgMjMyLCAxOCwgMTIsIDEzLCAyMzIsIDE3LCAxMiwgMTMsIAotICAgIDIzMiwgMTYsIDEyLCAxMywgMjMyLCAxNSwgMTIsIDEzLCAyMzIsIDE0LCAxMiwgMTMsIDIzMiwgMTMsIDEyLCAxMywgMjMyLCAKLSAgICAxMiwgMTIsIDEzLCAyMzIsIDExLCAxMiwgMTMsIDIzMiwgMTAsIDEyLCAxMywgMjMyLCA5LCAxMiwgMTMsIDIzMiwgOCwgMTIsIAotICAgIDEzLCAyMzIsIDcsIDEyLCAxMywgMjMyLCA2LCAxMiwgMTMsIDIzMiwgNSwgMTIsIDEzLCAyMzIsIDQsIDEyLCAxMywgMjMyLCAKLSAgICAzLCAxMiwgMTMsIDIzMiwgMiwgMTIsIDEzLCAyMzIsIDEsIDEyLCAxMywgMjMyLCAwLCAxMiwgMTMsIDIzMSwgMjU1LCAxMiwgCi0gICAgMTMsIDIzMSwgMjU0LCAxMiwgMTMsIDIzMSwgMjUzLCAxMiwgMTMsIDIzMSwgMjUyLCAxMiwgMTMsIDIzMSwgMjUxLCAxMiwgCi0gICAgMTMsIDIzMSwgMjUwLCAxMiwgMTMsIDIzMSwgMjQ5LCAxMiwgMTMsIDIzMSwgMjQ4LCAxMiwgMTMsIDIzMSwgMjQ3LCAxMiwgCi0gICAgMTMsIDIzMSwgMjQ2LCAxMiwgMTMsIDIzMSwgMjQ1LCAxMiwgMTMsIDIzMSwgMjQ0LCAxMiwgMTMsIDIzMSwgMjQzLCAxMiwgCi0gICAgMTMsIDIzMSwgMjQyLCAxMiwgMTMsIDIzMSwgMjQxLCAxMiwgMTMsIDIzMSwgMjQwLCAxMiwgMTMsIDIzMCwgMjIsIDEyLCAKLSAgICAxMywgMjMwLCAyMSwgMTIsIDEzLCAyMzAsIDIwLCAxMiwgMTMsIDIzMCwgMTksIDEyLCAxMywgMjMwLCAxOCwgMTIsIDEzLCAKLSAgICAyMzAsIDE3LCAxMiwgMTMsIDIzMCwgMTYsIDEyLCAxMywgMjMwLCAxNSwgMTIsIDEzLCAyMzAsIDE0LCAxMiwgMTMsIDIzMCwgCi0gICAgMTMsIDEyLCAxMywgMjMwLCAxMiwgMTIsIDEzLCAyMzAsIDExLCAxMiwgMTMsIDIzMCwgMTAsIDEyLCAxMywgMjMwLCA5LCAKLSAgICAxMiwgMTMsIDIzMCwgOCwgMTIsIDEzLCAyMzAsIDcsIDEyLCAxMywgMjMwLCA2LCAxMiwgMTMsIDIzMCwgNSwgMTIsIDEzLCAKLSAgICAyMzAsIDQsIDEyLCAxMywgMjMwLCAzLCAxMiwgMTMsIDIzMCwgMiwgMTIsIDEzLCAyMzAsIDEsIDEyLCAxMywgMjMwLCAwLCAKLSAgICAxMiwgMTMsIDIyOSwgMjU1LCAxMiwgMTMsIDIyOSwgMjU0LCAxMiwgMTMsIDIyOSwgMjUzLCAxMiwgMTMsIDIyOSwgMjUyLCAKLSAgICAxMiwgMTMsIDIyOSwgMjUxLCAxMiwgMTMsIDIyOSwgMjUwLCAxMiwgMTMsIDIyOSwgMjQ5LCAxMiwgMTMsIDIyOSwgMjQ4LCAKLSAgICAxMiwgMTMsIDIyOSwgMjQ3LCAxMiwgMTMsIDIyOSwgMjQ2LCAxMiwgMTMsIDIyOSwgMjQ1LCAxMiwgMTMsIDIyOSwgMjQ0LCAKLSAgICAxMiwgMTMsIDIyOSwgMjQzLCAxMiwgMTMsIDIyOSwgMjQyLCAxMiwgMTMsIDIyOSwgMjQxLCAxMiwgMTMsIDIyOSwgMjQwLCAKLSAgICAxMiwgMTMsIDIyOSwgMjM5LCAxMiwgMTMsIDIyOSwgMjM4LCAxMiwgMTMsIDIyOSwgMjM3LCAxMiwgMTMsIDIyOSwgMjM2LCAKLSAgICAxMiwgMTMsIDIyOSwgMjM1LCAxMiwgMTMsIDIyOSwgMjM0LCAxMiwgMTMsIDIyOSwgMjMzLCAxMiwgMTMsIDIyOSwgMjMyLCAKLSAgICAxMiwgMTMsIDIyOSwgMjMxLCAxMiwgMTMsIDIyOSwgMjMwLCAxMiwgMTMsIDIyOCwgMTM0LCAxMiwgMTMsIDIyOCwgMTMzLCAKLSAgICAxMiwgMTMsIDIyOCwgMTMyLCAxMiwgMTMsIDIyOCwgMTMxLCAxMiwgMTMsIDIyOCwgMTMwLCAxMiwgMTMsIDIyOCwgMTI5LCAKLSAgICAxMiwgMTMsIDIyOCwgMTI4LCAxMiwgMTMsIDIyOCwgMTI3LCAxMiwgMTMsIDIyOCwgMTI2LCAxMiwgMTMsIDIyOCwgMTI1LCAKLSAgICAxMiwgMTMsIDIyOCwgMTI0LCAxMiwgMTMsIDIyOCwgMTIzLCAxMiwgMTMsIDIyOCwgMTIyLCAxMiwgMTMsIDIyOCwgMTIxLCAKLSAgICAxMiwgMTMsIDIyOCwgMTIwLCAxMiwgMTMsIDIyOCwgMTE5LCAxMiwgMTMsIDIyOCwgMTE4LCAxMiwgMTMsIDIyOCwgMTE3LCAKLSAgICAxMiwgMTMsIDIyOCwgMTE2LCAxMiwgMTMsIDIyOCwgMTE1LCAxMiwgMTMsIDIyOCwgMTE0LCAxMiwgMTMsIDIyOCwgMTEzLCAKLSAgICAxMiwgMTMsIDIyNywgMjM2LCAxMiwgMTMsIDIyNywgMjM1LCAxMiwgMTMsIDIyNywgMjM0LCAxMiwgMTMsIDIyNywgMjMzLCAKLSAgICAxMiwgMTMsIDIyNywgMjMyLCAxMiwgMTMsIDIyNywgMjMxLCAxMiwgMTMsIDIyNywgMjMwLCAxMiwgMTMsIDIyNywgMjI5LCAKLSAgICAxMiwgMTMsIDIyNywgMjI4LCAxMiwgMTMsIDIyNywgMjI3LCAxMiwgMTMsIDIyNywgMjI2LCAxMiwgMTMsIDIyNywgMjI1LCAKLSAgICAxMiwgMTMsIDIyNywgMjI0LCAxMiwgMTMsIDIyNywgMjIzLCAxMiwgMTMsIDIyNywgMjIyLCAxMiwgMTMsIDIyNywgMjIxLCAKLSAgICAxMiwgMTMsIDIyNywgMjIwLCAxMiwgMTMsIDIyNywgMjE5LCAxMiwgMTMsIDIyNywgMjE4LCAxMiwgMTMsIDIyNywgMjE3LCAKLSAgICAxMiwgMTMsIDIyNywgMjE2LCAxMiwgMTMsIDIyNywgMjE1LCAxMiwgMTMsIDIyNywgMjE0LCAxMiwgMTMsIDIyNywgMjEzLCAKLSAgICAxMiwgMTMsIDIyNywgMjEyLCAxMiwgMTMsIDIyNywgMjExLCAxMiwgMTMsIDIyNywgNzYsIDEyLCAxMywgMjI3LCA3NSwgMTIsIAotICAgIDEzLCAyMjcsIDc0LCAxMiwgMTMsIDIyNywgNzMsIDEyLCAxMywgMjI3LCA3MiwgMTIsIDEzLCAyMjcsIDcxLCAxMiwgMTMsIAotICAgIDIyNywgNzAsIDEyLCAxMywgMjI3LCA2OSwgMTIsIDEzLCAyMjcsIDY4LCAxMiwgMTMsIDIyNywgNjcsIDEyLCAxMywgMjI3LCAKLSAgICA2NiwgMTIsIDEzLCAyMjcsIDY1LCAxMiwgMTMsIDIyNywgNjQsIDEyLCAxMywgMjI3LCA2MywgMTIsIDEzLCAyMjcsIDYyLCAKLSAgICAxMiwgMTMsIDIyNywgNjEsIDEyLCAxMywgMjI3LCA2MCwgMTIsIDEzLCAyMjcsIDU5LCAxMiwgMTMsIDIyNywgNTgsIDEyLCAKLSAgICAxMywgMjI3LCA1NywgMTIsIDEzLCAyMjcsIDU2LCAxMiwgMTMsIDIyNywgNTUsIDEyLCAxMywgMjI3LCA1NCwgMTIsIDEzLCAKLSAgICAyMjcsIDUzLCAxMiwgMTMsIDIyNywgNTIsIDEyLCAxMywgMjI3LCA1MSwgMTIsIDEzLCAyMjcsIDUwLCAxMiwgMTMsIDIyNywgCi0gICAgNDksIDEyLCAxMywgMjI3LCA0OCwgMTIsIDEzLCAyMjcsIDQ3LCAxMiwgMTMsIDIyNywgNDYsIDEyLCAxMywgMjI3LCA0NSwgCi0gICAgMTIsIDEzLCAyMjcsIDQ0LCAxMiwgMTMsIDIyNywgNDMsIDEyLCAxMywgMjI3LCA0MiwgMTIsIDEzLCAyMjcsIDQxLCAxMiwgCi0gICAgMTMsIDIyNywgNDAsIDEyLCAxMywgMjI3LCAzOSwgMTIsIDEzLCAyMjcsIDM4LCAxMiwgMTMsIDIyNywgMzcsIDEyLCAxMywgCi0gICAgMjI3LCAzNiwgMTIsIDEzLCAyMjcsIDM1LCAxMiwgMTMsIDIyNywgMzQsIDEyLCAxMywgMjI3LCAzMywgMTIsIDEzLCAyMjcsIAotICAgIDMyLCAxMiwgMTMsIDIyNywgMzEsIDEyLCAxMywgMjI3LCAzMCwgMTIsIDEzLCAyMjcsIDI5LCAxMiwgMTMsIDIyNywgMjgsIAotICAgIDEyLCAxMywgMjI3LCAyNywgMTIsIDEzLCAyMjcsIDI2LCAxMiwgMTMsIDIyNywgMjUsIDEyLCAxMywgMjI3LCAyNCwgMTIsIAotICAgIDEzLCAyMjcsIDIzLCAxMiwgMTMsIDIyNywgMjIsIDEyLCAxMywgMjI3LCAyMSwgMTIsIDEzLCAyMjcsIDIwLCAxMiwgMTMsIAotICAgIDIyNywgMTksIDEyLCAxMywgMjI3LCAxOCwgMTIsIDEzLCAyMjcsIDE3LCAxMiwgMTMsIDIyNywgMTYsIDEyLCAxMywgMjI3LCAKLSAgICAxNSwgMTIsIDEzLCAyMjcsIDE0LCAxMiwgMTMsIDIyNywgMTMsIDEyLCAxMywgMjI3LCAxMiwgMTIsIDEzLCAyMjcsIDExLCAKLSAgICAxMiwgMTMsIDIyNywgMTAsIDEyLCAxMywgMjI3LCA5LCAxMiwgMTMsIDIyNywgOCwgMTIsIDEzLCAyMjcsIDcsIDEyLCAxMywgCi0gICAgMjI3LCA2LCAxMiwgMTMsIDIyNywgNSwgMTIsIDEzLCAyMjcsIDQsIDEyLCAxMywgMjI3LCAzLCAxMiwgMTMsIDIyNywgMiwgCi0gICAgMTIsIDEzLCAyMjYsIDEwNCwgMTIsIDEzLCAyMjYsIDEwMywgMTIsIDEzLCAyMjYsIDEwMiwgMTIsIDEzLCAyMjYsIDEwMSwgCi0gICAgMTIsIDEzLCAyMjYsIDEwMCwgMTIsIDEzLCAyMjYsIDk5LCAxMiwgMTMsIDIyNiwgOTgsIDEyLCAxMywgMjI2LCA5NywgMTIsIAotICAgIDEzLCAyMjYsIDk2LCAxMiwgMTMsIDIyNiwgOTUsIDEyLCAxMywgMjI2LCA5NCwgMTIsIDEzLCAyMjYsIDkzLCAxMiwgMTMsIAotICAgIDIyNiwgOTIsIDEyLCAxMywgMjI0LCA5NSwgMTIsIDEzLCAyMjQsIDk0LCAxMiwgMTMsIDIyNCwgOTMsIDEyLCAxMywgMjI0LCAKLSAgICA5MiwgMTIsIDEzLCAyMjQsIDkxLCAxMiwgMTMsIDIyNCwgOTAsIDEyLCAxMywgMjI0LCA4OSwgMTIsIDEzLCAyMjMsIDIyMiwgCisgICAgMTIsIDEzLCAyMzUsIDI4LCAxMiwgMTMsIDIzNSwgMjcsIDEyLCAxMywgMjM1LCAyNiwgMTIsIDEzLCAyMzUsIDI1LCAxMiwgCisgICAgMTMsIDIzNSwgMjQsIDEyLCAxMywgMjM1LCAyMywgMTIsIDEzLCAyMzUsIDIyLCAxMiwgMTMsIDIzNSwgMjEsIDEyLCAxMywgCisgICAgMjMzLCAxNTIsIDEyLCAxMywgMjMzLCAxNTEsIDEyLCAxMywgMjMzLCAxNTAsIDEyLCAxMywgMjMzLCAxNDksIDEyLCAxMywgCisgICAgMjMzLCAxNDgsIDEyLCAxMywgMjMzLCAxNDcsIDEyLCAxMywgMjMzLCAxNDYsIDEyLCAxMywgMjMzLCAxNDUsIDEyLCAxMywgCisgICAgMjMzLCAxNDQsIDEyLCAxMywgMjMzLCAxNDMsIDEyLCAxMywgMjMyLCA1NCwgMTIsIDEzLCAyMzIsIDUzLCAxMiwgMTMsIAorICAgIDIzMiwgNTIsIDEyLCAxMywgMjMyLCA1MSwgMTIsIDEzLCAyMzIsIDUwLCAxMiwgMTMsIDIzMiwgNDksIDEyLCAxMywgMjMyLCAKKyAgICA0OCwgMTIsIDEzLCAyMzIsIDQ3LCAxMiwgMTMsIDIzMiwgNDYsIDEyLCAxMywgMjMyLCA0NSwgMTIsIDEzLCAyMzIsIDQ0LCAKKyAgICAxMiwgMTMsIDIzMiwgNDMsIDEyLCAxMywgMjMyLCA0MiwgMTIsIDEzLCAyMzIsIDQxLCAxMiwgMTMsIDIzMiwgNDAsIDEyLCAKKyAgICAxMywgMjMyLCAzOSwgMTIsIDEzLCAyMzIsIDM4LCAxMiwgMTMsIDIzMiwgMzcsIDEyLCAxMywgMjMyLCAzNiwgMTIsIDEzLCAKKyAgICAyMzIsIDM1LCAxMiwgMTMsIDIzMiwgMzQsIDEyLCAxMywgMjMyLCAzMywgMTIsIDEzLCAyMzIsIDMyLCAxMiwgMTMsIDIzMiwgCisgICAgMzEsIDEyLCAxMywgMjMyLCAzMCwgMTIsIDEzLCAyMzIsIDI5LCAxMiwgMTMsIDIzMiwgMjgsIDEyLCAxMywgMjMyLCAyNywgCisgICAgMTIsIDEzLCAyMzIsIDI2LCAxMiwgMTMsIDIzMiwgMjUsIDEyLCAxMywgMjMyLCAyNCwgMTIsIDEzLCAyMzIsIDIzLCAxMiwgCisgICAgMTMsIDIzMiwgMjIsIDEyLCAxMywgMjMyLCAyMSwgMTIsIDEzLCAyMzIsIDIwLCAxMiwgMTMsIDIzMiwgMTksIDEyLCAxMywgCisgICAgMjMyLCAxOCwgMTIsIDEzLCAyMzIsIDE3LCAxMiwgMTMsIDIzMiwgMTYsIDEyLCAxMywgMjMyLCAxNSwgMTIsIDEzLCAyMzIsIAorICAgIDE0LCAxMiwgMTMsIDIzMiwgMTMsIDEyLCAxMywgMjMyLCAxMiwgMTIsIDEzLCAyMzIsIDExLCAxMiwgMTMsIDIzMiwgMTAsIAorICAgIDEyLCAxMywgMjMyLCA5LCAxMiwgMTMsIDIzMiwgOCwgMTIsIDEzLCAyMzIsIDcsIDEyLCAxMywgMjMyLCA2LCAxMiwgMTMsIAorICAgIDIzMiwgNSwgMTIsIDEzLCAyMzIsIDQsIDEyLCAxMywgMjMyLCAzLCAxMiwgMTMsIDIzMiwgMiwgMTIsIDEzLCAyMzIsIDEsIAorICAgIDEyLCAxMywgMjMyLCAwLCAxMiwgMTMsIDIzMSwgMjU1LCAxMiwgMTMsIDIzMSwgMjU0LCAxMiwgMTMsIDIzMSwgMjUzLCAxMiwgCisgICAgMTMsIDIzMSwgMjUyLCAxMiwgMTMsIDIzMSwgMjUxLCAxMiwgMTMsIDIzMSwgMjUwLCAxMiwgMTMsIDIzMSwgMjQ5LCAxMiwgCisgICAgMTMsIDIzMSwgMjQ4LCAxMiwgMTMsIDIzMSwgMjQ3LCAxMiwgMTMsIDIzMSwgMjQ2LCAxMiwgMTMsIDIzMSwgMjQ1LCAxMiwgCisgICAgMTMsIDIzMCwgMjcsIDEyLCAxMywgMjMwLCAyNiwgMTIsIDEzLCAyMzAsIDI1LCAxMiwgMTMsIDIzMCwgMjQsIDEyLCAxMywgCisgICAgMjMwLCAyMywgMTIsIDEzLCAyMzAsIDIyLCAxMiwgMTMsIDIzMCwgMjEsIDEyLCAxMywgMjMwLCAyMCwgMTIsIDEzLCAyMzAsIAorICAgIDE5LCAxMiwgMTMsIDIzMCwgMTgsIDEyLCAxMywgMjMwLCAxNywgMTIsIDEzLCAyMzAsIDE2LCAxMiwgMTMsIDIzMCwgMTUsIAorICAgIDEyLCAxMywgMjMwLCAxNCwgMTIsIDEzLCAyMzAsIDEzLCAxMiwgMTMsIDIzMCwgMTIsIDEyLCAxMywgMjMwLCAxMSwgMTIsIAorICAgIDEzLCAyMzAsIDEwLCAxMiwgMTMsIDIzMCwgOSwgMTIsIDEzLCAyMzAsIDgsIDEyLCAxMywgMjMwLCA3LCAxMiwgMTMsIDIzMCwgCisgICAgNiwgMTIsIDEzLCAyMzAsIDUsIDEyLCAxMywgMjMwLCA0LCAxMiwgMTMsIDIzMCwgMywgMTIsIDEzLCAyMzAsIDIsIDEyLCAKKyAgICAxMywgMjMwLCAxLCAxMiwgMTMsIDIzMCwgMCwgMTIsIDEzLCAyMjksIDI1NSwgMTIsIDEzLCAyMjksIDI1NCwgMTIsIDEzLCAKKyAgICAyMjksIDI1MywgMTIsIDEzLCAyMjksIDI1MiwgMTIsIDEzLCAyMjksIDI1MSwgMTIsIDEzLCAyMjksIDI1MCwgMTIsIDEzLCAKKyAgICAyMjksIDI0OSwgMTIsIDEzLCAyMjksIDI0OCwgMTIsIDEzLCAyMjksIDI0NywgMTIsIDEzLCAyMjksIDI0NiwgMTIsIDEzLCAKKyAgICAyMjksIDI0NSwgMTIsIDEzLCAyMjksIDI0NCwgMTIsIDEzLCAyMjksIDI0MywgMTIsIDEzLCAyMjksIDI0MiwgMTIsIDEzLCAKKyAgICAyMjksIDI0MSwgMTIsIDEzLCAyMjksIDI0MCwgMTIsIDEzLCAyMjksIDIzOSwgMTIsIDEzLCAyMjksIDIzOCwgMTIsIDEzLCAKKyAgICAyMjksIDIzNywgMTIsIDEzLCAyMjksIDIzNiwgMTIsIDEzLCAyMjksIDIzNSwgMTIsIDEzLCAyMjgsIDEzOSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzOCwgMTIsIDEzLCAyMjgsIDEzNywgMTIsIDEzLCAyMjgsIDEzNiwgMTIsIDEzLCAyMjgsIDEzNSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzNCwgMTIsIDEzLCAyMjgsIDEzMywgMTIsIDEzLCAyMjgsIDEzMiwgMTIsIDEzLCAyMjgsIDEzMSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzMCwgMTIsIDEzLCAyMjgsIDEyOSwgMTIsIDEzLCAyMjgsIDEyOCwgMTIsIDEzLCAyMjgsIDEyNywgMTIsIDEzLCAKKyAgICAyMjgsIDEyNiwgMTIsIDEzLCAyMjgsIDEyNSwgMTIsIDEzLCAyMjgsIDEyNCwgMTIsIDEzLCAyMjgsIDEyMywgMTIsIDEzLCAKKyAgICAyMjgsIDEyMiwgMTIsIDEzLCAyMjgsIDEyMSwgMTIsIDEzLCAyMjgsIDEyMCwgMTIsIDEzLCAyMjgsIDExOSwgMTIsIDEzLCAKKyAgICAyMjgsIDExOCwgMTIsIDEzLCAyMjcsIDI0MSwgMTIsIDEzLCAyMjcsIDI0MCwgMTIsIDEzLCAyMjcsIDIzOSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzOCwgMTIsIDEzLCAyMjcsIDIzNywgMTIsIDEzLCAyMjcsIDIzNiwgMTIsIDEzLCAyMjcsIDIzNSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzNCwgMTIsIDEzLCAyMjcsIDIzMywgMTIsIDEzLCAyMjcsIDIzMiwgMTIsIDEzLCAyMjcsIDIzMSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzMCwgMTIsIDEzLCAyMjcsIDIyOSwgMTIsIDEzLCAyMjcsIDIyOCwgMTIsIDEzLCAyMjcsIDIyNywgMTIsIDEzLCAKKyAgICAyMjcsIDIyNiwgMTIsIDEzLCAyMjcsIDIyNSwgMTIsIDEzLCAyMjcsIDIyNCwgMTIsIDEzLCAyMjcsIDIyMywgMTIsIDEzLCAKKyAgICAyMjcsIDIyMiwgMTIsIDEzLCAyMjcsIDIyMSwgMTIsIDEzLCAyMjcsIDIyMCwgMTIsIDEzLCAyMjcsIDIxOSwgMTIsIDEzLCAKKyAgICAyMjcsIDIxOCwgMTIsIDEzLCAyMjcsIDIxNywgMTIsIDEzLCAyMjcsIDIxNiwgMTIsIDEzLCAyMjcsIDgwLCAxMiwgMTMsIAorICAgIDIyNywgNzksIDEyLCAxMywgMjI3LCA3OCwgMTIsIDEzLCAyMjcsIDc3LCAxMiwgMTMsIDIyNywgNzYsIDEyLCAxMywgMjI3LCAKKyAgICA3NSwgMTIsIDEzLCAyMjcsIDc0LCAxMiwgMTMsIDIyNywgNzMsIDEyLCAxMywgMjI3LCA3MiwgMTIsIDEzLCAyMjcsIDcxLCAKKyAgICAxMiwgMTMsIDIyNywgNzAsIDEyLCAxMywgMjI3LCA2OSwgMTIsIDEzLCAyMjcsIDY4LCAxMiwgMTMsIDIyNywgNjcsIDEyLCAKKyAgICAxMywgMjI3LCA2NiwgMTIsIDEzLCAyMjcsIDY1LCAxMiwgMTMsIDIyNywgNjQsIDEyLCAxMywgMjI3LCA2MywgMTIsIDEzLCAKKyAgICAyMjcsIDYyLCAxMiwgMTMsIDIyNywgNjEsIDEyLCAxMywgMjI3LCA2MCwgMTIsIDEzLCAyMjcsIDU5LCAxMiwgMTMsIDIyNywgCisgICAgNTgsIDEyLCAxMywgMjI3LCA1NywgMTIsIDEzLCAyMjcsIDU2LCAxMiwgMTMsIDIyNywgNTUsIDEyLCAxMywgMjI3LCA1NCwgCisgICAgMTIsIDEzLCAyMjcsIDUzLCAxMiwgMTMsIDIyNywgNTIsIDEyLCAxMywgMjI3LCA1MSwgMTIsIDEzLCAyMjcsIDUwLCAxMiwgCisgICAgMTMsIDIyNywgNDksIDEyLCAxMywgMjI3LCA0OCwgMTIsIDEzLCAyMjcsIDQ3LCAxMiwgMTMsIDIyNywgNDYsIDEyLCAxMywgCisgICAgMjI3LCA0NSwgMTIsIDEzLCAyMjcsIDQ0LCAxMiwgMTMsIDIyNywgNDMsIDEyLCAxMywgMjI3LCA0MiwgMTIsIDEzLCAyMjcsIAorICAgIDQxLCAxMiwgMTMsIDIyNywgNDAsIDEyLCAxMywgMjI3LCAzOSwgMTIsIDEzLCAyMjcsIDM4LCAxMiwgMTMsIDIyNywgMzcsIAorICAgIDEyLCAxMywgMjI3LCAzNiwgMTIsIDEzLCAyMjcsIDM1LCAxMiwgMTMsIDIyNywgMzQsIDEyLCAxMywgMjI3LCAzMywgMTIsIAorICAgIDEzLCAyMjcsIDMyLCAxMiwgMTMsIDIyNywgMzEsIDEyLCAxMywgMjI3LCAzMCwgMTIsIDEzLCAyMjcsIDI5LCAxMiwgMTMsIAorICAgIDIyNywgMjgsIDEyLCAxMywgMjI3LCAyNywgMTIsIDEzLCAyMjcsIDI2LCAxMiwgMTMsIDIyNywgMjUsIDEyLCAxMywgMjI3LCAKKyAgICAyNCwgMTIsIDEzLCAyMjcsIDIzLCAxMiwgMTMsIDIyNywgMjIsIDEyLCAxMywgMjI3LCAyMSwgMTIsIDEzLCAyMjcsIDIwLCAKKyAgICAxMiwgMTMsIDIyNywgMTksIDEyLCAxMywgMjI3LCAxOCwgMTIsIDEzLCAyMjcsIDE3LCAxMiwgMTMsIDIyNywgMTYsIDEyLCAKKyAgICAxMywgMjI3LCAxNSwgMTIsIDEzLCAyMjcsIDE0LCAxMiwgMTMsIDIyNywgMTMsIDEyLCAxMywgMjI3LCAxMiwgMTIsIDEzLCAKKyAgICAyMjcsIDExLCAxMiwgMTMsIDIyNywgMTAsIDEyLCAxMywgMjI3LCA5LCAxMiwgMTMsIDIyNywgOCwgMTIsIDEzLCAyMjcsIDcsIAorICAgIDEyLCAxMywgMjI3LCA2LCAxMiwgMTMsIDIyNiwgMTA4LCAxMiwgMTMsIDIyNiwgMTA3LCAxMiwgMTMsIDIyNiwgMTA2LCAxMiwgCisgICAgMTMsIDIyNiwgMTA1LCAxMiwgMTMsIDIyNiwgMTA0LCAxMiwgMTMsIDIyNiwgMTAzLCAxMiwgMTMsIDIyNiwgMTAyLCAxMiwgCisgICAgMTMsIDIyNiwgMTAxLCAxMiwgMTMsIDIyNiwgMTAwLCAxMiwgMTMsIDIyNiwgOTksIDEyLCAxMywgMjI2LCA5OCwgMTIsIDEzLCAKKyAgICAyMjYsIDk3LCAxMiwgMTMsIDIyNiwgOTYsIDEyLCAxMywgMjI0LCA5OCwgMTIsIDEzLCAyMjQsIDk3LCAxMiwgMTMsIDIyNCwgCisgICAgOTYsIDEyLCAxMywgMjI0LCA5NSwgMTIsIDEzLCAyMjQsIDk0LCAxMiwgMTMsIDIyNCwgOTMsIDEyLCAxMywgMjI0LCA5MiwgCisgICAgMTIsIDEzLCAyMjMsIDIyNSwgMTIsIDEzLCAyMjMsIDIyNCwgMTIsIDEzLCAyMjMsIDIyMywgMTIsIDEzLCAyMjMsIDIyMiwgCiAgICAgMTIsIDEzLCAyMjMsIDIyMSwgMTIsIDEzLCAyMjMsIDIyMCwgMTIsIDEzLCAyMjMsIDIxOSwgMTIsIDEzLCAyMjMsIDIxOCwgCiAgICAgMTIsIDEzLCAyMjMsIDIxNywgMTIsIDEzLCAyMjMsIDIxNiwgMTIsIDEzLCAyMjMsIDIxNSwgMTIsIDEzLCAyMjMsIDIxNCwgCiAgICAgMTIsIDEzLCAyMjMsIDIxMywgMTIsIDEzLCAyMjMsIDIxMiwgMTIsIDEzLCAyMjMsIDIxMSwgMTIsIDEzLCAyMjMsIDIxMCwgCkBAIC0xMjA5NywxNzI2ICsxMjA5NywxNzQzIEBACiAgICAgMTIsIDEzLCAyMjMsIDIwNSwgMTIsIDEzLCAyMjMsIDIwNCwgMTIsIDEzLCAyMjMsIDIwMywgMTIsIDEzLCAyMjMsIDIwMiwgCiAgICAgMTIsIDEzLCAyMjMsIDIwMSwgMTIsIDEzLCAyMjMsIDIwMCwgMTIsIDEzLCAyMjMsIDE5OSwgMTIsIDEzLCAyMjMsIDE5OCwgCiAgICAgMTIsIDEzLCAyMjMsIDE5NywgMTIsIDEzLCAyMjMsIDE5NiwgMTIsIDEzLCAyMjMsIDE5NSwgMTIsIDEzLCAyMjMsIDE5NCwgCi0gICAgMTIsIDEzLCAyMjMsIDE5MywgMTIsIDEzLCAyMjMsIDE5MiwgMTIsIDEzLCAyMjMsIDE5MSwgMTIsIDEzLCAyMjMsIDE5MCwgCi0gICAgMTIsIDEzLCAyMjMsIDE4OSwgMTIsIDEzLCAyMjIsIDg4LCAxMiwgMTMsIDIyMiwgODcsIDEyLCAxMywgMjIyLCA4NiwgMTIsIAotICAgIDEzLCAyMjIsIDg1LCAxMiwgMTMsIDIyMiwgODQsIDEyLCAxMywgMjIyLCA4MywgMTIsIDEzLCAyMjIsIDgyLCAxMiwgMTMsIAotICAgIDIyMiwgODEsIDEyLCAxMywgMjIyLCA4MCwgMTIsIDEzLCAyMjIsIDc5LCAxMiwgMTMsIDIyMiwgNzgsIDEyLCAxMywgMjIyLCAKLSAgICA3NywgMTIsIDEzLCAyMjIsIDc2LCAxMiwgMTMsIDIyMiwgNzUsIDEyLCAxMywgMjIyLCA3NCwgMTIsIDEzLCAyMjIsIDczLCAKLSAgICAxMiwgMTMsIDIyMiwgNzIsIDEyLCAxMywgMjIyLCA3MSwgMTIsIDEzLCAyMjIsIDcwLCAxMiwgMTMsIDIyMiwgNjksIDEyLCAKLSAgICAxMywgMjIyLCA2OCwgMTIsIDEzLCAyMjIsIDY3LCAxMiwgMTMsIDIyMiwgNjYsIDEyLCAxMywgMjIyLCA2NSwgMTIsIDEzLCAKLSAgICAyMjIsIDY0LCAxMiwgMTMsIDIyMiwgNjMsIDEyLCAxMywgMjIyLCA2MiwgMTIsIDEzLCAyMjIsIDYxLCAxMiwgMTMsIDIyMiwgCi0gICAgNjAsIDEyLCAxMywgMjIyLCA1OSwgMTIsIDEzLCAyMjIsIDU4LCAxMiwgMTMsIDIyMiwgNTcsIDEyLCAxMywgMjIyLCA1NiwgCi0gICAgMTIsIDEzLCAyMjIsIDU1LCAxMiwgMTMsIDIyMiwgNTQsIDEyLCAxMywgMjIyLCA1MywgMTIsIDEzLCAyMjIsIDUyLCAxMiwgCi0gICAgMTMsIDIyMiwgNTEsIDEyLCAxMywgMjIyLCA1MCwgMTIsIDEzLCAyMjIsIDQ5LCAxMiwgMTMsIDIyMiwgNDgsIDEyLCAxMywgCi0gICAgMjIyLCA0NywgMTIsIDEzLCAyMjIsIDQ2LCAxMiwgMTMsIDIyMiwgNDUsIDEyLCAxMywgMjIyLCA0NCwgMTIsIDEzLCAyMjIsIAotICAgIDQzLCAxMiwgMTMsIDIyMiwgNDIsIDEyLCAxMywgMjIyLCA0MSwgMTIsIDEzLCAyMjIsIDQwLCAxMiwgMTMsIDIyMiwgMzksIAotICAgIDEyLCAxMywgMjIyLCAzOCwgMTIsIDEzLCAyMjIsIDM3LCAxMiwgMTMsIDIyMiwgMzYsIDEyLCAxMywgMjIyLCAzNSwgMTIsIAotICAgIDEzLCAyMTcsIDE1MCwgMTIsIDEzLCAyMTcsIDE0OSwgMTIsIDEzLCAyMTcsIDE0OCwgMTIsIDEzLCAyMTcsIDE0NywgMTIsIAotICAgIDEzLCAyMTcsIDE0NiwgMTIsIDEzLCAyMTcsIDE0NSwgMTIsIDEzLCAyMTcsIDE0NCwgMTIsIDEzLCAyMTcsIDE0MywgMTIsIAotICAgIDEzLCAyMTcsIDE0MiwgMTIsIDEzLCAyMTcsIDE0MSwgMTIsIDEzLCAyMTcsIDE0MCwgMTIsIDEzLCAyMTcsIDEzOSwgMTIsIAotICAgIDEzLCAyMTcsIDEzOCwgMTIsIDEzLCAyMTcsIDEzNywgMTIsIDEzLCAyMTcsIDEzNiwgMTIsIDEzLCAyMTcsIDEzNSwgMTIsIAotICAgIDEzLCAyMTcsIDEzNCwgMTIsIDEzLCAyMTcsIDEzMywgMTIsIDEzLCAyMTcsIDEzMiwgMTIsIDEzLCAyMTcsIDEzMSwgMTIsIAotICAgIDEzLCAyMTcsIDEzMCwgMTIsIDEzLCAyMTcsIDEyOSwgMTIsIDEzLCAyMTcsIDEyOCwgMTIsIDEzLCAyMTcsIDEyNywgMTIsIAotICAgIDEzLCAyMTcsIDEyNiwgMTIsIDEzLCAyMTcsIDEyNSwgMTIsIDEzLCAyMTcsIDEyNCwgMTIsIDEzLCAyMTcsIDEyMywgMTIsIAotICAgIDEzLCAyMTcsIDEyMiwgMTIsIDEzLCAyMTcsIDEyMSwgMTIsIDEzLCAyMTcsIDEyMCwgMTIsIDEzLCAyMTcsIDExOSwgMTIsIAotICAgIDEzLCAyMTcsIDExOCwgMTIsIDEzLCAyMTcsIDExNywgMTIsIDEzLCAyMTcsIDExNiwgMTIsIDEzLCAyMTcsIDExNSwgMTIsIAotICAgIDEzLCAyMTcsIDExNCwgMTIsIDEzLCAyMTcsIDExMywgMTIsIDEzLCAyMTcsIDExMiwgMTIsIDEzLCAyMTcsIDExMSwgMTIsIAotICAgIDEzLCAyMTcsIDExMCwgMTIsIDEzLCAyMTcsIDEwOSwgMTIsIDEzLCAyMTcsIDEwOCwgMTIsIDEzLCAyMTcsIDEwNywgMTIsIAotICAgIDEzLCAyMTUsIDIyLCAxMiwgMTMsIDIxNSwgMjEsIDEyLCAxMywgMjE1LCAyMCwgMTIsIDEzLCAyMTUsIDE5LCAxMiwgMTMsIAotICAgIDIxNSwgMTgsIDEyLCAxMywgMjE1LCAxNywgMTIsIDEzLCAyMTUsIDE2LCAxMiwgMTMsIDIxNSwgMTUsIDEyLCAxMywgMjE1LCAKLSAgICAxNCwgMTIsIDEzLCAyMTUsIDEzLCAxMiwgMTMsIDIxNSwgMTIsIDEyLCAxMywgMjE1LCAxMSwgMTIsIDEzLCAyMTUsIDEwLCAKLSAgICAxMiwgMTMsIDIxNSwgOSwgMTIsIDEzLCAyMTUsIDgsIDEyLCAxMywgMjE1LCA3LCAxMiwgMTMsIDIxNSwgNiwgMTIsIDEzLCAKLSAgICAyMTUsIDUsIDEyLCAxMywgMjE1LCA0LCAxMiwgMTMsIDIxNSwgMywgMTIsIDEzLCAyMTUsIDIsIDEyLCAxMywgMjE1LCAxLCAKLSAgICAxMiwgMTMsIDIxNSwgMCwgMTIsIDEzLCAyMTQsIDI1NSwgMTIsIDEzLCAyMTQsIDI1NCwgMTIsIDEzLCAyMTQsIDI1MywgMTIsIAotICAgIDEzLCAyMTQsIDI1MiwgMTIsIDEzLCAyMTQsIDI1MSwgMTIsIDEzLCAyMTQsIDI1MCwgMTIsIDEzLCAyMTQsIDI0OSwgMTIsIAotICAgIDEzLCAyMTQsIDI0OCwgMTIsIDEzLCAyMTQsIDI0NywgMTIsIDEzLCAyMTQsIDI0NiwgMTIsIDEzLCAyMTQsIDI0NSwgMTIsIAotICAgIDEzLCAyMTQsIDI0NCwgMTIsIDEzLCAyMTQsIDI0MywgMTIsIDEzLCAyMTQsIDI0MiwgMTIsIDEzLCAyMTQsIDI0MSwgMTIsIAotICAgIDEzLCAyMTQsIDI0MCwgMTIsIDEzLCAyMTQsIDIzOSwgMTIsIDEzLCAyMTQsIDIzOCwgMTIsIDEzLCAyMTQsIDIzNywgMTIsIAotICAgIDEzLCAyMTQsIDIzNiwgMTIsIDEzLCAyMTQsIDIzNSwgMTIsIDEzLCAyMTQsIDIzNCwgMTIsIDEzLCAyMTQsIDIzMywgMTIsIAotICAgIDEzLCAyMTQsIDIzMiwgMTIsIDEzLCAyMTQsIDEwNCwgMTIsIDEzLCAyMTQsIDEwMywgMTIsIDEzLCAyMTQsIDEwMiwgMTIsIAotICAgIDEzLCAyMTQsIDEwMSwgMTIsIDEzLCAyMTQsIDEwMCwgMTIsIDEzLCAyMTQsIDk5LCAxMiwgMTMsIDIxNCwgOTgsIDEyLCAxMywgCi0gICAgMjE0LCA5NywgMTIsIDEzLCAyMTQsIDk2LCAxMiwgMTMsIDIxNCwgOTUsIDEyLCAxMywgMjE0LCA5NCwgMTIsIDEzLCAyMTQsIAotICAgIDkzLCAxMiwgMTMsIDIxNCwgOTIsIDEyLCAxMywgMjE0LCA5MSwgMTIsIDEzLCAyMTQsIDkwLCAxMiwgMTMsIDIxNCwgODksIAotICAgIDEyLCAxMywgMjE0LCA4OCwgMTIsIDEzLCAyMTQsIDg3LCAxMiwgMTMsIDIxNCwgODYsIDEyLCAxMywgMjE0LCA4NSwgMTIsIAotICAgIDEzLCAyMTQsIDg0LCAxMiwgMTMsIDIxNCwgODMsIDEyLCAxMywgMjE0LCA4MiwgMTIsIDEzLCAyMTQsIDgxLCAxMiwgMTMsIAotICAgIDIxNCwgODAsIDEyLCAxMywgMjE0LCA3OSwgMTIsIDEzLCAyMTQsIDc4LCAxMiwgMTMsIDIxNCwgNzcsIDEyLCAxMywgMjE0LCAKLSAgICA3NiwgMTIsIDEzLCAyMTQsIDc1LCAxMiwgMTMsIDIxNCwgNzQsIDEyLCAxMywgMjE0LCA3MywgMTIsIDEzLCAyMTQsIDcyLCAKLSAgICAxMiwgMTMsIDIxNCwgNzEsIDEyLCAxMywgMjE0LCA3MCwgMTIsIDEzLCAyMTQsIDY5LCAxMiwgMTMsIDIxNCwgNjgsIDEyLCAKLSAgICAxMywgMjE0LCA2NywgMTIsIDEzLCAyMTQsIDY2LCAxMiwgMTMsIDIxNCwgNjUsIDEyLCAxMywgMjE0LCA2NCwgMTIsIDEzLCAKLSAgICAyMTQsIDYzLCAxMiwgMTMsIDIxNCwgNjIsIDEyLCAxMywgMjE0LCA2MSwgMTIsIDEzLCAyMTQsIDYwLCAxMiwgMTMsIDIxNCwgCi0gICAgNTksIDEyLCAxMywgMjE0LCA1OCwgMTIsIDEzLCAyMTQsIDU3LCAxMiwgMTMsIDIxNCwgNTYsIDEyLCAxMywgMjE0LCA1NSwgCi0gICAgMTIsIDEzLCAyMTQsIDU0LCAxMiwgMTMsIDIxNCwgNTMsIDEyLCAxMywgMjE0LCA1MiwgMTIsIDEzLCAyMTQsIDUxLCAxMiwgCi0gICAgMTMsIDIxNCwgNTAsIDEyLCAxMywgMjE0LCA0OSwgMTIsIDEzLCAyMTQsIDQ4LCAxMiwgMTMsIDIxNCwgNDcsIDEyLCAxMywgCi0gICAgMjE0LCA0NiwgMTIsIDEzLCAyMTQsIDQ1LCAxMiwgMTMsIDIxNCwgNDQsIDEyLCAxMywgMjE0LCA0MywgMTIsIDEzLCAyMTQsIAotICAgIDQyLCAxMiwgMTMsIDIxNCwgNDEsIDEyLCAxMywgMjE0LCA0MCwgMTIsIDEzLCAyMTQsIDM5LCAxMiwgMTMsIDIxNCwgMzgsIAotICAgIDEyLCAxMywgMjE0LCAzNywgMTIsIDEzLCAyMTQsIDM2LCAxMiwgMTMsIDIxNCwgMzUsIDEyLCAxMywgMjE0LCAzNCwgMTIsIAotICAgIDEzLCAyMTQsIDMzLCAxMiwgMTMsIDIxNCwgMzIsIDEyLCAxMywgMjE0LCAzMSwgMTIsIDEzLCAyMTQsIDMwLCAxMiwgMTMsIAotICAgIDIxNCwgMjksIDEyLCAxMywgMjE0LCAyOCwgMTIsIDEzLCAyMTIsIDk3LCAxMiwgMTMsIDIxMiwgOTYsIDEyLCAxMywgMjEyLCAKLSAgICA5NSwgMTIsIDEzLCAyMTIsIDk0LCAxMiwgMTMsIDIxMiwgOTMsIDEyLCAxMywgMjEyLCA5MiwgMTIsIDEzLCAyMTIsIDkxLCAKLSAgICAxMiwgMTMsIDIxMiwgOTAsIDEyLCAxMywgMjEyLCA4OSwgMTIsIDEzLCAyMTIsIDg4LCAxMiwgMTMsIDIxMiwgODcsIDEyLCAKLSAgICAxMywgMjEyLCA4NiwgMTIsIDEzLCAyMTIsIDg1LCAxMiwgMTMsIDIxMiwgODQsIDEyLCAxMywgMjEyLCA4MywgMTIsIDEzLCAKLSAgICAyMTIsIDgyLCAxMiwgMTMsIDIxMiwgODEsIDEyLCAxMywgMjEyLCA4MCwgMTIsIDEzLCAyMTIsIDc5LCAxMiwgMTMsIDIxMiwgCi0gICAgNzgsIDEyLCAxMywgMjEyLCA3NywgMTIsIDEzLCAyMTIsIDc2LCAxMiwgMTMsIDIxMiwgNzUsIDEyLCAxMywgMjEyLCA3NCwgCi0gICAgMTIsIDEzLCAyMTIsIDczLCAxMiwgMTMsIDIxMiwgNzIsIDEyLCAxMywgMjEyLCA3MSwgMTIsIDEzLCAyMTIsIDcwLCAxMiwgCi0gICAgMTMsIDIxMiwgNjksIDEyLCAxMywgMjEyLCA2OCwgMTIsIDEzLCAyMTIsIDY3LCAxMiwgMTMsIDIxMiwgNjYsIDEyLCAxMywgCi0gICAgMjExLCAxNzcsIDEyLCAxMywgMjExLCAxNzYsIDEyLCAxMywgMjExLCAxNzUsIDEyLCAxMywgMjExLCAxNzQsIDEyLCAxMywgCi0gICAgMjExLCAxNzMsIDEyLCAxMywgMjExLCAxNzIsIDEyLCAxMywgMjExLCAxNzEsIDEyLCAxMywgMjExLCAxNzAsIDEyLCAxMywgCi0gICAgMjExLCAxNjksIDEyLCAxMywgMjExLCAxNjgsIDEyLCAxMywgMjExLCAxNjcsIDEyLCAxMywgMjExLCAxNjYsIDEyLCAxMywgCi0gICAgMjExLCAxMTUsIDEyLCAxMywgMjExLCAxMTQsIDEyLCAxMywgMjExLCAxMTMsIDEyLCAxMywgMjExLCAxMTIsIDEyLCAxMywgCi0gICAgMjExLCAxMTEsIDEyLCAxMywgMjExLCAxMTAsIDEyLCAxMywgMjExLCAxMDksIDEyLCAxMywgMjExLCAxMDgsIDEyLCAxMywgCi0gICAgMjExLCAxMDcsIDEyLCAxMywgMjEwLCAxNTgsIDEyLCAxMywgMjEwLCAxNTcsIDEyLCAxMywgMjEwLCAxNTYsIDEyLCAxMywgCi0gICAgMjEwLCAxNTUsIDEyLCAxMywgMjEwLCAxNTQsIDEyLCAxMywgMjEwLCAxNTMsIDEyLCAxMywgMjEwLCAxNTIsIDEyLCAxMywgCi0gICAgMjEwLCAxNTEsIDEyLCAxMywgMjEwLCAxNTAsIDEyLCAxMywgMjEwLCAxNDksIDEyLCAxMywgMjEwLCAxNDgsIDEyLCAxMywgCi0gICAgMjEwLCAxNDcsIDEyLCAxMywgMjEwLCAxNDYsIDEyLCAxMywgMjEwLCAxNDUsIDEyLCAxMywgMjEwLCAxNDQsIDEyLCAxMywgCi0gICAgMjEwLCAxNDMsIDEyLCAxMywgMjEwLCAxNDIsIDEyLCAxMywgMjEwLCAxNDEsIDEyLCAxMywgMjEwLCAxNDAsIDEyLCAxMywgCi0gICAgMjEwLCAxMzksIDEyLCAxMywgMjEwLCAxMzgsIDEyLCAxMywgMjEwLCAxMzcsIDEyLCAxMywgMjEwLCAxMzYsIDEyLCAxMywgCi0gICAgMjEwLCAxMzUsIDEyLCAxMywgMjEwLCAxMzQsIDEyLCAxMywgMjEwLCAxMzMsIDEyLCAxMywgMjEwLCAxMzIsIDEyLCAxMywgCi0gICAgMjEwLCAxMzEsIDEyLCAxMywgMjEwLCAxMzAsIDEyLCAxMywgMjEwLCAxMjksIDEyLCAxMywgMjEwLCAxMjgsIDEyLCAxMywgCi0gICAgMjEwLCAxMjcsIDEyLCAxMywgMjEwLCAxMjYsIDEyLCAxMywgMjEwLCAxMjUsIDEyLCAxMywgMjEwLCAxMjQsIDEyLCAxMywgCi0gICAgMjEwLCAxMjMsIDEyLCAxMywgMjEwLCAxMjIsIDEyLCAxMywgMjEwLCAxMjEsIDEyLCAxMywgMjEwLCAxMjAsIDEyLCAxMywgCi0gICAgMjEwLCAxMTksIDEyLCAxMywgMjEwLCAxMTgsIDEyLCAxMywgMjU1LCA3MiwgMTIsIDEzLCAyNTUsIDcxLCAxMiwgMTMsIAotICAgIDI1NSwgNzAsIDEyLCAxMywgMjU1LCA2OSwgMTIsIDEzLCAyNTUsIDY4LCAxMiwgMTMsIDI1NSwgNjcsIDEyLCAxMywgMjU1LCAKLSAgICA2NiwgMTIsIDEzLCAyNTUsIDY1LCAxMiwgMTMsIDI1NSwgNjQsIDEyLCAxMywgMjU1LCA2MywgMTIsIDEzLCAyNTUsIDYyLCAKLSAgICAxMiwgMTMsIDI1NSwgNjEsIDEyLCAxMywgMjU1LCA2MCwgMTIsIDEzLCAyNTUsIDU5LCAxMiwgMTMsIDI1NSwgNTgsIDEyLCAKLSAgICAxMywgMjU1LCA1NywgMTIsIDEzLCAyNTUsIDU2LCAxMiwgMTMsIDI1NSwgNTUsIDEyLCAxMywgMjU1LCA1NCwgMTIsIDEzLCAKLSAgICAyNTUsIDUzLCAxMiwgMTMsIDI1NSwgNTIsIDEyLCAxMywgMjU1LCA1MSwgMTIsIDEzLCAyNTUsIDUwLCAxMiwgMTMsIDI1NSwgCi0gICAgNDksIDEyLCAxMywgMjU1LCA0OCwgMTIsIDEzLCAyNTUsIDQ3LCAxMiwgMTMsIDI1NSwgNDYsIDEyLCAxMywgMjU1LCA0NSwgCi0gICAgMTIsIDEzLCAyNTUsIDQ0LCAxMiwgMTMsIDI1NSwgNDMsIDEyLCAxMywgMjU1LCA0MiwgMTIsIDEzLCAyNTUsIDQxLCAxMiwgCi0gICAgMTMsIDI1NSwgNDAsIDEyLCAxMywgMjU1LCAzOSwgMjAsIDEsIDE2NywgMjI5LCAxMiwgMjMxLCAxNiwgMjAsIDEsIDE2NywgCi0gICAgMjQzLCA3MCwgMjQ0LCAzNiwgMjAsIDEsIDE2NywgMjI0LCAyNTEsIDIzMSwgMTcsIDIyNSwgNTcsIDIwLCAxLCAxNjcsIAotICAgIDIyNCwgMjUxLCAyMzEsIDE3LCAyMjUsIDU4LCAyMCwgMSwgMTY3LCAyMjksIDIyNiwgMjMxLCAxNiwgMjAsIDEsIDE2NywgCi0gICAgMjE5LCAyMjEsIDIwLCAxLCAxNjcsIDIxNiwgNjYsIDIzMSwgMTYsIDIwLCAxLCAxNjcsIDIyNywgMTE4LCAyMzEsIDE2LCAKLSAgICAyMCwgMSwgMTY3LCAyMjAsIDE5LCAyMjYsIDkwLCAyMjgsIDE2OSwgMjAsIDEsIDE2NywgMjI0LCAyNTEsIDIyNiwgOTAsIAotICAgIDIyOCwgMTcwLCAyMjUsIDU3LCAyMCwgMSwgMTY3LCAyMjQsIDI1MSwgMjI2LCA5MCwgMjI4LCAxNzAsIDIyNSwgNTgsIDIwLCAKLSAgICAxLCAxNjcsIDIzMSwgMjE4LCAyMCwgMSwgMTY3LCAyMTUsIDExOSwgMjMxLCAyMTksIDIwLCAxLCAxNjcsIDIyOSwgNzEsIAotICAgIDIwLCAxLCAxNjcsIDIzMSwgMjE1LCAyMCwgMSwgMTY3LCAyMzEsIDE3NiwgMjAsIDEsIDE2NywgMjMwLCA0OCwgMjAsIDEsIAotICAgIDE2NywgMjIwLCAxMjQsIDIwLCAxLCAxNjcsIDIyNywgMjQxLCAyMCwgMSwgMTY3LCAyMzQsIDE0OSwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCAxMzgsIDIwLCAxLCAxNjcsIDIxOCwgNCwgMjAsIDEsIDE2NywgMjI5LCAxMSwgMjAsIDEsIDE2NywgMjMzLCA4NywgCi0gICAgMjAsIDEsIDE2NywgMjMzLCAxMiwgMjMzLCAxODksIDIwLCAxLCAxNjcsIDIyNywgMjQ4LCAyMzEsIDI0LCAyMCwgMSwgMTY3LCAKLSAgICAyMzEsIDIyMiwgMjAsIDEsIDE2NywgMjI1LCAyNDYsIDIwLCAxLCAxNjcsIDI0MiwgMjMxLCAyMCwgMSwgMTY3LCAyMjYsIAotICAgIDUwLCAyMCwgMSwgMTY3LCAyMzAsIDE1MSwgMjI5LCA0NSwgMjAsIDEsIDE2NywgMjI3LCA5OSwgMjMxLCAyNywgMjAsIDEsIAotICAgIDE2NywgMTA0LCAyMTAsIDE4OCwgMjI5LCAyMjAsIDIwLCAxLCAxNjcsIDI0MiwgMjMyLCAyMCwgMSwgMTY3LCAyMjcsIDI0OCwgCi0gICAgMjI3LCAyNDksIDIwLCAxLCAxNjcsIDIxOSwgMTI4LCAyMCwgMSwgMTY3LCAyMzEsIDksIDIwLCAxLCAxNjcsIDIzMSwgMzAsIAotICAgIDIwLCAxLCAxNjcsIDIzMCwgMTMwLCAyMCwgMSwgMTY3LCAyMzQsIDI0OSwgMjAsIDEsIDE2NywgMjI2LCA5MCwgMjMzLCA0NywgCi0gICAgMjAsIDEsIDE2NywgMjI5LCAxNDksIDIzMywgNDcsIDIwLCAxLCAxNjcsIDIyNSwgMTU4LCAyMCwgMSwgMTY3LCAyMzEsIAotICAgIDIxNiwgMjAsIDEsIDE2NywgMjI4LCAyMDcsIDIwLCAxLCAxNjcsIDIyNCwgMTM0LCAyMCwgMSwgMTY3LCAyMTUsIDExNiwgCi0gICAgMjAsIDEsIDE2NywgMjMyLCA5NCwgMjAsIDEsIDE2NywgMjE5LCA0MSwgMjAsIDEsIDE2NywgMjE2LCAyMTYsIDIwLCAxLCAKLSAgICAxNjcsIDIzMSwgMjEzLCAyMCwgMSwgMTY3LCAyMzQsIDE1NiwgMjAsIDEsIDE2NywgMjI5LCAxNDUsIDIwLCAxLCAxNjcsIAotICAgIDIzMywgMjAxLCAyMCwgMSwgMTY3LCAyMzAsIDEzMSwgMjAsIDEsIDE2NywgMjE5LCAyMTgsIDIwLCAxLCAxNjcsIDIzMiwgCi0gICAgMTM4LCAyMCwgMSwgMTY3LCAyNDQsIDkzLCAyMCwgMSwgMTY3LCAyMjIsIDE5OSwgMjAsIDEsIDE2NywgMjMzLCAyNDEsIDIwLCAKLSAgICAxLCAxNjcsIDIxOSwgMzcsIDIwLCAxLCAxNjcsIDIzMSwgMTczLCAyMjUsIDk5LCAyMCwgMSwgMTY3LCAyMjAsIDEyLCAyMCwgCi0gICAgMSwgMTY3LCAyMjcsIDI0NywgMjAsIDEsIDE2NywgMjE5LCAyNTMsIDIyOCwgMiwgMjEwLCAxOTYsIDIwLCAxLCAxNjcsIAotICAgIDIyNywgMTM4LCAyMzAsIDE0OCwgMjAsIDEsIDE2NywgMjI2LCA4NSwgMjAsIDEsIDE2NywgMjI4LCAxMzksIDIwLCAxLCAKLSAgICAxNjcsIDIxNCwgMTcwLCAyMCwgMSwgMTY3LCAyMjksIDQ4LCAyMCwgMSwgMTY3LCAyMzEsIDIxMiwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCAxODEsIDIwLCAxLCAxNjcsIDIzMSwgMTE5LCAyMCwgMSwgMTY3LCAyMjcsIDE1MSwgMjAsIDEsIDE2NywgMjE2LCAKLSAgICAyMjAsIDIwLCAxLCAxNjcsIDIxOSwgMzQsIDIwLCAxLCAxNjcsIDIyNiwgODYsIDIwLCAxLCAxNjcsIDIyOCwgNiwgMjAsIDEsIAotICAgIDE2NywgMjMxLCAyMjAsIDIwLCAxLCAxNjcsIDIyNywgMTQ4LCAyMCwgMSwgMTY3LCAyMzQsIDIxNiwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCA5LCAyMCwgMSwgMTY3LCAyMTMsIDI1MCwgMjAsIDEsIDE2NywgMjMyLCA5OCwgMjAsIDEsIDE2NywgMjI5LCA5OCwgCi0gICAgMjAsIDEsIDE2NywgMjI5LCAxOTYsIDIwLCAxLCAxNjcsIDIzMSwgMTE4LCAyMCwgMSwgMjI1LCAxMzgsIDIyOCwgNCwgMjAsIAotICAgIDEsIDIyNSwgMTM4LCAyMTUsIDExOSwgMjMxLCAyMTcsIDIwLCAxLCAyMjUsIDEzOCwgMjE5LCAxODUsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjIwLCAxMjgsIDIxNSwgMTE4LCAyMCwgMSwgMjI1LCAxMzgsIDIzMiwgMTQwLCAyMjcsIDI0NCwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMzEsIDEyNSwgMjMxLCAyMjEsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCA4NywgMjAsIDEsIDIyNSwgMTM4LCAyMTEsIAotICAgIDE1LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTIwLCAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgMjM3LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIyNSwgMjA4LCAyMCwgMSwgMjI1LCAxMzgsIDIxMSwgODksIDIzMywgNDcsIDIwLCAxLCAyMjUsIDEzOCwgMjMzLCAKLSAgICAxMDMsIDIyOCwgMiwgMjI3LCAxNjAsIDIwLCAxLCAyMjUsIDEzOCwgMjI3LCAyNDIsIDIyMCwgMzgsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjI5LCAxMTYsIDIyOCwgMTg0LCAyMCwgMSwgMjI1LCAxMzgsIDI0MiwgMjI5LCAyMCwgMSwgMjI1LCAxMzgsIDIyNSwgCi0gICAgNDksIDIwLCAxLCAyMjUsIDEzOCwgMjE1LCAxMTksIDIyOCwgMCwgMjAsIDEsIDIyNSwgMTM4LCAyMjAsIDQzLCAyMjgsIAotICAgIDE3OSwgMjAsIDEsIDIyNSwgMTM4LCAyMjAsIDM5LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTcsIDIxNiwgMjE5LCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDIzMSwgMTA3LCAyMzEsIDEyMSwgMjAsIDEsIDIyNSwgMTM4LCAyMjcsIDE0OSwgMjI3LCAyNDQsIDIwLCAxLCAKLSAgICAyMjUsIDEzOCwgMjM0LCAxNDUsIDIwLCAxLCAyMjUsIDEzOCwgMjQyLCAyMzAsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCAxNDEsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjMzLCAxMjksIDIwLCAxLCAyMjUsIDEzOCwgMjI1LCAyNDksIDIwLCAxLCAyMjUsIDEzOCwgCi0gICAgMjEzLCAxODIsIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCAxMywgMjMwLCA0NiwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDQ3LCAKLSAgICAyMzEsIDEwMywgMjAsIDEsIDIyNSwgMTM4LCAyMTEsIDE5MywgMjAsIDEsIDIyNSwgMTM4LCAyMjIsIDExLCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDIxNywgOTcsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAyOSwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDMyLCAKLSAgICAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMzMsIDIzMywgODQsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAxOSwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMTgsIDUyLCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTExLCAyMCwgMSwgMjI1LCAxMzgsIDIzMCwgMTMzLCAyMCwgCi0gICAgMSwgMjI1LCAxMzgsIDIyNywgMTYzLCAyMCwgMSwgMjI1LCAxMzgsIDIyNCwgMTM4LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgCi0gICAgMjgsIDIyOSwgNDksIDIwLCAxLCAyMjUsIDEzOCwgMjQ0LCAxMjYsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCA5OCwgMjAsIDEsIAotICAgIDIyNSwgMTM4LCAyNDQsIDE0NywgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDE1MywgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDIzOSwgCi0gICAgMjI4LCAxNzMsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAyMzksIDIyOCwgMTQ5LCAyMCwgMSwgMjI1LCAxMzgsIDIzMywgMTEsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCA1NSwgMjAsIDEsIDIyNSwgMTM4LCAyMjgsIDExLCAyMCwgMSwgMjI1LCAxMzgsIDE4NCwgCi0gICAgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDc0LCAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMSwgMjAsIDEsIDEzNywgMjI5LCAxMiwgCi0gICAgMjMxLCAyMTksIDIwLCAxLCAxMzcsIDIyNywgMTE3LCAyMCwgMSwgMTM3LCAyMTAsIDE5NiwgMjAsIDEsIDEzNywgMjEyLCAKLSAgICA1MywgMjAsIDEsIDEzNywgMjI5LCA0OCwgMjAsIDEsIDEzNywgMjI5LCAxMzcsIDIwLCAxLCAxMzcsIDIyOSwgMTksIDIwLCAKLSAgICAxLCAxMzcsIDI0MiwgMjM5LCAyMCwgMSwgMTM3LCAyMzEsIDExNSwgMjAsIDEsIDEzNywgMjQzLCA3NywgMjAsIDEsIDEzNywgCi0gICAgMjI3LCAxNDAsIDIzMCwgMTcwLCAyMzEsIDMxLCAyMCwgMSwgMTM3LCAyMjcsIDI0MCwgMjMxLCAxMDYsIDIwLCAxLCAxMzcsIAotICAgIDIzMSwgMTEyLCAyMCwgMSwgMTM3LCAyMjUsIDU1LCAyMCwgMSwgMTM3LCAyMjksIDEyMiwgMjAsIDEsIDEzNywgMjMxLCAKLSAgICAxMjMsIDI1MSwgMjksIDIwLCAxLCAxMzcsIDIzNCwgMTQzLCAyMCwgMSwgMTM3LCAyNDIsIDI0MCwgMjAsIDEsIDEzNywgCi0gICAgMjM0LCAxNTAsIDIwLCAxLCAxMzcsIDIxMCwgMjEzLCAyMzAsIDc2LCAyMCwgMSwgMTM3LCAyMjcsIDExMSwgMjAsIDEsIAotICAgIDEzNywgMjMxLCAxMDAsIDIwLCAxLCAxMzcsIDIyOCwgMTAsIDIwLCAxLCAxMzcsIDIzMSwgMTA2LCAyMCwgMSwgMTM3LCAKLSAgICAyMTEsIDE2LCAyMCwgMSwgMTM3LCAyMzMsIDI0OSwgMjAsIDEsIDEzNywgMjM1LCAxMCwgMjAsIDEsIDEzNywgMjIwLCAxMjMsIAotICAgIDIwLCAxLCAxMzcsIDIyOSwgMTMxLCAyMCwgMSwgMTM3LCAyMTcsIDk1LCAyMCwgMSwgMTM3LCAyMjgsIDE1MywgMjAsIDEsIAotICAgIDEzNywgMjE2LCA2NiwgMjEwLCAxOTgsIDIwLCAxLCAxMzcsIDIxOCwgNzksIDIwLCAxLCAxMzcsIDIyOSwgMzksIDIyNywgCi0gICAgMTYwLCAyMCwgMSwgMTM3LCAyMTMsIDE4MSwgMjAsIDEsIDEzNywgMjI5LCAxOTksIDIwLCAxLCAxMzcsIDIzMSwgMjM5LCAKLSAgICAyMzQsIDE1MiwgMjAsIDEsIDEzNywgMjI3LCAyNDksIDIwLCAxLCAxMzcsIDIyOSwgMzQsIDIwLCAxLCAxMzcsIDIzMywgODgsIAotICAgIDIwLCAxLCAxMzcsIDIzMSwgMTA4LCAyMCwgMSwgMTM3LCAyMzEsIDgsIDIwLCAxLCAxMzcsIDIyNywgMjQzLCAyMCwgMSwgCi0gICAgMTM3LCAyMTYsIDIxNSwgMjAsIDEsIDEzNywgMjI5LCAzNiwgMjAsIDEsIDEzNywgMjQzLCAyMzMsIDIwLCAxLCAxMzcsIAotICAgIDIyOSwgMTM2LCAyMCwgMSwgMTM3LCAyMjgsIDEyLCAyMCwgMSwgMTM3LCAyMjgsIDgsIDIwLCAxLCAxMzcsIDI1MSwgMTA3LCAKLSAgICAyMCwgMSwgMTM3LCAyMTMsIDE4MywgMjAsIDEsIDEzNywgMjMxLCAxMTMsIDIwLCAxLCAxMzcsIDIyMiwgMTQwLCAyMCwgMSwgCi0gICAgMTM3LCAyMjgsIDE4MywgMjAsIDEsIDEzNywgMjMzLCAxMDIsIDIwLCAxLCAxMzcsIDIxNiwgNjQsIDIwLCAxLCAxMzcsIAotICAgIDIyNywgMjUwLCAyMjksIDEsIDIwLCAxLCAxMzcsIDIyOCwgMTc1LCAyMCwgMSwgMTM3LCAyMzQsIDE1NiwgMjAsIDEsIDEzNywgCi0gICAgMjI5LCA0MCwgMjAsIDEsIDEzNywgMjMxLCAyMTIsIDIwLCAxLCAxMzcsIDIzMSwgMTAxLCAyMCwgMSwgMTM3LCAyMzIsIDk4LCAKLSAgICAyMCwgMSwgMTM3LCAyMzMsIDE4OSwgMjAsIDEsIDEzNywgMjI4LCAxODEsIDIwLCAxLCAxMzcsIDIyOSwgMSwgMjAsIDEsIAotICAgIDEzNywgMjExLCAxODQsIDIwLCAxLCAxMzcsIDIyOSwgMzcsIDIwLCAxLCAxMzcsIDIyNywgMjUzLCAyMCwgMSwgMTM3LCAKLSAgICAyMjcsIDI0NSwgMjAsIDEsIDEzNywgMjMzLCAyMDMsIDIyOCwgMTM5LCAyMCwgMSwgMTM3LCAyMjcsIDI1MSwgMjAsIDEsIAotICAgIDEzNywgMjI5LCAxNDQsIDIwLCAxLCAxMzcsIDIzMSwgMjM5LCAyMjgsIDAsIDIwLCAxLCAxMzcsIDIxMSwgMTAzLCAyMCwgMSwgCi0gICAgMTM3LCAyMjksIDE0MywgMjAsIDEsIDEzNywgMjE5LCAyMjAsIDIwLCAxLCAxMzcsIDIyMCwgMTI2LCAyMCwgMSwgMTM3LCAKLSAgICAyMzEsIDEwOSwgMjAsIDEsIDEzNywgMjMxLCAyMTksIDIwLCAxLCAxMzcsIDIzMSwgMTE5LCAyMCwgMSwgMTM3LCAyMzQsIAotICAgIDE0NCwgMjAsIDEsIDEzNywgMjMxLCAxMTAsIDIwLCAxLCAxMzcsIDIzNCwgMTQ4LCAyMCwgMSwgMTM3LCAyMzEsIDEyMywgCi0gICAgMjI1LCAxMDMsIDIwLCAxLCAxMzcsIDIxMCwgMTc5LCAyMCwgMSwgMTM3LCAyMjgsIDE3MSwgMjAsIDEsIDEzNywgMjMwLCAKLSAgICAyMjAsIDIwLCAxLCAxMzcsIDIzMCwgMTAwLCAyMCwgMSwgMTM3LCAyMjAsIDE1LCAyMCwgMSwgMTM3LCAyMzQsIDE2NiwgCi0gICAgMjMzLCA3MCwgMjAsIDEsIDEzNywgMjM0LCAxNjYsIDI0NCwgMTYwLCAyMCwgMSwgMTM3LCAyMjksIDY5LCAyMCwgMSwgMTM3LCAKLSAgICAyMjksIDE5NiwgMjAsIDEsIDEzNywgMjMyLCAyMDAsIDIwLCAxLCAxMzcsIDIyNSwgNjUsIDIwLCAxLCAxMzcsIDIyNSwgCi0gICAgMTk5LCAyMCwgMSwgMTM3LCAyMTYsIDIzMCwgMjAsIDEsIDEwNywgMjMxLCA5OSwgMjAsIDEsIDEwNywgMjEyLCA1MSwgMjAsIAotICAgIDEsIDEwNywgMjI4LCAxNjksIDIwLCAxLCAxMDcsIDIzMSwgMTYsIDIwLCAxLCAxMDcsIDIyOCwgMTY3LCAyMCwgMSwgMTA3LCAKLSAgICAyMzIsIDIzNSwgMjAsIDEsIDEwNywgMjI4LCAxNzIsIDIwLCAxLCAxMDcsIDIyOCwgNywgMjAsIDEsIDEwNywgMjI5LCA1NCwgCi0gICAgMjAsIDEsIDEwNywgMjI3LCAxNjAsIDIwLCAxLCAxMDcsIDIxMSwgMTk0LCAyMCwgMSwgMTA3LCAyMjksIDksIDIwLCAxLCAKLSAgICAxMDcsIDIyMCwgNjEsIDIwLCAxLCAxMDcsIDIyOSwgMjAsIDIwLCAxLCAxMDcsIDIzNCwgMTUxLCAyMCwgMSwgMTA3LCAyMTYsIAotICAgIDIxNywgMjAsIDEsIDEwNywgMjIwLCA0MSwgMjAsIDEsIDEwNywgMjI4LCAxODAsIDIwLCAxLCAxMDcsIDIxOCwgNTIsIDIwLCAKLSAgICAxLCAxMDcsIDIzNCwgMTU2LCAyMCwgMSwgMTA3LCAyMTEsIDkxLCAyMCwgMSwgMTA3LCAyMzMsIDIwNCwgMjAsIDEsIDEwNywgCi0gICAgMjIxLCAyMzQsIDIwLCAxLCAxMDcsIDIzMSwgMjEsIDIwLCAxLCAxMDcsIDIyOSwgMTM1LCAyMCwgMSwgMTA3LCAyMzEsIAotICAgIDE4OCwgMjAsIDEsIDEwNywgMjMxLCAyNywgMjAsIDEsIDEwNywgMjIwLCAxMjUsIDIwLCAxLCAxMDcsIDIxMSwgMzksIDIwLCAKLSAgICAxLCAxMDcsIDIyOCwgMTc0LCAyMCwgMSwgMTA3LCAyMzQsIDE0NywgMjMxLCAxMDIsIDIwLCAxLCAxMDcsIDIyOSwgMTYsIAotICAgIDIwLCAxLCAxMDcsIDIxNSwgMTE4LCAyMCwgMSwgMTA3LCAyNDIsIDI0OCwgMjAsIDEsIDEwNywgMjI5LCA2LCAyMCwgMSwgCi0gICAgMTA3LCAyNDQsIDEyNywgMjAsIDEsIDEwNywgMjI5LCAxMzksIDIwLCAxLCAxMDcsIDIzMSwgMCwgMjAsIDEsIDEwNywgMjMzLCAKLSAgICA1LCAyMCwgMSwgMTA3LCAyMjksIDEyMSwgMjAsIDEsIDEwNywgMjMwLCAxNDcsIDIwLCAxLCAxMDcsIDIzMSwgNCwgMjAsIDEsIAotICAgIDEwNywgMjI0LCAxMTgsIDIwLCAxLCAxMDcsIDIzMSwgMiwgMjAsIDEsIDEwNywgMjMxLCAxOCwgMjAsIDEsIDEwNywgMjMyLCAKLSAgICA4NCwgMjAsIDEsIDEwNywgMjI3LCAyNTUsIDIwLCAxLCAxMDcsIDIzMSwgMTIyLCAyMCwgMSwgMTA3LCAyMzMsIDE4MCwgMjAsIAotICAgIDEsIDEwNywgMjI3LCAxNTEsIDIwLCAxLCAxMDcsIDIxNiwgMjIwLCAyMCwgMSwgMTA3LCAyMTksIDM0LCAyMCwgMSwgMTA3LCAKLSAgICAyMTAsIDE3OSwgMjAsIDEsIDEwNywgMjM0LCAxNDgsIDIwLCAxLCAxMDcsIDIyMywgMTcwLCAyMCwgMSwgMTA3LCAyMTcsIAotICAgIDEwLCAyMCwgMSwgMTA3LCAyMjksIDE3LCAyMCwgMSwgMTA3LCAyMzEsIDIzLCAyMCwgMSwgMTA3LCAyMjcsIDI1NCwgMjAsIAotICAgIDEsIDEwNywgMjM0LCAxNDYsIDIwLCAxLCAxMDcsIDIyNSwgNTksIDIwLCAxLCAxMDcsIDIyNSwgMTUyLCAyMCwgMSwgMTA3LCAKLSAgICAyMjcsIDEyNywgMjAsIDEsIDEwNywgMjMzLCAxMSwgMjAsIDEsIDEwNywgMjI5LCA1NSwgMjAsIDEsIDEwNywgMjMxLCAyMCwgCi0gICAgMjAsIDEsIDEwNywgMjI5LCAyOSwgMjAsIDEsIDEwNywgMjEwLCAxOTMsIDIwLCAxLCAxMDcsIDIyNiwgMjEsIDIwLCAxLCAKLSAgICAxMDcsIDIxMCwgMTkyLCAyMCwgMSwgMTA3LCAyMjksIDE0NCwgMjAsIDEsIDEwNywgMjI3LCAyNDQsIDIwLCAxLCAxMDcsIAotICAgIDIxOCwgODEsIDIwLCAxLCAxMDcsIDIzMywgMjA4LCAyMCwgMSwgMTA3LCAyMjksIDQ0LCAyMCwgMSwgMTA3LCAyMjksIDE0LCAKLSAgICAyMCwgMSwgMTA3LCAyMTUsIDEwMiwgMjAsIDEsIDEwNywgMjMxLCAzMSwgMjAsIDEsIDEwNywgMjMzLCAxOTgsIDIwLCAxLCAKLSAgICAxMDcsIDIyNywgMjUyLCAyMCwgMSwgMTA3LCAyMTYsIDIxOCwgMjAsIDEsIDEwNywgMjMxLCAyMTQsIDIwLCAxLCAxMDcsIAotICAgIDIyOSwgNTMsIDIwLCAxLCAxMDcsIDIzMywgNCwgMjAsIDEsIDEwNywgMjI5LCAzNSwgMjAsIDEsIDEwNywgMjI4LCAxLCAyMCwgCi0gICAgMSwgMTA3LCAyMjgsIDE1MywgMjAsIDEsIDEwNywgMjQyLCAyMzMsIDIwLCAxLCAxMDcsIDIzMywgMjE3LCAyMCwgMSwgMTA3LCAKLSAgICAyMjMsIDg0LCAyMjYsIDIwOSwgMjAsIDEsIDEwNywgMjE3LCA4NiwgMjAsIDEsIDEwNywgMjE2LCAxMCwgMjAsIDEsIDEwNywgCi0gICAgMjI3LCAxNDgsIDIwLCAxLCAxMDcsIDIyMiwgMjM5LCAyMCwgMSwgMTA3LCAyMzMsIDQ5LCAyMCwgMSwgMTA3LCAyMzEsIDc5LCAKLSAgICAyMCwgMSwgMTA3LCAxOTMsIDIwLCAxLCAxMDcsIDIxOCwgNCwgMjAsIDEsIDEwNywgMjMwLCAxMDIsIDIwLCAxLCAxMDcsIAotICAgIDIyMCwgMjcsIDIwLCAxLCAxMDcsIDIyMCwgMzcsIDIwLCAxLCAxMDcsIDIzMywgMTU1LCAyMCwgMSwgMTA3LCAyMjcsIDIzNywgCi0gICAgMjAsIDEsIDEwNywgMjE5LCAyMjUsIDIwLCAxLCAxMDcsIDIyNywgMjQ2LCAyMCwgMSwgMTA3LCAyMjUsIDIxMSwgMjAsIDEsIAotICAgIDEwNywgMjI4LCAyMzMsIDIwLCAxLCAxMDcsIDIxOSwgMjUyLCAyMCwgMSwgMTA3LCAyMjQsIDEzMywgMjAsIDEsIDEwNywgCi0gICAgMjMwLCA0NiwgMjAsIDEsIDEwNywgMjMyLCAxMTksIDIwLCAxLCAxMDcsIDIyMywgODQsIDIzMCwgOTYsIDIwLCAxLCAxMDcsIAotICAgIDIxNiwgMTE3LCAyMCwgMSwgMTA3LCAyMjcsIDIzOCwgMjAsIDEsIDEwNywgMjMxLCAxMjMsIDE5OCwgMjAsIDEsIDEwNywgCi0gICAgMjIxLCAyMzIsIDIwLCAxLCAxMDcsIDI0NCwgMTk1LCAyMCwgMSwgODIsIDIyOSwgMTQzLCAyMCwgMSwgODIsIDIxNiwgMTYsIAotICAgIDIwLCAxLCA4MiwgMjMxLCAxMTIsIDIwLCAxLCA4MiwgMjMzLCA4OCwgMjAsIDEsIDgyLCAyMTMsIDEyOCwgMjAsIDEsIDgyLCAKLSAgICAyMzIsIDEyNSwgMjAsIDEsIDgyLCAyMjYsIDg5LCAyMCwgMSwgODIsIDIxOSwgNDUsIDIwLCAxLCA4MiwgMjIzLCAxNDUsIAotICAgIDIwLCAxLCA4MiwgMjI4LCAzLCAyMCwgMSwgODIsIDIyOSwgMTE0LCAyMCwgMSwgODIsIDIyNCwgMTQ3LCAyMCwgMSwgODIsIAotICAgIDIxNywgNjIsIDIwLCAxLCA4MiwgMjI5LCAyMiwgMjAsIDEsIDgyLCAyMzMsIDI0NSwgMjAsIDEsIDgyLCAyMTEsIDE4NywgCi0gICAgMjAsIDEsIDgyLCAyMjEsIDE3MCwgMjAsIDEsIDgyLCAyMjksIDQ1LCAyMCwgMSwgODIsIDIyNiwgODYsIDIwLCAxLCA4MiwgCi0gICAgMjE2LCAxNywgMjAsIDEsIDgyLCAyMzMsIDIwMiwgMjAsIDEsIDgyLCAyMzIsIDEzOSwgMjAsIDEsIDgyLCAyMjgsIDYsIDIwLCAKLSAgICAxLCA4MiwgMjI4LCAyNTQsIDIwLCAxLCA4MiwgMjMxLCAyMjAsIDIwLCAxLCA4MiwgMjI5LCAxNSwgMjAsIDEsIDgyLCAyMjgsIAotICAgIDI1MywgMjAsIDEsIDgyLCAyMjgsIDUsIDIwLCAxLCA4MiwgMjIyLCAyMzcsIDIwLCAxLCA4MiwgMjI4LCAxNzEsIDIwLCAxLCAKLSAgICA4MiwgMjI1LCAyMTAsIDIwLCAxLCA4MiwgMjIyLCAzMSwgMjAsIDEsIDgyLCAyMjksIDMwLCAyMCwgMSwgODIsIDIzMSwgMTAsIAotICAgIDIwLCAxLCA4MiwgMjQyLCAyMjcsIDIwLCAxLCA4MiwgMjI5LCAxOCwgMjAsIDEsIDgyLCAyMjgsIDE4MiwgMjAsIDEsIDgyLCAKLSAgICAyMzEsIDE3MiwgMjAsIDEsIDgyLCAyMzIsIDEyMSwgMjAsIDEsIDgyLCAyMjksIDUwLCAyMCwgMSwgODIsIDIyOSwgMTI3LCAKLSAgICAyMCwgMSwgODIsIDIxNywgODUsIDIyNywgMjQ0LCAyMCwgMSwgODIsIDIyMCwgMTI3LCAyMCwgMSwgODIsIDIyNCwgMTQzLCAKLSAgICAyMCwgMSwgODIsIDIyOSwgMTQ3LCAyMTksIDUxLCAyMCwgMSwgODIsIDIyOSwgMzgsIDIyNywgMTYwLCAyMCwgMSwgODIsIAotICAgIDIxMSwgNCwgMjAsIDEsIDgyLCAyNDIsIDIyOCwgMjAsIDEsIDgyLCAyMTUsIDExNywgMjAsIDEsIDgyLCAyMTEsIDE5LCAyMCwgCi0gICAgMSwgODIsIDIyNSwgMTYsIDIwLCAxLCA4MiwgMjE1LCAxMDcsIDIwLCAxLCA4MiwgMjM0LCAxNTQsIDIwLCAxLCA4MiwgMjE4LCAKLSAgICA4MCwgMjAsIDEsIDgyLCAyMTYsIDIxOSwgMjAsIDEsIDgyLCAyMTMsIDE4NCwgMjAsIDEsIDgyLCAyMTIsIDYsIDIwLCAxLCAKLSAgICA4MiwgMjMzLCAxMzIsIDIwLCAxLCA4MiwgMjI0LCAxNTAsIDIwLCAxLCA4MiwgMjE3LCA5NiwgMjAsIDEsIDgyLCAyNDIsIAotICAgIDI0NywgMjAsIDEsIDgyLCAyMjksIDU5LCAyMCwgMSwgODIsIDIyMCwgNDAsIDIwLCAxLCA4MiwgMjMxLCA1LCAyMCwgMSwgCi0gICAgODIsIDIzMSwgMTE2LCAyMCwgMSwgODIsIDIyNywgMTE1LCAyMCwgMSwgODIsIDIyOCwgMTM2LCAyMCwgMSwgODIsIDI0MywgCi0gICAgNzMsIDIwLCAxLCA4MiwgMjE1LCAxMDgsIDIwLCAxLCA4MiwgMjMzLCAyMTEsIDIwLCAxLCA4MiwgMjExLCA2NywgMjAsIDEsIAotICAgIDgyLCAyMjcsIDE0OSwgMjUwLCAxNiwgMjAsIDEsIDgyLCAyMTAsIDI1MCwgMjAsIDEsIDgyLCAyMzEsIDIyLCAyMCwgMSwgCi0gICAgODIsIDIyOSwgMTMyLCAyMCwgMSwgODIsIDIyNSwgMTAwLCAyMCwgMSwgODIsIDIxMCwgMTk3LCAyMCwgMSwgODIsIDIzMywgCi0gICAgNiwgMjAsIDEsIDgyLCAyNDMsIDIzMywgMjAsIDEsIDgyLCAyNDMsIDcyLCAyMCwgMSwgODIsIDIyOSwgOCwgMjAsIDEsIDgyLCAKLSAgICAyMzQsIDE1NiwgMjAsIDEsIDgyLCAyMzEsIDIyMywgMjAsIDEsIDgyLCAyMjksIDIxLCAyMCwgMSwgODIsIDI0MiwgMjM0LCAKLSAgICAyMCwgMSwgODIsIDI0NCwgMTk2LCAyMCwgMSwgODIsIDIyNywgMjM5LCAyMCwgMSwgODIsIDIyNSwgMTUzLCAyMCwgMSwgODIsIAotICAgIDIxMSwgMTcsIDIwLCAxLCA4MiwgMjI5LCA0NiwgMjAsIDEsIDgyLCAyMjcsIDE0OSwgMjUyLCAyMywgMjAsIDEsIDgyLCAKLSAgICAyMjcsIDk1LCAyMCwgMSwgODIsIDIyNCwgMjQ3LCAyMCwgMSwgODIsIDIzMCwgMjIwLCAyMCwgMSwgODIsIDI0MywgMjMxLCAKLSAgICAyMCwgMSwgODIsIDIyOSwgMjIwLCAyMCwgMSwgODIsIDIzMCwgMTAwLCAyMCwgMSwgODIsIDI0MiwgMjMzLCAyMCwgMSwgODIsIAotICAgIDI0MywgMjM1LCA3MywgMjAsIDEsIDgyLCAyMzAsIDQ3LCAyMCwgMSwgODIsIDIyNCwgMTQ2LCAyMCwgMSwgODIsIDIyOSwgCi0gICAgMTAsIDIwLCAxLCA4MiwgMjMzLCAxODksIDIwLCAxLCA4MiwgMjI1LCA5NywgMjAsIDEsIDgyLCAyMjcsIDI0NywgMjAsIDEsIAotICAgIDgyLCAyMTEsIDE4LCAyMCwgMSwgODIsIDIyOSwgMzEsIDIwLCAxLCA4MiwgMjI2LCA5MCwgMjI1LCAxODcsIDIwLCAxLCA4MiwgCi0gICAgMjQzLCAyMzUsIDI1MSwgMTUsIDIwLCAxLCA4MiwgMjQ0LCAzNywgMjAsIDEsIDgyLCAyMjgsIDE3NiwgMjAsIDEsIDgyLCAKLSAgICA2MSwgMjAsIDEsIDgyLCAyMTYsIDEwLCAyMCwgMSwgODIsIDc2LCAyMCwgMSwgODIsIDczLCAyMCwgMSwgODIsIDIzMywgODYsIAotICAgIDIwLCAxLCA4MiwgMjI2LCA5MCwgMjI1LCAyMywgMjAsIDEsIDgyLCAyMTcsIDEwMSwgMjAsIDEsIDgyLCAyMTcsIDUxLCAyMCwgCi0gICAgMSwgODIsIDIyOSwgMTQ3LCAyMzAsIDM0LCAyNDAsIDIzNCwgMjAsIDEsIDgyLCAyMjAsIDE1LCAyMCwgMSwgODIsIDIxMSwgCi0gICAgMTQsIDIwLCAxLCA4MiwgMjI4LCAyNDcsIDIwLCAxLCA4MiwgMjEwLCAyMDIsIDIwLCAxLCA4MiwgMjEwLCAyMjcsIDIxNywgCi0gICAgMjQwLCAyMCwgMSwgODIsIDIxMCwgMjI3LCAyNDksIDE0NywgMjAsIDEsIDgyLCAyMTAsIDE4NywgMjAsIDEsIDgyLCAyMTAsIAotICAgIDE5NSwgMjAsIDEsIDgyLCAyMzQsIDE0MiwgMjAsIDEsIDgyLCAyMjUsIDE1MSwgMjAsIDEsIDgyLCAyMjgsIDE3NywgMjQ1LCAKLSAgICAxMDIsIDIwLCAxLCA4MiwgMjI0LCAxNDQsIDIwLCAxLCA4MiwgMjExLCAxOTIsIDIwLCAxLCA4MiwgMjQ0LCAxNDcsIDIwLCAKLSAgICAxLCA4MiwgMjEzLCAyNTAsIDIwLCAxLCA4MiwgMjMyLCA5OCwgMjAsIDEsIDgyLCAyMzAsIDIzMCwgMjAsIDEsIDgyLCAyMjMsIAotICAgIDUxLCAyMCwgMSwgODIsIDIyMywgMTcxLCAyMCwgMSwgODIsIDIyOCwgMjQ2LCAyMCwgMSwgODIsIDIyOSwgNzcsIDIwLCAxLCAKLSAgICA4MiwgMjIwLCA3LCAyMCwgMSwgODIsIDIxOSwgMjUyLCAyMCwgMSwgODIsIDI0MywgMjM1LCAyMjMsIDg2LCAyMCwgMSwgODIsIAotICAgIDE5NywgMjAsIDEsIDgyLCAyMjUsIDEwOCwgMjAsIDEsIDgyLCAyMzIsIDExOSwgMjAsIDEsIDgyLCAyMzQsIDI4LCAyMCwgMSwgCi0gICAgODIsIDIzMSwgNTgsIDIwLCAxLCA4MiwgMTg0LCAyMCwgMSwgODIsIDIzMSwgMTY5LCAyMCwgMSwgODIsIDIxNiwgMjIxLCAKLSAgICAyMCwgMSwgODIsIDIzNCwgOTIsIDIwLCAxLCA4MiwgMjMwLCAxNTAsIDIwLCAxLCA4MiwgMjE2LCAyNDcsIDIwLCAxLCA4MiwgCi0gICAgMjQ0LCAxNjksIDIwLCAxLCA4MiwgMjQyLCAyMjMsIDIwLCAxLCAyMjUsIDEzNywgMTc2LCAyMCwgMSwgMjI1LCAxMzcsIDcwLCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIzMywgMjE3LCAyMCwgMSwgMjI1LCAxMzcsIDI0NSwgMjA5LCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyMywgMTA4LCAyMCwgMSwgMjI1LCAxMzcsIDIxNywgODYsIDIwLCAxLCAyMjUsIDEzNywgMjI3LCAxNDgsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMjMzLCAxMzUsIDIwLCAxLCAyMjUsIDEzNywgMjIyLCAyMzksIDIwLCAxLCAyMjUsIDEzNywgMjIzLCAyOSwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMzEsIDc5LCAyMCwgMSwgMjI1LCAxMzcsIDIxNywgMTAxLCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyOSwgMTQ2LCAyMCwgMSwgMjI1LCAxMzcsIDIyOCwgMTgzLCAyMCwgMSwgMjI1LCAxMzcsIDE5MywgMjAsIDEsIDIyNSwgCi0gICAgMTM3LCAyMTgsIDQsIDIwLCAxLCAyMjUsIDEzNywgMjIwLCAyNywgMjAsIDEsIDIyNSwgMTM3LCAyMTksIDE5MSwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAyMjAsIDEyMywgMjAsIDEsIDIyNSwgMTM3LCAyMzMsIDE1NSwgMjAsIDEsIDIyNSwgMTM3LCAyMzQsIDE1NiwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMjcsIDIwOSwgMjAsIDEsIDIyNSwgMTM3LCAyMjcsIDIzNywgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMjgsIDE1NCwgMjAsIDEsIDIyNSwgMTM3LCAyMTAsIDIyNiwgMjAsIDEsIDIyNSwgMTM3LCAyMTksIDIyNSwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAxOTEsIDIwLCAxLCAyMjUsIDEzNywgMjI4LCA5LCAyMCwgMSwgMjI1LCAxMzcsIDIyNSwgMTUxLCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDIyNywgMjQ2LCAyMCwgMSwgMjI1LCAxMzcsIDIxMSwgMTkyLCAyMCwgMSwgMjI1LCAxMzcsIDIyNSwgMjExLCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIyMiwgMTQwLCAyMCwgMSwgMjI1LCAxMzcsIDIyOCwgMjMzLCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyMywgNTEsIDIwLCAxLCAyMjUsIDEzNywgMjM0LCAxNjUsIDIwLCAxLCAyMjUsIDEzNywgMjI5LCA3LCAyMCwgMSwgMjI1LCAKLSAgICAxMzcsIDIyOSwgNTYsIDIwLCAxLCAyMjUsIDEzNywgMjIwLCA3LCAyMCwgMSwgMjI1LCAxMzcsIDIyNCwgMTQ3LCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDI0NCwgMzcsIDIwLCAxLCAyMjUsIDEzNywgMjEyLCA2NSwgMjAsIDEsIDIyNSwgMTM3LCAyMzIsIDI0MSwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMzIsIDExOSwgMjAsIDEsIDIyNSwgMTM3LCAyMzQsIDI4LCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIzMSwgMTE0LCAyMCwgMSwgMjI1LCAxMzcsIDIyMywgODMsIDIwLCAxLCAyMjUsIDEzNywgMTg0LCAyMCwgMSwgMjI1LCAKLSAgICAxMzcsIDIzMCwgMTYxLCAyMCwgMSwgMjI1LCAxMzcsIDIzMSwgMTIyLCAyMCwgMSwgMjI1LCAxMzcsIDIxNiwgMjMwLCAyMCwgCi0gICAgMSwgMjI1LCAxMzcsIDIzMywgMjUxLCAyMCwgMSwgMjI1LCAxMzcsIDIyMSwgMjUxLCAyMCwgMSwgMjI1LCAxMzcsIDIxMiwgCi0gICAgMTE1LCA5NSwgMSwgMTkwLCA5NSwgMSwgMjUyLCAxOTEsIDk1LCAxLCA4LCAxOTAsIDk1LCAxLCAyMjUsIDQyLCA5NSwgMSwgCi0gICAgMTg0LCA5NSwgMSwgMjMwLCAyMzMsIDk1LCAxLCAyNTQsIDIzLCAxODQsIDk1LCAxLCAyNDQsIDE5NiwgOTUsIDEsIDIxNCwgCi0gICAgMjcsIDk1LCAxLCAyMTMsIDE3NywgOTUsIDEsIDIxNywgMTA1LCA5NSwgMSwgMjQ4LCAyMjEsIDk1LCAxLCA4LCAyMTUsIAotICAgIDE1NiwgOTUsIDEsIDgsIDIxNywgMTA1LCA5NSwgMSwgMjE1LCAxNTYsIDk1LCAxLCAyNDgsIDEzNSwgOTUsIDEsIDE5NywgCi0gICAgOTUsIDEsIDIyOCwgMjM3LCA5NSwgMSwgOCwgMjI4LCAxMTAsIDk1LCAxLCAyNTQsIDIzLCAxOTcsIDk1LCAxLCAyMjgsIAotICAgIDExMCwgOTUsIDEsIDIyOCwgOTYsIDk1LCAxLCAyMzMsIDEzNSwgOTUsIDEsIDIzMiwgNjEsIDk1LCAxLCAyMzIsIDI1NCwgCi0gICAgOTUsIDEsIDIzMiwgMjQzLCA5NSwgMSwgMjE2LCA1NiwgOTUsIDEsIDI0NywgMTUzLCA5NSwgMSwgMjE2LCA0OCwgOTUsIDEsIAotICAgIDI0NywgMTUyLCA5NSwgMSwgMTc2LCA5NSwgMSwgMjQzLCAxMzUsIDk1LCAxLCA4LCAxNzYsIDk1LCAxLCAyMjQsIDg4LCA5NSwgCi0gICAgMSwgMjI0LCA2NiwgOTUsIDEsIDIyOSwgNzcsIDk1LCAxLCAyMjksIDI4LCA5NSwgMSwgMjU0LCAyMywgMjI5LCA3NywgOTUsIAotICAgIDEsIDE2MiwgOTUsIDEsIDIxMSwgMTY1LCA5NSwgMSwgMjQyLCAyNDksIDk1LCAxLCAyNDIsIDIyNiwgOTUsIDEsIDIxNSwgCi0gICAgMTY1LCA5NSwgMSwgMjQ2LCAyNiwgOTUsIDEsIDIyNywgMTY1LCA5NSwgMSwgMjI3LCAxNTAsIDk1LCAxLCAyMTUsIDE3NSwgCi0gICAgOTUsIDEsIDI0NiwgMzMsIDk1LCAxLCA4LCAyMTUsIDE3NSwgOTUsIDEsIDgsIDI0NiwgMzMsIDk1LCAxLCAyMjMsIDEwNiwgCi0gICAgMjE1LCAxNzUsIDk1LCAxLCAyMjAsIDEwMiwgOTUsIDEsIDIxOCwgMjIzLCA5NSwgMSwgMjEwLCA4MiwgOTUsIDEsIDIxMCwgCi0gICAgMTQsIDk1LCAxLCAyMTUsIDE4MywgOTUsIDEsIDI0NiwgMzgsIDk1LCAxLCA4LCAyMTUsIDE4MywgOTUsIDEsIDIwNiwgOTUsIAotICAgIDEsIDIxMCwgMTE2LCA5NSwgMSwgMjEwLCAxNSwgOTUsIDEsIDIwOSwgMjQzLCA5NSwgMSwgMjA5LCAyMjMsIDk1LCAxLCAKLSAgICAyNTQsIDIzLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgMjE1LCA5NSwgMSwgMjA5LCAyMjIsIDk1LCAxLCAyMTIsIDY1LCA5NSwgCi0gICAgMSwgMjU0LCAyMDksIDk1LCAxLCAyNDEsIDE4OSwgOTUsIDEsIDIyOSwgMTkyLCA5NSwgNSwgMjUzLCAyMjIsIDk1LCA1LCAKLSAgICAyMjMsIDEwNiwgMjEzLCAxMzMsIDk1LCA1LCAyMjMsIDEwNiwgMjUzLCAyMjIsIDk1LCAyNSwgNSwgNjEsIDk1LCAyNSwgNSwgCi0gICAgMjU1LCA3MywgOTUsIDI1LCA1LCAyNTQsIDIwNSwgOTUsIDI1LCA1LCAyNTQsIDEyMywgOTUsIDI1LCA1LCAyNTQsIDExNSwgCi0gICAgOTUsIDI1LCA1LCA3NiwgOTUsIDI1LCA1LCAyMjYsIDE4MywgOTUsIDI1LCA1LCAyMTEsIDIyNywgOTUsIDI1LCA1LCAyMTIsIAotICAgIDk4LCA5NSwgMjUsIDUsIDc1LCA5NSwgMjUsIDUsIDI0NSwgMTUwLCA5NSwgMjUsIDUsIDI0NSwgMTM4LCA5NSwgMjUsIDUsIAotICAgIDIyNiwgMjMyLCA5NSwgMjUsIDUsIDczLCA5NSwgMjUsIDUsIDI0MCwgMTE5LCA5NSwgMjUsIDUsIDI0MCwgMTE4LCA5NSwgCi0gICAgMjUsIDUsIDI0MCwgMTE3LCA5NSwgMjUsIDUsIDIzNSwgMTg5LCA5NSwgMjUsIDUsIDIzNiwgNjAsIDk1LCAyNSwgNSwgMjM2LCAKLSAgICAzMywgOTUsIDI1LCA1LCAyMzUsIDE1NiwgOTUsIDI1LCA1LCAyMzUsIDIzMSwgOTUsIDI1LCA1LCA3MCwgOTUsIDI1LCA1LCAKLSAgICAyMTQsIDIyOSwgOTUsIDI1LCA1LCAyMTQsIDIyOCwgOTUsIDI1LCA1LCAyMTQsIDIyNywgOTUsIDI1LCA1LCAyMTQsIDExOCwgCi0gICAgOTUsIDI1LCA1LCAyMTQsIDIxMSwgOTUsIDI1LCA1LCAyMTQsIDE3OCwgOTUsIDI1LCA1LCAyMTEsIDExNywgOTUsIDI1LCA1LCAKLSAgICAyMTEsIDgsIDk1LCAyNSwgNSwgMjU0LCAyNDMsIDk1LCAyNSwgNSwgMjU0LCAyMzksIDk1LCAyNSwgNSwgMjQ1LCA4NiwgOTUsIAotICAgIDI1LCA1LCAyMjIsIDE4MywgMjQ1LCA4NiwgOTUsIDI1LCA1LCAyNDUsIDkyLCA5NSwgMjUsIDUsIDIyMiwgMTgzLCAyNDUsIAotICAgIDkyLCA5NSwgMjUsIDUsIDI1NCwgMjAxLCA5NSwgMjUsIDUsIDI0NSwgMTk1LCA5NSwgMjUsIDUsIDI1MywgMTkyLCA5NSwgCi0gICAgMjUsIDUsIDIyNiwgMTM0LCA5NSwgMjUsIDUsIDIzMCwgMjUsIDk1LCAyNSwgNSwgMjI5LCA3OSwgOTUsIDEzOCwgMjIyLCAKLSAgICAyNTEsIDk1LCAxMzgsIDIxNiwgMTQsIDIyMiwgMjUxLCA5NSwgMTM4LCA0OCwgOTUsIDEzOCwgNTEsIDk1LCAxLCAyMTYsIAotICAgIDI4LCA5NSwgMSwgMjE2LCAyNywgOTUsIDEsIDIxNiwgMjYsIDk1LCAxLCAyMTYsIDI1LCA5NSwgMSwgMjE2LCAyNCwgOTUsIAotICAgIDEsIDIxNiwgMjMsIDk1LCAxLCAyMTYsIDIyLCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjksIDk1LCAxLCAyMjMsIDEwNiwgCi0gICAgMjE2LCAyOCwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDI2LCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjUsIDk1LCAxLCAyMjMsIAotICAgIDEwNiwgMjE2LCAyNCwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDIyLCA1NiwgMSwgMjU0LCAyMywgNzUsIDE0MSwgMSwgMjU0LCAKLSAgICAyMywgMjExLCA0NywgNDksIDI4LCAxNiwgMjI0LCAxNTQsIDQ5LCAyOCwgMTYsIDI0OCwgMTU4LCA0OSwgMjgsIDE2LCAyMjUsIAotICAgIDE3NSwgNDksIDI4LCAxNiwgMjI2LCAxMTMsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyMjYsIDExMywgMjQ3LCAyMDEsIDQ5LCAKLSAgICAyOCwgMTYsIDIxNCwgMTYsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyNDcsIDIwMSwgNDksIDI4LCAxNiwgCi0gICAgMjM0LCAxOTcsIDQ5LCAyOCwgMTYsIDIxNywgMTY5LCA0OSwgMjgsIDE2LCAyMjYsIDksIDQ5LCAyOCwgMTYsIDIxMCwgMjE3LCAKLSAgICA0OSwgMjgsIDE2LCAyMTAsIDIxOCwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIDIzMywgMjM0LCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDY4LCAyNDUsIDE3OCwgNDksIDI4LCAxNiwgMjQ1LCAyNiwgMjQ1LCAxNzgsIDQ5LCAyOCwgMTYsIDIxNywgMiwgNDksIDI4LCAKLSAgICAxNiwgMjM0LCAxNjEsIDQ5LCAyOCwgMTYsIDI1NCwgNTgsIDQ5LCAyOCwgMTYsIDI1NCwgNTksIDI0NywgMjAxLCA0OSwgMjgsIAotICAgIDE2LCAyMTcsIDE3NSwgNDksIDI4LCAxNiwgMjE2LCAxNTksIDQ5LCAyOCwgMTYsIDIyNiwgMjA2LCAyNTQsIDIxLCA0OSwgCi0gICAgMjgsIDE2LCAyNDIsIDE1OSwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjI0LCAxNTMsIDQ5LCAyOCwgMTYsIDI1MCwgMTQ5LCAKLSAgICA0OSwgMjgsIDE2LCAyMTQsIDYsIDQ5LCAyOCwgMTYsIDIzNSwgMTY0LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgCi0gICAgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjM0LCAxNjIsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIyMSwgMjEzLCA0OSwgMjgsIDE2LCAKLSAgICAyMjYsIDAsIDQ5LCAyOCwgMTYsIDIxOCwgMTQ2LCAyNTQsIDYxLCA0OSwgMjgsIDE2LCAyMjYsIDExMiwgMjU0LCAyMSwgNDksIAotICAgIDI4LCAxNiwgMjE0LCAxNSwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjU0LCA2MiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjU0LCAKLSAgICA1NiwgNDksIDI4LCAxNiwgMjM0LCAzNywgNDksIDI4LCAxNiwgMjIzLCA0NiwgNDksIDI4LCAxNiwgMjI1LCAxMDYsIDI1NCwgCi0gICAgMjEsIDQ5LCAyOCwgMTYsIDIxNiwgODMsIDQ5LCAyOCwgMTYsIDI1NCwgMTIxLCA0OSwgMjgsIDE2LCAyMjEsIDE1OSwgNDksIAotICAgIDI4LCAxNiwgMjE3LCAxNzgsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIxNywgMTc4LCAyMzEsIDQwLCAyMTgsIDE0NCwgNDksIAotICAgIDI4LCAxNiwgMjI2LCAxMDcsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIxNiwgMTkwLCA0OSwgMjgsIDE2LCAyMzMsIDI3LCA0OSwgCi0gICAgMjgsIDE2LCAyNDYsIDQxLCA0OSwgMjgsIDE2LCAyMTUsIDIyNywgNDksIDI4LCAxNiwgMjE2LCAyMzIsIDQ5LCAyOCwgMTYsIAotICAgIDIzMywgMjM3LCA0OSwgMjgsIDE2LCAyNTQsIDY4LCAyNDUsIDI2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgCi0gICAgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjM2LCAxMiwgNDksIDI4LCAxNiwgMjE1LCAxOTksIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIAotICAgIDIzNCwgMjAwLCAyMTUsIDE5OCwgNDksIDI4LCAxNiwgMjI1LCAyMDAsIDQ5LCAyOCwgMTYsIDIyNCwgMTU4LCA0OSwgMjgsIAotICAgIDE2LCAyMzQsIDExLCA0OSwgMjgsIDE2LCAyNTAsIDgwLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMjMsIDE0NiwgNDksIDI4LCAKLSAgICAxNiwgMjI2LCAxMiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjI2LCAxMCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjQwLCAxMDksIAotICAgIDQ5LCAyOCwgMTYsIDIyOSwgMjAzLCA0OSwgMjgsIDE2LCAyMjUsIDE1NiwgNDksIDI4LCAxNiwgMjM0LCAxMiwgMjU0LCAKLSAgICAxNDksIDQ5LCAyOCwgMTYsIDIxNSwgMTk5LCAyNTQsIDE0OSwgNDksIDI4LCAxNiwgMjE4LCAxMjMsIDQ5LCAyOCwgMTYsIAotICAgIDI0MiwgMTIzLCA0OSwgMjgsIDE2LCAyMzUsIDE2NCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI2LCAyMDYsIDIyOSwgOTUsIAotICAgIDQ5LCAyOCwgMTYsIDIyNiwgMTEzLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjUsIDE1NSwgNDksIDI4LCAxNiwgMjMzLCAKLSAgICAyNTQsIDQ5LCAyOCwgMTYsIDIyNSwgMTU0LCA0OSwgMjgsIDE2LCAyMzMsIDIzNiwgNDksIDI4LCAxNiwgMjI1LCAyMDEsIAotICAgIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAyMjksIDk2LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgCi0gICAgMjI5LCA5NiwgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjEwLCAyMTUsIDQ5LCAyOCwgMTYsIDI1NCwgNTksIDIyOSwgOTUsIDQ5LCAKLSAgICAyOCwgMTYsIDI1NCwgNjAsIDIxNywgMTc2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMTAsIDIxNiwgNDksIDI4LCAxNiwgCi0gICAgMjMzLCAyMzUsIDQ5LCAyOCwgMTYsIDI0NSwgMTczLCA0OSwgMjgsIDE2LCAyNTAsIDE1MCwgNDksIDI4LCAxNiwgMjMwLCAKLSAgICAxOTgsIDIzNSwgMTYzLCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjUsIDEwNiwgMjI5LCAKLSAgICA5NSwgNDksIDI4LCAxNiwgMjI0LCAxNTksIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNiwgMjAzLCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDg0LCA0OSwgMjgsIDE2LCAyMzIsIDU4LCA0OSwgMjgsIDE2LCAyMjYsIDEwLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjYsIAotICAgIDEyLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNDUsIDYwLCAyMjYsIDExLCA0OSwgMjgsIDE2LCAyMzMsIDE1MywgNDksIDI4LCAKLSAgICAxNiwgMjU0LCA4NSwgNDksIDI4LCAxNiwgMjE1LCAxOTksIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDI0NSwgMTc2LCA0OSwgMjgsIAotICAgIDE2LCAyMTcsIDE3OCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjE3LCAxNzAsIDQ5LCAyOCwgMTYsIDI1MCwgODAsIDIyOSwgCi0gICAgOTUsIDQ5LCAyOCwgMTYsIDI0NSwgMTA2LCA0OSwgMjgsIDE2LCAyMjEsIDE2MCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjExLCAKLSAgICAxNTEsIDIzNCwgMzcsIDQ5LCAyOCwgMTYsIDIxNSwgMTk2LCA0OSwgMjgsIDE2LCAyMjQsIDE2MCwgNDksIDI4LCAxNiwgCi0gICAgMjE1LCAyMDAsIDQ5LCAyOCwgMTYsIDIxNSwgMTk3LCA0OSwgMjgsIDE2LCAyMjQsIDE1NywgNDksIDI4LCAxNiwgMjE1LCAKLSAgICAxOTUsIDQ5LCAyOCwgMTYsIDIyNCwgMTU2LCA0OSwgMjgsIDE2LCAyNDIsIDE1OCwgNDksIDI4LCAxNiwgMjU0LCAxNCwgNDksIAotICAgIDI4LCAxNiwgMjQ1LCA2MCwgMjU0LCAxNCwgNDksIDI4LCAxNiwgMjI2LCAxMDcsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIxNiwgCi0gICAgMTg5LCAyNDUsIDY5LCA0OSwgMjgsIDE2LCAyMTYsIDE4OSwgMjQ1LCAyNSwgNDksIDI4LCAxNiwgMjE2LCAxOTEsIDI1NCwgCi0gICAgNjMsIDQ5LCAyOCwgMTYsIDIxNiwgMTg0LCAyMzQsIDI0NywgMjU0LCA1NSwgNDksIDI4LCAxNiwgMjM0LCAxOTksIDQ5LCAKLSAgICAyOCwgMTYsIDI0NSwgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIDExLCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgMjExLCAxMSwgCi0gICAgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjE4LCAxNDUsIDQ5LCAyOCwgMTYsIDIzNCwgMzgsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjAyLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzMsIDIzOCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjMzLCAyMzgsIAotICAgIDI1NCwgMTQ5LCA0OSwgMjgsIDE2LCAyMzMsIDIzOCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjU0LCA2MiwgMjI5LCA5NSwgCi0gICAgNDksIDI4LCAxNiwgMjU0LCA2NCwgNDksIDI4LCAxNiwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIDIxNSwgMjEwLCA0OSwgMjgsIAotICAgIDE2LCAyMTYsIDIyNCwgNDksIDI4LCAxNiwgMjM0LCAyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAyNDUsIDEzNCwgMjUwLCA3MSwgCi0gICAgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjQ2LCA0MiwgMjUwLCA3MiwgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjE1LCAyMTIsIAotICAgIDI1MCwgNzIsIDQ5LCAyOCwgMTYsIDIzMywgMzIsIDIxNiwgMjM0LCAyNTAsIDcyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAKLSAgICAyMzYsIDcsIDI1MCwgNzEsIDQ5LCAyOCwgMTYsIDI0MiwgMTU5LCAyMjksIDk2LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyNDIsIAotICAgIDE1OSwgMjI2LCAxLCAyNTQsIDEwLCA0OSwgMjgsIDE2LCAyNDIsIDE1OSwgMjI2LCAxLCAyNDgsIDI5LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDIyNSwgNDksIDI4LCAxNiwgMjQ3LCAyMjYsIDIyNiwgMSwgMjU0LCAxMSwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjI2LCAyMjYsIDEsIDI1NCwgMTEsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDI0NywgMjI2LCAyMjYsIDEsIDI0OCwgCi0gICAgMjksIDQ5LCAyOCwgMTYsIDIxNSwgMjE2LCA0OSwgMjgsIDE2LCAyNTQsIDE1LCA0OSwgMjgsIDE2LCAyMzYsIDE0LCA0OSwgCi0gICAgMjgsIDE2LCAyNDcsIDI0NiwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIyNSwgMCwgMjU0LCAxNiwgNDksIDI4LCAxNiwgMjU0LCAKLSAgICAyMTEsIDI1NCwgMTMsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyNTQsIDE2LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjMxLCAKLSAgICAzNCwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIzMSwgNDUsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyNDIsIDE2MCwgNDksIAotICAgIDI4LCAxNiwgMjU0LCAyMTEsIDI0MiwgMTU3LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjI1LCAwLCAyNDIsIDE2MCwgNDksIAotICAgIDI4LCAxNiwgMjMxLCAxNTEsIDIyNCwgMTY1LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDI1NCwgMTUxLCAKLSAgICAyMjQsIDE2NSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyNDgsIDI4LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgCi0gICAgMjMxLCAxNTEsIDI1NCwgMTUxLCAyNDgsIDI4LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNSwgMjA1LCAKLSAgICAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNSwgMjE3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE2LCAyMjgsIAotICAgIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE2LCAyMjgsIDIzMywgMzUsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAKLSAgICAyMzEsIDE1MSwgMjMzLCAzNSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMjUsIDM5LCAyNDAsIDEwNywgNDksIAotICAgIDI4LCAxNiwgMjM1LCAxNjksIDIxNiwgMjUxLCAyNDAsIDEwOCwgNDksIDI4LCAxNiwgMjU0LCA2MCwgMjE2LCAyNTEsIDI0MCwgCi0gICAgMTA4LCA0OSwgMjgsIDE2LCAyNDQsIDE3MiwgMjE2LCAyMjUsIDQ5LCAyOCwgMTYsIDI0NCwgMTcyLCAyMzAsIDE0MywgNDksIAotICAgIDI4LCAxNiwgMjQ0LCAxNzIsIDI0NywgMjMwLCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE0LCAxMCwgMjQwLCAxMDcsIDQ5LCAKLSAgICAyOCwgMTYsIDIzMSwgMTUxLCAyMjQsIDE2NCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMjUsIDM5LCAyMTYsIAotICAgIDIyOCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDI0MiwgMTU1LCAyMzAsIDI2LCAyNTQsIDYzLCA0OSwgMjgsIDE2LCAyNDIsIAotICAgIDE1NSwgMjMwLCAyNiwgMjQ3LCAyMDAsIDQ5LCAyOCwgMTYsIDI0NSwgMTQ4LCAyMzQsIDI0NywgMjQzLCAyMzYsIDIxMywgCi0gICAgMTI0LCA0OSwgMjgsIDE2LCAyMzYsIDEzLCA0OSwgMjgsIDE2LCAyMzYsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjU0LCAKLSAgICAyMiwgMjQ4LCAyNywgMjQwLCAxMDYsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMTkwLCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIyOSwgMjAzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjI5LCAxOTgsIDI0MCwgMTA3LCAKLSAgICA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDI0OCwgMywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIxOSwgMTAyLCAKLSAgICAyNDcsIDI0MywgMjQ4LCAzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIzNCwgMTgyLCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMjI4LCAyMzQsIAotICAgIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIyOCwgMjM0LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjMxLCAxOTEsIDI1MCwgNzMsIDI0NywgMjMwLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjMxLCAxOTEsIAotICAgIDI1MCwgNzMsIDIzMCwgMTQzLCA0OSwgMjgsIDE2LCAyNDQsIDEyMiwgMjE5LCAxMDIsIDI1MCwgNzMsIDIxNCwgOSwgNDksIAotICAgIDI4LCAxNiwgMjQzLCAyMzYsIDIxOSwgMTAyLCAyNTAsIDczLCAyMTcsIDE3OSwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIyOSwgCi0gICAgOTcsIDQ5LCAyOCwgMTYsIDI1MCwgNzQsIDIwOSwgMjQ5LCA0OSwgMjgsIDE2LCAyNTAsIDc0LCAyMzQsIDM2LCA0OSwgMjgsIAotICAgIDE2LCAyNTAsIDc0LCAyMTksIDksIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDAsIDE1NCwgMjExLCAxMCwgMjE2LCAyMjksIAotICAgIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDUsIDE0OSwgMjU0LCA4NiwgNDksIDI4LCAxNiwgMjExLCAxMCwgMjE1LCAyMDYsIAotICAgIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMTUsIDIwNiwgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDIxNiwgMjI5LCA0OSwgMjgsIAotICAgIDE2LCAyNDcsIDIzOCwgMjU0LCA2NSwgMjQ2LCA0MiwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMzAsIDE0MSwgCi0gICAgMjE2LCAyMzMsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjQ3LCAyMjIsIDI0NSwgMzYsIDI0NywgMTM5LCAKLSAgICA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjE1LCAyMTQsIDIyNiwgMjExLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAxMCwgCi0gICAgMjU0LCA2NSwgMjQ2LCA0MiwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDIzMCwgMTQxLCAyMTYsIDIzMywgMjQ3LCAKLSAgICAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDI0NywgMjIyLCAyNDUsIDM2LCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAKLSAgICAxMCwgMjE1LCAyMTQsIDIyNiwgMjExLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjQzLCA0OSwgMjQ3LCAyMzcsIDQ5LCAyOCwgCi0gICAgMTYsIDI0MywgNDksIDIxMSwgOSwgNDksIDI4LCAxNiwgMjQ3LCAyNDUsIDI1NCwgNjUsIDIzMCwgMTk5LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDI0NSwgMjU0LCA2NSwgMjMxLCA3MywgNDksIDI4LCAxNiwgMjQ3LCAyNDUsIDI0NywgMjAxLCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDI0NSwgMjE2LCAxODIsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyMTYsIDE4MiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIAotICAgIDIxNiwgMTgzLCAyNDcsIDE4NiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDIxNiwgMTgzLCAyMTUsIDIwNywgNDksIDI4LCAxNiwgCi0gICAgMjE5LCAxNjMsIDIxNiwgMTgzLCAyMTYsIDIyMiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDI1MywgMjQ0LCA0OSwgMjgsIDE2LCAKLSAgICAyMTksIDE2MywgMjUzLCAyNDUsIDI0NywgMTg2LCA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjUzLCAyNDUsIDIxNSwgMjA3LCAKLSAgICA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjUzLCAyNDUsIDIxNiwgMjIyLCA0OSwgMjgsIDE2LCAyNDcsIDIyMywgMjQzLCAzMCwgCi0gICAgNDksIDI4LCAxNiwgMjQ3LCAyMjksIDIyNiwgMTM0LCA0OSwgMjgsIDE2LCAyMTgsIDEzNywgNDksIDI4LCAxNiwgMjU0LCA3LCAKLSAgICAxOTAsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjEzLCAxMjQsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjQzLCAxMzUsIDQ5LCAyOCwgCi0gICAgMTYsIDI1NCwgNywgMjQ4LCAzLCA0OSwgMjgsIDE2LCAyNTQsIDcsIDIzNCwgMTgyLCA0OSwgMjgsIDE2LCAyNTQsIDcsIAotICAgIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjI4LCAyMzMsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAyMjksIDk2LCAKLSAgICAyMzEsIDQ0LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgMjI5LCA5NiwgMjMxLCA0NCwgNDksIDI4LCAxNiwgMjM0LCAxNjIsIAotICAgIDIyOSwgOTYsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgMjI5LCA5NiwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIAotICAgIDIzNCwgMzgsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyNDIsIDE1OSwgMjI5LCA5NiwgMjM0LCAxOTYsIDI4LCAxNiwgMjE5LCAKLSAgICAxNTUsIDI1MiwgMTM1LCAyOCwgMTYsIDUyLCAyNTIsIDEzNSwgMjgsIDE2LCA0MCwgMjUyLCAxMzUsIDI4LCAxNiwgMjIzLCAKLSAgICA1MCwgNDAsIDI1MiwgMTM1LCAyOCwgMTYsIDI0OCwgMTU1LCAyNTIsIDEzNSwgMjgsIDE2LCAyMTksIDI1MSwgMjUyLCAxMzUsIAotICAgIDI4LCAxNiwgNDMsIDIyMywgNzcsIDUwLCAyOCwgMTYsIDQ0LCAyMjMsIDc3LCA1MCwgMjgsIDE2LCAyMjMsIDc3LCAyNDcsIAotICAgIDExOCwgMjgsIDE2LCAyNDgsIDE5NiwgMjIxLCAxNjMsIDI4LCAxNiwgMjQ4LCAyMjIsIDI1MCwgMjQ5LCAyOCwgMTYsIDIyMSwgCi0gICAgMTYzLCAyOCwgMTYsIDI0OSwgMjM0LCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgMTExLCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgCi0gICAgMTEwLCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgMTA5LCAyOCwgMTYsIDI0NCwgMTMxLCAyOCwgMTYsIDI0NCwgMTMyLCA1MSwgCi0gICAgMjgsIDE2LCAyNTEsIDE0OCwgNzgsIDI4LCAxNiwgMjUxLCAyNCwgMjgsIDE2LCAyNTEsIDE1OSwgMjgsIDE2LCAxMjcsIDI4LCAKLSAgICAxNiwgMjI2LCAxOTMsIDIxOCwgMTYzLCAyOCwgMTYsIDIxNSwgNTcsIDIxOCwgMTYzLCAyOCwgMTYsIDIxNiwgMTQyLCAyMTgsIAotICAgIDE2MywgMjgsIDE2LCAyNDQsIDEwLCAyMTgsIDE2MywgMjgsIDE2LCAyNDQsIDgwLCAyMTgsIDE2MywgMjgsIDE2LCAyMTksIAotICAgIDEyNCwgMjE4LCAxNjMsIDI4LCAxNiwgMjE5LCAxMjIsIDI0MywgMjUwLCAyOCwgMTYsIDI0NCwgOCwgMjQzLCAyNTAsIDI4LCAKLSAgICAxNiwgMjQzLCAyMDMsIDI1MCwgMTQsIDI4LCAxNiwgMjQzLCAyMDMsIDI1MCwgMTUsIDIyNiwgMTM2LCAyNTQsIDE0MiwgMjgsIAotICAgIDE2LCAyNDMsIDIwMywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1MiwgMTIyLCAyOCwgMTYsIDI1MSwgNjcsIDI1MCwgMTQsIDI4LCAKLSAgICAxNiwgMjQ1LCA3LCAyNTAsIDE0LCAyOCwgMTYsIDI0NSwgNywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1NCwgMTQyLCAyOCwgMTYsIAotICAgIDI0NSwgNywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1MiwgMTIyLCAyOCwgMTYsIDI0NiwgODMsIDI1MCwgMTMsIDI4LCAxNiwgCi0gICAgMjQ2LCA4MywgMjUwLCAxMiwgMjgsIDE2LCAyMzAsIDg1LCAyMzEsIDkwLCAyMjMsIDYxLCAyOCwgMTYsIDUyLCAyMjAsIDc1LCAKLSAgICAyOCwgMTYsIDUyLCAyNDQsIDY1LCAyOCwgMTYsIDI0NCwgNjYsIDIxNCwgMTYzLCAyOCwgMTYsIDI0NCwgNjYsIDI0NiwgCi0gICAgMTA2LCAyOCwgMTYsIDIyOSwgMTg4LCAyMTQsIDE2MywgMjgsIDE2LCAyMjksIDE4OCwgMjQ2LCAxMDYsIDI4LCAxNiwgMjIwLCAKLSAgICA3NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjIwLCA3NiwgMjQ2LCAxMDYsIDI4LCAxNiwgMjI0LCAyMiwgMTM4LCAyMjAsIDc1LCAKLSAgICAyOCwgMTYsIDIyNCwgMjIsIDEzOCwgMjQ0LCA2NSwgMjgsIDE2LCAyNDksIDIxNiwgMjE2LCA4NywgMjgsIDE2LCAyNDksIAotICAgIDg1LCAyMTYsIDg3LCAyOCwgMTYsIDIyNiwgMTM2LCAyNTQsIDE0MiwgMjgsIDE2LCAyMjYsIDEzNiwgMjUyLCAxMjIsIDI4LCAKLSAgICAxNiwgMjI0LCA0LCAyNTQsIDE0MiwgMjgsIDE2LCAyMjQsIDQsIDI1MiwgMTIyLCAyOCwgMTYsIDIzMCwgODgsIDIyMywgNjEsIAotICAgIDI4LCAxNiwgMjExLCAyNTEsIDIyMywgNjEsIDI4LCAxNiwgMTYzLCAyMjMsIDYxLCAyOCwgMTYsIDIyNCwgMjIsIDIyMywgCi0gICAgNjEsIDI4LCAxNiwgMjQ1LCAxODksIDIyMywgNjEsIDI4LCAxNiwgMjE5LCAxMTgsIDIyMywgNjEsIDI4LCAxNiwgMjE2LCAKLSAgICAxNjAsIDIyMywgNjEsIDI4LCAxNiwgMjE5LCAxMTAsIDIyMywgNjEsIDI4LCAxNiwgMTIzLCAyNDAsIDIxMSwgMjE1LCA3MSwgCi0gICAgMjIzLCA2MSwgMjgsIDE2LCAyMTEsIDE3OSwgMjI4LCA0MywgMjgsIDE2LCA5NiwgMjI4LCA0MywgMjgsIDE2LCAyNTAsIDM2LCAKLSAgICAyMTEsIDE3OSwgMjI4LCA0MywgMjgsIDE2LCA0MiwgMjI4LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgNDIsIDIyOCwgNDQsIAotICAgIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjAsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI2LCAKLSAgICAyMjgsIDQ0LCAxMjAsIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCA0MywgMjExLCAyNTMsIDI4LCAxNiwgCi0gICAgMjE1LCAyMjYsIDIyOCwgNDQsIDQzLCAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgNDQsIDIxMSwgMjUzLCAKLSAgICAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCA0NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyNCwgCi0gICAgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyNCwgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIAotICAgIDIyOCwgNDQsIDEyMCwgNDQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjAsIDQ0LCAyNTEsIDIyMSwgCi0gICAgMjgsIDE2LCAyMzAsIDEyOSwgMjI4LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgMjMwLCAxMjksIDIyOCwgNDQsIDI1MSwgMjIxLCAKLSAgICAyOCwgMTYsIDIxNSwgMjIzLCAyMjgsIDQ0LCAxMjQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjIzLCAyMjgsIDQ0LCAxMjQsIAotICAgIDI1MSwgMjIxLCAyOCwgMTYsIDIyNiwgNCwgMjI4LCA0MywgMjgsIDE2LCAyMTMsIDEzMiwgMjI4LCA0MywgMjgsIDE2LCAKLSAgICAyMjgsIDQ0LCAyNTEsIDIyMSwgMjgsIDE2LCAyMjcsIDIwMywgMjI4LCA0MywgMjgsIDE2LCAyNDksIDI0MSwgMjI4LCA0NCwgCi0gICAgMjExLCAyNTMsIDI4LCAxNiwgMjQ5LCAyNDEsIDIyOCwgNDQsIDI1MSwgMjIxLCAyOCwgMTYsIDI1MSwgMTQ2LCAyOCwgMTYsIAotICAgIDIxMSwgMjUxLCAyMjgsIDQ3LCAyOCwgMTYsIDE2MywgMjI4LCA0NywgMjgsIDE2LCAyMjQsIDIyLCAyMjgsIDQ3LCAyOCwgCi0gICAgMTYsIDI0NSwgMTg5LCAyMjgsIDQ3LCAyOCwgMTYsIDIxOSwgMTE4LCAyMjgsIDQ3LCAyOCwgMTYsIDIxNiwgMTYwLCAyMjgsIAotICAgIDQ3LCAyOCwgMTYsIDIxOSwgMTEwLCAyMjgsIDQ3LCAyOCwgMTYsIDEyMywgMjQwLCAyMTEsIDIxNSwgNzEsIDIyOCwgNDcsIAotICAgIDI4LCAxNiwgMzgsIDIxOCwgMTM5LCAyOCwgMTYsIDM4LCAyMTgsIDI0MCwgMjE4LCAxMzksIDI4LCAxNiwgMzgsIDIxNSwgCi0gICAgMjM0LCAyOCwgMTYsIDM4LCAyMTUsIDIzMywgMjgsIDE2LCAzOCwgMjE1LCAyMzIsIDI4LCAxNiwgMjQ0LCAxMDEsIDIxNSwgCi0gICAgMjM0LCAyOCwgMTYsIDI0NCwgMTAxLCAyMTUsIDIzMywgMjgsIDE2LCAyNDQsIDEwMSwgMjE1LCAyMzIsIDI4LCAxNiwgMzgsIAotICAgIDI1MywgMTg5LCAyNDcsIDEyMCwgMjgsIDE2LCAzOCwgMjQ0LCA3MiwgMjgsIDE2LCAzOCwgMjQ0LCA3MSwgMjgsIDE2LCAzOCwgCi0gICAgMjQ0LCA3MCwgMjgsIDE2LCAzOCwgMjQ0LCA2OSwgMjgsIDE2LCAzOCwgMjQ0LCA2OCwgMjgsIDE2LCAyNTIsIDU4LCAyNTIsIAotICAgIDc0LCAyOCwgMTYsIDI0NSwgMTQzLCAyNTIsIDc0LCAyOCwgMTYsIDI1MiwgNTgsIDIxNiwgMTExLCAyOCwgMTYsIDI0NSwgCi0gICAgMTQzLCAyMTYsIDExMSwgMjgsIDE2LCAyNTIsIDU4LCAyMTksIDgwLCAyOCwgMTYsIDI0NSwgMTQzLCAyMTksIDgwLCAyOCwgCi0gICAgMTYsIDI1MiwgNTgsIDIyNSwgMTE1LCAyOCwgMTYsIDI0NSwgMTQzLCAyMjUsIDExNSwgMjgsIDE2LCAzOCwgMjU1LCAxNCwgCi0gICAgMjgsIDE2LCAzOCwgMjE4LCAxNjUsIDI4LCAxNiwgMzgsIDIxNiwgMjM4LCAyOCwgMTYsIDM4LCAyMTgsIDE2NiwgMjgsIDE2LCAKLSAgICAzOCwgMjMxLCAxNjIsIDI4LCAxNiwgMzgsIDIzMSwgMTYxLCAyOCwgMTYsIDM4LCAyNTUsIDEzLCAyOCwgMTYsIDM4LCAyMzIsIAotICAgIDExMiwgMjgsIDE2LCAyNTMsIDI1NCwgMjE0LCAxNjMsIDI4LCAxNiwgMjUzLCAyNTQsIDI0NiwgMTA2LCAyOCwgMTYsIDM4LCAKLSAgICAyNDcsIDEzNSwgMjgsIDE2LCAzOCwgMjIyLCAyMzEsIDI4LCAxNiwgMzgsIDI0NCwgNTgsIDI4LCAxNiwgMzgsIDIxOSwgNzYsIAotICAgIDI4LCAxNiwgMzgsIDI1MiwgMzgsIDI4LCAxNiwgMzgsIDUyLCAyMTYsIDE5LCAyOCwgMTYsIDM4LCAyMTUsIDIxMSwgMjE2LCAKLSAgICAxOSwgMjgsIDE2LCAyMjIsIDIzNSwgMjgsIDE2LCAyMTgsIDc1LCAyOCwgMTYsIDIxMCwgMTU5LCAyOCwgMTYsIDIyNSwgCi0gICAgMTA3LCAyOCwgMTYsIDIzMSwgMjUsIDI4LCAxNiwgMjQ0LCAxNywgMjgsIDE2LCAyNDksIDEzOCwgMjgsIDE2LCAyNDgsIDc4LCAKLSAgICAyOCwgMTYsIDI0MiwgMTUwLCAyMjgsIDQ4LCAyMTksIDk1LCAyOCwgMTYsIDI0MiwgMTUwLCAyMjgsIDQ4LCAyMjgsIDc1LCAKLSAgICAyMTksIDk1LCAyOCwgMTYsIDIxNiwgMCwgMjgsIDE2LCAyMTUsIDk1LCAyOCwgMTYsIDIzNSwgMTkzLCAyMTUsIDk1LCAyOCwgCi0gICAgMTYsIDIxNSwgOTYsIDIxOSwgOTUsIDI4LCAxNiwgMjE1LCA5NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgCi0gICAgMTAyLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk5LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk4LCAyOCwgMTYsIDIyNiwgCi0gICAgMTQ4LCAyMTgsIDk3LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk2LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk1LCAyOCwgCi0gICAgMTYsIDIyNiwgMTQ4LCAyMTgsIDk0LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDkzLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIAotICAgIDkyLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDEwMSwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCAxMDAsIDI4LCAxNiwgMjQxLCAKLSAgICAyNDUsIDI4LCAxNiwgMjI5LCAxMDUsIDI4LCAxNiwgMjQ1LCAxNDMsIDY0LCAyMTgsIDEzMywgMjgsIDE2LCAyNDgsIDcxLCAKLSAgICAyMTksIDk1LCAyOCwgMTYsIDM4LCAxMjQsIDI1MSwgMTY5LCAyOCwgMTYsIDM4LCAxMjAsIDI1MSwgMTY5LCAyOCwgMTYsIAotICAgIDM4LCAyNDIsIDAsIDI4LCAxNiwgMzgsIDIxOSwgNjcsIDIyNSwgNDMsIDI4LCAxNiwgMjI1LCAyMTYsIDc4LCAyOCwgMTYsIAotICAgIDIyNSwgMjE2LCAxMjAsIDc4LCAyOCwgMTYsIDE2MywgMjI1LCAyMTYsIDc4LCAyOCwgMTYsIDI0MiwgMTgyLCAyMTQsIDE2MywgCi0gICAgMjgsIDE2LCAyNDIsIDE4MiwgMjQ2LCAxMDYsIDI4LCAxNiwgMiwgMjQ0LCAxMDAsIDI4LCAxNiwgMjQ4LCAxODAsIDI4LCAKLSAgICAxNiwgMjQ4LCAxODEsIDI1NCwgMTU0LCAyOCwgMTYsIDIzMSwgMTMzLCAyOCwgMTYsIDIzMiwgMTI5LCAyOCwgMTYsIDI1MSwgCi0gICAgMTQzLCAyOCwgMTYsIDIyMCwgMTU0LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjMwLCAKLSAgICAxODQsIDI4LCAxNiwgMjMwLCAxODUsIDI1MSwgMjIxLCAyOCwgMTYsIDIyMCwgMTQ4LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIAotICAgIDE0OCwgMjUxLCAyMjEsIDI4LCAxNiwgMjQzLCAyMjAsIDIxMSwgMjUzLCAyOCwgMTYsIDI0MywgMjIwLCAyNTEsIDIyMSwgCi0gICAgMjgsIDE2LCAyMzIsIDEzMCwgMjI1LCAxODAsIDIyMywgNjEsIDI4LCAxNiwgMjMyLCAxMzAsIDIzNiwgNCwgMjIzLCA2MSwgCi0gICAgMjgsIDE2LCAyNTEsIDE0NCwgMjIzLCA2MSwgMjgsIDE2LCAyMjAsIDE1NCwgMjIzLCA2MSwgMjgsIDE2LCAyMzAsIDE4NSwgCi0gICAgMjIzLCA2MSwgMjgsIDE2LCAyMjAsIDE0OCwgMjIzLCA2MSwgMjgsIDE2LCAyMTYsIDI0OSwgMjI1LCAxNzgsIDI0OSwgMTA3LCAKLSAgICAyMjQsIDE3NCwgMjI1LCAxNzksIDI4LCAxNiwgMjE2LCAyNDksIDIyNSwgMTc4LCAyNDksIDEwNywgMjI0LCAxNzQsIDIzNiwgCi0gICAgMywgMjgsIDE2LCAyMTYsIDI0OSwgMjI1LCAxNzgsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjI1LCAxODAsIDI0NywgMjExLCAKLSAgICAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjI1LCAxNzksIDI4LCAxNiwgMjE2LCAyNDksIAotICAgIDIzNiwgMiwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMzYsIDMsIDI4LCAxNiwgMjE2LCAyNDksIDIzNiwgMiwgMjQ5LCAxMDcsIAotICAgIDIyNCwgMTc0LCAyMzYsIDQsIDI0NywgMjExLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgCi0gICAgMjM2LCA0LCAyNDcsIDIxMCwgMjgsIDE2LCAyMTYsIDI0OSwgMjM2LCAyLCAyNDksIDEwNywgMjI0LCAxNzQsIDIzNiwgNCwgCi0gICAgMjQ3LCAyMDksIDI4LCAxNiwgMjQ5LCAxMzMsIDI4LCAxNiwgMjQyLCAxMjYsIDI1MSwgNjcsIDI1MCwgMTQsIDI4LCAxNiwgCi0gICAgMjQyLCAxMjYsIDI0NSwgNywgMjUwLCAxNCwgMjgsIDE2LCA0MiwgMjUzLCAxNTgsIDI4LCAxNiwgMjEzLCAxNTEsIDI4LCAKLSAgICAxNiwgMjI1LCAxNCwgMjgsIDE2LCAyNTAsIDUsIDI4LCAxNiwgMjIxLCAyMDMsIDI4LCAxNiwgMjUwLCA5LCAyOCwgMTYsIAotICAgIDIxNiwgNywgMjgsIDE2LCAyMjQsIDI0MiwgMjgsIDE2LCAyMjQsIDI0MywgMjQ0LCA2MCwgMjgsIDE2LCAyMjEsIDIwNCwgCi0gICAgMjQ0LCA2MCwgMjgsIDE2LCAyMTYsIDgsIDIyMywgNTgsIDI4LCAxNiwgMjI1LCAxNjMsIDIxOCwgNjYsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIyOSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE4LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMDgsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIwMSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTkzLCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAxODcsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE4NiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMTg1LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxODQsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyOCwgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMjI3LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjYsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDIyNSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjI0LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjMsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIyMiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjIxLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMjAsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxOSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE3LCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAyMTYsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxNSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMjE0LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTMsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE5MiwgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMTkxLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxOTAsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDE4OSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTg4LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjksIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIxOCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjAxLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAxOTMsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE4NiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTg1LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMjcsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyNiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjI1LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjQsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyMSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjIwLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTksIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDIxNCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjEzLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTIsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIxMSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjEwLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAyMDksIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwNywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjA2LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMDUsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwNCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjAzLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDIsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwMCwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMTk5LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTgsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDE5NywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTk2LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTUsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDE5NCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTkyLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAxOTEsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5MCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTg5LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAxODgsIDM4LCAyNiwgMjgsIDIxNSwgMjA4LCAzOCwgMjYsIDI4LCAyMTYsIDIyMywgMzgsIDI2LCAKLSAgICAyOCwgMjI1LCAxODgsIDI2LCAyOCwgMjMzLCAzMSwgMjMwLCAxNDIsIDMxLCAyNDUsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDEsIAotICAgIDIyMiwgMjQ1LCAyMjMsIDI0NywgMjI0LCAzMSwgMjQwLCAyMTQsIDI0NSwgMjIzLCAyNDcsIDIyNCwgMzEsIDI0NSwgMjIyLCAKLSAgICAyNDEsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDUsIDIyMiwgMjQwLCAyMTMsIDI0NywgMjI0LCAzMSwgMjQ1LCAyMjMsIDE4MCwgCi0gICAgMzEsIDI1MCwgMTc0LCAxODAsIDMxLCAyNDMsIDIyOSwgMjUwLCAzNSwgMTgwLCAzMSwgMjMwLCAxNzcsIDE4MCwgMzEsIAotICAgIDI1MiwgMTMwLCAxODAsIDMxLCAyMzQsIDE3OSwgMjE5LCA3OSwgMTgwLCAzMSwgMjQ5LCAxNzksIDE4MCwgMzEsIDI1MywgCi0gICAgMjMzLCAxODAsIDMxLCAyMjYsIDE2MywgMTgwLCAzMSwgMjUxLCAxNTMsIDIyNiwgMTMwLCAxODAsIDMxLCAyNDgsIDczLCAKLSAgICAxNzcsIDI0NywgMTc5LCAxODAsIDMxLCAyNDcsIDE3NiwgMTgwLCAzMSwgMjEwLCAyMjIsIDE4MCwgMzEsIDIzNSwgMjQ3LCAKLSAgICAxODAsIDMxLCAyMjUsIDE5NywgMTgwLCAzMSwgMjIzLCAxMjcsIDE4MCwgMzEsIDI0OSwgMTg5LCAxODAsIDMxLCAyNDEsIAotICAgIDYwLCAyNTIsIDE4NCwgMTgwLCAzMSwgMjEyLCA1OSwgMTgwLCAzMSwgMjQ0LCAzOSwgMTgwLCAzMSwgMjU0LCAyNDYsIDE4MCwgCi0gICAgMzEsIDIyMywgODksIDE4MCwgMzEsIDIyMywgNjUsIDE4MCwgMzEsIDI0NSwgMjIxLCAxODAsIDMxLCAyMzUsIDUzLCAxODAsIAotICAgIDMxLCAyNDksIDE4NCwgMTgwLCAzMSwgMjQ1LCAxNDIsIDE4MCwgMzEsIDI0NiwgNTIsIDE4MCwgMzEsIDI1MCwgMTQ1LCAKLSAgICAxODAsIDMxLCAyNDgsIDgyLCAxODAsIDMxLCAyMywgMjIzLCA2NCwgMTgwLCAzMSwgMjI2LCA4MSwgMTgwLCAzMSwgMjMzLCAKLSAgICAzNCwgMTgwLCAzMSwgMjQ5LCAyNTQsIDE4MCwgMzEsIDIzNCwgNzcsIDE4MCwgMzEsIDI0MywgODYsIDE4MCwgMzEsIDIxOCwgCi0gICAgMTEyLCAxODAsIDMxLCAyMjQsIDEzMCwgMTgwLCAzMSwgMjQzLCAyMjgsIDE4MCwgMzEsIDIyMywgNjYsIDE4MCwgMzEsIAotICAgIDIzMywgNzEsIDE3NywgMjMwLCAxNTcsIDE4MCwgMzEsIDIyMywgNjIsIDE4MCwgMzEsIDI0MiwgMTY4LCAyMTYsIDQyLCAKLSAgICAyMzEsIDc2LCAxODAsIDMxLCAyNDUsIDE0NCwgMTgwLCAzMSwgMjE4LCAxMjQsIDE4MCwgMzEsIDI0MiwgMTI4LCAxODAsIAotICAgIDMxLCAyNDUsIDEzNiwgMTgwLCAzMSwgMjI1LCAyMzUsIDE4MCwgMzEsIDIyMiwgMjI1LCAxODAsIDMxLCAyNDQsIDU5LCAKLSAgICAxODAsIDMxLCAyMTQsIDgsIDE3NywgMjEyLCA0NCwgMTgwLCAzMSwgMjQ5LCAxOTMsIDE4MCwgMzEsIDIzMSwgODksIDE4MCwgCi0gICAgMzEsIDI0NSwgNjEsIDE4MCwgMzEsIDIxNCwgMTcyLCAxODAsIDMxLCAyNDcsIDIxMiwgMTgwLCAzMSwgMjUwLCAwLCAyMzAsIAotICAgIDExMCwgMTgwLCAzMSwgMjQyLCAxMDYsIDE4MCwgMzEsIDI0MywgODcsIDIzNSwgMjU1LCAxODAsIDMxLCAyMzEsIDE0MSwgCi0gICAgMTgwLCAzMSwgMjU1LCAxMCwgMTgwLCAzMSwgMjQ1LCAxNTcsIDE4MCwgMzEsIDI0NiwgMTA5LCAxODAsIDMxLCAyMTIsIDQyLCAKLSAgICAxODAsIDMxLCAyMTksIDE1MCwgMTgwLCAzMSwgMjM1LCAyMjIsIDE4MCwgMzEsIDI0OCwgNDIsIDE4MCwgMzEsIDI0OCwgCi0gICAgMTYwLCAxODAsIDMxLCAyNDcsIDIwOCwgMTgwLCAzMSwgMjQ1LCAyOSwgMTgwLCAzMSwgMjIwLCAxMTUsIDE4MCwgMzEsIAotICAgIDIxOCwgMTI4LCAxODAsIDMxLCAyNDIsIDIsIDE4MCwgMzEsIDI0OSwgMjEyLCAxODAsIDMxLCAyNDksIDI1MSwgMTgwLCAzMSwgCi0gICAgMjQ0LCAxNzcsIDE4MCwgMzEsIDI1NCwgMjEyLCAxODAsIDMxLCAyNDksIDIxMSwgMTgwLCAzMSwgMjI2LCAxOTcsIDIxNiwgCi0gICAgMTk2LCAyMTMsIDI0MiwgMTgwLCAzMSwgMjQ3LCAyMzIsIDE4MCwgMzEsIDIzMywgMTI0LCAxODAsIDMxLCAyNDQsIDEzLCAKLSAgICAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTEwLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgCi0gICAgMTA1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTU4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAKLSAgICAyMSwgMTYxLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTg5LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgCi0gICAgMTc0LCAyMSwgMTk0LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTk4LCAyNDksIDE0OSwgMjIyLCAyMDIsIAotICAgIDIxNCwgMTc0LCAyMSwgMTk1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMjAwLCAyNDksIDE0OSwgMjIyLCAKLSAgICAyMDIsIDIxNiwgMjQzLCAyMSwgMTEwLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTA1LCAyNDksIDE0OSwgCi0gICAgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTU4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTYxLCAyNDksIAotICAgIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTg5LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTk0LCAKLSAgICAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTk4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgCi0gICAgMTk1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMjAwLCAxMSwgMjMsIDYsIDYxLCAxMSwgMjMsIDYsIAotICAgIDI1MywgMTU4LCAxMSwgMjMsIDYsIDI1MSwgNjYsIDExLCAyMywgNiwgMjQ5LCA2MCwgMTEsIDIzLCA2LCA3NSwgMTEsIDIzLCAKLSAgICA2LCAyNDUsIDYsIDExLCAyMywgNiwgMjQzLCAyMDIsIDExLCAyMywgNiwgMjQyLCA2MCwgMTEsIDIzLCA2LCA3MywgMTEsIAotICAgIDIzLCA2LCAyMzUsIDE0NCwgMTEsIDIzLCA2LCAyMzUsIDIzLCAxMSwgMjMsIDYsIDE1NiwgMTEsIDIzLCA2LCAxOTMsIDExLCAKLSAgICAyMywgNiwgMjMwLCAyNSwgMTEsIDIzLCA2LCA3NiwgMTEsIDIzLCA2LCAyMjYsIDEwNSwgMTEsIDIzLCA2LCAyMjQsIDk2LCAKLSAgICAxMSwgMjMsIDYsIDE1MywgMTEsIDIzLCA2LCAyMjIsIDkxLCAxMSwgMjMsIDYsIDIxNywgMTUyLCAxMSwgMjMsIDYsIDcwLCAKLSAgICAxMSwgMjMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDYsIDIxMiwgOTgsIDExLCAyMywgNiwgMjExLCAxNzgsIDExLCAyMywgNiwgCi0gICAgMjExLCAxMTcsIDExLCAyMywgNiwgMjEwLCAxNTksIDExLCAyMywgNCwgNjEsIDExLCAyMywgNCwgMjUzLCAxNTgsIDExLCAKLSAgICAyMywgNCwgMjUxLCA2NiwgMTEsIDIzLCA0LCAyNDksIDYwLCAxMSwgMjMsIDQsIDc1LCAxMSwgMjMsIDQsIDI0NSwgNiwgMTEsIAotICAgIDIzLCA0LCAyNDMsIDIwMiwgMTEsIDIzLCA0LCAyNDIsIDYwLCAxMSwgMjMsIDQsIDczLCAxMSwgMjMsIDQsIDIzNSwgMTQ0LCAKLSAgICAxMSwgMjMsIDQsIDIzNSwgMjMsIDExLCAyMywgNCwgMTU2LCAxMSwgMjMsIDQsIDE5MywgMTEsIDIzLCA0LCAyMzAsIDI1LCAKLSAgICAxMSwgMjMsIDQsIDc2LCAxMSwgMjMsIDQsIDIyNiwgMTA1LCAxMSwgMjMsIDQsIDIyNCwgOTYsIDExLCAyMywgNCwgMTUzLCAKLSAgICAxMSwgMjMsIDQsIDIyMiwgOTEsIDExLCAyMywgNCwgMjE3LCAxNTIsIDExLCAyMywgNCwgNzAsIDExLCAyMywgNCwgMjE0LCAKLSAgICAxMDUsIDExLCAyMywgNCwgMjEyLCA5OCwgMTEsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCA0LCAyMTEsIDExNywgMTEsIAotICAgIDIzLCA0LCAyMTAsIDE1OSwgMTEsIDMyLCA2LCA2MSwgMTEsIDMyLCA2LCAyNTMsIDE1OCwgMTEsIDMyLCA2LCAyNTEsIDY2LCAKLSAgICAxMSwgMzIsIDYsIDI0OSwgNjAsIDExLCAzMiwgNiwgNzUsIDExLCAzMiwgNiwgMjQ1LCA2LCAxMSwgMzIsIDYsIDI0MywgCi0gICAgMjAyLCAxMSwgMzIsIDYsIDI0MiwgNjAsIDExLCAzMiwgNiwgNzMsIDExLCAzMiwgNiwgMjM1LCAxNDQsIDExLCAzMiwgNiwgCi0gICAgMjM1LCAyMywgMTEsIDMyLCA2LCAxNTYsIDExLCAzMiwgNiwgMTkzLCAxMSwgMzIsIDYsIDIzMCwgMjUsIDExLCAzMiwgNiwgCi0gICAgNzYsIDExLCAzMiwgNiwgMjI2LCAxMDUsIDExLCAzMiwgNiwgMjI0LCA5NiwgMTEsIDMyLCA2LCAxNTMsIDExLCAzMiwgNiwgCi0gICAgMjIyLCA5MSwgMTEsIDMyLCA2LCAyMTcsIDE1MiwgMTEsIDMyLCA2LCA3MCwgMTEsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDMyLCAKLSAgICA2LCAyMTIsIDk4LCAxMSwgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzIsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMzIsIDQsIDYxLCAxMSwgMzIsIDQsIDI1MywgMTU4LCAxMSwgMzIsIDQsIDI1MSwgNjYsIDExLCAzMiwgNCwgCi0gICAgMjQ5LCA2MCwgMTEsIDMyLCA0LCA3NSwgMTEsIDMyLCA0LCAyNDUsIDYsIDExLCAzMiwgNCwgMjQzLCAyMDIsIDExLCAzMiwgCi0gICAgNCwgNzMsIDExLCAzMiwgNCwgMjM1LCAxNDQsIDExLCAzMiwgNCwgMjM1LCAyMywgMTEsIDMyLCA0LCAxNTYsIDExLCAzMiwgCi0gICAgNCwgMTkzLCAxMSwgMzIsIDQsIDIzMCwgMjUsIDExLCAzMiwgNCwgNzYsIDExLCAzMiwgNCwgMjI2LCAxMDUsIDExLCAzMiwgCi0gICAgNCwgMjI0LCA5NiwgMTEsIDMyLCA0LCAxNTMsIDExLCAzMiwgNCwgMjIyLCA5MSwgMTEsIDMyLCA0LCAyMTcsIDE1MiwgMTEsIAotICAgIDMyLCA0LCA3MCwgMTEsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzIsIDQsIDIxMSwgMTc4LCAKLSAgICAxMSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCA2LCA2MSwgMTEsIDIzLCAzMiwgCi0gICAgNiwgMjUzLCAxNTgsIDExLCAyMywgMzIsIDYsIDI1MSwgNjYsIDExLCAyMywgMzIsIDYsIDI0OSwgNjAsIDExLCAyMywgMzIsIAotICAgIDYsIDc1LCAxMSwgMjMsIDMyLCA2LCAyNDUsIDYsIDExLCAyMywgMzIsIDYsIDI0MywgMjAyLCAxMSwgMjMsIDMyLCA2LCAKLSAgICAyNDIsIDYwLCAxMSwgMjMsIDMyLCA2LCA3MywgMTEsIDIzLCAzMiwgNiwgMjM1LCAxNDQsIDExLCAyMywgMzIsIDYsIDIzNSwgCi0gICAgMjMsIDExLCAyMywgMzIsIDYsIDE1NiwgMTEsIDIzLCAzMiwgNiwgMTkzLCAxMSwgMjMsIDMyLCA2LCAyMzAsIDI1LCAxMSwgCi0gICAgMjMsIDMyLCA2LCA3NiwgMTEsIDIzLCAzMiwgNiwgMjI2LCAxMDUsIDExLCAyMywgMzIsIDYsIDIyNCwgOTYsIDExLCAyMywgCi0gICAgMzIsIDYsIDE1MywgMTEsIDIzLCAzMiwgNiwgMjIyLCA5MSwgMTEsIDIzLCAzMiwgNiwgMjE3LCAxNTIsIDExLCAyMywgMzIsIAotICAgIDYsIDcwLCAxMSwgMjMsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAzMiwgNiwgMjEyLCA5OCwgMTEsIDIzLCAzMiwgNiwgCi0gICAgMjExLCAxNzgsIDExLCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgCi0gICAgNCwgNjEsIDExLCAyMywgMzIsIDQsIDI1MywgMTU4LCAxMSwgMjMsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyNDksIDYwLCAxMSwgMjMsIDMyLCA0LCA3NSwgMTEsIDIzLCAzMiwgNCwgMjQ1LCA2LCAxMSwgMjMsIDMyLCA0LCAyNDMsIAotICAgIDIwMiwgMTEsIDIzLCAzMiwgNCwgMjQyLCA2MCwgMTEsIDIzLCAzMiwgNCwgNzMsIDExLCAyMywgMzIsIDQsIDIzNSwgMTQ0LCAKLSAgICAxMSwgMjMsIDMyLCA0LCAyMzUsIDIzLCAxMSwgMjMsIDMyLCA0LCAxNTYsIDExLCAyMywgMzIsIDQsIDE5MywgMTEsIDIzLCAKLSAgICAzMiwgNCwgMjMwLCAyNSwgMTEsIDIzLCAzMiwgNCwgNzYsIDExLCAyMywgMzIsIDQsIDIyNiwgMTA1LCAxMSwgMjMsIDMyLCAKLSAgICA0LCAyMjQsIDk2LCAxMSwgMjMsIDMyLCA0LCAxNTMsIDExLCAyMywgMzIsIDQsIDIyMiwgOTEsIDExLCAyMywgMzIsIDQsIAotICAgIDIxNywgMTUyLCAxMSwgMjMsIDMyLCA0LCA3MCwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDQsIDIxMiwgCi0gICAgOTgsIDExLCAyMywgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDMyLCA0LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAxMTksIDYsIDYxLCAxMSwgMTE5LCA2LCAyNTEsIDY2LCAxMSwgMTE5LCA2LCAyNDksIDYwLCAxMSwgMTE5LCAKLSAgICA2LCAyNDMsIDIwMiwgMTEsIDExOSwgNiwgMjM1LCAxNDQsIDExLCAxMTksIDYsIDIzNSwgMjMsIDExLCAxMTksIDYsIDIzMCwgCi0gICAgMjUsIDExLCAxMTksIDYsIDc2LCAxMSwgMTE5LCA2LCAyMjYsIDEwNSwgMTEsIDExOSwgNiwgMjI0LCA5NiwgMTEsIDExOSwgCi0gICAgNiwgMjIyLCA5MSwgMTEsIDExOSwgNiwgMjE3LCAxNTIsIDExLCAxMTksIDYsIDcwLCAxMSwgMTE5LCA2LCAyMTQsIDEwNSwgCi0gICAgMTEsIDExOSwgNiwgMjEyLCA5OCwgMTEsIDExOSwgNiwgMjExLCAxNzgsIDExLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMTE5LCAKLSAgICA2LCAyMTAsIDE1OSwgMTEsIDExOSwgNCwgNjEsIDExLCAxMTksIDQsIDI1MywgMTU4LCAxMSwgMTE5LCA0LCAyNTEsIDY2LCAKLSAgICAxMSwgMTE5LCA0LCAyNDksIDYwLCAxMSwgMTE5LCA0LCAyNDUsIDYsIDExLCAxMTksIDQsIDI0MiwgNjAsIDExLCAxMTksIDQsIAotICAgIDczLCAxMSwgMTE5LCA0LCAyMzUsIDE0NCwgMTEsIDExOSwgNCwgMjM1LCAyMywgMTEsIDExOSwgNCwgMTU2LCAxMSwgMTE5LCAKLSAgICA0LCAxOTMsIDExLCAxMTksIDQsIDIzMCwgMjUsIDExLCAxMTksIDQsIDIyNiwgMTA1LCAxMSwgMTE5LCA0LCAyMjQsIDk2LCAKLSAgICAxMSwgMTE5LCA0LCAxNTMsIDExLCAxMTksIDQsIDIyMiwgOTEsIDExLCAxMTksIDQsIDIxNywgMTUyLCAxMSwgMTE5LCA0LCAKLSAgICA3MCwgMTEsIDExOSwgNCwgMjE0LCAxMDUsIDExLCAxMTksIDQsIDIxMiwgOTgsIDExLCAxMTksIDQsIDIxMSwgMTc4LCAxMSwgCi0gICAgMTE5LCA0LCAyMTEsIDExNywgMTEsIDExOSwgNCwgMjEwLCAxNTksIDExLCAyMywgMTE5LCA2LCA2MSwgMTEsIDIzLCAxMTksIAotICAgIDYsIDI1MywgMTU4LCAxMSwgMjMsIDExOSwgNiwgMjUxLCA2NiwgMTEsIDIzLCAxMTksIDYsIDI0OSwgNjAsIDExLCAyMywgCi0gICAgMTE5LCA2LCA3NSwgMTEsIDIzLCAxMTksIDYsIDI0NSwgNiwgMTEsIDIzLCAxMTksIDYsIDI0MywgMjAyLCAxMSwgMjMsIAotICAgIDExOSwgNiwgMjQyLCA2MCwgMTEsIDIzLCAxMTksIDYsIDczLCAxMSwgMjMsIDExOSwgNiwgMjM1LCAxNDQsIDExLCAyMywgCi0gICAgMTE5LCA2LCAyMzUsIDIzLCAxMSwgMjMsIDExOSwgNiwgMTU2LCAxMSwgMjMsIDExOSwgNiwgMTkzLCAxMSwgMjMsIDExOSwgCi0gICAgNiwgMjMwLCAyNSwgMTEsIDIzLCAxMTksIDYsIDc2LCAxMSwgMjMsIDExOSwgNiwgMjI2LCAxMDUsIDExLCAyMywgMTE5LCA2LCAKLSAgICAyMjQsIDk2LCAxMSwgMjMsIDExOSwgNiwgMTUzLCAxMSwgMjMsIDExOSwgNiwgMjIyLCA5MSwgMTEsIDIzLCAxMTksIDYsIAotICAgIDIxNywgMTUyLCAxMSwgMjMsIDExOSwgNiwgNzAsIDExLCAyMywgMTE5LCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMTksIDYsIAotICAgIDIxMiwgOTgsIDExLCAyMywgMTE5LCA2LCAyMTEsIDE3OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDExOSwgCi0gICAgNiwgMjEwLCAxNTksIDExLCAyMywgMTE5LCA0LCA2MSwgMTEsIDIzLCAxMTksIDQsIDI1MywgMTU4LCAxMSwgMjMsIDExOSwgCi0gICAgNCwgMjUxLCA2NiwgMTEsIDIzLCAxMTksIDQsIDI0OSwgNjAsIDExLCAyMywgMTE5LCA0LCA3NSwgMTEsIDIzLCAxMTksIDQsIAotICAgIDI0NSwgNiwgMTEsIDIzLCAxMTksIDQsIDI0MywgMjAyLCAxMSwgMjMsIDExOSwgNCwgMjQyLCA2MCwgMTEsIDIzLCAxMTksIAotICAgIDQsIDczLCAxMSwgMjMsIDExOSwgNCwgMjM1LCAxNDQsIDExLCAyMywgMTE5LCA0LCAyMzUsIDIzLCAxMSwgMjMsIDExOSwgNCwgCi0gICAgMTU2LCAxMSwgMjMsIDExOSwgNCwgMTkzLCAxMSwgMjMsIDExOSwgNCwgMjMwLCAyNSwgMTEsIDIzLCAxMTksIDQsIDc2LCAKLSAgICAxMSwgMjMsIDExOSwgNCwgMjI2LCAxMDUsIDExLCAyMywgMTE5LCA0LCAyMjQsIDk2LCAxMSwgMjMsIDExOSwgNCwgMTUzLCAKLSAgICAxMSwgMjMsIDExOSwgNCwgMjIyLCA5MSwgMTEsIDIzLCAxMTksIDQsIDIxNywgMTUyLCAxMSwgMjMsIDExOSwgNCwgNzAsIAorICAgIDEyLCAxMywgMjIzLCAxOTMsIDEyLCAxMywgMjIzLCAxOTIsIDEyLCAxMywgMjIyLCA5MCwgMTIsIDEzLCAyMjIsIDg5LCAxMiwgCisgICAgMTMsIDIyMiwgODgsIDEyLCAxMywgMjIyLCA4NywgMTIsIDEzLCAyMjIsIDg2LCAxMiwgMTMsIDIyMiwgODUsIDEyLCAxMywgCisgICAgMjIyLCA4NCwgMTIsIDEzLCAyMjIsIDgzLCAxMiwgMTMsIDIyMiwgODIsIDEyLCAxMywgMjIyLCA4MSwgMTIsIDEzLCAyMjIsIAorICAgIDgwLCAxMiwgMTMsIDIyMiwgNzksIDEyLCAxMywgMjIyLCA3OCwgMTIsIDEzLCAyMjIsIDc3LCAxMiwgMTMsIDIyMiwgNzYsIAorICAgIDEyLCAxMywgMjIyLCA3NSwgMTIsIDEzLCAyMjIsIDc0LCAxMiwgMTMsIDIyMiwgNzMsIDEyLCAxMywgMjIyLCA3MiwgMTIsIAorICAgIDEzLCAyMjIsIDcxLCAxMiwgMTMsIDIyMiwgNzAsIDEyLCAxMywgMjIyLCA2OSwgMTIsIDEzLCAyMjIsIDY4LCAxMiwgMTMsIAorICAgIDIyMiwgNjcsIDEyLCAxMywgMjIyLCA2NiwgMTIsIDEzLCAyMjIsIDY1LCAxMiwgMTMsIDIyMiwgNjQsIDEyLCAxMywgMjIyLCAKKyAgICA2MywgMTIsIDEzLCAyMjIsIDYyLCAxMiwgMTMsIDIyMiwgNjEsIDEyLCAxMywgMjIyLCA2MCwgMTIsIDEzLCAyMjIsIDU5LCAKKyAgICAxMiwgMTMsIDIyMiwgNTgsIDEyLCAxMywgMjIyLCA1NywgMTIsIDEzLCAyMjIsIDU2LCAxMiwgMTMsIDIyMiwgNTUsIDEyLCAKKyAgICAxMywgMjIyLCA1NCwgMTIsIDEzLCAyMjIsIDUzLCAxMiwgMTMsIDIyMiwgNTIsIDEyLCAxMywgMjIyLCA1MSwgMTIsIDEzLCAKKyAgICAyMjIsIDUwLCAxMiwgMTMsIDIyMiwgNDksIDEyLCAxMywgMjIyLCA0OCwgMTIsIDEzLCAyMjIsIDQ3LCAxMiwgMTMsIDIyMiwgCisgICAgNDYsIDEyLCAxMywgMjIyLCA0NSwgMTIsIDEzLCAyMjIsIDQ0LCAxMiwgMTMsIDIyMiwgNDMsIDEyLCAxMywgMjIyLCA0MiwgCisgICAgMTIsIDEzLCAyMjIsIDQxLCAxMiwgMTMsIDIyMiwgNDAsIDEyLCAxMywgMjIyLCAzOSwgMTIsIDEzLCAyMjIsIDM4LCAxMiwgCisgICAgMTMsIDIyMiwgMzcsIDEyLCAxMywgMjE3LCAxNTEsIDEyLCAxMywgMjE3LCAxNTAsIDEyLCAxMywgMjE3LCAxNDksIDEyLCAKKyAgICAxMywgMjE3LCAxNDgsIDEyLCAxMywgMjE3LCAxNDcsIDEyLCAxMywgMjE3LCAxNDYsIDEyLCAxMywgMjE3LCAxNDUsIDEyLCAKKyAgICAxMywgMjE3LCAxNDQsIDEyLCAxMywgMjE3LCAxNDMsIDEyLCAxMywgMjE3LCAxNDIsIDEyLCAxMywgMjE3LCAxNDEsIDEyLCAKKyAgICAxMywgMjE3LCAxNDAsIDEyLCAxMywgMjE3LCAxMzksIDEyLCAxMywgMjE3LCAxMzgsIDEyLCAxMywgMjE3LCAxMzcsIDEyLCAKKyAgICAxMywgMjE3LCAxMzYsIDEyLCAxMywgMjE3LCAxMzUsIDEyLCAxMywgMjE3LCAxMzQsIDEyLCAxMywgMjE3LCAxMzMsIDEyLCAKKyAgICAxMywgMjE3LCAxMzIsIDEyLCAxMywgMjE3LCAxMzEsIDEyLCAxMywgMjE3LCAxMzAsIDEyLCAxMywgMjE3LCAxMjksIDEyLCAKKyAgICAxMywgMjE3LCAxMjgsIDEyLCAxMywgMjE3LCAxMjcsIDEyLCAxMywgMjE3LCAxMjYsIDEyLCAxMywgMjE3LCAxMjUsIDEyLCAKKyAgICAxMywgMjE3LCAxMjQsIDEyLCAxMywgMjE3LCAxMjMsIDEyLCAxMywgMjE3LCAxMjIsIDEyLCAxMywgMjE3LCAxMjEsIDEyLCAKKyAgICAxMywgMjE3LCAxMjAsIDEyLCAxMywgMjE3LCAxMTksIDEyLCAxMywgMjE3LCAxMTgsIDEyLCAxMywgMjE3LCAxMTcsIDEyLCAKKyAgICAxMywgMjE3LCAxMTYsIDEyLCAxMywgMjE3LCAxMTUsIDEyLCAxMywgMjE3LCAxMTQsIDEyLCAxMywgMjE3LCAxMTMsIDEyLCAKKyAgICAxMywgMjE3LCAxMTIsIDEyLCAxMywgMjE3LCAxMTEsIDEyLCAxMywgMjE3LCAxMTAsIDEyLCAxMywgMjE3LCAxMDksIDEyLCAKKyAgICAxMywgMjE3LCAxMDgsIDEyLCAxMywgMjE1LCAyMiwgMTIsIDEzLCAyMTUsIDIxLCAxMiwgMTMsIDIxNSwgMjAsIDEyLCAxMywgCisgICAgMjE1LCAxOSwgMTIsIDEzLCAyMTUsIDE4LCAxMiwgMTMsIDIxNSwgMTcsIDEyLCAxMywgMjE1LCAxNiwgMTIsIDEzLCAyMTUsIAorICAgIDE1LCAxMiwgMTMsIDIxNSwgMTQsIDEyLCAxMywgMjE1LCAxMywgMTIsIDEzLCAyMTUsIDEyLCAxMiwgMTMsIDIxNSwgMTEsIAorICAgIDEyLCAxMywgMjE1LCAxMCwgMTIsIDEzLCAyMTUsIDksIDEyLCAxMywgMjE1LCA4LCAxMiwgMTMsIDIxNSwgNywgMTIsIDEzLCAKKyAgICAyMTUsIDYsIDEyLCAxMywgMjE1LCA1LCAxMiwgMTMsIDIxNSwgNCwgMTIsIDEzLCAyMTUsIDMsIDEyLCAxMywgMjE1LCAyLCAKKyAgICAxMiwgMTMsIDIxNSwgMSwgMTIsIDEzLCAyMTUsIDAsIDEyLCAxMywgMjE0LCAyNTUsIDEyLCAxMywgMjE0LCAyNTQsIDEyLCAKKyAgICAxMywgMjE0LCAyNTMsIDEyLCAxMywgMjE0LCAyNTIsIDEyLCAxMywgMjE0LCAyNTEsIDEyLCAxMywgMjE0LCAyNTAsIDEyLCAKKyAgICAxMywgMjE0LCAyNDksIDEyLCAxMywgMjE0LCAyNDgsIDEyLCAxMywgMjE0LCAyNDcsIDEyLCAxMywgMjE0LCAyNDYsIDEyLCAKKyAgICAxMywgMjE0LCAyNDUsIDEyLCAxMywgMjE0LCAyNDQsIDEyLCAxMywgMjE0LCAyNDMsIDEyLCAxMywgMjE0LCAyNDIsIDEyLCAKKyAgICAxMywgMjE0LCAyNDEsIDEyLCAxMywgMjE0LCAyNDAsIDEyLCAxMywgMjE0LCAyMzksIDEyLCAxMywgMjE0LCAyMzgsIDEyLCAKKyAgICAxMywgMjE0LCAyMzcsIDEyLCAxMywgMjE0LCAyMzYsIDEyLCAxMywgMjE0LCAyMzUsIDEyLCAxMywgMjE0LCAyMzQsIDEyLCAKKyAgICAxMywgMjE0LCAyMzMsIDEyLCAxMywgMjE0LCAyMzIsIDEyLCAxMywgMjE0LCAxMDQsIDEyLCAxMywgMjE0LCAxMDMsIDEyLCAKKyAgICAxMywgMjE0LCAxMDIsIDEyLCAxMywgMjE0LCAxMDEsIDEyLCAxMywgMjE0LCAxMDAsIDEyLCAxMywgMjE0LCA5OSwgMTIsIAorICAgIDEzLCAyMTQsIDk4LCAxMiwgMTMsIDIxNCwgOTcsIDEyLCAxMywgMjE0LCA5NiwgMTIsIDEzLCAyMTQsIDk1LCAxMiwgMTMsIAorICAgIDIxNCwgOTQsIDEyLCAxMywgMjE0LCA5MywgMTIsIDEzLCAyMTQsIDkyLCAxMiwgMTMsIDIxNCwgOTEsIDEyLCAxMywgMjE0LCAKKyAgICA5MCwgMTIsIDEzLCAyMTQsIDg5LCAxMiwgMTMsIDIxNCwgODgsIDEyLCAxMywgMjE0LCA4NywgMTIsIDEzLCAyMTQsIDg2LCAKKyAgICAxMiwgMTMsIDIxNCwgODUsIDEyLCAxMywgMjE0LCA4NCwgMTIsIDEzLCAyMTQsIDgzLCAxMiwgMTMsIDIxNCwgODIsIDEyLCAKKyAgICAxMywgMjE0LCA4MSwgMTIsIDEzLCAyMTQsIDgwLCAxMiwgMTMsIDIxNCwgNzksIDEyLCAxMywgMjE0LCA3OCwgMTIsIDEzLCAKKyAgICAyMTQsIDc3LCAxMiwgMTMsIDIxNCwgNzYsIDEyLCAxMywgMjE0LCA3NSwgMTIsIDEzLCAyMTQsIDc0LCAxMiwgMTMsIDIxNCwgCisgICAgNzMsIDEyLCAxMywgMjE0LCA3MiwgMTIsIDEzLCAyMTQsIDcxLCAxMiwgMTMsIDIxNCwgNzAsIDEyLCAxMywgMjE0LCA2OSwgCisgICAgMTIsIDEzLCAyMTQsIDY4LCAxMiwgMTMsIDIxNCwgNjcsIDEyLCAxMywgMjE0LCA2NiwgMTIsIDEzLCAyMTQsIDY1LCAxMiwgCisgICAgMTMsIDIxNCwgNjQsIDEyLCAxMywgMjE0LCA2MywgMTIsIDEzLCAyMTQsIDYyLCAxMiwgMTMsIDIxNCwgNjEsIDEyLCAxMywgCisgICAgMjE0LCA2MCwgMTIsIDEzLCAyMTQsIDU5LCAxMiwgMTMsIDIxNCwgNTgsIDEyLCAxMywgMjE0LCA1NywgMTIsIDEzLCAyMTQsIAorICAgIDU2LCAxMiwgMTMsIDIxNCwgNTUsIDEyLCAxMywgMjE0LCA1NCwgMTIsIDEzLCAyMTQsIDUzLCAxMiwgMTMsIDIxNCwgNTIsIAorICAgIDEyLCAxMywgMjE0LCA1MSwgMTIsIDEzLCAyMTQsIDUwLCAxMiwgMTMsIDIxNCwgNDksIDEyLCAxMywgMjE0LCA0OCwgMTIsIAorICAgIDEzLCAyMTQsIDQ3LCAxMiwgMTMsIDIxNCwgNDYsIDEyLCAxMywgMjE0LCA0NSwgMTIsIDEzLCAyMTQsIDQ0LCAxMiwgMTMsIAorICAgIDIxNCwgNDMsIDEyLCAxMywgMjE0LCA0MiwgMTIsIDEzLCAyMTQsIDQxLCAxMiwgMTMsIDIxNCwgNDAsIDEyLCAxMywgMjE0LCAKKyAgICAzOSwgMTIsIDEzLCAyMTQsIDM4LCAxMiwgMTMsIDIxNCwgMzcsIDEyLCAxMywgMjE0LCAzNiwgMTIsIDEzLCAyMTQsIDM1LCAKKyAgICAxMiwgMTMsIDIxNCwgMzQsIDEyLCAxMywgMjE0LCAzMywgMTIsIDEzLCAyMTQsIDMyLCAxMiwgMTMsIDIxNCwgMzEsIDEyLCAKKyAgICAxMywgMjE0LCAzMCwgMTIsIDEzLCAyMTQsIDI5LCAxMiwgMTMsIDIxNCwgMjgsIDEyLCAxMywgMjEyLCA5NywgMTIsIDEzLCAKKyAgICAyMTIsIDk2LCAxMiwgMTMsIDIxMiwgOTUsIDEyLCAxMywgMjEyLCA5NCwgMTIsIDEzLCAyMTIsIDkzLCAxMiwgMTMsIDIxMiwgCisgICAgOTIsIDEyLCAxMywgMjEyLCA5MSwgMTIsIDEzLCAyMTIsIDkwLCAxMiwgMTMsIDIxMiwgODksIDEyLCAxMywgMjEyLCA4OCwgCisgICAgMTIsIDEzLCAyMTIsIDg3LCAxMiwgMTMsIDIxMiwgODYsIDEyLCAxMywgMjEyLCA4NSwgMTIsIDEzLCAyMTIsIDg0LCAxMiwgCisgICAgMTMsIDIxMiwgODMsIDEyLCAxMywgMjEyLCA4MiwgMTIsIDEzLCAyMTIsIDgxLCAxMiwgMTMsIDIxMiwgODAsIDEyLCAxMywgCisgICAgMjEyLCA3OSwgMTIsIDEzLCAyMTIsIDc4LCAxMiwgMTMsIDIxMiwgNzcsIDEyLCAxMywgMjEyLCA3NiwgMTIsIDEzLCAyMTIsIAorICAgIDc1LCAxMiwgMTMsIDIxMiwgNzQsIDEyLCAxMywgMjEyLCA3MywgMTIsIDEzLCAyMTIsIDcyLCAxMiwgMTMsIDIxMiwgNzEsIAorICAgIDEyLCAxMywgMjEyLCA3MCwgMTIsIDEzLCAyMTIsIDY5LCAxMiwgMTMsIDIxMiwgNjgsIDEyLCAxMywgMjEyLCA2NywgMTIsIAorICAgIDEzLCAyMTIsIDY2LCAxMiwgMTMsIDIxMSwgMTc3LCAxMiwgMTMsIDIxMSwgMTc2LCAxMiwgMTMsIDIxMSwgMTc1LCAxMiwgCisgICAgMTMsIDIxMSwgMTc0LCAxMiwgMTMsIDIxMSwgMTczLCAxMiwgMTMsIDIxMSwgMTcyLCAxMiwgMTMsIDIxMSwgMTcxLCAxMiwgCisgICAgMTMsIDIxMSwgMTcwLCAxMiwgMTMsIDIxMSwgMTY5LCAxMiwgMTMsIDIxMSwgMTY4LCAxMiwgMTMsIDIxMSwgMTY3LCAxMiwgCisgICAgMTMsIDIxMSwgMTY2LCAxMiwgMTMsIDIxMSwgMTE1LCAxMiwgMTMsIDIxMSwgMTE0LCAxMiwgMTMsIDIxMSwgMTEzLCAxMiwgCisgICAgMTMsIDIxMSwgMTEyLCAxMiwgMTMsIDIxMSwgMTExLCAxMiwgMTMsIDIxMSwgMTEwLCAxMiwgMTMsIDIxMSwgMTA5LCAxMiwgCisgICAgMTMsIDIxMSwgMTA4LCAxMiwgMTMsIDIxMSwgMTA3LCAxMiwgMTMsIDIxMCwgMTU4LCAxMiwgMTMsIDIxMCwgMTU3LCAxMiwgCisgICAgMTMsIDIxMCwgMTU2LCAxMiwgMTMsIDIxMCwgMTU1LCAxMiwgMTMsIDIxMCwgMTU0LCAxMiwgMTMsIDIxMCwgMTUzLCAxMiwgCisgICAgMTMsIDIxMCwgMTUyLCAxMiwgMTMsIDIxMCwgMTUxLCAxMiwgMTMsIDIxMCwgMTUwLCAxMiwgMTMsIDIxMCwgMTQ5LCAxMiwgCisgICAgMTMsIDIxMCwgMTQ4LCAxMiwgMTMsIDIxMCwgMTQ3LCAxMiwgMTMsIDIxMCwgMTQ2LCAxMiwgMTMsIDIxMCwgMTQ1LCAxMiwgCisgICAgMTMsIDIxMCwgMTQ0LCAxMiwgMTMsIDIxMCwgMTQzLCAxMiwgMTMsIDIxMCwgMTQyLCAxMiwgMTMsIDIxMCwgMTQxLCAxMiwgCisgICAgMTMsIDIxMCwgMTQwLCAxMiwgMTMsIDIxMCwgMTM5LCAxMiwgMTMsIDIxMCwgMTM4LCAxMiwgMTMsIDIxMCwgMTM3LCAxMiwgCisgICAgMTMsIDIxMCwgMTM2LCAxMiwgMTMsIDIxMCwgMTM1LCAxMiwgMTMsIDIxMCwgMTM0LCAxMiwgMTMsIDIxMCwgMTMzLCAxMiwgCisgICAgMTMsIDIxMCwgMTMyLCAxMiwgMTMsIDIxMCwgMTMxLCAxMiwgMTMsIDIxMCwgMTMwLCAxMiwgMTMsIDIxMCwgMTI5LCAxMiwgCisgICAgMTMsIDIxMCwgMTI4LCAxMiwgMTMsIDIxMCwgMTI3LCAxMiwgMTMsIDIxMCwgMTI2LCAxMiwgMTMsIDIxMCwgMTI1LCAxMiwgCisgICAgMTMsIDIxMCwgMTI0LCAxMiwgMTMsIDIxMCwgMTIzLCAxMiwgMTMsIDIxMCwgMTIyLCAxMiwgMTMsIDIxMCwgMTIxLCAxMiwgCisgICAgMTMsIDIxMCwgMTIwLCAxMiwgMTMsIDIxMCwgMTE5LCAxMiwgMTMsIDIxMCwgMTE4LCAxMiwgMTMsIDI1NSwgODEsIDEyLCAKKyAgICAxMywgMjU1LCA4MCwgMTIsIDEzLCAyNTUsIDc5LCAxMiwgMTMsIDI1NSwgNzgsIDEyLCAxMywgMjU1LCA3NywgMTIsIDEzLCAKKyAgICAyNTUsIDc2LCAxMiwgMTMsIDI1NSwgNzUsIDEyLCAxMywgMjU1LCA3NCwgMTIsIDEzLCAyNTUsIDczLCAxMiwgMTMsIDI1NSwgCisgICAgNzIsIDEyLCAxMywgMjU1LCA3MSwgMTIsIDEzLCAyNTUsIDcwLCAxMiwgMTMsIDI1NSwgNjksIDEyLCAxMywgMjU1LCA2OCwgCisgICAgMTIsIDEzLCAyNTUsIDY3LCAxMiwgMTMsIDI1NSwgNjYsIDEyLCAxMywgMjU1LCA2NSwgMTIsIDEzLCAyNTUsIDY0LCAxMiwgCisgICAgMTMsIDI1NSwgNjMsIDEyLCAxMywgMjU1LCA2MiwgMTIsIDEzLCAyNTUsIDYxLCAxMiwgMTMsIDI1NSwgNjAsIDEyLCAxMywgCisgICAgMjU1LCA1OSwgMTIsIDEzLCAyNTUsIDU4LCAxMiwgMTMsIDI1NSwgNTcsIDEyLCAxMywgMjU1LCA1NiwgMTIsIDEzLCAyNTUsIAorICAgIDU1LCAxMiwgMTMsIDI1NSwgNTQsIDEyLCAxMywgMjU1LCA1MywgMTIsIDEzLCAyNTUsIDUyLCAxMiwgMTMsIDI1NSwgNTEsIAorICAgIDEyLCAxMywgMjU1LCA1MCwgMTIsIDEzLCAyNTUsIDQ5LCAxMiwgMTMsIDI1NSwgNDgsIDIwLCAxLCAxNjcsIDIyOSwgMTcsIAorICAgIDIzMSwgMjEsIDIwLCAxLCAxNjcsIDI0MywgNzcsIDI0NCwgNDQsIDIwLCAxLCAxNjcsIDIyNCwgMjU0LCAyMzEsIDIyLCAKKyAgICAyMjUsIDYwLCAyMCwgMSwgMTY3LCAyMjQsIDI1NCwgMjMxLCAyMiwgMjI1LCA2MSwgMjAsIDEsIDE2NywgMjI5LCAyMzEsIAorICAgIDIzMSwgMjEsIDIwLCAxLCAxNjcsIDIxOSwgMjIzLCAyMCwgMSwgMTY3LCAyMTYsIDY3LCAyMzEsIDIxLCAyMCwgMSwgMTY3LCAKKyAgICAyMjcsIDEyMiwgMjMxLCAyMSwgMjAsIDEsIDE2NywgMjIwLCAyMSwgMjI2LCA5NCwgMjI4LCAxNzQsIDIwLCAxLCAxNjcsIAorICAgIDIyNCwgMjU0LCAyMjYsIDk0LCAyMjgsIDE3NSwgMjI1LCA2MCwgMjAsIDEsIDE2NywgMjI0LCAyNTQsIDIyNiwgOTQsIDIyOCwgCisgICAgMTc1LCAyMjUsIDYxLCAyMCwgMSwgMTY3LCAyMzEsIDIyMywgMjAsIDEsIDE2NywgMjE1LCAxMjAsIDIzMSwgMjI0LCAyMCwgCisgICAgMSwgMTY3LCAyMjksIDc2LCAyMCwgMSwgMTY3LCAyMzEsIDIyMCwgMjAsIDEsIDE2NywgMjMxLCAxODEsIDIwLCAxLCAxNjcsIAorICAgIDIzMCwgNTMsIDIwLCAxLCAxNjcsIDIyMCwgMTI2LCAyMCwgMSwgMTY3LCAyMjcsIDI0NiwgMjAsIDEsIDE2NywgMjM0LCAKKyAgICAxNTUsIDIwLCAxLCAxNjcsIDIyOCwgMTQzLCAyMCwgMSwgMTY3LCAyMTgsIDUsIDIwLCAxLCAxNjcsIDIyOSwgMTYsIDIwLCAKKyAgICAxLCAxNjcsIDIzMywgOTMsIDIwLCAxLCAxNjcsIDIzMywgMTgsIDIzMywgMTk1LCAyMCwgMSwgMTY3LCAyMjcsIDI1MywgCisgICAgMjMxLCAyOSwgMjAsIDEsIDE2NywgMjMxLCAyMjcsIDIwLCAxLCAxNjcsIDIyNSwgMjUwLCAyMCwgMSwgMTY3LCAyNDIsIAorICAgIDIzOCwgMjAsIDEsIDE2NywgMjI2LCA1NCwgMjAsIDEsIDE2NywgMjMwLCAxNTYsIDIyOSwgNTAsIDIwLCAxLCAxNjcsIDIyNywgCisgICAgMTAzLCAyMzEsIDMyLCAyMCwgMSwgMTY3LCAxMDQsIDIxMCwgMTg4LCAyMjksIDIyNSwgMjAsIDEsIDE2NywgMjQyLCAyMzksIAorICAgIDIwLCAxLCAxNjcsIDIyNywgMjUzLCAyMjcsIDI1NCwgMjAsIDEsIDE2NywgMjE5LCAxMzAsIDIwLCAxLCAxNjcsIDIzMSwgCisgICAgMTQsIDIwLCAxLCAxNjcsIDIzMSwgMzUsIDIwLCAxLCAxNjcsIDIzMCwgMTM1LCAyMCwgMSwgMTY3LCAyMzQsIDI1NSwgMjAsIAorICAgIDEsIDE2NywgMjI2LCA5NCwgMjMzLCA1MywgMjAsIDEsIDE2NywgMjI5LCAxNTQsIDIzMywgNTMsIDIwLCAxLCAxNjcsIDIyNSwgCisgICAgMTYxLCAyMCwgMSwgMTY3LCAyMzEsIDIyMSwgMjAsIDEsIDE2NywgMjI4LCAyMTIsIDIwLCAxLCAxNjcsIDIyNCwgMTM3LCAKKyAgICAyMCwgMSwgMTY3LCAyMTUsIDExNywgMjAsIDEsIDE2NywgMjMyLCA5OSwgMjAsIDEsIDE2NywgMjE5LCA0MywgMjAsIDEsIAorICAgIDE2NywgMjE2LCAyMTcsIDIwLCAxLCAxNjcsIDIzMSwgMjE4LCAyMCwgMSwgMTY3LCAyMzQsIDE2MiwgMjAsIDEsIDE2NywgCisgICAgMjI5LCAxNTAsIDIwLCAxLCAxNjcsIDIzMywgMjA3LCAyMCwgMSwgMTY3LCAyMzAsIDEzNiwgMjAsIDEsIDE2NywgMjE5LCAKKyAgICAyMjAsIDIwLCAxLCAxNjcsIDIzMiwgMTQ0LCAyMCwgMSwgMTY3LCAyNDQsIDEwMSwgMjAsIDEsIDE2NywgMjIyLCAyMDEsIAorICAgIDIwLCAxLCAxNjcsIDIzMywgMjQ3LCAyMCwgMSwgMTY3LCAyMTksIDM5LCAyMCwgMSwgMTY3LCAyMzEsIDE3OCwgMjI1LCAKKyAgICAxMDIsIDIwLCAxLCAxNjcsIDIyMCwgMTQsIDIwLCAxLCAxNjcsIDIyNywgMjUyLCAyMCwgMSwgMTY3LCAyMTksIDI1NSwgCisgICAgMjI4LCA3LCAyMTAsIDE5NiwgMjAsIDEsIDE2NywgMjI3LCAxNDIsIDIzMCwgMTUzLCAyMCwgMSwgMTY3LCAyMjYsIDg5LCAKKyAgICAyMCwgMSwgMTY3LCAyMjgsIDE0NCwgMjAsIDEsIDE2NywgMjE0LCAxNzAsIDIwLCAxLCAxNjcsIDIyOSwgNTMsIDIwLCAxLCAKKyAgICAxNjcsIDIzMSwgMjE3LCAyMCwgMSwgMTY3LCAyMjgsIDE4NiwgMjAsIDEsIDE2NywgMjMxLCAxMjQsIDIwLCAxLCAxNjcsIAorICAgIDIyNywgMTU1LCAyMCwgMSwgMTY3LCAyMTYsIDIyMSwgMjAsIDEsIDE2NywgMjE5LCAzNiwgMjAsIDEsIDE2NywgMjI2LCA5MCwgCisgICAgMjAsIDEsIDE2NywgMjI4LCAxMSwgMjAsIDEsIDE2NywgMjMxLCAyMjUsIDIwLCAxLCAxNjcsIDIyNywgMTUyLCAyMCwgMSwgCisgICAgMTY3LCAyMzQsIDIyMiwgMjAsIDEsIDE2NywgMjI4LCAxNCwgMjAsIDEsIDE2NywgMjEzLCAyNTAsIDIwLCAxLCAxNjcsIAorICAgIDIzMiwgMTAzLCAyMCwgMSwgMTY3LCAyMjksIDEwMywgMjAsIDEsIDE2NywgMjI5LCAyMDEsIDIwLCAxLCAxNjcsIDIzMSwgCisgICAgMTIzLCAyMCwgMSwgMjI1LCAxNDEsIDIyOCwgOSwgMjAsIDEsIDIyNSwgMTQxLCAyMTUsIDEyMCwgMjMxLCAyMjIsIDIwLCAxLCAKKyAgICAyMjUsIDE0MSwgMjE5LCAxODcsIDIwLCAxLCAyMjUsIDE0MSwgMjIwLCAxMzAsIDIxNSwgMTE5LCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIzMiwgMTQ2LCAyMjcsIDI0OSwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDEzMCwgMjMxLCAyMjYsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjM0LCA5MywgMjAsIDEsIDIyNSwgMTQxLCAyMTEsIDE1LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTI1LCAyMCwgMSwgMjI1LCAKKyAgICAxNDEsIDIzNCwgMjQzLCAyMCwgMSwgMjI1LCAxNDEsIDIyNSwgMjExLCAyMCwgMSwgMjI1LCAxNDEsIDIxMSwgODksIDIzMywgCisgICAgNTMsIDIwLCAxLCAyMjUsIDE0MSwgMjMzLCAxMDksIDIyOCwgNywgMjI3LCAxNjQsIDIwLCAxLCAyMjUsIDE0MSwgMjI3LCAKKyAgICAyNDcsIDIyMCwgNDAsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAxMjEsIDIyOCwgMTg5LCAyMCwgMSwgMjI1LCAxNDEsIDI0MiwgCisgICAgMjM2LCAyMCwgMSwgMjI1LCAxNDEsIDIyNSwgNTIsIDIwLCAxLCAyMjUsIDE0MSwgMjE1LCAxMjAsIDIyOCwgNSwgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMjAsIDQ1LCAyMjgsIDE4NCwgMjAsIDEsIDIyNSwgMTQxLCAyMjAsIDQxLCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIzMSwgMjIsIDIxNiwgMjIwLCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTEyLCAyMzEsIDEyNiwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMjcsIDE1MywgMjI3LCAyNDksIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNTEsIDIwLCAxLCAyMjUsIDE0MSwgMjQyLCAyMzcsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNDcsIDIwLCAxLCAyMjUsIDE0MSwgMjMzLCAxMzUsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjI1LCAyNTMsIDIwLCAxLCAyMjUsIDE0MSwgMjEzLCAxODIsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAxOCwgMjMwLCA1MSwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDUyLCAyMzEsIDEwOCwgMjAsIDEsIDIyNSwgMTQxLCAyMTEsIDE5MywgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMjIsIDEzLCAyMCwgMSwgMjI1LCAxNDEsIDIxNywgOTgsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAzNCwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDM3LCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgMzgsIDIzMywgOTAsIDIwLCAxLCAyMjUsIAorICAgIDE0MSwgMjMxLCAyNCwgMjAsIDEsIDIyNSwgMTQxLCAyMTgsIDUzLCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTE2LCAyMCwgMSwgCisgICAgMjI1LCAxNDEsIDIzMCwgMTM4LCAyMCwgMSwgMjI1LCAxNDEsIDIyNywgMTY3LCAyMCwgMSwgMjI1LCAxNDEsIDIyNCwgMTQxLCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMzMsIDIyOSwgNTQsIDIwLCAxLCAyMjUsIDE0MSwgMjQ0LCAxMzQsIDIwLCAxLCAyMjUsIAorICAgIDE0MSwgMjMxLCAxMDMsIDIwLCAxLCAyMjUsIDE0MSwgMjQ0LCAxNTUsIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNTksIDIwLCAKKyAgICAxLCAyMjUsIDE0MSwgMjMxLCAyNDQsIDIyOCwgMTc4LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMjQ0LCAyMjgsIDE1NCwgMjAsIAorICAgIDEsIDIyNSwgMTQxLCAyMzMsIDE3LCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgNjAsIDIwLCAxLCAyMjUsIDE0MSwgMjI4LCAxNiwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAxODYsIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCA4MCwgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDYsIAorICAgIDIwLCAxLCAxMzcsIDIyOSwgMTcsIDIzMSwgMjI0LCAyMCwgMSwgMTM3LCAyMjcsIDEyMSwgMjAsIDEsIDEzNywgMjEwLCAKKyAgICAxOTYsIDIwLCAxLCAxMzcsIDIxMiwgNTMsIDIwLCAxLCAxMzcsIDIyOSwgNTMsIDIwLCAxLCAxMzcsIDIyOSwgMTQyLCAyMCwgCisgICAgMSwgMTM3LCAyMjksIDI0LCAyMCwgMSwgMTM3LCAyNDIsIDI0NiwgMjAsIDEsIDEzNywgMjMxLCAxMjAsIDIwLCAxLCAxMzcsIAorICAgIDI0MywgODQsIDIwLCAxLCAxMzcsIDIyNywgMTQ0LCAyMzAsIDE3NSwgMjMxLCAzNiwgMjAsIDEsIDEzNywgMjI3LCAyNDUsIAorICAgIDIzMSwgMTExLCAyMCwgMSwgMTM3LCAyMzEsIDExNywgMjAsIDEsIDEzNywgMjI1LCA1OCwgMjAsIDEsIDEzNywgMjI5LCAKKyAgICAxMjcsIDIwLCAxLCAxMzcsIDIzMSwgMTI4LCAyNTEsIDM3LCAyMCwgMSwgMTM3LCAyMzQsIDE0OSwgMjAsIDEsIDEzNywgCisgICAgMjQyLCAyNDcsIDIwLCAxLCAxMzcsIDIzNCwgMTU2LCAyMCwgMSwgMTM3LCAyMTAsIDIxMywgMjMwLCA4MSwgMjAsIDEsIAorICAgIDEzNywgMjI3LCAxMTUsIDIwLCAxLCAxMzcsIDIzMSwgMTA1LCAyMCwgMSwgMTM3LCAyMjgsIDE1LCAyMCwgMSwgMTM3LCAKKyAgICAyMzEsIDExMSwgMjAsIDEsIDEzNywgMjExLCAxNiwgMjAsIDEsIDEzNywgMjMzLCAyNTUsIDIwLCAxLCAxMzcsIDIzNSwgMTYsIAorICAgIDIwLCAxLCAxMzcsIDIyMCwgMTI1LCAyMCwgMSwgMTM3LCAyMjksIDEzNiwgMjAsIDEsIDEzNywgMjE3LCA5NiwgMjAsIDEsIAorICAgIDEzNywgMjI4LCAxNTgsIDIwLCAxLCAxMzcsIDIxNiwgNjcsIDIxMCwgMTk4LCAyMCwgMSwgMTM3LCAyMTgsIDgwLCAyMCwgMSwgCisgICAgMTM3LCAyMjksIDQ0LCAyMjcsIDE2NCwgMjAsIDEsIDEzNywgMjEzLCAxODEsIDIwLCAxLCAxMzcsIDIyOSwgMjA0LCAyMCwgCisgICAgMSwgMTM3LCAyMzEsIDI0NCwgMjM0LCAxNTgsIDIwLCAxLCAxMzcsIDIyNywgMjU0LCAyMCwgMSwgMTM3LCAyMjksIDM5LCAKKyAgICAyMCwgMSwgMTM3LCAyMzMsIDk0LCAyMCwgMSwgMTM3LCAyMzEsIDExMywgMjAsIDEsIDEzNywgMjMxLCAxMywgMjAsIDEsIAorICAgIDEzNywgMjI3LCAyNDgsIDIwLCAxLCAxMzcsIDIxNiwgMjE2LCAyMCwgMSwgMTM3LCAyMjksIDQxLCAyMCwgMSwgMTM3LCAKKyAgICAyNDMsIDI0MCwgMjAsIDEsIDEzNywgMjI5LCAxNDEsIDIwLCAxLCAxMzcsIDIyOCwgMTcsIDIwLCAxLCAxMzcsIDIyOCwgMTMsIAorICAgIDIwLCAxLCAxMzcsIDI1MSwgMTE1LCAyMCwgMSwgMTM3LCAyMTMsIDE4MywgMjAsIDEsIDEzNywgMjMxLCAxMTgsIDIwLCAxLCAKKyAgICAxMzcsIDIyMiwgMTQyLCAyMCwgMSwgMTM3LCAyMjgsIDE4OCwgMjAsIDEsIDEzNywgMjMzLCAxMDgsIDIwLCAxLCAxMzcsIAorICAgIDIxNiwgNjUsIDIwLCAxLCAxMzcsIDIyNywgMjU1LCAyMjksIDYsIDIwLCAxLCAxMzcsIDIyOCwgMTgwLCAyMCwgMSwgMTM3LCAKKyAgICAyMzQsIDE2MiwgMjAsIDEsIDEzNywgMjI5LCA0NSwgMjAsIDEsIDEzNywgMjMxLCAyMTcsIDIwLCAxLCAxMzcsIDIzMSwgCisgICAgMTA2LCAyMCwgMSwgMTM3LCAyMzIsIDEwMywgMjAsIDEsIDEzNywgMjMzLCAxOTUsIDIwLCAxLCAxMzcsIDIyOCwgMTg2LCAKKyAgICAyMCwgMSwgMTM3LCAyMjksIDYsIDIwLCAxLCAxMzcsIDIxMSwgMTg0LCAyMCwgMSwgMTM3LCAyMjksIDQyLCAyMCwgMSwgCisgICAgMTM3LCAyMjgsIDIsIDIwLCAxLCAxMzcsIDIyNywgMjUwLCAyMCwgMSwgMTM3LCAyMzMsIDIwOSwgMjI4LCAxNDQsIDIwLCAxLCAKKyAgICAxMzcsIDIyOCwgMCwgMjAsIDEsIDEzNywgMjI5LCAxNDksIDIwLCAxLCAxMzcsIDIzMSwgMjQ0LCAyMjgsIDUsIDIwLCAxLCAKKyAgICAxMzcsIDIxMSwgMTAzLCAyMCwgMSwgMTM3LCAyMjksIDE0OCwgMjAsIDEsIDEzNywgMjE5LCAyMjIsIDIwLCAxLCAxMzcsIAorICAgIDIyMCwgMTI4LCAyMCwgMSwgMTM3LCAyMzEsIDExNCwgMjAsIDEsIDEzNywgMjMxLCAyMjQsIDIwLCAxLCAxMzcsIDIzMSwgCisgICAgMTI0LCAyMCwgMSwgMTM3LCAyMzQsIDE1MCwgMjAsIDEsIDEzNywgMjMxLCAxMTUsIDIwLCAxLCAxMzcsIDIzNCwgMTU0LCAKKyAgICAyMCwgMSwgMTM3LCAyMzEsIDEyOCwgMjI1LCAxMDYsIDIwLCAxLCAxMzcsIDIxMCwgMTc5LCAyMCwgMSwgMTM3LCAyMjgsIAorICAgIDE3NiwgMjAsIDEsIDEzNywgMjMwLCAyMjUsIDIwLCAxLCAxMzcsIDIzMCwgMTA1LCAyMCwgMSwgMTM3LCAyMjAsIDE3LCAyMCwgCisgICAgMSwgMTM3LCAyMzQsIDE3MiwgMjMzLCA3NiwgMjAsIDEsIDEzNywgMjM0LCAxNzIsIDI0NCwgMTY4LCAyMCwgMSwgMTM3LCAKKyAgICAyMjksIDc0LCAyMCwgMSwgMTM3LCAyMjksIDIwMSwgMjAsIDEsIDEzNywgMjMyLCAyMDYsIDIwLCAxLCAxMzcsIDIyNSwgNjgsIAorICAgIDIwLCAxLCAxMzcsIDIyNSwgMjAyLCAyMCwgMSwgMTM3LCAyMTYsIDIzMSwgMjAsIDEsIDEwNywgMjMxLCAxMDQsIDIwLCAxLCAKKyAgICAxMDcsIDIxMiwgNTEsIDIwLCAxLCAxMDcsIDIyOCwgMTc0LCAyMCwgMSwgMTA3LCAyMzEsIDIxLCAyMCwgMSwgMTA3LCAyMjgsIAorICAgIDE3MiwgMjAsIDEsIDEwNywgMjMyLCAyNDEsIDIwLCAxLCAxMDcsIDIyOCwgMTc3LCAyMCwgMSwgMTA3LCAyMjgsIDEyLCAyMCwgCisgICAgMSwgMTA3LCAyMjksIDU5LCAyMCwgMSwgMTA3LCAyMjcsIDE2NCwgMjAsIDEsIDEwNywgMjExLCAxOTQsIDIwLCAxLCAxMDcsIAorICAgIDIyOSwgMTQsIDIwLCAxLCAxMDcsIDIyMCwgNjMsIDIwLCAxLCAxMDcsIDIyOSwgMjUsIDIwLCAxLCAxMDcsIDIzNCwgMTU3LCAKKyAgICAyMCwgMSwgMTA3LCAyMTYsIDIxOCwgMjAsIDEsIDEwNywgMjIwLCA0MywgMjAsIDEsIDEwNywgMjI4LCAxODUsIDIwLCAxLCAKKyAgICAxMDcsIDIxOCwgNTMsIDIwLCAxLCAxMDcsIDIzNCwgMTYyLCAyMCwgMSwgMTA3LCAyMTEsIDkxLCAyMCwgMSwgMTA3LCAyMzMsIAorICAgIDIxMCwgMjAsIDEsIDEwNywgMjIxLCAyMzYsIDIwLCAxLCAxMDcsIDIzMSwgMjYsIDIwLCAxLCAxMDcsIDIyOSwgMTQwLCAyMCwgCisgICAgMSwgMTA3LCAyMzEsIDE5MywgMjAsIDEsIDEwNywgMjMxLCAzMiwgMjAsIDEsIDEwNywgMjIwLCAxMjcsIDIwLCAxLCAxMDcsIAorICAgIDIxMSwgMzksIDIwLCAxLCAxMDcsIDIyOCwgMTc5LCAyMCwgMSwgMTA3LCAyMzQsIDE1MywgMjMxLCAxMDcsIDIwLCAxLCAKKyAgICAxMDcsIDIyOSwgMjEsIDIwLCAxLCAxMDcsIDIxNSwgMTE5LCAyMCwgMSwgMTA3LCAyNDIsIDI1NSwgMjAsIDEsIDEwNywgCisgICAgMjI5LCAxMSwgMjAsIDEsIDEwNywgMjQ0LCAxMzUsIDIwLCAxLCAxMDcsIDIyOSwgMTQ0LCAyMCwgMSwgMTA3LCAyMzEsIDUsIAorICAgIDIwLCAxLCAxMDcsIDIzMywgMTEsIDIwLCAxLCAxMDcsIDIyOSwgMTI2LCAyMCwgMSwgMTA3LCAyMzAsIDE1MiwgMjAsIDEsIAorICAgIDEwNywgMjMxLCA5LCAyMCwgMSwgMTA3LCAyMjQsIDEyMSwgMjAsIDEsIDEwNywgMjMxLCA3LCAyMCwgMSwgMTA3LCAyMzEsIAorICAgIDIzLCAyMCwgMSwgMTA3LCAyMzIsIDg5LCAyMCwgMSwgMTA3LCAyMjgsIDQsIDIwLCAxLCAxMDcsIDIzMSwgMTI3LCAyMCwgMSwgCisgICAgMTA3LCAyMzMsIDE4NiwgMjAsIDEsIDEwNywgMjI3LCAxNTUsIDIwLCAxLCAxMDcsIDIxNiwgMjIxLCAyMCwgMSwgMTA3LCAKKyAgICAyMTksIDM2LCAyMCwgMSwgMTA3LCAyMTAsIDE3OSwgMjAsIDEsIDEwNywgMjM0LCAxNTQsIDIwLCAxLCAxMDcsIDIyMywgCisgICAgMTczLCAyMCwgMSwgMTA3LCAyMTcsIDExLCAyMCwgMSwgMTA3LCAyMjksIDIyLCAyMCwgMSwgMTA3LCAyMzEsIDI4LCAyMCwgCisgICAgMSwgMTA3LCAyMjgsIDMsIDIwLCAxLCAxMDcsIDIzNCwgMTUyLCAyMCwgMSwgMTA3LCAyMjUsIDYyLCAyMCwgMSwgMTA3LCAKKyAgICAyMjUsIDE1NSwgMjAsIDEsIDEwNywgMjI3LCAxMzEsIDIwLCAxLCAxMDcsIDIzMywgMTcsIDIwLCAxLCAxMDcsIDIyOSwgNjAsIAorICAgIDIwLCAxLCAxMDcsIDIzMSwgMjUsIDIwLCAxLCAxMDcsIDIyOSwgMzQsIDIwLCAxLCAxMDcsIDIxMCwgMTkzLCAyMCwgMSwgCisgICAgMTA3LCAyMjYsIDI1LCAyMCwgMSwgMTA3LCAyMTAsIDE5MiwgMjAsIDEsIDEwNywgMjI5LCAxNDksIDIwLCAxLCAxMDcsIAorICAgIDIyNywgMjQ5LCAyMCwgMSwgMTA3LCAyMTgsIDgyLCAyMCwgMSwgMTA3LCAyMzMsIDIxNCwgMjAsIDEsIDEwNywgMjI5LCA0OSwgCisgICAgMjAsIDEsIDEwNywgMjI5LCAxOSwgMjAsIDEsIDEwNywgMjE1LCAxMDMsIDIwLCAxLCAxMDcsIDIzMSwgMzYsIDIwLCAxLCAKKyAgICAxMDcsIDIzMywgMjA0LCAyMCwgMSwgMTA3LCAyMjgsIDEsIDIwLCAxLCAxMDcsIDIxNiwgMjE5LCAyMCwgMSwgMTA3LCAyMzEsIAorICAgIDIxOSwgMjAsIDEsIDEwNywgMjI5LCA1OCwgMjAsIDEsIDEwNywgMjMzLCAxMCwgMjAsIDEsIDEwNywgMjI5LCA0MCwgMjAsIAorICAgIDEsIDEwNywgMjI4LCA2LCAyMCwgMSwgMTA3LCAyMjgsIDE1OCwgMjAsIDEsIDEwNywgMjQyLCAyNDAsIDIwLCAxLCAxMDcsIAorICAgIDIzMywgMjIzLCAyMCwgMSwgMTA3LCAyMjMsIDg3LCAyMjYsIDIxMywgMjAsIDEsIDEwNywgMjE3LCA4NywgMjAsIDEsIDEwNywgCisgICAgMjE2LCAxMSwgMjAsIDEsIDEwNywgMjI3LCAxNTIsIDIwLCAxLCAxMDcsIDIyMiwgMjQyLCAyMCwgMSwgMTA3LCAyMzMsIDU1LCAKKyAgICAyMCwgMSwgMTA3LCAyMzEsIDg0LCAyMCwgMSwgMTA3LCAxOTQsIDIwLCAxLCAxMDcsIDIxOCwgNSwgMjAsIDEsIDEwNywgCisgICAgMjMwLCAxMDcsIDIwLCAxLCAxMDcsIDIyMCwgMjksIDIwLCAxLCAxMDcsIDIyMCwgMzksIDIwLCAxLCAxMDcsIDIzMywgMTYxLCAKKyAgICAyMCwgMSwgMTA3LCAyMjcsIDI0MiwgMjAsIDEsIDEwNywgMjE5LCAyMjcsIDIwLCAxLCAxMDcsIDIyNywgMjUxLCAyMCwgMSwgCisgICAgMTA3LCAyMjUsIDIxNCwgMjAsIDEsIDEwNywgMjI4LCAyMzgsIDIwLCAxLCAxMDcsIDIxOSwgMjU0LCAyMCwgMSwgMTA3LCAKKyAgICAyMjQsIDEzNiwgMjAsIDEsIDEwNywgMjMwLCA1MSwgMjAsIDEsIDEwNywgMjMyLCAxMjUsIDIwLCAxLCAxMDcsIDIyMywgODcsIAorICAgIDIzMCwgMTAxLCAyMCwgMSwgMTA3LCAyMTYsIDExOCwgMjAsIDEsIDEwNywgMjI3LCAyNDMsIDIwLCAxLCAxMDcsIDIzMSwgCisgICAgMTI4LCAxOTksIDIwLCAxLCAxMDcsIDIyMSwgMjM0LCAyMCwgMSwgMTA3LCAyNDQsIDIwMywgMjAsIDEsIDgyLCAyMjksIAorICAgIDE0OCwgMjAsIDEsIDgyLCAyMTYsIDE3LCAyMCwgMSwgODIsIDIzMSwgMTE3LCAyMCwgMSwgODIsIDIzMywgOTQsIDIwLCAxLCAKKyAgICA4MiwgMjEzLCAxMjgsIDIwLCAxLCA4MiwgMjMyLCAxMzEsIDIwLCAxLCA4MiwgMjI2LCA5MywgMjAsIDEsIDgyLCAyMTksIAorICAgIDQ3LCAyMCwgMSwgODIsIDIyMywgMTQ4LCAyMCwgMSwgODIsIDIyOCwgOCwgMjAsIDEsIDgyLCAyMjksIDExOSwgMjAsIDEsIAorICAgIDgyLCAyMjQsIDE1MCwgMjAsIDEsIDgyLCAyMTcsIDYzLCAyMCwgMSwgODIsIDIyOSwgMjcsIDIwLCAxLCA4MiwgMjMzLCAKKyAgICAyNTEsIDIwLCAxLCA4MiwgMjExLCAxODcsIDIwLCAxLCA4MiwgMjIxLCAxNzIsIDIwLCAxLCA4MiwgMjI5LCA1MCwgMjAsIDEsIAorICAgIDgyLCAyMjYsIDkwLCAyMCwgMSwgODIsIDIxNiwgMTgsIDIwLCAxLCA4MiwgMjMzLCAyMDgsIDIwLCAxLCA4MiwgMjMyLCAKKyAgICAxNDUsIDIwLCAxLCA4MiwgMjI4LCAxMSwgMjAsIDEsIDgyLCAyMjksIDMsIDIwLCAxLCA4MiwgMjMxLCAyMjUsIDIwLCAxLCAKKyAgICA4MiwgMjI5LCAyMCwgMjAsIDEsIDgyLCAyMjksIDIsIDIwLCAxLCA4MiwgMjI4LCAxMCwgMjAsIDEsIDgyLCAyMjIsIDI0MCwgCisgICAgMjAsIDEsIDgyLCAyMjgsIDE3NiwgMjAsIDEsIDgyLCAyMjUsIDIxMywgMjAsIDEsIDgyLCAyMjIsIDMzLCAyMCwgMSwgODIsIAorICAgIDIyOSwgMzUsIDIwLCAxLCA4MiwgMjMxLCAxNSwgMjAsIDEsIDgyLCAyNDIsIDIzNCwgMjAsIDEsIDgyLCAyMjksIDIzLCAyMCwgCisgICAgMSwgODIsIDIyOCwgMTg3LCAyMCwgMSwgODIsIDIzMSwgMTc3LCAyMCwgMSwgODIsIDIzMiwgMTI3LCAyMCwgMSwgODIsIAorICAgIDIyOSwgNTUsIDIwLCAxLCA4MiwgMjI5LCAxMzIsIDIwLCAxLCA4MiwgMjE3LCA4NiwgMjI3LCAyNDksIDIwLCAxLCA4MiwgCisgICAgMjIwLCAxMjksIDIwLCAxLCA4MiwgMjI0LCAxNDYsIDIwLCAxLCA4MiwgMjI5LCAxNTIsIDIxOSwgNTMsIDIwLCAxLCA4MiwgCisgICAgMjI5LCA0MywgMjI3LCAxNjQsIDIwLCAxLCA4MiwgMjExLCA0LCAyMCwgMSwgODIsIDI0MiwgMjM1LCAyMCwgMSwgODIsIAorICAgIDIxNSwgMTE4LCAyMCwgMSwgODIsIDIxMSwgMTksIDIwLCAxLCA4MiwgMjI1LCAxOSwgMjAsIDEsIDgyLCAyMTUsIDEwOCwgCisgICAgMjAsIDEsIDgyLCAyMzQsIDE2MCwgMjAsIDEsIDgyLCAyMTgsIDgxLCAyMCwgMSwgODIsIDIxNiwgMjIwLCAyMCwgMSwgODIsIAorICAgIDIxMywgMTg0LCAyMCwgMSwgODIsIDIxMiwgNiwgMjAsIDEsIDgyLCAyMzMsIDEzOCwgMjAsIDEsIDgyLCAyMjQsIDE1MywgCisgICAgMjAsIDEsIDgyLCAyMTcsIDk3LCAyMCwgMSwgODIsIDI0MiwgMjU0LCAyMCwgMSwgODIsIDIyOSwgNjQsIDIwLCAxLCA4MiwgCisgICAgMjIwLCA0MiwgMjAsIDEsIDgyLCAyMzEsIDEwLCAyMCwgMSwgODIsIDIzMSwgMTIxLCAyMCwgMSwgODIsIDIyNywgMTE5LCAKKyAgICAyMCwgMSwgODIsIDIyOCwgMTQxLCAyMCwgMSwgODIsIDI0MywgODAsIDIwLCAxLCA4MiwgMjE1LCAxMDksIDIwLCAxLCA4MiwgCisgICAgMjMzLCAyMTcsIDIwLCAxLCA4MiwgMjExLCA2NywgMjAsIDEsIDgyLCAyMjcsIDE1MywgMjUwLCAyNCwgMjAsIDEsIDgyLCAKKyAgICAyMTAsIDI1MCwgMjAsIDEsIDgyLCAyMzEsIDI3LCAyMCwgMSwgODIsIDIyOSwgMTM3LCAyMCwgMSwgODIsIDIyNSwgMTAzLCAKKyAgICAyMCwgMSwgODIsIDIxMCwgMTk3LCAyMCwgMSwgODIsIDIzMywgMTIsIDIwLCAxLCA4MiwgMjQzLCAyNDAsIDIwLCAxLCA4MiwgCisgICAgMjQzLCA3OSwgMjAsIDEsIDgyLCAyMjksIDEzLCAyMCwgMSwgODIsIDIzNCwgMTYyLCAyMCwgMSwgODIsIDIzMSwgMjI4LCAKKyAgICAyMCwgMSwgODIsIDIyOSwgMjYsIDIwLCAxLCA4MiwgMjQyLCAyNDEsIDIwLCAxLCA4MiwgMjQ0LCAyMDQsIDIwLCAxLCA4MiwgCisgICAgMjI3LCAyNDQsIDIwLCAxLCA4MiwgMjI1LCAxNTYsIDIwLCAxLCA4MiwgMjExLCAxNywgMjAsIDEsIDgyLCAyMjksIDUxLCAKKyAgICAyMCwgMSwgODIsIDIyNywgMTUzLCAyNTIsIDMxLCAyMCwgMSwgODIsIDIyNywgOTksIDIwLCAxLCA4MiwgMjI0LCAyNTAsIAorICAgIDIwLCAxLCA4MiwgMjMwLCAyMjUsIDIwLCAxLCA4MiwgMjQzLCAyMzgsIDIwLCAxLCA4MiwgMjI5LCAyMjUsIDIwLCAxLCA4MiwgCisgICAgMjMwLCAxMDUsIDIwLCAxLCA4MiwgMjQyLCAyNDAsIDIwLCAxLCA4MiwgMjQzLCAyNDIsIDc0LCAyMCwgMSwgODIsIDIzMCwgCisgICAgNTIsIDIwLCAxLCA4MiwgMjI0LCAxNDksIDIwLCAxLCA4MiwgMjI5LCAxNSwgMjAsIDEsIDgyLCAyMzMsIDE5NSwgMjAsIDEsIAorICAgIDgyLCAyMjUsIDEwMCwgMjAsIDEsIDgyLCAyMjcsIDI1MiwgMjAsIDEsIDgyLCAyMTEsIDE4LCAyMCwgMSwgODIsIDIyOSwgCisgICAgMzYsIDIwLCAxLCA4MiwgMjI2LCA5NCwgMjI1LCAxOTAsIDIwLCAxLCA4MiwgMjQzLCAyNDIsIDI1MSwgMjMsIDIwLCAxLCAKKyAgICA4MiwgMjQ0LCA0NSwgMjAsIDEsIDgyLCAyMjgsIDE4MSwgMjAsIDEsIDgyLCA2MSwgMjAsIDEsIDgyLCAyMTYsIDExLCAyMCwgCisgICAgMSwgODIsIDc4LCAyMCwgMSwgODIsIDc0LCAyMCwgMSwgODIsIDIzMywgOTIsIDIwLCAxLCA4MiwgMjI2LCA5NCwgMjI1LCAKKyAgICAyNiwgMjAsIDEsIDgyLCAyMTcsIDEwMiwgMjAsIDEsIDgyLCAyMTcsIDUyLCAyMCwgMSwgODIsIDIyOSwgMTUyLCAyMzAsIAorICAgIDM5LCAyNDAsIDI0MSwgMjAsIDEsIDgyLCAyMjAsIDE3LCAyMCwgMSwgODIsIDIxMSwgMTQsIDIwLCAxLCA4MiwgMjI4LCAKKyAgICAyNTIsIDIwLCAxLCA4MiwgMjEwLCAyMDIsIDIwLCAxLCA4MiwgMjEwLCAyMjcsIDIxNywgMjQxLCAyMCwgMSwgODIsIDIxMCwgCisgICAgMjI3LCAyNDksIDE1NSwgMjAsIDEsIDgyLCAyMTAsIDE4NywgMjAsIDEsIDgyLCAyMTAsIDE5NSwgMjAsIDEsIDgyLCAyMzQsIAorICAgIDE0OCwgMjAsIDEsIDgyLCAyMjUsIDE1NCwgMjAsIDEsIDgyLCAyMjgsIDE4MiwgMjQ1LCAxMTAsIDIwLCAxLCA4MiwgMjI0LCAKKyAgICAxNDcsIDIwLCAxLCA4MiwgMjExLCAxOTIsIDIwLCAxLCA4MiwgMjQ0LCAxNTUsIDIwLCAxLCA4MiwgMjEzLCAyNTAsIDIwLCAKKyAgICAxLCA4MiwgMjMyLCAxMDMsIDIwLCAxLCA4MiwgMjMwLCAyMzUsIDIwLCAxLCA4MiwgMjIzLCA1NCwgMjAsIDEsIDgyLCAyMjMsIAorICAgIDE3NCwgMjAsIDEsIDgyLCAyMjgsIDI1MSwgMjAsIDEsIDgyLCAyMjksIDgyLCAyMCwgMSwgODIsIDIyMCwgOSwgMjAsIDEsIAorICAgIDgyLCAyMTksIDI1NCwgMjAsIDEsIDgyLCAyNDMsIDI0MiwgMjIzLCA4OSwgMjAsIDEsIDgyLCAxOTgsIDIwLCAxLCA4MiwgCisgICAgMjI1LCAxMTEsIDIwLCAxLCA4MiwgMjMyLCAxMjUsIDIwLCAxLCA4MiwgMjM0LCAzNCwgMjAsIDEsIDgyLCAyMzEsIDYzLCAKKyAgICAyMCwgMSwgODIsIDE4NiwgMjAsIDEsIDgyLCAyMzEsIDE3NCwgMjAsIDEsIDgyLCAyMTYsIDIyMiwgMjAsIDEsIDgyLCAyMzQsIAorICAgIDk4LCAyMCwgMSwgODIsIDIzMCwgMTU1LCAyMCwgMSwgODIsIDIxNiwgMjQ4LCAyMCwgMSwgODIsIDI0NCwgMTc3LCAyMCwgMSwgCisgICAgODIsIDI0MiwgMjMwLCAyMCwgMSwgMjI1LCAxNDAsIDE3NiwgMjAsIDEsIDIyNSwgMTQwLCA2OSwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyMzMsIDIyMywgMjAsIDEsIDIyNSwgMTQwLCAyNDUsIDIxNywgMjAsIDEsIDIyNSwgMTQwLCAyMjMsIDExMSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMTcsIDg3LCAyMCwgMSwgMjI1LCAxNDAsIDIyNywgMTUyLCAyMCwgMSwgMjI1LCAxNDAsIDIzMywgMTQxLCAKKyAgICAyMCwgMSwgMjI1LCAxNDAsIDIyMiwgMjQyLCAyMCwgMSwgMjI1LCAxNDAsIDIyMywgMzIsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjMxLCA4NCwgMjAsIDEsIDIyNSwgMTQwLCAyMTcsIDEwMiwgMjAsIDEsIDIyNSwgMTQwLCAyMjksIDE1MSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMjgsIDE4OCwgMjAsIDEsIDIyNSwgMTQwLCAxOTQsIDIwLCAxLCAyMjUsIDE0MCwgMjE4LCA1LCAyMCwgMSwgCisgICAgMjI1LCAxNDAsIDIyMCwgMjksIDIwLCAxLCAyMjUsIDE0MCwgMjE5LCAxOTMsIDIwLCAxLCAyMjUsIDE0MCwgMjIwLCAxMjUsIAorICAgIDIwLCAxLCAyMjUsIDE0MCwgMjMzLCAxNjEsIDIwLCAxLCAyMjUsIDE0MCwgMjM0LCAxNjIsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjI3LCAyMTMsIDIwLCAxLCAyMjUsIDE0MCwgMjI3LCAyNDIsIDIwLCAxLCAyMjUsIDE0MCwgMjI4LCAxNTksIDIwLCAxLCAKKyAgICAyMjUsIDE0MCwgMjEwLCAyMjYsIDIwLCAxLCAyMjUsIDE0MCwgMjE5LCAyMjcsIDIwLCAxLCAyMjUsIDE0MCwgMTkyLCAyMCwgCisgICAgMSwgMjI1LCAxNDAsIDIyOCwgMTQsIDIwLCAxLCAyMjUsIDE0MCwgMjI1LCAxNTQsIDIwLCAxLCAyMjUsIDE0MCwgMjI3LCAKKyAgICAyNTEsIDIwLCAxLCAyMjUsIDE0MCwgMjExLCAxOTIsIDIwLCAxLCAyMjUsIDE0MCwgMjI1LCAyMTQsIDIwLCAxLCAyMjUsIAorICAgIDE0MCwgMjIyLCAxNDIsIDIwLCAxLCAyMjUsIDE0MCwgMjI4LCAyMzgsIDIwLCAxLCAyMjUsIDE0MCwgMjIzLCA1NCwgMjAsIAorICAgIDEsIDIyNSwgMTQwLCAyMzQsIDE3MSwgMjAsIDEsIDIyNSwgMTQwLCAyMjksIDEyLCAyMCwgMSwgMjI1LCAxNDAsIDIyOSwgCisgICAgNjEsIDIwLCAxLCAyMjUsIDE0MCwgMjIwLCA5LCAyMCwgMSwgMjI1LCAxNDAsIDIyNCwgMTUwLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDI0NCwgNDUsIDIwLCAxLCAyMjUsIDE0MCwgMjEyLCA2NSwgMjAsIDEsIDIyNSwgMTQwLCAyMzIsIDI0NywgMjAsIDEsIDIyNSwgCisgICAgMTQwLCAyMzIsIDEyNSwgMjAsIDEsIDIyNSwgMTQwLCAyMzQsIDM0LCAyMCwgMSwgMjI1LCAxNDAsIDIzMSwgMTE5LCAyMCwgCisgICAgMSwgMjI1LCAxNDAsIDIyMywgODYsIDIwLCAxLCAyMjUsIDE0MCwgMTg2LCAyMCwgMSwgMjI1LCAxNDAsIDIzMCwgMTY2LCAKKyAgICAyMCwgMSwgMjI1LCAxNDAsIDIzMSwgMTI3LCAyMCwgMSwgMjI1LCAxNDAsIDIxNiwgMjMxLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDIzNCwgMSwgMjAsIDEsIDIyNSwgMTQwLCAyMjEsIDI1MywgMjAsIDEsIDIyNSwgMTQwLCAyMTIsIDExNSwgOTUsIDEsIDE5MSwgCisgICAgOTUsIDEsIDI1MiwgMTk5LCA5NSwgMSwgOCwgMTkxLCA5NSwgMSwgMjI1LCA0NSwgOTUsIDEsIDE4NiwgOTUsIDEsIDIzMCwgCisgICAgMjM4LCA5NSwgMSwgMjU0LCAzMSwgMTg2LCA5NSwgMSwgMjQ0LCAyMDQsIDk1LCAxLCAyMTQsIDI3LCA5NSwgMSwgMjEzLCAKKyAgICAxNzcsIDk1LCAxLCAyMTcsIDEwNiwgOTUsIDEsIDI0OCwgMjI5LCA5NSwgMSwgOCwgMjE1LCAxNTcsIDk1LCAxLCA4LCAyMTcsIAorICAgIDEwNiwgOTUsIDEsIDIxNSwgMTU3LCA5NSwgMSwgMjQ4LCAxNDMsIDk1LCAxLCAxOTgsIDk1LCAxLCAyMjgsIDI0MiwgOTUsIAorICAgIDEsIDgsIDIyOCwgMTE1LCA5NSwgMSwgMjU0LCAzMSwgMTk4LCA5NSwgMSwgMjI4LCAxMTUsIDk1LCAxLCAyMjgsIDEwMSwgCisgICAgOTUsIDEsIDIzMywgMTQxLCA5NSwgMSwgMjMyLCA2NiwgOTUsIDEsIDIzMywgNCwgOTUsIDEsIDIzMiwgMjQ5LCA5NSwgMSwgCisgICAgMjE2LCA1NywgOTUsIDEsIDI0NywgMTYxLCA5NSwgMSwgMjE2LCA0OSwgOTUsIDEsIDI0NywgMTYwLCA5NSwgMSwgMTc2LCAKKyAgICA5NSwgMSwgMjQzLCAxNDIsIDk1LCAxLCA4LCAxNzYsIDk1LCAxLCAyMjQsIDkxLCA5NSwgMSwgMjI0LCA2OSwgOTUsIDEsIAorICAgIDIyOSwgODIsIDk1LCAxLCAyMjksIDMzLCA5NSwgMSwgMjU0LCAzMSwgMjI5LCA4MiwgOTUsIDEsIDE2MiwgOTUsIDEsIDIxMSwgCisgICAgMTY1LCA5NSwgMSwgMjQzLCAwLCA5NSwgMSwgMjQyLCAyMzMsIDk1LCAxLCAyMTUsIDE2NiwgOTUsIDEsIDI0NiwgMzQsIDk1LCAKKyAgICAxLCAyMjcsIDE2OSwgOTUsIDEsIDIyNywgMTU0LCA5NSwgMSwgMjE1LCAxNzYsIDk1LCAxLCAyNDYsIDQxLCA5NSwgMSwgOCwgCisgICAgMjE1LCAxNzYsIDk1LCAxLCA4LCAyNDYsIDQxLCA5NSwgMSwgMjIzLCAxMDksIDIxNSwgMTc2LCA5NSwgMSwgMjIwLCAxMDQsIAorICAgIDk1LCAxLCAyMTgsIDIyNSwgOTUsIDEsIDIxMCwgODIsIDk1LCAxLCAyMTAsIDE0LCA5NSwgMSwgMjE1LCAxODQsIDk1LCAxLCAKKyAgICAyNDYsIDQ2LCA5NSwgMSwgOCwgMjE1LCAxODQsIDk1LCAxLCAyMDYsIDk1LCAxLCAyMTAsIDExNiwgOTUsIDEsIDIxMCwgMTUsIAorICAgIDk1LCAxLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgMjIzLCA5NSwgMSwgMjU0LCAzMSwgMjA5LCAyNDMsIDk1LCAxLCAyMDksIAorICAgIDIxNSwgOTUsIDEsIDIwOSwgMjIyLCA5NSwgMSwgMjEyLCA2NSwgOTUsIDEsIDI1NCwgMjE4LCA5NSwgMSwgMjQxLCAxOTYsIAorICAgIDk1LCAxLCAyMjksIDE5NywgOTUsIDUsIDI1MywgMjMwLCA5NSwgNSwgMjIzLCAxMDksIDIxMywgMTMzLCA5NSwgNSwgMjIzLCAKKyAgICAxMDksIDI1MywgMjMwLCA5NSwgMjUsIDUsIDYxLCA5NSwgMjUsIDUsIDI1NSwgODIsIDk1LCAyNSwgNSwgMjU0LCAyMTQsIAorICAgIDk1LCAyNSwgNSwgMjU0LCAxMzEsIDk1LCAyNSwgNSwgMjU0LCAxMjMsIDk1LCAyNSwgNSwgNzgsIDk1LCAyNSwgNSwgMjI2LCAKKyAgICAxODcsIDk1LCAyNSwgNSwgMjExLCAyMjcsIDk1LCAyNSwgNSwgMjEyLCA5OCwgOTUsIDI1LCA1LCA3NiwgOTUsIDI1LCA1LCAKKyAgICAyNDUsIDE1OCwgOTUsIDI1LCA1LCAyNDUsIDE0NiwgOTUsIDI1LCA1LCAyMjYsIDIzNiwgOTUsIDI1LCA1LCA3NCwgOTUsIAorICAgIDI1LCA1LCAyNDAsIDEyNiwgOTUsIDI1LCA1LCAyNDAsIDEyNSwgOTUsIDI1LCA1LCAyNDAsIDEyNCwgOTUsIDI1LCA1LCAKKyAgICAyMzUsIDE5NiwgOTUsIDI1LCA1LCAyMzYsIDY3LCA5NSwgMjUsIDUsIDIzNiwgNDAsIDk1LCAyNSwgNSwgMjM1LCAxNjIsIAorICAgIDk1LCAyNSwgNSwgMjM1LCAyMzgsIDk1LCAyNSwgNSwgNjksIDk1LCAyNSwgNSwgMjE0LCAyMjksIDk1LCAyNSwgNSwgMjE0LCAKKyAgICAyMjgsIDk1LCAyNSwgNSwgMjE0LCAyMjcsIDk1LCAyNSwgNSwgMjE0LCAxMTgsIDk1LCAyNSwgNSwgMjE0LCAyMTEsIDk1LCAKKyAgICAyNSwgNSwgMjE0LCAxNzgsIDk1LCAyNSwgNSwgMjExLCAxMTcsIDk1LCAyNSwgNSwgMjExLCA4LCA5NSwgMjUsIDUsIDI1NCwgCisgICAgMjUyLCA5NSwgMjUsIDUsIDI1NCwgMjQ4LCA5NSwgMjUsIDUsIDI0NSwgOTQsIDk1LCAyNSwgNSwgMjIyLCAxODUsIDI0NSwgCisgICAgOTQsIDk1LCAyNSwgNSwgMjQ1LCAxMDAsIDk1LCAyNSwgNSwgMjIyLCAxODUsIDI0NSwgMTAwLCA5NSwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCA5NSwgMjUsIDUsIDI0NSwgMjAzLCA5NSwgMjUsIDUsIDI1MywgMjAwLCA5NSwgMjUsIDUsIDIyNiwgMTM4LCA5NSwgCisgICAgMjUsIDUsIDIzMCwgMzAsIDk1LCAyNSwgNSwgMjI5LCA4NCwgOTUsIDEzOCwgMjIyLCAyNTQsIDk1LCAxMzgsIDIxNiwgMTUsIAorICAgIDIyMiwgMjU0LCA5NSwgMTM4LCA0OCwgOTUsIDEzOCwgNTEsIDk1LCAxLCAyMTYsIDI5LCA5NSwgMSwgMjE2LCAyOCwgOTUsIAorICAgIDEsIDIxNiwgMjcsIDk1LCAxLCAyMTYsIDI2LCA5NSwgMSwgMjE2LCAyNSwgOTUsIDEsIDIxNiwgMjQsIDk1LCAxLCAyMTYsIAorICAgIDIzLCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMzAsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAyOSwgOTUsIDEsIDIyMywgMTA5LCAKKyAgICAyMTYsIDI3LCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMjYsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAyNSwgOTUsIDEsIDIyMywgCisgICAgMTA5LCAyMTYsIDIzLCA1NiwgMSwgMjU0LCAzMSwgNzYsIDE0MSwgMSwgMjU0LCAzMSwgMjExLCA0NywgNDksIDI4LCAxNiwgCisgICAgMjI0LCAxNTcsIDQ5LCAyOCwgMTYsIDI0OCwgMTY2LCA0OSwgMjgsIDE2LCAyMjUsIDE3OCwgNDksIDI4LCAxNiwgMjI2LCAKKyAgICAxMTcsIDI0NSwgMTg2LCA0OSwgMjgsIDE2LCAyMjYsIDExNywgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDI0NSwgCisgICAgMTg2LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjM0LCAyMDMsIDQ5LCAyOCwgMTYsIAorICAgIDIxNywgMTcwLCA0OSwgMjgsIDE2LCAyMjYsIDEzLCA0OSwgMjgsIDE2LCAyMTAsIDIxNywgNDksIDI4LCAxNiwgMjEwLCAKKyAgICAyMTgsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMzMsIDI0MCwgNDksIDI4LCAxNiwgMjU0LCA3NiwgMjQ1LCAxODYsIDQ5LCAKKyAgICAyOCwgMTYsIDI0NSwgMzQsIDI0NSwgMTg2LCA0OSwgMjgsIDE2LCAyMTcsIDMsIDQ5LCAyOCwgMTYsIDIzNCwgMTY3LCA0OSwgCisgICAgMjgsIDE2LCAyNTQsIDY2LCA0OSwgMjgsIDE2LCAyNTQsIDY3LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjE3LCAxNzYsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNiwgMTYwLCA0OSwgMjgsIDE2LCAyMjYsIDIxMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjQyLCAxNjYsIAorICAgIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyNCwgMTU2LCA0OSwgMjgsIDE2LCAyNTAsIDE1NywgNDksIDI4LCAxNiwgMjE0LCA2LCAKKyAgICA0OSwgMjgsIDE2LCAyMzUsIDE3MCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjM0LCAxNjksIDI1NCwgMjksIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgMTY4LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjEsIDIxNSwgNDksIDI4LCAxNiwgMjI2LCA0LCA0OSwgMjgsIDE2LCAKKyAgICAyMTgsIDE0OCwgMjU0LCA2OSwgNDksIDI4LCAxNiwgMjI2LCAxMTYsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIxNCwgMTUsIAorICAgIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI1NCwgNzAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI1NCwgNjQsIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgNDMsIDQ5LCAyOCwgMTYsIDIyMywgNDksIDQ5LCAyOCwgMTYsIDIyNSwgMTA5LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAKKyAgICAyMTYsIDg0LCA0OSwgMjgsIDE2LCAyNTQsIDEyOSwgNDksIDI4LCAxNiwgMjIxLCAxNjEsIDQ5LCAyOCwgMTYsIDIxNywgCisgICAgMTc5LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMTcsIDE3OSwgMjMxLCA0NSwgMjE4LCAxNDYsIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTExLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMTYsIDE5MSwgNDksIDI4LCAxNiwgMjMzLCAzMywgNDksIDI4LCAxNiwgMjQ2LCAKKyAgICA0OSwgNDksIDI4LCAxNiwgMjE1LCAyMjgsIDQ5LCAyOCwgMTYsIDIxNiwgMjMzLCA0OSwgMjgsIDE2LCAyMzMsIDI0MywgNDksIAorICAgIDI4LCAxNiwgMjU0LCA3NiwgMjQ1LCAzNCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNTQsIDI5LCA0OSwgCisgICAgMjgsIDE2LCAyMzYsIDE5LCA0OSwgMjgsIDE2LCAyMTUsIDIwMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjM0LCAyMDYsIAorICAgIDIxNSwgMTk5LCA0OSwgMjgsIDE2LCAyMjUsIDIwMywgNDksIDI4LCAxNiwgMjI0LCAxNjEsIDQ5LCAyOCwgMTYsIDIzNCwgCisgICAgMTcsIDQ5LCAyOCwgMTYsIDI1MCwgODgsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyMywgMTQ5LCA0OSwgMjgsIDE2LCAyMjYsIAorICAgIDE2LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjYsIDE0LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyNDAsIDExNiwgNDksIDI4LCAKKyAgICAxNiwgMjI5LCAyMDgsIDQ5LCAyOCwgMTYsIDIyNSwgMTU5LCA0OSwgMjgsIDE2LCAyMzQsIDE4LCAyNTQsIDE1OCwgNDksIAorICAgIDI4LCAxNiwgMjE1LCAyMDAsIDI1NCwgMTU4LCA0OSwgMjgsIDE2LCAyMTgsIDEyNSwgNDksIDI4LCAxNiwgMjQyLCAxMzAsIAorICAgIDQ5LCAyOCwgMTYsIDIzNSwgMTcwLCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI2LCAyMTAsIDIyOSwgMTAwLCA0OSwgMjgsIAorICAgIDE2LCAyMjYsIDExNywgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNSwgMTU4LCA0OSwgMjgsIDE2LCAyMzQsIDQsIDQ5LCAyOCwgCisgICAgMTYsIDIyNSwgMTU3LCA0OSwgMjgsIDE2LCAyMzMsIDI0MiwgNDksIDI4LCAxNiwgMjI1LCAyMDQsIDIyOSwgMTAwLCA0OSwgCisgICAgMjgsIDE2LCAyMzQsIDE2OCwgMjI5LCAxMDEsIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyMzQsIDE2OSwgMjI5LCAxMDEsIAorICAgIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyMTAsIDIxNSwgNDksIDI4LCAxNiwgMjU0LCA2NywgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDI1NCwgNjgsIDIxNywgMTc3LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjEwLCAyMTYsIDQ5LCAyOCwgMTYsIDIzMywgCisgICAgMjQxLCA0OSwgMjgsIDE2LCAyNDUsIDE4MSwgNDksIDI4LCAxNiwgMjUwLCAxNTgsIDQ5LCAyOCwgMTYsIDIzMCwgMjAzLCAKKyAgICAyMzUsIDE2OSwgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNSwgMTA5LCAyMjksIDEwMCwgCisgICAgNDksIDI4LCAxNiwgMjI0LCAxNjIsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjYsIDIwNywgNDksIDI4LCAxNiwgMjU0LCAKKyAgICA5MiwgNDksIDI4LCAxNiwgMjMyLCA2MywgNDksIDI4LCAxNiwgMjI2LCAxNCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTYsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDUsIDY4LCAyMjYsIDE1LCA0OSwgMjgsIDE2LCAyMzMsIDE1OSwgNDksIDI4LCAKKyAgICAxNiwgMjU0LCA5MywgNDksIDI4LCAxNiwgMjE1LCAyMDAsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDUsIDE4NCwgNDksIAorICAgIDI4LCAxNiwgMjE3LCAxNzksIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMTcsIDE3MSwgNDksIDI4LCAxNiwgMjUwLCA4OCwgCisgICAgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0NSwgMTE0LCA0OSwgMjgsIDE2LCAyMjEsIDE2MiwgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDIxMSwgMTUxLCAyMzQsIDQzLCA0OSwgMjgsIDE2LCAyMTUsIDE5NywgNDksIDI4LCAxNiwgMjI0LCAxNjMsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNSwgMjAxLCA0OSwgMjgsIDE2LCAyMTUsIDE5OCwgNDksIDI4LCAxNiwgMjI0LCAxNjAsIDQ5LCAyOCwgMTYsIAorICAgIDIxNSwgMTk2LCA0OSwgMjgsIDE2LCAyMjQsIDE1OSwgNDksIDI4LCAxNiwgMjQyLCAxNjUsIDQ5LCAyOCwgMTYsIDI1NCwgCisgICAgMjIsIDQ5LCAyOCwgMTYsIDI0NSwgNjgsIDI1NCwgMjIsIDQ5LCAyOCwgMTYsIDIyNiwgMTExLCAyMjksIDEwMCwgNDksIDI4LCAKKyAgICAxNiwgMjE2LCAxOTAsIDI0NSwgNzcsIDQ5LCAyOCwgMTYsIDIxNiwgMTkwLCAyNDUsIDMzLCA0OSwgMjgsIDE2LCAyMTYsIAorICAgIDE5MiwgMjU0LCA3MSwgNDksIDI4LCAxNiwgMjE2LCAxODUsIDIzNCwgMjUzLCAyNTQsIDYzLCA0OSwgMjgsIDE2LCAyMzQsIAorICAgIDIwNSwgNDksIDI4LCAxNiwgMjQ1LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTEsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAKKyAgICAyMTEsIDExLCAyNTQsIDEwNCwgNDksIDI4LCAxNiwgMjE4LCAxNDcsIDQ5LCAyOCwgMTYsIDIzNCwgNDQsIDI1NCwgMTA0LCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIxMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjMzLCAyNDQsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIAorICAgIDIzMywgMjQ0LCAyNTQsIDE1OCwgNDksIDI4LCAxNiwgMjMzLCAyNDQsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNTQsIDcwLCAKKyAgICAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjU0LCA3MiwgNDksIDI4LCAxNiwgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIxNSwgCisgICAgMjExLCA0OSwgMjgsIDE2LCAyMTYsIDIyNSwgNDksIDI4LCAxNiwgMjM0LCA4LCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAyNDUsIAorICAgIDE0MiwgMjUwLCA3OSwgNDksIDI4LCAxNiwgMjMzLCAzOCwgMjQ2LCA1MCwgMjUwLCA4MCwgNDksIDI4LCAxNiwgMjMzLCAzOCwgCisgICAgMjE1LCAyMTMsIDI1MCwgODAsIDQ5LCAyOCwgMTYsIDIzMywgMzgsIDIxNiwgMjM1LCAyNTAsIDgwLCA0OSwgMjgsIDE2LCAKKyAgICAyMzMsIDM4LCAyMzYsIDE0LCAyNTAsIDc5LCA0OSwgMjgsIDE2LCAyNDIsIDE2NiwgMjI5LCAxMDEsIDI1NCwgMTA0LCA0OSwgCisgICAgMjgsIDE2LCAyNDIsIDE2NiwgMjI2LCA1LCAyNTQsIDE4LCA0OSwgMjgsIDE2LCAyNDIsIDE2NiwgMjI2LCA1LCAyNDgsIDM3LCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIzMywgNDksIDI4LCAxNiwgMjQ3LCAyMzQsIDIyNiwgNSwgMjU0LCAxOSwgMjM0LCAyMDIsIAorICAgIDQ5LCAyOCwgMTYsIDI0NywgMjM0LCAyMjYsIDUsIDI1NCwgMTksIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyNDcsIDIzNCwgCisgICAgMjI2LCA1LCAyNDgsIDM3LCA0OSwgMjgsIDE2LCAyMTUsIDIxNywgNDksIDI4LCAxNiwgMjU0LCAyMywgNDksIDI4LCAxNiwgCisgICAgMjM2LCAyMSwgNDksIDI4LCAxNiwgMjQ3LCAyNTQsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyMjUsIDMsIDI1NCwgMjQsIDQ5LCAKKyAgICAyOCwgMTYsIDI1NCwgMjIwLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjU0LCAyNCwgNDksIDI4LCAxNiwgCisgICAgMjU0LCAyMjAsIDIzMSwgMzksIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyMzEsIDUwLCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgCisgICAgMjQyLCAxNjcsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyNDIsIDE2NCwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDIyNSwgMywgCisgICAgMjQyLCAxNjcsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMjQsIDE2OCwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyNTQsIDE2MCwgMjI0LCAxNjgsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjQ4LCAzNiwgMjQwLCAxMTQsIAorICAgIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyNTQsIDE2MCwgMjQ4LCAzNiwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyMTUsIDIwNiwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMTUsIDIxOCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAorICAgIDIxNiwgMjI5LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIxNiwgMjI5LCAyMzMsIDQxLCAyNDAsIDExNCwgCisgICAgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIzMywgNDEsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjI1LCA0MiwgCisgICAgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzNSwgMTc2LCAyMTYsIDI1MiwgMjQwLCAxMTUsIDQ5LCAyOCwgMTYsIDI1NCwgNjgsIAorICAgIDIxNiwgMjUyLCAyNDAsIDExNSwgNDksIDI4LCAxNiwgMjQ0LCAxODAsIDIxNiwgMjI2LCA0OSwgMjgsIDE2LCAyNDQsIDE4MCwgCisgICAgMjMwLCAxNDgsIDQ5LCAyOCwgMTYsIDI0NCwgMTgwLCAyNDcsIDIzOCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIxNCwgMTAsIAorICAgIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjI0LCAxNjcsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgCisgICAgMjI1LCA0MiwgMjE2LCAyMjksIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyNDIsIDE2MiwgMjMwLCAzMSwgMjU0LCA3MSwgNDksIAorICAgIDI4LCAxNiwgMjQyLCAxNjIsIDIzMCwgMzEsIDI0NywgMjA4LCA0OSwgMjgsIDE2LCAyNDUsIDE1NiwgMjM0LCAyNTMsIDI0MywgCisgICAgMjQzLCAyMTMsIDEyNCwgNDksIDI4LCAxNiwgMjM2LCAyMCwgNDksIDI4LCAxNiwgMjM2LCAxOCwgNDksIDI4LCAxNiwgMjQzLCAKKyAgICAyNDMsIDI1NCwgMzAsIDI0OCwgMzUsIDI0MCwgMTEzLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDE5MSwgNDksIAorICAgIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyMjksIDIwOCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIyOSwgMjAzLCAKKyAgICAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyNDgsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgCisgICAgMjE5LCAxMDQsIDI0NywgMjUxLCAyNDgsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIzNCwgMTg4LCAKKyAgICA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgCisgICAgMjI4LCAyMzksIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIyOCwgMjM5LCAyNTQsIDEwNCwgCisgICAgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIzMSwgMTk2LCAyNTAsIDgxLCAyNDcsIDIzOCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIAorICAgIDIzMSwgMTk2LCAyNTAsIDgxLCAyMzAsIDE0OCwgNDksIDI4LCAxNiwgMjQ0LCAxMzAsIDIxOSwgMTA0LCAyNTAsIDgxLCAKKyAgICAyMTQsIDksIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyMTksIDEwNCwgMjUwLCA4MSwgMjE3LCAxODAsIDQ5LCAyOCwgMTYsIAorICAgIDI0MywgMjQzLCAyMjksIDEwMiwgNDksIDI4LCAxNiwgMjUwLCA4MiwgMjA5LCAyNDksIDQ5LCAyOCwgMTYsIDI1MCwgODIsIAorICAgIDIzNCwgNDIsIDQ5LCAyOCwgMTYsIDI1MCwgODIsIDIxOSwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDAsIDE2MSwgCisgICAgMjExLCAxMCwgMjE2LCAyMzAsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDUsIDE1NywgMjU0LCA5NCwgNDksIDI4LCAxNiwgCisgICAgMjExLCAxMCwgMjE1LCAyMDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyMTUsIDIwNywgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIAorICAgIDIxNiwgMjMwLCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjU0LCA3MywgMjQ2LCA1MCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIAorICAgIDI0NywgMjQ2LCAyMzAsIDE0NiwgMjE2LCAyMzQsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjQ3LCAyMzAsIAorICAgIDI0NSwgNDQsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjE1LCAyMTUsIDIyNiwgMjE1LCAyNDcsIDE0NywgCisgICAgNDksIDI4LCAxNiwgMjExLCAxMCwgMjU0LCA3MywgMjQ2LCA1MCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIAorICAgIDIzMCwgMTQ2LCAyMTYsIDIzNCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDI0NywgMjMwLCAyNDUsIDQ0LCAKKyAgICAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMCwgMjE1LCAyMTUsIDIyNiwgMjE1LCAyNDcsIDE0NywgNDksIDI4LCAxNiwgCisgICAgMjQzLCA1NiwgMjQ3LCAyNDUsIDQ5LCAyOCwgMTYsIDI0MywgNTYsIDIxMSwgOSwgNDksIDI4LCAxNiwgMjQ3LCAyNTMsIAorICAgIDI1NCwgNzMsIDIzMCwgMjA0LCA0OSwgMjgsIDE2LCAyNDcsIDI1MywgMjU0LCA3MywgMjMxLCA3OCwgNDksIDI4LCAxNiwgCisgICAgMjQ3LCAyNTMsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyNDcsIDI1MywgMjE2LCAxODMsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAKKyAgICAyMTYsIDE4MywgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDIxNiwgMTg0LCAyNDcsIDE5NCwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIAorICAgIDIxNiwgMTg0LCAyMTUsIDIwOCwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDIxNiwgMTg0LCAyMTYsIDIyMywgNDksIDI4LCAxNiwgCisgICAgMjE5LCAxNjUsIDI1MywgMjUyLCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjUzLCAyNTMsIDI0NywgMTk0LCA0OSwgMjgsIDE2LCAKKyAgICAyMTksIDE2NSwgMjUzLCAyNTMsIDIxNSwgMjA4LCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjUzLCAyNTMsIDIxNiwgMjIzLCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIzMSwgMjQzLCAzNywgNDksIDI4LCAxNiwgMjQ3LCAyMzcsIDIyNiwgMTM4LCA0OSwgMjgsIAorICAgIDE2LCAyMTgsIDEzOSwgNDksIDI4LCAxNiwgMjU0LCAxNSwgMTkxLCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyMTMsIDEyNCwgCisgICAgNDksIDI4LCAxNiwgMjU0LCAxNSwgMjQzLCAxNDIsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDI0OCwgMTEsIDQ5LCAyOCwgMTYsIAorICAgIDI1NCwgMTUsIDIzNCwgMTg4LCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyMTAsIDIzLCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAKKyAgICAyMjgsIDIzOCwgNDksIDI4LCAxNiwgMjM0LCAxNjgsIDIyOSwgMTAxLCAyMzEsIDQ5LCA0OSwgMjgsIDE2LCAyMzQsIDE2OSwgCisgICAgMjI5LCAxMDEsIDIzMSwgNDksIDQ5LCAyOCwgMTYsIDIzNCwgMTY4LCAyMjksIDEwMSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgMTY5LCAyMjksIDEwMSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIDIzNCwgNDQsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAKKyAgICAyNDIsIDE2NiwgMjI5LCAxMDEsIDIzNCwgMjAyLCAyOCwgMTYsIDIxOSwgMTU3LCAyNTIsIDE0MywgMjgsIDE2LCA1MiwgCisgICAgMjUyLCAxNDMsIDI4LCAxNiwgNDAsIDI1MiwgMTQzLCAyOCwgMTYsIDIyMywgNTMsIDQwLCAyNTIsIDE0MywgMjgsIDE2LCAKKyAgICAyNDgsIDE2MywgMjUyLCAxNDMsIDI4LCAxNiwgMjE5LCAyNTMsIDI1MiwgMTQzLCAyOCwgMTYsIDQzLCAyMjMsIDgwLCA1MCwgCisgICAgMjgsIDE2LCA0NCwgMjIzLCA4MCwgNTAsIDI4LCAxNiwgMjIzLCA4MCwgMjQ3LCAxMjYsIDI4LCAxNiwgMjQ4LCAyMDQsIAorICAgIDIyMSwgMTY1LCAyOCwgMTYsIDI0OCwgMjMwLCAyNTEsIDEsIDI4LCAxNiwgMjIxLCAxNjUsIDI4LCAxNiwgMjQ5LCAyNDIsIAorICAgIDI4LCAxNiwgMjIzLCA3OCwgMjQ0LCAxMTksIDI4LCAxNiwgMjIzLCA3OCwgMjQ0LCAxMTgsIDI4LCAxNiwgMjIzLCA3OCwgCisgICAgMjQ0LCAxMTcsIDI4LCAxNiwgMjQ0LCAxMzksIDI4LCAxNiwgMjQ0LCAxNDAsIDUxLCAyOCwgMTYsIDI1MSwgMTU2LCA3OSwgCisgICAgMjgsIDE2LCAyNTEsIDMyLCAyOCwgMTYsIDI1MSwgMTY3LCAyOCwgMTYsIDEyNywgMjgsIDE2LCAyMjYsIDE5NywgMjE4LCAKKyAgICAxNjUsIDI4LCAxNiwgMjE1LCA1NywgMjE4LCAxNjUsIDI4LCAxNiwgMjE2LCAxNDMsIDIxOCwgMTY1LCAyOCwgMTYsIDI0NCwgCisgICAgMTgsIDIxOCwgMTY1LCAyOCwgMTYsIDI0NCwgODgsIDIxOCwgMTY1LCAyOCwgMTYsIDIxOSwgMTI2LCAyMTgsIDE2NSwgMjgsIAorICAgIDE2LCAyMTksIDEyNCwgMjQ0LCAyLCAyOCwgMTYsIDI0NCwgMTYsIDI0NCwgMiwgMjgsIDE2LCAyNDMsIDIxMCwgMjUwLCAyMiwgCisgICAgMjgsIDE2LCAyNDMsIDIxMCwgMjUwLCAyMywgMjI2LCAxNDAsIDI1NCwgMTUwLCAyOCwgMTYsIDI0MywgMjEwLCAyNTAsIDIzLCAKKyAgICAyMjYsIDE0MCwgMjUyLCAxMzAsIDI4LCAxNiwgMjUxLCA3NSwgMjUwLCAyMiwgMjgsIDE2LCAyNDUsIDE1LCAyNTAsIDIyLCAKKyAgICAyOCwgMTYsIDI0NSwgMTUsIDI1MCwgMjMsIDIyNiwgMTQwLCAyNTQsIDE1MCwgMjgsIDE2LCAyNDUsIDE1LCAyNTAsIDIzLCAKKyAgICAyMjYsIDE0MCwgMjUyLCAxMzAsIDI4LCAxNiwgMjQ2LCA5MSwgMjUwLCAyMSwgMjgsIDE2LCAyNDYsIDkxLCAyNTAsIDIwLCAKKyAgICAyOCwgMTYsIDIzMCwgOTAsIDIzMSwgOTUsIDIyMywgNjQsIDI4LCAxNiwgNTIsIDIyMCwgNzcsIDI4LCAxNiwgNTIsIDI0NCwgCisgICAgNzMsIDI4LCAxNiwgMjQ0LCA3NCwgMjE0LCAxNjMsIDI4LCAxNiwgMjQ0LCA3NCwgMjQ2LCAxMTQsIDI4LCAxNiwgMjI5LCAKKyAgICAxOTMsIDIxNCwgMTYzLCAyOCwgMTYsIDIyOSwgMTkzLCAyNDYsIDExNCwgMjgsIDE2LCAyMjAsIDc4LCAyMTQsIDE2MywgMjgsIAorICAgIDE2LCAyMjAsIDc4LCAyNDYsIDExNCwgMjgsIDE2LCAyMjQsIDI1LCAxMzgsIDIyMCwgNzcsIDI4LCAxNiwgMjI0LCAyNSwgCisgICAgMTM4LCAyNDQsIDczLCAyOCwgMTYsIDI0OSwgMjI0LCAyMTYsIDg4LCAyOCwgMTYsIDI0OSwgOTMsIDIxNiwgODgsIDI4LCAKKyAgICAxNiwgMjI2LCAxNDAsIDI1NCwgMTUwLCAyOCwgMTYsIDIyNiwgMTQwLCAyNTIsIDEzMCwgMjgsIDE2LCAyMjQsIDcsIDI1NCwgCisgICAgMTUwLCAyOCwgMTYsIDIyNCwgNywgMjUyLCAxMzAsIDI4LCAxNiwgMjMwLCA5MywgMjIzLCA2NCwgMjgsIDE2LCAyMTEsIAorICAgIDI1MSwgMjIzLCA2NCwgMjgsIDE2LCAxNjMsIDIyMywgNjQsIDI4LCAxNiwgMjI0LCAyNSwgMjIzLCA2NCwgMjgsIDE2LCAKKyAgICAyNDUsIDE5NywgMjIzLCA2NCwgMjgsIDE2LCAyMTksIDEyMCwgMjIzLCA2NCwgMjgsIDE2LCAyMTYsIDE2MSwgMjIzLCA2NCwgCisgICAgMjgsIDE2LCAyMTksIDExMiwgMjIzLCA2NCwgMjgsIDE2LCAxMjMsIDI0MCwgMjE4LCAyMTUsIDcxLCAyMjMsIDY0LCAyOCwgCisgICAgMTYsIDIxMSwgMTc5LCAyMjgsIDQ4LCAyOCwgMTYsIDk2LCAyMjgsIDQ4LCAyOCwgMTYsIDI1MCwgNDQsIDIxMSwgMTc5LCAKKyAgICAyMjgsIDQ4LCAyOCwgMTYsIDQyLCAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCA0MiwgMjI4LCA0OSwgMjUxLCAyMjksIAorICAgIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgCisgICAgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDQzLCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCAKKyAgICA0OSwgNDMsIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAKKyAgICAyMjcsIDIyOCwgNDksIDQ0LCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTI0LCAyMTEsIDI1MywgMjgsIAorICAgIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTI0LCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCA0NCwgCisgICAgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgNDQsIDI1MSwgMjI5LCAyOCwgMTYsIDIzMCwgMTM0LCAKKyAgICAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCAyMzAsIDEzNCwgMjI4LCA0OSwgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjQsIAorICAgIDIyOCwgNDksIDEyNCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjQsIDIyOCwgNDksIDEyNCwgMjUxLCAyMjksIDI4LCAxNiwgCisgICAgMjI2LCA4LCAyMjgsIDQ4LCAyOCwgMTYsIDIxMywgMTMyLCAyMjgsIDQ4LCAyOCwgMTYsIDIyOCwgNDksIDI1MSwgMjI5LCAKKyAgICAyOCwgMTYsIDIyNywgMjA3LCAyMjgsIDQ4LCAyOCwgMTYsIDI0OSwgMjQ5LCAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCAKKyAgICAyNDksIDI0OSwgMjI4LCA0OSwgMjUxLCAyMjksIDI4LCAxNiwgMjUxLCAxNTQsIDI4LCAxNiwgMjExLCAyNTEsIDIyOCwgNTIsIAorICAgIDI4LCAxNiwgMTYzLCAyMjgsIDUyLCAyOCwgMTYsIDIyNCwgMjUsIDIyOCwgNTIsIDI4LCAxNiwgMjQ1LCAxOTcsIDIyOCwgCisgICAgNTIsIDI4LCAxNiwgMjE5LCAxMjAsIDIyOCwgNTIsIDI4LCAxNiwgMjE2LCAxNjEsIDIyOCwgNTIsIDI4LCAxNiwgMjE5LCAKKyAgICAxMTIsIDIyOCwgNTIsIDI4LCAxNiwgMTIzLCAyNDAsIDIxOCwgMjE1LCA3MSwgMjI4LCA1MiwgMjgsIDE2LCAzOCwgMjE4LCAKKyAgICAxNDEsIDI4LCAxNiwgMzgsIDIxOCwgMjQyLCAyMTgsIDE0MSwgMjgsIDE2LCAzOCwgMjE1LCAyMzUsIDI4LCAxNiwgMzgsIAorICAgIDIxNSwgMjM0LCAyOCwgMTYsIDM4LCAyMTUsIDIzMywgMjgsIDE2LCAyNDQsIDEwOSwgMjE1LCAyMzUsIDI4LCAxNiwgMjQ0LCAKKyAgICAxMDksIDIxNSwgMjM0LCAyOCwgMTYsIDI0NCwgMTA5LCAyMTUsIDIzMywgMjgsIDE2LCAzOCwgMjUzLCAxOTcsIDI0NywgCisgICAgMTI4LCAyOCwgMTYsIDM4LCAyNDQsIDgwLCAyOCwgMTYsIDM4LCAyNDQsIDc5LCAyOCwgMTYsIDM4LCAyNDQsIDc4LCAyOCwgCisgICAgMTYsIDM4LCAyNDQsIDc3LCAyOCwgMTYsIDM4LCAyNDQsIDc2LCAyOCwgMTYsIDI1MiwgNjYsIDI1MiwgODIsIDI4LCAxNiwgCisgICAgMjQ1LCAxNTEsIDI1MiwgODIsIDI4LCAxNiwgMjUyLCA2NiwgMjE2LCAxMTIsIDI4LCAxNiwgMjQ1LCAxNTEsIDIxNiwgMTEyLCAKKyAgICAyOCwgMTYsIDI1MiwgNjYsIDIxOSwgODIsIDI4LCAxNiwgMjQ1LCAxNTEsIDIxOSwgODIsIDI4LCAxNiwgMjUyLCA2NiwgCisgICAgMjI1LCAxMTgsIDI4LCAxNiwgMjQ1LCAxNTEsIDIyNSwgMTE4LCAyOCwgMTYsIDM4LCAyNTUsIDIzLCAyOCwgMTYsIDM4LCAKKyAgICAyMTgsIDE2NywgMjgsIDE2LCAzOCwgMjE2LCAyMzksIDI4LCAxNiwgMzgsIDIxOCwgMTY4LCAyOCwgMTYsIDM4LCAyMzEsIAorICAgIDE2NywgMjgsIDE2LCAzOCwgMjMxLCAxNjYsIDI4LCAxNiwgMzgsIDI1NSwgMjIsIDI4LCAxNiwgMzgsIDIzMiwgMTE4LCAyOCwgCisgICAgMTYsIDI1NCwgNiwgMjE0LCAxNjMsIDI4LCAxNiwgMjU0LCA2LCAyNDYsIDExNCwgMjgsIDE2LCAzOCwgMjQ3LCAxNDMsIDI4LCAKKyAgICAxNiwgMzgsIDIyMiwgMjM0LCAyOCwgMTYsIDM4LCAyNDQsIDY2LCAyOCwgMTYsIDM4LCAyMTksIDc4LCAyOCwgMTYsIDM4LCAKKyAgICAyNTIsIDQ2LCAyOCwgMTYsIDM4LCA1MiwgMjE2LCAyMCwgMjgsIDE2LCAzOCwgMjE1LCAyMTIsIDIxNiwgMjAsIDI4LCAxNiwgCisgICAgMjIyLCAyMzgsIDI4LCAxNiwgMjE4LCA3NiwgMjgsIDE2LCAyMTAsIDE1OSwgMjgsIDE2LCAyMjUsIDExMCwgMjgsIDE2LCAKKyAgICAyMzEsIDMwLCAyOCwgMTYsIDI0NCwgMjUsIDI4LCAxNiwgMjQ5LCAxNDYsIDI4LCAxNiwgMjQ4LCA4NiwgMjgsIDE2LCAyNDIsIAorICAgIDE1NywgMjI4LCA1MywgMjE5LCA5NywgMjgsIDE2LCAyNDIsIDE1NywgMjI4LCA1MywgMjI4LCA4MCwgMjE5LCA5NywgMjgsIAorICAgIDE2LCAyMTYsIDEsIDI4LCAxNiwgMjE1LCA5NSwgMjgsIDE2LCAyMzUsIDIwMCwgMjE1LCA5NSwgMjgsIDE2LCAyMTUsIDk2LCAKKyAgICAyMTksIDk3LCAyOCwgMTYsIDIxNSwgOTYsIDIxNCwgMTYzLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDEwNCwgMjgsIDE2LCAKKyAgICAyMjYsIDE1MiwgMjE4LCAxMDEsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgMTAwLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIAorICAgIDk5LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk4LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk3LCAyOCwgMTYsIDIyNiwgCisgICAgMTUyLCAyMTgsIDk2LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk1LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk0LCAyOCwgCisgICAgMTYsIDIyNiwgMTUyLCAyMTgsIDEwMywgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCAxMDIsIDI4LCAxNiwgMjQxLCAyNTIsIDI4LCAKKyAgICAxNiwgMjI5LCAxMTAsIDI4LCAxNiwgMjQ1LCAxNTEsIDY0LCAyMTgsIDEzNSwgMjgsIDE2LCAyNDgsIDc5LCAyMTksIDk3LCAKKyAgICAyOCwgMTYsIDM4LCAxMjQsIDI1MSwgMTc3LCAyOCwgMTYsIDM4LCAxMjAsIDI1MSwgMTc3LCAyOCwgMTYsIDM4LCAyNDIsIDcsIAorICAgIDI4LCAxNiwgMzgsIDIxOSwgNjksIDIyNSwgNDYsIDI4LCAxNiwgMjI1LCAyMTksIDc5LCAyOCwgMTYsIDIyNSwgMjE5LCAKKyAgICAxMjAsIDc5LCAyOCwgMTYsIDE2MywgMjI1LCAyMTksIDc5LCAyOCwgMTYsIDI0MiwgMTg5LCAyMTQsIDE2MywgMjgsIDE2LCAKKyAgICAyNDIsIDE4OSwgMjQ2LCAxMTQsIDI4LCAxNiwgMiwgMjQ0LCAxMDgsIDI4LCAxNiwgMjQ4LCAxODgsIDI4LCAxNiwgMjQ4LCAKKyAgICAxODksIDI1NCwgMTYzLCAyOCwgMTYsIDIzMSwgMTM4LCAyOCwgMTYsIDIzMiwgMTM1LCAyOCwgMTYsIDI1MSwgMTUxLCAyOCwgCisgICAgMTYsIDIyMCwgMTU2LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1NiwgMjUxLCAyMjksIDI4LCAxNiwgMjMwLCAxODksIDI4LCAKKyAgICAxNiwgMjMwLCAxOTAsIDI1MSwgMjI5LCAyOCwgMTYsIDIyMCwgMTUwLCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1MCwgCisgICAgMjUxLCAyMjksIDI4LCAxNiwgMjQzLCAyMjcsIDIxMSwgMjUzLCAyOCwgMTYsIDI0MywgMjI3LCAyNTEsIDIyOSwgMjgsIDE2LCAKKyAgICAyMzIsIDEzNiwgMjI1LCAxODMsIDIyMywgNjQsIDI4LCAxNiwgMjMyLCAxMzYsIDIzNiwgMTEsIDIyMywgNjQsIDI4LCAxNiwgCisgICAgMjUxLCAxNTIsIDIyMywgNjQsIDI4LCAxNiwgMjIwLCAxNTYsIDIyMywgNjQsIDI4LCAxNiwgMjMwLCAxOTAsIDIyMywgNjQsIAorICAgIDI4LCAxNiwgMjIwLCAxNTAsIDIyMywgNjQsIDI4LCAxNiwgMjE2LCAyNTAsIDIyNSwgMTgxLCAyNDksIDExNSwgMjI0LCAKKyAgICAxNzcsIDIyNSwgMTgyLCAyOCwgMTYsIDIxNiwgMjUwLCAyMjUsIDE4MSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMzYsIDEwLCAKKyAgICAyOCwgMTYsIDIxNiwgMjUwLCAyMjUsIDE4MSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMjUsIDE4MywgMjQ3LCAyMTksIDI4LCAKKyAgICAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMjUsIDE4MiwgMjgsIDE2LCAyMTYsIDI1MCwgCisgICAgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAxNzcsIDIzNiwgMTAsIDI4LCAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIAorICAgIDIyNCwgMTc3LCAyMzYsIDExLCAyNDcsIDIxOSwgMjgsIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAKKyAgICAxNzcsIDIzNiwgMTEsIDI0NywgMjE4LCAyOCwgMTYsIDIxNiwgMjUwLCAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIDE3NywgCisgICAgMjM2LCAxMSwgMjQ3LCAyMTcsIDI4LCAxNiwgMjQ5LCAxNDEsIDI4LCAxNiwgMjQyLCAxMzMsIDI1MSwgNzUsIDI1MCwgMjIsIAorICAgIDI4LCAxNiwgMjQyLCAxMzMsIDI0NSwgMTUsIDI1MCwgMjIsIDI4LCAxNiwgNDIsIDI1MywgMTY2LCAyOCwgMTYsIDIxMywgCisgICAgMTUxLCAyOCwgMTYsIDIyNSwgMTcsIDI4LCAxNiwgMjUwLCAxMywgMjgsIDE2LCAyMjEsIDIwNSwgMjgsIDE2LCAyNTAsIDE3LCAKKyAgICAyOCwgMTYsIDIxNiwgOCwgMjgsIDE2LCAyMjQsIDI0NSwgMjgsIDE2LCAyMjQsIDI0NiwgMjQ0LCA2OCwgMjgsIDE2LCAyMjEsIAorICAgIDIwNiwgMjQ0LCA2OCwgMjgsIDE2LCAyMTYsIDksIDIyMywgNjEsIDI4LCAxNiwgMjI1LCAxNjYsIDIxOCwgNjcsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIzMCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE5LCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMDksIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIwMiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTk0LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODgsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE4NywgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMTg2LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODUsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyOSwgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMjI4LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjcsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDIyNiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjI1LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjQsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIyMywgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjIyLCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMjEsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyMCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE4LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTcsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIxNiwgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMjE1LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTQsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE5MywgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMTkyLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTEsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDE5MCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTg5LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMzAsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxOSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjAyLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAxOTQsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE4NywgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTg2LCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjgsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyNywgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjI2LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjUsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyMiwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjIxLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjAsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDIxNSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjE0LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTMsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxMiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjExLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAyMTAsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwOCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjA3LCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDYsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwNSwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjA0LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDMsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwMSwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjAwLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTksIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDE5OCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTk3LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTYsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5NSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTkzLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAxOTIsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5MSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTkwLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAxODksIDM4LCAyNiwgMjgsIDIxNSwgMjA5LCAzOCwgMjYsIDI4LCAyMTYsIDIyNCwgMzgsIAorICAgIDI2LCAyOCwgMjI1LCAxOTEsIDI2LCAyOCwgMjMzLCAzNywgMjMwLCAxNDcsIDMxLCAyNDUsIDIzMSwgMjQ3LCAyMzIsIDMxLCAKKyAgICAyNDEsIDIyOSwgMjQ1LCAyMzEsIDI0NywgMjMyLCAzMSwgMjQwLCAyMjEsIDI0NSwgMjMxLCAyNDcsIDIzMiwgMzEsIDI0NSwgCisgICAgMjMwLCAyNDEsIDIzMCwgMjQ3LCAyMzIsIDMxLCAyNDUsIDIzMCwgMjQwLCAyMjAsIDI0NywgMjMyLCAzMSwgMjQ1LCAyMzEsIAorICAgIDE4MCwgMzEsIDI1MCwgMTgyLCAxODAsIDMxLCAyNDMsIDIzNiwgMjUwLCA0MywgMTgwLCAzMSwgMjMwLCAxODIsIDE4MCwgCisgICAgMzEsIDI1MiwgMTM4LCAxODAsIDMxLCAyMzQsIDE4NSwgMjE5LCA4MSwgMTgwLCAzMSwgMjQ5LCAxODcsIDE4MCwgMzEsIAorICAgIDI1MywgMjQxLCAxODAsIDMxLCAyMjYsIDE2NywgMTgwLCAzMSwgMjUxLCAxNjEsIDIyNiwgMTM0LCAxODAsIDMxLCAyNDgsIAorICAgIDgxLCAxNzcsIDI0NywgMTg3LCAxODAsIDMxLCAyNDcsIDE4NCwgMTgwLCAzMSwgMjEwLCAyMjIsIDE4MCwgMzEsIDIzNSwgCisgICAgMjU0LCAxODAsIDMxLCAyMjUsIDIwMCwgMTgwLCAzMSwgMjIzLCAxMzAsIDE4MCwgMzEsIDI0OSwgMTk3LCAxODAsIDMxLCAKKyAgICAyNDEsIDY3LCAyNTIsIDE5MiwgMTgwLCAzMSwgMjEyLCA1OSwgMTgwLCAzMSwgMjQ0LCA0NywgMTgwLCAzMSwgMjU0LCAyNTUsIAorICAgIDE4MCwgMzEsIDIyMywgOTIsIDE4MCwgMzEsIDIyMywgNjgsIDE4MCwgMzEsIDI0NSwgMjI5LCAxODAsIDMxLCAyMzUsIDU5LCAKKyAgICAxODAsIDMxLCAyNDksIDE5MiwgMTgwLCAzMSwgMjQ1LCAxNTAsIDE4MCwgMzEsIDI0NiwgNjAsIDE4MCwgMzEsIDI1MCwgCisgICAgMTUzLCAxODAsIDMxLCAyNDgsIDkwLCAxODAsIDMxLCAyMywgMjIzLCA2NywgMTgwLCAzMSwgMjI2LCA4NSwgMTgwLCAzMSwgCisgICAgMjMzLCA0MCwgMTgwLCAzMSwgMjUwLCA2LCAxODAsIDMxLCAyMzQsIDgzLCAxODAsIDMxLCAyNDMsIDkzLCAxODAsIDMxLCAKKyAgICAyMTgsIDExNCwgMTgwLCAzMSwgMjI0LCAxMzMsIDE4MCwgMzEsIDI0MywgMjM1LCAxODAsIDMxLCAyMjMsIDY5LCAxODAsIAorICAgIDMxLCAyMzMsIDc3LCAxNzcsIDIzMCwgMTYyLCAxODAsIDMxLCAyMjMsIDY1LCAxODAsIDMxLCAyNDIsIDE3NSwgMjE2LCA0MywgCisgICAgMjMxLCA4MSwgMTgwLCAzMSwgMjQ1LCAxNTIsIDE4MCwgMzEsIDIxOCwgMTI2LCAxODAsIDMxLCAyNDIsIDEzNSwgMTgwLCAKKyAgICAzMSwgMjQ1LCAxNDQsIDE4MCwgMzEsIDIyNSwgMjM5LCAxODAsIDMxLCAyMjIsIDIyOCwgMTgwLCAzMSwgMjQ0LCA2NywgCisgICAgMTgwLCAzMSwgMjE0LCA4LCAxNzcsIDIxMiwgNDQsIDE4MCwgMzEsIDI0OSwgMjAxLCAxODAsIDMxLCAyMzEsIDk0LCAxODAsIAorICAgIDMxLCAyNDUsIDY5LCAxODAsIDMxLCAyMTQsIDE3MiwgMTgwLCAzMSwgMjQ3LCAyMjAsIDE4MCwgMzEsIDI1MCwgOCwgMjMwLCAKKyAgICAxMTUsIDE4MCwgMzEsIDI0MiwgMTEzLCAxODAsIDMxLCAyNDMsIDk0LCAyMzYsIDYsIDE4MCwgMzEsIDIzMSwgMTQ2LCAxODAsIAorICAgIDMxLCAyNTUsIDE5LCAxODAsIDMxLCAyNDUsIDE2NSwgMTgwLCAzMSwgMjQ2LCAxMTcsIDE4MCwgMzEsIDIxMiwgNDIsIDE4MCwgCisgICAgMzEsIDIxOSwgMTUyLCAxODAsIDMxLCAyMzUsIDIyOSwgMTgwLCAzMSwgMjQ4LCA1MCwgMTgwLCAzMSwgMjQ4LCAxNjgsIAorICAgIDE4MCwgMzEsIDI0NywgMjE2LCAxODAsIDMxLCAyNDUsIDM3LCAxODAsIDMxLCAyMjAsIDExNywgMTgwLCAzMSwgMjE4LCAKKyAgICAxMzAsIDE4MCwgMzEsIDI0MiwgOSwgMTgwLCAzMSwgMjQ5LCAyMjAsIDE4MCwgMzEsIDI1MCwgMywgMTgwLCAzMSwgMjQ0LCAKKyAgICAxODUsIDE4MCwgMzEsIDI1NCwgMjIxLCAxODAsIDMxLCAyNDksIDIxOSwgMTgwLCAzMSwgMjI2LCAyMDEsIDIxNiwgMTk3LCAKKyAgICAyMTMsIDI0MiwgMTgwLCAzMSwgMjQ3LCAyNDAsIDE4MCwgMzEsIDIzMywgMTMwLCAxODAsIDMxLCAyNDQsIDIxLCAyNDksIAorICAgIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTExLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTA1LCAKKyAgICAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTU4LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgCisgICAgMTYxLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTkwLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAKKyAgICAyMSwgMTk1LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTk5LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgCisgICAgMTc0LCAyMSwgMTk2LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMjAxLCAyNDksIDE1NywgMjIyLCAyMDQsIAorICAgIDIxNiwgMjQ0LCAyMSwgMTExLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTA1LCAyNDksIDE1NywgMjIyLCAKKyAgICAyMDQsIDIxNiwgMjQ0LCAyMSwgMTU4LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTYxLCAyNDksIDE1NywgCisgICAgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTkwLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk1LCAyNDksIAorICAgIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk5LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk2LCAKKyAgICAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMjAxLCAxMSwgMjMsIDYsIDYxLCAxMSwgMjMsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMsIDYsIDI1MSwgNzQsIDExLCAyMywgNiwgMjQ5LCA2OCwgMTEsIDIzLCA2LCA3NiwgMTEsIDIzLCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMjMsIDYsIDI0MywgMjA5LCAxMSwgMjMsIDYsIDI0MiwgNjcsIDExLCAyMywgNiwgNzQsIDExLCAyMywgCisgICAgNiwgMjM1LCAxNTAsIDExLCAyMywgNiwgMjM1LCAyOSwgMTEsIDIzLCA2LCAxNTYsIDExLCAyMywgNiwgMTk0LCAxMSwgMjMsIAorICAgIDYsIDIzMCwgMzAsIDExLCAyMywgNiwgNzgsIDExLCAyMywgNiwgMjI2LCAxMDksIDExLCAyMywgNiwgMjI0LCA5OSwgMTEsIAorICAgIDIzLCA2LCAxNTMsIDExLCAyMywgNiwgMjIyLCA5MywgMTEsIDIzLCA2LCAyMTcsIDE1MywgMTEsIDIzLCA2LCA2OSwgMTEsIAorICAgIDIzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDYsIDIxMSwgCisgICAgMTE3LCAxMSwgMjMsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDQsIDYxLCAxMSwgMjMsIDQsIDI1MywgMTY2LCAxMSwgMjMsIDQsIAorICAgIDI1MSwgNzQsIDExLCAyMywgNCwgMjQ5LCA2OCwgMTEsIDIzLCA0LCA3NiwgMTEsIDIzLCA0LCAyNDUsIDE0LCAxMSwgMjMsIAorICAgIDQsIDI0MywgMjA5LCAxMSwgMjMsIDQsIDI0MiwgNjcsIDExLCAyMywgNCwgNzQsIDExLCAyMywgNCwgMjM1LCAxNTAsIDExLCAKKyAgICAyMywgNCwgMjM1LCAyOSwgMTEsIDIzLCA0LCAxNTYsIDExLCAyMywgNCwgMTk0LCAxMSwgMjMsIDQsIDIzMCwgMzAsIDExLCAKKyAgICAyMywgNCwgNzgsIDExLCAyMywgNCwgMjI2LCAxMDksIDExLCAyMywgNCwgMjI0LCA5OSwgMTEsIDIzLCA0LCAxNTMsIDExLCAKKyAgICAyMywgNCwgMjIyLCA5MywgMTEsIDIzLCA0LCAyMTcsIDE1MywgMTEsIDIzLCA0LCA2OSwgMTEsIDIzLCA0LCAyMTQsIDEwNSwgCisgICAgMTEsIDIzLCA0LCAyMTIsIDk4LCAxMSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDQsIAorICAgIDIxMCwgMTU5LCAxMSwgMzIsIDYsIDYxLCAxMSwgMzIsIDYsIDI1MywgMTY2LCAxMSwgMzIsIDYsIDI1MSwgNzQsIDExLCAzMiwgCisgICAgNiwgMjQ5LCA2OCwgMTEsIDMyLCA2LCA3NiwgMTEsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMzIsIDYsIDI0MywgMjA5LCAxMSwgCisgICAgMzIsIDYsIDI0MiwgNjcsIDExLCAzMiwgNiwgNzQsIDExLCAzMiwgNiwgMjM1LCAxNTAsIDExLCAzMiwgNiwgMjM1LCAyOSwgCisgICAgMTEsIDMyLCA2LCAxNTYsIDExLCAzMiwgNiwgMTk0LCAxMSwgMzIsIDYsIDIzMCwgMzAsIDExLCAzMiwgNiwgNzgsIDExLCAKKyAgICAzMiwgNiwgMjI2LCAxMDksIDExLCAzMiwgNiwgMjI0LCA5OSwgMTEsIDMyLCA2LCAxNTMsIDExLCAzMiwgNiwgMjIyLCA5MywgCisgICAgMTEsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDMyLCA2LCA2OSwgMTEsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDMyLCA2LCAyMTIsIAorICAgIDk4LCAxMSwgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzIsIDYsIDIxMCwgMTU5LCAxMSwgCisgICAgMzIsIDQsIDYxLCAxMSwgMzIsIDQsIDI1MywgMTY2LCAxMSwgMzIsIDQsIDI1MSwgNzQsIDExLCAzMiwgNCwgMjQ5LCA2OCwgCisgICAgMTEsIDMyLCA0LCA3NiwgMTEsIDMyLCA0LCAyNDUsIDE0LCAxMSwgMzIsIDQsIDI0MywgMjA5LCAxMSwgMzIsIDQsIDc0LCAKKyAgICAxMSwgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMzIsIDQsIDIzNSwgMjksIDExLCAzMiwgNCwgMTU2LCAxMSwgMzIsIDQsIDE5NCwgCisgICAgMTEsIDMyLCA0LCAyMzAsIDMwLCAxMSwgMzIsIDQsIDc4LCAxMSwgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMzIsIDQsIDIyNCwgCisgICAgOTksIDExLCAzMiwgNCwgMTUzLCAxMSwgMzIsIDQsIDIyMiwgOTMsIDExLCAzMiwgNCwgMjE3LCAxNTMsIDExLCAzMiwgNCwgCisgICAgNjksIDExLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDMyLCAKKyAgICA0LCAyMTEsIDExNywgMTEsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgNiwgNjEsIDExLCAyMywgMzIsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMsIDMyLCA2LCAyNTEsIDc0LCAxMSwgMjMsIDMyLCA2LCAyNDksIDY4LCAxMSwgMjMsIDMyLCA2LCA3NiwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDIzLCAzMiwgNiwgMjQzLCAyMDksIDExLCAyMywgMzIsIDYsIDI0MiwgNjcsIAorICAgIDExLCAyMywgMzIsIDYsIDc0LCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAzMiwgNiwgMjM1LCAyOSwgMTEsIAorICAgIDIzLCAzMiwgNiwgMTU2LCAxMSwgMjMsIDMyLCA2LCAxOTQsIDExLCAyMywgMzIsIDYsIDIzMCwgMzAsIDExLCAyMywgMzIsIAorICAgIDYsIDc4LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAzMiwgNiwgMjI0LCA5OSwgMTEsIDIzLCAzMiwgNiwgCisgICAgMTUzLCAxMSwgMjMsIDMyLCA2LCAyMjIsIDkzLCAxMSwgMjMsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDIzLCAzMiwgNiwgNjksIAorICAgIDExLCAyMywgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDMyLCA2LCAyMTEsIDE3OCwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAyMywgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCA0LCA2MSwgMTEsIAorICAgIDIzLCAzMiwgNCwgMjUzLCAxNjYsIDExLCAyMywgMzIsIDQsIDI1MSwgNzQsIDExLCAyMywgMzIsIDQsIDI0OSwgNjgsIDExLCAKKyAgICAyMywgMzIsIDQsIDc2LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDE0LCAxMSwgMjMsIDMyLCA0LCAyNDMsIDIwOSwgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjQyLCA2NywgMTEsIDIzLCAzMiwgNCwgNzQsIDExLCAyMywgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMjMsIDMyLCAKKyAgICA0LCAyMzUsIDI5LCAxMSwgMjMsIDMyLCA0LCAxNTYsIDExLCAyMywgMzIsIDQsIDE5NCwgMTEsIDIzLCAzMiwgNCwgMjMwLCAKKyAgICAzMCwgMTEsIDIzLCAzMiwgNCwgNzgsIDExLCAyMywgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMjMsIDMyLCA0LCAyMjQsIDk5LCAKKyAgICAxMSwgMjMsIDMyLCA0LCAxNTMsIDExLCAyMywgMzIsIDQsIDIyMiwgOTMsIDExLCAyMywgMzIsIDQsIDIxNywgMTUzLCAxMSwgCisgICAgMjMsIDMyLCA0LCA2OSwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDQsIDIxMiwgOTgsIDExLCAyMywgCisgICAgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDMyLCA0LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNCwgMjEwLCAxNTksIDExLCAKKyAgICAxMTksIDYsIDYxLCAxMSwgMTE5LCA2LCAyNTEsIDc0LCAxMSwgMTE5LCA2LCAyNDksIDY4LCAxMSwgMTE5LCA2LCAyNDMsIAorICAgIDIwOSwgMTEsIDExOSwgNiwgMjM1LCAxNTAsIDExLCAxMTksIDYsIDIzNSwgMjksIDExLCAxMTksIDYsIDIzMCwgMzAsIDExLCAKKyAgICAxMTksIDYsIDc4LCAxMSwgMTE5LCA2LCAyMjYsIDEwOSwgMTEsIDExOSwgNiwgMjI0LCA5OSwgMTEsIDExOSwgNiwgMjIyLCAKKyAgICA5MywgMTEsIDExOSwgNiwgMjE3LCAxNTMsIDExLCAxMTksIDYsIDY5LCAxMSwgMTE5LCA2LCAyMTQsIDEwNSwgMTEsIDExOSwgCisgICAgNiwgMjEyLCA5OCwgMTEsIDExOSwgNiwgMjExLCAxNzgsIDExLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMTE5LCA2LCAyMTAsIAorICAgIDE1OSwgMTEsIDExOSwgNCwgNjEsIDExLCAxMTksIDQsIDI1MywgMTY2LCAxMSwgMTE5LCA0LCAyNTEsIDc0LCAxMSwgMTE5LCAKKyAgICA0LCAyNDksIDY4LCAxMSwgMTE5LCA0LCAyNDUsIDE0LCAxMSwgMTE5LCA0LCAyNDIsIDY3LCAxMSwgMTE5LCA0LCA3NCwgMTEsIAorICAgIDExOSwgNCwgMjM1LCAxNTAsIDExLCAxMTksIDQsIDIzNSwgMjksIDExLCAxMTksIDQsIDE1NiwgMTEsIDExOSwgNCwgMTk0LCAKKyAgICAxMSwgMTE5LCA0LCAyMzAsIDMwLCAxMSwgMTE5LCA0LCAyMjYsIDEwOSwgMTEsIDExOSwgNCwgMjI0LCA5OSwgMTEsIDExOSwgCisgICAgNCwgMTUzLCAxMSwgMTE5LCA0LCAyMjIsIDkzLCAxMSwgMTE5LCA0LCAyMTcsIDE1MywgMTEsIDExOSwgNCwgNjksIDExLCAKKyAgICAxMTksIDQsIDIxNCwgMTA1LCAxMSwgMTE5LCA0LCAyMTIsIDk4LCAxMSwgMTE5LCA0LCAyMTEsIDE3OCwgMTEsIDExOSwgNCwgCisgICAgMjExLCAxMTcsIDExLCAxMTksIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDExOSwgNiwgNjEsIDExLCAyMywgMTE5LCA2LCAyNTMsIAorICAgIDE2NiwgMTEsIDIzLCAxMTksIDYsIDI1MSwgNzQsIDExLCAyMywgMTE5LCA2LCAyNDksIDY4LCAxMSwgMjMsIDExOSwgNiwgCisgICAgNzYsIDExLCAyMywgMTE5LCA2LCAyNDUsIDE0LCAxMSwgMjMsIDExOSwgNiwgMjQzLCAyMDksIDExLCAyMywgMTE5LCA2LCAKKyAgICAyNDIsIDY3LCAxMSwgMjMsIDExOSwgNiwgNzQsIDExLCAyMywgMTE5LCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAxMTksIDYsIAorICAgIDIzNSwgMjksIDExLCAyMywgMTE5LCA2LCAxNTYsIDExLCAyMywgMTE5LCA2LCAxOTQsIDExLCAyMywgMTE5LCA2LCAyMzAsIAorICAgIDMwLCAxMSwgMjMsIDExOSwgNiwgNzgsIDExLCAyMywgMTE5LCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAxMTksIDYsIDIyNCwgCisgICAgOTksIDExLCAyMywgMTE5LCA2LCAxNTMsIDExLCAyMywgMTE5LCA2LCAyMjIsIDkzLCAxMSwgMjMsIDExOSwgNiwgMjE3LCAKKyAgICAxNTMsIDExLCAyMywgMTE5LCA2LCA2OSwgMTEsIDIzLCAxMTksIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDExOSwgNiwgMjEyLCAKKyAgICA5OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDExOSwgNiwgMjExLCAxMTcsIDExLCAyMywgMTE5LCA2LCAKKyAgICAyMTAsIDE1OSwgMTEsIDIzLCAxMTksIDQsIDYxLCAxMSwgMjMsIDExOSwgNCwgMjUzLCAxNjYsIDExLCAyMywgMTE5LCA0LCAKKyAgICAyNTEsIDc0LCAxMSwgMjMsIDExOSwgNCwgMjQ5LCA2OCwgMTEsIDIzLCAxMTksIDQsIDc2LCAxMSwgMjMsIDExOSwgNCwgCisgICAgMjQ1LCAxNCwgMTEsIDIzLCAxMTksIDQsIDI0MywgMjA5LCAxMSwgMjMsIDExOSwgNCwgMjQyLCA2NywgMTEsIDIzLCAxMTksIAorICAgIDQsIDc0LCAxMSwgMjMsIDExOSwgNCwgMjM1LCAxNTAsIDExLCAyMywgMTE5LCA0LCAyMzUsIDI5LCAxMSwgMjMsIDExOSwgNCwgCisgICAgMTU2LCAxMSwgMjMsIDExOSwgNCwgMTk0LCAxMSwgMjMsIDExOSwgNCwgMjMwLCAzMCwgMTEsIDIzLCAxMTksIDQsIDc4LCAKKyAgICAxMSwgMjMsIDExOSwgNCwgMjI2LCAxMDksIDExLCAyMywgMTE5LCA0LCAyMjQsIDk5LCAxMSwgMjMsIDExOSwgNCwgMTUzLCAKKyAgICAxMSwgMjMsIDExOSwgNCwgMjIyLCA5MywgMTEsIDIzLCAxMTksIDQsIDIxNywgMTUzLCAxMSwgMjMsIDExOSwgNCwgNjksIAogICAgIDExLCAyMywgMTE5LCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAxMTksIDQsIDIxMiwgOTgsIDExLCAyMywgMTE5LCA0LCAyMTEsIAogICAgIDE3OCwgMTEsIDIzLCAxMTksIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDExOSwgNCwgMjEwLCAxNTksIDExLCAxMzMsIDYsIDYxLCAKLSAgICAxMSwgMTMzLCA2LCAyNTMsIDE1OCwgMTEsIDEzMywgNiwgMjQ5LCA2MCwgMTEsIDEzMywgNiwgNzUsIDExLCAxMzMsIDYsIAotICAgIDI0NSwgNiwgMTEsIDEzMywgNiwgMjQzLCAyMDIsIDExLCAxMzMsIDYsIDIzNSwgMTQ0LCAxMSwgMTMzLCA2LCAyMzUsIDIzLCAKLSAgICAxMSwgMTMzLCA2LCAxNTYsIDExLCAxMzMsIDYsIDE5MywgMTEsIDEzMywgNiwgMjMwLCAyNSwgMTEsIDEzMywgNiwgNzYsIAotICAgIDExLCAxMzMsIDYsIDIyNiwgMTA1LCAxMSwgMTMzLCA2LCAyMjQsIDk2LCAxMSwgMTMzLCA2LCAyMjIsIDkxLCAxMSwgMTMzLCAKLSAgICA2LCAyMTcsIDE1MiwgMTEsIDEzMywgNiwgNzAsIDExLCAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMTMzLCA2LCAyMTIsIDk4LCAKKyAgICAxMSwgMTMzLCA2LCAyNTMsIDE2NiwgMTEsIDEzMywgNiwgMjQ5LCA2OCwgMTEsIDEzMywgNiwgNzYsIDExLCAxMzMsIDYsIAorICAgIDI0NSwgMTQsIDExLCAxMzMsIDYsIDI0MywgMjA5LCAxMSwgMTMzLCA2LCAyMzUsIDE1MCwgMTEsIDEzMywgNiwgMjM1LCAyOSwgCisgICAgMTEsIDEzMywgNiwgMTU2LCAxMSwgMTMzLCA2LCAxOTQsIDExLCAxMzMsIDYsIDIzMCwgMzAsIDExLCAxMzMsIDYsIDc4LCAKKyAgICAxMSwgMTMzLCA2LCAyMjYsIDEwOSwgMTEsIDEzMywgNiwgMjI0LCA5OSwgMTEsIDEzMywgNiwgMjIyLCA5MywgMTEsIDEzMywgCisgICAgNiwgMjE3LCAxNTMsIDExLCAxMzMsIDYsIDY5LCAxMSwgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDEzMywgNiwgMjEyLCA5OCwgCiAgICAgMTEsIDEzMywgNiwgMjExLCAxNzgsIDExLCAxMzMsIDYsIDIxMSwgMTE3LCAxMSwgMTMzLCA0LCA2MSwgMTEsIDEzMywgNCwgCi0gICAgMjUzLCAxNTgsIDExLCAxMzMsIDQsIDI1MSwgNjYsIDExLCAxMzMsIDQsIDI0OSwgNjAsIDExLCAxMzMsIDQsIDc1LCAxMSwgCi0gICAgMTMzLCA0LCAyNDUsIDYsIDExLCAxMzMsIDQsIDI0MywgMjAyLCAxMSwgMTMzLCA0LCAyNDIsIDYwLCAxMSwgMTMzLCA0LCAKLSAgICA3MywgMTEsIDEzMywgNCwgMjM1LCAxNDQsIDExLCAxMzMsIDQsIDIzNSwgMjMsIDExLCAxMzMsIDQsIDE1NiwgMTEsIDEzMywgCi0gICAgNCwgMTkzLCAxMSwgMTMzLCA0LCAyMzAsIDI1LCAxMSwgMTMzLCA0LCA3NiwgMTEsIDEzMywgNCwgMjI2LCAxMDUsIDExLCAKLSAgICAxMzMsIDQsIDIyNCwgOTYsIDExLCAxMzMsIDQsIDE1MywgMTEsIDEzMywgNCwgMjIyLCA5MSwgMTEsIDEzMywgNCwgMjE3LCAKLSAgICAxNTIsIDExLCAxMzMsIDQsIDcwLCAxMSwgMTMzLCA0LCAyMTQsIDEwNSwgMTEsIDEzMywgNCwgMjEyLCA5OCwgMTEsIDEzMywgCisgICAgMjUzLCAxNjYsIDExLCAxMzMsIDQsIDI1MSwgNzQsIDExLCAxMzMsIDQsIDI0OSwgNjgsIDExLCAxMzMsIDQsIDc2LCAxMSwgCisgICAgMTMzLCA0LCAyNDUsIDE0LCAxMSwgMTMzLCA0LCAyNDMsIDIwOSwgMTEsIDEzMywgNCwgMjQyLCA2NywgMTEsIDEzMywgNCwgCisgICAgNzQsIDExLCAxMzMsIDQsIDIzNSwgMTUwLCAxMSwgMTMzLCA0LCAyMzUsIDI5LCAxMSwgMTMzLCA0LCAxNTYsIDExLCAxMzMsIAorICAgIDQsIDE5NCwgMTEsIDEzMywgNCwgMjMwLCAzMCwgMTEsIDEzMywgNCwgNzgsIDExLCAxMzMsIDQsIDIyNiwgMTA5LCAxMSwgCisgICAgMTMzLCA0LCAyMjQsIDk5LCAxMSwgMTMzLCA0LCAxNTMsIDExLCAxMzMsIDQsIDIyMiwgOTMsIDExLCAxMzMsIDQsIDIxNywgCisgICAgMTUzLCAxMSwgMTMzLCA0LCA2OSwgMTEsIDEzMywgNCwgMjE0LCAxMDUsIDExLCAxMzMsIDQsIDIxMiwgOTgsIDExLCAxMzMsIAogICAgIDQsIDIxMSwgMTc4LCAxMSwgMTMzLCA0LCAyMTEsIDExNywgMTEsIDEzMywgNCwgMjEwLCAxNTksIDExLCAxMzksIDYsIDYxLCAKLSAgICAxMSwgMTM5LCA2LCAyNTMsIDE1OCwgMTEsIDEzOSwgNiwgMjQ5LCA2MCwgMTEsIDEzOSwgNiwgNzUsIDExLCAxMzksIDYsIAotICAgIDI0NSwgNiwgMTEsIDEzOSwgNiwgMjQzLCAyMDIsIDExLCAxMzksIDYsIDczLCAxMSwgMTM5LCA2LCAyMzUsIDE0NCwgMTEsIAotICAgIDEzOSwgNiwgMjM1LCAyMywgMTEsIDEzOSwgNiwgMTU2LCAxMSwgMTM5LCA2LCAxOTMsIDExLCAxMzksIDYsIDc2LCAxMSwgCi0gICAgMTM5LCA2LCAyMjIsIDkxLCAxMSwgMTM5LCA2LCAyMTcsIDE1MiwgMTEsIDEzOSwgNiwgNzAsIDExLCAxMzksIDYsIDIxNCwgCisgICAgMTEsIDEzOSwgNiwgMjUzLCAxNjYsIDExLCAxMzksIDYsIDI0OSwgNjgsIDExLCAxMzksIDYsIDc2LCAxMSwgMTM5LCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMTM5LCA2LCAyNDMsIDIwOSwgMTEsIDEzOSwgNiwgNzQsIDExLCAxMzksIDYsIDIzNSwgMTUwLCAxMSwgCisgICAgMTM5LCA2LCAyMzUsIDI5LCAxMSwgMTM5LCA2LCAxNTYsIDExLCAxMzksIDYsIDE5NCwgMTEsIDEzOSwgNiwgNzgsIDExLCAKKyAgICAxMzksIDYsIDIyMiwgOTMsIDExLCAxMzksIDYsIDIxNywgMTUzLCAxMSwgMTM5LCA2LCA2OSwgMTEsIDEzOSwgNiwgMjE0LCAKICAgICAxMDUsIDExLCAxMzksIDYsIDIxMiwgOTgsIDExLCAxMzksIDYsIDIxMSwgMTc4LCAxMSwgMTM5LCA2LCAyMTEsIDExNywgMTEsIAotICAgIDEzOSwgNCwgNjEsIDExLCAxMzksIDQsIDI1MywgMTU4LCAxMSwgMTM5LCA0LCAyNTEsIDY2LCAxMSwgMTM5LCA0LCAyNDksIAotICAgIDYwLCAxMSwgMTM5LCA0LCA3NSwgMTEsIDEzOSwgNCwgMjQ1LCA2LCAxMSwgMTM5LCA0LCAyNDMsIDIwMiwgMTEsIDEzOSwgNCwgCi0gICAgMjQyLCA2MCwgMTEsIDEzOSwgNCwgNzMsIDExLCAxMzksIDQsIDIzNSwgMTQ0LCAxMSwgMTM5LCA0LCAyMzUsIDIzLCAxMSwgCi0gICAgMTM5LCA0LCAxNTYsIDExLCAxMzksIDQsIDE5MywgMTEsIDEzOSwgNCwgMjMwLCAyNSwgMTEsIDEzOSwgNCwgNzYsIDExLCAKLSAgICAxMzksIDQsIDIyNiwgMTA1LCAxMSwgMTM5LCA0LCAyMjQsIDk2LCAxMSwgMTM5LCA0LCAxNTMsIDExLCAxMzksIDQsIDIyMiwgCi0gICAgOTEsIDExLCAxMzksIDQsIDIxNywgMTUyLCAxMSwgMTM5LCA0LCA3MCwgMTEsIDEzOSwgNCwgMjE0LCAxMDUsIDExLCAxMzksIAotICAgIDQsIDIxMiwgOTgsIDExLCAxMzksIDQsIDIxMSwgMTc4LCAxMSwgMTM5LCA0LCAyMTEsIDExNywgMTEsIDEzOSwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAyMywgMTMzLCA2LCA2MSwgMTEsIDIzLCAxMzMsIDYsIDI1MywgMTU4LCAxMSwgMjMsIDEzMywgNiwgMjUxLCAKLSAgICA2NiwgMTEsIDIzLCAxMzMsIDYsIDI0OSwgNjAsIDExLCAyMywgMTMzLCA2LCA3NSwgMTEsIDIzLCAxMzMsIDYsIDI0NSwgNiwgCi0gICAgMTEsIDIzLCAxMzMsIDYsIDI0MywgMjAyLCAxMSwgMjMsIDEzMywgNiwgMjQyLCA2MCwgMTEsIDIzLCAxMzMsIDYsIDczLCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMjM1LCAxNDQsIDExLCAyMywgMTMzLCA2LCAyMzUsIDIzLCAxMSwgMjMsIDEzMywgNiwgMTU2LCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMTkzLCAxMSwgMjMsIDEzMywgNiwgMjMwLCAyNSwgMTEsIDIzLCAxMzMsIDYsIDc2LCAxMSwgMjMsIAotICAgIDEzMywgNiwgMjI2LCAxMDUsIDExLCAyMywgMTMzLCA2LCAyMjQsIDk2LCAxMSwgMjMsIDEzMywgNiwgMTUzLCAxMSwgMjMsIAotICAgIDEzMywgNiwgMjIyLCA5MSwgMTEsIDIzLCAxMzMsIDYsIDIxNywgMTUyLCAxMSwgMjMsIDEzMywgNiwgNzAsIDExLCAyMywgCi0gICAgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMzMsIDYsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA2LCAyMTEsIDE3OCwgMTEsIAotICAgIDIzLCAxMzMsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDEzMywgNiwgMjEwLCAxNTksIDExLCAyMywgMTMzLCA0LCA2MSwgMTEsIAotICAgIDIzLCAxMzMsIDQsIDI1MywgMTU4LCAxMSwgMjMsIDEzMywgNCwgMjUxLCA2NiwgMTEsIDIzLCAxMzMsIDQsIDI0OSwgNjAsIAotICAgIDExLCAyMywgMTMzLCA0LCA3NSwgMTEsIDIzLCAxMzMsIDQsIDI0NSwgNiwgMTEsIDIzLCAxMzMsIDQsIDI0MywgMjAyLCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjQyLCA2MCwgMTEsIDIzLCAxMzMsIDQsIDczLCAxMSwgMjMsIDEzMywgNCwgMjM1LCAxNDQsIDExLCAKLSAgICAyMywgMTMzLCA0LCAyMzUsIDIzLCAxMSwgMjMsIDEzMywgNCwgMTU2LCAxMSwgMjMsIDEzMywgNCwgMTkzLCAxMSwgMjMsIAotICAgIDEzMywgNCwgMjMwLCAyNSwgMTEsIDIzLCAxMzMsIDQsIDc2LCAxMSwgMjMsIDEzMywgNCwgMjI2LCAxMDUsIDExLCAyMywgCi0gICAgMTMzLCA0LCAyMjQsIDk2LCAxMSwgMjMsIDEzMywgNCwgMTUzLCAxMSwgMjMsIDEzMywgNCwgMjIyLCA5MSwgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIxNywgMTUyLCAxMSwgMjMsIDEzMywgNCwgNzAsIDExLCAyMywgMTMzLCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAxMzMsIDQsIDIxMSwgMTE3LCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjEwLCAxNTksIDExLCAzNSwgNiwgNjEsIDExLCAzNSwgNiwgMjUzLCAxNTgsIDExLCAzNSwgNiwgMjUxLCAKLSAgICA2NiwgMTEsIDM1LCA2LCAyNDksIDYwLCAxMSwgMzUsIDYsIDc1LCAxMSwgMzUsIDYsIDI0NSwgNiwgMTEsIDM1LCA2LCAyNDMsIAotICAgIDIwMiwgMTEsIDM1LCA2LCAyNDIsIDYwLCAxMSwgMzUsIDYsIDczLCAxMSwgMzUsIDYsIDIzNSwgMTQ0LCAxMSwgMzUsIDYsIAotICAgIDIzNSwgMjMsIDExLCAzNSwgNiwgMTU2LCAxMSwgMzUsIDYsIDE5MywgMTEsIDM1LCA2LCAyMzAsIDI1LCAxMSwgMzUsIDYsIAotICAgIDc2LCAxMSwgMzUsIDYsIDIyNiwgMTA1LCAxMSwgMzUsIDYsIDIyNCwgOTYsIDExLCAzNSwgNiwgMTUzLCAxMSwgMzUsIDYsIAotICAgIDIyMiwgOTEsIDExLCAzNSwgNiwgMjE3LCAxNTIsIDExLCAzNSwgNiwgNzAsIDExLCAzNSwgNiwgMjE0LCAxMDUsIDExLCAzNSwgCi0gICAgNiwgMjEyLCA5OCwgMTEsIDM1LCA2LCAyMTEsIDE3OCwgMTEsIDM1LCA2LCAyMTEsIDExNywgMTEsIDM1LCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDM1LCA0LCA2MSwgMTEsIDM1LCA0LCAyNTMsIDE1OCwgMTEsIDM1LCA0LCAyNTEsIDY2LCAxMSwgMzUsIDQsIAotICAgIDI0OSwgNjAsIDExLCAzNSwgNCwgNzUsIDExLCAzNSwgNCwgMjQ1LCA2LCAxMSwgMzUsIDQsIDI0MywgMjAyLCAxMSwgMzUsIAotICAgIDQsIDI0MiwgNjAsIDExLCAzNSwgNCwgNzMsIDExLCAzNSwgNCwgMjM1LCAxNDQsIDExLCAzNSwgNCwgMjM1LCAyMywgMTEsIAotICAgIDM1LCA0LCAxNTYsIDExLCAzNSwgNCwgMTkzLCAxMSwgMzUsIDQsIDIzMCwgMjUsIDExLCAzNSwgNCwgNzYsIDExLCAzNSwgNCwgCi0gICAgMjI2LCAxMDUsIDExLCAzNSwgNCwgMjI0LCA5NiwgMTEsIDM1LCA0LCAxNTMsIDExLCAzNSwgNCwgMjIyLCA5MSwgMTEsIDM1LCAKLSAgICA0LCAyMTcsIDE1MiwgMTEsIDM1LCA0LCA3MCwgMTEsIDM1LCA0LCAyMTQsIDEwNSwgMTEsIDM1LCA0LCAyMTIsIDk4LCAxMSwgCi0gICAgMzUsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCA2LCAKLSAgICA2MSwgMTEsIDM1LCAyMywgNiwgMjUzLCAxNTgsIDExLCAzNSwgMjMsIDYsIDI1MSwgNjYsIDExLCAzNSwgMjMsIDYsIDI0OSwgCi0gICAgNjAsIDExLCAzNSwgMjMsIDYsIDc1LCAxMSwgMzUsIDIzLCA2LCAyNDUsIDYsIDExLCAzNSwgMjMsIDYsIDI0MywgMjAyLCAKLSAgICAxMSwgMzUsIDIzLCA2LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCA2LCA3MywgMTEsIDM1LCAyMywgNiwgMjM1LCAxNDQsIDExLCAKLSAgICAzNSwgMjMsIDYsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDYsIDE1NiwgMTEsIDM1LCAyMywgNiwgMTkzLCAxMSwgMzUsIDIzLCAKLSAgICA2LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCA2LCA3NiwgMTEsIDM1LCAyMywgNiwgMjI2LCAxMDUsIDExLCAzNSwgMjMsIDYsIAotICAgIDIyNCwgOTYsIDExLCAzNSwgMjMsIDYsIDE1MywgMTEsIDM1LCAyMywgNiwgMjIyLCA5MSwgMTEsIDM1LCAyMywgNiwgMjE3LCAKLSAgICAxNTIsIDExLCAzNSwgMjMsIDYsIDcwLCAxMSwgMzUsIDIzLCA2LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgNiwgMjEyLCA5OCwgCi0gICAgMTEsIDM1LCAyMywgNiwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDM1LCAyMywgNCwgNjEsIDExLCAzNSwgMjMsIDQsIDI1MywgMTU4LCAxMSwgMzUsIDIzLCA0LCAyNTEsIDY2LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyNDksIDYwLCAxMSwgMzUsIDIzLCA0LCA3NSwgMTEsIDM1LCAyMywgNCwgMjQ1LCA2LCAxMSwgMzUsIAotICAgIDIzLCA0LCAyNDMsIDIwMiwgMTEsIDM1LCAyMywgNCwgMjQyLCA2MCwgMTEsIDM1LCAyMywgNCwgNzMsIDExLCAzNSwgMjMsIAotICAgIDQsIDIzNSwgMTQ0LCAxMSwgMzUsIDIzLCA0LCAyMzUsIDIzLCAxMSwgMzUsIDIzLCA0LCAxNTYsIDExLCAzNSwgMjMsIDQsIAotICAgIDE5MywgMTEsIDM1LCAyMywgNCwgMjMwLCAyNSwgMTEsIDM1LCAyMywgNCwgNzYsIDExLCAzNSwgMjMsIDQsIDIyNiwgMTA1LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyMjQsIDk2LCAxMSwgMzUsIDIzLCA0LCAxNTMsIDExLCAzNSwgMjMsIDQsIDIyMiwgOTEsIDExLCAKLSAgICAzNSwgMjMsIDQsIDIxNywgMTUyLCAxMSwgMzUsIDIzLCA0LCA3MCwgMTEsIDM1LCAyMywgNCwgMjE0LCAxMDUsIDExLCAzNSwgCi0gICAgMjMsIDQsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCA0LCAyMTEsIDExNywgMTEsIDM1LCAKLSAgICAyMywgNCwgMjEwLCAxNTksIDExLCAzNSwgMzIsIDYsIDYxLCAxMSwgMzUsIDMyLCA2LCAyNTMsIDE1OCwgMTEsIDM1LCAzMiwgCi0gICAgNiwgMjUxLCA2NiwgMTEsIDM1LCAzMiwgNiwgMjQ5LCA2MCwgMTEsIDM1LCAzMiwgNiwgNzUsIDExLCAzNSwgMzIsIDYsIAotICAgIDI0NSwgNiwgMTEsIDM1LCAzMiwgNiwgMjQzLCAyMDIsIDExLCAzNSwgMzIsIDYsIDI0MiwgNjAsIDExLCAzNSwgMzIsIDYsIAotICAgIDczLCAxMSwgMzUsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDM1LCAzMiwgNiwgMjM1LCAyMywgMTEsIDM1LCAzMiwgNiwgMTU2LCAKLSAgICAxMSwgMzUsIDMyLCA2LCAxOTMsIDExLCAzNSwgMzIsIDYsIDIzMCwgMjUsIDExLCAzNSwgMzIsIDYsIDc2LCAxMSwgMzUsIAotICAgIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDM1LCAzMiwgNiwgMjI0LCA5NiwgMTEsIDM1LCAzMiwgNiwgMTUzLCAxMSwgMzUsIDMyLCAKLSAgICA2LCAyMjIsIDkxLCAxMSwgMzUsIDMyLCA2LCAyMTcsIDE1MiwgMTEsIDM1LCAzMiwgNiwgNzAsIDExLCAzNSwgMzIsIDYsIAotICAgIDIxNCwgMTA1LCAxMSwgMzUsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIDM1LCAzMiwgNiwgCi0gICAgMjExLCAxMTcsIDExLCAzNSwgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCA0LCA2MSwgMTEsIDM1LCAzMiwgNCwgMjUzLCAKLSAgICAxNTgsIDExLCAzNSwgMzIsIDQsIDI1MSwgNjYsIDExLCAzNSwgMzIsIDQsIDI0OSwgNjAsIDExLCAzNSwgMzIsIDQsIDc1LCAKLSAgICAxMSwgMzUsIDMyLCA0LCAyNDUsIDYsIDExLCAzNSwgMzIsIDQsIDI0MywgMjAyLCAxMSwgMzUsIDMyLCA0LCAyNDIsIDYwLCAKLSAgICAxMSwgMzUsIDMyLCA0LCA3MywgMTEsIDM1LCAzMiwgNCwgMjM1LCAxNDQsIDExLCAzNSwgMzIsIDQsIDIzNSwgMjMsIDExLCAKLSAgICAzNSwgMzIsIDQsIDE1NiwgMTEsIDM1LCAzMiwgNCwgMTkzLCAxMSwgMzUsIDMyLCA0LCAyMzAsIDI1LCAxMSwgMzUsIDMyLCAKLSAgICA0LCA3NiwgMTEsIDM1LCAzMiwgNCwgMjI2LCAxMDUsIDExLCAzNSwgMzIsIDQsIDIyNCwgOTYsIDExLCAzNSwgMzIsIDQsIAotICAgIDE1MywgMTEsIDM1LCAzMiwgNCwgMjIyLCA5MSwgMTEsIDM1LCAzMiwgNCwgMjE3LCAxNTIsIDExLCAzNSwgMzIsIDQsIDcwLCAKLSAgICAxMSwgMzUsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNCwgMjEyLCA5OCwgMTEsIDM1LCAzMiwgNCwgMjExLCAxNzgsIAotICAgIDExLCAzNSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgMzIsIDYsIDYxLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjUzLCAxNTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTEsIDY2LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNiwgMjQ5LCA2MCwgMTEsIDM1LCAyMywgMzIsIDYsIDc1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCA2LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNiwgMjQzLCAyMDIsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCAzMiwgNiwgNzMsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAxNTYsIDExLCAzNSwgMjMsIDMyLCA2LCAxOTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNiwgNzYsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNCwgOTYsIDExLCAzNSwgCi0gICAgMjMsIDMyLCA2LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjIsIDkxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCAxNTIsIAotICAgIDExLCAzNSwgMjMsIDMyLCA2LCA3MCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMjEyLCA5OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgMzIsIDQsIDYxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUzLCAKLSAgICAxNTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ5LCA2MCwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDc1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCA2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQzLCAyMDIsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA0LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCAzMiwgNCwgNzMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIAotICAgIDE0NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDMyLCA0LCAxNTYsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAxOTMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCAzMiwgNCwgNzYsIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCAyMjYsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNCwgOTYsIDExLCAzNSwgMjMsIDMyLCA0LCAxNTMsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA0LCAyMjIsIDkxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE3LCAxNTIsIDExLCAzNSwgMjMsIDMyLCA0LCAKLSAgICA3MCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIAotICAgIDE1OSwgMTEsIDIzMCwgMTM4LCA2LCA2MSwgMTEsIDIzMCwgMTM4LCA2LCAyNTMsIDE1OCwgMTEsIDIzMCwgMTM4LCA2LCAKLSAgICAyNTEsIDY2LCAxMSwgMjMwLCAxMzgsIDYsIDI0OSwgNjAsIDExLCAyMzAsIDEzOCwgNiwgNzUsIDExLCAyMzAsIDEzOCwgNiwgCi0gICAgMjQ1LCA2LCAxMSwgMjMwLCAxMzgsIDYsIDI0MywgMjAyLCAxMSwgMjMwLCAxMzgsIDYsIDI0MiwgNjAsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgNzMsIDExLCAyMzAsIDEzOCwgNiwgMjM1LCAxNDQsIDExLCAyMzAsIDEzOCwgNiwgMjM1LCAyMywgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCAxNTYsIDExLCAyMzAsIDEzOCwgNiwgMTkzLCAxMSwgMjMwLCAxMzgsIDYsIDIzMCwgMjUsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgNzYsIDExLCAyMzAsIDEzOCwgNiwgMjI2LCAxMDUsIDExLCAyMzAsIDEzOCwgNiwgMjI0LCA5NiwgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCAxNTMsIDExLCAyMzAsIDEzOCwgNiwgMjIyLCA5MSwgMTEsIDIzMCwgMTM4LCA2LCAyMTcsIDE1MiwgMTEsIAotICAgIDIzMCwgMTM4LCA2LCA3MCwgMTEsIDIzMCwgMTM4LCA2LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTM4LCA2LCAyMTIsIDk4LCAxMSwgCi0gICAgMjMwLCAxMzgsIDYsIDIxMSwgMTc4LCAxMSwgMjMwLCAxMzgsIDYsIDIxMSwgMTE3LCAxMSwgMjMwLCAxMzgsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMjMwLCAxMzgsIDQsIDYxLCAxMSwgMjMwLCAxMzgsIDQsIDI1MywgMTU4LCAxMSwgMjMwLCAxMzgsIDQsIAotICAgIDI1MSwgNjYsIDExLCAyMzAsIDEzOCwgNCwgMjQ5LCA2MCwgMTEsIDIzMCwgMTM4LCA0LCA3NSwgMTEsIDIzMCwgMTM4LCA0LCAKLSAgICAyNDUsIDYsIDExLCAyMzAsIDEzOCwgNCwgMjQzLCAyMDIsIDExLCAyMzAsIDEzOCwgNCwgMjQyLCA2MCwgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCA3MywgMTEsIDIzMCwgMTM4LCA0LCAyMzUsIDE0NCwgMTEsIDIzMCwgMTM4LCA0LCAyMzUsIDIzLCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDE1NiwgMTEsIDIzMCwgMTM4LCA0LCAxOTMsIDExLCAyMzAsIDEzOCwgNCwgMjMwLCAyNSwgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCA3NiwgMTEsIDIzMCwgMTM4LCA0LCAyMjYsIDEwNSwgMTEsIDIzMCwgMTM4LCA0LCAyMjQsIDk2LCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDE1MywgMTEsIDIzMCwgMTM4LCA0LCAyMjIsIDkxLCAxMSwgMjMwLCAxMzgsIDQsIDIxNywgMTUyLCAxMSwgCi0gICAgMjMwLCAxMzgsIDQsIDcwLCAxMSwgMjMwLCAxMzgsIDQsIDIxNCwgMTA1LCAxMSwgMjMwLCAxMzgsIDQsIDIxMiwgOTgsIDExLCAKLSAgICAyMzAsIDEzOCwgNCwgMjExLCAxNzgsIDExLCAyMzAsIDEzOCwgNCwgMjExLCAxMTcsIDExLCAyMzAsIDEzOCwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAzMiwgNCwgMjQ3LCAxMTksIDczLCAxMSwgMzIsIDQsIDI0NywgMTE5LCAyMzUsIDE0NCwgMTEsIDIzLCA2LCAKLSAgICAyNTQsIDE0MywgMTEsIDIzLCA2LCAyNTIsIDI2LCAxMSwgMjMsIDYsIDI0MywgMTA3LCAxMSwgMjMsIDYsIDI0OCwgNTQsIAotICAgIDExLCAyMywgNiwgMjQ1LCAxMDAsIDExLCAyMywgNiwgMjEwLCA4NSwgMTEsIDIzLCA2LCAyNDUsIDYzLCAxMSwgMjMsIDYsIAotICAgIDIxNiwgMTc5LCAxMSwgMjMsIDYsIDIzNSwgMTg1LCAxMSwgMjMsIDYsIDIzNCwgMjIyLCAxMSwgMjMsIDYsIDIzMywgOTgsIAotICAgIDExLCAyMywgNiwgMjMwLCAxMDIsIDExLCAyMywgNiwgMjI3LCAyMzcsIDExLCAyMywgNiwgMjExLCAxNTcsIDExLCAyMywgNiwgCi0gICAgMjI2LCAxOTksIDExLCAyMywgNiwgMjI1LCAxMDgsIDExLCAyMywgNiwgMjIzLCAzNywgMTEsIDIzLCA2LCAyMTYsIDE4MCwgCi0gICAgODcsIDExLCAyMywgNiwgMjE5LCAxNzcsIDExLCAyMywgNiwgMjE3LCA0MSwgMTEsIDIzLCA2LCAyMTQsIDE1NywgMTEsIDIzLCAKLSAgICA2LCAyMjUsIDEzMywgMTEsIDIzLCA2LCAyNTAsIDExMCwgMTEsIDIzLCA2LCAyMjQsIDE2MSwgMTEsIDIzLCA2LCAyMjYsIAotICAgIDIwMSwgMTEsIDIzLCAyMjksIDIyMSwgMTEsIDIzLCA0LCAyNTQsIDE0MywgMTEsIDIzLCA0LCAyNTIsIDI2LCAxMSwgMjMsIAotICAgIDQsIDI0MywgMTA3LCAxMSwgMjMsIDQsIDI0OCwgNTQsIDExLCAyMywgNCwgMjQ1LCAxMDAsIDExLCAyMywgNCwgMjEwLCA4NSwgCi0gICAgMTEsIDIzLCA0LCAyNDUsIDYzLCAxMSwgMjMsIDQsIDIxNiwgMTc5LCAxMSwgMjMsIDQsIDIzNSwgMTg1LCAxMSwgMjMsIDQsIAotICAgIDIzNCwgMjIyLCAxMSwgMjMsIDQsIDIzMywgOTgsIDExLCAyMywgNCwgMjMwLCAxMDIsIDExLCAyMywgNCwgMjI3LCAyMzcsIAotICAgIDExLCAyMywgNCwgMjExLCAxNTcsIDExLCAyMywgNCwgMjI2LCAxOTksIDExLCAyMywgNCwgMjI1LCAxMDgsIDExLCAyMywgNCwgCi0gICAgMjIzLCAzNywgMTEsIDIzLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAyMywgNCwgMjE5LCAxNzcsIDExLCAyMywgNCwgMjE3LCAKLSAgICA0MSwgMTEsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDIzLCA0LCAyMjUsIDEzMywgMTEsIDIzLCA0LCAyNTAsIDExMCwgMTEsIAotICAgIDIzLCA0LCAyMjQsIDE2MSwgMTEsIDIzLCA0LCAyMjYsIDIwMSwgMTEsIDIzLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAyMywgCi0gICAgMjQ1LCAxMDEsIDg3LCAxMSwgMjMsIDIxNiwgMTgwLCA4NywgMTEsIDIzLCAyMzQsIDIyMywgODcsIDExLCAyMywgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMjMsIDIyMywgMzgsIDg3LCAxMSwgMjMsIDIyNSwgMTA5LCA4NywgMTEsIDMyLCA2LCAyNTQsIDE0MywgCi0gICAgMTEsIDMyLCA2LCAyNTIsIDI2LCAxMSwgMzIsIDYsIDI0MywgMTA3LCAxMSwgMzIsIDYsIDI0OCwgNTQsIDExLCAzMiwgNiwgCi0gICAgMjQ1LCAxMDAsIDExLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDMyLCA2LCAyNDUsIDYzLCAxMSwgMzIsIDYsIDIxNiwgMTc5LCAKLSAgICAxMSwgMzIsIDYsIDIzNSwgMTg1LCAxMSwgMzIsIDYsIDIzNCwgMjIyLCAxMSwgMzIsIDYsIDIzMywgOTgsIDExLCAzMiwgNiwgCi0gICAgMjMwLCAxMDIsIDExLCAzMiwgNiwgMjI3LCAyMzcsIDExLCAzMiwgNiwgMjExLCAxNTcsIDExLCAzMiwgNiwgMjI2LCAxOTksIAotICAgIDExLCAzMiwgNiwgMjI1LCAxMDgsIDExLCAzMiwgNiwgMjIzLCAzNywgMTEsIDMyLCA2LCAyMTYsIDE4MCwgODcsIDExLCAzMiwgCi0gICAgNiwgMjE5LCAxNzcsIDExLCAzMiwgNiwgMjE3LCA0MSwgMTEsIDMyLCA2LCAyMTQsIDE1NywgMTEsIDMyLCA2LCAyMjUsIAotICAgIDEzMywgMTEsIDMyLCA2LCAyNTAsIDExMCwgMTEsIDMyLCA2LCAyMjQsIDE2MSwgMTEsIDMyLCA2LCAyMjYsIDIwMSwgMTEsIAotICAgIDMyLCAyMjksIDIyMSwgMTEsIDMyLCA0LCAyNTQsIDE0MywgMTEsIDMyLCA0LCAyNTIsIDI2LCAxMSwgMzIsIDQsIDI0MywgCi0gICAgMTA3LCAxMSwgMzIsIDQsIDI0OCwgNTQsIDExLCAzMiwgNCwgMjQ1LCAxMDAsIDExLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDMyLCAKLSAgICA0LCAyNDUsIDYzLCAxMSwgMzIsIDQsIDIxNiwgMTc5LCAxMSwgMzIsIDQsIDIzNSwgMTg1LCAxMSwgMzIsIDQsIDIzNCwgCi0gICAgMjIyLCAxMSwgMzIsIDQsIDIzMywgOTgsIDExLCAzMiwgNCwgMjMwLCAxMDIsIDExLCAzMiwgNCwgMjI3LCAyMzcsIDExLCAKLSAgICAzMiwgNCwgMjExLCAxNTcsIDExLCAzMiwgNCwgMjI2LCAxOTksIDExLCAzMiwgNCwgMjI1LCAxMDgsIDExLCAzMiwgNCwgCi0gICAgMjIzLCAzNywgMTEsIDMyLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAzMiwgNCwgMjE5LCAxNzcsIDExLCAzMiwgNCwgMjE3LCAKLSAgICA0MSwgMTEsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDMyLCA0LCAyMjUsIDEzMywgMTEsIDMyLCA0LCAyNTAsIDExMCwgMTEsIAotICAgIDMyLCA0LCAyMjQsIDE2MSwgMTEsIDMyLCA0LCAyMjYsIDIwMSwgMTEsIDMyLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAzMiwgCi0gICAgMjQ1LCAxMDEsIDg3LCAxMSwgMzIsIDIxNiwgMTgwLCA4NywgMTEsIDMyLCAyMzQsIDIyMywgODcsIDExLCAzMiwgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMzIsIDIyMywgMzgsIDg3LCAxMSwgMzIsIDIyNSwgMTA5LCA4NywgMTEsIDIzLCAzMiwgNiwgMjU0LCAKLSAgICAxNDMsIDExLCAyMywgMzIsIDYsIDI1MiwgMjYsIDExLCAyMywgMzIsIDYsIDI0MywgMTA3LCAxMSwgMjMsIDMyLCA2LCAyNDgsIAotICAgIDU0LCAxMSwgMjMsIDMyLCA2LCAyNDUsIDEwMCwgMTEsIDIzLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDIzLCAzMiwgNiwgMjQ1LCAKLSAgICA2MywgMTEsIDIzLCAzMiwgNiwgMjE2LCAxNzksIDExLCAyMywgMzIsIDYsIDIzNSwgMTg1LCAxMSwgMjMsIDMyLCA2LCAyMzQsIAotICAgIDIyMiwgMTEsIDIzLCAzMiwgNiwgMjMzLCA5OCwgMTEsIDIzLCAzMiwgNiwgMjMwLCAxMDIsIDExLCAyMywgMzIsIDYsIDIyNywgCi0gICAgMjM3LCAxMSwgMjMsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNiwgMjI2LCAxOTksIDExLCAyMywgMzIsIDYsIAotICAgIDIyNSwgMTA4LCAxMSwgMjMsIDMyLCA2LCAyMjMsIDM3LCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgODcsIDExLCAyMywgCi0gICAgMzIsIDYsIDIxOSwgMTc3LCAxMSwgMjMsIDMyLCA2LCAyMTcsIDQxLCAxMSwgMjMsIDMyLCA2LCAyMTQsIDE1NywgMTEsIDIzLCAKLSAgICAzMiwgNiwgMjI1LCAxMzMsIDExLCAyMywgMzIsIDYsIDI1MCwgMTEwLCAxMSwgMjMsIDMyLCA2LCAyMjQsIDE2MSwgMTEsIAotICAgIDIzLCAzMiwgNiwgMjI2LCAyMDEsIDExLCAyMywgMzIsIDIyOSwgMjIxLCAxMSwgMjMsIDMyLCA0LCAyNTQsIDE0MywgMTEsIAotICAgIDIzLCAzMiwgNCwgMjUyLCAyNiwgMTEsIDIzLCAzMiwgNCwgMjQzLCAxMDcsIDExLCAyMywgMzIsIDQsIDI0OCwgNTQsIDExLCAKLSAgICAyMywgMzIsIDQsIDI0NSwgMTAwLCAxMSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDYzLCAxMSwgCi0gICAgMjMsIDMyLCA0LCAyMTYsIDE3OSwgMTEsIDIzLCAzMiwgNCwgMjM1LCAxODUsIDExLCAyMywgMzIsIDQsIDIzNCwgMjIyLCAKLSAgICAxMSwgMjMsIDMyLCA0LCAyMzMsIDk4LCAxMSwgMjMsIDMyLCA0LCAyMzAsIDEwMiwgMTEsIDIzLCAzMiwgNCwgMjI3LCAyMzcsIAotICAgIDExLCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDE5OSwgMTEsIDIzLCAzMiwgNCwgMjI1LCAKLSAgICAxMDgsIDExLCAyMywgMzIsIDQsIDIyMywgMzcsIDExLCAyMywgMzIsIDQsIDQwLCAyMTksIDE3NywgMTEsIDIzLCAzMiwgNCwgCi0gICAgMjE5LCAxNzcsIDExLCAyMywgMzIsIDQsIDIxNywgNDEsIDExLCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyMjUsIDEzMywgMTEsIDIzLCAzMiwgNCwgMjUwLCAxMTAsIDExLCAyMywgMzIsIDQsIDIyNCwgMTYxLCAxMSwgMjMsIDMyLCAKLSAgICA0LCAyMjYsIDIwMSwgMTEsIDIzLCAzMiwgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMjMsIDMyLCAyNDUsIDEwMSwgODcsIAotICAgIDExLCAyMywgMzIsIDIxNiwgMTgwLCA4NywgMTEsIDIzLCAzMiwgMjM0LCAyMjMsIDg3LCAxMSwgMjMsIDMyLCAyMjUsIDEzNCwgCi0gICAgODcsIDExLCAyMywgMzIsIDIyMywgMzgsIDg3LCAxMSwgMjMsIDMyLCAyMjUsIDEwOSwgODcsIDExLCAzNSwgMjMsIDYsIAotICAgIDI1NCwgMTQzLCAxMSwgMzUsIDIzLCA2LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCA2LCAyNDMsIDEwNywgMTEsIDM1LCAyMywgNiwgCi0gICAgMjQ4LCA1NCwgMTEsIDM1LCAyMywgNiwgMjQ1LCAxMDAsIDExLCAzNSwgMjMsIDYsIDIxMCwgODUsIDExLCAzNSwgMjMsIDYsIAotICAgIDI0NSwgNjMsIDExLCAzNSwgMjMsIDYsIDIxNiwgMTc5LCAxMSwgMzUsIDIzLCA2LCAyMzUsIDE4NSwgMTEsIDM1LCAyMywgNiwgCi0gICAgMjM0LCAyMjIsIDExLCAzNSwgMjMsIDYsIDIzMywgOTgsIDExLCAzNSwgMjMsIDYsIDIzMCwgMTAyLCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyMjcsIDIzNywgMTEsIDM1LCAyMywgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDYsIDIyNiwgMTk5LCAxMSwgMzUsIDIzLCAKLSAgICA2LCAyMjUsIDEwOCwgMTEsIDM1LCAyMywgNiwgMjIzLCAzNywgMTEsIDM1LCAyMywgNiwgMjE2LCAxODAsIDg3LCAxMSwgMzUsIAotICAgIDIzLCA2LCAyMTksIDE3NywgMTEsIDM1LCAyMywgNiwgMjE3LCA0MSwgMTEsIDM1LCAyMywgNiwgMjE0LCAxNTcsIDExLCAzNSwgCi0gICAgMjMsIDYsIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCA2LCAyNTAsIDExMCwgMTEsIDM1LCAyMywgNiwgMjI0LCAxNjEsIDExLCAKLSAgICAzNSwgMjMsIDYsIDIyNiwgMjAxLCAxMSwgMzUsIDIzLCAyMjksIDIyMSwgMTEsIDM1LCAyMywgNCwgMjU0LCAxNDMsIDExLCAKLSAgICAzNSwgMjMsIDQsIDI1MiwgMjYsIDExLCAzNSwgMjMsIDQsIDI0MywgMTA3LCAxMSwgMzUsIDIzLCA0LCAyNDgsIDU0LCAxMSwgCi0gICAgMzUsIDIzLCA0LCAyNDUsIDEwMCwgMTEsIDM1LCAyMywgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgNCwgMjQ1LCA2MywgMTEsIAotICAgIDM1LCAyMywgNCwgMjE2LCAxNzksIDExLCAzNSwgMjMsIDQsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCA0LCAyMzQsIDIyMiwgCi0gICAgMTEsIDM1LCAyMywgNCwgMjMzLCA5OCwgMTEsIDM1LCAyMywgNCwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDQsIDIyNywgMjM3LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNCwgMjI2LCAxOTksIDExLCAzNSwgMjMsIDQsIDIyNSwgCi0gICAgMTA4LCAxMSwgMzUsIDIzLCA0LCAyMjMsIDM3LCAxMSwgMzUsIDIzLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDQsIAotICAgIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCA0LCAyMTcsIDQxLCAxMSwgMzUsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgNCwgCi0gICAgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDQsIDI1MCwgMTEwLCAxMSwgMzUsIDIzLCA0LCAyMjQsIDE2MSwgMTEsIDM1LCAyMywgCi0gICAgNCwgMjI2LCAyMDEsIDExLCAzNSwgMjMsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDM1LCAyMywgMjQ1LCAxMDEsIDg3LCAKLSAgICAxMSwgMzUsIDIzLCAyMTYsIDE4MCwgODcsIDExLCAzNSwgMjMsIDIzNCwgMjIzLCA4NywgMTEsIDM1LCAyMywgMjI1LCAxMzQsIAotICAgIDg3LCAxMSwgMzUsIDIzLCAyMjMsIDM4LCA4NywgMTEsIDM1LCAyMywgMjI1LCAxMDksIDg3LCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMjU0LCAxNDMsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQzLCAxMDcsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyNDgsIDU0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCAxMDAsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCA2MywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTc5LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNiwgMjM1LCAxODUsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzQsIDIyMiwgMTEsIDM1LCAyMywgMzIsIDYsIDIzMywgCi0gICAgOTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzAsIDEwMiwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNywgMjM3LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDE5OSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNSwgCi0gICAgMTA4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIzLCAzNywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTgwLCA4NywgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCA0MSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNCwgCi0gICAgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTAsIDExMCwgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDIyNCwgMTYxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAyMDEsIDExLCAzNSwgMjMsIDMyLCAyMjksIAotICAgIDIyMSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1NCwgMTQzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUyLCAyNiwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDI0MywgMTA3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ4LCA1NCwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgMTAwLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgNjMsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAyMTYsIDE3OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM0LCAyMjIsIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMzMsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAyMjcsIDIzNywgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAxOTksIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDEwOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyMywgMzcsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCA0MCwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTksIDE3NywgMTEsIDM1LCAyMywgMzIsIDQsIDIxNywgNDEsIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgMjUwLCAxMTAsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDE2MSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgMjAxLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMzUsIDIzLCAzMiwgMjQ1LCAxMDEsIDg3LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgMjE2LCAxODAsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjM0LCAyMjMsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjIzLCAzOCwgODcsIDExLCAzNSwgMjMsIDMyLCAyMjUsIDEwOSwgODcsIDExLCAKLSAgICAyMywgNiwgMjQ3LCAyMjcsIDExLCAyMywgNCwgMjQ3LCAyMjcsIDExLCAyMywgMjEsIDIxMCwgODYsIDExLCAyMywgMjEsIAotICAgIDExMCwgMTEsIDIzLCAyMSwgMTA1LCAxMSwgMjMsIDIxLCAxNTgsIDExLCAyMywgMjEsIDE2MSwgMTEsIDIzLCAyMSwgMTg5LCAKLSAgICAxMSwgMjMsIDIxLCAxOTQsIDExLCAyMywgMjEsIDE5OCwgMTEsIDIzLCAyMSwgMTk1LCAxMSwgMjMsIDIxLCAyMDAsIDExLCAKLSAgICAxMzksIDIxLCAyMTAsIDg2LCAxMSwgMTM5LCAyMSwgMTEwLCAxMSwgMTM5LCAyMSwgMTA1LCAxMSwgMTM5LCAyMSwgMTU4LCAKLSAgICAxMSwgMTM5LCAyMSwgMTYxLCAxMSwgMTM5LCAyMSwgMTg5LCAxMSwgMTM5LCAyMSwgMTk0LCAxMSwgMTM5LCAyMSwgMTk4LCAKLSAgICAxMSwgMTM5LCAyMSwgMTk1LCAxMSwgMTM5LCAyMSwgMjAwLCAxMSwgMzUsIDIxLCAyMTAsIDg2LCAxMSwgMzUsIDIxLCAxMTAsIAotICAgIDExLCAzNSwgMjEsIDEwNSwgMTEsIDM1LCAyMSwgMTU4LCAxMSwgMzUsIDIxLCAxNjEsIDExLCAzNSwgMjEsIDE4OSwgMTEsIAotICAgIDM1LCAyMSwgMTk0LCAxMSwgMzUsIDIxLCAxOTgsIDExLCAzNSwgMjEsIDE5NSwgMTEsIDM1LCAyMSwgMjAwLCAxMSwgMzUsIAotICAgIDIzLCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMywgMjEsIDExMCwgMTEsIDM1LCAyMywgMjEsIDEwNSwgMTEsIDM1LCAyMywgCi0gICAgMjEsIDE1OCwgMTEsIDM1LCAyMywgMjEsIDE2MSwgMTEsIDM1LCAyMywgMjEsIDE4OSwgMTEsIDM1LCAyMywgMjEsIDE5NCwgCi0gICAgMTEsIDM1LCAyMywgMjEsIDE5OCwgMTEsIDM1LCAyMywgMjEsIDE5NSwgMTEsIDM1LCAyMywgMjEsIDIwMCwgMTEsIDIzMCwgCi0gICAgMTM4LCAyMSwgMjEwLCA4NiwgMTEsIDIzMCwgMTM4LCAyMSwgMTEwLCAxMSwgMjMwLCAxMzgsIDIxLCAxMDUsIDExLCAyMzAsIAotICAgIDEzOCwgMjEsIDE1OCwgMTEsIDIzMCwgMTM4LCAyMSwgMTYxLCAxMSwgMjMwLCAxMzgsIDIxLCAxODksIDExLCAyMzAsIDEzOCwgCi0gICAgMjEsIDE5NCwgMTEsIDIzMCwgMTM4LCAyMSwgMTk4LCAxMSwgMjMwLCAxMzgsIDIxLCAxOTUsIDExLCAyMzAsIDEzOCwgMjEsIAotICAgIDIwMCwgMTAsIDExLCAyNTQsIDE3MCwgMTAsIDExLCAyNTIsIDU0LCAxMCwgMTEsIDIzNSwgMTIzLCAxMCwgMTEsIDI0OCwgCi0gICAgMTk1LCAxMCwgMTEsIDIxMiwgMzAsIDEwLCAxMSwgMjEwLCAxMDgsIDEwLCAxMSwgMjQyLCAzNywgMTAsIDExLCAyMTcsIDgwLCAKLSAgICAxMCwgMTEsIDIxMSwgNDMsIDEwLCAxMSwgMjM0LCAyNTAsIDEwLCAxMSwgMjMzLCAxMDIsIDEwLCAxMSwgMjMxLCA3OCwgMTAsIAotICAgIDExLCAyMjgsIDYyLCAxMCwgMTEsIDIyMSwgMTY2LCAxMCwgMTEsIDI1NCwgMTk2LCAxMCwgMTEsIDI0NCwgMTQyLCAxMCwgCi0gICAgMTEsIDIyMiwgMjYsIDEwLCAxMSwgMjI0LCA4MSwgMTAsIDExLCAyMjMsIDk1LCAxMCwgMTEsIDIyMCwgNTksIDEwLCAxMSwgCi0gICAgMjE3LCA3LCAxMCwgMTEsIDIxNiwgMTkyLCAxMCwgMTEsIDIzNCwgMTI5LCAxMCwgMTEsIDIxNiwgMjAyLCAxMCwgMTEsIAotICAgIDI0OCwgMjE2LCAxMCwgMTEsIDIxMCwgMTExLCAxMCwgMTEsIDI0MiwgMjQ0LCAxMCwgMTEsIDI0NywgMTE5LCAyNTIsIDU0LCAKLSAgICAxMCwgMTEsIDI0NywgMTE5LCAyMjgsIDYyLCAxMCwgMTEsIDI0NywgMTE5LCAyNDQsIDE0MiwgMTAsIDExLCAyNDcsIDExOSwgCi0gICAgMjI0LCA4MSwgMTAsIDExLCA2NSwgMjUyLCA1NCwgMTAsIDExLCA2NSwgMjM1LCAxMjMsIDEwLCAxMSwgNjUsIDI0MSwgMjE4LCAKLSAgICAxMCwgMTEsIDY1LCAyNDIsIDM3LCAxMCwgMTEsIDY1LCAyMTEsIDQzLCAxMCwgMTEsIDY1LCAyMzQsIDI1MCwgMTAsIDExLCAKLSAgICA2NSwgMjMzLCAxMDIsIDEwLCAxMSwgNjUsIDIzMSwgNzgsIDEwLCAxMSwgNjUsIDIyOCwgNjIsIDEwLCAxMSwgNjUsIDIyMSwgCi0gICAgMTY2LCAxMCwgMTEsIDY1LCAyNTQsIDE5NiwgMTAsIDExLCA2NSwgMjQ0LCAxNDIsIDEwLCAxMSwgNjUsIDIyMiwgMjYsIDEwLCAKLSAgICAxMSwgNjUsIDIyNCwgODEsIDEwLCAxMSwgNjUsIDIyMCwgNTksIDEwLCAxMSwgNjUsIDIxNywgNywgMTAsIDExLCA2NSwgCi0gICAgMjE2LCAxOTIsIDEwLCAxMSwgNjUsIDIzNCwgMTI5LCAxMCwgMTEsIDY1LCAyNDgsIDIxNiwgMTAsIDExLCA2NSwgMjQyLCAKLSAgICAyNDQsIDEwLCAxMSwgMjE3LCA3NiwgMjM1LCAxMjMsIDEwLCAxMSwgMjE3LCA3NiwgMjQyLCAzNywgMTAsIDExLCAyMTcsIAotICAgIDc2LCAyMTEsIDQzLCAxMCwgMTEsIDIxNywgNzYsIDIzMywgMTAyLCAxMCwgMTEsIDIxNywgNzYsIDIyOCwgNjIsIDEwLCAxMSwgCi0gICAgMjE3LCA3NiwgMjIxLCAxNjYsIDEwLCAxMSwgMjE3LCA3NiwgMjU0LCAxOTYsIDEwLCAxMSwgMjE3LCA3NiwgMjIyLCAyNiwgCi0gICAgMTAsIDExLCAyMTcsIDc2LCAyMjQsIDgxLCAxMCwgMTEsIDIxNywgNzYsIDIyMCwgNTksIDEwLCAxMSwgMjE3LCA3NiwgMjM0LCAKLSAgICAxMjksIDEwLCAxMSwgMjE3LCA3NiwgMjQ4LCAyMTYsIDEwLCAxMSwgMjE3LCA3NiwgMjQyLCAyNDQsIDEwLCAxMSwgMjE3LCAKLSAgICA3NiwgMjQ3LCAxMTksIDIyOCwgNjIsIDEwLCAxMSwgMjE3LCA3NiwgMjQ3LCAxMTksIDIyNCwgODEsIDEwLCAxMSwgMjE4LCAKLSAgICAxMTAsIDI1MiwgNTQsIDEwLCAxMSwgMjE4LCAxMTAsIDIzNSwgMTIzLCAxMCwgMTEsIDIxOCwgMTEwLCAyNDEsIDIxOCwgMTAsIAotICAgIDExLCAyMTgsIDExMCwgMjQyLCAzNywgMTAsIDExLCAyMTgsIDExMCwgMjE3LCA4MCwgMTAsIDExLCAyMTgsIDExMCwgMjExLCAKLSAgICA0MywgMTAsIDExLCAyMTgsIDExMCwgMjM0LCAyNTAsIDEwLCAxMSwgMjE4LCAxMTAsIDIzMSwgNzgsIDEwLCAxMSwgMjE4LCAKLSAgICAxMTAsIDIyOCwgNjIsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMSwgMTY2LCAxMCwgMTEsIDIxOCwgMTEwLCAyNTQsIDE5NiwgMTAsIAotICAgIDExLCAyMTgsIDExMCwgMjQ0LCAxNDIsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMiwgMjYsIDEwLCAxMSwgMjE4LCAxMTAsIDIyNCwgCi0gICAgODEsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMCwgNTksIDEwLCAxMSwgMjE4LCAxMTAsIDIxNywgNywgMTAsIDExLCAyMTgsIAotICAgIDExMCwgMjE2LCAxOTIsIDEwLCAxMSwgMjE4LCAxMTAsIDIzNCwgMTI5LCAxMCwgMTEsIDIxOCwgMTEwLCAyNDgsIDIxNiwgCi0gICAgMTAsIDExLCAyMTgsIDExMCwgMjEwLCAxMTEsIDEwLCAxMSwgMjE4LCAxMTAsIDI0MiwgMjQ0LCAxMCwgMTEsIDIxOCwgMTEwLCAKLSAgICAyNDcsIDExOSwgMjUyLCA1NCwgMTAsIDExLCAyMTgsIDExMCwgMjQ3LCAxMTksIDI0NCwgMTQyLCAxMCwgMTEsIDIzMiwgCi0gICAgMTIyLCAyNTQsIDE3MCwgMTAsIDExLCAyMzIsIDEyMiwgMjUyLCA1NCwgMTAsIDExLCAyMzIsIDEyMiwgMjM1LCAxMjMsIDEwLCAKLSAgICAxMSwgMjMyLCAxMjIsIDI0OCwgMTk1LCAxMCwgMTEsIDIzMiwgMTIyLCAyNDEsIDIxOCwgMTAsIDExLCAyMzIsIDEyMiwgCi0gICAgMjEyLCAzMCwgMTAsIDExLCAyMzIsIDEyMiwgMjEwLCAxMDgsIDEwLCAxMSwgMjMyLCAxMjIsIDI0MiwgMzcsIDEwLCAxMSwgCi0gICAgMjMyLCAxMjIsIDIxNywgODAsIDEwLCAxMSwgMjMyLCAxMjIsIDIxMSwgNDMsIDEwLCAxMSwgMjMyLCAxMjIsIDIzMywgMTAyLCAKLSAgICAxMCwgMTEsIDIzMiwgMTIyLCAyMzEsIDc4LCAxMCwgMTEsIDIzMiwgMTIyLCAyMjgsIDYyLCAxMCwgMTEsIDIzMiwgMTIyLCAKLSAgICAyMjEsIDE2NiwgMTAsIDExLCAyMzIsIDEyMiwgMjU0LCAxOTYsIDEwLCAxMSwgMjMyLCAxMjIsIDI0NCwgMTQyLCAxMCwgMTEsIAotICAgIDIzMiwgMTIyLCAyMjIsIDI2LCAxMCwgMTEsIDIzMiwgMTIyLCAyMjQsIDgxLCAxMCwgMTEsIDIzMiwgMTIyLCAyMjMsIDk1LCAKLSAgICAxMCwgMTEsIDIzMiwgMTIyLCAyMjAsIDU5LCAxMCwgMTEsIDIzMiwgMTIyLCAyMTcsIDcsIDEwLCAxMSwgMjMyLCAxMjIsIAotICAgIDIxNiwgMTkyLCAxMCwgMTEsIDIzMiwgMTIyLCAyMzQsIDEyOSwgMTAsIDExLCAyMzIsIDEyMiwgMjE2LCAyMDIsIDEwLCAxMSwgCi0gICAgMjMyLCAxMjIsIDI0OCwgMjE2LCAxMCwgMTEsIDIzMiwgMTIyLCAyMTAsIDExMSwgMTAsIDExLCAyMzIsIDEyMiwgMjQyLCAKLSAgICAyNDQsIDEwLCAxMSwgMTM5LCAyNTIsIDU0LCAxMCwgMTEsIDEzOSwgMjM1LCAxMjMsIDEwLCAxMSwgMTM5LCAyNDgsIDE5NSwgCi0gICAgMTAsIDExLCAxMzksIDIxMiwgMzAsIDEwLCAxMSwgMTM5LCAyMTAsIDEwOCwgMTAsIDExLCAxMzksIDI0MiwgMzcsIDEwLCAKLSAgICAxMSwgMTM5LCAyMTcsIDgwLCAxMCwgMTEsIDEzOSwgMjExLCA0MywgMTAsIDExLCAxMzksIDIzMywgMTAyLCAxMCwgMTEsIAotICAgIDEzOSwgMjMxLCA3OCwgMTAsIDExLCAxMzksIDIyOCwgNjIsIDEwLCAxMSwgMTM5LCAyMjEsIDE2NiwgMTAsIDExLCAxMzksIAotICAgIDI1NCwgMTk2LCAxMCwgMTEsIDEzOSwgMjQ0LCAxNDIsIDEwLCAxMSwgMTM5LCAyMjIsIDI2LCAxMCwgMTEsIDEzOSwgMjI0LCAKLSAgICA4MSwgMTAsIDExLCAxMzksIDIyMywgOTUsIDEwLCAxMSwgMTM5LCAyMjAsIDU5LCAxMCwgMTEsIDEzOSwgMjE3LCA3LCAxMCwgCi0gICAgMTEsIDEzOSwgMjE2LCAxOTIsIDEwLCAxMSwgMTM5LCAyMzQsIDEyOSwgMTAsIDExLCAxMzksIDIxNiwgMjAyLCAxMCwgMTEsIAotICAgIDEzOSwgMjQ4LCAyMTYsIDEwLCAxMSwgMTM5LCAyMTAsIDExMSwgMTAsIDExLCAxMzksIDI0MiwgMjQ0LCAxMCwgMTEsIDIyNiwgCi0gICAgMTY4LCA2NiwgMiwgMTIyLCAyLCAyMTcsIDQzLCAxMCwgMTEsIDIyNiwgMTY4LCAxMjIsIDIsIDI0OCwgMTk1LCAyMzEsIAotICAgIDIwNSwgODYsIDI0NSwgMjIwLCAyMTEsIDIzOSwgMjMxLCAyMDUsIDg2LCAyMTksIDI4LCAyMTEsIDIzOSwgMjMxLCAyMDUsIAotICAgIDg2LCAyMTIsIDksIDIxMSwgMjM5LCAyMzEsIDIwNSwgODYsIDIyOCwgNTYsIDIxMSwgMjM5LCAyMzEsIDIwNSwgODYsIDIyMywgCi0gICAgMTExLCAyNDYsIDk2LCAyMzEsIDIwNSwgODYsIDI0MiwgMTI3LCAyNDYsIDk2LCAyMzEsIDIwNSwgODYsIDcxLCAyNDYsIDk2LCAKLSAgICAyMzEsIDIwNSwgODYsIDEyMywgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDExMywgNjQsIDI1MCwgMTQxLCAyMzEsIAotICAgIDIwNSwgODYsIDEzNCwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDI0NCwgMTEsIDY0LCAyNTAsIDE0MSwgMjMxLCAKLSAgICAyMDUsIDg2LCAyNDQsIDgxLCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMjE5LCAxMjUsIDY0LCAyNTAsIDE0MSwgCi0gICAgMjMxLCAyMDUsIDg2LCAyMjAsIDEyMiwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDI0NSwgMTkzLCA2NCwgMjUwLCAKLSAgICAxNDEsIDIzMSwgMjA1LCA4NiwgMjI4LCAyMDAsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAxMjMsIDY0LCAyNTIsIAotICAgIDE1MywgMjMxLCAyMDUsIDg2LCAxMTMsIDY0LCAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAxMzQsIDY0LCAyNTIsIDE1MywgCi0gICAgMjMxLCAyMDUsIDg2LCAyNDQsIDExLCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMjQ0LCA4MSwgNjQsIDI1MiwgMTUzLCAKLSAgICAyMzEsIDIwNSwgODYsIDIxOSwgMTI1LCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMjIwLCAxMjIsIDY0LCAyNTIsIAotICAgIDE1MywgMjMxLCAyMDUsIDg2LCAyNDUsIDE5MywgNjQsIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDIyOCwgMjAwLCA2NCwgCi0gICAgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMTIzLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAxMTMsIDY0LCAyNTAsIDM0LCAKLSAgICAyMzEsIDIwNSwgODYsIDEzNCwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjQ0LCAxMSwgNjQsIDI1MCwgMzQsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjQ0LCA4MSwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjE5LCAxMjUsIDY0LCAyNTAsIDM0LCAyMzEsIAotICAgIDIwNSwgODYsIDIyMCwgMTIyLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAyNDUsIDE5MywgNjQsIDI1MCwgMzQsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjI4LCAyMDAsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDIyNSwgMjUsIDIzMSwgMjA1LCA4NiwgMjI2LCAKLSAgICAxNTYsIDIzMSwgMjA1LCA4NiwgMjUyLCAxNTQsIDIzMSwgMjA1LCA4NiwgMjUwLCA3MCwgMjMxLCAyMDUsIDg2LCAyMTgsIAotICAgIDIzOSwgMjMxLCAyMDUsIDg2LCAyMTgsIDM5LCAyMzEsIDIwNSwgODYsIDI1MywgMTc5LCAyMzEsIDIwNSwgODYsIDIxMSwgCi0gICAgMjMyLCAyMzEsIDIwNSwgODYsIDIzNSwgNjIsIDIzMSwgMjA1LCA4NiwgMjUyLCAxODQsIDEzMSwgODYsIDIwMywgMjUyLCAKLSAgICAxODQsIDEzMSwgODYsIDI0MSwgNDMsIDEzMSwgODYsIDI0MSwgNDIsIDEzMSwgODYsIDI0MSwgNDEsIDEzMSwgODYsIDI0MSwgCi0gICAgNDAsIDEzMSwgODYsIDI0MSwgMzksIDEzMSwgODYsIDI0MSwgMzgsIDEzMSwgODYsIDI0MSwgMzcsIDEzMSwgODYsIDI0MSwgCi0gICAgMzYsIDEzMSwgODYsIDI0MSwgMzUsIDEzMSwgODYsIDI0MSwgMzQsIDEzMSwgODYsIDI0MSwgMzMsIDEzMSwgODYsIDI0MSwgCi0gICAgMzIsIDEzMSwgODYsIDI0MSwgMzEsIDEzMSwgODYsIDI0MSwgMzAsIDEzMSwgODYsIDI0MSwgMjksIDEzMSwgODYsIDI0MSwgCi0gICAgMjgsIDEzMSwgODYsIDI0MSwgMjcsIDEzMSwgODYsIDI0MSwgMjYsIDEzMSwgODYsIDI0MSwgMjUsIDEzMSwgODYsIDI0MSwgCi0gICAgMjQsIDEzMSwgODYsIDI0MSwgMjMsIDEzMSwgODYsIDI0MSwgMjIsIDEzMSwgODYsIDI0MSwgMjEsIDEzMSwgODYsIDI0MSwgCi0gICAgMjAsIDEzMSwgODYsIDI0MSwgMTksIDEzMSwgODYsIDI0MSwgMTgsIDEzMSwgODYsIDI0MSwgMTcsIDEzMSwgODYsIDI0MSwgCi0gICAgMTYsIDEzMSwgODYsIDI0MSwgMTUsIDEzMSwgODYsIDI0MSwgMTQsIDEzMSwgODYsIDI0MSwgMTMsIDEzMSwgODYsIDI0MSwgCi0gICAgMTIsIDEzMSwgODYsIDI0MSwgMTEsIDEzMSwgODYsIDI0MSwgMTAsIDEzMSwgODYsIDI0MSwgOSwgMTMxLCA4NiwgMjQxLCA4LCAKLSAgICAxMzEsIDg2LCAyNDEsIDcsIDEzMSwgODYsIDI0MSwgNiwgMTMxLCA4NiwgMjQxLCA1LCAxMzEsIDg2LCAyNDEsIDQsIDEzMSwgCi0gICAgODYsIDI0MSwgMywgMTMxLCA4NiwgMjQxLCAyLCAxMzEsIDg2LCAyNDEsIDEsIDEzMSwgODYsIDI0MSwgMCwgMTMxLCA4NiwgCi0gICAgMjQwLCAyNTUsIDEzMSwgODYsIDI0MCwgMjU0LCAxMzEsIDg2LCAyNDAsIDI1MywgMTMxLCA4NiwgMjQwLCAyNTIsIDEzMSwgCi0gICAgODYsIDI0MCwgMjUxLCAxMzEsIDg2LCA2NywgMjUyLCAxODQsIDEzMSwgODYsIDIxMywgMjM4LCAxMzEsIDg2LCAyMTMsIAotICAgIDIzNywgMTMxLCA4NiwgMjEzLCAyMzYsIDEzMSwgODYsIDIxMywgMjM1LCAxMzEsIDg2LCAyMTMsIDIzNCwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMzMsIDEzMSwgODYsIDIxMywgMjMyLCAxMzEsIDg2LCAyMTMsIDIzMSwgMTMxLCA4NiwgMjEzLCAyMzAsIDEzMSwgCi0gICAgODYsIDIxMywgMjI5LCAxMzEsIDg2LCAyMTMsIDIyOCwgMTMxLCA4NiwgMjEzLCAyMjcsIDEzMSwgODYsIDIxMywgMjI2LCAKLSAgICAxMzEsIDg2LCAyMTMsIDIyNSwgMTMxLCA4NiwgMjEzLCAyMjQsIDEzMSwgODYsIDIxMywgMjIzLCAxMzEsIDg2LCAyMTMsIAotICAgIDIyMiwgMTMxLCA4NiwgMjEzLCAyMjEsIDEzMSwgODYsIDIxMywgMjIwLCAxMzEsIDg2LCAyMTMsIDIxOSwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMTgsIDEzMSwgODYsIDIxMywgMjE3LCAxMzEsIDg2LCAyMTMsIDIxNiwgMTMxLCA4NiwgMjEzLCAyMTUsIDEzMSwgCi0gICAgODYsIDIxMywgMjE0LCAxMzEsIDg2LCAyMTMsIDIxMywgMTMxLCA4NiwgMjEzLCAyMTIsIDEzMSwgODYsIDIxMywgMjExLCAKLSAgICAxMzEsIDg2LCAyMTMsIDIxMCwgMTMxLCA4NiwgMjEzLCAyMDksIDEzMSwgODYsIDIxMywgMjA4LCAxMzEsIDg2LCAyMTMsIAotICAgIDIwNywgMTMxLCA4NiwgMjEzLCAyMDYsIDEzMSwgODYsIDIxMywgMjA1LCAxMzEsIDg2LCAyMTMsIDIwNCwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMDMsIDEzMSwgODYsIDIxMywgMjAyLCAxMzEsIDg2LCAyMTMsIDIwMSwgMTMxLCA4NiwgMjEzLCAyMDAsIDEzMSwgCi0gICAgODYsIDIxMywgMTk5LCAxMzEsIDg2LCAyMTMsIDE5OCwgMTMxLCA4NiwgMjEzLCAxOTcsIDEzMSwgODYsIDIxMywgMTk2LCAKLSAgICAxMzEsIDg2LCAyMTMsIDE5NSwgMTMxLCA4NiwgMjEzLCAxOTQsIDEzMSwgODYsIDIxMywgMTkzLCAxMzEsIDg2LCAyMTMsIAotICAgIDE5MiwgMTMxLCA4NiwgMjEzLCAxOTEsIDEzMSwgODYsIDIxMywgMTkwLCAyMjUsIDMzLCAyNTAsIDI0MywgMjUyLCAxODQsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMTEzLCA2NCwgMjE5LCAKLSAgICAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDExLCA2NCwgCi0gICAgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgODEsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjE5LCAKLSAgICAxMjUsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjQ1LCAxOTMsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIDY0LCAyMTksIDE1LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjE2LCAyNDgsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM1LCAxMzksIAotICAgIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICAyMjQsIDE1LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgNzksIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAKLSAgICAyNTAsIDI0MywgMjU1LCA5LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAyNDEsIDIyNSwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAxMSwgNjQsIAotICAgIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCA4MSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgCi0gICAgMjE5LCAxMjUsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjQxLCAyMjUsIDIyNSwgCi0gICAgMzMsIDI1MCwgMjQzLCAyNDUsIDE5MywgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIDY0LCAKLSAgICAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIxNiwgMjQ4LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICAyMzUsIDEzOSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDI0MSwgMjI1LCAyMjUsIAotICAgIDMzLCAyNTAsIDI0MywgMjI0LCAxNSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIDI0MSwgCi0gICAgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjU1LCA5LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAKLSAgICAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAKLSAgICAxMSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCA4MSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjE5LCAxMjUsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjQ3LCAyNDcsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDUsIDE5MywgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIAotICAgIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIxNiwgMjQ4LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyMzUsIDEzOSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDI0NywgMjQ3LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjI0LCAxNSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIAotICAgIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgODUsIDIzNSwgNjIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAKLSAgICAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDExMywgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMTM0LCAKLSAgICA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDExLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyNDQsIDgxLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTksIDEyNSwgNjQsIDI0OSwgMjQyLCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NSwgMTkzLCAKLSAgICA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjgsIDIwMCwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjE2LCAyNDgsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNSwgMTM5LCA2NCwgMjQ5LCAyNDIsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDMxLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjQsIDE1LCA2NCwgCi0gICAgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDc5LCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICA3MSwgMjM1LCA2MiwgMjEsIDIxMCwgODcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIxMCwgODcsIDI0OSwgMjE5LCAyMSwgCi0gICAgMTIzLCAyNDksIDIxOSwgMjEsIDExMywgMjQ5LCAyMTksIDIxLCAxMzQsIDI0OSwgMjE5LCAyMSwgMjQ0LCAxMSwgMjQ5LCAKLSAgICAyMTksIDIxLCAyNDQsIDgxLCAyNDksIDIxOSwgMjEsIDIxOSwgMTI1LCAyNDksIDIxOSwgMjEsIDIyMCwgMTIyLCAyNDksIAotICAgIDIxOSwgMjEsIDI0NSwgMTkzLCAyNDksIDIxOSwgMjEsIDIyOCwgMjAwLCAyNDksIDIxOSwgODgsIDcsIDYsIDEsIDYxLCA4OCwgCi0gICAgNywgNiwgMSwgMjUzLCAxNTgsIDg4LCA3LCA2LCAxLCAyNTEsIDY2LCA4OCwgNywgNiwgMSwgMjQ5LCA2MCwgODgsIDcsIDYsIAotICAgIDEsIDc1LCA4OCwgNywgNiwgMSwgMjQ1LCA2LCA4OCwgNywgNiwgMSwgMjQzLCAyMDIsIDg4LCA3LCA2LCAxLCAyNDIsIDYwLCAKLSAgICA4OCwgNywgNiwgMSwgNzMsIDg4LCA3LCA2LCAxLCAyMzUsIDE0NCwgODgsIDcsIDYsIDEsIDIzNSwgMjMsIDg4LCA3LCA2LCAKLSAgICAxLCAxNTYsIDg4LCA3LCA2LCAxLCAxOTMsIDg4LCA3LCA2LCAxLCAyMzAsIDI1LCA4OCwgNywgNiwgMSwgNzYsIDg4LCA3LCAKLSAgICA2LCAxLCAyMjYsIDEwNSwgODgsIDcsIDYsIDEsIDIyNCwgOTYsIDg4LCA3LCA2LCAxLCAxNTMsIDg4LCA3LCA2LCAxLCAyMjIsIAotICAgIDkxLCA4OCwgNywgNiwgMSwgMjE3LCAxNTIsIDg4LCA3LCA2LCAxLCA3MCwgODgsIDcsIDYsIDEsIDIxNCwgMTA1LCA4OCwgNywgCi0gICAgNiwgMSwgMjEyLCA5OCwgODgsIDcsIDYsIDEsIDIxMSwgMTc4LCA4OCwgNywgNiwgMSwgMjExLCAxMTcsIDg4LCA3LCA2LCAxLCAKLSAgICAyMTAsIDE1OSwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgNywgNiwgMSwgMjIyLCA5MSwgMzcsIDMyLCA3LCA2LCAxLCAKLSAgICAyNTEsIDY2LCAzNywgMzIsIDcsIDYsIDEsIDE1MywgMzcsIDI1MCwgMTkxLCAzNywgMjExLCAxODAsIDkyLCA3LCA2LCAxLCAKLSAgICA2MSwgOTIsIDcsIDYsIDEsIDI1MywgMTU4LCA5MiwgNywgNiwgMSwgMjUxLCA2NiwgOTIsIDcsIDYsIDEsIDI0OSwgNjAsIAotICAgIDkyLCA3LCA2LCAxLCA3NSwgOTIsIDcsIDYsIDEsIDI0NSwgNiwgOTIsIDcsIDYsIDEsIDI0MywgMjAyLCA5MiwgNywgNiwgMSwgCi0gICAgMjQyLCA2MCwgOTIsIDcsIDYsIDEsIDczLCA5MiwgNywgNiwgMSwgMjM1LCAxNDQsIDkyLCA3LCA2LCAxLCAyMzUsIDIzLCAKLSAgICA5MiwgNywgNiwgMSwgMTU2LCA5MiwgNywgNiwgMSwgMTkzLCA5MiwgNywgNiwgMSwgMjMwLCAyNSwgOTIsIDcsIDYsIDEsIAotICAgIDc2LCA5MiwgNywgNiwgMSwgMjI2LCAxMDUsIDkyLCA3LCA2LCAxLCAyMjQsIDk2LCA5MiwgNywgNiwgMSwgMTUzLCA5MiwgNywgCi0gICAgNiwgMSwgMjIyLCA5MSwgOTIsIDcsIDYsIDEsIDIxNywgMTUyLCA5MiwgNywgNiwgMSwgNzAsIDkyLCA3LCA2LCAxLCAyMTQsIAotICAgIDEwNSwgOTIsIDcsIDYsIDEsIDIxMiwgOTgsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTE3LCAKLSAgICA5MiwgNywgNiwgMSwgMjEwLCAxNTksIDkyLCAyNDAsIDIwMSwgOTIsIDIzMCwgNDksIDkyLCAyMjEsIDE4MywgOTIsIDIxOCwgCi0gICAgMjI2LCA5MiwgMjI0LCAyMTgsIDkyLCAyMTIsIDIzLCAxNTIsIDM3LCA3LCA2LCAxLCA2MSwgMTUyLCAzNywgNywgNiwgMSwgCi0gICAgMjUzLCAxNTgsIDE1MiwgMzcsIDcsIDYsIDEsIDI1MSwgNjYsIDE1MiwgMzcsIDcsIDYsIDEsIDI0OSwgNjAsIDE1MiwgMzcsIAotICAgIDcsIDYsIDEsIDc1LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDUsIDYsIDE1MiwgMzcsIDcsIDYsIDEsIDI0MywgMjAyLCAxNTIsIAotICAgIDM3LCA3LCA2LCAxLCAyNDIsIDYwLCAxNTIsIDM3LCA3LCA2LCAxLCA3MywgMTUyLCAzNywgNywgNiwgMSwgMjM1LCAxNDQsIAotICAgIDE1MiwgMzcsIDcsIDYsIDEsIDIzNSwgMjMsIDE1MiwgMzcsIDcsIDYsIDEsIDE1NiwgMTUyLCAzNywgNywgNiwgMSwgMTkzLCAKLSAgICAxNTIsIDM3LCA3LCA2LCAxLCAyMzAsIDI1LCAxNTIsIDM3LCA3LCA2LCAxLCA3NiwgMTUyLCAzNywgNywgNiwgMSwgMjI2LCAKLSAgICAxMDUsIDE1MiwgMzcsIDcsIDYsIDEsIDIyNCwgOTYsIDE1MiwgMzcsIDcsIDYsIDEsIDE1MywgMTUyLCAzNywgNywgNiwgMSwgCi0gICAgMjIyLCA5MSwgMTUyLCAzNywgNywgNiwgMSwgMjE3LCAxNTIsIDE1MiwgMzcsIDcsIDYsIDEsIDcwLCAxNTIsIDM3LCA3LCA2LCAKLSAgICAxLCAyMTQsIDEwNSwgMTUyLCAzNywgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCAzNywgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgCi0gICAgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMjIzLCAxNTcsIDIzMSwgOTcsIDUwLCAKLSAgICAyMjMsIDE1NywgMjMxLCA5NCwgNTAsIDE1MiwgOTIsIDcsIDYsIDEsIDYxLCAxNTIsIDkyLCA3LCA2LCAxLCAyNTMsIDE1OCwgCi0gICAgMTUyLCA5MiwgNywgNiwgMSwgMjUxLCA2NiwgMTUyLCA5MiwgNywgNiwgMSwgMjQ5LCA2MCwgMTUyLCA5MiwgNywgNiwgMSwgCi0gICAgNzUsIDE1MiwgOTIsIDcsIDYsIDEsIDI0NSwgNiwgMTUyLCA5MiwgNywgNiwgMSwgMjQzLCAyMDIsIDE1MiwgOTIsIDcsIDYsIAotICAgIDEsIDI0MiwgNjAsIDE1MiwgOTIsIDcsIDYsIDEsIDczLCAxNTIsIDkyLCA3LCA2LCAxLCAyMzUsIDE0NCwgMTUyLCA5MiwgNywgCi0gICAgNiwgMSwgMjM1LCAyMywgMTUyLCA5MiwgNywgNiwgMSwgMTU2LCAxNTIsIDkyLCA3LCA2LCAxLCAxOTMsIDE1MiwgOTIsIDcsIAotICAgIDYsIDEsIDIzMCwgMjUsIDE1MiwgOTIsIDcsIDYsIDEsIDc2LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIDEwNSwgMTUyLCA5MiwgCi0gICAgNywgNiwgMSwgMjI0LCA5NiwgMTUyLCA5MiwgNywgNiwgMSwgMTUzLCAxNTIsIDkyLCA3LCA2LCAxLCAyMjIsIDkxLCAxNTIsIAotICAgIDkyLCA3LCA2LCAxLCAyMTcsIDE1MiwgMTUyLCA5MiwgNywgNiwgMSwgNzAsIDE1MiwgOTIsIDcsIDYsIDEsIDIxNCwgMTA1LCAKLSAgICAxNTIsIDkyLCA3LCA2LCAxLCAyMTIsIDk4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgMTUyLCA5MiwgNywgNiwgMSwgCi0gICAgMjExLCAxMTcsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMCwgMTU5LCAyNDksIDEyOCwgMTUyLCA5MiwgNywgNiwgMSwgMjI2LCAKLSAgICAxMDUsIDE1MiwgOTIsIDI0MCwgMTEzLCAxNTIsIDkyLCAxOTAsIDE1MiwgOTIsIDIwNiwgMTUyLCA5MiwgMjU1LCAyNSwgCi0gICAgMTUyLCA5MiwgMjEyLCAyMywgNDIsIDI0NywgMTY0LCA5MiwgMjUwLCAyMywgOTIsIDI0OSwgMTcwLCA5MiwgMjQzLCAyNTIsIAotICAgIDkyLCAyNDAsIDEwNSwgOTIsIDIyOSwgODYsIDkyLCAyMjksIDc5LCA5MiwgMjI2LCAyMTQsIDkyLCAyMTksIDM1LCA5MiwgCi0gICAgMTIwLCAyLCAyNDUsIDMxLCA3OCwgOTIsIDIxMywgMTE5LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA2MSwgMjIzLCAKLSAgICAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjUzLCAxNTgsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI1MSwgNjYsIDIyMywgCi0gICAgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI0OSwgNjAsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDc1LCAyMjMsIDEwMywgCi0gICAgMjM1LCAyMzksIDE2LCAxLCAyNDUsIDYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI0MywgMjAyLCAyMjMsIDEwMywgCi0gICAgMjM1LCAyMzksIDE2LCAxLCAyNDIsIDYwLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3MywgMjIzLCAxMDMsIDIzNSwgCi0gICAgMjM5LCAxNiwgMSwgMjM1LCAxNDQsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIzNSwgMjMsIDIyMywgMTAzLCAyMzUsIAotICAgIDIzOSwgMTYsIDEsIDE1NiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMTkzLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAKLSAgICAxLCAyMzAsIDI1LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3NiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgCi0gICAgMjI2LCAxMDUsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIyNCwgOTYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIAotICAgIDE1MywgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjIyLCA5MSwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjE3LCAKLSAgICAxNTIsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDcwLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTQsIDEwNSwgCi0gICAgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjEyLCA5OCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjExLCAxNzgsIAotICAgIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxMSwgMTE3LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTAsIDE1OSwgCi0gICAgNDIsIDE0MSwgMjQxLCA2MywgOTIsIDU2LCAyMzQsIDE4LCA5MiwgNTYsIDIwNiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDUwLCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTQsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2MiwgOTIsIDU2LCAyNDgsIDkwLCA5MiwgCi0gICAgOSwgMjE0LCAxNzcsIDIzOCwgNjksIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI4LCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2OCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIAotICAgIDQyLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0NCwgOTIsIDksIDIxNCwgMTc3LCAKLSAgICAyMzgsIDY1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTEsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2NywgOTIsIDksIDIxNCwgCi0gICAgMTc3LCAyMzgsIDQzLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAyOSwgOTIsIDksIAotICAgIDIxNCwgMTc3LCAyMzgsIDM0LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMjcsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NywgCi0gICAgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU5LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzcsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAKLSAgICA0OCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNzIsIDkyLCA5LCAyMTQsIDE3NywgCi0gICAgMjM4LCA3MSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTIsIDkyLCA5LCAyMTQsIAotICAgIDE3NywgMjM4LCA3MCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDYxLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDcsIDkyLCA5LCAKLSAgICAyMTQsIDE3NywgMjM4LCAyNiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ5LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzEsIAotICAgIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAzMCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDYwLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgCi0gICAgMzgsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0MCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQxLCA5MiwgOSwgMjE0LCAxNzcsIAotICAgIDIzOCwgMzMsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2NCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU4LCAyMTYsIDYsIDIyMCwgCi0gICAgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCAzOSwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNzEsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDY5LCAyMTYsIDYsIAotICAgIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCA1MywgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgMzYsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDQ5LCAyMTYsIAotICAgIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCAzMiwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgNjMsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDQ1LCAzNywgCi0gICAgMTU0LCAyNTQsIDI0NSwgMzcsIDE1NCwgMjU1LCAxMiwgMjQ5LCA3MSwgMjQ0LCA0MiwgMjUwLCAwLCAyMTQsIDE5NCwgMjI4LCAKLSAgICAyMTMsIDIsIDIxOCwgMTUzLCAyMTgsIDMzLCAxMTcsIDIzMCwgMTE0LCAyMTgsIDMyLCAyNTAsIDI2LCAyNTMsIDIwNywgCi0gICAgMjQ2LCA1NCwgMjE4LCAzMSwgMTE3LCAyNTEsIDExOCwgMjIzLCAxNTgsIDI1MSwgMTQwLCAyNTMsIDIwNywgMjI4LCAyMTIsIAotICAgIDIxMiwgNDEsIDIxMiwgMzUsIDIxMywgMTMxLCAyMzAsIDE5NSwgMjEyLCAyNSwgMjQ1LCAyMjQsIDI0MiwgMTgxLCAyNDUsIAotICAgIDQ1LCAyNDUsIDIyNCwgMjQyLCAxODEsIDI1NCwgMTI4LCAyNDUsIDIyNCwgMjQyLCAxODEsIDI1MywgMjI1LCAyNDIsIDE4MSwgCi0gICAgMiwgMjMxLCA1MSwgMTY2LCAyMzAsIDEyOSwgODcsIDIxMiwgMjcsIDI0OSwgMTM3LCAyMzAsIDEyOSwgODcsIDI0NCwgOTIsIAotICAgIDIyNCwgMjIsIDIzMCwgMTI5LCA4NywgMjEyLCAyNywgMjQyLCAyMTAsIDIzMCwgMTI5LCA4NywgMjQzLCAyMjksIDIzMCwgCi0gICAgMTI5LCA4NywgMjEyLCA1MiwgMjQyLCAyMTAsIDIzMCwgMTI5LCA4NywgMjMzLCA4MCwgMjI0LCAyMiwgMjMwLCAxMjksIDg3LCAKLSAgICAyMTIsIDUyLCAyNDksIDEzNywgMjMwLCAxMjksIDg3LCAyNDksIDEzNywgMjMwLCAxMjgsIDE2NiwgMjMwLCAxMjksIDIsIAotICAgIDI0NCwgMTkwLCAyNDQsIDkyLCAyMjQsIDIyLCAyMzAsIDEyOSwgMiwgMjQ0LCAxOTAsIDIzMywgODAsIDIyNCwgMjIsIDIzMCwgCi0gICAgMTI5LCAyLCAyNDQsIDE5MCwgMjQzLCAyMjksIDIzMCwgMTI5LCAyLCAyNDQsIDE5MCwgMjE4LCAzOCwgMiwgMjQ0LCAxOTAsIAotICAgIDI0MiwgMTc5LCAyMTgsIDE1NiwgMjE5LCAyNTUsIDIxOCwgMTU2LCAyNTAsIDExNiwgMjIxLCAxNjgsIDI0NSwgMzksIDIxNSwgCi0gICAgMjM1LCAyNDgsIDg0LCAyMTUsIDIzNSwgMjI2LCA1OSwgMjE1LCAyMzUsIDI1MSwgMjcsIDIxNSwgMTA5LCAyNTAsIDExOCwgCi0gICAgMjUxLCAyMTAsIDIyMiwgMTkxLCAyNDEsIDE3OSwgMjE4LCAzNiwgMjUxLCAyMTAsIDI0NSwgMjI4LCA2NCwgMjMxLCAxOTQsIAotICAgIDI0NSwgMjI4LCA2NCwgMjIzLCAzMSwgMjQxLCAyMDQsIDI0NCwgMTEsIDIzMywgNTQsIDI0OSwgMjQ2LCAyMzEsIDE3MCwgCi0gICAgMjMzLCA1MywgMjQ0LCAxNzYsIDIzMywgNTMsIDIzMywgNTQsIDI0NCwgNDcsIDIzNiwgMCwgMjExLCAyMzksIDIzMCwgNTgsIAotICAgIDIxNiwgMzQsIDI1MywgMTkxLCAyNDIsIDE0MywgMjMxLCA2NywgMjEyLCAzOSwgMjE3LCA1NywgMjMzLCAyNiwgMjUyLCAKLSAgICAxNDksIDIyNSwgNjIsIDIyMywgMTExLCAyNTQsIDU0LCAyNDIsIDEyNywgMjU0LCA1NCwgMjI1LCAyMTcsIDIyNSwgMjE4LCAKLSAgICAyNTAsIDExOSwgMjE4LCAxMTQsIDI0MiwgMjMsIDIxOSwgOTAsIDY0LCAyMjUsIDQ0LCAyMzEsIDg3LCAyMjYsIDE5NywgCi0gICAgMjUxLCAxOTQsIDIyNCwgMjI5LCAyMzMsIDM2LCAyMjMsIDMyLCAyNDksIDE0MiwgMjIzLCAzMiwgMjUyLCAxNTksIDI0OSwgCi0gICAgMTczLCAyMjMsIDMxLCAyNDksIDk1LCAyMiwgMjIzLCAzMSwgMjE4LCAxNDEsIDI1MSwgMTY3LCAyMTksIDE0LCAyNTEsIAotICAgIDE1MSwgMjQzLCAyNTEsIDI0MywgMjQ3LCAyMjIsIDIwNywgMjE3LCAyNDYsIDIyNCwgMjMxLCAyNDgsIDE3NSwgMjI2LCAKLSAgICAyMzYsIDIxOCwgNywgMjQzLCAyNDgsIDIxOSwgMjMwLCAyNDQsIDkxLCAyNTEsIDIxLCAyLCAyMTcsIDIzOSwgMjQ4LCAzNSwgCi0gICAgMjE5LCA1MiwgMjQwLCAxMTIsIDI0OSwgMTQxLCAyMjAsIDcwLCAyNDAsIDExMSwgMjQwLCAxMTIsIDI0OSwgMTQxLCAyNDYsIAotICAgIDEwOCwgMjQ5LCAxNzIsIDI1MCwgODQsIDEzMCwgMjUwLCAyNTQsIDIzMiwgMTQxLCAyNDksIDg4LCAyNDEsIDU1LCAyMjQsIAotICAgIDIzMywgMjE5LCAyNDAsIDI1MiwgMzYsIDI1MSwgMTYzLCAyMjQsIDIzNCwgNjQsIDI0NCwgMzMsIDI0OSwgMTcxLCAyNDQsIAotICAgIDI0LCAyMiwgMjM0LCAzMiwgMjE3LCAxOSwgMjExLCAyMzAsIDI0MiwgMTMsIDIyMiwgMTIsIDI1MSwgMTc3LCAyMiwgMjQ5LCAKLSAgICAxMDIsIDIxMSwgMjM3LCAyNDIsIDE4NCwgMjQ5LCAyMzUsIDI0MiwgMTg0LCAyMTUsIDE5MywgMjQ2LCA5MCwgMjUyLCA2MiwgCi0gICAgMjMwLCA5MywgMjUwLCA3LCAyNTIsIDYyLCAyMzAsIDkyLCAyNTIsIDE4NywgMjUxLCAxNzYsIDIyMywgMzMsIDIxMSwgMjAxLCAKLSAgICAyMjQsIDE5NSwgMjUxLCAyMzUsIDI1MSwgMjAsIDIzNSwgMTM4LCAyNTAsIDc3LCAyMTUsIDIzNSwgMjQ0LCAxNjIsIDI1MCwgCi0gICAgNzYsIDI0NCwgOTQsIDI0NCwgOTUsIDIxOSwgMTIsIDI1MiwgMTU4LCAyMjUsIDI1MCwgMjI0LCAyNDQsIDI0OSwgMjA0LCAKLSAgICAyNTIsIDE1OSwgMjE3LCA1OSwgMjE1LCAyMzUsIDI0OSwgMTI4LCAyNDQsIDY3LCAyMjUsIDYzLCAyNDgsIDgxLCAyMzUsIAotICAgIDEzMSwgMjQ3LCAxMzEsIDI1MCwgMjMyLCAyMTgsIDExMywgMjExLCAyNDAsIDI1MCwgOTgsIDIzMCwgMTI5LCAyMTMsIDE2NCwgCi0gICAgMjUwLCAxNjIsIDIyMSwgMTk5LCAyMjEsIDIyNCwgMjQyLCAxNDgsIDI1MCwgMjUxLCAyNTAsIDIzMywgMjQwLCAyNDUsIAotICAgIDI0NCwgMTMwLCAyMTIsIDAsIDIyMiwgMjAwLCAyNDksIDIzNiwgMjQ0LCA4NiwgMjI1LCAyLCAyMiwgMjQ0LCA5MCwgMjMwLCAKLSAgICAyMjcsIDIzMCwgMTA4LCAyNTEsIDEwLCAyNTAsIDM5LCAyNDEsIDIzMiwgMjUzLCAyNDEsIDIyNiwgNjIsIDIxNiwgMTQsIAotICAgIDI0MSwgMjUxLCAyNTAsIDI5LCAyMTYsIDI0MiwgMjE2LCAxMTMsIDI1MCwgMjAsIDI1MSwgMjAyLCAyMjUsIDE3NywgMjUzLCAKLSAgICAyNDAsIDIxMywgMTcyLCAyNDMsIDExMCwgMjQ3LCAxOTcsIDI0MSwgMTU2LCAyMTksIDg0LCAyMzEsIDIzNCwgMjUxLCAyNDUsIAotICAgIDI0MywgMTExLCAyNDcsIDI0MCwgMjUxLCAxNjYsIDI0NCwgNTIsIDIyNSwgMzMsIDI1MCwgMjQxLCAyOCwgMjI4LCA0NywgCi0gICAgMjMwLCA4NSwgMjgsIDIyOCwgNDIsIDIyMSwgMjEyLCAyNDIsIDk5LCAyOCwgMjM0LCAxMzcsIDIxNSwgMTkwLCAyMTMsIAotICAgIDE1NCwgMjgsIDIyMSwgMTkyLCAyMjIsIDEyNCwgMjIwLCAxMSwgMiwgMjIxLCAyMjcsIDIxNiwgMjQ0LCAyMjMsIDE3OCwgCi0gICAgMjIsIDI1MiwgMTU5LCAyMTksIDEwNSwgMjIsIDIxOSwgMTA1LCAyNTEsIDE4NywgMjUyLCAxMjMsIDIyLCAyNDEsIDQ5LCAKLSAgICAyNTAsIDEyMCwgMjQ0LCA3MywgMjE5LCA2MywgMjIyLCAxMjUsIDIxOCwgMTIsIDIxNSwgMTk0LCAyNDAsIDI0NiwgMjIzLCAKLSAgICAxNzksIDI1NCwgMTI5LCAyNDQsIDMxLCAyMjIsIDEzNiwgMjQ0LCAzMSwgMjE3LCAyNDEsIDI0MCwgMjM1LCAyNTEsIDExOSwgCi0gICAgMjQwLCAyMzUsIDIsIDI0MywgOTQsIDIyNiwgMjI5LCAyNTEsIDExOSwgMjM1LCAxMzEsIDIyNCwgMjM5LCAyMjYsIDIyOCwgCi0gICAgMjQ1LCA0NCwgMjI0LCAyMzksIDIyNiwgMjI4LCAyNDAsIDI0NCwgMjUyLCAxNDUsIDI1MywgMTgxLCAyMTYsIDI1MiwgMjMxLCAKLSAgICAyMzQsIDI0MCwgMjQwLCAyMzIsIDExMSwgMjQwLCAyNDAsIDI0OSwgMTc2LCAyMTgsIDEyNSwgMjIxLCAxOTgsIDI0OCwgNDMsIAotICAgIDIxOCwgMTI1LCAyNDQsIDE4MCwgMjM1LCAxNDksIDIzMywgODksIDIzNSwgMTMxLCAyNTAsIDIyNiwgMjQ1LCA0NCwgMjUwLCAKLSAgICAyMjYsIDIyMywgMTQxLCAyMzAsIDExMiwgMjI2LCAxMTQsIDIxMiwgNDEsIDI1MSwgMTIzLCAyNDksIDE0NSwgMjE2LCAxMDYsIAotICAgIDIzMywgMTgsIDIyMywgMTgwLCAyNTAsIDIyNCwgMjQ2LCA5NiwgMjQ5LCAxMzUsIDIxMiwgMywgMjE5LCA3MCwgMjE5LCA2OCwgCi0gICAgMjQwLCAyNDUsIDIyMywgMTUzLCAyNDIsIDE3MCwgMjIwLCA1NywgMjMwLCAxNDUsIDIyMiwgMTk0LCAyNTAsIDEwOCwgMjQ3LCAKLSAgICAxMzYsIDIyNSwgNzMsIDI1MSwgMjAzLCAyNDUsIDE2OSwgMjI2LCAyMzgsIDIxOCwgMjUyLCAyMjAsIDUyLCAyNTEsIDEyMiwgCi0gICAgMjU0LCA5MiwgMjQxLCA1NCwgMjMzLCAxMjEsIDI1MiwgNjAsIDI0NCwgOTAsIDIxNSwgMTkzLCAyNDQsIDkwLCAyNTEsIAotICAgIDIwOSwgMjE1LCA5MSwgMjQxLCAyNDksIDI1MCwgMTA5LCAyNTIsIDE4NywgMjUwLCAxMDksIDI0MywgMjQyLCAyNTIsIDE4NywgCi0gICAgMjUwLCAxMDksIDI1MSwgMjM3LCAyMjUsIDE5NSwgMjM0LCAyNiwgMjI0LCAyNDgsIDI0NiwgODcsIDI1MSwgMTEsIDI1MiwgCi0gICAgMTc3LCAyNTEsIDExLCAyNDcsIDEzMCwgMjMwLCAxMTMsIDI0NCwgMTkwLCAyNDksIDE0NiwgMjQ0LCAxOTAsIDIxNiwgMTA3LCAKLSAgICAyNDQsIDE5MCwgMjIzLCAxODEsIDI0NCwgMTkwLCAyNTAsIDIyNSwgMjQ0LCAxOTAsIDI0NiwgOTcsIDI0NCwgMTkwLCAyMTgsIAotICAgIDI0MSwgMjEyLCAzLCAyNDAsIDI0NiwgMjQ0LCAxOTAsIDIzMCwgMTQ2LCAyNDQsIDE5MCwgMjQ3LCAxMzcsIDI0NCwgMTkwLCAKLSAgICAyMjUsIDc0LCAyNDQsIDE5MCwgMjQzLCAyNDUsIDI0NCwgMTkwLCAyNDIsIDIwLCAyNDQsIDE5MCwgMjExLCAyMjQsIDI0NCwgCi0gICAgMTkwLCAyNTIsIDcxLCAyNDQsIDE5MCwgMjI2LCA0NSwgMjQ0LCAxOTAsIDIyNSwgNzQsIDIyOCwgNTMsIDIyNSwgMjMyLCAKLSAgICAyMjQsIDE4NiwgMjQ1LCAxMywgMjQ1LCAyMjcsIDIyOCwgNTMsIDIzMCwgMTEwLCAyMTYsIDE5LCA3MSwgMTIwLCAyMjUsIDcsIAotICAgIDI1MiwgMTgyLCAyMzUsIDI0MiwgNzEsIDEyNCwgMjI1LCA3LCAyNTIsIDE4MiwgMjM1LCAyNDIsIDcxLCA0MywgMjI1LCA3LCAKLSAgICAyNTIsIDE4MiwgMjM1LCAyNDIsIDcxLCA0NCwgMjI1LCA3LCAyNTIsIDE4MiwgMjM1LCAyNDIsIDI0NCwgODQsIDI0MiwgMTYsIAotICAgIDUwLCAyMTIsIDMzLCAyNDIsIDE2LCA1MCwgMjI2LCAyMTUsIDI0MiwgMTYsIDUwLCAyMTYsIDEzNSwgMTIwLCA1MCwgMjE2LCAKLSAgICAxMzUsIDEyNCwgNTAsIDI1MCwgMTksIDI0MiwgMTEsIDUwLCAyMDQsIDI0MiwgMTEsIDUwLCAyNDksIDEyMywgMjExLCAyMjAsIAotICAgIDI0MSwgMjUxLCAyNDUsIDE0LCAyMjksIDEwNCwgMjE3LCAxNTEsIDIzNSwgMTI1LCAyNDYsIDkyLCAyMzQsIDgyLCAyNTEsIAotICAgIDI0NywgMjExLCAyMjAsIDI0OSwgMjQ5LCAyMjQsIDEyNywgMjQyLCAxNCwgMjI0LCAyMzAsIDIzMSwgMTc3LCAyMjAsIDQsIAotICAgIDI1MywgMjAzLCAyMjAsIDQsIDI0MSwgMTY0LCAyMjAsIDQsIDIxMSwgMjIwLCAyMjEsIDI0MCwgMjExLCAyMjAsIDI1MSwgCi0gICAgMTg2LCAyNDQsIDI5LCAyNTEsIDkwLCAyMzYsIDAsIDIxOSwgMTY5LCAyNTEsIDg5LCAyMzYsIDAsIDIxOSwgMTY5LCAyNTEsIAotICAgIDE2MiwgMjQyLCAxOTQsIDIzMSwgMTg1LCAyMTEsIDIyMSwgMjQ0LCAxNzQsIDIzMSwgMTg2LCAyMiwgMjExLCAyMjIsIDI0MSwgCi0gICAgNjAsIDI0MiwgMTAsIDExMywgMjMxLCA1OSwgMjQxLCA2MCwgMjQyLCAxMCwgMTEzLCAyMTEsIDIxOSwgMjQxLCA2MCwgMjQyLCAKLSAgICAxMCwgMjI0LCAyNTUsIDIyNiwgMjI3LCAyMTEsIDIyMiwgMiwgMjUxLCAxMDYsIDI0NSwgMjI1LCAyNTEsIDE0MSwgMiwgCi0gICAgMjEzLCAyNDYsIDIyNSwgMTY4LCAyLCAyNTEsIDIxMiwgMjQyLCAzNCwgMjMxLCAxODYsIDIsIDI0MiwgMTEwLCAyMjUsIAotICAgIDEwOSwgMjMxLCAxNzQsIDIzMSwgMTg2LCAyLCAyMTUsIDk3LCAyMjYsIDIwOCwgMjMxLCAxODUsIDIyNiwgMjA4LCAyMTEsIAotICAgIDIyMSwgMjUyLCAxODYsIDI0OSwgMTkwLCAyMTEsIDIwNSwgMjI0LCAxODksIDIzNSwgMTMxLCAyMjYsIDIyMywgMjM1LCAKLSAgICAxMzEsIDI0MiwgMTY5LCAyNDIsIDIyMiwgMjUyLCAxODcsIDI1NCwgMTEzLCAyNDUsIDE4LCAyNTQsIDE2MCwgMjU0LCAxNjEsIAotICAgIDIzMCwgMTM2LCAyMzYsIDUsIDIxOSwgMTAwLCAyMzUsIDIzMiwgMjQ4LCAzNCwgMjI1LCAxNjcsIDI0MiwgMTA1LCAyNDgsIAotICAgIDE3OSwgMjMyLCAyMDEsIDIyOSwgMjExLCAyMjQsIDI1NCwgMjQ0LCAxOTEsIDIzMSwgMTQyLCAyNDIsIDMzLCAyNTIsIDEzOCwgCi0gICAgMjI1LCAxLCAyMTcsIDE3MSwgMjI1LCA2NiwgMjM0LCA2NCwgNzgsIDIzMiwgMTExLCAyMzMsIDEwLCAyMjIsIDIzMywgMjQzLCAKLSAgICA1NCwgMjE4LCAxMzEsIDIzNCwgNjMsIDI1MSwgMTcxLCAyNDksIDE0OCwgMiwgMjQxLCAyMjcsIDIxMiwgMTksIDI1MiwgNjksIAotICAgIDI0MSwgMjI3LCAyNTEsIDEzNSwgMjQxLCAyMjcsIDExMywgMjQxLCAyMjUsIDIxOSwgMTAsIDI0MSwgMjI3LCAyNDIsIDEyMCwgCi0gICAgMjQxLCAyMjcsIDI0MSwgMjI4LCAyLCA3NCwgMjUxLCAyMDgsIDI0MSwgMjI3LCAyNDIsIDEyNywgMjQxLCAyMjcsIDIxMSwgCi0gICAgNDIsIDI0MSwgMjI3LCAyMjQsIDEyOCwgMjQxLCAyMjcsIDI0MSwgMjI4LCAyLCAyMjMsIDMzLCAyMjMsIDQ0LCAyNDEsIAotICAgIDIyNSwgMjQxLCAyMjgsIDI0OCwgODEsIDI0NywgMjQ5LCAyMjAsIDgyLCAyLCAxMTUsIDU5LCAyMzUsIDIxNSwgMjQ1LCAKLSAgICAxNzIsIDE5MiwgMjUxLCAxMTYsIDI1NCwgMTEyLCA4NywgMjUxLCAxOTUsIDIxOSwgOTIsIDg3LCAyNDksIDIyOCwgODcsIAotICAgIDIxOCwgMjQ2LCAyMTcsIDI0OCwgODcsIDI0NiwgODUsIDI0OCwgMTU3LCA4NywgMjI1LCA2NywgNjQsIDIyNCwgMjQ5LCAKLSAgICAyNDQsIDYxLCAyNTIsIDMsIDI0NywgMTY1LCA4NywgMjE5LCAzLCAyNTIsIDE1OCwgMjE2LCAxNDksIDI1MiwgMTU4LCA3MSwgCi0gICAgMjQ0LCA1MSwgMjQwLCAyMTEsIDIyNSwgNSwgODcsIDIzMCwgMTQ5LCAyNTIsIDE3MiwgMjQ5LCA5OCwgMjQ1LCAzMiwgMTE0LCAKLSAgICAyNDcsIDEzMiwgNTAsIDI0OSwgMTM5LCAyNTAsIDI0MiwgMjUyLCAxNDQsIDIsIDIxMSwgNDAsIDUwLCAyNTIsIDE0NCwgMiwgCi0gICAgMjQ3LCAxMzIsIDUwLCAyNTIsIDE0NCwgMiwgMjQ1LCA0NywgNTAsIDI1MiwgMTQ0LCAyLCAyMjQsIDIyOCwgNTAsIDIzMCwgCi0gICAgMTQ5LCAyLCAyMTEsIDIzNSwgMjUwLCAxMzgsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMSwgMjIsIDIxMSwgNDAsIDUwLCAyMjEsIAotICAgIDE3OCwgMjI1LCAxNjYsIDI0OSwgMjA4LCAyNTEsIDEzOSwgMjMwLCAxODYsIDI0NCwgNTYsIDI0NywgMTg1LCAyMjYsIDE2MSwgCi0gICAgMjQ3LCAxOTAsIDI0NiwgNDksIDI0NCwgMTA3LCAyNDQsIDQwLCAyMDQsIDI0NCwgMTA3LCAyNDQsIDQwLCAyMjYsIDc2LCAyLCAKLSAgICAyNDksIDEwMCwgMjI2LCA3NiwgMjQ0LCAxODMsIDIxNCwgMTYzLCAyNTEsIDE2LCAyMTcsIDE4LCAyNTEsIDE2LCAyNTAsIAotICAgIDI0MywgMjM1LCAyNDIsIDI1MCwgMTM4LCAyLCAyMTQsIDE1MywgMjE1LCAyMzAsIDI1MCwgMTM4LCAyLCAyNDYsIDEwNCwgCi0gICAgMjE1LCAyMzAsIDI1MiwgMTQxLCAyNTAsIDEzNywgMjUwLCA2LCAyMjQsIDEyMywgMjIyLCAxODUsIDIyNCwgMTIzLCAyMjYsIAotICAgIDE5LCAyMTgsIDEyMSwgMjIyLCAxMzEsIDIxNSwgMjIyLCAyMjIsIDEzMSwgMjUxLCAxOTEsIDIxNywgOTEsIDIzMywgNTEsIAotICAgIDIyOCwgNDUsIDIyOCwgNDYsIDIsIDI0OCwgODAsIDI0OSwgMTQ3LCAyNTAsIDAsIDI1MSwgMTkyLCAyMDQsIDI1MSwgMTkyLCAKLSAgICAyNDIsIDEyNywgMjUxLCAxOTIsIDI1MSwgMjA4LCAyNTEsIDE5MiwgMjI2LCAxNTcsIDI1MSwgMTkyLCAyNTEsIDE4OSwgCi0gICAgMjI5LCAyMDUsIDI1MiwgMTc1LCAyMjEsIDE4NiwgMjMxLCA2MCwgMjE3LCAxLCAyMjMsIDEyMywgMjI2LCA3NCwgMjQ0LCAKLSAgICAxNTksIDIzMSwgMjM0LCAyMjEsIDIyMywgMjU0LCA4OSwgMjI0LCAxNDUsIDI1NCwgMjUyLCAyMzIsIDExMywgMjUwLCAxMjcsIAotICAgIDIzMSwgNzIsIDIyNiwgMTI5LCAyMTUsIDIzOCwgMjM1LCAyNTIsIDIxNSwgMjM4LCAyMjYsIDgyLCAyNDYsIDI0LCA4NywgCi0gICAgMjM1LCAyNDksIDI0NSwgMTE5LCAyNDUsIDEyMCwgMiwgMjQ2LCAxMDQsIDgwLCA0OCwgMjUwLCAwLCAyMzEsIDIwMCwgMiwgCi0gICAgMjMyLCAxMDcsIDI0NCwgNzMsIDI1MCwgMCwgMjMxLCAyMDAsIDIsIDIyMywgMTU3LCAyNDQsIDczLCAyMDQsIDIzMSwgMjAwLCAKLSAgICAyLCAyMjMsIDE1NywgMjQ0LCA3MywgMjA0LCAyMzEsIDIwMCwgMiwgMjMyLCAxMDcsIDI0NCwgNzMsIDIyNCwgMjM2LCAyMjQsIAotICAgIDIzNywgMjQwLCAyNDgsIDIyOSwgODQsIDIzMCwgMTU5LCAyMjUsIDExNywgMjMwLCAxNTksIDIyNSwgMTE4LCAyLCA5NywgCi0gICAgODAsIDI1MywgMjA3LCAyMzMsIDQ2LCAyMTMsIDE3NSwgMjMwLCAxNTgsIDIzMCwgMTU5LCAyMjUsIDExOCwgMjI2LCAyMzAsIAotICAgIDIyOCwgNzUsIDIzMCwgMTU5LCAyMjUsIDExNiwgMjU0LCA5MCwgMiwgMjUyLCAxMjksIDI1MSwgMTAsIDIxMywgMTcyLCAKLSAgICAyNTEsIDEwLCAyMTYsIDI1NCwgMjIzLCAxNzMsIDIxMywgMTcxLCAyMTUsIDYwLCA5NywgMjUzLCAyNDcsIDI1MCwgMiwgOTcsIAotICAgIDIyLCAxNDAsIDIwNCwgMjUwLCAzNiwgMjUzLCAyNDcsIDI1MCwgMiwgOTcsIDIyLCAxNDAsIDIwNCwgMjUwLCAzNiwgMjUzLCAKLSAgICAyNDgsIDIsIDM3LCAxMjMsIDIyNiwgMTIwLCAyNTAsIDIsIDI0NiwgMTA0LCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCAzNiwgCi0gICAgMjUzLCAyNDcsIDI1NCwgODgsIDI0NiwgMTA0LCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCAzNiwgMjUzLCAyNDcsIDEyMSwgCi0gICAgMjUxLCAxMzgsIDg3LCAxMjUsIDI1MSwgMTM4LCA4NywgMjE5LCA3LCAyLCAyNTEsIDQsIDkxLCAyMTksIDYsIDIxOSwgNywgCi0gICAgMiwgMTIzLCAyMTksIDMxLCAyMTIsIDM1LCAyMTksIDcsIDIsIDEzNCwgMjE5LCAzMSwgMjEyLCAzNCwgMjUyLCAxMTUsIAotICAgIDI0NSwgMTcyLCAyMjUsIDI3LCAyMzMsIDQyLCAyMzEsIDIxMSwgMjQyLCAxODQsIDIyMiwgMjQ3LCAyMzEsIDIxMSwgMjQyLCAKLSAgICAxODQsIDIzMiwgMTUyLCAyLCAyMzUsIDIyNSwgMjI1LCAxOTksIDI1MCwgMCwgMjMyLCAxNTIsIDIsIDIzNCwgMTM4LCAyMzQsIAotICAgIDEzOCwgMjMyLCAxNTEsIDIwNCwgMjMyLCAxNTEsIDI1MiwgNDQsIDI1MiwgNDUsIDIsIDI1MSwgNCwgOTEsIDI1MSwgMTkwLCAKLSAgICAyMzIsIDIwNCwgODcsIDIyMywgMTc0LCAyNTEsIDg2LCAyNTIsIDE4NSwgMiwgMTQwLCA4MCwgNDgsIDI0NSwgMTQzLCAyLCAKLSAgICAxNDAsIDgwLCA0OCwgMjI2LCAxOTcsIDIsIDI0NSwgMzEsIDE2NCwgMiwgNDMsIDQ0LCA4MCwgNDgsIDIxOSwgMzksIDIsIAotICAgIDk3LCA4MCwgNDgsIDIxNiwgMTQsIDIsIDIxNCwgMTUzLCA4MCwgNDgsIDIyOCwgNzUsIDEyMywgMjE0LCAxODQsIDI0NSwgCi0gICAgMTkxLCA4NywgMjM0LCAxMzYsIDIxNiwgMjQ3LCAyMzUsIDIxOSwgMTYsIDMxLCA3LCA2LCAyMzMsIDksIDIzNSwgMjE5LCAKLSAgICAxNiwgMzEsIDcsIDQsIDIzMywgOSwgMjM1LCAyMTksIDE2LCAzMSwgMjI3LCAxOTksIDIzNSwgMjE5LCAxNiwgMzEsIDIxNywgCi0gICAgMTgzLCAyMzUsIDIxOSwgMTYsIDMxLCA3LCAyMzMsIDksIDI0NCwgOTYsIDI0NSwgMTcyLCAyMTYsIDksIDIxMSwgMTk5LCAKLSAgICAyNDIsIDIxLCAyMjcsIDE4MiwgMjIsIDI1MSwgMTk3LCAyNDEsIDY2LCAyMjUsIDUwLCAyMzAsIDIyNiwgMjE2LCAyNTUsIAotICAgIDI0OSwgMTE0LCAyNTIsIDE1OSwgMjE5LCAxMjUsIDIyNSwgOSwgMjE4LCAxNTcsIDIsIDIzMCwgMjI0LCAyNDcsIDEyMCwgCi0gICAgMjM1LCAxMzEsIDE2LCAzMSwgMjUyLCA1NywgMjE1LCAyMjAsIDI0NSwgMTU2LCA4NSwgNDIsIDI1MSwgODYsIDcxLCA0MiwgCi0gICAgMjUxLCA4NiwgMjMzLCA4NSwgMjIzLCAxMTEsIDI1MCwgMzUsIDIzMywgODUsIDI1MSwgMjA4LCAyNTAsIDM1LCAyMzMsIDg1LCAKLSAgICAyMjYsIDE1NywgMjQ3LCAyNDgsIDIzMywgODUsIDI1MSwgMjA4LCAyNDcsIDI0OCwgNCwgMjI2LCAxNTcsIDI0NywgMjQ4LCAKLSAgICA0LCAyNTEsIDIwOCwgMjQ3LCAyNDgsIDIxNCwgMTYyLCAyMjMsIDExMSwgMjE1LCAyMjUsIDI0NiwgMTA1LCAyMjMsIDExMSwgCi0gICAgMjE1LCAyMjUsIDIxNCwgMTYyLCA0LCAyMjMsIDExMSwgMjE1LCAyMjUsIDI0NiwgMTA1LCA0LCAyMjMsIDExMSwgMjE1LCAKLSAgICAyMjUsIDM3LCAyNDksIDEzMSwgMjI0LCAyNTIsIDI0OSwgMTMxLCAyMjQsIDI1MywgMiwgMjQyLCAyNiwgNTEsIDI0OSwgCi0gICAgMTMxLCAyMjQsIDI1MiwgMjI4LCA0OSwgNDMsIDIyMCwgMTUzLCAyLCAxMzQsIDI0NywgMTE4LCAyNTAsIDQsIDI0NCwgMTkxLCAKLSAgICAxMjMsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAxMTMsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAxMzQsIAotICAgIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDQsIDExLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCA4MSwgCi0gICAgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxOSwgMTI1LCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjIwLCAKLSAgICAxMjIsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDUsIDE5MywgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIAotICAgIDIyOCwgMjAwLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE2LCAyNDgsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgCi0gICAgMTkxLCAyNDUsIDE2OCwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNSwgNzcsIDIyNiwgMjQyLCAyNTAsIDQsIAotICAgIDI0NCwgMTkxLCAyMjYsIDE5MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE1LCA1NiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE2LCAKLSAgICAxNDAsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NCwgNywgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCA3OSwgMjUwLCA0LCAyNDQsIAotICAgIDE5MSwgMjE5LCAxMjEsIDI1MCwgNCwgMjQ0LCAxOTEsIDIyMCwgMTIxLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDUsIDE5MiwgCi0gICAgMjUwLCA0LCAyNDQsIDE5MSwgMjI4LCAxOTksIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNiwgMjQ2LCAyNTAsIDQsIDI0NCwgMTkxLCAKLSAgICAyNDUsIDE2NiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE1LCA3NSwgMjMwLCAxMTcsIDI0MywgMjMwLCAyMTYsIDM2LCAyMTYsIDIsIAotICAgIDIxOCwgMTQ4LCA2NCwgMjMyLCAyMzksIDIxOSwgMTcwLCA2NCwgMjM1LCAxMzIsIDIzMCwgMTA2LCAyNDIsIDEyNCwgMjQ0LCAKLSAgICAxOTAsIDI0MiwgMTI0LCAyNDQsIDE5MSwgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjQ0LCAxOTEsIDIsIDIxNywgMTQsIDY0LCAKLSAgICAyMzUsIDUzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgCi0gICAgMjMwLCAxMTEsIDIyLCAyMTksIDc0LCAyNDUsIDEzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMSwgMjIsIAotICAgIDI0OSwgMjMwLCAyMTcsIDI0NywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTEsIDIyLCAyMTYsIDEwNCwgCi0gICAgMjQ1LCAxMywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDI0MiwgMjUsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyNDAsIDI0NywgCi0gICAgMjExLCAyMzMsIDI0NCwgMTkwLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjQ0LCAxOTEsIAotICAgIDIyMSwgMjE3LCAyNDgsIDYyLCAyNDQsIDMzLCAyMjMsIDg4LCAyNDQsIDE5MCwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDI0MSwgCi0gICAgMjI2LCAyNDUsIDEzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjE4LCAzNCwgMjE5LCA3MywgMjQ0LCAxOTAsIDIyOSwgODcsIAotICAgIDI0NCwgMTkwLCAyNDUsIDIzLCAyNDQsIDE5MCwgMjE0LCAxODgsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMiwgMjQ5LCAyMzAsIAotICAgIDIxNywgMjQ3LCAyMjUsIDE5MiwgMjQ0LCAxOTAsIDI0OSwgMjAxLCAyNDQsIDE5MCwgMjQ5LCAyMDIsIDI0NCwgMTkwLCAKLSAgICAyMzQsIDYyLCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIxNiwgMTM3LCAxMTUsIDIzNCwgNjMsIDIzNCwgNjIsIDI0NCwgMTkxLCAKLSAgICAyLCAyMTksIDc0LCAyNDUsIDEzLCAyMzQsIDYyLCAyNDQsIDE5MSwgMiwgMjUwLCAwLCAyNDUsIDEzLCAyNDQsIDE5MSwgMiwgCi0gICAgMjE4LCA4OCwgMjE2LCAxOSwgMjQ0LCAxOTEsIDIsIDIxOCwgODgsIDIxNiwgMjAsIDIyLCAyMTEsIDIzMywgMjQ1LCAxNSwgCi0gICAgMjQ0LCAxOTEsIDIsIDIxOCwgODgsIDIxNiwgMjAsIDIyLCAyMTYsIDEwNCwgMjQ1LCAxMywgMjQ3LCAxOTIsIDI0NCwgMTkwLCAKLSAgICAyMTEsIDIwNCwgMjQ0LCAxOTAsIDI1NCwgMTA4LCAyNDQsIDE5MCwgMjI0LCAyMjcsIDI0NCwgMTkwLCAyNDksIDExNiwgCi0gICAgMjQ0LCAxOTAsIDIyNSwgMTcwLCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIsIDIzMiwgMTI2LCA2NCwgMjE1LCAyMDQsIDI0NywgCi0gICAgMTkyLCAyNTEsIDg4LCAyMjMsIDg4LCAyNDQsIDE5MCwgMjQzLCAyMzksIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTEwLCAKLSAgICAyNTQsIDEwNiwgMjQ0LCAxOTAsIDI0NCwgMTUyLCAyNDQsIDE5MCwgMjEyLCAyMCwgMjQ0LCAxOTAsIDIxOSwgOTEsIDI0NCwgCi0gICAgMTkwLCAyMTYsIDcxLCAyNDQsIDE5MCwgMjQyLCAxMjUsIDI0NCwgMTkwLCAyMzIsIDExNCwgMjQ5LCAxMTYsIDI0NCwgMTkwLCAKLSAgICAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjQwLCAyMDMsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIAotICAgIDExMSwgMjIsIDI0OSwgMjMwLCAyMTcsIDI0NywgMjQ0LCAxOTEsIDIyMSwgMTkwLCAyMzYsIDAsIDI0NCwgMTUzLCAyNTMsIAotICAgIDIxMywgMjQ0LCAxOTAsIDI0NCwgNDksIDI0NCwgMTkwLCAyMTksIDkyLCAyNDQsIDE5MCwgMjQ3LCAxNjUsIDI0NCwgMTkwLCAKLSAgICAyNDQsIDE5MSwgMjExLCAyMzAsIDIzMCwgMTEwLCAyNDQsIDE5MSwgMiwgMjMxLCA4NCwgMjMxLCAxNDQsIDI0MiwgMTI0LCAKLSAgICAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDIxOSwgNzQsIDI0NSwgMTMsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjE3LCAxNCwgCi0gICAgNjQsIDIzNSwgNTMsIDIxOSwgNzQsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjE5LCA3NCwgMjUwLCAKLSAgICAyMjUsIDI0NCwgMTkxLCAyLCAyNDEsIDIyNiwgMjQ1LCAxMywgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyMTEsIDE5NiwgCi0gICAgMjE5LCA3NSwgMjM0LCA2MiwgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyNTAsIDAsIDI0NSwgMTMsIDIyNCwgMjI3LCAyNTAsIAotICAgIDIyNSwgMjQ0LCAxOTAsIDI0OSwgMTE2LCAyNTAsIDIyNSwgMjQ0LCAxOTAsIDIxMiwgMjAsIDI1MCwgMjI1LCAyNDQsIDE5MCwgCi0gICAgMjQ0LCAxOTEsIDIsIDIyOCwgNzUsIDI0MiwgMTYzLCAyNDMsIDM0LCAyNDQsIDE5MSwgMiwgMjI2LCAyMTUsIDI0MywgMzQsIAotICAgIDIyNSwgMTY4LCAyNTEsIDE2OCwgMjQ4LCA3NSwgMjIxLCAxNjksIDIzMCwgMTQ1LCAyNDEsIDIyOSwgMjMwLCAxNDUsIDIxOSwgCi0gICAgOCwgMjMwLCAxNDUsIDI0MiwgNSwgMjI1LCAxNjgsIDIyMywgMTU2LCAxMjMsIDI0MiwgMTUsIDIyNSwgMTY4LCAyMjMsIAotICAgIDE1NiwgMjUxLCAxNzgsIDI0MiwgMTEsIDIzNiwgMCwgMjUwLCAxNzksIDIyNSwgMTY4LCAyNDMsIDIzOCwgMjI1LCAxNjgsIAotICAgIDIsIDIyNCwgMjI3LCAyNDQsIDE5MCwgMjI1LCAxNjgsIDIsIDI0NCwgNDEsIDI0MiwgMTAsIDIyMiwgMjAzLCAyNDEsIDIxNCwgCi0gICAgMjE4LCAxNDMsIDIzMiwgMTQ5LCAyMjMsIDE2MiwgMjUwLCAyNDQsIDI0MSwgMTYyLCAyMTUsIDI0OCwgMjQxLCAxNjIsIAotICAgIDIxNSwgMjQ5LCAyLCAyNTEsIDExNCwgMjI4LCA1MywgMjE1LCAyNDgsIDIzMSwgMzIsIDE5MiwgMjIzLCAxNjMsIDIxOCwgCi0gICAgMTQ5LCAyMTUsIDI0NiwgMjE1LCAyNDcsIDI1MCwgMjQ0LCAyNTEsIDkyLCAyMjYsIDE5NCwgMjUxLCA5MiwgMjE1LCAyMDEsIAotICAgIDI1MSwgOTMsIDIxOCwgMTI5LCAyMzAsIDE4NywgMjU0LCAxMzAsIDI0NCwgOTcsIDI0NSwgMTM3LCAyMjQsIDI1NSwgMjUwLCAKLSAgICAyNDQsIDIyNiwgMTk0LCAyMjQsIDI1NSwgMjUwLCAyNDQsIDIxNywgMzIsIDIyNiwgMTk0LCAyMTcsIDMyLCAyNTMsIDE4MCwgCi0gICAgMjI2LCAxOTQsIDI1MywgMTgwLCAyMjMsIDExOCwgMjEzLCAyNDcsIDI0OCwgNTgsIDIxNSwgMTkyLCAyNTMsIDI0MiwgMjMyLCAKLSAgICAxMTcsIDIxNSwgMjU0LCAyMzAsIDEzOSwgMjMwLCAxMTYsIDIyMywgMTYxLCAyMTgsIDYsIDIyMywgMTYxLCAyMzAsIDExNiwgCi0gICAgMjUxLCAyOCwgMjU0LCAyMjksIDIxNSwgMjQ1LCAyMjAsIDE2LCAyMjIsIDE4MiwgMjE5LCAxLCAyMDMsIDIxNSwgMjUyLCAKLSAgICAyMzIsIDIzMCwgNjcsIDIxNSwgMjUyLCAyMzIsIDIzMCwgMjQ5LCAxOTAsIDUwLCAyMjQsIDI1NSwgMjUwLCAyMjksIDIyMywgCi0gICAgNDQsIDIzMiwgMjMwLCAyMTUsIDIyMiwgMjQ0LCA3NCwgMjI2LCAxOTcsIDIyNCwgMjM4LCAyNDcsIDEyMywgMjI4LCA3NSwgCi0gICAgMjQ1LCAxMjUsIDUwLCAyMTksIDcyLCA4NywgMjI4LCA3NSwgMjE5LCA3MiwgODcsIDIyNCwgMTIyLCAyMzIsIDE5MywgMjM2LCAKLSAgICAwLCAyMzUsIDE1NywgMjI1LCA0MSwgODcsIDI0NywgMTQ2LCAyMjgsIDUyLCAyMzIsIDE5MywgODcsIDIyNCwgMjMyLCAyMTIsIAotICAgIDQxLCA4NywgMjI4LCA2NiwgMjEyLCA0MSwgODcsIDI1MiwgMiwgMjI4LCA3NSwgMjUyLCAxLCAyNTIsIDAsIDIzMCwgMTE2LCAKLSAgICAyNTIsIDAsIDIyNSwgMjEzLCAyMjgsIDc1LCAyMjUsIDIxMiwgMjUwLCAxMDAsIDI0OSwgMTI0LCAyMzEsIDU2LCA4NywgCi0gICAgMjExLCAyMTgsIDg3LCAyMjMsIDU5LCAyNTIsIDE4NywgODcsIDIxNiwgMzcsIDIxMiwgNDEsIDI0OSwgMjUzLCAyMTksIAotICAgIDIzNCwgMjUyLCAxMTgsIDI1MiwgMTE2LCAyMjUsIDI0MiwgMjQ5LCAxNzcsIDI0OSwgODYsIDI1MiwgMTY5LCAyNTAsIDIyLCAKLSAgICA0MywgMjMyLCA5MCwgMTA4LCAxNiwgMzEsIDIyNCwgMywgMTA4LCAxNiwgMzEsIDI1NCwgMTkyLCAxMDgsIDE2LCAzMSwgCi0gICAgMjQ0LCA5NiwgMTA4LCAxNiwgMzEsIDI0NSwgMjIzLCAxMDgsIDE2LCAzMSwgMjEyLCA0MCwgMTA4LCAxNiwgMzEsIDI1NCwgCi0gICAgNDMsIDEwOCwgMTYsIDMxLCAyNTQsIDQ0LCAyMjMsIDEwNSwgMTA4LCAxNiwgMzEsIDI1NCwgNDQsIDIyMywgMTA0LCAxMDgsIAotICAgIDE2LCAzMSwgMjU0LCA0NCwgMjEzLCAxNDMsIDEwOCwgMTYsIDMxLCAyNTQsIDQ0LCAyMTMsIDE0MiwgMTA4LCAxNiwgMzEsIAorICAgIDEzOSwgNCwgNjEsIDExLCAxMzksIDQsIDI1MywgMTY2LCAxMSwgMTM5LCA0LCAyNTEsIDc0LCAxMSwgMTM5LCA0LCAyNDksIAorICAgIDY4LCAxMSwgMTM5LCA0LCA3NiwgMTEsIDEzOSwgNCwgMjQ1LCAxNCwgMTEsIDEzOSwgNCwgMjQzLCAyMDksIDExLCAxMzksIAorICAgIDQsIDI0MiwgNjcsIDExLCAxMzksIDQsIDc0LCAxMSwgMTM5LCA0LCAyMzUsIDE1MCwgMTEsIDEzOSwgNCwgMjM1LCAyOSwgCisgICAgMTEsIDEzOSwgNCwgMTU2LCAxMSwgMTM5LCA0LCAxOTQsIDExLCAxMzksIDQsIDIzMCwgMzAsIDExLCAxMzksIDQsIDc4LCAKKyAgICAxMSwgMTM5LCA0LCAyMjYsIDEwOSwgMTEsIDEzOSwgNCwgMjI0LCA5OSwgMTEsIDEzOSwgNCwgMTUzLCAxMSwgMTM5LCA0LCAKKyAgICAyMjIsIDkzLCAxMSwgMTM5LCA0LCAyMTcsIDE1MywgMTEsIDEzOSwgNCwgNjksIDExLCAxMzksIDQsIDIxNCwgMTA1LCAxMSwgCisgICAgMTM5LCA0LCAyMTIsIDk4LCAxMSwgMTM5LCA0LCAyMTEsIDE3OCwgMTEsIDEzOSwgNCwgMjExLCAxMTcsIDExLCAxMzksIDQsIAorICAgIDIxMCwgMTU5LCAxMSwgMjMsIDEzMywgNiwgNjEsIDExLCAyMywgMTMzLCA2LCAyNTMsIDE2NiwgMTEsIDIzLCAxMzMsIDYsIAorICAgIDI1MSwgNzQsIDExLCAyMywgMTMzLCA2LCAyNDksIDY4LCAxMSwgMjMsIDEzMywgNiwgNzYsIDExLCAyMywgMTMzLCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMjMsIDEzMywgNiwgMjQzLCAyMDksIDExLCAyMywgMTMzLCA2LCAyNDIsIDY3LCAxMSwgMjMsIDEzMywgCisgICAgNiwgNzQsIDExLCAyMywgMTMzLCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAxMzMsIDYsIDIzNSwgMjksIDExLCAyMywgMTMzLCA2LCAKKyAgICAxNTYsIDExLCAyMywgMTMzLCA2LCAxOTQsIDExLCAyMywgMTMzLCA2LCAyMzAsIDMwLCAxMSwgMjMsIDEzMywgNiwgNzgsIAorICAgIDExLCAyMywgMTMzLCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAxMzMsIDYsIDIyNCwgOTksIDExLCAyMywgMTMzLCA2LCAxNTMsIAorICAgIDExLCAyMywgMTMzLCA2LCAyMjIsIDkzLCAxMSwgMjMsIDEzMywgNiwgMjE3LCAxNTMsIDExLCAyMywgMTMzLCA2LCA2OSwgCisgICAgMTEsIDIzLCAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDEzMywgNiwgMjEyLCA5OCwgMTEsIDIzLCAxMzMsIDYsIDIxMSwgCisgICAgMTc4LCAxMSwgMjMsIDEzMywgNiwgMjExLCAxMTcsIDExLCAyMywgMTMzLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDYxLCAxMSwgMjMsIDEzMywgNCwgMjUzLCAxNjYsIDExLCAyMywgMTMzLCA0LCAyNTEsIDc0LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjQ5LCA2OCwgMTEsIDIzLCAxMzMsIDQsIDc2LCAxMSwgMjMsIDEzMywgNCwgMjQ1LCAxNCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDI0MywgMjA5LCAxMSwgMjMsIDEzMywgNCwgMjQyLCA2NywgMTEsIDIzLCAxMzMsIDQsIDc0LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjM1LCAxNTAsIDExLCAyMywgMTMzLCA0LCAyMzUsIDI5LCAxMSwgMjMsIDEzMywgNCwgMTU2LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMTk0LCAxMSwgMjMsIDEzMywgNCwgMjMwLCAzMCwgMTEsIDIzLCAxMzMsIDQsIDc4LCAxMSwgMjMsIDEzMywgNCwgMjI2LCAKKyAgICAxMDksIDExLCAyMywgMTMzLCA0LCAyMjQsIDk5LCAxMSwgMjMsIDEzMywgNCwgMTUzLCAxMSwgMjMsIDEzMywgNCwgMjIyLCAKKyAgICA5MywgMTEsIDIzLCAxMzMsIDQsIDIxNywgMTUzLCAxMSwgMjMsIDEzMywgNCwgNjksIDExLCAyMywgMTMzLCA0LCAyMTQsIAorICAgIDEwNSwgMTEsIDIzLCAxMzMsIDQsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDIxMSwgMTE3LCAxMSwgMjMsIDEzMywgNCwgMjEwLCAxNTksIDExLCAzNSwgNiwgNjEsIDExLCAzNSwgNiwgMjUzLCAxNjYsIAorICAgIDExLCAzNSwgNiwgMjUxLCA3NCwgMTEsIDM1LCA2LCAyNDksIDY4LCAxMSwgMzUsIDYsIDc2LCAxMSwgMzUsIDYsIDI0NSwgCisgICAgMTQsIDExLCAzNSwgNiwgMjQzLCAyMDksIDExLCAzNSwgNiwgMjQyLCA2NywgMTEsIDM1LCA2LCA3NCwgMTEsIDM1LCA2LCAKKyAgICAyMzUsIDE1MCwgMTEsIDM1LCA2LCAyMzUsIDI5LCAxMSwgMzUsIDYsIDE1NiwgMTEsIDM1LCA2LCAxOTQsIDExLCAzNSwgNiwgCisgICAgMjMwLCAzMCwgMTEsIDM1LCA2LCA3OCwgMTEsIDM1LCA2LCAyMjYsIDEwOSwgMTEsIDM1LCA2LCAyMjQsIDk5LCAxMSwgMzUsIAorICAgIDYsIDE1MywgMTEsIDM1LCA2LCAyMjIsIDkzLCAxMSwgMzUsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDYsIDY5LCAxMSwgMzUsIAorICAgIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDYsIDIxMiwgOTgsIDExLCAzNSwgNiwgMjExLCAxNzgsIDExLCAzNSwgNiwgMjExLCAKKyAgICAxMTcsIDExLCAzNSwgNiwgMjEwLCAxNTksIDExLCAzNSwgNCwgNjEsIDExLCAzNSwgNCwgMjUzLCAxNjYsIDExLCAzNSwgNCwgCisgICAgMjUxLCA3NCwgMTEsIDM1LCA0LCAyNDksIDY4LCAxMSwgMzUsIDQsIDc2LCAxMSwgMzUsIDQsIDI0NSwgMTQsIDExLCAzNSwgCisgICAgNCwgMjQzLCAyMDksIDExLCAzNSwgNCwgMjQyLCA2NywgMTEsIDM1LCA0LCA3NCwgMTEsIDM1LCA0LCAyMzUsIDE1MCwgMTEsIAorICAgIDM1LCA0LCAyMzUsIDI5LCAxMSwgMzUsIDQsIDE1NiwgMTEsIDM1LCA0LCAxOTQsIDExLCAzNSwgNCwgMjMwLCAzMCwgMTEsIAorICAgIDM1LCA0LCA3OCwgMTEsIDM1LCA0LCAyMjYsIDEwOSwgMTEsIDM1LCA0LCAyMjQsIDk5LCAxMSwgMzUsIDQsIDE1MywgMTEsIAorICAgIDM1LCA0LCAyMjIsIDkzLCAxMSwgMzUsIDQsIDIxNywgMTUzLCAxMSwgMzUsIDQsIDY5LCAxMSwgMzUsIDQsIDIxNCwgMTA1LCAKKyAgICAxMSwgMzUsIDQsIDIxMiwgOTgsIDExLCAzNSwgNCwgMjExLCAxNzgsIDExLCAzNSwgNCwgMjExLCAxMTcsIDExLCAzNSwgNCwgCisgICAgMjEwLCAxNTksIDExLCAzNSwgMjMsIDYsIDYxLCAxMSwgMzUsIDIzLCA2LCAyNTMsIDE2NiwgMTEsIDM1LCAyMywgNiwgMjUxLCAKKyAgICA3NCwgMTEsIDM1LCAyMywgNiwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgNiwgNzYsIDExLCAzNSwgMjMsIDYsIDI0NSwgMTQsIAorICAgIDExLCAzNSwgMjMsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCA2LCAyNDIsIDY3LCAxMSwgMzUsIDIzLCA2LCA3NCwgMTEsIAorICAgIDM1LCAyMywgNiwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDYsIDIzNSwgMjksIDExLCAzNSwgMjMsIDYsIDE1NiwgMTEsIDM1LCAKKyAgICAyMywgNiwgMTk0LCAxMSwgMzUsIDIzLCA2LCAyMzAsIDMwLCAxMSwgMzUsIDIzLCA2LCA3OCwgMTEsIDM1LCAyMywgNiwgCisgICAgMjI2LCAxMDksIDExLCAzNSwgMjMsIDYsIDIyNCwgOTksIDExLCAzNSwgMjMsIDYsIDE1MywgMTEsIDM1LCAyMywgNiwgMjIyLCAKKyAgICA5MywgMTEsIDM1LCAyMywgNiwgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDYsIDY5LCAxMSwgMzUsIDIzLCA2LCAyMTQsIDEwNSwgCisgICAgMTEsIDM1LCAyMywgNiwgMjEyLCA5OCwgMTEsIDM1LCAyMywgNiwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTE3LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgNCwgNjEsIDExLCAzNSwgMjMsIDQsIDI1MywgMTY2LCAxMSwgCisgICAgMzUsIDIzLCA0LCAyNTEsIDc0LCAxMSwgMzUsIDIzLCA0LCAyNDksIDY4LCAxMSwgMzUsIDIzLCA0LCA3NiwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjQ1LCAxNCwgMTEsIDM1LCAyMywgNCwgMjQzLCAyMDksIDExLCAzNSwgMjMsIDQsIDI0MiwgNjcsIDExLCAzNSwgCisgICAgMjMsIDQsIDc0LCAxMSwgMzUsIDIzLCA0LCAyMzUsIDE1MCwgMTEsIDM1LCAyMywgNCwgMjM1LCAyOSwgMTEsIDM1LCAyMywgCisgICAgNCwgMTU2LCAxMSwgMzUsIDIzLCA0LCAxOTQsIDExLCAzNSwgMjMsIDQsIDIzMCwgMzAsIDExLCAzNSwgMjMsIDQsIDc4LCAKKyAgICAxMSwgMzUsIDIzLCA0LCAyMjYsIDEwOSwgMTEsIDM1LCAyMywgNCwgMjI0LCA5OSwgMTEsIDM1LCAyMywgNCwgMTUzLCAxMSwgCisgICAgMzUsIDIzLCA0LCAyMjIsIDkzLCAxMSwgMzUsIDIzLCA0LCAyMTcsIDE1MywgMTEsIDM1LCAyMywgNCwgNjksIDExLCAzNSwgCisgICAgMjMsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCA2LCA2MSwgMTEsIDM1LCAzMiwgCisgICAgNiwgMjUzLCAxNjYsIDExLCAzNSwgMzIsIDYsIDI1MSwgNzQsIDExLCAzNSwgMzIsIDYsIDI0OSwgNjgsIDExLCAzNSwgMzIsIAorICAgIDYsIDc2LCAxMSwgMzUsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMzUsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIDM1LCAzMiwgNiwgCisgICAgMjQyLCA2NywgMTEsIDM1LCAzMiwgNiwgNzQsIDExLCAzNSwgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMzUsIDMyLCA2LCAyMzUsIAorICAgIDI5LCAxMSwgMzUsIDMyLCA2LCAxNTYsIDExLCAzNSwgMzIsIDYsIDE5NCwgMTEsIDM1LCAzMiwgNiwgMjMwLCAzMCwgMTEsIAorICAgIDM1LCAzMiwgNiwgNzgsIDExLCAzNSwgMzIsIDYsIDIyNiwgMTA5LCAxMSwgMzUsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMzUsIAorICAgIDMyLCA2LCAxNTMsIDExLCAzNSwgMzIsIDYsIDIyMiwgOTMsIDExLCAzNSwgMzIsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDMyLCAKKyAgICA2LCA2OSwgMTEsIDM1LCAzMiwgNiwgMjE0LCAxMDUsIDExLCAzNSwgMzIsIDYsIDIxMiwgOTgsIDExLCAzNSwgMzIsIDYsIAorICAgIDIxMSwgMTc4LCAxMSwgMzUsIDMyLCA2LCAyMTEsIDExNywgMTEsIDM1LCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMzIsIAorICAgIDQsIDYxLCAxMSwgMzUsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDM1LCAzMiwgNCwgMjUxLCA3NCwgMTEsIDM1LCAzMiwgNCwgCisgICAgMjQ5LCA2OCwgMTEsIDM1LCAzMiwgNCwgNzYsIDExLCAzNSwgMzIsIDQsIDI0NSwgMTQsIDExLCAzNSwgMzIsIDQsIDI0MywgCisgICAgMjA5LCAxMSwgMzUsIDMyLCA0LCAyNDIsIDY3LCAxMSwgMzUsIDMyLCA0LCA3NCwgMTEsIDM1LCAzMiwgNCwgMjM1LCAxNTAsIAorICAgIDExLCAzNSwgMzIsIDQsIDIzNSwgMjksIDExLCAzNSwgMzIsIDQsIDE1NiwgMTEsIDM1LCAzMiwgNCwgMTk0LCAxMSwgMzUsIAorICAgIDMyLCA0LCAyMzAsIDMwLCAxMSwgMzUsIDMyLCA0LCA3OCwgMTEsIDM1LCAzMiwgNCwgMjI2LCAxMDksIDExLCAzNSwgMzIsIAorICAgIDQsIDIyNCwgOTksIDExLCAzNSwgMzIsIDQsIDE1MywgMTEsIDM1LCAzMiwgNCwgMjIyLCA5MywgMTEsIDM1LCAzMiwgNCwgCisgICAgMjE3LCAxNTMsIDExLCAzNSwgMzIsIDQsIDY5LCAxMSwgMzUsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNCwgMjEyLCAKKyAgICA5OCwgMTEsIDM1LCAzMiwgNCwgMjExLCAxNzgsIDExLCAzNSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA0LCAyMTAsIAorICAgIDE1OSwgMTEsIDM1LCAyMywgMzIsIDYsIDYxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUzLCAxNjYsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyNTEsIDc0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgMzIsIDYsIDc2LCAxMSwgMzUsIAorICAgIDIzLCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQyLCAKKyAgICA2NywgMTEsIDM1LCAyMywgMzIsIDYsIDc0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMzUsIDI5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTU2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTk0LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNiwgMjMwLCAzMCwgMTEsIDM1LCAyMywgMzIsIDYsIDc4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAxMDksIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIyLCAKKyAgICA5MywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNiwgNjksIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICA2MSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MywgMTY2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUxLCA3NCwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDMyLCA0LCA3NiwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgMTQsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA0LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0MiwgNjcsIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICA3NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAyOSwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDE1NiwgMTEsIDM1LCAyMywgMzIsIDQsIDE5NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMCwgMzAsIDExLCAzNSwgCisgICAgMjMsIDMyLCA0LCA3OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI0LCA5OSwgCisgICAgMTEsIDM1LCAyMywgMzIsIDQsIDE1MywgMTEsIDM1LCAyMywgMzIsIDQsIDIyMiwgOTMsIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICAyMTcsIDE1MywgMTEsIDM1LCAyMywgMzIsIDQsIDY5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDExNywgCisgICAgMTEsIDM1LCAyMywgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMjMwLCAxNDMsIDYsIDYxLCAxMSwgMjMwLCAxNDMsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMwLCAxNDMsIDYsIDI1MSwgNzQsIDExLCAyMzAsIDE0MywgNiwgMjQ5LCA2OCwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICA3NiwgMTEsIDIzMCwgMTQzLCA2LCAyNDUsIDE0LCAxMSwgMjMwLCAxNDMsIDYsIDI0MywgMjA5LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDI0MiwgNjcsIDExLCAyMzAsIDE0MywgNiwgNzQsIDExLCAyMzAsIDE0MywgNiwgMjM1LCAxNTAsIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjM1LCAyOSwgMTEsIDIzMCwgMTQzLCA2LCAxNTYsIDExLCAyMzAsIDE0MywgNiwgMTk0LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDIzMCwgMzAsIDExLCAyMzAsIDE0MywgNiwgNzgsIDExLCAyMzAsIDE0MywgNiwgMjI2LCAxMDksIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjI0LCA5OSwgMTEsIDIzMCwgMTQzLCA2LCAxNTMsIDExLCAyMzAsIDE0MywgNiwgMjIyLCA5MywgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyMTcsIDE1MywgMTEsIDIzMCwgMTQzLCA2LCA2OSwgMTEsIDIzMCwgMTQzLCA2LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTQzLCAKKyAgICA2LCAyMTIsIDk4LCAxMSwgMjMwLCAxNDMsIDYsIDIxMSwgMTc4LCAxMSwgMjMwLCAxNDMsIDYsIDIxMSwgMTE3LCAxMSwgCisgICAgMjMwLCAxNDMsIDYsIDIxMCwgMTU5LCAxMSwgMjMwLCAxNDMsIDQsIDYxLCAxMSwgMjMwLCAxNDMsIDQsIDI1MywgMTY2LCAKKyAgICAxMSwgMjMwLCAxNDMsIDQsIDI1MSwgNzQsIDExLCAyMzAsIDE0MywgNCwgMjQ5LCA2OCwgMTEsIDIzMCwgMTQzLCA0LCA3NiwgCisgICAgMTEsIDIzMCwgMTQzLCA0LCAyNDUsIDE0LCAxMSwgMjMwLCAxNDMsIDQsIDI0MywgMjA5LCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDI0MiwgNjcsIDExLCAyMzAsIDE0MywgNCwgNzQsIDExLCAyMzAsIDE0MywgNCwgMjM1LCAxNTAsIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjM1LCAyOSwgMTEsIDIzMCwgMTQzLCA0LCAxNTYsIDExLCAyMzAsIDE0MywgNCwgMTk0LCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDIzMCwgMzAsIDExLCAyMzAsIDE0MywgNCwgNzgsIDExLCAyMzAsIDE0MywgNCwgMjI2LCAxMDksIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjI0LCA5OSwgMTEsIDIzMCwgMTQzLCA0LCAxNTMsIDExLCAyMzAsIDE0MywgNCwgMjIyLCA5MywgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyMTcsIDE1MywgMTEsIDIzMCwgMTQzLCA0LCA2OSwgMTEsIDIzMCwgMTQzLCA0LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTQzLCAKKyAgICA0LCAyMTIsIDk4LCAxMSwgMjMwLCAxNDMsIDQsIDIxMSwgMTc4LCAxMSwgMjMwLCAxNDMsIDQsIDIxMSwgMTE3LCAxMSwgCisgICAgMjMwLCAxNDMsIDQsIDIxMCwgMTU5LCAxMSwgMzIsIDQsIDI0NywgMTI3LCA3NCwgMTEsIDMyLCA0LCAyNDcsIDEyNywgMjM1LCAKKyAgICAxNTAsIDExLCAyMywgNiwgMjU0LCAxNTEsIDExLCAyMywgNiwgMjUyLCAzNCwgMTEsIDIzLCA2LCAyNDMsIDExNCwgMTEsIAorICAgIDIzLCA2LCAyNDgsIDYyLCAxMSwgMjMsIDYsIDI0NSwgMTA4LCAxMSwgMjMsIDYsIDIxMCwgODUsIDExLCAyMywgNiwgMjQ1LCAKKyAgICA3MSwgMTEsIDIzLCA2LCAyMTYsIDE4MCwgMTEsIDIzLCA2LCAyMzUsIDE5MiwgMTEsIDIzLCA2LCAyMzQsIDIyOCwgMTEsIAorICAgIDIzLCA2LCAyMzMsIDEwNCwgMTEsIDIzLCA2LCAyMzAsIDEwNywgMTEsIDIzLCA2LCAyMjcsIDI0MiwgMTEsIDIzLCA2LCAKKyAgICAyMTEsIDE1NywgMTEsIDIzLCA2LCAyMjYsIDIwMywgMTEsIDIzLCA2LCAyMjUsIDExMSwgMTEsIDIzLCA2LCAyMjMsIDQwLCAKKyAgICAxMSwgMjMsIDYsIDIxNiwgMTgxLCA4NywgMTEsIDIzLCA2LCAyMTksIDE3OSwgMTEsIDIzLCA2LCAyMTcsIDQyLCAxMSwgMjMsIAorICAgIDYsIDIxNCwgMTU3LCAxMSwgMjMsIDYsIDIyNSwgMTM2LCAxMSwgMjMsIDYsIDI1MCwgMTE4LCAxMSwgMjMsIDYsIDIyNCwgCisgICAgMTY0LCAxMSwgMjMsIDYsIDIyNiwgMjA1LCAxMSwgMjMsIDIyOSwgMjI2LCAxMSwgMjMsIDQsIDI1NCwgMTUxLCAxMSwgMjMsIAorICAgIDQsIDI1MiwgMzQsIDExLCAyMywgNCwgMjQzLCAxMTQsIDExLCAyMywgNCwgMjQ4LCA2MiwgMTEsIDIzLCA0LCAyNDUsIDEwOCwgCisgICAgMTEsIDIzLCA0LCAyMTAsIDg1LCAxMSwgMjMsIDQsIDI0NSwgNzEsIDExLCAyMywgNCwgMjE2LCAxODAsIDExLCAyMywgNCwgCisgICAgMjM1LCAxOTIsIDExLCAyMywgNCwgMjM0LCAyMjgsIDExLCAyMywgNCwgMjMzLCAxMDQsIDExLCAyMywgNCwgMjMwLCAxMDcsIAorICAgIDExLCAyMywgNCwgMjI3LCAyNDIsIDExLCAyMywgNCwgMjExLCAxNTcsIDExLCAyMywgNCwgMjI2LCAyMDMsIDExLCAyMywgNCwgCisgICAgMjI1LCAxMTEsIDExLCAyMywgNCwgMjIzLCA0MCwgMTEsIDIzLCA0LCA0MCwgMjE5LCAxNzksIDExLCAyMywgNCwgMjE5LCAKKyAgICAxNzksIDExLCAyMywgNCwgMjE3LCA0MiwgMTEsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDIzLCA0LCAyMjUsIDEzNiwgMTEsIAorICAgIDIzLCA0LCAyNTAsIDExOCwgMTEsIDIzLCA0LCAyMjQsIDE2NCwgMTEsIDIzLCA0LCAyMjYsIDIwNSwgMTEsIDIzLCAyMjYsIAorICAgIDEsIDI0NywgMjQxLCAxMSwgMjMsIDI0NSwgMTA5LCA4NywgMTEsIDIzLCAyMTYsIDE4MSwgODcsIDExLCAyMywgMjM0LCAKKyAgICAyMjksIDg3LCAxMSwgMjMsIDIyNSwgMTM3LCA4NywgMTEsIDIzLCAyMjMsIDQxLCA4NywgMTEsIDIzLCAyMjUsIDExMiwgODcsIAorICAgIDExLCAzMiwgNiwgMjU0LCAxNTEsIDExLCAzMiwgNiwgMjUyLCAzNCwgMTEsIDMyLCA2LCAyNDMsIDExNCwgMTEsIDMyLCA2LCAKKyAgICAyNDgsIDYyLCAxMSwgMzIsIDYsIDI0NSwgMTA4LCAxMSwgMzIsIDYsIDIxMCwgODUsIDExLCAzMiwgNiwgMjQ1LCA3MSwgMTEsIAorICAgIDMyLCA2LCAyMTYsIDE4MCwgMTEsIDMyLCA2LCAyMzUsIDE5MiwgMTEsIDMyLCA2LCAyMzQsIDIyOCwgMTEsIDMyLCA2LCAKKyAgICAyMzMsIDEwNCwgMTEsIDMyLCA2LCAyMzAsIDEwNywgMTEsIDMyLCA2LCAyMjcsIDI0MiwgMTEsIDMyLCA2LCAyMTEsIDE1NywgCisgICAgMTEsIDMyLCA2LCAyMjYsIDIwMywgMTEsIDMyLCA2LCAyMjUsIDExMSwgMTEsIDMyLCA2LCAyMjMsIDQwLCAxMSwgMzIsIDYsIAorICAgIDIxNiwgMTgxLCA4NywgMTEsIDMyLCA2LCAyMTksIDE3OSwgMTEsIDMyLCA2LCAyMTcsIDQyLCAxMSwgMzIsIDYsIDIxNCwgCisgICAgMTU3LCAxMSwgMzIsIDYsIDIyNSwgMTM2LCAxMSwgMzIsIDYsIDI1MCwgMTE4LCAxMSwgMzIsIDYsIDIyNCwgMTY0LCAxMSwgCisgICAgMzIsIDYsIDIyNiwgMjA1LCAxMSwgMzIsIDIyOSwgMjI2LCAxMSwgMzIsIDQsIDI1NCwgMTUxLCAxMSwgMzIsIDQsIDI1MiwgCisgICAgMzQsIDExLCAzMiwgNCwgMjQzLCAxMTQsIDExLCAzMiwgNCwgMjQ4LCA2MiwgMTEsIDMyLCA0LCAyNDUsIDEwOCwgMTEsIDMyLCAKKyAgICA0LCAyMTAsIDg1LCAxMSwgMzIsIDQsIDI0NSwgNzEsIDExLCAzMiwgNCwgMjE2LCAxODAsIDExLCAzMiwgNCwgMjM1LCAxOTIsIAorICAgIDExLCAzMiwgNCwgMjM0LCAyMjgsIDExLCAzMiwgNCwgMjMzLCAxMDQsIDExLCAzMiwgNCwgMjMwLCAxMDcsIDExLCAzMiwgNCwgCisgICAgMjI3LCAyNDIsIDExLCAzMiwgNCwgMjExLCAxNTcsIDExLCAzMiwgNCwgMjI2LCAyMDMsIDExLCAzMiwgNCwgMjI1LCAxMTEsIAorICAgIDExLCAzMiwgNCwgMjIzLCA0MCwgMTEsIDMyLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzMiwgNCwgMjE5LCAxNzksIDExLCAzMiwgCisgICAgNCwgMjE3LCA0MiwgMTEsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDMyLCA0LCAyMjUsIDEzNiwgMTEsIDMyLCA0LCAyNTAsIAorICAgIDExOCwgMTEsIDMyLCA0LCAyMjQsIDE2NCwgMTEsIDMyLCA0LCAyMjYsIDIwNSwgMTEsIDMyLCAyMjYsIDEsIDI0NywgMjQxLCAKKyAgICAxMSwgMzIsIDI0NSwgMTA5LCA4NywgMTEsIDMyLCAyMTYsIDE4MSwgODcsIDExLCAzMiwgMjM0LCAyMjksIDg3LCAxMSwgMzIsIAorICAgIDIyNSwgMTM3LCA4NywgMTEsIDMyLCAyMjMsIDQxLCA4NywgMTEsIDMyLCAyMjUsIDExMiwgODcsIDExLCAyMywgMzIsIDYsIAorICAgIDI1NCwgMTUxLCAxMSwgMjMsIDMyLCA2LCAyNTIsIDM0LCAxMSwgMjMsIDMyLCA2LCAyNDMsIDExNCwgMTEsIDIzLCAzMiwgNiwgCisgICAgMjQ4LCA2MiwgMTEsIDIzLCAzMiwgNiwgMjQ1LCAxMDgsIDExLCAyMywgMzIsIDYsIDIxMCwgODUsIDExLCAyMywgMzIsIDYsIAorICAgIDI0NSwgNzEsIDExLCAyMywgMzIsIDYsIDIxNiwgMTgwLCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE5MiwgMTEsIDIzLCAzMiwgNiwgCisgICAgMjM0LCAyMjgsIDExLCAyMywgMzIsIDYsIDIzMywgMTA0LCAxMSwgMjMsIDMyLCA2LCAyMzAsIDEwNywgMTEsIDIzLCAzMiwgCisgICAgNiwgMjI3LCAyNDIsIDExLCAyMywgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDIwMywgMTEsIDIzLCAKKyAgICAzMiwgNiwgMjI1LCAxMTEsIDExLCAyMywgMzIsIDYsIDIyMywgNDAsIDExLCAyMywgMzIsIDYsIDIxNiwgMTgxLCA4NywgMTEsIAorICAgIDIzLCAzMiwgNiwgMjE5LCAxNzksIDExLCAyMywgMzIsIDYsIDIxNywgNDIsIDExLCAyMywgMzIsIDYsIDIxNCwgMTU3LCAxMSwgCisgICAgMjMsIDMyLCA2LCAyMjUsIDEzNiwgMTEsIDIzLCAzMiwgNiwgMjUwLCAxMTgsIDExLCAyMywgMzIsIDYsIDIyNCwgMTY0LCAKKyAgICAxMSwgMjMsIDMyLCA2LCAyMjYsIDIwNSwgMTEsIDIzLCAzMiwgMjI5LCAyMjYsIDExLCAyMywgMzIsIDQsIDI1NCwgMTUxLCAKKyAgICAxMSwgMjMsIDMyLCA0LCAyNTIsIDM0LCAxMSwgMjMsIDMyLCA0LCAyNDMsIDExNCwgMTEsIDIzLCAzMiwgNCwgMjQ4LCA2MiwgCisgICAgMTEsIDIzLCAzMiwgNCwgMjQ1LCAxMDgsIDExLCAyMywgMzIsIDQsIDIxMCwgODUsIDExLCAyMywgMzIsIDQsIDI0NSwgNzEsIAorICAgIDExLCAyMywgMzIsIDQsIDIxNiwgMTgwLCAxMSwgMjMsIDMyLCA0LCAyMzUsIDE5MiwgMTEsIDIzLCAzMiwgNCwgMjM0LCAKKyAgICAyMjgsIDExLCAyMywgMzIsIDQsIDIzMywgMTA0LCAxMSwgMjMsIDMyLCA0LCAyMzAsIDEwNywgMTEsIDIzLCAzMiwgNCwgCisgICAgMjI3LCAyNDIsIDExLCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDIwMywgMTEsIDIzLCAzMiwgCisgICAgNCwgMjI1LCAxMTEsIDExLCAyMywgMzIsIDQsIDIyMywgNDAsIDExLCAyMywgMzIsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjE5LCAxNzksIDExLCAyMywgMzIsIDQsIDIxNywgNDIsIDExLCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIAorICAgIDMyLCA0LCAyMjUsIDEzNiwgMTEsIDIzLCAzMiwgNCwgMjUwLCAxMTgsIDExLCAyMywgMzIsIDQsIDIyNCwgMTY0LCAxMSwgCisgICAgMjMsIDMyLCA0LCAyMjYsIDIwNSwgMTEsIDIzLCAzMiwgMjI2LCAxLCAyNDcsIDI0MSwgMTEsIDIzLCAzMiwgMjQ1LCAxMDksIAorICAgIDg3LCAxMSwgMjMsIDMyLCAyMTYsIDE4MSwgODcsIDExLCAyMywgMzIsIDIzNCwgMjI5LCA4NywgMTEsIDIzLCAzMiwgMjI1LCAKKyAgICAxMzcsIDg3LCAxMSwgMjMsIDMyLCAyMjMsIDQxLCA4NywgMTEsIDIzLCAzMiwgMjI1LCAxMTIsIDg3LCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyNTQsIDE1MSwgMTEsIDM1LCAyMywgNiwgMjUyLCAzNCwgMTEsIDM1LCAyMywgNiwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIAorICAgIDYsIDI0OCwgNjIsIDExLCAzNSwgMjMsIDYsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCA2LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyNDUsIDcxLCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE4MCwgMTEsIDM1LCAyMywgNiwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIAorICAgIDYsIDIzNCwgMjI4LCAxMSwgMzUsIDIzLCA2LCAyMzMsIDEwNCwgMTEsIDM1LCAyMywgNiwgMjMwLCAxMDcsIDExLCAzNSwgCisgICAgMjMsIDYsIDIyNywgMjQyLCAxMSwgMzUsIDIzLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNiwgMjI2LCAyMDMsIDExLCAKKyAgICAzNSwgMjMsIDYsIDIyNSwgMTExLCAxMSwgMzUsIDIzLCA2LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE4MSwgODcsIAorICAgIDExLCAzNSwgMjMsIDYsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCA2LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCA2LCAyMTQsIDE1NywgCisgICAgMTEsIDM1LCAyMywgNiwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIDYsIDI1MCwgMTE4LCAxMSwgMzUsIDIzLCA2LCAyMjQsIAorICAgIDE2NCwgMTEsIDM1LCAyMywgNiwgMjI2LCAyMDUsIDExLCAzNSwgMjMsIDIyOSwgMjI2LCAxMSwgMzUsIDIzLCA0LCAyNTQsIAorICAgIDE1MSwgMTEsIDM1LCAyMywgNCwgMjUyLCAzNCwgMTEsIDM1LCAyMywgNCwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIDQsIDI0OCwgCisgICAgNjIsIDExLCAzNSwgMjMsIDQsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCA0LCAyNDUsIAorICAgIDcxLCAxMSwgMzUsIDIzLCA0LCAyMTYsIDE4MCwgMTEsIDM1LCAyMywgNCwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIDQsIDIzNCwgCisgICAgMjI4LCAxMSwgMzUsIDIzLCA0LCAyMzMsIDEwNCwgMTEsIDM1LCAyMywgNCwgMjMwLCAxMDcsIDExLCAzNSwgMjMsIDQsIAorICAgIDIyNywgMjQyLCAxMSwgMzUsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNCwgMjI2LCAyMDMsIDExLCAzNSwgMjMsIAorICAgIDQsIDIyNSwgMTExLCAxMSwgMzUsIDIzLCA0LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzNSwgCisgICAgMjMsIDQsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCA0LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAKKyAgICAyMywgNCwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIDQsIDI1MCwgMTE4LCAxMSwgMzUsIDIzLCA0LCAyMjQsIDE2NCwgMTEsIAorICAgIDM1LCAyMywgNCwgMjI2LCAyMDUsIDExLCAzNSwgMjMsIDIyNiwgMSwgMjQ3LCAyNDEsIDExLCAzNSwgMjMsIDI0NSwgMTA5LCAKKyAgICA4NywgMTEsIDM1LCAyMywgMjE2LCAxODEsIDg3LCAxMSwgMzUsIDIzLCAyMzQsIDIyOSwgODcsIDExLCAzNSwgMjMsIDIyNSwgCisgICAgMTM3LCA4NywgMTEsIDM1LCAyMywgMjIzLCA0MSwgODcsIDExLCAzNSwgMjMsIDIyNSwgMTEyLCA4NywgMTEsIDM1LCAyMywgCisgICAgMzIsIDYsIDI1NCwgMTUxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUyLCAzNCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MywgMTE0LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ4LCA2MiwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgNzEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM0LCAyMjgsIDExLCAzNSwgMjMsIDMyLCA2LCAKKyAgICAyMzMsIDEwNCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzMCwgMTA3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI3LCAyNDIsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMjAzLCAxMSwgMzUsIDIzLCAzMiwgNiwgCisgICAgMjI1LCAxMTEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE2LCAxODEsIDg3LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDMyLCA2LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjE0LCAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjUsIDEzNiwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MCwgMTE4LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjI0LCAxNjQsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDIwNSwgMTEsIDM1LCAyMywgMzIsIAorICAgIDIyOSwgMjI2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjU0LCAxNTEsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTIsIDM0LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNCwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDgsIDYyLCAxMSwgMzUsIDIzLCAzMiwgNCwgCisgICAgMjQ1LCAxMDgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCA3MSwgMTEsIDM1LCAKKyAgICAyMywgMzIsIDQsIDIxNiwgMTgwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzQsIAorICAgIDIyOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMywgMTA0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAxMDcsIDExLCAzNSwgCisgICAgMjMsIDMyLCA0LCAyMjcsIDI0MiwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAKKyAgICAyMDMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDExMSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyMywgNDAsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDMyLCA0LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNywgCisgICAgNDIsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgMjUwLCAxMTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDE2NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgCisgICAgMjA1LCAxMSwgMzUsIDIzLCAzMiwgMjI2LCAxLCAyNDcsIDI0MSwgMTEsIDM1LCAyMywgMzIsIDI0NSwgMTA5LCA4NywgMTEsIAorICAgIDM1LCAyMywgMzIsIDIxNiwgMTgxLCA4NywgMTEsIDM1LCAyMywgMzIsIDIzNCwgMjI5LCA4NywgMTEsIDM1LCAyMywgMzIsIAorICAgIDIyNSwgMTM3LCA4NywgMTEsIDM1LCAyMywgMzIsIDIyMywgNDEsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjI1LCAxMTIsIDg3LCAKKyAgICAxMSwgMjMsIDYsIDI0NywgMjM1LCAxMSwgMjMsIDQsIDI0NywgMjM1LCAxMSwgMjMsIDIxLCAyMTAsIDg2LCAxMSwgMjMsIAorICAgIDIxLCAxMTEsIDExLCAyMywgMjEsIDEwNSwgMTEsIDIzLCAyMSwgMTU4LCAxMSwgMjMsIDIxLCAxNjEsIDExLCAyMywgMjEsIAorICAgIDE5MCwgMTEsIDIzLCAyMSwgMTk1LCAxMSwgMjMsIDIxLCAxOTksIDExLCAyMywgMjEsIDE5NiwgMTEsIDIzLCAyMSwgMjAxLCAKKyAgICAxMSwgMTM5LCAyMSwgMjEwLCA4NiwgMTEsIDEzOSwgMjEsIDExMSwgMTEsIDEzOSwgMjEsIDEwNSwgMTEsIDEzOSwgMjEsIAorICAgIDE1OCwgMTEsIDEzOSwgMjEsIDE2MSwgMTEsIDEzOSwgMjEsIDE5MCwgMTEsIDEzOSwgMjEsIDE5NSwgMTEsIDEzOSwgMjEsIAorICAgIDE5OSwgMTEsIDEzOSwgMjEsIDE5NiwgMTEsIDEzOSwgMjEsIDIwMSwgMTEsIDM1LCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMSwgCisgICAgMTExLCAxMSwgMzUsIDIxLCAxMDUsIDExLCAzNSwgMjEsIDE1OCwgMTEsIDM1LCAyMSwgMTYxLCAxMSwgMzUsIDIxLCAxOTAsIAorICAgIDExLCAzNSwgMjEsIDE5NSwgMTEsIDM1LCAyMSwgMTk5LCAxMSwgMzUsIDIxLCAxOTYsIDExLCAzNSwgMjEsIDIwMSwgMTEsIAorICAgIDM1LCAyMywgMjEsIDIxMCwgODYsIDExLCAzNSwgMjMsIDIxLCAxMTEsIDExLCAzNSwgMjMsIDIxLCAxMDUsIDExLCAzNSwgCisgICAgMjMsIDIxLCAxNTgsIDExLCAzNSwgMjMsIDIxLCAxNjEsIDExLCAzNSwgMjMsIDIxLCAxOTAsIDExLCAzNSwgMjMsIDIxLCAKKyAgICAxOTUsIDExLCAzNSwgMjMsIDIxLCAxOTksIDExLCAzNSwgMjMsIDIxLCAxOTYsIDExLCAzNSwgMjMsIDIxLCAyMDEsIDExLCAKKyAgICAyMzAsIDE0MywgMjEsIDIxMCwgODYsIDExLCAyMzAsIDE0MywgMjEsIDExMSwgMTEsIDIzMCwgMTQzLCAyMSwgMTA1LCAxMSwgCisgICAgMjMwLCAxNDMsIDIxLCAxNTgsIDExLCAyMzAsIDE0MywgMjEsIDE2MSwgMTEsIDIzMCwgMTQzLCAyMSwgMTkwLCAxMSwgMjMwLCAKKyAgICAxNDMsIDIxLCAxOTUsIDExLCAyMzAsIDE0MywgMjEsIDE5OSwgMTEsIDIzMCwgMTQzLCAyMSwgMTk2LCAxMSwgMjMwLCAxNDMsIAorICAgIDIxLCAyMDEsIDksIDExLCAyNTQsIDE3OSwgOSwgMTEsIDI1MiwgNjIsIDksIDExLCAyMzUsIDEyOSwgOSwgMTEsIDI0OCwgCisgICAgMjAzLCA5LCAxMSwgMjEyLCAzMCwgOSwgMTEsIDIxMCwgMTA4LCA5LCAxMSwgMjQyLCA0NCwgOSwgMTEsIDIxNywgODEsIDksIAorICAgIDExLCAyMTEsIDQzLCA5LCAxMSwgMjM1LCAwLCA5LCAxMSwgMjMzLCAxMDgsIDksIDExLCAyMzEsIDgzLCA5LCAxMSwgMjI4LCAKKyAgICA2NywgOSwgMTEsIDIyMSwgMTY4LCA5LCAxMSwgMjU0LCAyMDUsIDksIDExLCAyNDQsIDE1MCwgOSwgMTEsIDIyMiwgMjgsIDksIAorICAgIDExLCAyMjQsIDg0LCA5LCAxMSwgMjIzLCA5OCwgOSwgMTEsIDIyMCwgNjEsIDksIDExLCAyMTcsIDgsIDksIDExLCAyMTYsIAorICAgIDE5MywgOSwgMTEsIDIzNCwgMTM1LCA5LCAxMSwgMjE2LCAyMDMsIDksIDExLCAyNDgsIDIyNCwgOSwgMTEsIDIxMCwgMTExLCAKKyAgICA5LCAxMSwgMjQyLCAyNTEsIDksIDExLCAyNDcsIDEyNywgMjUyLCA2MiwgOSwgMTEsIDI0NywgMTI3LCAyMjgsIDY3LCA5LCAKKyAgICAxMSwgMjQ3LCAxMjcsIDI0NCwgMTUwLCA5LCAxMSwgMjQ3LCAxMjcsIDIyNCwgODQsIDksIDExLCA2NSwgMjUyLCA2MiwgOSwgCisgICAgMTEsIDY1LCAyMzUsIDEyOSwgOSwgMTEsIDY1LCAyNDEsIDIyNSwgOSwgMTEsIDY1LCAyNDIsIDQ0LCA5LCAxMSwgNjUsIAorICAgIDIxMSwgNDMsIDksIDExLCA2NSwgMjM1LCAwLCA5LCAxMSwgNjUsIDIzMywgMTA4LCA5LCAxMSwgNjUsIDIzMSwgODMsIDksIAorICAgIDExLCA2NSwgMjI4LCA2NywgOSwgMTEsIDY1LCAyMjEsIDE2OCwgOSwgMTEsIDY1LCAyNTQsIDIwNSwgOSwgMTEsIDY1LCAKKyAgICAyNDQsIDE1MCwgOSwgMTEsIDY1LCAyMjIsIDI4LCA5LCAxMSwgNjUsIDIyNCwgODQsIDksIDExLCA2NSwgMjIwLCA2MSwgOSwgCisgICAgMTEsIDY1LCAyMTcsIDgsIDksIDExLCA2NSwgMjE2LCAxOTMsIDksIDExLCA2NSwgMjM0LCAxMzUsIDksIDExLCA2NSwgMjQ4LCAKKyAgICAyMjQsIDksIDExLCA2NSwgMjQyLCAyNTEsIDksIDExLCAyMTcsIDc3LCAyMzUsIDEyOSwgOSwgMTEsIDIxNywgNzcsIDI0MiwgCisgICAgNDQsIDksIDExLCAyMTcsIDc3LCAyMTEsIDQzLCA5LCAxMSwgMjE3LCA3NywgMjMzLCAxMDgsIDksIDExLCAyMTcsIDc3LCAKKyAgICAyMjgsIDY3LCA5LCAxMSwgMjE3LCA3NywgMjIxLCAxNjgsIDksIDExLCAyMTcsIDc3LCAyNTQsIDIwNSwgOSwgMTEsIDIxNywgCisgICAgNzcsIDIyMiwgMjgsIDksIDExLCAyMTcsIDc3LCAyMjQsIDg0LCA5LCAxMSwgMjE3LCA3NywgMjIwLCA2MSwgOSwgMTEsIAorICAgIDIxNywgNzcsIDIzNCwgMTM1LCA5LCAxMSwgMjE3LCA3NywgMjQ4LCAyMjQsIDksIDExLCAyMTcsIDc3LCAyNDIsIDI1MSwgOSwgCisgICAgMTEsIDIxNywgNzcsIDI0NywgMTI3LCAyMjgsIDY3LCA5LCAxMSwgMjE3LCA3NywgMjQ3LCAxMjcsIDIyNCwgODQsIDksIDExLCAKKyAgICAyMTgsIDExMiwgMjUyLCA2MiwgOSwgMTEsIDIxOCwgMTEyLCAyMzUsIDEyOSwgOSwgMTEsIDIxOCwgMTEyLCAyNDEsIDIyNSwgCisgICAgOSwgMTEsIDIxOCwgMTEyLCAyNDIsIDQ0LCA5LCAxMSwgMjE4LCAxMTIsIDIxNywgODEsIDksIDExLCAyMTgsIDExMiwgMjExLCAKKyAgICA0MywgOSwgMTEsIDIxOCwgMTEyLCAyMzUsIDAsIDksIDExLCAyMTgsIDExMiwgMjMxLCA4MywgOSwgMTEsIDIxOCwgMTEyLCAKKyAgICAyMjgsIDY3LCA5LCAxMSwgMjE4LCAxMTIsIDIyMSwgMTY4LCA5LCAxMSwgMjE4LCAxMTIsIDI1NCwgMjA1LCA5LCAxMSwgCisgICAgMjE4LCAxMTIsIDI0NCwgMTUwLCA5LCAxMSwgMjE4LCAxMTIsIDIyMiwgMjgsIDksIDExLCAyMTgsIDExMiwgMjI0LCA4NCwgCisgICAgOSwgMTEsIDIxOCwgMTEyLCAyMjAsIDYxLCA5LCAxMSwgMjE4LCAxMTIsIDIxNywgOCwgOSwgMTEsIDIxOCwgMTEyLCAyMTYsIAorICAgIDE5MywgOSwgMTEsIDIxOCwgMTEyLCAyMzQsIDEzNSwgOSwgMTEsIDIxOCwgMTEyLCAyNDgsIDIyNCwgOSwgMTEsIDIxOCwgCisgICAgMTEyLCAyMTAsIDExMSwgOSwgMTEsIDIxOCwgMTEyLCAyNDIsIDI1MSwgOSwgMTEsIDIxOCwgMTEyLCAyNDcsIDEyNywgMjUyLCAKKyAgICA2MiwgOSwgMTEsIDIxOCwgMTEyLCAyNDcsIDEyNywgMjQ0LCAxNTAsIDksIDExLCAyMzIsIDEyOCwgMjU0LCAxNzksIDksIAorICAgIDExLCAyMzIsIDEyOCwgMjUyLCA2MiwgOSwgMTEsIDIzMiwgMTI4LCAyMzUsIDEyOSwgOSwgMTEsIDIzMiwgMTI4LCAyNDgsIAorICAgIDIwMywgOSwgMTEsIDIzMiwgMTI4LCAyNDEsIDIyNSwgOSwgMTEsIDIzMiwgMTI4LCAyMTIsIDMwLCA5LCAxMSwgMjMyLCAKKyAgICAxMjgsIDIxMCwgMTA4LCA5LCAxMSwgMjMyLCAxMjgsIDI0MiwgNDQsIDksIDExLCAyMzIsIDEyOCwgMjE3LCA4MSwgOSwgMTEsIAorICAgIDIzMiwgMTI4LCAyMTEsIDQzLCA5LCAxMSwgMjMyLCAxMjgsIDIzMywgMTA4LCA5LCAxMSwgMjMyLCAxMjgsIDIzMSwgODMsIAorICAgIDksIDExLCAyMzIsIDEyOCwgMjI4LCA2NywgOSwgMTEsIDIzMiwgMTI4LCAyMjEsIDE2OCwgOSwgMTEsIDIzMiwgMTI4LCAKKyAgICAyNTQsIDIwNSwgOSwgMTEsIDIzMiwgMTI4LCAyNDQsIDE1MCwgOSwgMTEsIDIzMiwgMTI4LCAyMjIsIDI4LCA5LCAxMSwgCisgICAgMjMyLCAxMjgsIDIyNCwgODQsIDksIDExLCAyMzIsIDEyOCwgMjIzLCA5OCwgOSwgMTEsIDIzMiwgMTI4LCAyMjAsIDYxLCA5LCAKKyAgICAxMSwgMjMyLCAxMjgsIDIxNywgOCwgOSwgMTEsIDIzMiwgMTI4LCAyMTYsIDE5MywgOSwgMTEsIDIzMiwgMTI4LCAyMzQsIAorICAgIDEzNSwgOSwgMTEsIDIzMiwgMTI4LCAyMTYsIDIwMywgOSwgMTEsIDIzMiwgMTI4LCAyNDgsIDIyNCwgOSwgMTEsIDIzMiwgCisgICAgMTI4LCAyMTAsIDExMSwgOSwgMTEsIDIzMiwgMTI4LCAyNDIsIDI1MSwgOSwgMTEsIDEzOSwgMjUyLCA2MiwgOSwgMTEsIAorICAgIDEzOSwgMjM1LCAxMjksIDksIDExLCAxMzksIDI0OCwgMjAzLCA5LCAxMSwgMTM5LCAyMTIsIDMwLCA5LCAxMSwgMTM5LCAKKyAgICAyMTAsIDEwOCwgOSwgMTEsIDEzOSwgMjQyLCA0NCwgOSwgMTEsIDEzOSwgMjE3LCA4MSwgOSwgMTEsIDEzOSwgMjExLCA0MywgCisgICAgOSwgMTEsIDEzOSwgMjMzLCAxMDgsIDksIDExLCAxMzksIDIzMSwgODMsIDksIDExLCAxMzksIDIyOCwgNjcsIDksIDExLCAKKyAgICAxMzksIDIyMSwgMTY4LCA5LCAxMSwgMTM5LCAyNTQsIDIwNSwgOSwgMTEsIDEzOSwgMjQ0LCAxNTAsIDksIDExLCAxMzksIAorICAgIDIyMiwgMjgsIDksIDExLCAxMzksIDIyNCwgODQsIDksIDExLCAxMzksIDIyMywgOTgsIDksIDExLCAxMzksIDIyMCwgNjEsIAorICAgIDksIDExLCAxMzksIDIxNywgOCwgOSwgMTEsIDEzOSwgMjE2LCAxOTMsIDksIDExLCAxMzksIDIzNCwgMTM1LCA5LCAxMSwgCisgICAgMTM5LCAyMTYsIDIwMywgOSwgMTEsIDEzOSwgMjQ4LCAyMjQsIDksIDExLCAxMzksIDIxMCwgMTExLCA5LCAxMSwgMTM5LCAKKyAgICAyNDIsIDI1MSwgOSwgMTEsIDIyNiwgMTcyLCA2NiwgMiwgMTIyLCAyLCAyMTcsIDQ0LCA5LCAxMSwgMjI2LCAxNzIsIDEyMiwgCisgICAgMiwgMjQ4LCAyMDMsIDIzMSwgMjEwLCA4NiwgMjQ1LCAyMjgsIDIxMSwgMjM5LCAyMzEsIDIxMCwgODYsIDIxOSwgMzAsIAorICAgIDIxMSwgMjM5LCAyMzEsIDIxMCwgODYsIDIxMiwgOSwgMjExLCAyMzksIDIzMSwgMjEwLCA4NiwgMjI4LCA2MSwgMjExLCAKKyAgICAyMzksIDIzMSwgMjEwLCA4NiwgMjIzLCAxMTQsIDI0NiwgMTA0LCAyMzEsIDIxMCwgODYsIDI0MiwgMTM0LCAyNDYsIDEwNCwgCisgICAgMjMxLCAyMTAsIDg2LCA3MSwgMjQ2LCAxMDQsIDIzMSwgMjEwLCA4NiwgMTIzLCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCAKKyAgICA4NiwgMTEzLCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgMTM0LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgCisgICAgMjQ0LCAxOSwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDI0NCwgODksIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAKKyAgICAyMTksIDEyNywgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDIyMCwgMTI0LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCAKKyAgICA4NiwgMjQ1LCAyMDEsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAyMjgsIDIwNSwgNjQsIDI1MCwgMTQ5LCAyMzEsIAorICAgIDIxMCwgODYsIDEyMywgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDExMywgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgCisgICAgODYsIDEzNCwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDI0NCwgMTksIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDQsIDg5LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMjE5LCAxMjcsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIAorICAgIDg2LCAyMjAsIDEyNCwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDI0NSwgMjAxLCA2NCwgMjUyLCAxNjEsIDIzMSwgCisgICAgMjEwLCA4NiwgMjI4LCAyMDUsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAxMjMsIDY0LCAyNTAsIDQyLCAyMzEsIAorICAgIDIxMCwgODYsIDExMywgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMTM0LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDQsIDE5LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAyNDQsIDg5LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyMTksIDEyNywgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMjIwLCAxMjQsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIAorICAgIDI0NSwgMjAxLCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAyMjgsIDIwNSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjI1LCAyOCwgMjMxLCAyMTAsIDg2LCAyMjYsIDE2MCwgMjMxLCAyMTAsIDg2LCAyNTIsIDE2MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNTAsIDc4LCAyMzEsIDIxMCwgODYsIDIxOCwgMjQxLCAyMzEsIDIxMCwgODYsIDIxOCwgNDAsIDIzMSwgMjEwLCA4NiwgCisgICAgMjUzLCAxODcsIDIzMSwgMjEwLCA4NiwgMjExLCAyMzIsIDIzMSwgMjEwLCA4NiwgMjM1LCA2OCwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNTIsIDE5MiwgMTMxLCA4NiwgMjAzLCAyNTIsIDE5MiwgMTMxLCA4NiwgMjQxLCA1MCwgMTMxLCA4NiwgMjQxLCA0OSwgCisgICAgMTMxLCA4NiwgMjQxLCA0OCwgMTMxLCA4NiwgMjQxLCA0NywgMTMxLCA4NiwgMjQxLCA0NiwgMTMxLCA4NiwgMjQxLCA0NSwgCisgICAgMTMxLCA4NiwgMjQxLCA0NCwgMTMxLCA4NiwgMjQxLCA0MywgMTMxLCA4NiwgMjQxLCA0MiwgMTMxLCA4NiwgMjQxLCA0MSwgCisgICAgMTMxLCA4NiwgMjQxLCA0MCwgMTMxLCA4NiwgMjQxLCAzOSwgMTMxLCA4NiwgMjQxLCAzOCwgMTMxLCA4NiwgMjQxLCAzNywgCisgICAgMTMxLCA4NiwgMjQxLCAzNiwgMTMxLCA4NiwgMjQxLCAzNSwgMTMxLCA4NiwgMjQxLCAzNCwgMTMxLCA4NiwgMjQxLCAzMywgCisgICAgMTMxLCA4NiwgMjQxLCAzMiwgMTMxLCA4NiwgMjQxLCAzMSwgMTMxLCA4NiwgMjQxLCAzMCwgMTMxLCA4NiwgMjQxLCAyOSwgCisgICAgMTMxLCA4NiwgMjQxLCAyOCwgMTMxLCA4NiwgMjQxLCAyNywgMTMxLCA4NiwgMjQxLCAyNiwgMTMxLCA4NiwgMjQxLCAyNSwgCisgICAgMTMxLCA4NiwgMjQxLCAyNCwgMTMxLCA4NiwgMjQxLCAyMywgMTMxLCA4NiwgMjQxLCAyMiwgMTMxLCA4NiwgMjQxLCAyMSwgCisgICAgMTMxLCA4NiwgMjQxLCAyMCwgMTMxLCA4NiwgMjQxLCAxOSwgMTMxLCA4NiwgMjQxLCAxOCwgMTMxLCA4NiwgMjQxLCAxNywgCisgICAgMTMxLCA4NiwgMjQxLCAxNiwgMTMxLCA4NiwgMjQxLCAxNSwgMTMxLCA4NiwgMjQxLCAxNCwgMTMxLCA4NiwgMjQxLCAxMywgCisgICAgMTMxLCA4NiwgMjQxLCAxMiwgMTMxLCA4NiwgMjQxLCAxMSwgMTMxLCA4NiwgMjQxLCAxMCwgMTMxLCA4NiwgMjQxLCA5LCAKKyAgICAxMzEsIDg2LCAyNDEsIDgsIDEzMSwgODYsIDI0MSwgNywgMTMxLCA4NiwgMjQxLCA2LCAxMzEsIDg2LCAyNDEsIDUsIDEzMSwgCisgICAgODYsIDI0MSwgNCwgMTMxLCA4NiwgMjQxLCAzLCAxMzEsIDg2LCAyNDEsIDIsIDEzMSwgODYsIDY3LCAyNTIsIDE5MiwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMzgsIDEzMSwgODYsIDIxMywgMjM3LCAxMzEsIDg2LCAyMTMsIDIzNiwgMTMxLCA4NiwgMjEzLCAyMzUsIAorICAgIDEzMSwgODYsIDIxMywgMjM0LCAxMzEsIDg2LCAyMTMsIDIzMywgMTMxLCA4NiwgMjEzLCAyMzIsIDEzMSwgODYsIDIxMywgCisgICAgMjMxLCAxMzEsIDg2LCAyMTMsIDIzMCwgMTMxLCA4NiwgMjEzLCAyMjksIDEzMSwgODYsIDIxMywgMjI4LCAxMzEsIDg2LCAKKyAgICAyMTMsIDIyNywgMTMxLCA4NiwgMjEzLCAyMjYsIDEzMSwgODYsIDIxMywgMjI1LCAxMzEsIDg2LCAyMTMsIDIyNCwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMjMsIDEzMSwgODYsIDIxMywgMjIyLCAxMzEsIDg2LCAyMTMsIDIyMSwgMTMxLCA4NiwgMjEzLCAyMjAsIAorICAgIDEzMSwgODYsIDIxMywgMjE5LCAxMzEsIDg2LCAyMTMsIDIxOCwgMTMxLCA4NiwgMjEzLCAyMTcsIDEzMSwgODYsIDIxMywgCisgICAgMjE2LCAxMzEsIDg2LCAyMTMsIDIxNSwgMTMxLCA4NiwgMjEzLCAyMTQsIDEzMSwgODYsIDIxMywgMjEzLCAxMzEsIDg2LCAKKyAgICAyMTMsIDIxMiwgMTMxLCA4NiwgMjEzLCAyMTEsIDEzMSwgODYsIDIxMywgMjEwLCAxMzEsIDg2LCAyMTMsIDIwOSwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMDgsIDEzMSwgODYsIDIxMywgMjA3LCAxMzEsIDg2LCAyMTMsIDIwNiwgMTMxLCA4NiwgMjEzLCAyMDUsIAorICAgIDEzMSwgODYsIDIxMywgMjA0LCAxMzEsIDg2LCAyMTMsIDIwMywgMTMxLCA4NiwgMjEzLCAyMDIsIDEzMSwgODYsIDIxMywgCisgICAgMjAxLCAxMzEsIDg2LCAyMTMsIDIwMCwgMTMxLCA4NiwgMjEzLCAxOTksIDEzMSwgODYsIDIxMywgMTk4LCAxMzEsIDg2LCAKKyAgICAyMTMsIDE5NywgMTMxLCA4NiwgMjEzLCAxOTYsIDEzMSwgODYsIDIxMywgMTk1LCAxMzEsIDg2LCAyMTMsIDE5NCwgMTMxLCAKKyAgICA4NiwgMjEzLCAxOTMsIDEzMSwgODYsIDIxMywgMTkyLCAxMzEsIDg2LCAyMTMsIDE5MSwgMTMxLCA4NiwgMjEzLCAxOTAsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTIsIDE5MiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyMTksIDE3LCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMTEzLCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDIxOSwgMTcsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDE5LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgODksIDY0LCAKKyAgICAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgCisgICAgMjIwLCAxMjQsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjI4LCAyMDUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAyNDksIDY0LCAyMTksIAorICAgIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCAzNywgCisgICAgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIAorICAgIDIzNCwgODUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjU1LCAxOCwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMTEzLCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAxMzQsIDY0LCAyNDEsIDIzMiwgMjI1LCAKKyAgICAzNiwgMjUwLCAyNTEsIDI0NCwgMTksIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgODksIDY0LCAyNDEsIAorICAgIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxOSwgMTI3LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjAsIAorICAgIDEyNCwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDIyOCwgMjA1LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTYsIDI0OSwgNjQsIDI0MSwgCisgICAgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNCwgCisgICAgMzcsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyNCwgMTgsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAKKyAgICAyNTEsIDIzNCwgODUsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyNDcsIDI1NSwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDExMywgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDE5LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIAorICAgIDg5LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjIwLCAxMjQsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjgsIDIwNSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAKKyAgICAyNDksIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAyMzQsIDM3LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIDg1LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCA4NSwgCisgICAgMjM1LCA2OCwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIAorICAgIDExMywgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyNDQsIDE5LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDg5LCA2NCwgMjQ5LCAyNTAsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjIwLCAxMjQsIAorICAgIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyMjgsIDIwNSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAyNDksIDY0LCAyNDksIDI1MCwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIDM3LCAKKyAgICA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyMzQsIDg1LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCA3MSwgMjM1LCA2OCwgMjEsIDIxMCwgODcsIAorICAgIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDIxMCwgODcsIDI0OSwgMjI3LCAyMSwgMTIzLCAyNDksIDIyNywgMjEsIDExMywgCisgICAgMjQ5LCAyMjcsIDIxLCAxMzQsIDI0OSwgMjI3LCAyMSwgMjQ0LCAxOSwgMjQ5LCAyMjcsIDIxLCAyNDQsIDg5LCAyNDksIAorICAgIDIyNywgMjEsIDIxOSwgMTI3LCAyNDksIDIyNywgMjEsIDIyMCwgMTI0LCAyNDksIDIyNywgMjEsIDI0NSwgMjAxLCAyNDksIAorICAgIDIyNywgMjEsIDIyOCwgMjA1LCAyNDksIDIyNywgODgsIDcsIDYsIDEsIDYxLCA4OCwgNywgNiwgMSwgMjUzLCAxNjYsIDg4LCAKKyAgICA3LCA2LCAxLCAyNTEsIDc0LCA4OCwgNywgNiwgMSwgMjQ5LCA2OCwgODgsIDcsIDYsIDEsIDc2LCA4OCwgNywgNiwgMSwgCisgICAgMjQ1LCAxNCwgODgsIDcsIDYsIDEsIDI0MywgMjA5LCA4OCwgNywgNiwgMSwgMjQyLCA2NywgODgsIDcsIDYsIDEsIDc0LCAKKyAgICA4OCwgNywgNiwgMSwgMjM1LCAxNTAsIDg4LCA3LCA2LCAxLCAyMzUsIDI5LCA4OCwgNywgNiwgMSwgMTU2LCA4OCwgNywgNiwgCisgICAgMSwgMTk0LCA4OCwgNywgNiwgMSwgMjMwLCAzMCwgODgsIDcsIDYsIDEsIDc4LCA4OCwgNywgNiwgMSwgMjI2LCAxMDksIDg4LCAKKyAgICA3LCA2LCAxLCAyMjQsIDk5LCA4OCwgNywgNiwgMSwgMTUzLCA4OCwgNywgNiwgMSwgMjIyLCA5MywgODgsIDcsIDYsIDEsIAorICAgIDIxNywgMTUzLCA4OCwgNywgNiwgMSwgNjksIDg4LCA3LCA2LCAxLCAyMTQsIDEwNSwgODgsIDcsIDYsIDEsIDIxMiwgOTgsIAorICAgIDg4LCA3LCA2LCAxLCAyMTEsIDE3OCwgODgsIDcsIDYsIDEsIDIxMSwgMTE3LCA4OCwgNywgNiwgMSwgMjEwLCAxNTksIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDcsIDYsIDEsIDIyMiwgOTMsIDM3LCAzMiwgNywgNiwgMSwgMjUxLCA3NCwgMzcsIDMyLCAKKyAgICA3LCA2LCAxLCAxNTMsIDM3LCAyNTAsIDE5OSwgMzcsIDIxMSwgMTgwLCA5MiwgNywgNiwgMSwgNjEsIDkyLCA3LCA2LCAxLCAKKyAgICAyNTMsIDE2NiwgOTIsIDcsIDYsIDEsIDI1MSwgNzQsIDkyLCA3LCA2LCAxLCAyNDksIDY4LCA5MiwgNywgNiwgMSwgNzYsIAorICAgIDkyLCA3LCA2LCAxLCAyNDUsIDE0LCA5MiwgNywgNiwgMSwgMjQzLCAyMDksIDkyLCA3LCA2LCAxLCAyNDIsIDY3LCA5MiwgNywgCisgICAgNiwgMSwgNzQsIDkyLCA3LCA2LCAxLCAyMzUsIDE1MCwgOTIsIDcsIDYsIDEsIDIzNSwgMjksIDkyLCA3LCA2LCAxLCAxNTYsIAorICAgIDkyLCA3LCA2LCAxLCAxOTQsIDkyLCA3LCA2LCAxLCAyMzAsIDMwLCA5MiwgNywgNiwgMSwgNzgsIDkyLCA3LCA2LCAxLCAKKyAgICAyMjYsIDEwOSwgOTIsIDcsIDYsIDEsIDIyNCwgOTksIDkyLCA3LCA2LCAxLCAxNTMsIDkyLCA3LCA2LCAxLCAyMjIsIDkzLCAKKyAgICA5MiwgNywgNiwgMSwgMjE3LCAxNTMsIDkyLCA3LCA2LCAxLCA2OSwgOTIsIDcsIDYsIDEsIDIxNCwgMTA1LCA5MiwgNywgNiwgCisgICAgMSwgMjEyLCA5OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCA5MiwgNywgNiwgMSwgMjExLCAxMTcsIDkyLCA3LCA2LCAxLCAKKyAgICAyMTAsIDE1OSwgOTIsIDI0MCwgMjA4LCA5MiwgMjMwLCA1NCwgOTIsIDIyMSwgMTg1LCA5MiwgMjE4LCAyMjgsIDkyLCAyMjQsIAorICAgIDIyMSwgOTIsIDIxMiwgMjMsIDE1MiwgMzcsIDcsIDYsIDEsIDYxLCAxNTIsIDM3LCA3LCA2LCAxLCAyNTMsIDE2NiwgMTUyLCAKKyAgICAzNywgNywgNiwgMSwgMjUxLCA3NCwgMTUyLCAzNywgNywgNiwgMSwgMjQ5LCA2OCwgMTUyLCAzNywgNywgNiwgMSwgNzYsIAorICAgIDE1MiwgMzcsIDcsIDYsIDEsIDI0NSwgMTQsIDE1MiwgMzcsIDcsIDYsIDEsIDI0MywgMjA5LCAxNTIsIDM3LCA3LCA2LCAxLCAKKyAgICAyNDIsIDY3LCAxNTIsIDM3LCA3LCA2LCAxLCA3NCwgMTUyLCAzNywgNywgNiwgMSwgMjM1LCAxNTAsIDE1MiwgMzcsIDcsIDYsIAorICAgIDEsIDIzNSwgMjksIDE1MiwgMzcsIDcsIDYsIDEsIDE1NiwgMTUyLCAzNywgNywgNiwgMSwgMTk0LCAxNTIsIDM3LCA3LCA2LCAKKyAgICAxLCAyMzAsIDMwLCAxNTIsIDM3LCA3LCA2LCAxLCA3OCwgMTUyLCAzNywgNywgNiwgMSwgMjI2LCAxMDksIDE1MiwgMzcsIDcsIAorICAgIDYsIDEsIDIyNCwgOTksIDE1MiwgMzcsIDcsIDYsIDEsIDE1MywgMTUyLCAzNywgNywgNiwgMSwgMjIyLCA5MywgMTUyLCAzNywgCisgICAgNywgNiwgMSwgMjE3LCAxNTMsIDE1MiwgMzcsIDcsIDYsIDEsIDY5LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTQsIDEwNSwgMTUyLCAKKyAgICAzNywgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCAzNywgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMSwgCisgICAgMTE3LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMjIzLCAxNjAsIDIzMSwgMTAyLCA1MCwgMjIzLCAxNjAsIDIzMSwgCisgICAgOTksIDUwLCAxNTIsIDkyLCA3LCA2LCAxLCA2MSwgMTUyLCA5MiwgNywgNiwgMSwgMjUzLCAxNjYsIDE1MiwgOTIsIDcsIDYsIAorICAgIDEsIDI1MSwgNzQsIDE1MiwgOTIsIDcsIDYsIDEsIDI0OSwgNjgsIDE1MiwgOTIsIDcsIDYsIDEsIDc2LCAxNTIsIDkyLCA3LCAKKyAgICA2LCAxLCAyNDUsIDE0LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDMsIDIwOSwgMTUyLCA5MiwgNywgNiwgMSwgMjQyLCA2NywgCisgICAgMTUyLCA5MiwgNywgNiwgMSwgNzQsIDE1MiwgOTIsIDcsIDYsIDEsIDIzNSwgMTUwLCAxNTIsIDkyLCA3LCA2LCAxLCAyMzUsIAorICAgIDI5LCAxNTIsIDkyLCA3LCA2LCAxLCAxNTYsIDE1MiwgOTIsIDcsIDYsIDEsIDE5NCwgMTUyLCA5MiwgNywgNiwgMSwgMjMwLCAKKyAgICAzMCwgMTUyLCA5MiwgNywgNiwgMSwgNzgsIDE1MiwgOTIsIDcsIDYsIDEsIDIyNiwgMTA5LCAxNTIsIDkyLCA3LCA2LCAxLCAKKyAgICAyMjQsIDk5LCAxNTIsIDkyLCA3LCA2LCAxLCAxNTMsIDE1MiwgOTIsIDcsIDYsIDEsIDIyMiwgOTMsIDE1MiwgOTIsIDcsIDYsIAorICAgIDEsIDIxNywgMTUzLCAxNTIsIDkyLCA3LCA2LCAxLCA2OSwgMTUyLCA5MiwgNywgNiwgMSwgMjE0LCAxMDUsIDE1MiwgOTIsIAorICAgIDcsIDYsIDEsIDIxMiwgOTgsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTEsIDExNywgCisgICAgMTUyLCA5MiwgNywgNiwgMSwgMjEwLCAxNTksIDI0OSwgMTM2LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIDEwOSwgMTUyLCAKKyAgICA5MiwgMjQwLCAxMjAsIDE1MiwgOTIsIDE5MSwgMTUyLCA5MiwgMjA2LCAxNTIsIDkyLCAyNTUsIDM0LCAxNTIsIDkyLCAyMTIsIAorICAgIDIzLCA0MiwgMjQ3LCAxNzIsIDkyLCAyNTAsIDMxLCA5MiwgMjQ5LCAxNzgsIDkyLCAyNDQsIDQsIDkyLCAyNDAsIDExMiwgCisgICAgOTIsIDIyOSwgOTEsIDkyLCAyMjksIDg0LCA5MiwgMjI2LCAyMTgsIDkyLCAyMTksIDM3LCA5MiwgMTIwLCAyLCAyNDUsIDM5LCAKKyAgICA3OSwgOTIsIDIxMywgMTE5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCA2MSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgCisgICAgMSwgMjUzLCAxNjYsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDI1MSwgNzQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIAorICAgIDEsIDI0OSwgNjgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDc2LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAKKyAgICAyNDUsIDE0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyNDMsIDIwOSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgCisgICAgMjQyLCA2NywgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNzQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIzNSwgCisgICAgMTUwLCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMzUsIDI5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAxNTYsIAorICAgIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDE5NCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjMwLCAzMCwgMjIzLCAKKyAgICAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNzgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIyNiwgMTA5LCAyMjMsIDEwNiwgCisgICAgMjM1LCAyNDYsIDE2LCAxLCAyMjQsIDk5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAxNTMsIDIyMywgMTA2LCAyMzUsIAorICAgIDI0NiwgMTYsIDEsIDIyMiwgOTMsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxNywgMTUzLCAyMjMsIDEwNiwgMjM1LCAKKyAgICAyNDYsIDE2LCAxLCA2OSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjE0LCAxMDUsIDIyMywgMTA2LCAyMzUsIDI0NiwgCisgICAgMTYsIDEsIDIxMiwgOTgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxMSwgMTc4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIAorICAgIDE2LCAxLCAyMTEsIDExNywgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjEwLCAxNTksIDQyLCAxNDEsIDI0MSwgNzAsIAorICAgIDkyLCA1NiwgMjM0LCAyNCwgOTIsIDU2LCAyMDYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTcsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNjEsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjksIDkyLCA1NiwgMjQ4LCA5OCwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA3NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNSwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA2MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA0OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1MSwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA3MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1MCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICAzNiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNCwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2NCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA3OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzMiwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA1OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2OCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1NCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzMywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA1NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzOCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNywgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2NywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NywgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA0OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA3MSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2NSwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAKKyAgICAyMzgsIDQ2LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNzgsIDIxNiwgNywgMjIwLCAKKyAgICA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA3NiwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDYwLCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNDMsIDIxNiwgNywgCisgICAgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA1NiwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIAorICAgIDIxNCwgMTc3LCAyMzgsIDM5LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNzAsIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA1MiwgMzcsIDE1NCwgMjU0LCAyNTQsIDM3LCAxNTQsIAorICAgIDI1NSwgMjEsIDI0OSwgNzksIDI0NCwgNTAsIDI1MCwgOCwgMjE0LCAxOTQsIDIyOCwgMjE4LCAyLCAyMTgsIDE1NSwgMjE4LCAKKyAgICAzNCwgMTE1LCAyMzAsIDExOSwgMjE4LCAzMywgMjUwLCAzNCwgMjUzLCAyMTUsIDI0NiwgNjIsIDIxOCwgMzIsIDExNSwgCisgICAgMjUxLCAxMjYsIDIyMywgMTYxLCAyNTEsIDE0OCwgMjUzLCAyMTUsIDIyOCwgMjE3LCAyMTIsIDQxLCAyMTIsIDM1LCAyMTMsIAorICAgIDEzMSwgMjMwLCAyMDAsIDIxMiwgMjUsIDI0NSwgMjMyLCAyNDIsIDE4OCwgMjQ1LCA1MywgMjQ1LCAyMzIsIDI0MiwgMTg4LCAKKyAgICAyNTQsIDEzNiwgMjQ1LCAyMzIsIDI0MiwgMTg4LCAyNTMsIDIzMywgMjQyLCAxODgsIDIsIDIzMSwgNTYsIDE2NiwgMjMwLCAKKyAgICAxMzQsIDg3LCAyMTIsIDI3LCAyNDksIDE0NSwgMjMwLCAxMzQsIDg3LCAyNDQsIDEwMCwgMjI0LCAyNSwgMjMwLCAxMzQsIAorICAgIDg3LCAyMTIsIDI3LCAyNDIsIDIxNywgMjMwLCAxMzQsIDg3LCAyNDMsIDIzNiwgMjMwLCAxMzQsIDg3LCAyMTIsIDUyLCAKKyAgICAyNDIsIDIxNywgMjMwLCAxMzQsIDg3LCAyMzMsIDg2LCAyMjQsIDI1LCAyMzAsIDEzNCwgODcsIDIxMiwgNTIsIDI0OSwgCisgICAgMTQ1LCAyMzAsIDEzNCwgODcsIDI0OSwgMTQ1LCAyMzAsIDEzMywgMTY2LCAyMzAsIDEzNCwgMiwgMjQ0LCAxOTgsIDI0NCwgCisgICAgMTAwLCAyMjQsIDI1LCAyMzAsIDEzNCwgMiwgMjQ0LCAxOTgsIDIzMywgODYsIDIyNCwgMjUsIDIzMCwgMTM0LCAyLCAyNDQsIAorICAgIDE5OCwgMjQzLCAyMzYsIDIzMCwgMTM0LCAyLCAyNDQsIDE5OCwgMjE4LCAzOSwgMiwgMjQ0LCAxOTgsIDI0MiwgMTg2LCAKKyAgICAyMTgsIDE1OCwgMjIwLCAxLCAyMTgsIDE1OCwgMjUwLCAxMjQsIDIyMSwgMTcwLCAyNDUsIDQ3LCAyMTUsIDIzNiwgMjQ4LCAKKyAgICA5MiwgMjE1LCAyMzYsIDIyNiwgNjMsIDIxNSwgMjM2LCAyNTEsIDM1LCAyMTUsIDExMCwgMjUwLCAxMjYsIDI1MSwgMjE4LCAKKyAgICAyMjIsIDE5MywgMjQxLCAxODYsIDIxOCwgMzcsIDI1MSwgMjE4LCAyNDUsIDIzNiwgNjQsIDIzMSwgMTk5LCAyNDUsIDIzNiwgCisgICAgNjQsIDIyMywgMzQsIDI0MSwgMjExLCAyNDQsIDE5LCAyMzMsIDYwLCAyNDksIDI1NCwgMjMxLCAxNzUsIDIzMywgNTksIAorICAgIDI0NCwgMTg0LCAyMzMsIDU5LCAyMzMsIDYwLCAyNDQsIDU1LCAyMzYsIDcsIDIxMSwgMjM5LCAyMzAsIDYzLCAyMTYsIDM1LCAKKyAgICAyNTMsIDE5OSwgMjQyLCAxNTAsIDIzMSwgNzIsIDIxMiwgMzksIDIxNywgNTgsIDIzMywgMzIsIDI1MiwgMTU3LCAyMjUsIAorICAgIDY1LCAyMjMsIDExNCwgMjU0LCA2MiwgMjQyLCAxMzQsIDI1NCwgNjIsIDIyNSwgMjIwLCAyMjUsIDIyMSwgMjUwLCAxMjcsIAorICAgIDIxOCwgMTE2LCAyNDIsIDMwLCAyMTksIDkyLCA2NCwgMjI1LCA0NywgMjMxLCA5MiwgMjI2LCAyMDEsIDI1MSwgMjAyLCAKKyAgICAyMjQsIDIzMiwgMjMzLCA0MiwgMjIzLCAzNSwgMjQ5LCAxNTAsIDIyMywgMzUsIDI1MiwgMTY3LCAyNDksIDE4MSwgMjIzLCAKKyAgICAzNCwgMjQ5LCAxMDMsIDIyLCAyMjMsIDM0LCAyMTgsIDE0MywgMjUxLCAxNzUsIDIxOSwgMTYsIDI1MSwgMTU5LCAyNDQsIDMsIAorICAgIDI0MywgMjU1LCAyMjIsIDIwOSwgMjE3LCAyNDcsIDIyNCwgMjM0LCAyNDgsIDE4MywgMjI2LCAyNDAsIDIxOCwgOCwgMjQ0LCAKKyAgICAwLCAyMTksIDIzMiwgMjQ0LCA5OSwgMjUxLCAyOSwgMiwgMjE3LCAyNDAsIDI0OCwgNDMsIDIxOSwgNTQsIDI0MCwgMTE5LCAKKyAgICAyNDksIDE0OSwgMjIwLCA3MiwgMjQwLCAxMTgsIDI0MCwgMTE5LCAyNDksIDE0OSwgMjQ2LCAxMTYsIDI0OSwgMTgwLCAyNTAsIAorICAgIDkyLCAxMzAsIDI1MSwgNiwgMjMyLCAxNDcsIDI0OSwgOTYsIDI0MSwgNjIsIDIyNCwgMjM2LCAyMTksIDI0MiwgMjUyLCA0NCwgCisgICAgMjUxLCAxNzEsIDIyNCwgMjM3LCA2NCwgMjQ0LCA0MSwgMjQ5LCAxNzksIDI0NCwgMzIsIDIyLCAyMzQsIDM4LCAyMTcsIDIwLCAKKyAgICAyMTEsIDIzMCwgMjQyLCAyMCwgMjIyLCAxNCwgMjUxLCAxODUsIDIyLCAyNDksIDExMCwgMjExLCAyMzcsIDI0MiwgMTkxLCAKKyAgICAyNDksIDI0MywgMjQyLCAxOTEsIDIxNSwgMTk0LCAyNDYsIDk4LCAyNTIsIDcwLCAyMzAsIDk4LCAyNTAsIDE1LCAyNTIsIAorICAgIDcwLCAyMzAsIDk3LCAyNTIsIDE5NSwgMjUxLCAxODQsIDIyMywgMzYsIDIxMSwgMjAxLCAyMjQsIDE5OCwgMjUxLCAyNDMsIAorICAgIDI1MSwgMjgsIDIzNSwgMTQ0LCAyNTAsIDg1LCAyMTUsIDIzNiwgMjQ0LCAxNzAsIDI1MCwgODQsIDI0NCwgMTAyLCAyNDQsIAorICAgIDEwMywgMjE5LCAxNCwgMjUyLCAxNjYsIDIyNSwgMjU0LCAyMjQsIDI0NywgMjQ5LCAyMTIsIDI1MiwgMTY3LCAyMTcsIDYwLCAKKyAgICAyMTUsIDIzNiwgMjQ5LCAxMzYsIDI0NCwgNzUsIDIyNSwgNjYsIDI0OCwgODksIDIzNSwgMTM3LCAyNDcsIDEzOSwgMjUwLCAKKyAgICAyNDAsIDIxOCwgMTE1LCAyMTEsIDI0MCwgMjUwLCAxMDYsIDIzMCwgMTM0LCAyMTMsIDE2NCwgMjUwLCAxNzAsIDIyMSwgCisgICAgMjAxLCAyMjEsIDIyNiwgMjQyLCAxNTUsIDI1MSwgMywgMjUwLCAyNDEsIDI0MCwgMjUyLCAyNDQsIDEzOCwgMjEyLCAwLCAKKyAgICAyMjIsIDIwMiwgMjQ5LCAyNDQsIDI0NCwgOTQsIDIyNSwgNSwgMjIsIDI0NCwgOTgsIDIzMCwgMjMyLCAyMzAsIDExMywgCisgICAgMjUxLCAxOCwgMjUwLCA0NywgMjQxLCAyMzksIDI1MywgMjQ5LCAyMjYsIDY2LCAyMTYsIDE1LCAyNDIsIDIsIDI1MCwgMzcsIAorICAgIDIxNiwgMjQzLCAyMTYsIDExNCwgMjUwLCAyOCwgMjUxLCAyMTAsIDIyNSwgMTgwLCAyNTMsIDI0OCwgMjEzLCAxNzIsIDI0MywgCisgICAgMTE3LCAyNDcsIDIwNSwgMjQxLCAxNjMsIDIxOSwgODYsIDIzMSwgMjM5LCAyNTEsIDI1MywgMjQzLCAxMTgsIDI0NywgMjQ4LCAKKyAgICAyNTEsIDE3NCwgMjQ0LCA2MCwgMjI1LCAzNiwgMjUwLCAyNDksIDI4LCAyMjgsIDUyLCAyMzAsIDkwLCAyOCwgMjI4LCA0NywgCisgICAgMjIxLCAyMTQsIDI0MiwgMTA2LCAyOCwgMjM0LCAxNDMsIDIxNSwgMTkxLCAyMTMsIDE1NCwgMjgsIDIyMSwgMTk0LCAyMjIsIAorICAgIDEyNiwgMjIwLCAxMywgMiwgMjIxLCAyMjksIDIxNiwgMjQ1LCAyMjMsIDE4MSwgMjIsIDI1MiwgMTY3LCAyMTksIDEwNywgCisgICAgMjIsIDIxOSwgMTA3LCAyNTEsIDE5NSwgMjUyLCAxMzEsIDIyLCAyNDEsIDU2LCAyNTAsIDEyOCwgMjQ0LCA4MSwgMjE5LCAKKyAgICA2NSwgMjIyLCAxMjcsIDIxOCwgMTMsIDIxNSwgMTk1LCAyNDAsIDI1MywgMjIzLCAxODIsIDI1NCwgMTM3LCAyNDQsIDM5LCAKKyAgICAyMjIsIDEzOCwgMjQ0LCAzOSwgMjE3LCAyNDIsIDI0MCwgMjQyLCAyNTEsIDEyNywgMjQwLCAyNDIsIDIsIDI0MywgMTAxLCAKKyAgICAyMjYsIDIzMywgMjUxLCAxMjcsIDIzNSwgMTM3LCAyMjQsIDI0MiwgMjI2LCAyMzIsIDI0NSwgNTIsIDIyNCwgMjQyLCAyMjYsIAorICAgIDIzMiwgMjQwLCAyNTEsIDI1MiwgMTUzLCAyNTMsIDE4OSwgMjE2LCAyNTMsIDIzMSwgMjM5LCAyNDAsIDI0NywgMjMyLCAKKyAgICAxMTcsIDI0MCwgMjQ3LCAyNDksIDE4NCwgMjE4LCAxMjcsIDIyMSwgMjAwLCAyNDgsIDUxLCAyMTgsIDEyNywgMjQ0LCAxODgsIAorICAgIDIzNSwgMTU1LCAyMzMsIDk1LCAyMzUsIDEzNywgMjUwLCAyMzQsIDI0NSwgNTIsIDI1MCwgMjM0LCAyMjMsIDE0NCwgMjMwLCAKKyAgICAxMTcsIDIyNiwgMTE4LCAyMTIsIDQxLCAyNTEsIDEzMSwgMjQ5LCAxNTMsIDIxNiwgMTA3LCAyMzMsIDI0LCAyMjMsIDE4MywgCisgICAgMjUwLCAyMzIsIDI0NiwgMTA0LCAyNDksIDE0MywgMjEyLCAzLCAyMTksIDcyLCAyMTksIDcwLCAyNDAsIDI1MiwgMjIzLCAKKyAgICAxNTYsIDI0MiwgMTc3LCAyMjAsIDU5LCAyMzAsIDE1MCwgMjIyLCAxOTYsIDI1MCwgMTE2LCAyNDcsIDE0NCwgMjI1LCA3NiwgCisgICAgMjUxLCAyMTEsIDI0NSwgMTc3LCAyMjYsIDI0MiwgMjE4LCAyNTQsIDIyMCwgNTQsIDI1MSwgMTMwLCAyNTQsIDEwMCwgMjQxLCAKKyAgICA2MSwgMjMzLCAxMjcsIDI1MiwgNjgsIDI0NCwgOTgsIDIxNSwgMTk0LCAyNDQsIDk4LCAyNTEsIDIxNywgMjE1LCA5MSwgCisgICAgMjQyLCAwLCAyNTAsIDExNywgMjUyLCAxOTUsIDI1MCwgMTE3LCAyNDMsIDI1MCwgMjUyLCAxOTUsIDI1MCwgMTE3LCAyNTEsIAorICAgIDI0NSwgMjI1LCAxOTgsIDIzNCwgMzIsIDIyNCwgMjUxLCAyNDYsIDk1LCAyNTEsIDE5LCAyNTIsIDE4NSwgMjUxLCAxOSwgCisgICAgMjQ3LCAxMzgsIDIzMCwgMTE4LCAyNDQsIDE5OCwgMjQ5LCAxNTQsIDI0NCwgMTk4LCAyMTYsIDEwOCwgMjQ0LCAxOTgsIAorICAgIDIyMywgMTg0LCAyNDQsIDE5OCwgMjUwLCAyMzMsIDI0NCwgMTk4LCAyNDYsIDEwNSwgMjQ0LCAxOTgsIDIxOCwgMjQzLCAKKyAgICAyMTIsIDMsIDI0MCwgMjUzLCAyNDQsIDE5OCwgMjMwLCAxNTEsIDI0NCwgMTk4LCAyNDcsIDE0NSwgMjQ0LCAxOTgsIDIyNSwgCisgICAgNzcsIDI0NCwgMTk4LCAyNDMsIDI1MywgMjQ0LCAxOTgsIDI0MiwgMjcsIDI0NCwgMTk4LCAyMTEsIDIyNCwgMjQ0LCAxOTgsIAorICAgIDI1MiwgNzksIDI0NCwgMTk4LCAyMjYsIDQ5LCAyNDQsIDE5OCwgMjI1LCA3NywgMjI4LCA1OCwgMjI1LCAyMzYsIDIyNCwgCisgICAgMTg5LCAyNDUsIDIxLCAyNDUsIDIzNSwgMjI4LCA1OCwgMjMwLCAxMTUsIDIxNiwgMjAsIDcxLCAxMjAsIDIyNSwgMTAsIAorICAgIDI1MiwgMTkwLCAyMzUsIDI0OSwgNzEsIDEyNCwgMjI1LCAxMCwgMjUyLCAxOTAsIDIzNSwgMjQ5LCA3MSwgNDMsIDIyNSwgCisgICAgMTAsIDI1MiwgMTkwLCAyMzUsIDI0OSwgNzEsIDQ0LCAyMjUsIDEwLCAyNTIsIDE5MCwgMjM1LCAyNDksIDI0NCwgOTIsIAorICAgIDI0MiwgMjMsIDUwLCAyMTIsIDMzLCAyNDIsIDIzLCA1MCwgMjI2LCAyMTksIDI0MiwgMjMsIDUwLCAyMTYsIDEzNiwgMTIwLCAKKyAgICA1MCwgMjE2LCAxMzYsIDEyNCwgNTAsIDI1MCwgMjcsIDI0MiwgMTgsIDUwLCAyMDQsIDI0MiwgMTgsIDUwLCAyNDksIDEzMSwgCisgICAgMjExLCAyMjAsIDI0MiwgMiwgMjQ1LCAyMiwgMjI5LCAxMDksIDIxNywgMTUyLCAyMzUsIDEzMSwgMjQ2LCAxMDAsIDIzNCwgCisgICAgODgsIDI1MSwgMjU1LCAyMTEsIDIyMCwgMjUwLCAxLCAyMjQsIDEzMCwgMjQyLCAyMSwgMjI0LCAyMzMsIDIzMSwgMTgyLCAKKyAgICAyMjAsIDYsIDI1MywgMjExLCAyMjAsIDYsIDI0MSwgMTcxLCAyMjAsIDYsIDIxMSwgMjIwLCAyMjEsIDI0MiwgMjExLCAyMjAsIAorICAgIDI1MSwgMTk0LCAyNDQsIDM3LCAyNTEsIDk4LCAyMzYsIDcsIDIxOSwgMTcxLCAyNTEsIDk3LCAyMzYsIDcsIDIxOSwgMTcxLCAKKyAgICAyNTEsIDE3MCwgMjQyLCAyMDEsIDIzMSwgMTkwLCAyMTEsIDIyMSwgMjQ0LCAxODIsIDIzMSwgMTkxLCAyMiwgMjExLCAyMjIsIAorICAgIDI0MSwgNjcsIDI0MiwgMTcsIDExMywgMjMxLCA2NCwgMjQxLCA2NywgMjQyLCAxNywgMTEzLCAyMTEsIDIxOSwgMjQxLCA2NywgCisgICAgMjQyLCAxNywgMjI1LCAyLCAyMjYsIDIzMSwgMjExLCAyMjIsIDIsIDI1MSwgMTE0LCAyNDUsIDIzMywgMjUxLCAxNDksIDIsIAorICAgIDIxMywgMjQ2LCAyMjUsIDE3MSwgMiwgMjUxLCAyMjAsIDI0MiwgNDEsIDIzMSwgMTkxLCAyLCAyNDIsIDExNywgMjI1LCAKKyAgICAxMTIsIDIzMSwgMTc5LCAyMzEsIDE5MSwgMiwgMjE1LCA5OCwgMjI2LCAyMTIsIDIzMSwgMTkwLCAyMjYsIDIxMiwgMjExLCAKKyAgICAyMjEsIDI1MiwgMTk0LCAyNDksIDE5OCwgMjExLCAyMDUsIDIyNCwgMTkyLCAyMzUsIDEzNywgMjI2LCAyMjcsIDIzNSwgCisgICAgMTM3LCAyNDIsIDE3NiwgMjQyLCAyMjksIDI1MiwgMTk1LCAyNTQsIDEyMSwgMjQ1LCAyNiwgMjU0LCAxNjksIDI1NCwgMTcwLCAKKyAgICAyMzAsIDE0MSwgMjM2LCAxMiwgMjE5LCAxMDIsIDIzNSwgMjM5LCAyNDgsIDQyLCAyMjUsIDE3MCwgMjQyLCAxMTIsIDI0OCwgCisgICAgMTg3LCAyMzIsIDIwNywgMjI5LCAyMTYsIDIyNSwgMSwgMjQ0LCAxOTksIDIzMSwgMTQ3LCAyNDIsIDQwLCAyNTIsIDE0NiwgCisgICAgMjI1LCA0LCAyMTcsIDE3MiwgMjI1LCA2OSwgMjM0LCA3MCwgNzksIDIzMiwgMTE3LCAyMzMsIDE2LCAyMjIsIDIzNiwgMjQzLCAKKyAgICA2MSwgMjE4LCAxMzMsIDIzNCwgNjksIDI1MSwgMTc5LCAyNDksIDE1NiwgMiwgMjQxLCAyMzQsIDIxMiwgMTksIDI1MiwgNzcsIAorICAgIDI0MSwgMjM0LCAyNTEsIDE0MywgMjQxLCAyMzQsIDExMywgMjQxLCAyMzIsIDIxOSwgMTIsIDI0MSwgMjM0LCAyNDIsIDEyNywgCisgICAgMjQxLCAyMzQsIDI0MSwgMjM1LCAyLCA3NSwgMjUxLCAyMTYsIDI0MSwgMjM0LCAyNDIsIDEzNCwgMjQxLCAyMzQsIDIxMSwgCisgICAgNDIsIDI0MSwgMjM0LCAyMjQsIDEzMSwgMjQxLCAyMzQsIDI0MSwgMjM1LCAyLCAyMjMsIDM2LCAyMjMsIDQ3LCAyNDEsIAorICAgIDIzMiwgMjQxLCAyMzUsIDI0OCwgODksIDI0OCwgMSwgMjIwLCA4NCwgMiwgMTE2LCA1OSwgMjM1LCAyMjIsIDI0NSwgMTgwLCAKKyAgICAxOTMsIDI1MSwgMTI0LCAyNTQsIDEyMCwgODcsIDI1MSwgMjAzLCAyMTksIDk0LCA4NywgMjQ5LCAyMzYsIDg3LCAyMTgsIAorICAgIDI0OCwgMjE3LCAyNDksIDg3LCAyNDYsIDkzLCAyNDgsIDE2NSwgODcsIDIyNSwgNzAsIDY0LCAyMjQsIDI1MiwgMjQ0LCA2OSwgCisgICAgMjUyLCAxMSwgMjQ3LCAxNzMsIDg3LCAyMTksIDUsIDI1MiwgMTY2LCAyMTYsIDE1MCwgMjUyLCAxNjYsIDcxLCAyNDQsIDU5LCAKKyAgICAyNDAsIDIxOCwgMjI1LCA4LCA4NywgMjMwLCAxNTQsIDI1MiwgMTgwLCAyNDksIDEwNiwgMjQ1LCA0MCwgMTE0LCAyNDcsIAorICAgIDE0MCwgNTAsIDI0OSwgMTQ3LCAyNTAsIDI1MCwgMjUyLCAxNTIsIDIsIDIxMSwgNDAsIDUwLCAyNTIsIDE1MiwgMiwgMjQ3LCAKKyAgICAxNDAsIDUwLCAyNTIsIDE1MiwgMiwgMjQ1LCA1NSwgNTAsIDI1MiwgMTUyLCAyLCAyMjQsIDIzMSwgNTAsIDIzMCwgMTU0LCAKKyAgICAyLCAyMTEsIDIzNSwgMjUwLCAxNDYsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMiwgMjIsIDIxMSwgNDAsIDUwLCAyMjEsIDE4MCwgCisgICAgMjI1LCAxNjksIDI0OSwgMjE2LCAyNTEsIDE0NywgMjMwLCAxOTEsIDI0NCwgNjQsIDI0NywgMTkzLCAyMjYsIDE2NSwgMjQ3LCAKKyAgICAxOTgsIDI0NiwgNTcsIDI0NCwgMTE1LCAyNDQsIDQ4LCAyMDQsIDI0NCwgMTE1LCAyNDQsIDQ4LCAyMjYsIDgwLCAyLCAyNDksIAorICAgIDEwOCwgMjI2LCA4MCwgMjQ0LCAxOTEsIDIxNCwgMTYzLCAyNTEsIDI0LCAyMTcsIDE5LCAyNTEsIDI0LCAyNTAsIDI1MSwgCisgICAgMjM1LCAyNDksIDI1MCwgMTQ2LCAyLCAyMTQsIDE1MywgMjE1LCAyMzEsIDI1MCwgMTQ2LCAyLCAyNDYsIDExMiwgMjE1LCAKKyAgICAyMzEsIDI1MiwgMTQ5LCAyNTAsIDE0NSwgMjUwLCAxNCwgMjI0LCAxMjYsIDIyMiwgMTg3LCAyMjQsIDEyNiwgMjI2LCAyMywgCisgICAgMjE4LCAxMjMsIDIyMiwgMTMzLCAyMTUsIDIyMywgMjIyLCAxMzMsIDI1MSwgMTk5LCAyMTcsIDkyLCAyMzMsIDU3LCAyMjgsIAorICAgIDUwLCAyMjgsIDUxLCAyLCAyNDgsIDg4LCAyNDksIDE1NSwgMjUwLCA4LCAyNTEsIDIwMCwgMjA0LCAyNTEsIDIwMCwgMjQyLCAKKyAgICAxMzQsIDI1MSwgMjAwLCAyNTEsIDIxNiwgMjUxLCAyMDAsIDIyNiwgMTYxLCAyNTEsIDIwMCwgMjUxLCAxOTcsIDIyOSwgCisgICAgMjEwLCAyNTIsIDE4MywgMjIxLCAxODgsIDIzMSwgNjUsIDIxNywgMiwgMjIzLCAxMjYsIDIyNiwgNzgsIDI0NCwgMTY3LCAKKyAgICAyMzEsIDIzOSwgMjIxLCAyMjUsIDI1NCwgOTcsIDIyNCwgMTQ4LCAyNTUsIDUsIDIzMiwgMTE5LCAyNTAsIDEzNSwgMjMxLCAKKyAgICA3NywgMjI2LCAxMzMsIDIxNSwgMjM5LCAyMzYsIDMsIDIxNSwgMjM5LCAyMjYsIDg2LCAyNDYsIDMyLCA4NywgMjM2LCAwLCAKKyAgICAyNDUsIDEyNywgMjQ1LCAxMjgsIDIsIDI0NiwgMTEyLCA4MCwgNDgsIDI1MCwgOCwgMjMxLCAyMDUsIDIsIDIzMiwgMTEzLCAKKyAgICAyNDQsIDgxLCAyNTAsIDgsIDIzMSwgMjA1LCAyLCAyMjMsIDE2MCwgMjQ0LCA4MSwgMjA0LCAyMzEsIDIwNSwgMiwgMjIzLCAKKyAgICAxNjAsIDI0NCwgODEsIDIwNCwgMjMxLCAyMDUsIDIsIDIzMiwgMTEzLCAyNDQsIDgxLCAyMjQsIDIzOSwgMjI0LCAyNDAsIAorICAgIDI0MCwgMjU1LCAyMjksIDg5LCAyMzAsIDE2NCwgMjI1LCAxMjAsIDIzMCwgMTY0LCAyMjUsIDEyMSwgMiwgOTcsIDgwLCAKKyAgICAyNTMsIDIxNSwgMjMzLCA1MiwgMjEzLCAxNzUsIDIzMCwgMTYzLCAyMzAsIDE2NCwgMjI1LCAxMjEsIDIyNiwgMjM0LCAyMjgsIAorICAgIDgwLCAyMzAsIDE2NCwgMjI1LCAxMTksIDI1NCwgOTgsIDIsIDI1MiwgMTM3LCAyNTEsIDE4LCAyMTMsIDE3MiwgMjUxLCAxOCwgCisgICAgMjE2LCAyNTUsIDIyMywgMTc2LCAyMTMsIDE3MSwgMjE1LCA2MCwgOTcsIDI1MywgMjU1LCAyNTAsIDEwLCA5NywgMjIsIAorICAgIDE0MCwgMjA0LCAyNTAsIDQ0LCAyNTMsIDI1NSwgMjUwLCAxMCwgOTcsIDIyLCAxNDAsIDIwNCwgMjUwLCA0NCwgMjU0LCAwLCAKKyAgICAyLCAzNywgMTIzLCAyMjYsIDEyNCwgMjUwLCAxMCwgMjQ2LCAxMTIsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDQ0LCAyNTMsIAorICAgIDI1NSwgMjU0LCA5NiwgMjQ2LCAxMTIsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDQ0LCAyNTMsIDI1NSwgMTIxLCAyNTEsIAorICAgIDE0NiwgODcsIDEyNSwgMjUxLCAxNDYsIDg3LCAyMTksIDksIDIsIDI1MSwgMTIsIDkxLCAyMTksIDgsIDIxOSwgOSwgMiwgCisgICAgMTIzLCAyMTksIDMzLCAyMTIsIDM1LCAyMTksIDksIDIsIDEzNCwgMjE5LCAzMywgMjEyLCAzNCwgMjUyLCAxMjMsIDI0NSwgCisgICAgMTgwLCAyMjUsIDMwLCAyMzMsIDQ4LCAyMzEsIDIxNiwgMjQyLCAxOTEsIDIyMiwgMjUwLCAyMzEsIDIxNiwgMjQyLCAxOTEsIAorICAgIDIzMiwgMTU4LCAyLCAyMzUsIDIzMiwgMjI1LCAyMDIsIDI1MCwgOCwgMjMyLCAxNTgsIDIsIDIzNCwgMTQ0LCAyMzQsIDE0NCwgCisgICAgMjMyLCAxNTcsIDIwNCwgMjMyLCAxNTcsIDI1MiwgNTIsIDI1MiwgNTMsIDIsIDI1MSwgMTIsIDkxLCAyNTEsIDE5OCwgMjMyLCAKKyAgICAyMTAsIDg3LCAyMjMsIDE3NywgMjUxLCA5NCwgMjUyLCAxOTMsIDIsIDE0MCwgODAsIDQ4LCAyNDUsIDE1MSwgMiwgMTQwLCAKKyAgICA4MCwgNDgsIDIyNiwgMjAxLCAyLCAyNDUsIDM5LCAxNjQsIDIsIDQzLCA0NCwgODAsIDQ4LCAyMTksIDQxLCAyLCA5NywgODAsIAorICAgIDQ4LCAyMTYsIDE1LCAyLCAyMTQsIDE1MywgODAsIDQ4LCAyMjgsIDgwLCAxMjMsIDIxNCwgMTg0LCAyNDUsIDE5OSwgODcsIAorICAgIDIzNCwgMTQyLCAyMTYsIDI0OCwgMjM1LCAyMjYsIDE2LCAzMSwgNywgNiwgMjMzLCAxNSwgMjM1LCAyMjYsIDE2LCAzMSwgNywgCisgICAgNCwgMjMzLCAxNSwgMjM1LCAyMjYsIDE2LCAzMSwgMjI3LCAyMDMsIDIzNSwgMjI2LCAxNiwgMzEsIDIxNywgMTg0LCAyMzUsIAorICAgIDIyNiwgMTYsIDMxLCA3LCAyMzMsIDE1LCAyNDQsIDEwNCwgMjQ1LCAxODAsIDIxNiwgMTAsIDIxMSwgMTk5LCAyNDIsIDI4LCAKKyAgICAyMjcsIDE4NiwgMjIsIDI1MSwgMjA1LCAyNDEsIDczLCAyMjUsIDUzLCAyMzAsIDIzMSwgMjE3LCAwLCAyNDksIDEyMiwgCisgICAgMjUyLCAxNjcsIDIxOSwgMTI3LCAyMjUsIDEyLCAyMTgsIDE1OSwgMiwgMjMwLCAyMjksIDI0NywgMTI4LCAyMzUsIDEzNywgCisgICAgMTYsIDMxLCAyNTIsIDY1LCAyMTUsIDIyMSwgMjQ1LCAxNjQsIDg1LCA0MiwgMjUxLCA5NCwgNzEsIDQyLCAyNTEsIDk0LCAKKyAgICAyMzMsIDkxLCAyMjMsIDExNCwgMjUwLCA0MywgMjMzLCA5MSwgMjUxLCAyMTYsIDI1MCwgNDMsIDIzMywgOTEsIDIyNiwgCisgICAgMTYxLCAyNDgsIDAsIDIzMywgOTEsIDI1MSwgMjE2LCAyNDgsIDAsIDQsIDIyNiwgMTYxLCAyNDgsIDAsIDQsIDI1MSwgMjE2LCAKKyAgICAyNDgsIDAsIDIxNCwgMTYyLCAyMjMsIDExNCwgMjE1LCAyMjYsIDI0NiwgMTEzLCAyMjMsIDExNCwgMjE1LCAyMjYsIDIxNCwgCisgICAgMTYyLCA0LCAyMjMsIDExNCwgMjE1LCAyMjYsIDI0NiwgMTEzLCA0LCAyMjMsIDExNCwgMjE1LCAyMjYsIDM3LCAyNDksIAorICAgIDEzOSwgMjI0LCAyNTUsIDI0OSwgMTM5LCAyMjUsIDAsIDIsIDI0MiwgMzMsIDUxLCAyNDksIDEzOSwgMjI0LCAyNTUsIDIyOCwgCisgICAgNTQsIDQzLCAyMjAsIDE1NSwgMiwgMTM0LCAyNDcsIDEyNiwgMjUwLCAxMiwgMjQ0LCAxOTksIDEyMywgMjI2LCAyNDYsIAorICAgIDI1MCwgMTIsIDI0NCwgMTk5LCAxMTMsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMTM0LCAyMjYsIDI0NiwgMjUwLCAKKyAgICAxMiwgMjQ0LCAxOTksIDI0NCwgMTksIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ0LCA4OSwgMjI2LCAyNDYsIAorICAgIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTksIDEyNywgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMjAsIDEyNCwgMjI2LCAKKyAgICAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDUsIDIwMSwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMjgsIDIwNSwgCisgICAgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTYsIDI0OSwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDUsIAorICAgIDE3NiwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTUsIDc3LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIAorICAgIDIyNiwgMTk2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE1LCA1NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNiwgMTQxLCAyNTAsIAorICAgIDEyLCAyNDQsIDE5OSwgMjQ0LCAxNSwgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NCwgODcsIDI1MCwgMTIsIDI0NCwgMTk5LCAKKyAgICAyMTksIDEyMywgMjUwLCAxMiwgMjQ0LCAxOTksIDIyMCwgMTIzLCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ1LCAyMDAsIDI1MCwgCisgICAgMTIsIDI0NCwgMTk5LCAyMjgsIDIwNCwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNiwgMjQ3LCAyNTAsIDEyLCAyNDQsIDE5OSwgCisgICAgMjQ1LCAxNzQsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTUsIDc1LCAyMzAsIDEyMiwgMjQzLCAyMzcsIDIxNiwgMzcsIDIxNiwgCisgICAgMywgMjE4LCAxNTAsIDY0LCAyMzIsIDI0NSwgMjE5LCAxNzIsIDY0LCAyMzUsIDEzOCwgMjMwLCAxMTEsIDI0MiwgMTMxLCAKKyAgICAyNDQsIDE5OCwgMjQyLCAxMzEsIDI0NCwgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyNDQsIDE5OSwgMiwgMjE3LCAxNSwgCisgICAgNjQsIDIzNSwgNTksIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgCisgICAgMjA0LCAyMzAsIDExNiwgMjIsIDIxOSwgNzYsIDI0NSwgMjEsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE2LCAKKyAgICAyMiwgMjQ5LCAyMzgsIDIxNywgMjQ4LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNiwgMjIsIDIxNiwgCisgICAgMTA1LCAyNDUsIDIxLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjQyLCAzMiwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDI0MCwgCisgICAgMjU0LCAyMTEsIDIzMywgMjQ0LCAxOTgsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyNDQsIAorICAgIDE5OSwgMjIxLCAyMTksIDI0OCwgNzAsIDI0NCwgNDEsIDIyMywgOTEsIDI0NCwgMTk4LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgCisgICAgMjQxLCAyMzMsIDI0NSwgMjEsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMTgsIDM1LCAyMTksIDc1LCAyNDQsIDE5OCwgMjI5LCAKKyAgICA5MiwgMjQ0LCAxOTgsIDI0NSwgMzEsIDI0NCwgMTk4LCAyMTQsIDE4OCwgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAyNDksIAorICAgIDIzOCwgMjE3LCAyNDgsIDIyNSwgMTk1LCAyNDQsIDE5OCwgMjQ5LCAyMDksIDI0NCwgMTk4LCAyNDksIDIxMCwgMjQ0LCAKKyAgICAxOTgsIDIzNCwgNjgsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMjE2LCAxMzgsIDExNiwgMjM0LCA2OSwgMjM0LCA2OCwgMjQ0LCAKKyAgICAxOTksIDIsIDIxOSwgNzYsIDI0NSwgMjEsIDIzNCwgNjgsIDI0NCwgMTk5LCAyLCAyNTAsIDgsIDI0NSwgMjEsIDI0NCwgCisgICAgMTk5LCAyLCAyMTgsIDg5LCAyMTYsIDIwLCAyNDQsIDE5OSwgMiwgMjE4LCA4OSwgMjE2LCAyMSwgMjIsIDIxMSwgMjMzLCAKKyAgICAyNDUsIDIzLCAyNDQsIDE5OSwgMiwgMjE4LCA4OSwgMjE2LCAyMSwgMjIsIDIxNiwgMTA1LCAyNDUsIDIxLCAyNDcsIDIwMCwgCisgICAgMjQ0LCAxOTgsIDIxMSwgMjA0LCAyNDQsIDE5OCwgMjU0LCAxMTYsIDI0NCwgMTk4LCAyMjQsIDIzMCwgMjQ0LCAxOTgsIAorICAgIDI0OSwgMTI0LCAyNDQsIDE5OCwgMjI1LCAxNzMsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgMjMyLCAxMzIsIDY0LCAyMTUsIAorICAgIDIwNSwgMjQ3LCAyMDAsIDI1MSwgOTYsIDIyMywgOTEsIDI0NCwgMTk4LCAyNDMsIDI0NywgMjQ0LCAxOTksIDIsIDIwNCwgCisgICAgMjMwLCAxMTUsIDI1NCwgMTE0LCAyNDQsIDE5OCwgMjQ0LCAxNjAsIDI0NCwgMTk4LCAyMTIsIDIwLCAyNDQsIDE5OCwgMjE5LCAKKyAgICA5MywgMjQ0LCAxOTgsIDIxNiwgNzIsIDI0NCwgMTk4LCAyNDIsIDEzMiwgMjQ0LCAxOTgsIDIzMiwgMTIwLCAyNDksIDEyNCwgCisgICAgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyNDAsIDIxMCwgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAKKyAgICAyMDQsIDIzMCwgMTE2LCAyMiwgMjQ5LCAyMzgsIDIxNywgMjQ4LCAyNDQsIDE5OSwgMjIxLCAxOTIsIDIzNiwgNywgMjQ0LCAKKyAgICAxNjEsIDI1MywgMjIxLCAyNDQsIDE5OCwgMjQ0LCA1NywgMjQ0LCAxOTgsIDIxOSwgOTQsIDI0NCwgMTk4LCAyNDcsIDE3MywgCisgICAgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyMTEsIDIzMCwgMjMwLCAxMTUsIDI0NCwgMTk5LCAyLCAyMzEsIDg5LCAyMzEsIDE0OSwgCisgICAgMjQyLCAxMzEsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAKKyAgICAyMTcsIDE1LCA2NCwgMjM1LCA1OSwgMjE5LCA3NiwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyMTksIAorICAgIDc2LCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDI0MSwgMjMzLCAyNDUsIDIxLCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDIxMSwgCisgICAgMTk2LCAyMTksIDc3LCAyMzQsIDY4LCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDI1MCwgOCwgMjQ1LCAyMSwgMjI0LCAyMzAsIAorICAgIDI1MCwgMjMzLCAyNDQsIDE5OCwgMjQ5LCAxMjQsIDI1MCwgMjMzLCAyNDQsIDE5OCwgMjEyLCAyMCwgMjUwLCAyMzMsIDI0NCwgCisgICAgMTk4LCAyNDQsIDE5OSwgMiwgMjI4LCA4MCwgMjQyLCAxNzAsIDI0MywgNDEsIDI0NCwgMTk5LCAyLCAyMjYsIDIxOSwgMjQzLCAKKyAgICA0MSwgMjI1LCAxNzEsIDI1MSwgMTc2LCAyNDgsIDgzLCAyMjEsIDE3MSwgMjMwLCAxNTAsIDI0MSwgMjM2LCAyMzAsIDE1MCwgCisgICAgMjE5LCAxMCwgMjMwLCAxNTAsIDI0MiwgMTIsIDIyNSwgMTcxLCAyMjMsIDE1OSwgMTIzLCAyNDIsIDIyLCAyMjUsIDE3MSwgCisgICAgMjIzLCAxNTksIDI1MSwgMTg2LCAyNDIsIDE4LCAyMzYsIDcsIDI1MCwgMTg3LCAyMjUsIDE3MSwgMjQzLCAyNDYsIDIyNSwgCisgICAgMTcxLCAyLCAyMjQsIDIzMCwgMjQ0LCAxOTgsIDIyNSwgMTcxLCAyLCAyNDQsIDQ5LCAyNDIsIDE3LCAyMjIsIDIwNSwgMjQxLCAKKyAgICAyMjEsIDIxOCwgMTQ1LCAyMzIsIDE1NSwgMjIzLCAxNjUsIDI1MCwgMjUyLCAyNDEsIDE2OSwgMjE1LCAyNDksIDI0MSwgCisgICAgMTY5LCAyMTUsIDI1MCwgMiwgMjUxLCAxMjIsIDIyOCwgNTgsIDIxNSwgMjQ5LCAyMzEsIDM3LCAxOTMsIDIyMywgMTY2LCAKKyAgICAyMTgsIDE1MSwgMjE1LCAyNDcsIDIxNSwgMjQ4LCAyNTAsIDI1MiwgMjUxLCAxMDAsIDIyNiwgMTk4LCAyNTEsIDEwMCwgCisgICAgMjE1LCAyMDIsIDI1MSwgMTAxLCAyMTgsIDEzMSwgMjMwLCAxOTIsIDI1NCwgMTM4LCAyNDQsIDEwNSwgMjQ1LCAxNDUsIAorICAgIDIyNSwgMiwgMjUwLCAyNTIsIDIyNiwgMTk4LCAyMjUsIDIsIDI1MCwgMjUyLCAyMTcsIDMzLCAyMjYsIDE5OCwgMjE3LCAzMywgCisgICAgMjUzLCAxODgsIDIyNiwgMTk4LCAyNTMsIDE4OCwgMjIzLCAxMjEsIDIxMywgMjQ3LCAyNDgsIDY2LCAyMTUsIDE5MywgMjUzLCAKKyAgICAyNTAsIDIzMiwgMTIzLCAyMTUsIDI1NSwgMjMwLCAxNDQsIDIzMCwgMTIxLCAyMjMsIDE2NCwgMjE4LCA3LCAyMjMsIDE2NCwgCisgICAgMjMwLCAxMjEsIDI1MSwgMzYsIDI1NCwgMjM4LCAyMTUsIDI0NiwgMjIwLCAxOCwgMjIyLCAxODQsIDIxOSwgMywgMjAzLCAKKyAgICAyMTUsIDI1MywgMjMyLCAyMzYsIDY3LCAyMTUsIDI1MywgMjMyLCAyMzYsIDI0OSwgMTk4LCA1MCwgMjI1LCAyLCAyNTAsIAorICAgIDIzNywgMjIzLCA0NywgMjMyLCAyMzYsIDIxNSwgMjIzLCAyNDQsIDgyLCAyMjYsIDIwMSwgMjI0LCAyNDEsIDI0NywgMTMxLCAKKyAgICAyMjgsIDgwLCAyNDUsIDEzMywgNTAsIDIxOSwgNzQsIDg3LCAyMjgsIDgwLCAyMTksIDc0LCA4NywgMjI0LCAxMjUsIDIzMiwgCisgICAgMTk5LCAyMzYsIDcsIDIzNSwgMTYzLCAyMjUsIDQ0LCA4NywgMjQ3LCAxNTQsIDIyOCwgNTcsIDIzMiwgMTk5LCA4NywgMjI0LCAKKyAgICAyMzUsIDIxMiwgNDEsIDg3LCAyMjgsIDcxLCAyMTIsIDQxLCA4NywgMjUyLCAxMCwgMjI4LCA4MCwgMjUyLCA5LCAyNTIsIDgsIAorICAgIDIzMCwgMTIxLCAyNTIsIDgsIDIyNSwgMjE2LCAyMjgsIDgwLCAyMjUsIDIxNSwgMjUwLCAxMDgsIDI0OSwgMTMyLCAyMzEsIAorICAgIDYxLCA4NywgMjExLCAyMTgsIDg3LCAyMjMsIDYyLCAyNTIsIDE5NSwgODcsIDIxNiwgMzgsIDIxMiwgNDEsIDI1MCwgNSwgCisgICAgMjE5LCAyMzYsIDI1MiwgMTI2LCAyNTIsIDEyNCwgMjI1LCAyNDYsIDI0OSwgMTg1LCAyNDksIDk0LCAyNTIsIDE3NywgMjUwLCAKKyAgICAzMCwgNDMsIDIzMiwgOTUsIDEwOCwgMTYsIDMxLCAyMjQsIDYsIDEwOCwgMTYsIDMxLCAyNTQsIDIwMSwgMTA4LCAxNiwgMzEsIAorICAgIDI0NCwgMTA0LCAxMDgsIDE2LCAzMSwgMjQ1LCAyMzEsIDEwOCwgMTYsIDMxLCAyMTIsIDQwLCAxMDgsIDE2LCAzMSwgMjU0LCAKKyAgICA1MSwgMTA4LCAxNiwgMzEsIDI1NCwgNTIsIDIyMywgMTA4LCAxMDgsIDE2LCAzMSwgMjU0LCA1MiwgMjIzLCAxMDcsIDEwOCwgCisgICAgMTYsIDMxLCAyNTQsIDUyLCAyMTMsIDE0MywgMTA4LCAxNiwgMzEsIDI1NCwgNTIsIDIxMywgMTQyLCAxMDgsIDE2LCAzMSwgCiAgICAgMjEzLCAxNTcsIDEwOCwgMTYsIDMxLCAyMTMsIDE1NiwgMTA4LCAxNiwgMzEsIDIxMywgMTU1LCAxMDgsIDE2LCAzMSwgMjE4LCAKLSAgICA0NCwgMTA4LCAxNiwgMzEsIDIyNSwgMTI1LCAyMTgsIDQ0LCAxMDgsIDE2LCAzMSwgODUsIDIxOCwgNDQsIDEwOCwgMTYsIAotICAgIDMxLCAyMzEsIDU1LCAyMTgsIDcxLCAxMDgsIDE2LCAzMSwgMjMxLCA1NSwgMjE4LCA3MCwgMTA4LCAxNiwgMzEsIDIzMSwgCi0gICAgNTUsIDIxOCwgNjksIDEwOCwgMTYsIDMxLCAyNTAsIDM4LCAxMDgsIDE2LCAzMSwgMjIyLCAxLCAxMDgsIDE2LCAzMSwgMjI4LCAKLSAgICAxODgsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MSwgMTA4LCAxNiwgMzEsIDIxMywgMTQwLCAxMDgsIDE2LCAzMSwgMjIyLCAyMDQsIAotICAgIDIyMiwgMSwgMTA4LCAxNiwgMzEsIDIyMiwgMjA0LCAyMjIsIDAsIDEwOCwgMTYsIDMxLCAyNDIsIDE2NiwgMTA4LCAxNiwgCi0gICAgMzEsIDIxOSwgMTY2LCAxMDgsIDE2LCAzMSwgMjM1LCAxNzcsIDIyNiwgMTUzLCAxMDgsIDE2LCAzMSwgMjM1LCAxNzcsIAotICAgIDIyNiwgMTUyLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzQsIDY0LCAyMzUsIDE3NiwgMTA4LCAxNiwgMzEsIDIyMywgMTAxLCA2NCwgCi0gICAgMjM1LCAxNzYsIDEwOCwgMTYsIDMxLCAyNDksIDE2OCwgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyMzUsIDE3NSwgMjI2LCAKLSAgICAxNTMsIDEwOCwgMTYsIDMxLCAyMTgsIDcyLCA2NCwgMjQ5LCAxNjcsIDEwOCwgMTYsIDMxLCAyNDksIDEzNCwgNjQsIDI0OSwgCi0gICAgMTY3LCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzQsIDY0LCAyNDksIDE2NiwgMTA4LCAxNiwgMzEsIDI0OSwgMTY4LCAyNTQsIDgzLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIyLCAyLCA2NCwgMjQ5LCAxNjgsIDI1NCwgODMsIDEwOCwgMTYsIDMxLCAyMTgsIDcyLCA2NCwgCi0gICAgMjIyLCAyLCA2NCwgMjQ5LCAxNjcsIDEwOCwgMTYsIDMxLCAyMTMsIDI0MywgMTA4LCAxNiwgMzEsIDIxNiwgODQsIDIyNiwgCi0gICAgMTUzLCAxMDgsIDE2LCAzMSwgMjMzLCA1NywgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyNTQsIDgyLCAyMjYsIDE1MywgMTA4LCAKLSAgICAxNiwgMzEsIDIxOCwgNzIsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjIyLCAyLCA2NCwgMjU0LCA4MSwgMTA4LCAxNiwgCi0gICAgMzEsIDIxOCwgNzIsIDY0LCAyMjIsIDIsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjEzLCAxNTgsIDY0LCAyNTQsIDgxLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDY0LCAyNTQsIDgwLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDAsIDEwOCwgMTYsIDMxLCAyMjMsIDk5LCAxMDgsIDE2LCAzMSwgMjIzLCA5OCwgMTA4LCAKLSAgICAxNiwgMzEsIDIyMywgOTcsIDEwOCwgMTYsIDMxLCAyNTQsIDE1NywgMTA4LCAxNiwgMzEsIDI1NCwgMTU2LCAxMDgsIDE2LCAKLSAgICAzMSwgMjMxLCAxNjMsIDEwOCwgMTYsIDMxLCAyMjIsIDcsIDEwOCwgMTYsIDMxLCAyNTMsIDI0NiwgMTA4LCAxNiwgMzEsIAotICAgIDIyMywgMTI1LCAxMDgsIDE2LCAzMSwgMjIzLCAxMjQsIDEwOCwgMTYsIDMxLCAyNTMsIDE4MywgMTA4LCAxNiwgMzEsIDI1MSwgCi0gICAgMjI5LCAyMjYsIDE1MywgMTA4LCAxNiwgMzEsIDIxNywgNDksIDEwOCwgMTYsIDMxLCAyMTcsIDQ4LCAxMDgsIDE2LCAzMSwgCi0gICAgMjI0LCA4LCAyMzIsIDIyMiwgMTA4LCAxNiwgMzEsIDI1MSwgMTgzLCAxMDgsIDE2LCAzMSwgMjUxLCAxODIsIDEwOCwgMTYsIAotICAgIDMxLCAyNTEsIDE4MSwgMTA4LCAxNiwgMzEsIDI1NCwgMTM4LCAxMDgsIDE2LCAzMSwgMjI2LCAyMTgsIDEwOCwgMTYsIDMxLCAKLSAgICAyMTgsIDI0OCwgMTA4LCAxNiwgMzEsIDIxNiwgODIsIDEwOCwgMTYsIDMxLCAyNDIsIDk2LCAxMDgsIDE2LCAzMSwgMjEyLCAKLSAgICAyOCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI2LCAxMDgsIDE2LCAzMSwgMjUxLCAxNCwgMTA4LCAxNiwgMzEsIDIxNSwgODYsIAotICAgIDEwOCwgMTYsIDMxLCAyNTAsIDI0NiwgMjMwLCAxMjIsIDEwOCwgMTYsIDMxLCAyMjEsIDIwMiwgNjQsIDIzNSwgNTUsIDEwOCwgCi0gICAgMTYsIDMxLCAyNTEsIDI1LCAxMDgsIDE2LCAzMSwgMjE1LCAyMTksIDEwOCwgMTYsIDMxLCAyMTgsIDE1NCwgMjE1LCAyMTksIAotICAgIDEwOCwgMTYsIDMxLCAyMzIsIDE0OCwgMTA4LCAxNiwgMzEsIDIxOSwgNTYsIDEwOCwgMTYsIDMxLCAyMTQsIDE0MiwgMTA4LCAKLSAgICAxNiwgMzEsIDI0MCwgMjQ2LCAyNDYsIDY0LCAxMDgsIDE2LCAzMSwgMjUzLCAyMjcsIDEwOCwgMTYsIDMxLCAyMjQsIDIzNCwgCi0gICAgMjUzLCAyMjcsIDEwOCwgMTYsIDMxLCAyNTEsIDE0MiwgMTA4LCAxNiwgMzEsIDIyNCwgMjI1LCAyNTEsIDE0MiwgMTA4LCAKLSAgICAxNiwgMzEsIDI1NCwgMTM1LCAxMDgsIDE2LCAzMSwgMjE4LCAxMTcsIDIxOCwgMjYsIDIxOCwgMTE2LCAxMDgsIDE2LCAzMSwgCi0gICAgMjE4LCAxMTcsIDIxOCwgMjYsIDIxOCwgMTE1LCAxMDgsIDE2LCAzMSwgMjE4LCA2OCwgMTA4LCAxNiwgMzEsIDIyNCwgMjAwLCAKLSAgICAxMDgsIDE2LCAzMSwgMjQ3LCAxODEsIDEwOCwgMTYsIDMxLCAyNDcsIDE4MywgMTA4LCAxNiwgMzEsIDI0NywgMTgyLCAxMDgsIAotICAgIDE2LCAzMSwgMjI0LCAxMzEsIDEwOCwgMTYsIDMxLCAyMjQsIDEyMCwgMTA4LCAxNiwgMzEsIDI0OSwgMTIyLCAxMDgsIDE2LCAKLSAgICAzMSwgMjQ5LCAxMjEsIDEwOCwgMTYsIDMxLCAyNDksIDEyMCwgMTA4LCAxNiwgMzEsIDI0OSwgMTE5LCAxMDgsIDE2LCAzMSwgCi0gICAgMjQ5LCAxMTgsIDEwOCwgMTYsIDMxLCAyNTQsIDE2OSwgMTA4LCAxNiwgMzEsIDI1MiwgMTE5LCA2NCwgMjMxLCAxNDksIAotICAgIDEwOCwgMTYsIDMxLCAyNTIsIDExOSwgNjQsIDIxNCwgMTcsIDEwOCwgMTYsIDMxLCAyMjMsIDU3LCAxMDgsIDE2LCAzMSwgCi0gICAgMjQwLCAyMzgsIDEwOCwgMTYsIDMxLCAyMjgsIDIxMiwgMTA4LCAxNiwgMzEsIDI0OCwgMTQ1LCAxMDgsIDE2LCAzMSwgMjMwLCAKLSAgICAxMzQsIDEwOCwgMTYsIDMxLCAxNjMsIDI0NiwgOTQsIDEwOCwgMTYsIDMxLCAxNjMsIDIyNiwgMTMyLCA5LCAxNCwgMjQwLCAKLSAgICAxMDIsIDksIDE0LCAyNDAsIDEwMSwgOSwgMTQsIDI0MCwgMTAwLCA5LCAxNCwgMjQwLCA5OSwgOSwgMTQsIDI0MCwgOTgsIDksIAotICAgIDE0LCAyNDAsIDk3LCA5LCAxNCwgMjQwLCA5NiwgOSwgMTQsIDI0MCwgOTUsIDksIDE0LCAyNDAsIDk0LCA5LCAxNCwgMjQwLCAKLSAgICA5MywgOSwgMTQsIDI0MCwgOTIsIDksIDE0LCAyNDAsIDkxLCA5LCAxNCwgMjQwLCA5MCwgOSwgMTQsIDI0MCwgODksIDksIAotICAgIDE0LCAyNDAsIDg4LCA5LCAxNCwgMjQwLCA4NywgOSwgMTQsIDI0MCwgODYsIDksIDE0LCAyNDAsIDg1LCA5LCAxNCwgMjQwLCAKLSAgICA4NCwgOSwgMTQsIDI0MCwgODMsIDksIDE0LCAyNDAsIDgyLCA5LCAxNCwgMjQwLCA4MSwgOSwgMTQsIDI0MCwgODAsIDksIAotICAgIDE0LCAyNDAsIDc5LCA5LCAxNCwgMjQwLCA3OCwgOSwgMTQsIDI0MCwgNzcsIDksIDE0LCAyNDAsIDc2LCA5LCAxNCwgMjQwLCAKLSAgICA3NSwgOSwgMTQsIDI0MCwgNzQsIDksIDE0LCAyNDAsIDczLCA5LCAxNCwgMjQwLCA3MiwgOSwgMTQsIDI0MCwgNzEsIDksIAotICAgIDE0LCAyNDAsIDcwLCA5LCAxNCwgMjQwLCA2OSwgOSwgMTQsIDI0MCwgNjgsIDksIDE0LCAyNDAsIDY3LCA5LCAxNCwgMjQwLCAKLSAgICA2NiwgOSwgMTQsIDI0MCwgNjUsIDksIDE0LCAyNDAsIDY0LCA5LCAxNCwgMjQwLCA2MywgOSwgMTQsIDI0MCwgNjIsIDksIAotICAgIDE0LCAyNDAsIDYxLCA5LCAxNCwgMjQwLCA2MCwgOSwgMTQsIDI0MCwgNTksIDksIDE0LCAyNDAsIDU4LCA5LCAxNCwgMjQwLCAKLSAgICA1NywgOSwgMTQsIDI0MCwgNTYsIDksIDE0LCAyNDAsIDU1LCA5LCAxNCwgMjQwLCA1NCwgOSwgMTQsIDI0MCwgNTMsIDksIAotICAgIDE0LCAyNDAsIDUyLCA5LCAxNCwgMjQwLCA1MSwgOSwgMTQsIDI0MCwgNTAsIDksIDE0LCAyNDAsIDQ5LCA5LCAxNCwgMjQwLCAKLSAgICA0OCwgOSwgMTQsIDI0MCwgNDcsIDksIDE0LCAyNDAsIDQ2LCA5LCAxNCwgMjQwLCA0NSwgOSwgMTQsIDI0MCwgNDQsIDksIAotICAgIDE0LCAyNDAsIDQzLCA5LCAxNCwgMjQwLCA0MiwgOSwgMTQsIDI0MCwgNDEsIDksIDE0LCAyNDAsIDQwLCA5LCAxNCwgMjQwLCAKLSAgICAzOSwgOSwgMTQsIDI0MCwgMzgsIDksIDE0LCAyNDAsIDM3LCA5LCAxNCwgMjQwLCAzNiwgOSwgMTQsIDI0MCwgMzUsIDksIAotICAgIDE0LCAyNDAsIDM0LCA5LCAxNCwgMjQwLCAzMywgOSwgMTQsIDI0MCwgMzIsIDksIDE0LCAyNDAsIDMxLCA5LCAxNCwgMjQwLCAKLSAgICAzMCwgOSwgMTQsIDI0MCwgMjksIDksIDE0LCAyNDAsIDI4LCA5LCAxNCwgMjQwLCAyNywgOSwgMTQsIDI0MCwgMjYsIDksIAotICAgIDE0LCAyNDAsIDI1LCA5LCAxNCwgMjQwLCAyNCwgOSwgMTQsIDI0MCwgMjMsIDksIDE0LCAyNDAsIDIyLCA5LCAxNCwgMjQwLCAKLSAgICAyMSwgOSwgMTQsIDI0MCwgMjAsIDksIDE0LCAyNDAsIDE5LCA5LCAxNCwgMjQwLCAxOCwgOSwgMTQsIDI0MCwgMTcsIDksIAotICAgIDE0LCAyNDAsIDE2LCA5LCAxNCwgMjQwLCAxNSwgOSwgMTQsIDI0MCwgMTQsIDksIDE0LCAyNDAsIDEzLCA5LCAxNCwgMjQwLCAKLSAgICAxMiwgOSwgMTQsIDI0MCwgMTEsIDksIDE0LCAyNDAsIDEwLCA5LCAxNCwgMjQwLCA5LCA5LCAxNCwgMjQwLCA4LCA5LCAxNCwgCi0gICAgMjQwLCA3LCA5LCAxNCwgMjQwLCA2LCA5LCAxNCwgMjQwLCA1LCA5LCAxNCwgMjQwLCA0LCA5LCAxNCwgMjQwLCAzLCA5LCAKLSAgICAxNCwgMjQwLCAyLCA5LCAxNCwgMjQwLCAxLCA5LCAxNCwgMjQwLCAwLCA5LCAxNCwgMjM5LCAyNTUsIDksIDE0LCAyMzksIAotICAgIDI1NCwgOSwgMTQsIDIzOSwgMjUzLCA5LCAxNCwgMjM5LCAyNTIsIDksIDE0LCAyMzksIDI1MSwgOSwgMTQsIDIzOSwgMjUwLCAKLSAgICA5LCAxNCwgMjM5LCAyNDksIDksIDE0LCAyMzksIDI0OCwgOSwgMTQsIDIzOSwgMjQ3LCA5LCAxNCwgMjM5LCAyNDYsIDksIAotICAgIDE0LCAyMzksIDI0NSwgOSwgMTQsIDIzOSwgMjQ0LCA5LCAxNCwgMjM5LCAyNDMsIDksIDE0LCAyMzksIDI0MiwgOSwgMTQsIAotICAgIDIzOSwgMjQxLCA5LCAxNCwgMjM5LCAyNDAsIDksIDE0LCAyMzksIDIzOSwgOSwgMTQsIDIzOSwgMjM4LCA5LCAxNCwgMjM5LCAKLSAgICAyMzcsIDksIDE0LCAyMzksIDIzNiwgOSwgMTQsIDIzOSwgMjM1LCA5LCAxNCwgMjM5LCAyMzQsIDksIDE0LCAyMzksIDIzMywgCi0gICAgOSwgMTQsIDIzOSwgMjMyLCA5LCAxNCwgMjM5LCAyMzEsIDksIDE0LCAyMzksIDIzMCwgOSwgMTQsIDIzOSwgMjI5LCA5LCAKLSAgICAxNCwgMjM5LCAyMjgsIDksIDE0LCAyMzksIDIyNywgOSwgMTQsIDIzOSwgMjI2LCA5LCAxNCwgMjM5LCAyMjUsIDksIDE0LCAKLSAgICAyMzksIDIyNCwgOSwgMTQsIDIzOSwgMjIzLCA5LCAxNCwgMjM5LCAyMjIsIDksIDE0LCAyMzksIDIyMSwgOSwgMTQsIDIzOSwgCi0gICAgMjIwLCA5LCAxNCwgMjM5LCAyMTksIDksIDE0LCAyMzksIDIxOCwgOSwgMTQsIDIzOSwgMjE3LCA5LCAxNCwgMjM5LCAyMTYsIAotICAgIDksIDE0LCAyMzksIDIxNSwgOSwgMTQsIDIzOSwgMjE0LCA5LCAxNCwgMjM5LCAyMTMsIDksIDE0LCAyMzksIDIxMiwgOSwgCi0gICAgMTQsIDIzOSwgMjExLCA5LCAxNCwgMjM5LCAyMTAsIDksIDE0LCAyMzksIDIwOSwgOSwgMTQsIDIzOSwgMjA4LCA5LCAxNCwgCi0gICAgMjM5LCAyMDcsIDksIDE0LCAyMzksIDIwNiwgOSwgMTQsIDIzOSwgMjA1LCA5LCAxNCwgMjM5LCAyMDQsIDksIDE0LCAyMzksIAotICAgIDIwMywgOSwgMTQsIDIzOSwgMjAyLCA5LCAxNCwgMjM5LCAyMDEsIDksIDE0LCAyMzksIDIwMCwgOSwgMTQsIDIzOSwgMTk5LCAKLSAgICA5LCAxNCwgMjM5LCAxOTgsIDksIDE0LCAyMzksIDE5NywgOSwgMTQsIDIzOSwgMTk2LCA5LCAxNCwgMjM5LCAxOTUsIDksIAotICAgIDE0LCAyMzksIDE5NCwgOSwgMTQsIDIzOSwgMTkzLCA5LCAxNCwgMjM5LCAxOTIsIDksIDE0LCAyMzksIDE5MSwgOSwgMTQsIAotICAgIDIzOSwgMTkwLCA5LCAxNCwgMjM5LCAxODksIDksIDE0LCAyMzksIDE4OCwgOSwgMTQsIDIzOSwgMTg3LCA5LCAxNCwgMjM5LCAKLSAgICAxODYsIDksIDE0LCAyMzksIDE4NSwgOSwgMTQsIDIzOSwgMTg0LCA5LCAxNCwgMjM5LCAxODMsIDksIDE0LCAyMzksIDE4MiwgCi0gICAgOSwgMTQsIDIzOSwgMTgxLCA5LCAxNCwgMjM5LCAxODAsIDksIDE0LCAyMzksIDE3OSwgOSwgMTQsIDIzOSwgMTc4LCA5LCAKLSAgICAxNCwgMjM5LCAxNzcsIDksIDE0LCAyMzksIDE3NiwgOSwgMTQsIDIzOSwgMTc1LCA5LCAxNCwgMjM5LCAxNzQsIDksIDE0LCAKLSAgICAyMzksIDE3MywgOSwgMTQsIDIzOSwgMTcyLCA5LCAxNCwgMjM5LCAxNzEsIDksIDE0LCAyMzksIDE3MCwgOSwgMTQsIDIzOSwgCi0gICAgMTY5LCA5LCAxNCwgMjM5LCAxNjgsIDksIDE0LCAyMzksIDE2NywgOSwgMTQsIDIzOSwgMTY2LCA5LCAxNCwgMjM5LCAxNjUsIAotICAgIDksIDE0LCAyMzksIDE2NCwgOSwgMTQsIDIzOSwgMTYzLCA5LCAxNCwgMjM5LCAxNjIsIDksIDE0LCAyMzksIDE2MSwgOSwgCi0gICAgMTQsIDIzOSwgMTYwLCA5LCAxNCwgMjM5LCAxNTksIDksIDE0LCAyMzksIDE1OCwgOSwgMTQsIDIzOSwgMTU3LCA5LCAxNCwgCi0gICAgMjM5LCAxNTYsIDksIDE0LCAyMzksIDE1NSwgOSwgMTQsIDIzOSwgMTU0LCA5LCAxNCwgMjM5LCAxNTMsIDksIDE0LCAyMzksIAotICAgIDE1MiwgOSwgMTQsIDIzOSwgMTUxLCA5LCAxNCwgMjM5LCAxNTAsIDksIDE0LCAyMzksIDE0OSwgOSwgMTQsIDIzOSwgMTQ4LCAKLSAgICA5LCAxNCwgMjM5LCAxNDcsIDksIDE0LCAyMzksIDE0NiwgOSwgMTQsIDIzOSwgMTQ1LCA5LCAxNCwgMjM5LCAxNDQsIDksIAotICAgIDE0LCAyMzksIDE0MywgOSwgMTQsIDIzOSwgMTQyLCA5LCAxNCwgMjM5LCAxNDEsIDksIDE0LCAyMzksIDE0MCwgOSwgMTQsIAotICAgIDIzOSwgMTM5LCA5LCAxNCwgMjM5LCAxMzgsIDksIDE0LCAyMzksIDEzNywgOSwgMTQsIDIzOSwgMTM2LCA5LCAxNCwgMjM5LCAKLSAgICAxMzUsIDksIDE0LCAyMzksIDEzNCwgOSwgMTQsIDIzOSwgMTMzLCA5LCAxNCwgMjM5LCAxMzIsIDksIDE0LCAyMzksIDEzMSwgCi0gICAgOSwgMTQsIDIzOSwgMTMwLCA5LCAxNCwgMjM5LCAxMjksIDksIDE0LCAyMzksIDEyOCwgOSwgMTQsIDIzOSwgMTI3LCA5LCAKLSAgICAxNCwgMjM5LCAxMjYsIDksIDE0LCAyMzksIDEyNSwgOSwgMTQsIDIzOSwgMTI0LCA5LCAxNCwgMjM5LCAxMjMsIDksIDE0LCAKLSAgICAyMzksIDEyMiwgOSwgMTQsIDIzOSwgMTIxLCA5LCAxNCwgMjM5LCAxMjAsIDksIDE0LCAyMzksIDExOSwgOSwgMTQsIDIzOSwgCi0gICAgMTE4LCA5LCAxNCwgMjM5LCAxMTcsIDksIDE0LCAyMzksIDExNiwgOSwgMTQsIDIzOSwgMTE1LCA5LCAxNCwgMjM5LCAxMTQsIAotICAgIDksIDE0LCAyMzksIDExMywgOSwgMTQsIDIzOSwgMTEyLCA5LCAxNCwgMjM5LCAxMTEsIDksIDE0LCAyMzksIDExMCwgOSwgCi0gICAgMTQsIDIzOSwgMTA5LCA5LCAxNCwgMjM5LCAxMDgsIDksIDE0LCAyMzksIDEwNywgOSwgMTQsIDIzOSwgMTA2LCA5LCAxNCwgCi0gICAgMjM5LCAxMDUsIDksIDE0LCAyMzksIDEwNCwgOSwgMTQsIDIzOSwgMTAzLCA5LCAxNCwgMjM5LCAxMDIsIDksIDE0LCAyMzksIAotICAgIDEwMSwgOSwgMTQsIDIzOSwgMTAwLCA5LCAxNCwgMjM5LCA5OSwgOSwgMTQsIDIzOSwgOTgsIDksIDE0LCAyMzksIDk3LCA5LCAKLSAgICAxNCwgMjM5LCA5NiwgOSwgMTQsIDIzOSwgOTUsIDksIDE0LCAyMzksIDk0LCA5LCAxNCwgMjM5LCA5MywgOSwgMTQsIDIzOSwgCi0gICAgOTIsIDksIDE0LCAyMzksIDkxLCA5LCAxNCwgMjM5LCA5MCwgOSwgMTQsIDIzOSwgODksIDksIDE0LCAyMzksIDg4LCA5LCAKLSAgICAxNCwgMjM5LCA4NywgOSwgMTQsIDIzOSwgODYsIDksIDE0LCAyMzksIDg1LCA5LCAxNCwgMjM5LCA4NCwgOSwgMTQsIDIzOSwgCi0gICAgODMsIDksIDE0LCAyMzksIDgyLCA5LCAxNCwgMjM5LCA4MSwgOSwgMTQsIDIzOSwgODAsIDksIDE0LCAyMzksIDc5LCA5LCAKLSAgICAxNCwgMjM5LCA3OCwgOSwgMTQsIDIzOSwgNzcsIDksIDE0LCAyMzksIDc2LCA5LCAxNCwgMjM5LCA3NSwgOSwgMTQsIDIzOSwgCi0gICAgNzQsIDksIDE0LCAyMzksIDczLCA5LCAxNCwgMjM5LCA3MiwgOSwgMTQsIDIzOSwgNzEsIDksIDE0LCAyMzksIDcwLCA5LCAKLSAgICAxNCwgMjM5LCA2OSwgOSwgMTQsIDIzOSwgNjgsIDksIDE0LCAyMzksIDY3LCA5LCAxNCwgMjM5LCA2NiwgOSwgMTQsIDIzOSwgCi0gICAgNjUsIDksIDE0LCAyMzksIDY0LCA5LCAxNCwgMjM5LCA2MywgOSwgMTQsIDIzOSwgNjIsIDksIDE0LCAyMzksIDYxLCA5LCAKLSAgICAxNCwgMjM5LCA2MCwgOSwgMTQsIDIzOSwgNTksIDksIDE0LCAyMzksIDU4LCA5LCAxNCwgMjM5LCA1NywgOSwgMTQsIDIzOSwgCi0gICAgNTYsIDksIDE0LCAyMzksIDU1LCA5LCAxNCwgMjM5LCA1NCwgOSwgMTQsIDIzOSwgNTMsIDksIDE0LCAyMzksIDUyLCA5LCAKLSAgICAxNCwgMjM5LCA1MSwgOSwgMTQsIDIzOSwgNTAsIDksIDE0LCAyMzksIDQ5LCA5LCAxNCwgMjM5LCA0OCwgOSwgMTQsIDIzOSwgCi0gICAgNDcsIDksIDE0LCAyMzksIDQ2LCA5LCAxNCwgMjM5LCA0NSwgOSwgMTQsIDIzOSwgNDQsIDksIDE0LCAyMzksIDQzLCA5LCAKLSAgICAxNCwgMjM5LCA0MiwgOSwgMTQsIDIzOSwgNDEsIDksIDE0LCAyMzksIDQwLCA5LCAxNCwgMjM5LCAzOSwgOSwgMTQsIDIzOSwgCi0gICAgMzgsIDksIDE0LCAyMzksIDM3LCA5LCAxNCwgMjM5LCAzNiwgOSwgMTQsIDIzOSwgMzUsIDksIDE0LCAyMzksIDM0LCA5LCAKLSAgICAxNCwgMjM5LCAzMywgOSwgMTQsIDIzOSwgMzIsIDksIDE0LCAyMzksIDMxLCA5LCAxNCwgMjM5LCAzMCwgOSwgMTQsIDIzOSwgCi0gICAgMjksIDksIDE0LCAyMzksIDI4LCA5LCAxNCwgMjM5LCAyNywgOSwgMTQsIDIzOSwgMjYsIDksIDE0LCAyMzksIDI1LCA5LCAKLSAgICAxNCwgMjM5LCAyNCwgOSwgMTQsIDIzOSwgMjMsIDksIDE0LCAyMzksIDIyLCA5LCAxNCwgMjM5LCAyMSwgOSwgMTQsIDIzOSwgCi0gICAgMjAsIDksIDE0LCAyMzksIDE5LCA5LCAxNCwgMjM5LCAxOCwgOSwgMTQsIDIzOSwgMTcsIDksIDE0LCAyMzksIDE2LCA5LCAKLSAgICAxNCwgMjM5LCAxNSwgOSwgMTQsIDIzOSwgMTQsIDksIDE0LCAyMzksIDEzLCA5LCAxNCwgMjM5LCAxMiwgOSwgMTQsIDIzOSwgCi0gICAgMTEsIDksIDE0LCAyMzksIDEwLCA5LCAxNCwgMjM5LCA5LCA5LCAxNCwgMjM5LCA4LCA5LCAxNCwgMjM5LCA3LCA5LCAxNCwgCi0gICAgMjM5LCA2LCA5LCAxNCwgMjM5LCA1LCA5LCAxNCwgMjM5LCA0LCA5LCAxNCwgMjM5LCAzLCA5LCAxNCwgMjM5LCAyLCA5LCAKLSAgICAxNCwgMjM5LCAxLCA5LCAxNCwgMjM5LCAwLCA5LCAxNCwgMjM4LCAyNTUsIDksIDE0LCAyMzgsIDI1NCwgOSwgMTQsIDIzOCwgCi0gICAgMjUzLCA5LCAxNCwgMjM4LCAyNTIsIDksIDE0LCAyMzgsIDI1MSwgOSwgMTQsIDIzOCwgMjUwLCA5LCAxNCwgMjM4LCAyNDksIAotICAgIDksIDE0LCAyMzgsIDI0OCwgOSwgMTQsIDIzOCwgMjQ3LCA5LCAxNCwgMjM4LCAyNDYsIDksIDE0LCAyMzgsIDI0NSwgOSwgCi0gICAgMTQsIDIzOCwgMjQ0LCA5LCAxNCwgMjM4LCAyNDMsIDksIDE0LCAyMzgsIDI0MiwgOSwgMTQsIDIzOCwgMjQxLCA5LCAxNCwgCi0gICAgMjM4LCAyNDAsIDksIDE0LCAyMzgsIDIzOSwgOSwgMTQsIDIzOCwgMjM4LCA5LCAxNCwgMjM4LCAyMzcsIDksIDE0LCAyMzgsIAotICAgIDIzNiwgOSwgMTQsIDIzOCwgMjM1LCA5LCAxNCwgMjM4LCAyMzQsIDksIDE0LCAyMzgsIDIzMywgOSwgMTQsIDIzOCwgMjMyLCAKLSAgICA5LCAxNCwgMjM4LCAyMzEsIDksIDE0LCAyMzgsIDIzMCwgOSwgMTQsIDIzOCwgMjI5LCA5LCAxNCwgMjM4LCAyMjgsIDksIAotICAgIDE0LCAyMzgsIDIyNywgOSwgMTQsIDIzOCwgMjI2LCA5LCAxNCwgMjM4LCAyMjUsIDksIDE0LCAyMzgsIDIyNCwgOSwgMTQsIAotICAgIDIzOCwgMjIzLCA5LCAxNCwgMjM4LCAyMjIsIDksIDE0LCAyMzgsIDIyMSwgOSwgMTQsIDIzOCwgMjIwLCA5LCAxNCwgMjM4LCAKLSAgICAyMTksIDksIDE0LCAyMzgsIDIxOCwgOSwgMTQsIDIzOCwgMjE3LCA5LCAxNCwgMjM4LCAyMTYsIDksIDE0LCAyMzgsIDIxNSwgCi0gICAgOSwgMTQsIDIzOCwgMjE0LCA5LCAxNCwgMjM4LCAyMTMsIDksIDE0LCAyMzgsIDIxMiwgOSwgMTQsIDIzOCwgMjExLCA5LCAKLSAgICAxNCwgMjM4LCAyMTAsIDksIDE0LCAyMzgsIDIwOSwgOSwgMTQsIDIzOCwgMjA4LCA5LCAxNCwgMjM4LCAyMDcsIDksIDE0LCAKLSAgICAyMzgsIDIwNiwgOSwgMTQsIDIzOCwgMjA1LCA5LCAxNCwgMjM4LCAyMDQsIDksIDE0LCAyMzgsIDIwMywgOSwgMTQsIDIzOCwgCi0gICAgMjAyLCA5LCAxNCwgMjM4LCAyMDEsIDksIDE0LCAyMzgsIDIwMCwgOSwgMTQsIDIzOCwgMTk5LCA5LCAxNCwgMjM4LCAxOTgsIAotICAgIDksIDE0LCAyMzgsIDE5NywgOSwgMTQsIDIzOCwgMTk2LCA5LCAxNCwgMjM4LCAxOTUsIDksIDE0LCAyMzgsIDE5NCwgOSwgCi0gICAgMTQsIDIzOCwgMTkzLCA5LCAxNCwgMjM4LCAxOTIsIDksIDE0LCAyMzgsIDE5MSwgOSwgMTQsIDIzOCwgMTkwLCA5LCAxNCwgCi0gICAgMjM4LCAxODksIDksIDE0LCAyMzgsIDE4OCwgOSwgMTQsIDIzOCwgMTg3LCA5LCAxNCwgMjM4LCAxODYsIDksIDE0LCAyMzgsIAotICAgIDE4NSwgOSwgMTQsIDIzOCwgMTg0LCA5LCAxNCwgMjM4LCAxODMsIDksIDE0LCAyMzgsIDE4MiwgOSwgMTQsIDIzOCwgMTgxLCAKLSAgICA5LCAxNCwgMjM4LCAxODAsIDksIDE0LCAyMzgsIDE3OSwgOSwgMTQsIDIzOCwgMTc4LCA5LCAxNCwgMjM4LCAxNzcsIDksIAotICAgIDE0LCAyMzgsIDE3NiwgOSwgMTQsIDIzOCwgMTc1LCA5LCAxNCwgMjM4LCAxNzQsIDksIDE0LCAyMzgsIDE3MywgOSwgMTQsIAotICAgIDIzOCwgMTcyLCA5LCAxNCwgMjM4LCAxNzEsIDksIDE0LCAyMzgsIDE3MCwgOSwgMTQsIDIzOCwgMTY5LCA5LCAxNCwgMjM4LCAKLSAgICAxNjgsIDksIDE0LCAyMzgsIDE2NywgOSwgMTQsIDIzOCwgMTY2LCA5LCAxNCwgMjM4LCAxNjUsIDksIDE0LCAyMzgsIDE2NCwgCi0gICAgOSwgMTQsIDIzOCwgMTYzLCA5LCAxNCwgMjM4LCAxNjIsIDksIDE0LCAyMzgsIDE2MSwgOSwgMTQsIDIzOCwgMTYwLCA5LCAKLSAgICAxNCwgMjM4LCAxNTksIDksIDE0LCAyMzgsIDE1OCwgOSwgMTQsIDIzOCwgMTU3LCA5LCAxNCwgMjM4LCAxNTYsIDksIDE0LCAKLSAgICAyMzgsIDE1NSwgOSwgMTQsIDIzOCwgMTU0LCA5LCAxNCwgMjM4LCAxNTMsIDksIDE0LCAyMzgsIDE1MiwgOSwgMTQsIDIzOCwgCi0gICAgMTUxLCA5LCAxNCwgMjM4LCAxNTAsIDksIDE0LCAyMzgsIDE0OSwgOSwgMTQsIDIzOCwgMTQ4LCA5LCAxNCwgMjM4LCAxNDcsIAotICAgIDksIDE0LCAyMzgsIDE0NiwgOSwgMTQsIDIzOCwgMTQ1LCA5LCAxNCwgMjM4LCAxNDQsIDksIDE0LCAyMzgsIDE0MywgOSwgCi0gICAgMTQsIDIzOCwgMTQyLCA5LCAxNCwgMjM4LCAxNDEsIDksIDE0LCAyMzgsIDE0MCwgOSwgMTQsIDIzOCwgMTM5LCA5LCAxNCwgCi0gICAgMjM4LCAxMzgsIDksIDE0LCAyMzgsIDEzNywgOSwgMTQsIDIzOCwgMTM2LCA5LCAxNCwgMjM4LCAxMzUsIDksIDE0LCAyMzgsIAotICAgIDEzNCwgOSwgMTQsIDIzOCwgMTMzLCA5LCAxNCwgMjM4LCAxMzIsIDksIDE0LCAyMzgsIDEzMSwgOSwgMTQsIDIzOCwgMTMwLCAKLSAgICA5LCAxNCwgMjM4LCAxMjksIDksIDE0LCAyMzgsIDEyOCwgOSwgMTQsIDIzOCwgMTI3LCA5LCAxNCwgMjM4LCAxMjYsIDksIAotICAgIDE0LCAyMzgsIDEyNSwgOSwgMTQsIDIzOCwgMTI0LCA5LCAxNCwgMjM4LCAxMjMsIDksIDE0LCAyMzgsIDEyMiwgOSwgMTQsIAotICAgIDIzOCwgMTIxLCA5LCAxNCwgMjM4LCAxMjAsIDksIDE0LCAyMzgsIDExOSwgOSwgMTQsIDIzOCwgMTE4LCA5LCAxNCwgMjM4LCAKLSAgICAxMTcsIDksIDE0LCAyMzgsIDExNiwgOSwgMTQsIDIzOCwgMTE1LCA5LCAxNCwgMjM4LCAxMTQsIDksIDE0LCAyMzgsIDExMywgCi0gICAgOSwgMTQsIDIzOCwgMTEyLCA5LCAxNCwgMjM4LCAxMTEsIDksIDE0LCAyMzgsIDExMCwgOSwgMTQsIDIzOCwgMTA5LCA5LCAKLSAgICAxNCwgMjM4LCAxMDgsIDksIDE0LCAyMzgsIDEwNywgOSwgMTQsIDIzOCwgMTA2LCA5LCAxNCwgMjM4LCAxMDUsIDksIDE0LCAKLSAgICAyMzgsIDEwNCwgOSwgMTQsIDIzOCwgMTAzLCA5LCAxNCwgMjM4LCAxMDIsIDksIDE0LCAyMzgsIDEwMSwgOSwgMTQsIDIzOCwgCi0gICAgMTAwLCA5LCAxNCwgMjM4LCA5OSwgOSwgMTQsIDIzOCwgOTgsIDksIDE0LCAyMzgsIDk3LCA5LCAxNCwgMjM4LCA5NiwgOSwgCi0gICAgMTQsIDIzOCwgOTUsIDksIDE0LCAyMzgsIDk0LCA5LCAxNCwgMjM4LCA5MywgOSwgMTQsIDIzOCwgOTIsIDksIDE0LCAyMzgsIAotICAgIDkxLCA5LCAxNCwgMjM4LCA5MCwgOSwgMTQsIDIzOCwgODksIDksIDE0LCAyMzgsIDg4LCA5LCAxNCwgMjM4LCA4NywgOSwgCi0gICAgMTQsIDIzOCwgODYsIDksIDE0LCAyMzgsIDg1LCA5LCAxNCwgMjM4LCA4NCwgOSwgMTQsIDIzOCwgODMsIDksIDE0LCAyMzgsIAotICAgIDgyLCA5LCAxNCwgMjM4LCA4MSwgOSwgMTQsIDIzOCwgODAsIDksIDE0LCAyMzgsIDc5LCA5LCAxNCwgMjM4LCA3OCwgOSwgCi0gICAgMTQsIDIzOCwgNzcsIDksIDE0LCAyMzgsIDc2LCA5LCAxNCwgMjM4LCA3NSwgOSwgMTQsIDIzOCwgNzQsIDksIDE0LCAyMzgsIAotICAgIDczLCAyMzMsIDkwLCAyMTcsIDg0LCAxMjksIDIxOSwgMTgsIDEyOSwgMjQ1LCAzMSwgNzgsIDEyOSwgMjIzLCAyNTQsIDc4LCAKLSAgICAxMjksIDU0LCA1MCwgMTI5LCAyNDcsIDEzMiwgNTAsIDEyOSwgMjI1LCAxODIsIDUwLCAxMjksIDI1NCwgMTI2LCAxMjksIAotICAgIDI1NCwgNTcsIDEyOSwgNDMsIDIyNiwgMywgMTI5LCA0NCwgMjI2LCAzLCAxMjksIDI1MywgMjE2LCAxMjksIDk2LCA1MCwgCi0gICAgMTI5LCAyNDksIDIxOSwgMTI5LCAyNDAsIDE2NywgMTI5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDEyOSwgMjE5LCA0NiwgMTI5LCAKLSAgICAyMSwgMjEwLCA4NiwgMTI5LCAyMSwgMTEwLCAxMjksIDIxLCAxMDUsIDEyOSwgMjEsIDE1OCwgMTI5LCAyMSwgMTYxLCAxMjksIAotICAgIDIxLCAxODksIDEyOSwgMjEsIDE5NCwgMTI5LCAyMSwgMTk4LCAxMjksIDIxLCAxOTUsIDEyOSwgMjEsIDIwMCwgMTI5LCAKLSAgICAyNDksIDIyNiwgMTI5LCAyMjAsIDE1MCwgMTI5LCAyMzMsIDE1LCA1MCwgMTI5LCAyNDUsIDk4LCA1MCwgMTI5LCAyNDIsIAotICAgIDEzMCwgNTAsIDEyOSwgMjI0LCAxMywgNzgsIDEyOSwgMjQ5LCAyMTcsIDI1MywgMjA2LCAxMjksIDcsIDYsIDEsIDYxLCAKLSAgICAxMjksIDcsIDYsIDEsIDI1MywgMTU4LCAxMjksIDcsIDYsIDEsIDI1MSwgNjYsIDEyOSwgNywgNiwgMSwgMjQ5LCA2MCwgCi0gICAgMTI5LCA3LCA2LCAxLCA3NSwgMTI5LCA3LCA2LCAxLCAyNDUsIDYsIDEyOSwgNywgNiwgMSwgMjQzLCAyMDIsIDEyOSwgNywgCi0gICAgNiwgMSwgMjQyLCA2MCwgMTI5LCA3LCA2LCAxLCA3MywgMTI5LCA3LCA2LCAxLCAyMzUsIDE0NCwgMTI5LCA3LCA2LCAxLCAKLSAgICAyMzUsIDIzLCAxMjksIDcsIDYsIDEsIDE1NiwgMTI5LCA3LCA2LCAxLCAxOTMsIDEyOSwgNywgNiwgMSwgMjMwLCAyNSwgCi0gICAgMTI5LCA3LCA2LCAxLCA3NiwgMTI5LCA3LCA2LCAxLCAyMjYsIDEwNSwgMTI5LCA3LCA2LCAxLCAyMjQsIDk2LCAxMjksIDcsIAotICAgIDYsIDEsIDE1MywgMTI5LCA3LCA2LCAxLCAyMjIsIDkxLCAxMjksIDcsIDYsIDEsIDIxNywgMTUyLCAxMjksIDcsIDYsIDEsIAotICAgIDcwLCAxMjksIDcsIDYsIDEsIDIxNCwgMTA1LCAxMjksIDcsIDYsIDEsIDIxMiwgOTgsIDEyOSwgNywgNiwgMSwgMjExLCAKLSAgICAxNzgsIDEyOSwgNywgNiwgMSwgMjExLCAxMTcsIDEyOSwgNywgNiwgMSwgMjEwLCAxNTksIDEyOSwgNDMsIDQyLCAxMjcsIAotICAgIDEyOSwgMjIzLCA1MCwgMjE5LCA0NiwgMTI5LCA0NCwgNDIsIDEyNywgMTI5LCAyNTAsIDMxLCAyNTUsIDE0LCAxMjksIDEyMSwgCi0gICAgMjMyLCAyMTMsIDEyOSwgMjQyLCAxMzcsIDI1NSwgMTQsIDEyOSwgNywgNCwgMSwgNjEsIDEyOSwgNywgNCwgMSwgMjUzLCAKLSAgICAxNTgsIDEyOSwgNywgNCwgMSwgMjUxLCA2NiwgMTI5LCA3LCA0LCAxLCAyNDksIDYwLCAxMjksIDcsIDQsIDEsIDc1LCAxMjksIAotICAgIDcsIDQsIDEsIDI0NSwgNiwgMTI5LCA3LCA0LCAxLCAyNDMsIDIwMiwgMTI5LCA3LCA0LCAxLCAyNDIsIDYwLCAxMjksIDcsIAotICAgIDQsIDEsIDczLCAxMjksIDcsIDQsIDEsIDIzNSwgMTQ0LCAxMjksIDcsIDQsIDEsIDIzNSwgMjMsIDEyOSwgNywgNCwgMSwgCi0gICAgMTU2LCAxMjksIDcsIDQsIDEsIDE5MywgMTI5LCA3LCA0LCAxLCAyMzAsIDI1LCAxMjksIDcsIDQsIDEsIDc2LCAxMjksIDcsIAotICAgIDQsIDEsIDIyNiwgMTA1LCAxMjksIDcsIDQsIDEsIDIyNCwgOTYsIDEyOSwgNywgNCwgMSwgMTUzLCAxMjksIDcsIDQsIDEsIAotICAgIDIyMiwgOTEsIDEyOSwgNywgNCwgMSwgMjE3LCAxNTIsIDEyOSwgNywgNCwgMSwgNzAsIDEyOSwgNywgNCwgMSwgMjE0LCAKLSAgICAxMDUsIDEyOSwgNywgNCwgMSwgMjEyLCA5OCwgMTI5LCA3LCA0LCAxLCAyMTEsIDE3OCwgMTI5LCA3LCA0LCAxLCAyMTEsIAotICAgIDExNywgMTI5LCA3LCA0LCAxLCAyMTAsIDE1OSwgMTI5LCA0MywgMjQ5LCA5OSwgMTI3LCAxMjksIDY3LCAyMzIsIDIxMywgCi0gICAgMTI5LCA0NCwgMjQ5LCA5OSwgMTI3LCAxMjksIDE4MiwgMjUxLCA2LCAyMTcsIDg0LCA0NSwgMjIxLCA3OCwgNDUsIDIyMSwgCi0gICAgNjcsIDQ1LCAyMjEsIDU2LCA0NSwgMjIxLCA0NCwgNDUsIDIyMSwgMzMsIDQ1LCAyMjEsIDIyLCA0NSwgMjIxLCAxMSwgNDUsIAotICAgIDIyMSwgMCwgNDUsIDIyMCwgMjQ1LCA0NSwgMjIwLCAyMzcsIDQ1LCAyMjAsIDIzNiwgNDUsIDIyMCwgMjM1LCA0NSwgMjIwLCAKLSAgICAyMzQsIDQ1LCAyMjAsIDIzMiwgNDUsIDIyMCwgMjMxLCA0NSwgMjIwLCAyMzAsIDQ1LCAyMjAsIDIyOSwgNDUsIDIyMCwgCi0gICAgMjI4LCA0NSwgMjIwLCAyMjcsIDQ1LCAyMjAsIDIyNiwgNDUsIDIyMCwgMjI1LCA0NSwgMjIwLCAyMjQsIDQ1LCAyMjAsIAotICAgIDIyMywgNDUsIDIyMCwgMjIxLCA0NSwgMjIwLCAyMjAsIDQ1LCAyMjAsIDIxOSwgNDUsIDIyMCwgMjE4LCA0NSwgMjIwLCAKLSAgICAyMTcsIDQ1LCAyMjAsIDIxNiwgNDUsIDIyMCwgMjE1LCA0NSwgMjIwLCAyMTQsIDQ1LCAyMjAsIDIxMywgNDUsIDIyMCwgCi0gICAgMjEyLCA0NSwgMjIwLCAyMTAsIDQ1LCAyMjAsIDIwOSwgNDUsIDIyMCwgMjA4LCA0NSwgMjIwLCAyMDcsIDQ1LCAyMjAsIAotICAgIDIwNiwgNDUsIDIyMCwgMjA1LCA0NSwgMjIwLCAyMDQsIDQ1LCAyMjAsIDIwMywgNDUsIDIyMCwgMjAyLCA0NSwgMjIwLCAKLSAgICAyMDEsIDQ1LCAyMjAsIDE5OSwgNDUsIDIyMCwgMTk4LCA0NSwgMjIwLCAxOTcsIDQ1LCAyMjAsIDE5NiwgNDUsIDIyMCwgCi0gICAgMTk1LCA0NSwgMjIwLCAxOTQsIDQ1LCAyMjAsIDE5MywgNDUsIDIyMCwgMTkyLCA0NSwgMjIwLCAxOTEsIDQ1LCAyMjAsIAotICAgIDE5MCwgNDUsIDIyMCwgMTg4LCA0NSwgMjIwLCAxODcsIDQ1LCAyMjAsIDE4NiwgNDUsIDIyMCwgMTg1LCA0NSwgMjIwLCAKLSAgICAxODQsIDQ1LCAyMjAsIDE4MywgNDUsIDIyMCwgMTgyLCA0NSwgMjIwLCAxODEsIDQ1LCAyMjAsIDE4MCwgNDUsIDIyMCwgCi0gICAgMTc5LCA0NSwgMjIwLCAxNzcsIDQ1LCAyMjAsIDE3NiwgNDUsIDIyMCwgMTc1LCA0NSwgMjIwLCAxNzQsIDQ1LCAyMjAsIAotICAgIDE3MywgNDUsIDIyMCwgMTcyLCA0NSwgMjIwLCAxNzEsIDQ1LCAyMjAsIDE3MCwgNDUsIDIyMCwgMTY5LCA0NSwgMjIwLCAKLSAgICAxNjgsIDQ1LCAyMjAsIDE2NiwgNDUsIDIyMCwgMTY1LCA0NSwgMjIwLCAxNjQsIDQ1LCAyMjAsIDE2MywgNDUsIDIyMCwgCi0gICAgMTYyLCA0NSwgMjIwLCAxNjEsIDQ1LCAyMjAsIDE2MCwgNDUsIDIyMCwgMTU5LCA0NSwgMjIwLCAxNTgsIDQ1LCAyMjAsIAotICAgIDE1NywgNDUsIDIyMSwgMTU0LCA0NSwgMjIxLCAxNTMsIDQ1LCAyMjEsIDE1MiwgNDUsIDIyMSwgMTUxLCA0NSwgMjIxLCAKLSAgICAxNTAsIDQ1LCAyMjEsIDE0OSwgNDUsIDIyMSwgMTQ4LCA0NSwgMjIxLCAxNDcsIDQ1LCAyMjEsIDE0NiwgNDUsIDIyMSwgCi0gICAgMTQ1LCA0NSwgMjIxLCAxNDMsIDQ1LCAyMjEsIDE0MiwgNDUsIDIyMSwgMTQxLCA0NSwgMjIxLCAxNDAsIDQ1LCAyMjEsIAotICAgIDEzOSwgNDUsIDIyMSwgMTM4LCA0NSwgMjIxLCAxMzcsIDQ1LCAyMjEsIDEzNiwgNDUsIDIyMSwgMTM1LCA0NSwgMjIxLCAKLSAgICAxMzQsIDQ1LCAyMjEsIDEzMiwgNDUsIDIyMSwgMTMxLCA0NSwgMjIxLCAxMzAsIDQ1LCAyMjEsIDEyOSwgNDUsIDIyMSwgCi0gICAgMTI4LCA0NSwgMjIxLCAxMjcsIDQ1LCAyMjEsIDEyNiwgNDUsIDIyMSwgMTI1LCA0NSwgMjIxLCAxMjQsIDQ1LCAyMjEsIAotICAgIDEyMywgNDUsIDIyMSwgMTIxLCA0NSwgMjIxLCAxMjAsIDQ1LCAyMjEsIDExOSwgNDUsIDIyMSwgMTE4LCA0NSwgMjIxLCAKLSAgICAxMTcsIDQ1LCAyMjEsIDExNiwgNDUsIDIyMSwgMTE1LCA0NSwgMjIxLCAxMTQsIDQ1LCAyMjEsIDExMywgNDUsIDIyMSwgCi0gICAgMTEyLCA0NSwgMjIxLCAxMTAsIDQ1LCAyMjEsIDEwOSwgNDUsIDIyMSwgMTA4LCA0NSwgMjIxLCAxMDcsIDQ1LCAyMjEsIAotICAgIDEwNiwgNDUsIDIyMSwgMTA1LCA0NSwgMjIxLCAxMDQsIDQ1LCAyMjEsIDEwMywgNDUsIDIyMSwgMTAyLCA0NSwgMjIxLCAKLSAgICAxMDEsIDQ1LCAyMjEsIDk5LCA0NSwgMjIxLCA5OCwgNDUsIDIyMSwgOTcsIDQ1LCAyMjEsIDk2LCA0NSwgMjIxLCA5NSwgNDUsIAotICAgIDIyMSwgOTQsIDQ1LCAyMjEsIDkzLCA0NSwgMjIxLCA5MiwgNDUsIDIyMSwgOTEsIDQ1LCAyMjEsIDkwLCA0NSwgMjIxLCA4OCwgCi0gICAgNDUsIDIyMSwgODcsIDQ1LCAyMjEsIDg2LCA0NSwgMjIxLCA4NSwgNDUsIDIyMSwgODQsIDQ1LCAyMjEsIDgzLCA0NSwgMjIxLCAKLSAgICA4MiwgNDUsIDIyMSwgODEsIDQ1LCAyMjEsIDgwLCA0NSwgMjIxLCA3OSwgNDUsIDIyMSwgNzcsIDQ1LCAyMjEsIDc2LCA0NSwgCi0gICAgMjIxLCA3NSwgNDUsIDIyMSwgNzQsIDQ1LCAyMjEsIDczLCA0NSwgMjIxLCA3MiwgNDUsIDIyMSwgNzEsIDQ1LCAyMjEsIDcwLCAKLSAgICA0NSwgMjIxLCA2OSwgNDUsIDIyMSwgNjgsIDQ1LCAyMjEsIDY2LCA0NSwgMjIxLCA2NSwgNDUsIDIyMSwgNjQsIDQ1LCAyMjEsIAotICAgIDYzLCA0NSwgMjIxLCA2MiwgNDUsIDIyMSwgNjEsIDQ1LCAyMjEsIDYwLCA0NSwgMjIxLCA1OSwgNDUsIDIyMSwgNTgsIDQ1LCAKLSAgICAyMjEsIDU3LCA0NSwgMjIxLCA1NSwgNDUsIDIyMSwgNTQsIDQ1LCAyMjEsIDUzLCA0NSwgMjIxLCA1MiwgNDUsIDIyMSwgNTEsIAotICAgIDQ1LCAyMjEsIDUwLCA0NSwgMjIxLCA0OSwgNDUsIDIyMSwgNDgsIDQ1LCAyMjEsIDQ3LCA0NSwgMjIxLCA0NiwgNDUsIDIyMSwgCi0gICAgNDMsIDQ1LCAyMjEsIDQyLCA0NSwgMjIxLCA0MSwgNDUsIDIyMSwgNDAsIDQ1LCAyMjEsIDM5LCA0NSwgMjIxLCAzOCwgNDUsIAotICAgIDIyMSwgMzcsIDQ1LCAyMjEsIDM2LCA0NSwgMjIxLCAzNSwgNDUsIDIyMSwgMzQsIDQ1LCAyMjEsIDMyLCA0NSwgMjIxLCAzMSwgCi0gICAgNDUsIDIyMSwgMzAsIDQ1LCAyMjEsIDI5LCA0NSwgMjIxLCAyOCwgNDUsIDIyMSwgMjcsIDQ1LCAyMjEsIDI2LCA0NSwgMjIxLCAKLSAgICAyNSwgNDUsIDIyMSwgMjQsIDQ1LCAyMjEsIDIzLCA0NSwgMjIxLCAyMSwgNDUsIDIyMSwgMjAsIDQ1LCAyMjEsIDE5LCA0NSwgCi0gICAgMjIxLCAxOCwgNDUsIDIyMSwgMTcsIDQ1LCAyMjEsIDE2LCA0NSwgMjIxLCAxNSwgNDUsIDIyMSwgMTQsIDQ1LCAyMjEsIDEzLCAKLSAgICA0NSwgMjIxLCAxMiwgNDUsIDIyMSwgMTAsIDQ1LCAyMjEsIDksIDQ1LCAyMjEsIDgsIDQ1LCAyMjEsIDcsIDQ1LCAyMjEsIDYsIAotICAgIDQ1LCAyMjEsIDUsIDQ1LCAyMjEsIDQsIDQ1LCAyMjEsIDMsIDQ1LCAyMjEsIDIsIDQ1LCAyMjEsIDEsIDQ1LCAyMjAsIDI1NSwgCi0gICAgNDUsIDIyMCwgMjU0LCA0NSwgMjIwLCAyNTMsIDQ1LCAyMjAsIDI1MiwgNDUsIDIyMCwgMjUxLCA0NSwgMjIwLCAyNTAsIDQ1LCAKLSAgICAyMjAsIDI0OSwgNDUsIDIyMCwgMjQ4LCA0NSwgMjIwLCAyNDcsIDQ1LCAyMjAsIDI0NiwgNDUsIDIyMCwgMjQ0LCA0NSwgCi0gICAgMjIwLCAyNDMsIDQ1LCAyMjAsIDI0MiwgNDUsIDIyMCwgMjQxLCA0NSwgMjIwLCAyNDAsIDQ1LCAyMjAsIDIzOSwgNDUsIAotICAgIDIyMCwgMjM4LCAyMjcsIDIwMiwgMjI3LCAyMDQsIDIxOCwgMTUyLCA2NCwgMjQxLCAyMzMsIDIxOSwgNDgsIDIxOCwgMTUyLCAKLSAgICA2NCwgMjE2LCAyMTIsIDIxOCwgODUsIDI0NSwgMTQzLCA2NCwgMjE2LCAyMTIsIDI0NSwgNTYsIDI0NSwgMTQzLCA2NCwgCi0gICAgMjE1LCAyNDMsIDI0NSwgMTA5LCAyNDUsIDEzMiwgMjQ1LCAxMzMsIDI1NSwgNywgMjU1LCA4LCAyNTQsIDE2NywgMjUyLCAKLSAgICA0NywgMjUyLCAxNzksIDI1MSwgMTMxLCAxMzUsIDIxNywgODksIDIwMywgMjE3LCA4OSwgMjQwLCAyMjcsIDIxNywgOTMsIAotICAgIDIzMiwgMjE0LCAyNDQsIDE0NSwgMTY2LCAyMzIsIDIxMywgMjQ1LCAxNDMsIDY0LCAyMzIsIDIxMywgMjMzLCAwLCAyMjgsIAotICAgIDEzNSwgMjQ1LCAxMTIsIDIzMiwgMjE0LCAyMTcsIDg5LCA2NywgMjE3LCA4OSwgMjEyLCAxMTgsIDI0NCwgMjAsIDI0NCwgCi0gICAgMTQ1LCAyNDQsIDEyNSwgMjUwLCAyMzAsIDIyMywgNTMsIDI0OSwgMTQzLCAyMjAsIDI4LCAyMjYsIDEzMCwgMjMyLCAxNTAsIAotICAgIDExMCwgMjE5LCA1OCwgMjIwLCAyOCwgMjM1LCAyNTUsIDIzMiwgMTUwLCAyMTAsIDg2LCAyMTksIDE5MSwgMjQ4LCAxNTEsIAotICAgIDIzMiwgMjA0LCAyNDUsIDc3LCAyNDcsIDE1NSwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDExMCwgMjQ4LCAxNDEsIDI0OCwgMzEsIAotICAgIDI0OSwgMTc4LCAxMDUsIDI0OCwgMTQwLCAyNDgsIDMxLCAyNDksIDE3OCwgMTU4LCAyNDgsIDEzOSwgMjQ4LCAzMSwgMjQ5LCAKLSAgICAxNzgsIDE2MSwgMjQ4LCAxMzgsIDE1MiwgMjU1LCA3LCAyMjksIDIwOSwgMjE3LCAxNzcsIDIzNiwgNjIsIDIxNywgMTgwLCAKLSAgICAyNDUsIDE0MywgNjQsIDIxNSwgMjQ0LCAyNTEsIDIxMywgMjQ1LCA2MiwgMjUxLCA1LCAyNTEsIDcsIDI0NSwgMTQzLCA2NCwgCi0gICAgMjMxLCA4MSwgMjQ1LCAxMTAsIDIxOCwgNjEsIDIxOCwgNzgsIDI0NSwgNzcsIDI0NSwgNzgsIDIzNSwgMjMyLCAyMjAsIAotICAgIDEzOCwgMTYxLCAyNDQsIDEwNywgMjIwLCAxMzcsIDI0MywgMjM3LCAyMzUsIDIzMiwgMjIwLCAxMzgsIDE1OCwgMjQyLCAKLSAgICAxMjEsIDIyMCwgMTM3LCAyNDIsIDExOCwgMjM1LCAyMzIsIDIyMCwgMTM4LCAxMDUsIDIyMywgMTIxLCAyMjAsIDEzNywgCi0gICAgMjIyLCAxNDUsIDIzNSwgMjMyLCAyMjAsIDEzOCwgMTEwLCAyMTQsIDE3NCwgMjIwLCAxMzcsIDIxNCwgMTMzLCAyMTksIDIxLCAKLSAgICAyNDgsIDYzLCAyNDgsIDY1LCAyMjYsIDc4LCAyNTAsIDE0MiwgMjI2LCA4MCwgMTI1LCAyMjYsIDI0MCwgMjI0LCAxOTMsIAotICAgIDI0MSwgNDcsIDI1MSwgMTUwLCAyMjUsIDE3MywgMjQxLCAyMDMsIDI1MSwgMTYxLCAyMjgsIDc1LCAyNTEsIDE1MCwgMjQxLCAKLSAgICAyMDMsIDIyOSwgMTc1LCAyMzUsIDI0MiwgMjM1LCAyNDQsIDIyOSwgODIsIDIzMiwgMjEzLCAyMjksIDk5LCAyMTgsIDE1MiwgCi0gICAgNjQsIDIyMSwgMTU4LCAyNTQsIDE4LCAyMTgsIDIyMywgMjQ1LCAxNDMsIDY0LCAyMjEsIDE1OCwgMjU0LCAxOCwgMjQ1LCAKLSAgICA4MCwgMTM1LCAyMTcsIDkwLCAyMjAsIDEyNywgMjAzLCAyMTcsIDkwLCAyMjAsIDEyNywgMjQwLCAyMjQsIDEzNSwgMjE3LCAKLSAgICA5MCwgMiwgMjM1LCAzNSwgMjAzLCAyMTcsIDkwLCAyLCAyMzUsIDM1LCAyNDAsIDIyNSwgMjMyLCAyMTQsIDIxNywgOTAsIAotICAgIDIyMCwgMTI3LCA2NywgMjE3LCA5MCwgMjIwLCAxMjcsIDIxMiwgMTE3LCAyMjUsIDI1MywgMjMyLCAyMTQsIDI0NCwgMTQsIAotICAgIDIyNSwgMjUzLCAyMzIsIDIxNCwgMjQ2LCAxMDYsIDIyNSwgMzIsIDIyNSwgMjUzLCAyMzIsIDIxNCwgMjUyLCAxNzgsIDIyNSwgCi0gICAgMjUzLCAyMzIsIDIxNCwgMjE0LCAxNjMsIDIyNSwgMjgsIDIyMywgNTAsIDIzMiwgMjE0LCAyNDQsIDE0NSwgMjIzLCA1MCwgCi0gICAgMjM1LCAyNDIsIDIyMywgMzUsIDIxOSwgMTU1LCAyMjAsIDI4LCAxMDUsIDIxOSwgMTUyLCAyMTgsIDIyNSwgMjE5LCAxNTUsIAotICAgIDIyMCwgMjgsIDE1OCwgMjE5LCAxNTEsIDIxOCwgMjI0LCAyNDgsIDMxLCAyNDksIDE3OCwgMjE4LCAxMDUsIDI0OCwgMTM3LCAKLSAgICAyMjQsIDE4MywgMjE0LCAxMzIsIDExMCwgMjI0LCAxODMsIDIxNCwgMTMwLCAyMjQsIDE0OSwgMjI0LCAxODMsIDIxNCwgCi0gICAgMTMyLCAxMDUsIDIyNCwgMTgzLCAyMTQsIDEyOSwgMjI0LCAxNDgsIDIyMCwgMTI4LCAyMTUsIDI0MiwgMjE4LCAxNTEsIAotICAgIDIxOCwgODksIDI1MSwgNiwgMjUwLCAxNDIsIDI1MCwgMjA5LCAyMzEsIDQzLCAyMTIsIDU5LCAyMzAsIDQzLCAyMTgsIDE1MiwgCi0gICAgNjQsIDI0MiwgMTA3LCAyNTQsIDE4LCAyMTgsIDE1MiwgNjQsIDIyNCwgMTY2LCAyNTQsIDE4LCAyMTksIDIwLCAyNDUsIAotICAgIDE0MywgNjQsIDI0MiwgMTA3LCAyNTQsIDE4LCAyNDUsIDE0MywgNjQsIDIyNCwgMTY2LCAyNTQsIDE4LCAyNDUsIDEwNywgCi0gICAgMjE4LCAxNTIsIDY0LCAyMTgsIDEwNSwgMjE5LCAzNSwgMjE5LCAxNTUsIDI0MiwgMTQxLCAxMzUsIDIzNSwgMTk1LCAyMjAsIAotICAgIDEwNywgMjE5LCAxNTUsIDEzNSwgMjM1LCAxOTUsIDIyMSwgMTk0LCAyNDksIDE3OCwgMjIwLCAxMzUsIDIzNSwgMTk1LCAKLSAgICAyNDksIDExMywgMjE4LCAxMDYsIDIxNiwgMjM2LCAyMTgsIDE2OCwgMjI2LCAxNjksIDIxNywgMTY3LCAyNDksIDIxOCwgCi0gICAgMjI2LCAxNDIsIDIyNCwgMTg0LCAyMzEsIDQyLCAyMjUsIDE5LCAyNTQsIDUzLCAyMjQsIDE3OCwgMjQ5LCAyMTgsIDI1NCwgCi0gICAgNjksIDIyOSwgMTYzLCAyMTksIDIwMCwgNywgNiwgMSwgMjQyLCAyNDksIDcsIDQsIDEsIDI0MiwgMjQ5LCAyNTAsIDE1OSwgCi0gICAgMTY1LCAxLCAyMzIsIDE3NSwgMjA5LCAyMDksIDEsIDI0NCwgNDQsIDI0NCwgMzYsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAKLSAgICAyNDQsIDE1NywgMjA5LCAyMDksIDEsIDIyMiwgMjExLCAyMDksIDIwOSwgMSwgMjMyLCAxNTYsIDYzLCAxNjQsIDI1MSwgCi0gICAgMjIzLCAyMjAsIDMsIDI0MiwgMjE1LCAyMzAsIDI0OCwgMjIzLCA0MSwgMjQzLCAyMTYsIDI0MywgMjE1LCAyNDMsIDIxNCwgCi0gICAgMjMwLCA0NSwgMjA5LCAyNTEsIDIwOSwgMjUyLCAyMDksIDI1NCwgMjMyLCAxMDIsIDIyMiwgMjE5LCAyMzIsIDEwMywgMjIyLCAKLSAgICAyMjAsIDIyNSwgMjIzLCAyMzIsIDEwMSwgMjIyLCAyMTgsIDIyOCwgMTA2LCAyMzAsIDE2NSwgMjExLCAyMjksIDIxMiwgMTUsIAotICAgIDI0NSwgMTYyLCAyNDMsIDIyNiwgMjMwLCAyMjksIDIyNiwgMTk3LCAyMTQsIDEzNCwgODcsIDIzMCwgMjI5LCAyNDgsIDE1NywgCi0gICAgODcsIDgsIDMsIDIzNSwgMTU4LCA3OCwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDcxLCAyMzMsIDIwLCAxMjcsIAotICAgIDIxMywgMTE4LCAyMTMsIDcsIDIxMiwgMTk1LCAyMTIsIDE4NCwgMjEyLCAxNzMsIDIxMiwgMTYyLCAyMTIsIDE1MSwgMjEyLCAKLSAgICAxNDAsIDIxMiwgMTI5LCAyMTMsIDExNywgMjEzLCAxMDYsIDIxMywgOTUsIDIxMywgODQsIDIxMywgNzMsIDIxMywgNjIsIAotICAgIDIxMywgNTEsIDI1MSwgNzEsIDIyNiwgMTU1LCA3OCwgMjUxLCAxOTYsIDIwOSwgMjUzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgCi0gICAgMjE5LCAxMDIsIDI1MCwgNzMsIDIxNCwgOSwgMjEzLCA0MCwgMjEzLCAyOSwgMjEzLCAxOCwgMjEzLCA2LCAyMTIsIDI1MSwgCi0gICAgMjEyLCAyNDAsIDIxMiwgMjI5LCAyMTIsIDIxOCwgMjEyLCAyMDcsIDIxMiwgMTk5LCAyMTIsIDE5OCwgMjEyLCAxOTcsIAotICAgIDIxMiwgMTk2LCAyMTIsIDE5NCwgMjEyLCAxOTMsIDIxMiwgMTkyLCAyMTIsIDE5MSwgMjEyLCAxOTAsIDIxMiwgMTg5LCAKLSAgICAyMTIsIDE4OCwgMjEyLCAxODcsIDIxMiwgMTg2LCAyMTIsIDE4NSwgMjEyLCAxODMsIDIxMiwgMTgyLCAyMTIsIDE4MSwgCi0gICAgMjEyLCAxODAsIDIxMiwgMTc5LCAyMTIsIDE3OCwgMjEyLCAxNzcsIDIxMiwgMTc2LCAyMTIsIDE3NSwgMjEyLCAxNzQsIAotICAgIDIxMiwgMTcyLCAyMTIsIDE3MSwgMjEyLCAxNzAsIDIxMiwgMTY5LCAyMTIsIDE2OCwgMjEyLCAxNjcsIDIxMiwgMTY2LCAKLSAgICAyMTIsIDE2NSwgMjEyLCAxNjQsIDIxMiwgMTYzLCAyMTIsIDE2MSwgMjEyLCAxNjAsIDIxMiwgMTU5LCAyMTIsIDE1OCwgCi0gICAgMjEyLCAxNTcsIDIxMiwgMTU2LCAyMTIsIDE1NSwgMjEyLCAxNTQsIDIxMiwgMTUzLCAyMTIsIDE1MiwgMjEyLCAxNTAsIAotICAgIDIxMiwgMTQ5LCAyMTIsIDE0OCwgMjEyLCAxNDcsIDIxMiwgMTQ2LCAyMTIsIDE0NSwgMjEyLCAxNDQsIDIxMiwgMTQzLCAKLSAgICAyMTIsIDE0MiwgMjEyLCAxNDEsIDIxMiwgMTM5LCAyMTIsIDEzOCwgMjEyLCAxMzcsIDIxMiwgMTM2LCAyMTIsIDEzNSwgCi0gICAgMjEyLCAxMzQsIDIxMiwgMTMzLCAyMTIsIDEzMiwgMjEyLCAxMzEsIDIxMiwgMTMwLCAyMTIsIDEyOCwgMjEyLCAxMjcsIAotICAgIDIxMiwgMTI2LCAyMTIsIDEyNSwgMjEyLCAxMjQsIDIxMiwgMTIzLCAyMTIsIDEyMiwgMjEyLCAxMjEsIDIxMiwgMTIwLCAKLSAgICAyMTIsIDExOSwgMjEzLCAxMTYsIDIxMywgMTE1LCAyMTMsIDExNCwgMjEzLCAxMTMsIDIxMywgMTEyLCAyMTMsIDExMSwgCi0gICAgMjEzLCAxMTAsIDIxMywgMTA5LCAyMTMsIDEwOCwgMjEzLCAxMDcsIDIxMywgMTA1LCAyMTMsIDEwNCwgMjEzLCAxMDMsIAotICAgIDIxMywgMTAyLCAyMTMsIDEwMSwgMjEzLCAxMDAsIDIxMywgOTksIDIxMywgOTgsIDIxMywgOTcsIDIxMywgOTYsIDIxMywgCi0gICAgOTQsIDIxMywgOTMsIDIxMywgOTIsIDIxMywgOTEsIDIxMywgOTAsIDIxMywgODksIDIxMywgODgsIDIxMywgODcsIDIxMywgCi0gICAgODYsIDIxMywgODUsIDIxMywgODMsIDIxMywgODIsIDIxMywgODEsIDIxMywgODAsIDIxMywgNzksIDIxMywgNzgsIDIxMywgCi0gICAgNzcsIDIxMywgNzYsIDIxMywgNzUsIDIxMywgNzQsIDIxMywgNzIsIDIxMywgNzEsIDIxMywgNzAsIDIxMywgNjksIDIxMywgCi0gICAgNjgsIDIxMywgNjcsIDIxMywgNjYsIDIxMywgNjUsIDIxMywgNjQsIDIxMywgNjMsIDIxMywgNjEsIDIxMywgNjAsIDIxMywgCi0gICAgNTksIDIxMywgNTgsIDIxMywgNTcsIDIxMywgNTYsIDIxMywgNTUsIDIxMywgNTQsIDIxMywgNTMsIDIxMywgNTIsIDIxMywgCi0gICAgNTAsIDIxMywgNDksIDIxMywgNDgsIDIxMywgNDcsIDIxMywgNDYsIDIxMywgNDUsIDIxMywgNDQsIDIxMywgNDMsIDIxMywgCi0gICAgNDIsIDIxMywgNDEsIDIxMywgMzksIDIxMywgMzgsIDIxMywgMzcsIDIxMywgMzYsIDIxMywgMzUsIDIxMywgMzQsIDIxMywgCi0gICAgMzMsIDIxMywgMzIsIDIxMywgMzEsIDIxMywgMzAsIDIxMywgMjgsIDIxMywgMjcsIDIxMywgMjYsIDIxMywgMjUsIDIxMywgCi0gICAgMjQsIDIxMywgMjMsIDIxMywgMjIsIDIxMywgMjEsIDIxMywgMjAsIDIxMywgMTksIDIxMywgMTcsIDIxMywgMTYsIDIxMywgCi0gICAgMTUsIDIxMywgMTQsIDIxMywgMTMsIDIxMywgMTIsIDIxMywgMTEsIDIxMywgMTAsIDIxMywgOSwgMjEzLCA4LCAyMTMsIDUsIAotICAgIDIxMywgNCwgMjEzLCAzLCAyMTMsIDIsIDIxMywgMSwgMjEzLCAwLCAyMTIsIDI1NSwgMjEyLCAyNTQsIDIxMiwgMjUzLCAKLSAgICAyMTIsIDI1MiwgMjEyLCAyNTAsIDIxMiwgMjQ5LCAyMTIsIDI0OCwgMjEyLCAyNDcsIDIxMiwgMjQ2LCAyMTIsIDI0NSwgCi0gICAgMjEyLCAyNDQsIDIxMiwgMjQzLCAyMTIsIDI0MiwgMjEyLCAyNDEsIDIxMiwgMjM5LCAyMTIsIDIzOCwgMjEyLCAyMzcsIAotICAgIDIxMiwgMjM2LCAyMTIsIDIzNSwgMjEyLCAyMzQsIDIxMiwgMjMzLCAyMTIsIDIzMiwgMjEyLCAyMzEsIDIxMiwgMjMwLCAKLSAgICAyMTIsIDIyOCwgMjEyLCAyMjcsIDIxMiwgMjI2LCAyMTIsIDIyNSwgMjEyLCAyMjQsIDIxMiwgMjIzLCAyMTIsIDIyMiwgCi0gICAgMjEyLCAyMjEsIDIxMiwgMjIwLCAyMTIsIDIxOSwgMjEyLCAyMTcsIDIxMiwgMjE2LCAyMTIsIDIxNSwgMjEyLCAyMTQsIAotICAgIDIxMiwgMjEzLCAyMTIsIDIxMiwgMjEyLCAyMTEsIDIxMiwgMjEwLCAyMTIsIDIwOSwgMjEyLCAyMDgsIDIxMiwgMjA2LCAKLSAgICAyMTIsIDIwNSwgMjEyLCAyMDQsIDIxMiwgMjAzLCAyMTIsIDIwMiwgMjEyLCAyMDEsIDIxMiwgMjAwLCA3LCA2LCAxLCAxMTUsIAotICAgIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDExNSwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgCi0gICAgMSwgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIAotICAgIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgCi0gICAgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAKLSAgICAyNTAsIDMxLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjUwLCAyMzQsIDcsIAotICAgIDYsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAKLSAgICAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDU5LCA3NywgMjIsIDE0MiwgNywgNCwgMSwgMjI5LCAKLSAgICA4MCwgMiwgMjE2LCA4OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCAKLSAgICA2NywgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCAKLSAgICA3LCA0LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIAotICAgIDIyLCAxNDIsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDY3LCAKLSAgICAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAKLSAgICAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxMTUsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxMTUsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxNjAsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA3NywgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAKLSAgICA1OSwgNzcsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA0LCAxLCAxNjAsIDIsIDU5LCAKLSAgICA3NywgMjIsIDE4MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDU5LCA3NywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDQsIAotICAgIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNSwgMjIsIDU5LCA3NywgMjIsIDE0MiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgCi0gICAgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjUsIDIyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDYsIAotICAgIDEsIDIzNSwgMTQ1LCAyLCAxODIsIDcsIDQsIDEsIDIzNSwgMTQ1LCAyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDYsIDEsIDIzMywgCi0gICAgMTQ5LCAyLCAxODIsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxODIsIDcsIDYsIDEsIDIzMiwgNTAsIDIsIDE4MiwgNywgNCwgCi0gICAgMSwgMjMyLCA1MCwgMiwgMTgyLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMTgyLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMTgyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTgyLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTgyLCAKLSAgICA3LCA0LCAxLCAyNTQsIDI0NCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIwNCwgMTQ0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgCi0gICAgMjA0LCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMTUsIAotICAgIDk0LCAyMTQsIDEwNiwgMiwgMTQyLCA3LCA0LCAxLCAyMjEsIDE5NiwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIyMSwgMTk2LCAKLSAgICAyLCAxNDIsIDcsIDQsIDEsIDI0MSwgNTEsIDIyMSwgMTk2LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQxLCA1MSwgMjIxLCAKLSAgICAxOTYsIDIsIDE0MiwgMTQ2LCAxLCAyMzQsIDEwOSwgMzYsIDExNiwgMjM1LCAyMywgMzYsIDExNiwgMjI5LCA3OSwgMzYsIAotICAgIDExNiwgMjUxLCA2NiwgMzYsIDExNiwgMjI3LCAxNjcsIDM2LCAxMTYsIDIxNSwgMTU5LCAzNiwgMTE2LCAyMjgsIDExMSwgCi0gICAgMzYsIDExNiwgMjE3LCAxNTIsIDM2LCAxMTYsIDIzMCwgMjUsIDM2LCAxMTYsIDIyNiwgMTA1LCAzNiwgMTE2LCAxOTMsIDM2LCAKLSAgICAxMTYsIDIxMSwgMTE3LCAzNiwgMTE2LCAxNTMsIDM2LCAxMTYsIDE1NiwgMzYsIDExNiwgMjE0LCAxMDUsIDM2LCAxMTYsIAotICAgIDIzMiwgMTc2LCAzNiwgMTE2LCAyMzIsIDE4NSwgMzYsIDExNiwgMjIyLCAxODAsIDM2LCAxMTYsIDIyOCwgOTMsIDM2LCAKLSAgICAxMTYsIDIzNSwgMTQ0LCAzNiwgMTE2LCAyMjAsIDEwNCwgMzYsIDExNiwgMjE4LCAyMjYsIDM2LCAxMTYsIDIyMiwgOTEsIAotICAgIDM2LCAxMTYsIDI0MiwgNjAsIDM2LCAxMTYsIDIzMywgMjMyLCAzNiwgMywgMjM1LCAxMCwgMzYsIDMsIDIzNCwgOTIsIDM2LCAKLSAgICAzLCAyMzQsIDgzLCAzNiwgMywgMjMzLCAyMTcsIDM2LCAzLCAyMzMsIDE4OCwgMzYsIDMsIDIzNCwgMTgyLCAzNiwgMywgCi0gICAgMjM0LCAxODEsIDM2LCAzLCAyMzQsIDI0NiwgMzYsIDMsIDIzNCwgMjgsIDM2LCAzLCAyMzQsIDEwLCAzNiwgMywgMjM0LCAKLSAgICAxOTUsIDM2LCAzLCAyMjksIDc2LCAzNiwgMywgMjI5LCAyNywgMzYsIDMsIDIyOSwgMjMsIDM2LCAzLCAyMjgsIDI0OCwgMzYsIAotICAgIDMsIDIyOCwgMjQxLCAzNiwgMywgMjI5LCA2NCwgMzYsIDMsIDIyOSwgNjIsIDM2LCAzLCAyMjksIDczLCAzNiwgMywgMjI5LCAKLSAgICA0LCAzNiwgMywgMjI4LCAyNTUsIDM2LCAzLCAyMjksIDY2LCAzNiwgMywgMjUxLCAzMiwgMzYsIDMsIDI1MCwgNTEsIDM2LCAKLSAgICAzLCAyNTAsIDQxLCAzNiwgMywgMjQ5LCAxMTIsIDM2LCAzLCAyNDksIDgzLCAzNiwgMywgMjUwLCAxOTAsIDM2LCAzLCAyNTAsIAotICAgIDE4MiwgMzYsIDMsIDI1MSwgMjIsIDM2LCAzLCAyNDksIDIzOCwgMzYsIDMsIDI0OSwgMTc0LCAzNiwgMywgMjUwLCAyMjIsIAotICAgIDM2LCAzLCAyMjcsIDE2NCwgMzYsIDMsIDIyNywgMTQ4LCAzNiwgMywgMjI3LCAxNDMsIDM2LCAzLCAyMjcsIDEyOCwgMzYsIAotICAgIDMsIDIyNywgMTIxLCAzNiwgMywgMjI3LCAxNTYsIDM2LCAzLCAyMjcsIDE1NSwgMzYsIDMsIDIyNywgMTYxLCAzNiwgMywgCi0gICAgMjI3LCAxMzQsIDM2LCAzLCAyMjcsIDEzMiwgMzYsIDMsIDIyNywgMTU5LCAzNiwgMywgMjE1LCAxNTUsIDM2LCAzLCAyMTUsIAotICAgIDEzNSwgMzYsIDMsIDIxNSwgMTM0LCAzNiwgMywgMjE1LCAxMjMsIDM2LCAzLCAyMTUsIDEyMCwgMzYsIDMsIDIxNSwgMTUxLCAKLSAgICAzNiwgMywgMjE1LCAxNTAsIDM2LCAzLCAyMTUsIDE1NCwgMzYsIDMsIDIxNSwgMTMzLCAzNiwgMywgMjE1LCAxMzIsIDM2LCAKLSAgICAzLCAyMTUsIDE1MywgMzYsIDMsIDIyOCwgMTA5LCAzNiwgMywgMjI4LCA5NSwgMzYsIDMsIDIyOCwgOTQsIDM2LCAzLCAyMjgsIAotICAgIDc4LCAzNiwgMywgMjI4LCA3NywgMzYsIDMsIDIyOCwgMTA1LCAzNiwgMywgMjI4LCAxMDQsIDM2LCAzLCAyMjgsIDEwOCwgCi0gICAgMzYsIDMsIDIyOCwgODAsIDM2LCAzLCAyMjgsIDc5LCAzNiwgMywgMjI4LCAxMDcsIDM2LCAzLCAyMTcsIDEwMSwgMzYsIDMsIAotICAgIDIxNiwgMTE3LCAzNiwgMywgMjE2LCAxMDMsIDM2LCAzLCAyMTUsIDExOCwgMzYsIDMsIDIxNSwgODUsIDM2LCAzLCAyMTcsIAotICAgIDIyLCAzNiwgMywgMjE3LCAxMSwgMzYsIDMsIDIxNywgNzksIDM2LCAzLCAxMTEsIDM2LCAzLCAyMTYsIDE3LCAzNiwgMywgCi0gICAgMjE3LCA0MSwgMzYsIDMsIDIyOSwgMjI1LCAzNiwgMywgMjI4LCAyMzMsIDM2LCAzLCAyMjgsIDIwOCwgMzYsIDMsIDIyNywgCi0gICAgMjM3LCAzNiwgMywgMjI3LCAxNzksIDM2LCAzLCAyMjksIDEwNywgMzYsIDMsIDIyOSwgMTAzLCAzNiwgMywgMjI5LCAyMTIsIAotICAgIDM2LCAzLCAyMjgsIDc0LCAzNiwgMywgMjI4LCA2NCwgMzYsIDMsIDIyOSwgMTg3LCAzNiwgMywgMjI2LCA4OSwgMzYsIDMsIAotICAgIDIyNSwgMTA4LCAzNiwgMywgMjI1LCA3MSwgMzYsIDMsIDIyNCwgMTUwLCAzNiwgMywgMjI0LCAxMTksIDM2LCAzLCAyMjUsIAotICAgIDIyMSwgMzYsIDMsIDIyNSwgMjExLCAzNiwgMywgMjI2LCA3MSwgMzYsIDMsIDIyNSwgMTYsIDM2LCAzLCAyMjQsIDI0OSwgCi0gICAgMzYsIDMsIDIyNSwgMjM0LCAzNiwgMywgMjMxLCAyMzcsIDM2LCAzLCAyMzAsIDIzMCwgMzYsIDMsIDIzMCwgMjAxLCAzNiwgCi0gICAgMywgMjMwLCAxMDIsIDM2LCAzLCAyMzAsIDU0LCAzNiwgMywgMjMxLCA5MSwgMzYsIDMsIDIzMSwgODAsIDM2LCAzLCAyMzEsIAotICAgIDIwMywgMzYsIDMsIDIzMCwgMTYxLCAzNiwgMywgMjMwLCAxMzIsIDM2LCAzLCAyMzEsIDEzNSwgMzYsIDMsIDIxMSwgMTAzLCAKLSAgICAzNiwgMywgMjExLCA4LCAzNiwgMywgMjEwLCAyNTUsIDM2LCAzLCAyMTAsIDIxMiwgMzYsIDMsIDIxMCwgMTgxLCAzNiwgMywgCi0gICAgMjExLCA0NywgMzYsIDMsIDIxMSwgNDQsIDM2LCAzLCAyMTEsIDgyLCAzNiwgMywgMjEwLCAyNDQsIDM2LCAzLCAyMTAsIAotICAgIDIyOSwgMzYsIDMsIDIxMSwgNTUsIDM2LCAzLCAyMjMsIDE4NCwgMzYsIDMsIDIyMywgMzUsIDM2LCAzLCAyMjIsIDIzOSwgCi0gICAgMzYsIDMsIDIyMiwgMTQwLCAzNiwgMywgMjIyLCAxMTIsIDM2LCAzLCAyMjMsIDEyOCwgMzYsIDMsIDIyMywgMTA4LCAzNiwgCi0gICAgMywgMjIzLCAxNjYsIDM2LCAzLCAyMjIsIDIxMSwgMzYsIDMsIDIyMiwgMTk3LCAzNiwgMywgMjIzLCAxMzYsIDM2LCAzLCAKLSAgICAyMzMsIDEzNCwgMzYsIDMsIDIzMiwgMjQxLCAzNiwgMywgMjMyLCAyMjcsIDM2LCAzLCAyMzIsIDk4LCAzNiwgMywgMjMyLCAKLSAgICA3MywgMzYsIDMsIDIzMywgNTgsIDM2LCAzLCAyMzMsIDUwLCAzNiwgMywgMjMzLCAxMDksIDM2LCAzLCAyMzIsIDE1NiwgMzYsIAotICAgIDMsIDIzMiwgMTI3LCAzNiwgMywgMjMzLCA3NCwgMzYsIDMsIDIxNCwgMjYsIDM2LCAzLCAyMTMsIDE3NiwgMzYsIDMsIDIxMywgCi0gICAgMTYyLCAzNiwgMywgMjEyLCAxMTYsIDM2LCAzLCAyMTIsIDEwOSwgMzYsIDMsIDIxMywgMjU1LCAzNiwgMywgMjEzLCAyNTAsIAotICAgIDM2LCAzLCAyMTQsIDIzLCAzNiwgMywgMjEzLCAxMzgsIDM2LCAzLCAyMTMsIDEyNywgMzYsIDMsIDIxNCwgNSwgMzYsIDMsIAotICAgIDIzMiwgMTc0LCAzNiwgMywgMjMyLCAxNjksIDM2LCAzLCAyMzIsIDE2OCwgMzYsIDMsIDIzMiwgMTY1LCAzNiwgMywgMjMyLCAKLSAgICAxNjQsIDM2LCAzLCAyMzIsIDE3MSwgMzYsIDMsIDIzMiwgMTcwLCAzNiwgMywgMjMyLCAxNzMsIDM2LCAzLCAyMzIsIDE2NywgCi0gICAgMzYsIDMsIDIzMiwgMTY2LCAzNiwgMywgMjMyLCAxNzIsIDM2LCAzLCAyMzIsIDE4MywgMzYsIDMsIDIzMiwgMTc4LCAzNiwgCi0gICAgMywgMjMyLCAxNzcsIDM2LCAzLCAyMzIsIDE2MSwgMzYsIDMsIDIzMiwgMTYwLCAzNiwgMywgMjMyLCAxODAsIDM2LCAzLCAKLSAgICAyMzIsIDE3OSwgMzYsIDMsIDIzMiwgMTgyLCAzNiwgMywgMjMyLCAxNjMsIDM2LCAzLCAyMzIsIDE2MiwgMzYsIDMsIDIzMiwgCi0gICAgMTgxLCAzNiwgMywgMjIyLCAxNzgsIDM2LCAzLCAyMjIsIDE2NywgMzYsIDMsIDIyMiwgMTY2LCAzNiwgMywgMjIyLCAxNjAsIAotICAgIDM2LCAzLCAyMjIsIDE1MywgMzYsIDMsIDIyMiwgMTc0LCAzNiwgMywgMjIyLCAxNzMsIDM2LCAzLCAyMjIsIDE3NywgMzYsIAotICAgIDMsIDIyMiwgMTY1LCAzNiwgMywgMjIyLCAxNjQsIDM2LCAzLCAyMjIsIDE3NiwgMzYsIDMsIDIyOCwgOTEsIDM2LCAzLCAKLSAgICAyMjgsIDg2LCAzNiwgMywgMjI4LCA4NSwgMzYsIDMsIDIyOCwgODIsIDM2LCAzLCAyMjgsIDgxLCAzNiwgMywgMjI4LCA4OCwgCi0gICAgMzYsIDMsIDIyOCwgODcsIDM2LCAzLCAyMjgsIDkwLCAzNiwgMywgMjI4LCA4NCwgMzYsIDMsIDIyOCwgODMsIDM2LCAzLCAKLSAgICAyMjgsIDg5LCAzNiwgMywgMjM1LCAxNDAsIDM2LCAzLCAyMzUsIDEwOCwgMzYsIDMsIDIzNSwgMTAxLCAzNiwgMywgMjM1LCAKLSAgICA1MSwgMzYsIDMsIDIzNSwgMzMsIDM2LCAzLCAyMzUsIDEyNiwgMzYsIDMsIDIzNSwgMTI0LCAzNiwgMywgMjM1LCAxMzUsIAotICAgIDM2LCAzLCAyMzUsIDY4LCAzNiwgMywgMjM1LCA1OSwgMzYsIDMsIDIzNSwgMTI5LCAzNiwgMywgMjIwLCA5OCwgMzYsIDMsIAotICAgIDIyMCwgMzIsIDM2LCAzLCAyMjAsIDI3LCAzNiwgMywgMjE5LCAyMjUsIDM2LCAzLCAyMTksIDIxMCwgMzYsIDMsIDIyMCwgCi0gICAgNjMsIDM2LCAzLCAyMjAsIDYxLCAzNiwgMywgMjIwLCA5MCwgMzYsIDMsIDIyMCwgNywgMzYsIDMsIDIyMCwgMSwgMzYsIDMsIAotICAgIDIyMCwgNzEsIDM2LCAzLCAyMTgsIDIyMiwgMzYsIDMsIDIxOCwgMTkyLCAzNiwgMywgMjE4LCAxODgsIDM2LCAzLCAyMTgsIAotICAgIDE3OSwgMzYsIDMsIDIxOCwgMTc2LCAzNiwgMywgMjE4LCAxOTcsIDM2LCAzLCAyMTgsIDE5NiwgMzYsIDMsIDIxOCwgMjIxLCAKLSAgICAzNiwgMywgMjE4LCAxODQsIDM2LCAzLCAyMTgsIDE4MywgMzYsIDMsIDIxOCwgMTk5LCAzNiwgMywgMjIyLCAzMSwgMzYsIDMsIAotICAgIDIxOSwgMTkxLCAzNiwgMywgMjE5LCAxNzUsIDM2LCAzLCAyMTgsIDgzLCAzNiwgMywgMjE4LCA0LCAzNiwgMywgMjIxLCAKLSAgICAxODEsIDM2LCAzLCAyMjEsIDE3MCwgMzYsIDMsIDIyMiwgMTcsIDM2LCAzLCAyMTksIDU4LCAzNiwgMywgMjE5LCA0MCwgMzYsIAotICAgIDMsIDIyMSwgMjE5LCAzNiwgMywgMjQyLCA0NiwgMzYsIDMsIDI0MSwgMTgwLCAzNiwgMywgMjQxLCAxNjEsIDM2LCAzLCAKLSAgICAyNDAsIDIyMiwgMzYsIDMsIDI0MCwgMjAyLCAzNiwgMywgMjQxLCAyMzgsIDM2LCAzLCAyNDEsIDIyMCwgMzYsIDMsIDI0MiwgCi0gICAgMzYsIDM2LCAzLCAyNDEsIDY4LCAzNiwgMywgMjQxLCA1MywgMzYsIDMsIDI0MSwgMjQ2LCAzNiwgMywgMjMzLCAyMzEsIDM2LCAKLSAgICAzLCAyMzMsIDIzMCwgMzYsIDMsIDIzMywgMjI1LCAzNiwgMywgMjMzLCAyMjQsIDM2LCAzLCAyMzMsIDIyMSwgMzYsIDMsIAotICAgIDIzMywgMjIwLCAzNiwgMywgMjMzLCAyMjcsIDM2LCAzLCAyMzMsIDIyNiwgMzYsIDMsIDIzMywgMjI5LCAzNiwgMywgMjMzLCAKLSAgICAyMjMsIDM2LCAzLCAyMzMsIDIyMiwgMzYsIDMsIDIzMywgMjI4LCAzNiwgMywgMjE5LCAyMzEsIDE3NSwgMTE2LCA1LCAyMTEsIAotICAgIDY4LCAxNzUsIDExNiwgNSwgMjIzLCAxNTUsIDE3NSwgMTE2LCA1LCAyMjMsIDc4LCA5OCwgMSwgMjE1LCAyOCwgNjksIDExNiwgCi0gICAgNSwgMjQ5LCAyMzMsIDE3NiwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzNCwgMTMyLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgCi0gICAgMjM0LCAyOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzNCwgMTA1LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjI5LCA0LCAKLSAgICA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjUxLCAzMywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI1MCwgMTU3LCA2OSwgMTE2LCAKLSAgICA1LCAyNDksIDIzMywgMjQ5LCAyMzgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTAsIDg2LCA2OSwgMTE2LCA1LCAyNDksIAotICAgIDIzMywgMjI3LCAxMzQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNDgsIDIyMSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNSwgCi0gICAgMTQ0LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjQ3LCAxNDUsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTUsIDEzOSwgNjksIAotICAgIDExNiwgNSwgMjQ5LCAyMzMsIDE5NywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNywgMTA1LCA2OSwgMTE2LCA1LCAyNDksIAotICAgIDIzMywgMjE2LCAyMDgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAxMTEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTYsIDE1NiwgCi0gICAgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyOCwgNzQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTIsIDE5MSwgNjksIDExNiwgCi0gICAgNSwgMjQ5LCAyMzMsIDIyNSwgMTQ3LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjI1LCAxNiwgNjksIDExNiwgNSwgMjQ5LCAKLSAgICAyMzMsIDIyNSwgMTIxLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjMwLCAxNjEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTAsIAotICAgIDI0NCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyMiwgMjExLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjMyLCAxNTYsIDY5LCAKLSAgICAxMTYsIDUsIDI0OSwgMjMzLCAyMTMsIDEzOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyMCwgMTAyLCA2OSwgMTE2LCA1LCAKLSAgICAyNDksIDIzMywgMjE4LCAyMjMsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMDYsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAxNjIsIAotICAgIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzMsIDEzNSwgNjksIDI1LCA1LCAyNDksIDIzMywgMjI0LCA4OCwgNjksIDIzNSwgCi0gICAgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIDIyNCwgMzAsIDY5LCAyMzUsIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAyMjIsIDEwMCwgCi0gICAgNjksIDIzNSwgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIDIyMiwgOTMsIDY5LCAyMzUsIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAKLSAgICAyMjQsIDY5LCA2OSwgMjUsIDUsIDIyNiwgMjA0LCA2OSwgMjUsIDUsIDI1NSwgMzQsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOSwgCi0gICAgNzcsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOSwgMjcsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOCwgMjQ4LCAxNDEsIDEsIDI1MSwgCi0gICAgMjU1LCAyMjksIDY0LCAxNDEsIDEsIDI1MSwgMjU1LCAyMjksIDQsIDU2LCAxLCAyNTEsIDI1NSwgMjI5LCA3NywgNTYsIDEsIAotICAgIDI1MSwgMjU1LCAyMjksIDI3LCA1NiwgMSwgMjUxLCAyNTUsIDIyOCwgMjQ4LCA1NiwgMSwgMjUxLCAyNTUsIDIyOSwgNjQsIAotICAgIDU2LCAxLCAyNTEsIDI1NSwgMjI5LCA0LCA1NiwgMSwgMjU0LCAxOTQsIDI1MCwgMTkwLCA1NiwgMSwgMjU0LCAxOTQsIDIxNSwgCi0gICAgMTE4LCA1NiwgMSwgMjU0LCAxOTQsIDExMSwgNTYsIDEsIDI1NCwgMTk0LCAyMjYsIDEwNSwgNTgsIDEsIDI0NSwgMjAsIAotICAgIDI0NSwgMTksIDI0OSwgMTgyLCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMTksIDI0NSwgMjAsIDI0OSwgMTgyLCAxMzgsIDEzMCwgCisgICAgNDUsIDEwOCwgMTYsIDMxLCAyMjUsIDEyOCwgMjE4LCA0NSwgMTA4LCAxNiwgMzEsIDg1LCAyMTgsIDQ1LCAxMDgsIDE2LCAKKyAgICAzMSwgMjMxLCA2MCwgMjE4LCA3MiwgMTA4LCAxNiwgMzEsIDIzMSwgNjAsIDIxOCwgNzEsIDEwOCwgMTYsIDMxLCAyMzEsIAorICAgIDYwLCAyMTgsIDcwLCAxMDgsIDE2LCAzMSwgMjUwLCA0NiwgMTA4LCAxNiwgMzEsIDIyMiwgMywgMTA4LCAxNiwgMzEsIDIyOCwgCisgICAgMTkzLCAxMDgsIDE2LCAzMSwgMjEzLCAxNDEsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MCwgMTA4LCAxNiwgMzEsIDIyMiwgMjA2LCAKKyAgICAyMjIsIDMsIDEwOCwgMTYsIDMxLCAyMjIsIDIwNiwgMjIyLCAyLCAxMDgsIDE2LCAzMSwgMjQyLCAxNzMsIDEwOCwgMTYsIAorICAgIDMxLCAyMTksIDE2OCwgMTA4LCAxNiwgMzEsIDIzNSwgMTg0LCAyMjYsIDE1NywgMTA4LCAxNiwgMzEsIDIzNSwgMTg0LCAKKyAgICAyMjYsIDE1NiwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjM1LCAxODMsIDEwOCwgMTYsIDMxLCAyMjMsIDEwNCwgNjQsIAorICAgIDIzNSwgMTgzLCAxMDgsIDE2LCAzMSwgMjQ5LCAxNzYsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjM1LCAxODIsIDIyNiwgCisgICAgMTU3LCAxMDgsIDE2LCAzMSwgMjE4LCA3MywgNjQsIDI0OSwgMTc1LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNDIsIDY0LCAyNDksIAorICAgIDE3NSwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjQ5LCAxNzQsIDEwOCwgMTYsIDMxLCAyNDksIDE3NiwgMjU0LCA5MSwgCisgICAgMTA4LCAxNiwgMzEsIDIyMiwgNCwgNjQsIDI0OSwgMTc2LCAyNTQsIDkxLCAxMDgsIDE2LCAzMSwgMjE4LCA3MywgNjQsIAorICAgIDIyMiwgNCwgNjQsIDI0OSwgMTc1LCAxMDgsIDE2LCAzMSwgMjEzLCAyNDMsIDEwOCwgMTYsIDMxLCAyMTYsIDg1LCAyMjYsIAorICAgIDE1NywgMTA4LCAxNiwgMzEsIDIzMywgNjMsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjU0LCA5MCwgMjI2LCAxNTcsIDEwOCwgCisgICAgMTYsIDMxLCAyMTgsIDczLCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIyMiwgNCwgNjQsIDI1NCwgODksIDEwOCwgMTYsIAorICAgIDMxLCAyMTgsIDczLCA2NCwgMjIyLCA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIxMywgMTU4LCA2NCwgMjU0LCA4OSwgCisgICAgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgMjU0LCA4OCwgCisgICAgMTA4LCAxNiwgMzEsIDIyMywgMTAzLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDIsIDEwOCwgMTYsIDMxLCAyMjMsIDEwMSwgMTA4LCAKKyAgICAxNiwgMzEsIDIyMywgMTAwLCAxMDgsIDE2LCAzMSwgMjU0LCAxNjYsIDEwOCwgMTYsIDMxLCAyNTQsIDE2NSwgMTA4LCAxNiwgCisgICAgMzEsIDIzMSwgMTY4LCAxMDgsIDE2LCAzMSwgMjIyLCA5LCAxMDgsIDE2LCAzMSwgMjUzLCAyNTQsIDEwOCwgMTYsIDMxLCAKKyAgICAyMjMsIDEyOCwgMTA4LCAxNiwgMzEsIDIyMywgMTI3LCAxMDgsIDE2LCAzMSwgMjUzLCAxOTEsIDEwOCwgMTYsIDMxLCAyNTEsIAorICAgIDIzNywgMjI2LCAxNTcsIDEwOCwgMTYsIDMxLCAyMTcsIDUwLCAxMDgsIDE2LCAzMSwgMjE3LCA0OSwgMTA4LCAxNiwgMzEsIAorICAgIDIyNCwgMTEsIDIzMiwgMjI4LCAxMDgsIDE2LCAzMSwgMjUxLCAxOTEsIDEwOCwgMTYsIDMxLCAyNTEsIDE5MCwgMTA4LCAxNiwgCisgICAgMzEsIDI1MSwgMTg5LCAxMDgsIDE2LCAzMSwgMjU0LCAxNDYsIDEwOCwgMTYsIDMxLCAyMjYsIDIyMiwgMTA4LCAxNiwgMzEsIAorICAgIDIxOCwgMjUwLCAxMDgsIDE2LCAzMSwgMjE2LCA4MywgMTA4LCAxNiwgMzEsIDI0MiwgMTAzLCAxMDgsIDE2LCAzMSwgMjEyLCAKKyAgICAyOCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI5LCAxMDgsIDE2LCAzMSwgMjUxLCAyMiwgMTA4LCAxNiwgMzEsIDIxNSwgODYsIAorICAgIDEwOCwgMTYsIDMxLCAyNTAsIDI1NCwgMjMwLCAxMjcsIDEwOCwgMTYsIDMxLCAyMjEsIDIwNCwgNjQsIDIzNSwgNjEsIDEwOCwgCisgICAgMTYsIDMxLCAyNTEsIDMzLCAxMDgsIDE2LCAzMSwgMjE1LCAyMjAsIDEwOCwgMTYsIDMxLCAyMTgsIDE1NiwgMjE1LCAyMjAsIAorICAgIDEwOCwgMTYsIDMxLCAyMzIsIDE1NCwgMTA4LCAxNiwgMzEsIDIxOSwgNTgsIDEwOCwgMTYsIDMxLCAyMTQsIDE0MiwgMTA4LCAKKyAgICAxNiwgMzEsIDI0MCwgMjUzLCAyNDYsIDcyLCAxMDgsIDE2LCAzMSwgMjUzLCAyMzUsIDEwOCwgMTYsIDMxLCAyMjQsIDIzNywgCisgICAgMjUzLCAyMzUsIDEwOCwgMTYsIDMxLCAyNTEsIDE1MCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI4LCAyNTEsIDE1MCwgMTA4LCAKKyAgICAxNiwgMzEsIDI1NCwgMTQzLCAxMDgsIDE2LCAzMSwgMjE4LCAxMTksIDIxOCwgMjcsIDIxOCwgMTE4LCAxMDgsIDE2LCAzMSwgCisgICAgMjE4LCAxMTksIDIxOCwgMjcsIDIxOCwgMTE3LCAxMDgsIDE2LCAzMSwgMjE4LCA2OSwgMTA4LCAxNiwgMzEsIDIyNCwgMjAzLCAKKyAgICAxMDgsIDE2LCAzMSwgMjQ3LCAxODksIDEwOCwgMTYsIDMxLCAyNDcsIDE5MSwgMTA4LCAxNiwgMzEsIDI0NywgMTkwLCAxMDgsIAorICAgIDE2LCAzMSwgMjI0LCAxMzQsIDEwOCwgMTYsIDMxLCAyMjQsIDEyMywgMTA4LCAxNiwgMzEsIDI0OSwgMTMwLCAxMDgsIDE2LCAKKyAgICAzMSwgMjQ5LCAxMjksIDEwOCwgMTYsIDMxLCAyNDksIDEyOCwgMTA4LCAxNiwgMzEsIDI0OSwgMTI3LCAxMDgsIDE2LCAzMSwgCisgICAgMjQ5LCAxMjYsIDEwOCwgMTYsIDMxLCAyNTQsIDE3OCwgMTA4LCAxNiwgMzEsIDI1MiwgMTI3LCA2NCwgMjMxLCAxNTQsIAorICAgIDEwOCwgMTYsIDMxLCAyNTIsIDEyNywgNjQsIDIxNCwgMTcsIDEwOCwgMTYsIDMxLCAyMjMsIDYwLCAxMDgsIDE2LCAzMSwgCisgICAgMjQwLCAyNDUsIDEwOCwgMTYsIDMxLCAyMjgsIDIxNywgMTA4LCAxNiwgMzEsIDI0OCwgMTUzLCAxMDgsIDE2LCAzMSwgMjMwLCAKKyAgICAxMzksIDEwOCwgMTYsIDMxLCAxNjMsIDI0NiwgMTAyLCAxMDgsIDE2LCAzMSwgMTYzLCAyMjYsIDEzNiwgMTAsIDE0LCAyNDAsIAorICAgIDEwOSwgMTAsIDE0LCAyNDAsIDEwOCwgMTAsIDE0LCAyNDAsIDEwNywgMTAsIDE0LCAyNDAsIDEwNiwgMTAsIDE0LCAyNDAsIAorICAgIDEwNSwgMTAsIDE0LCAyNDAsIDEwNCwgMTAsIDE0LCAyNDAsIDEwMywgMTAsIDE0LCAyNDAsIDEwMiwgMTAsIDE0LCAyNDAsIAorICAgIDEwMSwgMTAsIDE0LCAyNDAsIDEwMCwgMTAsIDE0LCAyNDAsIDk5LCAxMCwgMTQsIDI0MCwgOTgsIDEwLCAxNCwgMjQwLCA5NywgCisgICAgMTAsIDE0LCAyNDAsIDk2LCAxMCwgMTQsIDI0MCwgOTUsIDEwLCAxNCwgMjQwLCA5NCwgMTAsIDE0LCAyNDAsIDkzLCAxMCwgCisgICAgMTQsIDI0MCwgOTIsIDEwLCAxNCwgMjQwLCA5MSwgMTAsIDE0LCAyNDAsIDkwLCAxMCwgMTQsIDI0MCwgODksIDEwLCAxNCwgCisgICAgMjQwLCA4OCwgMTAsIDE0LCAyNDAsIDg3LCAxMCwgMTQsIDI0MCwgODYsIDEwLCAxNCwgMjQwLCA4NSwgMTAsIDE0LCAyNDAsIAorICAgIDg0LCAxMCwgMTQsIDI0MCwgODMsIDEwLCAxNCwgMjQwLCA4MiwgMTAsIDE0LCAyNDAsIDgxLCAxMCwgMTQsIDI0MCwgODAsIAorICAgIDEwLCAxNCwgMjQwLCA3OSwgMTAsIDE0LCAyNDAsIDc4LCAxMCwgMTQsIDI0MCwgNzcsIDEwLCAxNCwgMjQwLCA3NiwgMTAsIAorICAgIDE0LCAyNDAsIDc1LCAxMCwgMTQsIDI0MCwgNzQsIDEwLCAxNCwgMjQwLCA3MywgMTAsIDE0LCAyNDAsIDcyLCAxMCwgMTQsIAorICAgIDI0MCwgNzEsIDEwLCAxNCwgMjQwLCA3MCwgMTAsIDE0LCAyNDAsIDY5LCAxMCwgMTQsIDI0MCwgNjgsIDEwLCAxNCwgMjQwLCAKKyAgICA2NywgMTAsIDE0LCAyNDAsIDY2LCAxMCwgMTQsIDI0MCwgNjUsIDEwLCAxNCwgMjQwLCA2NCwgMTAsIDE0LCAyNDAsIDYzLCAKKyAgICAxMCwgMTQsIDI0MCwgNjIsIDEwLCAxNCwgMjQwLCA2MSwgMTAsIDE0LCAyNDAsIDYwLCAxMCwgMTQsIDI0MCwgNTksIDEwLCAKKyAgICAxNCwgMjQwLCA1OCwgMTAsIDE0LCAyNDAsIDU3LCAxMCwgMTQsIDI0MCwgNTYsIDEwLCAxNCwgMjQwLCA1NSwgMTAsIDE0LCAKKyAgICAyNDAsIDU0LCAxMCwgMTQsIDI0MCwgNTMsIDEwLCAxNCwgMjQwLCA1MiwgMTAsIDE0LCAyNDAsIDUxLCAxMCwgMTQsIDI0MCwgCisgICAgNTAsIDEwLCAxNCwgMjQwLCA0OSwgMTAsIDE0LCAyNDAsIDQ4LCAxMCwgMTQsIDI0MCwgNDcsIDEwLCAxNCwgMjQwLCA0NiwgCisgICAgMTAsIDE0LCAyNDAsIDQ1LCAxMCwgMTQsIDI0MCwgNDQsIDEwLCAxNCwgMjQwLCA0MywgMTAsIDE0LCAyNDAsIDQyLCAxMCwgCisgICAgMTQsIDI0MCwgNDEsIDEwLCAxNCwgMjQwLCA0MCwgMTAsIDE0LCAyNDAsIDM5LCAxMCwgMTQsIDI0MCwgMzgsIDEwLCAxNCwgCisgICAgMjQwLCAzNywgMTAsIDE0LCAyNDAsIDM2LCAxMCwgMTQsIDI0MCwgMzUsIDEwLCAxNCwgMjQwLCAzNCwgMTAsIDE0LCAyNDAsIAorICAgIDMzLCAxMCwgMTQsIDI0MCwgMzIsIDEwLCAxNCwgMjQwLCAzMSwgMTAsIDE0LCAyNDAsIDMwLCAxMCwgMTQsIDI0MCwgMjksIAorICAgIDEwLCAxNCwgMjQwLCAyOCwgMTAsIDE0LCAyNDAsIDI3LCAxMCwgMTQsIDI0MCwgMjYsIDEwLCAxNCwgMjQwLCAyNSwgMTAsIAorICAgIDE0LCAyNDAsIDI0LCAxMCwgMTQsIDI0MCwgMjMsIDEwLCAxNCwgMjQwLCAyMiwgMTAsIDE0LCAyNDAsIDIxLCAxMCwgMTQsIAorICAgIDI0MCwgMjAsIDEwLCAxNCwgMjQwLCAxOSwgMTAsIDE0LCAyNDAsIDE4LCAxMCwgMTQsIDI0MCwgMTcsIDEwLCAxNCwgMjQwLCAKKyAgICAxNiwgMTAsIDE0LCAyNDAsIDE1LCAxMCwgMTQsIDI0MCwgMTQsIDEwLCAxNCwgMjQwLCAxMywgMTAsIDE0LCAyNDAsIDEyLCAKKyAgICAxMCwgMTQsIDI0MCwgMTEsIDEwLCAxNCwgMjQwLCAxMCwgMTAsIDE0LCAyNDAsIDksIDEwLCAxNCwgMjQwLCA4LCAxMCwgMTQsIAorICAgIDI0MCwgNywgMTAsIDE0LCAyNDAsIDYsIDEwLCAxNCwgMjQwLCA1LCAxMCwgMTQsIDI0MCwgNCwgMTAsIDE0LCAyNDAsIDMsIAorICAgIDEwLCAxNCwgMjQwLCAyLCAxMCwgMTQsIDI0MCwgMSwgMTAsIDE0LCAyNDAsIDAsIDEwLCAxNCwgMjM5LCAyNTUsIDEwLCAxNCwgCisgICAgMjM5LCAyNTQsIDEwLCAxNCwgMjM5LCAyNTMsIDEwLCAxNCwgMjM5LCAyNTIsIDEwLCAxNCwgMjM5LCAyNTEsIDEwLCAxNCwgCisgICAgMjM5LCAyNTAsIDEwLCAxNCwgMjM5LCAyNDksIDEwLCAxNCwgMjM5LCAyNDgsIDEwLCAxNCwgMjM5LCAyNDcsIDEwLCAxNCwgCisgICAgMjM5LCAyNDYsIDEwLCAxNCwgMjM5LCAyNDUsIDEwLCAxNCwgMjM5LCAyNDQsIDEwLCAxNCwgMjM5LCAyNDMsIDEwLCAxNCwgCisgICAgMjM5LCAyNDIsIDEwLCAxNCwgMjM5LCAyNDEsIDEwLCAxNCwgMjM5LCAyNDAsIDEwLCAxNCwgMjM5LCAyMzksIDEwLCAxNCwgCisgICAgMjM5LCAyMzgsIDEwLCAxNCwgMjM5LCAyMzcsIDEwLCAxNCwgMjM5LCAyMzYsIDEwLCAxNCwgMjM5LCAyMzUsIDEwLCAxNCwgCisgICAgMjM5LCAyMzQsIDEwLCAxNCwgMjM5LCAyMzMsIDEwLCAxNCwgMjM5LCAyMzIsIDEwLCAxNCwgMjM5LCAyMzEsIDEwLCAxNCwgCisgICAgMjM5LCAyMzAsIDEwLCAxNCwgMjM5LCAyMjksIDEwLCAxNCwgMjM5LCAyMjgsIDEwLCAxNCwgMjM5LCAyMjcsIDEwLCAxNCwgCisgICAgMjM5LCAyMjYsIDEwLCAxNCwgMjM5LCAyMjUsIDEwLCAxNCwgMjM5LCAyMjQsIDEwLCAxNCwgMjM5LCAyMjMsIDEwLCAxNCwgCisgICAgMjM5LCAyMjIsIDEwLCAxNCwgMjM5LCAyMjEsIDEwLCAxNCwgMjM5LCAyMjAsIDEwLCAxNCwgMjM5LCAyMTksIDEwLCAxNCwgCisgICAgMjM5LCAyMTgsIDEwLCAxNCwgMjM5LCAyMTcsIDEwLCAxNCwgMjM5LCAyMTYsIDEwLCAxNCwgMjM5LCAyMTUsIDEwLCAxNCwgCisgICAgMjM5LCAyMTQsIDEwLCAxNCwgMjM5LCAyMTMsIDEwLCAxNCwgMjM5LCAyMTIsIDEwLCAxNCwgMjM5LCAyMTEsIDEwLCAxNCwgCisgICAgMjM5LCAyMTAsIDEwLCAxNCwgMjM5LCAyMDksIDEwLCAxNCwgMjM5LCAyMDgsIDEwLCAxNCwgMjM5LCAyMDcsIDEwLCAxNCwgCisgICAgMjM5LCAyMDYsIDEwLCAxNCwgMjM5LCAyMDUsIDEwLCAxNCwgMjM5LCAyMDQsIDEwLCAxNCwgMjM5LCAyMDMsIDEwLCAxNCwgCisgICAgMjM5LCAyMDIsIDEwLCAxNCwgMjM5LCAyMDEsIDEwLCAxNCwgMjM5LCAyMDAsIDEwLCAxNCwgMjM5LCAxOTksIDEwLCAxNCwgCisgICAgMjM5LCAxOTgsIDEwLCAxNCwgMjM5LCAxOTcsIDEwLCAxNCwgMjM5LCAxOTYsIDEwLCAxNCwgMjM5LCAxOTUsIDEwLCAxNCwgCisgICAgMjM5LCAxOTQsIDEwLCAxNCwgMjM5LCAxOTMsIDEwLCAxNCwgMjM5LCAxOTIsIDEwLCAxNCwgMjM5LCAxOTEsIDEwLCAxNCwgCisgICAgMjM5LCAxOTAsIDEwLCAxNCwgMjM5LCAxODksIDEwLCAxNCwgMjM5LCAxODgsIDEwLCAxNCwgMjM5LCAxODcsIDEwLCAxNCwgCisgICAgMjM5LCAxODYsIDEwLCAxNCwgMjM5LCAxODUsIDEwLCAxNCwgMjM5LCAxODQsIDEwLCAxNCwgMjM5LCAxODMsIDEwLCAxNCwgCisgICAgMjM5LCAxODIsIDEwLCAxNCwgMjM5LCAxODEsIDEwLCAxNCwgMjM5LCAxODAsIDEwLCAxNCwgMjM5LCAxNzksIDEwLCAxNCwgCisgICAgMjM5LCAxNzgsIDEwLCAxNCwgMjM5LCAxNzcsIDEwLCAxNCwgMjM5LCAxNzYsIDEwLCAxNCwgMjM5LCAxNzUsIDEwLCAxNCwgCisgICAgMjM5LCAxNzQsIDEwLCAxNCwgMjM5LCAxNzMsIDEwLCAxNCwgMjM5LCAxNzIsIDEwLCAxNCwgMjM5LCAxNzEsIDEwLCAxNCwgCisgICAgMjM5LCAxNzAsIDEwLCAxNCwgMjM5LCAxNjksIDEwLCAxNCwgMjM5LCAxNjgsIDEwLCAxNCwgMjM5LCAxNjcsIDEwLCAxNCwgCisgICAgMjM5LCAxNjYsIDEwLCAxNCwgMjM5LCAxNjUsIDEwLCAxNCwgMjM5LCAxNjQsIDEwLCAxNCwgMjM5LCAxNjMsIDEwLCAxNCwgCisgICAgMjM5LCAxNjIsIDEwLCAxNCwgMjM5LCAxNjEsIDEwLCAxNCwgMjM5LCAxNjAsIDEwLCAxNCwgMjM5LCAxNTksIDEwLCAxNCwgCisgICAgMjM5LCAxNTgsIDEwLCAxNCwgMjM5LCAxNTcsIDEwLCAxNCwgMjM5LCAxNTYsIDEwLCAxNCwgMjM5LCAxNTUsIDEwLCAxNCwgCisgICAgMjM5LCAxNTQsIDEwLCAxNCwgMjM5LCAxNTMsIDEwLCAxNCwgMjM5LCAxNTIsIDEwLCAxNCwgMjM5LCAxNTEsIDEwLCAxNCwgCisgICAgMjM5LCAxNTAsIDEwLCAxNCwgMjM5LCAxNDksIDEwLCAxNCwgMjM5LCAxNDgsIDEwLCAxNCwgMjM5LCAxNDcsIDEwLCAxNCwgCisgICAgMjM5LCAxNDYsIDEwLCAxNCwgMjM5LCAxNDUsIDEwLCAxNCwgMjM5LCAxNDQsIDEwLCAxNCwgMjM5LCAxNDMsIDEwLCAxNCwgCisgICAgMjM5LCAxNDIsIDEwLCAxNCwgMjM5LCAxNDEsIDEwLCAxNCwgMjM5LCAxNDAsIDEwLCAxNCwgMjM5LCAxMzksIDEwLCAxNCwgCisgICAgMjM5LCAxMzgsIDEwLCAxNCwgMjM5LCAxMzcsIDEwLCAxNCwgMjM5LCAxMzYsIDEwLCAxNCwgMjM5LCAxMzUsIDEwLCAxNCwgCisgICAgMjM5LCAxMzQsIDEwLCAxNCwgMjM5LCAxMzMsIDEwLCAxNCwgMjM5LCAxMzIsIDEwLCAxNCwgMjM5LCAxMzEsIDEwLCAxNCwgCisgICAgMjM5LCAxMzAsIDEwLCAxNCwgMjM5LCAxMjksIDEwLCAxNCwgMjM5LCAxMjgsIDEwLCAxNCwgMjM5LCAxMjcsIDEwLCAxNCwgCisgICAgMjM5LCAxMjYsIDEwLCAxNCwgMjM5LCAxMjUsIDEwLCAxNCwgMjM5LCAxMjQsIDEwLCAxNCwgMjM5LCAxMjMsIDEwLCAxNCwgCisgICAgMjM5LCAxMjIsIDEwLCAxNCwgMjM5LCAxMjEsIDEwLCAxNCwgMjM5LCAxMjAsIDEwLCAxNCwgMjM5LCAxMTksIDEwLCAxNCwgCisgICAgMjM5LCAxMTgsIDEwLCAxNCwgMjM5LCAxMTcsIDEwLCAxNCwgMjM5LCAxMTYsIDEwLCAxNCwgMjM5LCAxMTUsIDEwLCAxNCwgCisgICAgMjM5LCAxMTQsIDEwLCAxNCwgMjM5LCAxMTMsIDEwLCAxNCwgMjM5LCAxMTIsIDEwLCAxNCwgMjM5LCAxMTEsIDEwLCAxNCwgCisgICAgMjM5LCAxMTAsIDEwLCAxNCwgMjM5LCAxMDksIDEwLCAxNCwgMjM5LCAxMDgsIDEwLCAxNCwgMjM5LCAxMDcsIDEwLCAxNCwgCisgICAgMjM5LCAxMDYsIDEwLCAxNCwgMjM5LCAxMDUsIDEwLCAxNCwgMjM5LCAxMDQsIDEwLCAxNCwgMjM5LCAxMDMsIDEwLCAxNCwgCisgICAgMjM5LCAxMDIsIDEwLCAxNCwgMjM5LCAxMDEsIDEwLCAxNCwgMjM5LCAxMDAsIDEwLCAxNCwgMjM5LCA5OSwgMTAsIDE0LCAKKyAgICAyMzksIDk4LCAxMCwgMTQsIDIzOSwgOTcsIDEwLCAxNCwgMjM5LCA5NiwgMTAsIDE0LCAyMzksIDk1LCAxMCwgMTQsIDIzOSwgCisgICAgOTQsIDEwLCAxNCwgMjM5LCA5MywgMTAsIDE0LCAyMzksIDkyLCAxMCwgMTQsIDIzOSwgOTEsIDEwLCAxNCwgMjM5LCA5MCwgCisgICAgMTAsIDE0LCAyMzksIDg5LCAxMCwgMTQsIDIzOSwgODgsIDEwLCAxNCwgMjM5LCA4NywgMTAsIDE0LCAyMzksIDg2LCAxMCwgCisgICAgMTQsIDIzOSwgODUsIDEwLCAxNCwgMjM5LCA4NCwgMTAsIDE0LCAyMzksIDgzLCAxMCwgMTQsIDIzOSwgODIsIDEwLCAxNCwgCisgICAgMjM5LCA4MSwgMTAsIDE0LCAyMzksIDgwLCAxMCwgMTQsIDIzOSwgNzksIDEwLCAxNCwgMjM5LCA3OCwgMTAsIDE0LCAyMzksIAorICAgIDc3LCAxMCwgMTQsIDIzOSwgNzYsIDEwLCAxNCwgMjM5LCA3NSwgMTAsIDE0LCAyMzksIDc0LCAxMCwgMTQsIDIzOSwgNzMsIAorICAgIDEwLCAxNCwgMjM5LCA3MiwgMTAsIDE0LCAyMzksIDcxLCAxMCwgMTQsIDIzOSwgNzAsIDEwLCAxNCwgMjM5LCA2OSwgMTAsIAorICAgIDE0LCAyMzksIDY4LCAxMCwgMTQsIDIzOSwgNjcsIDEwLCAxNCwgMjM5LCA2NiwgMTAsIDE0LCAyMzksIDY1LCAxMCwgMTQsIAorICAgIDIzOSwgNjQsIDEwLCAxNCwgMjM5LCA2MywgMTAsIDE0LCAyMzksIDYyLCAxMCwgMTQsIDIzOSwgNjEsIDEwLCAxNCwgMjM5LCAKKyAgICA2MCwgMTAsIDE0LCAyMzksIDU5LCAxMCwgMTQsIDIzOSwgNTgsIDEwLCAxNCwgMjM5LCA1NywgMTAsIDE0LCAyMzksIDU2LCAKKyAgICAxMCwgMTQsIDIzOSwgNTUsIDEwLCAxNCwgMjM5LCA1NCwgMTAsIDE0LCAyMzksIDUzLCAxMCwgMTQsIDIzOSwgNTIsIDEwLCAKKyAgICAxNCwgMjM5LCA1MSwgMTAsIDE0LCAyMzksIDUwLCAxMCwgMTQsIDIzOSwgNDksIDEwLCAxNCwgMjM5LCA0OCwgMTAsIDE0LCAKKyAgICAyMzksIDQ3LCAxMCwgMTQsIDIzOSwgNDYsIDEwLCAxNCwgMjM5LCA0NSwgMTAsIDE0LCAyMzksIDQ0LCAxMCwgMTQsIDIzOSwgCisgICAgNDMsIDEwLCAxNCwgMjM5LCA0MiwgMTAsIDE0LCAyMzksIDQxLCAxMCwgMTQsIDIzOSwgNDAsIDEwLCAxNCwgMjM5LCAzOSwgCisgICAgMTAsIDE0LCAyMzksIDM4LCAxMCwgMTQsIDIzOSwgMzcsIDEwLCAxNCwgMjM5LCAzNiwgMTAsIDE0LCAyMzksIDM1LCAxMCwgCisgICAgMTQsIDIzOSwgMzQsIDEwLCAxNCwgMjM5LCAzMywgMTAsIDE0LCAyMzksIDMyLCAxMCwgMTQsIDIzOSwgMzEsIDEwLCAxNCwgCisgICAgMjM5LCAzMCwgMTAsIDE0LCAyMzksIDI5LCAxMCwgMTQsIDIzOSwgMjgsIDEwLCAxNCwgMjM5LCAyNywgMTAsIDE0LCAyMzksIAorICAgIDI2LCAxMCwgMTQsIDIzOSwgMjUsIDEwLCAxNCwgMjM5LCAyNCwgMTAsIDE0LCAyMzksIDIzLCAxMCwgMTQsIDIzOSwgMjIsIAorICAgIDEwLCAxNCwgMjM5LCAyMSwgMTAsIDE0LCAyMzksIDIwLCAxMCwgMTQsIDIzOSwgMTksIDEwLCAxNCwgMjM5LCAxOCwgMTAsIAorICAgIDE0LCAyMzksIDE3LCAxMCwgMTQsIDIzOSwgMTYsIDEwLCAxNCwgMjM5LCAxNSwgMTAsIDE0LCAyMzksIDE0LCAxMCwgMTQsIAorICAgIDIzOSwgMTMsIDEwLCAxNCwgMjM5LCAxMiwgMTAsIDE0LCAyMzksIDExLCAxMCwgMTQsIDIzOSwgMTAsIDEwLCAxNCwgMjM5LCAKKyAgICA5LCAxMCwgMTQsIDIzOSwgOCwgMTAsIDE0LCAyMzksIDcsIDEwLCAxNCwgMjM5LCA2LCAxMCwgMTQsIDIzOSwgNSwgMTAsIAorICAgIDE0LCAyMzksIDQsIDEwLCAxNCwgMjM5LCAzLCAxMCwgMTQsIDIzOSwgMiwgMTAsIDE0LCAyMzksIDEsIDEwLCAxNCwgMjM5LCAKKyAgICAwLCAxMCwgMTQsIDIzOCwgMjU1LCAxMCwgMTQsIDIzOCwgMjU0LCAxMCwgMTQsIDIzOCwgMjUzLCAxMCwgMTQsIDIzOCwgCisgICAgMjUyLCAxMCwgMTQsIDIzOCwgMjUxLCAxMCwgMTQsIDIzOCwgMjUwLCAxMCwgMTQsIDIzOCwgMjQ5LCAxMCwgMTQsIDIzOCwgCisgICAgMjQ4LCAxMCwgMTQsIDIzOCwgMjQ3LCAxMCwgMTQsIDIzOCwgMjQ2LCAxMCwgMTQsIDIzOCwgMjQ1LCAxMCwgMTQsIDIzOCwgCisgICAgMjQ0LCAxMCwgMTQsIDIzOCwgMjQzLCAxMCwgMTQsIDIzOCwgMjQyLCAxMCwgMTQsIDIzOCwgMjQxLCAxMCwgMTQsIDIzOCwgCisgICAgMjQwLCAxMCwgMTQsIDIzOCwgMjM5LCAxMCwgMTQsIDIzOCwgMjM4LCAxMCwgMTQsIDIzOCwgMjM3LCAxMCwgMTQsIDIzOCwgCisgICAgMjM2LCAxMCwgMTQsIDIzOCwgMjM1LCAxMCwgMTQsIDIzOCwgMjM0LCAxMCwgMTQsIDIzOCwgMjMzLCAxMCwgMTQsIDIzOCwgCisgICAgMjMyLCAxMCwgMTQsIDIzOCwgMjMxLCAxMCwgMTQsIDIzOCwgMjMwLCAxMCwgMTQsIDIzOCwgMjI5LCAxMCwgMTQsIDIzOCwgCisgICAgMjI4LCAxMCwgMTQsIDIzOCwgMjI3LCAxMCwgMTQsIDIzOCwgMjI2LCAxMCwgMTQsIDIzOCwgMjI1LCAxMCwgMTQsIDIzOCwgCisgICAgMjI0LCAxMCwgMTQsIDIzOCwgMjIzLCAxMCwgMTQsIDIzOCwgMjIyLCAxMCwgMTQsIDIzOCwgMjIxLCAxMCwgMTQsIDIzOCwgCisgICAgMjIwLCAxMCwgMTQsIDIzOCwgMjE5LCAxMCwgMTQsIDIzOCwgMjE4LCAxMCwgMTQsIDIzOCwgMjE3LCAxMCwgMTQsIDIzOCwgCisgICAgMjE2LCAxMCwgMTQsIDIzOCwgMjE1LCAxMCwgMTQsIDIzOCwgMjE0LCAxMCwgMTQsIDIzOCwgMjEzLCAxMCwgMTQsIDIzOCwgCisgICAgMjEyLCAxMCwgMTQsIDIzOCwgMjExLCAxMCwgMTQsIDIzOCwgMjEwLCAxMCwgMTQsIDIzOCwgMjA5LCAxMCwgMTQsIDIzOCwgCisgICAgMjA4LCAxMCwgMTQsIDIzOCwgMjA3LCAxMCwgMTQsIDIzOCwgMjA2LCAxMCwgMTQsIDIzOCwgMjA1LCAxMCwgMTQsIDIzOCwgCisgICAgMjA0LCAxMCwgMTQsIDIzOCwgMjAzLCAxMCwgMTQsIDIzOCwgMjAyLCAxMCwgMTQsIDIzOCwgMjAxLCAxMCwgMTQsIDIzOCwgCisgICAgMjAwLCAxMCwgMTQsIDIzOCwgMTk5LCAxMCwgMTQsIDIzOCwgMTk4LCAxMCwgMTQsIDIzOCwgMTk3LCAxMCwgMTQsIDIzOCwgCisgICAgMTk2LCAxMCwgMTQsIDIzOCwgMTk1LCAxMCwgMTQsIDIzOCwgMTk0LCAxMCwgMTQsIDIzOCwgMTkzLCAxMCwgMTQsIDIzOCwgCisgICAgMTkyLCAxMCwgMTQsIDIzOCwgMTkxLCAxMCwgMTQsIDIzOCwgMTkwLCAxMCwgMTQsIDIzOCwgMTg5LCAxMCwgMTQsIDIzOCwgCisgICAgMTg4LCAxMCwgMTQsIDIzOCwgMTg3LCAxMCwgMTQsIDIzOCwgMTg2LCAxMCwgMTQsIDIzOCwgMTg1LCAxMCwgMTQsIDIzOCwgCisgICAgMTg0LCAxMCwgMTQsIDIzOCwgMTgzLCAxMCwgMTQsIDIzOCwgMTgyLCAxMCwgMTQsIDIzOCwgMTgxLCAxMCwgMTQsIDIzOCwgCisgICAgMTgwLCAxMCwgMTQsIDIzOCwgMTc5LCAxMCwgMTQsIDIzOCwgMTc4LCAxMCwgMTQsIDIzOCwgMTc3LCAxMCwgMTQsIDIzOCwgCisgICAgMTc2LCAxMCwgMTQsIDIzOCwgMTc1LCAxMCwgMTQsIDIzOCwgMTc0LCAxMCwgMTQsIDIzOCwgMTczLCAxMCwgMTQsIDIzOCwgCisgICAgMTcyLCAxMCwgMTQsIDIzOCwgMTcxLCAxMCwgMTQsIDIzOCwgMTcwLCAxMCwgMTQsIDIzOCwgMTY5LCAxMCwgMTQsIDIzOCwgCisgICAgMTY4LCAxMCwgMTQsIDIzOCwgMTY3LCAxMCwgMTQsIDIzOCwgMTY2LCAxMCwgMTQsIDIzOCwgMTY1LCAxMCwgMTQsIDIzOCwgCisgICAgMTY0LCAxMCwgMTQsIDIzOCwgMTYzLCAxMCwgMTQsIDIzOCwgMTYyLCAxMCwgMTQsIDIzOCwgMTYxLCAxMCwgMTQsIDIzOCwgCisgICAgMTYwLCAxMCwgMTQsIDIzOCwgMTU5LCAxMCwgMTQsIDIzOCwgMTU4LCAxMCwgMTQsIDIzOCwgMTU3LCAxMCwgMTQsIDIzOCwgCisgICAgMTU2LCAxMCwgMTQsIDIzOCwgMTU1LCAxMCwgMTQsIDIzOCwgMTU0LCAxMCwgMTQsIDIzOCwgMTUzLCAxMCwgMTQsIDIzOCwgCisgICAgMTUyLCAxMCwgMTQsIDIzOCwgMTUxLCAxMCwgMTQsIDIzOCwgMTUwLCAxMCwgMTQsIDIzOCwgMTQ5LCAxMCwgMTQsIDIzOCwgCisgICAgMTQ4LCAxMCwgMTQsIDIzOCwgMTQ3LCAxMCwgMTQsIDIzOCwgMTQ2LCAxMCwgMTQsIDIzOCwgMTQ1LCAxMCwgMTQsIDIzOCwgCisgICAgMTQ0LCAxMCwgMTQsIDIzOCwgMTQzLCAxMCwgMTQsIDIzOCwgMTQyLCAxMCwgMTQsIDIzOCwgMTQxLCAxMCwgMTQsIDIzOCwgCisgICAgMTQwLCAxMCwgMTQsIDIzOCwgMTM5LCAxMCwgMTQsIDIzOCwgMTM4LCAxMCwgMTQsIDIzOCwgMTM3LCAxMCwgMTQsIDIzOCwgCisgICAgMTM2LCAxMCwgMTQsIDIzOCwgMTM1LCAxMCwgMTQsIDIzOCwgMTM0LCAxMCwgMTQsIDIzOCwgMTMzLCAxMCwgMTQsIDIzOCwgCisgICAgMTMyLCAxMCwgMTQsIDIzOCwgMTMxLCAxMCwgMTQsIDIzOCwgMTMwLCAxMCwgMTQsIDIzOCwgMTI5LCAxMCwgMTQsIDIzOCwgCisgICAgMTI4LCAxMCwgMTQsIDIzOCwgMTI3LCAxMCwgMTQsIDIzOCwgMTI2LCAxMCwgMTQsIDIzOCwgMTI1LCAxMCwgMTQsIDIzOCwgCisgICAgMTI0LCAxMCwgMTQsIDIzOCwgMTIzLCAxMCwgMTQsIDIzOCwgMTIyLCAxMCwgMTQsIDIzOCwgMTIxLCAxMCwgMTQsIDIzOCwgCisgICAgMTIwLCAxMCwgMTQsIDIzOCwgMTE5LCAxMCwgMTQsIDIzOCwgMTE4LCAxMCwgMTQsIDIzOCwgMTE3LCAxMCwgMTQsIDIzOCwgCisgICAgMTE2LCAxMCwgMTQsIDIzOCwgMTE1LCAxMCwgMTQsIDIzOCwgMTE0LCAxMCwgMTQsIDIzOCwgMTEzLCAxMCwgMTQsIDIzOCwgCisgICAgMTEyLCAxMCwgMTQsIDIzOCwgMTExLCAxMCwgMTQsIDIzOCwgMTEwLCAxMCwgMTQsIDIzOCwgMTA5LCAxMCwgMTQsIDIzOCwgCisgICAgMTA4LCAxMCwgMTQsIDIzOCwgMTA3LCAxMCwgMTQsIDIzOCwgMTA2LCAxMCwgMTQsIDIzOCwgMTA1LCAxMCwgMTQsIDIzOCwgCisgICAgMTA0LCAxMCwgMTQsIDIzOCwgMTAzLCAxMCwgMTQsIDIzOCwgMTAyLCAxMCwgMTQsIDIzOCwgMTAxLCAxMCwgMTQsIDIzOCwgCisgICAgMTAwLCAxMCwgMTQsIDIzOCwgOTksIDEwLCAxNCwgMjM4LCA5OCwgMTAsIDE0LCAyMzgsIDk3LCAxMCwgMTQsIDIzOCwgOTYsIAorICAgIDEwLCAxNCwgMjM4LCA5NSwgMTAsIDE0LCAyMzgsIDk0LCAxMCwgMTQsIDIzOCwgOTMsIDEwLCAxNCwgMjM4LCA5MiwgMTAsIAorICAgIDE0LCAyMzgsIDkxLCAxMCwgMTQsIDIzOCwgOTAsIDEwLCAxNCwgMjM4LCA4OSwgMTAsIDE0LCAyMzgsIDg4LCAxMCwgMTQsIAorICAgIDIzOCwgODcsIDEwLCAxNCwgMjM4LCA4NiwgMTAsIDE0LCAyMzgsIDg1LCAxMCwgMTQsIDIzOCwgODQsIDEwLCAxNCwgMjM4LCAKKyAgICA4MywgMTAsIDE0LCAyMzgsIDgyLCAxMCwgMTQsIDIzOCwgODEsIDEwLCAxNCwgMjM4LCA4MCwgMjMzLCA5NiwgMjE3LCA4NSwgCisgICAgMTI5LCAyMTksIDIwLCAxMjksIDI0NSwgMzksIDc5LCAxMjksIDIyNCwgMSwgNzksIDEyOSwgNTQsIDUwLCAxMjksIDI0NywgCisgICAgMTQwLCA1MCwgMTI5LCAyMjUsIDE4NSwgNTAsIDEyOSwgMjU0LCAxMzQsIDEyOSwgMjU0LCA2NSwgMTI5LCA0MywgMjI2LCA3LCAKKyAgICAxMjksIDQ0LCAyMjYsIDcsIDEyOSwgMjUzLCAyMjQsIDEyOSwgOTYsIDUwLCAxMjksIDI0OSwgMjI3LCAxMjksIDI0MCwgCisgICAgMTc0LCAxMjksIDI0MywgMjM2LCAyMTgsIDEzMSwgMTI5LCAyMTksIDQ4LCAxMjksIDIxLCAyMTAsIDg2LCAxMjksIDIxLCAKKyAgICAxMTEsIDEyOSwgMjEsIDEwNSwgMTI5LCAyMSwgMTU4LCAxMjksIDIxLCAxNjEsIDEyOSwgMjEsIDE5MCwgMTI5LCAyMSwgCisgICAgMTk1LCAxMjksIDIxLCAxOTksIDEyOSwgMjEsIDE5NiwgMTI5LCAyMSwgMjAxLCAxMjksIDI0OSwgMjM0LCAxMjksIDIyMCwgCisgICAgMTUyLCAxMjksIDIzMywgMjEsIDUwLCAxMjksIDI0NSwgMTA2LCA1MCwgMTI5LCAyNDIsIDEzNywgNTAsIDEyOSwgMjI0LCAKKyAgICAxNiwgNzksIDEyOSwgMjQ5LCAyMjUsIDI1MywgMjE0LCAxMjksIDcsIDYsIDEsIDYxLCAxMjksIDcsIDYsIDEsIDI1MywgCisgICAgMTY2LCAxMjksIDcsIDYsIDEsIDI1MSwgNzQsIDEyOSwgNywgNiwgMSwgMjQ5LCA2OCwgMTI5LCA3LCA2LCAxLCA3NiwgMTI5LCAKKyAgICA3LCA2LCAxLCAyNDUsIDE0LCAxMjksIDcsIDYsIDEsIDI0MywgMjA5LCAxMjksIDcsIDYsIDEsIDI0MiwgNjcsIDEyOSwgNywgCisgICAgNiwgMSwgNzQsIDEyOSwgNywgNiwgMSwgMjM1LCAxNTAsIDEyOSwgNywgNiwgMSwgMjM1LCAyOSwgMTI5LCA3LCA2LCAxLCAKKyAgICAxNTYsIDEyOSwgNywgNiwgMSwgMTk0LCAxMjksIDcsIDYsIDEsIDIzMCwgMzAsIDEyOSwgNywgNiwgMSwgNzgsIDEyOSwgNywgCisgICAgNiwgMSwgMjI2LCAxMDksIDEyOSwgNywgNiwgMSwgMjI0LCA5OSwgMTI5LCA3LCA2LCAxLCAxNTMsIDEyOSwgNywgNiwgMSwgCisgICAgMjIyLCA5MywgMTI5LCA3LCA2LCAxLCAyMTcsIDE1MywgMTI5LCA3LCA2LCAxLCA2OSwgMTI5LCA3LCA2LCAxLCAyMTQsIAorICAgIDEwNSwgMTI5LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjksIDcsIDYsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDYsIDEsIDIxMSwgCisgICAgMTE3LCAxMjksIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjksIDQzLCA0MiwgMTI3LCAxMjksIDIyMywgNTMsIDIxOSwgNDgsIAorICAgIDEyOSwgNDQsIDQyLCAxMjcsIDEyOSwgMjUwLCAzOSwgMjU1LCAyMywgMTI5LCAxMjEsIDIzMiwgMjE5LCAxMjksIDI0MiwgCisgICAgMTQ0LCAyNTUsIDIzLCAxMjksIDcsIDQsIDEsIDYxLCAxMjksIDcsIDQsIDEsIDI1MywgMTY2LCAxMjksIDcsIDQsIDEsIAorICAgIDI1MSwgNzQsIDEyOSwgNywgNCwgMSwgMjQ5LCA2OCwgMTI5LCA3LCA0LCAxLCA3NiwgMTI5LCA3LCA0LCAxLCAyNDUsIDE0LCAKKyAgICAxMjksIDcsIDQsIDEsIDI0MywgMjA5LCAxMjksIDcsIDQsIDEsIDI0MiwgNjcsIDEyOSwgNywgNCwgMSwgNzQsIDEyOSwgNywgCisgICAgNCwgMSwgMjM1LCAxNTAsIDEyOSwgNywgNCwgMSwgMjM1LCAyOSwgMTI5LCA3LCA0LCAxLCAxNTYsIDEyOSwgNywgNCwgMSwgCisgICAgMTk0LCAxMjksIDcsIDQsIDEsIDIzMCwgMzAsIDEyOSwgNywgNCwgMSwgNzgsIDEyOSwgNywgNCwgMSwgMjI2LCAxMDksIAorICAgIDEyOSwgNywgNCwgMSwgMjI0LCA5OSwgMTI5LCA3LCA0LCAxLCAxNTMsIDEyOSwgNywgNCwgMSwgMjIyLCA5MywgMTI5LCA3LCAKKyAgICA0LCAxLCAyMTcsIDE1MywgMTI5LCA3LCA0LCAxLCA2OSwgMTI5LCA3LCA0LCAxLCAyMTQsIDEwNSwgMTI5LCA3LCA0LCAxLCAKKyAgICAyMTIsIDk4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTE3LCAxMjksIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAxMjksIDQzLCAyNDksIDEwNywgMTI3LCAxMjksIDY3LCAyMzIsIDIxOSwgMTI5LCA0NCwgMjQ5LCAxMDcsIAorICAgIDEyNywgMTI5LCAxODQsIDI1MSwgMTQsIDIxNywgODUsIDQ1LCAyMjEsIDgwLCA0NSwgMjIxLCA2OSwgNDUsIDIyMSwgNTgsIAorICAgIDQ1LCAyMjEsIDQ2LCA0NSwgMjIxLCAzNSwgNDUsIDIyMSwgMjQsIDQ1LCAyMjEsIDEzLCA0NSwgMjIxLCAyLCA0NSwgMjIwLCAKKyAgICAyNDcsIDQ1LCAyMjAsIDIzOSwgNDUsIDIyMCwgMjM4LCA0NSwgMjIwLCAyMzcsIDQ1LCAyMjAsIDIzNiwgNDUsIDIyMCwgCisgICAgMjM0LCA0NSwgMjIwLCAyMzMsIDQ1LCAyMjAsIDIzMiwgNDUsIDIyMCwgMjMxLCA0NSwgMjIwLCAyMzAsIDQ1LCAyMjAsIAorICAgIDIyOSwgNDUsIDIyMCwgMjI4LCA0NSwgMjIwLCAyMjcsIDQ1LCAyMjAsIDIyNiwgNDUsIDIyMCwgMjI1LCA0NSwgMjIwLCAKKyAgICAyMjMsIDQ1LCAyMjAsIDIyMiwgNDUsIDIyMCwgMjIxLCA0NSwgMjIwLCAyMjAsIDQ1LCAyMjAsIDIxOSwgNDUsIDIyMCwgCisgICAgMjE4LCA0NSwgMjIwLCAyMTcsIDQ1LCAyMjAsIDIxNiwgNDUsIDIyMCwgMjE1LCA0NSwgMjIwLCAyMTQsIDQ1LCAyMjAsIAorICAgIDIxMiwgNDUsIDIyMCwgMjExLCA0NSwgMjIwLCAyMTAsIDQ1LCAyMjAsIDIwOSwgNDUsIDIyMCwgMjA4LCA0NSwgMjIwLCAKKyAgICAyMDcsIDQ1LCAyMjAsIDIwNiwgNDUsIDIyMCwgMjA1LCA0NSwgMjIwLCAyMDQsIDQ1LCAyMjAsIDIwMywgNDUsIDIyMCwgCisgICAgMjAxLCA0NSwgMjIwLCAyMDAsIDQ1LCAyMjAsIDE5OSwgNDUsIDIyMCwgMTk4LCA0NSwgMjIwLCAxOTcsIDQ1LCAyMjAsIAorICAgIDE5NiwgNDUsIDIyMCwgMTk1LCA0NSwgMjIwLCAxOTQsIDQ1LCAyMjAsIDE5MywgNDUsIDIyMCwgMTkyLCA0NSwgMjIwLCAKKyAgICAxOTAsIDQ1LCAyMjAsIDE4OSwgNDUsIDIyMCwgMTg4LCA0NSwgMjIwLCAxODcsIDQ1LCAyMjAsIDE4NiwgNDUsIDIyMCwgCisgICAgMTg1LCA0NSwgMjIwLCAxODQsIDQ1LCAyMjAsIDE4MywgNDUsIDIyMCwgMTgyLCA0NSwgMjIwLCAxODEsIDQ1LCAyMjAsIAorICAgIDE3OSwgNDUsIDIyMCwgMTc4LCA0NSwgMjIwLCAxNzcsIDQ1LCAyMjAsIDE3NiwgNDUsIDIyMCwgMTc1LCA0NSwgMjIwLCAKKyAgICAxNzQsIDQ1LCAyMjAsIDE3MywgNDUsIDIyMCwgMTcyLCA0NSwgMjIwLCAxNzEsIDQ1LCAyMjAsIDE3MCwgNDUsIDIyMCwgCisgICAgMTY4LCA0NSwgMjIwLCAxNjcsIDQ1LCAyMjAsIDE2NiwgNDUsIDIyMCwgMTY1LCA0NSwgMjIwLCAxNjQsIDQ1LCAyMjAsIAorICAgIDE2MywgNDUsIDIyMCwgMTYyLCA0NSwgMjIwLCAxNjEsIDQ1LCAyMjAsIDE2MCwgNDUsIDIyMCwgMTU5LCA0NSwgMjIxLCAKKyAgICAxNTYsIDQ1LCAyMjEsIDE1NSwgNDUsIDIyMSwgMTU0LCA0NSwgMjIxLCAxNTMsIDQ1LCAyMjEsIDE1MiwgNDUsIDIyMSwgCisgICAgMTUxLCA0NSwgMjIxLCAxNTAsIDQ1LCAyMjEsIDE0OSwgNDUsIDIyMSwgMTQ4LCA0NSwgMjIxLCAxNDcsIDQ1LCAyMjEsIAorICAgIDE0NSwgNDUsIDIyMSwgMTQ0LCA0NSwgMjIxLCAxNDMsIDQ1LCAyMjEsIDE0MiwgNDUsIDIyMSwgMTQxLCA0NSwgMjIxLCAKKyAgICAxNDAsIDQ1LCAyMjEsIDEzOSwgNDUsIDIyMSwgMTM4LCA0NSwgMjIxLCAxMzcsIDQ1LCAyMjEsIDEzNiwgNDUsIDIyMSwgCisgICAgMTM0LCA0NSwgMjIxLCAxMzMsIDQ1LCAyMjEsIDEzMiwgNDUsIDIyMSwgMTMxLCA0NSwgMjIxLCAxMzAsIDQ1LCAyMjEsIAorICAgIDEyOSwgNDUsIDIyMSwgMTI4LCA0NSwgMjIxLCAxMjcsIDQ1LCAyMjEsIDEyNiwgNDUsIDIyMSwgMTI1LCA0NSwgMjIxLCAKKyAgICAxMjMsIDQ1LCAyMjEsIDEyMiwgNDUsIDIyMSwgMTIxLCA0NSwgMjIxLCAxMjAsIDQ1LCAyMjEsIDExOSwgNDUsIDIyMSwgCisgICAgMTE4LCA0NSwgMjIxLCAxMTcsIDQ1LCAyMjEsIDExNiwgNDUsIDIyMSwgMTE1LCA0NSwgMjIxLCAxMTQsIDQ1LCAyMjEsIAorICAgIDExMiwgNDUsIDIyMSwgMTExLCA0NSwgMjIxLCAxMTAsIDQ1LCAyMjEsIDEwOSwgNDUsIDIyMSwgMTA4LCA0NSwgMjIxLCAKKyAgICAxMDcsIDQ1LCAyMjEsIDEwNiwgNDUsIDIyMSwgMTA1LCA0NSwgMjIxLCAxMDQsIDQ1LCAyMjEsIDEwMywgNDUsIDIyMSwgCisgICAgMTAxLCA0NSwgMjIxLCAxMDAsIDQ1LCAyMjEsIDk5LCA0NSwgMjIxLCA5OCwgNDUsIDIyMSwgOTcsIDQ1LCAyMjEsIDk2LCAKKyAgICA0NSwgMjIxLCA5NSwgNDUsIDIyMSwgOTQsIDQ1LCAyMjEsIDkzLCA0NSwgMjIxLCA5MiwgNDUsIDIyMSwgOTAsIDQ1LCAyMjEsIAorICAgIDg5LCA0NSwgMjIxLCA4OCwgNDUsIDIyMSwgODcsIDQ1LCAyMjEsIDg2LCA0NSwgMjIxLCA4NSwgNDUsIDIyMSwgODQsIDQ1LCAKKyAgICAyMjEsIDgzLCA0NSwgMjIxLCA4MiwgNDUsIDIyMSwgODEsIDQ1LCAyMjEsIDc5LCA0NSwgMjIxLCA3OCwgNDUsIDIyMSwgNzcsIAorICAgIDQ1LCAyMjEsIDc2LCA0NSwgMjIxLCA3NSwgNDUsIDIyMSwgNzQsIDQ1LCAyMjEsIDczLCA0NSwgMjIxLCA3MiwgNDUsIDIyMSwgCisgICAgNzEsIDQ1LCAyMjEsIDcwLCA0NSwgMjIxLCA2OCwgNDUsIDIyMSwgNjcsIDQ1LCAyMjEsIDY2LCA0NSwgMjIxLCA2NSwgNDUsIAorICAgIDIyMSwgNjQsIDQ1LCAyMjEsIDYzLCA0NSwgMjIxLCA2MiwgNDUsIDIyMSwgNjEsIDQ1LCAyMjEsIDYwLCA0NSwgMjIxLCA1OSwgCisgICAgNDUsIDIyMSwgNTcsIDQ1LCAyMjEsIDU2LCA0NSwgMjIxLCA1NSwgNDUsIDIyMSwgNTQsIDQ1LCAyMjEsIDUzLCA0NSwgMjIxLCAKKyAgICA1MiwgNDUsIDIyMSwgNTEsIDQ1LCAyMjEsIDUwLCA0NSwgMjIxLCA0OSwgNDUsIDIyMSwgNDgsIDQ1LCAyMjEsIDQ1LCA0NSwgCisgICAgMjIxLCA0NCwgNDUsIDIyMSwgNDMsIDQ1LCAyMjEsIDQyLCA0NSwgMjIxLCA0MSwgNDUsIDIyMSwgNDAsIDQ1LCAyMjEsIDM5LCAKKyAgICA0NSwgMjIxLCAzOCwgNDUsIDIyMSwgMzcsIDQ1LCAyMjEsIDM2LCA0NSwgMjIxLCAzNCwgNDUsIDIyMSwgMzMsIDQ1LCAyMjEsIAorICAgIDMyLCA0NSwgMjIxLCAzMSwgNDUsIDIyMSwgMzAsIDQ1LCAyMjEsIDI5LCA0NSwgMjIxLCAyOCwgNDUsIDIyMSwgMjcsIDQ1LCAKKyAgICAyMjEsIDI2LCA0NSwgMjIxLCAyNSwgNDUsIDIyMSwgMjMsIDQ1LCAyMjEsIDIyLCA0NSwgMjIxLCAyMSwgNDUsIDIyMSwgMjAsIAorICAgIDQ1LCAyMjEsIDE5LCA0NSwgMjIxLCAxOCwgNDUsIDIyMSwgMTcsIDQ1LCAyMjEsIDE2LCA0NSwgMjIxLCAxNSwgNDUsIDIyMSwgCisgICAgMTQsIDQ1LCAyMjEsIDEyLCA0NSwgMjIxLCAxMSwgNDUsIDIyMSwgMTAsIDQ1LCAyMjEsIDksIDQ1LCAyMjEsIDgsIDQ1LCAKKyAgICAyMjEsIDcsIDQ1LCAyMjEsIDYsIDQ1LCAyMjEsIDUsIDQ1LCAyMjEsIDQsIDQ1LCAyMjEsIDMsIDQ1LCAyMjEsIDEsIDQ1LCAKKyAgICAyMjEsIDAsIDQ1LCAyMjAsIDI1NSwgNDUsIDIyMCwgMjU0LCA0NSwgMjIwLCAyNTMsIDQ1LCAyMjAsIDI1MiwgNDUsIDIyMCwgCisgICAgMjUxLCA0NSwgMjIwLCAyNTAsIDQ1LCAyMjAsIDI0OSwgNDUsIDIyMCwgMjQ4LCA0NSwgMjIwLCAyNDYsIDQ1LCAyMjAsIAorICAgIDI0NSwgNDUsIDIyMCwgMjQ0LCA0NSwgMjIwLCAyNDMsIDQ1LCAyMjAsIDI0MiwgNDUsIDIyMCwgMjQxLCA0NSwgMjIwLCAKKyAgICAyNDAsIDIyNywgMjA2LCAyMjcsIDIwOCwgMjE4LCAxNTQsIDY0LCAyNDEsIDI0MCwgMjE5LCA1MCwgMjE4LCAxNTQsIDY0LCAKKyAgICAyMTYsIDIxMywgMjE4LCA4NiwgMjQ1LCAxNTEsIDY0LCAyMTYsIDIxMywgMjQ1LCA2NCwgMjQ1LCAxNTEsIDY0LCAyMTUsIAorICAgIDI0NCwgMjQ1LCAxMTcsIDI0NSwgMTQwLCAyNDUsIDE0MSwgMjU1LCAxNiwgMjU1LCAxNywgMjU0LCAxNzYsIDI1MiwgNTUsIAorICAgIDI1MiwgMTg3LCAyNTEsIDEzOSwgMTM1LCAyMTcsIDkwLCAyMDMsIDIxNywgOTAsIDI0MCwgMjM0LCAyMTcsIDk0LCAyMzIsIAorICAgIDIyMCwgMjQ0LCAxNTMsIDE2NiwgMjMyLCAyMTksIDI0NSwgMTUxLCA2NCwgMjMyLCAyMTksIDIzMywgNiwgMjI4LCAxNDAsIAorICAgIDI0NSwgMTIwLCAyMzIsIDIyMCwgMjE3LCA5MCwgNjcsIDIxNywgOTAsIDIxMiwgMTE4LCAyNDQsIDI4LCAyNDQsIDE1MywgCisgICAgMjQ0LCAxMzMsIDI1MCwgMjM4LCAyMjMsIDU2LCAyNDksIDE1MSwgMjIwLCAzMCwgMjI2LCAxMzQsIDIzMiwgMTU2LCAxMTEsIAorICAgIDIxOSwgNjAsIDIyMCwgMzAsIDIzNiwgNiwgMjMyLCAxNTYsIDIxMCwgODYsIDIxOSwgMTkzLCAyNDgsIDE1OSwgMjMyLCAKKyAgICAyMTAsIDI0NSwgODUsIDI0NywgMTYzLCAyNDgsIDM5LCAyNDksIDE4NiwgMTExLCAyNDgsIDE0OSwgMjQ4LCAzOSwgMjQ5LCAKKyAgICAxODYsIDEwNSwgMjQ4LCAxNDgsIDI0OCwgMzksIDI0OSwgMTg2LCAxNTgsIDI0OCwgMTQ3LCAyNDgsIDM5LCAyNDksIDE4NiwgCisgICAgMTYxLCAyNDgsIDE0NiwgMTUyLCAyNTUsIDE2LCAyMjksIDIxNCwgMjE3LCAxNzgsIDIzNiwgNjksIDIxNywgMTgxLCAyNDUsIAorICAgIDE1MSwgNjQsIDIxNSwgMjQ1LCAyNTEsIDIyMSwgMjQ1LCA3MCwgMjUxLCAxMywgMjUxLCAxNSwgMjQ1LCAxNTEsIDY0LCAKKyAgICAyMzEsIDg2LCAyNDUsIDExOCwgMjE4LCA2MiwgMjE4LCA3OSwgMjQ1LCA4NSwgMjQ1LCA4NiwgMjM1LCAyMzksIDIyMCwgCisgICAgMTQwLCAxNjEsIDI0NCwgMTE1LCAyMjAsIDEzOSwgMjQzLCAyNDUsIDIzNSwgMjM5LCAyMjAsIDE0MCwgMTU4LCAyNDIsIAorICAgIDEyOCwgMjIwLCAxMzksIDI0MiwgMTI1LCAyMzUsIDIzOSwgMjIwLCAxNDAsIDEwNSwgMjIzLCAxMjQsIDIyMCwgMTM5LCAKKyAgICAyMjIsIDE0NywgMjM1LCAyMzksIDIyMCwgMTQwLCAxMTEsIDIxNCwgMTc0LCAyMjAsIDEzOSwgMjE0LCAxMzMsIDIxOSwgMjMsIAorICAgIDI0OCwgNzEsIDI0OCwgNzMsIDIyNiwgODIsIDI1MCwgMTUwLCAyMjYsIDg0LCAxMjUsIDIyNiwgMjQ0LCAyMjQsIDE5NiwgCisgICAgMjQxLCA1NCwgMjUxLCAxNTgsIDIyNSwgMTc2LCAyNDEsIDIxMCwgMjUxLCAxNjksIDIyOCwgODAsIDI1MSwgMTU4LCAyNDEsIAorICAgIDIxMCwgMjI5LCAxODAsIDIzNSwgMjQ5LCAyMzUsIDI1MSwgMjI5LCA4NywgMjMyLCAyMTksIDIyOSwgMTA0LCAyMTgsIDE1NCwgCisgICAgNjQsIDIyMSwgMTYwLCAyNTQsIDI2LCAyMTgsIDIyNSwgMjQ1LCAxNTEsIDY0LCAyMjEsIDE2MCwgMjU0LCAyNiwgMjQ1LCAKKyAgICA4OCwgMTM1LCAyMTcsIDkxLCAyMjAsIDEyOSwgMjAzLCAyMTcsIDkxLCAyMjAsIDEyOSwgMjQwLCAyMzEsIDEzNSwgMjE3LCAKKyAgICA5MSwgMiwgMjM1LCA0MSwgMjAzLCAyMTcsIDkxLCAyLCAyMzUsIDQxLCAyNDAsIDIzMiwgMjMyLCAyMjAsIDIxNywgOTEsIAorICAgIDIyMCwgMTI5LCA2NywgMjE3LCA5MSwgMjIwLCAxMjksIDIxMiwgMTE3LCAyMjYsIDEsIDIzMiwgMjIwLCAyNDQsIDIyLCAKKyAgICAyMjYsIDEsIDIzMiwgMjIwLCAyNDYsIDExNCwgMjI1LCAzNSwgMjI2LCAxLCAyMzIsIDIyMCwgMjUyLCAxODYsIDIyNiwgMSwgCisgICAgMjMyLCAyMjAsIDIxNCwgMTYzLCAyMjUsIDMxLCAyMjMsIDUzLCAyMzIsIDIyMCwgMjQ0LCAxNTMsIDIyMywgNTMsIDIzNSwgCisgICAgMjQ5LCAyMjMsIDM4LCAyMTksIDE1NywgMjIwLCAzMCwgMTA1LCAyMTksIDE1NCwgMjE4LCAyMjcsIDIxOSwgMTU3LCAyMjAsIAorICAgIDMwLCAxNTgsIDIxOSwgMTUzLCAyMTgsIDIyNiwgMjQ4LCAzOSwgMjQ5LCAxODYsIDIxOCwgMTA3LCAyNDgsIDE0NSwgMjI0LCAKKyAgICAxODYsIDIxNCwgMTMyLCAxMTEsIDIyNCwgMTg2LCAyMTQsIDEzMCwgMjI0LCAxNTIsIDIyNCwgMTg2LCAyMTQsIDEzMiwgCisgICAgMTA1LCAyMjQsIDE4NiwgMjE0LCAxMjksIDIyNCwgMTUxLCAyMjAsIDEzMCwgMjE1LCAyNDMsIDIxOCwgMTUzLCAyMTgsIDkwLCAKKyAgICAyNTEsIDE0LCAyNTAsIDE1MCwgMjUwLCAyMTcsIDIzMSwgNDgsIDIxMiwgNTksIDIzMCwgNDgsIDIxOCwgMTU0LCA2NCwgCisgICAgMjQyLCAxMTQsIDI1NCwgMjYsIDIxOCwgMTU0LCA2NCwgMjI0LCAxNjksIDI1NCwgMjYsIDIxOSwgMjIsIDI0NSwgMTUxLCAKKyAgICA2NCwgMjQyLCAxMTQsIDI1NCwgMjYsIDI0NSwgMTUxLCA2NCwgMjI0LCAxNjksIDI1NCwgMjYsIDI0NSwgMTE1LCAyMTgsIAorICAgIDE1NCwgNjQsIDIxOCwgMTA3LCAyMTksIDM3LCAyMTksIDE1NywgMjQyLCAxNDgsIDEzNSwgMjM1LCAyMDIsIDIyMCwgMTA5LCAKKyAgICAyMTksIDE1NywgMTM1LCAyMzUsIDIwMiwgMjIxLCAxOTYsIDI0OSwgMTg2LCAyMjAsIDEzNywgMjM1LCAyMDIsIDI0OSwgCisgICAgMTIxLCAyMTgsIDEwOCwgMjE2LCAyMzcsIDIxOCwgMTcwLCAyMjYsIDE3MywgMjE3LCAxNjgsIDI0OSwgMjI2LCAyMjYsIAorICAgIDE0NiwgMjI0LCAxODcsIDIzMSwgNDcsIDIyNSwgMjIsIDI1NCwgNjEsIDIyNCwgMTgxLCAyNDksIDIyNiwgMjU0LCA3NywgCisgICAgMjI5LCAxNjgsIDIxOSwgMjAyLCA3LCA2LCAxLCAyNDMsIDAsIDcsIDQsIDEsIDI0MywgMCwgMjUwLCAxNjcsIDI1NCwgMTU3LCAKKyAgICAxODMsIDIxOCwgNjgsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTY1LCAxLCAyMzIsIDE4MSwgMjA5LCAyMDksIDEsIAorICAgIDI0NCwgNTIsIDI0NCwgNDQsIDIwOSwgMjA5LCAxLCAyNDQsIDUyLCAyNDQsIDE2NSwgMjA5LCAyMDksIDEsIDIyMiwgMjEzLCAKKyAgICAyMDksIDIwOSwgMSwgMjMyLCAxNjIsIDYzLCAxNjQsIDI1MSwgMjMxLCAyMjAsIDUsIDI0MiwgMjIyLCAyMzAsIDI1MywgCisgICAgMjIzLCA0NCwgMjQzLCAyMjMsIDI0MywgMjIyLCAyNDMsIDIyMSwgMjMwLCA1MCwgMjA5LCAyNTEsIDIwOSwgMjUyLCAyMDksIAorICAgIDI1NCwgMjMyLCAxMDcsIDIyMiwgMjIxLCAyMzIsIDEwOSwgMjIyLCAyMjMsIDIyNSwgMjI3LCAyMzIsIDEwNiwgMjIyLCAKKyAgICAyMjAsIDIyOCwgMTExLCAyMzAsIDE3MCwgMjExLCAyMjksIDIzMiwgMTA4LCAyMjIsIDIyMiwgMjQzLCAyNDQsIDIyNSwgCisgICAgMjI2LCAyMTIsIDE1LCAyNDUsIDE3MCwgMjQzLCAyMzMsIDIzMCwgMjM0LCAyMjYsIDIwMSwgMjE0LCAxMzQsIDg3LCAyMzAsIAorICAgIDIzNCwgMjQ4LCAxNjUsIDg3LCA4LCAzLCAyMzUsIDE2NCwgNzksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA3MSwgCisgICAgMjMzLCAyNiwgMTI3LCAyMTMsIDExOCwgMjEzLCA3LCAyMTIsIDE5NSwgMjEyLCAxODQsIDIxMiwgMTczLCAyMTIsIDE2MiwgCisgICAgMjEyLCAxNTEsIDIxMiwgMTQwLCAyMTIsIDEyOSwgMjEzLCAxMTcsIDIxMywgMTA2LCAyMTMsIDk1LCAyMTMsIDg0LCAyMTMsIAorICAgIDczLCAyMTMsIDYyLCAyMTMsIDUxLCAyNTEsIDc5LCAyMjYsIDE1OSwgNzksIDI1MSwgMjA0LCAyMDksIDI1MywgMTUsIDUsIAorICAgIDIyNywgMjE1LCAyMTYsIDI0MCwgMTUsIDUsIDIyNywgMjE1LCAxMTUsIDIyNywgMjE1LCAyNTEsIDEwNywgMTE1LCAyNTEsIAorICAgIDEwNiwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIxOSwgMTA0LCAyNTAsIDgxLCAyMTQsIDksIDIxMywgNDAsIDIxMywgMjksIAorICAgIDIxMywgMTgsIDIxMywgNiwgMjEyLCAyNTEsIDIxMiwgMjQwLCAyMTIsIDIyOSwgMjEyLCAyMTgsIDIxMiwgMjA3LCAyMTIsIAorICAgIDE5OSwgMjEyLCAxOTgsIDIxMiwgMTk3LCAyMTIsIDE5NiwgMjEyLCAxOTQsIDIxMiwgMTkzLCAyMTIsIDE5MiwgMjEyLCAKKyAgICAxOTEsIDIxMiwgMTkwLCAyMTIsIDE4OSwgMjEyLCAxODgsIDIxMiwgMTg3LCAyMTIsIDE4NiwgMjEyLCAxODUsIDIxMiwgCisgICAgMTgzLCAyMTIsIDE4MiwgMjEyLCAxODEsIDIxMiwgMTgwLCAyMTIsIDE3OSwgMjEyLCAxNzgsIDIxMiwgMTc3LCAyMTIsIAorICAgIDE3NiwgMjEyLCAxNzUsIDIxMiwgMTc0LCAyMTIsIDE3MiwgMjEyLCAxNzEsIDIxMiwgMTcwLCAyMTIsIDE2OSwgMjEyLCAKKyAgICAxNjgsIDIxMiwgMTY3LCAyMTIsIDE2NiwgMjEyLCAxNjUsIDIxMiwgMTY0LCAyMTIsIDE2MywgMjEyLCAxNjEsIDIxMiwgCisgICAgMTYwLCAyMTIsIDE1OSwgMjEyLCAxNTgsIDIxMiwgMTU3LCAyMTIsIDE1NiwgMjEyLCAxNTUsIDIxMiwgMTU0LCAyMTIsIAorICAgIDE1MywgMjEyLCAxNTIsIDIxMiwgMTUwLCAyMTIsIDE0OSwgMjEyLCAxNDgsIDIxMiwgMTQ3LCAyMTIsIDE0NiwgMjEyLCAKKyAgICAxNDUsIDIxMiwgMTQ0LCAyMTIsIDE0MywgMjEyLCAxNDIsIDIxMiwgMTQxLCAyMTIsIDEzOSwgMjEyLCAxMzgsIDIxMiwgCisgICAgMTM3LCAyMTIsIDEzNiwgMjEyLCAxMzUsIDIxMiwgMTM0LCAyMTIsIDEzMywgMjEyLCAxMzIsIDIxMiwgMTMxLCAyMTIsIAorICAgIDEzMCwgMjEyLCAxMjgsIDIxMiwgMTI3LCAyMTIsIDEyNiwgMjEyLCAxMjUsIDIxMiwgMTI0LCAyMTIsIDEyMywgMjEyLCAKKyAgICAxMjIsIDIxMiwgMTIxLCAyMTIsIDEyMCwgMjEyLCAxMTksIDIxMywgMTE2LCAyMTMsIDExNSwgMjEzLCAxMTQsIDIxMywgCisgICAgMTEzLCAyMTMsIDExMiwgMjEzLCAxMTEsIDIxMywgMTEwLCAyMTMsIDEwOSwgMjEzLCAxMDgsIDIxMywgMTA3LCAyMTMsIAorICAgIDEwNSwgMjEzLCAxMDQsIDIxMywgMTAzLCAyMTMsIDEwMiwgMjEzLCAxMDEsIDIxMywgMTAwLCAyMTMsIDk5LCAyMTMsIDk4LCAKKyAgICAyMTMsIDk3LCAyMTMsIDk2LCAyMTMsIDk0LCAyMTMsIDkzLCAyMTMsIDkyLCAyMTMsIDkxLCAyMTMsIDkwLCAyMTMsIDg5LCAKKyAgICAyMTMsIDg4LCAyMTMsIDg3LCAyMTMsIDg2LCAyMTMsIDg1LCAyMTMsIDgzLCAyMTMsIDgyLCAyMTMsIDgxLCAyMTMsIDgwLCAKKyAgICAyMTMsIDc5LCAyMTMsIDc4LCAyMTMsIDc3LCAyMTMsIDc2LCAyMTMsIDc1LCAyMTMsIDc0LCAyMTMsIDcyLCAyMTMsIDcxLCAKKyAgICAyMTMsIDcwLCAyMTMsIDY5LCAyMTMsIDY4LCAyMTMsIDY3LCAyMTMsIDY2LCAyMTMsIDY1LCAyMTMsIDY0LCAyMTMsIDYzLCAKKyAgICAyMTMsIDYxLCAyMTMsIDYwLCAyMTMsIDU5LCAyMTMsIDU4LCAyMTMsIDU3LCAyMTMsIDU2LCAyMTMsIDU1LCAyMTMsIDU0LCAKKyAgICAyMTMsIDUzLCAyMTMsIDUyLCAyMTMsIDUwLCAyMTMsIDQ5LCAyMTMsIDQ4LCAyMTMsIDQ3LCAyMTMsIDQ2LCAyMTMsIDQ1LCAKKyAgICAyMTMsIDQ0LCAyMTMsIDQzLCAyMTMsIDQyLCAyMTMsIDQxLCAyMTMsIDM5LCAyMTMsIDM4LCAyMTMsIDM3LCAyMTMsIDM2LCAKKyAgICAyMTMsIDM1LCAyMTMsIDM0LCAyMTMsIDMzLCAyMTMsIDMyLCAyMTMsIDMxLCAyMTMsIDMwLCAyMTMsIDI4LCAyMTMsIDI3LCAKKyAgICAyMTMsIDI2LCAyMTMsIDI1LCAyMTMsIDI0LCAyMTMsIDIzLCAyMTMsIDIyLCAyMTMsIDIxLCAyMTMsIDIwLCAyMTMsIDE5LCAKKyAgICAyMTMsIDE3LCAyMTMsIDE2LCAyMTMsIDE1LCAyMTMsIDE0LCAyMTMsIDEzLCAyMTMsIDEyLCAyMTMsIDExLCAyMTMsIDEwLCAKKyAgICAyMTMsIDksIDIxMywgOCwgMjEzLCA1LCAyMTMsIDQsIDIxMywgMywgMjEzLCAyLCAyMTMsIDEsIDIxMywgMCwgMjEyLCAyNTUsIAorICAgIDIxMiwgMjU0LCAyMTIsIDI1MywgMjEyLCAyNTIsIDIxMiwgMjUwLCAyMTIsIDI0OSwgMjEyLCAyNDgsIDIxMiwgMjQ3LCAKKyAgICAyMTIsIDI0NiwgMjEyLCAyNDUsIDIxMiwgMjQ0LCAyMTIsIDI0MywgMjEyLCAyNDIsIDIxMiwgMjQxLCAyMTIsIDIzOSwgCisgICAgMjEyLCAyMzgsIDIxMiwgMjM3LCAyMTIsIDIzNiwgMjEyLCAyMzUsIDIxMiwgMjM0LCAyMTIsIDIzMywgMjEyLCAyMzIsIAorICAgIDIxMiwgMjMxLCAyMTIsIDIzMCwgMjEyLCAyMjgsIDIxMiwgMjI3LCAyMTIsIDIyNiwgMjEyLCAyMjUsIDIxMiwgMjI0LCAKKyAgICAyMTIsIDIyMywgMjEyLCAyMjIsIDIxMiwgMjIxLCAyMTIsIDIyMCwgMjEyLCAyMTksIDIxMiwgMjE3LCAyMTIsIDIxNiwgCisgICAgMjEyLCAyMTUsIDIxMiwgMjE0LCAyMTIsIDIxMywgMjEyLCAyMTIsIDIxMiwgMjExLCAyMTIsIDIxMCwgMjEyLCAyMDksIAorICAgIDIxMiwgMjA4LCAyMTIsIDIwNiwgMjEyLCAyMDUsIDIxMiwgMjA0LCAyMTIsIDIwMywgMjEyLCAyMDIsIDIxMiwgMjAxLCAKKyAgICAyMTIsIDIwMCwgNywgNiwgMSwgMTE2LCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDIzMSwgCisgICAgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMTYwLCAyLCAKKyAgICA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIAorICAgIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIAorICAgIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgCisgICAgMzksIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDE2MCwgCisgICAgMiwgMjUwLCAzOSwgMjIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgCisgICAgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDIyOSwgODUsIDIsIDIxNiwgOTAsIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIAorICAgIDIyMCwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAKKyAgICAyMjAsIDI1MiwgNTEsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAKKyAgICAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgCisgICAgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMTQyLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCAKKyAgICA3LCA0LCAxLCAyMjIsIDk0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCA1OSwgCisgICAgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDcyLCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA3MiwgCisgICAgMjIsIDE4NCwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNzIsIDIyLCAxODQsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgNzIsIAorICAgIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDU5LCA3MiwgMjIsIDE4NCwgNywgNiwgMSwgMjQwLCAxNjEsIAorICAgIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjksIDIyLCA1OSwgNzIsIDIyLCAKKyAgICAxNDIsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyMzUsIDE1MSwgMiwgMTg0LCA3LCA0LCAxLCAyMzUsIDE1MSwgCisgICAgMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMTg0LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMTg0LCAKKyAgICA3LCA2LCAxLCAyMzIsIDU1LCAyLCAxODQsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDE4NCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIAorICAgIDE4NCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE4NCwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE4NCwgNywgNCwgMSwgMjU0LCAyNTMsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAKKyAgICAyMDQsIDE0NCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIwNCwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgCisgICAgMTA2LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDYsIDIsIDE0MiwgNywgNCwgMSwgMjIxLCAxOTgsIAorICAgIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMjEsIDE5OCwgMiwgMTQyLCA3LCA0LCAxLCAyNDEsIDU4LCAyMjEsIDE5OCwgMiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MSwgNTgsIDIyMSwgMTk4LCAyLCAxNDIsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCAKKyAgICA3MiwgMiwgMjU0LCAxNzksIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEyLCAzMCwgOSwgMjIwLCAxMzcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk3LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIyNiwgCisgICAgMjM4LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY5LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIAorICAgIDIxMCwgMjEyLCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDc2LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgCisgICAgNzIsIDIsIDI1NCwgMjUyLCA5LCAyMjAsIDEzNywgMjI4LCA2OCwgMiwgMjM0LCAxODAsIDE0NiwgMSwgMjM0LCAxMTUsIDM2LCAKKyAgICAxMTcsIDIzNSwgMjksIDM2LCAxMTcsIDIyOSwgODQsIDM2LCAxMTcsIDI1MSwgNzQsIDM2LCAxMTcsIDIyNywgMTcxLCAzNiwgCisgICAgMTE3LCAyMTUsIDE2MCwgMzYsIDExNywgMjI4LCAxMTYsIDM2LCAxMTcsIDIxNywgMTUzLCAzNiwgMTE3LCAyMzAsIDMwLCAKKyAgICAzNiwgMTE3LCAyMjYsIDEwOSwgMzYsIDExNywgMTk0LCAzNiwgMTE3LCAyMTEsIDExNywgMzYsIDExNywgMTUzLCAzNiwgCisgICAgMTE3LCAxNTYsIDM2LCAxMTcsIDIxNCwgMTA1LCAzNiwgMTE3LCAyMzIsIDE4MiwgMzYsIDExNywgMjMyLCAxOTEsIDM2LCAKKyAgICAxMTcsIDIyMiwgMTgyLCAzNiwgMTE3LCAyMjgsIDk4LCAzNiwgMTE3LCAyMzUsIDE1MCwgMzYsIDExNywgMjIwLCAxMDYsIAorICAgIDM2LCAxMTcsIDIxOCwgMjI4LCAzNiwgMTE3LCAyMjIsIDkzLCAzNiwgMTE3LCAyNDIsIDY3LCAzNiwgMTE3LCAyMzMsIDIzOCwgCisgICAgMzYsIDMsIDIzNSwgMTYsIDM2LCAzLCAyMzQsIDk4LCAzNiwgMywgMjM0LCA4OSwgMzYsIDMsIDIzMywgMjIzLCAzNiwgMywgCisgICAgMjMzLCAxOTQsIDM2LCAzLCAyMzQsIDE4OCwgMzYsIDMsIDIzNCwgMTg3LCAzNiwgMywgMjM0LCAyNTIsIDM2LCAzLCAyMzQsIAorICAgIDM0LCAzNiwgMywgMjM0LCAxNiwgMzYsIDMsIDIzNCwgMjAxLCAzNiwgMywgMjI5LCA4MSwgMzYsIDMsIDIyOSwgMzIsIDM2LCAKKyAgICAzLCAyMjksIDI4LCAzNiwgMywgMjI4LCAyNTMsIDM2LCAzLCAyMjgsIDI0NiwgMzYsIDMsIDIyOSwgNjksIDM2LCAzLCAyMjksIAorICAgIDY3LCAzNiwgMywgMjI5LCA3OCwgMzYsIDMsIDIyOSwgOSwgMzYsIDMsIDIyOSwgNCwgMzYsIDMsIDIyOSwgNzEsIDM2LCAzLCAKKyAgICAyNTEsIDQwLCAzNiwgMywgMjUwLCA1OSwgMzYsIDMsIDI1MCwgNDksIDM2LCAzLCAyNDksIDEyMCwgMzYsIDMsIDI0OSwgOTEsIAorICAgIDM2LCAzLCAyNTAsIDE5OCwgMzYsIDMsIDI1MCwgMTkwLCAzNiwgMywgMjUxLCAzMCwgMzYsIDMsIDI0OSwgMjQ2LCAzNiwgMywgCisgICAgMjQ5LCAxODIsIDM2LCAzLCAyNTAsIDIzMCwgMzYsIDMsIDIyNywgMTY4LCAzNiwgMywgMjI3LCAxNTIsIDM2LCAzLCAyMjcsIAorICAgIDE0NywgMzYsIDMsIDIyNywgMTMyLCAzNiwgMywgMjI3LCAxMjUsIDM2LCAzLCAyMjcsIDE2MCwgMzYsIDMsIDIyNywgMTU5LCAKKyAgICAzNiwgMywgMjI3LCAxNjUsIDM2LCAzLCAyMjcsIDEzOCwgMzYsIDMsIDIyNywgMTM2LCAzNiwgMywgMjI3LCAxNjMsIDM2LCAKKyAgICAzLCAyMTUsIDE1NiwgMzYsIDMsIDIxNSwgMTM2LCAzNiwgMywgMjE1LCAxMzUsIDM2LCAzLCAyMTUsIDEyNCwgMzYsIDMsIAorICAgIDIxNSwgMTIxLCAzNiwgMywgMjE1LCAxNTIsIDM2LCAzLCAyMTUsIDE1MSwgMzYsIDMsIDIxNSwgMTU1LCAzNiwgMywgMjE1LCAKKyAgICAxMzQsIDM2LCAzLCAyMTUsIDEzMywgMzYsIDMsIDIxNSwgMTU0LCAzNiwgMywgMjI4LCAxMTQsIDM2LCAzLCAyMjgsIDEwMCwgCisgICAgMzYsIDMsIDIyOCwgOTksIDM2LCAzLCAyMjgsIDgzLCAzNiwgMywgMjI4LCA4MiwgMzYsIDMsIDIyOCwgMTEwLCAzNiwgMywgCisgICAgMjI4LCAxMDksIDM2LCAzLCAyMjgsIDExMywgMzYsIDMsIDIyOCwgODUsIDM2LCAzLCAyMjgsIDg0LCAzNiwgMywgMjI4LCAKKyAgICAxMTIsIDM2LCAzLCAyMTcsIDEwMiwgMzYsIDMsIDIxNiwgMTE4LCAzNiwgMywgMjE2LCAxMDQsIDM2LCAzLCAyMTUsIDExOSwgCisgICAgMzYsIDMsIDIxNSwgODUsIDM2LCAzLCAyMTcsIDIzLCAzNiwgMywgMjE3LCAxMiwgMzYsIDMsIDIxNywgODAsIDM2LCAzLCAKKyAgICAxMTIsIDM2LCAzLCAyMTYsIDE4LCAzNiwgMywgMjE3LCA0MiwgMzYsIDMsIDIyOSwgMjMwLCAzNiwgMywgMjI4LCAyMzgsIAorICAgIDM2LCAzLCAyMjgsIDIxMywgMzYsIDMsIDIyNywgMjQyLCAzNiwgMywgMjI3LCAxODMsIDM2LCAzLCAyMjksIDExMiwgMzYsIAorICAgIDMsIDIyOSwgMTA4LCAzNiwgMywgMjI5LCAyMTcsIDM2LCAzLCAyMjgsIDc5LCAzNiwgMywgMjI4LCA2OSwgMzYsIDMsIDIyOSwgCisgICAgMTkyLCAzNiwgMywgMjI2LCA5MywgMzYsIDMsIDIyNSwgMTExLCAzNiwgMywgMjI1LCA3NCwgMzYsIDMsIDIyNCwgMTUzLCAKKyAgICAzNiwgMywgMjI0LCAxMjIsIDM2LCAzLCAyMjUsIDIyNCwgMzYsIDMsIDIyNSwgMjE0LCAzNiwgMywgMjI2LCA3NSwgMzYsIDMsIAorICAgIDIyNSwgMTksIDM2LCAzLCAyMjQsIDI1MiwgMzYsIDMsIDIyNSwgMjM4LCAzNiwgMywgMjMxLCAyNDIsIDM2LCAzLCAyMzAsIAorICAgIDIzNSwgMzYsIDMsIDIzMCwgMjA2LCAzNiwgMywgMjMwLCAxMDcsIDM2LCAzLCAyMzAsIDU5LCAzNiwgMywgMjMxLCA5NiwgCisgICAgMzYsIDMsIDIzMSwgODUsIDM2LCAzLCAyMzEsIDIwOCwgMzYsIDMsIDIzMCwgMTY2LCAzNiwgMywgMjMwLCAxMzcsIDM2LCAzLCAKKyAgICAyMzEsIDE0MCwgMzYsIDMsIDIxMSwgMTAzLCAzNiwgMywgMjExLCA4LCAzNiwgMywgMjEwLCAyNTUsIDM2LCAzLCAyMTAsIAorICAgIDIxMiwgMzYsIDMsIDIxMCwgMTgxLCAzNiwgMywgMjExLCA0NywgMzYsIDMsIDIxMSwgNDQsIDM2LCAzLCAyMTEsIDgyLCAzNiwgCisgICAgMywgMjEwLCAyNDQsIDM2LCAzLCAyMTAsIDIyOSwgMzYsIDMsIDIxMSwgNTUsIDM2LCAzLCAyMjMsIDE4NywgMzYsIDMsIAorICAgIDIyMywgMzgsIDM2LCAzLCAyMjIsIDI0MiwgMzYsIDMsIDIyMiwgMTQyLCAzNiwgMywgMjIyLCAxMTQsIDM2LCAzLCAyMjMsIAorICAgIDEzMSwgMzYsIDMsIDIyMywgMTExLCAzNiwgMywgMjIzLCAxNjksIDM2LCAzLCAyMjIsIDIxMywgMzYsIDMsIDIyMiwgMTk5LCAKKyAgICAzNiwgMywgMjIzLCAxMzksIDM2LCAzLCAyMzMsIDE0MCwgMzYsIDMsIDIzMiwgMjQ3LCAzNiwgMywgMjMyLCAyMzMsIDM2LCAKKyAgICAzLCAyMzIsIDEwMywgMzYsIDMsIDIzMiwgNzgsIDM2LCAzLCAyMzMsIDY0LCAzNiwgMywgMjMzLCA1NiwgMzYsIDMsIDIzMywgCisgICAgMTE1LCAzNiwgMywgMjMyLCAxNjIsIDM2LCAzLCAyMzIsIDEzMywgMzYsIDMsIDIzMywgODAsIDM2LCAzLCAyMTQsIDI2LCAKKyAgICAzNiwgMywgMjEzLCAxNzYsIDM2LCAzLCAyMTMsIDE2MiwgMzYsIDMsIDIxMiwgMTE2LCAzNiwgMywgMjEyLCAxMDksIDM2LCAKKyAgICAzLCAyMTMsIDI1NSwgMzYsIDMsIDIxMywgMjUwLCAzNiwgMywgMjE0LCAyMywgMzYsIDMsIDIxMywgMTM4LCAzNiwgMywgCisgICAgMjEzLCAxMjcsIDM2LCAzLCAyMTQsIDUsIDM2LCAzLCAyMzIsIDE4MCwgMzYsIDMsIDIzMiwgMTc1LCAzNiwgMywgMjMyLCAKKyAgICAxNzQsIDM2LCAzLCAyMzIsIDE3MSwgMzYsIDMsIDIzMiwgMTcwLCAzNiwgMywgMjMyLCAxNzcsIDM2LCAzLCAyMzIsIDE3NiwgCisgICAgMzYsIDMsIDIzMiwgMTc5LCAzNiwgMywgMjMyLCAxNzMsIDM2LCAzLCAyMzIsIDE3MiwgMzYsIDMsIDIzMiwgMTc4LCAzNiwgCisgICAgMywgMjMyLCAxODksIDM2LCAzLCAyMzIsIDE4NCwgMzYsIDMsIDIzMiwgMTgzLCAzNiwgMywgMjMyLCAxNjcsIDM2LCAzLCAKKyAgICAyMzIsIDE2NiwgMzYsIDMsIDIzMiwgMTg2LCAzNiwgMywgMjMyLCAxODUsIDM2LCAzLCAyMzIsIDE4OCwgMzYsIDMsIDIzMiwgCisgICAgMTY5LCAzNiwgMywgMjMyLCAxNjgsIDM2LCAzLCAyMzIsIDE4NywgMzYsIDMsIDIyMiwgMTgwLCAzNiwgMywgMjIyLCAxNjksIAorICAgIDM2LCAzLCAyMjIsIDE2OCwgMzYsIDMsIDIyMiwgMTYyLCAzNiwgMywgMjIyLCAxNTUsIDM2LCAzLCAyMjIsIDE3NiwgMzYsIAorICAgIDMsIDIyMiwgMTc1LCAzNiwgMywgMjIyLCAxNzksIDM2LCAzLCAyMjIsIDE2NywgMzYsIDMsIDIyMiwgMTY2LCAzNiwgMywgCisgICAgMjIyLCAxNzgsIDM2LCAzLCAyMjgsIDk2LCAzNiwgMywgMjI4LCA5MSwgMzYsIDMsIDIyOCwgOTAsIDM2LCAzLCAyMjgsIDg3LCAKKyAgICAzNiwgMywgMjI4LCA4NiwgMzYsIDMsIDIyOCwgOTMsIDM2LCAzLCAyMjgsIDkyLCAzNiwgMywgMjI4LCA5NSwgMzYsIDMsIAorICAgIDIyOCwgODksIDM2LCAzLCAyMjgsIDg4LCAzNiwgMywgMjI4LCA5NCwgMzYsIDMsIDIzNSwgMTQ2LCAzNiwgMywgMjM1LCAKKyAgICAxMTQsIDM2LCAzLCAyMzUsIDEwNywgMzYsIDMsIDIzNSwgNTcsIDM2LCAzLCAyMzUsIDM5LCAzNiwgMywgMjM1LCAxMzIsIAorICAgIDM2LCAzLCAyMzUsIDEzMCwgMzYsIDMsIDIzNSwgMTQxLCAzNiwgMywgMjM1LCA3NCwgMzYsIDMsIDIzNSwgNjUsIDM2LCAzLCAKKyAgICAyMzUsIDEzNSwgMzYsIDMsIDIyMCwgMTAwLCAzNiwgMywgMjIwLCAzNCwgMzYsIDMsIDIyMCwgMjksIDM2LCAzLCAyMTksIAorICAgIDIyNywgMzYsIDMsIDIxOSwgMjEyLCAzNiwgMywgMjIwLCA2NSwgMzYsIDMsIDIyMCwgNjMsIDM2LCAzLCAyMjAsIDkyLCAzNiwgCisgICAgMywgMjIwLCA5LCAzNiwgMywgMjIwLCAzLCAzNiwgMywgMjIwLCA3MywgMzYsIDMsIDIxOCwgMjI0LCAzNiwgMywgMjE4LCAKKyAgICAxOTQsIDM2LCAzLCAyMTgsIDE5MCwgMzYsIDMsIDIxOCwgMTgxLCAzNiwgMywgMjE4LCAxNzgsIDM2LCAzLCAyMTgsIDE5OSwgCisgICAgMzYsIDMsIDIxOCwgMTk4LCAzNiwgMywgMjE4LCAyMjMsIDM2LCAzLCAyMTgsIDE4NiwgMzYsIDMsIDIxOCwgMTg1LCAzNiwgCisgICAgMywgMjE4LCAyMDEsIDM2LCAzLCAyMjIsIDMzLCAzNiwgMywgMjE5LCAxOTMsIDM2LCAzLCAyMTksIDE3NywgMzYsIDMsIAorICAgIDIxOCwgODQsIDM2LCAzLCAyMTgsIDUsIDM2LCAzLCAyMjEsIDE4MywgMzYsIDMsIDIyMSwgMTcyLCAzNiwgMywgMjIyLCAxOSwgCisgICAgMzYsIDMsIDIxOSwgNjAsIDM2LCAzLCAyMTksIDQyLCAzNiwgMywgMjIxLCAyMjEsIDM2LCAzLCAyNDIsIDUzLCAzNiwgMywgCisgICAgMjQxLCAxODcsIDM2LCAzLCAyNDEsIDE2OCwgMzYsIDMsIDI0MCwgMjI5LCAzNiwgMywgMjQwLCAyMDksIDM2LCAzLCAyNDEsIAorICAgIDI0NSwgMzYsIDMsIDI0MSwgMjI3LCAzNiwgMywgMjQyLCA0MywgMzYsIDMsIDI0MSwgNzUsIDM2LCAzLCAyNDEsIDYwLCAzNiwgCisgICAgMywgMjQxLCAyNTMsIDM2LCAzLCAyMzMsIDIzNywgMzYsIDMsIDIzMywgMjM2LCAzNiwgMywgMjMzLCAyMzEsIDM2LCAzLCAKKyAgICAyMzMsIDIzMCwgMzYsIDMsIDIzMywgMjI3LCAzNiwgMywgMjMzLCAyMjYsIDM2LCAzLCAyMzMsIDIzMywgMzYsIDMsIDIzMywgCisgICAgMjMyLCAzNiwgMywgMjMzLCAyMzUsIDM2LCAzLCAyMzMsIDIyOSwgMzYsIDMsIDIzMywgMjI4LCAzNiwgMywgMjMzLCAyMzQsIAorICAgIDM2LCAzLCAyMTksIDIzMywgMTc1LCAxMTcsIDUsIDIxMSwgNjgsIDE3NSwgMTE3LCA1LCAyMjMsIDE1OCwgMTc1LCAxMTcsIAorICAgIDUsIDIyMywgODEsIDk4LCAxLCAyMTUsIDI4LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTc2LCA3MCwgMTE3LCA1LCAyNDksIAorICAgIDI0MSwgMjM0LCAxMzgsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzQsIDM0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjM0LCAKKyAgICAxMTEsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjksIDksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNTEsIDQxLCA3MCwgCisgICAgMTE3LCA1LCAyNDksIDI0MSwgMjUwLCAxNjUsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNDksIDI0NiwgNzAsIDExNywgNSwgCisgICAgMjQ5LCAyNDEsIDI1MCwgOTQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjcsIDEzOCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAorICAgIDI0OCwgMjI5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE1LCAxNDUsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNDcsIDE1MywgCisgICAgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNSwgMTQwLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTk4LCA3MCwgMTE3LCA1LCAKKyAgICAyNDksIDI0MSwgMjE3LCAxMDYsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTYsIDIwOSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAorICAgIDExMiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNiwgMTU3LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI4LCA3OSwgNzAsIAorICAgIDExNywgNSwgMjQ5LCAyNDEsIDI1MiwgMTk5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI1LCAxNTAsIDcwLCAxMTcsIDUsIAorICAgIDI0OSwgMjQxLCAyMjUsIDE5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI1LCAxMjQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAKKyAgICAyMzAsIDE2NiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxMCwgMjQ0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjIyLCAyMTMsIAorICAgIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzIsIDE2MiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxMywgMTM4LCA3MCwgMTE3LCAKKyAgICA1LCAyNDksIDI0MSwgMjIwLCAxMDQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTgsIDIyNSwgNzAsIDExNywgNSwgMjQ5LCAKKyAgICAyNDEsIDIwNiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDE2MiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIzMywgMTQxLCA3MCwgCisgICAgMjUsIDUsIDI0OSwgMjQxLCAyMjQsIDkxLCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjI0LCAzMywgNzAsIAorICAgIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyMiwgMTAyLCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjIyLCAKKyAgICA5NSwgNzAsIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyNCwgNzIsIDcwLCAyNSwgNSwgMjI2LCAyMDgsIDcwLCAyNSwgCisgICAgNSwgMjU1LCA0MywgMTQxLCAxLCAyNTIsIDcsIDIyOSwgODIsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDMyLCAxNDEsIDEsIAorICAgIDI1MiwgNywgMjI4LCAyNTMsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDY5LCAxNDEsIDEsIDI1MiwgNywgMjI5LCA5LCA1NiwgMSwgCisgICAgMjUyLCA3LCAyMjksIDgyLCA1NiwgMSwgMjUyLCA3LCAyMjksIDMyLCA1NiwgMSwgMjUyLCA3LCAyMjgsIDI1MywgNTYsIDEsIAorICAgIDI1MiwgNywgMjI5LCA2OSwgNTYsIDEsIDI1MiwgNywgMjI5LCA5LCA1NiwgMSwgMjU0LCAyMDMsIDI1MCwgMTk4LCA1NiwgMSwgCisgICAgMjU0LCAyMDMsIDIxNSwgMTE5LCA1NiwgMSwgMjU0LCAyMDMsIDExMiwgNTYsIDEsIDI1NCwgMjAzLCAyMjYsIDEwOSwgNTgsIAorICAgIDEsIDI0NSwgMjgsIDI0NSwgMjcsIDI0OSwgMTkwLCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjcsIDI0NSwgMjgsIDI0OSwgCisgICAgMTkwLCAxMzgsIDEzMCwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBwaHJhc2Vib29rX29mZnNldDFbXSA9IHsKQEAgLTE0NDMxLDI0NTEgKzE0NDQ4LDI0NTEgQEAKICAgICA4NjQ3LCAwLCAwLCAwLCAwLCAwLCA4NjUxLCA4NjU4LCA4NjY2LCA4NjczLCA4Njc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCA4NjgzLCA4Njg2LCA4NjkwLCA4Njk1LCA4Njk5LCAwLCA4NzAzLCA4NzA5LCA4NzE1LCA4NzE4LCAKICAgICA4NzI1LCA4NzM0LCA4NzM3LCA4NzQwLCA4NzQ1LCA4NzUxLCA4NzU1LCA4NzYzLCA4NzY5LCA4Nzc1LCA4NzgzLCA4Nzg3LCAKLSAgICA4NzkyLCA4ODAzLCA4ODA4LCA4ODEyLCA4ODE2LCA4ODIwLCAwLCAwLCA4ODIzLCA4ODMwLCA4ODM0LCA4ODQwLCA4ODQ0LCAKLSAgICA4ODUxLCA4ODU3LCA4ODY0LCA4ODcwLCA4ODc2LCA4ODgwLCA4ODg0LCA4ODkwLCA4ODk0LCA4ODk4LCA4OTAyLCA4OTA2LCAKLSAgICA4OTEwLCA4OTE0LCA4OTE4LCA4OTIyLCA4OTI2LCA4OTMwLCA4OTM0LCA4OTM4LCA4OTQyLCA4OTQ2LCA4OTUwLCA4OTU0LCAKLSAgICA4OTU4LCA4OTY2LCA4OTc0LCA4OTg0LCA4OTkzLCA5MDAyLCA5MDA1LCA5MDA5LCA5MDEzLCA5MDE3LCA5MDIxLCA5MDI1LCAKLSAgICA5MDI5LCA5MDMzLCA5MDM3LCA5MDQyLCA5MDQ2LCA5MDQ5LCA5MDUyLCA5MDU1LCA5MDU4LCA5MDYxLCA5MDY0LCA5MDY3LCAKLSAgICA5MDcwLCA5MDc0LCA5MDc3LCA5MDgwLCA5MDg1LCA5MDkwLCA5MDk2LCA5MDk5LCA5MTA2LCA5MTE1LCA5MTIwLCA5MTI1LCAKLSAgICA5MTMyLCA5MTM3LCA5MTQyLCA5MTQ2LCA5MTUwLCA5MTU0LCA5MTU4LCA5MTYyLCA5MTY2LCA5MTcwLCA5MTc0LCA5MTc4LCAKLSAgICA5MTgyLCA5MTg3LCA5MTkyLCA5MTk5LCA5MjA1LCA5MjExLCA5MjE3LCA5MjIyLCA5MjMwLCA5MjM4LCA5MjQzLCA5MjQ5LCAKLSAgICA5MjU1LCA5MjYxLCA5MjY3LCA5MjcxLCA5Mjc1LCA5Mjc5LCA5Mjg2LCA5Mjk2LCA5MzAwLCA5MzA0LCA5MzA4LCA5MzE0LCAKLSAgICA5MzIyLCA5MzI2LCA5MzMwLCA5MzM3LCA5MzQxLCA5MzQ1LCA5MzQ5LCA5MzU2LCA5MzYzLCA5Mzc1LCA5Mzc5LCA5MzgzLCAKLSAgICA5Mzg3LCA5Mzk3LCA5NDA2LCA5NDEwLCA5NDE4LCA5NDI1LCA5NDMyLCA5NDQxLCA5NDUyLCA5NDYwLCA5NDY0LCA5NDczLCAKLSAgICA5NDg0LCA5NDkyLCA5NTA1LCA5NTEzLCA5NTIxLCA5NTI5LCA5NTM3LCA5NTQzLCA5NTUyLCA5NTU5LCA5NTYzLCA5NTcxLCAKLSAgICA5NTc1LCA5NTgyLCA5NTkwLCA5NTk0LCA5NjAwLCA5NjA3LCA5NjE0LCA5NjE4LCA5NjI2LCA5NjMwLCA5NjM3LCA5NjQxLCAKLSAgICA5NjQ5LCA5NjUzLCA5NjYxLCA5NjY5LCA5Njc2LCA5Njg0LCA5NjkyLCA5Njk5LCA5NzA1LCA5NzA5LCA5NzE2LCA5NzI0LCAKLSAgICA5NzMwLCA5NzM3LCA5NzQ0LCA5NzUwLCA5NzU5LCA5NzY3LCA5Nzc0LCA5NzgwLCA5Nzg0LCA5Nzg3LCA5NzkxLCA5Nzk3LCAKLSAgICA5ODA1LCA5ODA5LCA5ODE1LCA5ODIxLCA5ODI4LCA5ODM1LCA5ODM4LCA5ODQ1LCA5ODUwLCA5ODU4LCA5ODYzLCA5ODY3LCAKLSAgICA5ODgwLCA5ODkzLCA5ODk5LCA5OTA2LCA5OTExLCA5OTE3LCA5OTIyLCA5OTI4LCA5OTM4LCA5OTQ1LCA5OTU0LCA5OTY0LCAKLSAgICA5OTcwLCA5OTc1LCA5OTgwLCA5OTg0LCA5OTg4LCA5OTkzLCA5OTk4LCAxMDAwNCwgMTAwMTIsIDEwMDIwLCAxMDAzMSwgCi0gICAgMTAwMzYsIDEwMDQ1LCAxMDA1NCwgMTAwNjEsIDEwMDY3LCAxMDA3MywgMTAwNzksIDEwMDg1LCAxMDA5MSwgMTAwOTcsIAotICAgIDEwMTAzLCAxMDEwOSwgMTAxMTUsIDEwMTIyLCAxMDEyOSwgMTAxMzYsIDEwMTQyLCAxMDE1MCwgMTAxNTksIDEwMTY1LCAKLSAgICAxMDE3MiwgMTAxNzksIDEwMTg0LCAxMDE4OSwgMTAxOTMsIDEwMjAwLCAxMDIwNywgMTAyMTYsIDEwMjI1LCAxMDIyOCwgCi0gICAgMTAyMzMsIDEwMjM4LCAwLCAxMDI0MywgMTAyNDcsIDEwMjUxLCAxMDI1NywgMTAyNjEsIDEwMjY1LCAxMDI3MSwgMTAyNzUsIAotICAgIDEwMjgzLCAxMDI4NywgMTAyOTEsIDEwMjk1LCAxMDI5OSwgMTAzMDMsIDEwMzA5LCAxMDMxMywgMTAzMTksIDEwMzIzLCAKLSAgICAxMDMyNywgMTAzMzEsIDEwMzM1LCAxMDMzOSwgMTAzNDQsIDEwMzQ3LCAxMDM1MSwgMTAzNTcsIDEwMzYxLCAxMDM2NSwgCi0gICAgMTAzNjksIDEwMzczLCAxMDM3NywgMTAzODMsIDEwMzg5LCAxMDM5NSwgMTAzOTksIDEwNDAzLCAxMDQwOCwgMTA0MTIsIAotICAgIDEwNDE2LCAxMDQyMSwgMTA0MjUsIDEwNDI5LCAxMDQzNiwgMTA0NDMsIDEwNDQ3LCAxMDQ1MSwgMTA0NTYsIDEwNDYwLCAKLSAgICAxMDQ2NCwgMTA0NjcsIDEwNDcyLCAxMDQ3NSwgMTA0NzgsIDEwNDgzLCAxMDQ4OCwgMTA0OTIsIDEwNDk2LCAxMDUwMiwgCi0gICAgMTA1MDgsIDEwNTExLCAwLCAwLCAxMDUxNCwgMTA1MjAsIDEwNTI2LCAxMDUzMiwgMTA1NDIsIDEwNTU0LCAxMDU2NiwgCi0gICAgMTA1ODMsIDEwNTk1LCAxMDYwNiwgMTA2MTQsIDEwNjIxLCAxMDYzMiwgMTA2NDcsIDEwNjU4LCAxMDY2NCwgMTA2NzMsIAotICAgIDEwNjgxLCAxMDY5MywgMTA3MDMsIDEwNzExLCAxMDcyMywgMTA3MzAsIDEwNzM4LCAxMDc1MCwgMTA3NTYsIDEwNzYyLCAKLSAgICAxMDc3MCwgMTA3NzgsIDEwNzg2LCAxMDc5MiwgMTA4MDIsIDEwODA5LCAxMDgxOSwgMTA4MjksIDEwODQyLCAxMDg1NiwgCi0gICAgMTA4NzAsIDEwODgwLCAxMDg5MSwgMTA5MDIsIDEwOTE1LCAxMDkyOCwgMTA5NDIsIDEwOTU0LCAxMDk2NiwgMTA5NzksIAotICAgIDEwOTkyLCAxMTAwNCwgMTEwMTcsIDExMDI2LCAxMTAzNCwgMTEwMzksIDExMDQ0LCAxMTA0OSwgMTEwNTQsIDExMDU5LCAKLSAgICAxMTA2NCwgMTEwNjksIDExMDc0LCAxMTA3OSwgMTEwODQsIDExMDg5LCAxMTA5NCwgMTEwOTksIDExMTA0LCAxMTEwOSwgCi0gICAgMTExMTQsIDExMTE5LCAxMTEyNCwgMTExMjksIDExMTM0LCAxMTEzOSwgMTExNDQsIDExMTQ5LCAxMTE1NCwgMTExNTksIAotICAgIDExMTY0LCAxMTE2OSwgMTExNzQsIDExMTc5LCAxMTE4NCwgMTExODksIDExMTk0LCAxMTE5OCwgMTEyMDMsIDExMjA4LCAKLSAgICAxMTIxMywgMTEyMTgsIDExMjIzLCAxMTIyNywgMTEyMzEsIDExMjM1LCAxMTIzOSwgMTEyNDMsIDExMjQ3LCAxMTI1MSwgCi0gICAgMTEyNTUsIDExMjU5LCAxMTI2MywgMTEyNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDExMjcyLCAxMTI3NywgMTEyODEsIDExMjg1LCAxMTI4OSwgMTEyOTMsIDExMjk3LCAxMTMwMSwgMTEzMDUsIDExMzA5LCAKLSAgICAxMTMxMywgMTEzMTcsIDExMzIyLCAxMTMyNiwgMTEzMzAsIDExMzM0LCAxMTMzOSwgMTEzNDMsIDExMzQ4LCAxMTM1MywgCi0gICAgMTEzNTgsIDExMzYyLCAxMTM2NywgMTEzNzIsIDExMzc3LCAxMTM4MiwgMTEzODYsIDExMzkxLCAxMTM5NSwgMTE0MDAsIAotICAgIDExNDA1LCAxMTQwOSwgMTE0MTQsIDExNDIxLCAxMTQyNSwgMTE0MzAsIDExNDM0LCAxMTQzOCwgMTE0NDMsIDExNDQ3LCAKLSAgICAxMTQ1NCwgMTE0NjEsIDExNDY4LCAxMTQ3NCwgMTE0ODIsIDExNDkwLCAxMTQ5OSwgMTE1MDcsIDExNTE0LCAxMTUyMSwgCi0gICAgMTE1MjksIDExNTM1LCAxMTU0MSwgMTE1NDcsIDExNTUzLCAxMTU2MCwgMTE1NjUsIDExNTY5LCAxMTU3NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTE1NzgsIDExNTgzLCAxMTU4OCwgMTE1OTMsIDExNTk4LCAxMTYwMywgMTE2MDgsIDExNjEzLCAxMTYxOCwgCi0gICAgMTE2MjMsIDExNjI4LCAxMTYzMywgMTE2MzgsIDExNjQzLCAxMTY0OCwgMTE2NTMsIDExNjU4LCAxMTY2MywgMTE2NjgsIAotICAgIDExNjczLCAxMTY3OCwgMTE2ODMsIDExNjg4LCAxMTY5MywgMTE2OTgsIDExNzAzLCAxMTcwOCwgMTE3MTYsIDExNzIzLCAKLSAgICAxMTcyOSwgMTE3MzQsIDExNzQyLCAxMTc0OSwgMTE3NTUsIDExNzYyLCAxMTc2OCwgMTE3NzMsIDExNzgwLCAxMTc4NywgCi0gICAgMTE3OTMsIDExNzk4LCAxMTgwMywgMTE4MDksIDExODE0LCAxMTgxOSwgMTE4MjUsIDAsIDAsIDExODMwLCAxMTgzNiwgCi0gICAgMTE4NDIsIDExODQ4LCAxMTg1NCwgMTE4NjAsIDExODY2LCAxMTg3MSwgMTE4NzksIDExODg1LCAxMTg5MSwgMTE4OTcsIAotICAgIDExOTAzLCAxMTkwOSwgMTE5MTcsIDAsIDExOTIzLCAxMTkyOCwgMTE5MzMsIDExOTM4LCAxMTk0MywgMTE5NDgsIDExOTUzLCAKLSAgICAxMTk1OCwgMTE5NjMsIDExOTY4LCAxMTk3MywgMTE5NzgsIDExOTgzLCAxMTk4OCwgMTE5OTMsIDExOTk4LCAxMjAwMywgCi0gICAgMTIwMDgsIDEyMDEzLCAxMjAxOCwgMTIwMjMsIDEyMDI4LCAxMjAzMywgMTIwMzgsIDEyMDQzLCAxMjA0OCwgMTIwNTMsIAotICAgIDEyMDU4LCAwLCAwLCAxMjA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgODc5MiwgODgwMywgODgwOCwgODgxMiwgODgxNiwgODgyMCwgODgyMywgMCwgODgyNiwgODgzMywgODgzNywgODg0MywgCisgICAgODg0NywgODg1NCwgODg2MCwgODg2NywgODg3MywgODg3OSwgODg4MywgODg4NywgODg5MywgODg5NywgODkwMSwgODkwNSwgCisgICAgODkwOSwgODkxMywgODkxNywgODkyMSwgODkyNSwgODkyOSwgODkzMywgODkzNywgODk0MSwgODk0NSwgODk0OSwgODk1MywgCisgICAgODk1NywgODk2MSwgODk2OSwgODk3NywgODk4NywgODk5NiwgOTAwNSwgOTAwOCwgOTAxMiwgOTAxNiwgOTAyMCwgOTAyNCwgCisgICAgOTAyOCwgOTAzMiwgOTAzNiwgOTA0MCwgOTA0NSwgOTA0OSwgOTA1MiwgOTA1NSwgOTA1OCwgOTA2MSwgOTA2NCwgOTA2NywgCisgICAgOTA3MCwgOTA3MywgOTA3NywgOTA4MCwgOTA4MywgOTA4OCwgOTA5MywgOTA5OSwgOTEwMiwgOTEwOSwgOTExOCwgOTEyMywgCisgICAgOTEyOCwgOTEzNSwgOTE0MCwgOTE0NSwgOTE0OSwgOTE1MywgOTE1NywgOTE2MSwgOTE2NSwgOTE2OSwgOTE3MywgOTE3NywgCisgICAgOTE4MSwgOTE4NSwgOTE5MCwgOTE5NSwgOTIwMiwgOTIwOCwgOTIxNCwgOTIyMCwgOTIyNSwgOTIzMywgOTI0MSwgOTI0NiwgCisgICAgOTI1MiwgOTI1OCwgOTI2NCwgOTI3MCwgOTI3NCwgOTI3OCwgOTI4MiwgOTI4OSwgOTI5OSwgOTMwMywgOTMwNywgOTMxMSwgCisgICAgOTMxNywgOTMyNSwgOTMyOSwgOTMzMywgOTM0MCwgOTM0NCwgOTM0OCwgOTM1MiwgOTM1OSwgOTM2NiwgOTM3OCwgOTM4MiwgCisgICAgOTM4NiwgOTM5MCwgOTQwMCwgOTQwOSwgOTQxMywgOTQyMSwgOTQyOCwgOTQzNSwgOTQ0NCwgOTQ1NSwgOTQ2MywgOTQ2NywgCisgICAgOTQ3NiwgOTQ4NywgOTQ5NSwgOTUwOCwgOTUxNiwgOTUyNCwgOTUzMiwgOTU0MCwgOTU0NiwgOTU1NSwgOTU2MiwgOTU2NiwgCisgICAgOTU3NCwgOTU3OCwgOTU4NSwgOTU5MywgOTU5NywgOTYwMywgOTYxMCwgOTYxNywgOTYyMSwgOTYyOSwgOTYzMywgOTY0MCwgCisgICAgOTY0NCwgOTY1MiwgOTY1NiwgOTY2NCwgOTY3MiwgOTY3OSwgOTY4NywgOTY5NSwgOTcwMiwgOTcwOCwgOTcxMiwgOTcxOSwgCisgICAgOTcyNywgOTczMywgOTc0MCwgOTc0NywgOTc1MywgOTc2MiwgOTc3MCwgOTc3NywgOTc4MywgOTc4NywgOTc5MCwgOTc5NCwgCisgICAgOTgwMCwgOTgwOCwgOTgxMiwgOTgxOCwgOTgyNCwgOTgzMSwgOTgzOCwgOTg0MSwgOTg0OCwgOTg1MywgOTg2MSwgOTg2NiwgCisgICAgOTg3MCwgOTg4MywgOTg5NiwgOTkwMiwgOTkwOSwgOTkxNCwgOTkyMCwgOTkyNSwgOTkzMSwgOTk0MSwgOTk0OCwgOTk1NywgCisgICAgOTk2NywgOTk3MywgOTk3OCwgOTk4MywgOTk4NywgOTk5MSwgOTk5NiwgMTAwMDEsIDEwMDA3LCAxMDAxNSwgMTAwMjMsIAorICAgIDEwMDM0LCAxMDAzOSwgMTAwNDgsIDEwMDU3LCAxMDA2NCwgMTAwNzAsIDEwMDc2LCAxMDA4MiwgMTAwODgsIDEwMDk0LCAKKyAgICAxMDEwMCwgMTAxMDYsIDEwMTEyLCAxMDExOCwgMTAxMjUsIDEwMTMyLCAxMDEzOSwgMTAxNDUsIDEwMTUzLCAxMDE2MiwgCisgICAgMTAxNjgsIDEwMTc1LCAxMDE4MiwgMTAxODcsIDEwMTkyLCAxMDE5NiwgMTAyMDMsIDEwMjEwLCAxMDIxOSwgMTAyMjgsIAorICAgIDEwMjMxLCAxMDIzNiwgMTAyNDEsIDAsIDEwMjQ2LCAxMDI1MCwgMTAyNTQsIDEwMjYwLCAxMDI2NCwgMTAyNjgsIDEwMjc0LCAKKyAgICAxMDI3OCwgMTAyODYsIDEwMjkwLCAxMDI5NCwgMTAyOTgsIDEwMzAyLCAxMDMwNiwgMTAzMTIsIDEwMzE2LCAxMDMyMiwgCisgICAgMTAzMjYsIDEwMzMwLCAxMDMzNCwgMTAzMzgsIDEwMzQyLCAxMDM0NywgMTAzNTAsIDEwMzU0LCAxMDM2MCwgMTAzNjQsIAorICAgIDEwMzY4LCAxMDM3MiwgMTAzNzYsIDEwMzgwLCAxMDM4NiwgMTAzOTIsIDEwMzk4LCAxMDQwMiwgMTA0MDYsIDEwNDExLCAKKyAgICAxMDQxNSwgMTA0MTksIDEwNDI0LCAxMDQyOCwgMTA0MzIsIDEwNDM5LCAxMDQ0NiwgMTA0NTAsIDEwNDU0LCAxMDQ1OSwgCisgICAgMTA0NjMsIDEwNDY3LCAxMDQ3MCwgMTA0NzUsIDEwNDc4LCAxMDQ4MSwgMTA0ODYsIDEwNDkxLCAxMDQ5NSwgMTA0OTksIAorICAgIDEwNTA1LCAxMDUxMSwgMTA1MTQsIDAsIDAsIDEwNTE3LCAxMDUyMywgMTA1MjksIDEwNTM1LCAxMDU0NSwgMTA1NTcsIAorICAgIDEwNTY5LCAxMDU4NiwgMTA1OTgsIDEwNjA5LCAxMDYxNywgMTA2MjQsIDEwNjM1LCAxMDY1MCwgMTA2NjEsIDEwNjY3LCAKKyAgICAxMDY3NiwgMTA2ODQsIDEwNjk2LCAxMDcwNiwgMTA3MTQsIDEwNzI2LCAxMDczMywgMTA3NDEsIDEwNzUzLCAxMDc1OSwgCisgICAgMTA3NjUsIDEwNzczLCAxMDc4MSwgMTA3ODksIDEwNzk1LCAxMDgwNSwgMTA4MTIsIDEwODIyLCAxMDgzMiwgMTA4NDUsIAorICAgIDEwODU5LCAxMDg3MywgMTA4ODMsIDEwODk0LCAxMDkwNSwgMTA5MTgsIDEwOTMxLCAxMDk0NSwgMTA5NTcsIDEwOTY5LCAKKyAgICAxMDk4MiwgMTA5OTUsIDExMDA3LCAxMTAyMCwgMTEwMjksIDExMDM3LCAxMTA0MiwgMTEwNDcsIDExMDUyLCAxMTA1NywgCisgICAgMTEwNjIsIDExMDY3LCAxMTA3MiwgMTEwNzcsIDExMDgyLCAxMTA4NywgMTEwOTIsIDExMDk3LCAxMTEwMiwgMTExMDcsIAorICAgIDExMTEyLCAxMTExNywgMTExMjIsIDExMTI3LCAxMTEzMiwgMTExMzcsIDExMTQyLCAxMTE0NywgMTExNTIsIDExMTU3LCAKKyAgICAxMTE2MiwgMTExNjcsIDExMTcyLCAxMTE3NywgMTExODIsIDExMTg3LCAxMTE5MiwgMTExOTcsIDExMjAxLCAxMTIwNiwgCisgICAgMTEyMTEsIDExMjE2LCAxMTIyMSwgMTEyMjYsIDExMjMwLCAxMTIzNCwgMTEyMzgsIDExMjQyLCAxMTI0NiwgMTEyNTAsIAorICAgIDExMjU0LCAxMTI1OCwgMTEyNjIsIDExMjY2LCAxMTI3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTEyNzUsIDExMjgwLCAxMTI4NCwgMTEyODgsIDExMjkyLCAxMTI5NiwgMTEzMDAsIDExMzA0LCAxMTMwOCwgMTEzMTIsIAorICAgIDExMzE2LCAxMTMyMCwgMTEzMjUsIDExMzI5LCAxMTMzMywgMTEzMzcsIDExMzQyLCAxMTM0NiwgMTEzNTEsIDExMzU2LCAKKyAgICAxMTM2MSwgMTEzNjUsIDExMzcwLCAxMTM3NSwgMTEzODAsIDExMzg1LCAxMTM4OSwgMTEzOTQsIDExMzk4LCAxMTQwMywgCisgICAgMTE0MDgsIDExNDEyLCAxMTQxNywgMTE0MjQsIDExNDI4LCAxMTQzMywgMTE0MzcsIDExNDQxLCAxMTQ0NiwgMTE0NTAsIAorICAgIDExNDU3LCAxMTQ2NCwgMTE0NzEsIDExNDc3LCAxMTQ4NSwgMTE0OTMsIDExNTAyLCAxMTUxMCwgMTE1MTcsIDExNTI0LCAKKyAgICAxMTUzMiwgMTE1MzgsIDExNTQ0LCAxMTU1MCwgMTE1NTYsIDExNTYzLCAxMTU2OCwgMTE1NzIsIDExNTc3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxMTU4MSwgMTE1ODYsIDExNTkxLCAxMTU5NiwgMTE2MDEsIDExNjA2LCAxMTYxMSwgMTE2MTYsIDExNjIxLCAKKyAgICAxMTYyNiwgMTE2MzEsIDExNjM2LCAxMTY0MSwgMTE2NDYsIDExNjUxLCAxMTY1NiwgMTE2NjEsIDExNjY2LCAxMTY3MSwgCisgICAgMTE2NzYsIDExNjgxLCAxMTY4NiwgMTE2OTEsIDExNjk2LCAxMTcwMSwgMTE3MDYsIDExNzExLCAxMTcxOSwgMTE3MjYsIAorICAgIDExNzMyLCAxMTczNywgMTE3NDUsIDExNzUyLCAxMTc1OCwgMTE3NjUsIDExNzcxLCAxMTc3NiwgMTE3ODMsIDExNzkwLCAKKyAgICAxMTc5NiwgMTE4MDEsIDExODA2LCAxMTgxMiwgMTE4MTcsIDExODIyLCAxMTgyOCwgMCwgMCwgMTE4MzMsIDExODM5LCAKKyAgICAxMTg0NSwgMTE4NTEsIDExODU3LCAxMTg2MywgMTE4NjksIDExODc0LCAxMTg4MiwgMTE4ODgsIDExODk0LCAxMTkwMCwgCisgICAgMTE5MDYsIDExOTEyLCAxMTkyMCwgMCwgMTE5MjYsIDExOTMxLCAxMTkzNiwgMTE5NDEsIDExOTQ2LCAxMTk1MSwgMTE5NTYsIAorICAgIDExOTYxLCAxMTk2NiwgMTE5NzEsIDExOTc2LCAxMTk4MSwgMTE5ODYsIDExOTkxLCAxMTk5NiwgMTIwMDEsIDEyMDA2LCAKKyAgICAxMjAxMSwgMTIwMTYsIDEyMDIxLCAxMjAyNiwgMTIwMzEsIDEyMDM2LCAxMjA0MSwgMTIwNDYsIDEyMDUxLCAxMjA1NiwgCisgICAgMTIwNjEsIDAsIDAsIDEyMDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjA2NywgMCwgMTIwNzYsIDEyMDgzLCAxMjA5MSwgMTIxMDMsIDEyMTEwLCAxMjExNywgMTIxMjQsIDEyMTM1LCAxMjE0NiwgCi0gICAgMTIxNTMsIDEyMTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjA3MCwgMCwgMTIwNzksIDEyMDg2LCAxMjA5NCwgMTIxMDYsIDEyMTEzLCAxMjEyMCwgMTIxMjcsIDEyMTM4LCAxMjE0OSwgCisgICAgMTIxNTYsIDEyMTY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE2NywgMTIxNzIsIDEyMTc3LCAxMjE4MiwgMTIxODcsIAotICAgIDEyMTkyLCAxMjE5NywgMTIyMDIsIDEyMjA3LCAxMjIxMiwgMTIyMTcsIDEyMjIyLCAxMjIyNywgMTIyMzEsIDEyMjM1LCAKLSAgICAxMjIzOSwgMTIyNDQsIDEyMjUwLCAxMjI1NiwgMTIyNjIsIDEyMjY3LCAxMjI3MiwgMTIyNzcsIDEyMjgyLCAxMjI4OCwgCi0gICAgMTIyOTcsIDEyMzA1LCAwLCAxMjMxMSwgMTIzMTcsIDEyMzIxLCAxMjMyNSwgMTIzMjksIDEyMzM0LCAxMjMzNywgMTIzNDEsIAotICAgIDEyMzQ0LCAxMjM0OCwgMTIzNTEsIDEyMzU1LCAxMjM1OSwgMTIzNjMsIDEyMzY4LCAxMjM3MywgMTIzNzYsIDEyMzgwLCAKLSAgICAxMjM4NSwgMTIzOTAsIDEyMzkzLCAxMjM5NywgMTI0MDAsIDEyNDA0LCAxMjQwOCwgMTI0MTIsIDEyNDE2LCAxMjQyMCwgCi0gICAgMTI0MjQsIDEyNDI4LCAxMjQzMiwgMTI0MzYsIDEyNDQwLCAxMjQ0NCwgMTI0NDgsIDEyNDUyLCAxMjQ1NiwgMTI0NjAsIAotICAgIDEyNDY0LCAxMjQ2OCwgMTI0NzIsIDEyNDc1LCAxMjQ3OSwgMTI0ODIsIDEyNDg2LCAxMjQ5MCwgMTI0OTQsIDEyNDk3LCAKLSAgICAxMjUwMCwgMTI1MDMsIDEyNTA3LCAxMjUxMSwgMTI1MTUsIDEyNTE5LCAxMjUyMywgMTI1MjcsIDEyNTMxLCAxMjUzNCwgCi0gICAgMTI1MzcsIDEyNTQyLCAxMjU0NywgMTI1NTEsIDEyNTU1LCAxMjU2MCwgMTI1NjQsIDEyNTY5LCAxMjU3MywgMTI1NzgsIAotICAgIDEyNTgzLCAxMjU4OSwgMTI1OTUsIDEyNjAxLCAxMjYwNSwgMTI2MTAsIDEyNjE2LCAxMjYyMiwgMTI2MjYsIDEyNjMxLCAKLSAgICAxMjYzNSwgMTI2NDEsIDEyNjQ2LCAxMjY0OSwgMTI2NTUsIDEyNjYxLCAxMjY2NiwgMTI2NzEsIDEyNjc4LCAxMjY4MywgCi0gICAgMTI2ODgsIDEyNjkyLCAxMjY5NiwgMTI3MDAsIDEyNzA0LCAxMjcwOCwgMTI3MTIsIDEyNzE2LCAxMjcyMCwgMTI3MjUsIAotICAgIDEyNzMwLCAxMjczNSwgMTI3NDEsIDEyNzQ0LCAxMjc0OCwgMTI3NTIsIDEyNzU1LCAxMjc1OCwgMTI3NjEsIDEyNzY0LCAKLSAgICAxMjc2NywgMTI3NzAsIDEyNzczLCAxMjc3NiwgMTI3NzksIDEyNzgzLCAxMjc5MCwgMTI3OTUsIDEyNzk5LCAxMjgwMywgCi0gICAgMTI4MDcsIDEyODExLCAwLCAxMjgxNSwgMTI4MTksIDEyODIzLCAxMjgyNywgMTI4MzEsIDEyODM3LCAxMjg0MSwgMCwgCi0gICAgMTI4NDUsIDEyODQ5LCAxMjg1MywgMCwgMTI4NTcsIDEyODYwLCAxMjg2NCwgMTI4NjcsIDEyODcxLCAxMjg3NCwgMTI4NzgsIAotICAgIDEyODgyLCAwLCAwLCAxMjg4NiwgMTI4ODksIDAsIDAsIDEyODkzLCAxMjg5NiwgMTI5MDAsIDEyOTAzLCAxMjkwNywgCi0gICAgMTI5MTEsIDEyOTE1LCAxMjkxOSwgMTI5MjMsIDEyOTI3LCAxMjkzMSwgMTI5MzUsIDEyOTM5LCAxMjk0MywgMTI5NDcsIAotICAgIDEyOTUxLCAxMjk1NSwgMTI5NTksIDEyOTYzLCAxMjk2NywgMTI5NzEsIDEyOTc1LCAwLCAxMjk3OCwgMTI5ODEsIDEyOTg1LCAKLSAgICAxMjk4OSwgMTI5OTMsIDEyOTk2LCAxMjk5OSwgMCwgMTMwMDIsIDAsIDAsIDAsIDEzMDA2LCAxMzAxMCwgMTMwMTQsIAotICAgIDEzMDE3LCAwLCAwLCAxMzAyMCwgMTMwMjQsIDEzMDI4LCAxMzAzMywgMTMwMzcsIDEzMDQyLCAxMzA0NiwgMTMwNTEsIAotICAgIDEzMDU2LCAwLCAwLCAxMzA2MiwgMTMwNjYsIDAsIDAsIDEzMDcxLCAxMzA3NSwgMTMwODAsIDEzMDg0LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMzA5MCwgMCwgMCwgMCwgMCwgMTMwOTYsIDEzMTAwLCAwLCAxMzEwNCwgMTMxMDgsIDEzMTEzLCAKLSAgICAxMzExOCwgMTMxMjMsIDAsIDAsIDEzMTI5LCAxMzEzMywgMTMxMzYsIDEzMTM5LCAxMzE0MiwgMTMxNDUsIDEzMTQ4LCAKLSAgICAxMzE1MSwgMTMxNTQsIDEzMTU3LCAxMzE2MCwgMTMxNjksIDEzMTc4LCAxMzE4MiwgMTMxODYsIDEzMTkyLCAxMzE5OCwgCi0gICAgMTMyMDQsIDEzMjEwLCAxMzIyNCwgMTMyMzEsIDEzMjM0LCAwLCAwLCAwLCAwLCAwLCAxMzIzOCwgMTMyNDQsIDEzMjQ4LCAwLCAKLSAgICAxMzI1MiwgMTMyNTUsIDEzMjU5LCAxMzI2MiwgMTMyNjYsIDEzMjY5LCAwLCAwLCAwLCAwLCAxMzI3MywgMTMyNzcsIDAsIDAsIAotICAgIDEzMjgxLCAxMzI4NSwgMTMyODksIDEzMjkyLCAxMzI5NiwgMTMzMDAsIDEzMzA0LCAxMzMwOCwgMTMzMTIsIDEzMzE2LCAKLSAgICAxMzMyMCwgMTMzMjQsIDEzMzI4LCAxMzMzMiwgMTMzMzYsIDEzMzQwLCAxMzM0NCwgMTMzNDgsIDEzMzUyLCAxMzM1NiwgCi0gICAgMTMzNjAsIDEzMzY0LCAwLCAxMzM2NywgMTMzNzAsIDEzMzc0LCAxMzM3OCwgMTMzODIsIDEzMzg1LCAxMzM4OCwgMCwgCi0gICAgMTMzOTEsIDEzMzk1LCAwLCAxMzM5OSwgMTM0MDMsIDAsIDEzNDA3LCAxMzQxMCwgMCwgMCwgMTM0MTMsIDAsIDEzNDE3LCAKLSAgICAxMzQyMiwgMTM0MjYsIDEzNDMxLCAxMzQzNSwgMCwgMCwgMCwgMCwgMTM0NDAsIDEzNDQ1LCAwLCAwLCAxMzQ1MCwgMTM0NTUsIAotICAgIDEzNDYwLCAwLCAwLCAwLCAxMzQ2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0NjgsIDEzNDcyLCAxMzQ3NiwgMTM0ODAsIAotICAgIDAsIDEzNDg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ4OCwgMTM0OTIsIDEzNDk1LCAxMzQ5OCwgMTM1MDEsIDEzNTA0LCAKLSAgICAxMzUwNywgMTM1MTAsIDEzNTEzLCAxMzUxNiwgMTM1MTksIDEzNTIyLCAxMzUyNSwgMTM1MjgsIDEzNTMxLCAxMzUzNiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1NDAsIDEzNTQ0LCAxMzU0OCwgMCwgMTM1NTIsIDEzNTU1LCAKLSAgICAxMzU1OSwgMTM1NjIsIDEzNTY2LCAxMzU2OSwgMTM1NzMsIDEzNTc3LCAxMzU4MSwgMCwgMTM1ODYsIDEzNTg5LCAxMzU5MywgCi0gICAgMCwgMTM1OTgsIDEzNjAxLCAxMzYwNSwgMTM2MDgsIDEzNjEyLCAxMzYxNiwgMTM2MjAsIDEzNjI0LCAxMzYyOCwgMTM2MzIsIAotICAgIDEzNjM2LCAxMzY0MCwgMTM2NDQsIDEzNjQ4LCAxMzY1MiwgMTM2NTYsIDEzNjYwLCAxMzY2NCwgMTM2NjgsIDEzNjcyLCAKLSAgICAxMzY3NiwgMTM2ODAsIDAsIDEzNjgzLCAxMzY4NiwgMTM2OTAsIDEzNjk0LCAxMzY5OCwgMTM3MDEsIDEzNzA0LCAwLCAKLSAgICAxMzcwNywgMTM3MTEsIDAsIDEzNzE1LCAxMzcxOSwgMTM3MjMsIDEzNzI3LCAxMzczMCwgMCwgMCwgMTM3MzMsIDEzNzM3LCAKLSAgICAxMzc0MSwgMTM3NDYsIDEzNzUwLCAxMzc1NSwgMTM3NTksIDEzNzY0LCAxMzc2OSwgMTM3NzUsIDAsIDEzNzgxLCAxMzc4NSwgCi0gICAgMTM3OTAsIDAsIDEzNzk2LCAxMzgwMCwgMTM4MDUsIDAsIDAsIDEzODA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMzgxMiwgMTM4MTcsIDEzODIyLCAxMzgyNywgMCwgMCwgMTM4MzMsIDEzODM3LCAxMzg0MCwgCi0gICAgMTM4NDMsIDEzODQ2LCAxMzg0OSwgMTM4NTIsIDEzODU1LCAxMzg1OCwgMTM4NjEsIDEzODY0LCAxMzg2OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM4NzIsIDEzODc2LCAxMzg4MCwgMCwgMTM4ODQsIDEzODg3LCAKLSAgICAxMzg5MSwgMTM4OTQsIDEzODk4LCAxMzkwMSwgMTM5MDUsIDEzOTA5LCAwLCAwLCAxMzkxMywgMTM5MTYsIDAsIDAsIAotICAgIDEzOTIwLCAxMzkyMywgMTM5MjcsIDEzOTMwLCAxMzkzNCwgMTM5MzgsIDEzOTQyLCAxMzk0NiwgMTM5NTAsIDEzOTU0LCAKLSAgICAxMzk1OCwgMTM5NjIsIDEzOTY2LCAxMzk3MCwgMTM5NzQsIDEzOTc4LCAxMzk4MiwgMTM5ODYsIDEzOTkwLCAxMzk5NCwgCi0gICAgMTM5OTgsIDE0MDAyLCAwLCAxNDAwNSwgMTQwMDgsIDE0MDEyLCAxNDAxNiwgMTQwMjAsIDE0MDIzLCAxNDAyNiwgMCwgCi0gICAgMTQwMjksIDE0MDMzLCAwLCAxNDAzNywgMTQwNDEsIDE0MDQ1LCAxNDA0OSwgMTQwNTIsIDAsIDAsIDE0MDU1LCAxNDA1OSwgCi0gICAgMTQwNjMsIDE0MDY4LCAxNDA3MiwgMTQwNzcsIDE0MDgxLCAxNDA4NiwgMTQwOTEsIDAsIDAsIDE0MDk3LCAxNDEwMSwgMCwgCi0gICAgMCwgMTQxMDYsIDE0MTEwLCAxNDExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQxMTksIDE0MTI1LCAwLCAwLCAwLCAwLCAKLSAgICAxNDEzMSwgMTQxMzUsIDAsIDE0MTM5LCAxNDE0MywgMTQxNDgsIDE0MTUzLCAxNDE1OCwgMCwgMCwgMTQxNjQsIDE0MTY4LCAKLSAgICAxNDE3MSwgMTQxNzQsIDE0MTc3LCAxNDE4MCwgMTQxODMsIDE0MTg2LCAxNDE4OSwgMTQxOTIsIDE0MTk1LCAxNDE5OCwgCi0gICAgMTQyMDIsIDE0MjA4LCAxNDIxNCwgMTQyMjAsIDE0MjI2LCAxNDIzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTQyMzgsIDE0MjQyLCAwLCAxNDI0NiwgMTQyNDksIDE0MjUzLCAxNDI1NiwgMTQyNjAsIDE0MjYzLCAwLCAwLCAwLCAKLSAgICAxNDI2NywgMTQyNzAsIDE0Mjc0LCAwLCAxNDI3OCwgMTQyODEsIDE0Mjg1LCAxNDI4OSwgMCwgMCwgMCwgMTQyOTIsIAotICAgIDE0Mjk2LCAwLCAxNDMwMCwgMCwgMTQzMDQsIDE0MzA4LCAwLCAwLCAwLCAxNDMxMiwgMTQzMTYsIDAsIDAsIDAsIDE0MzIwLCAKLSAgICAxNDMyMywgMTQzMjcsIDAsIDAsIDAsIDE0MzMwLCAxNDMzMywgMTQzMzYsIDE0MzM5LCAxNDM0MywgMTQzNDcsIDE0MzUxLCAKLSAgICAxNDM1NSwgMTQzNTksIDE0MzYzLCAxNDM2NywgMTQzNzAsIDAsIDAsIDAsIDAsIDE0MzczLCAxNDM3OCwgMTQzODIsIAotICAgIDE0Mzg3LCAxNDM5MSwgMCwgMCwgMCwgMTQzOTYsIDE0NDAwLCAxNDQwNSwgMCwgMTQ0MTAsIDE0NDE0LCAxNDQxOSwgCi0gICAgMTQ0MjQsIDAsIDAsIDE0NDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTQ0MzcsIDE0NDQxLCAxNDQ0NCwgMTQ0NDcsIDE0NDUwLCAxNDQ1MywgMTQ0NTYsIDE0NDU5LCAKLSAgICAxNDQ2MiwgMTQ0NjUsIDE0NDY4LCAxNDQ3MiwgMTQ0NzcsIDE0NDgyLCAxNDQ4NiwgMTQ0OTAsIDE0NDk0LCAxNDQ5OCwgCi0gICAgMTQ1MDIsIDE0NTA3LCAxNDUxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ1MTQsIDE0NTE4LCAxNDUyMiwgMCwgMTQ1MjYsIAotICAgIDE0NTI5LCAxNDUzMywgMTQ1MzYsIDE0NTQwLCAxNDU0MywgMTQ1NDcsIDE0NTUxLCAwLCAxNDU1NSwgMTQ1NTgsIDE0NTYyLCAKLSAgICAwLCAxNDU2NiwgMTQ1NjksIDE0NTczLCAxNDU3NywgMTQ1ODAsIDE0NTg0LCAxNDU4OCwgMTQ1OTIsIDE0NTk2LCAxNDYwMCwgCi0gICAgMTQ2MDQsIDE0NjA4LCAxNDYxMiwgMTQ2MTYsIDE0NjIwLCAxNDYyNCwgMTQ2MjgsIDE0NjMyLCAxNDYzNiwgMTQ2NDAsIAotICAgIDE0NjQ0LCAxNDY0OCwgMTQ2NTIsIDAsIDE0NjU1LCAxNDY1OCwgMTQ2NjIsIDE0NjY2LCAxNDY3MCwgMTQ2NzMsIDE0Njc2LCAKLSAgICAxNDY3OSwgMTQ2ODMsIDE0Njg3LCAwLCAxNDY5MSwgMTQ2OTUsIDE0Njk5LCAxNDcwMywgMTQ3MDYsIDAsIDAsIDAsIAotICAgIDE0NzA5LCAxNDcxMywgMTQ3MTgsIDE0NzIyLCAxNDcyNywgMTQ3MzEsIDE0NzM2LCAxNDc0MSwgMCwgMTQ3NDcsIDE0NzUxLCAKLSAgICAxNDc1NiwgMCwgMTQ3NjEsIDE0NzY1LCAxNDc3MCwgMTQ3NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0Nzc5LCAxNDc4MywgCi0gICAgMCwgMTQ3ODksIDE0NzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc5NywgMTQ4MDIsIDE0ODA3LCAxNDgxMiwgMCwgMCwgCi0gICAgMTQ4MTgsIDE0ODIyLCAxNDgyNSwgMTQ4MjgsIDE0ODMxLCAxNDgzNCwgMTQ4MzcsIDE0ODQwLCAxNDg0MywgMTQ4NDYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0ODQ5LCAxNDg2MiwgMTQ4NzQsIDE0ODg2LCAxNDg5OCwgMTQ5MTAsIDE0OTIyLCAKLSAgICAxNDkzNCwgMCwgMCwgMTQ5MzgsIDE0OTQyLCAwLCAxNDk0NiwgMTQ5NDksIDE0OTUzLCAxNDk1NiwgMTQ5NjAsIDE0OTYzLCAKLSAgICAxNDk2NywgMTQ5NzEsIDAsIDE0OTc1LCAxNDk3OCwgMTQ5ODIsIDAsIDE0OTg2LCAxNDk4OSwgMTQ5OTMsIDE0OTk3LCAKLSAgICAxNTAwMCwgMTUwMDQsIDE1MDA4LCAxNTAxMiwgMTUwMTYsIDE1MDIwLCAxNTAyNCwgMTUwMjgsIDE1MDMyLCAxNTAzNiwgCi0gICAgMTUwNDAsIDE1MDQ0LCAxNTA0OCwgMTUwNTIsIDE1MDU2LCAxNTA2MCwgMTUwNjQsIDE1MDY4LCAxNTA3MiwgMCwgMTUwNzUsIAotICAgIDE1MDc4LCAxNTA4MiwgMTUwODYsIDE1MDkwLCAxNTA5MywgMTUwOTYsIDE1MDk5LCAxNTEwMywgMTUxMDcsIDAsIDE1MTExLCAKLSAgICAxNTExNSwgMTUxMTksIDE1MTIzLCAxNTEyNiwgMCwgMCwgMTUxMjksIDE1MTMzLCAxNTEzNywgMTUxNDIsIDE1MTQ2LCAKLSAgICAxNTE1MSwgMTUxNTUsIDE1MTYwLCAxNTE2NSwgMCwgMTUxNzEsIDE1MTc1LCAxNTE4MCwgMCwgMTUxODUsIDE1MTg5LCAKLSAgICAxNTE5NCwgMTUxOTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MjAzLCAxNTIwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTUyMTMsIDAsIDE1MjE3LCAxNTIyMiwgMTUyMjcsIDE1MjMyLCAwLCAwLCAxNTIzOCwgMTUyNDIsIDE1MjQ1LCAxNTI0OCwgCi0gICAgMTUyNTEsIDE1MjU0LCAxNTI1NywgMTUyNjAsIDE1MjYzLCAxNTI2NiwgMCwgMTUyNjksIDE1MjczLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTI3NywgMTUyODEsIDAsIDE1Mjg1LCAxNTI4OCwgMTUyOTIsIAotICAgIDE1Mjk1LCAxNTI5OSwgMTUzMDIsIDE1MzA2LCAxNTMxMCwgMCwgMTUzMTQsIDE1MzE3LCAxNTMyMSwgMCwgMTUzMjUsIAotICAgIDE1MzI4LCAxNTMzMiwgMTUzMzYsIDE1MzM5LCAxNTM0MywgMTUzNDcsIDE1MzUxLCAxNTM1NSwgMTUzNTksIDE1MzYzLCAKLSAgICAxNTM2NywgMTUzNzEsIDE1Mzc1LCAxNTM3OSwgMTUzODMsIDE1Mzg3LCAxNTM5MSwgMTUzOTUsIDE1Mzk5LCAxNTQwMywgCi0gICAgMTU0MDcsIDE1NDExLCAxNTQxNCwgMTU0MTgsIDE1NDIxLCAxNTQyNSwgMTU0MjksIDE1NDMzLCAxNTQzNiwgMTU0MzksIAotICAgIDE1NDQyLCAxNTQ0NiwgMTU0NTAsIDE1NDU0LCAxNTQ1OCwgMTU0NjIsIDE1NDY2LCAxNTQ3MCwgMTU0NzMsIDE1NDc2LCAwLCAKLSAgICAwLCAxNTQ4MCwgMTU0ODQsIDE1NDg5LCAxNTQ5MywgMTU0OTgsIDE1NTAyLCAxNTUwNywgMTU1MTIsIDAsIDE1NTE4LCAKLSAgICAxNTUyMiwgMTU1MjcsIDAsIDE1NTMyLCAxNTUzNiwgMTU1NDEsIDE1NTQ2LCAxNTU1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTU1NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NTYxLCAxNTU2NiwgMTU1NzEsIDE1NTc2LCAwLCAwLCAKLSAgICAxNTU4MiwgMTU1ODYsIDE1NTg5LCAxNTU5MiwgMTU1OTUsIDE1NTk4LCAxNTYwMSwgMTU2MDQsIDE1NjA3LCAxNTYxMCwgCi0gICAgMTU2MTMsIDE1NjE3LCAxNTYyMiwgMTU2MjcsIDE1NjMzLCAxNTYzOSwgMCwgMCwgMCwgMTU2NDUsIDE1NjQ5LCAxNTY1NSwgCi0gICAgMTU2NjEsIDE1NjY3LCAxNTY3MiwgMTU2NzgsIDAsIDAsIDE1Njg0LCAxNTY4OCwgMCwgMTU2OTIsIDE1Njk2LCAxNTcwMCwgCi0gICAgMTU3MDQsIDE1NzA4LCAxNTcxMiwgMTU3MTYsIDE1NzIwLCAxNTcyNCwgMTU3MjgsIDE1NzMyLCAxNTczNiwgMTU3NDAsIAotICAgIDE1NzQ0LCAxNTc0OCwgMTU3NTIsIDE1NzU2LCAxNTc2MCwgMCwgMCwgMCwgMTU3NjQsIDE1NzcwLCAxNTc3NiwgMTU3ODIsIAotICAgIDE1Nzg4LCAxNTc5NCwgMTU4MDAsIDE1ODA2LCAxNTgxMiwgMTU4MTgsIDE1ODI0LCAxNTgzMCwgMTU4MzgsIDE1ODQ0LCAKLSAgICAxNTg1MCwgMTU4NTYsIDE1ODYyLCAxNTg2OCwgMTU4NzQsIDE1ODgwLCAxNTg4NiwgMTU4OTIsIDE1ODk4LCAxNTkwNCwgMCwgCi0gICAgMTU5MTAsIDE1OTE2LCAxNTkyMiwgMTU5MjgsIDE1OTM0LCAxNTk0MCwgMTU5NDQsIDE1OTUwLCAxNTk1NCwgMCwgMTU5NTgsIAotICAgIDAsIDAsIDE1OTY0LCAxNTk2OCwgMTU5NzQsIDE1OTgwLCAxNTk4NiwgMTU5OTAsIDE1OTk2LCAwLCAwLCAwLCAxNjAwMCwgMCwgCi0gICAgMCwgMCwgMCwgMTYwMDQsIDE2MDA5LCAxNjAxNiwgMTYwMjMsIDE2MDMwLCAxNjAzNywgMCwgMTYwNDQsIDAsIDE2MDUxLCAKLSAgICAxNjA1NiwgMTYwNjEsIDE2MDY4LCAxNjA3NSwgMTYwODQsIDE2MDk1LCAxNjEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYxMDksIDE2MTE2LCAxNjEyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTYxMjgsIDE2MTM0LCAxNjE0MCwgMTYxNDYsIDE2MTUyLCAxNjE1OCwgMTYxNjQsIDE2MTcwLCAKLSAgICAxNjE3NiwgMTYxODIsIDE2MTg4LCAxNjE5NCwgMTYyMDAsIDE2MjA2LCAxNjIxMiwgMTYyMTgsIDE2MjI0LCAxNjIzMCwgCi0gICAgMTYyMzYsIDE2MjQyLCAxNjI0OCwgMTYyNTQsIDE2MjYwLCAxNjI2NiwgMTYyNzIsIDE2Mjc4LCAxNjI4NCwgMTYyOTAsIAotICAgIDE2Mjk2LCAxNjMwMiwgMTYzMDgsIDE2MzE0LCAxNjMyMCwgMTYzMjUsIDE2MzMxLCAxNjMzNywgMTYzNDEsIDE2MzQ3LCAKLSAgICAxNjM1MSwgMTYzNTcsIDE2MzYzLCAxNjM2OSwgMTYzNzUsIDE2MzgxLCAxNjM4NywgMTYzOTIsIDE2Mzk4LCAxNjQwMiwgCi0gICAgMTY0MDcsIDE2NDEzLCAxNjQxOSwgMTY0MjUsIDE2NDMwLCAxNjQzNiwgMTY0NDIsIDE2NDQ4LCAxNjQ1MywgMTY0NTksIDAsIAotICAgIDAsIDAsIDAsIDE2NDYzLCAxNjQ2OSwgMTY0NzQsIDE2NDgwLCAxNjQ4NSwgMTY0OTMsIDE2NTAxLCAxNjUwNSwgMTY1MDksIAotICAgIDE2NTEzLCAxNjUxOSwgMTY1MjUsIDE2NTMxLCAxNjUzNywgMTY1NDEsIDE2NTQ1LCAxNjU0OSwgMTY1NTMsIDE2NTU3LCAKLSAgICAxNjU2MCwgMTY1NjMsIDE2NTY2LCAxNjU2OSwgMTY1NzIsIDE2NTc1LCAxNjU3OCwgMTY1ODEsIDE2NTg0LCAxNjU4OCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNzAsIDEyMTc1LCAxMjE4MCwgMTIxODUsIDEyMTkwLCAKKyAgICAxMjE5NSwgMTIyMDAsIDEyMjA1LCAxMjIxMCwgMTIyMTUsIDEyMjIwLCAxMjIyNSwgMTIyMzAsIDEyMjM0LCAxMjIzOCwgCisgICAgMTIyNDIsIDEyMjQ3LCAxMjI1MywgMTIyNTksIDEyMjY1LCAxMjI3MCwgMTIyNzUsIDEyMjgwLCAxMjI4NSwgMTIyOTEsIAorICAgIDEyMzAwLCAxMjMwOCwgMCwgMTIzMTQsIDEyMzIwLCAxMjMyNCwgMTIzMjgsIDEyMzMyLCAxMjMzNywgMTIzNDAsIDEyMzQ0LCAKKyAgICAxMjM0NywgMTIzNTEsIDEyMzU0LCAxMjM1OCwgMTIzNjIsIDEyMzY2LCAxMjM3MSwgMTIzNzYsIDEyMzc5LCAxMjM4MywgCisgICAgMTIzODgsIDEyMzkzLCAxMjM5NiwgMTI0MDAsIDEyNDAzLCAxMjQwNywgMTI0MTEsIDEyNDE1LCAxMjQxOSwgMTI0MjMsIAorICAgIDEyNDI3LCAxMjQzMSwgMTI0MzUsIDEyNDM5LCAxMjQ0MywgMTI0NDcsIDEyNDUxLCAxMjQ1NSwgMTI0NTksIDEyNDYzLCAKKyAgICAxMjQ2NywgMTI0NzEsIDEyNDc1LCAxMjQ3OCwgMTI0ODIsIDEyNDg1LCAxMjQ4OSwgMTI0OTMsIDEyNDk3LCAxMjUwMCwgCisgICAgMTI1MDMsIDEyNTA2LCAxMjUxMCwgMTI1MTQsIDEyNTE4LCAxMjUyMiwgMTI1MjYsIDEyNTMwLCAxMjUzNCwgMTI1MzcsIAorICAgIDEyNTQwLCAxMjU0NSwgMTI1NTAsIDEyNTU0LCAxMjU1OCwgMTI1NjMsIDEyNTY3LCAxMjU3MiwgMTI1NzYsIDEyNTgxLCAKKyAgICAxMjU4NiwgMTI1OTIsIDEyNTk4LCAxMjYwNCwgMTI2MDgsIDEyNjEzLCAxMjYxOSwgMTI2MjUsIDEyNjI5LCAxMjYzNCwgCisgICAgMTI2MzgsIDEyNjQ0LCAxMjY0OSwgMTI2NTIsIDEyNjU4LCAxMjY2NCwgMTI2NjksIDEyNjc0LCAxMjY4MSwgMTI2ODYsIAorICAgIDEyNjkxLCAxMjY5NSwgMTI2OTksIDEyNzAzLCAxMjcwNywgMTI3MTEsIDEyNzE1LCAxMjcxOSwgMTI3MjMsIDEyNzI4LCAKKyAgICAxMjczMywgMTI3MzgsIDEyNzQ0LCAxMjc0NywgMTI3NTEsIDEyNzU1LCAxMjc1OCwgMTI3NjEsIDEyNzY0LCAxMjc2NywgCisgICAgMTI3NzAsIDEyNzczLCAxMjc3NiwgMTI3NzksIDEyNzgyLCAxMjc4NiwgMTI3OTMsIDEyNzk4LCAxMjgwMiwgMTI4MDYsIAorICAgIDEyODEwLCAxMjgxNCwgMCwgMTI4MTgsIDEyODIyLCAxMjgyNiwgMTI4MzAsIDEyODM0LCAxMjg0MCwgMTI4NDQsIDAsIAorICAgIDEyODQ4LCAxMjg1MiwgMTI4NTYsIDAsIDEyODYwLCAxMjg2MywgMTI4NjcsIDEyODcwLCAxMjg3NCwgMTI4NzcsIDEyODgxLCAKKyAgICAxMjg4NSwgMCwgMCwgMTI4ODksIDEyODkyLCAwLCAwLCAxMjg5NiwgMTI4OTksIDEyOTAzLCAxMjkwNiwgMTI5MTAsIAorICAgIDEyOTE0LCAxMjkxOCwgMTI5MjIsIDEyOTI2LCAxMjkzMCwgMTI5MzQsIDEyOTM4LCAxMjk0MiwgMTI5NDYsIDEyOTUwLCAKKyAgICAxMjk1NCwgMTI5NTgsIDEyOTYyLCAxMjk2NiwgMTI5NzAsIDEyOTc0LCAxMjk3OCwgMCwgMTI5ODEsIDEyOTg0LCAxMjk4OCwgCisgICAgMTI5OTIsIDEyOTk2LCAxMjk5OSwgMTMwMDIsIDAsIDEzMDA1LCAwLCAwLCAwLCAxMzAwOSwgMTMwMTMsIDEzMDE3LCAKKyAgICAxMzAyMCwgMCwgMCwgMTMwMjMsIDEzMDI3LCAxMzAzMSwgMTMwMzYsIDEzMDQwLCAxMzA0NSwgMTMwNDksIDEzMDU0LCAKKyAgICAxMzA1OSwgMCwgMCwgMTMwNjUsIDEzMDY5LCAwLCAwLCAxMzA3NCwgMTMwNzgsIDEzMDgzLCAxMzA4NywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTMwOTMsIDAsIDAsIDAsIDAsIDEzMDk5LCAxMzEwMywgMCwgMTMxMDcsIDEzMTExLCAxMzExNiwgCisgICAgMTMxMjEsIDEzMTI2LCAwLCAwLCAxMzEzMiwgMTMxMzYsIDEzMTM5LCAxMzE0MiwgMTMxNDUsIDEzMTQ4LCAxMzE1MSwgCisgICAgMTMxNTQsIDEzMTU3LCAxMzE2MCwgMTMxNjMsIDEzMTcyLCAxMzE4MSwgMTMxODUsIDEzMTg5LCAxMzE5NSwgMTMyMDEsIAorICAgIDEzMjA3LCAxMzIxMywgMTMyMjcsIDEzMjM0LCAxMzIzNywgMCwgMCwgMCwgMCwgMCwgMTMyNDEsIDEzMjQ3LCAxMzI1MSwgMCwgCisgICAgMTMyNTUsIDEzMjU4LCAxMzI2MiwgMTMyNjUsIDEzMjY5LCAxMzI3MiwgMCwgMCwgMCwgMCwgMTMyNzYsIDEzMjgwLCAwLCAwLCAKKyAgICAxMzI4NCwgMTMyODgsIDEzMjkyLCAxMzI5NSwgMTMyOTksIDEzMzAzLCAxMzMwNywgMTMzMTEsIDEzMzE1LCAxMzMxOSwgCisgICAgMTMzMjMsIDEzMzI3LCAxMzMzMSwgMTMzMzUsIDEzMzM5LCAxMzM0MywgMTMzNDcsIDEzMzUxLCAxMzM1NSwgMTMzNTksIAorICAgIDEzMzYzLCAxMzM2NywgMCwgMTMzNzAsIDEzMzczLCAxMzM3NywgMTMzODEsIDEzMzg1LCAxMzM4OCwgMTMzOTEsIDAsIAorICAgIDEzMzk0LCAxMzM5OCwgMCwgMTM0MDIsIDEzNDA2LCAwLCAxMzQxMCwgMTM0MTMsIDAsIDAsIDEzNDE2LCAwLCAxMzQyMCwgCisgICAgMTM0MjUsIDEzNDI5LCAxMzQzNCwgMTM0MzgsIDAsIDAsIDAsIDAsIDEzNDQzLCAxMzQ0OCwgMCwgMCwgMTM0NTMsIDEzNDU4LCAKKyAgICAxMzQ2MywgMCwgMCwgMCwgMTM0NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDcxLCAxMzQ3NSwgMTM0NzksIDEzNDgzLCAKKyAgICAwLCAxMzQ4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0OTEsIDEzNDk1LCAxMzQ5OCwgMTM1MDEsIDEzNTA0LCAxMzUwNywgCisgICAgMTM1MTAsIDEzNTEzLCAxMzUxNiwgMTM1MTksIDEzNTIyLCAxMzUyNSwgMTM1MjgsIDEzNTMxLCAxMzUzNCwgMTM1MzksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNTQzLCAxMzU0NywgMTM1NTEsIDAsIDEzNTU1LCAxMzU1OCwgCisgICAgMTM1NjIsIDEzNTY1LCAxMzU2OSwgMTM1NzIsIDEzNTc2LCAxMzU4MCwgMTM1ODQsIDAsIDEzNTg5LCAxMzU5MiwgMTM1OTYsIAorICAgIDAsIDEzNjAxLCAxMzYwNCwgMTM2MDgsIDEzNjExLCAxMzYxNSwgMTM2MTksIDEzNjIzLCAxMzYyNywgMTM2MzEsIDEzNjM1LCAKKyAgICAxMzYzOSwgMTM2NDMsIDEzNjQ3LCAxMzY1MSwgMTM2NTUsIDEzNjU5LCAxMzY2MywgMTM2NjcsIDEzNjcxLCAxMzY3NSwgCisgICAgMTM2NzksIDEzNjgzLCAwLCAxMzY4NiwgMTM2ODksIDEzNjkzLCAxMzY5NywgMTM3MDEsIDEzNzA0LCAxMzcwNywgMCwgCisgICAgMTM3MTAsIDEzNzE0LCAwLCAxMzcxOCwgMTM3MjIsIDEzNzI2LCAxMzczMCwgMTM3MzMsIDAsIDAsIDEzNzM2LCAxMzc0MCwgCisgICAgMTM3NDQsIDEzNzQ5LCAxMzc1MywgMTM3NTgsIDEzNzYyLCAxMzc2NywgMTM3NzIsIDEzNzc4LCAwLCAxMzc4NCwgMTM3ODgsIAorICAgIDEzNzkzLCAwLCAxMzc5OSwgMTM4MDMsIDEzODA4LCAwLCAwLCAxMzgxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTM4MTUsIDEzODIwLCAxMzgyNSwgMTM4MzAsIDAsIDAsIDEzODM2LCAxMzg0MCwgMTM4NDMsIAorICAgIDEzODQ2LCAxMzg0OSwgMTM4NTIsIDEzODU1LCAxMzg1OCwgMTM4NjEsIDEzODY0LCAxMzg2NywgMTM4NzEsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODc1LCAxMzg3OSwgMTM4ODMsIDAsIDEzODg3LCAxMzg5MCwgCisgICAgMTM4OTQsIDEzODk3LCAxMzkwMSwgMTM5MDQsIDEzOTA4LCAxMzkxMiwgMCwgMCwgMTM5MTYsIDEzOTE5LCAwLCAwLCAKKyAgICAxMzkyMywgMTM5MjYsIDEzOTMwLCAxMzkzMywgMTM5MzcsIDEzOTQxLCAxMzk0NSwgMTM5NDksIDEzOTUzLCAxMzk1NywgCisgICAgMTM5NjEsIDEzOTY1LCAxMzk2OSwgMTM5NzMsIDEzOTc3LCAxMzk4MSwgMTM5ODUsIDEzOTg5LCAxMzk5MywgMTM5OTcsIAorICAgIDE0MDAxLCAxNDAwNSwgMCwgMTQwMDgsIDE0MDExLCAxNDAxNSwgMTQwMTksIDE0MDIzLCAxNDAyNiwgMTQwMjksIDAsIAorICAgIDE0MDMyLCAxNDAzNiwgMCwgMTQwNDAsIDE0MDQ0LCAxNDA0OCwgMTQwNTIsIDE0MDU1LCAwLCAwLCAxNDA1OCwgMTQwNjIsIAorICAgIDE0MDY2LCAxNDA3MSwgMTQwNzUsIDE0MDgwLCAxNDA4NCwgMTQwODksIDE0MDk0LCAwLCAwLCAxNDEwMCwgMTQxMDQsIDAsIAorICAgIDAsIDE0MTA5LCAxNDExMywgMTQxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MTIyLCAxNDEyOCwgMCwgMCwgMCwgMCwgCisgICAgMTQxMzQsIDE0MTM4LCAwLCAxNDE0MiwgMTQxNDYsIDE0MTUxLCAxNDE1NiwgMTQxNjEsIDAsIDAsIDE0MTY3LCAxNDE3MSwgCisgICAgMTQxNzQsIDE0MTc3LCAxNDE4MCwgMTQxODMsIDE0MTg2LCAxNDE4OSwgMTQxOTIsIDE0MTk1LCAxNDE5OCwgMTQyMDEsIAorICAgIDE0MjA1LCAxNDIxMSwgMTQyMTcsIDE0MjIzLCAxNDIyOSwgMTQyMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE0MjQxLCAxNDI0NSwgMCwgMTQyNDksIDE0MjUyLCAxNDI1NiwgMTQyNTksIDE0MjYzLCAxNDI2NiwgMCwgMCwgMCwgCisgICAgMTQyNzAsIDE0MjczLCAxNDI3NywgMCwgMTQyODEsIDE0Mjg0LCAxNDI4OCwgMTQyOTIsIDAsIDAsIDAsIDE0Mjk1LCAKKyAgICAxNDI5OSwgMCwgMTQzMDMsIDAsIDE0MzA3LCAxNDMxMSwgMCwgMCwgMCwgMTQzMTUsIDE0MzE5LCAwLCAwLCAwLCAxNDMyMywgCisgICAgMTQzMjYsIDE0MzMwLCAwLCAwLCAwLCAxNDMzMywgMTQzMzYsIDE0MzM5LCAxNDM0MiwgMTQzNDYsIDE0MzUwLCAxNDM1NCwgCisgICAgMTQzNTgsIDE0MzYyLCAxNDM2NiwgMTQzNzAsIDE0MzczLCAwLCAwLCAwLCAwLCAxNDM3NiwgMTQzODEsIDE0Mzg1LCAKKyAgICAxNDM5MCwgMTQzOTQsIDAsIDAsIDAsIDE0Mzk5LCAxNDQwMywgMTQ0MDgsIDAsIDE0NDEzLCAxNDQxNywgMTQ0MjIsIAorICAgIDE0NDI3LCAwLCAwLCAxNDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDE0NDQwLCAxNDQ0NCwgMTQ0NDcsIDE0NDUwLCAxNDQ1MywgMTQ0NTYsIDE0NDU5LCAxNDQ2MiwgCisgICAgMTQ0NjUsIDE0NDY4LCAxNDQ3MSwgMTQ0NzUsIDE0NDgwLCAxNDQ4NSwgMTQ0ODksIDE0NDkzLCAxNDQ5NywgMTQ1MDEsIAorICAgIDE0NTA1LCAxNDUxMCwgMTQ1MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NTE3LCAxNDUyMSwgMTQ1MjUsIDAsIDE0NTI5LCAKKyAgICAxNDUzMiwgMTQ1MzYsIDE0NTM5LCAxNDU0MywgMTQ1NDYsIDE0NTUwLCAxNDU1NCwgMCwgMTQ1NTgsIDE0NTYxLCAxNDU2NSwgCisgICAgMCwgMTQ1NjksIDE0NTcyLCAxNDU3NiwgMTQ1ODAsIDE0NTgzLCAxNDU4NywgMTQ1OTEsIDE0NTk1LCAxNDU5OSwgMTQ2MDMsIAorICAgIDE0NjA3LCAxNDYxMSwgMTQ2MTUsIDE0NjE5LCAxNDYyMywgMTQ2MjcsIDE0NjMxLCAxNDYzNSwgMTQ2MzksIDE0NjQzLCAKKyAgICAxNDY0NywgMTQ2NTEsIDE0NjU1LCAwLCAxNDY1OCwgMTQ2NjEsIDE0NjY1LCAxNDY2OSwgMTQ2NzMsIDE0Njc2LCAxNDY3OSwgCisgICAgMTQ2ODIsIDE0Njg2LCAxNDY5MCwgMCwgMTQ2OTQsIDE0Njk4LCAxNDcwMiwgMTQ3MDYsIDE0NzA5LCAwLCAwLCAwLCAKKyAgICAxNDcxMiwgMTQ3MTYsIDE0NzIxLCAxNDcyNSwgMTQ3MzAsIDE0NzM0LCAxNDczOSwgMTQ3NDQsIDAsIDE0NzUwLCAxNDc1NCwgCisgICAgMTQ3NTksIDAsIDE0NzY0LCAxNDc2OCwgMTQ3NzMsIDE0Nzc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc4MiwgMTQ3ODYsIAorICAgIDAsIDE0NzkyLCAxNDc5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4MDAsIDE0ODA1LCAxNDgxMCwgMTQ4MTUsIDAsIDAsIAorICAgIDE0ODIxLCAxNDgyNSwgMTQ4MjgsIDE0ODMxLCAxNDgzNCwgMTQ4MzcsIDE0ODQwLCAxNDg0MywgMTQ4NDYsIDE0ODQ5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDg1MiwgMTQ4NjUsIDE0ODc3LCAxNDg4OSwgMTQ5MDEsIDE0OTEzLCAxNDkyNSwgCisgICAgMTQ5MzcsIDAsIDAsIDE0OTQxLCAxNDk0NSwgMCwgMTQ5NDksIDE0OTUyLCAxNDk1NiwgMTQ5NTksIDE0OTYzLCAxNDk2NiwgCisgICAgMTQ5NzAsIDE0OTc0LCAwLCAxNDk3OCwgMTQ5ODEsIDE0OTg1LCAwLCAxNDk4OSwgMTQ5OTIsIDE0OTk2LCAxNTAwMCwgCisgICAgMTUwMDMsIDE1MDA3LCAxNTAxMSwgMTUwMTUsIDE1MDE5LCAxNTAyMywgMTUwMjcsIDE1MDMxLCAxNTAzNSwgMTUwMzksIAorICAgIDE1MDQzLCAxNTA0NywgMTUwNTEsIDE1MDU1LCAxNTA1OSwgMTUwNjMsIDE1MDY3LCAxNTA3MSwgMTUwNzUsIDAsIDE1MDc4LCAKKyAgICAxNTA4MSwgMTUwODUsIDE1MDg5LCAxNTA5MywgMTUwOTYsIDE1MDk5LCAxNTEwMiwgMTUxMDYsIDE1MTEwLCAwLCAxNTExNCwgCisgICAgMTUxMTgsIDE1MTIyLCAxNTEyNiwgMTUxMjksIDAsIDAsIDE1MTMyLCAxNTEzNiwgMTUxNDAsIDE1MTQ1LCAxNTE0OSwgCisgICAgMTUxNTQsIDE1MTU4LCAxNTE2MywgMTUxNjgsIDAsIDE1MTc0LCAxNTE3OCwgMTUxODMsIDAsIDE1MTg4LCAxNTE5MiwgCisgICAgMTUxOTcsIDE1MjAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIwNiwgMTUyMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE1MjE2LCAwLCAxNTIyMCwgMTUyMjUsIDE1MjMwLCAxNTIzNSwgMCwgMCwgMTUyNDEsIDE1MjQ1LCAxNTI0OCwgMTUyNTEsIAorICAgIDE1MjU0LCAxNTI1NywgMTUyNjAsIDE1MjYzLCAxNTI2NiwgMTUyNjksIDAsIDE1MjcyLCAxNTI3NiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyODAsIDE1Mjg0LCAwLCAxNTI4OCwgMTUyOTEsIDE1Mjk1LCAKKyAgICAxNTI5OCwgMTUzMDIsIDE1MzA1LCAxNTMwOSwgMTUzMTMsIDAsIDE1MzE3LCAxNTMyMCwgMTUzMjQsIDAsIDE1MzI4LCAKKyAgICAxNTMzMSwgMTUzMzUsIDE1MzM5LCAxNTM0MiwgMTUzNDYsIDE1MzUwLCAxNTM1NCwgMTUzNTgsIDE1MzYyLCAxNTM2NiwgCisgICAgMTUzNzAsIDE1Mzc0LCAxNTM3OCwgMTUzODIsIDE1Mzg2LCAxNTM5MCwgMTUzOTQsIDE1Mzk4LCAxNTQwMiwgMTU0MDYsIAorICAgIDE1NDEwLCAxNTQxNCwgMTU0MTcsIDE1NDIxLCAxNTQyNCwgMTU0MjgsIDE1NDMyLCAxNTQzNiwgMTU0MzksIDE1NDQyLCAKKyAgICAxNTQ0NSwgMTU0NDksIDE1NDUzLCAxNTQ1NywgMTU0NjEsIDE1NDY1LCAxNTQ2OSwgMTU0NzMsIDE1NDc2LCAxNTQ3OSwgMCwgCisgICAgMCwgMTU0ODMsIDE1NDg3LCAxNTQ5MiwgMTU0OTYsIDE1NTAxLCAxNTUwNSwgMTU1MTAsIDE1NTE1LCAwLCAxNTUyMSwgCisgICAgMTU1MjUsIDE1NTMwLCAwLCAxNTUzNSwgMTU1MzksIDE1NTQ0LCAxNTU0OSwgMTU1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE1NTU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTU2NCwgMTU1NjksIDE1NTc0LCAxNTU3OSwgMCwgMCwgCisgICAgMTU1ODUsIDE1NTg5LCAxNTU5MiwgMTU1OTUsIDE1NTk4LCAxNTYwMSwgMTU2MDQsIDE1NjA3LCAxNTYxMCwgMTU2MTMsIAorICAgIDE1NjE2LCAxNTYyMCwgMTU2MjUsIDE1NjMwLCAxNTYzNiwgMTU2NDIsIDAsIDAsIDAsIDE1NjQ4LCAxNTY1MiwgMTU2NTgsIAorICAgIDE1NjY0LCAxNTY3MCwgMTU2NzUsIDE1NjgxLCAwLCAwLCAxNTY4NywgMTU2OTEsIDAsIDE1Njk1LCAxNTY5OSwgMTU3MDMsIAorICAgIDE1NzA3LCAxNTcxMSwgMTU3MTUsIDE1NzE5LCAxNTcyMywgMTU3MjcsIDE1NzMxLCAxNTczNSwgMTU3MzksIDE1NzQzLCAKKyAgICAxNTc0NywgMTU3NTEsIDE1NzU1LCAxNTc1OSwgMTU3NjMsIDAsIDAsIDAsIDE1NzY3LCAxNTc3MywgMTU3NzksIDE1Nzg1LCAKKyAgICAxNTc5MSwgMTU3OTcsIDE1ODAzLCAxNTgwOSwgMTU4MTUsIDE1ODIxLCAxNTgyNywgMTU4MzMsIDE1ODQxLCAxNTg0NywgCisgICAgMTU4NTMsIDE1ODU5LCAxNTg2NSwgMTU4NzEsIDE1ODc3LCAxNTg4MywgMTU4ODksIDE1ODk1LCAxNTkwMSwgMTU5MDcsIDAsIAorICAgIDE1OTEzLCAxNTkxOSwgMTU5MjUsIDE1OTMxLCAxNTkzNywgMTU5NDMsIDE1OTQ3LCAxNTk1MywgMTU5NTcsIDAsIDE1OTYxLCAKKyAgICAwLCAwLCAxNTk2NywgMTU5NzEsIDE1OTc3LCAxNTk4MywgMTU5ODksIDE1OTkzLCAxNTk5OSwgMCwgMCwgMCwgMTYwMDMsIDAsIAorICAgIDAsIDAsIDAsIDE2MDA3LCAxNjAxMiwgMTYwMTksIDE2MDI2LCAxNjAzMywgMTYwNDAsIDAsIDE2MDQ3LCAwLCAxNjA1NCwgCisgICAgMTYwNTksIDE2MDY0LCAxNjA3MSwgMTYwNzgsIDE2MDg3LCAxNjA5OCwgMTYxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MTEyLCAxNjExOSwgMTYxMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDE2MTMxLCAxNjEzNywgMTYxNDMsIDE2MTQ5LCAxNjE1NSwgMTYxNjEsIDE2MTY3LCAxNjE3MywgCisgICAgMTYxNzksIDE2MTg1LCAxNjE5MSwgMTYxOTcsIDE2MjAzLCAxNjIwOSwgMTYyMTUsIDE2MjIxLCAxNjIyNywgMTYyMzMsIAorICAgIDE2MjM5LCAxNjI0NSwgMTYyNTEsIDE2MjU3LCAxNjI2MywgMTYyNjksIDE2Mjc1LCAxNjI4MSwgMTYyODcsIDE2MjkzLCAKKyAgICAxNjI5OSwgMTYzMDUsIDE2MzExLCAxNjMxNywgMTYzMjMsIDE2MzI4LCAxNjMzNCwgMTYzNDAsIDE2MzQ0LCAxNjM1MCwgCisgICAgMTYzNTQsIDE2MzYwLCAxNjM2NiwgMTYzNzIsIDE2Mzc4LCAxNjM4NCwgMTYzOTAsIDE2Mzk1LCAxNjQwMSwgMTY0MDUsIAorICAgIDE2NDEwLCAxNjQxNiwgMTY0MjIsIDE2NDI4LCAxNjQzMywgMTY0MzksIDE2NDQ1LCAxNjQ1MSwgMTY0NTYsIDE2NDYyLCAwLCAKKyAgICAwLCAwLCAwLCAxNjQ2NiwgMTY0NzIsIDE2NDc3LCAxNjQ4MywgMTY0ODgsIDE2NDk2LCAxNjUwNCwgMTY1MDgsIDE2NTEyLCAKKyAgICAxNjUxNiwgMTY1MjIsIDE2NTI4LCAxNjUzNCwgMTY1NDAsIDE2NTQ0LCAxNjU0OCwgMTY1NTIsIDE2NTU2LCAxNjU2MCwgCisgICAgMTY1NjMsIDE2NTY2LCAxNjU2OSwgMTY1NzIsIDE2NTc1LCAxNjU3OCwgMTY1ODEsIDE2NTg0LCAxNjU4NywgMTY1OTEsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NTkyLCAxNjU5NywgMCwgMTY2MDQsIDAsIDAsIDE2NjExLCAKLSAgICAxNjYxNiwgMCwgMTY2MjEsIDAsIDAsIDE2NjI4LCAwLCAwLCAwLCAwLCAwLCAwLCAxNjYzMywgMTY2MzgsIDE2NjQyLCAKLSAgICAxNjY0OSwgMCwgMTY2NTYsIDE2NjYxLCAxNjY2NiwgMTY2NzEsIDE2Njc4LCAxNjY4NSwgMTY2OTIsIDAsIDE2Njk5LCAKLSAgICAxNjcwNCwgMTY3MDksIDAsIDE2NzE2LCAwLCAxNjcyMywgMCwgMCwgMTY3MjgsIDE2NzM1LCAwLCAxNjc0MiwgMTY3NDYsIAotICAgIDE2NzUzLCAxNjc1NywgMTY3NjIsIDE2NzcwLCAxNjc3NiwgMTY3ODIsIDE2Nzg3LCAxNjc5MywgMTY3OTksIDE2ODA1LCAKLSAgICAxNjgxMCwgMCwgMTY4MTYsIDE2ODI0LCAxNjgzMSwgMCwgMCwgMTY4MzgsIDE2ODQzLCAxNjg0OSwgMTY4NTQsIDE2ODYwLCAKLSAgICAwLCAxNjg2NiwgMCwgMTY4NzIsIDE2ODc5LCAxNjg4NiwgMTY4OTMsIDE2OTAwLCAxNjkwNSwgMCwgMCwgMTY5MDksIAotICAgIDE2OTE0LCAxNjkxOCwgMTY5MjIsIDE2OTI2LCAxNjkzMCwgMTY5MzQsIDE2OTM4LCAxNjk0MiwgMTY5NDYsIDAsIDAsIAotICAgIDE2OTUwLCAxNjk1NiwgMTY5NjIsIDE2OTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjk3NiwgMTY5ODAsIDE2OTkxLCAKLSAgICAxNzAwNiwgMTcwMjEsIDE3MDMxLCAxNzA0MiwgMTcwNTUsIDE3MDY2LCAxNzA3MiwgMTcwODAsIDE3MDkwLCAxNzA5NiwgCi0gICAgMTcxMDQsIDE3MTA4LCAxNzExNCwgMTcxMjAsIDE3MTI4LCAxNzEzOCwgMTcxNDYsIDE3MTU5LCAxNzE2NSwgMTcxNzMsIAotICAgIDE3MTgxLCAxNzE5MywgMTcyMDAsIDE3MjA4LCAxNzIxNiwgMTcyMjQsIDE3MjMyLCAxNzI0MCwgMTcyNDgsIDE3MjU4LCAKLSAgICAxNzI2MiwgMTcyNjUsIDE3MjY4LCAxNzI3MSwgMTcyNzQsIDE3Mjc3LCAxNzI4MCwgMTcyODMsIDE3Mjg2LCAxNzI4OSwgCi0gICAgMTcyOTMsIDE3Mjk3LCAxNzMwMSwgMTczMDUsIDE3MzA5LCAxNzMxMywgMTczMTcsIDE3MzIxLCAxNzMyNSwgMTczMzAsIAotICAgIDE3MzM2LCAxNzM0NiwgMTczNjAsIDE3MzcwLCAxNzM3NiwgMTczODIsIDE3MzkwLCAxNzM5OCwgMTc0MDYsIDE3NDE0LCAKLSAgICAxNzQyMCwgMTc0MjYsIDE3NDI5LCAxNzQzMywgMTc0MzcsIDE3NDQxLCAxNzQ0NSwgMTc0NDksIDE3NDUzLCAwLCAxNzQ1NywgCi0gICAgMTc0NjEsIDE3NDY1LCAxNzQ2OSwgMTc0NzMsIDE3NDc3LCAxNzQ4MSwgMTc0ODUsIDE3NDg5LCAxNzQ5MywgMTc0OTcsIAotICAgIDE3NTAwLCAxNzUwMywgMTc1MDcsIDE3NTExLCAxNzUxNSwgMTc1MTgsIDE3NTIyLCAxNzUyNiwgMTc1MzAsIDE3NTM0LCAKLSAgICAxNzUzOCwgMTc1NDIsIDE3NTQ2LCAxNzU1MCwgMTc1NTMsIDE3NTU2LCAxNzU2MCwgMTc1NjQsIDE3NTY4LCAxNzU3MSwgCi0gICAgMTc1NzQsIDE3NTc3LCAxNzU4MSwgMTc1ODYsIDE3NTkwLCAwLCAwLCAwLCAwLCAxNzU5NCwgMTc1OTksIDE3NjAzLCAKLSAgICAxNzYwOCwgMTc2MTIsIDE3NjE3LCAxNzYyMiwgMTc2MjgsIDE3NjMzLCAxNzYzOSwgMTc2NDMsIDE3NjQ4LCAxNzY1MiwgCi0gICAgMTc2NTcsIDE3NjY3LCAxNzY3MywgMTc2NzksIDE3Njg2LCAxNzY5NiwgMTc3MDIsIDE3NzA2LCAxNzcxMCwgMTc3MTYsIAotICAgIDE3NzIyLCAxNzczMCwgMTc3MzYsIDE3NzQ0LCAxNzc1MiwgMTc3NjAsIDE3NzcwLCAxNzc3OCwgMTc3ODgsIDE3NzkzLCAKLSAgICAxNzc5OSwgMTc4MDUsIDE3ODExLCAxNzgxNywgMTc4MjMsIDE3ODI5LCAwLCAxNzgzNSwgMTc4NDEsIDE3ODQ3LCAxNzg1MywgCi0gICAgMTc4NTksIDE3ODY1LCAxNzg3MSwgMTc4NzcsIDE3ODgzLCAxNzg4OSwgMTc4OTUsIDE3OTAwLCAxNzkwNSwgMTc5MTEsIAotICAgIDE3OTE3LCAxNzkyMywgMTc5MjgsIDE3OTM0LCAxNzk0MCwgMTc5NDYsIDE3OTUyLCAxNzk1OCwgMTc5NjQsIDE3OTcwLCAKLSAgICAxNzk3NiwgMTc5ODEsIDE3OTg2LCAxNzk5MiwgMTc5OTgsIDE4MDA0LCAxODAwOSwgMTgwMTQsIDE4MDE5LCAxODAyNSwgCi0gICAgMTgwMzMsIDE4MDQwLCAwLCAxODA0NywgMTgwNTQsIDE4MDY3LCAxODA3NCwgMTgwODEsIDE4MDg5LCAxODA5NywgMTgxMDMsIAotICAgIDE4MTA5LCAxODExNSwgMTgxMjUsIDE4MTMwLCAxODEzNiwgMTgxNDYsIDE4MTU2LCAwLCAxODE2NiwgMTgxNzYsIDE4MTg0LCAKLSAgICAxODE5NiwgMTgyMDgsIDE4MjE0LCAxODIyOCwgMTgyNDMsIDE4MjQ4LCAxODI1MywgMTgyNjEsIDE4MjY5LCAxODI3NywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY1OTUsIDE2NjAwLCAwLCAxNjYwNywgMCwgMCwgMTY2MTQsIAorICAgIDE2NjE5LCAwLCAxNjYyNCwgMCwgMCwgMTY2MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NjM2LCAxNjY0MSwgMTY2NDUsIAorICAgIDE2NjUyLCAwLCAxNjY1OSwgMTY2NjQsIDE2NjY5LCAxNjY3NCwgMTY2ODEsIDE2Njg4LCAxNjY5NSwgMCwgMTY3MDIsIAorICAgIDE2NzA3LCAxNjcxMiwgMCwgMTY3MTksIDAsIDE2NzI2LCAwLCAwLCAxNjczMSwgMTY3MzgsIDAsIDE2NzQ1LCAxNjc0OSwgCisgICAgMTY3NTYsIDE2NzYwLCAxNjc2NSwgMTY3NzMsIDE2Nzc5LCAxNjc4NSwgMTY3OTAsIDE2Nzk2LCAxNjgwMiwgMTY4MDgsIAorICAgIDE2ODEzLCAwLCAxNjgxOSwgMTY4MjcsIDE2ODM0LCAwLCAwLCAxNjg0MSwgMTY4NDYsIDE2ODUyLCAxNjg1NywgMTY4NjMsIAorICAgIDAsIDE2ODY5LCAwLCAxNjg3NSwgMTY4ODIsIDE2ODg5LCAxNjg5NiwgMTY5MDMsIDE2OTA4LCAwLCAwLCAxNjkxMiwgCisgICAgMTY5MTcsIDE2OTIxLCAxNjkyNSwgMTY5MjksIDE2OTMzLCAxNjkzNywgMTY5NDEsIDE2OTQ1LCAxNjk0OSwgMCwgMCwgCisgICAgMTY5NTMsIDE2OTU5LCAxNjk2NSwgMTY5NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OTc5LCAxNjk4MywgMTY5OTQsIAorICAgIDE3MDA5LCAxNzAyNCwgMTcwMzQsIDE3MDQ1LCAxNzA1OCwgMTcwNjksIDE3MDc1LCAxNzA4MywgMTcwOTMsIDE3MDk5LCAKKyAgICAxNzEwNywgMTcxMTEsIDE3MTE3LCAxNzEyMywgMTcxMzEsIDE3MTQxLCAxNzE0OSwgMTcxNjIsIDE3MTY4LCAxNzE3NiwgCisgICAgMTcxODQsIDE3MTk2LCAxNzIwMywgMTcyMTEsIDE3MjE5LCAxNzIyNywgMTcyMzUsIDE3MjQzLCAxNzI1MSwgMTcyNjEsIAorICAgIDE3MjY1LCAxNzI2OCwgMTcyNzEsIDE3Mjc0LCAxNzI3NywgMTcyODAsIDE3MjgzLCAxNzI4NiwgMTcyODksIDE3MjkyLCAKKyAgICAxNzI5NiwgMTczMDAsIDE3MzA0LCAxNzMwOCwgMTczMTIsIDE3MzE2LCAxNzMyMCwgMTczMjQsIDE3MzI4LCAxNzMzMywgCisgICAgMTczMzksIDE3MzQ5LCAxNzM2MywgMTczNzMsIDE3Mzc5LCAxNzM4NSwgMTczOTMsIDE3NDAxLCAxNzQwOSwgMTc0MTcsIAorICAgIDE3NDIzLCAxNzQyOSwgMTc0MzIsIDE3NDM2LCAxNzQ0MCwgMTc0NDQsIDE3NDQ4LCAxNzQ1MiwgMTc0NTYsIDAsIDE3NDYwLCAKKyAgICAxNzQ2NCwgMTc0NjgsIDE3NDcyLCAxNzQ3NiwgMTc0ODAsIDE3NDg0LCAxNzQ4OCwgMTc0OTIsIDE3NDk2LCAxNzUwMCwgCisgICAgMTc1MDMsIDE3NTA2LCAxNzUxMCwgMTc1MTQsIDE3NTE4LCAxNzUyMSwgMTc1MjUsIDE3NTI5LCAxNzUzMywgMTc1MzcsIAorICAgIDE3NTQxLCAxNzU0NSwgMTc1NDksIDE3NTUzLCAxNzU1NiwgMTc1NTksIDE3NTYzLCAxNzU2NywgMTc1NzEsIDE3NTc0LCAKKyAgICAxNzU3NywgMTc1ODAsIDE3NTg0LCAxNzU4OSwgMTc1OTMsIDAsIDAsIDAsIDAsIDE3NTk3LCAxNzYwMiwgMTc2MDYsIAorICAgIDE3NjExLCAxNzYxNSwgMTc2MjAsIDE3NjI1LCAxNzYzMSwgMTc2MzYsIDE3NjQyLCAxNzY0NiwgMTc2NTEsIDE3NjU1LCAKKyAgICAxNzY2MCwgMTc2NzAsIDE3Njc2LCAxNzY4MiwgMTc2ODksIDE3Njk5LCAxNzcwNSwgMTc3MDksIDE3NzEzLCAxNzcxOSwgCisgICAgMTc3MjUsIDE3NzMzLCAxNzczOSwgMTc3NDcsIDE3NzU1LCAxNzc2MywgMTc3NzMsIDE3NzgxLCAxNzc5MSwgMTc3OTYsIAorICAgIDE3ODAyLCAxNzgwOCwgMTc4MTQsIDE3ODIwLCAxNzgyNiwgMTc4MzIsIDAsIDE3ODM4LCAxNzg0NCwgMTc4NTAsIDE3ODU2LCAKKyAgICAxNzg2MiwgMTc4NjgsIDE3ODc0LCAxNzg4MCwgMTc4ODYsIDE3ODkyLCAxNzg5OCwgMTc5MDMsIDE3OTA4LCAxNzkxNCwgCisgICAgMTc5MjAsIDE3OTI2LCAxNzkzMSwgMTc5MzcsIDE3OTQzLCAxNzk0OSwgMTc5NTUsIDE3OTYxLCAxNzk2NywgMTc5NzMsIAorICAgIDE3OTc5LCAxNzk4NCwgMTc5ODksIDE3OTk1LCAxODAwMSwgMTgwMDcsIDE4MDEyLCAxODAxNywgMTgwMjIsIDE4MDI4LCAKKyAgICAxODAzNiwgMTgwNDMsIDAsIDE4MDUwLCAxODA1NywgMTgwNzAsIDE4MDc3LCAxODA4NCwgMTgwOTIsIDE4MTAwLCAxODEwNiwgCisgICAgMTgxMTIsIDE4MTE4LCAxODEyOCwgMTgxMzMsIDE4MTM5LCAxODE0OSwgMTgxNTksIDAsIDE4MTY5LCAxODE3OSwgMTgxODcsIAorICAgIDE4MTk5LCAxODIxMSwgMTgyMTcsIDE4MjMxLCAxODI0NiwgMTgyNTEsIDE4MjU2LCAxODI2NCwgMTgyNzIsIDE4MjgwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODI4NSwgMTgyODgsIDE4MjkyLCAxODI5NiwgMTgzMDAsIAotICAgIDE4MzA0LCAxODMwOCwgMTgzMTIsIDE4MzE2LCAxODMyMCwgMTgzMjQsIDE4MzI4LCAxODMzMiwgMTgzMzYsIDE4MzQwLCAKLSAgICAxODM0NCwgMTgzNDgsIDE4MzUyLCAxODM1NiwgMTgzNjAsIDE4MzY0LCAxODM2NywgMTgzNzAsIDE4Mzc0LCAxODM3OCwgCi0gICAgMTgzODIsIDE4Mzg1LCAxODM4OCwgMTgzOTEsIDE4Mzk1LCAxODM5OSwgMTg0MDIsIDE4NDA1LCAxODQwOSwgMTg0MTIsIAotICAgIDE4NDE3LCAxODQyMCwgMTg0MjQsIDE4NDI3LCAxODQzMSwgMTg0MzQsIDE4NDM5LCAxODQ0MiwgMTg0NDYsIDE4NDUzLCAKLSAgICAxODQ1OCwgMTg0NjIsIDE4NDY3LCAxODQ3MSwgMTg0NzYsIDE4NDgwLCAxODQ4NSwgMTg0OTIsIDE4NDk4LCAxODUwMywgCi0gICAgMTg1MDcsIDE4NTExLCAxODUxNSwgMTg1MTksIDE4NTIzLCAxODUyOCwgMTg1MzMsIDE4NTM5LCAxODU0NCwgMTg1NDksIAotICAgIDE4NTUzLCAxODU1NiwgMTg1NTksIDE4NTYyLCAxODU2NSwgMTg1NjgsIDE4NTcxLCAxODU3NCwgMTg1NzcsIDE4NTgwLCAKLSAgICAxODU4NiwgMTg1OTAsIDE4NTk0LCAxODU5OCwgMTg2MDIsIDE4NjA2LCAxODYxMCwgMTg2MTQsIDE4NjE4LCAxODYyMywgCi0gICAgMTg2MjcsIDE4NjMyLCAxODYzNywgMTg2NDMsIDE4NjQ4LCAxODY1NCwgMTg2NjAsIDE4NjY2LCAxODY3MiwgMTg2NzgsIAotICAgIDE4Njg1LCAxODY5MiwgMTg3MDAsIDE4NzA4LCAxODcxNywgMTg3MjYsIDE4NzM3LCAxODc0NywgMTg3NTcsIDE4NzY4LCAKLSAgICAxODc3OSwgMTg3ODksIDE4Nzk5LCAxODgwOSwgMTg4MTksIDE4ODI5LCAxODgzOSwgMTg4NDksIDE4ODU5LCAxODg2NywgCi0gICAgMTg4NzQsIDE4ODgwLCAxODg4NywgMTg4OTIsIDE4ODk4LCAxODkwNCwgMTg5MTAsIDE4OTE2LCAxODkyMiwgMTg5MjgsIAotICAgIDE4OTMzLCAxODkzOSwgMTg5NDUsIDE4OTUxLCAxODk1NywgMTg5NjIsIDE4OTcwLCAxODk3NywgMTg5ODMsIDE4OTkwLCAKLSAgICAxODk5OCwgMTkwMDQsIDE5MDEwLCAxOTAxNiwgMTkwMjIsIDE5MDMwLCAxOTAzOCwgMTkwNDgsIDE5MDU2LCAxOTA2NCwgCi0gICAgMTkwNzAsIDE5MDc1LCAxOTA4MCwgMTkwODUsIDE5MDkwLCAxOTA5NSwgMTkxMDAsIDE5MTA1LCAxOTExMCwgMTkxMTUsIAotICAgIDE5MTIxLCAxOTEyNywgMTkxMzMsIDE5MTQwLCAxOTE0NSwgMTkxNTEsIDE5MTU2LCAxOTE2MSwgMTkxNjYsIDE5MTcxLCAKLSAgICAxOTE3NiwgMTkxODEsIDE5MTg2LCAxOTE5MSwgMTkxOTYsIDE5MjAxLCAxOTIwNiwgMTkyMTEsIDE5MjE2LCAxOTIyMSwgCi0gICAgMTkyMjYsIDE5MjMxLCAxOTIzNiwgMTkyNDEsIDE5MjQ2LCAxOTI1MSwgMTkyNTYsIDE5MjYxLCAxOTI2NiwgMTkyNzEsIAotICAgIDE5Mjc2LCAxOTI4MSwgMTkyODYsIDE5MjkxLCAxOTI5NiwgMTkzMDEsIDE5MzA2LCAxOTMxMSwgMTkzMTYsIDE5MzIxLCAKLSAgICAxOTMyNiwgMTkzMzEsIDE5MzM2LCAwLCAxOTM0MSwgMCwgMCwgMCwgMCwgMCwgMTkzNDYsIDAsIDAsIDE5MzUxLCAxOTM1NSwgCi0gICAgMTkzNTksIDE5MzYzLCAxOTM2NywgMTkzNzEsIDE5Mzc1LCAxOTM3OSwgMTkzODMsIDE5Mzg3LCAxOTM5MSwgMTkzOTUsIAotICAgIDE5Mzk5LCAxOTQwMywgMTk0MDcsIDE5NDExLCAxOTQxNSwgMTk0MTksIDE5NDIzLCAxOTQyNywgMTk0MzEsIDE5NDM1LCAKLSAgICAxOTQzOSwgMTk0NDMsIDE5NDQ3LCAxOTQ1MSwgMTk0NTUsIDE5NDU5LCAxOTQ2MywgMTk0NjcsIDE5NDcxLCAxOTQ3NSwgCi0gICAgMTk0NzksIDE5NDgzLCAxOTQ4NywgMTk0OTEsIDE5NDk1LCAxOTQ5OSwgMTk1MDMsIDE5NTA3LCAxOTUxMSwgMTk1MTUsIAotICAgIDE5NTIxLCAxOTUyNSwgMTk1MzAsIDE5NTM1LCAxOTUzOSwgMTk1NDQsIDE5NTQ5LCAxOTU1MywgMTk1NTcsIDE5NTYxLCAKLSAgICAxOTU2NSwgMTk1NjksIDE5NTczLCAxOTU3NywgMTk1ODEsIDE5NTg1LCAxOTU4OSwgMTk1OTMsIDE5NTk3LCAxOTYwMSwgCi0gICAgMTk2MDUsIDE5NjA5LCAxOTYxMywgMTk2MTcsIDE5NjIxLCAxOTYyNSwgMTk2MjksIDE5NjMzLCAxOTYzNywgMTk2NDEsIAotICAgIDE5NjQ1LCAxOTY0OSwgMTk2NTMsIDE5NjU3LCAxOTY2MSwgMTk2NjUsIDE5NjY5LCAxOTY3MywgMTk2NzcsIDE5NjgxLCAKLSAgICAxOTY4NSwgMTk2ODksIDE5NjkzLCAxOTY5NywgMTk3MDEsIDE5NzA1LCAxOTcwOSwgMTk3MTMsIDE5NzE3LCAxOTcyMSwgCi0gICAgMTk3MjUsIDE5NzI5LCAxOTczMywgMTk3MzcsIDE5NzQxLCAxOTc0NSwgMTk3NDksIDE5NzUzLCAxOTc1NywgMTk3NjEsIAotICAgIDE5NzY1LCAxOTc2OSwgMTk3NzMsIDE5Nzc3LCAxOTc4MSwgMTk3ODUsIDE5Nzg5LCAxOTc5MywgMTk3OTcsIDE5ODAxLCAKLSAgICAxOTgwNSwgMTk4MDksIDE5ODEzLCAxOTgxNywgMTk4MjEsIDE5ODI1LCAxOTgyOSwgMTk4MzMsIDE5ODM3LCAxOTg0MSwgCi0gICAgMTk4NDUsIDE5ODQ5LCAxOTg1MywgMTk4NTcsIDE5ODYxLCAxOTg2NSwgMTk4NjksIDE5ODczLCAxOTg3NywgMTk4ODEsIAotICAgIDE5ODg1LCAxOTg4OSwgMTk4OTMsIDE5ODk3LCAxOTkwMSwgMTk5MDUsIDE5OTA5LCAxOTkxMywgMTk5MTcsIDE5OTIxLCAKLSAgICAxOTkyNSwgMTk5MjksIDE5OTMzLCAxOTkzNywgMTk5NDAsIDE5OTQ0LCAxOTk0NywgMTk5NTEsIDE5OTU1LCAxOTk1OCwgCi0gICAgMTk5NjIsIDE5OTY2LCAxOTk2OSwgMTk5NzMsIDE5OTc3LCAxOTk4MSwgMTk5ODUsIDE5OTg4LCAxOTk5MiwgMTk5OTYsIAotICAgIDIwMDAwLCAyMDAwNCwgMjAwMDgsIDIwMDEyLCAyMDAxNSwgMjAwMTksIDIwMDIzLCAyMDAyNywgMjAwMzEsIDIwMDM1LCAKLSAgICAyMDAzOSwgMjAwNDMsIDIwMDQ3LCAyMDA1MSwgMjAwNTUsIDIwMDU5LCAyMDA2MywgMjAwNjcsIDIwMDcxLCAyMDA3NSwgCi0gICAgMjAwNzksIDIwMDgzLCAyMDA4NywgMjAwOTEsIDIwMDk1LCAyMDA5OSwgMjAxMDMsIDIwMTA3LCAyMDExMSwgMjAxMTUsIAotICAgIDIwMTE5LCAyMDEyMywgMjAxMjcsIDIwMTMxLCAyMDEzNSwgMjAxMzksIDIwMTQzLCAyMDE0NywgMjAxNTEsIDIwMTU1LCAKLSAgICAyMDE1OSwgMjAxNjMsIDIwMTY3LCAyMDE3MSwgMjAxNzUsIDIwMTc5LCAyMDE4MywgMjAxODcsIDIwMTkxLCAyMDE5NSwgCi0gICAgMjAxOTksIDIwMjAzLCAyMDIwNywgMjAyMTEsIDIwMjE1LCAyMDIxOSwgMjAyMjMsIDIwMjI3LCAyMDIzMSwgMjAyMzUsIAotICAgIDIwMjM5LCAyMDI0MywgMjAyNDcsIDIwMjUxLCAyMDI1NSwgMjAyNTksIDIwMjYzLCAyMDI2NywgMjAyNzEsIDIwMjc1LCAKLSAgICAyMDI3OSwgMjAyODMsIDIwMjg3LCAyMDI5MSwgMjAyOTUsIDIwMjk5LCAyMDMwMywgMjAzMDcsIDIwMzExLCAyMDMxNSwgCi0gICAgMjAzMTksIDIwMzIzLCAyMDMyNywgMjAzMzEsIDIwMzM1LCAyMDMzOSwgMjAzNDMsIDIwMzQ3LCAyMDM1MSwgMjAzNTUsIAotICAgIDIwMzU5LCAyMDM2MywgMjAzNjcsIDIwMzcxLCAyMDM3NSwgMjAzNzksIDIwMzgzLCAyMDM4NywgMjAzOTEsIDIwMzk1LCAKLSAgICAyMDM5OSwgMjA0MDMsIDIwNDA3LCAyMDQxMSwgMjA0MTUsIDIwNDE5LCAyMDQyMywgMjA0MjcsIDIwNDMxLCAyMDQzNSwgCi0gICAgMjA0MzksIDIwNDQzLCAyMDQ0NywgMjA0NTEsIDIwNDU1LCAyMDQ1OSwgMjA0NjMsIDIwNDY3LCAyMDQ3MSwgMjA0NzUsIAotICAgIDIwNDc5LCAyMDQ4MywgMjA0ODcsIDIwNDkxLCAyMDQ5NSwgMjA0OTksIDIwNTAzLCAyMDUwNywgMjA1MTEsIDIwNTE1LCAKLSAgICAyMDUxOSwgMjA1MjMsIDIwNTI3LCAyMDUzMSwgMjA1MzUsIDIwNTM5LCAyMDU0MywgMjA1NDcsIDIwNTUxLCAyMDU1NSwgCi0gICAgMjA1NTksIDIwNTYzLCAyMDU2NywgMjA1NzAsIDIwNTc0LCAyMDU3OCwgMjA1ODIsIDIwNTg2LCAyMDU5MCwgMjA1OTQsIAotICAgIDIwNTk4LCAyMDYwMiwgMjA2MDYsIDIwNjEwLCAyMDYxNCwgMjA2MTgsIDIwNjIyLCAyMDYyNiwgMjA2MzAsIDIwNjM0LCAKLSAgICAyMDYzOCwgMjA2NDIsIDIwNjQ2LCAyMDY1MCwgMjA2NTQsIDIwNjU4LCAyMDY2MiwgMjA2NjUsIDIwNjY5LCAyMDY3MywgCi0gICAgMjA2NzcsIDIwNjgxLCAyMDY4NSwgMjA2ODksIDIwNjkzLCAyMDY5NywgMjA3MDEsIDIwNzA1LCAyMDcwOSwgMjA3MTMsIAotICAgIDIwNzE3LCAyMDcyMSwgMjA3MjUsIDIwNzI4LCAyMDczMiwgMjA3MzYsIDIwNzQwLCAyMDc0NCwgMjA3NDgsIDIwNzUyLCAKLSAgICAyMDc1NiwgMjA3NTksIDIwNzYzLCAyMDc2NywgMjA3NzEsIDIwNzc1LCAyMDc3OSwgMjA3ODMsIDIwNzg3LCAyMDc5MSwgCi0gICAgMjA3OTUsIDIwNzk5LCAyMDgwMywgMjA4MDcsIDIwODExLCAyMDgxNSwgMjA4MTksIDIwODIzLCAyMDgyNywgMjA4MzEsIAotICAgIDIwODM1LCAyMDgzOSwgMjA4NDMsIDIwODQ3LCAyMDg1MSwgMCwgMjA4NTUsIDIwODU5LCAyMDg2MywgMjA4NjcsIDAsIDAsIAotICAgIDIwODcxLCAyMDg3NSwgMjA4NzksIDIwODgzLCAyMDg4NywgMjA4OTEsIDIwODk1LCAwLCAyMDg5OSwgMCwgMjA5MDMsIAotICAgIDIwOTA3LCAyMDkxMSwgMjA5MTUsIDAsIDAsIDIwOTE5LCAyMDkyMywgMjA5MjcsIDIwOTMxLCAyMDkzNSwgMjA5MzksIAotICAgIDIwOTQzLCAyMDk0NywgMjA5NTEsIDIwOTU1LCAyMDk1OSwgMjA5NjMsIDIwOTY3LCAyMDk3MSwgMjA5NzUsIDIwOTc5LCAKLSAgICAyMDk4MywgMjA5ODcsIDIwOTkxLCAyMDk5NSwgMjA5OTksIDIxMDAzLCAyMTAwNywgMjEwMTAsIDIxMDE0LCAyMTAxOCwgCi0gICAgMjEwMjIsIDIxMDI2LCAyMTAzMCwgMjEwMzQsIDIxMDM4LCAyMTA0MiwgMjEwNDYsIDIxMDUwLCAyMTA1NCwgMjEwNTgsIAotICAgIDIxMDYyLCAyMTA2NiwgMjEwNzAsIDIxMDc0LCAyMTA3OCwgMCwgMjEwODIsIDIxMDg2LCAyMTA5MCwgMjEwOTQsIDAsIDAsIAotICAgIDIxMDk4LCAyMTEwMSwgMjExMDUsIDIxMTA5LCAyMTExMywgMjExMTcsIDIxMTIxLCAyMTEyNSwgMjExMjksIDIxMTMzLCAKLSAgICAyMTEzNywgMjExNDEsIDIxMTQ1LCAyMTE0OSwgMjExNTMsIDIxMTU3LCAyMTE2MSwgMjExNjYsIDIxMTcxLCAyMTE3NiwgCi0gICAgMjExODIsIDIxMTg4LCAyMTE5MywgMjExOTgsIDIxMjA0LCAyMTIwNywgMjEyMTEsIDIxMjE1LCAyMTIxOSwgMjEyMjMsIAotICAgIDIxMjI3LCAyMTIzMSwgMjEyMzUsIDAsIDIxMjM5LCAyMTI0MywgMjEyNDcsIDIxMjUxLCAwLCAwLCAyMTI1NSwgMjEyNTksIAotICAgIDIxMjYzLCAyMTI2NywgMjEyNzEsIDIxMjc1LCAyMTI3OSwgMCwgMjEyODMsIDAsIDIxMjg3LCAyMTI5MSwgMjEyOTUsIAotICAgIDIxMjk5LCAwLCAwLCAyMTMwMywgMjEzMDcsIDIxMzExLCAyMTMxNSwgMjEzMTksIDIxMzIzLCAyMTMyNywgMjEzMzEsIAotICAgIDIxMzM1LCAyMTM0MCwgMjEzNDUsIDIxMzUwLCAyMTM1NiwgMjEzNjIsIDIxMzY3LCAwLCAyMTM3MiwgMjEzNzYsIDIxMzgwLCAKLSAgICAyMTM4NCwgMjEzODgsIDIxMzkyLCAyMTM5NiwgMjE0MDAsIDIxNDA0LCAyMTQwOCwgMjE0MTIsIDIxNDE2LCAyMTQyMCwgCi0gICAgMjE0MjQsIDIxNDI4LCAyMTQzMiwgMjE0MzYsIDIxNDM5LCAyMTQ0MywgMjE0NDcsIDIxNDUxLCAyMTQ1NSwgMjE0NTksIAotICAgIDIxNDYzLCAyMTQ2NywgMjE0NzEsIDIxNDc1LCAyMTQ3OSwgMjE0ODMsIDIxNDg3LCAyMTQ5MSwgMjE0OTUsIDIxNDk5LCAKLSAgICAyMTUwMywgMjE1MDcsIDIxNTExLCAyMTUxNSwgMjE1MTksIDIxNTIzLCAyMTUyNywgMjE1MzEsIDIxNTM1LCAyMTUzOSwgCi0gICAgMjE1NDMsIDIxNTQ3LCAyMTU1MSwgMjE1NTUsIDIxNTU5LCAyMTU2MywgMjE1NjcsIDIxNTcxLCAyMTU3NSwgMjE1NzksIAotICAgIDIxNTgzLCAyMTU4NywgMjE1OTEsIDIxNTk1LCAwLCAyMTU5OSwgMjE2MDMsIDIxNjA3LCAyMTYxMSwgMCwgMCwgMjE2MTUsIAotICAgIDIxNjE5LCAyMTYyMywgMjE2MjcsIDIxNjMxLCAyMTYzNSwgMjE2MzksIDIxNjQzLCAyMTY0NywgMjE2NTEsIDIxNjU1LCAKLSAgICAyMTY1OSwgMjE2NjMsIDIxNjY3LCAyMTY3MSwgMjE2NzUsIDIxNjc5LCAyMTY4MywgMjE2ODcsIDIxNjkxLCAyMTY5NSwgCi0gICAgMjE2OTksIDIxNzAzLCAyMTcwNywgMjE3MTEsIDIxNzE1LCAyMTcxOSwgMjE3MjMsIDIxNzI3LCAyMTczMSwgMjE3MzUsIAotICAgIDIxNzM5LCAyMTc0MywgMjE3NDcsIDIxNzUxLCAyMTc1NSwgMjE3NTksIDIxNzYzLCAyMTc2NywgMjE3NzEsIDIxNzc1LCAKLSAgICAyMTc3OSwgMjE3ODMsIDIxNzg3LCAyMTc5MSwgMjE3OTUsIDIxNzk5LCAyMTgwMywgMjE4MDcsIDIxODExLCAyMTgxNSwgCi0gICAgMjE4MTksIDIxODIzLCAyMTgyNywgMjE4MzEsIDIxODM1LCAyMTgzOSwgMjE4NDIsIDIxODQ2LCAyMTg1MCwgMjE4NTQsIAotICAgIDIxODU4LCAyMTg2MiwgMjE4NjYsIDIxODcwLCAyMTg3NCwgMjE4NzgsIDAsIDAsIDIxODgyLCAyMTg5MSwgMjE4OTcsIAotICAgIDIxOTAyLCAyMTkwNiwgMjE5MDksIDIxOTE0LCAyMTkxNywgMjE5MjAsIDIxOTIzLCAyMTkyOCwgMjE5MzIsIDIxOTM3LCAKLSAgICAyMTk0MCwgMjE5NDMsIDIxOTQ2LCAyMTk0OSwgMjE5NTIsIDIxOTU1LCAyMTk1OCwgMjE5NjEsIDIxOTY0LCAyMTk2OCwgCi0gICAgMjE5NzIsIDIxOTc2LCAyMTk4MCwgMjE5ODQsIDIxOTg4LCAyMTk5MiwgMjE5OTYsIDIyMDAwLCAyMjAwNCwgMCwgMCwgMCwgCi0gICAgMjIwMTAsIDIyMDE2LCAyMjAyMCwgMjIwMjQsIDIyMDI4LCAyMjAzNCwgMjIwMzgsIDIyMDQyLCAyMjA0NiwgMjIwNTIsIAotICAgIDIyMDU2LCAyMjA2MCwgMjIwNjQsIDIyMDcwLCAyMjA3NCwgMjIwNzgsIDIyMDgyLCAyMjA4OCwgMjIwOTQsIDIyMTAwLCAKLSAgICAyMjEwOCwgMjIxMTQsIDIyMTIwLCAyMjEyNiwgMjIxMzIsIDIyMTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAyMjE0NCwgMjIxNDcsIAotICAgIDIyMTUwLCAyMjE1MywgMjIxNTYsIDIyMTU5LCAyMjE2MywgMjIxNjcsIDIyMTcwLCAyMjE3NCwgMjIxNzgsIDIyMTgyLCAKLSAgICAyMjE4NiwgMjIxOTAsIDIyMTkzLCAyMjE5NywgMjIyMDEsIDIyMjA1LCAyMjIwOSwgMjIyMTMsIDIyMjE3LCAyMjIyMSwgCi0gICAgMjIyMjUsIDIyMjI5LCAyMjIzMywgMjIyMzcsIDIyMjQwLCAyMjI0NCwgMjIyNDgsIDIyMjUyLCAyMjI1NiwgMjIyNTksIAotICAgIDIyMjYzLCAyMjI2NywgMjIyNzEsIDIyMjc1LCAyMjI3OSwgMjIyODMsIDIyMjg3LCAyMjI5MSwgMjIyOTUsIDIyMjk5LCAKLSAgICAyMjMwMywgMjIzMDcsIDIyMzExLCAyMjMxNCwgMjIzMTgsIDIyMzIyLCAyMjMyNiwgMjIzMzAsIDIyMzM0LCAyMjMzOCwgCi0gICAgMjIzNDIsIDIyMzQ2LCAyMjM1MCwgMjIzNTQsIDIyMzU4LCAyMjM2MiwgMjIzNjYsIDIyMzcwLCAyMjM3NCwgMjIzNzgsIAotICAgIDIyMzgyLCAyMjM4NiwgMjIzOTAsIDIyMzk0LCAyMjM5OCwgMjI0MDIsIDIyNDA2LCAyMjQxMCwgMjI0MTQsIDIyNDE4LCAKLSAgICAyMjQyMiwgMjI0MjYsIDIyNDMwLCAyMjQzNCwgMjI0MzgsIDIyNDQyLCAyMjQ0NiwgMjI0NTAsIDIyNDUzLCAyMjQ1NywgCi0gICAgMjI0NjEsIDIyNDY1LCAyMjQ2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI0NzMsIDIyNDc3LCAKLSAgICAyMjQ4MCwgMjI0ODQsIDIyNDg3LCAyMjQ5MSwgMjI0OTQsIDIyNDk4LCAyMjUwNCwgMjI1MDksIDIyNTEzLCAyMjUxNiwgCi0gICAgMjI1MjAsIDIyNTI0LCAyMjUyOSwgMjI1MzMsIDIyNTM4LCAyMjU0MiwgMjI1NDcsIDIyNTUxLCAyMjU1NiwgMjI1NjAsIAotICAgIDIyNTY1LCAyMjU3MSwgMjI1NzUsIDIyNTgwLCAyMjU4NCwgMjI1ODksIDIyNTk1LCAyMjU5OSwgMjI2MDUsIDIyNjExLCAKLSAgICAyMjYxNSwgMjI2MjAsIDIyNjI4LCAyMjYzNiwgMjI2NDMsIDIyNjQ4LCAyMjY1MywgMjI2NjIsIDIyNjY5LCAyMjY3NiwgCi0gICAgMjI2ODEsIDIyNjg3LCAyMjY5MSwgMjI2OTUsIDIyNjk5LCAyMjcwMywgMjI3MDcsIDIyNzExLCAyMjcxNSwgMjI3MTksIAotICAgIDIyNzIzLCAyMjcyNywgMjI3MzMsIDIyNzM4LCAyMjc0MywgMjI3NDYsIDIyNzUwLCAyMjc1NCwgMjI3NTksIDIyNzYzLCAKLSAgICAyMjc2OCwgMjI3NzIsIDIyNzc3LCAyMjc4MSwgMjI3ODYsIDIyNzkwLCAyMjc5NSwgMjI3OTksIDIyODA0LCAyMjgwOCwgCi0gICAgMjI4MTMsIDIyODE5LCAyMjgyMywgMjI4MjgsIDIyODMzLCAyMjgzNywgMjI4NDEsIDIyODQ1LCAyMjg0OSwgMjI4NTIsIAotICAgIDIyODU2LCAyMjg2MiwgMjI4NjcsIDIyODcyLCAyMjg3NiwgMjI4ODAsIDIyODg0LCAyMjg4OSwgMjI4OTMsIDIyODk4LCAKLSAgICAyMjkwMiwgMjI5MDcsIDIyOTEwLCAyMjkxNCwgMjI5MTgsIDIyOTIzLCAyMjkyNywgMjI5MzIsIDIyOTM2LCAyMjk0MSwgCi0gICAgMjI5NDcsIDIyOTUxLCAyMjk1NSwgMjI5NTksIDIyOTYzLCAyMjk2NywgMjI5NzEsIDIyOTc1LCAyMjk3OSwgMjI5ODMsIAotICAgIDIyOTg3LCAyMjk5MSwgMjI5OTcsIDIzMDAwLCAyMzAwNCwgMjMwMDgsIDIzMDEzLCAyMzAxNywgMjMwMjIsIDIzMDI2LCAKLSAgICAyMzAzMSwgMjMwMzUsIDIzMDQwLCAyMzA0NCwgMjMwNDksIDIzMDUzLCAyMzA1OCwgMjMwNjIsIDIzMDY3LCAyMzA3MywgCi0gICAgMjMwNzcsIDIzMDgxLCAyMzA4NywgMjMwOTMsIDIzMDk5LCAyMzEwNSwgMjMxMDksIDIzMTEzLCAyMzExNywgMjMxMjEsIAotICAgIDIzMTI1LCAyMzEyOSwgMjMxMzUsIDIzMTM5LCAyMzE0MywgMjMxNDcsIDIzMTUyLCAyMzE1NiwgMjMxNjEsIDIzMTY1LCAKLSAgICAyMzE3MCwgMjMxNzQsIDIzMTc5LCAyMzE4MywgMjMxODgsIDIzMTkyLCAyMzE5NywgMjMyMDEsIDIzMjA2LCAyMzIxMiwgCi0gICAgMjMyMTYsIDIzMjIyLCAyMzIyNiwgMjMyMzAsIDIzMjM0LCAyMzIzOCwgMjMyNDIsIDIzMjQ2LCAyMzI1MiwgMjMyNTUsIAotICAgIDIzMjU5LCAyMzI2MywgMjMyNjgsIDIzMjcyLCAyMzI3NywgMjMyODEsIDIzMjg2LCAyMzI5MCwgMjMyOTUsIDIzMjk5LCAKLSAgICAyMzMwNCwgMjMzMDgsIDIzMzEzLCAyMzMxNywgMjMzMjIsIDIzMzI4LCAyMzMzMSwgMjMzMzUsIDIzMzM5LCAyMzM0NCwgCi0gICAgMjMzNDksIDIzMzUzLCAyMzM1NywgMjMzNjEsIDIzMzY1LCAyMzM2OSwgMjMzNzMsIDIzMzc5LCAyMzM4MiwgMjMzODYsIAotICAgIDIzMzkwLCAyMzM5NSwgMjMzOTksIDIzNDA0LCAyMzQwOCwgMjM0MTMsIDIzNDE5LCAyMzQyMywgMjM0MjgsIDIzNDMyLCAKLSAgICAyMzQzNiwgMjM0NDAsIDIzNDQ0LCAyMzQ0OCwgMjM0NTIsIDIzNDU2LCAyMzQ2MiwgMjM0NjYsIDIzNDcwLCAyMzQ3NCwgCi0gICAgMjM0NzksIDIzNDgzLCAyMzQ4OCwgMjM0OTIsIDIzNDk3LCAyMzUwMSwgMjM1MDYsIDIzNTEwLCAyMzUxNSwgMjM1MTksIAotICAgIDIzNTI0LCAyMzUyOCwgMjM1MzMsIDIzNTM2LCAyMzU0MCwgMjM1NDQsIDIzNTQ4LCAyMzU1MiwgMjM1NTYsIDIzNTYwLCAKLSAgICAyMzU2NCwgMjM1NjgsIDIzNTc0LCAyMzU3NywgMjM1ODEsIDIzNTg1LCAyMzU5MCwgMjM1OTQsIDIzNTk5LCAyMzYwMywgCi0gICAgMjM2MDgsIDIzNjEyLCAyMzYxNywgMjM2MjEsIDIzNjI2LCAyMzYzMCwgMjM2MzUsIDIzNjM5LCAyMzY0NCwgMjM2NTAsIAotICAgIDIzNjU0LCAyMzY2MCwgMjM2NjQsIDIzNjcwLCAyMzY3NiwgMjM2ODIsIDIzNjg4LCAyMzY5NCwgMjM3MDAsIDIzNzA2LCAKLSAgICAyMzcxMiwgMjM3MTYsIDIzNzIwLCAyMzcyNCwgMjM3MjgsIDIzNzMyLCAyMzczNiwgMjM3NDAsIDIzNzQ0LCAyMzc0OSwgCi0gICAgMjM3NTMsIDIzNzU4LCAyMzc2MiwgMjM3NjcsIDIzNzcxLCAyMzc3NiwgMjM3ODAsIDIzNzg1LCAyMzc4OSwgMjM3OTQsIAotICAgIDIzNzk4LCAyMzgwMywgMjM4MDcsIDIzODExLCAyMzgxNSwgMjM4MTksIDIzODIzLCAyMzgyNywgMjM4MzEsIDIzODM3LCAKLSAgICAyMzg0MCwgMjM4NDQsIDIzODQ4LCAyMzg1MywgMjM4NTcsIDIzODYyLCAyMzg2NiwgMjM4NzEsIDIzODc1LCAyMzg4MCwgCi0gICAgMjM4ODQsIDIzODg5LCAyMzg5MywgMjM4OTgsIDIzOTAyLCAyMzkwNywgMjM5MTMsIDIzOTE3LCAyMzkyMywgMjM5MjgsIAotICAgIDIzOTM0LCAyMzkzOCwgMjM5NDQsIDIzOTQ5LCAyMzk1MywgMjM5NTcsIDIzOTYxLCAyMzk2NSwgMjM5NjksIDIzOTc0LCAKLSAgICAyMzk3NywgMjM5ODEsIDIzOTg2LCAyMzk5MCwgMjM5OTUsIDIzOTk4LCAyNDAwMiwgMjQwMDYsIDI0MDEwLCAyNDAxNCwgCi0gICAgMjQwMTgsIDI0MDIyLCAyNDAyNiwgMjQwMzAsIDI0MDM0LCAyNDAzOCwgMjQwNDIsIDI0MDQ3LCAyNDA1MSwgMjQwNTUsIAotICAgIDI0MDYxLCAyNDA2NSwgMjQwNzEsIDI0MDc1LCAyNDA4MSwgMjQwODUsIDI0MDg5LCAyNDA5MywgMjQwOTcsIDI0MTAxLCAKLSAgICAyNDEwNiwgMjQxMTAsIDI0MTE0LCAyNDExOCwgMjQxMjIsIDI0MTI2LCAyNDEzMCwgMjQxMzQsIDI0MTM4LCAyNDE0MiwgCi0gICAgMjQxNDYsIDI0MTUyLCAyNDE1OCwgMjQxNjQsIDI0MTcwLCAyNDE3NiwgMjQxODEsIDI0MTg3LCAyNDE5MywgMjQxOTksIAotICAgIDI0MjAzLCAyNDIwNywgMjQyMTEsIDI0MjE1LCAyNDIxOSwgMjQyMjMsIDI0MjI3LCAyNDIzMSwgMjQyMzUsIDI0MjM5LCAKLSAgICAyNDI0MywgMjQyNDcsIDI0MjUxLCAyNDI1NiwgMjQyNjEsIDI0MjY2LCAyNDI3MCwgMjQyNzQsIDI0Mjc4LCAyNDI4MiwgCi0gICAgMjQyODYsIDI0MjkwLCAyNDI5NCwgMjQyOTgsIDI0MzAyLCAyNDMwNiwgMjQzMTIsIDI0MzE4LCAyNDMyNCwgMjQzMzAsIAotICAgIDI0MzM2LCAyNDM0MiwgMjQzNDgsIDI0MzU0LCAyNDM2MCwgMjQzNjQsIDI0MzY4LCAyNDM3MiwgMjQzNzYsIDI0MzgwLCAKLSAgICAyNDM4NCwgMjQzODgsIDI0Mzk0LCAyNDQwMCwgMjQ0MDYsIDI0NDEyLCAyNDQxOCwgMjQ0MjQsIDI0NDMwLCAyNDQzNiwgCi0gICAgMjQ0NDIsIDI0NDQ3LCAyNDQ1MiwgMjQ0NTcsIDI0NDYyLCAyNDQ2OCwgMjQ0NzQsIDI0NDgwLCAyNDQ4NiwgMjQ0OTIsIAotICAgIDI0NDk4LCAyNDUwNCwgMjQ1MDksIDI0NTE1LCAyNDUyMSwgMjQ1MjcsIDI0NTMyLCAyNDUzOCwgMjQ1NDQsIDI0NTUwLCAKLSAgICAyNDU1NSwgMjQ1NjAsIDI0NTY1LCAyNDU3MCwgMjQ1NzUsIDI0NTgwLCAyNDU4NSwgMjQ1OTAsIDI0NTk1LCAyNDYwMCwgCi0gICAgMjQ2MDUsIDI0NjEwLCAyNDYxNCwgMjQ2MTksIDI0NjI0LCAyNDYyOSwgMjQ2MzQsIDI0NjM5LCAyNDY0NCwgMjQ2NDksIAotICAgIDI0NjU0LCAyNDY1OSwgMjQ2NjQsIDI0NjY5LCAyNDY3NCwgMjQ2NzksIDI0Njg0LCAyNDY4OSwgMjQ2OTQsIDI0Njk5LCAKLSAgICAyNDcwNCwgMjQ3MDksIDI0NzE0LCAyNDcxOSwgMjQ3MjQsIDI0NzI5LCAyNDczNCwgMjQ3MzksIDI0NzQ0LCAyNDc0OSwgCi0gICAgMjQ3NTQsIDI0NzU5LCAyNDc2MywgMjQ3NjgsIDI0NzczLCAyNDc3OCwgMjQ3ODMsIDI0Nzg4LCAyNDc5MywgMjQ3OTgsIAotICAgIDI0ODAzLCAyNDgwOCwgMjQ4MTMsIDI0ODE4LCAyNDgyMywgMjQ4MjgsIDI0ODMzLCAyNDgzOCwgMjQ4NDMsIDI0ODQ4LCAKLSAgICAyNDg1MywgMjQ4NTgsIDI0ODYzLCAyNDg2OCwgMjQ4NzMsIDI0ODc4LCAyNDg4MywgMjQ4ODgsIDI0ODkyLCAyNDg5NywgCi0gICAgMjQ5MDIsIDI0OTA3LCAyNDkxMiwgMjQ5MTcsIDI0OTIxLCAyNDkyNiwgMjQ5MzEsIDI0OTM2LCAyNDk0MSwgMjQ5NDYsIAotICAgIDI0OTUwLCAyNDk1NSwgMjQ5NjEsIDI0OTY2LCAyNDk3MSwgMjQ5NzYsIDI0OTgxLCAyNDk4NywgMjQ5OTIsIDI0OTk3LCAKLSAgICAyNTAwMiwgMjUwMDcsIDI1MDEyLCAyNTAxNywgMjUwMjIsIDI1MDI3LCAyNTAzMiwgMjUwMzcsIDI1MDQyLCAyNTA0NywgCi0gICAgMjUwNTIsIDI1MDU3LCAyNTA2MiwgMjUwNjcsIDI1MDcyLCAyNTA3NywgMjUwODIsIDI1MDg3LCAyNTA5MiwgMjUwOTcsIAotICAgIDI1MTAyLCAyNTEwNywgMjUxMTIsIDI1MTE3LCAyNTEyMiwgMjUxMjcsIDI1MTMyLCAyNTEzNywgMjUxNDIsIDI1MTQ3LCAKLSAgICAyNTE1MiwgMjUxNTcsIDI1MTYyLCAyNTE2NywgMjUxNzIsIDI1MTc3LCAyNTE4MiwgMjUxODcsIDI1MTkyLCAyNTE5NywgCi0gICAgMjUyMDIsIDI1MjA3LCAyNTIxMywgMjUyMTgsIDI1MjIzLCAyNTIyOCwgMjUyMzMsIDI1MjM4LCAyNTI0MywgMjUyNDgsIAotICAgIDI1MjUzLCAyNTI1OCwgMjUyNjMsIDI1MjY4LCAyNTI3MiwgMjUyNzcsIDI1MjgyLCAyNTI4NywgMjUyOTIsIDI1Mjk3LCAKLSAgICAyNTMwMiwgMjUzMDcsIDI1MzEyLCAyNTMxNywgMjUzMjIsIDI1MzI3LCAyNTMzMiwgMjUzMzcsIDI1MzQyLCAyNTM0NywgCi0gICAgMjUzNTIsIDI1MzU3LCAyNTM2MiwgMjUzNjcsIDI1MzcyLCAyNTM3NywgMjUzODIsIDI1Mzg3LCAyNTM5MiwgMjUzOTcsIAotICAgIDI1NDAyLCAyNTQwOCwgMjU0MTIsIDI1NDE2LCAyNTQyMCwgMjU0MjQsIDI1NDI4LCAyNTQzMiwgMjU0MzYsIDI1NDQwLCAKLSAgICAyNTQ0NiwgMjU0NTIsIDI1NDU4LCAyNTQ2NCwgMjU0NzAsIDI1NDc2LCAyNTQ4MiwgMjU0ODksIDI1NDk1LCAyNTUwMCwgCi0gICAgMjU1MDUsIDI1NTEwLCAyNTUxNSwgMjU1MjAsIDI1NTI1LCAyNTUzMCwgMjU1MzUsIDI1NTQwLCAyNTU0NSwgMjU1NTAsIAotICAgIDI1NTU1LCAyNTU2MCwgMjU1NjUsIDI1NTcwLCAyNTU3NSwgMjU1ODAsIDI1NTg1LCAyNTU5MCwgMjU1OTUsIDI1NjAwLCAKLSAgICAyNTYwNSwgMjU2MTAsIDI1NjE1LCAyNTYyMCwgMjU2MjUsIDI1NjMwLCAyNTYzNSwgMCwgMCwgMCwgMjU2NDIsIDI1NjUyLCAKLSAgICAyNTY1NiwgMjU2NjMsIDI1NjY3LCAyNTY3MSwgMjU2NzUsIDI1NjgzLCAyNTY4NywgMjU2OTIsIDI1Njk3LCAyNTcwMiwgCi0gICAgMjU3MDYsIDI1NzExLCAyNTcxNiwgMjU3MTksIDI1NzIzLCAyNTcyNywgMjU3MzYsIDI1NzQwLCAyNTc0NCwgMjU3NTAsIAotICAgIDI1NzU0LCAyNTc1OCwgMjU3NjYsIDI1NzcwLCAyNTc3OCwgMjU3ODQsIDI1NzkwLCAyNTc5NiwgMjU4MDIsIDI1ODEyLCAKLSAgICAyNTgxOCwgMjU4MjIsIDI1ODMxLCAyNTgzNCwgMjU4NDAsIDI1ODQ0LCAyNTg1MCwgMjU4NTUsIDI1ODYxLCAyNTg2OSwgCi0gICAgMjU4NzUsIDI1ODgxLCAyNTg4OSwgMjU4OTUsIDI1ODk5LCAyNTkwMywgMjU5MTMsIDI1OTE5LCAyNTkyMywgMjU5MzMsIAotICAgIDI1OTM5LCAyNTk0MywgMjU5NDcsIDI1OTU0LCAyNTk2MSwgMjU5NjYsIDI1OTcxLCAyNTk4MCwgMjU5ODQsIDI1OTg4LCAKLSAgICAyNTk5MiwgMjYwMDAsIDI2MDA3LCAyNjAxMSwgMjYwMTUsIDI2MDE5LCAyNjAyMywgMjYwMjcsIDI2MDMxLCAyNjAzNSwgCi0gICAgMjYwMzksIDI2MDQzLCAyNjA0NywgMjYwNTEsIDI2MDU2LCAyNjA2MSwgMjYwNjYsIDI2MDcwLCAyNjA3NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYwNzgsIDI2MDgyLCAyNjA4NiwgMjYwOTAsIDI2MDk0LCAKLSAgICAyNjA5OSwgMjYxMDQsIDI2MTA5LCAyNjExNCwgMjYxMTgsIDI2MTIyLCAyNjEyNywgMjYxMzEsIDAsIDI2MTM1LCAyNjE0MCwgCi0gICAgMjYxNDUsIDI2MTQ5LCAyNjE1MywgMjYxNTgsIDI2MTYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNjE2OCwgMjYxNzIsIDI2MTc2LCAyNjE4MCwgMjYxODQsIDI2MTg5LCAyNjE5NCwgMjYxOTksIDI2MjA0LCAyNjIwOCwgCi0gICAgMjYyMTIsIDI2MjE3LCAyNjIyMSwgMjYyMjUsIDI2MjI5LCAyNjIzNCwgMjYyMzksIDI2MjQzLCAyNjI0NywgMjYyNTIsIAotICAgIDI2MjU3LCAyNjI2MiwgMjYyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MjczLCAyNjI3NywgMjYyODEsIAotICAgIDI2Mjg1LCAyNjI4OSwgMjYyOTQsIDI2Mjk5LCAyNjMwNCwgMjYzMDksIDI2MzEzLCAyNjMxNywgMjYzMjIsIDI2MzI2LCAKLSAgICAyNjMzMCwgMjYzMzQsIDI2MzM5LCAyNjM0NCwgMjYzNDgsIDI2MzUyLCAyNjM1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMjYzNjIsIDI2MzY2LCAyNjM3MCwgMjYzNzQsIDI2Mzc4LCAyNjM4MywgMjYzODgsIDI2MzkzLCAKLSAgICAyNjM5OCwgMjY0MDIsIDI2NDA2LCAyNjQxMSwgMjY0MTUsIDAsIDI2NDE5LCAyNjQyNCwgMjY0MjksIDAsIDI2NDMzLCAKLSAgICAyNjQzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0NDMsIDI2NDQ2LCAyNjQ1MCwgMjY0NTQsIAotICAgIDI2NDU4LCAyNjQ2MiwgMjY0NjYsIDI2NDcwLCAyNjQ3NCwgMjY0NzgsIDI2NDgyLCAyNjQ4NiwgMjY0OTAsIDI2NDk0LCAKLSAgICAyNjQ5OCwgMjY1MDIsIDI2NTA2LCAyNjUxMCwgMjY1MTMsIDI2NTE3LCAyNjUyMSwgMjY1MjUsIDI2NTI5LCAyNjUzMywgCi0gICAgMjY1MzcsIDI2NTQxLCAyNjU0NSwgMjY1NDksIDI2NTUzLCAyNjU1NywgMjY1NjEsIDI2NTY1LCAyNjU2OCwgMjY1NzEsIAotICAgIDI2NTc1LCAyNjU3OSwgMjY1ODUsIDI2NTkxLCAyNjU5NywgMjY2MDMsIDI2NjA5LCAyNjYxNSwgMjY2MjEsIDI2NjI3LCAKLSAgICAyNjYzMywgMjY2MzksIDI2NjQ1LCAyNjY1MSwgMjY2NTcsIDI2NjYzLCAyNjY3MiwgMjY2ODEsIDI2Njg3LCAyNjY5MywgCi0gICAgMjY2OTksIDI2NzA0LCAyNjcwOCwgMjY3MTMsIDI2NzE4LCAyNjcyMywgMjY3MjcsIDI2NzMyLCAyNjczNywgMjY3NDIsIAotICAgIDI2NzQ2LCAyNjc1MSwgMjY3NTUsIDI2NzYwLCAyNjc2NSwgMjY3NzAsIDI2Nzc1LCAyNjc3OSwgMjY3ODMsIDI2Nzg3LCAKLSAgICAyNjc5MSwgMjY3OTUsIDI2Nzk5LCAyNjgwMywgMjY4MDcsIDI2ODExLCAyNjgxNSwgMjY4MjEsIDI2ODI1LCAyNjgyOSwgCi0gICAgMjY4MzMsIDI2ODM3LCAyNjg0MSwgMjY4NDksIDI2ODU1LCAyNjg1OSwgMjY4NjUsIDI2ODY5LCAyNjg3NSwgMjY4NzksIDAsIAotICAgIDAsIDI2ODgzLCAyNjg4NywgMjY4OTAsIDI2ODkzLCAyNjg5NiwgMjY4OTksIDI2OTAyLCAyNjkwNSwgMjY5MDgsIDI2OTExLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjkxNCwgMjY5MjIsIDI2OTMwLCAyNjkzOCwgMjY5NDYsIDI2OTU0LCAyNjk2MiwgMjY5NzAsIAotICAgIDI2OTc4LCAyNjk4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMjY5OTQsIDI2OTk3LCAyNzAwMCwgMjcwMDMsIDI3MDA4LCAyNzAxMSwgCi0gICAgMjcwMTYsIDI3MDIzLCAyNzAzMSwgMjcwMzYsIDI3MDQzLCAyNzA0NiwgMjcwNTMsIDI3MDYwLCAyNzA2NywgMCwgMjcwNzEsIAotICAgIDI3MDc1LCAyNzA3OCwgMjcwODEsIDI3MDg0LCAyNzA4NywgMjcwOTAsIDI3MDkzLCAyNzA5NiwgMjcwOTksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDI3MTAyLCAyNzEwNSwgMjcxMDgsIDI3MTExLCAyNzExNCwgMjcxMTcsIDI3MTIxLCAyNzEyNSwgMjcxMjksIAotICAgIDI3MTMyLCAyNzEzNiwgMjcxNDAsIDI3MTQzLCAyNzE0NywgMjcxNTEsIDI3MTU0LCAyNzE1OCwgMjcxNjEsIDI3MTY1LCAKLSAgICAyNzE2OSwgMjcxNzMsIDI3MTc3LCAyNzE4MSwgMjcxODQsIDI3MTg3LCAyNzE5MSwgMjcxOTUsIDI3MTk4LCAyNzIwMiwgCi0gICAgMjcyMDYsIDI3MjEwLCAyNzIxNCwgMjcyMTgsIDI3MjIyLCAyNzIyNiwgMjcyMzAsIDI3MjM3LCAyNzI0MiwgMjcyNDcsIAotICAgIDI3MjUyLCAyNzI1NywgMjcyNjMsIDI3MjY5LCAyNzI3NSwgMjcyODEsIDI3Mjg2LCAyNzI5MiwgMjcyOTgsIDI3MzAzLCAKLSAgICAyNzMwOSwgMjczMTUsIDI3MzIxLCAyNzMyNywgMjczMzMsIDI3MzM4LCAyNzM0NCwgMjczNDksIDI3MzU1LCAyNzM2MSwgCi0gICAgMjczNjcsIDI3MzczLCAyNzM3OSwgMjczODQsIDI3Mzg5LCAyNzM5NSwgMjc0MDEsIDI3NDA2LCAyNzQxMiwgMjc0MTcsIAotICAgIDI3NDIzLCAyNzQyOCwgMjc0MzMsIDI3NDM5LCAyNzQ0NSwgMjc0NTEsIDI3NDU3LCAyNzQ2MywgMjc0NjksIDI3NDc1LCAKLSAgICAyNzQ4MSwgMjc0ODcsIDI3NDkzLCAyNzQ5OSwgMjc1MDUsIDI3NTEwLCAyNzUxNSwgMjc1MjAsIDI3NTI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyNzUzMiwgMjc1NDEsIDI3NTUwLCAyNzU1OCwgMjc1NjYsIDI3NTc2LCAyNzU4NCwgMjc1OTMsIAotICAgIDI3NjAwLCAyNzYwNywgMjc2MTQsIDI3NjIyLCAyNzYzMCwgMjc2MzgsIDI3NjQ2LCAyNzY1NCwgMjc2NjIsIDI3NjcwLCAKLSAgICAyNzY3OCwgMjc2ODUsIDI3NjkzLCAyNzcwMSwgMjc3MDksIDI3NzE3LCAyNzcyNSwgMjc3MzUsIDI3NzQ1LCAyNzc1NSwgCi0gICAgMjc3NjUsIDI3Nzc1LCAyNzc4NSwgMjc3OTUsIDI3ODA1LCAyNzgxNSwgMjc4MjUsIDI3ODM1LCAyNzg0NSwgMjc4NTUsIAotICAgIDI3ODY1LCAyNzg3MywgMjc4ODEsIDI3ODkxLCAyNzg5OSwgMCwgMCwgMCwgMCwgMCwgMjc5MDksIDI3OTEzLCAyNzkxNywgCi0gICAgMjc5MjEsIDI3OTI1LCAyNzkyOSwgMjc5MzMsIDI3OTM3LCAyNzk0MSwgMjc5NDUsIDI3OTQ5LCAyNzk1MywgMjc5NTcsIAotICAgIDI3OTYxLCAyNzk2NSwgMjc5NjksIDI3OTczLCAyNzk3NywgMjc5ODEsIDI3OTg1LCAyNzk4OSwgMjc5OTMsIDI3OTk3LCAKLSAgICAyODAwMSwgMjgwMDcsIDI4MDExLCAyODAxNywgMjgwMjEsIDI4MDI3LCAyODAzMSwgMjgwMzcsIDI4MDQxLCAyODA0NSwgCi0gICAgMjgwNDksIDI4MDUzLCAyODA1NywgMjgwNjEsIDI4MDY3LCAyODA3MywgMjgwNzksIDI4MDg1LCAyODA5MCwgMjgwOTYsIAotICAgIDI4MTAyLCAyODEwOCwgMjgxMTQsIDI4MTIwLCAyODEyNiwgMjgxMzMsIDI4MTM5LCAyODE0NCwgMjgxNDksIDI4MTUzLCAKLSAgICAyODE1NywgMjgxNjEsIDI4MTY1LCAyODE2OSwgMjgxNzMsIDI4MTc3LCAyODE4MywgMjgxODksIDI4MTk1LCAyODIwMCwgCi0gICAgMjgyMDcsIDI4MjEyLCAyODIxNywgMjgyMjMsIDI4MjI4LCAyODIzNSwgMjgyNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI4MjQ5LCAyODI1NSwgMjgyNTksIDI4MjY0LCAyODI2OSwgMjgyNzQsIDI4Mjc5LCAyODI4NCwgMjgyODksIAotICAgIDI4Mjk0LCAyODI5OSwgMjgzMDQsIDI4MzA5LCAyODMxNCwgMjgzMTksIDI4MzI0LCAyODMyOCwgMjgzMzIsIDI4MzM3LCAKLSAgICAyODM0MiwgMjgzNDcsIDI4MzUxLCAyODM1NSwgMjgzNTksIDI4MzY0LCAyODM2OSwgMjgzNzQsIDI4Mzc5LCAyODM4MywgMCwgCi0gICAgMCwgMCwgMjgzODcsIDI4MzkyLCAyODM5NywgMjg0MDIsIDI4NDA4LCAyODQxNCwgMjg0MjAsIDI4NDI2LCAyODQzMSwgCi0gICAgMjg0MzYsIDI4NDQyLCAyODQ0OCwgMCwgMCwgMCwgMCwgMjg0NTUsIDI4NDYwLCAyODQ2NiwgMjg0NzIsIDI4NDc4LCAKLSAgICAyODQ4MywgMjg0ODgsIDI4NDkzLCAyODQ5OCwgMjg1MDQsIDI4NTA5LCAyODUxNCwgMCwgMCwgMCwgMCwgMjg1MTksIDAsIDAsIAotICAgIDAsIDI4NTI0LCAyODUyOSwgMjg1MzQsIDI4NTM5LCAyODU0MywgMjg1NDcsIDI4NTUxLCAyODU1NSwgMjg1NTksIDI4NTYzLCAKLSAgICAyODU2NywgMjg1NzEsIDI4NTc1LCAyODU4MCwgMjg1ODYsIDI4NTkyLCAyODU5OCwgMjg2MDMsIDI4NjA4LCAyODYxNCwgCi0gICAgMjg2MjAsIDI4NjI2LCAyODYzMSwgMjg2MzcsIDI4NjQyLCAyODY0OCwgMjg2NTQsIDI4NjU5LCAyODY2NSwgMjg2NzEsIAotICAgIDI4Njc3LCAyODY4MiwgMjg2ODcsIDI4NjkyLCAyODY5OCwgMjg3MDQsIDI4NzA5LCAyODcxNSwgMjg3MjAsIDI4NzI2LCAKLSAgICAyODczMSwgMjg3MzcsIDAsIDAsIDI4NzQzLCAyODc0OSwgMjg3NTUsIDI4NzYxLCAyODc2NywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjg3NzMsIDI4NzgwLCAyODc4NywgMjg3OTMsIDI4ODAwLCAyODgwNywgMjg4MTMsIDI4ODIwLCAKLSAgICAyODgyNywgMjg4MzQsIDI4ODQwLCAyODg0NiwgMjg4NTMsIDI4ODU5LCAyODg2NSwgMjg4NzIsIDI4ODc5LCAyODg4NSwgCi0gICAgMjg4OTIsIDI4ODk5LCAyODkwNSwgMjg5MTEsIDI4OTE4LCAyODkyNCwgMjg5MzAsIDI4OTM3LCAyODk0MywgMjg5NTAsIAotICAgIDI4OTU3LCAyODk2NCwgMjg5NzEsIDI4OTc4LCAyODk4NSwgMjg5OTEsIDI4OTk4LCAyOTAwNSwgMjkwMTEsIDI5MDE4LCAKLSAgICAyOTAyNSwgMjkwMzIsIDI5MDM5LCAyOTA0NiwgMjkwNTMsIDI5MDYwLCAwLCAwLCAwLCAwLCAyOTA2NywgMjkwNzUsIAotICAgIDI5MDgyLCAyOTA4OSwgMjkwOTUsIDI5MTAyLCAyOTEwOCwgMjkxMTUsIDI5MTIxLCAyOTEyOCwgMjkxMzUsIDI5MTQyLCAKLSAgICAyOTE0OSwgMjkxNTYsIDI5MTYzLCAyOTE3MCwgMjkxNzcsIDI5MTg0LCAyOTE5MSwgMjkxOTgsIDI5MjA1LCAyOTIxMSwgCi0gICAgMjkyMTgsIDI5MjI1LCAyOTIzMiwgMjkyMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MjQ0LCAyOTI1MCwgMjkyNTUsIDI5MjYwLCAKLSAgICAyOTI2NSwgMjkyNzAsIDI5Mjc1LCAyOTI4MCwgMjkyODUsIDI5MjkwLCAyOTI5NSwgMCwgMCwgMCwgMjkzMDEsIDI5MzA3LCAKLSAgICAyOTMxMywgMjkzMTcsIDI5MzIzLCAyOTMyOSwgMjkzMzUsIDI5MzQxLCAyOTM0NywgMjkzNTMsIDI5MzU5LCAyOTM2NSwgCi0gICAgMjkzNzEsIDI5Mzc3LCAyOTM4MywgMjkzODksIDI5Mzk1LCAyOTQwMSwgMjk0MDcsIDI5NDExLCAyOTQxNywgMjk0MjMsIAotICAgIDI5NDI5LCAyOTQzNSwgMjk0NDEsIDI5NDQ3LCAyOTQ1MywgMjk0NTksIDI5NDY1LCAyOTQ3MSwgMjk0NzcsIDI5NDgzLCAKLSAgICAyOTQ4OSwgMjk0OTUsIDI5NTAxLCAyOTUwNSwgMjk1MTAsIDI5NTE1LCAyOTUyMCwgMjk1MjQsIDI5NTI5LCAyOTUzMywgCi0gICAgMjk1MzgsIDI5NTQzLCAyOTU0OCwgMjk1NTIsIDI5NTU3LCAyOTU2MiwgMjk1NjcsIDI5NTcyLCAyOTU3NywgMjk1ODEsIAotICAgIDI5NTg1LCAyOTU5MCwgMjk1OTUsIDI5NTk5LCAyOTYwMywgMjk2MDcsIDI5NjEyLCAyOTYxNywgMjk2MjIsIDI5NjI3LCAwLCAKLSAgICAwLCAyOTYzMywgMjk2MzcsIDI5NjQ0LCAyOTY0OSwgMjk2NTUsIDI5NjYxLCAyOTY2NiwgMjk2NzIsIDI5Njc4LCAyOTY4MywgCi0gICAgMjk2ODksIDI5Njk1LCAyOTcwMSwgMjk3MDYsIDI5NzEyLCAyOTcxNywgMjk3MjIsIDI5NzI4LCAyOTczMywgMjk3MzksIAotICAgIDI5NzQ0LCAyOTc1MCwgMjk3NTYsIDI5NzYyLCAyOTc2OCwgMjk3NzIsIDI5Nzc3LCAyOTc4MiwgMjk3ODgsIDI5Nzk0LCAKLSAgICAyOTc5OSwgMjk4MDUsIDI5ODExLCAyOTgxNSwgMjk4MjAsIDI5ODI1LCAyOTgyOSwgMjk4MzQsIDI5ODM5LCAyOTg0NCwgCi0gICAgMjk4NDksIDI5ODU1LCAyOTg2MSwgMjk4NjYsIDI5ODcxLCAyOTg3NiwgMjk4ODAsIDI5ODg1LCAyOTg4OSwgMjk4OTQsIAotICAgIDI5ODk4LCAyOTkwMywgMjk5MDgsIDI5OTEzLCAyOTkxOCwgMjk5MjQsIDI5OTMwLCAyOTkzNywgMjk5NDcsIDI5OTU2LCAKLSAgICAyOTk2MywgMjk5NjksIDI5OTc5LCAyOTk4NCwgMjk5OTAsIDAsIDI5OTk1LCAzMDAwMCwgMzAwMDUsIDMwMDEzLCAzMDAxOSwgCi0gICAgMzAwMjcsIDMwMDMyLCAzMDAzOCwgMzAwNDQsIDMwMDUwLCAzMDA1NSwgMzAwNjEsIDMwMDY2LCAzMDA3MywgMzAwNzksIAotICAgIDMwMDg0LCAzMDA5MCwgMzAwOTYsIDMwMTAyLCAzMDEwOSwgMzAxMTYsIDMwMTIzLCAzMDEyOCwgMzAxMzMsIDMwMTQwLCAKLSAgICAzMDE0NywgMzAxNTQsIDMwMTYxLCAzMDE2OCwgMCwgMCwgMzAxNzUsIDMwMTgyLCAzMDE4OSwgMzAxOTUsIDMwMjAxLCAKLSAgICAzMDIwNywgMzAyMTMsIDMwMjE5LCAzMDIyNSwgMzAyMzEsIDMwMjM3LCAwLCAwLCAwLCAwLCAwLCAwLCAzMDI0MywgMzAyNDksIAotICAgIDMwMjU0LCAzMDI1OSwgMzAyNjQsIDMwMjY5LCAzMDI3NCwgMzAyNzksIDMwMjg0LCAzMDI4OSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzAyOTQsIDMwMjk5LCAzMDMwNCwgMzAzMDksIDMwMzE0LCAzMDMxOSwgMzAzMjQsIDMwMzMzLCAzMDM0MCwgMzAzNDUsIAotICAgIDMwMzUwLCAzMDM1NSwgMzAzNjAsIDMwMzY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODI4OCwgMTgyOTEsIDE4Mjk1LCAxODI5OSwgMTgzMDMsIAorICAgIDE4MzA3LCAxODMxMSwgMTgzMTUsIDE4MzE5LCAxODMyMywgMTgzMjcsIDE4MzMxLCAxODMzNSwgMTgzMzksIDE4MzQzLCAKKyAgICAxODM0NywgMTgzNTEsIDE4MzU1LCAxODM1OSwgMTgzNjMsIDE4MzY3LCAxODM3MCwgMTgzNzMsIDE4Mzc3LCAxODM4MSwgCisgICAgMTgzODUsIDE4Mzg4LCAxODM5MSwgMTgzOTQsIDE4Mzk4LCAxODQwMiwgMTg0MDUsIDE4NDA4LCAxODQxMiwgMTg0MTUsIAorICAgIDE4NDIwLCAxODQyMywgMTg0MjcsIDE4NDMwLCAxODQzNCwgMTg0MzcsIDE4NDQyLCAxODQ0NSwgMTg0NDksIDE4NDU2LCAKKyAgICAxODQ2MSwgMTg0NjUsIDE4NDcwLCAxODQ3NCwgMTg0NzksIDE4NDgzLCAxODQ4OCwgMTg0OTUsIDE4NTAxLCAxODUwNiwgCisgICAgMTg1MTAsIDE4NTE0LCAxODUxOCwgMTg1MjIsIDE4NTI2LCAxODUzMSwgMTg1MzYsIDE4NTQyLCAxODU0NywgMTg1NTIsIAorICAgIDE4NTU2LCAxODU1OSwgMTg1NjIsIDE4NTY1LCAxODU2OCwgMTg1NzEsIDE4NTc0LCAxODU3NywgMTg1ODAsIDE4NTgzLCAKKyAgICAxODU4OSwgMTg1OTMsIDE4NTk3LCAxODYwMSwgMTg2MDUsIDE4NjA5LCAxODYxMywgMTg2MTcsIDE4NjIxLCAxODYyNiwgCisgICAgMTg2MzAsIDE4NjM1LCAxODY0MCwgMTg2NDYsIDE4NjUxLCAxODY1NywgMTg2NjMsIDE4NjY5LCAxODY3NSwgMTg2ODEsIAorICAgIDE4Njg4LCAxODY5NSwgMTg3MDMsIDE4NzExLCAxODcyMCwgMTg3MjksIDE4NzQwLCAxODc1MCwgMTg3NjAsIDE4NzcxLCAKKyAgICAxODc4MiwgMTg3OTIsIDE4ODAyLCAxODgxMiwgMTg4MjIsIDE4ODMyLCAxODg0MiwgMTg4NTIsIDE4ODYyLCAxODg3MCwgCisgICAgMTg4NzcsIDE4ODgzLCAxODg5MCwgMTg4OTUsIDE4OTAxLCAxODkwNywgMTg5MTMsIDE4OTE5LCAxODkyNSwgMTg5MzEsIAorICAgIDE4OTM2LCAxODk0MiwgMTg5NDgsIDE4OTU0LCAxODk2MCwgMTg5NjUsIDE4OTczLCAxODk4MCwgMTg5ODYsIDE4OTkzLCAKKyAgICAxOTAwMSwgMTkwMDcsIDE5MDEzLCAxOTAxOSwgMTkwMjUsIDE5MDMzLCAxOTA0MSwgMTkwNTEsIDE5MDU5LCAxOTA2NywgCisgICAgMTkwNzMsIDE5MDc4LCAxOTA4MywgMTkwODgsIDE5MDkzLCAxOTA5OCwgMTkxMDMsIDE5MTA4LCAxOTExMywgMTkxMTgsIAorICAgIDE5MTI0LCAxOTEzMCwgMTkxMzYsIDE5MTQzLCAxOTE0OCwgMTkxNTQsIDE5MTU5LCAxOTE2NCwgMTkxNjksIDE5MTc0LCAKKyAgICAxOTE3OSwgMTkxODQsIDE5MTg5LCAxOTE5NCwgMTkxOTksIDE5MjA0LCAxOTIwOSwgMTkyMTQsIDE5MjE5LCAxOTIyNCwgCisgICAgMTkyMjksIDE5MjM0LCAxOTIzOSwgMTkyNDQsIDE5MjQ5LCAxOTI1NCwgMTkyNTksIDE5MjY0LCAxOTI2OSwgMTkyNzQsIAorICAgIDE5Mjc5LCAxOTI4NCwgMTkyODksIDE5Mjk0LCAxOTI5OSwgMTkzMDQsIDE5MzA5LCAxOTMxNCwgMTkzMTksIDE5MzI0LCAKKyAgICAxOTMyOSwgMTkzMzQsIDE5MzM5LCAwLCAxOTM0NCwgMCwgMCwgMCwgMCwgMCwgMTkzNDksIDAsIDAsIDE5MzU0LCAxOTM1OCwgCisgICAgMTkzNjIsIDE5MzY2LCAxOTM3MCwgMTkzNzQsIDE5Mzc4LCAxOTM4MiwgMTkzODYsIDE5MzkwLCAxOTM5NCwgMTkzOTgsIAorICAgIDE5NDAyLCAxOTQwNiwgMTk0MTAsIDE5NDE0LCAxOTQxOCwgMTk0MjIsIDE5NDI2LCAxOTQzMCwgMTk0MzQsIDE5NDM4LCAKKyAgICAxOTQ0MiwgMTk0NDYsIDE5NDUwLCAxOTQ1NCwgMTk0NTgsIDE5NDYyLCAxOTQ2NiwgMTk0NzAsIDE5NDc0LCAxOTQ3OCwgCisgICAgMTk0ODIsIDE5NDg2LCAxOTQ5MCwgMTk0OTQsIDE5NDk4LCAxOTUwMiwgMTk1MDYsIDE5NTEwLCAxOTUxNCwgMTk1MTgsIAorICAgIDE5NTI0LCAxOTUyOCwgMTk1MzMsIDE5NTM4LCAxOTU0MiwgMTk1NDcsIDE5NTUyLCAxOTU1NiwgMTk1NjAsIDE5NTY0LCAKKyAgICAxOTU2OCwgMTk1NzIsIDE5NTc2LCAxOTU4MCwgMTk1ODQsIDE5NTg4LCAxOTU5MiwgMTk1OTYsIDE5NjAwLCAxOTYwNCwgCisgICAgMTk2MDgsIDE5NjEyLCAxOTYxNiwgMTk2MjAsIDE5NjI0LCAxOTYyOCwgMTk2MzIsIDE5NjM2LCAxOTY0MCwgMTk2NDQsIAorICAgIDE5NjQ4LCAxOTY1MiwgMTk2NTYsIDE5NjYwLCAxOTY2NCwgMTk2NjgsIDE5NjcyLCAxOTY3NiwgMTk2ODAsIDE5Njg0LCAKKyAgICAxOTY4OCwgMTk2OTIsIDE5Njk2LCAxOTcwMCwgMTk3MDQsIDE5NzA4LCAxOTcxMiwgMTk3MTYsIDE5NzIwLCAxOTcyNCwgCisgICAgMTk3MjgsIDE5NzMyLCAxOTczNiwgMTk3NDAsIDE5NzQ0LCAxOTc0OCwgMTk3NTIsIDE5NzU2LCAxOTc2MCwgMTk3NjQsIAorICAgIDE5NzY4LCAxOTc3MiwgMTk3NzYsIDE5NzgwLCAxOTc4NCwgMTk3ODgsIDE5NzkyLCAxOTc5NiwgMTk4MDAsIDE5ODA0LCAKKyAgICAxOTgwOCwgMTk4MTIsIDE5ODE2LCAxOTgyMCwgMTk4MjQsIDE5ODI4LCAxOTgzMiwgMTk4MzYsIDE5ODQwLCAxOTg0NCwgCisgICAgMTk4NDgsIDE5ODUyLCAxOTg1NiwgMTk4NjAsIDE5ODY0LCAxOTg2OCwgMTk4NzIsIDE5ODc2LCAxOTg4MCwgMTk4ODQsIAorICAgIDE5ODg4LCAxOTg5MiwgMTk4OTYsIDE5OTAwLCAxOTkwNCwgMTk5MDgsIDE5OTEyLCAxOTkxNiwgMTk5MjAsIDE5OTI0LCAKKyAgICAxOTkyOCwgMTk5MzIsIDE5OTM2LCAxOTk0MCwgMTk5NDMsIDE5OTQ3LCAxOTk1MCwgMTk5NTQsIDE5OTU4LCAxOTk2MSwgCisgICAgMTk5NjUsIDE5OTY5LCAxOTk3MiwgMTk5NzYsIDE5OTgwLCAxOTk4NCwgMTk5ODgsIDE5OTkxLCAxOTk5NSwgMTk5OTksIAorICAgIDIwMDAzLCAyMDAwNywgMjAwMTEsIDIwMDE1LCAyMDAxOCwgMjAwMjIsIDIwMDI2LCAyMDAzMCwgMjAwMzQsIDIwMDM4LCAKKyAgICAyMDA0MiwgMjAwNDYsIDIwMDUwLCAyMDA1NCwgMjAwNTgsIDIwMDYyLCAyMDA2NiwgMjAwNzAsIDIwMDc0LCAyMDA3OCwgCisgICAgMjAwODIsIDIwMDg2LCAyMDA5MCwgMjAwOTQsIDIwMDk4LCAyMDEwMiwgMjAxMDYsIDIwMTEwLCAyMDExNCwgMjAxMTgsIAorICAgIDIwMTIyLCAyMDEyNiwgMjAxMzAsIDIwMTM0LCAyMDEzOCwgMjAxNDIsIDIwMTQ2LCAyMDE1MCwgMjAxNTQsIDIwMTU4LCAKKyAgICAyMDE2MiwgMjAxNjYsIDIwMTcwLCAyMDE3NCwgMjAxNzgsIDIwMTgyLCAyMDE4NiwgMjAxOTAsIDIwMTk0LCAyMDE5OCwgCisgICAgMjAyMDIsIDIwMjA2LCAyMDIxMCwgMjAyMTQsIDIwMjE4LCAyMDIyMiwgMjAyMjYsIDIwMjMwLCAyMDIzNCwgMjAyMzgsIAorICAgIDIwMjQyLCAyMDI0NiwgMjAyNTAsIDIwMjU0LCAyMDI1OCwgMjAyNjIsIDIwMjY2LCAyMDI3MCwgMjAyNzQsIDIwMjc4LCAKKyAgICAyMDI4MiwgMjAyODYsIDIwMjkwLCAyMDI5NCwgMjAyOTgsIDIwMzAyLCAyMDMwNiwgMjAzMTAsIDIwMzE0LCAyMDMxOCwgCisgICAgMjAzMjIsIDIwMzI2LCAyMDMzMCwgMjAzMzQsIDIwMzM4LCAyMDM0MiwgMjAzNDYsIDIwMzUwLCAyMDM1NCwgMjAzNTgsIAorICAgIDIwMzYyLCAyMDM2NiwgMjAzNzAsIDIwMzc0LCAyMDM3OCwgMjAzODIsIDIwMzg2LCAyMDM5MCwgMjAzOTQsIDIwMzk4LCAKKyAgICAyMDQwMiwgMjA0MDYsIDIwNDEwLCAyMDQxNCwgMjA0MTgsIDIwNDIyLCAyMDQyNiwgMjA0MzAsIDIwNDM0LCAyMDQzOCwgCisgICAgMjA0NDIsIDIwNDQ2LCAyMDQ1MCwgMjA0NTQsIDIwNDU4LCAyMDQ2MiwgMjA0NjYsIDIwNDcwLCAyMDQ3NCwgMjA0NzgsIAorICAgIDIwNDgyLCAyMDQ4NiwgMjA0OTAsIDIwNDk0LCAyMDQ5OCwgMjA1MDIsIDIwNTA2LCAyMDUxMCwgMjA1MTQsIDIwNTE4LCAKKyAgICAyMDUyMiwgMjA1MjYsIDIwNTMwLCAyMDUzNCwgMjA1MzgsIDIwNTQyLCAyMDU0NiwgMjA1NTAsIDIwNTU0LCAyMDU1OCwgCisgICAgMjA1NjIsIDIwNTY2LCAyMDU3MCwgMjA1NzMsIDIwNTc3LCAyMDU4MSwgMjA1ODUsIDIwNTg5LCAyMDU5MywgMjA1OTcsIAorICAgIDIwNjAxLCAyMDYwNSwgMjA2MDksIDIwNjEzLCAyMDYxNywgMjA2MjEsIDIwNjI1LCAyMDYyOSwgMjA2MzMsIDIwNjM3LCAKKyAgICAyMDY0MSwgMjA2NDUsIDIwNjQ5LCAyMDY1MywgMjA2NTcsIDIwNjYxLCAyMDY2NSwgMjA2NjgsIDIwNjcyLCAyMDY3NiwgCisgICAgMjA2ODAsIDIwNjg0LCAyMDY4OCwgMjA2OTIsIDIwNjk2LCAyMDcwMCwgMjA3MDQsIDIwNzA4LCAyMDcxMiwgMjA3MTYsIAorICAgIDIwNzIwLCAyMDcyNCwgMjA3MjgsIDIwNzMxLCAyMDczNSwgMjA3MzksIDIwNzQzLCAyMDc0NywgMjA3NTEsIDIwNzU1LCAKKyAgICAyMDc1OSwgMjA3NjIsIDIwNzY2LCAyMDc3MCwgMjA3NzQsIDIwNzc4LCAyMDc4MiwgMjA3ODYsIDIwNzkwLCAyMDc5NCwgCisgICAgMjA3OTgsIDIwODAyLCAyMDgwNiwgMjA4MTAsIDIwODE0LCAyMDgxOCwgMjA4MjIsIDIwODI2LCAyMDgzMCwgMjA4MzQsIAorICAgIDIwODM4LCAyMDg0MiwgMjA4NDYsIDIwODUwLCAyMDg1NCwgMCwgMjA4NTgsIDIwODYyLCAyMDg2NiwgMjA4NzAsIDAsIDAsIAorICAgIDIwODc0LCAyMDg3OCwgMjA4ODIsIDIwODg2LCAyMDg5MCwgMjA4OTQsIDIwODk4LCAwLCAyMDkwMiwgMCwgMjA5MDYsIAorICAgIDIwOTEwLCAyMDkxNCwgMjA5MTgsIDAsIDAsIDIwOTIyLCAyMDkyNiwgMjA5MzAsIDIwOTM0LCAyMDkzOCwgMjA5NDIsIAorICAgIDIwOTQ2LCAyMDk1MCwgMjA5NTQsIDIwOTU4LCAyMDk2MiwgMjA5NjYsIDIwOTcwLCAyMDk3NCwgMjA5NzgsIDIwOTgyLCAKKyAgICAyMDk4NiwgMjA5OTAsIDIwOTk0LCAyMDk5OCwgMjEwMDIsIDIxMDA2LCAyMTAxMCwgMjEwMTMsIDIxMDE3LCAyMTAyMSwgCisgICAgMjEwMjUsIDIxMDI5LCAyMTAzMywgMjEwMzcsIDIxMDQxLCAyMTA0NSwgMjEwNDksIDIxMDUzLCAyMTA1NywgMjEwNjEsIAorICAgIDIxMDY1LCAyMTA2OSwgMjEwNzMsIDIxMDc3LCAyMTA4MSwgMCwgMjEwODUsIDIxMDg5LCAyMTA5MywgMjEwOTcsIDAsIDAsIAorICAgIDIxMTAxLCAyMTEwNCwgMjExMDgsIDIxMTEyLCAyMTExNiwgMjExMjAsIDIxMTI0LCAyMTEyOCwgMjExMzIsIDIxMTM2LCAKKyAgICAyMTE0MCwgMjExNDQsIDIxMTQ4LCAyMTE1MiwgMjExNTYsIDIxMTYwLCAyMTE2NCwgMjExNjksIDIxMTc0LCAyMTE3OSwgCisgICAgMjExODUsIDIxMTkxLCAyMTE5NiwgMjEyMDEsIDIxMjA3LCAyMTIxMCwgMjEyMTQsIDIxMjE4LCAyMTIyMiwgMjEyMjYsIAorICAgIDIxMjMwLCAyMTIzNCwgMjEyMzgsIDAsIDIxMjQyLCAyMTI0NiwgMjEyNTAsIDIxMjU0LCAwLCAwLCAyMTI1OCwgMjEyNjIsIAorICAgIDIxMjY2LCAyMTI3MCwgMjEyNzQsIDIxMjc4LCAyMTI4MiwgMCwgMjEyODYsIDAsIDIxMjkwLCAyMTI5NCwgMjEyOTgsIAorICAgIDIxMzAyLCAwLCAwLCAyMTMwNiwgMjEzMTAsIDIxMzE0LCAyMTMxOCwgMjEzMjIsIDIxMzI2LCAyMTMzMCwgMjEzMzQsIAorICAgIDIxMzM4LCAyMTM0MywgMjEzNDgsIDIxMzUzLCAyMTM1OSwgMjEzNjUsIDIxMzcwLCAwLCAyMTM3NSwgMjEzNzksIDIxMzgzLCAKKyAgICAyMTM4NywgMjEzOTEsIDIxMzk1LCAyMTM5OSwgMjE0MDMsIDIxNDA3LCAyMTQxMSwgMjE0MTUsIDIxNDE5LCAyMTQyMywgCisgICAgMjE0MjcsIDIxNDMxLCAyMTQzNSwgMjE0MzksIDIxNDQyLCAyMTQ0NiwgMjE0NTAsIDIxNDU0LCAyMTQ1OCwgMjE0NjIsIAorICAgIDIxNDY2LCAyMTQ3MCwgMjE0NzQsIDIxNDc4LCAyMTQ4MiwgMjE0ODYsIDIxNDkwLCAyMTQ5NCwgMjE0OTgsIDIxNTAyLCAKKyAgICAyMTUwNiwgMjE1MTAsIDIxNTE0LCAyMTUxOCwgMjE1MjIsIDIxNTI2LCAyMTUzMCwgMjE1MzQsIDIxNTM4LCAyMTU0MiwgCisgICAgMjE1NDYsIDIxNTUwLCAyMTU1NCwgMjE1NTgsIDIxNTYyLCAyMTU2NiwgMjE1NzAsIDIxNTc0LCAyMTU3OCwgMjE1ODIsIAorICAgIDIxNTg2LCAyMTU5MCwgMjE1OTQsIDIxNTk4LCAwLCAyMTYwMiwgMjE2MDYsIDIxNjEwLCAyMTYxNCwgMCwgMCwgMjE2MTgsIAorICAgIDIxNjIyLCAyMTYyNiwgMjE2MzAsIDIxNjM0LCAyMTYzOCwgMjE2NDIsIDIxNjQ2LCAyMTY1MCwgMjE2NTQsIDIxNjU4LCAKKyAgICAyMTY2MiwgMjE2NjYsIDIxNjcwLCAyMTY3NCwgMjE2NzgsIDIxNjgyLCAyMTY4NiwgMjE2OTAsIDIxNjk0LCAyMTY5OCwgCisgICAgMjE3MDIsIDIxNzA2LCAyMTcxMCwgMjE3MTQsIDIxNzE4LCAyMTcyMiwgMjE3MjYsIDIxNzMwLCAyMTczNCwgMjE3MzgsIAorICAgIDIxNzQyLCAyMTc0NiwgMjE3NTAsIDIxNzU0LCAyMTc1OCwgMjE3NjIsIDIxNzY2LCAyMTc3MCwgMjE3NzQsIDIxNzc4LCAKKyAgICAyMTc4MiwgMjE3ODYsIDIxNzkwLCAyMTc5NCwgMjE3OTgsIDIxODAyLCAyMTgwNiwgMjE4MTAsIDIxODE0LCAyMTgxOCwgCisgICAgMjE4MjIsIDIxODI2LCAyMTgzMCwgMjE4MzQsIDIxODM4LCAyMTg0MiwgMjE4NDUsIDIxODQ5LCAyMTg1MywgMjE4NTcsIAorICAgIDIxODYxLCAyMTg2NSwgMjE4NjksIDIxODczLCAyMTg3NywgMjE4ODEsIDAsIDAsIDIxODg1LCAyMTg5NCwgMjE5MDAsIAorICAgIDIxOTA1LCAyMTkwOSwgMjE5MTIsIDIxOTE3LCAyMTkyMCwgMjE5MjMsIDIxOTI2LCAyMTkzMSwgMjE5MzUsIDIxOTQwLCAKKyAgICAyMTk0MywgMjE5NDYsIDIxOTQ5LCAyMTk1MiwgMjE5NTUsIDIxOTU4LCAyMTk2MSwgMjE5NjQsIDIxOTY3LCAyMTk3MSwgCisgICAgMjE5NzUsIDIxOTc5LCAyMTk4MywgMjE5ODcsIDIxOTkxLCAyMTk5NSwgMjE5OTksIDIyMDAzLCAyMjAwNywgMCwgMCwgMCwgCisgICAgMjIwMTMsIDIyMDE5LCAyMjAyMywgMjIwMjcsIDIyMDMxLCAyMjAzNywgMjIwNDEsIDIyMDQ1LCAyMjA0OSwgMjIwNTUsIAorICAgIDIyMDU5LCAyMjA2MywgMjIwNjcsIDIyMDczLCAyMjA3NywgMjIwODEsIDIyMDg1LCAyMjA5MSwgMjIwOTcsIDIyMTAzLCAKKyAgICAyMjExMSwgMjIxMTcsIDIyMTIzLCAyMjEyOSwgMjIxMzUsIDIyMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjE0NywgMjIxNTAsIAorICAgIDIyMTUzLCAyMjE1NiwgMjIxNTksIDIyMTYyLCAyMjE2NiwgMjIxNzAsIDIyMTczLCAyMjE3NywgMjIxODEsIDIyMTg1LCAKKyAgICAyMjE4OSwgMjIxOTMsIDIyMTk2LCAyMjIwMCwgMjIyMDQsIDIyMjA4LCAyMjIxMiwgMjIyMTYsIDIyMjIwLCAyMjIyNCwgCisgICAgMjIyMjgsIDIyMjMyLCAyMjIzNiwgMjIyNDAsIDIyMjQzLCAyMjI0NywgMjIyNTEsIDIyMjU1LCAyMjI1OSwgMjIyNjIsIAorICAgIDIyMjY2LCAyMjI3MCwgMjIyNzQsIDIyMjc4LCAyMjI4MiwgMjIyODYsIDIyMjkwLCAyMjI5NCwgMjIyOTgsIDIyMzAyLCAKKyAgICAyMjMwNiwgMjIzMTAsIDIyMzE0LCAyMjMxNywgMjIzMjEsIDIyMzI1LCAyMjMyOSwgMjIzMzMsIDIyMzM3LCAyMjM0MSwgCisgICAgMjIzNDUsIDIyMzQ5LCAyMjM1MywgMjIzNTcsIDIyMzYxLCAyMjM2NSwgMjIzNjksIDIyMzczLCAyMjM3NywgMjIzODEsIAorICAgIDIyMzg1LCAyMjM4OSwgMjIzOTMsIDIyMzk3LCAyMjQwMSwgMjI0MDUsIDIyNDA5LCAyMjQxMywgMjI0MTcsIDIyNDIxLCAKKyAgICAyMjQyNSwgMjI0MjksIDIyNDMzLCAyMjQzNywgMjI0NDEsIDIyNDQ1LCAyMjQ0OSwgMjI0NTMsIDIyNDU2LCAyMjQ2MCwgCisgICAgMjI0NjQsIDIyNDY4LCAyMjQ3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI0NzYsIDIyNDgwLCAKKyAgICAyMjQ4MywgMjI0ODcsIDIyNDkwLCAyMjQ5NCwgMjI0OTcsIDIyNTAxLCAyMjUwNywgMjI1MTIsIDIyNTE2LCAyMjUxOSwgCisgICAgMjI1MjMsIDIyNTI3LCAyMjUzMiwgMjI1MzYsIDIyNTQxLCAyMjU0NSwgMjI1NTAsIDIyNTU0LCAyMjU1OSwgMjI1NjMsIAorICAgIDIyNTY4LCAyMjU3NCwgMjI1NzgsIDIyNTgzLCAyMjU4NywgMjI1OTIsIDIyNTk4LCAyMjYwMiwgMjI2MDgsIDIyNjE0LCAKKyAgICAyMjYxOCwgMjI2MjMsIDIyNjMxLCAyMjYzOSwgMjI2NDYsIDIyNjUxLCAyMjY1NiwgMjI2NjUsIDIyNjcyLCAyMjY3OSwgCisgICAgMjI2ODQsIDIyNjkwLCAyMjY5NCwgMjI2OTgsIDIyNzAyLCAyMjcwNiwgMjI3MTAsIDIyNzE0LCAyMjcxOCwgMjI3MjIsIAorICAgIDIyNzI2LCAyMjczMCwgMjI3MzYsIDIyNzQxLCAyMjc0NiwgMjI3NDksIDIyNzUzLCAyMjc1NywgMjI3NjIsIDIyNzY2LCAKKyAgICAyMjc3MSwgMjI3NzUsIDIyNzgwLCAyMjc4NCwgMjI3ODksIDIyNzkzLCAyMjc5OCwgMjI4MDIsIDIyODA3LCAyMjgxMSwgCisgICAgMjI4MTYsIDIyODIyLCAyMjgyNiwgMjI4MzEsIDIyODM2LCAyMjg0MCwgMjI4NDQsIDIyODQ4LCAyMjg1MiwgMjI4NTUsIAorICAgIDIyODU5LCAyMjg2NSwgMjI4NzAsIDIyODc1LCAyMjg3OSwgMjI4ODMsIDIyODg3LCAyMjg5MiwgMjI4OTYsIDIyOTAxLCAKKyAgICAyMjkwNSwgMjI5MTAsIDIyOTEzLCAyMjkxNywgMjI5MjEsIDIyOTI2LCAyMjkzMCwgMjI5MzUsIDIyOTM5LCAyMjk0NCwgCisgICAgMjI5NTAsIDIyOTU0LCAyMjk1OCwgMjI5NjIsIDIyOTY2LCAyMjk3MCwgMjI5NzQsIDIyOTc4LCAyMjk4MiwgMjI5ODYsIAorICAgIDIyOTkwLCAyMjk5NCwgMjMwMDAsIDIzMDAzLCAyMzAwNywgMjMwMTEsIDIzMDE2LCAyMzAyMCwgMjMwMjUsIDIzMDI5LCAKKyAgICAyMzAzNCwgMjMwMzgsIDIzMDQzLCAyMzA0NywgMjMwNTIsIDIzMDU2LCAyMzA2MSwgMjMwNjUsIDIzMDcwLCAyMzA3NiwgCisgICAgMjMwODAsIDIzMDg0LCAyMzA5MCwgMjMwOTYsIDIzMTAyLCAyMzEwOCwgMjMxMTIsIDIzMTE2LCAyMzEyMCwgMjMxMjQsIAorICAgIDIzMTI4LCAyMzEzMiwgMjMxMzgsIDIzMTQyLCAyMzE0NiwgMjMxNTAsIDIzMTU1LCAyMzE1OSwgMjMxNjQsIDIzMTY4LCAKKyAgICAyMzE3MywgMjMxNzcsIDIzMTgyLCAyMzE4NiwgMjMxOTEsIDIzMTk1LCAyMzIwMCwgMjMyMDQsIDIzMjA5LCAyMzIxNSwgCisgICAgMjMyMTksIDIzMjI1LCAyMzIyOSwgMjMyMzMsIDIzMjM3LCAyMzI0MSwgMjMyNDUsIDIzMjQ5LCAyMzI1NSwgMjMyNTgsIAorICAgIDIzMjYyLCAyMzI2NiwgMjMyNzEsIDIzMjc1LCAyMzI4MCwgMjMyODQsIDIzMjg5LCAyMzI5MywgMjMyOTgsIDIzMzAyLCAKKyAgICAyMzMwNywgMjMzMTEsIDIzMzE2LCAyMzMyMCwgMjMzMjUsIDIzMzMxLCAyMzMzNCwgMjMzMzgsIDIzMzQyLCAyMzM0NywgCisgICAgMjMzNTIsIDIzMzU2LCAyMzM2MCwgMjMzNjQsIDIzMzY4LCAyMzM3MiwgMjMzNzYsIDIzMzgyLCAyMzM4NSwgMjMzODksIAorICAgIDIzMzkzLCAyMzM5OCwgMjM0MDIsIDIzNDA3LCAyMzQxMSwgMjM0MTYsIDIzNDIyLCAyMzQyNiwgMjM0MzEsIDIzNDM1LCAKKyAgICAyMzQzOSwgMjM0NDMsIDIzNDQ3LCAyMzQ1MSwgMjM0NTUsIDIzNDU5LCAyMzQ2NSwgMjM0NjksIDIzNDczLCAyMzQ3NywgCisgICAgMjM0ODIsIDIzNDg2LCAyMzQ5MSwgMjM0OTUsIDIzNTAwLCAyMzUwNCwgMjM1MDksIDIzNTEzLCAyMzUxOCwgMjM1MjIsIAorICAgIDIzNTI3LCAyMzUzMSwgMjM1MzYsIDIzNTM5LCAyMzU0MywgMjM1NDcsIDIzNTUxLCAyMzU1NSwgMjM1NTksIDIzNTYzLCAKKyAgICAyMzU2NywgMjM1NzEsIDIzNTc3LCAyMzU4MCwgMjM1ODQsIDIzNTg4LCAyMzU5MywgMjM1OTcsIDIzNjAyLCAyMzYwNiwgCisgICAgMjM2MTEsIDIzNjE1LCAyMzYyMCwgMjM2MjQsIDIzNjI5LCAyMzYzMywgMjM2MzgsIDIzNjQyLCAyMzY0NywgMjM2NTMsIAorICAgIDIzNjU3LCAyMzY2MywgMjM2NjcsIDIzNjczLCAyMzY3OSwgMjM2ODUsIDIzNjkxLCAyMzY5NywgMjM3MDMsIDIzNzA5LCAKKyAgICAyMzcxNSwgMjM3MTksIDIzNzIzLCAyMzcyNywgMjM3MzEsIDIzNzM1LCAyMzczOSwgMjM3NDMsIDIzNzQ3LCAyMzc1MiwgCisgICAgMjM3NTYsIDIzNzYxLCAyMzc2NSwgMjM3NzAsIDIzNzc0LCAyMzc3OSwgMjM3ODMsIDIzNzg4LCAyMzc5MiwgMjM3OTcsIAorICAgIDIzODAxLCAyMzgwNiwgMjM4MTAsIDIzODE0LCAyMzgxOCwgMjM4MjIsIDIzODI2LCAyMzgzMCwgMjM4MzQsIDIzODQwLCAKKyAgICAyMzg0MywgMjM4NDcsIDIzODUxLCAyMzg1NiwgMjM4NjAsIDIzODY1LCAyMzg2OSwgMjM4NzQsIDIzODc4LCAyMzg4MywgCisgICAgMjM4ODcsIDIzODkyLCAyMzg5NiwgMjM5MDEsIDIzOTA1LCAyMzkxMCwgMjM5MTYsIDIzOTIwLCAyMzkyNiwgMjM5MzEsIAorICAgIDIzOTM3LCAyMzk0MSwgMjM5NDcsIDIzOTUyLCAyMzk1NiwgMjM5NjAsIDIzOTY0LCAyMzk2OCwgMjM5NzIsIDIzOTc3LCAKKyAgICAyMzk4MCwgMjM5ODQsIDIzOTg5LCAyMzk5MywgMjM5OTgsIDI0MDAxLCAyNDAwNSwgMjQwMDksIDI0MDEzLCAyNDAxNywgCisgICAgMjQwMjEsIDI0MDI1LCAyNDAyOSwgMjQwMzMsIDI0MDM3LCAyNDA0MSwgMjQwNDUsIDI0MDUwLCAyNDA1NCwgMjQwNTgsIAorICAgIDI0MDY0LCAyNDA2OCwgMjQwNzQsIDI0MDc4LCAyNDA4NCwgMjQwODgsIDI0MDkyLCAyNDA5NiwgMjQxMDAsIDI0MTA0LCAKKyAgICAyNDEwOSwgMjQxMTMsIDI0MTE3LCAyNDEyMSwgMjQxMjUsIDI0MTI5LCAyNDEzMywgMjQxMzcsIDI0MTQxLCAyNDE0NSwgCisgICAgMjQxNDksIDI0MTU1LCAyNDE2MSwgMjQxNjcsIDI0MTczLCAyNDE3OSwgMjQxODQsIDI0MTkwLCAyNDE5NiwgMjQyMDIsIAorICAgIDI0MjA2LCAyNDIxMCwgMjQyMTQsIDI0MjE4LCAyNDIyMiwgMjQyMjYsIDI0MjMwLCAyNDIzNCwgMjQyMzgsIDI0MjQyLCAKKyAgICAyNDI0NiwgMjQyNTAsIDI0MjU0LCAyNDI1OSwgMjQyNjQsIDI0MjY5LCAyNDI3MywgMjQyNzcsIDI0MjgxLCAyNDI4NSwgCisgICAgMjQyODksIDI0MjkzLCAyNDI5NywgMjQzMDEsIDI0MzA1LCAyNDMwOSwgMjQzMTUsIDI0MzIxLCAyNDMyNywgMjQzMzMsIAorICAgIDI0MzM5LCAyNDM0NSwgMjQzNTEsIDI0MzU3LCAyNDM2MywgMjQzNjcsIDI0MzcxLCAyNDM3NSwgMjQzNzksIDI0MzgzLCAKKyAgICAyNDM4NywgMjQzOTEsIDI0Mzk3LCAyNDQwMywgMjQ0MDksIDI0NDE1LCAyNDQyMSwgMjQ0MjcsIDI0NDMzLCAyNDQzOSwgCisgICAgMjQ0NDUsIDI0NDUwLCAyNDQ1NSwgMjQ0NjAsIDI0NDY1LCAyNDQ3MSwgMjQ0NzcsIDI0NDgzLCAyNDQ4OSwgMjQ0OTUsIAorICAgIDI0NTAxLCAyNDUwNywgMjQ1MTIsIDI0NTE4LCAyNDUyNCwgMjQ1MzAsIDI0NTM1LCAyNDU0MSwgMjQ1NDcsIDI0NTUzLCAKKyAgICAyNDU1OCwgMjQ1NjMsIDI0NTY4LCAyNDU3MywgMjQ1NzgsIDI0NTgzLCAyNDU4OCwgMjQ1OTMsIDI0NTk4LCAyNDYwMywgCisgICAgMjQ2MDgsIDI0NjEzLCAyNDYxNywgMjQ2MjIsIDI0NjI3LCAyNDYzMiwgMjQ2MzcsIDI0NjQyLCAyNDY0NywgMjQ2NTIsIAorICAgIDI0NjU3LCAyNDY2MiwgMjQ2NjcsIDI0NjcyLCAyNDY3NywgMjQ2ODIsIDI0Njg3LCAyNDY5MiwgMjQ2OTcsIDI0NzAyLCAKKyAgICAyNDcwNywgMjQ3MTIsIDI0NzE3LCAyNDcyMiwgMjQ3MjcsIDI0NzMyLCAyNDczNywgMjQ3NDIsIDI0NzQ3LCAyNDc1MiwgCisgICAgMjQ3NTcsIDI0NzYyLCAyNDc2NiwgMjQ3NzEsIDI0Nzc2LCAyNDc4MSwgMjQ3ODYsIDI0NzkxLCAyNDc5NiwgMjQ4MDEsIAorICAgIDI0ODA2LCAyNDgxMSwgMjQ4MTYsIDI0ODIxLCAyNDgyNiwgMjQ4MzEsIDI0ODM2LCAyNDg0MSwgMjQ4NDYsIDI0ODUxLCAKKyAgICAyNDg1NiwgMjQ4NjEsIDI0ODY2LCAyNDg3MSwgMjQ4NzYsIDI0ODgxLCAyNDg4NiwgMjQ4OTEsIDI0ODk1LCAyNDkwMCwgCisgICAgMjQ5MDUsIDI0OTEwLCAyNDkxNSwgMjQ5MjAsIDI0OTI0LCAyNDkyOSwgMjQ5MzQsIDI0OTM5LCAyNDk0NCwgMjQ5NDksIAorICAgIDI0OTUzLCAyNDk1OCwgMjQ5NjQsIDI0OTY5LCAyNDk3NCwgMjQ5NzksIDI0OTg0LCAyNDk5MCwgMjQ5OTUsIDI1MDAwLCAKKyAgICAyNTAwNSwgMjUwMTAsIDI1MDE1LCAyNTAyMCwgMjUwMjUsIDI1MDMwLCAyNTAzNSwgMjUwNDAsIDI1MDQ1LCAyNTA1MCwgCisgICAgMjUwNTUsIDI1MDYwLCAyNTA2NSwgMjUwNzAsIDI1MDc1LCAyNTA4MCwgMjUwODUsIDI1MDkwLCAyNTA5NSwgMjUxMDAsIAorICAgIDI1MTA1LCAyNTExMCwgMjUxMTUsIDI1MTIwLCAyNTEyNSwgMjUxMzAsIDI1MTM1LCAyNTE0MCwgMjUxNDUsIDI1MTUwLCAKKyAgICAyNTE1NSwgMjUxNjAsIDI1MTY1LCAyNTE3MCwgMjUxNzUsIDI1MTgwLCAyNTE4NSwgMjUxOTAsIDI1MTk1LCAyNTIwMCwgCisgICAgMjUyMDUsIDI1MjEwLCAyNTIxNiwgMjUyMjEsIDI1MjI2LCAyNTIzMSwgMjUyMzYsIDI1MjQxLCAyNTI0NiwgMjUyNTEsIAorICAgIDI1MjU2LCAyNTI2MSwgMjUyNjYsIDI1MjcxLCAyNTI3NSwgMjUyODAsIDI1Mjg1LCAyNTI5MCwgMjUyOTUsIDI1MzAwLCAKKyAgICAyNTMwNSwgMjUzMTAsIDI1MzE1LCAyNTMyMCwgMjUzMjUsIDI1MzMwLCAyNTMzNSwgMjUzNDAsIDI1MzQ1LCAyNTM1MCwgCisgICAgMjUzNTUsIDI1MzYwLCAyNTM2NSwgMjUzNzAsIDI1Mzc1LCAyNTM4MCwgMjUzODUsIDI1MzkwLCAyNTM5NSwgMjU0MDAsIAorICAgIDI1NDA1LCAyNTQxMSwgMjU0MTUsIDI1NDE5LCAyNTQyMywgMjU0MjcsIDI1NDMxLCAyNTQzNSwgMjU0MzksIDI1NDQzLCAKKyAgICAyNTQ0OSwgMjU0NTUsIDI1NDYxLCAyNTQ2NywgMjU0NzMsIDI1NDc5LCAyNTQ4NSwgMjU0OTIsIDI1NDk4LCAyNTUwMywgCisgICAgMjU1MDgsIDI1NTEzLCAyNTUxOCwgMjU1MjMsIDI1NTI4LCAyNTUzMywgMjU1MzgsIDI1NTQzLCAyNTU0OCwgMjU1NTMsIAorICAgIDI1NTU4LCAyNTU2MywgMjU1NjgsIDI1NTczLCAyNTU3OCwgMjU1ODMsIDI1NTg4LCAyNTU5MywgMjU1OTgsIDI1NjAzLCAKKyAgICAyNTYwOCwgMjU2MTMsIDI1NjE4LCAyNTYyMywgMjU2MjgsIDI1NjMzLCAyNTYzOCwgMCwgMCwgMCwgMjU2NDUsIDI1NjU1LCAKKyAgICAyNTY1OSwgMjU2NjYsIDI1NjcwLCAyNTY3NCwgMjU2NzgsIDI1Njg2LCAyNTY5MCwgMjU2OTUsIDI1NzAwLCAyNTcwNSwgCisgICAgMjU3MDksIDI1NzE0LCAyNTcxOSwgMjU3MjIsIDI1NzI2LCAyNTczMCwgMjU3MzksIDI1NzQzLCAyNTc0NywgMjU3NTMsIAorICAgIDI1NzU3LCAyNTc2MSwgMjU3NjksIDI1NzczLCAyNTc4MSwgMjU3ODcsIDI1NzkzLCAyNTc5OSwgMjU4MDUsIDI1ODE1LCAKKyAgICAyNTgyMSwgMjU4MjUsIDI1ODM0LCAyNTgzNywgMjU4NDMsIDI1ODQ3LCAyNTg1MywgMjU4NTgsIDI1ODY0LCAyNTg3MiwgCisgICAgMjU4NzgsIDI1ODg0LCAyNTg5MiwgMjU4OTgsIDI1OTAyLCAyNTkwNiwgMjU5MTYsIDI1OTIyLCAyNTkyNiwgMjU5MzYsIAorICAgIDI1OTQyLCAyNTk0NiwgMjU5NTAsIDI1OTU3LCAyNTk2NCwgMjU5NjksIDI1OTc0LCAyNTk4MywgMjU5ODcsIDI1OTkxLCAKKyAgICAyNTk5NSwgMjYwMDMsIDI2MDEwLCAyNjAxNCwgMjYwMTgsIDI2MDIyLCAyNjAyNiwgMjYwMzAsIDI2MDM0LCAyNjAzOCwgCisgICAgMjYwNDIsIDI2MDQ2LCAyNjA1MCwgMjYwNTQsIDI2MDU5LCAyNjA2NCwgMjYwNjksIDI2MDczLCAyNjA3NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYwODEsIDI2MDg1LCAyNjA4OSwgMjYwOTMsIDI2MDk3LCAKKyAgICAyNjEwMiwgMjYxMDcsIDI2MTEyLCAyNjExNywgMjYxMjEsIDI2MTI1LCAyNjEzMCwgMjYxMzQsIDAsIDI2MTM4LCAyNjE0MywgCisgICAgMjYxNDgsIDI2MTUyLCAyNjE1NiwgMjYxNjEsIDI2MTY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNjE3MSwgMjYxNzUsIDI2MTc5LCAyNjE4MywgMjYxODcsIDI2MTkyLCAyNjE5NywgMjYyMDIsIDI2MjA3LCAyNjIxMSwgCisgICAgMjYyMTUsIDI2MjIwLCAyNjIyNCwgMjYyMjgsIDI2MjMyLCAyNjIzNywgMjYyNDIsIDI2MjQ2LCAyNjI1MCwgMjYyNTUsIAorICAgIDI2MjYwLCAyNjI2NSwgMjYyNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2Mjc2LCAyNjI4MCwgMjYyODQsIAorICAgIDI2Mjg4LCAyNjI5MiwgMjYyOTcsIDI2MzAyLCAyNjMwNywgMjYzMTIsIDI2MzE2LCAyNjMyMCwgMjYzMjUsIDI2MzI5LCAKKyAgICAyNjMzMywgMjYzMzcsIDI2MzQyLCAyNjM0NywgMjYzNTEsIDI2MzU1LCAyNjM2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjYzNjUsIDI2MzY5LCAyNjM3MywgMjYzNzcsIDI2MzgxLCAyNjM4NiwgMjYzOTEsIDI2Mzk2LCAKKyAgICAyNjQwMSwgMjY0MDUsIDI2NDA5LCAyNjQxNCwgMjY0MTgsIDAsIDI2NDIyLCAyNjQyNywgMjY0MzIsIDAsIDI2NDM2LCAKKyAgICAyNjQ0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0NDYsIDI2NDQ5LCAyNjQ1MywgMjY0NTcsIAorICAgIDI2NDYxLCAyNjQ2NSwgMjY0NjksIDI2NDczLCAyNjQ3NywgMjY0ODEsIDI2NDg1LCAyNjQ4OSwgMjY0OTMsIDI2NDk3LCAKKyAgICAyNjUwMSwgMjY1MDUsIDI2NTA5LCAyNjUxMywgMjY1MTYsIDI2NTIwLCAyNjUyNCwgMjY1MjgsIDI2NTMyLCAyNjUzNiwgCisgICAgMjY1NDAsIDI2NTQ0LCAyNjU0OCwgMjY1NTIsIDI2NTU2LCAyNjU2MCwgMjY1NjQsIDI2NTY4LCAyNjU3MSwgMjY1NzQsIAorICAgIDI2NTc4LCAyNjU4MiwgMjY1ODgsIDI2NTk0LCAyNjYwMCwgMjY2MDYsIDI2NjEyLCAyNjYxOCwgMjY2MjQsIDI2NjMwLCAKKyAgICAyNjYzNiwgMjY2NDIsIDI2NjQ4LCAyNjY1NCwgMjY2NjAsIDI2NjY2LCAyNjY3NSwgMjY2ODQsIDI2NjkwLCAyNjY5NiwgCisgICAgMjY3MDIsIDI2NzA3LCAyNjcxMSwgMjY3MTYsIDI2NzIxLCAyNjcyNiwgMjY3MzAsIDI2NzM1LCAyNjc0MCwgMjY3NDUsIAorICAgIDI2NzQ5LCAyNjc1NCwgMjY3NTgsIDI2NzYzLCAyNjc2OCwgMjY3NzMsIDI2Nzc4LCAyNjc4MiwgMjY3ODYsIDI2NzkwLCAKKyAgICAyNjc5NCwgMjY3OTgsIDI2ODAyLCAyNjgwNiwgMjY4MTAsIDI2ODE0LCAyNjgxOCwgMjY4MjQsIDI2ODI4LCAyNjgzMiwgCisgICAgMjY4MzYsIDI2ODQwLCAyNjg0NCwgMjY4NTIsIDI2ODU4LCAyNjg2MiwgMjY4NjgsIDI2ODcyLCAyNjg3OCwgMjY4ODIsIDAsIAorICAgIDAsIDI2ODg2LCAyNjg5MCwgMjY4OTMsIDI2ODk2LCAyNjg5OSwgMjY5MDIsIDI2OTA1LCAyNjkwOCwgMjY5MTEsIDI2OTE0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjkxNywgMjY5MjUsIDI2OTMzLCAyNjk0MSwgMjY5NDksIDI2OTU3LCAyNjk2NSwgMjY5NzMsIAorICAgIDI2OTgxLCAyNjk4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMjY5OTcsIDI3MDAwLCAyNzAwMywgMjcwMDYsIDI3MDExLCAyNzAxNCwgCisgICAgMjcwMTksIDI3MDI2LCAyNzAzNCwgMjcwMzksIDI3MDQ2LCAyNzA0OSwgMjcwNTYsIDI3MDYzLCAyNzA3MCwgMCwgMjcwNzQsIAorICAgIDI3MDc4LCAyNzA4MSwgMjcwODQsIDI3MDg3LCAyNzA5MCwgMjcwOTMsIDI3MDk2LCAyNzA5OSwgMjcxMDIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDI3MTA1LCAyNzEwOCwgMjcxMTEsIDI3MTE0LCAyNzExNywgMjcxMjAsIDI3MTI0LCAyNzEyOCwgMjcxMzIsIAorICAgIDI3MTM1LCAyNzEzOSwgMjcxNDMsIDI3MTQ2LCAyNzE1MCwgMjcxNTQsIDI3MTU3LCAyNzE2MSwgMjcxNjQsIDI3MTY4LCAKKyAgICAyNzE3MiwgMjcxNzYsIDI3MTgwLCAyNzE4NCwgMjcxODcsIDI3MTkwLCAyNzE5NCwgMjcxOTgsIDI3MjAxLCAyNzIwNSwgCisgICAgMjcyMDksIDI3MjEzLCAyNzIxNywgMjcyMjEsIDI3MjI1LCAyNzIyOSwgMjcyMzMsIDI3MjQwLCAyNzI0NSwgMjcyNTAsIAorICAgIDI3MjU1LCAyNzI2MCwgMjcyNjYsIDI3MjcyLCAyNzI3OCwgMjcyODQsIDI3Mjg5LCAyNzI5NSwgMjczMDEsIDI3MzA2LCAKKyAgICAyNzMxMiwgMjczMTgsIDI3MzI0LCAyNzMzMCwgMjczMzYsIDI3MzQxLCAyNzM0NywgMjczNTIsIDI3MzU4LCAyNzM2NCwgCisgICAgMjczNzAsIDI3Mzc2LCAyNzM4MiwgMjczODcsIDI3MzkyLCAyNzM5OCwgMjc0MDQsIDI3NDA5LCAyNzQxNSwgMjc0MjAsIAorICAgIDI3NDI2LCAyNzQzMSwgMjc0MzYsIDI3NDQyLCAyNzQ0OCwgMjc0NTQsIDI3NDYwLCAyNzQ2NiwgMjc0NzIsIDI3NDc4LCAKKyAgICAyNzQ4NCwgMjc0OTAsIDI3NDk2LCAyNzUwMiwgMjc1MDgsIDI3NTEzLCAyNzUxOCwgMjc1MjMsIDI3NTI5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAyNzUzNSwgMjc1NDQsIDI3NTUzLCAyNzU2MSwgMjc1NjksIDI3NTc5LCAyNzU4NywgMjc1OTYsIAorICAgIDI3NjAzLCAyNzYxMCwgMjc2MTcsIDI3NjI1LCAyNzYzMywgMjc2NDEsIDI3NjQ5LCAyNzY1NywgMjc2NjUsIDI3NjczLCAKKyAgICAyNzY4MSwgMjc2ODgsIDI3Njk2LCAyNzcwNCwgMjc3MTIsIDI3NzIwLCAyNzcyOCwgMjc3MzgsIDI3NzQ4LCAyNzc1OCwgCisgICAgMjc3NjgsIDI3Nzc4LCAyNzc4OCwgMjc3OTgsIDI3ODA4LCAyNzgxOCwgMjc4MjgsIDI3ODM4LCAyNzg0OCwgMjc4NTgsIAorICAgIDI3ODY4LCAyNzg3NiwgMjc4ODQsIDI3ODk0LCAyNzkwMiwgMCwgMCwgMCwgMCwgMCwgMjc5MTIsIDI3OTE2LCAyNzkyMCwgCisgICAgMjc5MjQsIDI3OTI4LCAyNzkzMiwgMjc5MzYsIDI3OTQwLCAyNzk0NCwgMjc5NDgsIDI3OTUyLCAyNzk1NiwgMjc5NjAsIAorICAgIDI3OTY0LCAyNzk2OCwgMjc5NzIsIDI3OTc2LCAyNzk4MCwgMjc5ODQsIDI3OTg4LCAyNzk5MiwgMjc5OTYsIDI4MDAwLCAKKyAgICAyODAwNCwgMjgwMTAsIDI4MDE0LCAyODAyMCwgMjgwMjQsIDI4MDMwLCAyODAzNCwgMjgwNDAsIDI4MDQ0LCAyODA0OCwgCisgICAgMjgwNTIsIDI4MDU2LCAyODA2MCwgMjgwNjQsIDI4MDcwLCAyODA3NiwgMjgwODIsIDI4MDg4LCAyODA5MywgMjgwOTksIAorICAgIDI4MTA1LCAyODExMSwgMjgxMTcsIDI4MTIzLCAyODEyOSwgMjgxMzYsIDI4MTQyLCAyODE0NywgMjgxNTIsIDI4MTU2LCAKKyAgICAyODE2MCwgMjgxNjQsIDI4MTY4LCAyODE3MiwgMjgxNzYsIDI4MTgwLCAyODE4NiwgMjgxOTIsIDI4MTk4LCAyODIwMywgCisgICAgMjgyMTAsIDI4MjE1LCAyODIyMCwgMjgyMjYsIDI4MjMxLCAyODIzOCwgMjgyNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDI4MjUyLCAyODI1OCwgMjgyNjIsIDI4MjY3LCAyODI3MiwgMjgyNzcsIDI4MjgyLCAyODI4NywgMjgyOTIsIAorICAgIDI4Mjk3LCAyODMwMiwgMjgzMDcsIDI4MzEyLCAyODMxNywgMjgzMjIsIDI4MzI3LCAyODMzMSwgMjgzMzUsIDI4MzQwLCAKKyAgICAyODM0NSwgMjgzNTAsIDI4MzU0LCAyODM1OCwgMjgzNjIsIDI4MzY3LCAyODM3MiwgMjgzNzcsIDI4MzgyLCAyODM4NiwgMCwgCisgICAgMCwgMCwgMjgzOTAsIDI4Mzk1LCAyODQwMCwgMjg0MDUsIDI4NDExLCAyODQxNywgMjg0MjMsIDI4NDI5LCAyODQzNCwgCisgICAgMjg0MzksIDI4NDQ1LCAyODQ1MSwgMCwgMCwgMCwgMCwgMjg0NTgsIDI4NDYzLCAyODQ2OSwgMjg0NzUsIDI4NDgxLCAKKyAgICAyODQ4NiwgMjg0OTEsIDI4NDk2LCAyODUwMSwgMjg1MDcsIDI4NTEyLCAyODUxNywgMCwgMCwgMCwgMCwgMjg1MjIsIDAsIDAsIAorICAgIDAsIDI4NTI3LCAyODUzMiwgMjg1MzcsIDI4NTQyLCAyODU0NiwgMjg1NTAsIDI4NTU0LCAyODU1OCwgMjg1NjIsIDI4NTY2LCAKKyAgICAyODU3MCwgMjg1NzQsIDI4NTc4LCAyODU4MywgMjg1ODksIDI4NTk1LCAyODYwMSwgMjg2MDYsIDI4NjExLCAyODYxNywgCisgICAgMjg2MjMsIDI4NjI5LCAyODYzNCwgMjg2NDAsIDI4NjQ1LCAyODY1MSwgMjg2NTcsIDI4NjYyLCAyODY2OCwgMjg2NzQsIAorICAgIDI4NjgwLCAyODY4NSwgMjg2OTAsIDI4Njk1LCAyODcwMSwgMjg3MDcsIDI4NzEyLCAyODcxOCwgMjg3MjMsIDI4NzI5LCAKKyAgICAyODczNCwgMjg3NDAsIDAsIDAsIDI4NzQ2LCAyODc1MiwgMjg3NTgsIDI4NzY0LCAyODc3MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjg3NzYsIDI4NzgzLCAyODc5MCwgMjg3OTYsIDI4ODAzLCAyODgxMCwgMjg4MTYsIDI4ODIzLCAKKyAgICAyODgzMCwgMjg4MzcsIDI4ODQzLCAyODg0OSwgMjg4NTYsIDI4ODYyLCAyODg2OCwgMjg4NzUsIDI4ODgyLCAyODg4OCwgCisgICAgMjg4OTUsIDI4OTAyLCAyODkwOCwgMjg5MTQsIDI4OTIxLCAyODkyNywgMjg5MzMsIDI4OTQwLCAyODk0NiwgMjg5NTMsIAorICAgIDI4OTYwLCAyODk2NywgMjg5NzQsIDI4OTgxLCAyODk4OCwgMjg5OTQsIDI5MDAxLCAyOTAwOCwgMjkwMTQsIDI5MDIxLCAKKyAgICAyOTAyOCwgMjkwMzUsIDI5MDQyLCAyOTA0OSwgMjkwNTYsIDI5MDYzLCAwLCAwLCAwLCAwLCAyOTA3MCwgMjkwNzgsIAorICAgIDI5MDg1LCAyOTA5MiwgMjkwOTgsIDI5MTA1LCAyOTExMSwgMjkxMTgsIDI5MTI0LCAyOTEzMSwgMjkxMzgsIDI5MTQ1LCAKKyAgICAyOTE1MiwgMjkxNTksIDI5MTY2LCAyOTE3MywgMjkxODAsIDI5MTg3LCAyOTE5NCwgMjkyMDEsIDI5MjA4LCAyOTIxNCwgCisgICAgMjkyMjEsIDI5MjI4LCAyOTIzNSwgMjkyNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MjQ3LCAyOTI1MywgMjkyNTgsIDI5MjYzLCAKKyAgICAyOTI2OCwgMjkyNzMsIDI5Mjc4LCAyOTI4MywgMjkyODgsIDI5MjkzLCAyOTI5OCwgMCwgMCwgMCwgMjkzMDQsIDI5MzEwLCAKKyAgICAyOTMxNiwgMjkzMjAsIDI5MzI2LCAyOTMzMiwgMjkzMzgsIDI5MzQ0LCAyOTM1MCwgMjkzNTYsIDI5MzYyLCAyOTM2OCwgCisgICAgMjkzNzQsIDI5MzgwLCAyOTM4NiwgMjkzOTIsIDI5Mzk4LCAyOTQwNCwgMjk0MTAsIDI5NDE0LCAyOTQyMCwgMjk0MjYsIAorICAgIDI5NDMyLCAyOTQzOCwgMjk0NDQsIDI5NDUwLCAyOTQ1NiwgMjk0NjIsIDI5NDY4LCAyOTQ3NCwgMjk0ODAsIDI5NDg2LCAKKyAgICAyOTQ5MiwgMjk0OTgsIDI5NTA0LCAyOTUwOCwgMjk1MTMsIDI5NTE4LCAyOTUyMywgMjk1MjcsIDI5NTMyLCAyOTUzNiwgCisgICAgMjk1NDEsIDI5NTQ2LCAyOTU1MSwgMjk1NTUsIDI5NTYwLCAyOTU2NSwgMjk1NzAsIDI5NTc1LCAyOTU4MCwgMjk1ODQsIAorICAgIDI5NTg4LCAyOTU5MywgMjk1OTgsIDI5NjAyLCAyOTYwNiwgMjk2MTAsIDI5NjE1LCAyOTYyMCwgMjk2MjUsIDI5NjMwLCAwLCAKKyAgICAwLCAyOTYzNiwgMjk2NDAsIDI5NjQ3LCAyOTY1MiwgMjk2NTgsIDI5NjY0LCAyOTY2OSwgMjk2NzUsIDI5NjgxLCAyOTY4NiwgCisgICAgMjk2OTIsIDI5Njk4LCAyOTcwNCwgMjk3MDksIDI5NzE1LCAyOTcyMCwgMjk3MjUsIDI5NzMxLCAyOTczNiwgMjk3NDIsIAorICAgIDI5NzQ3LCAyOTc1MywgMjk3NTksIDI5NzY1LCAyOTc3MSwgMjk3NzUsIDI5NzgwLCAyOTc4NSwgMjk3OTEsIDI5Nzk3LCAKKyAgICAyOTgwMiwgMjk4MDgsIDI5ODE0LCAyOTgxOCwgMjk4MjMsIDI5ODI4LCAyOTgzMiwgMjk4MzcsIDI5ODQyLCAyOTg0NywgCisgICAgMjk4NTIsIDI5ODU4LCAyOTg2NCwgMjk4NjksIDI5ODc0LCAyOTg3OSwgMjk4ODMsIDI5ODg4LCAyOTg5MiwgMjk4OTcsIAorICAgIDI5OTAxLCAyOTkwNiwgMjk5MTEsIDI5OTE2LCAyOTkyMSwgMjk5MjcsIDI5OTMzLCAyOTk0MCwgMjk5NTAsIDI5OTU5LCAKKyAgICAyOTk2NiwgMjk5NzIsIDI5OTgyLCAyOTk4NywgMjk5OTMsIDAsIDI5OTk4LCAzMDAwMywgMzAwMDgsIDMwMDE2LCAzMDAyMiwgCisgICAgMzAwMzAsIDMwMDM1LCAzMDA0MSwgMzAwNDcsIDMwMDUzLCAzMDA1OCwgMzAwNjQsIDMwMDY5LCAzMDA3NiwgMzAwODIsIAorICAgIDMwMDg3LCAzMDA5MywgMzAwOTksIDMwMTA1LCAzMDExMiwgMzAxMTksIDMwMTI2LCAzMDEzMSwgMzAxMzYsIDMwMTQzLCAKKyAgICAzMDE1MCwgMzAxNTcsIDMwMTY0LCAzMDE3MSwgMCwgMCwgMzAxNzgsIDMwMTg1LCAzMDE5MiwgMzAxOTgsIDMwMjA0LCAKKyAgICAzMDIxMCwgMzAyMTYsIDMwMjIyLCAzMDIyOCwgMzAyMzQsIDMwMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDI0NiwgMzAyNTIsIAorICAgIDMwMjU3LCAzMDI2MiwgMzAyNjcsIDMwMjcyLCAzMDI3NywgMzAyODIsIDMwMjg3LCAzMDI5MiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzAyOTcsIDMwMzAyLCAzMDMwNywgMzAzMTIsIDMwMzE3LCAzMDMyMiwgMzAzMjcsIDMwMzM2LCAzMDM0MywgMzAzNDgsIAorICAgIDMwMzUzLCAzMDM1OCwgMzAzNjMsIDMwMzY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDM3MCwgMzAzNzYsIAotICAgIDMwMzgyLCAzMDM4NiwgMzAzOTAsIDMwMzk0LCAzMDM5OCwgMzA0MDQsIDMwNDA4LCAzMDQxNCwgMzA0MTgsIDMwNDI0LCAKLSAgICAzMDQzMCwgMzA0MzgsIDMwNDQ0LCAzMDQ1MiwgMzA0NTYsIDMwNDYwLCAzMDQ2NCwgMzA0NzAsIDMwNDczLCAzMDQ3OSwgCi0gICAgMzA0ODMsIDMwNDg5LCAzMDQ5MywgMzA0OTcsIDMwNTAzLCAzMDUwNywgMzA1MTMsIDMwNTE3LCAzMDUyMywgMzA1MzEsIAotICAgIDMwNTM5LCAzMDU0NywgMzA1NTMsIDMwNTU3LCAzMDU2MywgMzA1NjcsIDMwNTczLCAzMDU3NiwgMzA1NzksIDMwNTg1LCAKLSAgICAzMDU4OSwgMzA1OTUsIDMwNTk4LCAzMDYwMSwgMzA2MDQsIDMwNjA4LCAzMDYxMiwgMzA2MTgsIDMwNjI0LCAzMDYyNywgCi0gICAgMzA2MzAsIDMwNjM0LCAzMDYzOSwgMzA2NDQsIDMwNjUxLCAzMDY1NiwgMzA2NjMsIDMwNjcwLCAzMDY3OSwgMzA2ODYsIAotICAgIDMwNjk1LCAzMDcwMCwgMzA3MDcsIDMwNzE0LCAzMDcyMywgMzA3MjgsIDMwNzM1LCAzMDc0MCwgMzA3NDYsIDMwNzUyLCAKLSAgICAzMDc1OCwgMzA3NjQsIDMwNzcwLCAzMDc3NiwgMCwgMCwgMCwgMCwgMzA3ODIsIDMwNzg2LCAzMDc4OSwgMzA3OTIsIAotICAgIDMwNzk1LCAzMDc5OCwgMzA4MDEsIDMwODA0LCAzMDgwNywgMzA4MTAsIDMwODEzLCAzMDgxNiwgMzA4MTksIDMwODIyLCAKLSAgICAzMDgyNywgMzA4MzIsIDMwODM3LCAzMDg0MCwgMzA4NDUsIDMwODUwLCAzMDg1NSwgMzA4NjAsIDMwODY3LCAzMDg3MiwgCi0gICAgMzA4NzcsIDMwODgyLCAzMDg4NywgMzA4OTQsIDMwOTAwLCAzMDkwNiwgMzA5MTIsIDMwOTE4LCAzMDkyNCwgMzA5MzMsIAotICAgIDMwOTQyLCAzMDk0OCwgMzA5NTQsIDMwOTYyLCAzMDk3MCwgMzA5NzksIDMwOTg4LCAzMDk5NiwgMzEwMDQsIDMxMDEzLCAKLSAgICAzMTAyMiwgMCwgMCwgMCwgMzEwMzAsIDMxMDM0LCAzMTAzOCwgMzEwNDIsIDMxMDQ1LCAzMTA0OCwgMzEwNTEsIDMxMDU1LCAKLSAgICAzMTA1OCwgMzEwNjEsIDMxMDY1LCAzMTA2OCwgMzEwNzIsIDMxMDc2LCAzMTA4MCwgMzEwODQsIDMxMDg4LCAzMTA5MiwgCi0gICAgMzEwOTYsIDMxMTAwLCAzMTEwNCwgMzExMDcsIDMxMTEwLCAzMTExNCwgMzExMTgsIDMxMTIyLCAzMTEyNSwgMzExMjgsIAotICAgIDMxMTMxLCAzMTEzNSwgMzExMzksIDMxMTQyLCAzMTE0NiwgMzExNDksIDMxMTU0LCAzMTE1OSwgMzExNjQsIDMxMTY5LCAKLSAgICAzMTE3NCwgMzExNzksIDMxMTg0LCAzMTE4OSwgMzExOTQsIDMxMTk4LCAzMTIwMiwgMzEyMDgsIDMxMjE1LCAzMTIxOSwgCi0gICAgMzEyMjMsIDMxMjI3LCAzMTIzMCwgMzEyMzMsIDMxMjM2LCAzMTIzOSwgMzEyNDIsIDMxMjQ1LCAzMTI0OCwgMzEyNTEsIAotICAgIDMxMjU0LCAzMTI1NywgMzEyNjEsIDMxMjY1LCAzMTI2OSwgMzEyNzQsIDMxMjc4LCAzMTI4MiwgMzEyODgsIDMxMjkyLCAKLSAgICAzMTI5OCwgMzEzMDQsIDMxMzA5LCAzMTMxNiwgMzEzMjAsIDMxMzI2LCAzMTMzMCwgMzEzMzYsIDMxMzQxLCAzMTM0OCwgCi0gICAgMzEzNTUsIDMxMzYwLCAzMTM2NywgMzEzNzIsIDMxMzc3LCAzMTM4MSwgMzEzODcsIDMxMzkxLCAzMTM5NywgMzE0MDQsIAotICAgIDMxNDExLCAzMTQxNSwgMzE0MjEsIDMxNDI3LCAzMTQzMSwgMzE0MzcsIDMxNDQyLCAzMTQ0NywgMzE0NTQsIDMxNDU5LCAKLSAgICAzMTQ2NCwgMzE0NjksIDMxNDc0LCAzMTQ3OCwgMzE0ODIsIDMxNDg3LCAzMTQ5MiwgMzE0OTksIDMxNTA1LCAzMTUxMCwgCi0gICAgMzE1MTcsIDMxNTIyLCAzMTUyOSwgMzE1MzQsIDMxNTQzLCAzMTU0OSwgMzE1NTUsIDMxNTU5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAzMTU2MywgMzE1NzIsIDMxNTc5LCAzMTU4NiwgMzE1OTMsIDMxNTk2LCAzMTYwMCwgMzE2MDQsIDMxNjA4LCAKLSAgICAzMTYxMiwgMzE2MTYsIDMxNjIwLCAzMTYyNCwgMzE2MjgsIDMxNjMyLCAzMTYzNiwgMzE2NDAsIDMxNjQ0LCAzMTY0NywgCi0gICAgMzE2NTAsIDMxNjU0LCAzMTY1OCwgMzE2NjIsIDMxNjY2LCAzMTY3MCwgMzE2NzQsIDMxNjc3LCAzMTY4MSwgMzE2ODUsIAotICAgIDMxNjg5LCAzMTY5MywgMzE2OTYsIDMxNjk5LCAzMTcwMywgMzE3MDYsIDMxNzEwLCAzMTcxNCwgMzE3MTcsIDMxNzIxLCAKLSAgICAzMTcyNSwgMzE3MjgsIDMxNzMzLCAzMTczOCwgMzE3NDMsIDMxNzQ3LCAzMTc1MSwgMzE3NTYsIDMxNzYwLCAzMTc2NSwgCi0gICAgMzE3NjksIDMxNzc0LCAzMTc3OCwgMzE3ODIsIDMxNzg3LCAzMTc5MiwgMzE3OTYsIDMxODAxLCAzMTgwNiwgMzE4MTEsIAotICAgIDMxODE1LCAwLCAwLCAwLCAzMTgxOSwgMzE4MjQsIDMxODMzLCAzMTgzOCwgMzE4NDUsIDMxODUwLCAzMTg1NCwgMzE4NTcsIAotICAgIDMxODYwLCAzMTg2MywgMzE4NjYsIDMxODY5LCAzMTg3MiwgMzE4NzUsIDMxODc4LCAwLCAwLCAwLCAzMTg4MSwgMzE4ODUsIAotICAgIDMxODg5LCAzMTg5MywgMzE5MDAsIDMxOTA2LCAzMTkxMiwgMzE5MTgsIDMxOTI0LCAzMTkzMCwgMzE5MzYsIDMxOTQyLCAKLSAgICAzMTk0OCwgMzE5NTQsIDMxOTYxLCAzMTk2OCwgMzE5NzUsIDMxOTgyLCAzMTk4OSwgMzE5OTYsIDMyMDAzLCAzMjAxMCwgCi0gICAgMzIwMTcsIDMyMDI0LCAzMjAzMSwgMzIwMzgsIDMyMDQ1LCAzMjA1MiwgMzIwNTksIDMyMDY2LCAzMjA3MywgMzIwODAsIAotICAgIDMyMDg3LCAzMjA5NCwgMzIxMDEsIDMyMTA4LCAzMjExNSwgMzIxMjIsIDMyMTI5LCAzMjEzNiwgMzIxNDMsIDMyMTUwLCAKLSAgICAzMjE1NywgMzIxNjQsIDMyMTcyLCAzMjE4MCwgMzIxODgsIDMyMTk0LCAzMjIwMCwgMzIyMDYsIDMyMjE0LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDM3MywgMzAzNzksIAorICAgIDMwMzg1LCAzMDM4OSwgMzAzOTMsIDMwMzk3LCAzMDQwMSwgMzA0MDcsIDMwNDExLCAzMDQxNywgMzA0MjEsIDMwNDI3LCAKKyAgICAzMDQzMywgMzA0NDEsIDMwNDQ3LCAzMDQ1NSwgMzA0NTksIDMwNDYzLCAzMDQ2NywgMzA0NzMsIDMwNDc2LCAzMDQ4MiwgCisgICAgMzA0ODYsIDMwNDkyLCAzMDQ5NiwgMzA1MDAsIDMwNTA2LCAzMDUxMCwgMzA1MTYsIDMwNTIwLCAzMDUyNiwgMzA1MzQsIAorICAgIDMwNTQyLCAzMDU1MCwgMzA1NTYsIDMwNTYwLCAzMDU2NiwgMzA1NzAsIDMwNTc2LCAzMDU3OSwgMzA1ODIsIDMwNTg4LCAKKyAgICAzMDU5MiwgMzA1OTgsIDMwNjAxLCAzMDYwNCwgMzA2MDcsIDMwNjExLCAzMDYxNSwgMzA2MjEsIDMwNjI3LCAzMDYzMCwgCisgICAgMzA2MzMsIDMwNjM3LCAzMDY0MiwgMzA2NDcsIDMwNjU0LCAzMDY1OSwgMzA2NjYsIDMwNjczLCAzMDY4MiwgMzA2ODksIAorICAgIDMwNjk4LCAzMDcwMywgMzA3MTAsIDMwNzE3LCAzMDcyNiwgMzA3MzEsIDMwNzM4LCAzMDc0MywgMzA3NDksIDMwNzU1LCAKKyAgICAzMDc2MSwgMzA3NjcsIDMwNzczLCAzMDc3OSwgMCwgMCwgMCwgMCwgMzA3ODUsIDMwNzg5LCAzMDc5MiwgMzA3OTUsIAorICAgIDMwNzk4LCAzMDgwMSwgMzA4MDQsIDMwODA3LCAzMDgxMCwgMzA4MTMsIDMwODE2LCAzMDgxOSwgMzA4MjIsIDMwODI1LCAKKyAgICAzMDgzMCwgMzA4MzUsIDMwODQwLCAzMDg0MywgMzA4NDgsIDMwODUzLCAzMDg1OCwgMzA4NjMsIDMwODcwLCAzMDg3NSwgCisgICAgMzA4ODAsIDMwODg1LCAzMDg5MCwgMzA4OTcsIDMwOTAzLCAzMDkwOSwgMzA5MTUsIDMwOTIxLCAzMDkyNywgMzA5MzYsIAorICAgIDMwOTQ1LCAzMDk1MSwgMzA5NTcsIDMwOTY1LCAzMDk3MywgMzA5ODIsIDMwOTkxLCAzMDk5OSwgMzEwMDcsIDMxMDE2LCAKKyAgICAzMTAyNSwgMCwgMCwgMCwgMzEwMzMsIDMxMDM3LCAzMTA0MSwgMzEwNDUsIDMxMDQ4LCAzMTA1MSwgMzEwNTQsIDMxMDU4LCAKKyAgICAzMTA2MSwgMzEwNjQsIDMxMDY4LCAzMTA3MSwgMzEwNzUsIDMxMDc5LCAzMTA4MywgMzEwODcsIDMxMDkxLCAzMTA5NSwgCisgICAgMzEwOTksIDMxMTAzLCAzMTEwNywgMzExMTAsIDMxMTEzLCAzMTExNywgMzExMjEsIDMxMTI1LCAzMTEyOCwgMzExMzEsIAorICAgIDMxMTM0LCAzMTEzOCwgMzExNDIsIDMxMTQ1LCAzMTE0OSwgMzExNTIsIDMxMTU3LCAzMTE2MiwgMzExNjcsIDMxMTcyLCAKKyAgICAzMTE3NywgMzExODIsIDMxMTg3LCAzMTE5MiwgMzExOTcsIDMxMjAxLCAzMTIwNSwgMzEyMTEsIDMxMjE4LCAzMTIyMiwgCisgICAgMzEyMjYsIDMxMjMwLCAzMTIzMywgMzEyMzYsIDMxMjM5LCAzMTI0MiwgMzEyNDUsIDMxMjQ4LCAzMTI1MSwgMzEyNTQsIAorICAgIDMxMjU3LCAzMTI2MCwgMzEyNjQsIDMxMjY4LCAzMTI3MiwgMzEyNzcsIDMxMjgxLCAzMTI4NSwgMzEyOTEsIDMxMjk1LCAKKyAgICAzMTMwMSwgMzEzMDcsIDMxMzEyLCAzMTMxOSwgMzEzMjMsIDMxMzI5LCAzMTMzMywgMzEzMzksIDMxMzQ0LCAzMTM1MSwgCisgICAgMzEzNTgsIDMxMzYzLCAzMTM3MCwgMzEzNzUsIDMxMzgwLCAzMTM4NCwgMzEzOTAsIDMxMzk0LCAzMTQwMCwgMzE0MDcsIAorICAgIDMxNDE0LCAzMTQxOCwgMzE0MjQsIDMxNDMwLCAzMTQzNCwgMzE0NDAsIDMxNDQ1LCAzMTQ1MCwgMzE0NTcsIDMxNDYyLCAKKyAgICAzMTQ2NywgMzE0NzIsIDMxNDc3LCAzMTQ4MSwgMzE0ODUsIDMxNDkwLCAzMTQ5NSwgMzE1MDIsIDMxNTA4LCAzMTUxMywgCisgICAgMzE1MjAsIDMxNTI1LCAzMTUzMiwgMzE1MzcsIDMxNTQ2LCAzMTU1MiwgMzE1NTgsIDMxNTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAzMTU2NiwgMzE1NzUsIDMxNTgyLCAzMTU4OSwgMzE1OTYsIDMxNTk5LCAzMTYwMywgMzE2MDcsIDMxNjExLCAKKyAgICAzMTYxNSwgMzE2MTksIDMxNjIzLCAzMTYyNywgMzE2MzEsIDMxNjM1LCAzMTYzOSwgMzE2NDMsIDMxNjQ3LCAzMTY1MCwgCisgICAgMzE2NTMsIDMxNjU3LCAzMTY2MSwgMzE2NjUsIDMxNjY5LCAzMTY3MywgMzE2NzcsIDMxNjgwLCAzMTY4NCwgMzE2ODgsIAorICAgIDMxNjkyLCAzMTY5NiwgMzE2OTksIDMxNzAyLCAzMTcwNiwgMzE3MDksIDMxNzEzLCAzMTcxNywgMzE3MjAsIDMxNzI0LCAKKyAgICAzMTcyOCwgMzE3MzEsIDMxNzM2LCAzMTc0MSwgMzE3NDYsIDMxNzUwLCAzMTc1NCwgMzE3NTksIDMxNzYzLCAzMTc2OCwgCisgICAgMzE3NzIsIDMxNzc3LCAzMTc4MSwgMzE3ODUsIDMxNzkwLCAzMTc5NSwgMzE3OTksIDMxODA0LCAzMTgwOSwgMzE4MTQsIAorICAgIDMxODE4LCAwLCAwLCAwLCAzMTgyMiwgMzE4MjcsIDMxODM2LCAzMTg0MSwgMzE4NDgsIDMxODUzLCAzMTg1NywgMzE4NjAsIAorICAgIDMxODYzLCAzMTg2NiwgMzE4NjksIDMxODcyLCAzMTg3NSwgMzE4NzgsIDMxODgxLCAwLCAwLCAwLCAzMTg4NCwgMzE4ODgsIAorICAgIDMxODkyLCAzMTg5NiwgMzE5MDMsIDMxOTA5LCAzMTkxNSwgMzE5MjEsIDMxOTI3LCAzMTkzMywgMzE5MzksIDMxOTQ1LCAKKyAgICAzMTk1MSwgMzE5NTcsIDMxOTY0LCAzMTk3MSwgMzE5NzgsIDMxOTg1LCAzMTk5MiwgMzE5OTksIDMyMDA2LCAzMjAxMywgCisgICAgMzIwMjAsIDMyMDI3LCAzMjAzNCwgMzIwNDEsIDMyMDQ4LCAzMjA1NSwgMzIwNjIsIDMyMDY5LCAzMjA3NiwgMzIwODMsIAorICAgIDMyMDkwLCAzMjA5NywgMzIxMDQsIDMyMTExLCAzMjExOCwgMzIxMjUsIDMyMTMyLCAzMjEzOSwgMzIxNDYsIDMyMTUzLCAKKyAgICAzMjE2MCwgMzIxNjcsIDMyMTc1LCAzMjE4MywgMzIxOTEsIDMyMTk3LCAzMjIwMywgMzIyMDksIDMyMjE3LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIyMywgMzIyMzAsIDMyMjM3LCAzMjI0NCwgMzIyNTEsIAotICAgIDMyMjYwLCAzMjI2OSwgMzIyNzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjg3LCAzMjI5MiwgMzIyOTcsIDMyMzAyLCAKLSAgICAzMjMwNywgMzIzMTYsIDMyMzI3LCAzMjMzNiwgMzIzNDcsIDMyMzUzLCAzMjM2NiwgMzIzNzIsIDMyMzc5LCAzMjM4NiwgCi0gICAgMzIzOTEsIDMyMzk3LCAzMjQwMywgMzI0MTQsIDMyNDIzLCAzMjQzMCwgMzI0MzcsIDMyNDQ2LCAzMjQ1MywgMzI0NjIsIAotICAgIDMyNDcyLCAzMjQ4MiwgMzI0ODksIDMyNDk2LCAzMjUwMywgMzI1MTMsIDMyNTE4LCAzMjUyNiwgMzI1MzIsIDMyNTQwLCAKLSAgICAzMjU0OSwgMzI1NTQsIDMyNTYxLCAzMjU2NywgMzI1NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNTc3LCAKLSAgICAzMjU4MiwgMzI1ODgsIDMyNTk1LCAzMjYwMywgMzI2MDksIDMyNjE1LCAzMjYyMSwgMzI2MjYsIDMyNjMzLCAzMjYzOSwgCi0gICAgMzI2NDUsIDMyNjUxLCAzMjY1OSwgMzI2NjQsIDMyNjcyLCAzMjY3NywgMzI2ODMsIDMyNjg5LCAzMjY5NiwgMzI3MDQsIAotICAgIDMyNzExLCAzMjcxNywgMzI3MjQsIDMyNzMxLCAzMjczNywgMzI3NDQsIDMyNzUxLCAzMjc1NywgMzI3NjIsIDMyNzY4LCAKLSAgICAzMjc3NiwgMzI3ODQsIDMyNzkwLCAzMjc5NiwgMzI4MDIsIDMyODA4LCAzMjgxNiwgMzI4MjAsIDMyODI2LCAzMjgzMiwgCi0gICAgMzI4MzgsIDMyODQ0LCAzMjg1MCwgMzI4NTYsIDMyODYwLCAzMjg2NSwgMzI4NzAsIDMyODc3LCAzMjg4MiwgMzI4ODYsIAotICAgIDMyODkyLCAzMjg5NywgMzI5MDIsIDMyOTA2LCAzMjkxMSwgMzI5MTYsIDMyOTIwLCAzMjkyNCwgMzI5MjksIDMyOTM2LCAKLSAgICAzMjk0MCwgMzI5NDUsIDMyOTUwLCAzMjk1NCwgMzI5NTksIDMyOTYzLCAzMjk2OCwgMzI5NzIsIDMyOTc4LCAzMjk4MywgCi0gICAgMzI5OTAsIDMyOTk1LCAzMzAwMCwgMzMwMDQsIDMzMDA5LCAzMzAxNCwgMzMwMjEsIDMzMDI2LCAzMzAzMiwgMzMwMzcsIAotICAgIDMzMDQxLCAzMzA0NiwgMzMwNTAsIDMzMDU1LCAzMzA2MiwgMzMwNjksIDMzMDc0LCAzMzA3OSwgMzMwODMsIDMzMDg5LCAKLSAgICAzMzA5NSwgMzMxMDAsIDMzMTA1LCAzMzExMCwgMzMxMTYsIDMzMTIxLCAzMzEyNywgMzMxMzIsIDMzMTM4LCAzMzE0NCwgCi0gICAgMzMxNTAsIDMzMTU3LCAzMzE2NCwgMzMxNzEsIDMzMTc4LCAzMzE4NSwgMzMxOTIsIDMzMTk3LCAzMzIwNSwgMzMyMTQsIAotICAgIDMzMjIzLCAzMzIzMiwgMzMyNDEsIDMzMjUwLCAzMzI1OSwgMzMyNzEsIDMzMjgwLCAzMzI4OSwgMzMyOTgsIDMzMzA1LCAKLSAgICAzMzMxMCwgMzMzMTcsIDMzMzI1LCAzMzMzMywgMzMzNDAsIDMzMzQ3LCAzMzM1NCwgMzMzNjEsIDMzMzY5LCAzMzM3OCwgCi0gICAgMzMzODcsIDMzMzk2LCAzMzQwNSwgMzM0MTQsIDMzNDIzLCAzMzQzMiwgMzM0NDEsIDMzNDUwLCAzMzQ1OSwgMzM0NjgsIAotICAgIDMzNDc3LCAzMzQ4NiwgMzM0OTUsIDMzNTAzLCAzMzUxMiwgMzM1MjMsIDMzNTMxLCAzMzU0MCwgMzM1NTEsIDMzNTYwLCAKLSAgICAzMzU2OSwgMzM1NzgsIDMzNTg3LCAzMzU5NSwgMzM2MDQsIDMzNjExLCAzMzYxNiwgMzM2MjQsIDMzNjI5LCAzMzYzNiwgCi0gICAgMzM2NDEsIDMzNjUwLCAzMzY1NiwgMzM2NjMsIDMzNjcwLCAzMzY3NSwgMzM2ODAsIDMzNjg4LCAzMzY5NiwgMzM3MDUsIAotICAgIDMzNzE0LCAzMzcxOSwgMzM3MjYsIDMzNzM3LCAzMzc0NSwgMzM3NTQsIDMzNzYwLCAzMzc2NiwgMzM3NzEsIDMzNzc4LCAKLSAgICAzMzc4MywgMzM3OTIsIDMzNzk3LCAzMzgwMiwgMzM4MDcsIDMzODE0LCAzMzgyMSwgMzM4MjYsIDMzODM1LCAzMzg0MywgCi0gICAgMzM4NDgsIDMzODUzLCAzMzg2MCwgMzM4NjcsIDMzODcxLCAzMzg3NSwgMzM4NzgsIDMzODgxLCAzMzg4NCwgMzM4ODcsIAotICAgIDMzODkwLCAzMzg5MywgMzM5MDAsIDMzOTAzLCAzMzkwNiwgMzM5MTEsIDMzOTE1LCAzMzkxOSwgMzM5MjMsIDMzOTI3LCAKLSAgICAzMzkzMSwgMzM5NDAsIDMzOTQ2LCAzMzk1MiwgMzM5NTgsIDMzOTY2LCAzMzk3NCwgMzM5ODAsIDMzOTg2LCAzMzk5MywgCi0gICAgMzM5OTksIDM0MDA0LCAzNDAxMCwgMzQwMTYsIDM0MDIyLCAzNDAyOSwgMzQwMzUsIDM0MDQzLCAzNDA0OSwgMzQwNTYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDYyLCAzNDA2OSwgCi0gICAgMzQwNzYsIDM0MDgxLCAzNDA5MCwgMzQwOTgsIDM0MTA2LCAzNDExMywgMzQxMjAsIDM0MTI3LCAzNDEzNCwgMzQxNDIsIAotICAgIDM0MTUwLCAzNDE2MCwgMzQxNzAsIDM0MTc4LCAzNDE4NiwgMzQxOTQsIDM0MjAyLCAzNDIxMSwgMzQyMjAsIDM0MjI4LCAKLSAgICAzNDIzNiwgMzQyNDUsIDM0MjU0LCAzNDI2NCwgMzQyNzQsIDM0MjgzLCAzNDI5MiwgMzQzMDAsIDM0MzA4LCAzNDMxNiwgCi0gICAgMzQzMjQsIDM0MzM0LCAzNDM0NCwgMzQzNTIsIDM0MzYwLCAzNDM2OCwgMzQzNzYsIDM0Mzg0LCAzNDM5MiwgMzQ0MDAsIAotICAgIDM0NDA4LCAzNDQxNiwgMzQ0MjQsIDM0NDMyLCAzNDQ0MCwgMzQ0NDksIDM0NDU4LCAzNDQ2NywgMzQ0NzYsIDM0NDg2LCAKLSAgICAzNDQ5NiwgMzQ1MDMsIDM0NTEwLCAzNDUxOCwgMzQ1MjYsIDM0NTM1LCAzNDU0NCwgMzQ1NTIsIDM0NTYwLCAzNDU3MiwgCi0gICAgMzQ1ODQsIDM0NTkzLCAzNDYwMiwgMzQ2MTEsIDM0NjIwLCAzNDYyNywgMzQ2MzQsIDM0NjQyLCAzNDY1MCwgMzQ2NTgsIAotICAgIDM0NjY2LCAzNDY3NCwgMzQ2ODIsIDM0NjkwLCAzNDY5OCwgMzQ3MDcsIDM0NzE2LCAzNDcyNSwgMzQ3MzQsIDM0NzQzLCAKLSAgICAzNDc1MiwgMzQ3NjIsIDM0NzcyLCAzNDc4MiwgMzQ3OTIsIDM0ODAxLCAzNDgxMCwgMzQ4MTcsIDM0ODI0LCAzNDgzMiwgCi0gICAgMzQ4NDAsIDM0ODQ4LCAzNDg1NiwgMzQ4NjQsIDM0ODcyLCAzNDg4NCwgMzQ4OTYsIDM0OTA1LCAzNDkxNCwgMzQ5MjIsIAotICAgIDM0OTMwLCAzNDkzOCwgMzQ5NDYsIDM0OTU3LCAzNDk2OCwgMzQ5NzksIDM0OTkwLCAzNTAwMiwgMzUwMTQsIDM1MDIyLCAKLSAgICAzNTAzMCwgMzUwMzgsIDM1MDQ2LCAzNTA1NSwgMzUwNjQsIDM1MDczLCAzNTA4MiwgMzUwOTAsIDM1MDk4LCAzNTEwNiwgCi0gICAgMzUxMTQsIDM1MTIyLCAzNTEzMCwgMzUxMzksIDM1MTQ4LCAzNTE1OCwgMzUxNjgsIDM1MTc1LCAzNTE4MiwgMzUxOTAsIAotICAgIDM1MTk4LCAzNTIwNiwgMzUyMTQsIDM1MjIxLCAzNTIyOCwgMzUyMzYsIDM1MjQ0LCAzNTI1MiwgMzUyNjAsIDM1MjY4LCAKLSAgICAzNTI3NiwgMzUyODQsIDM1MjkyLCAzNTMwMCwgMzUzMDgsIDM1MzE2LCAzNTMyNCwgMzUzMzIsIDM1MzQwLCAzNTM0OCwgCi0gICAgMzUzNTYsIDM1MzY1LCAzNTM3NCwgMzUzODMsIDM1MzkxLCAzNTQwMCwgMzU0MDksIDM1NDE4LCAzNTQyNywgMzU0MzcsIAotICAgIDM1NDQ2LCAzNTQ1MywgMzU0NTgsIDM1NDY1LCAzNTQ3MiwgMzU0ODAsIDM1NDg4LCAzNTQ5NywgMzU1MDYsIDM1NTE2LCAKLSAgICAzNTUyNiwgMzU1MzcsIDM1NTQ4LCAzNTU1NywgMzU1NjYsIDM1NTc2LCAzNTU4NiwgMzU1OTUsIDM1NjA0LCAzNTYxNCwgCi0gICAgMzU2MjQsIDM1NjM1LCAzNTY0NiwgMzU2NTUsIDM1NjY0LCAzNTY3NCwgMzU2ODQsIDM1NjkxLCAzNTY5OCwgMzU3MDYsIAotICAgIDM1NzE0LCAzNTcyMCwgMzU3MjYsIDM1NzM1LCAzNTc0NCwgMzU3NTQsIDM1NzY0LCAzNTc3NSwgMzU3ODYsIDM1Nzk1LCAKLSAgICAzNTgwNCwgMzU4MTQsIDM1ODI0LCAzNTgzMywgMzU4NDIsIDM1ODUwLCAzNTg1OCwgMzU4NjUsIDM1ODcyLCAzNTg4MCwgCi0gICAgMzU4ODgsIDM1ODk3LCAzNTkwNiwgMzU5MTYsIDM1OTI2LCAzNTkzNywgMzU5NDgsIDM1OTU3LCAzNTk2NiwgMzU5NzYsIAotICAgIDM1OTg2LCAzNTk5NSwgMzYwMDQsIDM2MDE0LCAzNjAyNCwgMzYwMzUsIDM2MDQ2LCAzNjA1NSwgMzYwNjQsIDM2MDc0LCAKLSAgICAzNjA4NCwgMzYwOTEsIDM2MDk4LCAzNjEwNiwgMzYxMTQsIDM2MTIzLCAzNjEzMiwgMzYxNDIsIDM2MTUyLCAzNjE2MywgCi0gICAgMzYxNzQsIDM2MTgzLCAzNjE5MiwgMzYyMDIsIDM2MjEyLCAzNjIyMCwgMzYyMjgsIDM2MjM2LCAzNjI0NCwgMzYyNTMsIAotICAgIDM2MjYyLCAzNjI2OSwgMzYyNzYsIDM2MjgzLCAzNjI5MCwgMzYyOTcsIDM2MzA0LCAzNjMxMiwgMzYzMjAsIDM2MzI4LCAKLSAgICAzNjMzNiwgMzYzNDcsIDM2MzU4LCAzNjM2OSwgMzYzODAsIDM2MzkxLCAzNjQwMiwgMzY0MTAsIDM2NDE4LCAzNjQyOSwgCi0gICAgMzY0NDAsIDM2NDUxLCAzNjQ2MiwgMzY0NzMsIDM2NDg0LCAzNjQ5MiwgMzY1MDAsIDM2NTExLCAzNjUyMiwgMzY1MzMsIDAsIAotICAgIDAsIDM2NTQ0LCAzNjU1MiwgMzY1NjAsIDM2NTcxLCAzNjU4MiwgMzY1OTMsIDAsIDAsIDM2NjA0LCAzNjYxMiwgMzY2MjAsIAotICAgIDM2NjMxLCAzNjY0MiwgMzY2NTMsIDM2NjY0LCAzNjY3NSwgMzY2ODYsIDM2Njk0LCAzNjcwMiwgMzY3MTMsIDM2NzI0LCAKLSAgICAzNjczNSwgMzY3NDYsIDM2NzU3LCAzNjc2OCwgMzY3NzYsIDM2Nzg0LCAzNjc5NSwgMzY4MDYsIDM2ODE3LCAzNjgyOCwgCi0gICAgMzY4MzksIDM2ODUwLCAzNjg1OCwgMzY4NjYsIDM2ODc3LCAzNjg4OCwgMzY4OTksIDM2OTEwLCAzNjkyMSwgMzY5MzIsIAotICAgIDM2OTQwLCAzNjk0OCwgMzY5NTksIDM2OTcwLCAzNjk4MSwgMCwgMCwgMzY5OTIsIDM3MDAwLCAzNzAwOCwgMzcwMTksIAotICAgIDM3MDMwLCAzNzA0MSwgMCwgMCwgMzcwNTIsIDM3MDYwLCAzNzA2OCwgMzcwNzksIDM3MDkwLCAzNzEwMSwgMzcxMTIsIAotICAgIDM3MTIzLCAwLCAzNzEzNCwgMCwgMzcxNDIsIDAsIDM3MTUzLCAwLCAzNzE2NCwgMzcxNzUsIDM3MTgzLCAzNzE5MSwgCi0gICAgMzcyMDIsIDM3MjEzLCAzNzIyNCwgMzcyMzUsIDM3MjQ2LCAzNzI1NywgMzcyNjUsIDM3MjczLCAzNzI4NCwgMzcyOTUsIAotICAgIDM3MzA2LCAzNzMxNywgMzczMjgsIDM3MzM5LCAzNzM0NywgMzczNTUsIDM3MzYzLCAzNzM3MSwgMzczNzksIDM3Mzg3LCAKLSAgICAzNzM5NSwgMzc0MDMsIDM3NDExLCAzNzQxOSwgMzc0MjcsIDM3NDM1LCAzNzQ0MywgMCwgMCwgMzc0NTEsIDM3NDYyLCAKLSAgICAzNzQ3MywgMzc0ODcsIDM3NTAxLCAzNzUxNSwgMzc1MjksIDM3NTQzLCAzNzU1NywgMzc1NjgsIDM3NTc5LCAzNzU5MywgCi0gICAgMzc2MDcsIDM3NjIxLCAzNzYzNSwgMzc2NDksIDM3NjYzLCAzNzY3NCwgMzc2ODUsIDM3Njk5LCAzNzcxMywgMzc3MjcsIAotICAgIDM3NzQxLCAzNzc1NSwgMzc3NjksIDM3NzgwLCAzNzc5MSwgMzc4MDUsIDM3ODE5LCAzNzgzMywgMzc4NDcsIDM3ODYxLCAKLSAgICAzNzg3NSwgMzc4ODYsIDM3ODk3LCAzNzkxMSwgMzc5MjUsIDM3OTM5LCAzNzk1MywgMzc5NjcsIDM3OTgxLCAzNzk5MiwgCi0gICAgMzgwMDMsIDM4MDE3LCAzODAzMSwgMzgwNDUsIDM4MDU5LCAzODA3MywgMzgwODcsIDM4MDk1LCAzODEwMywgMzgxMTQsIAotICAgIDM4MTIyLCAwLCAzODEzMywgMzgxNDEsIDM4MTUyLCAzODE2MCwgMzgxNjgsIDM4MTc2LCAzODE4NCwgMzgxOTIsIDM4MTk1LCAKLSAgICAzODE5OCwgMzgyMDEsIDM4MjA0LCAzODIxMCwgMzgyMjEsIDM4MjI5LCAwLCAzODI0MCwgMzgyNDgsIDM4MjU5LCAzODI2NywgCi0gICAgMzgyNzUsIDM4MjgzLCAzODI5MSwgMzgyOTksIDM4MzA1LCAzODMxMSwgMzgzMTcsIDM4MzI1LCAzODMzMywgMzgzNDQsIDAsIAotICAgIDAsIDM4MzU1LCAzODM2MywgMzgzNzQsIDM4MzgyLCAzODM5MCwgMzgzOTgsIDAsIDM4NDA2LCAzODQxMiwgMzg0MTgsIAotICAgIDM4NDI0LCAzODQzMiwgMzg0NDAsIDM4NDUxLCAzODQ2MiwgMzg0NzAsIDM4NDc4LCAzODQ4NiwgMzg0OTcsIDM4NTA1LCAKLSAgICAzODUxMywgMzg1MjEsIDM4NTI5LCAzODUzNywgMzg1NDMsIDM4NTQ5LCAwLCAwLCAzODU1MiwgMzg1NjMsIDM4NTcxLCAwLCAKLSAgICAzODU4MiwgMzg1OTAsIDM4NjAxLCAzODYwOSwgMzg2MTcsIDM4NjI1LCAzODYzMywgMzg2NDEsIDM4NjQ0LCAwLCAzODY0NywgCi0gICAgMzg2NTEsIDM4NjU1LCAzODY1OSwgMzg2NjMsIDM4NjY3LCAzODY3MSwgMzg2NzUsIDM4Njc5LCAzODY4MywgMzg2ODcsIAotICAgIDM4NjkxLCAzODY5NywgMzg3MDMsIDM4NzA5LCAzODcxMiwgMzg3MTUsIDM4NzE3LCAzODcyMSwgMzg3MjUsIDM4NzI5LCAKLSAgICAzODczMywgMzg3MzUsIDM4NzM5LCAzODc0MywgMzg3NDksIDM4NzU1LCAzODc2MiwgMzg3NjksIDM4Nzc0LCAzODc3OSwgCi0gICAgMzg3ODUsIDM4NzkxLCAzODc5MywgMzg3OTYsIDM4Nzk4LCAzODgwMiwgMzg4MDYsIDM4ODEwLCAzODgxMywgMzg4MTcsIAotICAgIDM4ODIxLCAzODgyNSwgMzg4MjksIDM4ODMzLCAzODgzOSwgMzg4NDMsIDM4ODQ3LCAzODg1MywgMzg4NTgsIDM4ODY1LCAKLSAgICAzODg2NywgMzg4NzAsIDM4ODc0LCAzODg3OCwgMzg4ODMsIDM4ODg5LCAzODg5MSwgMzg5MDAsIDM4OTA5LCAzODkxMiwgCi0gICAgMzg5MTYsIDM4OTE4LCAzODkyMCwgMzg5MjIsIDM4OTI1LCAzODkzMSwgMzg5MzMsIDM4OTM3LCAzODk0MSwgMzg5NDgsIAotICAgIDM4OTU1LCAzODk1OSwgMzg5NjQsIDM4OTY5LCAzODk3NCwgMzg5NzksIDM4OTgzLCAzODk4NywgMzg5OTAsIDM4OTk0LCAKLSAgICAzODk5OCwgMzkwMDUsIDM5MDEwLCAzOTAxNCwgMzkwMTgsIDM5MDIzLCAzOTAyNywgMzkwMzEsIDM5MDM2LCAzOTA0MSwgCi0gICAgMzkwNDUsIDM5MDQ5LCAzOTA1MywgMzkwNTUsIDM5MDYwLCAzOTA2NSwgMzkwNjksIDM5MDczLCAzOTA3NywgMzkwODEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDM5MDg1LCAzOTA5MSwgMzkwOTcsIDM5MTA0LCAzOTExMSwgMzkxMTYsIDM5MTIxLCAzOTEyNSwgMCwgMCwgCi0gICAgMzkxMzEsIDM5MTM0LCAzOTEzNywgMzkxNDAsIDM5MTQzLCAzOTE0NiwgMzkxNDksIDM5MTUzLCAzOTE1NywgMzkxNjIsIAotICAgIDM5MTY3LCAzOTE3MiwgMzkxNzksIDM5MTgzLCAzOTE4NiwgMzkxODksIDM5MTkyLCAzOTE5NSwgMzkxOTgsIDM5MjAxLCAKLSAgICAzOTIwNCwgMzkyMDcsIDM5MjEwLCAzOTIxNCwgMzkyMTgsIDM5MjIzLCAzOTIyOCwgMCwgMzkyMzMsIDM5MjM5LCAzOTI0NSwgCi0gICAgMzkyNTEsIDM5MjU4LCAzOTI2NSwgMzkyNzIsIDM5Mjc5LCAzOTI4NSwgMzkyOTEsIDM5Mjk4LCAzOTMwNSwgMzkzMTIsIDAsIAotICAgIDAsIDAsIDM5MzE5LCAzOTMyMiwgMzkzMjUsIDM5MzI4LCAzOTMzMywgMzkzMzYsIDM5MzM5LCAzOTM0MiwgMzkzNDUsIAotICAgIDM5MzQ4LCAzOTM1MSwgMzkzNTUsIDM5MzU4LCAzOTM2MSwgMzkzNjQsIDM5MzY3LCAzOTM3MCwgMzkzNzUsIDM5Mzc4LCAKLSAgICAzOTM4MSwgMzkzODQsIDM5Mzg3LCAzOTM5MCwgMzkzOTUsIDM5Mzk4LCAzOTQwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk0MDYsIDM5NDExLCAzOTQxNiwgMzk0MjMsIAotICAgIDM5NDMxLCAzOTQzNiwgMzk0NDEsIDM5NDQ1LCAzOTQ0OSwgMzk0NTQsIDM5NDYxLCAzOTQ2OCwgMzk0NzIsIDM5NDc3LCAKLSAgICAzOTQ4MiwgMzk0ODcsIDM5NDkyLCAzOTQ5OSwgMzk1MDQsIDM5NTA5LCAzOTUxNCwgMzk1MjMsIDM5NTMwLCAzOTUzNywgCi0gICAgMzk1NDEsIDM5NTQ2LCAzOTU1MiwgMzk1NTcsIDM5NTY0LCAzOTU3MywgMzk1ODIsIDM5NTg2LCAzOTU5MCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk1OTQsIDM5NTk4LCAzOTYwNiwgMzk2MTAsIDM5NjE0LCAKLSAgICAzOTYxOSwgMzk2MjMsIDM5NjI3LCAzOTYzMSwgMzk2MzMsIDM5NjM3LCAzOTY0MSwgMzk2NDUsIDM5NjUwLCAzOTY1NCwgCi0gICAgMzk2NTgsIDM5NjY2LCAzOTY2OSwgMzk2NzMsIDM5Njc2LCAzOTY3OSwgMzk2ODUsIDM5Njg5LCAzOTY5MiwgMzk2OTgsIAotICAgIDM5NzAyLCAzOTcwNiwgMzk3MTAsIDM5NzEzLCAzOTcxNywgMzk3MjAsIDM5NzI0LCAzOTcyNiwgMzk3MjksIDM5NzMyLCAKLSAgICAzOTczNiwgMzk3MzgsIDM5NzQyLCAzOTc0NSwgMzk3NDgsIDM5NzUzLCAzOTc1OCwgMzk3NjUsIDM5NzY4LCAzOTc3MSwgCi0gICAgMzk3NzUsIDM5NzgwLCAzOTc4MywgMzk3ODYsIDM5Nzg5LCAzOTc5MywgMzk3OTgsIDM5ODAxLCAzOTgwNCwgMzk4MDYsIAotICAgIDM5ODA5LCAzOTgxMiwgMzk4MTUsIDM5ODE5LCAzOTgyNCwgMzk4MjcsIDM5ODMxLCAzOTgzNSwgMzk4MzksIDM5ODQzLCAKLSAgICAzOTg0OCwgMzk4NTQsIDM5ODU5LCAzOTg2NCwgMzk4NzAsIDM5ODc1LCAzOTg4MCwgMzk4ODQsIDM5ODg4LCAzOTg5MywgCi0gICAgMzk4OTcsIDM5OTAxLCAzOTkwNCwgMzk5MDYsIDM5OTExLCAzOTkxNywgMzk5MjQsIDM5OTMxLCAzOTkzOCwgMzk5NDUsIAotICAgIDM5OTUyLCAzOTk1OSwgMzk5NjYsIDM5OTczLCAzOTk4MSwgMzk5ODgsIDM5OTk2LCA0MDAwMywgNDAwMTAsIDQwMDE4LCAKLSAgICA0MDAyNiwgNDAwMzEsIDQwMDM2LCA0MDA0MSwgNDAwNDYsIDQwMDUxLCA0MDA1NiwgNDAwNjEsIDQwMDY2LCA0MDA3MSwgCi0gICAgNDAwNzYsIDQwMDgyLCA0MDA4OCwgNDAwOTQsIDQwMTAwLCA0MDEwNywgNDAxMTUsIDQwMTIyLCA0MDEyOCwgNDAxMzQsIAotICAgIDQwMTQwLCA0MDE0NiwgNDAxNTIsIDQwMTU4LCA0MDE2NCwgNDAxNzAsIDQwMTc2LCA0MDE4MywgNDAxOTAsIDQwMTk3LCAKLSAgICA0MDIwNCwgNDAyMTIsIDQwMjIxLCA0MDIyOSwgNDAyNDAsIDQwMjQ4LCA0MDI1NiwgNDAyNjUsIDQwMjcyLCA0MDI4MSwgCi0gICAgNDAyOTAsIDQwMjk4LCA0MDMwNywgMCwgMCwgMCwgMCwgMCwgMCwgNDAzMTUsIDQwMzE3LCA0MDMyMCwgNDAzMjIsIDQwMzI1LCAKLSAgICA0MDMyOCwgNDAzMzEsIDQwMzM2LCA0MDM0MSwgNDAzNDYsIDQwMzUxLCA0MDM1NSwgNDAzNTksIDQwMzYzLCA0MDM2NywgCi0gICAgNDAzNzIsIDQwMzc4LCA0MDM4MywgNDAzODksIDQwMzk0LCA0MDM5OSwgNDA0MDQsIDQwNDEwLCA0MDQxNSwgNDA0MjEsIAotICAgIDQwNDI3LCA0MDQzMSwgNDA0MzUsIDQwNDQwLCA0MDQ0NSwgNDA0NTAsIDQwNDU1LCA0MDQ2MCwgNDA0NjgsIDQwNDc2LCAKLSAgICA0MDQ4NCwgNDA0OTIsIDQwNDk5LCA0MDUwNywgNDA1MTQsIDQwNTIxLCA0MDUzMCwgNDA1NDIsIDQwNTQ4LCA0MDU1NCwgCi0gICAgNDA1NjIsIDQwNTcwLCA0MDU3OSwgNDA1ODgsIDQwNTk2LCA0MDYwNCwgNDA2MTMsIDQwNjIyLCA0MDYyNywgNDA2MzUsIAotICAgIDQwNjQwLCA0MDY0NSwgNDA2NTEsIDQwNjU2LCA0MDY2MiwgNDA2NjksIDQwNjc2LCA0MDY4MSwgNDA2ODcsIDQwNjkyLCAKLSAgICA0MDY5NSwgNDA2OTksIDQwNzAyLCA0MDcwNiwgNDA3MTAsIDQwNzE0LCA0MDcyMCwgNDA3MjYsIDQwNzMyLCA0MDczOCwgCi0gICAgNDA3NDIsIDQwNzQ2LCA0MDc1MCwgNDA3NTQsIDQwNzYwLCA0MDc2NiwgNDA3NzAsIDQwNzc1LCA0MDc3OSwgNDA3ODQsIAotICAgIDQwNzg5LCA0MDc5NCwgNDA3OTcsIDQwODAxLCA0MDgwNCwgNDA4MDgsIDQwODE1LCA0MDgyMywgNDA4MzQsIDQwODQ1LCAKLSAgICA0MDg1MCwgNDA4NTksIDQwODY2LCA0MDg3NSwgNDA4ODQsIDQwODg4LCA0MDg5NCwgNDA5MDIsIDQwOTA2LCA0MDkxMSwgCi0gICAgNDA5MTYsIDQwOTIyLCA0MDkyOCwgNDA5MzQsIDQwOTQxLCA0MDk0NSwgNDA5NDksIDQwOTU0LCA0MDk1NywgNDA5NTksIAotICAgIDQwOTYzLCA0MDk2NywgNDA5NzUsIDQwOTc5LCA0MDk4MSwgNDA5ODMsIDQwOTg3LCA0MDk5NSwgNDEwMDAsIDQxMDA2LCAKLSAgICA0MTAxNiwgNDEwMjMsIDQxMDI4LCA0MTAzMiwgNDEwMzYsIDQxMDQwLCA0MTA0MywgNDEwNDYsIDQxMDQ5LCA0MTA1MywgCi0gICAgNDEwNTcsIDQxMDYxLCA0MTA2NSwgNDEwNjksIDQxMDcyLCA0MTA3NiwgNDEwODAsIDQxMDgzLCA0MTA4NSwgNDEwODgsIAotICAgIDQxMDkwLCA0MTA5NCwgNDEwOTgsIDQxMTAwLCA0MTEwNiwgNDExMDksIDQxMTE0LCA0MTExOCwgNDExMjIsIDQxMTI0LCAKLSAgICA0MTEyNiwgNDExMjgsIDQxMTMxLCA0MTEzNSwgNDExMzksIDQxMTQzLCA0MTE0NywgNDExNTEsIDQxMTU3LCA0MTE2MywgCi0gICAgNDExNjUsIDQxMTY3LCA0MTE2OSwgNDExNzEsIDQxMTc0LCA0MTE3NiwgNDExODAsIDQxMTgyLCA0MTE4NiwgNDExODksIAotICAgIDQxMTk1LCA0MTE5OSwgNDEyMDMsIDQxMjA2LCA0MTIwOSwgNDEyMTMsIDQxMjE5LCA0MTIyMywgNDEyMzMsIDQxMjQzLCAKLSAgICA0MTI0NywgNDEyNTMsIDQxMjU5LCA0MTI2MiwgNDEyNjYsIDQxMjY5LCA0MTI3NCwgNDEyNzgsIDQxMjg0LCA0MTI4OCwgCi0gICAgNDEzMDAsIDQxMzA4LCA0MTMxMiwgNDEzMTYsIDQxMzIyLCA0MTMyNiwgNDEzMjksIDQxMzMxLCA0MTMzNCwgNDEzMzgsIAotICAgIDQxMzQyLCA0MTM0OSwgNDEzNTMsIDQxMzU3LCA0MTM2MSwgNDEzNjQsIDQxMzY5LCA0MTM3NCwgNDEzNzksIDQxMzg0LCAKLSAgICA0MTM4OSwgNDEzOTQsIDQxNDAyLCA0MTQxMCwgNDE0MTQsIDQxNDE4LCA0MTQyMCwgNDE0MjUsIDQxNDI5LCA0MTQzMywgCi0gICAgNDE0NDEsIDQxNDQ5LCA0MTQ1NSwgNDE0NjEsIDQxNDcwLCA0MTQ3OSwgNDE0ODQsIDQxNDg5LCA0MTQ5NywgNDE1MDUsIAotICAgIDQxNTA3LCA0MTUwOSwgNDE1MTQsIDQxNTE5LCA0MTUyNSwgNDE1MzEsIDQxNTM3LCA0MTU0MywgNDE1NDcsIDQxNTUxLCAKLSAgICA0MTU1OCwgNDE1NjUsIDQxNTcxLCA0MTU3NywgNDE1ODcsIDQxNTk3LCA0MTYwNSwgNDE2MTMsIDQxNjE1LCA0MTYxOSwgCi0gICAgNDE2MjMsIDQxNjI4LCA0MTYzMywgNDE2NDAsIDQxNjQ3LCA0MTY1MCwgNDE2NTMsIDQxNjU2LCA0MTY1OSwgNDE2NjIsIAotICAgIDQxNjY3LCA0MTY3MSwgNDE2NzYsIDQxNjgxLCA0MTY4NCwgNDE2ODcsIDQxNjkwLCA0MTY5MywgNDE2OTYsIDQxNzAwLCAKLSAgICA0MTcwMywgNDE3MDYsIDQxNzA5LCA0MTcxMiwgNDE3MTQsIDQxNzE2LCA0MTcxOCwgNDE3MjAsIDQxNzI4LCA0MTczNiwgCi0gICAgNDE3NDIsIDQxNzQ2LCA0MTc1MiwgNDE3NjIsIDQxNzY4LCA0MTc3NCwgNDE3ODAsIDQxNzg4LCA0MTc5NiwgNDE4MDcsIAotICAgIDQxODExLCA0MTgxNSwgNDE4MTcsIDQxODIzLCA0MTgyNSwgNDE4MjcsIDQxODI5LCA0MTgzMSwgNDE4MzcsIDQxODQwLCAKLSAgICA0MTg0NiwgNDE4NTIsIDQxODU2LCA0MTg2MCwgNDE4NjQsIDQxODY3LCA0MTg3MSwgNDE4NzUsIDQxODc3LCA0MTg4NiwgCi0gICAgNDE4OTUsIDQxOTAwLCA0MTkwNSwgNDE5MTEsIDQxOTE3LCA0MTkyMywgNDE5MjYsIDQxOTI5LCA0MTkzMiwgNDE5MzUsIAotICAgIDQxOTM3LCA0MTk0MiwgNDE5NDcsIDQxOTUyLCA0MTk1OCwgNDE5NjQsIDQxOTcyLCA0MTk4MCwgNDE5ODYsIDQxOTkyLCAKLSAgICA0MTk5OCwgNDIwMDQsIDQyMDEzLCA0MjAyMiwgNDIwMzEsIDQyMDQwLCA0MjA0OSwgNDIwNTgsIDQyMDY3LCA0MjA3NiwgCi0gICAgNDIwODUsIDQyMDk0LCA0MjEwMiwgNDIxMTQsIDQyMTI0LCA0MjEzOSwgNDIxNDIsIDQyMTQ3LCA0MjE1MywgNDIxNTksIAotICAgIDQyMTY2LCA0MjE4MCwgNDIxOTUsIDQyMjAxLCA0MjIwNywgNDIyMTQsIDQyMjIwLCA0MjIyOCwgNDIyMzQsIDQyMjQ3LCAKLSAgICA0MjI2MSwgNDIyNjYsIDQyMjcyLCA0MjI3OSwgNDIyODIsIDQyMjg1LCA0MjI4NywgNDIyOTAsIDQyMjkzLCA0MjI5NSwgCi0gICAgNDIyOTcsIDQyMzAxLCA0MjMwNCwgNDIzMDcsIDQyMzEwLCA0MjMxMywgNDIzMTgsIDQyMzIzLCA0MjMyOCwgNDIzMzMsIAotICAgIDQyMzM4LCA0MjM0MSwgNDIzNDMsIDQyMzQ1LCA0MjM0NywgNDIzNTEsIDQyMzU1LCA0MjM1OSwgNDIzNjUsIDQyMzcwLCAKLSAgICA0MjM3MiwgNDIzNzQsIDQyMzc5LCA0MjM4NCwgNDIzODksIDQyMzk0LCA0MjM5OSwgNDI0MDQsIDQyNDA2LCA0MjQwOCwgCi0gICAgNDI0MTcsIDQyNDIxLCA0MjQyOSwgNDI0MzgsIDQyNDQwLCA0MjQ0NSwgNDI0NTAsIDQyNDU4LCA0MjQ2MiwgNDI0NjQsIAotICAgIDQyNDY4LCA0MjQ3MCwgNDI0NzQsIDQyNDc4LCA0MjQ4MiwgNDI0ODQsIDQyNDg2LCA0MjQ4OCwgNDI0OTUsIDQyNTA0LCAKLSAgICA0MjUxMywgNDI1MjIsIDQyNTMxLCA0MjU0MCwgNDI1NDksIDQyNTU4LCA0MjU2NywgNDI1NzUsIDQyNTgzLCA0MjU5MiwgCi0gICAgNDI2MDEsIDQyNjEwLCA0MjYxOSwgNDI2MjcsIDQyNjM1LCA0MjY0NCwgNDI2NTMsIDQyNjYyLCA0MjY3MiwgNDI2ODEsIAotICAgIDQyNjkxLCA0MjcwMCwgNDI3MTAsIDQyNzE5LCA0MjcyOSwgNDI3MzksIDQyNzQ4LCA0Mjc1OCwgNDI3NjcsIDQyNzc3LCAKLSAgICA0Mjc4NiwgNDI3OTYsIDQyODA1LCA0MjgxNCwgNDI4MjMsIDQyODMyLCA0Mjg0MSwgNDI4NTEsIDQyODYwLCA0Mjg2OSwgCi0gICAgNDI4NzgsIDQyODg4LCA0Mjg5NywgNDI5MDYsIDQyOTE1LCA0MjkyNCwgNDI5MzQsIDQyOTQ0LCA0Mjk1MywgNDI5NjIsIAotICAgIDQyOTcwLCA0Mjk3OCwgNDI5ODUsIDQyOTkzLCA0MzAwMiwgNDMwMTMsIDQzMDIyLCA0MzAzMSwgNDMwNDAsIDQzMDQ3LCAKLSAgICA0MzA1NCwgNDMwNjEsIDQzMDcwLCA0MzA3OSwgNDMwODgsIDQzMDk3LCA0MzEwNCwgNDMxMDksIDQzMTE4LCA0MzEyMywgCi0gICAgNDMxMjYsIDQzMTM0LCA0MzEzNywgNDMxNDIsIDQzMTQ3LCA0MzE1MCwgNDMxNTMsIDQzMTYxLCA0MzE2NCwgNDMxNjksIAotICAgIDQzMTcyLCA0MzE3OSwgNDMxODQsIDQzMTkyLCA0MzE5NSwgNDMxOTgsIDQzMjAxLCA0MzIwNiwgNDMyMTEsIDQzMjE0LCAKLSAgICA0MzIxNywgNDMyMjUsIDQzMjI4LCA0MzIzNSwgNDMyNDIsIDQzMjQ2LCA0MzI1MCwgNDMyNTUsIDQzMjYwLCA0MzI2NiwgCi0gICAgNDMyNzEsIDQzMjc3LCA0MzI4MywgNDMyODgsIDQzMjk0LCA0MzMwMiwgNDMzMDgsIDQzMzE2LCA0MzMyNCwgNDMzMzAsIAotICAgIDQzMzM4LCA0MzM0NiwgNDMzNTUsIDQzMzYzLCA0MzM2OSwgNDMzNzcsIDQzMzg2LCA0MzM5NCwgNDMzOTgsIDQzNDAzLCAKLSAgICA0MzQxNiwgNDM0MjksIDQzNDMzLCA0MzQzNywgNDM0NDEsIDQzNDQ1LCA0MzQ1NSwgNDM0NTksIDQzNDY0LCA0MzQ2OSwgCi0gICAgNDM0NzQsIDQzNDc5LCA0MzQ4NCwgNDM0ODksIDQzNDk5LCA0MzUwOSwgNDM1MTcsIDQzNTI3LCA0MzUzNywgNDM1NDUsIAotICAgIDQzNTU1LCA0MzU2NSwgNDM1NzMsIDQzNTgzLCA0MzU5MywgNDM2MDEsIDQzNjA5LCA0MzYxOSwgNDM2MjksIDQzNjMyLCAKLSAgICA0MzYzNSwgNDM2MzgsIDQzNjQzLCA0MzY0NywgNDM2NTMsIDQzNjYwLCA0MzY2NywgNDM2NzUsIDQzNjgyLCA0MzY4NiwgCi0gICAgNDM2OTAsIDQzNjk0LCA0MzY5OCwgNDM3MDAsIDQzNzA0LCA0MzcwOCwgNDM3MTMsIDQzNzE4LCA0MzcyNSwgNDM3MzIsIAotICAgIDQzNzM1LCA0Mzc0MiwgNDM3NDQsIDQzNzQ2LCA0Mzc1MCwgNDM3NTQsIDQzNzU5LCA0Mzc2NSwgNDM3NzEsIDQzNzc3LCAKLSAgICA0Mzc4MywgNDM3OTIsIDQzODAxLCA0MzgxMCwgNDM4MTQsIDQzODE2LCA0MzgyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDM4MjcsIDQzODMxLCA0MzgzOCwgNDM4NDUsIDQzODUyLCA0Mzg1OSwgNDM4NjMsIDQzODY3LCAKLSAgICA0Mzg3MSwgNDM4NzUsIDQzODgwLCA0Mzg4NiwgNDM4OTEsIDQzODk3LCA0MzkwMywgNDM5MDksIDQzOTE1LCA0MzkyMywgCi0gICAgNDM5MzAsIDQzOTM3LCA0Mzk0NCwgNDM5NTEsIDQzOTU2LCA0Mzk2MiwgNDM5NzEsIDQzOTc1LCA0Mzk4MiwgNDM5ODYsIAotICAgIDQzOTkwLCA0Mzk5NiwgNDQwMDIsIDQ0MDA4LCA0NDAxNCwgNDQwMTgsIDQ0MDIyLCA0NDAyNSwgNDQwMjgsIDQ0MDMyLCAKLSAgICA0NDAzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDQwNDYsIDQ0MDQ5LCA0NDA1MywgNDQwNTcsIDQ0MDYzLCA0NDA2OSwgNDQwNzUsIDQ0MDgzLCA0NDA5MCwgCi0gICAgNDQwOTQsIDQ0MTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0NDEwNywgNDQxMTAsIDQ0MTEzLCA0NDExNiwgNDQxMTksIDQ0MTIyLCA0NDEyNSwgNDQxMjgsIDQ0MTMxLCA0NDEzNCwgCi0gICAgNDQxMzgsIDQ0MTQyLCA0NDE0NiwgNDQxNTAsIDQ0MTU0LCA0NDE1OCwgNDQxNjIsIDQ0MTY2LCA0NDE3MCwgNDQxNzQsIAotICAgIDQ0MTc4LCA0NDE4MSwgNDQxODQsIDQ0MTg3LCA0NDE5MCwgNDQxOTMsIDQ0MTk2LCA0NDE5OSwgNDQyMDIsIDQ0MjA1LCAKLSAgICA0NDIwOSwgNDQyMTMsIDQ0MjE3LCA0NDIyMSwgNDQyMjUsIDQ0MjI5LCA0NDIzMywgNDQyMzcsIDQ0MjQxLCA0NDI0NSwgCi0gICAgNDQyNDksIDQ0MjU1LCA0NDI2MSwgNDQyNjcsIDQ0Mjc0LCA0NDI4MSwgNDQyODgsIDQ0Mjk1LCA0NDMwMiwgNDQzMDksIAotICAgIDQ0MzE2LCA0NDMyMywgNDQzMzAsIDQ0MzM3LCA0NDM0NCwgNDQzNTEsIDQ0MzU4LCA0NDM2NSwgNDQzNzIsIDQ0Mzc5LCAKLSAgICA0NDM4NiwgNDQzOTEsIDQ0Mzk3LCA0NDQwMywgNDQ0MDksIDQ0NDE0LCA0NDQyMCwgNDQ0MjYsIDQ0NDMyLCA0NDQzNywgCi0gICAgNDQ0NDMsIDQ0NDQ5LCA0NDQ1NCwgNDQ0NTksIDQ0NDY1LCA0NDQ3MCwgNDQ0NzYsIDQ0NDgyLCA0NDQ4NywgNDQ0OTMsIAotICAgIDQ0NDk5LCA0NDUwNCwgNDQ1MTAsIDQ0NTE2LCA0NDUyMiwgNDQ1MjgsIDQ0NTM0LCA0NDUzOSwgNDQ1NDUsIDQ0NTUxLCAKLSAgICA0NDU1NywgNDQ1NjIsIDQ0NTY4LCA0NDU3NCwgNDQ1ODAsIDQ0NTg1LCA0NDU5MSwgNDQ1OTcsIDQ0NjAyLCA0NDYwNywgCi0gICAgNDQ2MTMsIDQ0NjE4LCA0NDYyNCwgNDQ2MzAsIDQ0NjM1LCA0NDY0MSwgNDQ2NDcsIDQ0NjUyLCA0NDY1OCwgNDQ2NjQsIAotICAgIDQ0NjcwLCA0NDY3NiwgNDQ2ODIsIDQ0Njg3LCA0NDY5MywgNDQ2OTksIDQ0NzA1LCA0NDcxMCwgNDQ3MTYsIDQ0NzIyLCAKLSAgICA0NDcyOCwgNDQ3MzMsIDQ0NzM5LCA0NDc0NSwgNDQ3NTAsIDQ0NzU1LCA0NDc2MSwgNDQ3NjYsIDQ0NzcyLCA0NDc3OCwgCi0gICAgNDQ3ODMsIDQ0Nzg5LCA0NDc5NSwgNDQ4MDAsIDQ0ODA2LCA0NDgxMiwgNDQ4MTgsIDQ0ODI0LCA0NDgzMCwgNDQ4MzQsIAotICAgIDQ0ODM5LCA0NDg0NCwgNDQ4NDksIDQ0ODU0LCA0NDg1OSwgNDQ4NjQsIDQ0ODY5LCA0NDg3NCwgNDQ4NzksIDQ0ODg0LCAKLSAgICA0NDg4OCwgNDQ4OTIsIDQ0ODk2LCA0NDkwMCwgNDQ5MDQsIDQ0OTA4LCA0NDkxMiwgNDQ5MTYsIDQ0OTIwLCA0NDkyNSwgCi0gICAgNDQ5MzAsIDQ0OTM1LCA0NDk0MCwgNDQ5NDUsIDQ0OTUwLCA0NDk1OSwgNDQ5NjgsIDQ0OTc3LCA0NDk4NiwgNDQ5OTUsIAotICAgIDQ1MDA0LCA0NTAxMywgNDUwMjIsIDQ1MDI5LCA0NTAzNywgNDUwNDUsIDQ1MDUyLCA0NTA1OSwgNDUwNjcsIDQ1MDc1LCAKLSAgICA0NTA4MiwgNDUwODksIDQ1MDk3LCA0NTEwNSwgNDUxMTIsIDQ1MTE5LCA0NTEyNywgNDUxMzUsIDQ1MTQyLCA0NTE0OSwgCi0gICAgNDUxNTcsIDQ1MTY2LCA0NTE3NSwgNDUxODMsIDQ1MTkyLCA0NTIwMSwgNDUyMDgsIDQ1MjE1LCA0NTIyMywgNDUyMzIsIAotICAgIDQ1MjQxLCA0NTI0OSwgNDUyNTgsIDQ1MjY3LCA0NTI3NCwgNDUyODEsIDQ1MjkwLCA0NTI5OSwgNDUzMDcsIDQ1MzE1LCAKLSAgICA0NTMyNCwgNDUzMzMsIDQ1MzQwLCA0NTM0NywgNDUzNTYsIDQ1MzY1LCA0NTM3MywgNDUzODEsIDQ1MzkwLCA0NTM5OSwgCi0gICAgNDU0MDYsIDQ1NDEzLCA0NTQyMiwgNDU0MzEsIDQ1NDM5LCA0NTQ0OCwgNDU0NTcsIDQ1NDY1LCA0NTQ3NSwgNDU0ODUsIAotICAgIDQ1NDk1LCA0NTUwNSwgNDU1MTQsIDQ1NTIzLCA0NTUzMiwgNDU1NDEsIDQ1NTQ4LCA0NTU1NiwgNDU1NjQsIDQ1NTcyLCAKLSAgICA0NTU4MCwgNDU1ODUsIDQ1NTkwLCA0NTU5OSwgNDU2MDcsIDQ1NjE0LCA0NTYyMywgNDU2MzEsIDQ1NjM4LCA0NTY0NywgCi0gICAgNDU2NTUsIDQ1NjYyLCA0NTY3MSwgNDU2NzksIDQ1Njg2LCA0NTY5NSwgNDU3MDMsIDQ1NzEwLCA0NTcxOSwgNDU3MjcsIAotICAgIDQ1NzM0LCA0NTc0MywgNDU3NTEsIDQ1NzU4LCA0NTc2NywgNDU3NzUsIDQ1NzgyLCA0NTc5MSwgNDU3OTksIDQ1ODA2LCAKLSAgICA0NTgxNSwgNDU4MjQsIDQ1ODMzLCA0NTg0MiwgNDU4NTYsIDQ1ODcwLCA0NTg3NywgNDU4ODIsIDQ1ODg3LCA0NTg5MiwgCi0gICAgNDU4OTcsIDQ1OTAyLCA0NTkwNywgNDU5MTIsIDQ1OTE3LCA0NTkyNSwgNDU5MzMsIDQ1OTQxLCA0NTk0OSwgNDU5NTQsIAotICAgIDQ1OTYxLCA0NTk2OCwgNDU5NzUsIDQ1OTgwLCA0NTk4OCwgNDU5OTUsIDQ2MDAzLCA0NjAwNywgNDYwMTQsIDQ2MDIwLCAKLSAgICA0NjAyNywgNDYwMzEsIDQ2MDM3LCA0NjA0MywgNDYwNDksIDQ2MDUzLCA0NjA1NiwgNDYwNjAsIDQ2MDY0LCA0NjA3MSwgCi0gICAgNDYwNzcsIDQ2MDgzLCA0NjA4OSwgNDYwOTUsIDQ2MTA5LCA0NjExOSwgNDYxMzMsIDQ2MTQ3LCA0NjE1MywgNDYxNjMsIAotICAgIDQ2MTc3LCA0NjE4MCwgNDYxODMsIDQ2MTkwLCA0NjE5OCwgNDYyMDMsIDQ2MjA4LCA0NjIxNiwgNDYyMjgsIDQ2MjQwLCAKLSAgICA0NjI0OCwgNDYyNTIsIDQ2MjU2LCA0NjI1OSwgNDYyNjIsIDQ2MjY2LCA0NjI3MCwgNDYyNzMsIDQ2Mjc2LCA0NjI4MSwgCi0gICAgNDYyODYsIDQ2MjkyLCA0NjI5OCwgNDYzMDMsIDQ2MzA4LCA0NjMxNCwgNDYzMjAsIDQ2MzI1LCA0NjMzMCwgNDYzMzUsIAotICAgIDQ2MzQwLCA0NjM0NiwgNDYzNTIsIDQ2MzU3LCA0NjM2MiwgNDYzNjgsIDQ2Mzc0LCA0NjM3OSwgNDYzODQsIDQ2Mzg3LCAKLSAgICA0NjM5MCwgNDYzOTksIDQ2NDAxLCA0NjQwMywgNDY0MDYsIDQ2NDEwLCA0NjQxNiwgNDY0MTgsIDQ2NDIxLCA0NjQyOCwgCi0gICAgNDY0MzUsIDQ2NDQzLCA0NjQ1MSwgNDY0NjEsIDQ2NDc1LCA0NjQ4MCwgNDY0ODUsIDQ2NDg5LCA0NjQ5NCwgNDY1MDIsIAotICAgIDQ2NTEwLCA0NjUxOSwgNDY1MjgsIDQ2NTM3LCA0NjU0NiwgNDY1NTEsIDQ2NTU2LCA0NjU2MiwgNDY1NjgsIDQ2NTc0LCAKLSAgICA0NjU4MCwgNDY1ODMsIDQ2NTg5LCA0NjU5NSwgNDY2MDUsIDQ2NjE1LCA0NjYyMywgNDY2MzEsIDQ2NjQwLCA0NjY0OSwgCi0gICAgNDY2NTMsIDQ2NjYxLCA0NjY2OSwgNDY2NzcsIDQ2Njg1LCA0NjY5NCwgNDY3MDMsIDQ2NzEyLCA0NjcyMSwgNDY3MjYsIAotICAgIDQ2NzMxLCA0NjczNiwgNDY3NDEsIDQ2NzQ2LCA0Njc1MiwgNDY3NTgsIDQ2NzYzLCA0Njc2OSwgNDY3NzEsIDQ2NzczLCAKLSAgICA0Njc3NSwgNDY3NzcsIDQ2NzgwLCA0Njc4MywgNDY3ODUsIDQ2Nzg3LCA0Njc4OSwgNDY3OTMsIDQ2Nzk3LCA0Njc5OSwgCi0gICAgNDY4MDEsIDQ2ODA0LCA0NjgwNywgNDY4MTEsIDQ2ODE3LCA0NjgyMywgNDY4MjUsIDQ2ODMyLCA0NjgzNiwgNDY4NDEsIAotICAgIDQ2ODQ2LCA0Njg0OCwgNDY4NTgsIDQ2ODY0LCA0Njg3MCwgNDY4NzYsIDQ2ODgyLCA0Njg4OCwgNDY4OTQsIDQ2ODk5LCAKLSAgICA0NjkwMiwgNDY5MDUsIDQ2OTA4LCA0NjkxMCwgNDY5MTIsIDQ2OTE2LCA0NjkyMCwgNDY5MjUsIDQ2OTMwLCA0NjkzNSwgCi0gICAgNDY5MzgsIDQ2OTQyLCA0Njk0NywgNDY5NTAsIDQ2OTU0LCA0Njk1OSwgNDY5NjQsIDQ2OTY5LCA0Njk3NCwgNDY5NzksIAotICAgIDQ2OTg0LCA0Njk4OSwgNDY5OTQsIDQ2OTk5LCA0NzAwNCwgNDcwMDksIDQ3MDE0LCA0NzAyMCwgNDcwMjYsIDQ3MDMyLCAKLSAgICA0NzAzNCwgNDcwMzcsIDQ3MDM5LCA0NzA0MiwgNDcwNDQsIDQ3MDQ2LCA0NzA0OCwgNDcwNTAsIDQ3MDUyLCA0NzA1NCwgCi0gICAgNDcwNTYsIDQ3MDU4LCA0NzA2MCwgNDcwNjIsIDQ3MDY0LCA0NzA2NiwgNDcwNjgsIDQ3MDcwLCA0NzA3MiwgNDcwNzQsIAotICAgIDQ3MDc2LCA0NzA4MSwgNDcwODYsIDQ3MDkxLCA0NzA5NiwgNDcxMDEsIDQ3MTA2LCA0NzExMSwgNDcxMTYsIDQ3MTIxLCAKLSAgICA0NzEyNiwgNDcxMzEsIDQ3MTM2LCA0NzE0MSwgNDcxNDYsIDQ3MTUxLCA0NzE1NiwgNDcxNjEsIDQ3MTY2LCA0NzE3MSwgCi0gICAgNDcxNzYsIDQ3MTgwLCA0NzE4NCwgNDcxODgsIDQ3MTk0LCA0NzIwMCwgNDcyMDUsIDQ3MjEwLCA0NzIxNSwgNDcyMjAsIAotICAgIDQ3MjI1LCA0NzIzMCwgNDcyMzgsIDQ3MjQ2LCA0NzI1NCwgNDcyNjIsIDQ3MjcwLCA0NzI3OCwgNDcyODYsIDQ3Mjk0LCAKLSAgICA0NzMwMCwgNDczMDUsIDQ3MzEwLCA0NzMxNSwgNDczMTgsIDQ3MzIyLCA0NzMyNiwgNDczMzAsIDQ3MzM0LCA0NzMzOCwgCi0gICAgNDczNDIsIDQ3MzQ5LCA0NzM1NiwgNDczNjQsIDQ3MzcyLCA0NzM3NywgNDczODIsIDQ3Mzg5LCA0NzM5NiwgNDc0MDMsIAotICAgIDQ3NDEwLCA0NzQxMywgNDc0MTYsIDQ3NDIxLCA0NzQyMywgNDc0MjcsIDQ3NDMyLCA0NzQzNCwgNDc0MzYsIDQ3NDM4LCAKLSAgICA0NzQ0MCwgNDc0NDUsIDQ3NDQ4LCA0NzQ1MCwgNDc0NTUsIDQ3NDYyLCA0NzQ2OSwgNDc0NzIsIDQ3NDc2LCA0NzQ4MSwgCi0gICAgNDc0ODYsIDQ3NDk0LCA0NzUwMCwgNDc1MDYsIDQ3NTE4LCA0NzUyNSwgNDc1MzIsIDQ3NTM3LCA0NzU0MiwgNDc1NDgsIAotICAgIDQ3NTUxLCA0NzU1NCwgNDc1NTksIDQ3NTYxLCA0NzU2NSwgNDc1NjcsIDQ3NTY5LCA0NzU3MSwgNDc1NzMsIDQ3NTc1LCAKLSAgICA0NzU3NywgNDc1ODIsIDQ3NTg0LCA0NzU4NiwgNDc1ODgsIDQ3NTkwLCA0NzU5NCwgNDc1OTYsIDQ3NTk5LCA0NzYwNCwgCi0gICAgNDc2MDksIDQ3NjE0LCA0NzYxOSwgNDc2MjUsIDQ3NjMxLCA0NzYzMywgNDc2MzYsIDQ3NjQzLCA0NzY1MCwgNDc2NTcsIAotICAgIDQ3NjY0LCA0NzY2OCwgNDc2NzIsIDQ3Njc0LCA0NzY3NiwgNDc2ODAsIDQ3Njg2LCA0NzY5MSwgNDc2OTMsIDQ3Njk3LCAKLSAgICA0NzcwNiwgNDc3MTQsIDQ3NzIyLCA0NzcyOCwgNDc3MzQsIDQ3NzM5LCA0Nzc0NSwgNDc3NTAsIDQ3NzUzLCA0Nzc2NywgCi0gICAgNDc3NzAsIDQ3Nzc1LCA0Nzc4MCwgNDc3ODYsIDQ3Nzk2LCA0Nzc5OCwgNDc4MDQsIDQ3ODEwLCA0NzgxNCwgNDc4MjEsIAotICAgIDQ3ODI1LCA0NzgyNywgNDc4MjksIDQ3ODMzLCA0NzgzOSwgNDc4NDQsIDQ3ODUwLCA0Nzg1MiwgNDc4NTgsIDQ3ODYwLCAKLSAgICA0Nzg2NiwgNDc4NjgsIDQ3ODcwLCA0Nzg3NSwgNDc4NzcsIDQ3ODgxLCA0Nzg4NiwgNDc4ODgsIDQ3ODkzLCA0Nzg5OCwgCi0gICAgNDc5MDIsIDQ3OTA5LCAwLCA0NzkxOSwgNDc5MjUsIDQ3OTI4LCA0NzkzNCwgNDc5MzcsIDQ3OTQyLCA0Nzk0NywgNDc5NTEsIAotICAgIDQ3OTUzLCA0Nzk1NSwgNDc5NTksIDQ3OTYzLCA0Nzk2NywgNDc5NzEsIDQ3OTc2LCA0Nzk3OCwgNDc5ODMsIDQ3OTg2LCAKLSAgICA0Nzk4OSwgNDc5OTIsIDQ3OTk2LCA0ODAwMCwgNDgwMDUsIDQ4MDA5LCA0ODAxNCwgNDgwMTksIDQ4MDIzLCA0ODAyOCwgCi0gICAgNDgwMzQsIDQ4MDM3LCA0ODA0MywgNDgwNDgsIDQ4MDUyLCA0ODA1NywgNDgwNjMsIDQ4MDY5LCA0ODA3NiwgNDgwODIsIAotICAgIDQ4MDg5LCA0ODA5NiwgNDgwOTgsIDQ4MTA1LCA0ODEwOSwgNDgxMTUsIDQ4MTIxLCA0ODEyNiwgNDgxMzIsIDQ4MTM2LCAKLSAgICA0ODE0MSwgNDgxNDQsIDQ4MTQ5LCA0ODE1NSwgNDgxNjIsIDQ4MTcwLCA0ODE3NywgNDgxODYsIDQ4MTk2LCA0ODIwMywgCi0gICAgNDgyMDksIDQ4MjEzLCA0ODIyMCwgNDgyMjUsIDQ4MjM0LCA0ODIzNywgNDgyNDAsIDQ4MjQ5LCA0ODI1OSwgNDgyNjYsIAotICAgIDQ4MjY4LCA0ODI3NCwgNDgyNzksIDQ4MjgxLCA0ODI4NCwgNDgyODgsIDQ4Mjk2LCA0ODMwNSwgNDgzMDgsIDQ4MzEzLCAKLSAgICA0ODMxOCwgNDgzMjYsIDQ4MzM0LCA0ODM0MiwgNDgzNTAsIDQ4MzU2LCA0ODM2MiwgNDgzNjgsIDQ4Mzc2LCA0ODM4MSwgCi0gICAgNDgzODQsIDQ4Mzg4LCA0ODM5MSwgNDg0MDMsIDQ4NDEzLCA0ODQyNCwgNDg0MzMsIDQ4NDQ0LCA0ODQ1NCwgNDg0NjMsIAotICAgIDQ4NDY5LCA0ODQ3NywgNDg0ODEsIDQ4NDg5LCA0ODQ5MywgNDg1MDEsIDQ4NTA4LCA0ODUxNSwgNDg1MjQsIDQ4NTMzLCAKLSAgICA0ODU0MywgNDg1NTMsIDQ4NTYzLCA0ODU3MywgNDg1ODIsIDQ4NTkxLCA0ODYwMSwgNDg2MTEsIDQ4NjIwLCA0ODYyOSwgCi0gICAgNDg2MzUsIDQ4NjQxLCA0ODY0NywgNDg2NTMsIDQ4NjU5LCA0ODY2NSwgNDg2NzEsIDQ4Njc3LCA0ODY4MywgNDg2OTAsIAotICAgIDQ4Njk2LCA0ODcwMiwgNDg3MDgsIDQ4NzE0LCA0ODcyMCwgNDg3MjYsIDQ4NzMyLCA0ODczOCwgNDg3NDQsIDQ4NzUxLCAKLSAgICA0ODc1OCwgNDg3NjUsIDQ4NzcyLCA0ODc3OSwgNDg3ODYsIDQ4NzkzLCA0ODgwMCwgNDg4MDcsIDQ4ODE0LCA0ODgyMiwgCi0gICAgNDg4MjcsIDQ4ODMwLCA0ODgzNCwgNDg4MzgsIDQ4ODQ0LCA0ODg0NywgNDg4NTMsIDQ4ODU5LCA0ODg2NCwgNDg4NjgsIAotICAgIDQ4ODczLCA0ODg3OSwgNDg4ODYsIDQ4ODg5LCA0ODg5NiwgNDg5MDMsIDQ4OTA3LCA0ODkxNiwgNDg5MjUsIDQ4OTMwLCAKLSAgICA0ODkzNiwgNDg5NDEsIDQ4OTQ2LCA0ODk1MywgNDg5NjAsIDQ4OTY4LCA0ODk3NiwgNDg5ODUsIDQ4OTg5LCA0ODk5OCwgCi0gICAgNDkwMDMsIDQ5MDA3LCA0OTAxNCwgNDkwMTgsIDQ5MDI1LCA0OTAzMywgNDkwMzgsIDQ5MDQ2LCA0OTA1MCwgNDkwNTUsIAotICAgIDQ5MDU5LCA0OTA2NCwgNDkwNjgsIDQ5MDczLCA0OTA3OCwgNDkwODcsIDQ5MDg5LCA0OTA5MiwgNDkwOTUsIDQ5MTAyLCAKLSAgICA0OTEwOSwgNDkxMTQsIDQ5MTIyLCA0OTEyOCwgNDkxMzQsIDQ5MTM5LCA0OTE0MiwgNDkxNDcsIDQ5MTUyLCA0OTE1NywgCi0gICAgNDkxNjUsIDQ5MTY5LCA0OTE3NiwgNDkxODQsIDQ5MTkyLCA0OTE5NywgNDkyMDIsIDQ5MjA4LCA0OTIxMywgNDkyMTgsIAotICAgIDQ5MjI0LCA0OTIyOSwgNDkyMzIsIDQ5MjM2LCA0OTI0MCwgNDkyNDcsIDQ5MjU2LCA0OTI2MSwgNDkyNzAsIDQ5Mjc5LCAKLSAgICA0OTI4NSwgNDkyOTEsIDQ5Mjk2LCA0OTMwMSwgNDkzMDYsIDQ5MzExLCA0OTMxNywgNDkzMjMsIDQ5MzMxLCA0OTMzOSwgCi0gICAgNDkzNDUsIDQ5MzUxLCA0OTM1NiwgNDkzNjEsIDQ5MzY4LCA0OTM3NSwgNDkzODEsIDQ5Mzg0LCA0OTM4NywgNDkzOTEsIAotICAgIDQ5Mzk1LCA0OTM5OSwgNDk0MDQsIDQ5NDEwLCA0OTQxNiwgNDk0MjMsIDQ5NDMwLCA0OTQzNSwgNDk0MzksIDQ5NDQzLCAKLSAgICA0OTQ0NywgNDk0NTEsIDQ5NDU1LCA0OTQ1OSwgNDk0NjMsIDQ5NDY3LCA0OTQ3MSwgNDk0NzUsIDQ5NDc5LCA0OTQ4MywgCi0gICAgNDk0ODcsIDQ5NDkxLCA0OTQ5NSwgNDk0OTksIDQ5NTAzLCA0OTUwNywgNDk1MTEsIDQ5NTE1LCA0OTUxOSwgNDk1MjMsIAotICAgIDQ5NTI3LCA0OTUzMSwgNDk1MzUsIDQ5NTM5LCA0OTU0MywgNDk1NDcsIDQ5NTUxLCA0OTU1NSwgNDk1NTksIDQ5NTYzLCAKLSAgICA0OTU2NywgNDk1NzEsIDQ5NTc1LCA0OTU3OSwgNDk1ODMsIDQ5NTg3LCA0OTU5MSwgNDk1OTUsIDQ5NTk5LCA0OTYwMywgCi0gICAgNDk2MDcsIDQ5NjExLCA0OTYxNSwgNDk2MTksIDQ5NjIzLCA0OTYyNywgNDk2MzEsIDQ5NjM1LCA0OTYzOSwgNDk2NDMsIAotICAgIDQ5NjQ3LCA0OTY1MSwgNDk2NTUsIDQ5NjU5LCA0OTY2MywgNDk2NjcsIDQ5NjcxLCA0OTY3NSwgNDk2NzksIDQ5NjgzLCAKLSAgICA0OTY4NywgNDk2OTEsIDQ5Njk1LCA0OTY5OSwgNDk3MDMsIDQ5NzA3LCA0OTcxMSwgNDk3MTUsIDQ5NzE5LCA0OTcyMywgCi0gICAgNDk3MjcsIDQ5NzMxLCA0OTczNSwgNDk3MzksIDQ5NzQzLCA0OTc0NywgNDk3NTEsIDQ5NzU1LCA0OTc1OSwgNDk3NjMsIAotICAgIDQ5NzY3LCA0OTc3MSwgNDk3NzUsIDQ5Nzc5LCA0OTc4MywgNDk3ODcsIDQ5NzkxLCA0OTc5NSwgNDk3OTksIDQ5ODAzLCAKLSAgICA0OTgwNywgNDk4MTEsIDQ5ODE1LCA0OTgxOSwgNDk4MjMsIDQ5ODI3LCA0OTgzMSwgNDk4MzUsIDQ5ODM5LCA0OTg0MywgCi0gICAgNDk4NDcsIDQ5ODUxLCA0OTg1NSwgNDk4NTksIDQ5ODYzLCA0OTg2NywgNDk4NzEsIDQ5ODc1LCA0OTg3OSwgNDk4ODMsIAotICAgIDQ5ODg3LCA0OTg5MSwgNDk4OTUsIDQ5ODk5LCA0OTkwMywgNDk5MDcsIDQ5OTExLCA0OTkxNSwgNDk5MTksIDQ5OTIzLCAKLSAgICA0OTkyNywgNDk5MzEsIDQ5OTM1LCA0OTkzOSwgNDk5NDMsIDQ5OTQ3LCA0OTk1MSwgNDk5NTUsIDQ5OTU5LCA0OTk2MywgCi0gICAgNDk5NjcsIDQ5OTcxLCA0OTk3NSwgNDk5NzksIDQ5OTgzLCA0OTk4NywgNDk5OTEsIDQ5OTk1LCA0OTk5OSwgNTAwMDMsIAotICAgIDUwMDA3LCA1MDAxMSwgNTAwMTUsIDUwMDE5LCA1MDAyMywgNTAwMjcsIDUwMDMxLCA1MDAzNSwgNTAwMzksIDUwMDQzLCAKLSAgICA1MDA0NywgNTAwNTEsIDUwMDU1LCA1MDA1OSwgNTAwNjMsIDUwMDY3LCA1MDA3MSwgNTAwNzUsIDUwMDc5LCA1MDA4MywgCi0gICAgNTAwODcsIDUwMDkxLCA1MDA5NSwgNTAwOTksIDUwMTAzLCA1MDEwNywgNTAxMTEsIDUwMTE1LCA1MDExOSwgNTAxMjMsIAotICAgIDUwMTI3LCA1MDEzMSwgNTAxMzUsIDUwMTM5LCA1MDE0MywgNTAxNDcsIDUwMTUxLCA1MDE1NSwgNTAxNTksIDUwMTYzLCAKLSAgICA1MDE2NywgNTAxNzEsIDUwMTc1LCA1MDE3OSwgNTAxODMsIDUwMTg3LCA1MDE5MSwgNTAxOTUsIDUwMTk5LCA1MDIwMywgCi0gICAgNTAyMDcsIDUwMjExLCA1MDIxNSwgNTAyMTksIDUwMjIzLCA1MDIyNywgNTAyMzEsIDUwMjM1LCA1MDIzOSwgNTAyNDMsIAotICAgIDUwMjQ3LCA1MDI1MSwgNTAyNTUsIDUwMjU5LCA1MDI2MywgNTAyNjcsIDUwMjcxLCA1MDI3NSwgNTAyNzksIDUwMjgzLCAKLSAgICA1MDI4NywgNTAyOTEsIDUwMjk1LCA1MDI5OSwgNTAzMDMsIDUwMzA3LCA1MDMxMSwgNTAzMTUsIDUwMzE5LCA1MDMyMywgCi0gICAgNTAzMjcsIDUwMzMxLCA1MDMzNSwgNTAzMzksIDUwMzQzLCA1MDM0NywgNTAzNTEsIDUwMzU1LCA1MDM1OSwgNTAzNjMsIAotICAgIDUwMzY3LCA1MDM3MSwgNTAzNzUsIDUwMzc5LCA1MDM4MywgNTAzODcsIDUwMzkxLCA1MDM5NSwgNTAzOTksIDUwNDAzLCAKLSAgICA1MDQwNywgNTA0MTEsIDUwNDE1LCA1MDQxOSwgNTA0MjMsIDUwNDI3LCA1MDQzMSwgNTA0MzUsIDUwNDM5LCA1MDQ0MywgCi0gICAgNTA0NDcsIDUwNDUxLCA1MDQ1NSwgNTA0NTksIDUwNDY2LCA1MDQ3NCwgNTA0ODAsIDUwNDg2LCA1MDQ5MywgNTA1MDAsIAotICAgIDUwNTA2LCA1MDUxMiwgNTA1MTgsIDUwNTI0LCA1MDUyOSwgNTA1MzQsIDUwNTM5LCA1MDU0NCwgNTA1NTAsIDUwNTU2LCAKLSAgICA1MDU2NCwgNTA1NzEsIDUwNTc3LCA1MDU4MywgNTA1OTEsIDUwNjAwLCA1MDYwNywgNTA2MTcsIDUwNjI4LCA1MDYzMSwgCi0gICAgNTA2MzQsIDUwNjM4LCA1MDY0MiwgNTA2NDksIDUwNjU2LCA1MDY2NywgNTA2NzgsIDUwNjg4LCA1MDY5OCwgNTA3MDUsIAotICAgIDUwNzEyLCA1MDcxOSwgNTA3MjYsIDUwNzM3LCA1MDc0OCwgNTA3NTksIDUwNzcwLCA1MDc4MCwgNTA3OTAsIDUwODAyLCAKLSAgICA1MDgxNCwgNTA4MjUsIDUwODM2LCA1MDg0OCwgNTA4NjAsIDUwODY5LCA1MDg3OSwgNTA4ODksIDUwOTAwLCA1MDkxMSwgCi0gICAgNTA5MTgsIDUwOTI1LCA1MDkzMiwgNTA5MzksIDUwOTQ5LCA1MDk1OSwgNTA5NjcsIDUwOTc1LCA1MDk4MiwgNTA5ODksIAotICAgIDUwOTk2LCA1MTAwMywgNTEwMTAsIDUxMDE1LCA1MTAyMCwgNTEwMjYsIDUxMDM0LCA1MTA0NCwgNTEwNTQsIDUxMDY0LCAKLSAgICA1MTA3NCwgNTEwODQsIDUxMDk0LCA1MTEwNCwgNTExMTQsIDUxMTI0LCA1MTEzNCwgNTExNDQsIDUxMTU1LCA1MTE2NiwgCi0gICAgNTExNzYsIDUxMTg2LCA1MTE5NywgNTEyMDgsIDUxMjE4LCA1MTIyOCwgNTEyMzksIDUxMjUwLCA1MTI2MCwgNTEyNzAsIAotICAgIDUxMjgxLCA1MTI5MiwgNTEzMDgsIDUxMzI3LCA1MTM0MywgNTEzNjIsIDUxMzc4LCA1MTM5NCwgNTE0MTAsIDUxNDI2LCAKLSAgICA1MTQzNywgNTE0NDksIDUxNDYwLCA1MTQ3MiwgNTE0OTEsIDUxNTEwLCA1MTUxOCwgNTE1MjQsIDUxNTMxLCA1MTUzOCwgCi0gICAgNTE1NDUsIDUxNTUyLCA1MTU1NywgNTE1NjMsIDUxNTY4LCA1MTU3MywgNTE1NzksIDUxNTg0LCA1MTU4OSwgNTE1OTQsIAotICAgIDUxNTk5LCA1MTYwNCwgNTE2MTEsIDUxNjE2LCA1MTYyMywgNTE2MjgsIDUxNjMzLCA1MTYzNywgNTE2NDEsIDUxNjQ4LCAKLSAgICA1MTY1NSwgNTE2NjIsIDUxNjY5LCA1MTY3NiwgNTE2ODMsIDUxNjk2LCA1MTcwOSwgNTE3MjIsIDUxNzM1LCA1MTc0MywgCi0gICAgNTE3NTEsIDUxNzU3LCA1MTc2MywgNTE3NzAsIDUxNzc3LCA1MTc4NCwgNTE3OTEsIDUxNzk1LCA1MTgwMCwgNTE4MDgsIAotICAgIDUxODE2LCA1MTgyNCwgNTE4MzEsIDUxODM1LCA1MTg0MywgNTE4NTEsIDUxODU1LCA1MTg1OSwgNTE4NjQsIDUxODcxLCAKLSAgICA1MTg3OSwgNTE4ODcsIDUxOTA2LCA1MTkyNSwgNTE5NDQsIDUxOTYzLCA1MTk4MiwgNTIwMDEsIDUyMDIwLCA1MjAzOSwgCi0gICAgNTIwNDUsIDUyMDUyLCA1MjA2MSwgNTIwNjksIDUyMDc3LCA1MjA4MiwgNTIwODUsIDUyMDg4LCA1MjA5MywgNTIwOTYsIAotICAgIDUyMTE1LCA1MjEyMiwgNTIxMjgsIDUyMTM0LCA1MjEzOCwgNTIxNDEsIDUyMTQ0LCA1MjE0NywgNTIxNTksIDUyMTcyLCAKLSAgICA1MjE3OSwgNTIxODYsIDUyMTg5LCA1MjE5MywgNTIxOTYsIDUyMjAxLCA1MjIwNiwgNTIyMTEsIDUyMjE3LCA1MjIyNiwgCi0gICAgNTIyMzMsIDUyMjQwLCA1MjI0OCwgNTIyNTUsIDUyMjYyLCA1MjI2NSwgNTIyNzEsIDUyMjc3LCA1MjI4MCwgNTIyODMsIAotICAgIDUyMjg4LCA1MjI5MywgNTIyOTksIDUyMzA1LCA1MjMwOSwgNTIzMTQsIDUyMzIxLCA1MjMyNSwgNTIzMzEsIDUyMzM1LCAKLSAgICA1MjMzOSwgNTIzNDcsIDUyMzU5LCA1MjM2OCwgNTIzNzIsIDUyMzc0LCA1MjM4MywgNTIzOTIsIDUyMzk4LCA1MjQwMSwgCi0gICAgNTI0MDcsIDUyNDEzLCA1MjQxOCwgNTI0MjMsIDUyNDI4LCA1MjQzMywgNTI0MzgsIDUyNDQzLCA1MjQ0NSwgNTI0NTEsIAotICAgIDUyNDU2LCA1MjQ2MywgNTI0NjcsIDUyNDczLCA1MjQ3NiwgNTI0ODAsIDUyNDg3LCA1MjQ5NCwgNTI0OTYsIDUyNDk4LCAKLSAgICA1MjUwNCwgNTI1MTAsIDUyNTE2LCA1MjUyNSwgNTI1MzQsIDUyNTQxLCA1MjU0OCwgNTI1NTQsIDUyNTYwLCA1MjU2NSwgCi0gICAgNTI1NzAsIDUyNTc1LCA1MjU4MSwgNTI1ODcsIDUyNTkyLCA1MjU5OSwgNTI2MDMsIDUyNjA3LCA1MjYyMCwgNTI2MzMsIAotICAgIDUyNjQ1LCA1MjY1NCwgNTI2NjAsIDUyNjY3LCA1MjY3MiwgNTI2NzcsIDUyNjgyLCA1MjY4NywgNTI2OTIsIDUyNjk0LCAKLSAgICA1MjcwMSwgNTI3MDgsIDUyNzE1LCA1MjcyMiwgNTI3MjksIDUyNzM3LCA1Mjc0MywgNTI3NDgsIDUyNzU0LCA1Mjc2MCwgCi0gICAgNTI3NjYsIDUyNzczLCA1Mjc3OSwgNTI3ODcsIDUyNzk1LCA1MjgwMywgNTI4MTEsIDUyODE4LCA1MjgyNCwgNTI4MzAsIAotICAgIDUyODM5LCA1Mjg0MywgNTI4NTIsIDUyODYxLCA1Mjg3MCwgNTI4NzgsIDUyODgyLCA1Mjg4OCwgNTI4OTUsIDUyOTAyLCAKLSAgICA1MjkwNiwgNTI5MTIsIDUyOTE5LCA1MjkyNCwgNTI5MjksIDUyOTM1LCA1Mjk0MCwgNTI5NDUsIDUyOTUyLCA1Mjk1OSwgCi0gICAgNTI5NjQsIDUyOTY5LCA1Mjk3NywgNTI5ODUsIDUyOTk1LCA1MzAwNSwgNTMwMTIsIDUzMDE5LCA1MzAyMywgNTMwMjcsIAotICAgIDUzMDM5LCA1MzA0NSwgNTMwNTEsIDUzMDU2LCA1MzA2MSwgNTMwNjgsIDUzMDc1LCA1MzA4MSwgNTMwODcsIDUzMDk2LCAKLSAgICA1MzEwNCwgNTMxMTIsIDUzMTE5LCA1MzEyNiwgNTMxMzMsIDUzMTM5LCA1MzE0NiwgNTMxNTIsIDUzMTU5LCA1MzE2NiwgCi0gICAgNTMxNzMsIDUzMTgwLCA1MzE4NiwgNTMxOTEsIDUzMjAwLCA1MzIxMCwgNTMyMTcsIDUzMjI2LCA1MzIzMiwgNTMyMzcsIAotICAgIDUzMjQyLCA1MzI1MiwgNTMyNTgsIDUzMjY0LCA1MzI3MCwgNTMyNzgsIDUzMjgzLCA1MzI5MCwgNTMyOTcsIDUzMzA4LCAKLSAgICA1MzMxNSwgNTMzMjIsIDUzMzI5LCA1MzMzNiwgNTMzNDMsIDUzMzUwLCA1MzM1NywgNTMzNjksIDUzMzgxLCA1MzM5MiwgCi0gICAgNTM0MDMsIDUzNDE2LCA1MzQyOSwgNTM0MzQsIDUzNDM5LCA1MzQ0OCwgNTM0NTcsIDUzNDY0LCA1MzQ3MSwgNTM0ODAsIAotICAgIDUzNDg5LCA1MzQ5NywgNTM1MDUsIDUzNTEzLCA1MzUyMSwgNTM1MzEsIDUzNTQxLCA1MzU1NSwgNTM1NjksIDUzNTc3LCAKLSAgICA1MzU4NSwgNTM1OTcsIDUzNjA5LCA1MzYxNywgNTM2MjUsIDUzNjM1LCA1MzY0NSwgNTM2NTAsIDUzNjU1LCA1MzY2NCwgCi0gICAgNTM2NzMsIDUzNjc4LCA1MzY4MywgNTM2OTEsIDUzNjk3LCA1MzcwMywgNTM3MTEsIDUzNzE5LCA1MzczMiwgNTM3NDUsIAotICAgIDUzNzQ5LCA1Mzc1MywgNTM3NjAsIDUzNzY3LCA1Mzc3NCwgNTM3ODIsIDUzNzkwLCA1Mzc5OSwgNTM4MDgsIDUzODE0LCAKLSAgICA1MzgyMCwgNTM4MjcsIDUzODM0LCA1Mzg0MSwgNTM4NDgsIDUzODU3LCA1Mzg2NiwgNTM4NjksIDUzODcyLCA1Mzg3NywgCi0gICAgNTM4ODIsIDUzODg4LCA1Mzg5NCwgNTM5MDEsIDUzOTA4LCA1MzkxOCwgNTM5MjgsIDUzOTM1LCA1Mzk0MiwgNTM5NTAsIAotICAgIDUzOTU4LCA1Mzk2NiwgNTM5NzQsIDUzOTgyLCA1Mzk5MCwgNTM5OTYsIDU0MDAyLCA1NDAwNiwgNTQwMTAsIDU0MDE3LCAKLSAgICA1NDAyNCwgNTQwMjksIDU0MDM0LCA1NDAzOSwgNTQwNDQsIDU0MDUwLCA1NDA2NCwgNTQwNzEsIDU0MDc4LCA1NDA4MiwgCi0gICAgNTQwODQsIDU0MDg2LCA1NDA5MSwgNTQwOTYsIDU0MTAxLCA1NDEwNiwgNTQxMTQsIDU0MTIxLCA1NDEyOCwgNTQxMzYsIAotICAgIDU0MTQ4LCA1NDE1NiwgNTQxNjQsIDU0MTc1LCA1NDE3OSwgNTQxODMsIDU0MTg5LCA1NDE5NywgNTQyMTAsIDU0MjE3LCAKLSAgICA1NDIyNCwgNTQyMzEsIDU0MjM2LCA1NDI0MywgNTQyNTIsIDU0MjYwLCA1NDI2NiwgNTQyNzIsIDU0Mjc4LCA1NDI4NywgCi0gICAgNTQyOTYsIDU0MzA0LCA1NDMxMywgNTQzMTgsIDU0MzIxLCA1NDMyNiwgNTQzMzIsIDU0MzM4LCA1NDM0NCwgNTQzNTAsIAotICAgIDU0MzU0LCA1NDM1NywgNTQzNjEsIDU0MzY1LCA1NDM3MSwgNTQzNzcsIDU0MzgzLCA1NDM4OSwgNTQzOTMsIDU0Mzk3LCAKLSAgICA1NDQwNCwgNTQ0MTEsIDU0NDE4LCA1NDQyNSwgNTQ0MzIsIDU0NDM5LCA1NDQ0OSwgNTQ0NTksIDU0NDY2LCA1NDQ3MywgCi0gICAgNTQ0ODEsIDU0NDg5LCA1NDQ5MywgNTQ0OTgsIDU0NTAzLCA1NDUwOSwgNTQ1MTUsIDU0NTE4LCA1NDUyMSwgNTQ1MjQsIAotICAgIDU0NTI3LCA1NDUzMSwgNTQ1MzYsIDU0NTQxLCA1NDU0NiwgNTQ1NTEsIDU0NTU2LCA1NDU2MCwgNTQ1NjQsIDU0NTY4LCAKLSAgICA1NDU3MiwgNTQ1NzYsIDU0NTgwLCA1NDU4NCwgNTQ1OTAsIDU0NTk0LCA1NDYwMCwgNTQ2MDUsIDU0NjEyLCA1NDYyMCwgCi0gICAgNTQ2MjcsIDU0NjM1LCA1NDY0MiwgNTQ2NTAsIDU0NjU5LCA1NDY2NiwgNTQ2NzYsIDU0Njg3LCA1NDY5MywgNTQ3MDIsIAotICAgIDU0NzA4LCA1NDcxNywgNTQ3MjYsIDU0NzMyLCA1NDczOCwgNTQ3NDIsIDU0NzQ2LCA1NDc1NSwgNTQ3NjQsIDU0NzcxLCAKLSAgICA1NDc3OCwgNTQ3ODcsIDAsIDAsIDAsIDU0Nzk2LCA1NDgwMSwgNTQ4MDUsIDU0ODA5LCA1NDgxNCwgNTQ4MTksIDU0ODI0LCAKLSAgICA1NDgzMiwgNTQ4NDAsIDU0ODQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIyNiwgMzIyMzMsIDMyMjQwLCAzMjI0NywgMzIyNTQsIAorICAgIDMyMjYzLCAzMjI3MiwgMzIyODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjkwLCAzMjI5NSwgMzIzMDAsIDMyMzA1LCAKKyAgICAzMjMxMCwgMzIzMTksIDMyMzMwLCAzMjMzOSwgMzIzNTAsIDMyMzU2LCAzMjM2OSwgMzIzNzUsIDMyMzgyLCAzMjM4OSwgCisgICAgMzIzOTQsIDMyNDAwLCAzMjQwNiwgMzI0MTcsIDMyNDI2LCAzMjQzMywgMzI0NDAsIDMyNDQ5LCAzMjQ1NiwgMzI0NjUsIAorICAgIDMyNDc1LCAzMjQ4NSwgMzI0OTIsIDMyNDk5LCAzMjUwNiwgMzI1MTYsIDMyNTIxLCAzMjUyOSwgMzI1MzUsIDMyNTQzLCAKKyAgICAzMjU1MiwgMzI1NTcsIDMyNTY0LCAzMjU3MCwgMzI1NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNTgwLCAKKyAgICAzMjU4NSwgMzI1OTEsIDMyNTk4LCAzMjYwNiwgMzI2MTIsIDMyNjE4LCAzMjYyNCwgMzI2MjksIDMyNjM2LCAzMjY0MiwgCisgICAgMzI2NDgsIDMyNjU0LCAzMjY2MiwgMzI2NjcsIDMyNjc1LCAzMjY4MCwgMzI2ODYsIDMyNjkyLCAzMjY5OSwgMzI3MDcsIAorICAgIDMyNzE0LCAzMjcyMCwgMzI3MjcsIDMyNzM0LCAzMjc0MCwgMzI3NDcsIDMyNzU0LCAzMjc2MCwgMzI3NjUsIDMyNzcxLCAKKyAgICAzMjc3OSwgMzI3ODcsIDMyNzkzLCAzMjc5OSwgMzI4MDUsIDMyODExLCAzMjgxOSwgMzI4MjMsIDMyODI5LCAzMjgzNSwgCisgICAgMzI4NDEsIDMyODQ3LCAzMjg1MywgMzI4NTksIDMyODYzLCAzMjg2OCwgMzI4NzMsIDMyODgwLCAzMjg4NSwgMzI4ODksIAorICAgIDMyODk1LCAzMjkwMCwgMzI5MDUsIDMyOTA5LCAzMjkxNCwgMzI5MTksIDMyOTIzLCAzMjkyNywgMzI5MzIsIDMyOTM5LCAKKyAgICAzMjk0MywgMzI5NDgsIDMyOTUzLCAzMjk1NywgMzI5NjIsIDMyOTY2LCAzMjk3MSwgMzI5NzUsIDMyOTgxLCAzMjk4NiwgCisgICAgMzI5OTMsIDMyOTk4LCAzMzAwMywgMzMwMDcsIDMzMDEyLCAzMzAxNywgMzMwMjQsIDMzMDI5LCAzMzAzNSwgMzMwNDAsIAorICAgIDMzMDQ0LCAzMzA0OSwgMzMwNTMsIDMzMDU4LCAzMzA2NSwgMzMwNzIsIDMzMDc3LCAzMzA4MiwgMzMwODYsIDMzMDkyLCAKKyAgICAzMzA5OCwgMzMxMDMsIDMzMTA4LCAzMzExMywgMzMxMTksIDMzMTI0LCAzMzEzMCwgMzMxMzUsIDMzMTQxLCAzMzE0NywgCisgICAgMzMxNTMsIDMzMTYwLCAzMzE2NywgMzMxNzQsIDMzMTgxLCAzMzE4OCwgMzMxOTUsIDMzMjAwLCAzMzIwOCwgMzMyMTcsIAorICAgIDMzMjI2LCAzMzIzNSwgMzMyNDQsIDMzMjUzLCAzMzI2MiwgMzMyNzQsIDMzMjgzLCAzMzI5MiwgMzMzMDEsIDMzMzA4LCAKKyAgICAzMzMxMywgMzMzMjAsIDMzMzI4LCAzMzMzNiwgMzMzNDMsIDMzMzUwLCAzMzM1NywgMzMzNjQsIDMzMzcyLCAzMzM4MSwgCisgICAgMzMzOTAsIDMzMzk5LCAzMzQwOCwgMzM0MTcsIDMzNDI2LCAzMzQzNSwgMzM0NDQsIDMzNDUzLCAzMzQ2MiwgMzM0NzEsIAorICAgIDMzNDgwLCAzMzQ4OSwgMzM0OTgsIDMzNTA2LCAzMzUxNSwgMzM1MjYsIDMzNTM0LCAzMzU0MywgMzM1NTQsIDMzNTYzLCAKKyAgICAzMzU3MiwgMzM1ODEsIDMzNTkwLCAzMzU5OCwgMzM2MDcsIDMzNjE0LCAzMzYxOSwgMzM2MjcsIDMzNjMyLCAzMzYzOSwgCisgICAgMzM2NDQsIDMzNjUzLCAzMzY1OSwgMzM2NjYsIDMzNjczLCAzMzY3OCwgMzM2ODMsIDMzNjkxLCAzMzY5OSwgMzM3MDgsIAorICAgIDMzNzE3LCAzMzcyMiwgMzM3MjksIDMzNzQwLCAzMzc0OCwgMzM3NTcsIDMzNzYzLCAzMzc2OSwgMzM3NzQsIDMzNzgxLCAKKyAgICAzMzc4NiwgMzM3OTUsIDMzODAwLCAzMzgwNSwgMzM4MTAsIDMzODE3LCAzMzgyNCwgMzM4MjksIDMzODM4LCAzMzg0NiwgCisgICAgMzM4NTEsIDMzODU2LCAzMzg2MywgMzM4NzAsIDMzODc0LCAzMzg3OCwgMzM4ODEsIDMzODg0LCAzMzg4NywgMzM4OTAsIAorICAgIDMzODkzLCAzMzg5NiwgMzM5MDMsIDMzOTA2LCAzMzkwOSwgMzM5MTQsIDMzOTE4LCAzMzkyMiwgMzM5MjYsIDMzOTMwLCAKKyAgICAzMzkzNCwgMzM5NDMsIDMzOTQ5LCAzMzk1NSwgMzM5NjEsIDMzOTY5LCAzMzk3NywgMzM5ODMsIDMzOTg5LCAzMzk5NiwgCisgICAgMzQwMDIsIDM0MDA3LCAzNDAxMywgMzQwMTksIDM0MDI1LCAzNDAzMiwgMzQwMzgsIDM0MDQ2LCAzNDA1MiwgMzQwNTksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDY1LCAzNDA3MiwgCisgICAgMzQwNzksIDM0MDg0LCAzNDA5MywgMzQxMDEsIDM0MTA5LCAzNDExNiwgMzQxMjMsIDM0MTMwLCAzNDEzNywgMzQxNDUsIAorICAgIDM0MTUzLCAzNDE2MywgMzQxNzMsIDM0MTgxLCAzNDE4OSwgMzQxOTcsIDM0MjA1LCAzNDIxNCwgMzQyMjMsIDM0MjMxLCAKKyAgICAzNDIzOSwgMzQyNDgsIDM0MjU3LCAzNDI2NywgMzQyNzcsIDM0Mjg2LCAzNDI5NSwgMzQzMDMsIDM0MzExLCAzNDMxOSwgCisgICAgMzQzMjcsIDM0MzM3LCAzNDM0NywgMzQzNTUsIDM0MzYzLCAzNDM3MSwgMzQzNzksIDM0Mzg3LCAzNDM5NSwgMzQ0MDMsIAorICAgIDM0NDExLCAzNDQxOSwgMzQ0MjcsIDM0NDM1LCAzNDQ0MywgMzQ0NTIsIDM0NDYxLCAzNDQ3MCwgMzQ0NzksIDM0NDg5LCAKKyAgICAzNDQ5OSwgMzQ1MDYsIDM0NTEzLCAzNDUyMSwgMzQ1MjksIDM0NTM4LCAzNDU0NywgMzQ1NTUsIDM0NTYzLCAzNDU3NSwgCisgICAgMzQ1ODcsIDM0NTk2LCAzNDYwNSwgMzQ2MTQsIDM0NjIzLCAzNDYzMCwgMzQ2MzcsIDM0NjQ1LCAzNDY1MywgMzQ2NjEsIAorICAgIDM0NjY5LCAzNDY3NywgMzQ2ODUsIDM0NjkzLCAzNDcwMSwgMzQ3MTAsIDM0NzE5LCAzNDcyOCwgMzQ3MzcsIDM0NzQ2LCAKKyAgICAzNDc1NSwgMzQ3NjUsIDM0Nzc1LCAzNDc4NSwgMzQ3OTUsIDM0ODA0LCAzNDgxMywgMzQ4MjAsIDM0ODI3LCAzNDgzNSwgCisgICAgMzQ4NDMsIDM0ODUxLCAzNDg1OSwgMzQ4NjcsIDM0ODc1LCAzNDg4NywgMzQ4OTksIDM0OTA4LCAzNDkxNywgMzQ5MjUsIAorICAgIDM0OTMzLCAzNDk0MSwgMzQ5NDksIDM0OTYwLCAzNDk3MSwgMzQ5ODIsIDM0OTkzLCAzNTAwNSwgMzUwMTcsIDM1MDI1LCAKKyAgICAzNTAzMywgMzUwNDEsIDM1MDQ5LCAzNTA1OCwgMzUwNjcsIDM1MDc2LCAzNTA4NSwgMzUwOTMsIDM1MTAxLCAzNTEwOSwgCisgICAgMzUxMTcsIDM1MTI1LCAzNTEzMywgMzUxNDIsIDM1MTUxLCAzNTE2MSwgMzUxNzEsIDM1MTc4LCAzNTE4NSwgMzUxOTMsIAorICAgIDM1MjAxLCAzNTIwOSwgMzUyMTcsIDM1MjI0LCAzNTIzMSwgMzUyMzksIDM1MjQ3LCAzNTI1NSwgMzUyNjMsIDM1MjcxLCAKKyAgICAzNTI3OSwgMzUyODcsIDM1Mjk1LCAzNTMwMywgMzUzMTEsIDM1MzE5LCAzNTMyNywgMzUzMzUsIDM1MzQzLCAzNTM1MSwgCisgICAgMzUzNTksIDM1MzY4LCAzNTM3NywgMzUzODYsIDM1Mzk0LCAzNTQwMywgMzU0MTIsIDM1NDIxLCAzNTQzMCwgMzU0NDAsIAorICAgIDM1NDQ5LCAzNTQ1NiwgMzU0NjEsIDM1NDY4LCAzNTQ3NSwgMzU0ODMsIDM1NDkxLCAzNTUwMCwgMzU1MDksIDM1NTE5LCAKKyAgICAzNTUyOSwgMzU1NDAsIDM1NTUxLCAzNTU2MCwgMzU1NjksIDM1NTc5LCAzNTU4OSwgMzU1OTgsIDM1NjA3LCAzNTYxNywgCisgICAgMzU2MjcsIDM1NjM4LCAzNTY0OSwgMzU2NTgsIDM1NjY3LCAzNTY3NywgMzU2ODcsIDM1Njk0LCAzNTcwMSwgMzU3MDksIAorICAgIDM1NzE3LCAzNTcyMywgMzU3MjksIDM1NzM4LCAzNTc0NywgMzU3NTcsIDM1NzY3LCAzNTc3OCwgMzU3ODksIDM1Nzk4LCAKKyAgICAzNTgwNywgMzU4MTcsIDM1ODI3LCAzNTgzNiwgMzU4NDUsIDM1ODUzLCAzNTg2MSwgMzU4NjgsIDM1ODc1LCAzNTg4MywgCisgICAgMzU4OTEsIDM1OTAwLCAzNTkwOSwgMzU5MTksIDM1OTI5LCAzNTk0MCwgMzU5NTEsIDM1OTYwLCAzNTk2OSwgMzU5NzksIAorICAgIDM1OTg5LCAzNTk5OCwgMzYwMDcsIDM2MDE3LCAzNjAyNywgMzYwMzgsIDM2MDQ5LCAzNjA1OCwgMzYwNjcsIDM2MDc3LCAKKyAgICAzNjA4NywgMzYwOTQsIDM2MTAxLCAzNjEwOSwgMzYxMTcsIDM2MTI2LCAzNjEzNSwgMzYxNDUsIDM2MTU1LCAzNjE2NiwgCisgICAgMzYxNzcsIDM2MTg2LCAzNjE5NSwgMzYyMDUsIDM2MjE1LCAzNjIyMywgMzYyMzEsIDM2MjM5LCAzNjI0NywgMzYyNTYsIAorICAgIDM2MjY1LCAzNjI3MiwgMzYyNzksIDM2Mjg2LCAzNjI5MywgMzYzMDAsIDM2MzA3LCAzNjMxNSwgMzYzMjMsIDM2MzMxLCAKKyAgICAzNjMzOSwgMzYzNTAsIDM2MzYxLCAzNjM3MiwgMzYzODMsIDM2Mzk0LCAzNjQwNSwgMzY0MTMsIDM2NDIxLCAzNjQzMiwgCisgICAgMzY0NDMsIDM2NDU0LCAzNjQ2NSwgMzY0NzYsIDM2NDg3LCAzNjQ5NSwgMzY1MDMsIDM2NTE0LCAzNjUyNSwgMzY1MzYsIDAsIAorICAgIDAsIDM2NTQ3LCAzNjU1NSwgMzY1NjMsIDM2NTc0LCAzNjU4NSwgMzY1OTYsIDAsIDAsIDM2NjA3LCAzNjYxNSwgMzY2MjMsIAorICAgIDM2NjM0LCAzNjY0NSwgMzY2NTYsIDM2NjY3LCAzNjY3OCwgMzY2ODksIDM2Njk3LCAzNjcwNSwgMzY3MTYsIDM2NzI3LCAKKyAgICAzNjczOCwgMzY3NDksIDM2NzYwLCAzNjc3MSwgMzY3NzksIDM2Nzg3LCAzNjc5OCwgMzY4MDksIDM2ODIwLCAzNjgzMSwgCisgICAgMzY4NDIsIDM2ODUzLCAzNjg2MSwgMzY4NjksIDM2ODgwLCAzNjg5MSwgMzY5MDIsIDM2OTEzLCAzNjkyNCwgMzY5MzUsIAorICAgIDM2OTQzLCAzNjk1MSwgMzY5NjIsIDM2OTczLCAzNjk4NCwgMCwgMCwgMzY5OTUsIDM3MDAzLCAzNzAxMSwgMzcwMjIsIAorICAgIDM3MDMzLCAzNzA0NCwgMCwgMCwgMzcwNTUsIDM3MDYzLCAzNzA3MSwgMzcwODIsIDM3MDkzLCAzNzEwNCwgMzcxMTUsIAorICAgIDM3MTI2LCAwLCAzNzEzNywgMCwgMzcxNDUsIDAsIDM3MTU2LCAwLCAzNzE2NywgMzcxNzgsIDM3MTg2LCAzNzE5NCwgCisgICAgMzcyMDUsIDM3MjE2LCAzNzIyNywgMzcyMzgsIDM3MjQ5LCAzNzI2MCwgMzcyNjgsIDM3Mjc2LCAzNzI4NywgMzcyOTgsIAorICAgIDM3MzA5LCAzNzMyMCwgMzczMzEsIDM3MzQyLCAzNzM1MCwgMzczNTgsIDM3MzY2LCAzNzM3NCwgMzczODIsIDM3MzkwLCAKKyAgICAzNzM5OCwgMzc0MDYsIDM3NDE0LCAzNzQyMiwgMzc0MzAsIDM3NDM4LCAzNzQ0NiwgMCwgMCwgMzc0NTQsIDM3NDY1LCAKKyAgICAzNzQ3NiwgMzc0OTAsIDM3NTA0LCAzNzUxOCwgMzc1MzIsIDM3NTQ2LCAzNzU2MCwgMzc1NzEsIDM3NTgyLCAzNzU5NiwgCisgICAgMzc2MTAsIDM3NjI0LCAzNzYzOCwgMzc2NTIsIDM3NjY2LCAzNzY3NywgMzc2ODgsIDM3NzAyLCAzNzcxNiwgMzc3MzAsIAorICAgIDM3NzQ0LCAzNzc1OCwgMzc3NzIsIDM3NzgzLCAzNzc5NCwgMzc4MDgsIDM3ODIyLCAzNzgzNiwgMzc4NTAsIDM3ODY0LCAKKyAgICAzNzg3OCwgMzc4ODksIDM3OTAwLCAzNzkxNCwgMzc5MjgsIDM3OTQyLCAzNzk1NiwgMzc5NzAsIDM3OTg0LCAzNzk5NSwgCisgICAgMzgwMDYsIDM4MDIwLCAzODAzNCwgMzgwNDgsIDM4MDYyLCAzODA3NiwgMzgwOTAsIDM4MDk4LCAzODEwNiwgMzgxMTcsIAorICAgIDM4MTI1LCAwLCAzODEzNiwgMzgxNDQsIDM4MTU1LCAzODE2MywgMzgxNzEsIDM4MTc5LCAzODE4NywgMzgxOTUsIDM4MTk4LCAKKyAgICAzODIwMSwgMzgyMDQsIDM4MjA3LCAzODIxMywgMzgyMjQsIDM4MjMyLCAwLCAzODI0MywgMzgyNTEsIDM4MjYyLCAzODI3MCwgCisgICAgMzgyNzgsIDM4Mjg2LCAzODI5NCwgMzgzMDIsIDM4MzA4LCAzODMxNCwgMzgzMjAsIDM4MzI4LCAzODMzNiwgMzgzNDcsIDAsIAorICAgIDAsIDM4MzU4LCAzODM2NiwgMzgzNzcsIDM4Mzg1LCAzODM5MywgMzg0MDEsIDAsIDM4NDA5LCAzODQxNSwgMzg0MjEsIAorICAgIDM4NDI3LCAzODQzNSwgMzg0NDMsIDM4NDU0LCAzODQ2NSwgMzg0NzMsIDM4NDgxLCAzODQ4OSwgMzg1MDAsIDM4NTA4LCAKKyAgICAzODUxNiwgMzg1MjQsIDM4NTMyLCAzODU0MCwgMzg1NDYsIDM4NTUyLCAwLCAwLCAzODU1NSwgMzg1NjYsIDM4NTc0LCAwLCAKKyAgICAzODU4NSwgMzg1OTMsIDM4NjA0LCAzODYxMiwgMzg2MjAsIDM4NjI4LCAzODYzNiwgMzg2NDQsIDM4NjQ3LCAwLCAzODY1MCwgCisgICAgMzg2NTQsIDM4NjU4LCAzODY2MiwgMzg2NjYsIDM4NjcwLCAzODY3NCwgMzg2NzgsIDM4NjgyLCAzODY4NiwgMzg2OTAsIAorICAgIDM4Njk0LCAzODcwMCwgMzg3MDYsIDM4NzEyLCAzODcxNSwgMzg3MTgsIDM4NzIwLCAzODcyNCwgMzg3MjgsIDM4NzMyLCAKKyAgICAzODczNiwgMzg3MzgsIDM4NzQyLCAzODc0NiwgMzg3NTIsIDM4NzU4LCAzODc2NSwgMzg3NzIsIDM4Nzc3LCAzODc4MiwgCisgICAgMzg3ODgsIDM4Nzk0LCAzODc5NiwgMzg3OTksIDM4ODAxLCAzODgwNSwgMzg4MDksIDM4ODEzLCAzODgxNiwgMzg4MjAsIAorICAgIDM4ODI0LCAzODgyOCwgMzg4MzIsIDM4ODM2LCAzODg0MiwgMzg4NDYsIDM4ODUwLCAzODg1NiwgMzg4NjEsIDM4ODY4LCAKKyAgICAzODg3MCwgMzg4NzMsIDM4ODc3LCAzODg4MSwgMzg4ODYsIDM4ODkyLCAzODg5NCwgMzg5MDMsIDM4OTEyLCAzODkxNSwgCisgICAgMzg5MTksIDM4OTIxLCAzODkyMywgMzg5MjUsIDM4OTI4LCAzODkzNCwgMzg5MzYsIDM4OTQwLCAzODk0NCwgMzg5NTEsIAorICAgIDM4OTU4LCAzODk2MiwgMzg5NjcsIDM4OTcyLCAzODk3NywgMzg5ODIsIDM4OTg2LCAzODk5MCwgMzg5OTMsIDM4OTk3LCAKKyAgICAzOTAwMSwgMzkwMDgsIDM5MDEzLCAzOTAxNywgMzkwMjEsIDM5MDI2LCAzOTAzMCwgMzkwMzQsIDM5MDM5LCAzOTA0NCwgCisgICAgMzkwNDgsIDM5MDUyLCAzOTA1NiwgMzkwNTgsIDM5MDYzLCAzOTA2OCwgMzkwNzIsIDM5MDc2LCAzOTA4MCwgMzkwODQsIDAsIAorICAgIDM5MDg4LCAzOTA5MiwgMzkwOTYsIDM5MTAyLCAzOTEwOCwgMzkxMTQsIDM5MTIwLCAzOTEyNywgMzkxMzQsIDM5MTM5LCAKKyAgICAzOTE0NCwgMzkxNDgsIDAsIDAsIDM5MTU0LCAzOTE1NywgMzkxNjAsIDM5MTYzLCAzOTE2NiwgMzkxNjksIDM5MTcyLCAKKyAgICAzOTE3NiwgMzkxODAsIDM5MTg1LCAzOTE5MCwgMzkxOTUsIDM5MjAyLCAzOTIwNiwgMzkyMDksIDM5MjEyLCAzOTIxNSwgCisgICAgMzkyMTgsIDM5MjIxLCAzOTIyNCwgMzkyMjcsIDM5MjMwLCAzOTIzMywgMzkyMzcsIDM5MjQxLCAzOTI0NiwgMzkyNTEsIDAsIAorICAgIDM5MjU2LCAzOTI2MiwgMzkyNjgsIDM5Mjc0LCAzOTI4MSwgMzkyODgsIDM5Mjk1LCAzOTMwMiwgMzkzMDgsIDM5MzE0LCAKKyAgICAzOTMyMSwgMzkzMjgsIDM5MzM1LCAwLCAwLCAwLCAzOTM0MiwgMzkzNDUsIDM5MzQ4LCAzOTM1MSwgMzkzNTYsIDM5MzU5LCAKKyAgICAzOTM2MiwgMzkzNjUsIDM5MzY4LCAzOTM3MSwgMzkzNzQsIDM5Mzc4LCAzOTM4MSwgMzkzODQsIDM5Mzg3LCAzOTM5MCwgCisgICAgMzkzOTMsIDM5Mzk4LCAzOTQwMSwgMzk0MDQsIDM5NDA3LCAzOTQxMCwgMzk0MTMsIDM5NDE4LCAzOTQyMSwgMzk0MjQsIAorICAgIDM5NDI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzOTQzNCwgMzk0MzksIDM5NDQ0LCAzOTQ1MSwgMzk0NTksIDM5NDY0LCAzOTQ2OSwgMzk0NzMsIDM5NDc3LCAzOTQ4MiwgCisgICAgMzk0ODksIDM5NDk2LCAzOTUwMCwgMzk1MDUsIDM5NTEwLCAzOTUxNSwgMzk1MjAsIDM5NTI3LCAzOTUzMiwgMzk1MzcsIAorICAgIDM5NTQyLCAzOTU1MSwgMzk1NTgsIDM5NTY1LCAzOTU2OSwgMzk1NzQsIDM5NTgwLCAzOTU4NSwgMzk1OTIsIDM5NjAxLCAKKyAgICAzOTYxMCwgMzk2MTQsIDM5NjE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTYyMiwgCisgICAgMzk2MjYsIDM5NjM0LCAzOTYzOCwgMzk2NDIsIDM5NjQ3LCAzOTY1MSwgMzk2NTUsIDM5NjU5LCAzOTY2MSwgMzk2NjUsIAorICAgIDM5NjY5LCAzOTY3MywgMzk2NzgsIDM5NjgyLCAzOTY4NiwgMzk2OTQsIDM5Njk3LCAzOTcwMSwgMzk3MDQsIDM5NzA3LCAKKyAgICAzOTcxMywgMzk3MTcsIDM5NzIwLCAzOTcyNiwgMzk3MzAsIDM5NzM0LCAzOTczOCwgMzk3NDEsIDM5NzQ1LCAzOTc0OCwgCisgICAgMzk3NTIsIDM5NzU0LCAzOTc1NywgMzk3NjAsIDM5NzY0LCAzOTc2NiwgMzk3NzAsIDM5NzczLCAzOTc3NiwgMzk3ODEsIAorICAgIDM5Nzg2LCAzOTc5MywgMzk3OTYsIDM5Nzk5LCAzOTgwMywgMzk4MDgsIDM5ODExLCAzOTgxNCwgMzk4MTcsIDM5ODIxLCAKKyAgICAzOTgyNiwgMzk4MjksIDM5ODMyLCAzOTgzNCwgMzk4MzcsIDM5ODQwLCAzOTg0MywgMzk4NDcsIDM5ODUyLCAzOTg1NSwgCisgICAgMzk4NTksIDM5ODYzLCAzOTg2NywgMzk4NzEsIDM5ODc2LCAzOTg4MiwgMzk4ODcsIDM5ODkyLCAzOTg5OCwgMzk5MDMsIAorICAgIDM5OTA4LCAzOTkxMiwgMzk5MTYsIDM5OTIxLCAzOTkyNSwgMzk5MjksIDM5OTMyLCAzOTkzNCwgMzk5MzksIDM5OTQ1LCAKKyAgICAzOTk1MiwgMzk5NTksIDM5OTY2LCAzOTk3MywgMzk5ODAsIDM5OTg3LCAzOTk5NCwgNDAwMDEsIDQwMDA5LCA0MDAxNiwgCisgICAgNDAwMjQsIDQwMDMxLCA0MDAzOCwgNDAwNDYsIDQwMDU0LCA0MDA1OSwgNDAwNjQsIDQwMDY5LCA0MDA3NCwgNDAwNzksIAorICAgIDQwMDg0LCA0MDA4OSwgNDAwOTQsIDQwMDk5LCA0MDEwNCwgNDAxMTAsIDQwMTE2LCA0MDEyMiwgNDAxMjgsIDQwMTM1LCAKKyAgICA0MDE0MywgNDAxNTAsIDQwMTU2LCA0MDE2MiwgNDAxNjgsIDQwMTc0LCA0MDE4MCwgNDAxODYsIDQwMTkyLCA0MDE5OCwgCisgICAgNDAyMDQsIDQwMjExLCA0MDIxOCwgNDAyMjUsIDQwMjMyLCA0MDI0MCwgNDAyNDksIDQwMjU3LCA0MDI2OCwgNDAyNzYsIAorICAgIDQwMjg0LCA0MDI5MywgNDAzMDAsIDQwMzA5LCA0MDMxOCwgNDAzMjYsIDQwMzM1LCAwLCAwLCAwLCAwLCAwLCAwLCA0MDM0MywgCisgICAgNDAzNDUsIDQwMzQ4LCA0MDM1MCwgNDAzNTMsIDQwMzU2LCA0MDM1OSwgNDAzNjQsIDQwMzY5LCA0MDM3NCwgNDAzNzksIAorICAgIDQwMzgzLCA0MDM4NywgNDAzOTEsIDQwMzk1LCA0MDQwMCwgNDA0MDYsIDQwNDExLCA0MDQxNywgNDA0MjIsIDQwNDI3LCAKKyAgICA0MDQzMiwgNDA0MzgsIDQwNDQzLCA0MDQ0OSwgNDA0NTUsIDQwNDU5LCA0MDQ2MywgNDA0NjgsIDQwNDczLCA0MDQ3OCwgCisgICAgNDA0ODMsIDQwNDg4LCA0MDQ5NiwgNDA1MDQsIDQwNTEyLCA0MDUyMCwgNDA1MjcsIDQwNTM1LCA0MDU0MiwgNDA1NDksIAorICAgIDQwNTU4LCA0MDU3MCwgNDA1NzYsIDQwNTgyLCA0MDU5MCwgNDA1OTgsIDQwNjA3LCA0MDYxNiwgNDA2MjQsIDQwNjMyLCAKKyAgICA0MDY0MSwgNDA2NTAsIDQwNjU1LCA0MDY2MywgNDA2NjgsIDQwNjczLCA0MDY3OSwgNDA2ODQsIDQwNjkwLCA0MDY5NywgCisgICAgNDA3MDQsIDQwNzA5LCA0MDcxNSwgNDA3MjAsIDQwNzIzLCA0MDcyNywgNDA3MzAsIDQwNzM0LCA0MDczOCwgNDA3NDIsIAorICAgIDQwNzQ4LCA0MDc1NCwgNDA3NjAsIDQwNzY2LCA0MDc3MCwgNDA3NzQsIDQwNzc4LCA0MDc4MiwgNDA3ODgsIDQwNzk0LCAKKyAgICA0MDc5OCwgNDA4MDMsIDQwODA3LCA0MDgxMiwgNDA4MTcsIDQwODIyLCA0MDgyNSwgNDA4MjksIDQwODMyLCA0MDgzNiwgCisgICAgNDA4NDMsIDQwODUxLCA0MDg2MiwgNDA4NzMsIDQwODc4LCA0MDg4NywgNDA4OTQsIDQwOTAzLCA0MDkxMiwgNDA5MTYsIAorICAgIDQwOTIyLCA0MDkzMCwgNDA5MzQsIDQwOTM5LCA0MDk0NCwgNDA5NTAsIDQwOTU2LCA0MDk2MiwgNDA5NjksIDQwOTczLCAKKyAgICA0MDk3NywgNDA5ODIsIDQwOTg1LCA0MDk4NywgNDA5OTEsIDQwOTk1LCA0MTAwMywgNDEwMDcsIDQxMDA5LCA0MTAxMSwgCisgICAgNDEwMTUsIDQxMDIzLCA0MTAyOCwgNDEwMzQsIDQxMDQ0LCA0MTA1MSwgNDEwNTYsIDQxMDYwLCA0MTA2NCwgNDEwNjgsIAorICAgIDQxMDcxLCA0MTA3NCwgNDEwNzcsIDQxMDgxLCA0MTA4NSwgNDEwODksIDQxMDkzLCA0MTA5NywgNDExMDAsIDQxMTA0LCAKKyAgICA0MTEwOCwgNDExMTEsIDQxMTEzLCA0MTExNiwgNDExMTgsIDQxMTIyLCA0MTEyNiwgNDExMjgsIDQxMTM0LCA0MTEzNywgCisgICAgNDExNDIsIDQxMTQ2LCA0MTE1MCwgNDExNTIsIDQxMTU0LCA0MTE1NiwgNDExNTksIDQxMTYzLCA0MTE2NywgNDExNzEsIAorICAgIDQxMTc1LCA0MTE3OSwgNDExODUsIDQxMTkxLCA0MTE5MywgNDExOTUsIDQxMTk3LCA0MTE5OSwgNDEyMDIsIDQxMjA0LCAKKyAgICA0MTIwOCwgNDEyMTAsIDQxMjE0LCA0MTIxNywgNDEyMjMsIDQxMjI3LCA0MTIzMSwgNDEyMzQsIDQxMjM3LCA0MTI0MSwgCisgICAgNDEyNDcsIDQxMjUxLCA0MTI2MSwgNDEyNzEsIDQxMjc1LCA0MTI4MSwgNDEyODcsIDQxMjkwLCA0MTI5NCwgNDEyOTcsIAorICAgIDQxMzAyLCA0MTMwNiwgNDEzMTIsIDQxMzE2LCA0MTMyOCwgNDEzMzYsIDQxMzQwLCA0MTM0NCwgNDEzNTAsIDQxMzU0LCAKKyAgICA0MTM1NywgNDEzNTksIDQxMzYyLCA0MTM2NiwgNDEzNzAsIDQxMzc3LCA0MTM4MSwgNDEzODUsIDQxMzg5LCA0MTM5MiwgCisgICAgNDEzOTcsIDQxNDAyLCA0MTQwNywgNDE0MTIsIDQxNDE3LCA0MTQyMiwgNDE0MzAsIDQxNDM4LCA0MTQ0MiwgNDE0NDYsIAorICAgIDQxNDQ4LCA0MTQ1MywgNDE0NTcsIDQxNDYxLCA0MTQ2OSwgNDE0NzcsIDQxNDgzLCA0MTQ4OSwgNDE0OTgsIDQxNTA3LCAKKyAgICA0MTUxMiwgNDE1MTcsIDQxNTI1LCA0MTUzMywgNDE1MzUsIDQxNTM3LCA0MTU0MiwgNDE1NDcsIDQxNTUzLCA0MTU1OSwgCisgICAgNDE1NjUsIDQxNTcxLCA0MTU3NSwgNDE1NzksIDQxNTg2LCA0MTU5MywgNDE1OTksIDQxNjA1LCA0MTYxNSwgNDE2MjUsIAorICAgIDQxNjMzLCA0MTY0MSwgNDE2NDMsIDQxNjQ3LCA0MTY1MSwgNDE2NTYsIDQxNjYxLCA0MTY2OCwgNDE2NzUsIDQxNjc4LCAKKyAgICA0MTY4MSwgNDE2ODQsIDQxNjg3LCA0MTY5MCwgNDE2OTUsIDQxNjk5LCA0MTcwNCwgNDE3MDksIDQxNzEyLCA0MTcxNSwgCisgICAgNDE3MTgsIDQxNzIxLCA0MTcyNCwgNDE3MjgsIDQxNzMxLCA0MTczNCwgNDE3MzcsIDQxNzQwLCA0MTc0MiwgNDE3NDQsIAorICAgIDQxNzQ2LCA0MTc0OCwgNDE3NTYsIDQxNzY0LCA0MTc3MCwgNDE3NzQsIDQxNzgwLCA0MTc5MCwgNDE3OTYsIDQxODAyLCAKKyAgICA0MTgwOCwgNDE4MTYsIDQxODI0LCA0MTgzNSwgNDE4MzksIDQxODQzLCA0MTg0NSwgNDE4NTEsIDQxODUzLCA0MTg1NSwgCisgICAgNDE4NTcsIDQxODU5LCA0MTg2NSwgNDE4NjgsIDQxODc0LCA0MTg4MCwgNDE4ODQsIDQxODg4LCA0MTg5MiwgNDE4OTUsIAorICAgIDQxODk5LCA0MTkwMywgNDE5MDUsIDQxOTE0LCA0MTkyMywgNDE5MjgsIDQxOTMzLCA0MTkzOSwgNDE5NDUsIDQxOTUxLCAKKyAgICA0MTk1NCwgNDE5NTcsIDQxOTYwLCA0MTk2MywgNDE5NjUsIDQxOTcwLCA0MTk3NSwgNDE5ODAsIDQxOTg2LCA0MTk5MiwgCisgICAgNDIwMDAsIDQyMDA4LCA0MjAxNCwgNDIwMjAsIDQyMDI2LCA0MjAzMiwgNDIwNDEsIDQyMDUwLCA0MjA1OSwgNDIwNjgsIAorICAgIDQyMDc3LCA0MjA4NiwgNDIwOTUsIDQyMTA0LCA0MjExMywgNDIxMjIsIDQyMTMwLCA0MjE0MiwgNDIxNTIsIDQyMTY3LCAKKyAgICA0MjE3MCwgNDIxNzUsIDQyMTgxLCA0MjE4NywgNDIxOTQsIDQyMjA4LCA0MjIyMywgNDIyMjksIDQyMjM1LCA0MjI0MiwgCisgICAgNDIyNDgsIDQyMjU2LCA0MjI2MiwgNDIyNzUsIDQyMjg5LCA0MjI5NCwgNDIzMDAsIDQyMzA3LCA0MjMxMCwgNDIzMTMsIAorICAgIDQyMzE1LCA0MjMxOCwgNDIzMjEsIDQyMzIzLCA0MjMyNSwgNDIzMjksIDQyMzMyLCA0MjMzNSwgNDIzMzgsIDQyMzQxLCAKKyAgICA0MjM0NiwgNDIzNTEsIDQyMzU2LCA0MjM2MSwgNDIzNjYsIDQyMzY5LCA0MjM3MSwgNDIzNzMsIDQyMzc1LCA0MjM3OSwgCisgICAgNDIzODMsIDQyMzg3LCA0MjM5MywgNDIzOTgsIDQyNDAwLCA0MjQwMiwgNDI0MDcsIDQyNDEyLCA0MjQxNywgNDI0MjIsIAorICAgIDQyNDI3LCA0MjQzMiwgNDI0MzQsIDQyNDM2LCA0MjQ0NSwgNDI0NDksIDQyNDU3LCA0MjQ2NiwgNDI0NjgsIDQyNDczLCAKKyAgICA0MjQ3OCwgNDI0ODYsIDQyNDkwLCA0MjQ5MiwgNDI0OTYsIDQyNDk4LCA0MjUwMiwgNDI1MDYsIDQyNTEwLCA0MjUxMiwgCisgICAgNDI1MTQsIDQyNTE2LCA0MjUyMywgNDI1MzIsIDQyNTQxLCA0MjU1MCwgNDI1NTksIDQyNTY4LCA0MjU3NywgNDI1ODYsIAorICAgIDQyNTk1LCA0MjYwMywgNDI2MTEsIDQyNjIwLCA0MjYyOSwgNDI2MzgsIDQyNjQ3LCA0MjY1NSwgNDI2NjMsIDQyNjcyLCAKKyAgICA0MjY4MSwgNDI2OTAsIDQyNzAwLCA0MjcwOSwgNDI3MTksIDQyNzI4LCA0MjczOCwgNDI3NDcsIDQyNzU3LCA0Mjc2NywgCisgICAgNDI3NzYsIDQyNzg2LCA0Mjc5NSwgNDI4MDUsIDQyODE0LCA0MjgyNCwgNDI4MzMsIDQyODQyLCA0Mjg1MSwgNDI4NjAsIAorICAgIDQyODY5LCA0Mjg3OSwgNDI4ODgsIDQyODk3LCA0MjkwNiwgNDI5MTYsIDQyOTI1LCA0MjkzNCwgNDI5NDMsIDQyOTUyLCAKKyAgICA0Mjk2MiwgNDI5NzIsIDQyOTgxLCA0Mjk5MCwgNDI5OTgsIDQzMDA2LCA0MzAxMywgNDMwMjEsIDQzMDMwLCA0MzA0MSwgCisgICAgNDMwNTAsIDQzMDU5LCA0MzA2OCwgNDMwNzUsIDQzMDgyLCA0MzA4OSwgNDMwOTgsIDQzMTA3LCA0MzExNiwgNDMxMjUsIAorICAgIDQzMTMyLCA0MzEzNywgNDMxNDYsIDQzMTUxLCA0MzE1NCwgNDMxNjIsIDQzMTY1LCA0MzE3MCwgNDMxNzUsIDQzMTc4LCAKKyAgICA0MzE4MSwgNDMxODksIDQzMTkyLCA0MzE5NywgNDMyMDAsIDQzMjA3LCA0MzIxMiwgNDMyMjAsIDQzMjIzLCA0MzIyNiwgCisgICAgNDMyMjksIDQzMjM0LCA0MzIzOSwgNDMyNDIsIDQzMjQ1LCA0MzI1MywgNDMyNTYsIDQzMjYzLCA0MzI3MCwgNDMyNzQsIAorICAgIDQzMjc4LCA0MzI4MywgNDMyODgsIDQzMjk0LCA0MzI5OSwgNDMzMDUsIDQzMzExLCA0MzMxNiwgNDMzMjIsIDQzMzMwLCAKKyAgICA0MzMzNiwgNDMzNDQsIDQzMzUyLCA0MzM1OCwgNDMzNjYsIDQzMzc0LCA0MzM4MywgNDMzOTEsIDQzMzk3LCA0MzQwNSwgCisgICAgNDM0MTQsIDQzNDIyLCA0MzQyNiwgNDM0MzEsIDQzNDQ0LCA0MzQ1NywgNDM0NjEsIDQzNDY1LCA0MzQ2OSwgNDM0NzMsIAorICAgIDQzNDgzLCA0MzQ4NywgNDM0OTIsIDQzNDk3LCA0MzUwMiwgNDM1MDcsIDQzNTEyLCA0MzUxNywgNDM1MjcsIDQzNTM3LCAKKyAgICA0MzU0NSwgNDM1NTUsIDQzNTY1LCA0MzU3MywgNDM1ODMsIDQzNTkzLCA0MzYwMSwgNDM2MTEsIDQzNjIxLCA0MzYyOSwgCisgICAgNDM2MzcsIDQzNjQ3LCA0MzY1NywgNDM2NjAsIDQzNjYzLCA0MzY2NiwgNDM2NzEsIDQzNjc1LCA0MzY4MSwgNDM2ODgsIAorICAgIDQzNjk1LCA0MzcwMywgNDM3MTAsIDQzNzE0LCA0MzcxOCwgNDM3MjIsIDQzNzI2LCA0MzcyOCwgNDM3MzIsIDQzNzM2LCAKKyAgICA0Mzc0MSwgNDM3NDYsIDQzNzUzLCA0Mzc2MCwgNDM3NjMsIDQzNzcwLCA0Mzc3MiwgNDM3NzQsIDQzNzc4LCA0Mzc4MiwgCisgICAgNDM3ODcsIDQzNzkzLCA0Mzc5OSwgNDM4MDUsIDQzODExLCA0MzgyMCwgNDM4MjksIDQzODM4LCA0Mzg0MiwgNDM4NDQsIAorICAgIDQzODQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0Mzg1NSwgNDM4NTksIDQzODY2LCA0Mzg3MywgCisgICAgNDM4ODAsIDQzODg3LCA0Mzg5MSwgNDM4OTUsIDQzODk5LCA0MzkwMywgNDM5MDgsIDQzOTE0LCA0MzkxOSwgNDM5MjUsIAorICAgIDQzOTMxLCA0MzkzNywgNDM5NDMsIDQzOTUxLCA0Mzk1OCwgNDM5NjUsIDQzOTcyLCA0Mzk3OSwgNDM5ODQsIDQzOTkwLCAKKyAgICA0Mzk5OSwgNDQwMDMsIDQ0MDEwLCA0NDAxNCwgNDQwMTgsIDQ0MDI0LCA0NDAzMCwgNDQwMzYsIDQ0MDQyLCA0NDA0NiwgCisgICAgNDQwNTAsIDQ0MDUzLCA0NDA1NiwgNDQwNjAsIDQ0MDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDA3NCwgNDQwNzcsIDQ0MDgxLCA0NDA4NSwgNDQwOTEsIAorICAgIDQ0MDk3LCA0NDEwMywgNDQxMTEsIDQ0MTE4LCA0NDEyMiwgNDQxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MTM1LCA0NDEzOCwgNDQxNDEsIDQ0MTQ0LCA0NDE0NywgCisgICAgNDQxNTAsIDQ0MTUzLCA0NDE1NiwgNDQxNTksIDQ0MTYyLCA0NDE2NiwgNDQxNzAsIDQ0MTc0LCA0NDE3OCwgNDQxODIsIAorICAgIDQ0MTg2LCA0NDE5MCwgNDQxOTQsIDQ0MTk4LCA0NDIwMiwgNDQyMDYsIDQ0MjA5LCA0NDIxMiwgNDQyMTUsIDQ0MjE4LCAKKyAgICA0NDIyMSwgNDQyMjQsIDQ0MjI3LCA0NDIzMCwgNDQyMzMsIDQ0MjM3LCA0NDI0MSwgNDQyNDUsIDQ0MjQ5LCA0NDI1MywgCisgICAgNDQyNTcsIDQ0MjYxLCA0NDI2NSwgNDQyNjksIDQ0MjczLCA0NDI3NywgNDQyODMsIDQ0Mjg5LCA0NDI5NSwgNDQzMDIsIAorICAgIDQ0MzA5LCA0NDMxNiwgNDQzMjMsIDQ0MzMwLCA0NDMzNywgNDQzNDQsIDQ0MzUxLCA0NDM1OCwgNDQzNjUsIDQ0MzcyLCAKKyAgICA0NDM3OSwgNDQzODYsIDQ0MzkzLCA0NDQwMCwgNDQ0MDcsIDQ0NDE0LCA0NDQxOSwgNDQ0MjUsIDQ0NDMxLCA0NDQzNywgCisgICAgNDQ0NDIsIDQ0NDQ4LCA0NDQ1NCwgNDQ0NjAsIDQ0NDY1LCA0NDQ3MSwgNDQ0NzcsIDQ0NDgyLCA0NDQ4NywgNDQ0OTMsIAorICAgIDQ0NDk4LCA0NDUwNCwgNDQ1MTAsIDQ0NTE1LCA0NDUyMSwgNDQ1MjcsIDQ0NTMyLCA0NDUzOCwgNDQ1NDQsIDQ0NTUwLCAKKyAgICA0NDU1NiwgNDQ1NjIsIDQ0NTY3LCA0NDU3MywgNDQ1NzksIDQ0NTg1LCA0NDU5MCwgNDQ1OTYsIDQ0NjAyLCA0NDYwOCwgCisgICAgNDQ2MTMsIDQ0NjE5LCA0NDYyNSwgNDQ2MzAsIDQ0NjM1LCA0NDY0MSwgNDQ2NDYsIDQ0NjUyLCA0NDY1OCwgNDQ2NjMsIAorICAgIDQ0NjY5LCA0NDY3NSwgNDQ2ODAsIDQ0Njg2LCA0NDY5MiwgNDQ2OTgsIDQ0NzA0LCA0NDcxMCwgNDQ3MTUsIDQ0NzIxLCAKKyAgICA0NDcyNywgNDQ3MzMsIDQ0NzM4LCA0NDc0NCwgNDQ3NTAsIDQ0NzU2LCA0NDc2MSwgNDQ3NjcsIDQ0NzczLCA0NDc3OCwgCisgICAgNDQ3ODMsIDQ0Nzg5LCA0NDc5NCwgNDQ4MDAsIDQ0ODA2LCA0NDgxMSwgNDQ4MTcsIDQ0ODIzLCA0NDgyOCwgNDQ4MzQsIAorICAgIDQ0ODQwLCA0NDg0NiwgNDQ4NTIsIDQ0ODU4LCA0NDg2MiwgNDQ4NjcsIDQ0ODcyLCA0NDg3NywgNDQ4ODIsIDQ0ODg3LCAKKyAgICA0NDg5MiwgNDQ4OTcsIDQ0OTAyLCA0NDkwNywgNDQ5MTIsIDQ0OTE2LCA0NDkyMCwgNDQ5MjQsIDQ0OTI4LCA0NDkzMiwgCisgICAgNDQ5MzYsIDQ0OTQwLCA0NDk0NCwgNDQ5NDgsIDQ0OTUzLCA0NDk1OCwgNDQ5NjMsIDQ0OTY4LCA0NDk3MywgNDQ5NzgsIAorICAgIDQ0OTg3LCA0NDk5NiwgNDUwMDUsIDQ1MDE0LCA0NTAyMywgNDUwMzIsIDQ1MDQxLCA0NTA1MCwgNDUwNTcsIDQ1MDY1LCAKKyAgICA0NTA3MywgNDUwODAsIDQ1MDg3LCA0NTA5NSwgNDUxMDMsIDQ1MTEwLCA0NTExNywgNDUxMjUsIDQ1MTMzLCA0NTE0MCwgCisgICAgNDUxNDcsIDQ1MTU1LCA0NTE2MywgNDUxNzAsIDQ1MTc3LCA0NTE4NSwgNDUxOTQsIDQ1MjAzLCA0NTIxMSwgNDUyMjAsIAorICAgIDQ1MjI5LCA0NTIzNiwgNDUyNDMsIDQ1MjUxLCA0NTI2MCwgNDUyNjksIDQ1Mjc3LCA0NTI4NiwgNDUyOTUsIDQ1MzAyLCAKKyAgICA0NTMwOSwgNDUzMTgsIDQ1MzI3LCA0NTMzNSwgNDUzNDMsIDQ1MzUyLCA0NTM2MSwgNDUzNjgsIDQ1Mzc1LCA0NTM4NCwgCisgICAgNDUzOTMsIDQ1NDAxLCA0NTQwOSwgNDU0MTgsIDQ1NDI3LCA0NTQzNCwgNDU0NDEsIDQ1NDUwLCA0NTQ1OSwgNDU0NjcsIAorICAgIDQ1NDc2LCA0NTQ4NSwgNDU0OTMsIDQ1NTAzLCA0NTUxMywgNDU1MjMsIDQ1NTMzLCA0NTU0MiwgNDU1NTEsIDQ1NTYwLCAKKyAgICA0NTU2OSwgNDU1NzYsIDQ1NTg0LCA0NTU5MiwgNDU2MDAsIDQ1NjA4LCA0NTYxMywgNDU2MTgsIDQ1NjI3LCA0NTYzNSwgCisgICAgNDU2NDIsIDQ1NjUxLCA0NTY1OSwgNDU2NjYsIDQ1Njc1LCA0NTY4MywgNDU2OTAsIDQ1Njk5LCA0NTcwNywgNDU3MTQsIAorICAgIDQ1NzIzLCA0NTczMSwgNDU3MzgsIDQ1NzQ3LCA0NTc1NSwgNDU3NjIsIDQ1NzcxLCA0NTc3OSwgNDU3ODYsIDQ1Nzk1LCAKKyAgICA0NTgwMywgNDU4MTAsIDQ1ODE5LCA0NTgyNywgNDU4MzQsIDQ1ODQzLCA0NTg1MiwgNDU4NjEsIDQ1ODcwLCA0NTg4NCwgCisgICAgNDU4OTgsIDQ1OTA1LCA0NTkxMCwgNDU5MTUsIDQ1OTIwLCA0NTkyNSwgNDU5MzAsIDQ1OTM1LCA0NTk0MCwgNDU5NDUsIAorICAgIDQ1OTUzLCA0NTk2MSwgNDU5NjksIDQ1OTc3LCA0NTk4MiwgNDU5ODksIDQ1OTk2LCA0NjAwMywgNDYwMDgsIDQ2MDE2LCAKKyAgICA0NjAyMywgNDYwMzEsIDQ2MDM1LCA0NjA0MiwgNDYwNDgsIDQ2MDU1LCA0NjA1OSwgNDYwNjUsIDQ2MDcxLCA0NjA3NywgCisgICAgNDYwODEsIDQ2MDg0LCA0NjA4OCwgNDYwOTIsIDQ2MDk5LCA0NjEwNSwgNDYxMTEsIDQ2MTE3LCA0NjEyMywgNDYxMzcsIAorICAgIDQ2MTQ3LCA0NjE2MSwgNDYxNzUsIDQ2MTgxLCA0NjE5MSwgNDYyMDUsIDQ2MjA4LCA0NjIxMSwgNDYyMTgsIDQ2MjI2LCAKKyAgICA0NjIzMSwgNDYyMzYsIDQ2MjQ0LCA0NjI1NiwgNDYyNjgsIDQ2Mjc2LCA0NjI4MCwgNDYyODQsIDQ2Mjg3LCA0NjI5MCwgCisgICAgNDYyOTQsIDQ2Mjk4LCA0NjMwMSwgNDYzMDQsIDQ2MzA5LCA0NjMxNCwgNDYzMjAsIDQ2MzI2LCA0NjMzMSwgNDYzMzYsIAorICAgIDQ2MzQyLCA0NjM0OCwgNDYzNTMsIDQ2MzU4LCA0NjM2MywgNDYzNjgsIDQ2Mzc0LCA0NjM4MCwgNDYzODUsIDQ2MzkwLCAKKyAgICA0NjM5NiwgNDY0MDIsIDQ2NDA3LCA0NjQxMiwgNDY0MTUsIDQ2NDE4LCA0NjQyNywgNDY0MjksIDQ2NDMxLCA0NjQzNCwgCisgICAgNDY0MzgsIDQ2NDQ0LCA0NjQ0NiwgNDY0NDksIDQ2NDU2LCA0NjQ2MywgNDY0NzEsIDQ2NDc5LCA0NjQ4OSwgNDY1MDMsIAorICAgIDQ2NTA4LCA0NjUxMywgNDY1MTcsIDQ2NTIyLCA0NjUzMCwgNDY1MzgsIDQ2NTQ3LCA0NjU1NiwgNDY1NjUsIDQ2NTc0LCAKKyAgICA0NjU3OSwgNDY1ODQsIDQ2NTkwLCA0NjU5NiwgNDY2MDIsIDQ2NjA4LCA0NjYxMSwgNDY2MTcsIDQ2NjIzLCA0NjYzMywgCisgICAgNDY2NDMsIDQ2NjUxLCA0NjY1OSwgNDY2NjgsIDQ2Njc3LCA0NjY4MSwgNDY2ODksIDQ2Njk3LCA0NjcwNSwgNDY3MTMsIAorICAgIDQ2NzIyLCA0NjczMSwgNDY3NDAsIDQ2NzQ5LCA0Njc1NCwgNDY3NTksIDQ2NzY0LCA0Njc2OSwgNDY3NzQsIDQ2NzgwLCAKKyAgICA0Njc4NiwgNDY3OTEsIDQ2Nzk3LCA0Njc5OSwgNDY4MDEsIDQ2ODAzLCA0NjgwNSwgNDY4MDgsIDQ2ODExLCA0NjgxMywgCisgICAgNDY4MTUsIDQ2ODE3LCA0NjgyMSwgNDY4MjUsIDQ2ODI3LCA0NjgyOSwgNDY4MzIsIDQ2ODM1LCA0NjgzOSwgNDY4NDUsIAorICAgIDQ2ODUxLCA0Njg1MywgNDY4NjAsIDQ2ODY0LCA0Njg2OSwgNDY4NzQsIDQ2ODc2LCA0Njg4NiwgNDY4OTIsIDQ2ODk4LCAKKyAgICA0NjkwNCwgNDY5MTAsIDQ2OTE2LCA0NjkyMiwgNDY5MjcsIDQ2OTMwLCA0NjkzMywgNDY5MzYsIDQ2OTM4LCA0Njk0MCwgCisgICAgNDY5NDQsIDQ2OTQ4LCA0Njk1MywgNDY5NTgsIDQ2OTYzLCA0Njk2NiwgNDY5NzAsIDQ2OTc1LCA0Njk3OCwgNDY5ODIsIAorICAgIDQ2OTg3LCA0Njk5MiwgNDY5OTcsIDQ3MDAyLCA0NzAwNywgNDcwMTIsIDQ3MDE3LCA0NzAyMiwgNDcwMjcsIDQ3MDMyLCAKKyAgICA0NzAzNywgNDcwNDIsIDQ3MDQ4LCA0NzA1NCwgNDcwNjAsIDQ3MDYyLCA0NzA2NSwgNDcwNjcsIDQ3MDcwLCA0NzA3MiwgCisgICAgNDcwNzQsIDQ3MDc2LCA0NzA3OCwgNDcwODAsIDQ3MDgyLCA0NzA4NCwgNDcwODYsIDQ3MDg4LCA0NzA5MCwgNDcwOTIsIAorICAgIDQ3MDk0LCA0NzA5NiwgNDcwOTgsIDQ3MTAwLCA0NzEwMiwgNDcxMDQsIDQ3MTA5LCA0NzExNCwgNDcxMTksIDQ3MTI0LCAKKyAgICA0NzEyOSwgNDcxMzQsIDQ3MTM5LCA0NzE0NCwgNDcxNDksIDQ3MTU0LCA0NzE1OSwgNDcxNjQsIDQ3MTY5LCA0NzE3NCwgCisgICAgNDcxNzksIDQ3MTg0LCA0NzE4OSwgNDcxOTQsIDQ3MTk5LCA0NzIwNCwgNDcyMDgsIDQ3MjEyLCA0NzIxNiwgNDcyMjIsIAorICAgIDQ3MjI4LCA0NzIzMywgNDcyMzgsIDQ3MjQzLCA0NzI0OCwgNDcyNTMsIDQ3MjU4LCA0NzI2NiwgNDcyNzQsIDQ3MjgyLCAKKyAgICA0NzI5MCwgNDcyOTgsIDQ3MzA2LCA0NzMxNCwgNDczMjIsIDQ3MzI4LCA0NzMzMywgNDczMzgsIDQ3MzQzLCA0NzM0NiwgCisgICAgNDczNTAsIDQ3MzU0LCA0NzM1OCwgNDczNjIsIDQ3MzY2LCA0NzM3MCwgNDczNzcsIDQ3Mzg0LCA0NzM5MiwgNDc0MDAsIAorICAgIDQ3NDA1LCA0NzQxMCwgNDc0MTcsIDQ3NDI0LCA0NzQzMSwgNDc0MzgsIDQ3NDQxLCA0NzQ0NCwgNDc0NDksIDQ3NDUxLCAKKyAgICA0NzQ1NSwgNDc0NjAsIDQ3NDYyLCA0NzQ2NCwgNDc0NjYsIDQ3NDY4LCA0NzQ3MywgNDc0NzYsIDQ3NDc4LCA0NzQ4MywgCisgICAgNDc0OTAsIDQ3NDk3LCA0NzUwMCwgNDc1MDQsIDQ3NTA5LCA0NzUxNCwgNDc1MjIsIDQ3NTI4LCA0NzUzNCwgNDc1NDYsIAorICAgIDQ3NTUzLCA0NzU2MCwgNDc1NjUsIDQ3NTcwLCA0NzU3NiwgNDc1NzksIDQ3NTgyLCA0NzU4NywgNDc1ODksIDQ3NTkzLCAKKyAgICA0NzU5NSwgNDc1OTcsIDQ3NTk5LCA0NzYwMSwgNDc2MDMsIDQ3NjA1LCA0NzYxMCwgNDc2MTIsIDQ3NjE0LCA0NzYxNiwgCisgICAgNDc2MTgsIDQ3NjIyLCA0NzYyNCwgNDc2MjcsIDQ3NjMyLCA0NzYzNywgNDc2NDIsIDQ3NjQ3LCA0NzY1MywgNDc2NTksIAorICAgIDQ3NjYxLCA0NzY2NCwgNDc2NzEsIDQ3Njc4LCA0NzY4NSwgNDc2OTIsIDQ3Njk2LCA0NzcwMCwgNDc3MDIsIDQ3NzA0LCAKKyAgICA0NzcwOCwgNDc3MTQsIDQ3NzE5LCA0NzcyMSwgNDc3MjUsIDQ3NzM0LCA0Nzc0MiwgNDc3NTAsIDQ3NzU2LCA0Nzc2MiwgCisgICAgNDc3NjcsIDQ3NzczLCA0Nzc3OCwgNDc3ODEsIDQ3Nzk1LCA0Nzc5OCwgNDc4MDMsIDQ3ODA4LCA0NzgxNCwgNDc4MjQsIAorICAgIDQ3ODI2LCA0NzgzMiwgNDc4MzgsIDQ3ODQyLCA0Nzg0OSwgNDc4NTMsIDQ3ODU1LCA0Nzg1NywgNDc4NjEsIDQ3ODY3LCAKKyAgICA0Nzg3MiwgNDc4NzgsIDQ3ODgwLCA0Nzg4NiwgNDc4ODgsIDQ3ODk0LCA0Nzg5NiwgNDc4OTgsIDQ3OTAzLCA0NzkwNSwgCisgICAgNDc5MDksIDQ3OTE0LCA0NzkxNiwgNDc5MjEsIDQ3OTI2LCA0NzkzMCwgNDc5MzcsIDAsIDQ3OTQ3LCA0Nzk1MywgNDc5NTYsIAorICAgIDQ3OTYyLCA0Nzk2NSwgNDc5NzAsIDQ3OTc1LCA0Nzk3OSwgNDc5ODEsIDQ3OTgzLCA0Nzk4NywgNDc5OTEsIDQ3OTk1LCAKKyAgICA0Nzk5OSwgNDgwMDQsIDQ4MDA2LCA0ODAxMSwgNDgwMTQsIDQ4MDE3LCA0ODAyMCwgNDgwMjQsIDQ4MDI4LCA0ODAzMywgCisgICAgNDgwMzcsIDQ4MDQyLCA0ODA0NywgNDgwNTEsIDQ4MDU2LCA0ODA2MiwgNDgwNjUsIDQ4MDcxLCA0ODA3NiwgNDgwODAsIAorICAgIDQ4MDg1LCA0ODA5MSwgNDgwOTcsIDQ4MTA0LCA0ODExMCwgNDgxMTcsIDQ4MTI0LCA0ODEyNiwgNDgxMzMsIDQ4MTM3LCAKKyAgICA0ODE0MywgNDgxNDksIDQ4MTU0LCA0ODE2MCwgNDgxNjQsIDQ4MTY5LCA0ODE3MiwgNDgxNzcsIDQ4MTgzLCA0ODE5MCwgCisgICAgNDgxOTgsIDQ4MjA1LCA0ODIxNCwgNDgyMjQsIDQ4MjMxLCA0ODIzNywgNDgyNDEsIDQ4MjQ4LCA0ODI1MywgNDgyNjIsIAorICAgIDQ4MjY1LCA0ODI2OCwgNDgyNzcsIDQ4Mjg3LCA0ODI5NCwgNDgyOTYsIDQ4MzAyLCA0ODMwNywgNDgzMDksIDQ4MzEyLCAKKyAgICA0ODMxNiwgNDgzMjQsIDQ4MzMzLCA0ODMzNiwgNDgzNDEsIDQ4MzQ2LCA0ODM1NCwgNDgzNjIsIDQ4MzcwLCA0ODM3OCwgCisgICAgNDgzODQsIDQ4MzkwLCA0ODM5NiwgNDg0MDQsIDQ4NDA5LCA0ODQxMiwgNDg0MTYsIDQ4NDE5LCA0ODQzMSwgNDg0NDEsIAorICAgIDQ4NDUyLCA0ODQ2MSwgNDg0NzIsIDQ4NDgyLCA0ODQ5MSwgNDg0OTcsIDQ4NTA1LCA0ODUwOSwgNDg1MTcsIDQ4NTIxLCAKKyAgICA0ODUyOSwgNDg1MzYsIDQ4NTQzLCA0ODU1MiwgNDg1NjEsIDQ4NTcxLCA0ODU4MSwgNDg1OTEsIDQ4NjAxLCA0ODYxMCwgCisgICAgNDg2MTksIDQ4NjI5LCA0ODYzOSwgNDg2NDgsIDQ4NjU3LCA0ODY2MywgNDg2NjksIDQ4Njc1LCA0ODY4MSwgNDg2ODcsIAorICAgIDQ4NjkzLCA0ODY5OSwgNDg3MDUsIDQ4NzExLCA0ODcxOCwgNDg3MjQsIDQ4NzMwLCA0ODczNiwgNDg3NDIsIDQ4NzQ4LCAKKyAgICA0ODc1NCwgNDg3NjAsIDQ4NzY2LCA0ODc3MiwgNDg3NzksIDQ4Nzg2LCA0ODc5MywgNDg4MDAsIDQ4ODA3LCA0ODgxNCwgCisgICAgNDg4MjEsIDQ4ODI4LCA0ODgzNSwgNDg4NDIsIDQ4ODUwLCA0ODg1NSwgNDg4NTgsIDQ4ODYyLCA0ODg2NiwgNDg4NzIsIAorICAgIDQ4ODc1LCA0ODg4MSwgNDg4ODcsIDQ4ODkyLCA0ODg5NiwgNDg5MDEsIDQ4OTA3LCA0ODkxNCwgNDg5MTcsIDQ4OTI0LCAKKyAgICA0ODkzMSwgNDg5MzUsIDQ4OTQ0LCA0ODk1MywgNDg5NTgsIDQ4OTY0LCA0ODk2OSwgNDg5NzQsIDQ4OTgxLCA0ODk4OCwgCisgICAgNDg5OTYsIDQ5MDA0LCA0OTAxMywgNDkwMTcsIDQ5MDI2LCA0OTAzMSwgNDkwMzUsIDQ5MDQyLCA0OTA0NiwgNDkwNTMsIAorICAgIDQ5MDYxLCA0OTA2NiwgNDkwNzQsIDQ5MDc4LCA0OTA4MywgNDkwODcsIDQ5MDkyLCA0OTA5NiwgNDkxMDEsIDQ5MTA2LCAKKyAgICA0OTExNSwgNDkxMTcsIDQ5MTIwLCA0OTEyMywgNDkxMzAsIDQ5MTM3LCA0OTE0MiwgNDkxNTAsIDQ5MTU2LCA0OTE2MiwgCisgICAgNDkxNjcsIDQ5MTcwLCA0OTE3NSwgNDkxODAsIDQ5MTg1LCA0OTE5MywgNDkxOTcsIDQ5MjA0LCA0OTIxMiwgNDkyMjAsIAorICAgIDQ5MjI1LCA0OTIzMCwgNDkyMzYsIDQ5MjQxLCA0OTI0NiwgNDkyNTIsIDQ5MjU3LCA0OTI2MCwgNDkyNjQsIDQ5MjY4LCAKKyAgICA0OTI3NSwgNDkyODQsIDQ5Mjg5LCA0OTI5OCwgNDkzMDcsIDQ5MzEzLCA0OTMxOSwgNDkzMjQsIDQ5MzI5LCA0OTMzNCwgCisgICAgNDkzMzksIDQ5MzQ1LCA0OTM1MSwgNDkzNTksIDQ5MzY3LCA0OTM3MywgNDkzNzksIDQ5Mzg0LCA0OTM4OSwgNDkzOTYsIAorICAgIDQ5NDAzLCA0OTQwOSwgNDk0MTIsIDQ5NDE1LCA0OTQxOSwgNDk0MjMsIDQ5NDI3LCA0OTQzMiwgNDk0MzgsIDQ5NDQ0LCAKKyAgICA0OTQ1MSwgNDk0NTgsIDQ5NDYzLCA0OTQ2NywgNDk0NzEsIDQ5NDc1LCA0OTQ3OSwgNDk0ODMsIDQ5NDg3LCA0OTQ5MSwgCisgICAgNDk0OTUsIDQ5NDk5LCA0OTUwMywgNDk1MDcsIDQ5NTExLCA0OTUxNSwgNDk1MTksIDQ5NTIzLCA0OTUyNywgNDk1MzEsIAorICAgIDQ5NTM1LCA0OTUzOSwgNDk1NDMsIDQ5NTQ3LCA0OTU1MSwgNDk1NTUsIDQ5NTU5LCA0OTU2MywgNDk1NjcsIDQ5NTcxLCAKKyAgICA0OTU3NSwgNDk1NzksIDQ5NTgzLCA0OTU4NywgNDk1OTEsIDQ5NTk1LCA0OTU5OSwgNDk2MDMsIDQ5NjA3LCA0OTYxMSwgCisgICAgNDk2MTUsIDQ5NjE5LCA0OTYyMywgNDk2MjcsIDQ5NjMxLCA0OTYzNSwgNDk2MzksIDQ5NjQzLCA0OTY0NywgNDk2NTEsIAorICAgIDQ5NjU1LCA0OTY1OSwgNDk2NjMsIDQ5NjY3LCA0OTY3MSwgNDk2NzUsIDQ5Njc5LCA0OTY4MywgNDk2ODcsIDQ5NjkxLCAKKyAgICA0OTY5NSwgNDk2OTksIDQ5NzAzLCA0OTcwNywgNDk3MTEsIDQ5NzE1LCA0OTcxOSwgNDk3MjMsIDQ5NzI3LCA0OTczMSwgCisgICAgNDk3MzUsIDQ5NzM5LCA0OTc0MywgNDk3NDcsIDQ5NzUxLCA0OTc1NSwgNDk3NTksIDQ5NzYzLCA0OTc2NywgNDk3NzEsIAorICAgIDQ5Nzc1LCA0OTc3OSwgNDk3ODMsIDQ5Nzg3LCA0OTc5MSwgNDk3OTUsIDQ5Nzk5LCA0OTgwMywgNDk4MDcsIDQ5ODExLCAKKyAgICA0OTgxNSwgNDk4MTksIDQ5ODIzLCA0OTgyNywgNDk4MzEsIDQ5ODM1LCA0OTgzOSwgNDk4NDMsIDQ5ODQ3LCA0OTg1MSwgCisgICAgNDk4NTUsIDQ5ODU5LCA0OTg2MywgNDk4NjcsIDQ5ODcxLCA0OTg3NSwgNDk4NzksIDQ5ODgzLCA0OTg4NywgNDk4OTEsIAorICAgIDQ5ODk1LCA0OTg5OSwgNDk5MDMsIDQ5OTA3LCA0OTkxMSwgNDk5MTUsIDQ5OTE5LCA0OTkyMywgNDk5MjcsIDQ5OTMxLCAKKyAgICA0OTkzNSwgNDk5MzksIDQ5OTQzLCA0OTk0NywgNDk5NTEsIDQ5OTU1LCA0OTk1OSwgNDk5NjMsIDQ5OTY3LCA0OTk3MSwgCisgICAgNDk5NzUsIDQ5OTc5LCA0OTk4MywgNDk5ODcsIDQ5OTkxLCA0OTk5NSwgNDk5OTksIDUwMDAzLCA1MDAwNywgNTAwMTEsIAorICAgIDUwMDE1LCA1MDAxOSwgNTAwMjMsIDUwMDI3LCA1MDAzMSwgNTAwMzUsIDUwMDM5LCA1MDA0MywgNTAwNDcsIDUwMDUxLCAKKyAgICA1MDA1NSwgNTAwNTksIDUwMDYzLCA1MDA2NywgNTAwNzEsIDUwMDc1LCA1MDA3OSwgNTAwODMsIDUwMDg3LCA1MDA5MSwgCisgICAgNTAwOTUsIDUwMDk5LCA1MDEwMywgNTAxMDcsIDUwMTExLCA1MDExNSwgNTAxMTksIDUwMTIzLCA1MDEyNywgNTAxMzEsIAorICAgIDUwMTM1LCA1MDEzOSwgNTAxNDMsIDUwMTQ3LCA1MDE1MSwgNTAxNTUsIDUwMTU5LCA1MDE2MywgNTAxNjcsIDUwMTcxLCAKKyAgICA1MDE3NSwgNTAxNzksIDUwMTgzLCA1MDE4NywgNTAxOTEsIDUwMTk1LCA1MDE5OSwgNTAyMDMsIDUwMjA3LCA1MDIxMSwgCisgICAgNTAyMTUsIDUwMjE5LCA1MDIyMywgNTAyMjcsIDUwMjMxLCA1MDIzNSwgNTAyMzksIDUwMjQzLCA1MDI0NywgNTAyNTEsIAorICAgIDUwMjU1LCA1MDI1OSwgNTAyNjMsIDUwMjY3LCA1MDI3MSwgNTAyNzUsIDUwMjc5LCA1MDI4MywgNTAyODcsIDUwMjkxLCAKKyAgICA1MDI5NSwgNTAyOTksIDUwMzAzLCA1MDMwNywgNTAzMTEsIDUwMzE1LCA1MDMxOSwgNTAzMjMsIDUwMzI3LCA1MDMzMSwgCisgICAgNTAzMzUsIDUwMzM5LCA1MDM0MywgNTAzNDcsIDUwMzUxLCA1MDM1NSwgNTAzNTksIDUwMzYzLCA1MDM2NywgNTAzNzEsIAorICAgIDUwMzc1LCA1MDM3OSwgNTAzODMsIDUwMzg3LCA1MDM5MSwgNTAzOTUsIDUwMzk5LCA1MDQwMywgNTA0MDcsIDUwNDExLCAKKyAgICA1MDQxNSwgNTA0MTksIDUwNDIzLCA1MDQyNywgNTA0MzEsIDUwNDM1LCA1MDQzOSwgNTA0NDMsIDUwNDQ3LCA1MDQ1MSwgCisgICAgNTA0NTUsIDUwNDU5LCA1MDQ2MywgNTA0NjcsIDUwNDcxLCA1MDQ3NSwgNTA0NzksIDUwNDgzLCA1MDQ4NywgNTA0OTQsIAorICAgIDUwNTAyLCA1MDUwOCwgNTA1MTQsIDUwNTIxLCA1MDUyOCwgNTA1MzQsIDUwNTQwLCA1MDU0NiwgNTA1NTIsIDUwNTU3LCAKKyAgICA1MDU2MiwgNTA1NjcsIDUwNTcyLCA1MDU3OCwgNTA1ODQsIDUwNTkyLCA1MDU5OSwgNTA2MDUsIDUwNjExLCA1MDYxOSwgCisgICAgNTA2MjgsIDUwNjM1LCA1MDY0NSwgNTA2NTYsIDUwNjU5LCA1MDY2MiwgNTA2NjYsIDUwNjcwLCA1MDY3NywgNTA2ODQsIAorICAgIDUwNjk1LCA1MDcwNiwgNTA3MTYsIDUwNzI2LCA1MDczMywgNTA3NDAsIDUwNzQ3LCA1MDc1NCwgNTA3NjUsIDUwNzc2LCAKKyAgICA1MDc4NywgNTA3OTgsIDUwODA4LCA1MDgxOCwgNTA4MzAsIDUwODQyLCA1MDg1MywgNTA4NjQsIDUwODc2LCA1MDg4OCwgCisgICAgNTA4OTcsIDUwOTA3LCA1MDkxNywgNTA5MjgsIDUwOTM5LCA1MDk0NiwgNTA5NTMsIDUwOTYwLCA1MDk2NywgNTA5NzcsIAorICAgIDUwOTg3LCA1MDk5NSwgNTEwMDMsIDUxMDEwLCA1MTAxNywgNTEwMjQsIDUxMDMxLCA1MTAzOCwgNTEwNDMsIDUxMDQ4LCAKKyAgICA1MTA1NCwgNTEwNjIsIDUxMDcyLCA1MTA4MiwgNTEwOTIsIDUxMTAyLCA1MTExMiwgNTExMjIsIDUxMTMyLCA1MTE0MiwgCisgICAgNTExNTIsIDUxMTYyLCA1MTE3MiwgNTExODMsIDUxMTk0LCA1MTIwNCwgNTEyMTQsIDUxMjI1LCA1MTIzNiwgNTEyNDYsIAorICAgIDUxMjU2LCA1MTI2NywgNTEyNzgsIDUxMjg4LCA1MTI5OCwgNTEzMDksIDUxMzIwLCA1MTMzNiwgNTEzNTUsIDUxMzcxLCAKKyAgICA1MTM5MCwgNTE0MDYsIDUxNDIyLCA1MTQzOCwgNTE0NTQsIDUxNDY1LCA1MTQ3NywgNTE0ODgsIDUxNTAwLCA1MTUxOSwgCisgICAgNTE1MzgsIDUxNTQ2LCA1MTU1MiwgNTE1NTksIDUxNTY2LCA1MTU3MywgNTE1ODAsIDUxNTg1LCA1MTU5MSwgNTE1OTYsIAorICAgIDUxNjAxLCA1MTYwNywgNTE2MTIsIDUxNjE3LCA1MTYyMiwgNTE2MjcsIDUxNjMyLCA1MTYzOSwgNTE2NDQsIDUxNjUxLCAKKyAgICA1MTY1NiwgNTE2NjEsIDUxNjY1LCA1MTY2OSwgNTE2NzYsIDUxNjgzLCA1MTY5MCwgNTE2OTcsIDUxNzA0LCA1MTcxMSwgCisgICAgNTE3MjQsIDUxNzM3LCA1MTc1MCwgNTE3NjMsIDUxNzcxLCA1MTc3OSwgNTE3ODUsIDUxNzkxLCA1MTc5OCwgNTE4MDUsIAorICAgIDUxODEyLCA1MTgxOSwgNTE4MjMsIDUxODI4LCA1MTgzNiwgNTE4NDQsIDUxODUyLCA1MTg1OSwgNTE4NjMsIDUxODcxLCAKKyAgICA1MTg3OSwgNTE4ODMsIDUxODg3LCA1MTg5MiwgNTE4OTksIDUxOTA3LCA1MTkxNSwgNTE5MzQsIDUxOTUzLCA1MTk3MiwgCisgICAgNTE5OTEsIDUyMDEwLCA1MjAyOSwgNTIwNDgsIDUyMDY3LCA1MjA3MywgNTIwODAsIDUyMDg5LCA1MjA5NywgNTIxMDUsIAorICAgIDUyMTEwLCA1MjExMywgNTIxMTYsIDUyMTIxLCA1MjEyNCwgNTIxNDMsIDUyMTUwLCA1MjE1NiwgNTIxNjIsIDUyMTY2LCAKKyAgICA1MjE2OSwgNTIxNzIsIDUyMTc1LCA1MjE4NywgNTIyMDAsIDUyMjA3LCA1MjIxNCwgNTIyMTcsIDUyMjIxLCA1MjIyNCwgCisgICAgNTIyMjksIDUyMjM0LCA1MjIzOSwgNTIyNDUsIDUyMjU0LCA1MjI2MSwgNTIyNjgsIDUyMjc2LCA1MjI4MywgNTIyOTAsIAorICAgIDUyMjkzLCA1MjI5OSwgNTIzMDUsIDUyMzA4LCA1MjMxMSwgNTIzMTYsIDUyMzIxLCA1MjMyNywgNTIzMzMsIDUyMzM3LCAKKyAgICA1MjM0MiwgNTIzNDksIDUyMzUzLCA1MjM1OSwgNTIzNjMsIDUyMzY3LCA1MjM3NSwgNTIzODcsIDUyMzk2LCA1MjQwMCwgCisgICAgNTI0MDIsIDUyNDExLCA1MjQyMCwgNTI0MjYsIDUyNDI5LCA1MjQzNSwgNTI0NDEsIDUyNDQ2LCA1MjQ1MSwgNTI0NTYsIAorICAgIDUyNDYxLCA1MjQ2NiwgNTI0NzEsIDUyNDczLCA1MjQ3OSwgNTI0ODQsIDUyNDkxLCA1MjQ5NSwgNTI1MDEsIDUyNTA0LCAKKyAgICA1MjUwOCwgNTI1MTUsIDUyNTIyLCA1MjUyNCwgNTI1MjYsIDUyNTMyLCA1MjUzOCwgNTI1NDQsIDUyNTUzLCA1MjU2MiwgCisgICAgNTI1NjksIDUyNTc2LCA1MjU4MiwgNTI1ODgsIDUyNTkzLCA1MjU5OCwgNTI2MDMsIDUyNjA5LCA1MjYxNSwgNTI2MjAsIAorICAgIDUyNjI3LCA1MjYzMSwgNTI2MzUsIDUyNjQ4LCA1MjY2MSwgNTI2NzMsIDUyNjgyLCA1MjY4OCwgNTI2OTUsIDUyNzAwLCAKKyAgICA1MjcwNSwgNTI3MTAsIDUyNzE1LCA1MjcyMCwgNTI3MjIsIDUyNzI5LCA1MjczNiwgNTI3NDMsIDUyNzUwLCA1Mjc1NywgCisgICAgNTI3NjUsIDUyNzcxLCA1Mjc3NiwgNTI3ODIsIDUyNzg4LCA1Mjc5NCwgNTI4MDEsIDUyODA3LCA1MjgxNSwgNTI4MjMsIAorICAgIDUyODMxLCA1MjgzOSwgNTI4NDYsIDUyODUyLCA1Mjg1OCwgNTI4NjcsIDUyODcxLCA1Mjg4MCwgNTI4ODksIDUyODk4LCAKKyAgICA1MjkwNiwgNTI5MTAsIDUyOTE2LCA1MjkyMywgNTI5MzAsIDUyOTM0LCA1Mjk0MCwgNTI5NDcsIDUyOTUyLCA1Mjk1NywgCisgICAgNTI5NjMsIDUyOTY4LCA1Mjk3MywgNTI5ODAsIDUyOTg3LCA1Mjk5MiwgNTI5OTcsIDUzMDA1LCA1MzAxMywgNTMwMjMsIAorICAgIDUzMDMzLCA1MzA0MCwgNTMwNDcsIDUzMDUxLCA1MzA1NSwgNTMwNjcsIDUzMDczLCA1MzA3OSwgNTMwODQsIDUzMDg5LCAKKyAgICA1MzA5NiwgNTMxMDMsIDUzMTA5LCA1MzExNSwgNTMxMjQsIDUzMTMyLCA1MzE0MCwgNTMxNDcsIDUzMTU0LCA1MzE2MSwgCisgICAgNTMxNjcsIDUzMTc0LCA1MzE4MCwgNTMxODcsIDUzMTk0LCA1MzIwMSwgNTMyMDgsIDUzMjE0LCA1MzIxOSwgNTMyMjgsIAorICAgIDUzMjM4LCA1MzI0NSwgNTMyNTQsIDUzMjYwLCA1MzI2NSwgNTMyNzAsIDUzMjgwLCA1MzI4NiwgNTMyOTIsIDUzMjk4LCAKKyAgICA1MzMwNiwgNTMzMTEsIDUzMzE4LCA1MzMyNSwgNTMzMzYsIDUzMzQzLCA1MzM1MCwgNTMzNTcsIDUzMzY0LCA1MzM3MSwgCisgICAgNTMzNzgsIDUzMzg1LCA1MzM5NywgNTM0MDksIDUzNDIwLCA1MzQzMSwgNTM0NDQsIDUzNDU3LCA1MzQ2MiwgNTM0NjcsIAorICAgIDUzNDc2LCA1MzQ4NSwgNTM0OTIsIDUzNDk5LCA1MzUwOCwgNTM1MTcsIDUzNTI1LCA1MzUzMywgNTM1NDEsIDUzNTQ5LCAKKyAgICA1MzU1OSwgNTM1NjksIDUzNTgzLCA1MzU5NywgNTM2MDUsIDUzNjEzLCA1MzYyNSwgNTM2MzcsIDUzNjQ1LCA1MzY1MywgCisgICAgNTM2NjMsIDUzNjczLCA1MzY3OCwgNTM2ODMsIDUzNjkyLCA1MzcwMSwgNTM3MDYsIDUzNzExLCA1MzcxOSwgNTM3MjUsIAorICAgIDUzNzMxLCA1MzczOSwgNTM3NDcsIDUzNzYwLCA1Mzc3MywgNTM3NzcsIDUzNzgxLCA1Mzc4OCwgNTM3OTUsIDUzODAyLCAKKyAgICA1MzgxMCwgNTM4MTgsIDUzODI3LCA1MzgzNiwgNTM4NDIsIDUzODQ4LCA1Mzg1NSwgNTM4NjIsIDUzODY5LCA1Mzg3NiwgCisgICAgNTM4ODUsIDUzODk0LCA1Mzg5NywgNTM5MDAsIDUzOTA1LCA1MzkxMCwgNTM5MTYsIDUzOTIyLCA1MzkyOSwgNTM5MzYsIAorICAgIDUzOTQ2LCA1Mzk1NiwgNTM5NjMsIDUzOTcwLCA1Mzk3OCwgNTM5ODYsIDUzOTk0LCA1NDAwMiwgNTQwMTAsIDU0MDE4LCAKKyAgICA1NDAyNCwgNTQwMzAsIDU0MDM0LCA1NDAzOCwgNTQwNDUsIDU0MDUyLCA1NDA1NywgNTQwNjIsIDU0MDY3LCA1NDA3MiwgCisgICAgNTQwNzgsIDU0MDkyLCA1NDA5OSwgNTQxMDYsIDU0MTEwLCA1NDExMiwgNTQxMTQsIDU0MTE5LCA1NDEyNCwgNTQxMjksIAorICAgIDU0MTM0LCA1NDE0MiwgNTQxNDksIDU0MTU2LCA1NDE2NCwgNTQxNzYsIDU0MTg0LCA1NDE5MiwgNTQyMDMsIDU0MjA3LCAKKyAgICA1NDIxMSwgNTQyMTcsIDU0MjI1LCA1NDIzOCwgNTQyNDUsIDU0MjUyLCA1NDI1OSwgNTQyNjQsIDU0MjcxLCA1NDI4MCwgCisgICAgNTQyODgsIDU0Mjk0LCA1NDMwMCwgNTQzMDYsIDU0MzE1LCA1NDMyNCwgNTQzMzIsIDU0MzQxLCA1NDM0NiwgNTQzNDksIAorICAgIDU0MzU0LCA1NDM2MCwgNTQzNjYsIDU0MzcyLCA1NDM3OCwgNTQzODIsIDU0Mzg1LCA1NDM4OSwgNTQzOTMsIDU0Mzk5LCAKKyAgICA1NDQwNSwgNTQ0MTEsIDU0NDE3LCA1NDQyMSwgNTQ0MjUsIDU0NDMyLCA1NDQzOSwgNTQ0NDYsIDU0NDUzLCA1NDQ2MCwgCisgICAgNTQ0NjcsIDU0NDc3LCA1NDQ4NywgNTQ0OTQsIDU0NTAxLCA1NDUwOSwgNTQ1MTcsIDU0NTIxLCA1NDUyNiwgNTQ1MzEsIAorICAgIDU0NTM3LCA1NDU0MywgNTQ1NDYsIDU0NTQ5LCA1NDU1MiwgNTQ1NTUsIDU0NTU5LCA1NDU2NCwgNTQ1NjksIDU0NTc0LCAKKyAgICA1NDU3OSwgNTQ1ODQsIDU0NTg4LCA1NDU5MiwgNTQ1OTYsIDU0NjAwLCA1NDYwNCwgNTQ2MDgsIDU0NjEyLCA1NDYxOCwgCisgICAgNTQ2MjIsIDU0NjI4LCA1NDYzMywgNTQ2NDAsIDU0NjQ4LCA1NDY1NSwgNTQ2NjMsIDU0NjcwLCA1NDY3OCwgNTQ2ODcsIAorICAgIDU0Njk0LCA1NDcwNCwgNTQ3MTUsIDU0NzIxLCA1NDczMCwgNTQ3MzYsIDU0NzQ1LCA1NDc1NCwgNTQ3NjAsIDU0NzY2LCAKKyAgICA1NDc3MCwgNTQ3NzQsIDU0NzgzLCA1NDc5MiwgNTQ3OTksIDU0ODA2LCA1NDgxNSwgMCwgMCwgMCwgNTQ4MjQsIDU0ODI5LCAKKyAgICA1NDgzMywgNTQ4MzcsIDU0ODQyLCA1NDg0NywgNTQ4NTIsIDU0ODYwLCA1NDg2OCwgNTQ4NzEsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDU0ODQ3LCA1NDg1MiwgNTQ4NTcsIDU0ODYyLCA1NDg2NywgNTQ4NzIsIDU0ODc3LCA1NDg4MiwgCi0gICAgNTQ4ODcsIDU0ODkyLCA1NDg5NywgNTQ5MDMsIDU0OTA3LCA1NDkxMiwgNTQ5MTcsIDU0OTIyLCA1NDkyNywgNTQ5MzIsIAotICAgIDU0OTM3LCA1NDk0MiwgNTQ5NDcsIDU0OTUyLCA1NDk1NywgNTQ5NjIsIDU0OTY3LCA1NDk3MiwgNTQ5NzcsIDU0OTgyLCAKLSAgICA1NDk4NywgNTQ5OTIsIDU0OTk3LCA1NTAwMiwgNTUwMDcsIDU1MDEyLCA1NTAxNywgNTUwMjMsIDU1MDI4LCA1NTAzNCwgCi0gICAgNTUwNDMsIDU1MDQ4LCA1NTA1NiwgNTUwNjMsIDU1MDcyLCA1NTA3NywgNTUwODIsIDU1MDg3LCA1NTA5MywgMCwgNTUxMDAsIAotICAgIDU1MTA1LCA1NTExMCwgNTUxMTUsIDU1MTIwLCA1NTEyNSwgNTUxMzAsIDU1MTM1LCA1NTE0MCwgNTUxNDUsIDU1MTUwLCAKLSAgICA1NTE1NiwgNTUxNjAsIDU1MTY1LCA1NTE3MCwgNTUxNzUsIDU1MTgwLCA1NTE4NSwgNTUxOTAsIDU1MTk1LCA1NTIwMCwgCi0gICAgNTUyMDUsIDU1MjEwLCA1NTIxNSwgNTUyMjAsIDU1MjI1LCA1NTIzMCwgNTUyMzUsIDU1MjQwLCA1NTI0NSwgNTUyNTAsIAotICAgIDU1MjU1LCA1NTI2MCwgNTUyNjUsIDU1MjcwLCA1NTI3NiwgNTUyODEsIDU1Mjg3LCA1NTI5NiwgNTUzMDEsIDU1MzA5LCAKLSAgICA1NTMxNiwgNTUzMjUsIDU1MzMwLCA1NTMzNSwgNTUzNDAsIDU1MzQ2LCAwLCA1NTM1MywgNTUzNjEsIDU1MzY5LCA1NTM3OCwgCi0gICAgNTUzODUsIDU1MzkzLCA1NTM5OSwgNTU0MDgsIDU1NDE2LCA1NTQyNCwgNTU0MzIsIDU1NDQwLCA1NTQ0OCwgNTU0NTYsIAotICAgIDU1NDYxLCA1NTQ2OCwgNTU0NzQsIDU1NDgxLCA1NTQ4OSwgNTU0OTYsIDU1NTAzLCA1NTUxMSwgNTU1MTcsIDU1NTIzLCAKLSAgICA1NTUzMCwgNTU1MzcsIDU1NTQ3LCA1NTU1NywgNTU1NjQsIDU1NTcxLCA1NTU3NiwgNTU1ODYsIDU1NTk2LCA1NTYwMSwgCi0gICAgNTU2MDYsIDU1NjExLCA1NTYxNiwgNTU2MjEsIDU1NjI2LCA1NTYzMSwgNTU2MzYsIDU1NjQxLCA1NTY0NiwgNTU2NTEsIAotICAgIDU1NjU2LCA1NTY2MSwgNTU2NjYsIDU1NjcxLCA1NTY3NiwgNTU2ODEsIDU1Njg2LCA1NTY5MSwgNTU2OTYsIDU1NzAxLCAKLSAgICA1NTcwNiwgNTU3MTEsIDU1NzE2LCA1NTcyMSwgNTU3MjYsIDU1NzMxLCA1NTczNiwgNTU3NDEsIDU1NzQ2LCA1NTc1MCwgCi0gICAgNTU3NTQsIDU1NzU5LCA1NTc2NCwgNTU3NjksIDU1Nzc0LCA1NTc3OSwgNTU3ODQsIDU1Nzg5LCA1NTc5NCwgNTU3OTksIAotICAgIDU1ODA0LCA1NTgwOSwgNTU4MTQsIDU1ODE5LCA1NTgyNCwgNTU4MjksIDU1ODM0LCA1NTgzOSwgNTU4NDQsIDU1ODUxLCAKLSAgICA1NTg1OCwgNTU4NjUsIDU1ODcyLCA1NTg3OSwgNTU4ODYsIDU1ODkzLCA1NTkwMCwgNTU5MDcsIDU1OTE0LCA1NTkyMSwgCi0gICAgNTU5MjgsIDU1OTM1LCA1NTk0MiwgNTU5NDcsIDU1OTUyLCA1NTk1OSwgNTU5NjYsIDU1OTczLCA1NTk4MCwgNTU5ODcsIAotICAgIDU1OTk0LCA1NjAwMSwgNTYwMDgsIDU2MDE1LCA1NjAyMiwgNTYwMjksIDU2MDM2LCA1NjA0MiwgNTYwNDgsIDU2MDU0LCAKLSAgICA1NjA2MCwgNTYwNjcsIDU2MDc0LCA1NjA4MSwgNTYwODgsIDU2MDk1LCA1NjEwMiwgNTYxMDksIDU2MTE2LCA1NjEyMywgCi0gICAgNTYxMzAsIDU2MTM4LCA1NjE0NiwgNTYxNTQsIDU2MTYyLCA1NjE3MCwgNTYxNzgsIDU2MTg2LCA1NjE5NCwgNTYxOTgsIAotICAgIDU2MjA0LCA1NjIxMCwgNTYyMTQsIDU2MjIwLCA1NjIyNiwgNTYyMzIsIDU2MjM5LCA1NjI0NiwgNTYyNTMsIDU2MjYwLCAKLSAgICA1NjI2NSwgNTYyNzEsIDU2Mjc3LCA1NjI4NCwgMCwgMCwgMCwgMCwgMCwgNTYyOTEsIDU2Mjk5LCA1NjMwOCwgNTYzMTcsIAotICAgIDU2MzI1LCA1NjMzMSwgNTYzMzYsIDU2MzQxLCA1NjM0NiwgNTYzNTEsIDU2MzU2LCA1NjM2MSwgNTYzNjYsIDU2MzcxLCAKLSAgICA1NjM3NiwgNTYzODEsIDU2Mzg2LCA1NjM5MSwgNTYzOTYsIDU2NDAxLCA1NjQwNiwgNTY0MTEsIDU2NDE2LCA1NjQyMSwgCi0gICAgNTY0MjYsIDU2NDMxLCA1NjQzNiwgNTY0NDEsIDU2NDQ2LCA1NjQ1MSwgNTY0NTYsIDU2NDYxLCA1NjQ2NiwgNTY0NzEsIAotICAgIDU2NDc2LCA1NjQ4MSwgNTY0ODYsIDU2NDkxLCA1NjQ5NiwgNTY1MDEsIDU2NTA2LCA1NjUxMSwgNTY1MTYsIDU2NTIxLCAKLSAgICA1NjUyNiwgMCwgNTY1MzEsIDAsIDAsIDAsIDAsIDAsIDU2NTM2LCAwLCAwLCA1NjU0MSwgNTY1NDUsIDU2NTUwLCA1NjU1NSwgCi0gICAgNTY1NjAsIDU2NTY1LCA1NjU3NCwgNTY1NzksIDU2NTg0LCA1NjU4OSwgNTY1OTQsIDU2NTk5LCA1NjYwNCwgNTY2MDksIAotICAgIDU2NjE0LCA1NjYyMSwgNTY2MjYsIDU2NjMxLCA1NjY0MCwgNTY2NDcsIDU2NjUyLCA1NjY1NywgNTY2NjIsIDU2NjY5LCAKLSAgICA1NjY3NCwgNTY2ODEsIDU2Njg2LCA1NjY5MSwgNTY2OTgsIDU2NzA1LCA1NjcxMCwgNTY3MTUsIDU2NzIwLCA1NjcyNywgCi0gICAgNTY3MzQsIDU2NzM5LCA1Njc0NCwgNTY3NDksIDU2NzU0LCA1Njc1OSwgNTY3NjYsIDU2NzczLCA1Njc3OCwgNTY3ODMsIAotICAgIDU2Nzg4LCA1Njc5MywgNTY3OTgsIDU2ODAzLCA1NjgwOCwgNTY4MTMsIDU2ODE4LCA1NjgyMywgNTY4MjgsIDU2ODM1LCAKLSAgICA1Njg0MCwgNTY4NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2ODUwLCA1Njg1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTY4NjIsIDU2ODY3LCA1Njg3MSwgNTY4NzUsIDU2ODc5LCA1Njg4MywgNTY4ODcsIDU2ODkxLCAKLSAgICA1Njg5NSwgNTY4OTksIDU2OTAzLCA1NjkwNywgNTY5MTMsIDU2OTE3LCA1NjkyMSwgNTY5MjUsIDU2OTI5LCA1NjkzMywgCi0gICAgNTY5MzcsIDU2OTQxLCA1Njk0NSwgNTY5NDksIDU2OTUzLCA1Njk1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTY5NjEsIDU2OTY1LCA1Njk2OSwgNTY5NzMsIDU2OTc3LCA1Njk4MSwgNTY5ODUsIDAsIDU2OTg5LCA1Njk5MywgNTY5OTcsIAotICAgIDU3MDAxLCA1NzAwNSwgNTcwMDksIDU3MDEzLCAwLCA1NzAxNywgNTcwMjEsIDU3MDI1LCA1NzAyOSwgNTcwMzMsIDU3MDM3LCAKLSAgICA1NzA0MSwgMCwgNTcwNDUsIDU3MDQ5LCA1NzA1MywgNTcwNTcsIDU3MDYxLCA1NzA2NSwgNTcwNjksIDAsIDU3MDczLCAKLSAgICA1NzA3NywgNTcwODEsIDU3MDg1LCA1NzA4OSwgNTcwOTMsIDU3MDk3LCAwLCA1NzEwMSwgNTcxMDUsIDU3MTA5LCA1NzExMywgCi0gICAgNTcxMTcsIDU3MTIxLCA1NzEyNSwgMCwgNTcxMjksIDU3MTMzLCA1NzEzNywgNTcxNDEsIDU3MTQ1LCA1NzE0OSwgNTcxNTMsIAotICAgIDAsIDU3MTU3LCA1NzE2MSwgNTcxNjUsIDU3MTY5LCA1NzE3MywgNTcxNzcsIDU3MTgxLCAwLCA1NzE4NSwgNTcxOTAsIAotICAgIDU3MTk1LCA1NzIwMCwgNTcyMDUsIDU3MjEwLCA1NzIxNSwgNTcyMTksIDU3MjI0LCA1NzIyOSwgNTcyMzQsIDU3MjM4LCAKLSAgICA1NzI0MywgNTcyNDgsIDU3MjUzLCA1NzI1OCwgNTcyNjIsIDU3MjY3LCA1NzI3MiwgNTcyNzcsIDU3MjgyLCA1NzI4NywgCi0gICAgNTcyOTIsIDU3Mjk2LCA1NzMwMSwgNTczMDYsIDU3MzEzLCA1NzMxOCwgNTczMjMsIDU3MzI5LCA1NzMzNiwgNTczNDMsIAotICAgIDU3MzUyLCA1NzM1OSwgNTczNjgsIDU3MzcyLCA1NzM3NiwgNTczODIsIDU3Mzg4LCA1NzM5NCwgNTc0MDIsIDU3NDA4LCAKLSAgICA1NzQxMiwgNTc0MTYsIDU3NDIwLCA1NzQyNiwgNTc0MzIsIDU3NDM2LCA1NzQzOCwgNTc0NDIsIDU3NDQ4LCA1NzQ1MCwgCi0gICAgNTc0NTQsIDU3NDU4LCA1NzQ2MiwgNTc0NjgsIDU3NDczLCA1NzQ3NywgNTc0ODEsIDU3NDg2LCA1NzQ5MiwgNTc0OTcsIAotICAgIDU3NTAyLCA1NzUwNywgNTc1MTIsIDU3NTE5LCA1NzUyNiwgNTc1MzEsIDU3NTM2LCA1NzU0MSwgNTc1NDYsIDU3NTUxLCAKLSAgICA1NzU1NiwgNTc1NjAsIDU3NTY0LCA1NzU3MSwgNTc1NzgsIDU3NTg0LCA1NzU4OCwgNTc1OTMsIDU3NTk1LCA1NzU5OSwgCi0gICAgNTc2MDcsIDU3NjExLCA1NzYxNSwgNTc2MTksIDU3NjIzLCA1NzYyOSwgNTc2MzUsIDU3NjM5LCA1NzY0NSwgNTc2NDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0ODc1LCA1NDg4MCwgNTQ4ODUsIAorICAgIDU0ODkwLCA1NDg5NSwgNTQ5MDAsIDU0OTA1LCA1NDkxMCwgNTQ5MTUsIDU0OTIwLCA1NDkyNSwgNTQ5MzEsIDU0OTM1LCAKKyAgICA1NDk0MCwgNTQ5NDUsIDU0OTUwLCA1NDk1NSwgNTQ5NjAsIDU0OTY1LCA1NDk3MCwgNTQ5NzUsIDU0OTgwLCA1NDk4NSwgCisgICAgNTQ5OTAsIDU0OTk1LCA1NTAwMCwgNTUwMDUsIDU1MDEwLCA1NTAxNSwgNTUwMjAsIDU1MDI1LCA1NTAzMCwgNTUwMzUsIAorICAgIDU1MDQwLCA1NTA0NSwgNTUwNTEsIDU1MDU2LCA1NTA2MiwgNTUwNzEsIDU1MDc2LCA1NTA4NCwgNTUwOTEsIDU1MTAwLCAKKyAgICA1NTEwNSwgNTUxMTAsIDU1MTE1LCA1NTEyMSwgMCwgNTUxMjgsIDU1MTMzLCA1NTEzOCwgNTUxNDMsIDU1MTQ4LCA1NTE1MywgCisgICAgNTUxNTgsIDU1MTYzLCA1NTE2OCwgNTUxNzMsIDU1MTc4LCA1NTE4NCwgNTUxODgsIDU1MTkzLCA1NTE5OCwgNTUyMDMsIAorICAgIDU1MjA4LCA1NTIxMywgNTUyMTgsIDU1MjIzLCA1NTIyOCwgNTUyMzMsIDU1MjM4LCA1NTI0MywgNTUyNDgsIDU1MjUzLCAKKyAgICA1NTI1OCwgNTUyNjMsIDU1MjY4LCA1NTI3MywgNTUyNzgsIDU1MjgzLCA1NTI4OCwgNTUyOTMsIDU1Mjk4LCA1NTMwNCwgCisgICAgNTUzMDksIDU1MzE1LCA1NTMyNCwgNTUzMjksIDU1MzM3LCA1NTM0NCwgNTUzNTMsIDU1MzU4LCA1NTM2MywgNTUzNjgsIAorICAgIDU1Mzc0LCAwLCA1NTM4MSwgNTUzODksIDU1Mzk3LCA1NTQwNiwgNTU0MTMsIDU1NDIxLCA1NTQyNywgNTU0MzYsIDU1NDQ0LCAKKyAgICA1NTQ1MiwgNTU0NjAsIDU1NDY4LCA1NTQ3NiwgNTU0ODQsIDU1NDg5LCA1NTQ5NiwgNTU1MDIsIDU1NTA5LCA1NTUxNywgCisgICAgNTU1MjQsIDU1NTMxLCA1NTUzOSwgNTU1NDUsIDU1NTUxLCA1NTU1OCwgNTU1NjUsIDU1NTc1LCA1NTU4NSwgNTU1OTIsIAorICAgIDU1NTk5LCA1NTYwNCwgNTU2MTQsIDU1NjI0LCA1NTYyOSwgNTU2MzQsIDU1NjM5LCA1NTY0NCwgNTU2NDksIDU1NjU0LCAKKyAgICA1NTY1OSwgNTU2NjQsIDU1NjY5LCA1NTY3NCwgNTU2NzksIDU1Njg0LCA1NTY4OSwgNTU2OTQsIDU1Njk5LCA1NTcwNCwgCisgICAgNTU3MDksIDU1NzE0LCA1NTcxOSwgNTU3MjQsIDU1NzI5LCA1NTczNCwgNTU3MzksIDU1NzQ0LCA1NTc0OSwgNTU3NTQsIAorICAgIDU1NzU5LCA1NTc2NCwgNTU3NjksIDU1Nzc0LCA1NTc3OCwgNTU3ODIsIDU1Nzg3LCA1NTc5MiwgNTU3OTcsIDU1ODAyLCAKKyAgICA1NTgwNywgNTU4MTIsIDU1ODE3LCA1NTgyMiwgNTU4MjcsIDU1ODMyLCA1NTgzNywgNTU4NDIsIDU1ODQ3LCA1NTg1MiwgCisgICAgNTU4NTcsIDU1ODYyLCA1NTg2NywgNTU4NzIsIDU1ODc5LCA1NTg4NiwgNTU4OTMsIDU1OTAwLCA1NTkwNywgNTU5MTQsIAorICAgIDU1OTIxLCA1NTkyOCwgNTU5MzUsIDU1OTQyLCA1NTk0OSwgNTU5NTYsIDU1OTYzLCA1NTk3MCwgNTU5NzUsIDU1OTgwLCAKKyAgICA1NTk4NywgNTU5OTQsIDU2MDAxLCA1NjAwOCwgNTYwMTUsIDU2MDIyLCA1NjAyOSwgNTYwMzYsIDU2MDQzLCA1NjA1MCwgCisgICAgNTYwNTcsIDU2MDY0LCA1NjA3MCwgNTYwNzYsIDU2MDgyLCA1NjA4OCwgNTYwOTUsIDU2MTAyLCA1NjEwOSwgNTYxMTYsIAorICAgIDU2MTIzLCA1NjEzMCwgNTYxMzcsIDU2MTQ0LCA1NjE1MSwgNTYxNTgsIDU2MTY2LCA1NjE3NCwgNTYxODIsIDU2MTkwLCAKKyAgICA1NjE5OCwgNTYyMDYsIDU2MjE0LCA1NjIyMiwgNTYyMjYsIDU2MjMyLCA1NjIzOCwgNTYyNDIsIDU2MjQ4LCA1NjI1NCwgCisgICAgNTYyNjAsIDU2MjY3LCA1NjI3NCwgNTYyODEsIDU2Mjg4LCA1NjI5MywgNTYyOTksIDU2MzA1LCA1NjMxMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTYzMTksIDU2MzI3LCA1NjMzNiwgNTYzNDUsIDU2MzUzLCA1NjM1OSwgNTYzNjQsIDU2MzY5LCA1NjM3NCwgCisgICAgNTYzNzksIDU2Mzg0LCA1NjM4OSwgNTYzOTQsIDU2Mzk5LCA1NjQwNCwgNTY0MDksIDU2NDE0LCA1NjQxOSwgNTY0MjQsIAorICAgIDU2NDI5LCA1NjQzNCwgNTY0MzksIDU2NDQ0LCA1NjQ0OSwgNTY0NTQsIDU2NDU5LCA1NjQ2NCwgNTY0NjksIDU2NDc0LCAKKyAgICA1NjQ3OSwgNTY0ODQsIDU2NDg5LCA1NjQ5NCwgNTY0OTksIDU2NTA0LCA1NjUwOSwgNTY1MTQsIDU2NTE5LCA1NjUyNCwgCisgICAgNTY1MjksIDU2NTM0LCA1NjUzOSwgNTY1NDQsIDU2NTQ5LCA1NjU1NCwgMCwgNTY1NTksIDAsIDAsIDAsIDAsIDAsIDU2NTY0LCAKKyAgICAwLCAwLCA1NjU2OSwgNTY1NzMsIDU2NTc4LCA1NjU4MywgNTY1ODgsIDU2NTkzLCA1NjYwMiwgNTY2MDcsIDU2NjEyLCAKKyAgICA1NjYxNywgNTY2MjIsIDU2NjI3LCA1NjYzMiwgNTY2MzcsIDU2NjQyLCA1NjY0OSwgNTY2NTQsIDU2NjU5LCA1NjY2OCwgCisgICAgNTY2NzUsIDU2NjgwLCA1NjY4NSwgNTY2OTAsIDU2Njk3LCA1NjcwMiwgNTY3MDksIDU2NzE0LCA1NjcxOSwgNTY3MjYsIAorICAgIDU2NzMzLCA1NjczOCwgNTY3NDMsIDU2NzQ4LCA1Njc1NSwgNTY3NjIsIDU2NzY3LCA1Njc3MiwgNTY3NzcsIDU2NzgyLCAKKyAgICA1Njc4NywgNTY3OTQsIDU2ODAxLCA1NjgwNiwgNTY4MTEsIDU2ODE2LCA1NjgyMSwgNTY4MjYsIDU2ODMxLCA1NjgzNiwgCisgICAgNTY4NDEsIDU2ODQ2LCA1Njg1MSwgNTY4NTYsIDU2ODYzLCA1Njg2OCwgNTY4NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU2ODc4LCA1Njg4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY4OTAsIDU2ODk1LCAKKyAgICA1Njg5OSwgNTY5MDMsIDU2OTA3LCA1NjkxMSwgNTY5MTUsIDU2OTE5LCA1NjkyMywgNTY5MjcsIDU2OTMxLCA1NjkzNSwgCisgICAgNTY5NDEsIDU2OTQ1LCA1Njk0OSwgNTY5NTMsIDU2OTU3LCA1Njk2MSwgNTY5NjUsIDU2OTY5LCA1Njk3MywgNTY5NzcsIAorICAgIDU2OTgxLCA1Njk4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY5ODksIDU2OTkzLCA1Njk5NywgNTcwMDEsIAorICAgIDU3MDA1LCA1NzAwOSwgNTcwMTMsIDAsIDU3MDE3LCA1NzAyMSwgNTcwMjUsIDU3MDI5LCA1NzAzMywgNTcwMzcsIDU3MDQxLCAKKyAgICAwLCA1NzA0NSwgNTcwNDksIDU3MDUzLCA1NzA1NywgNTcwNjEsIDU3MDY1LCA1NzA2OSwgMCwgNTcwNzMsIDU3MDc3LCAKKyAgICA1NzA4MSwgNTcwODUsIDU3MDg5LCA1NzA5MywgNTcwOTcsIDAsIDU3MTAxLCA1NzEwNSwgNTcxMDksIDU3MTEzLCA1NzExNywgCisgICAgNTcxMjEsIDU3MTI1LCAwLCA1NzEyOSwgNTcxMzMsIDU3MTM3LCA1NzE0MSwgNTcxNDUsIDU3MTQ5LCA1NzE1MywgMCwgCisgICAgNTcxNTcsIDU3MTYxLCA1NzE2NSwgNTcxNjksIDU3MTczLCA1NzE3NywgNTcxODEsIDAsIDU3MTg1LCA1NzE4OSwgNTcxOTMsIAorICAgIDU3MTk3LCA1NzIwMSwgNTcyMDUsIDU3MjA5LCAwLCA1NzIxMywgNTcyMTgsIDU3MjIzLCA1NzIyOCwgNTcyMzMsIDU3MjM4LCAKKyAgICA1NzI0MywgNTcyNDcsIDU3MjUyLCA1NzI1NywgNTcyNjIsIDU3MjY2LCA1NzI3MSwgNTcyNzYsIDU3MjgxLCA1NzI4NiwgCisgICAgNTcyOTAsIDU3Mjk1LCA1NzMwMCwgNTczMDUsIDU3MzEwLCA1NzMxNSwgNTczMjAsIDU3MzI0LCA1NzMyOSwgNTczMzQsIAorICAgIDU3MzQxLCA1NzM0NiwgNTczNTEsIDU3MzU3LCA1NzM2NCwgNTczNzEsIDU3MzgwLCA1NzM4NywgNTczOTYsIDU3NDAwLCAKKyAgICA1NzQwNCwgNTc0MTAsIDU3NDE2LCA1NzQyMiwgNTc0MzAsIDU3NDM2LCA1NzQ0MCwgNTc0NDQsIDU3NDQ4LCA1NzQ1NCwgCisgICAgNTc0NjAsIDU3NDY0LCA1NzQ2NiwgNTc0NzAsIDU3NDc2LCA1NzQ3OCwgNTc0ODIsIDU3NDg2LCA1NzQ5MCwgNTc0OTYsIAorICAgIDU3NTAxLCA1NzUwNSwgNTc1MDksIDU3NTE0LCA1NzUyMCwgNTc1MjUsIDU3NTMwLCA1NzUzNSwgNTc1NDAsIDU3NTQ3LCAKKyAgICA1NzU1NCwgNTc1NTksIDU3NTY0LCA1NzU2OSwgNTc1NzQsIDU3NTc5LCA1NzU4NCwgNTc1ODgsIDU3NTkyLCA1NzU5OSwgCisgICAgNTc2MDYsIDU3NjEyLCA1NzYxNiwgNTc2MjEsIDU3NjIzLCA1NzYyNywgNTc2MzUsIDU3NjM5LCA1NzY0MywgNTc2NDcsIAorICAgIDU3NjUxLCA1NzY1NywgNTc2NjMsIDU3NjY3LCA1NzY3MywgNTc2NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NjUzLCA1NzY1NywgCi0gICAgNTc2NjEsIDU3NjY2LCA1NzY3MSwgNTc2NzYsIDU3NjgwLCA1NzY4NCwgNTc2ODgsIDU3NjkzLCA1NzY5OCwgNTc3MDIsIAotICAgIDU3NzA2LCA1NzcxMCwgNTc3MTQsIDU3NzE5LCA1NzcyNCwgNTc3MjksIDU3NzM0LCA1NzczOCwgNTc3NDIsIDU3NzQ3LCAKLSAgICA1Nzc1MiwgNTc3NTcsIDU3NzYyLCA1Nzc2NiwgMCwgNTc3NzAsIDU3Nzc0LCA1Nzc3OCwgNTc3ODIsIDU3Nzg2LCA1Nzc5MCwgCi0gICAgNTc3OTQsIDU3Nzk5LCA1NzgwNCwgNTc4MDgsIDU3ODEzLCA1NzgxOCwgNTc4MjcsIDU3ODMxLCA1NzgzNSwgNTc4MzksIAotICAgIDU3ODQ2LCA1Nzg1MCwgNTc4NTUsIDU3ODYwLCA1Nzg2NCwgNTc4NjgsIDU3ODc0LCA1Nzg3OSwgNTc4ODQsIDU3ODg5LCAKLSAgICA1Nzg5NCwgNTc4OTgsIDU3OTAyLCA1NzkwNiwgNTc5MTAsIDU3OTE0LCA1NzkxOSwgNTc5MjQsIDU3OTI4LCA1NzkzMiwgCi0gICAgNTc5MzcsIDU3OTQyLCA1Nzk0NywgNTc5NTEsIDU3OTU1LCA1Nzk2MCwgNTc5NjUsIDU3OTcxLCA1Nzk3NywgNTc5ODEsIAotICAgIDU3OTg3LCA1Nzk5MywgNTc5OTcsIDU4MDAzLCA1ODAwOSwgNTgwMTQsIDU4MDE5LCA1ODAyMywgNTgwMjksIDU4MDMzLCAKLSAgICA1ODAzNywgNTgwNDMsIDU4MDQ5LCA1ODA1NCwgNTgwNTksIDU4MDYzLCA1ODA2NywgNTgwNzUsIDU4MDgxLCA1ODA4NywgCi0gICAgNTgwOTMsIDU4MDk4LCA1ODEwMywgNTgxMDgsIDU4MTE0LCA1ODExOCwgNTgxMjQsIDU4MTI4LCA1ODEzMiwgNTgxMzgsIAotICAgIDU4MTQ0LCA1ODE1MCwgNTgxNTYsIDU4MTYyLCA1ODE2OCwgNTgxNzQsIDU4MTgwLCA1ODE4NiwgNTgxOTIsIDU4MTk4LCAKLSAgICA1ODIwNCwgNTgyMDgsIDU4MjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODIyMCwgNTgyMjMsIAotICAgIDU4MjI3LCA1ODIzMSwgNTgyMzUsIDU4MjM5LCA1ODI0MiwgNTgyNDUsIDU4MjQ5LCA1ODI1MywgNTgyNTcsIDU4MjYxLCAKLSAgICA1ODI2NCwgNTgyNjksIDU4MjczLCA1ODI3NywgNTgyODEsIDU4Mjg2LCA1ODI5MCwgNTgyOTQsIDU4Mjk4LCA1ODMwMiwgCi0gICAgNTgzMDgsIDU4MzE0LCA1ODMxOCwgNTgzMjIsIDU4MzI2LCA1ODMzMCwgNTgzMzQsIDU4MzM4LCA1ODM0MiwgNTgzNDYsIAotICAgIDU4MzUwLCA1ODM1NCwgNTgzNTgsIDU4MzY0LCA1ODM2OCwgNTgzNzIsIDU4Mzc2LCA1ODM4MCwgNTgzODQsIDU4Mzg4LCAKLSAgICA1ODM5MiwgNTgzOTYsIDU4NDAwLCA1ODQwNCwgNTg0MDgsIDU4NDEyLCA1ODQxNiwgNTg0MjAsIDU4NDI0LCA1ODQyOCwgCi0gICAgNTg0MzQsIDU4NDQwLCA1ODQ0NSwgNTg0NTAsIDU4NDU0LCA1ODQ1OCwgNTg0NjIsIDU4NDY2LCA1ODQ3MCwgNTg0NzQsIAotICAgIDU4NDc4LCA1ODQ4MiwgNTg0ODYsIDU4NDkwLCA1ODQ5NCwgNTg0OTgsIDU4NTAyLCA1ODUwNiwgNTg1MTAsIDU4NTE0LCAKLSAgICA1ODUxOCwgNTg1MjIsIDU4NTI2LCA1ODUzMCwgNTg1MzQsIDU4NTM4LCA1ODU0MiwgNTg1NDYsIDU4NTUyLCA1ODU1NiwgCi0gICAgNTg1NjAsIDU4NTY0LCA1ODU2OCwgNTg1NzIsIDU4NTc2LCA1ODU4MCwgNTg1ODQsIDU4NTg5LCA1ODU5NiwgNTg2MDAsIAotICAgIDU4NjA0LCA1ODYwOCwgNTg2MTIsIDU4NjE2LCA1ODYyMCwgNTg2MjQsIDU4NjI4LCA1ODYzMiwgNTg2MzYsIDU4NjQwLCAKLSAgICA1ODY0NCwgNTg2NTEsIDU4NjU1LCA1ODY2MSwgNTg2NjUsIDU4NjY5LCA1ODY3MywgNTg2NzcsIDU4NjgxLCA1ODY4NCwgCi0gICAgNTg2ODgsIDU4NjkyLCA1ODY5NiwgNTg3MDAsIDU4NzA0LCA1ODcwOCwgNTg3MTIsIDU4NzE2LCA1ODcyMCwgNTg3MjQsIAotICAgIDU4NzI4LCA1ODczMiwgNTg3MzYsIDU4NzQwLCA1ODc0NCwgNTg3NDgsIDU4NzUyLCA1ODc1NiwgNTg3NjAsIDU4NzY0LCAKLSAgICA1ODc2OCwgNTg3NzIsIDU4Nzc2LCA1ODc4MCwgNTg3ODQsIDU4Nzg4LCA1ODc5MiwgNTg3OTYsIDU4ODAwLCA1ODgwNCwgCi0gICAgNTg4MDgsIDU4ODEyLCA1ODgxOCwgNTg4MjIsIDU4ODI2LCA1ODgzMCwgNTg4MzQsIDU4ODM4LCA1ODg0MiwgNTg4NDYsIAotICAgIDU4ODUwLCA1ODg1NCwgNTg4NTgsIDU4ODYyLCA1ODg2NiwgNTg4NzAsIDU4ODc0LCA1ODg3OCwgNTg4ODIsIDU4ODg2LCAKLSAgICA1ODg5MCwgNTg4OTQsIDU4ODk4LCA1ODkwMiwgNTg5MDYsIDU4OTEwLCA1ODkxNCwgNTg5MTgsIDU4OTIyLCA1ODkyNiwgCi0gICAgNTg5MzQsIDU4OTM4LCA1ODk0MiwgNTg5NDYsIDU4OTUwLCA1ODk1NCwgNTg5NjAsIDU4OTY0LCA1ODk2OCwgNTg5NzIsIAotICAgIDU4OTc2LCA1ODk4MCwgNTg5ODQsIDU4OTg4LCA1ODk5MiwgNTg5OTYsIDU5MDAwLCA1OTAwNCwgNTkwMDgsIDU5MDEyLCAKLSAgICA1OTAxOCwgNTkwMjIsIDU5MDI2LCA1OTAzMCwgNTkwMzQsIDU5MDM4LCA1OTA0MiwgNTkwNDYsIDU5MDUwLCA1OTA1NCwgCi0gICAgNTkwNTgsIDU5MDYyLCA1OTA2NiwgNTkwNzAsIDU5MDc0LCA1OTA3OCwgNTkwODIsIDU5MDg2LCA1OTA5MCwgNTkwOTQsIAotICAgIDU5MDk4LCA1OTEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTkxMDYsIDU5MTE1LCA1OTEyMywgNTkxMzUsIDU5MTQ2LCA1OTE1NCwgNTkxNjMsIDU5MTcyLCAKLSAgICA1OTE4MiwgNTkxOTQsIDU5MjA2LCA1OTIxOCwgMCwgMCwgMCwgMCwgNTkyMjQsIDU5MjI3LCA1OTIzMCwgNTkyMzUsIAotICAgIDU5MjM4LCA1OTI0NSwgNTkyNDksIDU5MjUzLCA1OTI1NywgNTkyNjEsIDU5MjY1LCA1OTI3MCwgNTkyNzUsIDU5Mjc5LCAKLSAgICA1OTI4MywgNTkyODgsIDU5MjkzLCA1OTI5OCwgNTkzMDMsIDU5MzA2LCA1OTMwOSwgNTkzMTUsIDU5MzIxLCA1OTMyNiwgCi0gICAgNTkzMzEsIDU5MzM4LCA1OTM0NSwgNTkzNDksIDU5MzUzLCA1OTM1NywgNTkzNjUsIDU5MzcxLCA1OTM3OCwgNTkzODMsIAotICAgIDU5Mzg4LCA1OTM5MywgNTkzOTgsIDU5NDAzLCA1OTQwOCwgNTk0MTMsIDU5NDE4LCA1OTQyMywgNTk0MjgsIDU5NDMzLCAKLSAgICA1OTQzOCwgNTk0NDMsIDU5NDQ4LCA1OTQ1NCwgNTk0NTksIDU5NDYzLCA1OTQ2OSwgNTk0ODAsIDU5NDkwLCA1OTUwNSwgCi0gICAgNTk1MTUsIDU5NTE5LCA1OTUyOSwgNTk1MzUsIDU5NTQxLCA1OTU0NywgNTk1NTIsIDU5NTU1LCA1OTU2MCwgNTk1NjQsIDAsIAotICAgIDU5NTcwLCA1OTU3NCwgNTk1NzcsIDU5NTgxLCA1OTU4NCwgNTk1ODgsIDU5NTkxLCA1OTU5NSwgNTk1OTgsIDU5NjAyLCAKLSAgICA1OTYwNSwgNTk2MDgsIDU5NjEyLCA1OTYxNiwgNTk2MjAsIDU5NjI0LCA1OTYyOCwgNTk2MzIsIDU5NjM2LCA1OTY0MCwgCi0gICAgNTk2NDQsIDU5NjQ3LCA1OTY1MSwgNTk2NTUsIDU5NjU5LCA1OTY2MywgNTk2NjcsIDU5NjcxLCA1OTY3NSwgNTk2NzksIAotICAgIDU5NjgzLCA1OTY4NywgNTk2OTEsIDU5Njk1LCA1OTY5OSwgNTk3MDQsIDU5NzA4LCA1OTcxMiwgNTk3MTYsIDU5NzIwLCAKLSAgICA1OTcyMywgNTk3MjcsIDU5NzMwLCA1OTczNCwgNTk3MzgsIDU5NzQyLCA1OTc0NiwgNTk3NDksIDU5NzUzLCA1OTc1NiwgCi0gICAgNTk3NjAsIDU5NzY0LCA1OTc2OCwgNTk3NzIsIDU5Nzc2LCA1OTc4MCwgNTk3ODQsIDU5Nzg4LCA1OTc5MiwgNTk3OTYsIAotICAgIDU5ODAwLCA1OTgwNCwgNTk4MDcsIDU5ODExLCA1OTgxNSwgNTk4MTksIDU5ODIzLCA1OTgyNywgNTk4MzAsIDU5ODM1LCAKLSAgICA1OTgzOSwgNTk4NDQsIDU5ODQ4LCA1OTg1MSwgNTk4NTUsIDU5ODU5LCA1OTg2MywgNTk4NjcsIDU5ODcyLCA1OTg3NiwgCi0gICAgNTk4ODAsIDU5ODg0LCA1OTg4OCwgNTk4OTIsIDU5ODk2LCA1OTkwMCwgMCwgMCwgNTk5MDUsIDU5OTEzLCA1OTkyMSwgCi0gICAgNTk5MjgsIDU5OTM1LCA1OTkzOSwgNTk5NDUsIDU5OTUwLCA1OTk1NSwgNTk5NTksIDU5OTYyLCA1OTk2NiwgNTk5NjksIAotICAgIDU5OTczLCA1OTk3NiwgNTk5ODAsIDU5OTgzLCA1OTk4NywgNTk5OTAsIDU5OTkzLCA1OTk5NywgNjAwMDEsIDYwMDA1LCAKLSAgICA2MDAwOSwgNjAwMTMsIDYwMDE3LCA2MDAyMSwgNjAwMjUsIDYwMDI5LCA2MDAzMiwgNjAwMzYsIDYwMDQwLCA2MDA0NCwgCi0gICAgNjAwNDgsIDYwMDUyLCA2MDA1NiwgNjAwNjAsIDYwMDY0LCA2MDA2OCwgNjAwNzIsIDYwMDc2LCA2MDA4MCwgNjAwODQsIAotICAgIDYwMDg5LCA2MDA5MywgNjAwOTcsIDYwMTAxLCA2MDEwNSwgNjAxMDgsIDYwMTEyLCA2MDExNSwgNjAxMTksIDYwMTIzLCAKLSAgICA2MDEyNywgNjAxMzEsIDYwMTM0LCA2MDEzOCwgNjAxNDEsIDYwMTQ1LCA2MDE0OSwgNjAxNTMsIDYwMTU3LCA2MDE2MSwgCi0gICAgNjAxNjUsIDYwMTY5LCA2MDE3MywgNjAxNzcsIDYwMTgxLCA2MDE4NSwgNjAxODksIDYwMTkyLCA2MDE5NiwgNjAyMDAsIAotICAgIDYwMjA0LCA2MDIwOCwgNjAyMTIsIDYwMjE1LCA2MDIyMCwgNjAyMjQsIDYwMjI5LCA2MDIzMywgNjAyMzYsIDYwMjQwLCAKLSAgICA2MDI0NCwgNjAyNDgsIDYwMjUyLCA2MDI1NywgNjAyNjEsIDYwMjY1LCA2MDI2OSwgNjAyNzMsIDYwMjc3LCA2MDI4MSwgCi0gICAgNjAyODUsIDYwMjkwLCA2MDI5NCwgNjAyOTgsIDYwMzAyLCA2MDMwNiwgNjAzMTEsIDYwMzE4LCA2MDMyMiwgNjAzMjgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDYwMzMzLCA2MDMzOCwgNjAzNDMsIDYwMzQ3LCA2MDM1MiwgNjAzNTcsIDYwMzYyLCA2MDM2NywgCi0gICAgNjAzNzEsIDYwMzc2LCA2MDM4MSwgNjAzODYsIDYwMzkxLCA2MDM5NiwgNjA0MDEsIDYwNDA2LCA2MDQxMSwgNjA0MTYsIAotICAgIDYwNDIwLCA2MDQyNSwgNjA0MzAsIDYwNDM1LCA2MDQzOSwgNjA0NDMsIDYwNDQ3LCA2MDQ1MiwgNjA0NTcsIDYwNDYyLCAKLSAgICA2MDQ2NywgNjA0NzIsIDYwNDc3LCA2MDQ4MiwgNjA0ODcsIDYwNDkyLCA2MDQ5NywgNjA1MDEsIDYwNTA1LCA2MDUxMCwgCi0gICAgNjA1MTUsIDYwNTIwLCA2MDUyNSwgMCwgMCwgMCwgNjA1MzAsIDYwNTM0LCA2MDUzOCwgNjA1NDIsIDYwNTQ2LCA2MDU1MCwgCi0gICAgNjA1NTQsIDYwNTU4LCA2MDU2MiwgNjA1NjYsIDYwNTcwLCA2MDU3NCwgNjA1NzgsIDYwNTgyLCA2MDU4NiwgNjA1OTAsIAotICAgIDYwNTk0LCA2MDU5OCwgNjA2MDIsIDYwNjA2LCA2MDYxMCwgNjA2MTQsIDYwNjE4LCA2MDYyMiwgNjA2MjYsIDYwNjMwLCAKLSAgICA2MDYzNCwgNjA2MzgsIDYwNjQyLCA2MDY0NiwgNjA2NTAsIDYwNjUzLCA2MDY1NywgNjA2NjAsIDYwNjY0LCA2MDY2OCwgCi0gICAgNjA2NzEsIDYwNjc1LCA2MDY3OSwgNjA2ODIsIDYwNjg2LCA2MDY5MCwgNjA2OTQsIDYwNjk4LCA2MDcwMSwgNjA3MDUsIAotICAgIDYwNzA5LCA2MDcxMywgNjA3MTcsIDYwNzIxLCA2MDcyNSwgNjA3MjgsIDYwNzMxLCA2MDczNSwgNjA3MzksIDYwNzQzLCAKLSAgICA2MDc0NywgNjA3NTEsIDYwNzU1LCA2MDc1OSwgNjA3NjMsIDYwNzY3LCA2MDc3MSwgNjA3NzUsIDYwNzc5LCA2MDc4MywgCi0gICAgNjA3ODcsIDYwNzkxLCA2MDc5NSwgNjA3OTksIDYwODAzLCA2MDgwNywgNjA4MTEsIDYwODE1LCA2MDgxOSwgNjA4MjMsIAotICAgIDYwODI3LCA2MDgzMSwgNjA4MzUsIDYwODM5LCA2MDg0MywgNjA4NDcsIDYwODUxLCA2MDg1NSwgNjA4NTksIDYwODYzLCAKLSAgICA2MDg2NywgNjA4NzEsIDYwODc1LCA2MDg3OSwgNjA4ODMsIDYwODg3LCA2MDg5MSwgNjA4OTUsIDAsIDYwODk5LCA2MDkwNSwgCi0gICAgNjA5MTEsIDYwOTE2LCA2MDkyMSwgNjA5MjYsIDYwOTMyLCA2MDkzOCwgNjA5NDQsIDYwOTUwLCA2MDk1NiwgNjA5NjIsIAotICAgIDYwOTY4LCA2MDk3NCwgNjA5ODAsIDYwOTg2LCA2MDk5MiwgNjA5OTcsIDYxMDAyLCA2MTAwNywgNjEwMTIsIDYxMDE3LCAKLSAgICA2MTAyMiwgNjEwMjcsIDYxMDMyLCA2MTAzNywgNjEwNDIsIDYxMDQ3LCA2MTA1MiwgNjEwNTcsIDYxMDYyLCA2MTA2NywgCi0gICAgNjEwNzIsIDYxMDc3LCA2MTA4MiwgNjEwODcsIDYxMDkyLCA2MTA5OCwgNjExMDQsIDYxMTEwLCA2MTExNiwgNjExMjEsIAotICAgIDYxMTI2LCAwLCAwLCAwLCAwLCAwLCA2MTEzMSwgNjExMzYsIDYxMTQxLCA2MTE0NiwgNjExNTEsIDYxMTU2LCA2MTE2MSwgCi0gICAgNjExNjYsIDYxMTcxLCA2MTE3NiwgNjExODEsIDYxMTg2LCA2MTE5MSwgNjExOTYsIDYxMjAxLCA2MTIwNiwgNjEyMTEsIAotICAgIDYxMjE2LCA2MTIyMSwgNjEyMjYsIDYxMjMxLCA2MTIzNiwgNjEyNDEsIDYxMjQ2LCA2MTI1MSwgNjEyNTYsIDYxMjYxLCAKLSAgICA2MTI2NiwgNjEyNzEsIDYxMjc2LCA2MTI4MSwgNjEyODYsIDYxMjkxLCA2MTI5NiwgNjEzMDEsIDYxMzA2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTMxMSwgNjEzMTYsIDYxMzIxLCA2MTMyNiwgNjEzMzAsIDYxMzM1LCAKLSAgICA2MTMzOSwgNjEzNDQsIDYxMzQ5LCA2MTM1NCwgNjEzNTksIDYxMzY0LCA2MTM2OCwgNjEzNzMsIDYxMzc4LCA2MTM4MywgCi0gICAgNjEzODgsIDYxMzkyLCA2MTM5NiwgNjE0MDAsIDYxNDA0LCA2MTQwOCwgNjE0MTIsIDYxNDE2LCA2MTQyMCwgNjE0MjQsIAotICAgIDYxNDI4LCA2MTQzMiwgNjE0MzYsIDYxNDQwLCA2MTQ0NCwgNjE0NDksIDYxNDU0LCA2MTQ1OSwgNjE0NjQsIDYxNDY5LCAKLSAgICA2MTQ3NCwgNjE0NzksIDYxNDg0LCA2MTQ4OSwgNjE0OTQsIDYxNDk5LCA2MTUwNCwgNjE1MDksIDYxNTE0LCA2MTUxOSwgCi0gICAgNjE1MjUsIDAsIDYxNTMyLCA2MTUzNSwgNjE1MzgsIDYxNTQxLCA2MTU0NCwgNjE1NDcsIDYxNTUwLCA2MTU1MywgNjE1NTYsIAotICAgIDYxNTU5LCA2MTU2MywgNjE1NjcsIDYxNTcxLCA2MTU3NSwgNjE1NzksIDYxNTgzLCA2MTU4NywgNjE1OTEsIDYxNTk1LCAKLSAgICA2MTU5OSwgNjE2MDMsIDYxNjA3LCA2MTYxMSwgNjE2MTUsIDYxNjE5LCA2MTYyMywgNjE2MjcsIDYxNjMxLCA2MTYzNSwgCi0gICAgNjE2MzksIDYxNjQzLCA2MTY0NywgNjE2NTEsIDYxNjU1LCA2MTY1OSwgNjE2NjMsIDYxNjY3LCA2MTY3MSwgNjE2NzUsIAotICAgIDYxNjc5LCA2MTY4MywgNjE2OTIsIDYxNzAxLCA2MTcxMCwgNjE3MTksIDYxNzI4LCA2MTczNywgNjE3NDYsIDYxNzU1LCAKLSAgICA2MTc1OCwgNjE3NjMsIDYxNzY4LCA2MTc3MywgNjE3NzgsIDYxNzgzLCA2MTc4OCwgNjE3OTMsIDYxNzk4LCA2MTgwMywgCi0gICAgNjE4MDcsIDYxODEyLCA2MTgxNywgNjE4MjIsIDYxODI3LCA2MTgzMiwgNjE4MzYsIDYxODQwLCA2MTg0NCwgNjE4NDgsIAotICAgIDYxODUyLCA2MTg1NiwgNjE4NjAsIDYxODY0LCA2MTg2OCwgNjE4NzIsIDYxODc2LCA2MTg4MCwgNjE4ODQsIDYxODg4LCAKLSAgICA2MTg5MywgNjE4OTgsIDYxOTAzLCA2MTkwOCwgNjE5MTMsIDYxOTE4LCA2MTkyMywgNjE5MjgsIDYxOTMzLCA2MTkzOCwgCi0gICAgNjE5NDMsIDYxOTQ4LCA2MTk1MywgNjE5NTgsIDYxOTY0LCA2MTk3MCwgNjE5NzUsIDYxOTgwLCA2MTk4MywgNjE5ODYsIAotICAgIDYxOTg5LCA2MTk5MiwgNjE5OTUsIDYxOTk4LCA2MjAwMSwgNjIwMDQsIDYyMDA3LCA2MjAxMSwgNjIwMTUsIDYyMDE5LCAKLSAgICA2MjAyMywgNjIwMjcsIDYyMDMxLCA2MjAzNSwgNjIwMzksIDYyMDQzLCA2MjA0NywgNjIwNTEsIDYyMDU1LCA2MjA1OSwgCi0gICAgNjIwNjMsIDYyMDY3LCA2MjA3MSwgNjIwNzUsIDYyMDc5LCA2MjA4MywgNjIwODcsIDYyMDkxLCA2MjA5NSwgNjIwOTksIAotICAgIDYyMTAzLCA2MjEwNywgNjIxMTEsIDYyMTE1LCA2MjExOSwgNjIxMjMsIDYyMTI3LCA2MjEzMSwgNjIxMzUsIDYyMTM5LCAKLSAgICA2MjE0MywgNjIxNDcsIDYyMTUxLCA2MjE1NSwgNjIxNTksIDYyMTYzLCA2MjE2NywgNjIxNzIsIDYyMTc3LCA2MjE4MiwgCi0gICAgNjIxODcsIDYyMTkxLCA2MjE5NiwgNjIyMDEsIDYyMjA2LCA2MjIxMSwgNjIyMTYsIDYyMjIxLCA2MjIyNiwgNjIyMzEsIAotICAgIDYyMjM2LCA2MjI0MCwgNjIyNDcsIDYyMjU0LCA2MjI2MSwgNjIyNjgsIDYyMjc1LCA2MjI4MiwgNjIyODksIDYyMjk2LCAKLSAgICA2MjMwMywgNjIzMTAsIDYyMzE3LCA2MjMyNCwgNjIzMjcsIDYyMzMwLCA2MjMzMywgNjIzMzgsIDYyMzQxLCA2MjM0NCwgCi0gICAgNjIzNDcsIDYyMzUwLCA2MjM1MywgNjIzNTYsIDYyMzYwLCA2MjM2NCwgNjIzNjgsIDYyMzcyLCA2MjM3NSwgNjIzNzksIAotICAgIDYyMzgzLCA2MjM4NywgNjIzOTEsIDYyMzk1LCA2MjM5OSwgNjI0MDMsIDYyNDA3LCA2MjQxMCwgNjI0MTMsIDYyNDE3LCAKLSAgICA2MjQyMSwgNjI0MjUsIDYyNDI5LCA2MjQzMiwgNjI0MzYsIDYyNDQwLCA2MjQ0NCwgNjI0NDgsIDYyNDUxLCA2MjQ1NSwgCi0gICAgNjI0NTksIDYyNDYzLCA2MjQ2NywgNjI0NzAsIDYyNDc0LCA2MjQ3OCwgNjI0ODEsIDYyNDg1LCA2MjQ4OSwgNjI0OTMsIAotICAgIDYyNDk3LCA2MjUwMSwgNjI1MDUsIDYyNTA5LCAwLCA2MjUxMywgNjI1MTYsIDYyNTE5LCA2MjUyMiwgNjI1MjUsIDYyNTI4LCAKLSAgICA2MjUzMSwgNjI1MzQsIDYyNTM3LCA2MjU0MCwgNjI1NDMsIDYyNTQ2LCA2MjU0OSwgNjI1NTIsIDYyNTU1LCA2MjU1OCwgCi0gICAgNjI1NjEsIDYyNTY0LCA2MjU2NywgNjI1NzAsIDYyNTczLCA2MjU3NiwgNjI1NzksIDYyNTgyLCA2MjU4NSwgNjI1ODgsIAotICAgIDYyNTkxLCA2MjU5NCwgNjI1OTcsIDYyNjAwLCA2MjYwMywgNjI2MDYsIDYyNjA5LCA2MjYxMiwgNjI2MTUsIDYyNjE4LCAKLSAgICA2MjYyMSwgNjI2MjQsIDYyNjI3LCA2MjYzMCwgNjI2MzMsIDYyNjM2LCA2MjYzOSwgNjI2NDIsIDYyNjQ1LCA2MjY0OCwgCi0gICAgNjI2NTEsIDYyNjU0LCA2MjY1NywgNjI2NjAsIDYyNjYzLCA2MjY2NiwgNjI2NjksIDYyNjcyLCA2MjY3NSwgNjI2NzgsIAotICAgIDYyNjgxLCA2MjY4NCwgNjI2ODcsIDYyNjkwLCA2MjY5MywgNjI2OTYsIDYyNjk5LCA2MjcwMiwgNjI3MDUsIDYyNzA4LCAKLSAgICA2MjcxMSwgNjI3MTQsIDYyNzE3LCA2MjcyMCwgNjI3MjMsIDYyNzI2LCA2MjcyOSwgNjI3MzIsIDYyNzM1LCA2MjczOCwgCi0gICAgNjI3NDEsIDYyNzQ0LCA2Mjc0NywgNjI3NTAsIDYyNzUzLCA2Mjc1NiwgNjI3NTksIDYyNzYyLCA2Mjc2NSwgNjI3NjgsIAotICAgIDYyNzcxLCA2Mjc3NCwgNjI3NzcsIDYyNzg2LCA2Mjc5NCwgNjI4MDIsIDYyODEwLCA2MjgxOCwgNjI4MjYsIDYyODM0LCAKLSAgICA2Mjg0MiwgNjI4NTAsIDYyODU4LCA2Mjg2NywgNjI4NzYsIDYyODg1LCA2Mjg5NCwgNjI5MDMsIDYyOTEyLCA2MjkyMSwgCi0gICAgNjI5MzAsIDYyOTM5LCA2Mjk0OCwgNjI5NTcsIDYyOTY2LCA2Mjk3NSwgNjI5ODQsIDYyOTkzLCA2Mjk5NiwgNjI5OTksIAotICAgIDYzMDAyLCA2MzAwNCwgNjMwMDcsIDYzMDEwLCA2MzAxMywgNjMwMTgsIDYzMDIzLCA2MzAyNiwgNjMwMzMsIDYzMDQwLCAKLSAgICA2MzA0NywgNjMwNTQsIDYzMDU3LCA2MzA2MiwgNjMwNjQsIDYzMDY4LCA2MzA3MCwgNjMwNzIsIDYzMDc1LCA2MzA3OCwgCi0gICAgNjMwODEsIDYzMDg0LCA2MzA4NywgNjMwOTAsIDYzMDkzLCA2MzA5OCwgNjMxMDMsIDYzMTA2LCA2MzEwOSwgNjMxMTIsIAotICAgIDYzMTE1LCA2MzExOCwgNjMxMjEsIDYzMTI0LCA2MzEyOCwgNjMxMzEsIDYzMTM0LCA2MzEzNywgNjMxNDAsIDYzMTQzLCAKLSAgICA2MzE0NywgNjMxNTAsIDYzMTUzLCA2MzE1NiwgNjMxNjEsIDYzMTY2LCA2MzE3MSwgNjMxNzYsIDYzMTgxLCA2MzE4NiwgCi0gICAgNjMxOTEsIDYzMTk2LCA2MzIwMiwgNjMyMTAsIDYzMjEyLCA2MzIxNSwgNjMyMTgsIDYzMjIxLCA2MzIyNCwgNjMyMzAsIAotICAgIDYzMjM4LCA2MzI0MSwgNjMyNDQsIDYzMjQ5LCA2MzI1MiwgNjMyNTUsIDYzMjU4LCA2MzI2MywgNjMyNjYsIDYzMjY5LCAKLSAgICA2MzI3NCwgNjMyNzcsIDYzMjgwLCA2MzI4NSwgNjMyODgsIDYzMjkxLCA2MzI5NiwgNjMzMDEsIDYzMzA2LCA2MzMwOSwgCi0gICAgNjMzMTIsIDYzMzE1LCA2MzMxOCwgNjMzMjQsIDYzMzI3LCA2MzMzMCwgNjMzMzMsIDYzMzM1LCA2MzMzOCwgNjMzNDEsIAotICAgIDYzMzQ0LCA2MzM0OSwgNjMzNTIsIDYzMzU1LCA2MzM1OCwgNjMzNjEsIDYzMzY0LCA2MzM2OSwgNjMzNzIsIDYzMzc1LCAKLSAgICA2MzM3OCwgNjMzODEsIDYzMzg0LCA2MzM4NywgNjMzOTAsIDYzMzkzLCA2MzM5NiwgNjM0MDEsIDYzNDA1LCA2MzQxMywgCi0gICAgNjM0MjEsIDYzNDI5LCA2MzQzNywgNjM0NDUsIDYzNDUzLCA2MzQ2MSwgNjM0NjksIDYzNDc3LCA2MzQ4NiwgNjM0OTUsIAotICAgIDYzNTA0LCA2MzUxMywgNjM1MjIsIDYzNTMxLCA2MzU0MCwgNjM1NDksIDYzNTU4LCA2MzU2NywgNjM1NzYsIDYzNTg1LCAKLSAgICA2MzU5NCwgNjM2MDMsIDYzNjEyLCA2MzYyMSwgNjM2MzAsIDYzNjM5LCA2MzY0OCwgNjM2NTcsIDYzNjY2LCA2MzY3NSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc2ODEsIDU3Njg1LCA1NzY4OSwgNTc2OTQsIDU3Njk5LCA1NzcwNCwgCisgICAgNTc3MDgsIDU3NzEyLCA1NzcxNiwgNTc3MjEsIDU3NzI2LCA1NzczMCwgNTc3MzQsIDU3NzM4LCA1Nzc0MiwgNTc3NDcsIAorICAgIDU3NzUyLCA1Nzc1NywgNTc3NjIsIDU3NzY2LCA1Nzc3MCwgNTc3NzUsIDU3NzgwLCA1Nzc4NSwgNTc3OTAsIDU3Nzk0LCAwLCAKKyAgICA1Nzc5OCwgNTc4MDIsIDU3ODA2LCA1NzgxMCwgNTc4MTQsIDU3ODE4LCA1NzgyMiwgNTc4MjcsIDU3ODMyLCA1NzgzNiwgCisgICAgNTc4NDEsIDU3ODQ2LCA1Nzg1NSwgNTc4NTksIDU3ODYzLCA1Nzg2NywgNTc4NzQsIDU3ODc4LCA1Nzg4MywgNTc4ODgsIAorICAgIDU3ODkyLCA1Nzg5NiwgNTc5MDIsIDU3OTA3LCA1NzkxMiwgNTc5MTcsIDU3OTIyLCA1NzkyNiwgNTc5MzAsIDU3OTM0LCAKKyAgICA1NzkzOCwgNTc5NDIsIDU3OTQ3LCA1Nzk1MiwgNTc5NTYsIDU3OTYwLCA1Nzk2NSwgNTc5NzAsIDU3OTc1LCA1Nzk3OSwgCisgICAgNTc5ODMsIDU3OTg4LCA1Nzk5MywgNTc5OTksIDU4MDA1LCA1ODAwOSwgNTgwMTUsIDU4MDIxLCA1ODAyNSwgNTgwMzEsIAorICAgIDU4MDM3LCA1ODA0MiwgNTgwNDcsIDU4MDUxLCA1ODA1NywgNTgwNjEsIDU4MDY1LCA1ODA3MSwgNTgwNzcsIDU4MDgyLCAKKyAgICA1ODA4NywgNTgwOTEsIDU4MDk1LCA1ODEwMywgNTgxMDksIDU4MTE1LCA1ODEyMSwgNTgxMjYsIDU4MTMxLCA1ODEzNiwgCisgICAgNTgxNDIsIDU4MTQ2LCA1ODE1MiwgNTgxNTYsIDU4MTYwLCA1ODE2NiwgNTgxNzIsIDU4MTc4LCA1ODE4NCwgNTgxOTAsIAorICAgIDU4MTk2LCA1ODIwMiwgNTgyMDgsIDU4MjE0LCA1ODIyMCwgNTgyMjYsIDU4MjMyLCA1ODIzNiwgNTgyNDIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MjQ4LCA1ODI1MSwgNTgyNTUsIDU4MjU5LCA1ODI2MywgNTgyNjcsIAorICAgIDU4MjcwLCA1ODI3MywgNTgyNzcsIDU4MjgxLCA1ODI4NSwgNTgyODksIDU4MjkyLCA1ODI5NywgNTgzMDEsIDU4MzA1LCAKKyAgICA1ODMwOSwgNTgzMTQsIDU4MzE4LCA1ODMyMiwgNTgzMjYsIDU4MzMwLCA1ODMzNiwgNTgzNDIsIDU4MzQ2LCA1ODM1MCwgCisgICAgNTgzNTQsIDU4MzU4LCA1ODM2MiwgNTgzNjYsIDU4MzcwLCA1ODM3NCwgNTgzNzgsIDU4MzgyLCA1ODM4NiwgNTgzOTIsIAorICAgIDU4Mzk2LCA1ODQwMCwgNTg0MDQsIDU4NDA4LCA1ODQxMiwgNTg0MTYsIDU4NDIwLCA1ODQyNCwgNTg0MjgsIDU4NDMyLCAKKyAgICA1ODQzNiwgNTg0NDAsIDU4NDQ0LCA1ODQ0OCwgNTg0NTIsIDU4NDU2LCA1ODQ2MiwgNTg0NjgsIDU4NDczLCA1ODQ3OCwgCisgICAgNTg0ODIsIDU4NDg2LCA1ODQ5MCwgNTg0OTQsIDU4NDk4LCA1ODUwMiwgNTg1MDYsIDU4NTEwLCA1ODUxNCwgNTg1MTgsIAorICAgIDU4NTIyLCA1ODUyNiwgNTg1MzAsIDU4NTM0LCA1ODUzOCwgNTg1NDIsIDU4NTQ2LCA1ODU1MCwgNTg1NTQsIDU4NTU4LCAKKyAgICA1ODU2MiwgNTg1NjYsIDU4NTcwLCA1ODU3NCwgNTg1ODAsIDU4NTg0LCA1ODU4OCwgNTg1OTIsIDU4NTk2LCA1ODYwMCwgCisgICAgNTg2MDQsIDU4NjA4LCA1ODYxMiwgNTg2MTcsIDU4NjI0LCA1ODYyOCwgNTg2MzIsIDU4NjM2LCA1ODY0MCwgNTg2NDQsIAorICAgIDU4NjQ4LCA1ODY1MiwgNTg2NTYsIDU4NjYwLCA1ODY2NCwgNTg2NjgsIDU4NjcyLCA1ODY3OSwgNTg2ODMsIDU4Njg5LCAKKyAgICA1ODY5MywgNTg2OTcsIDU4NzAxLCA1ODcwNSwgNTg3MDksIDU4NzEyLCA1ODcxNiwgNTg3MjAsIDU4NzI0LCA1ODcyOCwgCisgICAgNTg3MzIsIDU4NzM2LCA1ODc0MCwgNTg3NDQsIDU4NzQ4LCA1ODc1MiwgNTg3NTYsIDU4NzYwLCA1ODc2NCwgNTg3NjgsIAorICAgIDU4NzcyLCA1ODc3NiwgNTg3ODAsIDU4Nzg0LCA1ODc4OCwgNTg3OTIsIDU4Nzk2LCA1ODgwMCwgNTg4MDQsIDU4ODA4LCAKKyAgICA1ODgxMiwgNTg4MTYsIDU4ODIwLCA1ODgyNCwgNTg4MjgsIDU4ODMyLCA1ODgzNiwgNTg4NDAsIDU4ODQ2LCA1ODg1MCwgCisgICAgNTg4NTQsIDU4ODU4LCA1ODg2MiwgNTg4NjYsIDU4ODcwLCA1ODg3NCwgNTg4NzgsIDU4ODgyLCA1ODg4NiwgNTg4OTAsIAorICAgIDU4ODk0LCA1ODg5OCwgNTg5MDIsIDU4OTA2LCA1ODkxMCwgNTg5MTQsIDU4OTE4LCA1ODkyMiwgNTg5MjYsIDU4OTMwLCAKKyAgICA1ODkzNCwgNTg5MzgsIDU4OTQyLCA1ODk0NiwgNTg5NTAsIDU4OTU0LCA1ODk2MiwgNTg5NjYsIDU4OTcwLCA1ODk3NCwgCisgICAgNTg5NzgsIDU4OTgyLCA1ODk4OCwgNTg5OTIsIDU4OTk2LCA1OTAwMCwgNTkwMDQsIDU5MDA4LCA1OTAxMiwgNTkwMTYsIAorICAgIDU5MDIwLCA1OTAyNCwgNTkwMjgsIDU5MDMyLCA1OTAzNiwgNTkwNDAsIDU5MDQ2LCA1OTA1MCwgNTkwNTQsIDU5MDU4LCAKKyAgICA1OTA2MiwgNTkwNjYsIDU5MDcwLCA1OTA3NCwgNTkwNzgsIDU5MDgyLCA1OTA4NiwgNTkwOTAsIDU5MDk0LCA1OTA5OCwgCisgICAgNTkxMDIsIDU5MTA2LCA1OTExMCwgNTkxMTQsIDU5MTE4LCA1OTEyMiwgNTkxMjYsIDU5MTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTEzNCwgNTkxNDMsIAorICAgIDU5MTUxLCA1OTE2MywgNTkxNzQsIDU5MTgyLCA1OTE5MSwgNTkyMDAsIDU5MjEwLCA1OTIyMiwgNTkyMzQsIDU5MjQ2LCAwLCAKKyAgICAwLCAwLCAwLCA1OTI1MiwgNTkyNTUsIDU5MjU4LCA1OTI2MywgNTkyNjYsIDU5MjczLCA1OTI3NywgNTkyODEsIDU5Mjg1LCAKKyAgICA1OTI4OSwgNTkyOTMsIDU5Mjk4LCA1OTMwMywgNTkzMDcsIDU5MzExLCA1OTMxNiwgNTkzMjEsIDU5MzI2LCA1OTMzMSwgCisgICAgNTkzMzQsIDU5MzM3LCA1OTM0MywgNTkzNDksIDU5MzU0LCA1OTM1OSwgNTkzNjYsIDU5MzczLCA1OTM3NywgNTkzODEsIAorICAgIDU5Mzg1LCA1OTM5MywgNTkzOTksIDU5NDA2LCA1OTQxMSwgNTk0MTYsIDU5NDIxLCA1OTQyNiwgNTk0MzEsIDU5NDM2LCAKKyAgICA1OTQ0MSwgNTk0NDYsIDU5NDUxLCA1OTQ1NiwgNTk0NjEsIDU5NDY2LCA1OTQ3MSwgNTk0NzYsIDU5NDgyLCA1OTQ4NywgCisgICAgNTk0OTEsIDU5NDk3LCA1OTUwOCwgNTk1MTgsIDU5NTMzLCA1OTU0MywgNTk1NDcsIDU5NTU3LCA1OTU2MywgNTk1NjksIAorICAgIDU5NTc1LCA1OTU4MCwgNTk1ODMsIDU5NTg4LCA1OTU5MiwgMCwgNTk1OTgsIDU5NjAyLCA1OTYwNSwgNTk2MDksIDU5NjEyLCAKKyAgICA1OTYxNiwgNTk2MTksIDU5NjIzLCA1OTYyNiwgNTk2MzAsIDU5NjMzLCA1OTYzNiwgNTk2NDAsIDU5NjQ0LCA1OTY0OCwgCisgICAgNTk2NTIsIDU5NjU2LCA1OTY2MCwgNTk2NjQsIDU5NjY4LCA1OTY3MiwgNTk2NzUsIDU5Njc5LCA1OTY4MywgNTk2ODcsIAorICAgIDU5NjkxLCA1OTY5NSwgNTk2OTksIDU5NzAzLCA1OTcwNywgNTk3MTEsIDU5NzE1LCA1OTcxOSwgNTk3MjMsIDU5NzI3LCAKKyAgICA1OTczMiwgNTk3MzYsIDU5NzQwLCA1OTc0NCwgNTk3NDgsIDU5NzUxLCA1OTc1NSwgNTk3NTgsIDU5NzYyLCA1OTc2NiwgCisgICAgNTk3NzAsIDU5Nzc0LCA1OTc3NywgNTk3ODEsIDU5Nzg0LCA1OTc4OCwgNTk3OTIsIDU5Nzk2LCA1OTgwMCwgNTk4MDQsIAorICAgIDU5ODA4LCA1OTgxMiwgNTk4MTYsIDU5ODIwLCA1OTgyNCwgNTk4MjgsIDU5ODMyLCA1OTgzNSwgNTk4MzksIDU5ODQzLCAKKyAgICA1OTg0NywgNTk4NTEsIDU5ODU1LCA1OTg1OCwgNTk4NjMsIDU5ODY3LCA1OTg3MiwgNTk4NzYsIDU5ODc5LCA1OTg4MywgCisgICAgNTk4ODcsIDU5ODkxLCA1OTg5NSwgNTk5MDAsIDU5OTA0LCA1OTkwOCwgNTk5MTIsIDU5OTE2LCA1OTkyMCwgNTk5MjQsIAorICAgIDU5OTI4LCAwLCAwLCA1OTkzMywgNTk5NDEsIDU5OTQ5LCA1OTk1NiwgNTk5NjMsIDU5OTY3LCA1OTk3MywgNTk5NzgsIAorICAgIDU5OTgzLCA1OTk4NywgNTk5OTAsIDU5OTk0LCA1OTk5NywgNjAwMDEsIDYwMDA0LCA2MDAwOCwgNjAwMTEsIDYwMDE1LCAKKyAgICA2MDAxOCwgNjAwMjEsIDYwMDI1LCA2MDAyOSwgNjAwMzMsIDYwMDM3LCA2MDA0MSwgNjAwNDUsIDYwMDQ5LCA2MDA1MywgCisgICAgNjAwNTcsIDYwMDYwLCA2MDA2NCwgNjAwNjgsIDYwMDcyLCA2MDA3NiwgNjAwODAsIDYwMDg0LCA2MDA4OCwgNjAwOTIsIAorICAgIDYwMDk2LCA2MDEwMCwgNjAxMDQsIDYwMTA4LCA2MDExMiwgNjAxMTcsIDYwMTIxLCA2MDEyNSwgNjAxMjksIDYwMTMzLCAKKyAgICA2MDEzNiwgNjAxNDAsIDYwMTQzLCA2MDE0NywgNjAxNTEsIDYwMTU1LCA2MDE1OSwgNjAxNjIsIDYwMTY2LCA2MDE2OSwgCisgICAgNjAxNzMsIDYwMTc3LCA2MDE4MSwgNjAxODUsIDYwMTg5LCA2MDE5MywgNjAxOTcsIDYwMjAxLCA2MDIwNSwgNjAyMDksIAorICAgIDYwMjEzLCA2MDIxNywgNjAyMjAsIDYwMjI0LCA2MDIyOCwgNjAyMzIsIDYwMjM2LCA2MDI0MCwgNjAyNDMsIDYwMjQ4LCAKKyAgICA2MDI1MiwgNjAyNTcsIDYwMjYxLCA2MDI2NCwgNjAyNjgsIDYwMjcyLCA2MDI3NiwgNjAyODAsIDYwMjg1LCA2MDI4OSwgCisgICAgNjAyOTMsIDYwMjk3LCA2MDMwMSwgNjAzMDUsIDYwMzA5LCA2MDMxMywgNjAzMTgsIDYwMzIyLCA2MDMyNiwgNjAzMzAsIAorICAgIDYwMzM0LCA2MDMzOSwgNjAzNDYsIDYwMzUwLCA2MDM1NiwgMCwgMCwgMCwgMCwgMCwgNjAzNjEsIDYwMzY2LCA2MDM3MSwgCisgICAgNjAzNzUsIDYwMzgwLCA2MDM4NSwgNjAzOTAsIDYwMzk1LCA2MDM5OSwgNjA0MDQsIDYwNDA5LCA2MDQxNCwgNjA0MTksIAorICAgIDYwNDI0LCA2MDQyOSwgNjA0MzQsIDYwNDM5LCA2MDQ0NCwgNjA0NDgsIDYwNDUzLCA2MDQ1OCwgNjA0NjMsIDYwNDY3LCAKKyAgICA2MDQ3MSwgNjA0NzUsIDYwNDgwLCA2MDQ4NSwgNjA0OTAsIDYwNDk1LCA2MDUwMCwgNjA1MDUsIDYwNTEwLCA2MDUxNSwgCisgICAgNjA1MjAsIDYwNTI1LCA2MDUyOSwgNjA1MzMsIDYwNTM4LCA2MDU0MywgNjA1NDgsIDYwNTUzLCAwLCAwLCAwLCA2MDU1OCwgCisgICAgNjA1NjIsIDYwNTY2LCA2MDU3MCwgNjA1NzQsIDYwNTc4LCA2MDU4MiwgNjA1ODYsIDYwNTkwLCA2MDU5NCwgNjA1OTgsIAorICAgIDYwNjAyLCA2MDYwNiwgNjA2MTAsIDYwNjE0LCA2MDYxOCwgNjA2MjIsIDYwNjI2LCA2MDYzMCwgNjA2MzQsIDYwNjM4LCAKKyAgICA2MDY0MiwgNjA2NDYsIDYwNjUwLCA2MDY1NCwgNjA2NTgsIDYwNjYyLCA2MDY2NiwgNjA2NzAsIDYwNjc0LCA2MDY3OCwgCisgICAgNjA2ODEsIDYwNjg1LCA2MDY4OCwgNjA2OTIsIDYwNjk2LCA2MDY5OSwgNjA3MDMsIDYwNzA3LCA2MDcxMCwgNjA3MTQsIAorICAgIDYwNzE4LCA2MDcyMiwgNjA3MjYsIDYwNzI5LCA2MDczMywgNjA3MzcsIDYwNzQxLCA2MDc0NSwgNjA3NDksIDYwNzUzLCAKKyAgICA2MDc1NiwgNjA3NTksIDYwNzYzLCA2MDc2NywgNjA3NzEsIDYwNzc1LCA2MDc3OSwgNjA3ODMsIDYwNzg3LCA2MDc5MSwgCisgICAgNjA3OTUsIDYwNzk5LCA2MDgwMywgNjA4MDcsIDYwODExLCA2MDgxNSwgNjA4MTksIDYwODIzLCA2MDgyNywgNjA4MzEsIAorICAgIDYwODM1LCA2MDgzOSwgNjA4NDMsIDYwODQ3LCA2MDg1MSwgNjA4NTUsIDYwODU5LCA2MDg2MywgNjA4NjcsIDYwODcxLCAKKyAgICA2MDg3NSwgNjA4NzksIDYwODgzLCA2MDg4NywgNjA4OTEsIDYwODk1LCA2MDg5OSwgNjA5MDMsIDYwOTA3LCA2MDkxMSwgCisgICAgNjA5MTUsIDYwOTE5LCA2MDkyMywgMCwgNjA5MjcsIDYwOTMzLCA2MDkzOSwgNjA5NDQsIDYwOTQ5LCA2MDk1NCwgNjA5NjAsIAorICAgIDYwOTY2LCA2MDk3MiwgNjA5NzgsIDYwOTg0LCA2MDk5MCwgNjA5OTYsIDYxMDAyLCA2MTAwOCwgNjEwMTQsIDYxMDIwLCAKKyAgICA2MTAyNSwgNjEwMzAsIDYxMDM1LCA2MTA0MCwgNjEwNDUsIDYxMDUwLCA2MTA1NSwgNjEwNjAsIDYxMDY1LCA2MTA3MCwgCisgICAgNjEwNzUsIDYxMDgwLCA2MTA4NSwgNjEwOTAsIDYxMDk1LCA2MTEwMCwgNjExMDUsIDYxMTEwLCA2MTExNSwgNjExMjAsIAorICAgIDYxMTI2LCA2MTEzMiwgNjExMzgsIDYxMTQ0LCA2MTE0OSwgNjExNTQsIDAsIDAsIDAsIDAsIDAsIDYxMTU5LCA2MTE2NCwgCisgICAgNjExNjksIDYxMTc0LCA2MTE3OSwgNjExODQsIDYxMTg5LCA2MTE5NCwgNjExOTksIDYxMjA0LCA2MTIwOSwgNjEyMTQsIAorICAgIDYxMjE5LCA2MTIyNCwgNjEyMjksIDYxMjM0LCA2MTIzOSwgNjEyNDQsIDYxMjQ5LCA2MTI1NCwgNjEyNTksIDYxMjY0LCAKKyAgICA2MTI2OSwgNjEyNzQsIDYxMjc5LCA2MTI4NCwgNjEyODksIDYxMjk0LCA2MTI5OSwgNjEzMDQsIDYxMzA5LCA2MTMxNCwgCisgICAgNjEzMTksIDYxMzI0LCA2MTMyOSwgNjEzMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxMzM5LCAKKyAgICA2MTM0NCwgNjEzNDksIDYxMzU0LCA2MTM1OCwgNjEzNjMsIDYxMzY3LCA2MTM3MiwgNjEzNzcsIDYxMzgyLCA2MTM4NywgCisgICAgNjEzOTIsIDYxMzk2LCA2MTQwMSwgNjE0MDYsIDYxNDExLCA2MTQxNiwgNjE0MjAsIDYxNDI0LCA2MTQyOCwgNjE0MzIsIAorICAgIDYxNDM2LCA2MTQ0MCwgNjE0NDQsIDYxNDQ4LCA2MTQ1MiwgNjE0NTYsIDYxNDYwLCA2MTQ2NCwgNjE0NjgsIDYxNDcyLCAKKyAgICA2MTQ3NywgNjE0ODIsIDYxNDg3LCA2MTQ5MiwgNjE0OTcsIDYxNTAyLCA2MTUwNywgNjE1MTIsIDYxNTE3LCA2MTUyMiwgCisgICAgNjE1MjcsIDYxNTMyLCA2MTUzNywgNjE1NDIsIDYxNTQ3LCA2MTU1MywgMCwgNjE1NjAsIDYxNTYzLCA2MTU2NiwgNjE1NjksIAorICAgIDYxNTcyLCA2MTU3NSwgNjE1NzgsIDYxNTgxLCA2MTU4NCwgNjE1ODcsIDYxNTkxLCA2MTU5NSwgNjE1OTksIDYxNjAzLCAKKyAgICA2MTYwNywgNjE2MTEsIDYxNjE1LCA2MTYxOSwgNjE2MjMsIDYxNjI3LCA2MTYzMSwgNjE2MzUsIDYxNjM5LCA2MTY0MywgCisgICAgNjE2NDcsIDYxNjUxLCA2MTY1NSwgNjE2NTksIDYxNjYzLCA2MTY2NywgNjE2NzEsIDYxNjc1LCA2MTY3OSwgNjE2ODMsIAorICAgIDYxNjg3LCA2MTY5MSwgNjE2OTUsIDYxNjk5LCA2MTcwMywgNjE3MDcsIDYxNzExLCA2MTcyMCwgNjE3MjksIDYxNzM4LCAKKyAgICA2MTc0NywgNjE3NTYsIDYxNzY1LCA2MTc3NCwgNjE3ODMsIDYxNzg2LCA2MTc5MSwgNjE3OTYsIDYxODAxLCA2MTgwNiwgCisgICAgNjE4MTEsIDYxODE2LCA2MTgyMSwgNjE4MjYsIDYxODMxLCA2MTgzNSwgNjE4NDAsIDYxODQ1LCA2MTg1MCwgNjE4NTUsIAorICAgIDYxODYwLCA2MTg2NCwgNjE4NjgsIDYxODcyLCA2MTg3NiwgNjE4ODAsIDYxODg0LCA2MTg4OCwgNjE4OTIsIDYxODk2LCAKKyAgICA2MTkwMCwgNjE5MDQsIDYxOTA4LCA2MTkxMiwgNjE5MTYsIDYxOTIxLCA2MTkyNiwgNjE5MzEsIDYxOTM2LCA2MTk0MSwgCisgICAgNjE5NDYsIDYxOTUxLCA2MTk1NiwgNjE5NjEsIDYxOTY2LCA2MTk3MSwgNjE5NzYsIDYxOTgxLCA2MTk4NiwgNjE5OTIsIAorICAgIDYxOTk4LCA2MjAwMywgNjIwMDgsIDYyMDExLCA2MjAxNCwgNjIwMTcsIDYyMDIwLCA2MjAyMywgNjIwMjYsIDYyMDI5LCAKKyAgICA2MjAzMiwgNjIwMzUsIDYyMDM5LCA2MjA0MywgNjIwNDcsIDYyMDUxLCA2MjA1NSwgNjIwNTksIDYyMDYzLCA2MjA2NywgCisgICAgNjIwNzEsIDYyMDc1LCA2MjA3OSwgNjIwODMsIDYyMDg3LCA2MjA5MSwgNjIwOTUsIDYyMDk5LCA2MjEwMywgNjIxMDcsIAorICAgIDYyMTExLCA2MjExNSwgNjIxMTksIDYyMTIzLCA2MjEyNywgNjIxMzEsIDYyMTM1LCA2MjEzOSwgNjIxNDMsIDYyMTQ3LCAKKyAgICA2MjE1MSwgNjIxNTUsIDYyMTU5LCA2MjE2MywgNjIxNjcsIDYyMTcxLCA2MjE3NSwgNjIxNzksIDYyMTgzLCA2MjE4NywgCisgICAgNjIxOTEsIDYyMTk1LCA2MjIwMCwgNjIyMDUsIDYyMjEwLCA2MjIxNSwgNjIyMTksIDYyMjI0LCA2MjIyOSwgNjIyMzQsIAorICAgIDYyMjM5LCA2MjI0NCwgNjIyNDksIDYyMjU0LCA2MjI1OSwgNjIyNjQsIDYyMjY4LCA2MjI3NSwgNjIyODIsIDYyMjg5LCAKKyAgICA2MjI5NiwgNjIzMDMsIDYyMzEwLCA2MjMxNywgNjIzMjQsIDYyMzMxLCA2MjMzOCwgNjIzNDUsIDYyMzUyLCA2MjM1NSwgCisgICAgNjIzNTgsIDYyMzYxLCA2MjM2NiwgNjIzNjksIDYyMzcyLCA2MjM3NSwgNjIzNzgsIDYyMzgxLCA2MjM4NCwgNjIzODgsIAorICAgIDYyMzkyLCA2MjM5NiwgNjI0MDAsIDYyNDAzLCA2MjQwNywgNjI0MTEsIDYyNDE1LCA2MjQxOSwgNjI0MjMsIDYyNDI3LCAKKyAgICA2MjQzMSwgNjI0MzUsIDYyNDM4LCA2MjQ0MSwgNjI0NDUsIDYyNDQ5LCA2MjQ1MywgNjI0NTcsIDYyNDYwLCA2MjQ2NCwgCisgICAgNjI0NjgsIDYyNDcyLCA2MjQ3NiwgNjI0NzksIDYyNDgzLCA2MjQ4NywgNjI0OTEsIDYyNDk1LCA2MjQ5OCwgNjI1MDIsIAorICAgIDYyNTA2LCA2MjUwOSwgNjI1MTMsIDYyNTE3LCA2MjUyMSwgNjI1MjUsIDYyNTI5LCA2MjUzMywgNjI1MzcsIDAsIDYyNTQxLCAKKyAgICA2MjU0NCwgNjI1NDcsIDYyNTUwLCA2MjU1MywgNjI1NTYsIDYyNTU5LCA2MjU2MiwgNjI1NjUsIDYyNTY4LCA2MjU3MSwgCisgICAgNjI1NzQsIDYyNTc3LCA2MjU4MCwgNjI1ODMsIDYyNTg2LCA2MjU4OSwgNjI1OTIsIDYyNTk1LCA2MjU5OCwgNjI2MDEsIAorICAgIDYyNjA0LCA2MjYwNywgNjI2MTAsIDYyNjEzLCA2MjYxNiwgNjI2MTksIDYyNjIyLCA2MjYyNSwgNjI2MjgsIDYyNjMxLCAKKyAgICA2MjYzNCwgNjI2MzcsIDYyNjQwLCA2MjY0MywgNjI2NDYsIDYyNjQ5LCA2MjY1MiwgNjI2NTUsIDYyNjU4LCA2MjY2MSwgCisgICAgNjI2NjQsIDYyNjY3LCA2MjY3MCwgNjI2NzMsIDYyNjc2LCA2MjY3OSwgNjI2ODIsIDYyNjg1LCA2MjY4OCwgNjI2OTEsIAorICAgIDYyNjk0LCA2MjY5NywgNjI3MDAsIDYyNzAzLCA2MjcwNiwgNjI3MDksIDYyNzEyLCA2MjcxNSwgNjI3MTgsIDYyNzIxLCAKKyAgICA2MjcyNCwgNjI3MjcsIDYyNzMwLCA2MjczMywgNjI3MzYsIDYyNzM5LCA2Mjc0MiwgNjI3NDUsIDYyNzQ4LCA2Mjc1MSwgCisgICAgNjI3NTQsIDYyNzU3LCA2Mjc2MCwgNjI3NjMsIDYyNzY2LCA2Mjc2OSwgNjI3NzIsIDYyNzc1LCA2Mjc3OCwgNjI3ODEsIAorICAgIDYyNzg0LCA2Mjc4NywgNjI3OTAsIDYyNzkzLCA2Mjc5NiwgNjI3OTksIDYyODAyLCA2MjgwNSwgNjI4MTQsIDYyODIyLCAKKyAgICA2MjgzMCwgNjI4MzgsIDYyODQ2LCA2Mjg1NCwgNjI4NjIsIDYyODcwLCA2Mjg3OCwgNjI4ODYsIDYyODk1LCA2MjkwNCwgCisgICAgNjI5MTMsIDYyOTIyLCA2MjkzMSwgNjI5NDAsIDYyOTQ5LCA2Mjk1OCwgNjI5NjcsIDYyOTc2LCA2Mjk4NSwgNjI5OTQsIAorICAgIDYzMDAzLCA2MzAxMiwgNjMwMjEsIDYzMDI0LCA2MzAyNywgNjMwMzAsIDYzMDMyLCA2MzAzNSwgNjMwMzgsIDYzMDQxLCAKKyAgICA2MzA0NiwgNjMwNTEsIDYzMDU0LCA2MzA2MSwgNjMwNjgsIDYzMDc1LCA2MzA4MiwgNjMwODUsIDYzMDkwLCA2MzA5MiwgCisgICAgNjMwOTYsIDYzMDk4LCA2MzEwMCwgNjMxMDMsIDYzMTA2LCA2MzEwOSwgNjMxMTIsIDYzMTE1LCA2MzExOCwgNjMxMjEsIAorICAgIDYzMTI2LCA2MzEzMSwgNjMxMzQsIDYzMTM3LCA2MzE0MCwgNjMxNDMsIDYzMTQ2LCA2MzE0OSwgNjMxNTIsIDYzMTU2LCAKKyAgICA2MzE1OSwgNjMxNjIsIDYzMTY1LCA2MzE2OCwgNjMxNzEsIDYzMTc1LCA2MzE3OCwgNjMxODEsIDYzMTg0LCA2MzE4OSwgCisgICAgNjMxOTQsIDYzMTk5LCA2MzIwNCwgNjMyMDksIDYzMjE0LCA2MzIxOSwgNjMyMjQsIDYzMjMwLCA2MzIzOCwgNjMyNDAsIAorICAgIDYzMjQzLCA2MzI0NiwgNjMyNDksIDYzMjUyLCA2MzI1OCwgNjMyNjYsIDYzMjY5LCA2MzI3MiwgNjMyNzcsIDYzMjgwLCAKKyAgICA2MzI4MywgNjMyODYsIDYzMjkxLCA2MzI5NCwgNjMyOTcsIDYzMzAyLCA2MzMwNSwgNjMzMDgsIDYzMzEzLCA2MzMxNiwgCisgICAgNjMzMTksIDYzMzI0LCA2MzMyOSwgNjMzMzQsIDYzMzM3LCA2MzM0MCwgNjMzNDMsIDYzMzQ2LCA2MzM1MiwgNjMzNTUsIAorICAgIDYzMzU4LCA2MzM2MSwgNjMzNjMsIDYzMzY2LCA2MzM2OSwgNjMzNzIsIDYzMzc3LCA2MzM4MCwgNjMzODMsIDYzMzg2LCAKKyAgICA2MzM4OSwgNjMzOTIsIDYzMzk3LCA2MzQwMCwgNjM0MDMsIDYzNDA2LCA2MzQwOSwgNjM0MTIsIDYzNDE1LCA2MzQxOCwgCisgICAgNjM0MjEsIDYzNDI0LCA2MzQyOSwgNjM0MzMsIDYzNDQxLCA2MzQ0OSwgNjM0NTcsIDYzNDY1LCA2MzQ3MywgNjM0ODEsIAorICAgIDYzNDg5LCA2MzQ5NywgNjM1MDUsIDYzNTE0LCA2MzUyMywgNjM1MzIsIDYzNTQxLCA2MzU1MCwgNjM1NTksIDYzNTY4LCAKKyAgICA2MzU3NywgNjM1ODYsIDYzNTk1LCA2MzYwNCwgNjM2MTMsIDYzNjIyLCA2MzYzMSwgNjM2NDAsIDYzNjQ5LCA2MzY1OCwgCisgICAgNjM2NjcsIDYzNjc2LCA2MzY4NSwgNjM2OTQsIDYzNzAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzY3OCwgNjM2ODcsIDYzNjk2LCA2MzcwNywgCi0gICAgNjM3MTQsIDYzNzE5LCA2MzcyNCwgNjM3MzEsIDYzNzM4LCA2Mzc0NCwgNjM3NDksIDYzNzU0LCA2Mzc1OSwgNjM3NjQsIAotICAgIDYzNzcxLCA2Mzc3NiwgNjM3ODEsIDYzNzg2LCA2Mzc5NywgNjM4MDIsIDYzODA3LCA2MzgxNCwgNjM4MTksIDYzODI2LCAKLSAgICA2MzgzMSwgNjM4MzYsIDYzODQzLCA2Mzg1MCwgNjM4NTcsIDYzODY2LCA2Mzg3NSwgNjM4ODAsIDYzODg1LCA2Mzg5MCwgCi0gICAgNjM4OTcsIDYzOTAyLCA2MzkxMiwgNjM5MTksIDYzOTI0LCA2MzkyOSwgNjM5MzQsIDYzOTM5LCA2Mzk0NCwgNjM5NDksIAotICAgIDYzOTU4LCA2Mzk2NSwgNjM5NzIsIDYzOTc3LCA2Mzk4NCwgNjM5ODksIDYzOTk2LCA2NDAwNSwgNjQwMTYsIDY0MDIxLCAKLSAgICA2NDAzMCwgNjQwMzUsIDY0MDQyLCA2NDA1MSwgNjQwNjAsIDY0MDY1LCA2NDA3MCwgNjQwNzcsIDY0MDgzLCA2NDA5MCwgCi0gICAgNjQwOTcsIDY0MTAxLCA2NDEwNSwgNjQxMDgsIDY0MTEyLCA2NDExNiwgNjQxMjAsIDY0MTI0LCA2NDEyOCwgNjQxMzIsIAotICAgIDY0MTM2LCA2NDEzOSwgNjQxNDMsIDY0MTQ3LCA2NDE1MSwgNjQxNTUsIDY0MTU5LCA2NDE2MywgNjQxNjYsIDY0MTcwLCAKLSAgICA2NDE3NCwgNjQxNzcsIDY0MTgxLCA2NDE4NSwgNjQxODksIDY0MTkzLCA2NDE5NywgNjQyMDEsIDY0MjA1LCA2NDIwOSwgCi0gICAgNjQyMTMsIDY0MjE3LCA2NDIyMSwgNjQyMjUsIDY0MjI5LCA2NDIzMywgNjQyMzcsIDY0MjQxLCA2NDI0NSwgNjQyNDksIAotICAgIDY0MjUzLCA2NDI1NywgNjQyNjEsIDY0MjY1LCA2NDI2OSwgNjQyNzMsIDY0Mjc3LCA2NDI4MSwgNjQyODUsIDY0Mjg5LCAKLSAgICA2NDI5MywgNjQyOTcsIDY0MzAxLCA2NDMwNSwgNjQzMDksIDY0MzEzLCA2NDMxNywgNjQzMjEsIDY0MzI1LCA2NDMyOSwgCi0gICAgNjQzMzMsIDY0MzM3LCA2NDM0MSwgNjQzNDUsIDY0MzQ5LCA2NDM1MywgNjQzNTYsIDY0MzYwLCA2NDM2NCwgNjQzNjgsIAotICAgIDY0MzcyLCA2NDM3NiwgNjQzODAsIDY0Mzg0LCA2NDM4OCwgNjQzOTIsIDY0Mzk2LCA2NDQwMCwgNjQ0MDQsIDY0NDA4LCAKLSAgICA2NDQxMiwgNjQ0MTYsIDY0NDIwLCA2NDQyNCwgNjQ0MjgsIDY0NDMyLCA2NDQzNiwgNjQ0NDAsIDY0NDQ0LCA2NDQ0OCwgCi0gICAgNjQ0NTIsIDY0NDU2LCA2NDQ2MCwgNjQ0NjQsIDY0NDY4LCA2NDQ3MiwgNjQ0NzYsIDY0NDgwLCA2NDQ4NCwgNjQ0ODgsIAotICAgIDY0NDkyLCA2NDQ5NiwgNjQ1MDAsIDY0NTA0LCA2NDUwOCwgNjQ1MTIsIDY0NTE2LCA2NDUyMCwgNjQ1MjQsIDY0NTI4LCAKLSAgICA2NDUzMiwgNjQ1MzYsIDY0NTQwLCA2NDU0NCwgNjQ1NDgsIDY0NTUyLCA2NDU1NiwgNjQ1NjAsIDY0NTY0LCA2NDU2OCwgCi0gICAgNjQ1NzIsIDY0NTc2LCA2NDU4MCwgNjQ1ODQsIDY0NTg4LCA2NDU5MiwgNjQ1OTYsIDY0NjAwLCA2NDYwNCwgNjQ2MDgsIAotICAgIDY0NjEyLCA2NDYxNiwgNjQ2MjAsIDY0NjI0LCA2NDYyOCwgNjQ2MzIsIDY0NjM2LCA2NDY0MCwgNjQ2NDQsIDY0NjQ4LCAKLSAgICA2NDY1MiwgNjQ2NTYsIDY0NjYwLCA2NDY2NCwgNjQ2NjgsIDY0NjcyLCA2NDY3NiwgNjQ2ODAsIDY0Njg0LCA2NDY4OCwgCi0gICAgNjQ2OTIsIDY0Njk2LCA2NDcwMCwgNjQ3MDQsIDY0NzA4LCA2NDcxMiwgNjQ3MTYsIDY0NzIwLCA2NDcyNCwgNjQ3MjgsIAotICAgIDY0NzMyLCA2NDczNiwgNjQ3NDAsIDY0NzQ0LCA2NDc0OCwgNjQ3NTIsIDY0NzU2LCA2NDc2MCwgNjQ3NjQsIDY0NzY4LCAKLSAgICA2NDc3MiwgNjQ3NzYsIDY0NzgwLCA2NDc4NCwgNjQ3ODgsIDY0NzkyLCA2NDc5NiwgNjQ4MDAsIDY0ODA0LCA2NDgwOCwgCi0gICAgNjQ4MTIsIDY0ODE2LCA2NDgyMCwgNjQ4MjQsIDY0ODI3LCA2NDgzMSwgNjQ4MzUsIDY0ODM5LCA2NDg0MywgNjQ4NDcsIAotICAgIDY0ODUxLCA2NDg1NSwgNjQ4NTksIDY0ODYzLCA2NDg2NywgNjQ4NzEsIDY0ODc1LCA2NDg3OSwgNjQ4ODMsIDY0ODg3LCAKLSAgICA2NDg5MSwgNjQ4OTUsIDY0ODk5LCA2NDkwMywgNjQ5MDcsIDY0OTExLCA2NDkxNSwgNjQ5MTksIDY0OTIzLCA2NDkyNywgCi0gICAgNjQ5MzEsIDY0OTM1LCA2NDkzOSwgNjQ5NDMsIDY0OTQ3LCA2NDk1MSwgNjQ5NTUsIDY0OTU5LCA2NDk2MywgNjQ5NjcsIAotICAgIDY0OTcxLCA2NDk3NSwgNjQ5NzksIDY0OTgzLCA2NDk4NywgNjQ5OTEsIDY0OTk1LCA2NDk5OSwgNjUwMDMsIDY1MDA3LCAKLSAgICA2NTAxMSwgNjUwMTUsIDY1MDE5LCA2NTAyMywgNjUwMjcsIDY1MDMxLCA2NTAzNSwgNjUwMzksIDY1MDQzLCA2NTA0NywgCi0gICAgNjUwNTEsIDY1MDU1LCA2NTA1OSwgNjUwNjMsIDY1MDY3LCA2NTA3MSwgNjUwNzUsIDY1MDc5LCA2NTA4MywgNjUwODcsIAotICAgIDY1MDkxLCA2NTA5NSwgNjUwOTksIDY1MTAzLCA2NTEwNywgNjUxMTEsIDY1MTE1LCA2NTExOSwgNjUxMjMsIDY1MTI3LCAKLSAgICA2NTEzMSwgNjUxMzUsIDY1MTM5LCA2NTE0MywgNjUxNDcsIDY1MTUxLCA2NTE1NSwgNjUxNTksIDY1MTYzLCA2NTE2NywgCi0gICAgNjUxNzEsIDY1MTc1LCA2NTE3OSwgNjUxODMsIDY1MTg3LCA2NTE5MSwgNjUxOTUsIDY1MTk5LCA2NTIwMywgNjUyMDcsIAotICAgIDY1MjExLCA2NTIxNSwgNjUyMTksIDY1MjIzLCA2NTIyNywgNjUyMzEsIDY1MjM1LCA2NTIzOSwgNjUyNDMsIDY1MjQ3LCAKLSAgICA2NTI1MSwgNjUyNTUsIDY1MjU5LCA2NTI2MywgNjUyNjcsIDY1MjcxLCA2NTI3NSwgNjUyNzksIDY1MjgzLCA2NTI4NywgCi0gICAgNjUyOTAsIDY1Mjk0LCA2NTI5OCwgNjUzMDIsIDY1MzA2LCA2NTMxMCwgNjUzMTQsIDY1MzE4LCA2NTMyMiwgNjUzMjYsIAotICAgIDY1MzMwLCA2NTMzNCwgNjUzMzgsIDY1MzQyLCA2NTM0NiwgNjUzNTAsIDY1MzU0LCA2NTM1OCwgNjUzNjIsIDY1MzY2LCAKLSAgICA2NTM3MCwgNjUzNzQsIDY1Mzc4LCA2NTM4MiwgNjUzODYsIDY1MzkwLCA2NTM5NCwgNjUzOTgsIDY1NDAyLCA2NTQwNiwgCi0gICAgNjU0MTAsIDY1NDE0LCA2NTQxOCwgNjU0MjIsIDY1NDI2LCA2NTQzMCwgNjU0MzQsIDY1NDM4LCA2NTQ0MiwgNjU0NDYsIAotICAgIDY1NDUwLCA2NTQ1NCwgNjU0NTgsIDY1NDYyLCA2NTQ2NiwgNjU0NzAsIDY1NDc0LCA2NTQ3OCwgNjU0ODIsIDY1NDg2LCAKLSAgICA2NTQ5MCwgNjU0OTQsIDY1NDk4LCA2NTUwMiwgNjU1MDYsIDY1NTEwLCA2NTUxNCwgNjU1MTgsIDY1NTIyLCA2NTUyNiwgCi0gICAgNjU1MzAsIDY1NTM0LCA2NTUzOCwgNjU1NDIsIDY1NTQ2LCA2NTU1MCwgNjU1NTQsIDY1NTU4LCA2NTU2MiwgNjU1NjYsIAotICAgIDY1NTcwLCA2NTU3NCwgNjU1NzgsIDY1NTgyLCA2NTU4NiwgNjU1OTAsIDY1NTk0LCA2NTU5OCwgNjU2MDIsIDY1NjA2LCAKLSAgICA2NTYxMCwgNjU2MTQsIDY1NjE4LCA2NTYyMiwgNjU2MjYsIDY1NjMwLCA2NTYzNCwgNjU2MzgsIDY1NjQyLCA2NTY0NiwgCi0gICAgNjU2NDksIDY1NjUzLCA2NTY1NywgNjU2NjEsIDY1NjY1LCA2NTY2OSwgNjU2NzMsIDY1Njc3LCA2NTY4MSwgNjU2ODUsIAotICAgIDY1Njg5LCA2NTY5MywgNjU2OTcsIDY1NzAxLCA2NTcwNSwgNjU3MDksIDY1NzEzLCA2NTcxNywgNjU3MjEsIDY1NzI1LCAKLSAgICA2NTcyOSwgNjU3MzMsIDY1NzM3LCA2NTc0MSwgNjU3NDUsIDY1NzQ5LCA2NTc1MywgNjU3NTcsIDY1NzYxLCA2NTc2NSwgCi0gICAgNjU3NjksIDY1NzczLCA2NTc3NywgNjU3ODEsIDY1Nzg1LCA2NTc4OSwgNjU3OTMsIDY1Nzk3LCA2NTgwMSwgNjU4MDUsIAotICAgIDY1ODA5LCA2NTgxMywgNjU4MTcsIDY1ODIxLCA2NTgyNSwgNjU4MjksIDY1ODMzLCA2NTgzNywgNjU4NDEsIDY1ODQ1LCAKLSAgICA2NTg0OSwgNjU4NTMsIDY1ODU3LCA2NTg2MSwgNjU4NjUsIDY1ODY5LCA2NTg3MywgNjU4NzcsIDY1ODgxLCA2NTg4NSwgCi0gICAgNjU4ODksIDY1ODkzLCA2NTg5NywgNjU5MDEsIDY1OTA1LCA2NTkwOSwgNjU5MTMsIDY1OTE3LCA2NTkyMSwgNjU5MjUsIAotICAgIDY1OTI5LCA2NTkzMywgNjU5MzcsIDY1OTQxLCA2NTk0NSwgNjU5NDksIDY1OTUzLCA2NTk1NywgNjU5NjEsIDY1OTY1LCAKLSAgICA2NTk2OSwgNjU5NzMsIDY1OTc3LCA2NTk4MSwgNjU5ODUsIDY1OTg5LCA2NTk5MywgNjU5OTcsIDY2MDAxLCA2NjAwNSwgCi0gICAgNjYwMDksIDY2MDEzLCA2NjAxNywgNjYwMjEsIDY2MDI1LCA2NjAyOSwgNjYwMzMsIDY2MDM3LCA2NjA0MSwgNjYwNDUsIAotICAgIDY2MDQ5LCA2NjA1MywgNjYwNTcsIDY2MDYxLCA2NjA2NSwgNjYwNjksIDY2MDczLCA2NjA3NywgNjYwODEsIDY2MDg1LCAKLSAgICA2NjA4OSwgNjYwOTMsIDY2MDk3LCA2NjEwMSwgNjYxMDUsIDY2MTA5LCA2NjExMywgNjYxMTcsIDY2MTIxLCA2NjEyNSwgCi0gICAgNjYxMjksIDY2MTMzLCA2NjEzNywgNjYxNDEsIDY2MTQ0LCA2NjE0OCwgNjYxNTIsIDY2MTU2LCA2NjE2MCwgNjYxNjQsIAotICAgIDY2MTY4LCA2NjE3MiwgNjYxNzYsIDY2MTgwLCA2NjE4NCwgNjYxODgsIDY2MTkyLCA2NjE5NiwgNjYyMDAsIDY2MjA0LCAKLSAgICA2NjIwOCwgNjYyMTIsIDY2MjE2LCA2NjIyMCwgNjYyMjQsIDY2MjI4LCA2NjIzMiwgNjYyMzYsIDY2MjQwLCA2NjI0NCwgCi0gICAgNjYyNDgsIDY2MjUyLCA2NjI1NiwgNjYyNjAsIDY2MjY0LCA2NjI2OCwgNjYyNzIsIDY2Mjc2LCA2NjI4MCwgNjYyODQsIAotICAgIDY2Mjg4LCA2NjI5MiwgNjYyOTYsIDY2MzAwLCA2NjMwNCwgNjYzMDgsIDY2MzEyLCA2NjMxNiwgNjYzMjAsIDY2MzI0LCAKLSAgICA2NjMyOCwgNjYzMzIsIDY2MzM2LCA2NjM0MCwgNjYzNDQsIDY2MzQ4LCA2NjM1MiwgNjYzNTYsIDY2MzYwLCA2NjM2NCwgCi0gICAgNjYzNjgsIDY2MzcyLCA2NjM3NiwgNjYzODAsIDY2Mzg0LCA2NjM4OCwgNjYzOTIsIDY2Mzk2LCA2NjQwMCwgNjY0MDQsIAotICAgIDY2NDA4LCA2NjQxMiwgNjY0MTYsIDY2NDIwLCA2NjQyNCwgNjY0MjgsIDY2NDMyLCA2NjQzNiwgNjY0NDAsIDY2NDQ0LCAKLSAgICA2NjQ0OCwgNjY0NTIsIDY2NDU2LCA2NjQ2MCwgNjY0NjQsIDY2NDY4LCA2NjQ3MiwgNjY0NzYsIDY2NDgwLCA2NjQ4NCwgCi0gICAgNjY0ODgsIDY2NDkyLCA2NjQ5NiwgNjY1MDAsIDY2NTA0LCA2NjUwOCwgNjY1MTIsIDY2NTE2LCA2NjUyMCwgNjY1MjQsIAotICAgIDY2NTI4LCA2NjUzMiwgNjY1MzYsIDY2NTQwLCA2NjU0NCwgNjY1NDgsIDY2NTUyLCA2NjU1NiwgNjY1NjAsIDY2NTY0LCAKLSAgICA2NjU2OCwgNjY1NzIsIDY2NTc2LCA2NjU4MCwgNjY1ODQsIDY2NTg4LCA2NjU5MiwgNjY1OTYsIDY2NTk5LCA2NjYwMywgCi0gICAgNjY2MDcsIDY2NjExLCA2NjYxNSwgNjY2MTksIDY2NjIzLCA2NjYyNywgNjY2MzEsIDY2NjM1LCA2NjYzOSwgNjY2NDMsIAotICAgIDY2NjQ3LCA2NjY1MSwgNjY2NTUsIDY2NjU5LCA2NjY2MywgNjY2NjcsIDY2NjcxLCA2NjY3NSwgNjY2NzksIDY2NjgzLCAKLSAgICA2NjY4NywgNjY2OTEsIDY2Njk1LCA2NjY5OSwgNjY3MDMsIDY2NzA3LCA2NjcxMSwgNjY3MTUsIDY2NzE5LCA2NjcyMywgCi0gICAgNjY3MjcsIDY2NzMxLCA2NjczNSwgNjY3MzksIDY2NzQzLCA2Njc0NywgNjY3NTEsIDY2NzU1LCA2Njc1OSwgNjY3NjMsIAotICAgIDY2NzY3LCA2Njc3MSwgNjY3NzUsIDY2Nzc5LCA2Njc4MywgNjY3ODcsIDY2NzkxLCA2Njc5NSwgNjY3OTksIDY2ODAzLCAKLSAgICA2NjgwNywgNjY4MTEsIDY2ODE1LCA2NjgxOSwgNjY4MjMsIDY2ODI3LCA2NjgzMSwgNjY4MzUsIDY2ODM5LCA2Njg0MywgCi0gICAgNjY4NDcsIDY2ODUxLCA2Njg1NSwgNjY4NTksIDY2ODYzLCA2Njg2NywgNjY4NzEsIDY2ODc1LCA2Njg3OSwgNjY4ODMsIAotICAgIDY2ODg3LCA2Njg5MSwgNjY4OTUsIDY2ODk5LCA2NjkwMywgNjY5MDcsIDY2OTExLCA2NjkxNSwgNjY5MTksIDY2OTIzLCAKLSAgICA2NjkyNywgNjY5MzEsIDY2OTM1LCA2NjkzOSwgNjY5NDMsIDY2OTQ3LCA2Njk1MSwgNjY5NTUsIDY2OTU5LCA2Njk2MywgCi0gICAgNjY5NjcsIDY2OTcxLCA2Njk3NSwgNjY5NzksIDY2OTgzLCA2Njk4NywgNjY5OTEsIDY2OTk1LCA2Njk5OSwgNjcwMDMsIAotICAgIDY3MDA3LCA2NzAxMSwgNjcwMTUsIDY3MDE5LCA2NzAyMywgNjcwMjcsIDY3MDMxLCA2NzAzNSwgNjcwMzksIDY3MDQzLCAKLSAgICA2NzA0NywgNjcwNTEsIDY3MDU1LCA2NzA1OSwgNjcwNjMsIDY3MDY3LCA2NzA3MSwgNjcwNzUsIDY3MDc5LCA2NzA4MywgCi0gICAgNjcwODcsIDY3MDkxLCA2NzA5NSwgNjcwOTksIDY3MTAzLCA2NzEwNywgNjcxMTEsIDY3MTE1LCA2NzExOSwgNjcxMjMsIAotICAgIDY3MTI3LCA2NzEzMSwgNjcxMzUsIDY3MTM5LCA2NzE0MywgNjcxNDcsIDY3MTUxLCA2NzE1NSwgNjcxNTksIDY3MTYzLCAKLSAgICA2NzE2NywgNjcxNzEsIDY3MTc1LCA2NzE3OSwgNjcxODMsIDY3MTg3LCA2NzE5MSwgNjcxOTUsIDY3MTk5LCA2NzIwMiwgCi0gICAgNjcyMDYsIDY3MjEwLCA2NzIxNCwgNjcyMTgsIDY3MjIyLCA2NzIyNiwgNjcyMzAsIDY3MjMzLCA2NzIzNywgNjcyNDEsIAotICAgIDY3MjQ1LCA2NzI0OSwgNjcyNTMsIDY3MjU3LCA2NzI2MSwgNjcyNjUsIDY3MjY5LCA2NzI3MywgNjcyNzcsIDY3MjgxLCAKLSAgICA2NzI4NSwgNjcyODksIDY3MjkzLCA2NzI5NywgNjczMDEsIDY3MzA1LCA2NzMwOSwgNjczMTMsIDY3MzE3LCA2NzMyMSwgCi0gICAgNjczMjUsIDY3MzI5LCA2NzMzMywgNjczMzcsIDY3MzQxLCA2NzM0NSwgNjczNDksIDY3MzUzLCA2NzM1NywgNjczNjEsIAotICAgIDY3MzY1LCA2NzM2OSwgNjczNzMsIDY3Mzc3LCA2NzM4MSwgNjczODUsIDY3Mzg5LCA2NzM5MywgNjczOTcsIDY3NDAxLCAKLSAgICA2NzQwNSwgNjc0MDksIDY3NDEzLCA2NzQxNywgNjc0MjEsIDY3NDI1LCA2NzQyOSwgNjc0MzMsIDY3NDM3LCA2NzQ0MSwgCi0gICAgNjc0NDUsIDY3NDQ5LCA2NzQ1MywgNjc0NTcsIDY3NDYxLCA2NzQ2NSwgNjc0NjksIDY3NDczLCA2NzQ3NywgNjc0ODEsIAotICAgIDY3NDg1LCA2NzQ4OSwgNjc0OTMsIDY3NDk3LCA2NzUwMSwgNjc1MDUsIDY3NTA5LCA2NzUxMywgNjc1MTcsIDY3NTIxLCAKLSAgICA2NzUyNSwgNjc1MjksIDY3NTMzLCA2NzUzNywgNjc1NDEsIDY3NTQ1LCA2NzU0OSwgNjc1NTMsIDY3NTU3LCA2NzU2MSwgCi0gICAgNjc1NjUsIDY3NTY5LCA2NzU3MywgNjc1NzcsIDY3NTgxLCA2NzU4NSwgNjc1ODksIDY3NTkzLCA2NzU5NywgNjc2MDEsIAotICAgIDY3NjA1LCA2NzYwOSwgNjc2MTMsIDY3NjE3LCA2NzYyMSwgNjc2MjUsIDY3NjI5LCA2NzYzMywgNjc2MzcsIDY3NjQxLCAKLSAgICA2NzY0NSwgNjc2NDksIDY3NjUzLCA2NzY1NywgNjc2NjEsIDY3NjY1LCA2NzY2OSwgNjc2NzMsIDY3Njc3LCA2NzY4MSwgCi0gICAgNjc2ODUsIDY3Njg5LCA2NzY5MywgNjc2OTcsIDY3NzAxLCA2NzcwNSwgNjc3MDksIDY3NzEzLCA2NzcxNywgNjc3MjEsIAotICAgIDY3NzI1LCA2NzcyOSwgNjc3MzMsIDY3NzM3LCA2Nzc0MSwgNjc3NDUsIDY3NzQ5LCA2Nzc1MywgNjc3NTcsIDY3NzYxLCAKLSAgICA2Nzc2NSwgNjc3NjksIDY3NzczLCA2Nzc3NywgNjc3ODEsIDY3Nzg1LCA2Nzc4OSwgNjc3OTMsIDY3Nzk3LCA2NzgwMSwgCi0gICAgNjc4MDUsIDY3ODA5LCA2NzgxMywgNjc4MTcsIDY3ODIxLCA2NzgyNSwgNjc4MjksIDY3ODMzLCA2NzgzNywgNjc4NDEsIAotICAgIDY3ODQ1LCA2Nzg0OSwgNjc4NTMsIDY3ODU3LCA2Nzg2MSwgNjc4NjUsIDY3ODY5LCA2Nzg3MywgNjc4NzcsIDY3ODgxLCAKLSAgICA2Nzg4NSwgNjc4ODksIDY3ODkzLCA2Nzg5NywgNjc5MDEsIDY3OTA1LCA2NzkwOSwgNjc5MTMsIDY3OTE3LCA2NzkyMSwgCi0gICAgNjc5MjUsIDY3OTI5LCA2NzkzMywgNjc5MzcsIDY3OTQxLCA2Nzk0NSwgNjc5NDksIDY3OTUzLCA2Nzk1NywgNjc5NjAsIAotICAgIDY3OTY0LCA2Nzk2OCwgNjc5NzIsIDY3OTc2LCA2Nzk4MCwgNjc5ODQsIDY3OTg4LCA2Nzk5MiwgNjc5OTYsIDY4MDAwLCAKLSAgICA2ODAwNCwgNjgwMDgsIDY4MDEyLCA2ODAxNiwgNjgwMjAsIDY4MDI0LCA2ODAyOCwgNjgwMzIsIDY4MDM2LCA2ODA0MCwgCi0gICAgNjgwNDQsIDY4MDQ4LCA2ODA1MiwgNjgwNTYsIDY4MDYwLCA2ODA2NCwgNjgwNjgsIDY4MDcyLCA2ODA3NiwgNjgwODAsIAotICAgIDY4MDg0LCA2ODA4OCwgNjgwOTIsIDY4MDk2LCA2ODEwMCwgNjgxMDQsIDY4MTA4LCA2ODExMiwgNjgxMTYsIDY4MTIwLCAKLSAgICA2ODEyNCwgNjgxMjgsIDY4MTMyLCA2ODEzNiwgNjgxNDAsIDY4MTQ0LCA2ODE0OCwgNjgxNTIsIDY4MTU2LCA2ODE2MCwgCi0gICAgNjgxNjQsIDY4MTY4LCA2ODE3MiwgNjgxNzYsIDY4MTgwLCA2ODE4NCwgNjgxODgsIDY4MTkyLCA2ODE5NiwgNjgyMDAsIAotICAgIDY4MjA0LCA2ODIwOCwgNjgyMTIsIDY4MjE2LCA2ODIyMCwgNjgyMjQsIDY4MjI4LCA2ODIzMiwgNjgyMzYsIDY4MjQwLCAKLSAgICA2ODI0NCwgNjgyNDgsIDY4MjUyLCA2ODI1NiwgNjgyNjAsIDY4MjY0LCA2ODI2OCwgNjgyNzIsIDY4Mjc2LCA2ODI4MCwgCi0gICAgNjgyODQsIDY4Mjg4LCA2ODI5MiwgNjgyOTYsIDY4MzAwLCA2ODMwNCwgNjgzMDgsIDY4MzEyLCA2ODMxNiwgNjgzMjAsIAotICAgIDY4MzI0LCA2ODMyOCwgNjgzMzIsIDY4MzM2LCA2ODM0MCwgNjgzNDQsIDY4MzQ4LCA2ODM1MiwgNjgzNTYsIDY4MzYwLCAKLSAgICA2ODM2NCwgNjgzNjgsIDY4MzcyLCA2ODM3NiwgNjgzODAsIDY4Mzg0LCA2ODM4OCwgNjgzOTIsIDY4Mzk2LCA2ODQwMCwgCi0gICAgNjg0MDQsIDY4NDA4LCA2ODQxMiwgNjg0MTYsIDY4NDIwLCA2ODQyNCwgNjg0MjgsIDY4NDMyLCA2ODQzNiwgNjg0NDAsIAotICAgIDY4NDQ0LCA2ODQ0OCwgNjg0NTIsIDY4NDU2LCA2ODQ2MCwgNjg0NjQsIDY4NDY4LCA2ODQ3MiwgNjg0NzYsIDY4NDgwLCAKLSAgICA2ODQ4NCwgNjg0ODgsIDY4NDkyLCA2ODQ5NiwgNjg1MDAsIDY4NTA0LCA2ODUwOCwgNjg1MTIsIDY4NTE2LCA2ODUyMCwgCi0gICAgNjg1MjQsIDY4NTI4LCA2ODUzMiwgNjg1MzYsIDY4NTQwLCA2ODU0NCwgNjg1NDgsIDY4NTUyLCA2ODU1NiwgNjg1NjAsIAotICAgIDY4NTY0LCA2ODU2OCwgNjg1NzIsIDY4NTc2LCA2ODU4MCwgNjg1ODQsIDY4NTg4LCA2ODU5MiwgNjg1OTYsIDY4NjAwLCAKLSAgICA2ODYwNCwgNjg2MDgsIDY4NjEyLCA2ODYxNiwgNjg2MjAsIDY4NjI0LCA2ODYyOCwgNjg2MzIsIDY4NjM2LCA2ODY0MCwgCi0gICAgNjg2NDQsIDY4NjQ4LCA2ODY1MiwgNjg2NTYsIDY4NjYwLCA2ODY2NCwgNjg2NjgsIDY4NjcyLCA2ODY3NiwgNjg2ODAsIAotICAgIDY4Njg0LCA2ODY4OCwgNjg2OTIsIDY4Njk2LCA2ODcwMCwgNjg3MDQsIDY4NzA4LCA2ODcxMiwgNjg3MTYsIDY4NzIwLCAKLSAgICA2ODcyNCwgNjg3MjgsIDY4NzMyLCA2ODczNiwgNjg3NDAsIDAsIDAsIDAsIDY4NzQ0LCA2ODc0OCwgNjg3NTIsIDY4NzU2LCAKLSAgICA2ODc2MCwgNjg3NjQsIDY4NzY4LCA2ODc3MiwgNjg3NzYsIDY4NzgwLCA2ODc4NCwgNjg3ODgsIDY4NzkyLCA2ODc5NiwgCi0gICAgNjg4MDAsIDY4ODA0LCA2ODgwOCwgNjg4MTIsIDY4ODE2LCA2ODgyMCwgNjg4MjQsIDY4ODI4LCA2ODgzMiwgNjg4MzYsIAotICAgIDY4ODQwLCA2ODg0NCwgNjg4NDgsIDY4ODUyLCA2ODg1NiwgNjg4NjAsIDY4ODY0LCA2ODg2OCwgNjg4NzIsIDY4ODc2LCAKLSAgICA2ODg4MCwgNjg4ODQsIDY4ODg4LCA2ODg5MiwgNjg4OTYsIDY4OTAwLCA2ODkwNCwgNjg5MDgsIDY4OTEyLCA2ODkxNiwgCi0gICAgNjg5MjAsIDY4OTI0LCA2ODkyOCwgNjg5MzIsIDY4OTM2LCA2ODk0MCwgNjg5NDQsIDY4OTQ4LCA2ODk1MiwgNjg5NTYsIAotICAgIDY4OTYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODk2NCwgNjg5NjksIDY4OTczLCA2ODk3OCwgNjg5ODMsIAotICAgIDY4OTg4LCA2ODk5MywgNjg5OTgsIDY5MDAyLCA2OTAwNywgNjkwMTIsIDY5MDE3LCA2OTAyMiwgNjkwMjcsIDY5MDMyLCAKLSAgICA2OTAzNywgNjkwNDEsIDY5MDQ1LCA2OTA1MCwgNjkwNTQsIDY5MDU5LCA2OTA2NCwgNjkwNjksIDY5MDczLCA2OTA3OCwgCi0gICAgNjkwODMsIDY5MDg4LCA2OTA5MywgNjkwOTgsIDY5MTAyLCA2OTEwNywgNjkxMTEsIDY5MTE2LCA2OTEyMCwgNjkxMjUsIAotICAgIDY5MTI5LCA2OTEzMywgNjkxMzcsIDY5MTQyLCA2OTE0NywgNjkxNTIsIDY5MTYwLCA2OTE2OCwgNjkxNzYsIDY5MTg0LCAKLSAgICA2OTE5MSwgNjkxOTksIDY5MjA1LCA2OTIxMywgNjkyMTcsIDY5MjIxLCA2OTIyNSwgNjkyMjksIDY5MjMzLCA2OTIzNywgCi0gICAgNjkyNDEsIDY5MjQ1LCA2OTI0OSwgNjkyNTMsIDY5MjU3LCA2OTI2MSwgNjkyNjUsIDY5MjY5LCA2OTI3MywgNjkyNzcsIAotICAgIDY5MjgxLCA2OTI4NSwgNjkyODksIDY5MjkzLCA2OTI5NywgNjkzMDEsIDY5MzA1LCA2OTMwOSwgNjkzMTMsIDY5MzE3LCAKLSAgICA2OTMyMSwgNjkzMjUsIDY5MzI5LCA2OTMzMywgNjkzMzcsIDY5MzQxLCA2OTM0NSwgNjkzNDksIDY5MzUzLCA2OTM1NywgCi0gICAgNjkzNjAsIDY5MzY0LCA2OTM2OCwgNjkzNzIsIDY5Mzc2LCA2OTM4MCwgNjkzODQsIDY5Mzg4LCA2OTM5MiwgNjkzOTYsIAotICAgIDY5NDAwLCA2OTQwNCwgNjk0MDgsIDY5NDEyLCA2OTQxNiwgNjk0MjAsIDY5NDI0LCA2OTQyOCwgNjk0MzIsIDY5NDM2LCAKLSAgICA2OTQ0MCwgNjk0NDQsIDY5NDQ4LCA2OTQ1MiwgNjk0NTYsIDY5NDYwLCA2OTQ2NCwgNjk0NjgsIDY5NDcyLCA2OTQ3NiwgCi0gICAgNjk0ODAsIDY5NDg0LCA2OTQ4OCwgNjk0OTIsIDY5NDk2LCA2OTUwMCwgNjk1MDQsIDY5NTA3LCA2OTUxMSwgNjk1MTUsIAotICAgIDY5NTE4LCA2OTUyMiwgNjk1MjYsIDY5NTMwLCA2OTUzMywgNjk1MzcsIDY5NTQxLCA2OTU0NSwgNjk1NDksIDY5NTUzLCAKLSAgICA2OTU1NywgNjk1NjEsIDY5NTY1LCA2OTU2OSwgNjk1NzMsIDY5NTc3LCA2OTU4MSwgNjk1ODUsIDY5NTg5LCA2OTU5MiwgCi0gICAgNjk1OTYsIDY5NjAwLCA2OTYwMywgNjk2MDcsIDY5NjExLCA2OTYxNSwgNjk2MTksIDY5NjIzLCA2OTYyNywgNjk2MzAsIAotICAgIDY5NjMzLCA2OTYzNywgNjk2NDEsIDY5NjQ1LCA2OTY0OCwgNjk2NTEsIDY5NjU1LCA2OTY1OSwgNjk2NjMsIDY5NjY3LCAKLSAgICA2OTY3MSwgNjk2NzUsIDY5Njc5LCA2OTY4MywgNjk2ODcsIDY5NjkxLCA2OTY5NSwgNjk2OTksIDY5NzAzLCA2OTcwNywgCi0gICAgNjk3MTEsIDY5NzE1LCA2OTcxOSwgNjk3MjMsIDY5NzI3LCA2OTczMSwgNjk3MzUsIDY5NzM5LCA2OTc0MywgNjk3NDcsIAotICAgIDY5NzUxLCA2OTc1NSwgNjk3NTksIDY5NzYzLCA2OTc2NywgNjk3NzEsIDY5Nzc1LCA2OTc3OSwgNjk3ODMsIDY5Nzg3LCAKLSAgICA2OTc5MSwgNjk3OTUsIDY5Nzk5LCA2OTgwMiwgNjk4MDYsIDY5ODEwLCA2OTgxNCwgNjk4MTgsIDY5ODIyLCA2OTgyNiwgCi0gICAgNjk4MzAsIDY5ODM0LCA2OTgzOCwgNjk4NDIsIDY5ODQ2LCA2OTg1MCwgNjk4NTQsIDY5ODU4LCA2OTg2MiwgNjk4NjYsIAotICAgIDY5ODcwLCA2OTg3NCwgNjk4NzgsIDY5ODgyLCA2OTg4NiwgNjk4OTAsIDY5ODk0LCA2OTg5OCwgNjk5MDIsIDY5OTA2LCAKLSAgICA2OTkxMCwgNjk5MTQsIDY5OTE4LCA2OTkyMiwgNjk5MjYsIDY5OTMwLCA2OTkzNCwgNjk5MzgsIDY5OTQyLCA2OTk0NiwgCi0gICAgNjk5NDksIDY5OTUzLCA2OTk1NywgNjk5NjEsIDY5OTY1LCA2OTk2OSwgNjk5NzMsIDY5OTc3LCA2OTk4MSwgNjk5ODUsIAotICAgIDY5OTg5LCA2OTk5MywgNjk5OTcsIDcwMDAxLCA3MDAwNSwgNzAwMDksIDcwMDEzLCA3MDAxNiwgNzAwMjAsIDcwMDI0LCAKLSAgICA3MDAyOCwgNzAwMzIsIDcwMDM2LCA3MDA0MCwgNzAwNDQsIDcwMDQ4LCA3MDA1MiwgNzAwNTYsIDcwMDYwLCA3MDA2NCwgCi0gICAgNzAwNjgsIDcwMDcyLCA3MDA3NiwgNzAwODAsIDcwMDg0LCA3MDA4OCwgNzAwOTIsIDcwMDk2LCA3MDEwMCwgNzAxMDMsIAotICAgIDcwMTA3LCA3MDExMSwgNzAxMTUsIDcwMTE5LCA3MDEyMywgNzAxMjcsIDcwMTMxLCA3MDEzNSwgNzAxMzksIDcwMTQzLCAKLSAgICA3MDE0NywgNzAxNTEsIDcwMTU1LCA3MDE1OSwgNzAxNjMsIDcwMTY3LCA3MDE3MSwgNzAxNzUsIDcwMTc5LCA3MDE4MywgCi0gICAgNzAxODcsIDcwMTkxLCA3MDE5NSwgNzAxOTksIDcwMjAzLCA3MDIwNywgNzAyMTEsIDcwMjE1LCA3MDIxOSwgNzAyMjMsIAotICAgIDcwMjI3LCA3MDIzMSwgNzAyMzUsIDcwMjM5LCA3MDI0MywgNzAyNDcsIDcwMjUxLCA3MDI1NSwgNzAyNTksIDcwMjYzLCAKLSAgICA3MDI2NywgNzAyNzEsIDcwMjc1LCA3MDI3OCwgNzAyODMsIDcwMjg3LCA3MDI5MywgNzAyOTgsIDcwMzA0LCA3MDMwOCwgCi0gICAgNzAzMTIsIDcwMzE2LCA3MDMyMCwgNzAzMjQsIDcwMzI4LCA3MDMzMiwgNzAzMzYsIDcwMzQwLCA3MDM0NCwgNzAzNDgsIAotICAgIDcwMzUyLCA3MDM1NiwgNzAzNjAsIDcwMzYzLCA3MDM2NiwgNzAzNjksIDcwMzcyLCA3MDM3NSwgNzAzNzgsIDcwMzgxLCAKLSAgICA3MDM4NCwgNzAzODcsIDcwMzkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3MDM5OCwgNzA0MDMsIDcwNDA4LCA3MDQxMywgNzA0MTgsIDcwNDI1LCA3MDQzMiwgNzA0MzcsIDcwNDQyLCAKLSAgICA3MDQ0NywgNzA0NTIsIDcwNDU5LCA3MDQ2NiwgNzA0NzMsIDcwNDgwLCA3MDQ4NywgNzA0OTQsIDcwNTA0LCA3MDUxNCwgCi0gICAgNzA1MjEsIDcwNTI4LCA3MDUzNSwgNzA1NDIsIDcwNTQ4LCA3MDU1NCwgNzA1NjMsIDcwNTcyLCA3MDU3OSwgNzA1ODYsIAotICAgIDcwNTk3LCA3MDYwOCwgNzA2MTMsIDcwNjE4LCA3MDYyNSwgNzA2MzIsIDcwNjM5LCA3MDY0NiwgNzA2NTMsIDcwNjYwLCAKLSAgICA3MDY2NywgNzA2NzQsIDcwNjgwLCA3MDY4NiwgNzA2OTIsIDcwNjk4LCA3MDcwNSwgNzA3MTIsIDcwNzE3LCA3MDcyMSwgCi0gICAgNzA3MjgsIDcwNzM1LCA3MDc0MiwgNzA3NDYsIDcwNzUzLCA3MDc1NywgNzA3NjIsIDcwNzY2LCA3MDc3MiwgNzA3NzcsIAotICAgIDcwNzgzLCA3MDc4OCwgNzA3OTIsIDcwNzk2LCA3MDc5OSwgNzA4MDIsIDcwODA3LCA3MDgxMiwgNzA4MTcsIDcwODIyLCAKLSAgICA3MDgyNywgNzA4MzIsIDcwODM3LCA3MDg0MiwgNzA4NDcsIDcwODUyLCA3MDg2MSwgNzA4NzAsIDcwODc1LCA3MDg4MCwgCi0gICAgNzA4ODUsIDcwODkwLCA3MDg5NSwgNzA5MDAsIDcwOTA1LCA3MDkxMCwgNzA5MTUsIDcwOTIwLCA3MDkyNSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzA5MzAsIDcwOTM2LCA3MDkzOSwgNzA5NDIsIDcwOTQ1LCA3MDk0OSwgNzA5NTMsIDcwOTU3LCAKLSAgICA3MDk2MSwgNzA5NjQsIDcwOTY4LCA3MDk3MSwgNzA5NzUsIDcwOTc4LCA3MDk4MiwgNzA5ODYsIDcwOTkwLCA3MDk5NCwgCi0gICAgNzA5OTgsIDcxMDAyLCA3MTAwNiwgNzEwMDksIDcxMDEzLCA3MTAxNywgNzEwMjEsIDcxMDI1LCA3MTAyOSwgNzEwMzMsIAotICAgIDcxMDM3LCA3MTA0MSwgNzEwNDUsIDcxMDQ5LCA3MTA1MywgNzEwNTcsIDcxMDYxLCA3MTA2NSwgNzEwNjgsIDcxMDcyLCAKLSAgICA3MTA3NiwgNzEwODAsIDcxMDg0LCA3MTA4OCwgNzEwOTIsIDcxMDk2LCA3MTEwMCwgNzExMDQsIDcxMTA4LCA3MTExMiwgCi0gICAgNzExMTYsIDcxMTIwLCA3MTEyNCwgNzExMjgsIDcxMTMyLCA3MTEzNiwgNzExNDAsIDcxMTQ0LCA3MTE0OCwgNzExNTIsIAotICAgIDcxMTU2LCA3MTE2MCwgNzExNjQsIDcxMTY3LCA3MTE3MSwgNzExNzUsIDcxMTc5LCA3MTE4MywgNzExODcsIDcxMTkxLCAKLSAgICA3MTE5NSwgNzExOTgsIDcxMjAyLCA3MTIwNiwgNzEyMTAsIDcxMjE0LCA3MTIxOCwgNzEyMjIsIDcxMjI2LCA3MTIzMCwgCi0gICAgNzEyMzQsIDcxMjM4LCA3MTI0MiwgNzEyNDYsIDcxMjUxLCA3MTI1NiwgNzEyNTksIDcxMjY0LCA3MTI2NywgNzEyNzAsIAotICAgIDcxMjczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MTI3NywgNzEyODYsIDcxMjk1LCA3MTMwNCwgNzEzMTMsIDcxMzIyLCAKLSAgICA3MTMzMSwgNzEzNDAsIDcxMzQ5LCA3MTM1NywgNzEzNjQsIDcxMzcyLCA3MTM3OSwgNzEzODcsIDcxMzk3LCA3MTQwNiwgCi0gICAgNzE0MTYsIDcxNDI1LCA3MTQzNSwgNzE0NDMsIDcxNDUwLCA3MTQ1OCwgNzE0NjUsIDcxNDczLCA3MTQ3OCwgNzE0ODMsIAotICAgIDcxNDg4LCA3MTQ5NywgNzE1MDMsIDcxNTA5LCA3MTUxNiwgNzE1MjUsIDcxNTMzLCA3MTU0MSwgNzE1NDksIDcxNTU2LCAKLSAgICA3MTU2MywgNzE1NzAsIDcxNTc3LCA3MTU4MiwgNzE1ODcsIDcxNTkyLCA3MTU5NywgNzE2MDIsIDcxNjA3LCA3MTYxMiwgCi0gICAgNzE2MTcsIDcxNjI1LCA3MTYzMywgNzE2MzksIDcxNjQ1LCA3MTY1MCwgNzE2NTUsIDcxNjYwLCA3MTY2NSwgNzE2NzAsIAotICAgIDcxNjc1LCA3MTY4MCwgNzE2ODUsIDcxNjkzLCA3MTcwMSwgNzE3MDYsIDcxNzExLCA3MTcyMSwgNzE3MzEsIDcxNzM4LCAKLSAgICA3MTc0NSwgNzE3NTQsIDcxNzYzLCA3MTc3NSwgNzE3ODcsIDcxNzkzLCA3MTc5OSwgNzE4MDcsIDcxODE1LCA3MTgyNSwgCi0gICAgNzE4MzUsIDcxODQyLCA3MTg0OSwgNzE4NTQsIDcxODU5LCA3MTg3MSwgNzE4ODMsIDcxODkxLCA3MTg5OSwgNzE5MDksIAotICAgIDcxOTE5LCA3MTkzMSwgNzE5NDMsIDcxOTUyLCA3MTk2MSwgNzE5NjgsIDcxOTc1LCA3MTk4MiwgNzE5ODksIDcxOTk4LCAKLSAgICA3MjAwNywgNzIwMTIsIDcyMDE3LCA3MjAyNCwgNzIwMzEsIDcyMDM4LCA3MjA0NSwgNzIwNTcsIDcyMDY5LCA3MjA3NCwgCi0gICAgNzIwNzksIDcyMDg0LCA3MjA4OSwgNzIwOTQsIDcyMDk5LCA3MjEwNCwgNzIxMDksIDcyMTEzLCA3MjExOCwgNzIxMjMsIAotICAgIDcyMTI4LCA3MjEzMywgNzIxMzgsIDcyMTQ0LCA3MjE0OSwgNzIxNTQsIDcyMTYxLCA3MjE2OCwgNzIxNzUsIDcyMTgyLCAKLSAgICA3MjE4OSwgNzIxOTgsIDcyMjA3LCA3MjIxMywgNzIyMTksIDcyMjI1LCA3MjIzMSwgNzIyMzgsIDcyMjQ1LCA3MjI1MiwgCi0gICAgNzIyNTksIDcyMjY2LCA3MjI3MCwgNzIyNzcsIDcyMjgyLCA3MjI4NywgNzIyOTQsIDAsIDcyMzA3LCA3MjMxNSwgNzIzMjMsIAotICAgIDcyMzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjMzNywgNzIzNDYsIDcyMzU1LCA3MjM2NCwgCi0gICAgNzIzNzMsIDcyMzgyLCA3MjM5MSwgNzI0MDAsIDcyNDA5LCA3MjQxOCwgNzI0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDYzNzA2LCA2MzcxNSwgNjM3MjQsIDYzNzM1LCA2Mzc0MiwgNjM3NDcsIDYzNzUyLCA2Mzc1OSwgNjM3NjYsIAorICAgIDYzNzcyLCA2Mzc3NywgNjM3ODIsIDYzNzg3LCA2Mzc5MiwgNjM3OTksIDYzODA0LCA2MzgwOSwgNjM4MTQsIDYzODI1LCAKKyAgICA2MzgzMCwgNjM4MzUsIDYzODQyLCA2Mzg0NywgNjM4NTQsIDYzODU5LCA2Mzg2NCwgNjM4NzEsIDYzODc4LCA2Mzg4NSwgCisgICAgNjM4OTQsIDYzOTAzLCA2MzkwOCwgNjM5MTMsIDYzOTE4LCA2MzkyNSwgNjM5MzAsIDYzOTQwLCA2Mzk0NywgNjM5NTIsIAorICAgIDYzOTU3LCA2Mzk2MiwgNjM5NjcsIDYzOTcyLCA2Mzk3NywgNjM5ODYsIDYzOTkzLCA2NDAwMCwgNjQwMDUsIDY0MDEyLCAKKyAgICA2NDAxNywgNjQwMjQsIDY0MDMzLCA2NDA0NCwgNjQwNDksIDY0MDU4LCA2NDA2MywgNjQwNzAsIDY0MDc5LCA2NDA4OCwgCisgICAgNjQwOTMsIDY0MDk4LCA2NDEwNSwgNjQxMTEsIDY0MTE4LCA2NDEyNSwgNjQxMjksIDY0MTMzLCA2NDEzNiwgNjQxNDAsIAorICAgIDY0MTQ0LCA2NDE0OCwgNjQxNTIsIDY0MTU2LCA2NDE2MCwgNjQxNjQsIDY0MTY3LCA2NDE3MSwgNjQxNzUsIDY0MTc5LCAKKyAgICA2NDE4MywgNjQxODcsIDY0MTkxLCA2NDE5NCwgNjQxOTgsIDY0MjAyLCA2NDIwNSwgNjQyMDksIDY0MjEzLCA2NDIxNywgCisgICAgNjQyMjEsIDY0MjI1LCA2NDIyOSwgNjQyMzMsIDY0MjM3LCA2NDI0MSwgNjQyNDUsIDY0MjQ5LCA2NDI1MywgNjQyNTcsIAorICAgIDY0MjYxLCA2NDI2NSwgNjQyNjksIDY0MjczLCA2NDI3NywgNjQyODEsIDY0Mjg1LCA2NDI4OSwgNjQyOTMsIDY0Mjk3LCAKKyAgICA2NDMwMSwgNjQzMDUsIDY0MzA5LCA2NDMxMywgNjQzMTcsIDY0MzIxLCA2NDMyNSwgNjQzMjksIDY0MzMzLCA2NDMzNywgCisgICAgNjQzNDEsIDY0MzQ1LCA2NDM0OSwgNjQzNTMsIDY0MzU3LCA2NDM2MSwgNjQzNjUsIDY0MzY5LCA2NDM3MywgNjQzNzcsIAorICAgIDY0MzgxLCA2NDM4NCwgNjQzODgsIDY0MzkyLCA2NDM5NiwgNjQ0MDAsIDY0NDA0LCA2NDQwOCwgNjQ0MTIsIDY0NDE2LCAKKyAgICA2NDQyMCwgNjQ0MjQsIDY0NDI4LCA2NDQzMiwgNjQ0MzYsIDY0NDQwLCA2NDQ0NCwgNjQ0NDgsIDY0NDUyLCA2NDQ1NiwgCisgICAgNjQ0NjAsIDY0NDY0LCA2NDQ2OCwgNjQ0NzIsIDY0NDc2LCA2NDQ4MCwgNjQ0ODQsIDY0NDg4LCA2NDQ5MiwgNjQ0OTYsIAorICAgIDY0NTAwLCA2NDUwNCwgNjQ1MDgsIDY0NTEyLCA2NDUxNiwgNjQ1MjAsIDY0NTI0LCA2NDUyOCwgNjQ1MzIsIDY0NTM2LCAKKyAgICA2NDU0MCwgNjQ1NDQsIDY0NTQ4LCA2NDU1MiwgNjQ1NTYsIDY0NTYwLCA2NDU2NCwgNjQ1NjgsIDY0NTcyLCA2NDU3NiwgCisgICAgNjQ1ODAsIDY0NTg0LCA2NDU4OCwgNjQ1OTIsIDY0NTk2LCA2NDYwMCwgNjQ2MDQsIDY0NjA4LCA2NDYxMiwgNjQ2MTYsIAorICAgIDY0NjIwLCA2NDYyNCwgNjQ2MjgsIDY0NjMyLCA2NDYzNiwgNjQ2NDAsIDY0NjQ0LCA2NDY0OCwgNjQ2NTIsIDY0NjU2LCAKKyAgICA2NDY2MCwgNjQ2NjQsIDY0NjY4LCA2NDY3MiwgNjQ2NzYsIDY0NjgwLCA2NDY4NCwgNjQ2ODgsIDY0NjkyLCA2NDY5NiwgCisgICAgNjQ3MDAsIDY0NzA0LCA2NDcwOCwgNjQ3MTIsIDY0NzE2LCA2NDcyMCwgNjQ3MjQsIDY0NzI4LCA2NDczMiwgNjQ3MzYsIAorICAgIDY0NzQwLCA2NDc0NCwgNjQ3NDgsIDY0NzUyLCA2NDc1NiwgNjQ3NjAsIDY0NzY0LCA2NDc2OCwgNjQ3NzIsIDY0Nzc2LCAKKyAgICA2NDc4MCwgNjQ3ODQsIDY0Nzg4LCA2NDc5MiwgNjQ3OTYsIDY0ODAwLCA2NDgwNCwgNjQ4MDgsIDY0ODEyLCA2NDgxNiwgCisgICAgNjQ4MjAsIDY0ODI0LCA2NDgyOCwgNjQ4MzIsIDY0ODM2LCA2NDg0MCwgNjQ4NDQsIDY0ODQ4LCA2NDg1MiwgNjQ4NTUsIAorICAgIDY0ODU5LCA2NDg2MywgNjQ4NjcsIDY0ODcxLCA2NDg3NSwgNjQ4NzksIDY0ODgzLCA2NDg4NywgNjQ4OTEsIDY0ODk1LCAKKyAgICA2NDg5OSwgNjQ5MDMsIDY0OTA3LCA2NDkxMSwgNjQ5MTUsIDY0OTE5LCA2NDkyMywgNjQ5MjcsIDY0OTMxLCA2NDkzNSwgCisgICAgNjQ5MzksIDY0OTQzLCA2NDk0NywgNjQ5NTEsIDY0OTU1LCA2NDk1OSwgNjQ5NjMsIDY0OTY3LCA2NDk3MSwgNjQ5NzUsIAorICAgIDY0OTc5LCA2NDk4MywgNjQ5ODcsIDY0OTkxLCA2NDk5NSwgNjQ5OTksIDY1MDAzLCA2NTAwNywgNjUwMTEsIDY1MDE1LCAKKyAgICA2NTAxOSwgNjUwMjMsIDY1MDI3LCA2NTAzMSwgNjUwMzUsIDY1MDM5LCA2NTA0MywgNjUwNDcsIDY1MDUxLCA2NTA1NSwgCisgICAgNjUwNTksIDY1MDYzLCA2NTA2NywgNjUwNzEsIDY1MDc1LCA2NTA3OSwgNjUwODMsIDY1MDg3LCA2NTA5MSwgNjUwOTUsIAorICAgIDY1MDk5LCA2NTEwMywgNjUxMDcsIDY1MTExLCA2NTExNSwgNjUxMTksIDY1MTIzLCA2NTEyNywgNjUxMzEsIDY1MTM1LCAKKyAgICA2NTEzOSwgNjUxNDMsIDY1MTQ3LCA2NTE1MSwgNjUxNTUsIDY1MTU5LCA2NTE2MywgNjUxNjcsIDY1MTcxLCA2NTE3NSwgCisgICAgNjUxNzksIDY1MTgzLCA2NTE4NywgNjUxOTEsIDY1MTk1LCA2NTE5OSwgNjUyMDMsIDY1MjA3LCA2NTIxMSwgNjUyMTUsIAorICAgIDY1MjE5LCA2NTIyMywgNjUyMjcsIDY1MjMxLCA2NTIzNSwgNjUyMzksIDY1MjQzLCA2NTI0NywgNjUyNTEsIDY1MjU1LCAKKyAgICA2NTI1OSwgNjUyNjMsIDY1MjY3LCA2NTI3MSwgNjUyNzUsIDY1Mjc5LCA2NTI4MywgNjUyODcsIDY1MjkxLCA2NTI5NSwgCisgICAgNjUyOTksIDY1MzAzLCA2NTMwNywgNjUzMTEsIDY1MzE1LCA2NTMxOCwgNjUzMjIsIDY1MzI2LCA2NTMzMCwgNjUzMzQsIAorICAgIDY1MzM4LCA2NTM0MiwgNjUzNDYsIDY1MzUwLCA2NTM1NCwgNjUzNTgsIDY1MzYyLCA2NTM2NiwgNjUzNzAsIDY1Mzc0LCAKKyAgICA2NTM3OCwgNjUzODIsIDY1Mzg2LCA2NTM5MCwgNjUzOTQsIDY1Mzk4LCA2NTQwMiwgNjU0MDYsIDY1NDEwLCA2NTQxNCwgCisgICAgNjU0MTgsIDY1NDIyLCA2NTQyNiwgNjU0MzAsIDY1NDM0LCA2NTQzOCwgNjU0NDIsIDY1NDQ2LCA2NTQ1MCwgNjU0NTQsIAorICAgIDY1NDU4LCA2NTQ2MiwgNjU0NjYsIDY1NDcwLCA2NTQ3NCwgNjU0NzgsIDY1NDgyLCA2NTQ4NiwgNjU0OTAsIDY1NDk0LCAKKyAgICA2NTQ5OCwgNjU1MDIsIDY1NTA2LCA2NTUxMCwgNjU1MTQsIDY1NTE4LCA2NTUyMiwgNjU1MjYsIDY1NTMwLCA2NTUzNCwgCisgICAgNjU1MzgsIDY1NTQyLCA2NTU0NiwgNjU1NTAsIDY1NTU0LCA2NTU1OCwgNjU1NjIsIDY1NTY2LCA2NTU3MCwgNjU1NzQsIAorICAgIDY1NTc4LCA2NTU4MiwgNjU1ODYsIDY1NTkwLCA2NTU5NCwgNjU1OTgsIDY1NjAyLCA2NTYwNiwgNjU2MTAsIDY1NjE0LCAKKyAgICA2NTYxOCwgNjU2MjIsIDY1NjI2LCA2NTYzMCwgNjU2MzQsIDY1NjM4LCA2NTY0MiwgNjU2NDYsIDY1NjUwLCA2NTY1NCwgCisgICAgNjU2NTgsIDY1NjYyLCA2NTY2NiwgNjU2NzAsIDY1Njc0LCA2NTY3NywgNjU2ODEsIDY1Njg1LCA2NTY4OSwgNjU2OTMsIAorICAgIDY1Njk3LCA2NTcwMSwgNjU3MDUsIDY1NzA5LCA2NTcxMywgNjU3MTcsIDY1NzIxLCA2NTcyNSwgNjU3MjksIDY1NzMzLCAKKyAgICA2NTczNywgNjU3NDEsIDY1NzQ1LCA2NTc0OSwgNjU3NTMsIDY1NzU3LCA2NTc2MSwgNjU3NjUsIDY1NzY5LCA2NTc3MywgCisgICAgNjU3NzcsIDY1NzgxLCA2NTc4NSwgNjU3ODksIDY1NzkzLCA2NTc5NywgNjU4MDEsIDY1ODA1LCA2NTgwOSwgNjU4MTMsIAorICAgIDY1ODE3LCA2NTgyMSwgNjU4MjUsIDY1ODI5LCA2NTgzMywgNjU4MzcsIDY1ODQxLCA2NTg0NSwgNjU4NDksIDY1ODUzLCAKKyAgICA2NTg1NywgNjU4NjEsIDY1ODY1LCA2NTg2OSwgNjU4NzMsIDY1ODc3LCA2NTg4MSwgNjU4ODUsIDY1ODg5LCA2NTg5MywgCisgICAgNjU4OTcsIDY1OTAxLCA2NTkwNSwgNjU5MDksIDY1OTEzLCA2NTkxNywgNjU5MjEsIDY1OTI1LCA2NTkyOSwgNjU5MzMsIAorICAgIDY1OTM3LCA2NTk0MSwgNjU5NDUsIDY1OTQ5LCA2NTk1MywgNjU5NTcsIDY1OTYxLCA2NTk2NSwgNjU5NjksIDY1OTczLCAKKyAgICA2NTk3NywgNjU5ODEsIDY1OTg1LCA2NTk4OSwgNjU5OTMsIDY1OTk3LCA2NjAwMSwgNjYwMDUsIDY2MDA5LCA2NjAxMywgCisgICAgNjYwMTcsIDY2MDIxLCA2NjAyNSwgNjYwMjksIDY2MDMzLCA2NjAzNywgNjYwNDEsIDY2MDQ1LCA2NjA0OSwgNjYwNTMsIAorICAgIDY2MDU3LCA2NjA2MSwgNjYwNjUsIDY2MDY5LCA2NjA3MywgNjYwNzcsIDY2MDgxLCA2NjA4NSwgNjYwODksIDY2MDkzLCAKKyAgICA2NjA5NywgNjYxMDEsIDY2MTA1LCA2NjEwOSwgNjYxMTMsIDY2MTE3LCA2NjEyMSwgNjYxMjUsIDY2MTI5LCA2NjEzMywgCisgICAgNjYxMzcsIDY2MTQxLCA2NjE0NSwgNjYxNDksIDY2MTUzLCA2NjE1NywgNjYxNjEsIDY2MTY1LCA2NjE2OSwgNjYxNzIsIAorICAgIDY2MTc2LCA2NjE4MCwgNjYxODQsIDY2MTg4LCA2NjE5MiwgNjYxOTYsIDY2MjAwLCA2NjIwNCwgNjYyMDgsIDY2MjEyLCAKKyAgICA2NjIxNiwgNjYyMjAsIDY2MjI0LCA2NjIyOCwgNjYyMzIsIDY2MjM2LCA2NjI0MCwgNjYyNDQsIDY2MjQ4LCA2NjI1MiwgCisgICAgNjYyNTYsIDY2MjYwLCA2NjI2NCwgNjYyNjgsIDY2MjcyLCA2NjI3NiwgNjYyODAsIDY2Mjg0LCA2NjI4OCwgNjYyOTIsIAorICAgIDY2Mjk2LCA2NjMwMCwgNjYzMDQsIDY2MzA4LCA2NjMxMiwgNjYzMTYsIDY2MzIwLCA2NjMyNCwgNjYzMjgsIDY2MzMyLCAKKyAgICA2NjMzNiwgNjYzNDAsIDY2MzQ0LCA2NjM0OCwgNjYzNTIsIDY2MzU2LCA2NjM2MCwgNjYzNjQsIDY2MzY4LCA2NjM3MiwgCisgICAgNjYzNzYsIDY2MzgwLCA2NjM4NCwgNjYzODgsIDY2MzkyLCA2NjM5NiwgNjY0MDAsIDY2NDA0LCA2NjQwOCwgNjY0MTIsIAorICAgIDY2NDE2LCA2NjQyMCwgNjY0MjQsIDY2NDI4LCA2NjQzMiwgNjY0MzYsIDY2NDQwLCA2NjQ0NCwgNjY0NDgsIDY2NDUyLCAKKyAgICA2NjQ1NiwgNjY0NjAsIDY2NDY0LCA2NjQ2OCwgNjY0NzIsIDY2NDc2LCA2NjQ4MCwgNjY0ODQsIDY2NDg4LCA2NjQ5MiwgCisgICAgNjY0OTYsIDY2NTAwLCA2NjUwNCwgNjY1MDgsIDY2NTEyLCA2NjUxNiwgNjY1MjAsIDY2NTI0LCA2NjUyOCwgNjY1MzIsIAorICAgIDY2NTM2LCA2NjU0MCwgNjY1NDQsIDY2NTQ4LCA2NjU1MiwgNjY1NTYsIDY2NTYwLCA2NjU2NCwgNjY1NjgsIDY2NTcyLCAKKyAgICA2NjU3NiwgNjY1ODAsIDY2NTg0LCA2NjU4OCwgNjY1OTIsIDY2NTk2LCA2NjYwMCwgNjY2MDQsIDY2NjA4LCA2NjYxMiwgCisgICAgNjY2MTYsIDY2NjIwLCA2NjYyNCwgNjY2MjcsIDY2NjMxLCA2NjYzNSwgNjY2MzksIDY2NjQzLCA2NjY0NywgNjY2NTEsIAorICAgIDY2NjU1LCA2NjY1OSwgNjY2NjMsIDY2NjY3LCA2NjY3MSwgNjY2NzUsIDY2Njc5LCA2NjY4MywgNjY2ODcsIDY2NjkxLCAKKyAgICA2NjY5NSwgNjY2OTksIDY2NzAzLCA2NjcwNywgNjY3MTEsIDY2NzE1LCA2NjcxOSwgNjY3MjMsIDY2NzI3LCA2NjczMSwgCisgICAgNjY3MzUsIDY2NzM5LCA2Njc0MywgNjY3NDcsIDY2NzUxLCA2Njc1NSwgNjY3NTksIDY2NzYzLCA2Njc2NywgNjY3NzEsIAorICAgIDY2Nzc1LCA2Njc3OSwgNjY3ODMsIDY2Nzg3LCA2Njc5MSwgNjY3OTUsIDY2Nzk5LCA2NjgwMywgNjY4MDcsIDY2ODExLCAKKyAgICA2NjgxNSwgNjY4MTksIDY2ODIzLCA2NjgyNywgNjY4MzEsIDY2ODM1LCA2NjgzOSwgNjY4NDMsIDY2ODQ3LCA2Njg1MSwgCisgICAgNjY4NTUsIDY2ODU5LCA2Njg2MywgNjY4NjcsIDY2ODcxLCA2Njg3NSwgNjY4NzksIDY2ODgzLCA2Njg4NywgNjY4OTEsIAorICAgIDY2ODk1LCA2Njg5OSwgNjY5MDMsIDY2OTA3LCA2NjkxMSwgNjY5MTUsIDY2OTE5LCA2NjkyMywgNjY5MjcsIDY2OTMxLCAKKyAgICA2NjkzNSwgNjY5MzksIDY2OTQzLCA2Njk0NywgNjY5NTEsIDY2OTU1LCA2Njk1OSwgNjY5NjMsIDY2OTY3LCA2Njk3MSwgCisgICAgNjY5NzUsIDY2OTc5LCA2Njk4MywgNjY5ODcsIDY2OTkxLCA2Njk5NSwgNjY5OTksIDY3MDAzLCA2NzAwNywgNjcwMTEsIAorICAgIDY3MDE1LCA2NzAxOSwgNjcwMjMsIDY3MDI3LCA2NzAzMSwgNjcwMzUsIDY3MDM5LCA2NzA0MywgNjcwNDcsIDY3MDUxLCAKKyAgICA2NzA1NSwgNjcwNTksIDY3MDYzLCA2NzA2NywgNjcwNzEsIDY3MDc1LCA2NzA3OSwgNjcwODMsIDY3MDg3LCA2NzA5MSwgCisgICAgNjcwOTUsIDY3MDk5LCA2NzEwMywgNjcxMDcsIDY3MTExLCA2NzExNSwgNjcxMTksIDY3MTIzLCA2NzEyNywgNjcxMzEsIAorICAgIDY3MTM1LCA2NzEzOSwgNjcxNDMsIDY3MTQ3LCA2NzE1MSwgNjcxNTUsIDY3MTU5LCA2NzE2MywgNjcxNjcsIDY3MTcxLCAKKyAgICA2NzE3NSwgNjcxNzksIDY3MTgzLCA2NzE4NywgNjcxOTEsIDY3MTk1LCA2NzE5OSwgNjcyMDMsIDY3MjA3LCA2NzIxMSwgCisgICAgNjcyMTUsIDY3MjE5LCA2NzIyMywgNjcyMjcsIDY3MjMwLCA2NzIzNCwgNjcyMzgsIDY3MjQyLCA2NzI0NiwgNjcyNTAsIAorICAgIDY3MjU0LCA2NzI1OCwgNjcyNjEsIDY3MjY1LCA2NzI2OSwgNjcyNzMsIDY3Mjc3LCA2NzI4MSwgNjcyODUsIDY3Mjg5LCAKKyAgICA2NzI5MywgNjcyOTcsIDY3MzAxLCA2NzMwNSwgNjczMDksIDY3MzEzLCA2NzMxNywgNjczMjEsIDY3MzI1LCA2NzMyOSwgCisgICAgNjczMzMsIDY3MzM3LCA2NzM0MSwgNjczNDUsIDY3MzQ5LCA2NzM1MywgNjczNTcsIDY3MzYxLCA2NzM2NSwgNjczNjksIAorICAgIDY3MzczLCA2NzM3NywgNjczODEsIDY3Mzg1LCA2NzM4OSwgNjczOTMsIDY3Mzk3LCA2NzQwMSwgNjc0MDUsIDY3NDA5LCAKKyAgICA2NzQxMywgNjc0MTcsIDY3NDIxLCA2NzQyNSwgNjc0MjksIDY3NDMzLCA2NzQzNywgNjc0NDEsIDY3NDQ1LCA2NzQ0OSwgCisgICAgNjc0NTMsIDY3NDU3LCA2NzQ2MSwgNjc0NjUsIDY3NDY5LCA2NzQ3MywgNjc0NzcsIDY3NDgxLCA2NzQ4NSwgNjc0ODksIAorICAgIDY3NDkzLCA2NzQ5NywgNjc1MDEsIDY3NTA1LCA2NzUwOSwgNjc1MTMsIDY3NTE3LCA2NzUyMSwgNjc1MjUsIDY3NTI5LCAKKyAgICA2NzUzMywgNjc1MzcsIDY3NTQxLCA2NzU0NSwgNjc1NDksIDY3NTUzLCA2NzU1NywgNjc1NjEsIDY3NTY1LCA2NzU2OSwgCisgICAgNjc1NzMsIDY3NTc3LCA2NzU4MSwgNjc1ODUsIDY3NTg5LCA2NzU5MywgNjc1OTcsIDY3NjAxLCA2NzYwNSwgNjc2MDksIAorICAgIDY3NjEzLCA2NzYxNywgNjc2MjEsIDY3NjI1LCA2NzYyOSwgNjc2MzMsIDY3NjM3LCA2NzY0MSwgNjc2NDUsIDY3NjQ5LCAKKyAgICA2NzY1MywgNjc2NTcsIDY3NjYxLCA2NzY2NSwgNjc2NjksIDY3NjczLCA2NzY3NywgNjc2ODEsIDY3Njg1LCA2NzY4OSwgCisgICAgNjc2OTMsIDY3Njk3LCA2NzcwMSwgNjc3MDUsIDY3NzA5LCA2NzcxMywgNjc3MTcsIDY3NzIxLCA2NzcyNSwgNjc3MjksIAorICAgIDY3NzMzLCA2NzczNywgNjc3NDEsIDY3NzQ1LCA2Nzc0OSwgNjc3NTMsIDY3NzU3LCA2Nzc2MSwgNjc3NjUsIDY3NzY5LCAKKyAgICA2Nzc3MywgNjc3NzcsIDY3NzgxLCA2Nzc4NSwgNjc3ODksIDY3NzkzLCA2Nzc5NywgNjc4MDEsIDY3ODA1LCA2NzgwOSwgCisgICAgNjc4MTMsIDY3ODE3LCA2NzgyMSwgNjc4MjUsIDY3ODI5LCA2NzgzMywgNjc4MzcsIDY3ODQxLCA2Nzg0NSwgNjc4NDksIAorICAgIDY3ODUzLCA2Nzg1NywgNjc4NjEsIDY3ODY1LCA2Nzg2OSwgNjc4NzMsIDY3ODc3LCA2Nzg4MSwgNjc4ODUsIDY3ODg5LCAKKyAgICA2Nzg5MywgNjc4OTcsIDY3OTAxLCA2NzkwNSwgNjc5MDksIDY3OTEzLCA2NzkxNywgNjc5MjEsIDY3OTI1LCA2NzkyOSwgCisgICAgNjc5MzMsIDY3OTM3LCA2Nzk0MSwgNjc5NDUsIDY3OTQ5LCA2Nzk1MywgNjc5NTcsIDY3OTYxLCA2Nzk2NSwgNjc5NjksIAorICAgIDY3OTczLCA2Nzk3NywgNjc5ODEsIDY3OTg1LCA2Nzk4OCwgNjc5OTIsIDY3OTk2LCA2ODAwMCwgNjgwMDQsIDY4MDA4LCAKKyAgICA2ODAxMiwgNjgwMTYsIDY4MDIwLCA2ODAyNCwgNjgwMjgsIDY4MDMyLCA2ODAzNiwgNjgwNDAsIDY4MDQ0LCA2ODA0OCwgCisgICAgNjgwNTIsIDY4MDU2LCA2ODA2MCwgNjgwNjQsIDY4MDY4LCA2ODA3MiwgNjgwNzYsIDY4MDgwLCA2ODA4NCwgNjgwODgsIAorICAgIDY4MDkyLCA2ODA5NiwgNjgxMDAsIDY4MTA0LCA2ODEwOCwgNjgxMTIsIDY4MTE2LCA2ODEyMCwgNjgxMjQsIDY4MTI4LCAKKyAgICA2ODEzMiwgNjgxMzYsIDY4MTQwLCA2ODE0NCwgNjgxNDgsIDY4MTUyLCA2ODE1NiwgNjgxNjAsIDY4MTY0LCA2ODE2OCwgCisgICAgNjgxNzIsIDY4MTc2LCA2ODE4MCwgNjgxODQsIDY4MTg4LCA2ODE5MiwgNjgxOTYsIDY4MjAwLCA2ODIwNCwgNjgyMDgsIAorICAgIDY4MjEyLCA2ODIxNiwgNjgyMjAsIDY4MjI0LCA2ODIyOCwgNjgyMzIsIDY4MjM2LCA2ODI0MCwgNjgyNDQsIDY4MjQ4LCAKKyAgICA2ODI1MiwgNjgyNTYsIDY4MjYwLCA2ODI2NCwgNjgyNjgsIDY4MjcyLCA2ODI3NiwgNjgyODAsIDY4Mjg0LCA2ODI4OCwgCisgICAgNjgyOTIsIDY4Mjk2LCA2ODMwMCwgNjgzMDQsIDY4MzA4LCA2ODMxMiwgNjgzMTYsIDY4MzIwLCA2ODMyNCwgNjgzMjgsIAorICAgIDY4MzMyLCA2ODMzNiwgNjgzNDAsIDY4MzQ0LCA2ODM0OCwgNjgzNTIsIDY4MzU2LCA2ODM2MCwgNjgzNjQsIDY4MzY4LCAKKyAgICA2ODM3MiwgNjgzNzYsIDY4MzgwLCA2ODM4NCwgNjgzODgsIDY4MzkyLCA2ODM5NiwgNjg0MDAsIDY4NDA0LCA2ODQwOCwgCisgICAgNjg0MTIsIDY4NDE2LCA2ODQyMCwgNjg0MjQsIDY4NDI4LCA2ODQzMiwgNjg0MzYsIDY4NDQwLCA2ODQ0NCwgNjg0NDgsIAorICAgIDY4NDUyLCA2ODQ1NiwgNjg0NjAsIDY4NDY0LCA2ODQ2OCwgNjg0NzIsIDY4NDc2LCA2ODQ4MCwgNjg0ODQsIDY4NDg4LCAKKyAgICA2ODQ5MiwgNjg0OTYsIDY4NTAwLCA2ODUwNCwgNjg1MDgsIDY4NTEyLCA2ODUxNiwgNjg1MjAsIDY4NTI0LCA2ODUyOCwgCisgICAgNjg1MzIsIDY4NTM2LCA2ODU0MCwgNjg1NDQsIDY4NTQ4LCA2ODU1MiwgNjg1NTYsIDY4NTYwLCA2ODU2NCwgNjg1NjgsIAorICAgIDY4NTcyLCA2ODU3NiwgNjg1ODAsIDY4NTg0LCA2ODU4OCwgNjg1OTIsIDY4NTk2LCA2ODYwMCwgNjg2MDQsIDY4NjA4LCAKKyAgICA2ODYxMiwgNjg2MTYsIDY4NjIwLCA2ODYyNCwgNjg2MjgsIDY4NjMyLCA2ODYzNiwgNjg2NDAsIDY4NjQ0LCA2ODY0OCwgCisgICAgNjg2NTIsIDY4NjU2LCA2ODY2MCwgNjg2NjQsIDY4NjY4LCA2ODY3MiwgNjg2NzYsIDY4NjgwLCA2ODY4NCwgNjg2ODgsIAorICAgIDY4NjkyLCA2ODY5NiwgNjg3MDAsIDY4NzA0LCA2ODcwOCwgNjg3MTIsIDY4NzE2LCA2ODcyMCwgNjg3MjQsIDY4NzI4LCAKKyAgICA2ODczMiwgNjg3MzYsIDY4NzQwLCA2ODc0NCwgNjg3NDgsIDY4NzUyLCA2ODc1NiwgNjg3NjAsIDY4NzY0LCA2ODc2OCwgMCwgCisgICAgMCwgMCwgNjg3NzIsIDY4Nzc2LCA2ODc4MCwgNjg3ODQsIDY4Nzg4LCA2ODc5MiwgNjg3OTYsIDY4ODAwLCA2ODgwNCwgCisgICAgNjg4MDgsIDY4ODEyLCA2ODgxNiwgNjg4MjAsIDY4ODI0LCA2ODgyOCwgNjg4MzIsIDY4ODM2LCA2ODg0MCwgNjg4NDQsIAorICAgIDY4ODQ4LCA2ODg1MiwgNjg4NTYsIDY4ODYwLCA2ODg2NCwgNjg4NjgsIDY4ODcyLCA2ODg3NiwgNjg4ODAsIDY4ODg0LCAKKyAgICA2ODg4OCwgNjg4OTIsIDY4ODk2LCA2ODkwMCwgNjg5MDQsIDY4OTA4LCA2ODkxMiwgNjg5MTYsIDY4OTIwLCA2ODkyNCwgCisgICAgNjg5MjgsIDY4OTMyLCA2ODkzNiwgNjg5NDAsIDY4OTQ0LCA2ODk0OCwgNjg5NTIsIDY4OTU2LCA2ODk2MCwgNjg5NjQsIAorICAgIDY4OTY4LCA2ODk3MiwgNjg5NzYsIDY4OTgwLCA2ODk4NCwgNjg5ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY4OTkyLCA2ODk5NywgNjkwMDEsIDY5MDA2LCA2OTAxMSwgNjkwMTYsIDY5MDIxLCA2OTAyNiwgNjkwMzAsIDY5MDM1LCAKKyAgICA2OTA0MCwgNjkwNDUsIDY5MDUwLCA2OTA1NSwgNjkwNjAsIDY5MDY1LCA2OTA2OSwgNjkwNzMsIDY5MDc4LCA2OTA4MiwgCisgICAgNjkwODcsIDY5MDkyLCA2OTA5NywgNjkxMDEsIDY5MTA2LCA2OTExMSwgNjkxMTYsIDY5MTIxLCA2OTEyNiwgNjkxMzAsIAorICAgIDY5MTM1LCA2OTEzOSwgNjkxNDQsIDY5MTQ4LCA2OTE1MywgNjkxNTcsIDY5MTYxLCA2OTE2NSwgNjkxNzAsIDY5MTc1LCAKKyAgICA2OTE4MCwgNjkxODgsIDY5MTk2LCA2OTIwNCwgNjkyMTIsIDY5MjE5LCA2OTIyNywgNjkyMzMsIDY5MjQxLCA2OTI0NSwgCisgICAgNjkyNDksIDY5MjUzLCA2OTI1NywgNjkyNjEsIDY5MjY1LCA2OTI2OSwgNjkyNzMsIDY5Mjc3LCA2OTI4MSwgNjkyODUsIAorICAgIDY5Mjg5LCA2OTI5MywgNjkyOTcsIDY5MzAxLCA2OTMwNSwgNjkzMDksIDY5MzEzLCA2OTMxNywgNjkzMjEsIDY5MzI1LCAKKyAgICA2OTMyOSwgNjkzMzMsIDY5MzM3LCA2OTM0MSwgNjkzNDUsIDY5MzQ5LCA2OTM1MywgNjkzNTcsIDY5MzYxLCA2OTM2NSwgCisgICAgNjkzNjksIDY5MzczLCA2OTM3NywgNjkzODEsIDY5Mzg1LCA2OTM4OCwgNjkzOTIsIDY5Mzk2LCA2OTQwMCwgNjk0MDQsIAorICAgIDY5NDA4LCA2OTQxMiwgNjk0MTYsIDY5NDIwLCA2OTQyNCwgNjk0MjgsIDY5NDMyLCA2OTQzNiwgNjk0NDAsIDY5NDQ0LCAKKyAgICA2OTQ0OCwgNjk0NTIsIDY5NDU2LCA2OTQ2MCwgNjk0NjQsIDY5NDY4LCA2OTQ3MiwgNjk0NzYsIDY5NDgwLCA2OTQ4NCwgCisgICAgNjk0ODgsIDY5NDkyLCA2OTQ5NiwgNjk1MDAsIDY5NTA0LCA2OTUwOCwgNjk1MTIsIDY5NTE2LCA2OTUyMCwgNjk1MjQsIAorICAgIDY5NTI4LCA2OTUzMiwgNjk1MzUsIDY5NTM5LCA2OTU0MywgNjk1NDYsIDY5NTUwLCA2OTU1NCwgNjk1NTgsIDY5NTYxLCAKKyAgICA2OTU2NSwgNjk1NjksIDY5NTczLCA2OTU3NywgNjk1ODEsIDY5NTg1LCA2OTU4OSwgNjk1OTMsIDY5NTk3LCA2OTYwMSwgCisgICAgNjk2MDUsIDY5NjA5LCA2OTYxMywgNjk2MTcsIDY5NjIwLCA2OTYyNCwgNjk2MjgsIDY5NjMxLCA2OTYzNSwgNjk2MzksIAorICAgIDY5NjQzLCA2OTY0NywgNjk2NTEsIDY5NjU1LCA2OTY1OCwgNjk2NjEsIDY5NjY1LCA2OTY2OSwgNjk2NzMsIDY5Njc2LCAKKyAgICA2OTY3OSwgNjk2ODMsIDY5Njg3LCA2OTY5MSwgNjk2OTUsIDY5Njk5LCA2OTcwMywgNjk3MDcsIDY5NzExLCA2OTcxNSwgCisgICAgNjk3MTksIDY5NzIzLCA2OTcyNywgNjk3MzEsIDY5NzM1LCA2OTczOSwgNjk3NDMsIDY5NzQ3LCA2OTc1MSwgNjk3NTUsIAorICAgIDY5NzU5LCA2OTc2MywgNjk3NjcsIDY5NzcxLCA2OTc3NSwgNjk3NzksIDY5NzgzLCA2OTc4NywgNjk3OTEsIDY5Nzk1LCAKKyAgICA2OTc5OSwgNjk4MDMsIDY5ODA3LCA2OTgxMSwgNjk4MTUsIDY5ODE5LCA2OTgyMywgNjk4MjcsIDY5ODMwLCA2OTgzNCwgCisgICAgNjk4MzgsIDY5ODQyLCA2OTg0NiwgNjk4NTAsIDY5ODU0LCA2OTg1OCwgNjk4NjIsIDY5ODY2LCA2OTg3MCwgNjk4NzQsIAorICAgIDY5ODc4LCA2OTg4MiwgNjk4ODYsIDY5ODkwLCA2OTg5NCwgNjk4OTgsIDY5OTAyLCA2OTkwNiwgNjk5MTAsIDY5OTE0LCAKKyAgICA2OTkxOCwgNjk5MjIsIDY5OTI2LCA2OTkzMCwgNjk5MzQsIDY5OTM4LCA2OTk0MiwgNjk5NDYsIDY5OTUwLCA2OTk1NCwgCisgICAgNjk5NTgsIDY5OTYyLCA2OTk2NiwgNjk5NzAsIDY5OTc0LCA2OTk3NywgNjk5ODEsIDY5OTg1LCA2OTk4OSwgNjk5OTMsIAorICAgIDY5OTk3LCA3MDAwMSwgNzAwMDUsIDcwMDA5LCA3MDAxMywgNzAwMTcsIDcwMDIxLCA3MDAyNSwgNzAwMjksIDcwMDMzLCAKKyAgICA3MDAzNywgNzAwNDEsIDcwMDQ0LCA3MDA0OCwgNzAwNTIsIDcwMDU2LCA3MDA2MCwgNzAwNjQsIDcwMDY4LCA3MDA3MiwgCisgICAgNzAwNzYsIDcwMDgwLCA3MDA4NCwgNzAwODgsIDcwMDkyLCA3MDA5NiwgNzAxMDAsIDcwMTA0LCA3MDEwOCwgNzAxMTIsIAorICAgIDcwMTE2LCA3MDEyMCwgNzAxMjQsIDcwMTI4LCA3MDEzMSwgNzAxMzUsIDcwMTM5LCA3MDE0MywgNzAxNDcsIDcwMTUxLCAKKyAgICA3MDE1NSwgNzAxNTksIDcwMTYzLCA3MDE2NywgNzAxNzEsIDcwMTc1LCA3MDE3OSwgNzAxODMsIDcwMTg3LCA3MDE5MSwgCisgICAgNzAxOTUsIDcwMTk5LCA3MDIwMywgNzAyMDcsIDcwMjExLCA3MDIxNSwgNzAyMTksIDcwMjIzLCA3MDIyNywgNzAyMzEsIAorICAgIDcwMjM1LCA3MDIzOSwgNzAyNDMsIDcwMjQ3LCA3MDI1MSwgNzAyNTUsIDcwMjU5LCA3MDI2MywgNzAyNjcsIDcwMjcxLCAKKyAgICA3MDI3NSwgNzAyNzksIDcwMjgzLCA3MDI4NywgNzAyOTEsIDcwMjk1LCA3MDI5OSwgNzAzMDMsIDcwMzA2LCA3MDMxMSwgCisgICAgNzAzMTUsIDcwMzIxLCA3MDMyNiwgNzAzMzIsIDcwMzM2LCA3MDM0MCwgNzAzNDQsIDcwMzQ4LCA3MDM1MiwgNzAzNTYsIAorICAgIDcwMzYwLCA3MDM2NCwgNzAzNjgsIDcwMzcyLCA3MDM3NiwgNzAzODAsIDcwMzg0LCA3MDM4OCwgNzAzOTEsIDcwMzk0LCAKKyAgICA3MDM5NywgNzA0MDAsIDcwNDAzLCA3MDQwNiwgNzA0MDksIDcwNDEyLCA3MDQxNSwgNzA0MjAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwNDI2LCA3MDQzMSwgNzA0MzYsIDcwNDQxLCAKKyAgICA3MDQ0NiwgNzA0NTMsIDcwNDYwLCA3MDQ2NSwgNzA0NzAsIDcwNDc1LCA3MDQ4MCwgNzA0ODcsIDcwNDk0LCA3MDUwMSwgCisgICAgNzA1MDgsIDcwNTE1LCA3MDUyMiwgNzA1MzIsIDcwNTQyLCA3MDU0OSwgNzA1NTYsIDcwNTYzLCA3MDU3MCwgNzA1NzYsIAorICAgIDcwNTgyLCA3MDU5MSwgNzA2MDAsIDcwNjA3LCA3MDYxNCwgNzA2MjUsIDcwNjM2LCA3MDY0MSwgNzA2NDYsIDcwNjUzLCAKKyAgICA3MDY2MCwgNzA2NjcsIDcwNjc0LCA3MDY4MSwgNzA2ODgsIDcwNjk1LCA3MDcwMiwgNzA3MDgsIDcwNzE0LCA3MDcyMCwgCisgICAgNzA3MjYsIDcwNzMzLCA3MDc0MCwgNzA3NDUsIDcwNzQ5LCA3MDc1NiwgNzA3NjMsIDcwNzcwLCA3MDc3NCwgNzA3ODEsIAorICAgIDcwNzg1LCA3MDc5MCwgNzA3OTQsIDcwODAwLCA3MDgwNSwgNzA4MTEsIDcwODE2LCA3MDgyMCwgNzA4MjQsIDcwODI3LCAKKyAgICA3MDgzMCwgNzA4MzUsIDcwODQwLCA3MDg0NSwgNzA4NTAsIDcwODU1LCA3MDg2MCwgNzA4NjUsIDcwODcwLCA3MDg3NSwgCisgICAgNzA4ODAsIDcwODg5LCA3MDg5OCwgNzA5MDMsIDcwOTA4LCA3MDkxMywgNzA5MTgsIDcwOTIzLCA3MDkyOCwgNzA5MzMsIAorICAgIDcwOTM4LCA3MDk0MywgNzA5NDgsIDcwOTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDk1OCwgNzA5NjQsIDcwOTY3LCAKKyAgICA3MDk3MCwgNzA5NzMsIDcwOTc3LCA3MDk4MSwgNzA5ODUsIDcwOTg5LCA3MDk5MiwgNzA5OTYsIDcwOTk5LCA3MTAwMywgCisgICAgNzEwMDYsIDcxMDEwLCA3MTAxNCwgNzEwMTgsIDcxMDIyLCA3MTAyNiwgNzEwMzAsIDcxMDM0LCA3MTAzNywgNzEwNDEsIAorICAgIDcxMDQ1LCA3MTA0OSwgNzEwNTMsIDcxMDU3LCA3MTA2MSwgNzEwNjUsIDcxMDY5LCA3MTA3MywgNzEwNzcsIDcxMDgxLCAKKyAgICA3MTA4NSwgNzEwODksIDcxMDkzLCA3MTA5NiwgNzExMDAsIDcxMTA0LCA3MTEwOCwgNzExMTIsIDcxMTE2LCA3MTEyMCwgCisgICAgNzExMjQsIDcxMTI4LCA3MTEzMiwgNzExMzYsIDcxMTQwLCA3MTE0NCwgNzExNDgsIDcxMTUyLCA3MTE1NiwgNzExNjAsIAorICAgIDcxMTY0LCA3MTE2OCwgNzExNzIsIDcxMTc2LCA3MTE4MCwgNzExODQsIDcxMTg4LCA3MTE5MiwgNzExOTUsIDcxMTk5LCAKKyAgICA3MTIwMywgNzEyMDcsIDcxMjExLCA3MTIxNSwgNzEyMTksIDcxMjIzLCA3MTIyNiwgNzEyMzAsIDcxMjM0LCA3MTIzOCwgCisgICAgNzEyNDIsIDcxMjQ2LCA3MTI1MCwgNzEyNTQsIDcxMjU4LCA3MTI2MiwgNzEyNjYsIDcxMjcwLCA3MTI3NCwgNzEyNzksIAorICAgIDcxMjg0LCA3MTI4NywgNzEyOTIsIDcxMjk1LCA3MTI5OCwgNzEzMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcxMzA1LCAKKyAgICA3MTMxNCwgNzEzMjMsIDcxMzMyLCA3MTM0MSwgNzEzNTAsIDcxMzU5LCA3MTM2OCwgNzEzNzcsIDcxMzg1LCA3MTM5MiwgCisgICAgNzE0MDAsIDcxNDA3LCA3MTQxNSwgNzE0MjUsIDcxNDM0LCA3MTQ0NCwgNzE0NTMsIDcxNDYzLCA3MTQ3MSwgNzE0NzgsIAorICAgIDcxNDg2LCA3MTQ5MywgNzE1MDEsIDcxNTA2LCA3MTUxMSwgNzE1MTYsIDcxNTI1LCA3MTUzMSwgNzE1MzcsIDcxNTQ0LCAKKyAgICA3MTU1MywgNzE1NjEsIDcxNTY5LCA3MTU3NywgNzE1ODQsIDcxNTkxLCA3MTU5OCwgNzE2MDUsIDcxNjEwLCA3MTYxNSwgCisgICAgNzE2MjAsIDcxNjI1LCA3MTYzMCwgNzE2MzUsIDcxNjQwLCA3MTY0NSwgNzE2NTMsIDcxNjYxLCA3MTY2NywgNzE2NzMsIAorICAgIDcxNjc4LCA3MTY4MywgNzE2ODgsIDcxNjkzLCA3MTY5OCwgNzE3MDMsIDcxNzA4LCA3MTcxMywgNzE3MjEsIDcxNzI5LCAKKyAgICA3MTczNCwgNzE3MzksIDcxNzQ5LCA3MTc1OSwgNzE3NjYsIDcxNzczLCA3MTc4MiwgNzE3OTEsIDcxODAzLCA3MTgxNSwgCisgICAgNzE4MjEsIDcxODI3LCA3MTgzNSwgNzE4NDMsIDcxODUzLCA3MTg2MywgNzE4NzAsIDcxODc3LCA3MTg4MiwgNzE4ODcsIAorICAgIDcxODk5LCA3MTkxMSwgNzE5MTksIDcxOTI3LCA3MTkzNywgNzE5NDcsIDcxOTU5LCA3MTk3MSwgNzE5ODAsIDcxOTg5LCAKKyAgICA3MTk5NiwgNzIwMDMsIDcyMDEwLCA3MjAxNywgNzIwMjYsIDcyMDM1LCA3MjA0MCwgNzIwNDUsIDcyMDUyLCA3MjA1OSwgCisgICAgNzIwNjYsIDcyMDczLCA3MjA4NSwgNzIwOTcsIDcyMTAyLCA3MjEwNywgNzIxMTIsIDcyMTE3LCA3MjEyMiwgNzIxMjcsIAorICAgIDcyMTMyLCA3MjEzNywgNzIxNDEsIDcyMTQ2LCA3MjE1MSwgNzIxNTYsIDcyMTYxLCA3MjE2NiwgNzIxNzIsIDcyMTc3LCAKKyAgICA3MjE4MiwgNzIxODksIDcyMTk2LCA3MjIwMywgNzIyMTAsIDcyMjE3LCA3MjIyNiwgNzIyMzUsIDcyMjQxLCA3MjI0NywgCisgICAgNzIyNTMsIDcyMjU5LCA3MjI2NiwgNzIyNzMsIDcyMjgwLCA3MjI4NywgNzIyOTQsIDcyMjk4LCA3MjMwNSwgNzIzMTAsIAorICAgIDcyMzE1LCA3MjMyMiwgMCwgNzIzMzUsIDcyMzQzLCA3MjM1MSwgNzIzNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDcyMzY1LCA3MjM3NCwgNzIzODMsIDcyMzkyLCA3MjQwMSwgNzI0MTAsIDcyNDE5LCA3MjQyOCwgNzI0MzcsIAorICAgIDcyNDQ2LCA3MjQ1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI0MzQsIAotICAgIDcyNDQxLCA3MjQ0NywgNzI0NTQsIDcyNDYyLCA3MjQ3MCwgNzI0NzcsIDcyNDg1LCA3MjQ5MiwgNzI0OTgsIDcyNTA0LCAKLSAgICA3MjUxMSwgNzI1MTcsIDcyNTIzLCA3MjUyOSwgNzI1MzYsIDcyNTQzLCA3MjU1MCwgNzI1NTcsIDcyNTY0LCA3MjU3MSwgCi0gICAgNzI1NzgsIDcyNTg1LCA3MjU5MiwgNzI1OTksIDcyNjA2LCA3MjYxMywgNzI2MjAsIDcyNjI3LCA3MjYzMywgNzI2NDAsIAotICAgIDcyNjQ3LCA3MjY1NCwgNzI2NjEsIDcyNjY4LCA3MjY3NSwgNzI2ODIsIDcyNjg5LCA3MjY5NiwgNzI3MDMsIDcyNzEwLCAKLSAgICA3MjcxNywgNzI3MjQsIDcyNzMxLCA3MjczOCwgNzI3NDUsIDcyNzUyLCA3Mjc1OSwgNzI3NjcsIDcyNzc1LCA3Mjc4MywgCi0gICAgNzI3OTEsIDAsIDAsIDAsIDAsIDcyNzk5LCA3MjgwOCwgNzI4MTcsIDcyODI2LCA3MjgzNSwgNzI4NDQsIDcyODUzLCAKLSAgICA3Mjg2MCwgNzI4NjcsIDcyODc0LCAwLCAwLCAwLCAwLCAwLCAwLCA3Mjg4MSwgNzI4ODUsIDcyODkwLCA3Mjg5NSwgNzI5MDAsIAotICAgIDcyOTA1LCA3MjkxMCwgNzI5MTUsIDcyOTIwLCA3MjkyNSwgNzI5MzAsIDcyOTM1LCA3MjkzOSwgNzI5NDMsIDcyOTQ4LCAKLSAgICA3Mjk1MywgNzI5NTcsIDcyOTYyLCA3Mjk2NywgNzI5NzIsIDcyOTc3LCA3Mjk4MiwgNzI5ODcsIDcyOTkyLCA3Mjk5NiwgCi0gICAgNzMwMDAsIDczMDA1LCA3MzAxMCwgNzMwMTQsIDczMDE4LCA3MzAyMiwgNzMwMjYsIDczMDMwLCA3MzAzNCwgNzMwMzgsIAotICAgIDczMDQzLCA3MzA0OCwgNzMwNTMsIDczMDU4LCA3MzA2MywgNzMwNzAsIDczMDc2LCA3MzA4MSwgNzMwODYsIDczMDkxLCAKLSAgICA3MzA5NiwgNzMxMDIsIDczMTA5LCA3MzExNSwgNzMxMjIsIDczMTI4LCA3MzEzNCwgNzMxMzksIDczMTQ2LCA3MzE1MiwgCi0gICAgNzMxNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMTYzLCA3MzE2NywgNzMxNzEsIDczMTc0LCA3MzE3OCwgNzMxODEsIAotICAgIDczMTg1LCA3MzE4OCwgNzMxOTIsIDczMTk2LCA3MzIwMSwgNzMyMDUsIDczMjEwLCA3MzIxMywgNzMyMTcsIDczMjIxLCAKLSAgICA3MzIyNCwgNzMyMjgsIDczMjMyLCA3MzIzNSwgNzMyMzksIDczMjQzLCA3MzI0NywgNzMyNTEsIDczMjU1LCA3MzI1OSwgCi0gICAgNzMyNjMsIDczMjY3LCA3MzI3MSwgNzMyNzUsIDczMjc5LCA3MzI4MywgNzMyODcsIDczMjkxLCA3MzI5NSwgNzMyOTksIAotICAgIDczMzAzLCA3MzMwNywgNzMzMTAsIDczMzEzLCA3MzMxNywgNzMzMjEsIDczMzI1LCA3MzMyOCwgNzMzMzEsIDczMzM0LCAKLSAgICA3MzMzOCwgNzMzNDIsIDczMzQ2LCA3MzM1MCwgNzMzNTMsIDczMzU2LCA3MzM2MCwgNzMzNjUsIDczMzcwLCA3MzM3NCwgCi0gICAgNzMzNzksIDczMzgzLCA3MzM4OCwgNzMzOTMsIDczMzk5LCA3MzQwNCwgNzM0MTAsIDczNDE0LCA3MzQxOSwgNzM0MjQsIAotICAgIDczNDI4LCA3MzQzMywgNzM0MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczNDQyLCA3MzQ0NSwgNzM0NDksIAotICAgIDczNDUzLCA3MzQ1NiwgNzM0NTksIDczNDYyLCA3MzQ2NSwgNzM0NjgsIDczNDcxLCA3MzQ3NCwgNzM0NzcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDczNDgwLCA3MzQ4NSwgNzM0ODksIDczNDkzLCA3MzQ5NywgNzM1MDEsIDczNTA1LCA3MzUwOSwgNzM1MTMsIAotICAgIDczNTE3LCA3MzUyMSwgNzM1MjUsIDczNTI5LCA3MzUzMywgNzM1MzcsIDczNTQxLCA3MzU0NSwgNzM1NTAsIDczNTU1LCAKLSAgICA3MzU2MSwgNzM1NjcsIDczNTc0LCA3MzU3OSwgNzM1ODQsIDczNTkwLCA3MzU5NCwgNzM1OTksIDczNjAyLCAwLCAwLCAwLCAKLSAgICAwLCA3MzYwNSwgNzM2MTIsIDczNjE4LCA3MzYyNCwgNzM2MzAsIDczNjM2LCA3MzY0MiwgNzM2NDgsIDczNjU0LCA3MzY2MCwgCi0gICAgNzM2NjYsIDczNjcyLCA3MzY3OSwgNzM2ODYsIDczNjkzLCA3MzY5OSwgNzM3MDYsIDczNzEzLCA3MzcyMCwgNzM3MjcsIAotICAgIDczNzM0LCA3Mzc0MCwgNzM3NDYsIDczNzUzLCA3Mzc1OSwgNzM3NjYsIDczNzczLCA3Mzc3OSwgNzM3ODUsIDczNzkyLCAKLSAgICA3Mzc5OSwgNzM4MDYsIDczODEyLCA3MzgxOSwgNzM4MjYsIDczODMyLCA3MzgzOSwgNzM4NDUsIDczODUyLCA3Mzg1OSwgCi0gICAgNzM4NjUsIDczODcxLCA3Mzg3OCwgNzM4ODQsIDczODkxLCA3Mzg5OCwgNzM5MDcsIDczOTE0LCA3MzkyMSwgNzM5MjUsIAotICAgIDczOTMwLCA3MzkzNSwgNzM5NDAsIDczOTQ1LCA3Mzk0OSwgNzM5NTMsIDczOTU4LCA3Mzk2MiwgNzM5NjcsIDczOTcyLCAKLSAgICA3Mzk3NywgNzM5ODEsIDczOTg1LCA3Mzk5MCwgNzM5OTQsIDczOTk5LCA3NDAwMywgNzQwMDgsIDc0MDEzLCA3NDAxOCwgCi0gICAgNzQwMjMsIDc0MDI3LCA3NDAzMiwgNzQwMzcsIDc0MDQyLCA3NDA0OCwgNzQwNTMsIDc0MDU5LCA3NDA2NSwgNzQwNzEsIAotICAgIDc0MDc3LCA3NDA4MywgNzQwODgsIDc0MDk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDA5OCwgCi0gICAgNzQxMDMsIDc0MTA3LCA3NDExMSwgNzQxMTUsIDc0MTE5LCA3NDEyMywgNzQxMjcsIDc0MTMxLCA3NDEzNSwgNzQxMzksIAotICAgIDc0MTQzLCA3NDE0NywgNzQxNTEsIDc0MTU1LCA3NDE1OSwgNzQxNjMsIDc0MTY3LCA3NDE3MSwgNzQxNzUsIDc0MTc5LCAKLSAgICA3NDE4MywgNzQxODcsIDc0MTkxLCA3NDE5NSwgNzQxOTksIDc0MjAzLCA3NDIwNywgNzQyMTEsIDc0MjE1LCAwLCAwLCAwLCAKLSAgICA3NDIxOSwgNzQyMjMsIDc0MjI3LCA3NDIzMSwgNzQyMzUsIDc0MjM4LCA3NDI0NCwgNzQyNDcsIDc0MjUxLCA3NDI1NCwgCi0gICAgNzQyNjAsIDc0MjY2LCA3NDI3NCwgNzQyNzcsIDc0MjgxLCA3NDI4NCwgNzQyODcsIDc0MjkzLCA3NDI5OSwgNzQzMDMsIAotICAgIDc0MzA5LCA3NDMxMywgNzQzMTcsIDc0MzIzLCA3NDMyNywgNzQzMzMsIDc0MzM5LCA3NDM0MywgNzQzNDcsIDc0MzUzLCAKLSAgICA3NDM1NywgNzQzNjMsIDc0MzY5LCA3NDM3MywgNzQzNzksIDc0MzgzLCA3NDM4OSwgNzQzOTIsIDc0Mzk1LCA3NDQwMSwgCi0gICAgNzQ0MDUsIDc0NDExLCA3NDQxNCwgNzQ0MTcsIDc0NDIwLCA3NDQyNiwgNzQ0MzAsIDc0NDM0LCA3NDQ0MCwgNzQ0NDYsIAotICAgIDc0NDQ5LCA3NDQ1MiwgNzQ0NTgsIDc0NDYzLCA3NDQ2OCwgNzQ0NzMsIDc0NDgwLCA3NDQ4NSwgNzQ0OTIsIDc0NDk3LCAKLSAgICA3NDUwNCwgNzQ1MDksIDc0NTE0LCA3NDUxOSwgNzQ1MjQsIDc0NTI3LCA3NDUzMSwgNzQ1MzUsIDc0NTQwLCA3NDU0NSwgCi0gICAgNzQ1NTAsIDc0NTU1LCA3NDU2MCwgNzQ1NjUsIDc0NTcwLCA3NDU3NSwgNzQ1ODIsIDc0NTg3LCAwLCA3NDU5NCwgNzQ1OTcsIAotICAgIDc0NjAxLCA3NDYwNCwgNzQ2MDcsIDc0NjEwLCA3NDYxMywgNzQ2MTYsIDc0NjE5LCA3NDYyMiwgNzQ2MjUsIDAsIDAsIDAsIAotICAgIDAsIDc0NjI4LCA3NDYzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ2NDAsIDc0NjQzLCA3NDY0NiwgNzQ2NDksIDc0NjUyLCAKLSAgICA3NDY1NiwgNzQ2NTksIDc0NjYyLCA3NDY2NiwgNzQ2NzAsIDc0Njc0LCA3NDY3OCwgNzQ2ODIsIDc0Njg2LCA3NDY5MCwgCi0gICAgNzQ2OTQsIDc0Njk4LCA3NDcwMiwgNzQ3MDYsIDc0NzEwLCA3NDcxNCwgNzQ3MTgsIDc0NzIyLCA3NDcyNiwgNzQ3MzAsIAotICAgIDc0NzMzLCA3NDczNywgNzQ3NDAsIDc0NzQ0LCA3NDc0OCwgNzQ3NTIsIDc0NzU2LCA3NDc2MCwgNzQ3NjMsIDc0NzY3LCAKLSAgICA3NDc3MCwgNzQ3NzMsIDc0Nzc3LCA3NDc4MSwgNzQ3ODUsIDc0Nzg4LCA3NDc5MSwgNzQ3OTYsIDc0ODAwLCA3NDgwNSwgCi0gICAgNzQ4MTAsIDc0ODE0LCA3NDgxOSwgNzQ4MjMsIDc0ODI4LCA3NDgzMywgNzQ4MzgsIDc0ODQyLCA3NDg0NiwgNzQ4NTEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0ODU2LCA3NDg2MSwgNzQ4NjYsIDc0ODcxLCA3NDg3NywgNzQ4ODIsIDc0ODg3LCAKLSAgICA3NDg5MiwgNzQ4OTcsIDc0OTAyLCA3NDkwNiwgNzQ5MTAsIDc0OTE1LCA3NDkyMCwgMCwgMCwgNzQ5MjYsIDc0OTMwLCAKLSAgICA3NDkzMywgNzQ5MzYsIDc0OTM5LCA3NDk0MiwgNzQ5NDUsIDc0OTQ4LCA3NDk1MSwgNzQ5NTQsIDAsIDAsIDc0OTU3LCAKLSAgICA3NDk2MiwgNzQ5NjcsIDc0OTczLCA3NDk4MCwgNzQ5ODYsIDc0OTkyLCA3NDk5OCwgNzUwMDQsIDc1MDEwLCA3NTAxNiwgCi0gICAgNzUwMjIsIDc1MDI4LCA3NTAzNCwgNzUwNDAsIDc1MDQ2LCA3NTA1MSwgNzUwNTYsIDc1MDYxLCA3NTA2NywgNzUwNzMsIAotICAgIDc1MDgwLCA3NTA4NiwgNzUwOTIsIDc1MDk3LCA3NTEwNCwgNzUxMTEsIDc1MTE4LCA3NTEyNCwgNzUxMjksIDc1MTM0LCAKLSAgICA3NTEzOSwgMCwgMCwgMCwgMCwgNzUxNDcsIDc1MTUzLCA3NTE1OSwgNzUxNjUsIDc1MTcxLCA3NTE3NywgNzUxODMsIAotICAgIDc1MTg5LCA3NTE5NSwgNzUyMDEsIDc1MjA3LCA3NTIxMywgNzUyMTksIDc1MjI1LCA3NTIzMSwgNzUyMzcsIDc1MjQzLCAKLSAgICA3NTI0OSwgNzUyNTUsIDc1MjYxLCA3NTI2NywgNzUyNzIsIDc1Mjc3LCA3NTI4MywgNzUyODksIDc1Mjk1LCA3NTMwMSwgCi0gICAgNzUzMDcsIDc1MzEzLCA3NTMxOSwgNzUzMjUsIDc1MzMxLCA3NTMzNywgNzUzNDMsIDc1MzQ5LCA3NTM1NSwgNzUzNjEsIAotICAgIDc1MzY3LCA3NTM3MywgNzUzNzksIDc1Mzg1LCA3NTM5MSwgNzUzOTcsIDc1NDAzLCA3NTQwOSwgNzU0MTUsIDc1NDIxLCAKLSAgICA3NTQyNiwgNzU0MzEsIDc1NDM3LCA3NTQ0MiwgNzU0NDYsIDc1NDUxLCA3NTQ1NSwgNzU0NTksIDc1NDYzLCA3NTQ2OSwgCi0gICAgNzU0NzQsIDc1NDc5LCA3NTQ4NCwgNzU0ODksIDc1NDk0LCA3NTQ5OSwgNzU1MDQsIDc1NTExLCA3NTUxOCwgNzU1MjUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyNDYyLCA3MjQ2OSwgNzI0NzUsIDcyNDgyLCA3MjQ5MCwgNzI0OTgsIAorICAgIDcyNTA1LCA3MjUxMywgNzI1MjAsIDcyNTI2LCA3MjUzMiwgNzI1MzksIDcyNTQ1LCA3MjU1MSwgNzI1NTcsIDcyNTY0LCAKKyAgICA3MjU3MSwgNzI1NzgsIDcyNTg1LCA3MjU5MiwgNzI1OTksIDcyNjA2LCA3MjYxMywgNzI2MjAsIDcyNjI3LCA3MjYzNCwgCisgICAgNzI2NDEsIDcyNjQ4LCA3MjY1NSwgNzI2NjEsIDcyNjY4LCA3MjY3NSwgNzI2ODIsIDcyNjg5LCA3MjY5NiwgNzI3MDMsIAorICAgIDcyNzEwLCA3MjcxNywgNzI3MjQsIDcyNzMxLCA3MjczOCwgNzI3NDUsIDcyNzUyLCA3Mjc1OSwgNzI3NjYsIDcyNzczLCAKKyAgICA3Mjc4MCwgNzI3ODcsIDcyNzk1LCA3MjgwMywgNzI4MTEsIDcyODE5LCAwLCAwLCAwLCAwLCA3MjgyNywgNzI4MzYsIAorICAgIDcyODQ1LCA3Mjg1NCwgNzI4NjMsIDcyODcyLCA3Mjg4MSwgNzI4ODgsIDcyODk1LCA3MjkwMiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNzI5MDksIDcyOTEzLCA3MjkxOCwgNzI5MjMsIDcyOTI4LCA3MjkzMywgNzI5MzgsIDcyOTQzLCA3Mjk0OCwgNzI5NTMsIAorICAgIDcyOTU4LCA3Mjk2MywgNzI5NjcsIDcyOTcxLCA3Mjk3NiwgNzI5ODEsIDcyOTg1LCA3Mjk5MCwgNzI5OTUsIDczMDAwLCAKKyAgICA3MzAwNSwgNzMwMTAsIDczMDE1LCA3MzAyMCwgNzMwMjQsIDczMDI4LCA3MzAzMywgNzMwMzgsIDczMDQyLCA3MzA0NiwgCisgICAgNzMwNTAsIDczMDU0LCA3MzA1OCwgNzMwNjIsIDczMDY2LCA3MzA3MSwgNzMwNzYsIDczMDgxLCA3MzA4NiwgNzMwOTEsIAorICAgIDczMDk4LCA3MzEwNCwgNzMxMDksIDczMTE0LCA3MzExOSwgNzMxMjQsIDczMTMwLCA3MzEzNywgNzMxNDMsIDczMTUwLCAKKyAgICA3MzE1NiwgNzMxNjIsIDczMTY3LCA3MzE3NCwgNzMxODAsIDczMTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzE5MSwgCisgICAgNzMxOTUsIDczMTk5LCA3MzIwMiwgNzMyMDYsIDczMjA5LCA3MzIxMywgNzMyMTYsIDczMjIwLCA3MzIyNCwgNzMyMjksIAorICAgIDczMjMzLCA3MzIzOCwgNzMyNDEsIDczMjQ1LCA3MzI0OSwgNzMyNTIsIDczMjU2LCA3MzI2MCwgNzMyNjMsIDczMjY3LCAKKyAgICA3MzI3MSwgNzMyNzUsIDczMjc5LCA3MzI4MywgNzMyODcsIDczMjkxLCA3MzI5NSwgNzMyOTksIDczMzAzLCA3MzMwNywgCisgICAgNzMzMTEsIDczMzE1LCA3MzMxOSwgNzMzMjMsIDczMzI3LCA3MzMzMSwgNzMzMzUsIDczMzM4LCA3MzM0MSwgNzMzNDUsIAorICAgIDczMzQ5LCA3MzM1MywgNzMzNTYsIDczMzU5LCA3MzM2MiwgNzMzNjYsIDczMzcwLCA3MzM3NCwgNzMzNzgsIDczMzgxLCAKKyAgICA3MzM4NCwgNzMzODgsIDczMzkzLCA3MzM5OCwgNzM0MDIsIDczNDA3LCA3MzQxMSwgNzM0MTYsIDczNDIxLCA3MzQyNywgCisgICAgNzM0MzIsIDczNDM4LCA3MzQ0MiwgNzM0NDcsIDczNDUyLCA3MzQ1NiwgNzM0NjEsIDczNDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3MzQ3MCwgNzM0NzMsIDczNDc3LCA3MzQ4MSwgNzM0ODQsIDczNDg3LCA3MzQ5MCwgNzM0OTMsIDczNDk2LCAKKyAgICA3MzQ5OSwgNzM1MDIsIDczNTA1LCAwLCAwLCAwLCAwLCAwLCAwLCA3MzUwOCwgNzM1MTMsIDczNTE3LCA3MzUyMSwgNzM1MjUsIAorICAgIDczNTI5LCA3MzUzMywgNzM1MzcsIDczNTQxLCA3MzU0NSwgNzM1NDksIDczNTUzLCA3MzU1NywgNzM1NjEsIDczNTY1LCAKKyAgICA3MzU2OSwgNzM1NzMsIDczNTc4LCA3MzU4MywgNzM1ODksIDczNTk1LCA3MzYwMiwgNzM2MDcsIDczNjEyLCA3MzYxOCwgCisgICAgNzM2MjIsIDczNjI3LCA3MzYzMCwgMCwgMCwgMCwgMCwgNzM2MzMsIDczNjQwLCA3MzY0NiwgNzM2NTIsIDczNjU4LCAKKyAgICA3MzY2NCwgNzM2NzAsIDczNjc2LCA3MzY4MiwgNzM2ODgsIDczNjk0LCA3MzcwMCwgNzM3MDcsIDczNzE0LCA3MzcyMSwgCisgICAgNzM3MjcsIDczNzM0LCA3Mzc0MSwgNzM3NDgsIDczNzU1LCA3Mzc2MiwgNzM3NjgsIDczNzc0LCA3Mzc4MSwgNzM3ODcsIAorICAgIDczNzk0LCA3MzgwMSwgNzM4MDcsIDczODEzLCA3MzgyMCwgNzM4MjcsIDczODM0LCA3Mzg0MCwgNzM4NDcsIDczODU0LCAKKyAgICA3Mzg2MCwgNzM4NjcsIDczODczLCA3Mzg4MCwgNzM4ODcsIDczODkzLCA3Mzg5OSwgNzM5MDYsIDczOTEyLCA3MzkxOSwgCisgICAgNzM5MjYsIDczOTM1LCA3Mzk0MiwgNzM5NDksIDczOTUzLCA3Mzk1OCwgNzM5NjMsIDczOTY4LCA3Mzk3MywgNzM5NzcsIAorICAgIDczOTgxLCA3Mzk4NiwgNzM5OTAsIDczOTk1LCA3NDAwMCwgNzQwMDUsIDc0MDA5LCA3NDAxMywgNzQwMTgsIDc0MDIyLCAKKyAgICA3NDAyNywgNzQwMzEsIDc0MDM2LCA3NDA0MSwgNzQwNDYsIDc0MDUxLCA3NDA1NSwgNzQwNjAsIDc0MDY1LCA3NDA3MCwgCisgICAgNzQwNzYsIDc0MDgxLCA3NDA4NywgNzQwOTMsIDc0MDk5LCA3NDEwNSwgNzQxMTEsIDc0MTE2LCA3NDEyMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQxMjYsIDc0MTMxLCA3NDEzNSwgNzQxMzksIDc0MTQzLCA3NDE0NywgNzQxNTEsIAorICAgIDc0MTU1LCA3NDE1OSwgNzQxNjMsIDc0MTY3LCA3NDE3MSwgNzQxNzUsIDc0MTc5LCA3NDE4MywgNzQxODcsIDc0MTkxLCAKKyAgICA3NDE5NSwgNzQxOTksIDc0MjAzLCA3NDIwNywgNzQyMTEsIDc0MjE1LCA3NDIxOSwgNzQyMjMsIDc0MjI3LCA3NDIzMSwgCisgICAgNzQyMzUsIDc0MjM5LCA3NDI0MywgMCwgMCwgMCwgNzQyNDcsIDc0MjUxLCA3NDI1NSwgNzQyNTksIDc0MjYzLCA3NDI2NiwgCisgICAgNzQyNzIsIDc0Mjc1LCA3NDI3OSwgNzQyODIsIDc0Mjg4LCA3NDI5NCwgNzQzMDIsIDc0MzA1LCA3NDMwOSwgNzQzMTIsIAorICAgIDc0MzE1LCA3NDMyMSwgNzQzMjcsIDc0MzMxLCA3NDMzNywgNzQzNDEsIDc0MzQ1LCA3NDM1MSwgNzQzNTUsIDc0MzYxLCAKKyAgICA3NDM2NywgNzQzNzEsIDc0Mzc1LCA3NDM4MSwgNzQzODUsIDc0MzkxLCA3NDM5NywgNzQ0MDEsIDc0NDA3LCA3NDQxMSwgCisgICAgNzQ0MTcsIDc0NDIwLCA3NDQyMywgNzQ0MjksIDc0NDMzLCA3NDQzOSwgNzQ0NDIsIDc0NDQ1LCA3NDQ0OCwgNzQ0NTQsIAorICAgIDc0NDU4LCA3NDQ2MiwgNzQ0NjgsIDc0NDc0LCA3NDQ3NywgNzQ0ODAsIDc0NDg2LCA3NDQ5MSwgNzQ0OTYsIDc0NTAxLCAKKyAgICA3NDUwOCwgNzQ1MTMsIDc0NTIwLCA3NDUyNSwgNzQ1MzIsIDc0NTM3LCA3NDU0MiwgNzQ1NDcsIDc0NTUyLCA3NDU1NSwgCisgICAgNzQ1NTksIDc0NTYzLCA3NDU2OCwgNzQ1NzMsIDc0NTc4LCA3NDU4MywgNzQ1ODgsIDc0NTkzLCA3NDU5OCwgNzQ2MDMsIAorICAgIDc0NjEwLCA3NDYxNSwgMCwgNzQ2MjIsIDc0NjI1LCA3NDYyOSwgNzQ2MzIsIDc0NjM1LCA3NDYzOCwgNzQ2NDEsIDc0NjQ0LCAKKyAgICA3NDY0NywgNzQ2NTAsIDc0NjUzLCAwLCAwLCAwLCAwLCA3NDY1NiwgNzQ2NjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc1NTMyLCA3NTUzNywgNzU1NDIsIDc1NTQ3LCA3NTU1NCwgNzU1NjEsIDc1NTY1LCA3NTU2OSwgNzU1NzQsIDc1NTc5LCAKLSAgICA3NTU4NCwgNzU1ODksIDc1NTk0LCA3NTU5OSwgNzU2MDQsIDc1NjA5LCA3NTYxNCwgNzU2MjAsIDc1NjI2LCA3NTYzMiwgCi0gICAgNzU2MzgsIDc1NjQ0LCA3NTY0OCwgNzU2NTQsIDc1NjU4LCA3NTY2NCwgNzU2NzEsIDc1Njc3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3NTY4MSwgNzU2ODUsIDc1Njg5LCA3NTY5MywgNzU2OTcsIDc1NzAxLCAwLCAwLCA3NTcwNSwgNzU3MDksIAotICAgIDc1NzEzLCA3NTcxNywgNzU3MjEsIDc1NzI1LCAwLCAwLCA3NTcyOSwgNzU3MzMsIDc1NzM3LCA3NTc0MSwgNzU3NDUsIAotICAgIDc1NzQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTc1MywgNzU3NTcsIDc1NzYxLCA3NTc2NSwgNzU3NjksIAotICAgIDc1NzczLCA3NTc3NywgMCwgNzU3ODEsIDc1Nzg1LCA3NTc4OSwgNzU3OTMsIDc1Nzk3LCA3NTgwMSwgNzU4MDUsIDAsIDAsIAorICAgIDc0NjY4LCA3NDY3MSwgNzQ2NzQsIDc0Njc3LCA3NDY4MCwgNzQ2ODQsIDc0Njg3LCA3NDY5MCwgNzQ2OTQsIDc0Njk4LCAKKyAgICA3NDcwMiwgNzQ3MDYsIDc0NzEwLCA3NDcxNCwgNzQ3MTgsIDc0NzIyLCA3NDcyNiwgNzQ3MzAsIDc0NzM0LCA3NDczOCwgCisgICAgNzQ3NDIsIDc0NzQ2LCA3NDc1MCwgNzQ3NTQsIDc0NzU4LCA3NDc2MSwgNzQ3NjUsIDc0NzY4LCA3NDc3MiwgNzQ3NzYsIAorICAgIDc0NzgwLCA3NDc4NCwgNzQ3ODgsIDc0NzkxLCA3NDc5NSwgNzQ3OTgsIDc0ODAxLCA3NDgwNSwgNzQ4MDksIDc0ODEzLCAKKyAgICA3NDgxNiwgNzQ4MTksIDc0ODI0LCA3NDgyOCwgNzQ4MzMsIDc0ODM4LCA3NDg0MiwgNzQ4NDcsIDc0ODUxLCA3NDg1NiwgCisgICAgNzQ4NjEsIDc0ODY2LCA3NDg3MCwgNzQ4NzQsIDc0ODc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDg4NCwgCisgICAgNzQ4ODksIDc0ODk0LCA3NDg5OSwgNzQ5MDUsIDc0OTEwLCA3NDkxNSwgNzQ5MjAsIDc0OTI1LCA3NDkzMCwgNzQ5MzQsIAorICAgIDc0OTM4LCA3NDk0MywgNzQ5NDgsIDAsIDAsIDc0OTU0LCA3NDk1OCwgNzQ5NjEsIDc0OTY0LCA3NDk2NywgNzQ5NzAsIAorICAgIDc0OTczLCA3NDk3NiwgNzQ5NzksIDc0OTgyLCAwLCAwLCA3NDk4NSwgNzQ5OTAsIDc0OTk1LCA3NTAwMSwgNzUwMDgsIAorICAgIDc1MDE0LCA3NTAyMCwgNzUwMjYsIDc1MDMyLCA3NTAzOCwgNzUwNDQsIDc1MDUwLCA3NTA1NiwgNzUwNjIsIDc1MDY4LCAKKyAgICA3NTA3NCwgNzUwNzksIDc1MDg0LCA3NTA4OSwgNzUwOTUsIDc1MTAxLCA3NTEwOCwgNzUxMTQsIDc1MTIwLCA3NTEyNSwgCisgICAgNzUxMzIsIDc1MTM5LCA3NTE0NiwgNzUxNTIsIDc1MTU3LCA3NTE2MiwgNzUxNjcsIDAsIDAsIDAsIDAsIDc1MTc1LCAKKyAgICA3NTE4MSwgNzUxODcsIDc1MTkzLCA3NTE5OSwgNzUyMDUsIDc1MjExLCA3NTIxNywgNzUyMjMsIDc1MjI5LCA3NTIzNSwgCisgICAgNzUyNDEsIDc1MjQ3LCA3NTI1MywgNzUyNTksIDc1MjY1LCA3NTI3MSwgNzUyNzcsIDc1MjgzLCA3NTI4OSwgNzUyOTUsIAorICAgIDc1MzAwLCA3NTMwNSwgNzUzMTEsIDc1MzE3LCA3NTMyMywgNzUzMjksIDc1MzM1LCA3NTM0MSwgNzUzNDcsIDc1MzUzLCAKKyAgICA3NTM1OSwgNzUzNjUsIDc1MzcxLCA3NTM3NywgNzUzODMsIDc1Mzg5LCA3NTM5NSwgNzU0MDEsIDc1NDA3LCA3NTQxMywgCisgICAgNzU0MTksIDc1NDI1LCA3NTQzMSwgNzU0MzcsIDc1NDQzLCA3NTQ0OSwgNzU0NTQsIDc1NDU5LCA3NTQ2NSwgNzU0NzAsIAorICAgIDc1NDc0LCA3NTQ3OSwgNzU0ODMsIDc1NDg3LCA3NTQ5MSwgNzU0OTcsIDc1NTAyLCA3NTUwNywgNzU1MTIsIDc1NTE3LCAKKyAgICA3NTUyMiwgNzU1MjcsIDc1NTMyLCA3NTUzOSwgNzU1NDYsIDc1NTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTU2MCwgNzU1NjUsIDc1NTcwLCA3NTU3NSwgCisgICAgNzU1ODIsIDc1NTg5LCA3NTU5MywgNzU1OTcsIDc1NjAyLCA3NTYwNywgNzU2MTIsIDc1NjE3LCA3NTYyMiwgNzU2MjcsIAorICAgIDc1NjMyLCA3NTYzNywgNzU2NDIsIDc1NjQ4LCA3NTY1NCwgNzU2NjAsIDc1NjY2LCA3NTY3MiwgNzU2NzYsIDc1NjgyLCAKKyAgICA3NTY4NiwgNzU2OTIsIDc1Njk5LCA3NTcwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU3MDksIDc1NzEzLCAKKyAgICA3NTcxNywgNzU3MjEsIDc1NzI1LCA3NTcyOSwgMCwgMCwgNzU3MzMsIDc1NzM3LCA3NTc0MSwgNzU3NDUsIDc1NzQ5LCAKKyAgICA3NTc1MywgMCwgMCwgNzU3NTcsIDc1NzYxLCA3NTc2NSwgNzU3NjksIDc1NzczLCA3NTc3NywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzU3ODEsIDc1Nzg1LCA3NTc4OSwgNzU3OTMsIDc1Nzk3LCA3NTgwMSwgNzU4MDUsIDAsIDc1ODA5LCAKKyAgICA3NTgxMywgNzU4MTcsIDc1ODIxLCA3NTgyNSwgNzU4MjksIDc1ODMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3NTgwOSwgNzU4MTQsIDc1ODE5LCA3NTgyNCwgNzU4MjksIDc1ODMzLCA3NTgzNywgNzU4NDIsIDc1ODQ3LCA3NTg1MiwgCi0gICAgNzU4NTcsIDc1ODYyLCA3NTg2NywgNzU4NzIsIDc1ODc3LCA3NTg4MiwgNzU4ODYsIDc1ODkxLCA3NTg5NiwgNzU5MDEsIAotICAgIDc1OTA2LCA3NTkxMSwgNzU5MTYsIDc1OTIxLCA3NTkyNiwgNzU5MzEsIDc1OTM2LCA3NTk0MSwgNzU5NDgsIDc1OTU1LCAKLSAgICA3NTk2MiwgNzU5NjksIDc1OTc2LCA3NTk4MywgNzU5OTAsIDc1OTk3LCA3NjAwMywgNzYwMDksIDc2MDE1LCA3NjAyMSwgCi0gICAgNzYwMjcsIDc2MDMzLCA3NjAzOSwgNzYwNDUsIDc2MDQ5LCA3NjA1NSwgMCwgMCwgNzYwNjEsIDc2MDY2LCA3NjA3MCwgCi0gICAgNzYwNzQsIDc2MDc4LCA3NjA4MiwgNzYwODYsIDc2MDkwLCA3NjA5NCwgNzYwOTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1ODM3LCA3NTg0MiwgNzU4NDcsIDc1ODUyLCAKKyAgICA3NTg1NywgNzU4NjEsIDc1ODY1LCA3NTg3MCwgNzU4NzUsIDc1ODgwLCA3NTg4NSwgNzU4OTAsIDc1ODk1LCA3NTkwMCwgCisgICAgNzU5MDUsIDc1OTEwLCA3NTkxNCwgNzU5MTksIDc1OTI0LCA3NTkyOSwgNzU5MzQsIDc1OTM5LCA3NTk0NCwgNzU5NDksIAorICAgIDc1OTU0LCA3NTk1OSwgNzU5NjQsIDc1OTY5LCA3NTk3NiwgNzU5ODMsIDc1OTkwLCA3NTk5NywgNzYwMDQsIDc2MDExLCAKKyAgICA3NjAxOCwgNzYwMjUsIDc2MDMxLCA3NjAzNywgNzYwNDMsIDc2MDQ5LCA3NjA1NSwgNzYwNjEsIDc2MDY3LCA3NjA3MywgCisgICAgNzYwNzcsIDc2MDgzLCAwLCAwLCA3NjA4OSwgNzYwOTQsIDc2MDk4LCA3NjEwMiwgNzYxMDYsIDc2MTEwLCA3NjExNCwgCisgICAgNzYxMTgsIDc2MTIyLCA3NjEyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzYxMDIsIAotICAgIDc2MTA2LCA3NjExMCwgNzYxMTQsIDc2MTE4LCA3NjEyMiwgNzYxMjYsIDc2MTMwLCA3NjEzNCwgNzYxMzgsIDc2MTQyLCAKLSAgICA3NjE0NiwgNzYxNTAsIDc2MTU0LCA3NjE1OCwgNzYxNjIsIDc2MTY2LCA3NjE3MCwgNzYxNzQsIDc2MTc4LCA3NjE4MiwgCi0gICAgNzYxODYsIDc2MTkwLCAwLCAwLCAwLCAwLCA3NjE5NCwgNzYxOTgsIDc2MjAyLCA3NjIwNiwgNzYyMTAsIDc2MjE0LCAKLSAgICA3NjIxOCwgNzYyMjIsIDc2MjI2LCA3NjIzMCwgNzYyMzQsIDc2MjM4LCA3NjI0MiwgNzYyNDYsIDc2MjUwLCA3NjI1NCwgCi0gICAgNzYyNTgsIDc2MjYyLCA3NjI2NiwgNzYyNzAsIDc2Mjc0LCA3NjI3OCwgNzYyODIsIDc2Mjg2LCA3NjI5MCwgNzYyOTQsIAotICAgIDc2Mjk4LCA3NjMwMiwgNzYzMDYsIDc2MzEwLCA3NjMxNCwgNzYzMTgsIDc2MzIyLCA3NjMyNiwgNzYzMzAsIDc2MzM0LCAKLSAgICA3NjMzOCwgNzYzNDIsIDc2MzQ2LCA3NjM1MCwgNzYzNTQsIDc2MzU4LCA3NjM2MiwgNzYzNjYsIDc2MzcwLCA3NjM3NCwgCi0gICAgNzYzNzgsIDc2MzgyLCA3NjM4NiwgMCwgMCwgMCwgMCwgNzYzOTAsIDc2Mzk0LCA3NjM5OCwgNzY0MDIsIDc2NDA2LCAKLSAgICA3NjQxMCwgNzY0MTQsIDc2NDE4LCA3NjQyMiwgNzY0MjYsIDc2NDMwLCA3NjQzNCwgNzY0MzgsIDc2NDQyLCA3NjQ0NiwgCi0gICAgNzY0NTAsIDc2NDU0LCA3NjQ1OCwgNzY0NjIsIDc2NDY2LCA3NjQ3MCwgNzY0NzQsIDc2NDc4LCA3NjQ4MiwgNzY0ODYsIAotICAgIDc2NDkwLCA3NjQ5NCwgNzY0OTgsIDc2NTAyLCA3NjUwNiwgNzY1MTAsIDc2NTE0LCA3NjUxOCwgNzY1MjIsIDc2NTI2LCAKLSAgICA3NjUzMCwgNzY1MzQsIDc2NTM4LCA3NjU0MiwgNzY1NDYsIDc2NTUwLCA3NjU1NCwgNzY1NTgsIDc2NTYyLCA3NjU2NiwgCi0gICAgNzY1NzAsIDc2NTc0LCA3NjU3OCwgNzY1ODIsIDc2NTg2LCA3NjU5MCwgNzY1OTQsIDc2NTk4LCA3NjYwMiwgNzY2MDYsIAotICAgIDc2NjEwLCA3NjYxNCwgNzY2MTgsIDc2NjIyLCA3NjYyNiwgNzY2MzAsIDc2NjM0LCA3NjYzOCwgNzY2NDIsIDc2NjQ2LCAKLSAgICA3NjY1MCwgNzY2NTQsIDc2NjU4LCA3NjY2MiwgNzY2NjYsIDc2NjcwLCA3NjY3NCwgNzY2NzgsIDc2NjgyLCA3NjY4NiwgCi0gICAgNzY2OTAsIDc2Njk0LCA3NjY5OCwgNzY3MDIsIDc2NzA2LCA3NjcxMCwgNzY3MTQsIDc2NzE4LCA3NjcyMiwgNzY3MjYsIAotICAgIDc2NzMwLCA3NjczNCwgNzY3MzgsIDc2NzQyLCA3Njc0NiwgNzY3NTAsIDc2NzU0LCA3Njc1OCwgNzY3NjIsIDc2NzY2LCAKLSAgICA3Njc3MCwgNzY3NzQsIDc2Nzc4LCA3Njc4MiwgNzY3ODYsIDc2NzkwLCA3Njc5NCwgNzY3OTgsIDc2ODAyLCA3NjgwNiwgCi0gICAgNzY4MTAsIDc2ODE0LCA3NjgxOCwgNzY4MjIsIDc2ODI2LCA3NjgzMCwgNzY4MzQsIDc2ODM4LCA3Njg0MiwgNzY4NDYsIAotICAgIDc2ODUwLCA3Njg1NCwgNzY4NTgsIDc2ODYyLCA3Njg2NiwgNzY4NzAsIDc2ODc0LCA3Njg3OCwgNzY4ODIsIDc2ODg2LCAKLSAgICA3Njg5MCwgNzY4OTQsIDc2ODk4LCA3NjkwMiwgNzY5MDYsIDc2OTEwLCA3NjkxNCwgNzY5MTgsIDc2OTIyLCA3NjkyNiwgCi0gICAgNzY5MzAsIDc2OTM0LCA3NjkzOCwgNzY5NDIsIDc2OTQ2LCA3Njk1MCwgNzY5NTQsIDc2OTU4LCA3Njk2MiwgNzY5NjYsIAotICAgIDc2OTcwLCA3Njk3NCwgNzY5NzgsIDc2OTgyLCA3Njk4NiwgNzY5OTAsIDc2OTk0LCA3Njk5OCwgNzcwMDIsIDc3MDA2LCAKLSAgICA3NzAxMCwgNzcwMTQsIDc3MDE4LCA3NzAyMiwgNzcwMjYsIDc3MDMwLCA3NzAzNCwgNzcwMzgsIDc3MDQyLCA3NzA0NiwgCi0gICAgNzcwNTAsIDc3MDU0LCA3NzA1OCwgNzcwNjIsIDc3MDY2LCA3NzA3MCwgNzcwNzQsIDc3MDc4LCA3NzA4MiwgNzcwODYsIAotICAgIDc3MDkwLCA3NzA5NCwgNzcwOTgsIDc3MTAyLCA3NzEwNiwgNzcxMTAsIDc3MTE0LCA3NzExOCwgNzcxMjIsIDc3MTI2LCAKLSAgICA3NzEzMCwgNzcxMzQsIDc3MTM4LCA3NzE0MiwgNzcxNDYsIDc3MTUwLCA3NzE1NCwgNzcxNTgsIDc3MTYyLCA3NzE2NiwgCi0gICAgNzcxNzAsIDc3MTc0LCA3NzE3OCwgNzcxODIsIDc3MTg2LCA3NzE5MCwgNzcxOTQsIDc3MTk4LCA3NzIwMiwgNzcyMDYsIAotICAgIDc3MjEwLCA3NzIxNCwgNzcyMTgsIDc3MjIyLCA3NzIyNiwgNzcyMzAsIDc3MjM0LCA3NzIzOCwgNzcyNDIsIDc3MjQ2LCAKLSAgICA3NzI1MCwgNzcyNTQsIDc3MjU4LCA3NzI2MiwgNzcyNjYsIDc3MjcwLCA3NzI3NCwgNzcyNzgsIDc3MjgyLCA3NzI4NiwgCi0gICAgNzcyOTAsIDc3Mjk0LCA3NzI5OCwgNzczMDIsIDc3MzA2LCA3NzMxMCwgNzczMTQsIDc3MzE4LCA3NzMyMiwgNzczMjYsIAotICAgIDc3MzMwLCA3NzMzNCwgNzczMzgsIDc3MzQyLCA3NzM0NiwgNzczNTAsIDc3MzU0LCA3NzM1OCwgNzczNjIsIDc3MzY2LCAKLSAgICA3NzM3MCwgNzczNzQsIDc3Mzc4LCA3NzM4MiwgNzczODYsIDc3MzkwLCA3NzM5NCwgNzczOTgsIDc3NDAyLCA3NzQwNiwgCi0gICAgNzc0MTAsIDc3NDE0LCA3NzQxOCwgNzc0MjIsIDc3NDI2LCA3NzQzMCwgNzc0MzQsIDc3NDM4LCA3NzQ0MiwgNzc0NDYsIAotICAgIDc3NDUwLCA3NzQ1NCwgNzc0NTgsIDc3NDYyLCA3NzQ2NiwgNzc0NzAsIDc3NDc0LCA3NzQ3OCwgNzc0ODIsIDc3NDg2LCAKLSAgICA3NzQ5MCwgNzc0OTQsIDc3NDk4LCA3NzUwMiwgNzc1MDYsIDc3NTEwLCA3NzUxNCwgNzc1MTgsIDc3NTIyLCA3NzUyNiwgCi0gICAgNzc1MzAsIDc3NTM0LCA3NzUzOCwgNzc1NDIsIDc3NTQ2LCA3NzU1MCwgNzc1NTQsIDc3NTU4LCA3NzU2MiwgNzc1NjYsIAotICAgIDc3NTcwLCA3NzU3NCwgNzc1NzgsIDc3NTgyLCA3NzU4NiwgNzc1OTAsIDc3NTk0LCA3NzU5OCwgNzc2MDIsIDc3NjA2LCAKLSAgICA3NzYxMCwgNzc2MTQsIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMwLCA3NzYzNCwgNzc2MzgsIDc3NjQyLCA3NzY0NiwgCi0gICAgNzc2NTAsIDc3NjU0LCA3NzY1OCwgNzc2NjIsIDc3NjY2LCA3NzY3MCwgNzc2NzQsIDc3Njc4LCA3NzY4MiwgNzc2ODYsIAotICAgIDc3NjkwLCA3NzY5NCwgNzc2OTgsIDc3NzAyLCA3NzcwNiwgNzc3MTAsIDc3NzE0LCA3NzcxOCwgNzc3MjIsIDc3NzI2LCAKLSAgICA3NzczMCwgNzc3MzQsIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NiwgCi0gICAgNzc3NzAsIDc3Nzc0LCA3Nzc3OCwgNzc3ODIsIDc3Nzg2LCA3Nzc5MCwgNzc3OTQsIDc3Nzk4LCA3NzgwMiwgNzc4MDYsIAotICAgIDc3ODEwLCA3NzgxNCwgNzc4MTgsIDc3ODIyLCA3NzgyNiwgNzc4MzAsIDc3ODM0LCA3NzgzOCwgNzc4NDIsIDc3ODQ2LCAKLSAgICA3Nzg1MCwgMCwgMCwgNzc4NTQsIDc3ODU4LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NCwgNzc4NzgsIDc3ODgyLCAKLSAgICA3Nzg4NiwgNzc4OTAsIDc3ODk0LCA3Nzg5OCwgNzc5MDIsIDc3OTA2LCA3NzkxMCwgNzc5MTQsIDc3OTE4LCA3NzkyMiwgCi0gICAgNzc5MjYsIDc3OTMwLCA3NzkzNCwgNzc5MzgsIDc3OTQyLCA3Nzk0NiwgNzc5NTAsIDc3OTU0LCA3Nzk1OCwgNzc5NjIsIAotICAgIDc3OTY2LCA3Nzk3MCwgNzc5NzQsIDc3OTc4LCA3Nzk4MiwgNzc5ODYsIDc3OTkwLCA3Nzk5NCwgNzc5OTgsIDc4MDAyLCAKLSAgICA3ODAwNiwgNzgwMTAsIDc4MDE0LCA3ODAxOCwgNzgwMjIsIDc4MDI2LCA3ODAzMCwgNzgwMzQsIDc4MDM4LCA3ODA0MiwgCi0gICAgNzgwNDYsIDc4MDUwLCA3ODA1NCwgNzgwNTgsIDc4MDYyLCA3ODA2NiwgNzgwNzAsIDc4MDc0LCA3ODA3OCwgNzgwODIsIAotICAgIDc4MDg2LCA3ODA5MCwgNzgwOTQsIDc4MDk4LCA3ODEwMiwgNzgxMDYsIDc4MTEwLCA3ODExNCwgNzgxMTgsIDc4MTIyLCAKLSAgICA3ODEyNiwgNzgxMzAsIDc4MTM0LCA3ODEzOCwgNzgxNDIsIDc4MTQ2LCA3ODE1MCwgNzgxNTQsIDc4MTU4LCA3ODE2MiwgCi0gICAgNzgxNjYsIDc4MTcwLCA3ODE3NCwgNzgxNzgsIDc4MTgyLCA3ODE4NiwgNzgxOTAsIDc4MTk0LCA3ODE5OCwgNzgyMDIsIAotICAgIDc4MjA2LCA3ODIxMCwgNzgyMTQsIDc4MjE4LCA3ODIyMiwgNzgyMjYsIDc4MjMwLCA3ODIzNCwgNzgyMzgsIDc4MjQyLCAKLSAgICA3ODI0NiwgNzgyNTAsIDc4MjU0LCA3ODI1OCwgNzgyNjIsIDc4MjY2LCA3ODI3MCwgNzgyNzQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2MTMwLCA3NjEzNCwgNzYxMzgsIDc2MTQyLCA3NjE0NiwgCisgICAgNzYxNTAsIDc2MTU0LCA3NjE1OCwgNzYxNjIsIDc2MTY2LCA3NjE3MCwgNzYxNzQsIDc2MTc4LCA3NjE4MiwgNzYxODYsIAorICAgIDc2MTkwLCA3NjE5NCwgNzYxOTgsIDc2MjAyLCA3NjIwNiwgNzYyMTAsIDc2MjE0LCA3NjIxOCwgMCwgMCwgMCwgMCwgCisgICAgNzYyMjIsIDc2MjI2LCA3NjIzMCwgNzYyMzQsIDc2MjM4LCA3NjI0MiwgNzYyNDYsIDc2MjUwLCA3NjI1NCwgNzYyNTgsIAorICAgIDc2MjYyLCA3NjI2NiwgNzYyNzAsIDc2Mjc0LCA3NjI3OCwgNzYyODIsIDc2Mjg2LCA3NjI5MCwgNzYyOTQsIDc2Mjk4LCAKKyAgICA3NjMwMiwgNzYzMDYsIDc2MzEwLCA3NjMxNCwgNzYzMTgsIDc2MzIyLCA3NjMyNiwgNzYzMzAsIDc2MzM0LCA3NjMzOCwgCisgICAgNzYzNDIsIDc2MzQ2LCA3NjM1MCwgNzYzNTQsIDc2MzU4LCA3NjM2MiwgNzYzNjYsIDc2MzcwLCA3NjM3NCwgNzYzNzgsIAorICAgIDc2MzgyLCA3NjM4NiwgNzYzOTAsIDc2Mzk0LCA3NjM5OCwgNzY0MDIsIDc2NDA2LCA3NjQxMCwgNzY0MTQsIDAsIDAsIDAsIAorICAgIDAsIDc2NDE4LCA3NjQyMiwgNzY0MjYsIDc2NDMwLCA3NjQzNCwgNzY0MzgsIDc2NDQyLCA3NjQ0NiwgNzY0NTAsIDc2NDU0LCAKKyAgICA3NjQ1OCwgNzY0NjIsIDc2NDY2LCA3NjQ3MCwgNzY0NzQsIDc2NDc4LCA3NjQ4MiwgNzY0ODYsIDc2NDkwLCA3NjQ5NCwgCisgICAgNzY0OTgsIDc2NTAyLCA3NjUwNiwgNzY1MTAsIDc2NTE0LCA3NjUxOCwgNzY1MjIsIDc2NTI2LCA3NjUzMCwgNzY1MzQsIAorICAgIDc2NTM4LCA3NjU0MiwgNzY1NDYsIDc2NTUwLCA3NjU1NCwgNzY1NTgsIDc2NTYyLCA3NjU2NiwgNzY1NzAsIDc2NTc0LCAKKyAgICA3NjU3OCwgNzY1ODIsIDc2NTg2LCA3NjU5MCwgNzY1OTQsIDc2NTk4LCA3NjYwMiwgNzY2MDYsIDc2NjEwLCA3NjYxNCwgCisgICAgNzY2MTgsIDc2NjIyLCA3NjYyNiwgNzY2MzAsIDc2NjM0LCA3NjYzOCwgNzY2NDIsIDc2NjQ2LCA3NjY1MCwgNzY2NTQsIAorICAgIDc2NjU4LCA3NjY2MiwgNzY2NjYsIDc2NjcwLCA3NjY3NCwgNzY2NzgsIDc2NjgyLCA3NjY4NiwgNzY2OTAsIDc2Njk0LCAKKyAgICA3NjY5OCwgNzY3MDIsIDc2NzA2LCA3NjcxMCwgNzY3MTQsIDc2NzE4LCA3NjcyMiwgNzY3MjYsIDc2NzMwLCA3NjczNCwgCisgICAgNzY3MzgsIDc2NzQyLCA3Njc0NiwgNzY3NTAsIDc2NzU0LCA3Njc1OCwgNzY3NjIsIDc2NzY2LCA3Njc3MCwgNzY3NzQsIAorICAgIDc2Nzc4LCA3Njc4MiwgNzY3ODYsIDc2NzkwLCA3Njc5NCwgNzY3OTgsIDc2ODAyLCA3NjgwNiwgNzY4MTAsIDc2ODE0LCAKKyAgICA3NjgxOCwgNzY4MjIsIDc2ODI2LCA3NjgzMCwgNzY4MzQsIDc2ODM4LCA3Njg0MiwgNzY4NDYsIDc2ODUwLCA3Njg1NCwgCisgICAgNzY4NTgsIDc2ODYyLCA3Njg2NiwgNzY4NzAsIDc2ODc0LCA3Njg3OCwgNzY4ODIsIDc2ODg2LCA3Njg5MCwgNzY4OTQsIAorICAgIDc2ODk4LCA3NjkwMiwgNzY5MDYsIDc2OTEwLCA3NjkxNCwgNzY5MTgsIDc2OTIyLCA3NjkyNiwgNzY5MzAsIDc2OTM0LCAKKyAgICA3NjkzOCwgNzY5NDIsIDc2OTQ2LCA3Njk1MCwgNzY5NTQsIDc2OTU4LCA3Njk2MiwgNzY5NjYsIDc2OTcwLCA3Njk3NCwgCisgICAgNzY5NzgsIDc2OTgyLCA3Njk4NiwgNzY5OTAsIDc2OTk0LCA3Njk5OCwgNzcwMDIsIDc3MDA2LCA3NzAxMCwgNzcwMTQsIAorICAgIDc3MDE4LCA3NzAyMiwgNzcwMjYsIDc3MDMwLCA3NzAzNCwgNzcwMzgsIDc3MDQyLCA3NzA0NiwgNzcwNTAsIDc3MDU0LCAKKyAgICA3NzA1OCwgNzcwNjIsIDc3MDY2LCA3NzA3MCwgNzcwNzQsIDc3MDc4LCA3NzA4MiwgNzcwODYsIDc3MDkwLCA3NzA5NCwgCisgICAgNzcwOTgsIDc3MTAyLCA3NzEwNiwgNzcxMTAsIDc3MTE0LCA3NzExOCwgNzcxMjIsIDc3MTI2LCA3NzEzMCwgNzcxMzQsIAorICAgIDc3MTM4LCA3NzE0MiwgNzcxNDYsIDc3MTUwLCA3NzE1NCwgNzcxNTgsIDc3MTYyLCA3NzE2NiwgNzcxNzAsIDc3MTc0LCAKKyAgICA3NzE3OCwgNzcxODIsIDc3MTg2LCA3NzE5MCwgNzcxOTQsIDc3MTk4LCA3NzIwMiwgNzcyMDYsIDc3MjEwLCA3NzIxNCwgCisgICAgNzcyMTgsIDc3MjIyLCA3NzIyNiwgNzcyMzAsIDc3MjM0LCA3NzIzOCwgNzcyNDIsIDc3MjQ2LCA3NzI1MCwgNzcyNTQsIAorICAgIDc3MjU4LCA3NzI2MiwgNzcyNjYsIDc3MjcwLCA3NzI3NCwgNzcyNzgsIDc3MjgyLCA3NzI4NiwgNzcyOTAsIDc3Mjk0LCAKKyAgICA3NzI5OCwgNzczMDIsIDc3MzA2LCA3NzMxMCwgNzczMTQsIDc3MzE4LCA3NzMyMiwgNzczMjYsIDc3MzMwLCA3NzMzNCwgCisgICAgNzczMzgsIDc3MzQyLCA3NzM0NiwgNzczNTAsIDc3MzU0LCA3NzM1OCwgNzczNjIsIDc3MzY2LCA3NzM3MCwgNzczNzQsIAorICAgIDc3Mzc4LCA3NzM4MiwgNzczODYsIDc3MzkwLCA3NzM5NCwgNzczOTgsIDc3NDAyLCA3NzQwNiwgNzc0MTAsIDc3NDE0LCAKKyAgICA3NzQxOCwgNzc0MjIsIDc3NDI2LCA3NzQzMCwgNzc0MzQsIDc3NDM4LCA3NzQ0MiwgNzc0NDYsIDc3NDUwLCA3NzQ1NCwgCisgICAgNzc0NTgsIDc3NDYyLCA3NzQ2NiwgNzc0NzAsIDc3NDc0LCA3NzQ3OCwgNzc0ODIsIDc3NDg2LCA3NzQ5MCwgNzc0OTQsIAorICAgIDc3NDk4LCA3NzUwMiwgNzc1MDYsIDc3NTEwLCA3NzUxNCwgNzc1MTgsIDc3NTIyLCA3NzUyNiwgNzc1MzAsIDc3NTM0LCAKKyAgICA3NzUzOCwgNzc1NDIsIDc3NTQ2LCA3NzU1MCwgNzc1NTQsIDc3NTU4LCA3NzU2MiwgNzc1NjYsIDc3NTcwLCA3NzU3NCwgCisgICAgNzc1NzgsIDc3NTgyLCA3NzU4NiwgNzc1OTAsIDc3NTk0LCA3NzU5OCwgNzc2MDIsIDc3NjA2LCA3NzYxMCwgNzc2MTQsIAorICAgIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMwLCA3NzYzNCwgNzc2MzgsIDc3NjQyLCA3NzY0NiwgNzc2NTAsIDc3NjU0LCAKKyAgICA3NzY1OCwgNzc2NjIsIDc3NjY2LCA3NzY3MCwgNzc2NzQsIDc3Njc4LCA3NzY4MiwgNzc2ODYsIDc3NjkwLCA3NzY5NCwgCisgICAgNzc2OTgsIDc3NzAyLCA3NzcwNiwgNzc3MTAsIDc3NzE0LCA3NzcxOCwgNzc3MjIsIDc3NzI2LCA3NzczMCwgNzc3MzQsIAorICAgIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NiwgNzc3NzAsIDc3Nzc0LCAKKyAgICA3Nzc3OCwgNzc3ODIsIDc3Nzg2LCA3Nzc5MCwgNzc3OTQsIDc3Nzk4LCA3NzgwMiwgNzc4MDYsIDc3ODEwLCA3NzgxNCwgCisgICAgNzc4MTgsIDc3ODIyLCA3NzgyNiwgNzc4MzAsIDc3ODM0LCA3NzgzOCwgNzc4NDIsIDc3ODQ2LCA3Nzg1MCwgNzc4NTQsIAorICAgIDc3ODU4LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NCwgNzc4NzgsIDAsIDAsIDc3ODgyLCA3Nzg4NiwgNzc4OTAsIAorICAgIDc3ODk0LCA3Nzg5OCwgNzc5MDIsIDc3OTA2LCA3NzkxMCwgNzc5MTQsIDc3OTE4LCA3NzkyMiwgNzc5MjYsIDc3OTMwLCAKKyAgICA3NzkzNCwgNzc5MzgsIDc3OTQyLCA3Nzk0NiwgNzc5NTAsIDc3OTU0LCA3Nzk1OCwgNzc5NjIsIDc3OTY2LCA3Nzk3MCwgCisgICAgNzc5NzQsIDc3OTc4LCA3Nzk4MiwgNzc5ODYsIDc3OTkwLCA3Nzk5NCwgNzc5OTgsIDc4MDAyLCA3ODAwNiwgNzgwMTAsIAorICAgIDc4MDE0LCA3ODAxOCwgNzgwMjIsIDc4MDI2LCA3ODAzMCwgNzgwMzQsIDc4MDM4LCA3ODA0MiwgNzgwNDYsIDc4MDUwLCAKKyAgICA3ODA1NCwgNzgwNTgsIDc4MDYyLCA3ODA2NiwgNzgwNzAsIDc4MDc0LCA3ODA3OCwgNzgwODIsIDc4MDg2LCA3ODA5MCwgCisgICAgNzgwOTQsIDc4MDk4LCA3ODEwMiwgNzgxMDYsIDc4MTEwLCA3ODExNCwgNzgxMTgsIDc4MTIyLCA3ODEyNiwgNzgxMzAsIAorICAgIDc4MTM0LCA3ODEzOCwgNzgxNDIsIDc4MTQ2LCA3ODE1MCwgNzgxNTQsIDc4MTU4LCA3ODE2MiwgNzgxNjYsIDc4MTcwLCAKKyAgICA3ODE3NCwgNzgxNzgsIDc4MTgyLCA3ODE4NiwgNzgxOTAsIDc4MTk0LCA3ODE5OCwgNzgyMDIsIDc4MjA2LCA3ODIxMCwgCisgICAgNzgyMTQsIDc4MjE4LCA3ODIyMiwgNzgyMjYsIDc4MjMwLCA3ODIzNCwgNzgyMzgsIDc4MjQyLCA3ODI0NiwgNzgyNTAsIAorICAgIDc4MjU0LCA3ODI1OCwgNzgyNjIsIDc4MjY2LCA3ODI3MCwgNzgyNzQsIDc4Mjc4LCA3ODI4MiwgNzgyODYsIDc4MjkwLCAKKyAgICA3ODI5NCwgNzgyOTgsIDc4MzAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODMwNiwgCisgICAgNzgzMTEsIDc4MzE2LCA3ODMyMSwgNzgzMjYsIDc4MzMxLCA3ODMzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNzgzNDQsIDc4MzUxLCA3ODM1OCwgNzgzNjUsIDc4MzcyLCAwLCAwLCAwLCAwLCAwLCA3ODM3OSwgNzgzODYsIAorICAgIDc4MzkzLCA3ODQwMywgNzg0MDksIDc4NDE1LCA3ODQyMSwgNzg0MjcsIDc4NDMzLCA3ODQzOSwgNzg0NDYsIDc4NDUyLCAKKyAgICA3ODQ1OCwgNzg0NjQsIDc4NDczLCA3ODQ4MiwgNzg0OTQsIDc4NTA2LCA3ODUxMiwgNzg1MTgsIDc4NTI0LCA3ODUzMSwgCisgICAgNzg1MzgsIDc4NTQ1LCA3ODU1MiwgNzg1NTksIDAsIDc4NTY2LCA3ODU3MywgNzg1ODAsIDc4NTg4LCA3ODU5NSwgMCwgCisgICAgNzg2MDIsIDAsIDc4NjA5LCA3ODYxNiwgMCwgNzg2MjMsIDc4NjMxLCAwLCA3ODYzOCwgNzg2NDUsIDc4NjUyLCA3ODY1OSwgCisgICAgNzg2NjYsIDc4NjczLCA3ODY4MCwgNzg2ODcsIDc4Njk0LCA3ODcwMSwgNzg3MDYsIDc4NzEzLCA3ODcyMCwgNzg3MjYsIAorICAgIDc4NzMyLCA3ODczOCwgNzg3NDQsIDc4NzUwLCA3ODc1NiwgNzg3NjIsIDc4NzY4LCA3ODc3NCwgNzg3ODAsIDc4Nzg2LCAKKyAgICA3ODc5MiwgNzg3OTgsIDc4ODA0LCA3ODgxMCwgNzg4MTYsIDc4ODIyLCA3ODgyOCwgNzg4MzQsIDc4ODQwLCA3ODg0NiwgCisgICAgNzg4NTIsIDc4ODU4LCA3ODg2NCwgNzg4NzAsIDc4ODc2LCA3ODg4MiwgNzg4ODgsIDc4ODk0LCA3ODkwMCwgNzg5MDYsIAorICAgIDc4OTEyLCA3ODkxOCwgNzg5MjQsIDc4OTMwLCA3ODkzNiwgNzg5NDIsIDc4OTQ4LCA3ODk1NCwgNzg5NjAsIDc4OTY2LCAKKyAgICA3ODk3MiwgNzg5NzgsIDc4OTg0LCA3ODk5MCwgNzg5OTYsIDc5MDAyLCA3OTAwOCwgNzkwMTQsIDc5MDIwLCA3OTAyNiwgCisgICAgNzkwMzIsIDc5MDM4LCA3OTA0NCwgNzkwNTAsIDc5MDU2LCA3OTA2MiwgNzkwNjgsIDc5MDc0LCA3OTA4MCwgNzkwODYsIAorICAgIDc5MDkyLCA3OTA5OCwgNzkxMDQsIDc5MTEwLCA3OTExNiwgNzkxMjIsIDc5MTI4LCA3OTEzNCwgNzkxNDAsIDc5MTQ2LCAKKyAgICA3OTE1MiwgNzkxNTgsIDc5MTY0LCA3OTE3MCwgNzkxNzYsIDc5MTg0LCA3OTE5MiwgNzkxOTgsIDc5MjA0LCA3OTIxMCwgCisgICAgNzkyMTYsIDc5MjI1LCA3OTIzNCwgNzkyNDIsIDc5MjUwLCA3OTI1OCwgNzkyNjYsIDc5Mjc0LCA3OTI4MiwgNzkyOTAsIAorICAgIDc5Mjk4LCA3OTMwNSwgNzkzMTIsIDc5MzIyLCA3OTMzMiwgNzkzMzYsIDc5MzQwLCA3OTM0NSwgNzkzNTAsIDc5MzU1LCAKKyAgICA3OTM2MCwgNzkzNjksIDc5Mzc4LCA3OTM4NCwgNzkzOTAsIDc5Mzk3LCA3OTQwNCwgNzk0MTEsIDc5NDE1LCA3OTQyMSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk0MjcsIDc5NDMzLCA3OTQzOSwgCisgICAgNzk0NDUsIDc5NDUxLCA3OTQ1NiwgNzk0NjEsIDc5NDY3LCA3OTQ3MywgNzk0NzksIDc5NDg1LCA3OTQ5MywgNzk0OTksIAorICAgIDc5NTA1LCA3OTUxMywgNzk1MjEsIDc5NTI5LCA3OTUzNywgNzk1NDIsIDc5NTQ3LCA3OTU1MiwgNzk1NTcsIDc5NTcwLCAKKyAgICA3OTU4MywgNzk1OTMsIDc5NjAzLCA3OTYxNCwgNzk2MjUsIDc5NjM2LCA3OTY0NywgNzk2NTcsIDc5NjY3LCA3OTY3OCwgCisgICAgNzk2ODksIDc5NzAwLCA3OTcxMSwgNzk3MjEsIDc5NzMxLCA3OTc0MSwgNzk3NTcsIDc5NzczLCA3OTc4OSwgNzk3OTYsIAorICAgIDc5ODAzLCA3OTgxMCwgNzk4MTcsIDc5ODI3LCA3OTgzNywgNzk4NDcsIDc5ODU5LCA3OTg2OSwgNzk4NzcsIDc5ODg1LCAKKyAgICA3OTg5NCwgNzk5MDIsIDc5OTEyLCA3OTkyMCwgNzk5MjgsIDc5OTM2LCA3OTk0NSwgNzk5NTMsIDc5OTYzLCA3OTk3MSwgCisgICAgNzk5NzksIDc5OTg3LCA3OTk5NywgODAwMDUsIDgwMDEyLCA4MDAxOSwgODAwMjYsIDgwMDMzLCA4MDA0MSwgODAwNDksIAorICAgIDgwMDU3LCA4MDA2NSwgODAwNzMsIDgwMDgyLCA4MDA5MCwgODAwOTgsIDgwMTA2LCA4MDExNCwgODAxMjIsIDgwMTMxLCAKKyAgICA4MDEzOSwgODAxNDcsIDgwMTU1LCA4MDE2MywgODAxNzEsIDgwMTc5LCA4MDE4NywgODAxOTUsIDgwMjAzLCA4MDIxMSwgCisgICAgODAyMjAsIDgwMjI4LCA4MDIzOCwgODAyNDYsIDgwMjU0LCA4MDI2MiwgODAyNzIsIDgwMjgwLCA4MDI4OCwgODAyOTYsIAorICAgIDgwMzA0LCA4MDMxMywgODAzMjIsIDgwMzMwLCA4MDM0MCwgODAzNDgsIDgwMzU2LCA4MDM2NCwgODAzNzMsIDgwMzgxLCAKKyAgICA4MDM5MSwgODAzOTksIDgwNDA2LCA4MDQxMywgODA0MjEsIDgwNDI4LCA4MDQzNywgODA0NDQsIDgwNDUyLCA4MDQ2MCwgCisgICAgODA0NjksIDgwNDc3LCA4MDQ4NywgODA0OTUsIDgwNTAzLCA4MDUxMSwgODA1MjEsIDgwNTI5LCA4MDUzNiwgODA1NDMsIAorICAgIDgwNTUxLCA4MDU1OCwgODA1NjcsIDgwNTc0LCA4MDU4NCwgODA1OTQsIDgwNjA1LCA4MDYxNCwgODA2MjMsIDgwNjMyLCAKKyAgICA4MDY0MSwgODA2NTAsIDgwNjYwLCA4MDY3MSwgODA2ODIsIDgwNjkyLCA4MDcwMywgODA3MTUsIDgwNzI1LCA4MDczNCwgCisgICAgODA3NDMsIDgwNzUxLCA4MDc2MCwgODA3NzAsIDgwNzc4LCA4MDc4NywgODA3OTYsIDgwODA0LCA4MDgxMywgODA4MjMsIAorICAgIDgwODMxLCA4MDg0MCwgODA4NDksIDgwODU3LCA4MDg2NiwgODA4NzYsIDgwODg0LCA4MDg5NCwgODA5MDIsIDgwOTEyLCAKKyAgICA4MDkyMCwgODA5MjgsIDgwOTM3LCA4MDk0NSwgODA5NTUsIDgwOTYzLCA4MDk3MSwgODA5ODEsIDgwOTg5LCA4MDk5NiwgCisgICAgODEwMDMsIDgxMDEyLCA4MTAyMSwgODEwMjksIDgxMDM4LCA4MTA0OCwgODEwNTYsIDgxMDY3LCA4MTA3NSwgODEwODMsIAorICAgIDgxMDkwLCA4MTA5OCwgODExMDcsIDgxMTE0LCA4MTEyNCwgODExMzQsIDgxMTQ1LCA4MTE1NSwgODExNjYsIDgxMTc0LCAKKyAgICA4MTE4MiwgODExOTEsIDgxMTk5LCA4MTIwOCwgODEyMTYsIDgxMjI0LCA4MTIzMywgODEyNDEsIDgxMjUwLCA4MTI1OCwgCisgICAgODEyNjUsIDgxMjcyLCA4MTI3OSwgODEyODYsIDgxMjk0LCA4MTMwMiwgODEzMTAsIDgxMzE4LCA4MTMyNywgODEzMzUsIAorICAgIDgxMzQzLCA4MTM1MiwgODEzNjAsIDgxMzY4LCA4MTM3NiwgODEzODUsIDgxMzkzLCA4MTQwMSwgODE0MDksIDgxNDE3LCAKKyAgICA4MTQyNSwgODE0MzMsIDgxNDQxLCA4MTQ0OSwgODE0NTcsIDgxNDY2LCA4MTQ3NCwgODE0ODIsIDgxNDkwLCA4MTQ5OCwgCisgICAgODE1MDYsIDgxNTE1LCA4MTUyNCwgODE1MzIsIDgxNTQwLCA4MTU0OCwgODE1NTcsIDgxNTY1LCA4MTU3NCwgODE1ODEsIAorICAgIDgxNTg4LCA4MTU5NiwgODE2MDMsIDgxNjExLCA4MTYxOSwgODE2MjgsIDgxNjM2LCA4MTY0NSwgODE2NTMsIDgxNjYxLCAKKyAgICA4MTY3MSwgODE2NzgsIDgxNjg1LCA4MTY5MywgODE3MDAsIDgxNzA4LCA4MTcxOCwgODE3MjksIDgxNzM3LCA4MTc0NiwgCisgICAgODE3NTQsIDgxNzYzLCA4MTc3MSwgODE3ODAsIDgxNzg4LCA4MTc5NywgODE4MDUsIDgxODE0LCA4MTgyMywgODE4MzEsIAorICAgIDgxODM5LCA4MTg0NywgODE4NTYsIDgxODYzLCA4MTg3MSwgODE4ODAsIDgxODg5LCA4MTg5OCwgODE5MDgsIDgxOTE2LCAKKyAgICA4MTkyNiwgODE5MzQsIDgxOTQ0LCA4MTk1MiwgODE5NjIsIDgxOTcwLCA4MTk4MCwgODE5ODgsIDgxOTk3LCA4MjAwNCwgCisgICAgODIwMTMsIDgyMDIwLCA4MjAzMCwgODIwMzgsIDgyMDQ4LCA4MjA1NiwgODIwNjYsIDgyMDc0LCA4MjA4MiwgODIwOTAsIAorICAgIDgyMDk5LCA4MjEwNywgODIxMTYsIDgyMTI1LCA4MjEzNCwgODIxNDMsIDgyMTUzLCA4MjE2MSwgODIxNzEsIDgyMTc5LCAKKyAgICA4MjE4OSwgODIxOTcsIDgyMjA3LCA4MjIxNSwgODIyMjUsIDgyMjMzLCA4MjI0MiwgODIyNDksIDgyMjU4LCA4MjI2NSwgCisgICAgODIyNzUsIDgyMjgzLCA4MjI5MywgODIzMDEsIDgyMzExLCA4MjMxOSwgODIzMjcsIDgyMzM1LCA4MjM0NCwgODIzNTIsIAorICAgIDgyMzYxLCA4MjM3MCwgODIzNzksIDgyMzg4LCA4MjM5NiwgODI0MDQsIDgyNDEzLCA4MjQyMSwgODI0MzAsIDgyNDM5LCAKKyAgICA4MjQ0NywgODI0NTUsIDgyNDYzLCA4MjQ3MiwgODI0ODAsIDgyNDg4LCA4MjQ5NywgODI1MDUsIDgyNTEzLCA4MjUyMSwgCisgICAgODI1MjksIDgyNTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MjUzOSwgCisgICAgODI1NDksIDgyNTU5LCA4MjU2OSwgODI1NzksIDgyNTkwLCA4MjYwMCwgODI2MTAsIDgyNjIxLCA4MjYzMCwgODI2MzksIAorICAgIDgyNjQ4LCA4MjY1OSwgODI2NjksIDgyNjc5LCA4MjY5MSwgODI3MDEsIDgyNzExLCA4MjcyMSwgODI3MzEsIDgyNzQxLCAKKyAgICA4Mjc1MSwgODI3NjEsIDgyNzcxLCA4Mjc4MSwgODI3OTEsIDgyODAxLCA4MjgxMiwgODI4MjMsIDgyODMzLCA4Mjg0MywgCisgICAgODI4NTUsIDgyODY2LCA4Mjg3NywgODI4ODcsIDgyODk3LCA4MjkwNywgODI5MTcsIDgyOTI3LCA4MjkzNywgODI5NDcsIAorICAgIDgyOTU5LCA4Mjk2OSwgODI5NzksIDgyOTkxLCA4MzAwMiwgODMwMTMsIDgzMDIzLCA4MzAzMywgODMwNDMsIDgzMDUzLCAKKyAgICA4MzA2NSwgODMwNzUsIDgzMDg1LCA4MzA5NiwgODMxMDcsIDgzMTE3LCA4MzEyNywgODMxMzYsIDgzMTQ1LCA4MzE1NCwgCisgICAgODMxNjMsIDgzMTcyLCA4MzE4MiwgMCwgMCwgODMxOTIsIDgzMjAyLCA4MzIxMiwgODMyMjIsIDgzMjMyLCA4MzI0NCwgCisgICAgODMyNTQsIDgzMjY0LCA4MzI3NiwgODMyODYsIDgzMjk4LCA4MzMwNywgODMzMTYsIDgzMzI3LCA4MzMzNywgODMzNDksIAorICAgIDgzMzYwLCA4MzM3MywgODMzODMsIDgzMzk1LCA4MzQwNCwgODM0MTUsIDgzNDI2LCA4MzQzOSwgODM0NDksIDgzNDU5LCAKKyAgICA4MzQ2OSwgODM0NzksIDgzNDg5LCA4MzQ5OCwgODM1MDcsIDgzNTE2LCA4MzUyNSwgODM1MzUsIDgzNTQ1LCA4MzU1NSwgCisgICAgODM1NjUsIDgzNTc1LCA4MzU4NSwgODM1OTUsIDgzNjA1LCA4MzYxNSwgODM2MjUsIDgzNjM1LCA4MzY0NSwgODM2NTQsIAorICAgIDgzNjYzLCA4MzY3MiwgODM2ODIsIDgzNjkyLCA4MzcwMiwgODM3MTIsIDgzNzIyLCA4MzczMywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgyNzgsIDc4MjgzLCA3ODI4OCwgNzgyOTMsIDc4Mjk4LCA3ODMwMywgNzgzMTEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MzE2LCA3ODMyMywgNzgzMzAsIDc4MzM3LCA3ODM0NCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzgzNTEsIDc4MzU4LCA3ODM2NSwgNzgzNzUsIDc4MzgxLCA3ODM4NywgNzgzOTMsIDc4Mzk5LCAKLSAgICA3ODQwNSwgNzg0MTEsIDc4NDE4LCA3ODQyNCwgNzg0MzAsIDc4NDM2LCA3ODQ0NSwgNzg0NTQsIDc4NDY2LCA3ODQ3OCwgCi0gICAgNzg0ODQsIDc4NDkwLCA3ODQ5NiwgNzg1MDMsIDc4NTEwLCA3ODUxNywgNzg1MjQsIDc4NTMxLCAwLCA3ODUzOCwgNzg1NDUsIAotICAgIDc4NTUyLCA3ODU2MCwgNzg1NjcsIDAsIDc4NTc0LCAwLCA3ODU4MSwgNzg1ODgsIDAsIDc4NTk1LCA3ODYwMywgMCwgCi0gICAgNzg2MTAsIDc4NjE3LCA3ODYyNCwgNzg2MzEsIDc4NjM4LCA3ODY0NSwgNzg2NTIsIDc4NjU5LCA3ODY2NiwgNzg2NzMsIAotICAgIDc4Njc4LCA3ODY4NSwgNzg2OTIsIDc4Njk4LCA3ODcwNCwgNzg3MTAsIDc4NzE2LCA3ODcyMiwgNzg3MjgsIDc4NzM0LCAKLSAgICA3ODc0MCwgNzg3NDYsIDc4NzUyLCA3ODc1OCwgNzg3NjQsIDc4NzcwLCA3ODc3NiwgNzg3ODIsIDc4Nzg4LCA3ODc5NCwgCi0gICAgNzg4MDAsIDc4ODA2LCA3ODgxMiwgNzg4MTgsIDc4ODI0LCA3ODgzMCwgNzg4MzYsIDc4ODQyLCA3ODg0OCwgNzg4NTQsIAotICAgIDc4ODYwLCA3ODg2NiwgNzg4NzIsIDc4ODc4LCA3ODg4NCwgNzg4OTAsIDc4ODk2LCA3ODkwMiwgNzg5MDgsIDc4OTE0LCAKLSAgICA3ODkyMCwgNzg5MjYsIDc4OTMyLCA3ODkzOCwgNzg5NDQsIDc4OTUwLCA3ODk1NiwgNzg5NjIsIDc4OTY4LCA3ODk3NCwgCi0gICAgNzg5ODAsIDc4OTg2LCA3ODk5MiwgNzg5OTgsIDc5MDA0LCA3OTAxMCwgNzkwMTYsIDc5MDIyLCA3OTAyOCwgNzkwMzQsIAotICAgIDc5MDQwLCA3OTA0NiwgNzkwNTIsIDc5MDU4LCA3OTA2NCwgNzkwNzAsIDc5MDc2LCA3OTA4MiwgNzkwODgsIDc5MDk0LCAKLSAgICA3OTEwMCwgNzkxMDYsIDc5MTEyLCA3OTExOCwgNzkxMjQsIDc5MTMwLCA3OTEzNiwgNzkxNDIsIDc5MTQ4LCA3OTE1NiwgCi0gICAgNzkxNjQsIDc5MTcwLCA3OTE3NiwgNzkxODIsIDc5MTg4LCA3OTE5NywgNzkyMDYsIDc5MjE0LCA3OTIyMiwgNzkyMzAsIAotICAgIDc5MjM4LCA3OTI0NiwgNzkyNTQsIDc5MjYyLCA3OTI3MCwgNzkyNzcsIDc5Mjg0LCA3OTI5NCwgNzkzMDQsIDc5MzA4LCAKLSAgICA3OTMxMiwgNzkzMTcsIDc5MzIyLCA3OTMyNywgNzkzMzIsIDc5MzQxLCA3OTM1MCwgNzkzNTYsIDc5MzYyLCA3OTM2OSwgCi0gICAgNzkzNzYsIDc5MzgzLCA3OTM4NywgNzkzOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc5Mzk5LCA3OTQwNSwgNzk0MTEsIDc5NDE3LCA3OTQyMywgNzk0MjgsIDc5NDMzLCA3OTQzOSwgNzk0NDUsIAotICAgIDc5NDUxLCA3OTQ1NywgNzk0NjUsIDc5NDcxLCA3OTQ3NywgNzk0ODUsIDc5NDkzLCA3OTUwMSwgNzk1MDksIDc5NTE0LCAKLSAgICA3OTUxOSwgNzk1MjQsIDc5NTI5LCA3OTU0MiwgNzk1NTUsIDc5NTY1LCA3OTU3NSwgNzk1ODYsIDc5NTk3LCA3OTYwOCwgCi0gICAgNzk2MTksIDc5NjI5LCA3OTYzOSwgNzk2NTAsIDc5NjYxLCA3OTY3MiwgNzk2ODMsIDc5NjkzLCA3OTcwMywgNzk3MTMsIAotICAgIDc5NzI5LCA3OTc0NSwgNzk3NjEsIDc5NzY4LCA3OTc3NSwgNzk3ODIsIDc5Nzg5LCA3OTc5OSwgNzk4MDksIDc5ODE5LCAKLSAgICA3OTgzMSwgNzk4NDEsIDc5ODQ5LCA3OTg1NywgNzk4NjYsIDc5ODc0LCA3OTg4NCwgNzk4OTIsIDc5OTAwLCA3OTkwOCwgCi0gICAgNzk5MTcsIDc5OTI1LCA3OTkzNSwgNzk5NDMsIDc5OTUxLCA3OTk1OSwgNzk5NjksIDc5OTc3LCA3OTk4NCwgNzk5OTEsIAotICAgIDc5OTk4LCA4MDAwNSwgODAwMTMsIDgwMDIxLCA4MDAyOSwgODAwMzcsIDgwMDQ1LCA4MDA1NCwgODAwNjIsIDgwMDcwLCAKLSAgICA4MDA3OCwgODAwODYsIDgwMDk0LCA4MDEwMywgODAxMTEsIDgwMTE5LCA4MDEyNywgODAxMzUsIDgwMTQzLCA4MDE1MSwgCi0gICAgODAxNTksIDgwMTY3LCA4MDE3NSwgODAxODMsIDgwMTkyLCA4MDIwMCwgODAyMTAsIDgwMjE4LCA4MDIyNiwgODAyMzQsIAotICAgIDgwMjQ0LCA4MDI1MiwgODAyNjAsIDgwMjY4LCA4MDI3NiwgODAyODUsIDgwMjk0LCA4MDMwMiwgODAzMTIsIDgwMzIwLCAKLSAgICA4MDMyOCwgODAzMzYsIDgwMzQ1LCA4MDM1MywgODAzNjMsIDgwMzcxLCA4MDM3OCwgODAzODUsIDgwMzkzLCA4MDQwMCwgCi0gICAgODA0MDksIDgwNDE2LCA4MDQyNCwgODA0MzIsIDgwNDQxLCA4MDQ0OSwgODA0NTksIDgwNDY3LCA4MDQ3NSwgODA0ODMsIAotICAgIDgwNDkzLCA4MDUwMSwgODA1MDgsIDgwNTE1LCA4MDUyMywgODA1MzAsIDgwNTM5LCA4MDU0NiwgODA1NTYsIDgwNTY2LCAKLSAgICA4MDU3NywgODA1ODYsIDgwNTk1LCA4MDYwNCwgODA2MTMsIDgwNjIyLCA4MDYzMiwgODA2NDMsIDgwNjU0LCA4MDY2NCwgCi0gICAgODA2NzUsIDgwNjg3LCA4MDY5NywgODA3MDYsIDgwNzE1LCA4MDcyMywgODA3MzIsIDgwNzQyLCA4MDc1MCwgODA3NTksIAotICAgIDgwNzY4LCA4MDc3NiwgODA3ODUsIDgwNzk1LCA4MDgwMywgODA4MTIsIDgwODIxLCA4MDgyOSwgODA4MzgsIDgwODQ4LCAKLSAgICA4MDg1NiwgODA4NjYsIDgwODc0LCA4MDg4NCwgODA4OTIsIDgwOTAwLCA4MDkwOSwgODA5MTcsIDgwOTI3LCA4MDkzNSwgCi0gICAgODA5NDMsIDgwOTUzLCA4MDk2MSwgODA5NjgsIDgwOTc1LCA4MDk4NCwgODA5OTMsIDgxMDAxLCA4MTAxMCwgODEwMjAsIAotICAgIDgxMDI4LCA4MTAzOSwgODEwNDcsIDgxMDU1LCA4MTA2MiwgODEwNzAsIDgxMDc5LCA4MTA4NiwgODEwOTYsIDgxMTA2LCAKLSAgICA4MTExNywgODExMjcsIDgxMTM4LCA4MTE0NiwgODExNTQsIDgxMTYzLCA4MTE3MSwgODExODAsIDgxMTg4LCA4MTE5NiwgCi0gICAgODEyMDUsIDgxMjEzLCA4MTIyMiwgODEyMzAsIDgxMjM3LCA4MTI0NCwgODEyNTEsIDgxMjU4LCA4MTI2NiwgODEyNzQsIAotICAgIDgxMjgyLCA4MTI5MCwgODEyOTksIDgxMzA3LCA4MTMxNSwgODEzMjQsIDgxMzMyLCA4MTM0MCwgODEzNDgsIDgxMzU3LCAKLSAgICA4MTM2NSwgODEzNzMsIDgxMzgxLCA4MTM4OSwgODEzOTcsIDgxNDA1LCA4MTQxMywgODE0MjEsIDgxNDI5LCA4MTQzOCwgCi0gICAgODE0NDYsIDgxNDU0LCA4MTQ2MiwgODE0NzAsIDgxNDc4LCA4MTQ4NywgODE0OTYsIDgxNTA0LCA4MTUxMiwgODE1MjAsIAotICAgIDgxNTI5LCA4MTUzNywgODE1NDYsIDgxNTUzLCA4MTU2MCwgODE1NjgsIDgxNTc1LCA4MTU4MywgODE1OTEsIDgxNjAwLCAKLSAgICA4MTYwOCwgODE2MTcsIDgxNjI1LCA4MTYzMywgODE2NDMsIDgxNjUwLCA4MTY1NywgODE2NjUsIDgxNjcyLCA4MTY4MCwgCi0gICAgODE2OTAsIDgxNzAxLCA4MTcwOSwgODE3MTgsIDgxNzI2LCA4MTczNSwgODE3NDMsIDgxNzUyLCA4MTc2MCwgODE3NjksIAotICAgIDgxNzc3LCA4MTc4NiwgODE3OTUsIDgxODAzLCA4MTgxMSwgODE4MTksIDgxODI4LCA4MTgzNSwgODE4NDMsIDgxODUyLCAKLSAgICA4MTg2MSwgODE4NzAsIDgxODgwLCA4MTg4OCwgODE4OTgsIDgxOTA2LCA4MTkxNiwgODE5MjQsIDgxOTM0LCA4MTk0MiwgCi0gICAgODE5NTIsIDgxOTYwLCA4MTk2OSwgODE5NzYsIDgxOTg1LCA4MTk5MiwgODIwMDIsIDgyMDEwLCA4MjAyMCwgODIwMjgsIAotICAgIDgyMDM4LCA4MjA0NiwgODIwNTQsIDgyMDYyLCA4MjA3MSwgODIwNzksIDgyMDg4LCA4MjA5NywgODIxMDYsIDgyMTE1LCAKLSAgICA4MjEyNSwgODIxMzMsIDgyMTQzLCA4MjE1MSwgODIxNjEsIDgyMTY5LCA4MjE3OSwgODIxODcsIDgyMTk3LCA4MjIwNSwgCi0gICAgODIyMTQsIDgyMjIxLCA4MjIzMCwgODIyMzcsIDgyMjQ3LCA4MjI1NSwgODIyNjUsIDgyMjczLCA4MjI4MywgODIyOTEsIAotICAgIDgyMjk5LCA4MjMwNywgODIzMTYsIDgyMzI0LCA4MjMzMywgODIzNDIsIDgyMzUxLCA4MjM2MCwgODIzNjgsIDgyMzc2LCAKLSAgICA4MjM4NSwgODIzOTMsIDgyNDAyLCA4MjQxMSwgODI0MTksIDgyNDI3LCA4MjQzNSwgODI0NDQsIDgyNDUyLCA4MjQ2MCwgCi0gICAgODI0NjksIDgyNDc3LCA4MjQ4NSwgODI0OTMsIDgyNTAxLCA4MjUwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgODI1MTEsIDgyNTIxLCA4MjUzMSwgODI1NDEsIDgyNTUxLCA4MjU2MiwgODI1NzIsIDgyNTgyLCAKLSAgICA4MjU5MywgODI2MDIsIDgyNjExLCA4MjYyMCwgODI2MzEsIDgyNjQxLCA4MjY1MSwgODI2NjMsIDgyNjczLCA4MjY4MywgCi0gICAgODI2OTMsIDgyNzAzLCA4MjcxMywgODI3MjMsIDgyNzMzLCA4Mjc0MywgODI3NTMsIDgyNzYzLCA4Mjc3MywgODI3ODQsIAotICAgIDgyNzk1LCA4MjgwNSwgODI4MTUsIDgyODI3LCA4MjgzOCwgODI4NDksIDgyODU5LCA4Mjg2OSwgODI4NzksIDgyODg5LCAKLSAgICA4Mjg5OSwgODI5MDksIDgyOTE5LCA4MjkzMSwgODI5NDEsIDgyOTUxLCA4Mjk2MywgODI5NzQsIDgyOTg1LCA4Mjk5NSwgCi0gICAgODMwMDUsIDgzMDE1LCA4MzAyNSwgODMwMzcsIDgzMDQ3LCA4MzA1NywgODMwNjgsIDgzMDc5LCA4MzA4OSwgODMwOTksIAotICAgIDgzMTA4LCA4MzExNywgODMxMjYsIDgzMTM1LCA4MzE0NCwgODMxNTQsIDAsIDAsIDgzMTY0LCA4MzE3NCwgODMxODQsIAotICAgIDgzMTk0LCA4MzIwNCwgODMyMTYsIDgzMjI2LCA4MzIzNiwgODMyNDgsIDgzMjU4LCA4MzI3MCwgODMyNzksIDgzMjg4LCAKLSAgICA4MzI5OSwgODMzMDksIDgzMzIxLCA4MzMzMiwgODMzNDUsIDgzMzU1LCA4MzM2NywgODMzNzYsIDgzMzg3LCA4MzM5OCwgCi0gICAgODM0MTEsIDgzNDIxLCA4MzQzMSwgODM0NDEsIDgzNDUxLCA4MzQ2MSwgODM0NzAsIDgzNDc5LCA4MzQ4OCwgODM0OTcsIAotICAgIDgzNTA3LCA4MzUxNywgODM1MjcsIDgzNTM3LCA4MzU0NywgODM1NTcsIDgzNTY3LCA4MzU3NywgODM1ODcsIDgzNTk3LCAKLSAgICA4MzYwNywgODM2MTcsIDgzNjI2LCA4MzYzNSwgODM2NDQsIDgzNjU0LCA4MzY2NCwgODM2NzQsIDgzNjg0LCA4MzY5NCwgCi0gICAgODM3MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzNzE1LCA4MzczMCwgCi0gICAgODM3NDUsIDgzNzUxLCA4Mzc1NywgODM3NjMsIDgzNzY5LCA4Mzc3NSwgODM3ODEsIDgzNzg3LCA4Mzc5MywgODM4MDEsIAotICAgIDgzODA1LCA4MzgwOCwgMCwgMCwgODM4MTYsIDgzODE5LCA4MzgyMiwgODM4MjUsIDgzODI4LCA4MzgzMSwgODM4MzQsIAotICAgIDgzODM3LCA4Mzg0MCwgODM4NDMsIDgzODQ2LCA4Mzg0OSwgODM4NTIsIDgzODU1LCA4Mzg1OCwgODM4NjEsIDgzODY0LCAKLSAgICA4Mzg3MiwgODM4ODEsIDgzODkyLCA4MzkwMCwgODM5MDgsIDgzOTE3LCA4MzkyNiwgODM5MzcsIDgzOTQ5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA4Mzk1OCwgODM5NjMsIDgzOTY4LCA4Mzk3NSwgODM5ODIsIDgzOTg4LCA4Mzk5NCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgODM5OTksIDg0MDA5LCA4NDAxOSwgODQwMjksIDg0MDM4LCA4NDA0OSwgODQwNTgsIDg0MDY3LCAKLSAgICA4NDA3NywgODQwODcsIDg0MDk5LCA4NDExMSwgODQxMjIsIDg0MTMzLCA4NDE0NCwgODQxNTUsIDg0MTY1LCA4NDE3NSwgCi0gICAgODQxODUsIDg0MTk1LCA4NDIwNiwgODQyMTcsIDg0MjIxLCA4NDIyNiwgODQyMzUsIDg0MjQ0LCA4NDI0OCwgODQyNTIsIAotICAgIDg0MjU2LCA4NDI2MSwgODQyNjYsIDg0MjcxLCA4NDI3NiwgODQyNzksIDg0MjgzLCAwLCA4NDI4OCwgODQyOTEsIDg0Mjk0LCAKLSAgICA4NDI5OCwgODQzMDIsIDg0MzA3LCA4NDMxMSwgODQzMTUsIDg0MzIwLCA4NDMyNSwgODQzMzIsIDg0MzM5LCA4NDM0MiwgCi0gICAgODQzNDUsIDg0MzQ4LCA4NDM1MSwgODQzNTQsIDg0MzU4LCA4NDM2MiwgMCwgODQzNjYsIDg0MzcxLCA4NDM3NSwgODQzNzksIAotICAgIDAsIDAsIDAsIDAsIDg0Mzg0LCA4NDM4OSwgODQzOTYsIDg0NDAxLCA4NDQwNiwgMCwgODQ0MTEsIDg0NDE2LCA4NDQyMSwgCi0gICAgODQ0MjYsIDg0NDMxLCA4NDQzNiwgODQ0NDEsIDg0NDQ2LCA4NDQ1MSwgODQ0NTYsIDg0NDYxLCA4NDQ2NiwgODQ0NzUsIAotICAgIDg0NDg0LCA4NDQ5MiwgODQ1MDAsIDg0NTA5LCA4NDUxOCwgODQ1MjcsIDg0NTM2LCA4NDU0NCwgODQ1NTIsIDg0NTYwLCAKLSAgICA4NDU2OCwgODQ1NzMsIDg0NTc4LCA4NDU4NCwgODQ1OTAsIDg0NTk2LCA4NDYwMiwgODQ2MTAsIDg0NjE4LCA4NDYyNCwgCi0gICAgODQ2MzAsIDg0NjM2LCA4NDY0MiwgODQ2NDgsIDg0NjU0LCA4NDY2MCwgODQ2NjYsIDg0NjcxLCA4NDY3NiwgODQ2ODEsIAotICAgIDg0Njg2LCA4NDY5MSwgODQ2OTYsIDg0NzAxLCA4NDcwNiwgODQ3MTIsIDg0NzE4LCA4NDcyNCwgODQ3MzAsIDg0NzM2LCAKLSAgICA4NDc0MiwgODQ3NDgsIDg0NzU0LCA4NDc2MCwgODQ3NjYsIDg0NzcyLCA4NDc3OCwgODQ3ODQsIDg0NzkwLCA4NDc5NiwgCi0gICAgODQ4MDIsIDg0ODA4LCA4NDgxNCwgODQ4MjAsIDg0ODI2LCA4NDgzMiwgODQ4MzgsIDg0ODQ0LCA4NDg1MCwgODQ4NTYsIAotICAgIDg0ODYyLCA4NDg2OCwgODQ4NzQsIDg0ODgwLCA4NDg4NiwgODQ4OTIsIDg0ODk4LCA4NDkwNCwgODQ5MTAsIDg0OTE2LCAKLSAgICA4NDkyMiwgODQ5MjgsIDg0OTM0LCA4NDk0MCwgODQ5NDYsIDg0OTUyLCA4NDk1OCwgODQ5NjQsIDg0OTcwLCA4NDk3NiwgCi0gICAgODQ5ODIsIDg0OTg4LCA4NDk5NCwgODUwMDAsIDg1MDA2LCA4NTAxMiwgODUwMTgsIDg1MDI0LCA4NTAzMCwgODUwMzYsIAotICAgIDg1MDQyLCA4NTA0OCwgODUwNTQsIDg1MDYwLCA4NTA2NiwgODUwNzEsIDg1MDc2LCA4NTA4MSwgODUwODYsIDg1MDkyLCAKLSAgICA4NTA5OCwgODUxMDQsIDg1MTEwLCA4NTExNiwgODUxMjIsIDg1MTI4LCA4NTEzNCwgODUxNDAsIDg1MTQ2LCA4NTE1MywgCi0gICAgODUxNjAsIDg1MTY1LCA4NTE3MCwgODUxNzUsIDg1MTgwLCA4NTE5MiwgODUyMDQsIDg1MjE1LCA4NTIyNiwgODUyMzgsIAotICAgIDg1MjUwLCA4NTI1OCwgMCwgMCwgODUyNjYsIDAsIDg1Mjc0LCA4NTI3OCwgODUyODIsIDg1Mjg1LCA4NTI4OSwgODUyOTMsIAotICAgIDg1Mjk2LCA4NTI5OSwgODUzMDMsIDg1MzA3LCA4NTMxMCwgODUzMTMsIDg1MzE2LCA4NTMxOSwgODUzMjQsIDg1MzI3LCAKLSAgICA4NTMzMSwgODUzMzQsIDg1MzM3LCA4NTM0MCwgODUzNDMsIDg1MzQ2LCA4NTM0OSwgODUzNTIsIDg1MzU1LCA4NTM1OCwgCi0gICAgODUzNjEsIDg1MzY0LCA4NTM2OCwgODUzNzIsIDg1Mzc2LCA4NTM4MCwgODUzODUsIDg1MzkwLCA4NTM5NiwgODU0MDIsIAotICAgIDg1NDA4LCA4NTQxMywgODU0MTksIDg1NDI1LCA4NTQzMSwgODU0MzYsIDg1NDQyLCA4NTQ0OCwgODU0NTMsIDg1NDU4LCAKLSAgICA4NTQ2NCwgODU0NjksIDg1NDc1LCA4NTQ4MSwgODU0ODYsIDg1NDkyLCA4NTQ5OCwgODU1MDMsIDg1NTA5LCA4NTUxNSwgCi0gICAgODU1MjEsIDg1NTI3LCA4NTUzMywgODU1MzcsIDg1NTQyLCA4NTU0NiwgODU1NTEsIDg1NTU1LCA4NTU2MCwgODU1NjUsIAotICAgIDg1NTcxLCA4NTU3NywgODU1ODMsIDg1NTg4LCA4NTU5NCwgODU2MDAsIDg1NjA2LCA4NTYxMSwgODU2MTcsIDg1NjIzLCAKLSAgICA4NTYyOCwgODU2MzMsIDg1NjM5LCA4NTY0NCwgODU2NTAsIDg1NjU2LCA4NTY2MSwgODU2NjcsIDg1NjczLCA4NTY3OCwgCi0gICAgODU2ODQsIDg1NjkwLCA4NTY5NiwgODU3MDIsIDg1NzA4LCA4NTcxMywgODU3MTcsIDg1NzIyLCA4NTcyNCwgODU3MjksIAotICAgIDg1NzM0LCA4NTc0MCwgODU3NDUsIDg1NzUwLCA4NTc1NCwgODU3NjAsIDg1NzY1LCA4NTc3MCwgODU3NzUsIDg1NzgwLCAKLSAgICA4NTc4NSwgODU3OTAsIDg1Nzk1LCA4NTgwMSwgODU4MDcsIDg1ODEzLCA4NTgyMSwgODU4MjUsIDg1ODI5LCA4NTgzMywgCi0gICAgODU4MzcsIDg1ODQxLCA4NTg0NSwgODU4NTAsIDg1ODU1LCA4NTg2MCwgODU4NjUsIDg1ODY5LCA4NTg3NCwgODU4NzksIAotICAgIDg1ODg0LCA4NTg4OSwgODU4OTQsIDg1ODk5LCA4NTkwNCwgODU5MDksIDg1OTEzLCA4NTkxNywgODU5MjIsIDg1OTI3LCAKLSAgICA4NTkzMiwgODU5MzcsIDg1OTQxLCA4NTk0NiwgODU5NTEsIDg1OTU2LCA4NTk2MSwgODU5NjUsIDg1OTcwLCA4NTk3NSwgCi0gICAgODU5ODAsIDg1OTg1LCA4NTk4OSwgODU5OTQsIDg1OTk5LCA4NjAwMywgODYwMDgsIDg2MDEzLCA4NjAxOCwgODYwMjMsIAotICAgIDg2MDI4LCA4NjAzMywgODYwNDAsIDg2MDQ3LCA4NjA1MSwgODYwNTYsIDg2MDYxLCA4NjA2NiwgODYwNzEsIDg2MDc2LCAKLSAgICA4NjA4MSwgODYwODYsIDg2MDkxLCA4NjA5NiwgODYxMDEsIDg2MTA2LCA4NjExMSwgODYxMTYsIDg2MTIxLCA4NjEyNiwgCi0gICAgODYxMzEsIDg2MTM2LCA4NjE0MSwgODYxNDYsIDg2MTUxLCA4NjE1NiwgODYxNjEsIDg2MTY2LCA4NjE3MSwgODYxNzYsIAotICAgIDg2MTgxLCA4NjE4NiwgODYxOTEsIDg2MTk2LCAwLCAwLCAwLCA4NjIwMSwgODYyMDUsIDg2MjEwLCA4NjIxNCwgODYyMTksIAotICAgIDg2MjI0LCAwLCAwLCA4NjIyOCwgODYyMzMsIDg2MjM4LCA4NjI0MiwgODYyNDcsIDg2MjUyLCAwLCAwLCA4NjI1NywgCi0gICAgODYyNjIsIDg2MjY2LCA4NjI3MSwgODYyNzYsIDg2MjgxLCAwLCAwLCA4NjI4NiwgODYyOTEsIDg2Mjk2LCAwLCAwLCAwLCAKLSAgICA4NjMwMCwgODYzMDQsIDg2MzA4LCA4NjMxMiwgODYzMTUsIDg2MzE5LCA4NjMyMywgMCwgODYzMjcsIDg2MzMzLCA4NjMzNiwgCi0gICAgODYzNDAsIDg2MzQzLCA4NjM0NywgODYzNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2MzU1LCA4NjM2MSwgCi0gICAgODYzNjcsIDg2MzczLCA4NjM3OSwgMCwgMCwgODYzODMsIDg2Mzg5LCA4NjM5NSwgODY0MDEsIDg2NDA3LCA4NjQxMywgCi0gICAgODY0MjAsIDg2NDI3LCA4NjQzNCwgODY0NDEsIDg2NDQ4LCA4NjQ1NSwgMCwgODY0NjIsIDg2NDY5LCA4NjQ3NiwgODY0ODIsIAotICAgIDg2NDg5LCA4NjQ5NiwgODY1MDMsIDg2NTEwLCA4NjUxNiwgODY1MjMsIDg2NTMwLCA4NjUzNywgODY1NDQsIDg2NTUwLCAKLSAgICA4NjU1NywgODY1NjQsIDg2NTcxLCA4NjU3OCwgODY1ODQsIDg2NTkxLCA4NjU5OCwgODY2MDUsIDg2NjEyLCA4NjYxOSwgCi0gICAgODY2MjYsIDg2NjMzLCAwLCA4NjY0MCwgODY2NDYsIDg2NjUzLCA4NjY2MCwgODY2NjcsIDg2Njc0LCA4NjY4MCwgODY2ODcsIAotICAgIDg2Njk0LCA4NjcwMSwgODY3MDgsIDg2NzE1LCA4NjcyMiwgODY3MjksIDg2NzM1LCA4Njc0MiwgODY3NDksIDg2NzU2LCAKLSAgICA4Njc2MywgMCwgODY3NzAsIDg2Nzc3LCAwLCA4Njc4NCwgODY3OTEsIDg2Nzk4LCA4NjgwNSwgODY4MTIsIDg2ODE5LCAKLSAgICA4NjgyNiwgODY4MzMsIDg2ODQwLCA4Njg0NywgODY4NTQsIDg2ODYxLCA4Njg2OCwgODY4NzUsIDg2ODgyLCAwLCAwLCAKLSAgICA4Njg4OCwgODY4OTMsIDg2ODk4LCA4NjkwMywgODY5MDgsIDg2OTEzLCA4NjkxOCwgODY5MjMsIDg2OTI4LCA4NjkzMywgCi0gICAgODY5MzgsIDg2OTQzLCA4Njk0OCwgODY5NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2OTU4LCA4Njk2NSwgCi0gICAgODY5NzIsIDg2OTc5LCA4Njk4NiwgODY5OTMsIDg3MDAwLCA4NzAwNywgODcwMTQsIDg3MDIxLCA4NzAyOCwgODcwMzUsIAotICAgIDg3MDQyLCA4NzA0OSwgODcwNTYsIDg3MDYzLCA4NzA3MCwgODcwNzcsIDg3MDg0LCA4NzA5MSwgODcwOTksIDg3MTA3LCAKLSAgICA4NzExNCwgODcxMjEsIDg3MTI2LCA4NzEzNCwgODcxNDIsIDg3MTQ5LCA4NzE1NiwgODcxNjEsIDg3MTY4LCA4NzE3MywgCi0gICAgODcxNzgsIDg3MTg1LCA4NzE5MCwgODcxOTUsIDg3MjAwLCA4NzIwOCwgODcyMTMsIDg3MjE4LCA4NzIyNSwgODcyMzAsIAotICAgIDg3MjM1LCA4NzI0MiwgODcyNDksIDg3MjU0LCA4NzI1OSwgODcyNjQsIDg3MjY5LCA4NzI3NCwgODcyNzksIDg3Mjg0LCAKLSAgICA4NzI4OSwgODcyOTQsIDg3MzAxLCA4NzMwNiwgODczMTMsIDg3MzE4LCA4NzMyMywgODczMjgsIDg3MzMzLCA4NzMzOCwgCi0gICAgODczNDMsIDg3MzQ4LCA4NzM1MywgODczNTgsIDg3MzYzLCA4NzM2OCwgODczNzUsIDg3MzgyLCA4NzM4OSwgODczOTYsIAotICAgIDg3NDAyLCA4NzQwNywgODc0MTQsIDg3NDE5LCA4NzQyNCwgODc0MzMsIDg3NDQwLCA4NzQ0OSwgODc0NTYsIDg3NDYxLCAKLSAgICA4NzQ2NiwgODc0NzQsIDg3NDc5LCA4NzQ4NCwgODc0ODksIDg3NDk0LCA4NzQ5OSwgODc1MDYsIDg3NTExLCA4NzUxNiwgCi0gICAgODc1MjEsIDg3NTI2LCA4NzUzMSwgODc1MzgsIDg3NTQ1LCA4NzU1MiwgODc1NTksIDg3NTY2LCA4NzU3MywgODc1ODAsIAotICAgIDg3NTg3LCA4NzU5NCwgODc2MDEsIDg3NjA4LCA4NzYxNSwgODc2MjIsIDg3NjI5LCA4NzYzNiwgODc2NDMsIDg3NjUwLCAKLSAgICA4NzY1NywgODc2NjQsIDg3NjcxLCA4NzY3OCwgODc2ODUsIDg3NjkyLCA4NzY5OSwgODc3MDYsIDg3NzEzLCA4NzcyMCwgCi0gICAgODc3MjcsIDAsIDAsIDAsIDAsIDAsIDg3NzM0LCA4Nzc0MiwgODc3NTAsIDAsIDAsIDAsIDAsIDg3NzU1LCA4Nzc1OSwgCi0gICAgODc3NjMsIDg3NzY3LCA4Nzc3MSwgODc3NzUsIDg3Nzc5LCA4Nzc4MywgODc3ODcsIDg3NzkxLCA4Nzc5NiwgODc4MDEsIAotICAgIDg3ODA2LCA4NzgxMSwgODc4MTYsIDg3ODIxLCA4NzgyNiwgODc4MzEsIDg3ODM2LCA4Nzg0MiwgODc4NDgsIDg3ODU0LCAKLSAgICA4Nzg2MSwgODc4NjgsIDg3ODc1LCA4Nzg4MiwgODc4ODksIDg3ODk2LCA4NzkwMiwgODc5MDgsIDg3OTE0LCA4NzkyMSwgCi0gICAgODc5MjgsIDg3OTM1LCA4Nzk0MiwgODc5NDksIDg3OTU2LCA4Nzk2MywgODc5NzAsIDg3OTc3LCA4Nzk4NCwgODc5OTEsIAotICAgIDg3OTk4LCA4ODAwNSwgODgwMTIsIDAsIDAsIDAsIDg4MDE5LCA4ODAyNywgODgwMzUsIDg4MDQzLCA4ODA1MSwgODgwNTksIAotICAgIDg4MDY5LCA4ODA3OSwgODgwODcsIDg4MDk1LCA4ODEwMywgODgxMTEsIDg4MTE5LCA4ODEyNSwgODgxMzIsIDg4MTQxLCAKLSAgICA4ODE1MCwgODgxNTksIDg4MTY4LCA4ODE3NywgODgxODYsIDg4MTk2LCA4ODIwNywgODgyMTcsIDg4MjI4LCA4ODIzNywgCi0gICAgODgyNDYsIDg4MjU1LCA4ODI2NSwgODgyNzYsIDg4Mjg2LCA4ODI5NywgODgzMDgsIDg4MzE3LCA4ODMyNSwgODgzMzEsIAotICAgIDg4MzM3LCA4ODM0MywgODgzNDksIDg4MzU3LCA4ODM2NSwgODgzNzEsIDg4Mzc4LCA4ODM4OCwgODgzOTUsIDg4NDAyLCAKLSAgICA4ODQwOSwgODg0MTYsIDg4NDIzLCA4ODQzMywgODg0NDAsIDg4NDQ3LCA4ODQ1NSwgODg0NjMsIDg4NDcyLCA4ODQ4MSwgCi0gICAgODg0OTAsIDg4NDk5LCA4ODUwOCwgODg1MTYsIDg4NTI1LCA4ODUzNCwgODg1NDMsIDg4NTQ3LCA4ODU1NCwgODg1NTksIAotICAgIDg4NTY0LCA4ODU2OCwgODg1NzIsIDg4NTc2LCA4ODU4MCwgODg1ODUsIDg4NTkwLCA4ODU5NiwgODg2MDIsIDg4NjA2LCAKLSAgICA4ODYxMiwgODg2MTYsIDg4NjIwLCA4ODYyNCwgODg2MjgsIDg4NjMyLCA4ODYzNiwgODg2NDIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg4NjQ2LCA4ODY1MSwgODg2NTYsIDg4NjYxLCA4ODY2NiwgODg2NzMsIDg4Njc4LCA4ODY4MywgODg2ODgsIDg4NjkzLCAKLSAgICA4ODY5OCwgODg3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzNzQzLCA4Mzc1OCwgODM3NzMsIDgzNzc5LCA4Mzc4NSwgODM3OTEsIAorICAgIDgzNzk3LCA4MzgwMywgODM4MDksIDgzODE1LCA4MzgyMSwgODM4MjksIDgzODMzLCA4MzgzNiwgMCwgMCwgODM4NDQsIAorICAgIDgzODQ3LCA4Mzg1MCwgODM4NTMsIDgzODU2LCA4Mzg1OSwgODM4NjIsIDgzODY1LCA4Mzg2OCwgODM4NzEsIDgzODc0LCAKKyAgICA4Mzg3NywgODM4ODAsIDgzODgzLCA4Mzg4NiwgODM4ODksIDgzODkyLCA4MzkwMCwgODM5MDksIDgzOTIwLCA4MzkyOCwgCisgICAgODM5MzYsIDgzOTQ1LCA4Mzk1NCwgODM5NjUsIDgzOTc3LCAwLCAwLCAwLCAwLCAwLCAwLCA4Mzk4NiwgODM5OTEsIDgzOTk2LCAKKyAgICA4NDAwMywgODQwMTAsIDg0MDE2LCA4NDAyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODQwMjcsIDg0MDM3LCAKKyAgICA4NDA0NywgODQwNTcsIDg0MDY2LCA4NDA3NywgODQwODYsIDg0MDk1LCA4NDEwNSwgODQxMTUsIDg0MTI3LCA4NDEzOSwgCisgICAgODQxNTAsIDg0MTYxLCA4NDE3MiwgODQxODMsIDg0MTkzLCA4NDIwMywgODQyMTMsIDg0MjIzLCA4NDIzNCwgODQyNDUsIAorICAgIDg0MjQ5LCA4NDI1NCwgODQyNjMsIDg0MjcyLCA4NDI3NiwgODQyODAsIDg0Mjg0LCA4NDI4OSwgODQyOTQsIDg0Mjk5LCAKKyAgICA4NDMwNCwgODQzMDcsIDg0MzExLCAwLCA4NDMxNiwgODQzMTksIDg0MzIyLCA4NDMyNiwgODQzMzAsIDg0MzM1LCA4NDMzOSwgCisgICAgODQzNDMsIDg0MzQ4LCA4NDM1MywgODQzNjAsIDg0MzY3LCA4NDM3MCwgODQzNzMsIDg0Mzc2LCA4NDM3OSwgODQzODIsIAorICAgIDg0Mzg2LCA4NDM5MCwgMCwgODQzOTQsIDg0Mzk5LCA4NDQwMywgODQ0MDcsIDAsIDAsIDAsIDAsIDg0NDEyLCA4NDQxNywgCisgICAgODQ0MjQsIDg0NDI5LCA4NDQzNCwgMCwgODQ0MzksIDg0NDQ0LCA4NDQ0OSwgODQ0NTQsIDg0NDU5LCA4NDQ2NCwgODQ0NjksIAorICAgIDg0NDc0LCA4NDQ3OSwgODQ0ODQsIDg0NDg5LCA4NDQ5NCwgODQ1MDMsIDg0NTEyLCA4NDUyMCwgODQ1MjgsIDg0NTM3LCAKKyAgICA4NDU0NiwgODQ1NTUsIDg0NTY0LCA4NDU3MiwgODQ1ODAsIDg0NTg4LCA4NDU5NiwgODQ2MDEsIDg0NjA2LCA4NDYxMiwgCisgICAgODQ2MTgsIDg0NjI0LCA4NDYzMCwgODQ2MzgsIDg0NjQ2LCA4NDY1MiwgODQ2NTgsIDg0NjY0LCA4NDY3MCwgODQ2NzYsIAorICAgIDg0NjgyLCA4NDY4OCwgODQ2OTQsIDg0Njk5LCA4NDcwNCwgODQ3MDksIDg0NzE0LCA4NDcxOSwgODQ3MjQsIDg0NzI5LCAKKyAgICA4NDczNCwgODQ3NDAsIDg0NzQ2LCA4NDc1MiwgODQ3NTgsIDg0NzY0LCA4NDc3MCwgODQ3NzYsIDg0NzgyLCA4NDc4OCwgCisgICAgODQ3OTQsIDg0ODAwLCA4NDgwNiwgODQ4MTIsIDg0ODE4LCA4NDgyNCwgODQ4MzAsIDg0ODM2LCA4NDg0MiwgODQ4NDgsIAorICAgIDg0ODU0LCA4NDg2MCwgODQ4NjYsIDg0ODcyLCA4NDg3OCwgODQ4ODQsIDg0ODkwLCA4NDg5NiwgODQ5MDIsIDg0OTA4LCAKKyAgICA4NDkxNCwgODQ5MjAsIDg0OTI2LCA4NDkzMiwgODQ5MzgsIDg0OTQ0LCA4NDk1MCwgODQ5NTYsIDg0OTYyLCA4NDk2OCwgCisgICAgODQ5NzQsIDg0OTgwLCA4NDk4NiwgODQ5OTIsIDg0OTk4LCA4NTAwNCwgODUwMTAsIDg1MDE2LCA4NTAyMiwgODUwMjgsIAorICAgIDg1MDM0LCA4NTA0MCwgODUwNDYsIDg1MDUyLCA4NTA1OCwgODUwNjQsIDg1MDcwLCA4NTA3NiwgODUwODIsIDg1MDg4LCAKKyAgICA4NTA5NCwgODUwOTksIDg1MTA0LCA4NTEwOSwgODUxMTQsIDg1MTIwLCA4NTEyNiwgODUxMzIsIDg1MTM4LCA4NTE0NCwgCisgICAgODUxNTAsIDg1MTU2LCA4NTE2MiwgODUxNjgsIDg1MTc0LCA4NTE4MSwgODUxODgsIDg1MTkzLCA4NTE5OCwgODUyMDMsIAorICAgIDg1MjA4LCA4NTIyMCwgODUyMzIsIDg1MjQzLCA4NTI1NCwgODUyNjYsIDg1Mjc4LCA4NTI4NiwgMCwgMCwgODUyOTQsIDAsIAorICAgIDg1MzAyLCA4NTMwNiwgODUzMTAsIDg1MzEzLCA4NTMxNywgODUzMjEsIDg1MzI0LCA4NTMyNywgODUzMzEsIDg1MzM1LCAKKyAgICA4NTMzOCwgODUzNDEsIDg1MzQ0LCA4NTM0NywgODUzNTIsIDg1MzU1LCA4NTM1OSwgODUzNjIsIDg1MzY1LCA4NTM2OCwgCisgICAgODUzNzEsIDg1Mzc0LCA4NTM3NywgODUzODAsIDg1MzgzLCA4NTM4NiwgODUzODksIDg1MzkyLCA4NTM5NiwgODU0MDAsIAorICAgIDg1NDA0LCA4NTQwOCwgODU0MTMsIDg1NDE4LCA4NTQyNCwgODU0MzAsIDg1NDM2LCA4NTQ0MSwgODU0NDcsIDg1NDUzLCAKKyAgICA4NTQ1OSwgODU0NjQsIDg1NDcwLCA4NTQ3NiwgODU0ODEsIDg1NDg2LCA4NTQ5MiwgODU0OTcsIDg1NTAzLCA4NTUwOSwgCisgICAgODU1MTQsIDg1NTIwLCA4NTUyNiwgODU1MzEsIDg1NTM3LCA4NTU0MywgODU1NDksIDg1NTU1LCA4NTU2MSwgODU1NjUsIAorICAgIDg1NTcwLCA4NTU3NCwgODU1NzksIDg1NTgzLCA4NTU4OCwgODU1OTMsIDg1NTk5LCA4NTYwNSwgODU2MTEsIDg1NjE2LCAKKyAgICA4NTYyMiwgODU2MjgsIDg1NjM0LCA4NTYzOSwgODU2NDUsIDg1NjUxLCA4NTY1NiwgODU2NjEsIDg1NjY3LCA4NTY3MiwgCisgICAgODU2NzgsIDg1Njg0LCA4NTY4OSwgODU2OTUsIDg1NzAxLCA4NTcwNiwgODU3MTIsIDg1NzE4LCA4NTcyNCwgODU3MzAsIAorICAgIDg1NzM2LCA4NTc0MSwgODU3NDUsIDg1NzUwLCA4NTc1MiwgODU3NTcsIDg1NzYyLCA4NTc2OCwgODU3NzMsIDg1Nzc4LCAKKyAgICA4NTc4MiwgODU3ODgsIDg1NzkzLCA4NTc5OCwgODU4MDMsIDg1ODA4LCA4NTgxMywgODU4MTgsIDg1ODIzLCA4NTgyOSwgCisgICAgODU4MzUsIDg1ODQxLCA4NTg0OSwgODU4NTMsIDg1ODU3LCA4NTg2MSwgODU4NjUsIDg1ODY5LCA4NTg3MywgODU4NzgsIAorICAgIDg1ODgzLCA4NTg4OCwgODU4OTMsIDg1ODk3LCA4NTkwMiwgODU5MDcsIDg1OTEyLCA4NTkxNywgODU5MjIsIDg1OTI3LCAKKyAgICA4NTkzMiwgODU5MzcsIDg1OTQxLCA4NTk0NSwgODU5NTAsIDg1OTU1LCA4NTk2MCwgODU5NjUsIDg1OTY5LCA4NTk3NCwgCisgICAgODU5NzksIDg1OTg0LCA4NTk4OSwgODU5OTMsIDg1OTk4LCA4NjAwMywgODYwMDgsIDg2MDEzLCA4NjAxNywgODYwMjIsIAorICAgIDg2MDI3LCA4NjAzMSwgODYwMzYsIDg2MDQxLCA4NjA0NiwgODYwNTEsIDg2MDU2LCA4NjA2MSwgODYwNjgsIDg2MDc1LCAKKyAgICA4NjA3OSwgODYwODQsIDg2MDg5LCA4NjA5NCwgODYwOTksIDg2MTA0LCA4NjEwOSwgODYxMTQsIDg2MTE5LCA4NjEyNCwgCisgICAgODYxMjksIDg2MTM0LCA4NjEzOSwgODYxNDQsIDg2MTQ5LCA4NjE1NCwgODYxNTksIDg2MTY0LCA4NjE2OSwgODYxNzQsIAorICAgIDg2MTc5LCA4NjE4NCwgODYxODksIDg2MTk0LCA4NjE5OSwgODYyMDQsIDg2MjA5LCA4NjIxNCwgODYyMTksIDg2MjI0LCAwLCAKKyAgICAwLCAwLCA4NjIyOSwgODYyMzMsIDg2MjM4LCA4NjI0MiwgODYyNDcsIDg2MjUyLCAwLCAwLCA4NjI1NiwgODYyNjEsIAorICAgIDg2MjY2LCA4NjI3MCwgODYyNzUsIDg2MjgwLCAwLCAwLCA4NjI4NSwgODYyOTAsIDg2Mjk0LCA4NjI5OSwgODYzMDQsIAorICAgIDg2MzA5LCAwLCAwLCA4NjMxNCwgODYzMTksIDg2MzI0LCAwLCAwLCAwLCA4NjMyOCwgODYzMzIsIDg2MzM2LCA4NjM0MCwgCisgICAgODYzNDMsIDg2MzQ3LCA4NjM1MSwgMCwgODYzNTUsIDg2MzYxLCA4NjM2NCwgODYzNjgsIDg2MzcxLCA4NjM3NSwgODYzNzksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2MzgzLCA4NjM4OSwgODYzOTUsIDg2NDAxLCA4NjQwNywgMCwgMCwgCisgICAgODY0MTEsIDg2NDE3LCA4NjQyMywgODY0MjksIDg2NDM1LCA4NjQ0MSwgODY0NDgsIDg2NDU1LCA4NjQ2MiwgODY0NjksIAorICAgIDg2NDc2LCA4NjQ4MywgMCwgODY0OTAsIDg2NDk3LCA4NjUwNCwgODY1MTAsIDg2NTE3LCA4NjUyNCwgODY1MzEsIDg2NTM4LCAKKyAgICA4NjU0NCwgODY1NTEsIDg2NTU4LCA4NjU2NSwgODY1NzIsIDg2NTc4LCA4NjU4NSwgODY1OTIsIDg2NTk5LCA4NjYwNiwgCisgICAgODY2MTIsIDg2NjE5LCA4NjYyNiwgODY2MzMsIDg2NjQwLCA4NjY0NywgODY2NTQsIDg2NjYxLCAwLCA4NjY2OCwgODY2NzQsIAorICAgIDg2NjgxLCA4NjY4OCwgODY2OTUsIDg2NzAyLCA4NjcwOCwgODY3MTUsIDg2NzIyLCA4NjcyOSwgODY3MzYsIDg2NzQzLCAKKyAgICA4Njc1MCwgODY3NTcsIDg2NzYzLCA4Njc3MCwgODY3NzcsIDg2Nzg0LCA4Njc5MSwgMCwgODY3OTgsIDg2ODA1LCAwLCAKKyAgICA4NjgxMiwgODY4MTksIDg2ODI2LCA4NjgzMywgODY4NDAsIDg2ODQ3LCA4Njg1NCwgODY4NjEsIDg2ODY4LCA4Njg3NSwgCisgICAgODY4ODIsIDg2ODg5LCA4Njg5NiwgODY5MDMsIDg2OTEwLCAwLCAwLCA4NjkxNiwgODY5MjEsIDg2OTI2LCA4NjkzMSwgCisgICAgODY5MzYsIDg2OTQxLCA4Njk0NiwgODY5NTEsIDg2OTU2LCA4Njk2MSwgODY5NjYsIDg2OTcxLCA4Njk3NiwgODY5ODEsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzA4LCA4ODcxNSwgODg3MjQsIDg4NzMzLCA4ODc0MCwgODg3NDcsIDg4NzU0LCAKLSAgICA4ODc2MSwgODg3NjgsIDg4Nzc1LCA4ODc4MSwgODg3ODgsIDg4Nzk1LCA4ODgwMiwgODg4MDksIDg4ODE2LCA4ODgyMywgCi0gICAgODg4MzAsIDg4ODM3LCA4ODg0NiwgODg4NTMsIDg4ODYwLCA4ODg2NywgODg4NzQsIDg4ODgxLCA4ODg4OCwgODg4OTUsIAotICAgIDg4OTAyLCA4ODkxMSwgODg5MTgsIDg4OTI1LCA4ODkzMiwgODg5MzksIDg4OTQ2LCA4ODk1MywgODg5NjIsIDg4OTY5LCAKLSAgICA4ODk3NiwgODg5ODMsIDg4OTkwLCA4ODk5OSwgODkwMDYsIDg5MDEzLCA4OTAyMCwgODkwMjgsIDg5MDM3LCAwLCAwLCAKLSAgICA4OTA0NiwgODkwNTAsIDg5MDU0LCA4OTA1OSwgODkwNjQsIDg5MDY5LCA4OTA3NCwgODkwNzgsIDg5MDgzLCA4OTA4OCwgCi0gICAgODkwOTMsIDg5MDk4LCA4OTEwMywgODkxMDgsIDg5MTEyLCA4OTExNiwgODkxMjEsIDg5MTI2LCA4OTEzMSwgODkxMzUsIAotICAgIDg5MTQwLCA4OTE0NSwgODkxNDksIDg5MTU0LCA4OTE1OSwgODkxNjQsIDg5MTY5LCA4OTE3NCwgODkxNzksIDAsIDAsIDAsIAotICAgIDg5MTg0LCA4OTE4OCwgODkxOTMsIDg5MTk4LCA4OTIwMiwgODkyMDcsIDg5MjExLCA4OTIxNiwgODkyMjEsIDg5MjI2LCAKLSAgICA4OTIzMSwgODkyMzUsIDg5MjM5LCA4OTI0NCwgODkyNDksIDg5MjU0LCA4OTI1OSwgODkyNjQsIDg5MjY5LCA4OTI3MywgCi0gICAgODkyNzgsIDg5MjgzLCA4OTI4OCwgODkyOTMsIDg5Mjk4LCA4OTMwMywgODkzMDcsIDg5MzExLCA4OTMxNiwgODkzMjEsIAotICAgIDg5MzI2LCA4OTMzMSwgODkzMzYsIDg5MzQxLCA4OTM0NiwgODkzNTEsIDg5MzU2LCA4OTM2MSwgODkzNjYsIDg5MzcxLCAKLSAgICA4OTM3NiwgODkzODEsIDg5Mzg2LCA4OTM5MSwgODkzOTYsIDg5NDAxLCA4OTQwNiwgODk0MTEsIDg5NDE2LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Njk4NiwgODY5OTMsIDg3MDAwLCA4NzAwNywgODcwMTQsIDg3MDIxLCAKKyAgICA4NzAyOCwgODcwMzUsIDg3MDQyLCA4NzA0OSwgODcwNTYsIDg3MDYzLCA4NzA3MCwgODcwNzcsIDg3MDg0LCA4NzA5MSwgCisgICAgODcwOTgsIDg3MTA1LCA4NzExMiwgODcxMTksIDg3MTI3LCA4NzEzNSwgODcxNDIsIDg3MTQ5LCA4NzE1NCwgODcxNjIsIAorICAgIDg3MTcwLCA4NzE3NywgODcxODQsIDg3MTg5LCA4NzE5NiwgODcyMDEsIDg3MjA2LCA4NzIxMywgODcyMTgsIDg3MjIzLCAKKyAgICA4NzIyOCwgODcyMzYsIDg3MjQxLCA4NzI0NiwgODcyNTMsIDg3MjU4LCA4NzI2MywgODcyNzAsIDg3Mjc3LCA4NzI4MiwgCisgICAgODcyODcsIDg3MjkyLCA4NzI5NywgODczMDIsIDg3MzA3LCA4NzMxMiwgODczMTcsIDg3MzIyLCA4NzMyOSwgODczMzQsIAorICAgIDg3MzQxLCA4NzM0NiwgODczNTEsIDg3MzU2LCA4NzM2MSwgODczNjYsIDg3MzcxLCA4NzM3NiwgODczODEsIDg3Mzg2LCAKKyAgICA4NzM5MSwgODczOTYsIDg3NDAzLCA4NzQxMCwgODc0MTcsIDg3NDI0LCA4NzQzMCwgODc0MzUsIDg3NDQyLCA4NzQ0NywgCisgICAgODc0NTIsIDg3NDYxLCA4NzQ2OCwgODc0NzcsIDg3NDg0LCA4NzQ4OSwgODc0OTQsIDg3NTAyLCA4NzUwNywgODc1MTIsIAorICAgIDg3NTE3LCA4NzUyMiwgODc1MjcsIDg3NTM0LCA4NzUzOSwgODc1NDQsIDg3NTQ5LCA4NzU1NCwgODc1NTksIDg3NTY2LCAKKyAgICA4NzU3MywgODc1ODAsIDg3NTg3LCA4NzU5NCwgODc2MDEsIDg3NjA4LCA4NzYxNSwgODc2MjIsIDg3NjI5LCA4NzYzNiwgCisgICAgODc2NDMsIDg3NjUwLCA4NzY1NywgODc2NjQsIDg3NjcxLCA4NzY3OCwgODc2ODUsIDg3NjkyLCA4NzY5OSwgODc3MDYsIAorICAgIDg3NzEzLCA4NzcyMCwgODc3MjcsIDg3NzM0LCA4Nzc0MSwgODc3NDgsIDg3NzU1LCAwLCAwLCAwLCAwLCAwLCA4Nzc2MiwgCisgICAgODc3NzAsIDg3Nzc4LCAwLCAwLCAwLCAwLCA4Nzc4MywgODc3ODcsIDg3NzkxLCA4Nzc5NSwgODc3OTksIDg3ODAzLCAKKyAgICA4NzgwNywgODc4MTEsIDg3ODE1LCA4NzgxOSwgODc4MjQsIDg3ODI5LCA4NzgzNCwgODc4MzksIDg3ODQ0LCA4Nzg0OSwgCisgICAgODc4NTQsIDg3ODU5LCA4Nzg2NCwgODc4NzAsIDg3ODc2LCA4Nzg4MiwgODc4ODksIDg3ODk2LCA4NzkwMywgODc5MTAsIAorICAgIDg3OTE3LCA4NzkyNCwgODc5MzAsIDg3OTM2LCA4Nzk0MiwgODc5NDksIDg3OTU2LCA4Nzk2MywgODc5NzAsIDg3OTc3LCAKKyAgICA4Nzk4NCwgODc5OTEsIDg3OTk4LCA4ODAwNSwgODgwMTIsIDg4MDE5LCA4ODAyNiwgODgwMzMsIDg4MDQwLCAwLCAwLCAwLCAKKyAgICA4ODA0NywgODgwNTUsIDg4MDYzLCA4ODA3MSwgODgwNzksIDg4MDg3LCA4ODA5NywgODgxMDcsIDg4MTE1LCA4ODEyMywgCisgICAgODgxMzEsIDg4MTM5LCA4ODE0NywgODgxNTMsIDg4MTYwLCA4ODE2OSwgODgxNzgsIDg4MTg3LCA4ODE5NiwgODgyMDUsIAorICAgIDg4MjE0LCA4ODIyNCwgODgyMzUsIDg4MjQ1LCA4ODI1NiwgODgyNjUsIDg4Mjc0LCA4ODI4MywgODgyOTMsIDg4MzA0LCAKKyAgICA4ODMxNCwgODgzMjUsIDg4MzM2LCA4ODM0NSwgODgzNTMsIDg4MzU5LCA4ODM2NSwgODgzNzEsIDg4Mzc3LCA4ODM4NSwgCisgICAgODgzOTMsIDg4Mzk5LCA4ODQwNiwgODg0MTYsIDg4NDIzLCA4ODQzMCwgODg0MzcsIDg4NDQ0LCA4ODQ1MSwgODg0NjEsIAorICAgIDg4NDY4LCA4ODQ3NSwgODg0ODMsIDg4NDkxLCA4ODUwMCwgODg1MDksIDg4NTE4LCA4ODUyNywgODg1MzYsIDg4NTQ0LCAKKyAgICA4ODU1MywgODg1NjIsIDg4NTcxLCA4ODU3NSwgODg1ODIsIDg4NTg3LCA4ODU5MiwgODg1OTYsIDg4NjAwLCA4ODYwNCwgCisgICAgODg2MDgsIDg4NjEzLCA4ODYxOCwgODg2MjQsIDg4NjMwLCA4ODYzNCwgODg2NDAsIDg4NjQ0LCA4ODY0OCwgODg2NTIsIAorICAgIDg4NjU2LCA4ODY2MCwgODg2NjQsIDg4NjcwLCAwLCAwLCAwLCAwLCAwLCA4ODY3NCwgODg2NzksIDg4Njg0LCA4ODY4OSwgCisgICAgODg2OTQsIDg4NzAxLCA4ODcwNiwgODg3MTEsIDg4NzE2LCA4ODcyMSwgODg3MjYsIDg4NzMxLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTQyMSwgODk0MjUsIAotICAgIDg5NDMwLCA4OTQzNSwgODk0NDAsIDg5NDQ0LCA4OTQ0OSwgODk0NTQsIDg5NDU5LCA4OTQ2NCwgODk0NjgsIDg5NDcyLCAKLSAgICA4OTQ3NywgODk0ODIsIDg5NDg3LCA4OTQ5MiwgODk0OTYsIDg5NTAxLCA4OTUwNiwgODk1MTEsIDg5NTE2LCA4OTUyMSwgCi0gICAgODk1MjYsIDg5NTMwLCA4OTUzNSwgODk1NDAsIDg5NTQ1LCA4OTU1MCwgODk1NTUsIDg5NTYwLCA4OTU2NSwgMCwgODk1NzAsIAotICAgIDg5NTc1LCA4OTU4MCwgODk1ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NTkyLCA4OTU5NywgCi0gICAgODk2MDIsIDg5NjA3LCA4OTYxMiwgODk2MTcsIDg5NjIyLCA4OTYyNywgODk2MzIsIDg5NjM3LCA4OTY0MiwgODk2NDcsIAotICAgIDg5NjUyLCA4OTY1NywgODk2NjIsIDg5NjY3LCA4OTY3MiwgODk2NzcsIDg5NjgyLCA4OTY4NywgODk2OTIsIDg5Njk3LCAKLSAgICA4OTcwMiwgODk3MDcsIDg5NzEyLCA4OTcxNywgODk3MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzM2LCAKKyAgICA4ODc0MywgODg3NTIsIDg4NzYxLCA4ODc2OCwgODg3NzUsIDg4NzgyLCA4ODc4OSwgODg3OTYsIDg4ODAzLCA4ODgwOSwgCisgICAgODg4MTYsIDg4ODIzLCA4ODgzMCwgODg4MzcsIDg4ODQ0LCA4ODg1MSwgODg4NTgsIDg4ODY1LCA4ODg3NCwgODg4ODEsIAorICAgIDg4ODg4LCA4ODg5NSwgODg5MDIsIDg4OTA5LCA4ODkxNiwgODg5MjMsIDg4OTMwLCA4ODkzOSwgODg5NDYsIDg4OTUzLCAKKyAgICA4ODk2MCwgODg5NjcsIDg4OTc0LCA4ODk4MSwgODg5OTAsIDg4OTk3LCA4OTAwNCwgODkwMTEsIDg5MDE4LCA4OTAyNywgCisgICAgODkwMzQsIDg5MDQxLCA4OTA0OCwgODkwNTYsIDg5MDY1LCAwLCAwLCA4OTA3NCwgODkwNzgsIDg5MDgyLCA4OTA4NywgCisgICAgODkwOTIsIDg5MDk3LCA4OTEwMiwgODkxMDYsIDg5MTExLCA4OTExNiwgODkxMjEsIDg5MTI2LCA4OTEzMSwgODkxMzYsIAorICAgIDg5MTQwLCA4OTE0NCwgODkxNDksIDg5MTU0LCA4OTE1OSwgODkxNjMsIDg5MTY4LCA4OTE3MywgODkxNzcsIDg5MTgyLCAKKyAgICA4OTE4NywgODkxOTIsIDg5MTk3LCA4OTIwMiwgODkyMDcsIDAsIDAsIDAsIDg5MjEyLCA4OTIxNiwgODkyMjEsIDg5MjI2LCAKKyAgICA4OTIzMCwgODkyMzUsIDg5MjM5LCA4OTI0NCwgODkyNDksIDg5MjU0LCA4OTI1OSwgODkyNjMsIDg5MjY3LCA4OTI3MiwgCisgICAgODkyNzcsIDg5MjgyLCA4OTI4NywgODkyOTIsIDg5Mjk3LCA4OTMwMSwgODkzMDYsIDg5MzExLCA4OTMxNiwgODkzMjEsIAorICAgIDg5MzI2LCA4OTMzMSwgODkzMzUsIDg5MzM5LCA4OTM0NCwgODkzNDksIDg5MzU0LCA4OTM1OSwgODkzNjQsIDg5MzY5LCAKKyAgICA4OTM3NCwgODkzNzksIDg5Mzg0LCA4OTM4OSwgODkzOTQsIDg5Mzk5LCA4OTQwNCwgODk0MDksIDg5NDE0LCA4OTQxOSwgCisgICAgODk0MjQsIDg5NDI5LCA4OTQzNCwgODk0MzksIDg5NDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTcyOSwgODk3MzQsIDg5NzM5LCAKLSAgICA4OTc0NCwgODk3NDksIDg5NzU0LCA4OTc1OSwgODk3NjQsIDg5NzY5LCA4OTc3NCwgODk3NzksIDg5Nzg0LCA4OTc4OSwgCi0gICAgODk3OTQsIDg5Nzk5LCA4OTgwNCwgODk4MDksIDg5ODE0LCA4OTgxOSwgODk4MjQsIDg5ODI5LCA4OTgzNCwgODk4MzksIAotICAgIDg5ODQ0LCA4OTg0OSwgODk4NTQsIDg5ODU5LCA4OTg2MywgODk4NjcsIDg5ODcxLCAwLCA4OTg3NiwgODk4ODIsIDg5ODg3LCAKLSAgICA4OTg5MiwgODk4OTcsIDg5OTAyLCA4OTkwOCwgODk5MTQsIDg5OTIwLCA4OTkyNiwgODk5MzIsIDg5OTM4LCA4OTk0NCwgCi0gICAgODk5NTAsIDg5OTU2LCA4OTk2MiwgODk5NjgsIDg5OTc0LCA4OTk4MCwgODk5ODUsIDg5OTkxLCA4OTk5NywgOTAwMDIsIAotICAgIDkwMDA4LCA5MDAxMywgOTAwMTksIDkwMDI1LCA5MDAzMCwgOTAwMzYsIDkwMDQyLCA5MDA0NywgOTAwNTMsIDkwMDU5LCAKLSAgICA5MDA2NCwgOTAwNzAsIDkwMDc2LCA5MDA4MiwgMCwgMCwgMCwgMCwgOTAwODcsIDkwMDkzLCA5MDA5OSwgOTAxMDUsIAotICAgIDkwMTExLCA5MDExNywgOTAxMjMsIDkwMTI5LCA5MDEzNSwgOTAxNDIsIDkwMTQ3LCA5MDE1MiwgOTAxNTgsIDkwMTY0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTQ0OSwgODk0NTMsIDg5NDU4LCA4OTQ2MywgODk0NjgsIDg5NDcyLCAKKyAgICA4OTQ3NywgODk0ODIsIDg5NDg3LCA4OTQ5MiwgODk0OTYsIDg5NTAwLCA4OTUwNSwgODk1MTAsIDg5NTE1LCA4OTUyMCwgCisgICAgODk1MjQsIDg5NTI5LCA4OTUzNCwgODk1MzksIDg5NTQ0LCA4OTU0OSwgODk1NTQsIDg5NTU4LCA4OTU2MywgODk1NjgsIAorICAgIDg5NTczLCA4OTU3OCwgODk1ODMsIDg5NTg4LCA4OTU5MywgMCwgODk1OTgsIDg5NjAzLCA4OTYwOCwgODk2MTQsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NjIwLCA4OTYyNSwgODk2MzAsIDg5NjM1LCA4OTY0MCwgODk2NDUsIAorICAgIDg5NjUwLCA4OTY1NSwgODk2NjAsIDg5NjY1LCA4OTY3MCwgODk2NzUsIDg5NjgwLCA4OTY4NSwgODk2OTAsIDg5Njk1LCAKKyAgICA4OTcwMCwgODk3MDUsIDg5NzEwLCA4OTcxNSwgODk3MjAsIDg5NzI1LCA4OTczMCwgODk3MzUsIDg5NzQwLCA4OTc0NSwgCisgICAgODk3NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkwMTcwLCA5MDE3NSwgOTAxODAsIAotICAgIDkwMTg1LCA5MDE5MSwgOTAxOTYsIDkwMjAyLCA5MDIwOCwgOTAyMTQsIDkwMjIwLCA5MDIyNywgOTAyMzMsIDkwMjQwLCAKLSAgICA5MDI0NSwgOTAyNTAsIDkwMjU1LCA5MDI2MCwgOTAyNjUsIDkwMjcwLCA5MDI3NSwgOTAyODAsIDkwMjg1LCA5MDI5MCwgCi0gICAgOTAyOTUsIDkwMzAwLCA5MDMwNSwgOTAzMTAsIDkwMzE1LCA5MDMyMCwgOTAzMjUsIDkwMzMwLCA5MDMzNSwgOTAzNDAsIAotICAgIDkwMzQ1LCA5MDM1MCwgOTAzNTUsIDkwMzYwLCA5MDM2NSwgOTAzNzAsIDkwMzc1LCA5MDM4MCwgOTAzODUsIDkwMzkwLCAKLSAgICA5MDM5NSwgOTA0MDEsIDkwNDA2LCA5MDQxMiwgOTA0MTgsIDkwNDI0LCA5MDQzMCwgOTA0MzcsIDkwNDQzLCA5MDQ1MCwgCi0gICAgOTA0NTUsIDkwNDYwLCA5MDQ2NSwgOTA0NzAsIDkwNDc1LCA5MDQ4MCwgOTA0ODUsIDkwNDkwLCA5MDQ5NSwgOTA1MDAsIAotICAgIDkwNTA1LCA5MDUxMCwgOTA1MTUsIDkwNTIwLCA5MDUyNSwgOTA1MzAsIDkwNTM1LCA5MDU0MCwgOTA1NDUsIDkwNTUwLCAKLSAgICA5MDU1NSwgOTA1NjAsIDkwNTY1LCA5MDU3MCwgOTA1NzUsIDkwNTgwLCA5MDU4NSwgOTA1OTAsIDkwNTk1LCA5MDYwMCwgCi0gICAgOTA2MDUsIDkwNjEwLCA5MDYxNSwgOTA2MjAsIDkwNjI1LCA5MDYzMCwgOTA2MzUsIDkwNjQwLCA5MDY0NSwgOTA2NTAsIAotICAgIDkwNjU1LCA5MDY2MCwgOTA2NjUsIDkwNjcwLCA5MDY3NSwgOTA2ODAsIDkwNjg1LCA5MDY5MCwgOTA2OTUsIDkwNzAwLCAKLSAgICA5MDcwNSwgOTA3MTAsIDkwNzE1LCA5MDcyMCwgOTA3MjUsIDkwNzMwLCA5MDczNSwgOTA3NDAsIDkwNzQ1LCA5MDc1MCwgCi0gICAgOTA3NTUsIDkwNzYwLCA5MDc2NSwgOTA3NzAsIDkwNzc1LCA5MDc4MCwgOTA3ODUsIDkwNzkwLCA5MDc5NSwgOTA4MDAsIAotICAgIDkwODA1LCA5MDgxMCwgOTA4MTUsIDkwODIwLCA5MDgyNSwgOTA4MzAsIDkwODM1LCA5MDg0MCwgOTA4NDUsIDkwODUwLCAKLSAgICA5MDg1NSwgOTA4NjAsIDkwODY1LCA5MDg2OSwgOTA4NzMsIDkwODc4LCA5MDg4MywgOTA4ODgsIDkwODkzLCA5MDg5OCwgCi0gICAgOTA5MDMsIDkwOTA4LCA5MDkxMywgOTA5MTgsIDkwOTIzLCA5MDkyOCwgOTA5MzIsIDkwOTM2LCA5MDk0MCwgOTA5NDQsIAotICAgIDkwOTQ4LCA5MDk1MiwgOTA5NTYsIDkwOTYxLCA5MDk2NiwgMCwgMCwgOTA5NzEsIDkwOTc2LCA5MDk4MCwgOTA5ODQsIAotICAgIDkwOTg4LCA5MDk5MiwgOTA5OTYsIDkxMDAwLCA5MTAwNCwgOTEwMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NzU3LCA4OTc2MiwgODk3NjcsIDg5NzcyLCA4OTc3NywgODk3ODIsIDg5Nzg3LCAKKyAgICA4OTc5MiwgODk3OTcsIDg5ODAyLCA4OTgwNywgODk4MTIsIDg5ODE3LCA4OTgyMiwgODk4MjcsIDg5ODMyLCA4OTgzNywgCisgICAgODk4NDIsIDg5ODQ3LCA4OTg1MiwgODk4NTcsIDg5ODYyLCA4OTg2NywgODk4NzIsIDg5ODc3LCA4OTg4MiwgODk4ODcsIAorICAgIDg5ODkxLCA4OTg5NSwgODk4OTksIDAsIDg5OTA0LCA4OTkxMCwgODk5MTUsIDg5OTIwLCA4OTkyNSwgODk5MzAsIDg5OTM2LCAKKyAgICA4OTk0MiwgODk5NDgsIDg5OTU0LCA4OTk2MCwgODk5NjYsIDg5OTcyLCA4OTk3OCwgODk5ODQsIDg5OTkwLCA4OTk5NiwgCisgICAgOTAwMDIsIDkwMDA4LCA5MDAxMywgOTAwMTksIDkwMDI1LCA5MDAzMCwgOTAwMzYsIDkwMDQxLCA5MDA0NywgOTAwNTMsIAorICAgIDkwMDU4LCA5MDA2NCwgOTAwNzAsIDkwMDc1LCA5MDA4MSwgOTAwODcsIDkwMDkyLCA5MDA5OCwgOTAxMDQsIDkwMTEwLCAwLCAKKyAgICAwLCAwLCAwLCA5MDExNSwgOTAxMjEsIDkwMTI3LCA5MDEzMywgOTAxMzksIDkwMTQ1LCA5MDE1MSwgOTAxNTcsIDkwMTYzLCAKKyAgICA5MDE3MCwgOTAxNzUsIDkwMTgwLCA5MDE4NiwgOTAxOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDkwMTk4LCA5MDIwMywgOTAyMDgsIDkwMjEzLCA5MDIxOSwgOTAyMjQsIDkwMjMwLCA5MDIzNiwgCisgICAgOTAyNDIsIDkwMjQ4LCA5MDI1NSwgOTAyNjEsIDkwMjY4LCA5MDI3MywgOTAyNzgsIDkwMjgzLCA5MDI4OCwgOTAyOTMsIAorICAgIDkwMjk4LCA5MDMwMywgOTAzMDgsIDkwMzEzLCA5MDMxOCwgOTAzMjMsIDkwMzI4LCA5MDMzMywgOTAzMzgsIDkwMzQzLCAKKyAgICA5MDM0OCwgOTAzNTMsIDkwMzU4LCA5MDM2MywgOTAzNjgsIDkwMzczLCA5MDM3OCwgOTAzODMsIDkwMzg4LCA5MDM5MywgCisgICAgOTAzOTgsIDkwNDAzLCA5MDQwOCwgOTA0MTMsIDkwNDE4LCA5MDQyMywgOTA0MjksIDkwNDM0LCA5MDQ0MCwgOTA0NDYsIAorICAgIDkwNDUyLCA5MDQ1OCwgOTA0NjUsIDkwNDcxLCA5MDQ3OCwgOTA0ODMsIDkwNDg4LCA5MDQ5MywgOTA0OTgsIDkwNTAzLCAKKyAgICA5MDUwOCwgOTA1MTMsIDkwNTE4LCA5MDUyMywgOTA1MjgsIDkwNTMzLCA5MDUzOCwgOTA1NDMsIDkwNTQ4LCA5MDU1MywgCisgICAgOTA1NTgsIDkwNTYzLCA5MDU2OCwgOTA1NzMsIDkwNTc4LCA5MDU4MywgOTA1ODgsIDkwNTkzLCA5MDU5OCwgOTA2MDMsIAorICAgIDkwNjA4LCA5MDYxMywgOTA2MTgsIDkwNjIzLCA5MDYyOCwgOTA2MzMsIDkwNjM4LCA5MDY0MywgOTA2NDgsIDkwNjUzLCAKKyAgICA5MDY1OCwgOTA2NjMsIDkwNjY4LCA5MDY3MywgOTA2NzgsIDkwNjgzLCA5MDY4OCwgOTA2OTMsIDkwNjk4LCA5MDcwMywgCisgICAgOTA3MDgsIDkwNzEzLCA5MDcxOCwgOTA3MjMsIDkwNzI4LCA5MDczMywgOTA3MzgsIDkwNzQzLCA5MDc0OCwgOTA3NTMsIAorICAgIDkwNzU4LCA5MDc2MywgOTA3NjgsIDkwNzczLCA5MDc3OCwgOTA3ODMsIDkwNzg4LCA5MDc5MywgOTA3OTgsIDkwODAzLCAKKyAgICA5MDgwOCwgOTA4MTMsIDkwODE4LCA5MDgyMywgOTA4MjgsIDkwODMzLCA5MDgzOCwgOTA4NDMsIDkwODQ4LCA5MDg1MywgCisgICAgOTA4NTgsIDkwODYzLCA5MDg2OCwgOTA4NzMsIDkwODc4LCA5MDg4MywgOTA4ODgsIDkwODkzLCA5MDg5NywgOTA5MDEsIAorICAgIDkwOTA2LCA5MDkxMSwgOTA5MTYsIDkwOTIxLCA5MDkyNiwgOTA5MzEsIDkwOTM2LCA5MDk0MSwgOTA5NDYsIDkwOTUxLCAKKyAgICA5MDk1NiwgOTA5NjAsIDkwOTY0LCA5MDk2OCwgOTA5NzIsIDkwOTc2LCA5MDk4MCwgOTA5ODQsIDkwOTg5LCA5MDk5NCwgMCwgCisgICAgMCwgOTA5OTksIDkxMDA0LCA5MTAwOCwgOTEwMTIsIDkxMDE2LCA5MTAyMCwgOTEwMjQsIDkxMDI4LCA5MTAzMiwgOTEwMzYsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDkxMDEyLCA5MTAxNiwgOTEwMjAsIDkxMDI0LCA5MTAyOCwgOTEwMzIsIDAsIDAsIDkxMDM3LCAwLCAKLSAgICA5MTA0MiwgOTEwNDYsIDkxMDUxLCA5MTA1NiwgOTEwNjEsIDkxMDY2LCA5MTA3MSwgOTEwNzYsIDkxMDgxLCA5MTA4NiwgCi0gICAgOTEwOTEsIDkxMDk1LCA5MTEwMCwgOTExMDUsIDkxMTEwLCA5MTExNSwgOTExMTksIDkxMTI0LCA5MTEyOSwgOTExMzQsIAotICAgIDkxMTM5LCA5MTE0MywgOTExNDgsIDkxMTUzLCA5MTE1OCwgOTExNjMsIDkxMTY3LCA5MTE3MiwgOTExNzcsIDkxMTgyLCAKLSAgICA5MTE4NywgOTExOTEsIDkxMTk2LCA5MTIwMSwgOTEyMDYsIDkxMjExLCA5MTIxNiwgOTEyMjEsIDkxMjI2LCA5MTIzMCwgCi0gICAgOTEyMzUsIDkxMjQwLCA5MTI0NSwgOTEyNTAsIDAsIDkxMjU1LCA5MTI2MCwgMCwgMCwgMCwgOTEyNjUsIDAsIDAsIDkxMjcwLCAKLSAgICA5MTI3NSwgOTEyODIsIDkxMjg5LCA5MTI5NiwgOTEzMDMsIDkxMzEwLCA5MTMxNywgOTEzMjQsIDkxMzMxLCA5MTMzOCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTEwNDAsIDkxMDQ0LCA5MTA0OCwgOTEwNTIsIAorICAgIDkxMDU2LCA5MTA2MCwgMCwgMCwgOTEwNjUsIDAsIDkxMDcwLCA5MTA3NCwgOTEwNzksIDkxMDg0LCA5MTA4OSwgOTEwOTQsIAorICAgIDkxMDk5LCA5MTEwNCwgOTExMDksIDkxMTE0LCA5MTExOSwgOTExMjMsIDkxMTI4LCA5MTEzMywgOTExMzgsIDkxMTQzLCAKKyAgICA5MTE0NywgOTExNTIsIDkxMTU3LCA5MTE2MiwgOTExNjcsIDkxMTcxLCA5MTE3NiwgOTExODEsIDkxMTg2LCA5MTE5MSwgCisgICAgOTExOTUsIDkxMjAwLCA5MTIwNSwgOTEyMTAsIDkxMjE1LCA5MTIxOSwgOTEyMjQsIDkxMjI5LCA5MTIzNCwgOTEyMzksIAorICAgIDkxMjQ0LCA5MTI0OSwgOTEyNTQsIDkxMjU4LCA5MTI2MywgOTEyNjgsIDkxMjczLCA5MTI3OCwgMCwgOTEyODMsIDkxMjg4LCAKKyAgICAwLCAwLCAwLCA5MTI5MywgMCwgMCwgOTEyOTgsIDkxMzAzLCA5MTMxMCwgOTEzMTcsIDkxMzI0LCA5MTMzMSwgOTEzMzgsIAogICAgIDkxMzQ1LCA5MTM1MiwgOTEzNTksIDkxMzY2LCA5MTM3MywgOTEzODAsIDkxMzg3LCA5MTM5NCwgOTE0MDEsIDkxNDA4LCAKLSAgICA5MTQxNSwgOTE0MjIsIDAsIDkxNDI5LCA5MTQzNiwgOTE0NDIsIDkxNDQ4LCA5MTQ1NCwgOTE0NjEsIDkxNDY4LCA5MTQ3NiwgCi0gICAgOTE0ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNDkzLCA5MTQ5OCwgOTE1MDMsIDkxNTA4LCA5MTUxMywgOTE1MTgsIAotICAgIDkxNTIzLCA5MTUyOCwgOTE1MzMsIDkxNTM4LCA5MTU0MywgOTE1NDgsIDkxNTUzLCA5MTU1OCwgOTE1NjMsIDkxNTY4LCAKLSAgICA5MTU3MywgOTE1NzgsIDkxNTgzLCA5MTU4OCwgOTE1OTMsIDkxNTk4LCA5MTYwMywgOTE2MDcsIDkxNjEyLCA5MTYxNywgCi0gICAgOTE2MjMsIDkxNjI3LCAwLCAwLCAwLCA5MTYzMSwgOTE2MzcsIDkxNjQxLCA5MTY0NiwgOTE2NTEsIDkxNjU2LCA5MTY2MCwgCi0gICAgOTE2NjUsIDkxNjY5LCA5MTY3NCwgOTE2NzksIDkxNjgzLCA5MTY4NywgOTE2OTIsIDkxNjk2LCA5MTcwMCwgOTE3MDUsIAotICAgIDkxNzEwLCA5MTcxNCwgOTE3MTksIDkxNzI0LCA5MTcyOSwgOTE3MzQsIDkxNzM5LCA5MTc0NCwgOTE3NDksIDkxNzU0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5MTc1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE3NjQsIAotICAgIDkxNzcwLCA5MTc3NiwgOTE3ODIsIDkxNzg4LCA5MTc5NCwgOTE4MDEsIDkxODA4LCA5MTgxNSwgOTE4MjEsIDkxODI3LCAKLSAgICA5MTgzMywgOTE4NDAsIDkxODQ3LCA5MTg1NCwgOTE4NjAsIDkxODY3LCA5MTg3NCwgOTE4ODEsIDkxODg4LCA5MTg5NCwgCi0gICAgOTE5MDEsIDkxOTA4LCA5MTkxNCwgOTE5MjEsIDkxOTI4LCA5MTkzNSwgOTE5NDIsIDkxOTQ5LCA5MTk1NSwgOTE5NjIsIAotICAgIDkxOTY5LCA5MTk3NiwgOTE5ODIsIDkxOTg4LCA5MTk5NCwgOTIwMDAsIDkyMDA2LCA5MjAxMywgOTIwMjAsIDkyMDI2LCAKLSAgICA5MjAzMiwgOTIwMzgsIDkyMDQ1LCA5MjA1MSwgOTIwNTgsIDkyMDY1LCA5MjA3MiwgOTIwNzgsIDkyMDg2LCA5MjA5MywgCi0gICAgOTIwOTksIDkyMTA2LCA5MjExMywgOTIxMjAsIDkyMTI2LCAwLCAwLCAwLCAwLCAwLCAwLCA5MjEzMywgOTIxNDEsIDAsIDAsIAorICAgIDkxNDE1LCA5MTQyMiwgOTE0MjksIDkxNDM2LCA5MTQ0MywgOTE0NTAsIDAsIDkxNDU3LCA5MTQ2NCwgOTE0NzAsIDkxNDc2LCAKKyAgICA5MTQ4MiwgOTE0ODksIDkxNDk2LCA5MTUwNCwgOTE1MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNTIxLCA5MTUyNiwgCisgICAgOTE1MzEsIDkxNTM2LCA5MTU0MSwgOTE1NDYsIDkxNTUxLCA5MTU1NiwgOTE1NjEsIDkxNTY2LCA5MTU3MSwgOTE1NzYsIAorICAgIDkxNTgxLCA5MTU4NiwgOTE1OTEsIDkxNTk2LCA5MTYwMSwgOTE2MDYsIDkxNjExLCA5MTYxNiwgOTE2MjEsIDkxNjI2LCAKKyAgICA5MTYzMSwgOTE2MzUsIDkxNjQwLCA5MTY0NSwgOTE2NTEsIDkxNjU1LCAwLCAwLCAwLCA5MTY1OSwgOTE2NjUsIDkxNjY5LCAKKyAgICA5MTY3NCwgOTE2NzksIDkxNjg0LCA5MTY4OCwgOTE2OTMsIDkxNjk3LCA5MTcwMiwgOTE3MDcsIDkxNzExLCA5MTcxNSwgCisgICAgOTE3MjAsIDkxNzI0LCA5MTcyOCwgOTE3MzMsIDkxNzM4LCA5MTc0MiwgOTE3NDcsIDkxNzUyLCA5MTc1NywgOTE3NjIsIAorICAgIDkxNzY3LCA5MTc3MiwgOTE3NzcsIDkxNzgyLCAwLCAwLCAwLCAwLCAwLCA5MTc4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTIxNDksIDkyMTUzLCA5MjE1OCwgOTIxNjMsIDAsIAotICAgIDkyMTY5LCA5MjE3NCwgMCwgMCwgMCwgMCwgMCwgOTIxNzksIDkyMTg1LCA5MjE5MiwgOTIxOTcsIDkyMjAyLCA5MjIwNiwgCi0gICAgOTIyMTEsIDkyMjE2LCAwLCA5MjIyMSwgOTIyMjYsIDkyMjMxLCAwLCA5MjIzNiwgOTIyNDEsIDkyMjQ2LCA5MjI1MSwgCi0gICAgOTIyNTYsIDkyMjYxLCA5MjI2NiwgOTIyNzEsIDkyMjc2LCA5MjI4MSwgOTIyODYsIDkyMjkwLCA5MjI5NCwgOTIyOTksIAotICAgIDkyMzA0LCA5MjMwOSwgOTIzMTMsIDkyMzE3LCA5MjMyMSwgOTIzMjYsIDkyMzMxLCA5MjMzNiwgOTIzNDEsIDkyMzQ1LCAKLSAgICA5MjM1MCwgOTIzNTQsIDkyMzU5LCAwLCAwLCAwLCAwLCA5MjM2NCwgOTIzNzAsIDkyMzc1LCAwLCAwLCAwLCAwLCA5MjM4MCwgCi0gICAgOTIzODQsIDkyMzg4LCA5MjM5MiwgOTIzOTYsIDkyNDAwLCA5MjQwNSwgOTI0MTAsIDkyNDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5MjQyMiwgOTI0MjgsIDkyNDM1LCA5MjQ0MSwgOTI0NDgsIDkyNDU0LCA5MjQ2MCwgOTI0NjYsIDkyNDczLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA5MjQ3OSwgOTI0ODcsIDkyNDk1LCA5MjUwMywgOTI1MTEsIDkyNTE5LCA5MjUyNywgOTI1MzUsIAotICAgIDkyNTQzLCA5MjU1MSwgOTI1NTksIDkyNTY3LCA5MjU3NSwgOTI1ODMsIDkyNTkxLCA5MjU5OSwgOTI2MDcsIDkyNjE1LCAKLSAgICA5MjYyMywgOTI2MzEsIDkyNjM5LCA5MjY0NywgOTI2NTUsIDkyNjYzLCA5MjY3MSwgOTI2NzksIDkyNjg3LCA5MjY5NSwgCi0gICAgOTI3MDMsIDkyNzExLCA5MjcxOCwgOTI3MjYsIDkyNzM0LCA5MjczOCwgOTI3NDMsIDkyNzQ4LCA5Mjc1MywgOTI3NTgsIAotICAgIDkyNzYzLCA5Mjc2OCwgOTI3NzMsIDkyNzc3LCA5Mjc4MiwgOTI3ODYsIDkyNzkxLCA5Mjc5NSwgOTI4MDAsIDkyODA0LCAKLSAgICA5MjgwOSwgOTI4MTQsIDkyODE5LCA5MjgyNCwgOTI4MjksIDkyODM0LCA5MjgzOSwgOTI4NDQsIDkyODQ5LCA5Mjg1NCwgCi0gICAgOTI4NTksIDkyODY0LCA5Mjg2OSwgOTI4NzQsIDkyODc5LCA5Mjg4NCwgOTI4ODksIDkyODk0LCA5Mjg5OSwgOTI5MDQsIAotICAgIDkyOTA5LCA5MjkxNCwgOTI5MTksIDkyOTI0LCA5MjkyOSwgOTI5MzQsIDkyOTM5LCA5Mjk0NCwgOTI5NDksIDkyOTU0LCAKLSAgICA5Mjk1OSwgOTI5NjQsIDkyOTY5LCA5Mjk3NCwgOTI5NzksIDkyOTg0LCA5Mjk4OSwgOTI5OTQsIDAsIDAsIDAsIDkyOTk5LCAKLSAgICA5MzAwNCwgOTMwMTMsIDkzMDIxLCA5MzAzMCwgOTMwMzksIDkzMDUwLCA5MzA2MSwgOTMwNjgsIDkzMDc1LCA5MzA4MiwgCi0gICAgOTMwODksIDkzMDk2LCA5MzEwMywgOTMxMTAsIDkzMTE3LCA5MzEyNCwgOTMxMzEsIDkzMTM4LCA5MzE0NSwgOTMxNTIsIAotICAgIDkzMTU5LCA5MzE2NiwgOTMxNzMsIDkzMTgwLCA5MzE4NywgOTMxOTQsIDkzMjAxLCA5MzIwOCwgMCwgMCwgOTMyMTUsIAotICAgIDkzMjIxLCA5MzIyNywgOTMyMzMsIDkzMjM5LCA5MzI0NiwgOTMyNTMsIDkzMjYxLCA5MzI2OSwgOTMyNzYsIDkzMjgzLCAKLSAgICA5MzI5MCwgOTMyOTcsIDkzMzA0LCA5MzMxMSwgOTMzMTgsIDkzMzI1LCA5MzMzMiwgOTMzMzksIDkzMzQ2LCA5MzM1MywgCi0gICAgOTMzNjAsIDkzMzY3LCA5MzM3NCwgOTMzODEsIDkzMzg4LCA5MzM5NSwgMCwgMCwgMCwgMCwgMCwgOTM0MDIsIDkzNDA4LCAKLSAgICA5MzQxNCwgOTM0MjAsIDkzNDI2LCA5MzQzMywgOTM0NDAsIDkzNDQ4LCA5MzQ1NiwgOTM0NjIsIDkzNDY4LCA5MzQ3NSwgCi0gICAgOTM0ODEsIDkzNDg3LCA5MzQ5MywgOTM0OTksIDkzNTA2LCA5MzUxMywgOTM1MjAsIDkzNTI3LCA5MzUzNCwgOTM1NDEsIAotICAgIDkzNTQ4LCA5MzU1NSwgOTM1NjIsIDkzNTY5LCA5MzU3NiwgOTM1ODMsIDkzNTkwLCA5MzU5NywgOTM2MDQsIDkzNjExLCAKLSAgICA5MzYxOCwgOTM2MjUsIDkzNjMyLCA5MzYzOSwgOTM2NDYsIDkzNjUzLCA5MzY2MCwgOTM2NjcsIDkzNjc0LCA5MzY4MSwgCi0gICAgOTM2ODgsIDkzNjk1LCA5MzcwMiwgOTM3MDksIDkzNzE2LCA5MzcyMywgOTM3MzAsIDkzNzM3LCA5Mzc0NCwgOTM3NTEsIAotICAgIDkzNzU4LCA5Mzc2NSwgOTM3NzIsIDkzNzc5LCA5Mzc4NiwgOTM3OTMsIDkzODAwLCA5MzgwNywgOTM4MTQsIDkzODIxLCAKLSAgICA5MzgyOCwgOTM4MzUsIDkzODQyLCA5Mzg0OSwgOTM4NTYsIDkzODYzLCA5Mzg3MCwgOTM4NzcsIDkzODg0LCA5Mzg5MSwgCi0gICAgOTM4OTgsIDkzOTA1LCA5MzkxMiwgOTM5MTksIDkzOTI2LCA5MzkzMywgOTM5NDAsIDkzOTQ3LCA5Mzk1NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOTM5NjEsIDkzOTY1LCA5Mzk2OSwgOTM5NzMsIDkzOTc3LCA5Mzk4MSwgOTM5ODUsIDkzOTg5LCAKLSAgICA5Mzk5MywgOTM5OTcsIDk0MDAyLCA5NDAwNywgOTQwMTIsIDk0MDE3LCA5NDAyMiwgOTQwMjcsIDk0MDMyLCA5NDAzNywgCi0gICAgOTQwNDIsIDk0MDQ4LCA5NDA1NCwgOTQwNjAsIDk0MDY3LCA5NDA3NCwgOTQwODEsIDk0MDg4LCA5NDA5NSwgOTQxMDIsIAotICAgIDk0MTA5LCA5NDExNiwgOTQxMjMsIDAsIDk0MTMwLCA5NDEzNCwgOTQxMzgsIDk0MTQyLCA5NDE0NiwgOTQxNTAsIDk0MTUzLCAKLSAgICA5NDE1NywgOTQxNjAsIDk0MTY0LCA5NDE2NywgOTQxNzEsIDk0MTc1LCA5NDE4MCwgOTQxODQsIDk0MTg5LCA5NDE5MiwgCi0gICAgOTQxOTYsIDk0MTk5LCA5NDIwMywgOTQyMDYsIDk0MjEwLCA5NDIxNCwgOTQyMTgsIDk0MjIyLCA5NDIyNiwgOTQyMzAsIAotICAgIDk0MjM0LCA5NDIzOCwgOTQyNDIsIDk0MjQ2LCA5NDI1MCwgOTQyNTQsIDk0MjU4LCA5NDI2MiwgOTQyNjYsIDk0MjcwLCAKLSAgICA5NDI3NCwgOTQyNzgsIDk0MjgxLCA5NDI4NCwgOTQyODgsIDk0MjkyLCA5NDI5NiwgOTQyOTksIDk0MzAyLCA5NDMwNSwgCi0gICAgOTQzMDksIDk0MzEzLCA5NDMxNywgOTQzMjEsIDk0MzI0LCA5NDMyNywgOTQzMzEsIDk0MzM3LCA5NDM0MywgOTQzNDksIAotICAgIDk0MzU0LCA5NDM2MSwgOTQzNjUsIDk0MzcwLCA5NDM3NCwgOTQzNzksIDk0Mzg0LCA5NDM5MCwgOTQzOTUsIDk0NDAxLCAKLSAgICA5NDQwNSwgOTQ0MTAsIDk0NDE0LCA5NDQxOSwgOTQ0MjIsIDk0NDI1LCA5NDQyOSwgOTQ0MzQsIDk0NDQwLCA5NDQ0NSwgCi0gICAgOTQ0NTEsIDAsIDAsIDAsIDAsIDk0NDU2LCA5NDQ1OSwgOTQ0NjIsIDk0NDY1LCA5NDQ2OCwgOTQ0NzEsIDk0NDc0LCAKLSAgICA5NDQ3NywgOTQ0ODAsIDk0NDgzLCA5NDQ4NywgOTQ0OTEsIDk0NDk1LCA5NDQ5OSwgOTQ1MDMsIDk0NTA3LCA5NDUxMSwgCi0gICAgOTQ1MTUsIDk0NTE5LCA5NDUyNCwgOTQ1MjksIDk0NTMzLCA5NDUzNiwgOTQ1MzksIDk0NTQyLCA5NDU0NSwgOTQ1NDgsIAotICAgIDk0NTUxLCA5NDU1NCwgOTQ1NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk0NTYwLCA5NDU2NSwgOTQ1NzAsIDk0NTc1LCA5NDU3OSwgOTQ1ODQsIDk0NTg4LCA5NDU5MywgOTQ1OTcsIDk0NjAyLCAKLSAgICA5NDYwNiwgOTQ2MTEsIDk0NjE1LCA5NDYyMCwgOTQ2MjQsIDk0NjI5LCA5NDYzNCwgOTQ2MzksIDk0NjQ0LCA5NDY0OSwgCi0gICAgOTQ2NTQsIDk0NjU5LCA5NDY2NCwgOTQ2NjksIDk0Njc0LCA5NDY3OSwgOTQ2ODQsIDk0Njg5LCA5NDY5NCwgOTQ2OTksIAotICAgIDk0NzA0LCA5NDcwOSwgOTQ3MTQsIDk0NzE5LCA5NDcyNCwgOTQ3MjgsIDk0NzMyLCA5NDczNywgOTQ3NDIsIDk0NzQ3LCAKLSAgICA5NDc1MSwgOTQ3NTUsIDk0NzU5LCA5NDc2NCwgOTQ3NjksIDk0Nzc0LCA5NDc3OSwgOTQ3ODMsIDk0Nzg3LCA5NDc5MywgCi0gICAgOTQ3OTgsIDk0ODA0LCA5NDgwOSwgOTQ4MTUsIDk0ODIwLCA5NDgyNiwgOTQ4MzEsIDk0ODM3LCA5NDg0MiwgOTQ4NDcsIAotICAgIDk0ODUyLCA5NDg1NywgOTQ4NjEsIDk0ODY2LCA5NDg3MiwgOTQ4NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDk0ODgxLCA5NDg4OCwgOTQ4OTUsIDk0OTAyLCA5NDkwOSwgOTQ5MTYsIDk0OTIzLCA5NDkzMCwgCi0gICAgOTQ5MzcsIDk0OTQ0LCA5NDk1MSwgOTQ5NTgsIDk0OTY1LCA5NDk3MiwgOTQ5NzksIDk0OTg2LCA5NDk5MywgOTUwMDAsIAotICAgIDk1MDA3LCA5NTAxNCwgOTUwMjEsIDk1MDI4LCA5NTAzNSwgOTUwNDIsIDk1MDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NTA1NiwgOTUwNjMsIDk1MDY5LCA5NTA3NSwgOTUwODEsIDk1MDg3LCA5NTA5MywgOTUwOTksIDk1MTA1LCA5NTExMSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOTUxMTcsIDk1MTIyLCA5NTEyNywgOTUxMzIsIDk1MTM3LCA5NTE0MSwgOTUxNDUsIDk1MTQ5LCAKLSAgICA5NTE1NCwgOTUxNTksIDk1MTY0LCA5NTE2OSwgOTUxNzQsIDk1MTc5LCA5NTE4NCwgOTUxODksIDk1MTk0LCA5NTE5OSwgCi0gICAgOTUyMDQsIDk1MjA5LCA5NTIxNCwgOTUyMTksIDk1MjI0LCA5NTIyOSwgOTUyMzQsIDk1MjM5LCA5NTI0NCwgOTUyNDksIAotICAgIDk1MjU0LCA5NTI1OSwgOTUyNjQsIDk1MjY5LCA5NTI3NCwgOTUyNzksIDk1Mjg0LCA5NTI4OSwgOTUyOTQsIDk1Mjk5LCAKLSAgICA5NTMwNCwgOTUzMDksIDk1MzE0LCA5NTMxOSwgOTUzMjUsIDk1MzMwLCA5NTMzNiwgOTUzNDEsIDk1MzQ3LCA5NTM1MiwgCi0gICAgOTUzNTgsIDk1MzY0LCA5NTM2OCwgOTUzNzMsIDk1Mzc3LCAwLCA5NTM4MSwgOTUzODYsIDk1MzkwLCA5NTM5NCwgOTUzOTgsIAotICAgIDk1NDAyLCA5NTQwNiwgOTU0MTAsIDk1NDE0LCA5NTQxOCwgOTU0MjIsIDk1NDI3LCA5NTQzMSwgOTU0MzYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1NDQxLCA5NTQ0NSwgOTU0NDksIDk1NDUzLCA5NTQ1NiwgOTU0NjAsIAotICAgIDk1NDYzLCA5NTQ2NywgOTU0NzAsIDk1NDc0LCA5NTQ3OCwgOTU0ODMsIDk1NDg3LCA5NTQ5MiwgOTU0OTUsIDk1NDk5LCAKLSAgICA5NTUwMiwgOTU1MDYsIDk1NTA5LCA5NTUxMywgOTU1MTcsIDk1NTIxLCA5NTUyNSwgOTU1MjksIDk1NTMzLCA5NTUzNywgCi0gICAgOTU1NDEsIDk1NTQ1LCA5NTU0OSwgOTU1NTMsIDk1NTU3LCA5NTU2MSwgOTU1NjUsIDk1NTY5LCA5NTU3MywgOTU1NzcsIAotICAgIDk1NTgxLCA5NTU4NCwgOTU1ODcsIDk1NTkxLCA5NTU5NSwgOTU1OTksIDk1NjAyLCA5NTYwNSwgOTU2MDgsIDk1NjEyLCAKLSAgICA5NTYxNiwgOTU2MjAsIDk1NjI0LCA5NTYyOCwgOTU2MzEsIDk1NjM0LCA5NTYzOSwgOTU2NDMsIDk1NjQ4LCA5NTY1MiwgCi0gICAgOTU2NTcsIDk1NjYyLCA5NTY2OCwgOTU2NzMsIDk1Njc5LCA5NTY4MywgOTU2ODgsIDk1NjkyLCA5NTY5NywgOTU3MDEsIAotICAgIDk1NzA1LCA5NTcwOSwgOTU3MTMsIDk1NzE2LCA5NTcxOSwgOTU3MjMsIDk1NzI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NTczMCwgOTU3MzQsIDk1NzM3LCA5NTc0MCwgOTU3NDMsIDk1NzQ2LCA5NTc0OSwgOTU3NTIsIDk1NzU1LCA5NTc1OCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU3NjEsIDk1NzY1LCA5NTc3MCwgOTU3NzQsIDk1Nzc5LCAKLSAgICA5NTc4MywgOTU3ODgsIDk1NzkyLCA5NTc5NywgOTU4MDEsIDk1ODA2LCA5NTgxMCwgOTU4MTUsIDk1ODIwLCA5NTgyNSwgCi0gICAgOTU4MzAsIDk1ODM1LCA5NTg0MCwgOTU4NDUsIDk1ODUwLCA5NTg1NSwgOTU4NjAsIDk1ODY1LCA5NTg3MCwgOTU4NzUsIAotICAgIDk1ODgwLCA5NTg4NSwgOTU4OTAsIDk1ODk1LCA5NTkwMCwgOTU5MDQsIDk1OTA4LCA5NTkxMywgOTU5MTgsIDk1OTIzLCAKLSAgICA5NTkyNywgOTU5MzEsIDk1OTM1LCA5NTk0MCwgOTU5NDUsIDk1OTUwLCA5NTk1NCwgOTU5NTgsIDk1OTYzLCA5NTk2OCwgCi0gICAgOTU5NzMsIDk1OTc5LCA5NTk4NCwgOTU5OTAsIDk1OTk1LCA5NjAwMSwgOTYwMDYsIDk2MDEyLCA5NjAxNywgOTYwMjMsIAotICAgIDk2MDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NjAzMywgOTYwMzgsIDk2MDQyLCA5NjA0NiwgOTYwNTAsIDk2MDU0LCAKLSAgICA5NjA1OCwgOTYwNjIsIDk2MDY2LCA5NjA3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTYwNzQsIDk2MDc3LCA5NjA4MiwgOTYwODgsIAotICAgIDk2MDk2LCA5NjEwMSwgOTYxMDcsIDk2MTE1LCA5NjEyMSwgOTYxMjcsIDk2MTMxLCA5NjEzNSwgOTYxNDIsIDk2MTUxLCAKLSAgICA5NjE1OCwgOTYxNjcsIDk2MTczLCA5NjE4MiwgOTYxODksIDk2MTk2LCA5NjIwMywgOTYyMTMsIDk2MjE5LCA5NjIyMywgCi0gICAgOTYyMzAsIDk2MjM5LCA5NjI0OSwgOTYyNTYsIDk2MjYzLCA5NjI2NywgOTYyNzEsIDk2Mjc4LCA5NjI4OCwgOTYyOTIsIAotICAgIDk2Mjk5LCA5NjMwNiwgOTYzMTMsIDk2MzE5LCA5NjMyNiwgOTYzMzMsIDk2MzQwLCA5NjM0NywgOTYzNTEsIDk2MzU1LCAKLSAgICA5NjM1OSwgOTYzNjYsIDk2MzcwLCA5NjM3NywgOTYzODQsIDk2Mzk4LCA5NjQwNywgOTY0MTEsIDk2NDE1LCA5NjQxOSwgCi0gICAgOTY0MjYsIDk2NDMwLCA5NjQzNCwgOTY0MzgsIDk2NDQ2LCA5NjQ1NCwgOTY0NzMsIDk2NDgzLCA5NjUwMywgOTY1MDcsIAotICAgIDk2NTExLCA5NjUxNSwgOTY1MTksIDk2NTIzLCA5NjUyNywgOTY1MzEsIDk2NTM4LCA5NjU0MiwgOTY1NDUsIDk2NTQ5LCAKLSAgICA5NjU1MywgOTY1NTksIDk2NTY2LCA5NjU3NSwgOTY1NzksIDk2NTg4LCA5NjU5NywgOTY2MDUsIDk2NjA5LCA5NjYxNiwgCi0gICAgOTY2MjAsIDk2NjI0LCA5NjYyOCwgOTY2MzIsIDk2NjQzLCA5NjY1MiwgOTY2NjEsIDk2NjcwLCA5NjY3OSwgOTY2OTEsIAotICAgIDk2NzAwLCA5NjcwOSwgOTY3MTgsIDk2NzI2LCA5NjczNSwgOTY3NDcsIDk2NzU2LCA5Njc2NSwgOTY3NzQsIDk2Nzg2LCAKLSAgICA5Njc5NSwgOTY4MDQsIDk2ODE2LCA5NjgyNSwgOTY4MzQsIDk2ODQ2LCA5Njg1NSwgOTY4NTksIDk2ODYzLCA5Njg2NywgCi0gICAgOTY4NzEsIDk2ODc1LCA5Njg3OSwgOTY4ODMsIDk2ODkwLCA5Njg5NCwgOTY4OTgsIDk2OTA5LCA5NjkxMywgOTY5MTcsIAotICAgIDk2OTI0LCA5NjkzMCwgOTY5MzYsIDk2OTQwLCA5Njk0NywgOTY5NTEsIDk2OTU1LCA5Njk1OSwgOTY5NjMsIDk2OTY3LCAKLSAgICA5Njk3MSwgOTY5NzcsIDk2OTg1LCA5Njk4OSwgOTY5OTMsIDk2OTk2LCA5NzAwMiwgOTcwMTIsIDk3MDE2LCA5NzAyOCwgCi0gICAgOTcwMzUsIDk3MDQyLCA5NzA0OSwgOTcwNTYsIDk3MDYyLCA5NzA2NiwgOTcwNzAsIDk3MDc0LCA5NzA3OCwgOTcwODUsIAotICAgIDk3MDk0LCA5NzEwMSwgOTcxMDksIDk3MTE3LCA5NzEyMywgOTcxMjcsIDk3MTMxLCA5NzEzNSwgOTcxMzksIDk3MTQ1LCAKLSAgICA5NzE1NCwgOTcxNjYsIDk3MTczLCA5NzE4MCwgOTcxODksIDk3MjAwLCA5NzIwNiwgOTcyMTUsIDk3MjI0LCA5NzIzMSwgCi0gICAgOTcyNDAsIDk3MjQ3LCA5NzI1NCwgOTcyNjQsIDk3MjcxLCA5NzI3OCwgOTcyODUsIDk3MjkyLCA5NzI5NiwgOTczMDIsIAotICAgIDk3MzA2LCA5NzMxNywgOTczMjUsIDk3MzM0LCA5NzM0NiwgOTczNTMsIDk3MzYwLCA5NzM3MCwgOTczNzcsIDk3Mzg2LCAKLSAgICA5NzM5MywgOTc0MDIsIDk3NDA5LCA5NzQxNiwgOTc0MjYsIDk3NDMzLCA5NzQ0MCwgOTc0NTAsIDk3NDU3LCA5NzQ2OSwgCi0gICAgOTc0NzgsIDk3NDg1LCA5NzQ5MiwgOTc0OTksIDk3NTA4LCA5NzUxOCwgOTc1MzEsIDk3NTM4LCA5NzU0OCwgOTc1NTgsIAotICAgIDk3NTY1LCA5NzU3NCwgOTc1ODcsIDk3NTk0LCA5NzYwMSwgOTc2MDgsIDk3NjE4LCA5NzYyOCwgOTc2MzUsIDk3NjQ1LCAKLSAgICA5NzY1MiwgOTc2NTksIDk3NjY5LCA5NzY3NSwgOTc2ODIsIDk3Njg5LCA5NzY5NiwgOTc3MDYsIDk3NzEzLCA5NzcyMCwgCi0gICAgOTc3MjcsIDk3NzMzLCA5Nzc0MCwgOTc3NTAsIDk3NzU3LCA5Nzc2MSwgOTc3NjksIDk3NzczLCA5Nzc4NSwgOTc3ODksIAotICAgIDk3ODAzLCA5NzgwNywgOTc4MTEsIDk3ODE1LCA5NzgxOSwgOTc4MjUsIDk3ODMyLCA5Nzg0MCwgOTc4NDQsIDk3ODQ4LCAKLSAgICA5Nzg1MiwgOTc4NTYsIDk3ODYzLCA5Nzg2NywgOTc4NzMsIDk3ODc5LCA5Nzg4NywgOTc4OTEsIDk3ODk4LCA5NzkwNiwgCi0gICAgOTc5MTAsIDk3OTE0LCA5NzkyMCwgOTc5MjQsIDk3OTMzLCA5Nzk0MiwgOTc5NDksIDk3OTU5LCA5Nzk2NSwgOTc5NjksIAotICAgIDk3OTczLCA5Nzk4MSwgOTc5ODgsIDk3OTk1LCA5ODAwMSwgOTgwMDUsIDk4MDEzLCA5ODAxNywgOTgwMjQsIDk4MDM2LCAKLSAgICA5ODA0MywgOTgwNTMsIDk4MDU5LCA5ODA2MywgOTgwNzIsIDk4MDc5LCA5ODA4OCwgOTgwOTIsIDk4MDk2LCA5ODEwMywgCi0gICAgOTgxMDcsIDk4MTExLCA5ODExNSwgOTgxMTksIDk4MTIyLCA5ODEyOCwgOTgxMzQsIDk4MTM4LCA5ODE0MiwgOTgxNDksIAotICAgIDk4MTU2LCA5ODE2MywgOTgxNzAsIDk4MTc3LCA5ODE4NCwgOTgxOTEsIDk4MTk4LCA5ODIwNCwgOTgyMDgsIDk4MjEyLCAKLSAgICA5ODIxOSwgOTgyMjYsIDk4MjMzLCA5ODI0MCwgOTgyNDcsIDk4MjUxLCA5ODI1NCwgOTgyNTksIDk4MjYzLCA5ODI2NywgCi0gICAgOTgyNzYsIDk4Mjg1LCA5ODI4OSwgOTgyOTMsIDk4Mjk5LCA5ODMwNSwgOTgzMjIsIDk4MzI4LCA5ODMzMiwgOTgzNDEsIAotICAgIDk4MzQ1LCA5ODM0OSwgOTgzNTYsIDk4MzY0LCA5ODM3MiwgOTgzNzgsIDk4MzgyLCA5ODM4NiwgOTgzOTAsIDk4Mzk0LCAKLSAgICA5ODM5NywgOTg0MDMsIDk4NDEwLCA5ODQyMCwgOTg0MjcsIDk4NDM0LCA5ODQ0MSwgOTg0NDcsIDk4NDU0LCA5ODQ2MSwgCi0gICAgOTg0NjgsIDk4NDc1LCA5ODQ4MiwgOTg0OTEsIDk4NDk4LCA5ODUxMCwgOTg1MTcsIDk4NTI0LCA5ODUzNCwgOTg1NDUsIAotICAgIDk4NTUyLCA5ODU1OSwgOTg1NjYsIDk4NTczLCA5ODU4MCwgOTg1ODcsIDk4NTk0LCA5ODYwMSwgOTg2MDgsIDk4NjE1LCAKLSAgICA5ODYyNSwgOTg2MzUsIDk4NjQ1LCA5ODY1MiwgOTg2NjIsIDk4NjY5LCA5ODY3NiwgOTg2ODMsIDk4NjkwLCA5ODY5NiwgCi0gICAgOTg3MDMsIDk4NzEwLCA5ODcxNywgOTg3MjQsIDk4NzMxLCA5ODczOCwgOTg3NDUsIDk4NzUyLCA5ODc1OCwgOTg3NjUsIAotICAgIDk4NzcyLCA5ODc4MSwgOTg3ODgsIDk4Nzk1LCA5ODc5OSwgOTg4MDcsIDk4ODExLCA5ODgxNSwgOTg4MTksIDk4ODIzLCAKLSAgICA5ODgyNywgOTg4MzQsIDk4ODM4LCA5ODg0NywgOTg4NTEsIDk4ODU4LCA5ODg2NiwgOTg4NzAsIDk4ODc0LCA5ODg3OCwgCi0gICAgOTg4OTEsIDk4OTA3LCA5ODkxMSwgOTg5MTUsIDk4OTIyLCA5ODkyOCwgOTg5MzUsIDk4OTM5LCA5ODk0MywgOTg5NDcsIAotICAgIDk4OTUxLCA5ODk1NSwgOTg5NjIsIDk4OTY2LCA5ODk4NCwgOTg5ODgsIDk4OTkyLCA5ODk5OSwgOTkwMDMsIDk5MDA3LCAKLSAgICA5OTAxMywgOTkwMTcsIDk5MDIxLCA5OTAyOSwgOTkwMzMsIDk5MDM3LCA5OTA0MSwgOTkwNDUsIDk5MDUxLCA5OTA2MiwgCi0gICAgOTkwNzEsIDk5MDgwLCA5OTA4NywgOTkwOTQsIDk5MTA1LCA5OTExMiwgOTkxMTksIDk5MTI2LCA5OTEzMywgOTkxNDAsIAotICAgIDk5MTQ3LCA5OTE1NCwgOTkxNjQsIDk5MTcwLCA5OTE3NywgOTkxODcsIDk5MTk2LCA5OTIwMywgOTkyMTIsIDk5MjIyLCAKLSAgICA5OTIyOSwgOTkyMzYsIDk5MjQzLCA5OTI1MCwgOTkyNjIsIDk5MjY5LCA5OTI3NiwgOTkyODMsIDk5MjkwLCA5OTI5NywgCi0gICAgOTkzMDcsIDk5MzE0LCA5OTMyMSwgOTkzMzEsIDk5MzQ0LCA5OTM1NiwgOTkzNjMsIDk5MzczLCA5OTM4MCwgOTkzODcsIAotICAgIDk5Mzk0LCA5OTQwOCwgOTk0MTQsIDk5NDIyLCA5OTQzMiwgOTk0NDIsIDk5NDQ5LCA5OTQ1NiwgOTk0NjIsIDk5NDY2LCAKLSAgICA5OTQ3MywgOTk0ODMsIDk5NDg5LCA5OTUwMiwgOTk1MDYsIDk5NTEwLCA5OTUxNywgOTk1MjEsIDk5NTI4LCA5OTUzOCwgCi0gICAgOTk1NDIsIDk5NTQ2LCA5OTU1MCwgOTk1NTQsIDk5NTU4LCA5OTU2NSwgOTk1NjksIDk5NTc2LCA5OTU4MywgOTk1OTAsIAotICAgIDk5NTk5LCA5OTYwOCwgOTk2MTgsIDk5NjI1LCA5OTYzMiwgOTk2MzksIDk5NjQ5LCA5OTY1NiwgOTk2NjYsIDk5NjczLCAKLSAgICA5OTY4MywgOTk2OTAsIDk5Njk3LCA5OTcwNywgOTk3MTcsIDk5NzI0LCA5OTczMCwgOTk3MzgsIDk5NzQ2LCA5OTc1MiwgCi0gICAgOTk3NTgsIDk5NzYyLCA5OTc2NiwgOTk3NzMsIDk5NzgxLCA5OTc4NywgOTk3OTEsIDk5Nzk1LCA5OTc5OSwgOTk4MDYsIAotICAgIDk5ODE4LCA5OTgyMSwgOTk4MjgsIDk5ODM0LCA5OTgzOCwgOTk4NDIsIDk5ODQ2LCA5OTg1MCwgOTk4NTQsIDk5ODU4LCAKLSAgICA5OTg2MiwgOTk4NjYsIDk5ODcwLCA5OTg3NCwgOTk4ODEsIDk5ODg1LCA5OTg5MSwgOTk4OTUsIDk5ODk5LCA5OTkwMywgCi0gICAgOTk5MDksIDk5OTE2LCA5OTkyMywgOTk5MzAsIDk5OTQxLCA5OTk0OSwgOTk5NTMsIDk5OTU5LCA5OTk2OCwgOTk5NzUsIAotICAgIDk5OTgxLCA5OTk4NCwgOTk5ODgsIDk5OTkyLCA5OTk5OCwgMTAwMDA3LCAxMDAwMTUsIDEwMDAxOSwgMTAwMDI1LCAKLSAgICAxMDAwMjksIDEwMDAzMywgMTAwMDM3LCAxMDAwNDMsIDEwMDA1MCwgMTAwMDU2LCAxMDAwNjAsIDEwMDA2NiwgMTAwMDcwLCAKLSAgICAxMDAwNzQsIDEwMDA4MywgMTAwMDk1LCAxMDAwOTksIDEwMDEwNiwgMTAwMTEzLCAxMDAxMjMsIDEwMDEzMCwgMTAwMTQyLCAKLSAgICAxMDAxNDksIDEwMDE1NiwgMTAwMTYzLCAxMDAxNzQsIDEwMDE4NCwgMTAwMTk3LCAxMDAyMDcsIDEwMDIxNCwgMTAwMjE4LCAKLSAgICAxMDAyMjIsIDEwMDIyNiwgMTAwMjMwLCAxMDAyMzksIDEwMDI0OCwgMTAwMjU3LCAxMDAyNzQsIDEwMDI4MywgMTAwMjg5LCAKLSAgICAxMDAyOTYsIDEwMDMwNCwgMTAwMzE3LCAxMDAzMjEsIDEwMDMzMCwgMTAwMzM5LCAxMDAzNDgsIDEwMDM1NywgMTAwMzY4LCAKLSAgICAxMDAzNzcsIDEwMDM4NiwgMTAwMzk1LCAxMDA0MDQsIDEwMDQxMywgMTAwNDIyLCAxMDA0MzIsIDEwMDQzNSwgMTAwNDM5LCAKLSAgICAxMDA0NDMsIDEwMDQ0NywgMTAwNDUxLCAxMDA0NTUsIDEwMDQ2MSwgMTAwNDY4LCAxMDA0NzUsIDEwMDQ4MiwgMTAwNDg4LCAKLSAgICAxMDA0OTQsIDEwMDUwMSwgMTAwNTA3LCAxMDA1MTQsIDEwMDUyMiwgMTAwNTI2LCAxMDA1MzMsIDEwMDU0MCwgMTAwNTQ3LCAKLSAgICAxMDA1NTUsIDEwMDU1OCwgMTAwNTYyLCAxMDA1NjYsIDEwMDU3MCwgMTAwNTczLCAxMDA1NzksIDEwMDU4MywgMTAwNTg5LCAKLSAgICAxMDA1OTYsIDEwMDYwMywgMTAwNjA5LCAxMDA2MTYsIDEwMDYyMywgMTAwNjMwLCAxMDA2MzcsIDEwMDY0NCwgMTAwNjUxLCAKLSAgICAxMDA2NTgsIDEwMDY2NSwgMTAwNjcyLCAxMDA2NzksIDEwMDY4NiwgMTAwNjkzLCAxMDA3MDAsIDEwMDcwNywgMTAwNzEzLCAKLSAgICAxMDA3MTcsIDEwMDcyNiwgMTAwNzMwLCAxMDA3MzQsIDEwMDczOCwgMTAwNzQyLCAxMDA3NDgsIDEwMDc1NSwgMTAwNzYyLCAKLSAgICAxMDA3NjksIDEwMDc3NiwgMTAwNzgzLCAxMDA3ODksIDEwMDc5NywgMTAwODAxLCAxMDA4MDUsIDEwMDgwOSwgMTAwODEzLCAKLSAgICAxMDA4MTksIDEwMDgzNiwgMTAwODUzLCAxMDA4NTcsIDEwMDg2MSwgMTAwODY1LCAxMDA4NjksIDEwMDg3MywgMTAwODc3LCAKLSAgICAxMDA4ODMsIDEwMDg5MCwgMTAwODk0LCAxMDA5MDAsIDEwMDkwNywgMTAwOTE0LCAxMDA5MjEsIDEwMDkyOCwgMTAwOTM1LCAKLSAgICAxMDA5NDQsIDEwMDk1MSwgMTAwOTU4LCAxMDA5NjUsIDEwMDk3MiwgMTAwOTc2LCAxMDA5ODAsIDEwMDk4NiwgMTAwOTk4LCAKLSAgICAxMDEwMDIsIDEwMTAwNiwgMTAxMDE1LCAxMDEwMTksIDEwMTAyMywgMTAxMDI3LCAxMDEwMzMsIDEwMTAzNywgMTAxMDQxLCAKLSAgICAxMDEwNTAsIDEwMTA1NCwgMTAxMDU4LCAxMDEwNjIsIDEwMTA2OSwgMTAxMDczLCAxMDEwNzcsIDEwMTA4MSwgMTAxMDg1LCAKLSAgICAxMDEwODksIDEwMTA5MywgMTAxMDk3LCAxMDExMDEsIDEwMTEwNywgMTAxMTE0LCAxMDExMjEsIDEwMTEyNywgMTAxMTMxLCAKLSAgICAxMDExNDgsIDEwMTE1NCwgMTAxMTU4LCAxMDExNjQsIDEwMTE3MCwgMTAxMTc2LCAxMDExODIsIDEwMTE4OCwgMTAxMTk0LCAKLSAgICAxMDExOTgsIDEwMTIwMiwgMTAxMjA2LCAxMDEyMTIsIDEwMTIxNiwgMTAxMjIyLCAxMDEyMjYsIDEwMTIzMCwgMTAxMjM3LCAKLSAgICAxMDEyNDQsIDEwMTI2MSwgMTAxMjY1LCAxMDEyNjksIDEwMTI3MywgMTAxMjc3LCAxMDEyODEsIDEwMTI5MywgMTAxMjk2LCAKLSAgICAxMDEzMDEsIDEwMTMwNiwgMTAxMzIxLCAxMDEzMzEsIDEwMTM0MywgMTAxMzQ3LCAxMDEzNTEsIDEwMTM1NSwgMTAxMzYxLCAKLSAgICAxMDEzNjgsIDEwMTM3NSwgMTAxMzg1LCAxMDEzOTcsIDEwMTQwMywgMTAxNDA5LCAxMDE0MTgsIDEwMTQyMiwgMTAxNDI2LCAKLSAgICAxMDE0MzMsIDEwMTQ0MywgMTAxNDUwLCAxMDE0NTYsIDEwMTQ2MCwgMTAxNDY0LCAxMDE0NzEsIDEwMTQ3NywgMTAxNDgxLCAKLSAgICAxMDE0ODcsIDEwMTQ5MSwgMTAxNDk5LCAxMDE1MDUsIDEwMTUwOSwgMTAxNTE3LCAxMDE1MjUsIDEwMTUzMiwgMTAxNTM4LCAKLSAgICAxMDE1NDUsIDEwMTU1MiwgMTAxNTYyLCAxMDE1NzIsIDEwMTU3NiwgMTAxNTgwLCAxMDE1ODQsIDEwMTU4OCwgMTAxNTk0LCAKLSAgICAxMDE2MDEsIDEwMTYwNywgMTAxNjE0LCAxMDE2MjEsIDEwMTYyOCwgMTAxNjM3LCAxMDE2NDQsIDEwMTY1MSwgMTAxNjU3LCAKLSAgICAxMDE2NjQsIDEwMTY3MSwgMTAxNjc4LCAxMDE2ODUsIDEwMTY5MiwgMTAxNjk5LCAxMDE3MDUsIDEwMTcxMiwgMTAxNzE5LCAKLSAgICAxMDE3MjYsIDEwMTczNSwgMTAxNzQyLCAxMDE3NDksIDEwMTc1MywgMTAxNzU5LCAxMDE3NjMsIDEwMTc2OSwgMTAxNzc2LCAKLSAgICAxMDE3ODMsIDEwMTc5MCwgMTAxNzk0LCAxMDE3OTgsIDEwMTgwMiwgMTAxODA2LCAxMDE4MTAsIDEwMTgxNywgMTAxODIxLCAKLSAgICAxMDE4MjUsIDEwMTgzMSwgMTAxODM5LCAxMDE4NDMsIDEwMTg0NywgMTAxODUxLCAxMDE4NTUsIDEwMTg2MiwgMTAxODY2LCAKLSAgICAxMDE4NzAsIDEwMTg3OCwgMTAxODgyLCAxMDE4ODYsIDEwMTg5MCwgMTAxODk0LCAxMDE5MDAsIDEwMTkwNCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAxOTA4LCAxMDE5MTQsIDEwMTkyMCwgMTAxOTI3LCAKLSAgICAxMDE5MzQsIDEwMTk0MSwgMTAxOTQ4LCAxMDE5NTUsIDEwMTk2MiwgMTAxOTY4LCAxMDE5NzUsIDEwMTk4MiwgMTAxOTg5LCAKLSAgICAxMDE5OTYsIDEwMjAwMywgMTAyMDEwLCAxMDIwMTYsIDEwMjAyMiwgMTAyMDI4LCAxMDIwMzQsIDEwMjA0MCwgMTAyMDQ2LCAKLSAgICAxMDIwNTIsIDEwMjA1OCwgMTAyMDY0LCAxMDIwNzEsIDEwMjA3OCwgMTAyMDg1LCAxMDIwOTIsIDEwMjA5OSwgMTAyMTA2LCAKLSAgICAxMDIxMTIsIDEwMjExOCwgMTAyMTI0LCAxMDIxMzEsIDEwMjEzOCwgMTAyMTQ0LCAxMDIxNTAsIDEwMjE1OSwgMTAyMTY2LCAKLSAgICAxMDIxNzMsIDEwMjE4MCwgMTAyMTg3LCAxMDIxOTQsIDEwMjIwMSwgMTAyMjA3LCAxMDIyMTMsIDEwMjIxOSwgMTAyMjI4LCAKLSAgICAxMDIyMzUsIDEwMjI0MiwgMTAyMjUzLCAxMDIyNjQsIDEwMjI3MCwgMTAyMjc2LCAxMDIyODIsIDEwMjI5MSwgMTAyMjk4LCAKLSAgICAxMDIzMDUsIDEwMjMxNSwgMTAyMzI1LCAxMDIzMzYsIDEwMjM0NywgMTAyMzU5LCAxMDIzNzIsIDEwMjM4MywgMTAyMzk0LCAKLSAgICAxMDI0MDYsIDEwMjQxOSwgMTAyNDMwLCAxMDI0NDEsIDEwMjQ1MiwgMTAyNDYzLCAxMDI0NzQsIDEwMjQ4NiwgMTAyNDk0LCAKLSAgICAxMDI1MDIsIDEwMjUxMSwgMTAyNTIwLCAxMDI1MjksIDEwMjUzNSwgMTAyNTQxLCAxMDI1NDcsIDEwMjU1NCwgMTAyNTY0LCAKLSAgICAxMDI1NzEsIDEwMjU4MSwgMTAyNTg2LCAxMDI1OTEsIDEwMjU5NywgMTAyNjAzLCAxMDI2MTEsIDEwMjYxOSwgMTAyNjI4LCAKLSAgICAxMDI2MzksIDEwMjY1MCwgMTAyNjU4LCAxMDI2NjYsIDEwMjY3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTAyNjg0LCAxMDI2OTUsIDEwMjcwMiwgMTAyNzEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDI3MTgsIDEwMjcyMiwgMTAyNzI2LCAxMDI3MzAsIDEwMjczNCwgMTAyNzM4LCAxMDI3NDIsIDEwMjc0NiwgMTAyNzUwLCAKLSAgICAxMDI3NTQsIDEwMjc1OCwgMTAyNzYyLCAxMDI3NjYsIDEwMjc3MCwgMTAyNzc0LCAxMDI3NzgsIDEwMjc4MiwgMTAyNzg2LCAKLSAgICAxMDI3OTAsIDEwMjc5NCwgMTAyNzk4LCAxMDI4MDIsIDEwMjgwNiwgMTAyODEwLCAxMDI4MTQsIDEwMjgxOCwgMTAyODIyLCAKLSAgICAxMDI4MjYsIDEwMjgzMCwgMTAyODM0LCAxMDI4MzgsIDEwMjg0MiwgMTAyODQ2LCAxMDI4NTAsIDEwMjg1NCwgMTAyODU4LCAKLSAgICAxMDI4NjIsIDEwMjg2NiwgMTAyODcwLCAxMDI4NzQsIDEwMjg3OCwgMTAyODgyLCAxMDI4ODYsIDEwMjg5MCwgMTAyODk0LCAKLSAgICAxMDI4OTgsIDEwMjkwMiwgMTAyOTA2LCAxMDI5MTAsIDEwMjkxNCwgMTAyOTE4LCAxMDI5MjIsIDEwMjkyNiwgMTAyOTMwLCAKLSAgICAxMDI5MzQsIDEwMjkzOCwgMTAyOTQyLCAxMDI5NDYsIDEwMjk1MCwgMTAyOTU0LCAxMDI5NTgsIDEwMjk2MiwgMTAyOTY2LCAKLSAgICAxMDI5NzAsIDEwMjk3NCwgMTAyOTc4LCAxMDI5ODIsIDEwMjk4NiwgMTAyOTkwLCAxMDI5OTQsIDEwMjk5OCwgMTAzMDAyLCAKLSAgICAxMDMwMDYsIDEwMzAxMCwgMTAzMDE0LCAxMDMwMTgsIDEwMzAyMiwgMTAzMDI2LCAxMDMwMzAsIDEwMzAzNCwgMTAzMDM4LCAKLSAgICAxMDMwNDIsIDEwMzA0NiwgMTAzMDUwLCAxMDMwNTQsIDEwMzA1OCwgMTAzMDYyLCAxMDMwNjYsIDEwMzA3MCwgMTAzMDc0LCAKLSAgICAxMDMwNzgsIDEwMzA4MiwgMTAzMDg2LCAxMDMwOTAsIDEwMzA5NCwgMTAzMDk4LCAxMDMxMDIsIDEwMzEwNiwgMTAzMTEwLCAKLSAgICAxMDMxMTQsIDEwMzExOCwgMTAzMTIyLCAxMDMxMjYsIDEwMzEzMCwgMTAzMTM0LCAxMDMxMzgsIDEwMzE0MiwgMTAzMTQ2LCAKLSAgICAxMDMxNTAsIDEwMzE1NCwgMTAzMTU4LCAxMDMxNjIsIDEwMzE2NiwgMTAzMTcwLCAxMDMxNzQsIDEwMzE3OCwgMTAzMTgyLCAKLSAgICAxMDMxODYsIDEwMzE5MCwgMTAzMTk0LCAxMDMxOTgsIDEwMzIwMiwgMTAzMjA2LCAxMDMyMTAsIDEwMzIxNCwgMTAzMjE4LCAKLSAgICAxMDMyMjIsIDEwMzIyNiwgMTAzMjMwLCAxMDMyMzQsIDEwMzIzOCwgMTAzMjQyLCAxMDMyNDYsIDEwMzI1MCwgMTAzMjU0LCAKLSAgICAxMDMyNTgsIDEwMzI2MiwgMTAzMjY2LCAxMDMyNzAsIDEwMzI3NCwgMTAzMjc4LCAxMDMyODIsIDEwMzI4NiwgMTAzMjkwLCAKLSAgICAxMDMyOTQsIDEwMzI5OCwgMTAzMzAyLCAxMDMzMDYsIDEwMzMxMCwgMTAzMzE0LCAxMDMzMTgsIDEwMzMyMiwgMTAzMzI2LCAKLSAgICAxMDMzMzAsIDEwMzMzNCwgMTAzMzM4LCAxMDMzNDIsIDEwMzM0NiwgMTAzMzUwLCAxMDMzNTQsIDEwMzM1OCwgMTAzMzYyLCAKLSAgICAxMDMzNjYsIDEwMzM3MCwgMTAzMzc0LCAxMDMzNzgsIDEwMzM4MiwgMTAzMzg2LCAxMDMzOTAsIDEwMzM5NCwgMTAzMzk4LCAKLSAgICAxMDM0MDIsIDEwMzQwNiwgMTAzNDEwLCAxMDM0MTQsIDEwMzQxOCwgMTAzNDIyLCAxMDM0MjYsIDEwMzQzMCwgMTAzNDM0LCAKLSAgICAxMDM0MzgsIDEwMzQ0MiwgMTAzNDQ2LCAxMDM0NTAsIDEwMzQ1NCwgMTAzNDU4LCAxMDM0NjIsIDEwMzQ2NiwgMTAzNDcwLCAKLSAgICAxMDM0NzQsIDEwMzQ3OCwgMTAzNDgyLCAxMDM0ODYsIDEwMzQ5MCwgMTAzNDk0LCAxMDM0OTgsIDEwMzUwMiwgMTAzNTA2LCAKLSAgICAxMDM1MTAsIDEwMzUxNCwgMTAzNTE4LCAxMDM1MjIsIDEwMzUyNiwgMTAzNTMwLCAxMDM1MzQsIDEwMzUzOCwgMTAzNTQyLCAKLSAgICAxMDM1NDYsIDEwMzU1MCwgMTAzNTU0LCAxMDM1NTgsIDEwMzU2MiwgMTAzNTY2LCAxMDM1NzAsIDEwMzU3NCwgMTAzNTc4LCAKLSAgICAxMDM1ODIsIDEwMzU4NiwgMTAzNTkwLCAxMDM1OTQsIDEwMzU5OCwgMTAzNjAyLCAxMDM2MDYsIDEwMzYxMCwgMTAzNjE0LCAKLSAgICAxMDM2MTgsIDEwMzYyMiwgMTAzNjI2LCAxMDM2MzAsIDEwMzYzNCwgMTAzNjM4LCAxMDM2NDIsIDEwMzY0NiwgMTAzNjUwLCAKLSAgICAxMDM2NTQsIDEwMzY1OCwgMTAzNjYyLCAxMDM2NjYsIDEwMzY3MCwgMTAzNjc0LCAxMDM2NzgsIDEwMzY4MiwgMTAzNjg2LCAKLSAgICAxMDM2OTAsIDEwMzY5NCwgMTAzNjk4LCAxMDM3MDIsIDEwMzcwNiwgMTAzNzEwLCAxMDM3MTQsIDEwMzcxOCwgMTAzNzIyLCAKLSAgICAxMDM3MjYsIDEwMzczMCwgMTAzNzM0LCAxMDM3MzgsIDEwMzc0MiwgMTAzNzQ2LCAxMDM3NTAsIDEwMzc1NCwgMTAzNzU4LCAKLSAgICAxMDM3NjIsIDEwMzc2NiwgMTAzNzcwLCAxMDM3NzQsIDEwMzc3OCwgMTAzNzgyLCAxMDM3ODYsIDEwMzc5MCwgMTAzNzk0LCAKLSAgICAxMDM3OTgsIDEwMzgwMiwgMTAzODA2LCAxMDM4MTAsIDEwMzgxNCwgMTAzODE4LCAxMDM4MjIsIDEwMzgyNiwgMTAzODMwLCAKLSAgICAxMDM4MzQsIDEwMzgzOCwgMTAzODQyLCAxMDM4NDYsIDEwMzg1MCwgMTAzODU0LCAxMDM4NTgsIDEwMzg2MiwgMTAzODY2LCAKLSAgICAxMDM4NzAsIDEwMzg3NCwgMTAzODc4LCAxMDM4ODIsIDEwMzg4NiwgMTAzODkwLCAxMDM4OTQsIDEwMzg5OCwgMTAzOTAyLCAKLSAgICAxMDM5MDYsIDEwMzkxMCwgMTAzOTE0LCAxMDM5MTgsIDEwMzkyMiwgMTAzOTI2LCAxMDM5MzAsIDEwMzkzNCwgMTAzOTM4LCAKLSAgICAxMDM5NDIsIDEwMzk0NiwgMTAzOTUwLCAxMDM5NTQsIDEwMzk1OCwgMTAzOTYyLCAxMDM5NjYsIDEwMzk3MCwgMTAzOTc0LCAKLSAgICAxMDM5NzgsIDEwMzk4MiwgMTAzOTg2LCAxMDM5OTAsIDEwMzk5NCwgMTAzOTk4LCAxMDQwMDIsIDEwNDAwNiwgMTA0MDEwLCAKLSAgICAxMDQwMTQsIDEwNDAxOCwgMTA0MDIyLCAxMDQwMjYsIDEwNDAzMCwgMTA0MDM0LCAxMDQwMzgsIDEwNDA0MiwgMTA0MDQ2LCAKLSAgICAxMDQwNTAsIDEwNDA1NCwgMTA0MDU4LCAxMDQwNjIsIDEwNDA2NiwgMTA0MDcwLCAxMDQwNzQsIDEwNDA3OCwgMTA0MDgyLCAKLSAgICAxMDQwODYsIDEwNDA5MCwgMTA0MDk0LCAxMDQwOTgsIDEwNDEwMiwgMTA0MTA2LCAxMDQxMTAsIDEwNDExNCwgMTA0MTE4LCAKLSAgICAxMDQxMjIsIDEwNDEyNiwgMTA0MTMwLCAxMDQxMzQsIDEwNDEzOCwgMTA0MTQyLCAxMDQxNDYsIDEwNDE1MCwgMTA0MTU0LCAKLSAgICAxMDQxNTgsIDEwNDE2MiwgMTA0MTY2LCAxMDQxNzAsIDEwNDE3NCwgMTA0MTc4LCAxMDQxODIsIDEwNDE4NiwgMTA0MTkwLCAKLSAgICAxMDQxOTQsIDEwNDE5OCwgMTA0MjAyLCAxMDQyMDYsIDEwNDIxMCwgMTA0MjE0LCAxMDQyMTgsIDEwNDIyMiwgMTA0MjI2LCAKLSAgICAxMDQyMzAsIDEwNDIzNCwgMTA0MjM4LCAxMDQyNDIsIDEwNDI0NiwgMTA0MjUwLCAxMDQyNTQsIDEwNDI1OCwgMTA0MjYyLCAKLSAgICAxMDQyNjYsIDEwNDI3MCwgMTA0Mjc0LCAxMDQyNzgsIDEwNDI4MiwgMTA0Mjg2LCAxMDQyOTAsIDEwNDI5NCwgMTA0Mjk4LCAKLSAgICAxMDQzMDIsIDEwNDMwNiwgMTA0MzEwLCAxMDQzMTQsIDEwNDMxOCwgMTA0MzIyLCAxMDQzMjYsIDEwNDMzMCwgMTA0MzM0LCAKLSAgICAxMDQzMzgsIDEwNDM0MiwgMTA0MzQ2LCAxMDQzNTAsIDEwNDM1NCwgMTA0MzU4LCAxMDQzNjIsIDEwNDM2NiwgMTA0MzcwLCAKLSAgICAxMDQzNzQsIDEwNDM3OCwgMTA0MzgyLCAxMDQzODYsIDEwNDM5MCwgMTA0Mzk0LCAxMDQzOTgsIDEwNDQwMiwgMTA0NDA2LCAKLSAgICAxMDQ0MTAsIDEwNDQxNCwgMTA0NDE4LCAxMDQ0MjIsIDEwNDQyNiwgMTA0NDMwLCAxMDQ0MzQsIDEwNDQzOCwgMTA0NDQyLCAKLSAgICAxMDQ0NDYsIDEwNDQ1MCwgMTA0NDU0LCAxMDQ0NTgsIDEwNDQ2MiwgMTA0NDY2LCAxMDQ0NzAsIDEwNDQ3NCwgMTA0NDc4LCAKLSAgICAxMDQ0ODIsIDEwNDQ4NiwgMTA0NDkwLCAxMDQ0OTQsIDEwNDQ5OCwgMTA0NTAyLCAxMDQ1MDYsIDEwNDUxMCwgMTA0NTE0LCAKLSAgICAxMDQ1MTgsIDEwNDUyMiwgMTA0NTI2LCAxMDQ1MzAsIDEwNDUzNCwgMTA0NTM4LCAxMDQ1NDIsIDEwNDU0NiwgMTA0NTUwLCAKLSAgICAxMDQ1NTQsIDEwNDU1OCwgMTA0NTYyLCAxMDQ1NjYsIDEwNDU3MCwgMTA0NTc0LCAxMDQ1NzgsIDEwNDU4MiwgMTA0NTg2LCAKLSAgICAxMDQ1OTAsIDEwNDU5NCwgMTA0NTk4LCAxMDQ2MDIsIDEwNDYwNiwgMTA0NjEwLCAxMDQ2MTQsIDEwNDYxOCwgMTA0NjIyLCAKLSAgICAxMDQ2MjYsIDEwNDYzMCwgMTA0NjM0LCAxMDQ2MzgsIDEwNDY0MiwgMTA0NjQ2LCAxMDQ2NTAsIDEwNDY1NCwgMTA0NjU4LCAKLSAgICAxMDQ2NjIsIDEwNDY2NiwgMTA0NjcwLCAxMDQ2NzQsIDEwNDY3OCwgMTA0NjgyLCAxMDQ2ODYsIDEwNDY5MCwgMTA0Njk0LCAKLSAgICAxMDQ2OTgsIDEwNDcwMiwgMTA0NzA2LCAxMDQ3MTAsIDEwNDcxNCwgMTA0NzE4LCAxMDQ3MjIsIDEwNDcyNiwgMTA0NzMwLCAKLSAgICAxMDQ3MzQsIDEwNDczOCwgMTA0NzQyLCAxMDQ3NDYsIDEwNDc1MCwgMTA0NzU0LCAxMDQ3NTgsIDEwNDc2MiwgMTA0NzY2LCAKLSAgICAxMDQ3NzAsIDEwNDc3NCwgMTA0Nzc4LCAxMDQ3ODIsIDEwNDc4NiwgMTA0NzkwLCAxMDQ3OTQsIDEwNDc5OCwgMTA0ODAyLCAKLSAgICAxMDQ4MDYsIDEwNDgxMCwgMTA0ODE0LCAxMDQ4MTgsIDEwNDgyMiwgMTA0ODI2LCAxMDQ4MzAsIDEwNDgzNCwgMTA0ODM4LCAKLSAgICAxMDQ4NDIsIDEwNDg0NiwgMTA0ODUwLCAxMDQ4NTQsIDEwNDg1OCwgMTA0ODYyLCAxMDQ4NjYsIDEwNDg3MCwgMTA0ODc0LCAKLSAgICAxMDQ4NzgsIDEwNDg4MiwgMTA0ODg2LCAxMDQ4OTAsIDEwNDg5NCwgMTA0ODk4LCAxMDQ5MDIsIDEwNDkwNiwgMTA0OTEwLCAKLSAgICAxMDQ5MTQsIDEwNDkxOCwgMTA0OTIyLCAxMDQ5MjYsIDEwNDkzMCwgMTA0OTM0LCAxMDQ5MzgsIDEwNDk0MiwgMTA0OTQ2LCAKLSAgICAxMDQ5NTAsIDEwNDk1NCwgMTA0OTU4LCAxMDQ5NjIsIDEwNDk2NiwgMTA0OTcwLCAxMDQ5NzQsIDEwNDk3OCwgMTA0OTgyLCAKLSAgICAxMDQ5ODYsIDEwNDk5MCwgMTA0OTk0LCAxMDQ5OTgsIDEwNTAwMiwgMTA1MDA2LCAxMDUwMTAsIDEwNTAxNCwgMTA1MDE4LCAKLSAgICAxMDUwMjIsIDEwNTAyNiwgMTA1MDMwLCAxMDUwMzQsIDEwNTAzOCwgMTA1MDQyLCAxMDUwNDYsIDEwNTA1MCwgMTA1MDU0LCAKLSAgICAxMDUwNTgsIDEwNTA2MiwgMTA1MDY2LCAxMDUwNzAsIDEwNTA3NCwgMTA1MDc4LCAxMDUwODIsIDEwNTA4NiwgMTA1MDkwLCAKLSAgICAxMDUwOTQsIDEwNTA5OCwgMTA1MTAyLCAxMDUxMDYsIDEwNTExMCwgMTA1MTE0LCAxMDUxMTgsIDEwNTEyMiwgMTA1MTI2LCAKLSAgICAxMDUxMzAsIDEwNTEzNCwgMTA1MTM4LCAxMDUxNDIsIDEwNTE0NiwgMTA1MTUwLCAxMDUxNTQsIDEwNTE1OCwgMTA1MTYyLCAKLSAgICAxMDUxNjYsIDEwNTE3MCwgMTA1MTc0LCAxMDUxNzgsIDEwNTE4MiwgMTA1MTg2LCAxMDUxOTAsIDEwNTE5NCwgMTA1MTk4LCAKLSAgICAxMDUyMDIsIDEwNTIwNiwgMTA1MjEwLCAxMDUyMTQsIDEwNTIxOCwgMTA1MjIyLCAxMDUyMjYsIDEwNTIzMCwgMTA1MjM0LCAKLSAgICAxMDUyMzgsIDEwNTI0MiwgMTA1MjQ2LCAxMDUyNTAsIDEwNTI1NCwgMTA1MjU4LCAxMDUyNjIsIDEwNTI2NiwgMTA1MjcwLCAKLSAgICAxMDUyNzQsIDEwNTI3OCwgMTA1MjgyLCAxMDUyODYsIDEwNTI5MCwgMTA1Mjk0LCAxMDUyOTgsIDEwNTMwMiwgMTA1MzA2LCAKLSAgICAxMDUzMTAsIDEwNTMxNCwgMTA1MzE4LCAxMDUzMjIsIDEwNTMyNiwgMTA1MzMwLCAxMDUzMzQsIDEwNTMzOCwgMTA1MzQyLCAKLSAgICAxMDUzNDYsIDEwNTM1MCwgMTA1MzU0LCAxMDUzNTgsIDEwNTM2MiwgMTA1MzY2LCAxMDUzNzAsIDEwNTM3NCwgMTA1Mzc4LCAKLSAgICAxMDUzODIsIDEwNTM4NiwgMTA1MzkwLCAxMDUzOTQsIDEwNTM5OCwgMTA1NDAyLCAxMDU0MDYsIDEwNTQxMCwgMTA1NDE0LCAKLSAgICAxMDU0MTgsIDEwNTQyMiwgMTA1NDI2LCAxMDU0MzAsIDEwNTQzNCwgMTA1NDM4LCAxMDU0NDIsIDEwNTQ0NiwgMTA1NDUwLCAKLSAgICAxMDU0NTQsIDEwNTQ1OCwgMTA1NDYyLCAxMDU0NjYsIDEwNTQ3MCwgMTA1NDc0LCAxMDU0NzgsIDEwNTQ4MiwgMTA1NDg2LCAKLSAgICAxMDU0OTAsIDEwNTQ5NCwgMTA1NDk4LCAxMDU1MDIsIDEwNTUwNiwgMTA1NTEwLCAxMDU1MTQsIDEwNTUxOCwgMTA1NTIyLCAKLSAgICAxMDU1MjYsIDEwNTUzMCwgMTA1NTM0LCAxMDU1MzgsIDEwNTU0MiwgMTA1NTQ2LCAxMDU1NTAsIDEwNTU1NCwgMTA1NTU4LCAKLSAgICAxMDU1NjIsIDEwNTU2NiwgMTA1NTcwLCAxMDU1NzQsIDEwNTU3OCwgMTA1NTgyLCAxMDU1ODYsIDEwNTU5MCwgMTA1NTk0LCAKLSAgICAxMDU1OTgsIDEwNTYwMiwgMTA1NjA2LCAxMDU2MTAsIDEwNTYxNCwgMTA1NjE4LCAxMDU2MjIsIDEwNTYyNiwgMTA1NjMwLCAKLSAgICAxMDU2MzQsIDEwNTYzOCwgMTA1NjQyLCAxMDU2NDYsIDEwNTY1MCwgMTA1NjU0LCAxMDU2NTgsIDEwNTY2MiwgMTA1NjY2LCAKLSAgICAxMDU2NzAsIDEwNTY3NCwgMTA1Njc4LCAxMDU2ODIsIDEwNTY4NiwgMTA1NjkwLCAxMDU2OTQsIDEwNTY5OCwgMTA1NzAyLCAKLSAgICAxMDU3MDYsIDEwNTcxMCwgMTA1NzE0LCAxMDU3MTgsIDEwNTcyMiwgMTA1NzI2LCAxMDU3MzAsIDEwNTczNCwgMTA1NzM4LCAKLSAgICAxMDU3NDIsIDEwNTc0NiwgMTA1NzUwLCAxMDU3NTQsIDEwNTc1OCwgMTA1NzYyLCAxMDU3NjYsIDEwNTc3MCwgMTA1Nzc0LCAKLSAgICAxMDU3NzgsIDEwNTc4MiwgMTA1Nzg2LCAxMDU3OTAsIDEwNTc5NCwgMTA1Nzk4LCAxMDU4MDIsIDEwNTgwNiwgMTA1ODEwLCAKLSAgICAxMDU4MTQsIDEwNTgxOCwgMTA1ODIyLCAxMDU4MjYsIDEwNTgzMCwgMTA1ODM0LCAxMDU4MzgsIDEwNTg0MiwgMTA1ODQ2LCAKLSAgICAxMDU4NTAsIDEwNTg1NCwgMTA1ODU4LCAxMDU4NjIsIDEwNTg2NiwgMTA1ODcwLCAxMDU4NzQsIDEwNTg3OCwgMTA1ODgyLCAKLSAgICAxMDU4ODYsIDEwNTg5MCwgMTA1ODk0LCAxMDU4OTgsIDEwNTkwMiwgMTA1OTA2LCAxMDU5MTAsIDEwNTkxNCwgMTA1OTE4LCAKLSAgICAxMDU5MjIsIDEwNTkyNiwgMTA1OTMwLCAxMDU5MzQsIDEwNTkzOCwgMTA1OTQyLCAxMDU5NDYsIDEwNTk1MCwgMTA1OTU0LCAKLSAgICAxMDU5NTgsIDEwNTk2MiwgMTA1OTY2LCAxMDU5NzAsIDEwNTk3NCwgMTA1OTc4LCAxMDU5ODIsIDEwNTk4NiwgMTA1OTkwLCAKLSAgICAxMDU5OTQsIDEwNTk5OCwgMTA2MDAyLCAxMDYwMDYsIDEwNjAxMCwgMTA2MDE0LCAxMDYwMTgsIDEwNjAyMiwgMTA2MDI2LCAKLSAgICAxMDYwMzAsIDEwNjAzNCwgMTA2MDM4LCAxMDYwNDIsIDEwNjA0NiwgMTA2MDUwLCAxMDYwNTQsIDEwNjA1OCwgMTA2MDYyLCAKLSAgICAxMDYwNjYsIDEwNjA3MCwgMTA2MDc0LCAxMDYwNzgsIDEwNjA4MiwgMTA2MDg2LCAxMDYwOTAsIDEwNjA5NCwgMTA2MDk4LCAKLSAgICAxMDYxMDIsIDEwNjEwNiwgMTA2MTEwLCAxMDYxMTQsIDEwNjExOCwgMTA2MTIyLCAxMDYxMjYsIDEwNjEzMCwgMTA2MTM0LCAKLSAgICAxMDYxMzgsIDEwNjE0MiwgMTA2MTQ2LCAxMDYxNTAsIDEwNjE1NCwgMTA2MTU4LCAxMDYxNjIsIDEwNjE2NiwgMTA2MTcwLCAKLSAgICAxMDYxNzQsIDEwNjE3OCwgMTA2MTgyLCAxMDYxODYsIDEwNjE5MCwgMTA2MTk0LCAxMDYxOTgsIDEwNjIwMiwgMTA2MjA2LCAKLSAgICAxMDYyMTAsIDEwNjIxNCwgMTA2MjE4LCAxMDYyMjIsIDEwNjIyNiwgMTA2MjMwLCAxMDYyMzQsIDEwNjIzOCwgMTA2MjQyLCAKLSAgICAxMDYyNDYsIDEwNjI1MCwgMTA2MjU0LCAxMDYyNTgsIDEwNjI2MiwgMTA2MjY2LCAxMDYyNzAsIDEwNjI3NCwgMTA2Mjc4LCAKLSAgICAxMDYyODIsIDEwNjI4NiwgMTA2MjkwLCAxMDYyOTQsIDEwNjI5OCwgMTA2MzAyLCAxMDYzMDYsIDEwNjMxMCwgMTA2MzE0LCAKLSAgICAxMDYzMTgsIDEwNjMyMiwgMTA2MzI2LCAxMDYzMzAsIDEwNjMzNCwgMTA2MzM4LCAxMDYzNDIsIDEwNjM0NiwgMTA2MzUwLCAKLSAgICAxMDYzNTQsIDEwNjM1OCwgMTA2MzYyLCAxMDYzNjYsIDEwNjM3MCwgMTA2Mzc0LCAxMDYzNzgsIDEwNjM4MiwgMTA2Mzg2LCAKLSAgICAxMDYzOTAsIDEwNjM5NCwgMTA2Mzk4LCAxMDY0MDIsIDEwNjQwNiwgMTA2NDEwLCAxMDY0MTQsIDEwNjQxOCwgMTA2NDIyLCAKLSAgICAxMDY0MjYsIDEwNjQzMCwgMTA2NDM0LCAxMDY0MzgsIDEwNjQ0MiwgMTA2NDQ2LCAxMDY0NTAsIDEwNjQ1NCwgMTA2NDU4LCAKLSAgICAxMDY0NjIsIDEwNjQ2NiwgMTA2NDcwLCAxMDY0NzQsIDEwNjQ3OCwgMTA2NDgyLCAxMDY0ODYsIDEwNjQ5MCwgMTA2NDk0LCAKLSAgICAxMDY0OTgsIDEwNjUwMiwgMTA2NTA2LCAxMDY1MTAsIDEwNjUxNCwgMTA2NTE4LCAxMDY1MjIsIDEwNjUyNiwgMTA2NTMwLCAKLSAgICAxMDY1MzQsIDEwNjUzOCwgMTA2NTQyLCAxMDY1NDYsIDEwNjU1MCwgMTA2NTU0LCAxMDY1NTgsIDEwNjU2MiwgMTA2NTY2LCAKLSAgICAxMDY1NzAsIDEwNjU3NCwgMTA2NTc4LCAxMDY1ODIsIDEwNjU4NiwgMTA2NTkwLCAxMDY1OTQsIDEwNjU5OCwgMTA2NjAyLCAKLSAgICAxMDY2MDYsIDEwNjYxMCwgMTA2NjE0LCAxMDY2MTgsIDEwNjYyMiwgMTA2NjI2LCAxMDY2MzAsIDEwNjYzNCwgMTA2NjM4LCAKLSAgICAxMDY2NDIsIDEwNjY0NiwgMTA2NjUwLCAxMDY2NTQsIDEwNjY1OCwgMTA2NjYyLCAxMDY2NjYsIDEwNjY3MCwgMTA2Njc0LCAKLSAgICAxMDY2NzgsIDEwNjY4MiwgMTA2Njg2LCAxMDY2OTAsIDEwNjY5NCwgMTA2Njk4LCAxMDY3MDIsIDEwNjcwNiwgMTA2NzEwLCAKLSAgICAxMDY3MTQsIDEwNjcxOCwgMTA2NzIyLCAxMDY3MjYsIDEwNjczMCwgMTA2NzM0LCAxMDY3MzgsIDEwNjc0MiwgMTA2NzQ2LCAKLSAgICAxMDY3NTAsIDEwNjc1NCwgMTA2NzU4LCAxMDY3NjIsIDEwNjc2NiwgMTA2NzcwLCAxMDY3NzQsIDEwNjc3OCwgMTA2NzgyLCAKLSAgICAxMDY3ODYsIDEwNjc5MCwgMTA2Nzk0LCAxMDY3OTgsIDEwNjgwMiwgMTA2ODA2LCAxMDY4MTAsIDEwNjgxNCwgMTA2ODE4LCAKLSAgICAxMDY4MjIsIDEwNjgyNiwgMTA2ODMwLCAxMDY4MzQsIDEwNjgzOCwgMTA2ODQyLCAxMDY4NDYsIDEwNjg1MCwgMTA2ODU0LCAKLSAgICAxMDY4NTgsIDEwNjg2MiwgMTA2ODY2LCAxMDY4NzAsIDEwNjg3NCwgMTA2ODc4LCAxMDY4ODIsIDEwNjg4NiwgMTA2ODkwLCAKLSAgICAxMDY4OTQsIDEwNjg5OCwgMTA2OTAyLCAxMDY5MDYsIDEwNjkxMCwgMTA2OTE0LCAxMDY5MTgsIDEwNjkyMiwgMTA2OTI2LCAKLSAgICAxMDY5MzAsIDEwNjkzNCwgMTA2OTM4LCAxMDY5NDIsIDEwNjk0NiwgMTA2OTUwLCAxMDY5NTQsIDEwNjk1OCwgMTA2OTYyLCAKLSAgICAxMDY5NjYsIDEwNjk3MCwgMTA2OTc0LCAxMDY5NzgsIDEwNjk4MiwgMTA2OTg2LCAxMDY5OTAsIDEwNjk5NCwgMTA2OTk4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcwMDIsIDEwNzAwOSwgMTA3MDE2LCAxMDcwMjUsIDEwNzAzNCwgCi0gICAgMTA3MDQxLCAxMDcwNDYsIDEwNzA1MywgMTA3MDYwLCAxMDcwNjksIDEwNzA4MCwgMTA3MDkxLCAxMDcwOTYsIDEwNzEwMywgCi0gICAgMTA3MTA4LCAxMDcxMTMsIDEwNzExOCwgMTA3MTIzLCAxMDcxMjgsIDEwNzEzMywgMTA3MTM4LCAxMDcxNDMsIDEwNzE0OCwgCi0gICAgMTA3MTUzLCAxMDcxNTgsIDEwNzE2NSwgMTA3MTcyLCAxMDcxNzcsIDEwNzE4MiwgMTA3MTg3LCAxMDcxOTIsIDEwNzE5OSwgCi0gICAgMTA3MjA2LCAxMDcyMTQsIDEwNzIxOSwgMTA3MjI2LCAxMDcyMzEsIDEwNzIzNiwgMTA3MjQxLCAxMDcyNDYsIDEwNzI1MSwgCi0gICAgMTA3MjU4LCAxMDcyNjUsIDEwNzI3MCwgMTA3Mjc1LCAxMDcyODAsIDEwNzI4NSwgMTA3MjkwLCAxMDcyOTUsIDEwNzMwMCwgCi0gICAgMTA3MzA1LCAxMDczMTAsIDEwNzMxNSwgMTA3MzIwLCAxMDczMjUsIDEwNzMzMCwgMTA3MzM1LCAxMDczNDAsIDEwNzM0NSwgCi0gICAgMTA3MzUwLCAxMDczNTUsIDEwNzM2MCwgMTA3MzY3LCAxMDczNzIsIDEwNzM3NywgMTA3Mzg2LCAxMDczOTMsIDEwNzM5OCwgCi0gICAgMTA3NDAzLCAxMDc0MDgsIDEwNzQxMywgMTA3NDE4LCAxMDc0MjMsIDEwNzQyOCwgMTA3NDMzLCAxMDc0MzgsIDEwNzQ0MywgCi0gICAgMTA3NDQ4LCAxMDc0NTMsIDEwNzQ1OCwgMTA3NDYzLCAxMDc0NjgsIDEwNzQ3MywgMTA3NDc4LCAxMDc0ODMsIDEwNzQ4OCwgCi0gICAgMTA3NDkzLCAxMDc0OTgsIDEwNzUwNCwgMTA3NTEyLCAxMDc1MTgsIDEwNzUyNiwgMTA3NTM0LCAxMDc1NDIsIDEwNzU0OCwgCi0gICAgMTA3NTU0LCAxMDc1NjAsIDEwNzU2NiwgMTA3NTcyLCAxMDc1ODAsIDEwNzU5MCwgMTA3NTk4LCAxMDc2MDYsIDEwNzYxMiwgCi0gICAgMTA3NjE4LCAxMDc2MjYsIDEwNzYzNCwgMTA3NjQwLCAxMDc2NDgsIDEwNzY1NiwgMTA3NjY0LCAxMDc2NzAsIDEwNzY3NiwgCi0gICAgMTA3NjgyLCAxMDc2ODgsIDEwNzY5NCwgMTA3NzAwLCAxMDc3MDgsIDEwNzcxNiwgMTA3NzIyLCAxMDc3MjgsIDEwNzczNCwgCi0gICAgMTA3NzQwLCAxMDc3NDYsIDEwNzc1NCwgMTA3NzYwLCAxMDc3NjYsIDEwNzc3MiwgMTA3Nzc4LCAxMDc3ODQsIDEwNzc5MCwgCi0gICAgMTA3Nzk4LCAxMDc4MDQsIDEwNzgxMCwgMTA3ODE2LCAxMDc4MjIsIDEwNzgzMCwgMTA3ODM4LCAxMDc4NDQsIDEwNzg1MCwgCi0gICAgMTA3ODU2LCAxMDc4NjEsIDEwNzg2NywgMTA3ODczLCAxMDc4ODAsIDEwNzg4NSwgMTA3ODkwLCAxMDc4OTUsIDEwNzkwMCwgCi0gICAgMTA3OTA1LCAxMDc5MTAsIDEwNzkxNSwgMTA3OTIwLCAxMDc5MjUsIDEwNzkzNCwgMTA3OTQxLCAxMDc5NDYsIDEwNzk1MSwgCi0gICAgMTA3OTU2LCAxMDc5NjMsIDEwNzk2OCwgMTA3OTczLCAxMDc5NzgsIDEwNzk4NSwgMTA3OTkwLCAxMDc5OTUsIDEwODAwMCwgCi0gICAgMTA4MDA1LCAxMDgwMTAsIDEwODAxNSwgMTA4MDIwLCAxMDgwMjUsIDEwODAzMCwgMTA4MDM1LCAxMDgwNDAsIDEwODA0NywgCi0gICAgMTA4MDUyLCAxMDgwNTksIDEwODA2NCwgMTA4MDY5LCAxMDgwNzYsIDEwODA4MSwgMTA4MDg2LCAxMDgwOTEsIDEwODA5NiwgCi0gICAgMTA4MTAxLCAxMDgxMDYsIDEwODExMSwgMTA4MTE2LCAxMDgxMjEsIDEwODEyNiwgMTA4MTMxLCAxMDgxMzYsIDEwODE0MSwgCi0gICAgMTA4MTQ2LCAxMDgxNTEsIDEwODE1NiwgMTA4MTYxLCAxMDgxNjYsIDEwODE3MSwgMTA4MTc4LCAxMDgxODMsIDEwODE4OCwgCi0gICAgMTA4MTkzLCAxMDgxOTgsIDEwODIwMywgMTA4MjA4LCAxMDgyMTMsIDEwODIxOCwgMTA4MjIzLCAxMDgyMjgsIDEwODIzMywgCi0gICAgMTA4MjM4LCAxMDgyNDMsIDEwODI1MCwgMTA4MjU1LCAxMDgyNjAsIDEwODI2NywgMTA4MjcyLCAxMDgyNzcsIDEwODI4MiwgCi0gICAgMTA4Mjg3LCAxMDgyOTIsIDEwODI5NywgMTA4MzAyLCAxMDgzMDcsIDEwODMxMiwgMTA4MzE3LCAxMDgzMjQsIDEwODMyOSwgCi0gICAgMTA4MzM0LCAxMDgzMzksIDEwODM0NCwgMTA4MzQ5LCAxMDgzNTYsIDEwODM2MywgMTA4MzY4LCAxMDgzNzMsIDEwODM3OCwgCi0gICAgMTA4MzgzLCAxMDgzODgsIDEwODM5MywgMTA4Mzk4LCAxMDg0MDMsIDEwODQwOCwgMTA4NDEzLCAxMDg0MTgsIDEwODQyMywgCi0gICAgMTA4NDI4LCAxMDg0MzMsIDEwODQzOCwgMTA4NDQzLCAxMDg0NDgsIDEwODQ1MywgMTA4NDU4LCAxMDg0NjMsIDEwODQ2OCwgCi0gICAgMTA4NDczLCAxMDg0NzgsIDEwODQ4MywgMTA4NDg4LCAxMDg0OTMsIDEwODQ5OCwgMTA4NTAzLCAxMDg1MDgsIDEwODUxMywgCi0gICAgMTA4NTE4LCAxMDg1MjMsIDEwODUyOCwgMTA4NTMzLCAxMDg1MzgsIDEwODU0MywgMTA4NTUwLCAxMDg1NTUsIDEwODU2MCwgCi0gICAgMTA4NTY1LCAxMDg1NzAsIDEwODU3NSwgMTA4NTgwLCAxMDg1ODUsIDEwODU5MCwgMTA4NTk1LCAxMDg2MDAsIDEwODYwNSwgCi0gICAgMTA4NjEwLCAxMDg2MTUsIDEwODYyMCwgMTA4NjI1LCAxMDg2MzAsIDEwODYzNSwgMTA4NjQwLCAxMDg2NDUsIDEwODY1MCwgCi0gICAgMTA4NjU1LCAxMDg2NjAsIDEwODY2NSwgMTA4NjcwLCAxMDg2NzUsIDEwODY4MCwgMTA4Njg1LCAxMDg2OTAsIDEwODY5NSwgCi0gICAgMTA4NzAwLCAxMDg3MDUsIDEwODcxMCwgMTA4NzE1LCAxMDg3MjAsIDEwODcyNSwgMTA4NzMwLCAxMDg3MzUsIDEwODc0MCwgCi0gICAgMTA4NzQ1LCAxMDg3NTAsIDEwODc1NSwgMTA4NzYwLCAxMDg3NjUsIDEwODc3MCwgMTA4Nzc1LCAxMDg3ODAsIDEwODc4NSwgCi0gICAgMTA4NzkwLCAxMDg3OTUsIDEwODgwMCwgMTA4ODA1LCAxMDg4MTAsIDEwODgxNSwgMTA4ODIwLCAxMDg4MjUsIDEwODgzMCwgCi0gICAgMTA4ODM1LCAxMDg4NDAsIDEwODg0NywgMTA4ODUyLCAxMDg4NTcsIDEwODg2MiwgMTA4ODY3LCAxMDg4NzIsIDEwODg3NywgCi0gICAgMTA4ODgxLCAxMDg4ODYsIDEwODg5MSwgMTA4ODk2LCAxMDg5MDEsIDEwODkwNiwgMTA4OTExLCAxMDg5MTYsIDEwODkyMSwgCi0gICAgMTA4OTI2LCAxMDg5MzEsIDEwODkzNiwgMTA4OTQxLCAxMDg5NDYsIDEwODk1MSwgMTA4OTU4LCAxMDg5NjMsIDEwODk2OCwgCi0gICAgMTA4OTc0LCAxMDg5NzksIDEwODk4NCwgMTA4OTg5LCAxMDg5OTQsIDEwODk5OSwgMTA5MDA0LCAxMDkwMDksIDEwOTAxNCwgCi0gICAgMTA5MDE5LCAxMDkwMjQsIDEwOTAyOSwgMTA5MDM0LCAxMDkwMzksIDEwOTA0NCwgMTA5MDQ5LCAxMDkwNTQsIDEwOTA1OSwgCi0gICAgMTA5MDY0LCAxMDkwNjksIDEwOTA3NCwgMTA5MDc5LCAxMDkwODQsIDEwOTA4OSwgMTA5MDk0LCAxMDkwOTksIDEwOTEwNCwgCi0gICAgMTA5MTA5LCAxMDkxMTQsIDEwOTExOSwgMTA5MTI0LCAxMDkxMjksIDEwOTEzNCwgMTA5MTM5LCAxMDkxNDQsIDEwOTE0OSwgCi0gICAgMTA5MTU0LCAxMDkxNTksIDEwOTE2NCwgMTA5MTY5LCAxMDkxNzQsIDEwOTE3OSwgMTA5MTg0LCAxMDkxODksIDEwOTE5NiwgCi0gICAgMTA5MjAxLCAxMDkyMDYsIDEwOTIxMywgMTA5MjIwLCAxMDkyMjUsIDEwOTIzMCwgMTA5MjM1LCAxMDkyNDAsIDEwOTI0NSwgCi0gICAgMTA5MjUwLCAxMDkyNTUsIDEwOTI2MCwgMTA5MjY1LCAxMDkyNzAsIDEwOTI3NSwgMTA5MjgwLCAxMDkyODUsIDEwOTI5MCwgCi0gICAgMTA5Mjk1LCAxMDkzMDAsIDEwOTMwNSwgMTA5MzEwLCAxMDkzMTUsIDEwOTMyMCwgMTA5MzI1LCAxMDkzMzAsIDEwOTMzNSwgCi0gICAgMTA5MzQwLCAxMDkzNDUsIDEwOTM1MiwgMTA5MzU3LCAxMDkzNjIsIDEwOTM2NywgMTA5MzcyLCAxMDkzNzcsIDEwOTM4MiwgCi0gICAgMTA5Mzg3LCAxMDkzOTIsIDEwOTM5NywgMTA5NDAyLCAxMDk0MDcsIDEwOTQxMiwgMTA5NDE3LCAxMDk0MjIsIDEwOTQyNywgCi0gICAgMTA5NDMyLCAxMDk0MzcsIDEwOTQ0MiwgMTA5NDQ5LCAxMDk0NTQsIDEwOTQ1OSwgMTA5NDY0LCAxMDk0NjksIDEwOTQ3NCwgCi0gICAgMTA5NDc5LCAxMDk0ODQsIDEwOTQ5MCwgMTA5NDk1LCAxMDk1MDAsIDEwOTUwNSwgMTA5NTEwLCAxMDk1MTUsIDEwOTUyMCwgCi0gICAgMTA5NTI1LCAxMDk1MzAsIDEwOTUzNywgMTA5NTQ0LCAxMDk1NDksIDEwOTU1NCwgMTA5NTU4LCAxMDk1NjMsIDEwOTU2NywgCi0gICAgMTA5NTcxLCAxMDk1NzYsIDEwOTU4MywgMTA5NTg4LCAxMDk1OTMsIDEwOTYwMiwgMTA5NjA3LCAxMDk2MTIsIDEwOTYxNywgCi0gICAgMTA5NjIyLCAxMDk2MjksIDEwOTYzNiwgMTA5NjQxLCAxMDk2NDYsIDEwOTY1MSwgMTA5NjU2LCAxMDk2NjMsIDEwOTY2OCwgCi0gICAgMTA5NjczLCAxMDk2NzgsIDEwOTY4MywgMTA5Njg4LCAxMDk2OTMsIDEwOTY5OCwgMTA5NzAzLCAxMDk3MDgsIDEwOTcxMywgCi0gICAgMTA5NzE4LCAxMDk3MjMsIDEwOTczMCwgMTA5NzM0LCAxMDk3MzksIDEwOTc0NCwgMTA5NzQ5LCAxMDk3NTQsIDEwOTc1OCwgCi0gICAgMTA5NzYzLCAxMDk3NjgsIDEwOTc3MywgMTA5Nzc4LCAxMDk3ODMsIDEwOTc4OCwgMTA5NzkzLCAxMDk3OTgsIDEwOTgwMywgCi0gICAgMTA5ODA5LCAxMDk4MTUsIDEwOTgyMSwgMTA5ODI3LCAxMDk4MzMsIDEwOTgzOSwgMTA5ODQ1LCAxMDk4NTEsIDEwOTg1NywgCi0gICAgMTA5ODYzLCAxMDk4NjksIDEwOTg3NSwgMTA5ODgwLCAxMDk4ODYsIDEwOTg5MiwgMTA5ODk4LCAxMDk5MDQsIDEwOTkxMCwgCi0gICAgMTA5OTE2LCAxMDk5MjIsIDEwOTkyOCwgMTA5OTM0LCAxMDk5NDAsIDEwOTk0NiwgMTA5OTUxLCAxMDk5NTcsIDEwOTk2MywgCi0gICAgMTA5OTY5LCAxMDk5NzUsIDEwOTk4MSwgMTA5OTg3LCAxMDk5OTMsIDEwOTk5OSwgMTEwMDA1LCAxMTAwMTEsIDExMDAxNywgCi0gICAgMTEwMDIzLCAxMTAwMjksIDExMDAzNSwgMTEwMDQxLCAxMTAwNDcsIDExMDA1MywgMTEwMDU5LCAxMTAwNjUsIDExMDA3MSwgCi0gICAgMTEwMDc2LCAxMTAwODIsIDExMDA4OCwgMTEwMDk0LCAxMTAxMDAsIDExMDEwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwMTEyLCAxMTAxMTUsIDExMDExOSwgCi0gICAgMTEwMTIzLCAxMTAxMjcsIDExMDEzMCwgMTEwMTM0LCAxMTAxMzksIDExMDE0MywgMTEwMTQ3LCAxMTAxNTEsIDExMDE1NSwgCi0gICAgMTEwMTU5LCAxMTAxNjQsIDExMDE2OSwgMTEwMTczLCAxMTAxNzcsIDExMDE4MCwgMTEwMTg0LCAxMTAxODksIDExMDE5NCwgCi0gICAgMTEwMTk4LCAxMTAyMDIsIDExMDIwNiwgMTEwMjEwLCAxMTAyMTQsIDExMDIxOCwgMTEwMjIyLCAxMTAyMjYsIDExMDIzMCwgCi0gICAgMTEwMjM0LCAxMTAyMzcsIDExMDI0MSwgMTEwMjQ1LCAxMTAyNDksIDExMDI1MywgMTEwMjU3LCAxMTAyNjEsIDExMDI2NywgCi0gICAgMTEwMjcwLCAxMTAyNzQsIDExMDI3OCwgMTEwMjgyLCAxMTAyODYsIDExMDI5MCwgMTEwMjk0LCAxMTAyOTgsIDExMDMwMiwgCi0gICAgMTEwMzA2LCAxMTAzMTEsIDExMDMxNiwgMTEwMzIyLCAxMTAzMjYsIDExMDMzMCwgMTEwMzM0LCAxMTAzMzgsIDExMDM0MiwgCi0gICAgMTEwMzQ2LCAxMTAzNTEsIDExMDM1NCwgMTEwMzU4LCAxMTAzNjIsIDExMDM2NiwgMTEwMzcwLCAxMTAzNzYsIDExMDM4MCwgCi0gICAgMTEwMzg0LCAxMTAzODgsIDExMDM5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwMzk2LCAxMTA0MDAsIAotICAgIDExMDQwNCwgMTEwNDEwLCAxMTA0MTYsIDExMDQyMCwgMTEwNDI1LCAxMTA0MzAsIDExMDQzNSwgMTEwNDQwLCAxMTA0NDQsIAotICAgIDExMDQ0OSwgMTEwNDU0LCAxMTA0NTksIDExMDQ2MywgMTEwNDY4LCAxMTA0NzMsIDExMDQ3OCwgMTEwNDgyLCAxMTA0ODcsIAotICAgIDExMDQ5MiwgMTEwNDk3LCAxMTA1MDIsIDExMDUwNywgMTEwNTEyLCAxMTA1MTcsIDExMDUyMiwgMTEwNTI2LCAxMTA1MzEsIAotICAgIDExMDUzNiwgMTEwNTQxLCAxMTA1NDYsIDExMDU1MSwgMTEwNTU2LCAxMTA1NjEsIDExMDU2NiwgMTEwNTcxLCAxMTA1NzYsIAotICAgIDExMDU4MSwgMTEwNTg4LCAxMTA1OTMsIDExMDYwMCwgMTEwNjA1LCAxMTA2MTAsIDExMDYxNSwgMTEwNjIwLCAxMTA2MjUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDYzMCwgMTEwNjM0LCAxMTA2NDAsIAotICAgIDExMDY0MywgMTEwNjQ2LCAxMTA2NTAsIDExMDY1NCwgMTEwNjU4LCAxMTA2NjIsIDExMDY2NiwgMTEwNjcwLCAxMTA2NzQsIAotICAgIDExMDY4MCwgMTEwNjg2LCAxMTA2OTIsIDExMDY5OCwgMTEwNzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA3MTAsIDExMDcxNSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTEwNzIxLCAxMTA3MjYsIDExMDczMSwgMTEwNzM2LCAxMTA3NDMsIDExMDc1MCwgMTEwNzU3LCAxMTA3NjQsIDExMDc2OSwgCi0gICAgMTEwNzc0LCAxMTA3NzksIDExMDc4NCwgMTEwNzkxLCAxMTA3OTYsIDExMDgwMywgMTEwODEwLCAxMTA4MTUsIDExMDgyMCwgCi0gICAgMTEwODI1LCAxMTA4MzIsIDExMDgzNywgMTEwODQyLCAxMTA4NDksIDExMDg1NiwgMTEwODYxLCAxMTA4NjYsIDExMDg3MSwgCi0gICAgMTEwODc4LCAxMTA4ODUsIDExMDg5MiwgMTEwODk3LCAxMTA5MDIsIDExMDkwOSwgMTEwOTE2LCAxMTA5MjMsIDExMDkzMCwgCi0gICAgMTEwOTM1LCAxMTA5NDAsIDExMDk0NSwgMTEwOTUyLCAxMTA5NTcsIDExMDk2MiwgMTEwOTY3LCAxMTA5NzQsIDExMDk4MywgCi0gICAgMTEwOTkwLCAxMTA5OTUsIDExMTAwMCwgMTExMDA1LCAxMTEwMTAsIDExMTAxNSwgMTExMDIwLCAxMTEwMjksIDExMTAzNiwgCi0gICAgMTExMDQxLCAxMTEwNDgsIDExMTA1NSwgMTExMDYwLCAxMTEwNjUsIDExMTA3MCwgMTExMDc3LCAxMTEwODIsIDExMTA4OSwgCi0gICAgMTExMDk2LCAxMTExMDEsIDExMTEwNiwgMTExMTExLCAxMTExMTgsIDExMTEyNSwgMTExMTMwLCAxMTExMzUsIDExMTE0MiwgCi0gICAgMTExMTQ5LCAxMTExNTYsIDExMTE2MSwgMTExMTY2LCAxMTExNzEsIDExMTE3NiwgMTExMTgzLCAxMTExOTIsIDExMTIwMSwgCi0gICAgMTExMjA2LCAxMTEyMTMsIDExMTIyMiwgMTExMjI3LCAxMTEyMzIsIDExMTIzNywgMTExMjQyLCAxMTEyNDksIDExMTI1NiwgCi0gICAgMTExMjYzLCAxMTEyNzAsIDExMTI3NSwgMTExMjgwLCAxMTEyODUsIDExMTI5MiwgMTExMjk5LCAxMTEzMDYsIDExMTMxMSwgCi0gICAgMTExMzE2LCAxMTEzMjMsIDExMTMyOCwgMTExMzM1LCAxMTEzNDAsIDExMTM0NywgMTExMzUyLCAxMTEzNTksIDExMTM2NiwgCi0gICAgMTExMzcxLCAxMTEzNzYsIDExMTM4MSwgMTExMzg2LCAxMTEzOTEsIDExMTM5NiwgMTExNDAxLCAxMTE0MDYsIDExMTQxMSwgCi0gICAgMTExNDE4LCAxMTE0MjUsIDExMTQzMiwgMTExNDM5LCAxMTE0NDYsIDExMTQ1NSwgMTExNDYwLCAxMTE0NjUsIDExMTQ3MiwgCi0gICAgMTExNDc5LCAxMTE0ODQsIDExMTQ5MSwgMTExNDk4LCAxMTE1MDUsIDExMTUxMiwgMTExNTE5LCAxMTE1MjYsIDExMTUzMSwgCi0gICAgMTExNTM2LCAxMTE1NDEsIDExMTU0NiwgMTExNTUxLCAxMTE1NjAsIDExMTU2OSwgMTExNTc4LCAxMTE1ODcsIDExMTU5NiwgCi0gICAgMTExNjA1LCAxMTE2MTQsIDExMTYyMywgMTExNjI4LCAxMTE2MzksIDExMTY1MCwgMTExNjU5LCAxMTE2NjQsIDExMTY2OSwgCi0gICAgMTExNjc0LCAxMTE2NzksIDExMTY4OCwgMTExNjk1LCAxMTE3MDIsIDExMTcwOSwgMTExNzE2LCAxMTE3MjMsIDExMTczMCwgCi0gICAgMTExNzM5LCAxMTE3NDgsIDExMTc1OSwgMTExNzY4LCAxMTE3NzksIDExMTc4OCwgMTExNzk1LCAxMTE4MDQsIDExMTgxNSwgCi0gICAgMTExODI0LCAxMTE4MzMsIDExMTg0MiwgMTExODUxLCAxMTE4NTgsIDExMTg2NSwgMTExODcyLCAxMTE4ODEsIDExMTg5MCwgCi0gICAgMTExOTAxLCAxMTE5MTAsIDExMTkxOSwgMTExOTMwLCAxMTE5MzUsIDExMTk0MCwgMTExOTUxLCAxMTE5NTksIDExMTk2OCwgCi0gICAgMTExOTc3LCAxMTE5ODYsIDExMTk5NywgMTEyMDA2LCAxMTIwMTUsIDExMjAyNiwgMTEyMDM3LCAxMTIwNDgsIDExMjA1OSwgCi0gICAgMTEyMDcwLCAxMTIwODEsIDExMjA4OCwgMTEyMDk1LCAxMTIxMDIsIDExMjEwOSwgMTEyMTIwLCAxMTIxMjksIDExMjEzNiwgCi0gICAgMTEyMTQzLCAxMTIxNTAsIDExMjE2MSwgMTEyMTcyLCAxMTIxODMsIDExMjE5NCwgMTEyMjA1LCAxMTIyMTYsIDExMjIyNywgCi0gICAgMTEyMjM4LCAxMTIyNDUsIDExMjI1MiwgMTEyMjYxLCAxMTIyNzAsIDExMjI3NywgMTEyMjg0LCAxMTIyOTEsIDExMjMwMCwgCi0gICAgMTEyMzA5LCAxMTIzMTgsIDExMjMyNSwgMTEyMzM0LCAxMTIzNDMsIDExMjM1MiwgMTEyMzU5LCAxMTIzNjYsIDExMjM3MSwgCi0gICAgMTEyMzc3LCAxMTIzODQsIDExMjM5MSwgMTEyMzk4LCAxMTI0MDUsIDExMjQxMiwgMTEyNDE5LCAxMTI0MjgsIDExMjQzNywgCi0gICAgMTEyNDQ2LCAxMTI0NTUsIDExMjQ2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyNDcxLCAxMTI0NzcsIAotICAgIDExMjQ4MiwgMTEyNDg3LCAxMTI0OTQsIDExMjUwMCwgMTEyNTA2LCAxMTI1MTIsIDExMjUxOCwgMTEyNTI0LCAxMTI1MzAsIAotICAgIDExMjUzNiwgMTEyNTQwLCAxMTI1NDQsIDExMjU1MCwgMTEyNTU2LCAxMTI1NjIsIDExMjU2NiwgMTEyNTcxLCAxMTI1NzYsIAotICAgIDExMjU4MCwgMTEyNTg0LCAxMTI1ODcsIDExMjU5MywgMTEyNTk5LCAxMTI2MDUsIDExMjYxMSwgMTEyNjE3LCAxMTI2MjMsIAotICAgIDExMjYyOSwgMTEyNjM1LCAxMTI2NDEsIDExMjY1MSwgMTEyNjYxLCAxMTI2NjcsIDExMjY3MywgMTEyNjgzLCAxMTI2OTMsIAotICAgIDExMjY5OSwgMCwgMCwgMTEyNzA1LCAxMTI3MTMsIDExMjcxOCwgMTEyNzIzLCAxMTI3MjksIDExMjczNSwgMTEyNzQxLCAKLSAgICAxMTI3NDcsIDExMjc1MywgMTEyNzU5LCAxMTI3NjYsIDExMjc3MywgMTEyNzc5LCAxMTI3ODUsIDExMjc5MSwgMTEyNzk3LCAKLSAgICAxMTI4MDMsIDExMjgwOSwgMTEyODE1LCAxMTI4MjEsIDExMjgyNiwgMTEyODMyLCAxMTI4MzgsIDExMjg0NCwgMTEyODUwLCAKLSAgICAxMTI4NTYsIDExMjg2NSwgMTEyODcxLCAxMTI4NzYsIDExMjg4NCwgMTEyODkxLCAxMTI4OTgsIDExMjkwNywgMTEyOTE2LCAKLSAgICAxMTI5MjUsIDExMjkzNCwgMTEyOTQzLCAxMTI5NTIsIDExMjk2MSwgMTEyOTcwLCAxMTI5ODAsIDExMjk5MCwgMTEyOTk4LCAKLSAgICAxMTMwMDYsIDExMzAxNSwgMTEzMDI0LCAxMTMwMzAsIDExMzAzNiwgMTEzMDQyLCAxMTMwNDgsIDExMzA1NiwgMTEzMDY0LCAKLSAgICAxMTMwNjgsIDExMzA3NCwgMTEzMDc5LCAxMTMwODUsIDExMzA5MSwgMTEzMDk3LCAxMTMxMDMsIDExMzEwOSwgMTEzMTE4LCAKLSAgICAxMTMxMjMsIDExMzEzMCwgMTEzMTM1LCAxMTMxNDAsIDExMzE0NSwgMTEzMTUxLCAxMTMxNTcsIDExMzE2MywgMTEzMTcwLCAKLSAgICAxMTMxNzUsIDExMzE4MCwgMTEzMTg1LCAxMTMxOTAsIDExMzE5NSwgMTEzMjAxLCAxMTMyMDcsIDExMzIxMywgMTEzMjE5LCAKLSAgICAxMTMyMjUsIDExMzIzMSwgMTEzMjM3LCAxMTMyNDMsIDExMzI0OCwgMTEzMjUzLCAxMTMyNTgsIDExMzI2MywgMTEzMjY4LCAKLSAgICAxMTMyNzMsIDExMzI3OCwgMTEzMjgzLCAxMTMyODksIDExMzI5NSwgMTEzMzAwLCAxMTMzMDUsIDExMzMxMCwgMTEzMzE1LCAKLSAgICAxMTMzMjAsIDExMzMyNiwgMTEzMzMzLCAxMTMzMzcsIDExMzM0MSwgMTEzMzQ1LCAxMTMzNDksIDExMzM1MywgMTEzMzU3LCAKLSAgICAxMTMzNjEsIDExMzM2NSwgMTEzMzczLCAxMTMzODMsIDExMzM4NywgMTEzMzkxLCAxMTMzOTcsIDExMzQwMywgMTEzNDA5LCAKLSAgICAxMTM0MTUsIDExMzQyMSwgMTEzNDI3LCAxMTM0MzMsIDExMzQzOSwgMTEzNDQ1LCAxMTM0NTEsIDExMzQ1NywgMTEzNDYzLCAKLSAgICAxMTM0NjksIDExMzQ3NSwgMTEzNDc5LCAxMTM0ODMsIDExMzQ5MCwgMTEzNDk2LCAxMTM1MDIsIDExMzUwOCwgMTEzNTEzLCAKLSAgICAxMTM1MjAsIDExMzUyNSwgMTEzNTMxLCAxMTM1MzcsIDExMzU0MywgMTEzNTQ5LCAxMTM1NTQsIDExMzU1OCwgMTEzNTY0LCAKLSAgICAxMTM1NjgsIDExMzU3MiwgMTEzNTc2LCAxMTM1ODIsIDExMzU4OCwgMTEzNTkyLCAxMTM1OTgsIDExMzYwNCwgMTEzNjEwLCAKLSAgICAxMTM2MTYsIDExMzYyMiwgMTEzNjMwLCAxMTM2MzgsIDExMzY0NCwgMTEzNjUwLCAxMTM2NTYsIDExMzY2MiwgMTEzNjc0LCAKLSAgICAxMTM2ODYsIDExMzcwMCwgMTEzNzEyLCAxMTM3MjQsIDExMzczOCwgMTEzNzUyLCAxMTM3NjYsIDExMzc3MCwgMTEzNzc4LCAKLSAgICAxMTM3ODYsIDExMzc5MSwgMTEzNzk1LCAxMTM3OTksIDExMzgwMywgMTEzODA3LCAxMTM4MTEsIDExMzgxNSwgMTEzODE5LCAKLSAgICAxMTM4MjUsIDExMzgzMSwgMTEzODM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTM4NDMsIDExMzg0OSwgCi0gICAgMTEzODU1LCAxMTM4NjEsIDExMzg2NywgMTEzODczLCAxMTM4NzksIDExMzg4NSwgMTEzODkxLCAxMTM4OTcsIDExMzkwMywgCi0gICAgMTEzOTA5LCAxMTM5MTUsIDExMzkyMSwgMTEzOTI3LCAxMTM5MzMsIDExMzkzOSwgMTEzOTQ1LCAxMTM5NTEsIDExMzk1NywgCi0gICAgMTEzOTYzLCAxMTM5NjksIDExMzk3NSwgMTEzOTgxLCAxMTM5ODcsIDExMzk5MywgMTEzOTk5LCAxMTQwMDUsIDExNDAxMSwgCi0gICAgMTE0MDE3LCAxMTQwMjMsIDExNDAyOSwgMTE0MDM1LCAxMTQwNDEsIDExNDA0NywgMTE0MDUzLCAxMTQwNTksIDExNDA2NSwgCi0gICAgMTE0MDcxLCAxMTQwNzcsIDExNDA4MywgMTE0MDg5LCAxMTQwOTUsIDExNDEwMSwgMTE0MTA3LCAxMTQxMTMsIDExNDExOSwgCi0gICAgMTE0MTI1LCAxMTQxMzEsIDExNDEzNywgMTE0MTQzLCAxMTQxNDksIDExNDE1NSwgMTE0MTYxLCAxMTQxNjcsIDExNDE3MywgCi0gICAgMTE0MTc5LCAxMTQxODUsIDExNDE5MSwgMTE0MTk3LCAxMTQyMDMsIDExNDIwOSwgMTE0MjE1LCAxMTQyMjEsIDExNDIyNywgCi0gICAgMTE0MjMzLCAxMTQyMzksIDExNDI0NCwgMTE0MjQ5LCAxMTQyNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNzkyLCA5MTc5OCwgOTE4MDQsIDkxODEwLCA5MTgxNiwgOTE4MjIsIDkxODI5LCAKKyAgICA5MTgzNiwgOTE4NDMsIDkxODQ5LCA5MTg1NSwgOTE4NjEsIDkxODY4LCA5MTg3NSwgOTE4ODIsIDkxODg4LCA5MTg5NSwgCisgICAgOTE5MDIsIDkxOTA5LCA5MTkxNiwgOTE5MjIsIDkxOTI5LCA5MTkzNiwgOTE5NDIsIDkxOTQ5LCA5MTk1NiwgOTE5NjMsIAorICAgIDkxOTcwLCA5MTk3NywgOTE5ODMsIDkxOTkwLCA5MTk5NywgOTIwMDQsIDkyMDEwLCA5MjAxNiwgOTIwMjIsIDkyMDI4LCAKKyAgICA5MjAzNCwgOTIwNDEsIDkyMDQ4LCA5MjA1NCwgOTIwNjAsIDkyMDY2LCA5MjA3MywgOTIwNzksIDkyMDg2LCA5MjA5MywgCisgICAgOTIxMDAsIDkyMTA2LCA5MjExNCwgOTIxMjEsIDkyMTI3LCA5MjEzNCwgOTIxNDEsIDkyMTQ4LCA5MjE1NCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOTIxNjEsIDkyMTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTQyNTgsIDExNDI2MywgMTE0MjcwLCAxMTQyNzcsIDExNDI4NCwgMTE0MjkxLCAxMTQyOTYsIDExNDMwMCwgMTE0MzA2LCAKLSAgICAxMTQzMTAsIDExNDMxNCwgMTE0MzIwLCAxMTQzMjQsIDExNDMyOCwgMTE0MzMyLCAxMTQzMzgsIDExNDM0NSwgMTE0MzQ5LCAKLSAgICAxMTQzNTMsIDExNDM1NywgMTE0MzYxLCAxMTQzNjUsIDExNDM2OSwgMTE0Mzc1LCAxMTQzNzksIDExNDM4MywgMTE0Mzg3LCAKLSAgICAxMTQzOTEsIDExNDM5NSwgMTE0Mzk5LCAxMTQ0MDMsIDExNDQwNywgMTE0NDExLCAxMTQ0MTUsIDExNDQxOSwgMTE0NDIzLCAKLSAgICAxMTQ0MjgsIDExNDQzMiwgMTE0NDM2LCAxMTQ0NDAsIDExNDQ0NCwgMTE0NDQ4LCAxMTQ0NTIsIDExNDQ1NiwgMTE0NDYwLCAKLSAgICAxMTQ0NjQsIDExNDQ3MSwgMTE0NDc1LCAxMTQ0ODMsIDExNDQ4NywgMTE0NDkxLCAxMTQ0OTUsIDExNDQ5OSwgMTE0NTAzLCAKLSAgICAxMTQ1MDcsIDExNDUxMSwgMTE0NTE4LCAxMTQ1MjIsIDExNDUyNiwgMTE0NTMwLCAxMTQ1MzQsIDExNDUzOCwgMTE0NTQ0LCAKLSAgICAxMTQ1NDgsIDExNDU1NCwgMTE0NTU4LCAxMTQ1NjIsIDExNDU2NiwgMTE0NTcwLCAxMTQ1NzQsIDExNDU3OCwgMTE0NTgyLCAKLSAgICAxMTQ1ODYsIDExNDU5MCwgMTE0NTk0LCAxMTQ1OTgsIDExNDYwMiwgMTE0NjA2LCAxMTQ2MTAsIDExNDYxNCwgMTE0NjE4LCAKLSAgICAxMTQ2MjIsIDExNDYyNiwgMTE0NjMwLCAxMTQ2MzgsIDExNDY0MiwgMTE0NjQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMTQ2NTAsIDExNDY1OCwgMTE0NjY2LCAxMTQ2NzQsIDExNDY4MiwgMTE0NjkwLCAxMTQ2OTgsIDExNDcwNiwgCi0gICAgMTE0NzE0LCAxMTQ3MjIsIDExNDczMCwgMTE0NzM4LCAxMTQ3NDYsIDExNDc1NCwgMTE0NzYyLCAxMTQ3NzAsIDExNDc3OCwgCi0gICAgMTE0Nzg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ3OTQsIDExNDc5OCwgMTE0ODAzLCAKLSAgICAxMTQ4MDgsIDExNDgxMywgMTE0ODE3LCAxMTQ4MjIsIDExNDgyNywgMTE0ODMyLCAxMTQ4MzYsIDExNDg0MSwgMTE0ODQ2LCAKLSAgICAxMTQ4NTAsIDExNDg1NCwgMTE0ODU5LCAxMTQ4NjMsIDExNDg2OCwgMTE0ODczLCAxMTQ4NzcsIDExNDg4MiwgMTE0ODg3LCAKLSAgICAxMTQ4OTEsIDExNDg5NiwgMTE0OTAxLCAxMTQ5MDYsIDExNDkxMSwgMTE0OTE2LCAxMTQ5MjAsIDExNDkyNSwgMTE0OTMwLCAKLSAgICAxMTQ5MzUsIDExNDkzOSwgMTE0OTQ0LCAxMTQ5NDksIDExNDk1NCwgMTE0OTU4LCAxMTQ5NjMsIDExNDk2OCwgMTE0OTcyLCAKLSAgICAxMTQ5NzYsIDExNDk4MSwgMTE0OTg1LCAxMTQ5OTAsIDExNDk5NSwgMTE0OTk5LCAxMTUwMDQsIDExNTAwOSwgMTE1MDEzLCAKLSAgICAxMTUwMTgsIDExNTAyMywgMTE1MDI4LCAxMTUwMzMsIDExNTAzOCwgMTE1MDQyLCAxMTUwNDcsIDExNTA1MiwgMTE1MDU3LCAKLSAgICAxMTUwNjEsIDExNTA2NiwgMTE1MDcxLCAxMTUwNzYsIDExNTA4MCwgMTE1MDg1LCAxMTUwOTAsIDExNTA5NCwgMTE1MDk4LCAKLSAgICAxMTUxMDMsIDExNTEwNywgMTE1MTEyLCAxMTUxMTcsIDExNTEyMSwgMTE1MTI2LCAxMTUxMzEsIDExNTEzNSwgMTE1MTQwLCAKLSAgICAxMTUxNDUsIDExNTE1MCwgMTE1MTU1LCAxMTUxNjAsIDExNTE2NCwgMTE1MTY5LCAxMTUxNzQsIDExNTE3OSwgMTE1MTgzLCAKLSAgICAxMTUxODgsIDAsIDExNTE5MywgMTE1MTk3LCAxMTUyMDIsIDExNTIwNywgMTE1MjExLCAxMTUyMTUsIDExNTIyMCwgCi0gICAgMTE1MjI0LCAxMTUyMjksIDExNTIzNCwgMTE1MjM4LCAxMTUyNDMsIDExNTI0OCwgMTE1MjUyLCAxMTUyNTcsIDExNTI2MiwgCi0gICAgMTE1MjY3LCAxMTUyNzIsIDExNTI3NywgMTE1MjgyLCAxMTUyODgsIDExNTI5NCwgMTE1MzAwLCAxMTUzMDUsIDExNTMxMSwgCi0gICAgMTE1MzE3LCAxMTUzMjMsIDExNTMyOCwgMTE1MzM0LCAxMTUzNDAsIDExNTM0NSwgMTE1MzUwLCAxMTUzNTYsIDExNTM2MSwgCi0gICAgMTE1MzY3LCAxMTUzNzMsIDExNTM3OCwgMTE1Mzg0LCAxMTUzOTAsIDExNTM5NSwgMTE1NDAxLCAxMTU0MDcsIDExNTQxMywgCi0gICAgMTE1NDE5LCAxMTU0MjUsIDExNTQzMCwgMTE1NDM2LCAxMTU0NDIsIDExNTQ0OCwgMTE1NDUzLCAxMTU0NTksIDExNTQ2NSwgCi0gICAgMTE1NDcxLCAxMTU0NzYsIDExNTQ4MiwgMTE1NDg4LCAxMTU0OTMsIDExNTQ5OCwgMTE1NTA0LCAxMTU1MDksIDExNTUxNSwgCi0gICAgMTE1NTIxLCAxMTU1MjYsIDExNTUzMiwgMTE1NTM4LCAxMTU1NDMsIDExNTU0OSwgMTE1NTU1LCAxMTU1NjEsIDExNTU2NywgCi0gICAgMTE1NTczLCAwLCAxMTU1NzcsIDExNTU4MiwgMCwgMCwgMTE1NTg3LCAwLCAwLCAxMTU1OTIsIDExNTU5NywgMCwgMCwgCi0gICAgMTE1NjAyLCAxMTU2MDcsIDExNTYxMSwgMTE1NjE2LCAwLCAxMTU2MjEsIDExNTYyNiwgMTE1NjMxLCAxMTU2MzUsIAotICAgIDExNTY0MCwgMTE1NjQ1LCAxMTU2NTAsIDExNTY1NSwgMTE1NjYwLCAxMTU2NjQsIDExNTY2OSwgMTE1Njc0LCAwLCAKLSAgICAxMTU2NzksIDAsIDExNTY4NCwgMTE1Njg5LCAxMTU2OTMsIDExNTY5OCwgMTE1NzAzLCAxMTU3MDcsIDExNTcxMSwgMCwgCi0gICAgMTE1NzE2LCAxMTU3MjEsIDExNTcyNiwgMTE1NzMwLCAxMTU3MzUsIDExNTc0MCwgMTE1NzQ0LCAxMTU3NDksIDExNTc1NCwgCi0gICAgMTE1NzU5LCAxMTU3NjQsIDExNTc2OSwgMTE1Nzc0LCAxMTU3ODAsIDExNTc4NiwgMTE1NzkyLCAxMTU3OTcsIDExNTgwMywgCi0gICAgMTE1ODA5LCAxMTU4MTUsIDExNTgyMCwgMTE1ODI2LCAxMTU4MzIsIDExNTgzNywgMTE1ODQyLCAxMTU4NDgsIDExNTg1MywgCi0gICAgMTE1ODU5LCAxMTU4NjUsIDExNTg3MCwgMTE1ODc2LCAxMTU4ODIsIDExNTg4NywgMTE1ODkzLCAxMTU4OTksIDExNTkwNSwgCi0gICAgMTE1OTExLCAxMTU5MTcsIDExNTkyMiwgMTE1OTI4LCAxMTU5MzQsIDExNTk0MCwgMTE1OTQ1LCAxMTU5NTEsIDExNTk1NywgCi0gICAgMTE1OTYzLCAxMTU5NjgsIDExNTk3NCwgMTE1OTgwLCAxMTU5ODUsIDExNTk5MCwgMTE1OTk2LCAxMTYwMDEsIDExNjAwNywgCi0gICAgMTE2MDEzLCAxMTYwMTgsIDExNjAyNCwgMTE2MDMwLCAxMTYwMzUsIDExNjA0MSwgMTE2MDQ3LCAxMTYwNTMsIDExNjA1OSwgCi0gICAgMTE2MDY1LCAxMTYwNjksIDAsIDExNjA3NCwgMTE2MDc5LCAxMTYwODMsIDExNjA4OCwgMCwgMCwgMTE2MDkzLCAxMTYwOTgsIAotICAgIDExNjEwMywgMTE2MTA3LCAxMTYxMTEsIDExNjExNiwgMTE2MTIwLCAxMTYxMjUsIDAsIDExNjEzMCwgMTE2MTM1LCAKLSAgICAxMTYxNDAsIDExNjE0NCwgMTE2MTQ5LCAxMTYxNTQsIDExNjE1OSwgMCwgMTE2MTY0LCAxMTYxNjgsIDExNjE3MywgCi0gICAgMTE2MTc4LCAxMTYxODMsIDExNjE4NywgMTE2MTkyLCAxMTYxOTcsIDExNjIwMiwgMTE2MjA2LCAxMTYyMTEsIDExNjIxNiwgCi0gICAgMTE2MjIwLCAxMTYyMjQsIDExNjIyOSwgMTE2MjMzLCAxMTYyMzgsIDExNjI0MywgMTE2MjQ3LCAxMTYyNTIsIDExNjI1NywgCi0gICAgMTE2MjYxLCAxMTYyNjYsIDExNjI3MSwgMTE2Mjc2LCAxMTYyODEsIDExNjI4NiwgMTE2MjkwLCAwLCAxMTYyOTUsIAotICAgIDExNjMwMCwgMTE2MzA0LCAxMTYzMDksIDAsIDExNjMxNCwgMTE2MzE4LCAxMTYzMjMsIDExNjMyOCwgMTE2MzMyLCAwLCAKLSAgICAxMTYzMzYsIDAsIDAsIDAsIDExNjM0MCwgMTE2MzQ1LCAxMTYzNTAsIDExNjM1NCwgMTE2MzU5LCAxMTYzNjQsIDExNjM2OSwgCi0gICAgMCwgMTE2Mzc0LCAxMTYzNzgsIDExNjM4MywgMTE2Mzg4LCAxMTYzOTMsIDExNjM5NywgMTE2NDAyLCAxMTY0MDcsIAotICAgIDExNjQxMiwgMTE2NDE2LCAxMTY0MjEsIDExNjQyNiwgMTE2NDMwLCAxMTY0MzQsIDExNjQzOSwgMTE2NDQzLCAxMTY0NDgsIAotICAgIDExNjQ1MywgMTE2NDU3LCAxMTY0NjIsIDExNjQ2NywgMTE2NDcxLCAxMTY0NzYsIDExNjQ4MSwgMTE2NDg2LCAxMTY0OTEsIAotICAgIDExNjQ5NiwgMTE2NTAxLCAxMTY1MDcsIDExNjUxMywgMTE2NTE5LCAxMTY1MjQsIDExNjUzMCwgMTE2NTM2LCAxMTY1NDIsIAotICAgIDExNjU0NywgMTE2NTUzLCAxMTY1NTksIDExNjU2NCwgMTE2NTY5LCAxMTY1NzUsIDExNjU4MCwgMTE2NTg2LCAxMTY1OTIsIAotICAgIDExNjU5NywgMTE2NjAzLCAxMTY2MDksIDExNjYxNCwgMTE2NjIwLCAxMTY2MjYsIDExNjYzMiwgMTE2NjM4LCAxMTY2NDQsIAotICAgIDExNjY0OSwgMTE2NjU1LCAxMTY2NjEsIDExNjY2NywgMTE2NjcyLCAxMTY2NzgsIDExNjY4NCwgMTE2NjkwLCAxMTY2OTUsIAotICAgIDExNjcwMSwgMTE2NzA3LCAxMTY3MTIsIDExNjcxNywgMTE2NzIzLCAxMTY3MjgsIDExNjczNCwgMTE2NzQwLCAxMTY3NDUsIAotICAgIDExNjc1MSwgMTE2NzU3LCAxMTY3NjIsIDExNjc2OCwgMTE2Nzc0LCAxMTY3ODAsIDExNjc4NiwgMTE2NzkyLCAxMTY3OTYsIAotICAgIDExNjgwMSwgMTE2ODA2LCAxMTY4MTEsIDExNjgxNSwgMTE2ODIwLCAxMTY4MjUsIDExNjgzMCwgMTE2ODM0LCAxMTY4MzksIAotICAgIDExNjg0NCwgMTE2ODQ4LCAxMTY4NTIsIDExNjg1NywgMTE2ODYxLCAxMTY4NjYsIDExNjg3MSwgMTE2ODc1LCAxMTY4ODAsIAotICAgIDExNjg4NSwgMTE2ODg5LCAxMTY4OTQsIDExNjg5OSwgMTE2OTA0LCAxMTY5MDksIDExNjkxNCwgMTE2OTE4LCAxMTY5MjMsIAotICAgIDExNjkyOCwgMTE2OTMzLCAxMTY5MzcsIDExNjk0MiwgMTE2OTQ3LCAxMTY5NTIsIDExNjk1NiwgMTE2OTYxLCAxMTY5NjYsIAotICAgIDExNjk3MCwgMTE2OTc0LCAxMTY5NzksIDExNjk4MywgMTE2OTg4LCAxMTY5OTMsIDExNjk5NywgMTE3MDAyLCAxMTcwMDcsIAotICAgIDExNzAxMSwgMTE3MDE2LCAxMTcwMjEsIDExNzAyNiwgMTE3MDMxLCAxMTcwMzYsIDExNzA0MSwgMTE3MDQ3LCAxMTcwNTMsIAotICAgIDExNzA1OSwgMTE3MDY0LCAxMTcwNzAsIDExNzA3NiwgMTE3MDgyLCAxMTcwODcsIDExNzA5MywgMTE3MDk5LCAxMTcxMDQsIAotICAgIDExNzEwOSwgMTE3MTE1LCAxMTcxMjAsIDExNzEyNiwgMTE3MTMyLCAxMTcxMzcsIDExNzE0MywgMTE3MTQ5LCAxMTcxNTQsIAotICAgIDExNzE2MCwgMTE3MTY2LCAxMTcxNzIsIDExNzE3OCwgMTE3MTg0LCAxMTcxODksIDExNzE5NSwgMTE3MjAxLCAxMTcyMDcsIAotICAgIDExNzIxMiwgMTE3MjE4LCAxMTcyMjQsIDExNzIzMCwgMTE3MjM1LCAxMTcyNDEsIDExNzI0NywgMTE3MjUyLCAxMTcyNTcsIAotICAgIDExNzI2MywgMTE3MjY4LCAxMTcyNzQsIDExNzI4MCwgMTE3Mjg1LCAxMTcyOTEsIDExNzI5NywgMTE3MzAyLCAxMTczMDgsIAotICAgIDExNzMxNCwgMTE3MzIwLCAxMTczMjYsIDExNzMzMiwgMTE3MzM3LCAxMTczNDMsIDExNzM0OSwgMTE3MzU1LCAxMTczNjAsIAotICAgIDExNzM2NiwgMTE3MzcyLCAxMTczNzgsIDExNzM4MywgMTE3Mzg5LCAxMTczOTUsIDExNzQwMCwgMTE3NDA1LCAxMTc0MTEsIAotICAgIDExNzQxNiwgMTE3NDIyLCAxMTc0MjgsIDExNzQzMywgMTE3NDM5LCAxMTc0NDUsIDExNzQ1MCwgMTE3NDU2LCAxMTc0NjIsIAotICAgIDExNzQ2OCwgMTE3NDc0LCAxMTc0ODAsIDExNzQ4NSwgMTE3NDkxLCAxMTc0OTcsIDExNzUwMywgMTE3NTA4LCAxMTc1MTQsIAotICAgIDExNzUyMCwgMTE3NTI2LCAxMTc1MzEsIDExNzUzNywgMTE3NTQzLCAxMTc1NDgsIDExNzU1MywgMTE3NTU5LCAxMTc1NjQsIAotICAgIDExNzU3MCwgMTE3NTc2LCAxMTc1ODEsIDExNzU4NywgMTE3NTkzLCAxMTc1OTgsIDExNzYwNCwgMTE3NjEwLCAxMTc2MTYsIAotICAgIDExNzYyMiwgMTE3NjI4LCAxMTc2MzQsIDExNzY0MSwgMTE3NjQ4LCAxMTc2NTUsIDExNzY2MSwgMTE3NjY4LCAxMTc2NzUsIAotICAgIDExNzY4MiwgMTE3Njg4LCAxMTc2OTUsIDExNzcwMiwgMTE3NzA4LCAxMTc3MTQsIDExNzcyMSwgMTE3NzI3LCAxMTc3MzQsIAotICAgIDExNzc0MSwgMTE3NzQ3LCAxMTc3NTQsIDExNzc2MSwgMTE3NzY3LCAxMTc3NzQsIDExNzc4MSwgMTE3Nzg4LCAxMTc3OTUsIAotICAgIDExNzgwMiwgMTE3ODA4LCAxMTc4MTUsIDExNzgyMiwgMTE3ODI5LCAxMTc4MzUsIDExNzg0MiwgMTE3ODQ5LCAxMTc4NTYsIAotICAgIDExNzg2MiwgMTE3ODY5LCAxMTc4NzYsIDExNzg4MiwgMTE3ODg4LCAxMTc4OTUsIDExNzkwMSwgMTE3OTA4LCAxMTc5MTUsIAotICAgIDExNzkyMSwgMTE3OTI4LCAxMTc5MzUsIDExNzk0MSwgMTE3OTQ4LCAxMTc5NTUsIDExNzk2MiwgMTE3OTY5LCAxMTc5NzYsIAotICAgIDExNzk4MSwgMTE3OTg3LCAxMTc5OTMsIDExNzk5OSwgMTE4MDA0LCAxMTgwMTAsIDExODAxNiwgMTE4MDIyLCAxMTgwMjcsIAotICAgIDExODAzMywgMTE4MDM5LCAxMTgwNDQsIDExODA0OSwgMTE4MDU1LCAxMTgwNjAsIDExODA2NiwgMTE4MDcyLCAxMTgwNzcsIAotICAgIDExODA4MywgMTE4MDg5LCAxMTgwOTQsIDExODEwMCwgMTE4MTA2LCAxMTgxMTIsIDExODExOCwgMTE4MTI0LCAxMTgxMjksIAotICAgIDExODEzNSwgMTE4MTQxLCAxMTgxNDcsIDExODE1MiwgMTE4MTU4LCAxMTgxNjQsIDExODE3MCwgMTE4MTc1LCAxMTgxODEsIAotICAgIDExODE4NywgMTE4MTkyLCAxMTgxOTcsIDExODIwMywgMTE4MjA4LCAxMTgyMTQsIDExODIyMCwgMTE4MjI1LCAxMTgyMzEsIAotICAgIDExODIzNywgMTE4MjQyLCAxMTgyNDgsIDExODI1NCwgMTE4MjYwLCAxMTgyNjYsIDExODI3MiwgMTE4Mjc4LCAwLCAwLCAKLSAgICAxMTgyODUsIDExODI5MCwgMTE4Mjk1LCAxMTgzMDAsIDExODMwNSwgMTE4MzEwLCAxMTgzMTUsIDExODMyMCwgMTE4MzI1LCAKLSAgICAxMTgzMzAsIDExODMzNSwgMTE4MzQwLCAxMTgzNDUsIDExODM1MCwgMTE4MzU1LCAxMTgzNjAsIDExODM2NSwgMTE4MzcwLCAKLSAgICAxMTgzNzYsIDExODM4MSwgMTE4Mzg2LCAxMTgzOTEsIDExODM5NiwgMTE4NDAxLCAxMTg0MDYsIDExODQxMSwgMTE4NDE1LCAKLSAgICAxMTg0MjAsIDExODQyNSwgMTE4NDMwLCAxMTg0MzUsIDExODQ0MCwgMTE4NDQ1LCAxMTg0NTAsIDExODQ1NSwgMTE4NDYwLCAKLSAgICAxMTg0NjUsIDExODQ3MCwgMTE4NDc1LCAxMTg0ODAsIDExODQ4NSwgMTE4NDkwLCAxMTg0OTUsIDExODUwMCwgMTE4NTA2LCAKLSAgICAxMTg1MTEsIDExODUxNiwgMTE4NTIxLCAxMTg1MjYsIDExODUzMSwgMTE4NTM2LCAxMTg1NDEsIDExODU0NywgMTE4NTUyLCAKLSAgICAxMTg1NTcsIDExODU2MiwgMTE4NTY3LCAxMTg1NzIsIDExODU3NywgMTE4NTgyLCAxMTg1ODcsIDExODU5MiwgMTE4NTk3LCAKLSAgICAxMTg2MDIsIDExODYwNywgMTE4NjEyLCAxMTg2MTcsIDExODYyMiwgMTE4NjI3LCAxMTg2MzIsIDExODYzNywgMTE4NjQyLCAKLSAgICAxMTg2NDcsIDExODY1MiwgMTE4NjU3LCAxMTg2NjIsIDExODY2OCwgMTE4NjczLCAxMTg2NzgsIDExODY4MywgMTE4Njg4LCAKLSAgICAxMTg2OTMsIDExODY5OCwgMTE4NzAzLCAxMTg3MDcsIDExODcxMiwgMTE4NzE3LCAxMTg3MjIsIDExODcyNywgMTE4NzMyLCAKLSAgICAxMTg3MzcsIDExODc0MiwgMTE4NzQ3LCAxMTg3NTIsIDExODc1NywgMTE4NzYyLCAxMTg3NjcsIDExODc3MiwgMTE4Nzc3LCAKLSAgICAxMTg3ODIsIDExODc4NywgMTE4NzkyLCAxMTg3OTgsIDExODgwMywgMTE4ODA4LCAxMTg4MTMsIDExODgxOCwgMTE4ODIzLCAKLSAgICAxMTg4MjgsIDExODgzMywgMTE4ODM5LCAxMTg4NDQsIDExODg0OSwgMTE4ODU0LCAxMTg4NTksIDExODg2NCwgMTE4ODY5LCAKLSAgICAxMTg4NzUsIDExODg4MSwgMTE4ODg3LCAxMTg4OTMsIDExODg5OSwgMTE4OTA1LCAxMTg5MTEsIDExODkxNywgMTE4OTIzLCAKLSAgICAxMTg5MjksIDExODkzNSwgMTE4OTQxLCAxMTg5NDcsIDExODk1MywgMTE4OTU5LCAxMTg5NjUsIDExODk3MSwgMTE4OTc4LCAKLSAgICAxMTg5ODQsIDExODk5MCwgMTE4OTk2LCAxMTkwMDIsIDExOTAwOCwgMTE5MDE0LCAxMTkwMjAsIDExOTAyNSwgMTE5MDMxLCAKLSAgICAxMTkwMzcsIDExOTA0MywgMTE5MDQ5LCAxMTkwNTUsIDExOTA2MSwgMTE5MDY3LCAxMTkwNzMsIDExOTA3OSwgMTE5MDg1LCAKLSAgICAxMTkwOTEsIDExOTA5NywgMTE5MTAzLCAxMTkxMDksIDExOTExNSwgMTE5MTIxLCAxMTkxMjcsIDExOTEzNCwgMTE5MTQwLCAKLSAgICAxMTkxNDYsIDExOTE1MiwgMTE5MTU4LCAxMTkxNjQsIDExOTE3MCwgMTE5MTc2LCAxMTkxODMsIDExOTE4OSwgMTE5MTk1LCAKLSAgICAxMTkyMDEsIDExOTIwNywgMTE5MjEzLCAxMTkyMTksIDExOTIyNSwgMTE5MjMxLCAxMTkyMzcsIDExOTI0MywgMTE5MjQ5LCAKLSAgICAxMTkyNTUsIDExOTI2MSwgMTE5MjY3LCAxMTkyNzMsIDExOTI3OSwgMTE5Mjg1LCAxMTkyOTEsIDExOTI5NywgMTE5MzAzLCAKLSAgICAxMTkzMDksIDExOTMxNSwgMTE5MzIxLCAxMTkzMjgsIDExOTMzNCwgMTE5MzQwLCAxMTkzNDYsIDExOTM1MiwgMTE5MzU4LCAKLSAgICAxMTkzNjQsIDExOTM3MCwgMTE5Mzc1LCAxMTkzODEsIDExOTM4NywgMTE5MzkzLCAxMTkzOTksIDExOTQwNSwgMTE5NDExLCAKLSAgICAxMTk0MTcsIDExOTQyMywgMTE5NDI5LCAxMTk0MzUsIDExOTQ0MSwgMTE5NDQ3LCAxMTk0NTMsIDExOTQ1OSwgMTE5NDY1LCAKLSAgICAxMTk0NzEsIDExOTQ3NywgMTE5NDg0LCAxMTk0OTAsIDExOTQ5NiwgMTE5NTAyLCAxMTk1MDgsIDExOTUxNCwgMTE5NTIwLCAKLSAgICAxMTk1MjYsIDExOTUzMywgMTE5NTM5LCAxMTk1NDUsIDExOTU1MSwgMTE5NTU3LCAxMTk1NjMsIDExOTU2OSwgMTE5NTc2LCAKLSAgICAxMTk1ODMsIDExOTU5MCwgMTE5NTk3LCAxMTk2MDQsIDExOTYxMSwgMTE5NjE4LCAxMTk2MjUsIDExOTYzMiwgMTE5NjM5LCAKLSAgICAxMTk2NDYsIDExOTY1MywgMTE5NjYwLCAxMTk2NjcsIDExOTY3NCwgMTE5NjgxLCAxMTk2ODgsIDExOTY5NiwgMTE5NzAzLCAKLSAgICAxMTk3MTAsIDExOTcxNywgMTE5NzI0LCAxMTk3MzEsIDExOTczOCwgMTE5NzQ1LCAxMTk3NTEsIDExOTc1OCwgMTE5NzY1LCAKLSAgICAxMTk3NzIsIDExOTc3OSwgMTE5Nzg2LCAxMTk3OTMsIDExOTgwMCwgMTE5ODA3LCAxMTk4MTQsIDExOTgyMSwgMTE5ODI4LCAKLSAgICAxMTk4MzUsIDExOTg0MiwgMTE5ODQ5LCAxMTk4NTYsIDExOTg2MywgMTE5ODcwLCAxMTk4NzgsIDExOTg4NSwgMTE5ODkyLCAKLSAgICAxMTk4OTksIDExOTkwNiwgMTE5OTEzLCAxMTk5MjAsIDExOTkyNywgMTE5OTM1LCAxMTk5NDIsIDExOTk0OSwgMTE5OTU2LCAKLSAgICAxMTk5NjMsIDExOTk3MCwgMTE5OTc3LCAxMTk5ODIsIDAsIDAsIDExOTk4NywgMTE5OTkyLCAxMTk5OTYsIDEyMDAwMCwgCi0gICAgMTIwMDA0LCAxMjAwMDgsIDEyMDAxMiwgMTIwMDE2LCAxMjAwMjAsIDEyMDAyNCwgMTIwMDI4LCAxMjAwMzMsIDEyMDAzNywgCi0gICAgMTIwMDQxLCAxMjAwNDUsIDEyMDA0OSwgMTIwMDUzLCAxMjAwNTcsIDEyMDA2MSwgMTIwMDY1LCAxMjAwNjksIDEyMDA3NCwgCi0gICAgMTIwMDc4LCAxMjAwODIsIDEyMDA4NiwgMTIwMDkwLCAxMjAwOTQsIDEyMDA5OCwgMTIwMTAyLCAxMjAxMDYsIDEyMDExMCwgCi0gICAgMTIwMTE2LCAxMjAxMjEsIDEyMDEyNiwgMTIwMTMxLCAxMjAxMzYsIDEyMDE0MSwgMTIwMTQ2LCAxMjAxNTEsIDEyMDE1NiwgCi0gICAgMTIwMTYxLCAxMjAxNjcsIDEyMDE3MiwgMTIwMTc3LCAxMjAxODIsIDEyMDE4NywgMTIwMTkyLCAxMjAxOTcsIDEyMDIwMiwgCi0gICAgMTIwMjA3LCAxMjAyMTIsIDEyMDIxNiwgMTIwMjIwLCAxMjAyMjQsIDAsIDEyMDIyOCwgMTIwMjMyLCAxMjAyMzYsIAotICAgIDEyMDI0MCwgMTIwMjQ0LCAxMjAyNDgsIDEyMDI1MiwgMTIwMjU2LCAxMjAyNjAsIDEyMDI2NCwgMTIwMjY4LCAxMjAyNzIsIAorICAgIDkyMTc3LCA5MjE4MSwgOTIxODYsIDkyMTkxLCAwLCA5MjE5NywgOTIyMDIsIDAsIDAsIDAsIDAsIDAsIDkyMjA3LCA5MjIxMywgCisgICAgOTIyMjAsIDkyMjI1LCA5MjIzMCwgOTIyMzQsIDkyMjM5LCA5MjI0NCwgMCwgOTIyNDksIDkyMjU0LCA5MjI1OSwgMCwgCisgICAgOTIyNjQsIDkyMjY5LCA5MjI3NCwgOTIyNzksIDkyMjg0LCA5MjI4OSwgOTIyOTQsIDkyMjk5LCA5MjMwNCwgOTIzMDksIAorICAgIDkyMzE0LCA5MjMxOCwgOTIzMjIsIDkyMzI3LCA5MjMzMiwgOTIzMzcsIDkyMzQxLCA5MjM0NSwgOTIzNDksIDkyMzU0LCAKKyAgICA5MjM1OSwgOTIzNjQsIDkyMzY5LCA5MjM3MywgOTIzNzgsIDkyMzgyLCA5MjM4NywgMCwgMCwgMCwgMCwgOTIzOTIsIAorICAgIDkyMzk4LCA5MjQwMywgMCwgMCwgMCwgMCwgOTI0MDgsIDkyNDEyLCA5MjQxNiwgOTI0MjAsIDkyNDI0LCA5MjQyOCwgCisgICAgOTI0MzMsIDkyNDM4LCA5MjQ0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTI0NTAsIDkyNDU2LCA5MjQ2MywgOTI0NjksIAorICAgIDkyNDc2LCA5MjQ4MiwgOTI0ODgsIDkyNDk0LCA5MjUwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTI1MDcsIDkyNTE1LCAKKyAgICA5MjUyMywgOTI1MzEsIDkyNTM5LCA5MjU0NywgOTI1NTUsIDkyNTYzLCA5MjU3MSwgOTI1NzksIDkyNTg3LCA5MjU5NSwgCisgICAgOTI2MDMsIDkyNjExLCA5MjYxOSwgOTI2MjcsIDkyNjM1LCA5MjY0MywgOTI2NTEsIDkyNjU5LCA5MjY2NywgOTI2NzUsIAorICAgIDkyNjgzLCA5MjY5MSwgOTI2OTksIDkyNzA3LCA5MjcxNSwgOTI3MjMsIDkyNzMxLCA5MjczOSwgOTI3NDYsIDkyNzU0LCAKKyAgICA5Mjc2MiwgOTI3NjYsIDkyNzcxLCA5Mjc3NiwgOTI3ODEsIDkyNzg2LCA5Mjc5MSwgOTI3OTYsIDkyODAxLCA5MjgwNSwgCisgICAgOTI4MTAsIDkyODE0LCA5MjgxOSwgOTI4MjMsIDkyODI4LCA5MjgzMiwgOTI4MzcsIDkyODQyLCA5Mjg0NywgOTI4NTIsIAorICAgIDkyODU3LCA5Mjg2MiwgOTI4NjcsIDkyODcyLCA5Mjg3NywgOTI4ODIsIDkyODg3LCA5Mjg5MiwgOTI4OTcsIDkyOTAyLCAKKyAgICA5MjkwNywgOTI5MTIsIDkyOTE3LCA5MjkyMiwgOTI5MjcsIDkyOTMyLCA5MjkzNywgOTI5NDIsIDkyOTQ3LCA5Mjk1MiwgCisgICAgOTI5NTcsIDkyOTYyLCA5Mjk2NywgOTI5NzIsIDkyOTc3LCA5Mjk4MiwgOTI5ODcsIDkyOTkyLCA5Mjk5NywgOTMwMDIsIAorICAgIDkzMDA3LCA5MzAxMiwgOTMwMTcsIDkzMDIyLCAwLCAwLCAwLCA5MzAyNywgOTMwMzIsIDkzMDQxLCA5MzA0OSwgOTMwNTgsIAorICAgIDkzMDY3LCA5MzA3OCwgOTMwODksIDkzMDk2LCA5MzEwMywgOTMxMTAsIDkzMTE3LCA5MzEyNCwgOTMxMzEsIDkzMTM4LCAKKyAgICA5MzE0NSwgOTMxNTIsIDkzMTU5LCA5MzE2NiwgOTMxNzMsIDkzMTgwLCA5MzE4NywgOTMxOTQsIDkzMjAxLCA5MzIwOCwgCisgICAgOTMyMTUsIDkzMjIyLCA5MzIyOSwgOTMyMzYsIDAsIDAsIDkzMjQzLCA5MzI0OSwgOTMyNTUsIDkzMjYxLCA5MzI2NywgCisgICAgOTMyNzQsIDkzMjgxLCA5MzI4OSwgOTMyOTcsIDkzMzA0LCA5MzMxMSwgOTMzMTgsIDkzMzI1LCA5MzMzMiwgOTMzMzksIAorICAgIDkzMzQ2LCA5MzM1MywgOTMzNjAsIDkzMzY3LCA5MzM3NCwgOTMzODEsIDkzMzg4LCA5MzM5NSwgOTM0MDIsIDkzNDA5LCAKKyAgICA5MzQxNiwgOTM0MjMsIDAsIDAsIDAsIDAsIDAsIDkzNDMwLCA5MzQzNiwgOTM0NDIsIDkzNDQ4LCA5MzQ1NCwgOTM0NjEsIAorICAgIDkzNDY4LCA5MzQ3NiwgOTM0ODQsIDkzNDkwLCA5MzQ5NiwgOTM1MDMsIDkzNTA5LCA5MzUxNSwgOTM1MjEsIDkzNTI3LCAKKyAgICA5MzUzNCwgOTM1NDEsIDkzNTQ4LCA5MzU1NSwgOTM1NjIsIDkzNTY5LCA5MzU3NiwgOTM1ODMsIDkzNTkwLCA5MzU5NywgCisgICAgOTM2MDQsIDkzNjExLCA5MzYxOCwgOTM2MjUsIDkzNjMyLCA5MzYzOSwgOTM2NDYsIDkzNjUzLCA5MzY2MCwgOTM2NjcsIAorICAgIDkzNjc0LCA5MzY4MSwgOTM2ODgsIDkzNjk1LCA5MzcwMiwgOTM3MDksIDkzNzE2LCA5MzcyMywgOTM3MzAsIDkzNzM3LCAKKyAgICA5Mzc0NCwgOTM3NTEsIDkzNzU4LCA5Mzc2NSwgOTM3NzIsIDkzNzc5LCA5Mzc4NiwgOTM3OTMsIDkzODAwLCA5MzgwNywgCisgICAgOTM4MTQsIDkzODIxLCA5MzgyOCwgOTM4MzUsIDkzODQyLCA5Mzg0OSwgOTM4NTYsIDkzODYzLCA5Mzg3MCwgOTM4NzcsIAorICAgIDkzODg0LCA5Mzg5MSwgOTM4OTgsIDkzOTA1LCA5MzkxMiwgOTM5MTksIDkzOTI2LCA5MzkzMywgOTM5NDAsIDkzOTQ3LCAKKyAgICA5Mzk1NCwgOTM5NjEsIDkzOTY4LCA5Mzk3NSwgOTM5ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkzOTg5LCA5Mzk5MywgCisgICAgOTM5OTcsIDk0MDAxLCA5NDAwNSwgOTQwMDksIDk0MDEzLCA5NDAxNywgOTQwMjEsIDk0MDI1LCA5NDAzMCwgOTQwMzUsIAorICAgIDk0MDQwLCA5NDA0NSwgOTQwNTAsIDk0MDU1LCA5NDA2MCwgOTQwNjUsIDk0MDcwLCA5NDA3NiwgOTQwODIsIDk0MDg4LCAKKyAgICA5NDA5NSwgOTQxMDIsIDk0MTA5LCA5NDExNiwgOTQxMjMsIDk0MTMwLCA5NDEzNywgOTQxNDQsIDk0MTUxLCAwLCA5NDE1OCwgCisgICAgOTQxNjIsIDk0MTY2LCA5NDE3MCwgOTQxNzQsIDk0MTc4LCA5NDE4MSwgOTQxODUsIDk0MTg4LCA5NDE5MiwgOTQxOTUsIAorICAgIDk0MTk5LCA5NDIwMywgOTQyMDgsIDk0MjEyLCA5NDIxNywgOTQyMjAsIDk0MjI0LCA5NDIyNywgOTQyMzEsIDk0MjM0LCAKKyAgICA5NDIzOCwgOTQyNDIsIDk0MjQ2LCA5NDI1MCwgOTQyNTQsIDk0MjU4LCA5NDI2MiwgOTQyNjYsIDk0MjcwLCA5NDI3NCwgCisgICAgOTQyNzgsIDk0MjgyLCA5NDI4NiwgOTQyOTAsIDk0Mjk0LCA5NDI5OCwgOTQzMDIsIDk0MzA2LCA5NDMwOSwgOTQzMTIsIAorICAgIDk0MzE2LCA5NDMyMCwgOTQzMjQsIDk0MzI3LCA5NDMzMCwgOTQzMzMsIDk0MzM3LCA5NDM0MSwgOTQzNDUsIDk0MzQ5LCAKKyAgICA5NDM1MiwgOTQzNTUsIDk0MzU5LCA5NDM2NSwgOTQzNzEsIDk0Mzc3LCA5NDM4MiwgOTQzODksIDk0MzkzLCA5NDM5OCwgCisgICAgOTQ0MDIsIDk0NDA3LCA5NDQxMiwgOTQ0MTgsIDk0NDIzLCA5NDQyOSwgOTQ0MzMsIDk0NDM4LCA5NDQ0MiwgOTQ0NDcsIAorICAgIDk0NDUwLCA5NDQ1MywgOTQ0NTcsIDk0NDYyLCA5NDQ2OCwgOTQ0NzMsIDk0NDc5LCAwLCAwLCAwLCAwLCA5NDQ4NCwgCisgICAgOTQ0ODcsIDk0NDkwLCA5NDQ5MywgOTQ0OTYsIDk0NDk5LCA5NDUwMiwgOTQ1MDUsIDk0NTA4LCA5NDUxMSwgOTQ1MTUsIAorICAgIDk0NTE5LCA5NDUyMywgOTQ1MjcsIDk0NTMxLCA5NDUzNSwgOTQ1MzksIDk0NTQzLCA5NDU0NywgOTQ1NTIsIDk0NTU3LCAKKyAgICA5NDU2MSwgOTQ1NjQsIDk0NTY3LCA5NDU3MCwgOTQ1NzMsIDk0NTc2LCA5NDU3OSwgOTQ1ODIsIDk0NTg1LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDU4OCwgOTQ1OTMsIDk0NTk4LCA5NDYwMywgOTQ2MDcsIAorICAgIDk0NjEyLCA5NDYxNiwgOTQ2MjEsIDk0NjI1LCA5NDYzMCwgOTQ2MzQsIDk0NjM5LCA5NDY0MywgOTQ2NDgsIDk0NjUyLCAKKyAgICA5NDY1NywgOTQ2NjIsIDk0NjY3LCA5NDY3MiwgOTQ2NzcsIDk0NjgyLCA5NDY4NywgOTQ2OTIsIDk0Njk3LCA5NDcwMiwgCisgICAgOTQ3MDcsIDk0NzEyLCA5NDcxNywgOTQ3MjIsIDk0NzI3LCA5NDczMiwgOTQ3MzcsIDk0NzQyLCA5NDc0NywgOTQ3NTIsIAorICAgIDk0NzU2LCA5NDc2MCwgOTQ3NjUsIDk0NzcwLCA5NDc3NSwgOTQ3NzksIDk0NzgzLCA5NDc4NywgOTQ3OTIsIDk0Nzk3LCAKKyAgICA5NDgwMiwgOTQ4MDcsIDk0ODExLCA5NDgxNSwgOTQ4MjEsIDk0ODI2LCA5NDgzMiwgOTQ4MzcsIDk0ODQzLCA5NDg0OCwgCisgICAgOTQ4NTQsIDk0ODU5LCA5NDg2NSwgOTQ4NzAsIDk0ODc1LCA5NDg4MCwgOTQ4ODUsIDk0ODg5LCA5NDg5NCwgOTQ5MDAsIAorICAgIDk0OTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDkwOSwgOTQ5MTYsIDk0OTIzLCAKKyAgICA5NDkzMCwgOTQ5MzcsIDk0OTQ0LCA5NDk1MSwgOTQ5NTgsIDk0OTY1LCA5NDk3MiwgOTQ5NzksIDk0OTg2LCA5NDk5MywgCisgICAgOTUwMDAsIDk1MDA3LCA5NTAxNCwgOTUwMjEsIDk1MDI4LCA5NTAzNSwgOTUwNDIsIDk1MDQ5LCA5NTA1NiwgOTUwNjMsIAorICAgIDk1MDcwLCA5NTA3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTUwODQsIDk1MDkxLCA5NTA5NywgOTUxMDMsIDk1MTA5LCAKKyAgICA5NTExNSwgOTUxMjEsIDk1MTI3LCA5NTEzMywgOTUxMzksIDAsIDAsIDAsIDAsIDAsIDAsIDk1MTQ1LCA5NTE1MCwgOTUxNTUsIAorICAgIDk1MTYwLCA5NTE2NSwgOTUxNjksIDk1MTczLCA5NTE3NywgOTUxODIsIDk1MTg3LCA5NTE5MiwgOTUxOTcsIDk1MjAyLCAKKyAgICA5NTIwNywgOTUyMTIsIDk1MjE3LCA5NTIyMiwgOTUyMjcsIDk1MjMyLCA5NTIzNywgOTUyNDIsIDk1MjQ3LCA5NTI1MiwgCisgICAgOTUyNTcsIDk1MjYyLCA5NTI2NywgOTUyNzIsIDk1Mjc3LCA5NTI4MiwgOTUyODcsIDk1MjkyLCA5NTI5NywgOTUzMDIsIAorICAgIDk1MzA3LCA5NTMxMiwgOTUzMTcsIDk1MzIyLCA5NTMyNywgOTUzMzIsIDk1MzM3LCA5NTM0MiwgOTUzNDcsIDk1MzUzLCAKKyAgICA5NTM1OCwgOTUzNjQsIDk1MzY5LCA5NTM3NSwgOTUzODAsIDk1Mzg2LCA5NTM5MiwgOTUzOTYsIDk1NDAxLCA5NTQwNSwgMCwgCisgICAgOTU0MDksIDk1NDE0LCA5NTQxOCwgOTU0MjIsIDk1NDI2LCA5NTQzMCwgOTU0MzQsIDk1NDM4LCA5NTQ0MiwgOTU0NDYsIAorICAgIDk1NDUwLCA5NTQ1NSwgOTU0NTksIDk1NDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTQ2OSwgCisgICAgOTU0NzMsIDk1NDc3LCA5NTQ4MSwgOTU0ODQsIDk1NDg4LCA5NTQ5MSwgOTU0OTUsIDk1NDk4LCA5NTUwMiwgOTU1MDYsIAorICAgIDk1NTExLCA5NTUxNSwgOTU1MjAsIDk1NTIzLCA5NTUyNywgOTU1MzAsIDk1NTM0LCA5NTUzNywgOTU1NDEsIDk1NTQ1LCAKKyAgICA5NTU0OSwgOTU1NTMsIDk1NTU3LCA5NTU2MSwgOTU1NjUsIDk1NTY5LCA5NTU3MywgOTU1NzcsIDk1NTgxLCA5NTU4NSwgCisgICAgOTU1ODksIDk1NTkzLCA5NTU5NywgOTU2MDEsIDk1NjA1LCA5NTYwOSwgOTU2MTIsIDk1NjE1LCA5NTYxOSwgOTU2MjMsIAorICAgIDk1NjI3LCA5NTYzMCwgOTU2MzMsIDk1NjM2LCA5NTY0MCwgOTU2NDQsIDk1NjQ4LCA5NTY1MiwgOTU2NTYsIDk1NjU5LCAKKyAgICA5NTY2MiwgOTU2NjcsIDk1NjcxLCA5NTY3NiwgOTU2ODAsIDk1Njg1LCA5NTY5MCwgOTU2OTYsIDk1NzAxLCA5NTcwNywgCisgICAgOTU3MTEsIDk1NzE2LCA5NTcyMCwgOTU3MjUsIDk1NzI5LCA5NTczMywgOTU3MzcsIDk1NzQxLCA5NTc0NCwgOTU3NDcsIAorICAgIDk1NzUxLCA5NTc1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU3NTgsIDk1NzYyLCA5NTc2NSwgOTU3NjgsIDk1NzcxLCAKKyAgICA5NTc3NCwgOTU3NzcsIDk1NzgwLCA5NTc4MywgOTU3ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDk1Nzg5LCA5NTc5MywgOTU3OTgsIDk1ODAyLCA5NTgwNywgOTU4MTEsIDk1ODE2LCA5NTgyMCwgOTU4MjUsIDk1ODI5LCAKKyAgICA5NTgzNCwgOTU4MzgsIDk1ODQzLCA5NTg0OCwgOTU4NTMsIDk1ODU4LCA5NTg2MywgOTU4NjgsIDk1ODczLCA5NTg3OCwgCisgICAgOTU4ODMsIDk1ODg4LCA5NTg5MywgOTU4OTgsIDk1OTAzLCA5NTkwOCwgOTU5MTMsIDk1OTE4LCA5NTkyMywgOTU5MjgsIAorICAgIDk1OTMyLCA5NTkzNiwgOTU5NDEsIDk1OTQ2LCA5NTk1MSwgOTU5NTUsIDk1OTU5LCA5NTk2MywgOTU5NjgsIDk1OTczLCAKKyAgICA5NTk3OCwgOTU5ODIsIDk1OTg2LCA5NTk5MSwgOTU5OTYsIDk2MDAxLCA5NjAwNywgOTYwMTIsIDk2MDE4LCA5NjAyMywgCisgICAgOTYwMjksIDk2MDM0LCA5NjA0MCwgOTYwNDUsIDk2MDUxLCA5NjA1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTYwNjEsIAorICAgIDk2MDY2LCA5NjA3MCwgOTYwNzQsIDk2MDc4LCA5NjA4MiwgOTYwODYsIDk2MDkwLCA5NjA5NCwgOTYwOTgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDk2MTAyLCA5NjEwNSwgOTYxMTAsIDk2MTE2LCA5NjEyNCwgOTYxMjksIDk2MTM1LCA5NjE0MywgOTYxNDksIAorICAgIDk2MTU1LCA5NjE1OSwgOTYxNjMsIDk2MTcwLCA5NjE3OSwgOTYxODYsIDk2MTk1LCA5NjIwMSwgOTYyMTAsIDk2MjE3LCAKKyAgICA5NjIyNCwgOTYyMzEsIDk2MjQxLCA5NjI0NywgOTYyNTEsIDk2MjU4LCA5NjI2NywgOTYyNzcsIDk2Mjg0LCA5NjI5MSwgCisgICAgOTYyOTUsIDk2Mjk5LCA5NjMwNiwgOTYzMTYsIDk2MzIwLCA5NjMyNywgOTYzMzQsIDk2MzQxLCA5NjM0NywgOTYzNTQsIAorICAgIDk2MzYxLCA5NjM2OCwgOTYzNzUsIDk2Mzc5LCA5NjM4MywgOTYzODcsIDk2Mzk0LCA5NjM5OCwgOTY0MDUsIDk2NDEyLCAKKyAgICA5NjQyNiwgOTY0MzUsIDk2NDM5LCA5NjQ0MywgOTY0NDcsIDk2NDU0LCA5NjQ1OCwgOTY0NjIsIDk2NDY2LCA5NjQ3NCwgCisgICAgOTY0ODIsIDk2NTAxLCA5NjUxMSwgOTY1MzEsIDk2NTM1LCA5NjUzOSwgOTY1NDMsIDk2NTQ3LCA5NjU1MSwgOTY1NTUsIAorICAgIDk2NTU5LCA5NjU2NiwgOTY1NzAsIDk2NTczLCA5NjU3NywgOTY1ODEsIDk2NTg3LCA5NjU5NCwgOTY2MDMsIDk2NjA3LCAKKyAgICA5NjYxNiwgOTY2MjUsIDk2NjMzLCA5NjYzNywgOTY2NDQsIDk2NjQ4LCA5NjY1MiwgOTY2NTYsIDk2NjYwLCA5NjY3MSwgCisgICAgOTY2ODAsIDk2Njg5LCA5NjY5OCwgOTY3MDcsIDk2NzE5LCA5NjcyOCwgOTY3MzcsIDk2NzQ2LCA5Njc1NCwgOTY3NjMsIAorICAgIDk2Nzc1LCA5Njc4NCwgOTY3OTMsIDk2ODAyLCA5NjgxNCwgOTY4MjMsIDk2ODMyLCA5Njg0NCwgOTY4NTMsIDk2ODYyLCAKKyAgICA5Njg3NCwgOTY4ODMsIDk2ODg3LCA5Njg5MSwgOTY4OTUsIDk2ODk5LCA5NjkwMywgOTY5MDcsIDk2OTExLCA5NjkxOCwgCisgICAgOTY5MjIsIDk2OTI2LCA5NjkzNywgOTY5NDEsIDk2OTQ1LCA5Njk1MiwgOTY5NTgsIDk2OTY0LCA5Njk2OCwgOTY5NzUsIAorICAgIDk2OTc5LCA5Njk4MywgOTY5ODcsIDk2OTkxLCA5Njk5NSwgOTY5OTksIDk3MDA1LCA5NzAxMywgOTcwMTcsIDk3MDIxLCAKKyAgICA5NzAyNCwgOTcwMzAsIDk3MDQwLCA5NzA0NCwgOTcwNTYsIDk3MDYzLCA5NzA3MCwgOTcwNzcsIDk3MDg0LCA5NzA5MCwgCisgICAgOTcwOTQsIDk3MDk4LCA5NzEwMiwgOTcxMDYsIDk3MTEzLCA5NzEyMiwgOTcxMjksIDk3MTM3LCA5NzE0NSwgOTcxNTEsIAorICAgIDk3MTU1LCA5NzE1OSwgOTcxNjMsIDk3MTY3LCA5NzE3MywgOTcxODIsIDk3MTk0LCA5NzIwMSwgOTcyMDgsIDk3MjE3LCAKKyAgICA5NzIyOCwgOTcyMzQsIDk3MjQzLCA5NzI1MiwgOTcyNTksIDk3MjY4LCA5NzI3NSwgOTcyODIsIDk3MjkyLCA5NzI5OSwgCisgICAgOTczMDYsIDk3MzEzLCA5NzMyMCwgOTczMjQsIDk3MzMwLCA5NzMzNCwgOTczNDUsIDk3MzUzLCA5NzM2MiwgOTczNzQsIAorICAgIDk3MzgxLCA5NzM4OCwgOTczOTgsIDk3NDA1LCA5NzQxNCwgOTc0MjEsIDk3NDMwLCA5NzQzNywgOTc0NDQsIDk3NDU0LCAKKyAgICA5NzQ2MSwgOTc0NjgsIDk3NDc4LCA5NzQ4NSwgOTc0OTcsIDk3NTA2LCA5NzUxMywgOTc1MjAsIDk3NTI3LCA5NzUzNiwgCisgICAgOTc1NDYsIDk3NTU5LCA5NzU2NiwgOTc1NzYsIDk3NTg2LCA5NzU5MywgOTc2MDIsIDk3NjE1LCA5NzYyMiwgOTc2MjksIAorICAgIDk3NjM2LCA5NzY0NiwgOTc2NTYsIDk3NjYzLCA5NzY3MywgOTc2ODAsIDk3Njg3LCA5NzY5NywgOTc3MDMsIDk3NzEwLCAKKyAgICA5NzcxNywgOTc3MjQsIDk3NzM0LCA5Nzc0MSwgOTc3NDgsIDk3NzU1LCA5Nzc2MSwgOTc3NjgsIDk3Nzc4LCA5Nzc4NSwgCisgICAgOTc3ODksIDk3Nzk3LCA5NzgwMSwgOTc4MTMsIDk3ODE3LCA5NzgzMSwgOTc4MzUsIDk3ODM5LCA5Nzg0MywgOTc4NDcsIAorICAgIDk3ODUzLCA5Nzg2MCwgOTc4NjgsIDk3ODcyLCA5Nzg3NiwgOTc4ODAsIDk3ODg0LCA5Nzg5MSwgOTc4OTUsIDk3OTAxLCAKKyAgICA5NzkwNywgOTc5MTUsIDk3OTE5LCA5NzkyNiwgOTc5MzQsIDk3OTM4LCA5Nzk0MiwgOTc5NDgsIDk3OTUyLCA5Nzk2MSwgCisgICAgOTc5NzAsIDk3OTc3LCA5Nzk4NywgOTc5OTMsIDk3OTk3LCA5ODAwMSwgOTgwMDksIDk4MDE2LCA5ODAyMywgOTgwMjksIAorICAgIDk4MDMzLCA5ODA0MSwgOTgwNDUsIDk4MDUyLCA5ODA2NCwgOTgwNzEsIDk4MDgxLCA5ODA4NywgOTgwOTEsIDk4MTAwLCAKKyAgICA5ODEwNywgOTgxMTYsIDk4MTIwLCA5ODEyNCwgOTgxMzEsIDk4MTM1LCA5ODEzOSwgOTgxNDMsIDk4MTQ3LCA5ODE1MCwgCisgICAgOTgxNTYsIDk4MTYyLCA5ODE2NiwgOTgxNzAsIDk4MTc3LCA5ODE4NCwgOTgxOTEsIDk4MTk4LCA5ODIwNSwgOTgyMTIsIAorICAgIDk4MjE5LCA5ODIyNiwgOTgyMzIsIDk4MjM2LCA5ODI0MCwgOTgyNDcsIDk4MjU0LCA5ODI2MSwgOTgyNjgsIDk4Mjc1LCAKKyAgICA5ODI3OSwgOTgyODIsIDk4Mjg3LCA5ODI5MSwgOTgyOTUsIDk4MzA0LCA5ODMxMywgOTgzMTcsIDk4MzIxLCA5ODMyNywgCisgICAgOTgzMzMsIDk4MzUwLCA5ODM1NiwgOTgzNjAsIDk4MzY5LCA5ODM3MywgOTgzNzcsIDk4Mzg0LCA5ODM5MiwgOTg0MDAsIAorICAgIDk4NDA2LCA5ODQxMCwgOTg0MTQsIDk4NDE4LCA5ODQyMiwgOTg0MjUsIDk4NDMxLCA5ODQzOCwgOTg0NDgsIDk4NDU1LCAKKyAgICA5ODQ2MiwgOTg0NjksIDk4NDc1LCA5ODQ4MiwgOTg0ODksIDk4NDk2LCA5ODUwMywgOTg1MTAsIDk4NTE5LCA5ODUyNiwgCisgICAgOTg1MzgsIDk4NTQ1LCA5ODU1MiwgOTg1NjIsIDk4NTczLCA5ODU4MCwgOTg1ODcsIDk4NTk0LCA5ODYwMSwgOTg2MDgsIAorICAgIDk4NjE1LCA5ODYyMiwgOTg2MjksIDk4NjM2LCA5ODY0MywgOTg2NTMsIDk4NjYzLCA5ODY3MywgOTg2ODAsIDk4NjkwLCAKKyAgICA5ODY5NywgOTg3MDQsIDk4NzExLCA5ODcxOCwgOTg3MjQsIDk4NzMxLCA5ODczOCwgOTg3NDUsIDk4NzUyLCA5ODc1OSwgCisgICAgOTg3NjYsIDk4NzczLCA5ODc4MCwgOTg3ODYsIDk4NzkzLCA5ODgwMCwgOTg4MDksIDk4ODE2LCA5ODgyMywgOTg4MjcsIAorICAgIDk4ODM1LCA5ODgzOSwgOTg4NDMsIDk4ODQ3LCA5ODg1MSwgOTg4NTUsIDk4ODYyLCA5ODg2NiwgOTg4NzUsIDk4ODc5LCAKKyAgICA5ODg4NiwgOTg4OTQsIDk4ODk4LCA5ODkwMiwgOTg5MDYsIDk4OTE5LCA5ODkzNSwgOTg5MzksIDk4OTQzLCA5ODk1MCwgCisgICAgOTg5NTYsIDk4OTYzLCA5ODk2NywgOTg5NzEsIDk4OTc1LCA5ODk3OSwgOTg5ODMsIDk4OTkwLCA5ODk5NCwgOTkwMTIsIAorICAgIDk5MDE2LCA5OTAyMCwgOTkwMjcsIDk5MDMxLCA5OTAzNSwgOTkwNDEsIDk5MDQ1LCA5OTA0OSwgOTkwNTcsIDk5MDYxLCAKKyAgICA5OTA2NSwgOTkwNjksIDk5MDczLCA5OTA3OSwgOTkwOTAsIDk5MDk5LCA5OTEwOCwgOTkxMTUsIDk5MTIyLCA5OTEzMywgCisgICAgOTkxNDAsIDk5MTQ3LCA5OTE1NCwgOTkxNjEsIDk5MTY4LCA5OTE3NSwgOTkxODIsIDk5MTkyLCA5OTE5OCwgOTkyMDUsIAorICAgIDk5MjE1LCA5OTIyNCwgOTkyMzEsIDk5MjQwLCA5OTI1MCwgOTkyNTcsIDk5MjY0LCA5OTI3MSwgOTkyNzgsIDk5MjkwLCAKKyAgICA5OTI5NywgOTkzMDQsIDk5MzExLCA5OTMxOCwgOTkzMjUsIDk5MzM1LCA5OTM0MiwgOTkzNDksIDk5MzU5LCA5OTM3MiwgCisgICAgOTkzODQsIDk5MzkxLCA5OTQwMSwgOTk0MDgsIDk5NDE1LCA5OTQyMiwgOTk0MzYsIDk5NDQyLCA5OTQ1MCwgOTk0NjAsIAorICAgIDk5NDcwLCA5OTQ3NywgOTk0ODQsIDk5NDkwLCA5OTQ5NCwgOTk1MDEsIDk5NTExLCA5OTUxNywgOTk1MzAsIDk5NTM0LCAKKyAgICA5OTUzOCwgOTk1NDUsIDk5NTQ5LCA5OTU1NiwgOTk1NjYsIDk5NTcwLCA5OTU3NCwgOTk1NzgsIDk5NTgyLCA5OTU4NiwgCisgICAgOTk1OTMsIDk5NTk3LCA5OTYwNCwgOTk2MTEsIDk5NjE4LCA5OTYyNywgOTk2MzYsIDk5NjQ2LCA5OTY1MywgOTk2NjAsIAorICAgIDk5NjY3LCA5OTY3NywgOTk2ODQsIDk5Njk0LCA5OTcwMSwgOTk3MTEsIDk5NzE4LCA5OTcyNSwgOTk3MzUsIDk5NzQ1LCAKKyAgICA5OTc1MiwgOTk3NTgsIDk5NzY2LCA5OTc3NCwgOTk3ODAsIDk5Nzg2LCA5OTc5MCwgOTk3OTQsIDk5ODAxLCA5OTgwOSwgCisgICAgOTk4MTUsIDk5ODE5LCA5OTgyMywgOTk4MjcsIDk5ODM0LCA5OTg0NiwgOTk4NDksIDk5ODU2LCA5OTg2MiwgOTk4NjYsIAorICAgIDk5ODcwLCA5OTg3NCwgOTk4NzgsIDk5ODgyLCA5OTg4NiwgOTk4OTAsIDk5ODk0LCA5OTg5OCwgOTk5MDIsIDk5OTA5LCAKKyAgICA5OTkxMywgOTk5MTksIDk5OTIzLCA5OTkyNywgOTk5MzEsIDk5OTM3LCA5OTk0NCwgOTk5NTEsIDk5OTU4LCA5OTk2OSwgCisgICAgOTk5NzcsIDk5OTgxLCA5OTk4NywgOTk5OTYsIDEwMDAwMywgMTAwMDA5LCAxMDAwMTIsIDEwMDAxNiwgMTAwMDIwLCAKKyAgICAxMDAwMjYsIDEwMDAzNSwgMTAwMDQzLCAxMDAwNDcsIDEwMDA1MywgMTAwMDU3LCAxMDAwNjEsIDEwMDA2NSwgMTAwMDcxLCAKKyAgICAxMDAwNzgsIDEwMDA4NCwgMTAwMDg4LCAxMDAwOTQsIDEwMDA5OCwgMTAwMTAyLCAxMDAxMTEsIDEwMDEyMywgMTAwMTI3LCAKKyAgICAxMDAxMzQsIDEwMDE0MSwgMTAwMTUxLCAxMDAxNTgsIDEwMDE3MCwgMTAwMTc3LCAxMDAxODQsIDEwMDE5MSwgMTAwMjAyLCAKKyAgICAxMDAyMTIsIDEwMDIyNSwgMTAwMjM1LCAxMDAyNDIsIDEwMDI0NiwgMTAwMjUwLCAxMDAyNTQsIDEwMDI1OCwgMTAwMjY3LCAKKyAgICAxMDAyNzYsIDEwMDI4NSwgMTAwMzAyLCAxMDAzMTEsIDEwMDMxNywgMTAwMzI0LCAxMDAzMzIsIDEwMDM0NSwgMTAwMzQ5LCAKKyAgICAxMDAzNTgsIDEwMDM2NywgMTAwMzc2LCAxMDAzODUsIDEwMDM5NiwgMTAwNDA1LCAxMDA0MTQsIDEwMDQyMywgMTAwNDMyLCAKKyAgICAxMDA0NDEsIDEwMDQ1MCwgMTAwNDYwLCAxMDA0NjMsIDEwMDQ2NywgMTAwNDcxLCAxMDA0NzUsIDEwMDQ3OSwgMTAwNDgzLCAKKyAgICAxMDA0ODksIDEwMDQ5NiwgMTAwNTAzLCAxMDA1MTAsIDEwMDUxNiwgMTAwNTIyLCAxMDA1MjksIDEwMDUzNSwgMTAwNTQyLCAKKyAgICAxMDA1NTAsIDEwMDU1NCwgMTAwNTYxLCAxMDA1NjgsIDEwMDU3NSwgMTAwNTgzLCAxMDA1ODYsIDEwMDU5MCwgMTAwNTk0LCAKKyAgICAxMDA1OTgsIDEwMDYwMSwgMTAwNjA3LCAxMDA2MTEsIDEwMDYxNywgMTAwNjI0LCAxMDA2MzEsIDEwMDYzNywgMTAwNjQ0LCAKKyAgICAxMDA2NTEsIDEwMDY1OCwgMTAwNjY1LCAxMDA2NzIsIDEwMDY3OSwgMTAwNjg2LCAxMDA2OTMsIDEwMDcwMCwgMTAwNzA3LCAKKyAgICAxMDA3MTQsIDEwMDcyMSwgMTAwNzI4LCAxMDA3MzUsIDEwMDc0MSwgMTAwNzQ1LCAxMDA3NTQsIDEwMDc1OCwgMTAwNzYyLCAKKyAgICAxMDA3NjYsIDEwMDc3MCwgMTAwNzc2LCAxMDA3ODMsIDEwMDc5MCwgMTAwNzk3LCAxMDA4MDQsIDEwMDgxMSwgMTAwODE3LCAKKyAgICAxMDA4MjUsIDEwMDgyOSwgMTAwODMzLCAxMDA4MzcsIDEwMDg0MSwgMTAwODQ3LCAxMDA4NjQsIDEwMDg4MSwgMTAwODg1LCAKKyAgICAxMDA4ODksIDEwMDg5MywgMTAwODk3LCAxMDA5MDEsIDEwMDkwNSwgMTAwOTExLCAxMDA5MTgsIDEwMDkyMiwgMTAwOTI4LCAKKyAgICAxMDA5MzUsIDEwMDk0MiwgMTAwOTQ5LCAxMDA5NTYsIDEwMDk2MywgMTAwOTcyLCAxMDA5NzksIDEwMDk4NiwgMTAwOTkzLCAKKyAgICAxMDEwMDAsIDEwMTAwNCwgMTAxMDA4LCAxMDEwMTQsIDEwMTAyNiwgMTAxMDMwLCAxMDEwMzQsIDEwMTA0MywgMTAxMDQ3LCAKKyAgICAxMDEwNTEsIDEwMTA1NSwgMTAxMDYxLCAxMDEwNjUsIDEwMTA2OSwgMTAxMDc4LCAxMDEwODIsIDEwMTA4NiwgMTAxMDkwLCAKKyAgICAxMDEwOTcsIDEwMTEwMSwgMTAxMTA1LCAxMDExMDksIDEwMTExMywgMTAxMTE3LCAxMDExMjEsIDEwMTEyNSwgMTAxMTI5LCAKKyAgICAxMDExMzUsIDEwMTE0MiwgMTAxMTQ5LCAxMDExNTUsIDEwMTE1OSwgMTAxMTc2LCAxMDExODIsIDEwMTE4NiwgMTAxMTkyLCAKKyAgICAxMDExOTgsIDEwMTIwNCwgMTAxMjEwLCAxMDEyMTYsIDEwMTIyMiwgMTAxMjI2LCAxMDEyMzAsIDEwMTIzNCwgMTAxMjQwLCAKKyAgICAxMDEyNDQsIDEwMTI1MCwgMTAxMjU0LCAxMDEyNTgsIDEwMTI2NSwgMTAxMjcyLCAxMDEyODksIDEwMTI5MywgMTAxMjk3LCAKKyAgICAxMDEzMDEsIDEwMTMwNSwgMTAxMzA5LCAxMDEzMjEsIDEwMTMyNCwgMTAxMzI5LCAxMDEzMzQsIDEwMTM0OSwgMTAxMzU5LCAKKyAgICAxMDEzNzEsIDEwMTM3NSwgMTAxMzc5LCAxMDEzODMsIDEwMTM4OSwgMTAxMzk2LCAxMDE0MDMsIDEwMTQxMywgMTAxNDI1LCAKKyAgICAxMDE0MzEsIDEwMTQzNywgMTAxNDQ2LCAxMDE0NTAsIDEwMTQ1NCwgMTAxNDYxLCAxMDE0NzEsIDEwMTQ3OCwgMTAxNDg0LCAKKyAgICAxMDE0ODgsIDEwMTQ5MiwgMTAxNDk5LCAxMDE1MDUsIDEwMTUwOSwgMTAxNTE1LCAxMDE1MTksIDEwMTUyNywgMTAxNTMzLCAKKyAgICAxMDE1MzcsIDEwMTU0NSwgMTAxNTUzLCAxMDE1NjAsIDEwMTU2NiwgMTAxNTczLCAxMDE1ODAsIDEwMTU5MCwgMTAxNjAwLCAKKyAgICAxMDE2MDQsIDEwMTYwOCwgMTAxNjEyLCAxMDE2MTYsIDEwMTYyMiwgMTAxNjI5LCAxMDE2MzUsIDEwMTY0MiwgMTAxNjQ5LCAKKyAgICAxMDE2NTYsIDEwMTY2NSwgMTAxNjcyLCAxMDE2NzksIDEwMTY4NSwgMTAxNjkyLCAxMDE2OTksIDEwMTcwNiwgMTAxNzEzLCAKKyAgICAxMDE3MjAsIDEwMTcyNywgMTAxNzMzLCAxMDE3NDAsIDEwMTc0NywgMTAxNzU0LCAxMDE3NjMsIDEwMTc3MCwgMTAxNzc3LCAKKyAgICAxMDE3ODEsIDEwMTc4NywgMTAxNzkxLCAxMDE3OTcsIDEwMTgwNCwgMTAxODExLCAxMDE4MTgsIDEwMTgyMiwgMTAxODI2LCAKKyAgICAxMDE4MzAsIDEwMTgzNCwgMTAxODM4LCAxMDE4NDUsIDEwMTg0OSwgMTAxODUzLCAxMDE4NTksIDEwMTg2NywgMTAxODcxLCAKKyAgICAxMDE4NzUsIDEwMTg3OSwgMTAxODgzLCAxMDE4OTAsIDEwMTg5NCwgMTAxODk4LCAxMDE5MDYsIDEwMTkxMCwgMTAxOTE0LCAKKyAgICAxMDE5MTgsIDEwMTkyMiwgMTAxOTI4LCAxMDE5MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEwMTkzNiwgMTAxOTQyLCAxMDE5NDgsIDEwMTk1NSwgMTAxOTYyLCAxMDE5NjksIDEwMTk3NiwgMTAxOTgzLCAKKyAgICAxMDE5OTAsIDEwMTk5NiwgMTAyMDAzLCAxMDIwMTAsIDEwMjAxNywgMTAyMDI0LCAxMDIwMzEsIDEwMjAzOCwgMTAyMDQ0LCAKKyAgICAxMDIwNTAsIDEwMjA1NiwgMTAyMDYyLCAxMDIwNjgsIDEwMjA3NCwgMTAyMDgwLCAxMDIwODYsIDEwMjA5MiwgMTAyMDk5LCAKKyAgICAxMDIxMDYsIDEwMjExMywgMTAyMTIwLCAxMDIxMjcsIDEwMjEzNCwgMTAyMTQwLCAxMDIxNDYsIDEwMjE1MiwgMTAyMTU5LCAKKyAgICAxMDIxNjYsIDEwMjE3MiwgMTAyMTc4LCAxMDIxODcsIDEwMjE5NCwgMTAyMjAxLCAxMDIyMDgsIDEwMjIxNSwgMTAyMjIyLCAKKyAgICAxMDIyMjksIDEwMjIzNSwgMTAyMjQxLCAxMDIyNDcsIDEwMjI1NiwgMTAyMjYzLCAxMDIyNzAsIDEwMjI4MSwgMTAyMjkyLCAKKyAgICAxMDIyOTgsIDEwMjMwNCwgMTAyMzEwLCAxMDIzMTksIDEwMjMyNiwgMTAyMzMzLCAxMDIzNDMsIDEwMjM1MywgMTAyMzY0LCAKKyAgICAxMDIzNzUsIDEwMjM4NywgMTAyNDAwLCAxMDI0MTEsIDEwMjQyMiwgMTAyNDM0LCAxMDI0NDcsIDEwMjQ1OCwgMTAyNDY5LCAKKyAgICAxMDI0ODAsIDEwMjQ5MSwgMTAyNTAyLCAxMDI1MTQsIDEwMjUyMiwgMTAyNTMwLCAxMDI1MzksIDEwMjU0OCwgMTAyNTU3LCAKKyAgICAxMDI1NjMsIDEwMjU2OSwgMTAyNTc1LCAxMDI1ODIsIDEwMjU5MiwgMTAyNTk5LCAxMDI2MDksIDEwMjYxNCwgMTAyNjE5LCAKKyAgICAxMDI2MjUsIDEwMjYzMSwgMTAyNjM5LCAxMDI2NDcsIDEwMjY1NiwgMTAyNjY3LCAxMDI2NzgsIDEwMjY4NiwgMTAyNjk0LCAKKyAgICAxMDI3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMjcxMiwgMTAyNzIzLCAxMDI3MzAsIAorICAgIDEwMjczOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyNzQ2LCAxMDI3NTAsIDEwMjc1NCwgCisgICAgMTAyNzU4LCAxMDI3NjIsIDEwMjc2NiwgMTAyNzcwLCAxMDI3NzQsIDEwMjc3OCwgMTAyNzgyLCAxMDI3ODYsIDEwMjc5MCwgCisgICAgMTAyNzk0LCAxMDI3OTgsIDEwMjgwMiwgMTAyODA2LCAxMDI4MTAsIDEwMjgxNCwgMTAyODE4LCAxMDI4MjIsIDEwMjgyNiwgCisgICAgMTAyODMwLCAxMDI4MzQsIDEwMjgzOCwgMTAyODQyLCAxMDI4NDYsIDEwMjg1MCwgMTAyODU0LCAxMDI4NTgsIDEwMjg2MiwgCisgICAgMTAyODY2LCAxMDI4NzAsIDEwMjg3NCwgMTAyODc4LCAxMDI4ODIsIDEwMjg4NiwgMTAyODkwLCAxMDI4OTQsIDEwMjg5OCwgCisgICAgMTAyOTAyLCAxMDI5MDYsIDEwMjkxMCwgMTAyOTE0LCAxMDI5MTgsIDEwMjkyMiwgMTAyOTI2LCAxMDI5MzAsIDEwMjkzNCwgCisgICAgMTAyOTM4LCAxMDI5NDIsIDEwMjk0NiwgMTAyOTUwLCAxMDI5NTQsIDEwMjk1OCwgMTAyOTYyLCAxMDI5NjYsIDEwMjk3MCwgCisgICAgMTAyOTc0LCAxMDI5NzgsIDEwMjk4MiwgMTAyOTg2LCAxMDI5OTAsIDEwMjk5NCwgMTAyOTk4LCAxMDMwMDIsIDEwMzAwNiwgCisgICAgMTAzMDEwLCAxMDMwMTQsIDEwMzAxOCwgMTAzMDIyLCAxMDMwMjYsIDEwMzAzMCwgMTAzMDM0LCAxMDMwMzgsIDEwMzA0MiwgCisgICAgMTAzMDQ2LCAxMDMwNTAsIDEwMzA1NCwgMTAzMDU4LCAxMDMwNjIsIDEwMzA2NiwgMTAzMDcwLCAxMDMwNzQsIDEwMzA3OCwgCisgICAgMTAzMDgyLCAxMDMwODYsIDEwMzA5MCwgMTAzMDk0LCAxMDMwOTgsIDEwMzEwMiwgMTAzMTA2LCAxMDMxMTAsIDEwMzExNCwgCisgICAgMTAzMTE4LCAxMDMxMjIsIDEwMzEyNiwgMTAzMTMwLCAxMDMxMzQsIDEwMzEzOCwgMTAzMTQyLCAxMDMxNDYsIDEwMzE1MCwgCisgICAgMTAzMTU0LCAxMDMxNTgsIDEwMzE2MiwgMTAzMTY2LCAxMDMxNzAsIDEwMzE3NCwgMTAzMTc4LCAxMDMxODIsIDEwMzE4NiwgCisgICAgMTAzMTkwLCAxMDMxOTQsIDEwMzE5OCwgMTAzMjAyLCAxMDMyMDYsIDEwMzIxMCwgMTAzMjE0LCAxMDMyMTgsIDEwMzIyMiwgCisgICAgMTAzMjI2LCAxMDMyMzAsIDEwMzIzNCwgMTAzMjM4LCAxMDMyNDIsIDEwMzI0NiwgMTAzMjUwLCAxMDMyNTQsIDEwMzI1OCwgCisgICAgMTAzMjYyLCAxMDMyNjYsIDEwMzI3MCwgMTAzMjc0LCAxMDMyNzgsIDEwMzI4MiwgMTAzMjg2LCAxMDMyOTAsIDEwMzI5NCwgCisgICAgMTAzMjk4LCAxMDMzMDIsIDEwMzMwNiwgMTAzMzEwLCAxMDMzMTQsIDEwMzMxOCwgMTAzMzIyLCAxMDMzMjYsIDEwMzMzMCwgCisgICAgMTAzMzM0LCAxMDMzMzgsIDEwMzM0MiwgMTAzMzQ2LCAxMDMzNTAsIDEwMzM1NCwgMTAzMzU4LCAxMDMzNjIsIDEwMzM2NiwgCisgICAgMTAzMzcwLCAxMDMzNzQsIDEwMzM3OCwgMTAzMzgyLCAxMDMzODYsIDEwMzM5MCwgMTAzMzk0LCAxMDMzOTgsIDEwMzQwMiwgCisgICAgMTAzNDA2LCAxMDM0MTAsIDEwMzQxNCwgMTAzNDE4LCAxMDM0MjIsIDEwMzQyNiwgMTAzNDMwLCAxMDM0MzQsIDEwMzQzOCwgCisgICAgMTAzNDQyLCAxMDM0NDYsIDEwMzQ1MCwgMTAzNDU0LCAxMDM0NTgsIDEwMzQ2MiwgMTAzNDY2LCAxMDM0NzAsIDEwMzQ3NCwgCisgICAgMTAzNDc4LCAxMDM0ODIsIDEwMzQ4NiwgMTAzNDkwLCAxMDM0OTQsIDEwMzQ5OCwgMTAzNTAyLCAxMDM1MDYsIDEwMzUxMCwgCisgICAgMTAzNTE0LCAxMDM1MTgsIDEwMzUyMiwgMTAzNTI2LCAxMDM1MzAsIDEwMzUzNCwgMTAzNTM4LCAxMDM1NDIsIDEwMzU0NiwgCisgICAgMTAzNTUwLCAxMDM1NTQsIDEwMzU1OCwgMTAzNTYyLCAxMDM1NjYsIDEwMzU3MCwgMTAzNTc0LCAxMDM1NzgsIDEwMzU4MiwgCisgICAgMTAzNTg2LCAxMDM1OTAsIDEwMzU5NCwgMTAzNTk4LCAxMDM2MDIsIDEwMzYwNiwgMTAzNjEwLCAxMDM2MTQsIDEwMzYxOCwgCisgICAgMTAzNjIyLCAxMDM2MjYsIDEwMzYzMCwgMTAzNjM0LCAxMDM2MzgsIDEwMzY0MiwgMTAzNjQ2LCAxMDM2NTAsIDEwMzY1NCwgCisgICAgMTAzNjU4LCAxMDM2NjIsIDEwMzY2NiwgMTAzNjcwLCAxMDM2NzQsIDEwMzY3OCwgMTAzNjgyLCAxMDM2ODYsIDEwMzY5MCwgCisgICAgMTAzNjk0LCAxMDM2OTgsIDEwMzcwMiwgMTAzNzA2LCAxMDM3MTAsIDEwMzcxNCwgMTAzNzE4LCAxMDM3MjIsIDEwMzcyNiwgCisgICAgMTAzNzMwLCAxMDM3MzQsIDEwMzczOCwgMTAzNzQyLCAxMDM3NDYsIDEwMzc1MCwgMTAzNzU0LCAxMDM3NTgsIDEwMzc2MiwgCisgICAgMTAzNzY2LCAxMDM3NzAsIDEwMzc3NCwgMTAzNzc4LCAxMDM3ODIsIDEwMzc4NiwgMTAzNzkwLCAxMDM3OTQsIDEwMzc5OCwgCisgICAgMTAzODAyLCAxMDM4MDYsIDEwMzgxMCwgMTAzODE0LCAxMDM4MTgsIDEwMzgyMiwgMTAzODI2LCAxMDM4MzAsIDEwMzgzNCwgCisgICAgMTAzODM4LCAxMDM4NDIsIDEwMzg0NiwgMTAzODUwLCAxMDM4NTQsIDEwMzg1OCwgMTAzODYyLCAxMDM4NjYsIDEwMzg3MCwgCisgICAgMTAzODc0LCAxMDM4NzgsIDEwMzg4MiwgMTAzODg2LCAxMDM4OTAsIDEwMzg5NCwgMTAzODk4LCAxMDM5MDIsIDEwMzkwNiwgCisgICAgMTAzOTEwLCAxMDM5MTQsIDEwMzkxOCwgMTAzOTIyLCAxMDM5MjYsIDEwMzkzMCwgMTAzOTM0LCAxMDM5MzgsIDEwMzk0MiwgCisgICAgMTAzOTQ2LCAxMDM5NTAsIDEwMzk1NCwgMTAzOTU4LCAxMDM5NjIsIDEwMzk2NiwgMTAzOTcwLCAxMDM5NzQsIDEwMzk3OCwgCisgICAgMTAzOTgyLCAxMDM5ODYsIDEwMzk5MCwgMTAzOTk0LCAxMDM5OTgsIDEwNDAwMiwgMTA0MDA2LCAxMDQwMTAsIDEwNDAxNCwgCisgICAgMTA0MDE4LCAxMDQwMjIsIDEwNDAyNiwgMTA0MDMwLCAxMDQwMzQsIDEwNDAzOCwgMTA0MDQyLCAxMDQwNDYsIDEwNDA1MCwgCisgICAgMTA0MDU0LCAxMDQwNTgsIDEwNDA2MiwgMTA0MDY2LCAxMDQwNzAsIDEwNDA3NCwgMTA0MDc4LCAxMDQwODIsIDEwNDA4NiwgCisgICAgMTA0MDkwLCAxMDQwOTQsIDEwNDA5OCwgMTA0MTAyLCAxMDQxMDYsIDEwNDExMCwgMTA0MTE0LCAxMDQxMTgsIDEwNDEyMiwgCisgICAgMTA0MTI2LCAxMDQxMzAsIDEwNDEzNCwgMTA0MTM4LCAxMDQxNDIsIDEwNDE0NiwgMTA0MTUwLCAxMDQxNTQsIDEwNDE1OCwgCisgICAgMTA0MTYyLCAxMDQxNjYsIDEwNDE3MCwgMTA0MTc0LCAxMDQxNzgsIDEwNDE4MiwgMTA0MTg2LCAxMDQxOTAsIDEwNDE5NCwgCisgICAgMTA0MTk4LCAxMDQyMDIsIDEwNDIwNiwgMTA0MjEwLCAxMDQyMTQsIDEwNDIxOCwgMTA0MjIyLCAxMDQyMjYsIDEwNDIzMCwgCisgICAgMTA0MjM0LCAxMDQyMzgsIDEwNDI0MiwgMTA0MjQ2LCAxMDQyNTAsIDEwNDI1NCwgMTA0MjU4LCAxMDQyNjIsIDEwNDI2NiwgCisgICAgMTA0MjcwLCAxMDQyNzQsIDEwNDI3OCwgMTA0MjgyLCAxMDQyODYsIDEwNDI5MCwgMTA0Mjk0LCAxMDQyOTgsIDEwNDMwMiwgCisgICAgMTA0MzA2LCAxMDQzMTAsIDEwNDMxNCwgMTA0MzE4LCAxMDQzMjIsIDEwNDMyNiwgMTA0MzMwLCAxMDQzMzQsIDEwNDMzOCwgCisgICAgMTA0MzQyLCAxMDQzNDYsIDEwNDM1MCwgMTA0MzU0LCAxMDQzNTgsIDEwNDM2MiwgMTA0MzY2LCAxMDQzNzAsIDEwNDM3NCwgCisgICAgMTA0Mzc4LCAxMDQzODIsIDEwNDM4NiwgMTA0MzkwLCAxMDQzOTQsIDEwNDM5OCwgMTA0NDAyLCAxMDQ0MDYsIDEwNDQxMCwgCisgICAgMTA0NDE0LCAxMDQ0MTgsIDEwNDQyMiwgMTA0NDI2LCAxMDQ0MzAsIDEwNDQzNCwgMTA0NDM4LCAxMDQ0NDIsIDEwNDQ0NiwgCisgICAgMTA0NDUwLCAxMDQ0NTQsIDEwNDQ1OCwgMTA0NDYyLCAxMDQ0NjYsIDEwNDQ3MCwgMTA0NDc0LCAxMDQ0NzgsIDEwNDQ4MiwgCisgICAgMTA0NDg2LCAxMDQ0OTAsIDEwNDQ5NCwgMTA0NDk4LCAxMDQ1MDIsIDEwNDUwNiwgMTA0NTEwLCAxMDQ1MTQsIDEwNDUxOCwgCisgICAgMTA0NTIyLCAxMDQ1MjYsIDEwNDUzMCwgMTA0NTM0LCAxMDQ1MzgsIDEwNDU0MiwgMTA0NTQ2LCAxMDQ1NTAsIDEwNDU1NCwgCisgICAgMTA0NTU4LCAxMDQ1NjIsIDEwNDU2NiwgMTA0NTcwLCAxMDQ1NzQsIDEwNDU3OCwgMTA0NTgyLCAxMDQ1ODYsIDEwNDU5MCwgCisgICAgMTA0NTk0LCAxMDQ1OTgsIDEwNDYwMiwgMTA0NjA2LCAxMDQ2MTAsIDEwNDYxNCwgMTA0NjE4LCAxMDQ2MjIsIDEwNDYyNiwgCisgICAgMTA0NjMwLCAxMDQ2MzQsIDEwNDYzOCwgMTA0NjQyLCAxMDQ2NDYsIDEwNDY1MCwgMTA0NjU0LCAxMDQ2NTgsIDEwNDY2MiwgCisgICAgMTA0NjY2LCAxMDQ2NzAsIDEwNDY3NCwgMTA0Njc4LCAxMDQ2ODIsIDEwNDY4NiwgMTA0NjkwLCAxMDQ2OTQsIDEwNDY5OCwgCisgICAgMTA0NzAyLCAxMDQ3MDYsIDEwNDcxMCwgMTA0NzE0LCAxMDQ3MTgsIDEwNDcyMiwgMTA0NzI2LCAxMDQ3MzAsIDEwNDczNCwgCisgICAgMTA0NzM4LCAxMDQ3NDIsIDEwNDc0NiwgMTA0NzUwLCAxMDQ3NTQsIDEwNDc1OCwgMTA0NzYyLCAxMDQ3NjYsIDEwNDc3MCwgCisgICAgMTA0Nzc0LCAxMDQ3NzgsIDEwNDc4MiwgMTA0Nzg2LCAxMDQ3OTAsIDEwNDc5NCwgMTA0Nzk4LCAxMDQ4MDIsIDEwNDgwNiwgCisgICAgMTA0ODEwLCAxMDQ4MTQsIDEwNDgxOCwgMTA0ODIyLCAxMDQ4MjYsIDEwNDgzMCwgMTA0ODM0LCAxMDQ4MzgsIDEwNDg0MiwgCisgICAgMTA0ODQ2LCAxMDQ4NTAsIDEwNDg1NCwgMTA0ODU4LCAxMDQ4NjIsIDEwNDg2NiwgMTA0ODcwLCAxMDQ4NzQsIDEwNDg3OCwgCisgICAgMTA0ODgyLCAxMDQ4ODYsIDEwNDg5MCwgMTA0ODk0LCAxMDQ4OTgsIDEwNDkwMiwgMTA0OTA2LCAxMDQ5MTAsIDEwNDkxNCwgCisgICAgMTA0OTE4LCAxMDQ5MjIsIDEwNDkyNiwgMTA0OTMwLCAxMDQ5MzQsIDEwNDkzOCwgMTA0OTQyLCAxMDQ5NDYsIDEwNDk1MCwgCisgICAgMTA0OTU0LCAxMDQ5NTgsIDEwNDk2MiwgMTA0OTY2LCAxMDQ5NzAsIDEwNDk3NCwgMTA0OTc4LCAxMDQ5ODIsIDEwNDk4NiwgCisgICAgMTA0OTkwLCAxMDQ5OTQsIDEwNDk5OCwgMTA1MDAyLCAxMDUwMDYsIDEwNTAxMCwgMTA1MDE0LCAxMDUwMTgsIDEwNTAyMiwgCisgICAgMTA1MDI2LCAxMDUwMzAsIDEwNTAzNCwgMTA1MDM4LCAxMDUwNDIsIDEwNTA0NiwgMTA1MDUwLCAxMDUwNTQsIDEwNTA1OCwgCisgICAgMTA1MDYyLCAxMDUwNjYsIDEwNTA3MCwgMTA1MDc0LCAxMDUwNzgsIDEwNTA4MiwgMTA1MDg2LCAxMDUwOTAsIDEwNTA5NCwgCisgICAgMTA1MDk4LCAxMDUxMDIsIDEwNTEwNiwgMTA1MTEwLCAxMDUxMTQsIDEwNTExOCwgMTA1MTIyLCAxMDUxMjYsIDEwNTEzMCwgCisgICAgMTA1MTM0LCAxMDUxMzgsIDEwNTE0MiwgMTA1MTQ2LCAxMDUxNTAsIDEwNTE1NCwgMTA1MTU4LCAxMDUxNjIsIDEwNTE2NiwgCisgICAgMTA1MTcwLCAxMDUxNzQsIDEwNTE3OCwgMTA1MTgyLCAxMDUxODYsIDEwNTE5MCwgMTA1MTk0LCAxMDUxOTgsIDEwNTIwMiwgCisgICAgMTA1MjA2LCAxMDUyMTAsIDEwNTIxNCwgMTA1MjE4LCAxMDUyMjIsIDEwNTIyNiwgMTA1MjMwLCAxMDUyMzQsIDEwNTIzOCwgCisgICAgMTA1MjQyLCAxMDUyNDYsIDEwNTI1MCwgMTA1MjU0LCAxMDUyNTgsIDEwNTI2MiwgMTA1MjY2LCAxMDUyNzAsIDEwNTI3NCwgCisgICAgMTA1Mjc4LCAxMDUyODIsIDEwNTI4NiwgMTA1MjkwLCAxMDUyOTQsIDEwNTI5OCwgMTA1MzAyLCAxMDUzMDYsIDEwNTMxMCwgCisgICAgMTA1MzE0LCAxMDUzMTgsIDEwNTMyMiwgMTA1MzI2LCAxMDUzMzAsIDEwNTMzNCwgMTA1MzM4LCAxMDUzNDIsIDEwNTM0NiwgCisgICAgMTA1MzUwLCAxMDUzNTQsIDEwNTM1OCwgMTA1MzYyLCAxMDUzNjYsIDEwNTM3MCwgMTA1Mzc0LCAxMDUzNzgsIDEwNTM4MiwgCisgICAgMTA1Mzg2LCAxMDUzOTAsIDEwNTM5NCwgMTA1Mzk4LCAxMDU0MDIsIDEwNTQwNiwgMTA1NDEwLCAxMDU0MTQsIDEwNTQxOCwgCisgICAgMTA1NDIyLCAxMDU0MjYsIDEwNTQzMCwgMTA1NDM0LCAxMDU0MzgsIDEwNTQ0MiwgMTA1NDQ2LCAxMDU0NTAsIDEwNTQ1NCwgCisgICAgMTA1NDU4LCAxMDU0NjIsIDEwNTQ2NiwgMTA1NDcwLCAxMDU0NzQsIDEwNTQ3OCwgMTA1NDgyLCAxMDU0ODYsIDEwNTQ5MCwgCisgICAgMTA1NDk0LCAxMDU0OTgsIDEwNTUwMiwgMTA1NTA2LCAxMDU1MTAsIDEwNTUxNCwgMTA1NTE4LCAxMDU1MjIsIDEwNTUyNiwgCisgICAgMTA1NTMwLCAxMDU1MzQsIDEwNTUzOCwgMTA1NTQyLCAxMDU1NDYsIDEwNTU1MCwgMTA1NTU0LCAxMDU1NTgsIDEwNTU2MiwgCisgICAgMTA1NTY2LCAxMDU1NzAsIDEwNTU3NCwgMTA1NTc4LCAxMDU1ODIsIDEwNTU4NiwgMTA1NTkwLCAxMDU1OTQsIDEwNTU5OCwgCisgICAgMTA1NjAyLCAxMDU2MDYsIDEwNTYxMCwgMTA1NjE0LCAxMDU2MTgsIDEwNTYyMiwgMTA1NjI2LCAxMDU2MzAsIDEwNTYzNCwgCisgICAgMTA1NjM4LCAxMDU2NDIsIDEwNTY0NiwgMTA1NjUwLCAxMDU2NTQsIDEwNTY1OCwgMTA1NjYyLCAxMDU2NjYsIDEwNTY3MCwgCisgICAgMTA1Njc0LCAxMDU2NzgsIDEwNTY4MiwgMTA1Njg2LCAxMDU2OTAsIDEwNTY5NCwgMTA1Njk4LCAxMDU3MDIsIDEwNTcwNiwgCisgICAgMTA1NzEwLCAxMDU3MTQsIDEwNTcxOCwgMTA1NzIyLCAxMDU3MjYsIDEwNTczMCwgMTA1NzM0LCAxMDU3MzgsIDEwNTc0MiwgCisgICAgMTA1NzQ2LCAxMDU3NTAsIDEwNTc1NCwgMTA1NzU4LCAxMDU3NjIsIDEwNTc2NiwgMTA1NzcwLCAxMDU3NzQsIDEwNTc3OCwgCisgICAgMTA1NzgyLCAxMDU3ODYsIDEwNTc5MCwgMTA1Nzk0LCAxMDU3OTgsIDEwNTgwMiwgMTA1ODA2LCAxMDU4MTAsIDEwNTgxNCwgCisgICAgMTA1ODE4LCAxMDU4MjIsIDEwNTgyNiwgMTA1ODMwLCAxMDU4MzQsIDEwNTgzOCwgMTA1ODQyLCAxMDU4NDYsIDEwNTg1MCwgCisgICAgMTA1ODU0LCAxMDU4NTgsIDEwNTg2MiwgMTA1ODY2LCAxMDU4NzAsIDEwNTg3NCwgMTA1ODc4LCAxMDU4ODIsIDEwNTg4NiwgCisgICAgMTA1ODkwLCAxMDU4OTQsIDEwNTg5OCwgMTA1OTAyLCAxMDU5MDYsIDEwNTkxMCwgMTA1OTE0LCAxMDU5MTgsIDEwNTkyMiwgCisgICAgMTA1OTI2LCAxMDU5MzAsIDEwNTkzNCwgMTA1OTM4LCAxMDU5NDIsIDEwNTk0NiwgMTA1OTUwLCAxMDU5NTQsIDEwNTk1OCwgCisgICAgMTA1OTYyLCAxMDU5NjYsIDEwNTk3MCwgMTA1OTc0LCAxMDU5NzgsIDEwNTk4MiwgMTA1OTg2LCAxMDU5OTAsIDEwNTk5NCwgCisgICAgMTA1OTk4LCAxMDYwMDIsIDEwNjAwNiwgMTA2MDEwLCAxMDYwMTQsIDEwNjAxOCwgMTA2MDIyLCAxMDYwMjYsIDEwNjAzMCwgCisgICAgMTA2MDM0LCAxMDYwMzgsIDEwNjA0MiwgMTA2MDQ2LCAxMDYwNTAsIDEwNjA1NCwgMTA2MDU4LCAxMDYwNjIsIDEwNjA2NiwgCisgICAgMTA2MDcwLCAxMDYwNzQsIDEwNjA3OCwgMTA2MDgyLCAxMDYwODYsIDEwNjA5MCwgMTA2MDk0LCAxMDYwOTgsIDEwNjEwMiwgCisgICAgMTA2MTA2LCAxMDYxMTAsIDEwNjExNCwgMTA2MTE4LCAxMDYxMjIsIDEwNjEyNiwgMTA2MTMwLCAxMDYxMzQsIDEwNjEzOCwgCisgICAgMTA2MTQyLCAxMDYxNDYsIDEwNjE1MCwgMTA2MTU0LCAxMDYxNTgsIDEwNjE2MiwgMTA2MTY2LCAxMDYxNzAsIDEwNjE3NCwgCisgICAgMTA2MTc4LCAxMDYxODIsIDEwNjE4NiwgMTA2MTkwLCAxMDYxOTQsIDEwNjE5OCwgMTA2MjAyLCAxMDYyMDYsIDEwNjIxMCwgCisgICAgMTA2MjE0LCAxMDYyMTgsIDEwNjIyMiwgMTA2MjI2LCAxMDYyMzAsIDEwNjIzNCwgMTA2MjM4LCAxMDYyNDIsIDEwNjI0NiwgCisgICAgMTA2MjUwLCAxMDYyNTQsIDEwNjI1OCwgMTA2MjYyLCAxMDYyNjYsIDEwNjI3MCwgMTA2Mjc0LCAxMDYyNzgsIDEwNjI4MiwgCisgICAgMTA2Mjg2LCAxMDYyOTAsIDEwNjI5NCwgMTA2Mjk4LCAxMDYzMDIsIDEwNjMwNiwgMTA2MzEwLCAxMDYzMTQsIDEwNjMxOCwgCisgICAgMTA2MzIyLCAxMDYzMjYsIDEwNjMzMCwgMTA2MzM0LCAxMDYzMzgsIDEwNjM0MiwgMTA2MzQ2LCAxMDYzNTAsIDEwNjM1NCwgCisgICAgMTA2MzU4LCAxMDYzNjIsIDEwNjM2NiwgMTA2MzcwLCAxMDYzNzQsIDEwNjM3OCwgMTA2MzgyLCAxMDYzODYsIDEwNjM5MCwgCisgICAgMTA2Mzk0LCAxMDYzOTgsIDEwNjQwMiwgMTA2NDA2LCAxMDY0MTAsIDEwNjQxNCwgMTA2NDE4LCAxMDY0MjIsIDEwNjQyNiwgCisgICAgMTA2NDMwLCAxMDY0MzQsIDEwNjQzOCwgMTA2NDQyLCAxMDY0NDYsIDEwNjQ1MCwgMTA2NDU0LCAxMDY0NTgsIDEwNjQ2MiwgCisgICAgMTA2NDY2LCAxMDY0NzAsIDEwNjQ3NCwgMTA2NDc4LCAxMDY0ODIsIDEwNjQ4NiwgMTA2NDkwLCAxMDY0OTQsIDEwNjQ5OCwgCisgICAgMTA2NTAyLCAxMDY1MDYsIDEwNjUxMCwgMTA2NTE0LCAxMDY1MTgsIDEwNjUyMiwgMTA2NTI2LCAxMDY1MzAsIDEwNjUzNCwgCisgICAgMTA2NTM4LCAxMDY1NDIsIDEwNjU0NiwgMTA2NTUwLCAxMDY1NTQsIDEwNjU1OCwgMTA2NTYyLCAxMDY1NjYsIDEwNjU3MCwgCisgICAgMTA2NTc0LCAxMDY1NzgsIDEwNjU4MiwgMTA2NTg2LCAxMDY1OTAsIDEwNjU5NCwgMTA2NTk4LCAxMDY2MDIsIDEwNjYwNiwgCisgICAgMTA2NjEwLCAxMDY2MTQsIDEwNjYxOCwgMTA2NjIyLCAxMDY2MjYsIDEwNjYzMCwgMTA2NjM0LCAxMDY2MzgsIDEwNjY0MiwgCisgICAgMTA2NjQ2LCAxMDY2NTAsIDEwNjY1NCwgMTA2NjU4LCAxMDY2NjIsIDEwNjY2NiwgMTA2NjcwLCAxMDY2NzQsIDEwNjY3OCwgCisgICAgMTA2NjgyLCAxMDY2ODYsIDEwNjY5MCwgMTA2Njk0LCAxMDY2OTgsIDEwNjcwMiwgMTA2NzA2LCAxMDY3MTAsIDEwNjcxNCwgCisgICAgMTA2NzE4LCAxMDY3MjIsIDEwNjcyNiwgMTA2NzMwLCAxMDY3MzQsIDEwNjczOCwgMTA2NzQyLCAxMDY3NDYsIDEwNjc1MCwgCisgICAgMTA2NzU0LCAxMDY3NTgsIDEwNjc2MiwgMTA2NzY2LCAxMDY3NzAsIDEwNjc3NCwgMTA2Nzc4LCAxMDY3ODIsIDEwNjc4NiwgCisgICAgMTA2NzkwLCAxMDY3OTQsIDEwNjc5OCwgMTA2ODAyLCAxMDY4MDYsIDEwNjgxMCwgMTA2ODE0LCAxMDY4MTgsIDEwNjgyMiwgCisgICAgMTA2ODI2LCAxMDY4MzAsIDEwNjgzNCwgMTA2ODM4LCAxMDY4NDIsIDEwNjg0NiwgMTA2ODUwLCAxMDY4NTQsIDEwNjg1OCwgCisgICAgMTA2ODYyLCAxMDY4NjYsIDEwNjg3MCwgMTA2ODc0LCAxMDY4NzgsIDEwNjg4MiwgMTA2ODg2LCAxMDY4OTAsIDEwNjg5NCwgCisgICAgMTA2ODk4LCAxMDY5MDIsIDEwNjkwNiwgMTA2OTEwLCAxMDY5MTQsIDEwNjkxOCwgMTA2OTIyLCAxMDY5MjYsIDEwNjkzMCwgCisgICAgMTA2OTM0LCAxMDY5MzgsIDEwNjk0MiwgMTA2OTQ2LCAxMDY5NTAsIDEwNjk1NCwgMTA2OTU4LCAxMDY5NjIsIDEwNjk2NiwgCisgICAgMTA2OTcwLCAxMDY5NzQsIDEwNjk3OCwgMTA2OTgyLCAxMDY5ODYsIDEwNjk5MCwgMTA2OTk0LCAxMDY5OTgsIDEwNzAwMiwgCisgICAgMTA3MDA2LCAxMDcwMTAsIDEwNzAxNCwgMTA3MDE4LCAxMDcwMjIsIDEwNzAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTA3MDMwLCAxMDcwMzcsIDEwNzA0NCwgMTA3MDUzLCAxMDcwNjIsIDEwNzA2OSwgMTA3MDc0LCAxMDcwODEsIAorICAgIDEwNzA4OCwgMTA3MDk3LCAxMDcxMDgsIDEwNzExOSwgMTA3MTI0LCAxMDcxMzEsIDEwNzEzNiwgMTA3MTQxLCAxMDcxNDYsIAorICAgIDEwNzE1MSwgMTA3MTU2LCAxMDcxNjEsIDEwNzE2NiwgMTA3MTcxLCAxMDcxNzYsIDEwNzE4MSwgMTA3MTg2LCAxMDcxOTMsIAorICAgIDEwNzIwMCwgMTA3MjA1LCAxMDcyMTAsIDEwNzIxNSwgMTA3MjIwLCAxMDcyMjcsIDEwNzIzNCwgMTA3MjQyLCAxMDcyNDcsIAorICAgIDEwNzI1NCwgMTA3MjU5LCAxMDcyNjQsIDEwNzI2OSwgMTA3Mjc0LCAxMDcyNzksIDEwNzI4NiwgMTA3MjkzLCAxMDcyOTgsIAorICAgIDEwNzMwMywgMTA3MzA4LCAxMDczMTMsIDEwNzMxOCwgMTA3MzIzLCAxMDczMjgsIDEwNzMzMywgMTA3MzM4LCAxMDczNDMsIAorICAgIDEwNzM0OCwgMTA3MzUzLCAxMDczNTgsIDEwNzM2MywgMTA3MzY4LCAxMDczNzMsIDEwNzM3OCwgMTA3MzgzLCAxMDczODgsIAorICAgIDEwNzM5NSwgMTA3NDAwLCAxMDc0MDUsIDEwNzQxNCwgMTA3NDIxLCAxMDc0MjYsIDEwNzQzMSwgMTA3NDM2LCAxMDc0NDEsIAorICAgIDEwNzQ0NiwgMTA3NDUxLCAxMDc0NTYsIDEwNzQ2MSwgMTA3NDY2LCAxMDc0NzEsIDEwNzQ3NiwgMTA3NDgxLCAxMDc0ODYsIAorICAgIDEwNzQ5MSwgMTA3NDk2LCAxMDc1MDEsIDEwNzUwNiwgMTA3NTExLCAxMDc1MTYsIDEwNzUyMSwgMTA3NTI2LCAxMDc1MzIsIAorICAgIDEwNzU0MCwgMTA3NTQ2LCAxMDc1NTQsIDEwNzU2MiwgMTA3NTcwLCAxMDc1NzYsIDEwNzU4MiwgMTA3NTg4LCAxMDc1OTQsIAorICAgIDEwNzYwMCwgMTA3NjA4LCAxMDc2MTgsIDEwNzYyNiwgMTA3NjM0LCAxMDc2NDAsIDEwNzY0NiwgMTA3NjU0LCAxMDc2NjIsIAorICAgIDEwNzY2OCwgMTA3Njc2LCAxMDc2ODQsIDEwNzY5MiwgMTA3Njk4LCAxMDc3MDQsIDEwNzcxMCwgMTA3NzE2LCAxMDc3MjIsIAorICAgIDEwNzcyOCwgMTA3NzM2LCAxMDc3NDQsIDEwNzc1MCwgMTA3NzU2LCAxMDc3NjIsIDEwNzc2OCwgMTA3Nzc0LCAxMDc3ODIsIAorICAgIDEwNzc4OCwgMTA3Nzk0LCAxMDc4MDAsIDEwNzgwNiwgMTA3ODEyLCAxMDc4MTgsIDEwNzgyNiwgMTA3ODMyLCAxMDc4MzgsIAorICAgIDEwNzg0NCwgMTA3ODUwLCAxMDc4NTgsIDEwNzg2NiwgMTA3ODcyLCAxMDc4NzgsIDEwNzg4NCwgMTA3ODg5LCAxMDc4OTUsIAorICAgIDEwNzkwMSwgMTA3OTA4LCAxMDc5MTMsIDEwNzkxOCwgMTA3OTIzLCAxMDc5MjgsIDEwNzkzMywgMTA3OTM4LCAxMDc5NDMsIAorICAgIDEwNzk0OCwgMTA3OTUzLCAxMDc5NjIsIDEwNzk2OSwgMTA3OTc0LCAxMDc5NzksIDEwNzk4NCwgMTA3OTkxLCAxMDc5OTYsIAorICAgIDEwODAwMSwgMTA4MDA2LCAxMDgwMTMsIDEwODAxOCwgMTA4MDIzLCAxMDgwMjgsIDEwODAzMywgMTA4MDM4LCAxMDgwNDMsIAorICAgIDEwODA0OCwgMTA4MDUzLCAxMDgwNTgsIDEwODA2MywgMTA4MDY4LCAxMDgwNzUsIDEwODA4MCwgMTA4MDg3LCAxMDgwOTIsIAorICAgIDEwODA5NywgMTA4MTA0LCAxMDgxMDksIDEwODExNCwgMTA4MTE5LCAxMDgxMjQsIDEwODEyOSwgMTA4MTM0LCAxMDgxMzksIAorICAgIDEwODE0NCwgMTA4MTQ5LCAxMDgxNTQsIDEwODE1OSwgMTA4MTY0LCAxMDgxNjksIDEwODE3NCwgMTA4MTc5LCAxMDgxODQsIAorICAgIDEwODE4OSwgMTA4MTk0LCAxMDgxOTksIDEwODIwNiwgMTA4MjExLCAxMDgyMTYsIDEwODIyMSwgMTA4MjI2LCAxMDgyMzEsIAorICAgIDEwODIzNiwgMTA4MjQxLCAxMDgyNDYsIDEwODI1MSwgMTA4MjU2LCAxMDgyNjEsIDEwODI2NiwgMTA4MjcxLCAxMDgyNzgsIAorICAgIDEwODI4MywgMTA4Mjg4LCAxMDgyOTUsIDEwODMwMCwgMTA4MzA1LCAxMDgzMTAsIDEwODMxNSwgMTA4MzIwLCAxMDgzMjUsIAorICAgIDEwODMzMCwgMTA4MzM1LCAxMDgzNDAsIDEwODM0NSwgMTA4MzUyLCAxMDgzNTcsIDEwODM2MiwgMTA4MzY3LCAxMDgzNzIsIAorICAgIDEwODM3NywgMTA4Mzg0LCAxMDgzOTEsIDEwODM5NiwgMTA4NDAxLCAxMDg0MDYsIDEwODQxMSwgMTA4NDE2LCAxMDg0MjEsIAorICAgIDEwODQyNiwgMTA4NDMxLCAxMDg0MzYsIDEwODQ0MSwgMTA4NDQ2LCAxMDg0NTEsIDEwODQ1NiwgMTA4NDYxLCAxMDg0NjYsIAorICAgIDEwODQ3MSwgMTA4NDc2LCAxMDg0ODEsIDEwODQ4NiwgMTA4NDkxLCAxMDg0OTYsIDEwODUwMSwgMTA4NTA2LCAxMDg1MTEsIAorICAgIDEwODUxNiwgMTA4NTIxLCAxMDg1MjYsIDEwODUzMSwgMTA4NTM2LCAxMDg1NDEsIDEwODU0NiwgMTA4NTUxLCAxMDg1NTYsIAorICAgIDEwODU2MSwgMTA4NTY2LCAxMDg1NzEsIDEwODU3OCwgMTA4NTgzLCAxMDg1ODgsIDEwODU5MywgMTA4NTk4LCAxMDg2MDMsIAorICAgIDEwODYwOCwgMTA4NjEzLCAxMDg2MTgsIDEwODYyMywgMTA4NjI4LCAxMDg2MzMsIDEwODYzOCwgMTA4NjQzLCAxMDg2NDgsIAorICAgIDEwODY1MywgMTA4NjU4LCAxMDg2NjMsIDEwODY2OCwgMTA4NjczLCAxMDg2NzgsIDEwODY4MywgMTA4Njg4LCAxMDg2OTMsIAorICAgIDEwODY5OCwgMTA4NzAzLCAxMDg3MDgsIDEwODcxMywgMTA4NzE4LCAxMDg3MjMsIDEwODcyOCwgMTA4NzMzLCAxMDg3MzgsIAorICAgIDEwODc0MywgMTA4NzQ4LCAxMDg3NTMsIDEwODc1OCwgMTA4NzYzLCAxMDg3NjgsIDEwODc3MywgMTA4Nzc4LCAxMDg3ODMsIAorICAgIDEwODc4OCwgMTA4NzkzLCAxMDg3OTgsIDEwODgwMywgMTA4ODA4LCAxMDg4MTMsIDEwODgxOCwgMTA4ODIzLCAxMDg4MjgsIAorICAgIDEwODgzMywgMTA4ODM4LCAxMDg4NDMsIDEwODg0OCwgMTA4ODUzLCAxMDg4NTgsIDEwODg2MywgMTA4ODY4LCAxMDg4NzUsIAorICAgIDEwODg4MCwgMTA4ODg1LCAxMDg4OTAsIDEwODg5NSwgMTA4OTAwLCAxMDg5MDUsIDEwODkwOSwgMTA4OTE0LCAxMDg5MTksIAorICAgIDEwODkyNCwgMTA4OTI5LCAxMDg5MzQsIDEwODkzOSwgMTA4OTQ0LCAxMDg5NDksIDEwODk1NCwgMTA4OTU5LCAxMDg5NjQsIAorICAgIDEwODk2OSwgMTA4OTc0LCAxMDg5NzksIDEwODk4NiwgMTA4OTkxLCAxMDg5OTYsIDEwOTAwMiwgMTA5MDA3LCAxMDkwMTIsIAorICAgIDEwOTAxNywgMTA5MDIyLCAxMDkwMjcsIDEwOTAzMiwgMTA5MDM3LCAxMDkwNDIsIDEwOTA0NywgMTA5MDUyLCAxMDkwNTcsIAorICAgIDEwOTA2MiwgMTA5MDY3LCAxMDkwNzIsIDEwOTA3NywgMTA5MDgyLCAxMDkwODcsIDEwOTA5MiwgMTA5MDk3LCAxMDkxMDIsIAorICAgIDEwOTEwNywgMTA5MTEyLCAxMDkxMTcsIDEwOTEyMiwgMTA5MTI3LCAxMDkxMzIsIDEwOTEzNywgMTA5MTQyLCAxMDkxNDcsIAorICAgIDEwOTE1MiwgMTA5MTU3LCAxMDkxNjIsIDEwOTE2NywgMTA5MTcyLCAxMDkxNzcsIDEwOTE4MiwgMTA5MTg3LCAxMDkxOTIsIAorICAgIDEwOTE5NywgMTA5MjAyLCAxMDkyMDcsIDEwOTIxMiwgMTA5MjE3LCAxMDkyMjQsIDEwOTIyOSwgMTA5MjM0LCAxMDkyNDEsIAorICAgIDEwOTI0OCwgMTA5MjUzLCAxMDkyNTgsIDEwOTI2MywgMTA5MjY4LCAxMDkyNzMsIDEwOTI3OCwgMTA5MjgzLCAxMDkyODgsIAorICAgIDEwOTI5MywgMTA5Mjk4LCAxMDkzMDMsIDEwOTMwOCwgMTA5MzEzLCAxMDkzMTgsIDEwOTMyMywgMTA5MzI4LCAxMDkzMzMsIAorICAgIDEwOTMzOCwgMTA5MzQzLCAxMDkzNDgsIDEwOTM1MywgMTA5MzU4LCAxMDkzNjMsIDEwOTM2OCwgMTA5MzczLCAxMDkzODAsIAorICAgIDEwOTM4NSwgMTA5MzkwLCAxMDkzOTUsIDEwOTQwMCwgMTA5NDA1LCAxMDk0MTAsIDEwOTQxNSwgMTA5NDIwLCAxMDk0MjUsIAorICAgIDEwOTQzMCwgMTA5NDM1LCAxMDk0NDAsIDEwOTQ0NSwgMTA5NDUwLCAxMDk0NTUsIDEwOTQ2MCwgMTA5NDY1LCAxMDk0NzAsIAorICAgIDEwOTQ3NywgMTA5NDgyLCAxMDk0ODcsIDEwOTQ5MiwgMTA5NDk3LCAxMDk1MDIsIDEwOTUwNywgMTA5NTEyLCAxMDk1MTgsIAorICAgIDEwOTUyMywgMTA5NTI4LCAxMDk1MzMsIDEwOTUzOCwgMTA5NTQzLCAxMDk1NDgsIDEwOTU1MywgMTA5NTU4LCAxMDk1NjUsIAorICAgIDEwOTU3MiwgMTA5NTc3LCAxMDk1ODIsIDEwOTU4NiwgMTA5NTkxLCAxMDk1OTUsIDEwOTU5OSwgMTA5NjA0LCAxMDk2MTEsIAorICAgIDEwOTYxNiwgMTA5NjIxLCAxMDk2MzAsIDEwOTYzNSwgMTA5NjQwLCAxMDk2NDUsIDEwOTY1MCwgMTA5NjU3LCAxMDk2NjQsIAorICAgIDEwOTY2OSwgMTA5Njc0LCAxMDk2NzksIDEwOTY4NCwgMTA5NjkxLCAxMDk2OTYsIDEwOTcwMSwgMTA5NzA2LCAxMDk3MTEsIAorICAgIDEwOTcxNiwgMTA5NzIxLCAxMDk3MjYsIDEwOTczMSwgMTA5NzM2LCAxMDk3NDEsIDEwOTc0NiwgMTA5NzUxLCAxMDk3NTgsIAorICAgIDEwOTc2MiwgMTA5NzY3LCAxMDk3NzIsIDEwOTc3NywgMTA5NzgyLCAxMDk3ODYsIDEwOTc5MSwgMTA5Nzk2LCAxMDk4MDEsIAorICAgIDEwOTgwNiwgMTA5ODExLCAxMDk4MTYsIDEwOTgyMSwgMTA5ODI2LCAxMDk4MzEsIDEwOTgzNywgMTA5ODQzLCAxMDk4NDksIAorICAgIDEwOTg1NSwgMTA5ODYxLCAxMDk4NjcsIDEwOTg3MywgMTA5ODc5LCAxMDk4ODUsIDEwOTg5MSwgMTA5ODk3LCAxMDk5MDMsIAorICAgIDEwOTkwOCwgMTA5OTE0LCAxMDk5MjAsIDEwOTkyNiwgMTA5OTMyLCAxMDk5MzgsIDEwOTk0NCwgMTA5OTUwLCAxMDk5NTYsIAorICAgIDEwOTk2MiwgMTA5OTY4LCAxMDk5NzQsIDEwOTk3OSwgMTA5OTg1LCAxMDk5OTEsIDEwOTk5NywgMTEwMDAzLCAxMTAwMDksIAorICAgIDExMDAxNSwgMTEwMDIxLCAxMTAwMjcsIDExMDAzMywgMTEwMDM5LCAxMTAwNDUsIDExMDA1MSwgMTEwMDU3LCAxMTAwNjMsIAorICAgIDExMDA2OSwgMTEwMDc1LCAxMTAwODEsIDExMDA4NywgMTEwMDkzLCAxMTAwOTksIDExMDEwNCwgMTEwMTEwLCAxMTAxMTYsIAorICAgIDExMDEyMiwgMTEwMTI4LCAxMTAxMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDE0MCwgMTEwMTQzLCAxMTAxNDcsIDExMDE1MSwgMTEwMTU1LCAxMTAxNTgsIAorICAgIDExMDE2MiwgMTEwMTY3LCAxMTAxNzEsIDExMDE3NSwgMTEwMTc5LCAxMTAxODMsIDExMDE4NywgMTEwMTkyLCAxMTAxOTcsIAorICAgIDExMDIwMSwgMTEwMjA1LCAxMTAyMDgsIDExMDIxMiwgMTEwMjE3LCAxMTAyMjIsIDExMDIyNiwgMTEwMjMwLCAxMTAyMzQsIAorICAgIDExMDIzOCwgMTEwMjQyLCAxMTAyNDYsIDExMDI1MCwgMTEwMjU0LCAxMTAyNTgsIDExMDI2MiwgMTEwMjY1LCAxMTAyNjksIAorICAgIDExMDI3MywgMTEwMjc3LCAxMTAyODEsIDExMDI4NSwgMTEwMjg5LCAxMTAyOTUsIDExMDI5OCwgMTEwMzAyLCAxMTAzMDYsIAorICAgIDExMDMxMCwgMTEwMzE0LCAxMTAzMTgsIDExMDMyMiwgMTEwMzI2LCAxMTAzMzAsIDExMDMzNCwgMTEwMzM5LCAxMTAzNDQsIAorICAgIDExMDM1MCwgMTEwMzU0LCAxMTAzNTgsIDExMDM2MiwgMTEwMzY2LCAxMTAzNzAsIDExMDM3NCwgMTEwMzc5LCAxMTAzODIsIAorICAgIDExMDM4NiwgMTEwMzkwLCAxMTAzOTQsIDExMDM5OCwgMTEwNDA0LCAxMTA0MDgsIDExMDQxMiwgMTEwNDE2LCAxMTA0MjAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDQyNCwgMTEwNDI4LCAxMTA0MzIsIDExMDQzOCwgMTEwNDQ0LCAKKyAgICAxMTA0NDgsIDExMDQ1MywgMTEwNDU4LCAxMTA0NjMsIDExMDQ2OCwgMTEwNDcyLCAxMTA0NzcsIDExMDQ4MiwgMTEwNDg3LCAKKyAgICAxMTA0OTEsIDExMDQ5NiwgMTEwNTAxLCAxMTA1MDYsIDExMDUxMCwgMTEwNTE1LCAxMTA1MjAsIDExMDUyNSwgMTEwNTMwLCAKKyAgICAxMTA1MzUsIDExMDU0MCwgMTEwNTQ1LCAxMTA1NTAsIDExMDU1NCwgMTEwNTU5LCAxMTA1NjQsIDExMDU2OSwgMTEwNTc0LCAKKyAgICAxMTA1NzksIDExMDU4NCwgMTEwNTg5LCAxMTA1OTQsIDExMDU5OSwgMTEwNjA0LCAxMTA2MDksIDExMDYxNiwgMTEwNjIxLCAKKyAgICAxMTA2MjgsIDExMDYzMywgMTEwNjM4LCAxMTA2NDMsIDExMDY0OCwgMTEwNjUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA2NTgsIDExMDY2MiwgMTEwNjY4LCAxMTA2NzEsIDExMDY3NCwgMTEwNjc4LCAKKyAgICAxMTA2ODIsIDExMDY4NiwgMTEwNjkwLCAxMTA2OTQsIDExMDY5OCwgMTEwNzAyLCAxMTA3MDgsIDExMDcxNCwgMTEwNzIwLCAKKyAgICAxMTA3MjYsIDExMDczMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTEwNzM4LCAxMTA3NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDc0OSwgMTEwNzU0LCAxMTA3NTksIAorICAgIDExMDc2NCwgMTEwNzcxLCAxMTA3NzgsIDExMDc4NSwgMTEwNzkyLCAxMTA3OTcsIDExMDgwMiwgMTEwODA3LCAxMTA4MTIsIAorICAgIDExMDgxOSwgMTEwODI0LCAxMTA4MzEsIDExMDgzOCwgMTEwODQzLCAxMTA4NDgsIDExMDg1MywgMTEwODYwLCAxMTA4NjUsIAorICAgIDExMDg3MCwgMTEwODc3LCAxMTA4ODQsIDExMDg4OSwgMTEwODk0LCAxMTA4OTksIDExMDkwNiwgMTEwOTEzLCAxMTA5MjAsIAorICAgIDExMDkyNSwgMTEwOTMwLCAxMTA5MzcsIDExMDk0NCwgMTEwOTUxLCAxMTA5NTgsIDExMDk2MywgMTEwOTY4LCAxMTA5NzMsIAorICAgIDExMDk4MCwgMTEwOTg1LCAxMTA5OTAsIDExMDk5NSwgMTExMDAyLCAxMTEwMTEsIDExMTAxOCwgMTExMDIzLCAxMTEwMjgsIAorICAgIDExMTAzMywgMTExMDM4LCAxMTEwNDMsIDExMTA0OCwgMTExMDU3LCAxMTEwNjQsIDExMTA2OSwgMTExMDc2LCAxMTEwODMsIAorICAgIDExMTA4OCwgMTExMDkzLCAxMTEwOTgsIDExMTEwNSwgMTExMTEwLCAxMTExMTcsIDExMTEyNCwgMTExMTI5LCAxMTExMzQsIAorICAgIDExMTEzOSwgMTExMTQ2LCAxMTExNTMsIDExMTE1OCwgMTExMTYzLCAxMTExNzAsIDExMTE3NywgMTExMTg0LCAxMTExODksIAorICAgIDExMTE5NCwgMTExMTk5LCAxMTEyMDQsIDExMTIxMSwgMTExMjIwLCAxMTEyMjksIDExMTIzNCwgMTExMjQxLCAxMTEyNTAsIAorICAgIDExMTI1NSwgMTExMjYwLCAxMTEyNjUsIDExMTI3MCwgMTExMjc3LCAxMTEyODQsIDExMTI5MSwgMTExMjk4LCAxMTEzMDMsIAorICAgIDExMTMwOCwgMTExMzEzLCAxMTEzMjAsIDExMTMyNywgMTExMzM0LCAxMTEzMzksIDExMTM0NCwgMTExMzUxLCAxMTEzNTYsIAorICAgIDExMTM2MywgMTExMzY4LCAxMTEzNzUsIDExMTM4MCwgMTExMzg3LCAxMTEzOTQsIDExMTM5OSwgMTExNDA0LCAxMTE0MDksIAorICAgIDExMTQxNCwgMTExNDE5LCAxMTE0MjQsIDExMTQyOSwgMTExNDM0LCAxMTE0MzksIDExMTQ0NiwgMTExNDUzLCAxMTE0NjAsIAorICAgIDExMTQ2NywgMTExNDc0LCAxMTE0ODMsIDExMTQ4OCwgMTExNDkzLCAxMTE1MDAsIDExMTUwNywgMTExNTEyLCAxMTE1MTksIAorICAgIDExMTUyNiwgMTExNTMzLCAxMTE1NDAsIDExMTU0NywgMTExNTU0LCAxMTE1NTksIDExMTU2NCwgMTExNTY5LCAxMTE1NzQsIAorICAgIDExMTU3OSwgMTExNTg4LCAxMTE1OTcsIDExMTYwNiwgMTExNjE1LCAxMTE2MjQsIDExMTYzMywgMTExNjQyLCAxMTE2NTEsIAorICAgIDExMTY1NiwgMTExNjY3LCAxMTE2NzgsIDExMTY4NywgMTExNjkyLCAxMTE2OTcsIDExMTcwMiwgMTExNzA3LCAxMTE3MTYsIAorICAgIDExMTcyMywgMTExNzMwLCAxMTE3MzcsIDExMTc0NCwgMTExNzUxLCAxMTE3NTgsIDExMTc2NywgMTExNzc2LCAxMTE3ODcsIAorICAgIDExMTc5NiwgMTExODA3LCAxMTE4MTYsIDExMTgyMywgMTExODMyLCAxMTE4NDMsIDExMTg1MiwgMTExODYxLCAxMTE4NzAsIAorICAgIDExMTg3OSwgMTExODg2LCAxMTE4OTMsIDExMTkwMCwgMTExOTA5LCAxMTE5MTgsIDExMTkyOSwgMTExOTM4LCAxMTE5NDcsIAorICAgIDExMTk1OCwgMTExOTYzLCAxMTE5NjgsIDExMTk3OSwgMTExOTg3LCAxMTE5OTYsIDExMjAwNSwgMTEyMDE0LCAxMTIwMjUsIAorICAgIDExMjAzNCwgMTEyMDQzLCAxMTIwNTQsIDExMjA2NSwgMTEyMDc2LCAxMTIwODcsIDExMjA5OCwgMTEyMTA5LCAxMTIxMTYsIAorICAgIDExMjEyMywgMTEyMTMwLCAxMTIxMzcsIDExMjE0OCwgMTEyMTU3LCAxMTIxNjQsIDExMjE3MSwgMTEyMTc4LCAxMTIxODksIAorICAgIDExMjIwMCwgMTEyMjExLCAxMTIyMjIsIDExMjIzMywgMTEyMjQ0LCAxMTIyNTUsIDExMjI2NiwgMTEyMjczLCAxMTIyODAsIAorICAgIDExMjI4OSwgMTEyMjk4LCAxMTIzMDUsIDExMjMxMiwgMTEyMzE5LCAxMTIzMjgsIDExMjMzNywgMTEyMzQ2LCAxMTIzNTMsIAorICAgIDExMjM2MiwgMTEyMzcxLCAxMTIzODAsIDExMjM4NywgMTEyMzk0LCAxMTIzOTksIDExMjQwNSwgMTEyNDEyLCAxMTI0MTksIAorICAgIDExMjQyNiwgMTEyNDMzLCAxMTI0NDAsIDExMjQ0NywgMTEyNDU2LCAxMTI0NjUsIDExMjQ3NCwgMTEyNDgzLCAxMTI0OTAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjQ5OSwgMTEyNTA1LCAxMTI1MTAsIDExMjUxNSwgMTEyNTIyLCAKKyAgICAxMTI1MjgsIDExMjUzNCwgMTEyNTQwLCAxMTI1NDYsIDExMjU1MiwgMTEyNTU4LCAxMTI1NjQsIDExMjU2OCwgMTEyNTcyLCAKKyAgICAxMTI1NzgsIDExMjU4NCwgMTEyNTkwLCAxMTI1OTQsIDExMjU5OSwgMTEyNjA0LCAxMTI2MDgsIDExMjYxMiwgMTEyNjE1LCAKKyAgICAxMTI2MjEsIDExMjYyNywgMTEyNjMzLCAxMTI2MzksIDExMjY0NSwgMTEyNjUxLCAxMTI2NTcsIDExMjY2MywgMTEyNjY5LCAKKyAgICAxMTI2NzksIDExMjY4OSwgMTEyNjk1LCAxMTI3MDEsIDExMjcxMSwgMTEyNzIxLCAxMTI3MjcsIDAsIDAsIDExMjczMywgCisgICAgMTEyNzQxLCAxMTI3NDYsIDExMjc1MSwgMTEyNzU3LCAxMTI3NjMsIDExMjc2OSwgMTEyNzc1LCAxMTI3ODEsIDExMjc4NywgCisgICAgMTEyNzk0LCAxMTI4MDEsIDExMjgwNywgMTEyODEzLCAxMTI4MTksIDExMjgyNSwgMTEyODMxLCAxMTI4MzcsIDExMjg0MywgCisgICAgMTEyODQ5LCAxMTI4NTQsIDExMjg2MCwgMTEyODY2LCAxMTI4NzIsIDExMjg3OCwgMTEyODg0LCAxMTI4OTMsIDExMjg5OSwgCisgICAgMTEyOTA0LCAxMTI5MTIsIDExMjkxOSwgMTEyOTI2LCAxMTI5MzUsIDExMjk0NCwgMTEyOTUzLCAxMTI5NjIsIDExMjk3MSwgCisgICAgMTEyOTgwLCAxMTI5ODksIDExMjk5OCwgMTEzMDA4LCAxMTMwMTgsIDExMzAyNiwgMTEzMDM0LCAxMTMwNDMsIDExMzA1MiwgCisgICAgMTEzMDU4LCAxMTMwNjQsIDExMzA3MCwgMTEzMDc2LCAxMTMwODQsIDExMzA5MiwgMTEzMDk2LCAxMTMxMDIsIDExMzEwNywgCisgICAgMTEzMTEzLCAxMTMxMTksIDExMzEyNSwgMTEzMTMxLCAxMTMxMzcsIDExMzE0NiwgMTEzMTUxLCAxMTMxNTgsIDExMzE2MywgCisgICAgMTEzMTY4LCAxMTMxNzMsIDExMzE3OSwgMTEzMTg1LCAxMTMxOTEsIDExMzE5OCwgMTEzMjAzLCAxMTMyMDgsIDExMzIxMywgCisgICAgMTEzMjE4LCAxMTMyMjMsIDExMzIyOSwgMTEzMjM1LCAxMTMyNDEsIDExMzI0NywgMTEzMjUzLCAxMTMyNTksIDExMzI2NSwgCisgICAgMTEzMjcxLCAxMTMyNzYsIDExMzI4MSwgMTEzMjg2LCAxMTMyOTEsIDExMzI5NiwgMTEzMzAxLCAxMTMzMDYsIDExMzMxMSwgCisgICAgMTEzMzE3LCAxMTMzMjMsIDExMzMyOCwgMTEzMzMzLCAxMTMzMzgsIDExMzM0MywgMTEzMzQ4LCAxMTMzNTQsIDExMzM2MSwgCisgICAgMTEzMzY1LCAxMTMzNjksIDExMzM3MywgMTEzMzc3LCAxMTMzODEsIDExMzM4NSwgMTEzMzg5LCAxMTMzOTMsIDExMzQwMSwgCisgICAgMTEzNDExLCAxMTM0MTUsIDExMzQxOSwgMTEzNDI1LCAxMTM0MzEsIDExMzQzNywgMTEzNDQzLCAxMTM0NDksIDExMzQ1NSwgCisgICAgMTEzNDYxLCAxMTM0NjcsIDExMzQ3MywgMTEzNDc5LCAxMTM0ODUsIDExMzQ5MSwgMTEzNDk3LCAxMTM1MDMsIDExMzUwNywgCisgICAgMTEzNTExLCAxMTM1MTgsIDExMzUyNCwgMTEzNTMwLCAxMTM1MzYsIDExMzU0MSwgMTEzNTQ4LCAxMTM1NTMsIDExMzU1OSwgCisgICAgMTEzNTY1LCAxMTM1NzEsIDExMzU3NywgMTEzNTgyLCAxMTM1ODYsIDExMzU5MiwgMTEzNTk2LCAxMTM2MDAsIDExMzYwNCwgCisgICAgMTEzNjEwLCAxMTM2MTYsIDExMzYyMCwgMTEzNjI2LCAxMTM2MzIsIDExMzYzOCwgMTEzNjQ0LCAxMTM2NTAsIDExMzY1OCwgCisgICAgMTEzNjY2LCAxMTM2NzIsIDExMzY3OCwgMTEzNjg0LCAxMTM2OTAsIDExMzcwMiwgMTEzNzE0LCAxMTM3MjgsIDExMzc0MCwgCisgICAgMTEzNzUyLCAxMTM3NjYsIDExMzc4MCwgMTEzNzk0LCAxMTM3OTgsIDExMzgwNiwgMTEzODE0LCAxMTM4MTksIDExMzgyMywgCisgICAgMTEzODI3LCAxMTM4MzEsIDExMzgzNSwgMTEzODM5LCAxMTM4NDMsIDExMzg0NywgMTEzODUzLCAxMTM4NTksIDExMzg2NSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzODcxLCAxMTM4NzcsIDExMzg4MywgMTEzODg5LCAxMTM4OTUsIAorICAgIDExMzkwMSwgMTEzOTA3LCAxMTM5MTMsIDExMzkxOSwgMTEzOTI1LCAxMTM5MzEsIDExMzkzNywgMTEzOTQzLCAxMTM5NDksIAorICAgIDExMzk1NSwgMTEzOTYxLCAxMTM5NjcsIDExMzk3MywgMTEzOTc5LCAxMTM5ODUsIDExMzk5MSwgMTEzOTk3LCAxMTQwMDMsIAorICAgIDExNDAwOSwgMTE0MDE1LCAxMTQwMjEsIDExNDAyNywgMTE0MDMzLCAxMTQwMzksIDExNDA0NSwgMTE0MDUxLCAxMTQwNTcsIAorICAgIDExNDA2MywgMTE0MDY5LCAxMTQwNzUsIDExNDA4MSwgMTE0MDg3LCAxMTQwOTMsIDExNDA5OSwgMTE0MTA1LCAxMTQxMTEsIAorICAgIDExNDExNywgMTE0MTIzLCAxMTQxMjksIDExNDEzNSwgMTE0MTQxLCAxMTQxNDcsIDExNDE1MywgMTE0MTU5LCAxMTQxNjUsIAorICAgIDExNDE3MSwgMTE0MTc3LCAxMTQxODMsIDExNDE4OSwgMTE0MTk1LCAxMTQyMDEsIDExNDIwNywgMTE0MjEzLCAxMTQyMTksIAorICAgIDExNDIyNSwgMTE0MjMxLCAxMTQyMzcsIDExNDI0MywgMTE0MjQ5LCAxMTQyNTUsIDExNDI2MSwgMTE0MjY3LCAxMTQyNzIsIAorICAgIDExNDI3NywgMTE0MjgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQyODYsIDExNDI5MSwgMTE0Mjk4LCAKKyAgICAxMTQzMDUsIDExNDMxMiwgMTE0MzE5LCAxMTQzMjQsIDExNDMyOCwgMTE0MzM0LCAxMTQzMzgsIDExNDM0MiwgMTE0MzQ4LCAKKyAgICAxMTQzNTIsIDExNDM1NiwgMTE0MzYwLCAxMTQzNjYsIDExNDM3MywgMTE0Mzc3LCAxMTQzODEsIDExNDM4NSwgMTE0Mzg5LCAKKyAgICAxMTQzOTMsIDExNDM5NywgMTE0NDAzLCAxMTQ0MDcsIDExNDQxMSwgMTE0NDE1LCAxMTQ0MTksIDExNDQyMywgMTE0NDI3LCAKKyAgICAxMTQ0MzEsIDExNDQzNSwgMTE0NDM5LCAxMTQ0NDMsIDExNDQ0NywgMTE0NDUxLCAxMTQ0NTYsIDExNDQ2MCwgMTE0NDY0LCAKKyAgICAxMTQ0NjgsIDExNDQ3MiwgMTE0NDc2LCAxMTQ0ODAsIDExNDQ4NCwgMTE0NDg4LCAxMTQ0OTIsIDExNDQ5OSwgMTE0NTAzLCAKKyAgICAxMTQ1MTEsIDExNDUxNSwgMTE0NTE5LCAxMTQ1MjMsIDExNDUyNywgMTE0NTMxLCAxMTQ1MzUsIDExNDUzOSwgMTE0NTQ2LCAKKyAgICAxMTQ1NTAsIDExNDU1NCwgMTE0NTU4LCAxMTQ1NjIsIDExNDU2NiwgMTE0NTcyLCAxMTQ1NzYsIDExNDU4MiwgMTE0NTg2LCAKKyAgICAxMTQ1OTAsIDExNDU5NCwgMTE0NTk4LCAxMTQ2MDIsIDExNDYwNiwgMTE0NjEwLCAxMTQ2MTQsIDExNDYxOCwgMTE0NjIyLCAKKyAgICAxMTQ2MjYsIDExNDYzMCwgMTE0NjM0LCAxMTQ2MzgsIDExNDY0MiwgMTE0NjQ2LCAxMTQ2NTAsIDExNDY1NCwgMTE0NjU4LCAKKyAgICAxMTQ2NjYsIDExNDY3MCwgMTE0Njc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ2NzgsIDExNDY4NiwgCisgICAgMTE0Njk0LCAxMTQ3MDIsIDExNDcxMCwgMTE0NzE4LCAxMTQ3MjYsIDExNDczNCwgMTE0NzQyLCAxMTQ3NTAsIDExNDc1OCwgCisgICAgMTE0NzY2LCAxMTQ3NzQsIDExNDc4MiwgMTE0NzkwLCAxMTQ3OTgsIDExNDgwNiwgMTE0ODE0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ4MjIsIDExNDgyNiwgMTE0ODMxLCAxMTQ4MzYsIDExNDg0MSwgMTE0ODQ1LCAKKyAgICAxMTQ4NTAsIDExNDg1NSwgMTE0ODYwLCAxMTQ4NjQsIDExNDg2OSwgMTE0ODc0LCAxMTQ4NzgsIDExNDg4MiwgMTE0ODg3LCAKKyAgICAxMTQ4OTEsIDExNDg5NiwgMTE0OTAxLCAxMTQ5MDUsIDExNDkxMCwgMTE0OTE1LCAxMTQ5MTksIDExNDkyNCwgMTE0OTI5LCAKKyAgICAxMTQ5MzQsIDExNDkzOSwgMTE0OTQ0LCAxMTQ5NDgsIDExNDk1MywgMTE0OTU4LCAxMTQ5NjMsIDExNDk2NywgMTE0OTcyLCAKKyAgICAxMTQ5NzcsIDExNDk4MiwgMTE0OTg2LCAxMTQ5OTEsIDExNDk5NiwgMTE1MDAwLCAxMTUwMDQsIDExNTAwOSwgMTE1MDEzLCAKKyAgICAxMTUwMTgsIDExNTAyMywgMTE1MDI3LCAxMTUwMzIsIDExNTAzNywgMTE1MDQxLCAxMTUwNDYsIDExNTA1MSwgMTE1MDU2LCAKKyAgICAxMTUwNjEsIDExNTA2NiwgMTE1MDcwLCAxMTUwNzUsIDExNTA4MCwgMTE1MDg1LCAxMTUwODksIDExNTA5NCwgMTE1MDk5LCAKKyAgICAxMTUxMDQsIDExNTEwOCwgMTE1MTEzLCAxMTUxMTgsIDExNTEyMiwgMTE1MTI2LCAxMTUxMzEsIDExNTEzNSwgMTE1MTQwLCAKKyAgICAxMTUxNDUsIDExNTE0OSwgMTE1MTU0LCAxMTUxNTksIDExNTE2MywgMTE1MTY4LCAxMTUxNzMsIDExNTE3OCwgMTE1MTgzLCAKKyAgICAxMTUxODgsIDExNTE5MiwgMTE1MTk3LCAxMTUyMDIsIDExNTIwNywgMTE1MjExLCAxMTUyMTYsIDAsIDExNTIyMSwgCisgICAgMTE1MjI1LCAxMTUyMzAsIDExNTIzNSwgMTE1MjM5LCAxMTUyNDMsIDExNTI0OCwgMTE1MjUyLCAxMTUyNTcsIDExNTI2MiwgCisgICAgMTE1MjY2LCAxMTUyNzEsIDExNTI3NiwgMTE1MjgwLCAxMTUyODUsIDExNTI5MCwgMTE1Mjk1LCAxMTUzMDAsIDExNTMwNSwgCisgICAgMTE1MzEwLCAxMTUzMTYsIDExNTMyMiwgMTE1MzI4LCAxMTUzMzMsIDExNTMzOSwgMTE1MzQ1LCAxMTUzNTEsIDExNTM1NiwgCisgICAgMTE1MzYyLCAxMTUzNjgsIDExNTM3MywgMTE1Mzc4LCAxMTUzODQsIDExNTM4OSwgMTE1Mzk1LCAxMTU0MDEsIDExNTQwNiwgCisgICAgMTE1NDEyLCAxMTU0MTgsIDExNTQyMywgMTE1NDI5LCAxMTU0MzUsIDExNTQ0MSwgMTE1NDQ3LCAxMTU0NTMsIDExNTQ1OCwgCisgICAgMTE1NDY0LCAxMTU0NzAsIDExNTQ3NiwgMTE1NDgxLCAxMTU0ODcsIDExNTQ5MywgMTE1NDk5LCAxMTU1MDQsIDExNTUxMCwgCisgICAgMTE1NTE2LCAxMTU1MjEsIDExNTUyNiwgMTE1NTMyLCAxMTU1MzcsIDExNTU0MywgMTE1NTQ5LCAxMTU1NTQsIDExNTU2MCwgCisgICAgMTE1NTY2LCAxMTU1NzEsIDExNTU3NywgMTE1NTgzLCAxMTU1ODksIDExNTU5NSwgMTE1NjAxLCAwLCAxMTU2MDUsIAorICAgIDExNTYxMCwgMCwgMCwgMTE1NjE1LCAwLCAwLCAxMTU2MjAsIDExNTYyNSwgMCwgMCwgMTE1NjMwLCAxMTU2MzUsIDExNTYzOSwgCisgICAgMTE1NjQ0LCAwLCAxMTU2NDksIDExNTY1NCwgMTE1NjU5LCAxMTU2NjMsIDExNTY2OCwgMTE1NjczLCAxMTU2NzgsIAorICAgIDExNTY4MywgMTE1Njg4LCAxMTU2OTIsIDExNTY5NywgMTE1NzAyLCAwLCAxMTU3MDcsIDAsIDExNTcxMiwgMTE1NzE3LCAKKyAgICAxMTU3MjEsIDExNTcyNiwgMTE1NzMxLCAxMTU3MzUsIDExNTczOSwgMCwgMTE1NzQ0LCAxMTU3NDksIDExNTc1NCwgCisgICAgMTE1NzU4LCAxMTU3NjMsIDExNTc2OCwgMTE1NzcyLCAxMTU3NzcsIDExNTc4MiwgMTE1Nzg3LCAxMTU3OTIsIDExNTc5NywgCisgICAgMTE1ODAyLCAxMTU4MDgsIDExNTgxNCwgMTE1ODIwLCAxMTU4MjUsIDExNTgzMSwgMTE1ODM3LCAxMTU4NDMsIDExNTg0OCwgCisgICAgMTE1ODU0LCAxMTU4NjAsIDExNTg2NSwgMTE1ODcwLCAxMTU4NzYsIDExNTg4MSwgMTE1ODg3LCAxMTU4OTMsIDExNTg5OCwgCisgICAgMTE1OTA0LCAxMTU5MTAsIDExNTkxNSwgMTE1OTIxLCAxMTU5MjcsIDExNTkzMywgMTE1OTM5LCAxMTU5NDUsIDExNTk1MCwgCisgICAgMTE1OTU2LCAxMTU5NjIsIDExNTk2OCwgMTE1OTczLCAxMTU5NzksIDExNTk4NSwgMTE1OTkxLCAxMTU5OTYsIDExNjAwMiwgCisgICAgMTE2MDA4LCAxMTYwMTMsIDExNjAxOCwgMTE2MDI0LCAxMTYwMjksIDExNjAzNSwgMTE2MDQxLCAxMTYwNDYsIDExNjA1MiwgCisgICAgMTE2MDU4LCAxMTYwNjMsIDExNjA2OSwgMTE2MDc1LCAxMTYwODEsIDExNjA4NywgMTE2MDkzLCAxMTYwOTcsIDAsIAorICAgIDExNjEwMiwgMTE2MTA3LCAxMTYxMTEsIDExNjExNiwgMCwgMCwgMTE2MTIxLCAxMTYxMjYsIDExNjEzMSwgMTE2MTM1LCAKKyAgICAxMTYxMzksIDExNjE0NCwgMTE2MTQ4LCAxMTYxNTMsIDAsIDExNjE1OCwgMTE2MTYzLCAxMTYxNjgsIDExNjE3MiwgCisgICAgMTE2MTc3LCAxMTYxODIsIDExNjE4NywgMCwgMTE2MTkyLCAxMTYxOTYsIDExNjIwMSwgMTE2MjA2LCAxMTYyMTEsIAorICAgIDExNjIxNSwgMTE2MjIwLCAxMTYyMjUsIDExNjIzMCwgMTE2MjM0LCAxMTYyMzksIDExNjI0NCwgMTE2MjQ4LCAxMTYyNTIsIAorICAgIDExNjI1NywgMTE2MjYxLCAxMTYyNjYsIDExNjI3MSwgMTE2Mjc1LCAxMTYyODAsIDExNjI4NSwgMTE2Mjg5LCAxMTYyOTQsIAorICAgIDExNjI5OSwgMTE2MzA0LCAxMTYzMDksIDExNjMxNCwgMTE2MzE4LCAwLCAxMTYzMjMsIDExNjMyOCwgMTE2MzMyLCAKKyAgICAxMTYzMzcsIDAsIDExNjM0MiwgMTE2MzQ2LCAxMTYzNTEsIDExNjM1NiwgMTE2MzYwLCAwLCAxMTYzNjQsIDAsIDAsIDAsIAorICAgIDExNjM2OCwgMTE2MzczLCAxMTYzNzgsIDExNjM4MiwgMTE2Mzg3LCAxMTYzOTIsIDExNjM5NywgMCwgMTE2NDAyLCAKKyAgICAxMTY0MDYsIDExNjQxMSwgMTE2NDE2LCAxMTY0MjEsIDExNjQyNSwgMTE2NDMwLCAxMTY0MzUsIDExNjQ0MCwgMTE2NDQ0LCAKKyAgICAxMTY0NDksIDExNjQ1NCwgMTE2NDU4LCAxMTY0NjIsIDExNjQ2NywgMTE2NDcxLCAxMTY0NzYsIDExNjQ4MSwgMTE2NDg1LCAKKyAgICAxMTY0OTAsIDExNjQ5NSwgMTE2NDk5LCAxMTY1MDQsIDExNjUwOSwgMTE2NTE0LCAxMTY1MTksIDExNjUyNCwgMTE2NTI5LCAKKyAgICAxMTY1MzUsIDExNjU0MSwgMTE2NTQ3LCAxMTY1NTIsIDExNjU1OCwgMTE2NTY0LCAxMTY1NzAsIDExNjU3NSwgMTE2NTgxLCAKKyAgICAxMTY1ODcsIDExNjU5MiwgMTE2NTk3LCAxMTY2MDMsIDExNjYwOCwgMTE2NjE0LCAxMTY2MjAsIDExNjYyNSwgMTE2NjMxLCAKKyAgICAxMTY2MzcsIDExNjY0MiwgMTE2NjQ4LCAxMTY2NTQsIDExNjY2MCwgMTE2NjY2LCAxMTY2NzIsIDExNjY3NywgMTE2NjgzLCAKKyAgICAxMTY2ODksIDExNjY5NSwgMTE2NzAwLCAxMTY3MDYsIDExNjcxMiwgMTE2NzE4LCAxMTY3MjMsIDExNjcyOSwgMTE2NzM1LCAKKyAgICAxMTY3NDAsIDExNjc0NSwgMTE2NzUxLCAxMTY3NTYsIDExNjc2MiwgMTE2NzY4LCAxMTY3NzMsIDExNjc3OSwgMTE2Nzg1LCAKKyAgICAxMTY3OTAsIDExNjc5NiwgMTE2ODAyLCAxMTY4MDgsIDExNjgxNCwgMTE2ODIwLCAxMTY4MjQsIDExNjgyOSwgMTE2ODM0LCAKKyAgICAxMTY4MzksIDExNjg0MywgMTE2ODQ4LCAxMTY4NTMsIDExNjg1OCwgMTE2ODYyLCAxMTY4NjcsIDExNjg3MiwgMTE2ODc2LCAKKyAgICAxMTY4ODAsIDExNjg4NSwgMTE2ODg5LCAxMTY4OTQsIDExNjg5OSwgMTE2OTAzLCAxMTY5MDgsIDExNjkxMywgMTE2OTE3LCAKKyAgICAxMTY5MjIsIDExNjkyNywgMTE2OTMyLCAxMTY5MzcsIDExNjk0MiwgMTE2OTQ2LCAxMTY5NTEsIDExNjk1NiwgMTE2OTYxLCAKKyAgICAxMTY5NjUsIDExNjk3MCwgMTE2OTc1LCAxMTY5ODAsIDExNjk4NCwgMTE2OTg5LCAxMTY5OTQsIDExNjk5OCwgMTE3MDAyLCAKKyAgICAxMTcwMDcsIDExNzAxMSwgMTE3MDE2LCAxMTcwMjEsIDExNzAyNSwgMTE3MDMwLCAxMTcwMzUsIDExNzAzOSwgMTE3MDQ0LCAKKyAgICAxMTcwNDksIDExNzA1NCwgMTE3MDU5LCAxMTcwNjQsIDExNzA2OSwgMTE3MDc1LCAxMTcwODEsIDExNzA4NywgMTE3MDkyLCAKKyAgICAxMTcwOTgsIDExNzEwNCwgMTE3MTEwLCAxMTcxMTUsIDExNzEyMSwgMTE3MTI3LCAxMTcxMzIsIDExNzEzNywgMTE3MTQzLCAKKyAgICAxMTcxNDgsIDExNzE1NCwgMTE3MTYwLCAxMTcxNjUsIDExNzE3MSwgMTE3MTc3LCAxMTcxODIsIDExNzE4OCwgMTE3MTk0LCAKKyAgICAxMTcyMDAsIDExNzIwNiwgMTE3MjEyLCAxMTcyMTcsIDExNzIyMywgMTE3MjI5LCAxMTcyMzUsIDExNzI0MCwgMTE3MjQ2LCAKKyAgICAxMTcyNTIsIDExNzI1OCwgMTE3MjYzLCAxMTcyNjksIDExNzI3NSwgMTE3MjgwLCAxMTcyODUsIDExNzI5MSwgMTE3Mjk2LCAKKyAgICAxMTczMDIsIDExNzMwOCwgMTE3MzEzLCAxMTczMTksIDExNzMyNSwgMTE3MzMwLCAxMTczMzYsIDExNzM0MiwgMTE3MzQ4LCAKKyAgICAxMTczNTQsIDExNzM2MCwgMTE3MzY1LCAxMTczNzEsIDExNzM3NywgMTE3MzgzLCAxMTczODgsIDExNzM5NCwgMTE3NDAwLCAKKyAgICAxMTc0MDYsIDExNzQxMSwgMTE3NDE3LCAxMTc0MjMsIDExNzQyOCwgMTE3NDMzLCAxMTc0MzksIDExNzQ0NCwgMTE3NDUwLCAKKyAgICAxMTc0NTYsIDExNzQ2MSwgMTE3NDY3LCAxMTc0NzMsIDExNzQ3OCwgMTE3NDg0LCAxMTc0OTAsIDExNzQ5NiwgMTE3NTAyLCAKKyAgICAxMTc1MDgsIDExNzUxMywgMTE3NTE5LCAxMTc1MjUsIDExNzUzMSwgMTE3NTM2LCAxMTc1NDIsIDExNzU0OCwgMTE3NTU0LCAKKyAgICAxMTc1NTksIDExNzU2NSwgMTE3NTcxLCAxMTc1NzYsIDExNzU4MSwgMTE3NTg3LCAxMTc1OTIsIDExNzU5OCwgMTE3NjA0LCAKKyAgICAxMTc2MDksIDExNzYxNSwgMTE3NjIxLCAxMTc2MjYsIDExNzYzMiwgMTE3NjM4LCAxMTc2NDQsIDExNzY1MCwgMTE3NjU2LCAKKyAgICAxMTc2NjIsIDExNzY2OSwgMTE3Njc2LCAxMTc2ODMsIDExNzY4OSwgMTE3Njk2LCAxMTc3MDMsIDExNzcxMCwgMTE3NzE2LCAKKyAgICAxMTc3MjMsIDExNzczMCwgMTE3NzM2LCAxMTc3NDIsIDExNzc0OSwgMTE3NzU1LCAxMTc3NjIsIDExNzc2OSwgMTE3Nzc1LCAKKyAgICAxMTc3ODIsIDExNzc4OSwgMTE3Nzk1LCAxMTc4MDIsIDExNzgwOSwgMTE3ODE2LCAxMTc4MjMsIDExNzgzMCwgMTE3ODM2LCAKKyAgICAxMTc4NDMsIDExNzg1MCwgMTE3ODU3LCAxMTc4NjMsIDExNzg3MCwgMTE3ODc3LCAxMTc4ODQsIDExNzg5MCwgMTE3ODk3LCAKKyAgICAxMTc5MDQsIDExNzkxMCwgMTE3OTE2LCAxMTc5MjMsIDExNzkyOSwgMTE3OTM2LCAxMTc5NDMsIDExNzk0OSwgMTE3OTU2LCAKKyAgICAxMTc5NjMsIDExNzk2OSwgMTE3OTc2LCAxMTc5ODMsIDExNzk5MCwgMTE3OTk3LCAxMTgwMDQsIDExODAwOSwgMTE4MDE1LCAKKyAgICAxMTgwMjEsIDExODAyNywgMTE4MDMyLCAxMTgwMzgsIDExODA0NCwgMTE4MDUwLCAxMTgwNTUsIDExODA2MSwgMTE4MDY3LCAKKyAgICAxMTgwNzIsIDExODA3NywgMTE4MDgzLCAxMTgwODgsIDExODA5NCwgMTE4MTAwLCAxMTgxMDUsIDExODExMSwgMTE4MTE3LCAKKyAgICAxMTgxMjIsIDExODEyOCwgMTE4MTM0LCAxMTgxNDAsIDExODE0NiwgMTE4MTUyLCAxMTgxNTcsIDExODE2MywgMTE4MTY5LCAKKyAgICAxMTgxNzUsIDExODE4MCwgMTE4MTg2LCAxMTgxOTIsIDExODE5OCwgMTE4MjAzLCAxMTgyMDksIDExODIxNSwgMTE4MjIwLCAKKyAgICAxMTgyMjUsIDExODIzMSwgMTE4MjM2LCAxMTgyNDIsIDExODI0OCwgMTE4MjUzLCAxMTgyNTksIDExODI2NSwgMTE4MjcwLCAKKyAgICAxMTgyNzYsIDExODI4MiwgMTE4Mjg4LCAxMTgyOTQsIDExODMwMCwgMTE4MzA2LCAwLCAwLCAxMTgzMTMsIDExODMxOCwgCisgICAgMTE4MzIzLCAxMTgzMjgsIDExODMzMywgMTE4MzM4LCAxMTgzNDMsIDExODM0OCwgMTE4MzUzLCAxMTgzNTgsIDExODM2MywgCisgICAgMTE4MzY4LCAxMTgzNzMsIDExODM3OCwgMTE4MzgzLCAxMTgzODgsIDExODM5MywgMTE4Mzk4LCAxMTg0MDQsIDExODQwOSwgCisgICAgMTE4NDE0LCAxMTg0MTksIDExODQyNCwgMTE4NDI5LCAxMTg0MzQsIDExODQzOSwgMTE4NDQzLCAxMTg0NDgsIDExODQ1MywgCisgICAgMTE4NDU4LCAxMTg0NjMsIDExODQ2OCwgMTE4NDczLCAxMTg0NzgsIDExODQ4MywgMTE4NDg4LCAxMTg0OTMsIDExODQ5OCwgCisgICAgMTE4NTAzLCAxMTg1MDgsIDExODUxMywgMTE4NTE4LCAxMTg1MjMsIDExODUyOCwgMTE4NTM0LCAxMTg1MzksIDExODU0NCwgCisgICAgMTE4NTQ5LCAxMTg1NTQsIDExODU1OSwgMTE4NTY0LCAxMTg1NjksIDExODU3NSwgMTE4NTgwLCAxMTg1ODUsIDExODU5MCwgCisgICAgMTE4NTk1LCAxMTg2MDAsIDExODYwNSwgMTE4NjEwLCAxMTg2MTUsIDExODYyMCwgMTE4NjI1LCAxMTg2MzAsIDExODYzNSwgCisgICAgMTE4NjQwLCAxMTg2NDUsIDExODY1MCwgMTE4NjU1LCAxMTg2NjAsIDExODY2NSwgMTE4NjcwLCAxMTg2NzUsIDExODY4MCwgCisgICAgMTE4Njg1LCAxMTg2OTAsIDExODY5NiwgMTE4NzAxLCAxMTg3MDYsIDExODcxMSwgMTE4NzE2LCAxMTg3MjEsIDExODcyNiwgCisgICAgMTE4NzMxLCAxMTg3MzUsIDExODc0MCwgMTE4NzQ1LCAxMTg3NTAsIDExODc1NSwgMTE4NzYwLCAxMTg3NjUsIDExODc3MCwgCisgICAgMTE4Nzc1LCAxMTg3ODAsIDExODc4NSwgMTE4NzkwLCAxMTg3OTUsIDExODgwMCwgMTE4ODA1LCAxMTg4MTAsIDExODgxNSwgCisgICAgMTE4ODIwLCAxMTg4MjYsIDExODgzMSwgMTE4ODM2LCAxMTg4NDEsIDExODg0NiwgMTE4ODUxLCAxMTg4NTYsIDExODg2MSwgCisgICAgMTE4ODY3LCAxMTg4NzIsIDExODg3NywgMTE4ODgyLCAxMTg4ODcsIDExODg5MiwgMTE4ODk3LCAxMTg5MDMsIDExODkwOSwgCisgICAgMTE4OTE1LCAxMTg5MjEsIDExODkyNywgMTE4OTMzLCAxMTg5MzksIDExODk0NSwgMTE4OTUxLCAxMTg5NTcsIDExODk2MywgCisgICAgMTE4OTY5LCAxMTg5NzUsIDExODk4MSwgMTE4OTg3LCAxMTg5OTMsIDExODk5OSwgMTE5MDA2LCAxMTkwMTIsIDExOTAxOCwgCisgICAgMTE5MDI0LCAxMTkwMzAsIDExOTAzNiwgMTE5MDQyLCAxMTkwNDgsIDExOTA1MywgMTE5MDU5LCAxMTkwNjUsIDExOTA3MSwgCisgICAgMTE5MDc3LCAxMTkwODMsIDExOTA4OSwgMTE5MDk1LCAxMTkxMDEsIDExOTEwNywgMTE5MTEzLCAxMTkxMTksIDExOTEyNSwgCisgICAgMTE5MTMxLCAxMTkxMzcsIDExOTE0MywgMTE5MTQ5LCAxMTkxNTUsIDExOTE2MiwgMTE5MTY4LCAxMTkxNzQsIDExOTE4MCwgCisgICAgMTE5MTg2LCAxMTkxOTIsIDExOTE5OCwgMTE5MjA0LCAxMTkyMTEsIDExOTIxNywgMTE5MjIzLCAxMTkyMjksIDExOTIzNSwgCisgICAgMTE5MjQxLCAxMTkyNDcsIDExOTI1MywgMTE5MjU5LCAxMTkyNjUsIDExOTI3MSwgMTE5Mjc3LCAxMTkyODMsIDExOTI4OSwgCisgICAgMTE5Mjk1LCAxMTkzMDEsIDExOTMwNywgMTE5MzEzLCAxMTkzMTksIDExOTMyNSwgMTE5MzMxLCAxMTkzMzcsIDExOTM0MywgCisgICAgMTE5MzQ5LCAxMTkzNTYsIDExOTM2MiwgMTE5MzY4LCAxMTkzNzQsIDExOTM4MCwgMTE5Mzg2LCAxMTkzOTIsIDExOTM5OCwgCisgICAgMTE5NDAzLCAxMTk0MDksIDExOTQxNSwgMTE5NDIxLCAxMTk0MjcsIDExOTQzMywgMTE5NDM5LCAxMTk0NDUsIDExOTQ1MSwgCisgICAgMTE5NDU3LCAxMTk0NjMsIDExOTQ2OSwgMTE5NDc1LCAxMTk0ODEsIDExOTQ4NywgMTE5NDkzLCAxMTk0OTksIDExOTUwNSwgCisgICAgMTE5NTEyLCAxMTk1MTgsIDExOTUyNCwgMTE5NTMwLCAxMTk1MzYsIDExOTU0MiwgMTE5NTQ4LCAxMTk1NTQsIDExOTU2MSwgCisgICAgMTE5NTY3LCAxMTk1NzMsIDExOTU3OSwgMTE5NTg1LCAxMTk1OTEsIDExOTU5NywgMTE5NjA0LCAxMTk2MTEsIDExOTYxOCwgCisgICAgMTE5NjI1LCAxMTk2MzIsIDExOTYzOSwgMTE5NjQ2LCAxMTk2NTMsIDExOTY2MCwgMTE5NjY3LCAxMTk2NzQsIDExOTY4MSwgCisgICAgMTE5Njg4LCAxMTk2OTUsIDExOTcwMiwgMTE5NzA5LCAxMTk3MTYsIDExOTcyNCwgMTE5NzMxLCAxMTk3MzgsIDExOTc0NSwgCisgICAgMTE5NzUyLCAxMTk3NTksIDExOTc2NiwgMTE5NzczLCAxMTk3NzksIDExOTc4NiwgMTE5NzkzLCAxMTk4MDAsIDExOTgwNywgCisgICAgMTE5ODE0LCAxMTk4MjEsIDExOTgyOCwgMTE5ODM1LCAxMTk4NDIsIDExOTg0OSwgMTE5ODU2LCAxMTk4NjMsIDExOTg3MCwgCisgICAgMTE5ODc3LCAxMTk4ODQsIDExOTg5MSwgMTE5ODk4LCAxMTk5MDYsIDExOTkxMywgMTE5OTIwLCAxMTk5MjcsIDExOTkzNCwgCisgICAgMTE5OTQxLCAxMTk5NDgsIDExOTk1NSwgMTE5OTYzLCAxMTk5NzAsIDExOTk3NywgMTE5OTg0LCAxMTk5OTEsIDExOTk5OCwgCisgICAgMTIwMDA1LCAxMjAwMTAsIDAsIDAsIDEyMDAxNSwgMTIwMDIwLCAxMjAwMjQsIDEyMDAyOCwgMTIwMDMyLCAxMjAwMzYsIAorICAgIDEyMDA0MCwgMTIwMDQ0LCAxMjAwNDgsIDEyMDA1MiwgMTIwMDU2LCAxMjAwNjEsIDEyMDA2NSwgMTIwMDY5LCAxMjAwNzMsIAorICAgIDEyMDA3NywgMTIwMDgxLCAxMjAwODUsIDEyMDA4OSwgMTIwMDkzLCAxMjAwOTcsIDEyMDEwMiwgMTIwMTA2LCAxMjAxMTAsIAorICAgIDEyMDExNCwgMTIwMTE4LCAxMjAxMjIsIDEyMDEyNiwgMTIwMTMwLCAxMjAxMzQsIDEyMDEzOCwgMTIwMTQ0LCAxMjAxNDksIAorICAgIDEyMDE1NCwgMTIwMTU5LCAxMjAxNjQsIDEyMDE2OSwgMTIwMTc0LCAxMjAxNzksIDEyMDE4NCwgMTIwMTg5LCAxMjAxOTUsIAorICAgIDEyMDIwMCwgMTIwMjA1LCAxMjAyMTAsIDEyMDIxNSwgMTIwMjIwLCAxMjAyMjUsIDEyMDIzMCwgMTIwMjM1LCAxMjAyNDAsIAorICAgIDEyMDI0NCwgMTIwMjQ4LCAxMjAyNTIsIDAsIDEyMDI1NiwgMTIwMjYwLCAxMjAyNjQsIDEyMDI2OCwgMTIwMjcyLCAKICAgICAxMjAyNzYsIDEyMDI4MCwgMTIwMjg0LCAxMjAyODgsIDEyMDI5MiwgMTIwMjk2LCAxMjAzMDAsIDEyMDMwNCwgMTIwMzA4LCAKLSAgICAxMjAzMTIsIDEyMDMxNiwgMTIwMzIwLCAxMjAzMjYsIDEyMDMzMiwgMTIwMzM4LCAwLCAxMjAzNDQsIDEyMDM0OSwgMCwgCi0gICAgMTIwMzU0LCAwLCAwLCAxMjAzNTksIDAsIDEyMDM2NCwgMTIwMzY5LCAxMjAzNzQsIDEyMDM3OSwgMTIwMzg0LCAxMjAzODksIAotICAgIDEyMDM5NCwgMTIwMzk5LCAxMjA0MDQsIDEyMDQwOSwgMCwgMTIwNDE0LCAxMjA0MTksIDEyMDQyNCwgMTIwNDI5LCAwLCAKLSAgICAxMjA0MzQsIDAsIDEyMDQzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNDQ0LCAwLCAwLCAwLCAwLCAxMjA0NTAsIDAsIAotICAgIDEyMDQ1NiwgMCwgMTIwNDYyLCAwLCAxMjA0NjgsIDEyMDQ3NCwgMTIwNDgwLCAwLCAxMjA0ODYsIDEyMDQ5MiwgMCwgCi0gICAgMTIwNDk4LCAwLCAwLCAxMjA1MDQsIDAsIDEyMDUxMCwgMCwgMTIwNTE2LCAwLCAxMjA1MjIsIDAsIDEyMDUzMCwgMCwgCi0gICAgMTIwNTM4LCAxMjA1NDQsIDAsIDEyMDU1MCwgMCwgMCwgMTIwNTU2LCAxMjA1NjIsIDEyMDU2OCwgMTIwNTc0LCAwLCAKLSAgICAxMjA1ODAsIDEyMDU4NiwgMTIwNTkyLCAxMjA1OTgsIDEyMDYwNCwgMTIwNjEwLCAxMjA2MTYsIDAsIDEyMDYyMiwgCi0gICAgMTIwNjI4LCAxMjA2MzQsIDEyMDY0MCwgMCwgMTIwNjQ2LCAxMjA2NTIsIDEyMDY1OCwgMTIwNjY0LCAwLCAxMjA2NzIsIDAsIAotICAgIDEyMDY4MCwgMTIwNjg2LCAxMjA2OTIsIDEyMDY5OCwgMTIwNzA0LCAxMjA3MTAsIDEyMDcxNiwgMTIwNzIyLCAxMjA3MjgsIAotICAgIDEyMDczNCwgMCwgMTIwNzQwLCAxMjA3NDYsIDEyMDc1MiwgMTIwNzU4LCAxMjA3NjQsIDEyMDc3MCwgMTIwNzc2LCAKLSAgICAxMjA3ODIsIDEyMDc4OCwgMTIwNzk0LCAxMjA4MDAsIDEyMDgwNiwgMTIwODEyLCAxMjA4MTgsIDEyMDgyNCwgMTIwODMwLCAKLSAgICAxMjA4MzYsIDAsIDAsIDAsIDAsIDAsIDEyMDg0MiwgMTIwODQ3LCAxMjA4NTIsIDAsIDEyMDg1NywgMTIwODYyLCAxMjA4NjcsIAotICAgIDEyMDg3MiwgMTIwODc3LCAwLCAxMjA4ODIsIDEyMDg4NywgMTIwODkyLCAxMjA4OTcsIDEyMDkwMiwgMTIwOTA3LCAKLSAgICAxMjA5MTIsIDEyMDkxNywgMTIwOTIyLCAxMjA5MjcsIDEyMDkzMiwgMTIwOTM3LCAxMjA5NDIsIDEyMDk0NywgMTIwOTUyLCAKLSAgICAxMjA5NTcsIDEyMDk2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwOTY3LCAxMjA5NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEyMDk4NSwgMTIwOTkyLCAxMjA5OTksIDEyMTAwNiwgMTIxMDEzLCAxMjEwMjAsIDEyMTAyNywgCi0gICAgMTIxMDMzLCAxMjEwNDAsIDEyMTA0NywgMTIxMDU0LCAxMjEwNjIsIDEyMTA3MCwgMTIxMDc4LCAxMjEwODYsIDEyMTA5NCwgCi0gICAgMTIxMTAyLCAxMjExMDksIDEyMTExNiwgMTIxMTIzLCAxMjExMzEsIDEyMTEzOSwgMTIxMTQ3LCAxMjExNTUsIDEyMTE2MywgCi0gICAgMTIxMTcxLCAxMjExNzgsIDEyMTE4NSwgMTIxMTkyLCAxMjEyMDAsIDEyMTIwOCwgMTIxMjE2LCAxMjEyMjQsIDEyMTIzMiwgCi0gICAgMTIxMjQwLCAxMjEyNDUsIDEyMTI1MCwgMTIxMjU1LCAxMjEyNjAsIDEyMTI2NSwgMTIxMjcwLCAxMjEyNzUsIDEyMTI4MCwgCi0gICAgMTIxMjg1LCAwLCAwLCAwLCAwLCAxMjEyOTAsIDEyMTI5NSwgMTIxMjk5LCAxMjEzMDMsIDEyMTMwNywgMTIxMzExLCAKLSAgICAxMjEzMTUsIDEyMTMxOSwgMTIxMzIzLCAxMjEzMjcsIDEyMTMzMSwgMTIxMzM1LCAxMjEzMzksIDEyMTM0MywgMTIxMzQ3LCAKLSAgICAxMjEzNTEsIDEyMTM1NSwgMTIxMzU5LCAxMjEzNjMsIDEyMTM2NywgMTIxMzcxLCAxMjEzNzUsIDEyMTM3OSwgMTIxMzgzLCAKLSAgICAxMjEzODcsIDEyMTM5MSwgMTIxMzk1LCAxMjEzOTksIDEyMTQwMywgMTIxNDA3LCAxMjE0MTEsIDEyMTQxNSwgMTIxNDE5LCAKLSAgICAxMjE0MjMsIDEyMTQyNywgMTIxNDMxLCAxMjE0MzUsIDEyMTQzOSwgMTIxNDQzLCAxMjE0NDcsIDEyMTQ1MSwgMTIxNDU1LCAKLSAgICAxMjE0NTksIDEyMTQ2MywgMTIxNDY3LCAxMjE0NzEsIDEyMTQ3NSwgMTIxNDc5LCAxMjE0ODMsIDEyMTQ4NywgMTIxNDkxLCAKLSAgICAxMjE0OTYsIDEyMTUwMCwgMTIxNTA0LCAxMjE1MDgsIDEyMTUxMiwgMTIxNTE2LCAxMjE1MjAsIDEyMTUyNCwgMTIxNTI4LCAKLSAgICAxMjE1MzIsIDEyMTUzNiwgMTIxNTQwLCAxMjE1NDQsIDEyMTU0OCwgMTIxNTUyLCAxMjE1NTYsIDEyMTU2MCwgMTIxNTY0LCAKLSAgICAxMjE1NjgsIDEyMTU3MiwgMTIxNTc2LCAxMjE1ODAsIDEyMTU4NCwgMTIxNTg4LCAxMjE1OTIsIDEyMTU5NiwgMTIxNjAwLCAKLSAgICAxMjE2MDQsIDEyMTYwOCwgMTIxNjEyLCAxMjE2MTYsIDEyMTYyMCwgMTIxNjI0LCAxMjE2MjgsIDEyMTYzMiwgMTIxNjM2LCAKLSAgICAxMjE2NDAsIDEyMTY0NCwgMTIxNjQ4LCAxMjE2NTIsIDEyMTY1NiwgMTIxNjYwLCAxMjE2NjQsIDEyMTY2OCwgMTIxNjcyLCAKLSAgICAxMjE2NzYsIDEyMTY4MCwgMTIxNjg0LCAxMjE2ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyMTY5MiwgMTIxNjk4LCAxMjE3MDcsIDEyMTcxNSwgMTIxNzIzLCAxMjE3MzIsIDEyMTc0MSwgMTIxNzUwLCAxMjE3NTksIAotICAgIDEyMTc2OCwgMTIxNzc3LCAxMjE3ODYsIDEyMTc5NSwgMTIxODA0LCAxMjE4MTMsIDAsIDAsIDEyMTgyMiwgMTIxODMxLCAKLSAgICAxMjE4MzksIDEyMTg0NywgMTIxODU2LCAxMjE4NjUsIDEyMTg3NCwgMTIxODgzLCAxMjE4OTIsIDEyMTkwMSwgMTIxOTEwLCAKLSAgICAxMjE5MTksIDEyMTkyOCwgMTIxOTM3LCAwLCAwLCAxMjE5NDYsIDEyMTk1NSwgMTIxOTYzLCAxMjE5NzEsIDEyMTk4MCwgCi0gICAgMTIxOTg5LCAxMjE5OTgsIDEyMjAwNywgMTIyMDE2LCAxMjIwMjUsIDEyMjAzNCwgMTIyMDQzLCAxMjIwNTIsIDEyMjA2MSwgCi0gICAgMTIyMDcwLCAwLCAxMjIwNzcsIDEyMjA4NiwgMTIyMDk0LCAxMjIxMDIsIDEyMjExMSwgMTIyMTIwLCAxMjIxMjksIAotICAgIDEyMjEzOCwgMTIyMTQ3LCAxMjIxNTYsIDEyMjE2NSwgMTIyMTc0LCAxMjIxODMsIDEyMjE5MiwgMTIyMjAxLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMjIyMDgsIDEyMjIxNSwgMTIyMjIwLCAxMjIyMjQsIDEyMjIyOCwgMTIyMjMyLCAxMjIyMzcsIAotICAgIDEyMjI0MiwgMTIyMjQ3LCAxMjIyNTIsIDEyMjI1NywgMCwgMCwgMCwgMCwgMCwgMTIyMjYyLCAxMjIyNjcsIDEyMjI3MywgCi0gICAgMTIyMjc5LCAxMjIyODUsIDEyMjI5MCwgMTIyMjk2LCAxMjIzMDIsIDEyMjMwOCwgMTIyMzEzLCAxMjIzMTksIDEyMjMyNSwgCi0gICAgMTIyMzMwLCAxMjIzMzUsIDEyMjM0MSwgMTIyMzQ2LCAxMjIzNTIsIDEyMjM1OCwgMTIyMzYzLCAxMjIzNjksIDEyMjM3NSwgCi0gICAgMTIyMzgwLCAxMjIzODYsIDEyMjM5MiwgMTIyMzk4LCAxMjI0MDQsIDEyMjQxMCwgMTIyNDIxLCAxMjI0MjgsIDEyMjQzNCwgCi0gICAgMTIyNDM3LCAwLCAxMjI0NDAsIDEyMjQ0NSwgMTIyNDUxLCAxMjI0NTcsIDEyMjQ2MywgMTIyNDY4LCAxMjI0NzQsIAotICAgIDEyMjQ4MCwgMTIyNDg2LCAxMjI0OTEsIDEyMjQ5NywgMTIyNTAzLCAxMjI1MDgsIDEyMjUxMywgMTIyNTE5LCAxMjI1MjQsIAotICAgIDEyMjUzMCwgMTIyNTM2LCAxMjI1NDEsIDEyMjU0NywgMTIyNTUzLCAxMjI1NTgsIDEyMjU2NCwgMTIyNTcwLCAxMjI1NzYsIAotICAgIDEyMjU4MiwgMTIyNTg4LCAxMjI1OTEsIDEyMjU5NCwgMTIyNTk3LCAxMjI2MDAsIDEyMjYwMywgMTIyNjA2LCAxMjI2MTIsIAotICAgIDEyMjYxOSwgMTIyNjI2LCAxMjI2MzMsIDEyMjYzOSwgMTIyNjQ2LCAxMjI2NTMsIDEyMjY2MCwgMTIyNjY2LCAxMjI2NzMsIAotICAgIDEyMjY4MCwgMTIyNjg2LCAxMjI2OTIsIDEyMjY5OSwgMTIyNzA1LCAxMjI3MTIsIDEyMjcxOSwgMTIyNzI1LCAxMjI3MzIsIAotICAgIDEyMjczOSwgMTIyNzQ1LCAxMjI3NTIsIDEyMjc1OSwgMTIyNzY2LCAxMjI3NzMsIDEyMjc4MCwgMTIyNzg1LCAwLCAwLCAwLCAKLSAgICAwLCAxMjI3OTAsIDEyMjc5NiwgMTIyODAzLCAxMjI4MTAsIDEyMjgxNywgMTIyODIzLCAxMjI4MzAsIDEyMjgzNywgCi0gICAgMTIyODQ0LCAxMjI4NTAsIDEyMjg1NywgMTIyODY0LCAxMjI4NzAsIDEyMjg3NiwgMTIyODgzLCAxMjI4ODksIDEyMjg5NiwgCi0gICAgMTIyOTAzLCAxMjI5MDksIDEyMjkxNiwgMTIyOTIzLCAxMjI5MjksIDEyMjkzNiwgMTIyOTQzLCAxMjI5NTAsIDEyMjk1NywgCi0gICAgMTIyOTY0LCAxMjI5NzMsIDEyMjk3NywgMTIyOTgwLCAxMjI5ODMsIDEyMjk4NywgMTIyOTkxLCAxMjI5OTQsIDEyMjk5NywgCi0gICAgMTIzMDAwLCAxMjMwMDMsIDEyMzAwNiwgMTIzMDA5LCAxMjMwMTIsIDEyMzAxNSwgMTIzMDE4LCAxMjMwMjQsIDAsIDAsIDAsIAorICAgIDEyMDMxMiwgMTIwMzE2LCAxMjAzMjAsIDEyMDMyNCwgMTIwMzI4LCAxMjAzMzIsIDEyMDMzNiwgMTIwMzQwLCAxMjAzNDQsIAorICAgIDEyMDM0OCwgMTIwMzU0LCAxMjAzNjAsIDEyMDM2NiwgMCwgMTIwMzcyLCAxMjAzNzcsIDAsIDEyMDM4MiwgMCwgMCwgCisgICAgMTIwMzg3LCAwLCAxMjAzOTIsIDEyMDM5NywgMTIwNDAyLCAxMjA0MDcsIDEyMDQxMiwgMTIwNDE3LCAxMjA0MjIsIAorICAgIDEyMDQyNywgMTIwNDMyLCAxMjA0MzcsIDAsIDEyMDQ0MiwgMTIwNDQ3LCAxMjA0NTIsIDEyMDQ1NywgMCwgMTIwNDYyLCAwLCAKKyAgICAxMjA0NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDQ3MiwgMCwgMCwgMCwgMCwgMTIwNDc4LCAwLCAxMjA0ODQsIDAsIAorICAgIDEyMDQ5MCwgMCwgMTIwNDk2LCAxMjA1MDIsIDEyMDUwOCwgMCwgMTIwNTE0LCAxMjA1MjAsIDAsIDEyMDUyNiwgMCwgMCwgCisgICAgMTIwNTMyLCAwLCAxMjA1MzgsIDAsIDEyMDU0NCwgMCwgMTIwNTUwLCAwLCAxMjA1NTgsIDAsIDEyMDU2NiwgMTIwNTcyLCAwLCAKKyAgICAxMjA1NzgsIDAsIDAsIDEyMDU4NCwgMTIwNTkwLCAxMjA1OTYsIDEyMDYwMiwgMCwgMTIwNjA4LCAxMjA2MTQsIDEyMDYyMCwgCisgICAgMTIwNjI2LCAxMjA2MzIsIDEyMDYzOCwgMTIwNjQ0LCAwLCAxMjA2NTAsIDEyMDY1NiwgMTIwNjYyLCAxMjA2NjgsIDAsIAorICAgIDEyMDY3NCwgMTIwNjgwLCAxMjA2ODYsIDEyMDY5MiwgMCwgMTIwNzAwLCAwLCAxMjA3MDgsIDEyMDcxNCwgMTIwNzIwLCAKKyAgICAxMjA3MjYsIDEyMDczMiwgMTIwNzM4LCAxMjA3NDQsIDEyMDc1MCwgMTIwNzU2LCAxMjA3NjIsIDAsIDEyMDc2OCwgCisgICAgMTIwNzc0LCAxMjA3ODAsIDEyMDc4NiwgMTIwNzkyLCAxMjA3OTgsIDEyMDgwNCwgMTIwODEwLCAxMjA4MTYsIDEyMDgyMiwgCisgICAgMTIwODI4LCAxMjA4MzQsIDEyMDg0MCwgMTIwODQ2LCAxMjA4NTIsIDEyMDg1OCwgMTIwODY0LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjA4NzAsIDEyMDg3NSwgMTIwODgwLCAwLCAxMjA4ODUsIDEyMDg5MCwgMTIwODk1LCAxMjA5MDAsIDEyMDkwNSwgMCwgCisgICAgMTIwOTEwLCAxMjA5MTUsIDEyMDkyMCwgMTIwOTI1LCAxMjA5MzAsIDEyMDkzNSwgMTIwOTQwLCAxMjA5NDUsIDEyMDk1MCwgCisgICAgMTIwOTU1LCAxMjA5NjAsIDEyMDk2NSwgMTIwOTcwLCAxMjA5NzUsIDEyMDk4MCwgMTIwOTg1LCAxMjA5OTAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEyMDk5NSwgMTIxMDA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjEwMTMsIAorICAgIDEyMTAyMCwgMTIxMDI3LCAxMjEwMzQsIDEyMTA0MSwgMTIxMDQ4LCAxMjEwNTUsIDEyMTA2MSwgMTIxMDY4LCAxMjEwNzUsIAorICAgIDEyMTA4MiwgMTIxMDkwLCAxMjEwOTgsIDEyMTEwNiwgMTIxMTE0LCAxMjExMjIsIDEyMTEzMCwgMTIxMTM3LCAxMjExNDQsIAorICAgIDEyMTE1MSwgMTIxMTU5LCAxMjExNjcsIDEyMTE3NSwgMTIxMTgzLCAxMjExOTEsIDEyMTE5OSwgMTIxMjA2LCAxMjEyMTMsIAorICAgIDEyMTIyMCwgMTIxMjI4LCAxMjEyMzYsIDEyMTI0NCwgMTIxMjUyLCAxMjEyNjAsIDEyMTI2OCwgMTIxMjczLCAxMjEyNzgsIAorICAgIDEyMTI4MywgMTIxMjg4LCAxMjEyOTMsIDEyMTI5OCwgMTIxMzAzLCAxMjEzMDgsIDEyMTMxMywgMCwgMCwgMCwgMCwgCisgICAgMTIxMzE4LCAxMjEzMjMsIDEyMTMyNywgMTIxMzMxLCAxMjEzMzUsIDEyMTMzOSwgMTIxMzQzLCAxMjEzNDcsIDEyMTM1MSwgCisgICAgMTIxMzU1LCAxMjEzNTksIDEyMTM2MywgMTIxMzY3LCAxMjEzNzEsIDEyMTM3NSwgMTIxMzc5LCAxMjEzODMsIDEyMTM4NywgCisgICAgMTIxMzkxLCAxMjEzOTUsIDEyMTM5OSwgMTIxNDAzLCAxMjE0MDcsIDEyMTQxMSwgMTIxNDE1LCAxMjE0MTksIDEyMTQyMywgCisgICAgMTIxNDI3LCAxMjE0MzEsIDEyMTQzNSwgMTIxNDM5LCAxMjE0NDMsIDEyMTQ0NywgMTIxNDUxLCAxMjE0NTUsIDEyMTQ1OSwgCisgICAgMTIxNDYzLCAxMjE0NjcsIDEyMTQ3MSwgMTIxNDc1LCAxMjE0NzksIDEyMTQ4MywgMTIxNDg3LCAxMjE0OTEsIDEyMTQ5NSwgCisgICAgMTIxNDk5LCAxMjE1MDMsIDEyMTUwNywgMTIxNTExLCAxMjE1MTUsIDEyMTUxOSwgMTIxNTI0LCAxMjE1MjgsIDEyMTUzMiwgCisgICAgMTIxNTM2LCAxMjE1NDAsIDEyMTU0NCwgMTIxNTQ4LCAxMjE1NTIsIDEyMTU1NiwgMTIxNTYwLCAxMjE1NjQsIDEyMTU2OCwgCisgICAgMTIxNTcyLCAxMjE1NzYsIDEyMTU4MCwgMTIxNTg0LCAxMjE1ODgsIDEyMTU5MiwgMTIxNTk2LCAxMjE2MDAsIDEyMTYwNCwgCisgICAgMTIxNjA4LCAxMjE2MTIsIDEyMTYxNiwgMTIxNjIwLCAxMjE2MjQsIDEyMTYyOCwgMTIxNjMyLCAxMjE2MzYsIDEyMTY0MCwgCisgICAgMTIxNjQ0LCAxMjE2NDgsIDEyMTY1MiwgMTIxNjU2LCAxMjE2NjAsIDEyMTY2NCwgMTIxNjY4LCAxMjE2NzIsIDEyMTY3NiwgCisgICAgMTIxNjgwLCAxMjE2ODQsIDEyMTY4OCwgMTIxNjkyLCAxMjE2OTYsIDEyMTcwMCwgMTIxNzA0LCAxMjE3MDgsIDEyMTcxMiwgCisgICAgMTIxNzE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE3MjAsIDEyMTcyNiwgMTIxNzM1LCAKKyAgICAxMjE3NDMsIDEyMTc1MSwgMTIxNzYwLCAxMjE3NjksIDEyMTc3OCwgMTIxNzg3LCAxMjE3OTYsIDEyMTgwNSwgMTIxODE0LCAKKyAgICAxMjE4MjMsIDEyMTgzMiwgMTIxODQxLCAwLCAwLCAxMjE4NTAsIDEyMTg1OSwgMTIxODY3LCAxMjE4NzUsIDEyMTg4NCwgCisgICAgMTIxODkzLCAxMjE5MDIsIDEyMTkxMSwgMTIxOTIwLCAxMjE5MjksIDEyMTkzOCwgMTIxOTQ3LCAxMjE5NTYsIDEyMTk2NSwgCisgICAgMCwgMCwgMTIxOTc0LCAxMjE5ODMsIDEyMTk5MSwgMTIxOTk5LCAxMjIwMDgsIDEyMjAxNywgMTIyMDI2LCAxMjIwMzUsIAorICAgIDEyMjA0NCwgMTIyMDUzLCAxMjIwNjIsIDEyMjA3MSwgMTIyMDgwLCAxMjIwODksIDEyMjA5OCwgMCwgMTIyMTA1LCAKKyAgICAxMjIxMTQsIDEyMjEyMiwgMTIyMTMwLCAxMjIxMzksIDEyMjE0OCwgMTIyMTU3LCAxMjIxNjYsIDEyMjE3NSwgMTIyMTg0LCAKKyAgICAxMjIxOTMsIDEyMjIwMiwgMTIyMjExLCAxMjIyMjAsIDEyMjIyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyMjM2LCAKKyAgICAxMjIyNDMsIDEyMjI0OCwgMTIyMjUyLCAxMjIyNTYsIDEyMjI2MCwgMTIyMjY1LCAxMjIyNzAsIDEyMjI3NSwgMTIyMjgwLCAKKyAgICAxMjIyODUsIDAsIDAsIDAsIDAsIDAsIDEyMjI5MCwgMTIyMjk1LCAxMjIzMDEsIDEyMjMwNywgMTIyMzEzLCAxMjIzMTgsIAorICAgIDEyMjMyNCwgMTIyMzMwLCAxMjIzMzYsIDEyMjM0MSwgMTIyMzQ3LCAxMjIzNTMsIDEyMjM1OCwgMTIyMzYzLCAxMjIzNjksIAorICAgIDEyMjM3NCwgMTIyMzgwLCAxMjIzODYsIDEyMjM5MSwgMTIyMzk3LCAxMjI0MDMsIDEyMjQwOCwgMTIyNDE0LCAxMjI0MjAsIAorICAgIDEyMjQyNiwgMTIyNDMyLCAxMjI0MzgsIDEyMjQ0OSwgMTIyNDU2LCAxMjI0NjIsIDEyMjQ2NSwgMCwgMTIyNDY4LCAKKyAgICAxMjI0NzMsIDEyMjQ3OSwgMTIyNDg1LCAxMjI0OTEsIDEyMjQ5NiwgMTIyNTAyLCAxMjI1MDgsIDEyMjUxNCwgMTIyNTE5LCAKKyAgICAxMjI1MjUsIDEyMjUzMSwgMTIyNTM2LCAxMjI1NDEsIDEyMjU0NywgMTIyNTUyLCAxMjI1NTgsIDEyMjU2NCwgMTIyNTY5LCAKKyAgICAxMjI1NzUsIDEyMjU4MSwgMTIyNTg2LCAxMjI1OTIsIDEyMjU5OCwgMTIyNjA0LCAxMjI2MTAsIDEyMjYxNiwgMTIyNjE5LCAKKyAgICAxMjI2MjIsIDEyMjYyNSwgMTIyNjI4LCAxMjI2MzEsIDEyMjYzNCwgMTIyNjQwLCAxMjI2NDcsIDEyMjY1NCwgMTIyNjYxLCAKKyAgICAxMjI2NjcsIDEyMjY3NCwgMTIyNjgxLCAxMjI2ODgsIDEyMjY5NCwgMTIyNzAxLCAxMjI3MDgsIDEyMjcxNCwgMTIyNzIwLCAKKyAgICAxMjI3MjcsIDEyMjczMywgMTIyNzQwLCAxMjI3NDcsIDEyMjc1MywgMTIyNzYwLCAxMjI3NjcsIDEyMjc3MywgMTIyNzgwLCAKKyAgICAxMjI3ODcsIDEyMjc5NCwgMTIyODAxLCAxMjI4MDgsIDEyMjgxMywgMCwgMCwgMCwgMCwgMTIyODE4LCAxMjI4MjQsIAorICAgIDEyMjgzMSwgMTIyODM4LCAxMjI4NDUsIDEyMjg1MSwgMTIyODU4LCAxMjI4NjUsIDEyMjg3MiwgMTIyODc4LCAxMjI4ODUsIAorICAgIDEyMjg5MiwgMTIyODk4LCAxMjI5MDQsIDEyMjkxMSwgMTIyOTE3LCAxMjI5MjQsIDEyMjkzMSwgMTIyOTM3LCAxMjI5NDQsIAorICAgIDEyMjk1MSwgMTIyOTU3LCAxMjI5NjQsIDEyMjk3MSwgMTIyOTc4LCAxMjI5ODUsIDEyMjk5MiwgMTIzMDAxLCAxMjMwMDUsIAorICAgIDEyMzAwOCwgMTIzMDExLCAxMjMwMTUsIDEyMzAxOSwgMTIzMDIyLCAxMjMwMjUsIDEyMzAyOCwgMTIzMDMxLCAxMjMwMzQsIAorICAgIDEyMzAzNywgMTIzMDQwLCAxMjMwNDMsIDEyMzA0NiwgMTIzMDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjMwMjcsIDEyMzAzNCwgMTIzMDQyLCAxMjMwNTAsIDEyMzA1OCwgMTIzMDY1LCAxMjMwNzMsIDEyMzA4MSwgMTIzMDg5LCAKLSAgICAxMjMwOTYsIDEyMzEwNCwgMTIzMTEyLCAxMjMxMTksIDEyMzEyNiwgMTIzMTM0LCAxMjMxNDEsIDEyMzE0OSwgMTIzMTU3LCAKLSAgICAxMjMxNjQsIDEyMzE3MiwgMTIzMTgwLCAxMjMxODcsIDEyMzE5NSwgMTIzMjAzLCAxMjMyMTEsIDEyMzIxOSwgMTIzMjI3LCAKLSAgICAxMjMyMzEsIDEyMzIzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMjM4LCAxMjMyNDQsIAotICAgIDEyMzI1MCwgMTIzMjU2LCAxMjMyNjAsIDEyMzI2NiwgMTIzMjcyLCAxMjMyNzgsIDEyMzI4NCwgMTIzMjkwLCAxMjMyOTYsIAotICAgIDEyMzMwMiwgMTIzMzA4LCAxMjMzMTQsIDEyMzMyMCwgMTIzMzI2LCAxMjMzMzIsIDEyMzMzOCwgMTIzMzQ0LCAxMjMzNTAsIAotICAgIDEyMzM1NiwgMTIzMzYyLCAxMjMzNjgsIDEyMzM3NCwgMTIzMzgwLCAxMjMzODYsIDEyMzM5MiwgMTIzMzk4LCAxMjM0MDQsIAotICAgIDEyMzQxMCwgMTIzNDE2LCAxMjM0MjIsIDEyMzQyOCwgMTIzNDM0LCAxMjM0NDAsIDEyMzQ0NiwgMTIzNDUyLCAxMjM0NTgsIAotICAgIDEyMzQ2NCwgMTIzNDcwLCAxMjM0NzYsIDEyMzQ4MiwgMTIzNDg4LCAwLCAwLCAwLCAwLCAwLCAxMjM0OTQsIDEyMzUwNSwgCi0gICAgMTIzNTE2LCAxMjM1MjcsIDEyMzUzOCwgMTIzNTQ5LCAxMjM1NjAsIDEyMzU3MSwgMTIzNTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjM1OTMsIDEyMzU5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTIzNjAxLCAxMjM2MDMsIDEyMzYwNSwgMTIzNjA5LCAxMjM2MTQsIDEyMzYxOSwgMTIzNjIxLCAKLSAgICAxMjM2MjcsIDEyMzYzMiwgMTIzNjM0LCAxMjM2NDAsIDEyMzY0NCwgMTIzNjQ2LCAxMjM2NTAsIDEyMzY1NiwgMTIzNjYyLCAKLSAgICAxMjM2NjgsIDEyMzY3MywgMTIzNjc3LCAxMjM2ODQsIDEyMzY5MSwgMTIzNjk4LCAxMjM3MDMsIDEyMzcxMCwgMTIzNzE3LCAKLSAgICAxMjM3MjQsIDEyMzcyOCwgMTIzNzM0LCAxMjM3NDMsIDEyMzc1MiwgMTIzNzU5LCAxMjM3NjQsIDEyMzc2OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNzcyLCAxMjM3NzQsIDEyMzc3NiwgMTIzNzgwLCAKLSAgICAxMjM3ODQsIDEyMzc4OCwgMCwgMTIzNzkwLCAxMjM3OTIsIDEyMzc5NiwgMTIzNzk4LCAxMjM4MDAsIDEyMzgwMiwgCi0gICAgMTIzODA0LCAxMjM4MDksIDEyMzgxNCwgMTIzODE2LCAxMjM4MjIsIDEyMzgyNiwgMTIzODMwLCAxMjM4MzgsIDEyMzg0MCwgCi0gICAgMTIzODQyLCAxMjM4NDQsIDEyMzg0NiwgMTIzODQ4LCAxMjM4NTAsIDEyMzg1MiwgMTIzODU0LCAxMjM4NTYsIDEyMzg1OCwgCi0gICAgMTIzODYyLCAxMjM4NjYsIDEyMzg2OCwgMTIzODcwLCAxMjM4NzIsIDEyMzg3NCwgMTIzODc2LCAxMjM4ODEsIDEyMzg4NywgCi0gICAgMTIzODkxLCAxMjM4OTUsIDEyMzg5OSwgMTIzOTAzLCAxMjM5MDgsIDEyMzkxMiwgMTIzOTE0LCAxMjM5MTYsIDEyMzkyMCwgCi0gICAgMTIzOTI2LCAxMjM5MjgsIDEyMzkzMCwgMTIzOTMyLCAxMjM5MzYsIDEyMzk0NSwgMTIzOTUxLCAxMjM5NTUsIDEyMzk1OSwgCi0gICAgMTIzOTYxLCAxMjM5NjMsIDEyMzk2NiwgMTIzOTY4LCAxMjM5NzAsIDEyMzk3MiwgMTIzOTc2LCAxMjM5NzgsIDEyMzk4MiwgCi0gICAgMTIzOTg3LCAxMjM5ODksIDEyMzk5NCwgMTI0MDAwLCAxMjQwMDcsIDEyNDAxMSwgMTI0MDE1LCAxMjQwMTksIDEyNDAyMywgCi0gICAgMTI0MDI5LCAwLCAwLCAwLCAxMjQwMzMsIDEyNDAzNSwgMTI0MDM5LCAxMjQwNDMsIDEyNDA0NSwgMTI0MDQ5LCAxMjQwNTMsIAotICAgIDEyNDA1NSwgMTI0MDU5LCAxMjQwNjEsIDEyNDA2NSwgMTI0MDY5LCAxMjQwNzMsIDEyNDA3NywgMTI0MDgxLCAxMjQwODUsIAotICAgIDEyNDA4OSwgMTI0MDkzLCAxMjQwOTksIDEyNDEwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI0MTA3LCAxMjQxMTEsIDEyNDExNSwgMTI0MTE5LCAxMjQxMjYsIDEyNDEyOCwgMTI0MTMyLCAxMjQxMzQsIDEyNDEzNiwgCi0gICAgMTI0MTQwLCAxMjQxNDQsIDEyNDE0OCwgMTI0MTUwLCAxMjQxNTQsIDEyNDE1OCwgMTI0MTYyLCAxMjQxNjYsIDEyNDE3MCwgCi0gICAgMTI0MTcyLCAxMjQxNzYsIDEyNDE3OCwgMTI0MTg0LCAxMjQxODcsIDEyNDE5MiwgMTI0MTk0LCAxMjQxOTYsIDEyNDE5OSwgCi0gICAgMTI0MjAxLCAxMjQyMDMsIDEyNDIwNiwgMTI0MjEzLCAxMjQyMjAsIDEyNDIyNywgMTI0MjMyLCAxMjQyMzYsIDEyNDIzOCwgCi0gICAgMTI0MjQwLCAwLCAxMjQyNDIsIDEyNDI0NCwgMTI0MjQ4LCAxMjQyNTIsIDEyNDI1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MjU4LCAxMjQyNjIsIDEyNDI2NywgMTI0MjcxLCAKLSAgICAxMjQyNzcsIDEyNDI4MywgMTI0Mjg1LCAxMjQyODcsIDEyNDI5MywgMTI0Mjk1LCAxMjQyOTksIDEyNDMwMywgMTI0MzA1LCAKLSAgICAxMjQzMDksIDEyNDMxMSwgMTI0MzE1LCAxMjQzMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyNDMyMywgMTI0MzI1LCAxMjQzMjcsIDEyNDMyOSwgMTI0MzMzLCAxMjQzMzUsIDEyNDMzNywgMTI0MzM5LCAKLSAgICAxMjQzNDEsIDEyNDM0MywgMTI0MzQ1LCAxMjQzNDcsIDEyNDM0OSwgMTI0MzUxLCAxMjQzNTMsIDEyNDM1NSwgMTI0MzU3LCAKLSAgICAxMjQzNTksIDEyNDM2MSwgMTI0MzYzLCAxMjQzNjUsIDEyNDM2NywgMTI0MzY5LCAxMjQzNzEsIDEyNDM3MywgMTI0Mzc1LCAKLSAgICAxMjQzNzcsIDEyNDM4MSwgMTI0MzgzLCAxMjQzODUsIDEyNDM4NywgMTI0MzkxLCAxMjQzOTMsIDEyNDM5NywgMTI0Mzk5LCAKLSAgICAxMjQ0MDEsIDEyNDQwNSwgMTI0NDA5LCAxMjQ0MTUsIDEyNDQxNywgMTI0NDE5LCAxMjQ0MjEsIDEyNDQyMywgMTI0NDI3LCAKLSAgICAxMjQ0MzEsIDEyNDQzMywgMTI0NDM3LCAxMjQ0NDEsIDEyNDQ0NSwgMTI0NDQ5LCAxMjQ0NTMsIDEyNDQ1NywgMTI0NDYxLCAKLSAgICAxMjQ0NjUsIDEyNDQ2OSwgMTI0NDczLCAxMjQ0NzcsIDEyNDQ4MSwgMTI0NDg1LCAxMjQ0ODksIDEyNDQ5MywgMTI0NDk3LCAKLSAgICAxMjQ1MDEsIDAsIDEyNDUwNSwgMCwgMTI0NTA3LCAxMjQ1MDksIDEyNDUxMSwgMTI0NTEzLCAxMjQ1MTUsIDEyNDUyMywgCi0gICAgMTI0NTMxLCAxMjQ1MzksIDEyNDU0NywgMTI0NTUyLCAxMjQ1NTcsIDEyNDU2MiwgMTI0NTY2LCAxMjQ1NzAsIDEyNDU3NSwgCi0gICAgMTI0NTc5LCAxMjQ1ODEsIDEyNDU4NSwgMTI0NTg3LCAxMjQ1ODksIDEyNDU5MSwgMTI0NTkzLCAxMjQ1OTUsIDEyNDU5NywgCi0gICAgMTI0NTk5LCAxMjQ2MDMsIDEyNDYwNSwgMTI0NjA3LCAxMjQ2MDksIDEyNDYxMywgMTI0NjE3LCAxMjQ2MjEsIDEyNDYyNSwgCi0gICAgMTI0NjI5LCAxMjQ2MzEsIDEyNDYzNywgMTI0NjQzLCAxMjQ2NDUsIDEyNDY0NywgMTI0NjQ5LCAxMjQ2NTEsIDEyNDY1MywgCi0gICAgMTI0NjYyLCAxMjQ2NjksIDEyNDY3NiwgMTI0NjgwLCAxMjQ2ODcsIDEyNDY5MiwgMTI0Njk5LCAxMjQ3MDgsIDEyNDcxMywgCi0gICAgMTI0NzE3LCAxMjQ3MjEsIDEyNDcyMywgMTI0NzI3LCAxMjQ3MjksIDEyNDczMywgMTI0NzM3LCAxMjQ3MzksIDEyNDc0MywgCi0gICAgMTI0NzQ3LCAxMjQ3NTEsIDEyNDc1MywgMTI0NzU1LCAxMjQ3NjEsIDEyNDc2MywgMTI0NzY1LCAxMjQ3NjcsIDEyNDc3MSwgCi0gICAgMTI0Nzc1LCAxMjQ3NzcsIDEyNDc4MSwgMTI0NzgzLCAxMjQ3ODUsIDEyNDc4OCwgMTI0NzkyLCAxMjQ3OTQsIDEyNDc5OCwgCi0gICAgMTI0ODAwLCAxMjQ4MDIsIDEyNDgwNywgMTI0ODA5LCAxMjQ4MTMsIDEyNDgxNywgMTI0ODIwLCAxMjQ4MjQsIDEyNDgyOCwgCi0gICAgMTI0ODMyLCAxMjQ4MzYsIDEyNDg0MCwgMTI0ODQ0LCAxMjQ4NDgsIDEyNDg1MywgMTI0ODU3LCAxMjQ4NjEsIDEyNDg3MCwgCi0gICAgMTI0ODc1LCAxMjQ4NzgsIDEyNDg4MCwgMTI0ODgzLCAxMjQ4ODYsIDEyNDg5MSwgMTI0ODkzLCAxMjQ4OTYsIDEyNDkwMSwgCi0gICAgMTI0OTA1LCAxMjQ5MDgsIDEyNDkxMiwgMTI0OTE2LCAxMjQ5MTksIDEyNDkyNCwgMTI0OTI4LCAxMjQ5MzIsIDEyNDkzNiwgCi0gICAgMTI0OTQwLCAxMjQ5NDYsIDEyNDk1MiwgMTI0OTU4LCAxMjQ5NjQsIDEyNDk2OSwgMTI0OTgwLCAxMjQ5ODIsIDEyNDk4NiwgCi0gICAgMTI0OTg4LCAxMjQ5OTAsIDEyNDk5NCwgMTI0OTk4LCAxMjUwMDAsIDEyNTAwNCwgMTI1MDA5LCAxMjUwMTQsIDEyNTAyMCwgCi0gICAgMTI1MDIyLCAxMjUwMjYsIDEyNTAzMCwgMTI1MDM3LCAxMjUwNDQsIDEyNTA0OCwgMTI1MDUwLCAxMjUwNTIsIDEyNTA1NiwgCi0gICAgMTI1MDU4LCAxMjUwNjIsIDEyNTA2NiwgMTI1MDcwLCAxMjUwNzIsIDEyNTA3NCwgMTI1MDgxLCAxMjUwODUsIDEyNTA4OCwgCi0gICAgMTI1MDkyLCAxMjUwOTYsIDEyNTEwMCwgMTI1MTAyLCAxMjUxMDYsIDEyNTEwOCwgMTI1MTEwLCAxMjUxMTQsIDEyNTExNiwgCi0gICAgMTI1MTIwLCAxMjUxMjQsIDEyNTEzMCwgMTI1MTM0LCAxMjUxMzgsIDEyNTE0MiwgMTI1MTQ0LCAxMjUxNDcsIDEyNTE1MSwgCi0gICAgMTI1MTU4LCAxMjUxNjcsIDEyNTE3NiwgMTI1MTg0LCAxMjUxOTIsIDEyNTE5NCwgMTI1MTk4LCAxMjUyMDAsIDEyNTIwNCwgCi0gICAgMTI1MjE1LCAxMjUyMTksIDEyNTIyNSwgMTI1MjMxLCAxMjUyMzYsIDAsIDEyNTIzOCwgMTI1MjQyLCAxMjUyNDQsIAotICAgIDEyNTI0NiwgMCwgMCwgMCwgMTI1MjQ4LCAxMjUyNTMsIDEyNTI2MywgMTI1Mjc4LCAxMjUyOTAsIDEyNTMwMiwgMTI1MzA2LCAKLSAgICAxMjUzMTAsIDEyNTMxNiwgMTI1MzE4LCAxMjUzMjYsIDEyNTMzNCwgMTI1MzM2LCAxMjUzNDAsIDEyNTM0NiwgMTI1MzUyLCAKLSAgICAxMjUzNTksIDEyNTM2NiwgMTI1MzY4LCAxMjUzNzAsIDEyNTM3MywgMTI1Mzc1LCAxMjUzODEsIDEyNTM4MywgMTI1Mzg2LCAKLSAgICAxMjUzOTAsIDEyNTM5NiwgMTI1NDAyLCAxMjU0MTMsIDEyNTQxOSwgMTI1NDI2LCAxMjU0MzQsIDEyNTQzOCwgMTI1NDQ2LCAKLSAgICAxMjU0NTQsIDEyNTQ2MCwgMTI1NDY2LCAxMjU0NzMsIDEyNTQ3NSwgMTI1NDc5LCAxMjU0ODEsIDEyNTQ4MywgMTI1NDg4LCAKLSAgICAxMjU0OTAsIDEyNTQ5MiwgMTI1NDk0LCAxMjU0OTYsIDEyNTUwMCwgMTI1NTExLCAxMjU1MTcsIDEyNTUyMSwgMTI1NTI1LCAKLSAgICAxMjU1MjksIDEyNTUzNSwgMTI1NTQxLCAxMjU1NDcsIDEyNTU1MywgMTI1NTU4LCAxMjU1NjMsIDEyNTU2OSwgMTI1NTc1LCAKLSAgICAxMjU1ODIsIDAsIDAsIDEyNTU4OSwgMTI1NTk0LCAxMjU2MDIsIDEyNTYwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI1NjE1LCAxMjU2MjIsIDEyNTYyOSwgMTI1NjM2LCAxMjU2NDQsIDEyNTY1MiwgMTI1NjYwLCAxMjU2NjgsIAotICAgIDEyNTY3NiwgMTI1Njg0LCAxMjU2OTIsIDEyNTcwMCwgMTI1NzA4LCAxMjU3MTQsIDEyNTcyMCwgMTI1NzI2LCAxMjU3MzIsIAotICAgIDEyNTczOCwgMTI1NzQ0LCAxMjU3NTAsIDEyNTc1NiwgMTI1NzYyLCAxMjU3NjgsIDEyNTc3NCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMDU1LCAxMjMwNjIsIDEyMzA3MCwgCisgICAgMTIzMDc4LCAxMjMwODYsIDEyMzA5MywgMTIzMTAxLCAxMjMxMDksIDEyMzExNywgMTIzMTI0LCAxMjMxMzIsIDEyMzE0MCwgCisgICAgMTIzMTQ3LCAxMjMxNTQsIDEyMzE2MiwgMTIzMTY5LCAxMjMxNzcsIDEyMzE4NSwgMTIzMTkyLCAxMjMyMDAsIDEyMzIwOCwgCisgICAgMTIzMjE1LCAxMjMyMjMsIDEyMzIzMSwgMTIzMjM5LCAxMjMyNDcsIDEyMzI1NSwgMTIzMjU5LCAxMjMyNjMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzI2NiwgMTIzMjcyLCAxMjMyNzgsIDEyMzI4NCwgMTIzMjg4LCAKKyAgICAxMjMyOTQsIDEyMzMwMCwgMTIzMzA2LCAxMjMzMTIsIDEyMzMxOCwgMTIzMzI0LCAxMjMzMzAsIDEyMzMzNiwgMTIzMzQyLCAKKyAgICAxMjMzNDgsIDEyMzM1NCwgMTIzMzYwLCAxMjMzNjYsIDEyMzM3MiwgMTIzMzc4LCAxMjMzODQsIDEyMzM5MCwgMTIzMzk2LCAKKyAgICAxMjM0MDIsIDEyMzQwOCwgMTIzNDE0LCAxMjM0MjAsIDEyMzQyNiwgMTIzNDMyLCAxMjM0MzgsIDEyMzQ0NCwgMTIzNDUwLCAKKyAgICAxMjM0NTYsIDEyMzQ2MiwgMTIzNDY4LCAxMjM0NzQsIDEyMzQ4MCwgMTIzNDg2LCAxMjM0OTIsIDEyMzQ5OCwgMTIzNTA0LCAKKyAgICAxMjM1MTAsIDEyMzUxNiwgMCwgMCwgMCwgMCwgMCwgMTIzNTIyLCAxMjM1MzMsIDEyMzU0NCwgMTIzNTU1LCAxMjM1NjYsIAorICAgIDEyMzU3NywgMTIzNTg4LCAxMjM1OTksIDEyMzYxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNjIxLCAxMjM2MjUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzYyOSwgCisgICAgMTIzNjMxLCAxMjM2MzMsIDEyMzYzNywgMTIzNjQyLCAxMjM2NDcsIDEyMzY0OSwgMTIzNjU1LCAxMjM2NjAsIDEyMzY2MiwgCisgICAgMTIzNjY4LCAxMjM2NzIsIDEyMzY3NCwgMTIzNjc4LCAxMjM2ODQsIDEyMzY5MCwgMTIzNjk2LCAxMjM3MDEsIDEyMzcwNSwgCisgICAgMTIzNzEyLCAxMjM3MTksIDEyMzcyNiwgMTIzNzMxLCAxMjM3MzgsIDEyMzc0NSwgMTIzNzUyLCAxMjM3NTYsIDEyMzc2MiwgCisgICAgMTIzNzcxLCAxMjM3ODAsIDEyMzc4NywgMTIzNzkyLCAxMjM3OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEyMzgwMCwgMTIzODAyLCAxMjM4MDQsIDEyMzgwOCwgMTIzODEyLCAxMjM4MTYsIDAsIDEyMzgxOCwgCisgICAgMTIzODIwLCAxMjM4MjQsIDEyMzgyNiwgMTIzODI4LCAxMjM4MzAsIDEyMzgzMiwgMTIzODM3LCAxMjM4NDIsIDEyMzg0NCwgCisgICAgMTIzODUwLCAxMjM4NTQsIDEyMzg1OCwgMTIzODY2LCAxMjM4NjgsIDEyMzg3MCwgMTIzODcyLCAxMjM4NzQsIDEyMzg3NiwgCisgICAgMTIzODc4LCAxMjM4ODAsIDEyMzg4MiwgMTIzODg0LCAxMjM4ODYsIDEyMzg5MCwgMTIzODk0LCAxMjM4OTYsIDEyMzg5OCwgCisgICAgMTIzOTAwLCAxMjM5MDIsIDEyMzkwNCwgMTIzOTA5LCAxMjM5MTUsIDEyMzkxOSwgMTIzOTIzLCAxMjM5MjcsIDEyMzkzMSwgCisgICAgMTIzOTM2LCAxMjM5NDAsIDEyMzk0MiwgMTIzOTQ0LCAxMjM5NDgsIDEyMzk1NCwgMTIzOTU2LCAxMjM5NTgsIDEyMzk2MCwgCisgICAgMTIzOTY0LCAxMjM5NzMsIDEyMzk3OSwgMTIzOTgzLCAxMjM5ODcsIDEyMzk4OSwgMTIzOTkxLCAxMjM5OTQsIDEyMzk5NiwgCisgICAgMTIzOTk4LCAxMjQwMDAsIDEyNDAwNCwgMTI0MDA2LCAxMjQwMTAsIDEyNDAxNSwgMTI0MDE3LCAxMjQwMjIsIDEyNDAyOCwgCisgICAgMTI0MDM1LCAxMjQwMzksIDEyNDA0MywgMTI0MDQ3LCAxMjQwNTEsIDEyNDA1NywgMCwgMCwgMCwgMTI0MDYxLCAxMjQwNjMsIAorICAgIDEyNDA2NywgMTI0MDcxLCAxMjQwNzMsIDEyNDA3NywgMTI0MDgxLCAxMjQwODMsIDEyNDA4NywgMTI0MDg5LCAxMjQwOTMsIAorICAgIDEyNDA5NywgMTI0MTAxLCAxMjQxMDUsIDEyNDEwOSwgMTI0MTEzLCAxMjQxMTcsIDEyNDEyMSwgMTI0MTI3LCAxMjQxMzEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDEzNSwgMTI0MTM5LCAxMjQxNDMsIDEyNDE0NywgCisgICAgMTI0MTU0LCAxMjQxNTYsIDEyNDE2MCwgMTI0MTYyLCAxMjQxNjQsIDEyNDE2OCwgMTI0MTcyLCAxMjQxNzYsIDEyNDE3OCwgCisgICAgMTI0MTgyLCAxMjQxODYsIDEyNDE5MCwgMTI0MTk0LCAxMjQxOTgsIDEyNDIwMCwgMTI0MjA0LCAxMjQyMDYsIDEyNDIxMiwgCisgICAgMTI0MjE1LCAxMjQyMjAsIDEyNDIyMiwgMTI0MjI0LCAxMjQyMjcsIDEyNDIyOSwgMTI0MjMxLCAxMjQyMzQsIDEyNDI0MSwgCisgICAgMTI0MjQ4LCAxMjQyNTUsIDEyNDI2MCwgMTI0MjY0LCAxMjQyNjYsIDEyNDI2OCwgMCwgMTI0MjcwLCAxMjQyNzIsIAorICAgIDEyNDI3NiwgMTI0MjgwLCAxMjQyODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEyNDI4NiwgMTI0MjkwLCAxMjQyOTUsIDEyNDI5OSwgMTI0MzA1LCAxMjQzMTEsIDEyNDMxMywgCisgICAgMTI0MzE1LCAxMjQzMjEsIDEyNDMyMywgMTI0MzI3LCAxMjQzMzEsIDEyNDMzMywgMTI0MzM3LCAxMjQzMzksIDEyNDM0MywgCisgICAgMTI0MzQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQzNTEsIDEyNDM1MywgCisgICAgMTI0MzU1LCAxMjQzNTcsIDEyNDM2MSwgMTI0MzYzLCAxMjQzNjUsIDEyNDM2NywgMTI0MzY5LCAxMjQzNzEsIDEyNDM3MywgCisgICAgMTI0Mzc1LCAxMjQzNzcsIDEyNDM3OSwgMTI0MzgxLCAxMjQzODMsIDEyNDM4NSwgMTI0Mzg3LCAxMjQzODksIDEyNDM5MSwgCisgICAgMTI0MzkzLCAxMjQzOTUsIDEyNDM5NywgMTI0Mzk5LCAxMjQ0MDEsIDEyNDQwMywgMTI0NDA1LCAxMjQ0MDksIDEyNDQxMSwgCisgICAgMTI0NDEzLCAxMjQ0MTUsIDEyNDQxOSwgMTI0NDIxLCAxMjQ0MjUsIDEyNDQyNywgMTI0NDI5LCAxMjQ0MzMsIDEyNDQzNywgCisgICAgMTI0NDQzLCAxMjQ0NDUsIDEyNDQ0NywgMTI0NDQ5LCAxMjQ0NTEsIDEyNDQ1NSwgMTI0NDU5LCAxMjQ0NjEsIDEyNDQ2NSwgCisgICAgMTI0NDY5LCAxMjQ0NzMsIDEyNDQ3NywgMTI0NDgxLCAxMjQ0ODUsIDEyNDQ4OSwgMTI0NDkzLCAxMjQ0OTcsIDEyNDUwMSwgCisgICAgMTI0NTA1LCAxMjQ1MDksIDEyNDUxMywgMTI0NTE3LCAxMjQ1MjEsIDEyNDUyNSwgMTI0NTI5LCAwLCAxMjQ1MzMsIDAsIAorICAgIDEyNDUzNSwgMTI0NTM3LCAxMjQ1MzksIDEyNDU0MSwgMTI0NTQzLCAxMjQ1NTEsIDEyNDU1OSwgMTI0NTY3LCAxMjQ1NzUsIAorICAgIDEyNDU4MCwgMTI0NTg1LCAxMjQ1OTAsIDEyNDU5NCwgMTI0NTk4LCAxMjQ2MDMsIDEyNDYwNywgMTI0NjA5LCAxMjQ2MTMsIAorICAgIDEyNDYxNSwgMTI0NjE3LCAxMjQ2MTksIDEyNDYyMSwgMTI0NjIzLCAxMjQ2MjUsIDEyNDYyNywgMTI0NjMxLCAxMjQ2MzMsIAorICAgIDEyNDYzNSwgMTI0NjM3LCAxMjQ2NDEsIDEyNDY0NSwgMTI0NjQ5LCAxMjQ2NTMsIDEyNDY1NywgMTI0NjU5LCAxMjQ2NjUsIAorICAgIDEyNDY3MSwgMTI0NjczLCAxMjQ2NzUsIDEyNDY3NywgMTI0Njc5LCAxMjQ2ODEsIDEyNDY5MCwgMTI0Njk3LCAxMjQ3MDQsIAorICAgIDEyNDcwOCwgMTI0NzE1LCAxMjQ3MjAsIDEyNDcyNywgMTI0NzM2LCAxMjQ3NDEsIDEyNDc0NSwgMTI0NzQ5LCAxMjQ3NTEsIAorICAgIDEyNDc1NSwgMTI0NzU3LCAxMjQ3NjEsIDEyNDc2NSwgMTI0NzY3LCAxMjQ3NzEsIDEyNDc3NSwgMTI0Nzc5LCAxMjQ3ODEsIAorICAgIDEyNDc4MywgMTI0Nzg5LCAxMjQ3OTEsIDEyNDc5MywgMTI0Nzk1LCAxMjQ3OTksIDEyNDgwMywgMTI0ODA1LCAxMjQ4MDksIAorICAgIDEyNDgxMSwgMTI0ODEzLCAxMjQ4MTYsIDEyNDgyMCwgMTI0ODIyLCAxMjQ4MjYsIDEyNDgyOCwgMTI0ODMwLCAxMjQ4MzUsIAorICAgIDEyNDgzNywgMTI0ODQxLCAxMjQ4NDUsIDEyNDg0OCwgMTI0ODUyLCAxMjQ4NTYsIDEyNDg2MCwgMTI0ODY0LCAxMjQ4NjgsIAorICAgIDEyNDg3MiwgMTI0ODc2LCAxMjQ4ODEsIDEyNDg4NSwgMTI0ODg5LCAxMjQ4OTgsIDEyNDkwMywgMTI0OTA2LCAxMjQ5MDgsIAorICAgIDEyNDkxMSwgMTI0OTE0LCAxMjQ5MTksIDEyNDkyMSwgMTI0OTI0LCAxMjQ5MjksIDEyNDkzMywgMTI0OTM2LCAxMjQ5NDAsIAorICAgIDEyNDk0NCwgMTI0OTQ3LCAxMjQ5NTIsIDEyNDk1NiwgMTI0OTYwLCAxMjQ5NjQsIDEyNDk2OCwgMTI0OTc0LCAxMjQ5ODAsIAorICAgIDEyNDk4NiwgMTI0OTkyLCAxMjQ5OTcsIDEyNTAwOCwgMTI1MDEwLCAxMjUwMTQsIDEyNTAxNiwgMTI1MDE4LCAxMjUwMjIsIAorICAgIDEyNTAyNiwgMTI1MDI4LCAxMjUwMzIsIDEyNTAzNywgMTI1MDQyLCAxMjUwNDgsIDEyNTA1MCwgMTI1MDU0LCAxMjUwNTgsIAorICAgIDEyNTA2NSwgMTI1MDcyLCAxMjUwNzYsIDEyNTA3OCwgMTI1MDgwLCAxMjUwODQsIDEyNTA4NiwgMTI1MDkwLCAxMjUwOTQsIAorICAgIDEyNTA5OCwgMTI1MTAwLCAxMjUxMDIsIDEyNTEwOSwgMTI1MTEzLCAxMjUxMTYsIDEyNTEyMCwgMTI1MTI0LCAxMjUxMjgsIAorICAgIDEyNTEzMCwgMTI1MTM0LCAxMjUxMzYsIDEyNTEzOCwgMTI1MTQyLCAxMjUxNDQsIDEyNTE0OCwgMTI1MTUyLCAxMjUxNTgsIAorICAgIDEyNTE2MiwgMTI1MTY2LCAxMjUxNzAsIDEyNTE3MiwgMTI1MTc1LCAxMjUxNzksIDEyNTE4NiwgMTI1MTk1LCAxMjUyMDQsIAorICAgIDEyNTIxMiwgMTI1MjIwLCAxMjUyMjIsIDEyNTIyNiwgMTI1MjI4LCAxMjUyMzIsIDEyNTI0MywgMTI1MjQ3LCAxMjUyNTMsIAorICAgIDEyNTI1OSwgMTI1MjY0LCAwLCAxMjUyNjYsIDEyNTI3MCwgMTI1MjcyLCAxMjUyNzQsIDAsIDAsIDAsIDEyNTI3NiwgCisgICAgMTI1MjgxLCAxMjUyOTEsIDEyNTMwNiwgMTI1MzE4LCAxMjUzMzAsIDEyNTMzNCwgMTI1MzM4LCAxMjUzNDQsIDEyNTM0NiwgCisgICAgMTI1MzU0LCAxMjUzNjIsIDEyNTM2NCwgMTI1MzY4LCAxMjUzNzQsIDEyNTM4MCwgMTI1Mzg3LCAxMjUzOTQsIDEyNTM5NiwgCisgICAgMTI1Mzk4LCAxMjU0MDEsIDEyNTQwMywgMTI1NDA5LCAxMjU0MTEsIDEyNTQxNCwgMTI1NDE4LCAxMjU0MjQsIDEyNTQzMCwgCisgICAgMTI1NDQxLCAxMjU0NDcsIDEyNTQ1NCwgMTI1NDYyLCAxMjU0NjYsIDEyNTQ3NCwgMTI1NDgyLCAxMjU0ODgsIDEyNTQ5NCwgCisgICAgMTI1NTAxLCAxMjU1MDMsIDEyNTUwNywgMTI1NTA5LCAxMjU1MTEsIDEyNTUxNiwgMTI1NTE4LCAxMjU1MjAsIDEyNTUyMiwgCisgICAgMTI1NTI0LCAxMjU1MjgsIDEyNTUzOSwgMTI1NTQ1LCAxMjU1NDksIDEyNTU1MywgMTI1NTU3LCAxMjU1NjMsIDEyNTU2OSwgCisgICAgMTI1NTc1LCAxMjU1ODEsIDEyNTU4NiwgMTI1NTkxLCAxMjU1OTcsIDEyNTYwMywgMTI1NjEwLCAwLCAwLCAxMjU2MTcsIAorICAgIDEyNTYyMiwgMTI1NjMwLCAxMjU2MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTY0MywgCisgICAgMTI1NjUwLCAxMjU2NTcsIDEyNTY2NCwgMTI1NjcyLCAxMjU2ODAsIDEyNTY4OCwgMTI1Njk2LCAxMjU3MDQsIDEyNTcxMiwgCisgICAgMTI1NzIwLCAxMjU3MjgsIDEyNTczNiwgMTI1NzQyLCAxMjU3NDgsIDEyNTc1NCwgMTI1NzYwLCAxMjU3NjYsIDEyNTc3MiwgCisgICAgMTI1Nzc4LCAxMjU3ODQsIDEyNTc5MCwgMTI1Nzk2LCAxMjU4MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTc4MCwgCi0gICAgMTI1Nzg0LCAxMjU3ODgsIDEyNTc5MywgMTI1Nzk4LCAxMjU4MDAsIDEyNTgwNCwgMTI1ODEzLCAxMjU4MjEsIDEyNTgyOSwgCi0gICAgMTI1ODQyLCAxMjU4NTUsIDEyNTg2OCwgMTI1ODc1LCAxMjU4ODIsIDEyNTg4NiwgMTI1ODk1LCAxMjU5MDMsIDEyNTkwNywgCi0gICAgMTI1OTE2LCAxMjU5MjMsIDEyNTkyNywgMTI1OTMxLCAxMjU5MzUsIDEyNTkzOSwgMTI1OTQ2LCAxMjU5NTAsIDEyNTk1NCwgCi0gICAgMTI1OTU4LCAxMjU5NjIsIDEyNTk2OSwgMTI1OTc4LCAxMjU5ODcsIDEyNTk5NCwgMTI2MDA2LCAxMjYwMTgsIDEyNjAyMiwgCi0gICAgMTI2MDI2LCAxMjYwMzAsIDEyNjAzNCwgMTI2MDM4LCAxMjYwNDIsIDEyNjA1MCwgMTI2MDU4LCAxMjYwNjYsIDEyNjA3MCwgCi0gICAgMTI2MDc0LCAxMjYwNzgsIDEyNjA4MiwgMTI2MDg2LCAxMjYwOTAsIDEyNjA5NiwgMTI2MTAyLCAxMjYxMDYsIDEyNjExNywgCi0gICAgMTI2MTI1LCAxMjYxMjksIDEyNjEzMywgMTI2MTM3LCAxMjYxNDEsIDEyNjE0NywgMTI2MTU0LCAxMjYxNjUsIDEyNjE3NSwgCi0gICAgMTI2MTg1LCAxMjYxOTYsIDEyNjIwNSwgMTI2MjE2LCAxMjYyMjIsIDEyNjIyOCwgMCwgMCwgMCwgMCwgMTI2MjM0LCAKLSAgICAxMjYyNDMsIDEyNjI1MCwgMTI2MjU2LCAxMjYyNjAsIDEyNjI2NCwgMTI2MjY4LCAxMjYyNzcsIDEyNjI4OSwgMTI2MjkzLCAKLSAgICAxMjYzMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTgwOCwgMTI1ODEyLCAxMjU4MTYsIAorICAgIDEyNTgyMSwgMTI1ODI2LCAxMjU4MjgsIDEyNTgzMiwgMTI1ODQxLCAxMjU4NDksIDEyNTg1NywgMTI1ODcwLCAxMjU4ODMsIAorICAgIDEyNTg5NiwgMTI1OTAzLCAxMjU5MTAsIDEyNTkxNCwgMTI1OTIzLCAxMjU5MzEsIDEyNTkzNSwgMTI1OTQ0LCAxMjU5NTEsIAorICAgIDEyNTk1NSwgMTI1OTU5LCAxMjU5NjMsIDEyNTk2NywgMTI1OTc0LCAxMjU5NzgsIDEyNTk4MiwgMTI1OTg2LCAxMjU5OTAsIAorICAgIDEyNTk5NywgMTI2MDA2LCAxMjYwMTUsIDEyNjAyMiwgMTI2MDM0LCAxMjYwNDYsIDEyNjA1MCwgMTI2MDU0LCAxMjYwNTgsIAorICAgIDEyNjA2MiwgMTI2MDY2LCAxMjYwNzAsIDEyNjA3OCwgMTI2MDg2LCAxMjYwOTQsIDEyNjA5OCwgMTI2MTAyLCAxMjYxMDYsIAorICAgIDEyNjExMCwgMTI2MTE0LCAxMjYxMTgsIDEyNjEyNCwgMTI2MTMwLCAxMjYxMzQsIDEyNjE0NSwgMTI2MTUzLCAxMjYxNTcsIAorICAgIDEyNjE2MSwgMTI2MTY1LCAxMjYxNjksIDEyNjE3NSwgMTI2MTgyLCAxMjYxOTMsIDEyNjIwMywgMTI2MjEzLCAxMjYyMjQsIAorICAgIDEyNjIzMywgMTI2MjQ0LCAxMjYyNTAsIDEyNjI1NiwgMCwgMCwgMCwgMCwgMTI2MjYyLCAxMjYyNzEsIDEyNjI3OCwgCisgICAgMTI2Mjg0LCAxMjYyODgsIDEyNjI5MiwgMTI2Mjk2LCAxMjYzMDUsIDEyNjMxNywgMTI2MzIxLCAxMjYzMjgsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEyNjMwNywgMTI2MzA5LCAxMjYzMTEsIDEyNjMxNSwgMTI2MzE5LCAxMjYzMjMsIDEyNjMzMiwgMTI2MzM0LCAKLSAgICAxMjYzMzYsIDEyNjMzOSwgMTI2MzQxLCAxMjYzNDMsIDEyNjM0NywgMTI2MzQ5LCAxMjYzNTMsIDEyNjM1NSwgMTI2MzU5LCAKLSAgICAxMjYzNjEsIDEyNjM2MywgMTI2MzY3LCAxMjYzNzEsIDEyNjM3NywgMTI2Mzc5LCAxMjYzODMsIDEyNjM4NSwgMTI2Mzg5LCAKLSAgICAxMjYzOTMsIDEyNjM5NywgMTI2NDAxLCAxMjY0MDMsIDEyNjQwNSwgMTI2NDA5LCAxMjY0MTMsIDEyNjQxNywgMTI2NDIxLCAKLSAgICAxMjY0MjMsIDEyNjQyNSwgMTI2NDI3LCAxMjY0MzIsIDEyNjQzNywgMTI2NDQwLCAxMjY0NDgsIDEyNjQ1NiwgMTI2NDU4LCAKLSAgICAxMjY0NjMsIDEyNjQ2NiwgMTI2NDcxLCAxMjY0ODIsIDEyNjQ4OSwgMTI2NDk0LCAxMjY0OTksIDEyNjUwMSwgMTI2NTA1LCAKLSAgICAxMjY1MDcsIDEyNjUxMSwgMTI2NTEzLCAxMjY1MTcsIDEyNjUyMSwgMTI2NTI0LCAxMjY1MjcsIDEyNjUyOSwgMTI2NTMyLCAKLSAgICAxMjY1MzQsIDEyNjUzOCwgMTI2NTQwLCAxMjY1NDIsIDEyNjU0NCwgMTI2NTQ4LCAxMjY1NTAsIDEyNjU1NCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2MzM1LCAKKyAgICAxMjYzMzcsIDEyNjMzOSwgMTI2MzQzLCAxMjYzNDcsIDEyNjM1MSwgMTI2MzYwLCAxMjYzNjIsIDEyNjM2NCwgMTI2MzY3LCAKKyAgICAxMjYzNjksIDEyNjM3MSwgMTI2Mzc1LCAxMjYzNzcsIDEyNjM4MSwgMTI2MzgzLCAxMjYzODcsIDEyNjM4OSwgMTI2MzkxLCAKKyAgICAxMjYzOTUsIDEyNjM5OSwgMTI2NDA1LCAxMjY0MDcsIDEyNjQxMSwgMTI2NDEzLCAxMjY0MTcsIDEyNjQyMSwgMTI2NDI1LCAKKyAgICAxMjY0MjksIDEyNjQzMSwgMTI2NDMzLCAxMjY0MzcsIDEyNjQ0MSwgMTI2NDQ1LCAxMjY0NDksIDEyNjQ1MSwgMTI2NDUzLCAKKyAgICAxMjY0NTUsIDEyNjQ2MCwgMTI2NDY1LCAxMjY0NjgsIDEyNjQ3NiwgMTI2NDg0LCAxMjY0ODYsIDEyNjQ5MSwgMTI2NDk0LCAKKyAgICAxMjY0OTksIDEyNjUxMCwgMTI2NTE3LCAxMjY1MjIsIDEyNjUyNywgMTI2NTI5LCAxMjY1MzMsIDEyNjUzNSwgMTI2NTM5LCAKKyAgICAxMjY1NDEsIDEyNjU0NSwgMTI2NTQ5LCAxMjY1NTIsIDEyNjU1NSwgMTI2NTU3LCAxMjY1NjAsIDEyNjU2MiwgMTI2NTY2LCAKKyAgICAxMjY1NjgsIDEyNjU3MCwgMTI2NTcyLCAxMjY1NzYsIDEyNjU3OCwgMTI2NTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjY1NTcsIDEyNjU2MiwgMTI2NTY3LCAxMjY1NzIsIDEyNjU3NywgMTI2NTgyLCAKLSAgICAxMjY1ODcsIDEyNjU5NCwgMTI2NjAxLCAxMjY2MDgsIDEyNjYxNSwgMTI2NjIwLCAxMjY2MjUsIDEyNjYzMCwgMTI2NjM1LCAKLSAgICAxMjY2NDIsIDEyNjY0OCwgMTI2NjU1LCAxMjY2NjIsIDEyNjY2OSwgMTI2Njc0LCAxMjY2NzksIDEyNjY4NCwgMTI2Njg5LCAKLSAgICAxMjY2OTQsIDEyNjcwMSwgMTI2NzA4LCAxMjY3MTMsIDEyNjcxOCwgMTI2NzI1LCAxMjY3MzIsIDEyNjc0MCwgMTI2NzQ4LCAKLSAgICAxMjY3NTUsIDEyNjc2MiwgMTI2NzcwLCAxMjY3NzgsIDEyNjc4NiwgMTI2NzkzLCAxMjY4MDMsIDEyNjgxNCwgMTI2ODE5LCAKLSAgICAxMjY4MjYsIDEyNjgzMywgMTI2ODQwLCAxMjY4NDgsIDEyNjg1NiwgMTI2ODY3LCAxMjY4NzUsIDEyNjg4MywgMTI2ODkxLCAKLSAgICAxMjY4OTYsIDEyNjkwMSwgMTI2OTA2LCAxMjY5MTEsIDEyNjkxNiwgMTI2OTIxLCAxMjY5MjYsIDEyNjkzMSwgMTI2OTM2LCAKLSAgICAxMjY5NDEsIDEyNjk0NiwgMTI2OTUxLCAxMjY5NTgsIDEyNjk2MywgMTI2OTY4LCAxMjY5NzUsIDEyNjk4MCwgMTI2OTg1LCAKLSAgICAxMjY5OTAsIDEyNjk5NSwgMTI3MDAwLCAxMjcwMDUsIDEyNzAxMCwgMTI3MDE1LCAxMjcwMjAsIDEyNzAyNSwgMTI3MDMwLCAKLSAgICAxMjcwMzUsIDEyNzA0MiwgMTI3MDUwLCAxMjcwNTUsIDEyNzA2MCwgMTI3MDY3LCAxMjcwNzIsIDEyNzA3NywgMTI3MDgyLCAKLSAgICAxMjcwODksIDEyNzA5NCwgMTI3MTAxLCAxMjcxMDYsIDEyNzExMywgMTI3MTE4LCAxMjcxMjcsIDEyNzEzNiwgMTI3MTQxLCAKLSAgICAxMjcxNDYsIDEyNzE1MSwgMTI3MTU2LCAxMjcxNjEsIDEyNzE2NiwgMTI3MTcxLCAxMjcxNzYsIDEyNzE4MSwgMTI3MTg2LCAKLSAgICAxMjcxOTEsIDEyNzE5NiwgMTI3MjAxLCAxMjcyMDksIDEyNzIxNywgMTI3MjIyLCAxMjcyMjcsIDEyNzIzMiwgMTI3MjM3LCAKLSAgICAxMjcyNDIsIDEyNzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjU0LCAxMjcyNTgsIAotICAgIDEyNzI2MiwgMTI3MjY2LCAxMjcyNzAsIDEyNzI3NCwgMTI3Mjc4LCAxMjcyODIsIDEyNzI4NiwgMTI3MjkwLCAxMjcyOTQsIAorICAgIDAsIDAsIDEyNjU4NSwgMTI2NTkwLCAxMjY1OTUsIDEyNjYwMCwgMTI2NjA1LCAxMjY2MTAsIDEyNjYxNSwgMTI2NjIyLCAKKyAgICAxMjY2MjksIDEyNjYzNiwgMTI2NjQzLCAxMjY2NDgsIDEyNjY1MywgMTI2NjU4LCAxMjY2NjMsIDEyNjY3MCwgMTI2Njc2LCAKKyAgICAxMjY2ODMsIDEyNjY5MCwgMTI2Njk3LCAxMjY3MDIsIDEyNjcwNywgMTI2NzEyLCAxMjY3MTcsIDEyNjcyMiwgMTI2NzI5LCAKKyAgICAxMjY3MzYsIDEyNjc0MSwgMTI2NzQ2LCAxMjY3NTMsIDEyNjc2MCwgMTI2NzY4LCAxMjY3NzYsIDEyNjc4MywgMTI2NzkwLCAKKyAgICAxMjY3OTgsIDEyNjgwNiwgMTI2ODE0LCAxMjY4MjEsIDEyNjgzMSwgMTI2ODQyLCAxMjY4NDcsIDEyNjg1NCwgMTI2ODYxLCAKKyAgICAxMjY4NjgsIDEyNjg3NiwgMTI2ODg0LCAxMjY4OTUsIDEyNjkwMywgMTI2OTExLCAxMjY5MTksIDEyNjkyNCwgMTI2OTI5LCAKKyAgICAxMjY5MzQsIDEyNjkzOSwgMTI2OTQ0LCAxMjY5NDksIDEyNjk1NCwgMTI2OTU5LCAxMjY5NjQsIDEyNjk2OSwgMTI2OTc0LCAKKyAgICAxMjY5NzksIDEyNjk4NiwgMTI2OTkxLCAxMjY5OTYsIDEyNzAwMywgMTI3MDA4LCAxMjcwMTMsIDEyNzAxOCwgMTI3MDIzLCAKKyAgICAxMjcwMjgsIDEyNzAzMywgMTI3MDM4LCAxMjcwNDMsIDEyNzA0OCwgMTI3MDUzLCAxMjcwNTgsIDEyNzA2MywgMTI3MDcwLCAKKyAgICAxMjcwNzgsIDEyNzA4MywgMTI3MDg4LCAxMjcwOTUsIDEyNzEwMCwgMTI3MTA1LCAxMjcxMTAsIDEyNzExNywgMTI3MTIyLCAKKyAgICAxMjcxMjksIDEyNzEzNCwgMTI3MTQxLCAxMjcxNDYsIDEyNzE1NSwgMTI3MTY0LCAxMjcxNjksIDEyNzE3NCwgMTI3MTc5LCAKKyAgICAxMjcxODQsIDEyNzE4OSwgMTI3MTk0LCAxMjcxOTksIDEyNzIwNCwgMTI3MjA5LCAxMjcyMTQsIDEyNzIxOSwgMTI3MjI0LCAKKyAgICAxMjcyMjksIDEyNzIzNywgMTI3MjQ1LCAxMjcyNTAsIDEyNzI1NSwgMTI3MjYwLCAxMjcyNjUsIDEyNzI3MCwgMTI3Mjc2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcyODIsIDEyNzI4NiwgMTI3MjkwLCAxMjcyOTQsIAogICAgIDEyNzI5OCwgMTI3MzAyLCAxMjczMDYsIDEyNzMxMCwgMTI3MzE0LCAxMjczMTgsIDEyNzMyMiwgMTI3MzI2LCAxMjczMzAsIAogICAgIDEyNzMzNCwgMTI3MzM4LCAxMjczNDIsIDEyNzM0NiwgMTI3MzUwLCAxMjczNTQsIDEyNzM1OCwgMTI3MzYyLCAxMjczNjYsIAogICAgIDEyNzM3MCwgMTI3Mzc0LCAxMjczNzgsIDEyNzM4MiwgMTI3Mzg2LCAxMjczOTAsIDEyNzM5NCwgMTI3Mzk4LCAxMjc0MDIsIApAQCAtMTY5MzUsMTc3ICsxNjk1MiwxNzkgQEAKICAgICAxMjkzMTQsIDEyOTMxOCwgMTI5MzIyLCAxMjkzMjYsIDEyOTMzMCwgMTI5MzM0LCAxMjkzMzgsIDEyOTM0MiwgMTI5MzQ2LCAKICAgICAxMjkzNTAsIDEyOTM1NCwgMTI5MzU4LCAxMjkzNjIsIDEyOTM2NiwgMTI5MzcwLCAxMjkzNzQsIDEyOTM3OCwgMTI5MzgyLCAKICAgICAxMjkzODYsIDEyOTM5MCwgMTI5Mzk0LCAxMjkzOTgsIDEyOTQwMiwgMTI5NDA2LCAxMjk0MTAsIDEyOTQxNCwgMTI5NDE4LCAKKyAgICAxMjk0MjIsIDEyOTQyNiwgMTI5NDMwLCAxMjk0MzQsIDEyOTQzOCwgMTI5NDQyLCAxMjk0NDYsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTQ1MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI5NDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjk0MjYsIDEyOTQyOSwgMTI5NDMzLCAxMjk0MzcsIDEyOTQ0MCwgCi0gICAgMTI5NDQ0LCAxMjk0NDgsIDEyOTQ1MSwgMTI5NDU0LCAxMjk0NTgsIDEyOTQ2MiwgMTI5NDY1LCAxMjk0NjgsIDEyOTQ3MSwgCi0gICAgMTI5NDc0LCAxMjk0NzksIDEyOTQ4MiwgMTI5NDg2LCAxMjk0ODksIDEyOTQ5MiwgMTI5NDk1LCAxMjk0OTgsIDEyOTUwMSwgCi0gICAgMTI5NTA0LCAxMjk1MDcsIDEyOTUxMCwgMTI5NTEzLCAxMjk1MTYsIDEyOTUxOSwgMTI5NTIzLCAxMjk1MjcsIDEyOTUzMSwgCi0gICAgMTI5NTM1LCAxMjk1NDAsIDEyOTU0NSwgMTI5NTUxLCAxMjk1NTcsIDEyOTU2MywgMTI5NTY4LCAxMjk1NzQsIDEyOTU4MCwgCi0gICAgMTI5NTg2LCAxMjk1OTEsIDEyOTU5NywgMTI5NjAzLCAxMjk2MDgsIDEyOTYxMywgMTI5NjE5LCAxMjk2MjQsIDEyOTYzMCwgCi0gICAgMTI5NjM2LCAxMjk2NDEsIDEyOTY0NywgMTI5NjUzLCAxMjk2NTgsIDEyOTY2NCwgMTI5NjcwLCAxMjk2NzYsIDEyOTY4MiwgCi0gICAgMTI5Njg4LCAxMjk2OTIsIDEyOTY5NywgMTI5NzAxLCAxMjk3MDYsIDEyOTcxMCwgMTI5NzE1LCAxMjk3MjAsIDEyOTcyNiwgCi0gICAgMTI5NzMyLCAxMjk3MzgsIDEyOTc0MywgMTI5NzQ5LCAxMjk3NTUsIDEyOTc2MSwgMTI5NzY2LCAxMjk3NzIsIDEyOTc3OCwgCi0gICAgMTI5NzgzLCAxMjk3ODgsIDEyOTc5NCwgMTI5Nzk5LCAxMjk4MDUsIDEyOTgxMSwgMTI5ODE2LCAxMjk4MjIsIDEyOTgyOCwgCi0gICAgMTI5ODMzLCAxMjk4MzksIDEyOTg0NSwgMTI5ODUxLCAxMjk4NTcsIDEyOTg2MywgMTI5ODY4LCAxMjk4NzIsIDEyOTg3NywgCi0gICAgMTI5ODc5LCAxMjk4ODMsIDEyOTg4NiwgMTI5ODg5LCAxMjk4OTIsIDEyOTg5NSwgMTI5ODk4LCAxMjk5MDEsIDEyOTkwNCwgCi0gICAgMTI5OTA3LCAxMjk5MTAsIDEyOTkxMywgMTI5OTE2LCAxMjk5MTksIDEyOTkyMiwgMTI5OTI1LCAxMjk5MjgsIDEyOTkzMSwgCi0gICAgMTI5OTM0LCAxMjk5MzcsIDEyOTk0MCwgMTI5OTQzLCAxMjk5NDYsIDEyOTk0OSwgMTI5OTUyLCAxMjk5NTUsIDEyOTk1OCwgCi0gICAgMTI5OTYxLCAxMjk5NjQsIDEyOTk2NywgMTI5OTcwLCAxMjk5NzMsIDEyOTk3NiwgMTI5OTc5LCAxMjk5ODIsIDEyOTk4NSwgCi0gICAgMTI5OTg4LCAxMjk5OTEsIDEyOTk5NCwgMTI5OTk3LCAxMzAwMDAsIDEzMDAwMywgMTMwMDA2LCAxMzAwMDksIDEzMDAxMiwgCi0gICAgMTMwMDE1LCAxMzAwMTgsIDEzMDAyMSwgMTMwMDI0LCAxMzAwMjcsIDEzMDAzMCwgMTMwMDMzLCAxMzAwMzYsIDEzMDAzOSwgCi0gICAgMTMwMDQyLCAxMzAwNDUsIDEzMDA0OCwgMTMwMDUxLCAxMzAwNTQsIDEzMDA1NywgMTMwMDYwLCAxMzAwNjMsIDEzMDA2NiwgCi0gICAgMTMwMDY5LCAxMzAwNzIsIDEzMDA3NSwgMTMwMDc4LCAxMzAwODEsIDEzMDA4NCwgMTMwMDg3LCAxMzAwOTAsIDEzMDA5MywgCi0gICAgMTMwMDk2LCAxMzAwOTksIDEzMDEwMiwgMTMwMTA1LCAxMzAxMDgsIDEzMDExMSwgMTMwMTE0LCAxMzAxMTcsIDEzMDEyMCwgCi0gICAgMTMwMTIzLCAxMzAxMjYsIDEzMDEyOSwgMTMwMTMyLCAxMzAxMzUsIDEzMDEzOCwgMTMwMTQxLCAxMzAxNDQsIDEzMDE0NywgCi0gICAgMTMwMTUwLCAxMzAxNTMsIDEzMDE1NiwgMTMwMTU5LCAxMzAxNjIsIDEzMDE2NSwgMTMwMTY4LCAxMzAxNzEsIDEzMDE3NCwgCi0gICAgMTMwMTc3LCAxMzAxODAsIDEzMDE4MywgMTMwMTg2LCAxMzAxODksIDEzMDE5MiwgMTMwMTk1LCAxMzAxOTgsIDEzMDIwMSwgCi0gICAgMTMwMjA0LCAxMzAyMDcsIDEzMDIxMCwgMTMwMjEzLCAxMzAyMTYsIDEzMDIxOSwgMTMwMjIyLCAxMzAyMjUsIDEzMDIyOCwgCi0gICAgMTMwMjMxLCAxMzAyMzQsIDEzMDIzNywgMTMwMjQwLCAxMzAyNDMsIDEzMDI0NiwgMTMwMjQ5LCAxMzAyNTIsIDEzMDI1NSwgCi0gICAgMTMwMjU4LCAxMzAyNjEsIDEzMDI2NCwgMTMwMjY3LCAxMzAyNzAsIDEzMDI3MywgMTMwMjc2LCAxMzAyNzksIDEzMDI4MiwgCi0gICAgMTMwMjg1LCAxMzAyODgsIDEzMDI5MSwgMTMwMjk0LCAxMzAyOTcsIDEzMDMwMCwgMTMwMzAzLCAxMzAzMDYsIDEzMDMwOSwgCi0gICAgMTMwMzEyLCAxMzAzMTUsIDEzMDMxOCwgMTMwMzIxLCAxMzAzMjQsIDEzMDMyNywgMTMwMzMwLCAxMzAzMzMsIDEzMDMzNiwgCi0gICAgMTMwMzM5LCAxMzAzNDIsIDEzMDM0NSwgMTMwMzQ4LCAxMzAzNTEsIDEzMDM1NCwgMTMwMzU3LCAxMzAzNjAsIDEzMDM2MywgCi0gICAgMTMwMzY2LCAxMzAzNjksIDEzMDM3MiwgMTMwMzc1LCAxMzAzNzgsIDEzMDM4MSwgMTMwMzg0LCAxMzAzODcsIDEzMDM5MCwgCi0gICAgMTMwMzkzLCAxMzAzOTYsIDEzMDM5OSwgMTMwNDAyLCAxMzA0MDUsIDEzMDQwOCwgMTMwNDExLCAxMzA0MTQsIDEzMDQxNywgCi0gICAgMTMwNDIwLCAxMzA0MjMsIDEzMDQyNiwgMTMwNDI5LCAxMzA0MzIsIDEzMDQzNSwgMTMwNDM4LCAxMzA0NDEsIDEzMDQ0NCwgCi0gICAgMTMwNDQ3LCAxMzA0NTAsIDEzMDQ1MywgMTMwNDU2LCAxMzA0NTksIDEzMDQ2MiwgMTMwNDY1LCAxMzA0NjgsIDEzMDQ3MSwgCi0gICAgMTMwNDc0LCAxMzA0NzcsIDEzMDQ4MCwgMTMwNDgzLCAxMzA0ODYsIDEzMDQ4OSwgMTMwNDkyLCAxMzA0OTUsIDEzMDQ5OCwgCi0gICAgMTMwNTAxLCAxMzA1MDQsIDEzMDUwNywgMTMwNTEwLCAxMzA1MTMsIDEzMDUxNiwgMTMwNTE5LCAxMzA1MjIsIDEzMDUyNSwgCi0gICAgMTMwNTI4LCAxMzA1MzEsIDEzMDUzNCwgMTMwNTM3LCAxMzA1NDAsIDEzMDU0MywgMTMwNTQ2LCAxMzA1NDksIDEzMDU1MiwgCi0gICAgMTMwNTU1LCAxMzA1NTgsIDEzMDU2MSwgMTMwNTY0LCAxMzA1NjcsIDEzMDU3MCwgMTMwNTczLCAxMzA1NzYsIDEzMDU3OSwgCi0gICAgMTMwNTgyLCAxMzA1ODUsIDEzMDU4OCwgMTMwNTkxLCAxMzA1OTQsIDEzMDU5NywgMTMwNjAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzA2MDMsIDEzMDYwNSwgMTMwNjA3LCAxMzA2MTIsIDEzMDYxNCwgCi0gICAgMTMwNjE5LCAxMzA2MjEsIDEzMDYyNiwgMTMwNjI4LCAxMzA2MzMsIDEzMDYzNSwgMTMwNjM3LCAxMzA2MzksIDEzMDY0MSwgCi0gICAgMTMwNjQzLCAxMzA2NDUsIDEzMDY0NywgMTMwNjQ5LCAxMzA2NTEsIDEzMDY1NCwgMTMwNjU3LCAxMzA2NTksIDEzMDY2MSwgCi0gICAgMTMwNjY1LCAxMzA2NjgsIDEzMDY3MywgMTMwNjc1LCAxMzA2NzcsIDEzMDY3OSwgMTMwNjgzLCAxMzA2ODYsIDEzMDY4OCwgCi0gICAgMTMwNjkyLCAxMzA2OTQsIDEzMDY5OCwgMTMwNzAwLCAxMzA3MDQsIDEzMDcwNywgMTMwNzA5LCAxMzA3MTMsIDEzMDcxNywgCi0gICAgMTMwNzE5LCAxMzA3MjUsIDEzMDcyNywgMTMwNzMyLCAxMzA3MzQsIDEzMDczOSwgMTMwNzQxLCAxMzA3NDYsIDEzMDc0OCwgCi0gICAgMTMwNzUzLCAxMzA3NTUsIDEzMDc1OCwgMTMwNzYwLCAxMzA3NjQsIDEzMDc2NiwgMTMwNzczLCAxMzA3NzUsIDEzMDc3NywgCi0gICAgMTMwNzc5LCAxMzA3ODQsIDEzMDc4NiwgMTMwNzg4LCAxMzA3OTAsIDEzMDc5MiwgMTMwNzk0LCAxMzA3OTksIDEzMDgwMywgCi0gICAgMTMwODA1LCAxMzA4MTAsIDEzMDgxNCwgMTMwODE2LCAxMzA4MjEsIDEzMDgyNSwgMTMwODI3LCAxMzA4MzIsIDEzMDgzNiwgCi0gICAgMTMwODM4LCAxMzA4NDAsIDEzMDg0MiwgMTMwODQ0LCAxMzA4NDgsIDEzMDg1MCwgMTMwODU1LCAxMzA4NTcsIDEzMDg2MywgCi0gICAgMTMwODY1LCAxMzA4NzEsIDEzMDg3MywgMTMwODc1LCAxMzA4NzcsIDEzMDg4MSwgMTMwODgzLCAxMzA4OTAsIDEzMDg5MiwgCi0gICAgMTMwODk5LCAxMzA5MDEsIDEzMDkwNiwgMTMwOTExLCAxMzA5MTMsIDEzMDkxOSwgMTMwOTI1LCAxMzA5MjcsIDEzMDkzMywgCi0gICAgMTMwOTM4LCAxMzA5NDAsIDEzMDk0NiwgMTMwOTUyLCAxMzA5NTQsIDEzMDk2MCwgMTMwOTY2LCAxMzA5NjgsIDEzMDk3NCwgCi0gICAgMTMwOTc4LCAxMzA5ODAsIDEzMDk4NSwgMTMwOTg3LCAxMzA5ODksIDEzMDk5NCwgMTMwOTk2LCAxMzA5OTgsIDEzMTAwNCwgCi0gICAgMTMxMDA2LCAxMzEwMTEsIDEzMTAxNSwgMTMxMDE3LCAxMzEwMjIsIDEzMTAyNiwgMTMxMDI4LCAxMzEwMzQsIDEzMTAzNiwgCi0gICAgMTMxMDQwLCAxMzEwNDIsIDEzMTA0NiwgMTMxMDQ4LCAxMzEwNTUsIDEzMTA2MiwgMTMxMDY0LCAxMzEwNzEsIDEzMTA3OCwgCi0gICAgMTMxMDgwLCAxMzEwODUsIDEzMTA4NywgMTMxMDk0LCAxMzEwOTYsIDEzMTEwMSwgMTMxMTAzLCAxMzExMDksIDEzMTExMSwgCi0gICAgMTMxMTE1LCAxMzExMTcsIDEzMTEyMywgMTMxMTI1LCAxMzExMjksIDEzMTEzMSwgMTMxMTM3LCAxMzExMzksIDEzMTE0MSwgCi0gICAgMTMxMTQzLCAxMzExNDgsIDEzMTE1MywgMTMxMTU1LCAxMzExNTksIDEzMTE2NiwgMTMxMTczLCAxMzExNzgsIDEzMTE4MywgCi0gICAgMTMxMTk1LCAxMzExOTcsIDEzMTE5OSwgMTMxMjAxLCAxMzEyMDMsIDEzMTIwNSwgMTMxMjA3LCAxMzEyMDksIDEzMTIxMSwgCi0gICAgMTMxMjEzLCAxMzEyMTUsIDEzMTIxNywgMTMxMjE5LCAxMzEyMjEsIDEzMTIyMywgMTMxMjI1LCAxMzEyMjcsIDEzMTIyOSwgCi0gICAgMTMxMjM1LCAxMzEyNDIsIDEzMTI0NywgMTMxMjUyLCAxMzEyNjMsIDEzMTI2NSwgMTMxMjY3LCAxMzEyNjksIDEzMTI3MSwgCi0gICAgMTMxMjczLCAxMzEyNzUsIDEzMTI3NywgMTMxMjc5LCAxMzEyODEsIDEzMTI4MywgMTMxMjg1LCAxMzEyODcsIDEzMTI4OSwgCi0gICAgMTMxMjkxLCAxMzEyOTMsIDEzMTI5NSwgMTMxMzAwLCAxMzEzMDIsIDEzMTMwNCwgMTMxMzE1LCAxMzEzMTcsIDEzMTMxOSwgCi0gICAgMTMxMzIxLCAxMzEzMjMsIDEzMTMyNSwgMTMxMzI3LCAxMzEzMjksIDEzMTMzMSwgMTMxMzMzLCAxMzEzMzUsIDEzMTMzNywgCi0gICAgMTMxMzM5LCAxMzEzNDEsIDEzMTM0MywgMTMxMzQ1LCAxMzEzNDcsIDEzMTM0OSwgMTMxMzUxLCAxMzEzNTMsIDEzMTM1NSwgCi0gICAgMTMxMzU3LCAxMzEzNTksIDEzMTM2MSwgMTMxMzYzLCAxMzEzNjUsIDEzMTM2NywgMTMxMzY5LCAxMzEzNzEsIDEzMTM3MywgCi0gICAgMTMxMzc1LCAxMzEzNzcsIDEzMTM3OSwgMTMxMzgxLCAxMzEzODMsIDEzMTM4NSwgMTMxMzg3LCAxMzEzODksIDEzMTM5MSwgCi0gICAgMTMxMzkzLCAxMzEzOTUsIDEzMTM5NywgMTMxMzk5LCAxMzE0MDEsIDEzMTQwMywgMTMxNDA1LCAxMzE0MDcsIDEzMTQwOSwgCi0gICAgMTMxNDExLCAxMzE0MTMsIDEzMTQxNSwgMTMxNDE3LCAxMzE0MTksIDEzMTQyMSwgMTMxNDIzLCAxMzE0MjUsIDEzMTQyNywgCi0gICAgMTMxNDI5LCAxMzE0MzEsIDEzMTQzMywgMTMxNDM1LCAxMzE0MzcsIDEzMTQzOSwgMTMxNDQxLCAxMzE0NDMsIDEzMTQ0NSwgCi0gICAgMTMxNDQ3LCAxMzE0NDksIDEzMTQ1MSwgMTMxNDUzLCAxMzE0NTUsIDEzMTQ1NywgMTMxNDU5LCAxMzE0NjEsIDEzMTQ2MywgCi0gICAgMTMxNDY1LCAxMzE0NjcsIDEzMTQ2OSwgMTMxNDcxLCAxMzE0NzMsIDEzMTQ3NSwgMTMxNDc3LCAxMzE0NzksIDEzMTQ4MSwgCi0gICAgMTMxNDgzLCAxMzE0ODUsIDEzMTQ4NywgMTMxNDg5LCAxMzE0OTEsIDEzMTQ5MywgMTMxNDk1LCAxMzE0OTcsIDEzMTQ5OSwgCi0gICAgMTMxNTAxLCAxMzE1MDMsIDEzMTUwNSwgMTMxNTA3LCAxMzE1MDksIDEzMTUxMSwgMTMxNTEzLCAxMzE1MTUsIDEzMTUxNywgCi0gICAgMTMxNTE5LCAxMzE1MjEsIDEzMTUyMywgMTMxNTI1LCAxMzE1MjcsIDEzMTUyOSwgMTMxNTMxLCAxMzE1MzMsIDEzMTUzNSwgCi0gICAgMTMxNTM3LCAxMzE1MzksIDEzMTU0MSwgMTMxNTQzLCAxMzE1NDUsIDEzMTU0NywgMTMxNTQ5LCAxMzE1NTEsIDEzMTU1MywgCi0gICAgMTMxNTU1LCAxMzE1NTcsIDEzMTU1OSwgMTMxNTYxLCAxMzE1NjMsIDEzMTU2NSwgMTMxNTY3LCAxMzE1NjksIDEzMTU3MSwgCi0gICAgMTMxNTczLCAxMzE1NzUsIDEzMTU3NywgMTMxNTc5LCAxMzE1ODEsIDEzMTU4MywgMTMxNTg1LCAxMzE1ODcsIDEzMTU4OSwgCi0gICAgMTMxNTkxLCAxMzE1OTMsIDEzMTU5NSwgMTMxNTk3LCAxMzE1OTksIDEzMTYwMSwgMTMxNjAzLCAxMzE2MDUsIDEzMTYwNywgCi0gICAgMTMxNjA5LCAxMzE2MTEsIDEzMTYxMywgMTMxNjE1LCAxMzE2MTcsIDEzMTYxOSwgMTMxNjIxLCAxMzE2MjMsIDEzMTYyNSwgCi0gICAgMTMxNjI3LCAxMzE2MjksIDEzMTYzMSwgMTMxNjMzLCAxMzE2MzUsIDEzMTYzNywgMTMxNjM5LCAxMzE2NDEsIDEzMTY0MywgCi0gICAgMTMxNjQ1LCAxMzE2NDcsIDEzMTY0OSwgMTMxNjUxLCAxMzE2NTMsIDEzMTY1NSwgMTMxNjU3LCAxMzE2NTksIDEzMTY2MSwgCi0gICAgMTMxNjYzLCAxMzE2NjUsIDEzMTY2NywgMTMxNjY5LCAxMzE2NzEsIDEzMTY3MywgMTMxNjc1LCAxMzE2NzcsIDEzMTY3OSwgCi0gICAgMTMxNjgxLCAxMzE2ODMsIDEzMTY4NSwgMTMxNjg3LCAxMzE2ODksIDEzMTY5MSwgMTMxNjkzLCAxMzE2OTUsIDEzMTY5NywgCi0gICAgMTMxNjk5LCAxMzE3MDEsIDEzMTcwMywgMTMxNzA1LCAxMzE3MDcsIDEzMTcwOSwgMTMxNzExLCAxMzE3MTMsIDEzMTcxNSwgCi0gICAgMTMxNzE3LCAxMzE3MTksIDEzMTcyMSwgMTMxNzIzLCAxMzE3MjUsIDEzMTcyNywgMTMxNzI5LCAxMzE3MzEsIDEzMTczMywgCi0gICAgMTMxNzM1LCAxMzE3MzcsIDEzMTczOSwgMTMxNzQxLCAxMzE3NDMsIDEzMTc0NSwgMTMxNzQ3LCAxMzE3NDksIDEzMTc1MSwgCi0gICAgMTMxNzUzLCAxMzE3NTUsIDEzMTc1NywgMTMxNzU5LCAxMzE3NjEsIDEzMTc2MywgMTMxNzY1LCAxMzE3NjcsIDEzMTc2OSwgCi0gICAgMTMxNzcxLCAxMzE3NzMsIDEzMTc3NSwgMTMxNzc3LCAxMzE3NzksIDEzMTc4MSwgMTMxNzgzLCAxMzE3ODUsIDEzMTc4NywgCi0gICAgMTMxNzg5LCAxMzE3OTEsIDEzMTc5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTMxNzk1LCAxMzE4MDUsIDEzMTgxNSwgMTMxODI0LCAxMzE4MzMsIDEzMTg0NiwgMTMxODU5LCAxMzE4NzEsIDEzMTg4MywgCi0gICAgMTMxODkzLCAxMzE5MDMsIDEzMTkxMywgMTMxOTIzLCAxMzE5MzQsIDEzMTk0NSwgMTMxOTU1LCAxMzE5NjQsIDEzMTk3MywgCi0gICAgMTMxOTgyLCAxMzE5OTUsIDEzMjAwOCwgMTMyMDIwLCAxMzIwMzIsIDEzMjA0MiwgMTMyMDUyLCAxMzIwNjIsIDEzMjA3MiwgCi0gICAgMTMyMDgxLCAxMzIwOTAsIDEzMjA5OSwgMTMyMTA4LCAxMzIxMTcsIDEzMjEyNiwgMTMyMTM1LCAxMzIxNDQsIDEzMjE1MywgCi0gICAgMTMyMTYyLCAxMzIxNzEsIDEzMjE4MCwgMTMyMTkxLCAxMzIyMDEsIDEzMjIxMSwgMTMyMjI0LCAxMzIyMzQsIDEzMjI0NywgCi0gICAgMTMyMjU0LCAxMzIyNjQsIDEzMjI3MSwgMTMyMjc4LCAxMzIyODUsIDEzMjI5MiwgMTMyMjk5LCAxMzIzMDYsIDEzMjMxNSwgCi0gICAgMTMyMzI0LCAxMzIzMzMsIDEzMjM0MiwgMTMyMzUxLCAxMzIzNjAsIDEzMjM2OSwgMTMyMzc4LCAxMzIzODYsIDEzMjM5NCwgCi0gICAgMTMyNDAxLCAxMzI0MTEsIDEzMjQyMCwgMTMyNDI4LCAxMzI0MzUsIDEzMjQ0NSwgMTMyNDU0LCAxMzI0NTgsIDEzMjQ2MiwgCi0gICAgMTMyNDY2LCAxMzI0NzAsIDEzMjQ3NCwgMTMyNDc4LCAxMzI0ODIsIDEzMjQ4NiwgMTMyNDkwLCAxMzI0OTQsIDEzMjQ5NywgCi0gICAgMTMyNTAxLCAxMzI1MDQsIDEzMjUwNywgMTMyNTExLCAxMzI1MTUsIDEzMjUxOSwgMTMyNTIzLCAxMzI1MjcsIDEzMjUzMSwgCi0gICAgMTMyNTM1LCAxMzI1MzksIDEzMjU0MywgMTMyNTQ3LCAxMzI1NTEsIDEzMjU1NSwgMTMyNTU5LCAxMzI1NjMsIDEzMjU2NywgCi0gICAgMTMyNTcxLCAxMzI1NzUsIDEzMjU3OSwgMTMyNTgzLCAxMzI1ODcsIDEzMjU5MSwgMTMyNTk1LCAxMzI1OTksIDEzMjYwMywgCi0gICAgMTMyNjA3LCAxMzI2MTEsIDEzMjYxNSwgMTMyNjE5LCAxMzI2MjMsIDEzMjYyNywgMTMyNjMxLCAxMzI2MzUsIDEzMjYzOSwgCi0gICAgMTMyNjQzLCAxMzI2NDcsIDEzMjY1MSwgMTMyNjU1LCAxMzI2NTksIDEzMjY2MywgMTMyNjY3LCAxMzI2NzEsIDEzMjY3NSwgCi0gICAgMTMyNjc5LCAxMzI2ODMsIDEzMjY4NywgMTMyNjkxLCAxMzI2OTUsIDEzMjY5OSwgMTMyNzAzLCAxMzI3MDcsIDEzMjcxMSwgCi0gICAgMTMyNzE1LCAxMzI3MTksIDEzMjcyMywgMTMyNzI3LCAxMzI3MzEsIDEzMjczNSwgMTMyNzM5LCAxMzI3NDMsIDEzMjc0NywgCi0gICAgMTMyNzUxLCAxMzI3NTUsIDEzMjc1OSwgMTMyNzYzLCAxMzI3NjcsIDEzMjc3MSwgMTMyNzc1LCAxMzI3NzksIDEzMjc4MywgCi0gICAgMTMyNzg3LCAxMzI3OTEsIDEzMjc5NSwgMTMyNzk5LCAxMzI4MDMsIDEzMjgwNywgMTMyODExLCAxMzI4MTUsIDEzMjgxOSwgCi0gICAgMTMyODIzLCAxMzI4MjcsIDEzMjgzMSwgMTMyODM1LCAxMzI4MzksIDEzMjg0MywgMTMyODQ3LCAxMzI4NTAsIDEzMjg1NCwgCi0gICAgMTMyODU4LCAxMzI4NjIsIDEzMjg2NiwgMTMyODcwLCAxMzI4NzQsIDEzMjg3OCwgMTMyODgyLCAxMzI4ODYsIDEzMjg5MCwgCi0gICAgMTMyODk0LCAxMzI4OTgsIDEzMjkwMiwgMTMyOTA2LCAxMzI5MTAsIDEzMjkxNCwgMTMyOTE4LCAxMzI5MjIsIDEzMjkyNiwgCi0gICAgMTMyOTMwLCAxMzI5MzQsIDEzMjkzOCwgMTMyOTQyLCAxMzI5NDYsIDEzMjk1MCwgMTMyOTU0LCAxMzI5NTgsIDEzMjk2MiwgCi0gICAgMTMyOTY2LCAxMzI5NzAsIDEzMjk3NCwgMTMyOTc4LCAxMzI5ODIsIDEzMjk4NiwgMTMyOTkwLCAxMzI5OTQsIDEzMjk5OCwgCi0gICAgMTMzMDAyLCAxMzMwMDYsIDEzMzAxMCwgMTMzMDE0LCAxMzMwMTgsIDEzMzAyMiwgMTMzMDI2LCAxMzMwMzAsIDEzMzAzNCwgCi0gICAgMTMzMDM4LCAxMzMwNDIsIDEzMzA0NiwgMTMzMDUwLCAxMzMwNTQsIDEzMzA1OCwgMTMzMDYyLCAxMzMwNjYsIDEzMzA3MCwgCi0gICAgMTMzMDc0LCAxMzMwNzgsIDEzMzA4MiwgMTMzMDg2LCAxMzMwOTAsIDEzMzA5NCwgMTMzMDk4LCAxMzMxMDIsIDEzMzEwNiwgCi0gICAgMTMzMTEwLCAxMzMxMTQsIDEzMzExOCwgMTMzMTIyLCAxMzMxMjYsIDEzMzEzMCwgMTMzMTM0LCAxMzMxMzgsIDEzMzE0MiwgCi0gICAgMTMzMTQ2LCAxMzMxNTAsIDEzMzE1NCwgMTMzMTU4LCAxMzMxNjIsIDEzMzE2NiwgMTMzMTcwLCAxMzMxNzQsIDEzMzE3OCwgCi0gICAgMTMzMTgyLCAxMzMxODYsIDEzMzE5MCwgMTMzMTk0LCAxMzMxOTgsIDEzMzIwMiwgMTMzMjA2LCAxMzMyMTAsIDEzMzIxNCwgCi0gICAgMTMzMjE4LCAxMzMyMjIsIDEzMzIyNiwgMTMzMjMwLCAxMzMyMzQsIDEzMzIzOCwgMTMzMjQyLCAxMzMyNDYsIDEzMzI1MCwgCi0gICAgMTMzMjU0LCAxMzMyNTgsIDEzMzI2MiwgMTMzMjY2LCAxMzMyNzAsIDEzMzI3NCwgMTMzMjc4LCAxMzMyODIsIDEzMzI4NiwgCi0gICAgMTMzMjkwLCAxMzMyOTQsIDEzMzI5OCwgMTMzMzAyLCAxMzMzMDYsIDEzMzMxMCwgMTMzMzE0LCAxMzMzMTgsIDEzMzMyMiwgCi0gICAgMTMzMzI2LCAxMzMzMzAsIDEzMzMzNCwgMTMzMzM4LCAxMzMzNDIsIDEzMzM0NiwgMTMzMzUwLCAxMzMzNTQsIDEzMzM1OCwgCi0gICAgMTMzMzYyLCAxMzMzNjYsIDEzMzM3MCwgMTMzMzc0LCAxMzMzNzgsIDEzMzM4MiwgMTMzMzg2LCAxMzMzOTAsIDEzMzM5NCwgCi0gICAgMTMzMzk4LCAxMzM0MDIsIDEzMzQwNiwgMTMzNDEwLCAxMzM0MTQsIDEzMzQxOCwgMTMzNDIyLCAxMzM0MjYsIDEzMzQzMCwgCi0gICAgMTMzNDM0LCAxMzM0MzgsIDEzMzQ0MiwgMTMzNDQ2LCAxMzM0NTAsIDEzMzQ1NCwgMTMzNDU4LCAxMzM0NjIsIDEzMzQ2NiwgCi0gICAgMTMzNDcwLCAxMzM0NzQsIDEzMzQ3OCwgMTMzNDgyLCAxMzM0ODYsIDEzMzQ5MCwgMTMzNDk0LCAxMzM0OTgsIDEzMzUwMiwgCi0gICAgMTMzNTA2LCAxMzM1MTAsIDEzMzUxNCwgMTMzNTE4LCAxMzM1MjIsIDEzMzUyNiwgMTMzNTMwLCAxMzM1MzQsIDEzMzUzOCwgCi0gICAgMTMzNTQyLCAxMzM1NDYsIDEzMzU1MCwgMTMzNTU0LCAxMzM1NTgsIDEzMzU2MiwgMTMzNTY2LCAxMzM1NzAsIDEzMzU3NCwgCi0gICAgMTMzNTc4LCAxMzM1ODIsIDEzMzU4NiwgMTMzNTkwLCAxMzM1OTQsIDEzMzU5OCwgMTMzNjAyLCAxMzM2MDYsIDEzMzYxMCwgCi0gICAgMTMzNjE0LCAxMzM2MTksIDEzMzYyNCwgMTMzNjI5LCAxMzM2MzMsIDEzMzYzOSwgMTMzNjQ2LCAxMzM2NTMsIDEzMzY2MCwgCi0gICAgMTMzNjY3LCAxMzM2NzQsIDEzMzY4MSwgMTMzNjg4LCAxMzM2OTUsIDEzMzcwMiwgMTMzNzA5LCAxMzM3MTYsIDEzMzcyMywgCi0gICAgMTMzNzMwLCAxMzM3MzYsIDEzMzc0MywgMTMzNzUwLCAxMzM3NTYsIDEzMzc2MywgMTMzNzcwLCAxMzM3NzcsIDEzMzc4NCwgCi0gICAgMTMzNzkxLCAxMzM3OTgsIDEzMzgwNSwgMTMzODEyLCAxMzM4MTksIDEzMzgyNiwgMTMzODMzLCAxMzM4NDAsIDEzMzg0NywgCi0gICAgMTMzODUzLCAxMzM4NTksIDEzMzg2NiwgMTMzODczLCAxMzM4ODIsIDEzMzg5MSwgMTMzOTAwLCAxMzM5MDksIDEzMzkxNCwgCi0gICAgMTMzOTE5LCAxMzM5MjUsIDEzMzkzMSwgMTMzOTM3LCAxMzM5NDMsIDEzMzk0OSwgMTMzOTU1LCAxMzM5NjEsIDEzMzk2NywgCi0gICAgMTMzOTczLCAxMzM5NzksIDEzMzk4NSwgMTMzOTkxLCAxMzM5OTYsIDEzNDAwMiwgMTM0MDEyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMjk0NTQsIDEyOTQ1NywgMTI5NDYxLCAxMjk0NjUsIDEyOTQ2OCwgMTI5NDcyLCAxMjk0NzYsIAorICAgIDEyOTQ3OSwgMTI5NDgyLCAxMjk0ODYsIDEyOTQ5MCwgMTI5NDkzLCAxMjk0OTYsIDEyOTQ5OSwgMTI5NTAyLCAxMjk1MDcsIAorICAgIDEyOTUxMCwgMTI5NTE0LCAxMjk1MTcsIDEyOTUyMCwgMTI5NTIzLCAxMjk1MjYsIDEyOTUyOSwgMTI5NTMyLCAxMjk1MzUsIAorICAgIDEyOTUzOCwgMTI5NTQxLCAxMjk1NDQsIDEyOTU0NywgMTI5NTUxLCAxMjk1NTUsIDEyOTU1OSwgMTI5NTYzLCAxMjk1NjgsIAorICAgIDEyOTU3MywgMTI5NTc5LCAxMjk1ODUsIDEyOTU5MSwgMTI5NTk2LCAxMjk2MDIsIDEyOTYwOCwgMTI5NjE0LCAxMjk2MTksIAorICAgIDEyOTYyNSwgMTI5NjMxLCAxMjk2MzYsIDEyOTY0MSwgMTI5NjQ3LCAxMjk2NTIsIDEyOTY1OCwgMTI5NjY0LCAxMjk2NjksIAorICAgIDEyOTY3NSwgMTI5NjgxLCAxMjk2ODYsIDEyOTY5MiwgMTI5Njk4LCAxMjk3MDQsIDEyOTcxMCwgMTI5NzE2LCAxMjk3MjAsIAorICAgIDEyOTcyNSwgMTI5NzI5LCAxMjk3MzQsIDEyOTczOCwgMTI5NzQzLCAxMjk3NDgsIDEyOTc1NCwgMTI5NzYwLCAxMjk3NjYsIAorICAgIDEyOTc3MSwgMTI5Nzc3LCAxMjk3ODMsIDEyOTc4OSwgMTI5Nzk0LCAxMjk4MDAsIDEyOTgwNiwgMTI5ODExLCAxMjk4MTYsIAorICAgIDEyOTgyMiwgMTI5ODI3LCAxMjk4MzMsIDEyOTgzOSwgMTI5ODQ0LCAxMjk4NTAsIDEyOTg1NiwgMTI5ODYxLCAxMjk4NjcsIAorICAgIDEyOTg3MywgMTI5ODc5LCAxMjk4ODUsIDEyOTg5MSwgMTI5ODk2LCAxMjk5MDAsIDEyOTkwNSwgMTI5OTA3LCAxMjk5MTEsIAorICAgIDEyOTkxNCwgMTI5OTE3LCAxMjk5MjAsIDEyOTkyMywgMTI5OTI2LCAxMjk5MjksIDEyOTkzMiwgMTI5OTM1LCAxMjk5MzgsIAorICAgIDEyOTk0MSwgMTI5OTQ0LCAxMjk5NDcsIDEyOTk1MCwgMTI5OTUzLCAxMjk5NTYsIDEyOTk1OSwgMTI5OTYyLCAxMjk5NjUsIAorICAgIDEyOTk2OCwgMTI5OTcxLCAxMjk5NzQsIDEyOTk3NywgMTI5OTgwLCAxMjk5ODMsIDEyOTk4NiwgMTI5OTg5LCAxMjk5OTIsIAorICAgIDEyOTk5NSwgMTI5OTk4LCAxMzAwMDEsIDEzMDAwNCwgMTMwMDA3LCAxMzAwMTAsIDEzMDAxMywgMTMwMDE2LCAxMzAwMTksIAorICAgIDEzMDAyMiwgMTMwMDI1LCAxMzAwMjgsIDEzMDAzMSwgMTMwMDM0LCAxMzAwMzcsIDEzMDA0MCwgMTMwMDQzLCAxMzAwNDYsIAorICAgIDEzMDA0OSwgMTMwMDUyLCAxMzAwNTUsIDEzMDA1OCwgMTMwMDYxLCAxMzAwNjQsIDEzMDA2NywgMTMwMDcwLCAxMzAwNzMsIAorICAgIDEzMDA3NiwgMTMwMDc5LCAxMzAwODIsIDEzMDA4NSwgMTMwMDg4LCAxMzAwOTEsIDEzMDA5NCwgMTMwMDk3LCAxMzAxMDAsIAorICAgIDEzMDEwMywgMTMwMTA2LCAxMzAxMDksIDEzMDExMiwgMTMwMTE1LCAxMzAxMTgsIDEzMDEyMSwgMTMwMTI0LCAxMzAxMjcsIAorICAgIDEzMDEzMCwgMTMwMTMzLCAxMzAxMzYsIDEzMDEzOSwgMTMwMTQyLCAxMzAxNDUsIDEzMDE0OCwgMTMwMTUxLCAxMzAxNTQsIAorICAgIDEzMDE1NywgMTMwMTYwLCAxMzAxNjMsIDEzMDE2NiwgMTMwMTY5LCAxMzAxNzIsIDEzMDE3NSwgMTMwMTc4LCAxMzAxODEsIAorICAgIDEzMDE4NCwgMTMwMTg3LCAxMzAxOTAsIDEzMDE5MywgMTMwMTk2LCAxMzAxOTksIDEzMDIwMiwgMTMwMjA1LCAxMzAyMDgsIAorICAgIDEzMDIxMSwgMTMwMjE0LCAxMzAyMTcsIDEzMDIyMCwgMTMwMjIzLCAxMzAyMjYsIDEzMDIyOSwgMTMwMjMyLCAxMzAyMzUsIAorICAgIDEzMDIzOCwgMTMwMjQxLCAxMzAyNDQsIDEzMDI0NywgMTMwMjUwLCAxMzAyNTMsIDEzMDI1NiwgMTMwMjU5LCAxMzAyNjIsIAorICAgIDEzMDI2NSwgMTMwMjY4LCAxMzAyNzEsIDEzMDI3NCwgMTMwMjc3LCAxMzAyODAsIDEzMDI4MywgMTMwMjg2LCAxMzAyODksIAorICAgIDEzMDI5MiwgMTMwMjk1LCAxMzAyOTgsIDEzMDMwMSwgMTMwMzA0LCAxMzAzMDcsIDEzMDMxMCwgMTMwMzEzLCAxMzAzMTYsIAorICAgIDEzMDMxOSwgMTMwMzIyLCAxMzAzMjUsIDEzMDMyOCwgMTMwMzMxLCAxMzAzMzQsIDEzMDMzNywgMTMwMzQwLCAxMzAzNDMsIAorICAgIDEzMDM0NiwgMTMwMzQ5LCAxMzAzNTIsIDEzMDM1NSwgMTMwMzU4LCAxMzAzNjEsIDEzMDM2NCwgMTMwMzY3LCAxMzAzNzAsIAorICAgIDEzMDM3MywgMTMwMzc2LCAxMzAzNzksIDEzMDM4MiwgMTMwMzg1LCAxMzAzODgsIDEzMDM5MSwgMTMwMzk0LCAxMzAzOTcsIAorICAgIDEzMDQwMCwgMTMwNDAzLCAxMzA0MDYsIDEzMDQwOSwgMTMwNDEyLCAxMzA0MTUsIDEzMDQxOCwgMTMwNDIxLCAxMzA0MjQsIAorICAgIDEzMDQyNywgMTMwNDMwLCAxMzA0MzMsIDEzMDQzNiwgMTMwNDM5LCAxMzA0NDIsIDEzMDQ0NSwgMTMwNDQ4LCAxMzA0NTEsIAorICAgIDEzMDQ1NCwgMTMwNDU3LCAxMzA0NjAsIDEzMDQ2MywgMTMwNDY2LCAxMzA0NjksIDEzMDQ3MiwgMTMwNDc1LCAxMzA0NzgsIAorICAgIDEzMDQ4MSwgMTMwNDg0LCAxMzA0ODcsIDEzMDQ5MCwgMTMwNDkzLCAxMzA0OTYsIDEzMDQ5OSwgMTMwNTAyLCAxMzA1MDUsIAorICAgIDEzMDUwOCwgMTMwNTExLCAxMzA1MTQsIDEzMDUxNywgMTMwNTIwLCAxMzA1MjMsIDEzMDUyNiwgMTMwNTI5LCAxMzA1MzIsIAorICAgIDEzMDUzNSwgMTMwNTM4LCAxMzA1NDEsIDEzMDU0NCwgMTMwNTQ3LCAxMzA1NTAsIDEzMDU1MywgMTMwNTU2LCAxMzA1NTksIAorICAgIDEzMDU2MiwgMTMwNTY1LCAxMzA1NjgsIDEzMDU3MSwgMTMwNTc0LCAxMzA1NzcsIDEzMDU4MCwgMTMwNTgzLCAxMzA1ODYsIAorICAgIDEzMDU4OSwgMTMwNTkyLCAxMzA1OTUsIDEzMDU5OCwgMTMwNjAxLCAxMzA2MDQsIDEzMDYwNywgMTMwNjEwLCAxMzA2MTMsIAorICAgIDEzMDYxNiwgMTMwNjE5LCAxMzA2MjIsIDEzMDYyNSwgMTMwNjI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMzA2MzEsIDEzMDYzMywgMTMwNjM1LCAxMzA2NDAsIDEzMDY0MiwgMTMwNjQ3LCAxMzA2NDksIAorICAgIDEzMDY1NCwgMTMwNjU2LCAxMzA2NjEsIDEzMDY2MywgMTMwNjY1LCAxMzA2NjcsIDEzMDY2OSwgMTMwNjcxLCAxMzA2NzMsIAorICAgIDEzMDY3NSwgMTMwNjc3LCAxMzA2NzksIDEzMDY4MiwgMTMwNjg1LCAxMzA2ODcsIDEzMDY4OSwgMTMwNjkzLCAxMzA2OTYsIAorICAgIDEzMDcwMSwgMTMwNzAzLCAxMzA3MDUsIDEzMDcwNywgMTMwNzExLCAxMzA3MTQsIDEzMDcxNiwgMTMwNzIwLCAxMzA3MjIsIAorICAgIDEzMDcyNiwgMTMwNzI4LCAxMzA3MzIsIDEzMDczNSwgMTMwNzM3LCAxMzA3NDEsIDEzMDc0NSwgMTMwNzQ3LCAxMzA3NTMsIAorICAgIDEzMDc1NSwgMTMwNzYwLCAxMzA3NjIsIDEzMDc2NywgMTMwNzY5LCAxMzA3NzQsIDEzMDc3NiwgMTMwNzgxLCAxMzA3ODMsIAorICAgIDEzMDc4NiwgMTMwNzg4LCAxMzA3OTIsIDEzMDc5NCwgMTMwODAxLCAxMzA4MDMsIDEzMDgwNSwgMTMwODA3LCAxMzA4MTIsIAorICAgIDEzMDgxNCwgMTMwODE2LCAxMzA4MTgsIDEzMDgyMCwgMTMwODIyLCAxMzA4MjcsIDEzMDgzMSwgMTMwODMzLCAxMzA4MzgsIAorICAgIDEzMDg0MiwgMTMwODQ0LCAxMzA4NDksIDEzMDg1MywgMTMwODU1LCAxMzA4NjAsIDEzMDg2NCwgMTMwODY2LCAxMzA4NjgsIAorICAgIDEzMDg3MCwgMTMwODcyLCAxMzA4NzYsIDEzMDg3OCwgMTMwODgzLCAxMzA4ODUsIDEzMDg5MSwgMTMwODkzLCAxMzA4OTksIAorICAgIDEzMDkwMSwgMTMwOTAzLCAxMzA5MDUsIDEzMDkwOSwgMTMwOTExLCAxMzA5MTgsIDEzMDkyMCwgMTMwOTI3LCAxMzA5MjksIAorICAgIDEzMDkzNCwgMTMwOTM5LCAxMzA5NDEsIDEzMDk0NywgMTMwOTUzLCAxMzA5NTUsIDEzMDk2MSwgMTMwOTY2LCAxMzA5NjgsIAorICAgIDEzMDk3NCwgMTMwOTgwLCAxMzA5ODIsIDEzMDk4OCwgMTMwOTk0LCAxMzA5OTYsIDEzMTAwMiwgMTMxMDA2LCAxMzEwMDgsIAorICAgIDEzMTAxMywgMTMxMDE1LCAxMzEwMTcsIDEzMTAyMiwgMTMxMDI0LCAxMzEwMjYsIDEzMTAzMiwgMTMxMDM0LCAxMzEwMzksIAorICAgIDEzMTA0MywgMTMxMDQ1LCAxMzEwNTAsIDEzMTA1NCwgMTMxMDU2LCAxMzEwNjIsIDEzMTA2NCwgMTMxMDY4LCAxMzEwNzAsIAorICAgIDEzMTA3NCwgMTMxMDc2LCAxMzEwODMsIDEzMTA5MCwgMTMxMDkyLCAxMzEwOTksIDEzMTEwNiwgMTMxMTA4LCAxMzExMTMsIAorICAgIDEzMTExNSwgMTMxMTIyLCAxMzExMjQsIDEzMTEyOSwgMTMxMTMxLCAxMzExMzcsIDEzMTEzOSwgMTMxMTQzLCAxMzExNDUsIAorICAgIDEzMTE1MSwgMTMxMTUzLCAxMzExNTcsIDEzMTE1OSwgMTMxMTY1LCAxMzExNjcsIDEzMTE2OSwgMTMxMTcxLCAxMzExNzYsIAorICAgIDEzMTE4MSwgMTMxMTgzLCAxMzExODUsIDEzMTE5NCwgMTMxMTk4LCAxMzEyMDUsIDEzMTIxMiwgMTMxMjE3LCAxMzEyMjIsIAorICAgIDEzMTIzNCwgMTMxMjM2LCAxMzEyMzgsIDEzMTI0MCwgMTMxMjQyLCAxMzEyNDQsIDEzMTI0NiwgMTMxMjQ4LCAxMzEyNTAsIAorICAgIDEzMTI1MiwgMTMxMjU0LCAxMzEyNTYsIDEzMTI1OCwgMTMxMjYwLCAxMzEyNjIsIDEzMTI2NCwgMTMxMjY2LCAxMzEyNjgsIAorICAgIDEzMTI3MCwgMTMxMjcyLCAxMzEyNzQsIDEzMTI3NiwgMTMxMjgyLCAxMzEyODksIDEzMTI5NCwgMTMxMjk5LCAxMzEzMTAsIAorICAgIDEzMTMxMiwgMTMxMzE0LCAxMzEzMTYsIDEzMTMxOCwgMTMxMzIwLCAxMzEzMjIsIDEzMTMyNCwgMTMxMzI2LCAxMzEzMjgsIAorICAgIDEzMTMzMCwgMTMxMzMyLCAxMzEzMzQsIDEzMTMzNiwgMTMxMzM4LCAxMzEzNDAsIDEzMTM0MiwgMTMxMzQ3LCAxMzEzNDksIAorICAgIDEzMTM1MSwgMTMxMzU3LCAxMzEzNjksIDEzMTM4MCwgMTMxMzgyLCAxMzEzODQsIDEzMTM4NiwgMTMxMzg4LCAxMzEzOTAsIAorICAgIDEzMTM5MiwgMTMxMzk0LCAxMzEzOTYsIDEzMTM5OCwgMTMxNDAwLCAxMzE0MDIsIDEzMTQwNCwgMTMxNDA2LCAxMzE0MDgsIAorICAgIDEzMTQxMCwgMTMxNDEyLCAxMzE0MTQsIDEzMTQxNiwgMTMxNDE4LCAxMzE0MjAsIDEzMTQyMiwgMTMxNDI0LCAxMzE0MjYsIAorICAgIDEzMTQyOCwgMTMxNDMwLCAxMzE0MzIsIDEzMTQzNCwgMTMxNDM2LCAxMzE0MzgsIDEzMTQ0MCwgMTMxNDQyLCAxMzE0NDQsIAorICAgIDEzMTQ0NiwgMTMxNDQ4LCAxMzE0NTAsIDEzMTQ1MiwgMTMxNDU0LCAxMzE0NTYsIDEzMTQ1OCwgMTMxNDYwLCAxMzE0NjIsIAorICAgIDEzMTQ2NCwgMTMxNDY2LCAxMzE0NjgsIDEzMTQ3MCwgMTMxNDcyLCAxMzE0NzQsIDEzMTQ3NiwgMTMxNDc4LCAxMzE0ODAsIAorICAgIDEzMTQ4MiwgMTMxNDg0LCAxMzE0ODYsIDEzMTQ4OCwgMTMxNDkwLCAxMzE0OTIsIDEzMTQ5NCwgMTMxNDk2LCAxMzE0OTgsIAorICAgIDEzMTUwMCwgMTMxNTAyLCAxMzE1MDQsIDEzMTUwNiwgMTMxNTA4LCAxMzE1MTAsIDEzMTUxMiwgMTMxNTE0LCAxMzE1MTYsIAorICAgIDEzMTUxOCwgMTMxNTIwLCAxMzE1MjIsIDEzMTUyNCwgMTMxNTI2LCAxMzE1MjgsIDEzMTUzMCwgMTMxNTMyLCAxMzE1MzQsIAorICAgIDEzMTUzNiwgMTMxNTM4LCAxMzE1NDAsIDEzMTU0MiwgMTMxNTQ0LCAxMzE1NDYsIDEzMTU0OCwgMTMxNTUwLCAxMzE1NTIsIAorICAgIDEzMTU1NCwgMTMxNTU2LCAxMzE1NTgsIDEzMTU2MCwgMTMxNTYyLCAxMzE1NjQsIDEzMTU2NiwgMTMxNTY4LCAxMzE1NzAsIAorICAgIDEzMTU3MiwgMTMxNTc0LCAxMzE1NzYsIDEzMTU3OCwgMTMxNTgwLCAxMzE1ODIsIDEzMTU4NCwgMTMxNTg2LCAxMzE1ODgsIAorICAgIDEzMTU5MCwgMTMxNTkyLCAxMzE1OTQsIDEzMTU5NiwgMTMxNTk4LCAxMzE2MDAsIDEzMTYwMiwgMTMxNjA0LCAxMzE2MDYsIAorICAgIDEzMTYwOCwgMTMxNjEwLCAxMzE2MTIsIDEzMTYxNCwgMTMxNjE2LCAxMzE2MTgsIDEzMTYyMCwgMTMxNjIyLCAxMzE2MjQsIAorICAgIDEzMTYyNiwgMTMxNjI4LCAxMzE2MzAsIDEzMTYzMiwgMTMxNjM0LCAxMzE2MzYsIDEzMTYzOCwgMTMxNjQwLCAxMzE2NDIsIAorICAgIDEzMTY0NCwgMTMxNjQ2LCAxMzE2NDgsIDEzMTY1MCwgMTMxNjUyLCAxMzE2NTQsIDEzMTY1NiwgMTMxNjU4LCAxMzE2NjAsIAorICAgIDEzMTY2MiwgMTMxNjY0LCAxMzE2NjYsIDEzMTY2OCwgMTMxNjcwLCAxMzE2NzIsIDEzMTY3NCwgMTMxNjc2LCAxMzE2NzgsIAorICAgIDEzMTY4MCwgMTMxNjgyLCAxMzE2ODQsIDEzMTY4NiwgMTMxNjg4LCAxMzE2OTAsIDEzMTY5MiwgMTMxNjk0LCAxMzE2OTYsIAorICAgIDEzMTY5OCwgMTMxNzAwLCAxMzE3MDIsIDEzMTcwNCwgMTMxNzA2LCAxMzE3MDgsIDEzMTcxMCwgMTMxNzEyLCAxMzE3MTQsIAorICAgIDEzMTcxNiwgMTMxNzE4LCAxMzE3MjAsIDEzMTcyMiwgMTMxNzI0LCAxMzE3MjYsIDEzMTcyOCwgMTMxNzMwLCAxMzE3MzIsIAorICAgIDEzMTczNCwgMTMxNzM2LCAxMzE3MzgsIDEzMTc0MCwgMTMxNzQyLCAxMzE3NDQsIDEzMTc0NiwgMTMxNzQ4LCAxMzE3NTAsIAorICAgIDEzMTc1MiwgMTMxNzU0LCAxMzE3NTYsIDEzMTc1OCwgMTMxNzYwLCAxMzE3NjIsIDEzMTc2NCwgMTMxNzY2LCAxMzE3NjgsIAorICAgIDEzMTc3MCwgMTMxNzcyLCAxMzE3NzQsIDEzMTc3NiwgMTMxNzc4LCAxMzE3ODAsIDEzMTc4MiwgMTMxNzg0LCAxMzE3ODYsIAorICAgIDEzMTc4OCwgMTMxNzkwLCAxMzE3OTIsIDEzMTc5NCwgMTMxNzk2LCAxMzE3OTgsIDEzMTgwMCwgMTMxODAyLCAxMzE4MDQsIAorICAgIDEzMTgwNiwgMTMxODA4LCAxMzE4MTAsIDEzMTgxMiwgMTMxODE0LCAxMzE4MTYsIDEzMTgxOCwgMTMxODIwLCAxMzE4MjIsIAorICAgIDEzMTgyNCwgMTMxODI2LCAxMzE4MjgsIDEzMTgzMCwgMTMxODMyLCAxMzE4MzQsIDEzMTgzNiwgMTMxODM4LCAxMzE4NDAsIAorICAgIDEzMTg0MiwgMTMxODQ0LCAxMzE4NDYsIDEzMTg0OCwgMTMxODUwLCAxMzE4NTIsIDEzMTg1NCwgMTMxODU2LCAxMzE4NTgsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTg2MCwgMTMxODcwLCAxMzE4ODAsIDEzMTg4OSwgMTMxODk4LCAxMzE5MTEsIAorICAgIDEzMTkyNCwgMTMxOTM2LCAxMzE5NDgsIDEzMTk1OCwgMTMxOTY4LCAxMzE5NzgsIDEzMTk4OCwgMTMxOTk5LCAxMzIwMTAsIAorICAgIDEzMjAyMCwgMTMyMDI5LCAxMzIwMzgsIDEzMjA0NywgMTMyMDYwLCAxMzIwNzMsIDEzMjA4NSwgMTMyMDk3LCAxMzIxMDcsIAorICAgIDEzMjExNywgMTMyMTI3LCAxMzIxMzcsIDEzMjE0NiwgMTMyMTU1LCAxMzIxNjQsIDEzMjE3MywgMTMyMTgyLCAxMzIxOTEsIAorICAgIDEzMjIwMCwgMTMyMjA5LCAxMzIyMTgsIDEzMjIyNywgMTMyMjM2LCAxMzIyNDUsIDEzMjI1NiwgMTMyMjY2LCAxMzIyNzYsIAorICAgIDEzMjI4OSwgMTMyMjk5LCAxMzIzMTIsIDEzMjMxOSwgMTMyMzI5LCAxMzIzMzYsIDEzMjM0MywgMTMyMzUwLCAxMzIzNTcsIAorICAgIDEzMjM2NCwgMTMyMzcxLCAxMzIzODAsIDEzMjM4OSwgMTMyMzk4LCAxMzI0MDcsIDEzMjQxNiwgMTMyNDI1LCAxMzI0MzQsIAorICAgIDEzMjQ0MywgMTMyNDUxLCAxMzI0NTksIDEzMjQ2NiwgMTMyNDc2LCAxMzI0ODUsIDEzMjQ5MywgMTMyNTAwLCAxMzI1MTAsIAorICAgIDEzMjUxOSwgMTMyNTI5LCAxMzI1MzksIDEzMjU1MCwgMTMyNTYwLCAxMzI1NjksIDEzMjU3OSwgMTMyNTg4LCAxMzI1OTgsIAorICAgIDEzMjYwNiwgMTMyNjEwLCAxMzI2MTQsIDEzMjYxOCwgMTMyNjIyLCAxMzI2MjYsIDEzMjYzMCwgMTMyNjM0LCAxMzI2MzgsIAorICAgIDEzMjY0MiwgMTMyNjQ2LCAxMzI2NDksIDEzMjY1MywgMTMyNjU2LCAxMzI2NTksIDEzMjY2MywgMTMyNjY3LCAxMzI2NzEsIAorICAgIDEzMjY3NSwgMTMyNjc5LCAxMzI2ODMsIDEzMjY4NywgMTMyNjkxLCAxMzI2OTUsIDEzMjY5OSwgMTMyNzAzLCAxMzI3MDcsIAorICAgIDEzMjcxMSwgMTMyNzE1LCAxMzI3MTksIDEzMjcyMywgMTMyNzI3LCAxMzI3MzEsIDEzMjczNSwgMTMyNzM5LCAxMzI3NDMsIAorICAgIDEzMjc0NywgMTMyNzUxLCAxMzI3NTUsIDEzMjc1OSwgMTMyNzYzLCAxMzI3NjcsIDEzMjc3MSwgMTMyNzc1LCAxMzI3NzksIAorICAgIDEzMjc4MywgMTMyNzg3LCAxMzI3OTEsIDEzMjc5NSwgMTMyNzk5LCAxMzI4MDMsIDEzMjgwNywgMTMyODExLCAxMzI4MTUsIAorICAgIDEzMjgxOSwgMTMyODIzLCAxMzI4MjcsIDEzMjgzMSwgMTMyODM1LCAxMzI4MzksIDEzMjg0MywgMTMyODQ3LCAxMzI4NTEsIAorICAgIDEzMjg1NSwgMTMyODU5LCAxMzI4NjMsIDEzMjg2NywgMTMyODcxLCAxMzI4NzUsIDEzMjg3OSwgMTMyODgzLCAxMzI4ODcsIAorICAgIDEzMjg5MSwgMTMyODk1LCAxMzI4OTksIDEzMjkwMywgMTMyOTA3LCAxMzI5MTEsIDEzMjkxNSwgMTMyOTE5LCAxMzI5MjMsIAorICAgIDEzMjkyNywgMTMyOTMxLCAxMzI5MzUsIDEzMjkzOSwgMTMyOTQzLCAxMzI5NDcsIDEzMjk1MSwgMTMyOTU1LCAxMzI5NTksIAorICAgIDEzMjk2MywgMTMyOTY3LCAxMzI5NzEsIDEzMjk3NSwgMTMyOTc5LCAxMzI5ODMsIDEzMjk4NywgMTMyOTkxLCAxMzI5OTUsIAorICAgIDEzMjk5OSwgMTMzMDAyLCAxMzMwMDYsIDEzMzAxMCwgMTMzMDE0LCAxMzMwMTgsIDEzMzAyMiwgMTMzMDI2LCAxMzMwMzAsIAorICAgIDEzMzAzNCwgMTMzMDM4LCAxMzMwNDIsIDEzMzA0NiwgMTMzMDUwLCAxMzMwNTQsIDEzMzA1OCwgMTMzMDYyLCAxMzMwNjYsIAorICAgIDEzMzA3MCwgMTMzMDc0LCAxMzMwNzgsIDEzMzA4MiwgMTMzMDg2LCAxMzMwOTAsIDEzMzA5NCwgMTMzMDk4LCAxMzMxMDIsIAorICAgIDEzMzEwNiwgMTMzMTEwLCAxMzMxMTQsIDEzMzExOCwgMTMzMTIyLCAxMzMxMjYsIDEzMzEzMCwgMTMzMTM0LCAxMzMxMzgsIAorICAgIDEzMzE0MiwgMTMzMTQ2LCAxMzMxNTAsIDEzMzE1NCwgMTMzMTU4LCAxMzMxNjIsIDEzMzE2NiwgMTMzMTcwLCAxMzMxNzQsIAorICAgIDEzMzE3OCwgMTMzMTgyLCAxMzMxODYsIDEzMzE5MCwgMTMzMTk0LCAxMzMxOTgsIDEzMzIwMiwgMTMzMjA2LCAxMzMyMTAsIAorICAgIDEzMzIxNCwgMTMzMjE4LCAxMzMyMjIsIDEzMzIyNiwgMTMzMjMwLCAxMzMyMzQsIDEzMzIzOCwgMTMzMjQyLCAxMzMyNDYsIAorICAgIDEzMzI1MCwgMTMzMjU0LCAxMzMyNTgsIDEzMzI2MiwgMTMzMjY2LCAxMzMyNzAsIDEzMzI3NCwgMTMzMjc4LCAxMzMyODIsIAorICAgIDEzMzI4NiwgMTMzMjkwLCAxMzMyOTQsIDEzMzI5OCwgMTMzMzAyLCAxMzMzMDYsIDEzMzMxMCwgMTMzMzE0LCAxMzMzMTgsIAorICAgIDEzMzMyMiwgMTMzMzI2LCAxMzMzMzAsIDEzMzMzNCwgMTMzMzM4LCAxMzMzNDIsIDEzMzM0NiwgMTMzMzUwLCAxMzMzNTQsIAorICAgIDEzMzM1OCwgMTMzMzYyLCAxMzMzNjYsIDEzMzM3MCwgMTMzMzc0LCAxMzMzNzgsIDEzMzM4MiwgMTMzMzg2LCAxMzMzOTAsIAorICAgIDEzMzM5NCwgMTMzMzk4LCAxMzM0MDIsIDEzMzQwNiwgMTMzNDEwLCAxMzM0MTQsIDEzMzQxOCwgMTMzNDIyLCAxMzM0MjYsIAorICAgIDEzMzQzMCwgMTMzNDM0LCAxMzM0MzgsIDEzMzQ0MiwgMTMzNDQ2LCAxMzM0NTAsIDEzMzQ1NCwgMTMzNDU4LCAxMzM0NjIsIAorICAgIDEzMzQ2NiwgMTMzNDcwLCAxMzM0NzQsIDEzMzQ3OCwgMTMzNDgyLCAxMzM0ODYsIDEzMzQ5MCwgMTMzNDk0LCAxMzM0OTgsIAorICAgIDEzMzUwMiwgMTMzNTA2LCAxMzM1MTAsIDEzMzUxNCwgMTMzNTE4LCAxMzM1MjIsIDEzMzUyNiwgMTMzNTMwLCAxMzM1MzQsIAorICAgIDEzMzUzOCwgMTMzNTQyLCAxMzM1NDYsIDEzMzU1MCwgMTMzNTU0LCAxMzM1NTgsIDEzMzU2MiwgMTMzNTY2LCAxMzM1NzAsIAorICAgIDEzMzU3NCwgMTMzNTc4LCAxMzM1ODIsIDEzMzU4NiwgMTMzNTkwLCAxMzM1OTQsIDEzMzU5OCwgMTMzNjAyLCAxMzM2MDYsIAorICAgIDEzMzYxMCwgMTMzNjE0LCAxMzM2MTgsIDEzMzYyMiwgMTMzNjI2LCAxMzM2MzAsIDEzMzYzNCwgMTMzNjM4LCAxMzM2NDIsIAorICAgIDEzMzY0NiwgMTMzNjUwLCAxMzM2NTQsIDEzMzY1OCwgMTMzNjYyLCAxMzM2NjYsIDEzMzY3MCwgMTMzNjc0LCAxMzM2NzgsIAorICAgIDEzMzY4MiwgMTMzNjg2LCAxMzM2OTAsIDEzMzY5NCwgMTMzNjk4LCAxMzM3MDIsIDEzMzcwNiwgMTMzNzEwLCAxMzM3MTQsIAorICAgIDEzMzcxOCwgMTMzNzIyLCAxMzM3MjYsIDEzMzczMCwgMTMzNzM0LCAxMzM3MzgsIDEzMzc0MiwgMTMzNzQ2LCAxMzM3NTAsIAorICAgIDEzMzc1NCwgMTMzNzU4LCAxMzM3NjIsIDEzMzc2NiwgMTMzNzcxLCAxMzM3NzYsIDEzMzc4MSwgMTMzNzg1LCAxMzM3OTEsIAorICAgIDEzMzc5OCwgMTMzODA1LCAxMzM4MTIsIDEzMzgxOSwgMTMzODI2LCAxMzM4MzMsIDEzMzg0MCwgMTMzODQ3LCAxMzM4NTQsIAorICAgIDEzMzg2MSwgMTMzODY4LCAxMzM4NzUsIDEzMzg4MiwgMTMzODg4LCAxMzM4OTUsIDEzMzkwMiwgMTMzOTA4LCAxMzM5MTUsIAorICAgIDEzMzkyMiwgMTMzOTI5LCAxMzM5MzYsIDEzMzk0MywgMTMzOTUwLCAxMzM5NTcsIDEzMzk2NCwgMTMzOTcxLCAxMzM5NzgsIAorICAgIDEzMzk4NSwgMTMzOTkyLCAxMzM5OTksIDEzNDAwNSwgMTM0MDExLCAxMzQwMTgsIDEzNDAyNSwgMTM0MDM0LCAxMzQwNDMsIAorICAgIDEzNDA1MiwgMTM0MDYxLCAxMzQwNjYsIDEzNDA3MSwgMTM0MDc3LCAxMzQwODMsIDEzNDA4OSwgMTM0MDk1LCAxMzQxMDEsIAorICAgIDEzNDEwNywgMTM0MTEzLCAxMzQxMTksIDEzNDEyNSwgMTM0MTMxLCAxMzQxMzcsIDEzNDE0MywgMTM0MTQ4LCAxMzQxNTQsIAorICAgIDEzNDE2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiAvKiBuYW1lLT5jb2RlIGRpY3Rpb25hcnkgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29kZV9oYXNoW10gPSB7CiAgICAgNzQyMjQsIDQ4NTEsIDAsIDc4MTU2LCA3ODQ5OSwgMTI4Njg1LCA3OTI5LCAwLCAxOTQ2ODIsIDEyNzc2NiwgNzg1MDAsIAotICAgIDY2NDgwLCAwLCA0MjgzMywgNzQ1MjksIDEyMDY0LCAwLCA1OTYsIDk4MzgxMiwgNjk4NTAsIDEzMTkyLCA4NjUxLCAwLCAwLCAKKyAgICA2NjQ4MCwgMCwgNDI4MzMsIDc0NTI5LCAxMjA2NCwgMCwgNTk2LCA5ODM4MjEsIDY5ODUwLCAxMzE5MiwgODY1MSwgMCwgMCwgCiAgICAgMTIwMjE4LCAxMjk5NSwgNjQ4NjUsIDEzNzMsIDAsIDAsIDU4MTYsIDExOTA2NywgNjQ4MTAsIDQyMzEsIDY4MjUsIDQyODk3LCAKICAgICA0MjMzLCA0MjM0LCA0MjMyLCA5MTc4MzYsIDc0NDE1LCAxMjAyMTAsIDYzODQsIDkxNzg0MCwgNzgxMDgsIDg4NTEsIDAsIAotICAgIDEyODU1MywgMCwgNDE2MDEsIDg4NzQsIDk4Mzc3NCwgNzc0OCwgMCwgMCwgMCwgMTI3OTM5LCA0MTYwMywgOTc4NCwgMCwgCisgICAgMTI4NTUzLCAwLCA0MTYwMSwgODg3NCwgOTgzNzgzLCA3NzQ4LCAwLCAwLCAwLCAxMjc5MzksIDQxNjAzLCA5Nzg0LCAwLCAKICAgICA5MTg4LCA0MTYwMCwgMCwgMTIwNjE4LCAxMjgzNDMsIDE0NTcsIDM1MzUsIDAsIDAsIDAsIDAsIDY1MjQwLCAxMTk1MSwgMCwgCiAgICAgMzQwNCwgMCwgMCwgMCwgMTc1OSwgMCwgNDEwNzYsIDY4MzgzLCAxMjA1NzIsIDExOTIwNSwgNjY1NzcsIDk0MDE0LCAKLSAgICAxMjc3NjQsIDY1ODU5LCAwLCA3NDA0LCAwLCAwLCAwLCAwLCA2NTkwOCwgOTgzNCwgMzA1NSwgOTg1MiwgOTgzODUxLCAKKyAgICAxMjc3NjQsIDY1ODU5LCAwLCA3NDA0LCAwLCAwLCAwLCAwLCA2NTkwOCwgOTgzNCwgMzA1NSwgOTg1MiwgOTgzODYwLCAKICAgICA2NTI4OCwgMCwgMTEzOTgsIDAsIDkyNDE3LCAxMTkyNTUsIDAsIDAsIDYwMywgNzQzOTgsIDQzNTQ4LCAwLCAwLCA5MTc4MjQsIAogICAgIDMzNTAsIDEyMDgxNywgNjQzMTgsIDkxNzgyOCwgMTI3MDg5LCAzMzkwLCA3NDQ4MywgNDMyNjUsIDEyMDU5OSwgOTE3ODMwLCAKICAgICA3ODU3MywgMCwgMTkxOSwgMzQwMCwgMTIwNjUxLCAxMjc5NDQsIDExNjQ3LCA5MTc1NDAsIDY2NDQ2LCA2NDE0MSwgODU2MiwgCi0gICAgMjEyMSwgNjQxMzgsIDQwNDMsIDg3MTIsIDY0MTM0LCA2NDEzMywgMTEyOTcsIDk4MzY3OSwgOTgzMTUyLCAxMTk2NiwgCi0gICAgNjQxMjgsIDEyODU4NywgMCwgMCwgNjQxMzIsIDEwODY3LCA2NDEzMCwgNjQxMjksIDk4MzgzNSwgNDMzNzQsIDk3NzksIAorICAgIDIxMjEsIDY0MTM4LCA0MDQzLCA4NzEyLCA2NDEzNCwgNjQxMzMsIDExMjk3LCA5ODM2ODgsIDk4MzE1MiwgMTE5NjYsIAorICAgIDY0MTI4LCAxMjg1ODcsIDAsIDAsIDY0MTMyLCAxMDg2NywgNjQxMzAsIDY0MTI5LCA5ODM4NDQsIDQzMzc0LCA5Nzc5LCAKICAgICAyNzY0LCA2NjAwMiwgMTAxNjcsIDk0NzEsIDAsIDY2MDIxLCAwLCAwLCA1NDU3LCA1NDQwLCA4ODU3LCA5Mzk4MSwgNjUyODIsIAotICAgIDI4NDMsIDUzNTUsIDEyNzkyOCwgOTgzOTU2LCAwLCA1MTk0LCAxMTY1NywgNDM5ODQsIDEyODI5MiwgMCwgOTgzNjIwLCAwLCAKKyAgICAyODQzLCA1MzU1LCAxMjc5MjgsIDk4Mzk2NSwgMCwgNTE5NCwgMTE2NTcsIDQzOTg0LCAxMjgyOTIsIDAsIDk4MzYyMCwgMCwgCiAgICAgMCwgMTI3MDI3LCAxMDcxNywgNjQ1NzAsIDU2MzAsIDUzOTYsIDY0MTQzLCAxMDY4MiwgMCwgMTA2MDIsIDgwMCwgNDI0OTksIAogICAgIDY2MTg2LCAwLCAwLCA2NDkzMCwgMTE2MzEsIDY0MTQ2LCA2NDE0NSwgNjQxNDQsIDc2MiwgMTMxNzIsIDExODg1OSwgCiAgICAgMTk0NjYxLCA2NDQ2OCwgMTA5MDYsIDEzNTMsIDY5NjAsIDAsIDAsIDU4MjgsIDg3MjQsIDkxNzgwNiwgODkzMywgMTYwMSwgCiAgICAgNDIyNDQsIDg1OCwgNzA4MCwgNjQxMDksIDY0MTA4LCA4MDkwLCAwLCA3NDQwMSwgOTE3ODExLCA1ODcsIDAsIDEyODEzMSwgCi0gICAgMCwgMCwgMCwgNzgyMTQsIDI3NTAsIDc0MjE4LCA1NTYsIDY0MTU4LCA2NDE1NywgOTgzOTQwLCAxMjIxMywgMTk0Njc4LCAKKyAgICAwLCAwLCAwLCA3ODIxNCwgMjc1MCwgNzQyMTgsIDU1NiwgNjQxNTgsIDY0MTU3LCA5ODM5NDksIDEyMjEzLCAxOTQ2NzgsIAogICAgIDI3NjAsIDAsIDAsIDAsIDE5NDc5NCwgNjQxNTYsIDY0MTU1LCA0MjQ5NiwgMCwgNjQxNTEsIDY0MTUwLCAxMjY3OSwgCiAgICAgMTAwNTMsIDEwNDIxLCAxMTA5MywgNjQxNTMsIDY0MTUyLCAwLCAwLCA0ODM5LCAwLCAwLCAxODc0LCAxMTkwMTYsIDAsIAogICAgIDY1NzcsIDY0MTI1LCA2NDEyNCwgNjQxMjMsIDAsIDEyNzUzMSwgOTI1MzQsIDcwMDcsIDc1OTAsIDY1NDQzLCA5MDM2LCAKQEAgLTE3MTE0LDEyICsxNzEzMywxMiBAQAogICAgIDY0MTAyLCA3ODU5LCAxOTQ1LCA2NDA5OSwgMCwgMTA0NTMsIDY0MTA0LCA3MTg4LCA3OTk3LCAwLCA3Mzg5LCA5ODMxNjEsIAogICAgIDg3MDUsIDY0MDk3LCA2NDA5NiwgOTU3MSwgNTI4LCAxMjg2NzEsIDQ0MDE3LCAxMTQyOSwgNzEzNDcsIDAsIDk4MzA3NywgCiAgICAgOTE3OTkwLCA3Mzg0MSwgMCwgMCwgOTA1NiwgNjQzMTMsIDYxODgsIDEyMDAxOSwgNjE1NSwgNjQwNjgsIDE4MjMsIDY0MDY2LCAKLSAgICA2NDA2NSwgNjQwNzIsIDY0MDcxLCA2MywgNzIzMywgOTIyMTIsIDAsIDQxOTA0LCA2NjM5LCA2NDA2NCwgOTgzNzY2LCAKLSAgICAxMjgzNDQsIDAsIDExNzYsIDExODk1OSwgMTI3OTMwLCA4MTYyLCAxMjg2NjcsIDk4MzgyMiwgMCwgMTIwNTE5LCA2NjM3NiwgCisgICAgNjQwNjUsIDY0MDcyLCA2NDA3MSwgNjMsIDcyMzMsIDkyMjEyLCAwLCA0MTkwNCwgNjYzOSwgNjQwNjQsIDk4Mzc3NSwgCisgICAgMTI4MzQ0LCAwLCAxMTc2LCAxMTg5NTksIDEyNzkzMCwgODE2MiwgMTI4NjY3LCA5ODM4MzEsIDAsIDEyMDUxOSwgNjYzNzYsIAogICAgIDY2MjQyLCAxMTQxNSwgNDMzMywgOTg1NSwgNjQxMTIsIDY0NjQyLCAwLCA1Mzg4LCAwLCAwLCAwLCA3NzE0LCA2NjIyMiwgCi0gICAgNjk5MDIsIDc3NjgsIDAsIDQxOTksIDY0NzA4LCA5ODM0MTMsIDAsIDAsIDg3MDgsIDk1NjAsIDY0MDc3LCA2NDA3NiwgCisgICAgNjk5MDIsIDc3NjgsIDAsIDQxOTksIDY0NzA4LCA5ODM0MjEsIDAsIDAsIDg3MDgsIDk1NjAsIDY0MDc3LCA2NDA3NiwgCiAgICAgODk5NiwgNDk5MiwgNDQ3MSwgNDI2MjIsIDY0MDc5LCA2NDA3OCwgOTIxNzksIDAsIDEyNjU3MCwgMCwgNjQ2MTUsIDQxOTE1LCAKLSAgICAwLCAxMjA3NSwgNzAwNjIsIDAsIDUxNzQsIDk4MzIxNSwgMCwgMTI3NTU3LCAzMTIzLCAwLCAxMjY4NSwgMTI3OTA0LCAKKyAgICAwLCAxMjA3NSwgNzAwNjIsIDAsIDUxNzQsIDk4MzIxNywgMCwgMTI3NTU3LCAzMTIzLCAwLCAxMjY4NSwgMTI3OTA0LCAKICAgICA4NDA4LCA2NDcwNCwgMCwgMCwgOTIyMywgMCwgNDE2MTYsIDY3OTk5LCA3Mzc5NywgMCwgMTExNiwgMTI4MjA0LCA0MzA0OSwgCiAgICAgNzEzNiwgNDMwNTAsIDg1NDgsIDEyMDQ4NSwgMCwgMTE5MDYxLCA5MTc5OTksIDAsIDEzMTE1LCA0MzY3NSwgNjQwOTEsIAogICAgIDkzMjIsIDAsIDEyMDU5NSwgNjQwOTUsIDY0MDk0LCA4MTExLCA2NjI0NywgNDIzMzIsIDY0MDg5LCA2NDA4OCwgNjE5OSwgMCwgCkBAIC0xNzEyNywxMCArMTcxNDYsMTAgQEAKICAgICA5OTI3LCA0MTMzNSwgNDExOCwgMTc5NywgMCwgNDEzMzQsIDAsIDQ2LCA0MzQ0OCwgMTI3ODgxLCAyOTgsIDAsIDEyODExNCwgCiAgICAgMCwgNDI2MjcsIDAsIDMyLCA2MTg3LCAxMTkwNTIsIDExNDk1LCAxMTQ1OSwgMzY2NSwgOTgzNjAwLCA0Mjg3MSwgMCwgCiAgICAgMTk5MjMsIDc0MzM1LCAwLCAxMjcxOTIsIDY2MjM5LCA0MjI2NCwgNjQ0MDMsIDQ0MTIsIDcyNDAsIDkyNDk1LCAwLCAKLSAgICA5ODM0NTgsIDY1NzU4LCAxMjc1MCwgNDE4MSwgODU0NCwgMCwgMTIwMTk5LCA5MTc4OTcsIDEyMDE5OCwgNjk4MDksIDYxODEsIAorICAgIDk4MzQ2NiwgNjU3NTgsIDEyNzUwLCA0MTgxLCA4NTQ0LCAwLCAxMjAxOTksIDkxNzg5NywgMTIwMTk4LCA2OTgwOSwgNjE4MSwgCiAgICAgNjUwMTQsIDAsIDAsIDk4MzE5NiwgMzYzOSwgMTE5NTg4LCAwLCAwLCAxMTg5MDQsIDEwMDczLCAxMjAyMDYsIDEyODg2MiwgCiAgICAgMTI3MTg2LCA2ODQwOSwgNDI4NDQsIDc0OTgsIDEwOTgsIDkyNTY1LCAxMjAyMDUsIDAsIDk4MzExOCwgMTAyMDcsIDg3ODksIAotICAgIDk4MzIyMywgMCwgMCwgOTgzNDY0LCA5MjM0LCAwLCA2MTgyLCA5ODM0NjYsIDY1MDU4LCAwLCA5ODM0NzAsIDk4MzQ2NywgMCwgCisgICAgOTgzMjI1LCAwLCAwLCA5ODM0NzIsIDkyMzQsIDAsIDYxODIsIDk4MzQ3NCwgNjUwNTgsIDAsIDk4MzQ3OCwgOTgzNDc1LCAwLCAKICAgICA1NDcxLCA5NDYxLCA1NTczLCAxMTg5MzYsIDU0NzMsIDQ0LCAwLCA2NjI0NCwgOTQwNzIsIDAsIDY2MjM4LCAxMjg0NCwgMCwgCiAgICAgMTYyMiwgNzc2NywgMTkwMCwgNDEzMzksIDExNDU4LCAwLCAwLCA2NTgxLCA1NTc2LCAwLCA2NDQwNSwgNDEzMzcsIDAsIAogICAgIDQxNjMxLCA4OTQ3LCA2ODM5MCwgMTI3ODQ0LCA0MTY5NCwgMCwgMCwgNzkwOCwgMCwgMTA0MDgsIDY1NzksIDAsIDY0NjE4LCAKQEAgLTE3MTM4LDEwICsxNzE1NywxMCBAQAogICAgIDk5OTIsIDEyODI5OSwgNTA1NywgMCwgMCwgNzQ1MzgsIDUwNTQsIDExODk1MSwgMTk0OTcxLCA3ODYwNiwgMCwgMTQzNywgCiAgICAgNDE2MTcsIDY1OCwgMzQ5NywgMTI4NTA5LCA3NDg2LCA1MDYxLCA1MDYwLCA0MjM1LCAxMjc4NzgsIDAsIDEyODUyOSwgCiAgICAgMTIxMTMsIDQyMzYsIDQ3MjcsIDAsIDAsIDc2OTMsIDEwNzQ5LCAwLCA3NDg4LCA1NzczLCA5NzgsIDEyODEzNCwgMCwgCi0gICAgNDE2MTksIDEwMjM5LCA2ODYxMSwgMCwgNjYyMDksIDAsIDEyODcwMCwgOTc0OCwgOTgzOTQ3LCAxMjc1MjQsIDAsIDAsIDAsIAotICAgIDAsIDE5NTA4MywgMCwgOTgzODM0LCAwLCAwLCAwLCAwLCAwLCA5MzQxLCAxMTk1OTYsIDIzNzksIDExMzI1LCAwLCA2NDY2OCwgCi0gICAgNjc4NTQsIDgxMjUsIDEyMDU0NSwgNjc0MywgMTE5MTc1LCA5MTc5NDAsIDIzNjksIDAsIDk4Mzk2MywgOTgzOTY0LCAKLSAgICAxMTkyMzUsIDc0MDkyLCA3MzkzNiwgNzAwOCwgNDM2NjAsIDAsIDAsIDAsIDIzNjcsIDEyNzgyNywgOTgzODQ4LCAyNjQsIAorICAgIDQxNjE5LCAxMDIzOSwgNjg2MTEsIDAsIDY2MjA5LCAwLCAxMjg3MDAsIDk3NDgsIDk4Mzk1NiwgMTI3NTI0LCAwLCAwLCAwLCAKKyAgICAwLCAxOTUwODMsIDAsIDk4Mzg0MywgMCwgMCwgMCwgMCwgMCwgOTM0MSwgMTE5NTk2LCAyMzc5LCAxMTMyNSwgMCwgNjQ2NjgsIAorICAgIDY3ODU0LCA4MTI1LCAxMjA1NDUsIDY3NDMsIDExOTE3NSwgOTE3OTQwLCAyMzY5LCAwLCA5ODM5NzIsIDk4Mzk3MywgCisgICAgMTE5MjM1LCA3NDA5MiwgNzM5MzYsIDcwMDgsIDQzNjYwLCAwLCAwLCAwLCAyMzY3LCAxMjc4MjcsIDk4Mzg1NywgMjY0LCAKICAgICAyMzc1LCA4MDYwLCA2MTk0LCAxMTk4NTgsIDE4NDQsIDExOTA4NCwgMCwgNjAxOSwgMCwgMCwgNjk2MSwgMCwgMTE4ODM5LCAKICAgICAwLCA4ODAwLCAwLCA0Mjg2MiwgNDQ2MywgNjU1ODEsIDYxOTIsIDE5NDY3NiwgNDI3NzEsIDAsIDkyMzMzLCA3MjUsIAogICAgIDY1MDQyLCAxMTg3OTcsIDEyMDgwMCwgOTgzMDQwLCAxMjg5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjYxLCAxMjA3MDcsIApAQCAtMTcxNTksNjM0ICsxNzE3OCw2MzQgQEAKICAgICAxMjY1MDMsIDQxNjA3LCAxMjAxMTUsIDE2NzksIDEyMDExNiwgMTIwMTgwLCAxMjAxMTMsIDEyNzQ2MiwgNzAwNSwgNDE2MDksIAogICAgIDk1ODAsIDAsIDQwMSwgNjk5NDksIDQzNzc5LCA2OTY4LCA1NzYxLCAzNDIsIDg1NTMsIDAsIDgxNDMsIDEyNzExNSwgCiAgICAgMTE5ODMsIDkyMjQ5LCA2MjQsIDc0NTA4LCA0MDU3LCA0Mzc4OCwgNTA3OCwgNzQyNTgsIDEyNDc4LCAwLCA1MDc2LCAwLCAKLSAgICAxOTQ2MDksIDAsIDEyMDA5NywgNjg1LCA5MDI1LCAxNTI0LCAxMjYxOCwgMCwgNTUzOSwgMCwgOTI1MjMsIDEyMDEwMiwgCi0gICAgNzEzOCwgMTIwNTUyLCAwLCAxOTQ2MTEsIDc4NzUyLCAwLCAxMjUyMCwgODA1OCwgOTczMiwgMCwgNTA4MCwgNjQ3NzUsIAotICAgIDUwMzYsIDUwMzUsIDEyMDU5MCwgNDI2MDQsIDk4MzY0NywgMCwgODA3NCwgMjc1LCAxMzI5MSwgMTkwNywgNzg4MzgsIAotICAgIDQ0MzIsIDEyNzI3MSwgNTAzMywgMTI3MjczLCAxMjcyNzIsIDQ4MzYsIDM4ODgsIDczNzkyLCAxMDcyOSwgNjQ1NDYsIAotICAgIDEyNzI2MiwgNDM3MDQsIDEyNzI2NCwgMTI3MjUxLCA2NzU4OCwgMTE5MDAwLCAxMjcyNTIsIDEyNzI1NSwgODg1OCwgNjQwOSwgCi0gICAgMTI3MjU2LCAxMjAyNTIsIDEyODEwMCwgMCwgMCwgNjYzMjEsIDAsIDEyODE0LCAxMjcyNDgsIDM0MzIsIDEwMjE4LCAwLCAKLSAgICA2MDk0LCA3NjQxLCA0MjQ0NSwgMCwgOTI0ODcsIDQyNDA2LCAxNjc2LCA3NDMyMCwgMTk0NjA3LCA5ODMxNzcsIDUwMzAsIDAsIAotICAgIDAsIDAsIDczODY5LCA5NjIyLCAwLCA2OTk0NCwgNjc4NywgMCwgMCwgMCwgOTgzNTgzLCAxMDU0NCwgMTI5MTksIDAsIAotICAgIDkyMjE4LCAwLCAwLCA2OTkwNiwgMTIwNzg5LCAwLCA5NDcsIDExOTgzNSwgMTk0NTg2LCAxOTQ1ODUsIDEwOTY5LCAKLSAgICAxMTk5MzUsIDc2MTMsIDkyNTYyLCAxMTk5MzYsIDQ3OTUsIDExOTkzMCwgNzAxOCwgNzM3NiwgMTIwMTgxLCAxMjAxOTIsIAotICAgIDEyMDI2OCwgMCwgNDM1NjcsIDc0MDU2LCA5MTc5MTAsIDExODMzLCAxMTk5MTksIDcyMTYsIDY1MjMyLCA3MjE3LCAyNTEsIAotICAgIDcyMTgsIDc4OTUsIDQzOTUsIDQzNTM4LCAxMTk5MjYsIDExOTkyOSwgMTE5OTI4LCA3MjEzLCAxMTk5MjIsIDcyMTQsIAotICAgIDcyMTUsIDk4MzgyNywgNzQxNDEsIDg4ODAsIDc2ODUsIDY2NDU5LCAxMjAxNzMsIDY1NTQwLCAxMTk2MTgsIDYyNSwgODE4NywgCi0gICAgNDI4NjEsIDExMTMsIDcyMzYsIDc5MTUsIDM2MzAsIDEyMDE3NiwgODE3OSwgNzQyNjQsIDY3ODg2LCA5MzE2LCAxMDk4MCwgCi0gICAgMjQ4OSwgNjU2MjQsIDgxNTAsIDEzNTksIDY3NjUyLCAxMjczMjksIDEyNzMzMCwgNzM3NTYsIDUwNDIsIDUwNDEsIDQyNzY5LCAKLSAgICAxMjA4NCwgMTI3MzI0LCAxMjczMjEsIDkyMjc5LCAxMjczMTksIDEyNzMyMCwgMTI3MzE3LCAxMjczMTgsIDEyNzMxNSwgCi0gICAgMTIyODMsIDE2MTYsIDM3OTUsIDAsIDg3OTUsIDY2MjQ1LCAwLCAwLCAwLCAxMTM4LCA3MzkwNSwgMTI2NzcsIDAsIDAsIAotICAgIDMyMzksIDEyNzMxMSwgMCwgMCwgODQzMSwgMCwgNDIxNjQsIDAsIDExNzc4LCAxMjYyMCwgNjgyNiwgNzM3NzMsIDExOTA3MywgCi0gICAgNTA0MCwgMCwgMCwgOTgzNDM1LCA3ODQyMCwgMCwgNTAzOSwgMCwgNzg0MTgsIDAsIDUwMzgsIDAsIDAsIDEzMTg0LCAKLSAgICA3NDI5MywgMCwgNjQ2NDgsIDAsIDkzNTksIDc4NDE2LCAwLCAxMjg3NzAsIDY1MTU3LCA2NjYyLCAwLCAwLCAzODYzLCAKLSAgICA3MzkwOSwgNDgzNSwgNTUyNjYsIDQzNDMyLCAxMjc4MjIsIDQzMDksIDcxMjcsIDE5NDU2OSwgMCwgMTk0NTY4LCAxMzAxLCAKLSAgICAwLCA0MjU4OSwgNTY5LCAwLCA3MzgxMywgNzExLCA0Mzg5LCA3MTMzLCAwLCA3Mzg4MCwgMTE2MTAsIDExMzY4LCAwLCAKLSAgICAxOTQ1NzAsIDQxMzMxLCAxMDA2LCA3NDI0MCwgMCwgMTU1MCwgODIwMSwgNzM3MzcsIDc2MjcsIDU0OTksIDUwMzEsIAotICAgIDc3OTA4LCA0MjczOCwgNjU3ODQsIDc3OTA3LCA2NTI2NywgMzc1OCwgMCwgNjU3ODEsIDY0NzM0LCA3MDA3MywgMjQ0MCwgCi0gICAgNjU3ODAsIDc3OTEzLCA4NDQ5LCAwLCA1MDA4LCA5ODM1NzIsIDIxMTgsIDAsIDEyMTIxLCA4MjU1LCA1NTEyLCA3Mzg3NSwgCi0gICAgMjEyOCwgMjEzMCwgMjEzMSwgMjEyNiwgMjEzMywgMTExOSwgMTI3MDY4LCAyMTE0LCAyMTE2LCAyNDU1LCAwLCAyMTIyLCAKLSAgICAyMTIzLCAyMTI0LCAyMTI1LCAxMjc0ODYsIDg3MTQsIDk4MzgxMSwgMjExMywgMCwgMjExNSwgMTI4MTc3LCAxMjc5MDcsIAotICAgIDQzNzEzLCA1MDUyLCA2NjIyMCwgNTgyMSwgNjE4NiwgNjU3NzgsIDY1Nzc1LCA1MDUxLCA2NTc3MywgMTQyOSwgNDI2NDcsIAotICAgIDUwNTAsIDMwMiwgMzg4LCA0MTExNSwgNzM1LCA2NjM3LCA1OTA3LCA2NTA4OCwgMCwgMTI3MjYsIDc0NTk0LCA5MTE3LCAKLSAgICA5ODMxODEsIDEyMDAzLCA1NTEzLCA2NjY2LCA1MDUzLCA3NDIzMCwgNTUxMCwgNzg0NTEsIDAsIDc4NDQ3LCAyNDcwLCAKLSAgICA3ODQzNywgMCwgMTkyNSwgMCwgOTIyMzcsIDc0ODA3LCAwLCA1MDQ4LCA1MDQ3LCAwLCAwLCAwLCA5MjMxMywgMCwgNzQ0OTcsIAotICAgIDkyMzk1LCA4MDg5LCA2OTI5LCA2MzksIDk4MzU2MywgNjgxNzksIDY0NDQyLCAwLCA5MjM0OCwgNDU5OSwgNDE0MDIsIAotICAgIDY2NzQsIDQzMzk3LCA0MzI5NCwgMTQ3NiwgNjQ4LCAwLCA2NTgxOSwgMzIzMywgMCwgNDE3ODIsIDY5NTEsIDk0MDE3LCAKLSAgICA5ODM5NjcsIDM1MzAsIDk3NTAsIDEyODMxNywgMCwgNjY1NiwgNDI2MTgsIDAsIDUwNDYsIDg1MTIsIDY1ODU2LCA3NDI2MSwgCi0gICAgODk2NywgMCwgNTA0NSwgNDIwMjYsIDE5MTYsIDc5ODYsIDUwNDQsIDEyMDU1NiwgOTAwNiwgMTMxMjgsIDUwNDMsIDAsIAotICAgIDc4NTMsIDc0MDY4LCA3NDAwNCwgOTY2OSwgMTIzNDEsIDEyNzAzLCA4NDAyLCAwLCAxMTkwNzAsIDkxNzYwMCwgNDE3NTAsIAotICAgIDM1ODYsIDY0NTA4LCA0MzE0OCwgMCwgMCwgMTE5NjA2LCA2Nzk4MywgMTMyOTYsIDUxNywgMCwgMTI4NTM0LCAxOTQ5NDYsIAotICAgIDQxNTI4LCAxMjMsIDY1NDU0LCAwLCAwLCA3NDQ3OCwgMTA1MzEsIDc3ODQsIDQxNTI2LCAxMDgyOSwgNzM5OTEsIDgwNTcsIAotICAgIDExMjYsIDczODk1LCAwLCAxOTQ1OTEsIDAsIDM5MjUsIDQyNTEsIDgwNjksIDEwNTE3LCAxMjA0MzksIDQ4OSwgMCwgNDI1MCwgCi0gICAgMTIwNDQxLCAxMjA0NTIsIDQzMTUxLCA5ODMxNzgsIDE5NDg1MSwgNjYyMDAsIDAsIDAsIDAsIDc4NDIzLCAwLCAwLCA4NzExLCAKLSAgICA2MTgzLCAwLCAwLCAwLCAxMjA0NDgsIDc2MjMsIDExODkyNSwgMTE4ODg5LCA5MjM1LCAxMjc2MCwgNzQxNzYsIDY5NjYyLCAKLSAgICA2NjQ0NSwgNDM1NDAsIDEwMDYyLCAzNzQzLCAxMTUxNCwgMTEwNzgsIDAsIDEyMTM2LCAwLCAxMjY1OTcsIDEyMDQzNSwgMCwgCi0gICAgNzcyNiwgMCwgMTk5MjIsIDI2NywgMzM5MywgNDIxOTgsIDEzNzEsIDE5NDg0OSwgNjkyMzMsIDI0NTgsIDAsIDYyMDEsIDAsIAotICAgIDQxMDc0LCA0MjY2LCAxMDY1MiwgNDE2MTIsIDQxMDc3LCAzNDAyLCA5MDUwLCAzMzk4LCAwLCA5ODMzNDAsIDAsIDMzOTEsIAotICAgIDQxMDc1LCAyNDc2LCAwLCAxMjgwMTcsIDAsIDEwNjI1LCAwLCAxMjc2NywgMTMwMTcsIDc4NzQzLCA2NDI2MSwgNjQ5MzQsIAotICAgIDEyNzUzNywgMTMwMTQsIDEzMDEzLCAwLCA2NjczLCAwLCAwLCAwLCAxMjQzOCwgMCwgOTgzMzM0LCAwLCA5ODM4NzEsIAotICAgIDEyNjYzOCwgOTA1MywgMTMwMTUsIDc0NTIzLCAwLCA3MDQsIDY2MjE1LCA2MTk1LCA5ODM4MTksIDY2NjAsIDc4NzU4LCAKLSAgICA5MTc3NjAsIDkxNzc5MywgNDIyMTIsIDEyNjI5LCAxMTQzNSwgMCwgNTUyNTYsIDY1NTM4LCAwLCAxMjc5NDAsIDk4MzMzMywgCi0gICAgNzQ1NDcsIDEyNjU4NSwgNjU0NDgsIDc4MTAwLCAxMjk0OCwgMTE5MDAxLCAxOTUwMDIsIDExOTIzOCwgMTk1MDA0LCAKLSAgICA3ODA5OSwgMTI3MDg1LCAwLCAxMjgzMjAsIDQyODcsIDgyNzYsIDQ5MDIsIDExMzEsIDAsIDc4NDU4LCA2NjcyOCwgMTgxNiwgCi0gICAgMCwgNDI1MzMsIDE2OCwgNDI4NDUsIDQ4OTgsIDY0Mjk4LCA5ODMxNDEsIDAsIDQ5MDEsIDE4MjEsIDAsIDU3OCwgMzY1MywgCi0gICAgMCwgNzkxLCA5MTYyLCA2OTc3LCAwLCA3ODg4OSwgNzQ1NjEsIDAsIDczNzMxLCA4MzU0LCA0MzU5MCwgMTE5MzAzLCAKLSAgICA5ODM0NDEsIDc1NTcsIDExOTMzOSwgMTE5MzAxLCA4MjM0LCA3MjQxLCAwLCAxMjA2NzEsIDExOTE2NywgMTk0OTk2LCAKLSAgICAxMjgxMSwgNjU5MjUsIDM5NDYsIDc4MDc4LCAxMDk5OCwgNzgwODAsIDY3MywgMTk0ODY3LCA2NDM5NywgMTI4Mjc2LCAKLSAgICA3NDU5OSwgNzg0NDksIDg4OTAsIDE5NDk3NywgMTk0OTc2LCAyNDQ4LCA3ODA4NSwgMTAyNjcsIDg0MjQsIDI0NTIsIAotICAgIDc4MDgzLCAxMjg4MjQsIDg3MjksIDc4NDU2LCAwLCA3ODQ1LCA5MTc5MTcsIDcxMzAyLCA0NDA4LCA0MTIyLCA2NzcyLCAKLSAgICAxMTAzOSwgODcyMywgMTk0OTkwLCA3MTMxMCwgMTE5MzAyLCA3MzEsIDExOTMwNCwgOTIyODYsIDI0MzgsIDY0ODU1LCAKLSAgICAxMTkzMDAsIDExOTI5OSwgMTE3NSwgMCwgNDIxMzUsIDM3MywgMTE5MTcyLCAyMTE5LCAxMTQ1NywgMTE1MjEsIDc3MjMsIDAsIAotICAgIDAsIDAsIDQxOTUyLCAwLCA1MjczLCAyMTI3LCA1MjY5LCA2MzM3LCA1MjAyLCAyNDA0LCA1MjY3LCA0MjgyMywgMTEyOTEsIAotICAgIDE5OTE1LCA1Mjc3LCAxMjk2MywgMTI3ODY0LCA2MTg5LCA0MTI1LCAxMzE0LCAxMjEzMywgMTIwMzQwLCAxMTg4NzMsIAotICAgIDEyNzEsIDk4MzYzMSwgMCwgNjYwMjQsIDQxNDgyLCAzODY0LCA3NDUzOSwgMCwgMzg3OSwgMCwgMTI5NzgsIDQxNjYsIAotICAgIDQ1NzQsIDAsIDc1NjcsIDc0NTksIDk4MzE2MCwgNDEzOTAsIDUzODQsIDQxODgyLCA2NzY0NywgOTI1NDgsIDU3NTksIAotICAgIDk4MzkwMywgMCwgNDEzODgsIDY0NDQ2LCA0MTM5MiwgNjQyODgsIDQxMzg3LCAwLCA4NzA2LCA1NTUyLCA5ODMxODcsIDcwMCwgCi0gICAgMCwgNTU1MywgMCwgNzA4OCwgNTM1NiwgNzQ5OSwgNjgwMDcsIDY2NTk2LCA3NDA2NiwgMCwgMTAyNjMsIDU1NTQsIDAsIAotICAgIDEyMzQ0LCAxMDMxMSwgNzgxMTMsIDY2NjUsIDkyNjI2LCAwLCA3NjE4LCA4NTE3LCAxMTQ1NSwgNzg0NDAsIDY0NjMyLCAKLSAgICA2NDQ0NywgNTU1NSwgNzgwODgsIDc4MDkzLCA3ODA5MSwgMCwgNDI4MDMsIDY1MDMzLCA5MTQzLCA2NjY4LCAxOTUwNjcsIAotICAgIDY3OTk1LCAxOTUwNjksIDY1NiwgMTk1MDcxLCA2NTAzNywgNDU3NywgNjQ2MjQsIDAsIDAsIDAsIDk4MzY0MCwgNDI2OSwgCi0gICAgNzM4ODUsIDkxNzc3NSwgNDI4NDYsIDY5NjQ0LCA5NTAsIDAsIDkyMjczLCA2NjU4MCwgMTE4ODk1LCA2NjY4MywgMTA1NTQsIAotICAgIDkxNzc3OCwgMTE5MTIxLCAwLCA1MDk4LCA5MTc3NzAsIDAsIDExOTA5OSwgNTA5NywgNDkzNSwgOTg0OCwgMTAzODEsIDAsIAotICAgIDEyODg3MCwgOTgzNjkyLCAzNjUxLCAwLCAxMjA3MzAsIDEyNzU1NiwgNTEwMiwgNTEwMSwgMTAyNjksIDEyOTgzLCA4MTM4LCAKLSAgICA0NTE3LCAxOTMyLCA1MTAwLCAxNDM5LCAxMjA5MywgMTI0NywgMTAwMzQsIDE5NTA2NCwgNTA5OSwgNzgzNzMsIDE0NDEsIAotICAgIDQyMDg3LCAzMDYzLCA2NTAsIDAsIDc4MzgsIDAsIDE5NTA0MSwgMTk1MDQwLCAxMTkxNDIsIDkwMzEsIDEyMDc5MCwgCi0gICAgMTI4NTgyLCA5MDc4LCA4NTQ1LCA2NjM1NiwgMTI4Nzk5LCAwLCA5MTU0LCA5MTE4LCAxMjY1NDMsIDAsIDI2NzYsIDIyNzcsIAotICAgIDAsIDczODEyLCA2MTkwLCA4NTk5LCAxOTUwNTMsIDY5OTE4LCAxMDc5NSwgOTg1NywgNzAxNCwgOTg1NiwgMTk1MDMzLCAKLSAgICA5MjYyMCwgMTIxMjksIDAsIDg0ODEsIDAsIDYyMDIsIDE5NTAzNSwgMTA5MjAsIDEyODIzNywgNTIwMywgMTk1MDM5LCAKLSAgICAxOTUwMzgsIDUxMDgsIDUxMDcsIDY1ODE4LCA2NjAxOSwgOTc2MiwgMCwgNTU0MSwgNzQ3NzIsIDAsIDEyNjEzLCA1Mjg0LCAKLSAgICA2NjU3LCAyMDcsIDEyODgwNiwgNDI3NSwgNzQ4MTksIDg1NCwgNjgxNDcsIDc0MzgxLCAwLCA3ODc4NiwgNTEwMywgCi0gICAgMTI3ODYxLCA2NDM0OCwgNDEzNjgsIDQzOTc0LCA0ODgsIDY5ODExLCAwLCA3MTMzOSwgMTAxNTcsIDAsIDQzMDM0LCAKLSAgICAxMTQzOCwgNjQ2NzQsIDAsIDkyNjk0LCA2ODQzMSwgNDE3NzEsIDUxMDYsIDY2NjksIDg1MDQsIDY1MTU0LCA2OTgxMywgCi0gICAgNDEzNjcsIDUxMDUsIDEyNzUwOSwgNjk3MjAsIDY0NzYsIDUxMDQsIDk4Mzc0MCwgMzA0LCAzMTc2LCAxMTkwMTAsIDAsIAotICAgIDkzMiwgMTIwNjMzLCA2NTY3LCAyMzgsIDY5NjU2LCAxOTUwMTEsIDE5NDU5NSwgMTk5MDUsIDEyMDU3NywgMTk1MDE1LCAKLSAgICA3ODg3MCwgNDEwNDQsIDY3NjQwLCAxOTQ5MDIsIDQyMDU1LCA5OTEyLCA2NTkzOSwgMTA2NzAsIDc0MDkzLCAxMzI3MywgMCwgCi0gICAgMTI1NTIsIDE5NTAxOSwgODgwMywgMzA5LCA2NjIyLCA4MTUxLCAxMDg1OCwgNzg3MDYsIDY3NjM2LCAwLCAxMjU2OCwgMCwgCi0gICAgMTI1NTMsIDEwODE0LCA0MzI3NSwgNjk1MCwgOTcxMiwgNjg2ODAsIDQzOTcwLCA5ODMxOTgsIDY1MTY1LCA5MjcyNSwgMCwgCi0gICAgNjY0NjYsIDAsIDAsIDAsIDY2NzI1LCA2MTkxLCAxMTM1MSwgMTA0MzcsIDExMzE2LCA2NzYzNCwgNDM3NjMsIDAsIDQxNzU0LCAKLSAgICA2NzYzNSwgOTM3MCwgMjcyMCwgMTk0OTc1LCA2ODQ2MiwgODIzMiwgMTE4ODE3LCAwLCAzMjIyLCAwLCAwLCAwLCA2NjY2MywgCi0gICAgMCwgMCwgMTA4MzQsIDAsIDAsIDY1NzMyLCA5NDA5NSwgOTE3NTQ3LCA5MjY4MiwgNjc2NzksIDE5NTAyMCwgMCwgNzc4MSwgCi0gICAgNDEzODMsIDY0NTY4LCAwLCAxMjA3MzgsIDEyMDc3LCAwLCA2NDU4NiwgOTE3NjIwLCA0MjM5NiwgNTUyNTUsIDM0NzUsIAotICAgIDEyODAzNSwgMjQ3OSwgMCwgMzYzMiwgMTIwNzI4LCAxMDY5OCwgODM3NiwgMzY0OCwgMTk0OTYwLCA3NDg0NCwgNjc2MzksIAotICAgIDM2MzYsIDY3ODk0LCAzNjUwLCA4ODM3LCA2NTIyOSwgMTg0MywgNDIyODMsIDQzMjUwLCA0MTU2MiwgOTEwMCwgNzQ1NDgsIAotICAgIDkxNzYzMCwgMzY0MCwgMTI3MTkwLCA0MjMyMSwgNzI4NCwgMTk0OTc0LCAxOTQ5NzMsIDE5NDk1MCwgMTk0OTQ5LCAKLSAgICAxOTQ5NTIsIDE5NDk1MSwgMTI2NjQ5LCAxOTQ5NTMsIDQyMDgwLCAyNTI5LCAwLCAwLCAwLCA0MjA4MywgMTIwNjc4LCAKLSAgICA2ODM5OCwgMTk0OTU3LCA2NzYxOSwgNjYzNjcsIDE5NDk1OCwgOTYzNCwgOTIzODAsIDk5ODgsIDAsIDQxMDY4LCAwLCAKLSAgICA0Mjk1LCA2NTI2NCwgNjgwMDYsIDAsIDkyNTQ1LCAwLCA3ODUsIDgyMzYsIDEyODY0NywgOTAyNywgNjgxNjAsIDY3NjIzLCAKLSAgICA2NDM4MywgMTIwMjY1LCA5MjUsIDEyNzE1NiwgMCwgNDE5ODUsIDQxMDcxLCA5NTg2LCAwLCA0MTk4NCwgOTIxNywgMCwgMCwgCi0gICAgMCwgOTE4NiwgMjA2NywgNDAxNiwgOTgzNzk0LCAwLCAzODEsIDEyOTM2LCAwLCA0MjA3NywgMCwgNjk4ODAsIDUxODQsIAotICAgIDQyMDc4LCAxOTQ5NDcsIDEwODEwLCAxMjg1MzEsIDQ1ODUsIDE5OTQzLCA1ODYwLCA2NzYzMywgMCwgMCwgODEyLCAzNjE1LCAKLSAgICAwLCA1MTc4LCA0NDAwMCwgMTIwNTQ4LCA3ODgwNywgNTE4OCwgNzQyODcsIDY3NjI5LCAzNjA1LCAxMDY5MiwgMTE2NiwgCi0gICAgNjQ0MjksIDQyNjM5LCA5MjQsIDAsIDY3NjMxLCA0MjYxNiwgMTIwNjcwLCAyNDQyLCAxMDcwMywgNzg3ODksIDY3NjMyLCAKLSAgICA5MTc5MjQsIDEyNzcxLCAxMjczNiwgMTI3NTMsIDY2NzA4LCA3MzkzMywgNjc2MjYsIDQyNDAxLCAwLCA2OTg3MiwgCi0gICAgMTI3MzczLCA0MjI4OCwgMTI3NTEsIDAsIDg1NDIsIDEzMTQ1LCAxOTQ5NjMsIDI0NjgsIDY2NzA2LCA0MTI5NCwgMzYyNiwgCi0gICAgMzg4MywgNjQzODgsIDQyNDc5LCAwLCA0MTExNywgMCwgOTI1ODAsIDAsIDAsIDY3NjI0LCAwLCAxMjkwLCAwLCA2NTU4NSwgCi0gICAgMjcxNSwgODA2LCA2NTIwOCwgNDE4ODQsIDkxNzg4MywgMTMxOCwgNjQ3MzEsIDEyNjU3OCwgMCwgMCwgNjYzMjUsIDM0NjUsIAotICAgIDI0MDUsIDkyNDAsIDAsIDEyNzU2LCA2NTI1OSwgMCwgOTgzNzcyLCAxMjc1MiwgNTgzMywgMTQzMiwgMCwgNDE4ODMsIAotICAgIDczOTEyLCA5Nzk5LCAwLCA0MTg4NiwgMjQ4MCwgMCwgMjA2MiwgMTI3MjkzLCA2NDk0LCA1NTM3LCA3ODY1NiwgMCwgCi0gICAgMTk0NTg3LCAwLCAxMjExLCAwLCAwLCAwLCAxMTg4MzIsIDEyMzE4LCAwLCAwLCA2ODAwNSwgMTA2MjIsIDk4Mzc3MCwgMCwgCi0gICAgNzg2NTQsIDY1NjYsIDc4NjU5LCAwLCA3Mzc4MCwgMTE5MTk2LCA2NDg2NCwgMCwgNzg2NjAsIDAsIDgyODQsIDEzMDgxLCAwLCAKLSAgICAzNTg5LCA0MjA1MSwgNDAzNSwgNjQ5MiwgOTIyMzYsIDQyNjUsIDY2NDIsIDM5NzcsIDc0MTg2LCA0MTc3OCwgODM2LCAKLSAgICAxMTkyMTYsIDI0ODgsIDAsIDQ1ODIsIDAsIDAsIDQxNzc3LCAxMjkyNiwgOTgzMzY5LCA3NTI4LCAxMDU1MCwgMCwgOTI3MDYsIAotICAgIDAsIDEwOTYxLCAwLCAxMzc0LCA2NDg3OCwgMTE5MDE0LCAwLCA0MjM4OSwgNDEzNzQsIDIyODYsIDAsIDc4NDkyLCA0MTM3NywgCi0gICAgMTI3OTA5LCAwLCA0MDAsIDEyNTk3LCAxMjA1ODYsIDAsIDAsIDY2NjEsIDk4MzE0NSwgNjQ4MjcsIDAsIDczODE3LCAzOTAsIAotICAgIDAsIDcxMzAxLCA5ODM4NTMsIDM0NzMsIDc3MTgsIDAsIDAsIDAsIDU1Mjg1LCAwLCAwLCAwLCAxMTk2OSwgOTgzMzgyLCAKLSAgICAxMjc4NDEsIDYzNjUsIDE4ODcsIDY3NjMsIDk4MzM2MiwgODA4MCwgNzAwNiwgMCwgOTgzMzYzLCA2NzU3LCA2NDM1MSwgCi0gICAgMTU0NCwgMCwgNjc2NiwgNjQ2NzcsIDEyMDcxNiwgOTgzMzY0LCA2MTQ2LCAwLCA3NzEsIDk4MzM2NSwgMCwgMTI4MTIsIAotICAgIDEzMTY4LCA0MjI3MiwgMTIyMDAsIDkxNzkyNywgNzkwNCwgMCwgOTUzLCAxMjkxNywgMTE5NTYwLCAxMjMwMCwgMCwgCi0gICAgMTE0OTEsIDk3MjQsIDEwMzQxLCA5ODM3NjQsIDk1MjQsIDc0OTAsIDExMzg5LCA3NDg5LCAzMzc5LCAwLCA3NDg3LCAwLCAKLSAgICA0NzEsIDc0ODQsIDc0ODIsIDY3NTMsIDc0ODAsIDU3NjQsIDc0NzgsIDc0NzcsIDY1MDEsIDc0NzUsIDY5MTgsIDc0NzMsIAotICAgIDc0NzIsIDI0NzQsIDc0NzAsIDc0NjgsIDEwMjMyLCAxMDYxNSwgMTAyMTMsIDEyNzI4OCwgOTIzNTcsIDEwMDQ5LCAxMTgzNCwgCi0gICAgMzU0NCwgMCwgNjAxNywgNjUzMTEsIDEyNzQ4MSwgMTIwMjE2LCAxMzMwNiwgMTA1MzMsIDc4NzAsIDczOTQ5LCA3NjI1LCAwLCAKLSAgICAxMjA1NDQsIDAsIDAsIDkyNjYwLCAwLCAwLCAwLCAxOTk2MSwgMjQ3MiwgNDI2NjUsIDkyMzQxLCAwLCAyMTM5LCA0MjU2LCAKLSAgICAxMjA3NzYsIDc0MzgwLCAwLCA0MjY3NSwgNDI2NTgsIDEyODQ1LCAwLCAwLCA2NTEzOCwgMTE5MzU1LCA2Nzg2MiwgMCwgCi0gICAgNjU2NzEsIDcwODMsIDEyMDAwOCwgODA2NiwgNzY3OCwgNzQ4NjUsIDAsIDAsIDAsIDAsIDcxODYsIDAsIDEyMDU1NSwgMCwgCi0gICAgNDQ1LCAxMjA1NjYsIDEyODMwOCwgMCwgMCwgODMzMCwgMCwgMCwgNDI3OTcsIDk4MzE1MCwgMTIwMjE1LCAwLCAzOTAyLCAwLCAKLSAgICAxNzcwLCAwLCAxMjg4NjYsIDE1NjAsIDEyMDIwOSwgMTk0OTcyLCA0NTg0LCA3Mzg0MywgMCwgMTE3MTIsIDEwODY2LCAKLSAgICAxMTg5MjgsIDExMTgsIDcxMzM0LCAwLCAwLCAxMDgxLCA3NDM2LCA2ODQyMCwgNzI1MiwgMCwgNTk5NiwgNjk5MjEsIDQ5MDMsIAotICAgIDAsIDQxMzg2LCA1MTYyLCAxMTkxODksIDEzMzAsIDAsIDcxMzksIDAsIDEyMDQ3LCA0MTM4NCwgMCwgMCwgMTg0OCwgNDMzNCwgCi0gICAgNjMyNCwgNDE5NzUsIDY0Nzc3LCAxMDY3NCwgMTIzMDgsIDEyMTg2LCAwLCAwLCA5ODM3MzIsIDEyNzE1LCA2ODAwMiwgCi0gICAgOTgzNDcxLCAxMjY2MzAsIDIwMTgsIDY2NjcyLCA0MTk3OSwgNjY2ODUsIDExOTE1NywgNjgwMDAsIDkyNDY0LCAwLCAKLSAgICAxMjY5ODQsIDY4MDAxLCA5MzM0LCA5MjcwNSwgOTIzMTUsIDcwMTAxLCA3OTc1LCAwLCA3Nzk1NywgMCwgNjY2MjEsIDQ4ODQsIAotICAgIDY2NTk3LCA2OTczMiwgMCwgMCwgNjMxMywgNjU1MTMsIDY5ODU3LCAwLCAwLCAwLCAyMzQ1LCA0MzY5NywgNDYzLCAwLCAwLCAKLSAgICAxMTk2MDcsIDMxMTcsIDU0NjAsIDAsIDAsIDk4MzM3OSwgMCwgNDIyNzksIDE5NDU3NywgMCwgNzg0MTUsIDAsIDE5NTAwOCwgCi0gICAgOTgzMzc2LCAxMzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY2MywgMCwgMCwgMCwgMCwgMjQ4MiwgMTQ3MSwgMCwgMCwgCi0gICAgNDIyNDcsIDEyMzc4LCA3MzkyNSwgNjk2NjQsIDAsIDEyMzc0LCAwLCAwLCAwLCA5ODM2ODUsIDI0NjAsIDAsIDExOTQ0LCAKLSAgICAxMjM3NiwgMTI3ODY4LCA2NDY3OSwgMCwgMTIzODAsIDEwNTU3LCA2NDQ3MywgNTg3MCwgMCwgMjAyNCwgMTI3MTgwLCAwLCAKLSAgICAwLCA1MzksIDAsIDEyNzc2NSwgOTQwNTIsIDM4NTMsIDY1MTgwLCAxMjc5MjMsIDEyMDc5NiwgMTIwMjQ1LCA5MjMyNCwgMCwgCi0gICAgODY1OSwgMCwgMTI0NzQsIDkyNTc5LCA5NTAzLCAxOTQ5NjksIDI0NzgsIDAsIDQxNjIsIDAsIDQyNjAsIDEyOTUzLCAKLSAgICA2OTYzMywgMTIwMDg5LCAxMjQ3MCwgMCwgNzQxODksIDI3NDIsIDEyNDc2LCAxMTc5OCwgMTA5NDYsIDEyNzMxMCwgNTAwMCwgCi0gICAgMCwgOTgzNTc5LCAwLCA2OTY3MiwgODIxMywgNzQwMTcsIDc3NzEsIDYxNjEsIDY4MDE4LCA2NzA5LCAwLCA3ODg4NSwgCi0gICAgOTgzNjk5LCAxMjc5NzEsIDEyMDU4MiwgNzg1NDcsIDAsIDEwMzAxLCAxMDMzMywgMTAzOTcsIDAsIDAsIDczNzkxLCAwLCAwLCAKLSAgICAwLCAwLCAxMTkxMjMsIDQwMTQsIDEyODQyLCA3Mzk1MiwgMTIwMTUsIDEyNzI5MCwgODI3NSwgMzg5MywgOTgzMjU2LCAwLCAKLSAgICAxMjIxMCwgNzIyMSwgNDIxNDcsIDAsIDc0NTUwLCA3NDQ2NSwgNjQ3NDcsIDExODg0MSwgMCwgMTI1MTYsIDQ0NDQsIDAsIAotICAgIDkyMjcxLCA3NDUzNywgMTA4OTIsIDgyMzEsIDAsIDY0NzMsIDQxOTY4LCA3ODM4OCwgNDE5NzMsIDM1OTEsIDQxOTY5LCAwLCAKLSAgICAyNDUzLCAxMjg1NDksIDkyNjY2LCA2NDcwNSwgMCwgMCwgMTAzNDksIDEwNDEzLCA0MzU5MSwgNDE5NjIsIDMyMDIsIAotICAgIDc0MzUzLCAwLCA4MzE2LCAwLCAwLCA5NDA2MCwgNjg3LCAwLCAwLCAwLCAxODQwLCAwLCA2ODY3MSwgMTE5ODA5LCA0ODgzLCAKLSAgICAyODUsIDQ3MjMsIDcwMDk5LCA5MjY5MiwgNDQ1OSwgNzQ1NzcsIDQyOTIxLCA0MTcyMCwgMTEwODksIDI0MCwgMTk5MDYsIDAsIAotICAgIDQyMzIzLCAwLCA5NzQzLCAxMjAyMzIsIDEzMTM0LCAxMjY1MzUsIDAsIDAsIDAsIDAsIDQyNjM0LCA5ODMzMzUsIDQzNDM3LCAKLSAgICAzMDgxLCAxMTQ2MywgMTIwMTU0LCAwLCAwLCAxMDQ0NSwgMCwgMCwgNjY3MTcsIDI2MTQsIDkxMjUsIDExOTAyMywgMTcyOSwgCi0gICAgMCwgMTIwMjM2LCA2NTIyMSwgNjM4ODMsIDQzMzM0LCA2NDg1MiwgMCwgNjUxOTQsIDY2MjAxLCAwLCA2NjU3OCwgNTAwMSwgCi0gICAgNDE4NzksIDc0NDI3LCA0MTIxLCA1MDAzLCA4ODQsIDY2NzAwLCA2Mzg3OSwgNDk0MywgNTE1MCwgNzM4ODksIDc0MTgyLCAKLSAgICAxMjc5MTUsIDY0MywgMzA4NiwgMCwgNDI0NDgsIDQyMjk5LCA1OCwgMCwgOTE3OTUyLCAxMjAwODMsIDYzODczLCA4NDkxLCAKLSAgICAwLCAwLCAwLCA0NTMwLCA0MjQwOSwgNzEyNiwgMTk0NTc1LCAyNzIxLCAxMjAwNzQsIDExOTA5NiwgMTk5MjksIDAsIAotICAgIDE5NDU3NCwgMCwgNDI0MiwgNDI2NCwgMTIwMDc3LCAxMjA1MzAsIDY2MTc5LCA0MjQxMiwgNjU5NDEsIDEzMTE0LCA2NDUyMiwgCi0gICAgMTA3NDAsIDMwOTQsIDAsIDk3NTQsIDExOTEwMiwgNDQzNywgNzM5NDgsIDEyNzA3NCwgOTgzMjMyLCA1NTI4MCwgNDIxNzQsIAotICAgIDE5NDkyNSwgNDI0MzAsIDAsIDAsIDQyMzU1LCA2NjAyNiwgNDMwNiwgNDEzODAsIDY4NDMyLCA5MjU4NiwgMCwgNjY2NjcsIAotICAgIDEyNzMwOSwgMCwgMTI2NTIxLCA0MjIwMCwgNDI1NjYsIDAsIDAsIDUwODgsIDY5NDgsIDAsIDg1MjQsIDAsIDAsIDEyMzg1LCAKLSAgICAwLCAwLCA2OTY0NiwgMTM4NiwgNjQ1ODAsIDExNDgwLCA2MTE2LCA2NTAzOSwgNjUwMzgsIDEyMzkyLCA2NTAzNiwgODA2NCwgCi0gICAgMCwgMTIxMDEsIDU4MjIsIDExOTAwNCwgMjA4MCwgNzEwLCA3Nzk5OSwgMTE2NjMsIDE2NjYsIDQyMDkxLCAxMTk2NTcsIAotICAgIDEyMzgzLCA0MzY3MSwgNDIwOTIsIDY4NDE4LCA0Mjg5LCAwLCA2Mzg5NiwgMTIwNjEsIDQyMDk2LCA0MzYyMSwgMzM2MiwgCi0gICAgMTIzNzcsIDk4MzgyMywgOTgzODI1LCA2ODQ0OSwgNzQ2MSwgNzM5MDEsIDEyNDQsIDMzMSwgNzM3ODYsIDEyNjgzLCAKLSAgICAxMDY2MiwgMCwgODExMiwgMCwgNjU4NTIsIDAsIDEyMzc5LCAxOTQ4NzcsIDEyMDgxOCwgNDE5NjQsIDQyMjA4LCA2Mzg0MywgCi0gICAgMjA4NCwgNDE5NjUsIDAsIDY1ODY2LCA0MzI3LCAwLCA2Mzg0MCwgNzg1NDksIDQxMjIwLCAxMzAzMiwgMCwgNTg0LCAKLSAgICAxMjkzMywgNDMxNzcsIDEyMzczLCA2OTg1NSwgMTMwMDAsIDEzNTEsIDI5MzUsIDg2OTgsIDEyNjY1LCAwLCAxOTMwLCAwLCAKLSAgICA3ODIyOSwgMTI0MjcsIDY2NTE0LCA2OTg1OSwgMTMwMzEsIDAsIDYzOTAxLCAwLCAzNjU3LCAxMjg1NzIsIDY1MjAyLCAKLSAgICA2MDAwLCAxMTkyMDYsIDEyNDI2LCAxMjcxODEsIDAsIDQxNzQwLCAxMjQyOCwgNDEyODMsIDQxOTE2LCAxMTkyMTAsIDAsIDAsIAotICAgIDEyNDI5LCA2NzI3LCAwLCA3NTYyLCAwLCA1MTcwLCAwLCA0MTc1NSwgNjc2LCAwLCA2NjcwNCwgNjY2NjQsIDk5NzgsIAotICAgIDY2NDkxLCAzNTM2LCAwLCA5NzUyLCA5MjM5NywgNjE2MiwgMCwgNjkyMjgsIDEwMTEzLCA0MTgyOSwgNjU4ODYsIDUxNTksIAotICAgIDEyNDIyLCA0MTgzMiwgNDM5LCA0MzA3NywgMCwgNDIyMDcsIDc0NTQ5LCAxMTc5NiwgNDA5NzAsIDQxODMwLCAwLCAKLSAgICA5MTc3OTksIDgzMDgsIDkxNzc5NywgOTE3Nzk2LCAwLCA2Nzg2NCwgOTE3ODAxLCA5MTc4MDAsIDEyMzM2LCA0MTM1LCAKLSAgICA2OTgwNSwgMzQxLCAyNzI3LCA0MTI5LCAzNTM5LCAwLCA2Mzg2MSwgMCwgNzkxMywgMCwgNjM4NTksIDQxMzEsIDYzODY4LCAKLSAgICAwLCA2Mzg2NywgNDEzMywgMTEzNzEsIDIxMCwgNDYwMCwgMCwgNzQ1NjAsIDQxMzcsIDgwODIsIDc4NTA2LCAxMTkwNjIsIAotICAgIDc4NTA0LCA2NzA0LCA0NTkxLCAxMjgwMjksIDAsIDAsIDk2ODAsIDAsIDEyMDYyMywgNTYxLCAxMjE1OSwgMTk1LCA3ODUwOCwgCi0gICAgNDE1MDEsIDAsIDQyMDMxLCA1NzE5LCA3MTcyLCA0MjY4NywgODM2OCwgMCwgNDE0OTksIDAsIDAsIDQyMjQyLCA0MTQ5OCwgCi0gICAgOTE3Nzk0LCA0MjAyNSwgNzg1NjUsIDY1ODA1LCA0MjQ2MywgMCwgMjkyNCwgMCwgMTIwNTEwLCAwLCAwLCAxMTkyMTMsIAotICAgIDczOTQxLCAwLCA0MjMzMCwgOTE3Nzg0LCAzOTY5LCAwLCAwLCA3MTY5LCAxOTkyLCA5NjUyLCA3Mzk3NywgNzI0NiwgCi0gICAgNDIwODYsIDEyNjYxNSwgMjIxOSwgMCwgMCwgMTI4ODAxLCAxOTQ4MzcsIDAsIDMyNywgMCwgOTA0MiwgOTE3Nzc3LCAKLSAgICA5MTc3NzYsIDY1MTQ4LCAxMjQzMywgOTE3NzgxLCAxMjcyNzYsIDkxNzc3OSwgMTI0MzEsIDg2NjgsIDEyNDM0LCA5ODM4MjYsIAotICAgIDkxNzc4MiwgNTk5OSwgMCwgNzcxMiwgMTI0MzIsIDEyODI0MywgNDM2NTMsIDE3MjYsIDEwMTUsIDAsIDgyMTIsIDAsIAotICAgIDEyODAxNCwgNDI0MjMsIDExOTA2NiwgMCwgMTI4MTA4LCA2NjcwOSwgMCwgODgxMSwgOTI3LCAwLCAwLCAxMjQzNiwgCi0gICAgOTgzMjM5LCA0MjAyMSwgMCwgMCwgMTI5OSwgMTIyNDAsIDQyMzUwLCA2NTE0MywgMCwgMTk1MDE2LCAwLCA3ODE5NywgCi0gICAgMTEzNDgsIDAsIDc4MDM3LCA5MTk0LCA5ODMxODQsIDAsIDE5OTE0LCAxMjE3OSwgOTgzODAzLCAyMjk2LCAxOTQ5MjMsIAotICAgIDYzODM2LCA2MzgzMiwgOTE3NzczLCAxMDk2NywgNjM4MTYsIDI1OTQsIDM0NDQsIDYzODE3LCA2NDY1MSwgMCwgNDE1MDMsIAotICAgIDEyNzQ3OCwgMTEyNjUsIDAsIDEyMDc1NiwgMTk0OTIyLCAwLCA1NjY0LCAzOTcyLCAwLCAwLCAwLCAxMjg1MDgsIDEyNDE2LCAKLSAgICA5MTc3NjQsIDExOTYwOCwgMTA4MTYsIDkxNzc2OSwgOTE3NzY4LCAxMjQxOCwgNzQxMTEsIDM4ODIsIDg1MzIsIDkxNzc3MSwgCi0gICAgMTU3MywgMTI4NjQ4LCAxMTk4NDcsIDQ1OTYsIDY2MzM5LCAxMjQxNywgNjYwMDEsIDY1MzQzLCAxMjY0OTEsIDEyNDE0LCAKLSAgICA4Mjg3LCA2ODIxOSwgMTk1MDE3LCA2ODEwOCwgMTE0MywgMTE5MTY5LCAxMTk4NDYsIDEyNDE1LCA2NjI2LCA0Mjc2MywgMCwgCi0gICAgMTE4ODg0LCA5MDIxLCAxMjA3ODMsIDAsIDExNzI0LCAwLCAwLCAxMjcxMDQsIDEyNjYxOSwgMCwgMCwgODAyNywgMTA5OTcsIAotICAgIDkxNzEsIDEyNzQxLCAxMTQwMCwgNzEzMDUsIDE5NDc5OSwgMCwgMTI4MjM5LCAwLCAxMjg4ODEsIDExOTYwNCwgMTI3NTIzLCAKLSAgICAxMjAxOTAsIDE5NDc3MywgNjc2MDgsIDEyODIxNCwgNDIzNjgsIDAsIDc3MTUsIDM4ODEsIDQxNDg3LCAxMjExOCwgNDI1MTQsIAotICAgIDY4NjUxLCAwLCA5ODM4ODYsIDMwMDksIDQxNDc2LCA0MTQ4OSwgNjk4MjUsIDMwMDcsIDE0NDgsIDMwMTgsIDE5NDgwOSwgCi0gICAgMzg4OSwgODUyMSwgNTA4MywgNTA4MiwgMTE5ODU5LCAxMjAxODQsIDg1MTksIDk4MzIzNSwgMzAxNCwgNTA4MSwgNjU4NTMsIAotICAgIDEyMDcxNSwgMCwgNjgwMTQsIDY5OTUxLCA1MDc5LCA2NDgwMiwgNDIyMTAsIDQ1OTcsIDY1NTMyLCAxMTgyOCwgMTIwMTg1LCAKLSAgICAxMjM3MSwgMCwgODQwNywgMCwgMTA4MDUsIDg1MTgsIDEwNzc5LCAxMjAxODgsIDcxMzAzLCA5ODM5MjQsIDEyMzY3LCAKLSAgICA0MjE3MCwgMCwgOTI1NTcsIDYyOSwgMTkyNCwgMCwgMTIwMzcsIDc0MzY2LCA1OTg3LCA4NDYyLCA4MDA1LCAxMjM2NSwgCi0gICAgNjM5MzMsIDY5NzM1LCAxMjA4MTUsIDEyMzY5LCAxMDY0OSwgNjc5ODEsIDUwNzcsIDEyMDE3NCwgMTA4ODAsIDYzOTI3LCAKLSAgICA1MDc1LCA5MTc4ODEsIDAsIDY1MDc1LCAwLCAxMTAwNywgOTgzNjk2LCA2NjY1OSwgOTI2MDcsIDAsIDY2Njg0LCAwLCAKLSAgICAzNDM0LCA0OTU0LCAxOTA0LCAwLCA1MjY2LCAxMjY5ODAsIDUyNzIsIDEwNDk5LCA0NTA3LCA5NTc4LCA2MzkyMywgCi0gICAgMTIwMTc3LCA3OTc5LCAwLCA5ODMxLCAwLCAxOTQ5MjYsIDQ2MSwgOTgwMywgMCwgNDUwNCwgMTUwNSwgMCwgNjMyNSwgCi0gICAgNTI3NiwgNDMwMjEsIDEyMDQ4OCwgMCwgNTUyMzYsIDAsIDY2NDYxLCA1MTc3LCA0MTMyNCwgMTIwNTUsIDg3MjIsIDAsIAotICAgIDQxMzI3LCAwLCA2NjY5NSwgNDExNCwgNDA5LCA0MzgzLCA4OTAwLCA4OTQ4LCA0MTMyNSwgMCwgNzIxLCAxMDE4MiwgOTEwOCwgCi0gICAgNzEzMTEsIDAsIDExOTE4NSwgNDIyMjksIDE5NDkxMiwgMCwgNTk5OCwgMCwgNDIzNTMsIDc0ODI1LCAwLCAxMjU4NywgCi0gICAgOTQxMDQsIDc4NTcxLCAwLCA3MTMyOCwgMTk0NTYyLCA0MTU3NiwgNDIyMTUsIDc4NTcwLCAxMTkyMDcsIDAsIDg1NzgsIAotICAgIDU5OTUsIDc1NzMsIDQxNTc1LCA3NDc4OSwgNzQ3NTIsIDYzOTQ0LCA2Mzk0OSwgNjQ3NjcsIDI2NzAsIDQxNjcsIDE5NDc5NiwgCi0gICAgMTE3MjMsIDAsIDc0MTIwLCAwLCA2NTA3NiwgOTM4LCA0MzQxNCwgNzM4NTQsIDExNzM3LCA5NzIxLCAwLCAwLCAwLCAKLSAgICAxMTc0MiwgMjQxOSwgMCwgMTE0OTMsIDEyMzM0LCAxOTQ5MTMsIDQxNTMsIDEyMzAyLCAxMDc5MywgNTI1MCwgMTI0MDcsIAotICAgIDExOTc4LCA0NDA0LCA5MTg5LCAxMjQwMSwgNDIwMDcsIDU3NzUsIDY3NTksIDY1ODA2LCA0Mzk5NywgMCwgNDIwMDIsIAotICAgIDEyNDA0LCA5ODM1NTMsIDAsIDQ5NDAsIDEyNDEwLCA3NjgzLCAxMTY3LCA3MzcyOSwgNDk4MywgMTIwNTA3LCA4NjEsIDAsIAotICAgIDAsIDAsIDAsIDQzNzU3LCA0MzM3MCwgMCwgMCwgMTE5NTYsIDAsIDAsIDAsIDk2MTYsIDY2MzEsIDAsIDEyODE2LCA0Mzc1OSwgCi0gICAgNDIyMTgsIDEyNzEwLCA2ODY3NCwgMTI3MjEsIDQxMDEsIDY2MTg1LCAwLCA1OTkyLCA3NjE2LCAxOTUwNDQsIDAsIDEyNTc3LCAKLSAgICAwLCA5ODM4NzUsIDg1MywgNDI2OTMsIDE5NTAxNCwgMCwgOTgzNjM4LCA1MDE2LCA0MzUzNSwgNjM4OTMsIDQyODM1LCAKLSAgICA5NDkxLCA5MTc5MTMsIDAsIDkxNzkxNCwgMCwgMTI3MTIsIDcxMDUsIDEyNzgwNywgNjUwNjAsIDEyMDc5NywgOTkwMCwgCi0gICAgNzc1MCwgMCwgMTk0OTE5LCAwLCAxMjc4MzAsIDAsIDY0Nzc4LCAxMjU4NSwgMTA1NjUsIDEyODE1MSwgMTIxNzcsIDAsIDAsIAotICAgIDAsIDc3ODI0LCAwLCA0OTAwLCAxMjc4NzQsIDEyODc4LCA5MjYzMCwgODk4NCwgNDExOSwgNzQ3NjgsIDg5NzEsIDc4NTkzLCAKLSAgICA0MzExMywgOTcwMiwgNzg1OTQsIDExMDI1LCA5MjQ1LCAxMzA0OCwgNDkyNywgNDEzOCwgNzQxODUsIDkyNDgxLCA5MjcxMCwgCi0gICAgMTIzOTcsIDc3ODI3LCAwLCAxMzA1NCwgMTIzOTQsIDAsIDAsIDAsIDEzMDUzLCAwLCAzOTQ4LCAxMDc4MSwgMTU0NiwgMCwgCi0gICAgNTAxMCwgMTY4MCwgMTA1MDcsIDc4NTkwLCA3ODU4MywgMCwgMCwgMCwgMTk0OTE1LCA3MjY3LCAwLCA3NDgzMywgMTI4MTgxLCAKLSAgICA1OTkzLCAyODE5LCAwLCAxMjcwNiwgNzc4NDAsIDE4OTMsIDcyNjYsIDYzOTE1LCA3MjY0LCA3MjY1LCAwLCAxMzYzLCAwLCAKLSAgICA2Mzk5NywgNjM5MTAsIDYzOTk2LCAzMDc3LCAwLCAwLCAxNTEyLCA2OTkyOSwgMTI1ODksIDQxNDc5LCAxMjgzMTMsIDAsIAotICAgIDQzMzM5LCAwLCA5ODM2LCAxMjA3MjcsIDAsIDQxNDgxLCA0MzMzNSwgNzgzMiwgNDIzNDMsIDMwOTAsIDQzMzM3LCA4MTcsIAotICAgIDE2NjQsIDE4NTAsIDEyODg0MSwgMzA3OSwgMTEzNDAsIDQyNDA4LCA0MjQ0NywgMTI3MTQwLCAxMjAwMjAsIDQyMzA3LCAKLSAgICAxMjM4NiwgNDIzMDQsIDkxNzU1NSwgMCwgMTIzODksIDAsIDkyMzY2LCA0MTk5NiwgMTE1MjYsIDYzOTg1LCA1ODY0LCAKLSAgICAxMTQ3LCA2Mzk5MiwgNDI4ODcsIDE5ODcsIDkyNzE4LCA1NDgwLCA3ODU4LCAxMTY1MywgNDExNiwgMTIzOTEsIDY2MTkzLCAKLSAgICAwLCA0OTM5LCAxMjM4NCwgMCwgMCwgNDE2ODYsIDYzOTA1LCAxMTk2MDEsIDE5NDY4OCwgOTgzMTkwLCAwLCAxMjY0OSwgMCwgCi0gICAgMCwgODI0NywgNTA3LCA5MSwgMjA0MiwgMTIwNzc1LCA0MzY0MywgMTk0Njg5LCA2NjAyOCwgMTAwMzYsIDQxODQ0LCAKLSAgICAxMTk4MTMsIDc3NCwgMTE5ODI5LCAwLCAxMTk4MTUsIDU5OTQsIDEyNTM5LCAwLCA3ODM3NSwgMTIwNTk3LCAxMTk4MzMsIAotICAgIDk4MzEwNSwgMTE5NjAwLCAwLCAwLCA3NzE5LCA2MDI2LCAyNDg2LCAxMjgzMTIsIDExOTgwOCwgMTYyLCAwLCA2NTIxOSwgCi0gICAgNDEwNzMsIDk2ODcsIDQxNjgxLCA2MzA0LCAxMTk4MTIsIDY2MTk2LCAxOTQ4ODEsIDUyNjIsIDAsIDU1MjMzLCAxMjY4MSwgCi0gICAgNDIzNzksIDAsIDc1MzQsIDEyMjE5LCAwLCAxMjc1MjgsIDQyODEwLCAxMDQ5MiwgMCwgOTgzNjUyLCAwLCA0MzExOSwgMCwgCi0gICAgMTIwNzUzLCAxMjQwMywgMjUwMCwgMTk1MDEzLCAwLCA0ODk5LCAxMjcyOSwgMCwgMCwgNzQxMTMsIDIzNDMsIDQxMDMsIAotICAgIDE5OTQ2LCA3NDExMiwgNzc4NTEsIDEzMTEyLCAwLCAxOTUwMTIsIDEyODU5LCA3MDA4NywgMTIwMTQ4LCA2NjM2OSwgNTg2MSwgCi0gICAgMTI3NzU4LCAxMTk5OSwgMTI0MDAsIDAsIDk4MzgzMCwgMTI2NDUsIDUxNDYsIDExMzIwLCA2ODQxMCwgNjc0OCwgNjUwNDAsIAotICAgIDAsIDY0MTg0LCAxMjk3NCwgNjQxODMsIDY3NjEzLCAxMjA2NDUsIDUxNDcsIDAsIDAsIDc0NTI0LCAwLCAxOTI4LCAwLCAKLSAgICA2NzY0OSwgNTk5MSwgMzQ0NSwgNjc2MDksIDQ5NzYsIDY0MTc2LCAwLCA2NzYxMCwgODI0MSwgMCwgNzc4NjgsIDQyMDYsIDAsIAotICAgIDAsIDAsIDEyODI5OCwgMCwgMTAxMzgsIDAsIDAsIDg4OTcsIDEyMDIzNCwgMCwgODM1NywgNDEyNCwgNzc4NjIsIDY1ODM2LCAKLSAgICAxMjA2NDEsIDEyNzkyNiwgNzc4NTksIDAsIDAsIDExMjMsIDk2MywgNDE1NTMsIDEwMTIwLCAxMjQwNSwgMTIwMTUwLCAKLSAgICA5MjY2NCwgMzk4LCAxMzI3OCwgOTcyMywgNjM2NiwgMTIwMzExLCA3OTQ1LCAwLCA0NDAyLCA5OTcwLCAxMjQwMiwgCi0gICAgOTgzMTM2LCA0MjM5MiwgMTMwNSwgMTI0MDgsIDAsIDQ0MDA3LCAwLCAwLCA0MTQ2NCwgMTI0MTEsIDEyOTY5LCAxMjA4MjQsIAotICAgIDQxNDY1LCA5ODM1NjUsIDg1MjgsIDE1NzUsIDAsIDYzOTU1LCAxNjUsIDMwMjQsIDQxNDY3LCAxMTkxNjMsIDAsIDkwOTMsIAotICAgIDAsIDkxNDcsIDEyODc4NywgNjM5NTgsIDAsIDkxNDgsIDk2OTIsIDQwOTYsIDUzLCA3Mzc3NiwgNjc1MCwgMTk1MDE4LCAwLCAKLSAgICA5NTk0LCAwLCAwLCA0MzUyNywgMCwgNzI3LCAxOTQ3MDMsIDE5NTAyMywgNTgwNSwgMCwgNjcyNiwgMCwgNDIxNzYsIAotICAgIDEyMzcwLCAxMTY1NSwgMTE5MDk1LCAxMDU5MSwgMjI4MCwgMCwgMTIzNzIsIDEyMDY0MiwgMTIwMzA3LCAwLCA5MjM0MywgMCwgCi0gICAgMTIzNjYsIDEwOTYzLCA2MDY2LCAxMzI5LCAwLCAzMDUyLCA5MjIwLCAwLCA2NDQ3OCwgMTk0NzAxLCAxMDgwMywgNDEzMiwgCi0gICAgMTIwMzA2LCA2ODQ3NCwgOTI0NzMsIDAsIDk4MzMwNSwgNzQ4MzcsIDEyMDE1NSwgMTQ5OSwgMCwgODA1NSwgNDI3NDAsIAotICAgIDYzOTY1LCAwLCA2Mzk2MiwgNzQwNDIsIDg5MjQsIDQzMTIzLCA1OTg4LCAzNjYwLCA2Mzk2OSwgMTE3ODEsIDQyNzE4LCAKLSAgICA4Nzg4LCAxMzU3LCA2NDg1MSwgNjU3NDMsIDAsIDg3NzQsIDAsIDEyNzA4NiwgOTk0MSwgMTIwMTcyLCAwLCAxOTMzLCAKLSAgICA2OTY1NSwgOTU2NCwgMCwgOTI0MzUsIDczODY2LCAwLCAwLCAyNDg3LCA2NzYxNCwgMzEyMSwgMTgwNCwgMzMxMSwgNjc2MTUsIAotICAgIDcwMDgxLCA3ODMwMiwgMTIyMjAsIDY3NjE2LCAxMjA1OTgsIDEyNzQ3NSwgMCwgNjgyMDAsIDY2NzUsIDEyODE0NCwgMCwgCi0gICAgNjc1OTIsIDEyMDY4NSwgMCwgNjQ3NzEsIDExOTgsIDkxMzIsIDAsIDY0NjE5LCA1MTAsIDY0NjYzLCAwLCAwLCA0NTYxLCAKLSAgICAyMTAxLCAxMzk4LCAwLCA5MjU1NCwgNzQwMzQsIDQxNTY5LCA5MjY4NCwgMTE0MDYsIDgxNjcsIDEyMTI3LCAwLCA4NDAsIDAsIAotICAgIDEyNjUxOCwgNzEwMSwgNjk2NywgMCwgMTk0ODk4LCA5Nzk2LCAwLCAzMzMsIDY5ODkxLCAwLCA4MTQ0LCAyMTE3LCAwLCAKLSAgICA5ODM1OTUsIDEyNDA2LCAwLCAxOTkzMSwgMTE5MDg5LCA2Njc4LCA3NzY5LCAwLCAxMjYyMSwgMCwgMTI3MzY2LCAxMDIyNywgCi0gICAgNDc2NCwgNDMxMDEsIDk5ODEsIDAsIDQwOTg2LCA0MTI3LCA2NjQ4NywgMCwgNDIyMDIsIDEyNzU0LCAxOTUwMjIsIDAsIDAsIAotICAgIDk0MDk3LCA2NzU5NCwgMjA0OCwgMTI5NDQsIDQwNTAsIDY3NTk1LCA5MTc5NjcsIDQzMTAyLCAxMDU4MSwgMTI5ODUsIAotICAgIDQ1MzMsIDE5NTAyMSwgNzQwMDMsIDY0OTAsIDAsIDEyMDM4LCAwLCAwLCAxMjA3MDQsIDY1NDYxLCA5Nzk4LCA2OTcwNCwgMCwgCi0gICAgMTk0OCwgNjk4NDEsIDAsIDk1MiwgMTI4MjM1LCAwLCAwLCAxMjA4MDIsIDY0NDksIDk0OTQsIDEyMDMxMywgMCwgNDMwOTgsIAotICAgIDQ4NDMsIDgxNDIsIDY0MTYwLCA0MDk4LCA2NDE3MCwgMCwgMCwgMzQzNiwgMTE5OTczLCAwLCAxMjgxNywgNjc1OTcsIAotICAgIDY2NzYsIDM5MzAsIDQyNjE1LCAwLCAwLCA2NzU5OCwgMCwgMCwgMCwgNjU1OTEsIDQxNTgxLCA2NTkxNiwgMTQ1MywgMCwgMCwgCi0gICAgMCwgODUwMCwgNDIyMjIsIDEyMDE0MiwgNzM3NDMsIDEyMDQwMCwgNDMxNywgMTE1NDMsIDY3Njc2LCA2NDY3NiwgMCwgMCwgCi0gICAgNjc2MDYsIDExOTA4MywgMCwgNDIyMTcsIDEzMTAyLCAwLCA2NjAwMywgNjY3MiwgMCwgMCwgMCwgOTgzNzM4LCA2Mzg0MSwgCi0gICAgOTYxMywgOTAwMSwgNDUyNiwgMTEyNzQsIDY3NjAxLCA2NDUyMCwgNjQyMTAsIDY2NjQsIDc4NzA0LCA0MjA1NiwgMTAyMjgsIAotICAgIDY0OTU3LCAxMTI4MSwgMCwgMzgwNywgMTQ2OSwgNjY2NDAsIDY1MzgxLCA0MjE5NywgNDk4OCwgNDIzNzIsIDAsIDk1OTgsIAotICAgIDkwNCwgMzUyLCA0MjIyNSwgMTQ1MSwgODA2MSwgODQ1MywgNDEzNCwgMCwgNzQ4NDcsIDY2NTc2LCAxMjc5MTYsIDAsIAotICAgIDEwNTIwLCA4NTc1LCA5OTYwLCAxMjAxLCAxMjcyODksIDEyODQ2LCAxMjcyOTEsIDEyNzI5MiwgMTE5MTksIDY0OTYyLCAKLSAgICAxMjcyODcsIDQzNzM5LCAxMjcyODEsIDg1MTEsIDk0NjAsIDgyMywgMTE1ODcsIDEyMzA1LCAwLCA2NDY5NSwgMTI3MzA1LCAKLSAgICAxMjM4NywgMTI1MywgMTMxODMsIDY1NzY2LCA1MDAsIDQyNzgzLCA2NTc2NSwgNjQyMDgsIDY0MzY5LCA2NTc2MCwgNjU3NjEsIAotICAgIDExOTU4NSwgMTE2MDYsIDY0Nzg0LCAxMTcwMiwgNjY0OTgsIDk4MjEsIDY0MzA0LCAwLCA1MTUyLCAxMTA0OCwgNzUzMywgCi0gICAgNjgzNjYsIDY0NDEwLCA5MjMwNSwgMCwgNDMyMywgMTIwMDYyLCA5MjY2OSwgNzEzMzIsIDEyNzA1MiwgNDI1ODcsIDQyMjE0LCAKLSAgICA0MTM5NCwgMCwgNDc2MywgNDExMiwgMTE4OTM1LCAwLCA1MjYwLCA0MzE0MywgOTQwMzgsIDMyNiwgMTIwMTMxLCA2ODQyMywgCi0gICAgMCwgMTA3NzEsIDI4NzYsIDc0MDc0LCA5MjUzMCwgMTk0OTI0LCA0MTM5OCwgNzM4MiwgOTgwMiwgMTI3MDc3LCAxMjcwNzYsIAotICAgIDQ1MywgNDEzOTYsIDEyMDUyNCwgNDI3MjAsIDEyMTQwLCA5NTcyLCAwLCA3MDAzLCAxOTQ4ODMsIDQyMzM0LCA3NzA0LCAKLSAgICAxMjY0OTAsIDE5NDg4NSwgNDMxNDQsIDQxMjMsIDg0OTQsIDQzMTQ2LCA5OTc3LCAwLCAwLCA2NTc1OSwgMTA3NjUsIAotICAgIDY0MDYxLCA0NDY1LCA5ODA4LCA2NDA1NiwgNjU1ODIsIDQxMjYsIDAsIDk1MjEsIDk1ODksIDY0NzU1LCAwLCA2NDAyMCwgCi0gICAgMTI2NjA0LCAxMDQ2NCwgMCwgMCwgMTk0ODY5LCA2NDUxNCwgMTE1MjgsIDY0MDI0LCAxMjgwNzIsIDY3OSwgNjQwMTMsIDAsIAotICAgIDU4NTAsIDc1OCwgNzUzNiwgMCwgOTIyMzQsIDQxNDQxLCAxMDY5MywgNjQwMDYsIDk4MzU2NywgNjQwMDUsIDQwNTgsIAotICAgIDExOTAxOSwgMTI2NDg3LCA2NDY2MCwgMCwgMTE5MDUwLCAwLCA5ODMwNjksIDExMzksIDQzMjk4LCA2NDAyNywgNjQwMjksIAotICAgIDg5NzAsIDAsIDk5MzQsIDk4MzA5NCwgMTA3NzQsIDEyODAyMCwgNDIyMDEsIDEyNDIxLCAxMjgyMTYsIDAsIDE4NTIsIAotICAgIDMwNTcsIDY0MDQ2LCA3Mzc0NCwgNjQwMzQsIDY0MDM5LCAwLCAwLCAwLCAxOTQ4OTksIDkyMzIyLCA3NjQ1LCAxMjg1NCwgCi0gICAgNzQzMzgsIDM0OTYsIDAsIDAsIDAsIDkxMDIsIDYyNywgMTI3Nzk1LCA2MTU4LCA4MzI3LCA3NDU1MywgNjY2MzIsIDEyNDE5LCAKLSAgICAxMzMwOSwgMTE1NzAsIDEyNzgxMSwgMTk5NjAsIDExNjk2LCAwLCAxMDE4LCAxMTg5NzAsIDE5NDkwOSwgMTk0ODk3LCAKLSAgICAxNjgyLCAxOTQ4OTYsIDE5NDkxMSwgNDI3NTYsIDY3NjUsIDE5NDkwNiwgMCwgMCwgNzM4MTQsIDExNDEyLCA2NzY4LCAKLSAgICAxMDcyOCwgMTk0ODMwLCA3MTMxNiwgMTE4ODYzLCA0MzMxMSwgNjQ5NjYsIDExNTc3LCAwLCA0MzA0MCwgMTgzMywgMTE1NzYsIAotICAgIDAsIDc0Nzc5LCAwLCAxODUsIDY1MDg1LCA3NDUzMywgNjQ3NTQsIDE5NDg0OCwgNzUzNSwgODA4NSwgNDI1MjUsIDEyMDM4NywgCi0gICAgOTc0OSwgNDE3MDEsIDYxMzEsIDE5NDksIDQxMTcsIDc4NDcsIDEyMDQ4OSwgMTk0NzExLCA2NDQ4MywgNjU2OTMsIDAsIDAsIAotICAgIDAsIDY5Njk1LCA0MjI0MCwgMCwgMTI2NjUxLCA0Mjg2NCwgMTI2NDk4LCA2NDY2NywgNDE4NjgsIDExODQsIDAsIDgxNSwgCi0gICAgMTE0ODQsIDEyNzUzNSwgNjc4NDAsIDk4MzY0MiwgMCwgNjYxOTcsIDAsIDEwOTg2LCA2NDY4MywgOTgzNzc2LCAwLCAzNDU1LCAKLSAgICAwLCAwLCA5ODc5LCAwLCAwLCA0MTU4LCAxMjgwNTAsIDY4MTY2LCAwLCAwLCAwLCAwLCA2OTY0NSwgMzMyLCAxMTg4MDgsIDAsIAotICAgIDUxNDIsIDI0MDcsIDY5NjQzLCA0MjE5OSwgMCwgOTI0MDQsIDc0MzczLCAwLCA1NTIxNywgMCwgNjM4NzAsIDQzMTYzLCAwLCAKLSAgICAwLCA5MjM5MCwgNDI4NjcsIDE4MzQsIDAsIDkyNDYxLCA2OTgxNywgMTA5NDAsIDY1MjQ5LCAxMTkwNDAsIDg2NjIsIDAsIDAsIAotICAgIDI2NTIsIDEyMDUyNywgNzE2NCwgMTA3ODQsIDE5NTA5MywgNjc2NzQsIDAsIDkyMjMzLCA5MjQ4MiwgMTk0NzQ5LCA3NDU2MiwgCi0gICAgOTE3NTA1LCAxODI4LCA3NDQ3NCwgMTIwMzI3LCA3ODYyMCwgODUzMSwgMTI0OTksIDYyODAsIDEyMzI0LCAxMTg4NTQsIAotICAgIDY1MjM4LCA2ODM3NCwgNDgzMiwgNjU1NzMsIDAsIDYyNzksIDEyNTA4LCAxMjkwNCwgMTI1MDIsIDkxNjEsIDAsIDE2MjAsIAotICAgIDY0NDM2LCAzNjAxLCAxOTUwOTQsIDEyODA3MywgOTgzNTYyLCA2MDksIDExNTU1LCA5ODMwOTksIDEyNDk2LCAxMjc4MzksIAotICAgIDc0MTgxLCA0MzQzLCAxMjUwNSwgMCwgMTI3ODYzLCAwLCAxMTM3NywgMjM5LCAwLCA2MzcsIDAsIDAsIDQyNjcxLCAwLCAwLCAKLSAgICAwLCA0MzU2NSwgNzEzMDYsIDEyNjQ5MywgMTI2OTYsIDEyODI1NiwgMCwgOTQwNjIsIDEyOTI5LCAwLCA3MTIsIDAsIDQxOTcsIAotICAgIDk4MzIwNCwgNDI4MTgsIDEyNjYzMiwgMCwgMTIwNDkwLCAwLCAxMTkxMzcsIDE1MDYsIDQzNTYyLCAwLCA5MjQ5MSwgMCwgCi0gICAgMTI2NTEsIDAsIDY0NjI4LCA3NDUxNywgMTIwNTgsIDc0MDg0LCA5MTc4MzgsIDc0OTQsIDAsIDQ5MjQsIDY1NTkyLCAKLSAgICAxMTg4NDQsIDAsIDEyNzA4OCwgMzU1LCA5NzE5LCAxMjcwODcsIDEzMDY2LCA2NDc5NiwgMCwgMCwgMTIwMzMsIDQyMTc4LCAKLSAgICAwLCA2OTc2MCwgNDI1NzEsIDkyNjM1LCAwLCAwLCAwLCAwLCAwLCAxMjcxNzYsIDMxNzgsIDAsIDAsIDkyNzA0LCAwLCAKLSAgICA5MDgwLCAxMjcwMDAsIDEyMDM1MiwgMCwgNjgyMDksIDAsIDExMDgyLCAwLCA1Njk5LCAxOTUxMDAsIDY2MDAwLCA5NDg4LCAKLSAgICA2NTE2NiwgMTE5MTEyLCAwLCAwLCAwLCAwLCA3MTMxMywgMCwgNTI2NSwgNjkyMzUsIDAsIDExNDg3LCA2Nzg1OCwgMTI0NjQsIAotICAgIDAsIDQzMDQ1LCAwLCAwLCA0MzM0NSwgMCwgMTA3NzAsIDExODk5NCwgNjgwNywgNDY1LCA5ODI5LCAwLCA3NDM0OCwgMCwgCi0gICAgNDMzNDYsIDgxMTYsIDc5NSwgMCwgMCwgMTI0NjIsIDEwOTMwLCAxMDgzMSwgMCwgMTE4OTUyLCA2NDM2MiwgNzQzMzQsIAotICAgIDk4MzYwMiwgMTIwODExLCAwLCAxMjQ2OCwgODYwNywgMTAwOCwgMCwgMTAwOTIsIDE5NTA3OCwgOTE3ODQyLCA2Nzg1NSwgCi0gICAgNTUyNTcsIDczNzcxLCAxNzY2LCAxMTI4MiwgMTE5OTYsIDE4MjAsIDQ1NDcsIDAsIDAsIDAsIDAsIDEzMjIzLCAxMjg2NjUsIAotICAgIDY0NTk1LCAxMjcyOTQsIDAsIDkyMzExLCA0MzQ1LCAxMjYxNiwgMCwgMCwgMCwgNzQ0NjcsIDAsIDAsIDAsIDUzODIsIDAsIAotICAgIDAsIDAsIDExOTA2MCwgNjQ5NTMsIDU0MDYsIDE5OTIwLCA2OTg5NywgNjY1MTAsIDM1OTAsIDE5NDg2NCwgMTEzMCwgMCwgMCwgCi0gICAgNDIwMTYsIDExODIzLCA0MzAyMywgMCwgMTE4ODk2LCA3NzQyLCAwLCAxMzI4MCwgNzEzMjMsIDkzMjYsIDczODI2LCA1MzEwLCAKLSAgICA3NDgxMiwgNzg1ODQsIDkyMjI5LCA4OTU5LCA0MzU4OSwgNjc0NywgNjY3MjMsIDAsIDg1NjgsIDAsIDEyMDQ5NiwgNzM4MTYsIAotICAgIDEyMDgwMywgOTgzODM5LCA0MjY3MCwgMCwgMTE2MjEsIDEyNDYwLCAwLCAxMjA2MzEsIDAsIDQzMDYzLCA3NDUxOSwgCi0gICAgMTI3MTgyLCAwLCA3MzkxNywgNzg0MywgNjk3ODMsIDExNjg5LCA1NDEwLCA1NzgzLCAxMDQ2OCwgODQwMywgNTQwMCwgCi0gICAgMTE1OTQsIDEyODI0NywgMCwgMTE4OTkwLCAxMDQ5MSwgNjk4NDIsIDY0NDEyLCAwLCAwLCA1NTg3LCA0Mjg2NSwgNjQ0MDQsIAotICAgIDgyNjgsIDQ5MjMsIDY1MDg2LCA4OTgxLCAxMjM4MiwgNDIxMzMsIDEyMDc1NSwgOTcwNiwgNjk3MzgsIDAsIDY2NjEwLCAKLSAgICAxMDQ2MSwgMTIxMDMsIDAsIDg2NDIsIDAsIDQyNzY2LCA5ODM4NTcsIDIyMTAsIDk5ODMsIDAsIDk0MDA5LCAwLCAwLCAwLCAKLSAgICA3Mzk4LCA0MTUxNSwgMCwgMTE4MDIsIDgwNDEsIDE0NjEsIDkxMCwgMTE5MTMzLCAwLCA2NzQ5LCAzNjU4LCA5Mzk2NCwgCi0gICAgMTIwNTI1LCAwLCA3NjE3LCAxOTQ4NDEsIDEyODg4LCAxMjc5ODMsIDY3NjY4LCAxMzE0MywgMCwgOTE5MywgMTEwOTcsIAotICAgIDU3MDMsIDAsIDQxNTE3LCA0MTUwNCwgNDE1MTksIDEwMDE2LCA2NDMwNSwgMCwgNjU4NjQsIDYyMywgNzgxLCA2NzAsIAotICAgIDEwNjYwLCA1NzY5LCA2MTMsIDc1NDMsIDEyMDI3OSwgNDc3LCA0MTA4MywgOTI1MjEsIDAsIDU5MiwgMTU3OCwgMTI0NTksIAotICAgIDQzNDQ5LCAwLCAwLCA4MjI1LCAwLCA2NTQsIDExMzQ1LCA2NTMsIDY1MiwgMCwgNjQ3LCAwLCA2MzMsIDEyMDc0NCwgMCwgCi0gICAgMTI2NDcyLCAxMjQ4MCwgNDMyNDMsIDAsIDM5LCAxMjQ4NywgMCwgMTIwNTI5LCA3NDE5OSwgMTI0ODIsIDAsIDEyNDg5LCAwLCAKLSAgICAzMTk1LCA1NTUwLCA5ODM1NTQsIDc4OTcsIDAsIDEyMDMsIDc0Mzk2LCAxODEzLCA2NDU0NCwgNDEzMTEsIDEyMDkwLCAwLCAKLSAgICAyODc3LCAwLCAwLCAxNjc1LCA2OTg0MCwgMCwgMCwgMCwgMTAwNzAsIDEwNTk1LCAwLCAxMTkwNzcsIDE5NDc3NywgCi0gICAgOTgzNjExLCAwLCAwLCAwLCA0MzI0NCwgMCwgMCwgOTgzOTA3LCAxMTk1NjEsIDk4MzA3OCwgMCwgMTk0OTIxLCAxMjgxNjAsIAotICAgIDk5MzksIDAsIDk4MzE1MSwgNzc4NjAsIDAsIDAsIDI3MCwgMCwgMTA3MTQsIDAsIDAsIDAsIDAsIDAsIDY1MzcyLCAwLCAKLSAgICA3NDAzOCwgMTE5NTU4LCA2MjczLCA2NjY3OSwgMzY0LCA5NTk1LCAxOTQ5MDgsIDAsIDAsIDcwNywgMCwgMCwgOTI4MiwgCi0gICAgNjY0ODksIDIyNCwgMCwgNjg2NzAsIDkzMzIsIDQ5NjYsIDY4Njc3LCAwLCA2ODY0NCwgMCwgMzg0MSwgNjg2MzQsIDAsIAotICAgIDEwNzMyLCA2ODY0MCwgODUwLCA0OTcyLCAwLCAxMjg5MCwgMjkwOSwgNjg2MTksIDQ0MDA4LCA2ODYyNywgOTgzNzA5LCAKLSAgICAxMTU0NCwgMTAyMDMsIDk2MDgsIDAsIDAsIDExOTYyLCAxOTQ2OTQsIDEyNTA3LCAxMTk2LCAxMjg2ODcsIDEyODMxMSwgCi0gICAgNzc3LCAxMjAxODcsIDQzNzUsIDY1MjcxLCA2NzY3OCwgMCwgMTIxOTgsIDAsIDY0ODI0LCAxMTkzNDMsIDk4MzIzMCwgCi0gICAgOTQ1NCwgNjM3NzgsIDg2NTgsIDQyNTI4LCA3ODAwMCwgMjcwNSwgOTE3OTc1LCA0MTUyMCwgMCwgMCwgMTE5ODYsIDc3NjUsIAotICAgIDQyNTAyLCA4MjgwLCA3NDUyMCwgMjcwMSwgMCwgMTI3MDAyLCA1NzY3LCAwLCAwLCA5ODA5LCA4MzUzLCA2Mzc0NywgCi0gICAgNjY3MDEsIDYzNzcyLCA5ODM4MDUsIDYzNzQ1LCAxNzQ4LCA2Mzc3MCwgMCwgMCwgMCwgNjU1NDIsIDYzNzY2LCA1NTI0NCwgCi0gICAgMzA2MSwgMCwgNjM3NjQsIDYzNzg3LCA5MDY3LCA2MDk2LCAwLCA3Njk0LCAwLCA3MjU3LCA2Mzc2OCwgMzQ4NSwgMTI5ODcsIAotICAgIDAsIDEyNzUyMiwgMTIwNjI4LCA2MzgwNywgMTU5MSwgMCwgNjM4NiwgNjM3ODMsIDAsIDAsIDkyNTM1LCAwLCAwLCAwLCAKLSAgICA3NDU3NSwgMCwgNjU3MTksIDEzMDgzLCA2NDU3NCwgNjUwMTIsIDAsIDE2NDAsIDEyNDk1LCA2NjY5MSwgNzYyNCwgMzEzOCwgCi0gICAgMTA5OTYsIDkyMjQ3LCAxOTIyLCAwLCAxMjQ5OCwgMTA5ODcsIDY5OTM2LCA2OTkzOSwgMzg5NCwgNjU1NDMsIDAsIAotICAgIDE5NDg0MiwgOTgzNTg4LCA0OTMsIDAsIDQzMTk3LCAxNzE3LCA0MjI4LCA0NzksIDEwMzAzLCA3NDAyMCwgMCwgOTE3OTM1LCAKLSAgICAxMDMzNSwgMzUyMCwgOTE3OTMyLCAxMjQ5MCwgNjQzMTUsIDAsIDEyNzAzOSwgMTI0OTMsIDYyMzMsIDQyNjgxLCAxMDAyLCAKLSAgICAxMjQ5MSwgMCwgNjQ5MTEsIDkyNjE1LCAyMDk2LCA2NTEyMCwgMCwgNzgyMTksIDk4MzA4MSwgMTE2MTEsIDExNjMyLCAKLSAgICAxMjcwNDEsIDY2MjEzLCA2Mzg2NCwgNjYyMjEsIDY2MjI2LCA2NjIyOSwgMTMyMTgsIDY2MjMxLCA2NjIxNiwgODUwNywgCi0gICAgNjYyMzYsIDY2MjExLCA2NjIxOCwgOTI2NzIsIDY2MjQwLCA3ODA0MSwgNjYyMzMsIDg5MjgsIDk4MzU1MiwgNzkwOSwgCi0gICAgNjYyMzQsIDExNjA1LCA2Mzc1OSwgOTgzNjQ1LCA2NjIwOCwgNzM5OTksIDYzNzk5LCA2MzgwMywgMjQ0LCAxMTU0MiwgCi0gICAgMTI4OTgsIDEyNDk0LCA3Mzc2MSwgMTI0OTIsIDEyNjY5LCAwLCAwLCA3NDE1MywgMCwgMTI4Mjc4LCAxMjA2ODAsIDQ4ODIsIAotICAgIDEzMDQwLCAwLCA4NjEyLCA0ODg1LCA3NDA1MywgMCwgMTMwNDIsIDQ4ODAsIDY0NjYyLCAyNDI5LCAxMzYwLCAyNDgsIDAsIAotICAgIDYzNzk3LCA5MjM5NCwgNDIzNTgsIDAsIDcyOTIsIDAsIDYzNzU2LCA0Mjc4NiwgNjY2OTMsIDAsIDE4NzAsIDc4MDQwLCAKLSAgICA0NzAsIDc4MDM4LCA3ODAzNSwgNzgwMzYsIDcwMDI4LCA3ODAzNCwgNDU3OSwgMTI4MDkwLCAwLCAxMjUxMSwgNzQ0NTMsIAotICAgIDEyNTE0LCAwLCA3NDU3OSwgNzIzOSwgNzAwMSwgODYyMywgOTQwMTEsIDEyODA1MiwgMTI4MDQ4LCA3Mzc4LCAxMjUxMiwgCi0gICAgMTE2MTUsIDYxMDQsIDAsIDAsIDY1OSwgNjA5OCwgMCwgMTIyMzQsIDEyNzMwNywgMTI3MDY3LCA4MzExLCAxMjUxMCwgCi0gICAgNDE4MDMsIDEzMDM5LCAxMjcwNzIsIDEyNTEzLCAxMDIwMiwgMTI0NzEsIDAsIDg3NDcsIDk4MzkxMSwgMCwgMCwgMjMyMywgCi0gICAgMCwgMjMxOSwgNzc5MTcsIDEyNDc3LCA3NzkxNiwgMjMxMSwgMCwgNDQxNSwgMjM3LCA2MjgxLCAxMjcyODAsIDAsIDAsIAotICAgIDIzMDksIDEzMTIsIDgxNzMsIDEyODg3MSwgMTI0NjksIDAsIDc4NTA1LCA2NDMzNSwgMTA2MDksIDAsIDEyODExMSwgOTM5NywgCi0gICAgMTE1MjQsIDkzOTUsIDkzOTYsIDkzOTMsIDkzOTQsIDkzOTEsIDkzOTIsIDkzODksIDYyMDksIDkzODcsIDkzODgsIDQ5MzIsIAotICAgIDkzODYsIDkzODMsIDkzODQsIDY3NDAsIDAsIDY1NDUxLCA4MTg1LCAwLCA5MTc4MzIsIDQzMDI0LCA0MzMzNiwgNjc2NTksIAotICAgIDIzMTMsIDEyODE2NywgNzk0OCwgOTIzNiwgOTI1NzEsIDAsIDAsIDEwNTcwLCA0MzQ3MywgNjI4OSwgMTA0ODQsIDAsIDAsIAotICAgIDExOTk4LCAxMjA4MiwgMTA5MjQsIDMxNDcsIDAsIDEyMDY4NCwgMTI1MjQsIDExOTA4MSwgMjMxMCwgMTE4MTgsIDkzODEsIAotICAgIDkzODIsIDkzNzksIDkzODAsIDkzNzcsIDkzNzgsIDkzNzUsIDkzNzYsIDE2ODMsIDkzNzQsIDk4Mzc2OSwgOTM3MiwgCi0gICAgMTI0NDQsIDAsIDAsIDEzMDE2LCA4MjEwLCA5ODM5NDksIDQyMDI5LCAxMTA3OSwgMTIzMzEsIDQzNDUxLCA0MjAzMiwgCi0gICAgODc0NCwgNzI2LCAwLCA5ODM4MjgsIDQxNTUsIDAsIDAsIDQyMDMwLCA1MDA3LCAxMjUyMiwgNDMwODgsIDAsIDQ5NTEsIAotICAgIDEyNzgwNSwgMTI3MjQwLCAwLCA5OTIyLCA0MzMwOSwgOTgzODMyLCAxMjUyNSwgOTgzNDYzLCAxMjAxNiwgNjU3NzAsIAotICAgIDk1NDgsIDY3NjY1LCA0MDMsIDc4MjMwLCAxMjUwMywgMCwgMCwgMTEwMzAsIDAsIDkyNTY3LCA2NTY5MSwgNjM5OTgsIAotICAgIDE4MTksIDEwNDk2LCAwLCAwLCAxMTk5MjAsIDAsIDE5NDY2OCwgMCwgMTI1MDYsIDAsIDEyMjMxLCAwLCAxMjUwMCwgCi0gICAgNDQwMjMsIDEyNTA5LCA2NDM5MywgNzg4MzAsIDMzODksIDEwNTg5LCA2NjA4LCA0MTA0NywgMTIwMzIxLCA3ODM5NSwgCi0gICAgNzgzOTQsIDc0MDY5LCA3Nzk5NSwgNzgzOTEsIDM2MDgsIDgyODEsIDEyMDMyMCwgMTEwNywgMCwgOTA3NiwgODg2MiwgCi0gICAgNjk3NDMsIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAxMzIyMiwgNzQxNjUsIDc0NzgyLCAxMjY1MTQsIAotICAgIDg1NDYsIDExNTUzLCA2Mzk5NSwgMTMxNzcsIDkwNDMsIDYzMDMsIDk4MzkzOCwgNDk4LCA2NDQ3MSwgMTIwMzI0LCAKLSAgICAxMjg1NjcsIDEyNTI5LCA4MDQyLCAwLCAyMzQ0LCAxMjUyOCwgODAzMSwgMjQxNCwgMCwgNjk3MTksIDMyMzEsIDAsIDY0MjIsIAotICAgIDY2NTEyLCA2OTY1MywgMTI1MzAsIDI1MzcsIDc4NDA1LCA0MTQyOSwgMTI2NTgsIDEzMDM2LCA2NTc3MiwgMCwgNzg3MzgsIAotICAgIDQxNDMzLCA0NzE5LCA0NjksIDAsIDQzNjMsIDMzMTMsIDQxNDI4LCA3ODQwNywgMjAyMywgMTc3MiwgNzgyMjQsIDc4MjI1LCAKLSAgICA2NTcwNiwgMTAwNTEsIDY0ODEyLCA3ODIyMCwgMCwgOTkyMCwgMTIyMTUsIDAsIDQ5MzEsIDE5NTEsIDEyNDk3LCAxMTkzNjMsIAotICAgIDk2MDcsIDAsIDk2NjMsIDAsIDExOTYzNCwgNjUwMywgNDExMTAsIDAsIDE0OTEsIDAsIDAsIDEyNzMwNCwgNDEwNjEsIDAsIAotICAgIDE5NDgzOCwgMTI3MTg3LCA2NTAyNiwgNDE5OTMsIDQxNTA5LCAxMTA0NSwgNjUwMjgsIDc4NjAyLCA2NjQ3NiwgNDExMDgsIAotICAgIDk3MzgsIDQxOTk1LCAxMDc1LCAxOTU4LCAxMjUzNSwgNDE5OTIsIDQxNTA2LCAwLCA0MTY4NywgMCwgMTIwNzE3LCAKLSAgICAxMjc3NzYsIDk5NDAsIDEyNzI5OSwgNzY5MiwgOTgzODI0LCA4MDA4LCA0MTEzMSwgMzMwLCA4NTY2LCA2NTA4MywgNDExMzMsIAotICAgIDk4MTYsIDEyNjUxNywgMTI1MzIsIDc4NTUwLCA3ODU0NiwgMzUwOCwgMTI3MDU4LCA0MzIzNSwgMCwgMTI3Mjk4LCA2NDEzOSwgCi0gICAgNzgyMzEsIDY0MTEsIDEyOTEwLCA3ODU1NCwgNjY2NDQsIDEzMDI4LCA2NzM3LCAxMjUzNywgMCwgMCwgNjQxMzYsIDEyNTM2LCAKLSAgICAyMzUwLCAxMzAyOSwgNzgyMzMsIDAsIDk4MzEwMywgMTMwMzAsIDY3MDIsIDQ1MjcsIDAsIDEyNTM4LCAxMjg4MTAsIAotICAgIDk4MzYzNiwgNjU1OTksIDY1NzE3LCA5OTY2LCAwLCA0OTQ4LCAxMjQ4NCwgNDAzMiwgMTI4MTQ5LCAxMjYyMywgMCwgNjIwNywgCi0gICAgMCwgNjExNywgNjU5MzAsIDg0MTIsIDAsIDc0MzgsIDEyOTYsIDIzMjUsIDQxNTExLCAxMjY2MjUsIDEwMTQ5LCA3NDExOCwgCi0gICAgMCwgMTI3Mjg2LCAxMjQ4MSwgMCwgMTI0ODgsIDY2NzEzLCAwLCA0MTU1NiwgNjQ0MTQsIDExODgwMiwgMjM1NCwgNDI2MTksIAotICAgIDczNzY2LCAwLCA2Mjk1LCA5MDEsIDQxNTEwLCA3OTUzLCAwLCA2NTAzMiwgNDE1MTMsIDk4MzE2NiwgMTE5MjcsIDY2NTg0LCAKLSAgICA3ODU1OSwgNzg1NjAsIDc4NTU3LCA3ODU1OCwgMCwgNzg1NTYsIDg0OCwgOTg2OCwgMCwgNjQyNCwgNzg1NjgsIDExOTMzOCwgCi0gICAgNjk5MjIsIDc0MDMxLCA3ODU2MywgNzg1NjQsIDIzNTIsIDc4NTcyLCA4OTMsIDY0NTc2LCAxMTI4OSwgMTQwNywgNjc5NzMsIAotICAgIDAsIDEzMDI2LCA2NzYyLCA3ODU3OSwgNzg1ODAsIDEzMDIzLCA4OTAzLCA5Nzc3LCA2NjcxNSwgMTg3MSwgODA5OSwgMCwgMCwgCi0gICAgMTM0MywgOTgzODE0LCAwLCA5MzI1LCA2ODE4LCA2MjgzLCAxMTczOCwgMCwgOTgzOTI1LCAwLCAxMTc0MSwgMCwgMCwgCi0gICAgOTIxNiwgODI2MywgMTEyNzksIDE5NDc1MiwgOTgzODE2LCAxOTQ3NTQsIDEzMDIxLCA2NDQ5NCwgMzEzNiwgMTk0NzU4LCAKLSAgICAxOTQ3NTcsIDE5NDc2MCwgMTMwMjIsIDQyNzM3LCA5OTU2LCAwLCAwLCA3NDU1MiwgMTAwMTQsIDAsIDQxMjYwLCAxMTkzNDAsIAotICAgIDEzMDIwLCAxMDAyNCwgMTk0NzY0LCA3NDU4MywgNzQzNDAsIDY5NjgxLCAwLCA0MzAwMSwgODAyOSwgMCwgMCwgOTgzNzcxLCAKLSAgICAzMzM1LCAwLCAwLCA5Nzc2LCAxMjA1MjYsIDE5NDc0OCwgNTIxNSwgNDI2NDQsIDMzMzMsIDE2MzIsIDE5NDc1MSwgNjQ4NDksIAotICAgIDMzNDIsIDc4NTgyLCA1MzYzLCAxMjk1NywgNzg1ODEsIDQxNTYsIDAsIDAsIDY0MjEsIDc4NTkxLCAxNjExLCA3ODU4OSwgCi0gICAgMTMwMTgsIDc0MjU3LCA3ODU4OCwgNzQ1NDIsIDMzMzcsIDQ1MzcsIDY3ODk1LCAxMTczNiwgMCwgNjg2MDgsIDY0ODIsIAotICAgIDQyMTQsIDczNzkwLCAxMTk0NSwgMCwgMTMwNDYsIDg4MzgsIDQyNSwgNDAyNSwgMTA3MDksIDc4NTk1LCAyMTA4LCAyMzkyLCAKLSAgICAxMzA0NywgMCwgMCwgNjgxOSwgMTMwNDksIDY0OTksIDkyMjQzLCAxMjQyNCwgNjg2MTQsIDczOTQ0LCAxMzA1MCwgOTkyNCwgCi0gICAgMTk0NzQ1LCA2NTA3LCAxMjc5MTksIDk0MDczLCAxMjgwNjksIDMyNzcsIDg5MjksIDQ5NDcsIDQxMDU1LCAwLCAxOTQ3MjIsIAotICAgIDE5NDcyMSwgMTk0NzI0LCAxMzA0NSwgNjQ2MjYsIDY2MDM0LCA3NzUxLCAxOTQ3MjcsIDgzNzEsIDE5NDcyOSwgMzk5NywgCi0gICAgMTI4MDYsIDg3NjgsIDEzMDQ0LCAwLCAxMjQyMCwgNDAyNCwgMTk0NzMwLCA0MTA1NCwgMTA3OCwgOTc1NywgNjk3MzYsIAotICAgIDQxMDU3LCAwLCAwLCAwLCAwLCA5ODM3ODIsIDkyMjEwLCA5MjQxMSwgMCwgNDE0OTYsIDAsIDkxNjUsIDE1NzIsIDExOTExLCAKLSAgICAwLCAxMTg4NDIsIDIzNDYsIDEzMjcwLCA4OTU4LCAwLCA5NjQ2LCAzNzczLCA0MzE4MywgNjQwMSwgNTgzMSwgMCwgMCwgCi0gICAgMTMwNDMsIDgwNTYsIDkyNDk0LCA2NTY4MSwgMjA4LCAxMjczODIsIDQxNTE0LCAwLCAwLCAwLCAxMDY5OSwgNjQwOCwgCi0gICAgOTIyMjcsIDc4MjUsIDU2NjEsIDAsIDEyMDYzMCwgMzYwMywgNDExMDksIDIzOTgsIDM1NDgsIDEyNjU5NiwgMCwgMTE5OTMzLCAKLSAgICAwLCAzMTE1LCA5OTE4LCAwLCAxMTMyMSwgNDI5MTIsIDAsIDAsIDE5NDcyNiwgNDg3NiwgNjU4MDQsIDAsIDAsIDQzNDY4LCAKLSAgICA5ODMyNjYsIDQxNTU4LCA0MTQ3MSwgNzM5NTAsIDgxNTgsIDk5NDQsIDQxNDcyLCAxMjAyOTgsIDEzMDUxLCA3ODY4OSwgCi0gICAgMzE0MywgMTk0Njc0LCA2NzAxLCA0MTU1OSwgMTg5NiwgNjYyNTYsIDEzMDUyLCAxOTQ2ODAsIDU2NjUsIDAsIDExOTA3MSwgCi0gICAgNzAyNSwgNjM5NzQsIDAsIDc0MzUyLCA3NDE2MSwgNDE1NCwgOTg2MywgNDM1NTAsIDEyMzEwLCA1NjYyLCA0MjM4MiwgCi0gICAgMTk0Njg2LCA3MzkyNCwgMTEyMSwgNzgzMTksIDYzOTU5LCAwLCA5OTQyLCAxMzIzMSwgMCwgNjQ3NTIsIDQ3MzIsIAotICAgIDE5NDY2NiwgMTE1OTYsIDExOTkzMSwgNjUxODcsIDE2MjYsIDYzOTgzLCAxMDExMCwgNjQ3NzIsIDQyMDI0LCA2NDIwLCAKLSAgICA0MjAyOCwgMCwgMTA1MDksIDI3OTUsIDQ5MTAsIDE5NDcyOCwgNjkyMzEsIDY0NzUzLCA2Mjc1LCA5Mzk1NywgMTE4ODMwLCAKLSAgICA2Mzk3OCwgMTEwNDQsIDMyMjksIDY0MjMsIDQyNzc0LCAwLCAwLCAwLCAxMjgyMywgMjMzMSwgOTE3ODEwLCA3MDg1LCAKLSAgICA2MTM3LCAwLCA3NTI0LCAwLCA5MTc4MDksIDgzNDYsIDAsIDgzMzgsIDEyODMxNSwgNjUwNDMsIDAsIDgyMiwgMTI3OTg0LCAKLSAgICA5OTAzLCA2NDcyMSwgNDI3MjIsIDY5ODc3LCAxOTQ2NTksIDc4NjU1LCA3ODY2MSwgMTk0NjYwLCA3ODY2MiwgNDEyNjUsIAotICAgIDUzMTEsIDE3OTUsIDk2NSwgMTE4NzkxLCAxMDU4NywgNzgwNTUsIDExMjc4LCA3ODYzMiwgMTk0NjQwLCAwLCAxMjk0NiwgCi0gICAgMTk0NjQxLCAxMTkzNDEsIDEyMDM0OSwgNjI5NCwgMzE0NCwgMTk0NjQ4LCAxOTQ2NDcsIDY1MDE5LCAxOTQ2NDksIDczOTkwLCAKLSAgICAwLCA5ODM5NTEsIDc0OCwgNDEwNjcsIDIzMzAsIDUzNSwgMzE0OCwgMTIzNzUsIDc4Nzk5LCAxOTQ2MjksIDEwNTU2LCAKLSAgICAyNDc1LCAxMjM4OCwgNDg4OSwgODk2OCwgNjc4NjMsIDM1OTMsIDAsIDAsIDIzNDIsIDAsIDE5NDYzNCwgNjUyMDYsIDQ4OTQsIAotICAgIDE5NDYzNSwgNDg5MCwgMTk0NjM3LCA5MTc4MDQsIDU4MSwgNDg5MywgOTgzNjE2LCA2NTcxLCA2NTU0NSwgNDg4OCwgNDE1NywgCi0gICAgNzgwNDgsIDc4MDQ5LCA3ODA0NiwgNzgwNDcsIDAsIDEwMTE5LCA2NDE1LCA0Mjg5MywgMCwgNjk3MDIsIDAsIDAsIDExMzc1LCAKLSAgICA2NDc0NiwgMjMzMiwgNzgwNjMsIDQxMiwgNzgwNjEsIDY0OTMyLCA0Mjg4MCwgNDM1ODcsIDAsIDAsIDAsIDAsIDY1MTk3LCAKLSAgICA3ODA2NiwgMTIyMDMsIDc4MDY0LCA3ODA2NSwgODkxMywgNjU4NTQsIDQ4NzUsIDY1ODExLCAxMjAzODEsIDEyMDM4OSwgCi0gICAgMTE4ODg4LCA5MzQ0LCA4ODI2LCAxMjAzODYsIDEyMDM5NSwgMTMxMDQsIDc0NzgxLCAxMTk5NywgMTIwMzkzLCA3ODA3NSwgCi0gICAgMCwgMzEzNCwgMCwgNjU2OTYsIDkyMzMxLCAwLCA2NjIxNywgMCwgODMzNCwgMTE5MzQ0LCAwLCAzNDQ5LCAwLCAwLCAKLSAgICA3ODQxNCwgNzg0MTMsIDExODk1MCwgNzQwMTEsIDAsIDAsIDAsIDAsIDE5MDgsIDEyMDE2NywgNDMyOCwgMTA3MzQsIAotICAgIDEyNzAxNCwgMCwgMTI3OTE0LCA3ODA0LCA3ODI3MiwgMTA4MTEsIDYyNTAsIDExMzM5LCA0OTE0LCAxMTM2NywgMCwgCi0gICAgNzgwNTQsIDQ5MTcsIDc0NTE2LCA3NDIwOCwgNjQyODUsIDQ5MTIsIDU0NjQsIDEyNzgzNiwgMTE4ODkzLCAyMzYxLCA3OTcxLCAKLSAgICA3ODA3MiwgNzgwNzMsIDU1MjQzLCA3ODA3MSwgMCwgODA4NiwgNzQzMTcsIDY3MDcsIDgzMTksIDIzMTIsIDQwOTc3LCAKLSAgICAxMDk2MCwgNDA5NjIsIDgzMDUsIDEyNTczLCA5ODM2MDgsIDQwOTgwLCA5ODM5NTUsIDEzMjAyLCAwLCAxMjU4MiwgNzgyODIsIAotICAgIDk4MzA0OCwgNjk4NTYsIDQyNDM4LCA1NTIyMSwgNjI4OCwgNzgyODAsIDEyNzk0NiwgNTY1MywgNDI0MDAsIDEwODkxLCAKLSAgICA3Njk4LCA1NjU4LCA3NDA0NSwgNzAwMzksIDAsIDAsIDQ5MTMsIDAsIDk4Mzk1MCwgNzEzMzMsIDQyMzI2LCAxMjgxOTQsIAotICAgIDEyNzI4LCA5MjY4NSwgNDI0NzgsIDIzMjcsIDAsIDEyNTYzLCA0MjI4NywgMTI3MDUsIDAsIDAsIDEyNTg4LCA4ODIxLCAKLSAgICA2MTUzLCAyODY3LCAxOTQ3MDgsIDY2MzEyLCA2OTgsIDEyODAwNywgMTk0NjA2LCAxMDM1NiwgNzAwMTcsIDE5NDcxMywgCi0gICAgNjUxLCAxMjY0MSwgMCwgMCwgMCwgMCwgNDE1NTIsIDY1MTE1LCA3ODQ2NSwgNzg0NjcsIDc4NDYzLCA3ODQ2NCwgMTI4ODUxLCAKLSAgICA3ODQ2MSwgMTk0Njk3LCA3NDM1NiwgNjQ5NDUsIDQ3MTYsIDQzMjc3LCAwLCA3ODQ3NCwgMTIzNDAsIDEyMDU2OCwgMCwgCi0gICAgMTk0NzAwLCA1NTI2NCwgNDEyMTEsIDEyMDY3NiwgODcwMywgNTQ2MiwgOTE3NjI5LCA5ODM0ODcsIDEwMTAxLCAwLCAKLSAgICA3MDA0OSwgODQ3OSwgNDE1MSwgNDE5MzMsIDAsIDAsIDY2MjU0LCAxMjA4MjEsIDAsIDAsIDEyODY1NCwgMCwgMTE5MTk0LCAKLSAgICA3NDA1MCwgOTI3MDEsIDAsIDAsIDAsIDAsIDAsIDEyMjc4LCAwLCAwLCAwLCAyNzAwLCAxMjU3NiwgNzg0MiwgMTI4OTksIDAsIAotICAgIDAsIDI2OTksIDAsIDczODQ1LCAyOTg1LCA5MjU2OCwgMTI2NDc1LCA5MTc4NDUsIDEyMTkyLCAxMTkzMTQsIDAsIDExOTMxMiwgCi0gICAgOTgyNywgMTE5MzEwLCAxMTkzMTEsIDExOTMwOCwgMTE5MzA5LCAxMTkzMDYsIDExNDgxLCA0MTIxMCwgMTE5MzA1LCAwLCAKLSAgICAzNSwgNzg0ODEsIDc4NDgyLCA2NjY5NCwgNjg0NzksIDc4NDc3LCA3ODQ3OCwgNDM1OTYsIDYwOTAsIDY0MjU3LCA3ODEyLCAKLSAgICAxMDUzNCwgMCwgNzg0ODUsIDczODQ4LCA2Nzk3NSwgNDI3MiwgMCwgNDA5NjcsIDQwOTY0LCA5MTc4MjUsIDEyNzA0LCAKLSAgICA3ODQ4NywgNDMzMDYsIDAsIDY0NDk3LCAxMjEzOCwgNzkzMCwgMCwgMjI5MiwgNjgyMTYsIDAsIDkxNzgyNiwgNTI0NCwgCi0gICAgNDE4OSwgOTQxMDgsIDY3NTk2LCAxMjc1MDQsIDQxODgsIDE4NzksIDAsIDk2OCwgMCwgNDM3NDMsIDAsIDg4NzMsIDIyNzksIAotICAgIDAsIDkxNzgyNywgNjU1NTUsIDEyNTc0LCAwLCAwLCAwLCA3NDQ5MCwgMTI3MDk5LCA0MzY1NywgMCwgMCwgMCwgNDI2ODIsIAotICAgIDEyNTc4LCAxMjcyMCwgMCwgNDEyMjcsIDAsIDEyMzQ2LCAxMjcxMDEsIDY0ODQ4LCAwLCAwLCA3MjUxLCAwLCAwLCAKLSAgICAxMTg4NTAsIDExOTE0MSwgMTI4NTQ2LCA2NjAxNSwgMCwgOTU5LCA4ODg1LCAxMjU2NCwgNjY0NTcsIDc4ODA4LCA5NDY5LCAKLSAgICA5NjMyLCA5MjMyMywgNzQ3NjEsIDY0MzIzLCAxMjczMzUsIDAsIDAsIDAsIDMxMCwgMCwgNDEyODEsIDEwOTc2LCAwLCAKLSAgICA3MTMyNSwgMCwgNzQyNjYsIDEwMDU0LCA2NDk3LCA4NTc0LCAwLCA5MDEyLCAxOTk1OCwgNzQ0MjAsIDY1MDg5LCAxMzIxNSwgCi0gICAgMTI3MzAsIDY1MTYzLCA3NDA0NCwgMzc0LCA0MzE5NSwgODE2LCAxMjAxNjEsIDAsIDAsIDQxOTM0LCA3NDY1LCAwLCAKLSAgICAxMjgxNjgsIDk4MzI2MCwgNDcxNSwgNjEwMSwgOTQxMDYsIDQxOTM2LCAwLCA0ODc5LCAwLCA2NTQ0NiwgMCwgMzA3LCAKLSAgICAxMjcxNDcsIDk1ODUsIDUzNzQsIDk4MzI1OSwgMTI4MDU5LCAwLCAwLCAxMjY2MTgsIDEyMDM5MCwgMCwgNjU1NjcsIAotICAgIDEyMDYxNCwgMTkyOSwgMCwgMTIxNDIsIDAsIDEyMjM2LCA0MTQxOSwgMTk0NjE4LCAxMjA2MTAsIDEyOTgyLCAxOTQ2MjMsIAotICAgIDUzNzgsIDc4NzkxLCAxMjg2NzksIDQxNDIxLCAwLCA0NDYyLCAwLCAxMjY1OTksIDEyODA5MiwgODIxLCAwLCAyNDk4LCAKLSAgICA1ODAwLCAxMjAxNTcsIDk4MzExNSwgMTc2MCwgMjQyMSwgNDQ2OSwgMjMyNCwgODI4LCAzNjExLCA3ODQwMCwgNzU3LCAKLSAgICAxMTg1LCAwLCA3ODc3MCwgNDM1OTcsIDEwNjI4LCA3NDgwOCwgMTk0NTcyLCA3OTk5LCA0Mzk3MSwgMCwgMCwgMTA2MzQsIAotICAgIDEwOTQyLCA3NzEzLCAyMzQ4LCAwLCA2NDM3NCwgNDM4MCwgMTk0NjA4LCAxMTkwNDQsIDk5ODIsIDY0MzI0LCA0MTI0MCwgCi0gICAgODYyLCA2NTYyNiwgNzg0NjIsIDE4MTAsIDM2NzMsIDUxMzcsIDE5NDYxNywgMCwgNzI3NywgNjU2MjIsIDAsIDc1NjYsIAotICAgIDY0Njg4LCAxOTQ1OTMsIDE5NDU5MiwgNzgwOTIsIDc0MzU3LCAxOTQ1OTcsIDQ3NDgsIDkyMjI4LCAxOTQ1OTgsIDE5NDYwMSwgCi0gICAgNDIyNjAsIDU4NzEsIDExOTA3NSwgMCwgNzQ1NzYsIDQ0MDE5LCAwLCAxMjgxODksIDM5NjcsIDE5NDYwNCwgMTMxMzcsIAotICAgIDg3NzUsIDEyNzk0NSwgMCwgMjk2MywgMCwgODQxMCwgNDQ1NCwgNzIzLCAxMjc4ODIsIDk2NiwgNDQ0OSwgOTIzMzAsIAotICAgIDkyMjM4LCAwLCA3ODE5LCAyMzIwLCAxOTQ1ODksIDMzOSwgNDk2OCwgMTk0NTkwLCAxMjAzOTksIDgwNzUsIDU1Mjc2LCAwLCAKLSAgICA4MDQ3LCAwLCA3ODgyNywgMTI2MzQsIDQxNTQyLCA3ODc4MCwgNzQ2NiwgNjcwNSwgMTIxNzQsIDQyNjEwLCAwLCA3NDQ1MiwgCi0gICAgOTgzNzU0LCAxNTg0LCA2NjY0NSwgNjA0NSwgNjcyOSwgMTIwNjQwLCA2NTIxOCwgMTE1NTksIDAsIDc4MDYyLCA3NTM3LCAwLCAKLSAgICAxMTM3MCwgMCwgMTAzMzAsIDAsIDEwMzk0LCAwLCA3NDE5NCwgMCwgMTI3OTI5LCA5NzgwLCAwLCAxMzA5MiwgMTk0NTc2LCAKLSAgICA3Nzk1MCwgMTk0NTc4LCA3MDc0LCA5MjY0OCwgMTk0NTc5LCAxOTQ1ODIsIDExNDE0LCAxMjg4NjgsIDI1MzEsIDEzMDM0LCAKLSAgICAwLCAwLCA0MjExLCAxMjU5LCA3NTE3LCAwLCAwLCAxOTQ1NjEsIDQwOTk2LCAxMzAzNywgNzA5MiwgNjQxLCA1MjE5LCAKLSAgICA5NDAzNCwgMTk0NTY2LCAxMTA2NCwgNDExMjksIDAsIDQyODUwLCAxMzAzNSwgOTA3NSwgOTIzODcsIDU0NjYsIDEyODE1MywgCi0gICAgMCwgNjQwOTgsIDY1NzkzLCA0NTM1LCAxOTQ1NzMsIDQyNzEsIDc4NDE3LCAxMjgzNTcsIDY3NjksIDQxNDEwLCA5ODM0NDQsIAotICAgIDY0MjYyLCA2NzY3LCA0MTQwNywgMCwgMCwgNjc1NSwgMTE4ODY0LCA5MDQ2LCAxMjc5MzQsIDEyNjYwOCwgMCwgMCwgMCwgMCwgCi0gICAgNjc2NzUsIDAsIDAsIDAsIDY0MzM4LCAyNTYzLCAxMzAzMywgMjQ3LCAxMTg5MTUsIDAsIDEyMzM4LCA0NjUxLCA2OTg5NSwgCi0gICAgMTEyNzAsIDAsIDAsIDExOTMzLCAwLCAwLCA0MTkwMywgNDM0NDcsIDExMDAxLCAwLCA0MjI1NSwgMCwgOTI2NjEsIDY5ODIxLCAKLSAgICA0MTkwNSwgMCwgMCwgMTA3NzUsIDk3OTMsIDUwMDksIDAsIDQyMjY5LCA2NDU4NywgOTgzMDYzLCA0MjUzNSwgNjk4MTIsIAotICAgIDY0NTI5LCA0MTQwOCwgNDI4NTMsIDM4NzcsIDEyMDc5NSwgNDI2NzQsIDgxNDcsIDQzNTY2LCAxMTkwMjEsIDk4Mzc2NywgCi0gICAgMTAyMzYsIDY1OTE4LCA0Mzc4MiwgMCwgMCwgNjQ1MDYsIDY5NjUyLCAxMTg5MjEsIDQ3NDcsIDEyODA1OCwgNjk4NDQsIAotICAgIDQzMjAwLCA1ODMyLCAwLCAwLCA1MTQxLCA0MjYwMCwgMCwgNDMyMDMsIDAsIDk4Mzc5MCwgNDMyODYsIDAsIDEyODIxMSwgCi0gICAgNDM3NzgsIDAsIDQxMzA1LCA3ODc3NiwgNDM3ODEsIDExMzAzLCA2NTU0NywgMCwgNzAzMSwgODU5LCAwLCAwLCAwLCA2MDU5LCAKLSAgICAxMjY5ODUsIDU1MjM1LCAwLCA4NTM1LCAwLCA2NTE5NiwgMTk0Nzg3LCA2NjAzMiwgMTE0ODgsIDEyMDQ4MSwgMTIwNzg2LCAKLSAgICA0MjIzMywgNjQxNDAsIDk5NDYsIDYzODg1LCAxOTQ3OTIsIDExODIyLCAwLCA0MzE4OSwgOTgzODg5LCAwLCAxNzg4LCAKLSAgICAxNTc5LCAxMjA0ODIsIDcxMjk4LCAwLCAwLCAwLCA5MDI4LCAxMTk1NzEsIDY5MjM0LCA5NDA1NSwgMCwgMTI4NSwgNjQ4ODIsIAotICAgIDQxMjQyLCA3MDA4NiwgMCwgMTI2NDAsIDAsIDc0MDEsIDAsIDEyNjI1LCA2ODE5OCwgMCwgNzAwODIsIDM5NDAsIDQxNTk3LCAKLSAgICA0Mzc1NCwgMzM5NiwgMTI2NDIsIDg2NjUsIDAsIDAsIDEyNjMwLCAxNjUzLCA5MTc4MTUsIDEwMTUzLCAwLCA2MTY2LCAKLSAgICAxMjA1MTYsIDExODk4OSwgMCwgODgxNSwgNjY2NzMsIDY1MDQ2LCA5Mjg1LCA5MTMsIDQyMjU5LCAxMTkzMTcsIDExOTMxOCwgCi0gICAgMjE0MiwgNjg0NTQsIDQyNDg1LCA5NDAxMiwgNzg3OCwgODIxMSwgNDIyOTMsIDY0Mzc3LCAwLCA5MjY0MywgMCwgMTk0NjczLCAKLSAgICAxMjAzMiwgMCwgOTcyNSwgMCwgNzg0MzEsIDUyNjMsIDEyODE4LCA3ODQzMCwgNDE5MzksIDEwMDIyLCA2NTM4NywgNzg0MTksIAotICAgIDQyNzc3LCAxMDEzOSwgOTgwLCA0MzY5OCwgNjUzODYsIDIyMDgsIDAsIDQzNzAxLCA0MzE5OCwgNzE4NCwgMTIwNjczLCAKLSAgICAxOTQ3OTcsIDkxNzgxOSwgMTAwODUsIDExOTk5MiwgMCwgMTE5OTkzLCA2NjM0LCA5MjM3MywgMCwgMTE5MzIzLCA4MDcyLCAKLSAgICAxMTkzMjEsIDQzNzAwLCAwLCA4ODcyLCA3NzgzLCA5MTc5OTIsIDEyMzk4LCA4MjM3LCAwLCAwLCAxMjM5NSwgMCwgCi0gICAgMTI2OTc3LCAxMjA1NjUsIDk5MTQsIDIyMTcsIDkxNzg1NCwgNzM5NzUsIDYzNjcsIDYzNTEsIDY2Njg4LCAwLCA3ODEwNywgCi0gICAgMCwgNjQ3MzUsIDQxMjQzLCA5MjE5OSwgNzgwOCwgMTgyOSwgMCwgNDE5MzcsIDQzNTgsIDQzMjcyLCA2MzUzLCAwLCAwLCAKLSAgICAxMjA0MjIsIDAsIDE3MTAsIDAsIDAsIDY1NjA3LCAwLCA0OSwgNjYyNywgMCwgNjI1OCwgMTA2ODMsIDc4NjcyLCA5NzQxLCAKLSAgICA3ODMyOSwgNTY0OSwgNzg0NDEsIDQzNDQzLCA2NDQxOCwgMTY0MywgNjUyMTMsIDg0MDUsIDM0NzAsIDEyODIyNSwgMTMyMTMsIAotICAgIDQyNDUyLCA3ODMzMSwgMTIwNjY0LCA3ODQ0NSwgMCwgMTA3MiwgNzg0NTcsIDc4NDUyLCA3ODQ1NCwgNjU3NiwgNDE5ODgsIAotICAgIDQxMTMyLCA2NTY3NSwgMTA4MCwgMTIwMDAyLCA5ODg2LCA1NTIyNSwgMTEwMSwgNjg0MDQsIDEyMzA5LCA1NTIyNywgMCwgCi0gICAgMTI2MzIsIDEwODYsIDE4NjksIDc4Njg1LCA3NjgwLCAwLCA2NTQ1OCwgMTIwNzE0LCAxMjYzOSwgMzM4MCwgODEyMywgCi0gICAgMTA5MSwgMTI2MzgsIDc5NzcsIDQ1MDEsIDQxMDk5LCAwLCA2NjMwOSwgMCwgMCwgMTQ5NCwgOTgzMTQ2LCAxMjY2MTMsIDAsIAotICAgIDExNjkzLCAxMjY1MTMsIDEwNDk0LCA5MjY1NSwgNjU4NzIsIDEyMzYzLCAxMTM4NiwgMCwgMCwgMCwgMCwgNjQ1ODIsIDAsIAotICAgIDczNzk0LCAwLCA4MDIyLCAwLCAxMjA0NjIsIDc0MTA2LCAxMjQxMywgOTQwNjksIDkxNzk5NCwgOTE3OTkzLCA5MTc5OTUsIAotICAgIDU1NzAsIDE4ODEsIDcyMTAsIDAsIDEwMTIsIDQzNzUyLCAwLCAxMjA3MDksIDcyMDgsIDY2NDQyLCA1NTY5LCA5ODMyMzYsIAotICAgIDQyMzM5LCAwLCA2MDYzLCAwLCA3ODM4MywgMTE5NTk0LCA2MDUzLCA2NTYwMiwgMCwgOTIyMDEsIDY0NzI3LCA5MTYwLCAKLSAgICAxOTQ4MjcsIDAsIDAsIDkyMTgwLCAxMDUwMywgMTE4ODEwLCA2MDU1LCAzODcwLCA0Mjc5LCA4NDkwLCAxMjAxMTQsIDQzMTksIAotICAgIDY0Nzg2LCA4NjAyLCAxMjAxMTAsIDExMzI2LCA5MjIwNCwgOTgzMTE2LCAwLCAxMjAxMTksIDc4MzMzLCAxMjAxMTcsIAotICAgIDEyMDExOCwgMTIwMDk5LCAxMjAxMDAsIDY1MDg3LCA1NTcxLCAzNjc0LCA5NzQwLCA5MTIxLCA1NTY4LCAxMjAxMDcsIAotICAgIDEyMDEwOCwgNDIwODUsIDEwMTA3LCA0MjE1OSwgNDI4NzAsIDEyMDEwMSwgNTg5LCA3MDUwLCA5ODM3OTEsIDQzMjgxLCAKLSAgICAxMDIzMywgNDEyNjMsIDY2MjUxLCA2NTcyOSwgNjYyNTMsIDEyNjQ5NywgNzQwOTksIDQyNjQ1LCAwLCAxOTQ4MTUsIDg1ODMsIAotICAgIDAsIDU4NDcsIDY5MjgsIDEyODA3NCwgMCwgMCwgMCwgMCwgNjY1OTIsIDEyMjA0LCA5MTc5NjIsIDE5OTY2LCA3Nzg1NiwgCi0gICAgNDI1NjEsIDEyMDYyNiwgOTgzMjQ1LCAwLCA4MTIwLCAxMjA3MDEsIDAsIDAsIDEyODAxMiwgNDEwNjMsIDAsIDEwNjY0LCAwLCAKLSAgICA4MzY5LCAwLCA0NTUxLCAxOTQ5NjQsIDMzNjksIDAsIDAsIDk2NzMsIDY2MzM0LCA2NTU4MCwgMTA0NzgsIDExODk2MCwgCi0gICAgMTI1MTcsIDU1NywgOTQ1NywgMTIwMzQsIDk4MzY2MiwgNjM1NSwgMTI1MTksIDQxMDA0LCAwLCAxOTUwMjUsIDc0MDk0LCAwLCAKLSAgICAwLCA3Nzk3MCwgOTgzNTYwLCAwLCAxMjgxNzUsIDEyMTExLCAzOTI3LCAwLCAxMjUxNSwgMTQ3NCwgNjc4OTMsIDU0OTIsIAotICAgIDY5MjMsIDkyMjgxLCAxMDQ0MSwgNzM4MzYsIDAsIDQzOTkwLCA1NDkzLCAwLCA3NDMxOSwgMCwgNjY2MzUsIDEyMDE5LCAwLCAKLSAgICAxNjE4LCAwLCAxMjA0NzQsIDk2NDUsIDEwNDMwLCA5MTc5NTksIDU4NTMsIDEzMDYzLCAxMDM2MywgMCwgMTI5NTYsIAotICAgIDEyODE2OSwgMTIwNzI5LCAxMTMxNCwgOTE3NTgyLCAxMjA2MCwgMCwgNzgzOTIsIDEyODI2LCA2MzI5LCAwLCAxMDUxNCwgCi0gICAgNjU1MTcsIDc0Mzk1LCAyNzA3LCA4MzA5LCAwLCAxMjcwNTQsIDc4Mzk4LCA0MzU3MCwgMjY5NywgNDM0MjAsIDc4Mzk2LCAKLSAgICAxMjcwNTcsIDI2OTUsIDQyMTcxLCAwLCAwLCAwLCA2NzYxNywgMTE4OTcxLCAwLCAyNjkzLCAxMjEyNSwgMTI3NjYsIDAsIAotICAgIDExNjQsIDEyODgxNywgMCwgNDE5MTgsIDk4MzE2OCwgMTI3NTQyLCA4Njg3LCA2NjAwOSwgMTIxNzgsIDcwNTMsIDEyODAwMSwgCi0gICAgNzQ2OSwgMCwgNTI0OCwgMTIyMTgsIDEyMDUzOCwgNjQyNywgNDI4ODQsIDQxMTIzLCAwLCAwLCA0Mjg3MywgNDExMjYsIAotICAgIDk5OTEsIDQxMTI4LCA3NDM3MSwgMTI3MDMxLCAwLCA5ODczLCAwLCA0Mjg3NywgNzk5NCwgNjQ3NjIsIDIwNTMsIDQyODQzLCAKLSAgICA2NTkxLCA5MzQwLCAwLCAxNTg5LCAwLCAyOTYsIDc0NDM4LCA3ODg1MiwgMCwgNjc4NDEsIDc0MzcwLCAwLCA4OTIyLCAKLSAgICAxMjgwNjgsIDc0NjAwLCAxMjcwMCwgNzQ4MzYsIDAsIDEyNTc5LCAwLCAxMjU3NSwgNjQxNiwgNTY1NiwgMjg5MSwgMTMyNjIsIAotICAgIDY1NTkwLCA1Mjk5LCAwLCAxMTQ3MywgNTQ0OSwgMTI1MiwgMCwgNzg0MDQsIDQxNDMxLCA3NDM2OSwgNjUzNzMsIDUyOTUsIAotICAgIDkxNzU2OSwgNzQxMTQsIDEyMjMsIDE2NDIsIDE3NCwgNzgzOTksIDg4MywgNDE2MSwgMTI2OTEsIDQyNjAzLCA0MTQxMywgCi0gICAgMzIxMiwgNDE0NTksIDMyMTEsIDc0ODEwLCA0MTQyNSwgMTI3MDI5LCA3ODQxMiwgNzQ0NTAsIDk3MjgsIDM4NDYsIDgwNzAsIAotICAgIDYxNTAsIDY2MzYsIDQzNzAsIDAsIDAsIDc0MTc4LCA3NDU4NywgNzQxMTcsIDAsIDAsIDAsIDQ5ODYsIDEyMTg5LCAwLCAKLSAgICA2NzY0OCwgMTIwNDk5LCA5NDAwMSwgNDI1NywgMTIxMDQsIDc3OTQyLCA2MjIwLCA5MDA0LCA2NTU2MSwgMCwgNzc5NDksIDAsIAotICAgIDY4MTM1LCA5MTc1NzYsIDc3OTQ2LCAwLCA2OTY3OSwgNjk2ODQsIDk4OTAsIDc4NTYxLCAxMjk3MSwgNzg0NTMsIDkyNTU2LCAKLSAgICA3Mzg5OCwgMTE5NzksIDcwMDUxLCAxMTg5MDAsIDkxNzg5NCwgMCwgOTYzNSwgMTI2MDAsIDg4NzEsIDAsIDAsIDAsIDY0NjksIAotICAgIDc0MjI3LCAwLCA2NTMwNCwgNDY3OSwgMTAyMzAsIDY0MzAwLCA2NDg2NywgMzQyNywgNDI0MCwgMCwgMCwgMCwgMCwgCi0gICAgNDI5MTYsIDAsIDAsIDAsIDcyODIsIDc4NzI4LCA2NTczMywgNDQ0NSwgMTI3MTM4LCAxMjgwODIsIDM0OTQsIDc0NjA2LCAKLSAgICA2NTU1LCAwLCA3Nzk3NiwgMCwgMCwgNzg1NjYsIDAsIDk4MzE4OSwgNjU4OTgsIDk4MzIzOCwgNjUzMTIsIDU0NDcsIDAsIAotICAgIDEyODk1LCA2NTU5MywgNDAxMCwgMCwgNDExMDYsIDAsIDY0NDQ4LCAwLCA0MTEwNSwgMCwgNjU4MjAsIDYyMzIsIDAsIAotICAgIDEyODI4MCwgMCwgNDM2MDgsIDExOTA5MSwgMCwgNjUzOCwgNDMzNSwgNzgzNjQsIDM5NDEsIDQxMTIyLCAxMTA2MSwgCi0gICAgNzgzNjMsIDY0ODkyLCA5MTEzLCAxOTU0LCAxMjE1NSwgOTgzNjY1LCA0Mjg3OCwgMTE1MDAsIDAsIDAsIDc0NTc4LCAwLCAKLSAgICA2NTgzMiwgMCwgMCwgMCwgNzc5NzUsIDExOTIzMCwgNDU4NiwgMCwgMzUwLCAxMDk1MSwgMCwgNTA5LCAwLCAwLCA5MjMwNywgCi0gICAgMCwgMCwgNTEzMywgMCwgMCwgOTUwMCwgMCwgNDk1NywgNjQ3NDEsIDI0MjIsIDIyMTIsIDk4MzA4MCwgMCwgMCwgMjQ5NiwgCi0gICAgMTE1MTYsIDk0NCwgMTE4ODUxLCAzODkwLCAxMjE2OCwgMTQzOCwgMCwgOTgzMTE3LCAwLCA0MTk0NywgMTIyMCwgMTIwODI4LCAKLSAgICAxMjg1NTUsIDAsIDAsIDE1NzEsIDQyNjMwLCA0MTk0OSwgNDI4MDUsIDgyNzAsIDk0MywgNTY0LCAwLCAzMTIsIDQxOTgwLCAKLSAgICA5ODM5MzUsIDAsIDc4MTIwLCA4ODc3LCAyNjksIDQ0MjksIDYyNzIsIDk2MTcsIDE0NjAsIDY5NTQsIDc4NjU3LCA0MTEyMCwgCi0gICAgNjUxMjEsIDEwODYyLCA2MDYwLCA0MTExOSwgNDE0MTYsIDc0MzU1LCA0MTczLCAwLCAwLCAwLCAxOTA2LCA5MTc5ODYsIAotICAgIDExNTMyLCA3NDA3MywgMTI3MzM4LCAwLCAxOTg1LCA2Mjk2LCA5NTgyLCA5MTc4OTUsIDY0Mjg3LCAwLCA3ODExNSwgCi0gICAgMTE0MjgsIDE3MzAsIDI0NTcsIDkxNzgwOCwgMTk5MTgsIDEwNDY5LCAwLCAwLCA3NzAzLCA4ODQwLCA4MDM1LCAwLCAwLCAKLSAgICA5MjIzMCwgMCwgNjEyOSwgMCwgMTI4NTI4LCAxMjgyNjgsIDAsIDc4NzQsIDg2ODEsIDExOTA5MiwgMCwgMTMxMzYsIDAsIDAsIAotICAgIDcwMTAyLCA2Mzg4NiwgMTE4ODgxLCA5NjA1LCA3MTMwOCwgMTMyMjAsIDEyODc3NiwgMTIwMjc0LCA1NTE0LCAwLCA5MjI4LCAKLSAgICAwLCAwLCAwLCA1MjQwLCA5ODExLCAxMDAxMiwgMzA5NiwgMCwgMCwgOTgzMzQzLCA2NjY3NiwgNjU4NzMsIDAsIDAsIDAsIAotICAgIDk1MDEsIDAsIDEyNzIsIDY0NTM2LCA2NTQ2NSwgNjQ2NTQsIDc0NjcsIDAsIDE0NjcsIDEwMTU4LCAxMDA0MCwgMCwgOTUxOSwgCi0gICAgMCwgOTE3ODEyLCAwLCAxMTg4OTksIDEyMTkzLCAwLCAwLCAwLCAwLCA5ODMzNDUsIDE5OTM1LCAwLCA5MjE2MiwgNjk2NzYsIAotICAgIDAsIDAsIDAsIDUyNzUsIDAsIDAsIDg2MzcsIDAsIDAsIDM3ODksIDYzODgwLCAxMTQ3MSwgNDM1NTQsIDY1ODYyLCAxMTQ3NCwgCi0gICAgNjYzMzIsIDY2NjAzLCAxMjgxMzgsIDI0MjYsIDEyMDQyLCA5MjE5NCwgOTgzOTAyLCA5NTM3LCAzOTYxLCAxMjExNSwgCi0gICAgNzc5NTMsIDI2MDUsIDQ1MDAsIDY0NTYxLCA1NTIyNCwgNDk4MSwgMCwgMCwgNjM4NzYsIDExNjY3LCA0MjY4NiwgNzc5NzMsIAotICAgIDQyMzYyLCA2NDY4NiwgNDQ5OSwgNDE2NDksIDc1ODksIDAsIDAsIDMyMzcsIDAsIDY4MjE1LCA5MTc5MDQsIDg1NDEsIAotICAgIDc4Mjk4LCA3MDAzNCwgNDE4NjYsIDAsIDAsIDAsIDAsIDY5OTI0LCA0MzU1NSwgMjgyMywgOTU1OSwgMTAwNjAsIDQxOTQwLCAKLSAgICA4Mjk5LCA0MTk0NSwgNzEzMiwgNDE5NDEsIDMzMDgsIDcxOTAsIDY0ODgwLCA4NjE0LCA2NTIyMCwgNDE0OTMsIDAsIAotICAgIDQxNjk5LCAxMDc2MiwgNDM3ODAsIDEyOTk5LCAwLCAwLCA4MTA2LCA0MTI4LCAwLCA2Mjc0LCA0NDk0LCAwLCA0MDEyLCAKLSAgICAxMDM5NSwgOTgzNTkxLCA0MzYzMywgNjU0NDcsIDEyNjUxMSwgMCwgMTEwMDQsIDY5NSwgNzM5LCA2OTYsIDc2MTEsIDAsIAotICAgIDQyNzU1LCA3NDgwMiwgOTIyNywgNzUwNiwgNzUxMCwgNjk5MzcsIDY5MSwgNzM4LCA3NTExLCA3NTEyLCA3NTE1LCAzODY4LCAKLSAgICA2ODgsIDQxODQ3LCA2OTAsIDI1NDgsIDczNywgOTc0LCA4MDAzLCA3NDA2LCA5MTc5MTEsIDAsIDEyODY4OCwgMzk4NSwgCi0gICAgOTE3OTEyLCA2NTg2MCwgNjM5MjEsIDcwNTEsIDY5Nzc3LCA0NjgyLCA5MTc4MDUsIDEyODA5LCA2NDA2LCA0Njg1LCAKLSAgICA5MjUwNSwgMTA4NzksIDEwMzQ3LCA0NjgwLCA2MzQxLCAwLCAzODUxLCA4MTMyLCA3NDMyNSwgMCwgOTE3OTA3LCAwLCAKLSAgICA0MTk1OCwgMTE5MTc2LCA5MTc5MDgsIDAsIDAsIDQyNjU3LCA5MjQ2OCwgNzY0MywgNDIzNzMsIDExNzE0LCA2NzU4NywgCi0gICAgNDM1NjgsIDk4MzE3NSwgMTE3MTcsIDc2NTAsIDEwNTk0LCA2NDk1MSwgNzY0NywgNzY0OSwgMTI4MTU1LCA3NjQ2LCAwLCAKLSAgICA3ODA4MiwgOTY1MSwgMCwgMzg5MSwgMCwgMCwgMjMzNywgMTczNSwgNzQzMjQsIDY3ODYwLCAyMzYzLCA5ODMxMzUsIDAsIAotICAgIDQzNTYxLCAwLCAwLCA3NDE0NiwgMTg2MCwgNzQ5NSwgNzU4MCwgNTgxMiwgNzQ5NywgNzU4NCwgMTE5MTQwLCAxMjc4NTMsIAotICAgIDAsIDEyMDM0NywgNzcyNywgMCwgODQ5OCwgNjk4MTgsIDg5NDksIDMwNjUsIDQyNzE5LCA3MTM1LCAxNTY5LCA5MjM3NSwgCi0gICAgMTI1MzQsIDEyMTI0LCA3NjkwLCAwLCAxMjUzMywgOTgzODcwLCA2NDE4LCA0NTQzLCA3ODA4NiwgNjk2OSwgMCwgNzQ4MDAsIAotICAgIDAsIDY3OTc0LCAxMTk4MCwgMTI4NjUwLCA5ODM3OTIsIDYzODk0LCAxMjA3NjAsIDEyMjgyLCA2NjE5MiwgMCwgNzQ1OTIsIAotICAgIDg4NTAsIDc0Mjc1LCA5MjM4LCAxMDYxNywgOTE3NTQ1LCAwLCA5MjYyNSwgMCwgMTI3OTEsIDAsIDAsIDEyNzg0MywgNDQ0NywgCi0gICAgNzM3MzIsIDEyNzkzLCAxMjkwMCwgOTIzNzcsIDEwOTUwLCAwLCA3ODA4NywgMTI3OTAsIDQxNDAwLCAxMTkxMjgsIDY2NjA3LCAKLSAgICAxMjc5MiwgNDIyMzIsIDE5NDkzOCwgMTc0NCwgMTI3ODksIDEwMzY2LCAxMjMxNywgNDEzMTAsIDk4Mzg2MCwgNDEzOTksIDAsIAotICAgIDAsIDU1MjU4LCAwLCAxMjY5MCwgMCwgMCwgNDM2NzIsIDEyNzg0MCwgNDE2NTIsIDI5NzQsIDkwMTAsIDExMzE1LCAwLCAKLSAgICAyNzgsIDAsIDQxNDA1LCAxMTkyNTQsIDAsIDEwMDc3LCA2Mzg1MywgNzQ1NTcsIDQyNTg2LCAwLCAwLCA2MDAyLCAwLCAKLSAgICA0MzU1MywgMCwgNjc5MDMsIDAsIDEyNzg3LCA0MTMwOCwgNzkzNCwgNjUzMDYsIDAsIDAsIDAsIDg2NDYsIDk4MzE4NiwgCi0gICAgNzc4MjksIDcxMzYwLCAwLCA2NDEzLCA2NTUwLCAwLCAxOTQwLCAwLCA0MzYzNywgMjIwLCA2NTE5MywgNDM1NTEsIDEwNjc4LCAKLSAgICAxMDA0NCwgMTI4MzIyLCAwLCAwLCA2ODY1OSwgNjQwMywgNTcwNywgMTAzOTMsIDEyNzUzMiwgMCwgNjY2MTQsIDAsIDAsIDAsIAotICAgIDEwMjk3LCAwLCAzNzQyLCAwLCAzOTU5LCAwLCAwLCAwLCAyNDY3LCAwLCA2MDAzLCA2Mzg0NCwgNjY2MywgODA0MCwgMCwgCi0gICAgNDM3NTgsIDQxODIsIDc4MTcxLCA0Njc2LCAxMjA1MDEsIDAsIDAsIDI1MTAsIDAsIDEwMjA4LCA3ODE2OCwgOTIzNjEsIAotICAgIDExNTQwLCA0MzU0NiwgNjY5MiwgMCwgNDEwNjAsIDAsIDQ2NjgsIDkwODMsIDAsIDAsIDc4MTQ0LCAxNTU5LCA2MzgzMSwgCi0gICAgOTY3NywgMTIwMjYwLCAwLCA2NTI1NiwgMCwgNzQwNzAsIDAsIDAsIDM2NSwgMTIwNTYsIDQzMDI3LCAxMjA0MjMsIDQxNzE2LCAKLSAgICAxMjgyMzYsIDAsIDEyMDQ3MiwgNTUxNiwgMjg0NSwgNzcxNywgODAzNiwgNDE3MTcsIDczODI3LCA1NDQsIDEyMDQ1LCAKLSAgICA2Mjc4LCAwLCA1NTE1LCAwLCAwLCA5ODMwNTEsIDY1MzM5LCA0MzIyMSwgMjIxMSwgMCwgNTUxNywgMCwgMCwgNzQ4NDEsIAotICAgIDY3ODg0LCAwLCA2Nzg5MCwgNjc4ODUsIDY3ODgwLCA2Nzg4MSwgNjc4ODIsIDY3ODgzLCAwLCAwLCA2Nzg3OSwgMTI3MTg4LCAKLSAgICAxOTAyLCA2Nzg4NywgOTYzOCwgMTI5NzYsIDEyNjU0NiwgMTI0ODMsIDEyMzY4LCA0MTc2OSwgNDI3MjYsIDQxNzY1LCAKLSAgICA3MzYxLCA2NjY3LCA2Nzg3NCwgNzU1NiwgNjc4NzgsIDc0MzUxLCAxMTI2NCwgOTg5LCA0MjY3NywgNjc4ODksIDAsIDEzMTEsIAotICAgIDkxNzk2NiwgNDMyNiwgMTEwMDAsIDYzODI0LCAxMzA2OCwgMTA5MzIsIDEyODg4MCwgNjkxNywgNzgxNTUsIDAsIDk0OSwgCi0gICAgNzgxNjIsIDAsIDYxNDgsIDg2MDUsIDQyMjUzLCA3ODE3NywgMCwgMCwgNDI3MTUsIDAsIDAsIDAsIDYzODcxLCAwLCAKLSAgICA0MTc5NiwgMTI2OSwgNjUzMCwgMCwgNjUwNTcsIDAsIDUxNDQsIDEyMjIxLCA0MjcxNiwgMCwgNDQzMSwgNDMzMSwgCi0gICAgOTgzNzIwLCAxMjg2NzUsIDQxODM0LCA1Mjc5LCAwLCAxMDMzNiwgODMxMiwgMCwgNDI3MDEsIDEyODgyNSwgMCwgNzgxNjUsIAotICAgIDY2MDM2LCAwLCAwLCA2NDI4LCA0MjI3MCwgMCwgOTgzNTk2LCA0MzA1OSwgNDI2NjYsIDUyNTYsIDEwNjcsIDI1NSwgCi0gICAgMTIxMzEsIDk4MzcxMywgOTQ5MywgOTgzOTU5LCA0MTAxNCwgMTE3OTMsIDE5NDkyMCwgMCwgNzQzOTQsIDQzNDYwLCAKLSAgICAxMDY1MywgNDI3MjMsIDk4Mzg0NSwgMTE5NjMyLCAwLCA2NTYwLCA3MDE2LCA3NDI3NCwgOTgzNjE1LCA0MzU1NiwgMzkyOSwgCi0gICAgNjc5NzcsIDY2MTQsIDI3NjgsIDkyNTA0LCA5NzQ2LCA1MTM1LCAxMTgxMSwgMTI3OTYsIDExOTUzLCAwLCA2OTc2MSwgCi0gICAgNTEzOSwgMzQ2LCA3NDMwMywgNjMwNSwgMTI3OTUsIDQ2NzUsIDUxNjgsIDc4NTUyLCAxMjc3NTMsIDc0MzE1LCA3NDM2MSwgCi0gICAgODI1MywgODgxNywgMTEzNiwgMCwgNDM1NjMsIDkyMjMyLCAwLCAxOTQ3NTAsIDczOTIsIDgyMzAsIDkzNjUsIDAsIDAsIAotICAgIDk4MzYwNywgMCwgMCwgNDA0MSwgMCwgMjM1NywgNDMyNDAsIDEyNzg2LCAyMjksIDExOTg4NSwgMTE5ODg0LCA0NDAwNCwgCi0gICAgNzE0MiwgMTE5ODgxLCAxMjM1MCwgNjU1NTQsIDExOTg4MiwgMTE5ODc3LCAxMTk4NzYsIDEyNzg1LCA2Mzg2MywgNDM3OTUsIAotICAgIDc3NzAsIDEwNzEyLCA2NDg1MywgMTI2ODYsIDExODkxNiwgNDIzNzUsIDAsIDEyNzIzOCwgNjYzNTIsIDEwNDcwLCAwLCAKLSAgICAxMTA1OSwgMTA3OTEsIDkxNzk0NCwgNDUwLCAxMTkzMjgsIDAsIDEwNDMyLCAxMjA5NywgNTQ1MCwgNjQ2OTEsIDEyMzMsIDAsIAotICAgIDQ0MDA5LCA3ODI4NCwgNjYzMzgsIDAsIDAsIDE4MzksIDExODc5OSwgOTgzMjE3LCAxMDkyNywgMTcwMSwgOTgzNjU1LCAKLSAgICAyMzg4LCA0MTc0OSwgNDE3NjEsIDU0NTMsIDgzNjEsIDExOTg2NSwgNDE3NTgsIDU0NDQsIDQxNzYzLCA2NDg4OSwgNzE0MywgCi0gICAgOTI0OTMsIDc4Njc3LCAwLCA5MjQyOSwgNzgxNzQsIDY2NDMyLCA4ODAxLCAzMDUzLCA0MzQwLCA5ODMwNDQsIDAsIDY1ODEyLCAKLSAgICA5MTc4MzEsIDAsIDQxODI0LCA2Nzk4NSwgMTIwMjAzLCAxOTQ4MDAsIDE5NDgwMywgNDI3MDAsIDE5NDgwNSwgMTI3OTgwLCAKLSAgICAxOTQ4MDcsIDc4Njc2LCA5MjM1NiwgMTk0ODA4LCAwLCAwLCA0NDkzLCA0MzM2LCAwLCAyMzE0LCA0MzYwMiwgNzg4MjYsIAotICAgIDExOTMyNSwgMTk0ODExLCA0MjQzOSwgNjQ2MzgsIDQyMzI3LCA0MzUyOCwgNDQ4OSwgNzEzMzEsIDAsIDE5NDc5MywgMTkxMiwgCi0gICAgNDIzODUsIDEwMzA2LCAxMDM3MCwgMCwgMCwgODg2NywgMTAyNTAsIDEwMjU4LCAyNzEyLCAxNjM1LCA3ODgyMSwgMTQxMCwgCi0gICAgOTI2NzEsIDk4MzI0NCwgMTE4ODc4LCAwLCAwLCA5OTE5LCAxMjA1MjgsIDU1OSwgMTI4MTU3LCA0MTgyNSwgMTI3OTc1LCAKLSAgICA3ODE4OCwgNDg5MiwgNzQwMTYsIDE5NDc4MSwgNjU0MiwgNDE5NTcsIDEyODg2NSwgNTc3NywgMCwgNzU5LCA2NTc0OSwgCi0gICAgMjA3OSwgNjUyNDgsIDEyNzg4LCA2NDQ4NywgNjQ1NTIsIDAsIDEwMjIzLCA0MjA2MiwgMCwgMCwgMTI2NTczLCAzNjY4LCAKLSAgICA2NTc1NCwgNDM1NjAsIDEyMjI2LCA2Nzk5MSwgNjUxNDksIDIzNDAsIDQxOTU5LCAxOTQ3ODYsIDE5NDc4NSwgMTk0Nzg4LCAKLSAgICA0MzYxOCwgNjU3NDcsIDEwOTM3LCAyOTYyLCAwLCAyMzIxLCAzNTg3LCA2NTc0NSwgOTI0MzYsIDg5MjEsIDk5NTIsIDAsIDAsIAotICAgIDQyNzE0LCA5OTUxLCA0MzQwOSwgMTk0NzcwLCAyOTQ5LCA2NjAxMiwgMTk0Nzc1LCAxOTQ3NzQsIDI5NTgsIDY4MzU5LCAKLSAgICA0MTgyMCwgMjMwMCwgMjM5NSwgMTI4NTYzLCA5OTc2LCAxMjAwNDMsIDEyMDA1MCwgMTIwMDU4LCA2ODIyMCwgMTI4MTQzLCAKLSAgICA0MjgwOSwgNDI4MDcsIDAsIDEyMDA0NiwgMTAxOTgsIDQxNTAsIDY0MzcxLCA4MzE4LCA0MTc5MCwgNjc5NzYsIDQxODk4LCAKLSAgICAyMzYwLCA0MTc5NCwgOTE3OTQyLCA3MTMxNCwgMTI3ODE4LCAwLCAwLCAyNDE4LCA5ODMwOTgsIDI0MTEsIDExMzM2LCA3OTksIAotICAgIDYzODIzLCAxMDI3NiwgMTAzMDgsIDEwMzcyLCA5MTc1NDEsIDQxNzcyLCA0MjgxMywgMjMxNywgMTAyNjAsIDExODk4MCwgCi0gICAgNTUyODQsIDkyMjAzLCAwLCAxMDM4NCwgOTgzMjE4LCAwLCAwLCA3NzUzLCAyMzUxLCA2NjU1LCA2NDQ4OSwgNjk5MzEsIDAsIAotICAgIDc3ODcyLCA0NDQzLCA0Mjc3OSwgMjMwLCAwLCAwLCA0MzU0OSwgNDg1NSwgNDIxNTAsIDY1NzM5LCA1NDQxLCA0MTg5NiwgCi0gICAgMTAyODgsIDEwMzIwLCAwLCA4NTUsIDcwNDYsIDYxMDksIDY1MDQ1LCA2MzgzOSwgNzgxOTgsIDIwNDksIDEwMDk4LCAwLCAKLSAgICA3NDE0NSwgMTI3OTQzLCAxMDI2NCwgMTAyODAsIDkxODQsIDEwMzc2LCA3MDEzLCA0NDY3LCAwLCAwLCAwLCA0MTg4NywgMCwgCi0gICAgNDg2MiwgOTczNSwgNjUzNywgMTIwNTkxLCA3NDI4NiwgMzkxNCwgOTIxNzgsIDkzOTc2LCA5MDY1LCAxMjk2MSwgMCwgMCwgCi0gICAgOTIyNTMsIDAsIDI4OSwgMCwgNDY5NCwgMTE0MjAsIDQ2OTAsIDAsIDEyMDUxNCwgOTE3OTc4LCA0NjkzLCA3Mzg5MywgCi0gICAgNDI3MjQsIDAsIDQ2ODgsIDEyMDQ1NCwgMCwgMCwgNjc5OTQsIDgyMzgsIDMxMTAsIDEyMDE2MiwgOTgzODk5LCAxMjAxNjMsIAotICAgIDY1MjgsIDEyNzU1MywgNDMwMzUsIDY5ODk4LCAyMTgsIDAsIDE1MjAsIDAsIDQ3ODYsIDAsIDQzMjI1LCA0NjAyLCAwLCAKLSAgICA3ODE2NywgMTAwODgsIDY1NDgsIDAsIDEyMDE1NiwgNDM5NzgsIDg5ODgsIDg4ODgsIDAsIDAsIDAsIDAsIDEwNjY2LCAwLCAKLSAgICA3MzkwMiwgNjk3NDAsIDAsIDAsIDk5NzUsIDEyODAzOSwgMTE5OTAyLCA0Njg5LCA4OTMyLCAwLCA2NTU2MCwgMTE5MjA5LCAKLSAgICA3NDQ0MSwgNzg4MTAsIDAsIDAsIDY3OTg3LCAwLCAwLCAwLCA2Nzk4OSwgMCwgMTAwNjUsIDgyMDcsIDAsIDkyNjEzLCAKLSAgICAxMjgwMTEsIDAsIDY2MiwgMCwgOTI0NCwgMTk0ODYzLCAwLCAxMTkyNjEsIDk4MzQyMCwgMCwgMCwgMCwgNDE5MjksIDAsIDAsIAotICAgIDY2Njc0LCA0MTkyNiwgMTIwNDA4LCAxMjA0NDMsIDEwNTEzLCA2NDYzNywgMTk0ODYyLCA2ODAxMywgNTIsIDEzMTE4LCAKLSAgICA2NDc1LCAwLCAxMjAzNDEsIDEyMDk1LCAxMDIyNSwgNDgxMiwgOTI1NzgsIDAsIDY3OTkyLCA3NDA4NSwgMCwgMzk3OCwgMCwgCi0gICAgOTE3OTQ1LCAxMjc4MjMsIDExNTgyLCAxMjA3NjEsIDEyMjgxLCAwLCA2NTQ0LCAxMzI0MSwgOTM5NjEsIDY5NzgyLCAKLSAgICAxMjg1NTcsIDE5NDg2MCwgMTE3NjUsIDY1MjU4LCAxMDM2OSwgMCwgMTU4NSwgNzE5MiwgMTAyNDksIDQyMiwgMTUwMCwgCi0gICAgMjAzNiwgOTg2LCAxOTQ4NTksIDY0Mzk0LCA1NzgxLCA1NTk5LCA2NDI5NCwgMjQ5NCwgMTIwNDUwLCA0ODYxLCA3NDAyMSwgCi0gICAgNjQzMzQsIDc4MjAzLCAxMjc4MDgsIDAsIDkyMjY2LCA2NTEwMiwgODk2MSwgNjU4NDIsIDEwMjQzLCAxMDI0NSwgNzQxOTEsIAotICAgIDEyMDQxMCwgMCwgMTIwNDUzLCA2NDgyMSwgOTQ3OCwgMjUwOCwgOTI2ODMsIDAsIDIwMiwgMTI4MjQ2LCA3NDEzMSwgMTI0MiwgCi0gICAgNjU1MTQsIDAsIDYzOTQwLCAxMjg3MDYsIDY0NTMzLCAxMjAxMjksIDAsIDY3ODQyLCAxMTk5MCwgOTI0MzAsIDYzOTM5LCAKLSAgICA0MzM3NSwgNjU0NDAsIDI1MDQsIDAsIDc4NjcxLCA2NDgyOSwgOTgzOTAxLCA2OTQzLCA5MTc5MzQsIDU4NTksIDAsIDI4NTgsIAotICAgIDk4MzM1MywgNzQyOTQsIDk4MzkwNSwgNjkyMzksIDAsIDExOTAyNywgMTI5OTIsIDI3NTMsIDE5MzYsIDcwMDc4LCA5MjU3NCwgCisgICAgMTk0NjA5LCAwLCA4Mjk1LCA2ODUsIDkwMjUsIDE1MjQsIDEyNjE4LCAwLCA1NTM5LCAwLCA5MjUyMywgMTIwMTAyLCA3MTM4LCAKKyAgICAxMjA1NTIsIDAsIDE5NDYxMSwgNzg3NTIsIDAsIDEyNTIwLCA4MDU4LCA5NzMyLCAwLCA1MDgwLCA2NDc3NSwgNTAzNiwgCisgICAgNTAzNSwgMTIwNTkwLCA0MjYwNCwgOTgzNjU2LCAwLCA4MDc0LCAyNzUsIDEzMjkxLCAxOTA3LCA3ODgzOCwgNDQzMiwgCisgICAgMTI3MjcxLCA1MDMzLCAxMjcyNzMsIDEyNzI3MiwgNDgzNiwgMzg4OCwgNzM3OTIsIDEwNzI5LCA2NDU0NiwgMTI3MjYyLCAKKyAgICA0MzcwNCwgMTI3MjY0LCAxMjcyNTEsIDY3NTg4LCAxMTkwMDAsIDEyNzI1MiwgMTI3MjU1LCA4ODU4LCA2NDA5LCAxMjcyNTYsIAorICAgIDEyMDI1MiwgMTI4MTAwLCAwLCAwLCA2NjMyMSwgMCwgMTI4MTQsIDEyNzI0OCwgMzQzMiwgMTAyMTgsIDAsIDYwOTQsIAorICAgIDc2NDEsIDQyNDQ1LCAwLCA5MjQ4NywgNDI0MDYsIDE2NzYsIDc0MzIwLCAxOTQ2MDcsIDk4MzE3NywgNTAzMCwgMCwgMCwgMCwgCisgICAgNzM4NjksIDk2MjIsIDAsIDY5OTQ0LCA2Nzg3LCAwLCAwLCAwLCA5ODM1ODMsIDEwNTQ0LCAxMjkxOSwgMCwgOTIyMTgsIDAsIAorICAgIDAsIDY5OTA2LCAxMjA3ODksIDAsIDk0NywgMTE5ODM1LCAxOTQ1ODYsIDE5NDU4NSwgMTA5NjksIDExOTkzNSwgNzYxMywgCisgICAgOTI1NjIsIDExOTkzNiwgNDc5NSwgMTE5OTMwLCA3MDE4LCA3Mzc2LCAxMjAxODEsIDEyMDE5MiwgMTIwMjY4LCAwLCAKKyAgICA0MzU2NywgNzQwNTYsIDkxNzkxMCwgMTE4MzMsIDExOTkxOSwgNzIxNiwgNjUyMzIsIDcyMTcsIDI1MSwgNzIxOCwgNzg5NSwgCisgICAgNDM5NSwgNDM1MzgsIDExOTkyNiwgMTE5OTI5LCAxMTk5MjgsIDcyMTMsIDExOTkyMiwgNzIxNCwgNzIxNSwgOTgzODM2LCAKKyAgICA3NDE0MSwgODg4MCwgNzY4NSwgNjY0NTksIDEyMDE3MywgNjU1NDAsIDExOTYxOCwgNjI1LCA4MTg3LCA0Mjg2MSwgMTExMywgCisgICAgNzIzNiwgNzkxNSwgMzYzMCwgMTIwMTc2LCA4MTc5LCA3NDI2NCwgNjc4ODYsIDkzMTYsIDEwOTgwLCAyNDg5LCA2NTYyNCwgCisgICAgODE1MCwgMTM1OSwgNjc2NTIsIDEyNzMyOSwgMTI3MzMwLCA3Mzc1NiwgNTA0MiwgNTA0MSwgNDI3NjksIDEyMDg0LCAKKyAgICAxMjczMjQsIDEyNzMyMSwgOTIyNzksIDEyNzMxOSwgMTI3MzIwLCAxMjczMTcsIDEyNzMxOCwgMTI3MzE1LCAxMjI4MywgCisgICAgMTYxNiwgMzc5NSwgMCwgODc5NSwgNjYyNDUsIDAsIDAsIDAsIDExMzgsIDczOTA1LCAxMjY3NywgMCwgMCwgMzIzOSwgCisgICAgMTI3MzExLCAwLCAwLCA4NDMxLCAwLCA0MjE2NCwgMCwgMTE3NzgsIDEyNjIwLCA2ODI2LCA3Mzc3MywgMTE5MDczLCA1MDQwLCAKKyAgICAwLCAwLCA5ODM0NDMsIDc4NDIwLCAwLCA1MDM5LCAwLCA3ODQxOCwgMCwgNTAzOCwgMCwgMCwgMTMxODQsIDc0MjkzLCAwLCAKKyAgICA2NDY0OCwgMCwgOTM1OSwgNzg0MTYsIDAsIDEyODc3MCwgNjUxNTcsIDY2NjIsIDAsIDAsIDM4NjMsIDczOTA5LCA0ODM1LCAKKyAgICA1NTI2NiwgNDM0MzIsIDEyNzgyMiwgNDMwOSwgNzEyNywgMTk0NTY5LCAwLCAxOTQ1NjgsIDEzMDEsIDAsIDQyNTg5LCA1NjksIAorICAgIDAsIDczODEzLCA3MTEsIDQzODksIDcxMzMsIDAsIDczODgwLCAxMTYxMCwgMTEzNjgsIDAsIDE5NDU3MCwgNDEzMzEsIAorICAgIDEwMDYsIDc0MjQwLCAwLCAxNTUwLCA4MjAxLCA3MzczNywgNzYyNywgNTQ5OSwgNTAzMSwgNzc5MDgsIDQyNzM4LCA2NTc4NCwgCisgICAgNzc5MDcsIDY1MjY3LCAzNzU4LCAwLCA2NTc4MSwgNjQ3MzQsIDcwMDczLCAyNDQwLCA2NTc4MCwgNzc5MTMsIDg0NDksIDAsIAorICAgIDUwMDgsIDk4MzU3MiwgMjExOCwgMCwgMTIxMjEsIDgyNTUsIDU1MTIsIDczODc1LCAyMTI4LCAyMTMwLCAyMTMxLCAyMTI2LCAKKyAgICAyMTMzLCAxMTE5LCAxMjcwNjgsIDIxMTQsIDIxMTYsIDI0NTUsIDAsIDIxMjIsIDIxMjMsIDIxMjQsIDIxMjUsIDEyNzQ4NiwgCisgICAgODcxNCwgOTgzODIwLCAyMTEzLCAwLCAyMTE1LCAxMjgxNzcsIDEyNzkwNywgNDM3MTMsIDUwNTIsIDY2MjIwLCA1ODIxLCAKKyAgICA2MTg2LCA2NTc3OCwgNjU3NzUsIDUwNTEsIDY1NzczLCAxNDI5LCA0MjY0NywgNTA1MCwgMzAyLCAzODgsIDQxMTE1LCA3MzUsIAorICAgIDY2MzcsIDU5MDcsIDY1MDg4LCAwLCAxMjcyNiwgNzQ1OTQsIDkxMTcsIDk4MzE4MSwgMTIwMDMsIDU1MTMsIDY2NjYsIAorICAgIDUwNTMsIDc0MjMwLCA1NTEwLCA3ODQ1MSwgMCwgNzg0NDcsIDI0NzAsIDc4NDM3LCAwLCAxOTI1LCAwLCA5MjIzNywgCisgICAgNzQ4MDcsIDAsIDUwNDgsIDUwNDcsIDAsIDAsIDAsIDkyMzEzLCAwLCA3NDQ5NywgOTIzOTUsIDgwODksIDY5MjksIDYzOSwgCisgICAgOTgzNTYzLCA2ODE3OSwgNjQ0NDIsIDAsIDkyMzQ4LCA0NTk5LCA0MTQwMiwgNjY3NCwgNDMzOTcsIDQzMjk0LCAxNDc2LCAKKyAgICA2NDgsIDAsIDY1ODE5LCAzMjMzLCAwLCA0MTc4MiwgNjk1MSwgOTQwMTcsIDk4Mzk3NiwgMzUzMCwgOTc1MCwgMTI4MzE3LCAKKyAgICAwLCA2NjU2LCA0MjYxOCwgMCwgNTA0NiwgODUxMiwgNjU4NTYsIDc0MjYxLCA4OTY3LCAwLCA1MDQ1LCA0MjAyNiwgMTkxNiwgCisgICAgNzk4NiwgNTA0NCwgMTIwNTU2LCA5MDA2LCAxMzEyOCwgNTA0MywgMCwgNzg1MywgNzQwNjgsIDc0MDA0LCA5NjY5LCAKKyAgICAxMjM0MSwgMTI3MDMsIDg0MDIsIDAsIDExOTA3MCwgOTE3NjAwLCA0MTc1MCwgMzU4NiwgNjQ1MDgsIDQzMTQ4LCAwLCAwLCAKKyAgICAxMTk2MDYsIDY3OTgzLCAxMzI5NiwgNTE3LCAwLCAxMjg1MzQsIDE5NDk0NiwgNDE1MjgsIDEyMywgNjU0NTQsIDAsIDAsIAorICAgIDc0NDc4LCAxMDUzMSwgNzc4NCwgNDE1MjYsIDEwODI5LCA3Mzk5MSwgODA1NywgMTEyNiwgNzM4OTUsIDAsIDE5NDU5MSwgMCwgCisgICAgMzkyNSwgNDI1MSwgODA2OSwgMTA1MTcsIDEyMDQzOSwgNDg5LCAwLCA0MjUwLCAxMjA0NDEsIDEyMDQ1MiwgNDMxNTEsIAorICAgIDk4MzE3OCwgMTk0ODUxLCA2NjIwMCwgMCwgMCwgMCwgNzg0MjMsIDAsIDAsIDg3MTEsIDYxODMsIDAsIDAsIDAsIDEyMDQ0OCwgCisgICAgNzYyMywgMTE4OTI1LCAxMTg4ODksIDkyMzUsIDEyNzYwLCA3NDE3NiwgNjk2NjIsIDY2NDQ1LCA0MzU0MCwgMTAwNjIsIAorICAgIDM3NDMsIDExNTE0LCAxMTA3OCwgMCwgMTIxMzYsIDAsIDEyNjU5NywgMTIwNDM1LCAwLCA3NzI2LCAwLCAxOTkyMiwgMjY3LCAKKyAgICAzMzkzLCA0MjE5OCwgMTM3MSwgMTk0ODQ5LCA2OTIzMywgMjQ1OCwgMCwgNjIwMSwgMCwgNDEwNzQsIDQyNjYsIDEwNjUyLCAKKyAgICA0MTYxMiwgNDEwNzcsIDM0MDIsIDkwNTAsIDMzOTgsIDAsIDk4MzM0OCwgMCwgMzM5MSwgNDEwNzUsIDI0NzYsIDAsIAorICAgIDEyODAxNywgMCwgMTA2MjUsIDAsIDEyNzY3LCAxMzAxNywgNzg3NDMsIDY0MjYxLCA2NDkzNCwgMTI3NTM3LCAxMzAxNCwgCisgICAgMTMwMTMsIDAsIDY2NzMsIDAsIDAsIDAsIDEyNDM4LCAwLCA5ODMzNDIsIDAsIDk4Mzg4MCwgMTI2NjM4LCA5MDUzLCAKKyAgICAxMzAxNSwgNzQ1MjMsIDAsIDcwNCwgNjYyMTUsIDYxOTUsIDk4MzgyOCwgNjY2MCwgNzg3NTgsIDkxNzc2MCwgOTE3NzkzLCAKKyAgICA0MjIxMiwgMTI2MjksIDExNDM1LCAwLCA1NTI1NiwgNjU1MzgsIDAsIDEyNzk0MCwgOTgzMzQxLCA3NDU0NywgMTI2NTg1LCAKKyAgICA2NTQ0OCwgNzgxMDAsIDEyOTQ4LCAxMTkwMDEsIDE5NTAwMiwgMTE5MjM4LCAxOTUwMDQsIDc4MDk5LCAxMjcwODUsIDAsIAorICAgIDEyODMyMCwgNDI4NywgODI3NiwgNDkwMiwgMTEzMSwgMCwgNzg0NTgsIDY2NzI4LCAxODE2LCAwLCA0MjUzMywgMTY4LCAKKyAgICA0Mjg0NSwgNDg5OCwgNjQyOTgsIDk4MzE0MSwgMCwgNDkwMSwgMTgyMSwgMCwgNTc4LCAzNjUzLCAwLCA3OTEsIDkxNjIsIAorICAgIDY5NzcsIDAsIDc4ODg5LCA3NDU2MSwgMCwgNzM3MzEsIDgzNTQsIDQzNTkwLCAxMTkzMDMsIDk4MzQ0OSwgNzU1NywgCisgICAgMTE5MzM5LCAxMTkzMDEsIDgyMzQsIDcyNDEsIDAsIDEyMDY3MSwgMTE5MTY3LCAxOTQ5OTYsIDEyODExLCA2NTkyNSwgCisgICAgMzk0NiwgNzgwNzgsIDEwOTk4LCA3ODA4MCwgNjczLCAxOTQ4NjcsIDY0Mzk3LCAxMjgyNzYsIDc0NTk5LCA3ODQ0OSwgCisgICAgODg5MCwgMTk0OTc3LCAxOTQ5NzYsIDI0NDgsIDc4MDg1LCAxMDI2NywgODQyNCwgMjQ1MiwgNzgwODMsIDEyODgyNCwgCisgICAgODcyOSwgNzg0NTYsIDAsIDc4NDUsIDkxNzkxNywgNzEzMDIsIDQ0MDgsIDQxMjIsIDY3NzIsIDExMDM5LCA4NzIzLCAKKyAgICAxOTQ5OTAsIDcxMzEwLCAxMTkzMDIsIDczMSwgMTE5MzA0LCA5MjI4NiwgMjQzOCwgNjQ4NTUsIDExOTMwMCwgMTE5Mjk5LCAKKyAgICAxMTc1LCAwLCA0MjEzNSwgMzczLCAxMTkxNzIsIDIxMTksIDExNDU3LCAxMTUyMSwgNzcyMywgMCwgMCwgMCwgNDE5NTIsIDAsIAorICAgIDUyNzMsIDIxMjcsIDUyNjksIDYzMzcsIDUyMDIsIDI0MDQsIDUyNjcsIDQyODIzLCAxMTI5MSwgMTk5MTUsIDUyNzcsIAorICAgIDEyOTYzLCAxMjc4NjQsIDYxODksIDQxMjUsIDEzMTQsIDEyMTMzLCAxMjAzNDAsIDExODg3MywgMTI3MSwgOTgzNjQwLCAwLCAKKyAgICA2NjAyNCwgNDE0ODIsIDM4NjQsIDc0NTM5LCAwLCAzODc5LCAwLCAxMjk3OCwgNDE2NiwgNDU3NCwgMCwgNzU2NywgNzQ1OSwgCisgICAgOTgzMTYwLCA0MTM5MCwgNTM4NCwgNDE4ODIsIDY3NjQ3LCA5MjU0OCwgNTc1OSwgOTgzOTEyLCAwLCA0MTM4OCwgNjQ0NDYsIAorICAgIDQxMzkyLCA2NDI4OCwgNDEzODcsIDAsIDg3MDYsIDU1NTIsIDk4MzE4NywgNzAwLCAwLCA1NTUzLCAwLCA3MDg4LCA1MzU2LCAKKyAgICA3NDk5LCA2ODAwNywgNjY1OTYsIDc0MDY2LCAwLCAxMDI2MywgNTU1NCwgMCwgMTIzNDQsIDEwMzExLCA3ODExMywgNjY2NSwgCisgICAgOTI2MjYsIDAsIDc2MTgsIDg1MTcsIDExNDU1LCA3ODQ0MCwgNjQ2MzIsIDY0NDQ3LCA1NTU1LCA3ODA4OCwgNzgwOTMsIAorICAgIDc4MDkxLCAwLCA0MjgwMywgNjUwMzMsIDkxNDMsIDY2NjgsIDE5NTA2NywgNjc5OTUsIDE5NTA2OSwgNjU2LCAxOTUwNzEsIAorICAgIDY1MDM3LCA0NTc3LCA2NDYyNCwgMCwgMCwgMCwgOTgzNjQ5LCA0MjY5LCA3Mzg4NSwgOTE3Nzc1LCA0Mjg0NiwgNjk2NDQsIAorICAgIDk1MCwgMCwgOTIyNzMsIDY2NTgwLCAxMTg4OTUsIDY2NjgzLCAxMDU1NCwgOTE3Nzc4LCAxMTkxMjEsIDAsIDUwOTgsIAorICAgIDkxNzc3MCwgMCwgMTE5MDk5LCA1MDk3LCA0OTM1LCA5ODQ4LCAxMDM4MSwgMCwgMTI4ODcwLCA5ODM3MDEsIDM2NTEsIDAsIAorICAgIDEyMDczMCwgMTI3NTU2LCA1MTAyLCA1MTAxLCAxMDI2OSwgMTI5ODMsIDgxMzgsIDQ1MTcsIDE5MzIsIDUxMDAsIDE0MzksIAorICAgIDEyMDkzLCAxMjQ3LCAxMDAzNCwgMTk1MDY0LCA1MDk5LCA3ODM3MywgMTQ0MSwgNDIwODcsIDMwNjMsIDY1MCwgMCwgNzgzOCwgCisgICAgMCwgMTk1MDQxLCAxOTUwNDAsIDExOTE0MiwgOTAzMSwgMTIwNzkwLCAxMjg1ODIsIDkwNzgsIDg1NDUsIDY2MzU2LCAKKyAgICAxMjg3OTksIDAsIDkxNTQsIDkxMTgsIDEyNjU0MywgMCwgMjY3NiwgMjI3NywgMCwgNzM4MTIsIDYxOTAsIDg1OTksIAorICAgIDE5NTA1MywgNjk5MTgsIDEwNzk1LCA5ODU3LCA3MDE0LCA5ODU2LCAxOTUwMzMsIDkyNjIwLCAxMjEyOSwgMCwgODQ4MSwgMCwgCisgICAgNjIwMiwgMTk1MDM1LCAxMDkyMCwgMTI4MjM3LCA1MjAzLCAxOTUwMzksIDE5NTAzOCwgNTEwOCwgNTEwNywgNjU4MTgsIAorICAgIDY2MDE5LCA5NzYyLCAwLCA1NTQxLCA3NDc3MiwgMCwgMTI2MTMsIDUyODQsIDY2NTcsIDIwNywgMTI4ODA2LCA0Mjc1LCAKKyAgICA3NDgxOSwgODU0LCA2ODE0NywgNzQzODEsIDAsIDc4Nzg2LCA1MTAzLCAxMjc4NjEsIDY0MzQ4LCA0MTM2OCwgNDM5NzQsIAorICAgIDQ4OCwgNjk4MTEsIDAsIDcxMzM5LCAxMDE1NywgMCwgNDMwMzQsIDExNDM4LCA2NDY3NCwgMCwgOTI2OTQsIDY4NDMxLCAKKyAgICA0MTc3MSwgNTEwNiwgNjY2OSwgODUwNCwgNjUxNTQsIDY5ODEzLCA0MTM2NywgNTEwNSwgMTI3NTA5LCA2OTcyMCwgNjQ3NiwgCisgICAgNTEwNCwgOTgzNzQ5LCAzMDQsIDMxNzYsIDExOTAxMCwgMCwgOTMyLCAxMjA2MzMsIDY1NjcsIDIzOCwgNjk2NTYsIAorICAgIDE5NTAxMSwgMTk0NTk1LCAxOTkwNSwgMTIwNTc3LCAxOTUwMTUsIDc4ODcwLCA0MTA0NCwgNjc2NDAsIDE5NDkwMiwgCisgICAgNDIwNTUsIDk5MTIsIDY1OTM5LCAxMDY3MCwgNzQwOTMsIDEzMjczLCAwLCAxMjU1MiwgMTk1MDE5LCA4ODAzLCAzMDksIAorICAgIDY2MjIsIDgxNTEsIDEwODU4LCA3ODcwNiwgNjc2MzYsIDAsIDEyNTY4LCAwLCAxMjU1MywgMTA4MTQsIDQzMjc1LCA2OTUwLCAKKyAgICA5NzEyLCA2ODY4MCwgNDM5NzAsIDk4MzE5OCwgNjUxNjUsIDkyNzI1LCAwLCA2NjQ2NiwgMCwgMCwgMCwgNjY3MjUsIDYxOTEsIAorICAgIDExMzUxLCAxMDQzNywgMTEzMTYsIDY3NjM0LCA0Mzc2MywgMCwgNDE3NTQsIDY3NjM1LCA5MzcwLCAyNzIwLCAxOTQ5NzUsIAorICAgIDY4NDYyLCA4MjMyLCAxMTg4MTcsIDAsIDMyMjIsIDAsIDAsIDAsIDY2NjYzLCAwLCAwLCAxMDgzNCwgMCwgMCwgNjU3MzIsIAorICAgIDk0MDk1LCA5MTc1NDcsIDkyNjgyLCA2NzY3OSwgMTk1MDIwLCAwLCA3NzgxLCA0MTM4MywgNjQ1NjgsIDAsIDEyMDczOCwgCisgICAgMTIwNzcsIDAsIDY0NTg2LCA5MTc2MjAsIDQyMzk2LCA1NTI1NSwgMzQ3NSwgMTI4MDM1LCAyNDc5LCAwLCAzNjMyLCAKKyAgICAxMjA3MjgsIDEwNjk4LCA4Mzc2LCAzNjQ4LCAxOTQ5NjAsIDc0ODQ0LCA2NzYzOSwgMzYzNiwgNjc4OTQsIDM2NTAsIDg4MzcsIAorICAgIDY1MjI5LCAxODQzLCA0MjI4MywgNDMyNTAsIDQxNTYyLCA5MTAwLCA3NDU0OCwgOTE3NjMwLCAzNjQwLCAxMjcxOTAsIAorICAgIDQyMzIxLCA3Mjg0LCAxOTQ5NzQsIDE5NDk3MywgMTk0OTUwLCAxOTQ5NDksIDE5NDk1MiwgMTk0OTUxLCAxMjY2NDksIAorICAgIDE5NDk1MywgNDIwODAsIDI1MjksIDAsIDAsIDAsIDQyMDgzLCAxMjA2NzgsIDY4Mzk4LCAxOTQ5NTcsIDY3NjE5LCA2NjM2NywgCisgICAgMTk0OTU4LCA5NjM0LCA5MjM4MCwgOTk4OCwgMCwgNDEwNjgsIDAsIDQyOTUsIDY1MjY0LCA2ODAwNiwgMCwgOTI1NDUsIDAsIAorICAgIDc4NSwgODIzNiwgMTI4NjQ3LCA5MDI3LCA2ODE2MCwgNjc2MjMsIDY0MzgzLCAxMjAyNjUsIDkyNSwgMTI3MTU2LCAwLCAKKyAgICA0MTk4NSwgNDEwNzEsIDk1ODYsIDAsIDQxOTg0LCA5MjE3LCAwLCAwLCAwLCA5MTg2LCAyMDY3LCA0MDE2LCA5ODM4MDMsIDAsIAorICAgIDM4MSwgMTI5MzYsIDAsIDQyMDc3LCAwLCA2OTg4MCwgNTE4NCwgNDIwNzgsIDE5NDk0NywgMTA4MTAsIDEyODUzMSwgNDU4NSwgCisgICAgMTk5NDMsIDU4NjAsIDY3NjMzLCAwLCAwLCA4MTIsIDM2MTUsIDAsIDUxNzgsIDQ0MDAwLCAxMjA1NDgsIDc4ODA3LCA1MTg4LCAKKyAgICA3NDI4NywgNjc2MjksIDM2MDUsIDEwNjkyLCAxMTY2LCA2NDQyOSwgNDI2MzksIDkyNCwgMCwgNjc2MzEsIDQyNjE2LCAKKyAgICAxMjA2NzAsIDI0NDIsIDEwNzAzLCA3ODc4OSwgNjc2MzIsIDkxNzkyNCwgMTI3NzEsIDEyNzM2LCAxMjc1MywgNjY3MDgsIAorICAgIDczOTMzLCA2NzYyNiwgNDI0MDEsIDAsIDY5ODcyLCAxMjczNzMsIDQyMjg4LCAxMjc1MSwgMCwgODU0MiwgMTMxNDUsIAorICAgIDE5NDk2MywgMjQ2OCwgNjY3MDYsIDQxMjk0LCAzNjI2LCAzODgzLCA2NDM4OCwgNDI0NzksIDAsIDQxMTE3LCAwLCA5MjU4MCwgCisgICAgMCwgMCwgNjc2MjQsIDAsIDEyOTAsIDAsIDY1NTg1LCAyNzE1LCA4MDYsIDY1MjA4LCA0MTg4NCwgOTE3ODgzLCAxMzE4LCAKKyAgICA2NDczMSwgMTI2NTc4LCAwLCAwLCA2NjMyNSwgMzQ2NSwgMjQwNSwgOTI0MCwgMCwgMTI3NTYsIDY1MjU5LCAwLCA5ODM3ODEsIAorICAgIDEyNzUyLCA1ODMzLCAxNDMyLCAwLCA0MTg4MywgNzM5MTIsIDk3OTksIDAsIDQxODg2LCAyNDgwLCAwLCAyMDYyLCAKKyAgICAxMjcyOTMsIDY0OTQsIDU1MzcsIDc4NjU2LCAwLCAxOTQ1ODcsIDAsIDEyMTEsIDAsIDAsIDAsIDExODgzMiwgMTIzMTgsIDAsIAorICAgIDAsIDY4MDA1LCAxMDYyMiwgOTgzNzc5LCAwLCA3ODY1NCwgNjU2NiwgNzg2NTksIDAsIDczNzgwLCAxMTkxOTYsIDY0ODY0LCAKKyAgICAwLCA3ODY2MCwgMCwgODI4NCwgMTMwODEsIDAsIDM1ODksIDQyMDUxLCA0MDM1LCA2NDkyLCA5MjIzNiwgNDI2NSwgNjY0MiwgCisgICAgMzk3NywgNzQxODYsIDQxNzc4LCA4MzYsIDExOTIxNiwgMjQ4OCwgMCwgNDU4MiwgMCwgMCwgNDE3NzcsIDEyOTI2LCAKKyAgICA5ODMzNzcsIDc1MjgsIDEwNTUwLCAwLCA5MjcwNiwgMCwgMTA5NjEsIDAsIDEzNzQsIDY0ODc4LCAxMTkwMTQsIDAsIAorICAgIDQyMzg5LCA0MTM3NCwgMjI4NiwgMCwgNzg0OTIsIDQxMzc3LCAxMjc5MDksIDAsIDQwMCwgMTI1OTcsIDEyMDU4NiwgMCwgMCwgCisgICAgNjY2MSwgOTgzMTQ1LCA2NDgyNywgMCwgNzM4MTcsIDM5MCwgMCwgNzEzMDEsIDk4Mzg2MiwgMzQ3MywgNzcxOCwgMCwgMCwgCisgICAgMCwgNTUyODUsIDAsIDAsIDAsIDExOTY5LCA5ODMzOTAsIDEyNzg0MSwgNjM2NSwgMTg4NywgNjc2MywgOTgzMzcwLCA4MDgwLCAKKyAgICA3MDA2LCAwLCA5ODMzNzEsIDY3NTcsIDY0MzUxLCAxNTQ0LCAwLCA2NzY2LCA2NDY3NywgMTIwNzE2LCA5ODMzNzIsIDYxNDYsIAorICAgIDAsIDc3MSwgOTgzMzczLCAwLCAxMjgxMiwgMTMxNjgsIDQyMjcyLCAxMjIwMCwgOTE3OTI3LCA3OTA0LCAwLCA5NTMsIAorICAgIDEyOTE3LCAxMTk1NjAsIDEyMzAwLCAwLCAxMTQ5MSwgOTcyNCwgMTAzNDEsIDk4Mzc3MywgOTUyNCwgNzQ5MCwgMTEzODksIAorICAgIDc0ODksIDMzNzksIDAsIDc0ODcsIDAsIDQ3MSwgNzQ4NCwgNzQ4MiwgNjc1MywgNzQ4MCwgNTc2NCwgNzQ3OCwgNzQ3NywgCisgICAgNjUwMSwgNzQ3NSwgNjkxOCwgNzQ3MywgNzQ3MiwgMjQ3NCwgNzQ3MCwgNzQ2OCwgMTAyMzIsIDEwNjE1LCAxMDIxMywgCisgICAgMTI3Mjg4LCA5MjM1NywgMTAwNDksIDExODM0LCAzNTQ0LCAwLCA2MDE3LCA2NTMxMSwgMTI3NDgxLCAxMjAyMTYsIDEzMzA2LCAKKyAgICAxMDUzMywgNzg3MCwgNzM5NDksIDc2MjUsIDAsIDEyMDU0NCwgMCwgMCwgOTI2NjAsIDAsIDAsIDAsIDE5OTYxLCAyNDcyLCAKKyAgICA0MjY2NSwgOTIzNDEsIDAsIDIxMzksIDQyNTYsIDEyMDc3NiwgNzQzODAsIDAsIDQyNjc1LCA0MjY1OCwgMTI4NDUsIDAsIDAsIAorICAgIDY1MTM4LCAxMTkzNTUsIDY3ODYyLCAwLCA2NTY3MSwgNzA4MywgMTIwMDA4LCA4MDY2LCA3Njc4LCA3NDg2NSwgMCwgMCwgMCwgCisgICAgMCwgNzE4NiwgMCwgMTIwNTU1LCAwLCA0NDUsIDEyMDU2NiwgMTI4MzA4LCAwLCAwLCA4MzMwLCAwLCAwLCA0Mjc5NywgCisgICAgOTgzMTUwLCAxMjAyMTUsIDAsIDM5MDIsIDAsIDE3NzAsIDAsIDEyODg2NiwgMTU2MCwgMTIwMjA5LCAxOTQ5NzIsIDQ1ODQsIAorICAgIDczODQzLCAwLCAxMTcxMiwgMTA4NjYsIDExODkyOCwgMTExOCwgNzEzMzQsIDAsIDAsIDEwODEsIDc0MzYsIDY4NDIwLCAKKyAgICA3MjUyLCAwLCA1OTk2LCA2OTkyMSwgNDkwMywgMCwgNDEzODYsIDUxNjIsIDExOTE4OSwgMTMzMCwgMCwgNzEzOSwgMCwgCisgICAgMTIwNDcsIDQxMzg0LCAwLCAwLCAxODQ4LCA0MzM0LCA2MzI0LCA0MTk3NSwgNjQ3NzcsIDEwNjc0LCAxMjMwOCwgMTIxODYsIAorICAgIDAsIDAsIDk4Mzc0MSwgMTI3MTUsIDY4MDAyLCA5ODM0NzksIDEyNjYzMCwgMjAxOCwgNjY2NzIsIDQxOTc5LCA2NjY4NSwgCisgICAgMTE5MTU3LCA2ODAwMCwgOTI0NjQsIDAsIDEyNjk4NCwgNjgwMDEsIDkzMzQsIDkyNzA1LCA5MjMxNSwgNzAxMDEsIDc5NzUsIAorICAgIDAsIDc3OTU3LCAwLCA2NjYyMSwgNDg4NCwgNjY1OTcsIDY5NzMyLCAwLCAwLCA2MzEzLCA2NTUxMywgNjk4NTcsIDAsIDAsIAorICAgIDAsIDIzNDUsIDQzNjk3LCA0NjMsIDAsIDAsIDExOTYwNywgMzExNywgNTQ2MCwgMCwgMCwgOTgzMzg3LCAwLCA0MjI3OSwgCisgICAgMTk0NTc3LCAwLCA3ODQxNSwgMCwgMTk1MDA4LCA5ODMzODQsIDEzMjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCA1NjYzLCAwLCAwLCAKKyAgICAwLCAwLCAyNDgyLCAxNDcxLCAwLCAwLCA0MjI0NywgMTIzNzgsIDczOTI1LCA2OTY2NCwgMCwgMTIzNzQsIDAsIDAsIDAsIAorICAgIDk4MzY5NCwgMjQ2MCwgMCwgMTE5NDQsIDEyMzc2LCAxMjc4NjgsIDY0Njc5LCAwLCAxMjM4MCwgMTA1NTcsIDY0NDczLCAKKyAgICA1ODcwLCAwLCAyMDI0LCAxMjcxODAsIDAsIDAsIDUzOSwgMCwgMTI3NzY1LCA5NDA1MiwgMzg1MywgNjUxODAsIDEyNzkyMywgCisgICAgMTIwNzk2LCAxMjAyNDUsIDkyMzI0LCAwLCA4NjU5LCAwLCAxMjQ3NCwgOTI1NzksIDk1MDMsIDE5NDk2OSwgMjQ3OCwgMCwgCisgICAgNDE2MiwgMCwgNDI2MCwgMTI5NTMsIDY5NjMzLCAxMjAwODksIDEyNDcwLCAwLCA3NDE4OSwgMjc0MiwgMTI0NzYsIDExNzk4LCAKKyAgICAxMDk0NiwgMTI3MzEwLCA1MDAwLCAwLCA5ODM1NzksIDAsIDY5NjcyLCA4MjEzLCA3NDAxNywgNzc3MSwgNjE2MSwgNjgwMTgsIAorICAgIDY3MDksIDAsIDc4ODg1LCA5ODM3MDgsIDEyNzk3MSwgMTIwNTgyLCA3ODU0NywgMCwgMTAzMDEsIDEwMzMzLCAxMDM5NywgMCwgCisgICAgMCwgNzM3OTEsIDAsIDAsIDAsIDAsIDExOTEyMywgNDAxNCwgMTI4NDIsIDczOTUyLCAxMjAxNSwgMTI3MjkwLCA4Mjc1LCAKKyAgICAzODkzLCA5ODMyNjQsIDAsIDEyMjEwLCA3MjIxLCA0MjE0NywgMCwgNzQ1NTAsIDc0NDY1LCA2NDc0NywgMTE4ODQxLCAwLCAKKyAgICAxMjUxNiwgNDQ0NCwgMCwgOTIyNzEsIDc0NTM3LCAxMDg5MiwgODIzMSwgMCwgNjQ3MywgNDE5NjgsIDc4Mzg4LCA0MTk3MywgCisgICAgMzU5MSwgNDE5NjksIDAsIDI0NTMsIDEyODU0OSwgOTI2NjYsIDY0NzA1LCAwLCAwLCAxMDM0OSwgMTA0MTMsIDQzNTkxLCAKKyAgICA0MTk2MiwgMzIwMiwgNzQzNTMsIDAsIDgzMTYsIDAsIDAsIDk0MDYwLCA2ODcsIDAsIDAsIDAsIDE4NDAsIDAsIDY4NjcxLCAKKyAgICAxMTk4MDksIDQ4ODMsIDI4NSwgNDcyMywgNzAwOTksIDkyNjkyLCA0NDU5LCA3NDU3NywgNDI5MjEsIDQxNzIwLCAxMTA4OSwgCisgICAgMjQwLCAxOTkwNiwgMCwgNDIzMjMsIDAsIDk3NDMsIDEyMDIzMiwgMTMxMzQsIDEyNjUzNSwgMCwgMCwgMCwgMCwgNDI2MzQsIAorICAgIDk4MzM0MywgNDM0MzcsIDMwODEsIDExNDYzLCAxMjAxNTQsIDAsIDAsIDEwNDQ1LCAwLCAwLCA2NjcxNywgMjYxNCwgOTEyNSwgCisgICAgMTE5MDIzLCAxNzI5LCAwLCAxMjAyMzYsIDY1MjIxLCA2Mzg4MywgNDMzMzQsIDY0ODUyLCAwLCA2NTE5NCwgNjYyMDEsIDAsIAorICAgIDY2NTc4LCA1MDAxLCA0MTg3OSwgNzQ0MjcsIDQxMjEsIDUwMDMsIDg4NCwgNjY3MDAsIDYzODc5LCA0OTQzLCA1MTUwLCAKKyAgICA3Mzg4OSwgNzQxODIsIDEyNzkxNSwgNjQzLCAzMDg2LCAwLCA0MjQ0OCwgNDIyOTksIDU4LCAwLCA5MTc5NTIsIDEyMDA4MywgCisgICAgNjM4NzMsIDg0OTEsIDAsIDAsIDk4MzYyMywgNDUzMCwgNDI0MDksIDcxMjYsIDE5NDU3NSwgMjcyMSwgMTIwMDc0LCAKKyAgICAxMTkwOTYsIDE5OTI5LCAwLCAxOTQ1NzQsIDAsIDQyNDIsIDQyNjQsIDEyMDA3NywgMTIwNTMwLCA2NjE3OSwgNDI0MTIsIAorICAgIDY1OTQxLCAxMzExNCwgNjQ1MjIsIDEwNzQwLCAzMDk0LCAwLCA5NzU0LCAxMTkxMDIsIDQ0MzcsIDczOTQ4LCAxMjcwNzQsIAorICAgIDk4MzIzOCwgNTUyODAsIDQyMTc0LCAxOTQ5MjUsIDQyNDMwLCAwLCAwLCA0MjM1NSwgNjYwMjYsIDQzMDYsIDQxMzgwLCAKKyAgICA2ODQzMiwgOTI1ODYsIDAsIDY2NjY3LCAxMjczMDksIDAsIDEyNjUyMSwgNDIyMDAsIDQyNTY2LCAwLCAwLCA1MDg4LCAKKyAgICA2OTQ4LCAwLCA4NTI0LCAwLCAwLCAxMjM4NSwgMCwgMCwgNjk2NDYsIDEzODYsIDY0NTgwLCAxMTQ4MCwgNjExNiwgNjUwMzksIAorICAgIDY1MDM4LCAxMjM5MiwgNjUwMzYsIDgwNjQsIDAsIDEyMTAxLCA1ODIyLCAxMTkwMDQsIDIwODAsIDcxMCwgNzc5OTksIAorICAgIDExNjYzLCAxNjY2LCA0MjA5MSwgMTE5NjU3LCAxMjM4MywgNDM2NzEsIDQyMDkyLCA2ODQxOCwgNDI4OSwgMCwgNjM4OTYsIAorICAgIDEyMDYxLCA0MjA5NiwgNDM2MjEsIDMzNjIsIDEyMzc3LCA5ODM4MzIsIDk4MzgzNCwgNjg0NDksIDc0NjEsIDczOTAxLCAKKyAgICAxMjQ0LCAzMzEsIDczNzg2LCAxMjY4MywgMTA2NjIsIDAsIDgxMTIsIDAsIDY1ODUyLCAwLCAxMjM3OSwgMTk0ODc3LCAKKyAgICAxMjA4MTgsIDQxOTY0LCA0MjIwOCwgNjM4NDMsIDIwODQsIDQxOTY1LCAwLCA2NTg2NiwgNDMyNywgMCwgNjM4NDAsIAorICAgIDc4NTQ5LCA0MTIyMCwgMTMwMzIsIDAsIDU4NCwgMTI5MzMsIDQzMTc3LCAxMjM3MywgNjk4NTUsIDEzMDAwLCAxMzUxLCAKKyAgICAyOTM1LCA4Njk4LCAxMjY2NSwgMCwgMTkzMCwgMCwgNzgyMjksIDEyNDI3LCA2NjUxNCwgNjk4NTksIDEzMDMxLCAwLCAKKyAgICA2MzkwMSwgMCwgMzY1NywgMTI4NTcyLCA2NTIwMiwgNjAwMCwgMTE5MjA2LCAxMjQyNiwgMTI3MTgxLCAwLCA0MTc0MCwgCisgICAgMTI0MjgsIDQxMjgzLCA0MTkxNiwgMTE5MjEwLCAwLCAwLCAxMjQyOSwgNjcyNywgMCwgNzU2MiwgMCwgNTE3MCwgMCwgCisgICAgNDE3NTUsIDY3NiwgMCwgNjY3MDQsIDY2NjY0LCA5OTc4LCA2NjQ5MSwgMzUzNiwgMCwgOTc1MiwgOTIzOTcsIDYxNjIsIDAsIAorICAgIDY5MjI4LCAxMDExMywgNDE4MjksIDY1ODg2LCA1MTU5LCAxMjQyMiwgNDE4MzIsIDQzOSwgNDMwNzcsIDAsIDQyMjA3LCAKKyAgICA3NDU0OSwgMTE3OTYsIDQwOTcwLCA0MTgzMCwgMCwgOTE3Nzk5LCA4MzA4LCA5MTc3OTcsIDkxNzc5NiwgMCwgNjc4NjQsIAorICAgIDkxNzgwMSwgOTE3ODAwLCAxMjMzNiwgNDEzNSwgNjk4MDUsIDM0MSwgMjcyNywgNDEyOSwgMzUzOSwgMCwgNjM4NjEsIDAsIAorICAgIDc5MTMsIDAsIDYzODU5LCA0MTMxLCA2Mzg2OCwgMCwgNjM4NjcsIDQxMzMsIDExMzcxLCAyMTAsIDQ2MDAsIDAsIDc0NTYwLCAKKyAgICA0MTM3LCA4MDgyLCA3ODUwNiwgMTE5MDYyLCA3ODUwNCwgNjcwNCwgNDU5MSwgMTI4MDI5LCAwLCAwLCA5NjgwLCAwLCAKKyAgICAxMjA2MjMsIDU2MSwgMTIxNTksIDE5NSwgNzg1MDgsIDQxNTAxLCAwLCA0MjAzMSwgNTcxOSwgNzE3MiwgNDI2ODcsIDgzNjgsIAorICAgIDAsIDQxNDk5LCAwLCAwLCA0MjI0MiwgNDE0OTgsIDkxNzc5NCwgNDIwMjUsIDc4NTY1LCA2NTgwNSwgNDI0NjMsIDAsIAorICAgIDI5MjQsIDAsIDEyMDUxMCwgMCwgMCwgMTE5MjEzLCA3Mzk0MSwgMCwgNDIzMzAsIDkxNzc4NCwgMzk2OSwgMCwgMCwgNzE2OSwgCisgICAgMTk5MiwgOTY1MiwgNzM5NzcsIDcyNDYsIDQyMDg2LCAxMjY2MTUsIDIyMTksIDAsIDAsIDEyODgwMSwgMTk0ODM3LCAwLCAKKyAgICAzMjcsIDAsIDkwNDIsIDkxNzc3NywgOTE3Nzc2LCA2NTE0OCwgMTI0MzMsIDkxNzc4MSwgMTI3Mjc2LCA5MTc3NzksIAorICAgIDEyNDMxLCA4NjY4LCAxMjQzNCwgOTgzODM1LCA5MTc3ODIsIDU5OTksIDAsIDc3MTIsIDEyNDMyLCAxMjgyNDMsIDQzNjUzLCAKKyAgICAxNzI2LCAxMDE1LCAwLCA4MjEyLCAwLCAxMjgwMTQsIDQyNDIzLCAxMTkwNjYsIDAsIDEyODEwOCwgNjY3MDksIDAsIDg4MTEsIAorICAgIDkyNywgMCwgMCwgMTI0MzYsIDk4MzI0NSwgNDIwMjEsIDAsIDAsIDEyOTksIDEyMjQwLCA0MjM1MCwgNjUxNDMsIDAsIAorICAgIDE5NTAxNiwgMCwgNzgxOTcsIDExMzQ4LCAwLCA3ODAzNywgOTE5NCwgOTgzMTg0LCAwLCAxOTkxNCwgMTIxNzksIDk4MzgxMiwgCisgICAgMjI5NiwgMTk0OTIzLCA2MzgzNiwgNjM4MzIsIDkxNzc3MywgMTA5NjcsIDYzODE2LCAyNTk0LCAzNDQ0LCA2MzgxNywgCisgICAgNjQ2NTEsIDAsIDQxNTAzLCAxMjc0NzgsIDExMjY1LCAwLCAxMjA3NTYsIDE5NDkyMiwgMCwgNTY2NCwgMzk3MiwgMCwgMCwgCisgICAgMCwgMTI4NTA4LCAxMjQxNiwgOTE3NzY0LCAxMTk2MDgsIDEwODE2LCA5MTc3NjksIDkxNzc2OCwgMTI0MTgsIDc0MTExLCAKKyAgICAzODgyLCA4NTMyLCA5MTc3NzEsIDE1NzMsIDEyODY0OCwgMTE5ODQ3LCA0NTk2LCA2NjMzOSwgMTI0MTcsIDY2MDAxLCAKKyAgICA2NTM0MywgMTI2NDkxLCAxMjQxNCwgODI4NywgNjgyMTksIDE5NTAxNywgNjgxMDgsIDExNDMsIDExOTE2OSwgMTE5ODQ2LCAKKyAgICAxMjQxNSwgNjYyNiwgNDI3NjMsIDAsIDExODg4NCwgOTAyMSwgMTIwNzgzLCAwLCAxMTcyNCwgMCwgMCwgMTI3MTA0LCAKKyAgICAxMjY2MTksIDAsIDAsIDgwMjcsIDEwOTk3LCA5MTcxLCAxMjc0MSwgMTE0MDAsIDcxMzA1LCAxOTQ3OTksIDAsIDEyODIzOSwgCisgICAgMCwgMTI4ODgxLCAxMTk2MDQsIDEyNzUyMywgMTIwMTkwLCAxOTQ3NzMsIDY3NjA4LCAxMjgyMTQsIDQyMzY4LCAwLCA3NzE1LCAKKyAgICAzODgxLCA0MTQ4NywgMTIxMTgsIDQyNTE0LCA2ODY1MSwgMCwgOTgzODk1LCAzMDA5LCA0MTQ3NiwgNDE0ODksIDY5ODI1LCAKKyAgICAzMDA3LCAxNDQ4LCAzMDE4LCAxOTQ4MDksIDM4ODksIDg1MjEsIDUwODMsIDUwODIsIDExOTg1OSwgMTIwMTg0LCA4NTE5LCAKKyAgICA5ODMyNDEsIDMwMTQsIDUwODEsIDY1ODUzLCAxMjA3MTUsIDAsIDY4MDE0LCA2OTk1MSwgNTA3OSwgNjQ4MDIsIDQyMjEwLCAKKyAgICA0NTk3LCA2NTUzMiwgMTE4MjgsIDEyMDE4NSwgMTIzNzEsIDAsIDg0MDcsIDAsIDEwODA1LCA4NTE4LCAxMDc3OSwgCisgICAgMTIwMTg4LCA3MTMwMywgOTgzOTMzLCAxMjM2NywgNDIxNzAsIDAsIDkyNTU3LCA2MjksIDE5MjQsIDAsIDEyMDM3LCAKKyAgICA3NDM2NiwgNTk4NywgODQ2MiwgODAwNSwgMTIzNjUsIDYzOTMzLCA2OTczNSwgMTIwODE1LCAxMjM2OSwgMTA2NDksIAorICAgIDY3OTgxLCA1MDc3LCAxMjAxNzQsIDEwODgwLCA2MzkyNywgNTA3NSwgOTE3ODgxLCAwLCA2NTA3NSwgMCwgMTEwMDcsIAorICAgIDk4MzcwNSwgNjY2NTksIDkyNjA3LCAwLCA2NjY4NCwgMCwgMzQzNCwgNDk1NCwgMTkwNCwgMCwgNTI2NiwgMTI2OTgwLCAKKyAgICA1MjcyLCAxMDQ5OSwgNDUwNywgOTU3OCwgNjM5MjMsIDEyMDE3NywgNzk3OSwgMCwgOTgzMSwgMCwgMTk0OTI2LCA0NjEsIAorICAgIDk4MDMsIDAsIDQ1MDQsIDE1MDUsIDAsIDYzMjUsIDUyNzYsIDQzMDIxLCAxMjA0ODgsIDAsIDU1MjM2LCAwLCA2NjQ2MSwgCisgICAgNTE3NywgNDEzMjQsIDEyMDU1LCA4NzIyLCAwLCA0MTMyNywgMCwgNjY2OTUsIDQxMTQsIDQwOSwgNDM4MywgODkwMCwgCisgICAgODk0OCwgNDEzMjUsIDAsIDcyMSwgMTAxODIsIDkxMDgsIDcxMzExLCAwLCAxMTkxODUsIDQyMjI5LCAxOTQ5MTIsIDAsIAorICAgIDU5OTgsIDAsIDQyMzUzLCA3NDgyNSwgMCwgMTI1ODcsIDk0MTA0LCA3ODU3MSwgMCwgNzEzMjgsIDE5NDU2MiwgNDE1NzYsIAorICAgIDQyMjE1LCA3ODU3MCwgMTE5MjA3LCAwLCA4NTc4LCA1OTk1LCA3NTczLCA0MTU3NSwgNzQ3ODksIDc0NzUyLCA2Mzk0NCwgCisgICAgNjM5NDksIDY0NzY3LCAyNjcwLCA0MTY3LCAxOTQ3OTYsIDExNzIzLCAwLCA3NDEyMCwgMCwgNjUwNzYsIDkzOCwgNDM0MTQsIAorICAgIDczODU0LCAxMTczNywgOTcyMSwgMCwgMCwgMCwgMTE3NDIsIDI0MTksIDAsIDExNDkzLCAxMjMzNCwgMTk0OTEzLCA0MTUzLCAKKyAgICAxMjMwMiwgMTA3OTMsIDUyNTAsIDEyNDA3LCAxMTk3OCwgNDQwNCwgOTE4OSwgMTI0MDEsIDQyMDA3LCA1Nzc1LCA2NzU5LCAKKyAgICA2NTgwNiwgNDM5OTcsIDAsIDQyMDAyLCAxMjQwNCwgOTgzNTUzLCAwLCA0OTQwLCAxMjQxMCwgNzY4MywgMTE2NywgNzM3MjksIAorICAgIDQ5ODMsIDEyMDUwNywgODYxLCAwLCAwLCAwLCAwLCA0Mzc1NywgNDMzNzAsIDAsIDAsIDExOTU2LCAwLCAwLCAwLCA5NjE2LCAKKyAgICA2NjMxLCAwLCAxMjgxNiwgNDM3NTksIDQyMjE4LCAxMjcxMCwgNjg2NzQsIDEyNzIxLCA0MTAxLCA2NjE4NSwgMCwgNTk5MiwgCisgICAgNzYxNiwgMTk1MDQ0LCAwLCAxMjU3NywgMCwgOTgzODg0LCA4NTMsIDQyNjkzLCAxOTUwMTQsIDAsIDk4MzY0NywgNTAxNiwgCisgICAgNDM1MzUsIDYzODkzLCA0MjgzNSwgOTQ5MSwgOTE3OTEzLCAwLCA5MTc5MTQsIDAsIDEyNzEyLCA3MTA1LCAxMjc4MDcsIAorICAgIDY1MDYwLCAxMjA3OTcsIDk5MDAsIDc3NTAsIDAsIDE5NDkxOSwgMCwgMTI3ODMwLCAwLCA2NDc3OCwgMTI1ODUsIDEwNTY1LCAKKyAgICAxMjgxNTEsIDEyMTc3LCAwLCAwLCAwLCA3NzgyNCwgMCwgNDkwMCwgMTI3ODc0LCAxMjg3OCwgOTI2MzAsIDg5ODQsIDQxMTksIAorICAgIDc0NzY4LCA4OTcxLCA3ODU5MywgNDMxMTMsIDk3MDIsIDc4NTk0LCAxMTAyNSwgOTI0NSwgMTMwNDgsIDQ5MjcsIDQxMzgsIAorICAgIDc0MTg1LCA5MjQ4MSwgOTI3MTAsIDEyMzk3LCA3NzgyNywgMCwgMTMwNTQsIDEyMzk0LCAwLCAwLCAwLCAxMzA1MywgMCwgCisgICAgMzk0OCwgMTA3ODEsIDE1NDYsIDAsIDUwMTAsIDE2ODAsIDEwNTA3LCA3ODU5MCwgNzg1ODMsIDAsIDAsIDAsIDE5NDkxNSwgCisgICAgNzI2NywgMCwgNzQ4MzMsIDEyODE4MSwgNTk5MywgMjgxOSwgMCwgMTI3MDYsIDc3ODQwLCAxODkzLCA3MjY2LCA2MzkxNSwgCisgICAgNzI2NCwgNzI2NSwgMCwgMTM2MywgMCwgNjM5OTcsIDYzOTEwLCA2Mzk5NiwgMzA3NywgMCwgMCwgMTUxMiwgNjk5MjksIAorICAgIDEyNTg5LCA0MTQ3OSwgMTI4MzEzLCAwLCA0MzMzOSwgNzM3NzYsIDk4MzYsIDEyMDcyNywgMCwgNDE0ODEsIDQzMzM1LCAKKyAgICA3ODMyLCA0MjM0MywgMzA5MCwgNDMzMzcsIDgxNywgMTY2NCwgMTg1MCwgMTI4ODQxLCAzMDc5LCAxMTM0MCwgNDI0MDgsIAorICAgIDQyNDQ3LCAxMjcxNDAsIDEyMDAyMCwgNDIzMDcsIDEyMzg2LCA0MjMwNCwgOTE3NTU1LCAwLCAxMjM4OSwgMCwgOTIzNjYsIAorICAgIDQxOTk2LCAxMTUyNiwgNjM5ODUsIDU4NjQsIDExNDcsIDYzOTkyLCA0Mjg4NywgMTk4NywgOTI3MTgsIDU0ODAsIDc4NTgsIAorICAgIDExNjUzLCA0MTE2LCAxMjM5MSwgNjYxOTMsIDAsIDQ5MzksIDEyMzg0LCAwLCAwLCA0MTY4NiwgNjM5MDUsIDExOTYwMSwgCisgICAgMTk0Njg4LCA5ODMxOTAsIDAsIDEyNjQ5LCAwLCAwLCA4MjQ3LCA1MDcsIDkxLCAyMDQyLCAxMjA3NzUsIDQzNjQzLCAKKyAgICAxOTQ2ODksIDY2MDI4LCAxMDAzNiwgNDE4NDQsIDExOTgxMywgNzc0LCAxMTk4MjksIDAsIDExOTgxNSwgNTk5NCwgMTI1MzksIAorICAgIDAsIDc4Mzc1LCAxMjA1OTcsIDExOTgzMywgOTgzMTA1LCAxMTk2MDAsIDAsIDAsIDc3MTksIDYwMjYsIDI0ODYsIDEyODMxMiwgCisgICAgMTE5ODA4LCAxNjIsIDAsIDY1MjE5LCA0MTA3MywgOTY4NywgNDE2ODEsIDYzMDQsIDExOTgxMiwgNjYxOTYsIDE5NDg4MSwgCisgICAgNTI2MiwgMCwgNTUyMzMsIDEyNjgxLCA0MjM3OSwgMCwgNzUzNCwgMTIyMTksIDAsIDEyNzUyOCwgNDI4MTAsIDEwNDkyLCAwLCAKKyAgICA5ODM2NjEsIDAsIDQzMTE5LCAwLCAxMjA3NTMsIDEyNDAzLCAyNTAwLCAxOTUwMTMsIDAsIDQ4OTksIDEyNzI5LCAwLCAwLCAKKyAgICA3NDExMywgMjM0MywgNDEwMywgMTk5NDYsIDc0MTEyLCA3Nzg1MSwgMTMxMTIsIDAsIDE5NTAxMiwgMTI4NTksIDcwMDg3LCAKKyAgICAxMjAxNDgsIDY2MzY5LCA1ODYxLCAxMjc3NTgsIDExOTk5LCAxMjQwMCwgMCwgOTgzODM5LCAxMjY0NSwgNTE0NiwgMTEzMjAsIAorICAgIDY4NDEwLCA2NzQ4LCA2NTA0MCwgMCwgNjQxODQsIDEyOTc0LCA2NDE4MywgNjc2MTMsIDEyMDY0NSwgNTE0NywgMCwgMCwgCisgICAgNzQ1MjQsIDAsIDE5MjgsIDAsIDY3NjQ5LCA1OTkxLCAzNDQ1LCA2NzYwOSwgNDk3NiwgNjQxNzYsIDAsIDY3NjEwLCA4MjQxLCAKKyAgICAwLCA3Nzg2OCwgNDIwNiwgMCwgMCwgMCwgMTI4Mjk4LCAwLCAxMDEzOCwgMCwgMCwgODg5NywgMTIwMjM0LCAwLCA4MzU3LCAKKyAgICA0MTI0LCA3Nzg2MiwgNjU4MzYsIDEyMDY0MSwgMTI3OTI2LCA3Nzg1OSwgMCwgMCwgMTEyMywgOTYzLCA0MTU1MywgMTAxMjAsIAorICAgIDEyNDA1LCAxMjAxNTAsIDkyNjY0LCAzOTgsIDEzMjc4LCA5NzIzLCA2MzY2LCAxMjAzMTEsIDc5NDUsIDAsIDQ0MDIsIAorICAgIDk5NzAsIDEyNDAyLCA5ODMxMzYsIDQyMzkyLCAxMzA1LCAxMjQwOCwgMCwgNDQwMDcsIDAsIDAsIDQxNDY0LCAxMjQxMSwgCisgICAgMTI5NjksIDEyMDgyNCwgNDE0NjUsIDk4MzU2NSwgODUyOCwgMTU3NSwgMCwgNjM5NTUsIDE2NSwgMzAyNCwgNDE0NjcsIAorICAgIDExOTE2MywgMCwgOTA5MywgMCwgOTE0NywgMTI4Nzg3LCA2Mzk1OCwgMCwgOTE0OCwgOTY5MiwgNDA5NiwgNTMsIDgyOTYsIAorICAgIDY3NTAsIDE5NTAxOCwgMCwgOTU5NCwgMCwgMCwgNDM1MjcsIDAsIDcyNywgMTk0NzAzLCAxOTUwMjMsIDU4MDUsIDAsIAorICAgIDY3MjYsIDAsIDQyMTc2LCAxMjM3MCwgMTE2NTUsIDExOTA5NSwgMTA1OTEsIDIyODAsIDAsIDEyMzcyLCAxMjA2NDIsIAorICAgIDEyMDMwNywgMCwgOTIzNDMsIDAsIDEyMzY2LCAxMDk2MywgNjA2NiwgMTMyOSwgMCwgMzA1MiwgOTIyMCwgMCwgNjQ0NzgsIAorICAgIDE5NDcwMSwgMTA4MDMsIDQxMzIsIDEyMDMwNiwgNjg0NzQsIDkyNDczLCAwLCA5ODMzMTMsIDc0ODM3LCAxMjAxNTUsIAorICAgIDE0OTksIDAsIDgwNTUsIDQyNzQwLCA2Mzk2NSwgMCwgNjM5NjIsIDc0MDQyLCA4OTI0LCA0MzEyMywgNTk4OCwgMzY2MCwgCisgICAgNjM5NjksIDExNzgxLCA0MjcxOCwgODc4OCwgMTM1NywgNjQ4NTEsIDY1NzQzLCAwLCA4Nzc0LCAwLCAxMjcwODYsIDk5NDEsIAorICAgIDEyMDE3MiwgMCwgMTkzMywgNjk2NTUsIDk1NjQsIDAsIDkyNDM1LCA3Mzg2NiwgMCwgMCwgMjQ4NywgNjc2MTQsIDMxMjEsIAorICAgIDE4MDQsIDMzMTEsIDY3NjE1LCA3MDA4MSwgNzgzMDIsIDEyMjIwLCA2NzYxNiwgMTIwNTk4LCAxMjc0NzUsIDAsIDY4MjAwLCAKKyAgICA2Njc1LCAxMjgxNDQsIDAsIDY3NTkyLCAxMjA2ODUsIDAsIDY0NzcxLCAxMTk4LCA5MTMyLCAwLCA2NDYxOSwgNTEwLCAKKyAgICA2NDY2MywgMCwgMCwgNDU2MSwgMjEwMSwgMTM5OCwgMCwgOTI1NTQsIDc0MDM0LCA0MTU2OSwgOTI2ODQsIDExNDA2LCAKKyAgICA4MTY3LCAxMjEyNywgMCwgODQwLCAwLCAxMjY1MTgsIDcxMDEsIDY5NjcsIDAsIDE5NDg5OCwgOTc5NiwgMCwgMzMzLCAKKyAgICA2OTg5MSwgMCwgODE0NCwgMjExNywgMCwgOTgzNTk1LCAxMjQwNiwgMCwgMTk5MzEsIDExOTA4OSwgNjY3OCwgNzc2OSwgMCwgCisgICAgMTI2MjEsIDAsIDEyNzM2NiwgMTAyMjcsIDQ3NjQsIDQzMTAxLCA5OTgxLCAwLCA0MDk4NiwgNDEyNywgNjY0ODcsIDAsIAorICAgIDQyMjAyLCAxMjc1NCwgMTk1MDIyLCAwLCAwLCA5NDA5NywgNjc1OTQsIDIwNDgsIDEyOTQ0LCA0MDUwLCA2NzU5NSwgCisgICAgOTE3OTY3LCA0MzEwMiwgMTA1ODEsIDEyOTg1LCA0NTMzLCAxOTUwMjEsIDc0MDAzLCA2NDkwLCAwLCAxMjAzOCwgMCwgMCwgCisgICAgMTIwNzA0LCA2NTQ2MSwgOTc5OCwgNjk3MDQsIDAsIDE5NDgsIDY5ODQxLCAwLCA5NTIsIDEyODIzNSwgMCwgMCwgMTIwODAyLCAKKyAgICA2NDQ5LCA5NDk0LCAxMjAzMTMsIDAsIDQzMDk4LCA0ODQzLCA4MTQyLCA2NDE2MCwgNDA5OCwgNjQxNzAsIDAsIDAsIDM0MzYsIAorICAgIDExOTk3MywgMCwgMTI4MTcsIDY3NTk3LCA2Njc2LCAzOTMwLCA0MjYxNSwgMCwgMCwgNjc1OTgsIDAsIDAsIDAsIDY1NTkxLCAKKyAgICA0MTU4MSwgNjU5MTYsIDE0NTMsIDAsIDAsIDAsIDg1MDAsIDQyMjIyLCAxMjAxNDIsIDczNzQzLCAxMjA0MDAsIDQzMTcsIAorICAgIDExNTQzLCA2NzY3NiwgNjQ2NzYsIDAsIDAsIDY3NjA2LCAxMTkwODMsIDAsIDQyMjE3LCAxMzEwMiwgMCwgNjYwMDMsIAorICAgIDY2NzIsIDAsIDAsIDAsIDk4Mzc0NywgNjM4NDEsIDk2MTMsIDkwMDEsIDQ1MjYsIDExMjc0LCA2NzYwMSwgNjQ1MjAsIAorICAgIDY0MjEwLCA2NjY0LCA3ODcwNCwgNDIwNTYsIDEwMjI4LCA2NDk1NywgMTEyODEsIDAsIDM4MDcsIDE0NjksIDY2NjQwLCAKKyAgICA2NTM4MSwgNDIxOTcsIDQ5ODgsIDQyMzcyLCAwLCA5NTk4LCA5MDQsIDM1MiwgNDIyMjUsIDE0NTEsIDgwNjEsIDg0NTMsIAorICAgIDQxMzQsIDAsIDc0ODQ3LCA2NjU3NiwgMTI3OTE2LCAwLCAxMDUyMCwgODU3NSwgOTk2MCwgMTIwMSwgMTI3Mjg5LCAxMjg0NiwgCisgICAgMTI3MjkxLCAxMjcyOTIsIDExOTE5LCA2NDk2MiwgMTI3Mjg3LCA0MzczOSwgMTI3MjgxLCA4NTExLCA5NDYwLCA4MjMsIAorICAgIDExNTg3LCAxMjMwNSwgMCwgNjQ2OTUsIDEyNzMwNSwgMTIzODcsIDEyNTMsIDEzMTgzLCA2NTc2NiwgNTAwLCA0Mjc4MywgCisgICAgNjU3NjUsIDY0MjA4LCA2NDM2OSwgNjU3NjAsIDY1NzYxLCAxMTk1ODUsIDExNjA2LCA2NDc4NCwgMTE3MDIsIDY2NDk4LCAKKyAgICA5ODIxLCA2NDMwNCwgMCwgNTE1MiwgMTEwNDgsIDc1MzMsIDY4MzY2LCA2NDQxMCwgOTIzMDUsIDAsIDQzMjMsIDEyMDA2MiwgCisgICAgOTI2NjksIDcxMzMyLCAxMjcwNTIsIDQyNTg3LCA0MjIxNCwgNDEzOTQsIDAsIDQ3NjMsIDQxMTIsIDExODkzNSwgMCwgCisgICAgNTI2MCwgNDMxNDMsIDk0MDM4LCAzMjYsIDEyMDEzMSwgNjg0MjMsIDAsIDEwNzcxLCAyODc2LCA3NDA3NCwgOTI1MzAsIAorICAgIDE5NDkyNCwgNDEzOTgsIDczODIsIDk4MDIsIDEyNzA3NywgMTI3MDc2LCA0NTMsIDQxMzk2LCAxMjA1MjQsIDQyNzIwLCAKKyAgICAxMjE0MCwgOTU3MiwgMCwgNzAwMywgMTk0ODgzLCA0MjMzNCwgNzcwNCwgMTI2NDkwLCAxOTQ4ODUsIDQzMTQ0LCA0MTIzLCAKKyAgICA4NDk0LCA0MzE0NiwgOTk3NywgMCwgMCwgNjU3NTksIDEwNzY1LCA2NDA2MSwgNDQ2NSwgOTgwOCwgNjQwNTYsIDY1NTgyLCAKKyAgICA0MTI2LCAwLCA5NTIxLCA5NTg5LCA2NDc1NSwgMCwgNjQwMjAsIDEyNjYwNCwgMTA0NjQsIDAsIDAsIDE5NDg2OSwgNjQ1MTQsIAorICAgIDExNTI4LCA2NDAyNCwgMTI4MDcyLCA2NzksIDY0MDEzLCAwLCA1ODUwLCA3NTgsIDc1MzYsIDAsIDkyMjM0LCA0MTQ0MSwgCisgICAgMTA2OTMsIDY0MDA2LCA5ODM1NjcsIDY0MDA1LCA0MDU4LCAxMTkwMTksIDEyNjQ4NywgNjQ2NjAsIDAsIDExOTA1MCwgMCwgCisgICAgOTgzMDY5LCAxMTM5LCA0MzI5OCwgNjQwMjcsIDY0MDI5LCA4OTcwLCAwLCA5OTM0LCA5ODMwOTQsIDEwNzc0LCAxMjgwMjAsIAorICAgIDQyMjAxLCAxMjQyMSwgMTI4MjE2LCAwLCAxODUyLCAzMDU3LCA2NDA0NiwgNzM3NDQsIDY0MDM0LCA2NDAzOSwgMCwgMCwgMCwgCisgICAgMTk0ODk5LCA5MjMyMiwgNzY0NSwgMTI4NTQsIDc0MzM4LCAzNDk2LCAwLCAwLCAwLCA5MTAyLCA2MjcsIDEyNzc5NSwgCisgICAgNjE1OCwgODMyNywgNzQ1NTMsIDY2NjMyLCAxMjQxOSwgMTMzMDksIDExNTcwLCAxMjc4MTEsIDE5OTYwLCAxMTY5NiwgMCwgCisgICAgMTAxOCwgMTE4OTcwLCAxOTQ5MDksIDE5NDg5NywgMTY4MiwgMTk0ODk2LCAxOTQ5MTEsIDQyNzU2LCA2NzY1LCAxOTQ5MDYsIAorICAgIDAsIDAsIDczODE0LCAxMTQxMiwgNjc2OCwgMTA3MjgsIDE5NDgzMCwgNzEzMTYsIDExODg2MywgNDMzMTEsIDY0OTY2LCAKKyAgICAxMTU3NywgMCwgNDMwNDAsIDE4MzMsIDExNTc2LCAwLCA3NDc3OSwgMCwgMTg1LCA2NTA4NSwgNzQ1MzMsIDY0NzU0LCAKKyAgICAxOTQ4NDgsIDc1MzUsIDgwODUsIDQyNTI1LCAxMjAzODcsIDk3NDksIDQxNzAxLCA2MTMxLCAxOTQ5LCA0MTE3LCA3ODQ3LCAKKyAgICAxMjA0ODksIDE5NDcxMSwgNjQ0ODMsIDY1NjkzLCAwLCAwLCAwLCA2OTY5NSwgNDIyNDAsIDAsIDEyNjY1MSwgNDI4NjQsIAorICAgIDEyNjQ5OCwgNjQ2NjcsIDQxODY4LCAxMTg0LCAwLCA4MTUsIDExNDg0LCAxMjc1MzUsIDY3ODQwLCA5ODM2NTEsIDAsIAorICAgIDY2MTk3LCAwLCAxMDk4NiwgNjQ2ODMsIDk4Mzc4NSwgMCwgMzQ1NSwgMCwgMCwgOTg3OSwgMCwgMCwgNDE1OCwgMTI4MDUwLCAKKyAgICA2ODE2NiwgMCwgMCwgMCwgMCwgNjk2NDUsIDMzMiwgMTE4ODA4LCAwLCA1MTQyLCAyNDA3LCA2OTY0MywgNDIxOTksIDAsIAorICAgIDkyNDA0LCA3NDM3MywgMCwgNTUyMTcsIDAsIDYzODcwLCA0MzE2MywgMCwgMCwgOTIzOTAsIDQyODY3LCAxODM0LCAwLCAKKyAgICA5MjQ2MSwgNjk4MTcsIDEwOTQwLCA2NTI0OSwgMTE5MDQwLCA4NjYyLCAwLCAwLCAyNjUyLCAxMjA1MjcsIDcxNjQsIAorICAgIDEwNzg0LCAxOTUwOTMsIDY3Njc0LCAwLCA5MjIzMywgOTI0ODIsIDE5NDc0OSwgNzQ1NjIsIDkxNzUwNSwgMTgyOCwgCisgICAgNzQ0NzQsIDEyMDMyNywgNzg2MjAsIDg1MzEsIDEyNDk5LCA2MjgwLCAxMjMyNCwgMTE4ODU0LCA2NTIzOCwgNjgzNzQsIAorICAgIDQ4MzIsIDY1NTczLCAwLCA2Mjc5LCAxMjUwOCwgMTI5MDQsIDEyNTAyLCA5MTYxLCAwLCAxNjIwLCA2NDQzNiwgMzYwMSwgCisgICAgMTk1MDk0LCAxMjgwNzMsIDk4MzU2MiwgNjA5LCAxMTU1NSwgOTgzMDk5LCAxMjQ5NiwgMTI3ODM5LCA3NDE4MSwgNDM0MywgCisgICAgMTI1MDUsIDAsIDEyNzg2MywgMCwgMTEzNzcsIDIzOSwgMCwgNjM3LCAwLCAwLCA0MjY3MSwgMCwgMCwgMCwgNDM1NjUsIAorICAgIDcxMzA2LCAxMjY0OTMsIDEyNjk2LCAxMjgyNTYsIDAsIDk0MDYyLCAxMjkyOSwgMCwgNzEyLCAwLCA0MTk3LCA5ODMyMDYsIAorICAgIDQyODE4LCAxMjY2MzIsIDAsIDEyMDQ5MCwgMCwgMTE5MTM3LCAxNTA2LCA0MzU2MiwgMCwgOTI0OTEsIDAsIDEyNjUxLCAwLCAKKyAgICA2NDYyOCwgNzQ1MTcsIDEyMDU4LCA3NDA4NCwgOTE3ODM4LCA3NDk0LCAwLCA0OTI0LCA2NTU5MiwgMTE4ODQ0LCAwLCAKKyAgICAxMjcwODgsIDM1NSwgOTcxOSwgMTI3MDg3LCAxMzA2NiwgNjQ3OTYsIDAsIDAsIDEyMDMzLCA0MjE3OCwgMCwgNjk3NjAsIAorICAgIDQyNTcxLCA5MjYzNSwgMCwgMCwgMCwgMCwgMCwgMTI3MTc2LCAzMTc4LCAwLCAwLCA5MjcwNCwgMCwgOTA4MCwgMTI3MDAwLCAKKyAgICAxMjAzNTIsIDAsIDY4MjA5LCAwLCAxMTA4MiwgMCwgNTY5OSwgMTk1MTAwLCA2NjAwMCwgOTQ4OCwgNjUxNjYsIDExOTExMiwgCisgICAgMCwgMCwgMCwgMCwgNzEzMTMsIDAsIDUyNjUsIDY5MjM1LCAwLCAxMTQ4NywgNjc4NTgsIDEyNDY0LCAwLCA0MzA0NSwgMCwgCisgICAgMCwgNDMzNDUsIDAsIDEwNzcwLCAxMTg5OTQsIDY4MDcsIDQ2NSwgOTgyOSwgMCwgNzQzNDgsIDAsIDQzMzQ2LCA4MTE2LCAKKyAgICA3OTUsIDAsIDAsIDEyNDYyLCAxMDkzMCwgMTA4MzEsIDAsIDExODk1MiwgNjQzNjIsIDc0MzM0LCA5ODM2MDIsIDEyMDgxMSwgCisgICAgMCwgMTI0NjgsIDg2MDcsIDEwMDgsIDAsIDEwMDkyLCAxOTUwNzgsIDkxNzg0MiwgNjc4NTUsIDU1MjU3LCA3Mzc3MSwgCisgICAgMTc2NiwgMTEyODIsIDExOTk2LCAxODIwLCA0NTQ3LCAwLCAwLCAwLCAwLCAxMzIyMywgMTI4NjY1LCA2NDU5NSwgMTI3Mjk0LCAKKyAgICAwLCA5MjMxMSwgNDM0NSwgMTI2MTYsIDAsIDAsIDAsIDc0NDY3LCAwLCAwLCAwLCA1MzgyLCAwLCAwLCAwLCAxMTkwNjAsIAorICAgIDY0OTUzLCA1NDA2LCAxOTkyMCwgNjk4OTcsIDY2NTEwLCAzNTkwLCAxOTQ4NjQsIDExMzAsIDAsIDAsIDQyMDE2LCAxMTgyMywgCisgICAgNDMwMjMsIDAsIDExODg5NiwgNzc0MiwgMCwgMTMyODAsIDcxMzIzLCA5MzI2LCA3MzgyNiwgNTMxMCwgNzQ4MTIsIDc4NTg0LCAKKyAgICA5MjIyOSwgODk1OSwgNDM1ODksIDY3NDcsIDY2NzIzLCAwLCA4NTY4LCAwLCAxMjA0OTYsIDczODE2LCAxMjA4MDMsIAorICAgIDk4Mzg0OCwgNDI2NzAsIDAsIDExNjIxLCAxMjQ2MCwgMCwgMTIwNjMxLCAwLCA0MzA2MywgNzQ1MTksIDEyNzE4MiwgMCwgCisgICAgNzM5MTcsIDc4NDMsIDY5NzgzLCAxMTY4OSwgNTQxMCwgNTc4MywgMTA0NjgsIDg0MDMsIDU0MDAsIDExNTk0LCAxMjgyNDcsIAorICAgIDAsIDExODk5MCwgMTA0OTEsIDY5ODQyLCA2NDQxMiwgMCwgMCwgNTU4NywgNDI4NjUsIDY0NDA0LCA4MjY4LCA0OTIzLCAKKyAgICA2NTA4NiwgODk4MSwgMTIzODIsIDQyMTMzLCAxMjA3NTUsIDk3MDYsIDY5NzM4LCAwLCA2NjYxMCwgMTA0NjEsIDEyMTAzLCAKKyAgICAwLCA4NjQyLCAwLCA0Mjc2NiwgOTgzODY2LCAyMjEwLCA5OTgzLCAwLCA5NDAwOSwgMCwgMCwgMCwgNzM5OCwgNDE1MTUsIDAsIAorICAgIDExODAyLCA4MDQxLCAxNDYxLCA5MTAsIDExOTEzMywgMCwgNjc0OSwgMzY1OCwgOTM5NjQsIDEyMDUyNSwgMCwgNzYxNywgCisgICAgMTk0ODQxLCAxMjg4OCwgMTI3OTgzLCA2NzY2OCwgMTMxNDMsIDAsIDkxOTMsIDExMDk3LCA1NzAzLCAwLCA0MTUxNywgCisgICAgNDE1MDQsIDQxNTE5LCAxMDAxNiwgNjQzMDUsIDAsIDY1ODY0LCA2MjMsIDc4MSwgNjcwLCAxMDY2MCwgNTc2OSwgNjEzLCAKKyAgICA3NTQzLCAxMjAyNzksIDQ3NywgNDEwODMsIDkyNTIxLCAwLCA1OTIsIDE1NzgsIDEyNDU5LCA0MzQ0OSwgMCwgMCwgODIyNSwgCisgICAgMCwgNjU0LCAxMTM0NSwgNjUzLCA2NTIsIDAsIDY0NywgMCwgNjMzLCAxMjA3NDQsIDAsIDEyNjQ3MiwgMTI0ODAsIDQzMjQzLCAKKyAgICAwLCAzOSwgMTI0ODcsIDAsIDEyMDUyOSwgNzQxOTksIDEyNDgyLCAwLCAxMjQ4OSwgMCwgMzE5NSwgNTU1MCwgOTgzNTU0LCAKKyAgICA3ODk3LCAwLCAxMjAzLCA3NDM5NiwgMTgxMywgNjQ1NDQsIDQxMzExLCAxMjA5MCwgMCwgMjg3NywgMCwgMCwgMTY3NSwgCisgICAgNjk4NDAsIDAsIDAsIDAsIDEwMDcwLCAxMDU5NSwgMCwgMTE5MDc3LCAxOTQ3NzcsIDk4MzYxMSwgMCwgMCwgMCwgNDMyNDQsIAorICAgIDAsIDAsIDk4MzkxNiwgMTE5NTYxLCA5ODMwNzgsIDAsIDE5NDkyMSwgMTI4MTYwLCA5OTM5LCAwLCA5ODMxNTEsIDc3ODYwLCAKKyAgICAwLCAwLCAyNzAsIDAsIDEwNzE0LCAwLCAwLCAwLCAwLCAwLCA2NTM3MiwgMCwgNzQwMzgsIDExOTU1OCwgNjI3MywgNjY2NzksIAorICAgIDM2NCwgOTU5NSwgMTk0OTA4LCAwLCAwLCA3MDcsIDAsIDAsIDkyODIsIDY2NDg5LCAyMjQsIDAsIDY4NjcwLCA5MzMyLCAKKyAgICA0OTY2LCA2ODY3NywgMCwgNjg2NDQsIDAsIDM4NDEsIDY4NjM0LCAwLCAxMDczMiwgNjg2NDAsIDg1MCwgNDk3MiwgMCwgCisgICAgMTI4OTAsIDI5MDksIDY4NjE5LCA0NDAwOCwgNjg2MjcsIDk4MzcxOCwgMTE1NDQsIDEwMjAzLCA5NjA4LCAwLCAwLCAKKyAgICAxMTk2MiwgMTk0Njk0LCAxMjUwNywgMTE5NiwgMTI4Njg3LCAxMjgzMTEsIDc3NywgMTIwMTg3LCA0Mzc1LCA2NTI3MSwgCisgICAgNjc2NzgsIDAsIDEyMTk4LCAwLCA2NDgyNCwgMTE5MzQzLCA5ODMyMzYsIDk0NTQsIDYzNzc4LCA4NjU4LCA0MjUyOCwgCisgICAgNzgwMDAsIDI3MDUsIDkxNzk3NSwgNDE1MjAsIDAsIDAsIDExOTg2LCA3NzY1LCA0MjUwMiwgODI4MCwgNzQ1MjAsIDI3MDEsIAorICAgIDAsIDEyNzAwMiwgNTc2NywgMCwgMCwgOTgwOSwgODM1MywgNjM3NDcsIDY2NzAxLCA2Mzc3MiwgOTgzODE0LCA2Mzc0NSwgCisgICAgMTc0OCwgNjM3NzAsIDAsIDAsIDAsIDY1NTQyLCA2Mzc2NiwgNTUyNDQsIDMwNjEsIDAsIDYzNzY0LCA2Mzc4NywgOTA2NywgCisgICAgNjA5NiwgMCwgNzY5NCwgMCwgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAwLCAxMjc1MjIsIDEyMDYyOCwgNjM4MDcsIAorICAgIDE1OTEsIDAsIDYzODYsIDYzNzgzLCAwLCAwLCA5MjUzNSwgMCwgMCwgMCwgNzQ1NzUsIDAsIDY1NzE5LCAxMzA4MywgCisgICAgNjQ1NzQsIDY1MDEyLCAwLCAxNjQwLCAxMjQ5NSwgNjY2OTEsIDc2MjQsIDMxMzgsIDEwOTk2LCA5MjI0NywgMTkyMiwgMCwgCisgICAgMTI0OTgsIDEwOTg3LCA2OTkzNiwgNjk5MzksIDM4OTQsIDY1NTQzLCAwLCAxOTQ4NDIsIDk4MzU4OCwgNDkzLCAwLCAKKyAgICA0MzE5NywgMTcxNywgNDIyOCwgNDc5LCAxMDMwMywgNzQwMjAsIDAsIDkxNzkzNSwgMTAzMzUsIDM1MjAsIDkxNzkzMiwgCisgICAgMTI0OTAsIDY0MzE1LCAwLCAxMjcwMzksIDEyNDkzLCA2MjMzLCA0MjY4MSwgMTAwMiwgMTI0OTEsIDAsIDY0OTExLCAKKyAgICA5MjYxNSwgMjA5NiwgNjUxMjAsIDAsIDc4MjE5LCA5ODMwODEsIDgzNzgsIDExNjMyLCAxMjcwNDEsIDY2MjEzLCA2Mzg2NCwgCisgICAgNjYyMjEsIDY2MjI2LCA2NjIyOSwgMTMyMTgsIDY2MjMxLCA2NjIxNiwgODUwNywgNjYyMzYsIDY2MjExLCA2NjIxOCwgCisgICAgOTI2NzIsIDY2MjQwLCA3ODA0MSwgNjYyMzMsIDg5MjgsIDk4MzU1MiwgNzkwOSwgNjYyMzQsIDExNjA1LCA2Mzc1OSwgCisgICAgOTgzNjU0LCA2NjIwOCwgNzM5OTksIDYzNzk5LCA2MzgwMywgMjQ0LCAxMTU0MiwgMTI4OTgsIDEyNDk0LCA3Mzc2MSwgCisgICAgMTI0OTIsIDEyNjY5LCAwLCAwLCA3NDE1MywgMCwgMTI4Mjc4LCAxMjA2ODAsIDQ4ODIsIDEzMDQwLCAwLCA4NjEyLCA0ODg1LCAKKyAgICA3NDA1MywgMCwgMTMwNDIsIDQ4ODAsIDY0NjYyLCAyNDI5LCAxMzYwLCAyNDgsIDAsIDYzNzk3LCA5MjM5NCwgNDIzNTgsIDAsIAorICAgIDcyOTIsIDAsIDYzNzU2LCA0Mjc4NiwgNjY2OTMsIDAsIDE4NzAsIDc4MDQwLCA0NzAsIDc4MDM4LCA3ODAzNSwgNzgwMzYsIAorICAgIDcwMDI4LCA3ODAzNCwgNDU3OSwgMTI4MDkwLCAwLCAxMjUxMSwgNzQ0NTMsIDEyNTE0LCAwLCA3NDU3OSwgNzIzOSwgNzAwMSwgCisgICAgODYyMywgOTQwMTEsIDEyODA1MiwgMTI4MDQ4LCA3Mzc4LCAxMjUxMiwgMTE2MTUsIDYxMDQsIDAsIDAsIDY1OSwgNjA5OCwgCisgICAgMCwgMTIyMzQsIDEyNzMwNywgMTI3MDY3LCA4MzExLCAxMjUxMCwgNDE4MDMsIDEzMDM5LCAxMjcwNzIsIDEyNTEzLCAKKyAgICAxMDIwMiwgMTI0NzEsIDAsIDg3NDcsIDk4MzkyMCwgMCwgMCwgMjMyMywgMCwgMjMxOSwgNzc5MTcsIDEyNDc3LCA3NzkxNiwgCisgICAgMjMxMSwgMCwgNDQxNSwgMjM3LCA2MjgxLCAxMjcyODAsIDAsIDAsIDIzMDksIDEzMTIsIDgxNzMsIDEyODg3MSwgMTI0NjksIAorICAgIDAsIDc4NTA1LCA2NDMzNSwgMTA2MDksIDAsIDEyODExMSwgOTM5NywgMTE1MjQsIDkzOTUsIDkzOTYsIDkzOTMsIDkzOTQsIAorICAgIDkzOTEsIDkzOTIsIDkzODksIDYyMDksIDkzODcsIDkzODgsIDQ5MzIsIDkzODYsIDkzODMsIDkzODQsIDY3NDAsIDAsIAorICAgIDY1NDUxLCA4MTg1LCAwLCA5MTc4MzIsIDQzMDI0LCA0MzMzNiwgNjc2NTksIDIzMTMsIDEyODE2NywgNzk0OCwgOTIzNiwgCisgICAgOTI1NzEsIDAsIDAsIDEwNTcwLCA0MzQ3MywgNjI4OSwgMTA0ODQsIDAsIDAsIDExOTk4LCAxMjA4MiwgMTA5MjQsIDMxNDcsIAorICAgIDAsIDEyMDY4NCwgMTI1MjQsIDExOTA4MSwgMjMxMCwgMTE4MTgsIDkzODEsIDkzODIsIDkzNzksIDkzODAsIDkzNzcsIAorICAgIDkzNzgsIDkzNzUsIDkzNzYsIDE2ODMsIDkzNzQsIDk4Mzc3OCwgOTM3MiwgMTI0NDQsIDAsIDAsIDEzMDE2LCA4MjEwLCAKKyAgICA5ODM5NTgsIDQyMDI5LCAxMTA3OSwgMTIzMzEsIDQzNDUxLCA0MjAzMiwgODc0NCwgNzI2LCAwLCA5ODM4MzcsIDQxNTUsIDAsIAorICAgIDAsIDQyMDMwLCA1MDA3LCAxMjUyMiwgNDMwODgsIDAsIDQ5NTEsIDEyNzgwNSwgMTI3MjQwLCAwLCA5OTIyLCA0MzMwOSwgCisgICAgOTgzODQxLCAxMjUyNSwgOTgzNDcxLCAxMjAxNiwgNjU3NzAsIDk1NDgsIDY3NjY1LCA0MDMsIDc4MjMwLCAxMjUwMywgMCwgCisgICAgMCwgMTEwMzAsIDAsIDkyNTY3LCA2NTY5MSwgNjM5OTgsIDE4MTksIDEwNDk2LCAwLCAwLCAxMTk5MjAsIDAsIDE5NDY2OCwgCisgICAgMCwgMTI1MDYsIDAsIDEyMjMxLCAwLCAxMjUwMCwgNDQwMjMsIDEyNTA5LCA2NDM5MywgNzg4MzAsIDMzODksIDEwNTg5LCAKKyAgICA2NjA4LCA0MTA0NywgMTIwMzIxLCA3ODM5NSwgNzgzOTQsIDc0MDY5LCA3Nzk5NSwgNzgzOTEsIDM2MDgsIDgyODEsIAorICAgIDEyMDMyMCwgMTEwNywgMCwgOTA3NiwgODg2MiwgNjk3NDMsIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAKKyAgICAxMzIyMiwgNzQxNjUsIDc0NzgyLCAxMjY1MTQsIDg1NDYsIDExNTUzLCA2Mzk5NSwgMTMxNzcsIDkwNDMsIDYzMDMsIAorICAgIDk4Mzk0NywgNDk4LCA2NDQ3MSwgMTIwMzI0LCAxMjg1NjcsIDEyNTI5LCA4MDQyLCAwLCAyMzQ0LCAxMjUyOCwgODAzMSwgCisgICAgMjQxNCwgMCwgNjk3MTksIDMyMzEsIDAsIDY0MjIsIDY2NTEyLCA2OTY1MywgMTI1MzAsIDI1MzcsIDc4NDA1LCA0MTQyOSwgCisgICAgMTI2NTgsIDEzMDM2LCA2NTc3MiwgMCwgNzg3MzgsIDQxNDMzLCA0NzE5LCA0NjksIDAsIDQzNjMsIDMzMTMsIDQxNDI4LCAKKyAgICA3ODQwNywgMjAyMywgMTc3MiwgNzgyMjQsIDc4MjI1LCA2NTcwNiwgMTAwNTEsIDY0ODEyLCA3ODIyMCwgMCwgOTkyMCwgCisgICAgMTIyMTUsIDAsIDQ5MzEsIDE5NTEsIDEyNDk3LCAxMTkzNjMsIDk2MDcsIDAsIDk2NjMsIDk4MzIyOCwgMTE5NjM0LCA2NTAzLCAKKyAgICA0MTExMCwgMCwgMTQ5MSwgMCwgMCwgMTI3MzA0LCA0MTA2MSwgMCwgMTk0ODM4LCAxMjcxODcsIDY1MDI2LCA0MTk5MywgCisgICAgNDE1MDksIDExMDQ1LCA2NTAyOCwgNzg2MDIsIDY2NDc2LCA0MTEwOCwgOTczOCwgNDE5OTUsIDEwNzUsIDE5NTgsIDEyNTM1LCAKKyAgICA0MTk5MiwgNDE1MDYsIDAsIDQxNjg3LCAwLCAxMjA3MTcsIDEyNzc3NiwgOTk0MCwgMTI3Mjk5LCA3NjkyLCA5ODM4MzMsIAorICAgIDgwMDgsIDQxMTMxLCAzMzAsIDg1NjYsIDY1MDgzLCA0MTEzMywgOTgxNiwgMTI2NTE3LCAxMjUzMiwgNzg1NTAsIDc4NTQ2LCAKKyAgICAzNTA4LCAxMjcwNTgsIDQzMjM1LCAwLCAxMjcyOTgsIDY0MTM5LCA3ODIzMSwgNjQxMSwgMTI5MTAsIDc4NTU0LCA2NjY0NCwgCisgICAgMTMwMjgsIDY3MzcsIDEyNTM3LCAwLCAwLCA2NDEzNiwgMTI1MzYsIDIzNTAsIDEzMDI5LCA3ODIzMywgMCwgOTgzMTAzLCAKKyAgICAxMzAzMCwgNjcwMiwgNDUyNywgMCwgMTI1MzgsIDEyODgxMCwgOTgzNjQ1LCA2NTU5OSwgNjU3MTcsIDk5NjYsIDAsIDQ5NDgsIAorICAgIDEyNDg0LCA0MDMyLCAxMjgxNDksIDEyNjIzLCAwLCA2MjA3LCAwLCA2MTE3LCA2NTkzMCwgODQxMiwgMCwgNzQzOCwgMTI5NiwgCisgICAgMjMyNSwgNDE1MTEsIDEyNjYyNSwgMTAxNDksIDc0MTE4LCAwLCAxMjcyODYsIDEyNDgxLCAwLCAxMjQ4OCwgNjY3MTMsIDAsIAorICAgIDQxNTU2LCA2NDQxNCwgMTE4ODAyLCAyMzU0LCA0MjYxOSwgNzM3NjYsIDAsIDYyOTUsIDkwMSwgNDE1MTAsIDc5NTMsIDAsIAorICAgIDY1MDMyLCA0MTUxMywgOTgzMTY2LCAxMTkyNywgNjY1ODQsIDc4NTU5LCA3ODU2MCwgNzg1NTcsIDc4NTU4LCAwLCA3ODU1NiwgCisgICAgODQ4LCA5ODY4LCAwLCA2NDI0LCA3ODU2OCwgMTE5MzM4LCA2OTkyMiwgNzQwMzEsIDc4NTYzLCA3ODU2NCwgMjM1MiwgCisgICAgNzg1NzIsIDg5MywgNjQ1NzYsIDExMjg5LCAxNDA3LCA2Nzk3MywgMCwgMTMwMjYsIDY3NjIsIDc4NTc5LCA3ODU4MCwgCisgICAgMTMwMjMsIDg5MDMsIDk3NzcsIDY2NzE1LCAxODcxLCA4MDk5LCAwLCAwLCAxMzQzLCA5ODM4MjMsIDAsIDkzMjUsIDY4MTgsIAorICAgIDYyODMsIDExNzM4LCAwLCA5ODM5MzQsIDAsIDExNzQxLCAwLCAwLCA5MjE2LCA4MjYzLCAxMTI3OSwgMTk0NzUyLCAKKyAgICA5ODM4MjUsIDE5NDc1NCwgMTMwMjEsIDY0NDk0LCAzMTM2LCAxOTQ3NTgsIDE5NDc1NywgMTk0NzYwLCAxMzAyMiwgNDI3MzcsIAorICAgIDk5NTYsIDAsIDAsIDc0NTUyLCAxMDAxNCwgMCwgNDEyNjAsIDExOTM0MCwgMTMwMjAsIDEwMDI0LCAxOTQ3NjQsIDc0NTgzLCAKKyAgICA3NDM0MCwgNjk2ODEsIDAsIDQzMDAxLCA4MDI5LCAwLCAwLCA5ODM3ODAsIDMzMzUsIDAsIDAsIDk3NzYsIDEyMDUyNiwgCisgICAgMTk0NzQ4LCA1MjE1LCA0MjY0NCwgMzMzMywgMTYzMiwgMTk0NzUxLCA2NDg0OSwgMzM0MiwgNzg1ODIsIDUzNjMsIDEyOTU3LCAKKyAgICA3ODU4MSwgNDE1NiwgMCwgMCwgNjQyMSwgNzg1OTEsIDE2MTEsIDc4NTg5LCAxMzAxOCwgNzQyNTcsIDc4NTg4LCA3NDU0MiwgCisgICAgMzMzNywgNDUzNywgNjc4OTUsIDExNzM2LCAwLCA2ODYwOCwgNjQ4MiwgNDIxNCwgNzM3OTAsIDExOTQ1LCAwLCAxMzA0NiwgCisgICAgODgzOCwgNDI1LCA0MDI1LCAxMDcwOSwgNzg1OTUsIDIxMDgsIDIzOTIsIDEzMDQ3LCAwLCAwLCA2ODE5LCAxMzA0OSwgCisgICAgNjQ5OSwgOTIyNDMsIDEyNDI0LCA2ODYxNCwgNzM5NDQsIDEzMDUwLCA5OTI0LCAxOTQ3NDUsIDY1MDcsIDEyNzkxOSwgCisgICAgOTQwNzMsIDEyODA2OSwgMzI3NywgODkyOSwgNDk0NywgNDEwNTUsIDAsIDE5NDcyMiwgMTk0NzIxLCAxOTQ3MjQsIDEzMDQ1LCAKKyAgICA2NDYyNiwgNjYwMzQsIDc3NTEsIDE5NDcyNywgODM3MSwgMTk0NzI5LCAzOTk3LCAxMjgwNiwgODc2OCwgMTMwNDQsIDAsIAorICAgIDEyNDIwLCA0MDI0LCAxOTQ3MzAsIDQxMDU0LCAxMDc4LCA5NzU3LCA2OTczNiwgNDEwNTcsIDAsIDAsIDAsIDAsIDk4Mzc5MSwgCisgICAgOTIyMTAsIDkyNDExLCAwLCA0MTQ5NiwgMCwgOTE2NSwgMTU3MiwgMTE5MTEsIDAsIDExODg0MiwgMjM0NiwgMTMyNzAsIAorICAgIDg5NTgsIDAsIDk2NDYsIDM3NzMsIDQzMTgzLCA2NDAxLCA1ODMxLCAwLCAwLCAxMzA0MywgODA1NiwgOTI0OTQsIDY1NjgxLCAKKyAgICAyMDgsIDEyNzM4MiwgNDE1MTQsIDAsIDAsIDAsIDEwNjk5LCA2NDA4LCA5MjIyNywgNzgyNSwgNTY2MSwgMCwgMTIwNjMwLCAKKyAgICAzNjAzLCA0MTEwOSwgMjM5OCwgMzU0OCwgMTI2NTk2LCAwLCAxMTk5MzMsIDAsIDMxMTUsIDk5MTgsIDAsIDgyOTQsIAorICAgIDQyOTEyLCAwLCAwLCAxOTQ3MjYsIDQ4NzYsIDY1ODA0LCAwLCAwLCA0MzQ2OCwgOTgzMjc0LCA0MTU1OCwgNDE0NzEsIAorICAgIDczOTUwLCA4MTU4LCA5OTQ0LCA0MTQ3MiwgMTIwMjk4LCAxMzA1MSwgNzg2ODksIDMxNDMsIDE5NDY3NCwgNjcwMSwgCisgICAgNDE1NTksIDE4OTYsIDY2MjU2LCAxMzA1MiwgMTk0NjgwLCA1NjY1LCAwLCAxMTkwNzEsIDcwMjUsIDYzOTc0LCAwLCAKKyAgICA3NDM1MiwgNzQxNjEsIDQxNTQsIDk4NjMsIDQzNTUwLCAxMjMxMCwgNTY2MiwgNDIzODIsIDE1NjQsIDczOTI0LCAxMTIxLCAKKyAgICA3ODMxOSwgNjM5NTksIDAsIDk5NDIsIDEzMjMxLCAwLCA2NDc1MiwgNDczMiwgMTk0NjY2LCAxMTU5NiwgMTE5OTMxLCAKKyAgICA2NTE4NywgMTYyNiwgNjM5ODMsIDEwMTEwLCA2NDc3MiwgNDIwMjQsIDY0MjAsIDQyMDI4LCAwLCAxMDUwOSwgMjc5NSwgCisgICAgNDkxMCwgMTk0NzI4LCA2OTIzMSwgNjQ3NTMsIDYyNzUsIDkzOTU3LCAxMTg4MzAsIDYzOTc4LCAxMTA0NCwgMzIyOSwgCisgICAgNjQyMywgNDI3NzQsIDAsIDAsIDAsIDEyODIzLCAyMzMxLCA5MTc4MTAsIDcwODUsIDYxMzcsIDAsIDc1MjQsIDAsIAorICAgIDkxNzgwOSwgODM0NiwgMCwgODMzOCwgMTI4MzE1LCA2NTA0MywgMCwgODIyLCAxMjc5ODQsIDk5MDMsIDY0NzIxLCA0MjcyMiwgCisgICAgNjk4NzcsIDE5NDY1OSwgNzg2NTUsIDc4NjYxLCAxOTQ2NjAsIDc4NjYyLCA0MTI2NSwgNTMxMSwgMTc5NSwgOTY1LCAKKyAgICAxMTg3OTEsIDEwNTg3LCA3ODA1NSwgMTEyNzgsIDc4NjMyLCAxOTQ2NDAsIDAsIDEyOTQ2LCAxOTQ2NDEsIDExOTM0MSwgCisgICAgMTIwMzQ5LCA2Mjk0LCAzMTQ0LCAxOTQ2NDgsIDE5NDY0NywgNjUwMTksIDE5NDY0OSwgNzM5OTAsIDAsIDk4Mzk2MCwgNzQ4LCAKKyAgICA0MTA2NywgMjMzMCwgNTM1LCAzMTQ4LCAxMjM3NSwgNzg3OTksIDE5NDYyOSwgMTA1NTYsIDI0NzUsIDEyMzg4LCA0ODg5LCAKKyAgICA4OTY4LCA2Nzg2MywgMzU5MywgMCwgMCwgMjM0MiwgMCwgMTk0NjM0LCA2NTIwNiwgNDg5NCwgMTk0NjM1LCA0ODkwLCAKKyAgICAxOTQ2MzcsIDkxNzgwNCwgNTgxLCA0ODkzLCA5ODM2MTYsIDY1NzEsIDY1NTQ1LCA0ODg4LCA0MTU3LCA3ODA0OCwgNzgwNDksIAorICAgIDc4MDQ2LCA3ODA0NywgMCwgMTAxMTksIDY0MTUsIDQyODkzLCAwLCA2OTcwMiwgMCwgMCwgMTEzNzUsIDY0NzQ2LCAyMzMyLCAKKyAgICA3ODA2MywgNDEyLCA3ODA2MSwgNjQ5MzIsIDQyODgwLCA0MzU4NywgMCwgMCwgMCwgMCwgNjUxOTcsIDc4MDY2LCAxMjIwMywgCisgICAgNzgwNjQsIDc4MDY1LCA4OTEzLCA2NTg1NCwgNDg3NSwgNjU4MTEsIDEyMDM4MSwgMTIwMzg5LCAxMTg4ODgsIDkzNDQsIAorICAgIDg4MjYsIDEyMDM4NiwgMTIwMzk1LCAxMzEwNCwgNzQ3ODEsIDExOTk3LCAxMjAzOTMsIDc4MDc1LCAwLCAzMTM0LCAwLCAKKyAgICA2NTY5NiwgOTIzMzEsIDAsIDY2MjE3LCAwLCA4MzM0LCAxMTkzNDQsIDAsIDM0NDksIDAsIDAsIDc4NDE0LCA3ODQxMywgCisgICAgMTE4OTUwLCA3NDAxMSwgMCwgMCwgMCwgMCwgMTkwOCwgMTIwMTY3LCA0MzI4LCAxMDczNCwgMTI3MDE0LCAwLCAxMjc5MTQsIAorICAgIDc4MDQsIDc4MjcyLCAxMDgxMSwgNjI1MCwgMTEzMzksIDQ5MTQsIDExMzY3LCAwLCA3ODA1NCwgNDkxNywgNzQ1MTYsIAorICAgIDc0MjA4LCA2NDI4NSwgNDkxMiwgNTQ2NCwgMTI3ODM2LCAxMTg4OTMsIDIzNjEsIDc5NzEsIDc4MDcyLCA3ODA3MywgCisgICAgNTUyNDMsIDc4MDcxLCAwLCA4MDg2LCA3NDMxNywgNjcwNywgODMxOSwgMjMxMiwgNDA5NzcsIDEwOTYwLCA0MDk2MiwgCisgICAgODMwNSwgMTI1NzMsIDk4MzYwOCwgNDA5ODAsIDk4Mzk2NCwgMTMyMDIsIDAsIDEyNTgyLCA3ODI4MiwgOTgzMDQ4LCAKKyAgICA2OTg1NiwgNDI0MzgsIDU1MjIxLCA2Mjg4LCA3ODI4MCwgMTI3OTQ2LCA1NjUzLCA0MjQwMCwgMTA4OTEsIDc2OTgsIDU2NTgsIAorICAgIDc0MDQ1LCA3MDAzOSwgMCwgMCwgNDkxMywgMCwgOTgzOTU5LCA3MTMzMywgNDIzMjYsIDEyODE5NCwgMTI3MjgsIDkyNjg1LCAKKyAgICA0MjQ3OCwgMjMyNywgMCwgMTI1NjMsIDQyMjg3LCAxMjcwNSwgMCwgMCwgMTI1ODgsIDg4MjEsIDYxNTMsIDI4NjcsIAorICAgIDE5NDcwOCwgNjYzMTIsIDY5OCwgMTI4MDA3LCAxOTQ2MDYsIDEwMzU2LCA3MDAxNywgMTk0NzEzLCA2NTEsIDEyNjQxLCAwLCAKKyAgICAwLCAwLCAwLCA0MTU1MiwgNjUxMTUsIDc4NDY1LCA3ODQ2NywgNzg0NjMsIDc4NDY0LCAxMjg4NTEsIDc4NDYxLCAxOTQ2OTcsIAorICAgIDc0MzU2LCA2NDk0NSwgNDcxNiwgNDMyNzcsIDAsIDc4NDc0LCAxMjM0MCwgMTIwNTY4LCAwLCAxOTQ3MDAsIDU1MjY0LCAKKyAgICA0MTIxMSwgMTIwNjc2LCA4NzAzLCA1NDYyLCA5MTc2MjksIDk4MzQ5NSwgMTAxMDEsIDAsIDcwMDQ5LCA4NDc5LCA0MTUxLCAKKyAgICA0MTkzMywgMCwgMCwgNjYyNTQsIDEyMDgyMSwgMCwgMCwgMTI4NjU0LCAwLCAxMTkxOTQsIDc0MDUwLCA5MjcwMSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTIyNzgsIDAsIDAsIDAsIDI3MDAsIDEyNTc2LCA3ODQyLCAxMjg5OSwgMCwgMCwgMjY5OSwgMCwgNzM4NDUsIAorICAgIDI5ODUsIDkyNTY4LCAxMjY0NzUsIDkxNzg0NSwgMTIxOTIsIDExOTMxNCwgMCwgMTE5MzEyLCA5ODI3LCAxMTkzMTAsIAorICAgIDExOTMxMSwgMTE5MzA4LCAxMTkzMDksIDExOTMwNiwgMTE0ODEsIDQxMjEwLCAxMTkzMDUsIDAsIDM1LCA3ODQ4MSwgCisgICAgNzg0ODIsIDY2Njk0LCA2ODQ3OSwgNzg0NzcsIDc4NDc4LCA0MzU5NiwgNjA5MCwgNjQyNTcsIDc4MTIsIDEwNTM0LCAwLCAKKyAgICA3ODQ4NSwgNzM4NDgsIDY3OTc1LCA0MjcyLCAwLCA0MDk2NywgNDA5NjQsIDkxNzgyNSwgMTI3MDQsIDc4NDg3LCA0MzMwNiwgCisgICAgMCwgNjQ0OTcsIDEyMTM4LCA3OTMwLCAwLCAyMjkyLCA2ODIxNiwgMCwgOTE3ODI2LCA1MjQ0LCA0MTg5LCA5NDEwOCwgCisgICAgNjc1OTYsIDEyNzUwNCwgNDE4OCwgMTg3OSwgMCwgOTY4LCAwLCA0Mzc0MywgMCwgODg3MywgMjI3OSwgMCwgOTE3ODI3LCAKKyAgICA2NTU1NSwgMTI1NzQsIDAsIDAsIDAsIDc0NDkwLCAxMjcwOTksIDQzNjU3LCAwLCAwLCAwLCA0MjY4MiwgMTI1NzgsIAorICAgIDEyNzIwLCAwLCA0MTIyNywgMCwgMTIzNDYsIDEyNzEwMSwgNjQ4NDgsIDAsIDAsIDcyNTEsIDAsIDAsIDExODg1MCwgCisgICAgMTE5MTQxLCAxMjg1NDYsIDY2MDE1LCAwLCA5NTksIDg4ODUsIDEyNTY0LCA2NjQ1NywgNzg4MDgsIDk0NjksIDk2MzIsIAorICAgIDkyMzIzLCA3NDc2MSwgNjQzMjMsIDEyNzMzNSwgMCwgMCwgMCwgMzEwLCAwLCA0MTI4MSwgMTA5NzYsIDAsIDcxMzI1LCAwLCAKKyAgICA3NDI2NiwgMTAwNTQsIDY0OTcsIDg1NzQsIDAsIDkwMTIsIDE5OTU4LCA3NDQyMCwgNjUwODksIDEzMjE1LCAxMjczMCwgCisgICAgNjUxNjMsIDc0MDQ0LCAzNzQsIDQzMTk1LCA4MTYsIDEyMDE2MSwgMCwgMCwgNDE5MzQsIDc0NjUsIDAsIDEyODE2OCwgCisgICAgOTgzMjY4LCA0NzE1LCA2MTAxLCA5NDEwNiwgNDE5MzYsIDAsIDQ4NzksIDAsIDY1NDQ2LCAwLCAzMDcsIDEyNzE0NywgCisgICAgOTU4NSwgNTM3NCwgOTgzMjY3LCAxMjgwNTksIDAsIDAsIDEyNjYxOCwgMTIwMzkwLCAwLCA2NTU2NywgMTIwNjE0LCAxOTI5LCAKKyAgICAwLCAxMjE0MiwgMCwgMTIyMzYsIDQxNDE5LCAxOTQ2MTgsIDEyMDYxMCwgMTI5ODIsIDE5NDYyMywgNTM3OCwgNzg3OTEsIAorICAgIDEyODY3OSwgNDE0MjEsIDAsIDQ0NjIsIDAsIDEyNjU5OSwgMTI4MDkyLCA4MjEsIDAsIDI0OTgsIDU4MDAsIDEyMDE1NywgCisgICAgOTgzMTE1LCAxNzYwLCAyNDIxLCA0NDY5LCAyMzI0LCA4MjgsIDM2MTEsIDc4NDAwLCA3NTcsIDExODUsIDAsIDc4NzcwLCAKKyAgICA0MzU5NywgMTA2MjgsIDc0ODA4LCAxOTQ1NzIsIDc5OTksIDQzOTcxLCAwLCAwLCAxMDYzNCwgMTA5NDIsIDc3MTMsIDIzNDgsIAorICAgIDAsIDY0Mzc0LCA0MzgwLCAxOTQ2MDgsIDExOTA0NCwgOTk4MiwgNjQzMjQsIDQxMjQwLCA4NjIsIDY1NjI2LCA3ODQ2MiwgCisgICAgMTgxMCwgMzY3MywgNTEzNywgMTk0NjE3LCAwLCA3Mjc3LCA2NTYyMiwgMCwgNzU2NiwgNjQ2ODgsIDE5NDU5MywgMTk0NTkyLCAKKyAgICA3ODA5MiwgNzQzNTcsIDE5NDU5NywgNDc0OCwgOTIyMjgsIDE5NDU5OCwgMTk0NjAxLCA0MjI2MCwgNTg3MSwgMTE5MDc1LCAKKyAgICAwLCA3NDU3NiwgNDQwMTksIDAsIDEyODE4OSwgMzk2NywgMTk0NjA0LCAxMzEzNywgODc3NSwgMTI3OTQ1LCAwLCAyOTYzLCAKKyAgICAwLCA4NDEwLCA0NDU0LCA3MjMsIDEyNzg4MiwgOTY2LCA0NDQ5LCA5MjMzMCwgOTIyMzgsIDAsIDc4MTksIDIzMjAsIAorICAgIDE5NDU4OSwgMzM5LCA0OTY4LCAxOTQ1OTAsIDEyMDM5OSwgODA3NSwgNTUyNzYsIDAsIDgwNDcsIDAsIDc4ODI3LCAxMjYzNCwgCisgICAgNDE1NDIsIDc4NzgwLCA3NDY2LCA2NzA1LCAxMjE3NCwgNDI2MTAsIDAsIDc0NDUyLCA5ODM3NjMsIDE1ODQsIDY2NjQ1LCAKKyAgICA2MDQ1LCA2NzI5LCAxMjA2NDAsIDY1MjE4LCAxMTU1OSwgMCwgNzgwNjIsIDc1MzcsIDAsIDExMzcwLCAwLCAxMDMzMCwgMCwgCisgICAgMTAzOTQsIDAsIDc0MTk0LCAwLCAxMjc5MjksIDk3ODAsIDAsIDEzMDkyLCAxOTQ1NzYsIDc3OTUwLCAxOTQ1NzgsIDcwNzQsIAorICAgIDkyNjQ4LCAxOTQ1NzksIDE5NDU4MiwgMTE0MTQsIDEyODg2OCwgMjUzMSwgMTMwMzQsIDAsIDAsIDQyMTEsIDEyNTksIAorICAgIDc1MTcsIDAsIDAsIDE5NDU2MSwgNDA5OTYsIDEzMDM3LCA3MDkyLCA2NDEsIDUyMTksIDk0MDM0LCAxOTQ1NjYsIDExMDY0LCAKKyAgICA0MTEyOSwgMCwgNDI4NTAsIDEzMDM1LCA5MDc1LCA5MjM4NywgNTQ2NiwgMTI4MTUzLCAwLCA2NDA5OCwgNjU3OTMsIDQ1MzUsIAorICAgIDE5NDU3MywgNDI3MSwgNzg0MTcsIDEyODM1NywgNjc2OSwgNDE0MTAsIDk4MzQ1MiwgNjQyNjIsIDY3NjcsIDQxNDA3LCAwLCAKKyAgICAwLCA2NzU1LCAxMTg4NjQsIDkwNDYsIDEyNzkzNCwgMTI2NjA4LCAwLCAwLCAwLCAwLCA2NzY3NSwgMCwgMCwgMCwgNjQzMzgsIAorICAgIDI1NjMsIDEzMDMzLCAyNDcsIDExODkxNSwgMCwgMTIzMzgsIDQ2NTEsIDY5ODk1LCAxMTI3MCwgMCwgMCwgMTE5MzMsIDAsIAorICAgIDAsIDQxOTAzLCA0MzQ0NywgMTEwMDEsIDAsIDQyMjU1LCAwLCA5MjY2MSwgNjk4MjEsIDQxOTA1LCAwLCAwLCAxMDc3NSwgCisgICAgOTc5MywgNTAwOSwgMCwgNDIyNjksIDY0NTg3LCA5ODMwNjMsIDQyNTM1LCA2OTgxMiwgNjQ1MjksIDQxNDA4LCA0Mjg1MywgCisgICAgMzg3NywgMTIwNzk1LCA0MjY3NCwgODE0NywgNDM1NjYsIDExOTAyMSwgOTgzNzc2LCAxMDIzNiwgNjU5MTgsIDQzNzgyLCAwLCAKKyAgICAwLCA2NDUwNiwgNjk2NTIsIDExODkyMSwgNDc0NywgMTI4MDU4LCA2OTg0NCwgNDMyMDAsIDU4MzIsIDAsIDAsIDUxNDEsIAorICAgIDQyNjAwLCAwLCA0MzIwMywgMCwgOTgzNzk5LCA0MzI4NiwgMCwgMTI4MjExLCA0Mzc3OCwgMCwgNDEzMDUsIDc4Nzc2LCAKKyAgICA0Mzc4MSwgMTEzMDMsIDY1NTQ3LCAwLCA3MDMxLCA4NTksIDAsIDAsIDAsIDYwNTksIDEyNjk4NSwgNTUyMzUsIDAsIDg1MzUsIAorICAgIDAsIDY1MTk2LCAxOTQ3ODcsIDY2MDMyLCAxMTQ4OCwgMTIwNDgxLCAxMjA3ODYsIDQyMjMzLCA2NDE0MCwgOTk0NiwgCisgICAgNjM4ODUsIDE5NDc5MiwgMTE4MjIsIDAsIDQzMTg5LCA5ODM4OTgsIDAsIDE3ODgsIDE1NzksIDEyMDQ4MiwgNzEyOTgsIDAsIAorICAgIDAsIDAsIDkwMjgsIDExOTU3MSwgNjkyMzQsIDk0MDU1LCAwLCAxMjg1LCA2NDg4MiwgNDEyNDIsIDcwMDg2LCAwLCAxMjY0MCwgCisgICAgMCwgNzQwMSwgMCwgMTI2MjUsIDY4MTk4LCAwLCA3MDA4MiwgMzk0MCwgNDE1OTcsIDQzNzU0LCAzMzk2LCAxMjY0MiwgCisgICAgODY2NSwgMCwgMCwgMTI2MzAsIDE2NTMsIDkxNzgxNSwgMTAxNTMsIDAsIDYxNjYsIDEyMDUxNiwgMTE4OTg5LCAwLCA4ODE1LCAKKyAgICA2NjY3MywgNjUwNDYsIDkyODUsIDkxMywgNDIyNTksIDExOTMxNywgMTE5MzE4LCAyMTQyLCA2ODQ1NCwgNDI0ODUsIAorICAgIDk0MDEyLCA3ODc4LCA4MjExLCA0MjI5MywgNjQzNzcsIDAsIDkyNjQzLCAwLCAxOTQ2NzMsIDEyMDMyLCAwLCA5NzI1LCAwLCAKKyAgICA3ODQzMSwgNTI2MywgMTI4MTgsIDc4NDMwLCA0MTkzOSwgMTAwMjIsIDY1Mzg3LCA3ODQxOSwgNDI3NzcsIDEwMTM5LCA5ODAsIAorICAgIDQzNjk4LCA2NTM4NiwgMjIwOCwgMCwgNDM3MDEsIDQzMTk4LCA3MTg0LCAxMjA2NzMsIDE5NDc5NywgOTE3ODE5LCAxMDA4NSwgCisgICAgMTE5OTkyLCAwLCAxMTk5OTMsIDY2MzQsIDkyMzczLCAwLCAxMTkzMjMsIDgwNzIsIDExOTMyMSwgNDM3MDAsIDAsIDg4NzIsIAorICAgIDc3ODMsIDkxNzk5MiwgMTIzOTgsIDgyMzcsIDAsIDAsIDEyMzk1LCAwLCAxMjY5NzcsIDEyMDU2NSwgOTkxNCwgMjIxNywgCisgICAgOTE3ODU0LCA3Mzk3NSwgNjM2NywgNjM1MSwgNjY2ODgsIDAsIDc4MTA3LCAwLCA2NDczNSwgNDEyNDMsIDkyMTk5LCA3ODA4LCAKKyAgICAxODI5LCAwLCA0MTkzNywgNDM1OCwgNDMyNzIsIDYzNTMsIDAsIDAsIDEyMDQyMiwgMCwgMTcxMCwgMCwgMCwgNjU2MDcsIDAsIAorICAgIDQ5LCA2NjI3LCAwLCA2MjU4LCAxMDY4MywgNzg2NzIsIDk3NDEsIDc4MzI5LCA1NjQ5LCA3ODQ0MSwgNDM0NDMsIDY0NDE4LCAKKyAgICAxNjQzLCA2NTIxMywgODQwNSwgMzQ3MCwgMTI4MjI1LCAxMzIxMywgNDI0NTIsIDc4MzMxLCAxMjA2NjQsIDc4NDQ1LCAwLCAKKyAgICAxMDcyLCA3ODQ1NywgNzg0NTIsIDc4NDU0LCA2NTc2LCA0MTk4OCwgNDExMzIsIDY1Njc1LCAxMDgwLCAxMjAwMDIsIDk4ODYsIAorICAgIDU1MjI1LCAxMTAxLCA2ODQwNCwgMTIzMDksIDU1MjI3LCAwLCAxMjYzMiwgMTA4NiwgMTg2OSwgNzg2ODUsIDc2ODAsIDAsIAorICAgIDY1NDU4LCAxMjA3MTQsIDEyNjM5LCAzMzgwLCA4MTIzLCAxMDkxLCAxMjYzOCwgNzk3NywgNDUwMSwgNDEwOTksIDAsIAorICAgIDY2MzA5LCAwLCAwLCAxNDk0LCA5ODMxNDYsIDEyNjYxMywgMCwgMTE2OTMsIDEyNjUxMywgMTA0OTQsIDkyNjU1LCA2NTg3MiwgCisgICAgMTIzNjMsIDExMzg2LCAwLCAwLCAwLCAwLCA2NDU4MiwgMCwgNzM3OTQsIDAsIDgwMjIsIDAsIDEyMDQ2MiwgNzQxMDYsIAorICAgIDEyNDEzLCA5NDA2OSwgOTE3OTk0LCA5MTc5OTMsIDkxNzk5NSwgNTU3MCwgMTg4MSwgNzIxMCwgMCwgMTAxMiwgNDM3NTIsIAorICAgIDAsIDEyMDcwOSwgNzIwOCwgNjY0NDIsIDU1NjksIDk4MzI0MiwgNDIzMzksIDAsIDYwNjMsIDAsIDc4MzgzLCAxMTk1OTQsIAorICAgIDYwNTMsIDY1NjAyLCAwLCA5MjIwMSwgNjQ3MjcsIDkxNjAsIDE5NDgyNywgMCwgMCwgOTIxODAsIDEwNTAzLCAxMTg4MTAsIAorICAgIDYwNTUsIDM4NzAsIDQyNzksIDg0OTAsIDEyMDExNCwgNDMxOSwgNjQ3ODYsIDg2MDIsIDEyMDExMCwgMTEzMjYsIDkyMjA0LCAKKyAgICA5ODMxMTYsIDAsIDEyMDExOSwgNzgzMzMsIDEyMDExNywgMTIwMTE4LCAxMjAwOTksIDEyMDEwMCwgNjUwODcsIDU1NzEsIAorICAgIDM2NzQsIDk3NDAsIDkxMjEsIDU1NjgsIDEyMDEwNywgMTIwMTA4LCA0MjA4NSwgMTAxMDcsIDQyMTU5LCA0Mjg3MCwgCisgICAgMTIwMTAxLCA1ODksIDcwNTAsIDk4MzgwMCwgNDMyODEsIDEwMjMzLCA0MTI2MywgNjYyNTEsIDY1NzI5LCA2NjI1MywgCisgICAgMTI2NDk3LCA3NDA5OSwgNDI2NDUsIDAsIDE5NDgxNSwgODU4MywgMCwgNTg0NywgNjkyOCwgMTI4MDc0LCAwLCAwLCAwLCAwLCAKKyAgICA2NjU5MiwgMTIyMDQsIDkxNzk2MiwgMTk5NjYsIDc3ODU2LCA0MjU2MSwgMTIwNjI2LCA5ODMyNTEsIDAsIDgxMjAsIAorICAgIDEyMDcwMSwgMCwgMCwgMTI4MDEyLCA0MTA2MywgMCwgMTA2NjQsIDAsIDgzNjksIDAsIDQ1NTEsIDE5NDk2NCwgMzM2OSwgMCwgCisgICAgMCwgOTY3MywgNjYzMzQsIDY1NTgwLCAxMDQ3OCwgMTE4OTYwLCAxMjUxNywgNTU3LCA5NDU3LCAxMjAzNCwgOTgzNjcxLCAKKyAgICA2MzU1LCAxMjUxOSwgNDEwMDQsIDAsIDE5NTAyNSwgNzQwOTQsIDAsIDAsIDc3OTcwLCA5ODM1NjAsIDAsIDEyODE3NSwgCisgICAgMTIxMTEsIDM5MjcsIDAsIDEyNTE1LCAxNDc0LCA2Nzg5MywgNTQ5MiwgNjkyMywgOTIyODEsIDEwNDQxLCA3MzgzNiwgMCwgCisgICAgNDM5OTAsIDU0OTMsIDAsIDc0MzE5LCAwLCA2NjYzNSwgMTIwMTksIDAsIDE2MTgsIDAsIDEyMDQ3NCwgOTY0NSwgMTA0MzAsIAorICAgIDkxNzk1OSwgNTg1MywgMTMwNjMsIDEwMzYzLCAwLCAxMjk1NiwgMTI4MTY5LCAxMjA3MjksIDExMzE0LCA5MTc1ODIsIAorICAgIDEyMDYwLCAwLCA3ODM5MiwgMTI4MjYsIDYzMjksIDAsIDEwNTE0LCA2NTUxNywgNzQzOTUsIDI3MDcsIDgzMDksIDAsIAorICAgIDEyNzA1NCwgNzgzOTgsIDQzNTcwLCAyNjk3LCA0MzQyMCwgNzgzOTYsIDEyNzA1NywgMjY5NSwgNDIxNzEsIDAsIDAsIDAsIAorICAgIDY3NjE3LCAxMTg5NzEsIDAsIDI2OTMsIDEyMTI1LCAxMjc2NiwgMCwgMTE2NCwgMTI4ODE3LCAwLCA0MTkxOCwgOTgzMTY4LCAKKyAgICAxMjc1NDIsIDg2ODcsIDY2MDA5LCAxMjE3OCwgNzA1MywgMTI4MDAxLCA3NDY5LCAwLCA1MjQ4LCAxMjIxOCwgMTIwNTM4LCAKKyAgICA2NDI3LCA0Mjg4NCwgNDExMjMsIDAsIDAsIDQyODczLCA0MTEyNiwgOTk5MSwgNDExMjgsIDc0MzcxLCAxMjcwMzEsIDAsIAorICAgIDk4NzMsIDAsIDQyODc3LCA3OTk0LCA2NDc2MiwgMjA1MywgNDI4NDMsIDY1OTEsIDkzNDAsIDAsIDE1ODksIDAsIDI5NiwgCisgICAgNzQ0MzgsIDc4ODUyLCAwLCA2Nzg0MSwgNzQzNzAsIDAsIDg5MjIsIDEyODA2OCwgNzQ2MDAsIDEyNzAwLCA3NDgzNiwgMCwgCisgICAgMTI1NzksIDAsIDEyNTc1LCA2NDE2LCA1NjU2LCAyODkxLCAxMzI2MiwgNjU1OTAsIDUyOTksIDAsIDExNDczLCA1NDQ5LCAKKyAgICAxMjUyLCAwLCA3ODQwNCwgNDE0MzEsIDc0MzY5LCA2NTM3MywgNTI5NSwgOTE3NTY5LCA3NDExNCwgMTIyMywgMTY0MiwgCisgICAgMTc0LCA3ODM5OSwgODgzLCA0MTYxLCAxMjY5MSwgNDI2MDMsIDQxNDEzLCAzMjEyLCA0MTQ1OSwgMzIxMSwgNzQ4MTAsIAorICAgIDQxNDI1LCAxMjcwMjksIDc4NDEyLCA3NDQ1MCwgOTcyOCwgMzg0NiwgODA3MCwgNjE1MCwgNjYzNiwgNDM3MCwgMCwgMCwgCisgICAgNzQxNzgsIDc0NTg3LCA3NDExNywgMCwgMCwgMCwgNDk4NiwgMTIxODksIDAsIDY3NjQ4LCAxMjA0OTksIDk0MDAxLCA0MjU3LCAKKyAgICAxMjEwNCwgNzc5NDIsIDYyMjAsIDkwMDQsIDY1NTYxLCAwLCA3Nzk0OSwgMCwgNjgxMzUsIDkxNzU3NiwgNzc5NDYsIDAsIAorICAgIDY5Njc5LCA2OTY4NCwgOTg5MCwgNzg1NjEsIDEyOTcxLCA3ODQ1MywgOTI1NTYsIDczODk4LCAxMTk3OSwgNzAwNTEsIAorICAgIDExODkwMCwgOTE3ODk0LCAwLCA5NjM1LCAxMjYwMCwgODg3MSwgMCwgMCwgMCwgNjQ2OSwgNzQyMjcsIDAsIDY1MzA0LCAKKyAgICA0Njc5LCAxMDIzMCwgNjQzMDAsIDY0ODY3LCAzNDI3LCA0MjQwLCAwLCAwLCAwLCAwLCA0MjkxNiwgMCwgMCwgMCwgNzI4MiwgCisgICAgNzg3MjgsIDY1NzMzLCA0NDQ1LCAxMjcxMzgsIDEyODA4MiwgMzQ5NCwgNzQ2MDYsIDY1NTUsIDAsIDc3OTc2LCAwLCAwLCAKKyAgICA3ODU2NiwgMCwgOTgzMTg5LCA2NTg5OCwgOTgzMjQ0LCA2NTMxMiwgNTQ0NywgMCwgMTI4OTUsIDY1NTkzLCA0MDEwLCAwLCAKKyAgICA0MTEwNiwgMCwgNjQ0NDgsIDAsIDQxMTA1LCAwLCA2NTgyMCwgNjIzMiwgMCwgMTI4MjgwLCAwLCA0MzYwOCwgMTE5MDkxLCAKKyAgICAwLCA2NTM4LCA0MzM1LCA3ODM2NCwgMzk0MSwgNDExMjIsIDExMDYxLCA3ODM2MywgNjQ4OTIsIDkxMTMsIDE5NTQsIAorICAgIDEyMTU1LCA5ODM2NzQsIDQyODc4LCAxMTUwMCwgMCwgMCwgNzQ1NzgsIDAsIDY1ODMyLCAwLCAwLCAwLCA3Nzk3NSwgCisgICAgMTE5MjMwLCA0NTg2LCAwLCAzNTAsIDEwOTUxLCAwLCA1MDksIDAsIDAsIDkyMzA3LCAwLCAwLCA1MTMzLCAwLCAwLCA5NTAwLCAKKyAgICAwLCA0OTU3LCA2NDc0MSwgMjQyMiwgMjIxMiwgOTgzMDgwLCAwLCAwLCAyNDk2LCAxMTUxNiwgOTQ0LCAxMTg4NTEsIDM4OTAsIAorICAgIDEyMTY4LCAxNDM4LCAwLCA5ODMxMTcsIDAsIDQxOTQ3LCAxMjIwLCAxMjA4MjgsIDEyODU1NSwgMCwgMCwgMTU3MSwgCisgICAgNDI2MzAsIDQxOTQ5LCA0MjgwNSwgODI3MCwgOTQzLCA1NjQsIDAsIDMxMiwgNDE5ODAsIDk4Mzk0NCwgMCwgNzgxMjAsIAorICAgIDg4NzcsIDI2OSwgNDQyOSwgNjI3MiwgOTYxNywgMTQ2MCwgNjk1NCwgNzg2NTcsIDQxMTIwLCA2NTEyMSwgMTA4NjIsIAorICAgIDYwNjAsIDQxMTE5LCA0MTQxNiwgNzQzNTUsIDQxNzMsIDAsIDAsIDAsIDE5MDYsIDkxNzk4NiwgMTE1MzIsIDc0MDczLCAKKyAgICAxMjczMzgsIDAsIDE5ODUsIDYyOTYsIDk1ODIsIDkxNzg5NSwgNjQyODcsIDAsIDc4MTE1LCAxMTQyOCwgMTczMCwgMjQ1NywgCisgICAgOTE3ODA4LCAxOTkxOCwgMTA0NjksIDAsIDAsIDc3MDMsIDg4NDAsIDgwMzUsIDAsIDAsIDkyMjMwLCAwLCA2MTI5LCAwLCAKKyAgICAxMjg1MjgsIDEyODI2OCwgMCwgNzg3NCwgODY4MSwgMTE5MDkyLCAwLCAxMzEzNiwgMCwgMCwgNzAxMDIsIDYzODg2LCAKKyAgICAxMTg4ODEsIDk2MDUsIDcxMzA4LCAxMzIyMCwgMTI4Nzc2LCAxMjAyNzQsIDU1MTQsIDAsIDkyMjgsIDAsIDAsIDAsIDUyNDAsIAorICAgIDk4MTEsIDEwMDEyLCAzMDk2LCAwLCAwLCA5ODMzNTEsIDY2Njc2LCA2NTg3MywgMCwgMCwgMCwgOTUwMSwgMCwgMTI3MiwgCisgICAgNjQ1MzYsIDY1NDY1LCA2NDY1NCwgNzQ2NywgMCwgMTQ2NywgMTAxNTgsIDEwMDQwLCAwLCA5NTE5LCAwLCA5MTc4MTIsIDAsIAorICAgIDExODg5OSwgMTIxOTMsIDAsIDAsIDAsIDAsIDk4MzM1MywgMTk5MzUsIDAsIDkyMTYyLCA2OTY3NiwgMCwgMCwgMCwgNTI3NSwgCisgICAgMCwgMCwgODYzNywgMCwgMCwgMzc4OSwgNjM4ODAsIDExNDcxLCA0MzU1NCwgNjU4NjIsIDExNDc0LCA2NjMzMiwgNjY2MDMsIAorICAgIDEyODEzOCwgMjQyNiwgMTIwNDIsIDkyMTk0LCA5ODM5MTEsIDk1MzcsIDM5NjEsIDEyMTE1LCA3Nzk1MywgMjYwNSwgNDUwMCwgCisgICAgNjQ1NjEsIDU1MjI0LCA0OTgxLCAwLCAwLCA2Mzg3NiwgMTE2NjcsIDQyNjg2LCA3Nzk3MywgNDIzNjIsIDY0Njg2LCA0NDk5LCAKKyAgICA0MTY0OSwgNzU4OSwgMCwgMCwgMzIzNywgMCwgNjgyMTUsIDkxNzkwNCwgODU0MSwgNzgyOTgsIDcwMDM0LCA0MTg2NiwgMCwgCisgICAgMCwgMCwgMCwgNjk5MjQsIDQzNTU1LCAyODIzLCA5NTU5LCAxMDA2MCwgNDE5NDAsIDgyOTksIDQxOTQ1LCA3MTMyLCAKKyAgICA0MTk0MSwgMzMwOCwgNzE5MCwgNjQ4ODAsIDg2MTQsIDY1MjIwLCA0MTQ5MywgMCwgNDE2OTksIDEwNzYyLCA0Mzc4MCwgCisgICAgMTI5OTksIDAsIDAsIDgxMDYsIDQxMjgsIDAsIDYyNzQsIDQ0OTQsIDAsIDQwMTIsIDEwMzk1LCA5ODM1OTEsIDQzNjMzLCAKKyAgICA2NTQ0NywgMTI2NTExLCAwLCAxMTAwNCwgNjk1LCA3MzksIDY5NiwgNzYxMSwgMCwgNDI3NTUsIDc0ODAyLCA5MjI3LCAKKyAgICA3NTA2LCA3NTEwLCA2OTkzNywgNjkxLCA3MzgsIDc1MTEsIDc1MTIsIDc1MTUsIDM4NjgsIDY4OCwgNDE4NDcsIDY5MCwgCisgICAgMjU0OCwgNzM3LCA5NzQsIDgwMDMsIDc0MDYsIDkxNzkxMSwgMCwgMTI4Njg4LCAzOTg1LCA5MTc5MTIsIDY1ODYwLCAKKyAgICA2MzkyMSwgNzA1MSwgNjk3NzcsIDQ2ODIsIDkxNzgwNSwgMTI4MDksIDY0MDYsIDQ2ODUsIDkyNTA1LCAxMDg3OSwgMTAzNDcsIAorICAgIDQ2ODAsIDYzNDEsIDAsIDM4NTEsIDgxMzIsIDc0MzI1LCAwLCA5MTc5MDcsIDAsIDQxOTU4LCAxMTkxNzYsIDkxNzkwOCwgMCwgCisgICAgMCwgNDI2NTcsIDkyNDY4LCA3NjQzLCA0MjM3MywgMTE3MTQsIDY3NTg3LCA0MzU2OCwgOTgzMTc1LCAxMTcxNywgNzY1MCwgCisgICAgMTA1OTQsIDY0OTUxLCA3NjQ3LCA3NjQ5LCAxMjgxNTUsIDc2NDYsIDAsIDc4MDgyLCA5NjUxLCAwLCAzODkxLCAwLCAwLCAKKyAgICAyMzM3LCAxNzM1LCA3NDMyNCwgNjc4NjAsIDIzNjMsIDk4MzEzNSwgMCwgNDM1NjEsIDAsIDAsIDc0MTQ2LCAxODYwLCAKKyAgICA3NDk1LCA3NTgwLCA1ODEyLCA3NDk3LCA3NTg0LCAxMTkxNDAsIDEyNzg1MywgMCwgMTIwMzQ3LCA3NzI3LCAwLCA4NDk4LCAKKyAgICA2OTgxOCwgODk0OSwgMzA2NSwgNDI3MTksIDcxMzUsIDE1NjksIDkyMzc1LCAxMjUzNCwgMTIxMjQsIDc2OTAsIDAsIAorICAgIDEyNTMzLCA5ODM4NzksIDY0MTgsIDQ1NDMsIDc4MDg2LCA2OTY5LCAwLCA3NDgwMCwgMCwgNjc5NzQsIDExOTgwLCAKKyAgICAxMjg2NTAsIDk4MzgwMSwgNjM4OTQsIDEyMDc2MCwgMTIyODIsIDY2MTkyLCAwLCA3NDU5MiwgODg1MCwgNzQyNzUsIDkyMzgsIAorICAgIDEwNjE3LCA5MTc1NDUsIDAsIDkyNjI1LCAwLCAxMjc5MSwgMCwgMCwgMTI3ODQzLCA0NDQ3LCA3MzczMiwgMTI3OTMsIAorICAgIDEyOTAwLCA5MjM3NywgMTA5NTAsIDAsIDc4MDg3LCAxMjc5MCwgNDE0MDAsIDExOTEyOCwgNjY2MDcsIDEyNzkyLCA0MjIzMiwgCisgICAgMTk0OTM4LCAxNzQ0LCAxMjc4OSwgMTAzNjYsIDEyMzE3LCA0MTMxMCwgOTgzODY5LCA0MTM5OSwgMCwgMCwgNTUyNTgsIDAsIAorICAgIDEyNjkwLCAwLCAwLCA0MzY3MiwgMTI3ODQwLCA0MTY1MiwgMjk3NCwgOTAxMCwgMTEzMTUsIDAsIDI3OCwgMCwgNDE0MDUsIAorICAgIDExOTI1NCwgMCwgMTAwNzcsIDYzODUzLCA3NDU1NywgNDI1ODYsIDAsIDAsIDYwMDIsIDAsIDQzNTUzLCAwLCA2NzkwMywgMCwgCisgICAgMTI3ODcsIDQxMzA4LCA3OTM0LCA2NTMwNiwgMCwgMCwgMCwgODY0NiwgOTgzMTg2LCA3NzgyOSwgNzEzNjAsIDAsIDY0MTMsIAorICAgIDY1NTAsIDAsIDE5NDAsIDAsIDQzNjM3LCAyMjAsIDY1MTkzLCA0MzU1MSwgMTA2NzgsIDEwMDQ0LCAxMjgzMjIsIDAsIDAsIAorICAgIDY4NjU5LCA2NDAzLCA1NzA3LCAxMDM5MywgMTI3NTMyLCAwLCA2NjYxNCwgMCwgMCwgMCwgMTAyOTcsIDAsIDM3NDIsIDAsIAorICAgIDM5NTksIDAsIDAsIDAsIDI0NjcsIDAsIDYwMDMsIDYzODQ0LCA2NjYzLCA4MDQwLCAwLCA0Mzc1OCwgNDE4MiwgNzgxNzEsIAorICAgIDQ2NzYsIDEyMDUwMSwgMCwgMCwgMjUxMCwgMCwgMTAyMDgsIDc4MTY4LCA5MjM2MSwgMTE1NDAsIDQzNTQ2LCA2NjkyLCAwLCAKKyAgICA0MTA2MCwgMCwgNDY2OCwgOTA4MywgMCwgMCwgNzgxNDQsIDE1NTksIDYzODMxLCA5Njc3LCAxMjAyNjAsIDAsIDY1MjU2LCAKKyAgICAwLCA3NDA3MCwgMCwgMCwgMzY1LCAxMjA1NiwgNDMwMjcsIDEyMDQyMywgNDE3MTYsIDEyODIzNiwgMCwgMTIwNDcyLCAKKyAgICA1NTE2LCAyODQ1LCA3NzE3LCA4MDM2LCA0MTcxNywgNzM4MjcsIDU0NCwgMTIwNDUsIDYyNzgsIDAsIDU1MTUsIDAsIDAsIAorICAgIDk4MzA1MSwgNjUzMzksIDQzMjIxLCAyMjExLCAwLCA1NTE3LCAwLCAwLCA3NDg0MSwgNjc4ODQsIDAsIDY3ODkwLCA2Nzg4NSwgCisgICAgNjc4ODAsIDY3ODgxLCA2Nzg4MiwgNjc4ODMsIDAsIDAsIDY3ODc5LCAxMjcxODgsIDE5MDIsIDY3ODg3LCA5NjM4LCAKKyAgICAxMjk3NiwgMTI2NTQ2LCAxMjQ4MywgMTIzNjgsIDQxNzY5LCA0MjcyNiwgNDE3NjUsIDczNjEsIDY2NjcsIDY3ODc0LCAKKyAgICA3NTU2LCA2Nzg3OCwgNzQzNTEsIDExMjY0LCA5ODksIDQyNjc3LCA2Nzg4OSwgMCwgMTMxMSwgOTE3OTY2LCA0MzI2LCAKKyAgICAxMTAwMCwgNjM4MjQsIDEzMDY4LCAxMDkzMiwgMTI4ODgwLCA2OTE3LCA3ODE1NSwgMCwgOTQ5LCA3ODE2MiwgMCwgNjE0OCwgCisgICAgODYwNSwgNDIyNTMsIDc4MTc3LCAwLCAwLCA0MjcxNSwgMCwgMCwgMCwgNjM4NzEsIDAsIDQxNzk2LCAxMjY5LCA2NTMwLCAwLCAKKyAgICA2NTA1NywgMCwgNTE0NCwgMTIyMjEsIDQyNzE2LCAwLCA0NDMxLCA0MzMxLCA5ODM3MjksIDEyODY3NSwgNDE4MzQsIDUyNzksIAorICAgIDAsIDEwMzM2LCA4MzEyLCAwLCA0MjcwMSwgMTI4ODI1LCAwLCA3ODE2NSwgNjYwMzYsIDAsIDAsIDY0MjgsIDQyMjcwLCAwLCAKKyAgICA5ODM1OTYsIDQzMDU5LCA0MjY2NiwgNTI1NiwgMTA2NywgMjU1LCAxMjEzMSwgOTgzNzIyLCA5NDkzLCA5ODM5NjgsIAorICAgIDQxMDE0LCAxMTc5MywgMTk0OTIwLCAwLCA3NDM5NCwgNDM0NjAsIDEwNjUzLCA0MjcyMywgOTgzODU0LCAxMTk2MzIsIDAsIAorICAgIDY1NjAsIDcwMTYsIDc0Mjc0LCA5ODM2MTUsIDQzNTU2LCAzOTI5LCA2Nzk3NywgNjYxNCwgMjc2OCwgOTI1MDQsIDk3NDYsIAorICAgIDUxMzUsIDExODExLCAxMjc5NiwgMTE5NTMsIDAsIDY5NzYxLCA1MTM5LCAzNDYsIDc0MzAzLCA2MzA1LCAxMjc5NSwgNDY3NSwgCisgICAgNTE2OCwgNzg1NTIsIDEyNzc1MywgNzQzMTUsIDc0MzYxLCA4MjUzLCA4ODE3LCAxMTM2LCAwLCA0MzU2MywgOTIyMzIsIDAsIAorICAgIDE5NDc1MCwgNzM5MiwgODIzMCwgOTM2NSwgMCwgMCwgOTgzNjA3LCAwLCAwLCA0MDQxLCAwLCAyMzU3LCA0MzI0MCwgCisgICAgMTI3ODYsIDIyOSwgMTE5ODg1LCAxMTk4ODQsIDQ0MDA0LCA3MTQyLCAxMTk4ODEsIDEyMzUwLCA2NTU1NCwgMTE5ODgyLCAKKyAgICAxMTk4NzcsIDExOTg3NiwgMTI3ODUsIDYzODYzLCA0Mzc5NSwgNzc3MCwgMTA3MTIsIDY0ODUzLCAxMjY4NiwgMTE4OTE2LCAKKyAgICA0MjM3NSwgMCwgMTI3MjM4LCA2NjM1MiwgMTA0NzAsIDAsIDExMDU5LCAxMDc5MSwgOTE3OTQ0LCA0NTAsIDExOTMyOCwgMCwgCisgICAgMTA0MzIsIDEyMDk3LCA1NDUwLCA2NDY5MSwgMTIzMywgMCwgNDQwMDksIDc4Mjg0LCA2NjMzOCwgMCwgMCwgMTgzOSwgCisgICAgMTE4Nzk5LCA5ODMyMTksIDEwOTI3LCAxNzAxLCA5ODM2NjQsIDIzODgsIDQxNzQ5LCA0MTc2MSwgNTQ1MywgODM2MSwgCisgICAgMTE5ODY1LCA0MTc1OCwgNTQ0NCwgNDE3NjMsIDY0ODg5LCA3MTQzLCA5MjQ5MywgNzg2NzcsIDAsIDkyNDI5LCA3ODE3NCwgCisgICAgNjY0MzIsIDg4MDEsIDMwNTMsIDQzNDAsIDk4MzA0NCwgMCwgNjU4MTIsIDkxNzgzMSwgMCwgNDE4MjQsIDY3OTg1LCAKKyAgICAxMjAyMDMsIDE5NDgwMCwgMTk0ODAzLCA0MjcwMCwgMTk0ODA1LCAxMjc5ODAsIDE5NDgwNywgNzg2NzYsIDkyMzU2LCAKKyAgICAxOTQ4MDgsIDAsIDAsIDQ0OTMsIDQzMzYsIDAsIDIzMTQsIDQzNjAyLCA3ODgyNiwgMTE5MzI1LCAxOTQ4MTEsIDQyNDM5LCAKKyAgICA2NDYzOCwgNDIzMjcsIDQzNTI4LCA0NDg5LCA3MTMzMSwgMCwgMTk0NzkzLCAxOTEyLCA0MjM4NSwgMTAzMDYsIDEwMzcwLCAKKyAgICAwLCAwLCA4ODY3LCAxMDI1MCwgMTAyNTgsIDI3MTIsIDE2MzUsIDc4ODIxLCAxNDEwLCA5MjY3MSwgOTgzMjUwLCAxMTg4NzgsIAorICAgIDAsIDAsIDk5MTksIDEyMDUyOCwgNTU5LCAxMjgxNTcsIDQxODI1LCAxMjc5NzUsIDc4MTg4LCA0ODkyLCA3NDAxNiwgCisgICAgMTk0NzgxLCA2NTQyLCA0MTk1NywgMTI4ODY1LCA1Nzc3LCAwLCA3NTksIDY1NzQ5LCAyMDc5LCA2NTI0OCwgMTI3ODgsIAorICAgIDY0NDg3LCA2NDU1MiwgMCwgMTAyMjMsIDQyMDYyLCAwLCAwLCAxMjY1NzMsIDM2NjgsIDY1NzU0LCA0MzU2MCwgMTIyMjYsIAorICAgIDY3OTkxLCA2NTE0OSwgMjM0MCwgNDE5NTksIDE5NDc4NiwgMTk0Nzg1LCAxOTQ3ODgsIDQzNjE4LCA2NTc0NywgMTA5MzcsIAorICAgIDI5NjIsIDAsIDIzMjEsIDM1ODcsIDY1NzQ1LCA5MjQzNiwgODkyMSwgOTk1MiwgMCwgMCwgNDI3MTQsIDk5NTEsIDQzNDA5LCAKKyAgICAxOTQ3NzAsIDI5NDksIDY2MDEyLCAxOTQ3NzUsIDE5NDc3NCwgMjk1OCwgNjgzNTksIDQxODIwLCAyMzAwLCAyMzk1LCAKKyAgICAxMjg1NjMsIDk5NzYsIDEyMDA0MywgMTIwMDUwLCAxMjAwNTgsIDY4MjIwLCAxMjgxNDMsIDQyODA5LCA0MjgwNywgMCwgCisgICAgMTIwMDQ2LCAxMDE5OCwgNDE1MCwgNjQzNzEsIDgzMTgsIDQxNzkwLCA2Nzk3NiwgNDE4OTgsIDIzNjAsIDQxNzk0LCAKKyAgICA5MTc5NDIsIDcxMzE0LCAxMjc4MTgsIDAsIDAsIDI0MTgsIDk4MzA5OCwgMjQxMSwgMTEzMzYsIDc5OSwgNjM4MjMsIAorICAgIDEwMjc2LCAxMDMwOCwgMTAzNzIsIDkxNzU0MSwgNDE3NzIsIDQyODEzLCAyMzE3LCAxMDI2MCwgMTE4OTgwLCA1NTI4NCwgCisgICAgOTIyMDMsIDAsIDEwMzg0LCA5ODMyMjAsIDAsIDAsIDc3NTMsIDIzNTEsIDY2NTUsIDY0NDg5LCA2OTkzMSwgMCwgNzc4NzIsIAorICAgIDQ0NDMsIDQyNzc5LCAyMzAsIDAsIDAsIDQzNTQ5LCA0ODU1LCA0MjE1MCwgNjU3MzksIDU0NDEsIDQxODk2LCAxMDI4OCwgCisgICAgMTAzMjAsIDAsIDg1NSwgNzA0NiwgNjEwOSwgNjUwNDUsIDYzODM5LCA3ODE5OCwgMjA0OSwgMTAwOTgsIDAsIDc0MTQ1LCAKKyAgICAxMjc5NDMsIDEwMjY0LCAxMDI4MCwgOTE4NCwgMTAzNzYsIDcwMTMsIDQ0NjcsIDAsIDAsIDAsIDQxODg3LCAwLCA0ODYyLCAKKyAgICA5NzM1LCA2NTM3LCAxMjA1OTEsIDc0Mjg2LCAzOTE0LCA5MjE3OCwgOTM5NzYsIDkwNjUsIDEyOTYxLCAwLCAwLCA5MjI1MywgCisgICAgMCwgMjg5LCAwLCA0Njk0LCAxMTQyMCwgNDY5MCwgMCwgMTIwNTE0LCA5MTc5NzgsIDQ2OTMsIDczODkzLCA0MjcyNCwgMCwgCisgICAgNDY4OCwgMTIwNDU0LCAwLCAwLCA2Nzk5NCwgODIzOCwgMzExMCwgMTIwMTYyLCA5ODM5MDgsIDEyMDE2MywgNjUyOCwgCisgICAgMTI3NTUzLCA0MzAzNSwgNjk4OTgsIDIxOCwgMCwgMTUyMCwgMCwgNDc4NiwgMCwgNDMyMjUsIDQ2MDIsIDAsIDc4MTY3LCAKKyAgICAxMDA4OCwgNjU0OCwgMCwgMTIwMTU2LCA0Mzk3OCwgODk4OCwgODg4OCwgMCwgMCwgMCwgMCwgMTA2NjYsIDAsIDczOTAyLCAKKyAgICA2OTc0MCwgMCwgMCwgOTk3NSwgMTI4MDM5LCAxMTk5MDIsIDQ2ODksIDg5MzIsIDAsIDY1NTYwLCAxMTkyMDksIDc0NDQxLCAKKyAgICA3ODgxMCwgMCwgMCwgNjc5ODcsIDAsIDAsIDAsIDY3OTg5LCAwLCAxMDA2NSwgODIwNywgMCwgOTI2MTMsIDEyODAxMSwgMCwgCisgICAgNjYyLCAwLCA5MjQ0LCAxOTQ4NjMsIDAsIDExOTI2MSwgOTgzNDI4LCAwLCAwLCAwLCA0MTkyOSwgMCwgMCwgNjY2NzQsIAorICAgIDQxOTI2LCAxMjA0MDgsIDEyMDQ0MywgMTA1MTMsIDY0NjM3LCAxOTQ4NjIsIDY4MDEzLCA1MiwgMTMxMTgsIDY0NzUsIDAsIAorICAgIDEyMDM0MSwgMTIwOTUsIDEwMjI1LCA0ODEyLCA5MjU3OCwgMCwgNjc5OTIsIDc0MDg1LCAwLCAzOTc4LCAwLCA5MTc5NDUsIAorICAgIDEyNzgyMywgMTE1ODIsIDEyMDc2MSwgMTIyODEsIDAsIDY1NDQsIDEzMjQxLCA5Mzk2MSwgNjk3ODIsIDEyODU1NywgCisgICAgMTk0ODYwLCAxMTc2NSwgNjUyNTgsIDEwMzY5LCAwLCAxNTg1LCA3MTkyLCAxMDI0OSwgNDIyLCAxNTAwLCAyMDM2LCA5ODYsIAorICAgIDE5NDg1OSwgNjQzOTQsIDU3ODEsIDU1OTksIDY0Mjk0LCAyNDk0LCAxMjA0NTAsIDQ4NjEsIDc0MDIxLCA2NDMzNCwgCisgICAgNzgyMDMsIDEyNzgwOCwgMCwgOTIyNjYsIDY1MTAyLCA4OTYxLCA2NTg0MiwgMTAyNDMsIDEwMjQ1LCA3NDE5MSwgMTIwNDEwLCAKKyAgICAwLCAxMjA0NTMsIDY0ODIxLCA5NDc4LCAyNTA4LCA5MjY4MywgMCwgMjAyLCAxMjgyNDYsIDc0MTMxLCAxMjQyLCA2NTUxNCwgCisgICAgMCwgNjM5NDAsIDEyODcwNiwgNjQ1MzMsIDEyMDEyOSwgMCwgNjc4NDIsIDExOTkwLCA5MjQzMCwgNjM5MzksIDQzMzc1LCAKKyAgICA2NTQ0MCwgMjUwNCwgMCwgNzg2NzEsIDY0ODI5LCA5ODM5MTAsIDY5NDMsIDkxNzkzNCwgNTg1OSwgMCwgMjg1OCwgCisgICAgOTgzMzYxLCA3NDI5NCwgOTgzOTE0LCA2OTIzOSwgMCwgMTE5MDI3LCAxMjk5MiwgMjc1MywgMTkzNiwgNzAwNzgsIDkyNTc0LCAKICAgICAyNzUxLCAxMjY2MiwgMjc2MywgODk1MywgNjQ3MDEsIDEwNzMxLCAxMjkyMiwgNzA1MiwgOTE3ODM5LCAwLCAwLCAwLCAKICAgICA2MzkyMCwgNzQxMjgsIDI4NTYsIDExOTkxMCwgNDcsIDY5OTA4LCAxMjY5ODYsIDY1ODU4LCAwLCAwLCAwLCA3ODk5LCAwLCAKICAgICA4NDE3LCA0Mzc5OCwgNzA3MiwgMCwgMCwgNDAzMywgMTI4MTY0LCA0Mzk5MiwgMCwgMCwgMjEyLCA2NDYwMCwgMTkwMywgCkBAIC0xNzc5NywyMyArMTc4MTYsMjMgQEAKICAgICAxMjYyNCwgMCwgMTY3MywgNDgxMSwgOTIzODMsIDU5ODYsIDkzMzgsIDMwNDYsIDc0NDgwLCA1OTg1LCA5MTc5MjgsIAogICAgIDExOTU5OCwgOTgyMCwgMCwgMTIxODcsIDAsIDAsIDU5ODQsIDAsIDQzMzA4LCA0MzkzLCA2NzY1MCwgMCwgMCwgMCwgMCwgCiAgICAgNzQ4MjYsIDY0NzMzLCAwLCAwLCAzNDkxLCAwLCAwLCAxMjgyMTksIDM1MTQsIDY1NDg1LCAwLCA3NDkyLCAwLCA3NDYwNSwgCi0gICAgOTI0ODMsIDc1MTQsIDk4MzM1OSwgMCwgMTk0NzMxLCA3NTAyLCA3NTg3LCA2ODM1MywgMCwgMCwgNjM5MjUsIDAsIDc2MTAsIAorICAgIDkyNDgzLCA3NTE0LCA5ODMzNjcsIDAsIDE5NDczMSwgNzUwMiwgNzU4NywgNjgzNTMsIDAsIDAsIDYzOTI1LCAwLCA3NjEwLCAKICAgICAyMTksIDAsIDAsIDY5MiwgNDM1ODgsIDc0NDMzLCA0MTYzNSwgNDMyNDEsIDk2ODgsIDcxNDcsIDk1MzUsIDAsIDkzOTkxLCAKICAgICAwLCA2NDUzMCwgMCwgNjQ2MTAsIDExODA0LCAwLCA3MTQ5LCA3NDUzLCAwLCA4MDEzLCAwLCA5MjMwMSwgMCwgODg5NSwgCiAgICAgNTI1MywgNzAwMjUsIDU0NTgsIDAsIDI4NjYsIDAsIDEyNzg2MCwgNjUxMTEsIDY4NDMzLCA2NzAwLCAxMjA0ODQsIDAsIAotICAgIDEyMDU4MywgMCwgODk2MiwgNzc5NjAsIDk2NDEsIDQzNjk0LCA3MDU5LCA5ODM2NjgsIDAsIDk2MDQsIDc4NzAwLCA3NDQxLCAKLSAgICA2MzgyNiwgNjc5NzAsIDExODk0MSwgNjQzOTIsIDE5NDczNSwgOTgzNjc4LCAyODQ0LCA5ODM5MzIsIDQxOTc0LCAwLCAKLSAgICAxMjEzOSwgNjc5NzEsIDAsIDAsIDMzNTgsIDY1Mjk1LCAwLCAzMTA0LCAxOTQ3MzQsIDAsIDE5NDc2NSwgOTgzMjI3LCAKKyAgICAxMjA1ODMsIDAsIDg5NjIsIDc3OTYwLCA5NjQxLCA0MzY5NCwgNzA1OSwgOTgzNjc3LCAwLCA5NjA0LCA3ODcwMCwgNzQ0MSwgCisgICAgNjM4MjYsIDY3OTcwLCAxMTg5NDEsIDY0MzkyLCAxOTQ3MzUsIDk4MzY4NywgMjg0NCwgOTgzOTQxLCA0MTk3NCwgMCwgCisgICAgMTIxMzksIDY3OTcxLCAwLCAwLCAzMzU4LCA2NTI5NSwgMCwgMzEwNCwgMTk0NzM0LCAwLCAxOTQ3NjUsIDk4MzIzMywgCiAgICAgNTMwOCwgMCwgMjkwLCAwLCAwLCAyODYyLCAyNzkyLCAxOTUwODgsIDk4MzA3MCwgMCwgMzI2OCwgNjY1OTEsIDAsIDY1NTIsIAogICAgIDQyMzY3LCA3MDM1LCAxMjA1NTgsIDAsIDAsIDE4MTQsIDAsIDEwMjQwLCA5MjMzOCwgNzQzMDUsIDAsIDc0NTI4LCA2NTkwMywgCiAgICAgMCwgNDI2NDYsIDc2MDYsIDI1OTEsIDI4MzcsIDQzNDEsIDc3OTU2LCA2NDQ4MiwgMTI3MzM3LCA4MTYzLCA2NTI3MCwgMCwgCiAgICAgNzc5MzIsIDAsIDkxMTIsIDc0NDMxLCA4NjMsIDk0OTAsIDExOTg5OCwgMTI4MzQ5LCA0MzMyMywgMTIwNTEzLCAxMTk4OTcsIAogICAgIDkwNzEsIDEyNzMzMywgMCwgMzY1NCwgNzc4OSwgOTYzNywgMCwgMjUzNSwgNjU1MDQsIDc2NTMsIDQwOTkzLCAxMTk4OTksIAotICAgIDY2NTg3LCAxOTUwOTgsIDAsIDkyNDAxLCA5ODM4ODUsIDExMDA2LCAxMjkyNywgNzgwNywgODA3MywgMCwgMTA2MjksIDAsIAorICAgIDY2NTg3LCAxOTUwOTgsIDAsIDkyNDAxLCA5ODM4OTQsIDExMDA2LCAxMjkyNywgNzgwNywgODA3MywgMCwgMTA2MjksIDAsIAogICAgIDc0MDg4LCAzMDU2LCAxMDgyMywgMTI4Nzk3LCAxMjczMjcsIDg3NjIsIDEwNTA4LCA2OTY4OSwgNzM3NzAsIDQzOTY5LCAKICAgICA0MzE5MywgMTA3MzcsIDM0NjMsIDk4MzA2NSwgMCwgNjY2MzMsIDg2OTUsIDQ4MTUsIDExMzIyLCA1ODExLCAxMjM0NSwgCiAgICAgNzA0OSwgMTE5OTExLCA1MTk1LCAxOTUwODEsIDAsIDY2NjM5LCAwLCAwLCAwLCAxMjgwNDEsIDAsIDkyMzg1LCAxMjYyLCAwLCAKLSAgICA2NTYxLCAxOTkzOSwgMCwgMCwgMTI4NTM1LCAxMTk5MDYsIDAsIDAsIDk4MzA5NywgMCwgOTgzNjU4LCAxMTk5MDcsIAorICAgIDY1NjEsIDE5OTM5LCAwLCAwLCAxMjg1MzUsIDExOTkwNiwgMCwgMCwgOTgzMDk3LCAwLCA5ODM2NjcsIDExOTkwNywgCiAgICAgNjQ2MTIsIDExOTkxLCAwLCAwLCAwLCAxNTAyLCA5MTc1NjgsIDAsIDkxMDcsIDEyNzMxNiwgNTcwMiwgMzY1NSwgNjc2NjEsIAogICAgIDg0MzAsIDAsIDc0MTMyLCAxMjA3NTgsIDAsIDc0MDU3LCA5NjAzLCAwLCA1MjU0LCAxMjA3NDIsIDc3MjQsIDc0Mzg4LCAKICAgICA2ODM3NSwgMTA3OTYsIDUxMjksIDAsIDAsIDU5MCwgNzU3OSwgNTYxNCwgNTg5MywgOTIyODAsIDExNzIwLCA5MjQ5NiwgCkBAIC0xNzgyNywxNyArMTc4NDYsMTcgQEAKICAgICAwLCA2NTU1OCwgNjU5NDYsIDgxMTMsIDcwODcsIDUyNTUsIDE3ODYsIDY2MSwgMCwgMCwgMCwgNzQ0MjMsIDcxMzQ1LCA1ODYsIAogICAgIDc0NDE0LCA2NDM1OSwgMTI2NywgMTI4MjY5LCA2NTQ2OCwgMCwgNjU3MzEsIDAsIDEyNzE3OSwgMzYyMSwgMTIwNDczLCAKICAgICA2NjY2NiwgNjQyMTEsIDAsIDY1NjIsIDEyOTI4LCAwLCAxMjI4LCA2NTQ5MCwgMTEzODMsIDAsIDAsIDAsIDE3MTQsIAotICAgIDc0NDA2LCAxMjc4MzEsIDAsIDk4MzkxMiwgMCwgNjYyMjUsIDAsIDAsIDQyNjYwLCAxMTQzNiwgMjA3MCwgNjQsIDEyMDY5NCwgCisgICAgNzQ0MDYsIDEyNzgzMSwgMCwgOTgzOTIxLCAwLCA2NjIyNSwgMCwgMCwgNDI2NjAsIDExNDM2LCAyMDcwLCA2NCwgMTIwNjk0LCAKICAgICAwLCAxMDI5MSwgMTAzMjMsIDI4MjYsIDAsIDAsIDAsIDQyMDA4LCA5NzA4LCA0MjcxMCwgMCwgNDIwMTEsIDQxOTk5LCAKLSAgICA5MjE2NCwgMTIyMDYsIDU4MzksIDE3MDIsIDEyNDAsIDc0MDY1LCA2Mjg2LCAwLCA5ODM5NjAsIDY1ODMzLCA3Nzg0OCwgMCwgCisgICAgOTIxNjQsIDEyMjA2LCA1ODM5LCAxNzAyLCAxMjQwLCA3NDA2NSwgNjI4NiwgMCwgOTgzOTY5LCA2NTgzMywgNzc4NDgsIDAsIAogICAgIDE3NjUsIDAsIDAsIDY1NTg4LCAwLCAwLCAwLCA4NDAxLCAwLCA0MjAxNCwgMCwgNzAzMCwgMTk0NzA0LCAxMDQ3OSwgCiAgICAgNjQ5NTksIDI4NTIsIDAsIDAsIDAsIDAsIDEyODU4NiwgOTE3OTUxLCA2OTYzLCAwLCAxMjY2NywgNjQ1NDAsIDc0Nzg2LCAKICAgICAxMDE0NywgMTI5MzUsIDEyNzU2OCwgMTI2NDgzLCAwLCAwLCAwLCA3ODc1NywgMCwgMCwgMCwgMCwgOTk5NCwgMTI0NjcsIAogICAgIDI4NjQsIDY0NzE5LCAxMTQ4LCAxMDQzNSwgMTE0NjIsIDQxNjc1LCA3MDg0LCAyNzY1LCAwLCA0MzM4MiwgMCwgMTIwNzE5LCAKICAgICAxMjgxODgsIDkyNTE2LCA2NjY2MiwgMCwgNzgxMzMsIDkzNjQsIDE5NDY4NSwgNzQ0MTYsIDAsIDAsIDc3OTg4LCAyNjMsIAotICAgIDEwNDQ5LCA0MTI4OCwgMCwgNDE4MzksIDc4Mzg3LCA5ODM3MzMsIDc3OTg2LCAwLCA2OTMxLCA2OTcyMiwgNjQzNTUsIAorICAgIDEwNDQ5LCA0MTI4OCwgMCwgNDE4MzksIDc4Mzg3LCA5ODM3NDIsIDc3OTg2LCAwLCA2OTMxLCA2OTcyMiwgNjQzNTUsIAogICAgIDcxNzcsIDcwMTA1LCAwLCAwLCAwLCA0MjYyLCAxMDI4NSwgMTA3MjIsIDQyMDIwLCAxMjY1NzUsIDY4MDYsIDY5OTIsIAotICAgIDQyMDE5LCAwLCA0MTI5MCwgOTgzNzA3LCA3NTAsIDAsIDcxMzA0LCAxMDE2MywgNjM5MTMsIDcxMzAwLCA3MDMyLCA1OTU0LCAKKyAgICA0MjAxOSwgMCwgNDEyOTAsIDk4MzcxNiwgNzUwLCAwLCA3MTMwNCwgMTAxNjMsIDYzOTEzLCA3MTMwMCwgNzAzMiwgNTk1NCwgCiAgICAgNjQ5MzEsIDQzMTQsIDAsIDE5OCwgNjg0NTMsIDczMCwgMTIwMDk0LCA2MzkwNywgNzc5OTMsIDc4ODkxLCAxMzE2NSwgCiAgICAgNzEwNywgNzQxNzEsIDQyODA0LCA2NzgsIDgyNDAsIDc4MDE1LCAxMjg3ODQsIDQxMzc4LCAxMTAwOCwgNjkzOCwgNzAwMjYsIAogICAgIDkyNjM3LCAyMDk3LCA2NjI0NiwgMTIwNTYwLCAwLCAwLCAwLCAzODkyLCA2ODYzMiwgNjk2NDIsIDY3MTIsIDY2MDQ1LCAKQEAgLTE3ODQ1LDMxICsxNzg2NCwzMSBAQAogICAgIDY5NjY5LCA0MzI1NCwgNzM4MzEsIDAsIDEwMjkzLCA1OTUyLCAxMjgxLCA0Mzc0NywgMCwgMCwgMTA2NzcsIDYwNCwgCiAgICAgNDEwOTcsIDkxODIsIDE4NTksIDAsIDkyNjAzLCAzNDI1LCAxMjc0ODgsIDAsIDI4MzYsIDAsIDAsIDk3MDcsIDAsIDQzMjAyLCAKICAgICAwLCAwLCA2NTE5OSwgMTczOCwgOTE3ODE4LCAxMjgxNTgsIDI4MzIsIDkyNzAyLCA5NjcwLCAxMjkzNywgMCwgNjYzNzQsIAotICAgIDkxNzk1NiwgMCwgMjgyMiwgNjgxMjIsIDQ0MzYsIDkyNTE5LCA5ODM3MTQsIDczNzUyLCAwLCA2NDg3MiwgOTIzNDAsIAorICAgIDkxNzk1NiwgMCwgMjgyMiwgNjgxMjIsIDQ0MzYsIDkyNTE5LCA5ODM3MjMsIDczNzUyLCAwLCA2NDg3MiwgOTIzNDAsIAogICAgIDEzMzEsIDAsIDAsIDAsIDEyNzA4LCAwLCA1MDkwLCA1MDg5LCAxMjc5NzcsIDAsIDExOTEwOSwgMCwgMTI4NjgxLCAzMTksIAogICAgIDExODg0NywgNDM0NzksIDk0NzcsIDAsIDAsIDUwODcsIDkyMzI1LCA3NjQwLCA5NiwgNTA4NiwgMCwgOTIzNzksIDAsIAogICAgIDUwODUsIDY0Mjg2LCA5MjY2NSwgMCwgNDE0MjIsIDAsIDExOTkwMSwgNDIzNTYsIDM3NzIsIDAsIDAsIDUwMTEsIDAsIDAsIAogICAgIDEyNjU4NywgMCwgMTI3MTY1LCAxMjcyNDEsIDY2NzcsIDc2MDEsIDAsIDU5MSwgNjQ0MTksIDExODk1MywgOTIyNjIsIDAsIAogICAgIDExODkyMywgNzAwODQsIDAsIDEwOTM5LCA2MTA2LCA2OTMzLCA0MTI3MSwgNjc2MCwgNzEzNDMsIDQ1MzQsIDQxMjcwLCAKICAgICAxMjg4NzYsIDAsIDY1NTc0LCAwLCA5MjI0LCA2OTg1MywgMzY3MSwgODk3NiwgMTI2NDc0LCAwLCA0MTI3NSwgNjM3MiwgCi0gICAgMTI4MDg0LCA1NTI2MSwgNzk2MywgNjM3MSwgMCwgNTY4LCAwLCA0MTI3MywgOTgzNzIxLCAwLCA2NzI4LCAwLCA5NzE1LCAwLCAKKyAgICAxMjgwODQsIDU1MjYxLCA3OTYzLCA2MzcxLCAwLCA1NjgsIDAsIDQxMjczLCA5ODM3MzAsIDAsIDY3MjgsIDAsIDk3MTUsIDAsIAogICAgIDgyNTgsIDExNzUzLCA3NDgyMCwgMCwgOTYwMiwgMTE4OTE5LCA0MiwgMCwgNDM2ODgsIDAsIDAsIDc0NTgsIDAsIDAsIAogICAgIDY1Mzg1LCAxMTk5MDAsIDAsIDExOTU4LCAwLCA5MTc4MjIsIDAsIDYyNTQsIDQyNzIxLCA2NjMzNiwgODA0NSwgMTE1NTAsIAogICAgIDAsIDAsIDk4MzU5NywgNDI4NTgsIDExNzg5LCA2NTg2OCwgNTU1NywgMTAxMzMsIDk3MzcsIDEzMTA5LCAwLCA5NDY3LCAKICAgICA1NTU4LCA4ODc4LCAxMjgxMzYsIDE5NTAzNiwgNzQ1MSwgNjcwNiwgMTAxNDYsIDAsIDkwODYsIDY0NTY2LCAwLCA2NDU4NCwgCiAgICAgNzQzNywgNzQ1NCwgMTI1OTQsIDEyODY5MCwgNjgzNjIsIDQ1NDYsIDc3MzEsIDAsIDcwMDQ4LCA3NDI0MywgMCwgMzgwNSwgCi0gICAgMCwgMTk0NTY1LCA0NDAwMSwgNDEwMDgsIDAsIDYzMDcsIDE5OTQ5LCA5ODM3ODEsIDc1NDQsIDk4MzA0NSwgNDM0NjksIDAsIAorICAgIDAsIDE5NDU2NSwgNDQwMDEsIDQxMDA4LCAwLCA2MzA3LCAxOTk0OSwgOTgzNzkwLCA3NTQ0LCA5ODMwNDUsIDQzNDY5LCAwLCAKICAgICAwLCAxMDE1MiwgNjQ0MjIsIDY1MDkxLCAxMTkxMTMsIDc2MDIsIDY0NzI5LCAwLCA0MzUyMSwgMCwgNDIzMDIsIDQzNzExLCAKICAgICA0MzUyMywgNDE0NDcsIDU1NTksIDAsIDg3MDQsIDIzOTcsIDU1NTYsIDAsIDAsIDAsIDkwMTEsIDk2MzAsIDkyNjMzLCAwLCAKICAgICA5Mzk5OCwgNTUwNiwgMCwgMTkxMSwgNjY2NTIsIDAsIDk5NjEsIDg4NDUsIDY2Njk4LCAwLCAxMDc5MiwgODg4OSwgMCwgCi0gICAgMjA5OCwgMCwgNjQ3NTEsIDAsIDY2NjIyLCAwLCAwLCA3NDM2NCwgMCwgMCwgOTgzNzk2LCA3NDM2NSwgNzU1MiwgMCwgMCwgCisgICAgMjA5OCwgMCwgNjQ3NTEsIDAsIDY2NjIyLCAwLCAwLCA3NDM2NCwgMCwgMCwgOTgzODA1LCA3NDM2NSwgNzU1MiwgMCwgMCwgCiAgICAgNjUzODQsIDcyMjMsIDQ1NTksIDAsIDE5NTYsIDQzMTM4LCA3MDI0LCA2NTcyOCwgNjQ1MDEsIDEyMTAsIDE5NTA3NywgCi0gICAgNjUxNzUsIDEwMTg0LCA0MzE0MCwgNDM2NTQsIDAsIDAsIDAsIDM4LCA4NTMzLCA2NjY2OSwgMTE5MTI0LCA5ODMyODUsIAotICAgIDk4Mzc4MywgMCwgNDM1NywgMCwgMTE5ODM3LCA5MTc4NjMsIDc0MjMzLCA5OTY3LCA3ODg4NCwgNDI4NjAsIDExOTgzOCwgCisgICAgNjUxNzUsIDEwMTg0LCA0MzE0MCwgNDM2NTQsIDAsIDAsIDAsIDM4LCA4NTMzLCA2NjY2OSwgMTE5MTI0LCA5ODMyOTMsIAorICAgIDk4Mzc5MiwgMCwgNDM1NywgMCwgMTE5ODM3LCA5MTc4NjMsIDc0MjMzLCA5OTY3LCA3ODg4NCwgNDI4NjAsIDExOTgzOCwgCiAgICAgMTA5NDEsIDY1NzIxLCA2OTYyLCAwLCAwLCAxMTkzMjQsIDAsIDExMDE0LCAxMjc5NzIsIDg5NDIsIDEyMDAwLCA2OTIyNCwgCiAgICAgOTIyNjcsIDEyODUzNiwgMTE5NzQsIDkyMjEzLCA0Mjc3MiwgMTI3NTE4LCAxMTY1MCwgNTAxMywgOTI2NjMsIDEyNjU4MywgCi0gICAgNjYyMTAsIDExODkxNCwgNjYxMywgOTI0NzYsIDAsIDQzODE5LCA5ODM3NjEsIDAsIDY0NzE0LCAwLCAwLCAxMjE2MiwgCi0gICAgMTIxMjAsIDQzNDc2LCA5ODM3NTcsIDExMDI0LCA3NDgxMSwgNjYyMjgsIDEwNTYzLCAwLCAxMjcxOTYsIDQzNTIyLCAyNDYyLCAKKyAgICA2NjIxMCwgMTE4OTE0LCA2NjEzLCA5MjQ3NiwgMCwgNDM4MTksIDk4Mzc3MCwgMCwgNjQ3MTQsIDAsIDAsIDEyMTYyLCAKKyAgICAxMjEyMCwgNDM0NzYsIDk4Mzc2NiwgMTEwMjQsIDc0ODExLCA2NjIyOCwgMTA1NjMsIDAsIDEyNzE5NiwgNDM1MjIsIDI0NjIsIAogICAgIDAsIDE4MzcsIDAsIDYzOTcyLCA2OTU3LCAwLCAxMjA1NTksIDQ5NTIsIDY1NzE4LCA2NTgyNywgNTUwNCwgNjU3MjAsIAogICAgIDY1NzE0LCA2NTcxNSwgNjU3MTYsIDAsIDEyNzAwNSwgMTI3MTE5LCAzMTA5LCA2Mzk3NSwgNzQwMjgsIDAsIDgxMDcsIAogICAgIDExOTIzNCwgMTEyNywgNDU1LCAwLCA2Mzk2OCwgMTI3OTI0LCAzNDgzLCAxMTk1OTMsIDE5ODksIDAsIDY5Njc4LCA5MTA0LCAKQEAgLTE3ODgyLDcgKzE3OTAxLDcgQEAKICAgICA0MTg2OSwgMTI2MTksIDAsIDEwMTU0LCA5ODMwNDMsIDc0NDM5LCAyMDM5LCAwLCA3NDQ2LCAxNjg0LCA2Mzk3OSwgMTA5NzQsIAogICAgIDQ1OCwgMTIwNjIwLCAwLCA2OTc5MSwgMTI3MTYxLCAxMTkxNiwgNjUwMTYsIDAsIDY5NjcxLCA0MjExNSwgOTgzMTMzLCAKICAgICAxMjI4OCwgNzgwNTcsIDAsIDE0OTMsIDQyMTExLCA3NTUzLCA0MDk3LCAxMjgxOTksIDEzMDgwLCAwLCA2NTgwOCwgNjYxMCwgCi0gICAgNjAzMCwgODA1OSwgNzUwOCwgMTMxMzEsIDAsIDk4MzQyMywgMCwgODc5NCwgNDEyNzgsIDQxNjI5LCAxMjE1NCwgMTI4MTkyLCAKKyAgICA2MDMwLCA4MDU5LCA3NTA4LCAxMzEzMSwgMCwgOTgzNDMxLCAwLCA4Nzk0LCA0MTI3OCwgNDE2MjksIDEyMTU0LCAxMjgxOTIsIAogICAgIDQxMjc3LCA2NDY1OCwgMCwgNjQzODAsIDY2MjUsIDc0MzU0LCAxOTkwNCwgMCwgMCwgMCwgNjUzNzEsIDcwNzgsIDAsIDgzMywgCiAgICAgMCwgNjM2OSwgMCwgMTA5NzksIDQxOTUzLCAwLCA0MTQzNCwgNjA2MiwgMCwgMCwgMTk5MTYsIDY5MTMsIDkzMywgMTM0MSwgCiAgICAgOTg0MiwgNjcyMCwgNjU3NDQsIDAsIDk4MzU5MiwgMTI4Mjk1LCAwLCA3NDA1LCAxMDEwNSwgNjU4MTAsIDAsIDQxNjMyLCAKQEAgLTE3ODk3LDIzICsxNzkxNiwyMyBAQAogICAgIDY3NDEsIDQzMDQ3LCAwLCAxMzE4MCwgMTI4NTE3LCA0MTgsIDkxNzk3MiwgNjQ0OTUsIDEwMjk1LCAxMDMyNywgMTAzOTEsIAogICAgIDQxNzUyLCA3NDMzOSwgODY0MSwgNDE0NDksIDAsIDc0MTAwLCAwLCAxMDkxMSwgNjk0MiwgMCwgMTAyNCwgNDI4NDksIAogICAgIDQxNzUxLCA2OTc3NiwgODk0MSwgOTgzNTU2LCA0NTU0LCAwLCA5MDIzLCAxMTY4NSwgMCwgOTkyOCwgNzg2MTcsIDAsIAotICAgIDExNDM3LCA0Mzc0MSwgOTIxNjMsIDEyMDcwMCwgNjM5NjcsIDk4MzQ3NSwgNDEyMDYsIDEyMDcyNCwgOTA0OSwgNDExODUsIAorICAgIDExNDM3LCA0Mzc0MSwgOTIxNjMsIDEyMDcwMCwgNjM5NjcsIDk4MzQ4MywgNDEyMDYsIDEyMDcyNCwgOTA0OSwgNDExODUsIAogICAgIDQzMTY2LCAwLCAxMTY4MCwgOTI2MTksIDExNjg2LCA3ODU0NCwgNjUyMjQsIDQ1NjUsIDQ2NTUsIDExOTU1MywgMCwgCiAgICAgOTIxODMsIDY0NTIzLCAxMDM0MywgMTA0MDcsIDAsIDY2NjcxLCAxMTQ2NiwgMCwgMTI4MDAzLCA0Mjg5MCwgNzQwMTMsIAogICAgIDEyMDUwLCA2ODIwMSwgMjg2MCwgMCwgMCwgMCwgNDI3OTIsIDU3NDMsIDEwNDI0LCAxMjA2NSwgNDI4NzIsIDAsIDkyMzQyLCAKICAgICAwLCA4ODc1LCAwLCAwLCA5MTc5OTEsIDc1MzEsIDEyODQ3LCAyNDEzLCAwLCA3ODYzNSwgOTYyLCAwLCAxMjg1NSwgNDExOTYsIAotICAgIDQyNTY0LCAwLCAxNTgyLCA5ODM3MDYsIDU1MDgsIDAsIDAsIDAsIDEwODAxLCA2OTg3NiwgOTIzNTQsIDAsIDcxNzMsIDQ5NiwgCisgICAgNDI1NjQsIDAsIDE1ODIsIDk4MzcxNSwgNTUwOCwgMCwgMCwgMCwgMTA4MDEsIDY5ODc2LCA5MjM1NCwgMCwgNzE3MywgNDk2LCAKICAgICAxMDQzOSwgNDMxMywgNjQ2MDcsIDY5NjM4LCA3ODYwLCAwLCA5MDYsIDQyNzkzLCAyODQyLCA2NDA1LCA2NDcyMiwgMTMxMzIsIAogICAgIDc5OCwgNjQ2OTQsIDEyODAxLCA4NDA2LCAxMTUzLCA5MjE3MywgNjQ3ODgsIDAsIDgwNTQsIDkxNzQsIDEyODY1MiwgCiAgICAgOTE3OTc2LCA5OTY0LCA3NDQwOSwgNDE2MTEsIDQ2NDIsIDY2NTc0LCAxMTU1NiwgOTE3OTgyLCAwLCA3ODg1NywgNDIwODksIAogICAgIDc4ODU1LCA5MDA4LCAwLCAxMjY1OTIsIDE5NTA5NiwgNDIwNzksIDkxNzk4MSwgNzc5MjQsIDQyNTEzLCA3NzkyNywgCi0gICAgNDI4NDIsIDczOTg1LCA2NTI4NSwgMTE4OTc0LCAxMjcwMDMsIDk4MzY5MywgMCwgMCwgMCwgMTEzMzUsIDY0MDY5LCAKLSAgICA0MjA5MywgMzkyMCwgMCwgMCwgMCwgMCwgNDU4MCwgNDE5NjcsIDk4MzcyMywgNjQzODQsIDkyMTY3LCA5Mzk4NCwgMzAyMSwgCisgICAgNDI4NDIsIDczOTg1LCA2NTI4NSwgMTE4OTc0LCAxMjcwMDMsIDk4MzcwMiwgMCwgMCwgMCwgMTEzMzUsIDY0MDY5LCAKKyAgICA0MjA5MywgMzkyMCwgMCwgMCwgMCwgMCwgNDU4MCwgNDE5NjcsIDk4MzczMiwgNjQzODQsIDkyMTY3LCA5Mzk4NCwgMzAyMSwgCiAgICAgNDIwMDQsIDAsIDAsIDQyMzE3LCA0MTk5OCwgMCwgNjk0NiwgMCwgMCwgMCwgMTI4MTkzLCA2NTIwNCwgMCwgNjgxMTMsIAogICAgIDQyNjkwLCA5ODgwLCA0MjAxMCwgNzQ4MjQsIDY0NTg5LCAxMDExMSwgNjQ4NzUsIDEyNzg4MCwgNjgzOTksIDQzOTk4LCAKICAgICAxMTM2MCwgMCwgMCwgMCwgMTE4ODI2LCA0MjE0OSwgMCwgMCwgMCwgNjQ5NDEsIDc3OTE5LCAxMjA0MjEsIDEyODA3NywgMCwgCiAgICAgNTUyNDcsIDQxMTAsIDY2MDA1LCA2OTU5LCAxMDkyOSwgMTE5MTEwLCAwLCA2NjcwMywgNzc5MjEsIDg2MTcsIDQxOTgyLCAKLSAgICA2MDI1LCA2OTI0MiwgOTgzMTc2LCAwLCAwLCAwLCA5NTk3LCA0MjA5OSwgNDMxNzIsIDk4MzM2OCwgMTAxMTcsIDk4MzE2OSwgCisgICAgNjAyNSwgNjkyNDIsIDk4MzE3NiwgMCwgMCwgMCwgOTU5NywgNDIwOTksIDQzMTcyLCA5ODMzNzYsIDEwMTE3LCA5ODMxNjksIAogICAgIDkyMjk3LCA0MTYzNiwgMCwgMCwgMTIwNjgxLCA4MzAxLCAwLCAwLCAxODcsIDAsIDY1NjY5LCAxMjgzMzksIDQ5NjMsIDAsIAogICAgIDEyNzUxNywgMCwgODk2NCwgNjU2NzYsIDc3NzUsIDAsIDQxOTQ4LCAwLCAwLCAwLCA0MTk0MiwgNjU0NDksIDMxNjAsIAogICAgIDEwMDgxLCAxMzIyNiwgNDIxMjEsIDQyNDc1LCA0MjY2MywgMTI4MjEwLCA0MTc2NiwgMTE5MTE0LCA2NTg4MiwgNzg4NDksIApAQCAtMTc5MjMsMjAgKzE3OTQyLDIwIEBACiAgICAgMzEwMywgMCwgNDE3NTMsIDEyODU0MCwgMCwgMCwgNzg4NDQsIDc4ODQ1LCA0MTczOSwgNzg4NDMsIDQyNTE1LCAxMDkzMSwgCiAgICAgNDE3NTYsIDQzMzQ3LCA0MjU2MCwgNTM5MSwgNDE3NDYsIDExOTE0NywgOTI1OTEsIDQxMjU5LCA1NTYxLCA2OTkzMCwgCiAgICAgMjY5MSwgMCwgNjU1NTMsIDc5MzMsIDU1NjIsIDY5ODAwLCAxMjgyNjUsIDQxMjYyLCAxMjgxNDYsIDY0NDIxLCA3NDg0NiwgCi0gICAgNDEyNTEsIDAsIDAsIDM5NzksIDAsIDAsIDc0ODEzLCA5ODM3MzAsIDAsIDAsIDAsIDkyNTI0LCA0MTI2NiwgMCwgNjY1NjYsIAorICAgIDQxMjUxLCAwLCAwLCAzOTc5LCAwLCAwLCA3NDgxMywgOTgzNzM5LCAwLCAwLCAwLCA5MjUyNCwgNDEyNjYsIDAsIDY2NTY2LCAKICAgICAxMjg4MzYsIDEwNTg1LCA2NTc0MSwgNDE3MzcsIDk1NzQsIDI2NjYsIDAsIDQxNzM4LCA4MzEsIDQxOSwgMTMxMjYsIAogICAgIDEwNzE2LCAwLCA0MjgyMiwgMCwgNjQzNCwgMCwgNjkzOSwgNzc2NiwgNjQzMiwgMTI4MTA2LCA2OTkzMiwgOTE2LCA3NjksIAogICAgIDQxNzQyLCAxMTk2OCwgNzQ4MDUsIDY0MzMsIDU1NjMsIDU0NywgMTk0MywgNjQzOSwgNTU2MCwgNDk5NCwgNDg3LCAKICAgICAxMjY1MzcsIDQ0OTcsIDM3NTQsIDEyNzA1NiwgMTIwNDI0LCA5MDM5LCAwLCA0MTc3NiwgMCwgODcxNiwgMTU5NSwgNDE2MTUsIAotICAgIDAsIDAsIDc0MjYwLCAwLCA0Mjg1NCwgNDMyMTksIDEyODcwOSwgOTgzNDUyLCAxMjE4NSwgMTI4ODc5LCA3MDA3MiwgCi0gICAgNjgzNTUsIDY4MzU3LCAwLCA0Mjg1NiwgODYzNCwgMCwgOTgzMzg5LCA0MjA5LCAxMjA3MDIsIDAsIDY1ODc5LCA0MTUzOCwgCi0gICAgNjU2MTIsIDEyNzU0MywgNjY5LCA1Njc5LCAwLCA2OTc4NiwgOTI1NDAsIDAsIDk4MzQ1NiwgNTY3OCwgMTE4MjEsIDAsIAotICAgIDY3MTEsIDQ2MCwgMCwgMCwgOTgzNDUzLCAwLCAxMjA3NDcsIDAsIDAsIDc4MDUwLCAxMTkwMjIsIDAsIDk4MzQ1NCwgMCwgCisgICAgMCwgMCwgNzQyNjAsIDAsIDQyODU0LCA0MzIxOSwgMTI4NzA5LCA5ODM0NjAsIDEyMTg1LCAxMjg4NzksIDcwMDcyLCAKKyAgICA2ODM1NSwgNjgzNTcsIDAsIDQyODU2LCA4NjM0LCAwLCA5ODMzOTcsIDQyMDksIDEyMDcwMiwgMCwgNjU4NzksIDQxNTM4LCAKKyAgICA2NTYxMiwgMTI3NTQzLCA2NjksIDU2NzksIDAsIDY5Nzg2LCA5MjU0MCwgMCwgOTgzNDY0LCA1Njc4LCAxMTgyMSwgMCwgCisgICAgNjcxMSwgNDYwLCAwLCAwLCA5ODM0NjEsIDAsIDEyMDc0NywgMCwgMCwgNzgwNTAsIDExOTAyMiwgMCwgOTgzNDYyLCAwLCAKICAgICA3NzgyLCA5MDQ0LCA0OTc0LCAxMTc2MCwgNzg0OTQsIDc1NzcsIDY1NzExLCA0MTkxMiwgMTIxNiwgMCwgMTI4MDc5LCAKLSAgICA1NzkyLCAwLCAwLCA3ODUwMSwgMCwgMjkzMywgMTIyNDQsIDAsIDU2ODMsIDk4MzM4NCwgMCwgNzgxMTksIDE1NDksIDAsIDAsIAorICAgIDU3OTIsIDAsIDAsIDc4NTAxLCAwLCAyOTMzLCAxMjI0NCwgMCwgNTY4MywgOTgzMzkyLCAwLCA3ODExOSwgMTU0OSwgMCwgMCwgCiAgICAgMTIwMzk4LCA1NjgyLCA2MjA2LCA4NjcwLCAxMDI1NiwgNTY4MCwgNjk5MzUsIDEwMDAxLCAxMjg1MTIsIDY5NzY4LCAxNDQ5LCAKICAgICAxMDI0MSwgNzgyOTAsIDEyODIyOCwgMCwgMTA1NTIsIDY0MzQyLCA0MTkyMiwgMTI4NTQ4LCA4NTg0LCA2ODAzMCwgNTU2NywgCi0gICAgMjcxNywgMCwgMCwgNTU2NCwgNDI4ODYsIDQxOTA4LCA0Mjg4MiwgNTU2NSwgOTgzMjQ4LCAxMjgwMjYsIDAsIDY1NzA4LCAKKyAgICAyNzE3LCAwLCAwLCA1NTY0LCA0Mjg4NiwgNDE5MDgsIDQyODgyLCA1NTY1LCA5ODMyNTYsIDEyODAyNiwgMCwgNjU3MDgsIAogICAgIDY1NzA5LCA1NTY2LCA2OTgwMywgNjU3MDQsIDY1NzA1LCAxMTkwNCwgNDI4NzUsIDQzMzczLCA0MjUzOSwgNTk0MiwgODQ2OCwgCiAgICAgMTIwNTYxLCAxMDM2MSwgMTA0MjUsIDY1Njk3LCA2NTY5OCwgNjU2OTksIDAsIDY2NTk4LCAwLCA2NDY2NCwgMTA2NDcsIAogICAgIDc4NzAyLCA3ODcwMywgNzg2OTAsIDQ1NywgNzg1MDIsIDY1NzAxLCAxOTM0LCA0MzAwNiwgMTE5OTAzLCA4ODAyLCA3ODcxMCwgCkBAIC0xNzk1MCwxNCArMTc5NjksMTQgQEAKICAgICAxMTk1NzAsIDQyMjM5LCA4NTM2LCA3ODc0MCwgNzgzMjQsIDc4NzI2LCA3NDQzMiwgNzI0LCAwLCAxNDU1LCA3ODc0OSwgCiAgICAgNzE4MywgNjQ1ODMsIDc4NzQ3LCA2ODQ0MywgNDE3NSwgNzg3NDEsIDQzNjE0LCA2OTgwMSwgOTM5LCAwLCA0MzUyMCwgCiAgICAgNjg2MTMsIDc0NTY5LCA5MTc5NTgsIDAsIDc4NzYzLCA3ODc2NCwgNzg3NjAsIDEwNzg4LCA2MDg4LCA3ODc1OSwgNzg3NTUsIAotICAgIDE5MCwgMCwgMTI1OTMsIDAsIDgxODgsIDY0NDA4LCAwLCA0NDE3LCA5ODMyMTEsIDkyMjYxLCA2MzcwLCAwLCA3ODI3LCAKKyAgICAxOTAsIDAsIDEyNTkzLCAwLCA4MTg4LCA2NDQwOCwgMCwgNDQxNywgOTgzMjEzLCA5MjI2MSwgNjM3MCwgMCwgNzgyNywgCiAgICAgNjg0NDEsIDY5NjUsIDAsIDAsIDEzMjAxLCAxMjgyMDUsIDY5ODk2LCAwLCA3NDM4MiwgNzM3ODEsIDc5MTgsIDczOTg4LCAwLCAKLSAgICAwLCA5MTc4ODQsIDE3MjgsIDAsIDQzNzY0LCAxNzgsIDEyOTcyLCA5MjY3OSwgMCwgOTE3ODg3LCA5MjU2MywgOTgzMzczLCAKKyAgICAwLCA5MTc4ODQsIDE3MjgsIDAsIDQzNzY0LCAxNzgsIDEyOTcyLCA5MjY3OSwgMCwgOTE3ODg3LCA5MjU2MywgOTgzMzgxLCAKICAgICAwLCA3ODMyNywgMTIwNDA1LCA2NTY5MCwgMCwgMCwgMTE5MDU0LCAwLCA5MjUyLCA5MTc4ODksIDQ2NTIsIDY4MzcxLCAwLCAKICAgICAwLCAwLCAxMzA2NSwgOTkyMywgMTA4MDYsIDAsIDExNzYzLCA3MDAxNiwgMTIwNjg4LCA2NzIzLCA3ODE4NywgMCwgNjk5MywgCi0gICAgMCwgMCwgODMzMywgMCwgMCwgMTEzOTAsIDAsIDc0NDY0LCAwLCA5MjMyMCwgNzQwODAsIDk4MzMwNywgNjk5MTEsIDExOTEwLCAKKyAgICAwLCAwLCA4MzMzLCAwLCAwLCAxMTM5MCwgMCwgNzQ0NjQsIDAsIDkyMzIwLCA3NDA4MCwgOTgzMzE1LCA2OTkxMSwgMTE5MTAsIAogICAgIDkyNTU5LCA4Mjc4LCA4OTYzLCA0MDM0LCAxMjg1NjAsIDAsIDY1MzQ0LCAxMjA1MTcsIDQxNzQ3LCAwLCAwLCA4Njc3LCAwLCAKLSAgICAxMjcwNywgOTM1MCwgNjYwMzcsIDEyODE4MCwgODgzNiwgMTIzMTUsIDEyNzQ3LCA4MzAwLCA5ODM3NDEsIDAsIDc0OTEsIAorICAgIDEyNzA3LCA5MzUwLCA2NjAzNywgMTI4MTgwLCA4ODM2LCAxMjMxNSwgMTI3NDcsIDgzMDAsIDk4Mzc1MCwgMCwgNzQ5MSwgCiAgICAgODg1NiwgNzEzNjEsIDAsIDQzMTUwLCAxMjc3NjgsIDEyMDQwNCwgNjUzODksIDEyMDQwMiwgMTIwNDAzLCAxMDgxMywgCiAgICAgMjU5MiwgMTI4NTMsIDQzMjY5LCA3MjYzLCAxMjAyNDQsIDY1MzYsIDEyMDIzOCwgMTIwMjM5LCA2NTUxNiwgMTIzMjEsIAogICAgIDEyMDM5MSwgMTIwMzg4LCA1NTI4NywgMTAwMDcsIDEyMDI0NiwgOTU4OCwgMTIwMjQ4LCAxNTk2LCAxMjAzODMsIDQxOTk0LCAKQEAgLTE3OTgyLDI3ICsxODAwMSwyNyBAQAogICAgIDExNiwgMTI5OTgsIDEyMiwgMTIxLCAxMjAsIDExMSwgMTEwLCAxMDksIDEwOCwgMTE1LCAxMTQsIDExMywgMTEyLCAxMDMsIAogICAgIDEwMiwgMTAxLCAxMDAsIDEwNywgMTA2LCAxMDUsIDEwNCwgNjQzNiwgNzM5NzQsIDUzNCwgNDEyMTIsIDc3OTMxLCAxNTM2LCAKICAgICA2NDA5MywgNzM5NzAsIDc3OTMwLCAxMjcxNTcsIDAsIDYwMjAsIDEyNzE2LCAxMjcxMTIsIDEyNzQ0LCA0NzUsIDEyMDM5NCwgCi0gICAgMTMyNjYsIDEyNzgxMywgMTI3MTExLCAwLCA3MzkyNiwgMCwgMTA2NDUsIDEyMTIsIDY1NDMsIDk4MzI5OSwgODEzNCwgCi0gICAgMTI4MDI4LCAyOTEzLCA3Mzg3MCwgMTI3MTEzLCAxODY2LCAwLCAxOTUwOTUsIDAsIDg5MjMsIDE2NDUsIDEyMDU5LCAKKyAgICAxMzI2NiwgMTI3ODEzLCAxMjcxMTEsIDAsIDczOTI2LCAwLCAxMDY0NSwgMTIxMiwgNjU0MywgOTgzMzA3LCA4MTM0LCAKKyAgICAxMjgwMjgsIDI5MTMsIDczODcwLCAxMjcxMTMsIDE4NjYsIDk4MzIyOSwgMTk1MDk1LCAwLCA4OTIzLCAxNjQ1LCAxMjA1OSwgCiAgICAgNjY1ODUsIDcxMjk3LCAzMTk2LCAwLCAwLCA1OTM1LCAxMjUwLCAxMjcwNjYsIDgxNzQsIDk3ODcsIDY3MzMsIDk4NTksIAogICAgIDc5MTYsIDk4NjEsIDk4NjAsIDUyNTgsIDE4ODIsIDE4OTIsIDY3MzEsIDEwODgyLCA0MDUsIDExNDU0LCA3MzkxMSwgMCwgCiAgICAgMTI4NzgxLCA0MTE2OSwgODkzOSwgNDEyNDUsIDAsIDQxMTcwLCAxNDU0LCAxMTM2OSwgNjQ3NywgMTIxNTcsIDAsIDAsIDAsIAotICAgIDQxMTcyLCA3ODU1LCAwLCAwLCAxMDQ4MCwgMCwgMCwgNzc5MzYsIDgyNjQsIDEyNjEwLCA5ODMzMDAsIDY0NSwgMTI2NjE2LCAKKyAgICA0MTE3MiwgNzg1NSwgMCwgMCwgMTA0ODAsIDAsIDAsIDc3OTM2LCA4MjY0LCAxMjYxMCwgOTgzMzA4LCA2NDUsIDEyNjYxNiwgCiAgICAgNzYwOSwgNDA5NzMsIDY5OTQzLCA3MzgzMywgNjk5NDgsIDU4MjQsIDk4NCwgNzc5MTgsIDEwNjg4LCA1ODUxLCAwLCA3NzI5LCAKICAgICA3Mzk4MiwgMTIwNTE4LCAwLCAxOTUwODYsIDQzMzY5LCAwLCAxMjgxNDAsIDY4NDE1LCA5ODMwOTMsIDQ1MzgsIDEyMDQwNiwgCi0gICAgNDMxNDEsIDAsIDk4MzIwOCwgNzQyMTQsIDczODg2LCAwLCAwLCAxMTg5MDIsIDQzMDA1LCA3ODQ0OCwgOTU1MiwgMCwgMCwgCisgICAgNDMxNDEsIDAsIDk4MzIxMCwgNzQyMTQsIDczODg2LCAwLCAwLCAxMTg5MDIsIDQzMDA1LCA3ODQ0OCwgOTU1MiwgMCwgMCwgCiAgICAgOTgzMTU5LCAxMjk5NywgMCwgMCwgMCwgMCwgMjM4MSwgMTI4ODMsIDEwOTk0LCAxMDUyOSwgNDE5MDYsIDAsIDAsIDAsIAogICAgIDEyNDI1LCAxMDY2MSwgMTA4NTYsIDk2MTQsIDI0MjgsIDQxNDc4LCA4NTgyLCAxMDA2NCwgNzM5MzAsIDAsIDAsIDAsIAotICAgIDY0ODk2LCAxMTkxNjIsIDE5NTIsIDkyMTgxLCA4NDU1LCAxMDA4MiwgMTE1NzUsIDk4MzQ4MiwgMTE5NTY2LCAwLCAxMjgwOCwgCisgICAgNjQ4OTYsIDExOTE2MiwgMTk1MiwgOTIxODEsIDg0NTUsIDEwMDgyLCAxMTU3NSwgOTgzNDkwLCAxMTk1NjYsIDAsIDEyODA4LCAKICAgICAxMjE4MywgNjE0NSwgMTE4OTU1LCA2NDkyOSwgOTI0MzMsIDAsIDk4MzE5MywgNDMxODYsIDQyNTA5LCAwLCAzOTIyLCAKICAgICA5MTg3LCA5ODM2MTQsIDAsIDEwMTkxLCAxMTkwNTcsIDExNzUyLCAzMzUzLCA5MzU4LCAwLCA3MTM2NiwgNjY2ODAsIAotICAgIDEyMDA5MCwgODI0OCwgNzkzMSwgODU1OCwgOTc5NSwgNjgzODAsIDk4MzI4OSwgMCwgMTIwMDgyLCAxMjAwODEsIDEyMDA4NCwgCisgICAgMTIwMDkwLCA4MjQ4LCA3OTMxLCA4NTU4LCA5Nzk1LCA2ODM4MCwgOTgzMjk3LCAwLCAxMjAwODIsIDEyMDA4MSwgMTIwMDg0LCAKICAgICA0MTAyNywgMTIwMDg2LCAwLCAxMjAwODgsIDczNjYsIDcwMTksIDEyMDA3MywgMCwgMTE3NTEsIDEyMDA3OCwgNzgyOTQsIAogICAgIDY0NjU3LCA4NjU3LCAxMjAwNDgsIDg1OTQsIDEyMDA2OCwgMCwgMCwgMTIwMDY5LCAxMjAwNzIsIDEyMDA3MSwgMCwgMCwgCiAgICAgNDMxNTQsIDQxMDI5LCAwLCAxMTMzMiwgNjUzODAsIDc3MjgsIDk0MDc3LCAxMTI5NCwgMCwgNjY2NjUsIDc4NTEsIDAsIAotICAgIDgzNzUsIDg2OTksIDAsIDQyNTI0LCAwLCA5MDg1LCA5NDA0MSwgNzUwNCwgOTMyNywgNjE2MCwgMTI4MDk1LCA5ODM4NTUsIAorICAgIDgzNzUsIDg2OTksIDAsIDQyNTI0LCAwLCA5MDg1LCA5NDA0MSwgNzUwNCwgOTMyNywgNjE2MCwgMTI4MDk1LCA5ODM4NjQsIAogICAgIDAsIDgwODgsIDAsIDc0MDEyLCA5MjUwMCwgMCwgNDQzOSwgNjkyNiwgOTgzMDQ3LCAxMjkyNCwgMTI4MjI3LCA0MjM2OSwgCi0gICAgNDM1MCwgNjU0OTEsIDY1MTQ1LCA5MDQxLCA0MzU1OSwgNjQ1NzcsIDEwODI2LCAwLCAxMTI5NiwgOTgzMjc1LCAwLCAwLCAKKyAgICA0MzUwLCA2NTQ5MSwgNjUxNDUsIDkwNDEsIDQzNTU5LCA2NDU3NywgMTA4MjYsIDAsIDExMjk2LCA5ODMyODMsIDAsIDAsIAogICAgIDY1ODI1LCA5NTc3LCA2ODE5OSwgMCwgNjQ2NzAsIDk4MzEyMSwgNzgwNTYsIDY3OTMsIDExMjk1LCAwLCA3ODA1MywgCiAgICAgNzM4NzIsIDAsIDAsIDEwOTAyLCAwLCAwLCA3ODA3MCwgNzgwNjgsIDEwNDcyLCAyOTk1LCAwLCAwLCA2NDY4MiwgMjM3MSwgCiAgICAgNzgwNjksIDEyMDgwOCwgMjU5LCAxMDA5LCA5MjE3MSwgMjQwMiwgMjMzMywgNjQ0MCwgMTk0NzQxLCAwLCA2NTEyNSwgCkBAIC0xODAxMCwxOSArMTgwMjksMTkgQEAKICAgICAxMjcwNzAsIDQxMjYxLCAxMTkzNjIsIDQzNjQwLCA4NjEzLCAwLCA5NDA0OSwgNjczNiwgMTk1MDkyLCA0MTQ5MiwgMTIwMDUsIAogICAgIDY5OTI3LCAwLCAxODkwLCAxMjAwNTYsIDAsIDAsIDAsIDcyOTMsIDc5OTEsIDAsIDEwNTc4LCAwLCA3ODA3NiwgMTk0NzM4LCAKICAgICA3ODA3NywgNjk5MjgsIDAsIDc4ODAwLCA5MjY1MywgNjQ0NDUsIDQyNjY4LCA2NjM1LCAwLCA2MTY0LCA2NTE3MCwgMCwgMCwgCi0gICAgNzY3NiwgMTE2NjQsIDAsIDk4MzY0OSwgNjk3MDcsIDAsIDExODgxMiwgMCwgMCwgMTI4MDQ1LCA5MTc1LCAxMTkyNSwgCisgICAgNzY3NiwgMTE2NjQsIDAsIDk4MzY1OCwgNjk3MDcsIDAsIDExODgxMiwgMCwgMCwgMTI4MDQ1LCA5MTc1LCAxMTkyNSwgCiAgICAgNzgwNDUsIDkwODgsIDAsIDY0NTQ1LCAxMzk2LCAwLCA3NTQ2LCAzODQ3LCAxMjcxNzcsIDEyNzgzNSwgNDk4NSwgMTMyODgsIAogICAgIDY3MiwgODA5OCwgNDMxOTYsIDE5NDc0NiwgOTgzMDk2LCAxMjgxMjYsIDQyNjU1LCA3NDA0MywgNjUwNzIsIDE1NzcsIAogICAgIDExNzcyLCAxMzA0MSwgNTkyOCwgNDUyNSwgMTA2NTgsIDY1OTExLCAxMjY2LCAxMDE4MCwgMCwgMTI4NTg0LCAxMjYyMiwgMCwgCiAgICAgMCwgMCwgMTk0NzE0LCAxMjcxMzksIDEzMzEwLCA3NzMsIDE5OTMzLCAxNTM5LCAwLCAxMjY5ODMsIDQyNzMxLCA2Nzk3MiwgCiAgICAgMCwgMCwgMCwgMzA1MSwgNTg2MiwgNzgyMywgOTI0NzgsIDAsIDEyMDQxMSwgMzI1MCwgNDM5OTEsIDY5Njg3LCA2NjY0OSwgCi0gICAgOTUxMCwgNjYyMzcsIDk4MzI5NCwgMCwgNDEwNjYsIDY0NjczLCA5MTc5NjMsIDkxNzk2NCwgMCwgMzUwNSwgODcwNywgCisgICAgOTUxMCwgNjYyMzcsIDk4MzMwMiwgMCwgNDEwNjYsIDY0NjczLCA5MTc5NjMsIDkxNzk2NCwgMCwgMzUwNSwgODcwNywgCiAgICAgOTE3OTY4LCA2NzI1LCAxMjgwMTMsIDkxNzk3MSwgOTIzMTQsIDM0NzEsIDkxNzk3MCwgNTQ3OSwgODgyLCA2Njg2LCAKLSAgICAxMTk1ODQsIDExNjEzLCAxMjA3NzIsIDQyNzU0LCAwLCA5ODMyOTgsIDkyNjk2LCAwLCAwLCAwLCAxMjg1MjMsIDMyMjUsIAorICAgIDExOTU4NCwgMTE2MTMsIDEyMDc3MiwgNDI3NTQsIDAsIDk4MzMwNiwgOTI2OTYsIDAsIDAsIDAsIDEyODUyMywgMzIyNSwgCiAgICAgOTE3OTk2LCA0NDMzLCA0MTE1NiwgNDM5NzMsIDQzMTczLCAxNDQzLCA0MzgxLCAwLCAwLCAxMDkyNiwgMTE3NTYsIDExNzU3LCAKICAgICA2NDg3OSwgOTE3OTQ5LCA5MTc5NTAsIDEyNzg0OCwgMTMyMjcsIDAsIDEwMDIxLCA1MTYwLCAxMzg3LCAwLCA5MTc5NTMsIAogICAgIDQxNDE4LCAwLCA2NTkxNCwgNjcyMSwgMjE3LCA5MTc5NTUsIDkxNzk2MCwgOTE3OTYxLCAxMDQ0MywgMTA3ODksIDQxMTU4LCAKLSAgICAxMTkyNTcsIDQyNzQsIDk4MzI5MiwgNDE0ODMsIDAsIDQxMjUwLCAwLCA0MjE3OSwgMCwgNTkzMSwgMTE3NDQsIDY5MjMyLCAKKyAgICAxMTkyNTcsIDQyNzQsIDk4MzMwMCwgNDE0ODMsIDAsIDQxMjUwLCAwLCA0MjE3OSwgMCwgNTkzMSwgMTE3NDQsIDY5MjMyLCAKICAgICAwLCA0MTI1MiwgNjY2ODIsIDAsIDExOTYzNywgNDEyNDksIDEzNjYsIDY0NjM1LCA2NTA0NywgMTI0NjYsIDAsIDAsIDQzOTcsIAogICAgIDEyODAzNywgMTI4MzM2LCA0MTI5NiwgOTU0NSwgNDEyOTEsIDEyODA0OSwgMCwgNDE0ODUsIDM1MTEsIDQxMjgyLCA1OTIzLCAKICAgICAxMDQwMCwgMCwgMTI4ODE4LCA3NjAsIDAsIDEyMDg4LCA1Nzg2LCAwLCA0MjI1NiwgMTE5ODY5LCAxMTk4NjAsIDQxNywgCkBAIC0xODAzMiwxNSArMTgwNTEsMTUgQEAKICAgICAxMTk1NzYsIDAsIDAsIDEzNzUsIDY2NzA1LCA0MzU3MywgNjUyNjAsIDQyMDYzLCAwLCA0MjgxMSwgMTAzMTIsIDY5ODQ1LCAKICAgICAxMjA3OTQsIDc4NDAsIDAsIDQzNjMwLCAxMDI1MiwgMCwgMTI4MTA0LCA0MzE4NSwgMCwgNDM5NiwgMCwgMTE5ODgwLCAKICAgICAxMDc2OSwgOTY3NiwgMTE5MDQxLCAwLCA5NzUzLCAwLCA4OTQ0LCAwLCAwLCAxMDQ3MywgMCwgMCwgNjA3MiwgNDMwMjUsIAotICAgIDEwMjk5LCAwLCAwLCAxMjA2MDgsIDY2MzI2LCA5ODM0MzksIDEyNzc5NCwgMCwgNDM4MTEsIDkzMzAsIDEyMDU5NiwgNzIyMiwgCi0gICAgMTAyODMsIDEwMzE1LCAxMDM3OSwgNDk5NiwgOTgzNzczLCAxMzI4MSwgNjY1MTcsIDc4NjUsIDEwMDg3LCA3ODM0MywgMCwgCisgICAgMTAyOTksIDAsIDAsIDEyMDYwOCwgNjYzMjYsIDk4MzQ0NywgMTI3Nzk0LCAwLCA0MzgxMSwgOTMzMCwgMTIwNTk2LCA3MjIyLCAKKyAgICAxMDI4MywgMTAzMTUsIDEwMzc5LCA0OTk2LCA5ODM3ODIsIDEzMjgxLCA2NjUxNywgNzg2NSwgMTAwODcsIDc4MzQzLCAwLCAKICAgICA3ODM0NywgMCwgMCwgNzU2NSwgNjYzNjMsIDEyOTUyLCA2NDgwNiwgNDMxODAsIDc3OTI4LCA3NDE0LCA3NzkyOSwgNDM5ODIsIAogICAgIDc0Mjg4LCA2MjIsIDc0MDIzLCA4ODUsIDQzNDA1LCAxNjAyLCAwLCAwLCA4NTIsIDAsIDEyMTYwLCAwLCAxMDIxMiwgCiAgICAgNjU0MzUsIDAsIDEyMDcxLCA5NjA5LCAxMjE1NiwgOTE3OTgzLCA5MTc5ODQsIDQzNTg2LCAxMTAzNSwgMTA0MTEsIAogICAgIDkxNzk4OCwgMTAyNTUsIDY3MTAsIDEwMjc5LCA0MTk0LCAxMDM3NSwgNzM5MDAsIDAsIDQzMTUsIDEyNjQ0LCAxMjc1MTYsIAogICAgIDc3OTM3LCA0MzYzOSwgNDMzNDMsIDc4Nzc3LCA5MTc5OTgsIDExNTAxLCA0MTE3NywgMTI4Njg5LCAwLCA5MTc3OTIsIDAsIAogICAgIDkyNDEzLCA4NzE1LCAwLCA0MTE3OSwgMCwgNDMzMTMsIDAsIDQxMTc2LCAwLCA5OTQsIDAsIDg0NTIsIDEyNzEwMywgCi0gICAgNzM5NjYsIDAsIDAsIDU5MjEsIDAsIDI1OTcsIDAsIDU5MjIsIDExODkwMywgNzc5NDMsIDQxODYsIDkyNTMxLCAxMjcxMDYsIAorICAgIDczOTY2LCAwLCAwLCA1OTIxLCAwLCAyNTk3LCAwLCA1OTIyLCAxMTg5MDMsIDc3OTQzLCA0MTg2LCA5MjUzMSwgMTE5OTY3LCAKICAgICAxMjcxMDUsIDY3MTgsIDAsIDQ0MDYsIDc0NjAxLCA4NDgwLCA5MTkyLCA5NzQ3LCAxMjY1MzAsIDQ0MTMsIDkyMTk2LCAKICAgICA0MjI2OCwgMzE5OCwgNTkyNCwgNTkyMCwgOTI0NjksIDY5MjEsIDc4MDgxLCA3NDAwNywgNDI4NjksIDg0MTgsIDExNjgxLCAKICAgICA0MzE2OSwgMTAxNzYsIDAsIDc0MiwgMCwgMjg5MywgMTA3NzIsIDY1Mjc2LCA1OTM3LCAxOTE0LCAyNTUzLCAxMTY4MiwgCkBAIC0xODA2Myw3ICsxODA4Miw3IEBACiAgICAgNzgzMCwgMTE2NTEsIDEzMDkzLCA2NDAwMiwgMCwgNjU3NDIsIDEyODc0LCAxMTk1OTcsIDExNTkwLCAwLCA3NDA0OCwgCiAgICAgMTI4MzUwLCA4NTk1LCAwLCA5MTc5NDcsIDQzNzAzLCAxMzA5NywgMCwgNjQ2NDMsIDEzMjgzLCAxMjY5NywgMCwgMTIzODEsIAogICAgIDM0ODgsIDU5MzMsIDEwMDMzLCA3MzczOCwgNjYyNDEsIDY1NTcwLCAwLCAxMjI5NywgMTE5MTUzLCAxOTU1LCAwLCA1MzQ5LCAKLSAgICA0MjUzOCwgMCwgMCwgNzQxMSwgOTQ2MiwgOTE3NTU0LCAwLCAwLCAwLCA0MjczNiwgMCwgNTc1NiwgOTgzMjE5LCA3NjM4LCAKKyAgICA0MjUzOCwgMCwgMCwgNzQxMSwgOTQ2MiwgOTE3NTU0LCAwLCAwLCAwLCA0MjczNiwgMCwgNTc1NiwgOTgzMjIxLCA3NjM4LCAKICAgICA0MTY0MiwgNDI3NjQsIDAsIDQzMTA5LCA3NjM3LCA1NzUyLCA3NDAzNywgMCwgNzM4MzIsIDEyODgyNywgMTIwNjM1LCAKICAgICAxMjgyMzEsIDc4MzM0LCAwLCA3NjM2LCA2NTE3MSwgOTEyNCwgMCwgNzg4OTIsIDEyMDc5OCwgMjkxLCAwLCAwLCAyMDI3LCAKICAgICA2NjIzMCwgMTAwODAsIDc4MTM2LCAxMDQwMywgMCwgNDY0MCwgNjQ3MTMsIDEwMjI0LCAxMjA0MjksIDQyNTEyLCAxMjA0MzEsIApAQCAtMTgwNzUsMTcgKzE4MDk0LDE3IEBACiAgICAgNzgyNzAsIDEyNzk4MiwgOTgzMTcyLCA2NDcyOCwgMCwgNzg2NzMsIDc4Njc0LCAxNjU5LCA5MTksIDQyNzg0LCAxNjcxLCAKICAgICAxOTUwODksIDYwNjksIDkyMTksIDEyODU1OCwgMTY2MSwgMTMxMjAsIDYzNzg0LCA2OTgxOSwgMTAxNDAsIDk3MTMsIAogICAgIDExOTE0MywgMCwgMCwgOTQwNTAsIDIzMDYsIDEwNDg1LCAxMTg5NDMsIDYwNjgsIDEwNjEyLCAxOTUwOTksIDExOTU2NywgCi0gICAgMTk1MTAxLCA5MjU2MSwgNDE0NjIsIDEyMDQ3MCwgMTk1MDc5LCA1NDIyLCAxMjgyMzQsIDAsIDAsIDAsIDEwMjI5LCAKKyAgICAxOTUxMDEsIDkyNTYxLCA0MTQ2MiwgMTIwNDcwLCAxOTUwNzksIDU0MjIsIDEyODIzNCwgOTgzNjI5LCAwLCAwLCAxMDIyOSwgCiAgICAgMTA2MzUsIDgyNiwgMTI4MDgxLCAxOTUwODIsIDE5NTA4NSwgMTk1MDg0LCAxOTUwODcsIDY0ODMsIDkyMjExLCAxODA4LCAKICAgICA3ODQ4LCAwLCA4MTAwLCA3ODIyNywgNzg2NjksIDc4NjcwLCAxMzMwMSwgNzg2NjcsIDk2NjcsIDc4NjY1LCA3ODg3MiwgMCwgCiAgICAgMTEwMDMsIDk5MDQsIDAsIDAsIDEyMDY5MCwgOTE0NCwgMTA5MjEsIDAsIDc4NjgwLCA5ODQwLCA2NTEzMSwgNzg2NzgsIAogICAgIDc3ODQxLCAxMDMxMywgMCwgMCwgNjQzMjAsIDEwMjY1LCA3ODY4NiwgMTA5NjIsIDc4Njg0LCA0MzAwOCwgODk0NSwgCiAgICAgNzg2ODMsIDAsIDQxLCAxOTUwNzIsIDE3OTIsIDEyMDUxNSwgMTk1MDczLCA4NjU1LCAxOTUwNzUsIDkyNTQ0LCA3Nzk1MSwgCi0gICAgMTIwNjYsIDAsIDM4NSwgNDE1MiwgMjU4NSwgMTI3ODA0LCAxMTkwNjgsIDMxMjYsIDAsIDc0MTM2LCAxMDk1NywgOTgzNjk0LCAKKyAgICAxMjA2NiwgMCwgMzg1LCA0MTUyLCAyNTg1LCAxMjc4MDQsIDExOTA2OCwgMzEyNiwgMCwgNzQxMzYsIDEwOTU3LCA5ODM3MDMsIAogICAgIDQzMjU4LCAxMTkxMTYsIDEyNzg3MywgMTMxNTcsIDAsIDkxNzU0NCwgMzU3MCwgMCwgNzQ0MywgMCwgNDQwMDYsIDY5OTcsIAogICAgIDY4MDA0LCAxMjY2MzEsIDc4NzksIDg3MzksIDExMDc1LCAwLCA2NTIxNiwgMCwgNjk3OTUsIDI1OTMsIDg0NjMsIDc4MTAsIAogICAgIDkxNzg2MiwgNzgzOSwgMTE5OTEzLCA3ODgwNiwgMTE5OTEyLCA5NjkxLCA0NDExLCA3ODgwMiwgMCwgMCwgNDM0NDIsIAotICAgIDY5ODUxLCA2NTI1NCwgMTAwNjYsIDk4Mzg4MCwgMCwgMCwgMCwgMTMwNjEsIDgwMTYsIDc4Njg3LCAxOTkzMiwgNjQ4MzEsIAorICAgIDY5ODUxLCA2NTI1NCwgMTAwNjYsIDk4Mzg4OSwgMCwgMCwgMCwgMTMwNjEsIDgwMTYsIDc4Njg3LCAxOTkzMiwgNjQ4MzEsIAogICAgIDAsIDExOTkyMywgMTIzOTAsIDExOTE3MSwgMTYzNCwgNjgxMTUsIDAsIDExMDU2LCA5ODM1NzQsIDExOTkyNSwgMCwgCiAgICAgNDExNjUsIDExMzI4LCAxMjQ1MCwgMCwgNDExNjYsIDAsIDEyNDU2LCAxMTk5MTQsIDE3MSwgNTk0MSwgMTI0NTIsIAogICAgIDE5NDcwOSwgMTI0NTgsIDEyNTMxLCA3ODc3OSwgNDMwMTMsIDYzODAwLCA3NDE2MiwgMTI3NTY5LCAxMjA0ODMsIDk5NjksIApAQCAtMTgxMDAsNyArMTgxMTksNyBAQAogICAgIDEzMjQ0LCAxMjA0NjYsIDQyMTY3LCA3NDM1LCA3ODE5MywgNTM4MCwgMTE5MDg2LCA2OTIyNSwgMTE1NSwgMTEzNjUsIAogICAgIDQzMTI2LCA3Nzk3MiwgMCwgNjU2ODQsIDAsIDU2MDEsIDY1MTkyLCA0Mjc2NSwgNjM3NTIsIDAsIDc5ODcsIDEyODU0MywgCiAgICAgMTE3MiwgNjk3OTksIDY3ODYsIDQzNjAxLCAxMjA0NzYsIDc0MTI2LCA1NjAzLCAwLCA0NDczLCAwLCAxOTQ4MjMsIDAsIAotICAgIDY1MzQ3LCA2NTM0NiwgNjUzNDUsIDAsIDEyNzM4NCwgNTM0NywgNjk4MDIsIDk4MzYyMywgNzM4NjgsIDExODk0NCwgCisgICAgNjUzNDcsIDY1MzQ2LCA2NTM0NSwgMCwgMTI3Mzg0LCA1MzQ3LCA2OTgwMiwgOTgzNjMyLCA3Mzg2OCwgMTE4OTQ0LCAKICAgICAxMDU4OCwgMCwgMCwgNjM3NTUsIDAsIDUzNDMsIDc4NDIyLCAxMjA2NjEsIDQ1NTUsIDUzNDEsIDAsIDcwMDcxLCAxMjg2NzAsIAogICAgIDUzNTEsIDc4Njc1LCA0MzEwNCwgNjUyNDQsIDkxNzg5MiwgNjQ1NDEsIDQyNTE5LCA3NDQ3MiwgMCwgMCwgNzQ3NjUsIAogICAgIDkxNzg4OCwgMTI3NTEwLCA2NjM4LCAwLCA2NTExMywgMjcxLCA3NDE4MCwgNjUzNzAsIDg4MzUsIDY1MzY4LCAxMjY1MywgCkBAIC0xODExMCwxNCArMTgxMjksMTQgQEAKICAgICAwLCA0OTE2LCAwLCAzODAsIDEwOTU4LCA2NjU2MywgNzc5NTUsIDY5NzczLCA5NzczLCAxMzE2NywgMTI5MTgsIDQxMDk2LCAKICAgICA3Mzk4MCwgNjkyNDUsIDc4MjU0LCA5MTc4OTMsIDEwNjg0LCAwLCA5MTc4OTYsIDAsIDc5NDYsIDEyNTQxLCA4MTgyLCAKICAgICA2NzU4NiwgNjk3ODAsIDAsIDAsIDAsIDAsIDkwMDUsIDEyMjUsIDY2MzAsIDAsIDAsIDAsIDY4MDExLCA4ODQ3LCAwLCAKLSAgICA2NTg3NiwgNTUzNSwgODMyOSwgNzQ1OTAsIDk4MzIwNiwgOTI2MDksIDAsIDAsIDMxMjcsIDI1OTUsIDY1NzEzLCA0MjAxMywgCi0gICAgOTgzODQ5LCA1NjA3LCA0MTA4OSwgMCwgMCwgNzQyNTYsIDI2NjUsIDExMzA0LCA0Mzc1MSwgNzQyMDAsIDQ5NzAsIDg3NjQsIAorICAgIDY1ODc2LCA1NTM1LCA4MzI5LCA3NDU5MCwgOTgzMjA4LCA5MjYwOSwgMCwgMCwgMzEyNywgMjU5NSwgNjU3MTMsIDQyMDEzLCAKKyAgICA5ODM4NTgsIDU2MDcsIDQxMDg5LCAwLCAwLCA3NDI1NiwgMjY2NSwgMTEzMDQsIDQzNzUxLCA3NDIwMCwgNDk3MCwgODc2NCwgCiAgICAgMTIwNDU5LCA4OTM0LCA5MjcyNiwgNDE1NjYsIDQ0OTIsIDAsIDY1MDExLCA0MTA5MCwgMCwgMCwgMTE4OCwgNzI1NCwgCiAgICAgMTEwMCwgMCwgMTI4MzAxLCA0MTA4MSwgMjkxMiwgMTE3NDksIDY5NzkyLCAwLCA2ODAxOSwgMzU3MiwgMTAwMjMsIDQ5NTksIAotICAgIDEzMDc5LCAwLCA5ODMyNjgsIDk3MjksIDAsIDAsIDAsIDQzMzYxLCAwLCAwLCAxMTgwMywgNzk5NiwgOTkwNywgNDE0NTAsIAotICAgIDEzMzA0LCAxMjgyOTAsIDEyNzI2MCwgNDE0NTEsIDAsIDExMDk1LCA4MjczLCAxMjc1MzMsIDM0NTEsIDk4MzMwMSwgOTcyLCAKLSAgICA0MTQ1MywgOTgzNDM0LCAwLCA3Mzg4MywgNjgwMjIsIDczOTQ1LCA5ODM3MjYsIDIyODgsIDE5OTU1LCA5NTM4LCAwLCAKLSAgICA2OTgwNywgMCwgMCwgMCwgMCwgMTEzOTYsIDk4MzQzMiwgMTEwMTksIDAsIDAsIDAsIDY4MDIwLCA0MTA3OCwgNzEzNjUsIAorICAgIDEzMDc5LCAwLCA5ODMyNzYsIDk3MjksIDAsIDAsIDAsIDQzMzYxLCAwLCAwLCAxMTgwMywgNzk5NiwgOTkwNywgNDE0NTAsIAorICAgIDEzMzA0LCAxMjgyOTAsIDEyNzI2MCwgNDE0NTEsIDAsIDExMDk1LCA4MjczLCAxMjc1MzMsIDM0NTEsIDk4MzMwOSwgOTcyLCAKKyAgICA0MTQ1MywgOTgzNDQyLCAwLCA3Mzg4MywgNjgwMjIsIDczOTQ1LCA5ODM3MzUsIDIyODgsIDE5OTU1LCA5NTM4LCAwLCAKKyAgICA2OTgwNywgMCwgMCwgMCwgMCwgMTEzOTYsIDk4MzQ0MCwgMTEwMTksIDAsIDAsIDAsIDY4MDIwLCA0MTA3OCwgNzEzNjUsIAogICAgIDI2MSwgNTkyNywgNzc5MSwgMCwgNzM2MiwgMCwgMTA2OTYsIDAsIDYwNzMsIDk4MzgsIDExODkyMCwgMCwgNjA3NSwgCiAgICAgOTM5OTUsIDI4MiwgMTI2NTEwLCA2NDM3LCA3NDA3OCwgMTI4MDAwLCA5ODAxLCAwLCA3NDE3NywgMCwgMCwgMzQ3NCwgCiAgICAgMTE4Nzg3LCAwLCAxMjA2NTUsIDYwODEsIDAsIDc4ODc0LCA3NDA3NiwgNzg4NzksIDAsIDAsIDAsIDAsIDAsIDg3NTEsIApAQCAtMTgxMzgsNyArMTgxNTcsNyBAQAogICAgIDQ1NjQsIDAsIDAsIDc0MjcxLCA3Mzc1MywgODM3NCwgOTgzMTU2LCAwLCA2ODI5LCA1MjI1LCAxMjg4MDcsIDEyNzM4NSwgMCwgCiAgICAgMCwgMTE5NjE1LCAwLCA3NDc5MywgNTYyNiwgNzM4MDcsIDExNzcxLCA3NDA3NSwgMTI3MjM2LCAxMjgwMTksIDQyNjE0LCAKICAgICA1MzUzLCA1NjI1LCA3NDE3OSwgMCwgMCwgMTAxMCwgNjQ1NzIsIDQxNzgwLCA0MjYyMywgNjQyNzcsIDY5OTQyLCA2OTUyLCAKLSAgICA5ODMyNjQsIDEyMDc1MiwgNzg3NjIsIDI1OTAsIDU2MjksIDY1NTUyLCA3NTUxLCAxMDMyNSwgNTYzMiwgMTA0NzEsIAorICAgIDk4MzI3MiwgMTIwNzUyLCA3ODc2MiwgMjU5MCwgNTYyOSwgNjU1NTIsIDc1NTEsIDEwMzI1LCA1NjMyLCAxMDQ3MSwgCiAgICAgMTIwMDM4LCAxMjAwMjcsIDEyMDAyOCwgMTIwMDI1LCA1NjI4LCAxMjAwMzEsIDk3MCwgMTIwMDI5LCA0NzcyLCAyNDAwLCAKICAgICA1NjI3LCAxMjAwMTcsIDEyMDAxOCwgMTIwMDIzLCA2NDI3NSwgMTIwMDIxLCA4Nzg2LCAwLCAyMDMsIDAsIDAsIDAsIDAsIAogICAgIDc4MzUwLCAwLCA2NDM3OCwgNDIwNTQsIDAsIDAsIDU1NCwgMTE5NjQ5LCAxMTM1OCwgMCwgMTIxODIsIDQyMDQ4LCAxMTA2NSwgCkBAIC0xODE1MCw5ICsxODE2OSw5IEBACiAgICAgMTE2OCwgOTI1MSwgOTA4MiwgMTE5OTY0LCA2NDA1NSwgNDI3ODEsIDM4NjYsIDEyMzIzLCA0MTUxMiwgNzM4MDUsIDY4MTIxLCAKICAgICAwLCA0MTQ5NCwgOTIzMTYsIDQ2NjAsIDAsIDEwNDA1LCAwLCA3ODgwMywgMCwgMCwgNDIwNDAsIDczOTE4LCAxMTk2MjcsIAogICAgIDc5NDQsIDQxNDU0LCAxMjYwNSwgMCwgNDIyMDUsIDQxNDU1LCAyMzYsIDY0MDUxLCA3ODg2NywgODIxNCwgMCwgMCwgMCwgCi0gICAgNDE0NTcsIDk4Mzk2MSwgMTE5NTg5LCAxOTY5LCAyMzg0LCA4MDk3LCA5MTc4NjQsIDc0MTMsIDY4MDEyLCA3ODAyOSwgCisgICAgNDE0NTcsIDk4Mzk3MCwgMTE5NTg5LCAxOTY5LCAyMzg0LCA4MDk3LCA5MTc4NjQsIDc0MTMsIDY4MDEyLCA3ODAyOSwgCiAgICAgODc2NiwgMCwgNzgwNzksIDU4NTQsIDEyNzk3NCwgMTA1ODMsIDAsIDExOTk4OSwgMCwgMTA0MTYsIDkxNzg2OSwgMzg3MiwgCi0gICAgOTE3ODY4LCAwLCA4NDI5LCAwLCAxMTg4MDYsIDI4MzgsIDEyODgwMiwgMCwgOTE3ODY2LCAwLCAwLCAwLCA5ODM5NTgsIAorICAgIDkxNzg2OCwgMCwgODQyOSwgMCwgMTE4ODA2LCAyODM4LCAxMjg4MDIsIDAsIDkxNzg2NiwgMCwgMCwgMCwgOTgzOTY3LCAKICAgICA5NDAwNSwgMTEwOTYsIDEyMDgxMywgMTA1NTMsIDE2NjIsIDg0ODMsIDEyMDM5NiwgNDM2MDUsIDU4OTIsIDQzNDE4LCAwLCAKICAgICA3Mzc0MiwgNjYsIDY1LCA2OCwgNjcsIDcwLCA2OSwgNzIsIDcxLCA3NCwgNzMsIDc2LCA3NSwgNzgsIDc3LCA4MCwgNzksIAogICAgIDgyLCA4MSwgODQsIDgzLCA4NiwgODUsIDg4LCA4NywgOTAsIDg5LCAxMTk4NjIsIDEwMzU3LCA3Mzg1LCA4MTcwLCAxNzA0LCAKQEAgLTE4MTY3LDcgKzE4MTg2LDcgQEAKICAgICAxMjQ3MiwgMCwgNjk4NjQsIDc2OTksIDEyMzkzLCAwLCAwLCAwLCA3NDUxOCwgODIyMywgMCwgNDI2MSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMTI4MzAyLCAwLCAxMjgwNDYsIDQzNDE5LCAwLCA2NDU1NCwgMTA1NzQsIDM4NzgsIDAsIDQyMzUyLCAxNzUyLCAKICAgICA3Mzc4NSwgMCwgNDI1MDYsIDEyODU0MSwgMTAxOTksIDAsIDAsIDY4MDIxLCA2NTkxOSwgMCwgNjY5NSwgNzIwLCAzMjQsIDAsIAotICAgIDAsIDQzNDA2LCA5ODM3MjcsIDE0NjQsIDQwOTg1LCAwLCA3OTc0LCAwLCA0MzQ3NCwgMCwgNjQ0ODgsIDAsIDAsIDY0MDQxLCAKKyAgICAwLCA0MzQwNiwgOTgzNzM2LCAxNDY0LCA0MDk4NSwgMCwgNzk3NCwgMCwgNDM0NzQsIDAsIDY0NDg4LCAwLCAwLCA2NDA0MSwgCiAgICAgNzQ3ODcsIDAsIDc4ODY1LCA5MjI1OCwgNjU1OTcsIDAsIDc4ODYzLCAwLCAxMzAyLCAwLCA3ODg2MSwgMTE5MTM0LCAwLCAwLCAKICAgICA1MjA0LCA3NDc3NCwgNDM0MDQsIDExODM1LCAwLCAzOTk1LCA2ODM2MCwgNjU2MDgsIDM3MTQsIDkyMTkwLCAwLCAwLCAKICAgICAxMDk5OSwgMTE3NTAsIDAsIDQzMjUxLCA2ODY2MCwgNDMzMDEsIDAsIDEyMDU1NywgODEzMCwgODY3MiwgMTA4NDUsIApAQCAtMTgxNzUsMjIgKzE4MTk0LDIyIEBACiAgICAgNjEyLCAwLCA2NDQwMSwgNjY0NDgsIDY4Mzc2LCAwLCAxNjc0LCAwLCA1ODIzLCA5ODMxNjMsIDEyMjgwLCAwLCA1NDAsIAogICAgIDc0NTY0LCAxMTkwMTcsIDAsIDg0MzIsIDAsIDExMDczLCAwLCA2NDMxNiwgMCwgMCwgODIwLCA0MTc0MSwgMCwgMTIwNjY3LCAKICAgICAwLCA2NDY4NCwgMTI2OTkyLCAzMzU5LCA3ODAwLCA2OTkzNCwgNjUxNzcsIDYyMjYsIDM1MywgMTIzOTYsIDAsIDExOTYxMiwgCi0gICAgNjQ3NDIsIDEyODY4MiwgMTIwMjgyLCAwLCA5ODM0NDIsIDEyNDEyLCAxOTk0MSwgMCwgMTIwMjc3LCA3ODg0NywgMTg4NCwgCisgICAgNjQ3NDIsIDEyODY4MiwgMTIwMjgyLCAwLCA5ODM0NTAsIDEyNDEyLCAxOTk0MSwgMCwgMTIwMjc3LCA3ODg0NywgMTg4NCwgCiAgICAgOTQ4MSwgNDI0MTgsIDcwMDU5LCA0MTE1NywgMCwgMTE5NSwgNjQ4OTgsIDc5MjQsIDAsIDQxMTUxLCAyMDEwLCAwLCAKICAgICA0MTMyOCwgNDIzNDQsIDAsIDEyNDA5LCAwLCA0MzYwLCAxMjcwMDksIDk3MzksIDEyODU1MCwgNjk5MzMsIDczOTIxLCAwLCAKLSAgICA0MjUyMSwgODUzOSwgOTgzNzE2LCAwLCAxMTg5ODYsIDAsIDQ3ODgsIDAsIDY4MDIzLCA2NTczNCwgOTgzNDQ3LCA0Mzc5MCwgCisgICAgNDI1MjEsIDg1MzksIDk4MzcyNSwgMCwgMTE4OTg2LCAwLCA0Nzg4LCAwLCA2ODAyMywgNjU3MzQsIDk4MzQ1NSwgNDM3OTAsIAogICAgIDAsIDEzMDc1LCA3NDQyOSwgOTQwNjMsIDY0NTY5LCA0MzUzMiwgMTA4MzcsIDI0OTIsIDEyNzE5NywgMTE4OTAxLCA2ODYzNywgCiAgICAgNDExMzYsIDQzNzg1LCAxMTgxMywgOTY0OSwgNDExNTQsIDExOTYxNywgNTEyOCwgNDAzOCwgNDExNDMsIDY1NjA0LCAKICAgICA2NDg1OSwgNDE1OTIsIDY3NzEsIDE2NDgsIDU0MzUsIDkxNzgzNywgNjczNCwgNDEzNDMsIDExOTg0OCwgNjU0MzksIAogICAgIDEyNzA5LCA2OTg2LCA5MjM2NCwgNjgwMTUsIDAsIDQxMzQ5LCA3MDAyMSwgMTI1ODEsIDEwMzc0LCA1MTc1LCAwLCA3MzgwNiwgCiAgICAgMTAyNTQsIDAsIDEwMjc4LCAxMDI2MiwgNjk4NTgsIDQxMzQ2LCAwLCA2MDcsIDAsIDExOTg1MiwgMTI4ODQ2LCAxMjkyMywgCiAgICAgMTAzMTQsIDEwMjgyLCA2NTQ3NywgMTAzNzgsIDEyMDI5NywgNDA5NzYsIDgyNjUsIDAsIDExOTgzNCwgNDA5NzUsIDU4NDAsIAotICAgIDQyODM4LCAwLCA0MDk3OCwgOTgzODg4LCAxMTk4NDAsIDAsIDk4MzA3MSwgMCwgNjY0NDQsIDEwNTM4LCAwLCAyNTUwLCAKKyAgICA0MjgzOCwgMCwgNDA5NzgsIDk4Mzg5NywgMTE5ODQwLCAwLCA5ODMwNzEsIDAsIDY2NDQ0LCAxMDUzOCwgMCwgMjU1MCwgCiAgICAgMTE5ODM2LCA2Nzc5LCAwLCAwLCAzNTI1LCA2ODI0LCAxMTg4ODYsIDAsIDAsIDU2MTksIDY1ODIyLCAxMjY1NjcsIAogICAgIDE5NDg4MiwgNzQ1NSwgMCwgNTYxNiwgMTE0ODYsIDk2NTYsIDAsIDAsIDEwNzI3LCA1NjE1LCAwLCAxMjA1NTEsIDQyMzgwLCAKICAgICA2NDg5NSwgNDM2OTMsIDY2NDUxLCA4MDgsIDU0NTUsIDExMzQ3LCAwLCAxMDI2LCA1NjIwLCAxOTQ4ODcsIDAsIDExMzUwLCAKICAgICA1NjE3LCAwLCA5MjI1LCA2NDYzOSwgMTI3MDczLCA5MTQ1LCAxMjgwNjAsIDEzMzgsIDEyMDU4MSwgOTgzMTU4LCAxMjczOSwgCi0gICAgNDYwMywgMzA4NCwgOTgzMTU1LCA5MjQ4NCwgOTg1OCwgNjAzNywgMCwgMzk3NCwgNzgyMTMsIDEwMjkwLCA5ODM2OTUsIAorICAgIDQ2MDMsIDMwODQsIDk4MzE1NSwgOTI0ODQsIDk4NTgsIDYwMzcsIDAsIDM5NzQsIDc4MjEzLCAxMDI5MCwgOTgzNzA0LCAKICAgICAzMDgzLCAxMDMyMiwgMCwgMCwgMCwgNDEwMzYsIDAsIDAsIDQzMzIxLCA2NTYwNiwgMCwgNDEwMzIsIDQyMzg4LCAwLCAKICAgICA2NDcwMCwgMTAwMTEsIDE0NDUsIDQwOTYxLCAwLCAxMTkxMDUsIDAsIDQwOTYwLCAwLCAxOTQ4OTEsIDAsIDQwOTYzLCAKICAgICA2NDk1MiwgMTA0MDIsIDAsIDAsIDkyMzA0LCAxMDYwMywgMCwgMCwgOTgzMTEzLCAwLCA2NzE0LCAxMDA4MywgMTI3MDY5LCAKQEAgLTE4MjAyLDkgKzE4MjIxLDkgQEAKICAgICA0MTk3NiwgOTcyMCwgOTE3NjA2LCAxMTc2NywgNDE5NzAsIDE5NDU5NiwgNTgzNiwgMTIzNTgsIDAsIDQzNTUsIDkwNDgsIAogICAgIDEyMTgwLCA2NTAyNywgNjQ2ODAsIDEzMDM4LCA0MzY5OSwgMCwgNDE0ODgsIDEyODA4NywgODUyNywgMTk0OTE3LCAxMjM2MiwgCiAgICAgMTI0MzUsIDEyMzYwLCA0MTA1MywgMzI2NiwgMCwgMTIzNTYsIDg2MTYsIDQxNDY2LCAwLCA5MjU4OCwgMTE0NTAsIDAsIAotICAgIDM2MzgsIDEyMzU0LCAwLCAzMjE2LCAwLCAyMzU4LCA5MjYwNiwgODYzMywgMCwgOTgzNzM2LCAxMTkxODIsIDY5MjQ0LCAwLCAKKyAgICAzNjM4LCAxMjM1NCwgMCwgMzIxNiwgMCwgMjM1OCwgOTI2MDYsIDg2MzMsIDAsIDk4Mzc0NSwgMTE5MTgyLCA2OTI0NCwgMCwgCiAgICAgMCwgMTE3NTksIDE5NDkwMywgNjM2OCwgNzQ4MjMsIDAsIDQxNDIzLCA4MDc4LCAxMDUwNCwgMTI3NTU4LCA0MTY5OCwgCi0gICAgNDIyMzcsIDAsIDcwMDIsIDk4MzY2OSwgNDE0MzAsIDQyMjY3LCA0MTA1MSwgNDE0ODQsIDAsIDAsIDQxMDUwLCA0MTQ3MywgCisgICAgNDIyMzcsIDAsIDcwMDIsIDk4MzY3OCwgNDE0MzAsIDQyMjY3LCA0MTA1MSwgNDE0ODQsIDAsIDAsIDQxMDUwLCA0MTQ3MywgCiAgICAgMTA0NjYsIDEzMDk5LCAwLCAwLCAwLCA2NDM1LCAwLCAxMTM2MiwgMCwgMCwgNjUzODIsIDAsIDQxNDIwLCAwLCAzNjI1LCAKICAgICA3ODE1NywgNDE0MDksIDAsIDY5NjM5LCAyMDQxLCA5MTc4LCA5NjcyLCA0MTQyNywgNDM1NDEsIDQzMzE3LCAwLCAwLCAwLCAKICAgICA0MTQyNCwgOTE3NTk4LCAxMjA1NDYsIDAsIDEyODIxMiwgMCwgNDE0MTcsIDEyNjEsIDAsIDAsIDEyMTAyLCAxMTk2NjIsIApAQCAtMTgyMTQsOSArMTgyMzMsOSBAQAogICAgIDQxNDYxLCAxMjg4MjMsIDAsIDEyNzkxMiwgMCwgODgxOSwgMTI2NjMsIDAsIDQxMTg0LCA3NDAxNCwgMjMyLCA3NDgzNSwgCiAgICAgMTIwNjQ2LCA5MTY4LCA2NTc4NiwgMCwgMCwgMCwgOTA5NCwgMCwgMTE3NTgsIDY4NDI1LCAwLCAxMDY0LCA0MjQ2NywgCiAgICAgMTI4MDQ0LCAxMDExNSwgMTk5MjQsIDkyNzExLCAwLCA3ODYyLCA2NDU1MSwgMTMyMjQsIDg1MTYsIDQxODYyLCA2NjY1MCwgCi0gICAgNzU2MSwgNzg2MTgsIDY5NzkzLCAxODc4LCAwLCA5ODMyNjEsIDI5MTEsIDAsIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgCisgICAgNzU2MSwgNzg2MTgsIDY5NzkzLCAxODc4LCAwLCA5ODMyNjksIDI5MTEsIDAsIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgCiAgICAgMzc4NywgNDExNzQsIDAsIDQxNDU4LCAwLCA0MTQ2MywgNDI0MTMsIDExMjkyLCAyNDA2LCA3NzUsIDAsIDY1NTg0LCAKLSAgICA2OTkyMywgNjA3NCwgOTYxOCwgMTI4NjY4LCA5ODM5NDMsIDQzNDQwLCAwLCAxOTQ5MDEsIDQxNDM2LCAzNjU2LCAwLCAKKyAgICA2OTkyMywgNjA3NCwgOTYxOCwgMTI4NjY4LCA5ODM5NTIsIDQzNDQwLCAwLCAxOTQ5MDEsIDQxNDM2LCAzNjU2LCAwLCAKICAgICAxMjA2MDAsIDQxNDU2LCAwLCAxNTk5LCAxMTMzMywgMCwgNjcwMywgODUxMywgMCwgMTYxMywgMCwgNjg0NTYsIDEyNTk4LCAKICAgICA5ODMxOTEsIDEyMDczNCwgNzg3NDUsIDc0NTAwLCA0MTQ2MCwgMTAxNDUsIDEwNTQyLCA5OTM3LCA3ODc0NiwgNzAwMjksIAogICAgIDk5MDUsIDAsIDY1NzMwLCAwLCAxMjAzNzQsIDg0MjcsIDEyMDM3NSwgNTUyNDYsIDEyMDM3NiwgMCwgMTE0OTcsIDY0Njg3LCAKQEAgLTE4MjM2LDIxICsxODI1NSwyMSBAQAogICAgIDQxMjg3LCA5MjYxMCwgMCwgMCwgNDIyMTksIDEyODI1NywgMCwgNDE5ODcsIDQxNjc2LCA5ODMwNTksIDEyMDgyMywgCiAgICAgOTgzMTQ0LCA0MTY3MCwgMCwgOTI1OTAsIDI3OTYsIDU1MjkxLCAxMTY4MywgOTkwMiwgNzQ1MjEsIDY3OTg4LCAxMTQ1MSwgCiAgICAgOTgzMTExLCAxMjg4MjIsIDQyNjMxLCAyMzU5LCAwLCA2Nzg0NCwgNzQxNjQsIDQxMjM4LCA1NDgsIDExNDA1LCAxMzEzMywgCi0gICAgNjQzNjgsIDk4MzIzMywgMTI4Nzk1LCAwLCAzOTcsIDQzNjIyLCA0MjEzOSwgOTU0NywgOTU5MCwgMTI4MjM4LCAxNjE0LCAKKyAgICA2NDM2OCwgOTgzMjM5LCAxMjg3OTUsIDAsIDM5NywgNDM2MjIsIDQyMTM5LCA5NTQ3LCA5NTkwLCAxMjgyMzgsIDE2MTQsIAogICAgIDQzNjYxLCA2NDM1NiwgNjYzMDcsIDY2NTEsIDEzNTgsIDAsIDQyOCwgOTYyMCwgMTQ2NiwgNzgxMTIsIDEwOTgyLCAKICAgICAxMTg4MzEsIDEzMzMsIDcxMDQsIDQwNywgNjQyNSwgMTI4ODM0LCA3NDI1MywgMCwgMCwgMCwgNTgwNCwgMTE5NzYsIDg1NTQsIAogICAgIDkyNzIxLCAwLCAwLCA5MDU3LCA0MjI5NCwgNDEyMTgsIDAsIDAsIDc4MTM3LCAxODgzLCAxMDk1MiwgODA0OCwgNzgxNDIsIAotICAgIDQxMjI1LCA5MjYyMSwgNDI5MTUsIDk4MzY2NywgMTI4Njg0LCAwLCA0NDA3LCAwLCA2NTgwOSwgMTE5MDc0LCAxOTQ4MjEsIAorICAgIDQxMjI1LCA5MjYyMSwgNDI5MTUsIDk4MzY3NiwgMTI4Njg0LCAwLCA0NDA3LCAwLCA2NTgwOSwgMTE5MDc0LCAxOTQ4MjEsIAogICAgIDg0NDgsIDcxNDEsIDc0MTgzLCAwLCAxMjY3NSwgMTI2NTksIDAsIDQyMzYzLCAxMjA2MjQsIDE5NDgyNCwgNTUyNzMsIAogICAgIDEwNzY2LCAxMjAxMiwgMjM4NiwgNjQ3MzIsIDkxNzAsIDkxNzgyMSwgOTEyMywgNjQ1ODUsIDEyMDUwMCwgMTE5MTU4LCAKICAgICA3MTQwLCAxMDk3NywgMTI3Mzc4LCA0MTY0LCA5MDgxLCAwLCAxMjA1NjksIDQyMDQ5LCA0MjA0MiwgODcwOSwgMTI4MjgzLCAKICAgICAxMjY0NzcsIDEyMDYzNywgNDI0MTksIDY0Nzk5LCA0MjA0NywgMCwgMCwgODQ3MCwgMTE4MDcsIDY1ODk3LCA1NzcsIDAsIAotICAgIDk4Mzc1MSwgNzQzMDAsIDAsIDEyNzMwOCwgNzQ4NDAsIDAsIDAsIDEyODc5MSwgOTIyMjQsIDg3MzYsIDE0MTQsIDQyNjQzLCAKKyAgICA5ODM3NjAsIDc0MzAwLCAwLCAxMjczMDgsIDc0ODQwLCAwLCAwLCAxMjg3OTEsIDkyMjI0LCA4NzM2LCAxNDE0LCA0MjY0MywgCiAgICAgOTY4MywgNDM0ODYsIDc0MzQ0LCAwLCAyNTM2LCAwLCA2NjMzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYzMTcsIDY5OTQ1LCAKICAgICA2NjMxNSwgMjEwNiwgMTIwMjIyLCAxMTI3MywgMCwgNDMwMDQsIDc1NDEsIDAsIDAsIDk2MSwgNjQzMDcsIDY2MzI0LCAKICAgICA2NDkwNiwgMTI4NTkxLCAzMTA2LCA2NTkxNywgNDEyODQsIDE2OTYsIDAsIDg5MSwgMTIxMDUsIDAsIDQyNjI0LCAxMjgwMiwgCiAgICAgMzI2NCwgODgyNCwgMTMyNjgsIDQzMDAzLCAxMDkzNiwgMCwgMCwgMCwgMTk0ODI2LCA5MjY4OCwgMCwgMjMyMiwgMTIwMzcxLCAKLSAgICA5ODM1ODQsIDExNDQ5LCAxMjgxODcsIDQyODY4LCA0MTI4NSwgMzU0NywgMCwgMCwgMTI4NzkzLCA5ODMzOTAsIDQzMjE2LCAKKyAgICA5ODM1ODQsIDExNDQ5LCAxMjgxODcsIDQyODY4LCA0MTI4NSwgMzU0NywgMCwgMCwgMTI4NzkzLCA5ODMzOTgsIDQzMjE2LCAKICAgICA2MDg5LCA3ODY4MiwgMCwgMTIwNTc4LCA0MTcwLCAxMDI5LCAxMjc3NjEsIDEyNzAzNiwgMTE5MjI0LCA0MjM3NCwgMCwgCiAgICAgNzQ0LCAwLCAwLCAwLCA2NTgyMywgMTI3ODI2LCAwLCAzNTUxLCAwLCAwLCA0NjIzLCA1NTI2OCwgMCwgNDU5OCwgOTgzMTYyLCAKICAgICA2NTEzNiwgMTI3MTM2LCAwLCAwLCAxMDg1MSwgMCwgNjE3OSwgOTI2MDIsIDYxODAsIDAsIDExOTUyLCAxMjA3NzgsIApAQCAtMTgyNjAsMTAgKzE4Mjc5LDEwIEBACiAgICAgMjMwOCwgMCwgNzQxNDksIDAsIDIzMTgsIDk4MzE4MywgNjYzNjEsIDgxOTgsIDAsIDY0MzYwLCAxMjYwMSwgNDI1MzYsIAogICAgIDY1MjY2LCAxMjA4MjcsIDc0MzA3LCA5MjQ2MiwgNjk3MCwgNTQwNCwgNDMzMzIsIDM2NjcsIDc5MzYsIDEyOTI1LCAKICAgICAxMjY5ODksIDYzODUsIDAsIDAsIDExODk0OSwgMTA4NzQsIDY1NTA1LCAxMjgwODMsIDAsIDQyMDUzLCAyMDc1LCA0MjA1NywgCi0gICAgMTEwODMsIDQyMDUyLCAwLCAwLCA2NzY1MSwgMCwgOTY2NSwgOTIzMDAsIDk4MzY1NywgMTMxODEsIDAsIDAsIDAsIDcwMDg4LCAKLSAgICA3NDE0OCwgMCwgMCwgMTIwMjI1LCAxMjAyMjksIDEyMDIyNCwgNzQxNzIsIDQxMTQ1LCAwLCA5NDA5NiwgOTgzOTM3LCAKKyAgICAxMTA4MywgNDIwNTIsIDAsIDAsIDY3NjUxLCAwLCA5NjY1LCA5MjMwMCwgOTgzNjY2LCAxMzE4MSwgMCwgMCwgMCwgNzAwODgsIAorICAgIDc0MTQ4LCAwLCAwLCAxMjAyMjUsIDEyMDIyOSwgMTIwMjI0LCA3NDE3MiwgNDExNDUsIDAsIDk0MDk2LCA5ODM5NDYsIAogICAgIDQxMTQ4LCA4NjgzLCA3NTk0LCAxMjc1MTksIDAsIDExOTA5MCwgMTA4NjksIDQzNDU4LCA0MTE0NiwgOTI0MDcsIDExNDQxLCAKLSAgICAwLCAzNTEyLCAxMTk2MzMsIDk4MzcwMCwgODEwMywgMCwgMCwgNjUxODQsIDExNzgwLCA0MTU2MywgNDI3OTYsIDAsIAorICAgIDAsIDM1MTIsIDExOTYzMywgOTgzNzA5LCA4MTAzLCAwLCAwLCA2NTE4NCwgMTE3ODAsIDQxNTYzLCA0Mjc5NiwgMCwgCiAgICAgNjk3NDIsIDQxNTQ0LCA2NTE0NiwgMCwgMCwgMCwgMCwgMTk5NDIsIDAsIDExODkwOCwgNzk4OCwgMTA0MzYsIDc0MjczLCAKICAgICAzMjcxLCA3MzgwNCwgNjQ3MTEsIDAsIDk0MDY0LCAwLCAwLCAzODA0LCAxMzA3MCwgMTE1NTcsIDQyMDQ0LCAwLCAxMDk1LCAKICAgICAwLCAzNTk5LCAxMjc3NzQsIDAsIDEyODg2MSwgODUxNCwgMCwgMCwgMCwgNzQzNDYsIDY2Njk3LCAwLCAxMTY4NCwgMCwgCkBAIC0xODI3MiwyMyArMTgyOTEsMjMgQEAKICAgICAwLCAxMjc3NzIsIDAsIDkxNzU0MiwgMCwgMCwgNjUzOSwgMCwgMCwgMCwgMTk0ODU2LCAwLCAxMjA0OTIsIDQxMTkwLCAKICAgICAzOTczLCAxMTkzNjUsIDQ1NzUsIDQxMTkzLCA3OTgyLCA0MjksIDAsIDEyNzE5NCwgMCwgMTk0ODU0LCA2NTc5MiwgMCwgCiAgICAgMTE4OTY4LCA2NDE3LCAxMTg5MTgsIDc4MTc4LCAwLCAxOTQ4NTAsIDAsIDAsIDQ5MTksIDEwNTkwLCAxMjg1NTYsIDc3NTUsIAotICAgIDAsIDAsIDY0NTQ4LCAxMjA1MDYsIDE2MjEsIDEwMjE0LCA2NTEyNiwgMCwgMTI3MDA0LCAwLCAxMjE4OCwgOTgzNjU5LCAKKyAgICAwLCAwLCA2NDU0OCwgMTIwNTA2LCAxNjIxLCAxMDIxNCwgNjUxMjYsIDAsIDEyNzAwNCwgMCwgMTIxODgsIDk4MzY2OCwgCiAgICAgMTYxNywgODA1MCwgMCwgNTAxNSwgMCwgMTE5MTc0LCA0MjU5MCwgMTk0ODcxLCAxNzU2LCA3ODE4MSwgMCwgNjU3NjgsIAogICAgIDYzNTIsIDQxODkyLCAwLCA3NTU1LCAxMzEwMywgNTQwOCwgMjgxNywgMTIxNCwgNjk5MTksIDkyMzM1LCA5ODMxMjUsIDAsIAogICAgIDAsIDAsIDEyNzE5NSwgNzk1NywgODY4OSwgNjQ3MjMsIDEwNTYsIDQyODk2LCA3NDE0NywgMTk0ODEzLCAwLCA1NTI4NiwgCi0gICAgNzA3MywgNjU4NTAsIDEyMzI3LCA5ODM5MzksIDExOTAyOCwgMCwgMCwgMCwgMjM0MSwgODQ1MCwgODQ4NCwgODQ3NCwgCi0gICAgOTgzMjUyLCAwLCA3MDA3OSwgODQ2MSwgMTI4MTAyLCAxMjE1MywgMTI3OTksIDAsIDQzNzA5LCA0MzcwOCwgOTQ1MSwgCi0gICAgNzU3MSwgMTMwNzMsIDAsIDAsIDY4MSwgOTgzMjQ2LCA3MDMsIDAsIDMyNzIsIDg3ODEsIDEyODk0LCA3MDA3NywgMTE3MDksIAorICAgIDcwNzMsIDY1ODUwLCAxMjMyNywgOTgzOTQ4LCAxMTkwMjgsIDAsIDAsIDAsIDIzNDEsIDg0NTAsIDg0ODQsIDg0NzQsIAorICAgIDk4MzI2MCwgMCwgNzAwNzksIDg0NjEsIDEyODEwMiwgMTIxNTMsIDEyNzk5LCAwLCA0MzcwOSwgNDM3MDgsIDk0NTEsIAorICAgIDc1NzEsIDEzMDczLCAwLCAwLCA2ODEsIDk4MzI1MiwgNzAzLCAwLCAzMjcyLCA4NzgxLCAxMjg5NCwgNzAwNzcsIDExNzA5LCAKICAgICA5MjI4OCwgNzQ0NDYsIDAsIDkyNTMyLCAwLCAxMTMzOCwgMTIwNzY4LCAzMjc2LCAwLCAwLCA2NTkyOCwgMCwgMCwgNjUwMjEsIAogICAgIDY0Nzk1LCA3NDU3NCwgMCwgMTAwNDcsIDc4ODE0LCAzMjYyLCA3ODgxMSwgNDI3MTEsIDAsIDAsIDY4NDc4LCAxNjMsIDU3NiwgCiAgICAgOTg5NSwgMTY1NSwgNzg4MTcsIDc0NTkxLCA3ODgxNSwgNzg4MTYsIDk4MzEyMiwgMCwgMCwgMCwgMTAwMzksIDAsIAotICAgIDk4MzkzNiwgNTYyMywgNTcxNywgNTc3NiwgMCwgMCwgMCwgNDE1OTEsIDExMDM2LCA2NTI1MiwgOTIzODIsIDAsIDAsIDAsIAorICAgIDk4Mzk0NSwgNTYyMywgNTcxNywgNTc3NiwgMCwgMCwgMCwgNDE1OTEsIDExMDM2LCA2NTI1MiwgOTIzODIsIDAsIDAsIDAsIAogICAgIDY3ODQ4LCAwLCAwLCAwLCA4ODg3LCAxMjc1MjEsIDcyOTUsIDExMDMxLCAwLCA0MzE1NywgMCwgODk0NiwgMTAzNDgsIAotICAgIDEwNDEyLCA4NzU1LCAwLCAwLCA1NzE4LCAxMzIyMSwgMCwgMCwgNzgxMzUsIDAsIDk4MzcwMiwgODgxMCwgNzQ0OTksIDY4NiwgCisgICAgMTA0MTIsIDg3NTUsIDAsIDAsIDU3MTgsIDEzMjIxLCAwLCAwLCA3ODEzNSwgMCwgOTgzNzExLCA4ODEwLCA3NDQ5OSwgNjg2LCAKICAgICAwLCA3MTM2MiwgNDYxOSwgMTE4OTU0LCA2NjU0LCA3Mzc2OSwgNzQ0MjYsIDAsIDEyMDQwLCA2NTY4OSwgMTAxMjgsIAotICAgIDY1MTE4LCAwLCAxMTkxNTEsIDc0MjA1LCA5MjY1MSwgMCwgMjQwMSwgNjgxNDQsIDg3OTIsIDk4MzYzOSwgMCwgNjU0NTUsIAorICAgIDY1MTE4LCAwLCAxMTkxNTEsIDc0MjA1LCA5MjY1MSwgMCwgMjQwMSwgNjgxNDQsIDg3OTIsIDk4MzY0OCwgMCwgNjU0NTUsIAogICAgIDAsIDkyMjQ2LCAwLCAxMTkxMjksIDAsIDEyODg2LCAxMjc5MjAsIDY2NjI0LCAwLCA0MzU1NywgMTAzMDAsIDEwMTYxLCAKLSAgICAxMDM5NiwgNzQxMzUsIDk4MzQ0NSwgMTE4OTQ1LCA3ODExOCwgNzM4NTEsIDMwMTAsIDY0NDEsIDc4MTIyLCAxNDU4LCAKKyAgICAxMDM5NiwgNzQxMzUsIDk4MzQ1MywgMTE4OTQ1LCA3ODExOCwgNzM4NTEsIDMwMTAsIDY0NDEsIDc4MTIyLCAxNDU4LCAKICAgICA0MTQ3NSwgMTI4NjcyLCA5Mzk3NSwgMCwgMTE0NzksIDAsIDEyMDM1NiwgNjM1MCwgMTI4NjQsIDY5Njc0LCA3ODExNCwgCiAgICAgMTA2MSwgNjQ3ODAsIDIwMDEsIDQzMTExLCA1NTIzMCwgMTI4Njg2LCA0MDUyLCAwLCA3NjI2LCAwLCAwLCAxMDQ1LCAwLCAKICAgICA1NjMxLCA0MTExMywgMCwgMCwgNDM3MDcsIDc0MTI3LCAwLCAwLCA4NDg2LCAwLCA3Mzc1OCwgMjMzNSwgNDM2MiwgCkBAIC0xODMwNCw4ICsxODMyMyw4IEBACiAgICAgOTIyNDUsIDQ0MCwgMCwgMTMwODUsIDkyMzMsIDc0MjE2LCAwLCAwLCA5OTU3LCAxMjgyODUsIDY2NDQ3LCA4MDQ2LCAKICAgICA2NDk2MywgNjU3NzcsIDEwMTI1LCA3NDIxMiwgNDI4MTksIDEwOTEwLCAwLCAxNTIxLCA5ODk2LCA5Mzk2NSwgMTA0ODcsIAogICAgIDY5ODc4LCAxMjUyNywgMCwgNzk3MCwgMCwgMTI4NjYwLCAwLCA2NTc2OSwgNTI0MywgOTg0OSwgNTIzOSwgNjU3NzEsIAotICAgIDk4MzIyOSwgMCwgNTIzNywgNjk3MTQsIDAsIDEwMTAzLCA1MjQ3LCA0NzY5LCAwLCAxMTg5NzcsIDEyODczLCAyMjgzLCAKLSAgICA5ODMyMzEsIDAsIDMwMDgsIDQ4OTYsIDAsIDEyMDg3LCAwLCA1NTIzMSwgNDExMDMsIDAsIDY0NTY1LCA0NzczLCAwLCAKKyAgICA5ODMyMzUsIDAsIDUyMzcsIDY5NzE0LCAwLCAxMDEwMywgNTI0NywgNDc2OSwgMCwgMTE4OTc3LCAxMjg3MywgMjI4MywgCisgICAgOTgzMjM3LCAwLCAzMDA4LCA0ODk2LCAwLCAxMjA4NywgMCwgNTUyMzEsIDQxMTAzLCAwLCA2NDU2NSwgNDc3MywgMCwgCiAgICAgOTI3MTcsIDcwMDc0LCA0NzcwLCAwLCA5MTc1NjcsIDg3MzEsIDY1Mzc4LCAxMjczNjIsIDEyMDYxOSwgOTEyMiwgMTI4MDMzLCAKICAgICAxMjY2MDAsIDQ3NzQsIDMwMTksIDk5OTcsIDEyODM0LCAwLCA5NDU2LCAxMDIxNSwgMTIwNTQ3LCAwLCAwLCAwLCAwLCAKICAgICA3NDc3NiwgNDI4MSwgNDc2OCwgMCwgNDE1MzUsIDQwOTksIDkwMTcsIDAsIDAsIDc4MDk1LCAwLCA3ODA5NiwgMCwgMCwgMCwgCkBAIC0xODMxOSwxMCArMTgzMzgsMTAgQEAKICAgICA3NjM0LCA2NTE2NywgOTg0NSwgMCwgMCwgNTcwMSwgOTcyMiwgNDE0OTAsIDk4MzE1MywgMTQyNiwgNjgyMTcsIDAsIAogICAgIDY4NDQ3LCA0MjIwNCwgNTUyNzAsIDg1NzEsIDE5NDk5MSwgNzgwNjcsIDAsIDc4ODE4LCA5MjcxOSwgNDMxODIsIDEyMTg0LCAKICAgICAwLCA0MjAyMiwgMCwgMTAyODEsIDAsIDU2NTAsIDQzMTk0LCA2NDcxMiwgMTA3NDQsIDAsIDk5MCwgNTY0NywgMCwgNzM4NywgCi0gICAgNzg3MzQsIDQxMTE0LCAxMTQ3NywgNTY0NiwgMTI4NzksIDExMDE4LCA5ODM5MjEsIDM5NDUsIDkyNTg5LCAwLCAwLCAwLCAwLCAKKyAgICA3ODczNCwgNDExMTQsIDExNDc3LCA1NjQ2LCAxMjg3OSwgMTEwMTgsIDk4MzkzMCwgMzk0NSwgOTI1ODksIDAsIDAsIDAsIDAsIAogICAgIDc4MjEyLCAxMjc3NDYsIDEwMjAsIDczNzYzLCAwLCA3ODczMSwgNTY0OCwgNjQ3NDgsIDE5NDkxMCwgNzg3MzMsIDEwMjA1LCAKLSAgICAzNTQ1LCA5ODM1ODUsIDY5ODQsIDAsIDc0MDUxLCA5ODM2NDYsIDQzMjQyLCAxMjA0NTgsIDI2NjcsIDAsIDAsIDAsIDk5MTEsIAotICAgIDAsIDY1MDIwLCAxMDA5NywgMTE5MTY2LCAxMjcxNDUsIDk4MzY1MywgMTE4ODM2LCA5ODM3MzksIDc4NDI3LCAxMTQwLCAKKyAgICAzNTQ1LCA5ODM1ODUsIDY5ODQsIDAsIDc0MDUxLCA5ODM2NTUsIDQzMjQyLCAxMjA0NTgsIDI2NjcsIDAsIDAsIDAsIDk5MTEsIAorICAgIDAsIDY1MDIwLCAxMDA5NywgMTE5MTY2LCAxMjcxNDUsIDk4MzY2MiwgMTE4ODM2LCA5ODM3NDgsIDc4NDI3LCAxMTQwLCAKICAgICA3ODQyNiwgMCwgMTAxNTksIDAsIDAsIDgxMjgsIDAsIDAsIDkxNzk2NSwgMTgxNSwgMTk5MTAsIDg5MCwgMCwgMzI2NywgCiAgICAgOTIyOTEsIDAsIDEwMTIzLCAwLCA0NDEwLCAxMDQxLCAxMDU3NiwgNjM1NCwgOTI1ODEsIDU4MCwgNzQyMzIsIDAsIAogICAgIDEyODM0NywgMCwgMCwgMCwgMTk5MzgsIDY1OTA2LCAxMjc4MTksIDAsIDAsIDMyOTgsIDUzNzUsIDEwMTQyLCAwLCA4MjE1LCAKQEAgLTE4MzMzLDE2ICsxODM1MiwxNiBAQAogICAgIDQxNTIxLCAxMTg5MzQsIDQ5NCwgMTMyNTAsIDAsIDY1MDk4LCA2MzY0LCA5NTYsIDAsIDEyODMwLCAxMDQ2MiwgNzM3NDAsIAogICAgIDczNzM0LCAwLCAwLCAwLCA2NjQ0OSwgMTMyNjMsIDc0MjgxLCA2OTIxNywgMTMxNzEsIDEyNzc5NiwgMCwgMCwgOTIyOTQsIAogICAgIDAsIDEwNDQsIDQxMjc2LCAwLCAwLCAwLCA0MjA2OCwgMTE3OTUsIDAsIDAsIDAsIDAsIDQyNDUwLCAzOTA3LCAwLCA2NDUyNiwgCi0gICAgMTE4MjksIDY4MTk3LCAxMjI5NSwgMCwgMTE0NzUsIDAsIDMwMjAsIDExNTM3LCAwLCA2NjQ0MSwgOTgzNDQ2LCA3MDk4LCAwLCAKKyAgICAxMTgyOSwgNjgxOTcsIDEyMjk1LCAwLCAxMTQ3NSwgMCwgMzAyMCwgMTE1MzcsIDAsIDY2NDQxLCA5ODM0NTQsIDcwOTgsIDAsIAogICAgIDAsIDEwNTcsIDU2NiwgNDI2OTYsIDAsIDMwMTYsIDQyMjc0LCA0MzQ2NCwgNjY0OTAsIDEyOTIxLCA2NjU3MSwgNzg0NzIsIAogICAgIDkyNTEwLCAzMDA2LCA0NjIwLCAxMjcyMzcsIDk4MzU3OCwgMCwgMCwgNjQ2NTksIDAsIDEyNzc0OSwgNTUyNTMsIDYzNTcsIAogICAgIDYzNjIsIDg2MjYsIDcxMzM3LCAyMjE2LCA5MDkwLCA2NTM3NywgNDE1OTYsIDAsIDQyOTIwLCAxNjk4LCAwLCA2NDQ3NywgMCwgCiAgICAgNDM4MTMsIDEwNTMsIDAsIDc4MjY5LCAwLCAxMjY1ODYsIDEwNTIsIDEwNTEsIDQ1OSwgMTA2MCwgNzQzNDksIDY2NDc5LCAwLCAKICAgICAwLCAwLCAwLCA0MjQ5MCwgNjg5LCA2NTA4LCA0MTYzLCA0MjI5OCwgODYzOSwgNjY2NDEsIDQyNDYsIDAsIDAsIDEyMTMwLCAKLSAgICAwLCA0MjMzNywgNjQ1OTYsIDY0Mzc1LCA2NjQ4MSwgMTI3ODUwLCAwLCAwLCA2MzU5LCAwLCA0MzQ3MSwgOTgzNzU5LCAwLCAKKyAgICAwLCA0MjMzNywgNjQ1OTYsIDY0Mzc1LCA2NjQ4MSwgMTI3ODUwLCAwLCAwLCA2MzU5LCAwLCA0MzQ3MSwgOTgzNzY4LCAwLCAKICAgICAwLCAxMjcyNzQsIDAsIDYzNTgsIDYzNjEsIDE5MjYsIDYzNTYsIDkyNjI3LCA3ODk4LCA4MTEwLCAxMDkzNSwgMCwgMTAwNjksIAotICAgIDU4MzAsIDAsIDQzNjg1LCAwLCAwLCAwLCAwLCA4NjkzLCA3ODYxMSwgMTE5NTY1LCA5ODM3OTksIDEyMDQxMywgMCwgCi0gICAgMTI3MjU3LCA2NTg5NCwgMCwgMCwgMCwgOTgzOTE0LCAwLCAwLCAxMTkxODcsIDIxMzUsIDc4ODY4LCAwLCAwLCA3ODg2OSwgCisgICAgNTgzMCwgMCwgNDM2ODUsIDAsIDAsIDAsIDAsIDg2OTMsIDc4NjExLCAxMTk1NjUsIDk4MzgwOCwgMTIwNDEzLCAwLCAKKyAgICAxMjcyNTcsIDY1ODk0LCAwLCAwLCAwLCA5ODM5MjMsIDAsIDAsIDExOTE4NywgMjEzNSwgNzg4NjgsIDAsIDAsIDc4ODY5LCAKICAgICA0MjMxMywgNTU3OSwgOTI0MTIsIDAsIDk4MzA4MiwgOTQwMDIsIDAsIDU1NzgsIDQxNzc0LCAxMjgxMTUsIDQyMDIzLCAKICAgICA2MjM0LCA1NjY5LCA5MjI3NSwgMCwgMCwgMCwgMTI3NTA2LCA2ODIwMiwgNTU4MywgMCwgMCwgNDI0MjYsIDU1ODAsIAogICAgIDQyMjc2LCAyOTIzLCA4OTIsIDIyMjAsIDQyNDY1LCA0MTMzMCwgMTk0OTg3LCA1Nzk1LCA2NTUxMiwgMTE5MDA2LCA2NTcwMiwgCkBAIC0xODM1Miw3ICsxODM3MSw3IEBACiAgICAgNjQ5MDAsIDcxNTMsIDYwOTUsIDQxODY1LCAwLCAzMDE1LCAxMjgwMjMsIDEyNjQ2NSwgNTIxMSwgOTgzMDgzLCA2NDAwLCAwLCAKICAgICAxOTQ5ODMsIDcwMDU0LCA4MTg5LCAxMTI3NiwgMCwgMCwgMzcyLCAxMjg4MjksIDAsIDExODg3NCwgNDIxMDIsIDQxNTg1LCAKICAgICAxMjgyMDIsIDAsIDQyMTAxLCAyNzYsIDc4NDAyLCAwLCAzMywgNzQyMjYsIDEyNzMwMywgOTAwNywgMTE4Nzk2LCA0MTU4OCwgCi0gICAgNjYwMzMsIDQyNywgMTA3NjMsIDExODgxOSwgMCwgMTI3ODg0LCAwLCAxMDMxLCA2MjU3LCAwLCA0MjEwNCwgMCwgOTgzOTcxLCAKKyAgICA2NjAzMywgNDI3LCAxMDc2MywgMTE4ODE5LCAwLCAxMjc4ODQsIDAsIDEwMzEsIDYyNTcsIDAsIDQyMTA0LCAwLCA5ODM5ODAsIAogICAgIDIzMjgsIDkyNDA5LCAxMDcxLCA0Mjg5OSwgMCwgNzQ4NDgsIDAsIDk4MzU4MCwgMCwgMTA0NywgMCwgMCwgNjQ3OTAsIDAsIAogICAgIDY5NzIzLCAxMDY1MSwgMCwgMCwgMCwgMCwgOTIyMDYsIDExOTE4MSwgNTcxMSwgNDE2MzMsIDEyMDk4LCA2NTU3MSwgOTE2NiwgCiAgICAgMCwgNTcxMCwgMCwgNjc5MCwgNjUxNjgsIDEzMjE2LCAwLCA2OTcxNiwgNjk3MjYsIDAsIDY0NjExLCA0MTYyMywgMTk1MDAxLCAKQEAgLTE4MzYxLDEyMCArMTgzODAsMTIwIEBACiAgICAgOTE5NiwgNjk2NzAsIDAsIDAsIDAsIDAsIDExODkxMSwgMCwgMCwgMCwgMCwgMCwgMTIwMDEwLCAwLCA4NzAxLCA2ODEzMCwgCiAgICAgMTE5NjE2LCAxMjA1MjIsIDAsIDQyNDc3LCAxOTQ5OTQsIDEyMTIzLCA0NDk1LCA0MzU2OSwgMCwgMCwgMCwgNjQ5NDYsIAogICAgIDEwOTkyLCAwLCAxMjAwMDksIDAsIDAsIDkzMTgsIDkzOTg2LCAxMzI0OSwgNjU2NzksIDczODA4LCAwLCA2NTQ1NywgCi0gICAgNDIyNDksIDc2MzksIDQzOTk1LCA2Nzg0NSwgNDI2NDEsIDU0NTQsIDAsIDAsIDE5NDk5NywgMTIwMDA1LCAwLCA5ODM5NTcsIAorICAgIDQyMjQ5LCA3NjM5LCA0Mzk5NSwgNjc4NDUsIDQyNjQxLCA1NDU0LCAwLCAwLCAxOTQ5OTcsIDEyMDAwNSwgMCwgOTgzOTY2LCAKICAgICA1MDg0LCAwLCAwLCAxMTg4NjEsIDAsIDczMywgOTE3ODc2LCA3ODAxNCwgNzg0MzYsIDc4NDM1LCA0MTY3NywgMCwgOTIxOCwgCi0gICAgMTczMSwgMCwgOTgzNzM3LCAwLCA2Nzk5MCwgMCwgMCwgMCwgMTIwMDAxLCAxMjcwMTgsIDkyNDkyLCA1MTU1LCAxMjAwMDAsIAotICAgIDUzNTgsIDk4MzczNSwgMCwgOTE3NzY3LCA2NDQyNCwgOTgzMjI1LCAzODQwLCA2NDMxNCwgNDE0MzIsIDAsIDc4MzE1LCAKKyAgICAxNzMxLCAwLCA5ODM3NDYsIDAsIDY3OTkwLCAwLCAwLCAwLCAxMjAwMDEsIDEyNzAxOCwgOTI0OTIsIDUxNTUsIDEyMDAwMCwgCisgICAgNTM1OCwgOTgzNzQ0LCAwLCA5MTc3NjcsIDY0NDI0LCA5ODMyMzEsIDM4NDAsIDY0MzE0LCA0MTQzMiwgMCwgNzgzMTUsIAogICAgIDY4NDMwLCA2Nzk4MCwgNDMyNTMsIDY1OTQzLCAwLCAzMzcxLCAxMDk4OCwgMCwgODc3MSwgMTQ3OSwgMCwgMCwgMTEwOSwgCi0gICAgMTE1ODAsIDAsIDY0NjAxLCAxMjIwNSwgMCwgMCwgNjQ1MDcsIDg4NjgsIDM5OSwgNjc5NzgsIDc0ODQyLCA5ODMyNzYsIAotICAgIDk4MzcxMiwgMTIxNDksIDEzMDg4LCA1NTEsIDAsIDEwMTU2LCAxMjExOSwgOTI1NzIsIDAsIDI1NDQsIDY1MDc0LCAKKyAgICAxMTU4MCwgMCwgNjQ2MDEsIDEyMjA1LCAwLCAwLCA2NDUwNywgODg2OCwgMzk5LCA2Nzk3OCwgNzQ4NDIsIDk4MzI4NCwgCisgICAgOTgzNzIxLCAxMjE0OSwgMTMwODgsIDU1MSwgMCwgMTAxNTYsIDEyMTE5LCA5MjU3MiwgMCwgMjU0NCwgNjUwNzQsIAogICAgIDExOTIxMSwgMCwgMCwgNzgwMTEsIDM1MSwgMTE5MTQ5LCAwLCAwLCA1NTIyOSwgMCwgNzQyNjgsIDAsIDAsIDAsIDQyMzc3LCAKLSAgICAwLCAwLCAwLCA5ODM5MTUsIDAsIDkwMTMsIDQwNTQsIDAsIDk4MzU3MCwgMCwgMCwgNzM5NjAsIDU1ODUsIDY1ODgxLCAKKyAgICAwLCAwLCAwLCA5ODM5MjQsIDAsIDkwMTMsIDQwNTQsIDAsIDk4MzU3MCwgOTgzNjI4LCAwLCA3Mzk2MCwgNTU4NSwgNjU4ODEsIAogICAgIDI1NDksIDc0NDY5LCAwLCAwLCA1NTg0LCA4MzU4LCAwLCA2NDIxNSwgOTIyMTksIDEwOTE5LCAwLCA3OTgwLCAxMjY2MDEsIAotICAgIDk4Mzc3NSwgMjIxOCwgNDE4MDAsIDU1ODksIDAsIDI2NjQsIDQxNjEzLCA1NTg2LCAxMTg4OTAsIDAsIDExMzU2LCAwLCAwLCAKKyAgICA5ODM3ODQsIDIyMTgsIDQxODAwLCA1NTg5LCAwLCAyNjY0LCA0MTYxMywgNTU4NiwgMTE4ODkwLCAwLCAxMTM1NiwgMCwgMCwgCiAgICAgNDM0NTIsIDc4NjA5LCAwLCA0MjU3MywgNjc4NTYsIDAsIDc4MTI5LCAwLCAwLCA3NDM5MiwgODEzNSwgNjQ1MCwgMTAwNTUsIAogICAgIDc3OTk2LCAwLCAwLCAxMTkyMjUsIDU2NTcsIDAsIDk2MjYsIDAsIDc3OTk0LCAxMDE3OSwgNTY1NCwgMTI5MzksIDkyNTczLCAKICAgICAxMjA3OTksIDAsIDAsIDU2NTIsIDEwOTQ1LCAwLCA2NjQ4NiwgMCwgMzY2MSwgNzg2MywgMCwgMCwgMCwgNzQ1MDksIAotICAgIDk4Mzg0MywgNTY1OSwgMCwgNzg2OTIsIDY2NzI5LCA1NjU1LCAwLCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAxMjc3OTIsIAotICAgIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIDczOTU1LCA3Mzk1NiwgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIDEwMzA0LCAKLSAgICAxMDM2OCwgNDI1MTgsIDU5NCwgMTAyNDQsIDEwMjQ4LCA3NDA3LCA5ODM4NzgsIDY0ODcwLCAwLCAzNDY3LCA5ODM4ODIsIDAsIAotICAgIDMzMzEsIDk0NiwgMTAyMzEsIDE0OTUsIDgxMzEsIDc0MzMwLCAwLCA5NTYyLCA2OTIyMiwgNjU5MjcsIDAsIDcwMDM2LCAKLSAgICA2OTY5NiwgNjk3NjksIDY0NjU2LCA5ODM3MTcsIDAsIDk0MDIwLCA3MDA1NiwgNTY2NiwgNjUyMjcsIDUzMTgsIDYzOTk0LCAKLSAgICAwLCA5MDkxLCAxMDc5OCwgMCwgMTI4MTY2LCAxMDE4NiwgMCwgNzczMiwgOTgzNzE1LCA2NDU1NiwgMCwgMCwgNTY2OCwgCi0gICAgNzQ0NDUsIDAsIDEyODY2MywgNTY3MCwgMTI2NjEwLCAxMjcyOTcsIDExODIwLCAyOTkyLCA3ODI2LCA1NjY3LCAxOTk1MiwgCi0gICAgMTIwODA3LCAwLCAxMjc0OSwgNzQ1NTEsIDAsIDAsIDY2NDk2LCA0MzYxLCAxMTkyNjAsIDEzMDYsIDkyODYsIDE0OTcsIAotICAgIDEyODI4NiwgOTQwMDQsIDAsIDAsIDM1NzEsIDEzMjQ3LCAwLCA3OTczLCA2NjM1MywgNjg0MzUsIDc4Mjc4LCA2Nzg5NiwgCi0gICAgNDMxOTIsIDAsIDc4MjY1LCA1NTMsIDEyMDY1MywgMCwgMTI4NTU0LCA1ODI5LCAwLCA0NTg3LCA3ODI4NSwgNjU5MTIsIDAsIAotICAgIDEyNzQ2LCAwLCAwLCAxMTk5MjQsIDU2MzMsIDExOTkyNywgOTQxMDEsIDk0MTAyLCA5NDA5OSwgNjQ5MDUsIDk0MTA1LCAKLSAgICA5NTEyLCA5NDEwMywgMTI3NDIsIDY0NDMsIDk4Mzc5NywgMCwgOTEzNSwgMCwgNDE1NjQsIDAsIDU1MjE5LCAxMjg4MzIsIAotICAgIDk4Mzg0MiwgMCwgMTIxNDgsIDAsIDc4Mjk3LCAwLCA2NDI1NiwgMCwgMTE2NjksIDAsIDU2MzQsIDQ1MjQsIDAsIDEyNzI3MCwgCi0gICAgMCwgMTE4ODgwLCAyNDI1LCA2NTE4MiwgMTI4NzY5LCA0MzYzNiwgNTIyMSwgNzg0MTAsIDMyOCwgMCwgOTgzODAwLCAKLSAgICA2OTgxNSwgNTYzNiwgMCwgNTMyOSwgMCwgNTYzOCwgMTE5OTE4LCA3OTQwLCA2NDkzOCwgNDMyMjMsIDQzNzYwLCA1NjM1LCAKLSAgICAzMzczLCAyOTg2LCA3ODI5MiwgNzQyMjMsIDM0MzcsIDc4MjkxLCA2MjAzLCA0MjQ3LCAwLCAxMTkyMCwgODI3NCwgMCwgMCwgCi0gICAgMTY1NywgNDE1NjEsIDc4Mjk5LCA3ODI5NSwgNTYzOSwgMjk1NCwgNTY2MCwgNTY0MCwgNzgzMDMsIDk4MzY3NiwgNzgzMDAsIAotICAgIDQyMjI3LCAwLCAwLCA0MTYzNywgNjc4NzIsIDAsIDc4MzEwLCA0MTYyNSwgNDMzNjIsIDc4MzA5LCAxMjA3MTMsIDExNzA1LCAKLSAgICA1NjQyLCAwLCA1NDg2LCAwLCA0MzU2LCAxMTcxMCwgMCwgMTIwNTEsIDY5OTM4LCAwLCA1NjQxLCA4MjU5LCAwLCAxMDU4LCAKLSAgICAwLCA2NzYzMCwgMCwgMCwgMTE0NCwgNzg3NTAsIDAsIDQyMjI4LCAwLCA3Mzg5MCwgMTE4OTcyLCAwLCAyODAwLCAwLCAKLSAgICA1NjQ1LCA2NDk2NCwgODY1MiwgMjU0NywgNjY0ODQsIDQzNjM0LCAwLCA1NjA4LCA2NTg5MCwgNDM4MDgsIDAsIDY3NjIxLCAKLSAgICAxMTk5MzQsIDkwMDAsIDAsIDAsIDkyNjczLCAxODY1LCAwLCA1NjEzLCA2OTk1MCwgMCwgMCwgNTYxMCwgMCwgMCwgNjU4MjYsIAotICAgIDIwNjksIDAsIDEwNzg3LCA0Mzk5OSwgMjk5NywgMCwgNTYwOSwgNzgzMTYsIDY1MzE5LCA3ODMxMywgMTIzMTYsIDY1Mzc2LCAKLSAgICAyNDEyLCAwLCA4MTg2LCA5ODA3LCA3NDI2OSwgOTI1NDcsIDEzMTMwLCA2NTg3NCwgMCwgNTgwNywgMCwgMTAwMzAsIDUzMDYsIAotICAgIDEyMzY0LCAxMjgwNjQsIDAsIDExNzA0LCAwLCA5MjU4MywgMTAyMTEsIDAsIDAsIDAsIDAsIDExNzA2LCA5NzEwLCAwLCAwLCAKLSAgICAwLCA0MTMsIDY1NjIzLCA3MTE4LCAwLCA5MTMzLCA3NDI2MiwgMCwgMTA0MiwgMCwgNjQ3NzksIDEyMTcxLCAxMTkyNDAsIAotICAgIDYxODUsIDY0Nzc2LCA0OTg0LCAwLCA3MDgsIDExMzkxLCAwLCAxMjI0MSwgOTI3MjAsIDk4Mzg5MCwgMTMwOCwgMCwgMjUzNCwgCi0gICAgODEwLCAwLCAwLCAwLCAwLCAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIDIzNjQsIDkyNDQzLCA3NDQ3MCwgNjY2MTgsIAotICAgIDY1NjgwLCAxMjA3NzksIDEwMDI3LCAwLCAxMjgxNTQsIDEyMzM3LCAxMjA3MjIsIDEyNzM2OCwgOTgzMTY3LCAyOTgwLCAKLSAgICA3NTUsIDY5Nzc0LCA5MzEsIDEzMTI0LCA2ODE4MiwgNjM2MywgMjc0OCwgMCwgMCwgNjUwNDEsIDkyMjc2LCA0NDAxMSwgCi0gICAgODczMCwgOTgzMDY3LCAxMjc4NTQsIDc4MzEyLCA3Mjc0LCAxMTkyNTAsIDAsIDcyNzUsIDc4MzA0LCA5MzUsIDAsIDY1ODQwLCAKLSAgICAzNzcsIDQyMzI1LCAxMTY0OSwgMTI3MzYzLCA2NTI1MywgNjQzMDEsIDEyODgzNSwgNzgzMDgsIDQyMzQxLCA2NTI4NCwgCi0gICAgMjQxNywgMCwgMTI4ODQsIDE5OTEyLCA3OTA3LCAxMDc2OCwgMCwgMTk0OTk4LCAwLCAxMDY3MywgMTE5MjE3LCA3MjQ4LCAwLCAKLSAgICAxMjgzNDYsIDE3ODEsIDU0OTYsIDM2MjcsIDYyLCAxNjQ5LCAwLCA5NjQsIDAsIDEyNzg3NiwgNzgyMjYsIDEyODc3NSwgCi0gICAgMTI3NTEyLCAwLCAwLCAwLCAwLCA0MzY4OSwgMTI3OTExLCAxMzE0MiwgNzg4MTIsIDQyNDE1LCA2NjU3NSwgNDU0MiwgCi0gICAgNjk5MDksIDQzNTQ3LCAwLCAwLCA3Njc3LCAyOTkxLCA0OTQ2LCA0MjQ1NCwgMTE1NjUsIDc5NDksIDAsIDk4MzkwOSwgCi0gICAgMTEzNDEsIDQyNDk0LCAzMDczLCA2NTYyNSwgOTcxNCwgMTE2OTIsIDQ2NTcsIDAsIDkyNzI0LCA2NDc4LCA5ODk4LCAKLSAgICA0MzY3MywgNjUyMzcsIDYyNDEsIDcxMDYsIDQ4NzcsIDk4Mzc4NiwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgNDQwOSwgMCwgCi0gICAgMCwgNjQ3OTgsIDAsIDUzNDYsIDAsIDk0MDQ3LCA2MjM3LCA0ODc0LCAwLCA5MTc2LCAwLCAxMjY1NTMsIDY1MjMxLCAKLSAgICA2NTg4NCwgMTI2NzgsIDc4NzQ4LCAxMTg5MTIsIDExMzc4LCA0NDAxOCwgNDI3ODUsIDI0MDgsIDMyNTEsIDAsIDAsIDU2ODUsIAotICAgIDAsIDI0NjEsIDExMDUyLCA3MDkxLCA1MzQyLCA4MzE3LCAwLCA2ODE2MywgNTM0MCwgMCwgMTI3ODIwLCA0MzYzNSwgCi0gICAgNzM5MjgsIDEyNzUyOSwgMCwgMCwgMCwgMTI4NTEwLCA2NTQ4MiwgMCwgOTE0MiwgMCwgMTI2NDcwLCAwLCAxMDkzOCwgMCwgCi0gICAgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAwLCAxMjgxNzYsIDUyOSwgODU4MCwgMCwgMCwgMTA1ODYsIDEwNzkwLCAKLSAgICAxMDgzOSwgNjYwMjMsIDQxNTkzLCA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDAsIDk4MzkyOSwgMTEzNzYsIAotICAgIDc0Mzc5LCAxMDcyMSwgNjc2NjQsIDM0MzgsIDQyMDk3LCAxMjcyNjcsIDExMDg0LCAzMTk0LCA0MTg3MCwgMjY2LCA3ODMwNSwgCi0gICAgMTIwMTgzLCA0MTg3MywgMTIwNTc1LCAxMTMyNCwgMTIwNTMxLCAwLCA4NDIwLCA2NDkxOCwgMTI4ODQ0LCA0MTg3MSwgCi0gICAgNDEzMzgsIDM3MzQsIDc3MzQsIDQzNjgzLCA4NzUwLCA2NjYwNSwgNjYwMTEsIDkyNTE0LCA0MDk2NSwgMTI3OTM3LCAwLCAKLSAgICA1MTYxLCAxMDU3MiwgMCwgMCwgMCwgNjQzNDksIDcyODcsIDQyMTYyLCAxMjc1NTIsIDAsIDEyNjYwNSwgMTE5NDgsIAotICAgIDY5MjIwLCAxMjM1OSwgNDM0MjksIDQxMzY5LCAxNjk3LCAxMjE5MSwgMCwgNjg2MzMsIDcyODYsIDAsIDY4NjM1LCAxMDAzMSwgCi0gICAgMCwgOTg3MCwgNjg2NDUsIDg2MjAsIDY1ODI0LCAwLCAxMTkzOCwgMCwgNzI4NSwgMCwgMTE5NTc3LCA0MjY3OCwgMCwgCi0gICAgNDM2NzcsIDQxNTgzLCAwLCA2NTc5OSwgOTI2MjMsIDAsIDAsIDk4MzkyNywgNzgxNjksIDY2MTk5LCAwLCAzNjA5LCAKKyAgICA5ODM4NTIsIDU2NTksIDAsIDc4NjkyLCA2NjcyOSwgNTY1NSwgOTgzNjI2LCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAKKyAgICAxMjc3OTIsIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIDczOTU1LCA3Mzk1NiwgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIAorICAgIDEwMzA0LCAxMDM2OCwgNDI1MTgsIDU5NCwgMTAyNDQsIDEwMjQ4LCA3NDA3LCA5ODM4ODcsIDY0ODcwLCAwLCAzNDY3LCAKKyAgICA5ODM4OTEsIDAsIDMzMzEsIDk0NiwgMTAyMzEsIDE0OTUsIDgxMzEsIDc0MzMwLCAwLCA5NTYyLCA2OTIyMiwgNjU5MjcsIDAsIAorICAgIDcwMDM2LCA2OTY5NiwgNjk3NjksIDY0NjU2LCA5ODM3MjYsIDAsIDk0MDIwLCA3MDA1NiwgNTY2NiwgNjUyMjcsIDUzMTgsIAorICAgIDYzOTk0LCAwLCA5MDkxLCAxMDc5OCwgMCwgMTI4MTY2LCAxMDE4NiwgMCwgNzczMiwgOTgzNzI0LCA2NDU1NiwgMCwgMCwgCisgICAgNTY2OCwgNzQ0NDUsIDAsIDEyODY2MywgNTY3MCwgMTI2NjEwLCAxMjcyOTcsIDExODIwLCAyOTkyLCA3ODI2LCA1NjY3LCAKKyAgICAxOTk1MiwgMTIwODA3LCAwLCAxMjc0OSwgNzQ1NTEsIDAsIDAsIDY2NDk2LCA0MzYxLCAxMTkyNjAsIDEzMDYsIDkyODYsIAorICAgIDE0OTcsIDEyODI4NiwgOTQwMDQsIDAsIDAsIDM1NzEsIDEzMjQ3LCAwLCA3OTczLCA2NjM1MywgNjg0MzUsIDc4Mjc4LCAKKyAgICA2Nzg5NiwgNDMxOTIsIDAsIDc4MjY1LCA1NTMsIDEyMDY1MywgMCwgMTI4NTU0LCA1ODI5LCAwLCA0NTg3LCA3ODI4NSwgCisgICAgNjU5MTIsIDAsIDEyNzQ2LCAwLCAwLCAxMTk5MjQsIDU2MzMsIDExOTkyNywgOTQxMDEsIDk0MTAyLCA5NDA5OSwgNjQ5MDUsIAorICAgIDk0MTA1LCA5NTEyLCA5NDEwMywgMTI3NDIsIDY0NDMsIDk4MzgwNiwgMCwgOTEzNSwgMCwgNDE1NjQsIDAsIDU1MjE5LCAKKyAgICAxMjg4MzIsIDk4Mzg1MSwgMCwgMTIxNDgsIDAsIDc4Mjk3LCAwLCA2NDI1NiwgMCwgMTE2NjksIDAsIDU2MzQsIDQ1MjQsIDAsIAorICAgIDEyNzI3MCwgMCwgMTE4ODgwLCAyNDI1LCA2NTE4MiwgMTI4NzY5LCA0MzYzNiwgNTIyMSwgNzg0MTAsIDMyOCwgMCwgCisgICAgOTgzODA5LCA2OTgxNSwgNTYzNiwgMCwgNTMyOSwgMCwgNTYzOCwgMTE5OTE4LCA3OTQwLCA2NDkzOCwgNDMyMjMsIDQzNzYwLCAKKyAgICA1NjM1LCAzMzczLCAyOTg2LCA3ODI5MiwgNzQyMjMsIDM0MzcsIDc4MjkxLCA2MjAzLCA0MjQ3LCAwLCAxMTkyMCwgODI3NCwgCisgICAgMCwgMCwgMTY1NywgNDE1NjEsIDc4Mjk5LCA3ODI5NSwgNTYzOSwgMjk1NCwgNTY2MCwgNTY0MCwgNzgzMDMsIDk4MzY4NSwgCisgICAgNzgzMDAsIDQyMjI3LCAwLCAwLCA0MTYzNywgNjc4NzIsIDAsIDc4MzEwLCA0MTYyNSwgNDMzNjIsIDc4MzA5LCAxMjA3MTMsIAorICAgIDExNzA1LCA1NjQyLCAwLCA1NDg2LCAwLCA0MzU2LCAxMTcxMCwgMCwgMTIwNTEsIDY5OTM4LCAwLCA1NjQxLCA4MjU5LCAwLCAKKyAgICAxMDU4LCAwLCA2NzYzMCwgMCwgMCwgMTE0NCwgNzg3NTAsIDAsIDQyMjI4LCAwLCA3Mzg5MCwgMTE4OTcyLCAwLCAyODAwLCAKKyAgICAwLCA1NjQ1LCA2NDk2NCwgODY1MiwgMjU0NywgNjY0ODQsIDQzNjM0LCAwLCA1NjA4LCA2NTg5MCwgNDM4MDgsIDAsIAorICAgIDY3NjIxLCAxMTk5MzQsIDkwMDAsIDAsIDAsIDkyNjczLCAxODY1LCAwLCA1NjEzLCA2OTk1MCwgMCwgMCwgNTYxMCwgMCwgMCwgCisgICAgNjU4MjYsIDIwNjksIDAsIDEwNzg3LCA0Mzk5OSwgMjk5NywgMCwgNTYwOSwgNzgzMTYsIDY1MzE5LCA3ODMxMywgMTIzMTYsIAorICAgIDY1Mzc2LCAyNDEyLCAwLCA4MTg2LCA5ODA3LCA3NDI2OSwgOTI1NDcsIDEzMTMwLCA2NTg3NCwgMCwgNTgwNywgMCwgCisgICAgMTAwMzAsIDUzMDYsIDEyMzY0LCAxMjgwNjQsIDAsIDExNzA0LCAwLCA5MjU4MywgMTAyMTEsIDAsIDAsIDAsIDAsIDExNzA2LCAKKyAgICA5NzEwLCAwLCAwLCAwLCA0MTMsIDY1NjIzLCA3MTE4LCAwLCA5MTMzLCA3NDI2MiwgMCwgMTA0MiwgMCwgNjQ3NzksIAorICAgIDEyMTcxLCAxMTkyNDAsIDYxODUsIDY0Nzc2LCA0OTg0LCAwLCA3MDgsIDExMzkxLCAwLCAxMjI0MSwgOTI3MjAsIDk4Mzg5OSwgCisgICAgMTMwOCwgMCwgMjUzNCwgODEwLCAwLCAwLCAwLCAwLCAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIDIzNjQsIDkyNDQzLCAKKyAgICA3NDQ3MCwgNjY2MTgsIDY1NjgwLCAxMjA3NzksIDEwMDI3LCAwLCAxMjgxNTQsIDEyMzM3LCAxMjA3MjIsIDEyNzM2OCwgCisgICAgOTgzMTY3LCAyOTgwLCA3NTUsIDY5Nzc0LCA5MzEsIDEzMTI0LCA2ODE4MiwgNjM2MywgMjc0OCwgMCwgMCwgNjUwNDEsIAorICAgIDkyMjc2LCA0NDAxMSwgODczMCwgOTgzMDY3LCAxMjc4NTQsIDc4MzEyLCA3Mjc0LCAxMTkyNTAsIDAsIDcyNzUsIDc4MzA0LCAKKyAgICA5MzUsIDAsIDY1ODQwLCAzNzcsIDQyMzI1LCAxMTY0OSwgMTI3MzYzLCA2NTI1MywgNjQzMDEsIDEyODgzNSwgNzgzMDgsIAorICAgIDQyMzQxLCA2NTI4NCwgMjQxNywgMCwgMTI4ODQsIDE5OTEyLCA3OTA3LCAxMDc2OCwgMCwgMTk0OTk4LCAwLCAxMDY3MywgCisgICAgMTE5MjE3LCA3MjQ4LCAwLCAxMjgzNDYsIDE3ODEsIDU0OTYsIDM2MjcsIDYyLCAxNjQ5LCAwLCA5NjQsIDAsIDEyNzg3NiwgCisgICAgNzgyMjYsIDEyODc3NSwgMTI3NTEyLCAwLCAwLCAwLCAwLCA0MzY4OSwgMTI3OTExLCAxMzE0MiwgNzg4MTIsIDQyNDE1LCAKKyAgICA2NjU3NSwgNDU0MiwgNjk5MDksIDQzNTQ3LCAwLCAwLCA3Njc3LCAyOTkxLCA0OTQ2LCA0MjQ1NCwgMTE1NjUsIDc5NDksIDAsIAorICAgIDk4MzkxOCwgMTEzNDEsIDQyNDk0LCAzMDczLCA2NTYyNSwgOTcxNCwgMTE2OTIsIDQ2NTcsIDAsIDkyNzI0LCA2NDc4LCAKKyAgICA5ODk4LCA0MzY3MywgNjUyMzcsIDYyNDEsIDcxMDYsIDQ4NzcsIDk4Mzc5NSwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgCisgICAgNDQwOSwgMCwgMCwgNjQ3OTgsIDAsIDUzNDYsIDAsIDk0MDQ3LCA2MjM3LCA0ODc0LCAwLCA5MTc2LCAwLCAxMjY1NTMsIAorICAgIDY1MjMxLCA2NTg4NCwgMTI2NzgsIDc4NzQ4LCAxMTg5MTIsIDExMzc4LCA0NDAxOCwgNDI3ODUsIDI0MDgsIDMyNTEsIDAsIAorICAgIDAsIDU2ODUsIDAsIDI0NjEsIDExMDUyLCA3MDkxLCA1MzQyLCA4MzE3LCAwLCA2ODE2MywgNTM0MCwgMCwgMTI3ODIwLCAKKyAgICA0MzYzNSwgNzM5MjgsIDEyNzUyOSwgMCwgMCwgMCwgMTI4NTEwLCA2NTQ4MiwgMCwgOTE0MiwgMCwgMTI2NDcwLCAwLCAKKyAgICAxMDkzOCwgMCwgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAwLCAxMjgxNzYsIDUyOSwgODU4MCwgMCwgMCwgMTA1ODYsIAorICAgIDEwNzkwLCAxMDgzOSwgNjYwMjMsIDQxNTkzLCA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDAsIDk4MzkzOCwgCisgICAgMTEzNzYsIDc0Mzc5LCAxMDcyMSwgNjc2NjQsIDM0MzgsIDQyMDk3LCAxMjcyNjcsIDExMDg0LCAzMTk0LCA0MTg3MCwgMjY2LCAKKyAgICA3ODMwNSwgMTIwMTgzLCA0MTg3MywgMTIwNTc1LCAxMTMyNCwgMTIwNTMxLCAwLCA4NDIwLCA2NDkxOCwgMTI4ODQ0LCAKKyAgICA0MTg3MSwgNDEzMzgsIDM3MzQsIDc3MzQsIDQzNjgzLCA4NzUwLCA2NjYwNSwgNjYwMTEsIDkyNTE0LCA0MDk2NSwgCisgICAgMTI3OTM3LCAwLCA1MTYxLCAxMDU3MiwgMCwgMCwgMCwgNjQzNDksIDcyODcsIDQyMTYyLCAxMjc1NTIsIDAsIDEyNjYwNSwgCisgICAgMTE5NDgsIDY5MjIwLCAxMjM1OSwgNDM0MjksIDQxMzY5LCAxNjk3LCAxMjE5MSwgMCwgNjg2MzMsIDcyODYsIDAsIDY4NjM1LCAKKyAgICAxMDAzMSwgMCwgOTg3MCwgNjg2NDUsIDg2MjAsIDY1ODI0LCAwLCAxMTkzOCwgMCwgNzI4NSwgMCwgMTE5NTc3LCA0MjY3OCwgCisgICAgMCwgNDM2NzcsIDQxNTgzLCAwLCA2NTc5OSwgOTI2MjMsIDAsIDAsIDk4MzkzNiwgNzgxNjksIDY2MTk5LCAwLCAzNjA5LCAKICAgICA2ODYyNCwgMCwgODMyLCAxMjA2OTMsIDEyMDc3MCwgNzg0NzMsIDY2MDA3LCA3ODQ3MSwgNjU3MDMsIDAsIDAsIDQyNzMyLCAKICAgICA1MTgwLCA5MjY5OSwgNDEzOTUsIDQxNTMwLCAxMTY5MSwgNjQ3NzMsIDkyMjE0LCA3NDAwMiwgMCwgMCwgMTI4NjQ1LCAKLSAgICA2MzQ4LCAyNDMsIDEzMjAwLCA5ODM4MDQsIDYwMjQsIDkyMzA5LCA5OTc5LCAxMDAzNywgNDE1MjksIDEwNjQ4LCA4NTM4LCAKKyAgICA2MzQ4LCAyNDMsIDEzMjAwLCA5ODM4MTMsIDYwMjQsIDkyMzA5LCA5OTc5LCAxMDAzNywgNDE1MjksIDEwNjQ4LCA4NTM4LCAKICAgICA0MzY4NywgMCwgMCwgNDI4NSwgNjYxOTUsIDAsIDQyMzAsIDAsIDczNjcsIDQzMjU2LCA5MjM1MywgNzU2MywgNDIzNzYsIDAsIAogICAgIDY4NDQyLCAxMjA1MTIsIDAsIDAsIDIxNCwgMCwgMCwgNzg0NjYsIDY1ODkzLCAxMjIwOCwgOTk3MywgMCwgNjYzMTEsIAogICAgIDY1NTg5LCAxMjgyNzcsIDI2MDMsIDAsIDAsIDAsIDcwMDQ3LCAwLCA2MDIyLCAwLCAyODg0LCAwLCAxMTYyMCwgMCwgNDMsIAogICAgIDAsIDY2NDUzLCAxMDE2LCA0MTEwNywgMCwgNDExMjEsIDM4ODUsIDkyLCA2NTQ1NiwgNjQ2MDgsIDAsIDc0ODAxLCAwLCAKLSAgICAyMDc0LCAwLCA3ODI4MywgMCwgMTI0NTMsIDEyODEyOCwgOTgzODE3LCA3NDI0MSwgMTI2NTY4LCA2NzkxLCAxMjQ1NywgCisgICAgMjA3NCwgMCwgNzgyODMsIDAsIDEyNDUzLCAxMjgxMjgsIDk4MzgyNiwgNzQyNDEsIDEyNjU2OCwgNjc5MSwgMTI0NTcsIAogICAgIDc4MjY4LCAwLCAwLCAwLCA3ODI3OSwgMCwgMCwgOTIzNTgsIDY2NjM3LCA3OTk1LCA4NzU5LCA0MzQyMSwgNzgyNzcsIAogICAgIDEyNDQ5LCAxMjg1NTIsIDAsIDAsIDg3NTIsIDMxOTcsIDQ3MjAsIDEwMTY1LCAwLCAxMTkyNDksIDAsIDExNTk1LCA2NDg5MywgCiAgICAgMCwgNDM0MzUsIDAsIDAsIDQ5OTMsIDAsIDYxNjgsIDEwOTM0LCAxOTQ2LCA3NDEsIDAsIDU0OTQsIDQ2MzksIDk4MzE0NywgCiAgICAgMTk5MCwgNjY1ODksIDQ0OTgsIDc4NjY0LCAxMTkxODMsIDAsIDAsIDY5NzM0LCAyOTYwLCA3Mzc3OSwgMCwgODk2OSwgCiAgICAgMTI4MTE3LCA0MzQyNCwgMTI3MDU5LCAwLCAyOTUwLCAxMTk1NzksIDYyMTAsIDY1NzUzLCAzNzAsIDAsIDAsIDAsIDQ5NTMsIAotICAgIDk4MzY3MywgMCwgMCwgMCwgNjkyMzAsIDAsIDAsIDY1Njg4LCA5ODMyNDAsIDUwNjMsIDM1MTcsIDI5NjQsIDQzNjYzLCAKKyAgICA5ODM2ODIsIDAsIDAsIDAsIDY5MjMwLCAwLCAwLCA2NTY4OCwgOTgzMjQ2LCA1MDYzLCAzNTE3LCAyOTY0LCA0MzY2MywgCiAgICAgOTE3NzYyLCA2MzQ0LCA3NDc5MSwgMTA1NjYsIDEwMTQ0LCA2NjMzMywgODI1MiwgNzI5LCA2NjAxNiwgNzgyNTMsIDAsIAogICAgIDcxMzE3LCA2NDkyMywgMTI4MDQwLCA0MzY2OSwgOTAzMiwgNzgyNjMsIDc4MjY0LCAwLCA0MTIxNSwgMCwgNjU4ODMsIDAsIAogICAgIDkxNzc3NCwgMTIwNjAyLCAzNzYxLCAwLCAwLCA3MDA2OCwgMCwgMTI5MTIsIDExOTAxMiwgMzg1MCwgMTI4MTkxLCAwLCAwLCAKICAgICAwLCAwLCA5MDgsIDAsIDg2MTEsIDAsIDAsIDEyNzU1NSwgNDM2OTEsIDQxMTk3LCAwLCA4OTc4LCAxMjA1NDAsIDExOTEzNSwgCiAgICAgNDE1ODYsIDEwNTI3LCAwLCA5MTc4NDgsIDM4NDgsIDc4NzM5LCAxOTQ5MzcsIDEyNzUzNiwgNjUyNDEsIDUzMzYsIAotICAgIDk4MzI1MSwgMTI4Nzg2LCA2NjMsIDAsIDEwNzgwLCAwLCAwLCA3ODc2NywgOTgzMjQ5LCAxMjcxNjMsIDY4MTkzLCAzNDcsIAorICAgIDk4MzI1OSwgMTI4Nzg2LCA2NjMsIDAsIDEwNzgwLCAwLCAwLCA3ODc2NywgOTgzMjU3LCAxMjcxNjMsIDY4MTkzLCAzNDcsIAogICAgIDAsIDAsIDc4Nzc1LCA2NDY3NSwgNDE1ODIsIDc4Nzc0LCA3ODc0NCwgNjU1NzksIDEyOTgwLCA3ODc2OSwgMTIxNDMsIAogICAgIDY5NjU3LCA3ODUxMiwgMCwgNDM0NDEsIDQxODA0LCA3ODUyMywgMCwgNzg1MjUsIDAsIDEyODg1OSwgNDE1ODQsIDEwNjgxLCAKLSAgICAwLCA5ODM2ODYsIDczOTM4LCAwLCAxMjgwMjIsIDQ4MDAsIDY2NjYxLCAwLCA2NjMwNiwgNjQ3MTUsIDc4NTM0LCA5NTE4LCAKLSAgICA2NjA5LCAxMDQzNCwgMCwgMTEzMTksIDEwOTcsIDAsIDkxNzg1MCwgNDE3MzAsIDk4MzIxMiwgMCwgNzM4NDcsIDc4NzYxLCAKLSAgICA2NTE3MiwgNDE3MjgsIDQxNzIxLCAwLCAwLCAwLCA0MTIwMywgOTE3NjEyLCAxMzExMCwgNDE3MjYsIDk4Mzg0NiwgMCwgCisgICAgMCwgOTgzNjk1LCA3MzkzOCwgMCwgMTI4MDIyLCA0ODAwLCA2NjY2MSwgMCwgNjYzMDYsIDY0NzE1LCA3ODUzNCwgOTUxOCwgCisgICAgNjYwOSwgMTA0MzQsIDAsIDExMzE5LCAxMDk3LCAwLCA5MTc4NTAsIDQxNzMwLCA5ODMyMTQsIDAsIDczODQ3LCA3ODc2MSwgCisgICAgNjUxNzIsIDQxNzI4LCA0MTcyMSwgMCwgMCwgMCwgNDEyMDMsIDkxNzYxMiwgMTMxMTAsIDQxNzI2LCA5ODM4NTUsIDAsIAogICAgIDEwMDAsIDY5NjUxLCAwLCA0MTE0MCwgMTIwOSwgNzM5NzgsIDAsIDczNzUwLCAxMDczLCA2MzIxLCA3Nzg3OCwgNDExMzgsIAogICAgIDAsIDY4MjEzLCAwLCAxMjE2NywgMTExNSwgNDE2MDUsIDk3OTQsIDEyNzA2MiwgNjc2NzEsIDU1MjQ4LCAxMjIzNywgCiAgICAgNzg3ODcsIDY2MzE0LCA2NTg3LCA5MjkwLCA3ODc4MiwgNzg3ODMsIDkyMzEsIDc4NzgxLCAyOTU5LCA3OTI2LCAwLCAwLCAwLCAKLSAgICA2NDM5OCwgMCwgMTE5OTcwLCAxMjMxMSwgOTgzNzE4LCA3ODc5NiwgNzg3OTgsIDc4Nzk0LCA3ODc5NSwgNjg0MzQsIAorICAgIDY0Mzk4LCAwLCAxMTk5NzAsIDEyMzExLCA5ODM3MjcsIDc4Nzk2LCA3ODc5OCwgNzg3OTQsIDc4Nzk1LCA2ODQzNCwgCiAgICAgNzg3OTMsIDY2NjcwLCAwLCAwLCAxMjI5MCwgMTIwMTY5LCAwLCAxMTk4NzMsIDQyMTQyLCA5OTY4LCA4MjA1LCAwLCA1MTMxLCAKLSAgICAwLCA5NjI3LCA3ODUzNiwgNzg1NDIsIDc4NTM1LCA5ODMyMTAsIDE5NDQsIDEyNDgsIDEwMTQ4LCAxMjc3NTUsIDExOTk5MCwgCisgICAgMCwgOTYyNywgNzg1MzYsIDc4NTQyLCA3ODUzNSwgOTgzMjEyLCAxOTQ0LCAxMjQ4LCAxMDE0OCwgMTI3NzU1LCAxMTk5OTAsIAogICAgIDExOTk5MSwgMTI3MDEsIDc4Mzc2LCAxMTMwOCwgMTE5OTk1LCAwLCAxMTk5OTcsIDExOTk5OCwgNjUzMDUsIDY1MTAwLCAKICAgICA0MDMxLCA0Mjc5NCwgMTIwMDAzLCA3MDc1LCA4MTU0LCAxMTk5ODUsIDEyMDAwNywgNDE4MTcsIDczOTM0LCA0MjI3NSwgCiAgICAgMTIwMDExLCAxMjAwMTIsIDc4NTI2LCAxMjAwMTQsIDEyMDAxNSwgNjA0MSwgMCwgNDE4OTksIDAsIDgwMDIsIDAsIDQzNjQsIAogICAgIDAsIDAsIDY0MzMyLCAwLCA3ODEzLCA5MDY0LCAxMTk5ODYsIDEwMTI0LCA3NTI2LCA4NjAxLCA3MjgxLCA3ODQ1NSwgNzI3OSwgCi0gICAgMTIwNDEsIDE0MTgsIDEwODg1LCAxMjY3MywgMCwgMCwgOTY2MCwgOTgzMjcyLCAxMzAxMiwgNDU3MSwgMCwgMCwgMTIwMTY0LCAKKyAgICAxMjA0MSwgMTQxOCwgMTA4ODUsIDEyNjczLCAwLCAwLCA5NjYwLCA5ODMyODAsIDEzMDEyLCA0NTcxLCAwLCAwLCAxMjAxNjQsIAogICAgIDEyMDc4LCAyOTcwLCAwLCAxMDkzMywgMCwgNzc4NzAsIDAsIDEyNzAxNSwgMCwgNDE1OTksIDAsIDEyODgzMSwgMCwgCiAgICAgMTI5NTAsIDkyMTYwLCAzNDg2LCAwLCA3ODMxMSwgNDIzOSwgMCwgMTI3Nzk5LCA2NjUxMSwgMCwgMjYzNywgNjQ2MjksIAotICAgIDg0NjAsIDEyNzA1MywgODQ3NiwgOTgzOTY2LCAwLCAwLCAwLCA2NTY3MywgMTAxOSwgNzg0OTUsIDQxNDgsIDAsIDEyMjg5LCAKLSAgICAwLCA0MzE2LCAwLCAxMzExOSwgODQ4OCwgNTQxMiwgNjYyNDMsIDk5MzUsIDAsIDczODY0LCA5ODMyMDEsIDQxNzM0LCAKKyAgICA4NDYwLCAxMjcwNTMsIDg0NzYsIDk4Mzk3NSwgMCwgMCwgMCwgNjU2NzMsIDEwMTksIDc4NDk1LCA0MTQ4LCAwLCAxMjI4OSwgCisgICAgMCwgNDMxNiwgMCwgMTMxMTksIDg0ODgsIDU0MTIsIDY2MjQzLCA5OTM1LCAwLCA3Mzg2NCwgOTgzMjAzLCA0MTczNCwgCiAgICAgODIwNiwgNzQwODEsIDkxNjMsIDMyODYsIDkwNzIsIDU4NjcsIDEzMzAyLCA3NjIyLCA3MTIwLCA0MTczNiwgOTI1NDYsIAogICAgIDQxNzMxLCAwLCA3NDAwLCA1NDE2LCA2ODY2MywgMTE4OTI0LCAxMDgxNywgMCwgNDE1MzksIDEyNzI4NCwgMCwgNzM5NjMsIAogICAgIDQxODU1LCA0MTg2NywgNjU1NjQsIDExMjc3LCA2NTg5MiwgMTE1MzYsIDEwNjIwLCA5MjI3MiwgNzExNSwgNjYwMzAsIAogICAgIDczOTMyLCA1NDk4LCA3Mzk0MiwgNDE1MzYsIDAsIDY4MjA0LCA5MjU4NywgMzQ1OSwgODk5NywgMCwgMCwgMCwgMCwgCi0gICAgOTI1MTIsIDAsIDY2Mzc3LCA2OTc4MSwgMCwgOTgzNjkwLCA3ODUxMSwgMzE2MSwgMjk1LCAxMjAyMDcsIDAsIDkyMjIzLCAKKyAgICA5MjUxMiwgMCwgNjYzNzcsIDY5NzgxLCAwLCA5ODM2OTksIDc4NTExLCAzMTYxLCAyOTUsIDEyMDIwNywgMCwgOTIyMjMsIAogICAgIDEyNzg1NiwgNzg3NDIsIDkwMTYsIDQzNDU0LCA2MzkwMywgNjM5MDIsIDQzNjQxLCAwLCAzOTcxLCAwLCA3MDA2MywgMjk1MiwgCiAgICAgNzg3NjUsIDExMDM4LCAxMDkwMSwgNjM5MDAsIDYzODk5LCA2Mzg5OCwgOTQwNDMsIDY2NywgMTIzMzIsIDYzODg3LCA2MDg2LCAKLSAgICA0MTcyMiwgMCwgNTE3MiwgMCwgMCwgNDE1OSwgMCwgMCwgOTgxNSwgNjM4ODQsIDE5OTM0LCA2Mzg4MiwgNDExOTgsIDg1NTUsIAotICAgIDYzODc4LCA2Mzg3NywgNDI0NjAsIDYwNTAsIDQyNzA4LCA2Mzg4MSwgNjM4NzIsIDAsIDQyNDIxLCAwLCA0MTcyMywgCisgICAgNDE3MjIsIDAsIDUxNzIsIDAsIDk4MzI3OCwgNDE1OSwgMCwgMCwgOTgxNSwgNjM4ODQsIDE5OTM0LCA2Mzg4MiwgNDExOTgsIAorICAgIDg1NTUsIDYzODc4LCA2Mzg3NywgNDI0NjAsIDYwNTAsIDQyNzA4LCA2Mzg4MSwgNjM4NzIsIDAsIDQyNDIxLCAwLCA0MTcyMywgCiAgICAgNjM4NzUsIDYzODc0LCAxMTQ2MCwgNzQzMiwgMTkxMywgNDE5MTMsIDYzODUyLCAxMjY2MzYsIDAsIDQyMzQ4LCA3Mzg5MiwgCiAgICAgNjc1MiwgNDQ2LCA0MTkxMSwgMTI3OTA2LCA2Mzg1MSwgNjM4NTAsIDQxOTEwLCAwLCA2Mzg0NiwgMjk3MiwgMTI5MzIsIAogICAgIDcyNjIsIDAsIDYzODQ5LCA2Mzg0OCwgNjM4NDcsIDEyODA3MCwgNjU3MCwgODMwMiwgNzI1OSwgNjM4NDIsIDQxNzgsIApAQCAtMTg0ODgsOCArMTg1MDcsOCBAQAogICAgIDc1ODMsIDc2NzksIDI5MDMsIDAsIDMwMDEsIDExNTgsIDg3NDUsIDQzNzQ2LCA3Mzc0OCwgNjM4NjYsIDc4NjI2LCAxOTE1LCAKICAgICA0ODQ2LCAwLCA2NjM3MSwgMTE4OTg0LCA0MjEwNSwgMjk5MCwgMTIwMTI4LCA4MDUsIDY5MjM4LCA2NDQzOCwgMTIwNzAsIAogICAgIDg3NjAsIDExMTcsIDExODk4NywgMTIyMTIsIDEyMDEyMywgNjUxNzQsIDQyMzU3LCA2MzgzNSwgNjM4MzQsIDAsIDc4MjQwLCAKLSAgICAxMjIyNSwgNjM4MzgsIDYzODM3LCA5ODM4NDQsIDk4Mzc5NSwgNjM4MzMsIDYwNDIsIDY2MzYwLCA4MDgzLCAwLCAwLCAKLSAgICA2MzgyMSwgNjM4MjAsIDYzODE5LCA2MzgxOCwgOTgzODk1LCA1MjI3LCA5MDQ3LCA2MzgyMiwgMTI3MTYyLCA2MDkxLCAwLCAKKyAgICAxMjIyNSwgNjM4MzgsIDYzODM3LCA5ODM4NTMsIDk4MzgwNCwgNjM4MzMsIDYwNDIsIDY2MzYwLCA4MDgzLCAwLCAwLCAKKyAgICA2MzgyMSwgNjM4MjAsIDYzODE5LCA2MzgxOCwgOTgzOTA0LCA1MjI3LCA5MDQ3LCA2MzgyMiwgMTI3MTYyLCA2MDkxLCAwLCAKICAgICAxMDY5MSwgNTYwLCA1NjQzLCA4MjI2LCAxMTk1NzgsIDYzODEyLCA2MzgxMSwgNjM4MTAsIDYzODA5LCAyMjg5LCA2MzgxNSwgCiAgICAgNjM4MTQsIDYzODEzLCA2MDQ3LCAxNTk3LCAxMjAxNDMsIDc4MCwgMjA2LCA3NzkyNSwgNDkzNiwgNjUxNDcsIDgxNjgsIAogICAgIDYzOTMwLCAyMDc2LCAxMDkzLCA5ODgyLCA2MzkzNCwgMjA4MiwgNjM5MzIsIDEyODE1MCwgNjM5MjksIDM1NDYsIDE2MDUsIApAQCAtMTg1MDcsMjYyICsxODUyNiwyNjIgQEAKICAgICA0MzY1OSwgMTI5NTEsIDEyMDYzOCwgOTkwNiwgMjA1NCwgMjMzNCwgNzg1MTUsIDYzOTE2LCA1NDgzLCA2MzkxNCwgNjk3MzcsIAogICAgIDYzOTExLCA1NDg0LCA2MzkwOSwgNjM5MDgsIDI1MzksIDAsIDQzOTgwLCA1NDg1LCAwLCA0MjY5NywgOTA2MSwgNTUzNCwgCiAgICAgMTA2NzIsIDQ1MDIsIDAsIDI1MywgMCwgNjgyMDgsIDAsIDkyMDMsIDc0MjMxLCAwLCAxMTUzMCwgOTI1NDIsIDY4NjY4LCAwLCAKLSAgICAxMTg5MDcsIDAsIDEwNDc0LCA0MzQyNiwgMTMyNTcsIDQyMzU0LCAxMjgwOTksIDk4MzY4OSwgNzAwNDQsIDE5NTA2NSwgMCwgCi0gICAgODQxMywgOTgzODA3LCAwLCA1NjkzLCA3MjcyLCAwLCAxMzIwOSwgNjQ0NzAsIDY1ODMxLCA3NDM1MCwgMTk1MDYzLCAwLCAwLCAKLSAgICAwLCAxMjY2MzksIDAsIDAsIDk0MDc4LCAxMjgxMzMsIDEyNzc2NywgNjY2MDgsIDMxMTEsIDQxODYzLCA4ODA0LCA0MjkxMywgCi0gICAgOTIxODcsIDcyNzAsIDAsIDY2NjA2LCA2NjI4LCAxMDc2LCA3NDMzLCAxNDM2LCA3Mzg0NCwgNTUyMjYsIDEyODM1MywgCi0gICAgNjM5ODIsIDczOTMsIDEyODA3LCA0MzQxMywgNjM5MDYsIDE1OTgsIDYzOTA0LCAwLCAwLCA0MTcyOSwgNDQyMywgMTMwNywgCi0gICAgMCwgMTA1MTUsIDQxNTg5LCAxMjg2OTgsIDAsIDYyMTgsIDAsIDE0MzAsIDAsIDAsIDEyMDYwNiwgNzg3NTQsIDU0MTMsIAotICAgIDc2MTksIDMyNTUsIDM0OTMsIDc0MDMyLCAxMTU0OSwgMTA3MzUsIDQxNzQzLCA3MzkzNywgNjgwMSwgOTgzNjI0LCA0NTE4LCAKLSAgICAxMDk5MCwgNjUwNzMsIDUxNjcsIDQ0ODEsIDM3NzEsIDEyMDE1OCwgMjcxMCwgMCwgNjkyNDMsIDQxNzI0LCAwLCA0MzA3MywgCi0gICAgNDE2OTAsIDEyNDc5LCA5ODM2MjYsIDAsIDAsIDk4MzgwOSwgNzAwNDYsIDE2MjgsIDEyNzE0OSwgOTgzNDc5LCA5ODM3MjIsIAotICAgIDY1MjYyLCA2MzMzLCAxMDc4MywgNDIzMTUsIDAsIDYzODU1LCA5NDA1NiwgMCwgMCwgNTMzOSwgNzQzMjMsIDAsIDEzMDA0LCAKLSAgICAwLCA0NDU3LCAwLCAwLCAwLCAwLCA1Njg0LCA4Njc4LCAxMDkxNCwgMCwgNTY4OSwgNjU4MDcsIDAsIDY4NDY0LCAxMjYzMywgCi0gICAgMTI4NzAsIDY5NzA1LCA2NTE4MywgNTY4OCwgMTE5MjYsIDYwMzMsIDYzMTAsIDU2ODYsIDAsIDc0MjUxLCAwLCAxMjA2NDcsIAotICAgIDAsIDUwLCAxMDU1OCwgOTg3MSwgNDI2MTIsIDQzNjU1LCAwLCAwLCAwLCA2NjQ2OCwgMCwgMTMyNTksIDQ0NDgsIDAsIAotICAgIDk4MzgzNiwgMCwgNzAwNDMsIDY3ODUzLCAwLCAxMDY0MCwgMTE1MzksIDExNTEsIDAsIDkxNzYwNywgMTI3NTQ0LCAKLSAgICAxMjcwNzksIDE5NTA1MCwgMTI3ODUyLCAwLCAwLCAwLCAxMjUwMSwgNjQ2MDQsIDAsIDExNTI3LCAxMTg4NzAsIDg4MTIsIDAsIAotICAgIDExNTM4LCA4NjczLCAxMjY1MCwgMTEwMjAsIDAsIDY2NDY3LCAyMTA1LCA4MDg3LCA3ODE2MywgNjk2MzIsIDk4OTQsIDAsIAotICAgIDAsIDAsIDQ2MzYsIDU1MjYyLCA3ODUxMywgNDUxNSwgMjM4MiwgMCwgMTI3MDU1LCAwLCAxMjA0OTUsIDAsIDEyODI4NCwgCi0gICAgMTIyNzcsIDE5NDYyNywgMTE5OTUsIDkyNTUzLCAwLCAxMjE1OCwgMCwgODc0MSwgMTAxOTcsIDAsIDkyNDI2LCAwLCA2NTMxLCAKLSAgICAwLCAxMjc4NDYsIDQ3MywgNDM0MTUsIDAsIDk4MzY0MSwgMTg3MywgMTA4NywgMCwgMCwgMCwgNzg1MjcsIDY2NDM5LCAKLSAgICA0MzIxOCwgOTgzMTIzLCAxOTQ3MTYsIDcyMzcsIDEyNTA0LCA3NDI4MiwgMCwgOTgzNTcxLCAwLCA5NDg5LCAwLCAwLCAKLSAgICA0Mzg0LCA3NDIyMCwgNjM4NDUsIDIwNTgsIDEyODg2MywgMTMyOTUsIDQzMTkxLCAxMjgwMzAsIDAsIDExNTQsIDM4NTcsIAotICAgIDEyMDUsIDAsIDAsIDEzMTAwLCAxMjk1OCwgMTIwNzA2LCA3NDE2OCwgMCwgMCwgNDQyMSwgMTA1OTIsIDAsIDQ5NSwgCi0gICAgMTE5MDA3LCA0MTcxMiwgNzk4MywgMCwgOTM5OTcsIDAsIDYzNDcsIDEyMDE2NSwgNzY1NCwgNDE3MTAsIDQxOTYsIDAsIAotICAgIDQzNywgNDE3MDksIDczNzcyLCAwLCAwLCA5NDY1LCAxMzI5MCwgMTE5MTgwLCA0OTk3LCA2NDMwNiwgMCwgMCwgNDk5OSwgCi0gICAgMTk0NjQyLCAwLCAxMjY1ODIsIDQ3MTEsIDEyMDc2OSwgMCwgMjczOSwgMCwgODA0NCwgNzQ4MzQsIDE5NDY0MywgNDE3ODksIAotICAgIDEyODE0MiwgMTA4MDksIDAsIDAsIDAsIDE3NzksIDY2MDAsIDY2MDEsIDQxNTQzLCA1MzI1LCA2NDIsIDY0MTg3LCAxMzA1OCwgCi0gICAgMTIwNDQ5LCAxMjg3NSwgMCwgOTIxODYsIDEzMjI5LCAwLCAxMDU3NSwgNDMzOTksIDAsIDAsIDQxNzkxLCAxMTA0LCAwLCAwLCAKLSAgICAxMDY1NSwgMCwgMCwgMCwgMCwgMTA4MiwgMTk1MDQ5LCA4NDI4LCA2NTY5LCAwLCAwLCAwLCA2OTg0OSwgNjc4MywgMCwgCi0gICAgMTI5OTMsIDgwNDksIDQxNTQ4LCA0NDAyMSwgNjQ1OCwgOTgzNzk4LCAxMjg4ODIsIDQ3NjEsIDYzODI4LCA0NzY2LCAKLSAgICA2NDYyMywgMTI3MywgNDM0MDcsIDAsIDExODg3NiwgMTk1MDQ1LCA2OTEyLCAxMzEzLCA2MzIyLCAxMDQ4MywgOTgzNjAzLCAKLSAgICA0MTU0NSwgMCwgOTI0NDksIDAsIDAsIDAsIDAsIDc4NjI0LCAzNDg0LCA3NDMzNywgMCwgMCwgODUwMywgNTEyMiwgNDE1MjcsIAotICAgIDAsIDY2MzIwLCA5ODM4MDIsIDAsIDAsIDAsIDQxNTM3LCA2OTY4MywgODMwMywgODI4MiwgMTE4MTcsIDczODU3LCAxMDAwMywgCi0gICAgNzM4NTksIDY1OTA0LCA3MzYzLCAxNjg2LCAwLCA3ODQwNiwgMTE0NjcsIDM2NjQsIDY1OTIxLCA2NDI5OSwgMTk0NjY0LCAwLCAKLSAgICAwLCA0MzI0LCAxMjYsIDQyMjQ2LCAxMTkxNTIsIDAsIDc0Mzc4LCA2NTkyNiwgNzc0NCwgMTk0NjM2LCA3NDI3NywgNzQzMDIsIAotICAgIDc4MDUyLCA0MzgxNywgNjk2NiwgNDM4MjIsIDgxMzYsIDAsIDY1NjAwLCAxNjMzLCAwLCAwLCA0NzYyLCAxMTAzLCAwLCAwLCAKLSAgICA0NzY1LCA5ODM0ODQsIDEzMDc4LCAwLCA0NzYwLCA2MzgyNywgMjA1MCwgMTA4NzEsIDQzMTk5LCAxMTAyLCAwLCA0MjIzNiwgCi0gICAgMTI4ODY3LCAxOTQ2NjcsIDExNTQ2LCA3NDc5NCwgMzM3LCAwLCA0MjU5MSwgODYyNywgMTIyNzksIDExMTEsIDAsIDkyMTYxLCAKLSAgICA0NzA3LCA2ODIwNiwgMTAxNDMsIDc4ODMsIDEyNzA4MSwgNzg4MCwgNDUyMiwgODY0NSwgNTcwNCwgMTMwMTAsIDAsIDgzMDQsIAotICAgIDkxNzU2MSwgMCwgMTE5NTc1LCAyMjkzLCAwLCA2NjY1NCwgMCwgOTI2NzYsIDAsIDEzMDA4LCAwLCA0Mzg1LCAwLCAxMzAxMSwgCi0gICAgMCwgOTI1NjksIDExOTE2MSwgMTMwMDksIDE2MCwgMjY3NywgMCwgMCwgNDE3OTMsIDY1NzYzLCA3NDIyMSwgMTIwMTQxLCAKLSAgICA0MTc5MiwgNDI3NzAsIDk0MDU0LCA2NTc2MiwgMTE4ODI5LCA0MzgyMSwgNTcwOSwgMCwgOTQwNTMsIDQzODE2LCAwLCAwLCAKLSAgICAxMDc5LCAzODY3LCA1NzA4LCAwLCAwLCA0Mzc5NywgNTcwNiwgNjQ3NjgsIDU3MDUsIDg3OTEsIDQwMDUsIDAsIDEwMjM3LCAKLSAgICAxMDk5MSwgMTI4ODE2LCA0MzQ1OSwgOTE3MywgOTE3NTgxLCA5MTc1ODAsIDEzMTcwLCAxMjU0MCwgOTE3NTc3LCA0MjYwNSwgCi0gICAgMTIwNzY1LCAxMjY2MTcsIDY4NjQ3LCA5MTc1NzIsIDEwMDU4LCAwLCA3NDg2NywgMTk0NjU0LCAxMjcwNzgsIDMzMzksIAotICAgIDExNDQ4LCAxMTA2LCA5MTc1OTEsIDkxNzU5MCwgOTE3NTkzLCAzMzQwLCA5MTc1ODcsIDkxNzU4NiwgOTE3NTg5LCAKLSAgICA5MTc1ODgsIDEyMDU0MSwgMTA2MDUsIDEzMDksIDYzOTY2LCAxMjA3NDMsIDE3NTQsIDkyMjI2LCAxMzI0NiwgODY0LCAwLCAKLSAgICAxMTg5MjYsIDg5NzIsIDAsIDc4NDksIDEyMDA5MiwgOTI1MzMsIDEzMjQwLCAxOTUwNjgsIDUxOTIsIDQzMzgsIDY3OTgyLCAKLSAgICAxMDk0OCwgOTE3NjAxLCAxMzE5OSwgOTI1NzUsIDEyMzYsIDEzMjA4LCAxMzI2MSwgMTMxODksIDEzMTg4LCA5Mzk5MywgMCwgCi0gICAgNzQ0MCwgMCwgMTIwMTUzLCA5NTUzLCAxNTkwLCA2Mzc3NywgNjM3NzYsIDEzMTc4LCA2Mzc4MiwgNjM3ODEsIDYzNzgwLCAKLSAgICA2Mzc3OSwgMTU4MywgMCwgMTMyNjAsIDQ1NTAsIDAsIDY0MjA1LCAwLCAwLCA0MTUyMiwgOTgzOTA2LCA5MjE2OCwgCi0gICAgOTgzNzYzLCA5MTc4NTgsIDExMzU0LCA5NDA3MSwgMCwgNDI3OTUsIDAsIDExOTE5NSwgMTEzOTQsIDE5NDY0NiwgMTMyMzYsIAotICAgIDEzMjcyLCAxMzE5NCwgMTMzNCwgNjk5MjYsIDQ0NzksIDExNzgsIDY1NTg2LCAxMjA2NjMsIDY2NjgxLCAxMTkxOTMsIAotICAgIDQ2MDEsIDAsIDAsIDk4Mzc1NiwgMCwgMCwgMTk0NjU4LCAwLCA2ODA5LCA2Mzc4NiwgNjAzMSwgMCwgNjM3OTEsIDYzNzkwLCAKLSAgICAxMTQ1LCA2Mzc4OCwgNzkxMCwgNjM3ODUsIDQzMTUzLCA3NTQsIDEwMTkyLCAxMzEwNSwgODE4MywgMTIwNzQxLCAyMDM3LCAKLSAgICAwLCAwLCAxMDc0NywgMTI1LCAwLCA2NDg5MCwgMCwgOTgzMTMxLCAwLCA0MTcxOSwgNjM3NTgsIDM1MjMsIDEwNzQsIAotICAgIDEzMjU4LCA5NTM2LCA3NDA3NywgMCwgNDQyNywgNzQyNDIsIDYzNzU3LCA0MzE0NSwgMTIyMTcsIDYzNzU0LCA0MTUzMiwgCi0gICAgMTM0OSwgNjM3NTAsIDYzNzQ5LCAwLCAwLCAwLCA2Mzc1MywgNjM4MDIsIDQxMDg0LCAxMjA2MjIsIDY4MTMzLCA0MTkzMCwgCi0gICAgNjM4MDUsIDYzODA0LCA0MzYzMiwgNjM4MDEsIDQxMDgyLCA4MTQwLCA2Mzc5OCwgNjI2MCwgMCwgMCwgOTQwNzQsIDYzNzkzLCAKLSAgICAxMTk4OCwgMzg5OCwgMTI4MjQxLCAxMDIwMSwgMTIyMzgsIDYzNzk1LCA0MjE5NCwgMTAzNjcsIDEyNTIxLCAxMDQzMSwgCi0gICAgNDIxMTQsIDQxOTMyLCAxMDY4LCAwLCAxMjUyMywgMTI5NDUsIDk4MzMyMSwgNDIyMDMsIDc5NTAsIDEwODA0LCA2Mzc3MSwgCi0gICAgNDI3ODcsIDQzODYsIDEyMjI0LCA2OTczLCAyNzkzLCAxMjQ3NSwgMCwgMCwgNjM3NjksIDk1MzAsIDk4MzExOSwgMTIyMzIsIAotICAgIDEzMTM1LCA4NTk2LCA1NjgxLCA2Mzc2MiwgNDU5NSwgNjM3NjAsIDc5MiwgMCwgNjQ4MDMsIDAsIDg3NDIsIDAsIDExMDUzLCAKLSAgICAxMjg3OTYsIDYzNzQ0LCAxMjgxMDcsIDAsIDc1ODgsIDYzNzQ4LCAxNjkzLCA2Mzc0NiwgNDMyMDQsIDUwNTUsIDY4NDI2LCAKLSAgICA5MTc4NTMsIDEwOTAsIDEyMDY3OSwgMTI4MzU2LCAxMTY2NSwgNzQxMzMsIDQ1NTgsIDY1Njg1LCA5NTIzLCAwLCAwLCAKLSAgICA3ODY4MSwgMTE1MTMsIDAsIDYxNTcsIDYzNzc1LCA2Mzc3NCwgNjM3NzMsIDEzMTkxLCAxMjE3MCwgMzUwMCwgMzEzOSwgMCwgCi0gICAgMzE3MCwgMTI0ODUsIDAsIDEwODcyLCA3ODI3MSwgMTMwMDYsIDY0NDMzLCAwLCAwLCA5NDEsIDAsIDAsIDAsIDY1NTQxLCAKLSAgICAxMTA2MywgMCwgODIyOCwgMCwgNDIwNjUsIDAsIDAsIDk0MDM5LCAwLCA5MjQ1NSwgNzM4NiwgMCwgNjQ0NDQsIDAsIAotICAgIDExOTg2MywgNDM2MDMsIDk0MDc1LCA2NTM5NywgMjg4LCAwLCAwLCAwLCAxMDAyNSwgNjk5MTUsIDI5MTgsIDAsIDY1MzAwLCAKLSAgICAxMTk4NzEsIDk4ODMsIDY0NzI2LCAyNzkwLCA2NTM5NSwgMzc5MywgMCwgMTI3ODI5LCA2NTM5MywgMCwgNzQxMzgsIDAsIDAsIAotICAgIDAsIDc0MTM5LCA5MjcxMiwgNjUzOTQsIDExNTQ4LCA1MjcwLCAwLCA2NTM5NiwgMCwgNjU4MTMsIDEzMjU2LCAxMjgyLCAKLSAgICAxMjA3NzEsIDAsIDAsIDEwODg4LCA5ODM2MDQsIDY1MjQyLCAwLCAzMzMwLCAwLCAwLCA5ODM5NjUsIDAsIDAsIDc0MjU5LCAKLSAgICAzMzA0LCA0Mjc1MywgMCwgMCwgMCwgMTYyNywgMCwgMCwgMCwgNTM3MSwgMTMxMTYsIDAsIDE4MjYsIDExODc5NCwgMCwgCi0gICAgNDMwOTQsIDcwMDIzLCA0MzY1MCwgOTQwMzcsIDAsIDkwMzUsIDAsIDAsIDEyODAwNSwgMCwgOTIyMDcsIDY4MTI1LCAwLCAKLSAgICAxNjQsIDAsIDk0MDY3LCA5NDAwMCwgNjk1OCwgMCwgNDMxMTYsIDAsIDcwMDE5LCAxMzI0NSwgMCwgMCwgMTI3Mzc2LCAwLCAKLSAgICA3MDAzMSwgMTI3NzU2LCAxMjY2NiwgMTMxNzUsIDEzMjA3LCAxMjA0MTQsIDY2MDE0LCAxMjA0MjgsIDc0NDcsIDU5MjksIDAsIAotICAgIDY1NTA5LCAwLCA3NDQ5LCAxMTMwNiwgMCwgNzM5MjAsIDMxODAsIDAsIDYzODA4LCA5MDU0LCA5NzEsIDEzMDYyLCAwLCAwLCAKLSAgICA2NTE5NSwgMTAxNjQsIDkyMjUyLCA3NDQyOCwgMCwgNzgxNDYsIDkyNjExLCAwLCAwLCAwLCAxMDA0NSwgMTI4ODIsIAotICAgIDEzMjc1LCAxMjgxNjEsIDExMDU3LCAwLCAxMzI3NiwgMCwgNDE1MjUsIDc4MTUwLCA3MjcxLCAxMTQ0NCwgMCwgMCwgMCwgCi0gICAgMTIyMjksIDQxNTIzLCAwLCA0MzQxMSwgNzM3NTEsIDAsIDY0ODEzLCAwLCAwLCAxMDQ3NiwgMzg1OCwgMCwgMzkzMiwgCi0gICAgNjQ5NTgsIDAsIDAsIDczOTg5LCA2ODE5MiwgMCwgNjk4NDcsIDM2OSwgMCwgNDE3ODQsIDAsIDY0MTYzLCAwLCAwLCAwLCAKLSAgICA2NTQ3NCwgNDc5NiwgMTIyOTIsIDEyNjU5NSwgNjU0NzksIDAsIDQxNzgxLCAxMDQ4NiwgNDE0ODAsIDQzMDAyLCA5ODk5LCAKLSAgICAwLCAwLCA0MDQsIDEyODIxLCAzNzQxLCAwLCA1Nzg4LCA4MDkyLCA2ODIxMiwgNDEyMjIsIDE4MzEsIDY2MDIwLCAzOTgyLCAKLSAgICAwLCA0Mzg4LCAwLCA3NDYsIDEyMDc4NCwgMCwgMCwgMTIwMTgsIDY1Mjk0LCAwLCAwLCAwLCAwLCA0NDIyLCA0NzA4LCAKLSAgICAzNzk5LCA3NDI5MiwgMTE5MzU3LCAwLCA3NDQzMCwgMCwgMTE3MDAsIDQzNzQsIDAsIDEyODE3OSwgMTM2NCwgMCwgODAzOCwgCi0gICAgMCwgOTE3NTk3LCAxMjg2OCwgNjk4MTQsIDAsIDY3MzUsIDczOTc5LCAxMzE3NCwgNzM5NjgsIDEzMjI1LCAwLCA2OTgwOCwgCi0gICAgNjU4MzUsIDAsIDIzNjUsIDc4NDEsIDAsIDQyODU1LCAxMTg4NTYsIDQyODY2LCAwLCAwLCAwLCA2NjQzOCwgNDE3ODUsIAotICAgIDEyNjE3LCA2NDE3MiwgMTMxNzMsIDQzNzIsIDExOTM1NCwgMCwgOTgzNTY4LCAwLCAwLCA5MjQwMiwgMTI4MDYyLCAxMjk2NSwgCi0gICAgMzg0LCA2NDUxMiwgMTA0MDQsIDEwMzQwLCAxMTkzNTIsIDE1NTYsIDUyNzQsIDEzMjEwLCAxMjAxMjUsIDEwMDE3LCA5NzMzLCAKLSAgICA0MTc4NywgOTgzMjM3LCAxMjY5OTQsIDQxMzczLCA3ODAzOSwgMTIzMDMsIDAsIDEzMjMyLCAxMzIzMywgMzQ5LCA0ODYzLCAKLSAgICA0MTM3MSwgMTE2NTYsIDAsIDEyMDcwMywgMTE5ODgzLCAxMjg2MSwgNDM5OCwgODU0MywgNjU2MTgsIDEyODAxOCwgMTA5NiwgCi0gICAgMCwgMCwgNDI2ODgsIDEyNDQxLCAxMjM1NSwgMTE5MzQ4LCAxMTkzNDcsIDQzMTgsIDEwNDUyLCAwLCA4MDMyLCAxMzI0MywgCi0gICAgMTMyMzcsIDEyNzE5LCAxMjY2NDYsIDExOTEwMSwgMCwgNjQ4ODQsIDExOTg3MiwgMTE5MzQ1LCA4NTk3LCAwLCAwLCA5ODY0LCAKLSAgICAwLCAxMjA3ODUsIDExOTg3NCwgOTQxMDcsIDEzMTk1LCA0MTQ1MiwgNjQ5NjEsIDc3MjIsIDAsIDEwNDU5LCAxMTk4NzgsIDAsIAotICAgIDExOTg3OSwgNjY1OTAsIDEyODEyMywgNDE1MzMsIDY2MzM3LCAwLCA5MjE4NCwgMCwgNDk2NSwgNDM0NDUsIDkxNzUzNiwgCi0gICAgNzM4NDksIDAsIDQzNjM4LCA3ODUzNywgMTI4Mjg3LCA2MjYxLCAxMTkzNDIsIDQzMTQ3LCA2NjU3MCwgMTk1NywgMTA0MjAsIAotICAgIDk4MiwgMjc1NiwgMTMyOTIsIDEzMjA2LCAxMjg4MjgsIDAsIDI5MjUsIDczODA5LCAxMzA1NiwgMTI3NTU5LCAxMzIxMiwgCi0gICAgNDMyMzgsIDAsIDEzMTkwLCAxMzE4NywgOTI1NDEsIDEzMTk4LCAxMTg3OTMsIDAsIDUyNDIsIDExOTE3OSwgNjQ0NzYsIAotICAgIDE2OTQsIDgyMTYsIDcxMzY5LCA2NzcwLCA0MzMzMSwgMCwgNjU2MjAsIDk4MzcxOSwgNDM1NDQsIDEyNjQ2NiwgMCwgCi0gICAgNDE0NDQsIDY1NjIxLCA2OTk1NSwgOTE5NywgNTI0NiwgMTE5MTA2LCAxMzE4NSwgOTcwOSwgMTIwMzIzLCAxMjAzMjIsIAotICAgIDEyMzE0LCA2NTYxNiwgNTIzOCwgMTE5MzMzLCAwLCAxMTkzMzcsIDUyMzYsIDQwOTc5LCAwLCA3NDIwMSwgODI4NiwgCi0gICAgMTI4NTM3LCAzOTM2LCAxMTkzMzEsIDExNjk5LCA0MTM0NywgMTI3MjQ5LCAxMzIzNSwgODg0MiwgNDEyNDgsIDAsIDQzNzksIAotICAgIDEzMjM5LCAxMjY5MiwgNzk2OSwgMTI3MjY2LCA3MjE5LCAxMjcyNTAsIDEyODI1MSwgMTIwNTA5LCAwLCA2NjIyNCwgNzM0LCAKLSAgICAyOTc5LCAxMjAzMDMsIDY1NjE5LCA5ODcyLCA5NTcsIDY0OTIxLCAxODQ2LCA2NjYzMSwgNDE0NzcsIDExOTI1NiwgCi0gICAgMTIwMzEwLCA3NDUxMSwgNDE3NzAsIDE2NzAsIDY0NDIsIDEyMDMxNywgNDI0NDYsIDUzNzksIDEyMDMxOCwgNDExNjMsIAotICAgIDc0ODMyLCAxMjAzMTUsIDEyMDMxNCwgMTE1MDYsIDAsIDQyODQxLCAxMzI2NywgMCwgMCwgNDE3NzUsIDAsIDcxMzAsIAotICAgIDQxNzczLCAwLCAxMDY2MywgMCwgMCwgMCwgNjE1MSwgMTIxMTAsIDQyNjczLCA2NTU3MiwgNjUyOTMsIDY1MjUwLCAxMzI2NSwgCi0gICAgMTMyNjQsIDY0NTE4LCAwLCA2MTAwLCAwLCA5MjY0NywgNTgwOCwgNjU5MjIsIDAsIDEyOTY3LCA2NjA0MSwgNTYxMiwgCi0gICAgNDU4MywgMCwgMCwgNjgwOTcsIDY0NTc1LCAxMjY2MzcsIDExOTY1LCAwLCA2ODM1OCwgMCwgNjk3ODksIDAsIDkyMjYwLCAKLSAgICA2ODEwMiwgOTY5OCwgNzgxNCwgNzQ0NzYsIDExOTY1MSwgMTI4NTE0LCAwLCA0MTkyMSwgMTE4ODU4LCA5NzU2LCA2OTg1LCAKLSAgICAxMTkyNTgsIDc4NDkwLCA3NDIxOSwgMCwgMCwgMTE4OTk3LCA4MDEyLCA1Njc0LCAxMjM1MywgMCwgMTIzNjEsIDU2NzcsIAotICAgIDU1ODgsIDAsIDQxOTI1LCAxMjgxMjQsIDQxOTIwLCA1NjczLCAxMjA1MzQsIDU2NzYsIDQxOTIzLCAxMjY5NCwgMTE4OTc4LCAKLSAgICA1NjcyLCAxMjk0LCAwLCA3ODA1OSwgMCwgNDI1MTEsIDE3MjcsIDEyMDcyNSwgNDI0MzYsIDAsIDAsIDAsIDc0MjIyLCAKLSAgICA4NzE4LCAzNTUwLCA3MzYsIDEwMjY4LCA0NTA1LCAxMDMxNiwgNzQwOTAsIDU4MjYsIDU1MjMyLCA1ODEzLCAwLCAxMjA3MTIsIAotICAgIDU4NDEsIDU4MzcsIDU1MjM0LCAwLCAzMTA1LCAxMjgyOSwgNTgzOCwgNTc5NiwgMCwgMTE5NTkyLCA1NzkzLCAwLCA1ODY2LCAKLSAgICA1Nzk3LCA0MTAxMSwgNTg2NSwgMTIwMDkxLCA3OTU2LCA1OTgsIDAsIDY0NjQ5LCA1ODA2LCA0MjM5OCwgMCwgOTAzNywgCi0gICAgNTY3MSwgMTIwMDQxLCAwLCAwLCAwLCAxMjg4NTUsIDAsIDg0NywgMTI4MjQyLCA5NTI5LCAwLCA2NjY1NywgNjk4MCwgCi0gICAgNzg0ODMsIDEyMDAzNSwgNzg0ODQsIDk4MzQ4MywgMCwgMTIwMDMzLCA3ODQ4NiwgMCwgMCwgMTIwMDM5LCA0MjY4MywgMCwgCi0gICAgOTgzMDU1LCA3MTE0LCAwLCAwLCA0MzE5MCwgNjU0NjMsIDE1NTQsIDAsIDQyNjExLCA0MjU2MywgMCwgNTY1MSwgMjkyOSwgCi0gICAgNjc5MiwgNDMyMDEsIDAsIDE5OTYzLCA1Njk4LCAwLCAwLCAwLCAwLCA1NjQ0LCAxMDI5MiwgNjU1NDYsIDY5NzI3LCAKLSAgICA2ODE0MSwgODM3MiwgMCwgNjUxMTYsIDAsIDEyMDAyMiwgMTAxNzUsIDEwMzg4LCA0Mjc5OSwgOTQxMDAsIDQxMDEzLCAKLSAgICAxMDU2OCwgMCwgOTgzNjE4LCAyODY5LCAwLCA0MTAxNSwgMTk0NjkyLCAyNzg1LCA0MzY2LCAwLCAxMDk1NCwgNDE4MDIsIDAsIAotICAgIDQyNjA4LCA3ODQ2OSwgOTg4NCwgNDc1OSwgMCwgMCwgMTAyNjYsIDQxMzU5LCAxMTcwLCA0MzM2NSwgNjk4MTAsIDczOTA4LCAKLSAgICAxNjA5LCA5MDIsIDAsIDYzOTM2LCAxMjg4NzUsIDExNjYxLCA4MTIyLCA1ODE4LCAwLCAwLCAzODYxLCA5NTQwLCAxMTAyOCwgCi0gICAgMjU1NCwgNTE1OCwgNTcxNCwgMjIxMywgMCwgMCwgODA3LCA0MzA3OSwgMCwgNzg0NzUsIDk3NiwgNTUxMSwgNjQ1NTMsIDAsIAotICAgIDQyMTU1LCAwLCA0MTM1NiwgNzQxMTAsIDExODgwMSwgMTI2NjE0LCAwLCA4Njc2LCA5ODMyODMsIDAsIDU1ODIsIDQ1MSwgCi0gICAgNjM5NDEsIDU3OTgsIDkzNDksIDQyMDE4LCAxMjc4NTgsIDAsIDAsIDQzNjA5LCA1OTA2LCAxMjA1NTMsIDE0NDAsIDAsIAotICAgIDEyODg1MywgMTIwMDE2LCA3NDI4MywgMTEwMDUsIDAsIDY2NjU2LCA2NjA0NCwgMCwgMTk0Njk4LCAwLCAwLCA0MzM5MywgCi0gICAgMTAwOTQsIDAsIDExNTI5LCAxMDg1NywgMTIwNjQzLCA2NjQzNiwgNjU0NiwgOTMsIDgxMDIsIDAsIDY4NDA1LCAwLCAwLCAKLSAgICA4MTcxLCAwLCAxMTkwOTcsIDEyNzA2NCwgOTE3NTQzLCAzODMsIDcxNTQsIDQxNjU2LCA5MjYzNCwgOTQwNDAsIDAsIDUxODcsIAotICAgIDcxMjk2LCAxMjcyNzcsIDExMjg2LCA2ODYyMCwgNjQyMTcsIDAsIDUyMzIsIDAsIDQxMDA5LCAwLCA0MTAwNSwgMCwgMCwgCi0gICAgOTgzODE4LCA4MjkyLCAxOTUwNzQsIDQ5ODAsIDg4NjAsIDczOTQ3LCAxMDAyOCwgNjUyOTEsIDcwNzYsIDEzMTgyLCAKLSAgICAxOTQ3MDUsIDAsIDAsIDEwNjMxLCA2NjAzMSwgNzk3MiwgMCwgNzg3ODUsIDAsIDc5MDAsIDAsIDExMzA5LCAzODA2LCAKLSAgICA0MTk4LCA0MjcyNSwgMCwgNjc2NTYsIDk5OTUsIDAsIDkyNTUyLCAwLCAxMjkzMSwgMCwgNDI2ODQsIDc0Mjg1LCAyMDg4LCAKLSAgICA2NDIxMywgNjQzNjYsIDY1MTU2LCA4ODE0LCA0MjIzOCwgNzQ3NzEsIDAsIDAsIDEyODM2LCAwLCAwLCA3NDM0MiwgODU5MywgCi0gICAgMCwgMCwgNjg0NDUsIDEzMjU1LCAwLCAwLCA3NDY0LCAwLCA2NTg2NSwgMCwgMTk0NjUwLCAxMjcxNDQsIDAsIDkzNDIsIAotICAgIDEyMDQ2NCwgMCwgNjQ1MTYsIDAsIDc4NzkyLCAxMDEyOSwgNDEwMDcsIDc0Mzc1LCAwLCA0MDk5NSwgMTIyMDksIDQxMDEyLCAKLSAgICAxMTkxMzYsIDAsIDAsIDY5NzI0LCA0MDk5MiwgOTIyNjQsIDEyNzE1MywgNjg2NTMsIDQzNTU4LCA1NTIyLCAwLCA2MSwgMCwgCi0gICAgNzQxMDUsIDM2MzMsIDk4Mzg5MSwgNjUxNjIsIDQxMjM0LCAxMjA4OSwgNzgyODEsIDk3NzEsIDk4Mzg5NiwgMTMyNTEsIAotICAgIDEyODcwMSwgMCwgNjI2MiwgMjc4NCwgNDI3NDMsIDAsIDgxMjYsIDY2NDgzLCAwLCAwLCA0NDEsIDQyNjIxLCAwLCAwLCAKLSAgICA0MTAwMiwgNDA5OTksIDExOTYyMywgNDMyNjYsIDcxMDgsIDE5NDc3OSwgMTA4OTAsIDc0NDgxLCA2NTgzNCwgODMyNCwgCi0gICAgMTE5MTAzLCA2NDQxNywgNzQ4MTcsIDEyNzQ2NSwgNjQ3MzcsIDAsIDk4MzY1MCwgODkzMCwgNjY2NzgsIDc0MjQ5LCAxMTkzLCAKLSAgICAxMDA1NiwgMTgwMCwgMTMyNTMsIDEzMjUyLCA3ODI5LCAwLCAwLCA3NzQzLCAwLCAwLCA3NzkwNCwgOTI2NDAsIDc3OTA1LCAKLSAgICA5MDM0LCA2MDM5LCAwLCAxMDA3NSwgMCwgNDEwMTgsIDY1NjgzLCAxMDMzOCwgNjY0NjksIDAsIDAsIDAsIDQyODE1LCAwLCAKLSAgICA0MTk2NiwgMCwgMTI3NDcxLCAwLCAxMTc5MiwgNDMwNjQsIDQxMDI1LCA5MTEsIDc1MzksIDAsIDAsIDEyMDMzOSwgNjUxNTksIAotICAgIDY0MzkwLCAwLCAwLCA1NTIwLCAxMTY2MiwgMCwgNjUzMzAsIDQyODEyLCAwLCAwLCAxMjMyNiwgOTgzODQ3LCAwLCA0MjgwOCwgCi0gICAgMTI4MzM3LCA5MzQ4LCA2NDkwMSwgOTgzODUyLCAwLCAwLCAwLCAwLCAwLCA5MTc1ODQsIDQzNzAyLCA5ODM1NzYsIDU4NTcsIAotICAgIDY1MzQyLCA5MjcyNywgMTE5MTIwLCAxMjAwNzksIDg2NDQsIDAsIDAsIDAsIDc0Mjk2LCA0MTkwOSwgMCwgMTIwMzMyLCAKLSAgICAyNzkxLCA2OTY2MywgMTg5MSwgNjk4MjQsIDAsIDQxOTA3LCA2NjY0NywgMTE4OTM5LCA4NzYxLCAxMjk0MiwgNTc0OCwgMCwgCi0gICAgMTA3NzMsIDAsIDAsIDg3OTYsIDc4MTQ5LCA2NDEyLCAyMDYxLCA4NTIwLCAxMzE0NiwgMTI3MTg1LCA2MzkzMSwgMCwgCi0gICAgNjU5MDIsIDI4ODIsIDAsIDAsIDEyODQzLCA0NTIwLCAxMjAzNDUsIDkyNDU5LCAwLCA5ODM2NTEsIDAsIDczODYwLCAwLCAwLCAKLSAgICA2NDM0NSwgMCwgOTIwMSwgMTI4MzE0LCAxOTQ5NDAsIDAsIDAsIDQzNjc5LCA5MTc1ODUsIDY1MTE3LCA5MjI3MCwgMCwgCi0gICAgMTA0MjcsIDAsIDM4NDQsIDEyMDY3NSwgOTc1NSwgMTExMCwgNjYxMiwgMTIyMjIsIDAsIDEyODc4OSwgMCwgMCwgNzgzLCAKLSAgICAxOTQ5MzUsIDAsIDAsIDk4MzA2NCwgMTk0NzIwLCA2NTA1NiwgMzYyMCwgNDExODAsIDY4Mzc4LCA0NTU2LCAwLCAwLCAKLSAgICAxOTQ5MzMsIDc0MjUwLCAwLCA2NzY1NywgMTA1MTAsIDQzODIsIDY2NDgyLCAwLCAwLCAxMjc1MjcsIDkxNzcsIDg5MDIsIAotICAgIDkzOTU4LCA5ODM5LCAwLCAxMjg5MSwgOTgzNzQ2LCA5ODM2MjcsIDYzOTk5LCAyMDE2LCA0MTkxNywgOTc4OCwgNjM5MjgsIAotICAgIDAsIDE4NjIsIDY1ODAwLCA5MTU1LCA2NjYyMywgOTc4NiwgNjUwODIsIDQxOTE5LCA4NTc5LCA0MTkxNCwgNzk4MSwgMCwgCi0gICAgNjYwMTcsIDQ1MDgsIDY0ODgzLCA5MjQ1NiwgOTI1MjIsIDEyNzgxNCwgMCwgNjQ1OTIsIDc0Mjc2LCAxMjAwODAsIDY3ODQsIAotICAgIDc4Nzg4LCA2ODE4MSwgMCwgMCwgMCwgMTI3NTM0LCAxMjE0NywgOTAyNCwgNjYzNzgsIDY2NDcyLCA5ODM5MjAsIDY0Mjg5LCAKLSAgICA2NTI4OSwgNzgxNTEsIDY2NjU4LCAxOTQ5MjksIDY0NTA5LCA3ODE1MiwgMCwgMTI2NTA1LCAxMTA1MSwgOTgzMjg4LCAwLCAKLSAgICAxMTM1NSwgNjU4ODUsIDAsIDEyODMxMCwgNDEyMTQsIDAsIDEyMjk5LCAwLCA3NTAwLCA0NTA2LCA3NzczLCAwLCAwLCAKLSAgICA5OTYzLCA2ODY0OSwgMTI2NjA5LCA0MDQwLCAxMjA1NzAsIDYxNjcsIDAsIDYzOTIyLCA2NTk0LCA5ODM3MzEsIDAsIDAsIAotICAgIDM2MjQsIDQzMDM2LCAwLCA2Mzg3LCA2Mzk5MCwgMTk5NDcsIDYzOTg4LCA0MTk1NSwgMCwgNjM5OTMsIDEwNDQwLCA5NjExLCAKLSAgICA2NTYwNSwgNjgwMywgMCwgNzczOCwgNjM5ODYsIDExNDQ2LCA2Mzk4NCwgOTI2NDEsIDM0MzUsIDc4MTY0LCA0MzgxNCwgCi0gICAgNDM4MTAsIDcwMjksIDY0MjU4LCA0MTI5MiwgMTE4ODk4LCAxMjc0OCwgNDI3NDIsIDk1MTcsIDExNTE4LCAwLCA3ODc5MCwgCi0gICAgMCwgNjc5OTMsIDYzOTU2LCA0MjQ1OCwgNjM5NTQsIDYzOTUzLCA2Mzk2MCwgOTU5MSwgNDUxNiwgMTAyMTcsIDY4MzcwLCAKLSAgICAxMTQ2OSwgNjk2OTcsIDQyMzA2LCAyNzIzLCAxMTg5NDcsIDAsIDAsIDAsIDAsIDAsIDExMzk3LCAyODgwLCAwLCAwLCAKLSAgICAyODcyLCAwLCAwLCAzNDk4LCA0Mzc4LCA5MTc1MzksIDQyNzAsIDAsIDY1NTUxLCA2ODIwNSwgNjYzMywgNDMzODcsIDAsIAotICAgIDUyMzAsIDAsIDAsIDAsIDAsIDAsIDgxNjEsIDM5MywgMTIwMTMsIDAsIDAsIDEyNjQ3OSwgNDE1LCA2Mzk2NCwgNjM5NjMsIAotICAgIDQyMzQ1LCA5MjMxMCwgNTE4MywgMTg3NywgNDI0OTgsIDAsIDI5MjcsIDAsIDYzOTYxLCA0NDcyLCAwLCAwLCA3ODE1OSwgCi0gICAgNjk2OTksIDkxNzkzNiwgNDIzNDAsIDQ3NTYsIDEyODA3OCwgNzA4MSwgMTA3MzAsIDc2OTEsIDEwMzMxLCA2MzgzMCwgCi0gICAgMTE5NjI1LCA0MjkyMiwgNDIxMDMsIDg2MjgsIDk4MTMsIDAsIDQyNDUzLCAxNjA0LCA5NTY1LCAxMDUzOSwgNjk3MDEsIAotICAgIDY1NzY0LCA0MTQxNSwgNjU3NjcsIDAsIDg0NTcsIDQyMzAxLCAxMTM3MiwgNjQ4NzMsIDExOTkyLCAwLCAwLCA2Mzk4MCwgCi0gICAgMTE4MDEsIDM2MjIsIDk4MzEyNCwgNjQzMzYsIDEyMDE3LCAxMDQ2MywgNjM5ODEsIDQ5NjcsIDY0MTg5LCAxOTY2LCAKLSAgICA0MzYyOCwgMCwgOTgzMjg0LCAwLCAwLCA2Mzk3MSwgNDM0NywgNDQxNiwgNDIwOTgsIDExMDA5LCAxMDY5NCwgNjM5NzMsIAotICAgIDQwMiwgMCwgMTMxNDcsIDEyODY5MiwgNDIxMDAsIDY0NjQ2LCAxMzIyOCwgMCwgNDE4NzUsIDM1MTUsIDc0MjUyLCAxMTgwNSwgCi0gICAgMCwgMTEzMDIsIDYyNTksIDQzMzk1LCAwLCAwLCAxOTQ2NzAsIDAsIDkyMzUxLCAwLCA3NDQyNSwgMTEyOTksIDE1NjEsIDAsIAotICAgIDkyMzU5LCA2NDk0MiwgOTgzNTU5LCAxOTQ3MzMsIDk4MzY3NywgMTk0NzMyLCAwLCA3NDMwMSwgMCwgMTEyODAsIDAsIAotICAgIDY5Nzg0LCA3NDA2MCwgMCwgMCwgMTE5NjY0LCA1MTQ1LCAxMjQ4NiwgNjUwMTgsIDY2NTE2LCA1NDA5LCAxMjczNzksIAotICAgIDE5NDY2OSwgNzQwMiwgNTM5OSwgOTY4NSwgNzQwODksIDc5NTIsIDU0MDEsIDAsIDY2NjE2LCA2ODQyMSwgOTgzOTEwLCAwLCAKLSAgICA1NDA1LCAxMjc4NzUsIDY0ODY2LCAwLCAxMTk1ODMsIDEyODM0NSwgNzg3ODQsIDc0MjQ4LCAxMTMzMCwgMTk0NzIzLCAKLSAgICA2NDY5MCwgMzI1NCwgMCwgMCwgMTI4MjA3LCA0MjM5MCwgNDM2NzgsIDE5NDcyNSwgOTgzOTAwLCA2NTA3NywgMCwgNjM4OCwgCi0gICAgMzM1NSwgOTUwOCwgOTg2NywgNTcyMywgMTE1MjAsIDU2MTEsIDAsIDMzNzcsIDAsIDAsIDAsIDAsIDc4MjI4LCAwLCAKLSAgICA5ODM3NTMsIDQyNjkxLCA5MTc4ODYsIDEyNzE5OCwgNzQ3NjcsIDAsIDEyNzA3NSwgMTM3OSwgMjQ2LCAwLCA5ODM3NTIsIAotICAgIDM3ODgsIDk4MzEwNiwgMTEwNDEsIDkyNTQ5LCA2NjMwNCwgMCwgMCwgODkxNywgNDI0MDMsIDMwMSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTgzNjg4LCAxMDY1NiwgMCwgNjUyMTQsIDExOTI0MiwgNDI1NjcsIDkyMjE3LCAxMzE2MywgOTgzMjAyLCAxMjA4MzEsIAotICAgIDc0NTk3LCAzMTgyLCAwLCAwLCAwLCA2NTAzNCwgNjU4ODksIDQyMTY5LCA0NzU1LCA3NDI0NCwgMTk0NjIxLCAxMTQ0MywgMCwgCi0gICAgNjYzMTksIDc0NTk4LCA2MDgsIDYwMCwgMCwgMTIxOSwgMzkzNCwgNjQyMDYsIDExNDgzLCA3NDUxMCwgMCwgNzQ0ODUsIAotICAgIDQyNDQyLCA2NTQ3MCwgOTgzODk4LCA2NDIwMiwgMTMxNjAsIDc3NTksIDQyNDgyLCA0ODUsIDEyODAwNiwgMCwgOTgyOCwgMCwgCi0gICAgMCwgNDIyODAsIDAsIDkzNTEsIDc3NzgsIDY0Mzc5LCA3NDk2LCA0MjQzMSwgNjkxNiwgMTIwOCwgMCwgMTE5NjMxLCAKLSAgICAxMTAwMiwgNDI0NzAsIDAsIDExODk0NiwgMCwgMCwgNzQwNDEsIDAsIDcwMDQ1LCA0MzUzOSwgNTQxMSwgNDIxOTYsIDAsIDAsIAotICAgIDAsIDkxNTAsIDAsIDQyMzkzLCAxMzA4NiwgMTMxMCwgMTk0Njg3LCA5MzM3LCAxMjA1MiwgMTA2NDMsIDU1MjcxLCAKLSAgICA5ODMxNzksIDEyMTY2LCAyNTQ2LCAxOTQ2ODMsIDIxMywgMTE4ODUyLCA2NTYxMSwgMCwgMCwgMTk0NzU2LCA3NDMxMCwgCi0gICAgNjU1NCwgMCwgMTE5MTQsIDU0NTIsIDAsIDAsIDAsIDAsIDAsIDE5NDY4MSwgOTI1NjAsIDI3MTMsIDAsIDk2NTAsIDQzMzMwLCAKLSAgICAwLCAxOTQ2NzUsIDE0MDYsIDAsIDAsIDkyNjU5LCAwLCA2ODIyMywgNDE0MywgMTk0Njc3LCAwLCA2NTc0OCwgNDE0MSwgCi0gICAgOTY4MiwgNjUyODcsIDE1MDgsIDEyNzAxMywgODc3OSwgMTA1NjksIDg3MjUsIDEzMjk5LCA2NjYzOCwgNjU3NTAsIDQyMjYzLCAKLSAgICA0MTQ1LCA2MzgwLCA2NTc1MSwgNjY2MTMsIDQzOTk0LCA2NTczOCwgNTUyNTAsIDkxODUsIDk1NTAsIDAsIDQzNDAzLCAwLCAKLSAgICAwLCAwLCA2NTczNiwgNDE5NTEsIDY0ODE2LCA2NTc1NiwgOTgzMjAzLCAxMjk1NSwgMTA1OTYsIDI4ODgsIDE5NDY0NSwgMCwgCi0gICAgMCwgOTY1NywgOTAxOSwgMTk0NzY2LCAwLCAyODc4LCA1MzkwLCAwLCAxOTQ5NjEsIDAsIDY4Njc5LCA0MzU1MiwgNzUwMSwgCi0gICAgNjMyOCwgMCwgMTA0MjksIDEwMzY1LCAwLCAwLCA0MTk0NiwgNzUwMywgNTIzNSwgODAzLCA2ODM4MSwgMCwgMCwgODk4NiwgCi0gICAgMTI2NTQyLCAxMDYzMiwgMTE5MzQsIDExNDUyLCAxMzMyLCAwLCAwLCAxMjY2NDcsIDAsIDExODg4NywgMTc5MSwgNTE5MSwgCi0gICAgOTI4OCwgNjQ4MjIsIDI4OTIsIDAsIDQzMzk0LCA1NTUsIDAsIDAsIDY2NjQ2LCAwLCAxMTkwMDIsIDEzMTUxLCA3NDUxMiwgCi0gICAgNzI4OSwgNzQwNTUsIDY0MTYxLCA4ODU0LCA2NDE2MiwgNTg1OCwgNDE5MjcsIDEwNTgyLCAwLCAxNzg0LCAxMzYxLCAKLSAgICAxOTUwNDcsIDAsIDc5MDUsIDAsIDY0ODY4LCAxMjg4MTMsIDEzMTU4LCA5MjE2NiwgNzIxMSwgMCwgOTM3MSwgNzM5NzMsIAotICAgIDkxNzU1MywgNjgyOCwgMTYyNSwgOTIzMDIsIDAsIDEzNDIsIDY4NDQwLCA2NDE3MSwgMTI2NzA0LCAxMDkwMywgOTgzNDg2LCAKLSAgICAwLCAwLCAwLCAwLCA0NDgyLCA0MTYwNiwgMCwgMTI4NTY5LCA5ODMxMTIsIDAsIDY0MzgxLCAwLCAwLCAxOTUwOTAsIAotICAgIDQyMjQ1LCAxMjY0NjcsIDQxOTcyLCAwLCA0NDQsIDAsIDkxMjcsIDY2Njg3LCA2NjYxOSwgMTI2NDg5LCA3ODAyNSwgMCwgCi0gICAgMTEzNDksIDQwOTkxLCA5MTc1NzAsIDAsIDExOTU5OSwgMTIwODMwLCAwLCAxMTk3LCAxMjgyODIsIDExNDksIDE5NDk3MCwgCi0gICAgMCwgMCwgNDA5OTAsIDQzNzY1LCAwLCAzNDkyLCAwLCAxMjc5NDIsIDAsIDAsIDAsIDEyODM4LCA5ODM5NjksIDE5OTQ4LCAwLCAKLSAgICAzMDk5LCAwLCAwLCA0MTA4NywgMCwgMCwgMCwgMTE5MDU5LCAxMjAzNiwgNDEzMDksIDAsIDAsIDgxNTIsIDAsIDQxNTUwLCAKLSAgICAxMjIyNywgOTgzNjEzLCAwLCAxMjgyOCwgMTI3NTExLCAwLCAwLCAxMjA3MDgsIDAsIDAsIDEwMzg2LCAxMTk1NzQsIDAsIDAsIAotICAgIDkyNjgwLCA5ODM3ODAsIDY4MTU0LCAwLCAxNzQzLCAwLCAwLCA5MjIzOSwgNjUxODYsIDkxNzU3MSwgMCwgOTYwNiwgMCwgMCwgCi0gICAgNjQ0MzksIDAsIDAsIDkyNjg2LCAwLCAwLCAxOTQ5NjcsIDAsIDAsIDMzOTUsIDkzNjIsIDEwODc4LCAwLCAwLCA3ODM2MiwgCi0gICAgNjQ4MzAsIDAsIDEyNjU1NywgNDEwOTEsIDM0MjYsIDEzNDQsIDg4NzAsIDAsIDAsIDQ3MzUsIDEyNzAxNywgNjExOSwgCi0gICAgMTI4MjIsIDQyNjk5LCAwLCA5ODM4MTUsIDc0ODE4LCAxNDIzLCAwLCA0MjYzNywgNDEwODAsIDAsIDEyMDM5LCAxMDU1OSwgCi0gICAgMCwgMTE4ODkyLCAwLCA5NDcyLCAwLCAxMTkyOSwgMCwgNzE3MCwgOTU5NiwgNjEzMCwgMTI4ODI2LCA0MzYyOSwgMTE1NzksIAotICAgIDc4NzEzLCAwLCAxOTQ3NDAsIDEyODY5MSwgOTIxODUsIDY2Njk5LCA2NDQ0MCwgMTAwNCwgOTI1ODQsIDE5NDczNywgCi0gICAgNDMyMzQsIDY2MDA4LCAxMjYyNywgMCwgNjg0MTQsIDAsIDQzNjE5LCA0MzMwMywgMTEzMDAsIDQzMzA0LCA5Njg2LCA1ODkwLCAKLSAgICAxMTc3NiwgNzU1OCwgMTI3MTU4LCA2NTYyNywgMCwgMTA3MTgsIDEzMTU0LCAzNDYxLCA5MTM5LCAwLCAwLCAwLCAwLCAKLSAgICA2NTM2NSwgNzM4NzcsIDY1NjI4LCA3ODAxOSwgMTIwMzE5LCAwLCA0MTcwOCwgMTI4NjAsIDI2NDEsIDEyMDY5LCAxMDgzOCwgCi0gICAgNTQwMywgMTAzNTIsIDcwMDg1LCAxMDA2MSwgNDMyMzcsIDAsIDUxNDAsIDIwOSwgMTI4ODQ3LCA0MTcwNCwgNDEwNTYsIAotICAgIDQzMDc4LCAxMjgxMjUsIDExODgwOSwgMCwgMTA4OTksIDY1NDY5LCA5MjM2MiwgMCwgMCwgMjQxMCwgOTkzLCAwLCAKLSAgICAxMjA1ODksIDEyMDY4OSwgNzg2OTMsIDAsIDAsIDcyMzIsIDAsIDExOTI1MywgMCwgNzExMCwgNzQ0NjIsIDIwNjYsIAotICAgIDEwNDg5LCA0MjE2NiwgNDM0NjMsIDEwNjU5LCAzNjAwLCAwLCA0MjI0LCAxMzM2LCA0MTUxOCwgMCwgMCwgMCwgMCwgCi0gICAgNDExMzksIDY0ODIwLCA5MjUzOCwgMTI5NjYsIDQxMTM0LCAwLCAwLCAwLCAwLCAyNzIsIDQyNjMsIDg3OTMsIDAsIDAsIAotICAgIDQxNTAyLCAwLCA5ODMsIDEyNTQ5LCAwLCAwLCAxMTkwLCA0MTA5LCAxMzM1LCA4NDEsIDU4ODgsIDQxMzU4LCA2NDg2MywgCi0gICAgOTU0NCwgNDM0ODEsIDAsIDE5NDgwNiwgNzAwMjcsIDIwOTksIDUxMjAsIDI0MDksIDc3OTksIDAsIDc0NDI0LCAwLCAwLCAKLSAgICA0NzMxLCAwLCA2NjYyOSwgMCwgMCwgMTI1NSwgNDE0OSwgOTI0NywgMCwgOTkxMywgMCwgMCwgNjQ5MTQsIDkxNzc4NywgCi0gICAgNjUxMDEsIDAsIDExNjk0LCA5MjQ3NSwgMTE2OTAsIDU4MzUsIDEyNzE2NCwgNjY2MjUsIDEwODQyLCA0MTM1NCwgNDIxMjMsIAotICAgIDQzMDk3LCAxMTY4OCwgNjY2MzQsIDEwOTQsIDE5NCwgNjQ2OTIsIDAsIDgxODAsIDAsIDAsIDk5NzIsIDczODY1LCA0NTE5LCAKLSAgICA2MTE0LCAxMDg5OCwgNDMwNzIsIDAsIDAsIDkzOTYwLCA5ODMzMTQsIDEyNjU4MSwgMTA2OTUsIDAsIDc1NDAsIDAsIDg4MSwgCi0gICAgNzg1NywgNjA2NywgNjUxNjQsIDAsIDAsIDAsIDEzMzExLCA2ODQwMywgNDE4NTcsIDY0MzIxLCA4MzU5LCAwLCAxMjY4OSwgCi0gICAgMCwgMTk0NTk0LCAwLCA5ODMzMDQsIDk4Mzg3MiwgNjgxODMsIDAsIDk4MzMwNiwgMTI4NywgNTQzNiwgMCwgOTgzMzA5LCAKLSAgICA3NDE0MiwgOTIzMjgsIDc0MTUyLCAxMTkwNzgsIDYwNTEsIDEwNDk3LCA2OTY2OCwgODk4NSwgMTIxMDksIDk4MzMxNSwgMCwgCi0gICAgMTI3MjQyLCAwLCAwLCAzNjUyLCAxMDUzNywgMCwgMTI3NiwgMTIwNDQwLCA2NTQ5LCAyNzksIDczNzQ1LCAwLCAwLCAwLCAKLSAgICAxNDg5LCAwLCAwLCAwLCAzODk5LCAxMDA3LCA0MjEyNCwgOTgzNTU3LCA0MjEyMiwgOTIzMzcsIDkyMzY3LCAwLCAxMTk4NSwgCi0gICAgMTM0NSwgNzg2MDAsIDAsIDAsIDg5NTYsIDQzMDgzLCA5NDA1NywgNDIxMzgsIDc4NjEwLCAwLCAxMjE1MSwgNzg2MDgsIAotICAgIDc4NjA0LCA3ODYwNSwgNjI4NSwgNzg2MDMsIDc4NjEyLCA3ODYxMywgNjU5NDIsIDQ5MiwgODY4NSwgMCwgOTgzNzUwLCAwLCAKLSAgICA3ODYyMiwgNDM3MTIsIDI1ODIsIDExNDcwLCA2NDUzOCwgNzQ0NCwgNzg2MTUsIDc4NjE2LCAyMjk3LCAwLCA3MzgzNywgCi0gICAgMTE5ODIzLCAyNTI3LCAxMTk4MjQsIDE5NywgMjc5OSwgOTI1OTQsIDQxOTQ0LCAxMjAyNzYsIDk5MzMsIDAsIDY2NTE1LCAKLSAgICA3NjcsIDU1MjQsIDcwMjgsIDAsIDAsIDExOTgyNywgMTE5ODE3LCAxMTk4MjgsIDc4NjMzLCAxMDg5NiwgMCwgMTc5OSwgCi0gICAgMTIwNDk3LCA2OTcxLCA3NDMzNiwgMTI4MzQyLCAwLCA2NTM0MCwgMTE4OTc5LCA0MTU1MSwgMjQzNCwgOTQwMTgsIDAsIAotICAgIDEyMDU3OSwgMCwgNDYzMSwgMCwgMCwgNjQwNywgMCwgNjMzOCwgNDMyMTQsIDAsIDc1NzAsIDAsIDMxOTIsIDAsIDg0MTQsIAotICAgIDAsIDkzOTgzLCAwLCAwLCAwLCA5MTY0LCA2NjYxMiwgOTM5NTksIDMxNzEsIDY2MjMsIDQ5NjEsIDY4Mzk2LCA4ODYsIAotICAgIDU1MjE2LCA4NjU0LCA3ODgzMiwgOTk5MywgNzQzOTAsIDY0NjAzLCA3MDA2NiwgNjkyNDEsIDk1OTksIDc4NjI5LCA0MzA4NCwgCi0gICAgNzg2MjcsIDc4NjI4LCA3ODYyNSwgMjM5OSwgNjk2OTMsIDg5OTQsIDEwOTQ0LCA0MTIwOCwgOTgzNzA0LCA0MTE2OCwgCi0gICAgODE3OCwgMCwgMzM2NywgOTIzMzQsIDQyNTEwLCA3ODY0MSwgNzg2MzYsIDY4MDQsIDc4NjM0LCAxOTQ3LCAwLCAwLCAKLSAgICA5MjY4MSwgNDI3NTksIDExMDY4LCAxNzA1LCA5MzMxLCAwLCA3NDc5OCwgOTE4MSwgNjUzNTksIDAsIDgwMTcsIDExOTgzMSwgCi0gICAgNjUwOTYsIDY2NzIwLCAwLCA0MzQ3NSwgMCwgNDkwOSwgMTIxMjYsIDEyODY3MywgMTIwNjk2LCA0OTA0LCA5ODMzMjUsIAotICAgIDY5NjUwLCAxMzY1LCA5MjUzLCA0Mjc1NywgNDM0MzYsIDc0NjIsIDAsIDAsIDAsIDAsIDExOTU4NywgNjQ0MTUsIDAsIDAsIAotICAgIDUzOTgsIDAsIDEyNzM4NiwgOTM5NTMsIDAsIDAsIDExOTAxNSwgMCwgMCwgOTQ3NiwgMCwgOTgzNzY4LCAxMjc2MywgCi0gICAgMTI2NjAzLCAzNjI5LCAwLCAxMzAwNSwgMCwgMzYyOCwgMCwgMCwgOTI1MDIsIDM0NjksIDQyMTA3LCA0MjExNiwgOTE3NTc4LCAKLSAgICA2NDgwOSwgMjkyOCwgNDkwNSwgOTg1MywgODUxLCA5MDQwLCAwLCA2NDY2NSwgNDMwODYsIDkxMTQsIDAsIDQyNTgzLCAKLSAgICA5MzE1LCA0ODIyLCA0OTA2LCAzODUyLCAyODQ3LCAxMTk4MjEsIDMyMzYsIDExMzE3LCAxMjUxLCA3Nzc3LCA0MTg1MiwgCi0gICAgMTE0MTAsIDEwOTY0LCAwLCA0MzIyMiwgMTI2NDYsIDEyMDI2OSwgMTAyNTksIDk4NjUsIDY1ODIxLCAwLCA2MDE4LCAKLSAgICA5MjI5MCwgMCwgMTIyNzYsIDAsIDY4MzcyLCAwLCA5MjI1OSwgMTE5MjQ0LCAwLCA5ODMyMjQsIDEwNDY3LCAwLCAyNDQzLCAKLSAgICAxMDkxOCwgNzgyMTcsIDExOTgyNSwgMTAwMSwgOTI0MSwgMTkyNywgMCwgMCwgNzM5ODcsIDEyNzg4NSwgMCwgMCwgCisgICAgMTE4OTA3LCAwLCAxMDQ3NCwgNDM0MjYsIDEzMjU3LCA0MjM1NCwgMTI4MDk5LCA5ODM2OTgsIDcwMDQ0LCAxOTUwNjUsIDAsIAorICAgIDg0MTMsIDk4MzgxNiwgMCwgNTY5MywgNzI3MiwgMCwgMTMyMDksIDY0NDcwLCA2NTgzMSwgNzQzNTAsIDE5NTA2MywgMCwgMCwgCisgICAgMCwgMTI2NjM5LCAxMjAwOTcsIDAsIDk0MDc4LCAxMjgxMzMsIDEyNzc2NywgNjY2MDgsIDMxMTEsIDQxODYzLCA4ODA0LCAKKyAgICA0MjkxMywgOTIxODcsIDcyNzAsIDAsIDY2NjA2LCA2NjI4LCAxMDc2LCA3NDMzLCAxNDM2LCA3Mzg0NCwgNTUyMjYsIAorICAgIDEyODM1MywgNjM5ODIsIDczOTMsIDEyODA3LCA0MzQxMywgNjM5MDYsIDE1OTgsIDYzOTA0LCAwLCAwLCA0MTcyOSwgNDQyMywgCisgICAgMTMwNywgMCwgMTA1MTUsIDQxNTg5LCAxMjg2OTgsIDAsIDYyMTgsIDAsIDE0MzAsIDAsIDAsIDEyMDYwNiwgNzg3NTQsIAorICAgIDU0MTMsIDc2MTksIDMyNTUsIDM0OTMsIDc0MDMyLCAxMTU0OSwgMTA3MzUsIDQxNzQzLCA3MzkzNywgNjgwMSwgOTgzNjMzLCAKKyAgICA0NTE4LCAxMDk5MCwgNjUwNzMsIDUxNjcsIDQ0ODEsIDM3NzEsIDEyMDE1OCwgMjcxMCwgMCwgNjkyNDMsIDQxNzI0LCAwLCAKKyAgICA0MzA3MywgNDE2OTAsIDEyNDc5LCA5ODM2MzUsIDAsIDAsIDk4MzgxOCwgNzAwNDYsIDE2MjgsIDEyNzE0OSwgOTgzNDg3LCAKKyAgICA5ODM3MzEsIDY1MjYyLCA2MzMzLCAxMDc4MywgNDIzMTUsIDAsIDYzODU1LCA5NDA1NiwgMCwgMCwgNTMzOSwgNzQzMjMsIDAsIAorICAgIDEzMDA0LCAwLCA0NDU3LCAwLCAwLCAxOTQ4MTgsIDAsIDU2ODQsIDg2NzgsIDEwOTE0LCAwLCA1Njg5LCA2NTgwNywgMCwgCisgICAgNjg0NjQsIDEyNjMzLCAxMjg3MCwgNjk3MDUsIDY1MTgzLCA1Njg4LCAxMTkyNiwgNjAzMywgNjMxMCwgNTY4NiwgMCwgCisgICAgNzQyNTEsIDAsIDEyMDY0NywgMCwgNTAsIDEwNTU4LCA5ODcxLCA0MjYxMiwgNDM2NTUsIDAsIDAsIDAsIDY2NDY4LCAwLCAKKyAgICAxMzI1OSwgNDQ0OCwgMCwgOTgzODQ1LCAwLCA3MDA0MywgNjc4NTMsIDAsIDEwNjQwLCAxMTUzOSwgMTE1MSwgMCwgCisgICAgOTE3NjA3LCAxMjc1NDQsIDEyNzA3OSwgMTk1MDUwLCAxMjc4NTIsIDAsIDAsIDAsIDEyNTAxLCA2NDYwNCwgMCwgMTE1MjcsIAorICAgIDExODg3MCwgODgxMiwgMCwgMTE1MzgsIDg2NzMsIDEyNjUwLCAxMTAyMCwgMCwgNjY0NjcsIDIxMDUsIDgwODcsIDc4MTYzLCAKKyAgICA2OTYzMiwgOTg5NCwgMCwgMCwgMCwgNDYzNiwgNTUyNjIsIDc4NTEzLCA0NTE1LCAyMzgyLCAwLCAxMjcwNTUsIDAsIAorICAgIDEyMDQ5NSwgMCwgMTI4Mjg0LCAxMjI3NywgMTk0NjI3LCAxMTk5NSwgOTI1NTMsIDAsIDEyMTU4LCAwLCA4NzQxLCAxMDE5NywgCisgICAgMCwgOTI0MjYsIDAsIDY1MzEsIDAsIDEyNzg0NiwgNDczLCA0MzQxNSwgMCwgOTgzNjUwLCAxODczLCAxMDg3LCAwLCAwLCAwLCAKKyAgICA3ODUyNywgNjY0MzksIDQzMjE4LCA5ODMxMjMsIDE5NDcxNiwgNzIzNywgMTI1MDQsIDc0MjgyLCAwLCA5ODM1NzEsIDAsIAorICAgIDk0ODksIDAsIDAsIDQzODQsIDc0MjIwLCA2Mzg0NSwgMjA1OCwgMTI4ODYzLCAxMzI5NSwgNDMxOTEsIDEyODAzMCwgMCwgCisgICAgMTE1NCwgMzg1NywgMTIwNSwgMCwgMCwgMTMxMDAsIDEyOTU4LCAxMjA3MDYsIDc0MTY4LCAwLCAwLCA0NDIxLCAxMDU5MiwgCisgICAgMCwgNDk1LCAxMTkwMDcsIDQxNzEyLCA3OTgzLCAwLCA5Mzk5NywgMCwgNjM0NywgMTIwMTY1LCA3NjU0LCA0MTcxMCwgCisgICAgNDE5NiwgMCwgNDM3LCA0MTcwOSwgNzM3NzIsIDAsIDAsIDk0NjUsIDEzMjkwLCAxMTkxODAsIDQ5OTcsIDY0MzA2LCAwLCAwLCAKKyAgICA0OTk5LCAxOTQ2NDIsIDAsIDEyNjU4MiwgNDcxMSwgMTIwNzY5LCAwLCAyNzM5LCAwLCA4MDQ0LCA3NDgzNCwgMTk0NjQzLCAKKyAgICA0MTc4OSwgMTI4MTQyLCAxMDgwOSwgMCwgMCwgMCwgMTc3OSwgNjYwMCwgNjYwMSwgNDE1NDMsIDUzMjUsIDY0MiwgNjQxODcsIAorICAgIDEzMDU4LCAxMjA0NDksIDEyODc1LCAwLCA5MjE4NiwgMTMyMjksIDAsIDEwNTc1LCA0MzM5OSwgMCwgMCwgNDE3OTEsIAorICAgIDExMDQsIDAsIDAsIDEwNjU1LCAwLCAwLCAwLCAwLCAxMDgyLCAxOTUwNDksIDg0MjgsIDY1NjksIDAsIDAsIDAsIDY5ODQ5LCAKKyAgICA2NzgzLCAwLCAxMjk5MywgODA0OSwgNDE1NDgsIDQ0MDIxLCA2NDU4LCA5ODM4MDcsIDEyODg4MiwgNDc2MSwgNjM4MjgsIAorICAgIDQ3NjYsIDY0NjIzLCAxMjczLCA0MzQwNywgMCwgMTE4ODc2LCAxOTUwNDUsIDY5MTIsIDEzMTMsIDYzMjIsIDEwNDgzLCAKKyAgICA5ODM2MDMsIDQxNTQ1LCAwLCA5MjQ0OSwgMCwgMCwgMCwgMCwgNzg2MjQsIDM0ODQsIDc0MzM3LCAwLCAwLCA4NTAzLCAKKyAgICA1MTIyLCA0MTUyNywgMCwgNjYzMjAsIDk4MzgxMSwgMCwgMCwgMCwgNDE1MzcsIDY5NjgzLCA4MzAzLCA4MjgyLCAxMTgxNywgCisgICAgNzM4NTcsIDEwMDAzLCA3Mzg1OSwgNjU5MDQsIDczNjMsIDE2ODYsIDAsIDc4NDA2LCAxMTQ2NywgMzY2NCwgNjU5MjEsIAorICAgIDY0Mjk5LCAxOTQ2NjQsIDAsIDAsIDQzMjQsIDEyNiwgNDIyNDYsIDExOTE1MiwgMCwgNzQzNzgsIDY1OTI2LCA3NzQ0LCAKKyAgICAxOTQ2MzYsIDc0Mjc3LCA3NDMwMiwgNzgwNTIsIDQzODE3LCA2OTY2LCA0MzgyMiwgODEzNiwgMCwgNjU2MDAsIDE2MzMsIDAsIAorICAgIDAsIDQ3NjIsIDExMDMsIDAsIDAsIDQ3NjUsIDk4MzQ5MiwgMTMwNzgsIDAsIDQ3NjAsIDYzODI3LCAyMDUwLCAxMDg3MSwgCisgICAgNDMxOTksIDExMDIsIDAsIDQyMjM2LCAxMjg4NjcsIDE5NDY2NywgMTE1NDYsIDc0Nzk0LCAzMzcsIDAsIDQyNTkxLCA4NjI3LCAKKyAgICAxMjI3OSwgMTExMSwgMCwgOTIxNjEsIDQ3MDcsIDY4MjA2LCAxMDE0MywgNzg4MywgMTI3MDgxLCA3ODgwLCA0NTIyLCAKKyAgICA4NjQ1LCA1NzA0LCAxMzAxMCwgMCwgODMwNCwgOTE3NTYxLCAwLCAxMTk1NzUsIDIyOTMsIDAsIDY2NjU0LCAwLCA5MjY3NiwgCisgICAgMCwgMTMwMDgsIDAsIDQzODUsIDAsIDEzMDExLCAwLCA5MjU2OSwgMTE5MTYxLCAxMzAwOSwgMTYwLCAyNjc3LCAwLCAwLCAKKyAgICA0MTc5MywgNjU3NjMsIDc0MjIxLCAxMjAxNDEsIDQxNzkyLCA0Mjc3MCwgOTQwNTQsIDY1NzYyLCAxMTg4MjksIDQzODIxLCAKKyAgICA1NzA5LCAwLCA5NDA1MywgNDM4MTYsIDAsIDAsIDEwNzksIDM4NjcsIDU3MDgsIDAsIDAsIDQzNzk3LCA1NzA2LCA2NDc2OCwgCisgICAgNTcwNSwgODc5MSwgNDAwNSwgMCwgMTAyMzcsIDEwOTkxLCAxMjg4MTYsIDQzNDU5LCA5MTczLCA5MTc1ODEsIDkxNzU4MCwgCisgICAgMTMxNzAsIDEyNTQwLCA5MTc1NzcsIDQyNjA1LCAxMjA3NjUsIDEyNjYxNywgNjg2NDcsIDkxNzU3MiwgMTAwNTgsIDAsIAorICAgIDc0ODY3LCAxOTQ2NTQsIDEyNzA3OCwgMzMzOSwgMTE0NDgsIDExMDYsIDkxNzU5MSwgOTE3NTkwLCA5MTc1OTMsIDMzNDAsIAorICAgIDkxNzU4NywgOTE3NTg2LCA5MTc1ODksIDkxNzU4OCwgMTIwNTQxLCAxMDYwNSwgMTMwOSwgNjM5NjYsIDEyMDc0MywgMTc1NCwgCisgICAgOTIyMjYsIDEzMjQ2LCA4NjQsIDAsIDExODkyNiwgODk3MiwgMCwgNzg0OSwgMTIwMDkyLCA5MjUzMywgMTMyNDAsIAorICAgIDE5NTA2OCwgNTE5MiwgNDMzOCwgNjc5ODIsIDEwOTQ4LCA5MTc2MDEsIDEzMTk5LCA5MjU3NSwgMTIzNiwgMTMyMDgsIAorICAgIDEzMjYxLCAxMzE4OSwgMTMxODgsIDkzOTkzLCAwLCA3NDQwLCAwLCAxMjAxNTMsIDk1NTMsIDE1OTAsIDYzNzc3LCA2Mzc3NiwgCisgICAgMTMxNzgsIDYzNzgyLCA2Mzc4MSwgNjM3ODAsIDYzNzc5LCAxNTgzLCAwLCAxMzI2MCwgNDU1MCwgMCwgNjQyMDUsIDAsIDAsIAorICAgIDQxNTIyLCA5ODM5MTUsIDkyMTY4LCA5ODM3NzIsIDkxNzg1OCwgMTEzNTQsIDk0MDcxLCAwLCA0Mjc5NSwgMCwgMTE5MTk1LCAKKyAgICAxMTM5NCwgMTk0NjQ2LCAxMzIzNiwgMTMyNzIsIDEzMTk0LCAxMzM0LCA2OTkyNiwgNDQ3OSwgMTE3OCwgNjU1ODYsIAorICAgIDEyMDY2MywgNjY2ODEsIDExOTE5MywgNDYwMSwgMCwgMCwgOTgzNzY1LCAwLCAwLCAxOTQ2NTgsIDAsIDY4MDksIDYzNzg2LCAKKyAgICA2MDMxLCAwLCA2Mzc5MSwgNjM3OTAsIDExNDUsIDYzNzg4LCA3OTEwLCA2Mzc4NSwgNDMxNTMsIDc1NCwgMTAxOTIsIAorICAgIDEzMTA1LCA4MTgzLCAxMjA3NDEsIDIwMzcsIDAsIDAsIDEwNzQ3LCAxMjUsIDAsIDY0ODkwLCAwLCA5ODMxMzEsIDAsIAorICAgIDQxNzE5LCA2Mzc1OCwgMzUyMywgMTA3NCwgMTMyNTgsIDk1MzYsIDc0MDc3LCAwLCA0NDI3LCA3NDI0MiwgNjM3NTcsIAorICAgIDQzMTQ1LCAxMjIxNywgNjM3NTQsIDQxNTMyLCAxMzQ5LCA2Mzc1MCwgNjM3NDksIDAsIDAsIDAsIDYzNzUzLCA2MzgwMiwgCisgICAgNDEwODQsIDEyMDYyMiwgNjgxMzMsIDQxOTMwLCA2MzgwNSwgNjM4MDQsIDQzNjMyLCA2MzgwMSwgNDEwODIsIDgxNDAsIAorICAgIDYzNzk4LCA2MjYwLCAwLCAwLCA5NDA3NCwgNjM3OTMsIDExOTg4LCAzODk4LCAxMjgyNDEsIDEwMjAxLCAxMjIzOCwgCisgICAgNjM3OTUsIDQyMTk0LCAxMDM2NywgMTI1MjEsIDEwNDMxLCA0MjExNCwgNDE5MzIsIDEwNjgsIDAsIDEyNTIzLCAxMjk0NSwgCisgICAgOTgzMzI5LCA0MjIwMywgNzk1MCwgMTA4MDQsIDYzNzcxLCA0Mjc4NywgNDM4NiwgMTIyMjQsIDY5NzMsIDI3OTMsIDEyNDc1LCAKKyAgICAwLCAwLCA2Mzc2OSwgOTUzMCwgOTgzMTE5LCAxMjIzMiwgMTMxMzUsIDg1OTYsIDU2ODEsIDYzNzYyLCA0NTk1LCA2Mzc2MCwgCisgICAgNzkyLCAwLCA2NDgwMywgMCwgODc0MiwgMCwgMTEwNTMsIDEyODc5NiwgNjM3NDQsIDEyODEwNywgMCwgNzU4OCwgNjM3NDgsIAorICAgIDE2OTMsIDYzNzQ2LCA0MzIwNCwgNTA1NSwgNjg0MjYsIDkxNzg1MywgMTA5MCwgMTIwNjc5LCAxMjgzNTYsIDExNjY1LCAKKyAgICA3NDEzMywgNDU1OCwgNjU2ODUsIDk1MjMsIDAsIDAsIDc4NjgxLCAxMTUxMywgMCwgNjE1NywgNjM3NzUsIDYzNzc0LCAKKyAgICA2Mzc3MywgMTMxOTEsIDEyMTcwLCAzNTAwLCAzMTM5LCAwLCAzMTcwLCAxMjQ4NSwgMCwgMTA4NzIsIDc4MjcxLCAxMzAwNiwgCisgICAgNjQ0MzMsIDAsIDAsIDk0MSwgMCwgMCwgMCwgNjU1NDEsIDExMDYzLCAwLCA4MjI4LCAwLCA0MjA2NSwgMCwgMCwgOTQwMzksIAorICAgIDAsIDkyNDU1LCA3Mzg2LCAwLCA2NDQ0NCwgMCwgMTE5ODYzLCA0MzYwMywgOTQwNzUsIDY1Mzk3LCAyODgsIDAsIDAsIDAsIAorICAgIDEwMDI1LCA2OTkxNSwgMjkxOCwgMCwgNjUzMDAsIDExOTg3MSwgOTg4MywgNjQ3MjYsIDI3OTAsIDY1Mzk1LCAzNzkzLCAwLCAKKyAgICAxMjc4MjksIDY1MzkzLCAwLCA3NDEzOCwgMCwgMCwgMCwgNzQxMzksIDkyNzEyLCA2NTM5NCwgMTE1NDgsIDUyNzAsIDAsIAorICAgIDY1Mzk2LCAwLCA2NTgxMywgMTMyNTYsIDEyODIsIDEyMDc3MSwgMCwgMCwgMTA4ODgsIDk4MzYwNCwgNjUyNDIsIDAsIAorICAgIDMzMzAsIDAsIDAsIDk4Mzk3NCwgMCwgMCwgNzQyNTksIDMzMDQsIDQyNzUzLCAwLCAwLCAwLCAxNjI3LCAwLCAwLCAwLCAKKyAgICA1MzcxLCAxMzExNiwgMCwgMTgyNiwgMTE4Nzk0LCAwLCA0MzA5NCwgNzAwMjMsIDQzNjUwLCA5NDAzNywgMCwgOTAzNSwgMCwgCisgICAgMCwgMTI4MDA1LCAwLCA5MjIwNywgNjgxMjUsIDAsIDE2NCwgMCwgOTQwNjcsIDk0MDAwLCA2OTU4LCAwLCA0MzExNiwgMCwgCisgICAgNzAwMTksIDEzMjQ1LCAwLCAwLCAxMjczNzYsIDAsIDcwMDMxLCAxMjc3NTYsIDEyNjY2LCAxMzE3NSwgMTMyMDcsIAorICAgIDEyMDQxNCwgNjYwMTQsIDEyMDQyOCwgNzQ0NywgNTkyOSwgMCwgNjU1MDksIDAsIDc0NDksIDExMzA2LCAwLCA3MzkyMCwgCisgICAgMzE4MCwgMCwgNjM4MDgsIDkwNTQsIDk3MSwgMTMwNjIsIDAsIDAsIDY1MTk1LCAxMDE2NCwgOTIyNTIsIDc0NDI4LCAwLCAKKyAgICA3ODE0NiwgOTI2MTEsIDAsIDAsIDAsIDEwMDQ1LCAxMjg4MiwgMTMyNzUsIDEyODE2MSwgMTEwNTcsIDAsIDEzMjc2LCAwLCAKKyAgICA0MTUyNSwgNzgxNTAsIDcyNzEsIDExNDQ0LCAwLCAwLCAwLCAxMjIyOSwgNDE1MjMsIDAsIDQzNDExLCA3Mzc1MSwgMCwgCisgICAgNjQ4MTMsIDAsIDAsIDEwNDc2LCAzODU4LCAwLCAzOTMyLCA2NDk1OCwgMCwgMCwgNzM5ODksIDY4MTkyLCAwLCA2OTg0NywgCisgICAgMzY5LCAwLCA0MTc4NCwgMCwgNjQxNjMsIDAsIDAsIDAsIDY1NDc0LCA0Nzk2LCAxMjI5MiwgMTI2NTk1LCA2NTQ3OSwgMCwgCisgICAgNDE3ODEsIDEwNDg2LCA0MTQ4MCwgNDMwMDIsIDk4OTksIDAsIDAsIDQwNCwgMTI4MjEsIDM3NDEsIDAsIDU3ODgsIDgwOTIsIAorICAgIDY4MjEyLCA0MTIyMiwgMTgzMSwgNjYwMjAsIDM5ODIsIDAsIDQzODgsIDAsIDc0NiwgMTIwNzg0LCAwLCAwLCAxMjAxOCwgCisgICAgNjUyOTQsIDAsIDAsIDAsIDAsIDQ0MjIsIDQ3MDgsIDM3OTksIDc0MjkyLCAxMTkzNTcsIDAsIDc0NDMwLCAwLCAxMTcwMCwgCisgICAgNDM3NCwgMCwgMTI4MTc5LCAxMzY0LCAwLCA4MDM4LCAwLCA5MTc1OTcsIDEyODY4LCA2OTgxNCwgMCwgNjczNSwgNzM5NzksIAorICAgIDEzMTc0LCA3Mzk2OCwgMTMyMjUsIDAsIDY5ODA4LCA2NTgzNSwgMCwgMjM2NSwgNzg0MSwgMCwgNDI4NTUsIDExODg1NiwgCisgICAgNDI4NjYsIDAsIDAsIDAsIDY2NDM4LCA0MTc4NSwgMTI2MTcsIDY0MTcyLCAxMzE3MywgNDM3MiwgMTE5MzU0LCAwLCAKKyAgICA5ODM1NjgsIDAsIDAsIDkyNDAyLCAxMjgwNjIsIDEyOTY1LCAzODQsIDY0NTEyLCAxMDQwNCwgMTAzNDAsIDExOTM1MiwgCisgICAgMTU1NiwgNTI3NCwgMTMyMTAsIDEyMDEyNSwgMTAwMTcsIDk3MzMsIDQxNzg3LCA5ODMyNDMsIDEyNjk5NCwgNDEzNzMsIAorICAgIDc4MDM5LCAxMjMwMywgMCwgMTMyMzIsIDEzMjMzLCAzNDksIDQ4NjMsIDQxMzcxLCAxMTY1NiwgMCwgMTIwNzAzLCAKKyAgICAxMTk4ODMsIDEyODYxLCA0Mzk4LCA4NTQzLCA2NTYxOCwgMTI4MDE4LCAxMDk2LCAwLCAwLCA0MjY4OCwgMTI0NDEsIAorICAgIDEyMzU1LCAxMTkzNDgsIDExOTM0NywgNDMxOCwgMTA0NTIsIDAsIDgwMzIsIDEzMjQzLCAxMzIzNywgMTI3MTksIDEyNjY0NiwgCisgICAgMTE5MTAxLCAwLCA2NDg4NCwgMTE5ODcyLCAxMTkzNDUsIDg1OTcsIDAsIDAsIDk4NjQsIDAsIDEyMDc4NSwgMTE5ODc0LCAKKyAgICA5NDEwNywgMTMxOTUsIDQxNDUyLCA2NDk2MSwgNzcyMiwgMCwgMTA0NTksIDExOTg3OCwgMCwgMTE5ODc5LCA2NjU5MCwgCisgICAgMTI4MTIzLCA0MTUzMywgNjYzMzcsIDAsIDkyMTg0LCAwLCA0OTY1LCA0MzQ0NSwgOTE3NTM2LCA3Mzg0OSwgMCwgNDM2MzgsIAorICAgIDc4NTM3LCAxMjgyODcsIDYyNjEsIDExOTM0MiwgNDMxNDcsIDY2NTcwLCAxOTU3LCAxMDQyMCwgOTgyLCAyNzU2LCAxMzI5MiwgCisgICAgMTMyMDYsIDEyODgyOCwgMCwgMjkyNSwgNzM4MDksIDEzMDU2LCAxMjc1NTksIDEzMjEyLCA0MzIzOCwgMCwgMTMxOTAsIAorICAgIDEzMTg3LCA5MjU0MSwgMTMxOTgsIDExODc5MywgMCwgNTI0MiwgMTE5MTc5LCA2NDQ3NiwgMTY5NCwgODIxNiwgNzEzNjksIAorICAgIDY3NzAsIDQzMzMxLCAwLCA2NTYyMCwgOTgzNzI4LCA0MzU0NCwgMTI2NDY2LCAwLCA0MTQ0NCwgNjU2MjEsIDY5OTU1LCAKKyAgICA5MTk3LCA1MjQ2LCAxMTkxMDYsIDEzMTg1LCA5NzA5LCAxMjAzMjMsIDEyMDMyMiwgMTIzMTQsIDY1NjE2LCA1MjM4LCAKKyAgICAxMTkzMzMsIDAsIDExOTMzNywgNTIzNiwgNDA5NzksIDAsIDc0MjAxLCA4Mjg2LCAxMjg1MzcsIDM5MzYsIDExOTMzMSwgCisgICAgMTE2OTksIDQxMzQ3LCAxMjcyNDksIDEzMjM1LCA4ODQyLCA0MTI0OCwgMCwgNDM3OSwgMTMyMzksIDEyNjkyLCA3OTY5LCAKKyAgICAxMjcyNjYsIDcyMTksIDEyNzI1MCwgMTI4MjUxLCAxMjA1MDksIDAsIDY2MjI0LCA3MzQsIDI5NzksIDEyMDMwMywgNjU2MTksIAorICAgIDk4NzIsIDk1NywgNjQ5MjEsIDE4NDYsIDY2NjMxLCA0MTQ3NywgMTE5MjU2LCAxMjAzMTAsIDc0NTExLCA0MTc3MCwgMTY3MCwgCisgICAgNjQ0MiwgMTIwMzE3LCA0MjQ0NiwgNTM3OSwgMTIwMzE4LCA0MTE2MywgNzQ4MzIsIDEyMDMxNSwgMTIwMzE0LCAxMTUwNiwgCisgICAgMCwgNDI4NDEsIDEzMjY3LCAwLCAwLCA0MTc3NSwgMCwgNzEzMCwgNDE3NzMsIDAsIDEwNjYzLCAwLCAwLCAwLCA2MTUxLCAKKyAgICAxMjExMCwgNDI2NzMsIDY1NTcyLCA2NTI5MywgNjUyNTAsIDEzMjY1LCAxMzI2NCwgNjQ1MTgsIDAsIDYxMDAsIDAsIAorICAgIDkyNjQ3LCA1ODA4LCA2NTkyMiwgMCwgMTI5NjcsIDY2MDQxLCA1NjEyLCA0NTgzLCAwLCAwLCA2ODA5NywgNjQ1NzUsIAorICAgIDEyNjYzNywgMTE5NjUsIDAsIDY4MzU4LCAwLCA2OTc4OSwgMCwgOTIyNjAsIDY4MTAyLCA5Njk4LCA3ODE0LCA3NDQ3NiwgCisgICAgMTE5NjUxLCAxMjg1MTQsIDAsIDQxOTIxLCAxMTg4NTgsIDk3NTYsIDY5ODUsIDExOTI1OCwgNzg0OTAsIDc0MjE5LCAwLCAwLCAKKyAgICAxMTg5OTcsIDgwMTIsIDU2NzQsIDEyMzUzLCAwLCAxMjM2MSwgNTY3NywgNTU4OCwgMCwgNDE5MjUsIDEyODEyNCwgNDE5MjAsIAorICAgIDU2NzMsIDEyMDUzNCwgNTY3NiwgNDE5MjMsIDEyNjk0LCAxMTg5NzgsIDU2NzIsIDEyOTQsIDAsIDc4MDU5LCAwLCA0MjUxMSwgCisgICAgMTcyNywgMTIwNzI1LCA0MjQzNiwgMCwgMCwgMCwgNzQyMjIsIDg3MTgsIDM1NTAsIDczNiwgMTAyNjgsIDQ1MDUsIDEwMzE2LCAKKyAgICA3NDA5MCwgNTgyNiwgNTUyMzIsIDU4MTMsIDAsIDEyMDcxMiwgNTg0MSwgNTgzNywgNTUyMzQsIDAsIDMxMDUsIDEyODI5LCAKKyAgICA1ODM4LCA1Nzk2LCAwLCAxMTk1OTIsIDU3OTMsIDAsIDU4NjYsIDU3OTcsIDQxMDExLCA1ODY1LCAxMjAwOTEsIDc5NTYsIAorICAgIDU5OCwgMCwgNjQ2NDksIDU4MDYsIDQyMzk4LCAwLCA5MDM3LCA1NjcxLCAxMjAwNDEsIDk4MzI1NSwgMCwgMCwgMTI4ODU1LCAKKyAgICAwLCA4NDcsIDEyODI0MiwgOTUyOSwgMCwgNjY2NTcsIDY5ODAsIDc4NDgzLCAxMjAwMzUsIDc4NDg0LCA5ODM0OTEsIDAsIAorICAgIDEyMDAzMywgNzg0ODYsIDAsIDAsIDEyMDAzOSwgNDI2ODMsIDAsIDk4MzA1NSwgNzExNCwgMCwgMCwgNDMxOTAsIDY1NDYzLCAKKyAgICAxNTU0LCAwLCA0MjYxMSwgNDI1NjMsIDAsIDU2NTEsIDI5MjksIDY3OTIsIDQzMjAxLCAwLCAxOTk2MywgNTY5OCwgMCwgMCwgCisgICAgMCwgMCwgNTY0NCwgMTAyOTIsIDY1NTQ2LCA2OTcyNywgNjgxNDEsIDgzNzIsIDAsIDY1MTE2LCAwLCAxMjAwMjIsIDEwMTc1LCAKKyAgICAxMDM4OCwgNDI3OTksIDk0MTAwLCA0MTAxMywgMTA1NjgsIDAsIDk4MzYxOCwgMjg2OSwgMCwgNDEwMTUsIDE5NDY5MiwgCisgICAgMjc4NSwgNDM2NiwgMCwgMTA5NTQsIDQxODAyLCAwLCA0MjYwOCwgNzg0NjksIDk4ODQsIDQ3NTksIDAsIDAsIDEwMjY2LCAKKyAgICA0MTM1OSwgMTE3MCwgNDMzNjUsIDY5ODEwLCA3MzkwOCwgMTYwOSwgOTAyLCAwLCA2MzkzNiwgMTI4ODc1LCAxMTY2MSwgCisgICAgODEyMiwgNTgxOCwgMCwgMCwgMzg2MSwgOTU0MCwgMTEwMjgsIDI1NTQsIDUxNTgsIDU3MTQsIDIyMTMsIDAsIDAsIDgwNywgCisgICAgNDMwNzksIDAsIDc4NDc1LCA5NzYsIDU1MTEsIDY0NTUzLCAwLCA0MjE1NSwgMCwgNDEzNTYsIDc0MTEwLCAxMTg4MDEsIAorICAgIDEyNjYxNCwgMCwgODY3NiwgOTgzMjkxLCAwLCA1NTgyLCA0NTEsIDYzOTQxLCA1Nzk4LCA5MzQ5LCA0MjAxOCwgMTI3ODU4LCAKKyAgICAwLCAwLCA0MzYwOSwgNTkwNiwgMTIwNTUzLCAxNDQwLCAwLCAxMjg4NTMsIDEyMDAxNiwgNzQyODMsIDExMDA1LCAwLCAKKyAgICA2NjY1NiwgNjYwNDQsIDAsIDE5NDY5OCwgMCwgMCwgNDMzOTMsIDEwMDk0LCAwLCAxMTUyOSwgMTA4NTcsIDEyMDY0MywgCisgICAgNjY0MzYsIDY1NDYsIDkzLCA4MTAyLCAwLCA2ODQwNSwgMCwgMCwgODE3MSwgMCwgMTE5MDk3LCAxMjcwNjQsIDkxNzU0MywgCisgICAgMzgzLCA3MTU0LCA0MTY1NiwgOTI2MzQsIDk0MDQwLCAwLCA1MTg3LCA3MTI5NiwgMTI3Mjc3LCAxMTI4NiwgNjg2MjAsIAorICAgIDY0MjE3LCAwLCA1MjMyLCAwLCA0MTAwOSwgMCwgNDEwMDUsIDAsIDAsIDk4MzgyNywgODI5MiwgMTk1MDc0LCA0OTgwLCAKKyAgICA4ODYwLCA3Mzk0NywgMTAwMjgsIDY1MjkxLCA3MDc2LCAxMzE4MiwgMTk0NzA1LCAwLCAwLCAxMDYzMSwgNjYwMzEsIDc5NzIsIAorICAgIDAsIDc4Nzg1LCAwLCA3OTAwLCAwLCAxMTMwOSwgMzgwNiwgNDE5OCwgNDI3MjUsIDAsIDY3NjU2LCA5OTk1LCAwLCA5MjU1MiwgCisgICAgMCwgMTI5MzEsIDAsIDQyNjg0LCA3NDI4NSwgMjA4OCwgNjQyMTMsIDY0MzY2LCA2NTE1NiwgODgxNCwgNDIyMzgsIDc0NzcxLCAKKyAgICAwLCAwLCAxMjgzNiwgMCwgMCwgNzQzNDIsIDg1OTMsIDAsIDAsIDY4NDQ1LCAxMzI1NSwgMCwgMCwgNzQ2NCwgMCwgNjU4NjUsIAorICAgIDAsIDE5NDY1MCwgMTI3MTQ0LCAwLCA5MzQyLCAxMjA0NjQsIDAsIDY0NTE2LCAwLCA3ODc5MiwgMTAxMjksIDQxMDA3LCAKKyAgICA3NDM3NSwgMCwgNDA5OTUsIDEyMjA5LCA0MTAxMiwgMTE5MTM2LCAwLCAwLCA2OTcyNCwgNDA5OTIsIDkyMjY0LCAxMjcxNTMsIAorICAgIDY4NjUzLCA0MzU1OCwgNTUyMiwgMCwgNjEsIDAsIDc0MTA1LCAzNjMzLCA5ODM5MDAsIDY1MTYyLCA0MTIzNCwgMTIwODksIAorICAgIDc4MjgxLCA5NzcxLCA5ODM5MDUsIDEzMjUxLCAxMjg3MDEsIDAsIDYyNjIsIDI3ODQsIDQyNzQzLCAwLCA4MTI2LCA2NjQ4MywgCisgICAgMCwgMCwgNDQxLCA0MjYyMSwgMCwgMCwgNDEwMDIsIDQwOTk5LCAxMTk2MjMsIDQzMjY2LCA3MTA4LCAxOTQ3NzksIDEwODkwLCAKKyAgICA3NDQ4MSwgNjU4MzQsIDgzMjQsIDExOTEwMywgNjQ0MTcsIDc0ODE3LCAxMjc0NjUsIDY0NzM3LCAwLCA5ODM2NTksIDg5MzAsIAorICAgIDY2Njc4LCA3NDI0OSwgMTE5MywgMTAwNTYsIDE4MDAsIDEzMjUzLCAxMzI1MiwgNzgyOSwgMCwgMCwgNzc0MywgMCwgMCwgCisgICAgNzc5MDQsIDkyNjQwLCA3NzkwNSwgOTAzNCwgNjAzOSwgMCwgMTAwNzUsIDAsIDQxMDE4LCA2NTY4MywgMTAzMzgsIDY2NDY5LCAKKyAgICAwLCAwLCAwLCA0MjgxNSwgMCwgNDE5NjYsIDAsIDEyNzQ3MSwgMCwgMTE3OTIsIDQzMDY0LCA0MTAyNSwgOTExLCA3NTM5LCAKKyAgICAwLCAwLCAxMjAzMzksIDY1MTU5LCA2NDM5MCwgMCwgMCwgNTUyMCwgMTE2NjIsIDAsIDY1MzMwLCA0MjgxMiwgMCwgMCwgCisgICAgMTIzMjYsIDk4Mzg1NiwgMCwgNDI4MDgsIDEyODMzNywgOTM0OCwgNjQ5MDEsIDk4Mzg2MSwgMCwgMCwgMCwgMCwgMCwgCisgICAgOTE3NTg0LCA0MzcwMiwgOTgzNTc2LCA1ODU3LCA2NTM0MiwgOTI3MjcsIDExOTEyMCwgMTIwMDc5LCA4NjQ0LCAwLCAwLCAwLCAKKyAgICA3NDI5NiwgNDE5MDksIDAsIDEyMDMzMiwgMjc5MSwgNjk2NjMsIDE4OTEsIDY5ODI0LCAwLCA0MTkwNywgNjY2NDcsIAorICAgIDExODkzOSwgODc2MSwgMTI5NDIsIDU3NDgsIDAsIDEwNzczLCAwLCAwLCA4Nzk2LCA3ODE0OSwgNjQxMiwgMjA2MSwgODUyMCwgCisgICAgMTMxNDYsIDEyNzE4NSwgNjM5MzEsIDAsIDY1OTAyLCAyODgyLCAwLCAwLCAxMjg0MywgNDUyMCwgMTIwMzQ1LCA5MjQ1OSwgCisgICAgMCwgOTgzNjYwLCAwLCA3Mzg2MCwgMCwgMCwgNjQzNDUsIDAsIDkyMDEsIDEyODMxNCwgMTk0OTQwLCAwLCAwLCA0MzY3OSwgCisgICAgOTE3NTg1LCA2NTExNywgOTIyNzAsIDAsIDEwNDI3LCAwLCAzODQ0LCAxMjA2NzUsIDk3NTUsIDExMTAsIDY2MTIsIDEyMjIyLCAKKyAgICAwLCAxMjg3ODksIDAsIDAsIDc4MywgMTk0OTM1LCAwLCAwLCA5ODMwNjQsIDE5NDcyMCwgNjUwNTYsIDM2MjAsIDQxMTgwLCAKKyAgICA2ODM3OCwgNDU1NiwgMCwgMCwgMTk0OTMzLCA3NDI1MCwgMCwgNjc2NTcsIDEwNTEwLCA0MzgyLCA2NjQ4MiwgMCwgMCwgCisgICAgMTI3NTI3LCA5MTc3LCA4OTAyLCA5Mzk1OCwgOTgzOSwgMCwgMTI4OTEsIDk4Mzc1NSwgOTgzNjM2LCA2Mzk5OSwgMjAxNiwgCisgICAgNDE5MTcsIDk3ODgsIDYzOTI4LCAwLCAxODYyLCA2NTgwMCwgOTE1NSwgNjY2MjMsIDk3ODYsIDY1MDgyLCA0MTkxOSwgCisgICAgODU3OSwgNDE5MTQsIDc5ODEsIDAsIDY2MDE3LCA0NTA4LCA2NDg4MywgOTI0NTYsIDkyNTIyLCAxMjc4MTQsIDAsIDY0NTkyLCAKKyAgICA3NDI3NiwgMTIwMDgwLCA2Nzg0LCA3ODc4OCwgNjgxODEsIDAsIDAsIDAsIDEyNzUzNCwgMTIxNDcsIDkwMjQsIDY2Mzc4LCAKKyAgICA2NjQ3MiwgOTgzOTI5LCA2NDI4OSwgNjUyODksIDc4MTUxLCA2NjY1OCwgMTk0OTI5LCA2NDUwOSwgNzgxNTIsIDAsIAorICAgIDEyNjUwNSwgMTEwNTEsIDk4MzI5NiwgMCwgMTEzNTUsIDY1ODg1LCAwLCAxMjgzMTAsIDQxMjE0LCAwLCAxMjI5OSwgMCwgCisgICAgNzUwMCwgNDUwNiwgNzc3MywgMCwgMCwgOTk2MywgNjg2NDksIDEyNjYwOSwgNDA0MCwgMTIwNTcwLCA2MTY3LCAwLCAKKyAgICA2MzkyMiwgNjU5NCwgOTgzNzQwLCAwLCAwLCAzNjI0LCA0MzAzNiwgMCwgNjM4NywgNjM5OTAsIDE5OTQ3LCA2Mzk4OCwgCisgICAgNDE5NTUsIDAsIDYzOTkzLCAxMDQ0MCwgOTYxMSwgNjU2MDUsIDY4MDMsIDAsIDc3MzgsIDYzOTg2LCAxMTQ0NiwgNjM5ODQsIAorICAgIDkyNjQxLCAzNDM1LCA3ODE2NCwgNDM4MTQsIDQzODEwLCA3MDI5LCA2NDI1OCwgNDEyOTIsIDExODg5OCwgMTI3NDgsIAorICAgIDQyNzQyLCA5NTE3LCAxMTUxOCwgMCwgNzg3OTAsIDAsIDY3OTkzLCA2Mzk1NiwgNDI0NTgsIDYzOTU0LCA2Mzk1MywgCisgICAgNjM5NjAsIDk1OTEsIDQ1MTYsIDEwMjE3LCA2ODM3MCwgMTE0NjksIDY5Njk3LCA0MjMwNiwgMjcyMywgMTE4OTQ3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMTM5NywgMjg4MCwgMCwgMCwgMjg3MiwgMCwgMCwgMzQ5OCwgNDM3OCwgOTE3NTM5LCA0MjcwLCAwLCAKKyAgICA2NTU1MSwgNjgyMDUsIDY2MzMsIDQzMzg3LCAwLCA1MjMwLCAwLCAwLCAwLCAwLCAwLCA4MTYxLCAzOTMsIDEyMDEzLCAwLCAKKyAgICAwLCAxMjY0NzksIDQxNSwgNjM5NjQsIDYzOTYzLCA0MjM0NSwgOTIzMTAsIDUxODMsIDE4NzcsIDQyNDk4LCAwLCAyOTI3LCAKKyAgICAwLCA2Mzk2MSwgNDQ3MiwgMCwgMCwgNzgxNTksIDY5Njk5LCA5MTc5MzYsIDQyMzQwLCA0NzU2LCAxMjgwNzgsIDcwODEsIAorICAgIDEwNzMwLCA3NjkxLCAxMDMzMSwgNjM4MzAsIDExOTYyNSwgNDI5MjIsIDQyMTAzLCA4NjI4LCA5ODEzLCAwLCA0MjQ1MywgCisgICAgMTYwNCwgOTU2NSwgMTA1MzksIDY5NzAxLCA2NTc2NCwgNDE0MTUsIDY1NzY3LCAwLCA4NDU3LCA0MjMwMSwgMTEzNzIsIAorICAgIDY0ODczLCAxMTk5MiwgMCwgMCwgNjM5ODAsIDExODAxLCAzNjIyLCA5ODMxMjQsIDY0MzM2LCAxMjAxNywgMTA0NjMsIAorICAgIDYzOTgxLCA0OTY3LCA2NDE4OSwgMTk2NiwgNDM2MjgsIDAsIDk4MzI5MiwgMCwgMCwgNjM5NzEsIDQzNDcsIDQ0MTYsIAorICAgIDQyMDk4LCAxMTAwOSwgMTA2OTQsIDYzOTczLCA0MDIsIDAsIDEzMTQ3LCAxMjg2OTIsIDQyMTAwLCA2NDY0NiwgMTMyMjgsIAorICAgIDAsIDQxODc1LCAzNTE1LCA3NDI1MiwgMTE4MDUsIDAsIDExMzAyLCA2MjU5LCA0MzM5NSwgMCwgMCwgMTk0NjcwLCAwLCAKKyAgICA5MjM1MSwgMCwgNzQ0MjUsIDExMjk5LCAxNTYxLCAwLCA5MjM1OSwgNjQ5NDIsIDk4MzU1OSwgMTk0NzMzLCA5ODM2ODYsIAorICAgIDE5NDczMiwgMCwgNzQzMDEsIDAsIDExMjgwLCAwLCA2OTc4NCwgNzQwNjAsIDAsIDAsIDExOTY2NCwgNTE0NSwgMTI0ODYsIAorICAgIDY1MDE4LCA2NjUxNiwgNTQwOSwgMTI3Mzc5LCAxOTQ2NjksIDc0MDIsIDUzOTksIDk2ODUsIDc0MDg5LCA3OTUyLCA1NDAxLCAKKyAgICAwLCA2NjYxNiwgNjg0MjEsIDk4MzkxOSwgMCwgNTQwNSwgMTI3ODc1LCA2NDg2NiwgMCwgMTE5NTgzLCAxMjgzNDUsIAorICAgIDc4Nzg0LCA3NDI0OCwgMTEzMzAsIDE5NDcyMywgNjQ2OTAsIDMyNTQsIDAsIDAsIDEyODIwNywgNDIzOTAsIDQzNjc4LCAKKyAgICAxOTQ3MjUsIDk4MzkwOSwgNjUwNzcsIDAsIDYzODgsIDMzNTUsIDk1MDgsIDk4NjcsIDU3MjMsIDExNTIwLCA1NjExLCAwLCAKKyAgICAzMzc3LCAwLCAwLCAwLCAwLCA3ODIyOCwgMCwgOTgzNzYyLCA0MjY5MSwgOTE3ODg2LCAxMjcxOTgsIDc0NzY3LCAwLCAKKyAgICAxMjcwNzUsIDEzNzksIDI0NiwgMCwgOTgzNzYxLCAzNzg4LCA5ODMxMDYsIDExMDQxLCA5MjU0OSwgNjYzMDQsIDAsIDAsIAorICAgIDg5MTcsIDQyNDAzLCAzMDEsIDAsIDAsIDAsIDAsIDAsIDk4MzY5NywgMTA2NTYsIDAsIDY1MjE0LCAxMTkyNDIsIDQyNTY3LCAKKyAgICA5MjIxNywgMTMxNjMsIDk4MzIwNCwgMTIwODMxLCA3NDU5NywgMzE4MiwgMCwgMCwgMCwgNjUwMzQsIDY1ODg5LCA0MjE2OSwgCisgICAgNDc1NSwgNzQyNDQsIDE5NDYyMSwgMTE0NDMsIDAsIDY2MzE5LCA3NDU5OCwgNjA4LCA2MDAsIDAsIDEyMTksIDM5MzQsIAorICAgIDY0MjA2LCAxMTQ4MywgNzQ1MTAsIDAsIDc0NDg1LCA0MjQ0MiwgNjU0NzAsIDk4MzkwNywgNjQyMDIsIDEzMTYwLCA3NzU5LCAKKyAgICA0MjQ4MiwgNDg1LCAxMjgwMDYsIDAsIDk4MjgsIDAsIDAsIDQyMjgwLCAwLCA5MzUxLCA3Nzc4LCA2NDM3OSwgNzQ5NiwgCisgICAgNDI0MzEsIDY5MTYsIDEyMDgsIDAsIDExOTYzMSwgMTEwMDIsIDQyNDcwLCAwLCAxMTg5NDYsIDAsIDAsIDc0MDQxLCAwLCAKKyAgICA3MDA0NSwgNDM1MzksIDU0MTEsIDQyMTk2LCAwLCAwLCAwLCA5MTUwLCAwLCA0MjM5MywgMTMwODYsIDEzMTAsIDE5NDY4NywgCisgICAgOTMzNywgMTIwNTIsIDEwNjQzLCA1NTI3MSwgOTgzMTc5LCAxMjE2NiwgMjU0NiwgMTk0NjgzLCAyMTMsIDExODg1MiwgCisgICAgNjU2MTEsIDAsIDAsIDE5NDc1NiwgNzQzMTAsIDY1NTQsIDAsIDExOTE0LCA1NDUyLCAwLCAwLCAwLCAwLCAwLCAxOTQ2ODEsIAorICAgIDkyNTYwLCAyNzEzLCAwLCA5NjUwLCA0MzMzMCwgMCwgMTk0Njc1LCAxNDA2LCAwLCAwLCA5MjY1OSwgMCwgNjgyMjMsIAorICAgIDQxNDMsIDE5NDY3NywgMCwgNjU3NDgsIDQxNDEsIDk2ODIsIDY1Mjg3LCAxNTA4LCAxMjcwMTMsIDg3NzksIDEwNTY5LCAKKyAgICA4NzI1LCAxMzI5OSwgNjY2MzgsIDY1NzUwLCA0MjI2MywgNDE0NSwgNjM4MCwgNjU3NTEsIDY2NjEzLCA0Mzk5NCwgNjU3MzgsIAorICAgIDU1MjUwLCA5MTg1LCA5NTUwLCAwLCA0MzQwMywgMCwgMCwgMCwgNjU3MzYsIDQxOTUxLCA2NDgxNiwgNjU3NTYsIDk4MzIwNSwgCisgICAgMTI5NTUsIDEwNTk2LCAyODg4LCAxOTQ2NDUsIDAsIDAsIDk2NTcsIDkwMTksIDE5NDc2NiwgMCwgMjg3OCwgNTM5MCwgMCwgCisgICAgMTk0OTYxLCAwLCA2ODY3OSwgNDM1NTIsIDc1MDEsIDYzMjgsIDAsIDEwNDI5LCAxMDM2NSwgMCwgMCwgNDE5NDYsIDc1MDMsIAorICAgIDUyMzUsIDgwMywgNjgzODEsIDAsIDAsIDg5ODYsIDEyNjU0MiwgMTA2MzIsIDExOTM0LCAxMTQ1MiwgMTMzMiwgMCwgMCwgCisgICAgMTI2NjQ3LCAwLCAxMTg4ODcsIDE3OTEsIDUxOTEsIDkyODgsIDY0ODIyLCAyODkyLCAwLCA0MzM5NCwgNTU1LCAwLCAwLCAKKyAgICA2NjY0NiwgMCwgMTE5MDAyLCAxMzE1MSwgNzQ1MTIsIDcyODksIDc0MDU1LCA2NDE2MSwgODg1NCwgNjQxNjIsIDU4NTgsIAorICAgIDQxOTI3LCAxMDU4MiwgMCwgMTc4NCwgMTM2MSwgMTk1MDQ3LCAwLCA3OTA1LCAwLCA2NDg2OCwgMTI4ODEzLCAxMzE1OCwgCisgICAgOTIxNjYsIDcyMTEsIDAsIDkzNzEsIDczOTczLCA5MTc1NTMsIDY4MjgsIDE2MjUsIDkyMzAyLCAwLCAxMzQyLCA2ODQ0MCwgCisgICAgNjQxNzEsIDEyNjcwNCwgMTA5MDMsIDk4MzQ5NCwgMCwgMCwgMCwgMCwgNDQ4MiwgNDE2MDYsIDAsIDEyODU2OSwgOTgzMTEyLCAKKyAgICAwLCA2NDM4MSwgMCwgMCwgMTk1MDkwLCA0MjI0NSwgMTI2NDY3LCA0MTk3MiwgMCwgNDQ0LCAwLCA5MTI3LCA2NjY4NywgCisgICAgNjY2MTksIDEyNjQ4OSwgNzgwMjUsIDAsIDExMzQ5LCA0MDk5MSwgOTE3NTcwLCAwLCAxMTk1OTksIDEyMDgzMCwgMCwgCisgICAgMTE5NywgMTI4MjgyLCAxMTQ5LCAxOTQ5NzAsIDAsIDAsIDQwOTkwLCA0Mzc2NSwgMCwgMzQ5MiwgMCwgMTI3OTQyLCAwLCAwLCAKKyAgICAwLCAxMjgzOCwgOTgzOTc4LCAxOTk0OCwgMCwgMzA5OSwgMCwgMCwgNDEwODcsIDAsIDAsIDAsIDExOTA1OSwgMTIwMzYsIAorICAgIDQxMzA5LCAwLCAwLCA4MTUyLCAwLCA0MTU1MCwgMTIyMjcsIDk4MzYxMywgMCwgMTI4MjgsIDEyNzUxMSwgMCwgMCwgCisgICAgMTIwNzA4LCAwLCAwLCAxMDM4NiwgMTE5NTc0LCAwLCAwLCA5MjY4MCwgOTgzNzg5LCA2ODE1NCwgMCwgMTc0MywgMCwgMCwgCisgICAgOTIyMzksIDY1MTg2LCA5MTc1NzEsIDAsIDk2MDYsIDAsIDAsIDY0NDM5LCAwLCAwLCA5MjY4NiwgMCwgMCwgMTk0OTY3LCAwLCAKKyAgICAwLCAzMzk1LCA5MzYyLCAxMDg3OCwgMCwgMCwgNzgzNjIsIDY0ODMwLCAwLCAxMjY1NTcsIDQxMDkxLCAzNDI2LCAxMzQ0LCAKKyAgICA4ODcwLCAwLCAwLCA0NzM1LCAxMjcwMTcsIDYxMTksIDEyODIyLCA0MjY5OSwgMCwgOTgzODI0LCA3NDgxOCwgMTQyMywgMCwgCisgICAgNDI2MzcsIDQxMDgwLCAwLCAxMjAzOSwgMTA1NTksIDAsIDExODg5MiwgMCwgOTQ3MiwgMCwgMTE5MjksIDAsIDcxNzAsIAorICAgIDk1OTYsIDYxMzAsIDEyODgyNiwgNDM2MjksIDExNTc5LCA3ODcxMywgMCwgMTk0NzQwLCAxMjg2OTEsIDkyMTg1LCA2NjY5OSwgCisgICAgNjQ0NDAsIDEwMDQsIDkyNTg0LCAxOTQ3MzcsIDQzMjM0LCA2NjAwOCwgMTI2MjcsIDAsIDY4NDE0LCAwLCA0MzYxOSwgCisgICAgNDMzMDMsIDExMzAwLCA0MzMwNCwgOTY4NiwgNTg5MCwgMTE3NzYsIDc1NTgsIDEyNzE1OCwgNjU2MjcsIDAsIDEwNzE4LCAKKyAgICAxMzE1NCwgMzQ2MSwgOTEzOSwgMCwgMCwgMCwgMCwgNjUzNjUsIDczODc3LCA2NTYyOCwgNzgwMTksIDEyMDMxOSwgMCwgCisgICAgNDE3MDgsIDEyODYwLCAyNjQxLCAxMjA2OSwgMTA4MzgsIDU0MDMsIDEwMzUyLCA3MDA4NSwgMTAwNjEsIDQzMjM3LCAwLCAKKyAgICA1MTQwLCAyMDksIDEyODg0NywgNDE3MDQsIDQxMDU2LCA0MzA3OCwgMTI4MTI1LCAxMTg4MDksIDAsIDEwODk5LCA2NTQ2OSwgCisgICAgOTIzNjIsIDAsIDAsIDI0MTAsIDk5MywgMCwgMTIwNTg5LCAxMjA2ODksIDc4NjkzLCAwLCAwLCA3MjMyLCAwLCAxMTkyNTMsIAorICAgIDAsIDcxMTAsIDc0NDYyLCAyMDY2LCAxMDQ4OSwgNDIxNjYsIDQzNDYzLCAxMDY1OSwgMzYwMCwgMCwgNDIyNCwgMTMzNiwgCisgICAgNDE1MTgsIDAsIDAsIDAsIDAsIDQxMTM5LCA2NDgyMCwgOTI1MzgsIDEyOTY2LCA0MTEzNCwgMCwgMCwgMCwgMCwgMjcyLCAKKyAgICA0MjYzLCA4NzkzLCAwLCAwLCA0MTUwMiwgMCwgOTgzLCAxMjU0OSwgMCwgMCwgMTE5MCwgNDEwOSwgMTMzNSwgODQxLCAKKyAgICA1ODg4LCA0MTM1OCwgNjQ4NjMsIDk1NDQsIDQzNDgxLCAwLCAxOTQ4MDYsIDcwMDI3LCAyMDk5LCA1MTIwLCAyNDA5LCAKKyAgICA3Nzk5LCAwLCA3NDQyNCwgMCwgMCwgNDczMSwgMCwgNjY2MjksIDAsIDAsIDEyNTUsIDQxNDksIDkyNDcsIDAsIDk5MTMsIDAsIAorICAgIDAsIDY0OTE0LCA5MTc3ODcsIDY1MTAxLCAwLCAxMTY5NCwgOTI0NzUsIDExNjkwLCA1ODM1LCAxMjcxNjQsIDY2NjI1LCAKKyAgICAxMDg0MiwgNDEzNTQsIDQyMTIzLCA0MzA5NywgMTE2ODgsIDY2NjM0LCAxMDk0LCAxOTQsIDY0NjkyLCAwLCA4MTgwLCAwLCAKKyAgICAwLCA5OTcyLCA3Mzg2NSwgNDUxOSwgNjExNCwgMTA4OTgsIDQzMDcyLCAwLCAwLCA5Mzk2MCwgOTgzMzIyLCAxMjY1ODEsIAorICAgIDEwNjk1LCAwLCA3NTQwLCAwLCA4ODEsIDc4NTcsIDYwNjcsIDY1MTY0LCAwLCAwLCAwLCAxMzMxMSwgNjg0MDMsIDQxODU3LCAKKyAgICA2NDMyMSwgODM1OSwgMCwgMTI2ODksIDAsIDE5NDU5NCwgMCwgOTgzMzEyLCA5ODM4ODEsIDY4MTgzLCAwLCA5ODMzMTQsIAorICAgIDEyODcsIDU0MzYsIDAsIDk4MzMxNywgNzQxNDIsIDkyMzI4LCA3NDE1MiwgMTE5MDc4LCA2MDUxLCAxMDQ5NywgNjk2NjgsIAorICAgIDg5ODUsIDEyMTA5LCA5ODMzMjMsIDAsIDEyNzI0MiwgMCwgMCwgMzY1MiwgMTA1MzcsIDAsIDEyNzYsIDEyMDQ0MCwgNjU0OSwgCisgICAgMjc5LCA3Mzc0NSwgMCwgMCwgMCwgMTQ4OSwgMCwgMCwgMCwgMzg5OSwgMTAwNywgNDIxMjQsIDk4MzU1NywgNDIxMjIsIAorICAgIDkyMzM3LCA5MjM2NywgMCwgMTE5ODUsIDEzNDUsIDc4NjAwLCAwLCAwLCA4OTU2LCA0MzA4MywgOTQwNTcsIDQyMTM4LCAKKyAgICA3ODYxMCwgMCwgMTIxNTEsIDc4NjA4LCA3ODYwNCwgNzg2MDUsIDYyODUsIDc4NjAzLCA3ODYxMiwgNzg2MTMsIDY1OTQyLCAKKyAgICA0OTIsIDg2ODUsIDAsIDk4Mzc1OSwgMCwgNzg2MjIsIDQzNzEyLCAyNTgyLCAxMTQ3MCwgNjQ1MzgsIDc0NDQsIDc4NjE1LCAKKyAgICA3ODYxNiwgMjI5NywgMCwgNzM4MzcsIDExOTgyMywgMjUyNywgMTE5ODI0LCAxOTcsIDI3OTksIDkyNTk0LCA0MTk0NCwgCisgICAgMTIwMjc2LCA5OTMzLCAwLCA2NjUxNSwgNzY3LCA1NTI0LCA3MDI4LCAwLCAwLCAxMTk4MjcsIDExOTgxNywgMTE5ODI4LCAKKyAgICA3ODYzMywgMTA4OTYsIDAsIDE3OTksIDEyMDQ5NywgNjk3MSwgNzQzMzYsIDEyODM0MiwgMCwgNjUzNDAsIDExODk3OSwgCisgICAgNDE1NTEsIDI0MzQsIDk0MDE4LCAwLCAxMjA1NzksIDAsIDQ2MzEsIDAsIDAsIDY0MDcsIDAsIDYzMzgsIDQzMjE0LCAwLCAKKyAgICA3NTcwLCAwLCAzMTkyLCAwLCA4NDE0LCAwLCA5Mzk4MywgMCwgMCwgMCwgOTE2NCwgNjY2MTIsIDkzOTU5LCAzMTcxLCAKKyAgICA2NjIzLCA0OTYxLCA2ODM5NiwgODg2LCA1NTIxNiwgODY1NCwgNzg4MzIsIDk5OTMsIDc0MzkwLCA2NDYwMywgNzAwNjYsIAorICAgIDY5MjQxLCA5NTk5LCA3ODYyOSwgNDMwODQsIDc4NjI3LCA3ODYyOCwgNzg2MjUsIDIzOTksIDY5NjkzLCA4OTk0LCAxMDk0NCwgCisgICAgNDEyMDgsIDk4MzcxMywgNDExNjgsIDgxNzgsIDAsIDMzNjcsIDkyMzM0LCA0MjUxMCwgNzg2NDEsIDc4NjM2LCA2ODA0LCAKKyAgICA3ODYzNCwgMTk0NywgMCwgMCwgOTI2ODEsIDQyNzU5LCAxMTA2OCwgMTcwNSwgOTMzMSwgMCwgNzQ3OTgsIDkxODEsIAorICAgIDY1MzU5LCAwLCA4MDE3LCAxMTk4MzEsIDY1MDk2LCA2NjcyMCwgMCwgNDM0NzUsIDAsIDQ5MDksIDEyMTI2LCAxMjg2NzMsIAorICAgIDEyMDY5NiwgNDkwNCwgOTgzMzMzLCA2OTY1MCwgMTM2NSwgOTI1MywgNDI3NTcsIDQzNDM2LCA3NDYyLCAwLCAwLCAwLCAwLCAKKyAgICAxMTk1ODcsIDY0NDE1LCAwLCAwLCA1Mzk4LCAwLCAxMjczODYsIDkzOTUzLCAwLCAwLCAxMTkwMTUsIDAsIDAsIDk0NzYsIDAsIAorICAgIDk4Mzc3NywgMTI3NjMsIDEyNjYwMywgMzYyOSwgMCwgMTMwMDUsIDAsIDM2MjgsIDAsIDAsIDkyNTAyLCAzNDY5LCA0MjEwNywgCisgICAgNDIxMTYsIDkxNzU3OCwgNjQ4MDksIDI5MjgsIDQ5MDUsIDk4NTMsIDg1MSwgOTA0MCwgMCwgNjQ2NjUsIDQzMDg2LCA5MTE0LCAKKyAgICAwLCA0MjU4MywgOTMxNSwgNDgyMiwgNDkwNiwgMzg1MiwgMjg0NywgMTE5ODIxLCAzMjM2LCAxMTMxNywgMTI1MSwgNzc3NywgCisgICAgNDE4NTIsIDExNDEwLCAxMDk2NCwgMCwgNDMyMjIsIDEyNjQ2LCAxMjAyNjksIDEwMjU5LCA5ODY1LCA2NTgyMSwgMCwgCisgICAgNjAxOCwgOTIyOTAsIDAsIDEyMjc2LCAwLCA2ODM3MiwgMCwgOTIyNTksIDExOTI0NCwgMCwgOTgzMjMwLCAxMDQ2NywgMCwgCisgICAgMjQ0MywgMTA5MTgsIDc4MjE3LCAxMTk4MjUsIDEwMDEsIDkyNDEsIDE5MjcsIDAsIDAsIDczOTg3LCAxMjc4ODUsIDAsIDAsIAogICAgIDExODgyOCwgMTIwMjcxLCA2NTY3OCwgMTI4NjcsIDAsIDgyNjAsIDc3OTQ1LCA3NTE5LCAxMTUwNSwgMTIyNzQsIDg5MDQsIAogICAgIDUxOCwgNjU4NTcsIDAsIDEyODY3NCwgMTMyMDQsIDQzODcsIDg1NywgMCwgNjUzNjksIDAsIDkyMzM2LCA0MzEyNSwgCiAgICAgMTIwNTkyLCAwLCAwLCAwLCAwLCA1MTM2LCAxOTY4LCA5ODMwNDEsIDEyNjYyNywgMTMzNywgNjQ5NjcsIDE2MjksIDAsIApAQCAtMTg3NzcsNDQgKzE4Nzk2LDQ0IEBACiAgICAgNzg2OTgsIDc4Njk3LCA3ODY5NiwgNzg2OTUsIDg3MTAsIDQyNDk1LCAxMTg5NTYsIDAsIDQwNTEsIDEwNDYwLCA0MzM2NCwgCiAgICAgMTE4OTE3LCAxMzU2LCAxMjE2MSwgNDI3MTMsIDEyODg1NywgMTI3MjY4LCAxNjE5LCA5NzAzLCA0MzE1MiwgNDI0ODksIAogICAgIDQyMTEyLCAxMjc5NzgsIDE4NzUsIDEwODA4LCA0MjEwOSwgMTIwMjg0LCA0MTg2MCwgNjQ4NjIsIDEzMzA1LCA2NDkwNywgCi0gICAgNTI4OSwgMTMxNDQsIDEyODY1OCwgMCwgNTU3NSwgOTY3NSwgMCwgNTk0MCwgMjI2LCAyNjQ5LCA2MzM2LCA5ODMyNjksIAorICAgIDUyODksIDEzMTQ0LCAxMjg2NTgsIDAsIDU1NzUsIDk2NzUsIDAsIDU5NDAsIDIyNiwgMjY0OSwgNjMzNiwgOTgzMjc3LCAKICAgICAxMTk4MzAsIDQzMjM2LCAzMzgyLCA0MjQ0OSwgNjQ5OCwgMTY1OCwgMTE5MzYsIDc4MjMyLCAwLCAxMTI2OSwgMTAxNTEsIAogICAgIDczNzU5LCA0MzEwMCwgNjk4ODgsIDY1NTA4LCAwLCAwLCAwLCA4OTM1LCA5MTc5ODUsIDAsIDAsIDAsIDYxNiwgNzQ3NTMsIAogICAgIDY1MTc4LCA0Njg0LCA3ODcwMSwgMTE5NjUzLCAwLCAxMjY1NTEsIDAsIDYwNDgsIDc0NDYwLCA0MjExMCwgNzM5NjUsIAogICAgIDEwODcwLCA4NTU3LCAxMTA1NCwgNjg2NjQsIDExOTA0OSwgOTY4MSwgNDQ3NSwgMCwgNDExNDIsIDIxMDAsIDAsIDEyMDczMSwgCi0gICAgNjAzNSwgMCwgNzY1MSwgMTAyOTYsIDY0NDQzLCAwLCA5ODMyODcsIDkxNzk4NywgMCwgMTE4OTY2LCA3NDE0NCwgNDA5OTcsIAorICAgIDYwMzUsIDAsIDc2NTEsIDEwMjk2LCA2NDQ0MywgMCwgOTgzMjk1LCA5MTc5ODcsIDAsIDExODk2NiwgNzQxNDQsIDQwOTk3LCAKICAgICAwLCAxMDM5MiwgMTAzMjgsIDQwOTk4LCA0MzQ2MiwgNzQ0ODgsIDAsIDk4MDAsIDg5NzksIDAsIDEzMzA3LCA0MTAwMCwgMCwgCiAgICAgMTE5MjM5LCA2NDg3LCAzMzg2LCAwLCAxMDM0NCwgMCwgNjUyOTksIDUzOTQsIDQzMjQ2LCA3ODI0MywgMTAyMjAsIDY2NTA1LCAKICAgICA0MTIwMCwgMTI4NTgzLCA0NDI1LCAwLCAwLCAwLCA0MzA3NCwgNzM3OTksIDk4MzIwMCwgNzgxNDcsIDAsIDEyMTczLCAKICAgICA3ODU0NSwgMCwgMTI3MDExLCA2NTMzOCwgMCwgMCwgMTE5NTgyLCA0NDc0LCAwLCA0MzA5MywgMTI4NjQ0LCAxNTg3LCAwLCAKLSAgICAxMjczNzIsIDY0NDc1LCAxMjgwOTgsIDEzNjksIDk4MzY2MywgOTk1OSwgNzkyNywgMCwgNDU2MCwgMCwgMCwgOTIyNzcsIDAsIAotICAgIDY0OTQ4LCA0NDMwLCA3NDM0NywgNDI2MDEsIDQ1MTQsIDY2NDM0LCA5Mzk1NSwgODE5NCwgNjU0NjIsIDEwNjI2LCAxMDk2NSwgCi0gICAgMCwgODg5MywgOTgzMjkzLCAxMjU0MiwgMCwgNjUzNDEsIDAsIDY1ODI5LCA3OTI1LCAxMTk4MjIsIDEwNDc1LCAwLCAwLCAKLSAgICAxMzUyLCAxMTA2OSwgNzcwNywgMTI3NTYwLCAxMjY0ODYsIDY1Mjc5LCAxMjcxMDIsIDY4MjA3LCAxMjcxMDAsIDcwOTksIAotICAgIDYwNDAsIDEyNzA5NywgMTAwNzEsIDAsIDkzMzYsIDQzNzUwLCAwLCA4ODk5LCA3Nzk4LCA2NDQ3NCwgNjQyNTksIDY5ODczLCAKLSAgICA2NTE4OCwgNzgyMCwgNDMwMTgsIDEyNzA4MiwgMCwgNzc0NiwgMTQ5MiwgNzg1NTEsIDEwODg0LCA3Nzk4MiwgMCwgNTEyNywgCi0gICAgMTEyODUsIDQyNTAxLCA1NDk1LCA0MjczLCA0MzA5NSwgNDE0MjYsIDEwODQ5LCA1NzMwLCAyOTk5LCA2MzQyLCA2ODYzNiwgCi0gICAgNzQzMDQsIDM3MSwgNjQzNzMsIDYwMjMsIDE2OSwgNTQ5NywgMTE3MDgsIDAsIDAsIDYzMjMsIDE5NDY4NCwgODIyNCwgMCwgCi0gICAgODkzOCwgNjA0MywgMTI3MzgsIDAsIDk4MzA3NiwgNTMyMSwgMCwgMTk0Nzk4LCAwLCAyNTg5LCA3NDMzMiwgMTY4OSwgCi0gICAgNzgwMiwgNDY4MywgNzQzMTgsIDQyNzA0LCAxMjAyOTYsIDExOTA1LCAwLCAwLCAxMjg1MTYsIDEyODE2MywgNzQ1MTMsIAotICAgIDYwNDksIDAsIDQwMjcsIDgzNCwgMTE4OTYyLCAxODAzLCAwLCAxNTAzLCAwLCAwLCA3MTMxMiwgNTczMSwgMTM4MSwgMjM4NywgCi0gICAgMCwgMCwgODI4OSwgNjQ1MjUsIDY1ODE3LCAyODgxLCA0MzE0MiwgMCwgOTYwMSwgMjg3OSwgOTY2OCwgOTc2NiwgMCwgCi0gICAgNTcyOSwgOTE3ODMzLCA3NDQxMCwgNjAzNiwgNjQ4ODEsIDQwMjYsIDkzNjEsIDEyNzA5MSwgMjg4NywgMCwgMzUyNiwgCi0gICAgNjI5OCwgMCwgNzc4OTcsIDEyMDA5NSwgNzg1MTksIDAsIDg1NzIsIDYwMjEsIDc3ODk2LCAxMjgyODgsIDc3ODk1LCAKLSAgICA0MzE1NSwgMCwgMTE5ODQ5LCAzMTQ2LCAxMDk1OSwgOTQ4MywgMCwgNzc4OTMsIDEwOTgxLCAxNjYsIDkxNzg0MSwgODYzNSwgCi0gICAgOTgzNjA2LCAxMDYyMywgNDA4LCAxMTkwNTgsIDEyNzUwNywgMTMyOTgsIDAsIDc0MjYsIDQxNjQxLCAxMjcxNywgMCwgCi0gICAgNzYwNywgMTA2MzksIDQzMzk2LCAwLCAwLCA0MTY0MywgNzQxMzQsIDk4MzA1NCwgODcxMywgNDE2NDAsIDEwMjIxLCAKLSAgICA0MTY0NSwgNjY3MTIsIDY2NDUsIDY0NiwgNjY3MjYsIDY2NzExLCA0MjEyOSwgOTM5OTQsIDc3OTAxLCAzNDcyLCA4Njk3LCAKLSAgICAwLCAwLCA5ODM4MDYsIDAsIDAsIDAsIDU4MDksIDE5NTAsIDExOTM1NiwgOTI0MzIsIDc0NTcyLCAwLCA0MjEzNiwgMCwgMCwgCi0gICAgMCwgMCwgMzI0NywgMTE5ODU0LCA2NTAxNywgOTgzOTQ0LCA2ODQyOCwgNjY2NjgsIDAsIDAsIDEwOTgzLCAwLCAwLCAwLCAKLSAgICA0MTU2NywgMCwgMCwgMCwgMTk0NjI0LCAxMTk4NTMsIDAsIDAsIDgyODUsIDAsIDQ1MDksIDAsIDY2NDcxLCAxMjIxNiwgMCwgCi0gICAgNDA5ODgsIDkyNTkyLCA3NDgwOSwgNDE3MjcsIDAsIDQyODQ4LCAyMzk2LCA5MTc3NjYsIDAsIDc0MDE4LCA5MTc1MzgsIAorICAgIDEyNzM3MiwgNjQ0NzUsIDEyODA5OCwgMTM2OSwgOTgzNjcyLCA5OTU5LCA3OTI3LCAwLCA0NTYwLCAwLCAwLCA5MjI3NywgCisgICAgOTgzNjIxLCA2NDk0OCwgNDQzMCwgNzQzNDcsIDQyNjAxLCA0NTE0LCA2NjQzNCwgOTM5NTUsIDgxOTQsIDY1NDYyLCAKKyAgICAxMDYyNiwgMTA5NjUsIDAsIDg4OTMsIDk4MzMwMSwgMTI1NDIsIDAsIDY1MzQxLCAwLCA2NTgyOSwgNzkyNSwgMTE5ODIyLCAKKyAgICAxMDQ3NSwgMCwgMCwgMTM1MiwgMTEwNjksIDc3MDcsIDEyNzU2MCwgMTI2NDg2LCA2NTI3OSwgMTI3MTAyLCA2ODIwNywgCisgICAgMTI3MTAwLCA3MDk5LCA2MDQwLCAxMjcwOTcsIDEwMDcxLCAwLCA5MzM2LCA0Mzc1MCwgMCwgODg5OSwgNzc5OCwgNjQ0NzQsIAorICAgIDY0MjU5LCA2OTg3MywgNjUxODgsIDc4MjAsIDQzMDE4LCAxMjcwODIsIDAsIDc3NDYsIDE0OTIsIDc4NTUxLCAxMDg4NCwgCisgICAgNzc5ODIsIDAsIDUxMjcsIDExMjg1LCA0MjUwMSwgNTQ5NSwgNDI3MywgNDMwOTUsIDQxNDI2LCAxMDg0OSwgNTczMCwgCisgICAgMjk5OSwgNjM0MiwgNjg2MzYsIDc0MzA0LCAzNzEsIDY0MzczLCA2MDIzLCAxNjksIDU0OTcsIDExNzA4LCAwLCAwLCA2MzIzLCAKKyAgICAxOTQ2ODQsIDgyMjQsIDAsIDg5MzgsIDYwNDMsIDEyNzM4LCAwLCA5ODMwNzYsIDUzMjEsIDAsIDE5NDc5OCwgMCwgMjU4OSwgCisgICAgNzQzMzIsIDE2ODksIDc4MDIsIDQ2ODMsIDc0MzE4LCA0MjcwNCwgMTIwMjk2LCAxMTkwNSwgMCwgMCwgMTI4NTE2LCAKKyAgICAxMjgxNjMsIDc0NTEzLCA2MDQ5LCAwLCA0MDI3LCA4MzQsIDExODk2MiwgMTgwMywgMCwgMTUwMywgMCwgMCwgNzEzMTIsIAorICAgIDU3MzEsIDEzODEsIDIzODcsIDAsIDAsIDgyODksIDY0NTI1LCA2NTgxNywgMjg4MSwgNDMxNDIsIDAsIDk2MDEsIDI4NzksIAorICAgIDk2NjgsIDk3NjYsIDAsIDU3MjksIDkxNzgzMywgNzQ0MTAsIDYwMzYsIDY0ODgxLCA0MDI2LCA5MzYxLCAxMjcwOTEsIAorICAgIDI4ODcsIDAsIDM1MjYsIDYyOTgsIDAsIDc3ODk3LCAxMjAwOTUsIDc4NTE5LCAwLCA4NTcyLCA2MDIxLCA3Nzg5NiwgCisgICAgMTI4Mjg4LCA3Nzg5NSwgNDMxNTUsIDAsIDExOTg0OSwgMzE0NiwgMTA5NTksIDk0ODMsIDAsIDc3ODkzLCAxMDk4MSwgMTY2LCAKKyAgICA5MTc4NDEsIDg2MzUsIDk4MzYwNiwgMTA2MjMsIDQwOCwgMTE5MDU4LCAxMjc1MDcsIDEzMjk4LCAwLCA3NDI2LCA0MTY0MSwgCisgICAgMTI3MTcsIDAsIDc2MDcsIDEwNjM5LCA0MzM5NiwgMCwgMCwgNDE2NDMsIDc0MTM0LCA5ODMwNTQsIDg3MTMsIDQxNjQwLCAKKyAgICAxMDIyMSwgNDE2NDUsIDY2NzEyLCA2NjQ1LCA2NDYsIDY2NzI2LCA2NjcxMSwgNDIxMjksIDkzOTk0LCA3NzkwMSwgMzQ3MiwgCisgICAgODY5NywgMCwgMCwgOTgzODE1LCAwLCAwLCAwLCA1ODA5LCAxOTUwLCAxMTkzNTYsIDkyNDMyLCA3NDU3MiwgMCwgNDIxMzYsIAorICAgIDAsIDAsIDAsIDAsIDMyNDcsIDExOTg1NCwgNjUwMTcsIDk4Mzk1MywgNjg0MjgsIDY2NjY4LCAwLCAwLCAxMDk4MywgMCwgMCwgCisgICAgMCwgNDE1NjcsIDAsIDAsIDAsIDE5NDYyNCwgMTE5ODUzLCAwLCAwLCA4Mjg1LCAwLCA0NTA5LCAwLCA2NjQ3MSwgMTIyMTYsIAorICAgIDAsIDQwOTg4LCA5MjU5MiwgNzQ4MDksIDQxNzI3LCAwLCA0Mjg0OCwgMjM5NiwgOTE3NzY2LCAwLCA3NDAxOCwgOTE3NTM4LCAKICAgICA2NDk0MCwgNzAyNywgMzg4NiwgMCwgNDI0NTcsIDExOTAwOCwgMCwgOTk2LCA2ODEyMywgOTQwNTgsIDQyNDksIDAsIAogICAgIDkxNzU5NCwgMTE3MDcsIDgyMjIsIDAsIDc5MzksIDkyNDU0LCA5MjQ2MCwgMTI3ODAxLCA5MTc1OTIsIDEyODM1OSwgODUzNCwgCi0gICAgMTI3MTU0LCA0MDk4MywgMCwgOTgzMjM0LCAwLCA3MjAxLCAxMjU2MSwgMCwgNDIzNzEsIDEyNTU4LCAxNTQwLCA5MTc1NDksIAorICAgIDEyNzE1NCwgNDA5ODMsIDAsIDk4MzI0MCwgMCwgNzIwMSwgMTI1NjEsIDAsIDQyMzcxLCAxMjU1OCwgMTU0MCwgOTE3NTQ5LCAKICAgICAxMDA1MiwgNDA5ODIsIDAsIDAsIDE0ODgsIDAsIDAsIDAsIDkxNzU1OSwgMCwgMCwgMTU2MywgMTI4MDM0LCA5NjE5LCAKLSAgICA5ODM5MzEsIDAsIDAsIDEyNzg3MiwgNzEzNjMsIDU4MDMsIDc3OTcsIDYwNzAsIDEwMDA2LCAwLCAyOTIyLCA2MDgyLCAwLCAKLSAgICA2NTAwOSwgOTgzOTMzLCAxMjU2NywgMTI4NzAzLCAwLCA0MTQxMiwgMCwgMCwgMzYwNywgOTIwMCwgMTAwNDYsIDk2MTIsIAorICAgIDk4Mzk0MCwgMCwgMCwgMTI3ODcyLCA3MTM2MywgNTgwMywgNzc5NywgNjA3MCwgMTAwMDYsIDAsIDI5MjIsIDYwODIsIDAsIAorICAgIDY1MDA5LCA5ODM5NDIsIDEyNTY3LCAxMjg3MDMsIDAsIDQxNDEyLCAwLCAwLCAzNjA3LCA5MjAwLCAxMDA0NiwgOTYxMiwgCiAgICAgNDIxNTMsIDgyMTgsIDk0ODUsIDAsIDIwMzIsIDc4MzU0LCAwLCAwLCAwLCAwLCAwLCA0MzA4NSwgNjA1NywgNTA4LCAKICAgICA5Mzk2OCwgMTI4MDE1LCA2Nzk2OCwgMCwgOTI0MDUsIDAsIDAsIDYzOCwgNjA4MywgMTE5MDcyLCAwLCAwLCAyMzA1LCAKICAgICA3ODM0OCwgNjgwOTYsIDAsIDYwNTYsIDY2NTksIDY3OTY5LCAwLCA2MDg1LCAwLCAwLCAzOTE1LCA0MTYzNCwgMCwgNDE2MzksIApAQCAtMTg4MjIsMTUgKzE4ODQxLDE1IEBACiAgICAgMTIzMjgsIDUwMSwgOTM5ODUsIDEwNjAxLCAwLCA1ODMsIDAsIDQxOTc3LCAwLCA2NjAwNCwgMTE5MzUwLCA2NTA1LCAKICAgICA3NDAxMCwgMCwgMTMwNjQsIDU1MjY3LCAxMjA4MTAsIDY1MDAsIDU1MjYsIDY1MDQ5LCAwLCA3Mzc2NCwgMCwgOTIzNzYsIAogICAgIDEyNzQ1LCA5Njc4LCAwLCAxMjA1ODcsIDk4NjksIDEyODgxNSwgMTc3MSwgMCwgODkzNiwgMCwgMCwgNDIwOCwgNzgzNDEsIAotICAgIDc4NTY3LCA3ODM0MiwgMCwgOTgzNDQ4LCA3NDEwMSwgMCwgMTE3NjIsIDAsIDkyNDIyLCA3Nzk5NywgNjgwMTAsIDY2NDc1LCAKKyAgICA3ODU2NywgNzgzNDIsIDAsIDk4MzQ1NiwgNzQxMDEsIDAsIDExNzYyLCAwLCA5MjQyMiwgNzc5OTcsIDY4MDEwLCA2NjQ3NSwgCiAgICAgMCwgNTAyNywgNzgxNzIsIDEyODg3OCwgMCwgNTA2OSwgNzM4NjIsIDUwMjgsIDk4OTcsIDAsIDczNzM5LCA1MDI2LCAKLSAgICA5ODMyNDcsIDY4NjM5LCA2MzMxLCAxMDA3OSwgODkzMSwgMCwgMTQxNSwgODg2NiwgNDE5MDEsIDc0NzkwLCA3ODEzOCwgCisgICAgOTgzMjUzLCA2ODYzOSwgNjMzMSwgMTAwNzksIDg5MzEsIDAsIDE0MTUsIDg4NjYsIDQxOTAxLCA3NDc5MCwgNzgxMzgsIAogICAgIDExOTM2MSwgOTgzNTY0LCA0MzEwNiwgNTAyOSwgNjUzMDksIDE1ODAsIDM1OTgsIDY4NDI0LCA0MTA3MCwgNzc5MDMsIDAsIAotICAgIDM0NDAsIDc4MjE1LCAxNTYyLCAxMjg2NTYsIDEyNzE3NSwgMTE5MzU4LCAxNzE2LCA5ODM2NzAsIDEwNjAwLCA5MTc4NjcsIAorICAgIDM0NDAsIDc4MjE1LCAxNTYyLCAxMjg2NTYsIDEyNzE3NSwgMTE5MzU4LCAxNzE2LCA5ODM2NzksIDEwNjAwLCA5MTc4NjcsIAogICAgIDYyMCwgNDEwMDEsIDYwMjgsIDAsIDQyODkyLCAwLCA3NDgyMiwgNTAyNCwgMTIwODI5LCA0MTAwMywgMCwgNTAyNSwgCi0gICAgNjk4OTIsIDk4MzIwNywgMCwgMTE4ODg1LCAwLCA2NTU1NywgMCwgNzQ1NDEsIDk4MzU4NywgMTE1OTksIDEyODIwOSwgCisgICAgNjk4OTIsIDk4MzIwOSwgMCwgMTE4ODg1LCAwLCA2NTU1NywgMCwgNzQ1NDEsIDk4MzU4NywgMTE1OTksIDEyODIwOSwgCiAgICAgMTE2MDIsIDYyNDMsIDExNTc0LCAxMTU4MSwgMTE1OTcsIDExNTk4LCA2MjUzLCA2MTA1LCAxMTU4NCwgNzQxOTUsIDExNTY5LCAKLSAgICA2NTI3NSwgODkwNiwgMTI3MDk2LCA1NzU1LCAyNjM2LCAwLCAxMDgxNSwgMTE2MTksIDIzMDEsIDQxNTQwLCA3ODE1LCAKKyAgICA2NTI3NSwgODkwNiwgMTI3MDk2LCA1NzU1LCAyNjM2LCA5ODMyMjcsIDEwODE1LCAxMTYxOSwgMjMwMSwgNDE1NDAsIDc4MTUsIAogICAgIDExNjE2LCA2OTc5LCAxMjA4MCwgNzcyMSwgMTE2MDQsIDc4NjksIDE1OTIsIDAsIDQyMTUyLCA3ODQ5OCwgNDEwNDgsIAogICAgIDkxNzc2MywgODI5LCAwLCA5MjQwNiwgMTk5NTAsIDAsIDEyNjQ4MiwgNjYxNiwgMCwgMTE4ODc1LCAxMDk1MywgMzkxLCAwLCAKICAgICA2OTc4NSwgNDgyLCA0MjI5NiwgMTE1ODgsIDAsIDQzNjA2LCAwLCA2ODM5NywgNjYzNzAsIDc0NTA2LCA0MjMzNSwgCkBAIC0xODgzOSw5ICsxODg1OCw5IEBACiAgICAgMTEzMzcsIDc4MjA5LCA5MTc4MjAsIDYzOTg5LCAzOTU4LCAxMjEzMiwgMTg0OSwgMCwgOTkyMSwgNDI0NTEsIDQyNTMsIAogICAgIDQxMTQ3LCA0MjA2NCwgMTE5NTksIDQyNDA0LCA0MTE2MCwgMCwgMzYxOCwgNzgzMzgsIDAsIDQzMzAwLCA1MTU2LCA5MjYyOSwgCiAgICAgMCwgOTI5LCA2ODI3LCA0MjAzNSwgNDI0MzcsIDE1NTUsIDAsIDg2OTEsIDY2NDM1LCAyMjE1LCA0MTY2MiwgOTQwMTAsIDAsIAotICAgIDAsIDAsIDkzOTUyLCA0NTc4LCA2NDUxMywgNDE2NjQsIDk4MzcyNSwgNDI1NzgsIDEyODc5NCwgNDE2NjEsIDc4NzE1LCAKKyAgICAwLCAwLCA5Mzk1MiwgNDU3OCwgNjQ1MTMsIDQxNjY0LCA5ODM3MzQsIDQyNTc4LCAxMjg3OTQsIDQxNjYxLCA3ODcxNSwgCiAgICAgNDMyNjcsIDkzNTYsIDAsIDAsIDAsIDEyODYsIDEwMTY2LCAwLCAwLCA2NDcwNywgOTgzMTI3LCA0MjQ3NiwgNzczMCwgCi0gICAgOTgzODUwLCAxMjg1MjIsIDQyNDgzLCAwLCAwLCA0MjMyNCwgNDIyOTEsIDEwMDIwLCA0MzM1OSwgMCwgNjY0MSwgNTI1LCAKKyAgICA5ODM4NTksIDEyODUyMiwgNDI0ODMsIDAsIDAsIDQyMzI0LCA0MjI5MSwgMTAwMjAsIDQzMzU5LCAwLCA2NjQxLCA1MjUsIAogICAgIDQxNjI3LCA5MTc5MjMsIDg3NjMsIDEyODMwNCwgNDE2MjgsIDUzMywgMTE5MzEsIDY1MjI1LCA4MzIxLCA0MjUwNCwgCiAgICAgNDI1ODEsIDAsIDY5MTUsIDQyMzEwLCA0Mzc3LCA4NTU5LCAwLCA3NDM2MCwgMCwgMTMxOTMsIDY0MzUwLCAxMTY2NiwgCiAgICAgODY3OSwgNDE5MjQsIDE1NzYsIDc3MzUsIDkyMzk4LCAwLCA3Mzg0MCwgOTgzMDkyLCAxMTM3NCwgNzgwNDMsIDEwODg5LCAKQEAgLTE4ODU5LDI0ICsxODg3OCwyNCBAQAogICAgIDgyNDQsIDM2MiwgOTI0MzksIDAsIDgwMzcsIDQzNzc3LCAxMTUzNSwgMCwgNzQ4NDUsIDUxODUsIDcxNjUsIDU1MjEsIAogICAgIDEwMzM0LCAyMDkzLCA3MTMyOSwgMTAzMDIsIDEyODExMiwgMTAxMDQsIDEwMjcsIDUxODEsIDAsIDAsIDEwNTIzLCAxNDQ2LCAKICAgICA0MjMyMCwgNDE2NDYsIDk5MSwgNTE4OSwgNDI0NzIsIDQxNjQ3LCAxMjAxMDUsIDE3MjIsIDU1ODEsIDQyODk4LCAzNDA1LCAKLSAgICAwLCAxOTQ2NDQsIDU1MjMsIDAsIDQyNjIwLCA5MjQ0NywgOTgzODEwLCA5NTQ5LCAwLCAxMDU0OSwgNTUyODIsIDk2NjEsIAotICAgIDQzNjgyLCAwLCA3NzkxMCwgMTIwMDI2LCA3ODcwOCwgMCwgNzc5MTEsIDAsIDQxOTkxLCA5ODM4ODQsIDAsIDc2MzAsIAorICAgIDAsIDE5NDY0NCwgNTUyMywgMCwgNDI2MjAsIDkyNDQ3LCA5ODM4MTksIDk1NDksIDAsIDEwNTQ5LCA1NTI4MiwgOTY2MSwgCisgICAgNDM2ODIsIDAsIDc3OTEwLCAxMjAwMjYsIDc4NzA4LCAwLCA3NzkxMSwgMCwgNDE5OTEsIDk4Mzg5MywgMCwgNzYzMCwgCiAgICAgOTg0NiwgNzY4NCwgMTAzNTAsIDAsIDExNzQsIDc3OTgxLCA0MjczMywgNzc5NzgsIDc3OTgwLCA2NjQ4NSwgNzc5NzcsIAogICAgIDQyMjc3LCA3Nzk3NCwgNDI0NTYsIDY1NjY3LCAxMjcwMzcsIDEyMzMwLCAxMjgyNzIsIDAsIDQyNDE3LCA0MjM4MywgCiAgICAgNjY2MzAsIDQxMzQ0LCA2MjkzLCAwLCA2NjI1MiwgNzc5ODQsIDc0NDQzLCAwLCAxMDIwOSwgODMxMywgNDE5NSwgNzQ0MzUsIAotICAgIDEzMTYsIDY2NjkwLCAxMjAwMzIsIDYzMzIsIDY0ODk0LCAwLCA2NTg3MSwgNzgwNjAsIDE3MzYsIDk4MzY3NSwgMzkwMSwgCisgICAgMTMxNiwgNjY2OTAsIDEyMDAzMiwgNjMzMiwgNjQ4OTQsIDAsIDY1ODcxLCA3ODA2MCwgMTczNiwgOTgzNjg0LCAzOTAxLCAKICAgICAxMjIyOCwgMTIwMTUxLCA2NTIwMCwgMzM4MywgMTA0NDYsIDc4ODQxLCA2OTMsIDkxMzAsIDMxNCwgNjQxNDksIDQyNDIwLCAKLSAgICAxMTk0OSwgOTgzNjYwLCAxMjAxNTIsIDExMDI2LCAxMjg3ODgsIDUzMzIsIDY5NDAsIDY0MTU0LCAxMjYzNSwgMTI3MDA3LCAKKyAgICAxMTk0OSwgOTgzNjY5LCAxMjAxNTIsIDExMDI2LCAxMjg3ODgsIDUzMzIsIDY5NDAsIDY0MTU0LCAxMjYzNSwgMTI3MDA3LCAKICAgICA0MjcwNiwgMTc1MSwgMjczLCA4MTY1LCAxMzE2NiwgMTIwNzYzLCA3ODg0MCwgNzEzNjgsIDEyODI0LCAwLCA0NTI4LCAKICAgICA1MzIwLCA2MzAxLCA0MzY2MiwgNjEzMywgOTMzOSwgOTQ2MywgNDIzNDYsIDEwOTIyLCA2NDU2MCwgMzc1NywgMCwgMCwgMCwgCi0gICAgNjU4NjksIDczNzYwLCAyNTY5LCAwLCAyMzI2LCA2NTc0MCwgMjU2NSwgNDI0NTksIDc1OTYsIDc5MjEsIDk4Mzg1OSwgCi0gICAgNzQwOTUsIDEyNzk4MSwgNDE4NDgsIDI1NjcsIDY2MDA2LCAwLCA0MDQ0LCA5MjY0NiwgMCwgMTIyMzMsIDk4Mzg2MiwgCisgICAgNjU4NjksIDczNzYwLCAyNTY5LCAwLCAyMzI2LCA2NTc0MCwgMjU2NSwgNDI0NTksIDc1OTYsIDc5MjEsIDk4Mzg2OCwgCisgICAgNzQwOTUsIDEyNzk4MSwgNDE4NDgsIDI1NjcsIDY2MDA2LCAwLCA0MDQ0LCA5MjY0NiwgMCwgMTIyMzMsIDk4Mzg3MSwgCiAgICAgMTAyMywgNDc0LCAwLCAxMTk4MTgsIDAsIDAsIDQyNDg3LCA2NTU1NiwgMCwgMTI3ODY2LCA0MjI5NSwgMCwgMCwgNzEzMjIsIAogICAgIDkyNTE4LCA5ODM1LCA2NjQ5OSwgMCwgNTQxNywgMTIyNzUsIDEwODk1LCAwLCAyNzQsIDAsIDE4NTgsIDAsIDAsIDU1MjUxLCAKICAgICAxMDExOCwgMzEzMywgMTI4MDA4LCA3Mzc5NSwgMCwgOTYxMCwgODA2OCwgODE5NywgMCwgNjk5LCAwLCA0MTY2NSwgNTg2OCwgCiAgICAgMCwgOTI2OTUsIDQyMTgyLCA3NTgxLCAxOTk0MCwgNDM2NjgsIDQxNjY3LCAxMjgwNTcsIDAsIDE5MjMsIDY1NTgzLCAKICAgICA2NTgwMiwgOTM5NzAsIDY0NTk3LCA0MzQ0NCwgMTE5MTg0LCA5MjE5NywgMCwgNjQ2NCwgNzAzNiwgMjk5NiwgMTkzNywgCi0gICAgOTgzNzQyLCAwLCA0MTgzNSwgNDA0NywgNDE4NDIsIDAsIDY0MTA3LCAwLCAwLCAxMTAxNywgMTIwNjAxLCAwLCAyOTMsIAorICAgIDk4Mzc1MSwgMCwgNDE4MzUsIDQwNDcsIDQxODQyLCAwLCA2NDEwNywgMCwgMCwgMTEwMTcsIDEyMDYwMSwgMCwgMjkzLCAKICAgICA3Nzk2NiwgOTIxNjksIDY0NzkxLCA0MTgyNywgNDI0NjYsIDQzNDIyLCAxMDU3OSwgODU2MCwgNzEzNTAsIDY1NDEzLCAKICAgICA3Nzk2MywgNDgwMywgMTI5NjQsIDE3MzksIDE5NDEsIDM5MDAsIDAsIDE3MTMsIDc3OTY5LCAwLCA3Mzk1NywgMTE0MDcsIAogICAgIDQyNDQxLCA0MTk3MSwgNjI5NywgMTIwMDk4LCA2NDEwNSwgMTI4MDgwLCA0MjQ4MSwgMTE3MTYsIDY2NDczLCA3MTc5LCAKQEAgLTE4ODk0LDMzNyArMTg5MTMsMzM4IEBACiAgICAgMzY1OSwgOTUzMywgMTg0LCAxNTUzLCAxMzEwNywgNjU0ODQsIDY5NjQ4LCAxMDUwMiwgNzQ0NTcsIDAsIDAsIDQxNTU0LCAwLCAKICAgICA4MjIwLCA5MTc5NDMsIDQxNTU3LCAwLCAwLCAxMTA3MCwgMTE5MjIxLCA1MTU3LCA0MDIwLCA3Mzg1OCwgNDE1NTUsIDk1MTQsIAogICAgIDY0ODE4LCA2NTEwMywgNjQ2NDEsIDY0MzAzLCA3ODEzMSwgNzUyMCwgMCwgNzQzNzcsIDExMDI5LCA2NjY1MSwgOTgzMDY4LCAKLSAgICAwLCAxMTg5MzAsIDY0NTI3LCAwLCA3ODc3LCA3MzgwMywgOTgzNzg5LCAxMjczNDgsIDEyMDA5NiwgNzQ2MDIsIDk5NTUsIAorICAgIDAsIDExODkzMCwgNjQ1MjcsIDAsIDc4NzcsIDczODAzLCA5ODM3OTgsIDEyNzM0OCwgMTIwMDk2LCA3NDYwMiwgOTk1NSwgCiAgICAgMTE5NTU3LCA0MDU1LCA0MjgxNywgMCwgNjUyMTIsIDExNzE1LCAxMjE5MCwgMTIzMTksIDc4NjMwLCAwLCA3ODYzMSwgCiAgICAgOTUwMiwgNjU0MjcsIDAsIDY1NDI0LCAxMjYwNywgMCwgOTczNCwgNjU0MjUsIDAsIDAsIDEyNzM1NywgNzg4MzUsIDkyNDEwLCAKICAgICAxMDExMiwgMTA4MjcsIDAsIDk4NjYsIDc0NTI3LCA2NjY3NSwgMCwgODYyNSwgNjQzNDYsIDExMjkwLCAxMDQ3NywgMCwgCi0gICAgODYzNiwgOTgzOTE4LCA4MzE1LCA2NTQ0NCwgOTgzNzg0LCAwLCA3NDU5NSwgNjE1MiwgMCwgMCwgNjYyOSwgMTI3MTA4LCAKKyAgICA4NjM2LCA5ODM5MjcsIDgzMTUsIDY1NDQ0LCA5ODM3OTMsIDAsIDc0NTk1LCA2MTUyLCAwLCAwLCA2NjI5LCAxMjcxMDgsIAogICAgIDEyMDE3MSwgMCwgNzQ1ODksIDQzOTkzLCAwLCA2OTc5MCwgNjQ0MzUsIDAsIDQzNjkwLCAxMTA0NiwgMTE0OTAsIDQyNzMwLCAKICAgICA0NDg1LCAxMjcxMDcsIDAsIDY0OTI2LCAwLCAwLCAwLCA1ODY5LCAxMjQzNywgNDI3MjgsIDAsIDcwNDAsIDM1ODgsIDAsIAotICAgIDEyODI1LCAwLCAwLCAxMjcyNSwgMCwgMCwgNzg2NDIsIDIyMywgMCwgNjk2NzUsIDEyMDE2NiwgNDI0NDQsIDAsIDY0NDk5LCAKLSAgICA2NTI0NSwgMCwgMTE3MSwgMCwgNjk3MTcsIDAsIDE4MDUsIDg3NzIsIDQzODIwLCAwLCA5OTMwLCA2NTI0NywgNzg2MTksIAotICAgIDEyMDExMSwgMjMzOCwgMCwgMTE4ODUzLCAwLCA0MjY3NiwgMCwgNjQ4MDAsIDY1MjM2LCA2NzY0NCwgNjgxMjYsIDEyMTMsIAotICAgIDAsIDY0MDc1LCA3OTcsIDY0MDc0LCA4NzM0LCA0MjEyLCAxMjczNjksIDY0Mzg3LCA0MTE1LCAwLCA1MDA1LCA2NDA3MCwgCi0gICAgNjQwNzMsIDEwNjc5LCAwLCA3Nzk1NCwgOTQwMiwgNjQyNzYsIDQyNiwgMCwgMCwgODI1MSwgMTAxMzYsIDY1NDM2LCAwLCAKLSAgICAyMTIwLCA0MzMwMiwgMTIyNCwgMCwgNjU1NzYsIDc0MTkyLCAxMDcwMSwgMTc2NCwgMzEwMSwgMTI3ODE1LCAxMjg1OCwgCi0gICAgMTIwMTU5LCAwLCAxMTM3MywgNjM3OCwgMTI3ODU5LCAxMjAxMDMsIDg2NjMsIDkzMTIsIDQxNjQ0LCA0NTM5LCAyMTI5LCAwLCAKLSAgICA5MjIyLCA5ODM3MjksIDAsIDQyNTksIDkwOTIsIDc0NTY3LCA0MTk2MSwgMCwgMTI3MjQsIDY2MzU3LCA0MjMzMSwgNjQ5MzUsIAotICAgIDAsIDAsIDEyOTMsIDc5NDcsIDIxMzIsIDk4Mzc1OCwgNzQ1OTMsIDEyMDMwOCwgMjQ1NCwgNDI3MTcsIDM2MTMsIDEyODgzNywgCi0gICAgMCwgMCwgNjU4ODgsIDg4MTYsIDEwOTc4LCAxMDg0MCwgMCwgMTA2NjgsIDAsIDQzMDg3LCAxMjU5NSwgMTIwMzA0LCAKLSAgICA5ODMxMTQsIDg4MjIsIDAsIDExNTcsIDY0OTAzLCA4NjM4LCAwLCAwLCAwLCAwLCA2OTg0OCwgODIzNSwgMTIwMzE2LCAKLSAgICA0NDA1LCAxMDA4NiwgMTIwMjQ3LCAwLCA2OTIxNiwgMCwgNjU0MzAsIDcxMzIxLCA2MDc5LCA2ODE3LCAxMDc2NCwgCi0gICAgMTI3OTEwLCA2NDI5MSwgMTI4MDUxLCA5OTgsIDEyMDMxMiwgMTEwNjIsIDEzMTcsIDY0MzI3LCAxNTU4LCAwLCAxOTkxLCAKLSAgICA3ODgyLCA0MjI1NCwgMCwgNDE3MDAsIDUzMCwgMCwgMTA0MjgsIDExOTMzNSwgMTIwMDIsIDExOTMzNiwgNTc0MiwgNDMwNzYsIAotICAgIDQ2OTIsIDY0NjMwLCA0MTgyMywgNDAwNywgNTAwNCwgMTE5MzM0LCA3ODk2LCA3NTEsIDY1OTUsIDY1OTYsIDEyMDMyNSwgCi0gICAgNjYzNzMsIDAsIDAsIDY0OTA4LCA5MjY5MSwgNjMxMSwgMCwgMTIwMDQsIDExOTE5MiwgMTIwNDksIDQzMTA4LCAxMjAzMjYsIAotICAgIDAsIDQxNzA1LCA5MjE4OCwgNjU5OCwgMCwgNjU5OSwgMTIwMzM0LCAwLCA0MjE0OCwgMTE4ODI1LCA2NjAyNywgMCwgNjU5NywgCi0gICAgOTQxMiwgODM0MCwgMTE4MjQsIDY0NzQ1LCAyMjgxLCA2OTkwNCwgMCwgMTk4OCwgNTQwNywgNjc4NjUsIDI0MzAsIDQxNjc4LCAKLSAgICAwLCAxMjAyNDMsIDIzMzYsIDk4Mzg5NCwgMCwgNzg4NzEsIDEyMDQ0MiwgOTgzNzYwLCAxOTIxLCAxMDk0NywgMTk5MjcsIDAsIAotICAgIDY1NDA2LCAwLCAxOTkxMywgNDI4NCwgMTMyMTcsIDAsIDQzNzg5LCAxMjg0MSwgOTIyOSwgMTA5NTYsIDQyMjg1LCA0MTY3NCwgCi0gICAgMTk5NjQsIDQxNjc5LCA2NTA4NCwgMzUyMSwgMCwgNTc3NCwgODMyNSwgMCwgNjU0MDMsIDk4MzA4OSwgMTg1NCwgMTA3OTQsIAotICAgIDAsIDY3NjYwLCA2OTg0NiwgMCwgNzgzNTksIDUyODAsIDAsIDQzNDQsIDEyOTA1LCA2NTQzMywgNjA3NiwgNjQ3OTMsIAotICAgIDQxNjEwLCA3NjgsIDEyMDc0LCA0NDIsIDAsIDY4MTYyLCA2NDA4MSwgMTI5MzQsIDQxNjgyLCA2NTQzMiwgNDE2OTMsIDAsIAotICAgIDYwNzEsIDY1NDM0LCAxMjc0NjcsIDQ4MDQsIDQwNTMsIDAsIDEyNzQ2OSwgMTk0NjUzLCA0MTY5NiwgNDY3LCA2OTgyMywgCi0gICAgMTI3NDYzLCA2OTc5NywgMTk0NjUyLCAxMjc0NzMsIDg0MjEsIDEyNzQ3MiwgNjk2ODIsIDQzNzA1LCA1MDIsIDAsIDY1NDMxLCAKLSAgICAxMTkwNTYsIDY5OTU0LCAxMjA0MywgMTMwMywgMzE2LCA3MzY0LCAyMDI5LCAyMTM2LCAxMTkyNDYsIDExNTMzLCA2NDM2NSwgCi0gICAgNDM0ODAsIDkyNjM5LCA0ODYwLCAxMjY2NDgsIDEyNzg3NywgNDI0ODgsIDAsIDk1ODMsIDEyODg0OSwgNTU0NiwgODAxOSwgCi0gICAgNzM4NTYsIDAsIDAsIDAsIDU1NDQsIDIzNTUsIDEyMTUwLCA2NTcyNSwgNTU0MywgNzc5ODksIDYzNzUxLCAxMjEzNywgCi0gICAgNTU0OCwgNzc5ODUsIDAsIDY1NzI3LCA2ODM4OCwgNjU3MjYsIDYwNzcsIDEyODM1MiwgNjU0NTIsIDAsIDExMzAxLCAKLSAgICA3ODAxMywgNzgwMDgsIDc4MDEwLCA5ODc0LCA3ODAwNywgMCwgMTMxOSwgMzA1MCwgNjU0MTAsIDAsIDAsIDc4MDE2LCAKLSAgICA3ODAxNywgNDI4MzAsIDQzOTk2LCA2NjcxNiwgMTI4MTM3LCA0NjkxLCA5MjI0MiwgOTM0NSwgNjIxLCA5MjcwOSwgCi0gICAgMTI4MjIyLCAwLCA2NTQxMSwgMCwgNDExODIsIDczODgxLCA2NTQwOCwgNzM4OTksIDc4MDI0LCA5NDc0LCAxMDU0NSwgCi0gICAgMTE5MTE4LCAxMDg4NywgMzc4NiwgNjU0MDksIDg4OTQsIDQzMTc5LCAxMTk2MTEsIDc5MjMsIDM3MTYsIDkyMzYzLCA5OTk2LCAKLSAgICA4NTA4LCAwLCA3MDEyLCA4MTk1LCAxMjc4MzQsIDk1NjYsIDAsIDM3MjIsIDAsIDQxNzA3LCA4NDkzLCA1NDUsIDk1NzUsIAotICAgIDQxMzc5LCAxMDA1MCwgMTI3MTgsIDY5ODU0LCA4ODU5LCA2ODIwLCA3NDM0NSwgNjUxMTAsIDEyMDc0MCwgMCwgMCwgOTExOSwgCi0gICAgMjc4NywgNzkyMCwgMTE4ODIzLCA0MDIxLCAyMDEyLCA3OTg1LCAwLCAxMTk2NjMsIDAsIDAsIDc4MDIxLCA3ODAyMiwgNDEwLCAKLSAgICA3ODAyMCwgMTgwMiwgNzgwMTgsIDc0MTA3LCAwLCA0MTY1OSwgNDE2NzEsIDE4MjcsIDAsIDY0Mzk2LCAxMDEyNiwgMTIxMTYsIAotICAgIDQxNjczLCAxMjAzNzAsIDExNDIyLCA3ODE0MSwgMTIwMzczLCAzODYwLCAxMjAzNjcsIDY4NDEyLCA0MTM0NSwgMTIwMzYyLCAKLSAgICAxMjAzNjMsIDExNzQ4LCA0MjE1OCwgNzk0MSwgMTEwNzYsIDg3NDksIDEyMDM2MSwgMjEwNCwgNjQ4NTgsIDM2MSwgCi0gICAgMTIwMzU3LCA4NDUsIDAsIDQxNTYwLCAxMTk3MCwgNDU2MiwgOTE3OTIwLCAyOTI2LCA5MTc5MTksIDQ1NjksIDc0MTMwLCAwLCAKLSAgICA0MzQ4NywgMTk0NjMwLCA2MTEsIDc0MTI5LCA2NDg3MSwgMTE4ODkxLCA2NTYyOSwgMCwgMTk0ODU4LCAwLCAwLCAxMjc1NDUsIAotICAgIDEyMDU0MywgMCwgMCwgNjI5MSwgMCwgNzg2MzksIDQxNjY5LCA3MDk0LCA5MTc5MjEsIDAsIDk4MzU4MSwgNzQwNTQsIAotICAgIDEyNzc1NCwgMTk1MDI5LCAwLCA4MzksIDk4MzMxMSwgNzY5NSwgODc2OSwgNjUyNDYsIDQ4MjksIDE5NDY2MywgNDg1OSwgCi0gICAgNjQ0NjcsIDAsIDk4Mzk1NCwgMTE4OTk4LCA3MjA2LCAwLCA2NjQ3LCA0Mzk4NiwgMCwgNjk3NjYsIDAsIDY0NzY0LCA0MjEwLCAKLSAgICA5ODM4NTQsIDEyNzkzNiwgODA0LCAwLCAwLCAxMjI5OCwgMCwgNjY2NTMsIDAsIDY0OTI0LCAxMDA5MSwgNzM5MzEsIDk0NjgsIAotICAgIDc0MjQ1LCAwLCAwLCA3NDI0NiwgOTI1MDMsIDEyODM5LCA2NDY2OSwgOTIyMDIsIDAsIDEyNzksIDE0MjUsIDYyMjQsIAotICAgIDExOTIyOSwgMTEwNDksIDAsIDkyNjk3LCA0MzIzOSwgODQ4MiwgOTI0NDAsIDAsIDUwMzIsIDY5Njc3LCAxMTk0MCwgCi0gICAgNjc4ODgsIDY2NCwgMTIwNDM3LCA1MDM0LCAwLCAwLCAxMjc1MjUsIDQyNzAyLCA3Mzg4OCwgOTgzMTQ5LCAxMzI5NCwgCi0gICAgNjc4NzMsIDY0ODY5LCA2MDMyLCAwLCA5MTE1LCA3NDMwLCAxMjAzNzcsIDAsIDEyMDgxOSwgNjgzODcsIDEyMDE2OCwgCi0gICAgNzM5MTMsIDEyMDE3MCwgNDExNjEsIDU1MTgsIDQxNzQsIDEwOTkzLCA0MTE2MiwgMTIwMTYwLCA2NDUyOCwgMTE2OSwgNDM0LCAKLSAgICA0MTQzNywgMTkwNSwgNjAzNCwgNDExNjQsIDY0NzQ0LCA5NTI4LCAxMTg4NjcsIDEyODgwMCwgNTI0LCAwLCA3NDAyOSwgCi0gICAgNzg4LCA3NDAyNywgMCwgMTk0NjM4LCAwLCAxNjYzLCAxMDQxOSwgNzQwMjUsIDQyNjM2LCAwLCA2OTcyNSwgMCwgMTIwNjU2LCAKLSAgICAwLCA2Nzg3NiwgMCwgMCwgMCwgNjc4OTcsIDc0MDM5LCAwLCAwLCAxMTM5NSwgMCwgMTE5MTA3LCA0MzYxMiwgNjQzNDQsIDAsIAotICAgIDAsIDEwODU1LCA1NDQ1LCA5MzU1LCAwLCA2NTE5OCwgNzM5MSwgODk4OSwgMjIxLCA2NTY4NiwgMCwgMCwgODAxMCwgNzE5MSwgCi0gICAgNDk2MiwgNjk3NzIsIDg4NTUsIDAsIDAsIDY0NDY5LCAxMjA0MjYsIDEwNTU1LCAwLCA0MzMzMywgOTIyOTksIDAsIAotICAgIDEyMDQyNywgMTA0NTEsIDAsIDY3NjUzLCA3MjQ1LCAxMjQ0MywgNzQ0MDUsIDk5NDcsIDEyMDE0OSwgNzgzMTcsIDM4NzMsIAotICAgIDgzNjcsIDAsIDEyMDE0NiwgNDM0MzMsIDQzNjQ5LCAxMTk4NywgMCwgMCwgMTEwMTAsIDEyNzIzLCA3NDA1OSwgNzQwNjIsIAotICAgIDYyMTcsIDU4OTYsIDAsIDc2ODIsIDc0MDQ5LCAxNDYyLCAxMDIzNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDI1OTUsIDAsIAotICAgIDc0NDAyLCAxMTg4NjAsIDAsIDEyMDQxOSwgOTI0OTcsIDc0MDUyLCAwLCA5MjM3OCwgMTIwNTQ5LCAxMTkwODIsIDY0Mjk1LCAKLSAgICAxMjA0MTgsIDAsIDY0NzY1LCA3MzkyMywgMTIwNDE3LCAxMjA2NjIsIDY5OTIwLCAxOTQ3MDIsIDYyMTYsIDAsIDEwNzU1LCAKLSAgICA5NDU1LCAwLCA4MTI0LCAxMjcwNDIsIDk0NzAsIDY5NDQsIDEyNzU0MCwgMCwgNjk2ODAsIDI4MjgsIDAsIDUzMSwgNDI2MzgsIAotICAgIDAsIDAsIDAsIDQzNDI4LCA4MjA0LCAzNjE0LCAyODI3LCA5Njk2LCAwLCAwLCA4NzI4LCA0MzU0LCAxMDkwNCwgNzg1NjIsIAotICAgIDE5OTM2LCA3ODMzLCAxMjA2OTEsIDAsIDQyNTk5LCA0MjU5NywgNDI3MDksIDEyMDQwOSwgMTI3MDQ0LCAwLCA4NTM3LCAwLCAKLSAgICAwLCA5MzU0LCA5ODMxNjQsIDEyODgzMywgNDExOTksIDEwMTIxLCAyMDI4LCAwLCA5ODMxOTQsIDY5NzE1LCAwLCAzMDYyLCAKLSAgICAwLCA3NDQ0NywgMTI2MDgsIDAsIDY2NDQwLCA3NTQ1LCA5NzAwLCAxMjU4MCwgOTIyMDUsIDEyMDc3NywgMTIwNTAyLCAKLSAgICA0MTE1NSwgMCwgNzQwNzEsIDAsIDk4MzQ0OSwgMTI3MTMsIDAsIDAsIDAsIDc4NzcyLCAwLCAxNzM0LCAwLCAwLCAxMjcwNDAsIAotICAgIDY0NTk0LCAyNDU2LCAyMzEsIDAsIDc0MTY3LCA1NDIsIDAsIDExODc4NiwgMCwgOTgzOTcwLCAxMjMwLCAwLCAwLCAzNTk3LCAKLSAgICA0NDQ2LCAxMDU4NCwgNzQyMzUsIDkyMjE1LCA0MDM3LCAxMjc5MzgsIDgzNTIsIDAsIDU2ODcsIDAsIDY0NTE1LCAwLCAKLSAgICAxOTQ4MDEsIDU1MjY1LCA2Nzg0NiwgNzg0MzQsIDk3MDQsIDAsIDAsIDcwMDgwLCA3MTMzOCwgMCwgODY2MCwgMTI2NDk1LCAKLSAgICAwLCAwLCA3ODc3MywgNzQ0ODIsIDQ0ODMsIDE3MDksIDY5NzIxLCA5OTA5LCA2MDgwLCAwLCAxMjAzNTgsIDE3NDYsIDEzMTUsIAotICAgIDg2NjcsIDAsIDAsIDEzMTQwLCA2NTg5OSwgMTA2MDQsIDAsIDQ0ODAsIDExMjY2LCAxMjgxNTIsIDEyMjYsIDY5MzAsIAotICAgIDY3OTc5LCA5ODM2ODEsIDYzNjAsIDEwODk3LCA0MTIzMCwgNjA1LCAwLCA3NDc4NSwgNjk4NzUsIDAsIDAsIDQxNTAwLCAwLCAKLSAgICAzMTEsIDExNDUzLCA2MjIxLCAxMDYwOCwgNjQ5NDMsIDc0MjgwLCAxMDg3NywgMTE4ODY4LCA2NDg4NSwgNzQyNzIsIDAsIDAsIAotICAgIDEyODU1OSwgMTIwNzM2LCA3NDMxMiwgMzQ1LCAwLCA3NDQ1NiwgNjQ2MDYsIDk5MTcsIDAsIDkyMjMxLCA1MDM3LCAwLCAKLSAgICAxNzc2LCA4NDIyLCAwLCAxMTg4MTQsIDQxNTA4LCA0MTIwMSwgMzIzLCA0MzMyOCwgMCwgNDI2OTgsIDEyOTUsIDE5NDg1MywgCi0gICAgNDYyNSwgMCwgNDYzMCwgMTMxMTcsIDAsIDEyODc3MiwgNjUxMjMsIDExMjkzLCAyNjY4LCAxMTI4OCwgMCwgNDI2NDAsIAotICAgIDY1NjY2LCAyNTE5LCA5MjM2OSwgNjU0MjAsIDkyNDc5LCAwLCA0MjUyLCA1MDQ5LCA0MjY1OSwgMTE5MDExLCA3MDYsIAotICAgIDc3NTQsIDEwODU0LCA4NzM4LCAwLCA2NTQxOSwgMCwgMCwgNjQ5LCA2NTQyMSwgMCwgNjY3MDIsIDAsIDEyNjcwLCAxMDEzLCAKLSAgICAwLCA2NDkxOSwgNzA1LCAwLCA2NTQyMiwgMTI3ODAzLCAxMTgzLCAxMjY1MTksIDcwMTcsIDQyODUyLCAwLCA4MTU3LCAKLSAgICA5NzM2LCA2NDUwMywgNjU0MTgsIDAsIDk4Mzg2OSwgNzQwMzUsIDAsIDExOTEzLCA3Mzg3NCwgNjY5NiwgMCwgODkyMCwgCi0gICAgMTE5Mjk4LCAwLCA3OTYyLCAxMjIxMSwgOTgzNywgMjA1MSwgNjYyMjcsIDAsIDQxODQsIDAsIDAsIDEwMTc3LCA3Mzc3NywgCi0gICAgMTg1NywgMTk0NjU3LCA0NjI2LCA4NDY0LCA4NDcyLCAwLCA0NjI5LCA4NDk5LCA3ODMyMSwgNzgzMjIsIDQ2MjQsIDc4MTgsIAotICAgIDExOTE3MywgMCwgMCwgNzgwNSwgMCwgOTQwMDcsIDY5MzUsIDkyMjkyLCA3ODMyNSwgNzgzMjYsIDc4MzIzLCA0MzMyNywgCi0gICAgNDM5ODksIDExOTA0NiwgODQ5MiwgODI1MCwgODQ1OSwgMCwgODQ5NywgODQ5NiwgMCwgMCwgNzgzMzYsIDc4MzM5LCA5NTQzLCAKLSAgICA3ODMzNSwgNzgzMzIsIDc3ODMyLCA2NTg0OSwgNzc4MzEsIDk4Mzk1MiwgMCwgMTI0NTEsIDAsIDg2ODQsIDAsIDYxMDIsIDAsIAotICAgIDUyOTgsIDAsIDUyOTQsIDAsIDAsIDk4MzQ1MSwgMTk1MDYyLCA5OTQ5LCAxMTk4MjYsIDQzNjE3LCAxMTkyMTUsIDAsIAotICAgIDEyMDczLCAwLCAwLCA3Nzg2MywgMTMxMDgsIDEyMDYxNywgMTE0MzksIDQxNDY4LCA5ODM3NDgsIDAsIDUyOTIsIDU1MjcyLCAKLSAgICA5ODM4NzQsIDE5MzksIDUzMDIsIDM5NzAsIDkxNzg3OSwgMTI0NTUsIDE3OTMsIDAsIDAsIDAsIDY2NDMsIDkyNDc3LCAKLSAgICA2NTI2MywgMCwgNzgzMzAsIDQxMjkzLCA3ODMyOCwgNjU5MjMsIDAsIDEzMjE5LCA5NTY5LCAwLCA3NDM4MywgMCwgNzQxOTcsIAotICAgIDAsIDU1MDAsIDg4MTMsIDAsIDAsIDc0NTY2LCA1MzIyLCAwLCA3ODM0MCwgNDM2MzEsIDUzMjQsIDY2NDQzLCAzNzg0LCAKLSAgICA0MTYxNCwgNjUyNjksIDYyMzAsIDc4MzQ5LCA3ODM0NSwgNDMzMjQsIDMzNjAsIDc4MzQ0LCAxMTUyMywgMCwgOTI0ODgsIAotICAgIDk5MjYsIDcxOTcsIDAsIDY4NDI5LCA0Mjg5NCwgNDE4MjEsIDEyNDksIDc4MzYwLCA3ODM2MSwgNzgzNTYsIDc4MzU4LCAKLSAgICA3ODM1MywgNjQ4OTksIDY0NzYzLCA0MTE0OSwgNDE4MDcsIDQzMTYyLCA0MTgxNSwgNDExNTAsIDAsIDEwNTcxLCAxMDA5NiwgCi0gICAgMCwgMCwgNzgwNzQsIDY5NDcsIDQxMTUyLCA4ODcsIDkyNDksIDY1NjUsIDc4NTEwLCA0MTk5MCwgNzg1MDksIDQxODExLCAKLSAgICA3NDQ2NiwgOTM5NjYsIDY2NzAsIDc3ODgyLCAwLCAwLCA0MzA5MiwgNDMzMjUsIDAsIDEwMTY4LCAwLCA5NzgxLCAxMjg2NTUsIAotICAgIDkxOTAsIDAsIDk2NjYsIDgyNjksIDY1OTQ0LCA3NDAwNSwgMTMwMTksIDExNjcwLCA2OTg2MCwgMzE1LCAxMjgxMywgCi0gICAgOTgzNDUwLCA3ODQzMiwgNzgyNTYsIDc4MzUxLCA3ODM1MiwgMCwgOTgzNjQ4LCAwLCAwLCAxMzc4LCA5NTA5LCAwLCAwLCAKLSAgICA3NDQ3NSwgMzA2NiwgOTIyMjAsIDY3ODQ3LCAwLCA5MjM1NSwgMCwgNzgzNjUsIDg3ODcsIDEyMDM3OSwgMTk0NjE2LCAKLSAgICA0MTYxOCwgMTk0NjE1LCA3ODI2MSwgMTk0NjE0LCAwLCA2NDY1MiwgMCwgMTk0NjEyLCAwLCA3ODM2NiwgNDIwODgsIDAsIAotICAgIDE5NTA2MSwgNzE3NiwgNDM3NTYsIDEwMTM3LCA2MTIxLCAxMDk5NSwgNzgyNTksIDc0NTM0LCA4MTE5LCA2NDg3NCwgCi0gICAgOTE3ODE2LCAxMjcxOTksIDE5NDkzOSwgMCwgNzQ1MjUsIDAsIDAsIDEyOTMwLCAxMzk0LCA3NDUxNCwgMCwgNzQ1MTUsIDAsIAotICAgIDExODgwNCwgMjk5OCwgOTUyNywgMTIwNjU5LCA2NTE5MCwgMTI5NzcsIDQyMDkwLCAxMTkxNjUsIDAsIDExOTEwMCwgCi0gICAgNDEyMzYsIDkyMjM1LCA0MjAwNSwgNDIwMDMsIDQxMjM3LCA1ODQ4LCAwLCAwLCAzNjcwLCAxMjg2NTcsIDE5NDYwMCwgMCwgCi0gICAgMCwgNzg5MCwgMCwgMTEyOTgsIDQzMzE1LCAwLCA2MjI5LCAxNTkzLCAwLCAwLCA2MTksIDQ2MzUsIDY1MDgwLCAwLCAKLSAgICAxMjgwMDIsIDQxMjAsIDY1MzM3LCA2NTMzNiwgMCwgMTE4MDgsIDExOTIxNCwgNzQxMTUsIDkzNjYsIDQyNzkwLCA0MjAwNiwgCi0gICAgMTE5MTE1LCA2NTMyNywgNjUzMjYsIDY1MzI1LCAxMDc1NywgMTUwNywgNDIyMTYsIDY1MzIxLCA2NTMyMCwgNjUzMzUsIAotICAgIDY1MzM0LCA2NTMzMywgNjUzMzIsIDY1MzMxLCA0MjA1OSwgNjUzMjksIDQyNjg5LCA5MjQyNywgOTEyOCwgOTQwNDUsIAotICAgIDQyMDczLCA2Nzg1LCA2NDU5MCwgOTgzODIxLCA0MzcxLCA3MTk2LCA2NTMxOCwgMjAzNSwgNjUzMTYsIDQxMDYsIDY1MzE0LCAKLSAgICA2NTMxMywgNDIwNzQsIDEyNzg0NywgNDEyMjgsIDAsIDY1NjA5LCA0MTI0MSwgNzkwMywgNDEyMzksIDQzNTMzLCA3ODQ1OSwgCi0gICAgNzE4OSwgMCwgMCwgMCwgMTIzNTcsIDQyODAyLCA3ODQ1MCwgODQ4NywgOTEzMSwgMCwgNDYxNSwgMTI2OTUsIDEyNzc1MiwgCi0gICAgMCwgMTIxNzUsIDAsIDY0NTM1LCAwLCA3ODA5LCAwLCAwLCA1NjIsIDEyMTY5LCA2NTkwLCA2OTc2MiwgNjY0NTUsIDY0NzM4LCAKLSAgICAzMjE5LCA2ODY1NCwgOTgzNzc4LCAwLCAxMDM3LCAwLCAyMDI1LCAxMjgyNjMsIDEzMDk4LCA3ODQ0MiwgMTA2MzcsIDQ1NjgsIAotICAgIDU0OSwgMTU3MCwgMCwgMjgzNSwgMCwgMTA2MjQsIDQzNjIzLCAxMTA3MiwgMTI3MTkxLCAwLCAwLCAxMjYwNiwgNzg0MzMsIAotICAgIDI4MjUsIDAsIDEwODI1LCA4MDc5LCAyODIxLCA0MTA0NiwgOTIzMjcsIDczNjUsIDk4Mzc0NCwgMTIwNTkzLCAxMzA3MSwgMCwgCi0gICAgNDUyLCA0MTA0OSwgNDI4NDAsIDYzNDYsIDI4MzEsIDU0NjEsIDc0NTk2LCAxMTQ2NSwgNTIxMiwgMCwgNjQ3MDMsIAotICAgIDExOTE5MSwgNDIzMDgsIDcxODEsIDAsIDQxMzMyLCAwLCAxMjMzMywgMCwgMTY2OCwgMCwgMCwgMCwgMTE4NywgOTgzMzc3LCAKLSAgICA0MjYyOCwgNzg1NzUsIDAsIDEyODc3NywgMCwgMzI0MCwgMTI4NTE4LCAxMjE5NCwgMCwgMTE1OTEsIDQxMDY1LCA1MzIzLCAKLSAgICA4MTY2LCAwLCAwLCAwLCA3NDUzNSwgMTYyMywgNjUyOTcsIDEyODg1NiwgNTcxLCAwLCA0OTE4LCAwLCA1Mjg4LCAxMjcyOTUsIAotICAgIDg5MTYsIDY1MDQ4LCAxOTA5LCA4ODY0LCAwLCAwLCAxMDczNiwgOTI1MDgsIDExNTcxLCA3NjE1LCAxMjczMDAsIDkyMjk2LCAKLSAgICA0MjM3LCA5MjU3NiwgMTAzNSwgNjU4MTUsIDAsIDc4ODEsIDcwMSwgNjU5MzYsIDM0ODksIDAsIDAsIDEyMDc1MSwgMTE0MDMsIAotICAgIDAsIDAsIDEyNzE0NiwgMzc5NiwgNjgwMCwgMCwgMzk5NCwgMTE0MjEsIDAsIDE5NTA3NiwgMCwgOTgzOTEzLCAwLCAwLCAKLSAgICA2NDg1NywgMTI4MTA1LCAyODU1LCAxMjc4MjgsIDY2MzA4LCA0MTYyMSwgNjgyMTQsIDEyNzI4MywgMTI3ODE3LCAxMDY1NCwgCi0gICAgMCwgMTE5MjI2LCAxMjE2NCwgMzI0NiwgNzkwNiwgNDM5NzIsIDY1ODQ3LCA3MTgyLCAwLCAxMzAyNCwgMTk0ODIyLCAKLSAgICA3NDI3MCwgMTI4Mjg5LCAwLCAwLCAwLCAxNDk2LCA3NDcsIDAsIDk0MiwgMjM3OCwgNDMxMzYsIDEyNzkwNSwgODQ2NiwgCi0gICAgOTgzNTc1LCA5MzIwLCA4MDAxLCAxMjMyLCA4MTM5LCAxMTYxNywgMCwgMCwgMTE0MDksIDY4MzczLCA2MzgyLCAwLCAKLSAgICA2NDYzNCwgMTI4Mjc5LCAwLCAxMTYxMiwgMCwgNjc2MDAsIDIzNzQsIDk0MDY2LCA4NDc1LCAxMTYwOSwgNjYzMTMsIDAsIDAsIAotICAgIDUyODYsIDExOTI5NywgMCwgMCwgNjQ5MjUsIDEyMDI4MywgMTk0NTg0LCAxMTg5ODIsIDE5NDU4MywgNzcwNSwgMTE5NDIsIAotICAgIDExMzA1LCAxOTQ1ODEsIDMzMDksIDAsIDAsIDAsIDAsIDY4MDIsIDAsIDQxNjUzLCAxMjgwLCAxMjQxLCA3MTY4LCAxMjA5NiwgCi0gICAgMCwgNjY2MTUsIDQyNTY1LCA0MTY1MSwgMCwgMCwgMCwgNDE2NTAsIDY2NTA3LCA2NjQ3MCwgMCwgMTI5MTQsIDQxNDkxLCAKLSAgICA2NjAxMCwgMTE5NTUyLCA2MDc4LCA5OTU0LCAwLCAxNDc1LCAxMTkyNDcsIDk5MzgsIDYwODQsIDkxNzU0NiwgNDEwNjQsIAotICAgIDQxMDYyLCAwLCAwLCAzMjU2LCAxMDE4OSwgNDIwNzYsIDQzMjUyLCA3ODgyMywgOTE3OTA2LCA4NzI3LCAwLCA2NTg3NSwgMCwgCi0gICAgMCwgMTI3NzYyLCAxMDU2MiwgNzQyMTUsIDQzMDY1LCAwLCAwLCAzMjQ4LCA3NDI5NywgMzI2MSwgOTAxNSwgNzEzNTEsIDAsIAotICAgIDM2MzUsIDY0MzM3LCA5ODMyNzMsIDAsIDAsIDcxOTUsIDAsIDIwMDcsIDY0NDMxLCAwLCAwLCAwLCAwLCA2MzUsIDAsIDAsIAotICAgIDY1NjEzLCA3NzkwOSwgOTI0MjAsIDczOTk3LCAwLCAwLCAxMTkyMTgsIDc5ODQsIDg2MDAsIDc0NDM0LCAxMjc3NzAsIAotICAgIDQxNzYsIDcwMDUwLCAyMDM0LCA5MjU1MSwgMTIwODA1LCA2NTg5MSwgMTI3MDM4LCAwLCAzMTgsIDIwMzgsIDEyODg2MCwgCi0gICAgNzg1OTYsIDAsIDM2NDksIDEzMTQ5LCA0MjE0NSwgNDI3OTgsIDM2MzQsIDEyMDI5MSwgMTE4OTI3LCA2NzY3NywgMTIwMTI0LCAKLSAgICA3ODY2LCAwLCAxMTQwMiwgNDIxNDYsIDk0MDMyLCA3NDIzOCwgNDI2NjQsIDI4NDksIDEyNzAzNCwgMCwgNzkzOCwgMTI5NjAsIAotICAgIDE3NjEsIDExODEyLCA2NTM3OSwgNjgzODYsIDEyODE4NSwgMTE1OSwgMCwgNjk3MjksIDAsIDAsIDcxNzgsIDE5NDYzMiwgMCwgCi0gICAgNDE2ODAsIDAsIDEyODIwMywgMTE1MzQsIDE1MTQsIDExNjY4LCA2Nzg5MSwgOTMxMywgNzAxNSwgMCwgNjc4NzcsIAotICAgIDE5NDU2NywgMTI5ODksIDY2NDc0LCA5MzY4LCAxMjg0OCwgMTYyNCwgNDMyNzAsIDAsIDc0Mjc4LCAxMDgxOCwgMTI2NjQ0LCAKLSAgICA5OTUzLCAwLCA3ODQyMSwgMTE5NCwgMzI0MiwgOTc2MSwgOTU1NSwgODU5OCwgMTIwMjk5LCA2MTY5LCAxMjg3MSwgMTU1MSwgCi0gICAgMjc5OCwgNjUxNzYsIDQ5NTgsIDQyNzUyLCAxMTkwMjUsIDAsIDY3ODc1LCAxMjAzMDEsIDM0OTUsIDY2NjQ4LCAxOTQ3NjgsIAotICAgIDAsIDY4MzY0LCA5ODMyMjIsIDQ4OTEsIDAsIDEwNjQxLCAwLCA3Mzc0NiwgMCwgNjgzNTIsIDAsIDczNzg3LCAxOTQ4MjksIAotICAgIDE5NDYzMywgNzE5OSwgNjQ5NTUsIDAsIDAsIDAsIDAsIDAsIDQyNjg1LCA0MjY3OSwgMTkzLCAwLCAwLCAwLCA0MjY2NywgMCwgCi0gICAgNTI3MSwgOTIzMTgsIDkyNTE3LCAxMTg4ODIsIDEzNjIsIDEzMjk3LCAwLCAxMjgwOTQsIDAsIDk4MzMyMywgNzM3ODksIDAsIAotICAgIDY2NTgsIDQ0MjYsIDAsIDkyNjI4LCA5ODM4MzMsIDkyMzE5LCA3Mjc2LCA0MjE2MywgNTIyMCwgMCwgMCwgOTgzMzIyLCAKLSAgICAyNDE2LCAzMzEwLCA0MjcwMywgMCwgMzc5LCAwLCA0Mzc1NSwgMCwgMCwgMzIyMywgNjU0OTIsIDEyODQsIDE5NDc3MSwgCi0gICAgNDU0OSwgMCwgMCwgOTgzMTU0LCAxMjc3NjMsIDEwODA3LCA5NTU4LCAxOTQ2MTMsIDAsIDg1MTUsIDg2ODgsIDEyODY2LCAKLSAgICA2NTMwOCwgMzI5NCwgOTgzMzI0LCA4NTI5LCAxMjgxMDEsIDQzMzg1LCA3NTY0LCAwLCA0MzMyOSwgMCwgOTI0NTgsIAotICAgIDczNzU3LCA2NjQ1NiwgNDIzNTksIDAsIDIwMzEsIDAsIDcyMDIsIDAsIDEyNjc2LCA0MjcyOSwgOTIxOTgsIDMyMTUsIDAsIAotICAgIDc3MTAsIDE2MTAsIDczODAxLCAwLCAwLCA2NTY4MiwgMCwgMTIwNTM3LCA2NTkyNCwgOTk3NCwgMjI4LCA2NjM1NCwgMTUwMSwgCi0gICAgMCwgNjQzOTUsIDUxNzksIDcyMDAsIDYyMjUsIDAsIDY1Nzk0LCAxNzI1LCA2NTUzMywgODE5NiwgNzQ3NiwgNzQzOTksIDAsIAotICAgIDAsIDcxNTIsIDg1MDIsIDU3NjIsIDE5NjcsIDc0ODMsIDAsIDAsIDgxMDQsIDAsIDc0NzQsIDc3OTc5LCAwLCAxMjY1MDcsIAotICAgIDEwNDE0LCAxMzAwMSwgODE0MSwgMCwgNDI1MzcsIDE1NTcsIDQzNTk0LCAxMjg2NDIsIDYzMzAsIDY4MDUsIDg2MzEsIAotICAgIDI1NDUsIDcwMDUyLCAxMjcxNjYsIDAsIDc0MTkwLCAwLCAwLCA5ODM3NzcsIDQyNzYyLCAwLCA0MjkxNCwgMTY1MCwgMjYyLCAKLSAgICAxNjM3LCAwLCA3OTAxLCAzMjM4LCAxMjgxNzMsIDQxODYxLCAwLCAxMjg1ODUsIDY1MTU4LCAxMDg2MCwgOTQwNTksIAotICAgIDQzNjU4LCA3NTI3LCAwLCA0MzMxOSwgNjQxOSwgMCwgNDUsIDAsIDY0NTg4LCA5Mzk4OSwgMCwgMTE5ODEwLCA3MTk0LCAKLSAgICA1MjkxLCAwLCA0MzY2NiwgMTMxMjksIDAsIDkwODQsIDAsIDg3MzcsIDAsIDEyODgxLCAwLCAxMjkwNiwgOTYzOSwgNzkxMiwgCi0gICAgMjYyMCwgMCwgMCwgMCwgOTgzODY2LCAxNzksIDY1ODk2LCAwLCA2NDc1NiwgMjg1MywgNzg0NDMsIDExODgxMywgOTgzODgxLCAKLSAgICAxMTg5OTYsIDExOTAwOSwgMjg1MCwgODA4NCwgOTgzMDg1LCA3Mzg1MCwgMjgwMSwgOTIyODQsIDQyMDY5LCAxMTk4MzksIAotICAgIDc0NzU0LCAxMTk4NDEsIDQyMDcyLCAxMTk4NDMsIDExOTg0MiwgMTAzOTgsIDk4MzA1NiwgMCwgODM3NywgMTI3MTE2LCAKLSAgICA4MjQ1LCA2ODQwMSwgMzE1OCwgOTIzOTYsIDM5ODMsIDQzNjU2LCA5MjMsIDExOTg1NywgMTE5ODU2LCAyOTIsIDEzMDAyLCAKLSAgICAxMTk4NDUsIDExOTg0NCwgMzIyMSwgMTc2MywgOTI0NjMsIDQ2MTIsIDExOTg1MSwgMTE5ODUwLCA3MjUzLCAxMjcxMTAsIAotICAgIDY4MzkxLCAwLCAxMDc4MiwgMzYzNywgMTI5OTYsIDQzNTQyLCAwLCA2NDU3OCwgOTgzNjY2LCAzMjI4LCA2OTYzNiwgODc4MywgCi0gICAgMCwgMTE5NjE0LCAyNzMxLCAwLCAwLCA3ODU4NSwgNDEwMiwgNzY5NiwgNzM4NzgsIDAsIDAsIDc4NTg2LCA0MzMxNiwgCi0gICAgNDE3NywgMTEyODMsIDkwODksIDAsIDczOTk2LCA5ODMxNzMsIDY0NTAwLCA0MzY3NCwgMCwgNjQ5NDcsIDE4NTYsIDAsIDAsIAotICAgIDYzNzksIDAsIDAsIDAsIDMyMDgsIDEyOTc1LCA3NDc3NSwgMTI3MzgwLCA5ODM5MjIsIDkyMzg5LCA3NDA3MiwgNTUyNjksIAotICAgIDAsIDAsIDk4MzY3NCwgMjAzMywgNzg1NzcsIDc4NTc2LCAxOTUwMjYsIDU1MjU0LCA3NzQwLCAwLCAwLCAwLCA3Mzk2NCwgMCwgCi0gICAgOTM5ODgsIDY3NjEyLCA2NTY3NCwgMTI4MjQ0LCA5NDExMCwgNDE2ODksIDAsIDc0MDA2LCA2NDkwOSwgNjY0NiwgMTE3OTAsIAotICAgIDc0MDE5LCAwLCAxMjgwNjYsIDEyODAzMSwgODU2MSwgNDU3MywgMCwgNTMyNiwgMCwgMTIwNjA1LCA3MjMwLCA4MjU3LCAwLCAKLSAgICA4Nzc4LCA0MTY4OCwgMCwgNjU3NzYsIDIwNzEsIDgzMTQsIDY0NTksIDAsIDc2MjgsIDY1MDkyLCA3MzkwMywgNjY3MjEsIAotICAgIDExMzQyLCAxMjg1NjEsIDAsIDAsIDEyODIyNiwgMTI3MDAxLCAwLCAxMTgxMCwgMTMxNjQsIDEwNzIzLCA5NjcsIDk4Mzk0MiwgCi0gICAgMTI2NDY5LCAxMTk0NiwgMCwgMzI1NywgMCwgMTIzMDcsIDE4NDUsIDk4MzE1NywgNDM1MjYsIDAsIDAsIDE4ODYsIDQyMzQyLCAKLSAgICAxMDA4OSwgODcwLCA3NjQ4LCAzNDk5LCA4NjA5LCA3NjUyLCA4NzYsIDg3MSwgODc3LCAwLCA4NzgsIDQyMDE1LCA4NzksIAotICAgIDQzNjkyLCA0NTYzLCAwLCAwLCA3NTkxLCA2NTg4NywgODY3LCA5NTIwLCA4NzIsIDEyNjYwNywgODY4LCA4NzMsIDc2NDIsIAotICAgIDAsIDg2OSwgODc0LCA3NjQ0LCAxMjA2NzQsIDg3NSwgNzkwLCAxMjgzMDMsIDAsIDAsIDAsIDY2MTgyLCA5ODMyNTAsIAotICAgIDU0MjksIDE5NTA1NSwgNjYxODAsIDEyNjQ4MCwgNjYxODEsIDY4NDUyLCA5ODMyODEsIDk4MzI0MiwgNDIwNjcsIDAsIAotICAgIDU0MzMsIDEwNjU3LCA3OTExLCAxOTQ2MjIsIDE1NDcsIDY2MTc2LCA0MjAxMiwgMTIwNTc2LCA1NDI1LCA0OTc3LCA5OTk5LCAKLSAgICA1MzE3LCA1NDIzLCA0NjExLCAwLCA2NzYzNywgMCwgOTY3OSwgNzQxMjIsIDAsIDAsIDAsIDY2MTk0LCA0NDE4LCA2NjE4NCwgCi0gICAgNDYyOCwgNDI0NSwgMTE5NjQ4LCAwLCAwLCAxODUxLCAwLCAxMjcxODksIDExOTA4LCAwLCA5MzYwLCAxMTg4OTcsIAotICAgIDk4MzI3MCwgNDI3NzYsIDY2MTg3LCAxMjgzNywgODgyOSwgNzcxMSwgOTI3MTQsIDAsIDkyMzIxLCA0MzMxOCwgMCwgODgwOSwgCi0gICAgNjk4ODEsIDAsIDk4MzE0MiwgMTIwNjA0LCA5ODMwNTIsIDk4Mzg3MywgMCwgOTgzMjYyLCAwLCAwLCA3NDI3LCA5OTU4LCAKLSAgICA0NTg4LCA0MzY4MCwgMCwgNzQ0ODQsIDE5NDk2OCwgMjQzMywgMCwgMTE5NjIyLCAzMzUyLCA3NDM2MywgOTgzODc2LCAwLCAKLSAgICA3OTMsIDc0NDA0LCAwLCAzMDUsIDU2NywgNjc2NjIsIDg0MiwgMTI4NTE5LCA4MjA4LCAwLCA0MTY5NSwgMTY0NywgCi0gICAgMTE4ODc3LCAwLCA3ODM3LCA5MTc2MjUsIDgxOCwgNTMzNywgMTk0NjI4LCA5MTc2MjEsIDQxMzc2LCAxMTk5NzgsIAotICAgIDEyNjU3NiwgMTIwNTk0LCA3NDA4NiwgOTE3NjE1LCA5MTc2MTQsIDkxNzYxMywgMTA5NzMsIDY2MzU5LCAxMzcyLCAKLSAgICAxMjcxNzIsIDkxNzYwOCwgNDk2OSwgMTI1NCwgOTE3NjA1LCA5MTc2MDQsIDkzOTY3LCA5MTc2MDIsIDY1MjI4LCA3ODIyMSwgCi0gICAgMTI2NjEyLCAwLCAyODQwLCAwLCAxMTk5ODIsIDk4MzkzMCwgMCwgMzI0NSwgOTA2OCwgNjgxOTQsIDY0NzI1LCAwLCAwLCAKLSAgICAxMjk5MSwgMCwgMjY1MSwgNjgwMTYsIDk4MzI1NywgOTE3NjExLCAxMjcwMjYsIDEyODg4MywgMCwgMCwgNDM2NDgsIAotICAgIDEyMDgxMiwgMCwgNDMzMjIsIDkyNjYyLCAwLCAwLCA2NDM3MiwgOTI2OTgsIDMyMjYsIDY1NSwgNzUyLCA3NDU3LCA3NDU2LCAKLSAgICA3NDUyLCAzMjg1LCAxMjg3NzksIDEyNzgyMSwgMTE5OTg4LCA2NTYxMCwgMjM5MSwgMCwgOTIyNDgsIDY3MSwgMjUwLCAKLSAgICA3NDM0LCA2MTgsIDY2OCwgNjEwLCA0MjgwMCwgNzQzMSwgMTE1MiwgNDI4MDEsIDY0MCwgMTIwNjY2LCA3NDQ4LCA3NDM5LCAKLSAgICA2MjgsIDM5MDUsIDczODEwLCAwLCAxMjgyNjYsIDY0NzQ5LCA2Nzg1MCwgMjEwNywgMCwgMCwgNDYwNSwgMTI4MTc0LCAKLSAgICA5ODMxOTIsIDQzMzcyLCA2NTk0NSwgMTI4ODM4LCAwLCAxMTk1OTAsIDAsIDAsIDAsIDk4NywgNjkyNywgMTE1NzIsIAotICAgIDQyMjYxLCAxMTQ2NCwgMzM2NSwgOTk3MSwgMCwgMCwgMTI4Mjk3LCAwLCAwLCAwLCAwLCAxMTMzNCwgNDMzMjYsIDEyNjA5LCAKLSAgICAxMTUxOSwgMTE1MDMsIDU1MzAsIDUyMTAsIDAsIDQ2MjcsIDk4Mzg4MywgNTIwOCwgMCwgMTI4ODQyLCAxMDMzMiwgNTIxOCwgCi0gICAgNzk3NiwgOTE1NiwgMCwgMzI0NCwgNTUyOSwgNjk2NDcsIDczODk0LCAxMjg4NTIsIDU0MzIsIDY0OTY1LCA1NTI3LCAKLSAgICA3NDAzMywgMTA1MTYsIDc3OTAsIDU1MjgsIDAsIDQyMTQwLCAxMjAyODEsIDAsIDAsIDQzNTQ1LCA5ODg3LCAwLCA0MDAwLCAKLSAgICA3NDI5LCA3NDI4LCA2NjUsIDc0MjQsIDMyMDYsIDEyMDI3OCwgNzg4NCwgMCwgMTI4NTY2LCA5MTc5ODksIDEyODY2NiwgCi0gICAgMjExLCAyNTA5LCAxMjg4NTgsIDEyMDU3MywgNjg2NzIsIDMyMjAsIDQyMjM1LCAwLCAxMDY5MCwgODk1MSwgNTIxNCwgCi0gICAgNDI0NzQsIDgxMTgsIDAsIDcwNDgsIDQ1OTAsIDEyNzI1OCwgNTg1MiwgMCwgMCwgMTI3MjU5LCAxNzA4LCAwLCA5ODMxNjUsIAotICAgIDI2MjMsIDExOTQzLCAwLCA2OTIyNiwgMCwgNDY5OCwgNjY1MDksIDEwNjYsIDExOTkyMSwgNDcwMSwgOTgzODY3LCAKLSAgICAxMjAyODUsIDc0MjI1LCA5NDExMSwgODI2NywgMCwgMTI3MjY1LCAwLCA3NTE2LCAwLCAyNjI1LCA5ODM5NjgsIDgwMzQsIAotICAgIDc0MzA5LCAwLCAzNjMxLCAxMDk1NSwgNzg1MCwgMTIwMjkzLCA4NDE2LCAwLCAwLCAwLCA0MzM4NCwgMTI2NjAsIDAsIDAsIAotICAgIDAsIDc0ODUwLCA0MTA2OSwgMCwgMTI4MTU2LCAxMjA5OSwgNDMxMCwgMTAwMzIsIDYyNTIsIDcxMywgNzk5MCwgMCwgMzk5MCwgCi0gICAgMCwgOTgzMjU0LCA2NjM2OCwgNTAxNywgNjQ5NTYsIDcwNzEsIDAsIDExOTE0NCwgMTAzMCwgMTE4ODAwLCA5ODMxMjAsIAotICAgIDk1MTMsIDQxMDU5LCA5MzU3LCAwLCAxNzczLCAwLCAxMjAzNTAsIDAsIDYzMzksIDc3NDUsIDk4NDQsIDAsIDY0NjUwLCA5NCwgCi0gICAgMTg4MCwgNzQ3NjYsIDk4MzgyOSwgODkwOCwgMCwgMTI4NzA3LCA2NTkxMywgNzg0NzAsIDEwNzUyLCAxMzAwMywgMCwgCi0gICAgMTI2NTcyLCA0MTMwNywgODczMiwgMTIwMzM4LCAwLCAxNzU3LCA2OTY0LCA0Njk2LCAwLCAxMjAzMzUsIDY0Nzg1LCA3Mzk0LCAKLSAgICAzNjQxLCA1NDE5LCAxMjgwNTUsIDAsIDEyNzg4MywgMCwgMTIwMzQ0LCA0Mzk4OCwgMCwgODYxMCwgNDMwNjIsIDc1OTIsIAotICAgIDg1NiwgNzQyOTksIDkzNiwgMTMyODksIDY5ODk0LCA0MzE3MSwgMTQ1OSwgMCwgNjUyNDMsIDc4NjM4LCAxOTk1MywgMCwgCi0gICAgMTUwNCwgNzAwNjQsIDAsIDEyOTEzLCA3NDIwNiwgNzUyOSwgMCwgMTI4Njk5LCA5ODM5NDgsIDEyMDc4MiwgNDExMywgMCwgCi0gICAgMjM3MiwgMzM2LCAwLCA3NTA5LCAxMjE1MiwgMCwgNjgyLCA2NjQ1OCwgNDE1MDUsIDAsIDY0NzQzLCAxMDU5MywgMTcwMywgCi0gICAgMCwgOTgzOTQ2LCA4MDMzLCA2OTk1MywgMCwgOTgxMCwgMTI3MjY5LCAwLCAxMjk3MCwgMCwgNDIzNTEsIDEwMTA5LCAKLSAgICA5MTc2MjMsIDAsIDE5NDY5MywgMCwgOTI2OTAsIDAsIDAsIDc0MjkxLCAxOTY1LCA3MDY5LCA0MzMxMiwgMCwgNzM4ODcsIDAsIAotICAgIDIwODcsIDY0MzcwLCA2MzE0LCA0MTcxNCwgODUwMSwgMCwgMCwgNzQyMzksIDQxMzE3LCA5MjYxNCwgMjA5MSwgNzQ1NDUsIAotICAgIDIwOTAsIDAsIDkzNTMsIDcxMTcsIDIwNzcsIDc3ODg2LCAwLCAxMDQ5OCwgMjA4MywgNzc4ODgsIDAsIDAsIDExOTIzNiwgCi0gICAgNjM0LCAwLCAwLCAwLCA2OTc3OSwgNDE2NSwgODc0NiwgMCwgOTY1NCwgMTI4NTYsIDY5MjQsIDAsIDcwNjYsIDk4MzcxMCwgCi0gICAgMCwgMTI4MTM1LCA0MTAzNywgNDI2OTIsIDc3ODYsIDEyOTU5LCA0MTAzOSwgMTI3NDgzLCAwLCA2ODAsIDIzMDIsIAotICAgIDEyODIwMCwgMTE4MSwgNzA1NiwgMzE3NCwgMTI2NTE2LCAwLCA5MjY2OCwgNjU2NjUsIDEyNzM3NSwgMTI2NTA2LCA2OTIwLCAKLSAgICAwLCA5MjI5NSwgMCwgMTE4OTY1LCAwLCA2NDY0NCwgMTI2OTgxLCA3NDExOSwgMCwgNDEwMjgsIDAsIDYyMzEsIDI2MTMsIAotICAgIDY1MzAyLCA0MDk4OSwgMCwgMTk0Njk2LCAwLCA0Mjc2MCwgMCwgOTgzNTY2LCAwLCA0MDk4NywgNDY2NywgMCwgOTgzOTIzLCAKLSAgICA4ODI4LCAwLCAwLCAxMjQ2LCA0NzQ2LCAwLCAwLCAxMTAyMSwgNDc0OSwgOTI2NzUsIDAsIDkyMSwgNDc0NCwgMCwgMTI3MDIsIAotICAgIDI0MiwgMCwgMTU2NiwgODIxNywgMCwgNjQ2NTMsIDc4Mzg2LCAxMjgxMjEsIDc0MDM2LCA3NDUwNSwgNDMyNzQsIDUzMTMsIAotICAgIDk1MSwgMCwgMCwgOTgzODU4LCA3NjA0LCA5ODMyODIsIDQwMDksIDEyNzgxNiwgOTgzNzAxLCAxMjA1NjIsIDAsIDk4MzcxMSwgCi0gICAgNjQ4NjAsIDExOTEzOCwgMTE5MDY5LCAwLCAxMjczNzAsIDQwNDgsIDk4MzU5OCwgMCwgNzAwMjQsIDE2NDYsIDc3ODkwLCAKLSAgICA2NDUzNCwgNzM5OTUsIDEyMDcwNSwgMCwgMTE5ODkwLCAyNTc5LCAxMTk5MDUsIDMxNzcsIDExMzU3LCA5MDk5LCA0MTA3LCAKLSAgICAzNDQxLCAxMTk4OTQsIDI5NzUsIDc0NDQyLCA5ODIyLCA5ODM5MjYsIDU1MjIwLCAxMDA4NCwgNzM5NDMsIDExODg0MCwgMCwgCi0gICAgOTE3NTYyLCAxOTQ2MTAsIDMzOTksIDk4NTEsIDk4MzcwOCwgMTE5MDksIDkwNTksIDAsIDc2ODcsIDAsIDY3ODksIDAsIDAsIAotICAgIDAsIDcxMzY3LCAwLCAwLCAxNzc3LCA5MTUxLCAxMTM3LCA2OTc2NywgNzQ5LCA0MjM2NiwgMCwgNTM4NSwgMTI4NTc0LCAKLSAgICAxMjgyMTgsIDAsIDAsIDU5ODksIDAsIDAsIDEyODA5MSwgMCwgNDE2ODUsIDY5MjIzLCAwLCA5NzY5LCA0MTY4NCwgCi0gICAgOTgzMjE0LCA1MTksIDAsIDExNzQwLCA1NzY2LCAwLCAwLCAyNjAwLCA4ODQ4LCAxMjAxMzgsIDQxMjk3LCAwLCAzNjY2LCAKLSAgICA3NDQ3MywgNDEzMDAsIDc0NDY4LCA2NTE2MCwgMCwgNjk2ODgsIDY5NzcxLCA3NDQ3OSwgMCwgNjU1OCwgMCwgMCwgNjk3NjUsIAotICAgIDEyMDc1MCwgMjUyLCAwLCA0MTMwMiwgMCwgMCwgMCwgNjk3NjMsIDAsIDExNzI5LCA4NzE5LCA5MDYwLCAwLCAxMjAxMzksIAotICAgIDEwNzYxLCAwLCAwLCAwLCAxMTg3OTIsIDExNzM0LCA5ODMyMjEsIDExNzMwLCAwLCA5NTkzLCA1NzU3LCAyNDAzLCA2NDgwOCwgCi0gICAgNTUyNzUsIDAsIDExNzI4LCA0MzU3MiwgMCwgMCwgNzc2NCwgOTgzNzA1LCAxMTA5NCwgMTIwODI1LCAwLCAwLCA0MjgyLCAKLSAgICA4Mjk4LCAwLCAwLCAwLCAwLCAwLCA2NDQ0OSwgMCwgMTI2NjUwLCA2Mzg1NCwgODQ1NiwgMCwgNzQ3ODMsIDY1NjcwLCAwLCAKLSAgICA3ODI1MCwgMCwgNzc3NCwgMTA2MDcsIDk3OTIsIDAsIDAsIDAsIDAsIDEyMDc2NCwgMCwgMTAwMTksIDc0NzYyLCAwLCAKLSAgICAzNDU4LCA0MzY1LCA3MDA1MywgOTgzNzAzLCAzNjQ3LCAwLCAyNjAyLCAxMjgzNDEsIDAsIDE5NDcwNywgNDExMzUsIDAsIDAsIAotICAgIDAsIDY0NjMxLCAxNzIsIDQ5NzEsIDQxMjE5LCA0MTEzNywgMTg4OSwgNzIzOCwgNjU0NSwgMTI2NDc2LCA5MjE5MywgNzU5NywgCi0gICAgMTA1MjgsIDAsIDAsIDM3MzIsIDczOTEwLCAxOTQ1ODgsIDUzNDQsIDAsIDQzMzY2LCA0MzM2MywgOTA2MiwgMTE5MjUyLCAwLCAKLSAgICAwLCAwLCA2NDQ3OSwgOTIzMiwgOTI1OTYsIDAsIDAsIDE5NDcxMiwgMTA5MDAsIDQxNTMxLCAxMjYzLCAzNzIwLCAxMjA0OCwgCi0gICAgMCwgNjQyOTIsIDQxNTI0LCA3MjI3LCAxMTk2MzUsIDYwOTksIDQxNTM0LCAwLCAxMjczNTQsIDEyNzM0NSwgMjk5LCAKLSAgICA5MTc5NTcsIDg1MjUsIDEyNzM0NywgMzUyNCwgOTE3NTY1LCA4ODMxLCAxMjczNDksIDkyNTY0LCAzMDc1LCA2Nzg2NywgCi0gICAgMTI3MzUyLCAwLCA2NjM2MiwgMCwgNjQzNTMsIDAsIDAsIDU4NDUsIDAsIDAsIDAsIDI1ODEsIDgyMDAsIDY1MTE0LCAKLSAgICA2ODQ2MCwgMCwgNDMyODMsIDU1NTEsIDAsIDEyMDczNSwgMCwgNjM0MCwgMTE4ODU1LCAwLCA3ODEzNCwgODY4MCwgNzIwNCwgCi0gICAgNzAwNjUsIDI1ODgsIDI5MTQsIDcwMTEsIDU1MjgxLCAwLCAyNDcxLCAxOTQ2MzEsIDI4ODMsIDI3NDksIDExOTU2MywgCi0gICAgNzM3NzQsIDEwOTEzLCAwLCAwLCA4NjY2LCA2NzUsIDQyNDkzLCAwLCA0MzU3MSwgMCwgNjIxOSwgMCwgOTk4MCwgNDEyMzIsIAotICAgIDEwOTI4LCAwLCA0MTE1MywgNDEyMjksIDExODk2NywgMCwgMzczOCwgOTQwMTYsIDAsIDEyNzExLCAzMTgxLCA2NjIxMiwgCi0gICAgNzQyODksIDY4NDcyLCA0Mjg1NywgODI2MiwgOTgzMzcxLCAwLCA5ODMyMjAsIDAsIDQyMzQ3LCAxMjA5MiwgOTYxNSwgCi0gICAgNzIzNCwgNzQwNDcsIDk4MzA4OCwgMCwgNDM3NDQsIDAsIDAsIDczODQ2LCAyOTM0LCAxMjcyMiwgMTIwNzYyLCA5MjIsIAotICAgIDQzOTgzLCA3NDUwNywgOTgzMTI2LCA3NDQ2MSwgMzIxOCwgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCAKLSAgICA4NTY5LCAxMTQwNCwgMTE5MzIsIDczNzI4LCAzMjE0LCAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCAKLSAgICA3ODcyOSwgMTkwMSwgNzg3MjcsIDEyNzMyNiwgMTIwNDYwLCA3NDI1LCAzMjA1LCA2ODAwMywgNzg3MzcsIDc4NzM2LCAKLSAgICA3ODczNSwgNDMzODMsIDY5OTQwLCA2NTQ1OSwgMjYwNiwgNzg3MzAsIDczODk3LCAwLCAxMTQ5NiwgMTE3MywgMCwgNDEyNzIsIAotICAgIDExOTY2MSwgMCwgMCwgOTgzMzEzLCAxMjA3MzcsIDAsIDk4Mzk2MiwgOTgzMzEyLCAzNzgsIDI2MTAsIDAsIDY1MDc5LCAKLSAgICA5ODMzMTcsIDY1Njk1LCAxMjY1NTksIDM3LCA3MDY4LCAwLCAxMjA0ODAsIDEyMDQ3OSwgMzIwOSwgMTIwNDc3LCAwLCAKLSAgICAxMDYzOCwgOTc2OCwgNjk5NTIsIDExOTkwOSwgOTgzMzkxLCAwLCAwLCAwLCAwLCA2NTUxMCwgMCwgMCwgNTIzMywgCi0gICAgOTgzMzI3LCA2NDc5MiwgOTgzMzI2LCAwLCAxMjY2MzMsIDAsIDcwNjAsIDk4NDcsIDEyMDE0NCwgMTY4NSwgNTk1LCAwLCAKLSAgICA3Mzk3MSwgMTI5MiwgODk0MCwgNzM4MCwgMTEwODgsIDAsIDEwMDA0LCAxMjY5OTcsIDAsIDY1NDEsIDAsIDAsIDAsIDMyNDMsIAotICAgIDkwMTQsIDU2MDYsIDAsIDUzOCwgNjQ2MjAsIDU2MDIsIDg0NjcsIDc0MzkxLCA2NTQ3LCAxMjgxMzIsIDgyMDMsIDc4NDg4LCAKLSAgICA5ODMwOTAsIDg0NTgsIDY1MjExLCA4NDk1LCAxMTk5MDQsIDAsIDkxNzU1MiwgNzc5LCA3ODMxNCwgNjQzNjcsIDI0NjUsIAotICAgIDY5OTAxLCA4MTkzLCA1NTI3OSwgOTczMCwgOTI4MCwgMCwgNzA2NSwgNzQxNTUsIDQzNDYsIDAsIDczNzk4LCA1MDQsIDAsIAotICAgIDkyNDE0LCA4OTgyLCAwLCAwLCAwLCA3ODIsIDAsIDEwODgzLCAwLCAxOTQ4NTIsIDczMiwgMzczNywgMTI3MjUzLCAxNTQ4LCAKLSAgICA2ODY1MCwgOTI1MDcsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAxMTkwMjAsIDQzNzYsIDAsIDExNzg3LCAzNzQ1LCAwLCAKLSAgICAwLCA0Mjg4OCwgNjU3MTIsIDk4MzI5NiwgMzg2OSwgMTE5MzcsIDU3MjUsIDEyNzUzOSwgMTc4MywgNjg2NDgsIDU3MjgsIDAsIAotICAgIDAsIDAsIDExOTE4LCA2NjU2NywgNTcyNCwgMCwgNTcyNywgNzg1MjEsIDAsIDAsIDc2NCwgMCwgMTI4MTE2LCA0MzUzMSwgMCwgCi0gICAgOTAzMywgMCwgNDI1MzIsIDYyMjMsIDExMDQyLCAxMjA3NDksIDExNDIzLCAwLCAxMTk4NjEsIDcxMzQ0LCA0MzQ2NSwgMCwgCi0gICAgMTI4MjY3LCA2NTU5LCA2NDU1NywgNzEzNDgsIDkyNjQ5LCAxMjA2NDgsIDQzMDE5LCA0MzQ3NywgMTAyMzgsIDc0NDkxLCAwLCAKLSAgICA0MzM3NywgOTIyODIsIDcxMzQ2LCAxNDc4LCA5NzgzLCAxMTgyNSwgMjYwNywgNjQ3NDAsIDAsIDc3MzksIDc0NTQzLCAwLCAKLSAgICAwLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMCwgNzAwNTgsIDQxMTQ0LCAwLCA5MjQzOCwgNDM1MzcsIDY3NjEsIDEwMDkzLCAKLSAgICA0MzY5LCA5MTc3OTEsIDAsIDk4MzE0OCwgODgyMCwgMzk0NywgMCwgMCwgMTE1MTUsIDUyNiwgMTI4MTAzLCA0MTI5NSwgCi0gICAgMTk0NjAzLCA5MTc3ODUsIDE5NDkzMiwgMCwgNzY4OCwgOTE3Nzg2LCA3Njg2LCA4Mjg4LCAxMTgxNSwgMCwgMCwgOTgzMzc0LCAKLSAgICAxNTQzLCAzNzEzLCA0MTIyMSwgMTI0MjMsIDQyMjgxLCA5MTc3ODgsIDc0MDI0LCAxMjI5MywgMCwgNjQzNTcsIDExNzk0LCAKLSAgICA0MjA4MiwgMCwgMTczNywgODk4NywgNDIwODEsIDAsIDcyMDUsIDAsIDkzMzUsIDEyODUwLCAxMTk4NzAsIDY1NTMsIDcwNTUsIAotICAgIDAsIDgyNzcsIDAsIDAsIDU0NzUsIDc0Nzk1LCA2NzgwLCAwLCAwLCAxMjk5MCwgMTE2MCwgNDIwODQsIDExOTY1MCwgCi0gICAgNDEyMTcsIDExOTY2MCwgMTAwMTgsIDM2MCwgMCwgMCwgNjgxNzYsIDU4NjMsIDMxMzcsIDAsIDQxNDcsIDk4MzE3MCwgCi0gICAgNDEyMTYsIDc4NDQsIDI2MTYsIDExOTE5MCwgNjg0NjEsIDY1MjM0LCA5ODMyODYsIDEzMDc2LCAzMTM1LCA5ODMyNzksIAotICAgIDc4MTQzLCAxMTkxMzksIDMxNDIsIDkyNDUxLCA5NDA2OCwgMTA4MTksIDExOTU4MCwgMTAxODMsIDAsIDI2MDgsIDE0NzAsIAotICAgIDczOTY3LCA5NDAwOCwgNjIyNywgMCwgMTI3MTczLCA2OTc0MSwgOTgzNTgyLCA2MTYzLCA5ODM1NTgsIDAsIDEyNzMxNCwgMCwgCi0gICAgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAxMDg3NiwgNDMzOTIsIDExOTU3MywgMTI3OTMxLCA1NzUxLCAwLCA2MjIyLCAwLCAKLSAgICAwLCAxMjA4NiwgNzQwMywgMTYwMCwgNjQzMDksIDY0OTM5LCAwLCA2NDc4MywgOTI2NTgsIDExMzEwLCAwLCA4ODgyLCAwLCAKLSAgICAwLCAyNTcwLCA3MDIxLCAwLCAwLCA0MzExMCwgMCwgMTIzNCwgNjU0MCwgNjk3NCwgMCwgMCwgOTgzMjA5LCA1MDAyLCAwLCAKLSAgICA0MTI4NiwgNjk5NDYsIDEyNzAxOSwgMCwgNDM1ODUsIDAsIDY1NTEsIDk4Mzk1MywgMTI4MjI5LCAwLCA0MTI4OSwgMCwgCi0gICAgMTk0NjAyLCAwLCA4OTc3LCA2MDIsIDEyMDgxNCwgMCwgMTI4Nzc4LCAxMjg2NjEsIDAsIDk4MzM2NywgNDEyNzksIDAsIDAsIAotICAgIDAsIDExMDgxLCA0MzYxNSwgMCwgMCwgMCwgOTgzNjEyLCAxMjcyNywgMCwgMCwgNzgzOTcsIDk0NzUsIDcxMTIsIDY1MTA1LCAKLSAgICAwLCA5NjMzLCAxMDg4NiwgNDM1OTIsIDc4MzEsIDk4MzgyMCwgMTk0NTcxLCAwLCA3MzkxNSwgODA3NiwgNDMwNDgsIDgyOTAsIAotICAgIDgyOTEsIDQzMDUxLCA5MjU3MCwgMCwgMjU5NiwgNDM1ODQsIDAsIDEzMTEzLCAwLCAxMjc3NTcsIDIzOTMsIDcwNTgsIAotICAgIDkwODcsIDc0MDY3LCA2ODY3MywgNDE1NzQsIDc4MzM3LCAwLCA3NDA1OCwgNjM3NiwgMCwgMCwgMCwgMCwgOTg1NCwgCi0gICAgMTI3NzQ4LCA2NDY5NiwgMCwgMTI4MjIwLCAwLCA2OTk0LCAwLCAxNzIwLCAwLCAwLCAwLCA2NTI5LCA3MDYzLCA5ODMxODIsIAotICAgIDM3NTEsIDkxMjAsIDk4MzQ3NywgMCwgMTc5OCwgNzA5LCAwLCAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgMTI0MzAsIAotICAgIDgxMzcsIDk0MDk4LCA5MjY0MiwgMCwgMCwgMjQ1LCAxMjgwOTcsIDExNDU2LCA0MTIzMywgNzA3MCwgMCwgOTQwNDYsIAotICAgIDYxMzYsIDkxNzYwOSwgNjU2NzcsIDg2ODIsIDQxMjM1LCA5MjU5NSwgNDIwNDUsIDk4MDQsIDExODk2MywgNDMyLCAzNTk1LCAKLSAgICAxOTQ5NDUsIDY1NDM3LCAwLCA3NDQ1NSwgNDIzOTksIDAsIDAsIDEyODI3NCwgMCwgMTE5NjU4LCAwLCAwLCAwLCA3Nzg5NCwgCi0gICAgODc5NywgMCwgOTA1MiwgNjQ4ODgsIDcxNjcsIDIzNTYsIDk1LCA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgCi0gICAgMCwgOTQxMDksIDAsIDc0MTM3LCA3MDAzNSwgMTAwNjMsIDEyNjUyLCAxMjE5OSwgOTI0ODAsIDAsIDI1NjYsIDExOTcxLCAKLSAgICA5ODM3MjgsIDAsIDEwNjUsIDAsIDAsIDQzNDAwLCAyNTc2LCA2NjY5NiwgOTM5OTksIDAsIDQzNjA0LCAwLCAwLCA3NDA4MiwgCi0gICAgNTE0LCA3NDUwMiwgNzAwMzIsIDI5MjEsIDQzMjE1LCA2NDQ5MywgNTc3MiwgMTI5NjgsIDcwMDU1LCAxOTQ5NDQsIDc0NTgwLCAKLSAgICA0MzM5OCwgMjU4MCwgOTgzODAxLCA0MTM0MSwgNDEyMjMsIDY1NjQsIDE0NjMsIDQxMzQyLCAwLCA1MjkzLCA3MDAyMCwgMCwgCi0gICAgMzczMywgMTEzNDYsIDAsIDEyMDU0LCAwLCA3NDA5OCwgNDI4MjcsIDAsIDEzMDkxLCAwLCAwLCAwLCA5MTc5MTUsIDAsIAotICAgIDEyNzAyNSwgMCwgNzQ4MjEsIDAsIDk4MzcyNCwgMTE5MDQyLCAwLCAxMjc4NjUsIDEzMDkwLCA2NjY0MywgMCwgMTI3MCwgCi0gICAgMTEzMiwgNDIzNjAsIDAsIDc0MDk2LCA2NjY1NSwgNDI1NjksIDEyNzgyNCwgMCwgNjQ3NjEsIDAsIDQxMDIxLCA4NTEwLCAKLSAgICA0MjQzMiwgMCwgMCwgMTk0NzgyLCAwLCA2NDQ5NiwgNzQxMDksIDcwMDMwLCA5OTE1LCAwLCA5ODMyMTYsIDcwNjEsIAotICAgIDQxMzM2LCAzODU0LCA2OTcwMCwgMTMxNDEsIDY4NDEzLCA0MzQwMSwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCA2ODIyMSwgMCwgCi0gICAgMTI3MzgzLCAxMjcxNzEsIDAsIDAsIDEyNzc5NywgOTAyOSwgNDM1NDMsIDExOTMxNSwgMjM1MywgNjMwOCwgMCwgNzQ3OTIsIAotICAgIDI2MTEsIDExOTE4NiwgMCwgMCwgMCwgNDM2NjQsIDkyMzk5LCA2NjYyNywgMCwgNDQ4NCwgODUwOSwgMTE4OTc2LCAxMTA2NiwgCi0gICAgNjUyMzMsIDAsIDQxMjI0LCA0MTAxNywgMCwgMzc0NywgMTA1MjIsIDAsIDAsIDE2OTEsIDQxMjI2LCAwLCAxMjEwNywgCi0gICAgNzEwMCwgMTA5MDUsIDY1MDEwLCAxOTQ5ODYsIDY5NywgNjYwMTgsIDkyODQsIDQyNDQsIDAsIDAsIDkyNjQ0LCAxMzEyMSwgCi0gICAgMTIwMDM2LCAwLCAxMjAxMCwgMTI4NTczLCAxMjgyMjEsIDAsIDAsIDAsIDEyNzE5MywgNjU4MTYsIDY4MTExLCAwLCAKLSAgICAxMjc5MzMsIDY1NjY4LCA5MjI1NywgNjYxOCwgMTE4Nzg0LCA2NjM2NSwgMCwgNDIyMzQsIDEyNjQ4LCA3ODExMCwgNzEyMywgCi0gICAgNzAwMzgsIDU3ODUsIDkxOTgsIDk3NjQsIDQxMzE2LCA2NTg3NywgNzM4MywgMTMyMzAsIDQxMjk5LCAwLCAwLCA2ODM2NSwgCi0gICAgMTI4MjU4LCAwLCAwLCAwLCAxMzEyMiwgMCwgMTkxLCA3MDA2MCwgODU4NSwgODAwMCwgNjQ0MTEsIDEyMDY1MiwgNDI4ODksIAotICAgIDY0ODUwLCA0MTA3MiwgNDE1NzgsIDAsIDQxNTc3LCAwLCAxMDAwMiwgMCwgNjUzMywgNzM4MDIsIDQxNTcwLCAwLCA2ODMsIAotICAgIDM5NiwgNDE1ODAsIDY4MTQ2LCAwLCAxMjkwMSwgNDMwNTgsIDAsIDM0MywgNzEyOSwgNDI2ODAsIDQxMzYwLCA3ODE1NCwgMCwgCi0gICAgNDc0MywgMCwgMCwgNzQwNDAsIDc0MTA4LCA4NzQzLCAxNzI0LCAxNDMzLCAxMTkzMjIsIDAsIDM3MzksIDYyNjMsIDcxMzQ5LCAKLSAgICAwLCAzOTY0LCA2NTkyLCAwLCAxMjg2OTMsIDY2MDQwLCAwLCA0MjU2OCwgNjk4MDYsIDEyODExMywgMTc3OCwgMzk1NiwgMCwgCi0gICAgNDIwNzAsIDY1NjMsIDQzMDc1LCA5MDE4LCA5NDAwNiwgOTgzMzg4LCAxMjA2NywgNDEzMTIsIDAsIDU1NDcsIDc0NTMxLCAKLSAgICAxMjc5NjksIDAsIDgxNzUsIDAsIDI4NCwgODEwOCwgOTM0LCAwLCA3NDAwMSwgMTczLCA2NjQ2MCwgNzE3NCwgOTI3MDMsIAotICAgIDExODgyMiwgMTc1MCwgMCwgNDM5NCwgNjgzNjgsIDE4MDcsIDk4Mzg3OSwgOTIyOTgsIDAsIDU4ODksIDAsIDcxODAsIDAsIAotICAgIDExOTE0NSwgMCwgOTE3NTU4LCA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgCi0gICAgNDUxMiwgMTE5MzYwLCA2NTIzMCwgMTI4MTA5LCAwLCAwLCAzODU1LCAwLCAwLCAwLCAwLCA3NDI5NSwgMCwgMCwgOTI0MTYsIAotICAgIDM5NzUsIDAsIDc0MDg3LCAwLCAxMjY3MiwgMzc5OCwgMjcwMywgOTgzNTk5LCAwLCAyMTA5LCA5Nzc0LCAxMjc1LCAwLCAwLCAKLSAgICA0MTA5NSwgMzk2MiwgMCwgMjkzMiwgNDExMDEsIDM5NTQsIDY0NTcsIDQ1MTMsIDAsIDAsIDczOTk0LCA3Mzk5MiwgMTQ2OCwgCi0gICAgMCwgMCwgNDE4NTEsIDEyODIzMCwgNDE4NDYsIDAsIDU1MjM4LCA3NjMzLCA0MTg0OSwgNjgzODUsIDQzMjAsIDMyMjQsIDAsIAorICAgIDEyODI1LCAwLCAwLCAxMjcyNSwgMCwgMTI3MTA2LCA3ODY0MiwgMjIzLCAwLCA2OTY3NSwgMTIwMTY2LCA0MjQ0NCwgMCwgCisgICAgNjQ0OTksIDY1MjQ1LCAwLCAxMTcxLCAwLCA2OTcxNywgMCwgMTgwNSwgODc3MiwgNDM4MjAsIDAsIDk5MzAsIDY1MjQ3LCAKKyAgICA3ODYxOSwgMTIwMTExLCAyMzM4LCAwLCAxMTg4NTMsIDAsIDQyNjc2LCAwLCA2NDgwMCwgNjUyMzYsIDY3NjQ0LCA2ODEyNiwgCisgICAgMTIxMywgMCwgNjQwNzUsIDc5NywgNjQwNzQsIDg3MzQsIDQyMTIsIDEyNzM2OSwgNjQzODcsIDQxMTUsIDAsIDUwMDUsIAorICAgIDY0MDcwLCA2NDA3MywgMTA2NzksIDAsIDc3OTU0LCA5NDAyLCA2NDI3NiwgNDI2LCAwLCAwLCA4MjUxLCAxMDEzNiwgCisgICAgNjU0MzYsIDAsIDIxMjAsIDQzMzAyLCAxMjI0LCAwLCA2NTU3NiwgNzQxOTIsIDEwNzAxLCAxNzY0LCAzMTAxLCAxMjc4MTUsIAorICAgIDEyODU4LCAxMjAxNTksIDAsIDExMzczLCA2Mzc4LCAxMjc4NTksIDEyMDEwMywgODY2MywgOTMxMiwgNDE2NDQsIDQ1MzksIAorICAgIDIxMjksIDAsIDkyMjIsIDk4MzczOCwgMCwgNDI1OSwgOTA5MiwgNzQ1NjcsIDQxOTYxLCAwLCAxMjcyNCwgNjYzNTcsIAorICAgIDQyMzMxLCA2NDkzNSwgMCwgMCwgMTI5MywgNzk0NywgMjEzMiwgOTgzNzY3LCA3NDU5MywgMTIwMzA4LCAyNDU0LCA0MjcxNywgCisgICAgMzYxMywgMTI4ODM3LCAwLCAwLCA2NTg4OCwgODgxNiwgMTA5NzgsIDEwODQwLCAwLCAxMDY2OCwgMCwgNDMwODcsIDEyNTk1LCAKKyAgICAxMjAzMDQsIDk4MzExNCwgODgyMiwgMCwgMTE1NywgNjQ5MDMsIDg2MzgsIDAsIDAsIDAsIDAsIDY5ODQ4LCA4MjM1LCAKKyAgICAxMjAzMTYsIDQ0MDUsIDEwMDg2LCAxMjAyNDcsIDAsIDY5MjE2LCAwLCA2NTQzMCwgNzEzMjEsIDYwNzksIDY4MTcsIAorICAgIDEwNzY0LCAxMjc5MTAsIDY0MjkxLCAxMjgwNTEsIDk5OCwgMTIwMzEyLCAxMTA2MiwgMTMxNywgNjQzMjcsIDE1NTgsIDAsIAorICAgIDE5OTEsIDc4ODIsIDQyMjU0LCAwLCA0MTcwMCwgNTMwLCAwLCAxMDQyOCwgMTE5MzM1LCAxMjAwMiwgMTE5MzM2LCA1NzQyLCAKKyAgICA0MzA3NiwgNDY5MiwgNjQ2MzAsIDQxODIzLCA0MDA3LCA1MDA0LCAxMTkzMzQsIDc4OTYsIDc1MSwgNjU5NSwgNjU5NiwgCisgICAgMTIwMzI1LCA2NjM3MywgMCwgMCwgNjQ5MDgsIDkyNjkxLCA2MzExLCAwLCAxMjAwNCwgMTE5MTkyLCAxMjA0OSwgNDMxMDgsIAorICAgIDEyMDMyNiwgMCwgNDE3MDUsIDkyMTg4LCA2NTk4LCAwLCA2NTk5LCAxMjAzMzQsIDAsIDQyMTQ4LCAxMTg4MjUsIDY2MDI3LCAKKyAgICAwLCA2NTk3LCA5NDEyLCA4MzQwLCAxMTgyNCwgNjQ3NDUsIDIyODEsIDY5OTA0LCAwLCAxOTg4LCA1NDA3LCA2Nzg2NSwgCisgICAgMjQzMCwgNDE2NzgsIDAsIDEyMDI0MywgMjMzNiwgOTgzOTAzLCAwLCA3ODg3MSwgMTIwNDQyLCA5ODM3NjksIDE5MjEsIAorICAgIDEwOTQ3LCAxOTkyNywgMCwgNjU0MDYsIDAsIDE5OTEzLCA0Mjg0LCAxMzIxNywgMCwgNDM3ODksIDEyODQxLCA5MjI5LCAKKyAgICAxMDk1NiwgNDIyODUsIDQxNjc0LCAxOTk2NCwgNDE2NzksIDY1MDg0LCAzNTIxLCAwLCA1Nzc0LCA4MzI1LCAwLCA2NTQwMywgCisgICAgOTgzMDg5LCAxODU0LCAxMDc5NCwgMCwgNjc2NjAsIDY5ODQ2LCAwLCA3ODM1OSwgNTI4MCwgMCwgNDM0NCwgMTI5MDUsIAorICAgIDY1NDMzLCA2MDc2LCA2NDc5MywgNDE2MTAsIDc2OCwgMTIwNzQsIDQ0MiwgMCwgNjgxNjIsIDY0MDgxLCAxMjkzNCwgCisgICAgNDE2ODIsIDY1NDMyLCA0MTY5MywgMCwgNjA3MSwgNjU0MzQsIDEyNzQ2NywgNDgwNCwgNDA1MywgMCwgMTI3NDY5LCAKKyAgICAxOTQ2NTMsIDQxNjk2LCA0NjcsIDY5ODIzLCAxMjc0NjMsIDY5Nzk3LCAxOTQ2NTIsIDEyNzQ3MywgODQyMSwgMTI3NDcyLCAKKyAgICA2OTY4MiwgNDM3MDUsIDUwMiwgMCwgNjU0MzEsIDExOTA1NiwgNjk5NTQsIDEyMDQzLCAxMzAzLCAzMTYsIDczNjQsIDIwMjksIAorICAgIDIxMzYsIDExOTI0NiwgMTE1MzMsIDY0MzY1LCA0MzQ4MCwgOTI2MzksIDQ4NjAsIDEyNjY0OCwgMTI3ODc3LCA0MjQ4OCwgMCwgCisgICAgOTU4MywgMTI4ODQ5LCA1NTQ2LCA4MDE5LCA3Mzg1NiwgMCwgMCwgMCwgNTU0NCwgMjM1NSwgMTIxNTAsIDY1NzI1LCA1NTQzLCAKKyAgICA3Nzk4OSwgNjM3NTEsIDEyMTM3LCA1NTQ4LCA3Nzk4NSwgMCwgNjU3MjcsIDY4Mzg4LCA2NTcyNiwgNjA3NywgMTI4MzUyLCAKKyAgICA2NTQ1MiwgMCwgMTEzMDEsIDc4MDEzLCA3ODAwOCwgNzgwMTAsIDk4NzQsIDc4MDA3LCAwLCAxMzE5LCAzMDUwLCA2NTQxMCwgCisgICAgMCwgMCwgNzgwMTYsIDc4MDE3LCA0MjgzMCwgNDM5OTYsIDY2NzE2LCAxMjgxMzcsIDQ2OTEsIDkyMjQyLCA5MzQ1LCA2MjEsIAorICAgIDkyNzA5LCAxMjgyMjIsIDAsIDY1NDExLCAwLCA0MTE4MiwgNzM4ODEsIDY1NDA4LCA3Mzg5OSwgNzgwMjQsIDk0NzQsIAorICAgIDEwNTQ1LCAxMTkxMTgsIDEwODg3LCAzNzg2LCA2NTQwOSwgODg5NCwgNDMxNzksIDExOTYxMSwgNzkyMywgMzcxNiwgCisgICAgOTIzNjMsIDk5OTYsIDg1MDgsIDAsIDcwMTIsIDgxOTUsIDEyNzgzNCwgOTU2NiwgMCwgMzcyMiwgMCwgNDE3MDcsIDg0OTMsIAorICAgIDU0NSwgOTU3NSwgNDEzNzksIDEwMDUwLCAxMjcxOCwgNjk4NTQsIDg4NTksIDY4MjAsIDc0MzQ1LCA2NTExMCwgMTIwNzQwLCAKKyAgICAwLCAwLCA5MTE5LCAyNzg3LCA3OTIwLCAxMTg4MjMsIDQwMjEsIDIwMTIsIDc5ODUsIDAsIDExOTY2MywgMCwgMCwgNzgwMjEsIAorICAgIDc4MDIyLCA0MTAsIDc4MDIwLCAxODAyLCA3ODAxOCwgNzQxMDcsIDAsIDQxNjU5LCA0MTY3MSwgMTgyNywgMCwgNjQzOTYsIAorICAgIDEwMTI2LCAxMjExNiwgNDE2NzMsIDEyMDM3MCwgMTE0MjIsIDc4MTQxLCAxMjAzNzMsIDM4NjAsIDEyMDM2NywgNjg0MTIsIAorICAgIDQxMzQ1LCAxMjAzNjIsIDEyMDM2MywgMTE3NDgsIDQyMTU4LCA3OTQxLCAxMTA3NiwgODc0OSwgMTIwMzYxLCAyMTA0LCAKKyAgICA2NDg1OCwgMzYxLCAxMjAzNTcsIDg0NSwgMCwgNDE1NjAsIDExOTcwLCA0NTYyLCA5MTc5MjAsIDI5MjYsIDkxNzkxOSwgCisgICAgNDU2OSwgNzQxMzAsIDAsIDQzNDg3LCAxOTQ2MzAsIDYxMSwgNzQxMjksIDY0ODcxLCAxMTg4OTEsIDY1NjI5LCAwLCAKKyAgICAxOTQ4NTgsIDAsIDAsIDEyNzU0NSwgMTIwNTQzLCAwLCAwLCA2MjkxLCAwLCA3ODYzOSwgNDE2NjksIDcwOTQsIDkxNzkyMSwgCisgICAgMCwgOTgzNTgxLCA3NDA1NCwgMTI3NzU0LCAxOTUwMjksIDAsIDgzOSwgOTgzMzE5LCA3Njk1LCA4NzY5LCA2NTI0NiwgCisgICAgNDgyOSwgMTk0NjYzLCA0ODU5LCA2NDQ2NywgMCwgOTgzOTYzLCAxMTg5OTgsIDcyMDYsIDAsIDY2NDcsIDQzOTg2LCAwLCAKKyAgICA2OTc2NiwgMCwgNjQ3NjQsIDQyMTAsIDk4Mzg2MywgMTI3OTM2LCA4MDQsIDAsIDAsIDEyMjk4LCAwLCA2NjY1MywgMCwgCisgICAgNjQ5MjQsIDEwMDkxLCA3MzkzMSwgOTQ2OCwgNzQyNDUsIDAsIDAsIDc0MjQ2LCA5MjUwMywgMTI4MzksIDY0NjY5LCAKKyAgICA5MjIwMiwgMCwgMTI3OSwgMTQyNSwgNjIyNCwgMTE5MjI5LCAxMTA0OSwgMCwgOTI2OTcsIDQzMjM5LCA4NDgyLCA5MjQ0MCwgCisgICAgMCwgNTAzMiwgNjk2NzcsIDExOTQwLCA2Nzg4OCwgNjY0LCAxMjA0MzcsIDUwMzQsIDAsIDAsIDEyNzUyNSwgNDI3MDIsIAorICAgIDczODg4LCA5ODMxNDksIDEzMjk0LCA2Nzg3MywgNjQ4NjksIDYwMzIsIDAsIDkxMTUsIDc0MzAsIDEyMDM3NywgMCwgCisgICAgMTIwODE5LCA2ODM4NywgMTIwMTY4LCA3MzkxMywgMTIwMTcwLCA0MTE2MSwgNTUxOCwgNDE3NCwgMTA5OTMsIDQxMTYyLCAKKyAgICAxMjAxNjAsIDY0NTI4LCAxMTY5LCA0MzQsIDQxNDM3LCAxOTA1LCA2MDM0LCA0MTE2NCwgNjQ3NDQsIDk1MjgsIDExODg2NywgCisgICAgMTI4ODAwLCA1MjQsIDAsIDc0MDI5LCA3ODgsIDc0MDI3LCAwLCAxOTQ2MzgsIDAsIDE2NjMsIDEwNDE5LCA3NDAyNSwgCisgICAgNDI2MzYsIDAsIDY5NzI1LCAwLCAxMjA2NTYsIDAsIDY3ODc2LCAwLCAwLCAwLCA2Nzg5NywgNzQwMzksIDAsIDAsIDExMzk1LCAKKyAgICAwLCAxMTkxMDcsIDQzNjEyLCA2NDM0NCwgMCwgMCwgMTA4NTUsIDU0NDUsIDkzNTUsIDAsIDY1MTk4LCA3MzkxLCA4OTg5LCAKKyAgICAyMjEsIDY1Njg2LCAwLCAwLCA4MDEwLCA3MTkxLCA0OTYyLCA2OTc3MiwgODg1NSwgMCwgMCwgNjQ0NjksIDEyMDQyNiwgCisgICAgMTA1NTUsIDAsIDQzMzMzLCA5MjI5OSwgMCwgMTIwNDI3LCAxMDQ1MSwgMCwgNjc2NTMsIDcyNDUsIDEyNDQzLCA3NDQwNSwgCisgICAgOTk0NywgMTIwMTQ5LCA3ODMxNywgMzg3MywgODM2NywgMCwgMTIwMTQ2LCA0MzQzMywgNDM2NDksIDExOTg3LCAwLCAwLCAKKyAgICAxMTAxMCwgMTI3MjMsIDc0MDU5LCA3NDA2MiwgNjIxNywgNTg5NiwgMCwgNzY4MiwgNzQwNDksIDE0NjIsIDEwMjM1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0MjU5NSwgMCwgNzQ0MDIsIDExODg2MCwgMCwgMTIwNDE5LCA5MjQ5NywgNzQwNTIsIDAsIAorICAgIDkyMzc4LCAxMjA1NDksIDExOTA4MiwgNjQyOTUsIDEyMDQxOCwgMCwgNjQ3NjUsIDczOTIzLCAxMjA0MTcsIDEyMDY2MiwgCisgICAgNjk5MjAsIDE5NDcwMiwgNjIxNiwgMCwgMTA3NTUsIDk0NTUsIDAsIDgxMjQsIDEyNzA0MiwgOTQ3MCwgNjk0NCwgMTI3NTQwLCAKKyAgICAwLCA2OTY4MCwgMjgyOCwgMCwgNTMxLCA0MjYzOCwgMCwgMCwgMCwgNDM0MjgsIDgyMDQsIDM2MTQsIDI4MjcsIDk2OTYsIDAsIAorICAgIDAsIDg3MjgsIDQzNTQsIDEwOTA0LCA3ODU2MiwgMTk5MzYsIDc4MzMsIDEyMDY5MSwgMCwgNDI1OTksIDQyNTk3LCA0MjcwOSwgCisgICAgMTIwNDA5LCAxMjcwNDQsIDAsIDg1MzcsIDAsIDAsIDkzNTQsIDk4MzE2NCwgMTI4ODMzLCA0MTE5OSwgMTAxMjEsIDIwMjgsIAorICAgIDAsIDk4MzE5NCwgNjk3MTUsIDAsIDMwNjIsIDAsIDc0NDQ3LCAxMjYwOCwgMCwgNjY0NDAsIDc1NDUsIDk3MDAsIDEyNTgwLCAKKyAgICA5MjIwNSwgMTIwNzc3LCAxMjA1MDIsIDQxMTU1LCAwLCA3NDA3MSwgMCwgOTgzNDU3LCAxMjcxMywgMCwgMCwgMCwgNzg3NzIsIAorICAgIDAsIDE3MzQsIDAsIDAsIDEyNzA0MCwgNjQ1OTQsIDI0NTYsIDIzMSwgMCwgNzQxNjcsIDU0MiwgMCwgMTE4Nzg2LCAwLCAKKyAgICA5ODM5NzksIDEyMzAsIDAsIDAsIDM1OTcsIDQ0NDYsIDEwNTg0LCA3NDIzNSwgOTIyMTUsIDQwMzcsIDEyNzkzOCwgODM1MiwgCisgICAgMCwgNTY4NywgMCwgNjQ1MTUsIDAsIDE5NDgwMSwgNTUyNjUsIDY3ODQ2LCA3ODQzNCwgOTcwNCwgMCwgMCwgNzAwODAsIAorICAgIDcxMzM4LCAwLCA4NjYwLCAxMjY0OTUsIDAsIDAsIDc4NzczLCA3NDQ4MiwgNDQ4MywgMTcwOSwgNjk3MjEsIDk5MDksIAorICAgIDYwODAsIDAsIDEyMDM1OCwgMTc0NiwgMTMxNSwgODY2NywgMCwgMCwgMTMxNDAsIDY1ODk5LCAxMDYwNCwgMCwgNDQ4MCwgCisgICAgMTEyNjYsIDEyODE1MiwgMTIyNiwgNjkzMCwgNjc5NzksIDk4MzY5MCwgNjM2MCwgMTA4OTcsIDQxMjMwLCA2MDUsIDAsIAorICAgIDc0Nzg1LCA2OTg3NSwgMCwgMCwgNDE1MDAsIDAsIDMxMSwgMTE0NTMsIDYyMjEsIDEwNjA4LCA2NDk0MywgNzQyODAsIAorICAgIDEwODc3LCAxMTg4NjgsIDY0ODg1LCA3NDI3MiwgMCwgMCwgMTI4NTU5LCAxMjA3MzYsIDc0MzEyLCAzNDUsIDAsIDc0NDU2LCAKKyAgICA2NDYwNiwgOTkxNywgMCwgOTIyMzEsIDUwMzcsIDAsIDE3NzYsIDg0MjIsIDAsIDExODgxNCwgNDE1MDgsIDQxMjAxLCAzMjMsIAorICAgIDQzMzI4LCAwLCA0MjY5OCwgMTI5NSwgMTk0ODUzLCA0NjI1LCAwLCA0NjMwLCAxMzExNywgMCwgMTI4NzcyLCA2NTEyMywgCisgICAgMTEyOTMsIDI2NjgsIDExMjg4LCAwLCA0MjY0MCwgNjU2NjYsIDI1MTksIDkyMzY5LCA2NTQyMCwgOTI0NzksIDAsIDQyNTIsIAorICAgIDUwNDksIDQyNjU5LCAxMTkwMTEsIDcwNiwgNzc1NCwgMTA4NTQsIDg3MzgsIDAsIDY1NDE5LCAwLCAwLCA2NDksIDY1NDIxLCAKKyAgICAwLCA2NjcwMiwgMCwgMTI2NzAsIDEwMTMsIDAsIDY0OTE5LCA3MDUsIDAsIDY1NDIyLCAxMjc4MDMsIDExODMsIDEyNjUxOSwgCisgICAgNzAxNywgNDI4NTIsIDAsIDgxNTcsIDk3MzYsIDY0NTAzLCA2NTQxOCwgMCwgOTgzODc4LCA3NDAzNSwgMCwgMTE5MTMsIAorICAgIDczODc0LCA2Njk2LCAwLCA4OTIwLCAxMTkyOTgsIDAsIDc5NjIsIDEyMjExLCA5ODM3LCAyMDUxLCA2NjIyNywgMCwgNDE4NCwgCisgICAgMCwgMCwgMTAxNzcsIDczNzc3LCAxODU3LCAxOTQ2NTcsIDQ2MjYsIDg0NjQsIDg0NzIsIDAsIDQ2MjksIDg0OTksIDc4MzIxLCAKKyAgICA3ODMyMiwgNDYyNCwgNzgxOCwgMTE5MTczLCAwLCAwLCA3ODA1LCAwLCA5NDAwNywgNjkzNSwgOTIyOTIsIDc4MzI1LCAKKyAgICA3ODMyNiwgNzgzMjMsIDQzMzI3LCA0Mzk4OSwgMTE5MDQ2LCA4NDkyLCA4MjUwLCA4NDU5LCAwLCA4NDk3LCA4NDk2LCAwLCAKKyAgICAwLCA3ODMzNiwgNzgzMzksIDk1NDMsIDc4MzM1LCA3ODMzMiwgNzc4MzIsIDY1ODQ5LCA3NzgzMSwgOTgzOTYxLCAwLCAKKyAgICAxMjQ1MSwgMCwgODY4NCwgMCwgNjEwMiwgMCwgNTI5OCwgMCwgNTI5NCwgMCwgMCwgOTgzNDU5LCAxOTUwNjIsIDk5NDksIAorICAgIDExOTgyNiwgNDM2MTcsIDExOTIxNSwgMCwgMTIwNzMsIDAsIDAsIDc3ODYzLCAxMzEwOCwgMTIwNjE3LCAxMTQzOSwgCisgICAgNDE0NjgsIDk4Mzc1NywgMCwgNTI5MiwgNTUyNzIsIDk4Mzg4MywgMTkzOSwgNTMwMiwgMzk3MCwgOTE3ODc5LCAxMjQ1NSwgCisgICAgMTc5MywgMCwgMCwgMCwgNjY0MywgOTI0NzcsIDY1MjYzLCAwLCA3ODMzMCwgNDEyOTMsIDc4MzI4LCA2NTkyMywgMCwgCisgICAgMTMyMTksIDk1NjksIDAsIDc0MzgzLCAwLCA3NDE5NywgMCwgNTUwMCwgODgxMywgMCwgMCwgNzQ1NjYsIDUzMjIsIDAsIAorICAgIDc4MzQwLCA0MzYzMSwgNTMyNCwgNjY0NDMsIDM3ODQsIDQxNjE0LCA2NTI2OSwgNjIzMCwgNzgzNDksIDc4MzQ1LCA0MzMyNCwgCisgICAgMzM2MCwgNzgzNDQsIDExNTIzLCAwLCA5MjQ4OCwgOTkyNiwgNzE5NywgMCwgNjg0MjksIDQyODk0LCA0MTgyMSwgMTI0OSwgCisgICAgNzgzNjAsIDc4MzYxLCA3ODM1NiwgNzgzNTgsIDc4MzUzLCA2NDg5OSwgNjQ3NjMsIDQxMTQ5LCA0MTgwNywgNDMxNjIsIAorICAgIDQxODE1LCA0MTE1MCwgMCwgMTA1NzEsIDEwMDk2LCAwLCAwLCA3ODA3NCwgNjk0NywgNDExNTIsIDg4NywgOTI0OSwgNjU2NSwgCisgICAgNzg1MTAsIDQxOTkwLCA3ODUwOSwgNDE4MTEsIDc0NDY2LCA5Mzk2NiwgNjY3MCwgNzc4ODIsIDAsIDAsIDQzMDkyLCAKKyAgICA0MzMyNSwgMCwgMTAxNjgsIDAsIDk3ODEsIDEyODY1NSwgOTE5MCwgMCwgOTY2NiwgODI2OSwgNjU5NDQsIDc0MDA1LCAKKyAgICAxMzAxOSwgMTE2NzAsIDY5ODYwLCAzMTUsIDEyODEzLCA5ODM0NTgsIDc4NDMyLCA3ODI1NiwgNzgzNTEsIDc4MzUyLCAwLCAKKyAgICA5ODM2NTcsIDAsIDAsIDEzNzgsIDk1MDksIDAsIDAsIDc0NDc1LCAzMDY2LCA5MjIyMCwgNjc4NDcsIDAsIDkyMzU1LCAwLCAKKyAgICA3ODM2NSwgODc4NywgMTIwMzc5LCAxOTQ2MTYsIDQxNjE4LCAxOTQ2MTUsIDc4MjYxLCAxOTQ2MTQsIDAsIDY0NjUyLCAwLCAKKyAgICAxOTQ2MTIsIDAsIDc4MzY2LCA0MjA4OCwgMCwgMTk1MDYxLCA3MTc2LCA0Mzc1NiwgMTAxMzcsIDYxMjEsIDEwOTk1LCAKKyAgICA3ODI1OSwgNzQ1MzQsIDgxMTksIDY0ODc0LCA5MTc4MTYsIDEyNzE5OSwgMTk0OTM5LCAwLCA3NDUyNSwgMCwgMCwgMTI5MzAsIAorICAgIDEzOTQsIDc0NTE0LCAwLCA3NDUxNSwgMCwgMTE4ODA0LCAyOTk4LCA5NTI3LCAxMjA2NTksIDY1MTkwLCAxMjk3NywgCisgICAgNDIwOTAsIDExOTE2NSwgMCwgMTE5MTAwLCA0MTIzNiwgOTIyMzUsIDQyMDA1LCA0MjAwMywgNDEyMzcsIDU4NDgsIDAsIDAsIAorICAgIDM2NzAsIDEyODY1NywgMTk0NjAwLCAwLCAwLCA3ODkwLCAwLCAxMTI5OCwgNDMzMTUsIDAsIDYyMjksIDE1OTMsIDAsIDAsIAorICAgIDYxOSwgNDYzNSwgNjUwODAsIDAsIDEyODAwMiwgNDEyMCwgNjUzMzcsIDY1MzM2LCAwLCAxMTgwOCwgMTE5MjE0LCA3NDExNSwgCisgICAgOTM2NiwgNDI3OTAsIDQyMDA2LCAxMTkxMTUsIDY1MzI3LCA2NTMyNiwgNjUzMjUsIDEwNzU3LCAxNTA3LCA0MjIxNiwgCisgICAgNjUzMjEsIDY1MzIwLCA2NTMzNSwgNjUzMzQsIDY1MzMzLCA2NTMzMiwgNjUzMzEsIDQyMDU5LCA2NTMyOSwgNDI2ODksIAorICAgIDkyNDI3LCA5MTI4LCA5NDA0NSwgNDIwNzMsIDY3ODUsIDY0NTkwLCA5ODM4MzAsIDQzNzEsIDcxOTYsIDY1MzE4LCAyMDM1LCAKKyAgICA2NTMxNiwgNDEwNiwgNjUzMTQsIDY1MzEzLCA0MjA3NCwgMTI3ODQ3LCA0MTIyOCwgMCwgNjU2MDksIDQxMjQxLCA3OTAzLCAKKyAgICA0MTIzOSwgNDM1MzMsIDc4NDU5LCA3MTg5LCAwLCAwLCAwLCAxMjM1NywgNDI4MDIsIDc4NDUwLCA4NDg3LCA5MTMxLCAwLCAKKyAgICA0NjE1LCAxMjY5NSwgMTI3NzUyLCAwLCAxMjE3NSwgMCwgNjQ1MzUsIDAsIDc4MDksIDAsIDAsIDU2MiwgMTIxNjksIDY1OTAsIAorICAgIDY5NzYyLCA2NjQ1NSwgNjQ3MzgsIDMyMTksIDY4NjU0LCA5ODM3ODcsIDAsIDEwMzcsIDAsIDIwMjUsIDEyODI2MywgCisgICAgMTMwOTgsIDc4NDQyLCAxMDYzNywgNDU2OCwgNTQ5LCAxNTcwLCAwLCAyODM1LCAwLCAxMDYyNCwgNDM2MjMsIDExMDcyLCAKKyAgICAxMjcxOTEsIDAsIDAsIDEyNjA2LCA3ODQzMywgMjgyNSwgMCwgMTA4MjUsIDgwNzksIDI4MjEsIDQxMDQ2LCA5MjMyNywgCisgICAgNzM2NSwgOTgzNzUzLCAxMjA1OTMsIDEzMDcxLCAwLCA0NTIsIDQxMDQ5LCA0Mjg0MCwgNjM0NiwgMjgzMSwgNTQ2MSwgCisgICAgNzQ1OTYsIDExNDY1LCA1MjEyLCAwLCA2NDcwMywgMTE5MTkxLCA0MjMwOCwgNzE4MSwgMCwgNDEzMzIsIDAsIDEyMzMzLCAwLCAKKyAgICAxNjY4LCAwLCAwLCAwLCAxMTg3LCA5ODMzODUsIDQyNjI4LCA3ODU3NSwgMCwgMTI4Nzc3LCAwLCAzMjQwLCAxMjg1MTgsIAorICAgIDEyMTk0LCAwLCAxMTU5MSwgNDEwNjUsIDUzMjMsIDgxNjYsIDAsIDAsIDAsIDc0NTM1LCAxNjIzLCA2NTI5NywgMTI4ODU2LCAKKyAgICA1NzEsIDAsIDQ5MTgsIDAsIDUyODgsIDEyNzI5NSwgODkxNiwgNjUwNDgsIDE5MDksIDg4NjQsIDAsIDAsIDEwNzM2LCAKKyAgICA5MjUwOCwgMTE1NzEsIDc2MTUsIDEyNzMwMCwgOTIyOTYsIDQyMzcsIDkyNTc2LCAxMDM1LCA2NTgxNSwgMCwgNzg4MSwgCisgICAgNzAxLCA2NTkzNiwgMzQ4OSwgMCwgMCwgMTIwNzUxLCAxMTQwMywgMCwgMCwgMTI3MTQ2LCAzNzk2LCA2ODAwLCAwLCAzOTk0LCAKKyAgICAxMTQyMSwgMCwgMTk1MDc2LCAwLCA5ODM5MjIsIDAsIDAsIDY0ODU3LCAxMjgxMDUsIDI4NTUsIDEyNzgyOCwgNjYzMDgsIAorICAgIDQxNjIxLCA2ODIxNCwgMTI3MjgzLCAxMjc4MTcsIDEwNjU0LCAwLCAxMTkyMjYsIDEyMTY0LCAzMjQ2LCA3OTA2LCA0Mzk3MiwgCisgICAgNjU4NDcsIDcxODIsIDAsIDEzMDI0LCAxOTQ4MjIsIDc0MjcwLCAxMjgyODksIDAsIDAsIDAsIDE0OTYsIDc0NywgMCwgOTQyLCAKKyAgICAyMzc4LCA0MzEzNiwgMTI3OTA1LCA4NDY2LCA5ODM1NzUsIDkzMjAsIDgwMDEsIDEyMzIsIDgxMzksIDExNjE3LCAwLCAwLCAKKyAgICAxMTQwOSwgNjgzNzMsIDYzODIsIDAsIDY0NjM0LCAxMjgyNzksIDAsIDExNjEyLCAwLCA2NzYwMCwgMjM3NCwgOTQwNjYsIAorICAgIDg0NzUsIDExNjA5LCA2NjMxMywgMCwgMCwgNTI4NiwgMTE5Mjk3LCAwLCAwLCA2NDkyNSwgMTIwMjgzLCAxOTQ1ODQsIAorICAgIDExODk4MiwgMTk0NTgzLCA3NzA1LCAxMTk0MiwgMTEzMDUsIDE5NDU4MSwgMzMwOSwgMCwgMCwgMCwgMCwgNjgwMiwgMCwgCisgICAgNDE2NTMsIDEyODAsIDEyNDEsIDcxNjgsIDEyMDk2LCAwLCA2NjYxNSwgNDI1NjUsIDQxNjUxLCAwLCAwLCAwLCA0MTY1MCwgCisgICAgNjY1MDcsIDY2NDcwLCAwLCAxMjkxNCwgNDE0OTEsIDY2MDEwLCAxMTk1NTIsIDYwNzgsIDk5NTQsIDAsIDE0NzUsIAorICAgIDExOTI0NywgOTkzOCwgNjA4NCwgOTE3NTQ2LCA0MTA2NCwgNDEwNjIsIDAsIDAsIDMyNTYsIDEwMTg5LCA0MjA3NiwgCisgICAgNDMyNTIsIDc4ODIzLCA5MTc5MDYsIDg3MjcsIDAsIDY1ODc1LCAwLCAwLCAxMjc3NjIsIDEwNTYyLCA3NDIxNSwgNDMwNjUsIAorICAgIDAsIDAsIDMyNDgsIDc0Mjk3LCAzMjYxLCA5MDE1LCA3MTM1MSwgMCwgMzYzNSwgNjQzMzcsIDk4MzI4MSwgMCwgMCwgNzE5NSwgCisgICAgMCwgMjAwNywgNjQ0MzEsIDAsIDAsIDAsIDAsIDYzNSwgMCwgMCwgNjU2MTMsIDc3OTA5LCA5MjQyMCwgNzM5OTcsIDAsIDAsIAorICAgIDExOTIxOCwgNzk4NCwgODYwMCwgNzQ0MzQsIDEyNzc3MCwgNDE3NiwgNzAwNTAsIDIwMzQsIDkyNTUxLCAxMjA4MDUsIAorICAgIDY1ODkxLCAxMjcwMzgsIDAsIDMxOCwgMjAzOCwgMTI4ODYwLCA3ODU5NiwgMCwgMzY0OSwgMTMxNDksIDQyMTQ1LCA0Mjc5OCwgCisgICAgMzYzNCwgMTIwMjkxLCAxMTg5MjcsIDY3Njc3LCAxMjAxMjQsIDc4NjYsIDAsIDExNDAyLCA0MjE0NiwgOTQwMzIsIDc0MjM4LCAKKyAgICA0MjY2NCwgMjg0OSwgMTI3MDM0LCAwLCA3OTM4LCAxMjk2MCwgMTc2MSwgMTE4MTIsIDY1Mzc5LCA2ODM4NiwgMTI4MTg1LCAKKyAgICAxMTU5LCAwLCA2OTcyOSwgMCwgMCwgNzE3OCwgMTk0NjMyLCAwLCA0MTY4MCwgMCwgMTI4MjAzLCAxMTUzNCwgMTUxNCwgCisgICAgMTE2NjgsIDY3ODkxLCA5MzEzLCA3MDE1LCAwLCA2Nzg3NywgMTk0NTY3LCAxMjk4OSwgNjY0NzQsIDkzNjgsIDEyODQ4LCAKKyAgICAxNjI0LCA0MzI3MCwgMCwgNzQyNzgsIDEwODE4LCAxMjY2NDQsIDk5NTMsIDAsIDc4NDIxLCAxMTk0LCAzMjQyLCA5NzYxLCAKKyAgICA5NTU1LCA4NTk4LCAxMjAyOTksIDYxNjksIDEyODcxLCAxNTUxLCAyNzk4LCA2NTE3NiwgNDk1OCwgNDI3NTIsIDExOTAyNSwgCisgICAgMCwgNjc4NzUsIDEyMDMwMSwgMzQ5NSwgNjY2NDgsIDE5NDc2OCwgMCwgNjgzNjQsIDk4MzIyNCwgNDg5MSwgMCwgMTA2NDEsIAorICAgIDAsIDczNzQ2LCAwLCA2ODM1MiwgMCwgNzM3ODcsIDE5NDgyOSwgMTk0NjMzLCA3MTk5LCA2NDk1NSwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDI2ODUsIDQyNjc5LCAxOTMsIDAsIDAsIDAsIDQyNjY3LCAwLCA1MjcxLCA5MjMxOCwgOTI1MTcsIDExODg4MiwgMTM2MiwgCisgICAgMTMyOTcsIDAsIDEyODA5NCwgMCwgOTgzMzMxLCA3Mzc4OSwgMCwgNjY1OCwgNDQyNiwgMCwgOTI2MjgsIDk4Mzg0MiwgCisgICAgOTIzMTksIDcyNzYsIDQyMTYzLCA1MjIwLCAwLCAwLCA5ODMzMzAsIDI0MTYsIDMzMTAsIDQyNzAzLCAwLCAzNzksIDAsIAorICAgIDQzNzU1LCAwLCAwLCAzMjIzLCA2NTQ5MiwgMTI4NCwgMTk0NzcxLCA0NTQ5LCAwLCAwLCA5ODMxNTQsIDEyNzc2MywgCisgICAgMTA4MDcsIDk1NTgsIDE5NDYxMywgMCwgODUxNSwgODY4OCwgMTI4NjYsIDY1MzA4LCAzMjk0LCA5ODMzMzIsIDg1MjksIAorICAgIDEyODEwMSwgNDMzODUsIDc1NjQsIDAsIDQzMzI5LCAwLCA5MjQ1OCwgNzM3NTcsIDY2NDU2LCA0MjM1OSwgMCwgMjAzMSwgMCwgCisgICAgNzIwMiwgMCwgMTI2NzYsIDQyNzI5LCA5MjE5OCwgMzIxNSwgMCwgNzcxMCwgMTYxMCwgNzM4MDEsIDAsIDAsIDY1NjgyLCAwLCAKKyAgICAxMjA1MzcsIDY1OTI0LCA5OTc0LCAyMjgsIDY2MzU0LCAxNTAxLCAwLCA2NDM5NSwgNTE3OSwgNzIwMCwgNjIyNSwgMCwgCisgICAgNjU3OTQsIDE3MjUsIDY1NTMzLCA4MTk2LCA3NDc2LCA3NDM5OSwgMCwgMCwgNzE1MiwgODUwMiwgNTc2MiwgMTk2NywgCisgICAgNzQ4MywgMCwgMCwgODEwNCwgMCwgNzQ3NCwgNzc5NzksIDAsIDEyNjUwNywgMTA0MTQsIDEzMDAxLCA4MTQxLCAwLCAKKyAgICA0MjUzNywgMTU1NywgNDM1OTQsIDEyODY0MiwgNjMzMCwgNjgwNSwgODYzMSwgMjU0NSwgNzAwNTIsIDEyNzE2NiwgMCwgCisgICAgNzQxOTAsIDAsIDAsIDk4Mzc4NiwgNDI3NjIsIDAsIDQyOTE0LCAxNjUwLCAyNjIsIDE2MzcsIDAsIDc5MDEsIDMyMzgsIAorICAgIDEyODE3MywgNDE4NjEsIDAsIDEyODU4NSwgNjUxNTgsIDEwODYwLCA5NDA1OSwgNDM2NTgsIDc1MjcsIDAsIDQzMzE5LCAKKyAgICA2NDE5LCAwLCA0NSwgMCwgNjQ1ODgsIDkzOTg5LCAwLCAxMTk4MTAsIDcxOTQsIDUyOTEsIDAsIDQzNjY2LCAxMzEyOSwgMCwgCisgICAgOTA4NCwgMCwgODczNywgMCwgMTI4ODEsIDAsIDEyOTA2LCA5NjM5LCA3OTEyLCAyNjIwLCAwLCAwLCAwLCA5ODM4NzUsIAorICAgIDE3OSwgNjU4OTYsIDAsIDY0NzU2LCAyODUzLCA3ODQ0MywgMTE4ODEzLCA5ODM4OTAsIDExODk5NiwgMTE5MDA5LCAyODUwLCAKKyAgICA4MDg0LCA5ODMwODUsIDczODUwLCAyODAxLCA5MjI4NCwgNDIwNjksIDExOTgzOSwgNzQ3NTQsIDExOTg0MSwgNDIwNzIsIAorICAgIDExOTg0MywgMTE5ODQyLCAxMDM5OCwgOTgzMDU2LCAwLCA4Mzc3LCAxMjcxMTYsIDgyNDUsIDY4NDAxLCAzMTU4LCA5MjM5NiwgCisgICAgMzk4MywgNDM2NTYsIDkyMywgMTE5ODU3LCAxMTk4NTYsIDI5MiwgMTMwMDIsIDExOTg0NSwgMTE5ODQ0LCAzMjIxLCAxNzYzLCAKKyAgICA5MjQ2MywgNDYxMiwgMTE5ODUxLCAxMTk4NTAsIDcyNTMsIDEyNzExMCwgNjgzOTEsIDAsIDEwNzgyLCAzNjM3LCAxMjk5NiwgCisgICAgNDM1NDIsIDAsIDY0NTc4LCA5ODM2NzUsIDMyMjgsIDY5NjM2LCA4NzgzLCAwLCAxMTk2MTQsIDI3MzEsIDAsIDAsIDc4NTg1LCAKKyAgICA0MTAyLCA3Njk2LCA3Mzg3OCwgMCwgMCwgNzg1ODYsIDQzMzE2LCA0MTc3LCAxMTI4MywgOTA4OSwgMCwgNzM5OTYsIAorICAgIDk4MzE3MywgNjQ1MDAsIDQzNjc0LCAwLCA2NDk0NywgMTg1NiwgMCwgMCwgNjM3OSwgMCwgMCwgMCwgMzIwOCwgMTI5NzUsIAorICAgIDc0Nzc1LCAxMjczODAsIDk4MzkzMSwgOTIzODksIDc0MDcyLCA1NTI2OSwgMCwgMCwgOTgzNjgzLCAyMDMzLCA3ODU3NywgCisgICAgNzg1NzYsIDE5NTAyNiwgNTUyNTQsIDc3NDAsIDAsIDAsIDAsIDczOTY0LCAwLCA5Mzk4OCwgNjc2MTIsIDY1Njc0LCAKKyAgICAxMjgyNDQsIDk0MTEwLCA0MTY4OSwgMCwgNzQwMDYsIDY0OTA5LCA2NjQ2LCAxMTc5MCwgNzQwMTksIDAsIDEyODA2NiwgCisgICAgMTI4MDMxLCA4NTYxLCA0NTczLCAwLCA1MzI2LCAwLCAxMjA2MDUsIDcyMzAsIDgyNTcsIDAsIDg3NzgsIDQxNjg4LCAwLCAKKyAgICA2NTc3NiwgMjA3MSwgODMxNCwgNjQ1OSwgMCwgNzYyOCwgNjUwOTIsIDczOTAzLCA2NjcyMSwgMTEzNDIsIDEyODU2MSwgMCwgCisgICAgMCwgMTI4MjI2LCAxMjcwMDEsIDAsIDExODEwLCAxMzE2NCwgMTA3MjMsIDk2NywgOTgzOTUxLCAxMjY0NjksIDExOTQ2LCAwLCAKKyAgICAzMjU3LCAwLCAxMjMwNywgMTg0NSwgOTgzMTU3LCA0MzUyNiwgMCwgMCwgMTg4NiwgNDIzNDIsIDEwMDg5LCA4NzAsIDc2NDgsIAorICAgIDM0OTksIDg2MDksIDc2NTIsIDg3NiwgODcxLCA4NzcsIDAsIDg3OCwgNDIwMTUsIDg3OSwgNDM2OTIsIDQ1NjMsIDAsIDAsIAorICAgIDc1OTEsIDY1ODg3LCA4NjcsIDk1MjAsIDg3MiwgMTI2NjA3LCA4NjgsIDg3MywgNzY0MiwgMCwgODY5LCA4NzQsIDc2NDQsIAorICAgIDEyMDY3NCwgODc1LCA3OTAsIDEyODMwMywgMCwgMCwgMCwgNjYxODIsIDk4MzI1OCwgNTQyOSwgMTk1MDU1LCA2NjE4MCwgCisgICAgMTI2NDgwLCA2NjE4MSwgNjg0NTIsIDk4MzI4OSwgOTgzMjQ4LCA0MjA2NywgMCwgNTQzMywgMTA2NTcsIDc5MTEsIAorICAgIDE5NDYyMiwgMTU0NywgNjYxNzYsIDQyMDEyLCAxMjA1NzYsIDU0MjUsIDQ5NzcsIDk5OTksIDUzMTcsIDU0MjMsIDQ2MTEsIAorICAgIDAsIDY3NjM3LCAwLCA5Njc5LCA3NDEyMiwgMCwgMCwgMCwgNjYxOTQsIDQ0MTgsIDY2MTg0LCA0NjI4LCA0MjQ1LCAKKyAgICAxMTk2NDgsIDAsIDAsIDE4NTEsIDAsIDEyNzE4OSwgMTE5MDgsIDAsIDkzNjAsIDExODg5NywgOTgzMjAyLCA0Mjc3NiwgCisgICAgNjYxODcsIDEyODM3LCA4ODI5LCA3NzExLCA5MjcxNCwgMCwgOTIzMjEsIDQzMzE4LCAwLCA4ODA5LCA2OTg4MSwgMCwgCisgICAgOTgzMTQyLCAxMjA2MDQsIDk4MzA1MiwgOTgzODgyLCAwLCA5ODMyNzAsIDAsIDAsIDc0MjcsIDk5NTgsIDQ1ODgsIDQzNjgwLCAKKyAgICAwLCA3NDQ4NCwgMTk0OTY4LCAyNDMzLCAwLCAxMTk2MjIsIDMzNTIsIDc0MzYzLCA5ODM4ODUsIDAsIDc5MywgNzQ0MDQsIDAsIAorICAgIDMwNSwgNTY3LCA2NzY2MiwgODQyLCAxMjg1MTksIDgyMDgsIDAsIDQxNjk1LCAxNjQ3LCAxMTg4NzcsIDAsIDc4MzcsIAorICAgIDkxNzYyNSwgODE4LCA1MzM3LCAxOTQ2MjgsIDkxNzYyMSwgNDEzNzYsIDExOTk3OCwgMTI2NTc2LCAxMjA1OTQsIDc0MDg2LCAKKyAgICA5MTc2MTUsIDkxNzYxNCwgOTE3NjEzLCAxMDk3MywgNjYzNTksIDEzNzIsIDEyNzE3MiwgOTE3NjA4LCA0OTY5LCAxMjU0LCAKKyAgICA5MTc2MDUsIDkxNzYwNCwgOTM5NjcsIDkxNzYwMiwgNjUyMjgsIDc4MjIxLCAxMjY2MTIsIDAsIDI4NDAsIDAsIDExOTk4MiwgCisgICAgOTgzOTM5LCAwLCAzMjQ1LCA5MDY4LCA2ODE5NCwgNjQ3MjUsIDAsIDAsIDEyOTkxLCAwLCAyNjUxLCA2ODAxNiwgOTgzMjY1LCAKKyAgICA5MTc2MTEsIDEyNzAyNiwgMTI4ODgzLCAwLCAwLCA0MzY0OCwgMTIwODEyLCAwLCA0MzMyMiwgOTI2NjIsIDAsIDAsIAorICAgIDY0MzcyLCA5MjY5OCwgMzIyNiwgNjU1LCA3NTIsIDc0NTcsIDc0NTYsIDc0NTIsIDMyODUsIDEyODc3OSwgMTI3ODIxLCAKKyAgICAxMTk5ODgsIDY1NjEwLCAyMzkxLCAwLCA5MjI0OCwgNjcxLCAyNTAsIDc0MzQsIDYxOCwgNjY4LCA2MTAsIDQyODAwLCAKKyAgICA3NDMxLCAxMTUyLCA0MjgwMSwgNjQwLCAxMjA2NjYsIDc0NDgsIDc0MzksIDYyOCwgMzkwNSwgNzM4MTAsIDAsIDEyODI2NiwgCisgICAgNjQ3NDksIDY3ODUwLCAyMTA3LCAwLCAwLCA0NjA1LCAxMjgxNzQsIDk4MzE5MiwgNDMzNzIsIDY1OTQ1LCAxMjg4MzgsIDAsIAorICAgIDExOTU5MCwgMCwgMCwgMCwgOTg3LCA2OTI3LCAxMTU3MiwgNDIyNjEsIDExNDY0LCAzMzY1LCA5OTcxLCAwLCAwLCAKKyAgICAxMjgyOTcsIDAsIDAsIDAsIDAsIDExMzM0LCA0MzMyNiwgMTI2MDksIDExNTE5LCAxMTUwMywgNTUzMCwgNTIxMCwgMCwgCisgICAgNDYyNywgOTgzODkyLCA1MjA4LCAwLCAxMjg4NDIsIDEwMzMyLCA1MjE4LCA3OTc2LCA5MTU2LCAwLCAzMjQ0LCA1NTI5LCAKKyAgICA2OTY0NywgNzM4OTQsIDEyODg1MiwgNTQzMiwgNjQ5NjUsIDU1MjcsIDc0MDMzLCAxMDUxNiwgNzc5MCwgNTUyOCwgMCwgCisgICAgNDIxNDAsIDEyMDI4MSwgMCwgMCwgNDM1NDUsIDk4ODcsIDAsIDQwMDAsIDc0MjksIDc0MjgsIDY2NSwgNzQyNCwgMzIwNiwgCisgICAgMTIwMjc4LCA3ODg0LCAwLCAxMjg1NjYsIDkxNzk4OSwgMTI4NjY2LCAyMTEsIDI1MDksIDEyODg1OCwgMTIwNTczLCAKKyAgICA2ODY3MiwgMzIyMCwgNDIyMzUsIDAsIDEwNjkwLCA4OTUxLCA1MjE0LCA0MjQ3NCwgODExOCwgMCwgNzA0OCwgNDU5MCwgCisgICAgMTI3MjU4LCA1ODUyLCAwLCAwLCAxMjcyNTksIDE3MDgsIDAsIDk4MzE2NSwgMjYyMywgMTE5NDMsIDAsIDY5MjI2LCAwLCAKKyAgICA0Njk4LCA2NjUwOSwgMTA2NiwgMTE5OTIxLCA0NzAxLCA5ODM4NzYsIDEyMDI4NSwgNzQyMjUsIDk0MTExLCA4MjY3LCAwLCAKKyAgICAxMjcyNjUsIDAsIDc1MTYsIDAsIDI2MjUsIDk4Mzk3NywgODAzNCwgNzQzMDksIDAsIDM2MzEsIDEwOTU1LCA3ODUwLCAKKyAgICAxMjAyOTMsIDg0MTYsIDAsIDAsIDAsIDQzMzg0LCAxMjY2MCwgMCwgMCwgMCwgNzQ4NTAsIDQxMDY5LCAwLCAxMjgxNTYsIAorICAgIDEyMDk5LCA0MzEwLCAxMDAzMiwgNjI1MiwgNzEzLCA3OTkwLCAwLCAzOTkwLCAwLCA5ODMyNjIsIDY2MzY4LCA1MDE3LCAKKyAgICA2NDk1NiwgNzA3MSwgMCwgMTE5MTQ0LCAxMDMwLCAxMTg4MDAsIDk4MzEyMCwgOTUxMywgNDEwNTksIDkzNTcsIDAsIDE3NzMsIAorICAgIDAsIDEyMDM1MCwgMCwgNjMzOSwgNzc0NSwgOTg0NCwgMCwgNjQ2NTAsIDk0LCAxODgwLCA3NDc2NiwgOTgzODM4LCA4OTA4LCAKKyAgICAwLCAxMjg3MDcsIDY1OTEzLCA3ODQ3MCwgMTA3NTIsIDEzMDAzLCAwLCAxMjY1NzIsIDQxMzA3LCA4NzMyLCAxMjAzMzgsIDAsIAorICAgIDE3NTcsIDY5NjQsIDQ2OTYsIDAsIDEyMDMzNSwgNjQ3ODUsIDczOTQsIDM2NDEsIDU0MTksIDEyODA1NSwgMCwgMTI3ODgzLCAKKyAgICAwLCAxMjAzNDQsIDQzOTg4LCAwLCA4NjEwLCA0MzA2MiwgNzU5MiwgODU2LCA3NDI5OSwgOTM2LCAxMzI4OSwgNjk4OTQsIAorICAgIDQzMTcxLCAxNDU5LCAwLCA2NTI0MywgNzg2MzgsIDE5OTUzLCAwLCAxNTA0LCA3MDA2NCwgMCwgMTI5MTMsIDc0MjA2LCAKKyAgICA3NTI5LCAwLCAxMjg2OTksIDk4Mzk1NywgMTIwNzgyLCA0MTEzLCAwLCAyMzcyLCAzMzYsIDAsIDc1MDksIDEyMTUyLCAwLCAKKyAgICA2ODIsIDY2NDU4LCA0MTUwNSwgMCwgNjQ3NDMsIDEwNTkzLCAxNzAzLCAwLCA5ODM5NTUsIDgwMzMsIDY5OTUzLCAwLCAKKyAgICA5ODEwLCAxMjcyNjksIDAsIDEyOTcwLCAwLCA0MjM1MSwgMTAxMDksIDkxNzYyMywgMCwgMTk0NjkzLCAwLCA5MjY5MCwgMCwgCisgICAgMCwgNzQyOTEsIDE5NjUsIDcwNjksIDQzMzEyLCAwLCA3Mzg4NywgMCwgMjA4NywgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAKKyAgICAwLCAwLCA3NDIzOSwgNDEzMTcsIDkyNjE0LCAyMDkxLCA3NDU0NSwgMjA5MCwgMCwgOTM1MywgNzExNywgMjA3NywgNzc4ODYsIAorICAgIDAsIDEwNDk4LCAyMDgzLCA3Nzg4OCwgMCwgMCwgMTE5MjM2LCA2MzQsIDAsIDAsIDAsIDY5Nzc5LCA0MTY1LCA4NzQ2LCAwLCAKKyAgICA5NjU0LCAxMjg1NiwgNjkyNCwgMCwgNzA2NiwgOTgzNzE5LCAwLCAxMjgxMzUsIDQxMDM3LCA0MjY5MiwgNzc4NiwgMTI5NTksIAorICAgIDQxMDM5LCAxMjc0ODMsIDAsIDY4MCwgMjMwMiwgMTI4MjAwLCAxMTgxLCA3MDU2LCAzMTc0LCAxMjY1MTYsIDAsIDkyNjY4LCAKKyAgICA2NTY2NSwgMTI3Mzc1LCAxMjY1MDYsIDY5MjAsIDAsIDkyMjk1LCAwLCAxMTg5NjUsIDAsIDY0NjQ0LCAxMjY5ODEsIAorICAgIDc0MTE5LCAwLCA0MTAyOCwgMCwgNjIzMSwgMjYxMywgNjUzMDIsIDQwOTg5LCAwLCAxOTQ2OTYsIDAsIDQyNzYwLCAwLCAKKyAgICA5ODM1NjYsIDAsIDQwOTg3LCA0NjY3LCAwLCA5ODM5MzIsIDg4MjgsIDAsIDAsIDEyNDYsIDQ3NDYsIDAsIDAsIDExMDIxLCAKKyAgICA0NzQ5LCA5MjY3NSwgMCwgOTIxLCA0NzQ0LCAwLCAxMjcwMiwgMjQyLCAwLCAxNTY2LCA4MjE3LCAwLCA2NDY1MywgNzgzODYsIAorICAgIDEyODEyMSwgNzQwMzYsIDc0NTA1LCA0MzI3NCwgNTMxMywgOTUxLCAwLCAwLCA5ODM4NjcsIDc2MDQsIDk4MzI5MCwgNDAwOSwgCisgICAgMTI3ODE2LCA5ODM3MTAsIDEyMDU2MiwgMCwgOTgzNzIwLCA2NDg2MCwgMTE5MTM4LCAxMTkwNjksIDAsIDEyNzM3MCwgCisgICAgNDA0OCwgOTgzNTk4LCAwLCA3MDAyNCwgMTY0NiwgNzc4OTAsIDY0NTM0LCA3Mzk5NSwgMTIwNzA1LCAwLCAxMTk4OTAsIAorICAgIDI1NzksIDExOTkwNSwgMzE3NywgMTEzNTcsIDkwOTksIDQxMDcsIDM0NDEsIDExOTg5NCwgMjk3NSwgNzQ0NDIsIDk4MjIsIAorICAgIDk4MzkzNSwgNTUyMjAsIDEwMDg0LCA3Mzk0MywgMTE4ODQwLCAwLCA5MTc1NjIsIDE5NDYxMCwgMzM5OSwgOTg1MSwgCisgICAgOTgzNzE3LCAxMTkwOSwgOTA1OSwgMCwgNzY4NywgMCwgNjc4OSwgMCwgMCwgMCwgNzEzNjcsIDAsIDAsIDE3NzcsIDkxNTEsIAorICAgIDExMzcsIDY5NzY3LCA3NDksIDQyMzY2LCAwLCA1Mzg1LCAxMjg1NzQsIDEyODIxOCwgMCwgMCwgNTk4OSwgMCwgMCwgCisgICAgMTI4MDkxLCAwLCA0MTY4NSwgNjkyMjMsIDAsIDk3NjksIDQxNjg0LCA5ODMyMTYsIDUxOSwgMCwgMTE3NDAsIDU3NjYsIDAsIAorICAgIDAsIDI2MDAsIDg4NDgsIDEyMDEzOCwgNDEyOTcsIDAsIDM2NjYsIDc0NDczLCA0MTMwMCwgNzQ0NjgsIDY1MTYwLCAwLCAKKyAgICA2OTY4OCwgNjk3NzEsIDc0NDc5LCAwLCA2NTU4LCAwLCAwLCA2OTc2NSwgMTIwNzUwLCAyNTIsIDAsIDQxMzAyLCAwLCAwLCAKKyAgICAwLCA2OTc2MywgMCwgMTE3MjksIDg3MTksIDkwNjAsIDAsIDEyMDEzOSwgMTA3NjEsIDAsIDAsIDAsIDExODc5MiwgMTE3MzQsIAorICAgIDk4MzIyMywgMTE3MzAsIDAsIDk1OTMsIDU3NTcsIDI0MDMsIDY0ODA4LCA1NTI3NSwgMCwgMTE3MjgsIDQzNTcyLCAwLCAwLCAKKyAgICA3NzY0LCA5ODM3MTQsIDExMDk0LCAxMjA4MjUsIDAsIDk4MzIyNiwgNDI4MiwgODI5OCwgMCwgMCwgMCwgMCwgMCwgNjQ0NDksIAorICAgIDAsIDEyNjY1MCwgNjM4NTQsIDg0NTYsIDAsIDc0NzgzLCA2NTY3MCwgMCwgNzgyNTAsIDAsIDc3NzQsIDEwNjA3LCA5NzkyLCAKKyAgICAwLCAwLCAwLCAwLCAxMjA3NjQsIDAsIDEwMDE5LCA3NDc2MiwgMCwgMzQ1OCwgNDM2NSwgNzAwNTMsIDk4MzcxMiwgMzY0NywgCisgICAgMCwgMjYwMiwgMTI4MzQxLCAwLCAxOTQ3MDcsIDQxMTM1LCAwLCAwLCAwLCA2NDYzMSwgMTcyLCA0OTcxLCA0MTIxOSwgCisgICAgNDExMzcsIDE4ODksIDcyMzgsIDY1NDUsIDEyNjQ3NiwgOTIxOTMsIDc1OTcsIDEwNTI4LCAwLCAwLCAzNzMyLCA3MzkxMCwgCisgICAgMTk0NTg4LCA1MzQ0LCAwLCA0MzM2NiwgNDMzNjMsIDkwNjIsIDExOTI1MiwgMCwgMCwgMCwgNjQ0NzksIDkyMzIsIDkyNTk2LCAKKyAgICAwLCAwLCAxOTQ3MTIsIDEwOTAwLCA0MTUzMSwgMTI2MywgMzcyMCwgMTIwNDgsIDAsIDY0MjkyLCA0MTUyNCwgNzIyNywgCisgICAgMTE5NjM1LCA2MDk5LCA0MTUzNCwgMCwgMTI3MzU0LCAxMjczNDUsIDI5OSwgOTE3OTU3LCA4NTI1LCAxMjczNDcsIDM1MjQsIAorICAgIDkxNzU2NSwgODgzMSwgMTI3MzQ5LCA5MjU2NCwgMzA3NSwgNjc4NjcsIDEyNzM1MiwgMCwgNjYzNjIsIDAsIDY0MzUzLCAwLCAKKyAgICAwLCA1ODQ1LCAwLCAwLCAwLCAyNTgxLCA4MjAwLCA2NTExNCwgNjg0NjAsIDAsIDQzMjgzLCA1NTUxLCAwLCAxMjA3MzUsIAorICAgIDk4MzIwMSwgNjM0MCwgMTE4ODU1LCAwLCA3ODEzNCwgODY4MCwgNzIwNCwgNzAwNjUsIDI1ODgsIDI5MTQsIDcwMTEsIAorICAgIDU1MjgxLCAwLCAyNDcxLCAxOTQ2MzEsIDI4ODMsIDI3NDksIDExOTU2MywgNzM3NzQsIDEwOTEzLCAwLCAwLCA4NjY2LCAKKyAgICA2NzUsIDQyNDkzLCAwLCA0MzU3MSwgMCwgNjIxOSwgMCwgOTk4MCwgNDEyMzIsIDEwOTI4LCAwLCA0MTE1MywgNDEyMjksIAorICAgIDExODk2NywgMCwgMzczOCwgOTQwMTYsIDAsIDEyNzExLCAzMTgxLCA2NjIxMiwgNzQyODksIDY4NDcyLCA0Mjg1NywgODI2MiwgCisgICAgOTgzMzc5LCAwLCA5ODMyMjIsIDAsIDQyMzQ3LCAxMjA5MiwgOTYxNSwgNzIzNCwgNzQwNDcsIDk4MzA4OCwgMCwgNDM3NDQsIAorICAgIDAsIDAsIDczODQ2LCAyOTM0LCAxMjcyMiwgMTIwNzYyLCA5MjIsIDQzOTgzLCA3NDUwNywgOTgzMTI2LCA3NDQ2MSwgMzIxOCwgCisgICAgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCA4NTY5LCAxMTQwNCwgMTE5MzIsIDczNzI4LCAzMjE0LCAKKyAgICAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCA3ODcyOSwgMTkwMSwgNzg3MjcsIDEyNzMyNiwgMTIwNDYwLCAKKyAgICA3NDI1LCAzMjA1LCA2ODAwMywgNzg3MzcsIDc4NzM2LCA3ODczNSwgNDMzODMsIDY5OTQwLCA2NTQ1OSwgMjYwNiwgNzg3MzAsIAorICAgIDczODk3LCAwLCAxMTQ5NiwgMTE3MywgMCwgNDEyNzIsIDExOTY2MSwgMCwgMCwgOTgzMzIxLCAxMjA3MzcsIDAsIDk4Mzk3MSwgCisgICAgOTgzMzIwLCAzNzgsIDI2MTAsIDAsIDY1MDc5LCA5ODMzMjUsIDY1Njk1LCAxMjY1NTksIDM3LCA3MDY4LCAwLCAxMjA0ODAsIAorICAgIDEyMDQ3OSwgMzIwOSwgMTIwNDc3LCAwLCAxMDYzOCwgOTc2OCwgNjk5NTIsIDExOTkwOSwgOTgzMzk5LCAwLCAwLCAwLCAwLCAKKyAgICA2NTUxMCwgMCwgMCwgNTIzMywgOTgzMzM1LCA2NDc5MiwgOTgzMzM0LCAwLCAxMjY2MzMsIDAsIDcwNjAsIDk4NDcsIAorICAgIDEyMDE0NCwgMTY4NSwgNTk1LCAwLCA3Mzk3MSwgMTI5MiwgODk0MCwgNzM4MCwgMTEwODgsIDAsIDEwMDA0LCAxMjY5OTcsIAorICAgIDAsIDY1NDEsIDAsIDAsIDAsIDMyNDMsIDkwMTQsIDU2MDYsIDAsIDUzOCwgNjQ2MjAsIDU2MDIsIDg0NjcsIDc0MzkxLCAKKyAgICA2NTQ3LCAxMjgxMzIsIDgyMDMsIDc4NDg4LCA5ODMwOTAsIDg0NTgsIDY1MjExLCA4NDk1LCAxMTk5MDQsIDAsIDkxNzU1MiwgCisgICAgNzc5LCA3ODMxNCwgNjQzNjcsIDI0NjUsIDY5OTAxLCA4MTkzLCA1NTI3OSwgOTczMCwgOTI4MCwgMCwgNzA2NSwgNzQxNTUsIAorICAgIDQzNDYsIDAsIDczNzk4LCA1MDQsIDAsIDkyNDE0LCA4OTgyLCAwLCAwLCAwLCA3ODIsIDAsIDEwODgzLCAwLCAxOTQ4NTIsIAorICAgIDczMiwgMzczNywgMTI3MjUzLCAxNTQ4LCA2ODY1MCwgOTI1MDcsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAxMTkwMjAsIAorICAgIDQzNzYsIDAsIDExNzg3LCAzNzQ1LCAwLCAwLCA0Mjg4OCwgNjU3MTIsIDk4MzMwNCwgMzg2OSwgMTE5MzcsIDU3MjUsIAorICAgIDEyNzUzOSwgMTc4MywgNjg2NDgsIDU3MjgsIDAsIDAsIDAsIDExOTE4LCA2NjU2NywgNTcyNCwgMCwgNTcyNywgNzg1MjEsIAorICAgIDAsIDAsIDc2NCwgMCwgMTI4MTE2LCA0MzUzMSwgMCwgOTAzMywgMCwgNDI1MzIsIDYyMjMsIDExMDQyLCAxMjA3NDksIAorICAgIDExNDIzLCAwLCAxMTk4NjEsIDcxMzQ0LCA0MzQ2NSwgMCwgMTI4MjY3LCA2NTU5LCA2NDU1NywgNzEzNDgsIDkyNjQ5LCAKKyAgICAxMjA2NDgsIDQzMDE5LCA0MzQ3NywgMTAyMzgsIDc0NDkxLCAwLCA0MzM3NywgOTIyODIsIDcxMzQ2LCAxNDc4LCA5NzgzLCAKKyAgICAxMTgyNSwgMjYwNywgNjQ3NDAsIDAsIDc3MzksIDc0NTQzLCAwLCAwLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMCwgNzAwNTgsIAorICAgIDQxMTQ0LCAwLCA5MjQzOCwgNDM1MzcsIDY3NjEsIDEwMDkzLCA0MzY5LCA5MTc3OTEsIDAsIDk4MzE0OCwgODgyMCwgMzk0NywgCisgICAgMCwgMCwgMTE1MTUsIDUyNiwgMTI4MTAzLCA0MTI5NSwgMTk0NjAzLCA5MTc3ODUsIDE5NDkzMiwgMCwgNzY4OCwgOTE3Nzg2LCAKKyAgICA3Njg2LCA4Mjg4LCAxMTgxNSwgMCwgMCwgOTgzMzgyLCAxNTQzLCAzNzEzLCA0MTIyMSwgMTI0MjMsIDQyMjgxLCA5MTc3ODgsIAorICAgIDc0MDI0LCAxMjI5MywgMCwgNjQzNTcsIDExNzk0LCA0MjA4MiwgMCwgMTczNywgODk4NywgNDIwODEsIDAsIDcyMDUsIDAsIAorICAgIDkzMzUsIDEyODUwLCAxMTk4NzAsIDY1NTMsIDcwNTUsIDAsIDgyNzcsIDAsIDAsIDU0NzUsIDc0Nzk1LCA2NzgwLCAwLCAwLCAKKyAgICAxMjk5MCwgMTE2MCwgNDIwODQsIDExOTY1MCwgNDEyMTcsIDExOTY2MCwgMTAwMTgsIDM2MCwgMCwgMCwgNjgxNzYsIDU4NjMsIAorICAgIDMxMzcsIDAsIDQxNDcsIDk4MzE3MCwgNDEyMTYsIDc4NDQsIDI2MTYsIDExOTE5MCwgNjg0NjEsIDY1MjM0LCA5ODMyOTQsIAorICAgIDEzMDc2LCAzMTM1LCA5ODMyODcsIDc4MTQzLCAxMTkxMzksIDMxNDIsIDkyNDUxLCA5NDA2OCwgMTA4MTksIDExOTU4MCwgCisgICAgMTAxODMsIDAsIDI2MDgsIDE0NzAsIDczOTY3LCA5NDAwOCwgNjIyNywgMCwgMTI3MTczLCA2OTc0MSwgOTgzNTgyLCA2MTYzLCAKKyAgICA5ODM1NTgsIDAsIDEyNzMxNCwgMCwgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAxMDg3NiwgNDMzOTIsIDExOTU3MywgCisgICAgMTI3OTMxLCA1NzUxLCAwLCA2MjIyLCAwLCAwLCAxMjA4NiwgNzQwMywgMTYwMCwgNjQzMDksIDY0OTM5LCAwLCA2NDc4MywgCisgICAgOTI2NTgsIDExMzEwLCAwLCA4ODgyLCAwLCAwLCAyNTcwLCA3MDIxLCAwLCAwLCA0MzExMCwgMCwgMTIzNCwgNjU0MCwgCisgICAgNjk3NCwgMCwgMCwgOTgzMjExLCA1MDAyLCAwLCA0MTI4NiwgNjk5NDYsIDEyNzAxOSwgMCwgNDM1ODUsIDAsIDY1NTEsIAorICAgIDk4Mzk2MiwgMTI4MjI5LCAwLCA0MTI4OSwgMCwgMTk0NjAyLCAwLCA4OTc3LCA2MDIsIDEyMDgxNCwgMCwgMTI4Nzc4LCAKKyAgICAxMjg2NjEsIDAsIDk4MzM3NSwgNDEyNzksIDAsIDAsIDAsIDExMDgxLCA0MzYxNSwgMCwgMCwgMCwgOTgzNjEyLCAxMjcyNywgCisgICAgMCwgMCwgNzgzOTcsIDk0NzUsIDcxMTIsIDY1MTA1LCAwLCA5NjMzLCAxMDg4NiwgNDM1OTIsIDc4MzEsIDk4MzgyOSwgCisgICAgMTk0NTcxLCAwLCA3MzkxNSwgODA3NiwgNDMwNDgsIDgyOTAsIDgyOTEsIDQzMDUxLCA5MjU3MCwgMCwgMjU5NiwgNDM1ODQsIAorICAgIDAsIDEzMTEzLCAwLCAxMjc3NTcsIDIzOTMsIDcwNTgsIDkwODcsIDc0MDY3LCA2ODY3MywgNDE1NzQsIDc4MzM3LCAwLCAKKyAgICA3NDA1OCwgNjM3NiwgMCwgMCwgMCwgMCwgOTg1NCwgMTI3NzQ4LCA2NDY5NiwgMCwgMTI4MjIwLCAwLCA2OTk0LCAwLCAKKyAgICAxNzIwLCAwLCAwLCAwLCA2NTI5LCA3MDYzLCA5ODMxODIsIDM3NTEsIDkxMjAsIDk4MzQ4NSwgMCwgMTc5OCwgNzA5LCAwLCAKKyAgICAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgMTI0MzAsIDgxMzcsIDk0MDk4LCA5MjY0MiwgMCwgMCwgMjQ1LCAxMjgwOTcsIAorICAgIDExNDU2LCA0MTIzMywgNzA3MCwgMCwgOTQwNDYsIDYxMzYsIDkxNzYwOSwgNjU2NzcsIDg2ODIsIDQxMjM1LCA5MjU5NSwgCisgICAgNDIwNDUsIDk4MDQsIDExODk2MywgNDMyLCAzNTk1LCAxOTQ5NDUsIDY1NDM3LCAwLCA3NDQ1NSwgNDIzOTksIDAsIDAsIAorICAgIDEyODI3NCwgMCwgMTE5NjU4LCAwLCAwLCAwLCA3Nzg5NCwgODc5NywgMCwgOTA1MiwgNjQ4ODgsIDcxNjcsIDIzNTYsIDk1LCAKKyAgICA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgMCwgOTQxMDksIDAsIDc0MTM3LCA3MDAzNSwgMTAwNjMsIAorICAgIDEyNjUyLCAxMjE5OSwgOTI0ODAsIDAsIDI1NjYsIDExOTcxLCA5ODM3MzcsIDAsIDEwNjUsIDAsIDAsIDQzNDAwLCAyNTc2LCAKKyAgICA2NjY5NiwgOTM5OTksIDAsIDQzNjA0LCAwLCAwLCA3NDA4MiwgNTE0LCA3NDUwMiwgNzAwMzIsIDI5MjEsIDQzMjE1LCAKKyAgICA2NDQ5MywgNTc3MiwgMTI5NjgsIDcwMDU1LCAxOTQ5NDQsIDc0NTgwLCA0MzM5OCwgMjU4MCwgOTgzODEwLCA0MTM0MSwgCisgICAgNDEyMjMsIDY1NjQsIDE0NjMsIDQxMzQyLCAwLCA1MjkzLCA3MDAyMCwgMCwgMzczMywgMTEzNDYsIDAsIDEyMDU0LCAwLCAKKyAgICA3NDA5OCwgNDI4MjcsIDAsIDEzMDkxLCAwLCAwLCAwLCA5MTc5MTUsIDAsIDEyNzAyNSwgMCwgNzQ4MjEsIDAsIDk4MzczMywgCisgICAgMTE5MDQyLCAwLCAxMjc4NjUsIDEzMDkwLCA2NjY0MywgMCwgMTI3MCwgMTEzMiwgNDIzNjAsIDAsIDc0MDk2LCA2NjY1NSwgCisgICAgNDI1NjksIDEyNzgyNCwgMCwgNjQ3NjEsIDAsIDQxMDIxLCA4NTEwLCA0MjQzMiwgMCwgMCwgMTk0NzgyLCAwLCA2NDQ5NiwgCisgICAgNzQxMDksIDcwMDMwLCA5OTE1LCAwLCA5ODMyMTgsIDcwNjEsIDQxMzM2LCAzODU0LCA2OTcwMCwgMTMxNDEsIDY4NDEzLCAKKyAgICA0MzQwMSwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCA2ODIyMSwgMCwgMTI3MzgzLCAxMjcxNzEsIDAsIDAsIDEyNzc5NywgCisgICAgOTAyOSwgNDM1NDMsIDExOTMxNSwgMjM1MywgNjMwOCwgMCwgNzQ3OTIsIDI2MTEsIDExOTE4NiwgMCwgMCwgMCwgNDM2NjQsIAorICAgIDkyMzk5LCA2NjYyNywgMCwgNDQ4NCwgODUwOSwgMTE4OTc2LCAxMTA2NiwgNjUyMzMsIDAsIDQxMjI0LCA0MTAxNywgMCwgCisgICAgMzc0NywgMTA1MjIsIDAsIDAsIDE2OTEsIDQxMjI2LCAwLCAxMjEwNywgNzEwMCwgMTA5MDUsIDY1MDEwLCAxOTQ5ODYsIAorICAgIDY5NywgNjYwMTgsIDkyODQsIDQyNDQsIDAsIDAsIDkyNjQ0LCAxMzEyMSwgMTIwMDM2LCAwLCAxMjAxMCwgMTI4NTczLCAKKyAgICAxMjgyMjEsIDAsIDAsIDAsIDEyNzE5MywgNjU4MTYsIDY4MTExLCAwLCAxMjc5MzMsIDY1NjY4LCA5MjI1NywgNjYxOCwgCisgICAgMTE4Nzg0LCA2NjM2NSwgMCwgNDIyMzQsIDEyNjQ4LCA3ODExMCwgNzEyMywgNzAwMzgsIDU3ODUsIDkxOTgsIDk3NjQsIAorICAgIDQxMzE2LCA2NTg3NywgNzM4MywgMTMyMzAsIDQxMjk5LCAwLCAwLCA2ODM2NSwgMTI4MjU4LCAwLCAwLCAwLCAxMzEyMiwgMCwgCisgICAgMTkxLCA3MDA2MCwgODU4NSwgODAwMCwgNjQ0MTEsIDEyMDY1MiwgNDI4ODksIDY0ODUwLCA0MTA3MiwgNDE1NzgsIDAsIAorICAgIDQxNTc3LCAwLCAxMDAwMiwgMCwgNjUzMywgNzM4MDIsIDQxNTcwLCAwLCA2ODMsIDM5NiwgNDE1ODAsIDY4MTQ2LCAwLCAKKyAgICAxMjkwMSwgNDMwNTgsIDAsIDM0MywgNzEyOSwgNDI2ODAsIDQxMzYwLCA3ODE1NCwgMCwgNDc0MywgMCwgMCwgNzQwNDAsIAorICAgIDc0MTA4LCA4NzQzLCAxNzI0LCAxNDMzLCAxMTkzMjIsIDAsIDM3MzksIDYyNjMsIDcxMzQ5LCAwLCAzOTY0LCA2NTkyLCAwLCAKKyAgICAxMjg2OTMsIDY2MDQwLCAwLCA0MjU2OCwgNjk4MDYsIDEyODExMywgMTc3OCwgMzk1NiwgMCwgNDIwNzAsIDY1NjMsIAorICAgIDQzMDc1LCA5MDE4LCA5NDAwNiwgOTgzMzk2LCAxMjA2NywgNDEzMTIsIDAsIDU1NDcsIDc0NTMxLCAxMjc5NjksIDAsIAorICAgIDgxNzUsIDAsIDI4NCwgODEwOCwgOTM0LCAwLCA3NDAwMSwgMTczLCA2NjQ2MCwgNzE3NCwgOTI3MDMsIDExODgyMiwgMTc1MCwgCisgICAgMCwgNDM5NCwgNjgzNjgsIDE4MDcsIDk4Mzg4OCwgOTIyOTgsIDAsIDU4ODksIDAsIDcxODAsIDAsIDExOTE0NSwgMCwgCisgICAgOTE3NTU4LCA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgNDUxMiwgMTE5MzYwLCAKKyAgICA2NTIzMCwgMTI4MTA5LCAwLCAwLCAzODU1LCAwLCAwLCAwLCAwLCA3NDI5NSwgMCwgMCwgOTI0MTYsIDM5NzUsIDAsIAorICAgIDc0MDg3LCAwLCAxMjY3MiwgMzc5OCwgMjcwMywgOTgzNTk5LCAwLCAyMTA5LCA5Nzc0LCAxMjc1LCAwLCAwLCA0MTA5NSwgCisgICAgMzk2MiwgMCwgMjkzMiwgNDExMDEsIDM5NTQsIDY0NTcsIDQ1MTMsIDAsIDAsIDczOTk0LCA3Mzk5MiwgMTQ2OCwgMCwgMCwgCisgICAgNDE4NTEsIDEyODIzMCwgNDE4NDYsIDAsIDU1MjM4LCA3NjMzLCA0MTg0OSwgNjgzODUsIDQzMjAsIDMyMjQsIDAsIAogICAgIDEyODAzMiwgMCwgNDI1MzEsIDExOTEwOCwgMTUxMCwgMCwgODI1NiwgMCwgMTEzOTMsIDAsIDg4NzksIDEyODA3NSwgCiAgICAgOTI0NzQsIDg3NzAsIDAsIDAsIDc4Mzc3LCAxOTEwLCA4NjcxLCA3ODM3NCwgNDI4MywgMCwgMTI3MTE3LCA2ODM2MSwgCiAgICAgNzgzMTgsIDI2NTQsIDc4OTMsIDE5NTAwNywgMCwgMCwgMCwgNjUxMDYsIDQyNzYxLCAxMjg1NywgNDU4MSwgODQxMSwgCkBAIC0xOTIzNiwyOCArMTkyNTYsMjggQEAKICAgICA5MTc2MTksIDAsIDAsIDEwMDQzLCAwLCAxMTg2LCA0MTU3MSwgNjk5OSwgNjE3LCA5NDY0LCAxMjY2NDIsIDM2NzUsIDUyMDcsIAogICAgIDY1MDYyLCA1MjEzLCAxOTQ3NjksIDI2MTcsIDQxMzQ4LCA0MTU2OCwgMTI4ODAzLCAzMjUzLCAxMjA1MzUsIDAsIDg2MzAsIAogICAgIDEyODU0NCwgMCwgNTU5NiwgNTU0NSwgNzI4OCwgMjU4NiwgNjQ4ODcsIDAsIDUyMTcsIDcxMzM2LCAwLCAwLCAwLCA2NDI5MywgCi0gICAgNjgwOTgsIDI2MzUsIDAsIDAsIDk4MzgzNywgMCwgOTgzNjMyLCA3ODM1LCA3MDA0MCwgMCwgMTk0OTg4LCA5MjI4NSwgCisgICAgNjgwOTgsIDI2MzUsIDAsIDAsIDk4Mzg0NiwgMCwgOTgzNjQxLCA3ODM1LCA3MDA0MCwgMCwgMTk0OTg4LCA5MjI4NSwgCiAgICAgNjQ1NTgsIDEyNzEyMiwgMCwgMTI3MTIxLCAwLCAxMjc5MTMsIDAsIDU3ODQsIDk4MzEwMiwgMCwgMCwgNzAwMzMsIDQwMTEsIAotICAgIDkxNzYxNiwgNjgxMDEsIDAsIDc4NjQsIDQyNTQsIDY1MDk1LCA5ODM0ODgsIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIAorICAgIDkxNzYxNiwgNjgxMDEsIDAsIDc4NjQsIDQyNTQsIDY1MDk1LCA5ODM0OTYsIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIAogICAgIDU1OTgsIDEyMDcsIDEyMDUyMSwgNjY2ODksIDM1MDEsIDQyNTgyLCA0MzYwMCwgMTk0NzgwLCAwLCAxMTI0LCA1NTk3LCAKLSAgICAxOTQ3NzgsIDE5NDc3MiwgOTMyMSwgOTgzNDc2LCA5ODM0NzMsIDk4MzQ3NCwgMCwgMTcxOSwgNjgzNTYsIDY4MzU0LCAKLSAgICA5NjcxLCAxMTI1LCA0Mzk5LCAxMjc0NzksIDkxNzYxMCwgOTgzNDgwLCA3NjMxLCA1NDg4LCA3MTI4LCAxMjA1MzIsIDAsIAorICAgIDE5NDc3OCwgMTk0NzcyLCA5MzIxLCA5ODM0ODQsIDk4MzQ4MSwgOTgzNDgyLCAwLCAxNzE5LCA2ODM1NiwgNjgzNTQsIAorICAgIDk2NzEsIDExMjUsIDQzOTksIDEyNzQ3OSwgOTE3NjEwLCA5ODM0ODgsIDc2MzEsIDU0ODgsIDcxMjgsIDEyMDUzMiwgMCwgCiAgICAgNTQ5MSwgMCwgODkzNywgNDMwNDQsIDI2MDQsIDc0MTg3LCA1NDkwLCA0MzA0NiwgNTQ4OSwgNzIxMiwgMTE3NjgsIDQzMDQzLCAKICAgICA2MzAwLCAwLCA3MTIyLCAwLCA0MzkwLCA0NTQsIDQxMzk3LCAwLCA5ODc1LCA3NTkzLCAxOTQ3OTEsIDkyMjc0LCAxMTg5MTMsIAogICAgIDcyMDcsIDAsIDY1OTAxLCAyMzk0LCAyNTc1LCAwLCAzNzQ2LCAxMTAxNiwgNjU3NTIsIDEyMDAzNywgMCwgNDM0MjMsIAogICAgIDEyODY4MywgMTE5ODksIDAsIDAsIDAsIDAsIDAsIDgyNDksIDEyODE3MiwgMCwgNzg1MzEsIDY2NDAsIDc0ODA2LCAyNTk4LCAKLSAgICA1MTMsIDAsIDY1ODYsIDg2NTYsIDAsIDEyMDcxMCwgNjUwMDgsIDAsIDE5NDc4NCwgMTk0OTg5LCAxOTQ3OTUsIDk4MzQ2NSwgCi0gICAgOTI1MTUsIDY4NDc1LCA5Mzk3MywgMCwgMCwgNzg2MzcsIDEyNjQ3LCAwLCAxMjgwNDMsIDY5ODkzLCAxMDM2LCA5ODM0NjksIAotICAgIDkyNDE5LCAxNzIzLCAxMjgwNTYsIDc0MjE3LCAwLCA0MTU3OSwgMjQ0NCwgMCwgMTA3MDUsIDczODc2LCA5ODM0NjEsIAotICAgIDc0NDg2LCA5ODM0NTksIDc0MCwgMTE5MjIyLCAxOTQ5NzgsIDE5NDk4NCwgMCwgNDIzOCwgMTEwNzEsIDk0NTksIDY4NDM3LCAKKyAgICA1MTMsIDAsIDY1ODYsIDg2NTYsIDAsIDEyMDcxMCwgNjUwMDgsIDAsIDE5NDc4NCwgMTk0OTg5LCAxOTQ3OTUsIDk4MzQ3MywgCisgICAgOTI1MTUsIDY4NDc1LCA5Mzk3MywgMCwgMCwgNzg2MzcsIDEyNjQ3LCAwLCAxMjgwNDMsIDY5ODkzLCAxMDM2LCA5ODM0NzcsIAorICAgIDkyNDE5LCAxNzIzLCAxMjgwNTYsIDc0MjE3LCAwLCA0MTU3OSwgMjQ0NCwgMCwgMTA3MDUsIDczODc2LCA5ODM0NjksIAorICAgIDc0NDg2LCA5ODM0NjcsIDc0MCwgMTE5MjIyLCAxOTQ5NzgsIDE5NDk4NCwgMCwgNDIzOCwgMTEwNzEsIDk0NTksIDY4NDM3LCAKICAgICA3ODE0MCwgNzgxMzksIDE5NDk4NSwgODEyMSwgMTA0MzgsIDc0NDg3LCA0MjU3NCwgMTMyODUsIDU1MjYzLCAxMTkwNywgCiAgICAgMTk1MDAwLCA1NjkwLCA5MjI1NSwgOTM5OTIsIDAsIDQzMTgxLCAxMzA5NSwgMCwgMTI3ODU3LCA2NDQ5OCwgMCwgOTUwNiwgCiAgICAgNjk3OCwgMTk0OTkzLCA3Nzk5MiwgMCwgMCwgMTk0OTkyLCAwLCAxMjc4NDUsIDExMjIsIDMxNywgMCwgMCwgMCwgMCwgCiAgICAgMTkyMCwgMCwgMTAxNzMsIDgyNywgMCwgMCwgNzgzNzgsIDEyMDEyNiwgNTIyMywgMTMwNCwgMCwgMTE5NTY0LCA1MjI2LCAKICAgICAxMjYwMiwgOTQwNDQsIDAsIDkzMjksIDc3NTgsIDkyMzksIDQxMTczLCA1MjI0LCA1NDg3LCAxMjIyLCA1NjkyLCA0MTcyNSwgCiAgICAgNjkyMjksIDk2NzQsIDU2OTUsIDQxNzExLCA2NDYyNywgMTk5MDksIDAsIDc0NjA0LCA1NjkxLCAyODcsIDg2NiwgMjMzLCAKLSAgICAxMjc0OTAsIDk4MzQzMywgNDI4MTYsIDk0MDM2LCA2NTE0MCwgNzQ3OTcsIDAsIDg4MzAsIDY1NjgsIDQyMzAwLCAxMDUyNCwgCi0gICAgNDExNzUsIDk4MzQ0MCwgOTgzNDM3LCA5ODM0MzgsIDUyOTYsIDk4MzQzNiwgNDI0OTIsIDQzNDAyLCA5MjQ2NiwgMzMwMiwgCisgICAgMTI3NDkwLCA5ODM0NDEsIDQyODE2LCA5NDAzNiwgNjUxNDAsIDc0Nzk3LCAwLCA4ODMwLCA2NTY4LCA0MjMwMCwgMTA1MjQsIAorICAgIDQxMTc1LCA5ODM0NDgsIDk4MzQ0NSwgOTgzNDQ2LCA1Mjk2LCA5ODM0NDQsIDQyNDkyLCA0MzQwMiwgOTI0NjYsIDMzMDIsIAogICAgIDAsIDAsIDY1MTYsIDY1MTUsIDY1MTQsIDY1MTMsIDY1MTIsIDAsIDc4NTYsIDg2OTAsIDAsIDAsIDEyMTIyLCAxMTk2MDIsIAogICAgIDQzOTc2LCAwLCAxNzg1LCA2OTkyNSwgNjg2MjIsIDY1MTUzLCAxOTQ4MTAsIDUxMzgsIDAsIDAsIDExODg2OSwgMCwgNDU0MCwgCiAgICAgNDExODEsIDAsIDYyMDAsIDAsIDUxMzQsIDAsIDMyMiwgNDY0MywgNTEzMiwgMCwgNjM4OSwgMTI4NTMzLCA1MTQzLCAwLCAKQEAgLTE5MjY1LDcgKzE5Mjg1LDcgQEAKICAgICAxMjcwMTIsIDEwMjcwLCAxMDI4NiwgMTAzMTgsIDEwMzgyLCA0MzUyOSwgNjY0NzcsIDAsIDAsIDc0MTcwLCAwLCAzMjM0LCAKICAgICAwLCAwLCA3NDM3NiwgNDMxMzksIDExODgxNSwgMTI3MDg0LCAxMjA2MjcsIDg3NjcsIDAsIDc0NDg5LCA5Njk1LCAxMjA3NDYsIAogICAgIDUyMDEsIDAsIDYyMTUsIDEyNzE0LCA2MjE0LCAxMzEwMSwgMCwgMTk0OTk5LCA2NTI2OCwgMCwgMCwgMCwgMTEwMjcsIDAsIAotICAgIDEwMDU5LCAxMDUxMSwgNDIwNzUsIDk3NjcsIDc4OSwgMTc0OSwgNzg4OTAsIDEyNzA3MSwgOTgzNjYxLCAzMjAsIDAsIAorICAgIDEwMDU5LCAxMDUxMSwgNDIwNzUsIDk3NjcsIDc4OSwgMTc0OSwgNzg4OTAsIDEyNzA3MSwgOTgzNjcwLCAzMjAsIDAsIAogICAgIDg2NDcsIDAsIDMwNDksIDAsIDY0NzEsIDQyMDcxLCA0MzE1NiwgOTkyNSwgMTI3MzU2LCAxMjczNTUsIDY2NDc4LCA0OTYwLCAKICAgICA1NTQ5LCAxMjczNTksIDEyNzM0NiwgODQ4NSwgNDY3MSwgNTQxOCwgMTI3MzUwLCAzMzUxLCAxMjcwMDYsIDEyNzM1MSwgCiAgICAgMTA2MTAsIDU0MTQsIDMwNjQsIDYyMTIsIDQyODYsIDU0MjEsIDEyNzM0NCwgOTU1NCwgMCwgOTQwNDgsIDEyNzEwOSwgCkBAIC0xOTI3MywxNiArMTkyOTMsMTYgQEAKICAgICAxMjYwMywgNzEzMSwgMTE0MzAsIDQ1NjYsIDc1MTgsIDkzMTcsIDM4MDEsIDEwMzQyLCAxMDQwNiwgMCwgMTE5MjU5LCAKICAgICA0MjU3NiwgMCwgNTIwMCwgMTI2NjExLCA5MTc5NDgsIDAsIDkxODMsIDEyNzM2MSwgNzQ0NTgsIDczODI1LCAzOTUsIDU0ODIsIAogICAgIDUxOTgsIDQzNDksIDEwMzkwLCA3NDIwMiwgNTE5NiwgNDMyMjQsIDYxMTMsIDQyMDA5LCA1MjA1LCAwLCA0MzMwNywgMCwgCi0gICAgMTE4OTczLCAwLCAxMjEzNCwgMCwgMCwgMTE4ODQzLCA5MTI2LCA0MzUsIDAsIDEyMDE0LCAxMDM3NywgODA5MywgOTA3OSwgCi0gICAgMzIwMywgMTkyLCA2NTEwOSwgMzM4NSwgMCwgNjQ0MzAsIDUzODMsIDEwMjk0LCAxMDMyNiwgMTI4MTc4LCA1NzM4LCAKLSAgICA5ODMyMTMsIDMzMzYsIDc4MzU1LCA1MzYxLCAzNjIzLCA0MTE1OSwgMCwgNjgxMTIsIDc4NzIsIDg1ODEsIDAsIDEyNjAsIAorICAgIDExODk3MywgMCwgMTIxMzQsIDAsIDAsIDExODg0MywgOTEyNiwgNDM1LCA5ODM2MjQsIDEyMDE0LCAxMDM3NywgODA5MywgCisgICAgOTA3OSwgMzIwMywgMTkyLCA2NTEwOSwgMzM4NSwgMCwgNjQ0MzAsIDUzODMsIDEwMjk0LCAxMDMyNiwgMTI4MTc4LCA1NzM4LCAKKyAgICA5ODMyMTUsIDMzMzYsIDc4MzU1LCA1MzYxLCAzNjIzLCA0MTE1OSwgMCwgNjgxMTIsIDc4NzIsIDg1ODEsIDAsIDEyNjAsIAogICAgIDMxNDksIDUzNTksIDEyMDEzNCwgMCwgNzkxNCwgNTM1NywgOTIxNzAsIDEyODY1OSwgMjYyNCwgNTM2NCwgMCwgMTE0MzEsIAogICAgIDEyMDAzMCwgOTEwMSwgMTEwNTgsIDc4Mjg4LCAwLCA3ODI5MywgNDIyNzEsIDc4Mjg5LCA0MjkxNywgMTIwNzkzLCAwLCAKICAgICA2NTU2NiwgNjcxNywgMTA2MTksIDQzMzYwLCA3ODM4NSwgNzgzODQsIDExODMyLCA3ODM4MiwgNzgzODEsIDc4MzgwLCAKICAgICA3ODM3OSwgOTMxOSwgNzA5NywgMTE5MDU1LCA3NzkwNiwgMzIzMiwgNzM4MjQsIDc0NTgxLCAxMjA2MzIsIDAsIDAsIAogICAgIDQxODg5LCA5MjQ1MywgMCwgMTE2MSwgNDE4OTUsIDc0MTAzLCA5NzAxLCA4NjIyLCAwLCAwLCA3MzgxOSwgMTIwNTg4LCAKICAgICA1MDEyLCA3NzkxMiwgNDEzNjIsIDY5ODYyLCA3ODI5NiwgMTE5MjEsIDAsIDExNzY5LCAwLCA2ODYwOSwgNDEzNjQsIDAsIAotICAgIDc0MjI4LCA0MTM1MiwgNDEzNjEsIDAsIDQxMzY2LCAwLCAzMzU2LCAwLCA5MTcsIDY4NDIyLCAxMTk5MTUsIDcxMzQsIAorICAgIDc0MjI4LCA0MTM1MiwgNDEzNjEsIDAsIDQxMzY2LCAwLCAzMzU2LCAxMTYxMSwgOTE3LCA2ODQyMiwgMTE5OTE1LCA3MTM0LCAKICAgICA4MTk5LCA3ODM4OSwgMTE5OTE3LCA2NzcsIDExOTkxNiwgMCwgMTE5OTMyLCAxMjcxNjksIDAsIDAsIDAsIDMzNDksIAogICAgIDc0MTI1LCA3MDIyLCA4OTI3LCA0NzM5LCAwLCA1ODAyLCAwLCA4NjE1LCAwLCAwLCA0OTEsIDEyODgxOSwgMTAxOTAsIAogICAgIDEyMDY5OCwgNjU4MzcsIDEyODgyMCwgODQyNiwgMTEwOTIsIDk4OTEsIDAsIDQyNDk3LCA3MTEzLCA3NTg2LCA0MjMwNSwgCkBAIC0xOTMxMCwzMCArMTkzMzAsMzAgQEAKICAgICA1NTI1MiwgNzM5NzIsIDE0NDIsIDAsIDU4OTQsIDcwMDY5LCAwLCA0MTE3MSwgOTI1MTEsIDc0MzEzLCAwLCAxMzE2MiwgMCwgCiAgICAgMzMzNCwgMTk1MDEwLCAxMTg4MDMsIDc3ODgxLCA2NjAyMiwgMCwgMCwgMTY1MSwgMTI4NzcxLCA4ODYxLCAwLCAwLCAxMTQyLCAKICAgICAwLCA4MjcxLCAwLCA5ODMwNTgsIDEyNjY0NSwgMTI5MDMsIDAsIDQwMDIsIDQzNjI2LCAxMDQ0MiwgMTA2NzYsIDMzNDQsIDAsIAotICAgIDAsIDEyOTIwLCAxOTQ1NjAsIDAsIDAsIDY2NjQyLCAxMjc3LCAwLCA3ODcxLCAwLCAwLCA3ODg1MywgMCwgNzg4NTQsIAorICAgIDAsIDEyOTIwLCAxOTQ1NjAsIDAsIDAsIDY2NjQyLCAxMjc3LCAwLCA3ODcxLCAwLCAxOTQ2ODYsIDc4ODUzLCAwLCA3ODg1NCwgCiAgICAgMTIwMzYwLCAwLCAxMTc4NCwgMCwgNzgwMTIsIDQ3MDAsIDY2MzY2LCA3ODg1OCwgMTIwMzU5LCAxMTAxMiwgMCwgNzg4NTYsIAogICAgIDkyNDAwLCA3Nzg3OSwgNDk3MywgODc4NCwgNzc4NzcsIDc0ODA0LCA3Nzg3NCwgNzc4NjksIDc3ODcxLCA0MjQ0MCwgMCwgCiAgICAgNDMxMTgsIDAsIDQyMzY0LCA2Nzc0LCA2NzczLCA5MTc1NjAsIDEyMDM2OSwgMTAzNDYsIDEwNDEwLCA3ODg1OSwgOTI0MywgCiAgICAgMjQ2NCwgNzQyNjMsIDYxMDgsIDMzNzIsIDAsIDYyNDcsIDQzMTE3LCA3NDUyNiwgNzEyMSwgNzQxNjYsIDAsIDEyMDM1NSwgCiAgICAgOTI1MzcsIDAsIDAsIDE5NTAzNCwgMCwgMCwgMCwgNzAwODMsIDMzNTQsIDE5NTAzNywgNDE5MiwgOTI4OSwgMTE4OTk5LCAKICAgICA0MTE5MSwgMzg3NiwgMCwgNzAwNjcsIDEyMDY2MCwgNDM2OTYsIDQzMzgwLCAwLCA5ODMwOTEsIDAsIDAsIDExNjAzLCAKLSAgICA5ODM5NDUsIDAsIDY1ODksIDEyODU4OCwgMTk0Njc5LCAwLCAwLCA5ODM2OTEsIDAsIDAsIDQyNTcyLCAxMjgyNjQsIAorICAgIDk4Mzk1NCwgMCwgNjU4OSwgMTI4NTg4LCAxOTQ2NzksIDAsIDAsIDk4MzcwMCwgMCwgMCwgNDI1NzIsIDEyODI2NCwgCiAgICAgMTA2MzAsIDc0ODI3LCAxOTYzLCAxMTYyMiwgMTI3MDk4LCAxMTY1NCwgMCwgNzU1MCwgMTA2ODYsIDU5MDMsIDAsIDc4MDA5LCAKICAgICA0MTMyOSwgOTY2MiwgOTE3OTM3LCA2NDY5OCwgMzM2NiwgMTAzOTksIDAsIDU1NDIsIDExMDEzLCAxMjc5MjcsIDEyODMwMCwgCi0gICAgMCwgNzg2MjEsIDE5NDY3MiwgNjkyNSwgMCwgMCwgOTE3OTI5LCAwLCAxMTU2OCwgOTgzNjY0LCA0MzM2NywgNjQ1NzksIAorICAgIDAsIDc4NjIxLCAxOTQ2NzIsIDY5MjUsIDAsIDAsIDkxNzkyOSwgMCwgMTE1NjgsIDk4MzY3MywgNDMzNjcsIDY0NTc5LCAKICAgICA5MTc5MzAsIDc4NTIsIDAsIDAsIDY3NTQsIDYzMTIsIDAsIDY0NjcyLCA2NTI5NiwgMCwgMTE4OTU3LCAwLCA0MTYsIAogICAgIDEyMjk2LCA2ODQ1NywgNzM4MzQsIDY4MTc3LCAxMTA1MCwgMTA5ODQsIDkyMjA4LCAwLCAwLCA5MjE4MiwgMCwgOTgzNjA1LCAKLSAgICA5NTMyLCA2NjM1NSwgMCwgOTgzMjI4LCA5MTc5MjUsIDY0MzQzLCAxOTUwMzIsIDEyODI4MSwgMTk1MDMxLCAwLCAxOTUwMzAsIAorICAgIDk1MzIsIDY2MzU1LCAwLCA5ODMyMzQsIDkxNzkyNSwgNjQzNDMsIDE5NTAzMiwgMTI4MjgxLCAxOTUwMzEsIDAsIDE5NTAzMCwgCiAgICAgMTk1MDU3LCAxMTQ0NSwgMCwgMjExMiwgMTk1MDU2LCAxMjg4MTQsIDEwMTg1LCAxMDIxLCAxMjgxMzAsIDk1MDcsIDEwMjEwLCAKICAgICA3NDU0NCwgODAyMywgMTIwMCwgMTIyNDMsIDc4MDAxLCA1MjgyLCA3ODAwMywgOTYyNCwgMTE1NDUsIDAsIDEyMDQ5MywgCiAgICAgMzM0MywgNDQyNCwgMTEwNDcsIDE4ODUsIDQzMjY4LCAzODk2LCA3ODQ0NCwgNjY0OTcsIDI5NDcsIDM5MiwgNzg5NCwgCiAgICAgNDM5MSwgNjgxMzksIDk4MzA2MiwgMTMwNTksIDc0ODE2LCA3Nzk5OCwgMzM4MSwgNzk0MiwgMCwgNjkyMTksIDAsIDY0NzU3LCAKICAgICAwLCAzOTEzLCAwLCAwLCA3ODIzNSwgNzA0NCwgMTI2NSwgMCwgNjMwOSwgNzA0NSwgNzE3NSwgNzA0NywgNzgyMzksIAotICAgIDExNzkxLCAwLCAwLCA4MjIxLCA3ODMwNywgNDE4NjQsIDAsIDAsIDAsIDAsIDE2NywgOTgzODk3LCA3ODMwMSwgOTgzNjQ0LCAKLSAgICA3NDIxMSwgNDE4OTcsIDY4NDc3LCAwLCA5MTc1ODMsIDk4MzYyNSwgOTQwNjUsIDI0OTMsIDAsIDExODgxMSwgMCwgMCwgCisgICAgMTE3OTEsIDAsIDAsIDgyMjEsIDc4MzA3LCA0MTg2NCwgMCwgMCwgMCwgMCwgMTY3LCA5ODM5MDYsIDc4MzAxLCA5ODM2NTMsIAorICAgIDc0MjExLCA0MTg5NywgNjg0NzcsIDAsIDkxNzU4MywgOTgzNjM0LCA5NDA2NSwgMjQ5MywgMCwgMTE4ODExLCAwLCAwLCAKICAgICA2NDM1NCwgMCwgODc3NywgMCwgNDA2LCA4ODg0LCAyMzg1LCAwLCA5MjQ1MCwgMCwgOTE3NTczLCA0MzAzMCwgNDIwMjcsIAogICAgIDEyMTE0LCAwLCA5MTc1NzksIDY0OTM2LCAxOTQ2OTUsIDAsIDEyMDYyOSwgMTA1NjEsIDAsIDgzNjUsIDEyMDUzOSwgCi0gICAgOTgzNzY1LCA2NTg0MSwgMTIwNzg3LCAxMTYwMSwgMCwgNzQxMjEsIDAsIDkxNzU3NSwgNzgzNCwgNzQxNTksIDAsIAorICAgIDk4Mzc3NCwgNjU4NDEsIDEyMDc4NywgMTE2MDEsIDAsIDc0MTIxLCAwLCA5MTc1NzUsIDc4MzQsIDc0MTU5LCAwLCAKICAgICA5MTc1NzQsIDEwMjk4LCA2NjI0LCA0OTA4LCA5MTc1OTYsIDE2MzksIDAsIDAsIDc0MTU3LCA2MzI3LCA2NzI0LCAwLCAKICAgICAxMjgwODYsIDkyNTY2LCA2OTkxMCwgNDgxNywgNzg0NDYsIDE5NDc1OSwgOTI1MzYsIDcwNDMsIDk2MDAsIDExMDIyLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCA3NTQ4LCA2NDc5NCwgNDIwNTAsIDEyMjkxLCA1NTI4OSwgMTk0NzYxLCAxMjM0MywgNjU3LCAKQEAgLTE5MzQzLDE0ICsxOTM2MywxNCBAQAogICAgIDQxNDA2LCA0MzI3MywgNzQxNjAsIDExOTk4MywgNzM5MzksIDkyNjM4LCAxMTk5ODQsIDExOTk3OSwgNDE0MDQsIDExNjUsIAogICAgIDExOTk4MCwgNDQ1MSwgMTMwODcsIDAsIDExMjg0LCAxMTk5ODcsIDcwMDk3LCA2NTE1NSwgNDMwMTQsIDU0MzksIDkzNjMsIAogICAgIDcwMDcwLCAzMzc1LCAxMjg4NjksIDU5MDAsIDkzOTkwLCA3ODg5LCAyNzIyLCA0MjI2MiwgMCwgMCwgMTI4Nzc0LCAwLCAKLSAgICAyMjgyLCAwLCAxMjc4MTAsIDExNDAxLCA5ODM4MTMsIDAsIDY4NDU5LCAwLCAwLCAwLCAwLCA2NTQzOCwgMCwgNzI4MCwgCi0gICAgMTI3ODg3LCAwLCAxMjczODEsIDQ4NjgsIDExOTk2NywgMTE5OTY2LCAxMTg3OTgsIDAsIDAsIDQzMTYxLCAwLCA5MjM2MCwgCi0gICAgMCwgNTE4MiwgMCwgMTIwNTQyLCAwLCAwLCA0MjI2LCAxMTkyNDMsIDEyMTM1LCA1NzMyLCA0NDY0LCAwLCA3MTMzMCwgOTc3LCAKKyAgICAyMjgyLCAwLCAxMjc4MTAsIDExNDAxLCA5ODM4MjIsIDAsIDY4NDU5LCAwLCAwLCAwLCAwLCA2NTQzOCwgMCwgNzI4MCwgCisgICAgMTI3ODg3LCAwLCAxMjczODEsIDQ4NjgsIDgyOTcsIDExOTk2NiwgMTE4Nzk4LCAwLCAwLCA0MzE2MSwgMCwgOTIzNjAsIDAsIAorICAgIDUxODIsIDAsIDEyMDU0MiwgMCwgMCwgNDIyNiwgMTE5MjQzLCAxMjEzNSwgNTczMiwgNDQ2NCwgMCwgNzEzMzAsIDk3NywgCiAgICAgNDQ1OCwgMCwgMCwgNjQ3NzAsIDc0ODM4LCAwLCAzNDQsIDAsIDE5NDc5MCwgMTM5NSwgNjQyNzksIDAsIDkyMjQwLCAwLCAKICAgICA3ODYsIDAsIDQzMTc0LCA2NDM0MCwgMCwgMTk0NzY3LCAxMjA3MjMsIDQzMDI2LCA3NjEyLCAxMDEzMiwgNjQ0MTMsIAogICAgIDY1MDI1LCAwLCAwLCAwLCA5Mzk1NiwgMCwgNjg0NDQsIDAsIDkyNDM3LCAwLCAxMTkxNjAsIDEwMjA0LCA5MjY1NiwgMCwgCi0gICAgMTI3ODA5LCA5ODM2MzUsIDEzOTksIDk4MzY0MywgNjUyMTcsIDAsIDg4NTIsIDEyODU3MSwgMjQxLCAxMjg3ODAsIDQ5MDcsIAotICAgIDAsIDk4MzYzMCwgNzkzMiwgOTcyNywgMTI4ODczLCA3NDI1NSwgODc0OCwgMCwgMCwgOTgzNjM0LCAwLCA0Mjc4MCwgMCwgMCwgCisgICAgMTI3ODA5LCA5ODM2NDQsIDEzOTksIDk4MzY1MiwgNjUyMTcsIDAsIDg4NTIsIDEyODU3MSwgMjQxLCAxMjg3ODAsIDQ5MDcsIAorICAgIDAsIDk4MzYzOSwgNzkzMiwgOTcyNywgMTI4ODczLCA3NDI1NSwgODc0OCwgMCwgMCwgOTgzNjQzLCAwLCA0Mjc4MCwgMCwgMCwgCiAgICAgMCwgNDIxNywgMCwgODY1MCwgMCwgMCwgMCwgNjk5MDAsIDExODg3MiwgNDMwOTksIDM5NjUsIDExOTExOSwgNjcxOSwgMCwgCiAgICAgMTMzMDAsIDc4NDM5LCA5Mzk3MSwgNDMwNTcsIDY2NTg4LCAxMTg5OTEsIDAsIDAsIDczODE1LCA0NDIwLCAwLCA2NDEwLCAKICAgICA3NzYwLCAwLCAwLCAwLCAwLCAwLCA3Mjk0LCAwLCAwLCAwLCA5MDY2LCAwLCAxMTk5MywgNDMxODgsIDI2MjYsIDc3NjIsIDAsIApAQCAtMTkzNTgsNDUgKzE5Mzc4LDQ1IEBACiAgICAgNjY0NTQsIDk1OTIsIDQyODUxLCAxMjY5OTMsIDE1NDIsIDkyMzAzLCAwLCAwLCAwLCAwLCA3NDMxMSwgNzg0OTcsIDAsIAogICAgIDEwMTgxLCAwLCA0MzYyNCwgMCwgNzc3OSwgMCwgMTAxOTUsIDk0NzksIDYwMjksIDAsIDkyMjY4LCA5Njg5LCAwLCA2NTU3NywgCiAgICAgODk5MywgNjYzNTgsIDAsIDQyMzc4LCAzMzY4LCA2MDYsIDEyNzAzMCwgNzY5NywgNjkyMzcsIDY5Nzg3LCAyMDMwLCAwLCAKLSAgICA2MDI3LCA4MzcwLCA0MzIyLCAwLCA2NTIwNywgMCwgOTgzMzMxLCA5ODMzMzAsIDk4MzMyOSwgOTgzMzI4LCAyNzM1LCAKKyAgICA2MDI3LCA4MzcwLCA0MzIyLCAwLCA2NTIwNywgMCwgOTgzMzM5LCA5ODMzMzgsIDk4MzMzNywgOTgzMzM2LCAyNzM1LCAKICAgICA0MjgzMSwgNzc5MzUsIDEyNzEyMCwgNzQ4NjYsIDg4ODEsIDExOTA0NywgMCwgMCwgNzM5NDYsIDAsIDAsIDAsIDY4MTQwLCAKLSAgICA5ODM5MTksIDk1NzYsIDEyODg3MiwgMzM0NywgNDE2MCwgNTE1NCwgNTUyODgsIDM3OTQsIDY2NTY0LCA4NTMwLCAxMjcwNjMsIAotICAgIDc3MDksIDQxMTEyLCA5ODMxMzIsIDY2NTYwLCA0MjA0MSwgNDU3MiwgMTI4NzYsIDY2NTYxLCA5ODM3NDksIDY3NTgsIAotICAgIDk4MzkxNywgMTYxNSwgNTg1NSwgODA5LCAwLCA5MjI4MywgMTI4MzE2LCAxMjgwMDQsIDU3OTksIDk4MzMyMCwgNzAxMDAsIAotICAgIDk4MzMxOCwgNzI2MCwgOTgzMzE2LCA0MzAzMSwgNjQ0MjUsIDY1MTI4LCA3ODgxOSwgNjQzODYsIDY1MjU3LCAwLCA2ODYxNiwgCisgICAgOTgzOTI4LCA5NTc2LCAxMjg4NzIsIDMzNDcsIDQxNjAsIDUxNTQsIDU1Mjg4LCAzNzk0LCA2NjU2NCwgODUzMCwgMTI3MDYzLCAKKyAgICA3NzA5LCA0MTExMiwgOTgzMTMyLCA2NjU2MCwgNDIwNDEsIDQ1NzIsIDEyODc2LCA2NjU2MSwgOTgzNzU4LCA2NzU4LCAKKyAgICA5ODM5MjYsIDE2MTUsIDU4NTUsIDgwOSwgMCwgOTIyODMsIDEyODMxNiwgMTI4MDA0LCA1Nzk5LCA5ODMzMjgsIDcwMTAwLCAKKyAgICA5ODMzMjYsIDcyNjAsIDk4MzMyNCwgNDMwMzEsIDY0NDI1LCA2NTEyOCwgNzg4MTksIDY0Mzg2LCA2NTI1NywgMCwgNjg2MTYsIAogICAgIDEyMDYwNywgOTM0NywgMTI4MDY3LCA2NTMyLCAwLCAwLCAwLCAxMjcwNjAsIDY1ODI4LCAwLCAyODMsIDY4NjY1LCA3ODgxMywgCi0gICAgNTMyLCA3ODY2MywgMCwgOTgzNzg3LCAxMjA2MDksIDAsIDMzNzAsIDAsIDExMzYxLCA1NDQzLCA3ODc3OCwgODE1MywgCi0gICAgNzM3NjcsIDAsIDEwNzQxLCAwLCAyMjk4LCAwLCA5ODM5MDgsIDY1NDk1LCA2NDcwNiwgOTgzMzEwLCA0MzM0NCwgOTgzMzA4LCAKLSAgICA3MTQ0LCA5NDY2LCA3ODg2NiwgOTgyNCwgOTgzMzAzLCA5ODMzMDIsIDAsIDAsIDkxNSwgNDM0MjUsIDAsIDAsIDAsIDAsIAorICAgIDUzMiwgNzg2NjMsIDAsIDk4Mzc5NiwgMTIwNjA5LCAwLCAzMzcwLCAwLCAxMTM2MSwgNTQ0MywgNzg3NzgsIDgxNTMsIAorICAgIDczNzY3LCAwLCAxMDc0MSwgMCwgMjI5OCwgMCwgOTgzOTE3LCA2NTQ5NSwgNjQ3MDYsIDk4MzMxOCwgNDMzNDQsIDk4MzMxNiwgCisgICAgNzE0NCwgOTQ2NiwgNzg4NjYsIDk4MjQsIDk4MzMxMSwgOTgzMzEwLCAwLCAwLCA5MTUsIDQzNDI1LCAwLCAwLCAwLCAwLCAKICAgICAxMjcxNzgsIDQzMjY0LCA3MDA5NiwgMCwgMCwgNDMwMzgsIDc4ODY0LCA2NzMwLCA3ODg2MiwgNjgxNjEsIDY0NTUwLCAKICAgICA1MTg2LCA3MzYwLCAxMjc4MzcsIDAsIDEyMTA4LCAwLCA2NTEyNCwgNDMxMjcsIDY2MDQzLCAwLCA2MzI2LCA0MzEwNywgCi0gICAgNzc4MjYsIDAsIDQyNTYyLCAwLCAxMjg4MjEsIDAsIDEyODUyMCwgMTE0ODUsIDYxMDMsIDEyNzEyMywgOTgzMjk3LCAKLSAgICAxMTcxOCwgOTgzMjk1LCAxMjg4OSwgOTI2NTcsIDEyNzEzNywgMCwgMCwgMCwgNTUyNDUsIDAsIDE2MzAsIDEyODIzMiwgCisgICAgNzc4MjYsIDAsIDQyNTYyLCAwLCAxMjg4MjEsIDAsIDEyODUyMCwgMTE0ODUsIDYxMDMsIDEyNzEyMywgOTgzMzA1LCAKKyAgICAxMTcxOCwgOTgzMzAzLCAxMjg4OSwgOTI2NTcsIDEyNzEzNywgMCwgMCwgMCwgNTUyNDUsIDAsIDE2MzAsIDEyODIzMiwgCiAgICAgNjU0ODMsIDAsIDEyNTY1LCAwLCA2NTQ3NiwgMTIwMDEzLCAwLCAxMTk1NTQsIDkyODMsIDc3MDAsIDkxNzUzNywgOTY5MCwgCiAgICAgNjU0OTksIDAsIDY0NTkzLCA1MTIsIDMzNzYsIDY4MjEwLCAwLCAxMjg2NzcsIDc3ODkyLCA2MzIsIDEyOTQwLCA3Nzg5MSwgCi0gICAgNDI1MjksIDc4NTg3LCAwLCA1OTU3LCAxMTA1OTMsIDg5MjYsIDk4MzI5MSwgOTgzMjkwLCAxMjgyNzMsIDEwNzQ1LCAKKyAgICA0MjUyOSwgNzg1ODcsIDAsIDU5NTcsIDExMDU5MywgODkyNiwgOTgzMjk5LCA5ODMyOTgsIDEyODI3MywgMTA3NDUsIAogICAgIDEwMTc0LCA3Mzc5LCA2NDU4MSwgNTM4NiwgMTIwNjg2LCAxMTcxMywgMTA2MzMsIDY5NzA4LCA1MDU2LCAwLCAwLCAwLCAKICAgICAxMjA3NzMsIDAsIDk4MTIsIDAsIDQ0NjAsIDAsIDAsIDcxMzA3LCAxMjgwMzgsIDAsIDAsIDEyNzE3NCwgNjQyNzgsIAogICAgIDkyMzcwLCA0MzQ2NiwgMCwgMCwgNjQzODksIDI5NTMsIDczODc5LCAxODAxLCAxMjgzNSwgMTE5MDI5LCAwLCA3MzgyMywgMCwgCi0gICAgNjYzNzUsIDIwODUsIDcwMiwgNDI1NzksIDc3ODg0LCA3Nzg4NSwgMTMwNzQsIDc3ODgzLCA5ODMyNzgsIDk4MzI3NywgCi0gICAgMTI4NTcwLCAxMjEwNiwgOTgzMjc0LCA3NDIwNywgMTc1NSwgMTA0ODIsIDEyODYzLCA3Nzg5OCwgMTE2MywgMjk1MSwgCisgICAgNjYzNzUsIDIwODUsIDcwMiwgNDI1NzksIDc3ODg0LCA3Nzg4NSwgMTMwNzQsIDc3ODgzLCA5ODMyODYsIDk4MzI4NSwgCisgICAgMTI4NTcwLCAxMjEwNiwgOTgzMjgyLCA3NDIwNywgMTc1NSwgMTA0ODIsIDEyODYzLCA3Nzg5OCwgMTE2MywgMjk1MSwgCiAgICAgOTUyMiwgNzQwNzksIDc4MjY2LCA2NjYwNCwgMCwgMzM4NCwgNjkyMjcsIDEwNzAyLCA4MzAsIDc3OTAyLCA3Nzg5OSwgCiAgICAgNzc5MDAsIDg0NTEsIDAsIDAsIDAsIDY5NzM5LCAwLCAwLCAwLCAwLCAyOTA4LCAwLCA0MzM4NiwgNjQ5MDIsIDQyNDMsIDAsIAotICAgIDEyMjM5LCAwLCAwLCA0NDQxLCAwLCA5ODMyNzEsIDczOTQwLCA2NDM1MiwgMTI3NTEzLCA5ODMyNjcsIDQxMSwgOTgzMjY1LCAKLSAgICA5MTk5LCA5ODMyNjMsIDQwNTYsIDExODk5MiwgNDE4OTAsIDAsIDI3MzAsIDQxNjA0LCA5ODM5MjgsIDU0MjgsIDE5NDc0MywgCisgICAgMTIyMzksIDAsIDAsIDQ0NDEsIDAsIDk4MzI3OSwgNzM5NDAsIDY0MzUyLCAxMjc1MTMsIDk4MzI3NSwgNDExLCA5ODMyNzMsIAorICAgIDkxOTksIDk4MzI3MSwgNDA1NiwgMTE4OTkyLCA0MTg5MCwgMCwgMjczMCwgNDE2MDQsIDk4MzkzNywgNTQyOCwgMTk0NzQzLCAKICAgICAzMzY0LCA0MjI2NSwgNjQ0MzcsIDEyNzkzNSwgMTE4ODE2LCAxOTQ3NDIsIDk2ODQsIDIxNiwgMCwgMTQwMSwgMTI4MDUzLCAKICAgICA0NDAxMiwgMCwgMCwgOTI1ODUsIDkxNTgsIDc3ODQyLCA2OTkwNSwgNTc2OCwgMCwgMCwgMCwgNDg0LCAxOTQ3MzksIDAsIDAsIAotICAgIDY1ODk1LCAwLCAwLCAzMzM4LCA3MzkzNSwgNTcyLCA3MDQxLCAyNzM2LCA2NzYwNSwgOTgzMjU1LCA5Mzk2MiwgMjc5NCwgCisgICAgNjU4OTUsIDAsIDAsIDMzMzgsIDczOTM1LCA1NzIsIDcwNDEsIDI3MzYsIDY3NjA1LCA5ODMyNjMsIDkzOTYyLCAyNzk0LCAKICAgICA4ODA3LCA2NDQ5MSwgNzc4NDcsIDU0MzgsIDUyMjIsIDUzODEsIDQzMTE0LCAwLCA1MTkzLCA1MTI1LCA1NDU2LCA1NTA5LCAKICAgICA3Nzg0NiwgMTk0NzQ3LCA5NTM0LCAwLCAwLCAwLCAzNDMwLCAwLCAwLCA3ODcxNywgMCwgOTgxLCAwLCA0MzMwLCA3MzkyOSwgCiAgICAgMTIwNTM2LCAxODI0LCAxMDkwOCwgMCwgNzAzNCwgNDE2ODMsIDY0NjE3LCAwLCA3Mzc1NCwgMzk1NywgNjQzNTgsIDY0NTQ3LCAKLSAgICAxMjgyNTksIDY3NCwgNjM5OTEsIDk4MzI0MywgMjk0NiwgNTM1NCwgNTI1MSwgNTMyOCwgNTMwNywgMzc1OSwgMTE0MTEsIAorICAgIDEyODI1OSwgNjc0LCA2Mzk5MSwgOTgzMjQ5LCAyOTQ2LCA1MzU0LCA1MjUxLCA1MzI4LCA1MzA3LCAzNzU5LCAxMTQxMSwgCiAgICAgODM2NCwgNTEyMywgMTE5NjI4LCA1MjgxLCA1NDY5LCA1MTIxLCAxMTkyNDUsIDExODk5MywgMCwgNTEzMCwgMCwgMCwgCiAgICAgNzc5OTAsIDAsIDEyMDcyNiwgMTIyMSwgMjczMywgMTE3NDYsIDc3OTkxLCA1MjE2LCAwLCAwLCAwLCAwLCAzNDY4LCA3MDMzLCAKICAgICA5MjMwLCA1OTM5LCAxOTUwNTIsIDAsIDAsIDEyMDY3NywgNjg0MDAsIDcyNzgsIDEwMzIxLCAxMDI4OSwgNjQ2MTMsIAotICAgIDEwMzg1LCA0MTcwNiwgMCwgMCwgOTgzNDA1LCAwLCAxMTczOSwgOTgzNDE4LCA0MTk4MSwgMCwgNTkzOCwgMCwgNDM3NjYsIAorICAgIDEwMzg1LCA0MTcwNiwgMCwgMCwgOTgzNDEzLCAwLCAxMTczOSwgOTgzNDI2LCA0MTk4MSwgMCwgNTkzOCwgMCwgNDM3NjYsIAogICAgIDEyNDQ4LCA3NTc2LCAxMDQwMSwgMTAzMzcsIDczODUyLCAwLCAxMzA1NywgMCwgMTI2OTc2LCAwLCAxMDAwOSwgMCwgCi0gICAgNDE3MDMsIDk4MzYyOSwgMTIxNjUsIDAsIDAsIDk4ODUsIDAsIDgwNzcsIDAsIDEyNzkwOCwgMCwgMCwgMCwgOTI0NTcsIDAsIAorICAgIDQxNzAzLCA5ODM2MzgsIDEyMTY1LCAwLCAwLCA5ODg1LCAwLCA4MDc3LCAwLCAxMjc5MDgsIDAsIDAsIDAsIDkyNDU3LCAwLCAKICAgICA0MjIwLCAxMDcyNSwgMTA0MzMsIDAsIDY4Mzk1LCA0OTg3LCA2NDUxOSwgMCwgMTI4MzQwLCAwLCAwLCAwLCAxMDk3MCwgCiAgICAgMTE3MzMsIDAsIDEyMDc5MiwgMCwgMTk5NDQsIDAsIDkwMDksIDg1NTEsIDkyMzQ1LCAxMTQ2OCwgNjQ2MzYsIDc1NzUsIDAsIAogICAgIDI3MjQsIDAsIDAsIDEyMzEzLCAxMTA1OTIsIDUxNSwgMTE5OTQ3LCA0Mjc5MSwgNjM5ODcsIDc4Mjg2LCAxMTk5NDMsIApAQCAtMTk0MDYsNzMgKzE5NDI2LDczIEBACiAgICAgMCwgNDQ3NywgMTE4OTY0LCA4MTQsIDQyMDY2LCA2NjE4MywgNjYyMDQsIDQzNzg2LCAxMTk5NjEsIDY2MTk4LCA0MTg4MCwgCiAgICAgNjYxODgsIDExNjIzLCA3ODE0OCwgMTE5NTUsIDY2MTkwLCA2NjE5MSwgNDExMTEsIDY2MTg5LCA3Mzc4OCwgNzc4OCwgCiAgICAgNDg0NywgMCwgMTI3NzU5LCAwLCAwLCAwLCAxNTgxLCA2NTM1LCA3ODE2MSwgMTI5NTQsIDQzMCwgNzgxNjAsIDU1MjU5LCAKLSAgICA3ODE1OCwgMTI4MDM2LCA1Mjc4LCA0OTQ1LCA0Mjg4MywgNDk1MCwgOTgzNDMwLCA2ODYyNSwgOTgzNDI4LCA3MjY5LCAwLCAKLSAgICA1OTY0LCAxMjkwOCwgOTgzNTU1LCAwLCA3NDc2NCwgNzQ0NzcsIDExOTE0NiwgMTk0OTM2LCA0OTQ5LCA5ODM0MjEsIDQ0MywgCi0gICAgOTgzNDE5LCA0OTQ0LCA1NDY3LCAxMTk2MDMsIDAsIDY1MTM3LCA2MDQ0LCA2NTM5MiwgMCwgNDIxMywgMCwgNDEzMDMsIDAsIAotICAgIDE5NDkzMSwgMTE5OTYyLCA0MTMwNiwgNzM5ODQsIDI2OTgsIDEyNzE1OSwgMCwgMTIwNzIsIDMxOTMsIDAsIDQxMzA0LCAKLSAgICA4MjQsIDEyODY3NiwgMTIwOTEsIDc4ODkzLCA3ODg5NCwgMTE5ODE2LCA0NjczLCA2NDgwNCwgNDY3OCwgMTE5ODIwLCAKLSAgICAxMTk4MTksIDY1MDU5LCAwLCA2NzM5LCAwLCA1NDgxLCAzNDkwLCAxMTk5LCAxMTk4MTEsIDgzNTYsIDY5OTQ3LCAxMTk4MzIsIAotICAgIDQ2NzcsIDEyNjg4LCAzMTAyLCAwLCA0NjcyLCA3ODE3MywgNzgxNzUsIDU1MzEsIDY4MzY3LCA0MjU3NSwgNzgxNzAsIAotICAgIDc4MTY2LCA0Njc0LCA0NTQ4LCA0NDAwNSwgMTE5OTQ5LCA2ODY1OCwgMTE5OTQ2LCA4MDI1LCA2ODYzMCwgMTI3MDI0LCAKLSAgICAxODU1LCA5ODM0MDQsIDY4NjY5LCA5ODM0MDIsIDkyNDQ1LCAxMjc1NTQsIDAsIDEyNzMzOSwgMTE5NjUyLCAyNzQ1LCAKLSAgICAxMTc5NywgOTgzNDEwLCAxMjgxNTksIDkyMDIsIDQ2NTQsIDk4MzQwNiwgOTgzNDA4LCA2ODYzOCwgNzM5OTMsIDEwNTI1LCAKLSAgICA0NjQ5LCA2NTIwOSwgOTgzNDA5LCAwLCA0NjQ4LCA0MzA4MCwgOTgzMzk4LCA5ODMzOTksIDk4MzM5NiwgNjI0NiwgNjQ5NTAsIAotICAgIDc4MjgsIDQ2NTAsIDY3NzcsIDY3NzYsIDY3NzUsIDQ2NTMsIDc4MjIsIDc4MDA1LCA5MjM4NCwgNDMxODcsIDg2NjksIAotICAgIDk4MzQwNywgNjgyMSwgNjUwOTMsIDAsIDc4ODgxLCAyNzE2LCAwLCA5ODMwNjAsIDk4MzQxMSwgMCwgNjgzNjksIDEyMDA1NCwgCi0gICAgMTEwNjAsIDg1NDcsIDI3MTEsIDQyMTY1LCA3ODAyNywgNzgwMjYsIDc5OTIsIDAsIDAsIDQ2NjIsIDc4MDMzLCA3ODAzMiwgCi0gICAgOTE0OSwgOTE0NiwgNTk5LCAyMDgxLCA3ODAzMSwgNzgwMzAsIDE5NDk2MiwgNDY1NiwgMTAxMzAsIDY4NDUwLCA3ODExLCAKLSAgICA0MDk5NCwgMTk0OTY1LCA2NDE0LCA1OTY3LCA0NjU4LCAzNzI1LCA1NzEzLCA1ODE0LCA0NjYxLCA0MjQzNCwgOTgzNDAzLCAKLSAgICAwLCAwLCA2NDkwNCwgOTAyNiwgMTA4MzMsIDc0ODY0LCA3NTQ3LCA0ODY3LCAwLCAxMDAwOCwgMTAyMjIsIDMwNTQsIAotICAgIDE5NDk1NiwgOTc0NCwgNzg4NjAsIDc2MDUsIDQ2MjIsIDExOTY1NiwgOTgzMzg3LCA5NDA3MCwgOTgzMzg1LCA5ODMzODYsIAotICAgIDk4MzM4MywgOTA0NSwgNzg4ODgsIDQyMjUsIDE5OTI2LCA3ODg4NywgMTI4ODAsIDY1MzA3LCA0NjE3LCA3ODg4MywgCi0gICAgOTgzMzc4LCA0MTczMiwgNDYxNiwgMTA1MTgsIDEwNDIzLCAxMDM1OSwgOTgzMzcyLCA1OTU4LCAwLCA5ODM0MjUsIDQyMTUsIAotICAgIDk3ODksIDkxNzk0MSwgNDMyMSwgNDYyMSwgOTgzMzgxLCA0MTMxMywgNTIyLCA1MzY4LCAwLCA2NTgwMywgMCwgNTM2NiwgCi0gICAgMTIyMDEsIDUzNzIsIDAsIDk4MzQwMSwgMCwgNzcyMCwgNzM5MCwgMjY5NiwgOTgzMzkyLCAwLCA0NjM4LCA5ODMzOTcsIAotICAgIDE3OTAsIDc4MjQyLCA1OTY1LCA2NDM2MywgNjY1NjksIDY4NjQ2LCAxMjc4MzMsIDUzNzYsIDE4MzUsIDUzMzUsIDE5NDk2NiwgCi0gICAgMTI4MDg5LCA0NjMzLCAwLCA2ODExOSwgMTE4MCwgNDYzMiwgMTI4MDkzLCA1Mzg3LCA1MzMzLCAwLCAwLCA0MjA5NCwgCi0gICAgNTMzMSwgNDYzNCwgMTE5MjgsIDk4MzU5NCwgNTMzOCwgNDYzNywgMTI4MTcwLCA1OTcxLCA0MjQxNCwgMCwgMTI2OCwgCi0gICAgNjUwOTcsIDQyMzYxLCAwLCAwLCA3Mzg1MywgMTQyNywgMCwgMCwgNTk3MCwgMzQzMSwgMCwgMTAzNTgsIDEwNDIyLCA0NzU4LCAKLSAgICA5ODMzNjYsIDE2MDgsIDI3MzgsIDAsIDEwNDU1LCA0NzUzLCA3NDAyNiwgMTEzNDQsIDQyMjIsIDYyNDAsIDUyMzEsIAotICAgIDc0Mzg0LCA5ODMzNzAsIDY4Mzc3LCA2MjQ4LCA5ODMzNTQsIDk4MzM1NSwgOTgzMzUyLCA0MjMxOCwgOTI1ODIsIDUyMjksIAorICAgIDc4MTU4LCAxMjgwMzYsIDUyNzgsIDQ5NDUsIDQyODgzLCA0OTUwLCA5ODM0MzgsIDY4NjI1LCA5ODM0MzYsIDcyNjksIDAsIAorICAgIDU5NjQsIDEyOTA4LCA5ODM1NTUsIDAsIDc0NzY0LCA3NDQ3NywgMTE5MTQ2LCAxOTQ5MzYsIDQ5NDksIDk4MzQyOSwgNDQzLCAKKyAgICA5ODM0MjcsIDQ5NDQsIDU0NjcsIDExOTYwMywgOTgzMjU0LCA2NTEzNywgNjA0NCwgNjUzOTIsIDAsIDQyMTMsIDAsIAorICAgIDQxMzAzLCAwLCAxOTQ5MzEsIDExOTk2MiwgNDEzMDYsIDczOTg0LCAyNjk4LCAxMjcxNTksIDAsIDEyMDcyLCAzMTkzLCAwLCAKKyAgICA0MTMwNCwgODI0LCAxMjg2NzYsIDEyMDkxLCA3ODg5MywgNzg4OTQsIDExOTgxNiwgNDY3MywgNjQ4MDQsIDQ2NzgsIAorICAgIDExOTgyMCwgMTE5ODE5LCA2NTA1OSwgMCwgNjczOSwgMCwgNTQ4MSwgMzQ5MCwgMTE5OSwgMTE5ODExLCA4MzU2LCA2OTk0NywgCisgICAgMTE5ODMyLCA0Njc3LCAxMjY4OCwgMzEwMiwgMCwgNDY3MiwgNzgxNzMsIDc4MTc1LCA1NTMxLCA2ODM2NywgNDI1NzUsIAorICAgIDc4MTcwLCA3ODE2NiwgNDY3NCwgNDU0OCwgNDQwMDUsIDExOTk0OSwgNjg2NTgsIDExOTk0NiwgODAyNSwgNjg2MzAsIAorICAgIDEyNzAyNCwgMTg1NSwgOTgzNDEyLCA2ODY2OSwgOTgzNDEwLCA5MjQ0NSwgMTI3NTU0LCAwLCAxMjczMzksIDExOTY1MiwgCisgICAgMjc0NSwgMTE3OTcsIDk4MzQxOCwgMTI4MTU5LCA5MjAyLCA0NjU0LCA5ODM0MTQsIDk4MzQxNiwgNjg2MzgsIDczOTkzLCAKKyAgICAxMDUyNSwgNDY0OSwgNjUyMDksIDk4MzQxNywgMCwgNDY0OCwgNDMwODAsIDk4MzQwNiwgOTgzNDA3LCA5ODM0MDQsIDYyNDYsIAorICAgIDY0OTUwLCA3ODI4LCA0NjUwLCA2Nzc3LCA2Nzc2LCA2Nzc1LCA0NjUzLCA3ODIyLCA3ODAwNSwgOTIzODQsIDQzMTg3LCAKKyAgICA4NjY5LCA5ODM0MTUsIDY4MjEsIDY1MDkzLCAwLCA3ODg4MSwgMjcxNiwgMCwgOTgzMDYwLCA5ODM0MTksIDAsIDY4MzY5LCAKKyAgICAxMjAwNTQsIDExMDYwLCA4NTQ3LCAyNzExLCA0MjE2NSwgNzgwMjcsIDc4MDI2LCA3OTkyLCAwLCAwLCA0NjYyLCA3ODAzMywgCisgICAgNzgwMzIsIDkxNDksIDkxNDYsIDU5OSwgMjA4MSwgNzgwMzEsIDc4MDMwLCAxOTQ5NjIsIDQ2NTYsIDEwMTMwLCA2ODQ1MCwgCisgICAgNzgxMSwgNDA5OTQsIDE5NDk2NSwgNjQxNCwgNTk2NywgNDY1OCwgMzcyNSwgNTcxMywgNTgxNCwgNDY2MSwgNDI0MzQsIAorICAgIDk4MzQxMSwgMCwgMCwgNjQ5MDQsIDkwMjYsIDEwODMzLCA3NDg2NCwgNzU0NywgNDg2NywgMCwgMTAwMDgsIDEwMjIyLCAKKyAgICAzMDU0LCAxOTQ5NTYsIDk3NDQsIDc4ODYwLCA3NjA1LCA0NjIyLCAxMTk2NTYsIDk4MzM5NSwgOTQwNzAsIDk4MzM5MywgCisgICAgOTgzMzk0LCA5ODMzOTEsIDkwNDUsIDc4ODg4LCA0MjI1LCAxOTkyNiwgNzg4ODcsIDEyODgwLCA2NTMwNywgNDYxNywgCisgICAgNzg4ODMsIDk4MzM4NiwgNDE3MzIsIDQ2MTYsIDEwNTE4LCAxMDQyMywgMTAzNTksIDk4MzM4MCwgNTk1OCwgMCwgOTgzNDMzLCAKKyAgICA0MjE1LCA5Nzg5LCA5MTc5NDEsIDQzMjEsIDQ2MjEsIDk4MzM4OSwgNDEzMTMsIDUyMiwgNTM2OCwgMCwgNjU4MDMsIDAsIAorICAgIDUzNjYsIDEyMjAxLCA1MzcyLCAwLCA5ODM0MDksIDAsIDc3MjAsIDczOTAsIDI2OTYsIDk4MzQwMCwgMCwgNDYzOCwgCisgICAgOTgzNDA1LCAxNzkwLCA3ODI0MiwgNTk2NSwgNjQzNjMsIDY2NTY5LCA2ODY0NiwgMTI3ODMzLCA1Mzc2LCAxODM1LCA1MzM1LCAKKyAgICAxOTQ5NjYsIDEyODA4OSwgNDYzMywgMCwgNjgxMTksIDExODAsIDQ2MzIsIDEyODA5MywgNTM4NywgNTMzMywgMCwgMCwgCisgICAgNDIwOTQsIDUzMzEsIDQ2MzQsIDExOTI4LCA5ODM1OTQsIDUzMzgsIDQ2MzcsIDEyODE3MCwgNTk3MSwgNDI0MTQsIDAsIAorICAgIDEyNjgsIDY1MDk3LCA0MjM2MSwgMCwgMCwgNzM4NTMsIDE0MjcsIDAsIDAsIDU5NzAsIDM0MzEsIDAsIDEwMzU4LCAxMDQyMiwgCisgICAgNDc1OCwgOTgzMzc0LCAxNjA4LCAyNzM4LCAwLCAxMDQ1NSwgNDc1MywgNzQwMjYsIDExMzQ0LCA0MjIyLCA2MjQwLCA1MjMxLCAKKyAgICA3NDM4NCwgOTgzMzc4LCA2ODM3NywgNjI0OCwgOTgzMzYyLCA5ODMzNjMsIDk4MzM2MCwgNDIzMTgsIDkyNTgyLCA1MjI5LCAKICAgICA0NzU3LCAwLCAwLCAyNzI4LCA0NzUyLCA2NDU2MywgNjUyMzUsIDUyMzQsIDAsIDEyODE0NSwgMCwgMTA3MTMsIDcxNjYsIDAsIAogICAgIDI2MjIsIDc0NjAsIDEyNzMwMiwgMCwgMCwgODk1NCwgNzQ3NjAsIDY1MTg5LCAyNjMyLCA0MjYxNywgMTAxMDgsIDEwMTEsIAogICAgIDU1NzQsIDE4NTMsIDI3MDksIDY1MTM5LCA1NTc3LCAwLCAwLCAxMTg4NzEsIDY4NjQxLCA4OTY1LCA3NjM1LCA0MjE3NywgCi0gICAgNTMxNiwgMCwgNTMxNCwgNjQ1MSwgNTU3MiwgNjY0NjQsIDUzMTIsIDAsIDU1MjUsIDUzMzAsIDUzMTksIDk4MzQxMiwgCi0gICAgOTgzODYzLCAxOTQ5MDcsIDQ0MDAzLCAwLCA5ODM0NzIsIDk4MzQxNSwgMTIwNDk4LCAxMjc4NTEsIDE5NTAwOSwgOTgzODU2LCAKLSAgICA3NDAyMiwgOTgzNDE0LCA2NDYwOSwgNjg2NDMsIDEyMDYzNCwgOTgzNDgxLCA1NzIxLCA5ODMzOTMsIDU1MTksIDg2MzIsIAotICAgIDY2NDY1LCAxMTI2NywgNzM5NjEsIDkyMjc4LCA1NzIwLCA5ODMzNDQsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIAotICAgIDAsIDQ2MDksIDQzNDc4LCA0NjE0LCA1NDEsIDk4MzM0NywgNTI4NywgNTMwOSwgNTI4NSwgNjgzODksIDU5NjEsIDQ2NDcsIAotICAgIDU2LCA0MjE2LCAxMDU3NywgNDEzODEsIDYwMSwgNDYxMywgOTgzMzQxLCA5ODMzMzgsIDc3ODQ5LCA0NjA4LCA2NDI2MCwgCisgICAgNTMxNiwgMCwgNTMxNCwgNjQ1MSwgNTU3MiwgNjY0NjQsIDUzMTIsIDAsIDU1MjUsIDUzMzAsIDUzMTksIDk4MzQyMCwgCisgICAgOTgzODcyLCAxOTQ5MDcsIDQ0MDAzLCAwLCA5ODM0ODAsIDk4MzQyMywgMTIwNDk4LCAxMjc4NTEsIDE5NTAwOSwgOTgzODY1LCAKKyAgICA3NDAyMiwgOTgzNDIyLCA2NDYwOSwgNjg2NDMsIDEyMDYzNCwgOTgzNDg5LCA1NzIxLCA5ODM0MDEsIDU1MTksIDg2MzIsIAorICAgIDY2NDY1LCAxMTI2NywgNzM5NjEsIDkyMjc4LCA1NzIwLCA5ODMzNTIsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIAorICAgIDAsIDQ2MDksIDQzNDc4LCA0NjE0LCA1NDEsIDk4MzM1NSwgNTI4NywgNTMwOSwgNTI4NSwgNjgzODksIDU5NjEsIDQ2NDcsIAorICAgIDU2LCA0MjE2LCAxMDU3NywgNDEzODEsIDYwMSwgNDYxMywgOTgzMzQ5LCA5ODMzNDYsIDc3ODQ5LCA0NjA4LCA2NDI2MCwgCiAgICAgNDExMjQsIDUxOTAsIDY3NjI4LCAwLCA2ODE0NSwgNzA4NiwgMCwgNjc5OTgsIDY3NjIwLCAwLCAyNzM0LCAxMTA3NCwgMCwgCiAgICAgNjc2MjcsIDQzNTkzLCAwLCA2NzYyNSwgNTk2MCwgMCwgODk5MiwgNDI1OTMsIDEyODI2MCwgMTc4MiwgNjc2MjIsIDY4MTE0LCAKICAgICAxMTk5MzksIDAsIDY4MTgwLCA1NTAxLCAxMTk5NTIsIDQyNTA4LCA3NDQyLCA0MzY2NSwgMzU5LCA0MTI1MywgNjgzOTIsIAogICAgIDYyMzksIDExOTk1NiwgNDEyNTYsIDAsIDY4MTM0LCAwLCA3NDIwOSwgOTE3NTUwLCA5MzQ2LCA2OTY2MCwgNDEyNTQsIAogICAgIDEyODA0NywgNDMyOTEsIDM3NjcsIDU3MzcsIDAsIDQ4NjUsIDAsIDU3NDAsIDkxNzk5NywgNTczNiwgNDM2OCwgNjQ3MjQsIAotICAgIDcxOTMsIDY4MTM3LCAwLCA1NzM5LCA0MTAyNCwgNDg2NiwgMCwgNzM5MDQsIDk4MzgzMSwgNDg2OSwgMTIwNTYzLCAwLCAKLSAgICA0MjIzLCAxMjgyMDEsIDY2NTAsIDEyNjUwOSwgMCwgOTgzNDU1LCAxMjc4OTAsIDQ4NzAsIDEyMDQ0NSwgNjg2NjEsIDY3MTYsIAorICAgIDcxOTMsIDY4MTM3LCAwLCA1NzM5LCA0MTAyNCwgNDg2NiwgMCwgNzM5MDQsIDk4Mzg0MCwgNDg2OSwgMTIwNTYzLCAwLCAKKyAgICA0MjIzLCAxMjgyMDEsIDY2NTAsIDEyNjUwOSwgMCwgOTgzNDYzLCAxMjc4OTAsIDQ4NzAsIDEyMDQ0NSwgNjg2NjEsIDY3MTYsIAogICAgIDc4MTc2LCA2ODY2NywgNjgzODIsIDY4Njc2LCAxMjc5MjUsIDEwMTIyLCA0ODY0LCA2NjU2OCwgNDE0NCwgNzkzNywgMCwgCiAgICAgNjI0NSwgNjg2NTIsIDI3MzIsIDQyNzM0LCA3NDUsIDAsIDE5NTA5NywgOTIxOTUsIDQ3NzcsIDc4MjEsIDAsIDY4NjMxLCAKLSAgICA0Mjc3NSwgMCwgMTk0OTU0LCAwLCAzMDk3LCAwLCA1OTY2LCA5ODM0NzgsIDQ3NzgsIDAsIDEwODYzLCAwLCA0NzgxLCAwLCAKKyAgICA0Mjc3NSwgMCwgMTk0OTU0LCAwLCAzMDk3LCAwLCA1OTY2LCA5ODM0ODYsIDQ3NzgsIDAsIDEwODYzLCAwLCA0NzgxLCAwLCAKICAgICA2NDQwNywgMCwgMTI4MzIzLCA4NTc3LCAxMjg1NjIsIDY4MTk2LCA0MzI4NSwgMTAyMTYsIDQ3ODIsIDAsIDAsIDEyMDc1NywgCiAgICAgNjg2MTgsIDEyMzI1LCA0MzA1NiwgODcxNywgMCwgMCwgNDc3NiwgNzM4MTgsIDExNDkyLCA4NzAwLCAwLCAxMzE3NiwgCiAgICAgNjgzNjMsIDEwNDI2LCAwLCA5MTc1OTksIDEwMzYyLCAxOTQ3MDYsIDE3MTUsIDQ4NDksIDgyNDIsIDk1NjEsIDczOTIyLCAKICAgICA0MzI3OCwgNDI2MzUsIDAsIDAsIDU5NjMsIDkxNzkyNiwgMCwgMCwgNDg1MCwgMCwgMTYwNywgNDY2LCA0ODUzLCAxMTg5OTUsIAotICAgIDQ4NTQsIDEyNzkxOCwgNTE2NCwgOTgzODYxLCAxMzUwLCA1MTI0LCA2NDQyMCwgMTk5MywgNTM2MiwgODQ3MSwgMjcwOCwgCisgICAgNDg1NCwgMTI3OTE4LCA1MTY0LCA5ODM4NzAsIDEzNTAsIDUxMjQsIDY0NDIwLCAxOTkzLCA1MzYyLCA4NDcxLCAyNzA4LCAKICAgICA5MjQ3MSwgMTI0NDUsIDM3ODUsIDIzNCwgMzE5OSwgMCwgNDEyNjgsIDQ4NDgsIDI1MzAsIDkxNzkwOSwgMjA2OCwgMTk2NCwgCiAgICAgMCwgNzM3NjIsIDEwNDU4LCAwLCA4NTc2LCA3ODU0MywgMCwgMjcwNCwgNDc5NCwgMCwgNjgyMTEsIDgzMjIsIDQ3OTcsIAotICAgIDU3NTMsIDAsIDI2OTQsIDQ3OTIsIDAsIDI0MzksIDY1MTA0LCA2OTgwNCwgOTgzNDE2LCAzMDMsIDk4MzEwMSwgOTI2MjIsIAotICAgIDk4MzQxNywgMjQzNywgMCwgNDIyMSwgNDg0NCwgOTIyMTYsIDAsIDAsIDAsIDcwMDQyLCAwLCA0MzI5MiwgMCwgMjQ0MSwgCisgICAgNTc1MywgMCwgMjY5NCwgNDc5MiwgMCwgMjQzOSwgNjUxMDQsIDY5ODA0LCA5ODM0MjQsIDMwMywgOTgzMTAxLCA5MjYyMiwgCisgICAgOTgzNDI1LCAyNDM3LCAwLCA0MjIxLCA0ODQ0LCA5MjIxNiwgMCwgMCwgMCwgNzAwNDIsIDAsIDQzMjkyLCAwLCAyNDQxLCAKICAgICAxMDczOSwgNjUwOTAsIDAsIDExOTMyNywgMTI2NTQxLCAyNDUxLCAyNzE0LCAxMTkzMjYsIDAsIDQzMzc5LCA0OTM3LCAKICAgICA0MzM3NiwgNzUzLCA1ODQ5LCAxMDU5NywgNDMwODksIDExNzIyLCA5MjQ4LCA5MjU1NSwgNDI4NzksIDExNzI1LCAwLCAwLCAKICAgICAyNzI2LCAzMTA3LCA3Mzk1OCwgNDk0MSwgNjQ5MzcsIDExOTIzMywgOTE0MCwgMTQwOCwgNTI2MSwgNDYwNywgMCwgMTgxLCAKLSAgICA5ODM0MjIsIDQ5NDIsIDk1MzksIDQ5MzgsIDAsIDY1MjAxLCA1MjU5LCA5MzY5LCA2NDE4NSwgNDE0MiwgNTI1NywgCisgICAgOTgzNDMwLCA0OTQyLCA5NTM5LCA0OTM4LCAwLCA2NTIwMSwgNTI1OSwgOTM2OSwgNjQxODUsIDQxNDIsIDUyNTcsIAogICAgIDk4MzYwMSwgMCwgNDk2NCwgNTI2NCwgNjQxNzgsIDY0MTc3LCAxMjk3OSwgNDE0MTEsIDY0MTgyLCA2NDE4MSwgNjQxODAsIAogICAgIDY0MTc5LCA5NDgyLCA0ODczLCA0MTIzMSwgMTgyMiwgNDI1MjYsIDEyODU4MSwgMTI3NTgsIDM4NjUsIDAsIDAsIDEwNTAwLCAKICAgICAwLCAxMTkwMjQsIDc4MDI4LCA5MjQwOCwgOTgzMCwgNDM2NDIsIDM4OSwgMTA4OTMsIDc1MjEsIDEyNzg3OSwgNDg3MiwgCiAgICAgNTQ2MywgMCwgMzEyNSwgOTU2NywgMCwgNDg3OCwgNTQ1OSwgNDYwNCwgOTE3OTMxLCA5NTU3LCA1NDY1LCA2ODYxNywgMCwgCi0gICAgMTE0OTQsIDEyNjQ5MiwgOTU2MywgMTA4NjUsIDc0NTcwLCA0MzI3OSwgNjQxODYsIDk4MzQzMSwgNzg3MTQsIDY0MTkxLCAKKyAgICAxMTQ5NCwgMTI2NDkyLCA5NTYzLCAxMDg2NSwgNzQ1NzAsIDQzMjc5LCA2NDE4NiwgOTgzNDM5LCA3ODcxNCwgNjQxOTEsIAogICAgIDY0MTkwLCA4ODk4LCA2NDE4OCwgMCwgNDEwMzAsIDc4ODM2LCAwLCA5MTc4MzUsIDc4ODIwLCA5MTc4MzQsIDAsIDc4ODA1LCAKLSAgICA0MTAzMSwgNzg4MDEsIDExOTYwLCA2NzQ1LCAzMDgyLCA5ODM0MjksIDc4NTM5LCA3MzkxOSwgMTA1NzMsIDQxNzQ0LCAKKyAgICA0MTAzMSwgNzg4MDEsIDExOTYwLCA2NzQ1LCAzMDgyLCA5ODM0MzcsIDc4NTM5LCA3MzkxOSwgMTA1NzMsIDQxNzQ0LCAKICAgICA3MDc5LCA1ODU2LCAxMjcwNDMsIDUxNjMsIDc4ODA5LCAxMjgxNjIsIDE4MTcsIDY2NzI0LCA3ODUzOCwgMCwgMTA1NjQsIAogICAgIDc3NjMsIDEzMDc3LCA0MTgxMywgNDQwMCwgNDE3NDUsIDY0MjA3LCAxMDI3NSwgODkyNSwgMTAzNzEsIDEwMzA3LCA0MTgxNCwgCiAgICAgNDI0OCwgMCwgMCwgNDU0MSwgNjI5OSwgNjQyMDQsIDY0MjAzLCA2NDIwMSwgNjQyMDAsIDY0MTk5LCA2NDE5OCwgMTI2NDcxLCAKQEAgLTE5NDg1LDMzICsxOTUwNSwzMyBAQAogICAgIDY1MjIyLCA2OTk4LCA3ODE4MCwgMCwgMzEyOCwgNDc4OSwgNTA2NywgNTA2NiwgMTE4ODQ5LCA0Nzg0LCAwLCA4ODI3LCAKICAgICAxMTQ2LCA1MDY1LCA2OTg5MCwgNzgxOTIsIDY4MTM2LCA3ODE5MCwgNDM0MTIsIDUwNjQsIDI0MzEsIDAsIDk0NTAsIDE4MDksIAogICAgIDAsIDc4MjAwLCA3ODIwMSwgNTA2MiwgMTI2NCwgNjQ4MTcsIDEzMjU0LCAxMTY5NywgMTI2NTk4LCA5Nzg1LCA2NDcxNiwgMCwgCi0gICAgMzkzMywgNzQ1NTksIDQ3NDAsIDc5NTQsIDAsIDAsIDQyNjA5LCAwLCA3NDE3NSwgMCwgMTI3MDE2LCAwLCA5ODM4NjQsIAorICAgIDM5MzMsIDc0NTU5LCA0NzQwLCA3OTU0LCAwLCAwLCA0MjYwOSwgMCwgNzQxNzUsIDAsIDEyNzAxNiwgMCwgOTgzODczLCAKICAgICA0MjEzMCwgMCwgNTE1MSwgOTE3ODI5LCA5MTc4MjMsIDAsIDkzOTgwLCAwLCA3NjIwLCAzODAwLCA2NTEyMiwgMCwgMCwgCiAgICAgODM1NSwgNzg1NCwgMCwgOTU0LCA2NDkyNywgNDE4NSwgNDEwNDUsIDEyNzE0MSwgNDE0MzgsIDQxNDM5LCA2ODY2NiwgCi0gICAgMTA3MTEsIDQ1OTMsIDEyNzc0NSwgMTIwNTg0LCA5ODM0MDAsIDY0Nzc0LCA4MDUzLCAxMDUzMiwgNjY3MjcsIDAsIDAsIDAsIAorICAgIDEwNzExLCA0NTkzLCAxMjc3NDUsIDEyMDU4NCwgOTgzNDA4LCA2NDc3NCwgODA1MywgMTA1MzIsIDY2NzI3LCAwLCAwLCAwLCAKICAgICA2NDc1OSwgNjM4MSwgNTE2NiwgOTg4OCwgMTI3ODAwLCA1MTQ4LCA0MjgzNCwgMCwgNzgyMDUsIDc4MjA2LCA0Mzc4NywgCiAgICAgNzgyMDQsIDY0MTMxLCAzMTE5LCA5MTc4MTQsIDAsIDMwNjAsIDY0MTM1LCA5OTg2LCAwLCA3Nzg3NiwgNjM2LCAxMTY5OCwgCi0gICAgMCwgOTgzNDQzLCA5OTE2LCAxMTcwMSwgNzgzNiwgNDI3NDEsIDY0MTM3LCA4MzIwLCA3ODY0MCwgODg2MywgOTI0MzEsIAotICAgIDExOTk2MCwgMTQ3NywgNDMyODksIDAsIDc0MzU4LCA4NjE4LCA5ODMzOTQsIDk5MDgsIDk4Mzk3MiwgMCwgMCwgMzkzNywgCi0gICAgMTIzMTIsIDAsIDk4MzM5NSwgMCwgNjQ3ODEsIDkxMiwgNjM0OSwgNDUzNiwgOTM5NTQsIDc0NTMyLCAxMjY1OTQsIDYyNDQsIAotICAgIDkyMjA5LCA3MTM0MSwgMzkzNSwgMTIwNjY1LCA5ODM0NjgsIDAsIDExOTUwLCA1MzkyLCA0MjI0OCwgNjUxMjksIDY4NjU2LCAKKyAgICAwLCA5ODM0NTEsIDk5MTYsIDExNzAxLCA3ODM2LCA0Mjc0MSwgNjQxMzcsIDgzMjAsIDc4NjQwLCA4ODYzLCA5MjQzMSwgCisgICAgMTE5OTYwLCAxNDc3LCA0MzI4OSwgMCwgNzQzNTgsIDg2MTgsIDk4MzQwMiwgOTkwOCwgOTgzOTgxLCAwLCAwLCAzOTM3LCAKKyAgICAxMjMxMiwgMCwgOTgzNDAzLCAwLCA2NDc4MSwgOTEyLCA2MzQ5LCA0NTM2LCA5Mzk1NCwgNzQ1MzIsIDEyNjU5NCwgNjI0NCwgCisgICAgOTIyMDksIDcxMzQxLCAzOTM1LCAxMjA2NjUsIDk4MzQ3NiwgMCwgMTE5NTAsIDUzOTIsIDQyMjQ4LCA2NTEyOSwgNjg2NTYsIAogICAgIDUzOTcsIDAsIDEyMDQ2LCAxMjU5OSwgMCwgMTI4MjYxLCA1Mzk1LCAwLCA1MzkzLCAzNTQsIDY4NjE1LCAxMTk5NDgsIAogICAgIDc4NTAzLCAwLCAwLCA0MjAzOSwgMCwgMCwgNjQxNDIsIDYyNiwgMCwgNTg5NSwgMCwgMCwgNTc4MCwgMCwgMCwgMTI4ODc0LCAKICAgICAwLCAwLCA0MzI5NywgOTgzMDc5LCA0MzExLCA0NjQ0LCA4ODE4LCAwLCAxMjgxODYsIDAsIDcxNDUsIDM5MTgsIDY2NDUyLCAKICAgICAzNzk3LCAxNjQ0LCA5MjM0NiwgOTY1OCwgNDE0MCwgMTEzODUsIDY1OTQ3LCA2NDU1LCA5MDMwLCA4MTMsIDExOTk0NSwgCiAgICAgNjgxMzEsIDQxNDYsIDExOTk1NywgNTM2MCwgMjQ2NiwgMCwgNjc2NjksIDExOTk0MiwgNjI0OSwgNDIxMTcsIDkyMjg3LCAKLSAgICAxMjgyMjQsIDAsIDAsIDc0MDQ2LCA0Mzc0NSwgNDkxMSwgOTg4LCA5MTc4MDcsIDAsIDk4MzQ2MCwgNDMwNjEsIDcwNTQsIAorICAgIDEyODIyNCwgMCwgMCwgNzQwNDYsIDQzNzQ1LCA0OTExLCA5ODgsIDkxNzgwNywgMCwgOTgzNDY4LCA0MzA2MSwgNzA1NCwgCiAgICAgNjQxNDcsIDAsIDY0OTIwLCA2ODE5NSwgNjY5OCwgMTE4OTMzLCA5MjUwNiwgMCwgMTIwMDA2LCAxMTk4MSwgMTIyMDIsIDAsIAogICAgIDExMDMyLCA2NzY1NCwgNjA5MywgMTE2MDgsIDk3NSwgNjg2NjIsIDY1ODQzLCAxNzAsIDAsIDAsIDQxNjksIDAsIDQxODU5LCAKICAgICA2MDU4LCAxMjA0MDEsIDEzMjAzLCAxMjA2NTcsIDAsIDAsIDY4NjU3LCA5ODE4LCAxMDE3OCwgMTAzMjQsIDQyMTA2LCAKICAgICA1ODk4LCA3NDU0MCwgNDczOCwgNDE4NTYsIDcwNjIsIDkxNzg2NSwgNDczNywgMTE3NzksIDQ3NDIsIDEyMDU2NCwgOTIzOTEsIAotICAgIDczNzM2LCA5ODMzNTYsIDk4MjUsIDY0NDgsIDY3MTUsIDEyNzAwOCwgNDgzMSwgMCwgOTI1MjUsIDAsIDUzMDAsIDQ3NDEsIAotICAgIDQyMTA4LCA5ODMzNDYsIDY0MTU5LCA0NzM2LCA2NDE0OCwgMCwgODQ5LCA5MjE5MSwgNzg0OTEsIDQzMjg4LCAwLCA2NjYyMCwgCi0gICAgOTE3OTE2LCAxMjczMzEsIDY1NTQ5LCA5NDk2LCA2NDU5OCwgMTE4ODY2LCA5ODMzNTgsIDc4NzYsIDY4MTMyLCA5MTc4NzIsIAorICAgIDczNzM2LCA5ODMzNjQsIDk4MjUsIDY0NDgsIDY3MTUsIDEyNzAwOCwgNDgzMSwgMCwgOTI1MjUsIDAsIDUzMDAsIDQ3NDEsIAorICAgIDQyMTA4LCA5ODMzNTQsIDY0MTU5LCA0NzM2LCA2NDE0OCwgMCwgODQ5LCA5MjE5MSwgNzg0OTEsIDQzMjg4LCAwLCA2NjYyMCwgCisgICAgOTE3OTE2LCAxMjczMzEsIDY1NTQ5LCA5NDk2LCA2NDU5OCwgMTE4ODY2LCA5ODMzNjYsIDc4NzYsIDY4MTMyLCA5MTc4NzIsIAogICAgIDM5MjgsIDkxNzg3MCwgNDMzNzgsIDEwNzA2LCA3MTk4LCAwLCA0ODQyLCAxMjA1MywgMTI4MTI5LCAwLCA0ODQxLCAwLCAKICAgICA0MTcxLCAxMjAwOCwgNjI1MSwgMzkyMywgMTQ5MCwgMCwgMTE5NTkxLCAxMjY1MTIsIDQwOTcyLCA1MjQ1LCAwLCAxMDExNCwgCiAgICAgNDIwMDEsIDQxODg4LCA0ODQ1LCA4MzMyLCA0MDk3NCwgNjQzNDcsIDQ4NDAsIDkwNzcsIDc4MzQ2LCAxNzQ3LCA5MTc4NDksIAotICAgIDQ4MjUsIDY5MjQwLCA5MTc4NTIsIDY4NjU1LCAwLCA5ODMzODAsIDAsIDAsIDY4NjI4LCA5ODMzMzksIDk4NTAsIDExODkzNywgCisgICAgNDgyNSwgNjkyNDAsIDkxNzg1MiwgNjg2NTUsIDAsIDk4MzM4OCwgMCwgMCwgNjg2MjgsIDk4MzM0NywgOTg1MCwgMTE4OTM3LCAKICAgICAzNjcsIDE0NzIsIDkxNzg1OSwgNjY4NywgMTI3NCwgMCwgNTkwNSwgMTIzMzksIDg5MTksIDczOTUzLCAxMDkwNywgNjUyNjEsIAogICAgIDExMDIzLCAxMTk1NTksIDQ4MzAsIDkxMzQsIDc4NjY2LCA2NDEyNiwgNDMwMTEsIDAsIDEyNjYyNiwgNjQxMDEsIDAsIDAsIAogICAgIDQ4MjQsIDEwNjE0LCAxMTk2NTksIDAsIDE4ODgsIDE5NjAsIDc4NjEsIDkxNzg1NiwgNzg1MjQsIDQxODM2LCA0MzAxMiwgCkBAIC0xOTUyMCwxMiArMTk1NDAsMTIgQEAKICAgICA2NDExOCwgMTI2OTk4LCAxMjk2MiwgMCwgMTI2NTgwLCA0MDE3LCAxMjgyNywgNTI0MSwgMTIwMzkyLCAwLCA0MTExOCwgCiAgICAgMzkyNCwgMCwgMTEzNjYsIDkxNzg0MywgMCwgMCwgOTE3ODQ2LCA0MTExNiwgOTE3ODQ0LCA5MTc1NjQsIDAsIDExMzYzLCAKICAgICAxMjA1NywgMTE5MTcsIDE1NjcsIDc0MDAwLCA0NzIxLCAxMjY2NDEsIDY2MjAyLCA4OTU3LCA0MTM5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjc0MCwgMTI4NzAyLCA0NzIyLCA2ODE2LCAxMjc3OTMsIDEyNzU5LCA0NzI1LCA5ODMzNzUsIDQ3MjYsIDAsIAotICAgIDE5NDg5MiwgMCwgMTI4MzIxLCA5MTc5MDUsIDAsIDEyNzU1LCAxMjc2MiwgNDAxNSwgMCwgODA1MiwgNDc2LCAwLCAwLCAKLSAgICAxMjgyOTQsIDY0MjEyLCA0MTAyMCwgMTM4MiwgNjQyMDksIDY0MjE2LCA0NDAwMiwgNjQyMTQsIDE2NTYsIDQxODMxLCAwLCAKLSAgICAwLCA0MTg0MywgODcyMCwgMzkwOCwgMTQ1MiwgMTMxMTEsIDAsIDY0MDY3LCAxMjczMjgsIDg1NTIsIDY0MTEzLCA0MTg0NSwgCi0gICAgMzg0OSwgNzg3MzIsIDY2MjMyLCA5Nzc4LCAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA5OTQ4LCAxMTkwODUsIDAsIDAsIAotICAgIDc5MzUsIDI0MjAsIDAsIDExMTQsIDkyNTk5LCA2NzU4NSwgNzAxMDQsIDEyMDA1MywgOTIzNTAsIDEyMDA1MSwgMzkzOCwgCisgICAgMCwgMTI3NDAsIDEyODcwMiwgNDcyMiwgNjgxNiwgMTI3NzkzLCAxMjc1OSwgNDcyNSwgOTgzMzgzLCA0NzI2LCAwLCAKKyAgICAxOTQ4OTIsIDk4MzYyMiwgMTI4MzIxLCA5MTc5MDUsIDAsIDEyNzU1LCAxMjc2MiwgNDAxNSwgMCwgODA1MiwgNDc2LCAwLCAKKyAgICAwLCAxMjgyOTQsIDY0MjEyLCA0MTAyMCwgMTM4MiwgNjQyMDksIDY0MjE2LCA0NDAwMiwgNjQyMTQsIDE2NTYsIDQxODMxLCAKKyAgICAwLCAwLCA0MTg0MywgODcyMCwgMzkwOCwgMTQ1MiwgMTMxMTEsIDAsIDY0MDY3LCAxMjczMjgsIDg1NTIsIDY0MTEzLCAKKyAgICA0MTg0NSwgMzg0OSwgNzg3MzIsIDY2MjMyLCA5Nzc4LCAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA5OTQ4LCAxMTkwODUsIDAsIAorICAgIDAsIDc5MzUsIDI0MjAsIDAsIDExMTQsIDkyNTk5LCA2NzU4NSwgNzAxMDQsIDEyMDA1MywgOTIzNTAsIDEyMDA1MSwgMzkzOCwgCiAgICAgMTIwMDU3LCA2NTQxNywgNjQ3MTcsIDEyMDA2MCwgMTIwMDYxLCA2NTQxNSwgMTIwMDU5LCA2MjkyLCA2NTMwMywgNzk1NSwgCiAgICAgNjQ1MiwgNDcxMywgMTI4MTk2LCA2NjI0OSwgOTE3ODg1LCA5MTc4OTAsIDkxNzg5MSwgNjUxNTIsIDcxOSwgMTIwMDQ0LCAKICAgICA3ODYyMywgMTIwMDQyLCA2NzEzLCA0NTMyLCA2NTQxMiwgNjk4MjIsIDEwODY4LCA0NzE3LCAyMzQ5LCA1OTAyLCA2NjQ1MCwgCkBAIC0xOTUzNywyNiArMTk1NTcsMjYgQEAKICAgICA0ODE0LCAwLCA0ODEwLCAwLCAwLCA2NDkyOCwgMTA1NDMsIDAsIDM1MjIsIDcxMzM1LCA0MTQsIDY1NDA0LCAwLCAxOTUwMjcsIAogICAgIDY0NTYsIDczODIwLCAwLCA2NjkxLCA0MjE5MywgOTIyMjUsIDEyODE3MSwgMCwgNzQ0OTUsIDAsIDAsIDAsIDExODgyMCwgCiAgICAgOTc1MSwgNjU0MDcsIDEyODA4NSwgMTE3NzAsIDM5MTksIDAsIDAsIDY1MDYxLCAwLCAwLCAwLCAxMjIzNSwgMCwgMCwgCi0gICAgMTI3MjMzLCA2NDA5MiwgOTgzNDYyLCA2NDA4MCwgMCwgNjQwOTAsIDAsIDY5OTEzLCAxMDE2MiwgMTAzMTAsIDAsIDg0NTQsIAorICAgIDEyNzIzMywgNjQwOTIsIDk4MzQ3MCwgNjQwODAsIDAsIDY0MDkwLCAwLCA2OTkxMywgMTAxNjIsIDEwMzEwLCAwLCA4NDU0LCAKICAgICAxMjc4ODgsIDQyMDM4LCAzODcsIDQxMzYzLCAxMjczNywgMCwgNDc4MCwgNDMzNjgsIDAsIDY0MzEwLCA2NDYyMSwgNjczMiwgCi0gICAgNzgxMTYsIDAsIDk4MzEzOSwgMCwgOTgzMDc0LCA4ODk2LCAwLCAzNzUsIDY5NzYsIDY2NTgyLCAxMTkwMDUsIDk4Mzg2NSwgCi0gICAgMCwgOTgzNDI2LCAxMTkyMDIsIDExOTIwMywgMTI1MjYsIDQzMTIwLCAyMzE1LCAwLCAxOTM4LCAxMTkxOTcsIDAsIDQ1MjksIAotICAgIDExOTIwMCwgMTE5MjAxLCAxMTkxOTgsIDExOTE5OSwgNjk2OTIsIDk4MzQyNCwgNjk2OTgsIDEzMTUwLCA2NDQ5MiwgMCwgMCwgCisgICAgNzgxMTYsIDAsIDk4MzEzOSwgMCwgOTgzMDc0LCA4ODk2LCAwLCAzNzUsIDY5NzYsIDY2NTgyLCAxMTkwMDUsIDk4Mzg3NCwgCisgICAgMCwgOTgzNDM0LCAxMTkyMDIsIDExOTIwMywgMTI1MjYsIDQzMTIwLCAyMzE1LCAwLCAxOTM4LCAxMTkxOTcsIDAsIDQ1MjksIAorICAgIDExOTIwMCwgMTE5MjAxLCAxMTkxOTgsIDExOTE5OSwgNjk2OTIsIDk4MzQzMiwgNjk2OTgsIDEzMTUwLCA2NDQ5MiwgMCwgMCwgCiAgICAgMjI5MSwgMTI5MDIsIDAsIDQyODkxLCA2NjMyNywgNzQyOTgsIDkxNzg1NywgMTA3OTksIDY5NjkwLCAyNTg3LCA2NjM3MiwgCiAgICAgMCwgNDE5MywgOTIyNTAsIDQyNDEsIDk4MzA1NywgNzk5OCwgMCwgMCwgMCwgMTI2NjQwLCAyMzE2LCAxMTg4MjEsIDAsIDAsIAotICAgIDAsIDY0Mjk3LCA3NDc5OSwgOTI0NDIsIDc0MTQwLCAwLCA1MzczLCAwLCA5ODM4NzcsIDM3NjIsIDEwMDE1LCAxMjA2NzIsIAorICAgIDAsIDY0Mjk3LCA3NDc5OSwgOTI0NDIsIDc0MTQwLCAwLCA1MzczLCAwLCA5ODM4ODYsIDM3NjIsIDEwMDE1LCAxMjA2NzIsIAogICAgIDExOTIzMiwgMCwgNDE1OTAsIDAsIDcwMDk4LCAzNzgwLCA3NDg1LCA1Nzc5LCAwLCA0MjAzNywgMCwgMzkwNiwgMTIzNDksIAogICAgIDAsIDgzMjYsIDAsIDY1NDk4LCAzNzYzLCA2OTgzLCA1NjE4LCAwLCAzNzc5LCAwLCA0MzYxMywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMjgwLCA3NDU1OCwgMTI3MzMyLCA2ODEzOCwgMTMwNzIsIDE4OTQsIDAsIDAsIDY1NDc4LCA0MzMxMCwgNzIzMSwgMCwgCi0gICAgMTE3NzMsIDAsIDAsIDAsIDAsIDI1NTEsIDAsIDY0NTMsIDEwMjAwLCA2MjM1LCA5ODM3NDMsIDExOTIzNywgMCwgMTI4ODA1LCAKKyAgICAxMTc3MywgMCwgMCwgMCwgMCwgMjU1MSwgMCwgNjQ1MywgMTAyMDAsIDYyMzUsIDk4Mzc1MiwgMTE5MjM3LCAwLCAxMjg4MDUsIAogICAgIDQ0NzAsIDExODI2LCA5MTc1NTcsIDc3ODAsIDUzNjksIDExODk1OCwgNTI0OSwgMCwgNTM2NywgODc1NiwgMTI3MTQzLCAwLCAKLSAgICA1Mzc3LCAxMjA1ODUsIDY4MTQzLCAxNjg4LCA3ODI0NSwgOTgzMzQ4LCA2OTY4NSwgOTgzNzQ3LCAwLCAwLCA0NDAyMCwgCisgICAgNTM3NywgMTIwNTg1LCA2ODE0MywgMTY4OCwgNzgyNDUsIDk4MzM1NiwgNjk2ODUsIDk4Mzc1NiwgMCwgMCwgNDQwMjAsIAogICAgIDY4MDgsIDQxMzE5LCAxMzAwLCAxMDY1MCwgNDE2OTIsIDY0NTA1LCAyMjkwLCAwLCAxMTk2MjQsIDE0NjUsIDEwODUwLCAKICAgICAzOTQzLCAwLCA0MTIwNSwgNDEzMTUsIDExODk2MSwgMCwgMCwgNTM1MiwgMCwgMCwgODgzOSwgNDEzMTQsIDczODQsIDc3ODUsIAogICAgIDQxMjA0LCAxMjczMjIsIDQxMjA5LCA2OTYzNywgOTIyNDEsIDQzNjA3LCAwLCAwLCA1NDIwLCAzODk3LCAxMDEzNCwgMCwgCiAgICAgNzQ0MTcsIDQwMTgsIDcxNTAsIDY4MTI3LCAwLCAwLCAwLCAwLCAxMjc1MjYsIDI1NjEsIDY4NjIxLCAzNTQyLCA3MTQ4LCAKICAgICAxMjA3NiwgNzk1MSwgNjgxNTIsIDExODg1NywgNTMwMywgNjI3NiwgMTcwNiwgMCwgNzg3NTEsIDcxNDYsIDAsIDY1MTUwLCAKLSAgICA0MTgxOSwgMCwgNzM5NTEsIDEwODQ3LCA0MTgyMiwgOTk4NSwgODYwLCAwLCAxMDUwNiwgOTgzNDI3LCA2OTY0MSwgMTA3NTMsIAorICAgIDQxODE5LCAwLCA3Mzk1MSwgMTA4NDcsIDQxODIyLCA5OTg1LCA4NjAsIDAsIDEwNTA2LCA5ODM0MzUsIDY5NjQxLCAxMDc1MywgCiAgICAgMTA4MzAsIDAsIDYxNSwgNjQ0OTAsIDc1NzQsIDkyNjE3LCA3NzkyMiwgMCwgMTI5MDksIDQzMDE2LCA2NDU1OSwgMTI3MDI4LCAKICAgICAwLCAwLCA2Nzk5NiwgMjAyMCwgMCwgNDAyMiwgMTI4NzgzLCAwLCA3NzkyMywgMTI2NTkzLCA0MTY5MSwgMCwgMCwgNzQzMjksIAogICAgIDAsIDY0NjIyLCA5MDcwLCAwLCA2ODQxMSwgMzkxMSwgNDI4MjksIDQzMTIyLCAxMDMzLCA3NDQ0MCwgMCwgNzAwMCwgMzkwNCwgCkBAIC0xOTU3MSw3ICsxOTU5MSw3IEBACiAgICAgNjg2NzUsIDEyODA1NCwgMTUxMSwgOTMyNCwgNzgyMTEsIDEwNTE5LCA2NjMzMSwgMzQ1NCwgMTk5MzAsIDAsIDQxMDE5LCAwLCAKICAgICAwLCA2NTI5MiwgNjgyMiwgMTI4NjIsIDAsIDAsIDQyMTQzLCA0MTgyOCwgNzgyMDcsIDY1NTMxLCA3ODIwOCwgMTE4ODc5LCAKICAgICA1NTIyMywgMCwgMTI4MDcxLCA0MTgyNiwgODg2NSwgNjQwMiwgMCwgMTMyNzksIDc5MTcsIDc0NzU1LCAwLCA3NzMzLCAwLCAKLSAgICA0OTk4LCA5ODM4ODcsIDkyMzMyLCA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgNzAwNjEsIDQwMTMsIDAsIDEwODgxLCAwLCAwLCAKKyAgICA0OTk4LCA5ODM4OTYsIDkyMzMyLCA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgNzAwNjEsIDQwMTMsIDAsIDEwODgxLCAwLCAwLCAKICAgICAwLCA3NDc4OCwgMjAxNCwgMCwgMCwgOTc2NSwgMCwgMCwgMCwgMTk1MDU5LCA3ODM1NywgNjUyODEsIDEyNzgyNSwgMTA5NDksIAogICAgIDAsIDAsIDAsIDIwMTUsIDAsIDAsIDAsIDY2MzE4LCA0MzIzMywgMCwgNDI1MTcsIDAsIDAsIDAsIDEyNjk4LCA4MDk0LCAKICAgICAxMDEzNSwgNjU5MDksIDY0NzQsIDc5NCwgMCwgMTI2NTYsIDEyODEyMiwgMTE5MzUzLCAxMjgyNzAsIDE2NjUsIDAsIDQ4MzMsIApAQCAtMTk1OTAsOSArMTk2MTAsOSBAQAogICAgIDk0MjUsIDk0MjYsIDk0MjcsIDk0MjgsIDk0MjksIDY0NzU4LCAyMzYyLCA5NjU1LCAwLCAyMDA0LCA5MDk2LCA5NzgyLCAKICAgICAxMjg4NDgsIDkxNzIsIDEyODU0NSwgMTk5NjUsIDAsIDU5NTUsIDY3NjY2LCAxMTA4LCAwLCA3NDc3MywgMCwgMCwgNjQ3ODIsIAogICAgIDM5MjYsIDkyNDQ4LCA2NTIxMCwgODc5OCwgMCwgOTIxNjUsIDEzOTIsIDAsIDAsIDEyNzM2NCwgMTA2MDYsIDgwNjUsIAotICAgIDExODgwNSwgMTAzNTMsIDEwNDE3LCAwLCAwLCA2NDUyNCwgOTI0MTgsIDQwMTksIDAsIDk4MzI4MCwgNDMyODAsIDgyMTksIAotICAgIDY4NDAyLCAxODEyLCAxMTk5NjMsIDk4MzY4MywgMCwgMTI2NDg4LCA0MjQxMCwgNzQ0NDgsIDExOTEzMiwgNjA1NCwgCi0gICAgMTA2OTcsIDMxNjksIDQyMjk3LCA0MjMyMiwgMTA2NDIsIDM5MDksIDk5NTAsIDAsIDEyODEzOSwgOTgzMjUzLCA2ODY3OCwgCisgICAgMTE4ODA1LCAxMDM1MywgMTA0MTcsIDAsIDAsIDY0NTI0LCA5MjQxOCwgNDAxOSwgMCwgOTgzMjg4LCA0MzI4MCwgODIxOSwgCisgICAgNjg0MDIsIDE4MTIsIDExOTk2MywgOTgzNjkyLCAwLCAxMjY0ODgsIDQyNDEwLCA3NDQ0OCwgMTE5MTMyLCA2MDU0LCAKKyAgICAxMDY5NywgMzE2OSwgNDIyOTcsIDQyMzIyLCAxMDY0MiwgMzkwOSwgOTk1MCwgMCwgMTI4MTM5LCA5ODMyNjEsIDY4Njc4LCAKICAgICAwLCAwLCAxMDQ5LCAwLCA2NTcwNywgMjMwNCwgNDE4MDYsIDkyMzI2LCA0MjMzNiwgMzkyMSwgMCwgMTE3NzUsIDY0NzYwLCAKICAgICAxMTc2NiwgMTAzOCwgNDIzMDMsIDk4MjMsIDEyNzI3OCwgNjkyMzYsIDQwMDgsIDY0MDA0LCA4NzczLCAxMDczMywgMzYsIDAsIAogICAgIDUxNTMsIDQxODA1LCAwLCA3MzczNSwgNzYzLCA0MTgwOCwgNjQ5MTAsIDk4MzEzMCwgMjAwOSwgMCwgMCwgMTI3MTQyLCAKQEAgLTE5NjA3LDcgKzE5NjI3LDcgQEAKICAgICA3ODAwMiwgMCwgNzUxMywgMTg2MywgNDcxMCwgMCwgNTk1NiwgNzYyMSwgNzgwMDYsIDkyNjI0LCA0NzA1LCA3MTYsIAogICAgIDc4MDA0LCAwLCA0NzA0LCAxMjAwNDAsIDEyMDI3MCwgNDIyNDEsIDE2MSwgNDM5NzcsIDc0NTQ2LCA2NjIxNCwgNDcwNiwgMCwgCiAgICAgNjk5MTQsIDQyNjcyLCA0NzA5LCAxMDY4MCwgMTE5MDY1LCA0MzI5MywgMTE5OTQ0LCAwLCAxMTkxNjQsIDEyMDMyOCwgCi0gICAgOTI0NjcsIDEwMTg3LCAxNzAwLCAxMTkyMjMsIDAsIDAsIDEyODExOSwgNDAwNCwgMCwgMTA5NjgsIDQzMjk2LCA5ODM2MzMsIAorICAgIDkyNDY3LCAxMDE4NywgMTcwMCwgMTE5MjIzLCAwLCAwLCAxMjgxMTksIDQwMDQsIDAsIDEwOTY4LCA0MzI5NiwgOTgzNjQyLCAKICAgICA4NTA2LCAwLCAwLCAxMjY5OTYsIDEwMDUsIDkzNywgNzgyMTYsIDQ3MzQsIDI4NzAsIDAsIDc4MjE4LCA5ODMxMDksIDc0NjMsIAogICAgIDQ3MjksIDAsIDIzNSwgMTM4NCwgNDcyOCwgMCwgMTIwNDIwLCA5MjQ5MCwgNzQ0NDksIDgxMDksIDQzMTA1LCA5ODMxNzQsIAogICAgIDQ3MzAsIDQ0NywgMTMxODYsIDE1MTMsIDQ3MzMsIDEyMDQxNSwgMCwgMCwgNDI1MjcsIDEyOTExLCA0MzQyNywgMTM4MywgCkBAIC0xOTYxOCw3ICsxOTYzOCw3IEBACiAgICAgMTI3NjksIDY1OTA1LCA0MTY5NywgMTI4MywgMTIwMzAyLCA0Nzc5LCAwLCAzNzE5LCA0MDA2LCA5ODM1NjksIDE5OTU3LCAKICAgICAxMjg3NzMsIDIwMjEsIDExOTMzMiwgMTIwNjk5LCAxMTkxNTAsIDQzMDI4LCA2NTQ5MywgNDE4MzgsIDM4NzUsIDU5NjIsIAogICAgIDY0MzQxLCA5MjYxNiwgOTgxNCwgNDM0NTcsIDU4MjcsIDMzMTQsIDc3ODcsIDc4MjM0LCA2NTQ5NCwgNjgxNTMsIDAsIDAsIAotICAgIDEyMDYzNiwgNjQ1MzEsIDEyMDY5MiwgMTk0NjI2LCAwLCAwLCA2NjMxNiwgNjU0NjcsIDU3NzEsIDQxMjk4LCA5ODM3ODUsIAorICAgIDEyMDYzNiwgNjQ1MzEsIDEyMDY5MiwgMTk0NjI2LCAwLCAwLCA2NjMxNiwgNjU0NjcsIDU3NzEsIDQxMjk4LCA5ODM3OTQsIAogICAgIDk3NDIsIDUyMSwgMCwgMTA4MDAsIDkyMjIyLCA4NDA0LCAxOTQ2MjUsIDQ4MywgNzA5NiwgNzA4OSwgNjYzMjMsIDkyOCwgMCwgCiAgICAgMCwgMTE5MDE4LCAxMDU5OSwgMTE1ODYsIDM5ODksIDEwOTcxLCA0Mzc0OCwgNjU3ODIsIDk4NDEsIDg4NDMsIDEyMTQ1LCAKICAgICA5MjQ3MCwgMTAwNzQsIDc4NTQ4LCAwLCAzNzY5LCAwLCAwLCAwLCA5ODMxMDcsIDk1NzMsIDAsIDY1MjkwLCA4ODQ5LCAwLCAKQEAgLTE5NjI2LDE3ICsxOTY0NiwxNyBAQAogICAgIDczODM4LCA3ODU1MywgNTgyNSwgMTMwMDcsIDY4MTY1LCAwLCAxMjA0NTcsIDEyNjYxLCA3NjA4LCAxMDM1NCwgMTA0MTgsIAogICAgIDQyNDExLCAyMDIyLCAwLCAxNDA5LCAxMjE5NSwgNDAwMSwgMzExMiwgMTA4MjQsIDEyMDYzOSwgMTM5MCwgMCwgMCwgNDIxLCAKICAgICA0MzUzNiwgNTg0NiwgMTIwMTIwLCA0MTMwLCAxMjc3NzUsIDc1OTUsIDQyNTg4LCA3NjAwLCAxMjAxMjEsIDY2MDM1LCAKLSAgICA5ODM5MDQsIDAsIDY1ODUxLCA0MjYwNywgMTI4MTkwLCA5MjQwMywgMzE2OCwgMCwgNDIxMzQsIDExODMxLCAyMzcwLCAKKyAgICA5ODM5MTMsIDAsIDY1ODUxLCA0MjYwNywgMTI4MTkwLCA5MjQwMywgMzE2OCwgMCwgNDIxMzQsIDExODMxLCAyMzcwLCAKICAgICAyODQ2LCA5MjYwNSwgMCwgMCwgMTIwMTMyLCAwLCAxODM2LCAwLCAwLCA5MjU1OCwgMzc0MCwgNjk4NDMsIDYyOTAsIAogICAgIDY1Mzc0LCAxMjA0NTEsIDIzOTAsIDM5NDQsIDY2NjI4LCAxMjA0MzQsIDAsIDYxMzUsIDMxMTgsIDc0MjY1LCAxMTkwOTMsIAotICAgIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgNjQ3MzksIDc5NDMsIDk4MzczNCwgMCwgMTA2MTgsIDI1ODQsIDAsIDAsIDAsIAorICAgIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgNjQ3MzksIDc5NDMsIDk4Mzc0MywgMCwgMTA2MTgsIDI1ODQsIDAsIDAsIDAsIAogICAgIDk5OTgsIDEyODU2NCwgMCwgMCwgMCwgMCwgNjIwNCwgMCwgMCwgODI3OSwgODc3NiwgNjQ5NTQsIDQ5NzUsIDcwMDc1LCAKICAgICAxMjAxMzAsIDQyNjcsIDE2MzEsIDQyMjA2LCA3Nzk4MywgMCwgMTk1MDQ2LCA2NTcwMCwgNjY1NjIsIDAsIDY0NjQ1LCAwLCAKLSAgICAwLCAxMjY1ODgsIDEyNTg2LCAwLCA5MjQyLCAxMjc5MjIsIDAsIDQ1MjMsIDU4NDIsIDEwNDk1LCAzMTIyLCA5ODM3ODgsIAorICAgIDAsIDEyNjU4OCwgMTI1ODYsIDAsIDkyNDIsIDEyNzkyMiwgMCwgNDUyMywgNTg0MiwgMTA0OTUsIDMxMjIsIDk4Mzc5NywgCiAgICAgNzc5MywgNzgyNzUsIDkzMjgsIDExOTEwNCwgNzgzOTMsIDEyNjA0LCAwLCA2NjE1LCAyMjg1LCA5MjM0NCwgMzk4NiwgCi0gICAgNDQwMjUsIDAsIDg5MTIsIDY0NTU1LCA3NDA5LCAwLCA5ODMzNTAsIDk1NDEsIDc4Mjc2LCAwLCAxMTI3NSwgODU0MCwgCi0gICAgMTE0OTgsIDAsIDk4MzM0OSwgNDEwNDAsIDI0NTksIDAsIDEzMDYwLCA0MTA0MSwgNzQ0MTMsIDk4MzEzOCwgMCwgMCwgCi0gICAgNjg0MjcsIDEwNDUwLCAxMjU1MSwgNDEwNDMsIDcwMjAsIDEyMDM1MywgMzc2NSwgOTgzMzQyLCAwLCAxNjA2LCAxMjAzNDgsIAorICAgIDQ0MDI1LCAwLCA4OTEyLCA2NDU1NSwgNzQwOSwgMCwgOTgzMzU4LCA5NTQxLCA3ODI3NiwgMCwgMTEyNzUsIDg1NDAsIAorICAgIDExNDk4LCAwLCA5ODMzNTcsIDQxMDQwLCAyNDU5LCAwLCAxMzA2MCwgNDEwNDEsIDc0NDEzLCA5ODMxMzgsIDAsIDAsIAorICAgIDY4NDI3LCAxMDQ1MCwgMTI1NTEsIDQxMDQzLCA3MDIwLCAxMjAzNTMsIDM3NjUsIDk4MzM1MCwgMCwgMTYwNiwgMTIwMzQ4LCAKICAgICAxMjAzNTEsIDMwOTMsIDY4NDM2LCAwLCA5ODMwNjEsIDExOTYxMywgMCwgMCwgNDMxMiwgNzQwOTEsIDEyMDMzNywgCiAgICAgMTIwMzM2LCAxMTkyMywgNDAyMywgMTIwMzMzLCA1NzYzLCA5NDAxNSwgNDgyNywgMTA4OTQsIDEyODEwLCA2NDQwNiwgCiAgICAgMTE4Nzg1LCA0NDU1LCA3NDMyMSwgNDMzLCAxMTk2MjAsIDY2NjYwLCAyNDk5LCAwLCAwLCAxMTg4MzcsIDExOTczLCAKQEAgLTE5NjQ2LDI1ICsxOTY2NiwyNSBAQAogICAgIDcwMDQsIDAsIDY1ODgwLCAxMjc4ODYsIDExOTA0OCwgMjM4MCwgMTEzODAsIDAsIDkzOTk2LCAyMzc2LCAwLCAxMTkzMjAsIAogICAgIDAsIDUxOTcsIDEyNzA0NiwgMTI3MDQ3LCAxMjcwNDgsIDIzNjYsIDEyNzA1MCwgMTI3MDUxLCAxMjA1NTQsIDEyMDA0NSwgMCwgCiAgICAgMCwgMCwgOTgzMDg0LCAwLCAwLCAwLCA3NDE4OCwgNzEzNDIsIDk4MzA4NiwgOTgzNTczLCAxMjAwNDcsIDEyODU3NSwgMCwgCi0gICAgMCwgMTIwMDQ5LCAwLCAxODQ3LCAwLCAxMDMzOSwgOTgzMzU3LCA0MjM4NCwgMCwgNDIyNywgNzQxNTgsIDAsIDkyNTAxLCAKLSAgICA0MzAzMiwgMCwgNDIzNjUsIDAsIDEyNjcxLCAxMTM4NCwgMCwgOTgzNDU3LCAwLCA2NDc5NywgOTgzMzM3LCA1ODIwLCAKLSAgICA5ODMzMzYsIDEyMDA1MiwgMTIwMDY1LCAwLCAxMjAwNjQsIDEyMDY1MCwgNDIxMzcsIDk4OTMsIDI3NTQsIDEyNjY0LCAKKyAgICAwLCAxMjAwNDksIDAsIDE4NDcsIDAsIDEwMzM5LCA5ODMzNjUsIDQyMzg0LCAwLCA0MjI3LCA3NDE1OCwgMCwgOTI1MDEsIAorICAgIDQzMDMyLCAwLCA0MjM2NSwgMCwgMTI2NzEsIDExMzg0LCAwLCA5ODM0NjUsIDAsIDY0Nzk3LCA5ODMzNDUsIDU4MjAsIAorICAgIDk4MzM0NCwgMTIwMDUyLCAxMjAwNjUsIDAsIDEyMDA2NCwgMTIwNjUwLCA0MjEzNywgOTg5MywgMjc1NCwgMTI2NjQsIAogICAgIDEyMDA2MywgMCwgNzM3NywgMTI3ODY3LCA0MTc5OSwgNjU1MzAsIDE3MTEsIDEyOTg0LCA0MzAzOSwgMzExNCwgNjI1NSwgCi0gICAgOTgzMzMyLCAxMTg5MzgsIDAsIDEwODUzLCA5MjYsIDk4MzM2MSwgNzQxODQsIDk4MzM2MCwgMTIwMDU1LCAwLCA0MzE3NSwgCisgICAgOTgzMzQwLCAxMTg5MzgsIDAsIDEwODUzLCA5MjYsIDk4MzM2OSwgNzQxODQsIDk4MzM2OCwgMTIwMDU1LCAwLCA0MzE3NSwgCiAgICAgMCwgNDMwMzcsIDQxNzk4LCA0MTAzNSwgMTE1ODMsIDEyNzc2OSwgNDE4MDEsIDExOTA4OCwgMTE5NjA1LCA1MjAsIDQyMDAsIAotICAgIDEyNjk5LCA4MzMxLCAwLCAzMDkxLCA0MTAzNCwgMTI3MzUzLCA5ODM2NzIsIDgzNjAsIDAsIDc4MDQ0LCAzMjEsIDQyMjksIAorICAgIDEyNjk5LCA4MzMxLCAwLCAzMDkxLCA0MTAzNCwgMTI3MzUzLCA5ODM2ODEsIDgzNjAsIDAsIDc4MDQ0LCAzMjEsIDQyMjksIAogICAgIDY0NTQzLCA5MTc5NDYsIDY1NTYzLCAwLCA5MTc5NzQsIDI4NjEsIDQzNzkzLCAxMDA5NSwgMCwgOTE5NSwgOTIzODYsIAogICAgIDE4NjEsIDAsIDczNzMzLCAwLCAwLCA0MzA0MSwgMCwgNDM3OTQsIDEyODUzMCwgMzg1OSwgMTIxODEsIDQxNjYwLCA4MjA5LCAKICAgICAwLCA3Mzg2NywgMTI5NzMsIDAsIDc0NzU3LCAxMjc1MTQsIDQxNjU4LCAwLCAwLCA1NzYwLCAwLCA3NDMsIDQ0MTQsIAogICAgIDEyMDc2NiwgMCwgNDI2MzIsIDkxNzk3MywgNjUxNjEsIDczODk2LCAxMjg1ODksIDAsIDE0MDUsIDExOTA2MywgNDMyMjAsIAogICAgIDQzMzQxLCAwLCAxOTkxOSwgMCwgNjQ1MzIsIDY1MzY3LCA0MzcxMCwgMCwgMCwgMzUxMywgMCwgMTE4ODgzLCA0MzM0MiwgCiAgICAgMTE5MDY0LCA2NTUyOSwgNjUzNjQsIDEyODE5NywgMCwgNjQ4NSwgMTM5NywgMCwgNDE5ODYsIDkyNjc4LCAwLCAwLCAKLSAgICA3NDA5NywgMCwgNzQ3MSwgMTIwNzksIDY3OTk3LCAxMjY4MiwgNDMyODcsIDkyMzE3LCAwLCA5ODMxNDMsIDk4MzY5OCwgMCwgCisgICAgNzQwOTcsIDAsIDc0NzEsIDEyMDc5LCA2Nzk5NywgMTI2ODIsIDQzMjg3LCA5MjMxNywgMCwgOTgzMTQzLCA5ODM3MDcsIDAsIAogICAgIDAsIDEwOTksIDEwNDkwLCAwLCAxMDUwMSwgNjUxODEsIDc0NDYzLCAwLCA0NjQsIDQxNjI0LCA2NTI4MywgNjc2NjMsIAogICAgIDc4MjIyLCAxMzQ2LCAwLCA5MTc2MzEsIDY0NTczLCA2NDg5NywgNDIzLCAxODE4LCA2NTE0NCwgMCwgODI3MiwgMTI3ODEyLCAKLSAgICAxOTkxMSwgNDIxOCwgMzA4NywgNjQ5NjAsIDEyNzIzNCwgNDM1NjQsIDAsIDAsIDk1ODQsIDEwNDY1LCA5ODM4OTMsIAorICAgIDE5OTExLCA0MjE4LCAzMDg3LCA2NDk2MCwgMTI3MjM0LCA0MzU2NCwgMCwgMCwgOTU4NCwgMTA0NjUsIDk4MzkwMiwgCiAgICAgNzQzNTksIDEyNjI2LCA5MTA2LCAwLCA0MjY0MiwgMTIwMjMwLCA2NDc1MCwgOTM5MCwgMCwgNDE3OTcsIDAsIDAsIDI2NSwgCi0gICAgNDE3OTUsIDY0NjY2LCAxMjY1MDgsIDQzNTMwLCAyNzUyLCAwLCAwLCA5ODM0ODUsIDU5LCAwLCA5ODM1OTMsIDAsIDkyMzcxLCAKKyAgICA0MTc5NSwgNjQ2NjYsIDEyNjUwOCwgNDM1MzAsIDI3NTIsIDAsIDAsIDk4MzQ5MywgNTksIDAsIDk4MzU5MywgMCwgOTIzNzEsIAogICAgIDc3ODczLCA0MTgxMCwgMCwgNzAxMCwgMCwgNDE4MDksIDQxNDk1LCAxMTkzNjQsIDAsIDQyMjUyLCA0MjIxMywgODAwOSwgCiAgICAgMzMwNSwgNDMwMzMsIDUxMSwgOTI3MDAsIDY2MjU1LCAxMzEyNywgMTIwMDY3LCAwLCA3NDM5NywgMTIwMjM1LCA5MTc5NzcsIAogICAgIDY1OTE1LCAxNDAwLCA0MTgxMiwgMTA2ODUsIDE5NDg3MCwgMjEwMywgMTAzODcsIDQ0NTMsIDQzMjc2LCA5MTc3ODMsIApAQCAtMTk2NzUsMTcgKzE5Njk1LDE3IEBACiAgICAgMCwgNDE4NDEsIDQzMzM4LCAwLCAwLCA1NzI2LCA2NDkxNSwgNDIxNzUsIDAsIDAsIDQxNDk3LCA2NTA0NCwgMTIwMTA5LCAKICAgICAyODUxLCA0MzAxNywgOTgzNTg5LCAwLCA0MzczLCA3ODA1OCwgMCwgOTU4NywgMTc4OSwgNjY3MSwgMTI4ODQwLCAzMTAwLCAKICAgICAwLCA2NTM2MCwgMCwgOTIzNjUsIDkxNzc4OSwgNjQ5MjIsIDAsIDgxOTAsIDEyMDgzLCAwLCAwLCA2NTA2LCA2NDMxMiwgCi0gICAgNzQzNzQsIDIzNjgsIDAsIDQ0MTksIDk4MzgzOCwgMTE5MTI1LCAzNDM5LCAxODI1LCAxMTkyLCAxMjAxMDYsIDg4OTEsIAorICAgIDc0Mzc0LCAyMzY4LCAwLCA0NDE5LCA5ODM4NDcsIDExOTEyNSwgMzQzOSwgMTgyNSwgMTE5MiwgMTIwMTA2LCA4ODkxLCAKICAgICAzMDgwLCAxMjAyMjgsIDIzNDcsIDU0MzAsIDAsIDg5OTAsIDI4NDgsIDAsIDEyODIyMywgOTI1MjgsIDI0OSwgMCwgMCwgMCwgCiAgICAgMTIwNjU4LCAwLCAwLCA4ODgzLCA5MTc4MDIsIDcyOCwgNjgxNzgsIDk5NSwgMCwgMCwgNjQ4MjYsIDAsIDkxNzc5OCwgCi0gICAgMTI4MzQ4LCAwLCAxOTk0NSwgODA5MSwgNTU4LCAwLCAxMjI3MywgMTk0ODE0LCA5ODM4NDEsIDEyMTEyLCA2OTkxMiwgMCwgCisgICAgMTI4MzQ4LCAwLCAxOTk0NSwgODA5MSwgNTU4LCAwLCAxMjI3MywgMTk0ODE0LCA5ODM4NTAsIDEyMTEyLCA2OTkxMiwgMCwgCiAgICAgMCwgNzQ0MTksIDEyMzM1LCAxMjAxMDQsIDkxNzc5NSwgMzQ0MywgMzEyOSwgMCwgMjEwMiwgNjU0NDUsIDc4MjU4LCAKICAgICA2NDg5MSwgMCwgNzcyNSwgNjUxMDgsIDc4MjU1LCAwLCA4NjI0LCA2OTI0NiwgMTI0NDYsIDQzMjk1LCAwLCA0MTg5NCwgMCwgCiAgICAgNjI3NywgNDE2NzIsIDQxODkzLCAxMDAxMCwgMTI4Njc4LCAzNTQwLCAxMjg2NDksIDgzNSwgNzEzNDAsIDY5ODE2LCAKICAgICAxMTk4NjgsIDc0NDA4LCAwLCA3Mzk1OSwgNTQyNiwgNDI1OCwgMCwgMCwgNTQyNCwgMTI4MTI3LCA4MjgzLCAwLCA1NDM0LCAKICAgICA5ODM1OTAsIDAsIDE5OTE3LCAxMTQwOCwgMCwgMTE5NDcsIDAsIDE0MDQsIDMwOTUsIDExNDMyLCAxMjgzMDcsIDM0NjQsIAogICAgIDY0ODYsIDQ4MTksIDEyODIzMywgMCwgNTcwLCA4MDk1LCAzNjcyLCAxMTk4NjQsIDE0OTgsIDY3ODY2LCAwLCAxMjg1MzksIAotICAgIDQzMSwgMCwgMCwgMTI4MTgyLCAxMjgwOTYsIDY4MTY3LCA5ODM2NTQsIDEzMDk2LCAxMjg2NDMsIDAsIDQzNDA4LCA5NTE2LCAKKyAgICA0MzEsIDAsIDAsIDEyODE4MiwgMTI4MDk2LCA2ODE2NywgOTgzNjYzLCAxMzA5NiwgMTI4NjQzLCAwLCA0MzQwOCwgOTUxNiwgCiAgICAgMTI4NTM4LCA1MjY4LCA0MjIzMCwgNDIyMjAsIDAsIDQ0NTAsIDEyMDUxMSwgMTE1NDcsIDQzNDE3LCAxMjg1NDIsIDM1NiwgCiAgICAgMzQ3NywgMjI3LCAxMDQ4OCwgNjgyMDMsIDM4MiwgMTE0MTgsIDAsIDE5NTA2NiwgMCwgMCwgMCwgMCwgNjQ4NCwgMjU0MSwgCiAgICAgNjYwMzksIDAsIDc4NzE4LCA5MjcyMywgMzU0OSwgMCwgOTExMCwgMTE5NjY1LCAyNzQzLCAwLCA0MzI5MCwgMTk0ODEyLCAKQEAgLTE5Njk0LDcgKzE5NzE0LDcgQEAKICAgICAxMjg0OSwgMzk1MywgMTg5NywgMCwgNjUwOTQsIDExOTk0LCA0MzM5LCA3NDU1NiwgOTI2NTQsIDY3ODQzLCAwLCAwLCAwLCAKICAgICA2ODQ3MywgNzQxMDQsIDUyMjgsIDEyODgwNCwgNzg2OCwgNDMxODQsIDAsIDAsIDczOTg2LCA0MzQzOCwgMCwgNDMwMjIsIDAsIAogICAgIDExNjIsIDkxNzg0NywgMjY3MSwgMCwgMCwgOTI2MzIsIDkyNjMxLCAxMTg4NjUsIDQ1NTMsIDczODExLCAwLCAxOTUwMDUsIAotICAgIDAsIDAsIDE5OTIxLCA3NDMzMSwgMTE0MjQsIDE5NTAwNiwgNDU2NywgNDE4OTEsIDAsIDk4Mzc3OSwgNTUyNDksIDQ4MjAsIAorICAgIDAsIDAsIDE5OTIxLCA3NDMzMSwgMTE0MjQsIDE5NTAwNiwgNDU2NywgNDE4OTEsIDAsIDk4Mzc4OCwgNTUyNDksIDQ4MjAsIAogICAgIDY1MjM5LCAxOTQ2NjIsIDAsIDE5NDY2NSwgNDMwNDIsIDExOTIxMiwgMTM3NywgMTI4NjksIDQ4OTcsIDQyODIxLCA5MjUwLCAKICAgICAwLCA0NDM4LCA2NDM4NSwgMCwgMTc1MywgMTEzMzEsIDYxNDcsIDE5NDk0MSwgNDMyODIsIDg4MzMsIDAsIDAsIDY1MDQsIAogICAgIDc4NDA4LCAxMjY5NzksIDEwNzE5LCAwLCAxODk4LCAxNDEzLCA0MjQ0MywgMCwgODAyLCAxMjE0MSwgMCwgMTk0NjcxLCAKQEAgLTE5NzAzLDcgKzE5NzIzLDcgQEAKICAgICA3ODcxOSwgNjY1NzMsIDAsIDc4NzI0LCA3ODcxMiwgMTE3NjEsIDE5NDY1NSwgMCwgNDEwOTQsIDAsIDAsIDE5NDg5MywgMCwgCiAgICAgOTI2ODksIDYxOTYsIDY5NDUsIDkzOTY5LCAxOTQ4OTAsIDEyODE4NCwgMTIwNDkxLCAxMTgxNiwgMTk0OTQzLCA1NzMzLCAKICAgICAyOTMwLCAwLCAwLCA0MTA5OCwgMCwgNDEwOTMsIDAsIDY2NjI2LCA1ODgsIDk3NjAsIDAsIDE5NDcxNywgMTIzOCwgMjAwLCAKLSAgICA5ODMyMDUsIDE2NjAsIDczOTE2LCAwLCAxMTg5MDUsIDc0MzYyLCAwLCA5MjQ4NSwgMTk0NjUxLCAwLCA5ODM2OTcsIDMzOTQsIAorICAgIDk4MzIwNywgMTY2MCwgNzM5MTYsIDAsIDExODkwNSwgNzQzNjIsIDAsIDkyNDg1LCAxOTQ2NTEsIDAsIDk4MzcwNiwgMzM5NCwgCiAgICAgMTk0ODk0LCAxMjA2NjgsIDAsIDAsIDEyNzM1OCwgNjYyMTksIDEyNzE4MywgNDMyODQsIDE5NDY1NiwgNzgxNywgMTg0MSwgCiAgICAgMTEwNTUsIDEyMDUzMywgMTk0OTc5LCAxOTQ5ODIsIDE2NjksIDEwNzc2LCAxOTQ5ODEsIDc3MDEsIDE5NDk4MCwgMCwgCiAgICAgMTk0OTk1LCAxNzMyLCA0MDMwLCAwLCAzOTYzLCA2NjYxMSwgMTI3NTMwLCA0MTc2OCwgNjQ5MSwgMCwgNjUzMjQsIDkxNCwgCkBAIC0xOTcxMSwzMCArMTk3MzEsMzAgQEAKICAgICAxMjAwOSwgMTIzOTksIDAsIDY3ODUyLCA2NTUzNywgMCwgMTA4NDEsIDQzNDMwLCA1MzAxLCAwLCA5MjYxOCwgNTczNCwgCiAgICAgODk2MCwgMCwgOTI1MjcsIDY1MzE3LCA3Nzg4MCwgMCwgMCwgMCwgMTIzMDQsIDAsIDAsIDY1MzE1LCA5MjY3MCwgMTI4NTExLCAKICAgICAwLCAwLCAwLCAxMTk2MjEsIDkyNTI5LCA3NDUzNiwgMTI0NDcsIDY0NDg2LCAxMjczNzQsIDEyNjU2MiwgOTgzMTI5LCAwLCAKLSAgICAwLCA5ODM3OTMsIDQyNzY3LCAxMDkxNSwgMCwgMTIwMDcsIDQzNjk1LCAxMjA1MjAsIDExOTc1LCAxOTQ4NzgsIDAsIAorICAgIDAsIDk4MzgwMiwgNDI3NjcsIDEwOTE1LCAwLCAxMjAwNywgNDM2OTUsIDEyMDUyMCwgMTE5NzUsIDE5NDg3OCwgMCwgCiAgICAgOTI2MDQsIDI1NTUsIDg2MjksIDEyODY0MCwgNDMxNjgsIDQxODcyLCA0MzcwNiwgNDQ5NiwgMTk0ODc5LCAxMjgxNDgsIAogICAgIDEyMDI0MSwgMCwgMCwgMCwgMCwgNjQ3MzAsIDcwMDQxLCA2NjcxNCwgNjgyMjIsIDAsIDcwMDc2LCA2NTU5NiwgOTIzMDYsIAogICAgIDExNDE2LCA0MjgwLCA2NzY1NSwgODc2NSwgMTI3ODQsIDc3OTIsIDEzOTMsIDEyNjQ3MywgNjc4NzEsIDc0Mzg2LCAwLCAKICAgICA4MjMzLCAxMjgyMCwgMCwgNjY4MywgMTk0ODc2LCAzNDQyLCAxMjE0NCwgMjg0MSwgMTI1NDMsIDAsIDE0NzMsIDQyODIwLCAKICAgICA2NDMyOSwgMTI3ODMyLCAwLCA2ODY0MiwgNjQ4OCwgMzU3LCAxMDQ4LCA0MTEwMCwgMCwgNDExMDQsIDk0MDAzLCAzNDA2LCAKICAgICAxMDU0LCA3MTMyMCwgMTA0MCwgNjU0NTAsIDAsIDQ0MzQsIDEwNjksIDAsIDExODg2MiwgNjU3MzcsIDkxNzc2NSwgCi0gICAgMTI4NzA1LCAwLCA5ODM2ODQsIDk2OTMsIDQxOTQzLCAxMjY1NjQsIDQxOTMxLCA0MTc1OSwgMTI3NTcsIDQzNTMsIDAsIAotICAgIDEwNTksIDk3OTAsIDg5OTUsIDExOTk3NCwgOTgzNjg3LCA2NTkzNywgMCwgNDE3NjQsIDEwNjQ2LCAwLCAxMTg4MzMsIAotICAgIDkyMzcyLCAwLCA3NDgzMCwgNzg1NjksIDEyNzQzLCA5ODM2ODAsIDY0ODAsIDkxNzc2MSwgNDE3NzksIDQyNTgwLCA2NjYwMSwgCi0gICAgMTIyMDcsIDExOTYxOSwgNjMzNSwgNjY2MDIsIDExMzEyLCA2NDgwNywgMCwgMCwgNDE3NjcsIDExOTYyOSwgOTgzNzU1LCAKLSAgICA0MzAyMCwgMTI4MjcxLCAzOTU1LCA3NDI1NCwgMCwgOTgzNzQ1LCA5MTc4NjEsIDAsIDc3OTI2LCA5NzcwLCA5MjQ2LCAKKyAgICAxMjg3MDUsIDAsIDk4MzY5MywgOTY5MywgNDE5NDMsIDEyNjU2NCwgNDE5MzEsIDQxNzU5LCAxMjc1NywgNDM1MywgMCwgCisgICAgMTA1OSwgOTc5MCwgODk5NSwgMTE5OTc0LCA5ODM2OTYsIDY1OTM3LCAwLCA0MTc2NCwgMTA2NDYsIDAsIDExODgzMywgCisgICAgOTIzNzIsIDAsIDc0ODMwLCA3ODU2OSwgMTI3NDMsIDk4MzY4OSwgNjQ4MCwgOTE3NzYxLCA0MTc3OSwgNDI1ODAsIDY2NjAxLCAKKyAgICAxMjIwNywgMTE5NjE5LCA2MzM1LCA2NjYwMiwgMTEzMTIsIDY0ODA3LCAwLCAwLCA0MTc2NywgMTE5NjI5LCA5ODM3NjQsIAorICAgIDQzMDIwLCAxMjgyNzEsIDM5NTUsIDc0MjU0LCAwLCA5ODM3NTQsIDkxNzg2MSwgMCwgNzc5MjYsIDk3NzAsIDkyNDYsIAogICAgIDEyMjMwLCAwLCAwLCAwLCAxMDQ0OCwgNDE3ODMsIDQxNzg2LCAxMjcwOTMsIDEyNzk3LCAyNzU1LCA2NDU3MSwgNzg1NzgsIAogICAgIDE5NDkyNywgNDg1NywgMCwgNDQyOCwgMTI3OTQsIDczNzU1LCAxMjgwNjEsIDc4NTc0LCAwLCA3NDI4NCwgMCwgNTc0NywgCiAgICAgNzg4MjUsIDAsIDc5NzgsIDQxMDkyLCA3NDU3MSwgMCwgMTE5MjQsIDQzODEyLCA0MjE0NCwgNjUwMTUsIDAsIDU2MywgMCwgCi0gICAgOTgzNjgyLCAxMjc5OCwgMTEyNzEsIDU3LCAwLCAwLCA5MTc4NjAsIDExOTA0MywgMCwgOTQwNTEsIDQzMTM3LCA2OTQsIDAsIAorICAgIDk4MzY5MSwgMTI3OTgsIDExMjcxLCA1NywgMCwgMCwgOTE3ODYwLCAxMTkwNDMsIDAsIDk0MDUxLCA0MzEzNywgNjk0LCAwLCAKICAgICA5ODc2LCAwLCAxMTkxNjgsIDAsIDc4ODIyLCA2NDUzNywgMCwgMjc3LCA3NDM4NSwgNzIyOSwgMTI3NjEsIDAsIDAsIAogICAgIDEzMDI1LCA2NDgxMSwgODc1NywgNzg4MjQsIDEyNjQ3OCwgMTU3NCwgNzM4MSwgMCwgMjUyNSwgNDg1MiwgNTc0OSwgCiAgICAgNjg0NjUsIDEzMDI3LCA0MjgyNCwgMTIwNTc0LCAxMDM5LCA3MTUxLCAxMDE1NSwgNTc0NSwgMTg4LCA0MTg1OCwgMTE1OTIsIAogICAgIDAsIDc0MDE1LCA5MDU1LCA0MTg1MywgNDg1OCwgOTE3NzgwLCAwLCA0MzYsIDQ3NzEsIDAsIDI3ODYsIDAsIDQ4NTYsIAogICAgIDgwNTEsIDAsIDExOTYwOSwgNzEzMjcsIDk2NDQsIDAsIDAsIDAsIDE5NDkxNiwgMTIwNzMyLCA2NjcxMCwgMTE4ODM0LCAKLSAgICA5ODMzNTEsIDczOTA2LCAxMjg2ODAsIDEyNzExNCwgMCwgMTAyMzQsIDU4NDMsIDExOTM5LCAwLCA0MjE1NywgMCwgMzE1NywgCisgICAgOTgzMzU5LCA3MzkwNiwgMTI4NjgwLCAxMjcxMTQsIDAsIDEwMjM0LCA1ODQzLCAxMTkzOSwgMCwgNDIxNTcsIDAsIDMxNTcsIAogICAgIDE5NDkxOCwgNjgzOTMsIDAsIDM1MDQsIDExOTE3OCwgMCwgMTA4MjIsIDUxNDksIDY2MDI5LCAxMDIyNiwgNjUxNDIsIAotICAgIDEyODAyNSwgMzU5NCwgNDI0MjQsIDE5NDk1OSwgNDAsIDEyNjU3LCA5ODM2NTYsIDAsIDM4NiwgMCwgODgzNCwgMCwgCisgICAgMTI4MDI1LCAzNTk0LCA0MjQyNCwgMTk0OTU5LCA0MCwgMTI2NTcsIDk4MzY2NSwgMCwgMzg2LCAwLCA4ODM0LCAwLCAKICAgICAxMjgxNSwgNDM1NzQsIDAsIDczOTA3LCAwLCA3NDE5NiwgNzIyMCwgNzQ1MDQsIDAsIDc0MzE2LCAwLCA2NTMyMiwgNDMwNCwgCiAgICAgNzQ1MDMsIDgxNjAsIDc4NzA3LCAxOTQ3NTMsIDAsIDAsIDEyODUyNiwgMTM0OCwgOTIzNDksIDc4NTk3LCAxMjY1MzksIAogICAgIDEzMzAzLCAwLCA5MjM5MiwgMTk0NzU1LCA3NTk5LCAxMjc4LCA0MzYxNiwgMTMyNjksIDAsIDAsIDc0Mzg3LCA3ODE3OSwgCkBAIC0xOTc0NiwyNSArMTk3NjYsMjUgQEAKICAgICA0MjUwNywgMTk2MiwgNDMzMDUsIDc4NDc2LCA0MjUwNSwgMTE2NjAsIDAsIDIwNzIsIDkyMzEyLCA2OTk1LCA3NDE3MywgCiAgICAgNTQzNywgNzQxNzQsIDEwNjY5LCA4NzAyLCA3OTY0LCA5MjM1MiwgMCwgMTk5LCAxOTQ4NDMsIDQxMDUsIDE5NDg0NSwgCiAgICAgMTk0Njk5LCAxOTQ4NDcsIDE5NDcxMCwgMTE5ODc1LCAxMzE0OCwgNzU2MCwgNzg0NzksIDkyMjYsIDc4NDgwLCAxOTUwNzAsIAotICAgIDY0NzIsIDY1ODE0LCA3Mzk1NCwgMCwgNDcyNCwgMCwgMCwgOTE5MSwgMCwgNjQ0MzIsIDk4MzgwOCwgOTgzMjQxLCAKKyAgICA2NDcyLCA2NTgxNCwgNzM5NTQsIDAsIDQ3MjQsIDAsIDAsIDkxOTEsIDAsIDY0NDMyLCA5ODM4MTcsIDk4MzI0NywgCiAgICAgMTk1MDI0LCAxMDE5NiwgNzg4NiwgMCwgNjU4NSwgMCwgNjY4MCwgMTk1MDQyLCAwLCAxOTUwNTEsIDY2NzksIDc0NDEyLCAKLSAgICA5MjI1MSwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIDk4MzYyMiwgOTgzNjI4LCAxMjc4OTEsIDEyNzQ4NCwgMTk0ODMzLCAKKyAgICA5MjI1MSwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIDk4MzYzMSwgOTgzNjM3LCAxMjc4OTEsIDEyNzQ4NCwgMTk0ODMzLCAKICAgICAxOTQ4MzIsIDY2ODEsIDEyNzQ4MiwgMTI2OTMsIDE5NDgzNiwgNDI3MjcsIDc4MTk2LCAxMjgyNTIsIDc4MTk1LCA2NTQ0MiwgCi0gICAgMTE5NjEwLCA2OTczMywgOTk4OSwgNDMyNDgsIDY2MjQ4LCAxOTQ4MTYsIDAsIDE5NDgxOCwgMTI4ODQ1LCAxOTQ4MjAsIAorICAgIDExOTYxMCwgNjk3MzMsIDk5ODksIDQzMjQ4LCA2NjI0OCwgMTk0ODE2LCAwLCAxMTMyMSwgMTI4ODQ1LCAxOTQ4MjAsIAogICAgIDE5NDgxOSwgNTI5NywgNzA0MiwgMTMyODQsIDYxMTIsIDc5NjgsIDE5NDgyNSwgNzM5MjcsIDkyNDQ0LCAxOTQ3MzYsIAogICAgIDY1NzQ2LCAxMjc0NzYsIDY5ODg5LCA3NDM4OSwgMTI4Njk2LCA0MzQyLCA0MjgzOSwgMTk0ODMxLCAxNjc3LCAwLCAwLCAKICAgICAxMjY1OTAsIDkxNzg1NSwgMTEwOTEsIDExMDExLCAyNzE5LCAwLCAwLCAxMTk1OTUsIDEwMTYwLCAwLCAwLCA3NTg1LCAKICAgICA2NTE2OSwgMjA1MiwgNDMwOCwgOTIxNzQsIDQzMDAwLCA3NTA1LCA1NDMsIDY0OTE2LCA2NDczNiwgMCwgMCwgNjQ2NTUsIDAsIAotICAgIDExODkyMiwgMjA2NCwgMCwgNDMxNTgsIDc5MDIsIDAsIDY1MjY1LCAxOTQ2MzksIDAsIDEyNzE3MCwgMCwgMCwgMCwgMCwgCi0gICAgMTI5OTQsIDkyNzI4LCAxMDgyOCwgOTgzOTM0LCA2MjI4LCA0MzA3LCAzNDgyLCAxMjg1MjcsIDAsIDAsIDAsIDUwNiwgCi0gICAgNzQ1NzMsIDQxMTk0LCA2NTczNSwgMjA1NSwgNDMyNTUsIDQxMTk1LCAwLCA4MTY5LCA5ODM2NzEsIDg4NDEsIDAsIDUxNiwgCisgICAgMTE4OTIyLCAyMDY0LCAwLCA0MzE1OCwgNzkwMiwgMCwgNjUyNjUsIDE5NDYzOSwgMCwgMTI3MTcwLCAwLCA5ODM2MjUsIDAsIAorICAgIDAsIDEyOTk0LCA5MjcyOCwgMTA4MjgsIDk4Mzk0MywgNjIyOCwgNDMwNywgMzQ4MiwgMTI4NTI3LCAwLCAwLCAwLCA1MDYsIAorICAgIDc0NTczLCA0MTE5NCwgNjU3MzUsIDIwNTUsIDQzMjU1LCA0MTE5NSwgMCwgODE2OSwgOTgzNjgwLCA4ODQxLCAwLCA1MTYsIAogICAgIDkzOTc0LCAyMDYzLCAxMTkwNTEsIDM0LCAxMjg4NTAsIDEyMDE4NiwgMTE1MDQsIDE2MTIsIDc0MzMzLCAxMjAxODIsIAogICAgIDExODI3LCA3NDMwOCwgMTIwMDEsIDEyMDE3OCwgMTAyNDIsIDY0NTY0LCAxMjAxNzksIDY3OTg2LCA2NTg0LCA3NzQ5LCAKICAgICAxMTAzNywgMCwgMTc1OCwgMTI3MDkyLCAxMDY2NywgMTA1NjAsIDEyMDE5NywgOTI1OTMsIDE5MzUsIDExNTE3LCAxMjAxOTMsIAogICAgIDEyMDE5NiwgMTIwMTk1LCAxOTMxLCAxMjAxODksIDc0ODM5LCAxMjAxOTEsIDEyMTcsIDY0NzAyLCAxMjY0MywgODI1LCAKICAgICAxMjc4MzgsIDE5NDkwNSwgMTIyOTQsIDkyNDI4LCA3ODgzNCwgOTEzOCwgNzg4MzEsIDc4ODMzLCAxMjYzMSwgNzg4MjksIAogICAgIDExMDgwLCA3NDU1NCwgNjQwMDAsIDU1OTEsIDEyMzksIDAsIDExMzEzLCAwLCAzNDAzLCAwLCAwLCA2NDM2NCwgOTIyNjksIAotICAgIDAsIDc0NTgyLCA4OTk4LCAxMjk4OCwgMCwgOTE1MiwgOTgzODQwLCAwLCAxMjY0ODQsIDY3NTg5LCA0MTg1MCwgNjQyOTAsIAorICAgIDAsIDc0NTgyLCA4OTk4LCAxMjk4OCwgMCwgOTE1MiwgOTgzODQ5LCAwLCAxMjY0ODQsIDY3NTg5LCA0MTg1MCwgNjQyOTAsIAogICAgIDM0MzMsIDkyMzkzLCAxMjYxNSwgMTU5NCwgNDIxOTIsIDY5MTQsIDY3NjAzLCAwLCAxMTk1NjksIDc0NTY1LCA0MTM1MywgCiAgICAgNjc2MDIsIDY3NjExLCA0MzM3LCAwLCAxMjcyOTYsIDkxOCwgNjUwMzUsIDQxMzUxLCA3NjgxLCAxOTQ5MDAsIDQyNTc3LCAKICAgICA0MTM5MywgMTI2NjgsIDE5NDkwNCwgMjQ3NywgMTI3Mjg1LCAwLCAxMjczMDEsIDAsIDY3NjA0LCAxOTQ4ODAsIDEyNzIzNSwgCkBAIC0xOTc3NiwxNCArMTk3OTYsMTQgQEAKICAgICA3Mzc5NiwgMCwgMTE5MjI4LCAxMjAzNSwgMCwgMjgxOCwgMCwgNzQ0MTEsIDczNzkzLCAwLCA0MTcyLCAwLCAwLCA4MzczLCAKICAgICAxMDg3MywgMTIxOTcsIDAsIDAsIDkyMjY1LCA2OTcwNiwgMCwgNzgyMTAsIDAsIDEyODExMCwgMTk0ODY1LCAxMjY5ODIsIAogICAgIDc0NTYzLCA2NDgyOCwgMTE0MTksIDE5NDg2OCwgNzY2LCAxMjU3LCAwLCAxMTg4NDUsIDExMzgxLCAzMjY1LCA2NjYxNywgCi0gICAgMzI3NCwgMTI3MzY1LCAxMjY1MjMsIDk0MDQyLCA5ODM5NDEsIDc0NTIyLCA0MTk4OSwgMCwgMCwgMTI4Nzk4LCAzMjYzLCAwLCAKKyAgICAzMjc0LCAxMjczNjUsIDEyNjUyMywgOTQwNDIsIDk4Mzk1MCwgNzQ1MjIsIDQxOTg5LCAwLCAwLCAxMjg3OTgsIDMyNjMsIDAsIAogICAgIDY1NjcyLCAwLCAzMjcwLCA2NDUzOSwgMTE0ODksIDAsIDAsIDAsIDAsIDk1MDUsIDY1NTE4LCAxOTQ3NzYsIDc1NiwgCiAgICAgMTk0NjA1LCAwLCAwLCAwLCA3MjYxLCAwLCAxODYsIDAsIDExOTE1NiwgNTc3MCwgMTMxNzksIDY1ODMwLCAxMjYxMiwgCi0gICAgMTI5NDksIDY0ODU2LCAxMjgwMCwgOTgzODkyLCA3NDIwMywgNjQ3MTgsIDExNTA3LCAwLCA5MjQzNCwgMTE4OTI5LCAwLCAKKyAgICAxMjk0OSwgNjQ4NTYsIDEyODAwLCA5ODM5MDEsIDc0MjAzLCA2NDcxOCwgMTE1MDcsIDAsIDkyNDM0LCAxMTg5MjksIDAsIAogICAgIDExNTc4LCAwLCAxMTkyOTYsIDAsIDAsIDAsIDAsIDc0NTY4LCA5MjU0LCAwLCAxNzk0LCAxMjAyMTcsIDY0NTIxLCA1NjI0LCAKICAgICAxMjAyMjAsIDEyMDIyMSwgMTE5OTU4LCAxMjAyMjMsIDM2MTcsIDY2NjM2LCA2NDg4NiwgOTQwNjEsIDEyMDIxMiwgCiAgICAgMTIwMjEzLCAxMjAyMTQsIDE4NzIsIDY2NTA4LCAxMjA0NjcsIDQxMDc5LCAxMDc0OCwgNTUwMiwgMTE5MzMwLCA0NDUyLCAwLCAKLSAgICA5ODM3NjIsIDkyNTI2LCA0NTExLCAwLCA5ODM4NjgsIDY0Njc4LCAxMTQyNSwgMCwgNDMyNDUsIDEyMzEsIDE5NDc4MywgCisgICAgOTgzNzcxLCA5MjUyNiwgNDUxMSwgMCwgOTgzODc3LCA2NDY3OCwgMTE0MjUsIDAsIDQzMjQ1LCAxMjMxLCAxOTQ3ODMsIAogICAgIDY5OTAzLCAwLCA5MDAzLCA4MTkyLCAwLCA1MzA1LCA5NjUzLCAxMDYxNiwgODY5NCwgOTU0NiwgMCwgMCwgMTIwNDc4LCAKICAgICAxMjAyMDAsIDY1MjA1LCAxMjAyMDIsIDY0MDYzLCA5ODc4LCA3NDc4MCwgMTE5NjI2LCA3ODIwMiwgNjQwNTgsIDg3OTksIAogICAgIDQyMTMxLCAwLCA2NDA2MiwgMTAyOCwgNjQwNjAsIDY0MDU5LCA4MzcsIDEwNTY3LCAwLCA0MzEwMywgMCwgMTIwNzU0LCAKQEAgLTE5NzkyLDI2ICsxOTgxMiwyNiBAQAogICAgIDY0MDMyLCA0MjczNSwgNjQwMzgsIDY0MDM3LCA2NDAzNiwgNjQwMzUsIDQyOTEsIDE5NDkyOCwgNjQwMTUsIDY0MDE0LCAKICAgICA2NDY4MSwgMTk0OTMwLCAwLCA3ODE0NSwgMCwgNDMwOTAsIDAsIDM0NzYsIDg5NzMsIDY0MDEyLCA0MjQ3MywgNjQwMTAsIAogICAgIDY0MDA4LCA2NDAwNywgMjAwMywgNzcwNiwgNjQ1MTcsIDc4MTUzLCAyNTM4LCA2NDAwOSwgMjA0LCAwLCA0ODAyLCA0MTExLCAKLSAgICA4MjM5LCA5MDk4LCA0ODA1LCA2NDAwMSwgNjQwNTcsIDc4ODUsIDcyNDcsIDY0MDU0LCA5ODMyNTgsIDAsIDQ3NjcsIDkzNDMsIAorICAgIDgyMzksIDkwOTgsIDQ4MDUsIDY0MDAxLCA2NDA1NywgNzg4NSwgNzI0NywgNjQwNTQsIDk4MzI2NiwgMCwgNDc2NywgOTM0MywgCiAgICAgNjQwNDksIDY0MDQ4LCAxMjAwMzQsIDExMzMsIDY0MDUzLCA2NDA1MiwgNDM0NTMsIDY0MDUwLCA0MTM0MCwgMTE4OTc1LCAKICAgICAxOTQ4MzUsIDEwMDA1LCAxMjMyOSwgNDEzMzMsIDAsIDg0ODksIDE5NDIsIDAsIDE5NDgzNCwgNDI1MjAsIDEyODI0OSwgMCwgCiAgICAgMCwgMTA3NjAsIDY0MDIzLCA2NDAyMiwgNjQwMjEsIDY1ODIsIDQzNjcwLCAwLCA2NDAyNSwgOTE2NywgNDIxNTEsIDc4MjQ0LCAKLSAgICA5ODMyMjYsIDIwMjYsIDY0MDE5LCA2NDAxOCwgNjQwMTcsIDY0MDE2LCAxMjc2OCwgMCwgNzU4MiwgNzgyNTIsIDc4MjQ4LCAKKyAgICA5ODMyMzIsIDIwMjYsIDY0MDE5LCA2NDAxOCwgNjQwMTcsIDY0MDE2LCAxMjc2OCwgMCwgNzU4MiwgNzgyNTIsIDc4MjQ4LCAKICAgICA3NzkxNCwgNzgyNDYsIDc4MjQ3LCAwLCA3NzkxNSwgNzg3NjYsIDY3ODgsIDEzMDk0LCA3NzkyMCwgNzUzMiwgNDE0MTQsIAogICAgIDc4NTIwLCAzMTc5LCA3ODUxOCwgNjQ3NjksIDc4NTE0LCA3ODUxNywgMTE0NjEsIDc0NDU0LCAxMDc1MSwgOTA1MSwgCi0gICAgMTIwNzIwLCA2NzA4LCAxMDUzNSwgMCwgNjgyMTgsIDU1Mjc0LCAyMDA4LCA2NDAzMSwgNjQwMzAsIDI5NCwgNDE4NzQsIDAsIAotICAgIDEyNjk5MSwgNjU5MjksIDAsIDAsIDAsIDAsIDY0MDI4LCA4MTQ2LCA2NDAyNiwgNDE3ODgsIDE5NDg0NCwgMCwgNDM1MSwgCi0gICAgNjM0MywgNDMyNDcsIDExOTg4OCwgMCwgMTE5ODg2LCAxMTk4OTEsIDExOTg5MiwgMTE5ODg5LCAxMTQzMywgMTE5ODk1LCAKLSAgICAxMTk4OTYsIDAsIDc4MDEsIDY1NTc4LCAxOTQ4MzksIDEyOTE1LCA0Mzk2OCwgMzI5NywgOTY5OSwgMTk0OTU1LCAxMTM1LCAKLSAgICAwLCAwLCAxMjg1MjUsIDE5OTUsIDY3MjIsIDk4MzkxNiwgMCwgMjU1MiwgNDE1NDYsIDYwLCA2ODM5NCwgODY0OSwgNDE1NDksIAotICAgIDc4NDk2LCA5ODMzMTksIDAsIDY2ODIsIDAsIDc4Njc5LCA2NDcxMCwgNDE1NDcsIDk4MzYyMSwgMjAxMywgMTI4MjkxLCAKLSAgICA3ODUzMCwgNzg1MzIsIDc4NTI4LCA3ODUyOSwgMTI4MzIsIDc4NDkzLCA4MDgxLCA4MzYyLCAzNTM3LCAxMTk5MDgsIDkxMzcsIAotICAgIDcxNTUsIDg5OTksIDAsIDc4NTMzLCAzNDY2LCAwLCAwLCAxOTk2LCAwLCAzNDUzLCA2MjgyLCAwLCAyMDAyLCAyMDAwLCAKLSAgICAxMjAxNzUsIDUzNywgMCwgNDE3OSwgNjUxMTksIDE5OTgsIDAsIDE4NDIsIDAsIDkyNjc0LCA5NjI4LCA2ODQ0NiwgMTIwODEsIAotICAgIDk4MjYsIDY0NTAyLCAxNzY3LCAwLCAwLCAwLCAxMjAyMDEsIDk4MzYzNywgMCwgMCwgMzA1OSwgNDQwMjQsIDEyMDIwNCwgCi0gICAgMTE5OTUzLCA5MjY5MywgMCwgMCwgOTI0NTIsIDQxMDAsIDkyMCwgMTgxMSwgMTM1NSwgMCwgMCwgMzU5MiwgMTAwNzgsIDAsIAotICAgIDAsIDAsIDg1OTIsIDY1ODcwLCA2ODE2NCwgMTI4NzkyLCAxMDc0MiwgMCwgNDI5MTgsIDE5OTQsIDkyODEsIDMyOTYsIAotICAgIDEyODY1LCAxOTk3LCAxODk1LCAKKyAgICAxMjA3MjAsIDY3MDgsIDEwNTM1LCA5ODM2MjcsIDY4MjE4LCA1NTI3NCwgMjAwOCwgNjQwMzEsIDY0MDMwLCAyOTQsIAorICAgIDQxODc0LCAwLCAxMjY5OTEsIDY1OTI5LCAwLCAwLCAwLCAwLCA2NDAyOCwgODE0NiwgNjQwMjYsIDQxNzg4LCAxOTQ4NDQsIAorICAgIDAsIDQzNTEsIDYzNDMsIDQzMjQ3LCAxMTk4ODgsIDAsIDExOTg4NiwgMTE5ODkxLCAxMTk4OTIsIDExOTg4OSwgMTE0MzMsIAorICAgIDExOTg5NSwgMTE5ODk2LCAwLCA3ODAxLCA2NTU3OCwgMTk0ODM5LCAxMjkxNSwgNDM5NjgsIDMyOTcsIDk2OTksIDE5NDk1NSwgCisgICAgMTEzNSwgMCwgMCwgMTI4NTI1LCAxOTk1LCA2NzIyLCA5ODM5MjUsIDAsIDI1NTIsIDQxNTQ2LCA2MCwgNjgzOTQsIDg2NDksIAorICAgIDQxNTQ5LCA3ODQ5NiwgOTgzMzI3LCAwLCA2NjgyLCAwLCA3ODY3OSwgNjQ3MTAsIDQxNTQ3LCA5ODM2MzAsIDIwMTMsIAorICAgIDEyODI5MSwgNzg1MzAsIDc4NTMyLCA3ODUyOCwgNzg1MjksIDEyODMyLCA3ODQ5MywgODA4MSwgODM2MiwgMzUzNywgCisgICAgMTE5OTA4LCA5MTM3LCA3MTU1LCA4OTk5LCAwLCA3ODUzMywgMzQ2NiwgMCwgMCwgMTk5NiwgMCwgMzQ1MywgNjI4MiwgMCwgCisgICAgMjAwMiwgMjAwMCwgMTIwMTc1LCA1MzcsIDAsIDQxNzksIDY1MTE5LCAxOTk4LCAwLCAxODQyLCAwLCA5MjY3NCwgOTYyOCwgCisgICAgNjg0NDYsIDEyMDgxLCA5ODI2LCA2NDUwMiwgMTc2NywgMCwgMCwgMCwgMTIwMjAxLCA5ODM2NDYsIDAsIDAsIDMwNTksIAorICAgIDQ0MDI0LCAxMjAyMDQsIDExOTk1MywgOTI2OTMsIDAsIDAsIDkyNDUyLCA0MTAwLCA5MjAsIDE4MTEsIDEzNTUsIDAsIDAsIAorICAgIDM1OTIsIDEwMDc4LCAwLCAwLCAwLCA4NTkyLCA2NTg3MCwgNjgxNjQsIDEyODc5MiwgMTA3NDIsIDAsIDQyOTE4LCAxOTk0LCAKKyAgICA5MjgxLCAzMjk2LCAxMjg2NSwgMTk5NywgMTg5NSwgCiB9OwogCiAjZGVmaW5lIGNvZGVfbWFnaWMgNDcKQEAgLTE5ODE5LDcgKzE5ODM5LDcgQEAKICNkZWZpbmUgY29kZV9wb2x5IDMyNzcxCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpYXNlc19zdGFydCA9IDB4ZjAwMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFsaWFzZXNfZW5kID0gMHhmMDFjMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpYXNlc19lbmQgPSAweGYwMWM5Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lX2FsaWFzZXNbXSA9IHsKICAgICAweDAwMDAsCiAgICAgMHgwMDAwLApAQCAtMTk5ODIsNiArMjAwMDIsOCBAQAogICAgIDB4MDFBMiwKICAgICAweDAxQTMsCiAgICAgMHgwMzRGLAorICAgIDB4MDYxQywKKyAgICAweDA3MDksCiAgICAgMHgwQ0RFLAogICAgIDB4MEU5RCwKICAgICAweDBFOUYsCkBAIC0yMDAwNSw2ICsyMDAyNywxMCBAQAogICAgIDB4MjAyRiwKICAgICAweDIwNUYsCiAgICAgMHgyMDYwLAorICAgIDB4MjA2NiwKKyAgICAweDIwNjcsCisgICAgMHgyMDY4LAorICAgIDB4MjA2OSwKICAgICAweDIxMTgsCiAgICAgMHgyNDQ4LAogICAgIDB4MjQ0OSwKQEAgLTIwMDI5LDYgKzIwMDU1LDggQEAKICAgICAweEZFRkYsCiAgICAgMHhGRUZGLAogICAgIDB4RkVGRiwKKyAgICAweDEyMkQ0LAorICAgIDB4MTIyRDUsCiAgICAgMHgxRDBDNSwKICAgICAweEUwMTAwLAogICAgIDB4RTAxMDEsCkBAIC0yMDI3OCw3ICsyMDMwNiw3IEBACiB9IG5hbWVkX3NlcXVlbmNlOwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVkX3NlcXVlbmNlc19zdGFydCA9IDB4ZjAyMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVkX3NlcXVlbmNlc19lbmQgPSAweGYwM2E1Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lZF9zZXF1ZW5jZXNfZW5kID0gMHhmMDNhZTsKIHN0YXRpYyBjb25zdCBuYW1lZF9zZXF1ZW5jZSBuYW1lZF9zZXF1ZW5jZXNbXSA9IHsKICAgICB7MiwgezB4MDEwMCwgMHgwMzAwfX0sCiAgICAgezIsIHsweDAxMDEsIDB4MDMwMH19LApAQCAtMjAzNDksNiArMjAzNzcsMTUgQEAKICAgICB7MiwgezB4MDI1OSwgMHgwMzAxfX0sCiAgICAgezIsIHsweDAyNUEsIDB4MDMwMH19LAogICAgIHsyLCB7MHgwMjVBLCAweDAzMDF9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNjI3fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDY0OH19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2NDl9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkM2fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZDN319LAorICAgIHsyLCB7MHgwNjI2LCAweDA2Qzh9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkQwfX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZENX19LAorICAgIHsyLCB7MHgwNjQ2LCAweDA2QTl9fSwKICAgICB7MywgezB4MDk5NSwgMHgwOUNELCAweDA5Qjd9fSwKICAgICB7MiwgezB4MEI5NSwgMHgwQkNEfX0sCiAgICAgezIsIHsweDBCOTksIDB4MEJDRH19LApkaWZmIC0tZ2l0IGEvTW9kdWxlcy94eGxpbWl0ZWQuYyBiL01vZHVsZXMveHhsaW1pdGVkLmMKaW5kZXggNjYxYjZlMi4uZWVjZGFiOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy94eGxpbWl0ZWQuYworKysgYi9Nb2R1bGVzL3h4bGltaXRlZC5jCkBAIC00NCw3ICs0NCw3IEBACiBYeG9fZGVhbGxvYyhYeG9PYmplY3QgKnNlbGYpCiB7CiAgICAgUHlfWERFQ1JFRihzZWxmLT54X2F0dHIpOwotICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICAoKGZyZWVmdW5jKVB5VHlwZV9HZXRTbG90KFB5X1RZUEUoc2VsZiksIFB5X3RwX2ZyZWUpKShzZWxmKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvemlwaW1wb3J0LmMgYi9Nb2R1bGVzL3ppcGltcG9ydC5jCmluZGV4IDJmZWIyYTguLjhmZTkxOTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemlwaW1wb3J0LmMKKysrIGIvTW9kdWxlcy96aXBpbXBvcnQuYwpAQCAtMTQsNiArMTQsMTAgQEAKICAgICBpbnQgdHlwZTsKIH07CiAKKyNpZmRlZiBBTFRTRVAKK19QeV9JREVOVElGSUVSKHJlcGxhY2UpOworI2VuZGlmCisKIC8qIHppcF9zZWFyY2hvcmRlciBkZWZpbmVzIGhvdyB3ZSBzZWFyY2ggZm9yIGEgbW9kdWxlIGluIHRoZSBaaXAKICAgIGFyY2hpdmU6IHdlIGZpcnN0IHNlYXJjaCBmb3IgYSBwYWNrYWdlIF9faW5pdF9fLCB0aGVuIGZvcgogICAgbm9uLXBhY2thZ2UgLnB5YywgLnB5byBhbmQgLnB5IGVudHJpZXMuIFRoZSAucHljIGFuZCAucHlvIGVudHJpZXMKQEAgLTY2LDkgKzcwLDYgQEAKICAgICBQeU9iamVjdCAqcGF0aCwgKmZpbGVzLCAqdG1wOwogICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBsZW4sIGZsZW47Ci0jaWZkZWYgQUxUU0VQCi0gICAgX1B5X0lERU5USUZJRVIocmVwbGFjZSk7Ci0jZW5kaWYKIAogICAgIGlmICghX1B5QXJnX05vS2V5d29yZHMoInppcGltcG9ydGVyKCkiLCBrd2RzKSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTE3LDYgKzExOCw4IEBACiAgICAgICAgIGlmIChmbGVuID09IC0xKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX1N1YnN0cmluZyhwYXRoLCAwLCBmbGVuKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoWmlwSW1wb3J0RXJyb3IsICJub3QgYSBaaXAgZmlsZSIpOwpAQCAtNDY5LDEwICs0NzIsMTMgQEAKICAgICBpZiAoaXNwYWNrYWdlKSB7CiAgICAgICAgIC8qIGFkZCBfX3BhdGhfXyB0byB0aGUgbW9kdWxlICpiZWZvcmUqIHRoZSBjb2RlIGdldHMKICAgICAgICAgICAgZXhlY3V0ZWQgKi8KLSAgICAgICAgUHlPYmplY3QgKnBrZ3BhdGgsICpmdWxscGF0aDsKLSAgICAgICAgUHlPYmplY3QgKnN1Ym5hbWUgPSBnZXRfc3VibmFtZShmdWxsbmFtZSk7CisgICAgICAgIFB5T2JqZWN0ICpwa2dwYXRoLCAqZnVsbHBhdGgsICpzdWJuYW1lOwogICAgICAgICBpbnQgZXJyOwogCisgICAgICAgIHN1Ym5hbWUgPSBnZXRfc3VibmFtZShmdWxsbmFtZSk7CisgICAgICAgIGlmIChzdWJuYW1lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCiAgICAgICAgIGZ1bGxwYXRoID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVVJWMlVSVVIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+YXJjaGl2ZSwgU0VQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5wcmVmaXgsIHN1Ym5hbWUpOwpAQCAtNTU0LDkgKzU2MCw2IEBACiB7CiAgICAgWmlwSW1wb3J0ZXIgKnNlbGYgPSAoWmlwSW1wb3J0ZXIgKilvYmo7CiAgICAgUHlPYmplY3QgKnBhdGgsICprZXk7Ci0jaWZkZWYgQUxUU0VQCi0gICAgX1B5X0lERU5USUZJRVIocmVwbGFjZSk7Ci0jZW5kaWYKICAgICBQeU9iamVjdCAqdG9jX2VudHJ5OwogICAgIFB5X3NzaXplX3QgcGF0aF9zdGFydCwgcGF0aF9sZW4sIGxlbjsKIApAQCAtODYyLDYgKzg2NSw3IEBACiAgICAgbG9uZyBsLCBjb3VudDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgY2hhciBuYW1lW01BWFBBVEhMRU4gKyA1XTsKKyAgICBjaGFyIGR1bW15WzhdOyAvKiBCdWZmZXIgdG8gcmVhZCB1bnVzZWQgaGVhZGVyIHZhbHVlcyBpbnRvICovCiAgICAgUHlPYmplY3QgKm5hbWVvYmogPSBOVUxMOwogICAgIGNoYXIgKnAsIGVuZG9mX2NlbnRyYWxfZGlyWzIyXTsKICAgICBQeV9zc2l6ZV90IGFyY19vZmZzZXQ7ICAvKiBBYnNvbHV0ZSBvZmZzZXQgdG8gc3RhcnQgb2YgdGhlIHppcC1hcmNoaXZlLiAqLwpAQCAtODY5LDcgKzg3Myw3IEBACiAgICAgY29uc3QgY2hhciAqY2hhcnNldDsKICAgICBpbnQgYm9vdHN0cmFwOwogCi0gICAgZnAgPSBfUHlfZm9wZW4oYXJjaGl2ZSwgInJiIik7CisgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGFyY2hpdmUsICJyYiIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwgImNhbid0IG9wZW4gWmlwIGZpbGU6ICVSIiwgYXJjaGl2ZSk7CkBAIC05MDUsMTcgKzkwOSwyNSBAQAogCiAgICAgLyogU3RhcnQgb2YgQ2VudHJhbCBEaXJlY3RvcnkgKi8KICAgICBjb3VudCA9IDA7CisgICAgaWYgKGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0LCAwKSA9PSAtMSkKKyAgICAgICAgZ290byBmaWxlX2Vycm9yOwogICAgIGZvciAoOzspIHsKICAgICAgICAgUHlPYmplY3QgKnQ7CiAgICAgICAgIGludCBlcnI7CiAKLSAgICAgICAgaWYgKGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0LCAwKSA9PSAtMSkgIC8qIFN0YXJ0IG9mIGZpbGUgaGVhZGVyICovCi0gICAgICAgICAgICBnb3RvIGZzZWVrX2Vycm9yOworICAgICAgICAvKiBTdGFydCBvZiBmaWxlIGhlYWRlciAqLwogICAgICAgICBsID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOworICAgICAgICBpZiAobCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgaWYgKGwgIT0gMHgwMjAxNEI1MCkKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogQmFkOiBDZW50cmFsIERpciBGaWxlIEhlYWRlciAqLwotICAgICAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQgKyA4LCAwKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZnNlZWtfZXJyb3I7CisKKyAgICAgICAgLyogT24gV2luZG93cywgY2FsbGluZyBmc2VlayB0byBza2lwIG92ZXIgdGhlIGZpZWxkcyB3ZSBkb24ndCB1c2UgaXMKKyAgICAgICAgc2xvd2VyIHRoYW4gcmVhZGluZyB0aGUgZGF0YSBpbnRvIGEgZHVtbXkgYnVmZmVyIGJlY2F1c2UgZnNlZWsgZmx1c2hlcworICAgICAgICBzdGRpbydzIGludGVybmFsIGJ1ZmZlcnMuIFNlZSBpc3N1ZSAjODc0NS4gKi8KKyAgICAgICAgaWYgKGZyZWFkKGR1bW15LCAxLCA0LCBmcCkgIT0gNCkgLyogU2tpcCB1bnVzZWQgZmllbGRzLCBhdm9pZCBmc2VlayAqLworICAgICAgICAgICAgZ290byBmaWxlX2Vycm9yOworCiAgICAgICAgIGZsYWdzID0gKHVuc2lnbmVkIHNob3J0KVB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7CiAgICAgICAgIGNvbXByZXNzID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKICAgICAgICAgdGltZSA9IFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7CkBAIC05MjQsMTIgKzkzNiwxNSBAQAogICAgICAgICBkYXRhX3NpemUgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CiAgICAgICAgIGZpbGVfc2l6ZSA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKICAgICAgICAgbmFtZV9zaXplID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKLSAgICAgICAgaGVhZGVyX3NpemUgPSA0NiArIG5hbWVfc2l6ZSArCisgICAgICAgIGhlYWRlcl9zaXplID0gbmFtZV9zaXplICsKICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKSArCiAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7Ci0gICAgICAgIGlmIChmc2VlayhmcCwgaGVhZGVyX29mZnNldCArIDQyLCAwKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZnNlZWtfZXJyb3I7CisgICAgICAgIGlmIChmcmVhZChkdW1teSwgMSwgOCwgZnApICE9IDgpIC8qIFNraXAgdW51c2VkIGZpZWxkcywgYXZvaWQgZnNlZWsgKi8KKyAgICAgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKICAgICAgICAgZmlsZV9vZmZzZXQgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCkgKyBhcmNfb2Zmc2V0OworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgaWYgKG5hbWVfc2l6ZSA+IE1BWFBBVEhMRU4pCiAgICAgICAgICAgICBuYW1lX3NpemUgPSBNQVhQQVRITEVOOwogCkBAIC05NDEsNyArOTU2LDkgQEAKICAgICAgICAgICAgIHArKzsKICAgICAgICAgfQogICAgICAgICAqcCA9IDA7ICAgICAgICAgLyogQWRkIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSAqLwotICAgICAgICBoZWFkZXJfb2Zmc2V0ICs9IGhlYWRlcl9zaXplOworICAgICAgICBmb3IgKDsgaSA8IGhlYWRlcl9zaXplOyBpKyspIC8qIFNraXAgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlciAqLworICAgICAgICAgICAgaWYoZ2V0YyhmcCkgPT0gRU9GKSAvKiBBdm9pZCBmc2VlayAqLworICAgICAgICAgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKIAogICAgICAgICBib290c3RyYXAgPSAwOwogICAgICAgICBpZiAoZmxhZ3MgJiAweDA4MDApCkBAIC05ODgsNyArMTAwNSw3IEBACiAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyB6aXBpbXBvcnQ6IGZvdW5kICVsZCBuYW1lcyBpbiAlUlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LCBhcmNoaXZlKTsKICAgICByZXR1cm4gZmlsZXM7Ci1mc2Vla19lcnJvcjoKK2ZpbGVfZXJyb3I6CiAgICAgZmNsb3NlKGZwKTsKICAgICBQeV9YREVDUkVGKGZpbGVzKTsKICAgICBQeV9YREVDUkVGKG5hbWVvYmopOwpAQCAtMTA1NSw3ICsxMDcyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgZnAgPSBfUHlfZm9wZW4oYXJjaGl2ZSwgInJiIik7CisgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGFyY2hpdmUsICJyYiIpOwogICAgIGlmICghZnApIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0lPRXJyb3IsCkBAIC0xMDczLDkgKzEwOTAsMTAgQEAKICAgICBsID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOwogICAgIGlmIChsICE9IDB4MDQwMzRCNTApIHsKICAgICAgICAgLyogQmFkOiBMb2NhbCBGaWxlIEhlYWRlciAqLwotICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiYmFkIGxvY2FsIGZpbGUgaGVhZGVyIGluICVVIiwKLSAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmUpOworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBsb2NhbCBmaWxlIGhlYWRlciBpbiAlVSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSk7CiAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEwODcsNiArMTEwNSwxMCBAQAogCiAgICAgbCA9IDMwICsgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKSArCiAgICAgICAgIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7ICAgICAgICAvKiBsb2NhbCBoZWFkZXIgc2l6ZSAqLworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBmaWxlX29mZnNldCArPSBsOyAgICAgICAgICAgLyogU3RhcnQgb2YgZmlsZSBkYXRhICovCiAKICAgICBieXRlc19zaXplID0gY29tcHJlc3MgPT0gMCA/IGRhdGFfc2l6ZSA6IGRhdGFfc2l6ZSArIDE7CkBAIC0xMjQ5LDcgKzEyNzEsNyBAQAogfQogCiAvKiBHaXZlbiBhIHN0cmluZyBidWZmZXIgY29udGFpbmluZyBQeXRob24gc291cmNlIGNvZGUsIGNvbXBpbGUgaXQKLSAgIHJldHVybiBhbmQgcmV0dXJuIGEgY29kZSBvYmplY3QgYXMgYSBuZXcgcmVmZXJlbmNlLiAqLworICAgYW5kIHJldHVybiBhIGNvZGUgb2JqZWN0IGFzIGEgbmV3IHJlZmVyZW5jZS4gKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBjb21waWxlX3NvdXJjZShQeU9iamVjdCAqcGF0aG5hbWUsIFB5T2JqZWN0ICpzb3VyY2UpCiB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nIGIvTW9kdWxlcy96bGliL0NoYW5nZUxvZwppbmRleCBmMzEwYmIwLi5mMjJhYWJhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nCisrKyBiL01vZHVsZXMvemxpYi9DaGFuZ2VMb2cKQEAgLTEsMTIgKzEsMjc2IEBACiAKICAgICAgICAgICAgICAgICBDaGFuZ2VMb2cgZmlsZSBmb3IgemxpYgogCitDaGFuZ2VzIGluIDEuMi44ICgyOCBBcHIgMjAxMykKKy0gVXBkYXRlIGNvbnRyaWIvbWluaXppcC9pb3dpbjMyLmMgZm9yIFdpbmRvd3MgUlQgW1ZvbGxhbnRdCistIERvIG5vdCBmb3JjZSBaX0NPTlNUIGZvciBDKysKKy0gQ2xlYW4gdXAgY29udHJpYi92c3R1ZGlvIFtSb6ddCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gemxpYi5oCistIEZpeCBtaXhlZCBsaW5lIGVuZGluZ3MgaW4gY29udHJpYi92c3R1ZGlvCisKK0NoYW5nZXMgaW4gMS4yLjcuMyAoMTMgQXByIDIwMTMpCistIEZpeCB2ZXJzaW9uIG51bWJlcnMgYW5kIERMTCBuYW1lcyBpbiBjb250cmliL3ZzdHVkaW8vKi96bGliLnJjCisKK0NoYW5nZXMgaW4gMS4yLjcuMiAoMTMgQXByIDIwMTMpCistIENoYW5nZSBjaGVjayBmb3IgYSBmb3VyLWJ5dGUgdHlwZSBiYWNrIHRvIGhleGFkZWNpbWFsCistIEZpeCB0eXBvIGluIHdpbjMyL01ha2VmaWxlLm1zYworLSBBZGQgY2FzdHMgaW4gZ3p3cml0ZS5jIGZvciBwb2ludGVyIGRpZmZlcmVuY2VzCisKK0NoYW5nZXMgaW4gMS4yLjcuMSAoMjQgTWFyIDIwMTMpCistIFJlcGxhY2UgdXNlIG9mIHVuc2FmZSBzdHJpbmcgZnVuY3Rpb25zIHdpdGggc25wcmludGYgaWYgYXZhaWxhYmxlCistIEF2b2lkIGluY2x1ZGluZyBzdGRkZWYuaCBvbiBXaW5kb3dzIGZvciBaX1NPTE8gY29tcGlsZSBbTmllc3NpbmtdCistIEZpeCBnemdldGMgdW5kZWZpbmUgd2hlbiBaX1BSRUZJWCBzZXQgW1R1cmtdCistIEVsaW1pbmF0ZSB1c2Ugb2YgbWt0ZW1wIGluIE1ha2VmaWxlIChub3QgYWx3YXlzIGF2YWlsYWJsZSkKKy0gRml4IGJ1ZyBpbiAnRicgbW9kZSBmb3IgZ3pvcGVuKCkKKy0gQWRkIGluZmxhdGVHZXREaWN0aW9uYXJ5KCkgZnVuY3Rpb24KKy0gQ29ycmVjdCBjb21tZW50IGluIGRlZmxhdGUuaAorLSBVc2UgX3NucHJpbnRmIGZvciBzbnByaW50ZiBpbiBNaWNyb3NvZnQgQworLSBPbiBEYXJ3aW4sIG9ubHkgdXNlIC91c3IvYmluL2xpYnRvb2wgaWYgbGlidG9vbCBpcyBub3QgQXBwbGUKKy0gRGVsZXRlICItLXZlcnNpb24iIGZpbGUgaWYgY3JlYXRlZCBieSAiYXIgLS12ZXJzaW9uIiBbUmljaGFyZCBHLl0KKy0gRml4IGNvbmZpZ3VyZSBjaGVjayBmb3IgdmVyYWNpdHkgb2YgY29tcGlsZXIgZXJyb3IgcmV0dXJuIGNvZGVzCistIEZpeCBDTWFrZSBjb21waWxhdGlvbiBvZiBzdGF0aWMgbGliIGZvciBNU1ZDMjAxMCB4NjQKKy0gUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpbiBpbmZiYWNrOS5jCistIEZpeCBhcmd1bWVudCBjaGVja3MgaW4gZ3psb2dfY29tcHJlc3MoKSBhbmQgZ3psb2dfd3JpdGUoKQorLSBDbGVhbiB1cCB0aGUgdXNhZ2Ugb2Ygel9jb25zdCBhbmQgcmVzcGVjdCBjb25zdCB1c2FnZSB3aXRoaW4gemxpYgorLSBDbGVhbiB1cCBleGFtcGxlcy9nemxvZy5bY2hdIGNvbXBhcmlzb25zIG9mIGRpZmZlcmVudCB0eXBlcworLSBBdm9pZCBzaGlmdCBlcXVhbCB0byBiaXRzIGluIHR5cGUgKGNhdXNlZCBlbmRsZXNzIGxvb3ApCistIEZpeCB1bmludGlhbGl6ZWQgdmFsdWUgYnVnIGluIGd6cHV0YygpIGludHJvZHVjZWQgYnkgY29uc3QgcGF0Y2hlcworLSBGaXggbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IgaW4gZXhhbXBsZXMvenJhbi5jIFtOb3JdCistIEZpeCBidWcgd2hlcmUgZ3pvcGVuKCksIGd6Y2xvc2UoKSB3b3VsZCB3cml0ZSBhbiBlbXB0eSBmaWxlCistIEZpeCBidWcgaW4gZ3pjbG9zZSgpIHdoZW4gZ3p3cml0ZSgpIHJ1bnMgb3V0IG9mIG1lbW9yeQorLSBDaGVjayBmb3IgaW5wdXQgYnVmZmVyIG1hbGxvYyBmYWlsdXJlIGluIGV4YW1wbGVzL2d6YXBwZW5kLmMKKy0gQWRkIG5vdGUgdG8gY29udHJpYi9ibGFzdCB0byB1c2UgYmluYXJ5IG1vZGUgaW4gc3RkaW8KKy0gRml4IGNvbXBhcmlzb25zIG9mIGRpZmZlcmVudGx5IHNpZ25lZCBpbnRlZ2VycyBpbiBjb250cmliL2JsYXN0CistIENoZWNrIGZvciBpbnZhbGlkIGNvZGUgbGVuZ3RoIGNvZGVzIGluIGNvbnRyaWIvcHVmZgorLSBGaXggc2VyaW91cyBidXQgdmVyeSByYXJlIGRlY29tcHJlc3Npb24gYnVnIGluIGluZnRyZWVzLmMKKy0gVXBkYXRlIGluZmxhdGVCYWNrKCkgY29tbWVudHMsIHNpbmNlIGluZmxhdGUoKSBjYW4gYmUgZmFzdGVyCistIFVzZSB1bmRlcnNjb3JlZCBJL08gZnVuY3Rpb24gbmFtZXMgZm9yIFdJTkFQSV9GQU1JTFkKKy0gQWRkIF90cl9mbHVzaF9iaXRzIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzIHByZWZpeGVkIGJ5IC0tenByZWZpeAorLSBBZGQgY29udHJpYi92c3R1ZGlvL3ZjMTAgcHJlLWJ1aWxkIHN0ZXAgZm9yIHN0YXRpYyBvbmx5CistIFF1b3RlIC0tdmVyc2lvbi1zY3JpcHQgYXJndW1lbnQgaW4gQ01ha2VMaXN0cy50eHQKKy0gRG9uJ3Qgc3BlY2lmeSAtLXZlcnNpb24tc2NyaXB0IG9uIEFwcGxlIHBsYXRmb3JtcyBpbiBDTWFrZUxpc3RzLnR4dAorLSBGaXggY2FzdGluZyBlcnJvciBpbiBjb250cmliL3Rlc3R6bGliL3Rlc3R6bGliLmMKKy0gRml4IHR5cGVzIGluIGNvbnRyaWIvbWluaXppcCB0byBtYXRjaCByZXN1bHQgb2YgZ2V0X2NyY190YWJsZSgpCistIFNpbXBsaWZ5IGNvbnRyaWIvdnN0dWRpby92YzEwIHdpdGggJ2QnIHN1ZmZpeAorLSBBZGQgVE9QIHN1cHBvcnQgdG8gd2luMzIvTWFrZWZpbGUubXNjCistIFN1cG9ydCBpNjg2IGFuZCBhbWQ2NCBhc3NlbWJsZXIgYnVpbGRzIGluIENNYWtlTGlzdHMudHh0CistIEZpeCB0eXBvcyBpbiB0aGUgdXNlIG9mIF9MQVJHRUZJTEU2NF9TT1VSQ0UgaW4gemNvbmYuaAorLSBBZGQgdmMxMSBhbmQgdmMxMiBidWlsZCBmaWxlcyB0byBjb250cmliL3ZzdHVkaW8KKy0gQWRkIGd6dnByaW50ZigpIGFzIGFuIHVuZG9jdW1lbnRlZCBmdW5jdGlvbiBpbiB6bGliCistIEZpeCBjb25maWd1cmUgZm9yIFN1biBzaGVsbAorLSBSZW1vdmUgcnVudGltZSBjaGVjayBpbiBjb25maWd1cmUgZm9yIGZvdXItYnl0ZSBpbnRlZ2VyIHR5cGUKKy0gQWRkIGNhc3RzIGFuZCBjb25zdHMgdG8gZWFzZSB1c2VyIGNvbnZlcnNpb24gdG8gQysrCistIEFkZCBtYW4gcGFnZXMgZm9yIG1pbml6aXAgYW5kIG1pbml1bnppcAorLSBJbiBNYWtlZmlsZSB1bmluc3RhbGwsIGRvbid0IHJtIGlmIHByZWNlZGluZyBjZCBmYWlscworLSBEbyBub3QgcmV0dXJuIFpfQlVGX0VSUk9SIGlmIGRlZmxhdGVQYXJhbSgpIGhhcyBub3RoaW5nIHRvIHdyaXRlCisKK0NoYW5nZXMgaW4gMS4yLjcgKDIgTWF5IDIwMTIpCistIFJlcGxhY2UgdXNlIG9mIG1lbW1vdmUoKSB3aXRoIGEgc2ltcGxlIGNvcHkgZm9yIHBvcnRhYmlsaXR5CistIFRlc3QgZm9yIGV4aXN0ZW5jZSBvZiBzdHJlcnJvcgorLSBSZXN0b3JlIGd6Z2V0Y18gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCAxLjIuNgorLSBGaXggYnVpbGQgd2l0aCBub24tR05VIG1ha2Ugb24gU29sYXJpcworLSBSZXF1aXJlIGdjYyA0LjAgb3IgbGF0ZXIgb24gTWFjIE9TIFggdG8gdXNlIHRoZSBoaWRkZW4gYXR0cmlidXRlCistIEluY2x1ZGUgdW5pc3RkLmggZm9yIFdhdGNvbSBDCistIFVzZSBfX1dBVENPTUNfXyBpbnN0ZWFkIG9mIF9fV0FUQ09NX18KKy0gRG8gbm90IHVzZSB0aGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaWYgTk9fVklaIGRlZmluZWQKKy0gSW1wcm92ZSB0aGUgZGV0ZWN0aW9uIG9mIG5vIGhpZGRlbiB2aXNpYmlsaXR5IGF0dHJpYnV0ZQorLSBBdm9pZCB1c2luZyBfX2ludDY0IGZvciBnY2Mgb3Igc29sbyBjb21waWxhdGlvbgorLSBDYXN0IHRvIGNoYXIgKiBpbiBnenByaW50ZiB0byBhdm9pZCB3YXJuaW5ncyBbWmluc2VyXQorLSBGaXggbWFrZV92bXMuY29tIGZvciBWQVggW1ppbnNlcl0KKy0gRG9uJ3QgdXNlIGxpYnJhcnkgb3IgYnVpbHQtaW4gYnl0ZSBzd2FwcworLSBTaW1wbGlmeSB0ZXN0IGFuZCB1c2Ugb2YgZ2NjIGhpZGRlbiBhdHRyaWJ1dGUKKy0gRml4IGJ1ZyBpbiBnemNsb3NlX3coKSB3aGVuIGd6d3JpdGUoKSBmYWlscyB0byBhbGxvY2F0ZSBtZW1vcnkKKy0gQWRkICJ4IiAoT19FWENMKSBhbmQgImUiIChPX0NMT0VYRUMpIG1vZGVzIHN1cHBvcnQgdG8gZ3pvcGVuKCkKKy0gRml4IGJ1ZyBpbiB0ZXN0L21pbmlnemlwLmMgZm9yIGNvbmZpZ3VyZSAtLXNvbG8KKy0gRml4IGNvbnRyaWIvdnN0dWRpbyBwcm9qZWN0IGxpbmsgZXJyb3JzIFtNb2hhbmF0aGFzXQorLSBBZGQgYWJpbGl0eSB0byBjaG9vc2UgdGhlIGJ1aWxkZXIgaW4gbWFrZV92bXMuY29tIFtTY2h3ZWRhXQorLSBBZGQgREVTVERJUiBzdXBwb3J0IHRvIG1pbmd3MzIgd2luMzIvTWFrZWZpbGUuZ2NjCistIEZpeCBjb21tZW50cyBpbiB3aW4zMi9NYWtlZmlsZS5nY2MgZm9yIHByb3BlciB1c2FnZQorLSBBbGxvdyBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb25zIGZvciBjbWFrZQorLSBHZW5lcmF0ZSBhbmQgaW5zdGFsbCB0aGUgcGtnLWNvbmZpZyBmaWxlIHdpdGggY21ha2UKKy0gQnVpbGQgYm90aCBhIHN0YXRpYyBhbmQgYSBzaGFyZWQgdmVyc2lvbiBvZiB6bGliIHdpdGggY21ha2UKKy0gSW5jbHVkZSB2ZXJzaW9uIHN5bWJvbHMgZm9yIGNtYWtlIGJ1aWxkcworLSBJZiB1c2luZyBjbWFrZSB3aXRoIE1TVkMsIGFkZCB0aGUgc291cmNlIGRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZXMKKy0gUmVtb3ZlIHVubmVlZGVkIEVYVFJBX0NGTEFHUyBmcm9tIHdpbjMyL01ha2VmaWxlLmdjYyBbVHJ1dGFdCistIE1vdmUgb2Jzb2xldGUgZW14IG1ha2VmaWxlIHRvIG9sZCBbVHJ1dGFdCistIEFsbG93IHRoZSB1c2Ugb2YgLVd1bmRlZiB3aGVuIGNvbXBpbGluZyBvciB1c2luZyB6bGliCistIEF2b2lkIHRoZSB1c2Ugb2YgdGhlIC11IG9wdGlvbiB3aXRoIG1rdGVtcAorLSBJbXByb3ZlIGluZmxhdGUoKSBkb2N1bWVudGF0aW9uIG9uIHRoZSB1c2Ugb2YgWl9GSU5JU0gKKy0gUmVjb2duaXplIGNsYW5nIGFzIGdjYworLSBBZGQgZ3pvcGVuX3coKSBpbiBXaW5kb3dzIGZvciB3aWRlIGNoYXJhY3RlciBwYXRoIG5hbWVzCistIFJlbmFtZSB6Y29uZi5oIGluIENNYWtlTGlzdHMudHh0IHRvIG1vdmUgaXQgb3V0IG9mIHRoZSB3YXkKKy0gQWRkIHNvdXJjZSBkaXJlY3RvcnkgaW4gQ01ha2VMaXN0cy50eHQgZm9yIGJ1aWxkaW5nIGV4YW1wbGVzCistIExvb2sgaW4gYnVpbGQgZGlyZWN0b3J5IGZvciB6bGliLnBjIGluIENNYWtlTGlzdHMudHh0CistIFJlbW92ZSBnemZsYWdzIGZyb20gemxpYnZjLmRlZiBpbiB2YzkgYW5kIHZjMTAKKy0gRml4IGNvbnRyaWIvbWluaXppcCBjb21waWxhdGlvbiBpbiB0aGUgTWluR1cgZW52aXJvbm1lbnQKKy0gVXBkYXRlIC4vY29uZmlndXJlIGZvciBTb2xhcmlzLCBzdXBwb3J0IC0tNjQgW01vb25leV0KKy0gUmVtb3ZlIC1SLiBmcm9tIFNvbGFyaXMgc2hhcmVkIGJ1aWxkIChwb3NzaWJsZSBzZWN1cml0eSBpc3N1ZSkKKy0gQXZvaWQgcmFjZSBjb25kaXRpb24gZm9yIHBhcmFsbGVsIG1ha2UgKC1qKSBydW5uaW5nIGV4YW1wbGUKKy0gRml4IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiBnZXRfY3JjX3RhYmxlKCkgYW5kIGNyY190YWJsZQorLSBGaXggcGFyc2luZyBvZiB2ZXJzaW9uIHdpdGggIi0iIGluIENNYWtlTGlzdHMudHh0IFtTbmlkZXIsIFppZWdsZXJdCistIEZpeCB0aGUgcGF0aCB0byB6bGliLm1hcCBpbiBDTWFrZUxpc3RzLnR4dAorLSBGb3JjZSB0aGUgbmF0aXZlIGxpYnRvb2wgaW4gTWFjIE9TIFggdG8gYXZvaWQgR05VIGxpYnRvb2wgW0JlZWJlXQorLSBBZGQgaW5zdHJ1Y3Rpb25zIHRvIHdpbjMyL01ha2VmaWxlLmdjYyBmb3Igc2hhcmVkIGluc3RhbGwgW1RvcnJpXQorCitDaGFuZ2VzIGluIDEuMi42LjEgKDEyIEZlYiAyMDEyKQorLSBBdm9pZCB0aGUgdXNlIG9mIHRoZSBPYmplY3RpdmUtQyByZXNlcnZlZCBuYW1lICJpZCIKKy0gSW5jbHVkZSBpby5oIGluIGd6Z3V0cy5oIGZvciBNaWNyb3NvZnQgY29tcGlsZXJzCistIEZpeCBwcm9ibGVtIHdpdGggLi9jb25maWd1cmUgLS1wcmVmaXggYW5kIGd6Z2V0YyBtYWNybworLSBJbmNsdWRlIGd6X2hlYWRlciBkZWZpbml0aW9uIHdoZW4gY29tcGlsaW5nIHpsaWIgc29sbworLSBQdXQgZ3pmbGFncygpIGZ1bmN0aW9uYWxpdHkgYmFjayBpbiB6dXRpbC5jCistIEF2b2lkIGxpYnJhcnkgaGVhZGVyIGluY2x1ZGUgaW4gY3JjMzIuYyBmb3IgWl9TT0xPCistIFVzZSBuYW1lIGluIEdDQ19DTEFTU0lDIGFzIEMgY29tcGlsZXIgZm9yIGNvdmVyYWdlIHRlc3RpbmcsIGlmIHNldAorLSBNaW5vciBjbGVhbnVwIGluIGNvbnRyaWIvbWluaXppcC96aXAuYyBbVm9sbGFudF0KKy0gVXBkYXRlIG1ha2Vfdm1zLmNvbSBbWmluc2VyXQorLSBSZW1vdmUgdW5uZWNlc3NhcnkgZ3pnZXRjXyBmdW5jdGlvbgorLSBVc2Ugb3B0aW1pemVkIGJ5dGUgc3dhcCBvcGVyYXRpb25zIGZvciBNaWNyb3NvZnQgYW5kIEdOVSBbU255ZGVyXQorLSBGaXggbWlub3IgdHlwbyBpbiB6bGliLmggY29tbWVudHMgW1J6ZXNuaW93aWVja2ldCisKK0NoYW5nZXMgaW4gMS4yLjYgKDI5IEphbiAyMDEyKQorLSBVcGRhdGUgdGhlIFBhc2NhbCBpbnRlcmZhY2UgaW4gY29udHJpYi9wYXNjYWwKKy0gRml4IGZ1bmN0aW9uIG51bWJlcnMgZm9yIGd6Z2V0Y18gaW4gemxpYnZjLmRlZiBmaWxlcworLSBGaXggY29uZmlndXJlLmFjIGZvciBjb250cmliL21pbml6aXAgW1NjaGlmZmVyXQorLSBGaXggbGFyZ2UtZW50cnkgZGV0ZWN0aW9uIGluIG1pbml6aXAgb24gNjQtYml0IHN5c3RlbXMgW1NjaGlmZmVyXQorLSBIYXZlIC4vY29uZmlndXJlIHVzZSB0aGUgY29tcGlsZXIgcmV0dXJuIGNvZGUgZm9yIGVycm9yIGluZGljYXRpb24KKy0gRml4IENNYWtlTGlzdHMudHh0IGZvciBjcm9zcyBjb21waWxhdGlvbiBbTWNDbHVyZV0KKy0gRml4IGNvbnRyaWIvbWluaXppcC96aXAuYyBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMgW0RhbHNuZXNdCistIEZpeCBjb21waWxhdGlvbiBvZiBjb250cmliL21pbml6aXAgb24gRnJlZUJTRCBbTWFycXVlel0KKy0gQ29ycmVjdCBzdWdnZXN0ZWQgdXNhZ2VzIGluIHdpbjMyL01ha2VmaWxlLm1zYyBbU2hhY2hhciwgSG9ydmF0aF0KKy0gSW5jbHVkZSBpby5oIGZvciBUdXJibyBDIC8gQm9ybGFuZCBDIG9uIGFsbCBwbGF0Zm9ybXMgW1RydXRhXQorLSBNYWtlIHZlcnNpb24gZXhwbGljaXQgaW4gY29udHJpYi9taW5pemlwL2NvbmZpZ3VyZS5hYyBbQm9zbWFuc10KKy0gQXZvaWQgd2FybmluZyBmb3Igbm8gZW5jcnlwdGlvbiBpbiBjb250cmliL21pbml6aXAvemlwLmMgW1ZvbGxhbnRdCistIE1pbm9yIGNsZWFudXAgdXAgY29udHJpYi9taW5pemlwL3VuemlwLmMgW1ZvbGxhbnRdCistIEZpeCBidWcgd2hlbiBjb21waWxpbmcgbWluaXppcCB3aXRoIEMrKyBbVm9sbGFudF0KKy0gUHJvdGVjdCBmb3IgbG9uZyBuYW1lIGFuZCBleHRyYSBmaWVsZHMgaW4gY29udHJpYi9taW5pemlwIFtWb2xsYW50XQorLSBBdm9pZCBzb21lIHdhcm5pbmdzIGluIGNvbnRyaWIvbWluaXppcCBbVm9sbGFudF0KKy0gQWRkIC1JLi4vLi4gLUwuLi8uLiB0byBDRkxBR1MgZm9yIG1pbml6aXAgYW5kIG1pbml1bnppcAorLSBBZGQgbWlzc2luZyBsaWJzIHRvIG1pbml6aXAgbGlua2VyIGNvbW1hbmQKKy0gQWRkIHN1cHBvcnQgZm9yIFZQQVRIIGJ1aWxkcyBpbiBjb250cmliL21pbml6aXAKKy0gQWRkIGFuIC0tZW5hYmxlLWRlbW9zIG9wdGlvbiB0byBjb250cmliL21pbml6aXAvY29uZmlndXJlCistIEFkZCB0aGUgZ2VuZXJhdGlvbiBvZiBjb25maWd1cmUubG9nIGJ5IC4vY29uZmlndXJlCistIEV4aXQgd2hlbiByZXF1aXJlZCBwYXJhbWV0ZXJzIG5vdCBwcm92aWRlZCB0byB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gSGF2ZSBnenB1dGMgcmV0dXJuIHRoZSBjaGFyYWN0ZXIgd3JpdHRlbiBpbnN0ZWFkIG9mIHRoZSBhcmd1bWVudAorLSBVc2UgdGhlIC1tIG9wdGlvbiBvbiBsZGNvbmZpZyBmb3IgQlNEIHN5c3RlbXMgW1RvYmlhc10KKy0gQ29ycmVjdCBpbiB6bGliLm1hcCB3aGVuIGRlZmxhdGVSZXNldEtlZXAgd2FzIGFkZGVkCisKK0NoYW5nZXMgaW4gMS4yLjUuMyAoMTUgSmFuIDIwMTIpCistIFJlc3RvcmUgZ3pnZXRjIGZ1bmN0aW9uIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eQorLSBEbyBub3QgdXNlIF9sc2Vla2k2NCB1bmRlciBCb3JsYW5kIEMrKyBbVHJ1dGFdCistIFVwZGF0ZSB3aW4zMi9NYWtlZmlsZS5tc2MgdG8gYnVpbGQgdGVzdC8qLmMgW1RydXRhXQorLSBSZW1vdmUgb2xkL3Zpc3VhbGM2IGdpdmVuIENNYWtlZmlsZSBhbmQgb3RoZXIgYWx0ZXJuYXRpdmVzCistIFVwZGF0ZSBBUzQwMCBidWlsZCBmaWxlcyBhbmQgZG9jdW1lbnRhdGlvbiBbTW9ubmVyYXRdCistIFVwZGF0ZSB3aW4zMi9NYWtlZmlsZS5nY2MgdG8gYnVpbGQgdGVzdC8qLmMgW1RydXRhXQorLSBQZXJtaXQgc3Ryb25nZXIgZmx1c2hlcyBhZnRlciBaX0JMT0NLIGZsdXNoZXMKKy0gQXZvaWQgZXh0cmFuZW91cyBlbXB0eSBibG9ja3Mgd2hlbiBkb2luZyBlbXB0eSBmbHVzaGVzCistIFBlcm1pdCBaX05VTEwgYXJndW1lbnRzIHRvIGRlZmxhdGVQZW5kaW5nCistIEFsbG93IGRlZmxhdGVQcmltZSgpIHRvIGluc2VydCBiaXRzIGluIHRoZSBtaWRkbGUgb2YgYSBzdHJlYW0KKy0gUmVtb3ZlIHNlY29uZCBlbXB0eSBzdGF0aWMgYmxvY2sgZm9yIFpfUEFSVElBTF9GTFVTSAorLSBXcml0ZSBvdXQgYWxsIG9mIHRoZSBhdmFpbGFibGUgYml0cyB3aGVuIHVzaW5nIFpfQkxPQ0sKKy0gSW5zZXJ0IHRoZSBmaXJzdCB0d28gc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSBhZnRlciBhIGZsdXNoCisKK0NoYW5nZXMgaW4gMS4yLjUuMiAoMTcgRGVjIDIwMTEpCistIGZpeCBsZCBlcnJvcjogdW5hYmxlIHRvIGZpbmQgdmVyc2lvbiBkZXBlbmRlbmN5ICdaTElCXzEuMi41JworLSB1c2UgcmVsYXRpdmUgc3ltbGlua3MgZm9yIHNoYXJlZCBsaWJzCistIEF2b2lkIHNlYXJjaGluZyBwYXN0IHdpbmRvdyBmb3IgWl9STEUgc3RyYXRlZ3kKKy0gQXNzdXJlIHRoYXQgaGlnaC13YXRlciBtYXJrIGluaXRpYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGluIGRlZmxhdGUKKy0gQWRkIGFzc2VydGlvbnMgdG8gZmlsbF93aW5kb3coKSBpbiBkZWZsYXRlLmMgdG8gbWF0Y2ggY29tbWVudHMKKy0gVXBkYXRlIHB5dGhvbiBsaW5rIGluIFJFQURNRQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIGd6cmVhZC5jCistIEZpeCBidWcgaW4gZ3pnZXRzKCkgZm9yIGEgY29uY2F0ZW5hdGVkIGVtcHR5IGd6aXAgc3RyZWFtCistIENvcnJlY3QgZXJyb3IgaW4gY29tbWVudCBmb3IgZ3pfbWFrZSgpCistIENoYW5nZSBnenJlYWQoKSBhbmQgcmVsYXRlZCB0byBpZ25vcmUganVuayBhZnRlciBnemlwIHN0cmVhbXMKKy0gQWxsb3cgZ3pyZWFkKCkgYW5kIHJlbGF0ZWQgdG8gY29udGludWUgYWZ0ZXIgZ3pjbGVhcmVycigpCistIEFsbG93IGd6cmV3aW5kKCkgYW5kIGd6c2VlaygpIGFmdGVyIGEgcHJlbWF0dXJlIGVuZC1vZi1maWxlCistIFNpbXBsaWZ5IGd6c2VlaygpIG5vdyB0aGF0IHJhdyBhZnRlciBnemlwIGlzIGlnbm9yZWQKKy0gQ2hhbmdlIGd6Z2V0YygpIHRvIGEgbWFjcm8gZm9yIHNwZWVkICh+NDAlIHNwZWVkdXAgaW4gdGVzdGluZykKKy0gRml4IGd6Y2xvc2UoKSB0byByZXR1cm4gdGhlIGFjdHVhbCBlcnJvciBsYXN0IGVuY291bnRlcmVkCistIEFsd2F5cyBhZGQgbGFyZ2UgZmlsZSBzdXBwb3J0IGZvciB3aW5kb3dzCistIEluY2x1ZGUgemNvbmYuaCBmb3Igd2luZG93cyBsYXJnZSBmaWxlIHN1cHBvcnQKKy0gSW5jbHVkZSB6Y29uZi5oLmNtYWtlaW4gZm9yIHdpbmRvd3MgbGFyZ2UgZmlsZSBzdXBwb3J0CistIFVwZGF0ZSB6Y29uZi5oLmNtYWtlaW4gb24gbWFrZSBkaXN0Y2xlYW4KKy0gTWVyZ2UgdmVzdGlnaWFsIHZzbnByaW50ZiBkZXRlcm1pbmF0aW9uIGZyb20genV0aWwuaCB0byBnemd1dHMuaAorLSBDbGFyaWZ5IGhvdyBnem9wZW4oKSBhcHBlbmRzIGluIHpsaWIuaCBjb21tZW50cworLSBDb3JyZWN0IGRvY3VtZW50YXRpb24gb2YgZ3pkaXJlY3QoKSBzaW5jZSBqdW5rIGF0IGVuZCBub3cgaWdub3JlZAorLSBBZGQgYSB0cmFuc3BhcmVudCB3cml0ZSBtb2RlIHRvIGd6b3BlbigpIHdoZW4gJ1QnIGlzIGluIHRoZSBtb2RlCistIFVwZGF0ZSBweXRob24gbGluayBpbiB6bGliIG1hbiBwYWdlCistIEdldCBpbmZmaXhlZC5oIGFuZCBNQUtFRklYRUQgcmVzdWx0IHRvIG1hdGNoCistIEFkZCBhIC4vY29uZmlnIC0tc29sbyBvcHRpb24gdG8gbWFrZSB6bGliIHN1YnNldCB3aXRoIG5vIGxpYmFyeSB1c2UKKy0gQWRkIHVuZG9jdW1lbnRlZCBpbmZsYXRlUmVzZXRLZWVwKCkgZnVuY3Rpb24gZm9yIENBQiBmaWxlIGRlY29kaW5nCistIEFkZCAtLWNvdmVyIG9wdGlvbiB0byAuL2NvbmZpZ3VyZSBmb3IgZ2NjIGNvdmVyYWdlIHRlc3RpbmcKKy0gQWRkICNkZWZpbmUgWkxJQl9DT05TVCBvcHRpb24gdG8gdXNlIGNvbnN0IGluIHRoZSB6X3N0cmVhbSBpbnRlcmZhY2UKKy0gQWRkIGNvbW1lbnQgdG8gZ3pkb3BlbigpIGluIHpsaWIuaCB0byB1c2UgZHVwKCkgd2hlbiB1c2luZyBmaWxlbm8oKQorLSBOb3RlIGJlaGF2aW9yIG9mIHVuY29tcHJlc3MoKSB0byBwcm92aWRlIGFzIG11Y2ggZGF0YSBhcyBpdCBjYW4KKy0gQWRkIGZpbGVzIGluIGNvbnRyaWIvbWluaXppcCB0byBhaWQgaW4gYnVpbGRpbmcgbGlibWluaXppcAorLSBTcGxpdCBvZmYgQVIgb3B0aW9ucyBpbiBNYWtlZmlsZS5pbiBhbmQgY29uZmlndXJlCistIENoYW5nZSBPTiBtYWNybyB0byBaX0FSRyB0byBhdm9pZCBhcHBsaWNhdGlvbiBjb25mbGljdHMKKy0gRmFjaWxpdGF0ZSBjb21waWxhdGlvbiB3aXRoIEJvcmxhbmQgQysrIGZvciBwcmFnbWFzIGFuZCB2c25wcmludGYKKy0gSW5jbHVkZSBpby5oIGZvciBUdXJibyBDIC8gQm9ybGFuZCBDKysKKy0gTW92ZSBleGFtcGxlLmMgYW5kIG1pbmlnemlwLmMgdG8gdGVzdC8KKy0gU2ltcGxpZnkgaW5jb21wbGV0ZSBjb2RlIHRhYmxlIGZpbGxpbmcgaW4gaW5mbGF0ZV90YWJsZSgpCistIFJlbW92ZSBjb2RlIGZyb20gaW5mbGF0ZS5jIGFuZCBpbmZiYWNrLmMgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIGV4ZWN1dGUKKy0gVGVzdCB0aGUgaW5mbGF0ZSBjb2RlIHdpdGggZnVsbCBjb3ZlcmFnZQorLSBBbGxvdyBkZWZsYXRlU2V0RGljdGlvbmFyeSwgaW5mbGF0ZVNldERpY3Rpb25hcnkgYXQgYW55IHRpbWUgKGluIHJhdykKKy0gQWRkIGRlZmxhdGVSZXNldEtlZXAgYW5kIGZpeCBpbmZsYXRlUmVzZXRLZWVwIHRvIHJldGFpbiBkaWN0aW9uYXJ5CistIEZpeCBnendyaXRlLmMgdG8gYWNjb21tb2RhdGUgcmVkdWNlZCBtZW1vcnkgemxpYiBjb21waWxhdGlvbgorLSBIYXZlIGluZmxhdGUoKSB3aXRoIFpfRklOSVNIIGF2b2lkIHRoZSBhbGxvY2F0aW9uIG9mIGEgd2luZG93CistIERvIG5vdCBzZXQgc3RybS0+YWRsZXIgd2hlbiBkb2luZyByYXcgaW5mbGF0ZQorLSBGaXggZ3plb2YoKSB0byBiZWhhdmUganVzdCBsaWtlIGZlb2YoKSB3aGVuIHJlYWQgaXMgbm90IHBhc3QgZW5kIG9mIGZpbGUKKy0gRml4IGJ1ZyBpbiBnenJlYWQuYyB3aGVuIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQKKy0gQXZvaWQgdXNlIG9mIFpfQlVGX0VSUk9SIGluIGd6KiBmdW5jdGlvbnMgZXhjZXB0IGZvciBwcmVtYXR1cmUgRU9GCistIERvY3VtZW50IGd6cmVhZCgpIGNhcGFiaWxpdHkgdG8gcmVhZCBjb25jdXJyZW50bHkgd3JpdHRlbiBmaWxlcworLSBSZW1vdmUgaGFyZC1jb2Rpbmcgb2YgcmVzb3VyY2UgY29tcGlsZXIgaW4gQ01ha2VMaXN0cy50eHQgW0JsYW1tb10KKworQ2hhbmdlcyBpbiAxLjIuNS4xICgxMCBTZXAgMjAxMSkKKy0gVXBkYXRlIEZBUSBlbnRyeSBvbiBzaGFyZWQgYnVpbGRzICgjMTMpCistIEF2b2lkIHN5bWJvbGljIGFyZ3VtZW50IHRvIGNobW9kIGluIE1ha2VmaWxlLmluCistIEZpeCBidWcgYW5kIGFkZCBjb25zdHMgaW4gY29udHJpYi9wdWZmIFtPYmVyaHVtZXJdCistIFVwZGF0ZSBjb250cmliL3B1ZmYvemVyb3MucmF3IHRlc3QgZmlsZSB0byBoYXZlIGFsbCBibG9jayB0eXBlcworLSBBZGQgZnVsbCBjb3ZlcmFnZSB0ZXN0IGZvciBwdWZmIGluIGNvbnRyaWIvcHVmZi9NYWtlZmlsZQorLSBGaXggc3RhdGljLW9ubHktYnVpbGQgaW5zdGFsbCBpbiBNYWtlZmlsZS5pbgorLSBGaXggYnVnIGluIHVuekdldEN1cnJlbnRGaWxlSW5mbygpIGluIGNvbnRyaWIvbWluaXppcCBbS3Vub10KKy0gQWRkIGxpYnouYSBkZXBlbmRlbmN5IHRvIHNoYXJlZCBpbiBNYWtlZmlsZS5pbiBmb3IgcGFyYWxsZWwgYnVpbGRzCistIFNwZWxsIG91dCAibnVtYmVyIiAoaW5zdGVhZCBvZiAibmIiKSBpbiB6bGliLmggZm9yIHRvdGFsX2luLCB0b3RhbF9vdXQKKy0gUmVwbGFjZSAkKC4uLikgd2l0aCBgLi4uYCBpbiBjb25maWd1cmUgZm9yIG5vbi1iYXNoIHNoIFtCb3dsZXJdCistIEFkZCBkYXJ3aW4qIHRvIERhcndpbiogYW5kIHNvbGFyaXMqIHRvIFN1bk9TXCA1KiBpbiBjb25maWd1cmUgW0dyb2ZmZW5dCistIEFkZCBzb2xhcmlzKiB0byBMaW51eCogaW4gY29uZmlndXJlIHRvIGFsbG93IGdjYyB1c2UgW0dyb2ZmZW5dCistIEFkZCAqYnNkKiB0byBMaW51eCogY2FzZSBpbiBjb25maWd1cmUgW0Jhci1MZXZdCistIEFkZCBpbmZmYXN0Lm9iaiB0byBkZXBlbmRlbmNpZXMgaW4gd2luMzIvTWFrZWZpbGUubXNjCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gZGVmbGF0ZS5oIFtLb2hsZXJdCistIENoYW5nZSBsaWJ6ZGxsLmEgYWdhaW4gdG8gbGliei5kbGwuYSAoISkgaW4gd2luMzIvTWFrZWZpbGUuZ2NjCistIEFkZCB0ZXN0IHRvIGNvbmZpZ3VyZSBmb3IgR05VIEMgbG9va2luZyBmb3IgZ2NjIGluIG91dHB1dCBvZiAkY2MgLXYKKy0gQWRkIHpsaWIucGMgZ2VuZXJhdGlvbiB0byB3aW4zMi9NYWtlZmlsZS5nY2MgW1dlaWdlbHRdCistIEZpeCBidWcgaW4gemxpYi5oIGZvciBfRklMRV9PRkZTRVRfQklUUyBzZXQgYW5kIF9MQVJHRUZJTEU2NF9TT1VSQ0Ugbm90CistIEFkZCBjb21tZW50IGluIHpsaWIuaCB0aGF0IGFkbGVyMzJfY29tYmluZSB3aXRoIGxlbjIgPCAwIG1ha2VzIG5vIHNlbnNlCistIE1ha2UgTk9fRElWSURFIG9wdGlvbiBpbiBhZGxlcjMyLmMgbXVjaCBmYXN0ZXIgKHRoYW5rcyB0byBKb2huIFJlaXNlcikKKy0gTWFrZSBzdHJvbmdlciB0ZXN0IGluIHpjb25mLmggdG8gaW5jbHVkZSB1bmlzdGQuaCBmb3IgTEZTCistIEFwcGx5IERhcndpbiBwYXRjaGVzIGZvciA2NC1iaXQgZmlsZSBvZmZzZXRzIHRvIGNvbnRyaWIvbWluaXppcCBbU2xhY2tdCistIEZpeCB6bGliLmggTEZTIHN1cHBvcnQgd2hlbiBaX1BSRUZJWCB1c2VkCistIEFkZCB1cGRhdGVkIGFzNDAwIHN1cHBvcnQgKHJlbW92ZWQgZnJvbSBvbGQpIFtNb25uZXJhdF0KKy0gQXZvaWQgZGVmbGF0ZSBzZW5zaXRpdml0eSB0byB2b2xhdGlsZSBpbnB1dCBkYXRhCistIEF2b2lkIGRpdmlzaW9uIGluIGFkbGVyMzJfY29tYmluZSBmb3IgTk9fRElWSURFCistIENsYXJpZnkgdGhlIHVzZSBvZiBaX0ZJTklTSCB3aXRoIGRlZmxhdGVCb3VuZCgpIGFtb3VudCBvZiBzcGFjZQorLSBTZXQgYmluYXJ5IGZvciBvdXRwdXQgZmlsZSBpbiBwdWZmLmMKKy0gVXNlIHU0IHR5cGUgZm9yIGNyY190YWJsZSB0byBhdm9pZCBjb252ZXJzaW9uIHdhcm5pbmdzCistIEFwcGx5IGNhc3RzIGluIHpsaWIuaCB0byBhdm9pZCBjb252ZXJzaW9uIHdhcm5pbmdzCistIEFkZCBPRiB0byBwcm90b3R5cGVzIGZvciBhZGxlcjMyX2NvbWJpbmVfIGFuZCBjcmMzMl9jb21iaW5lXyBbTWlsbGVyXQorLSBJbXByb3ZlIGluZmxhdGVTeW5jKCkgZG9jdW1lbnRhdGlvbiB0byBub3RlIGluZGV0ZXJtaW5hbmN5CistIEFkZCBkZWZsYXRlUGVuZGluZygpIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgYW1vdW50IG9mIHBlbmRpbmcgb3V0cHV0CistIENvcnJlY3QgdGhlIHNwZWxsaW5nIG9mICJzcGVjaWZpY2F0aW9uIiBpbiBGQVEgW1JhbmRlcnMtUGVocnNvbl0KKy0gQWRkIGEgY2hlY2sgaW4gY29uZmlndXJlIGZvciBzdGRhcmcuaCwgdXNlIGZvciBnenByaW50ZigpCistIENoZWNrIHRoYXQgcG9pbnRlcnMgZml0IGluIGludHMgd2hlbiBnenByaW50KCkgY29tcGlsZWQgb2xkIHN0eWxlCistIEFkZCBkdW1teSBuYW1lIGJlZm9yZSAkKFNIQVJFRExJQlYpIGluIE1ha2VmaWxlIFtCYXItTGV2LCBCb3dsZXJdCistIERlbGV0ZSBsaW5lIGluIGNvbmZpZ3VyZSB0aGF0IGFkZHMgLUwuIGxpYnouYSB0byBMREZMQUdTIFtXZWlnZWx0XQorLSBBZGQgZGVidWcgcmVjb3JkcyBpbiBhc3NtZWJsZXIgY29kZSBbTG9uZGVyXQorLSBVcGRhdGUgUkZDIHJlZmVyZW5jZXMgdG8gdXNlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sLy4uLiBbTGldCistIEFkZCAtLWFyY2hzIG9wdGlvbiwgdXNlIG9mIGxpYnRvb2wgdG8gY29uZmlndXJlIGZvciBNYWMgT1MgWCBbQm9yc3RlbF0KKwogQ2hhbmdlcyBpbiAxLjIuNSAoMTkgQXByIDIwMTApCiAtIERpc2FibGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaW4gd2luMzIvTWFrZWZpbGUuZ2NjIFtCYXItTGV2XQogLSBEZWZhdWx0IHRvIGxpYmRpciBhcyBzaGFyZWRsaWJkaXIgaW4gY29uZmlndXJlIFtOaWVkZXJdCiAtIFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZXMgb24gbW9kaWZpZWQgc291cmNlIGZpbGVzCiAtIFVwZGF0ZSB0cmVlcy5jIHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUgbW9kaWZpZWQgdHJlZXMuaAogLSBFeGl0IGNvbmZpZ3VyZSBmb3IgTWluR1csIHN1Z2dlc3Rpbmcgd2luMzIvTWFrZWZpbGUuZ2NjCistIENoZWNrIGZvciBOVUxMIHBhdGggaW4gZ3pfb3BlbiBbSG9tdXJsdV0KIAogQ2hhbmdlcyBpbiAxLjIuNC41ICgxOCBBcHIgMjAxMCkKIC0gU2V0IHNoYXJlZGxpYmRpciBpbiBjb25maWd1cmUgW1Rvcm9rXQpAQCAtMjYxLDcgKzUyNSw3IEBACiAtIENsZWFyIGJ5dGVzIGFmdGVyIGRlZmxhdGUgbG9va2FoZWFkIHRvIGF2b2lkIHVzZSBvZiB1bmluaXRpYWxpemVkIGRhdGEKIC0gQ2hhbmdlIGEgbGltaXQgaW4gaW5mdHJlZXMuYyB0byBiZSBtb3JlIHRyYW5zcGFyZW50IHRvIENvdmVyaXR5IFByZXZlbnQKIC0gVXBkYXRlIHdpbjMyL3psaWIuZGVmIHdpdGggZXhwb3J0ZWQgc3ltYm9scyBmcm9tIHpsaWIuaAotLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIHpsaWIuaCBbV2lsbGVtXQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9ycyBpbiB6bGliLmggW1dpbGxlbSwgU29icmFkb10KIC0gQWxsb3cgWl9CTE9DSyBmb3IgZGVmbGF0ZSgpIHRvIGZvcmNlIGEgbmV3IGJsb2NrCiAtIEFsbG93IG5lZ2F0aXZlIGJpdHMgaW4gaW5mbGF0ZVByaW1lKCkgdG8gZGVsZXRlIGV4aXN0aW5nIGJpdCBidWZmZXIKIC0gQWRkIFpfVFJFRVMgZmx1c2ggb3B0aW9uIHRvIGluZmxhdGUoKSB0byByZXR1cm4gYXQgZW5kIG9mIHRyZWVzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvRkFRIGIvTW9kdWxlcy96bGliL0ZBUQppbmRleCAxYTIyNzUwLi45OWI3Y2Y5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvRkFRCisrKyBiL01vZHVsZXMvemxpYi9GQVEKQEAgLTQ0LDggKzQ0LDggQEAKIAogIDYuIFdoZXJlJ3MgdGhlIHpsaWIgZG9jdW1lbnRhdGlvbiAobWFuIHBhZ2VzLCBldGMuKT8KIAotICAgIEl0J3MgaW4gemxpYi5oIC4gIEV4YW1wbGVzIG9mIHpsaWIgdXNhZ2UgYXJlIGluIHRoZSBmaWxlcyBleGFtcGxlLmMgYW5kCi0gICAgbWluaWd6aXAuYywgd2l0aCBtb3JlIGluIGV4YW1wbGVzLyAuCisgICAgSXQncyBpbiB6bGliLmggLiAgRXhhbXBsZXMgb2YgemxpYiB1c2FnZSBhcmUgaW4gdGhlIGZpbGVzIHRlc3QvZXhhbXBsZS5jCisgICAgYW5kIHRlc3QvbWluaWd6aXAuYywgd2l0aCBtb3JlIGluIGV4YW1wbGVzLyAuCiAKICA3LiBXaHkgZG9uJ3QgeW91IHVzZSBHTlUgYXV0b2NvbmYgb3IgbGlidG9vbCBvciAuLi4/CiAKQEAgLTg0LDggKzg0LDEwIEBACiAKIDEzLiBIb3cgY2FuIEkgbWFrZSBhIFVuaXggc2hhcmVkIGxpYnJhcnk/CiAKLSAgICBtYWtlIGNsZWFuCi0gICAgLi9jb25maWd1cmUgLXMKKyAgICBCeSBkZWZhdWx0IGEgc2hhcmVkIChhbmQgYSBzdGF0aWMpIGxpYnJhcnkgaXMgYnVpbHQgZm9yIFVuaXguICBTbzoKKworICAgIG1ha2UgZGlzdGNsZWFuCisgICAgLi9jb25maWd1cmUKICAgICBtYWtlCiAKIDE0LiBIb3cgZG8gSSBpbnN0YWxsIGEgc2hhcmVkIHpsaWIgbGlicmFyeSBvbiBVbml4PwpAQCAtMzI1LDcgKzMyNyw3IEBACiAgICAgY29ycmVjdGx5IHBvaW50cyB0byB0aGUgemxpYiBzcGVjaWZpY2F0aW9uIGluIFJGQyAxOTUwIGZvciB0aGUgImRlZmxhdGUiCiAgICAgdHJhbnNmZXIgZW5jb2RpbmcsIHRoZXJlIGhhdmUgYmVlbiByZXBvcnRzIG9mIHNlcnZlcnMgYW5kIGJyb3dzZXJzIHRoYXQKICAgICBpbmNvcnJlY3RseSBwcm9kdWNlIG9yIGV4cGVjdCByYXcgZGVmbGF0ZSBkYXRhIHBlciB0aGUgZGVmbGF0ZQotICAgIHNwZWNmaWNpYXRpb24gaW4gUkZDIDE5NTEsIG1vc3Qgbm90YWJseSBNaWNyb3NvZnQuICBTbyBldmVuIHRob3VnaCB0aGUKKyAgICBzcGVjaWZpY2F0aW9uIGluIFJGQyAxOTUxLCBtb3N0IG5vdGFibHkgTWljcm9zb2Z0LiAgU28gZXZlbiB0aG91Z2ggdGhlCiAgICAgImRlZmxhdGUiIHRyYW5zZmVyIGVuY29kaW5nIHVzaW5nIHRoZSB6bGliIGZvcm1hdCB3b3VsZCBiZSB0aGUgbW9yZQogICAgIGVmZmljaWVudCBhcHByb2FjaCAoYW5kIGluIGZhY3QgZXhhY3RseSB3aGF0IHRoZSB6bGliIGZvcm1hdCB3YXMgZGVzaWduZWQKICAgICBmb3IpLCB1c2luZyB0aGUgImd6aXAiIHRyYW5zZmVyIGVuY29kaW5nIGlzIHByb2JhYmx5IG1vcmUgcmVsaWFibGUgZHVlIHRvCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvSU5ERVggYi9Nb2R1bGVzL3psaWIvSU5ERVgKaW5kZXggZjZjNTFjYS4uMmJhMDY0MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL0lOREVYCisrKyBiL01vZHVsZXMvemxpYi9JTkRFWApAQCAtNyw2ICs3LDkgQEAKIFJFQURNRSAgICAgICAgICBndWVzcyB3aGF0CiBjb25maWd1cmUgICAgICAgY29uZmlndXJlIHNjcmlwdCBmb3IgVW5peAogbWFrZV92bXMuY29tICAgIG1ha2VmaWxlIGZvciBWTVMKK3Rlc3QvZXhhbXBsZS5jICB6bGliIHVzYWdlcyBleGFtcGxlcyBmb3IgYnVpbGQgdGVzdGluZwordGVzdC9taW5pZ3ppcC5jIG1pbmltYWwgZ3ppcC1saWtlIGZ1bmN0aW9uYWxpdHkgZm9yIGJ1aWxkIHRlc3RpbmcKK3Rlc3QvaW5mY292ZXIuYyBpbmYqLmMgY29kZSBjb3ZlcmFnZSBmb3IgYnVpbGQgY292ZXJhZ2UgdGVzdGluZwogdHJlZWJ1aWxkLnhtbCAgIFhNTCBkZXNjcmlwdGlvbiBvZiBzb3VyY2UgZmlsZSBkZXBlbmRlbmNpZXMKIHpjb25mLmguY21ha2VpbiB6Y29uZi5oIHRlbXBsYXRlIGZvciBjbWFrZQogemNvbmYuaC5pbiAgICAgIHpjb25mLmggdGVtcGxhdGUgZm9yIGNvbmZpZ3VyZQpAQCAtMTQsOSArMTcsMTEgQEAKIHpsaWIuMy5wZGYgICAgICBNYW4gcGFnZSBpbiBQREYgZm9ybWF0CiB6bGliLm1hcCAgICAgICAgTGludXggc3ltYm9sIGluZm9ybWF0aW9uCiB6bGliLnBjLmluICAgICAgVGVtcGxhdGUgZm9yIHBrZy1jb25maWcgZGVzY3JpcHRvcgoremxpYi5wYy5jbWFrZWluIHpsaWIucGMgdGVtcGxhdGUgZm9yIGNtYWtlCiB6bGliMmFuc2kgICAgICAgcGVybCBzY3JpcHQgdG8gY29udmVydCBzb3VyY2UgZmlsZXMgZm9yIEMrKyBjb21waWxhdGlvbgogCiBhbWlnYS8gICAgICAgICAgbWFrZWZpbGVzIGZvciBBbWlnYSBTQVMgQworYXM0MDAvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgQVMvNDAwCiBkb2MvICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgZm9ybWF0cyBhbmQgYWxnb3JpdGhtcwogbXNkb3MvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgTVNET1MKIG5pbnRlbmRvZHMvICAgICBtYWtlZmlsZSBmb3IgTmludGVuZG8gRFMKQEAgLTU2LDEwICs2MSw4IEBACiB6dXRpbC5jCiB6dXRpbC5oCiAKLSAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgZm9yIHNhbXBsZSBwcm9ncmFtczoKLWV4YW1wbGUuYwotbWluaWd6aXAuYwotU2VlIGV4YW1wbGVzL1JFQURNRS5leGFtcGxlcyBmb3IgbW9yZQorICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBmb3Igc2FtcGxlIHByb2dyYW1zCitTZWUgZXhhbXBsZXMvUkVBRE1FLmV4YW1wbGVzCiAKLSAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZCBjb250cmlidXRpb24gYnkgdGhpcmQgcGFydGllcworICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkIGNvbnRyaWJ1dGlvbnMgYnkgdGhpcmQgcGFydGllcwogU2VlIGNvbnRyaWIvUkVBRE1FLmNvbnRyaWIKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbiBiL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbgppbmRleCA1YjE1YmQwLi5jNjFhYTMwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4KKysrIGIvTW9kdWxlcy96bGliL01ha2VmaWxlLmluCkBAIC0xLDUgKzEsNSBAQAogIyBNYWtlZmlsZSBmb3IgemxpYgotIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LCBNYXJrIEFkbGVyCiAjIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKIAogIyBUbyBjb21waWxlIGFuZCB0ZXN0LCB0eXBlOgpAQCAtMzIsMTEgKzMyLDEyIEBACiAKIFNUQVRJQ0xJQj1saWJ6LmEKIFNIQVJFRExJQj1saWJ6LnNvCi1TSEFSRURMSUJWPWxpYnouc28uMS4yLjUKK1NIQVJFRExJQlY9bGliei5zby4xLjIuOAogU0hBUkVETElCTT1saWJ6LnNvLjEKIExJQlM9JChTVEFUSUNMSUIpICQoU0hBUkVETElCVikKIAotQVI9YXIgcmMKK0FSPWFyCitBUkZMQUdTPXJjCiBSQU5MSUI9cmFubGliCiBMRENPTkZJRz1sZGNvbmZpZwogTERTSEFSRURMSUJDPS1sYwpAQCAtNTMsMTEgKzU0LDEzIEBACiBtYW4zZGlyID0gJHttYW5kaXJ9L21hbjMKIHBrZ2NvbmZpZ2RpciA9ICR7bGliZGlyfS9wa2djb25maWcKIAotT0JKQyA9IGFkbGVyMzIubyBjb21wcmVzcy5vIGNyYzMyLm8gZGVmbGF0ZS5vIGd6Y2xvc2UubyBnemxpYi5vIGd6cmVhZC5vIFwKLQlnendyaXRlLm8gaW5mYmFjay5vIGluZmZhc3QubyBpbmZsYXRlLm8gaW5mdHJlZXMubyB0cmVlcy5vIHVuY29tcHIubyB6dXRpbC5vCitPQkpaID0gYWRsZXIzMi5vIGNyYzMyLm8gZGVmbGF0ZS5vIGluZmJhY2subyBpbmZmYXN0Lm8gaW5mbGF0ZS5vIGluZnRyZWVzLm8gdHJlZXMubyB6dXRpbC5vCitPQkpHID0gY29tcHJlc3MubyB1bmNvbXByLm8gZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gZ3p3cml0ZS5vCitPQkpDID0gJChPQkpaKSAkKE9CSkcpCiAKLVBJQ19PQkpDID0gYWRsZXIzMi5sbyBjb21wcmVzcy5sbyBjcmMzMi5sbyBkZWZsYXRlLmxvIGd6Y2xvc2UubG8gZ3psaWIubG8gZ3pyZWFkLmxvIFwKLQlnendyaXRlLmxvIGluZmJhY2subG8gaW5mZmFzdC5sbyBpbmZsYXRlLmxvIGluZnRyZWVzLmxvIHRyZWVzLmxvIHVuY29tcHIubG8genV0aWwubG8KK1BJQ19PQkpaID0gYWRsZXIzMi5sbyBjcmMzMi5sbyBkZWZsYXRlLmxvIGluZmJhY2subG8gaW5mZmFzdC5sbyBpbmZsYXRlLmxvIGluZnRyZWVzLmxvIHRyZWVzLmxvIHp1dGlsLmxvCitQSUNfT0JKRyA9IGNvbXByZXNzLmxvIHVuY29tcHIubG8gZ3pjbG9zZS5sbyBnemxpYi5sbyBnenJlYWQubG8gZ3p3cml0ZS5sbworUElDX09CSkMgPSAkKFBJQ19PQkpaKSAkKFBJQ19PQkpHKQogCiAjIHRvIHVzZSB0aGUgYXNtIGNvZGU6IG1ha2UgT0JKQT1tYXRjaC5vLCBQSUNfT0JKQT1tYXRjaC5sbwogT0JKQSA9CkBAIC04MCwzNSArODMsNDkgQEAKIHRlc3Q6IGFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQKIAogdGVzdHN0YXRpYzogc3RhdGljCi0JQGlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCAmJiAuL2V4YW1wbGU7IHRoZW4gXAorCUBUTVBTVD10bXBzdF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCAmJiAuL2V4YW1wbGUgJCRUTVBTVCA7IHRoZW4gXAogCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IE9LICoqKic7IFwKIAllbHNlIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUFNUCiAKIHRlc3RzaGFyZWQ6IHNoYXJlZAogCUBMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllfUEFUSDsgXAogCUxEX0xJQlJBUllOMzJfUEFUSD1gcHdkYDokKExEX0xJQlJBUllOMzJfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWU4zMl9QQVRIOyBcCiAJRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChEWUxEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEg7IFwKIAlTSExJQl9QQVRIPWBwd2RgOiQoU0hMSUJfUEFUSCkgOyBleHBvcnQgU0hMSUJfUEFUSDsgXAotCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwc2ggfCAuL21pbmlnemlwc2ggLWQgJiYgLi9leGFtcGxlc2g7IHRoZW4gXAorCVRNUFNIPXRtcHNoXyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXBzaCB8IC4vbWluaWd6aXBzaCAtZCAmJiAuL2V4YW1wbGVzaCAkJFRNUFNIOyB0aGVuIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgc2hhcmVkIHRlc3QgT0sgKioqJzsgXAogCWVsc2UgXAogCSAgZWNobyAnCQkqKiogemxpYiBzaGFyZWQgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUFNICiAKIHRlc3Q2NDogYWxsNjQKLQlAaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXA2NCB8IC4vbWluaWd6aXA2NCAtZCAmJiAuL2V4YW1wbGU2NDsgdGhlbiBcCisJQFRNUDY0PXRtcDY0XyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXA2NCB8IC4vbWluaWd6aXA2NCAtZCAmJiAuL2V4YW1wbGU2NCAkJFRNUDY0OyB0aGVuIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgNjQtYml0IHRlc3QgT0sgKioqJzsgXAogCWVsc2UgXAogCSAgZWNobyAnCQkqKiogemxpYiA2NC1iaXQgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUDY0CisKK2luZmNvdmVyLm86IHRlc3QvaW5mY292ZXIuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLWMgLW8gJEAgdGVzdC9pbmZjb3Zlci5jCisKK2luZmNvdmVyOiBpbmZjb3Zlci5vIGxpYnouYQorCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBpbmZjb3Zlci5vIGxpYnouYQorCitjb3ZlcjogaW5mY292ZXIKKwlybSAtZiAqLmdjZGEKKwkuL2luZmNvdmVyCisJZ2NvdiBpbmYqLmMKIAogbGliei5hOiAkKE9CSlMpCi0JJChBUikgJEAgJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQogCS1AICgkKFJBTkxJQikgJEAgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCiAKIG1hdGNoLm86IG1hdGNoLlMKQEAgLTEyMywxMSArMTQwLDE3IEBACiAJbXYgX21hdGNoLm8gbWF0Y2gubG8KIAlybSAtZiBfbWF0Y2gucwogCi1leGFtcGxlNjQubzogZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCi0JJChDQykgJChDRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgZXhhbXBsZS5jCitleGFtcGxlLm86IHRlc3QvZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtYyAtbyAkQCB0ZXN0L2V4YW1wbGUuYwogCi1taW5pZ3ppcDY0Lm86IG1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKLQkkKENDKSAkKENGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCBtaW5pZ3ppcC5jCittaW5pZ3ppcC5vOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1jIC1vICRAIHRlc3QvbWluaWd6aXAuYworCitleGFtcGxlNjQubzogdGVzdC9leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgdGVzdC9leGFtcGxlLmMKKworbWluaWd6aXA2NC5vOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgdGVzdC9taW5pZ3ppcC5jCiAKIC5TVUZGSVhFUzogLmxvCiAKQEAgLTEzNiw3ICsxNTksNyBAQAogCSQoQ0MpICQoU0ZMQUdTKSAtRFBJQyAtYyAtbyBvYmpzLyQqLm8gJDwKIAktQG12IG9ianMvJCoubyAkQAogCi0kKFNIQVJFRExJQlYpOiAkKFBJQ19PQkpTKQorcGxhY2VibyAkKFNIQVJFRExJQlYpOiAkKFBJQ19PQkpTKSBsaWJ6LmEKIAkkKExEU0hBUkVEKSAkKFNGTEFHUykgLW8gJEAgJChQSUNfT0JKUykgJChMRFNIQVJFRExJQkMpICQoTERGTEFHUykKIAlybSAtZiAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKQogCWxuIC1zICRAICQoU0hBUkVETElCKQpAQCAtMTY4LDE0ICsxOTEsMTYgQEAKIAktQGlmIFsgISAtZCAkKERFU1RESVIpJChtYW4zZGlyKSAgICAgIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQobWFuM2Rpcik7IGZpCiAJLUBpZiBbICEgLWQgJChERVNURElSKSQocGtnY29uZmlnZGlyKSBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKHBrZ2NvbmZpZ2Rpcik7IGZpCiAJY3AgJChTVEFUSUNMSUIpICQoREVTVERJUikkKGxpYmRpcikKLQljcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikKLQljZCAkKERFU1RESVIpJChsaWJkaXIpOyBjaG1vZCB1PXJ3LGdvPXIgJChTVEFUSUNMSUIpCi0JLUAoY2QgJChERVNURElSKSQobGliZGlyKTsgJChSQU5MSUIpIGxpYnouYSB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKLQktQGNkICQoREVTVERJUikkKHNoYXJlZGxpYmRpcik7IGlmIHRlc3QgIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAotCSAgY2htb2QgNzU1ICQoU0hBUkVETElCVik7IFwKLQkgIHJtIC1mICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pOyBcCi0JICBsbiAtcyAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCKTsgXAotCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQk0pOyBcCisJY2htb2QgNjQ0ICQoREVTVERJUikkKGxpYmRpcikvJChTVEFUSUNMSUIpCisJLUAoJChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvbGliei5hIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQorCS1AaWYgdGVzdCAtbiAiJChTSEFSRURMSUJWKSI7IHRoZW4gXAorCSAgY3AgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpOyBcCisJICBlY2hvICJjcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikiOyBcCisJICBjaG1vZCA3NTUgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQlYpOyBcCisJICBlY2hvICJjaG1vZCA3NTUgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQlYpIjsgXAorCSAgcm0gLWYgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBcCisJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUIpOyBcCisJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJNKTsgXAogCSAgKCQoTERDT05GSUcpIHx8IHRydWUpICA+L2Rldi9udWxsIDI+JjE7IFwKIAlmaQogCWNwIHpsaWIuMyAkKERFU1RESVIpJChtYW4zZGlyKQpAQCAtMTkxLDIyICsyMTYsMjUgQEAKIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5jbHVkZWRpcikvemxpYi5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3pjb25mLmgKIAogdW5pbnN0YWxsOgotCWNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBybSAtZiB6bGliLmggemNvbmYuaAotCWNkICQoREVTVERJUikkKGxpYmRpcik7IHJtIC1mIGxpYnouYTsgXAotCWlmIHRlc3QgIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAorCWNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpICYmIHJtIC1mIHpsaWIuaCB6Y29uZi5oCisJY2QgJChERVNURElSKSQobGliZGlyKSAmJiBybSAtZiBsaWJ6LmE7IFwKKwlpZiB0ZXN0IC1uICIkKFNIQVJFRExJQlYpIiAtYSAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKIAkgIHJtIC1mICQoU0hBUkVETElCVikgJChTSEFSRURMSUIpICQoU0hBUkVETElCTSk7IFwKIAlmaQotCWNkICQoREVTVERJUikkKG1hbjNkaXIpOyBybSAtZiB6bGliLjMKLQljZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpOyBybSAtZiB6bGliLnBjCisJY2QgJChERVNURElSKSQobWFuM2RpcikgJiYgcm0gLWYgemxpYi4zCisJY2QgJChERVNURElSKSQocGtnY29uZmlnZGlyKSAmJiBybSAtZiB6bGliLnBjCiAKIGRvY3M6IHpsaWIuMy5wZGYKIAogemxpYi4zLnBkZjogemxpYi4zCiAJZ3JvZmYgLW1hbmRvYyAtZiBIIC1UIHBzIHpsaWIuMyB8IHBzMnBkZiAtIHpsaWIuMy5wZGYKIAotemNvbmYuaC5pbjogemNvbmYuaC5jbWFrZWluCi0Jc2VkICIvXiNjbWFrZWRlZmluZS9EIiA8IHpjb25mLmguY21ha2VpbiA+IHpjb25mLmguaW4KLQl0b3VjaCAtciB6Y29uZi5oLmNtYWtlaW4gemNvbmYuaC5pbgoremNvbmYuaC5jbWFrZWluOiB6Y29uZi5oLmluCisJLUAgVEVNUEZJTEU9emNvbmZoXyQkOyBcCisJZWNobyAiLyNkZWZpbmUgWkNPTkZfSC8gYVxcXFxcbiNjbWFrZWRlZmluZSBaX1BSRUZJWFxcXFxcbiNjbWFrZWRlZmluZSBaX0hBVkVfVU5JU1REX0hcbiIgPj4gJCRURU1QRklMRSAmJlwKKwlzZWQgLWYgJCRURU1QRklMRSB6Y29uZi5oLmluID4gemNvbmYuaC5jbWFrZWluICYmXAorCXRvdWNoIC1yIHpjb25mLmguaW4gemNvbmYuaC5jbWFrZWluICYmXAorCXJtICQkVEVNUEZJTEUKIAogemNvbmY6IHpjb25mLmguaW4KIAljcCAtcCB6Y29uZi5oLmluIHpjb25mLmgKQEAgLTIxNiwxMyArMjQ0LDE2IEBACiAJcm0gLWYgKi5vICoubG8gKn4gXAogCSAgIGV4YW1wbGUkKEVYRSkgbWluaWd6aXAkKEVYRSkgZXhhbXBsZXNoJChFWEUpIG1pbmlnemlwc2gkKEVYRSkgXAogCSAgIGV4YW1wbGU2NCQoRVhFKSBtaW5pZ3ppcDY0JChFWEUpIFwKKwkgICBpbmZjb3ZlciBcCiAJICAgbGliei4qIGZvby5neiBzb19sb2NhdGlvbnMgXAogCSAgIF9tYXRjaC5zIG1ha2V0cmVlIGNvbnRyaWIvaW5mYmFjazkvKi5vCiAJcm0gLXJmIG9ianMKKwlybSAtZiAqLmdjZGEgKi5nY25vICouZ2NvdgorCXJtIC1mIGNvbnRyaWIvaW5mYmFjazkvKi5nY2RhIGNvbnRyaWIvaW5mYmFjazkvKi5nY25vIGNvbnRyaWIvaW5mYmFjazkvKi5nY292CiAKIG1haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgotZGlzdGNsZWFuOiBjbGVhbiB6Y29uZiBkb2NzCi0Jcm0gLWYgTWFrZWZpbGUgemxpYi5wYworZGlzdGNsZWFuOiBjbGVhbiB6Y29uZiB6Y29uZi5oLmNtYWtlaW4gZG9jcworCXJtIC1mIE1ha2VmaWxlIHpsaWIucGMgY29uZmlndXJlLmxvZwogCS1Acm0gLWYgLkRTX1N0b3JlCiAJLUBwcmludGYgJ2FsbDpcblx0LUBlY2hvICJQbGVhc2UgdXNlIC4vY29uZmlndXJlIGZpcnN0LiAgVGhhbmsgeW91LiJcbicgPiBNYWtlZmlsZQogCS1AcHJpbnRmICdcbmRpc3RjbGVhbjpcblx0bWFrZSAtZiBNYWtlZmlsZS5pbiBkaXN0Y2xlYW5cbicgPj4gTWFrZWZpbGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9SRUFETUUgYi9Nb2R1bGVzL3psaWIvUkVBRE1FCmluZGV4IGQ0MjE5YmYuLjVjYTlkMTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9SRUFETUUKKysrIGIvTW9kdWxlcy96bGliL1JFQURNRQpAQCAtMSwyMiArMSwyMiBAQAogWkxJQiBEQVRBIENPTVBSRVNTSU9OIExJQlJBUlkKIAotemxpYiAxLjIuNSBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUgaXMKK3psaWIgMS4yLjggaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCiB0aHJlYWQgc2FmZS4gIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MKIChSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcwotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MS50eHQgKGRlZmxhdGUgZm9ybWF0KQotYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUwICh6bGliIGZvcm1hdCksIHJmYzE5NTEgKGRlZmxhdGUgZm9ybWF0KSBhbmQKK3JmYzE5NTIgKGd6aXAgZm9ybWF0KS4KIAogQWxsIGZ1bmN0aW9ucyBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSB6bGliLmgKICh2b2x1bnRlZXIgdG8gd3JpdGUgbWFuIHBhZ2VzIHdlbGNvbWUsIGNvbnRhY3QgemxpYkBnemlwLm9yZykuICBBIHVzYWdlIGV4YW1wbGUKLW9mIHRoZSBsaWJyYXJ5IGlzIGdpdmVuIGluIHRoZSBmaWxlIGV4YW1wbGUuYyB3aGljaCBhbHNvIHRlc3RzIHRoYXQgdGhlIGxpYnJhcnkKLWlzIHdvcmtpbmcgY29ycmVjdGx5LiAgQW5vdGhlciBleGFtcGxlIGlzIGdpdmVuIGluIHRoZSBmaWxlIG1pbmlnemlwLmMuICBUaGUKLWNvbXByZXNzaW9uIGxpYnJhcnkgaXRzZWxmIGlzIGNvbXBvc2VkIG9mIGFsbCBzb3VyY2UgZmlsZXMgZXhjZXB0IGV4YW1wbGUuYyBhbmQKLW1pbmlnemlwLmMuCitvZiB0aGUgbGlicmFyeSBpcyBnaXZlbiBpbiB0aGUgZmlsZSB0ZXN0L2V4YW1wbGUuYyB3aGljaCBhbHNvIHRlc3RzIHRoYXQKK3RoZSBsaWJyYXJ5IGlzIHdvcmtpbmcgY29ycmVjdGx5LiAgQW5vdGhlciBleGFtcGxlIGlzIGdpdmVuIGluIHRoZSBmaWxlCit0ZXN0L21pbmlnemlwLmMuICBUaGUgY29tcHJlc3Npb24gbGlicmFyeSBpdHNlbGYgaXMgY29tcG9zZWQgb2YgYWxsIHNvdXJjZQorZmlsZXMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LgogCiBUbyBjb21waWxlIGFsbCBmaWxlcyBhbmQgcnVuIHRoZSB0ZXN0IHByb2dyYW0sIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmVuIGF0CiB0aGUgdG9wIG9mIE1ha2VmaWxlLmluLiAgSW4gc2hvcnQgIi4vY29uZmlndXJlOyBtYWtlIHRlc3QiLCBhbmQgaWYgdGhhdCBnb2VzCi13ZWxsLCAibWFrZSBpbnN0YWxsIiBzaG91bGQgd29yayBmb3IgbW9zdCBmbGF2b3JzIG9mIFVuaXguICBGb3IgV2luZG93cywgdXNlIG9uZQotb2YgdGhlIHNwZWNpYWwgbWFrZWZpbGVzIGluIHdpbjMyLyBvciBjb250cmliL3ZzdHVkaW8vIC4gIEZvciBWTVMsIHVzZQord2VsbCwgIm1ha2UgaW5zdGFsbCIgc2hvdWxkIHdvcmsgZm9yIG1vc3QgZmxhdm9ycyBvZiBVbml4LiAgRm9yIFdpbmRvd3MsIHVzZQorb25lIG9mIHRoZSBzcGVjaWFsIG1ha2VmaWxlcyBpbiB3aW4zMi8gb3IgY29udHJpYi92c3R1ZGlvLyAuICBGb3IgVk1TLCB1c2UKIG1ha2Vfdm1zLmNvbS4KIAogUXVlc3Rpb25zIGFib3V0IHpsaWIgc2hvdWxkIGJlIHNlbnQgdG8gPHpsaWJAZ3ppcC5vcmc+LCBvciB0byBHaWxsZXMgVm9sbGFudApAQCAtMzEsNyArMzEsNyBAQAogaXNzdWUgb2YgRHIuICBEb2JiJ3MgSm91cm5hbDsgYSBjb3B5IG9mIHRoZSBhcnRpY2xlIGlzIGF2YWlsYWJsZSBhdAogaHR0cDovL21hcmtuZWxzb24udXMvMTk5Ny8wMS8wMS96bGliLWVuZ2luZS8gLgogCi1UaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4yLjUgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgorVGhlIGNoYW5nZXMgbWFkZSBpbiB2ZXJzaW9uIDEuMi44IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KIAogVW5zdXBwb3J0ZWQgdGhpcmQgcGFydHkgY29udHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5IGNvbnRyaWIvIC4KIApAQCAtNDQsNyArNDQsNyBAQAogCiBBIFB5dGhvbiBpbnRlcmZhY2UgdG8gemxpYiB3cml0dGVuIGJ5IEEuTS4gS3VjaGxpbmcgPGFta0BhbWsuY2E+IGlzCiBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIgdmVyc2lvbnMsIHNlZQotaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9saWIvbW9kdWxlLXpsaWIuaHRtbCAuCitodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvemxpYi5odG1sIC4KIAogemxpYiBpcyBidWlsdCBpbnRvIHRjbDogaHR0cDovL3dpa2kudGNsLnRrLzQ2MTAgLgogCkBAIC04NCw3ICs4NCw3IEBACiAKIENvcHlyaWdodCBub3RpY2U6CiAKLSAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIAogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jIGIvTW9kdWxlcy96bGliL2FkbGVyMzIuYwppbmRleCA2NWFkNmE1Li5hODY4ZjA3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jCisrKyBiL01vZHVsZXMvemxpYi9hZGxlcjMyLmMKQEAgLTEsNSArMSw1IEBACiAvKiBhZGxlcjMyLmMgLS0gY29tcHV0ZSB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgYSBkYXRhIHN0cmVhbQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDcgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTEgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTksOSArOSw5IEBACiAKICNkZWZpbmUgbG9jYWwgc3RhdGljCiAKLWxvY2FsIHVMb25nIGFkbGVyMzJfY29tYmluZV8odUxvbmcgYWRsZXIxLCB1TG9uZyBhZGxlcjIsIHpfb2ZmNjRfdCBsZW4yKTsKK2xvY2FsIHVMb25nIGFkbGVyMzJfY29tYmluZV8gT0YoKHVMb25nIGFkbGVyMSwgdUxvbmcgYWRsZXIyLCB6X29mZjY0X3QgbGVuMikpOwogCi0jZGVmaW5lIEJBU0UgNjU1MjFVTCAgICAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLworI2RlZmluZSBCQVNFIDY1NTIxICAgICAgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KICNkZWZpbmUgTk1BWCA1NTUyCiAvKiBOTUFYIGlzIHRoZSBsYXJnZXN0IG4gc3VjaCB0aGF0IDI1NW4obisxKS8yICsgKG4rMSkoQkFTRS0xKSA8PSAyXjMyLTEgKi8KIApAQCAtMjEsMzkgKzIxLDQ0IEBACiAjZGVmaW5lIERPOChidWYsaSkgIERPNChidWYsaSk7IERPNChidWYsaSs0KTsKICNkZWZpbmUgRE8xNihidWYpICAgRE84KGJ1ZiwwKTsgRE84KGJ1Ziw4KTsKIAotLyogdXNlIE5PX0RJVklERSBpZiB5b3VyIHByb2Nlc3NvciBkb2VzIG5vdCBkbyBkaXZpc2lvbiBpbiBoYXJkd2FyZSAqLworLyogdXNlIE5PX0RJVklERSBpZiB5b3VyIHByb2Nlc3NvciBkb2VzIG5vdCBkbyBkaXZpc2lvbiBpbiBoYXJkd2FyZSAtLQorICAgdHJ5IGl0IGJvdGggd2F5cyB0byBzZWUgd2hpY2ggaXMgZmFzdGVyICovCiAjaWZkZWYgTk9fRElWSURFCi0jICBkZWZpbmUgTU9EKGEpIFwKKy8qIG5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgQkFTRSBpcyA2NTUyMSwgd2hlcmUgNjU1MzYgJSA2NTUyMSA9PSAxNQorICAgKHRoYW5rIHlvdSB0byBKb2huIFJlaXNlciBmb3IgcG9pbnRpbmcgdGhpcyBvdXQpICovCisjICBkZWZpbmUgQ0hPUChhKSBcCiAgICAgZG8geyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDE2KSkgYSAtPSAoQkFTRSA8PCAxNik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTUpKSBhIC09IChCQVNFIDw8IDE1KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxNCkpIGEgLT0gKEJBU0UgPDwgMTQpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEzKSkgYSAtPSAoQkFTRSA8PCAxMyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTIpKSBhIC09IChCQVNFIDw8IDEyKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMSkpIGEgLT0gKEJBU0UgPDwgMTEpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEwKSkgYSAtPSAoQkFTRSA8PCAxMCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgOSkpIGEgLT0gKEJBU0UgPDwgOSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgOCkpIGEgLT0gKEJBU0UgPDwgOCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNykpIGEgLT0gKEJBU0UgPDwgNyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNikpIGEgLT0gKEJBU0UgPDwgNik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNSkpIGEgLT0gKEJBU0UgPDwgNSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNCkpIGEgLT0gKEJBU0UgPDwgNCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMykpIGEgLT0gKEJBU0UgPDwgMyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMikpIGEgLT0gKEJBU0UgPDwgMik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMSkpIGEgLT0gKEJBU0UgPDwgMSk7IFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhmZmZmVUw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBNT0QyOChhKSBcCisgICAgZG8geyBcCisgICAgICAgIENIT1AoYSk7IFwKICAgICAgICAgaWYgKGEgPj0gQkFTRSkgYSAtPSBCQVNFOyBcCiAgICAgfSB3aGlsZSAoMCkKLSMgIGRlZmluZSBNT0Q0KGEpIFwKKyMgIGRlZmluZSBNT0QoYSkgXAogICAgIGRvIHsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA0KSkgYSAtPSAoQkFTRSA8PCA0KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAzKSkgYSAtPSAoQkFTRSA8PCAzKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAyKSkgYSAtPSAoQkFTRSA8PCAyKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxKSkgYSAtPSAoQkFTRSA8PCAxKTsgXAorICAgICAgICBDSE9QKGEpOyBcCisgICAgICAgIE1PRDI4KGEpOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBNT0Q2MyhhKSBcCisgICAgZG8geyAvKiB0aGlzIGFzc3VtZXMgYSBpcyBub3QgbmVnYXRpdmUgKi8gXAorICAgICAgICB6X29mZjY0X3QgdG1wID0gYSA+PiAzMjsgXAorICAgICAgICBhICY9IDB4ZmZmZmZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA4KSAtICh0bXAgPDwgNSkgKyB0bXA7IFwKKyAgICAgICAgdG1wID0gYSA+PiAxNjsgXAorICAgICAgICBhICY9IDB4ZmZmZkw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCisgICAgICAgIHRtcCA9IGEgPj4gMTY7IFwKKyAgICAgICAgYSAmPSAweGZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA0KSAtIHRtcDsgXAogICAgICAgICBpZiAoYSA+PSBCQVNFKSBhIC09IEJBU0U7IFwKICAgICB9IHdoaWxlICgwKQogI2Vsc2UKICMgIGRlZmluZSBNT0QoYSkgYSAlPSBCQVNFCi0jICBkZWZpbmUgTU9ENChhKSBhICU9IEJBU0UKKyMgIGRlZmluZSBNT0QyOChhKSBhICU9IEJBU0UKKyMgIGRlZmluZSBNT0Q2MyhhKSBhICU9IEJBU0UKICNlbmRpZgogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC05Miw3ICs5Nyw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGFkbGVyID49IEJBU0UpCiAgICAgICAgICAgICBhZGxlciAtPSBCQVNFOwotICAgICAgICBNT0Q0KHN1bTIpOyAgICAgICAgICAgICAvKiBvbmx5IGFkZGVkIHNvIG1hbnkgQkFTRSdzICovCisgICAgICAgIE1PRDI4KHN1bTIpOyAgICAgICAgICAgIC8qIG9ubHkgYWRkZWQgc28gbWFueSBCQVNFJ3MgKi8KICAgICAgICAgcmV0dXJuIGFkbGVyIHwgKHN1bTIgPDwgMTYpOwogICAgIH0KIApAQCAtMTM3LDggKzE0MiwxMyBAQAogICAgIHVuc2lnbmVkIGxvbmcgc3VtMjsKICAgICB1bnNpZ25lZCByZW07CiAKKyAgICAvKiBmb3IgbmVnYXRpdmUgbGVuLCByZXR1cm4gaW52YWxpZCBhZGxlcjMyIGFzIGEgY2x1ZSBmb3IgZGVidWdnaW5nICovCisgICAgaWYgKGxlbjIgPCAwKQorICAgICAgICByZXR1cm4gMHhmZmZmZmZmZlVMOworCiAgICAgLyogdGhlIGRlcml2YXRpb24gb2YgdGhpcyBmb3JtdWxhIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIgKi8KLSAgICByZW0gPSAodW5zaWduZWQpKGxlbjIgJSBCQVNFKTsKKyAgICBNT0Q2MyhsZW4yKTsgICAgICAgICAgICAgICAgLyogYXNzdW1lcyBsZW4yID49IDAgKi8KKyAgICByZW0gPSAodW5zaWduZWQpbGVuMjsKICAgICBzdW0xID0gYWRsZXIxICYgMHhmZmZmOwogICAgIHN1bTIgPSByZW0gKiBzdW0xOwogICAgIE1PRChzdW0yKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9hbGdvcml0aG0udHh0IGIvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKaW5kZXggYjAyMmRkZS4uYzk3ZjQ5NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKKysrIGIvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKQEAgLTEyMSw3ICsxMjEsNyBAQAoga2J5dGVzLiAgWW91IGNhbiBpbWFnaW5lIHRoYXQgZmlsbGluZyBpbiBhIDJeMTUgZW50cnkgdGFibGUgZm9yIGEgMTUtYml0IGNvZGUKIHdvdWxkIHRha2UgdG9vIGxvbmcgaWYgeW91J3JlIG9ubHkgZGVjb2Rpbmcgc2V2ZXJhbCB0aG91c2FuZCBzeW1ib2xzLiAgQXQgdGhlCiBvdGhlciBleHRyZW1lLCB5b3UgY291bGQgbWFrZSBhIG5ldyB0YWJsZSBmb3IgZXZlcnkgYml0IGluIHRoZSBjb2RlLiAgSW4gZmFjdCwKLXRoYXQncyBlc3NlbnRpYWxseSBhIEh1ZmZtYW4gdHJlZS4gIEJ1dCB0aGVuIHlvdSBzcGVuZCB0d28gbXVjaCB0aW1lCit0aGF0J3MgZXNzZW50aWFsbHkgYSBIdWZmbWFuIHRyZWUuICBCdXQgdGhlbiB5b3Ugc3BlbmQgdG9vIG11Y2ggdGltZQogdHJhdmVyc2luZyB0aGUgdHJlZSB3aGlsZSBkZWNvZGluZywgZXZlbiBmb3Igc2hvcnQgc3ltYm9scy4KIAogU28gdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUgZmlyc3QgbG9va3VwIHRhYmxlIGlzIGEgdHJhZGUgb2YgdGhlIHRpbWUgdG8KQEAgLTIwNiw0ICsyMDYsNCBAQAogcHAuIDMzNy0zNDMuCiAKIGBgREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24nJyBhdmFpbGFibGUgaW4KLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0CitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYyBiL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCmluZGV4IGVhNGRmYmUuLjZlOTc2MjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCisrKyBiL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgel9zdHJlYW0gc3RyZWFtOwogICAgIGludCBlcnI7CiAKLSAgICBzdHJlYW0ubmV4dF9pbiA9IChCeXRlZiopc291cmNlOworICAgIHN0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilzb3VyY2U7CiAgICAgc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc291cmNlTGVuOwogI2lmZGVmIE1BWFNFR182NEsKICAgICAvKiBDaGVjayBmb3Igc291cmNlID4gNjRLIG9uIDE2LWJpdCBtYWNoaW5lOiAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NvbmZpZ3VyZSBiL01vZHVsZXMvemxpYi9jb25maWd1cmUKaW5kZXggYmQ5ZWRkMi4uYjc3YThhOCAxMDA3NTUKLS0tIGEvTW9kdWxlcy96bGliL2NvbmZpZ3VyZQorKysgYi9Nb2R1bGVzL3psaWIvY29uZmlndXJlCkBAIC0xMywzOSArMTMsNTIgQEAKICMgSWYgeW91IGhhdmUgcHJvYmxlbXMsIHRyeSB3aXRob3V0IGRlZmluaW5nIENDIGFuZCBDRkxBR1MgYmVmb3JlIHJlcG9ydGluZwogIyBhbiBlcnJvci4KIAorIyBzdGFydCBvZmYgY29uZmlndXJlLmxvZworZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLSA+PiBjb25maWd1cmUubG9nCitlY2hvICQwICQqID4+IGNvbmZpZ3VyZS5sb2cKK2RhdGUgPj4gY29uZmlndXJlLmxvZworCisjIHNldCBjb21tYW5kIHByZWZpeCBmb3IgY3Jvc3MtY29tcGlsYXRpb24KIGlmIFsgLW4gIiR7Q0hPU1R9IiBdOyB0aGVuCi0gICAgdW5hbWU9IiQoZWNobyAiJHtDSE9TVH0iIHwgc2VkIC1lICdzL15bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpLS4qJC9cMS8nKSIKKyAgICB1bmFtZT0iYGVjaG8gIiR7Q0hPU1R9IiB8IHNlZCAtZSAncy9eW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKS0uKiQvXDEvJ2AiCiAgICAgQ1JPU1NfUFJFRklYPSIke0NIT1NUfS0iCiBmaQogCisjIGRlc3RpbmF0aW9uIG5hbWUgZm9yIHN0YXRpYyBsaWJyYXJ5CiBTVEFUSUNMSUI9bGliei5hCi1MREZMQUdTPSIke0xERkxBR1N9IC1MLiAke1NUQVRJQ0xJQn0iCisKKyMgZXh0cmFjdCB6bGliIHZlcnNpb24gbnVtYmVycyBmcm9tIHpsaWIuaAogVkVSPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKC4qXCkiLiovXDEvcCcgPCB6bGliLmhgCiBWRVIzPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlxcLlswLTldKlxcLlswLTldKlwpLiovXDEvcCcgPCB6bGliLmhgCiBWRVIyPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlxcLlswLTldKlwpXFwuLiovXDEvcCcgPCB6bGliLmhgCiBWRVIxPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlwpXFwuLiovXDEvcCcgPCB6bGliLmhgCisKKyMgZXN0YWJsaXNoIGNvbW1hbmRzIGZvciBsaWJyYXJ5IGJ1aWxkaW5nCiBpZiAiJHtDUk9TU19QUkVGSVh9YXIiIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgogICAgIEFSPSR7QVItIiR7Q1JPU1NfUFJFRklYfWFyIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIEFSPSR7QVItImFyIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZmkKLUFSX1JDPSIke0FSfSByYyIKK0FSRkxBR1M9JHtBUkZMQUdTLSJyYyJ9CiBpZiAiJHtDUk9TU19QUkVGSVh9cmFubGliIiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KICAgICBSQU5MSUI9JHtSQU5MSUItIiR7Q1JPU1NfUFJFRklYfXJhbmxpYiJ9Ci0gICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7UkFOTElCfQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke1JBTkxJQn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIFJBTkxJQj0ke1JBTkxJQi0icmFubGliIn0KIGZpCiBpZiAiJHtDUk9TU19QUkVGSVh9bm0iIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgogICAgIE5NPSR7Tk0tIiR7Q1JPU1NfUFJFRklYfW5tIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtOTX0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtOTX0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIE5NPSR7Tk0tIm5tIn0KIGZpCisKKyMgc2V0IGRlZmF1bHRzIGJlZm9yZSBwcm9jZXNzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zCiBMRENPTkZJRz0ke0xEQ09ORklHLSJsZGNvbmZpZyJ9CiBMRFNIQVJFRExJQkM9IiR7TERTSEFSRURMSUJDLS1sY30iCitBUkNIUz0KIHByZWZpeD0ke3ByZWZpeC0vdXNyL2xvY2FsfQogZXhlY19wcmVmaXg9JHtleGVjX3ByZWZpeC0nJHtwcmVmaXh9J30KIGxpYmRpcj0ke2xpYmRpci0nJHtleGVjX3ByZWZpeH0vbGliJ30KQEAgLTU0LDIwICs2NywzOSBAQAogbWFuZGlyPSR7bWFuZGlyLScke3ByZWZpeH0vc2hhcmUvbWFuJ30KIHNoYXJlZF9leHQ9Jy5zbycKIHNoYXJlZD0xCitzb2xvPTAKK2NvdmVyPTAKIHpwcmVmaXg9MAoremNvbnN0PTAKIGJ1aWxkNjQ9MAogZ2NjPTAKIG9sZF9jYz0iJENDIgogb2xkX2NmbGFncz0iJENGTEFHUyIKK09CSkM9JyQoT0JKWikgJChPQkpHKScKK1BJQ19PQkpDPSckKFBJQ19PQkpaKSAkKFBJQ19PQkpHKScKIAorIyBsZWF2ZSB0aGlzIHNjcmlwdCwgb3B0aW9uYWxseSBpbiBhIGJhZCB3YXkKK2xlYXZlKCkKK3sKKyAgaWYgdGVzdCAiJCoiICE9ICIwIjsgdGhlbgorICAgIGVjaG8gIioqICQwIGFib3J0aW5nLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBmaQorICBybSAtZiAkdGVzdC5bY29dICR0ZXN0ICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QuZ2NubyAuLy0tdmVyc2lvbgorICBlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBleGl0ICQxCit9CisKKyMgcHJvY2VzcyBjb21tYW5kIGxpbmUgb3B0aW9ucwogd2hpbGUgdGVzdCAkIyAtZ2UgMQogZG8KIGNhc2UgIiQxIiBpbgogICAgIC1oKiB8IC0taGVscCkKLSAgICAgIGVjaG8gJ3VzYWdlOicKLSAgICAgIGVjaG8gJyAgY29uZmlndXJlIFstLXpwcmVmaXhdIFstLXByZWZpeD1QUkVGSVhdICBbLS1lcHJlZml4PUVYUFJFRklYXScKLSAgICAgIGVjaG8gJyAgICBbLS1zdGF0aWNdIFstLTY0XSBbLS1saWJkaXI9TElCRElSXSBbLS1zaGFyZWRsaWJkaXI9TElCRElSXScKLSAgICAgIGVjaG8gJyAgICBbLS1pbmNsdWRlZGlyPUlOQ0xVREVESVJdJworICAgICAgZWNobyAndXNhZ2U6JyB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICcgIGNvbmZpZ3VyZSBbLS1jb25zdF0gWy0tenByZWZpeF0gWy0tcHJlZml4PVBSRUZJWF0gIFstLWVwcmVmaXg9RVhQUkVGSVhdJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICcgICAgWy0tc3RhdGljXSBbLS02NF0gWy0tbGliZGlyPUxJQkRJUl0gWy0tc2hhcmVkbGliZGlyPUxJQkRJUl0nIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gJyAgICBbLS1pbmNsdWRlZGlyPUlOQ0xVREVESVJdIFstLWFyY2hzPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCJdJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgICAgIGV4aXQgMCA7OwogICAgIC1wKj0qIHwgLS1wcmVmaXg9KikgcHJlZml4PWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CiAgICAgLWUqPSogfCAtLWVwcmVmaXg9KikgZXhlY19wcmVmaXg9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKQEAgLTgxLDUxICsxMTMsODggQEAKICAgICAtaSogfCAtLWluY2x1ZGVkaXIpIGluY2x1ZGVkaXI9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CiAgICAgLXMqIHwgLS1zaGFyZWQgfCAtLWVuYWJsZS1zaGFyZWQpIHNoYXJlZD0xOyBzaGlmdCA7OwogICAgIC10IHwgLS1zdGF0aWMpIHNoYXJlZD0wOyBzaGlmdCA7OworICAgIC0tc29sbykgc29sbz0xOyBzaGlmdCA7OworICAgIC0tY292ZXIpIGNvdmVyPTE7IHNoaWZ0IDs7CiAgICAgLXoqIHwgLS16cHJlZml4KSB6cHJlZml4PTE7IHNoaWZ0IDs7CiAgICAgLTYqIHwgLS02NCkgYnVpbGQ2ND0xOyBzaGlmdCA7OwotICAgIC0tc3lzY29uZmRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1zeXNjb25mZGlyIjsgc2hpZnQgOzsKLSAgICAtLWxvY2Fsc3RhdGVkaXI9KikgZWNobyAiaWdub3JlZCBvcHRpb246IC0tbG9jYWxzdGF0ZWRpciI7IHNoaWZ0IDs7Ci0gICAgKikgZWNobyAidW5rbm93biBvcHRpb246ICQxIjsgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIjsgZXhpdCAxIDs7CisgICAgLWEqPSogfCAtLWFyY2hzPSopIEFSQ0hTPWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CisgICAgLS1zeXNjb25mZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLXN5c2NvbmZkaXIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2c7IHNoaWZ0IDs7CisgICAgLS1sb2NhbHN0YXRlZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLWxvY2Fsc3RhdGVkaXIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2c7IHNoaWZ0IDs7CisgICAgLWMqIHwgLS1jb25zdCkgemNvbnN0PTE7IHNoaWZ0IDs7CisgICAgKikKKyAgICAgIGVjaG8gInVua25vd24gb3B0aW9uOiAkMSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBsZWF2ZSAxOzsKICAgICBlc2FjCiBkb25lCiAKKyMgdGVtcG9yYXJ5IGZpbGUgbmFtZQogdGVzdD16dGVzdCQkCisKKyMgcHV0IGFyZ3VtZW50cyBpbiBsb2csIGFsc28gcHV0IHRlc3QgZmlsZSBpbiBsb2cgaWYgdXNlZCBpbiBhcmd1bWVudHMKK3Nob3coKQoreworICBjYXNlICIkKiIgaW4KKyAgICAqJHRlc3QuYyopCisgICAgICBlY2hvID09PSAkdGVzdC5jID09PSA+PiBjb25maWd1cmUubG9nCisgICAgICBjYXQgJHRlc3QuYyA+PiBjb25maWd1cmUubG9nCisgICAgICBlY2hvID09PSA+PiBjb25maWd1cmUubG9nOzsKKyAgZXNhYworICBlY2hvICQqID4+IGNvbmZpZ3VyZS5sb2cKK30KKworIyBjaGVjayBmb3IgZ2NjIHZzLiBjYyBhbmQgc2V0IGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYmFzZWQgb24gdGhlIHN5c3RlbSBpZGVudGlmaWVkIGJ5IHVuYW1lCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiBleHRlcm4gaW50IGdldGNoYXIoKTsKIGludCBoZWxsbygpIHtyZXR1cm4gZ2V0Y2hhcigpO30KIEVPRgogCi10ZXN0IC16ICIkQ0MiICYmIGVjaG8gQ2hlY2tpbmcgZm9yICR7Q1JPU1NfUFJFRklYfWdjYy4uLgordGVzdCAteiAiJENDIiAmJiBlY2hvIENoZWNraW5nIGZvciAke0NST1NTX1BSRUZJWH1nY2MuLi4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogY2M9JHtDQy0ke0NST1NTX1BSRUZJWH1nY2N9CiBjZmxhZ3M9JHtDRkxBR1MtIi1PMyJ9CiAjIHRvIGZvcmNlIHRoZSBhc20gdmVyc2lvbiB1c2U6IENGTEFHUz0iLU8zIC1EQVNNViIgLi9jb25maWd1cmUKIGNhc2UgIiRjYyIgaW4KICAgKmdjYyopIGdjYz0xIDs7CisgICpjbGFuZyopIGdjYz0xIDs7Citlc2FjCitjYXNlIGAkY2MgLXYgMj4mMWAgaW4KKyAgKmdjYyopIGdjYz0xIDs7CiBlc2FjCiAKLWlmIHRlc3QgIiRnY2MiIC1lcSAxICYmICgkY2MgLWMgJGNmbGFncyAkdGVzdC5jKSAyPi9kZXYvbnVsbDsgdGhlbgorc2hvdyAkY2MgLWMgJHRlc3QuYworaWYgdGVzdCAiJGdjYyIgLWVxIDEgJiYgKCRjYyAtYyAkdGVzdC5jKSA+PiBjb25maWd1cmUubG9nIDI+JjE7IHRoZW4KKyAgZWNobyAuLi4gdXNpbmcgZ2NjID4+IGNvbmZpZ3VyZS5sb2cKICAgQ0M9IiRjYyIKKyAgQ0ZMQUdTPSIke0NGTEFHUy0tTzN9ICR7QVJDSFN9IgogICBTRkxBR1M9IiR7Q0ZMQUdTLS1PM30gLWZQSUMiCi0gIENGTEFHUz0iJHtDRkxBR1MtLU8zfSIKKyAgTERGTEFHUz0iJHtMREZMQUdTfSAke0FSQ0hTfSIKICAgaWYgdGVzdCAkYnVpbGQ2NCAtZXEgMTsgdGhlbgogICAgIENGTEFHUz0iJHtDRkxBR1N9IC1tNjQiCiAgICAgU0ZMQUdTPSIke1NGTEFHU30gLW02NCIKICAgZmkKICAgaWYgdGVzdCAiJHtaTElCR0NDV0FSTn0iID0gIllFUyI7IHRoZW4KLSAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCAtV2V4dHJhIC1wZWRhbnRpYyIKKyAgICBpZiB0ZXN0ICIkemNvbnN0IiAtZXEgMTsgdGhlbgorICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwgLVdleHRyYSAtV2Nhc3QtcXVhbCAtcGVkYW50aWMgLURaTElCX0NPTlNUIgorICAgIGVsc2UKKyAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLXBlZGFudGljIgorICAgIGZpCiAgIGZpCiAgIGlmIHRlc3QgLXogIiR1bmFtZSI7IHRoZW4KICAgICB1bmFtZT1gKHVuYW1lIC1zIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgCiAgIGZpCiAgIGNhc2UgIiR1bmFtZSIgaW4KLSAgTGludXgqIHwgbGludXgqIHwgR05VIHwgR05VLyogfCAqQlNEIHwgRHJhZ29uRmx5KSBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCx6bGliLm1hcCJ9IDs7CisgIExpbnV4KiB8IGxpbnV4KiB8IEdOVSB8IEdOVS8qIHwgc29sYXJpcyopCisgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtc29uYW1lLGxpYnouc28uMSwtLXZlcnNpb24tc2NyaXB0LHpsaWIubWFwIn0gOzsKKyAgKkJTRCB8ICpic2QqIHwgRHJhZ29uRmx5KQorICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCx6bGliLm1hcCJ9CisgICAgICAgIExEQ09ORklHPSJsZGNvbmZpZyAtbSIgOzsKICAgQ1lHV0lOKiB8IEN5Z3dpbiogfCBjeWd3aW4qIHwgT1MvMiopCiAgICAgICAgIEVYRT0nLmV4ZScgOzsKLSAgTUlOR1cqfG1pbmd3KikKKyAgTUlOR1cqIHwgbWluZ3cqKQogIyB0ZW1wb3JhcnkgYnlwYXNzCiAgICAgICAgIHJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dAotICAgICAgICBlY2hvICJQbGVhc2UgdXNlIHdpbjMyL01ha2VmaWxlLmdjYyBpbnN0ZWFkLiIKLSAgICAgICAgZXhpdCAxCisgICAgICAgIGVjaG8gIlBsZWFzZSB1c2Ugd2luMzIvTWFrZWZpbGUuZ2NjIGluc3RlYWQuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICAgIGxlYXZlIDEKICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQifQogICAgICAgICBMRFNIQVJFRExJQkM9IiIKICAgICAgICAgRVhFPScuZXhlJyA7OwpAQCAtMTQyLDE3ICsyMTEsMjUgQEAKICAgICAgICAgICAgICAgICAgc2hhcmVkX2V4dD0nLnNsJwogICAgICAgICAgICAgICAgICBTSEFSRURMSUI9J2xpYnouc2wnIDs7CiAgICAgICAgICBlc2FjIDs7Ci0gIERhcndpbiopICAgc2hhcmVkX2V4dD0nLmR5bGliJworICBEYXJ3aW4qIHwgZGFyd2luKikKKyAgICAgICAgICAgICBzaGFyZWRfZXh0PScuZHlsaWInCiAgICAgICAgICAgICAgU0hBUkVETElCPWxpYnokc2hhcmVkX2V4dAogICAgICAgICAgICAgIFNIQVJFRExJQlY9bGliei4kVkVSJHNoYXJlZF9leHQKICAgICAgICAgICAgICBTSEFSRURMSUJNPWxpYnouJFZFUjEkc2hhcmVkX2V4dAotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtZHluYW1pY2xpYiAtaW5zdGFsbF9uYW1lICRsaWJkaXIvJFNIQVJFRExJQk0gLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkVkVSMSAtY3VycmVudF92ZXJzaW9uICRWRVIzIn0gOzsKKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLWR5bmFtaWNsaWIgLWluc3RhbGxfbmFtZSAkbGliZGlyLyRTSEFSRURMSUJNIC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJFZFUjEgLWN1cnJlbnRfdmVyc2lvbiAkVkVSMyJ9CisgICAgICAgICAgICAgaWYgbGlidG9vbCAtViAyPiYxIHwgZ3JlcCBBcHBsZSA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgICBBUj0ibGlidG9vbCIKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIEFSPSIvdXNyL2Jpbi9saWJ0b29sIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQVJGTEFHUz0iLW8iIDs7CiAgICopICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIn0gOzsKICAgZXNhYwogZWxzZQogICAjIGZpbmQgc3lzdGVtIG5hbWUgYW5kIGNvcnJlc3BvbmRpbmcgY2Mgb3B0aW9ucwogICBDQz0ke0NDLWNjfQogICBnY2M9MAorICBlY2hvIC4uLiB1c2luZyAkQ0MgPj4gY29uZmlndXJlLmxvZwogICBpZiB0ZXN0IC16ICIkdW5hbWUiOyB0aGVuCiAgICAgdW5hbWU9YCh1bmFtZSAtc3IgfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAKICAgZmkKQEAgLTE4MywxOSArMjYwLDM0IEBACiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItNCAtTyJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MifQogICAgICAgICAgICAgIFJBTkxJQj0ke1JBTkxJQi0idHJ1ZSJ9Ci0gICAgICAgICAgICAgQVJfUkM9ImNjIC1BIiA7OworICAgICAgICAgICAgIEFSPSJjYyIKKyAgICAgICAgICAgICBBUkZMQUdTPSItQSIgOzsKICAgU0NPX1NWXCAzLjIqKSBTRkxBR1M9JHtDRkxBR1MtIi1PMyAtZHkgLUtQSUMgIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PMyJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLWR5IC1LUElDIC1HIn0gOzsKLSAgU3VuT1NcIDUqKSBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyJ9Ci0gICAgICAgICBjYXNlIGAodW5hbWUgLW0gfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICAgIGk4NiopCi0gICAgICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSIteHBlbnRpdW0gLWZhc3QgLUtQSUMgLVIuIn0KLSAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi14cGVudGl1bSAtZmFzdCJ9IDs7Ci0gICAgICAgICAqKQotICAgICAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLXhjZzkyIC1LUElDIC1SLiJ9Ci0gICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCAteGNnOTIifSA7OwotICAgICAgICAgZXNhYyA7OworICBTdW5PU1wgNSogfCBzb2xhcmlzKikKKyAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIC1oIGxpYnokc2hhcmVkX2V4dC4kVkVSMSJ9CisgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC1LUElDIn0KKyAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLWZhc3QifQorICAgICAgICAgaWYgdGVzdCAkYnVpbGQ2NCAtZXEgMTsgdGhlbgorICAgICAgICAgICAgICMgb2xkIHZlcnNpb25zIG9mIFN1blBSTy9Xb3Jrc2hvcC9TdHVkaW8gZG9uJ3Qgc3VwcG9ydCAtbTY0LAorICAgICAgICAgICAgICMgYnV0IG5ld2VyIG9uZXMgZG8uICBDaGVjayBmb3IgaXQuCisgICAgICAgICAgICAgZmxhZzY0PWAkQ0MgLWZsYWdzIHwgZWdyZXAgLS0gJ14tbTY0J2AKKyAgICAgICAgICAgICBpZiB0ZXN0IHgiJGZsYWc2NCIgIT0geCIiIDsgdGhlbgorICAgICAgICAgICAgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtbTY0IgorICAgICAgICAgICAgICAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtbTY0IgorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgY2FzZSBgKHVuYW1lIC1tIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCisgICAgICAgICAgICAgICAgICAgaTg2KikKKyAgICAgICAgICAgICAgICAgICAgIFNGTEFHUz0iJFNGTEFHUyAteGFyY2g9YW1kNjQiCisgICAgICAgICAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXhhcmNoPWFtZDY0IiA7OworICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICBTRkxBR1M9IiRTRkxBR1MgLXhhcmNoPXY5IgorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC14YXJjaD12OSIgOzsKKyAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICAgICAgOzsKICAgU3VuT1NcIDQqKSBTRkxBR1M9JHtDRkxBR1MtIi1PMiAtUElDIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PMiJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0ibGQifSA7OwpAQCAtMjI1LDI1ICszMTcsNzkgQEAKICAgZXNhYwogZmkKIAorIyBkZXN0aW5hdGlvbiBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcnkgaWYgbm90IGRlZmluZWQgYWJvdmUKIFNIQVJFRExJQj0ke1NIQVJFRExJQi0ibGlieiRzaGFyZWRfZXh0In0KIFNIQVJFRExJQlY9JHtTSEFSRURMSUJWLSJsaWJ6JHNoYXJlZF9leHQuJFZFUiJ9CiBTSEFSRURMSUJNPSR7U0hBUkVETElCTS0ibGlieiRzaGFyZWRfZXh0LiRWRVIxIn0KIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgZGVmaW5lIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBjb21waWxlciBhbmQgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MgYW5kIGxvZ2dpbmcgdGhlIHJlc3VsdHMKKworY2F0ID4gJHRlc3QuYyA8PEVPRgorI2Vycm9yIGVycm9yCitFT0YKK2lmICgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPi9kZXYvbnVsbDsgdGhlbgorICB0cnkoKQorICB7CisgICAgc2hvdyAkKgorICAgIHRlc3QgImAoICQqICkgMj4mMSB8IHRlZSAtYSBjb25maWd1cmUubG9nYCIgPSAiIgorICB9CisgIGVjaG8gLSB1c2luZyBhbnkgb3V0cHV0IGZyb20gY29tcGlsZXIgdG8gaW5kaWNhdGUgYW4gZXJyb3IgPj4gY29uZmlndXJlLmxvZworZWxzZQordHJ5KCkKK3sKKyAgc2hvdyAkKgorICAoICQqICkgPj4gY29uZmlndXJlLmxvZyAyPiYxCisgIHJldD0kPworICBpZiB0ZXN0ICRyZXQgLW5lIDA7IHRoZW4KKyAgICBlY2hvICIoZXhpdCBjb2RlICIkcmV0IikiID4+IGNvbmZpZ3VyZS5sb2cKKyAgZmkKKyAgcmV0dXJuICRyZXQKK30KK2ZpCisKK3RyeWJvdGgoKQoreworICBzaG93ICQqCisgIGdvdD1gKCAkKiApIDI+JjFgCisgIHJldD0kPworICBwcmludGYgJXMgIiRnb3QiID4+IGNvbmZpZ3VyZS5sb2cKKyAgaWYgdGVzdCAkcmV0IC1uZSAwOyB0aGVuCisgICAgcmV0dXJuICRyZXQKKyAgZmkKKyAgdGVzdCAiJGdvdCIgPSAiIgorfQorCitjYXQgPiAkdGVzdC5jIDw8IEVPRgoraW50IGZvbygpIHsgcmV0dXJuIDA7IH0KK0VPRgorZWNobyAiQ2hlY2tpbmcgZm9yIG9ic2Vzc2l2ZS1jb21wdWxzaXZlIGNvbXBpbGVyIG9wdGlvbnMuLi4iID4+IGNvbmZpZ3VyZS5sb2cKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiQ29tcGlsZXIgZXJyb3IgcmVwb3J0aW5nIGlzIHRvbyBoYXJzaCBmb3IgJDAgKHBlcmhhcHMgcmVtb3ZlIC1XZXJyb3IpLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBsZWF2ZSAxCitmaQorCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBzZWUgaWYgc2hhcmVkIGxpYnJhcnkgYnVpbGQgc3VwcG9ydGVkCitjYXQgPiAkdGVzdC5jIDw8RU9GCitleHRlcm4gaW50IGdldGNoYXIoKTsKK2ludCBoZWxsbygpIHtyZXR1cm4gZ2V0Y2hhcigpO30KK0VPRgogaWYgdGVzdCAkc2hhcmVkIC1lcSAxOyB0aGVuCi0gIGVjaG8gQ2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuLi4KKyAgZWNobyBDaGVja2luZyBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4uLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICMgd2UgbXVzdCB0ZXN0IGluIHR3byBzdGVwcyAoY2MgdGhlbiBsZCksIHJlcXVpcmVkIGF0IGxlYXN0IG9uIFN1bk9TIDQueAotICBpZiB0ZXN0ICJgKCRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiICYmCi0gICAgIHRlc3QgImAoJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gQnVpbGRpbmcgc2hhcmVkIGxpYnJhcnkgJFNIQVJFRExJQlYgd2l0aCAkQ0MuCisgIGlmIHRyeSAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jICYmCisgICAgIHRyeSAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm87IHRoZW4KKyAgICBlY2hvIEJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJ5ICRTSEFSRURMSUJWIHdpdGggJENDLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGVsaWYgdGVzdCAteiAiJG9sZF9jYyIgLWEgLXogIiRvbGRfY2ZsYWdzIjsgdGhlbgotICAgIGVjaG8gTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4KKyAgICBlY2hvIE5vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBzaGFyZWQ9MDsKICAgZWxzZQotICAgIGVjaG8gVGVzdGVkICRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMKLSAgICAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jCi0gICAgZWNobyBUZXN0ZWQgJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vCi0gICAgJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vCi0gICAgZWNobyAnTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydDsgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUycKKyAgICBlY2hvICdObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0OyB0cnkgd2l0aG91dCBkZWZpbmluZyBDQyBhbmQgQ0ZMQUdTJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgc2hhcmVkPTA7CiAgIGZpCiBmaQpAQCAtMjU0LDI1ICs0MDAsNDMgQEAKICAgU0hBUkVETElCPSIiCiAgIFNIQVJFRExJQlY9IiIKICAgU0hBUkVETElCTT0iIgotICBlY2hvIEJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJ5ICRTVEFUSUNMSUIgdmVyc2lvbiAkVkVSIHdpdGggJENDLgorICBlY2hvIEJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJ5ICRTVEFUSUNMSUIgdmVyc2lvbiAkVkVSIHdpdGggJENDLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCiAgIEFMTD0ic3RhdGljIHNoYXJlZCIKICAgVEVTVD0iYWxsIHRlc3RzdGF0aWMgdGVzdHNoYXJlZCIKIGZpCiAKKyMgY2hlY2sgZm9yIHVuZGVyc2NvcmVzIGluIGV4dGVybmFsIG5hbWVzIGZvciB1c2UgYnkgYXNzZW1ibGVyIGNvZGUKK0NQUD0ke0NQUC0iJENDIC1FIn0KK2Nhc2UgJENGTEFHUyBpbgorICAqQVNNViopCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCisgICAgc2hvdyAiJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsbyIKKyAgICBpZiB0ZXN0ICJgJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsbyB8IHRlZSAtYSBjb25maWd1cmUubG9nYCIgPSAiIjsgdGhlbgorICAgICAgQ1BQPSIkQ1BQIC1ETk9fVU5ERVJMSU5FIgorICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIE5vLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWxzZQorICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIFllcy4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGZpIDs7Citlc2FjCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBsYXJnZSBmaWxlIHN1cHBvcnQsIGFuZCBpZiBub25lLCBjaGVjayBmb3IgZnNlZWtvKCkKIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIG9mZjY0X3QgZHVtbXkgPSAwOwogRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTIC1EX0xBUkdFRklMRTY0X1NPVVJDRT0xICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCitpZiB0cnkgJENDIC1jICRDRkxBR1MgLURfTEFSR0VGSUxFNjRfU09VUkNFPTEgJHRlc3QuYzsgdGhlbgogICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSIKICAgU0ZMQUdTPSIke1NGTEFHU30gLURfTEFSR0VGSUxFNjRfU09VUkNFPTEiCiAgIEFMTD0iJHtBTEx9IGFsbDY0IgogICBURVNUPSIke1RFU1R9IHRlc3Q2NCIKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gWWVzLiIKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIgorICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQotICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBOby4iCisgIGVjaG8gIkNoZWNraW5nIGZvciBvZmY2NF90Li4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiBpbnQgbWFpbih2b2lkKSB7CkBAIC0yODAsMjcyICs0NDQsMzM1IEBACiAgIHJldHVybiAwOwogfQogRU9GCi0gIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iCisgIGlmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGVsc2UKICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRE5PX0ZTRUVLTyIKICAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtRE5PX0ZTRUVLTyIKLSAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIE5vLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBmaQogZmkKIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIHN0cmVycm9yKCkgZm9yIHVzZSBieSBneiogZnVuY3Rpb25zCitjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KK2ludCBtYWluKCkgeyByZXR1cm4gc3RybGVuKHN0cmVycm9yKGVycm5vKSk7IH0KK0VPRgoraWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0cmVycm9yLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2Vsc2UKKyAgQ0ZMQUdTPSIke0NGTEFHU30gLUROT19TVFJFUlJPUiIKKyAgU0ZMQUdTPSIke1NGTEFHU30gLUROT19TVFJFUlJPUiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0cmVycm9yLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZmkKKworIyBjb3B5IGNsZWFuIHpjb25mLmggZm9yIHN1YnNlcXVlbnQgZWRpdHMKIGNwIC1wIHpjb25mLmguaW4gemNvbmYuaAogCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjaGVjayBmb3IgdW5pc3RkLmggYW5kIHNhdmUgcmVzdWx0IGluIHpjb25mLmgKIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDx1bmlzdGQuaD4KIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQogRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgogICBzZWQgPCB6Y29uZi5oICIvXiNpZmRlZiBIQVZFX1VOSVNURF9ILiogbWF5IGJlL3MvZGVmIEhBVkVfVU5JU1REX0hcKC4qXCkgbWF5IGJlLyAxXDEgd2FzLyIgPiB6Y29uZi50ZW1wLmgKICAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIFllcy4iCisgIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCi0gIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBOby4iCisgIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGZpCiAKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBzdGRhcmcuaCBhbmQgc2F2ZSByZXN1bHQgaW4gemNvbmYuaAorY2F0ID4gJHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGFyZy5oPgoraW50IG1haW4oKSB7IHJldHVybiAwOyB9CitFT0YKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIHNlZCA8IHpjb25mLmggIi9eI2lmZGVmIEhBVkVfU1REQVJHX0guKiBtYXkgYmUvcy9kZWYgSEFWRV9TVERBUkdfSFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAorICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAorICBlY2hvICJDaGVja2luZyBmb3Igc3RkYXJnLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICBlY2hvICJDaGVja2luZyBmb3Igc3RkYXJnLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitmaQorCisjIGlmIHRoZSB6XyBwcmVmaXggd2FzIHJlcXVlc3RlZCwgc2F2ZSB0aGF0IGluIHpjb25mLmgKIGlmIHRlc3QgJHpwcmVmaXggLWVxIDE7IHRoZW4KICAgc2VkIDwgemNvbmYuaCAiLyNpZmRlZiBaX1BSRUZJWC4qIG1heSBiZS9zL2RlZiBaX1BSRUZJWFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAogICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAotICBlY2hvICJVc2luZyB6XyBwcmVmaXggb24gYWxsIHN5bWJvbHMuIgorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyAiVXNpbmcgel8gcHJlZml4IG9uIGFsbCBzeW1ib2xzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZmkKIAorIyBpZiAtLXNvbG8gY29tcGlsYXRpb24gd2FzIHJlcXVlc3RlZCwgc2F2ZSB0aGF0IGluIHpjb25mLmggYW5kIHJlbW92ZSBneiBzdHVmZiBmcm9tIG9iamVjdCBsaXN0cworaWYgdGVzdCAkc29sbyAtZXEgMTsgdGhlbgorICBzZWQgJy8jZGVmaW5lIFpDT05GX0gvYVwKKyNkZWZpbmUgWl9TT0xPCisKKycgPCB6Y29uZi5oID4gemNvbmYudGVtcC5oCisgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCitPQkpDPSckKE9CSlopJworUElDX09CSkM9JyQoUElDX09CSlopJworZmkKKworIyBpZiBjb2RlIGNvdmVyYWdlIHRlc3Rpbmcgd2FzIHJlcXVlc3RlZCwgdXNlIG9sZGVyIGdjYyBpZiBkZWZpbmVkLCBlLmcuICJnY2MtNC4yIiBvbiBNYWMgT1MgWAoraWYgdGVzdCAkY292ZXIgLWVxIDE7IHRoZW4KKyAgQ0ZMQUdTPSIke0NGTEFHU30gLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIgorICBpZiB0ZXN0IC1uICIkR0NDX0NMQVNTSUMiOyB0aGVuCisgICAgQ0M9JEdDQ19DTEFTU0lDCisgIGZpCitmaQorCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjb25kdWN0IGEgc2VyaWVzIG9mIHRlc3RzIHRvIHJlc29sdmUgZWlnaHQgcG9zc2libGUgY2FzZXMgb2YgdXNpbmcgInZzIiBvciAicyIgcHJpbnRmIGZ1bmN0aW9ucworIyAodXNpbmcgc3RkYXJnIG9yIG5vdCksIHdpdGggb3Igd2l0aG91dCAibiIgKHByb3Zpbmcgc2l6ZSBvZiBidWZmZXIpLCBhbmQgd2l0aCBvciB3aXRob3V0IGEKKyMgcmV0dXJuIHZhbHVlLiAgVGhlIG1vc3Qgc2VjdXJlIHJlc3VsdCBpcyB2c25wcmludGYoKSB3aXRoIGEgcmV0dXJuIHZhbHVlLiAgc25wcmludGYoKSB3aXRoIGEKKyMgcmV0dXJuIHZhbHVlIGlzIHNlY3VyZSBhcyB3ZWxsLCBidXQgdGhlbiBnenByaW50ZigpIHdpbGwgYmUgbGltaXRlZCB0byAyMCBhcmd1bWVudHMuCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlICJ6Y29uZi5oIgotCiBpbnQgbWFpbigpCiB7CiAjaWZuZGVmIFNUREMKICAgY2hva2UgbWUKICNlbmRpZgotCiAgIHJldHVybiAwOwogfQogRU9GCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyB2c1tuXXByaW50ZigpLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHZzW25dcHJpbnRmKCkuIgotCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLQogaW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwotCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwogICB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7CiAgIHZhX2VuZChhcCk7CiAgIHJldHVybiAwOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7CiB9CiBFT0YKKyAgaWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKLSAgaWYgdGVzdCAiYCgkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCi0KKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgotCiBpbnQgbXl0ZXN0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICBpbnQgbjsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwotCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwogICBuID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOwogICB2YV9lbmQoYXApOwogICByZXR1cm4gbjsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgiSGVsbG8lZFxuIiwgMSkpOwogfQogRU9GCiAKLSAgICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU192c25wcmludGZfdm9pZCIKICAgICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBU192c25wcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBlbHNlCiAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fdnNucHJpbnRmIgogICAgIFNGTEFHUz0iJFNGTEFHUyAtRE5PX3ZzbnByaW50ZiIKLSAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iCi0gICAgZWNobyAiICBXQVJOSU5HOiB2c25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byB2c3ByaW50ZigpLiB6bGliIgotICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IgotICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIFdBUk5JTkc6IHZzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHZzcHJpbnRmKCkuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLQogaW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgaW50IG47CiAgIGNoYXIgYnVmWzIwXTsKICAgdmFfbGlzdCBhcDsKLQogICB2YV9zdGFydChhcCwgZm10KTsKICAgbiA9IHZzcHJpbnRmKGJ1ZiwgZm10LCBhcCk7CiAgIHZhX2VuZChhcCk7CiAgIHJldHVybiBuOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU192c3ByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3ZzcHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBmaQogZWxzZQotICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyBzW25dcHJpbnRmKCkuIgorICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyBzW25dcHJpbnRmKCkuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KIGludCBteXRlc3QoKQogewogICBjaGFyIGJ1ZlsyMF07Ci0KICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgImZvbyIpOwogICByZXR1cm4gMDsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgpKTsKIH0KIEVPRgogCi0gIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCisgIGlmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgotCiBpbnQgbXl0ZXN0KCkKIHsKICAgY2hhciBidWZbMjBdOwotCiAgIHJldHVybiBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMiLCAiZm9vIik7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU19zbnByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3NucHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBlbHNlCiAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fc25wcmludGYiCiAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ETk9fc25wcmludGYiCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iCi0gICAgZWNobyAiICBXQVJOSU5HOiBzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHNwcmludGYoKS4gemxpYiIKLSAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIKLSAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIFdBUk5JTkc6IHNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gc3ByaW50ZigpLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KIGludCBteXRlc3QoKQogewogICBjaGFyIGJ1ZlsyMF07Ci0KICAgcmV0dXJuIHNwcmludGYoYnVmLCAiJXMiLCAiZm9vIik7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfc3ByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3NwcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNwcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZmkKICAgZmkKIGZpCiAKKyMgc2VlIGlmIHdlIGNhbiBoaWRlIHpsaWIgaW50ZXJuYWwgc3ltYm9scyB0aGF0IGFyZSBsaW5rZWQgYmV0d2VlbiBzZXBhcmF0ZSBzb3VyY2UgZmlsZXMKIGlmIHRlc3QgIiRnY2MiIC1lcSAxOyB0aGVuCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiAkdGVzdC5jIDw8RU9GCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykKLSMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCi0jZWxzZQotIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwKLSNlbmRpZgorI2RlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCiBpbnQgWkxJQl9JTlRFUk5BTCBmb287CiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAwOwogfQogRU9GCi0gIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gWWVzLiIKKyAgaWYgdHJ5Ym90aCAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9ISURERU4iCisgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFWRV9ISURERU4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZWxzZQotICAgIENGTEFHUz0iJENGTEFHUyAtRE5PX1ZJWiIKLSAgICBTRkxBR1M9IiRTRkxBR1MgLUROT19WSVoiCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIE5vLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGZpCiBmaQogCi1DUFA9JHtDUFAtIiRDQyAtRSJ9Ci1jYXNlICRDRkxBR1MgaW4KLSAgKkFTTVYqKQotICAgIGlmIHRlc3QgImAkTk0gJHRlc3QubyB8IGdyZXAgX2hlbGxvYCIgPSAiIjsgdGhlbgotICAgICAgQ1BQPSIkQ1BQIC1ETk9fVU5ERVJMSU5FIgotICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIE5vLgotICAgIGVsc2UKLSAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBZZXMuCi0gICAgZmkgOzsKLWVzYWMKKyMgc2hvdyB0aGUgcmVzdWx0cyBpbiB0aGUgbG9nCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQUxMID0gJEFMTCA+PiBjb25maWd1cmUubG9nCitlY2hvIEFSID0gJEFSID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQVJGTEFHUyA9ICRBUkZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQ0MgPSAkQ0MgPj4gY29uZmlndXJlLmxvZworZWNobyBDRkxBR1MgPSAkQ0ZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQ1BQID0gJENQUCA+PiBjb25maWd1cmUubG9nCitlY2hvIEVYRSA9ICRFWEUgPj4gY29uZmlndXJlLmxvZworZWNobyBMRENPTkZJRyA9ICRMRENPTkZJRyA+PiBjb25maWd1cmUubG9nCitlY2hvIExERkxBR1MgPSAkTERGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hvIExEU0hBUkVEID0gJExEU0hBUkVEID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERTSEFSRURMSUJDID0gJExEU0hBUkVETElCQyA+PiBjb25maWd1cmUubG9nCitlY2hvIE9CSkMgPSAkT0JKQyA+PiBjb25maWd1cmUubG9nCitlY2hvIFBJQ19PQkpDID0gJFBJQ19PQkpDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gUkFOTElCID0gJFJBTkxJQiA+PiBjb25maWd1cmUubG9nCitlY2hvIFNGTEFHUyA9ICRTRkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBTSEFSRURMSUIgPSAkU0hBUkVETElCID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0hBUkVETElCTSA9ICRTSEFSRURMSUJNID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0hBUkVETElCViA9ICRTSEFSRURMSUJWID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU1RBVElDTElCID0gJFNUQVRJQ0xJQiA+PiBjb25maWd1cmUubG9nCitlY2hvIFRFU1QgPSAkVEVTVCA+PiBjb25maWd1cmUubG9nCitlY2hvIFZFUiA9ICRWRVIgPj4gY29uZmlndXJlLmxvZworZWNobyBaX1U0ID0gJFpfVTQgPj4gY29uZmlndXJlLmxvZworZWNobyBleGVjX3ByZWZpeCA9ICRleGVjX3ByZWZpeCA+PiBjb25maWd1cmUubG9nCitlY2hvIGluY2x1ZGVkaXIgPSAkaW5jbHVkZWRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIGxpYmRpciA9ICRsaWJkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyBtYW5kaXIgPSAkbWFuZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gcHJlZml4ID0gJHByZWZpeCA+PiBjb25maWd1cmUubG9nCitlY2hvIHNoYXJlZGxpYmRpciA9ICRzaGFyZWRsaWJkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyB1bmFtZSA9ICR1bmFtZSA+PiBjb25maWd1cmUubG9nCiAKLXJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dAotCi0jIHVkcGF0ZSBNYWtlZmlsZQorIyB1ZHBhdGUgTWFrZWZpbGUgd2l0aCB0aGUgY29uZmlndXJlIHJlc3VsdHMKIHNlZCA8IE1ha2VmaWxlLmluICIKIC9eQ0MgKj0vcyM9LiojPSRDQyMKIC9eQ0ZMQUdTICo9L3MjPS4qIz0kQ0ZMQUdTIwpAQCAtNTU3LDcgKzc4NCw4IEBACiAvXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKIC9eU0hBUkVETElCViAqPS9zIz0uKiM9JFNIQVJFRExJQlYjCiAvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIwotL15BUiAqPS9zIz0uKiM9JEFSX1JDIworL15BUiAqPS9zIz0uKiM9JEFSIworL15BUkZMQUdTICo9L3MjPS4qIz0kQVJGTEFHUyMKIC9eUkFOTElCICo9L3MjPS4qIz0kUkFOTElCIwogL15MRENPTkZJRyAqPS9zIz0uKiM9JExEQ09ORklHIwogL15MRFNIQVJFRExJQkMgKj0vcyM9LiojPSRMRFNIQVJFRExJQkMjCkBAIC01NjgsMTAgKzc5NiwxMyBAQAogL15zaGFyZWRsaWJkaXIgKj0vcyM9LiojPSRzaGFyZWRsaWJkaXIjCiAvXmluY2x1ZGVkaXIgKj0vcyM9LiojPSRpbmNsdWRlZGlyIwogL15tYW5kaXIgKj0vcyM9LiojPSRtYW5kaXIjCisvXk9CSkMgKj0vcyM9LiojPSAkT0JKQyMKKy9eUElDX09CSkMgKj0vcyM9LiojPSAkUElDX09CSkMjCiAvXmFsbDogKi9zIzouKiM6ICRBTEwjCiAvXnRlc3Q6ICovcyM6LiojOiAkVEVTVCMKICIgPiBNYWtlZmlsZQogCisjIGNyZWF0ZSB6bGliLnBjIHdpdGggdGhlIGNvbmZpZ3VyZSByZXN1bHRzCiBzZWQgPCB6bGliLnBjLmluICIKIC9eQ0MgKj0vcyM9LiojPSRDQyMKIC9eQ0ZMQUdTICo9L3MjPS4qIz0kQ0ZMQUdTIwpAQCAtNTgxLDcgKzgxMiw4IEBACiAvXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKIC9eU0hBUkVETElCViAqPS9zIz0uKiM9JFNIQVJFRExJQlYjCiAvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIwotL15BUiAqPS9zIz0uKiM9JEFSX1JDIworL15BUiAqPS9zIz0uKiM9JEFSIworL15BUkZMQUdTICo9L3MjPS4qIz0kQVJGTEFHUyMKIC9eUkFOTElCICo9L3MjPS4qIz0kUkFOTElCIwogL15FWEUgKj0vcyM9LiojPSRFWEUjCiAvXnByZWZpeCAqPS9zIz0uKiM9JHByZWZpeCMKQEAgLTU5NCwzICs4MjYsNiBAQAogIiB8IHNlZCAtZSAiCiBzL1xAVkVSU0lPTlxALyRWRVIvZzsKICIgPiB6bGliLnBjCisKKyMgZG9uZQorbGVhdmUgMApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NyYzMyLmMgYi9Nb2R1bGVzL3psaWIvY3JjMzIuYwppbmRleCA5MWJlMzcyLi45NzlhNzE5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvY3JjMzIuYworKysgYi9Nb2R1bGVzL3psaWIvY3JjMzIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGNyYzMyLmMgLS0gY29tcHV0ZSB0aGUgQ1JDLTMyIG9mIGEgZGF0YSBzdHJlYW0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwLCAyMDExLCAyMDEyIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqCiAgKiBUaGFua3MgdG8gUm9kbmV5IEJyb3duIDxyYnJvd242NEBjc2MuY29tLmF1PiBmb3IgaGlzIGNvbnRyaWJ1dGlvbiBvZiBmYXN0ZXIKQEAgLTE3LDYgKzE3LDggQEAKICAgb2YgdGhlIGNyYyB0YWJsZXMuICBUaGVyZWZvcmUsIGlmIHlvdSAjZGVmaW5lIERZTkFNSUNfQ1JDX1RBQkxFLCB5b3Ugc2hvdWxkCiAgIGZpcnN0IGNhbGwgZ2V0X2NyY190YWJsZSgpIHRvIGluaXRpYWxpemUgdGhlIHRhYmxlcyBiZWZvcmUgYWxsb3dpbmcgbW9yZSB0aGFuCiAgIG9uZSB0aHJlYWQgdG8gdXNlIGNyYzMyKCkuCisKKyAgRFlOQU1JQ19DUkNfVEFCTEUgYW5kIE1BS0VDUkNIIGNhbiBiZSAjZGVmaW5lZCB0byB3cml0ZSBvdXQgY3JjMzIuaC4KICAqLwogCiAjaWZkZWYgTUFLRUNSQ0gKQEAgLTMwLDMxICszMiwxMSBAQAogCiAjZGVmaW5lIGxvY2FsIHN0YXRpYwogCi0vKiBGaW5kIGEgZm91ci1ieXRlIGludGVnZXIgdHlwZSBmb3IgY3JjMzJfbGl0dGxlKCkgYW5kIGNyYzMyX2JpZygpLiAqLwotI2lmbmRlZiBOT0JZRk9VUgotIyAgaWZkZWYgU1REQyAgICAgICAgICAgLyogbmVlZCBBTlNJIEMgbGltaXRzLmggdG8gZGV0ZXJtaW5lIHNpemVzICovCi0jICAgIGluY2x1ZGUgPGxpbWl0cy5oPgotIyAgICBkZWZpbmUgQllGT1VSCi0jICAgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCi0gICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTQ7Ci0jICAgIGVsc2UKLSMgICAgICBpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1NDsKLSMgICAgICBlbHNlCi0jICAgICAgICBpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1NDsKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgdW5kZWYgQllGT1VSICAgICAvKiBjYW4ndCBmaW5kIGEgZm91ci1ieXRlIGludGVnZXIgdHlwZSEgKi8KLSMgICAgICAgIGVuZGlmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmIC8qIFNUREMgKi8KLSNlbmRpZiAvKiAhTk9CWUZPVVIgKi8KLQogLyogRGVmaW5pdGlvbnMgZm9yIGRvaW5nIHRoZSBjcmMgZm91ciBkYXRhIGJ5dGVzIGF0IGEgdGltZS4gKi8KKyNpZiAhZGVmaW5lZChOT0JZRk9VUikgJiYgZGVmaW5lZChaX1U0KQorIyAgZGVmaW5lIEJZRk9VUgorI2VuZGlmCiAjaWZkZWYgQllGT1VSCi0jICBkZWZpbmUgUkVWKHcpICgoKCh3KT4+MjQpJjB4ZmYpKygoKHcpPj44KSYweGZmMDApKyBcCi0gICAgICAgICAgICAgICAgKCgodykmMHhmZjAwKTw8OCkrKCgodykmMHhmZik8PDI0KSkKICAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfbGl0dGxlIE9GKCh1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiwgdW5zaWduZWQpKTsKICAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfYmlnIE9GKCh1bnNpZ25lZCBsb25nLApAQCAtNjgsMTYgKzUwLDE2IEBACiBsb2NhbCB1bnNpZ25lZCBsb25nIGdmMl9tYXRyaXhfdGltZXMgT0YoKHVuc2lnbmVkIGxvbmcgKm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2ZWMpKTsKIGxvY2FsIHZvaWQgZ2YyX21hdHJpeF9zcXVhcmUgT0YoKHVuc2lnbmVkIGxvbmcgKnNxdWFyZSwgdW5zaWduZWQgbG9uZyAqbWF0KSk7Ci1sb2NhbCB1TG9uZyBjcmMzMl9jb21iaW5lXyh1TG9uZyBjcmMxLCB1TG9uZyBjcmMyLCB6X29mZjY0X3QgbGVuMik7Citsb2NhbCB1TG9uZyBjcmMzMl9jb21iaW5lXyBPRigodUxvbmcgY3JjMSwgdUxvbmcgY3JjMiwgel9vZmY2NF90IGxlbjIpKTsKIAogCiAjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKIAogbG9jYWwgdm9sYXRpbGUgaW50IGNyY190YWJsZV9lbXB0eSA9IDE7Ci1sb2NhbCB1bnNpZ25lZCBsb25nIEZBUiBjcmNfdGFibGVbVEJMU11bMjU2XTsKK2xvY2FsIHpfY3JjX3QgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdOwogbG9jYWwgdm9pZCBtYWtlX2NyY190YWJsZSBPRigodm9pZCkpOwogI2lmZGVmIE1BS0VDUkNICi0gICBsb2NhbCB2b2lkIHdyaXRlX3RhYmxlIE9GKChGSUxFICosIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICopKTsKKyAgIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUgT0YoKEZJTEUgKiwgY29uc3Qgel9jcmNfdCBGQVIgKikpOwogI2VuZGlmIC8qIE1BS0VDUkNIICovCiAvKgogICBHZW5lcmF0ZSB0YWJsZXMgZm9yIGEgYnl0ZS13aXNlIDMyLWJpdCBDUkMgY2FsY3VsYXRpb24gb24gdGhlIHBvbHlub21pYWw6CkBAIC0xMDcsOSArODksOSBAQAogKi8KIGxvY2FsIHZvaWQgbWFrZV9jcmNfdGFibGUoKQogewotICAgIHVuc2lnbmVkIGxvbmcgYzsKKyAgICB6X2NyY190IGM7CiAgICAgaW50IG4sIGs7Ci0gICAgdW5zaWduZWQgbG9uZyBwb2x5OyAgICAgICAgICAgICAgICAgLyogcG9seW5vbWlhbCBleGNsdXNpdmUtb3IgcGF0dGVybiAqLworICAgIHpfY3JjX3QgcG9seTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvbHlub21pYWwgZXhjbHVzaXZlLW9yIHBhdHRlcm4gKi8KICAgICAvKiB0ZXJtcyBvZiBwb2x5bm9taWFsIGRlZmluaW5nIHRoaXMgY3JjIChleGNlcHQgeF4zMik6ICovCiAgICAgc3RhdGljIHZvbGF0aWxlIGludCBmaXJzdCA9IDE7ICAgICAgLyogZmxhZyB0byBsaW1pdCBjb25jdXJyZW50IG1ha2luZyAqLwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9IHswLDEsMiw0LDUsNyw4LDEwLDExLDEyLDE2LDIyLDIzLDI2fTsKQEAgLTEyMSwxMyArMTAzLDEzIEBACiAgICAgICAgIGZpcnN0ID0gMDsKIAogICAgICAgICAvKiBtYWtlIGV4Y2x1c2l2ZS1vciBwYXR0ZXJuIGZyb20gcG9seW5vbWlhbCAoMHhlZGI4ODMyMFVMKSAqLwotICAgICAgICBwb2x5ID0gMFVMOwotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHApL3NpemVvZih1bnNpZ25lZCBjaGFyKTsgbisrKQotICAgICAgICAgICAgcG9seSB8PSAxVUwgPDwgKDMxIC0gcFtuXSk7CisgICAgICAgIHBvbHkgPSAwOworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKGludCkoc2l6ZW9mKHApL3NpemVvZih1bnNpZ25lZCBjaGFyKSk7IG4rKykKKyAgICAgICAgICAgIHBvbHkgfD0gKHpfY3JjX3QpMSA8PCAoMzEgLSBwW25dKTsKIAogICAgICAgICAvKiBnZW5lcmF0ZSBhIGNyYyBmb3IgZXZlcnkgOC1iaXQgdmFsdWUgKi8KICAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7Ci0gICAgICAgICAgICBjID0gKHVuc2lnbmVkIGxvbmcpbjsKKyAgICAgICAgICAgIGMgPSAoel9jcmNfdCluOwogICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IDg7IGsrKykKICAgICAgICAgICAgICAgICBjID0gYyAmIDEgPyBwb2x5IF4gKGMgPj4gMSkgOiBjID4+IDE7CiAgICAgICAgICAgICBjcmNfdGFibGVbMF1bbl0gPSBjOwpAQCAtMTM4LDExICsxMjAsMTEgQEAKICAgICAgICAgICAgYW5kIHRoZW4gdGhlIGJ5dGUgcmV2ZXJzYWwgb2YgdGhvc2UgYXMgd2VsbCBhcyB0aGUgZmlyc3QgdGFibGUgKi8KICAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7CiAgICAgICAgICAgICBjID0gY3JjX3RhYmxlWzBdW25dOwotICAgICAgICAgICAgY3JjX3RhYmxlWzRdW25dID0gUkVWKGMpOworICAgICAgICAgICAgY3JjX3RhYmxlWzRdW25dID0gWlNXQVAzMihjKTsKICAgICAgICAgICAgIGZvciAoayA9IDE7IGsgPCA0OyBrKyspIHsKICAgICAgICAgICAgICAgICBjID0gY3JjX3RhYmxlWzBdW2MgJiAweGZmXSBeIChjID4+IDgpOwogICAgICAgICAgICAgICAgIGNyY190YWJsZVtrXVtuXSA9IGM7Ci0gICAgICAgICAgICAgICAgY3JjX3RhYmxlW2sgKyA0XVtuXSA9IFJFVihjKTsKKyAgICAgICAgICAgICAgICBjcmNfdGFibGVbayArIDRdW25dID0gWlNXQVAzMihjKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmIC8qIEJZRk9VUiAqLwpAQCAtMTY0LDcgKzE0Niw3IEBACiAgICAgICAgIGlmIChvdXQgPT0gTlVMTCkgcmV0dXJuOwogICAgICAgICBmcHJpbnRmKG91dCwgIi8qIGNyYzMyLmggLS0gdGFibGVzIGZvciByYXBpZCBDUkMgY2FsY3VsYXRpb25cbiIpOwogICAgICAgICBmcHJpbnRmKG91dCwgIiAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNyYzMyLmNcbiAqL1xuXG4iKTsKLSAgICAgICAgZnByaW50ZihvdXQsICJsb2NhbCBjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAiKTsKKyAgICAgICAgZnByaW50ZihvdXQsICJsb2NhbCBjb25zdCB6X2NyY190IEZBUiAiKTsKICAgICAgICAgZnByaW50ZihvdXQsICJjcmNfdGFibGVbVEJMU11bMjU2XSA9XG57XG4gIHtcbiIpOwogICAgICAgICB3cml0ZV90YWJsZShvdXQsIGNyY190YWJsZVswXSk7CiAjICBpZmRlZiBCWUZPVVIKQEAgLTE4NCwxMiArMTY2LDEzIEBACiAjaWZkZWYgTUFLRUNSQ0gKIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUob3V0LCB0YWJsZSkKICAgICBGSUxFICpvdXQ7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKnRhYmxlOworICAgIGNvbnN0IHpfY3JjX3QgRkFSICp0YWJsZTsKIHsKICAgICBpbnQgbjsKIAogICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykKLSAgICAgICAgZnByaW50ZihvdXQsICIlczB4JTA4bHhVTCVzIiwgbiAlIDUgPyAiIiA6ICIgICAgIiwgdGFibGVbbl0sCisgICAgICAgIGZwcmludGYob3V0LCAiJXMweCUwOGx4VUwlcyIsIG4gJSA1ID8gIiIgOiAiICAgICIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHRhYmxlW25dKSwKICAgICAgICAgICAgICAgICBuID09IDI1NSA/ICJcbiIgOiAobiAlIDUgPT0gNCA/ICIsXG4iIDogIiwgIikpOwogfQogI2VuZGlmIC8qIE1BS0VDUkNIICovCkBAIC0yMDQsMTMgKzE4NywxMyBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBhc20gdmVyc2lvbnMgb2YgY3JjMzIoKQogICovCi1jb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSgpCitjb25zdCB6X2NyY190IEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSgpCiB7CiAjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKICAgICBpZiAoY3JjX3RhYmxlX2VtcHR5KQogICAgICAgICBtYWtlX2NyY190YWJsZSgpOwogI2VuZGlmIC8qIERZTkFNSUNfQ1JDX1RBQkxFICovCi0gICAgcmV0dXJuIChjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqKWNyY190YWJsZTsKKyAgICByZXR1cm4gKGNvbnN0IHpfY3JjX3QgRkFSICopY3JjX3RhYmxlOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC0yMzIsNyArMjE1LDcgQEAKIAogI2lmZGVmIEJZRk9VUgogICAgIGlmIChzaXplb2Yodm9pZCAqKSA9PSBzaXplb2YocHRyZGlmZl90KSkgewotICAgICAgICB1NCBlbmRpYW47CisgICAgICAgIHpfY3JjX3QgZW5kaWFuOwogCiAgICAgICAgIGVuZGlhbiA9IDE7CiAgICAgICAgIGlmICgqKCh1bnNpZ25lZCBjaGFyICopKCZlbmRpYW4pKSkKQEAgLTI2NiwxNyArMjQ5LDE3IEBACiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKICAgICB1bnNpZ25lZCBsZW47CiB7Ci0gICAgcmVnaXN0ZXIgdTQgYzsKLSAgICByZWdpc3RlciBjb25zdCB1NCBGQVIgKmJ1ZjQ7CisgICAgcmVnaXN0ZXIgel9jcmNfdCBjOworICAgIHJlZ2lzdGVyIGNvbnN0IHpfY3JjX3QgRkFSICpidWY0OwogCi0gICAgYyA9ICh1NCljcmM7CisgICAgYyA9ICh6X2NyY190KWNyYzsKICAgICBjID0gfmM7CiAgICAgd2hpbGUgKGxlbiAmJiAoKHB0cmRpZmZfdClidWYgJiAzKSkgewogICAgICAgICBjID0gY3JjX3RhYmxlWzBdWyhjIF4gKmJ1ZisrKSAmIDB4ZmZdIF4gKGMgPj4gOCk7CiAgICAgICAgIGxlbi0tOwogICAgIH0KIAotICAgIGJ1ZjQgPSAoY29uc3QgdTQgRkFSICopKGNvbnN0IHZvaWQgRkFSICopYnVmOworICAgIGJ1ZjQgPSAoY29uc3Qgel9jcmNfdCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CiAgICAgd2hpbGUgKGxlbiA+PSAzMikgewogICAgICAgICBET0xJVDMyOwogICAgICAgICBsZW4gLT0gMzI7CkBAIC0zMDYsMTcgKzI4OSwxNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CiAgICAgdW5zaWduZWQgbGVuOwogewotICAgIHJlZ2lzdGVyIHU0IGM7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdTQgRkFSICpidWY0OworICAgIHJlZ2lzdGVyIHpfY3JjX3QgYzsKKyAgICByZWdpc3RlciBjb25zdCB6X2NyY190IEZBUiAqYnVmNDsKIAotICAgIGMgPSBSRVYoKHU0KWNyYyk7CisgICAgYyA9IFpTV0FQMzIoKHpfY3JjX3QpY3JjKTsKICAgICBjID0gfmM7CiAgICAgd2hpbGUgKGxlbiAmJiAoKHB0cmRpZmZfdClidWYgJiAzKSkgewogICAgICAgICBjID0gY3JjX3RhYmxlWzRdWyhjID4+IDI0KSBeICpidWYrK10gXiAoYyA8PCA4KTsKICAgICAgICAgbGVuLS07CiAgICAgfQogCi0gICAgYnVmNCA9IChjb25zdCB1NCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CisgICAgYnVmNCA9IChjb25zdCB6X2NyY190IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKICAgICBidWY0LS07CiAgICAgd2hpbGUgKGxlbiA+PSAzMikgewogICAgICAgICBET0JJRzMyOwpAQCAtMzMzLDcgKzMxNiw3IEBACiAgICAgICAgIGMgPSBjcmNfdGFibGVbNF1bKGMgPj4gMjQpIF4gKmJ1ZisrXSBeIChjIDw8IDgpOwogICAgIH0gd2hpbGUgKC0tbGVuKTsKICAgICBjID0gfmM7Ci0gICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKShSRVYoYykpOworICAgIHJldHVybiAodW5zaWduZWQgbG9uZykoWlNXQVAzMihjKSk7CiB9CiAKICNlbmRpZiAvKiBCWUZPVVIgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9jcmMzMi5oIGIvTW9kdWxlcy96bGliL2NyYzMyLmgKaW5kZXggODA1M2I2MS4uOWUwYzc3OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2NyYzMyLmgKKysrIGIvTW9kdWxlcy96bGliL2NyYzMyLmgKQEAgLTIsNyArMiw3IEBACiAgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjcmMzMi5jCiAgKi8KIAotbG9jYWwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPQorbG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPQogewogICB7CiAgICAgMHgwMDAwMDAwMFVMLCAweDc3MDczMDk2VUwsIDB4ZWUwZTYxMmNVTCwgMHg5OTA5NTFiYVVMLCAweDA3NmRjNDE5VUwsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuYwppbmRleCBiY2VmNjdjLi42OTY5NTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jCisrKyBiL01vZHVsZXMvemxpYi9kZWZsYXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBkZWZsYXRlLmMgLS0gY29tcHJlc3MgZGF0YSB1c2luZyB0aGUgZGVmbGF0aW9uIGFsZ29yaXRobQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTM3LDcgKzM3LDcgQEAKICAqICBSRUZFUkVOQ0VTCiAgKgogICogICAgICBEZXV0c2NoLCBMLlAuLCJERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiIuCi0gKiAgICAgIEF2YWlsYWJsZSBpbiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUxLnR4dAorICogICAgICBBdmFpbGFibGUgaW4gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MQogICoKICAqICAgICAgQSBkZXNjcmlwdGlvbiBvZiB0aGUgUmFiaW4gYW5kIEthcnAgYWxnb3JpdGhtIGlzIGdpdmVuIGluIHRoZSBib29rCiAgKiAgICAgICAgICJBbGdvcml0aG1zIiBieSBSLiBTZWRnZXdpY2ssIEFkZGlzb24tV2VzbGV5LCBwMjUyLgpAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgImRlZmxhdGUuaCIKIAogY29uc3QgY2hhciBkZWZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgZGVmbGF0ZSAxLjIuNSBDb3B5cmlnaHQgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKKyAgICIgZGVmbGF0ZSAxLjIuOCBDb3B5cmlnaHQgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtMTU1LDkgKzE1NSwxMiBAQAogc3RydWN0IHN0YXRpY190cmVlX2Rlc2NfcyB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KICNlbmRpZgogCisvKiByYW5rIFpfQkxPQ0sgYmV0d2VlbiBaX05PX0ZMVVNIIGFuZCBaX1BBUlRJQUxfRkxVU0ggKi8KKyNkZWZpbmUgUkFOSyhmKSAoKChmKSA8PCAxKSAtICgoZikgPiA0ID8gOSA6IDApKQorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFVwZGF0ZSBhIGhhc2ggdmFsdWUgd2l0aCB0aGUgZ2l2ZW4gaW5wdXQgYnl0ZQotICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIFVQREFURV9IQVNIIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBVUERBVEVfSEFTSCBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCiAgKiAgICBpbnB1dCBjaGFyYWN0ZXJzLCBzbyB0aGF0IGEgcnVubmluZyBoYXNoIGtleSBjYW4gYmUgY29tcHV0ZWQgZnJvbSB0aGUKICAqICAgIHByZXZpb3VzIGtleSBpbnN0ZWFkIG9mIGNvbXBsZXRlIHJlY2FsY3VsYXRpb24gZWFjaCB0aW1lLgogICovCkBAIC0xNzAsNyArMTczLDcgQEAKICAqIHRoZSBwcmV2aW91cyBsZW5ndGggb2YgdGhlIGhhc2ggY2hhaW4uCiAgKiBJZiB0aGlzIGZpbGUgaXMgY29tcGlsZWQgd2l0aCAtREZBU1RFU1QsIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBpcyBmb3JjZWQKICAqIHRvIDEsIGFuZCBubyBoYXNoIGNoYWlucyBhcmUgbWFpbnRhaW5lZC4KLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKICAqICAgIGlucHV0IGNoYXJhY3RlcnMgYW5kIHRoZSBmaXJzdCBNSU5fTUFUQ0ggYnl0ZXMgb2Ygc3RyIGFyZSB2YWxpZAogICogICAgKGV4Y2VwdCBmb3IgdGhlIGxhc3QgTUlOX01BVENILTEgYnl0ZXMgb2YgdGhlIGlucHV0IGZpbGUpLgogICovCkBAIC0yMzUsMTAgKzIzOCwxOSBAQAogCiAgICAgc3RybS0+bXNnID0gWl9OVUxMOwogICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQogICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOwogICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKICAgICB9Ci0gICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisgICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICAgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKIAogI2lmZGVmIEZBU1RFU1QKICAgICBpZiAobGV2ZWwgIT0gMCkgbGV2ZWwgPSAxOwpAQCAtMjkzLDcgKzMwNSw3IEBACiAgICAgaWYgKHMtPndpbmRvdyA9PSBaX05VTEwgfHwgcy0+cHJldiA9PSBaX05VTEwgfHwgcy0+aGVhZCA9PSBaX05VTEwgfHwKICAgICAgICAgcy0+cGVuZGluZ19idWYgPT0gWl9OVUxMKSB7CiAgICAgICAgIHMtPnN0YXR1cyA9IEZJTklTSF9TVEFURTsKLSAgICAgICAgc3RybS0+bXNnID0gKGNoYXIqKUVSUl9NU0coWl9NRU1fRVJST1IpOworICAgICAgICBzdHJtLT5tc2cgPSBFUlJfTVNHKFpfTUVNX0VSUk9SKTsKICAgICAgICAgZGVmbGF0ZUVuZCAoc3RybSk7CiAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICB9CkBAIC0zMTQsNDMgKzMyNiw3MCBAQAogICAgIHVJbnQgIGRpY3RMZW5ndGg7CiB7CiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICB1SW50IGxlbmd0aCA9IGRpY3RMZW5ndGg7Ci0gICAgdUludCBuOwotICAgIElQb3MgaGFzaF9oZWFkID0gMDsKKyAgICB1SW50IHN0ciwgbjsKKyAgICBpbnQgd3JhcDsKKyAgICB1bnNpZ25lZCBhdmFpbDsKKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHQ7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IGRpY3Rpb25hcnkgPT0gWl9OVUxMIHx8Ci0gICAgICAgIHN0cm0tPnN0YXRlLT53cmFwID09IDIgfHwKLSAgICAgICAgKHN0cm0tPnN0YXRlLT53cmFwID09IDEgJiYgc3RybS0+c3RhdGUtPnN0YXR1cyAhPSBJTklUX1NUQVRFKSkKKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IGRpY3Rpb25hcnkgPT0gWl9OVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgcyA9IHN0cm0tPnN0YXRlOworICAgIHdyYXAgPSBzLT53cmFwOworICAgIGlmICh3cmFwID09IDIgfHwgKHdyYXAgPT0gMSAmJiBzLT5zdGF0dXMgIT0gSU5JVF9TVEFURSkgfHwgcy0+bG9va2FoZWFkKQogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAKLSAgICBzID0gc3RybS0+c3RhdGU7Ci0gICAgaWYgKHMtPndyYXApCisgICAgLyogd2hlbiB1c2luZyB6bGliIHdyYXBwZXJzLCBjb21wdXRlIEFkbGVyLTMyIGZvciBwcm92aWRlZCBkaWN0aW9uYXJ5ICovCisgICAgaWYgKHdyYXAgPT0gMSkKICAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKKyAgICBzLT53cmFwID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIGF2b2lkIGNvbXB1dGluZyBBZGxlci0zMiBpbiByZWFkX2J1ZiAqLwogCi0gICAgaWYgKGxlbmd0aCA8IE1JTl9NQVRDSCkgcmV0dXJuIFpfT0s7Ci0gICAgaWYgKGxlbmd0aCA+IHMtPndfc2l6ZSkgewotICAgICAgICBsZW5ndGggPSBzLT53X3NpemU7Ci0gICAgICAgIGRpY3Rpb25hcnkgKz0gZGljdExlbmd0aCAtIGxlbmd0aDsgLyogdXNlIHRoZSB0YWlsIG9mIHRoZSBkaWN0aW9uYXJ5ICovCisgICAgLyogaWYgZGljdGlvbmFyeSB3b3VsZCBmaWxsIHdpbmRvdywganVzdCByZXBsYWNlIHRoZSBoaXN0b3J5ICovCisgICAgaWYgKGRpY3RMZW5ndGggPj0gcy0+d19zaXplKSB7CisgICAgICAgIGlmICh3cmFwID09IDApIHsgICAgICAgICAgICAvKiBhbHJlYWR5IGVtcHR5IG90aGVyd2lzZSAqLworICAgICAgICAgICAgQ0xFQVJfSEFTSChzKTsKKyAgICAgICAgICAgIHMtPnN0cnN0YXJ0ID0gMDsKKyAgICAgICAgICAgIHMtPmJsb2NrX3N0YXJ0ID0gMEw7CisgICAgICAgICAgICBzLT5pbnNlcnQgPSAwOworICAgICAgICB9CisgICAgICAgIGRpY3Rpb25hcnkgKz0gZGljdExlbmd0aCAtIHMtPndfc2l6ZTsgIC8qIHVzZSB0aGUgdGFpbCAqLworICAgICAgICBkaWN0TGVuZ3RoID0gcy0+d19zaXplOwogICAgIH0KLSAgICB6bWVtY3B5KHMtPndpbmRvdywgZGljdGlvbmFyeSwgbGVuZ3RoKTsKLSAgICBzLT5zdHJzdGFydCA9IGxlbmd0aDsKLSAgICBzLT5ibG9ja19zdGFydCA9IChsb25nKWxlbmd0aDsKIAotICAgIC8qIEluc2VydCBhbGwgc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSAoZXhjZXB0IGZvciB0aGUgbGFzdCB0d28gYnl0ZXMpLgotICAgICAqIHMtPmxvb2thaGVhZCBzdGF5cyBudWxsLCBzbyBzLT5pbnNfaCB3aWxsIGJlIHJlY29tcHV0ZWQgYXQgdGhlIG5leHQKLSAgICAgKiBjYWxsIG9mIGZpbGxfd2luZG93LgotICAgICAqLwotICAgIHMtPmluc19oID0gcy0+d2luZG93WzBdOwotICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbMV0pOwotICAgIGZvciAobiA9IDA7IG4gPD0gbGVuZ3RoIC0gTUlOX01BVENIOyBuKyspIHsKLSAgICAgICAgSU5TRVJUX1NUUklORyhzLCBuLCBoYXNoX2hlYWQpOworICAgIC8qIGluc2VydCBkaWN0aW9uYXJ5IGludG8gd2luZG93IGFuZCBoYXNoICovCisgICAgYXZhaWwgPSBzdHJtLT5hdmFpbF9pbjsKKyAgICBuZXh0ID0gc3RybS0+bmV4dF9pbjsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGRpY3RMZW5ndGg7CisgICAgc3RybS0+bmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopZGljdGlvbmFyeTsKKyAgICBmaWxsX3dpbmRvdyhzKTsKKyAgICB3aGlsZSAocy0+bG9va2FoZWFkID49IE1JTl9NQVRDSCkgeworICAgICAgICBzdHIgPSBzLT5zdHJzdGFydDsKKyAgICAgICAgbiA9IHMtPmxvb2thaGVhZCAtIChNSU5fTUFUQ0gtMSk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsKKyNpZm5kZWYgRkFTVEVTVAorICAgICAgICAgICAgcy0+cHJldltzdHIgJiBzLT53X21hc2tdID0gcy0+aGVhZFtzLT5pbnNfaF07CisjZW5kaWYKKyAgICAgICAgICAgIHMtPmhlYWRbcy0+aW5zX2hdID0gKFBvcylzdHI7CisgICAgICAgICAgICBzdHIrKzsKKyAgICAgICAgfSB3aGlsZSAoLS1uKTsKKyAgICAgICAgcy0+c3Ryc3RhcnQgPSBzdHI7CisgICAgICAgIHMtPmxvb2thaGVhZCA9IE1JTl9NQVRDSC0xOworICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICB9Ci0gICAgaWYgKGhhc2hfaGVhZCkgaGFzaF9oZWFkID0gMDsgIC8qIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAgICBzLT5zdHJzdGFydCArPSBzLT5sb29rYWhlYWQ7CisgICAgcy0+YmxvY2tfc3RhcnQgPSAobG9uZylzLT5zdHJzdGFydDsKKyAgICBzLT5pbnNlcnQgPSBzLT5sb29rYWhlYWQ7CisgICAgcy0+bG9va2FoZWFkID0gMDsKKyAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSC0xOworICAgIHMtPm1hdGNoX2F2YWlsYWJsZSA9IDA7CisgICAgc3RybS0+bmV4dF9pbiA9IG5leHQ7CisgICAgc3RybS0+YXZhaWxfaW4gPSBhdmFpbDsKKyAgICBzLT53cmFwID0gd3JhcDsKICAgICByZXR1cm4gWl9PSzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IChzdHJtKQoraW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0S2VlcCAoc3RybSkKICAgICB6X3N0cmVhbXAgc3RybTsKIHsKICAgICBkZWZsYXRlX3N0YXRlICpzOwpAQCAtMzgwLDEyICs0MTksMjMgQEAKICAgICBzLT5sYXN0X2ZsdXNoID0gWl9OT19GTFVTSDsKIAogICAgIF90cl9pbml0KHMpOwotICAgIGxtX2luaXQocyk7CiAKICAgICByZXR1cm4gWl9PSzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IChzdHJtKQorICAgIHpfc3RyZWFtcCBzdHJtOworeworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pOworICAgIGlmIChyZXQgPT0gWl9PSykKKyAgICAgICAgbG1faW5pdChzdHJtLT5zdGF0ZSk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50IFpFWFBPUlQgZGVmbGF0ZVNldEhlYWRlciAoc3RybSwgaGVhZCkKICAgICB6X3N0cmVhbXAgc3RybTsKICAgICBnel9oZWFkZXJwIGhlYWQ7CkBAIC0zOTcsMTQgKzQ0Nyw0MiBAQAogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlUGVuZGluZyAoc3RybSwgcGVuZGluZywgYml0cykKKyAgICB1bnNpZ25lZCAqcGVuZGluZzsKKyAgICBpbnQgKmJpdHM7CisgICAgel9zdHJlYW1wIHN0cm07Cit7CisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChwZW5kaW5nICE9IFpfTlVMTCkKKyAgICAgICAgKnBlbmRpbmcgPSBzdHJtLT5zdGF0ZS0+cGVuZGluZzsKKyAgICBpZiAoYml0cyAhPSBaX05VTEwpCisgICAgICAgICpiaXRzID0gc3RybS0+c3RhdGUtPmJpX3ZhbGlkOworICAgIHJldHVybiBaX09LOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiBpbnQgWkVYUE9SVCBkZWZsYXRlUHJpbWUgKHN0cm0sIGJpdHMsIHZhbHVlKQogICAgIHpfc3RyZWFtcCBzdHJtOwogICAgIGludCBiaXRzOwogICAgIGludCB2YWx1ZTsKIHsKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIGludCBwdXQ7CisKICAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAgc3RybS0+c3RhdGUtPmJpX3ZhbGlkID0gYml0czsKLSAgICBzdHJtLT5zdGF0ZS0+YmlfYnVmID0gKHVzaCkodmFsdWUgJiAoKDEgPDwgYml0cykgLSAxKSk7CisgICAgcyA9IHN0cm0tPnN0YXRlOworICAgIGlmICgoQnl0ZWYgKikocy0+ZF9idWYpIDwgcy0+cGVuZGluZ19vdXQgKyAoKEJ1Zl9zaXplICsgNykgPj4gMykpCisgICAgICAgIHJldHVybiBaX0JVRl9FUlJPUjsKKyAgICBkbyB7CisgICAgICAgIHB1dCA9IEJ1Zl9zaXplIC0gcy0+YmlfdmFsaWQ7CisgICAgICAgIGlmIChwdXQgPiBiaXRzKQorICAgICAgICAgICAgcHV0ID0gYml0czsKKyAgICAgICAgcy0+YmlfYnVmIHw9ICh1c2gpKCh2YWx1ZSAmICgoMSA8PCBwdXQpIC0gMSkpIDw8IHMtPmJpX3ZhbGlkKTsKKyAgICAgICAgcy0+YmlfdmFsaWQgKz0gcHV0OworICAgICAgICBfdHJfZmx1c2hfYml0cyhzKTsKKyAgICAgICAgdmFsdWUgPj49IHB1dDsKKyAgICAgICAgYml0cyAtPSBwdXQ7CisgICAgfSB3aGlsZSAoYml0cyk7CiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKQEAgLTQzNSw2ICs1MTMsOCBAQAogICAgICAgICBzdHJtLT50b3RhbF9pbiAhPSAwKSB7CiAgICAgICAgIC8qIEZsdXNoIHRoZSBsYXN0IGJ1ZmZlcjogKi8KICAgICAgICAgZXJyID0gZGVmbGF0ZShzdHJtLCBaX0JMT0NLKTsKKyAgICAgICAgaWYgKGVyciA9PSBaX0JVRl9FUlJPUiAmJiBzLT5wZW5kaW5nID09IDApCisgICAgICAgICAgICBlcnIgPSBaX09LOwogICAgIH0KICAgICBpZiAocy0+bGV2ZWwgIT0gbGV2ZWwpIHsKICAgICAgICAgcy0+bGV2ZWwgPSBsZXZlbDsKQEAgLTU2MiwxOSArNjQyLDIyIEBACiBsb2NhbCB2b2lkIGZsdXNoX3BlbmRpbmcoc3RybSkKICAgICB6X3N0cmVhbXAgc3RybTsKIHsKLSAgICB1bnNpZ25lZCBsZW4gPSBzdHJtLT5zdGF0ZS0+cGVuZGluZzsKKyAgICB1bnNpZ25lZCBsZW47CisgICAgZGVmbGF0ZV9zdGF0ZSAqcyA9IHN0cm0tPnN0YXRlOwogCisgICAgX3RyX2ZsdXNoX2JpdHMocyk7CisgICAgbGVuID0gcy0+cGVuZGluZzsKICAgICBpZiAobGVuID4gc3RybS0+YXZhaWxfb3V0KSBsZW4gPSBzdHJtLT5hdmFpbF9vdXQ7CiAgICAgaWYgKGxlbiA9PSAwKSByZXR1cm47CiAKLSAgICB6bWVtY3B5KHN0cm0tPm5leHRfb3V0LCBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQsIGxlbik7CisgICAgem1lbWNweShzdHJtLT5uZXh0X291dCwgcy0+cGVuZGluZ19vdXQsIGxlbik7CiAgICAgc3RybS0+bmV4dF9vdXQgICs9IGxlbjsKLSAgICBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQgICs9IGxlbjsKKyAgICBzLT5wZW5kaW5nX291dCAgKz0gbGVuOwogICAgIHN0cm0tPnRvdGFsX291dCArPSBsZW47CiAgICAgc3RybS0+YXZhaWxfb3V0ICAtPSBsZW47Ci0gICAgc3RybS0+c3RhdGUtPnBlbmRpbmcgLT0gbGVuOwotICAgIGlmIChzdHJtLT5zdGF0ZS0+cGVuZGluZyA9PSAwKSB7Ci0gICAgICAgIHN0cm0tPnN0YXRlLT5wZW5kaW5nX291dCA9IHN0cm0tPnN0YXRlLT5wZW5kaW5nX2J1ZjsKKyAgICBzLT5wZW5kaW5nIC09IGxlbjsKKyAgICBpZiAocy0+cGVuZGluZyA9PSAwKSB7CisgICAgICAgIHMtPnBlbmRpbmdfb3V0ID0gcy0+cGVuZGluZ19idWY7CiAgICAgfQogfQogCkBAIC04MDEsNyArODg0LDcgQEAKICAgICAgKiBmbHVzaGVzLiBGb3IgcmVwZWF0ZWQgYW5kIHVzZWxlc3MgY2FsbHMgd2l0aCBaX0ZJTklTSCwgd2Uga2VlcAogICAgICAqIHJldHVybmluZyBaX1NUUkVBTV9FTkQgaW5zdGVhZCBvZiBaX0JVRl9FUlJPUi4KICAgICAgKi8KLSAgICB9IGVsc2UgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZmx1c2ggPD0gb2xkX2ZsdXNoICYmCisgICAgfSBlbHNlIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIFJBTksoZmx1c2gpIDw9IFJBTksob2xkX2ZsdXNoKSAmJgogICAgICAgICAgICAgICAgZmx1c2ggIT0gWl9GSU5JU0gpIHsKICAgICAgICAgRVJSX1JFVFVSTihzdHJtLCBaX0JVRl9FUlJPUik7CiAgICAgfQpAQCAtODUwLDYgKzkzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3Ryc3RhcnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmluc2VydCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05NDUsMTIgKzEwMjksMTIgQEAKIAogICAgIHNzID0gc291cmNlLT5zdGF0ZTsKIAotICAgIHptZW1jcHkoZGVzdCwgc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZGVzdCwgKHZvaWRwZilzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOwogCiAgICAgZHMgPSAoZGVmbGF0ZV9zdGF0ZSAqKSBaQUxMT0MoZGVzdCwgMSwgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoZHMgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgZGVzdC0+c3RhdGUgPSAoc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqKSBkczsKLSAgICB6bWVtY3B5KGRzLCBzcywgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZHMsICh2b2lkcGYpc3MsIHNpemVvZihkZWZsYXRlX3N0YXRlKSk7CiAgICAgZHMtPnN0cm0gPSBkZXN0OwogCiAgICAgZHMtPndpbmRvdyA9IChCeXRlZiAqKSBaQUxMT0MoZGVzdCwgZHMtPndfc2l6ZSwgMipzaXplb2YoQnl0ZSkpOwpAQCAtOTY2LDggKzEwNTAsOCBAQAogICAgIH0KICAgICAvKiBmb2xsb3dpbmcgem1lbWNweSBkbyBub3Qgd29yayBmb3IgMTYtYml0IE1TRE9TICovCiAgICAgem1lbWNweShkcy0+d2luZG93LCBzcy0+d2luZG93LCBkcy0+d19zaXplICogMiAqIHNpemVvZihCeXRlKSk7Ci0gICAgem1lbWNweShkcy0+cHJldiwgc3MtPnByZXYsIGRzLT53X3NpemUgKiBzaXplb2YoUG9zKSk7Ci0gICAgem1lbWNweShkcy0+aGVhZCwgc3MtPmhlYWQsIGRzLT5oYXNoX3NpemUgKiBzaXplb2YoUG9zKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRzLT5wcmV2LCAodm9pZHBmKXNzLT5wcmV2LCBkcy0+d19zaXplICogc2l6ZW9mKFBvcykpOworICAgIHptZW1jcHkoKHZvaWRwZilkcy0+aGVhZCwgKHZvaWRwZilzcy0+aGVhZCwgZHMtPmhhc2hfc2l6ZSAqIHNpemVvZihQb3MpKTsKICAgICB6bWVtY3B5KGRzLT5wZW5kaW5nX2J1Ziwgc3MtPnBlbmRpbmdfYnVmLCAodUludClkcy0+cGVuZGluZ19idWZfc2l6ZSk7CiAKICAgICBkcy0+cGVuZGluZ19vdXQgPSBkcy0+cGVuZGluZ19idWYgKyAoc3MtPnBlbmRpbmdfb3V0IC0gc3MtPnBlbmRpbmdfYnVmKTsKQEAgLTEwMDEsMTUgKzEwODUsMTUgQEAKIAogICAgIHN0cm0tPmF2YWlsX2luICAtPSBsZW47CiAKKyAgICB6bWVtY3B5KGJ1Ziwgc3RybS0+bmV4dF9pbiwgbGVuKTsKICAgICBpZiAoc3RybS0+c3RhdGUtPndyYXAgPT0gMSkgewotICAgICAgICBzdHJtLT5hZGxlciA9IGFkbGVyMzIoc3RybS0+YWRsZXIsIHN0cm0tPm5leHRfaW4sIGxlbik7CisgICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgYnVmLCBsZW4pOwogICAgIH0KICNpZmRlZiBHWklQCiAgICAgZWxzZSBpZiAoc3RybS0+c3RhdGUtPndyYXAgPT0gMikgewotICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzdHJtLT5uZXh0X2luLCBsZW4pOworICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBidWYsIGxlbik7CiAgICAgfQogI2VuZGlmCi0gICAgem1lbWNweShidWYsIHN0cm0tPm5leHRfaW4sIGxlbik7CiAgICAgc3RybS0+bmV4dF9pbiAgKz0gbGVuOwogICAgIHN0cm0tPnRvdGFsX2luICs9IGxlbjsKIApAQCAtMTAzNiw2ICsxMTIwLDcgQEAKICAgICBzLT5zdHJzdGFydCA9IDA7CiAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKICAgICBzLT5sb29rYWhlYWQgPSAwOworICAgIHMtPmluc2VydCA9IDA7CiAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+cHJldl9sZW5ndGggPSBNSU5fTUFUQ0gtMTsKICAgICBzLT5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgIHMtPmluc19oID0gMDsKQEAgLTEzMTAsNiArMTM5NSw4IEBACiAgICAgdW5zaWduZWQgbW9yZTsgICAgLyogQW1vdW50IG9mIGZyZWUgc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgd2luZG93LiAqLwogICAgIHVJbnQgd3NpemUgPSBzLT53X3NpemU7CiAKKyAgICBBc3NlcnQocy0+bG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCwgImFscmVhZHkgZW5vdWdoIGxvb2thaGVhZCIpOworCiAgICAgZG8gewogICAgICAgICBtb3JlID0gKHVuc2lnbmVkKShzLT53aW5kb3dfc2l6ZSAtKHVsZylzLT5sb29rYWhlYWQgLSh1bGcpcy0+c3Ryc3RhcnQpOwogCkBAIC0xMzYyLDcgKzE0NDksNyBAQAogI2VuZGlmCiAgICAgICAgICAgICBtb3JlICs9IHdzaXplOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9pbiA9PSAwKSByZXR1cm47CisgICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9pbiA9PSAwKSBicmVhazsKIAogICAgICAgICAvKiBJZiB0aGVyZSB3YXMgbm8gc2xpZGluZzoKICAgICAgICAgICogICAgc3Ryc3RhcnQgPD0gV1NJWkUrTUFYX0RJU1QtMSAmJiBsb29rYWhlYWQgPD0gTUlOX0xPT0tBSEVBRCAtIDEgJiYKQEAgLTEzODEsMTIgKzE0NjgsMjQgQEAKICAgICAgICAgcy0+bG9va2FoZWFkICs9IG47CiAKICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCB2YWx1ZSBub3cgdGhhdCB3ZSBoYXZlIHNvbWUgaW5wdXQ6ICovCi0gICAgICAgIGlmIChzLT5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7Ci0gICAgICAgICAgICBzLT5pbnNfaCA9IHMtPndpbmRvd1tzLT5zdHJzdGFydF07Ci0gICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3MtPnN0cnN0YXJ0KzFdKTsKKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCArIHMtPmluc2VydCA+PSBNSU5fTUFUQ0gpIHsKKyAgICAgICAgICAgIHVJbnQgc3RyID0gcy0+c3Ryc3RhcnQgLSBzLT5pbnNlcnQ7CisgICAgICAgICAgICBzLT5pbnNfaCA9IHMtPndpbmRvd1tzdHJdOworICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyAxXSk7CiAjaWYgTUlOX01BVENIICE9IDMKICAgICAgICAgICAgIENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzCiAjZW5kaWYKKyAgICAgICAgICAgIHdoaWxlIChzLT5pbnNlcnQpIHsKKyAgICAgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7CisjaWZuZGVmIEZBU1RFU1QKKyAgICAgICAgICAgICAgICBzLT5wcmV2W3N0ciAmIHMtPndfbWFza10gPSBzLT5oZWFkW3MtPmluc19oXTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHMtPmhlYWRbcy0+aW5zX2hdID0gKFBvcylzdHI7CisgICAgICAgICAgICAgICAgc3RyKys7CisgICAgICAgICAgICAgICAgcy0+aW5zZXJ0LS07CisgICAgICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCArIHMtPmluc2VydCA8IE1JTl9NQVRDSCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLyogSWYgdGhlIHdob2xlIGlucHV0IGhhcyBsZXNzIHRoYW4gTUlOX01BVENIIGJ5dGVzLCBpbnNfaCBpcyBnYXJiYWdlLAogICAgICAgICAgKiBidXQgdGhpcyBpcyBub3QgaW1wb3J0YW50IHNpbmNlIG9ubHkgbGl0ZXJhbCBieXRlcyB3aWxsIGJlIGVtaXR0ZWQuCkBAIC0xNDI3LDYgKzE1MjYsOSBAQAogICAgICAgICAgICAgcy0+aGlnaF93YXRlciArPSBpbml0OwogICAgICAgICB9CiAgICAgfQorCisgICAgQXNzZXJ0KCh1bGcpcy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUgLSBNSU5fTE9PS0FIRUFELAorICAgICAgICAgICAibm90IGVub3VnaCByb29tIGZvciBzZWFyY2giKTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNTA2LDggKzE2MDgsMTQgQEAKICAgICAgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOwogICAgICAgICB9CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKChsb25nKXMtPnN0cnN0YXJ0ID4gcy0+YmxvY2tfc3RhcnQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE2MDMsOCArMTcxMSwxNCBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOwogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IHMtPnN0cnN0YXJ0IDwgTUlOX01BVENILTEgPyBzLT5zdHJzdGFydCA6IE1JTl9NQVRDSC0xOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogCiAjaWZuZGVmIEZBU1RFU1QKQEAgLTE3MjgsOCArMTg0MiwxNCBAQAogICAgICAgICBfdHJfdGFsbHlfbGl0KHMsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSwgYmZsdXNoKTsKICAgICAgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSBzLT5zdHJzdGFydCA8IE1JTl9NQVRDSC0xID8gcy0+c3Ryc3RhcnQgOiBNSU5fTUFUQ0gtMTsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KICNlbmRpZiAvKiBGQVNURVNUICovCiAKQEAgLTE3NDksMTEgKzE4NjksMTEgQEAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdAogICAgICAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlcwotICAgICAgICAgKiBmb3IgdGhlIGxvbmdlc3QgZW5jb2RhYmxlIHJ1bi4KKyAgICAgICAgICogZm9yIHRoZSBsb25nZXN0IHJ1biwgcGx1cyBvbmUgZm9yIHRoZSB1bnJvbGxlZCBsb29wLgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8IE1BWF9NQVRDSCkgeworICAgICAgICBpZiAocy0+bG9va2FoZWFkIDw9IE1BWF9NQVRDSCkgewogICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7Ci0gICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkIDwgTUFYX01BVENIICYmIGZsdXNoID09IFpfTk9fRkxVU0gpIHsKKyAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPD0gTUFYX01BVENIICYmIGZsdXNoID09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmVlZF9tb3JlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA9PSAwKSBicmVhazsgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KQEAgLTE3NzYsNiArMTg5Niw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHMtPm1hdGNoX2xlbmd0aCA+IHMtPmxvb2thaGVhZCkKICAgICAgICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+bG9va2FoZWFkOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgQXNzZXJ0KHNjYW4gPD0gcy0+d2luZG93Kyh1SW50KShzLT53aW5kb3dfc2l6ZS0xKSwgIndpbGQgc2NhbiIpOwogICAgICAgICB9CiAKICAgICAgICAgLyogRW1pdCBtYXRjaCBpZiBoYXZlIHJ1biBvZiBNSU5fTUFUQ0ggb3IgbG9uZ2VyLCBlbHNlIGVtaXQgbGl0ZXJhbCAqLwpAQCAtMTc5Niw4ICsxOTE3LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGJmbHVzaCkgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xODI5LDYgKzE5NTYsMTIgQEAKICAgICAgICAgcy0+c3Ryc3RhcnQrKzsKICAgICAgICAgaWYgKGJmbHVzaCkgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmggYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5oCmluZGV4IGNiZjBkMWUuLmNlMDI5OWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmgKKysrIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGRlZmxhdGUuaCAtLSBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgSmVhbi1sb3VwIEdhaWxseQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQ4LDYgKzQ4LDkgQEAKICNkZWZpbmUgTUFYX0JJVFMgMTUKIC8qIEFsbCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JJVFMgYml0cyAqLwogCisjZGVmaW5lIEJ1Zl9zaXplIDE2CisvKiBzaXplIG9mIGJpdCBidWZmZXIgaW4gYmlfYnVmICovCisKICNkZWZpbmUgSU5JVF9TVEFURSAgICA0MgogI2RlZmluZSBFWFRSQV9TVEFURSAgIDY5CiAjZGVmaW5lIE5BTUVfU1RBVEUgICAgNzMKQEAgLTEwMSw3ICsxMDQsNyBAQAogICAgIGludCAgIHdyYXA7ICAgICAgICAgIC8qIGJpdCAwIHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8KICAgICBnel9oZWFkZXJwICBnemhlYWQ7ICAvKiBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiB0byB3cml0ZSAqLwogICAgIHVJbnQgICBnemluZGV4OyAgICAgIC8qIHdoZXJlIGluIGV4dHJhLCBuYW1lLCBvciBjb21tZW50ICovCi0gICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogU1RPUkVEIChmb3IgemlwIG9ubHkpIG9yIERFRkxBVEVEICovCisgICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogY2FuIG9ubHkgYmUgREVGTEFURUQgKi8KICAgICBpbnQgICBsYXN0X2ZsdXNoOyAgICAvKiB2YWx1ZSBvZiBmbHVzaCBwYXJhbSBmb3IgcHJldmlvdXMgZGVmbGF0ZSBjYWxsICovCiAKICAgICAgICAgICAgICAgICAvKiB1c2VkIGJ5IGRlZmxhdGUuYzogKi8KQEAgLTE4OCw3ICsxOTEsNyBAQAogICAgIGludCBuaWNlX21hdGNoOyAvKiBTdG9wIHNlYXJjaGluZyB3aGVuIGN1cnJlbnQgbWF0Y2ggZXhjZWVkcyB0aGlzICovCiAKICAgICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRyZWVzLmM6ICovCi0gICAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcmVzcyBjb21waWxlciB3YXJuaW5nICovCisgICAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLwogICAgIHN0cnVjdCBjdF9kYXRhX3MgZHluX2x0cmVlW0hFQVBfU0laRV07ICAgLyogbGl0ZXJhbCBhbmQgbGVuZ3RoIHRyZWUgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9kdHJlZVsyKkRfQ09ERVMrMV07IC8qIGRpc3RhbmNlIHRyZWUgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGJsX3RyZWVbMipCTF9DT0RFUysxXTsgIC8qIEh1ZmZtYW4gdHJlZSBmb3IgYml0IGxlbmd0aHMgKi8KQEAgLTI0NCw3ICsyNDcsNyBAQAogICAgIHVsZyBvcHRfbGVuOyAgICAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggb3B0aW1hbCB0cmVlcyAqLwogICAgIHVsZyBzdGF0aWNfbGVuOyAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggc3RhdGljIHRyZWVzICovCiAgICAgdUludCBtYXRjaGVzOyAgICAgICAvKiBudW1iZXIgb2Ygc3RyaW5nIG1hdGNoZXMgaW4gY3VycmVudCBibG9jayAqLwotICAgIGludCBsYXN0X2VvYl9sZW47ICAgLyogYml0IGxlbmd0aCBvZiBFT0IgY29kZSBmb3IgbGFzdCBibG9jayAqLworICAgIHVJbnQgaW5zZXJ0OyAgICAgICAgLyogYnl0ZXMgYXQgZW5kIG9mIHdpbmRvdyBsZWZ0IHRvIGluc2VydCAqLwogCiAjaWZkZWYgREVCVUcKICAgICB1bGcgY29tcHJlc3NlZF9sZW47IC8qIHRvdGFsIGJpdCBsZW5ndGggb2YgY29tcHJlc3NlZCBmaWxlIG1vZCAyXjMyICovCkBAIC0yOTQsNiArMjk3LDcgQEAKIGludCBaTElCX0lOVEVSTkFMIF90cl90YWxseSBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgdW5zaWduZWQgZGlzdCwgdW5zaWduZWQgbGMpKTsKIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bGcgc3RvcmVkX2xlbiwgaW50IGxhc3QpKTsKK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYml0cyBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9hbGlnbiBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9zdG9yZWRfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bGcgc3RvcmVkX2xlbiwgaW50IGxhc3QpKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9leGFtcGxlLmMgYi9Nb2R1bGVzL3psaWIvZXhhbXBsZS5jCmluZGV4IDYwNDczNmYuLjEzOGE2OTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9leGFtcGxlLmMKKysrIGIvTW9kdWxlcy96bGliL2V4YW1wbGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGV4YW1wbGUuYyAtLSB1c2FnZSBleGFtcGxlIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2IEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMSBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTI2LDcgKzI2LDcgQEAKICAgICB9IFwKIH0KIAotY29uc3QgY2hhciBoZWxsb1tdID0gImhlbGxvLCBoZWxsbyEiOworel9jb25zdCBjaGFyIGhlbGxvW10gPSAiaGVsbG8sIGhlbGxvISI7CiAvKiAiaGVsbG8gd29ybGQiIHdvdWxkIGJlIG1vcmUgc3RhbmRhcmQsIGJ1dCB0aGUgcmVwZWF0ZWQgImhlbGxvIgogICogc3RyZXNzZXMgdGhlIGNvbXByZXNzaW9uIGNvZGUgYmV0dGVyLCBzb3JyeS4uLgogICovCkBAIC0zNCwxMCArMzQsNiBAQAogY29uc3QgY2hhciBkaWN0aW9uYXJ5W10gPSAiaGVsbG8iOwogdUxvbmcgZGljdElkOyAvKiBBZGxlcjMyIHZhbHVlIG9mIHRoZSBkaWN0aW9uYXJ5ICovCiAKLXZvaWQgdGVzdF9jb21wcmVzcyAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwotdm9pZCB0ZXN0X2d6aW8gICAgICAgICAgT0YoKGNvbnN0IGNoYXIgKmZuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKIHZvaWQgdGVzdF9kZWZsYXRlICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4pKTsKIHZvaWQgdGVzdF9pbmZsYXRlICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwpAQCAtNTMsNiArNDksMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CiBpbnQgIG1haW4gICAgICAgICAgICAgICBPRigoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkpOwogCisKKyNpZmRlZiBaX1NPTE8KKwordm9pZCAqbXlhbGxvYyBPRigodm9pZCAqLCB1bnNpZ25lZCwgdW5zaWduZWQpKTsKK3ZvaWQgbXlmcmVlIE9GKCh2b2lkICosIHZvaWQgKikpOworCit2b2lkICpteWFsbG9jKHEsIG4sIG0pCisgICAgdm9pZCAqcTsKKyAgICB1bnNpZ25lZCBuLCBtOworeworICAgIHEgPSBaX05VTEw7CisgICAgcmV0dXJuIGNhbGxvYyhuLCBtKTsKK30KKwordm9pZCBteWZyZWUodm9pZCAqcSwgdm9pZCAqcCkKK3sKKyAgICBxID0gWl9OVUxMOworICAgIGZyZWUocCk7Cit9CisKK3N0YXRpYyBhbGxvY19mdW5jIHphbGxvYyA9IG15YWxsb2M7CitzdGF0aWMgZnJlZV9mdW5jIHpmcmVlID0gbXlmcmVlOworCisjZWxzZSAvKiAhWl9TT0xPICovCisKK3N0YXRpYyBhbGxvY19mdW5jIHphbGxvYyA9IChhbGxvY19mdW5jKTA7CitzdGF0aWMgZnJlZV9mdW5jIHpmcmVlID0gKGZyZWVfZnVuYykwOworCit2b2lkIHRlc3RfY29tcHJlc3MgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKK3ZvaWQgdGVzdF9nemlvICAgICAgICAgIE9GKChjb25zdCBjaGFyICpmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGVzdCBjb21wcmVzcygpIGFuZCB1bmNvbXByZXNzKCkKICAqLwpAQCAtMTYzLDYgKzE5Miw4IEBACiAjZW5kaWYKIH0KIAorI2VuZGlmIC8qIFpfU09MTyAqLworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFRlc3QgZGVmbGF0ZSgpIHdpdGggc21hbGwgYnVmZmVycwogICovCkBAIC0xNzQsMTQgKzIwNSwxNCBAQAogICAgIGludCBlcnI7CiAgICAgdUxvbmcgbGVuID0gKHVMb25nKXN0cmxlbihoZWxsbykrMTsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCi0gICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoQnl0ZWYqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAKICAgICB3aGlsZSAoY19zdHJlYW0udG90YWxfaW4gIT0gbGVuICYmIGNfc3RyZWFtLnRvdGFsX291dCA8IGNvbXByTGVuKSB7CkBAIC0yMTMsOCArMjQ0LDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTI1Miw4ICsyODMsOCBAQAogICAgIHpfc3RyZWFtIGNfc3RyZWFtOyAvKiBjb21wcmVzc2lvbiBzdHJlYW0gKi8KICAgICBpbnQgZXJyOwogCi0gICAgY19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBjX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgY19zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfQkVTVF9TUEVFRCk7CkBAIC0zMDksOCArMzQwLDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTM0OSwxNCArMzgwLDE0IEBACiAgICAgaW50IGVycjsKICAgICB1SW50IGxlbiA9ICh1SW50KXN0cmxlbihoZWxsbykrMTsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCi0gICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoQnl0ZWYqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAgICAgY19zdHJlYW0uYXZhaWxfaW4gPSAzOwogICAgIGNfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KSpjb21wckxlbjsKQEAgLTM4OCw4ICs0MTksOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtNDMwLDIyICs0NjEsMjIgQEAKICAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCiAgICAgaW50IGVycjsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0JFU1RfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCiAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJmNfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBCeXRlZiopZGljdGlvbmFyeSwgc2l6ZW9mKGRpY3Rpb25hcnkpKTsKKyAgICAgICAgICAgICAgICAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksIChpbnQpc2l6ZW9mKGRpY3Rpb25hcnkpKTsKICAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZVNldERpY3Rpb25hcnkiKTsKIAogICAgIGRpY3RJZCA9IGNfc3RyZWFtLmFkbGVyOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAgICAgY19zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpY29tcHJMZW47CiAKLSAgICBjX3N0cmVhbS5uZXh0X2luID0gKEJ5dGVmKiloZWxsbzsKKyAgICBjX3N0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc3RybGVuKGhlbGxvKSsxOwogCiAgICAgZXJyID0gZGVmbGF0ZSgmY19zdHJlYW0sIFpfRklOSVNIKTsKQEAgLTQ2OSw4ICs1MDAsOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtNDkxLDcgKzUyMiw3IEBACiAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVyciA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCZkX3N0cmVhbSwgKGNvbnN0IEJ5dGVmKilkaWN0aW9uYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRpY3Rpb25hcnkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGRpY3Rpb25hcnkpKTsKICAgICAgICAgfQogICAgICAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0ZSB3aXRoIGRpY3QiKTsKICAgICB9CkBAIC01NDAsMTAgKzU3MSwxNSBAQAogICAgICAgICBwcmludGYoIm91dCBvZiBtZW1vcnlcbiIpOwogICAgICAgICBleGl0KDEpOwogICAgIH0KKworI2lmZGVmIFpfU09MTworICAgIGFyZ2MgPSBzdHJsZW4oYXJndlswXSk7CisjZWxzZQogICAgIHRlc3RfY29tcHJlc3MoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKTsKIAogICAgIHRlc3RfZ3ppbygoYXJnYyA+IDEgPyBhcmd2WzFdIDogVEVTVEZJTEUpLAogICAgICAgICAgICAgICB1bmNvbXByLCB1bmNvbXByTGVuKTsKKyNlbmRpZgogCiAgICAgdGVzdF9kZWZsYXRlKGNvbXByLCBjb21wckxlbik7CiAgICAgdGVzdF9pbmZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3pndXRzLmggYi9Nb2R1bGVzL3psaWIvZ3pndXRzLmgKaW5kZXggMGY4ZmI3OS4uZDg3NjU5ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2d6Z3V0cy5oCisrKyBiL01vZHVsZXMvemxpYi9nemd1dHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGd6Z3V0cy5oIC0tIHpsaWIgaW50ZXJuYWwgaGVhZGVyIGRlZmluaXRpb25zIGZvciBneiogb3BlcmF0aW9ucwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTIsNyArMTIsNyBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykgJiYgIWRlZmluZWQoTk9fVklaKQorI2lmZGVmIEhBVkVfSElEREVOCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQogI2Vsc2UKICMgIGRlZmluZSBaTElCX0lOVEVSTkFMCkBAIC0yNywxMyArMjcsODAgQEAKICNlbmRpZgogI2luY2x1ZGUgPGZjbnRsLmg+CiAKKyNpZmRlZiBfV0lOMzIKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVFVSQk9DX18pIHx8IGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX1dJTjMyKQorIyAgaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWZkZWYgV0lOQVBJX0ZBTUlMWQorIyAgZGVmaW5lIG9wZW4gX29wZW4KKyMgIGRlZmluZSByZWFkIF9yZWFkCisjICBkZWZpbmUgd3JpdGUgX3dyaXRlCisjICBkZWZpbmUgY2xvc2UgX2Nsb3NlCisjZW5kaWYKKwogI2lmZGVmIE5PX0RFRkxBVEUgICAgICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZGVmaW5pdGlvbiAqLwogIyAgZGVmaW5lIE5PX0daQ09NUFJFU1MKICNlbmRpZgogCisjaWYgZGVmaW5lZChTVERDOTkpIHx8IChkZWZpbmVkKF9fVFVSQk9DX18pICYmIF9fVFVSQk9DX18gPj0gMHg1NTApCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1TRE9TKSAmJiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgKEJPUkxBTkRDID4gMHg0MTApCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgIGlmZGVmIE1TRE9TCisvKiB2c25wcmludGYgbWF5IGV4aXN0IG9uIHNvbWUgTVMtRE9TIGNvbXBpbGVycyAoREpHUFA/KSwKKyAgIGJ1dCBmb3Igbm93IHdlIGp1c3QgYXNzdW1lIGl0IGRvZXNuJ3QuICovCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX1RVUkJPQ19fCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBXSU4zMgorLyogSW4gV2luMzIsIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgYXMgdGhlICJub24tQU5TSSIgX3ZzbnByaW50Zi4gKi8KKyMgICAgaWYgIWRlZmluZWQodnNucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisjICAgICAgaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8ICggZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxNTAwICkKKyMgICAgICAgICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fU0FTQworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgVk1TCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX09TNDAwX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fTVZTX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiB1bmxpa2Ugc25wcmludGYgKHdoaWNoIGlzIHJlcXVpcmVkIGluIEM5OSwgeWV0IHN0aWxsIG5vdCBzdXBwb3J0ZWQgYnkKKyAgIE1pY3Jvc29mdCBtb3JlIHRoYW4gYSBkZWNhZGUgbGF0ZXIhKSwgX3NucHJpbnRmIGRvZXMgbm90IGd1YXJhbnRlZSBudWxsCisgICB0ZXJtaW5hdGlvbiBvZiB0aGUgcmVzdWx0IC0tIGhvd2V2ZXIgdGhpcyBpcyBvbmx5IHVzZWQgaW4gZ3psaWIuYyB3aGVyZQorICAgdGhlIHJlc3VsdCBpcyBhc3N1cmVkIHRvIGZpdCBpbiB0aGUgc3BhY2UgcHJvdmlkZWQgKi8KICNpZmRlZiBfTVNDX1ZFUgotIyAgaW5jbHVkZSA8aW8uaD4KLSMgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgorIyAgZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCiAKICNpZm5kZWYgbG9jYWwKQEAgLTUyLDcgKzExOSw3IEBACiAjICBpbmNsdWRlIDx3aW5kb3dzLmg+CiAjICBkZWZpbmUgenN0cmVycm9yKCkgZ3pfc3Ryd2luZXJyb3IoKERXT1JEKUdldExhc3RFcnJvcigpKQogI2Vsc2UKLSMgIGlmZGVmIFNUREMKKyMgIGlmbmRlZiBOT19TVFJFUlJPUgogIyAgICBpbmNsdWRlIDxlcnJuby5oPgogIyAgICBkZWZpbmUgenN0cmVycm9yKCkgc3RyZXJyb3IoZXJybm8pCiAjICBlbHNlCkBAIC02OCw3ICsxMzUsMTUgQEAKICAgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6b2Zmc2V0NjQgT0YoKGd6RmlsZSkpOwogI2VuZGlmCiAKLS8qIGRlZmF1bHQgaS9vIGJ1ZmZlciBzaXplIC0tIGRvdWJsZSB0aGlzIGZvciBvdXRwdXQgd2hlbiByZWFkaW5nICovCisvKiBkZWZhdWx0IG1lbUxldmVsICovCisjaWYgTUFYX01FTV9MRVZFTCA+PSA4CisjICBkZWZpbmUgREVGX01FTV9MRVZFTCA4CisjZWxzZQorIyAgZGVmaW5lIERFRl9NRU1fTEVWRUwgIE1BWF9NRU1fTEVWRUwKKyNlbmRpZgorCisvKiBkZWZhdWx0IGkvbyBidWZmZXIgc2l6ZSAtLSBkb3VibGUgdGhpcyBmb3Igb3V0cHV0IHdoZW4gcmVhZGluZyAodGhpcyBhbmQKKyAgIHR3aWNlIHRoaXMgbXVzdCBiZSBhYmxlIHRvIGZpdCBpbiBhbiB1bnNpZ25lZCB0eXBlKSAqLwogI2RlZmluZSBHWkJVRlNJWkUgODE5MgogCiAvKiBnemlwIG1vZGVzLCBhbHNvIHByb3ZpZGUgYSBsaXR0bGUgaW50ZWdyaXR5IGNoZWNrIG9uIHRoZSBwYXNzZWQgc3RydWN0dXJlICovCkBAIC04NCwyMyArMTU5LDI1IEBACiAKIC8qIGludGVybmFsIGd6aXAgZmlsZSBzdGF0ZSBkYXRhIHN0cnVjdHVyZSAqLwogdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICAvKiBleHBvc2VkIGNvbnRlbnRzIGZvciBnemdldGMoKSBtYWNybyAqLworICAgIHN0cnVjdCBnekZpbGVfcyB4OyAgICAgIC8qICJ4IiBmb3IgZXhwb3NlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHguaGF2ZTogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCB4Lm5leHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4Lm5leHQ6IG5leHQgb3V0cHV0IGRhdGEgdG8gZGVsaXZlciBvciB3cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHgucG9zOiBjdXJyZW50IHBvc2l0aW9uIGluIHVuY29tcHJlc3NlZCBkYXRhICovCiAgICAgICAgIC8qIHVzZWQgZm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZyAqLwogICAgIGludCBtb2RlOyAgICAgICAgICAgICAgIC8qIHNlZSBnemlwIG1vZGVzIGFib3ZlICovCiAgICAgaW50IGZkOyAgICAgICAgICAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9yICovCiAgICAgY2hhciAqcGF0aDsgICAgICAgICAgICAgLyogcGF0aCBvciBmZCBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KLSAgICB6X29mZjY0X3QgcG9zOyAgICAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIHVuY29tcHJlc3NlZCBkYXRhICovCiAgICAgdW5zaWduZWQgc2l6ZTsgICAgICAgICAgLyogYnVmZmVyIHNpemUsIHplcm8gaWYgbm90IGFsbG9jYXRlZCB5ZXQgKi8KICAgICB1bnNpZ25lZCB3YW50OyAgICAgICAgICAvKiByZXF1ZXN0ZWQgYnVmZmVyIHNpemUsIGRlZmF1bHQgaXMgR1pCVUZTSVpFICovCiAgICAgdW5zaWduZWQgY2hhciAqaW47ICAgICAgLyogaW5wdXQgYnVmZmVyICovCiAgICAgdW5zaWduZWQgY2hhciAqb3V0OyAgICAgLyogb3V0cHV0IGJ1ZmZlciAoZG91YmxlLXNpemVkIHdoZW4gcmVhZGluZykgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpuZXh0OyAgICAvKiBuZXh0IG91dHB1dCBkYXRhIHRvIGRlbGl2ZXIgb3Igd3JpdGUgKi8KKyAgICBpbnQgZGlyZWN0OyAgICAgICAgICAgICAvKiAwIGlmIHByb2Nlc3NpbmcgZ3ppcCwgMSBpZiB0cmFuc3BhcmVudCAqLwogICAgICAgICAvKiBqdXN0IGZvciByZWFkaW5nICovCi0gICAgdW5zaWduZWQgaGF2ZTsgICAgICAgICAgLyogYW1vdW50IG9mIG91dHB1dCBkYXRhIHVudXNlZCBhdCBuZXh0ICovCi0gICAgaW50IGVvZjsgICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBlbmQgb2YgaW5wdXQgZmlsZSByZWFjaGVkICovCi0gICAgel9vZmY2NF90IHN0YXJ0OyAgICAgICAgLyogd2hlcmUgdGhlIGd6aXAgZGF0YSBzdGFydGVkLCBmb3IgcmV3aW5kaW5nICovCi0gICAgel9vZmY2NF90IHJhdzsgICAgICAgICAgLyogd2hlcmUgdGhlIHJhdyBkYXRhIHN0YXJ0ZWQsIGZvciBzZWVraW5nICovCiAgICAgaW50IGhvdzsgICAgICAgICAgICAgICAgLyogMDogZ2V0IGhlYWRlciwgMTogY29weSwgMjogZGVjb21wcmVzcyAqLwotICAgIGludCBkaXJlY3Q7ICAgICAgICAgICAgIC8qIHRydWUgaWYgbGFzdCByZWFkIGRpcmVjdCwgZmFsc2UgaWYgZ3ppcCAqLworICAgIHpfb2ZmNjRfdCBzdGFydDsgICAgICAgIC8qIHdoZXJlIHRoZSBnemlwIGRhdGEgc3RhcnRlZCwgZm9yIHJld2luZGluZyAqLworICAgIGludCBlb2Y7ICAgICAgICAgICAgICAgIC8qIHRydWUgaWYgZW5kIG9mIGlucHV0IGZpbGUgcmVhY2hlZCAqLworICAgIGludCBwYXN0OyAgICAgICAgICAgICAgIC8qIHRydWUgaWYgcmVhZCByZXF1ZXN0ZWQgcGFzdCBlbmQgKi8KICAgICAgICAgLyoganVzdCBmb3Igd3JpdGluZyAqLwogICAgIGludCBsZXZlbDsgICAgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIGxldmVsICovCiAgICAgaW50IHN0cmF0ZWd5OyAgICAgICAgICAgLyogY29tcHJlc3Npb24gc3RyYXRlZ3kgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nemlvLmMgYi9Nb2R1bGVzL3psaWIvZ3ppby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTkwZjQ5Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvemxpYi9nemlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDI2ICswLDAgQEAKLS8qIGd6aW8uYyAtLSBJTyBvbiAuZ3ogZmlsZXMKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IEplYW4tbG91cCBHYWlsbHkuCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCi0gKgotICogQ29tcGlsZSB0aGlzIGZpbGUgd2l0aCAtRE5PX0daQ09NUFJFU1MgdG8gYXZvaWQgdGhlIGNvbXByZXNzaW9uIGNvZGUuCi0gKi8KLQotLyogQCgjKSAkSWQkICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAienV0aWwuaCIKLQotI2lmZGVmIE5PX0RFRkxBVEUgICAgICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZGVmaW5pdGlvbiAqLwotIyAgZGVmaW5lIE5PX0daQ09NUFJFU1MKLSNlbmRpZgotCi0jaWZuZGVmIE5PX0RVTU1ZX0RFQ0wKLXN0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KLSNlbmRpZgotCi0jaWZuZGVmIFpfQlVGU0laRQotIyAgaWZkZWYgTUFYU0VHXzY0SwotIyAgICBkZWZpbmUgWl9CVUZTSVpFIDQwOTYgLyogbWluaW1pemUgbWVtb3J5IHVzYWdlIGZvciAxNi1iaXQgRE9TICovCi0jICBlbHNlCi0jICAgIGRlZmluZSBaX0JVRlNJWkUgMTYzODQKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgWl9QUklOVEZfQlVGU0laRQotIyAgZGVmaW5lIFpfUFJJTlRGX0JVRlNJWkUgNDA5NgotI2VuZGlmCi0KLSNpZmRlZiBfX01WU19fCi0jICBwcmFnbWEgbWFwIChmZG9wZW4gLCAiXDE3NFwxNzRGRE9QRU4iKQotICAgRklMRSAqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKLSNlbmRpZgotCi0jaWZuZGVmIFNUREMKLWV4dGVybiB2b2lkcCAgbWFsbG9jIE9GKCh1SW50IHNpemUpKTsKLWV4dGVybiB2b2lkICAgZnJlZSAgIE9GKCh2b2lkcGYgcHRyKSk7Ci0jZW5kaWYKLQotI2RlZmluZSBBTExPQyhzaXplKSBtYWxsb2Moc2l6ZSkKLSNkZWZpbmUgVFJZRlJFRShwKSB7aWYgKHApIGZyZWUocCk7fQotCi1zdGF0aWMgaW50IGNvbnN0IGd6X21hZ2ljWzJdID0gezB4MWYsIDB4OGJ9OyAvKiBnemlwIG1hZ2ljIGhlYWRlciAqLwotCi0vKiBnemlwIGZsYWcgYnl0ZSAqLwotI2RlZmluZSBBU0NJSV9GTEFHICAgMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkgYXNjaWkgdGV4dCAqLwotI2RlZmluZSBIRUFEX0NSQyAgICAgMHgwMiAvKiBiaXQgMSBzZXQ6IGhlYWRlciBDUkMgcHJlc2VudCAqLwotI2RlZmluZSBFWFRSQV9GSUVMRCAgMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KLSNkZWZpbmUgT1JJR19OQU1FICAgIDB4MDggLyogYml0IDMgc2V0OiBvcmlnaW5hbCBmaWxlIG5hbWUgcHJlc2VudCAqLwotI2RlZmluZSBDT01NRU5UICAgICAgMHgxMCAvKiBiaXQgNCBzZXQ6IGZpbGUgY29tbWVudCBwcmVzZW50ICovCi0jZGVmaW5lIFJFU0VSVkVEICAgICAweEUwIC8qIGJpdHMgNS4uNzogcmVzZXJ2ZWQgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgZ3pfc3RyZWFtIHsKLSAgICB6X3N0cmVhbSBzdHJlYW07Ci0gICAgaW50ICAgICAgel9lcnI7ICAgLyogZXJyb3IgY29kZSBmb3IgbGFzdCBzdHJlYW0gb3BlcmF0aW9uICovCi0gICAgaW50ICAgICAgel9lb2Y7ICAgLyogc2V0IGlmIGVuZCBvZiBpbnB1dCBmaWxlICovCi0gICAgRklMRSAgICAgKmZpbGU7ICAgLyogLmd6IGZpbGUgKi8KLSAgICBCeXRlICAgICAqaW5idWY7ICAvKiBpbnB1dCBidWZmZXIgKi8KLSAgICBCeXRlICAgICAqb3V0YnVmOyAvKiBvdXRwdXQgYnVmZmVyICovCi0gICAgdUxvbmcgICAgY3JjOyAgICAgLyogY3JjMzIgb2YgdW5jb21wcmVzc2VkIGRhdGEgKi8KLSAgICBjaGFyICAgICAqbXNnOyAgICAvKiBlcnJvciBtZXNzYWdlICovCi0gICAgY2hhciAgICAgKnBhdGg7ICAgLyogcGF0aCBuYW1lIGZvciBkZWJ1Z2dpbmcgb25seSAqLwotICAgIGludCAgICAgIHRyYW5zcGFyZW50OyAvKiAxIGlmIGlucHV0IGZpbGUgaXMgbm90IGEgLmd6IGZpbGUgKi8KLSAgICBjaGFyICAgICBtb2RlOyAgICAvKiAndycgb3IgJ3InICovCi0gICAgel9vZmZfdCAgc3RhcnQ7ICAgLyogc3RhcnQgb2YgY29tcHJlc3NlZCBkYXRhIGluIGZpbGUgKGhlYWRlciBza2lwcGVkKSAqLwotICAgIHpfb2ZmX3QgIGluOyAgICAgIC8qIGJ5dGVzIGludG8gZGVmbGF0ZSBvciBpbmZsYXRlICovCi0gICAgel9vZmZfdCAgb3V0OyAgICAgLyogYnl0ZXMgb3V0IG9mIGRlZmxhdGUgb3IgaW5mbGF0ZSAqLwotICAgIGludCAgICAgIGJhY2s7ICAgIC8qIG9uZSBjaGFyYWN0ZXIgcHVzaC1iYWNrICovCi0gICAgaW50ICAgICAgbGFzdDsgICAgLyogdHJ1ZSBpZiBwdXNoLWJhY2sgaXMgbGFzdCBjaGFyYWN0ZXIgKi8KLX0gZ3pfc3RyZWFtOwotCi0KLWxvY2FsIGd6RmlsZSBnel9vcGVuICAgICAgT0YoKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIGludCAgZmQpKTsKLWxvY2FsIGludCBkb19mbHVzaCAgICAgICAgT0YoKGd6RmlsZSBmaWxlLCBpbnQgZmx1c2gpKTsKLWxvY2FsIGludCAgICBnZXRfYnl0ZSAgICAgT0YoKGd6X3N0cmVhbSAqcykpOwotbG9jYWwgdm9pZCAgIGNoZWNrX2hlYWRlciBPRigoZ3pfc3RyZWFtICpzKSk7Ci1sb2NhbCBpbnQgICAgZGVzdHJveSAgICAgIE9GKChnel9zdHJlYW0gKnMpKTsKLWxvY2FsIHZvaWQgICBwdXRMb25nICAgICAgT0YoKEZJTEUgKmZpbGUsIHVMb25nIHgpKTsKLWxvY2FsIHVMb25nICBnZXRMb25nICAgICAgT0YoKGd6X3N0cmVhbSAqcykpOwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gVGhlIG1vZGUgcGFyYW1ldGVyCi0gICBpcyBhcyBpbiBmb3BlbiAoInJiIiBvciAid2IiKS4gVGhlIGZpbGUgaXMgZ2l2ZW4gZWl0aGVyIGJ5IGZpbGUgZGVzY3JpcHRvcgotICAgb3IgcGF0aCBuYW1lIChpZiBmZCA9PSAtMSkuCi0gICAgIGd6X29wZW4gcmV0dXJucyBOVUxMIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQgb3IgaWYgdGhlcmUgd2FzCi0gICBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGU7IGVycm5vCi0gICBjYW4gYmUgY2hlY2tlZCB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIGNhc2VzIChpZiBlcnJubyBpcyB6ZXJvLCB0aGUKLSAgIHpsaWIgZXJyb3IgaXMgWl9NRU1fRVJST1IpLgotKi8KLWxvY2FsIGd6RmlsZSBnel9vcGVuIChwYXRoLCBtb2RlLCBmZCkKLSAgICBjb25zdCBjaGFyICpwYXRoOwotICAgIGNvbnN0IGNoYXIgKm1vZGU7Ci0gICAgaW50ICBmZDsKLXsKLSAgICBpbnQgZXJyOwotICAgIGludCBsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsgLyogY29tcHJlc3Npb24gbGV2ZWwgKi8KLSAgICBpbnQgc3RyYXRlZ3kgPSBaX0RFRkFVTFRfU1RSQVRFR1k7IC8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5ICovCi0gICAgY2hhciAqcCA9IChjaGFyKiltb2RlOwotICAgIGd6X3N0cmVhbSAqczsKLSAgICBjaGFyIGZtb2RlWzgwXTsgLyogY29weSBvZiBtb2RlLCB3aXRob3V0IHRoZSBjb21wcmVzc2lvbiBsZXZlbCAqLwotICAgIGNoYXIgKm0gPSBmbW9kZTsKLQotICAgIGlmICghcGF0aCB8fCAhbW9kZSkgcmV0dXJuIFpfTlVMTDsKLQotICAgIHMgPSAoZ3pfc3RyZWFtICopQUxMT0Moc2l6ZW9mKGd6X3N0cmVhbSkpOwotICAgIGlmICghcykgcmV0dXJuIFpfTlVMTDsKLQotICAgIHMtPnN0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIHMtPnN0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLSAgICBzLT5zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWYgPSBaX05VTEw7Ci0gICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmID0gWl9OVUxMOwotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IHMtPnN0cmVhbS5hdmFpbF9vdXQgPSAwOwotICAgIHMtPmZpbGUgPSBOVUxMOwotICAgIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcy0+aW4gPSAwOwotICAgIHMtPm91dCA9IDA7Ci0gICAgcy0+YmFjayA9IEVPRjsKLSAgICBzLT5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICBzLT5tc2cgPSBOVUxMOwotICAgIHMtPnRyYW5zcGFyZW50ID0gMDsKLQotICAgIHMtPnBhdGggPSAoY2hhciopQUxMT0Moc3RybGVuKHBhdGgpKzEpOwotICAgIGlmIChzLT5wYXRoID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgIH0KLSAgICBzdHJjcHkocy0+cGF0aCwgcGF0aCk7IC8qIGRvIHRoaXMgZWFybHkgZm9yIGRlYnVnZ2luZyAqLwotCi0gICAgcy0+bW9kZSA9ICdcMCc7Ci0gICAgZG8gewotICAgICAgICBpZiAoKnAgPT0gJ3InKSBzLT5tb2RlID0gJ3InOwotICAgICAgICBpZiAoKnAgPT0gJ3cnIHx8ICpwID09ICdhJykgcy0+bW9kZSA9ICd3JzsKLSAgICAgICAgaWYgKCpwID49ICcwJyAmJiAqcCA8PSAnOScpIHsKLSAgICAgICAgICAgIGxldmVsID0gKnAgLSAnMCc7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ2YnKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX0ZJTFRFUkVEOwotICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdoJykgewotICAgICAgICAgIHN0cmF0ZWd5ID0gWl9IVUZGTUFOX09OTFk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ1InKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX1JMRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICptKysgPSAqcDsgLyogY29weSB0aGUgbW9kZSAqLwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKnArKyAmJiBtICE9IGZtb2RlICsgc2l6ZW9mKGZtb2RlKSk7Ci0gICAgaWYgKHMtPm1vZGUgPT0gJ1wwJykgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotCi0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwotICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgIGVyciA9IGRlZmxhdGVJbml0MigmKHMtPnN0cmVhbSksIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9ERUZMQVRFRCwgLU1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgc3RyYXRlZ3kpOwotICAgICAgICAvKiB3aW5kb3dCaXRzIGlzIHBhc3NlZCA8IDAgdG8gc3VwcHJlc3MgemxpYiBoZWFkZXIgKi8KLQotICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLSNlbmRpZgotICAgICAgICBpZiAoZXJyICE9IFpfT0sgfHwgcy0+b3V0YnVmID09IFpfTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gID0gcy0+aW5idWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLQotICAgICAgICBlcnIgPSBpbmZsYXRlSW5pdDIoJihzLT5zdHJlYW0pLCAtTUFYX1dCSVRTKTsKLSAgICAgICAgLyogd2luZG93Qml0cyBpcyBwYXNzZWQgPCAwIHRvIHRlbGwgdGhhdCB0aGVyZSBpcyBubyB6bGliIGhlYWRlci4KLSAgICAgICAgICogTm90ZSB0aGF0IGluIHRoaXMgY2FzZSBpbmZsYXRlICpyZXF1aXJlcyogYW4gZXh0cmEgImR1bW15IiBieXRlCi0gICAgICAgICAqIGFmdGVyIHRoZSBjb21wcmVzc2VkIHN0cmVhbSBpbiBvcmRlciB0byBjb21wbGV0ZSBkZWNvbXByZXNzaW9uIGFuZAotICAgICAgICAgKiByZXR1cm4gWl9TVFJFQU1fRU5ELiBIZXJlIHRoZSBnemlwIENSQzMyIGVuc3VyZXMgdGhhdCA0IGJ5dGVzIGFyZQotICAgICAgICAgKiBwcmVzZW50IGFmdGVyIHRoZSBjb21wcmVzc2VkIHN0cmVhbS4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChlcnIgIT0gWl9PSyB8fCBzLT5pbmJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotCi0gICAgZXJybm8gPSAwOwotICAgIHMtPmZpbGUgPSBmZCA8IDAgPyBGX09QRU4ocGF0aCwgZm1vZGUpIDogKEZJTEUqKWZkb3BlbihmZCwgZm1vZGUpOwotCi0gICAgaWYgKHMtPmZpbGUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgfQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotICAgICAgICAvKiBXcml0ZSBhIHZlcnkgc2ltcGxlIC5neiBoZWFkZXI6Ci0gICAgICAgICAqLwotICAgICAgICBmcHJpbnRmKHMtPmZpbGUsICIlYyVjJWMlYyVjJWMlYyVjJWMlYyIsIGd6X21hZ2ljWzBdLCBnel9tYWdpY1sxXSwKLSAgICAgICAgICAgICBaX0RFRkxBVEVELCAwIC8qZmxhZ3MqLywgMCwwLDAsMCAvKnRpbWUqLywgMCAvKnhmbGFncyovLCBPU19DT0RFKTsKLSAgICAgICAgcy0+c3RhcnQgPSAxMEw7Ci0gICAgICAgIC8qIFdlIHVzZSAxMEwgaW5zdGVhZCBvZiBmdGVsbChzLT5maWxlKSB0byBiZWNhdXNlIGZ0ZWxsIGNhdXNlcyBhbgotICAgICAgICAgKiBmZmx1c2ggb24gc29tZSBzeXN0ZW1zLiBUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG9lc24ndCB1c2UKLSAgICAgICAgICogc3RhcnQgYW55d2F5IGluIHdyaXRlIG1vZGUsIHNvIHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgbm90Ci0gICAgICAgICAqIG5lY2Vzc2FyeS4KLSAgICAgICAgICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hlY2tfaGVhZGVyKHMpOyAvKiBza2lwIHRoZSAuZ3ogaGVhZGVyICovCi0gICAgICAgIHMtPnN0YXJ0ID0gZnRlbGwocy0+ZmlsZSkgLSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgfQotCi0gICAgcmV0dXJuIChnekZpbGUpczsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIE9wZW5zIGEgZ3ppcCAoLmd6KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuCi0qLwotZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuIChwYXRoLCBtb2RlKQotICAgIGNvbnN0IGNoYXIgKnBhdGg7Ci0gICAgY29uc3QgY2hhciAqbW9kZTsKLXsKLSAgICByZXR1cm4gZ3pfb3BlbiAocGF0aCwgbW9kZSwgLTEpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgQXNzb2NpYXRlIGEgZ3pGaWxlIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4gZmQgaXMgbm90IGR1cCdlZCBoZXJlCi0gICB0byBtaW1pYyB0aGUgYmVoYXZpbyh1KXIgb2YgZmRvcGVuLgotKi8KLWd6RmlsZSBaRVhQT1JUIGd6ZG9wZW4gKGZkLCBtb2RlKQotICAgIGludCBmZDsKLSAgICBjb25zdCBjaGFyICptb2RlOwotewotICAgIGNoYXIgbmFtZVs0Nl07ICAgICAgLyogYWxsb3cgZm9yIHVwIHRvIDEyOC1iaXQgaW50ZWdlcnMgKi8KLQotICAgIGlmIChmZCA8IDApIHJldHVybiAoZ3pGaWxlKVpfTlVMTDsKLSAgICBzcHJpbnRmKG5hbWUsICI8ZmQ6JWQ+IiwgZmQpOyAvKiBmb3IgZGVidWdnaW5nICovCi0KLSAgICByZXR1cm4gZ3pfb3BlbiAobmFtZSwgbW9kZSwgZmQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIHN0cmF0ZWd5Ci0gKi8KLWludCBaRVhQT1JUIGd6c2V0cGFyYW1zIChmaWxlLCBsZXZlbCwgc3RyYXRlZ3kpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50IGxldmVsOwotICAgIGludCBzdHJhdGVneTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICd3JykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgLyogTWFrZSByb29tIHRvIGFsbG93IGZsdXNoaW5nICovCi0gICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgewotCi0gICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZjsKLSAgICAgICAgaWYgKGZ3cml0ZShzLT5vdXRidWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSkgIT0gWl9CVUZTSVpFKSB7Ci0gICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgIH0KLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmbGF0ZVBhcmFtcyAoJihzLT5zdHJlYW0pLCBsZXZlbCwgc3RyYXRlZ3kpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmVhZCBhIGJ5dGUgZnJvbSBhIGd6X3N0cmVhbTsgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luLiBSZXR1cm4gRU9GCi0gICBmb3IgZW5kIG9mIGZpbGUuCi0gICBJTiBhc3NlcnRpb246IHRoZSBzdHJlYW0gcyBoYXMgYmVlbiBzdWNlc3NmdWxseSBvcGVuZWQgZm9yIHJlYWRpbmcuCi0qLwotbG9jYWwgaW50IGdldF9ieXRlKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIGlmIChzLT56X2VvZikgcmV0dXJuIEVPRjsKLSAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgZXJybm8gPSAwOwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAodUludClmcmVhZChzLT5pbmJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICBpZiAoZmVycm9yKHMtPmZpbGUpKSBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICByZXR1cm4gRU9GOwotICAgICAgICB9Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgfQotICAgIHMtPnN0cmVhbS5hdmFpbF9pbi0tOwotICAgIHJldHVybiAqKHMtPnN0cmVhbS5uZXh0X2luKSsrOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIENoZWNrIHRoZSBnemlwIGhlYWRlciBvZiBhIGd6X3N0cmVhbSBvcGVuZWQgZm9yIHJlYWRpbmcuIFNldCB0aGUgc3RyZWFtCi0gICAgbW9kZSB0byB0cmFuc3BhcmVudCBpZiB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgaXMgbm90IHByZXNlbnQ7IHNldCBzLT5lcnIKLSAgICB0byBaX0RBVEFfRVJST1IgaWYgdGhlIG1hZ2ljIGhlYWRlciBpcyBwcmVzZW50IGJ1dCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyCi0gICAgaXMgaW5jb3JyZWN0LgotICAgIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBzdWNlc3NmdWxseTsKLSAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gaXMgemVybyBmb3IgdGhlIGZpcnN0IHRpbWUsIGJ1dCBtYXkgYmUgbm9uLXplcm8KLSAgICAgICBmb3IgY29uY2F0ZW5hdGVkIC5neiBmaWxlcy4KLSovCi1sb2NhbCB2b2lkIGNoZWNrX2hlYWRlcihzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICBpbnQgbWV0aG9kOyAvKiBtZXRob2QgYnl0ZSAqLwotICAgIGludCBmbGFnczsgIC8qIGZsYWdzIGJ5dGUgKi8KLSAgICB1SW50IGxlbjsKLSAgICBpbnQgYzsKLQotICAgIC8qIEFzc3VyZSB0d28gYnl0ZXMgaW4gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gcGVlayBhaGVhZCAtLSBoYW5kbGUgY2FzZQotICAgICAgIHdoZXJlIGZpcnN0IGJ5dGUgb2YgaGVhZGVyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhZnRlciB0aGUgbGFzdAotICAgICAgIGd6aXAgc2VnbWVudCAqLwotICAgIGxlbiA9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICBpZiAobGVuIDwgMikgewotICAgICAgICBpZiAobGVuKSBzLT5pbmJ1ZlswXSA9IHMtPnN0cmVhbS5uZXh0X2luWzBdOwotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIGxlbiA9ICh1SW50KWZyZWFkKHMtPmluYnVmICsgbGVuLCAxLCBaX0JVRlNJWkUgPj4gbGVuLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKGxlbiA9PSAwICYmIGZlcnJvcihzLT5maWxlKSkgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gKz0gbGVuOwotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luIDwgMikgewotICAgICAgICAgICAgcy0+dHJhbnNwYXJlbnQgPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBQZWVrIGFoZWFkIHRvIGNoZWNrIHRoZSBnemlwIG1hZ2ljIGhlYWRlciAqLwotICAgIGlmIChzLT5zdHJlYW0ubmV4dF9pblswXSAhPSBnel9tYWdpY1swXSB8fAotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pblsxXSAhPSBnel9tYWdpY1sxXSkgewotICAgICAgICBzLT50cmFuc3BhcmVudCA9IDE7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luIC09IDI7Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gKz0gMjsKLQotICAgIC8qIENoZWNrIHRoZSByZXN0IG9mIHRoZSBnemlwIGhlYWRlciAqLwotICAgIG1ldGhvZCA9IGdldF9ieXRlKHMpOwotICAgIGZsYWdzID0gZ2V0X2J5dGUocyk7Ci0gICAgaWYgKG1ldGhvZCAhPSBaX0RFRkxBVEVEIHx8IChmbGFncyAmIFJFU0VSVkVEKSAhPSAwKSB7Ci0gICAgICAgIHMtPnpfZXJyID0gWl9EQVRBX0VSUk9SOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyogRGlzY2FyZCB0aW1lLCB4ZmxhZ3MgYW5kIE9TIGNvZGU6ICovCi0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCA2OyBsZW4rKykgKHZvaWQpZ2V0X2J5dGUocyk7Ci0KLSAgICBpZiAoKGZsYWdzICYgRVhUUkFfRklFTEQpICE9IDApIHsgLyogc2tpcCB0aGUgZXh0cmEgZmllbGQgKi8KLSAgICAgICAgbGVuICA9ICAodUludClnZXRfYnl0ZShzKTsKLSAgICAgICAgbGVuICs9ICgodUludClnZXRfYnl0ZShzKSk8PDg7Ci0gICAgICAgIC8qIGxlbiBpcyBnYXJiYWdlIGlmIEVPRiBidXQgdGhlIGxvb3AgYmVsb3cgd2lsbCBxdWl0IGFueXdheSAqLwotICAgICAgICB3aGlsZSAobGVuLS0gIT0gMCAmJiBnZXRfYnl0ZShzKSAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIE9SSUdfTkFNRSkgIT0gMCkgeyAvKiBza2lwIHRoZSBvcmlnaW5hbCBmaWxlIG5hbWUgKi8KLSAgICAgICAgd2hpbGUgKChjID0gZ2V0X2J5dGUocykpICE9IDAgJiYgYyAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIENPTU1FTlQpICE9IDApIHsgICAvKiBza2lwIHRoZSAuZ3ogZmlsZSBjb21tZW50ICovCi0gICAgICAgIHdoaWxlICgoYyA9IGdldF9ieXRlKHMpKSAhPSAwICYmIGMgIT0gRU9GKSA7Ci0gICAgfQotICAgIGlmICgoZmxhZ3MgJiBIRUFEX0NSQykgIT0gMCkgeyAgLyogc2tpcCB0aGUgaGVhZGVyIGNyYyAqLwotICAgICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IDI7IGxlbisrKSAodm9pZClnZXRfYnl0ZShzKTsKLSAgICB9Ci0gICAgcy0+el9lcnIgPSBzLT56X2VvZiA/IFpfREFUQV9FUlJPUiA6IFpfT0s7Ci19Ci0KLSAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENsZWFudXAgdGhlbiBmcmVlIHRoZSBnaXZlbiBnel9zdHJlYW0uIFJldHVybiBhIHpsaWIgZXJyb3IgY29kZS4KLSAgIFRyeSBmcmVlaW5nIGluIHRoZSByZXZlcnNlIG9yZGVyIG9mIGFsbG9jYXRpb25zLgotICovCi1sb2NhbCBpbnQgZGVzdHJveSAocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgaW50IGVyciA9IFpfT0s7Ci0KLSAgICBpZiAoIXMpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIFRSWUZSRUUocy0+bXNnKTsKLQotICAgIGlmIChzLT5zdHJlYW0uc3RhdGUgIT0gTlVMTCkgewotICAgICAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgICAgICBlcnIgPSBkZWZsYXRlRW5kKCYocy0+c3RyZWFtKSk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIGlmIChzLT5tb2RlID09ICdyJykgewotICAgICAgICAgICAgZXJyID0gaW5mbGF0ZUVuZCgmKHMtPnN0cmVhbSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChzLT5maWxlICE9IE5VTEwgJiYgZmNsb3NlKHMtPmZpbGUpKSB7Ci0jaWZkZWYgRVNQSVBFCi0gICAgICAgIGlmIChlcnJubyAhPSBFU1BJUEUpIC8qIGZjbG9zZSBpcyBicm9rZW4gZm9yIHBpcGVzIGluIEhQL1VYICovCi0jZW5kaWYKLSAgICAgICAgICAgIGVyciA9IFpfRVJSTk87Ci0gICAgfQotICAgIGlmIChzLT56X2VyciA8IDApIGVyciA9IHMtPnpfZXJyOwotCi0gICAgVFJZRlJFRShzLT5pbmJ1Zik7Ci0gICAgVFJZRlJFRShzLT5vdXRidWYpOwotICAgIFRSWUZSRUUocy0+cGF0aCk7Ci0gICAgVFJZRlJFRShzKTsKLSAgICByZXR1cm4gZXJyOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgZ3pyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkICgwIGZvciBlbmQgb2YgZmlsZSkuCi0qLwotaW50IFpFWFBPUlQgZ3pyZWFkIChmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUgZmlsZTsKLSAgICB2b2lkcCBidWY7Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0gICAgQnl0ZWYgKnN0YXJ0ID0gKEJ5dGVmKilidWY7IC8qIHN0YXJ0aW5nIHBvaW50IGZvciBjcmMgY29tcHV0YXRpb24gKi8KLSAgICBCeXRlICAqbmV4dF9vdXQ7IC8qID09IHN0cmVhbS5uZXh0X291dCBidXQgbm90IGZvcmNlZCBmYXIgKGZvciBNU0RPUykgKi8KLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIGlmIChzLT56X2VyciA9PSBaX0RBVEFfRVJST1IgfHwgcy0+el9lcnIgPT0gWl9FUlJOTykgcmV0dXJuIC0xOwotICAgIGlmIChzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpIHJldHVybiAwOyAgLyogRU9GICovCi0KLSAgICBuZXh0X291dCA9IChCeXRlKilidWY7Ci0gICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gKEJ5dGVmKilidWY7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IGxlbjsKLQotICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ICYmIHMtPmJhY2sgIT0gRU9GKSB7Ci0gICAgICAgICpuZXh0X291dCsrID0gcy0+YmFjazsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0Kys7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQtLTsKLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAgcy0+b3V0Kys7Ci0gICAgICAgIHN0YXJ0Kys7Ci0gICAgICAgIGlmIChzLT5sYXN0KSB7Ci0gICAgICAgICAgICBzLT56X2VyciA9IFpfU1RSRUFNX0VORDsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUgKHMtPnN0cmVhbS5hdmFpbF9vdXQgIT0gMCkgewotCi0gICAgICAgIGlmIChzLT50cmFuc3BhcmVudCkgewotICAgICAgICAgICAgLyogQ29weSBmaXJzdCB0aGUgbG9va2FoZWFkIGJ5dGVzOiAqLwotICAgICAgICAgICAgdUludCBuID0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICAgICAgaWYgKG4gPiBzLT5zdHJlYW0uYXZhaWxfb3V0KSBuID0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgICAgIGlmIChuID4gMCkgewotICAgICAgICAgICAgICAgIHptZW1jcHkocy0+c3RyZWFtLm5leHRfb3V0LCBzLT5zdHJlYW0ubmV4dF9pbiwgbik7Ci0gICAgICAgICAgICAgICAgbmV4dF9vdXQgKz0gbjsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBuZXh0X291dDsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiAgICs9IG47Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCAtPSBuOwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiAgLT0gbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ID4gMCkgewotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgLT0KLSAgICAgICAgICAgICAgICAgICAgKHVJbnQpZnJlYWQobmV4dF9vdXQsIDEsIHMtPnN0cmVhbS5hdmFpbF9vdXQsIHMtPmZpbGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuIC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgICAgICBzLT5pbiAgKz0gbGVuOwotICAgICAgICAgICAgcy0+b3V0ICs9IGxlbjsKLSAgICAgICAgICAgIGlmIChsZW4gPT0gMCkgcy0+el9lb2YgPSAxOwotICAgICAgICAgICAgcmV0dXJuIChpbnQpbGVuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPT0gMCAmJiAhcy0+el9lb2YpIHsKLQotICAgICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luID0gKHVJbnQpZnJlYWQocy0+aW5idWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSk7Ci0gICAgICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgICAgICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZlcnJvcihzLT5maWxlKSkgewotICAgICAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+aW4gKz0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgcy0+el9lcnIgPSBpbmZsYXRlKCYocy0+c3RyZWFtKSwgWl9OT19GTFVTSCk7Ci0gICAgICAgIHMtPmluIC09IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAgaWYgKHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCkgewotICAgICAgICAgICAgLyogQ2hlY2sgQ1JDIGFuZCBvcmlnaW5hbCBzaXplICovCi0gICAgICAgICAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIHN0YXJ0LCAodUludCkocy0+c3RyZWFtLm5leHRfb3V0IC0gc3RhcnQpKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gcy0+c3RyZWFtLm5leHRfb3V0OwotCi0gICAgICAgICAgICBpZiAoZ2V0TG9uZyhzKSAhPSBzLT5jcmMpIHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfREFUQV9FUlJPUjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKHZvaWQpZ2V0TG9uZyhzKTsKLSAgICAgICAgICAgICAgICAvKiBUaGUgdW5jb21wcmVzc2VkIGxlbmd0aCByZXR1cm5lZCBieSBhYm92ZSBnZXRsb25nKCkgbWF5IGJlCi0gICAgICAgICAgICAgICAgICogZGlmZmVyZW50IGZyb20gcy0+b3V0IGluIGNhc2Ugb2YgY29uY2F0ZW5hdGVkIC5neiBmaWxlcy4KLSAgICAgICAgICAgICAgICAgKiBDaGVjayBmb3Igc3VjaCBmaWxlczoKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBjaGVja19oZWFkZXIocyk7Ci0gICAgICAgICAgICAgICAgaWYgKHMtPnpfZXJyID09IFpfT0spIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KCYocy0+c3RyZWFtKSk7Ci0gICAgICAgICAgICAgICAgICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9PSyB8fCBzLT56X2VvZikgYnJlYWs7Ci0gICAgfQotICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgc3RhcnQsICh1SW50KShzLT5zdHJlYW0ubmV4dF9vdXQgLSBzdGFydCkpOwotCi0gICAgaWYgKGxlbiA9PSBzLT5zdHJlYW0uYXZhaWxfb3V0ICYmCi0gICAgICAgIChzLT56X2VyciA9PSBaX0RBVEFfRVJST1IgfHwgcy0+el9lcnIgPT0gWl9FUlJOTykpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gKGludCkobGVuIC0gcy0+c3RyZWFtLmF2YWlsX291dCk7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBSZWFkcyBvbmUgYnl0ZSBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuIGd6Z2V0YyByZXR1cm5zIHRoaXMgYnl0ZQotICAgb3IgLTEgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnemdldGMoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGM7Ci0KLSAgICByZXR1cm4gZ3pyZWFkKGZpbGUsICZjLCAxKSA9PSAxID8gYyA6IC0xOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgUHVzaCBvbmUgYnl0ZSBiYWNrIG9udG8gdGhlIHN0cmVhbS4KLSovCi1pbnQgWkVYUE9SVCBnenVuZ2V0YyhjLCBmaWxlKQotICAgIGludCBjOwotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InIHx8IGMgPT0gRU9GIHx8IHMtPmJhY2sgIT0gRU9GKSByZXR1cm4gRU9GOwotICAgIHMtPmJhY2sgPSBjOwotICAgIHMtPm91dC0tOwotICAgIHMtPmxhc3QgPSAocy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EKTsKLSAgICBpZiAocy0+bGFzdCkgcy0+el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICByZXR1cm4gYzsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFJlYWRzIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSB1bnRpbCBsZW4tMSBjaGFyYWN0ZXJzIGFyZQotICAgcmVhZCwgb3IgYSBuZXdsaW5lIGNoYXJhY3RlciBpcyByZWFkIGFuZCB0cmFuc2ZlcnJlZCB0byBidWYsIG9yIGFuCi0gICBlbmQtb2YtZmlsZSBjb25kaXRpb24gaXMgZW5jb3VudGVyZWQuICBUaGUgc3RyaW5nIGlzIHRoZW4gdGVybWluYXRlZAotICAgd2l0aCBhIG51bGwgY2hhcmFjdGVyLgotICAgICAgZ3pnZXRzIHJldHVybnMgYnVmLCBvciBaX05VTEwgaW4gY2FzZSBvZiBlcnJvci4KLQotICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgbm90IG9wdGltaXplZCBhdCBhbGwuCi0qLwotY2hhciAqIFpFWFBPUlQgZ3pnZXRzKGZpbGUsIGJ1ZiwgbGVuKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNoYXIgKmJ1ZjsKLSAgICBpbnQgbGVuOwotewotICAgIGNoYXIgKmIgPSBidWY7Ci0gICAgaWYgKGJ1ZiA9PSBaX05VTEwgfHwgbGVuIDw9IDApIHJldHVybiBaX05VTEw7Ci0KLSAgICB3aGlsZSAoLS1sZW4gPiAwICYmIGd6cmVhZChmaWxlLCBidWYsIDEpID09IDEgJiYgKmJ1ZisrICE9ICdcbicpIDsKLSAgICAqYnVmID0gJ1wwJzsKLSAgICByZXR1cm4gYiA9PSBidWYgJiYgbGVuID4gMCA/IFpfTlVMTCA6IGI7Ci19Ci0KLQotI2lmbmRlZiBOT19HWkNPTVBSRVNTCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgV3JpdGVzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6d3JpdGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuCi0qLwotaW50IFpFWFBPUlQgZ3p3cml0ZSAoZmlsZSwgYnVmLCBsZW4pCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgdm9pZHBjIGJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAndycpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gKEJ5dGVmKilidWY7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gbGVuOwotCi0gICAgd2hpbGUgKHMtPnN0cmVhbS5hdmFpbF9pbiAhPSAwKSB7Ci0KLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgewotCi0gICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWY7Ci0gICAgICAgICAgICBpZiAoZndyaXRlKHMtPm91dGJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKSAhPSBaX0JVRlNJWkUpIHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotICAgICAgICB9Ci0gICAgICAgIHMtPmluICs9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0ICs9IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIHMtPnpfZXJyID0gZGVmbGF0ZSgmKHMtPnN0cmVhbSksIFpfTk9fRkxVU0gpOwotICAgICAgICBzLT5pbiAtPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9PSykgYnJlYWs7Ci0gICAgfQotICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgKGNvbnN0IEJ5dGVmICopYnVmLCBsZW4pOwotCi0gICAgcmV0dXJuIChpbnQpKGxlbiAtIHMtPnN0cmVhbS5hdmFpbF9pbik7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIENvbnZlcnRzLCBmb3JtYXRzLCBhbmQgd3JpdGVzIHRoZSBhcmdzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKLSAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuIGd6cHJpbnRmIHJldHVybnMgdGhlIG51bWJlciBvZgotICAgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuCi0qLwotI2lmZGVmIFNUREMKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLyogYXJncyAqLyAuLi4pCi17Ci0gICAgY2hhciBidWZbWl9QUklOVEZfQlVGU0laRV07Ci0gICAgdmFfbGlzdCB2YTsKLSAgICBpbnQgbGVuOwotCi0gICAgYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOwotICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotI2lmZGVmIE5PX3ZzbnByaW50ZgotIyAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c3ByaW50ZihidWYsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplb2YoYnVmKTsgbGVuKyspCi0gICAgICAgIGlmIChidWZbbGVuXSA9PSAwKSBicmVhazsKLSMgIGVsc2UKLSAgICBsZW4gPSB2c3ByaW50ZihidWYsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0jICBlbmRpZgotI2Vsc2UKLSMgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAotICAgICh2b2lkKXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotICAgIGxlbiA9IHN0cmxlbihidWYpOwotIyAgZWxzZQotICAgIGxlbiA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotIyAgZW5kaWYKLSNlbmRpZgotICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gKGludClzaXplb2YoYnVmKSB8fCBidWZbc2l6ZW9mKGJ1ZikgLSAxXSAhPSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCBidWYsICh1bnNpZ25lZClsZW4pOwotfQotI2Vsc2UgLyogbm90IEFOU0kgQyAqLwotCi1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChmaWxlLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKLSAgICAgICAgICAgICAgICAgICAgICAgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNvbnN0IGNoYXIgKmZvcm1hdDsKLSAgICBpbnQgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLAotICAgICAgICBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjA7Ci17Ci0gICAgY2hhciBidWZbWl9QUklOVEZfQlVGU0laRV07Ci0gICAgaW50IGxlbjsKLQotICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKLSNpZmRlZiBOT19zbnByaW50ZgotIyAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgIHNwcmludGYoYnVmLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplb2YoYnVmKTsgbGVuKyspCi0gICAgICAgIGlmIChidWZbbGVuXSA9PSAwKSBicmVhazsKLSMgIGVsc2UKLSAgICBsZW4gPSBzcHJpbnRmKGJ1ZiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSMgIGVuZGlmCi0jZWxzZQotIyAgaWZkZWYgSEFTX3NucHJpbnRmX3ZvaWQKLSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotICAgIGxlbiA9IHN0cmxlbihidWYpOwotIyAgZWxzZQotICAgIGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotIyAgZW5kaWYKLSNlbmRpZgotICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gc2l6ZW9mKGJ1ZikgfHwgYnVmW3NpemVvZihidWYpIC0gMV0gIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgYnVmLCBsZW4pOwotfQotI2VuZGlmCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgV3JpdGVzIGMsIGNvbnZlcnRlZCB0byBhbiB1bnNpZ25lZCBjaGFyLCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnenB1dGMgcmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnenB1dGMoZmlsZSwgYykKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgYzsKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGNjID0gKHVuc2lnbmVkIGNoYXIpIGM7IC8qIHJlcXVpcmVkIGZvciBiaWcgZW5kaWFuIHN5c3RlbXMgKi8KLQotICAgIHJldHVybiBnendyaXRlKGZpbGUsICZjYywgMSkgPT0gMSA/IChpbnQpY2MgOiAtMTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlLCBleGNsdWRpbmcKLSAgIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KLSAgICAgIGd6cHV0cyByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgotKi8KLWludCBaRVhQT1JUIGd6cHV0cyhmaWxlLCBzKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNvbnN0IGNoYXIgKnM7Ci17Ci0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgKGNoYXIqKXMsICh1bnNpZ25lZClzdHJsZW4ocykpOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuIFRoZSBwYXJhbWV0ZXIKLSAgIGZsdXNoIGlzIGFzIGluIHRoZSBkZWZsYXRlKCkgZnVuY3Rpb24uCi0qLwotbG9jYWwgaW50IGRvX2ZsdXNoIChmaWxlLCBmbHVzaCkKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgZmx1c2g7Ci17Ci0gICAgdUludCBsZW47Ci0gICAgaW50IGRvbmUgPSAwOwotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3cnKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOyAvKiBzaG91bGQgYmUgemVybyBhbHJlYWR5IGFueXdheSAqLwotCi0gICAgZm9yICg7OykgewotICAgICAgICBsZW4gPSBaX0JVRlNJWkUgLSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIGlmIChsZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKCh1SW50KWZ3cml0ZShzLT5vdXRidWYsIDEsIGxlbiwgcy0+ZmlsZSkgIT0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgICAgIHJldHVybiBaX0VSUk5POwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmOwotICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZG9uZSkgYnJlYWs7Ci0gICAgICAgIHMtPm91dCArPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBzLT56X2VyciA9IGRlZmxhdGUoJihzLT5zdHJlYW0pLCBmbHVzaCk7Ci0gICAgICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIC8qIElnbm9yZSB0aGUgc2Vjb25kIG9mIHR3byBjb25zZWN1dGl2ZSBmbHVzaGVzOiAqLwotICAgICAgICBpZiAobGVuID09IDAgJiYgcy0+el9lcnIgPT0gWl9CVUZfRVJST1IpIHMtPnpfZXJyID0gWl9PSzsKLQotICAgICAgICAvKiBkZWZsYXRlIGhhcyBmaW5pc2hlZCBmbHVzaGluZyBvbmx5IHdoZW4gaXQgaGFzbid0IHVzZWQgdXAKLSAgICAgICAgICogYWxsIHRoZSBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIG91dHB1dCBidWZmZXI6Ci0gICAgICAgICAqLwotICAgICAgICBkb25lID0gKHMtPnN0cmVhbS5hdmFpbF9vdXQgIT0gMCB8fCBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpOwotCi0gICAgICAgIGlmIChzLT56X2VyciAhPSBaX09LICYmIHMtPnpfZXJyICE9IFpfU1RSRUFNX0VORCkgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiAgcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EID8gWl9PSyA6IHMtPnpfZXJyOwotfQotCi1pbnQgWkVYUE9SVCBnemZsdXNoIChmaWxlLCBmbHVzaCkKLSAgICAgZ3pGaWxlIGZpbGU7Ci0gICAgIGludCBmbHVzaDsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotICAgIGludCBlcnIgPSBkb19mbHVzaCAoZmlsZSwgZmx1c2gpOwotCi0gICAgaWYgKGVycikgcmV0dXJuIGVycjsKLSAgICBmZmx1c2gocy0+ZmlsZSk7Ci0gICAgcmV0dXJuICBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQgPyBaX09LIDogcy0+el9lcnI7Ci19Ci0jZW5kaWYgLyogTk9fR1pDT01QUkVTUyAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFNldHMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUgZ2l2ZW4KLSAgIGNvbXByZXNzZWQgZmlsZS4gVGhlIG9mZnNldCByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQotICAgICAgZ3pzZWVrIHJldHVybnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgbG9jYXRpb24gYXMgbWVhc3VyZWQgaW4gYnl0ZXMgZnJvbQotICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSAgICAgIFNFRUtfRU5EIGlzIG5vdCBpbXBsZW1lbnRlZCwgcmV0dXJucyBlcnJvci4KLSAgICAgIEluIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgZ3pzZWVrIGNhbiBiZSBleHRyZW1lbHkgc2xvdy4KLSovCi16X29mZl90IFpFWFBPUlQgZ3pzZWVrIChmaWxlLCBvZmZzZXQsIHdoZW5jZSkKLSAgICBnekZpbGUgZmlsZTsKLSAgICB6X29mZl90IG9mZnNldDsKLSAgICBpbnQgd2hlbmNlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHdoZW5jZSA9PSBTRUVLX0VORCB8fAotICAgICAgICBzLT56X2VyciA9PSBaX0VSUk5PIHx8IHMtPnpfZXJyID09IFpfREFUQV9FUlJPUikgewotICAgICAgICByZXR1cm4gLTFMOwotICAgIH0KLQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgcmV0dXJuIC0xTDsKLSNlbHNlCi0gICAgICAgIGlmICh3aGVuY2UgPT0gU0VFS19TRVQpIHsKLSAgICAgICAgICAgIG9mZnNldCAtPSBzLT5pbjsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0IDwgMCkgcmV0dXJuIC0xTDsKLQotICAgICAgICAvKiBBdCB0aGlzIHBvaW50LCBvZmZzZXQgaXMgdGhlIG51bWJlciBvZiB6ZXJvIGJ5dGVzIHRvIHdyaXRlLiAqLwotICAgICAgICBpZiAocy0+aW5idWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgICAgICBzLT5pbmJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOyAvKiBmb3Igc2Vla2luZyAqLwotICAgICAgICAgICAgaWYgKHMtPmluYnVmID09IFpfTlVMTCkgcmV0dXJuIC0xTDsKLSAgICAgICAgICAgIHptZW16ZXJvKHMtPmluYnVmLCBaX0JVRlNJWkUpOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChvZmZzZXQgPiAwKSAgewotICAgICAgICAgICAgdUludCBzaXplID0gWl9CVUZTSVpFOwotICAgICAgICAgICAgaWYgKG9mZnNldCA8IFpfQlVGU0laRSkgc2l6ZSA9ICh1SW50KW9mZnNldDsKLQotICAgICAgICAgICAgc2l6ZSA9IGd6d3JpdGUoZmlsZSwgcy0+aW5idWYsIHNpemUpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIC0xTDsKLQotICAgICAgICAgICAgb2Zmc2V0IC09IHNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHMtPmluOwotI2VuZGlmCi0gICAgfQotICAgIC8qIFJlc3Qgb2YgZnVuY3Rpb24gaXMgZm9yIHJlYWRpbmcgb25seSAqLwotCi0gICAgLyogY29tcHV0ZSBhYnNvbHV0ZSBwb3NpdGlvbiAqLwotICAgIGlmICh3aGVuY2UgPT0gU0VFS19DVVIpIHsKLSAgICAgICAgb2Zmc2V0ICs9IHMtPm91dDsKLSAgICB9Ci0gICAgaWYgKG9mZnNldCA8IDApIHJldHVybiAtMUw7Ci0KLSAgICBpZiAocy0+dHJhbnNwYXJlbnQpIHsKLSAgICAgICAgLyogbWFwIHRvIGZzZWVrICovCi0gICAgICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IDA7Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIGlmIChmc2VlayhzLT5maWxlLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApIHJldHVybiAtMUw7Ci0KLSAgICAgICAgcy0+aW4gPSBzLT5vdXQgPSBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgfQotCi0gICAgLyogRm9yIGEgbmVnYXRpdmUgc2VlaywgcmV3aW5kIGFuZCB1c2UgcG9zaXRpdmUgc2VlayAqLwotICAgIGlmIChvZmZzZXQgPj0gcy0+b3V0KSB7Ci0gICAgICAgIG9mZnNldCAtPSBzLT5vdXQ7Ci0gICAgfSBlbHNlIGlmIChnenJld2luZChmaWxlKSA8IDApIHsKLSAgICAgICAgcmV0dXJuIC0xTDsKLSAgICB9Ci0gICAgLyogb2Zmc2V0IGlzIG5vdyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAuICovCi0KLSAgICBpZiAob2Zmc2V0ICE9IDAgJiYgcy0+b3V0YnVmID09IFpfTlVMTCkgewotICAgICAgICBzLT5vdXRidWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLSAgICAgICAgaWYgKHMtPm91dGJ1ZiA9PSBaX05VTEwpIHJldHVybiAtMUw7Ci0gICAgfQotICAgIGlmIChvZmZzZXQgJiYgcy0+YmFjayAhPSBFT0YpIHsKLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAgcy0+b3V0Kys7Ci0gICAgICAgIG9mZnNldC0tOwotICAgICAgICBpZiAocy0+bGFzdCkgcy0+el9lcnIgPSBaX1NUUkVBTV9FTkQ7Ci0gICAgfQotICAgIHdoaWxlIChvZmZzZXQgPiAwKSAgewotICAgICAgICBpbnQgc2l6ZSA9IFpfQlVGU0laRTsKLSAgICAgICAgaWYgKG9mZnNldCA8IFpfQlVGU0laRSkgc2l6ZSA9IChpbnQpb2Zmc2V0OwotCi0gICAgICAgIHNpemUgPSBnenJlYWQoZmlsZSwgcy0+b3V0YnVmLCAodUludClzaXplKTsKLSAgICAgICAgaWYgKHNpemUgPD0gMCkgcmV0dXJuIC0xTDsKLSAgICAgICAgb2Zmc2V0IC09IHNpemU7Ci0gICAgfQotICAgIHJldHVybiBzLT5vdXQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXdpbmRzIGlucHV0IGZpbGUuCi0qLwotaW50IFpFWFBPUlQgZ3pyZXdpbmQgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAtMTsKLQotICAgIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcy0+YmFjayA9IEVPRjsKLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOwotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgcy0+Y3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgaWYgKCFzLT50cmFuc3BhcmVudCkgKHZvaWQpaW5mbGF0ZVJlc2V0KCZzLT5zdHJlYW0pOwotICAgIHMtPmluID0gMDsKLSAgICBzLT5vdXQgPSAwOwotICAgIHJldHVybiBmc2VlayhzLT5maWxlLCBzLT5zdGFydCwgU0VFS19TRVQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZQotICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBUaGlzIHBvc2l0aW9uIHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCi0gICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uCi0qLwotel9vZmZfdCBaRVhQT1JUIGd6dGVsbCAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICByZXR1cm4gZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX0NVUik7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIDEgd2hlbiBFT0YgaGFzIHByZXZpb3VzbHkgYmVlbiBkZXRlY3RlZCByZWFkaW5nIHRoZSBnaXZlbgotICAgaW5wdXQgc3RyZWFtLCBvdGhlcndpc2UgemVyby4KLSovCi1pbnQgWkVYUE9SVCBnemVvZiAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgLyogV2l0aCBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZCBmaWxlcyB0aGF0IGNhbiBoYXZlIGVtYmVkZGVkCi0gICAgICogY3JjIHRyYWlsZXJzLCB6X2VvZiBpcyBubyBsb25nZXIgdGhlIG9ubHkvYmVzdCBpbmRpY2F0b3Igb2YgRU9GCi0gICAgICogb24gYSBnel9zdHJlYW0uIEhhbmRsZSBlbmQtb2Ytc3RyZWFtIGVycm9yIGV4cGxpY2l0bHkgaGVyZS4KLSAgICAgKi8KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gMDsKLSAgICBpZiAocy0+el9lb2YpIHJldHVybiAxOwotICAgIHJldHVybiBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIDEgaWYgcmVhZGluZyBhbmQgZG9pbmcgc28gdHJhbnNwYXJlbnRseSwgb3RoZXJ3aXNlIHplcm8uCi0qLwotaW50IFpFWFBPUlQgZ3pkaXJlY3QgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAwOwotICAgIHJldHVybiBzLT50cmFuc3BhcmVudDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICBPdXRwdXRzIGEgbG9uZyBpbiBMU0Igb3JkZXIgdG8gdGhlIGdpdmVuIGZpbGUKLSovCi1sb2NhbCB2b2lkIHB1dExvbmcgKGZpbGUsIHgpCi0gICAgRklMRSAqZmlsZTsKLSAgICB1TG9uZyB4OwotewotICAgIGludCBuOwotICAgIGZvciAobiA9IDA7IG4gPCA0OyBuKyspIHsKLSAgICAgICAgZnB1dGMoKGludCkoeCAmIDB4ZmYpLCBmaWxlKTsKLSAgICAgICAgeCA+Pj0gODsKLSAgICB9Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgUmVhZHMgYSBsb25nIGluIExTQiBvcmRlciBmcm9tIHRoZSBnaXZlbiBnel9zdHJlYW0uIFNldHMgel9lcnIgaW4gY2FzZQotICAgb2YgZXJyb3IuCi0qLwotbG9jYWwgdUxvbmcgZ2V0TG9uZyAocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgdUxvbmcgeCA9ICh1TG9uZylnZXRfYnl0ZShzKTsKLSAgICBpbnQgYzsKLQotICAgIHggKz0gKCh1TG9uZylnZXRfYnl0ZShzKSk8PDg7Ci0gICAgeCArPSAoKHVMb25nKWdldF9ieXRlKHMpKTw8MTY7Ci0gICAgYyA9IGdldF9ieXRlKHMpOwotICAgIGlmIChjID09IEVPRikgcy0+el9lcnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgeCArPSAoKHVMb25nKWMpPDwyNDsKLSAgICByZXR1cm4geDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlmIG5lY2Vzc2FyeSwgY2xvc2VzIHRoZSBjb21wcmVzc2VkIGZpbGUKLSAgIGFuZCBkZWFsbG9jYXRlcyBhbGwgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZS4KLSovCi1pbnQgWkVYUE9SVCBnemNsb3NlIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgIGlmIChkb19mbHVzaCAoZmlsZSwgWl9GSU5JU0gpICE9IFpfT0spCi0gICAgICAgICAgICByZXR1cm4gZGVzdHJveSgoZ3pfc3RyZWFtKilmaWxlKTsKLQotICAgICAgICBwdXRMb25nIChzLT5maWxlLCBzLT5jcmMpOwotICAgICAgICBwdXRMb25nIChzLT5maWxlLCAodUxvbmcpKHMtPmluICYgMHhmZmZmZmZmZikpOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiBkZXN0cm95KChnel9zdHJlYW0qKWZpbGUpOwotfQotCi0jaWZkZWYgU1REQwotIyAgZGVmaW5lIHpzdHJlcnJvcihlcnJudW0pIHN0cmVycm9yKGVycm51bSkKLSNlbHNlCi0jICBkZWZpbmUgenN0cmVycm9yKGVycm51bSkgIiIKLSNlbmRpZgotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJyZWQgb24gdGhlCi0gICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIGVycm51bSBpcyBzZXQgdG8gemxpYiBlcnJvciBudW1iZXIuIElmIGFuCi0gICBlcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5vdCBpbiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSwKLSAgIGVycm51bSBpcyBzZXQgdG8gWl9FUlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vCi0gICB0byBnZXQgdGhlIGV4YWN0IGVycm9yIGNvZGUuCi0qLwotY29uc3QgY2hhciAqIFpFWFBPUlQgZ3plcnJvciAoZmlsZSwgZXJybnVtKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCAqZXJybnVtOwotewotICAgIGNoYXIgKm07Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHsKLSAgICAgICAgKmVycm51bSA9IFpfU1RSRUFNX0VSUk9SOwotICAgICAgICByZXR1cm4gKGNvbnN0IGNoYXIqKUVSUl9NU0coWl9TVFJFQU1fRVJST1IpOwotICAgIH0KLSAgICAqZXJybnVtID0gcy0+el9lcnI7Ci0gICAgaWYgKCplcnJudW0gPT0gWl9PSykgcmV0dXJuIChjb25zdCBjaGFyKikiIjsKLQotICAgIG0gPSAoY2hhciopKCplcnJudW0gPT0gWl9FUlJOTyA/IHpzdHJlcnJvcihlcnJubykgOiBzLT5zdHJlYW0ubXNnKTsKLQotICAgIGlmIChtID09IE5VTEwgfHwgKm0gPT0gJ1wwJykgbSA9IChjaGFyKilFUlJfTVNHKHMtPnpfZXJyKTsKLQotICAgIFRSWUZSRUUocy0+bXNnKTsKLSAgICBzLT5tc2cgPSAoY2hhciopQUxMT0Moc3RybGVuKHMtPnBhdGgpICsgc3RybGVuKG0pICsgMyk7Ci0gICAgaWYgKHMtPm1zZyA9PSBaX05VTEwpIHJldHVybiAoY29uc3QgY2hhciopRVJSX01TRyhaX01FTV9FUlJPUik7Ci0gICAgc3RyY3B5KHMtPm1zZywgcy0+cGF0aCk7Ci0gICAgc3RyY2F0KHMtPm1zZywgIjogIik7Ci0gICAgc3RyY2F0KHMtPm1zZywgbSk7Ci0gICAgcmV0dXJuIChjb25zdCBjaGFyKilzLT5tc2c7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBDbGVhciB0aGUgZXJyb3IgYW5kIGVuZC1vZi1maWxlIGZsYWdzLCBhbmQgZG8gdGhlIHNhbWUgZm9yIHRoZSByZWFsIGZpbGUuCi0qLwotdm9pZCBaRVhQT1JUIGd6Y2xlYXJlcnIgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHJldHVybjsKLSAgICBpZiAocy0+el9lcnIgIT0gWl9TVFJFQU1fRU5EKSBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIGNsZWFyZXJyKHMtPmZpbGUpOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6bGliLmMgYi9Nb2R1bGVzL3psaWIvZ3psaWIuYwppbmRleCA2MDNlNjBlLi5mYWUyMDJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3psaWIuYworKysgYi9Nb2R1bGVzL3psaWIvZ3psaWIuYwpAQCAtMSwxOSArMSwyMyBAQAogLyogZ3psaWIuYyAtLSB6bGliIGZ1bmN0aW9ucyBjb21tb24gdG8gcmVhZGluZyBhbmQgd3JpdGluZyBnemlwIGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCiAjaW5jbHVkZSAiZ3pndXRzLmgiCiAKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgZGVmaW5lIExTRUVLIF9sc2Vla2k2NAorI2Vsc2UKICNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAogIyAgZGVmaW5lIExTRUVLIGxzZWVrNjQKICNlbHNlCiAjICBkZWZpbmUgTFNFRUsgbHNlZWsKICNlbmRpZgorI2VuZGlmCiAKIC8qIExvY2FsIGZ1bmN0aW9ucyAqLwogbG9jYWwgdm9pZCBnel9yZXNldCBPRigoZ3pfc3RhdGVwKSk7Ci1sb2NhbCBnekZpbGUgZ3pfb3BlbiBPRigoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOworbG9jYWwgZ3pGaWxlIGd6X29wZW4gT0YoKGNvbnN0IHZvaWQgKiwgaW50LCBjb25zdCBjaGFyICopKTsKIAogI2lmIGRlZmluZWQgVU5ERVJfQ0UKIApAQCAtNzEsMjggKzc1LDQwIEBACiBsb2NhbCB2b2lkIGd6X3Jlc2V0KHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKKyAgICBzdGF0ZS0+eC5oYXZlID0gMDsgICAgICAgICAgICAgIC8qIG5vIG91dHB1dCBkYXRhIGF2YWlsYWJsZSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7ICAgLyogZm9yIHJlYWRpbmcgLi4uICovCi0gICAgICAgIHN0YXRlLT5oYXZlID0gMDsgICAgICAgICAgICAvKiBubyBvdXRwdXQgZGF0YSBhdmFpbGFibGUgKi8KICAgICAgICAgc3RhdGUtPmVvZiA9IDA7ICAgICAgICAgICAgIC8qIG5vdCBhdCBlbmQgb2YgZmlsZSAqLworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7ICAgICAgICAgICAgLyogaGF2ZSBub3QgcmVhZCBwYXN0IGVuZCB5ZXQgKi8KICAgICAgICAgc3RhdGUtPmhvdyA9IExPT0s7ICAgICAgICAgIC8qIGxvb2sgZm9yIGd6aXAgaGVhZGVyICovCi0gICAgICAgIHN0YXRlLT5kaXJlY3QgPSAxOyAgICAgICAgICAvKiBkZWZhdWx0IGZvciBlbXB0eSBmaWxlICovCiAgICAgfQogICAgIHN0YXRlLT5zZWVrID0gMDsgICAgICAgICAgICAgICAgLyogbm8gc2VlayByZXF1ZXN0IHBlbmRpbmcgKi8KICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7ICAgIC8qIGNsZWFyIGVycm9yICovCi0gICAgc3RhdGUtPnBvcyA9IDA7ICAgICAgICAgICAgICAgICAvKiBubyB1bmNvbXByZXNzZWQgZGF0YSB5ZXQgKi8KKyAgICBzdGF0ZS0+eC5wb3MgPSAwOyAgICAgICAgICAgICAgIC8qIG5vIHVuY29tcHJlc3NlZCBkYXRhIHlldCAqLwogICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luID0gMDsgICAgICAgLyogbm8gaW5wdXQgZGF0YSB5ZXQgKi8KIH0KIAogLyogT3BlbiBhIGd6aXAgZmlsZSBlaXRoZXIgYnkgbmFtZSBvciBmaWxlIGRlc2NyaXB0b3IuICovCiBsb2NhbCBnekZpbGUgZ3pfb3BlbihwYXRoLCBmZCwgbW9kZSkKLSAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGNvbnN0IHZvaWQgKnBhdGg7CiAgICAgaW50IGZkOwogICAgIGNvbnN0IGNoYXIgKm1vZGU7CiB7CiAgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHNpemVfdCBsZW47CisgICAgaW50IG9mbGFnOworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCBjbG9leGVjID0gMDsKKyNlbmRpZgorI2lmZGVmIE9fRVhDTAorICAgIGludCBleGNsdXNpdmUgPSAwOworI2VuZGlmCisKKyAgICAvKiBjaGVjayBpbnB1dCAqLworICAgIGlmIChwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogYWxsb2NhdGUgZ3pGaWxlIHN0cnVjdHVyZSB0byByZXR1cm4gKi8KLSAgICBzdGF0ZSA9IG1hbGxvYyhzaXplb2YoZ3pfc3RhdGUpKTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApbWFsbG9jKHNpemVvZihnel9zdGF0ZSkpOwogICAgIGlmIChzdGF0ZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdGF0ZS0+c2l6ZSA9IDA7ICAgICAgICAgICAgLyogbm8gYnVmZmVycyBhbGxvY2F0ZWQgeWV0ICovCkBAIC0xMDMsNiArMTE5LDcgQEAKICAgICBzdGF0ZS0+bW9kZSA9IEdaX05PTkU7CiAgICAgc3RhdGUtPmxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOwogICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfREVGQVVMVF9TVFJBVEVHWTsKKyAgICBzdGF0ZS0+ZGlyZWN0ID0gMDsKICAgICB3aGlsZSAoKm1vZGUpIHsKICAgICAgICAgaWYgKCptb2RlID49ICcwJyAmJiAqbW9kZSA8PSAnOScpCiAgICAgICAgICAgICBzdGF0ZS0+bGV2ZWwgPSAqbW9kZSAtICcwJzsKQEAgLTEyNCw2ICsxNDEsMTYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGNhc2UgJ2InOiAgICAgICAvKiBpZ25vcmUgLS0gd2lsbCByZXF1ZXN0IGJpbmFyeSBhbnl3YXkgKi8KICAgICAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICAgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICAgICAgICAgIGNsb2V4ZWMgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgT19FWENMCisgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAgICBleGNsdXNpdmUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAgICAgICBjYXNlICdmJzoKICAgICAgICAgICAgICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0ZJTFRFUkVEOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM1LDYgKzE2MiwxMCBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnRic6CiAgICAgICAgICAgICAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9GSVhFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDogICAgICAgIC8qIGNvdWxkIGNvbnNpZGVyIGFzIGFuIGVycm9yLCBidXQganVzdCBpZ25vcmUgKi8KICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICB9CkBAIC0xNDcsMzAgKzE3OCw3MSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICAvKiBjYW4ndCBmb3JjZSB0cmFuc3BhcmVudCByZWFkICovCisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsKKyAgICAgICAgaWYgKHN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDE7ICAgICAgLyogZm9yIGVtcHR5IGZpbGUgKi8KKyAgICB9CisKICAgICAvKiBzYXZlIHRoZSBwYXRoIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCi0gICAgc3RhdGUtPnBhdGggPSBtYWxsb2Moc3RybGVuKHBhdGgpICsgMSk7CisjaWZkZWYgX1dJTjMyCisgICAgaWYgKGZkID09IC0yKSB7CisgICAgICAgIGxlbiA9IHdjc3RvbWJzKE5VTEwsIHBhdGgsIDApOworICAgICAgICBpZiAobGVuID09IChzaXplX3QpLTEpCisgICAgICAgICAgICBsZW4gPSAwOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopcGF0aCk7CisgICAgc3RhdGUtPnBhdGggPSAoY2hhciAqKW1hbGxvYyhsZW4gKyAxKTsKICAgICBpZiAoc3RhdGUtPnBhdGggPT0gTlVMTCkgewogICAgICAgICBmcmVlKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0cmNweShzdGF0ZS0+cGF0aCwgcGF0aCk7CisjaWZkZWYgX1dJTjMyCisgICAgaWYgKGZkID09IC0yKQorICAgICAgICBpZiAobGVuKQorICAgICAgICAgICAgd2NzdG9tYnMoc3RhdGUtPnBhdGgsIHBhdGgsIGxlbiArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqKHN0YXRlLT5wYXRoKSA9IDA7CisgICAgZWxzZQorI2VuZGlmCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAgICAgc25wcmludGYoc3RhdGUtPnBhdGgsIGxlbiArIDEsICIlcyIsIChjb25zdCBjaGFyICopcGF0aCk7CisjZWxzZQorICAgICAgICBzdHJjcHkoc3RhdGUtPnBhdGgsIHBhdGgpOworI2VuZGlmCiAKLSAgICAvKiBvcGVuIHRoZSBmaWxlIHdpdGggdGhlIGFwcHJvcHJpYXRlIG1vZGUgKG9yIGp1c3QgdXNlIGZkKSAqLwotICAgIHN0YXRlLT5mZCA9IGZkICE9IC0xID8gZmQgOgotICAgICAgICBvcGVuKHBhdGgsCisgICAgLyogY29tcHV0ZSB0aGUgZmxhZ3MgZm9yIG9wZW4oKSAqLworICAgIG9mbGFnID0KICNpZmRlZiBPX0xBUkdFRklMRQotICAgICAgICAgICAgT19MQVJHRUZJTEUgfAorICAgICAgICBPX0xBUkdFRklMRSB8CiAjZW5kaWYKICNpZmRlZiBPX0JJTkFSWQotICAgICAgICAgICAgT19CSU5BUlkgfAorICAgICAgICBPX0JJTkFSWSB8CiAjZW5kaWYKLSAgICAgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8KLSAgICAgICAgICAgICAgICBPX1JET05MWSA6Ci0gICAgICAgICAgICAgICAgKE9fV1JPTkxZIHwgT19DUkVBVCB8ICgKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPT0gR1pfV1JJVEUgPwotICAgICAgICAgICAgICAgICAgICAgICAgT19UUlVOQyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBPX0FQUEVORCkpKSwKLSAgICAgICAgICAgIDA2NjYpOworI2lmZGVmIE9fQ0xPRVhFQworICAgICAgICAoY2xvZXhlYyA/IE9fQ0xPRVhFQyA6IDApIHwKKyNlbmRpZgorICAgICAgICAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/CisgICAgICAgICBPX1JET05MWSA6CisgICAgICAgICAoT19XUk9OTFkgfCBPX0NSRUFUIHwKKyNpZmRlZiBPX0VYQ0wKKyAgICAgICAgICAoZXhjbHVzaXZlID8gT19FWENMIDogMCkgfAorI2VuZGlmCisgICAgICAgICAgKHN0YXRlLT5tb2RlID09IEdaX1dSSVRFID8KKyAgICAgICAgICAgT19UUlVOQyA6CisgICAgICAgICAgIE9fQVBQRU5EKSkpOworCisgICAgLyogb3BlbiB0aGUgZmlsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBmbGFncyAob3IganVzdCB1c2UgZmQpICovCisgICAgc3RhdGUtPmZkID0gZmQgPiAtMSA/IGZkIDogKAorI2lmZGVmIF9XSU4zMgorICAgICAgICBmZCA9PSAtMiA/IF93b3BlbihwYXRoLCBvZmxhZywgMDY2NikgOgorI2VuZGlmCisgICAgICAgIG9wZW4oKGNvbnN0IGNoYXIgKilwYXRoLCBvZmxhZywgMDY2NikpOwogICAgIGlmIChzdGF0ZS0+ZmQgPT0gLTEpIHsKICAgICAgICAgZnJlZShzdGF0ZS0+cGF0aCk7CiAgICAgICAgIGZyZWUoc3RhdGUpOwpAQCAtMjE2LDE1ICsyODgsMjkgQEAKICAgICBjaGFyICpwYXRoOyAgICAgICAgIC8qIGlkZW50aWZpZXIgZm9yIGVycm9yIG1lc3NhZ2VzICovCiAgICAgZ3pGaWxlIGd6OwogCi0gICAgaWYgKGZkID09IC0xIHx8IChwYXRoID0gbWFsbG9jKDcgKyAzICogc2l6ZW9mKGludCkpKSA9PSBOVUxMKQorICAgIGlmIChmZCA9PSAtMSB8fCAocGF0aCA9IChjaGFyICopbWFsbG9jKDcgKyAzICogc2l6ZW9mKGludCkpKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKHBhdGgsIDcgKyAzICogc2l6ZW9mKGludCksICI8ZmQ6JWQ+IiwgZmQpOyAvKiBmb3IgZGVidWdnaW5nICovCisjZWxzZQogICAgIHNwcmludGYocGF0aCwgIjxmZDolZD4iLCBmZCk7ICAgLyogZm9yIGRlYnVnZ2luZyAqLworI2VuZGlmCiAgICAgZ3ogPSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKTsKICAgICBmcmVlKHBhdGgpOwogICAgIHJldHVybiBnejsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLworI2lmZGVmIF9XSU4zMgorZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuX3cocGF0aCwgbW9kZSkKKyAgICBjb25zdCB3Y2hhcl90ICpwYXRoOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0dXJuIGd6X29wZW4ocGF0aCwgLTIsIG1vZGUpOworfQorI2VuZGlmCisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KIGludCBaRVhQT1JUIGd6YnVmZmVyKGZpbGUsIHNpemUpCiAgICAgZ3pGaWxlIGZpbGU7CiAgICAgdW5zaWduZWQgc2l6ZTsKQEAgLTI0Myw4ICszMjksOCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBjaGVjayBhbmQgc2V0IHJlcXVlc3RlZCBzaXplICovCi0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChzaXplIDwgMikKKyAgICAgICAgc2l6ZSA9IDI7ICAgICAgICAgICAgICAgLyogbmVlZCB0d28gYnl0ZXMgdG8gY2hlY2sgbWFnaWMgaGVhZGVyICovCiAgICAgc3RhdGUtPndhbnQgPSBzaXplOwogICAgIHJldHVybiAwOwogfQpAQCAtMjYxLDcgKzM0Nyw4IEBACiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKICAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogYmFjayB1cCBhbmQgc3RhcnQgb3ZlciAqLwpAQCAtMjg5LDcgKzM3Niw3IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGNoZWNrIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBjYW4gb25seSBzZWVrIGZyb20gc3RhcnQgb3IgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiAqLwpAQCAtMjk4LDMxICszODUsMzIgQEAKIAogICAgIC8qIG5vcm1hbGl6ZSBvZmZzZXQgdG8gYSBTRUVLX0NVUiBzcGVjaWZpY2F0aW9uICovCiAgICAgaWYgKHdoZW5jZSA9PSBTRUVLX1NFVCkKLSAgICAgICAgb2Zmc2V0IC09IHN0YXRlLT5wb3M7CisgICAgICAgIG9mZnNldCAtPSBzdGF0ZS0+eC5wb3M7CiAgICAgZWxzZSBpZiAoc3RhdGUtPnNlZWspCiAgICAgICAgIG9mZnNldCArPSBzdGF0ZS0+c2tpcDsKICAgICBzdGF0ZS0+c2VlayA9IDA7CiAKICAgICAvKiBpZiB3aXRoaW4gcmF3IGFyZWEgd2hpbGUgcmVhZGluZywganVzdCBnbyB0aGVyZSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEICYmIHN0YXRlLT5ob3cgPT0gQ09QWSAmJgotICAgICAgICBzdGF0ZS0+cG9zICsgb2Zmc2V0ID49IHN0YXRlLT5yYXcpIHsKLSAgICAgICAgcmV0ID0gTFNFRUsoc3RhdGUtPmZkLCBvZmZzZXQgLSBzdGF0ZS0+aGF2ZSwgU0VFS19DVVIpOworICAgICAgICAgICAgc3RhdGUtPngucG9zICsgb2Zmc2V0ID49IDApIHsKKyAgICAgICAgcmV0ID0gTFNFRUsoc3RhdGUtPmZkLCBvZmZzZXQgLSBzdGF0ZS0+eC5oYXZlLCBTRUVLX0NVUik7CiAgICAgICAgIGlmIChyZXQgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHN0YXRlLT5oYXZlID0gMDsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CiAgICAgICAgIHN0YXRlLT5lb2YgPSAwOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOwogICAgICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gb2Zmc2V0OwotICAgICAgICByZXR1cm4gc3RhdGUtPnBvczsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHN0YXRlLT54LnBvczsKICAgICB9CiAKICAgICAvKiBjYWxjdWxhdGUgc2tpcCBhbW91bnQsIHJld2luZGluZyBpZiBuZWVkZWQgZm9yIGJhY2sgc2VlayB3aGVuIHJlYWRpbmcgKi8KICAgICBpZiAob2Zmc2V0IDwgMCkgewogICAgICAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCkgICAgICAgICAvKiB3cml0aW5nIC0tIGNhbid0IGdvIGJhY2t3YXJkcyAqLwogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBvZmZzZXQgKz0gc3RhdGUtPnBvczsKKyAgICAgICAgb2Zmc2V0ICs9IHN0YXRlLT54LnBvczsKICAgICAgICAgaWYgKG9mZnNldCA8IDApICAgICAgICAgICAgICAgICAgICAgLyogYmVmb3JlIHN0YXJ0IG9mIGZpbGUhICovCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChnenJld2luZChmaWxlKSA9PSAtMSkgICAgICAgICAgIC8qIHJld2luZCwgdGhlbiBza2lwIHRvIG9mZnNldCAqLwpAQCAtMzMxLDExICs0MTksMTEgQEAKIAogICAgIC8qIGlmIHJlYWRpbmcsIHNraXAgd2hhdCdzIGluIG91dHB1dCBidWZmZXIgKG9uZSBsZXNzIGd6Z2V0YygpIGNoZWNrKSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7Ci0gICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPmhhdmUgPiBvZmZzZXQgPwotICAgICAgICAgICAgKHVuc2lnbmVkKW9mZnNldCA6IHN0YXRlLT5oYXZlOwotICAgICAgICBzdGF0ZS0+aGF2ZSAtPSBuOwotICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPnguaGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+eC5oYXZlID4gb2Zmc2V0ID8KKyAgICAgICAgICAgICh1bnNpZ25lZClvZmZzZXQgOiBzdGF0ZS0+eC5oYXZlOworICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CisgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgICAgIG9mZnNldCAtPSBuOwogICAgIH0KIApAQCAtMzQ0LDcgKzQzMiw3IEBACiAgICAgICAgIHN0YXRlLT5zZWVrID0gMTsKICAgICAgICAgc3RhdGUtPnNraXAgPSBvZmZzZXQ7CiAgICAgfQotICAgIHJldHVybiBzdGF0ZS0+cG9zICsgb2Zmc2V0OworICAgIHJldHVybiBzdGF0ZS0+eC5wb3MgKyBvZmZzZXQ7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTM3Myw3ICs0NjEsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiByZXR1cm4gcG9zaXRpb24gKi8KLSAgICByZXR1cm4gc3RhdGUtPnBvcyArIChzdGF0ZS0+c2VlayA/IHN0YXRlLT5za2lwIDogMCk7CisgICAgcmV0dXJuIHN0YXRlLT54LnBvcyArIChzdGF0ZS0+c2VlayA/IHN0YXRlLT5za2lwIDogMCk7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTQzMyw4ICs1MjEsNyBAQAogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8qIHJldHVybiBlbmQtb2YtZmlsZSBzdGF0ZSAqLwotICAgIHJldHVybiBzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8KLSAgICAgICAgKHN0YXRlLT5lb2YgJiYgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPT0gMCAmJiBzdGF0ZS0+aGF2ZSA9PSAwKSA6IDA7CisgICAgcmV0dXJuIHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPyBzdGF0ZS0+cGFzdCA6IDA7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTQ1NCw3ICs1NDEsOCBAQAogICAgIC8qIHJldHVybiBlcnJvciBpbmZvcm1hdGlvbiAqLwogICAgIGlmIChlcnJudW0gIT0gTlVMTCkKICAgICAgICAgKmVycm51bSA9IHN0YXRlLT5lcnI7Ci0gICAgcmV0dXJuIHN0YXRlLT5tc2cgPT0gTlVMTCA/ICIiIDogc3RhdGUtPm1zZzsKKyAgICByZXR1cm4gc3RhdGUtPmVyciA9PSBaX01FTV9FUlJPUiA/ICJvdXQgb2YgbWVtb3J5IiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUtPm1zZyA9PSBOVUxMID8gIiIgOiBzdGF0ZS0+bXNnKTsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtNDcxLDggKzU1OSwxMCBAQAogICAgICAgICByZXR1cm47CiAKICAgICAvKiBjbGVhciBlcnJvciBhbmQgZW5kLW9mLWZpbGUgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkKKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgewogICAgICAgICBzdGF0ZS0+ZW9mID0gMDsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOworICAgIH0KICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CiB9CiAKQEAgLTQ5NCwyNiArNTg0LDMzIEBACiAgICAgICAgIHN0YXRlLT5tc2cgPSBOVUxMOwogICAgIH0KIAorICAgIC8qIGlmIGZhdGFsLCBzZXQgc3RhdGUtPnguaGF2ZSB0byAwIHNvIHRoYXQgdGhlIGd6Z2V0YygpIG1hY3JvIGZhaWxzICovCisgICAgaWYgKGVyciAhPSBaX09LICYmIGVyciAhPSBaX0JVRl9FUlJPUikKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CisKICAgICAvKiBzZXQgZXJyb3IgY29kZSwgYW5kIGlmIG5vIG1lc3NhZ2UsIHRoZW4gZG9uZSAqLwogICAgIHN0YXRlLT5lcnIgPSBlcnI7CiAgICAgaWYgKG1zZyA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKLSAgICAvKiBmb3IgYW4gb3V0IG9mIG1lbW9yeSBlcnJvciwgc2F2ZSBhcyBzdGF0aWMgc3RyaW5nICovCi0gICAgaWYgKGVyciA9PSBaX01FTV9FUlJPUikgewotICAgICAgICBzdGF0ZS0+bXNnID0gKGNoYXIgKiltc2c7CisgICAgLyogZm9yIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IsIHJldHVybiBsaXRlcmFsIHN0cmluZyB3aGVuIHJlcXVlc3RlZCAqLworICAgIGlmIChlcnIgPT0gWl9NRU1fRVJST1IpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICAvKiBjb25zdHJ1Y3QgZXJyb3IgbWVzc2FnZSB3aXRoIHBhdGggKi8KLSAgICBpZiAoKHN0YXRlLT5tc2cgPSBtYWxsb2Moc3RybGVuKHN0YXRlLT5wYXRoKSArIHN0cmxlbihtc2cpICsgMykpID09IE5VTEwpIHsKKyAgICBpZiAoKHN0YXRlLT5tc2cgPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzKSkgPT0KKyAgICAgICAgICAgIE5VTEwpIHsKICAgICAgICAgc3RhdGUtPmVyciA9IFpfTUVNX0VSUk9SOwotICAgICAgICBzdGF0ZS0+bXNnID0gKGNoYXIgKikib3V0IG9mIG1lbW9yeSI7CiAgICAgICAgIHJldHVybjsKICAgICB9CisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihzdGF0ZS0+bXNnLCBzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzLAorICAgICAgICAgICAgICIlcyVzJXMiLCBzdGF0ZS0+cGF0aCwgIjogIiwgbXNnKTsKKyNlbHNlCiAgICAgc3RyY3B5KHN0YXRlLT5tc2csIHN0YXRlLT5wYXRoKTsKICAgICBzdHJjYXQoc3RhdGUtPm1zZywgIjogIik7CiAgICAgc3RyY2F0KHN0YXRlLT5tc2csIG1zZyk7CisjZW5kaWYKICAgICByZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nenJlYWQuYyBiL01vZHVsZXMvemxpYi9nenJlYWQuYwppbmRleCA1NDgyMDFhLi5iZjQ1MzhlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3pyZWFkLmMKKysrIGIvTW9kdWxlcy96bGliL2d6cmVhZC5jCkBAIC0xLDUgKzEsNSBAQAogLyogZ3pyZWFkLmMgLS0gemxpYiBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgZ3ppcCBmaWxlcwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOCwxMCArOCw5IEBACiAvKiBMb2NhbCBmdW5jdGlvbnMgKi8KIGxvY2FsIGludCBnel9sb2FkIE9GKChnel9zdGF0ZXAsIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIHVuc2lnbmVkICopKTsKIGxvY2FsIGludCBnel9hdmFpbCBPRigoZ3pfc3RhdGVwKSk7Ci1sb2NhbCBpbnQgZ3pfbmV4dDQgT0YoKGd6X3N0YXRlcCwgdW5zaWduZWQgbG9uZyAqKSk7Ci1sb2NhbCBpbnQgZ3pfaGVhZCBPRigoZ3pfc3RhdGVwKSk7Citsb2NhbCBpbnQgZ3pfbG9vayBPRigoZ3pfc3RhdGVwKSk7CiBsb2NhbCBpbnQgZ3pfZGVjb21wIE9GKChnel9zdGF0ZXApKTsKLWxvY2FsIGludCBnel9tYWtlIE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9mZXRjaCBPRigoZ3pfc3RhdGVwKSk7CiBsb2NhbCBpbnQgZ3pfc2tpcCBPRigoZ3pfc3RhdGVwLCB6X29mZjY0X3QpKTsKIAogLyogVXNlIHJlYWQoKSB0byBsb2FkIGEgYnVmZmVyIC0tIHJldHVybiAtMSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuICBSZWFkIGZyb20KQEAgLTQ2LDczICs0NSw1NCBAQAogICAgZXJyb3IsIDAgb3RoZXJ3aXNlLiAgTm90ZSB0aGF0IHRoZSBlb2YgZmxhZyBpcyBzZXQgd2hlbiB0aGUgZW5kIG9mIHRoZSBpbnB1dAogICAgZmlsZSBpcyByZWFjaGVkLCBldmVuIHRob3VnaCB0aGVyZSBtYXkgYmUgdW51c2VkIGRhdGEgaW4gdGhlIGJ1ZmZlci4gIE9uY2UKICAgIHRoYXQgZGF0YSBoYXMgYmVlbiB1c2VkLCBubyBtb3JlIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZWFkIHRoZSBmaWxlLgotICAgZ3pfYXZhaWwoKSBhc3N1bWVzIHRoYXQgc3RybS0+YXZhaWxfaW4gPT0gMC4gKi8KKyAgIElmIHN0cm0tPmF2YWlsX2luICE9IDAsIHRoZW4gdGhlIGN1cnJlbnQgZGF0YSBpcyBtb3ZlZCB0byB0aGUgYmVnaW5uaW5nIG9mCisgICB0aGUgaW5wdXQgYnVmZmVyLCBhbmQgdGhlbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBidWZmZXIgaXMgbG9hZGVkIHdpdGggdGhlCisgICBhdmFpbGFibGUgZGF0YSBmcm9tIHRoZSBpbnB1dCBmaWxlLiAqLwogbG9jYWwgaW50IGd6X2F2YWlsKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKKyAgICB1bnNpZ25lZCBnb3Q7CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAotICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKHN0YXRlLT5lb2YgPT0gMCkgewotICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPmluLCBzdGF0ZS0+c2l6ZSwKLSAgICAgICAgICAgICAgICAodW5zaWduZWQgKikmKHN0cm0tPmF2YWlsX2luKSkgPT0gLTEpCisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbikgeyAgICAgICAvKiBjb3B5IHdoYXQncyB0aGVyZSB0byB0aGUgc3RhcnQgKi8KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzdGF0ZS0+aW47CisgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBjaGFyICpxID0gc3RybS0+bmV4dF9pbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG4gPSBzdHJtLT5hdmFpbF9pbjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqcCsrID0gKnErKzsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5pbiArIHN0cm0tPmF2YWlsX2luLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c2l6ZSAtIHN0cm0tPmF2YWlsX2luLCAmZ290KSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gZ290OwogICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotLyogR2V0IG5leHQgYnl0ZSBmcm9tIGlucHV0LCBvciAtMSBpZiBlbmQgb3IgZXJyb3IuICovCi0jZGVmaW5lIE5FWFQoKSAoKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKSA/IC0xIDogXAotICAgICAgICAgICAgICAgIChzdHJtLT5hdmFpbF9pbiA9PSAwID8gLTEgOiBcCi0gICAgICAgICAgICAgICAgIChzdHJtLT5hdmFpbF9pbi0tLCAqKHN0cm0tPm5leHRfaW4pKyspKSkKLQotLyogR2V0IGEgZm91ci1ieXRlIGxpdHRsZS1lbmRpYW4gaW50ZWdlciBhbmQgcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgdGhlIHZhbHVlCi0gICBpbiAqcmV0LiAgT3RoZXJ3aXNlIC0xIGlzIHJldHVybmVkIGFuZCAqcmV0IGlzIG5vdCBtb2RpZmllZC4gKi8KLWxvY2FsIGludCBnel9uZXh0NChzdGF0ZSwgcmV0KQotICAgIGd6X3N0YXRlcCBzdGF0ZTsKLSAgICB1bnNpZ25lZCBsb25nICpyZXQ7Ci17Ci0gICAgaW50IGNoOwotICAgIHVuc2lnbmVkIGxvbmcgdmFsOwotICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7Ci0KLSAgICB2YWwgPSBORVhUKCk7Ci0gICAgdmFsICs9ICh1bnNpZ25lZClORVhUKCkgPDwgODsKLSAgICB2YWwgKz0gKHVuc2lnbmVkIGxvbmcpTkVYVCgpIDw8IDE2OwotICAgIGNoID0gTkVYVCgpOwotICAgIGlmIChjaCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHZhbCArPSAodW5zaWduZWQgbG9uZyljaCA8PCAyNDsKLSAgICAqcmV0ID0gdmFsOwotICAgIHJldHVybiAwOwotfQotCi0vKiBMb29rIGZvciBnemlwIGhlYWRlciwgc2V0IHVwIGZvciBpbmZsYXRlIG9yIGNvcHkuICBzdGF0ZS0+aGF2ZSBtdXN0IGJlIHplcm8uCisvKiBMb29rIGZvciBnemlwIGhlYWRlciwgc2V0IHVwIGZvciBpbmZsYXRlIG9yIGNvcHkuICBzdGF0ZS0+eC5oYXZlIG11c3QgYmUgMC4KICAgIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgaW4sIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4gIHN0YXRlLT5ob3cgd2lsbCBiZQogICAgbGVmdCB1bmNoYW5nZWQgaWYgdGhlcmUgaXMgbm8gbW9yZSBpbnB1dCBkYXRhIGF2YWlsYWJsZSwgd2lsbCBiZSBzZXQgdG8gQ09QWQogICAgaWYgdGhlcmUgaXMgbm8gZ3ppcCBoZWFkZXIgYW5kIGRpcmVjdCBjb3B5aW5nIHdpbGwgYmUgcGVyZm9ybWVkLCBvciBpdCB3aWxsCi0gICBiZSBzZXQgdG8gR1pJUCBmb3IgZGVjb21wcmVzc2lvbiwgYW5kIHRoZSBnemlwIGhlYWRlciB3aWxsIGJlIHNraXBwZWQgc28KLSAgIHRoYXQgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGRhdGEgaXMgdGhlIHJhdyBkZWZsYXRlIHN0cmVhbS4gIElmIGRpcmVjdAotICAgY29weWluZywgdGhlbiBsZWZ0b3ZlciBpbnB1dCBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB3aWxsIGJlIGNvcGllZCB0bwotICAgdGhlIG91dHB1dCBidWZmZXIuICBJbiB0aGF0IGNhc2UsIGFsbCBmdXJ0aGVyIGZpbGUgcmVhZHMgd2lsbCBiZSBkaXJlY3RseSB0bwotICAgZWl0aGVyIHRoZSBvdXRwdXQgYnVmZmVyIG9yIGEgdXNlciBidWZmZXIuICBJZiBkZWNvbXByZXNzaW5nLCB0aGUgaW5mbGF0ZQotICAgc3RhdGUgYW5kIHRoZSBjaGVjayB2YWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkLiAgZ3pfaGVhZCgpIHdpbGwgcmV0dXJuIDAgb24KLSAgIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVyZS4gIEZhaWx1cmVzIG1heSBpbmNsdWRlIHJlYWQgZXJyb3JzIG9yIGd6aXAgaGVhZGVyCi0gICBlcnJvcnMuICAqLwotbG9jYWwgaW50IGd6X2hlYWQoc3RhdGUpCisgICBiZSBzZXQgdG8gR1pJUCBmb3IgZGVjb21wcmVzc2lvbi4gIElmIGRpcmVjdCBjb3B5aW5nLCB0aGVuIGxlZnRvdmVyIGlucHV0CisgICBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB3aWxsIGJlIGNvcGllZCB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gIEluIHRoYXQKKyAgIGNhc2UsIGFsbCBmdXJ0aGVyIGZpbGUgcmVhZHMgd2lsbCBiZSBkaXJlY3RseSB0byBlaXRoZXIgdGhlIG91dHB1dCBidWZmZXIgb3IKKyAgIGEgdXNlciBidWZmZXIuICBJZiBkZWNvbXByZXNzaW5nLCB0aGUgaW5mbGF0ZSBzdGF0ZSB3aWxsIGJlIGluaXRpYWxpemVkLgorICAgZ3pfbG9vaygpIHdpbGwgcmV0dXJuIDAgb24gc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlLiAqLworbG9jYWwgaW50IGd6X2xvb2soc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogewogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7Ci0gICAgaW50IGZsYWdzOwotICAgIHVuc2lnbmVkIGxlbjsKIAogICAgIC8qIGFsbG9jYXRlIHJlYWQgYnVmZmVycyBhbmQgaW5mbGF0ZSBtZW1vcnkgKi8KICAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCkgewogICAgICAgICAvKiBhbGxvY2F0ZSBidWZmZXJzICovCi0gICAgICAgIHN0YXRlLT5pbiA9IG1hbGxvYyhzdGF0ZS0+d2FudCk7Ci0gICAgICAgIHN0YXRlLT5vdXQgPSBtYWxsb2Moc3RhdGUtPndhbnQgPDwgMSk7CisgICAgICAgIHN0YXRlLT5pbiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICAgICAgc3RhdGUtPm91dCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50IDw8IDEpOwogICAgICAgICBpZiAoc3RhdGUtPmluID09IE5VTEwgfHwgc3RhdGUtPm91dCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPm91dCAhPSBOVUxMKQogICAgICAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CkBAIC0xMjksNyArMTA5LDcgQEAKICAgICAgICAgc3RhdGUtPnN0cm0ub3BhcXVlID0gWl9OVUxMOwogICAgICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7CiAgICAgICAgIHN0YXRlLT5zdHJtLm5leHRfaW4gPSBaX05VTEw7Ci0gICAgICAgIGlmIChpbmZsYXRlSW5pdDIoJihzdGF0ZS0+c3RybSksIC0xNSkgIT0gWl9PSykgeyAgICAvKiByYXcgaW5mbGF0ZSAqLworICAgICAgICBpZiAoaW5mbGF0ZUluaXQyKCYoc3RhdGUtPnN0cm0pLCAxNSArIDE2KSAhPSBaX09LKSB7ICAgIC8qIGd1bnppcCAqLwogICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKICAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKICAgICAgICAgICAgIHN0YXRlLT5zaXplID0gMDsKQEAgLTEzOCw4MyArMTE4LDQ1IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBnZXQgc29tZSBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXIgKi8KLSAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkgeworICAgIC8qIGdldCBhdCBsZWFzdCB0aGUgbWFnaWMgYnl0ZXMgaW4gdGhlIGlucHV0IGJ1ZmZlciAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA8IDIpIHsKICAgICAgICAgaWYgKGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvKiBsb29rIGZvciB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgYnl0ZXMgMzEgYW5kIDEzOSAqLwotICAgIGlmIChzdHJtLT5uZXh0X2luWzBdID09IDMxKSB7Ci0gICAgICAgIHN0cm0tPmF2YWlsX2luLS07Ci0gICAgICAgIHN0cm0tPm5leHRfaW4rKzsKLSAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gJiYgc3RybS0+bmV4dF9pblswXSA9PSAxMzkpIHsKLSAgICAgICAgICAgIC8qIHdlIGhhdmUgYSBnemlwIGhlYWRlciwgd29vIGhvbyEgKi8KLSAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luLS07Ci0gICAgICAgICAgICBzdHJtLT5uZXh0X2luKys7Ci0KLSAgICAgICAgICAgIC8qIHNraXAgcmVzdCBvZiBoZWFkZXIgKi8KLSAgICAgICAgICAgIGlmIChORVhUKCkgIT0gOCkgeyAgICAgIC8qIGNvbXByZXNzaW9uIG1ldGhvZCAqLwotICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZsYWdzID0gTkVYVCgpOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgMHhlMCkgeyAgICAgLyogcmVzZXJ2ZWQgZmxhZyBiaXRzICovCi0gICAgICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVua25vd24gaGVhZGVyIGZsYWdzIHNldCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5FWFQoKTsgICAgICAgICAgICAgICAgIC8qIG1vZGlmaWNhdGlvbiB0aW1lICovCi0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7ICAgICAgICAgICAgICAgICAvKiBleHRyYSBmbGFncyAqLwotICAgICAgICAgICAgTkVYVCgpOyAgICAgICAgICAgICAgICAgLyogb3BlcmF0aW5nIHN5c3RlbSAqLwotICAgICAgICAgICAgaWYgKGZsYWdzICYgNCkgeyAgICAgICAgLyogZXh0cmEgZmllbGQgKi8KLSAgICAgICAgICAgICAgICBsZW4gPSAodW5zaWduZWQpTkVYVCgpOwotICAgICAgICAgICAgICAgIGxlbiArPSAodW5zaWduZWQpTkVYVCgpIDw8IDg7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGxlbi0tKQotICAgICAgICAgICAgICAgICAgICBpZiAoTkVYVCgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZsYWdzICYgOCkgICAgICAgICAgLyogZmlsZSBuYW1lICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKE5FWFQoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIDE2KSAgICAgICAgIC8qIGNvbW1lbnQgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoTkVYVCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgMikgeyAgICAgICAgLyogaGVhZGVyIGNyYyAqLwotICAgICAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBhbiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGlzIG5vdCBjaGVja2VkIGZvciBoZXJlIC0tIGl0IHdpbGwgYmUKLSAgICAgICAgICAgICAgIG5vdGljZWQgb24gdGhlIGZpcnN0IHJlcXVlc3QgZm9yIHVuY29tcHJlc3NlZCBkYXRhICovCi0KLSAgICAgICAgICAgIC8qIHNldCB1cCBmb3IgZGVjb21wcmVzc2lvbiAqLwotICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KHN0cm0pOwotICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICAgICAgICAgIHN0YXRlLT5ob3cgPSBHWklQOwotICAgICAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIG5vdCBhIGd6aXAgZmlsZSAtLSBzYXZlIGZpcnN0IGJ5dGUgKDMxKSBhbmQgZmFsbCB0byByYXcgaS9vICovCi0gICAgICAgICAgICBzdGF0ZS0+b3V0WzBdID0gMzE7Ci0gICAgICAgICAgICBzdGF0ZS0+aGF2ZSA9IDE7Ci0gICAgICAgIH0KKyAgICAvKiBsb29rIGZvciBnemlwIG1hZ2ljIGJ5dGVzIC0tIGlmIHRoZXJlLCBkbyBnemlwIGRlY29kaW5nIChub3RlOiB0aGVyZSBpcworICAgICAgIGEgbG9naWNhbCBkaWxlbW1hIGhlcmUgd2hlbiBjb25zaWRlcmluZyB0aGUgY2FzZSBvZiBhIHBhcnRpYWxseSB3cml0dGVuCisgICAgICAgZ3ppcCBmaWxlLCB0byB3aXQsIGlmIGEgc2luZ2xlIDMxIGJ5dGUgaXMgd3JpdHRlbiwgdGhlbiB3ZSBjYW5ub3QgdGVsbAorICAgICAgIHdoZXRoZXIgdGhpcyBpcyBhIHNpbmdsZS1ieXRlIGZpbGUsIG9yIGp1c3QgYSBwYXJ0aWFsbHkgd3JpdHRlbiBnemlwCisgICAgICAgZmlsZSAtLSBmb3IgaGVyZSB3ZSBhc3N1bWUgdGhhdCBpZiBhIGd6aXAgZmlsZSBpcyBiZWluZyB3cml0dGVuLCB0aGVuCisgICAgICAgdGhlIGhlYWRlciB3aWxsIGJlIHdyaXR0ZW4gaW4gYSBzaW5nbGUgb3BlcmF0aW9uLCBzbyB0aGF0IHJlYWRpbmcgYQorICAgICAgIHNpbmdsZSBieXRlIGlzIHN1ZmZpY2llbnQgaW5kaWNhdGlvbiB0aGF0IGl0IGlzIG5vdCBhIGd6aXAgZmlsZSkgKi8KKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPiAxICYmCisgICAgICAgICAgICBzdHJtLT5uZXh0X2luWzBdID09IDMxICYmIHN0cm0tPm5leHRfaW5bMV0gPT0gMTM5KSB7CisgICAgICAgIGluZmxhdGVSZXNldChzdHJtKTsKKyAgICAgICAgc3RhdGUtPmhvdyA9IEdaSVA7CisgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAwOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvKiBkb2luZyByYXcgaS9vLCBzYXZlIHN0YXJ0IG9mIHJhdyBkYXRhIGZvciBzZWVraW5nLCBjb3B5IGFueSBsZWZ0b3ZlcgotICAgICAgIGlucHV0IHRvIG91dHB1dCAtLSB0aGlzIGFzc3VtZXMgdGhhdCB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBsYXJnZXIgdGhhbgotICAgICAgIHRoZSBpbnB1dCBidWZmZXIsIHdoaWNoIGFsc28gYXNzdXJlcyBzcGFjZSBmb3IgZ3p1bmdldGMoKSAqLwotICAgIHN0YXRlLT5yYXcgPSBzdGF0ZS0+cG9zOwotICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPm91dDsKKyAgICAvKiBubyBnemlwIGhlYWRlciAtLSBpZiB3ZSB3ZXJlIGRlY29kaW5nIGd6aXAgYmVmb3JlLCB0aGVuIHRoaXMgaXMgdHJhaWxpbmcKKyAgICAgICBnYXJiYWdlLiAgSWdub3JlIHRoZSB0cmFpbGluZyBnYXJiYWdlIGFuZCBmaW5pc2guICovCisgICAgaWYgKHN0YXRlLT5kaXJlY3QgPT0gMCkgeworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CisgICAgICAgIHN0YXRlLT5lb2YgPSAxOworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogZG9pbmcgcmF3IGkvbywgY29weSBhbnkgbGVmdG92ZXIgaW5wdXQgdG8gb3V0cHV0IC0tIHRoaXMgYXNzdW1lcyB0aGF0CisgICAgICAgdGhlIG91dHB1dCBidWZmZXIgaXMgbGFyZ2VyIHRoYW4gdGhlIGlucHV0IGJ1ZmZlciwgd2hpY2ggYWxzbyBhc3N1cmVzCisgICAgICAgc3BhY2UgZm9yIGd6dW5nZXRjKCkgKi8KKyAgICBzdGF0ZS0+eC5uZXh0ID0gc3RhdGUtPm91dDsKICAgICBpZiAoc3RybS0+YXZhaWxfaW4pIHsKLSAgICAgICAgbWVtY3B5KHN0YXRlLT5uZXh0ICsgc3RhdGUtPmhhdmUsIHN0cm0tPm5leHRfaW4sIHN0cm0tPmF2YWlsX2luKTsKLSAgICAgICAgc3RhdGUtPmhhdmUgKz0gc3RybS0+YXZhaWxfaW47CisgICAgICAgIG1lbWNweShzdGF0ZS0+eC5uZXh0LCBzdHJtLT5uZXh0X2luLCBzdHJtLT5hdmFpbF9pbik7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSBzdHJtLT5hdmFpbF9pbjsKICAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOwogICAgIH0KICAgICBzdGF0ZS0+aG93ID0gQ09QWTsKQEAgLTIyMywxOSArMTY1LDE1IEBACiB9CiAKIC8qIERlY29tcHJlc3MgZnJvbSBpbnB1dCB0byB0aGUgcHJvdmlkZWQgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBpbiB0aGUgc3RhdGUuCi0gICBJZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaXMgcmVhY2hlZCwgdGhlbiB2ZXJpZnkgdGhlIGd6aXAgdHJhaWxlcgotICAgY2hlY2sgdmFsdWUgYW5kIGxlbmd0aCAobW9kdWxvIDJeMzIpLiAgc3RhdGUtPmhhdmUgYW5kIHN0YXRlLT5uZXh0IGFyZSBzZXQKLSAgIHRvIHBvaW50IHRvIHRoZSBqdXN0IGRlY29tcHJlc3NlZCBkYXRhLCBhbmQgdGhlIGNyYyBpcyB1cGRhdGVkLiAgSWYgdGhlCi0gICB0cmFpbGVyIGlzIHZlcmlmaWVkLCBzdGF0ZS0+aG93IGlzIHJlc2V0IHRvIExPT0sgdG8gbG9vayBmb3IgdGhlIG5leHQgZ3ppcAotICAgc3RyZWFtIG9yIHJhdyBkYXRhLCBvbmNlIHN0YXRlLT5oYXZlIGlzIGRlcGxldGVkLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xCi0gICBvbiBmYWlsdXJlLiAgRmFpbHVyZXMgbWF5IGluY2x1ZGUgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgb3IgYSBmYWlsZWQgZ3ppcAotICAgdHJhaWxlciB2ZXJpZmljYXRpb24uICovCisgICBPbiByZXR1cm4sIHN0YXRlLT54LmhhdmUgYW5kIHN0YXRlLT54Lm5leHQgcG9pbnQgdG8gdGhlIGp1c3QgZGVjb21wcmVzc2VkCisgICBkYXRhLiAgSWYgdGhlIGd6aXAgc3RyZWFtIGNvbXBsZXRlcywgc3RhdGUtPmhvdyBpcyByZXNldCB0byBMT09LIHRvIGxvb2sgZm9yCisgICB0aGUgbmV4dCBnemlwIHN0cmVhbSBvciByYXcgZGF0YSwgb25jZSBzdGF0ZS0+eC5oYXZlIGlzIGRlcGxldGVkLiAgUmV0dXJucyAwCisgICBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAqLwogbG9jYWwgaW50IGd6X2RlY29tcChzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7Ci0gICAgaW50IHJldDsKKyAgICBpbnQgcmV0ID0gWl9PSzsKICAgICB1bnNpZ25lZCBoYWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBjcmMsIGxlbjsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCiAgICAgLyogZmlsbCBvdXRwdXQgYnVmZmVyIHVwIHRvIGVuZCBvZiBkZWZsYXRlIHN0cmVhbSAqLwpAQCAtMjQ1LDE1ICsxODMsMTUgQEAKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgLyogZGVjb21wcmVzcyBhbmQgaGFuZGxlIGVycm9ycyAqLwogICAgICAgICByZXQgPSBpbmZsYXRlKHN0cm0sIFpfTk9fRkxVU0gpOwogICAgICAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VSUk9SIHx8IHJldCA9PSBaX05FRURfRElDVCkgewogICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfU1RSRUFNX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogaW5mbGF0ZSBzdHJlYW0gY29ycnVwdCIpOworICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yOiBpbmZsYXRlIHN0cmVhbSBjb3JydXB0Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldCA9PSBaX01FTV9FUlJPUikgewpAQCAtMjYyLDY3ICsyMDAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBpZiAocmV0ID09IFpfREFUQV9FUlJPUikgeyAgICAgICAgICAgICAgLyogZGVmbGF0ZSBzdHJlYW0gaW52YWxpZCAqLwogICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPT0gTlVMTCA/ICJjb21wcmVzc2VkIGRhdGEgZXJyb3IiIDogc3RybS0+bXNnKTsKKyAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9PSBOVUxMID8gImNvbXByZXNzZWQgZGF0YSBlcnJvciIgOiBzdHJtLT5tc2cpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ICYmIHJldCAhPSBaX1NUUkVBTV9FTkQpOwogCi0gICAgLyogdXBkYXRlIGF2YWlsYWJsZSBvdXRwdXQgYW5kIGNyYyBjaGVjayB2YWx1ZSAqLwotICAgIHN0YXRlLT5oYXZlID0gaGFkIC0gc3RybS0+YXZhaWxfb3V0OwotICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+aGF2ZTsKLSAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzdGF0ZS0+bmV4dCwgc3RhdGUtPmhhdmUpOworICAgIC8qIHVwZGF0ZSBhdmFpbGFibGUgb3V0cHV0ICovCisgICAgc3RhdGUtPnguaGF2ZSA9IGhhZCAtIHN0cm0tPmF2YWlsX291dDsKKyAgICBzdGF0ZS0+eC5uZXh0ID0gc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+eC5oYXZlOwogCi0gICAgLyogY2hlY2sgZ3ppcCB0cmFpbGVyIGlmIGF0IGVuZCBvZiBkZWZsYXRlIHN0cmVhbSAqLwotICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgIGlmIChnel9uZXh0NChzdGF0ZSwgJmNyYykgPT0gLTEgfHwgZ3pfbmV4dDQoc3RhdGUsICZsZW4pID09IC0xKSB7Ci0gICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjcmMgIT0gc3RybS0+YWRsZXIpIHsKLSAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJpbmNvcnJlY3QgZGF0YSBjaGVjayIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZW4gIT0gKHN0cm0tPnRvdGFsX291dCAmIDB4ZmZmZmZmZmZMKSkgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgImluY29ycmVjdCBsZW5ndGggY2hlY2siKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsgICAgICAvKiByZWFkeSBmb3IgbmV4dCBzdHJlYW0sIG9uY2UgaGF2ZSBpcyAwIChsZWF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+ZGlyZWN0IHVuY2hhbmdlZCB0byByZW1lbWJlciBob3cpICovCi0gICAgfQorICAgIC8qIGlmIHRoZSBnemlwIHN0cmVhbSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBsb29rIGZvciBhbm90aGVyICovCisgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCisgICAgICAgIHN0YXRlLT5ob3cgPSBMT09LOwogCiAgICAgLyogZ29vZCBkZWNvbXByZXNzaW9uICovCiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIE1ha2UgZGF0YSBhbmQgcHV0IGluIHRoZSBvdXRwdXQgYnVmZmVyLiAgQXNzdW1lcyB0aGF0IHN0YXRlLT5oYXZlID09IDAuCisvKiBGZXRjaCBkYXRhIGFuZCBwdXQgaXQgaW4gdGhlIG91dHB1dCBidWZmZXIuICBBc3N1bWVzIHN0YXRlLT54LmhhdmUgaXMgMC4KICAgIERhdGEgaXMgZWl0aGVyIGNvcGllZCBmcm9tIHRoZSBpbnB1dCBmaWxlIG9yIGRlY29tcHJlc3NlZCBmcm9tIHRoZSBpbnB1dAogICAgZmlsZSBkZXBlbmRpbmcgb24gc3RhdGUtPmhvdy4gIElmIHN0YXRlLT5ob3cgaXMgTE9PSywgdGhlbiBhIGd6aXAgaGVhZGVyIGlzCi0gICBsb29rZWQgZm9yIChhbmQgc2tpcHBlZCBpZiBmb3VuZCkgdG8gZGV0ZXJtaW5lIHdpdGhlciB0byBjb3B5IG9yIGRlY29tcHJlc3MuCi0gICBSZXR1cm5zIC0xIG9uIGVycm9yLCBvdGhlcndpc2UgMC4gIGd6X21ha2UoKSB3aWxsIGxlYXZlIHN0YXRlLT5oYXZlIGFzIENPUFkKLSAgIG9yIEdaSVAgdW5sZXNzIHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUgaGFzIGJlZW4gcmVhY2hlZCBhbmQgYWxsIGRhdGEgaGFzCi0gICBiZWVuIHByb2Nlc3NlZC4gICovCi1sb2NhbCBpbnQgZ3pfbWFrZShzdGF0ZSkKKyAgIGxvb2tlZCBmb3IgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY29weSBvciBkZWNvbXByZXNzLiAgUmV0dXJucyAtMSBvbiBlcnJvciwKKyAgIG90aGVyd2lzZSAwLiAgZ3pfZmV0Y2goKSB3aWxsIGxlYXZlIHN0YXRlLT5ob3cgYXMgQ09QWSBvciBHWklQIHVubGVzcyB0aGUKKyAgIGVuZCBvZiB0aGUgaW5wdXQgZmlsZSBoYXMgYmVlbiByZWFjaGVkIGFuZCBhbGwgZGF0YSBoYXMgYmVlbiBwcm9jZXNzZWQuICAqLworbG9jYWwgaW50IGd6X2ZldGNoKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCi0gICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSykgeyAgICAgICAgICAgLyogbG9vayBmb3IgZ3ppcCBoZWFkZXIgKi8KLSAgICAgICAgaWYgKGd6X2hlYWQoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoc3RhdGUtPmhhdmUpICAgICAgICAgICAgICAgIC8qIGdvdCBzb21lIGRhdGEgZnJvbSBnel9oZWFkKCkgKi8KKyAgICBkbyB7CisgICAgICAgIHN3aXRjaChzdGF0ZS0+aG93KSB7CisgICAgICAgIGNhc2UgTE9PSzogICAgICAvKiAtPiBMT09LLCBDT1BZIChvbmx5IGlmIG5ldmVyIEdaSVApLCBvciBHWklQICovCisgICAgICAgICAgICBpZiAoZ3pfbG9vayhzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENPUFk6ICAgICAgLyogLT4gQ09QWSAqLworICAgICAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5vdXQsIHN0YXRlLT5zaXplIDw8IDEsICYoc3RhdGUtPnguaGF2ZSkpCisgICAgICAgICAgICAgICAgICAgID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0OwogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChzdGF0ZS0+aG93ID09IENPUFkpIHsgICAgICAgICAgIC8qIHN0cmFpZ2h0IGNvcHkgKi8KLSAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5vdXQsIHN0YXRlLT5zaXplIDw8IDEsICYoc3RhdGUtPmhhdmUpKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+b3V0OwotICAgIH0KLSAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IEdaSVApIHsgICAgICAvKiBkZWNvbXByZXNzICovCi0gICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplIDw8IDE7Ci0gICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKLSAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgICAgICBjYXNlIEdaSVA6ICAgICAgLyogLT4gR1pJUCBvciBMT09LIChpZiBlbmQgb2YgZ3ppcCBzdHJlYW0pICovCisgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZSA8PCAxOworICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OworICAgICAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSB3aGlsZSAoc3RhdGUtPnguaGF2ZSA9PSAwICYmICghc3RhdGUtPmVvZiB8fCBzdHJtLT5hdmFpbF9pbikpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMzYsMTIgKzI2MiwxMiBAQAogICAgIC8qIHNraXAgb3ZlciBsZW4gYnl0ZXMgb3IgcmVhY2ggZW5kLW9mLWZpbGUsIHdoaWNoZXZlciBjb21lcyBmaXJzdCAqLwogICAgIHdoaWxlIChsZW4pCiAgICAgICAgIC8qIHNraXAgb3ZlciB3aGF0ZXZlciBpcyBpbiBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICAgICAgbiA9IEdUX09GRihzdGF0ZS0+aGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+aGF2ZSA+IGxlbiA/Ci0gICAgICAgICAgICAgICAgKHVuc2lnbmVkKWxlbiA6IHN0YXRlLT5oYXZlOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKLSAgICAgICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT54LmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPnguaGF2ZSA+IGxlbiA/CisgICAgICAgICAgICAgICAgKHVuc2lnbmVkKWxlbiA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CisgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgICAgIGxlbiAtPSBuOwogICAgICAgICB9CiAKQEAgLTM1Miw3ICsyNzgsNyBAQAogICAgICAgICAvKiBuZWVkIG1vcmUgZGF0YSB0byBza2lwIC0tIGxvYWQgdXAgb3V0cHV0IGJ1ZmZlciAqLwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8qIGdldCBtb3JlIG91dHB1dCwgbG9va2luZyBmb3IgaGVhZGVyIGlmIHJlcXVpcmVkICovCi0gICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICBpZiAoZ3pfZmV0Y2goc3RhdGUpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIHJldHVybiAwOwpAQCAtMzc0LDE0ICszMDAsMTUgQEAKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKICAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogc2luY2UgYW4gaW50IGlzIHJldHVybmVkLCBtYWtlIHN1cmUgbGVuIGZpdHMgaW4gb25lLCBvdGhlcndpc2UgcmV0dXJuCiAgICAgICAgd2l0aCBhbiBlcnJvciAodGhpcyBhdm9pZHMgdGhlIGZsYXcgaW4gdGhlIGludGVyZmFjZSkgKi8KICAgICBpZiAoKGludClsZW4gPCAwKSB7Ci0gICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTQwMCw0OSArMzI3LDUxIEBACiAgICAgZ290ID0gMDsKICAgICBkbyB7CiAgICAgICAgIC8qIGZpcnN0IGp1c3QgdHJ5IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICAgICAgbiA9IHN0YXRlLT5oYXZlID4gbGVuID8gbGVuIDogc3RhdGUtPmhhdmU7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+bmV4dCwgbik7Ci0gICAgICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlID4gbGVuID8gbGVuIDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHN0YXRlLT54Lm5leHQsIG4pOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOwogICAgICAgICB9CiAKICAgICAgICAgLyogb3V0cHV0IGJ1ZmZlciBlbXB0eSAtLSByZXR1cm4gaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgKi8KLSAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmVvZiAmJiBzdHJtLT5hdmFpbF9pbiA9PSAwKQorICAgICAgICBlbHNlIGlmIChzdGF0ZS0+ZW9mICYmIHN0cm0tPmF2YWlsX2luID09IDApIHsKKyAgICAgICAgICAgIHN0YXRlLT5wYXN0ID0gMTsgICAgICAgIC8qIHRyaWVkIHRvIHJlYWQgcGFzdCBlbmQgKi8KICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgLyogbmVlZCBvdXRwdXQgZGF0YSAtLSBmb3Igc21hbGwgbGVuIG9yIG5ldyBzdHJlYW0gbG9hZCB1cCBvdXIgb3V0cHV0CiAgICAgICAgICAgIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IExPT0sgfHwgbGVuIDwgKHN0YXRlLT5zaXplIDw8IDEpKSB7CiAgICAgICAgICAgICAvKiBnZXQgbW9yZSBvdXRwdXQsIGxvb2tpbmcgZm9yIGhlYWRlciBpZiByZXF1aXJlZCAqLwotICAgICAgICAgICAgaWYgKGd6X21ha2Uoc3RhdGUpID09IC0xKQorICAgICAgICAgICAgaWYgKGd6X2ZldGNoKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBjb250aW51ZTsgICAgICAgLyogbm8gcHJvZ3Jlc3MgeWV0IC0tIGdvIGJhY2sgdG8gbWVtY3B5KCkgYWJvdmUgKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAvKiBubyBwcm9ncmVzcyB5ZXQgLS0gZ28gYmFjayB0byBjb3B5IGFib3ZlICovCiAgICAgICAgICAgICAvKiB0aGUgY29weSBhYm92ZSBhc3N1cmVzIHRoYXQgd2Ugd2lsbCBsZWF2ZSB3aXRoIHNwYWNlIGluIHRoZQogICAgICAgICAgICAgICAgb3V0cHV0IGJ1ZmZlciwgYWxsb3dpbmcgYXQgbGVhc3Qgb25lIGd6dW5nZXRjKCkgdG8gc3VjY2VlZCAqLwogICAgICAgICB9CiAKICAgICAgICAgLyogbGFyZ2UgbGVuIC0tIHJlYWQgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IENPUFkpIHsgICAgICAvKiByZWFkIGRpcmVjdGx5ICovCi0gICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgYnVmLCBsZW4sICZuKSA9PSAtMSkKKyAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwgbGVuLCAmbikgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKICAgICAgICAgLyogbGFyZ2UgbGVuIC0tIGRlY29tcHJlc3MgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIHsgIC8qIHN0YXRlLT5ob3cgPT0gR1pJUCAqLwogICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gbGVuOwotICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBidWY7CisgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopYnVmOwogICAgICAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgbiA9IHN0YXRlLT5oYXZlOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAwOworICAgICAgICAgICAgbiA9IHN0YXRlLT54LmhhdmU7CisgICAgICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKICAgICAgICAgfQogCiAgICAgICAgIC8qIHVwZGF0ZSBwcm9ncmVzcyAqLwogICAgICAgICBsZW4gLT0gbjsKICAgICAgICAgYnVmID0gKGNoYXIgKilidWYgKyBuOwogICAgICAgICBnb3QgKz0gbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICB9IHdoaWxlIChsZW4pOwogCiAgICAgLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkIGludG8gdXNlciBidWZmZXIgKHdpbGwgZml0IGluIGludCkgKi8KQEAgLTQ1MCw2ICszNzksMTEgQEAKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLworI2lmZGVmIFpfUFJFRklYX1NFVAorIyAgdW5kZWYgel9nemdldGMKKyNlbHNlCisjICB1bmRlZiBnemdldGMKKyNlbmRpZgogaW50IFpFWFBPUlQgZ3pnZXRjKGZpbGUpCiAgICAgZ3pGaWxlIGZpbGU7CiB7CkBAIC00NjIsMTUgKzM5NiwxNiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiB0cnkgb3V0cHV0IGJ1ZmZlciAobm8gbmVlZCB0byBjaGVjayBmb3Igc2tpcCByZXF1ZXN0KSAqLwotICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICBzdGF0ZS0+aGF2ZS0tOwotICAgICAgICBzdGF0ZS0+cG9zKys7Ci0gICAgICAgIHJldHVybiAqKHN0YXRlLT5uZXh0KSsrOworICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgIHN0YXRlLT54LmhhdmUtLTsKKyAgICAgICAgc3RhdGUtPngucG9zKys7CisgICAgICAgIHJldHVybiAqKHN0YXRlLT54Lm5leHQpKys7CiAgICAgfQogCiAgICAgLyogbm90aGluZyB0aGVyZSAtLSB0cnkgZ3pyZWFkKCkgKi8KQEAgLTQ3OCw2ICs0MTMsMTIgQEAKICAgICByZXR1cm4gcmV0IDwgMSA/IC0xIDogYnVmWzBdOwogfQogCitpbnQgWkVYUE9SVCBnemdldGNfKGZpbGUpCitnekZpbGUgZmlsZTsKK3sKKyAgICByZXR1cm4gZ3pnZXRjKGZpbGUpOworfQorCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCiBpbnQgWkVYUE9SVCBnenVuZ2V0YyhjLCBmaWxlKQogICAgIGludCBjOwpAQCAtNDkwLDggKzQzMSw5IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIHByb2Nlc3MgYSBza2lwIHJlcXVlc3QgKi8KQEAgLTUwNiwzMiArNDQ4LDM0IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGlmIG91dHB1dCBidWZmZXIgZW1wdHksIHB1dCBieXRlIGF0IGVuZCAoYWxsb3dzIG1vcmUgcHVzaGluZykgKi8KLSAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgewotICAgICAgICBzdGF0ZS0+aGF2ZSA9IDE7Ci0gICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPm91dCArIChzdGF0ZS0+c2l6ZSA8PCAxKSAtIDE7Ci0gICAgICAgIHN0YXRlLT5uZXh0WzBdID0gYzsKLSAgICAgICAgc3RhdGUtPnBvcy0tOworICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDApIHsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDE7CisgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpIC0gMTsKKyAgICAgICAgc3RhdGUtPngubmV4dFswXSA9IGM7CisgICAgICAgIHN0YXRlLT54LnBvcy0tOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgICAgIHJldHVybiBjOwogICAgIH0KIAogICAgIC8qIGlmIG5vIHJvb20sIGdpdmUgdXAgKG11c3QgaGF2ZSBhbHJlYWR5IGRvbmUgYSBnenVuZ2V0YygpKSAqLwotICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAoc3RhdGUtPnNpemUgPDwgMSkpIHsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAib3V0IG9mIHJvb20gdG8gcHVzaCBjaGFyYWN0ZXJzIik7CisgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gKHN0YXRlLT5zaXplIDw8IDEpKSB7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJvdXQgb2Ygcm9vbSB0byBwdXNoIGNoYXJhY3RlcnMiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIC8qIHNsaWRlIG91dHB1dCBkYXRhIGlmIG5lZWRlZCBhbmQgaW5zZXJ0IGJ5dGUgYmVmb3JlIGV4aXN0aW5nIGRhdGEgKi8KLSAgICBpZiAoc3RhdGUtPm5leHQgPT0gc3RhdGUtPm91dCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyICpzcmMgPSBzdGF0ZS0+b3V0ICsgc3RhdGUtPmhhdmU7CisgICAgaWYgKHN0YXRlLT54Lm5leHQgPT0gc3RhdGUtPm91dCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpzcmMgPSBzdGF0ZS0+b3V0ICsgc3RhdGUtPnguaGF2ZTsKICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRlLT5vdXQgKyAoc3RhdGUtPnNpemUgPDwgMSk7CiAgICAgICAgIHdoaWxlIChzcmMgPiBzdGF0ZS0+b3V0KQogICAgICAgICAgICAgKi0tZGVzdCA9ICotLXNyYzsKLSAgICAgICAgc3RhdGUtPm5leHQgPSBkZXN0OworICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gZGVzdDsKICAgICB9Ci0gICAgc3RhdGUtPmhhdmUrKzsKLSAgICBzdGF0ZS0+bmV4dC0tOwotICAgIHN0YXRlLT5uZXh0WzBdID0gYzsKLSAgICBzdGF0ZS0+cG9zLS07CisgICAgc3RhdGUtPnguaGF2ZSsrOworICAgIHN0YXRlLT54Lm5leHQtLTsKKyAgICBzdGF0ZS0+eC5uZXh0WzBdID0gYzsKKyAgICBzdGF0ZS0+eC5wb3MtLTsKKyAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgcmV0dXJuIGM7CiB9CiAKQEAgLTU1MSw4ICs0OTUsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogcHJvY2VzcyBhIHNraXAgcmVxdWVzdCAqLwpAQCAtNTY5LDMyICs1MTQsMzEgQEAKICAgICBsZWZ0ID0gKHVuc2lnbmVkKWxlbiAtIDE7CiAgICAgaWYgKGxlZnQpIGRvIHsKICAgICAgICAgLyogYXNzdXJlIHRoYXQgc29tZXRoaW5nIGlzIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgLyogZXJyb3IgKi8KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7ICAgICAvKiBlbmQgb2YgZmlsZSAqLwotICAgICAgICAgICAgICAgIGlmIChidWYgPT0gc3RyKSAgICAgICAgIC8qIGdvdCBidXBrdXMgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZ290IHNvbWV0aGluZyAtLSByZXR1cm4gaXQgKi8KLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gMCAmJiBnel9mZXRjaChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogZXJyb3IgKi8KKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gMCkgeyAgICAgICAvKiBlbmQgb2YgZmlsZSAqLworICAgICAgICAgICAgc3RhdGUtPnBhc3QgPSAxOyAgICAgICAgICAgIC8qIHJlYWQgcGFzdCBlbmQgKi8KKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gd2hhdCB3ZSBoYXZlICovCiAgICAgICAgIH0KIAogICAgICAgICAvKiBsb29rIGZvciBlbmQtb2YtbGluZSBpbiBjdXJyZW50IG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgbiA9IHN0YXRlLT5oYXZlID4gbGVmdCA/IGxlZnQgOiBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgZW9sID0gbWVtY2hyKHN0YXRlLT5uZXh0LCAnXG4nLCBuKTsKKyAgICAgICAgbiA9IHN0YXRlLT54LmhhdmUgPiBsZWZ0ID8gbGVmdCA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgIGVvbCA9ICh1bnNpZ25lZCBjaGFyICopbWVtY2hyKHN0YXRlLT54Lm5leHQsICdcbicsIG4pOwogICAgICAgICBpZiAoZW9sICE9IE5VTEwpCi0gICAgICAgICAgICBuID0gKHVuc2lnbmVkKShlb2wgLSBzdGF0ZS0+bmV4dCkgKyAxOworICAgICAgICAgICAgbiA9ICh1bnNpZ25lZCkoZW9sIC0gc3RhdGUtPngubmV4dCkgKyAxOwogCiAgICAgICAgIC8qIGNvcHkgdGhyb3VnaCBlbmQtb2YtbGluZSwgb3IgcmVtYWluZGVyIGlmIG5vdCBmb3VuZCAqLwotICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+bmV4dCwgbik7Ci0gICAgICAgIHN0YXRlLT5oYXZlIC09IG47Ci0gICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgbWVtY3B5KGJ1Ziwgc3RhdGUtPngubmV4dCwgbik7CisgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKKyAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgbGVmdCAtPSBuOwogICAgICAgICBidWYgKz0gbjsKICAgICB9IHdoaWxlIChsZWZ0ICYmIGVvbCA9PSBOVUxMKTsKIAotICAgIC8qIGZvdW5kIGVuZC1vZi1saW5lIG9yIG91dCBvZiBzcGFjZSAtLSB0ZXJtaW5hdGUgc3RyaW5nIGFuZCByZXR1cm4gaXQgKi8KKyAgICAvKiByZXR1cm4gdGVybWluYXRlZCBzdHJpbmcsIG9yIGlmIG5vdGhpbmcsIGVuZCBvZiBmaWxlICovCisgICAgaWYgKGJ1ZiA9PSBzdHIpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGJ1ZlswXSA9IDA7CiAgICAgcmV0dXJuIHN0cjsKIH0KQEAgLTYxMCwxNiArNTU0LDEyIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgLyogaWYgdGhlIHN0YXRlIGlzIG5vdCBrbm93biwgYnV0IHdlIGNhbiBmaW5kIG91dCwgdGhlbiBkbyBzbyAodGhpcyBpcwogICAgICAgIG1haW5seSBmb3IgcmlnaHQgYWZ0ZXIgYSBnem9wZW4oKSBvciBnemRvcGVuKCkpICovCi0gICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSyAmJiBzdGF0ZS0+aGF2ZSA9PSAwKQotICAgICAgICAodm9pZClnel9oZWFkKHN0YXRlKTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCAmJiBzdGF0ZS0+aG93ID09IExPT0sgJiYgc3RhdGUtPnguaGF2ZSA9PSAwKQorICAgICAgICAodm9pZClnel9sb29rKHN0YXRlKTsKIAotICAgIC8qIHJldHVybiAxIGlmIHJlYWRpbmcgZGlyZWN0LCAwIGlmIGRlY29tcHJlc3NpbmcgYSBnemlwIHN0cmVhbSAqLworICAgIC8qIHJldHVybiAxIGlmIHRyYW5zcGFyZW50LCAwIGlmIHByb2Nlc3NpbmcgYSBnemlwIHN0cmVhbSAqLwogICAgIHJldHVybiBzdGF0ZS0+ZGlyZWN0OwogfQogCkBAIC02MjcsNyArNTY3LDcgQEAKIGludCBaRVhQT1JUIGd6Y2xvc2VfcihmaWxlKQogICAgIGd6RmlsZSBmaWxlOwogewotICAgIGludCByZXQ7CisgICAgaW50IHJldCwgZXJyOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIAogICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KQEAgLTY0NSw5ICs1ODUsMTAgQEAKICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOwogICAgIH0KKyAgICBlcnIgPSBzdGF0ZS0+ZXJyID09IFpfQlVGX0VSUk9SID8gWl9CVUZfRVJST1IgOiBaX09LOwogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKICAgICBmcmVlKHN0YXRlLT5wYXRoKTsKICAgICByZXQgPSBjbG9zZShzdGF0ZS0+ZmQpOwogICAgIGZyZWUoc3RhdGUpOwotICAgIHJldHVybiByZXQgPyBaX0VSUk5PIDogWl9PSzsKKyAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IGVycjsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nendyaXRlLmMgYi9Nb2R1bGVzL3psaWIvZ3p3cml0ZS5jCmluZGV4IGU4ZGVmYzYuLmFhNzY3ZmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9nendyaXRlLmMKKysrIGIvTW9kdWxlcy96bGliL2d6d3JpdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGd6d3JpdGUuYyAtLSB6bGliIGZ1bmN0aW9ucyBmb3Igd3JpdGluZyBnemlwIGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xOCw0NCArMTgsNTUgQEAKICAgICBpbnQgcmV0OwogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICAvKiBhbGxvY2F0ZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgKi8KLSAgICBzdGF0ZS0+aW4gPSBtYWxsb2Moc3RhdGUtPndhbnQpOwotICAgIHN0YXRlLT5vdXQgPSBtYWxsb2Moc3RhdGUtPndhbnQpOwotICAgIGlmIChzdGF0ZS0+aW4gPT0gTlVMTCB8fCBzdGF0ZS0+b3V0ID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHN0YXRlLT5vdXQgIT0gTlVMTCkKLSAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7Ci0gICAgICAgIGlmIChzdGF0ZS0+aW4gIT0gTlVMTCkKLSAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAvKiBhbGxvY2F0ZSBpbnB1dCBidWZmZXIgKi8KKyAgICBzdGF0ZS0+aW4gPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCk7CisgICAgaWYgKHN0YXRlLT5pbiA9PSBOVUxMKSB7CiAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIC8qIGFsbG9jYXRlIGRlZmxhdGUgbWVtb3J5LCBzZXQgdXAgZm9yIGd6aXAgY29tcHJlc3Npb24gKi8KLSAgICBzdHJtLT56YWxsb2MgPSBaX05VTEw7Ci0gICAgc3RybS0+emZyZWUgPSBaX05VTEw7Ci0gICAgc3RybS0+b3BhcXVlID0gWl9OVUxMOwotICAgIHJldCA9IGRlZmxhdGVJbml0MihzdHJtLCBzdGF0ZS0+bGV2ZWwsIFpfREVGTEFURUQsCi0gICAgICAgICAgICAgICAgICAgICAgIDE1ICsgMTYsIDgsIHN0YXRlLT5zdHJhdGVneSk7Ci0gICAgaWYgKHJldCAhPSBaX09LKSB7Ci0gICAgICAgIGZyZWUoc3RhdGUtPmluKTsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgLyogb25seSBuZWVkIG91dHB1dCBidWZmZXIgYW5kIGRlZmxhdGUgc3RhdGUgaWYgY29tcHJlc3NpbmcgKi8KKyAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgLyogYWxsb2NhdGUgb3V0cHV0IGJ1ZmZlciAqLworICAgICAgICBzdGF0ZS0+b3V0ID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQpOworICAgICAgICBpZiAoc3RhdGUtPm91dCA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICAvKiBhbGxvY2F0ZSBkZWZsYXRlIG1lbW9yeSwgc2V0IHVwIGZvciBnemlwIGNvbXByZXNzaW9uICovCisgICAgICAgIHN0cm0tPnphbGxvYyA9IFpfTlVMTDsKKyAgICAgICAgc3RybS0+emZyZWUgPSBaX05VTEw7CisgICAgICAgIHN0cm0tPm9wYXF1ZSA9IFpfTlVMTDsKKyAgICAgICAgcmV0ID0gZGVmbGF0ZUluaXQyKHN0cm0sIHN0YXRlLT5sZXZlbCwgWl9ERUZMQVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9XQklUUyArIDE2LCBERUZfTUVNX0xFVkVMLCBzdGF0ZS0+c3RyYXRlZ3kpOworICAgICAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBtYXJrIHN0YXRlIGFzIGluaXRpYWxpemVkICovCiAgICAgc3RhdGUtPnNpemUgPSBzdGF0ZS0+d2FudDsKIAotICAgIC8qIGluaXRpYWxpemUgd3JpdGUgYnVmZmVyICovCi0gICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7Ci0gICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OwotICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CisgICAgLyogaW5pdGlhbGl6ZSB3cml0ZSBidWZmZXIgaWYgY29tcHJlc3NpbmcgKi8KKyAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogLyogQ29tcHJlc3Mgd2hhdGV2ZXIgaXMgYXQgYXZhaWxfaW4gYW5kIG5leHRfaW4gYW5kIHdyaXRlIHRvIHRoZSBvdXRwdXQgZmlsZS4KICAgIFJldHVybiAtMSBpZiB0aGVyZSBpcyBhbiBlcnJvciB3cml0aW5nIHRvIHRoZSBvdXRwdXQgZmlsZSwgb3RoZXJ3aXNlIDAuCiAgICBmbHVzaCBpcyBhc3N1bWVkIHRvIGJlIGEgdmFsaWQgZGVmbGF0ZSgpIGZsdXNoIHZhbHVlLiAgSWYgZmx1c2ggaXMgWl9GSU5JU0gsCi0gICB0aGVuIHRoZSBkZWZsYXRlKCkgc3RhdGUgaXMgcmVzZXQgdG8gc3RhcnQgYSBuZXcgZ3ppcCBzdHJlYW0uICovCisgICB0aGVuIHRoZSBkZWZsYXRlKCkgc3RhdGUgaXMgcmVzZXQgdG8gc3RhcnQgYSBuZXcgZ3ppcCBzdHJlYW0uICBJZiBnei0+ZGlyZWN0CisgICBpcyB0cnVlLCB0aGVuIHNpbXBseSB3cml0ZSB0byB0aGUgb3V0cHV0IGZpbGUgd2l0aG91dCBjb21wcmVzc2luZywgYW5kCisgICBpZ25vcmUgZmx1c2guICovCiBsb2NhbCBpbnQgZ3pfY29tcChzdGF0ZSwgZmx1c2gpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIGludCBmbHVzaDsKQEAgLTY4LDYgKzc5LDE3IEBACiAgICAgaWYgKHN0YXRlLT5zaXplID09IDAgJiYgZ3pfaW5pdChzdGF0ZSkgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKIAorICAgIC8qIHdyaXRlIGRpcmVjdGx5IGlmIHJlcXVlc3RlZCAqLworICAgIGlmIChzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIGdvdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RybS0+bmV4dF9pbiwgc3RybS0+YXZhaWxfaW4pOworICAgICAgICBpZiAoZ290IDwgMCB8fCAodW5zaWduZWQpZ290ICE9IHN0cm0tPmF2YWlsX2luKSB7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9FUlJOTywgenN0cmVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgLyogcnVuIGRlZmxhdGUoKSBvbiBwcm92aWRlZCBpbnB1dCB1bnRpbCBpdCBwcm9kdWNlcyBubyBtb3JlIG91dHB1dCAqLwogICAgIHJldCA9IFpfT0s7CiAgICAgZG8gewpAQCAtNzUsOCArOTcsOCBAQAogICAgICAgICAgICBkb2luZyBaX0ZJTklTSCB0aGVuIGRvbid0IHdyaXRlIHVudGlsIHdlIGdldCB0byBaX1NUUkVBTV9FTkQgKi8KICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX291dCA9PSAwIHx8IChmbHVzaCAhPSBaX05PX0ZMVVNIICYmCiAgICAgICAgICAgICAoZmx1c2ggIT0gWl9GSU5JU0ggfHwgcmV0ID09IFpfU1RSRUFNX0VORCkpKSB7Ci0gICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKShzdHJtLT5uZXh0X291dCAtIHN0YXRlLT5uZXh0KTsKLSAgICAgICAgICAgIGlmIChoYXZlICYmICgoZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdGF0ZS0+bmV4dCwgaGF2ZSkpIDwgMCB8fAorICAgICAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+eC5uZXh0KTsKKyAgICAgICAgICAgIGlmIChoYXZlICYmICgoZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdGF0ZS0+eC5uZXh0LCBoYXZlKSkgPCAwIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKWdvdCAhPSBoYXZlKSkgewogICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtODUsNyArMTA3LDcgQEAKICAgICAgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZTsKICAgICAgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgICAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0OwogICAgICAgICB9CiAKICAgICAgICAgLyogY29tcHJlc3MgKi8KQEAgLTEzMSw3ICsxNTMsNyBAQAogICAgICAgICB9CiAgICAgICAgIHN0cm0tPmF2YWlsX2luID0gbjsKICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBsZW4gLT0gbjsKQEAgLTE0Niw3ICsxNjgsNiBAQAogICAgIHVuc2lnbmVkIGxlbjsKIHsKICAgICB1bnNpZ25lZCBwdXQgPSBsZW47Ci0gICAgdW5zaWduZWQgbjsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAgICAgel9zdHJlYW1wIHN0cm07CiAKQEAgLTE2Myw3ICsxODQsNyBAQAogICAgIC8qIHNpbmNlIGFuIGludCBpcyByZXR1cm5lZCwgbWFrZSBzdXJlIGxlbiBmaXRzIGluIG9uZSwgb3RoZXJ3aXNlIHJldHVybgogICAgICAgIHdpdGggYW4gZXJyb3IgKHRoaXMgYXZvaWRzIHRoZSBmbGF3IGluIHRoZSBpbnRlcmZhY2UpICovCiAgICAgaWYgKChpbnQpbGVuIDwgMCkgewotICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE4NiwxNiArMjA3LDE5IEBACiAgICAgaWYgKGxlbiA8IHN0YXRlLT5zaXplKSB7CiAgICAgICAgIC8qIGNvcHkgdG8gaW5wdXQgYnVmZmVyLCBjb21wcmVzcyB3aGVuIGZ1bGwgKi8KICAgICAgICAgZG8geworICAgICAgICAgICAgdW5zaWduZWQgaGF2ZSwgY29weTsKKwogICAgICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCiAgICAgICAgICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgICAgIG4gPSBzdGF0ZS0+c2l6ZSAtIHN0cm0tPmF2YWlsX2luOwotICAgICAgICAgICAgaWYgKG4gPiBsZW4pCi0gICAgICAgICAgICAgICAgbiA9IGxlbjsKLSAgICAgICAgICAgIG1lbWNweShzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4sIGJ1Ziwgbik7Ci0gICAgICAgICAgICBzdHJtLT5hdmFpbF9pbiArPSBuOwotICAgICAgICAgICAgc3RhdGUtPnBvcyArPSBuOwotICAgICAgICAgICAgYnVmID0gKGNoYXIgKilidWYgKyBuOwotICAgICAgICAgICAgbGVuIC09IG47CisgICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKSgoc3RybS0+bmV4dF9pbiArIHN0cm0tPmF2YWlsX2luKSAtIHN0YXRlLT5pbik7CisgICAgICAgICAgICBjb3B5ID0gc3RhdGUtPnNpemUgLSBoYXZlOworICAgICAgICAgICAgaWYgKGNvcHkgPiBsZW4pCisgICAgICAgICAgICAgICAgY29weSA9IGxlbjsKKyAgICAgICAgICAgIG1lbWNweShzdGF0ZS0+aW4gKyBoYXZlLCBidWYsIGNvcHkpOworICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gY29weTsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArPSBjb3B5OworICAgICAgICAgICAgYnVmID0gKGNvbnN0IGNoYXIgKilidWYgKyBjb3B5OworICAgICAgICAgICAgbGVuIC09IGNvcHk7CiAgICAgICAgICAgICBpZiAobGVuICYmIGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9IHdoaWxlIChsZW4pOwpAQCAtMjA3LDggKzIzMSw4IEBACiAKICAgICAgICAgLyogZGlyZWN0bHkgY29tcHJlc3MgdXNlciBidWZmZXIgdG8gZmlsZSAqLwogICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IGxlbjsKLSAgICAgICAgc3RybS0+bmV4dF9pbiA9ICh2b2lkcClidWY7Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbGVuOworICAgICAgICBzdHJtLT5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilidWY7CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBsZW47CiAgICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIyMiw2ICsyNDYsNyBAQAogICAgIGd6RmlsZSBmaWxlOwogICAgIGludCBjOwogeworICAgIHVuc2lnbmVkIGhhdmU7CiAgICAgdW5zaWduZWQgY2hhciBidWZbMV07CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwpAQCAtMjQ1LDE5ICsyNzAsMjMgQEAKIAogICAgIC8qIHRyeSB3cml0aW5nIHRvIGlucHV0IGJ1ZmZlciBmb3Igc3BlZWQgKHN0YXRlLT5zaXplID09IDAgaWYgYnVmZmVyIG5vdAogICAgICAgIGluaXRpYWxpemVkKSAqLwotICAgIGlmIChzdHJtLT5hdmFpbF9pbiA8IHN0YXRlLT5zaXplKSB7CisgICAgaWYgKHN0YXRlLT5zaXplKSB7CiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQogICAgICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgc3RybS0+bmV4dF9pbltzdHJtLT5hdmFpbF9pbisrXSA9IGM7Ci0gICAgICAgIHN0YXRlLT5wb3MrKzsKLSAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKChzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4pIC0gc3RhdGUtPmluKTsKKyAgICAgICAgaWYgKGhhdmUgPCBzdGF0ZS0+c2l6ZSkgeworICAgICAgICAgICAgc3RhdGUtPmluW2hhdmVdID0gYzsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luKys7CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MrKzsKKyAgICAgICAgICAgIHJldHVybiBjICYgMHhmZjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qIG5vIHJvb20gaW4gYnVmZmVyIG9yIG5vdCBpbml0aWFsaXplZCwgdXNlIGd6X3dyaXRlKCkgKi8KICAgICBidWZbMF0gPSBjOwogICAgIGlmIChnendyaXRlKGZpbGUsIGJ1ZiwgMSkgIT0gMSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBjOworICAgIHJldHVybiBjICYgMHhmZjsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtMjc0LDE2ICszMDMsMTUgQEAKICAgICByZXR1cm4gcmV0ID09IDAgJiYgbGVuICE9IDAgPyAtMSA6IHJldDsKIH0KIAotI2lmZGVmIFNUREMKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCi1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCitpbnQgWkVYUE9SVFZBIGd6dnByaW50ZihnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIGludCBzaXplLCBsZW47CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwotICAgIHZhX2xpc3QgdmE7CiAKICAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCiAgICAgaWYgKGZpbGUgPT0gTlVMTCkKQEAgLTMxMywyNSArMzQxLDIwIEBACiAgICAgLyogZG8gdGhlIHByaW50ZigpIGludG8gdGhlIGlucHV0IGJ1ZmZlciwgcHV0IGxlbmd0aCBpbiBsZW4gKi8KICAgICBzaXplID0gKGludCkoc3RhdGUtPnNpemUpOwogICAgIHN0YXRlLT5pbltzaXplIC0gMV0gPSAwOwotICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwogI2lmZGVmIE5PX3ZzbnByaW50ZgogIyAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7CisgICAgKHZvaWQpdnNwcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgZm9ybWF0LCB2YSk7CiAgICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplOyBsZW4rKykKICAgICAgICAgaWYgKHN0YXRlLT5pbltsZW5dID09IDApIGJyZWFrOwogIyAgZWxzZQotICAgIGxlbiA9IHZzcHJpbnRmKHN0YXRlLT5pbiwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKKyAgICBsZW4gPSB2c3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIHZhKTsKICMgIGVuZGlmCiAjZWxzZQogIyAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNucHJpbnRmKHN0YXRlLT5pbiwgc2l6ZSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSAgICBsZW4gPSBzdHJsZW4oc3RhdGUtPmluKTsKKyAgICAodm9pZCl2c25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCB2YSk7CisgICAgbGVuID0gc3RybGVuKChjaGFyICopKHN0YXRlLT5pbikpOwogIyAgZWxzZQogICAgIGxlbiA9IHZzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwogIyAgZW5kaWYKICNlbmRpZgogCkBAIC0zNDIsMTEgKzM2NSwyMiBAQAogICAgIC8qIHVwZGF0ZSBidWZmZXIgYW5kIHBvc2l0aW9uLCBkZWZlciBjb21wcmVzc2lvbiB1bnRpbCBuZWVkZWQgKi8KICAgICBzdHJtLT5hdmFpbF9pbiA9ICh1bnNpZ25lZClsZW47CiAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICBzdGF0ZS0+cG9zICs9IGxlbjsKKyAgICBzdGF0ZS0+eC5wb3MgKz0gbGVuOwogICAgIHJldHVybiBsZW47CiB9CiAKLSNlbHNlIC8qICFTVERDICovCitpbnQgWkVYUE9SVFZBIGd6cHJpbnRmKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IHZhOworICAgIGludCByZXQ7CisKKyAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKKyAgICByZXQgPSBnenZwcmludGYoZmlsZSwgZm9ybWF0LCB2YSk7CisgICAgdmFfZW5kKHZhKTsKKyAgICByZXR1cm4gcmV0OworfQorCisjZWxzZSAvKiAhU1REQyAmJiAhWl9IQVZFX1NUREFSR19IICovCiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KIGludCBaRVhQT1JUVkEgZ3pwcmludGYgKGZpbGUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLApAQCAtMzY2LDYgKzQwMCwxMCBAQAogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAorICAgIC8qIGNoZWNrIHRoYXQgY2FuIHJlYWxseSBwYXNzIHBvaW50ZXIgaW4gaW50cyAqLworICAgIGlmIChzaXplb2YoaW50KSAhPSBzaXplb2Yodm9pZCAqKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzkwLDIyICs0MjgsMjMgQEAKICAgICBzdGF0ZS0+aW5bc2l6ZSAtIDFdID0gMDsKICNpZmRlZiBOT19zbnByaW50ZgogIyAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgIHNwcmludGYoc3RhdGUtPmluLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICBzcHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAogICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemU7IGxlbisrKQogICAgICAgICBpZiAoc3RhdGUtPmluW2xlbl0gPT0gMCkgYnJlYWs7CiAjICBlbHNlCi0gICAgbGVuID0gc3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisgICAgbGVuID0gc3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CiAjICBlbmRpZgogI2Vsc2UKICMgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgc25wcmludGYoc3RhdGUtPmluLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICBzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotICAgIGxlbiA9IHN0cmxlbihzdGF0ZS0+aW4pOworICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKShzdGF0ZS0+aW4pKTsKICMgIGVsc2UKLSAgICBsZW4gPSBzbnByaW50ZihzdGF0ZS0+aW4sIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworICAgIGxlbiA9IHNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwKKyAgICAgICAgICAgICAgICAgICBhNywgYTgsIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LAorICAgICAgICAgICAgICAgICAgIGExOSwgYTIwKTsKICMgIGVuZGlmCiAjZW5kaWYKIApAQCAtNDE2LDcgKzQ1NSw3IEBACiAgICAgLyogdXBkYXRlIGJ1ZmZlciBhbmQgcG9zaXRpb24sIGRlZmVyIGNvbXByZXNzaW9uIHVudGlsIG5lZWRlZCAqLwogICAgIHN0cm0tPmF2YWlsX2luID0gKHVuc2lnbmVkKWxlbjsKICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgIHN0YXRlLT5wb3MgKz0gbGVuOworICAgIHN0YXRlLT54LnBvcyArPSBsZW47CiAgICAgcmV0dXJuIGxlbjsKIH0KIApAQCAtNTAwLDcgKzUzOSw3IEBACiBpbnQgWkVYUE9SVCBnemNsb3NlX3coZmlsZSkKICAgICBnekZpbGUgZmlsZTsKIHsKLSAgICBpbnQgcmV0ID0gMDsKKyAgICBpbnQgcmV0ID0gWl9PSzsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAKICAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCkBAIC01MTUsMTcgKzU1NCwyNCBAQAogICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KICAgICBpZiAoc3RhdGUtPnNlZWspIHsKICAgICAgICAgc3RhdGUtPnNlZWsgPSAwOwotICAgICAgICByZXQgKz0gZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApOworICAgICAgICBpZiAoZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0ID0gc3RhdGUtPmVycjsKICAgICB9CiAKICAgICAvKiBmbHVzaCwgZnJlZSBtZW1vcnksIGFuZCBjbG9zZSBmaWxlICovCi0gICAgcmV0ICs9IGd6X2NvbXAoc3RhdGUsIFpfRklOSVNIKTsKLSAgICAodm9pZClkZWZsYXRlRW5kKCYoc3RhdGUtPnN0cm0pKTsKLSAgICBmcmVlKHN0YXRlLT5vdXQpOwotICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9GSU5JU0gpID09IC0xKQorICAgICAgICByZXQgPSBzdGF0ZS0+ZXJyOworICAgIGlmIChzdGF0ZS0+c2l6ZSkgeworICAgICAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgICAgICh2b2lkKWRlZmxhdGVFbmQoJihzdGF0ZS0+c3RybSkpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgfQogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKICAgICBmcmVlKHN0YXRlLT5wYXRoKTsKLSAgICByZXQgKz0gY2xvc2Uoc3RhdGUtPmZkKTsKKyAgICBpZiAoY2xvc2Uoc3RhdGUtPmZkKSA9PSAtMSkKKyAgICAgICAgcmV0ID0gWl9FUlJOTzsKICAgICBmcmVlKHN0YXRlKTsKLSAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IFpfT0s7CisgICAgcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZiYWNrLmMgYi9Nb2R1bGVzL3psaWIvaW5mYmFjay5jCmluZGV4IGFmM2E4YzkuLmYzODMzYzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZiYWNrLmMKKysrIGIvTW9kdWxlcy96bGliL2luZmJhY2suYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmJhY2suYyAtLSBpbmZsYXRlIHVzaW5nIGEgY2FsbC1iYWNrIGludGVyZmFjZQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDkgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTEgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQyLDEwICs0MiwxOSBAQAogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RybS0+bXNnID0gWl9OVUxMOyAgICAgICAgICAgICAgICAgLyogaW4gY2FzZSB3ZSByZXR1cm4gYW4gZXJyb3IgKi8KICAgICBpZiAoc3RybS0+emFsbG9jID09IChhbGxvY19mdW5jKTApIHsKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKICAgICAgICAgc3RybS0+emFsbG9jID0gemNhbGxvYzsKICAgICAgICAgc3RybS0+b3BhcXVlID0gKHZvaWRwZikwOworI2VuZGlmCiAgICAgfQotICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCisgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilaQUxMT0Moc3RybSwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CiAgICAgaWYgKHN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwpAQCAtMjQ2LDcgKzI1NSw3IEBACiB2b2lkIEZBUiAqb3V0X2Rlc2M7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqcHV0OyAgICAgLyogbmV4dCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBoYXZlLCBsZWZ0OyAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogYml0IGJ1ZmZlciAqLwpAQCAtMzk0LDcgKzQwMyw2IEBACiAgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChoZXJlLnZhbCA8IDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRlLT5oYXZlKytdID0gaGVyZS52YWw7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZmZhc3QuYyBiL01vZHVsZXMvemxpYi9pbmZmYXN0LmMKaW5kZXggMmYxZDYwYi4uYmRhNTljZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZmZhc3QuYworKysgYi9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mZmFzdC5jIC0tIGZhc3QgZGVjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA4LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA4LCAyMDEwLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC02OSw4ICs2OSw4IEBACiB1bnNpZ25lZCBzdGFydDsgICAgICAgICAvKiBpbmZsYXRlKCkncyBzdGFydGluZyB2YWx1ZSBmb3Igc3RybS0+YXZhaWxfb3V0ICovCiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqaW47ICAgICAgLyogbG9jYWwgc3RybS0+bmV4dF9pbiAqLwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpsYXN0OyAgICAvKiB3aGlsZSBpbiA8IGxhc3QsIGVub3VnaCBpbnB1dCBhdmFpbGFibGUgKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICppbjsgICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X2luICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbGFzdDsgICAgLyogaGF2ZSBlbm91Z2ggaW5wdXQgd2hpbGUgaW4gPCBsYXN0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKm91dDsgICAgIC8qIGxvY2FsIHN0cm0tPm5leHRfb3V0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKmJlZzsgICAgIC8qIGluZmxhdGUoKSdzIGluaXRpYWwgc3RybS0+bmV4dF9vdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqZW5kOyAgICAgLyogd2hpbGUgb3V0IDwgZW5kLCBlbm91Z2ggc3BhY2UgYXZhaWxhYmxlICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mZml4ZWQuaCBiL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCmluZGV4IDc1ZWQ0YjUuLmQ2MjgzMjcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCisrKyBiL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCkBAIC0yLDkgKzIsOSBAQAogICAgICAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IG1ha2VmaXhlZCgpLgogICAgICAqLwogCi0gICAgLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQKLSAgICAgICBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhbmQKLSAgICAgICBpcyBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCisgICAgLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4KKyAgICAgICBJdCBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGxpYnJhcnkgYW5kIGlzCisgICAgICAgc3ViamVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgogICAgICAqLwogCiAgICAgc3RhdGljIGNvbnN0IGNvZGUgbGVuZml4WzUxMl0gPSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jIGIvTW9kdWxlcy96bGliL2luZmxhdGUuYwppbmRleCBhODQzMWFiLi44NzBmODliIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZsYXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZsYXRlLmMgLS0gemxpYiBkZWNvbXByZXNzaW9uCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOTMsMTQgKzkzLDE1IEBACiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIGxvY2FsIHZvaWQgZml4ZWR0YWJsZXMgT0YoKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGUpKTsKLWxvY2FsIGludCB1cGRhdGV3aW5kb3cgT0YoKHpfc3RyZWFtcCBzdHJtLCB1bnNpZ25lZCBvdXQpKTsKK2xvY2FsIGludCB1cGRhdGV3aW5kb3cgT0YoKHpfc3RyZWFtcCBzdHJtLCBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29weSkpOwogI2lmZGVmIEJVSUxERklYRUQKICAgIHZvaWQgbWFrZWZpeGVkIE9GKCh2b2lkKSk7CiAjZW5kaWYKLWxvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2ggT0YoKHVuc2lnbmVkIEZBUiAqaGF2ZSwgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZiwKK2xvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2ggT0YoKHVuc2lnbmVkIEZBUiAqaGF2ZSwgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbikpOwogCi1pbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQoc3RybSkKK2ludCBaRVhQT1JUIGluZmxhdGVSZXNldEtlZXAoc3RybSkKIHpfc3RyZWFtcCBzdHJtOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CkBAIC0xMDksMTUgKzExMCwxMyBAQAogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogICAgIHN0cm0tPnRvdGFsX2luID0gc3RybS0+dG90YWxfb3V0ID0gc3RhdGUtPnRvdGFsID0gMDsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7Ci0gICAgc3RybS0+YWRsZXIgPSAxOyAgICAgICAgLyogdG8gc3VwcG9ydCBpbGwtY29uY2VpdmVkIEphdmEgdGVzdCBzdWl0ZSAqLworICAgIGlmIChzdGF0ZS0+d3JhcCkgICAgICAgIC8qIHRvIHN1cHBvcnQgaWxsLWNvbmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi8KKyAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0ZS0+d3JhcCAmIDE7CiAgICAgc3RhdGUtPm1vZGUgPSBIRUFEOwogICAgIHN0YXRlLT5sYXN0ID0gMDsKICAgICBzdGF0ZS0+aGF2ZWRpY3QgPSAwOwogICAgIHN0YXRlLT5kbWF4ID0gMzI3NjhVOwogICAgIHN0YXRlLT5oZWFkID0gWl9OVUxMOwotICAgIHN0YXRlLT53c2l6ZSA9IDA7Ci0gICAgc3RhdGUtPndoYXZlID0gMDsKLSAgICBzdGF0ZS0+d25leHQgPSAwOwogICAgIHN0YXRlLT5ob2xkID0gMDsKICAgICBzdGF0ZS0+Yml0cyA9IDA7CiAgICAgc3RhdGUtPmxlbmNvZGUgPSBzdGF0ZS0+ZGlzdGNvZGUgPSBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKQEAgLTEyNyw2ICsxMjYsMTkgQEAKICAgICByZXR1cm4gWl9PSzsKIH0KIAoraW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0KHN0cm0pCit6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIHN0YXRlLT53c2l6ZSA9IDA7CisgICAgc3RhdGUtPndoYXZlID0gMDsKKyAgICBzdGF0ZS0+d25leHQgPSAwOworICAgIHJldHVybiBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pOworfQorCiBpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpCiB6X3N0cmVhbXAgc3RybTsKIGludCB3aW5kb3dCaXRzOwpAQCAtMTgwLDEwICsxOTIsMTkgQEAKICAgICBpZiAoc3RybSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqLwogICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQogICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOwogICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKICAgICB9Ci0gICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisgICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICAgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKikKICAgICAgICAgICAgIFpBTExPQyhzdHJtLCAxLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CkBAIC0zMjEsOCArMzQyLDggQEAKICAgICBsb3cgPSAwOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKChsb3cgJSA3KSA9PSAwKSBwcmludGYoIlxuICAgICAgICAiKTsKLSAgICAgICAgcHJpbnRmKCJ7JXUsJXUsJWR9Iiwgc3RhdGUubGVuY29kZVtsb3ddLm9wLCBzdGF0ZS5sZW5jb2RlW2xvd10uYml0cywKLSAgICAgICAgICAgICAgIHN0YXRlLmxlbmNvZGVbbG93XS52YWwpOworICAgICAgICBwcmludGYoInsldSwldSwlZH0iLCAobG93ICYgMTI3KSA9PSA5OSA/IDY0IDogc3RhdGUubGVuY29kZVtsb3ddLm9wLAorICAgICAgICAgICAgICAgc3RhdGUubGVuY29kZVtsb3ddLmJpdHMsIHN0YXRlLmxlbmNvZGVbbG93XS52YWwpOwogICAgICAgICBpZiAoKytsb3cgPT0gc2l6ZSkgYnJlYWs7CiAgICAgICAgIHB1dGNoYXIoJywnKTsKICAgICB9CkBAIC0zNTUsMTIgKzM3NiwxMyBAQAogICAgb3V0cHV0IHdpbGwgZmFsbCBpbiB0aGUgb3V0cHV0IGRhdGEsIG1ha2luZyBtYXRjaCBjb3BpZXMgc2ltcGxlciBhbmQgZmFzdGVyLgogICAgVGhlIGFkdmFudGFnZSBtYXkgYmUgZGVwZW5kZW50IG9uIHRoZSBzaXplIG9mIHRoZSBwcm9jZXNzb3IncyBkYXRhIGNhY2hlcy4KICAqLwotbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyhzdHJtLCBvdXQpCitsb2NhbCBpbnQgdXBkYXRld2luZG93KHN0cm0sIGVuZCwgY29weSkKIHpfc3RyZWFtcCBzdHJtOwotdW5zaWduZWQgb3V0OworY29uc3QgQnl0ZWYgKmVuZDsKK3Vuc2lnbmVkIGNvcHk7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjb3B5LCBkaXN0OworICAgIHVuc2lnbmVkIGRpc3Q7CiAKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKIApAQCAtMzgwLDE5ICs0MDIsMTggQEAKICAgICB9CiAKICAgICAvKiBjb3B5IHN0YXRlLT53c2l6ZSBvciBsZXNzIG91dHB1dCBieXRlcyBpbnRvIHRoZSBjaXJjdWxhciB3aW5kb3cgKi8KLSAgICBjb3B5ID0gb3V0IC0gc3RybS0+YXZhaWxfb3V0OwogICAgIGlmIChjb3B5ID49IHN0YXRlLT53c2l6ZSkgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPndzaXplLCBzdGF0ZS0+d3NpemUpOworICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIGVuZCAtIHN0YXRlLT53c2l6ZSwgc3RhdGUtPndzaXplKTsKICAgICAgICAgc3RhdGUtPnduZXh0ID0gMDsKICAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXplOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZGlzdCA9IHN0YXRlLT53c2l6ZSAtIHN0YXRlLT53bmV4dDsKICAgICAgICAgaWYgKGRpc3QgPiBjb3B5KSBkaXN0ID0gY29weTsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LCBzdHJtLT5uZXh0X291dCAtIGNvcHksIGRpc3QpOworICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d25leHQsIGVuZCAtIGNvcHksIGRpc3QpOwogICAgICAgICBjb3B5IC09IGRpc3Q7CiAgICAgICAgIGlmIChjb3B5KSB7Ci0gICAgICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIHN0cm0tPm5leHRfb3V0IC0gY29weSwgY29weSk7CisgICAgICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIGVuZCAtIGNvcHksIGNvcHkpOwogICAgICAgICAgICAgc3RhdGUtPnduZXh0ID0gY29weTsKICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsKICAgICAgICAgfQpAQCAtNDk5LDExICs1MjAsNiBAQAogICAgICAgICBiaXRzIC09IGJpdHMgJiA3OyBcCiAgICAgfSB3aGlsZSAoMCkKIAotLyogUmV2ZXJzZSB0aGUgYnl0ZXMgaW4gYSAzMi1iaXQgdmFsdWUgKi8KLSNkZWZpbmUgUkVWRVJTRShxKSBcCi0gICAgKCgoKHEpID4+IDI0KSAmIDB4ZmYpICsgKCgocSkgPj4gOCkgJiAweGZmMDApICsgXAotICAgICAoKChxKSAmIDB4ZmYwMCkgPDwgOCkgKyAoKChxKSAmIDB4ZmYpIDw8IDI0KSkKLQogLyoKICAgIGluZmxhdGUoKSB1c2VzIGEgc3RhdGUgbWFjaGluZSB0byBwcm9jZXNzIGFzIG11Y2ggaW5wdXQgZGF0YSBhbmQgZ2VuZXJhdGUgYXMKICAgIG11Y2ggb3V0cHV0IGRhdGEgYXMgcG9zc2libGUgYmVmb3JlIHJldHVybmluZy4gIFRoZSBzdGF0ZSBtYWNoaW5lIGlzCkBAIC01OTEsNyArNjA3LDcgQEAKIGludCBmbHVzaDsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpwdXQ7ICAgICAvKiBuZXh0IG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGhhdmUsIGxlZnQ7ICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGxvbmcgaG9sZDsgICAgICAgICAvKiBiaXQgYnVmZmVyICovCkBAIC03OTcsNyArODEzLDcgQEAKICNlbmRpZgogICAgICAgICBjYXNlIERJQ1RJRDoKICAgICAgICAgICAgIE5FRURCSVRTKDMyKTsKLSAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gUkVWRVJTRShob2xkKTsKKyAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gWlNXQVAzMihob2xkKTsKICAgICAgICAgICAgIElOSVRCSVRTKCk7CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IERJQ1Q7CiAgICAgICAgIGNhc2UgRElDVDoKQEAgLTkwNSw3ICs5MjEsNyBAQAogICAgICAgICAgICAgd2hpbGUgKHN0YXRlLT5oYXZlIDwgMTkpCiAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbb3JkZXJbc3RhdGUtPmhhdmUrK11dID0gMDsKICAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOwotICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29uc3QgY29kZSBGQVIgKikoc3RhdGUtPm5leHQpOwogICAgICAgICAgICAgc3RhdGUtPmxlbmJpdHMgPSA3OwogICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUtPmxlbnMsIDE5LCAmKHN0YXRlLT5uZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bGVuYml0cyksIHN0YXRlLT53b3JrKTsKQEAgLTkyNSw3ICs5NDEsNiBAQAogICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoaGVyZS52YWwgPCAxNikgewotICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IGhlcmUudmFsOwogICAgICAgICAgICAgICAgIH0KQEAgLTk4MCw3ICs5OTUsNyBAQAogICAgICAgICAgICAgICAgdmFsdWVzIGhlcmUgKDkgYW5kIDYpIHdpdGhvdXQgcmVhZGluZyB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaAogICAgICAgICAgICAgICAgY29uY2VybmluZyB0aGUgRU5PVUdIIGNvbnN0YW50cywgd2hpY2ggZGVwZW5kIG9uIHRob3NlIHZhbHVlcyAqLwogICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7Ci0gICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb25zdCBjb2RlIEZBUiAqKShzdGF0ZS0+bmV4dCk7CiAgICAgICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDk7CiAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLT5sZW5zLCBzdGF0ZS0+bmxlbiwgJihzdGF0ZS0+bmV4dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7CkBAIC05ODksNyArMTAwNCw3IEBACiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+ZGlzdGNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmRpc3Rjb2RlID0gKGNvbnN0IGNvZGUgRkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5kaXN0Yml0cyA9IDY7CiAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS0+bGVucyArIHN0YXRlLT5ubGVuLCBzdGF0ZS0+bmRpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bmV4dCksICYoc3RhdGUtPmRpc3RiaXRzKSwgc3RhdGUtPndvcmspOwpAQCAtMTE3MCw3ICsxMTg1LDcgQEAKICNpZmRlZiBHVU5aSVAKICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5mbGFncyA/IGhvbGQgOgogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICBSRVZFUlNFKGhvbGQpKSAhPSBzdGF0ZS0+Y2hlY2spIHsKKyAgICAgICAgICAgICAgICAgICAgIFpTV0FQMzIoaG9sZCkpICE9IHN0YXRlLT5jaGVjaykgewogICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbmNvcnJlY3QgZGF0YSBjaGVjayI7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMTQsOCArMTIyOSw5IEBACiAgICAgICovCiAgIGluZl9sZWF2ZToKICAgICBSRVNUT1JFKCk7Ci0gICAgaWYgKHN0YXRlLT53c2l6ZSB8fCAoc3RhdGUtPm1vZGUgPCBDSEVDSyAmJiBvdXQgIT0gc3RybS0+YXZhaWxfb3V0KSkKLSAgICAgICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBvdXQpKSB7CisgICAgaWYgKHN0YXRlLT53c2l6ZSB8fCAob3V0ICE9IHN0cm0tPmF2YWlsX291dCAmJiBzdGF0ZS0+bW9kZSA8IEJBRCAmJgorICAgICAgICAgICAgKHN0YXRlLT5tb2RlIDwgQ0hFQ0sgfHwgZmx1c2ggIT0gWl9GSU5JU0gpKSkKKyAgICAgICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLT5uZXh0X291dCwgb3V0IC0gc3RybS0+YXZhaWxfb3V0KSkgewogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBNRU07CiAgICAgICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgICAgIH0KQEAgLTEyNDksMTMgKzEyNjUsMzcgQEAKICAgICByZXR1cm4gWl9PSzsKIH0KIAoraW50IFpFWFBPUlQgaW5mbGF0ZUdldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkKK3pfc3RyZWFtcCBzdHJtOworQnl0ZWYgKmRpY3Rpb25hcnk7Cit1SW50ICpkaWN0TGVuZ3RoOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisKKyAgICAvKiBjaGVjayBzdGF0ZSAqLworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKworICAgIC8qIGNvcHkgZGljdGlvbmFyeSAqLworICAgIGlmIChzdGF0ZS0+d2hhdmUgJiYgZGljdGlvbmFyeSAhPSBaX05VTEwpIHsKKyAgICAgICAgem1lbWNweShkaWN0aW9uYXJ5LCBzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LAorICAgICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSAtIHN0YXRlLT53bmV4dCk7CisgICAgICAgIHptZW1jcHkoZGljdGlvbmFyeSArIHN0YXRlLT53aGF2ZSAtIHN0YXRlLT53bmV4dCwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+d2luZG93LCBzdGF0ZS0+d25leHQpOworICAgIH0KKyAgICBpZiAoZGljdExlbmd0aCAhPSBaX05VTEwpCisgICAgICAgICpkaWN0TGVuZ3RoID0gc3RhdGUtPndoYXZlOworICAgIHJldHVybiBaX09LOworfQorCiBpbnQgWkVYUE9SVCBpbmZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQogel9zdHJlYW1wIHN0cm07CiBjb25zdCBCeXRlZiAqZGljdGlvbmFyeTsKIHVJbnQgZGljdExlbmd0aDsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGxvbmcgaWQ7CisgICAgdW5zaWduZWQgbG9uZyBkaWN0aWQ7CisgICAgaW50IHJldDsKIAogICAgIC8qIGNoZWNrIHN0YXRlICovCiAgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwpAQCAtMTI2MywyOSArMTMwMywyMSBAQAogICAgIGlmIChzdGF0ZS0+d3JhcCAhPSAwICYmIHN0YXRlLT5tb2RlICE9IERJQ1QpCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIAotICAgIC8qIGNoZWNrIGZvciBjb3JyZWN0IGRpY3Rpb25hcnkgaWQgKi8KKyAgICAvKiBjaGVjayBmb3IgY29ycmVjdCBkaWN0aW9uYXJ5IGlkZW50aWZpZXIgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gRElDVCkgewotICAgICAgICBpZCA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgICAgIGlkID0gYWRsZXIzMihpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7Ci0gICAgICAgIGlmIChpZCAhPSBzdGF0ZS0+Y2hlY2spCisgICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7CisgICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoZGljdGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKKyAgICAgICAgaWYgKGRpY3RpZCAhPSBzdGF0ZS0+Y2hlY2spCiAgICAgICAgICAgICByZXR1cm4gWl9EQVRBX0VSUk9SOwogICAgIH0KIAotICAgIC8qIGNvcHkgZGljdGlvbmFyeSB0byB3aW5kb3cgKi8KLSAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIHN0cm0tPmF2YWlsX291dCkpIHsKKyAgICAvKiBjb3B5IGRpY3Rpb25hcnkgdG8gd2luZG93IHVzaW5nIHVwZGF0ZXdpbmRvdygpLCB3aGljaCB3aWxsIGFtZW5kIHRoZQorICAgICAgIGV4aXN0aW5nIGRpY3Rpb25hcnkgaWYgYXBwcm9wcmlhdGUgKi8KKyAgICByZXQgPSB1cGRhdGV3aW5kb3coc3RybSwgZGljdGlvbmFyeSArIGRpY3RMZW5ndGgsIGRpY3RMZW5ndGgpOworICAgIGlmIChyZXQpIHsKICAgICAgICAgc3RhdGUtPm1vZGUgPSBNRU07CiAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICB9Ci0gICAgaWYgKGRpY3RMZW5ndGggPiBzdGF0ZS0+d3NpemUpIHsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBkaWN0aW9uYXJ5ICsgZGljdExlbmd0aCAtIHN0YXRlLT53c2l6ZSwKLSAgICAgICAgICAgICAgICBzdGF0ZS0+d3NpemUpOwotICAgICAgICBzdGF0ZS0+d2hhdmUgPSBzdGF0ZS0+d3NpemU7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d3NpemUgLSBkaWN0TGVuZ3RoLCBkaWN0aW9uYXJ5LAotICAgICAgICAgICAgICAgIGRpY3RMZW5ndGgpOwotICAgICAgICBzdGF0ZS0+d2hhdmUgPSBkaWN0TGVuZ3RoOwotICAgIH0KICAgICBzdGF0ZS0+aGF2ZWRpY3QgPSAxOwogICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICBkaWN0aW9uYXJ5IHNldFxuIikpOwogICAgIHJldHVybiBaX09LOwpAQCAtMTMyMSw3ICsxMzUzLDcgQEAKICAqLwogbG9jYWwgdW5zaWduZWQgc3luY3NlYXJjaChoYXZlLCBidWYsIGxlbikKIHVuc2lnbmVkIEZBUiAqaGF2ZTsKLXVuc2lnbmVkIGNoYXIgRkFSICpidWY7Citjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOwogdW5zaWduZWQgbGVuOwogewogICAgIHVuc2lnbmVkIGdvdDsKQEAgLTE0MzMsOCArMTQ2NSw4IEBACiAgICAgfQogCiAgICAgLyogY29weSBzdGF0ZSAqLwotICAgIHptZW1jcHkoZGVzdCwgc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKLSAgICB6bWVtY3B5KGNvcHksIHN0YXRlLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZGVzdCwgKHZvaWRwZilzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOworICAgIHptZW1jcHkoKHZvaWRwZiljb3B5LCAodm9pZHBmKXN0YXRlLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUtPmxlbmNvZGUgPj0gc3RhdGUtPmNvZGVzICYmCiAgICAgICAgIHN0YXRlLT5sZW5jb2RlIDw9IHN0YXRlLT5jb2RlcyArIEVOT1VHSCAtIDEpIHsKICAgICAgICAgY29weS0+bGVuY29kZSA9IGNvcHktPmNvZGVzICsgKHN0YXRlLT5sZW5jb2RlIC0gc3RhdGUtPmNvZGVzKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5jIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKaW5kZXggMTFlOWM1Mi4uNDRkODljZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKKysrIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZ0cmVlcy5jIC0tIGdlbmVyYXRlIEh1ZmZtYW4gdHJlZXMgZm9yIGVmZmljaWVudCBkZWNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIE1BWEJJVFMgMTUKIAogY29uc3QgY2hhciBpbmZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgaW5mbGF0ZSAxLjIuNSBDb3B5cmlnaHQgMTk5NS0yMDEwIE1hcmsgQWRsZXIgIjsKKyAgICIgaW5mbGF0ZSAxLjIuOCBDb3B5cmlnaHQgMTk5NS0yMDEzIE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAzNSwgNDMsIDUxLCA1OSwgNjcsIDgzLCA5OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OCwgMCwgMH07CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxleHRbMzFdID0geyAvKiBMZW5ndGggY29kZXMgMjU3Li4yODUgZXh0cmEgKi8KICAgICAgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE3LCAxNywgMTgsIDE4LCAxOCwgMTgsCi0gICAgICAgIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3MywgMTk1fTsKKyAgICAgICAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDcyLCA3OH07CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRiYXNlWzMyXSA9IHsgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgYmFzZSAqLwogICAgICAgICAxLCAyLCAzLCA0LCA1LCA3LCA5LCAxMywgMTcsIDI1LCAzMywgNDksIDY1LCA5NywgMTI5LCAxOTMsCiAgICAgICAgIDI1NywgMzg1LCA1MTMsIDc2OSwgMTAyNSwgMTUzNywgMjA0OSwgMzA3MywgNDA5NywgNjE0NSwKQEAgLTIwOCw4ICsyMDgsOCBAQAogICAgIG1hc2sgPSB1c2VkIC0gMTsgICAgICAgICAgICAvKiBtYXNrIGZvciBjb21wYXJpbmcgbG93ICovCiAKICAgICAvKiBjaGVjayBhdmFpbGFibGUgdGFibGUgc3BhY2UgKi8KLSAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID49IEVOT1VHSF9MRU5TKSB8fAotICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID49IEVOT1VHSF9ESVNUUykpCisgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fAorICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAvKiBwcm9jZXNzIGFsbCBjb2RlcyBhbmQgbWFrZSB0YWJsZSBlbnRyaWVzICovCkBAIC0yNzcsOCArMjc3LDggQEAKIAogICAgICAgICAgICAgLyogY2hlY2sgZm9yIGVub3VnaCBzcGFjZSAqLwogICAgICAgICAgICAgdXNlZCArPSAxVSA8PCBjdXJyOwotICAgICAgICAgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+PSBFTk9VR0hfTEVOUykgfHwKLSAgICAgICAgICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID49IEVOT1VHSF9ESVNUUykpCisgICAgICAgICAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMpIHx8CisgICAgICAgICAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgICAgIC8qIHBvaW50IGVudHJ5IGluIHJvb3QgdGFibGUgdG8gc3ViLXRhYmxlICovCkBAIC0yODksMzggKzI4OSwxNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoKLSAgICAgICBGaWxsIGluIHJlc3Qgb2YgdGFibGUgZm9yIGluY29tcGxldGUgY29kZXMuICBUaGlzIGxvb3AgaXMgc2ltaWxhciB0byB0aGUKLSAgICAgICBsb29wIGFib3ZlIGluIGluY3JlbWVudGluZyBodWZmIGZvciB0YWJsZSBpbmRpY2VzLiAgSXQgaXMgYXNzdW1lZCB0aGF0Ci0gICAgICAgbGVuIGlzIGVxdWFsIHRvIGN1cnIgKyBkcm9wLCBzbyB0aGVyZSBpcyBubyBsb29wIG5lZWRlZCB0byBpbmNyZW1lbnQKLSAgICAgICB0aHJvdWdoIGhpZ2ggaW5kZXggYml0cy4gIFdoZW4gdGhlIGN1cnJlbnQgc3ViLXRhYmxlIGlzIGZpbGxlZCwgdGhlIGxvb3AKLSAgICAgICBkcm9wcyBiYWNrIHRvIHRoZSByb290IHRhYmxlIHRvIGZpbGwgaW4gYW55IHJlbWFpbmluZyBlbnRyaWVzIHRoZXJlLgotICAgICAqLwotICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcik2NDsgICAgICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqLwotICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKLSAgICBoZXJlLnZhbCA9ICh1bnNpZ25lZCBzaG9ydCkwOwotICAgIHdoaWxlIChodWZmICE9IDApIHsKLSAgICAgICAgLyogd2hlbiBkb25lIHdpdGggc3ViLXRhYmxlLCBkcm9wIGJhY2sgdG8gcm9vdCB0YWJsZSAqLwotICAgICAgICBpZiAoZHJvcCAhPSAwICYmIChodWZmICYgbWFzaykgIT0gbG93KSB7Ci0gICAgICAgICAgICBkcm9wID0gMDsKLSAgICAgICAgICAgIGxlbiA9IHJvb3Q7Ci0gICAgICAgICAgICBuZXh0ID0gKnRhYmxlOwotICAgICAgICAgICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpbGVuOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogcHV0IGludmFsaWQgY29kZSBtYXJrZXIgaW4gdGFibGUgKi8KLSAgICAgICAgbmV4dFtodWZmID4+IGRyb3BdID0gaGVyZTsKLQotICAgICAgICAvKiBiYWNrd2FyZHMgaW5jcmVtZW50IHRoZSBsZW4tYml0IGNvZGUgaHVmZiAqLwotICAgICAgICBpbmNyID0gMVUgPDwgKGxlbiAtIDEpOwotICAgICAgICB3aGlsZSAoaHVmZiAmIGluY3IpCi0gICAgICAgICAgICBpbmNyID4+PSAxOwotICAgICAgICBpZiAoaW5jciAhPSAwKSB7Ci0gICAgICAgICAgICBodWZmICY9IGluY3IgLSAxOwotICAgICAgICAgICAgaHVmZiArPSBpbmNyOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGh1ZmYgPSAwOworICAgIC8qIGZpbGwgaW4gcmVtYWluaW5nIHRhYmxlIGVudHJ5IGlmIGNvZGUgaXMgaW5jb21wbGV0ZSAoZ3VhcmFudGVlZCB0byBoYXZlCisgICAgICAgYXQgbW9zdCBvbmUgcmVtYWluaW5nIGVudHJ5LCBzaW5jZSBpZiB0aGUgY29kZSBpcyBpbmNvbXBsZXRlLCB0aGUKKyAgICAgICBtYXhpbXVtIGNvZGUgbGVuZ3RoIHRoYXQgd2FzIGFsbG93ZWQgdG8gZ2V0IHRoaXMgZmFyIGlzIG9uZSBiaXQpICovCisgICAgaWYgKGh1ZmYgIT0gMCkgeworICAgICAgICBoZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqLworICAgICAgICBoZXJlLmJpdHMgPSAodW5zaWduZWQgY2hhcikobGVuIC0gZHJvcCk7CisgICAgICAgIGhlcmUudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7CisgICAgICAgIG5leHRbaHVmZl0gPSBoZXJlOwogICAgIH0KIAogICAgIC8qIHNldCByZXR1cm4gcGFyYW1ldGVycyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmggYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaAppbmRleCAyNDIzMGM1Li5iYWE1M2EwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaAorKysgYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaApAQCAtNDEsNyArNDEsNyBAQAogICAgZXhhbXBsZXMvZW5vdWdoLmMgZm91bmQgaW4gdGhlIHpsaWIgZGlzdHJpYnR1dGlvbi4gIFRoZSBhcmd1bWVudHMgdG8gdGhhdAogICAgcHJvZ3JhbSBhcmUgdGhlIG51bWJlciBvZiBzeW1ib2xzLCB0aGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUsIGFuZCB0aGUKICAgIG1heGltdW0gYml0IGxlbmd0aCBvZiBhIGNvZGUuICAiZW5vdWdoIDI4NiA5IDE1IiBmb3IgbGl0ZXJhbC9sZW5ndGggY29kZXMKLSAgIHJldHVybnMgODUyLCBhbmQgImVub3VnaCAzMCA2IDE1IiBmb3IgZGlzdGFuY2UgY29kZXMgcmV0dXJucyA1OTIuCisgICByZXR1cm5zIHJldHVybnMgODUyLCBhbmQgImVub3VnaCAzMCA2IDE1IiBmb3IgZGlzdGFuY2UgY29kZXMgcmV0dXJucyA1OTIuCiAgICBUaGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUgKDkgb3IgNikgaXMgZm91bmQgaW4gdGhlIGZpZnRoIGFyZ3VtZW50IG9mIHRoZQogICAgaW5mbGF0ZV90YWJsZSgpIGNhbGxzIGluIGluZmxhdGUuYyBhbmQgaW5mYmFjay5jLiAgSWYgdGhlIHJvb3QgdGFibGUgc2l6ZSBpcwogICAgY2hhbmdlZCwgdGhlbiB0aGVzZSBtYXhpbXVtIHNpemVzIHdvdWxkIGJlIG5lZWQgdG8gYmUgcmVjYWxjdWxhdGVkIGFuZApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbSBiL01vZHVsZXMvemxpYi9tYWtlX3Ztcy5jb20KaW5kZXggNjU3NjQ5MC4uNjVlOWQwYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbQorKysgYi9Nb2R1bGVzL3psaWIvbWFrZV92bXMuY29tCkBAIC0zLDcgKzMsNyBAQAogJCEKICQhIEluIGNhc2Ugb2YgcHJvYmxlbXMgd2l0aCB0aGUgaW5zdGFsbCB5b3UgbWlnaHQgY29udGFjdCBtZSBhdAogJCEgemluc2VyQHppbnNlci5uby1pcC5pbmZvKHByZWZlcnJlZCkgb3IKLSQhIHppbnNlckBzeXNkZXYuZGV1dHNjaGUtYm9lcnNlLmNvbSAod29yaykKKyQhIG1hcnRpbi56aW5zZXJAZXVyZXhjaGFuZ2UuY29tICh3b3JrKQogJCEKICQhIE1ha2UgcHJvY2VkdXJlIGhpc3RvcnkgZm9yIFpsaWIKICQhCkBAIC0xNCw5ICsxNCwxNiBAQAogJCEgMC4wMyAyMDA5MTIyNCBBZGQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZSBjaGVjawogJCEgMC4wNCAyMDEwMDExMCBBZGQgbmV3IGd6Y2xvc2UsIGd6bGliLCBnenJlYWQsIGd6d3JpdGUKICQhIDAuMDUgMjAxMDAyMjEgRXhjaGFuZ2UgemxpYmRlZnMuaCBieSB6Y29uZi5oLmluCiskISAwLjA2IDIwMTIwMTExIEZpeCBtaXNzaW5nIGFtaXNzX2VyciwgdXBkYXRlIHpjb25mX2guaW4sIGZpeCBuZXcgZXhtcGxlcworJCEgICAgICAgICAgICAgICBzdWJkaXIgcGF0aCwgdXBkYXRlIG1vZHVsZSBzZWFyY2ggaW4gbWFrZWZpbGUuaW4KKyQhIDAuMDcgMjAxMjAxMTUgVHJpZ2dlcmVkIGJ5IHdvcmsgZG9uZSBieSBBbGV4ZXkgQ2h1cGFoaW4gY29tcGxldGx5IHJlZGVzaWduZWQKKyQhICAgICAgICAgICAgICAgc2hhcmVkIGltYWdlIGNyZWF0aW9uCiskISAwLjA4IDIwMTIwMjE5IE1ha2UgaXQgd29yayBvbiBWQVggYWdhaW4sIHByZS1sb2FkIG1pc3Npbmcgc3ltYm9scyB0byBzaGFyZWQKKyQhICAgICAgICAgICAgICAgaW1hZ2UKKyQhIDAuMDkgMjAxMjAzMDUgU01TLiAgUDEgc2V0cyBidWlsZGVyICgiTU1LIiwgIk1NUyIsICIgIiAoYnVpbHQtaW4pKS4KKyQhICAgICAgICAgICAgICAgIiIgLT4gYXV0b21hdGljLCBwcmVmZXJlbmNlOiBNTUssIE1NUywgYnVpbHQtaW4uCiAkIQogJCBvbiBlcnJvciB0aGVuIGdvdG8gZXJyX2V4aXQKLSQgc2V0IHByb2MvcGFyc2U9ZXh0CiAkIQogJCB0cnVlICA9IDEKICQgZmFsc2UgPSAwCkBAIC0zMiwzMSArMzksNDMgQEAKICQhCiAkISBTZXR1cCB2YXJpYWJsZXMgaG9sZGluZyAiY29uZmlnIiBpbmZvcm1hdGlvbgogJCEKLSQgTWFrZSAgICA9ICIiCiskIE1ha2UgICAgPSAiJydwMSciCiAkIG5hbWUgICAgID0gIlpsaWIiCiAkIHZlcnNpb24gID0gIj8uPy4/IgogJCB2X3N0cmluZyA9ICJaTElCX1ZFUlNJT04iCiAkIHZfZmlsZSAgID0gInpsaWIuaCIKLSQgY2NvcHQgICA9ICIiCiskIGNjb3B0ICAgPSAiL2luY2x1ZGUgPSBbXSIKICQgbG9wdHMgICA9ICIiCiAkIGRuc3JsICAgPSAiIgotJCBhY29uZl9pbl9maWxlID0gInpjb25mLmguaW4jemNvbmYuaF9pbiIKKyQgYWNvbmZfaW5fZmlsZSA9ICJ6Y29uZi5oLmluI3pjb25mLmhfaW4jemNvbmZfaC5pbiIKICQgY29uZl9jaGVja19zdHJpbmcgPSAiIgogJCBsaW5rb25seSA9IGZhbHNlCiAkIG9wdGZpbGUgID0gbmFtZSArICIub3B0IgorJCBtYXBmaWxlICA9IG5hbWUgKyAiLm1hcCIKICQgbGliZGVmcyAgPSAiIgorJCB2YXggICAgICA9IGYkZ2V0c3lpKCJIV19NT0RFTCIpLmx0LjEwMjQKICQgYXhwICAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5nZS4xMDI0IC5hbmQuIGYkZ2V0c3lpKCJIV19NT0RFTCIpLmx0LjQwOTYKKyQgaWE2NCAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5nZS40MDk2CiAkIQotJCB3aG9hbWkgPSBmJHBhcnNlKGYkZW52aW9ybm1lbnQoIlByb2NlZHVyZSIpLCwsLCJOT19DT05DRUFMIikKKyQhIDIwMTItMDMtMDUgU01TLgorJCEgV2h5IGlzIHRoaXMgbmVlZGVkPyAgQW5kIGlmIGl0IGlzIG5lZWRlZCwgd2h5IG5vdCBzaW1wbHkgIi5ub3QuIHZheCI/CiskIQorJCEhISBpZiBheHAgLm9yLiBpYTY0IHRoZW4gIHNldCBwcm9jL3BhcnNlPWV4dGVuZGVkCiskIQorJCB3aG9hbWkgPSBmJHBhcnNlKGYkZW52aXJvbm1lbnQoIlByb2NlZHVyZSIpLCwsLCJOT19DT05DRUFMIikKICQgbXlkZWYgID0gRiRwYXJzZSh3aG9hbWksLCwiREVWSUNFIikKICQgbXlkaXIgID0gZiRwYXJzZSh3aG9hbWksLCwiRElSRUNUT1JZIikgLSAiXVsiCiAkIG15cHJvYyA9IGYkcGFyc2Uod2hvYW1pLCwsIk5hbWUiKSArIGYkcGFyc2Uod2hvYW1pLCwsInR5cGUiKQogJCEKICQhIENoZWNrIGZvciBNTUsvTU1TCiAkIQotJCBJZiBGJFNlYXJjaCAoIlN5cyRTeXN0ZW06TU1TLkVYRSIpIC5uZXMuICIiIFRoZW4gTWFrZSA9ICJNTVMiCi0kIElmIEYkVHlwZSAoTU1LKSAuZXFzLiAiU1RSSU5HIiBUaGVuIE1ha2UgPSAiTU1LIgotJCEKKyQgaWYgKE1ha2UgLmVxcy4gIiIpCiskIHRoZW4KKyQgICBJZiBGJFNlYXJjaCAoIlN5cyRTeXN0ZW06TU1TLkVYRSIpIC5uZXMuICIiIFRoZW4gTWFrZSA9ICJNTVMiCiskICAgSWYgRiRUeXBlIChNTUspIC5lcXMuICJTVFJJTkciIFRoZW4gTWFrZSA9ICJNTUsiCiskIGVsc2UKKyQgICBNYWtlID0gZiRlZGl0KCBNYWtlLCAidHJpbSIpCiskIGVuZGlmCiAkIQogJCBnb3N1YiBmaW5kX3ZlcnNpb24KICQhCkBAIC02OSw2ICs4OCw3IEBACiAkIQogJCBnb3N1YiBjaGVja19jb21waWxlcgogJCBjbG9zZSB0b3B0CiskIGNsb3NlIG9wdGYKICQhCiAkIGlmIGl0c19kZWNjCiAkIHRoZW4KQEAgLTgzLDYgKzEwMywxNSBAQAogJCAgICAgICBkZWZpbmUgc3lzIGRlY2MkbGlicmFyeV9pbmNsdWRlOgogJCAgICAgZW5kaWYKICQgICBlbmRpZgorJCEKKyQhIDIwMTItMDMtMDUgU01TLgorJCEgV2h5IC9OQU1FUyA9IEFTX0lTPyAgV2h5IG5vdCBzaW1wbHkgIi5ub3QuIHZheCI/ICBBbmQgd2h5IG5vdCBvbiBWQVg/CiskIQorJCAgIGlmIGF4cCAub3IuIGlhNjQKKyQgICB0aGVuCiskICAgICAgIGNjb3B0ID0gY2NvcHQgKyAiL25hbWU9YXNfaXMvb3B0PShpbmxpbmU9c3BlZWQpIgorJCAgICAgICBzX2Nhc2UgPSB0cnVlCiskICAgZW5kaWYKICQgZW5kaWYKICQgaWYgaXRzX3ZheGMgLm9yLiBpdHNfZ251YwogJCB0aGVuCkBAIC0xMjIsMTUgKzE1MSwyMCBAQAogJCBlbmRpZgogJCBnb3RvIGFjb25mX2xvb3AKICRBQ09ORl9FWElUOgorJCB3cml0ZSBhY29uZiAiIgorJCB3cml0ZSBhY29uZiAiLyogVk1TIHNwZWNpZmljcyBhZGRlZCBieSBtYWtlX3Ztcy5jb206ICovIgogJCB3cml0ZSBhY29uZiAiI2RlZmluZSBWTVMgMSIKICQgd3JpdGUgYWNvbmYgIiNpbmNsdWRlIDx1bmlzdGQuaD4iCiAkIHdyaXRlIGFjb25mICIjaW5jbHVkZSA8dW5peGlvLmg+IgogJCB3cml0ZSBhY29uZiAiI2lmZGVmIF9MQVJHRUZJTEUiCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIG9mZjY0X3QgX19vZmY2NF90IgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmb3BlbjY0IGZvcGVuIgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmc2Vla282NCBmc2Vla28iCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGxzZWVrNjQgbHNlZWsiCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGZ0ZWxsbzY0IGZ0ZWxsIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgb2ZmNjRfdCBfX29mZjY0X3QiCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBmb3BlbjY0IGZvcGVuIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgZnNlZWtvNjQgZnNlZWtvIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgbHNlZWs2NCBsc2VlayIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIGZ0ZWxsbzY0IGZ0ZWxsIgorJCB3cml0ZSBhY29uZiAiI2VuZGlmIgorJCB3cml0ZSBhY29uZiAiI2lmICFkZWZpbmVkKCBfX1ZBWCkgJiYgKF9fQ1JUTF9WRVIgPj0gNzAzMTIwMDApIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgSEFWRV9WU05QUklOVEYiCiAkIHdyaXRlIGFjb25mICIjZW5kaWYiCiAkIGNsb3NlIGFjb25mX2luCiAkIGNsb3NlIGFjb25mCkBAIC0xMzksOCArMTczLDkgQEAKICQhCiAkIHdyaXRlIHN5cyRvdXRwdXQgIkNvbXBpbGluZyBabGliIHNvdXJjZXMgLi4uIgogJCBpZiBtYWtlLmVxcy4iIgotJCAgdGhlbgotJCAgIGRlbGUgZXhhbXBsZS5vYmo7KixtaW5pZ3ppcC5vYmo7KgorJCB0aGVuCiskICAgaWYgKGYkc2VhcmNoKCAiZXhhbXBsZS5vYmo7KiIpIC5uZXMuICIiKSB0aGVuIGRlbGV0ZSBleGFtcGxlLm9iajsqCiskICAgaWYgKGYkc2VhcmNoKCAibWluaWd6aXAub2JqOyoiKSAubmVzLiAiIikgdGhlbiBkZWxldGUgbWluaWd6aXAub2JqOyoKICQgICBDQUxMIE1BS0UgYWRsZXIzMi5PQkogIkNDICcnQ0NPUFQnIGFkbGVyMzIiIC0KICAgICAgICAgICAgICAgICBhZGxlcjMyLmMgemxpYi5oIHpjb25mLmgKICQgICBDQUxMIE1BS0UgY29tcHJlc3MuT0JKICJDQyAnJ0NDT1BUJyBjb21wcmVzcyIgLQpAQCAtMTc0LDQxICsyMDksMzQgQEAKICQgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBabGliIC4uLiIKICQgICBDQUxMIE1BS0UgbGliei5PTEIgImxpYi9jcmVhIGxpYnoub2xiICoub2JqIiAqLk9CSgogJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkJ1aWxkaW5nIGV4YW1wbGUuLi4iCi0kICAgQ0FMTCBNQUtFIGV4YW1wbGUuT0JKICJDQyAnJ0NDT1BUJyBleGFtcGxlIiAtCi0gICAgICAgICAgICAgICAgZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIGV4YW1wbGUuT0JKICJDQyAnJ0NDT1BUJyBbLnRlc3RdZXhhbXBsZSIgLQorICAgICAgICAgICAgICAgIFsudGVzdF1leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKICQgICBjYWxsIG1ha2UgZXhhbXBsZS5leGUgIkxJTksgZXhhbXBsZSxsaWJ6Lm9sYi9saWIiIGV4YW1wbGUub2JqIGxpYnoub2xiCi0kICAgaWYgZiRzZWFyY2goIngxMXZtczp4dm1zdXRpbHMub2xiIikgLm5lcy4gIiIKLSQgICB0aGVuCi0kICAgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBtaW5pZ3ppcC4uLiIKLSQgICAgIENBTEwgTUFLRSBtaW5pZ3ppcC5PQkogIkNDICcnQ0NPUFQnIG1pbmlnemlwIiAtCi0gICAgICAgICAgICAgICAgbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAotJCAgICAgY2FsbCBtYWtlIG1pbmlnemlwLmV4ZSAtCi0gICAgICAgICAgICAgICAgIkxJTksgbWluaWd6aXAsbGliei5vbGIvbGliLHgxMXZtczp4dm1zdXRpbHMub2xiL2xpYiIgLQotICAgICAgICAgICAgICAgIG1pbmlnemlwLm9iaiBsaWJ6Lm9sYgotJCAgIGVuZGlmCi0kICBlbHNlCiskICAgd3JpdGUgc3lzJG91dHB1dCAiQnVpbGRpbmcgbWluaWd6aXAuLi4iCiskICAgQ0FMTCBNQUtFIG1pbmlnemlwLk9CSiAiQ0MgJydDQ09QVCcgWy50ZXN0XW1pbmlnemlwIiAtCisgICAgICAgICAgICAgIFsudGVzdF1taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCiskICAgY2FsbCBtYWtlIG1pbmlnemlwLmV4ZSAtCisgICAgICAgICAgICAgICJMSU5LIG1pbmlnemlwLGxpYnoub2xiL2xpYiIgLQorICAgICAgICAgICAgICBtaW5pZ3ppcC5vYmogbGliei5vbGIKKyQgZWxzZQogJCAgIGdvc3ViIGNyZWFfbW1zCiAkICAgd3JpdGUgc3lzJG91dHB1dCAiTWFrZSAnJ25hbWUnICcndmVyc2lvbicgd2l0aCAnJ01ha2UnICIKICQgICAnbWFrZScKLSQgIGVuZGlmCi0kIQotJCEgQWxwaGEgZ2V0cyBhIHNoYXJlYWJsZSBpbWFnZQotJCEKLSQgSWYgYXhwCi0kIFRoZW4KLSQgICBnb3N1YiBjcmVhX29saXN0Ci0kICAgd3JpdGUgc3lzJG91dHB1dCAiQ3JlYXRpbmcgbGlienNoci5leGUiCi0kICAgY2FsbCBhbmFsX29ial9heHAgbW9kdWxlcy5vcHQgX2xpbmsub3B0Ci0kICAgaWYgc19jYXNlCi0kICAgdGhlbgotJCAgICAgIG9wZW4vYXBwZW5kIG9wdGYgbW9kdWxlcy5vcHQKLSQgICAgICB3cml0ZSBvcHRmICJjYXNlX3NlbnNpdGl2ZT1ZRVMiCi0kICAgICAgY2xvc2Ugb3B0ZgotJCAgIGVuZGlmCi0kICAgTElOS18nbG9wdHMnL1NIQVJFPWxpYnpzaHIuZXhlIG1vZHVsZXMub3B0L29wdCxfbGluay5vcHQvb3B0CiAkIGVuZGlmCiskIQorJCEgQ3JlYXRlIHNoYXJlYWJsZSBpbWFnZQorJCEKKyQgZ29zdWIgY3JlYV9vbGlzdAorJCB3cml0ZSBzeXMkb3V0cHV0ICJDcmVhdGluZyBsaWJ6c2hyLmV4ZSIKKyQgY2FsbCBtYXBfMl9zaG9wdCAnbWFwZmlsZScgJ29wdGZpbGUnCiskIExJTktfJ2xvcHRzJy9TSEFSRT1saWJ6c2hyLmV4ZSBtb2R1bGVzLm9wdC9vcHQsJ29wdGZpbGUnL29wdAogJCB3cml0ZSBzeXMkb3V0cHV0ICJabGliIGJ1aWxkIGNvbXBsZXRlZCIKKyQgZGVsZXRlL25vbG9nIHRtcC5vcHQ7KgogJCBleGl0CiskQU1JU1NfRVJSOgorJCB3cml0ZSBzeXMkb3V0cHV0ICJObyBzb3VyY2UgZm9yIGNvbmZpZy5oaW4gZm91bmQuIgorJCB3cml0ZSBzeXMkb3V0cHV0ICJUcmllZCBhbnkgb2YgJydhY29uZl9pbl9maWxlJyIKKyQgZ290byBlcnJfZXhpdAogJENDX0VSUjoKICQgd3JpdGUgc3lzJG91dHB1dCAiQyBjb21waWxlciByZXF1aXJlZCB0byBidWlsZCAnJ25hbWUnIgogJCBnb3RvIGVycl9leGl0CkBAIC0yMTYsNyArMjQ0LDYgQEAKICQgc2V0IG1lc3NhZ2UvZmFjaWwvaWRlbnQvc2V2ZXIvdGV4dAogJCBjbG9zZS9ub2xvZyBvcHRmCiAkIGNsb3NlL25vbG9nIHRvcHQKLSQgY2xvc2Uvbm9sb2cgY29uZl9oaW4KICQgY2xvc2Uvbm9sb2cgYWNvbmZfaW4KICQgY2xvc2Uvbm9sb2cgYWNvbmYKICQgY2xvc2Uvbm9sb2cgb3V0CkBAIC0zOTcsNyArNDI0LDcgQEAKICQgZGVjawogIyBkZXNjcmlwLm1tczogTU1TIGRlc2NyaXB0aW9uIGZpbGUgZm9yIGJ1aWxkaW5nIHpsaWIgb24gVk1TCiAjIHdyaXR0ZW4gYnkgTWFydGluIFAuSi4gWmluc2VyCi0jIDx6aW5zZXJAemluc2VyLm5vLWlwLmluZm8gb3Igemluc2VyQHN5c2Rldi5kZXV0c2NoZS1ib2Vyc2UuY29tPgorIyA8emluc2VyQHppbnNlci5uby1pcC5pbmZvIG9yIG1hcnRpbi56aW5zZXJAZXVyZXhjaGFuZ2UuY29tPgogCiBPQkpTID0gYWRsZXIzMi5vYmosIGNvbXByZXNzLm9iaiwgY3JjMzIub2JqLCBnemNsb3NlLm9iaiwgZ3psaWIub2JqXAogICAgICAgIGd6cmVhZC5vYmosIGd6d3JpdGUub2JqLCB1bmNvbXByLm9iaiwgaW5mYmFjay5vYmpcCkBAIC00MDcsMTAgKzQzNCw5IEBACiAkIGVvZAogJCB3cml0ZSBvdXQgIkNGTEFHUz0iLCBjY29wdAogJCB3cml0ZSBvdXQgIkxPUFRTPSIsIGxvcHRzCiskIHdyaXRlIG91dCAiYWxsIDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlIGxpYnoub2xiIgogJCBjb3B5IHN5cyRpbnB1dDogb3V0CiAkIGRlY2sKLQotYWxsIDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlIGxpYnoub2xiCiAgICAgICAgIEAgd3JpdGUgc3lzJG91dHB1dCAiIEV4YW1wbGUgYXBwbGljYXRpb25zIGF2YWlsYWJsZSIKIAogbGliei5vbGIgOiBsaWJ6Lm9sYigkKE9CSlMpKQpAQCAtNDIwLDcgKzQ0Niw3IEBACiAgICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgZXhhbXBsZSxsaWJ6Lm9sYi9saWIKIAogbWluaWd6aXAuZXhlIDogbWluaWd6aXAub2JqIGxpYnoub2xiCi0gICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgbWluaWd6aXAsbGliei5vbGIvbGliLHgxMXZtczp4dm1zdXRpbHMub2xiL2xpYgorICAgICAgICAgICAgICBsaW5rICQoTE9QVFMpIG1pbmlnemlwLGxpYnoub2xiL2xpYgogCiBjbGVhbiA6CiAJZGVsZXRlICoub2JqOyosbGliei5vbGI7KiwqLm9wdDsqLCouZXhlOyoKQEAgLTQzMSw3ICs0NTcsNyBAQAogY29tcHJlc3Mub2JqIDogY29tcHJlc3MuYyB6bGliLmggemNvbmYuaAogY3JjMzIub2JqICAgIDogY3JjMzIuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiBkZWZsYXRlLm9iaiAgOiBkZWZsYXRlLmMgZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKLWV4YW1wbGUub2JqICA6IGV4YW1wbGUuYyB6bGliLmggemNvbmYuaAorZXhhbXBsZS5vYmogIDogWy50ZXN0XWV4YW1wbGUuYyB6bGliLmggemNvbmYuaAogZ3pjbG9zZS5vYmogIDogZ3pjbG9zZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGd6bGliLm9iaiAgICA6IGd6bGliLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogZ3pyZWFkLm9iaiAgIDogZ3pyZWFkLmMgenV0aWwuaCB6bGliLmggemNvbmYuaApAQCAtNDM5LDcgKzQ2NSw3IEBACiBpbmZmYXN0Lm9iaiAgOiBpbmZmYXN0LmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmZhc3QuaAogaW5mbGF0ZS5vYmogIDogaW5mbGF0ZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGluZnRyZWVzLm9iaiA6IGluZnRyZWVzLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCi1taW5pZ3ppcC5vYmogOiBtaW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCittaW5pZ3ppcC5vYmogOiBbLnRlc3RdbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAogdHJlZXMub2JqICAgIDogdHJlZXMuYyBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAogdW5jb21wci5vYmogIDogdW5jb21wci5jIHpsaWIuaCB6Y29uZi5oCiB6dXRpbC5vYmogICAgOiB6dXRpbC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKQEAgLTQ1NSwxMyArNDgxLDE4IEBACiAkQ1JFQV9PTElTVDoKICQgb3Blbi9yZWFkIG1pbiBtYWtlZmlsZS5pbgogJCBvcGVuL3dyaXRlIG1vZCBtb2R1bGVzLm9wdAotJCBzcmNfY2hlY2sgPSAiT0JKQyA9IgorJCBzcmNfY2hlY2tfbGlzdCA9ICJPQkpaID0jT0JKRyA9IgogJE1STE9PUDoKICQgcmVhZC9lbmQ9bXJkb25lIG1pbiByZWMKLSQgaWYgKGYkZXh0cmFjdCgwLDYscmVjKSAubmVzLiBzcmNfY2hlY2spIHRoZW4gZ290byBtcmxvb3AKKyQgaSA9IDAKKyRTUkNfQ0hFQ0tfTE9PUDoKKyQgc3JjX2NoZWNrID0gZiRlbGVtZW50KGksICIjIiwgc3JjX2NoZWNrX2xpc3QpCiskIGkgPSBpKzEKKyQgaWYgc3JjX2NoZWNrIC5lcXMuICIjIiB0aGVuIGdvdG8gbXJsb29wCiskIGlmIChmJGV4dHJhY3QoMCw2LHJlYykgLm5lcy4gc3JjX2NoZWNrKSB0aGVuIGdvdG8gc3JjX2NoZWNrX2xvb3AKICQgcmVjID0gcmVjIC0gc3JjX2NoZWNrCiAkIGdvc3ViIGV4dHJhX2ZpbG5hbQotJCBpZiAoZiRlbGVtZW50KDEsIlwiLHJlYykgLmVxcy4gIlwiKSB0aGVuIGdvdG8gbXJkb25lCiskIGlmIChmJGVsZW1lbnQoMSwiXCIscmVjKSAuZXFzLiAiXCIpIHRoZW4gZ290byBtcmxvb3AKICRNUlNMT09QOgogJCByZWFkL2VuZD1tcmRvbmUgbWluIHJlYwogJCBnb3N1YiBleHRyYV9maWxuYW0KQEAgLTY3MiwxMjQgKzcwMyw2IEBACiAkIHJldHVybgogJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQhCi0kISBBbmFseXplIE9iamVjdCBmaWxlcyBmb3IgT3BlblZNUyBBWFAgdG8gZXh0cmFjdCBQcm9jZWR1cmUgYW5kIERhdGEKLSQhIGluZm9ybWF0aW9uIHRvIGJ1aWxkIGEgc3ltYm9sIHZlY3RvciBmb3IgYSBzaGFyZWFibGUgaW1hZ2UKLSQhIEFsbCB0aGUgImJyYWlucyIgb2YgdGhpcyBsb2dpYyB3YXMgc3VnZ2VzdGVkIGJ5IEhhcnRtdXQgQmVja2VyCi0kISAoSGFydG11dC5CZWNrZXJAY29tcGFxLmNvbSkuIEFsbCB0aGUgYnVncyB3ZXJlIGludHJvZHVjZWQgYnkgbWUKLSQhICh6aW5zZXJAemluc2VyLm5vLWlwLmluZm8pLCBzbyBpZiB5b3UgZG8gaGF2ZSBwcm9ibGVtIHJlcG9ydHMgcGxlYXNlIGRvIG5vdAotJCEgYm90aGVyIEhhcnRtdXQvSFAsIGJ1dCBnZXQgaW4gdG91Y2ggd2l0aCBtZQotJCEKLSQhIFZlcnNpb24gaGlzdG9yeQotJCEgMC4wMSAyMDA0MDQwNiBTa2lwIG92ZXIgc2hhcmVhYmxlIGltYWdlcyBpbiBvcHRpb24gZmlsZQotJCEgMC4wMiAyMDA0MTEwOSBGaXggb3B0aW9uIGZpbGUgZm9yIHNoYXJlYWJsZSBpbWFnZXMgd2l0aCBjYXNlX3NlbnNpdGl2ZT1ZRVMKLSQhIDAuMDMgMjAwNTAxMDcgU2tpcCBvdmVyIElkZW50aWZpY2F0aW9uIGxhYmVscyBpbiBvcHRpb24gZmlsZQotJCEgMC4wNCAyMDA2MDExNyBBZGQgdXBwZXJjYXNlIGFsaWFzIHRvIGNvZGUgY29tcGlsZWQgd2l0aCAvbmFtZT1hc19pcwotJCEKLSQgQU5BTF9PQkpfQVhQOiBTdWJyb3V0aW5lCi0kIFYgPSAnRiRWZXJpZnkoMCkKLSQgU0FZIDo9ICJXUklURV8gU1lTJE9VVFBVVCIKLSQKLSQgSUYgRiRTRUFSQ0goIicnUDEnIikgLkVRUy4gIiIKLSQgVEhFTgotJCAgICBTQVkgIkFOQUxfT0JKX0FYUC1FLU5PU1VDSEZJTEU6ICBFcnJvciwgaW5wdXRmaWxlICcncDEnIG5vdCBhdmFpbGFibGUiCi0kICAgIGdvdG8gZXhpdF9hYQotJCBFTkRJRgotJCBJRiAiJydQMiciIC5FUVMuICIiCi0kIFRIRU4KLSQgICAgU0FZICJBTkFMX09CSl9BWFA6ICBFcnJvciwgbm8gb3V0cHV0IGZpbGUgcHJvdmlkZWQiCi0kICAgIGdvdG8gZXhpdF9hYQotJCBFTkRJRgotJAotJCBvcGVuL3JlYWQgaW4gJ3AxCi0kIGNyZWF0ZSBhLnRtcAotJCBvcGVuL2FwcGVuZCBhdG1wIGEudG1wCi0kIGxvb3A6Ci0kIHJlYWQvZW5kPWVuZF9sb29wIGluIGxpbmUKLSQgaWYgZiRsb2NhdGUoIi9TSEFSRSIsZiRlZGl0KGxpbmUsInVwY2FzZSIpKSAubHQuIGYkbGVuZ3RoKGxpbmUpCi0kIHRoZW4KLSQgICB3cml0ZSBzeXMkb3V0cHV0ICJBTkFMX1NLUF9TSFItaS1za2lwc2hhcmUsICcnbGluZSciCi0kICAgZ290byBsb29wCi0kIGVuZGlmCi0kIGlmIGYkbG9jYXRlKCJJREVOVElGSUNBVElPTj0iLGYkZWRpdChsaW5lLCJ1cGNhc2UiKSkgLmx0LiBmJGxlbmd0aChsaW5lKQotJCB0aGVuCi0kICAgd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9PQkpfQVhQLWktaWRlbnQ6IElkZW50aWZpY2F0aW9uICIsIC0KLSAgICAgICAgICAgICAgICAgICAgIGYkZWxlbWVudCgxLCI9IixsaW5lKQotJCAgIGdvdG8gbG9vcAotJCBlbmRpZgotJCBmPSBmJHNlYXJjaChsaW5lKQotJCBpZiBmIC5lcXMuICIiCi0kIHRoZW4KLSQJd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9PQkpfQVhQLXctbm9zdWNoZmlsZSwgJydsaW5lJyIKLSQJZ290byBsb29wCi0kIGVuZGlmCi0kIGRlZmluZS91c2VyIHN5cyRvdXRwdXQgbmw6Ci0kIGRlZmluZS91c2VyIHN5cyRlcnJvciBubDoKLSQgYW5hbC9vYmovZ3NkICdmIC9vdXQ9eC50bXAKLSQgb3Blbi9yZWFkIHh0bXAgeC50bXAKLSQgWExPT1A6Ci0kIHJlYWQvZW5kPWVuZF94bG9vcCB4dG1wIHhsaW5lCi0kIHhsaW5lID0gZiRlZGl0KHhsaW5lLCJjb21wcmVzcyIpCi0kIHdyaXRlIGF0bXAgeGxpbmUKLSQgZ290byB4bG9vcAotJCBFTkRfWExPT1A6Ci0kIGNsb3NlIHh0bXAKLSQgZ290byBsb29wCi0kIGVuZF9sb29wOgotJCBjbG9zZSBpbgotJCBjbG9zZSBhdG1wCi0kIGlmIGYkc2VhcmNoKCJhLnRtcCIpIC5lcXMuICIiIC0KLQl0aGVuICQgZXhpdAotJCAhIGFsbCBnbG9iYWwgZGVmaW5pdGlvbnMKLSQgc2VhcmNoIGEudG1wICJzeW1ib2w6IiwiRUdTWSRWX0RFRiAxIiwiRUdTWSRWX05PUk0gMSIvb3V0PWIudG1wCi0kICEgYWxsIHByb2NlZHVyZXMKLSQgc2VhcmNoIGIudG1wICJFR1NZJFZfTk9STSAxIi93aW5kPSgwLDEpIC9vdXQ9Yy50bXAKLSQgc2VhcmNoIGMudG1wICJzeW1ib2w6Ii9vdXQ9ZC50bXAKLSQgZGVmaW5lL3VzZXIgc3lzJG91dHB1dCBubDoKLSQgZWRpdG8vZWR0L2NvbW1hbmQ9c3lzJGlucHV0IGQudG1wCi1zdWIvc3ltYm9sOiAiL3N5bWJvbF92ZWN0b3I9KC93aG9sZQotc3ViLyIvPVBST0NFRFVSRSkvd2hvbGUKLWV4aXQKLSQgISBhbGwgZGF0YQotJCBzZWFyY2ggYi50bXAgIkVHU1kkVl9ERUYgMSIvd2luZD0oMCwxKSAvb3V0PWUudG1wCi0kIHNlYXJjaCBlLnRtcCAic3ltYm9sOiIvb3V0PWYudG1wCi0kIGRlZmluZS91c2VyIHN5cyRvdXRwdXQgbmw6Ci0kIGVkaXRvL2VkdC9jb21tYW5kPXN5cyRpbnB1dCBmLnRtcAotc3ViL3N5bWJvbDogIi9zeW1ib2xfdmVjdG9yPSgvd2hvbGUKLXN1Yi8iLz1EQVRBKS93aG9sZQotZXhpdAotJCBzb3J0L25vZHVwbCBkLnRtcCxmLnRtcCBnLnRtcAotJCBvcGVuL3JlYWQgcmF3X3ZlY3RvciBnLnRtcAotJCBvcGVuL3dyaXRlIGNhc2VfdmVjdG9yICdwMicKLSQgUkFXTE9PUDoKLSQgcmVhZC9lbmQ9ZW5kX3Jhd2xvb3AgcmF3X3ZlY3RvciByYXdfZWxlbWVudAotJCB3cml0ZSBjYXNlX3ZlY3RvciByYXdfZWxlbWVudAotJCBpZiBmJGxvY2F0ZSgiPVBST0NFRFVSRSkiLHJhd19lbGVtZW50KSAubHQuIGYkbGVuZ3RoKHJhd19lbGVtZW50KQotJCB0aGVuCi0kICAgICBuYW1lID0gZiRlbGVtZW50KDEsIj0iLHJhd19lbGVtZW50KSAtICIoIgotJCAgICAgaWYgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpIC5uZXMuIG5hbWUgdGhlbiAtCi0gICAgICAgICAgd3JpdGUgY2FzZV92ZWN0b3IgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPVBST0NFRFVSRSkiLCAtCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBmJGVkaXQobmFtZSwiVVBDQVNFIiksIG5hbWUpCi0kIGVuZGlmCi0kIGlmIGYkbG9jYXRlKCI9REFUQSkiLHJhd19lbGVtZW50KSAubHQuIGYkbGVuZ3RoKHJhd19lbGVtZW50KQotJCB0aGVuCi0kICAgICBuYW1lID0gZiRlbGVtZW50KDEsIj0iLHJhd19lbGVtZW50KSAtICIoIgotJCAgICAgaWYgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpIC5uZXMuIG5hbWUgdGhlbiAtCi0gICAgICAgICAgd3JpdGUgY2FzZV92ZWN0b3IgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPURBVEEpIiwgLQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpLCBuYW1lKQotJCBlbmRpZgotJCBnb3RvIHJhd2xvb3AKLSQgRU5EX1JBV0xPT1A6Ci0kIGNsb3NlIHJhd192ZWN0b3IKLSQgY2xvc2UgY2FzZV92ZWN0b3IKLSQgZGVsZXRlIGEudG1wOyosYi50bXA7KixjLnRtcDsqLGQudG1wOyosZS50bXA7KixmLnRtcDsqLGcudG1wOyoKLSQgaWYgZiRzZWFyY2goIngudG1wIikgLm5lcy4gIiIgLQotCXRoZW4gJCBkZWxldGUgeC50bXA7KgotJCEKLSQgRVhJVF9BQToKLSQgaWYgViB0aGVuIHNldCB2ZXJpZnkKLSQgZW5kc3Vicm91dGluZQotJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQhCiAkISBXcml0ZSBjb25maWd1cmF0aW9uIHRvIGJvdGggcGVybWFuZW50IGFuZCB0ZW1wb3JhcnkgY29uZmlnIGZpbGUKICQhCiAkISBWZXJzaW9uIGhpc3RvcnkKQEAgLTgwMiwzICs3MTUsMTUzIEBACiAkICBjbG9zZSBjb25maAogJEVORFNVQlJPVVRJTkUKICQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgQW5hbHl6ZSB0aGUgcHJvamVjdCBtYXAgZmlsZSBhbmQgY3JlYXRlIHRoZSBzeW1ib2wgdmVjdG9yIGZvciBhIHNoYXJlYWJsZQorJCEgaW1hZ2UgZnJvbSBpdAorJCEKKyQhIFZlcnNpb24gaGlzdG9yeQorJCEgMC4wMSAyMDEyMDEyOCBGaXJzdCB2ZXJzaW9uCiskISAwLjAyIDIwMTIwMjI2IEFkZCBwcmUtbG9hZCBsb2dpYworJCEKKyQgTUFQXzJfU0hPUFQ6IFN1YnJvdXRpbmUKKyQhCiskIFNBWSA6PSAiV1JJVEVfIFNZUyRPVVRQVVQiCiskIQorJCBJRiBGJFNFQVJDSCgiJydQMSciKSAuRVFTLiAiIgorJCBUSEVOCiskICAgIFNBWSAiTUFQXzJfU0hPUFQtRS1OT1NVQ0hGSUxFOiAgRXJyb3IsIGlucHV0ZmlsZSAnJ3AxJyBub3QgYXZhaWxhYmxlIgorJCAgICBnb3RvIGV4aXRfbTJzCiskIEVORElGCiskIElGICInJ1AyJyIgLkVRUy4gIiIKKyQgVEhFTgorJCAgICBTQVkgIk1BUF8yX1NIT1BUOiAgRXJyb3IsIG5vIG91dHB1dCBmaWxlIHByb3ZpZGVkIgorJCAgICBnb3RvIGV4aXRfbTJzCiskIEVORElGCiskIQorJCBtb2R1bGUxID0gImRlZmxhdGUjZGVmbGF0ZUVuZCNkZWZsYXRlSW5pdF8jZGVmbGF0ZVBhcmFtcyNkZWZsYXRlU2V0RGljdGlvbmFyeSIKKyQgbW9kdWxlMiA9ICJnemNsb3NlI2d6ZXJyb3IjZ3pnZXRjI2d6Z2V0cyNnem9wZW4jZ3pwcmludGYjZ3pwdXRjI2d6cHV0cyNnenJlYWQiCiskIG1vZHVsZTMgPSAiZ3pzZWVrI2d6dGVsbCNpbmZsYXRlI2luZmxhdGVFbmQjaW5mbGF0ZUluaXRfI2luZmxhdGVTZXREaWN0aW9uYXJ5IgorJCBtb2R1bGU0ID0gImluZmxhdGVTeW5jI3VuY29tcHJlc3MjemxpYlZlcnNpb24jY29tcHJlc3MiCiskIG9wZW4vcmVhZCBtYXAgJ3AxCiskIGlmIGF4cCAub3IuIGlhNjQKKyQgdGhlbgorJCAgICAgb3Blbi93cml0ZSBhb3B0IGEub3B0CiskICAgICBvcGVuL3dyaXRlIGJvcHQgYi5vcHQKKyQgICAgIHdyaXRlIGFvcHQgIiBDQVNFX1NFTlNJVElWRT1ZRVMiCiskICAgICB3cml0ZSBib3B0ICJTWU1CT0xfVkVDVE9SPSAoLSIKKyQgICAgIG1vZF9zeW1fbnVtID0gMQorJCBNT0RfU1lNX0xPT1A6CiskICAgICBpZiBmJHR5cGUobW9kdWxlJ21vZF9zeW1fbnVtJykgLm5lcy4gIiIKKyQgICAgIHRoZW4KKyQgICAgICAgICBtb2RfaW4gPSAwCiskIE1PRF9TWU1fSU46CiskICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGVsZW1lbnQobW9kX2luLCAiIyIsIG1vZHVsZSdtb2Rfc3ltX251bScpCiskICAgICAgICAgaWYgc2hhcmVkX3Byb2MgLm5lcy4gIiMiCiskICAgICAgICAgdGhlbgorJCAgICAgICAgICAgICB3cml0ZSBhb3B0IGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1QUk9DRURVUkUpIiwtCisgICAgICAgIAkJICAgICAgIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIiksc2hhcmVkX3Byb2MpCiskICAgICAgICAgICAgIHdyaXRlIGJvcHQgZiRmYW8oIiFBUz1QUk9DRURVUkUsLSIsc2hhcmVkX3Byb2MpCiskICAgICAgICAgICAgIG1vZF9pbiA9IG1vZF9pbiArIDEKKyQgICAgICAgICAgICAgZ290byBtb2Rfc3ltX2luCiskICAgICAgICAgZW5kaWYKKyQgICAgICAgICBtb2Rfc3ltX251bSA9IG1vZF9zeW1fbnVtICsgMQorJCAgICAgICAgIGdvdG8gbW9kX3N5bV9sb29wCiskICAgICBlbmRpZgorJE1BUF9MT09QOgorJCAgICAgcmVhZC9lbmQ9bWFwX2VuZCBtYXAgbGluZQorJCAgICAgaWYgKGYkbG9jYXRlKCJ7IixsaW5lKS5sdC4gZiRsZW5ndGgobGluZSkpIC5vci4gLQorICAgICAgICAgKGYkbG9jYXRlKCJnbG9iYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSkKKyQgICAgIHRoZW4KKyQgICAgICAgICBwcm9jID0gdHJ1ZQorJCAgICAgICAgIGdvdG8gbWFwX2xvb3AKKyQgICAgIGVuZGlmCiskICAgICBpZiBmJGxvY2F0ZSgifSIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICBpZiBmJGxvY2F0ZSgibG9jYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgaWYgcHJvYworJCAgICAgdGhlbgorJCAgICAgICAgIHNoYXJlZF9wcm9jID0gZiRlZGl0KGxpbmUsImNvbGxhcHNlIikKKyQgICAgICAgICBjaG9wX3NlbWkgPSBmJGxvY2F0ZSgiOyIsIHNoYXJlZF9wcm9jKQorJCAgICAgICAgIGlmIGNob3Bfc2VtaSAubHQuIGYkbGVuZ3RoKHNoYXJlZF9wcm9jKSB0aGVuIC0KKyAgICAgICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGV4dHJhY3QoMCwgY2hvcF9zZW1pLCBzaGFyZWRfcHJvYykKKyQgICAgICAgICB3cml0ZSBhb3B0IGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1QUk9DRURVUkUpIiwtCisgICAgICAgIAkJCSBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpLHNoYXJlZF9wcm9jKQorJCAgICAgICAgIHdyaXRlIGJvcHQgZiRmYW8oIiFBUz1QUk9DRURVUkUsLSIsc2hhcmVkX3Byb2MpCiskICAgICBlbmRpZgorJCAgICAgZ290byBtYXBfbG9vcAorJE1BUF9FTkQ6CiskICAgICBjbG9zZS9ub2xvZyBhb3B0CiskICAgICBjbG9zZS9ub2xvZyBib3B0CiskICAgICBvcGVuL2FwcGVuZCBsaWJvcHQgJ3AyJworJCAgICAgb3Blbi9yZWFkIGFvcHQgYS5vcHQKKyQgICAgIG9wZW4vcmVhZCBib3B0IGIub3B0CiskQUxPT1A6CiskICAgICByZWFkL2VuZD1hbG9vcF9lbmQgYW9wdCBsaW5lCiskICAgICB3cml0ZSBsaWJvcHQgbGluZQorJCAgICAgZ290byBhbG9vcAorJEFMT09QX0VORDoKKyQgICAgIGNsb3NlL25vbG9nIGFvcHQKKyQgICAgIHN2ID0gIiIKKyRCTE9PUDoKKyQgICAgIHJlYWQvZW5kPWJsb29wX2VuZCBib3B0IHN2bgorJCAgICAgaWYgKHN2bi5uZXMuIiIpCiskICAgICB0aGVuCiskICAgICAgICBpZiAoc3YubmVzLiIiKSB0aGVuIHdyaXRlIGxpYm9wdCBzdgorJCAgICAgICAgc3YgPSBzdm4KKyQgICAgIGVuZGlmCiskICAgICBnb3RvIGJsb29wCiskQkxPT1BfRU5EOgorJCAgICAgd3JpdGUgbGlib3B0IGYkZXh0cmFjdCgwLGYkbGVuZ3RoKHN2KS0yLHN2KSwgIi0iCiskICAgICB3cml0ZSBsaWJvcHQgIikiCiskICAgICBjbG9zZS9ub2xvZyBib3B0CiskICAgICBkZWxldGUvbm9sb2cvbm9jb25mIGEub3B0OyosYi5vcHQ7KgorJCBlbHNlCiskICAgICBpZiB2YXgKKyQgICAgIHRoZW4KKyQgICAgIG9wZW4vYXBwZW5kIGxpYm9wdCAncDInCiskICAgICBtb2Rfc3ltX251bSA9IDEKKyQgVk1PRF9TWU1fTE9PUDoKKyQgICAgIGlmIGYkdHlwZShtb2R1bGUnbW9kX3N5bV9udW0nKSAubmVzLiAiIgorJCAgICAgdGhlbgorJCAgICAgICAgIG1vZF9pbiA9IDAKKyQgVk1PRF9TWU1fSU46CiskICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGVsZW1lbnQobW9kX2luLCAiIyIsIG1vZHVsZSdtb2Rfc3ltX251bScpCiskICAgICAgICAgaWYgc2hhcmVkX3Byb2MgLm5lcy4gIiMiCiskICAgICAgICAgdGhlbgorJCAgICAgCSAgICAgIHdyaXRlIGxpYm9wdCBmJGZhbygiVU5JVkVSU0FMPSFBUyIsLQorICAgICAgCSAgCQkJICAgICBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpKQorJCAgICAgICAgICAgICBtb2RfaW4gPSBtb2RfaW4gKyAxCiskICAgICAgICAgICAgIGdvdG8gdm1vZF9zeW1faW4KKyQgICAgICAgICBlbmRpZgorJCAgICAgICAgIG1vZF9zeW1fbnVtID0gbW9kX3N5bV9udW0gKyAxCiskICAgICAgICAgZ290byB2bW9kX3N5bV9sb29wCiskICAgICBlbmRpZgorJFZNQVBfTE9PUDoKKyQgICAgIAkgIHJlYWQvZW5kPXZtYXBfZW5kIG1hcCBsaW5lCiskICAgICAJICBpZiAoZiRsb2NhdGUoInsiLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSkgLm9yLiAtCisgICAJICAgICAgKGYkbG9jYXRlKCJnbG9iYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSkKKyQgICAgIAkgIHRoZW4KKyQgICAgIAkgICAgICBwcm9jID0gdHJ1ZQorJCAgICAgCSAgICAgIGdvdG8gdm1hcF9sb29wCiskICAgICAJICBlbmRpZgorJCAgICAgCSAgaWYgZiRsb2NhdGUoIn0iLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgCSAgaWYgZiRsb2NhdGUoImxvY2FsOiIsIGxpbmUpIC5sdC4gZiRsZW5ndGgobGluZSkgdGhlbiBwcm9jID0gZmFsc2UKKyQgICAgIAkgIGlmIHByb2MKKyQgICAgIAkgIHRoZW4KKyQgICAgIAkgICAgICBzaGFyZWRfcHJvYyA9IGYkZWRpdChsaW5lLCJjb2xsYXBzZSIpCiskICAgICAJICAgICAgY2hvcF9zZW1pID0gZiRsb2NhdGUoIjsiLCBzaGFyZWRfcHJvYykKKyQgICAgIAkgICAgICBpZiBjaG9wX3NlbWkgLmx0LiBmJGxlbmd0aChzaGFyZWRfcHJvYykgdGhlbiAtCisgICAgICAJICAJICBzaGFyZWRfcHJvYyA9IGYkZXh0cmFjdCgwLCBjaG9wX3NlbWksIHNoYXJlZF9wcm9jKQorJCAgICAgCSAgICAgIHdyaXRlIGxpYm9wdCBmJGZhbygiVU5JVkVSU0FMPSFBUyIsLQorICAgICAgCSAgCQkJICAgICBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpKQorJCAgICAgCSAgZW5kaWYKKyQgICAgIAkgIGdvdG8gdm1hcF9sb29wCiskVk1BUF9FTkQ6CiskICAgICBlbHNlCiskICAgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiVW5rbm93biBBcmNoaXRlY3R1cmUgKE5vdCBWQVgsIEFYUCwgb3IgSUE2NCkiCiskICAgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiTm8gb3B0aW9ucyBmaWxlIGNyZWF0ZWQiCiskICAgICBlbmRpZgorJCBlbmRpZgorJCBFWElUX00yUzoKKyQgY2xvc2Uvbm9sb2cgbWFwCiskIGNsb3NlL25vbG9nIGxpYm9wdAorJCBlbmRzdWJyb3V0aW5lCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvbWluaWd6aXAuYyBiL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCmluZGV4IDk4MjVjY2MuLmIzMDI1YTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCisrKyBiL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCkBAIC0xLDUgKzEsNSBAQAogLyogbWluaWd6aXAuYyAtLSBzaW11bGF0ZSBnemlwIHVzaW5nIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCwgMjAxMSBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQwLDYgKzQwLDEwIEBACiAjICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpCiAjZW5kaWYKIAorI2lmZGVmIF9NU0NfVkVSCisjICBkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisjZW5kaWYKKwogI2lmZGVmIFZNUwogIyAgZGVmaW5lIHVubGluayBkZWxldGUKICMgIGRlZmluZSBHWl9TVUZGSVggIi1neiIKQEAgLTEzOCw2ICsxNDIsMTk3IEBACiAjICBkZWZpbmUgbG9jYWwKICNlbmRpZgogCisjaWZkZWYgWl9TT0xPCisvKiBmb3IgWl9TT0xPLCBjcmVhdGUgc2ltcGxpZmllZCBneiogZnVuY3Rpb25zIHVzaW5nIGRlZmxhdGUgYW5kIGluZmxhdGUgKi8KKworI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKFpfTEFSR0UpCisjICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIHVubGluaygpICovCisjZW5kaWYKKwordm9pZCAqbXlhbGxvYyBPRigodm9pZCAqLCB1bnNpZ25lZCwgdW5zaWduZWQpKTsKK3ZvaWQgbXlmcmVlIE9GKCh2b2lkICosIHZvaWQgKikpOworCit2b2lkICpteWFsbG9jKHEsIG4sIG0pCisgICAgdm9pZCAqcTsKKyAgICB1bnNpZ25lZCBuLCBtOworeworICAgIHEgPSBaX05VTEw7CisgICAgcmV0dXJuIGNhbGxvYyhuLCBtKTsKK30KKwordm9pZCBteWZyZWUocSwgcCkKKyAgICB2b2lkICpxLCAqcDsKK3sKKyAgICBxID0gWl9OVUxMOworICAgIGZyZWUocCk7Cit9CisKK3R5cGVkZWYgc3RydWN0IGd6RmlsZV9zIHsKKyAgICBGSUxFICpmaWxlOworICAgIGludCB3cml0ZTsKKyAgICBpbnQgZXJyOworICAgIGNoYXIgKm1zZzsKKyAgICB6X3N0cmVhbSBzdHJtOworfSAqZ3pGaWxlOworCitnekZpbGUgZ3pvcGVuIE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworZ3pGaWxlIGd6ZG9wZW4gT0YoKGludCwgY29uc3QgY2hhciAqKSk7CitnekZpbGUgZ3pfb3BlbiBPRigoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOworCitnekZpbGUgZ3pvcGVuKHBhdGgsIG1vZGUpCitjb25zdCBjaGFyICpwYXRoOworY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihwYXRoLCAtMSwgbW9kZSk7Cit9CisKK2d6RmlsZSBnemRvcGVuKGZkLCBtb2RlKQoraW50IGZkOworY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihOVUxMLCBmZCwgbW9kZSk7Cit9CisKK2d6RmlsZSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKQorICAgIGNvbnN0IGNoYXIgKnBhdGg7CisgICAgaW50IGZkOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgZ3pGaWxlIGd6OworICAgIGludCByZXQ7CisKKyAgICBneiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGd6RmlsZV9zKSk7CisgICAgaWYgKGd6ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGd6LT53cml0ZSA9IHN0cmNocihtb2RlLCAndycpICE9IE5VTEw7CisgICAgZ3otPnN0cm0uemFsbG9jID0gbXlhbGxvYzsKKyAgICBnei0+c3RybS56ZnJlZSA9IG15ZnJlZTsKKyAgICBnei0+c3RybS5vcGFxdWUgPSBaX05VTEw7CisgICAgaWYgKGd6LT53cml0ZSkKKyAgICAgICAgcmV0ID0gZGVmbGF0ZUluaXQyKCYoZ3otPnN0cm0pLCAtMSwgOCwgMTUgKyAxNiwgOCwgMCk7CisgICAgZWxzZSB7CisgICAgICAgIGd6LT5zdHJtLm5leHRfaW4gPSAwOworICAgICAgICBnei0+c3RybS5hdmFpbF9pbiA9IFpfTlVMTDsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZUluaXQyKCYoZ3otPnN0cm0pLCAxNSArIDE2KTsKKyAgICB9CisgICAgaWYgKHJldCAhPSBaX09LKSB7CisgICAgICAgIGZyZWUoZ3opOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZ3otPmZpbGUgPSBwYXRoID09IE5VTEwgPyBmZG9wZW4oZmQsIGd6LT53cml0ZSA/ICJ3YiIgOiAicmIiKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3BlbihwYXRoLCBnei0+d3JpdGUgPyAid2IiIDogInJiIik7CisgICAgaWYgKGd6LT5maWxlID09IE5VTEwpIHsKKyAgICAgICAgZ3otPndyaXRlID8gZGVmbGF0ZUVuZCgmKGd6LT5zdHJtKSkgOiBpbmZsYXRlRW5kKCYoZ3otPnN0cm0pKTsKKyAgICAgICAgZnJlZShneik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBnei0+ZXJyID0gMDsKKyAgICBnei0+bXNnID0gIiI7CisgICAgcmV0dXJuIGd6OworfQorCitpbnQgZ3p3cml0ZSBPRigoZ3pGaWxlLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKSk7CisKK2ludCBnendyaXRlKGd6LCBidWYsIGxlbikKKyAgICBnekZpbGUgZ3o7CisgICAgY29uc3Qgdm9pZCAqYnVmOworICAgIHVuc2lnbmVkIGxlbjsKK3sKKyAgICB6X3N0cmVhbSAqc3RybTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dFtCVUZMRU5dOworCisgICAgaWYgKGd6ID09IE5VTEwgfHwgIWd6LT53cml0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgc3RybSA9ICYoZ3otPnN0cm0pOworICAgIHN0cm0tPm5leHRfaW4gPSAodm9pZCAqKWJ1ZjsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGxlbjsKKyAgICBkbyB7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gb3V0OworICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBCVUZMRU47CisgICAgICAgICh2b2lkKWRlZmxhdGUoc3RybSwgWl9OT19GTFVTSCk7CisgICAgICAgIGZ3cml0ZShvdXQsIDEsIEJVRkxFTiAtIHN0cm0tPmF2YWlsX291dCwgZ3otPmZpbGUpOworICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCA9PSAwKTsKKyAgICByZXR1cm4gbGVuOworfQorCitpbnQgZ3pyZWFkIE9GKChnekZpbGUsIHZvaWQgKiwgdW5zaWduZWQpKTsKKworaW50IGd6cmVhZChneiwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGd6OworICAgIHZvaWQgKmJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47Cit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBnb3Q7CisgICAgdW5zaWduZWQgY2hhciBpblsxXTsKKyAgICB6X3N0cmVhbSAqc3RybTsKKworICAgIGlmIChneiA9PSBOVUxMIHx8IGd6LT53cml0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGd6LT5lcnIpCisgICAgICAgIHJldHVybiAwOworICAgIHN0cm0gPSAmKGd6LT5zdHJtKTsKKyAgICBzdHJtLT5uZXh0X291dCA9ICh2b2lkICopYnVmOworICAgIHN0cm0tPmF2YWlsX291dCA9IGxlbjsKKyAgICBkbyB7CisgICAgICAgIGdvdCA9IGZyZWFkKGluLCAxLCAxLCBnei0+ZmlsZSk7CisgICAgICAgIGlmIChnb3QgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzdHJtLT5uZXh0X2luID0gaW47CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMTsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZShzdHJtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX0RBVEFfRVJST1IpIHsKKyAgICAgICAgICAgIGd6LT5lcnIgPSBaX0RBVEFfRVJST1I7CisgICAgICAgICAgICBnei0+bXNnID0gc3RybS0+bXNnOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCisgICAgICAgICAgICBpbmZsYXRlUmVzZXQoc3RybSk7CisgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0KTsKKyAgICByZXR1cm4gbGVuIC0gc3RybS0+YXZhaWxfb3V0OworfQorCitpbnQgZ3pjbG9zZSBPRigoZ3pGaWxlKSk7CisKK2ludCBnemNsb3NlKGd6KQorICAgIGd6RmlsZSBnejsKK3sKKyAgICB6X3N0cmVhbSAqc3RybTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dFtCVUZMRU5dOworCisgICAgaWYgKGd6ID09IE5VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdHJtID0gJihnei0+c3RybSk7CisgICAgaWYgKGd6LT53cml0ZSkgeworICAgICAgICBzdHJtLT5uZXh0X2luID0gWl9OVUxMOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gb3V0OworICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gQlVGTEVOOworICAgICAgICAgICAgKHZvaWQpZGVmbGF0ZShzdHJtLCBaX0ZJTklTSCk7CisgICAgICAgICAgICBmd3JpdGUob3V0LCAxLCBCVUZMRU4gLSBzdHJtLT5hdmFpbF9vdXQsIGd6LT5maWxlKTsKKyAgICAgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ID09IDApOworICAgICAgICBkZWZsYXRlRW5kKHN0cm0pOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGluZmxhdGVFbmQoc3RybSk7CisgICAgZmNsb3NlKGd6LT5maWxlKTsKKyAgICBmcmVlKGd6KTsKKyAgICByZXR1cm4gWl9PSzsKK30KKworY29uc3QgY2hhciAqZ3plcnJvciBPRigoZ3pGaWxlLCBpbnQgKikpOworCitjb25zdCBjaGFyICpnemVycm9yKGd6LCBlcnIpCisgICAgZ3pGaWxlIGd6OworICAgIGludCAqZXJyOworeworICAgICplcnIgPSBnei0+ZXJyOworICAgIHJldHVybiBnei0+bXNnOworfQorCisjZW5kaWYKKwogY2hhciAqcHJvZzsKIAogdm9pZCBlcnJvciAgICAgICAgICAgIE9GKChjb25zdCBjaGFyICptc2cpKTsKQEAgLTI3Miw4ICs0NjcsMTIgQEAKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKG91dGZpbGUsIHNpemVvZihvdXRmaWxlKSwgIiVzJXMiLCBmaWxlLCBHWl9TVUZGSVgpOworI2Vsc2UKICAgICBzdHJjcHkob3V0ZmlsZSwgZmlsZSk7CiAgICAgc3RyY2F0KG91dGZpbGUsIEdaX1NVRkZJWCk7CisjZW5kaWYKIAogICAgIGluID0gZm9wZW4oZmlsZSwgInJiIik7CiAgICAgaWYgKGluID09IE5VTEwpIHsKQEAgLTMwOCw3ICs1MDcsMTEgQEAKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsIGZpbGUpOworI2Vsc2UKICAgICBzdHJjcHkoYnVmLCBmaWxlKTsKKyNlbmRpZgogCiAgICAgaWYgKGxlbiA+IFNVRkZJWF9MRU4gJiYgc3RyY21wKGZpbGUrbGVuLVNVRkZJWF9MRU4sIEdaX1NVRkZJWCkgPT0gMCkgewogICAgICAgICBpbmZpbGUgPSBmaWxlOwpAQCAtMzE3LDcgKzUyMCwxMSBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIG91dGZpbGUgPSBmaWxlOwogICAgICAgICBpbmZpbGUgPSBidWY7CisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAgICAgc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiVzIiwgR1pfU1VGRklYKTsKKyNlbHNlCiAgICAgICAgIHN0cmNhdChpbmZpbGUsIEdaX1NVRkZJWCk7CisjZW5kaWYKICAgICB9CiAgICAgaW4gPSBnem9wZW4oaW5maWxlLCAicmIiKTsKICAgICBpZiAoaW4gPT0gTlVMTCkgewpAQCAtMzU1LDcgKzU2MiwxMSBAQAogICAgIGd6RmlsZSBmaWxlOwogICAgIGNoYXIgKmJuYW1lLCBvdXRtb2RlWzIwXTsKIAorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYob3V0bW9kZSwgc2l6ZW9mKG91dG1vZGUpLCAiJXMiLCAid2I2ICIpOworI2Vsc2UKICAgICBzdHJjcHkob3V0bW9kZSwgIndiNiAiKTsKKyNlbmRpZgogCiAgICAgcHJvZyA9IGFyZ3ZbMF07CiAgICAgYm5hbWUgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJyk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvdHJlZXMuYyBiL01vZHVsZXMvemxpYi90cmVlcy5jCmluZGV4IDU2ZTliYjEuLjFmZDc3NTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi90cmVlcy5jCisrKyBiL01vZHVsZXMvemxpYi90cmVlcy5jCkBAIC0xLDUgKzEsNSBAQAogLyogdHJlZXMuYyAtLSBvdXRwdXQgZGVmbGF0ZWQgZGF0YSB1c2luZyBIdWZmbWFuIGNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgSmVhbi1sb3VwIEdhaWxseQogICogZGV0ZWN0X2RhdGFfdHlwZSgpIGZ1bmN0aW9uIHByb3ZpZGVkIGZyZWVseSBieSBDb3NtaW4gVHJ1dGEsIDIwMDYKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwpAQCAtNzQsMTEgKzc0LDYgQEAKICAqIHByb2JhYmlsaXR5LCB0byBhdm9pZCB0cmFuc21pdHRpbmcgdGhlIGxlbmd0aHMgZm9yIHVudXNlZCBiaXQgbGVuZ3RoIGNvZGVzLgogICovCiAKLSNkZWZpbmUgQnVmX3NpemUgKDggKiAyKnNpemVvZihjaGFyKSkKLS8qIE51bWJlciBvZiBiaXRzIHVzZWQgd2l0aGluIGJpX2J1Zi4gKGJpX2J1ZiBtaWdodCBiZSBpbXBsZW1lbnRlZCBvbgotICogbW9yZSB0aGFuIDE2IGJpdHMgb24gc29tZSBzeXN0ZW1zLikKLSAqLwotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIExvY2FsIGRhdGEuIFRoZXNlIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuCiAgKi8KQEAgLTE1MSw4ICsxNDYsOCBAQAogbG9jYWwgaW50ICBidWlsZF9ibF90cmVlICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogbG9jYWwgdm9pZCBzZW5kX2FsbF90cmVlcyBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGxjb2RlcywgaW50IGRjb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGNvZGVzKSk7Ci1sb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjdF9kYXRhICpsdHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0X2RhdGEgKmR0cmVlKSk7Citsb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjb25zdCBjdF9kYXRhICpsdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlKSk7CiBsb2NhbCBpbnQgIGRldGVjdF9kYXRhX3R5cGUgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIGxvY2FsIHVuc2lnbmVkIGJpX3JldmVyc2UgT0YoKHVuc2lnbmVkIHZhbHVlLCBpbnQgbGVuZ3RoKSk7CiBsb2NhbCB2b2lkIGJpX3dpbmR1cCAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CkBAIC0zOTksNyArMzk0LDYgQEAKIAogICAgIHMtPmJpX2J1ZiA9IDA7CiAgICAgcy0+YmlfdmFsaWQgPSAwOwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDg7IC8qIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUgKi8KICNpZmRlZiBERUJVRwogICAgIHMtPmNvbXByZXNzZWRfbGVuID0gMEw7CiAgICAgcy0+Yml0c19zZW50ID0gMEw7CkBAIC04ODMsMTUgKzg3NywxNyBAQAogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEZsdXNoIHRoZSBiaXRzIGluIHRoZSBiaXQgYnVmZmVyIHRvIHBlbmRpbmcgb3V0cHV0IChsZWF2ZXMgYXQgbW9zdCA3IGJpdHMpCisgKi8KK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYml0cyhzKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7Cit7CisgICAgYmlfZmx1c2gocyk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogU2VuZCBvbmUgZW1wdHkgc3RhdGljIGJsb2NrIHRvIGdpdmUgZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZS4KICAqIFRoaXMgdGFrZXMgMTAgYml0cywgb2Ygd2hpY2ggNyBtYXkgcmVtYWluIGluIHRoZSBiaXQgYnVmZmVyLgotICogVGhlIGN1cnJlbnQgaW5mbGF0ZSBjb2RlIHJlcXVpcmVzIDkgYml0cyBvZiBsb29rYWhlYWQuIElmIHRoZQotICogbGFzdCB0d28gY29kZXMgZm9yIHRoZSBwcmV2aW91cyBibG9jayAocmVhbCBjb2RlIHBsdXMgRU9CKSB3ZXJlIGNvZGVkCi0gKiBvbiA1IGJpdHMgb3IgbGVzcywgaW5mbGF0ZSBtYXkgaGF2ZSBvbmx5IDUrMyBiaXRzIG9mIGxvb2thaGVhZCB0byBkZWNvZGUKLSAqIHRoZSBsYXN0IHJlYWwgY29kZS4gSW4gdGhpcyBjYXNlIHdlIHNlbmQgdHdvIGVtcHR5IHN0YXRpYyBibG9ja3MgaW5zdGVhZAotICogb2Ygb25lLiAoVGhlcmUgYXJlIG5vIHByb2JsZW1zIGlmIHRoZSBwcmV2aW91cyBibG9jayBpcyBzdG9yZWQgb3IgZml4ZWQuKQotICogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIGFzc3VtZSB0aGUgd29yc3QgY2FzZSBvZiBsYXN0IHJlYWwgY29kZSBlbmNvZGVkCi0gKiBvbiBvbmUgYml0IG9ubHkuCiAgKi8KIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfYWxpZ24ocykKICAgICBkZWZsYXRlX3N0YXRlICpzOwpAQCAtOTAyLDIwICs4OTgsNiBAQAogICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEwTDsgLyogMyBmb3IgYmxvY2sgdHlwZSwgNyBmb3IgRU9CICovCiAjZW5kaWYKICAgICBiaV9mbHVzaChzKTsKLSAgICAvKiBPZiB0aGUgMTAgYml0cyBmb3IgdGhlIGVtcHR5IGJsb2NrLCB3ZSBoYXZlIGFscmVhZHkgc2VudAotICAgICAqICgxMCAtIGJpX3ZhbGlkKSBiaXRzLiBUaGUgbG9va2FoZWFkIGZvciB0aGUgbGFzdCByZWFsIGNvZGUgKGJlZm9yZQotICAgICAqIHRoZSBFT0Igb2YgdGhlIHByZXZpb3VzIGJsb2NrKSB3YXMgdGh1cyBhdCBsZWFzdCBvbmUgcGx1cyB0aGUgbGVuZ3RoCi0gICAgICogb2YgdGhlIEVPQiBwbHVzIHdoYXQgd2UgaGF2ZSBqdXN0IHNlbnQgb2YgdGhlIGVtcHR5IHN0YXRpYyBibG9jay4KLSAgICAgKi8KLSAgICBpZiAoMSArIHMtPmxhc3RfZW9iX2xlbiArIDEwIC0gcy0+YmlfdmFsaWQgPCA5KSB7Ci0gICAgICAgIHNlbmRfYml0cyhzLCBTVEFUSUNfVFJFRVM8PDEsIDMpOwotICAgICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0aWNfbHRyZWUpOwotI2lmZGVmIERFQlVHCi0gICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEwTDsKLSNlbmRpZgotICAgICAgICBiaV9mbHVzaChzKTsKLSAgICB9Ci0gICAgcy0+bGFzdF9lb2JfbGVuID0gNzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC05OTAsNyArOTcyLDggQEAKICAgICB9IGVsc2UgaWYgKHMtPnN0cmF0ZWd5ID09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT0gb3B0X2xlbmIpIHsKICNlbmRpZgogICAgICAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUzw8MSkrbGFzdCwgMyk7Ci0gICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjdF9kYXRhICopc3RhdGljX2x0cmVlLCAoY3RfZGF0YSAqKXN0YXRpY19kdHJlZSk7CisgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopc3RhdGljX2x0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXN0YXRpY19kdHJlZSk7CiAjaWZkZWYgREVCVUcKICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMyArIHMtPnN0YXRpY19sZW47CiAjZW5kaWYKQEAgLTk5OCw3ICs5ODEsOCBAQAogICAgICAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUzw8MSkrbGFzdCwgMyk7CiAgICAgICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMtPmxfZGVzYy5tYXhfY29kZSsxLCBzLT5kX2Rlc2MubWF4X2NvZGUrMSwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2JsaW5kZXgrMSk7Ci0gICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjdF9kYXRhICopcy0+ZHluX2x0cmVlLCAoY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7CisgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopcy0+ZHluX2x0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7CiAjaWZkZWYgREVCVUcKICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMyArIHMtPm9wdF9sZW47CiAjZW5kaWYKQEAgLTEwNzUsOCArMTA1OSw4IEBACiAgKi8KIGxvY2FsIHZvaWQgY29tcHJlc3NfYmxvY2socywgbHRyZWUsIGR0cmVlKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqLwotICAgIGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5jZSB0cmVlICovCisgICAgY29uc3QgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqLworICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5jZSB0cmVlICovCiB7CiAgICAgdW5zaWduZWQgZGlzdDsgICAgICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqLwogICAgIGludCBsYzsgICAgICAgICAgICAgLyogbWF0Y2ggbGVuZ3RoIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0ID09IDApICovCkBAIC0xMTE4LDcgKzExMDIsNiBAQAogICAgIH0gd2hpbGUgKGx4IDwgcy0+bGFzdF9saXQpOwogCiAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgbHRyZWUpOwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IGx0cmVlW0VORF9CTE9DS10uTGVuOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTEyMjYsNyArMTIwOSw2IEBACiAgICAgaW50ICAgICAgaGVhZGVyOyAgLyogdHJ1ZSBpZiBibG9jayBoZWFkZXIgbXVzdCBiZSB3cml0dGVuICovCiB7CiAgICAgYmlfd2luZHVwKHMpOyAgICAgICAgLyogYWxpZ24gb24gYnl0ZSBib3VuZGFyeSAqLwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDg7IC8qIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUgKi8KIAogICAgIGlmIChoZWFkZXIpIHsKICAgICAgICAgcHV0X3Nob3J0KHMsICh1c2gpbGVuKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi91bmNvbXByLmMgYi9Nb2R1bGVzL3psaWIvdW5jb21wci5jCmluZGV4IGFkOThiZTMuLjI0MmU5NDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi91bmNvbXByLmMKKysrIGIvTW9kdWxlcy96bGliL3VuY29tcHIuYwpAQCAtMzAsNyArMzAsNyBAQAogICAgIHpfc3RyZWFtIHN0cmVhbTsKICAgICBpbnQgZXJyOwogCi0gICAgc3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKXNvdXJjZTsKKyAgICBzdHJlYW0ubmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopc291cmNlOwogICAgIHN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXNvdXJjZUxlbjsKICAgICAvKiBDaGVjayBmb3Igc291cmNlID4gNjRLIG9uIDE2LWJpdCBtYWNoaW5lOiAqLwogICAgIGlmICgodUxvbmcpc3RyZWFtLmF2YWlsX2luICE9IHNvdXJjZUxlbikgcmV0dXJuIFpfQlVGX0VSUk9SOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmggYi9Nb2R1bGVzL3psaWIvemNvbmYuaAppbmRleCAwMmNlNTZjLi45OTg3YTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaAorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaApAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xNSwxMSArMTUsMTMgQEAKICAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KICAqLwogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKIC8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9fdHJfZmx1c2hfYml0cwogIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jawogIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CiAjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jawpAQCAtMjcsOSArMjksMTEgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCiAjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CkBAIC00MCw0NCArNDQsNTMgQEAKICMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCiAjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQZW5kaW5nICAgICAgICB6X2RlZmxhdGVQZW5kaW5nCiAjICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVJlc2V0S2VlcCAgICAgIHpfZGVmbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgogIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCiAjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKLSMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKLSMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgotIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCi0jICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgotIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKLSMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKLSMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKLSMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAotIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KLSMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgotIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKLSMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCi0jICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCi0jICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCi0jICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKLSMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0Ci0jICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCi0jICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKLSMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YwotIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwotIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAotIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCi0jICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCi0jICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKLSMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcwotIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAotIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0Ci0jICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKLSMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgorIyAgICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4CisjICAgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKKyMgICAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKKyMgICAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgICAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgorIyAgICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93CisjICAgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgorIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKKyMgICAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgICAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKQEAgLTkyLDE2ICsxMDUsMjIgQEAKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCiAjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAogIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKICMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLSMgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCi0jICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCiAjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncwogIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCiAKQEAgLTExMSw3ICsxMzAsOSBAQAogIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKICMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgogIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgogIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgogIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKICMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCkBAIC0xOTcsNiArMjE4LDEyIEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFpMSUJfQ09OU1QpICYmICFkZWZpbmVkKHpfY29uc3QpCisjICBkZWZpbmUgel9jb25zdCBjb25zdAorI2Vsc2UKKyMgIGRlZmluZSB6X2NvbnN0CisjZW5kaWYKKwogLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KICNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQogIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKQEAgLTI0Myw2ICsyNzAsMTQgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCiAgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgogICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCkBAIC0zNTYsMTIgKzM5MSw0NyBAQAogICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLwogIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCiAjaWZkZWYgU1REQwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgIC8qIGZvciBvZmZfdCAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKQEAgLTM3MCwyMSArNDQwLDM4IEBACiAgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKICAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCiAgKi8KLSNpZiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQogIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBpZm5kZWYgel9vZmZfdAotIyAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkKKyMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKKyNlbmRpZgorI2lmbmRlZiBaX1NPTE8KKyMgIGlmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICAgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgIC8qIGZvciBTRUVLXyosIG9mZl90LCBhbmQgX0xGUzY0X0xBUkdFRklMRSAqLworIyAgICBpZmRlZiBWTVMKKyMgICAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgICAgLyogZm9yIG9mZl90ICovCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiB6X29mZl90CisjICAgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBTRUVLX1NFVAorI2lmIGRlZmluZWQoX0xGUzY0X0xBUkdFRklMRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgWl9MRlM2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX0xBUkdFNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9XQU5UNjQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0VFS19TRVQpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwogIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KICMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCkBAIC0zOTQsMTggKzQ4MSwxNCBAQAogIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChaX0xBUkdFNjQpCiAjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKICNlbHNlCi0jICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluIGIvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbgppbmRleCBhMmY3MWIxLi4wNDMwMTljIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluCisrKyBiL01vZHVsZXMvemxpYi96Y29uZi5oLmNtYWtlaW4KQEAgLTEsNSArMSw1IEBACiAvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTcsMTEgKzE3LDEzIEBACiAgKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNpbmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuCiAgKi8KICNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfUFJFRklYX1NFVAogCiAvKiBhbGwgbGlua2VkIHN5bWJvbHMgKi8KICMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCiAjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCiAjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCisjICBkZWZpbmUgX3RyX2ZsdXNoX2JpdHMgICAgICAgIHpfX3RyX2ZsdXNoX2JpdHMKICMgIGRlZmluZSBfdHJfZmx1c2hfYmxvY2sgICAgICAgel9fdHJfZmx1c2hfYmxvY2sKICMgIGRlZmluZSBfdHJfaW5pdCAgICAgICAgICAgICAgel9fdHJfaW5pdAogIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sKQEAgLTI5LDkgKzMxLDExIEBACiAjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29tYmluZQogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0Ci0jICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcworIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICAgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBlbmRpZgogIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NApAQCAtNDIsNDQgKzQ2LDUzIEBACiAjICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwogIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwogIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZwogIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQogIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIgICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKICMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQogIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCi0jICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4Ci0jICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKLSMgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgotIyAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKLSMgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCi0jICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCi0jICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93Ci0jICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKLSMgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCi0jICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKLSMgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCi0jICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAotIyAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YwotIyAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cwotIyAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0Ci0jICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAotIyAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgotIyAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0Ci0jICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKLSMgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKLSMgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKLSMgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKLSMgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAotIyAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlawotIyAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0Ci0jICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKLSMgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKLSMgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAotIyAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCi0jICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKKyMgICAgZGVmaW5lIGd6Z2V0Y18gICAgICAgICAgICAgICB6X2d6Z2V0Y18KKyMgICAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cworIyAgICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgorIyAgICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKKyMgICAgaWZkZWYgX1dJTjMyCisjICAgICAgZGVmaW5lIGd6b3Blbl93ICAgICAgICAgICAgICB6X2d6b3Blbl93CisjICAgIGVuZGlmCisjICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgorIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCisjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICAgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAgICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKKyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBlbmRpZgogIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKICMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawogIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCkBAIC05NCwxNiArMTA3LDIyIEBACiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgogIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkKICMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwogIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKICMgIGRlZmluZSBpbmZsYXRlVW5kZXJtaW5lICAgICAgel9pbmZsYXRlVW5kZXJtaW5lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0S2VlcCAgICAgIHpfaW5mbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAgICB6X2luZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0CiAjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90YWJsZQotIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGVuZGlmCiAjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCi0jICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYwotIyAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBlbmRpZgogIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKICMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgogCkBAIC0xMTMsNyArMTMyLDkgQEAKICMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCiAjICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKICMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKLSMgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZW5kaWYKICMgIGRlZmluZSBnel9oZWFkZXIgICAgICAgICAgICAgel9nel9oZWFkZXIKICMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwCiAjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYwpAQCAtMTk5LDYgKzIyMCwxMiBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChaTElCX0NPTlNUKSAmJiAhZGVmaW5lZCh6X2NvbnN0KQorIyAgZGVmaW5lIHpfY29uc3QgY29uc3QKKyNlbHNlCisjICBkZWZpbmUgel9jb25zdAorI2VuZGlmCisKIC8qIFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6ICovCiAjaWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRISU5LX0MpfHxkZWZpbmVkKF9fU0NfXykKICMgIGRlZmluZSBOT19EVU1NWV9ERUNMCkBAIC0yNDUsNiArMjcyLDE0IEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZm5kZWYgWl9BUkcgLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RkYXJnICovCisjICBpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRpZgorCiAvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAogICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KICAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQpAQCAtMzU4LDEyICszOTMsNDcgQEAKICAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKFpfVTQpICYmICFkZWZpbmVkKFpfU09MTykgJiYgZGVmaW5lZChTVERDKQorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZAorIyAgZWxpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgbG9uZworIyAgZWxpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgc2hvcnQKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFpfVTQKKyAgIHR5cGVkZWYgWl9VNCB6X2NyY190OworI2Vsc2UKKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X2NyY190OworI2VuZGlmCisKICNpZmRlZiBIQVZFX1VOSVNURF9IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KICMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKICNlbmRpZgogCisjaWZkZWYgSEFWRV9TVERBUkdfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1NUREFSR19ICisjZW5kaWYKKwogI2lmZGVmIFNUREMKLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgLyogZm9yIG9mZl90ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRhcmcuaD4gICAgICAgICAvKiBmb3IgdmFfbGlzdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPiAgICAgICAgIC8qIGZvciB3Y2hhcl90ICovCisjICBlbmRpZgogI2VuZGlmCiAKIC8qIGEgbGl0dGxlIHRyaWNrIHRvIGFjY29tbW9kYXRlIGJvdGggIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kCkBAIC0zNzIsMjEgKzQ0MiwzOCBAQAogICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCiAgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucwogICovCi0jaWYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKICMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKICNlbmRpZgogCi0jaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgLyogZm9yIG9mZl90ICovCi0jICBlbmRpZgotIyAgaWZuZGVmIHpfb2ZmX3QKLSMgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKyNpZm5kZWYgWl9TT0xPCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYgVk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgU0VFS19TRVQKKyNpZiBkZWZpbmVkKF9MRlM2NF9MQVJHRUZJTEUpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAgZGVmaW5lIFpfTEZTNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9MQVJHRTY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfV0FOVDY0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNFRUtfU0VUKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KICMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCiAjICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLwpAQCAtMzk2LDE4ICs0ODMsMTQgQEAKICMgIGRlZmluZSB6X29mZl90IGxvbmcKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoWl9MQVJHRTY0KQogIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90CiAjZWxzZQotIyAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKFpfU09MTykKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCBfX2ludDY0CisjICBlbHNlCisjICAgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAorIyAgZW5kaWYKICNlbmRpZgogCiAvKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmguaW4gYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgppbmRleCAwMmNlNTZjLi45OTg3YTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgpAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xNSwxMSArMTUsMTMgQEAKICAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KICAqLwogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKIC8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9fdHJfZmx1c2hfYml0cwogIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jawogIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CiAjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jawpAQCAtMjcsOSArMjksMTEgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCiAjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CkBAIC00MCw0NCArNDQsNTMgQEAKICMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCiAjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQZW5kaW5nICAgICAgICB6X2RlZmxhdGVQZW5kaW5nCiAjICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVJlc2V0S2VlcCAgICAgIHpfZGVmbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgogIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCiAjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKLSMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKLSMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgotIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCi0jICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgotIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKLSMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKLSMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKLSMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAotIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KLSMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgotIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKLSMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCi0jICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCi0jICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCi0jICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKLSMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0Ci0jICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCi0jICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKLSMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YwotIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwotIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAotIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCi0jICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCi0jICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKLSMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcwotIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAotIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0Ci0jICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKLSMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgorIyAgICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4CisjICAgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKKyMgICAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKKyMgICAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgICAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgorIyAgICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93CisjICAgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgorIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKKyMgICAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgICAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKQEAgLTkyLDE2ICsxMDUsMjIgQEAKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCiAjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAogIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKICMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLSMgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCi0jICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCiAjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncwogIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCiAKQEAgLTExMSw3ICsxMzAsOSBAQAogIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKICMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgogIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgogIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgogIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKICMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCkBAIC0xOTcsNiArMjE4LDEyIEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFpMSUJfQ09OU1QpICYmICFkZWZpbmVkKHpfY29uc3QpCisjICBkZWZpbmUgel9jb25zdCBjb25zdAorI2Vsc2UKKyMgIGRlZmluZSB6X2NvbnN0CisjZW5kaWYKKwogLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KICNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQogIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKQEAgLTI0Myw2ICsyNzAsMTQgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCiAgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgogICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCkBAIC0zNTYsMTIgKzM5MSw0NyBAQAogICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLwogIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCiAjaWZkZWYgU1REQwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgIC8qIGZvciBvZmZfdCAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKQEAgLTM3MCwyMSArNDQwLDM4IEBACiAgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKICAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCiAgKi8KLSNpZiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQogIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBpZm5kZWYgel9vZmZfdAotIyAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkKKyMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKKyNlbmRpZgorI2lmbmRlZiBaX1NPTE8KKyMgIGlmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICAgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgIC8qIGZvciBTRUVLXyosIG9mZl90LCBhbmQgX0xGUzY0X0xBUkdFRklMRSAqLworIyAgICBpZmRlZiBWTVMKKyMgICAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgICAgLyogZm9yIG9mZl90ICovCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiB6X29mZl90CisjICAgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBTRUVLX1NFVAorI2lmIGRlZmluZWQoX0xGUzY0X0xBUkdFRklMRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgWl9MRlM2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX0xBUkdFNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9XQU5UNjQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0VFS19TRVQpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwogIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KICMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCkBAIC0zOTQsMTggKzQ4MSwxNCBAQAogIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChaX0xBUkdFNjQpCiAjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKICNlbHNlCi0jICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaW4uaCBiL01vZHVsZXMvemxpYi96Y29uZi5pbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2E5NDMxLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvemxpYi96Y29uZi5pbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAgQEAKLS8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBKZWFuLWxvdXAgR2FpbGx5LgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAotICovCi0KLS8qIEAoIykgJElkJCAqLwotCi0jaWZuZGVmIFpDT05GX0gKLSNkZWZpbmUgWkNPTkZfSAotCi0vKgotICogSWYgeW91ICpyZWFsbHkqIG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlwZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zLAotICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRoZSAic3RhbmRhcmQiIHpsaWIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCi0gKi8KLSNpZmRlZiBaX1BSRUZJWAotIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwotIyAgZGVmaW5lIGRlZmxhdGUgICAgICAgICAgICAgICB6X2RlZmxhdGUKLSMgIGRlZmluZSBkZWZsYXRlRW5kICAgICAgICAgICAgel9kZWZsYXRlRW5kCi0jICBkZWZpbmUgaW5mbGF0ZUluaXRfICAgICAgICAgIHpfaW5mbGF0ZUluaXRfCi0jICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQotIyAgZGVmaW5lIGluZmxhdGVFbmQgICAgICAgICAgICB6X2luZmxhdGVFbmQKLSMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCi0jICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBkZWZsYXRlQ29weSAgICAgICAgICAgel9kZWZsYXRlQ29weQotIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAotIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKLSMgIGRlZmluZSBkZWZsYXRlQm91bmQgICAgICAgICAgel9kZWZsYXRlQm91bmQKLSMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKLSMgIGRlZmluZSBpbmZsYXRlSW5pdDJfICAgICAgICAgel9pbmZsYXRlSW5pdDJfCi0jICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwotIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKLSMgIGRlZmluZSBpbmZsYXRlQ29weSAgICAgICAgICAgel9pbmZsYXRlQ29weQotIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAotIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCi0jICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCi0jICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgotIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCi0jICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgotCi0jICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwotIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKLSMgIGRlZmluZSBvdXRfZnVuYyAgICAgICAgICAgICAgel9vdXRfZnVuYwotIyAgZGVmaW5lIEJ5dGUgICAgICAgICAgICAgICAgICB6X0J5dGUKLSMgIGRlZmluZSB1SW50ICAgICAgICAgICAgICAgICAgel91SW50Ci0jICBkZWZpbmUgdUxvbmcgICAgICAgICAgICAgICAgIHpfdUxvbmcKLSMgIGRlZmluZSBCeXRlZiAgICAgICAgICAgICAgICAgel9CeXRlZgotIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCi0jICBkZWZpbmUgaW50ZiAgICAgICAgICAgICAgICAgIHpfaW50ZgotIyAgZGVmaW5lIHVJbnRmICAgICAgICAgICAgICAgICB6X3VJbnRmCi0jICBkZWZpbmUgdUxvbmdmICAgICAgICAgICAgICAgIHpfdUxvbmdmCi0jICBkZWZpbmUgdm9pZHBmICAgICAgICAgICAgICAgIHpfdm9pZHBmCi0jICBkZWZpbmUgdm9pZHAgICAgICAgICAgICAgICAgIHpfdm9pZHAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZpbmVkKE1TRE9TKQotIyAgZGVmaW5lIE1TRE9TCi0jZW5kaWYKLSNpZiAoZGVmaW5lZChPU18yKSB8fCBkZWZpbmVkKF9fT1MyX18pKSAmJiAhZGVmaW5lZChPUzIpCi0jICBkZWZpbmUgT1MyCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQotIyAgZGVmaW5lIFdJTkRPV1MKLSNlbmRpZgotI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoX19XSU4zMl9fKQotIyAgaWZuZGVmIFdJTjMyCi0jICAgIGRlZmluZSBXSU4zMgotIyAgZW5kaWYKLSNlbmRpZgotI2lmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU5ET1dTKSkgJiYgIWRlZmluZWQoV0lOMzIpCi0jICBpZiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19GTEFUX18pICYmICFkZWZpbmVkKF9fMzg2X18pCi0jICAgIGlmbmRlZiBTWVMxNkJJVAotIyAgICAgIGRlZmluZSBTWVMxNkJJVAotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKgotICogQ29tcGlsZSB3aXRoIC1ETUFYU0VHXzY0SyBpZiB0aGUgYWxsb2MgZnVuY3Rpb24gY2Fubm90IGFsbG9jYXRlIG1vcmUKLSAqIHRoYW4gNjRrIGJ5dGVzIGF0IGEgdGltZSAobmVlZGVkIG9uIHN5c3RlbXMgd2l0aCAxNi1iaXQgaW50KS4KLSAqLwotI2lmZGVmIFNZUzE2QklUCi0jICBkZWZpbmUgTUFYU0VHXzY0SwotI2VuZGlmCi0jaWZkZWYgTVNET1MKLSMgIGRlZmluZSBVTkFMSUdORURfT0sKLSNlbmRpZgotCi0jaWZkZWYgX19TVERDX1ZFUlNJT05fXwotIyAgaWZuZGVmIFNUREMKLSMgICAgZGVmaW5lIFNUREMKLSMgIGVuZGlmCi0jICBpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLSMgICAgaWZuZGVmIFNUREM5OQotIyAgICAgIGRlZmluZSBTVERDOTkKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoX19IT1NfQUlYX18pKQotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pICYmICFkZWZpbmVkKFNUREMpICAgIC8qIGlTZXJpZXMgKGZvcm1lcmx5IEFTLzQwMCkuICovCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0KLSNpZm5kZWYgU1REQwotIyAgaWZuZGVmIGNvbnN0IC8qIGNhbm5vdCB1c2UgIWRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoY29uc3QpIG9uIE1hYyAqLwotIyAgICBkZWZpbmUgY29uc3QgICAgICAgLyogbm90ZTogbmVlZCBhIG1vcmUgZ2VudGxlIHNvbHV0aW9uIGhlcmUgKi8KLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KLSNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQotIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKLSNlbmRpZgotCi0vKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi8KLSNpZm5kZWYgTUFYX01FTV9MRVZFTAotIyAgaWZkZWYgTUFYU0VHXzY0SwotIyAgICBkZWZpbmUgTUFYX01FTV9MRVZFTCA4Ci0jICBlbHNlCi0jICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDkKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogTWF4aW11bSB2YWx1ZSBmb3Igd2luZG93Qml0cyBpbiBkZWZsYXRlSW5pdDIgYW5kIGluZmxhdGVJbml0Mi4KLSAqIFdBUk5JTkc6IHJlZHVjaW5nIE1BWF9XQklUUyBtYWtlcyBtaW5pZ3ppcCB1bmFibGUgdG8gZXh0cmFjdCAuZ3ogZmlsZXMKLSAqIGNyZWF0ZWQgYnkgZ3ppcC4gKEZpbGVzIGNyZWF0ZWQgYnkgbWluaWd6aXAgY2FuIHN0aWxsIGJlIGV4dHJhY3RlZCBieQotICogZ3ppcC4pCi0gKi8KLSNpZm5kZWYgTUFYX1dCSVRTCi0jICBkZWZpbmUgTUFYX1dCSVRTICAgMTUgLyogMzJLIExaNzcgd2luZG93ICovCi0jZW5kaWYKLQotLyogVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGRlZmxhdGUgYXJlIChpbiBieXRlcyk6Ci0gICAgICAgICAgICAoMSA8PCAod2luZG93Qml0cysyKSkgKyAgKDEgPDwgKG1lbUxldmVsKzkpKQotIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHM9MTUgICsgIDEyOEsgZm9yIG1lbUxldmVsID0gOCAgKGRlZmF1bHQgdmFsdWVzKQotIHBsdXMgYSBmZXcga2lsb2J5dGVzIGZvciBzbWFsbCBvYmplY3RzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcmVkdWNlCi0gdGhlIGRlZmF1bHQgbWVtb3J5IHJlcXVpcmVtZW50cyBmcm9tIDI1NksgdG8gMTI4SywgY29tcGlsZSB3aXRoCi0gICAgIG1ha2UgQ0ZMQUdTPSItTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NyIKLSBPZiBjb3Vyc2UgdGhpcyB3aWxsIGdlbmVyYWxseSBkZWdyYWRlIGNvbXByZXNzaW9uICh0aGVyZSdzIG5vIGZyZWUgbHVuY2gpLgotCi0gICBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgaW5mbGF0ZSBhcmUgKGluIGJ5dGVzKSAxIDw8IHdpbmRvd0JpdHMKLSB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRlZmF1bHQgdmFsdWUpIHBsdXMgYSBmZXcga2lsb2J5dGVzCi0gZm9yIHNtYWxsIG9iamVjdHMuCi0qLwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGRlY2xhcmF0aW9ucyAqLwotCi0jaWZuZGVmIE9GIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLSMgIGlmZGVmIFNUREMKLSMgICAgZGVmaW5lIE9GKGFyZ3MpICBhcmdzCi0jICBlbHNlCi0jICAgIGRlZmluZSBPRihhcmdzKSAgKCkKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKLSAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCi0gKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKLSAqIHRvIGRlZmluZSBOT19NRU1DUFkgaW4genV0aWwuaC4gIElmIHlvdSBkb24ndCBuZWVkIHRoZSBtaXhlZCBtb2RlbCwKLSAqIGp1c3QgZGVmaW5lIEZBUiB0byBiZSBlbXB0eS4KLSAqLwotI2lmZGVmIFNZUzE2QklUCi0jICBpZiBkZWZpbmVkKE1fSTg2U00pIHx8IGRlZmluZWQoTV9JODZNTSkKLSAgICAgLyogTVNDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLwotIyAgICBkZWZpbmUgU01BTExfTUVESVVNCi0jICAgIGlmZGVmIF9NU0NfVkVSCi0jICAgICAgZGVmaW5lIEZBUiBfZmFyCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgRkFSIGZhcgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmIChkZWZpbmVkKF9fU01BTExfXykgfHwgZGVmaW5lZChfX01FRElVTV9fKSkKLSAgICAgLyogVHVyYm8gQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KLSMgICAgZGVmaW5lIFNNQUxMX01FRElVTQotIyAgICBpZmRlZiBfX0JPUkxBTkRDX18KLSMgICAgICBkZWZpbmUgRkFSIF9mYXIKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBGQVIgZmFyCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpCi0gICAvKiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIGFzIGEgRExMLCBkZWZpbmUgWkxJQl9ETEwuCi0gICAgKiBUaGlzIGlzIG5vdCBtYW5kYXRvcnksIGJ1dCBpdCBvZmZlcnMgYSBsaXR0bGUgcGVyZm9ybWFuY2UgaW5jcmVhc2UuCi0gICAgKi8KLSMgIGlmZGVmIFpMSUJfRExMCi0jICAgIGlmIGRlZmluZWQoV0lOMzIpICYmICghZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IChfX0JPUkxBTkRDX18gPj0gMHg1MDApKQotIyAgICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKLSMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVybiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgICBlbHNlCi0jICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmICAvKiBaTElCX0RMTCAqLwotICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcgemxpYiB3aXRoIHRoZSBXSU5BUEkvV0lOQVBJViBjYWxsaW5nIGNvbnZlbnRpb24sCi0gICAgKiBkZWZpbmUgWkxJQl9XSU5BUEkuCi0gICAgKiBDYXV0aW9uOiB0aGUgc3RhbmRhcmQgWkxJQjEuRExMIGlzIE5PVCBjb21waWxlZCB1c2luZyBaTElCX1dJTkFQSS4KLSAgICAqLwotIyAgaWZkZWYgWkxJQl9XSU5BUEkKLSMgICAgaWZkZWYgRkFSCi0jICAgICAgdW5kZWYgRkFSCi0jICAgIGVuZGlmCi0jICAgIGluY2x1ZGUgPHdpbmRvd3MuaD4KLSAgICAgLyogTm8gbmVlZCBmb3IgX2V4cG9ydCwgdXNlIFpMSUIuREVGIGluc3RlYWQuICovCi0gICAgIC8qIEZvciBjb21wbGV0ZSBXaW5kb3dzIGNvbXBhdGliaWxpdHksIHVzZSBXSU5BUEksIG5vdCBfX3N0ZGNhbGwuICovCi0jICAgIGRlZmluZSBaRVhQT1JUIFdJTkFQSQotIyAgICBpZmRlZiBXSU4zMgotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgV0lOQVBJVgotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBGQVIgQ0RFQ0wKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9fQkVPU19fKQotIyAgaWZkZWYgWkxJQl9ETEwKLSMgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAotIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBaRVhURVJOCi0jICBkZWZpbmUgWkVYVEVSTiBleHRlcm4KLSNlbmRpZgotI2lmbmRlZiBaRVhQT1JUCi0jICBkZWZpbmUgWkVYUE9SVAotI2VuZGlmCi0jaWZuZGVmIFpFWFBPUlRWQQotIyAgZGVmaW5lIFpFWFBPUlRWQQotI2VuZGlmCi0KLSNpZm5kZWYgRkFSCi0jICBkZWZpbmUgRkFSCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9fTUFDVFlQRVNfXykKLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgQnl0ZTsgIC8qIDggYml0cyAqLwotI2VuZGlmCi10eXBlZGVmIHVuc2lnbmVkIGludCAgIHVJbnQ7ICAvKiAxNiBiaXRzIG9yIG1vcmUgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdUxvbmc7IC8qIDMyIGJpdHMgb3IgbW9yZSAqLwotCi0jaWZkZWYgU01BTExfTUVESVVNCi0gICAvKiBCb3JsYW5kIEMvQysrIGFuZCBzb21lIG9sZCBNU0MgdmVyc2lvbnMgaWdub3JlIEZBUiBpbnNpZGUgdHlwZWRlZiAqLwotIyAgZGVmaW5lIEJ5dGVmIEJ5dGUgRkFSCi0jZWxzZQotICAgdHlwZWRlZiBCeXRlICBGQVIgQnl0ZWY7Ci0jZW5kaWYKLXR5cGVkZWYgY2hhciAgRkFSIGNoYXJmOwotdHlwZWRlZiBpbnQgICBGQVIgaW50ZjsKLXR5cGVkZWYgdUludCAgRkFSIHVJbnRmOwotdHlwZWRlZiB1TG9uZyBGQVIgdUxvbmdmOwotCi0jaWZkZWYgU1REQwotICAgdHlwZWRlZiB2b2lkIGNvbnN0ICp2b2lkcGM7Ci0gICB0eXBlZGVmIHZvaWQgRkFSICAgKnZvaWRwZjsKLSAgIHR5cGVkZWYgdm9pZCAgICAgICAqdm9pZHA7Ci0jZWxzZQotICAgdHlwZWRlZiBCeXRlIGNvbnN0ICp2b2lkcGM7Ci0gICB0eXBlZGVmIEJ5dGUgRkFSICAgKnZvaWRwZjsKLSAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7Ci0jZW5kaWYKLQotI2lmIDAgICAgICAgICAgIC8qIEhBVkVfVU5JU1REX0ggLS0gdGhpcyBsaW5lIGlzIHVwZGF0ZWQgYnkgLi9jb25maWd1cmUgKi8KLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAvKiBmb3Igb2ZmX3QgKi8KLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgIC8qIGZvciBvZmZfdCAqLwotIyAgZW5kaWYKLSMgIGRlZmluZSB6X29mZl90IG9mZl90Ci0jZW5kaWYKLSNpZm5kZWYgU0VFS19TRVQKLSMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwotIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KLSMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCi0jZW5kaWYKLSNpZm5kZWYgel9vZmZfdAotIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotIyAgaWZkZWYgRkFSCi0jICAgIHVuZGVmIEZBUgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVJbml0XywiREVJTiIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlSW5pdDJfLCJERUlOMiIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlRW5kLCJERUVORCIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlQm91bmQsIkRFQk5EIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVJbml0XywiSU5JTiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlSW5pdDJfLCJJTklOMiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlRW5kLCJJTkVORCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlU3luYywiSU5TWSIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlU2V0RGljdGlvbmFyeSwiSU5TRURJIikKLSMgICBwcmFnbWEgbWFwKGNvbXByZXNzQm91bmQsIkNNQk5EIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVfdGFibGUsIklOVEFCTCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlX2Zhc3QsIklORkEiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9jb3B5cmlnaHQsIklOQ09QWSIpCi0jZW5kaWYKLQotI2VuZGlmIC8qIFpDT05GX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96bGliLjMgYi9Nb2R1bGVzL3psaWIvemxpYi4zCmluZGV4IDI3YWRjNGMuLjAxNjBlNjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96bGliLjMKKysrIGIvTW9kdWxlcy96bGliL3psaWIuMwpAQCAtMSw0ICsxLDQgQEAKLS5USCBaTElCIDMgIjE5IEFwciAyMDEwIgorLlRIIFpMSUIgMyAiMjggQXByIDIwMTMiCiAuU0ggTkFNRQogemxpYiBcLSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxpYnJhcnkKIC5TSCBTWU5PUFNJUwpAQCAtMzYsOSArMzYsOSBAQAogLklSIHpsaWIuaCAuCiBUaGUgZGlzdHJpYnV0aW9uIHNvdXJjZSBpbmNsdWRlcyBleGFtcGxlcyBvZiB1c2Ugb2YgdGhlIGxpYnJhcnkKIGluIHRoZSBmaWxlcwotLkkgZXhhbXBsZS5jCisuSSB0ZXN0L2V4YW1wbGUuYwogYW5kCi0uSVIgbWluaWd6aXAuYywKKy5JUiB0ZXN0L21pbmlnemlwLmMsCiBhcyB3ZWxsIGFzIG90aGVyIGV4YW1wbGVzIGluIHRoZQogLklSIGV4YW1wbGVzLwogZGlyZWN0b3J5LgpAQCAtNjUsNyArNjUsNyBAQAogd3JpdHRlbiBieSBBLk0uIEt1Y2hsaW5nIChhbWtAbWFnbmV0LmNvbSksCiBpcyBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIgdmVyc2lvbnM6CiAuSVAKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvbGliL21vZHVsZS16bGliLmh0bWwKK2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS96bGliLmh0bWwKIC5MUAogLkkgemxpYgogaXMgYnVpbHQgaW50bwpAQCAtOTUsMTEgKzk1LDExIEBACiBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkMKIChSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlczoKIC5JUAotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKGZvciB0aGUgemxpYiBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MCAoZm9yIHRoZSB6bGliIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCiAuYnIKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0IChmb3IgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCkKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTEgKGZvciB0aGUgZGVmbGF0ZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0KQogLmJyCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUyLnR4dCAoZm9yIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUyIChmb3IgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCkKIC5MUAogTWFyayBOZWxzb24gd3JvdGUgYW4gYXJ0aWNsZSBhYm91dAogLkkgemxpYgpAQCAtMTI1LDggKzEyNSw4IEBACiBTZW5kIHF1ZXN0aW9ucyBhbmQvb3IgY29tbWVudHMgdG8gemxpYkBnemlwLm9yZywKIG9yIChmb3IgdGhlIFdpbmRvd3MgRExMIHZlcnNpb24pIHRvIEdpbGxlcyBWb2xsYW50IChpbmZvQHdpbmltYWdlLmNvbSkuCiAuU0ggQVVUSE9SUwotVmVyc2lvbiAxLjIuNQotQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSAoamxvdXBAZ3ppcC5vcmcpCitWZXJzaW9uIDEuMi44CitDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IChqbG91cEBnemlwLm9yZykKIGFuZCBNYXJrIEFkbGVyIChtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1KS4KIC5MUAogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMtaXMsIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3psaWIuaCBiL01vZHVsZXMvemxpYi96bGliLmgKaW5kZXggNzlhMTg3Yy4uM2UwYzc2NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIuaAorKysgYi9Nb2R1bGVzL3psaWIvemxpYi5oCkBAIC0xLDcgKzEsNyBAQAogLyogemxpYi5oIC0tIGludGVyZmFjZSBvZiB0aGUgJ3psaWInIGdlbmVyYWwgcHVycG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gIHZlcnNpb24gMS4yLjUsIEFwcmlsIDE5dGgsIDIwMTAKKyAgdmVyc2lvbiAxLjIuOCwgQXByaWwgMjh0aCwgMjAxMwogCi0gIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogCiAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCiAgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKQEAgLTI0LDggKzI0LDggQEAKIAogCiAgIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MgKFJlcXVlc3QgZm9yCi0gIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTAudHh0Ci0gICh6bGliIGZvcm1hdCksIHJmYzE5NTEudHh0IChkZWZsYXRlIGZvcm1hdCkgYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuCisgIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTAKKyAgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MSAoZGVmbGF0ZSBmb3JtYXQpIGFuZCByZmMxOTUyIChnemlwIGZvcm1hdCkuCiAqLwogCiAjaWZuZGVmIFpMSUJfSApAQCAtMzcsMTEgKzM3LDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4yLjUiCi0jZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTI1MAorI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMi44IgorI2RlZmluZSBaTElCX1ZFUk5VTSAweDEyODAKICNkZWZpbmUgWkxJQl9WRVJfTUFKT1IgMQogI2RlZmluZSBaTElCX1ZFUl9NSU5PUiAyCi0jZGVmaW5lIFpMSUJfVkVSX1JFVklTSU9OIDUKKyNkZWZpbmUgWkxJQl9WRVJfUkVWSVNJT04gOAogI2RlZmluZSBaTElCX1ZFUl9TVUJSRVZJU0lPTiAwCiAKIC8qCkBAIC04MywxNSArODMsMTUgQEAKIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZTsKIAogdHlwZWRlZiBzdHJ1Y3Qgel9zdHJlYW1fcyB7Ci0gICAgQnl0ZWYgICAgKm5leHRfaW47ICAvKiBuZXh0IGlucHV0IGJ5dGUgKi8KKyAgICB6X2NvbnN0IEJ5dGVmICpuZXh0X2luOyAgICAgLyogbmV4dCBpbnB1dCBieXRlICovCiAgICAgdUludCAgICAgYXZhaWxfaW47ICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IG5leHRfaW4gKi8KLSAgICB1TG9uZyAgICB0b3RhbF9pbjsgIC8qIHRvdGFsIG5iIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCisgICAgdUxvbmcgICAgdG90YWxfaW47ICAvKiB0b3RhbCBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi8KIAogICAgIEJ5dGVmICAgICpuZXh0X291dDsgLyogbmV4dCBvdXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICovCiAgICAgdUludCAgICAgYXZhaWxfb3V0OyAvKiByZW1haW5pbmcgZnJlZSBzcGFjZSBhdCBuZXh0X291dCAqLwotICAgIHVMb25nICAgIHRvdGFsX291dDsgLyogdG90YWwgbmIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLworICAgIHVMb25nICAgIHRvdGFsX291dDsgLyogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIG91dHB1dCBzbyBmYXIgKi8KIAotICAgIGNoYXIgICAgICptc2c7ICAgICAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovCisgICAgel9jb25zdCBjaGFyICptc2c7ICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKi8KICAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICpzdGF0ZTsgLyogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICovCiAKICAgICBhbGxvY19mdW5jIHphbGxvYzsgIC8qIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlICovCkBAIC0zMjcsOCArMzI3LDkgQEAKIAogICAgIFpfRklOSVNIIGNhbiBiZSB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0IGlmIGFsbCB0aGUgY29tcHJlc3Npb24KICAgaXMgdG8gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwLiAgSW4gdGhpcyBjYXNlLCBhdmFpbF9vdXQgbXVzdCBiZSBhdCBsZWFzdCB0aGUKLSAgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kIChzZWUgYmVsb3cpLiAgSWYgZGVmbGF0ZSBkb2VzIG5vdCByZXR1cm4KLSAgWl9TVFJFQU1fRU5ELCB0aGVuIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kIChzZWUgYmVsb3cpLiAgVGhlbiBkZWZsYXRlIGlzIGd1YXJhbnRlZWQgdG8KKyAgcmV0dXJuIFpfU1RSRUFNX0VORC4gIElmIG5vdCBlbm91Z2ggb3V0cHV0IHNwYWNlIGlzIHByb3ZpZGVkLCBkZWZsYXRlIHdpbGwKKyAgbm90IHJldHVybiBaX1NUUkVBTV9FTkQsIGFuZCBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhcyBkZXNjcmliZWQgYWJvdmUuCiAKICAgICBkZWZsYXRlKCkgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiBhbGwgaW5wdXQgcmVhZAogICBzbyBmYXIgKHRoYXQgaXMsIHRvdGFsX2luIGJ5dGVzKS4KQEAgLTQ1MSwyMyArNDUyLDI5IEBACiAgIGVycm9yLiAgSG93ZXZlciBpZiBhbGwgZGVjb21wcmVzc2lvbiBpcyB0byBiZSBwZXJmb3JtZWQgaW4gYSBzaW5nbGUgc3RlcCAoYQogICBzaW5nbGUgY2FsbCBvZiBpbmZsYXRlKSwgdGhlIHBhcmFtZXRlciBmbHVzaCBzaG91bGQgYmUgc2V0IHRvIFpfRklOSVNILiAgSW4KICAgdGhpcyBjYXNlIGFsbCBwZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCBhbmQgYWxsIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQ7Ci0gIGF2YWlsX291dCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgdW5jb21wcmVzc2VkIGRhdGEuICAoVGhlIHNpemUKLSAgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG1heSBoYXZlIGJlZW4gc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgZm9yIHRoaXMKLSAgcHVycG9zZS4pIFRoZSBuZXh0IG9wZXJhdGlvbiBvbiB0aGlzIHN0cmVhbSBtdXN0IGJlIGluZmxhdGVFbmQgdG8gZGVhbGxvY2F0ZQotICB0aGUgZGVjb21wcmVzc2lvbiBzdGF0ZS4gIFRoZSB1c2Ugb2YgWl9GSU5JU0ggaXMgbmV2ZXIgcmVxdWlyZWQsIGJ1dCBjYW4gYmUKLSAgdXNlZCB0byBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIGFwcHJvYWNoIG1heSBiZSB1c2VkIGZvciB0aGUgc2luZ2xlCi0gIGluZmxhdGUoKSBjYWxsLgorICBhdmFpbF9vdXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGZvciB0aGUKKyAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLiAgKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuCisgIHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSBUaGUgdXNlIG9mIFpfRklOSVNIIGlzIG5vdAorICByZXF1aXJlZCB0byBwZXJmb3JtIGFuIGluZmxhdGlvbiBpbiBvbmUgc3RlcC4gIEhvd2V2ZXIgaXQgbWF5IGJlIHVzZWQgdG8KKyAgaW5mb3JtIGluZmxhdGUgdGhhdCBhIGZhc3RlciBhcHByb2FjaCBjYW4gYmUgdXNlZCBmb3IgdGhlIHNpbmdsZSBpbmZsYXRlKCkKKyAgY2FsbC4gIFpfRklOSVNIIGFsc28gaW5mb3JtcyBpbmZsYXRlIHRvIG5vdCBtYWludGFpbiBhIHNsaWRpbmcgd2luZG93IGlmIHRoZQorICBzdHJlYW0gY29tcGxldGVzLCB3aGljaCByZWR1Y2VzIGluZmxhdGUncyBtZW1vcnkgZm9vdHByaW50LiAgSWYgdGhlIHN0cmVhbQorICBkb2VzIG5vdCBjb21wbGV0ZSwgZWl0aGVyIGJlY2F1c2Ugbm90IGFsbCBvZiB0aGUgc3RyZWFtIGlzIHByb3ZpZGVkIG9yIG5vdAorICBlbm91Z2ggb3V0cHV0IHNwYWNlIGlzIHByb3ZpZGVkLCB0aGVuIGEgc2xpZGluZyB3aW5kb3cgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kCisgIGluZmxhdGUoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHRvIGNvbnRpbnVlIHRoZSBvcGVyYXRpb24gYXMgaWYgWl9OT19GTFVTSCBoYWQKKyAgYmVlbiB1c2VkLgogCiAgICAgIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIGluZmxhdGUoKSBhbHdheXMgZmx1c2hlcyBhcyBtdWNoIG91dHB1dCBhcwogICBwb3NzaWJsZSB0byB0aGUgb3V0cHV0IGJ1ZmZlciwgYW5kIGFsd2F5cyB1c2VzIHRoZSBmYXN0ZXIgYXBwcm9hY2ggb24gdGhlCi0gIGZpcnN0IGNhbGwuICBTbyB0aGUgb25seSBlZmZlY3Qgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBpbiB0aGlzIGltcGxlbWVudGF0aW9uCi0gIGlzIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgaW5mbGF0ZSgpLCBhcyBub3RlZCBiZWxvdywgb3Igd2hlbiBpdCByZXR1cm5zIGVhcmx5Ci0gIGJlY2F1c2UgWl9CTE9DSyBvciBaX1RSRUVTIGlzIHVzZWQuCisgIGZpcnN0IGNhbGwuICBTbyB0aGUgZWZmZWN0cyBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGluIHRoaXMgaW1wbGVtZW50YXRpb24gYXJlCisgIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgaW5mbGF0ZSgpIGFzIG5vdGVkIGJlbG93LCB3aGVuIGluZmxhdGUoKSByZXR1cm5zIGVhcmx5CisgIHdoZW4gWl9CTE9DSyBvciBaX1RSRUVTIGlzIHVzZWQsIGFuZCB3aGVuIGluZmxhdGUoKSBhdm9pZHMgdGhlIGFsbG9jYXRpb24gb2YKKyAgbWVtb3J5IGZvciBhIHNsaWRpbmcgd2luZG93IHdoZW4gWl9GSU5JU0ggaXMgdXNlZC4KIAogICAgICBJZiBhIHByZXNldCBkaWN0aW9uYXJ5IGlzIG5lZWRlZCBhZnRlciB0aGlzIGNhbGwgKHNlZSBpbmZsYXRlU2V0RGljdGlvbmFyeQotICBiZWxvdyksIGluZmxhdGUgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiB0aGUgZGljdGlvbmFyeQorICBiZWxvdyksIGluZmxhdGUgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgdGhlIGRpY3Rpb25hcnkKICAgY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yIGFuZCByZXR1cm5zIFpfTkVFRF9ESUNUOyBvdGhlcndpc2UgaXQgc2V0cwotICBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiBhbGwgb3V0cHV0IHByb2R1Y2VkIHNvIGZhciAodGhhdCBpcywKKyAgc3RybS0+YWRsZXIgdG8gdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGFsbCBvdXRwdXQgcHJvZHVjZWQgc28gZmFyICh0aGF0IGlzLAogICB0b3RhbF9vdXQgYnl0ZXMpIGFuZCByZXR1cm5zIFpfT0ssIFpfU1RSRUFNX0VORCBvciBhbiBlcnJvciBjb2RlIGFzIGRlc2NyaWJlZAogICBiZWxvdy4gIEF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaW5mbGF0ZSgpIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRlZCBhZGxlcjMyCiAgIGNoZWNrc3VtIGlzIGVxdWFsIHRvIHRoYXQgc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9TVFJFQU1fRU5ECkBAIC00NzgsNyArNDg1LDkgQEAKICAgaW5pdGlhbGl6aW5nIHdpdGggaW5mbGF0ZUluaXQyKCkuICBBbnkgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBnemlwCiAgIGhlYWRlciBpcyBub3QgcmV0YWluZWQsIHNvIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQgdGhhdCBpbmZvcm1hdGlvbiBzaG91bGQKICAgaW5zdGVhZCB1c2UgcmF3IGluZmxhdGUsIHNlZSBpbmZsYXRlSW5pdDIoKSBiZWxvdywgb3IgaW5mbGF0ZUJhY2soKSBhbmQKLSAgcGVyZm9ybSB0aGVpciBvd24gcHJvY2Vzc2luZyBvZiB0aGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIuCisgIHBlcmZvcm0gdGhlaXIgb3duIHByb2Nlc3Npbmcgb2YgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyLiAgV2hlbiBwcm9jZXNzaW5nCisgIGd6aXAtd3JhcHBlZCBkZWZsYXRlIGRhdGEsIHN0cm0tPmFkbGVyMzIgaXMgc2V0IHRvIHRoZSBDUkMtMzIgb2YgdGhlIG91dHB1dAorICBwcm9kdWN0ZWQgc28gZmFyLiAgVGhlIENSQy0zMiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGd6aXAgdHJhaWxlci4KIAogICAgIGluZmxhdGUoKSByZXR1cm5zIFpfT0sgaWYgc29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlucHV0IHByb2Nlc3NlZAogICBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBpZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaGFzCkBAIC01ODAsMTAgKzU4OSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgZGljdExlbmd0aCkpOwogLyoKICAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gYnl0ZSBzZXF1ZW5jZQotICAgd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvciBkZWZsYXRlUmVzZXQsIGJlZm9yZSBhbnkgY2FsbAotICAgb2YgZGVmbGF0ZS4gIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZQotICAgZGljdGlvbmFyeSAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5KS4KKyAgIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gIFdoZW4gdXNpbmcgdGhlIHpsaWIgZm9ybWF0LCB0aGlzCisgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCwgZGVmbGF0ZUluaXQyIG9yCisgICBkZWZsYXRlUmVzZXQsIGFuZCBiZWZvcmUgYW55IGNhbGwgb2YgZGVmbGF0ZS4gIFdoZW4gZG9pbmcgcmF3IGRlZmxhdGUsIHRoaXMKKyAgIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGVpdGhlciBiZWZvcmUgYW55IGNhbGwgb2YgZGVmbGF0ZSwgb3IgaW1tZWRpYXRlbHkKKyAgIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mIGEgZGVmbGF0ZSBibG9jaywgaS5lLiBhZnRlciBhbGwgaW5wdXQgaGFzIGJlZW4KKyAgIGNvbnN1bWVkIGFuZCBhbGwgb3V0cHV0IGhhcyBiZWVuIGRlbGl2ZXJlZCB3aGVuIHVzaW5nIGFueSBvZiB0aGUgZmx1c2gKKyAgIG9wdGlvbnMgWl9CTE9DSywgWl9QQVJUSUFMX0ZMVVNILCBaX1NZTkNfRkxVU0gsIG9yIFpfRlVMTF9GTFVTSC4gIFRoZQorICAgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUgZGljdGlvbmFyeSAoc2VlCisgICBpbmZsYXRlU2V0RGljdGlvbmFyeSkuCiAKICAgICAgVGhlIGRpY3Rpb25hcnkgc2hvdWxkIGNvbnNpc3Qgb2Ygc3RyaW5ncyAoYnl0ZSBzZXF1ZW5jZXMpIHRoYXQgYXJlIGxpa2VseQogICAgdG8gYmUgZW5jb3VudGVyZWQgbGF0ZXIgaW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCwgd2l0aCB0aGUgbW9zdCBjb21tb25seQpAQCAtNjEwLDggKzYyNCw4IEBACiAgICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiBhCiAgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKICAgIGluY29uc2lzdGVudCAoZm9yIGV4YW1wbGUgaWYgZGVmbGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgdGhpcyBzdHJlYW0KLSAgIG9yIGlmIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgaXMgYnNvcnQpLiAgZGVmbGF0ZVNldERpY3Rpb25hcnkgZG9lcyBub3QKLSAgIHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCisgICBvciBpZiBub3QgYXQgYSBibG9jayBib3VuZGFyeSBmb3IgcmF3IGRlZmxhdGUpLiAgZGVmbGF0ZVNldERpY3Rpb25hcnkgZG9lcworICAgbm90IHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVDb3B5IE9GKCh6X3N0cmVhbXAgZGVzdCwKQEAgLTY4OCw5ICs3MDIsMjkgQEAKICAgIGRlZmxhdGlvbiBvZiBzb3VyY2VMZW4gYnl0ZXMuICBJdCBtdXN0IGJlIGNhbGxlZCBhZnRlciBkZWZsYXRlSW5pdCgpIG9yCiAgICBkZWZsYXRlSW5pdDIoKSwgYW5kIGFmdGVyIGRlZmxhdGVTZXRIZWFkZXIoKSwgaWYgdXNlZC4gIFRoaXMgd291bGQgYmUgdXNlZAogICAgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciBmb3IgZGVmbGF0aW9uIGluIGEgc2luZ2xlIHBhc3MsIGFuZCBzbyB3b3VsZCBiZQotICAgY2FsbGVkIGJlZm9yZSBkZWZsYXRlKCkuCisgICBjYWxsZWQgYmVmb3JlIGRlZmxhdGUoKS4gIElmIHRoYXQgZmlyc3QgZGVmbGF0ZSgpIGNhbGwgaXMgcHJvdmlkZWQgdGhlCisgICBzb3VyY2VMZW4gaW5wdXQgYnl0ZXMsIGFuIG91dHB1dCBidWZmZXIgYWxsb2NhdGVkIHRvIHRoZSBzaXplIHJldHVybmVkIGJ5CisgICBkZWZsYXRlQm91bmQoKSwgYW5kIHRoZSBmbHVzaCB2YWx1ZSBaX0ZJTklTSCwgdGhlbiBkZWZsYXRlKCkgaXMgZ3VhcmFudGVlZAorICAgdG8gcmV0dXJuIFpfU1RSRUFNX0VORC4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGNvbXByZXNzZWQgc2l6ZSB0bworICAgYmUgbGFyZ2VyIHRoYW4gdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCgpIGlmIGZsdXNoIG9wdGlvbnMgb3RoZXIKKyAgIHRoYW4gWl9GSU5JU0ggb3IgWl9OT19GTFVTSCBhcmUgdXNlZC4KICovCiAKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVBlbmRpbmcgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKnBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmJpdHMpKTsKKy8qCisgICAgIGRlZmxhdGVQZW5kaW5nKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFuZCBiaXRzIG9mIG91dHB1dCB0aGF0IGhhdmUKKyAgIGJlZW4gZ2VuZXJhdGVkLCBidXQgbm90IHlldCBwcm92aWRlZCBpbiB0aGUgYXZhaWxhYmxlIG91dHB1dC4gIFRoZSBieXRlcyBub3QKKyAgIHByb3ZpZGVkIHdvdWxkIGJlIGR1ZSB0byB0aGUgYXZhaWxhYmxlIG91dHB1dCBzcGFjZSBoYXZpbmcgYmVpbmcgY29uc3VtZWQuCisgICBUaGUgbnVtYmVyIG9mIGJpdHMgb2Ygb3V0cHV0IG5vdCBwcm92aWRlZCBhcmUgYmV0d2VlbiAwIGFuZCA3LCB3aGVyZSB0aGV5CisgICBhd2FpdCBtb3JlIGJpdHMgdG8gam9pbiB0aGVtIGluIG9yZGVyIHRvIGZpbGwgb3V0IGEgZnVsbCBieXRlLiAgSWYgcGVuZGluZworICAgb3IgYml0cyBhcmUgWl9OVUxMLCB0aGVuIHRob3NlIHZhbHVlcyBhcmUgbm90IHNldC4KKworICAgICBkZWZsYXRlUGVuZGluZyByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCisgKi8KKwogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUHJpbWUgT0YoKHpfc3RyZWFtcCBzdHJtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkpOwpAQCAtNzAzLDggKzczNyw5IEBACiAgICB0aGFuIG9yIGVxdWFsIHRvIDE2LCBhbmQgdGhhdCBtYW55IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHZhbHVlCiAgICB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBvdXRwdXQuCiAKLSAgICAgZGVmbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyAgICAgZGVmbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAorICAgcm9vbSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIHRvIGluc2VydCB0aGUgYml0cywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzb3VyY2Ugc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVTZXRIZWFkZXIgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtNzkwLDEwICs4MjUsMTEgQEAKICAgIGlmIHRoYXQgY2FsbCByZXR1cm5lZCBaX05FRURfRElDVC4gIFRoZSBkaWN0aW9uYXJ5IGNob3NlbiBieSB0aGUgY29tcHJlc3NvcgogICAgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgYWRsZXIzMiB2YWx1ZSByZXR1cm5lZCBieSB0aGF0IGNhbGwgb2YgaW5mbGF0ZS4KICAgIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZSBkaWN0aW9uYXJ5IChzZWUKLSAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5KS4gIEZvciByYXcgaW5mbGF0ZSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCi0gICBpbW1lZGlhdGVseSBhZnRlciBpbmZsYXRlSW5pdDIoKSBvciBpbmZsYXRlUmVzZXQoKSBhbmQgYmVmb3JlIGFueSBjYWxsIG9mCi0gICBpbmZsYXRlKCkgdG8gc2V0IHRoZSBkaWN0aW9uYXJ5LiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5zdXJlIHRoYXQgdGhlCi0gICBkaWN0aW9uYXJ5IHRoYXQgd2FzIHVzZWQgZm9yIGNvbXByZXNzaW9uIGlzIHByb3ZpZGVkLgorICAgZGVmbGF0ZVNldERpY3Rpb25hcnkpLiAgRm9yIHJhdyBpbmZsYXRlLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55CisgICB0aW1lIHRvIHNldCB0aGUgZGljdGlvbmFyeS4gIElmIHRoZSBwcm92aWRlZCBkaWN0aW9uYXJ5IGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgIHdpbmRvdyBhbmQgdGhlcmUgaXMgYWxyZWFkeSBkYXRhIGluIHRoZSB3aW5kb3csIHRoZW4gdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkKKyAgIHdpbGwgYW1lbmQgd2hhdCdzIHRoZXJlLiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5zdXJlIHRoYXQgdGhlIGRpY3Rpb25hcnkKKyAgIHRoYXQgd2FzIHVzZWQgZm9yIGNvbXByZXNzaW9uIGlzIHByb3ZpZGVkLgogCiAgICAgIGluZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiBhCiAgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKQEAgLTgwMywxOSArODM5LDM4IEBACiAgICBpbmZsYXRlKCkuCiAqLwogCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVHZXREaWN0aW9uYXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVmICpkaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgKmRpY3RMZW5ndGgpKTsKKy8qCisgICAgIFJldHVybnMgdGhlIHNsaWRpbmcgZGljdGlvbmFyeSBiZWluZyBtYWludGFpbmVkIGJ5IGluZmxhdGUuICBkaWN0TGVuZ3RoIGlzCisgICBzZXQgdG8gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGljdGlvbmFyeSwgYW5kIHRoYXQgbWFueSBieXRlcyBhcmUgY29waWVkCisgICB0byBkaWN0aW9uYXJ5LiAgZGljdGlvbmFyeSBtdXN0IGhhdmUgZW5vdWdoIHNwYWNlLCB3aGVyZSAzMjc2OCBieXRlcyBpcworICAgYWx3YXlzIGVub3VnaC4gIElmIGluZmxhdGVHZXREaWN0aW9uYXJ5KCkgaXMgY2FsbGVkIHdpdGggZGljdGlvbmFyeSBlcXVhbCB0bworICAgWl9OVUxMLCB0aGVuIG9ubHkgdGhlIGRpY3Rpb25hcnkgbGVuZ3RoIGlzIHJldHVybmVkLCBhbmQgbm90aGluZyBpcyBjb3BpZWQuCisgICBTaW1pbGFyeSwgaWYgZGljdExlbmd0aCBpcyBaX05VTEwsIHRoZW4gaXQgaXMgbm90IHNldC4KKworICAgICBpbmZsYXRlR2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgb24gc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzdHJlYW0gc3RhdGUgaXMgaW5jb25zaXN0ZW50LgorKi8KKwogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlU3luYyBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCi0gICAgIFNraXBzIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgZnVsbCBmbHVzaCBwb2ludCAoc2VlIGFib3ZlIHRoZQotICAgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZSB3aXRoIFpfRlVMTF9GTFVTSCkgY2FuIGJlIGZvdW5kLCBvciB1bnRpbCBhbGwKKyAgICAgU2tpcHMgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgdW50aWwgYSBwb3NzaWJsZSBmdWxsIGZsdXNoIHBvaW50IChzZWUgYWJvdmUKKyAgIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZSB3aXRoIFpfRlVMTF9GTFVTSCkgY2FuIGJlIGZvdW5kLCBvciB1bnRpbCBhbGwKICAgIGF2YWlsYWJsZSBpbnB1dCBpcyBza2lwcGVkLiAgTm8gb3V0cHV0IGlzIHByb3ZpZGVkLgogCi0gICAgIGluZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsIFpfQlVGX0VSUk9SCi0gICBpZiBubyBtb3JlIGlucHV0IHdhcyBwcm92aWRlZCwgWl9EQVRBX0VSUk9SIGlmIG5vIGZsdXNoIHBvaW50IGhhcyBiZWVuCi0gICBmb3VuZCwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4gIEluIHRoZQotICAgc3VjY2VzcyBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdG90YWxfaW4KLSAgIHdoaWNoIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiAgSW4gdGhlIGVycm9yIGNhc2UsCi0gICB0aGUgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2FsbCBpbmZsYXRlU3luYywgcHJvdmlkaW5nIG1vcmUgaW5wdXQgZWFjaAotICAgdGltZSwgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCisgICAgIGluZmxhdGVTeW5jIHNlYXJjaGVzIGZvciBhIDAwIDAwIEZGIEZGIHBhdHRlcm4gaW4gdGhlIGNvbXByZXNzZWQgZGF0YS4KKyAgIEFsbCBmdWxsIGZsdXNoIHBvaW50cyBoYXZlIHRoaXMgcGF0dGVybiwgYnV0IG5vdCBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcworICAgcGF0dGVybiBhcmUgZnVsbCBmbHVzaCBwb2ludHMuCisKKyAgICAgaW5mbGF0ZVN5bmMgcmV0dXJucyBaX09LIGlmIGEgcG9zc2libGUgZnVsbCBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwKKyAgIFpfQlVGX0VSUk9SIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCBaX0RBVEFfRVJST1IgaWYgbm8gZmx1c2ggcG9pbnQKKyAgIGhhcyBiZWVuIGZvdW5kLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50LgorICAgSW4gdGhlIHN1Y2Nlc3MgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSBzYXZlIHRoZSBjdXJyZW50IGN1cnJlbnQgdmFsdWUgb2YKKyAgIHRvdGFsX2luIHdoaWNoIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiAgSW4gdGhlCisgICBlcnJvciBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2FsbCBpbmZsYXRlU3luYywgcHJvdmlkaW5nIG1vcmUKKyAgIGlucHV0IGVhY2ggdGltZSwgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVDb3B5IE9GKCh6X3N0cmVhbXAgZGVzdCwKQEAgLTk2MiwxMiArMTAxNywxMyBAQAogICAgICBTZWUgaW5mbGF0ZUJhY2soKSBmb3IgdGhlIHVzYWdlIG9mIHRoZXNlIHJvdXRpbmVzLgogCiAgICAgIGluZmxhdGVCYWNrSW5pdCB3aWxsIHJldHVybiBaX09LIG9uIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGFueSBvZgotICAgdGhlIHBhcmFtYXRlcnMgYXJlIGludmFsaWQsIFpfTUVNX0VSUk9SIGlmIHRoZSBpbnRlcm5hbCBzdGF0ZSBjb3VsZCBub3QgYmUKKyAgIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLCBaX01FTV9FUlJPUiBpZiB0aGUgaW50ZXJuYWwgc3RhdGUgY291bGQgbm90IGJlCiAgICBhbGxvY2F0ZWQsIG9yIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBkb2VzIG5vdCBtYXRjaAogICAgdGhlIHZlcnNpb24gb2YgdGhlIGhlYWRlciBmaWxlLgogKi8KIAotdHlwZWRlZiB1bnNpZ25lZCAoKmluX2Z1bmMpIE9GKCh2b2lkIEZBUiAqLCB1bnNpZ25lZCBjaGFyIEZBUiAqIEZBUiAqKSk7Cit0eXBlZGVmIHVuc2lnbmVkICgqaW5fZnVuYykgT0YoKHZvaWQgRkFSICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiBGQVIgKikpOwogdHlwZWRlZiBpbnQgKCpvdXRfZnVuYykgT0YoKHZvaWQgRkFSICosIHVuc2lnbmVkIGNoYXIgRkFSICosIHVuc2lnbmVkKSk7CiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2sgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtOTc1LDExICsxMDMxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZnVuYyBvdXQsIHZvaWQgRkFSICpvdXRfZGVzYykpOwogLyoKICAgICAgaW5mbGF0ZUJhY2soKSBkb2VzIGEgcmF3IGluZmxhdGUgd2l0aCBhIHNpbmdsZSBjYWxsIHVzaW5nIGEgY2FsbC1iYWNrCi0gICBpbnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gaW5mbGF0ZSgpIGZvcgotICAgZmlsZSBpL28gYXBwbGljYXRpb25zIGluIHRoYXQgaXQgYXZvaWRzIGNvcHlpbmcgYmV0d2VlbiB0aGUgb3V0cHV0IGFuZCB0aGUKLSAgIHNsaWRpbmcgd2luZG93IGJ5IHNpbXBseSBtYWtpbmcgdGhlIHdpbmRvdyBpdHNlbGYgdGhlIG91dHB1dCBidWZmZXIuICBUaGlzCi0gICBmdW5jdGlvbiB0cnVzdHMgdGhlIGFwcGxpY2F0aW9uIHRvIG5vdCBjaGFuZ2UgdGhlIG91dHB1dCBidWZmZXIgcGFzc2VkIGJ5Ci0gICB0aGUgb3V0cHV0IGZ1bmN0aW9uLCBhdCBsZWFzdCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCisgICBpbnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlzIGlzIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IHRoYW4KKyAgIGluZmxhdGUoKSBmb3IgZmlsZSBpL28gYXBwbGljYXRpb25zLCBpbiB0aGF0IGl0IGF2b2lkcyBjb3B5aW5nIGJldHdlZW4gdGhlCisgICBvdXRwdXQgYW5kIHRoZSBzbGlkaW5nIHdpbmRvdyBieSBzaW1wbHkgbWFraW5nIHRoZSB3aW5kb3cgaXRzZWxmIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlci4gIGluZmxhdGUoKSBjYW4gYmUgZmFzdGVyIG9uIG1vZGVybiBDUFVzIHdoZW4gdXNlZCB3aXRoIGxhcmdlCisgICBidWZmZXJzLiAgaW5mbGF0ZUJhY2soKSB0cnVzdHMgdGhlIGFwcGxpY2F0aW9uIHRvIG5vdCBjaGFuZ2UgdGhlIG91dHB1dAorICAgYnVmZmVyIHBhc3NlZCBieSB0aGUgb3V0cHV0IGZ1bmN0aW9uLCBhdCBsZWFzdCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCiAKICAgICAgaW5mbGF0ZUJhY2tJbml0KCkgbXVzdCBiZSBjYWxsZWQgZmlyc3QgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlCiAgICBhbmQgdG8gaW5pdGlhbGl6ZSB0aGUgc3RhdGUgd2l0aCB0aGUgdXNlci1wcm92aWRlZCB3aW5kb3cgYnVmZmVyLgpAQCAtMTA4OCw2ICsxMTQ1LDcgQEAKICAgICAgMjctMzE6IDAgKHJlc2VydmVkKQogICovCiAKKyNpZm5kZWYgWl9TT0xPCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHV0aWxpdHkgZnVuY3Rpb25zICovCiAKQEAgLTExNDksMTAgKzEyMDcsMTEgQEAKIAogICAgICB1bmNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CiAgICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKLSAgIGJ1ZmZlciwgb3IgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQgb3IgaW5jb21wbGV0ZS4KKyAgIGJ1ZmZlciwgb3IgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQgb3IgaW5jb21wbGV0ZS4gIEluCisgICB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20sIHVuY29tcHJlc3MoKSB3aWxsIGZpbGwgdGhlIG91dHB1dAorICAgYnVmZmVyIHdpdGggdGhlIHVuY29tcHJlc3NlZCBkYXRhIHVwIHRvIHRoYXQgcG9pbnQuCiAqLwogCi0KICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd6aXAgZmlsZSBhY2Nlc3MgZnVuY3Rpb25zICovCiAKIC8qCkBAIC0xMTYyLDcgKzEyMjEsNyBAQAogICAgd3JhcHBlciwgZG9jdW1lbnRlZCBpbiBSRkMgMTk1Miwgd3JhcHBlZCBhcm91bmQgYSBkZWZsYXRlIHN0cmVhbS4KICovCiAKLXR5cGVkZWYgdm9pZHAgZ3pGaWxlOyAgICAgICAvKiBvcGFxdWUgZ3ppcCBmaWxlIGRlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IGd6RmlsZV9zICpnekZpbGU7ICAgIC8qIHNlbWktb3BhcXVlIGd6aXAgZmlsZSBkZXNjcmlwdG9yICovCiAKIC8qCiBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbiBPRigoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkpOwpAQCAtMTE3MiwxMyArMTIzMSwyOCBAQAogICAgYSBzdHJhdGVneTogJ2YnIGZvciBmaWx0ZXJlZCBkYXRhIGFzIGluICJ3YjZmIiwgJ2gnIGZvciBIdWZmbWFuLW9ubHkKICAgIGNvbXByZXNzaW9uIGFzIGluICJ3YjFoIiwgJ1InIGZvciBydW4tbGVuZ3RoIGVuY29kaW5nIGFzIGluICJ3YjFSIiwgb3IgJ0YnCiAgICBmb3IgZml4ZWQgY29kZSBjb21wcmVzc2lvbiBhcyBpbiAid2I5RiIuICAoU2VlIHRoZSBkZXNjcmlwdGlvbiBvZgotICAgZGVmbGF0ZUluaXQyIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKSBBbHNvICJhIgotICAgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAidyIgdG8gcmVxdWVzdCB0aGF0IHRoZSBnemlwIHN0cmVhbSB0aGF0IHdpbGwgYmUKLSAgIHdyaXR0ZW4gYmUgYXBwZW5kZWQgdG8gdGhlIGZpbGUuICAiKyIgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IsIHNpbmNlIHJlYWRpbmcKLSAgIGFuZCB3cml0aW5nIHRvIHRoZSBzYW1lIGd6aXAgZmlsZSBpcyBub3Qgc3VwcG9ydGVkLgorICAgZGVmbGF0ZUluaXQyIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKSAgJ1QnIHdpbGwKKyAgIHJlcXVlc3QgdHJhbnNwYXJlbnQgd3JpdGluZyBvciBhcHBlbmRpbmcgd2l0aCBubyBjb21wcmVzc2lvbiBhbmQgbm90IHVzaW5nCisgICB0aGUgZ3ppcCBmb3JtYXQuCisKKyAgICAgImEiIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgInciIHRvIHJlcXVlc3QgdGhhdCB0aGUgZ3ppcCBzdHJlYW0gdGhhdCB3aWxsCisgICBiZSB3cml0dGVuIGJlIGFwcGVuZGVkIHRvIHRoZSBmaWxlLiAgIisiIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLCBzaW5jZQorICAgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUgc2FtZSBnemlwIGZpbGUgaXMgbm90IHN1cHBvcnRlZC4gIFRoZSBhZGRpdGlvbiBvZgorICAgIngiIHdoZW4gd3JpdGluZyB3aWxsIGNyZWF0ZSB0aGUgZmlsZSBleGNsdXNpdmVseSwgd2hpY2ggZmFpbHMgaWYgdGhlIGZpbGUKKyAgIGFscmVhZHkgZXhpc3RzLiAgT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQsIHRoZSBhZGRpdGlvbiBvZiAiZSIgd2hlbgorICAgcmVhZGluZyBvciB3cml0aW5nIHdpbGwgc2V0IHRoZSBmbGFnIHRvIGNsb3NlIHRoZSBmaWxlIG9uIGFuIGV4ZWN2ZSgpIGNhbGwuCisKKyAgICAgVGhlc2UgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIGd6aXAsIHdpbGwgcmVhZCBhbmQgZGVjb2RlIGEgc2VxdWVuY2Ugb2YgZ3ppcAorICAgc3RyZWFtcyBpbiBhIGZpbGUuICBUaGUgYXBwZW5kIGZ1bmN0aW9uIG9mIGd6b3BlbigpIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZQorICAgc3VjaCBhIGZpbGUuICAoQWxzbyBzZWUgZ3pmbHVzaCgpIGZvciBhbm90aGVyIHdheSB0byBkbyB0aGlzLikgIFdoZW4KKyAgIGFwcGVuZGluZywgZ3pvcGVuIGRvZXMgbm90IHRlc3Qgd2hldGhlciB0aGUgZmlsZSBiZWdpbnMgd2l0aCBhIGd6aXAgc3RyZWFtLAorICAgbm9yIGRvZXMgaXQgbG9vayBmb3IgdGhlIGVuZCBvZiB0aGUgZ3ppcCBzdHJlYW1zIHRvIGJlZ2luIGFwcGVuZGluZy4gIGd6b3BlbgorICAgd2lsbCBzaW1wbHkgYXBwZW5kIGEgZ3ppcCBzdHJlYW0gdG8gdGhlIGV4aXN0aW5nIGZpbGUuCiAKICAgICAgZ3pvcGVuIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBmaWxlIHdoaWNoIGlzIG5vdCBpbiBnemlwIGZvcm1hdDsgaW4gdGhpcwotICAgY2FzZSBnenJlYWQgd2lsbCBkaXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLgorICAgY2FzZSBnenJlYWQgd2lsbCBkaXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLiAgV2hlbgorICAgcmVhZGluZywgdGhpcyB3aWxsIGJlIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgbG9va2luZyBmb3IgdGhlIG1hZ2ljIHR3by0KKyAgIGJ5dGUgZ3ppcCBoZWFkZXIuCiAKICAgICAgZ3pvcGVuIHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLCBpZiB0aGVyZSB3YXMKICAgIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIGd6RmlsZSBzdGF0ZSwgb3IgaWYgYW4gaW52YWxpZCBtb2RlIHdhcwpAQCAtMTE5Nyw3ICsxMjcxLDExIEBACiAgICBkZXNjcmlwdG9yIGZkLCBqdXN0IGxpa2UgZmNsb3NlKGZkb3BlbihmZCwgbW9kZSkpIGNsb3NlcyB0aGUgZmlsZSBkZXNjcmlwdG9yCiAgICBmZC4gIElmIHlvdSB3YW50IHRvIGtlZXAgZmQgb3BlbiwgdXNlIGZkID0gZHVwKGZkX2tlZXApOyBneiA9IGd6ZG9wZW4oZmQsCiAgICBtb2RlKTsuICBUaGUgZHVwbGljYXRlZCBkZXNjcmlwdG9yIHNob3VsZCBiZSBzYXZlZCB0byBhdm9pZCBhIGxlYWssIHNpbmNlCi0gICBnemRvcGVuIGRvZXMgbm90IGNsb3NlIGZkIGlmIGl0IGZhaWxzLgorICAgZ3pkb3BlbiBkb2VzIG5vdCBjbG9zZSBmZCBpZiBpdCBmYWlscy4gIElmIHlvdSBhcmUgdXNpbmcgZmlsZW5vKCkgdG8gZ2V0IHRoZQorICAgZmlsZSBkZXNjcmlwdG9yIGZyb20gYSBGSUxFICosIHRoZW4geW91IHdpbGwgaGF2ZSB0byB1c2UgZHVwKCkgdG8gYXZvaWQKKyAgIGRvdWJsZS1jbG9zZSgpaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IuICBCb3RoIGd6Y2xvc2UoKSBhbmQgZmNsb3NlKCkgd2lsbAorICAgY2xvc2UgdGhlIGFzc29jaWF0ZWQgZmlsZSBkZXNjcmlwdG9yLCBzbyB0aGV5IG5lZWQgdG8gaGF2ZSBkaWZmZXJlbnQgZmlsZQorICAgZGVzY3JpcHRvcnMuCiAKICAgICAgZ3pkb3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlCiAgICBnekZpbGUgc3RhdGUsIGlmIGFuIGludmFsaWQgbW9kZSB3YXMgc3BlY2lmaWVkIChhbiAncicsICd3Jywgb3IgJ2EnIHdhcyBub3QKQEAgLTEyMzUsMTQgKzEzMTMsMjYgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pyZWFkIE9GKChnekZpbGUgZmlsZSwgdm9pZHAgYnVmLCB1bnNpZ25lZCBsZW4pKTsKIC8qCiAgICAgIFJlYWRzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gIElmCi0gICB0aGUgaW5wdXQgZmlsZSB3YXMgbm90IGluIGd6aXAgZm9ybWF0LCBnenJlYWQgY29waWVzIHRoZSBnaXZlbiBudW1iZXIgb2YKLSAgIGJ5dGVzIGludG8gdGhlIGJ1ZmZlci4KKyAgIHRoZSBpbnB1dCBmaWxlIGlzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mCisgICBieXRlcyBpbnRvIHRoZSBidWZmZXIgZGlyZWN0bHkgZnJvbSB0aGUgZmlsZS4KIAogICAgICBBZnRlciByZWFjaGluZyB0aGUgZW5kIG9mIGEgZ3ppcCBzdHJlYW0gaW4gdGhlIGlucHV0LCBnenJlYWQgd2lsbCBjb250aW51ZQotICAgdG8gcmVhZCwgbG9va2luZyBmb3IgYW5vdGhlciBnemlwIHN0cmVhbSwgb3IgZmFpbGluZyB0aGF0LCByZWFkaW5nIHRoZSByZXN0Ci0gICBvZiB0aGUgaW5wdXQgZmlsZSBkaXJlY3RseSB3aXRob3V0IGRlY29tcHJlc3Npb24uICBUaGUgZW50aXJlIGlucHV0IGZpbGUKLSAgIHdpbGwgYmUgcmVhZCBpZiBnenJlYWQgaXMgY2FsbGVkIHVudGlsIGl0IHJldHVybnMgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQKLSAgIGxlbi4KKyAgIHRvIHJlYWQsIGxvb2tpbmcgZm9yIGFub3RoZXIgZ3ppcCBzdHJlYW0uICBBbnkgbnVtYmVyIG9mIGd6aXAgc3RyZWFtcyBtYXkgYmUKKyAgIGNvbmNhdGVuYXRlZCBpbiB0aGUgaW5wdXQgZmlsZSwgYW5kIHdpbGwgYWxsIGJlIGRlY29tcHJlc3NlZCBieSBnenJlYWQoKS4KKyAgIElmIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZ3ppcCBzdHJlYW0gaXMgZW5jb3VudGVyZWQgYWZ0ZXIgYSBnemlwIHN0cmVhbSwKKyAgIHRoYXQgcmVtYWluaW5nIHRyYWlsaW5nIGdhcmJhZ2UgaXMgaWdub3JlZCAoYW5kIG5vIGVycm9yIGlzIHJldHVybmVkKS4KKworICAgICBnenJlYWQgY2FuIGJlIHVzZWQgdG8gcmVhZCBhIGd6aXAgZmlsZSB0aGF0IGlzIGJlaW5nIGNvbmN1cnJlbnRseSB3cml0dGVuLgorICAgVXBvbiByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBpbnB1dCwgZ3pyZWFkIHdpbGwgcmV0dXJuIHdpdGggdGhlIGF2YWlsYWJsZQorICAgZGF0YS4gIElmIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGd6ZXJyb3IgaXMgWl9PSyBvciBaX0JVRl9FUlJPUiwgdGhlbgorICAgZ3pjbGVhcmVyciBjYW4gYmUgdXNlZCB0byBjbGVhciB0aGUgZW5kIG9mIGZpbGUgaW5kaWNhdG9yIGluIG9yZGVyIHRvIHBlcm1pdAorICAgZ3pyZWFkIHRvIGJlIHRyaWVkIGFnYWluLiAgWl9PSyBpbmRpY2F0ZXMgdGhhdCBhIGd6aXAgc3RyZWFtIHdhcyBjb21wbGV0ZWQKKyAgIG9uIHRoZSBsYXN0IGd6cmVhZC4gIFpfQlVGX0VSUk9SIGluZGljYXRlcyB0aGF0IHRoZSBpbnB1dCBmaWxlIGVuZGVkIGluIHRoZQorICAgbWlkZGxlIG9mIGEgZ3ppcCBzdHJlYW0uICBOb3RlIHRoYXQgZ3pyZWFkIGRvZXMgbm90IHJldHVybiAtMSBpbiB0aGUgZXZlbnQKKyAgIG9mIGFuIGluY29tcGxldGUgZ3ppcCBzdHJlYW0uICBUaGlzIGVycm9yIGlzIGRlZmVycmVkIHVudGlsIGd6Y2xvc2UoKSwgd2hpY2gKKyAgIHdpbGwgcmV0dXJuIFpfQlVGX0VSUk9SIGlmIHRoZSBsYXN0IGd6cmVhZCBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgZ3ppcAorICAgc3RyZWFtLiAgQWx0ZXJuYXRpdmVseSwgZ3plcnJvciBjYW4gYmUgdXNlZCBiZWZvcmUgZ3pjbG9zZSB0byBkZXRlY3QgdGhpcworICAgY2FzZS4KIAogICAgICBnenJlYWQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSByZWFkLCBsZXNzIHRoYW4KICAgIGxlbiBmb3IgZW5kIG9mIGZpbGUsIG9yIC0xIGZvciBlcnJvci4KQEAgLTEyNTYsNyArMTM0Niw3IEBACiAgICBlcnJvci4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlRWQSBnenByaW50ZiBPRigoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CitaRVhURVJOIGludCBaRVhQT1JUVkEgZ3pwcmludGYgWl9BUkcoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOwogLyoKICAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFuZCB3cml0ZXMgdGhlIGFyZ3VtZW50cyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIHVuZGVyCiAgICBjb250cm9sIG9mIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBpbiBmcHJpbnRmLiAgZ3pwcmludGYgcmV0dXJucyB0aGUgbnVtYmVyIG9mCkBAIC0xMzAxLDcgKzEzOTEsMTAgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjIE9GKChnekZpbGUgZmlsZSkpOwogLyoKICAgICAgUmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiAgZ3pnZXRjIHJldHVybnMgdGhpcyBieXRlIG9yIC0xCi0gICBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLgorICAgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBtYWNybyBmb3Igc3BlZWQuCisgICBBcyBzdWNoLCBpdCBkb2VzIG5vdCBkbyBhbGwgb2YgdGhlIGNoZWNraW5nIHRoZSBvdGhlciBmdW5jdGlvbnMgZG8uICBJLmUuCisgICBpdCBkb2VzIG5vdCBjaGVjayB0byBzZWUgaWYgZmlsZSBpcyBOVUxMLCBub3Igd2hldGhlciB0aGUgc3RydWN0dXJlIGZpbGUKKyAgIHBvaW50cyB0byBoYXMgYmVlbiBjbG9iYmVyZWQgb3Igbm90LgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnenVuZ2V0YyBPRigoaW50IGMsIGd6RmlsZSBmaWxlKSk7CkBAIC0xMzk3LDkgKzE0OTAsNyBAQAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnemRpcmVjdCBPRigoZ3pGaWxlIGZpbGUpKTsKIC8qCiAgICAgIFJldHVybnMgdHJ1ZSAoMSkgaWYgZmlsZSBpcyBiZWluZyBjb3BpZWQgZGlyZWN0bHkgd2hpbGUgcmVhZGluZywgb3IgZmFsc2UKLSAgICgwKSBpZiBmaWxlIGlzIGEgZ3ppcCBzdHJlYW0gYmVpbmcgZGVjb21wcmVzc2VkLiAgVGhpcyBzdGF0ZSBjYW4gY2hhbmdlIGZyb20KLSAgIGZhbHNlIHRvIHRydWUgd2hpbGUgcmVhZGluZyB0aGUgaW5wdXQgZmlsZSBpZiB0aGUgZW5kIG9mIGEgZ3ppcCBzdHJlYW0gaXMKLSAgIHJlYWNoZWQsIGJ1dCBpcyBmb2xsb3dlZCBieSBkYXRhIHRoYXQgaXMgbm90IGFub3RoZXIgZ3ppcCBzdHJlYW0uCisgICAoMCkgaWYgZmlsZSBpcyBhIGd6aXAgc3RyZWFtIGJlaW5nIGRlY29tcHJlc3NlZC4KIAogICAgICBJZiB0aGUgaW5wdXQgZmlsZSBpcyBlbXB0eSwgZ3pkaXJlY3QoKSB3aWxsIHJldHVybiB0cnVlLCBzaW5jZSB0aGUgaW5wdXQKICAgIGRvZXMgbm90IGNvbnRhaW4gYSBnemlwIHN0cmVhbS4KQEAgLTE0MDgsNiArMTQ5OSwxMyBAQAogICAgY2F1c2UgYnVmZmVycyB0byBiZSBhbGxvY2F0ZWQgdG8gYWxsb3cgcmVhZGluZyB0aGUgZmlsZSB0byBkZXRlcm1pbmUgaWYgaXQKICAgIGlzIGEgZ3ppcCBmaWxlLiAgVGhlcmVmb3JlIGlmIGd6YnVmZmVyKCkgaXMgdXNlZCwgaXQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKICAgIGd6ZGlyZWN0KCkuCisKKyAgICAgV2hlbiB3cml0aW5nLCBnemRpcmVjdCgpIHJldHVybnMgdHJ1ZSAoMSkgaWYgdHJhbnNwYXJlbnQgd3JpdGluZyB3YXMKKyAgIHJlcXVlc3RlZCAoIndUIiBmb3IgdGhlIGd6b3BlbigpIG1vZGUpLCBvciBmYWxzZSAoMCkgb3RoZXJ3aXNlLiAgKE5vdGU6CisgICBnemRpcmVjdCgpIGlzIG5vdCBuZWVkZWQgd2hlbiB3cml0aW5nLiAgVHJhbnNwYXJlbnQgd3JpdGluZyBtdXN0IGJlCisgICBleHBsaWNpdGx5IHJlcXVlc3RlZCwgc28gdGhlIGFwcGxpY2F0aW9uIGFscmVhZHkga25vd3MgdGhlIGFuc3dlci4gIFdoZW4KKyAgIGxpbmtpbmcgc3RhdGljYWxseSwgdXNpbmcgZ3pkaXJlY3QoKSB3aWxsIGluY2x1ZGUgYWxsIG9mIHRoZSB6bGliIGNvZGUgZm9yCisgICBnemlwIGZpbGUgcmVhZGluZyBhbmQgZGVjb21wcmVzc2lvbiwgd2hpY2ggbWF5IG5vdCBiZSBkZXNpcmVkLikKICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pjbG9zZSBPRigoZ3pGaWxlIGZpbGUpKTsKQEAgLTE0MTksNyArMTUxNyw4IEBACiAgICBtdXN0IG5vdCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYWxsb2NhdGlvbi4KIAogICAgICBnemNsb3NlIHdpbGwgcmV0dXJuIFpfU1RSRUFNX0VSUk9SIGlmIGZpbGUgaXMgbm90IHZhbGlkLCBaX0VSUk5PIG9uIGEKLSAgIGZpbGUgb3BlcmF0aW9uIGVycm9yLCBvciBaX09LIG9uIHN1Y2Nlc3MuCisgICBmaWxlIG9wZXJhdGlvbiBlcnJvciwgWl9NRU1fRVJST1IgaWYgb3V0IG9mIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlCisgICBsYXN0IHJlYWQgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGd6aXAgc3RyZWFtLCBvciBaX09LIG9uIHN1Y2Nlc3MuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGd6Y2xvc2VfciBPRigoZ3pGaWxlIGZpbGUpKTsKQEAgLTE0NTcsNiArMTU1Niw3IEBACiAgICBmaWxlIHRoYXQgaXMgYmVpbmcgd3JpdHRlbiBjb25jdXJyZW50bHkuCiAqLwogCisjZW5kaWYgLyogIVpfU09MTyAqLwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVja3N1bSBmdW5jdGlvbnMgKi8KIApAQCAtMTQ5MiwxNiArMTU5MiwxNyBAQAogICAgICBDb21iaW5lIHR3byBBZGxlci0zMiBjaGVja3N1bXMgaW50byBvbmUuICBGb3IgdHdvIHNlcXVlbmNlcyBvZiBieXRlcywgc2VxMQogICAgYW5kIHNlcTIgd2l0aCBsZW5ndGhzIGxlbjEgYW5kIGxlbjIsIEFkbGVyLTMyIGNoZWNrc3VtcyB3ZXJlIGNhbGN1bGF0ZWQgZm9yCiAgICBlYWNoLCBhZGxlcjEgYW5kIGFkbGVyMi4gIGFkbGVyMzJfY29tYmluZSgpIHJldHVybnMgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mCi0gICBzZXExIGFuZCBzZXEyIGNvbmNhdGVuYXRlZCwgcmVxdWlyaW5nIG9ubHkgYWRsZXIxLCBhZGxlcjIsIGFuZCBsZW4yLgorICAgc2VxMSBhbmQgc2VxMiBjb25jYXRlbmF0ZWQsIHJlcXVpcmluZyBvbmx5IGFkbGVyMSwgYWRsZXIyLCBhbmQgbGVuMi4gIE5vdGUKKyAgIHRoYXQgdGhlIHpfb2ZmX3QgdHlwZSAobGlrZSBvZmZfdCkgaXMgYSBzaWduZWQgaW50ZWdlci4gIElmIGxlbjIgaXMKKyAgIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGhhcyBubyBtZWFuaW5nIG9yIHV0aWxpdHkuCiAqLwogCiBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzIgICBPRigodUxvbmcgY3JjLCBjb25zdCBCeXRlZiAqYnVmLCB1SW50IGxlbikpOwogLyoKICAgICAgVXBkYXRlIGEgcnVubmluZyBDUkMtMzIgd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQgcmV0dXJuIHRoZQogICAgdXBkYXRlZCBDUkMtMzIuICBJZiBidWYgaXMgWl9OVUxMLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVpcmVkCi0gICBpbml0aWFsIHZhbHVlIGZvciB0aGUgZm9yIHRoZSBjcmMuICBQcmUtIGFuZCBwb3N0LWNvbmRpdGlvbmluZyAob25lJ3MKLSAgIGNvbXBsZW1lbnQpIGlzIHBlcmZvcm1lZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgZG9uZSBieSB0aGUKLSAgIGFwcGxpY2F0aW9uLgorICAgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNyYy4gIFByZS0gYW5kIHBvc3QtY29uZGl0aW9uaW5nIChvbmUncyBjb21wbGVtZW50KSBpcworICAgcGVyZm9ybWVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIHNvIGl0IHNob3VsZG4ndCBiZSBkb25lIGJ5IHRoZSBhcHBsaWNhdGlvbi4KIAogICAgVXNhZ2UgZXhhbXBsZToKIApAQCAtMTU0NCwxNyArMTY0NSw0MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZWFtX3NpemUpKTsKICNkZWZpbmUgZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwpIFwKLSAgICAgICAgZGVmbGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICBkZWZsYXRlSW5pdF8oKHN0cm0pLCAobGV2ZWwpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgaW5mbGF0ZUluaXQoc3RybSkgXAotICAgICAgICBpbmZsYXRlSW5pdF8oKHN0cm0pLCAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSBcCiAgICAgICAgIGRlZmxhdGVJbml0Ml8oKHN0cm0pLChsZXZlbCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXAotICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgICAgICAgICAgICAgICAgKHN0cmF0ZWd5KSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCiAjZGVmaW5lIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSBcCi0gICAgICAgIGluZmxhdGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgaW5mbGF0ZUluaXQyXygoc3RybSksICh3aW5kb3dCaXRzKSwgWkxJQl9WRVJTSU9OLCBcCisgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBpbmZsYXRlQmFja0luaXQoc3RybSwgd2luZG93Qml0cywgd2luZG93KSBcCiAgICAgICAgIGluZmxhdGVCYWNrSW5pdF8oKHN0cm0pLCAod2luZG93Qml0cyksICh3aW5kb3cpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKworI2lmbmRlZiBaX1NPTE8KKworLyogZ3pnZXRjKCkgbWFjcm8gYW5kIGl0cyBzdXBwb3J0aW5nIGZ1bmN0aW9uIGFuZCBleHBvc2VkIGRhdGEgc3RydWN0dXJlLiAgTm90ZQorICogdGhhdCB0aGUgcmVhbCBpbnRlcm5hbCBzdGF0ZSBpcyBtdWNoIGxhcmdlciB0aGFuIHRoZSBleHBvc2VkIHN0cnVjdHVyZS4KKyAqIFRoaXMgYWJicmV2aWF0ZWQgc3RydWN0dXJlIGV4cG9zZXMganVzdCBlbm91Z2ggZm9yIHRoZSBnemdldGMoKSBtYWNyby4gIFRoZQorICogdXNlciBzaG91bGQgbm90IG1lc3Mgd2l0aCB0aGVzZSBleHBvc2VkIGVsZW1lbnRzLCBzaW5jZSB0aGVpciBuYW1lcyBvcgorICogYmVoYXZpb3IgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUsIHBlcmhhcHMgZXZlbiBjYXByaWNpb3VzbHkuICBUaGV5IGNhbgorICogb25seSBiZSB1c2VkIGJ5IHRoZSBnemdldGMoKSBtYWNyby4gIFlvdSBoYXZlIGJlZW4gd2FybmVkLgorICovCitzdHJ1Y3QgZ3pGaWxlX3MgeworICAgIHVuc2lnbmVkIGhhdmU7CisgICAgdW5zaWduZWQgY2hhciAqbmV4dDsKKyAgICB6X29mZjY0X3QgcG9zOworfTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjXyBPRigoZ3pGaWxlIGZpbGUpKTsgIC8qIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyNpZmRlZiBaX1BSRUZJWF9TRVQKKyMgIHVuZGVmIHpfZ3pnZXRjCisjICBkZWZpbmUgel9nemdldGMoZykgXAorICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0sIChnKS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IGd6Z2V0YyhnKSkKKyNlbHNlCisjICBkZWZpbmUgZ3pnZXRjKGcpIFwKKyAgICAgICAgICAoKGcpLT5oYXZlID8gKChnKS0+aGF2ZS0tLCAoZyktPnBvcysrLCAqKChnKS0+bmV4dCkrKykgOiBnemdldGMoZykpCisjZW5kaWYKIAogLyogcHJvdmlkZSA2NC1iaXQgb2Zmc2V0IGZ1bmN0aW9ucyBpZiBfTEFSR0VGSUxFNjRfU09VUkNFIGRlZmluZWQsIGFuZC9vcgogICogY2hhbmdlIHRoZSByZWd1bGFyIGZ1bmN0aW9ucyB0byA2NCBiaXRzIGlmIF9GSUxFX09GRlNFVF9CSVRTIGlzIDY0IChpZgpAQCAtMTU2Miw3ICsxNjg4LDcgQEAKICAqIGZ1bmN0aW9ucyBhcmUgY2hhbmdlZCB0byA2NCBiaXRzKSAtLSBpbiBjYXNlIHRoZXNlIGFyZSBzZXQgb24gc3lzdGVtcwogICogd2l0aG91dCBsYXJnZSBmaWxlIHN1cHBvcnQsIF9MRlM2NF9MQVJHRUZJTEUgbXVzdCBhbHNvIGJlIHRydWUKICAqLwotI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjaWZkZWYgWl9MQVJHRTY0CiAgICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbjY0IE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOwogICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenNlZWs2NCBPRigoZ3pGaWxlLCB6X29mZjY0X3QsIGludCkpOwogICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CkBAIC0xNTcxLDE0ICsxNjk3LDIzIEBACiAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmNjRfdCkpOwogI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChaTElCX0lOVEVSTkFMKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIF9MRlM2NF9MQVJHRUZJTEUtMAotIyAgZGVmaW5lIGd6b3BlbiBnem9wZW42NAotIyAgZGVmaW5lIGd6c2VlayBnenNlZWs2NAotIyAgZGVmaW5lIGd6dGVsbCBnenRlbGw2NAotIyAgZGVmaW5lIGd6b2Zmc2V0IGd6b2Zmc2V0NjQKLSMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjcmMzMl9jb21iaW5lIGNyYzMyX2NvbWJpbmU2NAotIyAgaWZkZWYgX0xBUkdFRklMRTY0X1NPVVJDRQorI2lmICFkZWZpbmVkKFpMSUJfSU5URVJOQUwpICYmIGRlZmluZWQoWl9XQU5UNjQpCisjICBpZmRlZiBaX1BSRUZJWF9TRVQKKyMgICAgZGVmaW5lIHpfZ3pvcGVuIHpfZ3pvcGVuNjQKKyMgICAgZGVmaW5lIHpfZ3pzZWVrIHpfZ3pzZWVrNjQKKyMgICAgZGVmaW5lIHpfZ3p0ZWxsIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIHpfZ3pvZmZzZXQgel9nem9mZnNldDY0CisjICAgIGRlZmluZSB6X2FkbGVyMzJfY29tYmluZSB6X2FkbGVyMzJfY29tYmluZTY0CisjICAgIGRlZmluZSB6X2NyYzMyX2NvbWJpbmUgel9jcmMzMl9jb21iaW5lNjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIGd6b3BlbiBnem9wZW42NAorIyAgICBkZWZpbmUgZ3pzZWVrIGd6c2VlazY0CisjICAgIGRlZmluZSBnenRlbGwgZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0IGd6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSBhZGxlcjMyX2NvbWJpbmU2NAorIyAgICBkZWZpbmUgY3JjMzJfY29tYmluZSBjcmMzMl9jb21iaW5lNjQKKyMgIGVuZGlmCisjICBpZm5kZWYgWl9MQVJHRTY0CiAgICAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuNjQgT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CiAgICAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6c2VlazY0IE9GKChnekZpbGUsIHpfb2ZmX3QsIGludCkpOwogICAgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CkBAIC0xNTk1LDYgKzE3MzAsMTMgQEAKICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICNlbmRpZgogCisjZWxzZSAvKiBaX1NPTE8gKi8KKworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisKKyNlbmRpZiAvKiAhWl9TT0xPICovCisKIC8qIGhhY2sgZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwogI2lmICFkZWZpbmVkKFpVVElMX0gpICYmICFkZWZpbmVkKE5PX0RVTU1ZX0RFQ0wpCiAgICAgc3RydWN0IGludGVybmFsX3N0YXRlIHtpbnQgZHVtbXk7fTsKQEAgLTE2MDMsOCArMTc0NSwyMSBAQAogLyogdW5kb2N1bWVudGVkIGZ1bmN0aW9ucyAqLwogWkVYVEVSTiBjb25zdCBjaGFyICAgKiBaRVhQT1JUIHpFcnJvciAgICAgICAgICAgT0YoKGludCkpOwogWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVTeW5jUG9pbnQgT0YoKHpfc3RyZWFtcCkpOwotWkVYVEVSTiBjb25zdCB1TG9uZ2YgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUgICAgT0YoKHZvaWQpKTsKK1pFWFRFUk4gY29uc3Qgel9jcmNfdCBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUgICAgT0YoKHZvaWQpKTsKIFpFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlVW5kZXJtaW5lIE9GKCh6X3N0cmVhbXAsIGludCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGRlZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChaX1NPTE8pCitaRVhURVJOIGd6RmlsZSAgICAgICAgIFpFWFBPUlQgZ3pvcGVuX3cgT0YoKGNvbnN0IHdjaGFyX3QgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCitaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlRWQSBnenZwcmludGYgWl9BUkcoKGd6RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgdmEpKTsKKyMgIGVuZGlmCisjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemxpYi5tYXAgYi9Nb2R1bGVzL3psaWIvemxpYi5tYXAKaW5kZXggZjI4MmQzNi4uNTVjNjY0NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIubWFwCisrKyBiL01vZHVsZXMvemxpYi96bGliLm1hcApAQCAtNjYsMyArNjYsMTggQEAKICAgICBnemNsb3NlX3I7CiAgICAgZ3pjbG9zZV93OwogfSBaTElCXzEuMi4zLjQ7CisKK1pMSUJfMS4yLjUuMSB7CisgICAgZGVmbGF0ZVBlbmRpbmc7Cit9IFpMSUJfMS4yLjMuNTsKKworWkxJQl8xLjIuNS4yIHsKKyAgICBkZWZsYXRlUmVzZXRLZWVwOworICAgIGd6Z2V0Y187CisgICAgaW5mbGF0ZVJlc2V0S2VlcDsKK30gWkxJQl8xLjIuNS4xOworCitaTElCXzEuMi43LjEgeworICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5OworICAgIGd6dnByaW50ZjsKK30gWkxJQl8xLjIuNS4yOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3p1dGlsLmMgYi9Nb2R1bGVzL3psaWIvenV0aWwuYwppbmRleCA4OThlZDM0Li4yM2QyZWJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvenV0aWwuYworKysgYi9Nb2R1bGVzL3psaWIvenV0aWwuYwpAQCAtMSwxNyArMSwyMCBAQAogLyogenV0aWwuYyAtLSB0YXJnZXQgZGVwZW5kZW50IHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUsIDIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1LCAyMDEwLCAyMDExLCAyMDEyIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIAogLyogQCgjKSAkSWQkICovCiAKICNpbmNsdWRlICJ6dXRpbC5oIgorI2lmbmRlZiBaX1NPTE8KKyMgIGluY2x1ZGUgImd6Z3V0cy5oIgorI2VuZGlmCiAKICNpZm5kZWYgTk9fRFVNTVlfREVDTAogc3RydWN0IGludGVybmFsX3N0YXRlICAgICAge2ludCBkdW1teTt9OyAvKiBmb3IgYnVnZ3kgY29tcGlsZXJzICovCiAjZW5kaWYKIAotY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXSA9IHsKK3pfY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXSA9IHsKICJuZWVkIGRpY3Rpb25hcnkiLCAgICAgLyogWl9ORUVEX0RJQ1QgICAgICAgMiAgKi8KICJzdHJlYW0gZW5kIiwgICAgICAgICAgLyogWl9TVFJFQU1fRU5EICAgICAgMSAgKi8KICIiLCAgICAgICAgICAgICAgICAgICAgLyogWl9PSyAgICAgICAgICAgICAgMCAgKi8KQEAgLTg1LDI3ICs4OCwyNyBAQAogI2lmZGVmIEZBU1RFU1QKICAgICBmbGFncyArPSAxTCA8PCAyMTsKICNlbmRpZgotI2lmZGVmIFNUREMKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQogIyAgaWZkZWYgTk9fdnNucHJpbnRmCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI1OworICAgIGZsYWdzICs9IDFMIDw8IDI1OwogIyAgICBpZmRlZiBIQVNfdnNwcmludGZfdm9pZAotICAgICAgICBmbGFncyArPSAxTCA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMgIGVsc2UKICMgICAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbHNlCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI0OworICAgIGZsYWdzICs9IDFMIDw8IDI0OwogIyAgaWZkZWYgTk9fc25wcmludGYKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CiAjICAgIGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBlbHNlCiAjICAgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgpAQCAtMTgxLDYgKzE4NCw3IEBACiB9CiAjZW5kaWYKIAorI2lmbmRlZiBaX1NPTE8KIAogI2lmZGVmIFNZUzE2QklUCiAKQEAgLTMxNiwzICszMjAsNSBAQAogfQogCiAjZW5kaWYgLyogTVlfWkNBTExPQyAqLworCisjZW5kaWYgLyogIVpfU09MTyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3p1dGlsLmggYi9Nb2R1bGVzL3psaWIvenV0aWwuaAppbmRleCAyNThmYTg4Li4yNGFiMDZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvenV0aWwuaAorKysgYi9Nb2R1bGVzL3psaWIvenV0aWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qIHp1dGlsLmggLS0gaW50ZXJuYWwgaW50ZXJmYWNlIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xMyw3ICsxMyw3IEBACiAjaWZuZGVmIFpVVElMX0gKICNkZWZpbmUgWlVUSUxfSAogCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykgJiYgIWRlZmluZWQoTk9fVklaKQorI2lmZGVmIEhBVkVfSElEREVOCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQogI2Vsc2UKICMgIGRlZmluZSBaTElCX0lOVEVSTkFMCkBAIC0yMSw3ICsyMSw3IEBACiAKICNpbmNsdWRlICJ6bGliLmgiCiAKLSNpZmRlZiBTVERDCisjaWYgZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBpZiAhKGRlZmluZWQoX1dJTjMyX1dDRSkgJiYgZGVmaW5lZChfTVNDX1ZFUikpCiAjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPgogIyAgZW5kaWYKQEAgLTI5LDYgKzI5LDEwIEBACiAjICBpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogCisjaWZkZWYgWl9TT0xPCisgICB0eXBlZGVmIGxvbmcgcHRyZGlmZl90OyAgLyogZ3Vlc3MgLS0gd2lsbCBiZSBjYXVnaHQgaWYgZ3Vlc3MgaXMgd3JvbmcgKi8KKyNlbmRpZgorCiAjaWZuZGVmIGxvY2FsCiAjICBkZWZpbmUgbG9jYWwgc3RhdGljCiAjZW5kaWYKQEAgLTQwLDEzICs0NCwxMyBAQAogdHlwZWRlZiB1c2ggRkFSIHVzaGY7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF07IC8qIGluZGV4ZWQgYnkgMi16bGliX2Vycm9yICovCitleHRlcm4gel9jb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdOyAvKiBpbmRleGVkIGJ5IDItemxpYl9lcnJvciAqLwogLyogKHNpemUgZ2l2ZW4gdG8gYXZvaWQgc2lsbHkgd2FybmluZ3Mgd2l0aCBWaXN1YWwgQysrKSAqLwogCiAjZGVmaW5lIEVSUl9NU0coZXJyKSB6X2Vycm1zZ1taX05FRURfRElDVC0oZXJyKV0KIAogI2RlZmluZSBFUlJfUkVUVVJOKHN0cm0sZXJyKSBcCi0gIHJldHVybiAoc3RybS0+bXNnID0gKGNoYXIqKUVSUl9NU0coZXJyKSwgKGVycikpCisgIHJldHVybiAoc3RybS0+bXNnID0gRVJSX01TRyhlcnIpLCAoZXJyKSkKIC8qIFRvIGJlIHVzZWQgb25seSB3aGVuIHRoZSBzdGF0ZSBpcyBrbm93biB0byBiZSB2YWxpZCAqLwogCiAgICAgICAgIC8qIGNvbW1vbiBjb25zdGFudHMgKi8KQEAgLTc4LDE2ICs4MiwxOCBAQAogCiAjaWYgZGVmaW5lZChNU0RPUykgfHwgKGRlZmluZWQoV0lORE9XUykgJiYgIWRlZmluZWQoV0lOMzIpKQogIyAgZGVmaW5lIE9TX0NPREUgIDB4MDAKLSMgIGlmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0jICAgIGlmIChfX1NURENfXyA9PSAxKSAmJiAoZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoX19DT01QQUNUX18pKQotICAgICAgIC8qIEFsbG93IGNvbXBpbGF0aW9uIHdpdGggQU5TSSBrZXl3b3JkcyBvbmx5IGVuYWJsZWQgKi8KLSAgICAgICB2b2lkIF9DZGVjbCBmYXJmcmVlKCB2b2lkICpibG9jayApOwotICAgICAgIHZvaWQgKl9DZGVjbCBmYXJtYWxsb2MoIHVuc2lnbmVkIGxvbmcgbmJ5dGVzICk7Ci0jICAgIGVsc2UKLSMgICAgICBpbmNsdWRlIDxhbGxvYy5oPgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpZiBkZWZpbmVkKF9fVFVSQk9DX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgICAgIGlmIChfX1NURENfXyA9PSAxKSAmJiAoZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoX19DT01QQUNUX18pKQorICAgICAgICAgLyogQWxsb3cgY29tcGlsYXRpb24gd2l0aCBBTlNJIGtleXdvcmRzIG9ubHkgZW5hYmxlZCAqLworICAgICAgICAgdm9pZCBfQ2RlY2wgZmFyZnJlZSggdm9pZCAqYmxvY2sgKTsKKyAgICAgICAgIHZvaWQgKl9DZGVjbCBmYXJtYWxsb2MoIHVuc2lnbmVkIGxvbmcgbmJ5dGVzICk7CisjICAgICAgZWxzZQorIyAgICAgICAgaW5jbHVkZSA8YWxsb2MuaD4KKyMgICAgICBlbmRpZgorIyAgICBlbHNlIC8qIE1TQyBvciBESkdQUCAqLworIyAgICAgIGluY2x1ZGUgPG1hbGxvYy5oPgogIyAgICBlbmRpZgotIyAgZWxzZSAvKiBNU0Mgb3IgREpHUFAgKi8KLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+CiAjICBlbmRpZgogI2VuZGlmCiAKQEAgLTEwNywxOCArMTEzLDIwIEBACiAKICNpZmRlZiBPUzIKICMgIGRlZmluZSBPU19DT0RFICAweDA2Ci0jICBpZmRlZiBNX0k4NgorIyAgaWYgZGVmaW5lZChNX0k4NikgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4KICMgIGVuZGlmCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoTUFDT1MpIHx8IGRlZmluZWQoVEFSR0VUX09TX01BQykKICMgIGRlZmluZSBPU19DT0RFICAweDA3Ci0jICBpZiBkZWZpbmVkKF9fTVdFUktTX18pICYmIF9fZGVzdF9vcyAhPSBfX2JlX29zICYmIF9fZGVzdF9vcyAhPSBfX3dpbjMyX29zCi0jICAgIGluY2x1ZGUgPHVuaXguaD4gLyogZm9yIGZkb3BlbiAqLwotIyAgZWxzZQotIyAgICBpZm5kZWYgZmRvcGVuCi0jICAgICAgZGVmaW5lIGZkb3BlbihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGlmIGRlZmluZWQoX19NV0VSS1NfXykgJiYgX19kZXN0X29zICE9IF9fYmVfb3MgJiYgX19kZXN0X29zICE9IF9fd2luMzJfb3MKKyMgICAgICBpbmNsdWRlIDx1bml4Lmg+IC8qIGZvciBmZG9wZW4gKi8KKyMgICAgZWxzZQorIyAgICAgIGlmbmRlZiBmZG9wZW4KKyMgICAgICAgIGRlZmluZSBmZG9wZW4oZmQsbW9kZSkgTlVMTCAvKiBObyBmZG9wZW4oKSAqLworIyAgICAgIGVuZGlmCiAjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCkBAIC0xNTMsMTQgKzE2MSwxNSBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmICFkZWZpbmVkKE1TRE9TKQogICAjcHJhZ21hIHdhcm4gLTgwMDQKICAgI3ByYWdtYSB3YXJuIC04MDA4CiAgICNwcmFnbWEgd2FybiAtODA2NgogI2VuZGlmCiAKIC8qIHByb3ZpZGUgcHJvdG90eXBlcyBmb3IgdGhlc2Ugd2hlbiBidWlsZGluZyB6bGliIHdpdGhvdXQgTEZTICovCi0jaWYgIWRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgfHwgX0xGUzY0X0xBUkdFRklMRS0wID09IDAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIFwKKyAgICAoIWRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgfHwgX0xGUzY0X0xBUkdFRklMRS0wID09IDApCiAgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICNlbmRpZgpAQCAtMTc3LDQyICsxODYsNyBAQAogCiAgICAgICAgICAvKiBmdW5jdGlvbnMgKi8KIAotI2lmIGRlZmluZWQoU1REQzk5KSB8fCAoZGVmaW5lZChfX1RVUkJPQ19fKSAmJiBfX1RVUkJPQ19fID49IDB4NTUwKQotIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCi0jICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgotIyAgZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoX19DWUdXSU5fXykKLSMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgotIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgSEFWRV9WU05QUklOVEYKLSMgIGlmZGVmIE1TRE9TCi0gICAgIC8qIHZzbnByaW50ZiBtYXkgZXhpc3Qgb24gc29tZSBNUy1ET1MgY29tcGlsZXJzIChESkdQUD8pLAotICAgICAgICBidXQgZm9yIG5vdyB3ZSBqdXN0IGFzc3VtZSBpdCBkb2Vzbid0LiAqLwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgX19UVVJCT0NfXwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgV0lOMzIKLSAgICAgLyogSW4gV2luMzIsIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgYXMgdGhlICJub24tQU5TSSIgX3ZzbnByaW50Zi4gKi8KLSMgICAgaWYgIWRlZmluZWQodnNucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCi0jICAgICAgaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8ICggZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxNTAwICkKLSMgICAgICAgICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmZGVmIF9fU0FTQwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotI2VuZGlmCi0jaWZkZWYgVk1TCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQocHlyKQorI2lmIGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBOT19NRU1DUFkKICNlbmRpZgogI2lmIGRlZmluZWQoU01BTExfTUVESVVNKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19TQ19fKQpAQCAtMjYxLDE0ICsyMzUsMTkgQEAKICMgIGRlZmluZSBUcmFjZWN2KGMseCkKICNlbmRpZgogCi0KLXZvaWRwZiBaTElCX0lOVEVSTkFMIHpjYWxsb2MgT0YoKHZvaWRwZiBvcGFxdWUsIHVuc2lnbmVkIGl0ZW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSkpOwotdm9pZCBaTElCX0lOVEVSTkFMIHpjZnJlZSAgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpKTsKKyNpZm5kZWYgWl9TT0xPCisgICB2b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jIE9GKCh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUpKTsKKyAgIHZvaWQgWkxJQl9JTlRFUk5BTCB6Y2ZyZWUgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKSk7CisjZW5kaWYKIAogI2RlZmluZSBaQUxMT0Moc3RybSwgaXRlbXMsIHNpemUpIFwKICAgICAgICAgICAgKCooKHN0cm0pLT56YWxsb2MpKSgoc3RybSktPm9wYXF1ZSwgKGl0ZW1zKSwgKHNpemUpKQogI2RlZmluZSBaRlJFRShzdHJtLCBhZGRyKSAgKCooKHN0cm0pLT56ZnJlZSkpKChzdHJtKS0+b3BhcXVlLCAodm9pZHBmKShhZGRyKSkKICNkZWZpbmUgVFJZX0ZSRUUocywgcCkge2lmIChwKSBaRlJFRShzLCBwKTt9CiAKKy8qIFJldmVyc2UgdGhlIGJ5dGVzIGluIGEgMzItYml0IHZhbHVlICovCisjZGVmaW5lIFpTV0FQMzIocSkgKCgoKHEpID4+IDI0KSAmIDB4ZmYpICsgKCgocSkgPj4gOCkgJiAweGZmMDApICsgXAorICAgICAgICAgICAgICAgICAgICAoKChxKSAmIDB4ZmYwMCkgPDwgOCkgKyAoKChxKSAmIDB4ZmYpIDw8IDI0KSkKKwogI2VuZGlmIC8qIFpVVElMX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYm1vZHVsZS5jIGIvTW9kdWxlcy96bGlibW9kdWxlLmMKaW5kZXggMWQxMDcyZC4uNTI3NDRiOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGlibW9kdWxlLmMKKysrIGIvTW9kdWxlcy96bGlibW9kdWxlLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiemxpYi5oIgogCisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICNpbmNsdWRlICJweXRocmVhZC5oIgogICAgICNkZWZpbmUgRU5URVJfWkxJQihvYmopIFwKQEAgLTI3LDEwICsyOCw5IEBACiAjZWxzZQogIyAgZGVmaW5lIERFRl9NRU1fTEVWRUwgIE1BWF9NRU1fTEVWRUwKICNlbmRpZgotI2RlZmluZSBERUZfV0JJVFMgTUFYX1dCSVRTCiAKLS8qIFRoZSBvdXRwdXQgYnVmZmVyIHdpbGwgYmUgaW5jcmVhc2VkIGluIGNodW5rcyBvZiBERUZBVUxUQUxMT0MgYnl0ZXMuICovCi0jZGVmaW5lIERFRkFVTFRBTExPQyAoMTYqMTAyNCkKKy8qIEluaXRpYWwgYnVmZmVyIHNpemUuICovCisjZGVmaW5lIERFRl9CVUZfU0laRSAoMTYqMTAyNCkKIAogc3RhdGljIFB5VHlwZU9iamVjdCBDb21wdHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgRGVjb21wdHlwZTsKQEAgLTgwLDM1ICs4MCwxMyBAQAogICAgICAgICBQeUVycl9Gb3JtYXQoWmxpYkVycm9yLCAiRXJyb3IgJWQgJXM6ICUuMjAwcyIsIGVyciwgbXNnLCB6bXNnKTsKIH0KIAotUHlEb2NfU1RSVkFSKGNvbXByZXNzb2JqX19kb2NfXywKLSJjb21wcmVzc29iaihsZXZlbD0tMSwgbWV0aG9kPURFRkxBVEVELCB3Yml0cz0xNSwgbWVtbGV2ZWw9OCxcbiIKLSIgICAgICAgICAgICBzdHJhdGVneT1aX0RFRkFVTFRfU1RSQVRFR1lbLCB6ZGljdF0pXG4iCi0iIC0tIFJldHVybiBhIGNvbXByZXNzb3Igb2JqZWN0LlxuIgotIlxuIgotImxldmVsIGlzIHRoZSBjb21wcmVzc2lvbiBsZXZlbCAoYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC05OyBkZWZhdWx0IGlzIDYpLlxuIgotIkhpZ2hlciBjb21wcmVzc2lvbiBsZXZlbHMgYXJlIHNsb3dlciwgYnV0IHByb2R1Y2Ugc21hbGxlciByZXN1bHRzLlxuIgotIlxuIgotIm1ldGhvZCBpcyB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBJZiBnaXZlbiwgdGhpcyBtdXN0IGJlIERFRkxBVEVELlxuIgotIlxuIgotIndiaXRzIGlzIHRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplIChyYW5nZTogOC4uMTUpLlxuIgotIlxuIgotIm1lbWxldmVsIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLlxuIgotIlZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDEgdG8gOS4gSGlnaGVyIHZhbHVlcyByZXN1bHQgaW4gaGlnaGVyIG1lbW9yeSB1c2FnZSxcbiIKLSJmYXN0ZXIgY29tcHJlc3Npb24sIGFuZCBzbWFsbGVyIG91dHB1dC5cbiIKLSJcbiIKLSJzdHJhdGVneSBpcyB1c2VkIHRvIHR1bmUgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gUG9zc2libGUgdmFsdWVzIGFyZVxuIgotIlpfREVGQVVMVF9TVFJBVEVHWSwgWl9GSUxURVJFRCwgYW5kIFpfSFVGRk1BTl9PTkxZLlxuIgotIlxuIgotInpkaWN0IGlzIHRoZSBwcmVkZWZpbmVkIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgLSBhIHNlcXVlbmNlIG9mIGJ5dGVzXG4iCi0iY29udGFpbmluZyBzdWJzZXF1ZW5jZXMgdGhhdCBhcmUgbGlrZWx5IHRvIG9jY3VyIGluIHRoZSBpbnB1dCBkYXRhLiIpOwotCi1QeURvY19TVFJWQVIoZGVjb21wcmVzc29ial9fZG9jX18sCi0iZGVjb21wcmVzc29iaihbd2JpdHNbLCB6ZGljdF1dKSAtLSBSZXR1cm4gYSBkZWNvbXByZXNzb3Igb2JqZWN0LlxuIgotIlxuIgotIk9wdGlvbmFsIGFyZyB3Yml0cyBpcyB0aGUgd2luZG93IGJ1ZmZlciBzaXplLlxuIgotIlxuIgotIk9wdGlvbmFsIGFyZyB6ZGljdCBpcyB0aGUgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LiBUaGlzIG11c3QgYmVcbiIKLSJ0aGUgc2FtZSBkaWN0aW9uYXJ5IGFzIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IgdGhhdCBwcm9kdWNlZCB0aGUgaW5wdXQgZGF0YS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIHpsaWIKK2NsYXNzIHpsaWIuQ29tcHJlc3MgImNvbXBvYmplY3QgKiIgIiZDb21wdHlwZSIKK2NsYXNzIHpsaWIuRGVjb21wcmVzcyAiY29tcG9iamVjdCAqIiAiJkRlY29tcHR5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1iZmQ0YzM0MDU3M2JhOTFkXSovCiAKIHN0YXRpYyBjb21wb2JqZWN0ICoKIG5ld2NvbXBvYmplY3QoUHlUeXBlT2JqZWN0ICp0eXBlKQpAQCAtMTMyLDQwICsxMTAsNjMgQEAKICAgICB9CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGxvY2siKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLVB5RG9jX1NUUlZBUihjb21wcmVzc19fZG9jX18sCi0iY29tcHJlc3Moc3RyaW5nWywgbGV2ZWxdKSAtLSBSZXR1cm5lZCBjb21wcmVzc2VkIHN0cmluZy5cbiIKLSJcbiIKLSJPcHRpb25hbCBhcmcgbGV2ZWwgaXMgdGhlIGNvbXByZXNzaW9uIGxldmVsLCBpbiAwLTkuIik7CitzdGF0aWMgdm9pZCoKK1B5WmxpYl9NYWxsb2Modm9pZHBmIGN0eCwgdUludCBpdGVtcywgdUludCBzaXplKQoreworICAgIGlmIChpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyBzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSBjYW5ub3QgYmUgdXNlZDogdGhlIEdJTCBpcyBub3QgaGVsZCB3aGVuCisgICAgICAgaW5mbGF0ZSgpIGFuZCBkZWZsYXRlKCkgYXJlIGNhbGxlZCAqLworICAgIHJldHVybiBQeU1lbV9SYXdNYWxsb2MoaXRlbXMgKiBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK1B5WmxpYl9GcmVlKHZvaWRwZiBjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbV9SYXdGcmVlKHB0cik7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuY29tcHJlc3MKKworICAgIGJ5dGVzOiBQeV9idWZmZXIKKyAgICAgICAgQmluYXJ5IGRhdGEgdG8gYmUgY29tcHJlc3NlZC4KKyAgICBsZXZlbDogaW50KGNfZGVmYXVsdD0iWl9ERUZBVUxUX0NPTVBSRVNTSU9OIikgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04KKyAgICAgICAgQ29tcHJlc3Npb24gbGV2ZWwsIGluIDAtOS4KKyAgICAvCisKK1JldHVybnMgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBjb21wcmVzc2VkIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfY29tcHJlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9jb21wcmVzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqYnl0ZXMsIGludCBsZXZlbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ZDdkZDQ1ODg3ODhlZmQzIGlucHV0PWJlM2FiZTk5MzRiZGE0YjNdKi8KIHsKICAgICBQeU9iamVjdCAqUmV0dXJuVmFsID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OwogICAgIEJ5dGUgKmlucHV0LCAqb3V0cHV0ID0gTlVMTDsKICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOwotICAgIGludCBsZXZlbD1aX0RFRkFVTFRfQ09NUFJFU1NJT04sIGVycjsKKyAgICBpbnQgZXJyOwogICAgIHpfc3RyZWFtIHpzdDsKIAotICAgIC8qIHJlcXVpcmUgUHl0aG9uIHN0cmluZyBvYmplY3QsIG9wdGlvbmFsICdsZXZlbCcgYXJnICovCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpOmNvbXByZXNzIiwgJnBpbnB1dCwgJmxldmVsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAocGlucHV0LmxlbiA+IFVJTlRfTUFYKSB7CisgICAgaWYgKChzaXplX3QpYnl0ZXMtPmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpbnB1dCA9IHBpbnB1dC5idWY7Ci0gICAgbGVuZ3RoID0gcGlucHV0LmxlbjsKKyAgICBpbnB1dCA9IGJ5dGVzLT5idWY7CisgICAgbGVuZ3RoID0gKHVuc2lnbmVkIGludClieXRlcy0+bGVuOwogCiAgICAgenN0LmF2YWlsX291dCA9IGxlbmd0aCArIGxlbmd0aC8xMDAwICsgMTIgKyAxOwogCi0gICAgb3V0cHV0ID0gKEJ5dGUqKW1hbGxvYyh6c3QuYXZhaWxfb3V0KTsKKyAgICBvdXRwdXQgPSAoQnl0ZSopUHlNZW1fTWFsbG9jKHpzdC5hdmFpbF9vdXQpOwogICAgIGlmIChvdXRwdXQgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIGNvbXByZXNzIGRhdGEiKTsKQEAgLTE3NSw4ICsxNzYsOSBAQAogICAgIC8qIFBhc3QgdGhlIHBvaW50IG9mIG5vIHJldHVybi4gIEZyb20gaGVyZSBvbiBvdXQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlCiAgICAgICAgd2UgY2xlYW4gdXAgbWFsbG9jcyAmIElOQ1JFRnMuICovCiAKLSAgICB6c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICB6c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICB6c3Qub3BhcXVlID0gTlVMTDsKKyAgICB6c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICB6c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICB6c3QubmV4dF9vdXQgPSAoQnl0ZSAqKW91dHB1dDsKICAgICB6c3QubmV4dF9pbiA9IChCeXRlICopaW5wdXQ7CiAgICAgenN0LmF2YWlsX2luID0gbGVuZ3RoOwpAQCAtMjE3LDU2ICsyMTksMTAwIEBACiAgICAgICAgIHpsaWJfZXJyb3IoenN0LCBlcnIsICJ3aGlsZSBmaW5pc2hpbmcgY29tcHJlc3Npb24iKTsKIAogIGVycm9yOgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbnB1dCk7Ci0gICAgZnJlZShvdXRwdXQpOworICAgIFB5TWVtX0ZyZWUob3V0cHV0KTsKIAogICAgIHJldHVybiBSZXR1cm5WYWw7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWNvbXByZXNzX19kb2NfXywKLSJkZWNvbXByZXNzKHN0cmluZ1ssIHdiaXRzWywgYnVmc2l6ZV1dKSAtLSBSZXR1cm4gZGVjb21wcmVzc2VkIHN0cmluZy5cbiIKLSJcbiIKLSJPcHRpb25hbCBhcmcgd2JpdHMgaXMgdGhlIHdpbmRvdyBidWZmZXIgc2l6ZS4gIE9wdGlvbmFsIGFyZyBidWZzaXplIGlzXG4iCi0idGhlIGluaXRpYWwgb3V0cHV0IGJ1ZmZlciBzaXplLiIpOworLypbcHl0aG9uIGlucHV0XQorCitjbGFzcyB1aW50X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIGludCcKKyAgICBjb252ZXJ0ZXIgPSAndWludF9jb252ZXJ0ZXInCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbcHl0aG9uIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9MjIyNjM4NTVmN2EzZWJmZF0qLworCitzdGF0aWMgaW50Cit1aW50X2NvbnZlcnRlcihQeU9iamVjdCAqb2JqLCB2b2lkICpwdHIpCit7CisgICAgbG9uZyB2YWw7CisgICAgdW5zaWduZWQgbG9uZyB1dmFsOworCisgICAgdmFsID0gUHlMb25nX0FzTG9uZyhvYmopOworICAgIGlmICh2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICB1dmFsID0gUHlMb25nX0FzVW5zaWduZWRMb25nKG9iaik7CisgICAgICAgIGlmICh1dmFsID09ICh1bnNpZ25lZCBsb25nKS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICh2YWwgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdXZhbCA9ICh1bnNpZ25lZCBsb25nKXZhbDsKKyAgICB9CisKKyAgICBpZiAodXZhbCA+IFVJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBpbnQgdG9vIGxhcmdlIGZvciBDIHVuc2lnbmVkIGludCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAqKHVuc2lnbmVkIGludCAqKXB0ciA9IFB5X1NBRkVfRE9XTkNBU1QodXZhbCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KTsKKyAgICByZXR1cm4gMTsKK30KKworLypbY2xpbmljIGlucHV0XQoremxpYi5kZWNvbXByZXNzCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAgICAgQ29tcHJlc3NlZCBkYXRhLgorICAgIHdiaXRzOiBpbnQoY19kZWZhdWx0PSJNQVhfV0JJVFMiKSA9IE1BWF9XQklUUworICAgICAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplLgorICAgIGJ1ZnNpemU6IHVpbnQoY19kZWZhdWx0PSJERUZfQlVGX1NJWkUiKSA9IERFRl9CVUZfU0laRQorICAgICAgICBUaGUgaW5pdGlhbCBvdXRwdXQgYnVmZmVyIHNpemUuCisgICAgLworCitSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuY29tcHJlc3NlZCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX2RlY29tcHJlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9kZWNvbXByZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgd2JpdHMsIHVuc2lnbmVkIGludCBidWZzaXplKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTllNTQ2NGU3MmRmOWNiNWYgaW5wdXQ9MGY0YjlhYmI3MTAzZjUwZV0qLwogewogICAgIFB5T2JqZWN0ICpyZXN1bHRfc3RyID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OwogICAgIEJ5dGUgKmlucHV0OwogICAgIHVuc2lnbmVkIGludCBsZW5ndGg7CiAgICAgaW50IGVycjsKLSAgICBpbnQgd3NpemU9REVGX1dCSVRTOwotICAgIFB5X3NzaXplX3Qgcl9zdHJsZW49REVGQVVMVEFMTE9DOworICAgIHVuc2lnbmVkIGludCBuZXdfYnVmc2l6ZTsKICAgICB6X3N0cmVhbSB6c3Q7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfGluOmRlY29tcHJlc3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlucHV0LCAmd3NpemUsICZyX3N0cmxlbikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmICgoc2l6ZV90KWRhdGEtPmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpbnB1dCA9IHBpbnB1dC5idWY7Ci0gICAgbGVuZ3RoID0gcGlucHV0LmxlbjsKKyAgICBpbnB1dCA9IGRhdGEtPmJ1ZjsKKyAgICBsZW5ndGggPSAodW5zaWduZWQgaW50KWRhdGEtPmxlbjsKIAotICAgIGlmIChyX3N0cmxlbiA8PSAwKQotICAgICAgICByX3N0cmxlbiA9IDE7CisgICAgaWYgKGJ1ZnNpemUgPT0gMCkKKyAgICAgICAgYnVmc2l6ZSA9IDE7CiAKICAgICB6c3QuYXZhaWxfaW4gPSBsZW5ndGg7Ci0gICAgenN0LmF2YWlsX291dCA9IHJfc3RybGVuOworICAgIHpzdC5hdmFpbF9vdXQgPSBidWZzaXplOwogCi0gICAgaWYgKCEocmVzdWx0X3N0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcl9zdHJsZW4pKSkKKyAgICBpZiAoIShyZXN1bHRfc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBidWZzaXplKSkpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICB6c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICB6c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICB6c3Qub3BhcXVlID0gTlVMTDsKKyAgICB6c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICB6c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICB6c3QubmV4dF9vdXQgPSAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdF9zdHIpOwogICAgIHpzdC5uZXh0X2luID0gKEJ5dGUgKilpbnB1dDsKLSAgICBlcnIgPSBpbmZsYXRlSW5pdDIoJnpzdCwgd3NpemUpOworICAgIGVyciA9IGluZmxhdGVJbml0MigmenN0LCB3Yml0cyk7CiAKICAgICBzd2l0Y2goZXJyKSB7CiAgICAgY2FzZShaX09LKToKQEAgLTMwMywxNCArMzQ5LDE4IEBACiAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgY2FzZShaX09LKToKICAgICAgICAgICAgIC8qIG5lZWQgbW9yZSBtZW1vcnkgKi8KLSAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdF9zdHIsIHJfc3RybGVuIDw8IDEpIDwgMCkgeworICAgICAgICAgICAgaWYgKGJ1ZnNpemUgPD0gKFVJTlRfTUFYID4+IDEpKQorICAgICAgICAgICAgICAgIG5ld19idWZzaXplID0gYnVmc2l6ZSA8PCAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5ld19idWZzaXplID0gVUlOVF9NQVg7CisgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHRfc3RyLCBuZXdfYnVmc2l6ZSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgaW5mbGF0ZUVuZCgmenN0KTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgenN0Lm5leHRfb3V0ID0KLSAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdF9zdHIpICsgcl9zdHJsZW47Ci0gICAgICAgICAgICB6c3QuYXZhaWxfb3V0ID0gcl9zdHJsZW47Ci0gICAgICAgICAgICByX3N0cmxlbiA9IHJfc3RybGVuIDw8IDE7CisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHRfc3RyKSArIGJ1ZnNpemU7CisgICAgICAgICAgICB6c3QuYXZhaWxfb3V0ID0gYnVmc2l6ZTsKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBuZXdfYnVmc2l6ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaW5mbGF0ZUVuZCgmenN0KTsKQEAgLTMyOCw0NiArMzc4LDY3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0X3N0ciwgenN0LnRvdGFsX291dCkgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGlucHV0KTsKICAgICByZXR1cm4gcmVzdWx0X3N0cjsKIAogIGVycm9yOgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbnB1dCk7CiAgICAgUHlfWERFQ1JFRihyZXN1bHRfc3RyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9jb21wcmVzc29iaihQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCi17Ci0gICAgY29tcG9iamVjdCAqc2VsZjsKLSAgICBpbnQgbGV2ZWw9Wl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBtZXRob2Q9REVGTEFURUQ7Ci0gICAgaW50IHdiaXRzPU1BWF9XQklUUywgbWVtTGV2ZWw9REVGX01FTV9MRVZFTCwgc3RyYXRlZ3k9MCwgZXJyOwotICAgIFB5X2J1ZmZlciB6ZGljdDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImxldmVsIiwgIm1ldGhvZCIsICJ3Yml0cyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1MZXZlbCIsICJzdHJhdGVneSIsICJ6ZGljdCIsIE5VTEx9OworLypbY2xpbmljIGlucHV0XQoremxpYi5jb21wcmVzc29iagogCi0gICAgemRpY3QuYnVmID0gTlVMTDsgLyogU2VudGluZWwsIHNvIHdlIGNhbiB0ZWxsIHdoZXRoZXIgemRpY3Qgd2FzIHN1cHBsaWVkLiAqLwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxpaWlpaXkqOmNvbXByZXNzb2JqIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZsZXZlbCwgJm1ldGhvZCwgJndiaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1MZXZlbCwgJnN0cmF0ZWd5LCAmemRpY3QpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBsZXZlbDogaW50KGNfZGVmYXVsdD0iWl9ERUZBVUxUX0NPTVBSRVNTSU9OIikgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04KKyAgICAgICAgVGhlIGNvbXByZXNzaW9uIGxldmVsIChhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAwLTk7IGRlZmF1bHQgaXMgNikuCisgICAgICAgIEhpZ2hlciBjb21wcmVzc2lvbiBsZXZlbHMgYXJlIHNsb3dlciwgYnV0IHByb2R1Y2Ugc21hbGxlciByZXN1bHRzLgorICAgIG1ldGhvZDogaW50KGNfZGVmYXVsdD0iREVGTEFURUQiKSA9IERFRkxBVEVECisgICAgICAgIFRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uICBJZiBnaXZlbiwgdGhpcyBtdXN0IGJlIERFRkxBVEVELgorICAgIHdiaXRzOiBpbnQoY19kZWZhdWx0PSJNQVhfV0JJVFMiKSA9IE1BWF9XQklUUworICAgICAgICBUaGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAocmFuZ2U6IDguLjE1KS4KKyAgICBtZW1MZXZlbDogaW50KGNfZGVmYXVsdD0iREVGX01FTV9MRVZFTCIpID0gREVGX01FTV9MRVZFTAorICAgICAgICBDb250cm9scyB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGZvciBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS4KKyAgICAgICAgVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gMSB0byA5LiAgSGlnaGVyIHZhbHVlcyByZXN1bHQgaW4gaGlnaGVyIG1lbW9yeQorICAgICAgICB1c2FnZSwgZmFzdGVyIGNvbXByZXNzaW9uLCBhbmQgc21hbGxlciBvdXRwdXQuCisgICAgc3RyYXRlZ3k6IGludChjX2RlZmF1bHQ9IlpfREVGQVVMVF9TVFJBVEVHWSIpID0gWl9ERUZBVUxUX1NUUkFURUdZCisgICAgICAgIFVzZWQgdG8gdHVuZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgUG9zc2libGUgdmFsdWVzIGFyZQorICAgICAgICBaX0RFRkFVTFRfU1RSQVRFR1ksIFpfRklMVEVSRUQsIGFuZCBaX0hVRkZNQU5fT05MWS4KKyAgICB6ZGljdDogUHlfYnVmZmVyID0gTm9uZQorICAgICAgICBUaGUgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IC0gYSBzZXF1ZW5jZSBvZiBieXRlcworICAgICAgICBjb250YWluaW5nIHN1YnNlcXVlbmNlcyB0aGF0IGFyZSBsaWtlbHkgdG8gb2NjdXIgaW4gdGhlIGlucHV0IGRhdGEuCisKK1JldHVybiBhIGNvbXByZXNzb3Igb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9jb21wcmVzc29ial9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBsZXZlbCwgaW50IG1ldGhvZCwgaW50IHdiaXRzLCBpbnQgbWVtTGV2ZWwsIGludCBzdHJhdGVneSwgUHlfYnVmZmVyICp6ZGljdCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04OWU1YTZjMTQ0OWNhYTllIGlucHV0PWIwMzQ4NDdmODgyMWY2YWZdKi8KK3sKKyAgICBjb21wb2JqZWN0ICpzZWxmID0gTlVMTDsKKyAgICBpbnQgZXJyOworCisgICAgaWYgKHpkaWN0LT5idWYgIT0gTlVMTCAmJiAoc2l6ZV90KXpkaWN0LT5sZW4gPiBVSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ6ZGljdCBsZW5ndGggZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KIAogICAgIHNlbGYgPSBuZXdjb21wb2JqZWN0KCZDb21wdHlwZSk7CiAgICAgaWYgKHNlbGY9PU5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgc2VsZi0+enN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgc2VsZi0+enN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgc2VsZi0+enN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+enN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgc2VsZi0+enN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBOVUxMOwogICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IDA7CiAgICAgZXJyID0gZGVmbGF0ZUluaXQyKCZzZWxmLT56c3QsIGxldmVsLCBtZXRob2QsIHdiaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpOwogICAgIHN3aXRjaChlcnIpIHsKICAgICBjYXNlIChaX09LKToKICAgICAgICAgc2VsZi0+aXNfaW5pdGlhbGlzZWQgPSAxOwotICAgICAgICBpZiAoemRpY3QuYnVmID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHpkaWN0LT5idWYgPT0gTlVMTCkgewogICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJnNlbGYtPnpzdCwgemRpY3QuYnVmLCB6ZGljdC5sZW4pOworICAgICAgICAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJnNlbGYtPnpzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpkaWN0LT5idWYsICh1bnNpZ25lZCBpbnQpemRpY3QtPmxlbik7CiAgICAgICAgICAgICBzd2l0Y2ggKGVycikgewogICAgICAgICAgICAgY2FzZSAoWl9PSyk6CiAgICAgICAgICAgICAgICAgZ290byBzdWNjZXNzOwpAQCAtMzk0LDIyICs0NjUsMjggQEAKICBlcnJvcjoKICAgICBQeV9DTEVBUihzZWxmKTsKICBzdWNjZXNzOgotICAgIGlmICh6ZGljdC5idWYgIT0gTlVMTCkKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmemRpY3QpOwogICAgIHJldHVybiAoUHlPYmplY3QqKXNlbGY7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfZGVjb21wcmVzc29iaihQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCi17Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ3Yml0cyIsICJ6ZGljdCIsIE5VTEx9OwotICAgIGludCB3Yml0cz1ERUZfV0JJVFMsIGVycjsKLSAgICBjb21wb2JqZWN0ICpzZWxmOwotICAgIFB5T2JqZWN0ICp6ZGljdD1OVUxMOworLypbY2xpbmljIGlucHV0XQoremxpYi5kZWNvbXByZXNzb2JqCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aU86ZGVjb21wcmVzc29iaiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmd2JpdHMsICZ6ZGljdCkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIHdiaXRzOiBpbnQoY19kZWZhdWx0PSJNQVhfV0JJVFMiKSA9IE1BWF9XQklUUworICAgICAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplLgorICAgIHpkaWN0OiBvYmplY3QoY19kZWZhdWx0PSJOVUxMIikgPSBiJycKKyAgICAgICAgVGhlIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyeS4gIFRoaXMgbXVzdCBiZSB0aGUgc2FtZQorICAgICAgICBkaWN0aW9uYXJ5IGFzIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IgdGhhdCBwcm9kdWNlZCB0aGUgaW5wdXQgZGF0YS4KKworUmV0dXJuIGEgZGVjb21wcmVzc29yIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzc29ial9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCB3Yml0cywgUHlPYmplY3QgKnpkaWN0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PThjY2Q1ODNmYmQ2MzE3OTggaW5wdXQ9NjdmMDUxNDVhNjkyMDEyN10qLworeworICAgIGludCBlcnI7CisgICAgY29tcG9iamVjdCAqc2VsZjsKKwogICAgIGlmICh6ZGljdCAhPSBOVUxMICYmICFQeU9iamVjdF9DaGVja0J1ZmZlcih6ZGljdCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJ6ZGljdCBhcmd1bWVudCBtdXN0IHN1cHBvcnQgdGhlIGJ1ZmZlciBwcm90b2NvbCIpOwpAQCAtNDE5LDggKzQ5Niw5IEBACiAgICAgc2VsZiA9IG5ld2NvbXBvYmplY3QoJkRlY29tcHR5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICBzZWxmLT56c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICBzZWxmLT56c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICBzZWxmLT56c3Qub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT56c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICBzZWxmLT56c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICBzZWxmLT56c3QubmV4dF9pbiA9IE5VTEw7CiAgICAgc2VsZi0+enN0LmF2YWlsX2luID0gMDsKICAgICBpZiAoemRpY3QgIT0gTlVMTCkgewpAQCAtNDc2LDM3ICs1NTQsNDEgQEAKICAgICBEZWFsbG9jKHNlbGYpOwogfQogCi1QeURvY19TVFJWQVIoY29tcF9jb21wcmVzc19fZG9jX18sCi0iY29tcHJlc3MoZGF0YSkgLS0gUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgZGF0YSBjb21wcmVzc2VkLlxuIgotIlxuIgotIkFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc29tZSBvZiB0aGUgaW5wdXQgZGF0YSBtYXkgc3RpbGxcbiIKLSJiZSBzdG9yZWQgaW4gaW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy5cbiIKLSJDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLiIpOworLypbY2xpbmljIGlucHV0XQoremxpYi5Db21wcmVzcy5jb21wcmVzcwogCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgICAgIEJpbmFyeSBkYXRhIHRvIGJlIGNvbXByZXNzZWQuCisgICAgLworCitSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgY29tcHJlc3NlZCBkYXRhLgorCitBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsCitiZSBzdG9yZWQgaW4gaW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KK0NhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfb2JqY29tcHJlc3MoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit6bGliX0NvbXByZXNzX2NvbXByZXNzX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVkNWNkNzkxY2JjNmE3ZjQgaW5wdXQ9MGQ5NTkwOGQ2ZTY0ZmFiOF0qLwogewogICAgIGludCBlcnI7CiAgICAgdW5zaWduZWQgaW50IGlucGxlbjsKLSAgICBQeV9zc2l6ZV90IGxlbmd0aCA9IERFRkFVTFRBTExPQzsKLSAgICBQeU9iamVjdCAqUmV0VmFsID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OworICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBERUZfQlVGX1NJWkUsIG5ld19sZW5ndGg7CisgICAgUHlPYmplY3QgKlJldFZhbDsKICAgICBCeXRlICppbnB1dDsKICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3RvdGFsX291dDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6Y29tcHJlc3MiLCAmcGlucHV0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmICgoc2l6ZV90KWRhdGEtPmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGlucGxlbiA9IHBpbnB1dC5sZW47CisgICAgaW5wdXQgPSBkYXRhLT5idWY7CisgICAgaW5wbGVuID0gKHVuc2lnbmVkIGludClkYXRhLT5sZW47CiAKICAgICBpZiAoIShSZXRWYWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbmd0aCkpKQotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIEVOVEVSX1pMSUIoc2VsZik7CiAKQEAgLTUyMywxNSArNjA1LDE4IEBACiAgICAgLyogd2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQsCiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoZXJyID09IFpfT0sgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOwotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKGxlbmd0aCA8PSAoVUlOVF9NQVggPj4gMSkpCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBVSU5UX01BWDsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBuZXdfbGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSArIGxlbmd0aDsKICAgICAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKLSAgICAgICAgbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGxlbmd0aCA9IG5ld19sZW5ndGg7CiAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnIgPSBkZWZsYXRlKCYoc2VsZi0+enN0KSwgWl9OT19GTFVTSCk7CkBAIC01NDQsMTkgKzYyOSwxNSBAQAogCiAgICAgaWYgKGVyciAhPSBaX09LICYmIGVyciAhPSBaX0JVRl9FUlJPUikgewogICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgY29tcHJlc3NpbmcgZGF0YSIpOwotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKKyAgICAgICAgZ290byBkb25lOwogICAgIH0KICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICB9CiAKLSBlcnJvcjoKKyBkb25lOgogICAgIExFQVZFX1pMSUIoc2VsZik7Ci0gZXJyb3Jfb3V0ZXI6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGlucHV0KTsKICAgICByZXR1cm4gUmV0VmFsOwogfQogCkBAIC01NzIsNyArNjUzLDcgQEAKICAgICAgICAgICAgIFB5X3NzaXplX3Qgb2xkX3NpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVudXNlZF9kYXRhKTsKICAgICAgICAgICAgIFB5X3NzaXplX3QgbmV3X3NpemU7CiAgICAgICAgICAgICBQeU9iamVjdCAqbmV3X2RhdGE7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+enN0LmF2YWlsX2luID4gUFlfU1NJWkVfVF9NQVggLSBvbGRfc2l6ZSkgeworICAgICAgICAgICAgaWYgKChzaXplX3Qpc2VsZi0+enN0LmF2YWlsX2luID4gKHNpemVfdClVSU5UX01BWCAtIChzaXplX3Qpb2xkX3NpemUpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KQEAgLTYwMyw1NSArNjg0LDUwIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWNvbXBfZGVjb21wcmVzc19fZG9jX18sCi0iZGVjb21wcmVzcyhkYXRhLCBtYXhfbGVuZ3RoKSAtLSBSZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkXG4iCi0idmVyc2lvbiBvZiB0aGUgZGF0YS5cbiIKLSJcbiIKLSJBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpblxuIgotImludGVybmFsIGJ1ZmZlcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcuXG4iCi0iQ2FsbCB0aGUgZmx1c2goKSBtZXRob2QgdG8gY2xlYXIgdGhlc2UgYnVmZmVycy5cbiIKLSJJZiB0aGUgbWF4X2xlbmd0aCBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlXG4iCi0ibm8gbG9uZ2VyIHRoYW4gbWF4X2xlbmd0aC4gIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpblxuIgotInRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLiIpOworLypbY2xpbmljIGlucHV0XQoremxpYi5EZWNvbXByZXNzLmRlY29tcHJlc3MKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgICAgICBUaGUgYmluYXJ5IGRhdGEgdG8gZGVjb21wcmVzcy4KKyAgICBtYXhfbGVuZ3RoOiB1aW50ID0gMAorICAgICAgICBUaGUgbWF4aW11bSBhbGxvd2FibGUgbGVuZ3RoIG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YS4KKyAgICAgICAgVW5jb25zdW1lZCBpbnB1dCBkYXRhIHdpbGwgYmUgc3RvcmVkIGluCisgICAgICAgIHRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLgorICAgIC8KKworUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhLgorCitBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpbgoraW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KK0NhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfb2JqZGVjb21wcmVzcyhjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWF4X2xlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03NTVjY2NjOTA4N2JmZTU1IGlucHV0PTAyY2ZjMDQ3Mzc3Y2VjODZdKi8KIHsKLSAgICBpbnQgZXJyLCBtYXhfbGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgaW5wbGVuOwotICAgIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCwgbGVuZ3RoID0gREVGQVVMVEFMTE9DOworICAgIGludCBlcnI7CisgICAgdW5zaWduZWQgaW50IG9sZF9sZW5ndGgsIGxlbmd0aCA9IERFRl9CVUZfU0laRTsKICAgICBQeU9iamVjdCAqUmV0VmFsID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OwotICAgIEJ5dGUgKmlucHV0OwogICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfdG90YWxfb3V0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpOmRlY29tcHJlc3MiLCAmcGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF4X2xlbmd0aCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKKyAgICBpZiAoKHNpemVfdClkYXRhLT5sZW4gPiBVSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKLSAgICB9Ci0gICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGlucGxlbiA9IHBpbnB1dC5sZW47Ci0gICAgaWYgKG1heF9sZW5ndGggPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIm1heF9sZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpOwotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBsaW1pdCBhbW91bnQgb2YgZGF0YSBhbGxvY2F0ZWQgdG8gbWF4X2xlbmd0aCAqLwogICAgIGlmIChtYXhfbGVuZ3RoICYmIGxlbmd0aCA+IG1heF9sZW5ndGgpCiAgICAgICAgIGxlbmd0aCA9IG1heF9sZW5ndGg7CiAgICAgaWYgKCEoUmV0VmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW5ndGgpKSkKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBFTlRFUl9aTElCKHNlbGYpOwogCiAgICAgc3RhcnRfdG90YWxfb3V0ID0gc2VsZi0+enN0LnRvdGFsX291dDsKLSAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSBpbnBsZW47Ci0gICAgc2VsZi0+enN0Lm5leHRfaW4gPSBpbnB1dDsKKyAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSAodW5zaWduZWQgaW50KWRhdGEtPmxlbjsKKyAgICBzZWxmLT56c3QubmV4dF9pbiA9IGRhdGEtPmJ1ZjsKICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwogICAgIHNlbGYtPnpzdC5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKTsKIApAQCAtNjY2LDEyICs3NDIsMjEgQEAKICAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9Ci0gICAgICAgIGVyciA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCYoc2VsZi0+enN0KSwgemRpY3RfYnVmLmJ1ZiwgemRpY3RfYnVmLmxlbik7CisKKyAgICAgICAgaWYgKChzaXplX3QpemRpY3RfYnVmLmxlbiA+IFVJTlRfTUFYKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgInpkaWN0IGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ6ZGljdF9idWYpOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBlcnIgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmKHNlbGYtPnpzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpkaWN0X2J1Zi5idWYsICh1bnNpZ25lZCBpbnQpemRpY3RfYnVmLmxlbik7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnpkaWN0X2J1Zik7CiAgICAgICAgIGlmIChlcnIgIT0gWl9PSykgewogICAgICAgICAgICAgemxpYl9lcnJvcihzZWxmLT56c3QsIGVyciwgIndoaWxlIGRlY29tcHJlc3NpbmcgZGF0YSIpOwotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgLyogUmVwZWF0IHRoZSBjYWxsIHRvIGluZmxhdGUuICovCkBAIC02OTcsOCArNzgyLDcgQEAKICAgICAgICAgICAgIGxlbmd0aCA9IG1heF9sZW5ndGg7CiAKICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBsZW5ndGgpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KQEAgLTczMiwzOSArODE2LDM5IEBACiAgICAgfQogCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBzZWxmLT56c3QudG90YWxfb3V0IC0gc3RhcnRfdG90YWxfb3V0KSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgfQogCiAgZXJyb3I6CiAgICAgTEVBVkVfWkxJQihzZWxmKTsKLSBlcnJvcl9vdXRlcjoKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW5wdXQpOwogICAgIHJldHVybiBSZXRWYWw7CiB9CiAKLVB5RG9jX1NUUlZBUihjb21wX2ZsdXNoX19kb2NfXywKLSJmbHVzaCggW21vZGVdICkgLS0gUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZyBjb21wcmVzc2VkIGRhdGEuXG4iCi0iXG4iCi0ibW9kZSBjYW4gYmUgb25lIG9mIHRoZSBjb25zdGFudHMgWl9TWU5DX0ZMVVNILCBaX0ZVTExfRkxVU0gsIFpfRklOSVNIOyB0aGVcbiIKLSJkZWZhdWx0IHZhbHVlIHVzZWQgd2hlbiBtb2RlIGlzIG5vdCBzcGVjaWZpZWQgaXMgWl9GSU5JU0guXG4iCi0iSWYgbW9kZSA9PSBaX0ZJTklTSCwgdGhlIGNvbXByZXNzb3Igb2JqZWN0IGNhbiBubyBsb25nZXIgYmUgdXNlZCBhZnRlclxuIgotImNhbGxpbmcgdGhlIGZsdXNoKCkgbWV0aG9kLiAgT3RoZXJ3aXNlLCBtb3JlIGRhdGEgY2FuIHN0aWxsIGJlIGNvbXByZXNzZWQuIik7CisvKltjbGluaWMgaW5wdXRdCit6bGliLkNvbXByZXNzLmZsdXNoCisKKyAgICBtb2RlOiBpbnQoY19kZWZhdWx0PSJaX0ZJTklTSCIpID0gemxpYi5aX0ZJTklTSAorICAgICAgICBPbmUgb2YgdGhlIGNvbnN0YW50cyBaX1NZTkNfRkxVU0gsIFpfRlVMTF9GTFVTSCwgWl9GSU5JU0guCisgICAgICAgIElmIG1vZGUgPT0gWl9GSU5JU0gsIHRoZSBjb21wcmVzc29yIG9iamVjdCBjYW4gbm8gbG9uZ2VyIGJlCisgICAgICAgIHVzZWQgYWZ0ZXIgY2FsbGluZyB0aGUgZmx1c2goKSBtZXRob2QuICBPdGhlcndpc2UsIG1vcmUgZGF0YQorICAgICAgICBjYW4gc3RpbGwgYmUgY29tcHJlc3NlZC4KKyAgICAvCisKK1JldHVybiBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIGFueSByZW1haW5pbmcgY29tcHJlc3NlZCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX2ZsdXNoKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9Db21wcmVzc19mbHVzaF9pbXBsKGNvbXBvYmplY3QgKnNlbGYsIGludCBtb2RlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWEyMDNmNGNlZmM5ZGU3MjcgaW5wdXQ9NzNlZDA2Njc5NGJkMTViY10qLwogewotICAgIGludCBlcnIsIGxlbmd0aCA9IERFRkFVTFRBTExPQzsKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBERUZfQlVGX1NJWkUsIG5ld19sZW5ndGg7CiAgICAgUHlPYmplY3QgKlJldFZhbDsKLSAgICBpbnQgZmx1c2htb2RlID0gWl9GSU5JU0g7CiAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmZsdXNoIiwgJmZsdXNobW9kZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgLyogRmx1c2hpbmcgd2l0aCBaX05PX0ZMVVNIIGlzIGEgbm8tb3AsIHNvIHRoZXJlJ3Mgbm8gcG9pbnQgaW4KICAgICAgICBkb2luZyBhbnkgd29yayBhdCBhbGw7IGp1c3QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4gKi8KLSAgICBpZiAoZmx1c2htb2RlID09IFpfTk9fRkxVU0gpIHsKKyAgICBpZiAobW9kZSA9PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOwogICAgIH0KIApAQCAtNzc5LDMxICs4NjMsMzQgQEAKICAgICBzZWxmLT56c3QubmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKFJldFZhbCk7CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIGZsdXNobW9kZSk7CisgICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIG1vZGUpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICAvKiB3aGlsZSBaX09LIGFuZCB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLCB0aGVyZSBtaWdodCBiZSBtb3JlIG91dHB1dCwKICAgICAgICBzbyBleHRlbmQgdGhlIG91dHB1dCBidWZmZXIgYW5kIHRyeSBhZ2FpbiAqLwogICAgIHdoaWxlIChlcnIgPT0gWl9PSyAmJiBzZWxmLT56c3QuYXZhaWxfb3V0ID09IDApIHsKLSAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBsZW5ndGggPDwgMSkgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIGlmIChsZW5ndGggPD0gKFVJTlRfTUFYID4+IDEpKQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gVUlOVF9NQVg7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbmV3X2xlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPQogICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhSZXRWYWwpICsgbGVuZ3RoOwogICAgICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgICAgICBsZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgbGVuZ3RoID0gbmV3X2xlbmd0aDsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGVyciA9IGRlZmxhdGUoJihzZWxmLT56c3QpLCBmbHVzaG1vZGUpOworICAgICAgICBlcnIgPSBkZWZsYXRlKCYoc2VsZi0+enN0KSwgbW9kZSk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfQogCi0gICAgLyogSWYgZmx1c2htb2RlIGlzIFpfRklOSVNILCB3ZSBhbHNvIGhhdmUgdG8gY2FsbCBkZWZsYXRlRW5kKCkgdG8gZnJlZQorICAgIC8qIElmIG1vZGUgaXMgWl9GSU5JU0gsIHdlIGFsc28gaGF2ZSB0byBjYWxsIGRlZmxhdGVFbmQoKSB0byBmcmVlCiAgICAgICAgdmFyaW91cyBkYXRhIHN0cnVjdHVyZXMuIE5vdGUgd2Ugc2hvdWxkIG9ubHkgZ2V0IFpfU1RSRUFNX0VORCB3aGVuCi0gICAgICAgZmx1c2htb2RlIGlzIFpfRklOSVNILCBidXQgY2hlY2tpbmcgYm90aCBmb3Igc2FmZXR5Ki8KLSAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCAmJiBmbHVzaG1vZGUgPT0gWl9GSU5JU0gpIHsKKyAgICAgICBtb2RlIGlzIFpfRklOSVNILCBidXQgY2hlY2tpbmcgYm90aCBmb3Igc2FmZXR5Ki8KKyAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCAmJiBtb2RlID09IFpfRklOSVNIKSB7CiAgICAgICAgIGVyciA9IGRlZmxhdGVFbmQoJihzZWxmLT56c3QpKTsKICAgICAgICAgaWYgKGVyciAhPSBaX09LKSB7CiAgICAgICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgZmluaXNoaW5nIGNvbXByZXNzaW9uIik7CkBAIC04MjYsOCArOTEzLDcgQEAKICAgICB9CiAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICB9CiAKICBlcnJvcjoKQEAgLTgzNywxMSArOTIzLDE2IEBACiB9CiAKICNpZmRlZiBIQVZFX1pMSUJfQ09QWQotUHlEb2NfU1RSVkFSKGNvbXBfY29weV9fZG9jX18sCi0iY29weSgpIC0tIFJldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4iKTsKKworLypbY2xpbmljIGlucHV0XQoremxpYi5Db21wcmVzcy5jb3B5CisKK1JldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9jb3B5KGNvbXBvYmplY3QgKnNlbGYpCit6bGliX0NvbXByZXNzX2NvcHlfaW1wbChjb21wb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUxNDRhYTE1M2MyMWU4MDUgaW5wdXQ9YzY1NjM1MWY5NGI4MjcxOF0qLwogewogICAgIGNvbXBvYmplY3QgKnJldHZhbCA9IE5VTEw7CiAgICAgaW50IGVycjsKQEAgLTg5MSwxMSArOTgyLDE1IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWNvbXBfY29weV9fZG9jX18sCi0iY29weSgpIC0tIFJldHVybiBhIGNvcHkgb2YgdGhlIGRlY29tcHJlc3Npb24gb2JqZWN0LiIpOworLypbY2xpbmljIGlucHV0XQoremxpYi5EZWNvbXByZXNzLmNvcHkKKworUmV0dXJuIGEgY29weSBvZiB0aGUgZGVjb21wcmVzc2lvbiBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfdW5jb3B5KGNvbXBvYmplY3QgKnNlbGYpCit6bGliX0RlY29tcHJlc3NfY29weV9pbXBsKGNvbXBvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDJhODgzYTJhNTEwYzhjYyBpbnB1dD1iYTZjM2U5NjcxMmE1OTZiXSovCiB7CiAgICAgY29tcG9iamVjdCAqcmV0dmFsID0gTlVMTDsKICAgICBpbnQgZXJyOwpAQCAtOTQ3LDM0ICsxMDQyLDQzIEBACiB9CiAjZW5kaWYKIAotUHlEb2NfU1RSVkFSKGRlY29tcF9mbHVzaF9fZG9jX18sCi0iZmx1c2goIFtsZW5ndGhdICkgLS0gUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZ1xuIgotImRlY29tcHJlc3NlZCBkYXRhLiBsZW5ndGgsIGlmIGdpdmVuLCBpcyB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZVxuIgotIm91dHB1dCBidWZmZXIuXG4iCi0iXG4iCi0iVGhlIGRlY29tcHJlc3NvciBvYmplY3QgY2FuIG5vIGxvbmdlciBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuRGVjb21wcmVzcy5mbHVzaAorCisgICAgbGVuZ3RoOiB1aW50KGNfZGVmYXVsdD0iREVGX0JVRl9TSVpFIikgPSB6bGliLkRFRl9CVUZfU0laRQorICAgICAgICB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLgorICAgIC8KKworUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZyBkZWNvbXByZXNzZWQgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl91bmZsdXNoKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9EZWNvbXByZXNzX2ZsdXNoX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgdW5zaWduZWQgaW50IGxlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYjZmYjc1M2FiNjk4ZTIyIGlucHV0PTE1ODA5NTY1MDU5Nzg5OTNdKi8KIHsKLSAgICBpbnQgZXJyLCBsZW5ndGggPSBERUZBVUxUQUxMT0M7CisgICAgaW50IGVycjsKKyAgICB1bnNpZ25lZCBpbnQgbmV3X2xlbmd0aDsKICAgICBQeU9iamVjdCAqIHJldHZhbCA9IE5VTEw7CiAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CisgICAgUHlfc3NpemVfdCBzaXplOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpmbHVzaCIsICZsZW5ndGgpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobGVuZ3RoIDw9IDApIHsKKyAgICBpZiAobGVuZ3RoID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKICAgICBpZiAoIShyZXR2YWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbmd0aCkpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogCiAgICAgRU5URVJfWkxJQihzZWxmKTsKIAorICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7CisKICAgICBzdGFydF90b3RhbF9vdXQgPSBzZWxmLT56c3QudG90YWxfb3V0OwotICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZi0+dW5jb25zdW1lZF90YWlsKTsKKyAgICAvKiBzYXZlX3VuY29uc3VtZWRfaW5wdXQoKSBlbnN1cmVzIHRoYXQgdW5jb25zdW1lZF90YWlsIGxlbmd0aCBpcyBsZXNzZXIKKyAgICAgICBvciBlcXVhbCB0aGFuIFVJTlRfTUFYICovCisgICAgc2VsZi0+enN0LmF2YWlsX2luID0gUHlfU0FGRV9ET1dOQ0FTVChzaXplLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwogICAgIHNlbGYtPnpzdC5uZXh0X2luID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT51bmNvbnN1bWVkX3RhaWwpOwogICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7CiAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpOwpAQCAtOTg2LDE0ICsxMDkwLDE3IEBACiAgICAgLyogd2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQsCiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoKGVyciA9PSBaX09LIHx8IGVyciA9PSBaX0JVRl9FUlJPUikgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBpZiAobGVuZ3RoIDw9IChVSU5UX01BWCA+PiAxKSkKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IFVJTlRfTUFYOworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXR2YWwsIG5ld19sZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpICsgbGVuZ3RoOwogICAgICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgICAgICBsZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgbGVuZ3RoID0gbmV3X2xlbmd0aDsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVyciA9IGluZmxhdGUoJihzZWxmLT56c3QpLCBaX0ZJTklTSCk7CkBAIC0xMDIwLDggKzExMjcsNyBAQAogICAgIH0KIAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgc2VsZi0+enN0LnRvdGFsX291dCAtIHN0YXJ0X3RvdGFsX291dCkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOwotICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihyZXR2YWwpOwogICAgIH0KIAogZXJyb3I6CkBAIC0xMDMxLDI4ICsxMTM3LDI0IEBACiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIAorI2luY2x1ZGUgImNsaW5pYy96bGlibW9kdWxlLmMuaCIKKwogc3RhdGljIFB5TWV0aG9kRGVmIGNvbXBfbWV0aG9kc1tdID0KIHsKLSAgICB7ImNvbXByZXNzIiwgKGJpbmFyeWZ1bmMpUHlabGliX29iamNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgIGNvbXBfY29tcHJlc3NfX2RvY19ffSwKLSAgICB7ImZsdXNoIiwgKGJpbmFyeWZ1bmMpUHlabGliX2ZsdXNoLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgIGNvbXBfZmx1c2hfX2RvY19ffSwKKyAgICBaTElCX0NPTVBSRVNTX0NPTVBSRVNTX01FVEhPRERFRgorICAgIFpMSUJfQ09NUFJFU1NfRkxVU0hfTUVUSE9EREVGCiAjaWZkZWYgSEFWRV9aTElCX0NPUFkKLSAgICB7ImNvcHkiLCAgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb3B5LCBNRVRIX05PQVJHUywKLSAgICAgICAgICAgICAgY29tcF9jb3B5X19kb2NfX30sCisgICAgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRgogI2VuZGlmCiAgICAge05VTEwsIE5VTEx9CiB9OwogCiBzdGF0aWMgUHlNZXRob2REZWYgRGVjb21wX21ldGhvZHNbXSA9CiB7Ci0gICAgeyJkZWNvbXByZXNzIiwgKGJpbmFyeWZ1bmMpUHlabGliX29iamRlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgICBkZWNvbXBfZGVjb21wcmVzc19fZG9jX199LAotICAgIHsiZmx1c2giLCAoYmluYXJ5ZnVuYylQeVpsaWJfdW5mbHVzaCwgTUVUSF9WQVJBUkdTLAotICAgICAgICAgICAgICBkZWNvbXBfZmx1c2hfX2RvY19ffSwKKyAgICBaTElCX0RFQ09NUFJFU1NfREVDT01QUkVTU19NRVRIT0RERUYKKyAgICBaTElCX0RFQ09NUFJFU1NfRkxVU0hfTUVUSE9EREVGCiAjaWZkZWYgSEFWRV9aTElCX0NPUFkKLSAgICB7ImNvcHkiLCAgKFB5Q0Z1bmN0aW9uKVB5WmxpYl91bmNvcHksIE1FVEhfTk9BUkdTLAotICAgICAgICAgICAgICBkZWNvbXBfY29weV9fZG9jX199LAorICAgIFpMSUJfREVDT01QUkVTU19DT1BZX01FVEhPRERFRgogI2VuZGlmCiAgICAge05VTEwsIE5VTEx9CiB9OwpAQCAtMTA2NSw5NiArMTE2Nyw5NSBAQAogICAgIHtOVUxMfSwKIH07CiAKLVB5RG9jX1NUUlZBUihhZGxlcjMyX19kb2NfXywKLSJhZGxlcjMyKHN0cmluZ1ssIHN0YXJ0XSkgLS0gQ29tcHV0ZSBhbiBBZGxlci0zMiBjaGVja3N1bSBvZiBzdHJpbmcuXG4iCi0iXG4iCi0iQW4gb3B0aW9uYWwgc3RhcnRpbmcgdmFsdWUgY2FuIGJlIHNwZWNpZmllZC4gIFRoZSByZXR1cm5lZCBjaGVja3N1bSBpc1xuIgotImFuIGludGVnZXIuIik7CisvKltjbGluaWMgaW5wdXRdCit6bGliLmFkbGVyMzIKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIHZhbHVlOiB1bnNpZ25lZF9pbnQoYml0d2lzZT1UcnVlKSA9IDEKKyAgICAgICAgU3RhcnRpbmcgdmFsdWUgb2YgdGhlIGNoZWNrc3VtLgorICAgIC8KKworQ29tcHV0ZSBhbiBBZGxlci0zMiBjaGVja3N1bSBvZiBkYXRhLgorCitUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXMgYW4gaW50ZWdlci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9hZGxlcjMyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfYWRsZXIzMl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IHZhbHVlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUxZDZkNzVlZTY1NWM3OGEgaW5wdXQ9NmZmNDU1Nzg3MjE2MGU4OF0qLwogewotICAgIHVuc2lnbmVkIGludCBhZGxlcjMydmFsID0gMTsgIC8qIGFkbGVyMzIoMEwsIFpfTlVMTCwgMCkgKi8KLSAgICBQeV9idWZmZXIgcGJ1ZjsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8STphZGxlcjMyIiwgJnBidWYsICZhZGxlcjMydmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogUmVsZWFzaW5nIHRoZSBHSUwgZm9yIHZlcnkgc21hbGwgYnVmZmVycyBpcyBpbmVmZmljaWVudAogICAgICAgIGFuZCBtYXkgbG93ZXIgcGVyZm9ybWFuY2UgKi8KLSAgICBpZiAocGJ1Zi5sZW4gPiAxMDI0KjUpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gcGJ1Zi5idWY7Ci0gICAgICAgIFB5X3NzaXplX3QgbGVuID0gcGJ1Zi5sZW47CisgICAgaWYgKGRhdGEtPmxlbiA+IDEwMjQqNSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBkYXRhLT5idWY7CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgLyogQXZvaWQgdHJ1bmNhdGlvbiBvZiBsZW5ndGggZm9yIHZlcnkgbGFyZ2UgYnVmZmVycy4gYWRsZXIzMigpIHRha2VzCiAgICAgICAgICAgIGxlbmd0aCBhcyBhbiB1bnNpZ25lZCBpbnQsIHdoaWNoIG1heSBiZSBuYXJyb3dlciB0aGFuIFB5X3NzaXplX3QuICovCi0gICAgICAgIHdoaWxlIChsZW4gPiAoc2l6ZV90KSBVSU5UX01BWCkgewotICAgICAgICAgICAgYWRsZXIzMnZhbCA9IGFkbGVyMzIoYWRsZXIzMnZhbCwgYnVmLCBVSU5UX01BWCk7CisgICAgICAgIHdoaWxlICgoc2l6ZV90KWxlbiA+IFVJTlRfTUFYKSB7CisgICAgICAgICAgICB2YWx1ZSA9IGFkbGVyMzIodmFsdWUsIGJ1ZiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgYnVmICs9IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICAgICAgbGVuIC09IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICB9Ci0gICAgICAgIGFkbGVyMzJ2YWwgPSBhZGxlcjMyKGFkbGVyMzJ2YWwsIGJ1ZiwgbGVuKTsKKyAgICAgICAgdmFsdWUgPSBhZGxlcjMyKHZhbHVlLCBidWYsICh1bnNpZ25lZCBpbnQpbGVuKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICB9IGVsc2UgewotICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICB2YWx1ZSA9IGFkbGVyMzIodmFsdWUsIGRhdGEtPmJ1ZiwgKHVuc2lnbmVkIGludClkYXRhLT5sZW4pOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoYWRsZXIzMnZhbCAmIDB4ZmZmZmZmZmZVKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcodmFsdWUgJiAweGZmZmZmZmZmVSk7CiB9CiAKLVB5RG9jX1NUUlZBUihjcmMzMl9fZG9jX18sCi0iY3JjMzIoc3RyaW5nWywgc3RhcnRdKSAtLSBDb21wdXRlIGEgQ1JDLTMyIGNoZWNrc3VtIG9mIHN0cmluZy5cbiIKLSJcbiIKLSJBbiBvcHRpb25hbCBzdGFydGluZyB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkLiAgVGhlIHJldHVybmVkIGNoZWNrc3VtIGlzXG4iCi0iYW4gaW50ZWdlci4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuY3JjMzIKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIHZhbHVlOiB1bnNpZ25lZF9pbnQoYml0d2lzZT1UcnVlKSA9IDAKKyAgICAgICAgU3RhcnRpbmcgdmFsdWUgb2YgdGhlIGNoZWNrc3VtLgorICAgIC8KKworQ29tcHV0ZSBhIENSQy0zMiBjaGVja3N1bSBvZiBkYXRhLgorCitUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXMgYW4gaW50ZWdlci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9jcmMzMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit6bGliX2NyYzMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzFlOTg2ZTc0ZmU3YjYyMyBpbnB1dD0yNmMzZWQ0MzBmYTAwYjRjXSovCiB7Ci0gICAgdW5zaWduZWQgaW50IGNyYzMydmFsID0gMDsgIC8qIGNyYzMyKDBMLCBaX05VTEwsIDApICovCi0gICAgUHlfYnVmZmVyIHBidWY7CiAgICAgaW50IHNpZ25lZF92YWw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfEk6Y3JjMzIiLCAmcGJ1ZiwgJmNyYzMydmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogUmVsZWFzaW5nIHRoZSBHSUwgZm9yIHZlcnkgc21hbGwgYnVmZmVycyBpcyBpbmVmZmljaWVudAogICAgICAgIGFuZCBtYXkgbG93ZXIgcGVyZm9ybWFuY2UgKi8KLSAgICBpZiAocGJ1Zi5sZW4gPiAxMDI0KjUpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gcGJ1Zi5idWY7Ci0gICAgICAgIFB5X3NzaXplX3QgbGVuID0gcGJ1Zi5sZW47CisgICAgaWYgKGRhdGEtPmxlbiA+IDEwMjQqNSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBkYXRhLT5idWY7CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgLyogQXZvaWQgdHJ1bmNhdGlvbiBvZiBsZW5ndGggZm9yIHZlcnkgbGFyZ2UgYnVmZmVycy4gY3JjMzIoKSB0YWtlcwogICAgICAgICAgICBsZW5ndGggYXMgYW4gdW5zaWduZWQgaW50LCB3aGljaCBtYXkgYmUgbmFycm93ZXIgdGhhbiBQeV9zc2l6ZV90LiAqLwotICAgICAgICB3aGlsZSAobGVuID4gKHNpemVfdCkgVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIGNyYzMydmFsID0gY3JjMzIoY3JjMzJ2YWwsIGJ1ZiwgVUlOVF9NQVgpOworICAgICAgICB3aGlsZSAoKHNpemVfdClsZW4gPiBVSU5UX01BWCkgeworICAgICAgICAgICAgdmFsdWUgPSBjcmMzMih2YWx1ZSwgYnVmLCBVSU5UX01BWCk7CiAgICAgICAgICAgICBidWYgKz0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgICAgICBsZW4gLT0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgIH0KLSAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBidWYsIGxlbik7CisgICAgICAgIHNpZ25lZF92YWwgPSBjcmMzMih2YWx1ZSwgYnVmLCAodW5zaWduZWQgaW50KWxlbik7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICBzaWduZWRfdmFsID0gY3JjMzIodmFsdWUsIGRhdGEtPmJ1ZiwgKHVuc2lnbmVkIGludClkYXRhLT5sZW4pOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoc2lnbmVkX3ZhbCAmIDB4ZmZmZmZmZmZVKTsKIH0KIAogCiBzdGF0aWMgUHlNZXRob2REZWYgemxpYl9tZXRob2RzW10gPQogewotICAgIHsiYWRsZXIzMiIsIChQeUNGdW5jdGlvbilQeVpsaWJfYWRsZXIzMiwgTUVUSF9WQVJBUkdTLAotICAgICAgICAgICAgICAgIGFkbGVyMzJfX2RvY19ffSwKLSAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb21wcmVzcywgIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgY29tcHJlc3NfX2RvY19ffSwKLSAgICB7ImNvbXByZXNzb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb21wcmVzc29iaiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb2JqX19kb2NfX30sCi0gICAgeyJjcmMzMiIsIChQeUNGdW5jdGlvbilQeVpsaWJfY3JjMzIsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgY3JjMzJfX2RvY19ffSwKLSAgICB7ImRlY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pUHlabGliX2RlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzX19kb2NfX30sCi0gICAgeyJkZWNvbXByZXNzb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9kZWNvbXByZXNzb2JqLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzb2JqX19kb2NfX30sCisgICAgWkxJQl9BRExFUjMyX01FVEhPRERFRgorICAgIFpMSUJfQ09NUFJFU1NfTUVUSE9EREVGCisgICAgWkxJQl9DT01QUkVTU09CSl9NRVRIT0RERUYKKyAgICBaTElCX0NSQzMyX01FVEhPRERFRgorICAgIFpMSUJfREVDT01QUkVTU19NRVRIT0RERUYKKyAgICBaTElCX0RFQ09NUFJFU1NPQkpfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9CiB9OwogCkBAIC0xMjY1LDIwICsxMzY2LDIxIEBACiAgICAgICAgIFB5X0lOQ1JFRihabGliRXJyb3IpOwogICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImVycm9yIiwgWmxpYkVycm9yKTsKICAgICB9Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1BWF9XQklUUyIsIE1BWF9XQklUUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRkxBVEVEIiwgREVGTEFURUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfTUVNX0xFVkVMIiwgREVGX01FTV9MRVZFTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfQkVTVF9TUEVFRCIsIFpfQkVTVF9TUEVFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfQkVTVF9DT01QUkVTU0lPTiIsIFpfQkVTVF9DT01QUkVTU0lPTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfREVGQVVMVF9DT01QUkVTU0lPTiIsIFpfREVGQVVMVF9DT01QUkVTU0lPTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfRklMVEVSRUQiLCBaX0ZJTFRFUkVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9IVUZGTUFOX09OTFkiLCBaX0hVRkZNQU5fT05MWSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfREVGQVVMVF9TVFJBVEVHWSIsIFpfREVGQVVMVF9TVFJBVEVHWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTUFYX1dCSVRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZMQVRFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX01FTV9MRVZFTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0JVRl9TSVpFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0JFU1RfU1BFRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfQkVTVF9DT01QUkVTU0lPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0ZJTFRFUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0hVRkZNQU5fT05MWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9ERUZBVUxUX1NUUkFURUdZKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0ZJTklTSCIsIFpfRklOSVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9OT19GTFVTSCIsIFpfTk9fRkxVU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX1NZTkNfRkxVU0giLCBaX1NZTkNfRkxVU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0ZVTExfRkxVU0giLCBaX0ZVTExfRkxVU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfRklOSVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX05PX0ZMVVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX1NZTkNfRkxVU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfRlVMTF9GTFVTSCk7CiAKICAgICB2ZXIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhaTElCX1ZFUlNJT04pOwogICAgIGlmICh2ZXIgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL09iamVjdHMvYWJzdHJhY3QuYyBiL09iamVjdHMvYWJzdHJhY3QuYwppbmRleCAxMjRlNzY2Li4zOGRkYjBmIDEwMDY0NAotLS0gYS9PYmplY3RzL2Fic3RyYWN0LmMKKysrIGIvT2JqZWN0cy9hYnN0cmFjdC5jCkBAIC02NCw0OSArNjQsNzIgQEAKIH0KICNkZWZpbmUgUHlPYmplY3RfTGVuZ3RoIFB5T2JqZWN0X1NpemUKIAoraW50CitfUHlPYmplY3RfSGFzTGVuKFB5T2JqZWN0ICpvKSB7CisgICAgcmV0dXJuIChQeV9UWVBFKG8pLT50cF9hc19zZXF1ZW5jZSAmJiBQeV9UWVBFKG8pLT50cF9hc19zZXF1ZW5jZS0+c3FfbGVuZ3RoKSB8fAorICAgICAgICAoUHlfVFlQRShvKS0+dHBfYXNfbWFwcGluZyAmJiBQeV9UWVBFKG8pLT50cF9hc19tYXBwaW5nLT5tcF9sZW5ndGgpOworfQogCiAvKiBUaGUgbGVuZ3RoIGhpbnQgZnVuY3Rpb24gcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSBmcm9tIG8uX19sZW5fXygpCi0gICBvciBvLl9fbGVuZ3RoX2hpbnRfXygpLiAgSWYgdGhvc2UgbWV0aG9kcyBhcmVuJ3QgZm91bmQgb3IgcmV0dXJuIGEgbmVnYXRpdmUKLSAgIHZhbHVlLCB0aGVuIHRoZSBkZWZhdWx0dmFsdWUgaXMgcmV0dXJuZWQuICBJZiBvbmUgb2YgdGhlIGNhbGxzIGZhaWxzLAorICAgb3Igby5fX2xlbmd0aF9oaW50X18oKS4gSWYgdGhvc2UgbWV0aG9kcyBhcmVuJ3QgZm91bmQgdGhlIGRlZmF1bHR2YWx1ZSBpcworICAgcmV0dXJuZWQuICBJZiBvbmUgb2YgdGhlIGNhbGxzIGZhaWxzIHdpdGggYW4gZXhjZXB0aW9uIG90aGVyIHRoYW4gVHlwZUVycm9yCiAgICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgLTEuCiAqLwogCiBQeV9zc2l6ZV90Ci1fUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBkZWZhdWx0dmFsdWUpCitQeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGRlZmF1bHR2YWx1ZSkKIHsKKyAgICBQeU9iamVjdCAqaGludCwgKnJlc3VsdDsKKyAgICBQeV9zc2l6ZV90IHJlczsKICAgICBfUHlfSURFTlRJRklFUihfX2xlbmd0aF9oaW50X18pOwotICAgIFB5T2JqZWN0ICpybywgKmhpbnRtZXRoOwotICAgIFB5X3NzaXplX3QgcnY7Ci0KLSAgICAvKiB0cnkgby5fX2xlbl9fKCkgKi8KLSAgICBydiA9IFB5T2JqZWN0X1NpemUobyk7Ci0gICAgaWYgKHJ2ID49IDApCi0gICAgICAgIHJldHVybiBydjsKLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBpZiAoX1B5T2JqZWN0X0hhc0xlbihvKSkgeworICAgICAgICByZXMgPSBQeU9iamVjdF9MZW5ndGgobyk7CisgICAgICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICAvKiB0cnkgby5fX2xlbmd0aF9oaW50X18oKSAqLwotICAgIGhpbnRtZXRoID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobywgJlB5SWRfX19sZW5ndGhfaGludF9fKTsKLSAgICBpZiAoaGludG1ldGggPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICBoaW50ID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobywgJlB5SWRfX19sZW5ndGhfaGludF9fKTsKKyAgICBpZiAoaGludCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7Ci0gICAgfQotICAgIHJvID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhoaW50bWV0aCwgTlVMTCk7Ci0gICAgUHlfREVDUkVGKGhpbnRtZXRoKTsKLSAgICBpZiAocm8gPT0gTlVMTCkgewotICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOwogICAgIH0KLSAgICBydiA9IFB5TG9uZ19DaGVjayhybykgPyBQeUxvbmdfQXNTc2l6ZV90KHJvKSA6IGRlZmF1bHR2YWx1ZTsKLSAgICBQeV9ERUNSRUYocm8pOwotICAgIHJldHVybiBydjsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGhpbnQsIE5VTEwpOworICAgIFB5X0RFQ1JFRihoaW50KTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHlfTm90SW1wbGVtZW50ZWQpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CisgICAgfQorICAgIGlmICghUHlMb25nX0NoZWNrKHJlc3VsdCkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIl9fbGVuZ3RoX2hpbnRfXyBtdXN0IGJlIGFuIGludGVnZXIsIG5vdCAlLjEwMHMiLAorICAgICAgICAgICAgUHlfVFlQRShyZXN1bHQpLT50cF9uYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmVzID0gUHlMb25nX0FzU3NpemVfdChyZXN1bHQpOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIl9fbGVuZ3RoX2hpbnRfXygpIHNob3VsZCByZXR1cm4gPj0gMCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiByZXM7CiB9CiAKIFB5T2JqZWN0ICoKQEAgLTIwMiw3ICsyMjUsNyBAQAogfQogCiBpbnQKLVB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKK1B5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqb2tleTsKICAgICBpbnQgcmV0OwpAQCAtMTE2Miw2ICsxMTg1LDE1IEBACiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgLyogSXNzdWUgIzE3NTc2OiB3YXJuIGlmICdyZXN1bHQnIG5vdCBvZiBleGFjdCB0eXBlIGludC4gKi8KKyAgICBpZiAoUHlFcnJfV2FybkZvcm1hdChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIDEsCisgICAgICAgICAgICAiX19pbmRleF9fIHJldHVybmVkIG5vbi1pbnQgKHR5cGUgJS4yMDBzKS4gICIKKyAgICAgICAgICAgICJUaGUgYWJpbGl0eSB0byByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgYSBzdHJpY3Qgc3ViY2xhc3Mgb2YgaW50ICIKKyAgICAgICAgICAgICJpcyBkZXByZWNhdGVkLCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBQeXRob24uIiwKKyAgICAgICAgICAgIHJlc3VsdC0+b2JfdHlwZS0+dHBfbmFtZSkpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNjQwLDcgKzE2NzIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEd1ZXNzIHJlc3VsdCBzaXplIGFuZCBhbGxvY2F0ZSBzcGFjZS4gKi8KLSAgICBuID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQodiwgMTApOworICAgIG4gPSBQeU9iamVjdF9MZW5ndGhIaW50KHYsIDEwKTsKICAgICBpZiAobiA9PSAtMSkKICAgICAgICAgZ290byBGYWlsOwogICAgIHJlc3VsdCA9IFB5VHVwbGVfTmV3KG4pOwpAQCAtMTkwMCw3ICsxOTMyLDcgQEAKICNkZWZpbmUgUHlNYXBwaW5nX0xlbmd0aCBQeU1hcHBpbmdfU2l6ZQogCiBQeU9iamVjdCAqCi1QeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqb2tleSwgKnI7CiAKQEAgLTE5MTYsNyArMTk0OCw3IEBACiB9CiAKIGludAotUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnZhbHVlKQorUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIFB5T2JqZWN0ICpva2V5OwogICAgIGludCByOwpAQCAtMTkzNSw3ICsxOTY3LDcgQEAKIH0KIAogaW50Ci1QeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCitQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiB7CiAgICAgUHlPYmplY3QgKnY7CiAKQEAgLTIwMzQsMTAgKzIwNjYsMTYgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXN1bHQgPSAoKmNhbGwpKGZ1bmMsIGFyZywga3cpOwogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorI2lmZGVmIE5ERUJVRworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAiTlVMTCByZXN1bHQgd2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgfHwgKHJlc3VsdCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiJyUuMjAwcycgb2JqZWN0IGlzIG5vdCBjYWxsYWJsZSIsCkBAIC0yMDcyLDcgKzIxMTAsNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKK1B5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmFyZ3M7CkBAIC0yMDg3LDEyICsyMTI1LDE0IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOworICAgIGlmIChhcmdzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmV0dXJuIGNhbGxfZnVuY3Rpb25fdGFpbChjYWxsYWJsZSwgYXJncyk7CiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjExMiw3ICsyMTUyLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgotY2FsbG1ldGhvZChQeU9iamVjdCogZnVuYywgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhLCBpbnQgaXNfc2l6ZV90KQorY2FsbG1ldGhvZChQeU9iamVjdCogZnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhLCBpbnQgaXNfc2l6ZV90KQogewogICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjE0MSw3ICsyMTgxLDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIxNjIsNyArMjIwMiw4IEBACiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sIF9QeV9JZGVudGlmaWVyICpuYW1lLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sIF9QeV9JZGVudGlmaWVyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIxODMsNyArMjIyNCw4IEBACiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUKFB5T2JqZWN0ICpvLCBjaGFyICpuYW1lLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMjAzLDcgKzIyNDUsOCBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMjczLDcgKzIzMTYsNyBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCiAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqbmFtZSwgLi4uKQogewogICAgIFB5T2JqZWN0ICphcmdzLCAqdG1wOwpAQCAtMjY0OCw4ICsyNjkxLDggQEAKICAqIE5VTEwgdGVybWluYXRlZCBzdHJpbmcgcG9pbnRlcnMgd2l0aCBhIE5VTEwgY2hhciogdGVybWluYXRpbmcgdGhlIGFycmF5LgogICogKGllOiBhbiBhcmd2IG9yIGVudiBsaXN0KQogICoKLSAqIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSByZXR1cm5lZCBsaXN0IGlzIGFsbG9jYXRlZCB1c2luZyBtYWxsb2MoKSBhbmQgTVVTVAotICogYmUgZnJlZWQgYnkgdGhlIGNhbGxlciB1c2luZyBhIGZyZWUoKSBsb29wIG9yIF9QeV9GcmVlQ2hhclBBcnJheSgpLgorICogTWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHJldHVybmVkIGxpc3QgaXMgYWxsb2NhdGVkIHVzaW5nIFB5TWVtX01hbGxvYygpCisgKiBhbmQgTVVTVCBiZSBmcmVlZCBieSBfUHlfRnJlZUNoYXJQQXJyYXkoKS4KICAqLwogY2hhciAqY29uc3QgKgogX1B5U2VxdWVuY2VfQnl0ZXNUb0NoYXJwQXJyYXkoUHlPYmplY3QqIHNlbGYpCkBAIC0yNjU3LDYgKzI3MDAsNyBAQAogICAgIGNoYXIgKiphcnJheTsKICAgICBQeV9zc2l6ZV90IGksIGFyZ2M7CiAgICAgUHlPYmplY3QgKml0ZW0gPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIGFyZ2MgPSBQeVNlcXVlbmNlX1NpemUoc2VsZik7CiAgICAgaWYgKGFyZ2MgPT0gLTEpCkBAIC0yNjY5LDcgKzI3MTMsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBhcnJheSA9IG1hbGxvYygoYXJnYyArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgIGFycmF5ID0gUHlNZW1fTWFsbG9jKChhcmdjICsgMSkgKiBzaXplb2YoY2hhciAqKSk7CiAgICAgaWYgKGFycmF5ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNjg4LDExICsyNzMyLDEzIEBACiAgICAgICAgICAgICBhcnJheVtpXSA9IE5VTEw7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KLSAgICAgICAgYXJyYXlbaV0gPSBzdHJkdXAoZGF0YSk7CisgICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGl0ZW0pICsgMTsKKyAgICAgICAgYXJyYXlbaV0gPSBQeU1lbV9NYWxsb2Moc2l6ZSk7CiAgICAgICAgIGlmICghYXJyYXlbaV0pIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGFycmF5W2ldLCBkYXRhLCBzaXplKTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgIH0KICAgICBhcnJheVthcmdjXSA9IE5VTEw7CkBAIC0yNzEyLDcgKzI3NTgsNyBAQAogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBmb3IgKGkgPSAwOyBhcnJheVtpXSAhPSBOVUxMOyArK2kpIHsKLSAgICAgICAgZnJlZShhcnJheVtpXSk7CisgICAgICAgIFB5TWVtX0ZyZWUoYXJyYXlbaV0pOwogICAgIH0KLSAgICBmcmVlKCh2b2lkKilhcnJheSk7CisgICAgUHlNZW1fRnJlZSgodm9pZCopYXJyYXkpOwogfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYyBiL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKaW5kZXggNjBiMjgxMS4uMzFjYzRjYyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYworKysgYi9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCkBAIC0xNTAsNiArMTUwLDcgQEAKICAgICB9CiAgICAgUHlfU0laRShuZXcpID0gc2l6ZTsKICAgICBuZXctPm9iX2FsbG9jID0gYWxsb2M7CisgICAgbmV3LT5vYl9zdGFydCA9IG5ldy0+b2JfYnl0ZXM7CiAgICAgbmV3LT5vYl9leHBvcnRzID0gMDsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKiluZXc7CkBAIC0xNzcsNDggKzE3OCw3MCBAQAogUHlCeXRlQXJyYXlfUmVzaXplKFB5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IHNpemUpCiB7CiAgICAgdm9pZCAqc3ZhbDsKLSAgICBQeV9zc2l6ZV90IGFsbG9jID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9hbGxvYzsKKyAgICBQeUJ5dGVBcnJheU9iamVjdCAqb2JqID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpOworICAgIFB5X3NzaXplX3QgYWxsb2MgPSBvYmotPm9iX2FsbG9jOworICAgIFB5X3NzaXplX3QgbG9naWNhbF9vZmZzZXQgPSBvYmotPm9iX3N0YXJ0IC0gb2JqLT5vYl9ieXRlczsKIAogICAgIGFzc2VydChzZWxmICE9IE5VTEwpOwogICAgIGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSk7CiAgICAgYXNzZXJ0KHNpemUgPj0gMCk7CisgICAgYXNzZXJ0KGxvZ2ljYWxfb2Zmc2V0ID49IDApOworICAgIGFzc2VydChsb2dpY2FsX29mZnNldCA8PSBhbGxvYyk7CiAKICAgICBpZiAoc2l6ZSA9PSBQeV9TSVpFKHNlbGYpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoIV9jYW5yZXNpemUoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZikpIHsKKyAgICBpZiAoIV9jYW5yZXNpemUob2JqKSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKHNpemUgPCBhbGxvYyAvIDIpIHsKLSAgICAgICAgLyogTWFqb3IgZG93bnNpemU7IHJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2l6ZSA8IGFsbG9jKSB7Ci0gICAgICAgIC8qIFdpdGhpbiBhbGxvY2F0ZWQgc2l6ZTsgcXVpY2sgZXhpdCAqLwotICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlc1tzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNpemUgPD0gYWxsb2MgKiAxLjEyNSkgewotICAgICAgICAvKiBNb2RlcmF0ZSB1cHNpemU7IG92ZXJhbGxvY2F0ZSBzaW1pbGFyIHRvIGxpc3RfcmVzaXplKCkgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgKHNpemUgPj4gMykgKyAoc2l6ZSA8IDkgPyAzIDogNik7CisgICAgaWYgKHNpemUgKyBsb2dpY2FsX29mZnNldCArIDEgPCBhbGxvYykgeworICAgICAgICAvKiBDdXJyZW50IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2ggdG8gaG9zdCB0aGUgcmVxdWVzdGVkIHNpemUsCisgICAgICAgICAgIGRlY2lkZSBvbiBhIHN0cmF0ZWd5LiAqLworICAgICAgICBpZiAoc2l6ZSA8IGFsbG9jIC8gMikgeworICAgICAgICAgICAgLyogTWFqb3IgZG93bnNpemU7IHJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KKyAgICAgICAgICAgIGFsbG9jID0gc2l6ZSArIDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNaW5vciBkb3duc2l6ZTsgcXVpY2sgZXhpdCAqLworICAgICAgICAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7CisgICAgICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbc2l6ZV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgLyogTWFqb3IgdXBzaXplOyByZXNpemUgdXAgdG8gZXhhY3Qgc2l6ZSAqLwotICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICAvKiBOZWVkIGdyb3dpbmcsIGRlY2lkZSBvbiBhIHN0cmF0ZWd5ICovCisgICAgICAgIGlmIChzaXplIDw9IGFsbG9jICogMS4xMjUpIHsKKyAgICAgICAgICAgIC8qIE1vZGVyYXRlIHVwc2l6ZTsgb3ZlcmFsbG9jYXRlIHNpbWlsYXIgdG8gbGlzdF9yZXNpemUoKSAqLworICAgICAgICAgICAgYWxsb2MgPSBzaXplICsgKHNpemUgPj4gMykgKyAoc2l6ZSA8IDkgPyAzIDogNik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNYWpvciB1cHNpemU7IHJlc2l6ZSB1cCB0byBleGFjdCBzaXplICovCisgICAgICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICB9CiAgICAgfQogCi0gICAgc3ZhbCA9IFB5T2JqZWN0X1JlYWxsb2MoKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlcywgYWxsb2MpOwotICAgIGlmIChzdmFsID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChsb2dpY2FsX29mZnNldCA+IDApIHsKKyAgICAgICAgc3ZhbCA9IFB5T2JqZWN0X01hbGxvYyhhbGxvYyk7CisgICAgICAgIGlmIChzdmFsID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHN2YWwsIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwgUHlfTUlOKHNpemUsIFB5X1NJWkUoc2VsZikpKTsKKyAgICAgICAgUHlPYmplY3RfRnJlZShvYmotPm9iX2J5dGVzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN2YWwgPSBQeU9iamVjdF9SZWFsbG9jKG9iai0+b2JfYnl0ZXMsIGFsbG9jKTsKKyAgICAgICAgaWYgKHN2YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KIAotICAgICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYnl0ZXMgPSBzdmFsOworICAgIG9iai0+b2JfYnl0ZXMgPSBvYmotPm9iX3N0YXJ0ID0gc3ZhbDsKICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2FsbG9jID0gYWxsb2M7Ci0gICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlc1tzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLworICAgIG9iai0+b2JfYWxsb2MgPSBhbGxvYzsKKyAgICBvYmotPm9iX2J5dGVzW3NpemVdID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTI4OCwxMyArMzExLDEzIEBACiAgICAgfQogICAgIGlmIChzaXplIDwgc2VsZi0+b2JfYWxsb2MpIHsKICAgICAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7Ci0gICAgICAgIHNlbGYtPm9iX2J5dGVzW1B5X1NJWkUoc2VsZildID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCisgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtQeV9TSVpFKHNlbGYpXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLwogICAgIH0KICAgICBlbHNlIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZvKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIG15c2l6ZSwgdm8uYnVmLCB2by5sZW4pOworICAgIG1lbWNweShQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZikgKyBteXNpemUsIHZvLmJ1Ziwgdm8ubGVuKTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2byk7CiAgICAgUHlfSU5DUkVGKHNlbGYpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwpAQCAtMzMxLDYgKzM1NCw3IEBACiB7CiAgICAgUHlfc3NpemVfdCBteXNpemU7CiAgICAgUHlfc3NpemVfdCBzaXplOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgIGNvdW50ID0gMDsKQEAgLTMzOCwxOSArMzYyLDE2IEBACiAgICAgaWYgKGNvdW50ID4gMCAmJiBteXNpemUgPiBQWV9TU0laRV9UX01BWCAvIGNvdW50KQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBzaXplID0gbXlzaXplICogY291bnQ7Ci0gICAgaWYgKHNpemUgPCBzZWxmLT5vYl9hbGxvYykgewotICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgc2VsZi0+b2JfYnl0ZXNbUHlfU0laRShzZWxmKV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkKKyAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgaWYgKG15c2l6ZSA9PSAxKQotICAgICAgICBtZW1zZXQoc2VsZi0+b2JfYnl0ZXMsIHNlbGYtPm9iX2J5dGVzWzBdLCBzaXplKTsKKyAgICAgICAgbWVtc2V0KGJ1ZiwgYnVmWzBdLCBzaXplKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICBmb3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIGkqbXlzaXplLCBzZWxmLT5vYl9ieXRlcywgbXlzaXplKTsKKyAgICAgICAgICAgIG1lbWNweShidWYgKyBpKm15c2l6ZSwgYnVmLCBteXNpemUpOwogICAgIH0KIAogICAgIFB5X0lOQ1JFRihzZWxmKTsKQEAgLTM2Niw3ICszODcsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImJ5dGVhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpKHNlbGYtPm9iX2J5dGVzW2ldKSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldKSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zODUsNyArNDA2LDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiYnl0ZWFycmF5IGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoc2VsZi0+b2JfYnl0ZXNbaV0pKTsKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldKSk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaW5kZXgpKSB7CiAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuZ3RoLCBjdXIsIGk7CkBAIC0zOTgsOCArNDE5LDggQEAKICAgICAgICAgaWYgKHNsaWNlbGVuZ3RoIDw9IDApCiAgICAgICAgICAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOwogICAgICAgICBlbHNlIGlmIChzdGVwID09IDEpIHsKLSAgICAgICAgICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKAorICAgICAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSArIHN0YXJ0LCBzbGljZWxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjaGFyICpzb3VyY2VfYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwpAQCAtNDI1LDEwICs0NDYsOTQgQEAKIH0KIAogc3RhdGljIGludAorYnl0ZWFycmF5X3NldHNsaWNlX2xpbmVhcihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnl0ZXMsIFB5X3NzaXplX3QgYnl0ZXNfbGVuKQoreworICAgIFB5X3NzaXplX3QgYXZhaWwgPSBoaSAtIGxvOworICAgIGNoYXIgKmJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICBQeV9zc2l6ZV90IGdyb3d0aCA9IGJ5dGVzX2xlbiAtIGF2YWlsOworICAgIGludCByZXMgPSAwOworICAgIGFzc2VydChhdmFpbCA+PSAwKTsKKworICAgIGlmIChncm93dGggPCAwKSB7CisgICAgICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBpZiAobG8gPT0gMCkgeworICAgICAgICAgICAgLyogU2hyaW5rIHRoZSBidWZmZXIgYnkgYWR2YW5jaW5nIGl0cyBsb2dpY2FsIHN0YXJ0ICovCisgICAgICAgICAgICBzZWxmLT5vYl9zdGFydCAtPSBncm93dGg7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICAgICBoaSAgICAgICAgICAgICBvbGRfc2l6ZQorICAgICAgICAgICAgICB8ICAgfDwtLS0tYXZhaWwtLS0tLT58PC0tLS0tdGFpbC0tLS0tLT58CisgICAgICAgICAgICAgIHwgICAgICB8PC1ieXRlc19sZW4tPnw8LS0tLS10YWlsLS0tLS0tPnwKKyAgICAgICAgICAgICAgMCAgICBuZXdfbG8gICAgICAgICBuZXdfaGkgICAgICAgICAgbmV3X3NpemUKKyAgICAgICAgICAgICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCisgICAgICAgICAgICAgIHwgICB8PC0tLS1hdmFpbC0tLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAorICAgICAgICAgICAgICB8ICAgfDwtYnl0ZXNfbGVuLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKKyAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1lbW1vdmUoYnVmICsgbG8gKyBieXRlc19sZW4sIGJ1ZiArIGhpLAorICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gaGkpOworICAgICAgICB9CisgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgZ3Jvd3RoKSA8IDApIHsKKyAgICAgICAgICAgIC8qIElzc3VlICMxOTU3ODogSGFuZGxpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgaGVyZSBpcworICAgICAgICAgICAgICAgdHJpY2t5IGhlcmUgYmVjYXVzZSB0aGUgYnl0ZWFycmF5IG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuCisgICAgICAgICAgICAgICBtb2RpZmllZC4gRGVwZW5kaW5nIG9uIGdyb3d0aCBhbmQgbG8sIHRoZSBiZWhhdmlvdXIgaXMKKyAgICAgICAgICAgICAgIGRpZmZlcmVudC4KKworICAgICAgICAgICAgICAgSWYgZ3Jvd3RoIDwgMCBhbmQgbG8gIT0gMCwgdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIGJ1dCBhCisgICAgICAgICAgICAgICBNZW1vcnlFcnJvciBpcyBzdGlsbCByYWlzZWQgYW5kIHRoZSBtZW1vcnkgYmxvY2sgaXMgbm90CisgICAgICAgICAgICAgICBzaHJpbmtlZC4gT3RoZXJ3aXNlLCB0aGUgYnl0ZWFycmF5IGlzIHJlc3RvcmVkIGluIGl0cyBwcmV2aW91cworICAgICAgICAgICAgICAgc3RhdGUgYW5kIGEgTWVtb3J5RXJyb3IgaXMgcmFpc2VkLiAqLworICAgICAgICAgICAgaWYgKGxvID09IDApIHsKKyAgICAgICAgICAgICAgICBzZWxmLT5vYl9zdGFydCArPSBncm93dGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogbWVtbW92ZSgpIHJlbW92ZWQgYnl0ZXMsIHRoZSBieXRlYXJyYXkgb2JqZWN0IGNhbm5vdCBiZQorICAgICAgICAgICAgICAgcmVzdG9yZWQgaW4gaXRzIHByZXZpb3VzIHN0YXRlLiAqLworICAgICAgICAgICAgUHlfU0laRShzZWxmKSArPSBncm93dGg7CisgICAgICAgICAgICByZXMgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgfQorICAgIGVsc2UgaWYgKGdyb3d0aCA+IDApIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoc2VsZikgPiAoUHlfc3NpemVfdClQWV9TU0laRV9UX01BWCAtIGdyb3d0aCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgZ3Jvd3RoKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgICAgIC8qIE1ha2UgdGhlIHBsYWNlIGZvciB0aGUgYWRkaXRpb25hbCBieXRlcyAqLworICAgICAgICAvKgorICAgICAgICAgIDAgICBsbyAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQorICAgICAgICAgIHwgICB8PC1hdmFpbC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgfCAgIHw8LS0tYnl0ZXNfbGVuLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQorICAgICAgICAgKi8KKyAgICAgICAgbWVtbW92ZShidWYgKyBsbyArIGJ5dGVzX2xlbiwgYnVmICsgaGksCisgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIGxvIC0gYnl0ZXNfbGVuKTsKKyAgICB9CisKKyAgICBpZiAoYnl0ZXNfbGVuID4gMCkKKyAgICAgICAgbWVtY3B5KGJ1ZiArIGxvLCBieXRlcywgYnl0ZXNfbGVuKTsKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50CiBieXRlYXJyYXlfc2V0c2xpY2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbG8sIFB5X3NzaXplX3QgaGksCiAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWVzKQogewotICAgIFB5X3NzaXplX3QgYXZhaWwsIG5lZWRlZDsKKyAgICBQeV9zc2l6ZV90IG5lZWRlZDsKICAgICB2b2lkICpieXRlczsKICAgICBQeV9idWZmZXIgdmJ5dGVzOwogICAgIGludCByZXMgPSAwOwpAQCAtNDY3LDUwICs1NzIsOSBAQAogICAgIGlmIChoaSA+IFB5X1NJWkUoc2VsZikpCiAgICAgICAgIGhpID0gUHlfU0laRShzZWxmKTsKIAotICAgIGF2YWlsID0gaGkgLSBsbzsKLSAgICBpZiAoYXZhaWwgPCAwKQotICAgICAgICBsbyA9IGhpID0gYXZhaWwgPSAwOwotCi0gICAgaWYgKGF2YWlsICE9IG5lZWRlZCkgewotICAgICAgICBpZiAoYXZhaWwgPiBuZWVkZWQpIHsKLSAgICAgICAgICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkgewotICAgICAgICAgICAgICAgIHJlcyA9IC0xOwotICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICB8ICAgfDwtLS0tYXZhaWwtLS0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgfCAgIHw8LW5lZWRlZC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgIDAgICBsbyAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgbG8gKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgaGksCi0gICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogbmVlZCB0byB2ZXJpZnkgdGhpcyBjYW4ndCBvdmVyZmxvdyEgKi8KLSAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSArIG5lZWRlZCAtIGF2YWlsKSA8IDApIHsKLSAgICAgICAgICAgICAgICByZXMgPSAtMTsKLSAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXZhaWwgPCBuZWVkZWQpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgIDAgICBsbyAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICB8ICAgfDwtYXZhaWwtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICB8ICAgfDwtLS0tbmVlZGVkLS0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgbG8gKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgaGksCi0gICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBsbyAtIG5lZWRlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobmVlZGVkID4gMCkKLSAgICAgICAgbWVtY3B5KHNlbGYtPm9iX2J5dGVzICsgbG8sIGJ5dGVzLCBuZWVkZWQpOwotCi0KLSBmaW5pc2g6CisgICAgcmVzID0gYnl0ZWFycmF5X3NldHNsaWNlX2xpbmVhcihzZWxmLCBsbywgaGksIGJ5dGVzLCBuZWVkZWQpOwogICAgIGlmICh2Ynl0ZXMubGVuICE9IC0xKQotICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmJ5dGVzKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmJ5dGVzKTsKICAgICByZXR1cm4gcmVzOwogfQogCkBAIC01MzMsNyArNTk3LDcgQEAKICAgICBpZiAoIV9nZXRieXRldmFsdWUodmFsdWUsICZpdmFsKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgc2VsZi0+b2JfYnl0ZXNbaV0gPSBpdmFsOworICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtpXSA9IGl2YWw7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU0MSw3ICs2MDUsOCBAQAogYnl0ZWFycmF5X2Fzc19zdWJzY3JpcHQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbmRleCwgUHlPYmplY3QgKnZhbHVlcykKIHsKICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbiwgbmVlZGVkOwotICAgIGNoYXIgKmJ5dGVzOworICAgIGNoYXIgKmJ1ZiwgKmJ5dGVzOworICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKIAogICAgIGlmIChQeUluZGV4X0NoZWNrKGluZGV4KSkgewogICAgICAgICBQeV9zc2l6ZV90IGkgPSBQeU51bWJlcl9Bc1NzaXplX3QoaW5kZXgsIFB5RXhjX0luZGV4RXJyb3IpOwpAQCAtNTY4LDcgKzYzMyw3IEBACiAgICAgICAgICAgICBpbnQgaXZhbDsKICAgICAgICAgICAgIGlmICghX2dldGJ5dGV2YWx1ZSh2YWx1ZXMsICZpdmFsKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBzZWxmLT5vYl9ieXRlc1tpXSA9IChjaGFyKWl2YWw7CisgICAgICAgICAgICBidWZbaV0gPSAoY2hhcilpdmFsOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC02MDYsNyArNjcxLDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayh2YWx1ZXMpKTsKLSAgICAgICAgYnl0ZXMgPSAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopdmFsdWVzKS0+b2JfYnl0ZXM7CisgICAgICAgIGJ5dGVzID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHZhbHVlcyk7CiAgICAgICAgIG5lZWRlZCA9IFB5X1NJWkUodmFsdWVzKTsKICAgICB9CiAgICAgLyogTWFrZSBzdXJlIGJbNToyXSA9IC4uLiBpbnNlcnRzIGJlZm9yZSA1LCBub3QgYmVmb3JlIDIuICovCkBAIC02MTQsMzggKzY3OSw3IEBACiAgICAgICAgIChzdGVwID4gMCAmJiBzdGFydCA+IHN0b3ApKQogICAgICAgICBzdG9wID0gc3RhcnQ7CiAgICAgaWYgKHN0ZXAgPT0gMSkgewotICAgICAgICBpZiAoc2xpY2VsZW4gIT0gbmVlZGVkKSB7Ci0gICAgICAgICAgICBpZiAoIV9jYW5yZXNpemUoc2VsZikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKHNsaWNlbGVuID4gbmVlZGVkKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgIDAgICBzdGFydCAgICAgICAgICAgc3RvcCAgICAgICAgICAgICAgb2xkX3NpemUKLSAgICAgICAgICAgICAgICAgIHwgICB8PC0tLXNsaWNlbGVuLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgfCAgIHw8LW5lZWRlZC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICAwICAgbG8gICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgc3RhcnQgKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBzdG9wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgbmVlZGVkIC0gc2xpY2VsZW4pIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoc2xpY2VsZW4gPCBuZWVkZWQpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgMCAgIGxvICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCi0gICAgICAgICAgICAgICAgICB8ICAgfDwtYXZhaWwtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgfCAgIHw8LS0tLW5lZWRlZC0tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0ICsgbmVlZGVkLCBzZWxmLT5vYl9ieXRlcyArIHN0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gc3RhcnQgLSBuZWVkZWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZWRlZCA+IDApCi0gICAgICAgICAgICBtZW1jcHkoc2VsZi0+b2JfYnl0ZXMgKyBzdGFydCwgYnl0ZXMsIG5lZWRlZCk7Ci0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBieXRlYXJyYXlfc2V0c2xpY2VfbGluZWFyKHNlbGYsIHN0YXJ0LCBzdG9wLCBieXRlcywgbmVlZGVkKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChuZWVkZWQgPT0gMCkgewpAQCAtNjcyLDE0ICs3MDYsMTQgQEAKICAgICAgICAgICAgICAgICBpZiAoY3VyICsgc3RlcCA+PSAoc2l6ZV90KVB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpKQogICAgICAgICAgICAgICAgICAgICBsaW0gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAtIGN1ciAtIDE7CiAKLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgY3VyIC0gaSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzICsgY3VyICsgMSwgbGltKTsKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGJ1ZiArIGN1ciAtIGksCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyBjdXIgKyAxLCBsaW0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogTW92ZSB0aGUgdGFpbCBvZiB0aGUgYnl0ZXMsIGluIG9uZSBjaHVuayAqLwogICAgICAgICAgICAgY3VyID0gc3RhcnQgKyAoc2l6ZV90KXNsaWNlbGVuKnN0ZXA7CiAgICAgICAgICAgICBpZiAoY3VyIDwgKHNpemVfdClQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSkgewotICAgICAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBjdXIgLSBzbGljZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzICsgY3VyLAorICAgICAgICAgICAgICAgIG1lbW1vdmUoYnVmICsgY3VyIC0gc2xpY2VsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyBjdXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAtIGN1cik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsCkBAIC03MDEsNyArNzM1LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGN1ciA9IHN0YXJ0LCBpID0gMDsgaSA8IHNsaWNlbGVuOyBjdXIgKz0gc3RlcCwgaSsrKQotICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzW2N1cl0gPSBieXRlc1tpXTsKKyAgICAgICAgICAgICAgICBidWZbY3VyXSA9IGJ5dGVzW2ldOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC03ODEsNyArODE1LDcgQEAKICAgICAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBjb3VudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgbWVtc2V0KHNlbGYtPm9iX2J5dGVzLCAwLCBjb3VudCk7CisgICAgICAgICAgICBtZW1zZXQoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLCAwLCBjb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNzk0LDcgKzgyOCw4IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHNpemUgPSB2aWV3LmxlbjsKICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBzaXplKSA8IDApIGdvdG8gZmFpbDsKLSAgICAgICAgaWYgKFB5QnVmZmVyX1RvQ29udGlndW91cyhzZWxmLT5vYl9ieXRlcywgJnZpZXcsIHNpemUsICdDJykgPCAwKQorICAgICAgICBpZiAoUHlCdWZmZXJfVG9Db250aWd1b3VzKFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwKKyAgICAgICAgICAgICZ2aWV3LCBzaXplLCAnQycpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtODM4LDcgKzg3Myw3IEBACiAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpKys7CiAgICAgICAgIGVsc2UgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBQeV9TSVpFKHNlbGYpKzEpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIHNlbGYtPm9iX2J5dGVzW1B5X1NJWkUoc2VsZiktMV0gPSB2YWx1ZTsKKyAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW1B5X1NJWkUoc2VsZiktMV0gPSB2YWx1ZTsKICAgICB9CiAKICAgICAvKiBDbGVhbiB1cCBhbmQgcmV0dXJuIHN1Y2Nlc3MgKi8KQEAgLTg2Miw5ICs4OTcsMTAgQEAKICAgICAvKiAxNSA9PSBzdHJsZW4ocXVvdGVfcHJlZml4KSArIDIgKyBzdHJsZW4ocXVvdGVfcG9zdGZpeCkgKyAxICovCiAgICAgc2l6ZV90IG5ld3NpemU7CiAgICAgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIGNoYXIgYzsKLSAgICByZWdpc3RlciBjaGFyICpwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBjaGFyICpieXRlczsKKyAgICBjaGFyIGM7CisgICAgY2hhciAqcDsKICAgICBpbnQgcXVvdGU7CiAgICAgY2hhciAqdGVzdCwgKnN0YXJ0OwogICAgIGNoYXIgKmJ1ZmZlcjsKQEAgLTg5OSwxMSArOTM1LDEyIEBACiAgICAgICAgICpwKysgPSAqcXVvdGVfcHJlZml4Kys7CiAgICAgKnArKyA9IHF1b3RlOwogCisgICAgYnl0ZXMgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIC8qIFRoZXJlJ3MgYXQgbGVhc3QgZW5vdWdoIHJvb20gZm9yIGEgaGV4IGVzY2FwZQogICAgICAgICAgICBhbmQgYSBjbG9zaW5nIHF1b3RlLiAqLwogICAgICAgICBhc3NlcnQobmV3c2l6ZSAtIChwIC0gYnVmZmVyKSA+PSA1KTsKLSAgICAgICAgYyA9IHNlbGYtPm9iX2J5dGVzW2ldOworICAgICAgICBjID0gYnl0ZXNbaV07CiAgICAgICAgIGlmIChjID09ICdcJycgfHwgYyA9PSAnXFwnKQogICAgICAgICAgICAgKnArKyA9ICdcXCcsICpwKysgPSBjOwogICAgICAgICBlbHNlIGlmIChjID09ICdcdCcpCkBAIC0xMDM4LDYgKzEwNzUsNyBAQAogI2RlZmluZSBGQVNUU0VBUkNIIGZhc3RzZWFyY2gKICNkZWZpbmUgU1RSSU5HTElCKEYpIHN0cmluZ2xpYl8jI0YKICNkZWZpbmUgU1RSSU5HTElCX0NIQVIgY2hhcgorI2RlZmluZSBTVFJJTkdMSUJfU0laRU9GX0NIQVIgMQogI2RlZmluZSBTVFJJTkdMSUJfTEVOIFB5Qnl0ZUFycmF5X0dFVF9TSVpFCiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgUHlCeXRlQXJyYXlfQVNfU1RSSU5HCiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKQEAgLTEwNDksNiArMTA4Nyw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9qb2luLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3BhcnRpdGlvbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jdHlwZS5oIgpAQCAtMTQyOSw5ICsxNDY4LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlYXJyYXlfdHJhbnNsYXRlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZWdpc3RlciBjaGFyICppbnB1dCwgKm91dHB1dDsKLSAgICByZWdpc3RlciBjb25zdCBjaGFyICp0YWJsZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGM7CisgICAgY2hhciAqaW5wdXQsICpvdXRwdXQ7CisgICAgY29uc3QgY2hhciAqdGFibGU7CisgICAgUHlfc3NpemVfdCBpLCBjOwogICAgIFB5T2JqZWN0ICppbnB1dF9vYmogPSAoUHlPYmplY3QqKXNlbGY7CiAgICAgY29uc3QgY2hhciAqb3V0cHV0X3N0YXJ0OwogICAgIFB5X3NzaXplX3QgaW5sZW47CkBAIC0yMTkyLDcgKzIyMzEsNyBAQAogICAgIFB5X3NzaXplX3QgaSwgaiwgbiA9IFB5X1NJWkUoc2VsZik7CiAKICAgICBqID0gbiAvIDI7Ci0gICAgaGVhZCA9IHNlbGYtPm9iX2J5dGVzOworICAgIGhlYWQgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgdGFpbCA9IGhlYWQgKyBuIC0gMTsKICAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7CiAgICAgICAgIHN3YXAgPSAqaGVhZDsKQEAgLTIyMTMsNiArMjI1Miw3IEBACiAgICAgUHlPYmplY3QgKnZhbHVlOwogICAgIGludCBpdmFsOwogICAgIFB5X3NzaXplX3Qgd2hlcmUsIG4gPSBQeV9TSVpFKHNlbGYpOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibk86aW5zZXJ0IiwgJndoZXJlLCAmdmFsdWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIyMjYsNiArMjI2Niw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiArIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogCiAgICAgaWYgKHdoZXJlIDwgMCkgewogICAgICAgICB3aGVyZSArPSBuOwpAQCAtMjIzNCw4ICsyMjc1LDggQEAKICAgICB9CiAgICAgaWYgKHdoZXJlID4gbikKICAgICAgICAgd2hlcmUgPSBuOwotICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSArIDEsIHNlbGYtPm9iX2J5dGVzICsgd2hlcmUsIG4gLSB3aGVyZSk7Ci0gICAgc2VsZi0+b2JfYnl0ZXNbd2hlcmVdID0gaXZhbDsKKyAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlICsgMSwgYnVmICsgd2hlcmUsIG4gLSB3aGVyZSk7CisgICAgYnVmW3doZXJlXSA9IGl2YWw7CiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTIyNjAsNyArMjMwMSw3IEBACiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuICsgMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPm9iX2J5dGVzW25dID0gdmFsdWU7CisgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW25dID0gdmFsdWU7CiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTIyOTEsNyArMjMzMiw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogVHJ5IHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIHRoZSBhcmd1bWVudC4gMzIgaXMgYXJiaXRyYXJ5LiAqLwotICAgIGJ1Zl9zaXplID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoYXJnLCAzMik7CisgICAgYnVmX3NpemUgPSBQeU9iamVjdF9MZW5ndGhIaW50KGFyZywgMzIpOwogICAgIGlmIChidWZfc2l6ZSA9PSAtMSkgewogICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNTMsNiArMjM5NCw3IEBACiB7CiAgICAgaW50IHZhbHVlOwogICAgIFB5X3NzaXplX3Qgd2hlcmUgPSAtMSwgbiA9IFB5X1NJWkUoc2VsZik7CisgICAgY2hhciAqYnVmOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpwb3AiLCAmd2hlcmUpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNzEsOCArMjQxMyw5IEBACiAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHZhbHVlID0gc2VsZi0+b2JfYnl0ZXNbd2hlcmVdOwotICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSwgc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOworICAgIHZhbHVlID0gYnVmW3doZXJlXTsKKyAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlLCBidWYgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuIC0gMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjM4OCwxMiArMjQzMSwxMyBAQAogewogICAgIGludCB2YWx1ZTsKICAgICBQeV9zc2l6ZV90IHdoZXJlLCBuID0gUHlfU0laRShzZWxmKTsKKyAgICBjaGFyICpidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAKICAgICBpZiAoISBfZ2V0Ynl0ZXZhbHVlKGFyZywgJnZhbHVlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmb3IgKHdoZXJlID0gMDsgd2hlcmUgPCBuOyB3aGVyZSsrKSB7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9ieXRlc1t3aGVyZV0gPT0gdmFsdWUpCisgICAgICAgIGlmIChidWZbd2hlcmVdID09IHZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICh3aGVyZSA9PSBuKSB7CkBAIC0yNDAzLDcgKzI0NDcsNyBAQAogICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgd2hlcmUsIHNlbGYtPm9iX2J5dGVzICsgd2hlcmUgKyAxLCBuIC0gd2hlcmUpOworICAgIG1lbW1vdmUoYnVmICsgd2hlcmUsIGJ1ZiArIHdoZXJlICsgMSwgbiAtIHdoZXJlKTsKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gLSAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yNDEzLDIxICsyNDU3LDIxIEBACiAvKiBYWFggVGhlc2UgdHdvIGhlbHBlcnMgY291bGQgYmUgb3B0aW1pemVkIGlmIGFyZ3NpemUgPT0gMSAqLwogCiBzdGF0aWMgUHlfc3NpemVfdAotbHN0cmlwX2hlbHBlcih1bnNpZ25lZCBjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCitsc3RyaXBfaGVscGVyKGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKICAgICAgICAgICAgICAgdm9pZCAqYXJncHRyLCBQeV9zc2l6ZV90IGFyZ3NpemUpCiB7CiAgICAgUHlfc3NpemVfdCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IG15c2l6ZSAmJiBtZW1jaHIoYXJncHRyLCBteXB0cltpXSwgYXJnc2l6ZSkpCisgICAgd2hpbGUgKGkgPCBteXNpemUgJiYgbWVtY2hyKGFyZ3B0ciwgKHVuc2lnbmVkIGNoYXIpIG15cHRyW2ldLCBhcmdzaXplKSkKICAgICAgICAgaSsrOwogICAgIHJldHVybiBpOwogfQogCiBzdGF0aWMgUHlfc3NpemVfdAotcnN0cmlwX2hlbHBlcih1bnNpZ25lZCBjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCityc3RyaXBfaGVscGVyKGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKICAgICAgICAgICAgICAgdm9pZCAqYXJncHRyLCBQeV9zc2l6ZV90IGFyZ3NpemUpCiB7CiAgICAgUHlfc3NpemVfdCBpID0gbXlzaXplIC0gMTsKLSAgICB3aGlsZSAoaSA+PSAwICYmIG1lbWNocihhcmdwdHIsIG15cHRyW2ldLCBhcmdzaXplKSkKKyAgICB3aGlsZSAoaSA+PSAwICYmIG1lbWNocihhcmdwdHIsICh1bnNpZ25lZCBjaGFyKSBteXB0cltpXSwgYXJnc2l6ZSkpCiAgICAgICAgIGktLTsKICAgICByZXR1cm4gaSArIDE7CiB9CkBAIC0yNDQyLDcgKzI0ODYsNyBAQAogYnl0ZWFycmF5X3N0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IGxlZnQsIHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7Ci0gICAgdm9pZCAqbXlwdHIsICphcmdwdHI7CisgICAgY2hhciAqbXlwdHIsICphcmdwdHI7CiAgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAgICAgUHlfYnVmZmVyIHZhcmc7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpzdHJpcCIsICZhcmcpKQpAQCAtMjQ1NCwxMCArMjQ5OCwxMCBAQAogICAgIGVsc2UgewogICAgICAgICBpZiAoX2dldGJ1ZmZlcihhcmcsICZ2YXJnKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXJncHRyID0gdmFyZy5idWY7CisgICAgICAgIGFyZ3B0ciA9IChjaGFyICopIHZhcmcuYnVmOwogICAgICAgICBhcmdzaXplID0gdmFyZy5sZW47CiAgICAgfQotICAgIG15cHRyID0gc2VsZi0+b2JfYnl0ZXM7CisgICAgbXlwdHIgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgbXlzaXplID0gUHlfU0laRShzZWxmKTsKICAgICBsZWZ0ID0gbHN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChsZWZ0ID09IG15c2l6ZSkKQEAgLTI0NjYsNyArMjUxMCw3IEBACiAgICAgICAgIHJpZ2h0ID0gcnN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChhcmcgIT0gUHlfTm9uZSkKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFyZyk7Ci0gICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKKyAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUobXlwdHIgKyBsZWZ0LCByaWdodCAtIGxlZnQpOwogfQogCiBQeURvY19TVFJWQVIobHN0cmlwX19kb2NfXywKQEAgLTI0NzksNyArMjUyMyw3IEBACiBieXRlYXJyYXlfbHN0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IGxlZnQsIHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7Ci0gICAgdm9pZCAqbXlwdHIsICphcmdwdHI7CisgICAgY2hhciAqbXlwdHIsICphcmdwdHI7CiAgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAgICAgUHlfYnVmZmVyIHZhcmc7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8Tzpsc3RyaXAiLCAmYXJnKSkKQEAgLTI0OTEsMTYgKzI1MzUsMTYgQEAKICAgICBlbHNlIHsKICAgICAgICAgaWYgKF9nZXRidWZmZXIoYXJnLCAmdmFyZykgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ3B0ciA9IHZhcmcuYnVmOworICAgICAgICBhcmdwdHIgPSAoY2hhciAqKSB2YXJnLmJ1ZjsKICAgICAgICAgYXJnc2l6ZSA9IHZhcmcubGVuOwogICAgIH0KLSAgICBteXB0ciA9IHNlbGYtPm9iX2J5dGVzOworICAgIG15cHRyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7CiAgICAgbGVmdCA9IGxzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYXJncHRyLCBhcmdzaXplKTsKICAgICByaWdodCA9IG15c2l6ZTsKICAgICBpZiAoYXJnICE9IFB5X05vbmUpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZhcmcpOwotICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcyArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CisgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKG15cHRyICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKIH0KIAogUHlEb2NfU1RSVkFSKHJzdHJpcF9fZG9jX18sCkBAIC0yNTEzLDcgKzI1NTcsNyBAQAogYnl0ZWFycmF5X3JzdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCByaWdodCwgbXlzaXplLCBhcmdzaXplOwotICAgIHZvaWQgKm15cHRyLCAqYXJncHRyOworICAgIGNoYXIgKm15cHRyLCAqYXJncHRyOwogICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwogICAgIFB5X2J1ZmZlciB2YXJnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86cnN0cmlwIiwgJmFyZykpCkBAIC0yNTI1LDE1ICsyNTY5LDE1IEBACiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChfZ2V0YnVmZmVyKGFyZywgJnZhcmcpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhcmdwdHIgPSB2YXJnLmJ1ZjsKKyAgICAgICAgYXJncHRyID0gKGNoYXIgKikgdmFyZy5idWY7CiAgICAgICAgIGFyZ3NpemUgPSB2YXJnLmxlbjsKICAgICB9Ci0gICAgbXlwdHIgPSBzZWxmLT5vYl9ieXRlczsKKyAgICBteXB0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwogICAgIHJpZ2h0ID0gcnN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChhcmcgIT0gUHlfTm9uZSkKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFyZyk7Ci0gICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzLCByaWdodCk7CisgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKG15cHRyLCByaWdodCk7CiB9CiAKIFB5RG9jX1NUUlZBUihkZWNvZGVfZG9jLApAQCAtMjU3OCw3MyArMjYyMiw5IEBACiBpbiBiZXR3ZWVuIGVhY2ggcGFpciwgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgbmV3IGJ5dGVhcnJheS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV9qb2luKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaXQpCitieXRlYXJyYXlfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0ZXJhYmxlKQogewotICAgIFB5T2JqZWN0ICpzZXE7Ci0gICAgUHlfc3NpemVfdCBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeV9zc2l6ZV90IG47Ci0gICAgUHlPYmplY3QgKippdGVtczsKLSAgICBQeV9zc2l6ZV90IHRvdGFsc2l6ZSA9IDA7Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICpkZXN0OwotCi0gICAgc2VxID0gUHlTZXF1ZW5jZV9GYXN0KGl0LCAiY2FuIG9ubHkgam9pbiBhbiBpdGVyYWJsZSIpOwotICAgIGlmIChzZXEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgbiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOwotICAgIGl0ZW1zID0gUHlTZXF1ZW5jZV9GYXN0X0lURU1TKHNlcSk7Ci0KLSAgICAvKiBDb21wdXRlIHRoZSB0b3RhbCBzaXplLCBhbmQgY2hlY2sgdGhhdCB0aGV5IGFyZSBhbGwgYnl0ZXMgKi8KLSAgICAvKiBYWFggU2hvdWxkbid0IHdlIHVzZSBfZ2V0YnVmZmVyKCkgb24gdGhlc2UgaXRlbXMgaW5zdGVhZD8gKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpvYmogPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKCFQeUJ5dGVBcnJheV9DaGVjayhvYmopICYmICFQeUJ5dGVzX0NoZWNrKG9iaikpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImNhbiBvbmx5IGpvaW4gYW4gaXRlcmFibGUgb2YgYnl0ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICIoaXRlbSAlbGQgaGFzIHR5cGUgJyUuMTAwcycpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFggJWxkIGlzbid0IHJpZ2h0IG9uIFdpbjY0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpaSwgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgdG90YWxzaXplICs9IG15c2l6ZTsKLSAgICAgICAgdG90YWxzaXplICs9IFB5X1NJWkUob2JqKTsKLSAgICAgICAgaWYgKHRvdGFsc2l6ZSA8IDApIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQWxsb2NhdGUgdGhlIHJlc3VsdCwgYW5kIGNvcHkgdGhlIGJ5dGVzICovCi0gICAgcmVzdWx0ID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdG90YWxzaXplKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZGVzdCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhyZXN1bHQpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKm9iaiA9IGl0ZW1zW2ldOwotICAgICAgICBQeV9zc2l6ZV90IHNpemUgPSBQeV9TSVpFKG9iaik7Ci0gICAgICAgIGNoYXIgKmJ1ZjsKLSAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKG9iaikpCi0gICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhvYmopOwotICAgICAgICBlbHNlCi0gICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKG9iaik7Ci0gICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc2VsZi0+b2JfYnl0ZXMsIG15c2l6ZSk7Ci0gICAgICAgICAgICBkZXN0ICs9IG15c2l6ZTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoZGVzdCwgYnVmLCBzaXplKTsKLSAgICAgICAgZGVzdCArPSBzaXplOwotICAgIH0KLQotICAgIC8qIERvbmUgKi8KLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLyogRXJyb3IgaGFuZGxpbmcgKi8KLSAgZXJyb3I6Ci0gICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9ieXRlc19qb2luKHNlbGYsIGl0ZXJhYmxlKTsKIH0KIAogUHlEb2NfU1RSVkFSKHNwbGl0bGluZXNfX2RvY19fLApAQCAtMjc0OCw2ICsyNzI4LDcgQEAKIHsKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CisgICAgY2hhciAqYnVmOwogCiAgICAgZGljdCA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfX19kaWN0X18pOwogICAgIGlmIChkaWN0ID09IE5VTEwpIHsKQEAgLTI3NTYsMTkgKzI3MzcsMjAgQEAKICAgICAgICAgUHlfSU5DUkVGKGRpY3QpOwogICAgIH0KIAorICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBpZiAocHJvdG8gPCAzKSB7CiAgICAgICAgIC8qIHVzZSBzdHIgYmFzZWQgcmVkdWN0aW9uIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLnggKi8KICAgICAgICAgUHlPYmplY3QgKmxhdGluMTsKLSAgICAgICAgaWYgKHNlbGYtPm9iX2J5dGVzKQotICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0RlY29kZUxhdGluMShzZWxmLT5vYl9ieXRlcywgUHlfU0laRShzZWxmKSwgTlVMTCk7CisgICAgICAgIGlmIChQeV9TSVpFKHNlbGYpKQorICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0RlY29kZUxhdGluMShidWYsIFB5X1NJWkUoc2VsZiksIE5VTEwpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiIik7CiAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyhOcylOKSIsIFB5X1RZUEUoc2VsZiksIGxhdGluMSwgImxhdGluLTEiLCBkaWN0KTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIHVzZSBtb3JlIGVmZmljaWVudCBieXRlIGJhc2VkIHJlZHVjdGlvbiAqLwotICAgICAgICBpZiAoc2VsZi0+b2JfYnl0ZXMpIHsKLSAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyh5IylOKSIsIFB5X1RZUEUoc2VsZiksIHNlbGYtPm9iX2J5dGVzLCBQeV9TSVpFKHNlbGYpLCBkaWN0KTsKKyAgICAgICAgaWYgKFB5X1NJWkUoc2VsZikpIHsKKyAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyh5IylOKSIsIFB5X1RZUEUoc2VsZiksIGJ1ZiwgUHlfU0laRShzZWxmKSwgZGljdCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE8oKU4pIiwgUHlfVFlQRShzZWxmKSwgZGljdCk7CkBAIC0yODQ5LDcgKzI4MzEsNyBAQAogICAgIHsiY291bnQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2NvdW50LCBNRVRIX1ZBUkFSR1MsIGNvdW50X19kb2NfX30sCiAgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2RlY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZGVjb2RlX2RvY30sCiAgICAgeyJlbmRzd2l0aCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZW5kc3dpdGgsIE1FVEhfVkFSQVJHUywgZW5kc3dpdGhfX2RvY19ffSwKLSAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUywKKyAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgIGV4cGFuZHRhYnNfX2RvY19ffSwKICAgICB7ImV4dGVuZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZXh0ZW5kLCBNRVRIX08sIGV4dGVuZF9fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZmluZCwgTUVUSF9WQVJBUkdTLCBmaW5kX19kb2NfX30sCkBAIC0zMDAwLDcgKzI5ODIsNyBAQAogCiAgICAgaWYgKGl0LT5pdF9pbmRleCA8IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlcSkpIHsKICAgICAgICAgaXRlbSA9IFB5TG9uZ19Gcm9tTG9uZygKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNlcS0+b2JfYnl0ZXNbaXQtPml0X2luZGV4XSk7CisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VxKVtpdC0+aXRfaW5kZXhdKTsKICAgICAgICAgaWYgKGl0ZW0gIT0gTlVMTCkKICAgICAgICAgICAgICsraXQtPml0X2luZGV4OwogICAgICAgICByZXR1cm4gaXRlbTsKZGlmZiAtLWdpdCBhL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jIGIvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKaW5kZXggZWYzYzJmNy4uNGU4MTA3YiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKKysrIGIvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKQEAgLTEwLDkgKzEwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzc3BhY2UoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEgJiYgUHlfSVNTUEFDRSgqcCkpCkBAIC00MCw5ICs0MCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc2FscGhhKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTQUxQSEEoKnApKQpAQCAtNzAsOSArNzAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNhbG51bShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0FMTlVNKCpwKSkKQEAgLTEwMCw5ICsxMDAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNkaWdpdChjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0RJR0lUKCpwKSkKQEAgLTEzMCw5ICsxMzAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNsb3dlcihjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZDsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KQEAgLTE2NCw5ICsxNjQsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXN1cHBlcihjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZDsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KQEAgLTIwMCw5ICsyMDAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXN0aXRsZShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZCwgcHJldmlvdXNfaXNfY2FzZWQ7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCkBAIC0yMTcsNyArMjE3LDcgQEAKICAgICBjYXNlZCA9IDA7CiAgICAgcHJldmlvdXNfaXNfY2FzZWQgPSAwOwogICAgIGZvciAoOyBwIDwgZTsgcCsrKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2ggPSAqcDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaCA9ICpwOwogCiAgICAgICAgIGlmIChQeV9JU1VQUEVSKGNoKSkgewogICAgICAgICAgICAgaWYgKHByZXZpb3VzX2lzX2Nhc2VkKQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlc29iamVjdC5jIGIvT2JqZWN0cy9ieXRlc29iamVjdC5jCmluZGV4IDlkY2I3NGUuLjYxNDk3OGIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZXNvYmplY3QuYworKysgYi9PYmplY3RzL2J5dGVzb2JqZWN0LmMKQEAgLTEwLDkgKzEwLDE4IEBACiBzdGF0aWMgUHlfc3NpemVfdAogX2dldGJ1ZmZlcihQeU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcpCiB7Ci0gICAgUHlCdWZmZXJQcm9jcyAqYnVmZmVyID0gUHlfVFlQRShvYmopLT50cF9hc19idWZmZXI7CisgICAgUHlCdWZmZXJQcm9jcyAqYnVmZmVycHJvY3M7CisgICAgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdChvYmopKSB7CisgICAgICAgIC8qIEZhc3QgcGF0aCwgZS5nLiBmb3IgLmpvaW4oKSBvZiBtYW55IGJ5dGVzIG9iamVjdHMgKi8KKyAgICAgICAgUHlfSU5DUkVGKG9iaik7CisgICAgICAgIHZpZXctPm9iaiA9IG9iajsKKyAgICAgICAgdmlldy0+YnVmID0gUHlCeXRlc19BU19TVFJJTkcob2JqKTsKKyAgICAgICAgdmlldy0+bGVuID0gUHlCeXRlc19HRVRfU0laRShvYmopOworICAgICAgICByZXR1cm4gdmlldy0+bGVuOworICAgIH0KIAotICAgIGlmIChidWZmZXIgPT0gTlVMTCB8fCBidWZmZXItPmJmX2dldGJ1ZmZlciA9PSBOVUxMKQorICAgIGJ1ZmZlcnByb2NzID0gUHlfVFlQRShvYmopLT50cF9hc19idWZmZXI7CisgICAgaWYgKGJ1ZmZlcnByb2NzID09IE5VTEwgfHwgYnVmZmVycHJvY3MtPmJmX2dldGJ1ZmZlciA9PSBOVUxMKQogICAgIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJUeXBlICUuMTAwcyBkb2Vzbid0IHN1cHBvcnQgdGhlIGJ1ZmZlciBBUEkiLApAQCAtMjAsNyArMjksNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKGJ1ZmZlci0+YmZfZ2V0YnVmZmVyKG9iaiwgdmlldywgUHlCVUZfU0lNUExFKSA8IDApCisgICAgaWYgKGJ1ZmZlcnByb2NzLT5iZl9nZXRidWZmZXIob2JqLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiB2aWV3LT5sZW47CiB9CkBAIC02NSw3ICs3NCw3IEBACiBQeU9iamVjdCAqCiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGNvbnN0IGNoYXIgKnN0ciwgUHlfc3NpemVfdCBzaXplKQogewotICAgIHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKm9wOworICAgIFB5Qnl0ZXNPYmplY3QgKm9wOwogICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAiTmVnYXRpdmUgc2l6ZSBwYXNzZWQgdG8gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSIpOwpAQCAtOTgsNyArMTA3LDcgQEAKICAgICBvcCA9IChQeUJ5dGVzT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNPYmplY3RfU0laRSArIHNpemUpOwogICAgIGlmIChvcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5Qnl0ZXNfVHlwZSwgc2l6ZSk7CisgICAgKHZvaWQpUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOwogICAgIG9wLT5vYl9zaGFzaCA9IC0xOwogICAgIGlmIChzdHIgIT0gTlVMTCkKICAgICAgICAgUHlfTUVNQ1BZKG9wLT5vYl9zdmFsLCBzdHIsIHNpemUpOwpAQCAtMTE3LDggKzEyNiw4IEBACiBQeU9iamVjdCAqCiBQeUJ5dGVzX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqc3RyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBzaXplOwotICAgIHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKm9wOworICAgIHNpemVfdCBzaXplOworICAgIFB5Qnl0ZXNPYmplY3QgKm9wOwogCiAgICAgYXNzZXJ0KHN0ciAhPSBOVUxMKTsKICAgICBzaXplID0gc3RybGVuKHN0cik7CkBAIC0xNDYsNyArMTU1LDcgQEAKICAgICBvcCA9IChQeUJ5dGVzT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNPYmplY3RfU0laRSArIHNpemUpOwogICAgIGlmIChvcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5Qnl0ZXNfVHlwZSwgc2l6ZSk7CisgICAgKHZvaWQpUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOwogICAgIG9wLT5vYl9zaGFzaCA9IC0xOwogICAgIFB5X01FTUNQWShvcC0+b2Jfc3ZhbCwgc3RyLCBzaXplKzEpOwogICAgIC8qIHNoYXJlIHNob3J0IHN0cmluZ3MgKi8KQEAgLTUxNyw3ICs1MjYsNyBAQAogLyogb2JqZWN0IGFwaSAqLwogCiBQeV9zc2l6ZV90Ci1QeUJ5dGVzX1NpemUocmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlCeXRlc19TaXplKFB5T2JqZWN0ICpvcCkKIHsKICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC01MjgsNyArNTM3LDcgQEAKIH0KIAogY2hhciAqCi1QeUJ5dGVzX0FzU3RyaW5nKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5Qnl0ZXNfQXNTdHJpbmcoUHlPYmplY3QgKm9wKQogewogICAgIGlmICghUHlCeXRlc19DaGVjayhvcCkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKQEAgLTUzOSw5ICs1NDgsOSBAQAogfQogCiBpbnQKLVB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgY2hhciAqKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCAqbGVuKQorUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpsZW4pCiB7CiAgICAgaWYgKHMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTU3Myw2ICs1ODIsNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9mYXN0c2VhcmNoLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvam9pbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9wYXJ0aXRpb24uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY3R5cGUuaCIKQEAgLTU4Miw3ICs1OTIsNyBAQAogUHlPYmplY3QgKgogUHlCeXRlc19SZXByKFB5T2JqZWN0ICpvYmosIGludCBzbWFydHF1b3RlcykKIHsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0KiBvcCA9IChQeUJ5dGVzT2JqZWN0Kikgb2JqOworICAgIFB5Qnl0ZXNPYmplY3QqIG9wID0gKFB5Qnl0ZXNPYmplY3QqKSBvYmo7CiAgICAgUHlfc3NpemVfdCBpLCBsZW5ndGggPSBQeV9TSVpFKG9wKTsKICAgICBzaXplX3QgbmV3c2l6ZSwgc3F1b3RlcywgZHF1b3RlczsKICAgICBQeU9iamVjdCAqdjsKQEAgLTcyMSwxMiArNzMxLDEyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yZXBlYXQocmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBuKQorYnl0ZXNfcmVwZWF0KFB5Qnl0ZXNPYmplY3QgKmEsIFB5X3NzaXplX3QgbikKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpvcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBqOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeUJ5dGVzT2JqZWN0ICpvcDsKICAgICBzaXplX3QgbmJ5dGVzOwogICAgIGlmIChuIDwgMCkKICAgICAgICAgbiA9IDA7CkBAIC03NTIsNyArNzYyLDcgQEAKICAgICBvcCA9IChQeUJ5dGVzT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNPYmplY3RfU0laRSArIG5ieXRlcyk7CiAgICAgaWYgKG9wID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCAmUHlCeXRlc19UeXBlLCBzaXplKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5Qnl0ZXNfVHlwZSwgc2l6ZSk7CiAgICAgb3AtPm9iX3NoYXNoID0gLTE7CiAgICAgb3AtPm9iX3N2YWxbc2l6ZV0gPSAnXDAnOwogICAgIGlmIChQeV9TSVpFKGEpID09IDEgJiYgbiA+IDApIHsKQEAgLTc5Niw3ICs4MDYsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfaXRlbShQeUJ5dGVzT2JqZWN0ICphLCByZWdpc3RlciBQeV9zc2l6ZV90IGkpCitieXRlc19pdGVtKFB5Qnl0ZXNPYmplY3QgKmEsIFB5X3NzaXplX3QgaSkKIHsKICAgICBpZiAoaSA8IDAgfHwgaSA+PSBQeV9TSVpFKGEpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CkBAIC04MDUsNiArODE1LDIzIEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcilhLT5vYl9zdmFsW2ldKTsKIH0KIAorUHlfTE9DQUwoaW50KQorYnl0ZXNfY29tcGFyZV9lcShQeUJ5dGVzT2JqZWN0ICphLCBQeUJ5dGVzT2JqZWN0ICpiKQoreworICAgIGludCBjbXA7CisgICAgUHlfc3NpemVfdCBsZW47CisKKyAgICBsZW4gPSBQeV9TSVpFKGEpOworICAgIGlmIChQeV9TSVpFKGIpICE9IGxlbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoYS0+b2Jfc3ZhbFswXSAhPSBiLT5vYl9zdmFsWzBdKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNtcCA9IG1lbWNtcChhLT5vYl9zdmFsLCBiLT5vYl9zdmFsLCBsZW4pOworICAgIHJldHVybiAoY21wID09IDApOworfQorCiBzdGF0aWMgUHlPYmplY3QqCiBieXRlc19yaWNoY29tcGFyZShQeUJ5dGVzT2JqZWN0ICphLCBQeUJ5dGVzT2JqZWN0ICpiLCBpbnQgb3ApCiB7CkBAIC04MjUsNTMgKzg1Miw1NSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHJlc3VsdCA9IFB5X05vdEltcGxlbWVudGVkOwotICAgICAgICBnb3RvIG91dDsKICAgICB9Ci0gICAgaWYgKGEgPT0gYikgeworICAgIGVsc2UgaWYgKGEgPT0gYikgewogICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgUHlfRVE6Y2FzZSBQeV9MRTpjYXNlIFB5X0dFOgorICAgICAgICBjYXNlIFB5X0VROgorICAgICAgICBjYXNlIFB5X0xFOgorICAgICAgICBjYXNlIFB5X0dFOgorICAgICAgICAgICAgLyogYSBzdHJpbmcgaXMgZXF1YWwgdG8gaXRzZWxmICovCiAgICAgICAgICAgICByZXN1bHQgPSBQeV9UcnVlOwotICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIGNhc2UgUHlfTkU6Y2FzZSBQeV9MVDpjYXNlIFB5X0dUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlfTkU6CisgICAgICAgIGNhc2UgUHlfTFQ6CisgICAgICAgIGNhc2UgUHlfR1Q6CiAgICAgICAgICAgICByZXN1bHQgPSBQeV9GYWxzZTsKLSAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG9wID09IFB5X0VRKSB7Ci0gICAgICAgIC8qIFN1cHBvcnRpbmcgUHlfTkUgaGVyZSBhcyB3ZWxsIGRvZXMgbm90IHNhdmUKLSAgICAgICAgICAgbXVjaCB0aW1lLCBzaW5jZSBQeV9ORSBpcyByYXJlbHkgdXNlZC4gICovCi0gICAgICAgIGlmIChQeV9TSVpFKGEpID09IFB5X1NJWkUoYikKLSAgICAgICAgICAgICYmIChhLT5vYl9zdmFsWzBdID09IGItPm9iX3N2YWxbMF0KLSAgICAgICAgICAgICYmIG1lbWNtcChhLT5vYl9zdmFsLCBiLT5vYl9zdmFsLCBQeV9TSVpFKGEpKSA9PSAwKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gUHlfVHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5X0ZhbHNlOworICAgIGVsc2UgaWYgKG9wID09IFB5X0VRIHx8IG9wID09IFB5X05FKSB7CisgICAgICAgIGludCBlcSA9IGJ5dGVzX2NvbXBhcmVfZXEoYSwgYik7CisgICAgICAgIGVxIF49IChvcCA9PSBQeV9ORSk7CisgICAgICAgIHJlc3VsdCA9IGVxID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbGVuX2EgPSBQeV9TSVpFKGEpOworICAgICAgICBsZW5fYiA9IFB5X1NJWkUoYik7CisgICAgICAgIG1pbl9sZW4gPSBQeV9NSU4obGVuX2EsIGxlbl9iKTsKKyAgICAgICAgaWYgKG1pbl9sZW4gPiAwKSB7CisgICAgICAgICAgICBjID0gUHlfQ0hBUk1BU0soKmEtPm9iX3N2YWwpIC0gUHlfQ0hBUk1BU0soKmItPm9iX3N2YWwpOworICAgICAgICAgICAgaWYgKGMgPT0gMCkKKyAgICAgICAgICAgICAgICBjID0gbWVtY21wKGEtPm9iX3N2YWwsIGItPm9iX3N2YWwsIG1pbl9sZW4pOwogICAgICAgICB9Ci0gICAgICAgIGdvdG8gb3V0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjID0gMDsKKyAgICAgICAgaWYgKGMgPT0gMCkKKyAgICAgICAgICAgIGMgPSAobGVuX2EgPCBsZW5fYikgPyAtMSA6IChsZW5fYSA+IGxlbl9iKSA/IDEgOiAwOworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgUHlfTFQ6IGMgPSBjIDwgIDA7IGJyZWFrOworICAgICAgICBjYXNlIFB5X0xFOiBjID0gYyA8PSAwOyBicmVhazsKKyAgICAgICAgY2FzZSBQeV9HVDogYyA9IGMgPiAgMDsgYnJlYWs7CisgICAgICAgIGNhc2UgUHlfR0U6IGMgPSBjID49IDA7IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9IGMgPyBQeV9UcnVlIDogUHlfRmFsc2U7CiAgICAgfQotICAgIGxlbl9hID0gUHlfU0laRShhKTsgbGVuX2IgPSBQeV9TSVpFKGIpOwotICAgIG1pbl9sZW4gPSAobGVuX2EgPCBsZW5fYikgPyBsZW5fYSA6IGxlbl9iOwotICAgIGlmIChtaW5fbGVuID4gMCkgewotICAgICAgICBjID0gUHlfQ0hBUk1BU0soKmEtPm9iX3N2YWwpIC0gUHlfQ0hBUk1BU0soKmItPm9iX3N2YWwpOwotICAgICAgICBpZiAoYz09MCkKLSAgICAgICAgICAgIGMgPSBtZW1jbXAoYS0+b2Jfc3ZhbCwgYi0+b2Jfc3ZhbCwgbWluX2xlbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIGMgPSAwOwotICAgIGlmIChjID09IDApCi0gICAgICAgIGMgPSAobGVuX2EgPCBsZW5fYikgPyAtMSA6IChsZW5fYSA+IGxlbl9iKSA/IDEgOiAwOwotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIFB5X0xUOiBjID0gYyA8ICAwOyBicmVhazsKLSAgICBjYXNlIFB5X0xFOiBjID0gYyA8PSAwOyBicmVhazsKLSAgICBjYXNlIFB5X0VROiBhc3NlcnQoMCk7ICBicmVhazsgLyogdW5yZWFjaGFibGUgKi8KLSAgICBjYXNlIFB5X05FOiBjID0gYyAhPSAwOyBicmVhazsKLSAgICBjYXNlIFB5X0dUOiBjID0gYyA+ICAwOyBicmVhazsKLSAgICBjYXNlIFB5X0dFOiBjID0gYyA+PSAwOyBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXN1bHQgPSBQeV9Ob3RJbXBsZW1lbnRlZDsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIHJlc3VsdCA9IGMgPyBQeV9UcnVlIDogUHlfRmFsc2U7Ci0gIG91dDoKKwogICAgIFB5X0lOQ1JFRihyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC04ODEsNyArOTEwLDcgQEAKIHsKICAgICBpZiAoYS0+b2Jfc2hhc2ggPT0gLTEpIHsKICAgICAgICAgLyogQ2FuJ3QgZmFpbCAqLwotICAgICAgICBhLT5vYl9zaGFzaCA9IF9QeV9IYXNoQnl0ZXMoKHVuc2lnbmVkIGNoYXIgKikgYS0+b2Jfc3ZhbCwgUHlfU0laRShhKSk7CisgICAgICAgIGEtPm9iX3NoYXNoID0gX1B5X0hhc2hCeXRlcyhhLT5vYl9zdmFsLCBQeV9TSVpFKGEpKTsKICAgICB9CiAgICAgcmV0dXJuIGEtPm9iX3NoYXNoOwogfQpAQCAtMTEyNSw5NCArMTE1NCw5IEBACiBFeGFtcGxlOiBiJy4nLmpvaW4oW2InYWInLCBiJ3BxJywgYidycyddKSAtPiBiJ2FiLnBxLnJzJy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2pvaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvcmlnKQorYnl0ZXNfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0ZXJhYmxlKQogewotICAgIGNoYXIgKnNlcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpOwotICAgIGNvbnN0IFB5X3NzaXplX3Qgc2VwbGVuID0gUHlCeXRlc19HRVRfU0laRShzZWxmKTsKLSAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKLSAgICBjaGFyICpwOwotICAgIFB5X3NzaXplX3Qgc2VxbGVuID0gMDsKLSAgICBzaXplX3Qgc3ogPSAwOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqc2VxLCAqaXRlbTsKLQotICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdChvcmlnLCAiIik7Ci0gICAgaWYgKHNlcSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfU2l6ZShzZXEpOwotICAgIGlmIChzZXFsZW4gPT0gMCkgewotICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZygiIik7Ci0gICAgfQotICAgIGlmIChzZXFsZW4gPT0gMSkgewotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgMCk7Ci0gICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3QoaXRlbSkpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICAgICAgcmV0dXJuIGl0ZW07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBUaGVyZSBhcmUgYXQgbGVhc3QgdHdvIHRoaW5ncyB0byBqb2luLCBvciBlbHNlIHdlIGhhdmUgYSBzdWJjbGFzcwotICAgICAqIG9mIHRoZSBidWlsdGluIHR5cGVzIGluIHRoZSBzZXF1ZW5jZS4KLSAgICAgKiBEbyBhIHByZS1wYXNzIHRvIGZpZ3VyZSBvdXQgdGhlIHRvdGFsIGFtb3VudCBvZiBzcGFjZSB3ZSdsbAotICAgICAqIG5lZWQgKHN6KSwgYW5kIHNlZSB3aGV0aGVyIGFsbCBhcmd1bWVudCBhcmUgYnl0ZXMuCi0gICAgICovCi0gICAgLyogWFhYIFNob3VsZG4ndCB3ZSB1c2UgX2dldGJ1ZmZlcigpIG9uIHRoZXNlIGl0ZW1zIGluc3RlYWQ/ICovCi0gICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBvbGRfc3ogPSBzejsKLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIGkpOwotICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soaXRlbSkgJiYgIVB5Qnl0ZUFycmF5X0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJzZXF1ZW5jZSBpdGVtICV6ZDogZXhwZWN0ZWQgYnl0ZXMsIgotICAgICAgICAgICAgICAgICAgICAgICAgICIgJS44MHMgZm91bmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGksIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBzeiArPSBQeV9TSVpFKGl0ZW0pOwotICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgICAgc3ogKz0gc2VwbGVuOwotICAgICAgICBpZiAoc3ogPCBvbGRfc3ogfHwgc3ogPiBQWV9TU0laRV9UX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgImpvaW4oKSByZXN1bHQgaXMgdG9vIGxvbmcgZm9yIGJ5dGVzIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQWxsb2NhdGUgcmVzdWx0IHNwYWNlLiAqLwotICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIqKU5VTEwsIHN6KTsKLSAgICBpZiAocmVzID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qIENhdGVuYXRlIGV2ZXJ5dGhpbmcuICovCi0gICAgLyogSSdtIG5vdCB3b3JyaWVkIGFib3V0IGEgUHlCeXRlQXJyYXkgaXRlbSBncm93aW5nIGJlY2F1c2UgdGhlcmUncwotICAgICAgIG5vd2hlcmUgaW4gdGhpcyBmdW5jdGlvbiB3aGVyZSB3ZSByZWxlYXNlIHRoZSBHSUwuICovCi0gICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7Ci0gICAgICAgIHNpemVfdCBuOwotICAgICAgICBjaGFyICpxOwotICAgICAgICBpZiAoaSkgewotICAgICAgICAgICAgUHlfTUVNQ1BZKHAsIHNlcCwgc2VwbGVuKTsKLSAgICAgICAgICAgIHAgKz0gc2VwbGVuOwotICAgICAgICB9Ci0gICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKLSAgICAgICAgbiA9IFB5X1NJWkUoaXRlbSk7Ci0gICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKGl0ZW0pKQotICAgICAgICAgICAgcSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGl0ZW0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBxID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGl0ZW0pOwotICAgICAgICBQeV9NRU1DUFkocCwgcSwgbik7Ci0gICAgICAgIHAgKz0gbjsKLSAgICB9Ci0KLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiBzdHJpbmdsaWJfYnl0ZXNfam9pbihzZWxmLCBpdGVyYWJsZSk7CiB9CiAKIFB5T2JqZWN0ICoKQEAgLTE0MzUsNyArMTM3OSw3IEBACiB7CiAgICAgUHlPYmplY3QgKnNlcCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgKGNoYXIgKilzdHJpcGZvcm1hdFtzdHJpcHR5cGVdLCAmc2VwKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHNlcCAhPSBOVUxMICYmIHNlcCAhPSBQeV9Ob25lKSB7CkBAIC0xNTQ5LDkgKzE0OTMsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVzX3RyYW5zbGF0ZShQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZWdpc3RlciBjaGFyICppbnB1dCwgKm91dHB1dDsKKyAgICBjaGFyICppbnB1dCwgKm91dHB1dDsKICAgICBjb25zdCBjaGFyICp0YWJsZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGMsIGNoYW5nZWQgPSAwOworICAgIFB5X3NzaXplX3QgaSwgYywgY2hhbmdlZCA9IDA7CiAgICAgUHlPYmplY3QgKmlucHV0X29iaiA9IChQeU9iamVjdCopc2VsZjsKICAgICBjb25zdCBjaGFyICpvdXRwdXRfc3RhcnQsICpkZWxfdGFibGU9TlVMTDsKICAgICBQeV9zc2l6ZV90IGlubGVuLCB0YWJsZW4sIGRlbGxlbiA9IDA7CkBAIC0yMzI5LDggKzIyNzMsNiBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHNzOmRlY29kZSIsIGt3bGlzdCwgJmVuY29kaW5nLCAmZXJyb3JzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGVuY29kaW5nID09IE5VTEwpCi0gICAgICAgIGVuY29kaW5nID0gUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZygpOwogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Qoc2VsZiwgZW5jb2RpbmcsIGVycm9ycyk7CiB9CiAKQEAgLTI0NjAsNyArMjQwMiw3IEBACiAgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZGVjb2RlLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBkZWNvZGVfX2RvY19ffSwKICAgICB7ImVuZHN3aXRoIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2VuZHN3aXRoLCBNRVRIX1ZBUkFSR1MsCiAgICAgIGVuZHN3aXRoX19kb2NfX30sCi0gICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MsCisgICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICBleHBhbmR0YWJzX19kb2NfX30sCiAgICAgeyJmaW5kIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2ZpbmQsIE1FVEhfVkFSQVJHUywgZmluZF9fZG9jX199LAogICAgIHsiZnJvbWhleCIsIChQeUNGdW5jdGlvbilieXRlc19mcm9taGV4LCBNRVRIX1ZBUkFSR1N8TUVUSF9DTEFTUywKQEAgLTI2OTIsNyArMjYzNCw3IEBACiAgICAgfQogCiAgICAgLyogRm9yIGl0ZXJhdG9yIHZlcnNpb24sIGNyZWF0ZSBhIHN0cmluZyBvYmplY3QgYW5kIHJlc2l6ZSBhcyBuZWVkZWQgKi8KLSAgICBzaXplID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoeCwgNjQpOworICAgIHNpemUgPSBQeU9iamVjdF9MZW5ndGhIaW50KHgsIDY0KTsKICAgICBpZiAoc2l6ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAvKiBBbGxvY2F0ZSBhbiBleHRyYSBieXRlIHRvIHByZXZlbnQgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgpIGZyb20KQEAgLTI3NTAsOSArMjY5Miw4IEBACiAgICAgcmV0dXJuIG5ldzsKIAogICBlcnJvcjoKLSAgICAvKiBFcnJvciBoYW5kbGluZyB3aGVuIG5ldyAhPSBOVUxMICovCiAgICAgUHlfWERFQ1JFRihpdCk7Ci0gICAgUHlfREVDUkVGKG5ldyk7CisgICAgUHlfWERFQ1JFRihuZXcpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yODM4LDkgKzI3NzksOSBAQAogfTsKIAogdm9pZAotUHlCeXRlc19Db25jYXQocmVnaXN0ZXIgUHlPYmplY3QgKipwdiwgcmVnaXN0ZXIgUHlPYmplY3QgKncpCitQeUJ5dGVzX0NvbmNhdChQeU9iamVjdCAqKnB2LCBQeU9iamVjdCAqdykKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKKyAgICBQeU9iamVjdCAqdjsKICAgICBhc3NlcnQocHYgIT0gTlVMTCk7CiAgICAgaWYgKCpwdiA9PSBOVUxMKQogICAgICAgICByZXR1cm47CkBAIC0yODU0LDcgKzI3OTUsNyBAQAogfQogCiB2b2lkCi1QeUJ5dGVzX0NvbmNhdEFuZERlbChyZWdpc3RlciBQeU9iamVjdCAqKnB2LCByZWdpc3RlciBQeU9iamVjdCAqdykKK1B5Qnl0ZXNfQ29uY2F0QW5kRGVsKFB5T2JqZWN0ICoqcHYsIFB5T2JqZWN0ICp3KQogewogICAgIFB5Qnl0ZXNfQ29uY2F0KHB2LCB3KTsKICAgICBQeV9YREVDUkVGKHcpOwpAQCAtMjg3OCw4ICsyODE5LDggQEAKIGludAogX1B5Qnl0ZXNfUmVzaXplKFB5T2JqZWN0ICoqcHYsIFB5X3NzaXplX3QgbmV3c2l6ZSkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpzdjsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeUJ5dGVzT2JqZWN0ICpzdjsKICAgICB2ID0gKnB2OwogICAgIGlmICghUHlCeXRlc19DaGVjayh2KSB8fCBQeV9SRUZDTlQodikgIT0gMSB8fCBuZXdzaXplIDwgMCkgewogICAgICAgICAqcHYgPSAwOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jbGFzc29iamVjdC5jIGIvT2JqZWN0cy9jbGFzc29iamVjdC5jCmluZGV4IGNkYzliMWMuLjBjMGJkNDcgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY2xhc3NvYmplY3QuYworKysgYi9PYmplY3RzL2NsYXNzb2JqZWN0LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIFB5T2JqZWN0ICoKIFB5TWV0aG9kX05ldyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlNZXRob2RPYmplY3QgKmltOworICAgIFB5TWV0aG9kT2JqZWN0ICppbTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBpbSA9IGZyZWVfbGlzdDsKICAgICBpZiAoaW0gIT0gTlVMTCkgewogICAgICAgICBmcmVlX2xpc3QgPSAoUHlNZXRob2RPYmplY3QgKikoaW0tPmltX3NlbGYpOwotICAgICAgICBQeU9iamVjdF9JTklUKGltLCAmUHlNZXRob2RfVHlwZSk7CisgICAgICAgICh2b2lkKVB5T2JqZWN0X0lOSVQoaW0sICZQeU1ldGhvZF9UeXBlKTsKICAgICAgICAgbnVtZnJlZS0tOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTY5LDYgKzY5LDMwIEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWltOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorbWV0aG9kX3JlZHVjZShQeU1ldGhvZE9iamVjdCAqaW0pCit7CisgICAgUHlPYmplY3QgKnNlbGYgPSBQeU1ldGhvZF9HRVRfU0VMRihpbSk7CisgICAgUHlPYmplY3QgKmZ1bmMgPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oaW0pOworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBQeU9iamVjdCAqZ2V0YXR0cjsKKyAgICBQeU9iamVjdCAqZnVuY25hbWU7CisgICAgX1B5X0lERU5USUZJRVIoZ2V0YXR0cik7CisKKyAgICBmdW5jbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoZnVuYywgJlB5SWRfX19uYW1lX18pOworICAgIGlmIChmdW5jbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT04pIiwgZ2V0YXR0ciwgc2VsZiwgZnVuY25hbWUpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgbWV0aG9kX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pbWV0aG9kX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKwogLyogRGVzY3JpcHRvcnMgZm9yIFB5TWV0aG9kIGF0dHJpYnV0ZXMgKi8KIAogLyogaW1fZnVuYyBhbmQgaW1fc2VsZiBhcmUgc3RvcmVkIGluIHRoZSBQeU1ldGhvZCBvYmplY3QgKi8KQEAgLTE2NCw3ICsxODgsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbWV0aG9kX2RlYWxsb2MocmVnaXN0ZXIgUHlNZXRob2RPYmplY3QgKmltKQorbWV0aG9kX2RlYWxsb2MoUHlNZXRob2RPYmplY3QgKmltKQogewogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKGltKTsKICAgICBpZiAoaW0tPmltX3dlYWtyZWZsaXN0ICE9IE5VTEwpCkBAIC0zNjcsNyArMzkxLDcgQEAKICAgICBvZmZzZXRvZihQeU1ldGhvZE9iamVjdCwgaW1fd2Vha3JlZmxpc3QpLCAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBtZXRob2RfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBtZXRob2RfbWVtYmVybGlzdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRob2RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNTA5LDcgKzUzMyw3IEBACiAKIHN0YXRpYyBQeU9iamVjdCAqCiBpbnN0YW5jZW1ldGhvZF9kZXNjcl9nZXQoUHlPYmplY3QgKmRlc2NyLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqdHlwZSkgewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpmdW5jID0gUHlJbnN0YW5jZU1ldGhvZF9HRVRfRlVOQ1RJT04oZGVzY3IpOworICAgIFB5T2JqZWN0ICpmdW5jID0gUHlJbnN0YW5jZU1ldGhvZF9HRVRfRlVOQ1RJT04oZGVzY3IpOwogICAgIGlmIChvYmogPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CiAgICAgICAgIHJldHVybiBmdW5jOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jb2Rlb2JqZWN0LmMgYi9PYmplY3RzL2NvZGVvYmplY3QuYwppbmRleCA5NzEzZjYxLi4zNTNmNDE0IDEwMDY0NAotLS0gYS9PYmplY3RzL2NvZGVvYmplY3QuYworKysgYi9PYmplY3RzL2NvZGVvYmplY3QuYwpAQCAtNzQsNiArNzQsMTEgQEAKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKworICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBmaWxlbmFtZSBpcyBhIHJlYWR5IFVuaWNvZGUgc3RyaW5nICovCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShmaWxlbmFtZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIG5fY2VsbHZhcnMgPSBQeVR1cGxlX0dFVF9TSVpFKGNlbGx2YXJzKTsKICAgICBpbnRlcm5fc3RyaW5ncyhuYW1lcyk7CiAgICAgaW50ZXJuX3N0cmluZ3ModmFybmFtZXMpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMgYi9PYmplY3RzL2NvbXBsZXhvYmplY3QuYwppbmRleCBiMDhhYTZmLi5hNWI3NmYwIDEwMDY0NAotLS0gYS9PYmplY3RzL2NvbXBsZXhvYmplY3QuYworKysgYi9PYmplY3RzL2NvbXBsZXhvYmplY3QuYwpAQCAtMjExLDEzICsyMTEsMTMgQEAKIFB5T2JqZWN0ICoKIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoUHlfY29tcGxleCBjdmFsKQogewotICAgIHJlZ2lzdGVyIFB5Q29tcGxleE9iamVjdCAqb3A7CisgICAgUHlDb21wbGV4T2JqZWN0ICpvcDsKIAogICAgIC8qIElubGluZSBQeU9iamVjdF9OZXcgKi8KICAgICBvcCA9IChQeUNvbXBsZXhPYmplY3QgKikgUHlPYmplY3RfTUFMTE9DKHNpemVvZihQeUNvbXBsZXhPYmplY3QpKTsKICAgICBpZiAob3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVChvcCwgJlB5Q29tcGxleF9UeXBlKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUKG9wLCAmUHlDb21wbGV4X1R5cGUpOwogICAgIG9wLT5jdmFsID0gY3ZhbDsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIG9wOwogfQpAQCAtMjcxLDYgKzI3MSwxMiBAQAogICAgIGlmIChmKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGYsIE5VTEwpOwogICAgICAgICBQeV9ERUNSRUYoZik7CisgICAgICAgIGlmIChyZXMgIT0gTlVMTCAmJiAhUHlDb21wbGV4X0NoZWNrKHJlcykpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgIl9fY29tcGxleF9fIHNob3VsZCByZXR1cm4gYSBjb21wbGV4IG9iamVjdCIpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKQEAgLTI5NiwxMiArMzAyLDYgQEAKICAgICBuZXdvcCA9IHRyeV9jb21wbGV4X3NwZWNpYWxfbWV0aG9kKG9wKTsKIAogICAgIGlmIChuZXdvcCkgewotICAgICAgICBpZiAoIVB5Q29tcGxleF9DaGVjayhuZXdvcCkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgIl9fY29tcGxleF9fIHNob3VsZCByZXR1cm4gYSBjb21wbGV4IG9iamVjdCIpOwotICAgICAgICAgICAgUHlfREVDUkVGKG5ld29wKTsKLSAgICAgICAgICAgIHJldHVybiBjdjsKLSAgICAgICAgfQogICAgICAgICBjdiA9ICgoUHlDb21wbGV4T2JqZWN0ICopbmV3b3ApLT5jdmFsOwogICAgICAgICBQeV9ERUNSRUYobmV3b3ApOwogICAgICAgICByZXR1cm4gY3Y7CkBAIC03MDUsNyArNzA1LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6X19mb3JtYXRfXyIsICZmb3JtYXRfc3BlYykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIDApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKICAgICByZXQgPSBfUHlDb21wbGV4X0Zvcm1hdEFkdmFuY2VkV3JpdGVyKAogICAgICAgICAmd3JpdGVyLAogICAgICAgICBzZWxmLApAQCAtNzczLDggKzc3Myw5IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIodiwgJnMsICZsZW4pKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tcGxleCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIiKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJjb21wbGV4KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTk1Myw4ICs5NTQsOSBAQAogICAgICAgICBuYmkgPSBpLT5vYl90eXBlLT50cF9hc19udW1iZXI7CiAgICAgaWYgKG5iciA9PSBOVUxMIHx8IG5ici0+bmJfZmxvYXQgPT0gTlVMTCB8fAogICAgICAgICAoKGkgIT0gTlVMTCkgJiYgKG5iaSA9PSBOVUxMIHx8IG5iaS0+bmJfZmxvYXQgPT0gTlVMTCkpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgImNvbXBsZXgoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiY29tcGxleCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICBQeV9UWVBFKHIpLT50cF9uYW1lKTsKICAgICAgICAgaWYgKG93bl9yKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYocik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvZGVzY3JvYmplY3QuYyBiL09iamVjdHMvZGVzY3JvYmplY3QuYwppbmRleCBiYTk4YTMwLi4yZGY1YWM1IDEwMDY0NAotLS0gYS9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9kZXNjcm9iamVjdC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICgoUHlUeXBlT2JqZWN0ICopdHlwZSktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ldyhkZXNjci0+ZF9tZXRob2QsIHR5cGUpOworICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChkZXNjci0+ZF9tZXRob2QsIHR5cGUsIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTI1LDcgKzEyNSw3IEBACiAKICAgICBpZiAoZGVzY3JfY2hlY2soKFB5RGVzY3JPYmplY3QgKilkZXNjciwgb2JqLCAmcmVzKSkKICAgICAgICAgcmV0dXJuIHJlczsKLSAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgb2JqKTsKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCBvYmosIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcoZGVzY3ItPmRfbWV0aG9kLCBzZWxmKTsKKyAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCBzZWxmLCBOVUxMKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBhcmdzID0gUHlUdXBsZV9HZXRTbGljZShhcmdzLCAxLCBhcmdjKTsKQEAgLTI5Miw3ICsyOTIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgc2VsZik7CisgICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KGRlc2NyLT5kX21ldGhvZCwgc2VsZiwgTlVMTCk7CiAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgYXJnYyk7CkBAIC0zNTMsMTEgKzM1MywxMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1ldGhvZF9nZXRfZG9jKFB5TWV0aG9kRGVzY3JPYmplY3QgKmRlc2NyLCB2b2lkICpjbG9zdXJlKQogewotICAgIGlmIChkZXNjci0+ZF9tZXRob2QtPm1sX2RvYyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgfQotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhkZXNjci0+ZF9tZXRob2QtPm1sX2RvYyk7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0RG9jRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX21ldGhvZC0+bWxfbmFtZSwgZGVzY3ItPmRfbWV0aG9kLT5tbF9kb2MpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWV0aG9kX2dldF90ZXh0X3NpZ25hdHVyZShQeU1ldGhvZERlc2NyT2JqZWN0ICpkZXNjciwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgICByZXR1cm4gX1B5VHlwZV9HZXRUZXh0U2lnbmF0dXJlRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX21ldGhvZC0+bWxfbmFtZSwgZGVzY3ItPmRfbWV0aG9kLT5tbF9kb2MpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMzk4LDYgKzQwMCwyNCBAQAogICAgIHJldHVybiBkZXNjci0+ZF9xdWFsbmFtZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2Rlc2NyX3JlZHVjZShQeURlc2NyT2JqZWN0ICpkZXNjcikKK3sKKyAgICBQeU9iamVjdCAqYnVpbHRpbnM7CisgICAgUHlPYmplY3QgKmdldGF0dHI7CisgICAgX1B5X0lERU5USUZJRVIoZ2V0YXR0cik7CisKKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT08pIiwgZ2V0YXR0ciwgUHlEZXNjcl9UWVBFKGRlc2NyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeURlc2NyX05BTUUoZGVzY3IpKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGRlc2NyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pZGVzY3JfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCiBzdGF0aWMgUHlNZW1iZXJEZWYgZGVzY3JfbWVtYmVyc1tdID0gewogICAgIHsiX19vYmpjbGFzc19fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RGVzY3JPYmplY3QsIGRfdHlwZSksIFJFQURPTkxZfSwKICAgICB7Il9fbmFtZV9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RGVzY3JPYmplY3QsIGRfbmFtZSksIFJFQURPTkxZfSwKQEAgLTQwNyw2ICs0MjcsNyBAQAogc3RhdGljIFB5R2V0U2V0RGVmIG1ldGhvZF9nZXRzZXRbXSA9IHsKICAgICB7Il9fZG9jX18iLCAoZ2V0dGVyKW1ldGhvZF9nZXRfZG9jfSwKICAgICB7Il9fcXVhbG5hbWVfXyIsIChnZXR0ZXIpZGVzY3JfZ2V0X3F1YWxuYW1lfSwKKyAgICB7Il9fdGV4dF9zaWduYXR1cmVfXyIsIChnZXR0ZXIpbWV0aG9kX2dldF90ZXh0X3NpZ25hdHVyZX0sCiAgICAgezB9CiB9OwogCkBAIC00NDUsMTYgKzQ2NiwxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHdyYXBwZXJkZXNjcl9nZXRfZG9jKFB5V3JhcHBlckRlc2NyT2JqZWN0ICpkZXNjciwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBpZiAoZGVzY3ItPmRfYmFzZS0+ZG9jID09IE5VTEwpIHsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICB9Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGRlc2NyLT5kX2Jhc2UtPmRvYyk7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0RG9jRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX2Jhc2UtPm5hbWUsIGRlc2NyLT5kX2Jhc2UtPmRvYyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit3cmFwcGVyZGVzY3JfZ2V0X3RleHRfc2lnbmF0dXJlKFB5V3JhcHBlckRlc2NyT2JqZWN0ICpkZXNjciwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgICByZXR1cm4gX1B5VHlwZV9HZXRUZXh0U2lnbmF0dXJlRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX2Jhc2UtPm5hbWUsIGRlc2NyLT5kX2Jhc2UtPmRvYyk7CiB9CiAKIHN0YXRpYyBQeUdldFNldERlZiB3cmFwcGVyZGVzY3JfZ2V0c2V0W10gPSB7CiAgICAgeyJfX2RvY19fIiwgKGdldHRlcil3cmFwcGVyZGVzY3JfZ2V0X2RvY30sCiAgICAgeyJfX3F1YWxuYW1lX18iLCAoZ2V0dGVyKWRlc2NyX2dldF9xdWFsbmFtZX0sCisgICAgeyJfX3RleHRfc2lnbmF0dXJlX18iLCAoZ2V0dGVyKXdyYXBwZXJkZXNjcl9nZXRfdGV4dF9zaWduYXR1cmV9LAogICAgIHswfQogfTsKIApAQCAtNDk0LDcgKzUxOCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRob2RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNTMyLDcgKzU1Niw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRob2RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNTY5LDcgKzU5Myw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZW1iZXJfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNjQzLDcgKzY2Nyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICB3cmFwcGVyZGVzY3JfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtMTAwOSw3ICsxMDMzLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB3cmFwcGVyX3JpY2hjb21wYXJlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYiwgaW50IG9wKQogewotICAgIGludCByZXN1bHQ7CisgICAgUHlfaW50cHRyX3QgcmVzdWx0OwogICAgIFB5T2JqZWN0ICp2OwogICAgIFB5V3JhcHBlckRlc2NyT2JqZWN0ICphX2Rlc2NyLCAqYl9kZXNjcjsKIApAQCAtMTA4NSw2ICsxMTA5LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3AtPnNlbGYpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgord3JhcHBlcl9yZWR1Y2Uod3JhcHBlcm9iamVjdCAqd3ApCit7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIFB5T2JqZWN0ICpnZXRhdHRyOworICAgIF9QeV9JREVOVElGSUVSKGdldGF0dHIpOworCisgICAgYnVpbHRpbnMgPSBQeUV2YWxfR2V0QnVpbHRpbnMoKTsKKyAgICBnZXRhdHRyID0gX1B5RGljdF9HZXRJdGVtSWQoYnVpbHRpbnMsICZQeUlkX2dldGF0dHIpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9PKSIsIGdldGF0dHIsIHdwLT5zZWxmLCBQeURlc2NyX05BTUUod3AtPmRlc2NyKSk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiB3cmFwcGVyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pd3JhcHBlcl9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKIHN0YXRpYyBQeU1lbWJlckRlZiB3cmFwcGVyX21lbWJlcnNbXSA9IHsKICAgICB7Il9fc2VsZl9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHdyYXBwZXJvYmplY3QsIHNlbGYpLCBSRUFET05MWX0sCiAgICAgezB9CkBAIC0xMTA4LDE3ICsxMTQ5LDE1IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi13cmFwcGVyX2RvYyh3cmFwcGVyb2JqZWN0ICp3cCkKK3dyYXBwZXJfZG9jKHdyYXBwZXJvYmplY3QgKndwLCB2b2lkICpjbG9zdXJlKQogewotICAgIGNvbnN0IGNoYXIgKnMgPSB3cC0+ZGVzY3ItPmRfYmFzZS0+ZG9jOworICAgIHJldHVybiBfUHlUeXBlX0dldERvY0Zyb21JbnRlcm5hbERvYyh3cC0+ZGVzY3ItPmRfYmFzZS0+bmFtZSwgd3AtPmRlc2NyLT5kX2Jhc2UtPmRvYyk7Cit9CiAKLSAgICBpZiAocyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcocyk7Ci0gICAgfQorc3RhdGljIFB5T2JqZWN0ICoKK3dyYXBwZXJfdGV4dF9zaWduYXR1cmUod3JhcHBlcm9iamVjdCAqd3AsIHZvaWQgKmNsb3N1cmUpCit7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0VGV4dFNpZ25hdHVyZUZyb21JbnRlcm5hbERvYyh3cC0+ZGVzY3ItPmRfYmFzZS0+bmFtZSwgd3AtPmRlc2NyLT5kX2Jhc2UtPmRvYyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMTMyLDYgKzExNzEsNyBAQAogICAgIHsiX19uYW1lX18iLCAoZ2V0dGVyKXdyYXBwZXJfbmFtZX0sCiAgICAgeyJfX3F1YWxuYW1lX18iLCAoZ2V0dGVyKXdyYXBwZXJfcXVhbG5hbWV9LAogICAgIHsiX19kb2NfXyIsIChnZXR0ZXIpd3JhcHBlcl9kb2N9LAorICAgIHsiX190ZXh0X3NpZ25hdHVyZV9fIiwgKGdldHRlcil3cmFwcGVyX3RleHRfc2lnbmF0dXJlfSwKICAgICB7MH0KIH07CiAKQEAgLTExOTMsNyArMTIzMyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICB3cmFwcGVyX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICB3cmFwcGVyX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICB3cmFwcGVyX2dldHNldHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9kaWN0b2JqZWN0LmMgYi9PYmplY3RzL2RpY3RvYmplY3QuYwppbmRleCA3YWE1ZWE4Li4xY2NlYTZlIDEwMDY0NAotLS0gYS9PYmplY3RzL2RpY3RvYmplY3QuYworKysgYi9PYmplY3RzL2RpY3RvYmplY3QuYwpAQCAtNjksNiArNjksMTEgQEAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZXEuaCIKIAorLypbY2xpbmljIGlucHV0XQorY2xhc3MgZGljdCAiUHlEaWN0T2JqZWN0ICoiICImUHlEaWN0X1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1mMTU3YTVhMGNlOTU4OWQ2XSovCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICAvKiBDYWNoZWQgaGFzaCBjb2RlIG9mIG1lX2tleS4gKi8KICAgICBQeV9oYXNoX3QgbWVfaGFzaDsKQEAgLTk1LDIwICsxMDAsNiBAQAogaXQncyBVU0FCTEVfRlJBQ1RJT04gKGN1cnJlbnRseSB0d28tdGhpcmRzKSBmdWxsLgogKi8KIAotLyogU2V0IGEga2V5IGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudCwgd3JhcHBpbmcgaXQgaW4gYQotICogdHVwbGUgYXV0b21hdGljYWxseSBzbyB0aGF0IHR1cGxlIGtleXMgYXJlIG5vdCB1bnBhY2tlZCBhcyB0aGUKLSAqIGV4Y2VwdGlvbiBhcmd1bWVudHMuICovCi1zdGF0aWMgdm9pZAotc2V0X2tleV9lcnJvcihQeU9iamVjdCAqYXJnKQotewotICAgIFB5T2JqZWN0ICp0dXA7Ci0gICAgdHVwID0gUHlUdXBsZV9QYWNrKDEsIGFyZyk7Ci0gICAgaWYgKCF0dXApCi0gICAgICAgIHJldHVybjsgLyogY2FsbGVyIHdpbGwgZXhwZWN0IGVycm9yIHRvIGJlIHNldCBhbnl3YXkgKi8KLSAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIHR1cCk7Ci0gICAgUHlfREVDUkVGKHR1cCk7Ci19Ci0KICNkZWZpbmUgUEVSVFVSQl9TSElGVCA1CiAKIC8qCkBAIC0zMDUsOSArMjk2LDkgQEAKICAqICNkZWZpbmUgVVNBQkxFX0ZSQUNUSU9OKG4pICgoKG4pID4+IDEpICsgKChuKSA+PiAyKSAtICgobikgPj4gMykpCiAqLwogCi0vKiBHUk9XVEhfUkFURS4gR3Jvd3RoIHJhdGUgdXBvbiBoaXR0aW5nIG1heGltdW0gbG9hZC4gCi0gKiBDdXJyZW50bHkgc2V0IHRvIHVzZWQqMiArIGNhcGFjaXR5LzIuIAotICogVGhpcyBtZWFucyB0aGF0IGRpY3RzIGRvdWJsZSBpbiBzaXplIHdoZW4gZ3Jvd2luZyB3aXRob3V0IGRlbGV0aW9ucywgCisvKiBHUk9XVEhfUkFURS4gR3Jvd3RoIHJhdGUgdXBvbiBoaXR0aW5nIG1heGltdW0gbG9hZC4KKyAqIEN1cnJlbnRseSBzZXQgdG8gdXNlZCoyICsgY2FwYWNpdHkvMi4KKyAqIFRoaXMgbWVhbnMgdGhhdCBkaWN0cyBkb3VibGUgaW4gc2l6ZSB3aGVuIGdyb3dpbmcgd2l0aG91dCBkZWxldGlvbnMsCiAgKiBidXQgaGF2ZSBtb3JlIGhlYWQgcm9vbSB3aGVuIHRoZSBudW1iZXIgb2YgZGVsZXRpb25zIGlzIG9uIGEgcGFyIHdpdGggdGhlCiAgKiBudW1iZXIgb2YgaW5zZXJ0aW9ucy4KICAqIFJhaXNpbmcgdGhpcyB0byB1c2VkKjQgZG91YmxlcyBtZW1vcnkgY29uc3VtcHRpb24gZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mCkBAIC0zODksNiArMzgwLDcgQEAKIG5ld19kaWN0KFB5RGljdEtleXNPYmplY3QgKmtleXMsIFB5T2JqZWN0ICoqdmFsdWVzKQogewogICAgIFB5RGljdE9iamVjdCAqbXA7CisgICAgYXNzZXJ0KGtleXMgIT0gTlVMTCk7CiAgICAgaWYgKG51bWZyZWUpIHsKICAgICAgICAgbXAgPSBmcmVlX2xpc3RbLS1udW1mcmVlXTsKICAgICAgICAgYXNzZXJ0IChtcCAhPSBOVUxMKTsKQEAgLTQzMSw3ICs0MjMsMTAgQEAKIFB5T2JqZWN0ICoKIFB5RGljdF9OZXcodm9pZCkKIHsKLSAgICByZXR1cm4gbmV3X2RpY3QobmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKSwgTlVMTCk7CisgICAgUHlEaWN0S2V5c09iamVjdCAqa2V5cyA9IG5ld19rZXlzX29iamVjdChQeURpY3RfTUlOU0laRV9DT01CSU5FRCk7CisgICAgaWYgKGtleXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG5ld19kaWN0KGtleXMsIE5VTEwpOwogfQogCiAvKgpAQCAtNDYzLDEzICs0NTgsMTMgQEAKIGxvb2tkaWN0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2s7CisgICAgc2l6ZV90IGk7CisgICAgc2l6ZV90IHBlcnR1cmI7CisgICAgUHlEaWN0S2V5RW50cnkgKmZyZWVzbG90OworICAgIHNpemVfdCBtYXNrOwogICAgIFB5RGljdEtleUVudHJ5ICplcDA7Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOwotICAgIHJlZ2lzdGVyIGludCBjbXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIGludCBjbXA7CiAgICAgUHlPYmplY3QgKnN0YXJ0a2V5OwogCiB0b3A6CkBAIC01NTUsMTIgKzU1MCwxMiBAQAogbG9va2RpY3RfdW5pY29kZShQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LAogICAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7CisgICAgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKICAgICBQeURpY3RLZXlFbnRyeSAqZXAwID0gJm1wLT5tYV9rZXlzLT5ka19lbnRyaWVzWzBdOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICplcDsKKyAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgdG8gaGFuZGxlIG5vbi11bmljb2RlIGtleXMsCiAgICAgICAgaW5jbHVkaW5nIHN1YmNsYXNzZXMgb2Ygc3RyOyBlLmcuLCBvbmUgcmVhc29uIHRvIHN1YmNsYXNzCkBAIC02MjAsMTEgKzYxNSwxMSBAQAogbG9va2RpY3RfdW5pY29kZV9ub2R1bW15KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfaGFzaF90IGhhc2gsIFB5T2JqZWN0ICoqKnZhbHVlX2FkZHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOwogICAgIFB5RGljdEtleUVudHJ5ICplcDAgPSAmbXAtPm1hX2tleXMtPmRrX2VudHJpZXNbMF07Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIFB5RGljdEtleUVudHJ5ICplcDsKIAogICAgIC8qIE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSB0byBoYW5kbGUgbm9uLXVuaWNvZGUga2V5cywKICAgICAgICBpbmNsdWRpbmcgc3ViY2xhc3NlcyBvZiBzdHI7IGUuZy4sIG9uZSByZWFzb24gdG8gc3ViY2xhc3MKQEAgLTY2NSwxMSArNjYwLDExIEBACiBsb29rZGljdF9zcGxpdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LAogICAgICAgICAgICAgICAgUHlfaGFzaF90IGhhc2gsIFB5T2JqZWN0ICoqKnZhbHVlX2FkZHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOwogICAgIFB5RGljdEtleUVudHJ5ICplcDAgPSAmbXAtPm1hX2tleXMtPmRrX2VudHJpZXNbMF07Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIFB5RGljdEtleUVudHJ5ICplcDsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSkgewogICAgICAgICBlcCA9IGxvb2tkaWN0KG1wLCBrZXksIGhhc2gsIHZhbHVlX2FkZHIpOwpAQCAtMTIzNyw3ICsxMjMyLDcgQEAKICAgICBpZiAoZXAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICgqdmFsdWVfYWRkciA9PSBOVUxMKSB7Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgb2xkX3ZhbHVlID0gKnZhbHVlX2FkZHI7CkBAIC0xMzkxLDcgKzEzODYsNyBAQAogICAgICAgICB9CiAgICAgICAgIERLX0RFQ1JFRihrZXlzKTsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZSBpZiAoa2V5cyAhPSBOVUxMKSB7CiAgICAgICAgIGFzc2VydChrZXlzLT5ka19yZWZjbnQgPT0gMSk7CiAgICAgICAgIERLX0RFQ1JFRihrZXlzKTsKICAgICB9CkBAIC0xNDA3LDkgKzE0MDIsOSBAQAogZGljdF9yZXByKFB5RGljdE9iamVjdCAqbXApCiB7CiAgICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICpzLCAqdGVtcCwgKmNvbG9uID0gTlVMTDsKLSAgICBQeU9iamVjdCAqcGllY2VzID0gTlVMTCwgKnJlc3VsdCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmtleSwgKnZhbHVlOworICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOworICAgIGludCBmaXJzdDsKIAogICAgIGkgPSBQeV9SZXByRW50ZXIoKFB5T2JqZWN0ICopbXApOwogICAgIGlmIChpICE9IDApIHsKQEAgLTE0MTcsNzEgKzE0MTIsNzMgQEAKICAgICB9CiAKICAgICBpZiAobXAtPm1hX3VzZWQgPT0gMCkgewotICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygie30iKTsKLSAgICAgICAgZ290byBEb25lOworICAgICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopbXApOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoInt9Iik7CiAgICAgfQogCi0gICAgcGllY2VzID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAocGllY2VzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgLyogInsiICsgIjE6IDIiICsgIiwgMzogNCIgKiAobGVuIC0gMSkgKyAifSIgKi8KKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IDEgKyA0ICsgKDIgKyA0KSAqIChtcC0+bWFfdXNlZCAtIDEpICsgMTsKIAotICAgIGNvbG9uID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjogIik7Ci0gICAgaWYgKGNvbG9uID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJ3snKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICAvKiBEbyByZXByKCkgb24gZWFjaCBrZXkrdmFsdWUgcGFpciwgYW5kIGluc2VydCAiOiAiIGJldHdlZW4gdGhlbS4KICAgICAgICBOb3RlIHRoYXQgcmVwciBtYXkgbXV0YXRlIHRoZSBkaWN0LiAqLwogICAgIGkgPSAwOworICAgIGZpcnN0ID0gMTsKICAgICB3aGlsZSAoUHlEaWN0X05leHQoKFB5T2JqZWN0ICopbXAsICZpLCAma2V5LCAmdmFsdWUpKSB7Ci0gICAgICAgIGludCBzdGF0dXM7CisgICAgICAgIFB5T2JqZWN0ICpzOworICAgICAgICBpbnQgcmVzOworCiAgICAgICAgIC8qIFByZXZlbnQgcmVwciBmcm9tIGRlbGV0aW5nIGtleSBvciB2YWx1ZSBkdXJpbmcga2V5IGZvcm1hdC4gKi8KICAgICAgICAgUHlfSU5DUkVGKGtleSk7CiAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisKKyAgICAgICAgaWYgKCFmaXJzdCkgeworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiLCAiLCAyKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBmaXJzdCA9IDA7CisKICAgICAgICAgcyA9IFB5T2JqZWN0X1JlcHIoa2V5KTsKLSAgICAgICAgUHlVbmljb2RlX0FwcGVuZCgmcywgY29sb24pOwotICAgICAgICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsKCZzLCBQeU9iamVjdF9SZXByKHZhbHVlKSk7Ci0gICAgICAgIFB5X0RFQ1JFRihrZXkpOwotICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKHBpZWNlcywgcyk7Ci0gICAgICAgIFB5X0RFQ1JFRihzKTsgIC8qIGFwcGVuZCBjcmVhdGVkIGEgbmV3IHJlZiAqLwotICAgICAgICBpZiAoc3RhdHVzIDwgMCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcyk7CisgICAgICAgIFB5X0RFQ1JFRihzKTsKKyAgICAgICAgaWYgKHJlcyA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIjogIiwgMikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBzID0gUHlPYmplY3RfUmVwcih2YWx1ZSk7CisgICAgICAgIGlmIChzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXMgPSBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHMpOworICAgICAgICBQeV9ERUNSRUYocyk7CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBQeV9DTEVBUihrZXkpOworICAgICAgICBQeV9DTEVBUih2YWx1ZSk7CiAgICAgfQogCi0gICAgLyogQWRkICJ7fSIgZGVjb3JhdGlvbnMgdG8gdGhlIGZpcnN0IGFuZCBsYXN0IGl0ZW1zLiAqLwotICAgIGFzc2VydChQeUxpc3RfR0VUX1NJWkUocGllY2VzKSA+IDApOwotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygieyIpOwotICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICB0ZW1wID0gUHlMaXN0X0dFVF9JVEVNKHBpZWNlcywgMCk7Ci0gICAgUHlVbmljb2RlX0FwcGVuZEFuZERlbCgmcywgdGVtcCk7Ci0gICAgUHlMaXN0X1NFVF9JVEVNKHBpZWNlcywgMCwgcyk7Ci0gICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAnfScpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygifSIpOwotICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICB0ZW1wID0gUHlMaXN0X0dFVF9JVEVNKHBpZWNlcywgUHlMaXN0X0dFVF9TSVpFKHBpZWNlcykgLSAxKTsKLSAgICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsKCZ0ZW1wLCBzKTsKLSAgICBQeUxpc3RfU0VUX0lURU0ocGllY2VzLCBQeUxpc3RfR0VUX1NJWkUocGllY2VzKSAtIDEsIHRlbXApOwotICAgIGlmICh0ZW1wID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLQotICAgIC8qIFBhc3RlIHRoZW0gYWxsIHRvZ2V0aGVyIHdpdGggIiwgIiBiZXR3ZWVuLiAqLwotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLCAiKTsKLSAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgcmVzdWx0ID0gUHlVbmljb2RlX0pvaW4ocywgcGllY2VzKTsKLSAgICBQeV9ERUNSRUYocyk7Ci0KLURvbmU6Ci0gICAgUHlfWERFQ1JFRihwaWVjZXMpOwotICAgIFB5X1hERUNSRUYoY29sb24pOwogICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKiltcCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKKworZXJyb3I6CisgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW1wKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CisgICAgUHlfWERFQ1JFRihrZXkpOworICAgIFB5X1hERUNSRUYodmFsdWUpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlfc3NpemVfdApAQCAtMTQ5MSw3ICsxNDg4LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3Rfc3Vic2NyaXB0KFB5RGljdE9iamVjdCAqbXAsIHJlZ2lzdGVyIFB5T2JqZWN0ICprZXkpCitkaWN0X3N1YnNjcmlwdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5KQogewogICAgIFB5T2JqZWN0ICp2OwogICAgIFB5X2hhc2hfdCBoYXNoOwpAQCAtMTUyMyw3ICsxNTIwLDcgQEAKICAgICAgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UKQEAgLTE1NDcsMTAgKzE1NDQsMTAgQEAKIH07CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2tleXMocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3Rfa2V5cyhQeURpY3RPYmplY3QgKm1wKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgajsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeV9zc2l6ZV90IGksIGo7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogICAgIFB5X3NzaXplX3Qgc2l6ZSwgbiwgb2Zmc2V0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwpAQCAtMTU5MSwxMCArMTU4OCwxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF92YWx1ZXMocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3RfdmFsdWVzKFB5RGljdE9iamVjdCAqbXApCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqOworICAgIFB5T2JqZWN0ICp2OworICAgIFB5X3NzaXplX3QgaSwgajsKICAgICBQeV9zc2l6ZV90IHNpemUsIG4sIG9mZnNldDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKIApAQCAtMTYzMywxMCArMTYzMCwxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9pdGVtcyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF9pdGVtcyhQeURpY3RPYmplY3QgKm1wKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgaiwgbjsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeV9zc2l6ZV90IGksIGosIG47CiAgICAgUHlfc3NpemVfdCBzaXplLCBvZmZzZXQ7CiAgICAgUHlPYmplY3QgKml0ZW0sICprZXk7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwOwpAQCAtMTY5NCwzNyArMTY5MSw3MiBAQAogICAgIHJldHVybiB2OwogfQogCisvKltjbGluaWMgaW5wdXRdCitAY2xhc3NtZXRob2QKK2RpY3QuZnJvbWtleXMKKyAgICBpdGVyYWJsZTogb2JqZWN0CisgICAgdmFsdWU6IG9iamVjdD1Ob25lCisgICAgLworCitSZXR1cm5zIGEgbmV3IGRpY3Qgd2l0aCBrZXlzIGZyb20gaXRlcmFibGUgYW5kIHZhbHVlcyBlcXVhbCB0byB2YWx1ZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGRpY3RfZnJvbWtleXNfX2RvY19fLAorImZyb21rZXlzKCR0eXBlLCBpdGVyYWJsZSwgdmFsdWU9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgYSBuZXcgZGljdCB3aXRoIGtleXMgZnJvbSBpdGVyYWJsZSBhbmQgdmFsdWVzIGVxdWFsIHRvIHZhbHVlLiIpOworCisjZGVmaW5lIERJQ1RfRlJPTUtFWVNfTUVUSE9EREVGICAgIFwKKyAgICB7ImZyb21rZXlzIiwgKFB5Q0Z1bmN0aW9uKWRpY3RfZnJvbWtleXMsIE1FVEhfVkFSQVJHU3xNRVRIX0NMQVNTLCBkaWN0X2Zyb21rZXlzX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2Zyb21rZXlzKFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzKQorZGljdF9mcm9ta2V5c19pbXBsKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKml0ZXJhYmxlLCBQeU9iamVjdCAqdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorZGljdF9mcm9ta2V5cyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpzZXE7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKml0ZXJhYmxlOwogICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJmcm9ta2V5cyIsCisgICAgICAgIDEsIDIsCisgICAgICAgICZpdGVyYWJsZSwgJnZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRpY3RfZnJvbWtleXNfaW1wbCh0eXBlLCBpdGVyYWJsZSwgdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0X2Zyb21rZXlzX2ltcGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqaXRlcmFibGUsIFB5T2JqZWN0ICp2YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NWY4ZGMwZmZhODc0MDZmIGlucHV0PWI4NWE2NjdmOWJmNDY2OWRdKi8KK3sKICAgICBQeU9iamVjdCAqaXQ7ICAgICAgIC8qIGl0ZXIoc2VxKSAqLwogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKmQ7CiAgICAgaW50IHN0YXR1czsKIAotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZyb21rZXlzIiwgMSwgMiwgJnNlcSwgJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBkID0gUHlPYmplY3RfQ2FsbE9iamVjdChjbHMsIE5VTEwpOworICAgIGQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KChQeU9iamVjdCAqKXR5cGUsIE5VTEwpOwogICAgIGlmIChkID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGQpICYmICgoUHlEaWN0T2JqZWN0ICopZCktPm1hX3VzZWQgPT0gMCkgewotICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3Qoc2VxKSkgeworICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoaXRlcmFibGUpKSB7CiAgICAgICAgICAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKWQ7CiAgICAgICAgICAgICBQeU9iamVjdCAqb2xkdmFsdWU7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CiAgICAgICAgICAgICBQeU9iamVjdCAqa2V5OwogICAgICAgICAgICAgUHlfaGFzaF90IGhhc2g7CiAKLSAgICAgICAgICAgIGlmIChkaWN0cmVzaXplKG1wLCBQeV9TSVpFKHNlcSkpKSB7CisgICAgICAgICAgICBpZiAoZGljdHJlc2l6ZShtcCwgUHlfU0laRShpdGVyYWJsZSkpKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB3aGlsZSAoX1B5RGljdF9OZXh0KHNlcSwgJnBvcywgJmtleSwgJm9sZHZhbHVlLCAmaGFzaCkpIHsKKyAgICAgICAgICAgIHdoaWxlIChfUHlEaWN0X05leHQoaXRlcmFibGUsICZwb3MsICZrZXksICZvbGR2YWx1ZSwgJmhhc2gpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGluc2VydGRpY3QobXAsIGtleSwgaGFzaCwgdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzMyLDE4ICsxNzY0LDE4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZDsKICAgICAgICAgfQotICAgICAgICBpZiAoUHlBbnlTZXRfQ2hlY2tFeGFjdChzZXEpKSB7CisgICAgICAgIGlmIChQeUFueVNldF9DaGVja0V4YWN0KGl0ZXJhYmxlKSkgewogICAgICAgICAgICAgUHlEaWN0T2JqZWN0ICptcCA9IChQeURpY3RPYmplY3QgKilkOwogICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MgPSAwOwogICAgICAgICAgICAgUHlPYmplY3QgKmtleTsKICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoOwogCi0gICAgICAgICAgICBpZiAoZGljdHJlc2l6ZShtcCwgUHlTZXRfR0VUX1NJWkUoc2VxKSkpIHsKKyAgICAgICAgICAgIGlmIChkaWN0cmVzaXplKG1wLCBQeVNldF9HRVRfU0laRShpdGVyYWJsZSkpKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB3aGlsZSAoX1B5U2V0X05leHRFbnRyeShzZXEsICZwb3MsICZrZXksICZoYXNoKSkgeworICAgICAgICAgICAgd2hpbGUgKF9QeVNldF9OZXh0RW50cnkoaXRlcmFibGUsICZwb3MsICZrZXksICZoYXNoKSkgewogICAgICAgICAgICAgICAgIGlmIChpbnNlcnRkaWN0KG1wLCBrZXksIGhhc2gsIHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTc1Myw3ICsxNzg1LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihzZXEpOworICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CiAgICAgaWYgKGl0ID09IE5VTEwpewogICAgICAgICBQeV9ERUNSRUYoZCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTkwOCw4ICsxOTQwLDggQEAKIGludAogUHlEaWN0X01lcmdlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYiwgaW50IG92ZXJyaWRlKQogewotICAgIHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsICpvdGhlcjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG47CisgICAgUHlEaWN0T2JqZWN0ICptcCwgKm90aGVyOworICAgIFB5X3NzaXplX3QgaSwgbjsKICAgICBQeURpY3RLZXlFbnRyeSAqZW50cnk7CiAKICAgICAvKiBXZSBhY2NlcHQgZm9yIHRoZSBhcmd1bWVudCBlaXRoZXIgYSBjb25jcmV0ZSBkaWN0aW9uYXJ5IG9iamVjdCwKQEAgLTIwMDYsNyArMjAzOCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2NvcHkocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3RfY29weShQeURpY3RPYmplY3QgKm1wKQogewogICAgIHJldHVybiBQeURpY3RfQ29weSgoUHlPYmplY3QqKW1wKTsKIH0KQEAgLTIxMTgsMTMgKzIxNTAsMTggQEAKICAgICAgICAgaWYgKGF2YWwgIT0gTlVMTCkgewogICAgICAgICAgICAgaW50IGNtcDsKICAgICAgICAgICAgIFB5T2JqZWN0ICpidmFsOworICAgICAgICAgICAgUHlPYmplY3QgKip2YWRkcjsKICAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBlcC0+bWVfa2V5OwogICAgICAgICAgICAgLyogdGVtcG9yYXJpbHkgYnVtcCBhdmFsJ3MgcmVmY291bnQgdG8gZW5zdXJlIGl0IHN0YXlzCiAgICAgICAgICAgICAgICBhbGl2ZSB1bnRpbCB3ZSdyZSBkb25lIHdpdGggaXQgKi8KICAgICAgICAgICAgIFB5X0lOQ1JFRihhdmFsKTsKICAgICAgICAgICAgIC8qIGRpdHRvIGZvciBrZXkgKi8KICAgICAgICAgICAgIFB5X0lOQ1JFRihrZXkpOwotICAgICAgICAgICAgYnZhbCA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKChQeU9iamVjdCAqKWIsIGtleSk7CisgICAgICAgICAgICAvKiByZXVzZSB0aGUga25vd24gaGFzaCB2YWx1ZSAqLworICAgICAgICAgICAgaWYgKChiLT5tYV9rZXlzLT5ka19sb29rdXApKGIsIGtleSwgZXAtPm1lX2hhc2gsICZ2YWRkcikgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBidmFsID0gTlVMTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBidmFsID0gKnZhZGRyOwogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBpZiAoYnZhbCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGF2YWwpOwpAQCAtMjE2Miw5ICsyMTk5LDMxIEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAorLypbY2xpbmljIGlucHV0XQorCitAY29leGlzdAorZGljdC5fX2NvbnRhaW5zX18KKworICBrZXk6IG9iamVjdAorICAvCisKK1RydWUgaWYgRCBoYXMgYSBrZXkgaywgZWxzZSBGYWxzZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGRpY3RfX19jb250YWluc19fX19kb2NfXywKKyJfX2NvbnRhaW5zX18oJHNlbGYsIGtleSwgLylcbiIKKyItLVxuIgorIlxuIgorIlRydWUgaWYgRCBoYXMgYSBrZXkgaywgZWxzZSBGYWxzZS4iKTsKKworI2RlZmluZSBESUNUX19fQ09OVEFJTlNfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19jb250YWluc19fIiwgKFB5Q0Z1bmN0aW9uKWRpY3RfX19jb250YWluc19fLCBNRVRIX098TUVUSF9DT0VYSVNULCBkaWN0X19fY29udGFpbnNfX19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9jb250YWlucyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5KQorZGljdF9fX2NvbnRhaW5zX18oUHlEaWN0T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqa2V5KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNjZjNmOGFhZjJjYzVjYzMgaW5wdXQ9Yjg1MmIyYTE5YjUxYWIyNF0qLwogeworICAgIHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAgPSBzZWxmOwogICAgIFB5X2hhc2hfdCBoYXNoOwogICAgIFB5RGljdEtleUVudHJ5ICplcDsKICAgICBQeU9iamVjdCAqKnZhbHVlX2FkZHI7CkBAIC0yMTgyLDcgKzIyNDEsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9nZXQocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmFyZ3MpCitkaWN0X2dldChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqa2V5OwogICAgIFB5T2JqZWN0ICpmYWlsb2JqID0gUHlfTm9uZTsKQEAgLTIyMTAsMTkgKzIyNjksMTkgQEAKICAgICByZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotZGljdF9zZXRkZWZhdWx0KHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICphcmdzKQorUHlPYmplY3QgKgorUHlEaWN0X1NldERlZmF1bHQoUHlPYmplY3QgKmQsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICpkZWZhdWx0b2JqKQogewotICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgUHlPYmplY3QgKmZhaWxvYmogPSBQeV9Ob25lOworICAgIFB5RGljdE9iamVjdCAqbXAgPSAoUHlEaWN0T2JqZWN0ICopZDsKICAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKICAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9hZGRyOwogCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAic2V0ZGVmYXVsdCIsIDEsIDIsICZrZXksICZmYWlsb2JqKSkKKyAgICBpZiAoIVB5RGljdF9DaGVjayhkKSkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KKyAgICB9CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8CiAgICAgICAgIChoYXNoID0gKChQeUFTQ0lJT2JqZWN0ICopIGtleSktPmhhc2gpID09IC0xKSB7CiAgICAgICAgIGhhc2ggPSBQeU9iamVjdF9IYXNoKGtleSk7CkBAIC0yMjQwLDIzICsyMjk5LDM1IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBlcCA9IGZpbmRfZW1wdHlfc2xvdChtcCwga2V5LCBoYXNoLCAmdmFsdWVfYWRkcik7CiAgICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKGZhaWxvYmopOworICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdG9iaik7CiAgICAgICAgIFB5X0lOQ1JFRihrZXkpOwotICAgICAgICBNQUlOVEFJTl9UUkFDS0lORyhtcCwga2V5LCBmYWlsb2JqKTsKKyAgICAgICAgTUFJTlRBSU5fVFJBQ0tJTkcobXAsIGtleSwgZGVmYXVsdG9iaik7CiAgICAgICAgIGVwLT5tZV9rZXkgPSBrZXk7CiAgICAgICAgIGVwLT5tZV9oYXNoID0gaGFzaDsKLSAgICAgICAgKnZhbHVlX2FkZHIgPSBmYWlsb2JqOwotICAgICAgICB2YWwgPSBmYWlsb2JqOworICAgICAgICAqdmFsdWVfYWRkciA9IGRlZmF1bHRvYmo7CisgICAgICAgIHZhbCA9IGRlZmF1bHRvYmo7CiAgICAgICAgIG1wLT5tYV9rZXlzLT5ka191c2FibGUtLTsKICAgICAgICAgbXAtPm1hX3VzZWQrKzsKICAgICB9Ci0gICAgUHlfSU5DUkVGKHZhbCk7CiAgICAgcmV0dXJuIHZhbDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2RpY3Rfc2V0ZGVmYXVsdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqa2V5LCAqdmFsOworICAgIFB5T2JqZWN0ICpkZWZhdWx0b2JqID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNldGRlZmF1bHQiLCAxLCAyLCAma2V5LCAmZGVmYXVsdG9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdmFsID0gUHlEaWN0X1NldERlZmF1bHQoKFB5T2JqZWN0ICopbXAsIGtleSwgZGVmYXVsdG9iaik7CisgICAgUHlfWElOQ1JFRih2YWwpOworICAgIHJldHVybiB2YWw7Cit9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2NsZWFyKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X2NsZWFyKFB5RGljdE9iamVjdCAqbXApCiB7CiAgICAgUHlEaWN0X0NsZWFyKChQeU9iamVjdCAqKW1wKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTIyNzgsNyArMjM0OSw3IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoZGVmbHQpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmx0OwogICAgICAgICB9Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKQEAgLTIyOTYsNyArMjM2Nyw3IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoZGVmbHQpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmx0OwogICAgICAgICB9Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAqdmFsdWVfYWRkciA9IE5VTEw7CkBAIC0yNDM3LDkgKzI1MDgsNiBAQAogICAgIHJldHVybiBzaXplb2YoUHlEaWN0S2V5c09iamVjdCkgKyAoREtfU0laRShrZXlzKS0xKSAqIHNpemVvZihQeURpY3RLZXlFbnRyeSk7CiB9CiAKLVB5RG9jX1NUUlZBUihjb250YWluc19fZG9jX18sCi0iRC5fX2NvbnRhaW5zX18oaykgLT4gVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlIik7Ci0KIFB5RG9jX1NUUlZBUihnZXRpdGVtX19kb2NfXywgInguX19nZXRpdGVtX18oeSkgPD09PiB4W3ldIik7CiAKIFB5RG9jX1NUUlZBUihzaXplb2ZfX2RvY19fLApAQCAtMjQ2MCwxNCArMjUyOCwxMCBAQAogMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuIik7CiAKIFB5RG9jX1NUUlZBUih1cGRhdGVfX2RvY19fLAotIkQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBkaWN0L2l0ZXJhYmxlIEUgYW5kIEYuXG4iCi0iSWYgRSBwcmVzZW50IGFuZCBoYXMgYSAua2V5cygpIG1ldGhvZCwgZG9lczogICAgIGZvciBrIGluIEU6IERba10gPSBFW2tdXG5cCi1JZiBFIHByZXNlbnQgYW5kIGxhY2tzIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIChrLCB2KSBpbiBFOiBEW2tdID0gdlxuXAotSW4gZWl0aGVyIGNhc2UsIHRoaXMgaXMgZm9sbG93ZWQgYnk6IGZvciBrIGluIEY6IERba10gPSBGW2tdIik7Ci0KLVB5RG9jX1NUUlZBUihmcm9ta2V5c19fZG9jX18sCi0iZGljdC5mcm9ta2V5cyhTWyx2XSkgLT4gTmV3IGRpY3Qgd2l0aCBrZXlzIGZyb20gUyBhbmQgdmFsdWVzIGVxdWFsIHRvIHYuXG5cCi12IGRlZmF1bHRzIHRvIE5vbmUuIik7CisiRC51cGRhdGUoW0UsIF0qKkYpIC0+IE5vbmUuICBVcGRhdGUgRCBmcm9tIGRpY3QvaXRlcmFibGUgRSBhbmQgRi5cblwKK0lmIEUgaXMgcHJlc2VudCBhbmQgaGFzIGEgLmtleXMoKSBtZXRob2QsIHRoZW4gZG9lczogIGZvciBrIGluIEU6IERba10gPSBFW2tdXG5cCitJZiBFIGlzIHByZXNlbnQgYW5kIGxhY2tzIGEgLmtleXMoKSBtZXRob2QsIHRoZW4gZG9lczogIGZvciBrLCB2IGluIEU6IERba10gPSB2XG5cCitJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGsgaW4gRjogIERba10gPSBGW2tdIik7CiAKIFB5RG9jX1NUUlZBUihjbGVhcl9fZG9jX18sCiAiRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4iKTsKQEAgLTI0ODgsOCArMjU1Miw3IEBACiAgICAgICAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgbWFwcF9tZXRob2RzW10gPSB7Ci0gICAgeyJfX2NvbnRhaW5zX18iLChQeUNGdW5jdGlvbilkaWN0X2NvbnRhaW5zLCAgICAgTUVUSF9PIHwgTUVUSF9DT0VYSVNULAotICAgICBjb250YWluc19fZG9jX199LAorICAgIERJQ1RfX19DT05UQUlOU19fX01FVEhPRERFRgogICAgIHsiX19nZXRpdGVtX18iLCAoUHlDRnVuY3Rpb24pZGljdF9zdWJzY3JpcHQsICAgICAgICBNRVRIX08gfCBNRVRIX0NPRVhJU1QsCiAgICAgIGdldGl0ZW1fX2RvY19ffSwKICAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilkaWN0X3NpemVvZiwgICAgICAgTUVUSF9OT0FSR1MsCkBAIC0yNTEwLDggKzI1NzMsNyBAQAogICAgIHZhbHVlc19fZG9jX199LAogICAgIHsidXBkYXRlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3RfdXBkYXRlLCAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICB1cGRhdGVfX2RvY19ffSwKLSAgICB7ImZyb21rZXlzIiwgICAgICAgIChQeUNGdW5jdGlvbilkaWN0X2Zyb21rZXlzLCAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9DTEFTUywKLSAgICAgZnJvbWtleXNfX2RvY19ffSwKKyAgICBESUNUX0ZST01LRVlTX01FVEhPRERFRgogICAgIHsiY2xlYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3RfY2xlYXIsICAgICAgICBNRVRIX05PQVJHUywKICAgICAgY2xlYXJfX2RvY19ffSwKICAgICB7ImNvcHkiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilkaWN0X2NvcHksICAgICAgICAgTUVUSF9OT0FSR1MsCkBAIC0yNTY4LDIyICsyNjMwLDIzIEBACiBkaWN0X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9iamVjdCAqc2VsZjsKKyAgICBQeURpY3RPYmplY3QgKmQ7CiAKICAgICBhc3NlcnQodHlwZSAhPSBOVUxMICYmIHR5cGUtPnRwX2FsbG9jICE9IE5VTEwpOwogICAgIHNlbGYgPSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKLSAgICBpZiAoc2VsZiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RGljdE9iamVjdCAqZCA9IChQeURpY3RPYmplY3QgKilzZWxmOwotICAgICAgICBkLT5tYV9rZXlzID0gbmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKTsKLSAgICAgICAgLyogWFhYIC0gU2hvdWxkIHdlIHJhaXNlIGEgbm8tbWVtb3J5IGVycm9yPyAqLwotICAgICAgICBpZiAoZC0+bWFfa2V5cyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBES19JTkNSRUYoUHlfRU1QVFlfS0VZUyk7Ci0gICAgICAgICAgICBkLT5tYV9rZXlzID0gUHlfRU1QVFlfS0VZUzsKLSAgICAgICAgICAgIGQtPm1hX3ZhbHVlcyA9IGVtcHR5X3ZhbHVlczsKLSAgICAgICAgfQotICAgICAgICBkLT5tYV91c2VkID0gMDsKLSAgICAgICAgLyogVGhlIG9iamVjdCBoYXMgYmVlbiBpbXBsaWNpdGx5IHRyYWNrZWQgYnkgdHBfYWxsb2MgKi8KLSAgICAgICAgaWYgKHR5cGUgPT0gJlB5RGljdF9UeXBlKQotICAgICAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soZCk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZCA9IChQeURpY3RPYmplY3QgKilzZWxmOworCisgICAgLyogVGhlIG9iamVjdCBoYXMgYmVlbiBpbXBsaWNpdGx5IHRyYWNrZWQgYnkgdHBfYWxsb2MgKi8KKyAgICBpZiAodHlwZSA9PSAmUHlEaWN0X1R5cGUpCisgICAgICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKGQpOworCisgICAgZC0+bWFfdXNlZCA9IDA7CisgICAgZC0+bWFfa2V5cyA9IG5ld19rZXlzX29iamVjdChQeURpY3RfTUlOU0laRV9DT01CSU5FRCk7CisgICAgaWYgKGQtPm1hX2tleXMgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTI2NTksOCArMjcyMiwxMCBAQAogewogICAgIFB5T2JqZWN0ICprdjsKICAgICBrdiA9IF9QeVVuaWNvZGVfRnJvbUlkKGtleSk7IC8qIGJvcnJvd2VkICovCi0gICAgaWYgKGt2ID09IE5VTEwpCisgICAgaWYgKGt2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBQeURpY3RfR2V0SXRlbShkcCwga3YpOwogfQogCkBAIC0yNjcxLDggKzI3MzYsMTAgQEAKIHsKICAgICBQeU9iamVjdCAqa3YsICpydjsKICAgICBrdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGtleSk7Ci0gICAgaWYgKGt2ID09IE5VTEwpCisgICAgaWYgKGt2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJ2ID0gUHlEaWN0X0dldEl0ZW0odiwga3YpOwogICAgIFB5X0RFQ1JFRihrdik7CiAgICAgcmV0dXJuIHJ2OwpAQCAtMjcwMyw2ICsyNzcwLDE1IEBACiB9CiAKIGludAorX1B5RGljdF9EZWxJdGVtSWQoUHlPYmplY3QgKnYsIF9QeV9JZGVudGlmaWVyICprZXkpCit7CisgICAgUHlPYmplY3QgKmt2ID0gX1B5VW5pY29kZV9Gcm9tSWQoa2V5KTsgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAoa3YgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBQeURpY3RfRGVsSXRlbSh2LCBrdik7Cit9CisKK2ludAogUHlEaWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKnYsIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqa3Y7CkBAIC0yNzk1LDggKzI4NzEsOCBAQAogc3RhdGljIFB5T2JqZWN0ICpkaWN0aXRlcl9pdGVybmV4dGtleShkaWN0aXRlcm9iamVjdCAqZGkpCiB7CiAgICAgUHlPYmplY3QgKmtleTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKLSAgICByZWdpc3RlciBQeURpY3RLZXlzT2JqZWN0ICprOworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5RGljdEtleXNPYmplY3QgKms7CiAgICAgUHlEaWN0T2JqZWN0ICpkID0gZGktPmRpX2RpY3Q7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CiAKQEAgLTI4NzgsNyArMjk1NCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKmRpY3RpdGVyX2l0ZXJuZXh0dmFsdWUoZGljdGl0ZXJvYmplY3QgKmRpKQogewogICAgIFB5T2JqZWN0ICp2YWx1ZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKKyAgICBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKICAgICBQeURpY3RPYmplY3QgKmQgPSBkaS0+ZGlfZGljdDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKIApAQCAtMjk1OSw3ICszMDM1LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqZGljdGl0ZXJfaXRlcm5leHRpdGVtKGRpY3RpdGVyb2JqZWN0ICpkaSkKIHsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWUsICpyZXN1bHQgPSBkaS0+ZGlfcmVzdWx0OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OwogICAgIFB5RGljdE9iamVjdCAqZCA9IGRpLT5kaV9kaWN0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL2V4Y2VwdGlvbnMuYyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCmluZGV4IDZiMDQ3MDAuLjQ0ZTYwZGQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZXhjZXB0aW9ucy5jCisrKyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCkBAIC0xNiw5ICsxNiw2IEBACiAjaWZkZWYgTVNfV0lORE9XUwogUHlPYmplY3QgKlB5RXhjX1dpbmRvd3NFcnJvciA9IE5VTEw7CiAjZW5kaWYKLSNpZmRlZiBfX1ZNUwotUHlPYmplY3QgKlB5RXhjX1ZNU0Vycm9yID0gTlVMTDsKLSNlbmRpZgogCiAvKiBUaGUgZGljdCBtYXAgZnJvbSBlcnJubyBjb2RlcyB0byBPU0Vycm9yIHN1YmNsYXNzZXMgKi8KIHN0YXRpYyBQeU9iamVjdCAqZXJybm9tYXAgPSBOVUxMOwpAQCAtMTIxLDExICsxMTgsMTEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBCYXNlRXhjZXB0aW9uX3JlcHIoUHlCYXNlRXhjZXB0aW9uT2JqZWN0ICpzZWxmKQogewotICAgIGNoYXIgKm5hbWU7Ci0gICAgY2hhciAqZG90OworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgY29uc3QgY2hhciAqZG90OwogCi0gICAgbmFtZSA9IChjaGFyICopUHlfVFlQRShzZWxmKS0+dHBfbmFtZTsKLSAgICBkb3QgPSBzdHJyY2hyKG5hbWUsICcuJyk7CisgICAgbmFtZSA9IFB5X1RZUEUoc2VsZiktPnRwX25hbWU7CisgICAgZG90ID0gKGNvbnN0IGNoYXIgKikgc3RycmNocihuYW1lLCAnLicpOwogICAgIGlmIChkb3QgIT0gTlVMTCkgbmFtZSA9IGRvdCsxOwogCiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyVSIiwgbmFtZSwgc2VsZi0+YXJncyk7CkBAIC03MjcsMTMgKzcyNCwxNyBAQAogICogd2UgaGFjayBhcmdzIHNvIHRoYXQgaXQgb25seSBjb250YWlucyB0d28gaXRlbXMuICBUaGlzIGFsc28KICAqIG1lYW5zIHdlIG5lZWQgb3VyIG93biBfX3N0cl9fKCkgd2hpY2ggcHJpbnRzIG91dCB0aGUgZmlsZW5hbWUKICAqIHdoZW4gaXQgd2FzIHN1cHBsaWVkLgorICoKKyAqIChJZiBhIGZ1bmN0aW9uIGhhcyB0d28gZmlsZW5hbWVzLCBzdWNoIGFzIHJlbmFtZSgpLCBzeW1saW5rKCksCisgKiBvciBjb3B5KCksIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoKSBpcyBjYWxsZWQsCisgKiB3aGljaCBhbGxvd3MgcGFzc2luZyBpbiBhIHNlY29uZCBmaWxlbmFtZS4pCiAgKi8KIAogLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNsZWFudXAgb24gZXJyb3IsIHRoZSBjYWxsZXIgc2hvdWxkICovCiBzdGF0aWMgaW50CiBvc2Vycm9yX3BhcnNlX2FyZ3MoUHlPYmplY3QgKipwX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipteWVycm5vLCBQeU9iamVjdCAqKnN0cmVycm9yLAotICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKmZpbGVuYW1lLCBQeU9iamVjdCAqKmZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAgICAgICAsIFB5T2JqZWN0ICoqd2luZXJyb3IKICNlbmRpZgpAQCAtNzQxLDE0ICs3NDIsMjMgQEAKIHsKICAgICBQeV9zc2l6ZV90IG5hcmdzOwogICAgIFB5T2JqZWN0ICphcmdzID0gKnBfYXJnczsKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIC8qCisgICAgICogaWdub3JlZCBvbiBub24tV2luZG93cyBwbGF0Zm9ybXMsCisgICAgICogYnV0IHBhcnNlZCBzbyBPU0Vycm9yIGhhcyBhIGNvbnNpc3RlbnQgc2lnbmF0dXJlCisgICAgICovCisgICAgUHlPYmplY3QgKl93aW5lcnJvciA9IE5VTEw7CisgICAgUHlPYmplY3QgKip3aW5lcnJvciA9ICZfd2luZXJyb3I7CisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAgICAgbmFyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOwogCi0jaWZkZWYgTVNfV0lORE9XUwotICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDQpIHsKLSAgICAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiT1NFcnJvciIsIDIsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lLCB3aW5lcnJvcikpCisgICAgaWYgKG5hcmdzID49IDIgJiYgbmFyZ3MgPD0gNSkgeworICAgICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJPU0Vycm9yIiwgMiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteWVycm5vLCBzdHJlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgd2luZXJyb3IsIGZpbGVuYW1lMikpCiAgICAgICAgICAgICByZXR1cm4gLTE7CisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBpZiAoKndpbmVycm9yICYmIFB5TG9uZ19DaGVjaygqd2luZXJyb3IpKSB7CiAgICAgICAgICAgICBsb25nIGVycmNvZGUsIHdpbmVycmNvZGU7CiAgICAgICAgICAgICBQeU9iamVjdCAqbmV3YXJnczsKQEAgLTc4MCwxNCArNzkwLDggQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKICAgICAgICAgICAgIGFyZ3MgPSAqcF9hcmdzID0gbmV3YXJnczsKICAgICAgICAgfQorI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KICAgICB9Ci0jZWxzZQotICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDMpIHsKLSAgICAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiT1NFcnJvciIsIDIsIDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0jZW5kaWYKIAogICAgIHJldHVybiAwOwogfQpAQCAtNzk1LDcgKzc5OSw3IEBACiBzdGF0aWMgaW50CiBvc2Vycm9yX2luaXQoUHlPU0Vycm9yT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqKnBfYXJncywKICAgICAgICAgICAgICBQeU9iamVjdCAqbXllcnJubywgUHlPYmplY3QgKnN0cmVycm9yLAotICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZQorICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlPYmplY3QgKmZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAsIFB5T2JqZWN0ICp3aW5lcnJvcgogI2VuZGlmCkBAIC04MTksOSArODIzLDE0IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOwogICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUgPSBmaWxlbmFtZTsKIAotICAgICAgICAgICAgaWYgKG5hcmdzID49IDIgJiYgbmFyZ3MgPD0gMykgewotICAgICAgICAgICAgICAgIC8qIGZpbGVuYW1lIGlzIHJlbW92ZWQgZnJvbSB0aGUgYXJncyB0dXBsZSAoZm9yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgICAgICAgICAgICBwdXJwb3Nlcywgc2VlIHRlc3RfZXhjZXB0aW9ucy5weSkgKi8KKyAgICAgICAgICAgIGlmIChmaWxlbmFtZTIgJiYgZmlsZW5hbWUyICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUyKTsKKyAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZTIgPSBmaWxlbmFtZTI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDUpIHsKKyAgICAgICAgICAgICAgICAvKiBmaWxlbmFtZSwgZmlsZW5hbWUyLCBhbmQgd2luZXJyb3IgYXJlIHJlbW92ZWQgZnJvbSB0aGUgYXJncyB0dXBsZQorICAgICAgICAgICAgICAgICAgIChmb3IgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcywgc2VlIHRlc3RfZXhjZXB0aW9ucy5weSkgKi8KICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3Vic2xpY2UgPSBQeVR1cGxlX0dldFNsaWNlKGFyZ3MsIDAsIDIpOwogICAgICAgICAgICAgICAgIGlmICghc3Vic2xpY2UpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTg0NSw3ICs4NTQsNyBAQAogICAgIC8qIFN0ZWFscyB0aGUgcmVmZXJlbmNlIHRvIGFyZ3MgKi8KICAgICBQeV9DTEVBUihzZWxmLT5hcmdzKTsKICAgICBzZWxmLT5hcmdzID0gYXJnczsKLSAgICBhcmdzID0gTlVMTDsKKyAgICAqcF9hcmdzID0gYXJncyA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTg4MCwxNyArODg5LDIwIEBACiBPU0Vycm9yX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9TRXJyb3JPYmplY3QgKnNlbGYgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpteWVycm5vID0gTlVMTCwgKnN0cmVycm9yID0gTlVMTCwgKmZpbGVuYW1lID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbXllcnJubyA9IE5VTEwsICpzdHJlcnJvciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gTlVMTCwgKmZpbGVuYW1lMiA9IE5VTEw7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5T2JqZWN0ICp3aW5lcnJvciA9IE5VTEw7CiAjZW5kaWYKIAorICAgIFB5X0lOQ1JFRihhcmdzKTsKKwogICAgIGlmICghb3NlcnJvcl91c2VfaW5pdCh0eXBlKSkgewogICAgICAgICBpZiAoIV9QeUFyZ19Ob0tleXdvcmRzKHR5cGUtPnRwX25hbWUsIGt3ZHMpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgICAgIFB5X0lOQ1JFRihhcmdzKTsKLSAgICAgICAgaWYgKG9zZXJyb3JfcGFyc2VfYXJncygmYXJncywgJm15ZXJybm8sICZzdHJlcnJvciwgJmZpbGVuYW1lCisgICAgICAgIGlmIChvc2Vycm9yX3BhcnNlX2FyZ3MoJmFyZ3MsICZteWVycm5vLCAmc3RyZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCAmZmlsZW5hbWUyCiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJndpbmVycm9yCiAjZW5kaWYKQEAgLTkxOSw3ICs5MzEsNyBAQAogICAgIHNlbGYtPndyaXR0ZW4gPSAtMTsKIAogICAgIGlmICghb3NlcnJvcl91c2VfaW5pdCh0eXBlKSkgewotICAgICAgICBpZiAob3NlcnJvcl9pbml0KHNlbGYsICZhcmdzLCBteWVycm5vLCBzdHJlcnJvciwgZmlsZW5hbWUKKyAgICAgICAgaWYgKG9zZXJyb3JfaW5pdChzZWxmLCAmYXJncywgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lLCBmaWxlbmFtZTIKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgICAgICAgICAgICAgICAgICAgLCB3aW5lcnJvcgogI2VuZGlmCkBAIC05MzIsNiArOTQ0LDcgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCisgICAgUHlfWERFQ1JFRihhcmdzKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7CiAKIGVycm9yOgpAQCAtOTQzLDcgKzk1Niw4IEBACiBzdGF0aWMgaW50CiBPU0Vycm9yX2luaXQoUHlPU0Vycm9yT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgUHlPYmplY3QgKm15ZXJybm8gPSBOVUxMLCAqc3RyZXJyb3IgPSBOVUxMLCAqZmlsZW5hbWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpteWVycm5vID0gTlVMTCwgKnN0cmVycm9yID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBOVUxMLCAqZmlsZW5hbWUyID0gTlVMTDsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlPYmplY3QgKndpbmVycm9yID0gTlVMTDsKICNlbmRpZgpAQCAtOTU2LDE0ICs5NzAsMTQgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgUHlfSU5DUkVGKGFyZ3MpOwotICAgIGlmIChvc2Vycm9yX3BhcnNlX2FyZ3MoJmFyZ3MsICZteWVycm5vLCAmc3RyZXJyb3IsICZmaWxlbmFtZQorICAgIGlmIChvc2Vycm9yX3BhcnNlX2FyZ3MoJmFyZ3MsICZteWVycm5vLCAmc3RyZXJyb3IsICZmaWxlbmFtZSwgJmZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJndpbmVycm9yCiAjZW5kaWYKICAgICAgICAgKSkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIGlmIChvc2Vycm9yX2luaXQoc2VsZiwgJmFyZ3MsIG15ZXJybm8sIHN0cmVycm9yLCBmaWxlbmFtZQorICAgIGlmIChvc2Vycm9yX2luaXQoc2VsZiwgJmFyZ3MsIG15ZXJybm8sIHN0cmVycm9yLCBmaWxlbmFtZSwgZmlsZW5hbWUyCiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICAgICAgICAgICAgICAgLCB3aW5lcnJvcgogI2VuZGlmCkBAIC05ODMsNiArOTk3LDcgQEAKICAgICBQeV9DTEVBUihzZWxmLT5teWVycm5vKTsKICAgICBQeV9DTEVBUihzZWxmLT5zdHJlcnJvcik7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZmlsZW5hbWUpOworICAgIFB5X0NMRUFSKHNlbGYtPmZpbGVuYW1lMik7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X0NMRUFSKHNlbGYtPndpbmVycm9yKTsKICNlbmRpZgpAQCAtMTAwNCw2ICsxMDE5LDcgQEAKICAgICBQeV9WSVNJVChzZWxmLT5teWVycm5vKTsKICAgICBQeV9WSVNJVChzZWxmLT5zdHJlcnJvcik7CiAgICAgUHlfVklTSVQoc2VsZi0+ZmlsZW5hbWUpOworICAgIFB5X1ZJU0lUKHNlbGYtPmZpbGVuYW1lMik7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X1ZJU0lUKHNlbGYtPndpbmVycm9yKTsKICNlbmRpZgpAQCAtMTAxMywyMyArMTAyOSw0MiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIE9TRXJyb3Jfc3RyKFB5T1NFcnJvck9iamVjdCAqc2VsZikKIHsKKyNkZWZpbmUgT1JfTk9ORSh4KSAoKHgpPyh4KTpQeV9Ob25lKQogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAvKiBJZiBhdmFpbGFibGUsIHdpbmVycm9yIGhhcyB0aGUgcHJpb3JpdHkgb3ZlciBteWVycm5vICovCi0gICAgaWYgKHNlbGYtPndpbmVycm9yICYmIHNlbGYtPmZpbGVuYW1lKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltXaW5FcnJvciAlU10gJVM6ICVSIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPndpbmVycm9yID8gc2VsZi0+d2luZXJyb3I6IFB5X05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5zdHJlcnJvciA/IHNlbGYtPnN0cmVycm9yOiBQeV9Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUpOworICAgIGlmIChzZWxmLT53aW5lcnJvciAmJiBzZWxmLT5maWxlbmFtZSkgeworICAgICAgICBpZiAoc2VsZi0+ZmlsZW5hbWUyKSB7CisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltXaW5FcnJvciAlU10gJVM6ICVSIC0+ICVSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPndpbmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPnN0cmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJbV2luRXJyb3IgJVNdICVTOiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT53aW5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT5zdHJlcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUpOworICAgICAgICB9CisgICAgfQogICAgIGlmIChzZWxmLT53aW5lcnJvciAmJiBzZWxmLT5zdHJlcnJvcikKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJbV2luRXJyb3IgJVNdICVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPndpbmVycm9yID8gc2VsZi0+d2luZXJyb3I6IFB5X05vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5zdHJlcnJvciA/IHNlbGYtPnN0cmVycm9yOiBQeV9Ob25lKTsKICNlbmRpZgotICAgIGlmIChzZWxmLT5maWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJbRXJybm8gJVNdICVTOiAlUiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5teWVycm5vID8gc2VsZi0+bXllcnJubzogUHlfTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmVycm9yID8gc2VsZi0+c3RyZXJyb3I6IFB5X05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSk7CisgICAgaWYgKHNlbGYtPmZpbGVuYW1lKSB7CisgICAgICAgIGlmIChzZWxmLT5maWxlbmFtZTIpIHsKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiW0Vycm5vICVTXSAlUzogJVIgLT4gJVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SX05PTkUoc2VsZi0+bXllcnJubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT5zdHJlcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiW0Vycm5vICVTXSAlUzogJVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SX05PTkUoc2VsZi0+bXllcnJubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT5zdHJlcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUpOworICAgICAgICB9CisgICAgfQogICAgIGlmIChzZWxmLT5teWVycm5vICYmIHNlbGYtPnN0cmVycm9yKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltFcnJubyAlU10gJVMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+bXllcnJubyA/IHNlbGYtPm15ZXJybm86IFB5X05vbmUsCkBAIC0xMDQ2LDcgKzEwODEsOCBAQAogICAgIC8qIHNlbGYtPmFyZ3MgaXMgb25seSB0aGUgZmlyc3QgdHdvIHJlYWwgYXJndW1lbnRzIGlmIHRoZXJlIHdhcyBhCiAgICAgICogZmlsZSBuYW1lIGdpdmVuIHRvIE9TRXJyb3IuICovCiAgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykgPT0gMiAmJiBzZWxmLT5maWxlbmFtZSkgewotICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMyk7CisgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSA9IHNlbGYtPmZpbGVuYW1lMiA/IDUgOiAzOworICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoc2l6ZSk7CiAgICAgICAgIGlmICghYXJncykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMDYwLDYgKzEwOTYsMjAgQEAKIAogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+ZmlsZW5hbWUpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDIsIHNlbGYtPmZpbGVuYW1lKTsKKworICAgICAgICBpZiAoc2VsZi0+ZmlsZW5hbWUyKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhpcyB0dXBsZSBpcyBlc3NlbnRpYWxseSB1c2VkIGFzIE9TRXJyb3IoKmFyZ3MpLgorICAgICAgICAgICAgICogU28sIHRvIHJlY3JlYXRlIGZpbGVuYW1lMiwgd2UgbmVlZCB0byBwYXNzIGluCisgICAgICAgICAgICAgKiB3aW5lcnJvciBhcyB3ZWxsLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDMsIFB5X05vbmUpOworCisgICAgICAgICAgICAvKiBmaWxlbmFtZTIgKi8KKyAgICAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5maWxlbmFtZTIpOworICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCA0LCBzZWxmLT5maWxlbmFtZTIpOworICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIFB5X0lOQ1JFRihhcmdzKTsKIApAQCAtMTA5OSw2ICsxMTQ5LDggQEAKICAgICAgICAgUHlEb2NfU1RSKCJleGNlcHRpb24gc3RyZXJyb3IiKX0sCiAgICAgeyJmaWxlbmFtZSIsIFRfT0JKRUNULCBvZmZzZXRvZihQeU9TRXJyb3JPYmplY3QsIGZpbGVuYW1lKSwgMCwKICAgICAgICAgUHlEb2NfU1RSKCJleGNlcHRpb24gZmlsZW5hbWUiKX0sCisgICAgeyJmaWxlbmFtZTIiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlPU0Vycm9yT2JqZWN0LCBmaWxlbmFtZTIpLCAwLAorICAgICAgICBQeURvY19TVFIoInNlY29uZCBleGNlcHRpb24gZmlsZW5hbWUiKX0sCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIHsid2luZXJyb3IiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlPU0Vycm9yT2JqZWN0LCB3aW5lcnJvciksIDAsCiAgICAgICAgIFB5RG9jX1NUUigiV2luMzIgZXhjZXB0aW9uIGNvZGUiKX0sCkBAIC0yMzI3LDcgKzIzNzksNyBAQAogICAgIH0KIAogI2lmZGVmIE1TX1dJTkRPV1MKLSNpbmNsdWRlIDxXaW5zb2NrMi5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAvKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyB3ZXJlIGFkZGVkIHRvIGVycm5vLmggaW4gVlMyMDEwIGJ1dCBoYXZlCiAgICBwcmVmZXJyZWQgV1NBIGVxdWl2YWxlbnRzLiAqLwogI3VuZGVmIEVBRERSSU5VU0UKQEAgLTI0NzEsOSArMjUyMyw2IEBACiAjaWZkZWYgTVNfV0lORE9XUwogICAgIElOSVRfQUxJQVMoV2luZG93c0Vycm9yLCBPU0Vycm9yKQogI2VuZGlmCi0jaWZkZWYgX19WTVMKLSAgICBJTklUX0FMSUFTKFZNU0Vycm9yLCBPU0Vycm9yKQotI2VuZGlmCiAgICAgUE9TVF9JTklUKEVPRkVycm9yKQogICAgIFBPU1RfSU5JVChSdW50aW1lRXJyb3IpCiAgICAgUE9TVF9JTklUKE5vdEltcGxlbWVudGVkRXJyb3IpCkBAIC0yNTkxLDMgKzI2NDAsMTM0IEBACiAgICAgZnJlZV9wcmVhbGxvY2F0ZWRfbWVtZXJyb3JzKCk7CiAgICAgUHlfQ0xFQVIoZXJybm9tYXApOwogfQorCisvKiBIZWxwZXIgdG8gZG8gdGhlIGVxdWl2YWxlbnQgb2YgInJhaXNlIFggZnJvbSBZIiBpbiBDLCBidXQgYWx3YXlzIHVzaW5nCisgKiB0aGUgY3VycmVudCBleGNlcHRpb24gcmF0aGVyIHRoYW4gcGFzc2luZyBvbmUgaW4uCisgKgorICogV2UgY3VycmVudGx5IGxpbWl0IHRoaXMgdG8gKm9ubHkqIGV4Y2VwdGlvbnMgdGhhdCB1c2UgdGhlIEJhc2VFeGNlcHRpb24KKyAqIHRwX2luaXQgYW5kIHRwX25ldyBtZXRob2RzLCBzaW5jZSB3ZSBjYW4gYmUgcmVhc29uYWJseSBzdXJlIHdlIGNhbiB3cmFwCisgKiB0aG9zZSBjb3JyZWN0bHkgd2l0aG91dCBsb3NpbmcgZGF0YSBhbmQgd2l0aG91dCBsb3NpbmcgYmFja3dhcmRzCisgKiBjb21wYXRpYmlsaXR5LgorICoKKyAqIFdlIGFsc28gYWltIHRvIHJ1bGUgb3V0ICphbGwqIGV4Y2VwdGlvbnMgdGhhdCBtaWdodCBiZSBzdG9yaW5nIGFkZGl0aW9uYWwKKyAqIHN0YXRlLCB3aGV0aGVyIGJ5IGhhdmluZyBhIHNpemUgZGlmZmVyZW5jZSByZWxhdGl2ZSB0byBCYXNlRXhjZXB0aW9uLAorICogYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIGluIGR1cmluZyBjb25zdHJ1Y3Rpb24gb3IgYnkgaGF2aW5nIGEKKyAqIG5vbi1lbXB0eSBpbnN0YW5jZSBkaWN0LgorICoKKyAqIFdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHdpdGggd2hhdCB3ZSB3cmFwLCBzaW5jZSBjaGFuZ2luZyB0eXBlcyB0bworICogYSBicm9hZGVyIGV4Y2VwdGlvbiB0eXBlIHdvdWxkIGJlIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgZm9yCisgKiBleGlzdGluZyBjb2RlY3MsIGFuZCB3aXRoIGRpZmZlcmVudCBpbml0IG9yIG5ldyBtZXRob2QgaW1wbGVtZW50YXRpb25zCisgKiBtYXkgZWl0aGVyIG5vdCBzdXBwb3J0IGluc3RhbnRpYXRpb24gd2l0aCBQeUVycl9Gb3JtYXQgb3IgbG9zZQorICogaW5mb3JtYXRpb24gd2hlbiBpbnN0YW50aWF0ZWQgdGhhdCB3YXkuCisgKgorICogWFhYIChuY29naGxhbik6IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGNvbXByZWhlbnNpdmUgYnkgZXhwbG9pdGluZyB0aGUKKyAqIGZhY3QgdGhhdCBleGNlcHRpb25zIGFyZSBleHBlY3RlZCB0byBzdXBwb3J0IHBpY2tsaW5nLiBJZiBtb3JlIGJ1aWx0aW4KKyAqIGV4Y2VwdGlvbnMgKGUuZy4gQXR0cmlidXRlRXJyb3IpIHN0YXJ0IHRvIGJlIGNvbnZlcnRlZCB0byByaWNoCisgKiBleGNlcHRpb25zIHdpdGggYWRkaXRpb25hbCBhdHRyaWJ1dGVzLCB0aGF0J3MgcHJvYmFibHkgYSBiZXR0ZXIgYXBwcm9hY2gKKyAqIHRvIHB1cnN1ZSBvdmVyIGFkZGluZyBzcGVjaWFsIGNhc2VzIGZvciBwYXJ0aWN1bGFyIHN0YXRlZnVsIHN1YmNsYXNzZXMuCisgKgorICogUmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgbmV3IGV4Y2VwdGlvbiAoaWYgYW55KSwgTlVMTCBpZiB0aGUKKyAqIGV4aXN0aW5nIGV4Y2VwdGlvbiB3YXMgbGVmdCBpbiBwbGFjZS4KKyAqLworUHlPYmplY3QgKgorX1B5RXJyX1RyeVNldEZyb21DYXVzZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBQeU9iamVjdCogbXNnX3ByZWZpeDsKKyAgICBQeU9iamVjdCAqZXhjLCAqdmFsLCAqdGI7CisgICAgUHlUeXBlT2JqZWN0ICpjYXVnaHRfdHlwZTsKKyAgICBQeU9iamVjdCAqKmRpY3RwdHI7CisgICAgUHlPYmplY3QgKmluc3RhbmNlX2FyZ3M7CisgICAgUHlfc3NpemVfdCBudW1fYXJncywgY2F1Z2h0X3R5cGVfc2l6ZSwgYmFzZV9leGNfc2l6ZTsKKyAgICBQeU9iamVjdCAqbmV3X2V4YywgKm5ld192YWwsICpuZXdfdGI7CisgICAgdmFfbGlzdCB2YXJnczsKKyAgICBpbnQgc2FtZV9iYXNpY19zaXplOworCisgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbCwgJnRiKTsKKyAgICBjYXVnaHRfdHlwZSA9IChQeVR5cGVPYmplY3QgKilleGM7CisgICAgLyogRW5zdXJlIHR5cGUgaW5mbyBpbmRpY2F0ZXMgbm8gZXh0cmEgc3RhdGUgaXMgc3RvcmVkIGF0IHRoZSBDIGxldmVsCisgICAgICogYW5kIHRoYXQgdGhlIHR5cGUgY2FuIGJlIHJlaW5zdGFudGlhdGVkIHVzaW5nIFB5RXJyX0Zvcm1hdAorICAgICAqLworICAgIGNhdWdodF90eXBlX3NpemUgPSBjYXVnaHRfdHlwZS0+dHBfYmFzaWNzaXplOworICAgIGJhc2VfZXhjX3NpemUgPSBfUHlFeGNfQmFzZUV4Y2VwdGlvbi50cF9iYXNpY3NpemU7CisgICAgc2FtZV9iYXNpY19zaXplID0gKAorICAgICAgICBjYXVnaHRfdHlwZV9zaXplID09IGJhc2VfZXhjX3NpemUgfHwKKyAgICAgICAgKFB5VHlwZV9TVVBQT1JUU19XRUFLUkVGUyhjYXVnaHRfdHlwZSkgJiYKKyAgICAgICAgICAgIChjYXVnaHRfdHlwZV9zaXplID09IGJhc2VfZXhjX3NpemUgKyBzaXplb2YoUHlPYmplY3QgKikpCisgICAgICAgICkKKyAgICApOworICAgIGlmIChjYXVnaHRfdHlwZS0+dHBfaW5pdCAhPSAoaW5pdHByb2MpQmFzZUV4Y2VwdGlvbl9pbml0IHx8CisgICAgICAgIGNhdWdodF90eXBlLT50cF9uZXcgIT0gQmFzZUV4Y2VwdGlvbl9uZXcgfHwKKyAgICAgICAgIXNhbWVfYmFzaWNfc2l6ZSB8fAorICAgICAgICBjYXVnaHRfdHlwZS0+dHBfaXRlbXNpemUgIT0gX1B5RXhjX0Jhc2VFeGNlcHRpb24udHBfaXRlbXNpemUpIHsKKyAgICAgICAgLyogV2UgY2FuJ3QgYmUgc3VyZSB3ZSBjYW4gd3JhcCB0aGlzIHNhZmVseSwgc2luY2UgaXQgbWF5IGNvbnRhaW4KKyAgICAgICAgICogbW9yZSBzdGF0ZSB0aGFuIGp1c3QgdGhlIGV4Y2VwdGlvbiB0eXBlLiBBY2NvcmRpbmdseSwgd2UganVzdAorICAgICAgICAgKiBsZWF2ZSBpdCBhbG9uZS4KKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhlIGFyZ3MgYXJlIGVtcHR5IG9yIGNvbnRhaW4gYSBzaW5nbGUgc3RyaW5nICovCisgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGMsICZ2YWwsICZ0Yik7CisgICAgaW5zdGFuY2VfYXJncyA9ICgoUHlCYXNlRXhjZXB0aW9uT2JqZWN0ICopdmFsKS0+YXJnczsKKyAgICBudW1fYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoaW5zdGFuY2VfYXJncyk7CisgICAgaWYgKG51bV9hcmdzID4gMSB8fAorICAgICAgICAobnVtX2FyZ3MgPT0gMSAmJgorICAgICAgICAgIVB5VW5pY29kZV9DaGVja0V4YWN0KFB5VHVwbGVfR0VUX0lURU0oaW5zdGFuY2VfYXJncywgMCkpKSkgeworICAgICAgICAvKiBNb3JlIHRoYW4gMSBhcmcsIG9yIHRoZSBvbmUgYXJnIHdlIGRvIGhhdmUgaXNuJ3QgYSBzdHJpbmcKKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRW5zdXJlIHRoZSBpbnN0YW5jZSBkaWN0IGlzIGFsc28gZW1wdHkgKi8KKyAgICBkaWN0cHRyID0gX1B5T2JqZWN0X0dldERpY3RQdHIodmFsKTsKKyAgICBpZiAoZGljdHB0ciAhPSBOVUxMICYmICpkaWN0cHRyICE9IE5VTEwgJiYKKyAgICAgICAgUHlPYmplY3RfTGVuZ3RoKCpkaWN0cHRyKSA+IDApIHsKKyAgICAgICAgLyogV2hpbGUgd2UgY291bGQgcG90ZW50aWFsbHkgY29weSBhIG5vbi1lbXB0eSBpbnN0YW5jZSBkaWN0aW9uYXJ5CisgICAgICAgICAqIHRvIHRoZSByZXBsYWNlbWVudCBleGNlcHRpb24sIGZvciBub3cgd2UgdGFrZSB0aGUgbW9yZQorICAgICAgICAgKiBjb25zZXJ2YXRpdmUgcGF0aCBvZiBsZWF2aW5nIGV4Y2VwdGlvbnMgd2l0aCBhdHRyaWJ1dGVzIHNldAorICAgICAgICAgKiBhbG9uZS4KKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRm9yIGV4Y2VwdGlvbnMgdGhhdCB3ZSBjYW4gd3JhcCBzYWZlbHksIHdlIGNoYWluIHRoZSBvcmlnaW5hbAorICAgICAqIGV4Y2VwdGlvbiB0byBhIG5ldyBvbmUgb2YgdGhlIGV4YWN0IHNhbWUgdHlwZSB3aXRoIGFuCisgICAgICogZXJyb3IgbWVzc2FnZSB0aGF0IG1lbnRpb25zIHRoZSBhZGRpdGlvbmFsIGRldGFpbHMgYW5kIHRoZQorICAgICAqIG9yaWdpbmFsIGV4Y2VwdGlvbi4KKyAgICAgKgorICAgICAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gd3JhcCBPU0Vycm9yIGFuZCB2YXJpb3VzIG90aGVyIGV4Y2VwdGlvbgorICAgICAqIHR5cGVzIGFzIHdlbGwsIGJ1dCB0aGF0J3MgcXVpdGUgYSBiaXQgdHJpY2tpZXIgZHVlIHRvIHRoZSBleHRyYQorICAgICAqIHN0YXRlIHBvdGVudGlhbGx5IHN0b3JlZCBvbiBPU0Vycm9yIGluc3RhbmNlcy4KKyAgICAgKi8KKyAgICAvKiBFbnN1cmUgdGhlIHRyYWNlYmFjayBpcyBzZXQgY29ycmVjdGx5IG9uIHRoZSBleGlzdGluZyBleGNlcHRpb24gKi8KKyAgICBpZiAodGIgIT0gTlVMTCkgeworICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCB0Yik7CisgICAgICAgIFB5X0RFQ1JFRih0Yik7CisgICAgfQorCisjaWZkZWYgSEFWRV9TVERBUkdfUFJPVE9UWVBFUworICAgIHZhX3N0YXJ0KHZhcmdzLCBmb3JtYXQpOworI2Vsc2UKKyAgICB2YV9zdGFydCh2YXJncyk7CisjZW5kaWYKKyAgICBtc2dfcHJlZml4ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmFyZ3MpOworICAgIHZhX2VuZCh2YXJncyk7CisgICAgaWYgKG1zZ19wcmVmaXggPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICAgICAgUHlfREVDUkVGKHZhbCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5RXJyX0Zvcm1hdChleGMsICIlVSAoJXM6ICVTKSIsCisgICAgICAgICAgICAgICAgIG1zZ19wcmVmaXgsIFB5X1RZUEUodmFsKS0+dHBfbmFtZSwgdmFsKTsKKyAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICBQeV9ERUNSRUYobXNnX3ByZWZpeCk7CisgICAgUHlFcnJfRmV0Y2goJm5ld19leGMsICZuZXdfdmFsLCAmbmV3X3RiKTsKKyAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJm5ld19leGMsICZuZXdfdmFsLCAmbmV3X3RiKTsKKyAgICBQeUV4Y2VwdGlvbl9TZXRDYXVzZShuZXdfdmFsLCB2YWwpOworICAgIFB5RXJyX1Jlc3RvcmUobmV3X2V4YywgbmV3X3ZhbCwgbmV3X3RiKTsKKyAgICByZXR1cm4gbmV3X3ZhbDsKK30KZGlmZiAtLWdpdCBhL09iamVjdHMvZmlsZW9iamVjdC5jIGIvT2JqZWN0cy9maWxlb2JqZWN0LmMKaW5kZXggOThmNDJhOS4uNTk2ZjkwOSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9maWxlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9maWxlb2JqZWN0LmMKQEAgLTI2LDggKzI2LDggQEAKIC8qIEV4dGVybmFsIEMgaW50ZXJmYWNlICovCiAKIFB5T2JqZWN0ICoKLVB5RmlsZV9Gcm9tRmQoaW50IGZkLCBjaGFyICpuYW1lLCBjaGFyICptb2RlLCBpbnQgYnVmZmVyaW5nLCBjaGFyICplbmNvZGluZywKLSAgICAgICAgICAgICAgY2hhciAqZXJyb3JzLCBjaGFyICpuZXdsaW5lLCBpbnQgY2xvc2VmZCkKK1B5RmlsZV9Gcm9tRmQoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICptb2RlLCBpbnQgYnVmZmVyaW5nLCBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLCBjb25zdCBjaGFyICpuZXdsaW5lLCBpbnQgY2xvc2VmZCkKIHsKICAgICBQeU9iamVjdCAqaW8sICpzdHJlYW07CiAgICAgX1B5X0lERU5USUZJRVIob3Blbik7CkBAIC0zOTAsNyArMzkwLDcgQEAKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBlcnJubyA9IDA7Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAobiA+IElOVF9NQVgpCiAgICAgICAgIG4gPSBJTlRfTUFYOwogICAgIG4gPSB3cml0ZShzZWxmLT5mZCwgYywgKGludCluKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvZmxvYXRvYmplY3QuYyBiL09iamVjdHMvZmxvYXRvYmplY3QuYwppbmRleCBhMDhhODUyLi4wNWI3Njc5IDEwMDY0NAotLS0gYS9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mbG9hdG9iamVjdC5jCkBAIC05LDExICs5LDYgQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGZsb2F0Lmg+CiAKLSN1bmRlZiBNQVgKLSN1bmRlZiBNSU4KLSNkZWZpbmUgTUFYKHgsIHkpICgoeCkgPCAoeSkgPyAoeSkgOiAoeCkpCi0jZGVmaW5lIE1JTih4LCB5KSAoKHgpIDwgKHkpID8gKHgpIDogKHkpKQotCiAKIC8qIFNwZWNpYWwgZnJlZSBsaXN0CiAgICBmcmVlX2xpc3QgaXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgb2YgYXZhaWxhYmxlIFB5RmxvYXRPYmplY3RzLCBsaW5rZWQKQEAgLTExNCw3ICsxMDksNyBAQAogUHlPYmplY3QgKgogUHlGbG9hdF9Gcm9tRG91YmxlKGRvdWJsZSBmdmFsKQogewotICAgIHJlZ2lzdGVyIFB5RmxvYXRPYmplY3QgKm9wID0gZnJlZV9saXN0OworICAgIFB5RmxvYXRPYmplY3QgKm9wID0gZnJlZV9saXN0OwogICAgIGlmIChvcCAhPSBOVUxMKSB7CiAgICAgICAgIGZyZWVfbGlzdCA9IChQeUZsb2F0T2JqZWN0ICopIFB5X1RZUEUob3ApOwogICAgICAgICBudW1mcmVlLS07CkBAIC0xMjQsNyArMTE5LDcgQEAKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KICAgICAvKiBJbmxpbmUgUHlPYmplY3RfTmV3ICovCi0gICAgUHlPYmplY3RfSU5JVChvcCwgJlB5RmxvYXRfVHlwZSk7CisgICAgKHZvaWQpUHlPYmplY3RfSU5JVChvcCwgJlB5RmxvYXRfVHlwZSk7CiAgICAgb3AtPm9iX2Z2YWwgPSBmdmFsOwogICAgIHJldHVybiAoUHlPYmplY3QgKikgb3A7CiB9CkBAIC0xNDksOCArMTQ0LDkgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIodiwgJnMsICZsZW4pKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAiZmxvYXQoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiZmxvYXQoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBsYXN0ID0gcyArIGxlbjsKQEAgLTI0Niw3ICsyNDIsNyBAQAogc3RhdGljIGludAogY29udmVydF90b19kb3VibGUoUHlPYmplY3QgKip2LCBkb3VibGUgKmRibCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqID0gKnY7CisgICAgUHlPYmplY3QgKm9iaiA9ICp2OwogCiAgICAgaWYgKFB5TG9uZ19DaGVjayhvYmopKSB7CiAgICAgICAgICpkYmwgPSBQeUxvbmdfQXNEb3VibGUob2JqKTsKQEAgLTExMzEsNyArMTEyNyw3IEBACiAgICAgfQogCiAgICAgbSA9IGZyZXhwKGZhYnMoeCksICZlKTsKLSAgICBzaGlmdCA9IDEgLSBNQVgoREJMX01JTl9FWFAgLSBlLCAwKTsKKyAgICBzaGlmdCA9IDEgLSBQeV9NQVgoREJMX01JTl9FWFAgLSBlLCAwKTsKICAgICBtID0gbGRleHAobSwgc2hpZnQpOwogICAgIGUgLT0gc2hpZnQ7CiAKQEAgLTEyODUsOCArMTI4MSw4IEBACiAgICAgZmRpZ2l0cyA9IGNvZWZmX2VuZCAtIHNfc3RvcmU7CiAgICAgaWYgKG5kaWdpdHMgPT0gMCkKICAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKLSAgICBpZiAobmRpZ2l0cyA+IE1JTihEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRyAtIExPTkdfTUlOLzIsCi0gICAgICAgICAgICAgICAgICAgICAgTE9OR19NQVgvMiArIDEgLSBEQkxfTUFYX0VYUCkvNCkKKyAgICBpZiAobmRpZ2l0cyA+IFB5X01JTihEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRyAtIExPTkdfTUlOLzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgTE9OR19NQVgvMiArIDEgLSBEQkxfTUFYX0VYUCkvNCkKICAgICAgICAgZ290byBpbnNhbmVfbGVuZ3RoX2Vycm9yOwogCiAgICAgLyogW3AgPGV4cG9uZW50Pl0gKi8KQEAgLTEzNDIsNyArMTMzOCw3IEBACiAKICAgICAvKiBsc2IgPSBleHBvbmVudCBvZiBsZWFzdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlICpyb3VuZGVkKiB2YWx1ZS4KICAgICAgICBUaGlzIGlzIHRvcF9leHAgLSBEQkxfTUFOVF9ESUcgdW5sZXNzIHJlc3VsdCBpcyBzdWJub3JtYWwuICovCi0gICAgbHNiID0gTUFYKHRvcF9leHAsIChsb25nKURCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRzsKKyAgICBsc2IgPSBQeV9NQVgodG9wX2V4cCwgKGxvbmcpREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHOwogCiAgICAgeCA9IDAuMDsKICAgICBpZiAoZXhwID49IGxzYikgewpAQCAtMTQyMSw3ICsxNDE3LDcgQEAKID4+PiBmbG9hdC5mcm9taGV4KCcweDEuZmZmZnAxMCcpXG5cCiAyMDQ3Ljk4NDM3NVxuXAogPj4+IGZsb2F0LmZyb21oZXgoJy0weDFwLTEwNzQnKVxuXAotLTQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0Iik7CistNWUtMzI0Iik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE3MTEsNyArMTcwNyw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0X3NwZWMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5RmxvYXRfRm9ybWF0QWR2YW5jZWRXcml0ZXIoCiAgICAgICAgICZ3cml0ZXIsCiAgICAgICAgIHNlbGYsCkBAIC0xODU4LDcgKzE4NTQsNyBAQAogICAgIGZsb2F0X25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiB9OwogCi12b2lkCitpbnQKIF9QeUZsb2F0X0luaXQodm9pZCkKIHsKICAgICAvKiBXZSBhdHRlbXB0IHRvIGRldGVybWluZSBpZiB0aGlzIG1hY2hpbmUgaXMgdXNpbmcgSUVFRQpAQCAtMTkwOCw4ICsxOTA0LDExIEBACiAgICAgZmxvYXRfZm9ybWF0ID0gZGV0ZWN0ZWRfZmxvYXRfZm9ybWF0OwogCiAgICAgLyogSW5pdCBmbG9hdCBpbmZvICovCi0gICAgaWYgKEZsb2F0SW5mb1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZGbG9hdEluZm9UeXBlLCAmZmxvYXRpbmZvX2Rlc2MpOworICAgIGlmIChGbG9hdEluZm9UeXBlLnRwX25hbWUgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJkZsb2F0SW5mb1R5cGUsICZmbG9hdGluZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAxOwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL09iamVjdHMvZnJhbWVvYmplY3QuYyBiL09iamVjdHMvZnJhbWVvYmplY3QuYwppbmRleCBiMzEyMTMwLi4wZDYyMjkzIDEwMDY0NAotLS0gYS9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mcmFtZW9iamVjdC5jCkBAIC03LDExICs3LDYgQEAKICNpbmNsdWRlICJvcGNvZGUuaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAotI3VuZGVmIE1JTgotI3VuZGVmIE1BWAotI2RlZmluZSBNSU4oYSwgYikgKChhKSA8IChiKSA/IChhKSA6IChiKSkKLSNkZWZpbmUgTUFYKGEsIGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCi0KICNkZWZpbmUgT0ZGKHgpIG9mZnNldG9mKFB5RnJhbWVPYmplY3QsIHgpCiAKIHN0YXRpYyBQeU1lbWJlckRlZiBmcmFtZV9tZW1iZXJsaXN0W10gPSB7CkBAIC0yNiw3ICsyMSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZnJhbWVfZ2V0bG9jYWxzKFB5RnJhbWVPYmplY3QgKmYsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoZik7CisgICAgaWYgKFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfSU5DUkVGKGYtPmZfbG9jYWxzKTsKICAgICByZXR1cm4gZi0+Zl9sb2NhbHM7CiB9CkBAIC0xNjAsOCArMTU2LDggQEAKIAogICAgIC8qIFdlJ3JlIG5vdyByZWFkeSB0byBsb29rIGF0IHRoZSBieXRlY29kZS4gKi8KICAgICBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZShmLT5mX2NvZGUtPmNvX2NvZGUsIChjaGFyICoqKSZjb2RlLCAmY29kZV9sZW4pOwotICAgIG1pbl9hZGRyID0gTUlOKG5ld19sYXN0aSwgZi0+Zl9sYXN0aSk7Ci0gICAgbWF4X2FkZHIgPSBNQVgobmV3X2xhc3RpLCBmLT5mX2xhc3RpKTsKKyAgICBtaW5fYWRkciA9IFB5X01JTihuZXdfbGFzdGksIGYtPmZfbGFzdGkpOworICAgIG1heF9hZGRyID0gUHlfTUFYKG5ld19sYXN0aSwgZi0+Zl9sYXN0aSk7CiAKICAgICAvKiBZb3UgY2FuJ3QganVtcCBvbnRvIGEgbGluZSB3aXRoIGFuICdleGNlcHQnIHN0YXRlbWVudCBvbiBpdCAtCiAgICAgICogdGhleSBleHBlY3QgdG8gaGF2ZSBhbiBleGNlcHRpb24gb24gdGhlIHRvcCBvZiB0aGUgc3RhY2ssIHdoaWNoCkBAIC0yOTMsNyArMjg5LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgbWluX2RlbHRhX2libG9jayA9IE1JTihtaW5fZGVsdGFfaWJsb2NrLCBkZWx0YV9pYmxvY2spOworICAgICAgICBtaW5fZGVsdGFfaWJsb2NrID0gUHlfTUlOKG1pbl9kZWx0YV9pYmxvY2ssIGRlbHRhX2libG9jayk7CiAKICAgICAgICAgaWYgKG9wID49IEhBVkVfQVJHVU1FTlQpIHsKICAgICAgICAgICAgIGFkZHIgKz0gMjsKQEAgLTQ2Niw3ICs0NjIsNyBAQAogZnJhbWVfdHJhdmVyc2UoUHlGcmFtZU9iamVjdCAqZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCiB7CiAgICAgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKnA7Ci0gICAgaW50IGksIHNsb3RzOworICAgIFB5X3NzaXplX3QgaSwgc2xvdHM7CiAKICAgICBQeV9WSVNJVChmLT5mX2JhY2spOwogICAgIFB5X1ZJU0lUKGYtPmZfY29kZSk7CkBAIC00OTMsMTAgKzQ4OSwxMCBAQAogfQogCiBzdGF0aWMgdm9pZAotZnJhbWVfY2xlYXIoUHlGcmFtZU9iamVjdCAqZikKK2ZyYW1lX3RwX2NsZWFyKFB5RnJhbWVPYmplY3QgKmYpCiB7CiAgICAgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKnAsICoqb2xkdG9wOwotICAgIGludCBpLCBzbG90czsKKyAgICBQeV9zc2l6ZV90IGksIHNsb3RzOwogCiAgICAgLyogQmVmb3JlIGFueXRoaW5nIGVsc2UsIG1ha2Ugc3VyZSB0aGF0IHRoaXMgZnJhbWUgaXMgY2xlYXJseSBtYXJrZWQKICAgICAgKiBhcyBiZWluZyBkZWZ1bmN0ISAgRWxzZSwgZS5nLiwgYSBnZW5lcmF0b3IgcmVhY2hhYmxlIGZyb20gdGhpcwpAQCAtNTA1LDYgKzUwMSw3IEBACiAgICAgICovCiAgICAgb2xkdG9wID0gZi0+Zl9zdGFja3RvcDsKICAgICBmLT5mX3N0YWNrdG9wID0gTlVMTDsKKyAgICBmLT5mX2V4ZWN1dGluZyA9IDA7CiAKICAgICBQeV9DTEVBUihmLT5mX2V4Y190eXBlKTsKICAgICBQeV9DTEVBUihmLT5mX2V4Y192YWx1ZSk7CkBAIC01MjUsNiArNTIyLDI1IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitmcmFtZV9jbGVhcihQeUZyYW1lT2JqZWN0ICpmKQoreworICAgIGlmIChmLT5mX2V4ZWN1dGluZykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBjbGVhciBhbiBleGVjdXRpbmcgZnJhbWUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChmLT5mX2dlbikgeworICAgICAgICBfUHlHZW5fRmluYWxpemUoZi0+Zl9nZW4pOworICAgICAgICBhc3NlcnQoZi0+Zl9nZW4gPT0gTlVMTCk7CisgICAgfQorICAgIGZyYW1lX3RwX2NsZWFyKGYpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoY2xlYXJfX2RvY19fLAorIkYuY2xlYXIoKTogY2xlYXIgbW9zdCByZWZlcmVuY2VzIGhlbGQgYnkgdGhlIGZyYW1lIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCiBmcmFtZV9zaXplb2YoUHlGcmFtZU9iamVjdCAqZikKIHsKICAgICBQeV9zc2l6ZV90IHJlcywgZXh0cmFzLCBuY2VsbHMsIG5mcmVlczsKQEAgLTU0Myw2ICs1NTksOCBAQAogIkYuX19zaXplb2ZfXygpIC0+IHNpemUgb2YgRiBpbiBtZW1vcnksIGluIGJ5dGVzIik7CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBmcmFtZV9tZXRob2RzW10gPSB7CisgICAgeyJjbGVhciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pZnJhbWVfY2xlYXIsICAgICAgIE1FVEhfTk9BUkdTLAorICAgICBjbGVhcl9fZG9jX199LAogICAgIHsiX19zaXplb2ZfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKWZyYW1lX3NpemVvZiwgICAgICBNRVRIX05PQVJHUywKICAgICAgc2l6ZW9mX19kb2NfX30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgIC8qIHNlbnRpbmVsICovCkBAIC01NzEsNyArNTg5LDcgQEAKICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsLyogdHBfZmxhZ3MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpZnJhbWVfdHJhdmVyc2UsICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KLSAgICAoaW5xdWlyeSlmcmFtZV9jbGVhciwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgKGlucXVpcnkpZnJhbWVfdHBfY2xlYXIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCkBAIC01ODMsMTMgKzYwMSwxMyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLwogfTsKIAotc3RhdGljIFB5T2JqZWN0ICpidWlsdGluX29iamVjdDsKK19QeV9JREVOVElGSUVSKF9fYnVpbHRpbnNfXyk7CiAKIGludCBfUHlGcmFtZV9Jbml0KCkKIHsKLSAgICBidWlsdGluX29iamVjdCA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2J1aWx0aW5zX18iKTsKLSAgICBpZiAoYnVpbHRpbl9vYmplY3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgLyogQmVmb3JlLCBQeUlkX19fYnVpbHRpbnNfXyB3YXMgYSBzdHJpbmcgY3JlYXRlZCBleHBsaWNpdGx5IGluCisgICAgICAgdGhpcyBmdW5jdGlvbi4gTm93IHRoZXJlIGlzIG5vdGhpbmcgdG8gaW5pdGlhbGl6ZSBhbnltb3JlLCBidXQKKyAgICAgICB0aGUgZnVuY3Rpb24gaXMga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8KICAgICByZXR1cm4gMTsKIH0KIApAQCAtNjEwLDcgKzYyOCw3IEBACiAgICAgfQogI2VuZGlmCiAgICAgaWYgKGJhY2sgPT0gTlVMTCB8fCBiYWNrLT5mX2dsb2JhbHMgIT0gZ2xvYmFscykgewotICAgICAgICBidWlsdGlucyA9IFB5RGljdF9HZXRJdGVtKGdsb2JhbHMsIGJ1aWx0aW5fb2JqZWN0KTsKKyAgICAgICAgYnVpbHRpbnMgPSBfUHlEaWN0X0dldEl0ZW1JZChnbG9iYWxzLCAmUHlJZF9fX2J1aWx0aW5zX18pOwogICAgICAgICBpZiAoYnVpbHRpbnMpIHsKICAgICAgICAgICAgIGlmIChQeU1vZHVsZV9DaGVjayhidWlsdGlucykpIHsKICAgICAgICAgICAgICAgICBidWlsdGlucyA9IFB5TW9kdWxlX0dldERpY3QoYnVpbHRpbnMpOwpAQCAtNzA4LDExICs3MjYsMTIgQEAKICAgICAgICAgUHlfSU5DUkVGKGxvY2Fscyk7CiAgICAgICAgIGYtPmZfbG9jYWxzID0gbG9jYWxzOwogICAgIH0KLSAgICBmLT5mX3RzdGF0ZSA9IHRzdGF0ZTsKIAogICAgIGYtPmZfbGFzdGkgPSAtMTsKICAgICBmLT5mX2xpbmVubyA9IGNvZGUtPmNvX2ZpcnN0bGluZW5vOwogICAgIGYtPmZfaWJsb2NrID0gMDsKKyAgICBmLT5mX2V4ZWN1dGluZyA9IDA7CisgICAgZi0+Zl9nZW4gPSBOVUxMOwogCiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKGYpOwogICAgIHJldHVybiBmOwpAQCAtNzUzLDEyICs3NzIsOSBAQAogICAgSWYgZGVyZWYgaXMgdHJ1ZSwgdGhlbiB0aGUgdmFsdWVzIGJlaW5nIGNvcGllZCBhcmUgY2VsbCB2YXJpYWJsZXMKICAgIGFuZCB0aGUgdmFsdWUgaXMgZXh0cmFjdGVkIGZyb20gdGhlIGNlbGwgdmFyaWFibGUgYmVmb3JlIGJlaW5nIHB1dAogICAgaW4gZGljdC4KLQotICAgRXhjZXB0aW9ucyByYWlzZWQgd2hpbGUgbW9kaWZ5aW5nIHRoZSBkaWN0IGFyZSBzaWxlbnRseSBpZ25vcmVkLAotICAgYmVjYXVzZSB0aGVyZSBpcyBubyBnb29kIHdheSB0byByZXBvcnQgdGhlbS4KICAqLwogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogbWFwX3RvX2RpY3QoUHlPYmplY3QgKm1hcCwgUHlfc3NpemVfdCBubWFwLCBQeU9iamVjdCAqZGljdCwgUHlPYmplY3QgKip2YWx1ZXMsCiAgICAgICAgICAgICBpbnQgZGVyZWYpCiB7CkBAIC03NzUsMTQgKzc5MSwxOSBAQAogICAgICAgICAgICAgdmFsdWUgPSBQeUNlbGxfR0VUKHZhbHVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0RlbEl0ZW0oZGljdCwga2V5KSAhPSAwKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBpZiAoUHlPYmplY3RfRGVsSXRlbShkaWN0LCBrZXkpICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoUHlPYmplY3RfU2V0SXRlbShkaWN0LCBrZXksIHZhbHVlKSAhPSAwKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiAwOwogfQogCiAvKiBDb3B5IHZhbHVlcyBmcm9tIHRoZSAibG9jYWxzIiBkaWN0IGludG8gdGhlIGZhc3QgbG9jYWxzLgpAQCAtODM5LDQyICs4NjAsNDkgQEAKICAgICB9CiB9CiAKLXZvaWQKLVB5RnJhbWVfRmFzdFRvTG9jYWxzKFB5RnJhbWVPYmplY3QgKmYpCitpbnQKK1B5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKFB5RnJhbWVPYmplY3QgKmYpCiB7CiAgICAgLyogTWVyZ2UgZmFzdCBsb2NhbHMgaW50byBmLT5mX2xvY2FscyAqLwogICAgIFB5T2JqZWN0ICpsb2NhbHMsICptYXA7CiAgICAgUHlPYmplY3QgKipmYXN0OwotICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeV9zc2l6ZV90IGo7Ci0gICAgaW50IG5jZWxscywgbmZyZWV2YXJzOwotICAgIGlmIChmID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKKyAgICBQeV9zc2l6ZV90IG5jZWxscywgbmZyZWV2YXJzOworCisgICAgaWYgKGYgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBsb2NhbHMgPSBmLT5mX2xvY2FsczsKICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKICAgICAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsgLyogQ2FuJ3QgcmVwb3J0IGl0IDotKCAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgY28gPSBmLT5mX2NvZGU7CiAgICAgbWFwID0gY28tPmNvX3Zhcm5hbWVzOwotICAgIGlmICghUHlUdXBsZV9DaGVjayhtYXApKQotICAgICAgICByZXR1cm47Ci0gICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CisgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG1hcCkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNvX3Zhcm5hbWVzIG11c3QgYmUgYSB0dXBsZSwgbm90ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobWFwKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgZmFzdCA9IGYtPmZfbG9jYWxzcGx1czsKICAgICBqID0gUHlUdXBsZV9HRVRfU0laRShtYXApOwogICAgIGlmIChqID4gY28tPmNvX25sb2NhbHMpCiAgICAgICAgIGogPSBjby0+Y29fbmxvY2FsczsKLSAgICBpZiAoY28tPmNvX25sb2NhbHMpCi0gICAgICAgIG1hcF90b19kaWN0KG1hcCwgaiwgbG9jYWxzLCBmYXN0LCAwKTsKKyAgICBpZiAoY28tPmNvX25sb2NhbHMpIHsKKyAgICAgICAgaWYgKG1hcF90b19kaWN0KG1hcCwgaiwgbG9jYWxzLCBmYXN0LCAwKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIG5jZWxscyA9IFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKTsKICAgICBuZnJlZXZhcnMgPSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19mcmVldmFycyk7CiAgICAgaWYgKG5jZWxscyB8fCBuZnJlZXZhcnMpIHsKLSAgICAgICAgbWFwX3RvX2RpY3QoY28tPmNvX2NlbGx2YXJzLCBuY2VsbHMsCi0gICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzLCAxKTsKKyAgICAgICAgaWYgKG1hcF90b19kaWN0KGNvLT5jb19jZWxsdmFycywgbmNlbGxzLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzLCBmYXN0ICsgY28tPmNvX25sb2NhbHMsIDEpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCiAgICAgICAgIC8qIElmIHRoZSBuYW1lc3BhY2UgaXMgdW5vcHRpbWl6ZWQsIHRoZW4gb25lIG9mIHRoZQogICAgICAgICAgICBmb2xsb3dpbmcgY2FzZXMgYXBwbGllczoKICAgICAgICAgICAgMS4gSXQgZG9lcyBub3QgY29udGFpbiBmcmVlIHZhcmlhYmxlcywgYmVjYXVzZSBpdApAQCAtODg0LDExICs5MTIsMjQgQEAKICAgICAgICAgICAgaW50byB0aGUgbG9jYWxzIGRpY3QgdXNlZCBieSB0aGUgY2xhc3MuCiAgICAgICAgICovCiAgICAgICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19PUFRJTUlaRUQpIHsKLSAgICAgICAgICAgIG1hcF90b19kaWN0KGNvLT5jb19mcmVldmFycywgbmZyZWV2YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzLCBmYXN0ICsgY28tPmNvX25sb2NhbHMgKyBuY2VsbHMsIDEpOworICAgICAgICAgICAgaWYgKG1hcF90b19kaWN0KGNvLT5jb19mcmVldmFycywgbmZyZWV2YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzICsgbmNlbGxzLCAxKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQotICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK1B5RnJhbWVfRmFzdFRvTG9jYWxzKFB5RnJhbWVPYmplY3QgKmYpCit7CisgICAgaW50IHJlczsKKworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisKKyAgICByZXMgPSBQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihmKTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKIH0KIAogdm9pZApAQCAtOTAwLDcgKzk0MSw3IEBACiAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgIFB5X3NzaXplX3QgajsKLSAgICBpbnQgbmNlbGxzLCBuZnJlZXZhcnM7CisgICAgUHlfc3NpemVfdCBuY2VsbHMsIG5mcmVldmFyczsKICAgICBpZiAoZiA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHM7CkBAIC05NTIsNyArOTkzLDYgQEAKIFB5RnJhbWVfRmluaSh2b2lkKQogewogICAgICh2b2lkKVB5RnJhbWVfQ2xlYXJGcmVlTGlzdCgpOwotICAgIFB5X0NMRUFSKGJ1aWx0aW5fb2JqZWN0KTsKIH0KIAogLyogUHJpbnQgc3VtbWFyeSBpbmZvIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgb3B0aW1pemVkIGFsbG9jYXRvciAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mdW5jb2JqZWN0LmMgYi9PYmplY3RzL2Z1bmNvYmplY3QuYwppbmRleCA0OTQxNWI5Li5iMDQzOTM0IDEwMDY0NAotLS0gYS9PYmplY3RzL2Z1bmNvYmplY3QuYworKysgYi9PYmplY3RzL2Z1bmNvYmplY3QuYwpAQCAtOCw2MCArOCw1OSBAQAogUHlPYmplY3QgKgogUHlGdW5jdGlvbl9OZXdXaXRoUXVhbE5hbWUoUHlPYmplY3QgKmNvZGUsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqcXVhbG5hbWUpCiB7Ci0gICAgUHlGdW5jdGlvbk9iamVjdCAqb3AgPSBQeU9iamVjdF9HQ19OZXcoUHlGdW5jdGlvbk9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlGdW5jdGlvbl9UeXBlKTsKLSAgICBzdGF0aWMgUHlPYmplY3QgKl9fbmFtZV9fID0gMDsKLSAgICBpZiAob3AgIT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqZG9jOwotICAgICAgICBQeU9iamVjdCAqY29uc3RzOwotICAgICAgICBQeU9iamVjdCAqbW9kdWxlOwotICAgICAgICBvcC0+ZnVuY193ZWFrcmVmbGlzdCA9IE5VTEw7Ci0gICAgICAgIFB5X0lOQ1JFRihjb2RlKTsKLSAgICAgICAgb3AtPmZ1bmNfY29kZSA9IGNvZGU7Ci0gICAgICAgIFB5X0lOQ1JFRihnbG9iYWxzKTsKLSAgICAgICAgb3AtPmZ1bmNfZ2xvYmFscyA9IGdsb2JhbHM7Ci0gICAgICAgIG9wLT5mdW5jX25hbWUgPSAoKFB5Q29kZU9iamVjdCAqKWNvZGUpLT5jb19uYW1lOwotICAgICAgICBQeV9JTkNSRUYob3AtPmZ1bmNfbmFtZSk7Ci0gICAgICAgIG9wLT5mdW5jX2RlZmF1bHRzID0gTlVMTDsgLyogTm8gZGVmYXVsdCBhcmd1bWVudHMgKi8KLSAgICAgICAgb3AtPmZ1bmNfa3dkZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGtleXdvcmQgb25seSBkZWZhdWx0cyAqLwotICAgICAgICBvcC0+ZnVuY19jbG9zdXJlID0gTlVMTDsKLSAgICAgICAgY29uc3RzID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fY29uc3RzOwotICAgICAgICBpZiAoUHlUdXBsZV9TaXplKGNvbnN0cykgPj0gMSkgewotICAgICAgICAgICAgZG9jID0gUHlUdXBsZV9HZXRJdGVtKGNvbnN0cywgMCk7Ci0gICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhkb2MpKQotICAgICAgICAgICAgICAgIGRvYyA9IFB5X05vbmU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKGRvYyk7Ci0gICAgICAgIG9wLT5mdW5jX2RvYyA9IGRvYzsKLSAgICAgICAgb3AtPmZ1bmNfZGljdCA9IE5VTEw7Ci0gICAgICAgIG9wLT5mdW5jX21vZHVsZSA9IE5VTEw7Ci0gICAgICAgIG9wLT5mdW5jX2Fubm90YXRpb25zID0gTlVMTDsKKyAgICBQeUZ1bmN0aW9uT2JqZWN0ICpvcDsKKyAgICBQeU9iamVjdCAqZG9jLCAqY29uc3RzLCAqbW9kdWxlOworICAgIHN0YXRpYyBQeU9iamVjdCAqX19uYW1lX18gPSBOVUxMOwogCi0gICAgICAgIC8qIF9fbW9kdWxlX186IElmIG1vZHVsZSBuYW1lIGlzIGluIGdsb2JhbHMsIHVzZSBpdC4KLSAgICAgICAgICAgT3RoZXJ3aXNlLCB1c2UgTm9uZS4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKCFfX25hbWVfXykgewotICAgICAgICAgICAgX19uYW1lX18gPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKLSAgICAgICAgICAgIGlmICghX19uYW1lX18pIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYob3ApOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1vZHVsZSA9IFB5RGljdF9HZXRJdGVtKGdsb2JhbHMsIF9fbmFtZV9fKTsKLSAgICAgICAgaWYgKG1vZHVsZSkgewotICAgICAgICAgICAgUHlfSU5DUkVGKG1vZHVsZSk7Ci0gICAgICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBtb2R1bGU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHF1YWxuYW1lKQotICAgICAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBxdWFsbmFtZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBvcC0+ZnVuY19uYW1lOwotICAgICAgICBQeV9JTkNSRUYob3AtPmZ1bmNfcXVhbG5hbWUpOworICAgIGlmIChfX25hbWVfXyA9PSBOVUxMKSB7CisgICAgICAgIF9fbmFtZV9fID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7CisgICAgICAgIGlmIChfX25hbWVfXyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgb3AgPSBQeU9iamVjdF9HQ19OZXcoUHlGdW5jdGlvbk9iamVjdCwgJlB5RnVuY3Rpb25fVHlwZSk7CisgICAgaWYgKG9wID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgb3AtPmZ1bmNfd2Vha3JlZmxpc3QgPSBOVUxMOworICAgIFB5X0lOQ1JFRihjb2RlKTsKKyAgICBvcC0+ZnVuY19jb2RlID0gY29kZTsKKyAgICBQeV9JTkNSRUYoZ2xvYmFscyk7CisgICAgb3AtPmZ1bmNfZ2xvYmFscyA9IGdsb2JhbHM7CisgICAgb3AtPmZ1bmNfbmFtZSA9ICgoUHlDb2RlT2JqZWN0ICopY29kZSktPmNvX25hbWU7CisgICAgUHlfSU5DUkVGKG9wLT5mdW5jX25hbWUpOworICAgIG9wLT5mdW5jX2RlZmF1bHRzID0gTlVMTDsgLyogTm8gZGVmYXVsdCBhcmd1bWVudHMgKi8KKyAgICBvcC0+ZnVuY19rd2RlZmF1bHRzID0gTlVMTDsgLyogTm8ga2V5d29yZCBvbmx5IGRlZmF1bHRzICovCisgICAgb3AtPmZ1bmNfY2xvc3VyZSA9IE5VTEw7CisKKyAgICBjb25zdHMgPSAoKFB5Q29kZU9iamVjdCAqKWNvZGUpLT5jb19jb25zdHM7CisgICAgaWYgKFB5VHVwbGVfU2l6ZShjb25zdHMpID49IDEpIHsKKyAgICAgICAgZG9jID0gUHlUdXBsZV9HZXRJdGVtKGNvbnN0cywgMCk7CisgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGRvYykpCisgICAgICAgICAgICBkb2MgPSBQeV9Ob25lOwogICAgIH0KICAgICBlbHNlCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBkb2MgPSBQeV9Ob25lOworICAgIFB5X0lOQ1JFRihkb2MpOworICAgIG9wLT5mdW5jX2RvYyA9IGRvYzsKKworICAgIG9wLT5mdW5jX2RpY3QgPSBOVUxMOworICAgIG9wLT5mdW5jX21vZHVsZSA9IE5VTEw7CisgICAgb3AtPmZ1bmNfYW5ub3RhdGlvbnMgPSBOVUxMOworCisgICAgLyogX19tb2R1bGVfXzogSWYgbW9kdWxlIG5hbWUgaXMgaW4gZ2xvYmFscywgdXNlIGl0LgorICAgICAgIE90aGVyd2lzZSwgdXNlIE5vbmUuICovCisgICAgbW9kdWxlID0gUHlEaWN0X0dldEl0ZW0oZ2xvYmFscywgX19uYW1lX18pOworICAgIGlmIChtb2R1bGUpIHsKKyAgICAgICAgUHlfSU5DUkVGKG1vZHVsZSk7CisgICAgICAgIG9wLT5mdW5jX21vZHVsZSA9IG1vZHVsZTsKKyAgICB9CisgICAgaWYgKHF1YWxuYW1lKQorICAgICAgICBvcC0+ZnVuY19xdWFsbmFtZSA9IHF1YWxuYW1lOworICAgIGVsc2UKKyAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBvcC0+ZnVuY19uYW1lOworICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19xdWFsbmFtZSk7CisKICAgICBfUHlPYmplY3RfR0NfVFJBQ0sob3ApOwogICAgIHJldHVybiAoUHlPYmplY3QgKilvcDsKIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvZ2Vub2JqZWN0LmMgYi9PYmplY3RzL2dlbm9iamVjdC5jCmluZGV4IDJlNzRiOGMuLjA4ZDMwYmYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZ2Vub2JqZWN0LmMKKysrIGIvT2JqZWN0cy9nZW5vYmplY3QuYwpAQCAtMTUsNiArMTUsMzEgQEAKICAgICByZXR1cm4gMDsKIH0KIAordm9pZAorX1B5R2VuX0ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5R2VuT2JqZWN0ICpnZW4gPSAoUHlHZW5PYmplY3QgKilzZWxmOworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKworICAgIGlmIChnZW4tPmdpX2ZyYW1lID09IE5VTEwgfHwgZ2VuLT5naV9mcmFtZS0+Zl9zdGFja3RvcCA9PSBOVUxMKQorICAgICAgICAvKiBHZW5lcmF0b3IgaXNuJ3QgcGF1c2VkLCBzbyBubyBuZWVkIHRvIGNsb3NlICovCisgICAgICAgIHJldHVybjsKKworICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCisgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CisKKyAgICByZXMgPSBnZW5fY2xvc2UoZ2VuLCBOVUxMKTsKKworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHNlbGYpOworICAgIGVsc2UKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisKKyAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCisgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKK30KKwogc3RhdGljIHZvaWQKIGdlbl9kZWFsbG9jKFB5R2VuT2JqZWN0ICpnZW4pCiB7CkBAIC0yNywxMiArNTIsOCBAQAogCiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKHNlbGYpOwogCi0gICAgaWYgKGdlbi0+Z2lfZnJhbWUgIT0gTlVMTCAmJiBnZW4tPmdpX2ZyYW1lLT5mX3N0YWNrdG9wICE9IE5VTEwpIHsKLSAgICAgICAgLyogR2VuZXJhdG9yIGlzIHBhdXNlZCwgc28gd2UgbmVlZCB0byBjbG9zZSAqLwotICAgICAgICBQeV9UWVBFKGdlbiktPnRwX2RlbChzZWxmKTsKLSAgICAgICAgaWYgKHNlbGYtPm9iX3JlZmNudCA+IDApCi0gICAgICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgLyogcmVzdXJyZWN0ZWQuICA6KCAqLwotICAgIH0KKyAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKHNlbGYpKQorICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgLyogcmVzdXJyZWN0ZWQuICA6KCAqLwogCiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgUHlfQ0xFQVIoZ2VuLT5naV9mcmFtZSk7CkBAIC00MCw3ICs2MSw2IEBACiAgICAgUHlPYmplY3RfR0NfRGVsKGdlbik7CiB9CiAKLQogc3RhdGljIFB5T2JqZWN0ICoKIGdlbl9zZW5kX2V4KFB5R2VuT2JqZWN0ICpnZW4sIFB5T2JqZWN0ICphcmcsIGludCBleGMpCiB7CkBAIC03Niw3ICs5Niw2IEBACiAKICAgICAvKiBHZW5lcmF0b3JzIGFsd2F5cyByZXR1cm4gdG8gdGhlaXIgbW9zdCByZWNlbnQgY2FsbGVyLCBub3QKICAgICAgKiBuZWNlc3NhcmlseSB0aGVpciBjcmVhdG9yLiAqLwotICAgIGYtPmZfdHN0YXRlID0gdHN0YXRlOwogICAgIFB5X1hJTkNSRUYodHN0YXRlLT5mcmFtZSk7CiAgICAgYXNzZXJ0KGYtPmZfYmFjayA9PSBOVUxMKTsKICAgICBmLT5mX2JhY2sgPSB0c3RhdGUtPmZyYW1lOwpAQCAtOTAsOCArMTA5LDYgQEAKICAgICAgKiBjeWNsZS4gKi8KICAgICBhc3NlcnQoZi0+Zl9iYWNrID09IHRzdGF0ZS0+ZnJhbWUpOwogICAgIFB5X0NMRUFSKGYtPmZfYmFjayk7Ci0gICAgLyogQ2xlYXIgdGhlIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgdGhyZWFkIHN0YXRlICovCi0gICAgZi0+Zl90c3RhdGUgPSBOVUxMOwogCiAgICAgLyogSWYgdGhlIGdlbmVyYXRvciBqdXN0IHJldHVybmVkIChhcyBvcHBvc2VkIHRvIHlpZWxkaW5nKSwgc2lnbmFsCiAgICAgICogdGhhdCB0aGUgZ2VuZXJhdG9yIGlzIGV4aGF1c3RlZC4gKi8KQEAgLTEyMyw2ICsxNDAsNyBAQAogICAgICAgICBQeV9YREVDUkVGKHQpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgICAgICBQeV9YREVDUkVGKHRiKTsKKyAgICAgICAgZ2VuLT5naV9mcmFtZS0+Zl9nZW4gPSBOVUxMOwogICAgICAgICBnZW4tPmdpX2ZyYW1lID0gTlVMTDsKICAgICAgICAgUHlfREVDUkVGKGYpOwogICAgIH0KQEAgLTIyNSw2OCArMjQzLDYgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQKLWdlbl9kZWwoUHlPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKnJlczsKLSAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwotICAgIFB5R2VuT2JqZWN0ICpnZW4gPSAoUHlHZW5PYmplY3QgKilzZWxmOwotCi0gICAgaWYgKGdlbi0+Z2lfZnJhbWUgPT0gTlVMTCB8fCBnZW4tPmdpX2ZyYW1lLT5mX3N0YWNrdG9wID09IE5VTEwpCi0gICAgICAgIC8qIEdlbmVyYXRvciBpc24ndCBwYXVzZWQsIHNvIG5vIG5lZWQgdG8gY2xvc2UgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgLyogVGVtcG9yYXJpbHkgcmVzdXJyZWN0IHRoZSBvYmplY3QuICovCi0gICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA9PSAwKTsKLSAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOwotCi0gICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KLSAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKLQotICAgIHJlcyA9IGdlbl9jbG9zZShnZW4sIE5VTEwpOwotCi0gICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoc2VsZik7Ci0gICAgZWxzZQotICAgICAgICBQeV9ERUNSRUYocmVzKTsKLQotICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KLSAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOwotCi0gICAgLyogVW5kbyB0aGUgdGVtcG9yYXJ5IHJlc3VycmVjdGlvbjsgY2FuJ3QgdXNlIERFQ1JFRiBoZXJlLCBpdCB3b3VsZAotICAgICAqIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwuCi0gICAgICovCi0gICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA+IDApOwotICAgIGlmICgtLXNlbGYtPm9iX3JlZmNudCA9PSAwKQotICAgICAgICByZXR1cm47IC8qIHRoaXMgaXMgdGhlIG5vcm1hbCBwYXRoIG91dCAqLwotCi0gICAgLyogY2xvc2UoKSByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKLSAgICAgKiBuZXZlciBoYXBwZW5lZC4KLSAgICAgKi8KLSAgICB7Ci0gICAgICAgIFB5X3NzaXplX3QgcmVmY250ID0gc2VsZi0+b2JfcmVmY250OwotICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOwotICAgICAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7Ci0gICAgfQotICAgIGFzc2VydChQeVR5cGVfSVNfR0MoUHlfVFlQRShzZWxmKSkgJiYKLSAgICAgICAgICAgX1B5X0FTX0dDKHNlbGYpLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKLQotICAgIC8qIElmIFB5X1JFRl9ERUJVRywgX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgX1B5X1JlZlRvdGFsLCBzbwotICAgICAqIHdlIG5lZWQgdG8gdW5kbyB0aGF0LiAqLwotICAgIF9QeV9ERUNfUkVGVE9UQUw7Ci0gICAgLyogSWYgUHlfVFJBQ0VfUkVGUywgX1B5X05ld1JlZmVyZW5jZSByZS1hZGRlZCBzZWxmIHRvIHRoZSBvYmplY3QKLSAgICAgKiBjaGFpbiwgc28gbm8gbW9yZSB0byBkbyB0aGVyZS4KLSAgICAgKiBJZiBDT1VOVF9BTExPQ1MsIHRoZSBvcmlnaW5hbCBkZWNyZWYgYnVtcGVkIHRwX2ZyZWVzLCBhbmQKLSAgICAgKiBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCB0cF9hbGxvY3M6ICBib3RoIG9mIHRob3NlIG5lZWQgdG8gYmUKLSAgICAgKiB1bmRvbmUuCi0gICAgICovCi0jaWZkZWYgQ09VTlRfQUxMT0NTCi0gICAgLS0oUHlfVFlQRShzZWxmKS0+dHBfZnJlZXMpOwotICAgIC0tKFB5X1RZUEUoc2VsZiktPnRwX2FsbG9jcyk7Ci0jZW5kaWYKLX0KLQotCiAKIFB5RG9jX1NUUlZBUih0aHJvd19kb2MsCiAidGhyb3codHlwWyx2YWxbLHRiXV0pIC0+IHJhaXNlIGV4Y2VwdGlvbiBpbiBnZW5lcmF0b3IsXG5cCkBAIC01MjAsNyArNDc2LDggQEAKICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLC8qIHRwX2ZsYWdzICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwKKyAgICAgICAgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWdlbl90cmF2ZXJzZSwgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtNTQ3LDcgKzUwNCw5IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KLSAgICBnZW5fZGVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIF9QeUdlbl9GaW5hbGl6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAKIFB5T2JqZWN0ICoKQEAgLTU1OSw2ICs1MTgsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZ2VuLT5naV9mcmFtZSA9IGY7CisgICAgZi0+Zl9nZW4gPSAoUHlPYmplY3QgKikgZ2VuOwogICAgIFB5X0lOQ1JFRihmLT5mX2NvZGUpOwogICAgIGdlbi0+Z2lfY29kZSA9IChQeU9iamVjdCAqKShmLT5mX2NvZGUpOwogICAgIGdlbi0+Z2lfcnVubmluZyA9IDA7CmRpZmYgLS1naXQgYS9PYmplY3RzL2l0ZXJvYmplY3QuYyBiL09iamVjdHMvaXRlcm9iamVjdC5jCmluZGV4IDNjZmJlYWYuLjc3ZmY4MTAgMTAwNjQ0Ci0tLSBhL09iamVjdHMvaXRlcm9iamVjdC5jCisrKyBiL09iamVjdHMvaXRlcm9iamVjdC5jCkBAIC00LDcgKzQsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIGxvbmcgICAgICBpdF9pbmRleDsKKyAgICBQeV9zc2l6ZV90IGl0X2luZGV4OwogICAgIFB5T2JqZWN0ICppdF9zZXE7IC8qIFNldCB0byBOVUxMIHdoZW4gaXRlcmF0b3IgaXMgZXhoYXVzdGVkICovCiB9IHNlcWl0ZXJvYmplY3Q7CiAKQEAgLTc2LDkgKzc2LDE0IEBACiAgICAgUHlfc3NpemVfdCBzZXFzaXplLCBsZW47CiAKICAgICBpZiAoaXQtPml0X3NlcSkgewotICAgICAgICBzZXFzaXplID0gUHlTZXF1ZW5jZV9TaXplKGl0LT5pdF9zZXEpOwotICAgICAgICBpZiAoc2Vxc2l6ZSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0xlbihpdC0+aXRfc2VxKSkgeworICAgICAgICAgICAgc2Vxc2l6ZSA9IFB5U2VxdWVuY2VfU2l6ZShpdC0+aXRfc2VxKTsKKyAgICAgICAgICAgIGlmIChzZXFzaXplID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOworICAgICAgICB9CiAgICAgICAgIGxlbiA9IHNlcXNpemUgLSBpdC0+aXRfaW5kZXg7CiAgICAgICAgIGlmIChsZW4gPj0gMCkKICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QobGVuKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvbGlzdG9iamVjdC5jIGIvT2JqZWN0cy9saXN0b2JqZWN0LmMKaW5kZXggNmUwZDA5NC4uNWI3NTk2OCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9saXN0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9saXN0b2JqZWN0LmMKQEAgLTIxMywxMSArMjEzLDExIEBACiB9CiAKIGludAotUHlMaXN0X1NldEl0ZW0ocmVnaXN0ZXIgUHlPYmplY3QgKm9wLCByZWdpc3RlciBQeV9zc2l6ZV90IGksCi0gICAgICAgICAgICAgICByZWdpc3RlciBQeU9iamVjdCAqbmV3aXRlbSkKK1B5TGlzdF9TZXRJdGVtKFB5T2JqZWN0ICpvcCwgUHlfc3NpemVfdCBpLAorICAgICAgICAgICAgICAgUHlPYmplY3QgKm5ld2l0ZW0pCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9sZGl0ZW07Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipwOworICAgIFB5T2JqZWN0ICpvbGRpdGVtOworICAgIFB5T2JqZWN0ICoqcDsKICAgICBpZiAoIVB5TGlzdF9DaGVjayhvcCkpIHsKICAgICAgICAgUHlfWERFQ1JFRihuZXdpdGVtKTsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC0zMzgsNTcgKzMzOCw1NyBAQAogbGlzdF9yZXByKFB5TGlzdE9iamVjdCAqdikKIHsKICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKnMgPSBOVUxMOwotICAgIF9QeUFjY3UgYWNjOwotICAgIHN0YXRpYyBQeU9iamVjdCAqc2VwID0gTlVMTDsKKyAgICBQeU9iamVjdCAqczsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKIAogICAgIGlmIChQeV9TSVpFKHYpID09IDApIHsKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJbXSIpOwogICAgIH0KIAotICAgIGlmIChzZXAgPT0gTlVMTCkgewotICAgICAgICBzZXAgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLCAiKTsKLSAgICAgICAgaWYgKHNlcCA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCiAgICAgaSA9IFB5X1JlcHJFbnRlcigoUHlPYmplY3QqKXYpOwogICAgIGlmIChpICE9IDApIHsKICAgICAgICAgcmV0dXJuIGkgPiAwID8gUHlVbmljb2RlX0Zyb21TdHJpbmcoIlsuLi5dIikgOiBOVUxMOwogICAgIH0KIAotICAgIGlmIChfUHlBY2N1X0luaXQoJmFjYykpCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAxOworICAgIC8qICJbIiArICIxIiArICIsIDIiICogKGxlbiAtIDEpICsgIl0iICovCisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSAxICsgMSArICgyICsgMSkgKiAoUHlfU0laRSh2KSAtIDEpICsgMTsKIAotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiWyIpOwotICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAnWycpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBQeV9DTEVBUihzKTsKIAogICAgIC8qIERvIHJlcHIoKSBvbiBlYWNoIGVsZW1lbnQuICBOb3RlIHRoYXQgdGhpcyBtYXkgbXV0YXRlIHRoZSBsaXN0LAogICAgICAgIHNvIG11c3QgcmVmZXRjaCB0aGUgbGlzdCBzaXplIG9uIGVhY2ggaXRlcmF0aW9uLiAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHYpOyArK2kpIHsKKyAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsICIsICIsIDIpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisKICAgICAgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIGdldHRpbmcgdGhlIHJlcHIgb2YgYSBsaXN0IikpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzID0gUHlPYmplY3RfUmVwcih2LT5vYl9pdGVtW2ldKTsKICAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7Ci0gICAgICAgIGlmIChpID4gMCAmJiBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgc2VwKSkKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHMpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHMpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgUHlfQ0xFQVIocyk7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHMpOwogICAgIH0KLSAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIl0iKTsKLSAgICBpZiAocyA9PSBOVUxMIHx8IF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzKSkKKworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAnXScpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBQeV9DTEVBUihzKTsKIAogICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKil2KTsKLSAgICByZXR1cm4gX1B5QWNjdV9GaW5pc2goJmFjYyk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiBlcnJvcjoKLSAgICBfUHlBY2N1X0Rlc3Ryb3koJmFjYyk7Ci0gICAgUHlfWERFQ1JFRihzKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXYpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtNjQ0LDkgKzY0NCwxNCBAQAogICAgIG1lbWNweShyZWN5Y2xlLCAmaXRlbVtpbG93XSwgcyk7CiAKICAgICBpZiAoZCA8IDApIHsgLyogRGVsZXRlIC1kIGl0ZW1zICovCi0gICAgICAgIG1lbW1vdmUoJml0ZW1baWhpZ2grZF0sICZpdGVtW2loaWdoXSwKLSAgICAgICAgICAgIChQeV9TSVpFKGEpIC0gaWhpZ2gpKnNpemVvZihQeU9iamVjdCAqKSk7Ci0gICAgICAgIGxpc3RfcmVzaXplKGEsIFB5X1NJWkUoYSkgKyBkKTsKKyAgICAgICAgUHlfc3NpemVfdCB0YWlsOworICAgICAgICB0YWlsID0gKFB5X1NJWkUoYSkgLSBpaGlnaCkgKiBzaXplb2YoUHlPYmplY3QgKik7CisgICAgICAgIG1lbW1vdmUoJml0ZW1baWhpZ2grZF0sICZpdGVtW2loaWdoXSwgdGFpbCk7CisgICAgICAgIGlmIChsaXN0X3Jlc2l6ZShhLCBQeV9TSVpFKGEpICsgZCkgPCAwKSB7CisgICAgICAgICAgICBtZW1tb3ZlKCZpdGVtW2loaWdoXSwgJml0ZW1baWhpZ2grZF0sIHRhaWwpOworICAgICAgICAgICAgbWVtY3B5KCZpdGVtW2lsb3ddLCByZWN5Y2xlLCBzKTsKKyAgICAgICAgICAgIGdvdG8gRXJyb3I7CisgICAgICAgIH0KICAgICAgICAgaXRlbSA9IGEtPm9iX2l0ZW07CiAgICAgfQogICAgIGVsc2UgaWYgKGQgPiAwKSB7IC8qIEluc2VydCBkIGl0ZW1zICovCkBAIC04MjYsNyArODMxLDcgQEAKICAgICBpdGVybmV4dCA9ICppdC0+b2JfdHlwZS0+dHBfaXRlcm5leHQ7CiAKICAgICAvKiBHdWVzcyBhIHJlc3VsdCBsaXN0IHNpemUuICovCi0gICAgbiA9IF9QeU9iamVjdF9MZW5ndGhIaW50KGIsIDgpOworICAgIG4gPSBQeU9iamVjdF9MZW5ndGhIaW50KGIsIDgpOwogICAgIGlmIChuID09IC0xKSB7CiAgICAgICAgIFB5X0RFQ1JFRihpdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODcxLDggKzg3NiwxMCBAQAogICAgIH0KIAogICAgIC8qIEN1dCBiYWNrIHJlc3VsdCBsaXN0IGlmIGluaXRpYWwgZ3Vlc3Mgd2FzIHRvbyBsYXJnZS4gKi8KLSAgICBpZiAoUHlfU0laRShzZWxmKSA8IHNlbGYtPmFsbG9jYXRlZCkKLSAgICAgICAgbGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSk7ICAvKiBzaHJpbmtpbmcgY2FuJ3QgZmFpbCAqLworICAgIGlmIChQeV9TSVpFKHNlbGYpIDwgc2VsZi0+YWxsb2NhdGVkKSB7CisgICAgICAgIGlmIChsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KIAogICAgIFB5X0RFQ1JFRihpdCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC05MjUsMTcgKzkzMiwxNyBAQAogICAgIHYgPSBzZWxmLT5vYl9pdGVtW2ldOwogICAgIGlmIChpID09IFB5X1NJWkUoc2VsZikgLSAxKSB7CiAgICAgICAgIHN0YXR1cyA9IGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikgLSAxKTsKLSAgICAgICAgYXNzZXJ0KHN0YXR1cyA+PSAwKTsKLSAgICAgICAgcmV0dXJuIHY7IC8qIGFuZCB2IG5vdyBvd25zIHRoZSByZWZlcmVuY2UgdGhlIGxpc3QgaGFkICovCisgICAgICAgIGlmIChzdGF0dXMgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiB2OyAvKiBhbmQgdiBub3cgb3ducyB0aGUgcmVmZXJlbmNlIHRoZSBsaXN0IGhhZCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfSU5DUkVGKHYpOwogICAgIHN0YXR1cyA9IGxpc3RfYXNzX3NsaWNlKHNlbGYsIGksIGkrMSwgKFB5T2JqZWN0ICopTlVMTCk7Ci0gICAgYXNzZXJ0KHN0YXR1cyA+PSAwKTsKLSAgICAvKiBVc2Ugc3RhdHVzLCBzbyB0aGF0IGluIGEgcmVsZWFzZSBidWlsZCBjb21waWxlcnMgZG9uJ3QKLSAgICAgKiBjb21wbGFpbiBhYm91dCB0aGUgdW51c2VkIG5hbWUuCi0gICAgICovCi0gICAgKHZvaWQpIHN0YXR1czsKLQorICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiB2OwogfQogCkBAIC0xMDUxLDkgKzEwNTgsOSBAQAogc3RhdGljIGludAogYmluYXJ5c29ydChzb3J0c2xpY2UgbG8sIFB5T2JqZWN0ICoqaGksIFB5T2JqZWN0ICoqc3RhcnQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBrOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqbCwgKipwLCAqKnI7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnBpdm90OworICAgIFB5X3NzaXplX3QgazsKKyAgICBQeU9iamVjdCAqKmwsICoqcCwgKipyOworICAgIFB5T2JqZWN0ICpwaXZvdDsKIAogICAgIGFzc2VydChsby5rZXlzIDw9IHN0YXJ0ICYmIHN0YXJ0IDw9IGhpKTsKICAgICAvKiBhc3NlcnQgW2xvLCBzdGFydCkgaXMgc29ydGVkICovCkBAIC0yNDc2LDYgKzI0ODMsNyBAQAogICAgICAgICAgICAgUHlPYmplY3QgKipnYXJiYWdlOwogICAgICAgICAgICAgc2l6ZV90IGN1cjsKICAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgIGludCByZXM7CiAKICAgICAgICAgICAgIGlmIChzbGljZWxlbmd0aCA8PSAwKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMjUyNiwxNCArMjUzNCwxNCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC09IHNsaWNlbGVuZ3RoOwotICAgICAgICAgICAgbGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSk7CisgICAgICAgICAgICByZXMgPSBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpKTsKIAogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNsaWNlbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZ2FyYmFnZVtpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeU1lbV9GUkVFKGdhcmJhZ2UpOwogCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvKiBhc3NpZ24gc2xpY2UgKi8KQEAgLTI2NjAsNyArMjY2OCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgbG9uZyBpdF9pbmRleDsKKyAgICBQeV9zc2l6ZV90IGl0X2luZGV4OwogICAgIFB5TGlzdE9iamVjdCAqaXRfc2VxOyAvKiBTZXQgdG8gTlVMTCB3aGVuIGl0ZXJhdG9yIGlzIGV4aGF1c3RlZCAqLwogfSBsaXN0aXRlcm9iamVjdDsKIApAQCAtMjc5Nyw3ICsyODA1LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBsaXN0aXRlcl9zZXRzdGF0ZShsaXN0aXRlcm9iamVjdCAqaXQsIFB5T2JqZWN0ICpzdGF0ZSkKIHsKLSAgICBsb25nIGluZGV4ID0gUHlMb25nX0FzTG9uZyhzdGF0ZSk7CisgICAgUHlfc3NpemVfdCBpbmRleCA9IFB5TG9uZ19Bc1NzaXplX3Qoc3RhdGUpOwogICAgIGlmIChpbmRleCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoaXQtPml0X3NlcSAhPSBOVUxMKSB7CkBAIC0yOTU4LDcgKzI5NjYsNyBAQAogICAgIGlmIChmb3J3YXJkKSB7CiAgICAgICAgIGxpc3RpdGVyb2JqZWN0ICppdCA9IChsaXN0aXRlcm9iamVjdCAqKV9pdDsKICAgICAgICAgaWYgKGl0LT5pdF9zZXEpCi0gICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKWwiLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAorICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTyluIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5pdF9zZXEsIGl0LT5pdF9pbmRleCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbGlzdHJldml0ZXJvYmplY3QgKml0ID0gKGxpc3RyZXZpdGVyb2JqZWN0ICopX2l0OwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9sb25nb2JqZWN0LmMgYi9PYmplY3RzL2xvbmdvYmplY3QuYwppbmRleCA0YWUyMmVmLi45NDExMjE2IDEwMDY0NAotLS0gYS9PYmplY3RzL2xvbmdvYmplY3QuYworKysgYi9PYmplY3RzL2xvbmdvYmplY3QuYwpAQCAtMTcsNyArMTcsOCBAQAogI2VuZGlmCiAKIC8qIGNvbnZlcnQgYSBQeUxvbmcgb2Ygc2l6ZSAxLCAwIG9yIC0xIHRvIGFuIHNkaWdpdCAqLwotI2RlZmluZSBNRURJVU1fVkFMVUUoeCkgKFB5X1NJWkUoeCkgPCAwID8gLShzZGlnaXQpKHgpLT5vYl9kaWdpdFswXSA6ICAgXAorI2RlZmluZSBNRURJVU1fVkFMVUUoeCkgKGFzc2VydCgtMSA8PSBQeV9TSVpFKHgpICYmIFB5X1NJWkUoeCkgPD0gMSksICAgXAorICAgICAgICAgUHlfU0laRSh4KSA8IDAgPyAtKHNkaWdpdCkoeCktPm9iX2RpZ2l0WzBdIDogICBcCiAgICAgICAgICAgICAgKFB5X1NJWkUoeCkgPT0gMCA/IChzZGlnaXQpMCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgIChzZGlnaXQpKHgpLT5vYl9kaWdpdFswXSkpCiAjZGVmaW5lIEFCUyh4KSAoKHgpIDwgMCA/IC0oeCkgOiAoeCkpCkBAIC03MCwxMSArNzEsMjEgQEAKIAogLyogSWYgYSBmcmVzaGx5LWFsbG9jYXRlZCBpbnQgaXMgYWxyZWFkeSBzaGFyZWQsIGl0IG11c3QKICAgIGJlIGEgc21hbGwgaW50ZWdlciwgc28gbmVnYXRpbmcgaXQgbXVzdCBnbyB0byBQeUxvbmdfRnJvbUxvbmcgKi8KLSNkZWZpbmUgTkVHQVRFKHgpIFwKLSAgICBkbyBpZiAoUHlfUkVGQ05UKHgpID09IDEpIFB5X1NJWkUoeCkgPSAtUHlfU0laRSh4KTsgIFwKLSAgICAgICBlbHNlIHsgUHlPYmplY3QqIHRtcD1QeUxvbmdfRnJvbUxvbmcoLU1FRElVTV9WQUxVRSh4KSk7ICBcCi0gICAgICAgICAgIFB5X0RFQ1JFRih4KTsgKHgpID0gKFB5TG9uZ09iamVjdCopdG1wOyB9ICAgICAgICAgICAgICAgXAotICAgIHdoaWxlKDApCitQeV9MT0NBTF9JTkxJTkUodm9pZCkKK19QeUxvbmdfTmVnYXRlKFB5TG9uZ09iamVjdCAqKnhfcCkKK3sKKyAgICBQeUxvbmdPYmplY3QgKng7CisKKyAgICB4ID0gKFB5TG9uZ09iamVjdCAqKSp4X3A7CisgICAgaWYgKFB5X1JFRkNOVCh4KSA9PSAxKSB7CisgICAgICAgIFB5X1NJWkUoeCkgPSAtUHlfU0laRSh4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICp4X3AgPSAoUHlMb25nT2JqZWN0ICopUHlMb25nX0Zyb21Mb25nKC1NRURJVU1fVkFMVUUoeCkpOworICAgIFB5X0RFQ1JFRih4KTsKK30KKwogLyogRm9yIGludCBtdWx0aXBsaWNhdGlvbiwgdXNlIHRoZSBPKE4qKjIpIHNjaG9vbCBhbGdvcml0aG0gdW5sZXNzCiAgKiBib3RoIG9wZXJhbmRzIGNvbnRhaW4gbW9yZSB0aGFuIEtBUkFUU1VCQV9DVVRPRkYgZGlnaXRzICh0aGlzCiAgKiBiZWluZyBhbiBpbnRlcm5hbCBQeXRob24gaW50IGRpZ2l0LCBpbiBiYXNlIEJBU0UpLgpAQCAtODksMTEgKzEwMCw2IEBACiAgKi8KICNkZWZpbmUgRklWRUFSWV9DVVRPRkYgOAogCi0jdW5kZWYgTUlOCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQotI2RlZmluZSBNSU4oeCwgeSkgKCh4KSA+ICh5KSA/ICh5KSA6ICh4KSkKLQogI2RlZmluZSBTSUdDSEVDSyhQeVRyeUJsb2NrKSAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpIFB5VHJ5QmxvY2sgICAgXApAQCAtMTA0LDcgKzExMCw3IEBACiAgICBvZiB0aGUgYWxnb3JpdGhtcyB1c2VkLCB0aGlzIGNvdWxkIHNhdmUgYXQgbW9zdCBiZSBvbmUgd29yZCBhbnl3YXkuICovCiAKIHN0YXRpYyBQeUxvbmdPYmplY3QgKgotbG9uZ19ub3JtYWxpemUocmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2KQorbG9uZ19ub3JtYWxpemUoUHlMb25nT2JqZWN0ICp2KQogewogICAgIFB5X3NzaXplX3QgaiA9IEFCUyhQeV9TSVpFKHYpKTsKICAgICBQeV9zc2l6ZV90IGkgPSBqOwpAQCAtMTUzLDYgKzE1OSwxNSBAQAogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIC8qIElzc3VlICMxNzU3Njogd2FybiBpZiAncmVzdWx0JyBub3Qgb2YgZXhhY3QgdHlwZSBpbnQuICovCisgICAgaWYgKFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCAxLAorICAgICAgICAgICAgIl9faW50X18gcmV0dXJuZWQgbm9uLWludCAodHlwZSAlLjIwMHMpLiAgIgorICAgICAgICAgICAgIlRoZSBhYmlsaXR5IHRvIHJldHVybiBhbiBpbnN0YW5jZSBvZiBhIHN0cmljdCBzdWJjbGFzcyBvZiBpbnQgIgorICAgICAgICAgICAgImlzIGRlcHJlY2F0ZWQsIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFB5dGhvbi4iLAorICAgICAgICAgICAgcmVzdWx0LT5vYl90eXBlLT50cF9uYW1lKSkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiAoUHlMb25nT2JqZWN0ICopcmVzdWx0OwogfQogCkBAIC0zNzUsNyArMzkwLDcgQEAKIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqdnYsIGludCAqb3ZlcmZsb3cpCiB7CiAgICAgLyogVGhpcyB2ZXJzaW9uIGJ5IFRpbSBQZXRlcnMgKi8KLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeCwgcHJldjsKICAgICBsb25nIHJlczsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC00ODcsNyArNTAyLDcgQEAKIAogUHlfc3NpemVfdAogUHlMb25nX0FzU3NpemVfdChQeU9iamVjdCAqdnYpIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHNpemVfdCB4LCBwcmV2OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKQEAgLTU0Myw3ICs1NTgsNyBAQAogdW5zaWduZWQgbG9uZwogUHlMb25nX0FzVW5zaWduZWRMb25nKFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeCwgcHJldjsKICAgICBQeV9zc2l6ZV90IGk7CiAKQEAgLTU3Myw3ICs1ODgsNyBAQAogICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSB8IHYtPm9iX2RpZ2l0W2ldOwogICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIGludCB0b28gbGFyZ2UgdG8gY29udmVydCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBDIHVuc2lnbmVkIGxvbmciKTsKICAgICAgICAgICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgLTE7CiAgICAgICAgIH0KQEAgLTU4Nyw3ICs2MDIsNyBAQAogc2l6ZV90CiBQeUxvbmdfQXNTaXplX3QoUHlPYmplY3QgKnZ2KQogewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgc2l6ZV90IHgsIHByZXY7CiAgICAgUHlfc3NpemVfdCBpOwogCkBAIC02MzAsNyArNjQ1LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCiBfUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqdnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBsb25nIHg7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBzaWduOwpAQCAtNjU4LDcgKzY3Myw3IEBACiB9CiAKIHVuc2lnbmVkIGxvbmcKLVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2socmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqb3ApCiB7CiAgICAgUHlMb25nT2JqZWN0ICpsbzsKICAgICB1bnNpZ25lZCBsb25nIHZhbDsKQEAgLTk3Myw5ICs5ODgsNiBAQAogUHlMb25nX0Zyb21Wb2lkUHRyKHZvaWQgKnApCiB7CiAjaWYgU0laRU9GX1ZPSURfUCA8PSBTSVpFT0ZfTE9ORwotICAgIC8qIHNwZWNpYWwtY2FzZSBudWxsIHBvaW50ZXIgKi8KLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKShQeV91aW50cHRyX3QpcCk7CiAjZWxzZQogCkBAIC05ODUsOSArOTk3LDYgQEAKICNpZiBTSVpFT0ZfTE9OR19MT05HIDwgU0laRU9GX1ZPSURfUAogIyAgIGVycm9yICJQeUxvbmdfRnJvbVZvaWRQdHI6IHNpemVvZihQWV9MT05HX0xPTkcpIDwgc2l6ZW9mKHZvaWQqKSIKICNlbmRpZgotICAgIC8qIHNwZWNpYWwtY2FzZSBudWxsIHBvaW50ZXIgKi8KLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKShQeV91aW50cHRyX3QpcCk7CiAjZW5kaWYgLyogU0laRU9GX1ZPSURfUCA8PSBTSVpFT0ZfTE9ORyAqLwogCkBAIC0xMDMzLDcgKzEwNDIsNiBAQAogICogcmV3cml0dGVuIHRvIHVzZSB0aGUgbmV3ZXIgUHlMb25nX3tBcyxGcm9tfUJ5dGVBcnJheSBBUEkuCiAgKi8KIAotI2RlZmluZSBJU19MSVRUTEVfRU5ESUFOIChpbnQpKih1bnNpZ25lZCBjaGFyKikmb25lCiAjZGVmaW5lIFBZX0FCU19MTE9OR19NSU4gKDAtKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylQWV9MTE9OR19NSU4pCiAKIC8qIENyZWF0ZSBhIG5ldyBpbnQgb2JqZWN0IGZyb20gYSBDIFBZX0xPTkdfTE9ORyBpbnQuICovCkBAIC0xMTg2LDcgKzExOTQsNiBAQAogewogICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICBQWV9MT05HX0xPTkcgYnl0ZXM7Ci0gICAgaW50IG9uZSA9IDE7CiAgICAgaW50IHJlczsKICAgICBpbnQgZG9fZGVjcmVmID0gMDsgLyogaWYgbmJfaW50IHdhcyBjYWxsZWQgKi8KIApAQCAtMTIxOCw3ICsxMjI1LDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdiwgKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgUFlfTElUVExFX0VORElBTiwgMSk7CiAgICAgfQogICAgIGlmIChkb19kZWNyZWYpIHsKICAgICAgICAgUHlfREVDUkVGKHYpOwpAQCAtMTIzOSw3ICsxMjQ2LDYgQEAKIHsKICAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIGJ5dGVzOwotICAgIGludCBvbmUgPSAxOwogICAgIGludCByZXM7CiAKICAgICBpZiAodnYgPT0gTlVMTCkgewpAQCAtMTI1OCw3ICsxMjY0LDcgQEAKICAgICB9CiAKICAgICByZXMgPSBfUHlMb25nX0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3QgKil2diwgKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfTE9OR19MT05HLCBJU19MSVRUTEVfRU5ESUFOLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIFBZX0xJVFRMRV9FTkRJQU4sIDApOwogCiAgICAgLyogUGxhbiA5IGNhbid0IGhhbmRsZSBQWV9MT05HX0xPTkcgaW4gPyA6IGV4cHJlc3Npb25zICovCiAgICAgaWYgKHJlcyA8IDApCkBAIC0xMjczLDcgKzEyNzksNyBAQAogc3RhdGljIHVuc2lnbmVkIFBZX0xPTkdfTE9ORwogX1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyB4OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKQEAgLTEzMDEsNyArMTMwNyw3IEBACiB9CiAKIHVuc2lnbmVkIFBZX0xPTkdfTE9ORwotUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2socmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2soUHlPYmplY3QgKm9wKQogewogICAgIFB5TG9uZ09iamVjdCAqbG87CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIHZhbDsKQEAgLTEzMjMsNyArMTMyOSw2IEBACiAgICAgUHlfREVDUkVGKGxvKTsKICAgICByZXR1cm4gdmFsOwogfQotI3VuZGVmIElTX0xJVFRMRV9FTkRJQU4KIAogLyogR2V0IGEgQyBsb25nIGxvbmcgaW50IGZyb20gYW4gaW50IG9iamVjdCBvciBhbnkgb2JqZWN0IHRoYXQgaGFzIGFuCiAgICBfX2ludF9fIG1ldGhvZC4KQEAgLTEzMzksNyArMTM0NCw3IEBACiBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICp2diwgaW50ICpvdmVyZmxvdykKIHsKICAgICAvKiBUaGlzIHZlcnNpb24gYnkgVGltIFBldGVycyAqLwotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIHgsIHByZXY7CiAgICAgUFlfTE9OR19MT05HIHJlczsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC0xNjA0LDcgKzE2MDksNyBAQAogICAgICovCiAgICAgaWYgKHNpemVfYSA+IFBZX1NTSVpFX1RfTUFYIC8gUHlMb25nX1NISUZUKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImxvbmcgaXMgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLyogdGhlIGV4cHJlc3Npb24gc2l6ZV9hICogUHlMb25nX1NISUZUIGlzIG5vdyBzYWZlIGZyb20gb3ZlcmZsb3cgKi8KQEAgLTE2NzQsNyArMTY3OSw2IEBACiAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcCA9IChUWVBFKilQeVVuaWNvZGVfREFUQShzdHIpICsgc3RybGVuOyAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICpwID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAvKiBwb3V0WzBdIHRocm91Z2ggcG91dFtzaXplLTJdIGNvbnRyaWJ1dGUgZXhhY3RseSAgICAgICAgICAgIFwKICAgICAgICAgICAgX1B5TG9uZ19ERUNJTUFMX1NISUZUIGRpZ2l0cyBlYWNoICovICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGZvciAoaT0wOyBpIDwgc2l6ZSAtIDE7IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTc0Nyw3ICsxNzUxLDcgQEAKIGxvbmdfZm9ybWF0X2JpbmFyeShQeU9iamVjdCAqYWEsIGludCBiYXNlLCBpbnQgYWx0ZXJuYXRlLAogICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKmEgPSAoUHlMb25nT2JqZWN0ICopYWE7CisgICAgUHlMb25nT2JqZWN0ICphID0gKFB5TG9uZ09iamVjdCAqKWFhOwogICAgIFB5T2JqZWN0ICp2OwogICAgIFB5X3NzaXplX3Qgc3o7CiAgICAgUHlfc3NpemVfdCBzaXplX2E7CkBAIC0xNzg4LDcgKzE3OTIsNyBAQAogICAgICAgICAvKiBFbnN1cmUgb3ZlcmZsb3cgZG9lc24ndCBvY2N1ciBkdXJpbmcgY29tcHV0YXRpb24gb2Ygc3ouICovCiAgICAgICAgIGlmIChzaXplX2EgPiAoUFlfU1NJWkVfVF9NQVggLSAzKSAvIFB5TG9uZ19TSElGVCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCBpcyB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgc2l6ZV9hX2luX2JpdHMgPSAoc2l6ZV9hIC0gMSkgKiBQeUxvbmdfU0hJRlQgKwpAQCAtMTk0NCwxMCArMTk0OCwxMCBAQAogICogc3RyaW5nIGNoYXJhY3RlcnMuCiAgKi8KIHN0YXRpYyBQeUxvbmdPYmplY3QgKgotbG9uZ19mcm9tX2JpbmFyeV9iYXNlKGNoYXIgKipzdHIsIGludCBiYXNlKQorbG9uZ19mcm9tX2JpbmFyeV9iYXNlKGNvbnN0IGNoYXIgKipzdHIsIGludCBiYXNlKQogewotICAgIGNoYXIgKnAgPSAqc3RyOwotICAgIGNoYXIgKnN0YXJ0ID0gcDsKKyAgICBjb25zdCBjaGFyICpwID0gKnN0cjsKKyAgICBjb25zdCBjaGFyICpzdGFydCA9IHA7CiAgICAgaW50IGJpdHNfcGVyX2NoYXI7CiAgICAgUHlfc3NpemVfdCBuOwogICAgIFB5TG9uZ09iamVjdCAqejsKQEAgLTIwMTIsMTAgKzIwMTYsMTAgQEAKICAqIElmIHVuc3VjY2Vzc2Z1bCwgTlVMTCB3aWxsIGJlIHJldHVybmVkLgogICovCiBQeU9iamVjdCAqCi1QeUxvbmdfRnJvbVN0cmluZyhjaGFyICpzdHIsIGNoYXIgKipwZW5kLCBpbnQgYmFzZSkKK1B5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQogewogICAgIGludCBzaWduID0gMSwgZXJyb3JfaWZfbm9uemVybyA9IDA7Ci0gICAgY2hhciAqc3RhcnQsICpvcmlnX3N0ciA9IHN0cjsKKyAgICBjb25zdCBjaGFyICpzdGFydCwgKm9yaWdfc3RyID0gc3RyOwogICAgIFB5TG9uZ09iamVjdCAqeiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnN0cm9iajsKICAgICBQeV9zc2l6ZV90IHNsZW47CkBAIC0yMTQ0LDEzICsyMTQ4LDEzIEBACiBqdXN0IDEgZGlnaXQgYXQgdGhlIHN0YXJ0LCBzbyB0aGF0IHRoZSBjb3B5aW5nIGNvZGUgd2FzIGV4ZXJjaXNlZCBmb3IgZXZlcnkKIGRpZ2l0IGJleW9uZCB0aGUgZmlyc3QuCiAqKiovCi0gICAgICAgIHJlZ2lzdGVyIHR3b2RpZ2l0cyBjOyAgICAgICAgICAgLyogY3VycmVudCBpbnB1dCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgdHdvZGlnaXRzIGM7ICAgICAgICAgICAvKiBjdXJyZW50IGlucHV0IGNoYXJhY3RlciAqLwogICAgICAgICBQeV9zc2l6ZV90IHNpemVfejsKICAgICAgICAgaW50IGk7CiAgICAgICAgIGludCBjb252d2lkdGg7CiAgICAgICAgIHR3b2RpZ2l0cyBjb252bXVsdG1heCwgY29udm11bHQ7CiAgICAgICAgIGRpZ2l0ICpweiwgKnB6c3RvcDsKLSAgICAgICAgY2hhciogc2NhbjsKKyAgICAgICAgY29uc3QgY2hhciogc2NhbjsKIAogICAgICAgICBzdGF0aWMgZG91YmxlIGxvZ19iYXNlX0JBU0VbMzddID0gezAuMGUwLH07CiAgICAgICAgIHN0YXRpYyBpbnQgY29udndpZHRoX2Jhc2VbMzddID0gezAsfTsKQEAgLTIyNzgsMTkgKzIyODIsMTkgQEAKICAgICBpZiAoeiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAocGVuZCAhPSBOVUxMKQotICAgICAgICAqcGVuZCA9IHN0cjsKKyAgICAgICAgKnBlbmQgPSAoY2hhciAqKXN0cjsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHo7CiAKICAgb25FcnJvcjoKICAgICBpZiAocGVuZCAhPSBOVUxMKQotICAgICAgICAqcGVuZCA9IHN0cjsKKyAgICAgICAgKnBlbmQgPSAoY2hhciAqKXN0cjsKICAgICBQeV9YREVDUkVGKHopOwogICAgIHNsZW4gPSBzdHJsZW4ob3JpZ19zdHIpIDwgMjAwID8gc3RybGVuKG9yaWdfc3RyKSA6IDIwMDsKICAgICBzdHJvYmogPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUob3JpZ19zdHIsIHNsZW4pOwogICAgIGlmIChzdHJvYmogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJVIiLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICUuMjAwUiIsCiAgICAgICAgICAgICAgICAgIGJhc2UsIHN0cm9iaik7CiAgICAgUHlfREVDUkVGKHN0cm9iaik7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzE0LDcgKzIzMTgsNyBAQAogICAgIHN0cm9iaiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgUHlfTUlOKGxlbiwgMjAwKSk7CiAgICAgaWYgKHN0cm9iaiAhPSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICUuMjAwUiIsCiAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBzdHJvYmopOwogICAgICAgICBQeV9ERUNSRUYoc3Ryb2JqKTsKICAgICB9CkBAIC0yMzM1LDcgKzIzMzksNyBAQAogUHlPYmplY3QgKgogUHlMb25nX0Zyb21Vbmljb2RlT2JqZWN0KFB5T2JqZWN0ICp1LCBpbnQgYmFzZSkKIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0LCAqYXNjaWlkaWcsICpzdHJvYmo7CisgICAgUHlPYmplY3QgKnJlc3VsdCwgKmFzY2lpZGlnOwogICAgIGNoYXIgKmJ1ZmZlciwgKmVuZCA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBidWZsZW47CiAKQEAgLTIzNTcsMTMgKzIzNjEsOSBAQAogICAgICAgICBQeV9ERUNSRUYoYXNjaWlkaWcpOwogICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CiAgICAgfQotICAgIHN0cm9iaiA9IFB5U2VxdWVuY2VfR2V0U2xpY2UodSwgMCwgMjAwKTsKLSAgICBpZiAoc3Ryb2JqICE9IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICVSIiwKLSAgICAgICAgICAgICAgICAgICAgIGJhc2UsIHN0cm9iaik7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHJvYmopOwotICAgIH0KKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlLjIwMFIiLAorICAgICAgICAgICAgICAgICBiYXNlLCB1KTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjQxNywxMCArMjQxNywyMSBAQAogICAgICAgIFRoZSBxdW90aWVudCB6IGhhcyB0aGUgc2lnbiBvZiBhKmI7CiAgICAgICAgdGhlIHJlbWFpbmRlciByIGhhcyB0aGUgc2lnbiBvZiBhLAogICAgICAgIHNvIGEgPSBiKnogKyByLiAqLwotICAgIGlmICgoUHlfU0laRShhKSA8IDApICE9IChQeV9TSVpFKGIpIDwgMCkpCi0gICAgICAgIE5FR0FURSh6KTsKLSAgICBpZiAoUHlfU0laRShhKSA8IDAgJiYgUHlfU0laRSgqcHJlbSkgIT0gMCkKLSAgICAgICAgTkVHQVRFKCpwcmVtKTsKKyAgICBpZiAoKFB5X1NJWkUoYSkgPCAwKSAhPSAoUHlfU0laRShiKSA8IDApKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZ6KTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoKnByZW0pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGlmIChQeV9TSVpFKGEpIDwgMCAmJiBQeV9TSVpFKCpwcmVtKSAhPSAwKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKHByZW0pOworICAgICAgICBpZiAoKnByZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHopOworICAgICAgICAgICAgUHlfQ0xFQVIoKnByZW0pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQogICAgICpwZGl2ID0gbWF5YmVfc21hbGxfbG9uZyh6KTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTI2OTYsNyArMjcwNyw3IEBACiAgICAgeCA9IF9QeUxvbmdfRnJleHAoKFB5TG9uZ09iamVjdCAqKXYsICZleHBvbmVudCk7CiAgICAgaWYgKCh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgfHwgZXhwb25lbnQgPiBEQkxfTUFYX0VYUCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb25nIGludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBmbG9hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBmbG9hdCIpOwogICAgICAgICByZXR1cm4gLTEuMDsKICAgICB9CiAgICAgcmV0dXJuIGxkZXhwKHgsIChpbnQpZXhwb25lbnQpOwpAQCAtMjkxNiw4ICsyOTI3LDExIEBACiAgICAgICAgIGJvcnJvdyAmPSAxOyAvKiBLZWVwIG9ubHkgb25lIHNpZ24gYml0ICovCiAgICAgfQogICAgIGFzc2VydChib3Jyb3cgPT0gMCk7Ci0gICAgaWYgKHNpZ24gPCAwKQotICAgICAgICBORUdBVEUoeik7CisgICAgaWYgKHNpZ24gPCAwKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZ6KTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gbG9uZ19ub3JtYWxpemUoeik7CiB9CiAKQEAgLTMwODQsNyArMzA5OCw3IEBACiAgICAgUHlfc3NpemVfdCBzaXplX2xvLCBzaXplX2hpOwogICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZV9uID0gQUJTKFB5X1NJWkUobikpOwogCi0gICAgc2l6ZV9sbyA9IE1JTihzaXplX24sIHNpemUpOworICAgIHNpemVfbG8gPSBQeV9NSU4oc2l6ZV9uLCBzaXplKTsKICAgICBzaXplX2hpID0gc2l6ZV9uIC0gc2l6ZV9sbzsKIAogICAgIGlmICgoaGkgPSBfUHlMb25nX05ldyhzaXplX2hpKSkgPT0gTlVMTCkKQEAgLTMzNTUsNyArMzM2OSw3IEBACiAgICAgbmJkb25lID0gMDsKICAgICB3aGlsZSAoYnNpemUgPiAwKSB7CiAgICAgICAgIFB5TG9uZ09iamVjdCAqcHJvZHVjdDsKLSAgICAgICAgY29uc3QgUHlfc3NpemVfdCBuYnRvdXNlID0gTUlOKGJzaXplLCBhc2l6ZSk7CisgICAgICAgIGNvbnN0IFB5X3NzaXplX3QgbmJ0b3VzZSA9IFB5X01JTihic2l6ZSwgYXNpemUpOwogCiAgICAgICAgIC8qIE11bHRpcGx5IHRoZSBuZXh0IHNsaWNlIG9mIGIgYnkgYS4gKi8KICAgICAgICAgbWVtY3B5KGJzbGljZS0+b2JfZGlnaXQsIGItPm9iX2RpZ2l0ICsgbmJkb25lLApAQCAtMzQwOCw4ICszNDIyLDExIEBACiAKICAgICB6ID0ga19tdWwoYSwgYik7CiAgICAgLyogTmVnYXRlIGlmIGV4YWN0bHkgb25lIG9mIHRoZSBpbnB1dHMgaXMgbmVnYXRpdmUuICovCi0gICAgaWYgKCgoUHlfU0laRShhKSBeIFB5X1NJWkUoYikpIDwgMCkgJiYgeikKLSAgICAgICAgTkVHQVRFKHopOworICAgIGlmICgoKFB5X1NJWkUoYSkgXiBQeV9TSVpFKGIpKSA8IDApICYmIHopIHsKKyAgICAgICAgX1B5TG9uZ19OZWdhdGUoJnopOworICAgICAgICBpZiAoeiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiAoUHlPYmplY3QgKil6OwogfQogCkBAIC0zNjQ2LDcgKzM2NjMsNyBAQAogICAgICAgICBnb3RvIHVuZGVyZmxvd19vcl96ZXJvOwogCiAgICAgLyogQ2hvb3NlIHZhbHVlIGZvciBzaGlmdDsgc2VlIGNvbW1lbnRzIGZvciBzdGVwIDEgYWJvdmUuICovCi0gICAgc2hpZnQgPSBNQVgoZGlmZiwgREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHIC0gMjsKKyAgICBzaGlmdCA9IFB5X01BWChkaWZmLCBEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUcgLSAyOwogCiAgICAgaW5leGFjdCA9IDA7CiAKQEAgLTM3MTcsNyArMzczNCw3IEBACiAgICAgeF9iaXRzID0gKHhfc2l6ZS0xKSpQeUxvbmdfU0hJRlQrYml0c19pbl9kaWdpdCh4LT5vYl9kaWdpdFt4X3NpemUtMV0pOwogCiAgICAgLyogVGhlIG51bWJlciBvZiBleHRyYSBiaXRzIHRoYXQgaGF2ZSB0byBiZSByb3VuZGVkIGF3YXkuICovCi0gICAgZXh0cmFfYml0cyA9IE1BWCh4X2JpdHMsIERCTF9NSU5fRVhQIC0gc2hpZnQpIC0gREJMX01BTlRfRElHOworICAgIGV4dHJhX2JpdHMgPSBQeV9NQVgoeF9iaXRzLCBEQkxfTUlOX0VYUCAtIHNoaWZ0KSAtIERCTF9NQU5UX0RJRzsKICAgICBhc3NlcnQoZXh0cmFfYml0cyA9PSAyIHx8IGV4dHJhX2JpdHMgPT0gMyk7CiAKICAgICAvKiBSb3VuZCBieSBkaXJlY3RseSBtb2RpZnlpbmcgdGhlIGxvdyBkaWdpdCBvZiB4LiAqLwpAQCAtMzg1Niw3ICszODczLDkgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihjKTsKICAgICAgICAgICAgIGMgPSB0ZW1wOwogICAgICAgICAgICAgdGVtcCA9IE5VTEw7Ci0gICAgICAgICAgICBORUdBVEUoYyk7CisgICAgICAgICAgICBfUHlMb25nX05lZ2F0ZSgmYyk7CisgICAgICAgICAgICBpZiAoYyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBpZiBtb2R1bHVzID09IDE6CkBAIC0zOTYyLDEwICszOTgxLDcgQEAKICAgICBnb3RvIERvbmU7CiAKICAgRXJyb3I6Ci0gICAgaWYgKHogIT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoeik7Ci0gICAgICAgIHogPSBOVUxMOwotICAgIH0KKyAgICBQeV9DTEVBUih6KTsKICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgRG9uZToKICAgICBpZiAoUHlfU0laRShiKSA+IEZJVkVBUllfQ1VUT0ZGKSB7CkBAIC00MDk1LDEwICs0MTExLDEwIEBACiAKICAgICBzaGlmdGJ5ID0gUHlMb25nX0FzU3NpemVfdCgoUHlPYmplY3QgKiliKTsKICAgICBpZiAoc2hpZnRieSA9PSAtMUwgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBsc2hpZnRfZXJyb3I7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaGlmdGJ5IDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm5lZ2F0aXZlIHNoaWZ0IGNvdW50Iik7Ci0gICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgLyogd29yZHNoaWZ0LCByZW1zaGlmdCA9IGRpdm1vZChzaGlmdGJ5LCBQeUxvbmdfU0hJRlQpICovCiAgICAgd29yZHNoaWZ0ID0gc2hpZnRieSAvIFB5TG9uZ19TSElGVDsKQEAgLTQxMTAsOSArNDEyNiwxMSBAQAogICAgICAgICArK25ld3NpemU7CiAgICAgeiA9IF9QeUxvbmdfTmV3KG5ld3NpemUpOwogICAgIGlmICh6ID09IE5VTEwpCi0gICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOwotICAgIGlmIChQeV9TSVpFKGEpIDwgMCkKLSAgICAgICAgTkVHQVRFKHopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlfU0laRShhKSA8IDApIHsKKyAgICAgICAgYXNzZXJ0KFB5X1JFRkNOVCh6KSA9PSAxKTsKKyAgICAgICAgUHlfU0laRSh6KSA9IC1QeV9TSVpFKHopOworICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgd29yZHNoaWZ0OyBpKyspCiAgICAgICAgIHotPm9iX2RpZ2l0W2ldID0gMDsKICAgICBhY2N1bSA9IDA7CkBAIC00MTI2LDcgKzQxNDQsNiBAQAogICAgIGVsc2UKICAgICAgICAgYXNzZXJ0KCFhY2N1bSk7CiAgICAgeiA9IGxvbmdfbm9ybWFsaXplKHopOwotICBsc2hpZnRfZXJyb3I6CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBtYXliZV9zbWFsbF9sb25nKHopOwogfQogCkBAIC00MTUxLDcgKzQxNjgsNyBAQAogCiBzdGF0aWMgUHlPYmplY3QgKgogbG9uZ19iaXR3aXNlKFB5TG9uZ09iamVjdCAqYSwKLSAgICAgICAgICAgICBpbnQgb3AsICAvKiAnJicsICd8JywgJ14nICovCisgICAgICAgICAgICAgY2hhciBvcCwgIC8qICcmJywgJ3wnLCAnXicgKi8KICAgICAgICAgICAgICBQeUxvbmdPYmplY3QgKmIpCiB7CiAgICAgaW50IG5lZ2EsIG5lZ2IsIG5lZ3o7CkBAIC00MzI2LDggKzQzNDMsNyBAQAogbG9uZ19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlPYmplY3QgKm9iYXNlID0gTlVMTCwgKnggPSBOVUxMOwotICAgIGxvbmcgYmFzZTsKLSAgICBpbnQgb3ZlcmZsb3c7CisgICAgUHlfc3NpemVfdCBiYXNlOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsieCIsICJiYXNlIiwgMH07CiAKICAgICBpZiAodHlwZSAhPSAmUHlMb25nX1R5cGUpCkBAIC00MzQ2LDEwICs0MzYyLDEwIEBACiAgICAgaWYgKG9iYXNlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeU51bWJlcl9Mb25nKHgpOwogCi0gICAgYmFzZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvYmFzZSwgJm92ZXJmbG93KTsKKyAgICBiYXNlID0gUHlOdW1iZXJfQXNTc2l6ZV90KG9iYXNlLCBOVUxMKTsKICAgICBpZiAoYmFzZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAob3ZlcmZsb3cgfHwgKGJhc2UgIT0gMCAmJiBiYXNlIDwgMikgfHwgYmFzZSA+IDM2KSB7CisgICAgaWYgKChiYXNlICE9IDAgJiYgYmFzZSA8IDIpIHx8IGJhc2UgPiAzNikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQoKSBiYXNlIG11c3QgYmUgPj0gMiBhbmQgPD0gMzYiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00NDMwLDcgKzQ0NDYsNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpfX2Zvcm1hdF9fIiwgJmZvcm1hdF9zcGVjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOwogICAgIHJldCA9IF9QeUxvbmdfRm9ybWF0QWR2YW5jZWRXcml0ZXIoCiAgICAgICAgICZ3cml0ZXIsCiAgICAgICAgIHNlbGYsCkBAIC01MDgwLDE1ICs1MDk2LDE3IEBACiAgICAgICAgICAgICBhc3NlcnQodi0+b2JfZGlnaXRbMF0gPT0gYWJzKGl2YWwpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5T2JqZWN0X0lOSVQodiwgJlB5TG9uZ19UeXBlKTsKKyAgICAgICAgICAgICh2b2lkKVB5T2JqZWN0X0lOSVQodiwgJlB5TG9uZ19UeXBlKTsKICAgICAgICAgfQogICAgICAgICBQeV9TSVpFKHYpID0gc2l6ZTsKICAgICAgICAgdi0+b2JfZGlnaXRbMF0gPSBhYnMoaXZhbCk7CiAgICAgfQogI2VuZGlmCiAgICAgLyogaW5pdGlhbGl6ZSBpbnRfaW5mbyAqLwotICAgIGlmIChJbnRfSW5mb1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZJbnRfSW5mb1R5cGUsICZpbnRfaW5mb19kZXNjKTsKKyAgICBpZiAoSW50X0luZm9UeXBlLnRwX25hbWUgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJkludF9JbmZvVHlwZSwgJmludF9pbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KIAogICAgIHJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9tZW1vcnlvYmplY3QuYyBiL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKaW5kZXggMTg5YWY4OC4uY2I2NDRiOCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9tZW1vcnlvYmplY3QuYworKysgYi9PYmplY3RzL21lbW9yeW9iamVjdC5jCkBAIC0yNDAyLDcgKzI0MDIsNyBAQAogCiAvKiBBcyBzZXF1ZW5jZSAqLwogc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIG1lbW9yeV9hc19zZXF1ZW5jZSA9IHsKLSAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLworICAgICAgICAobGVuZnVuYyltZW1vcnlfbGVuZ3RoLCAgICAgICAgICAgLyogc3FfbGVuZ3RoICovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb25jYXQgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX3JlcGVhdCAqLwogICAgICAgICAoc3NpemVhcmdmdW5jKW1lbW9yeV9pdGVtLCAgICAgICAgLyogc3FfaXRlbSAqLwpAQCAtMjc0Miw3ICsyNzQyLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIENhbid0IGZhaWwgKi8KLSAgICAgICAgc2VsZi0+aGFzaCA9IF9QeV9IYXNoQnl0ZXMoKHVuc2lnbmVkIGNoYXIgKiltZW0sIHZpZXctPmxlbik7CisgICAgICAgIHNlbGYtPmhhc2ggPSBfUHlfSGFzaEJ5dGVzKG1lbSwgdmlldy0+bGVuKTsKIAogICAgICAgICBpZiAobWVtICE9IHZpZXctPmJ1ZikKICAgICAgICAgICAgIFB5TWVtX0ZyZWUobWVtKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvbWV0aG9kb2JqZWN0LmMgYi9PYmplY3RzL21ldGhvZG9iamVjdC5jCmluZGV4IGYwNjg1ZGQuLmYyNjE2ZDQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9tZXRob2RvYmplY3QuYwpAQCAtMTMsNiArMTMsMTUgQEAKICNkZWZpbmUgUHlDRnVuY3Rpb25fTUFYRlJFRUxJU1QgMjU2CiAjZW5kaWYKIAorLyogdW5kZWZpbmUgbWFjcm8gdHJhbXBvbGluZSB0byBQeUNGdW5jdGlvbl9OZXdFeCAqLworI3VuZGVmIFB5Q0Z1bmN0aW9uX05ldworCitQeU9iamVjdCAqCitQeUNGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKm1sLCBQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgobWwsIHNlbGYsIE5VTEwpOworfQorCiBQeU9iamVjdCAqCiBQeUNGdW5jdGlvbl9OZXdFeChQeU1ldGhvZERlZiAqbWwsIFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbW9kdWxlKQogewpAQCAtMjAsNyArMjksNyBAQAogICAgIG9wID0gZnJlZV9saXN0OwogICAgIGlmIChvcCAhPSBOVUxMKSB7CiAgICAgICAgIGZyZWVfbGlzdCA9IChQeUNGdW5jdGlvbk9iamVjdCAqKShvcC0+bV9zZWxmKTsKLSAgICAgICAgUHlPYmplY3RfSU5JVChvcCwgJlB5Q0Z1bmN0aW9uX1R5cGUpOworICAgICAgICAodm9pZClQeU9iamVjdF9JTklUKG9wLCAmUHlDRnVuY3Rpb25fVHlwZSk7CiAgICAgICAgIG51bWZyZWUtLTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC03MCwyMyArNzksMzQgQEAKIFB5T2JqZWN0ICoKIFB5Q0Z1bmN0aW9uX0NhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcsIFB5T2JqZWN0ICprdykKIHsKKyNkZWZpbmUgQ0hFQ0tfUkVTVUxUKHJlcykgYXNzZXJ0KHJlcyAhPSBOVUxMIHx8IFB5RXJyX09jY3VycmVkKCkpCisKICAgICBQeUNGdW5jdGlvbk9iamVjdCogZiA9IChQeUNGdW5jdGlvbk9iamVjdCopZnVuYzsKICAgICBQeUNGdW5jdGlvbiBtZXRoID0gUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKGZ1bmMpOwogICAgIFB5T2JqZWN0ICpzZWxmID0gUHlDRnVuY3Rpb25fR0VUX1NFTEYoZnVuYyk7CisgICAgUHlPYmplY3QgKnJlczsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAKICAgICBzd2l0Y2ggKFB5Q0Z1bmN0aW9uX0dFVF9GTEFHUyhmdW5jKSAmIH4oTUVUSF9DTEFTUyB8IE1FVEhfU1RBVElDIHwgTUVUSF9DT0VYSVNUKSkgewogICAgIGNhc2UgTUVUSF9WQVJBUkdTOgotICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAoKm1ldGgpKHNlbGYsIGFyZyk7CisgICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSB7CisgICAgICAgICAgICByZXMgPSAoKm1ldGgpKHNlbGYsIGFyZyk7CisgICAgICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTOgotICAgICAgICByZXR1cm4gKCooUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpbWV0aCkoc2VsZiwgYXJnLCBrdyk7CisgICAgICAgIHJlcyA9ICgqKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKW1ldGgpKHNlbGYsIGFyZywga3cpOworICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKICAgICBjYXNlIE1FVEhfTk9BUkdTOgogICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkgewogICAgICAgICAgICAgc2l6ZSA9IFB5VHVwbGVfR0VUX1NJWkUoYXJnKTsKLSAgICAgICAgICAgIGlmIChzaXplID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuICgqbWV0aCkoc2VsZiwgTlVMTCk7CisgICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmVzID0gKCptZXRoKShzZWxmLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAiJS4yMDBzKCkgdGFrZXMgbm8gYXJndW1lbnRzICglemQgZ2l2ZW4pIiwKICAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lLCBzaXplKTsKQEAgLTk2LDggKzExNiwxMSBAQAogICAgIGNhc2UgTUVUSF9POgogICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkgewogICAgICAgICAgICAgc2l6ZSA9IFB5VHVwbGVfR0VUX1NJWkUoYXJnKTsKLSAgICAgICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuICgqbWV0aCkoc2VsZiwgUHlUdXBsZV9HRVRfSVRFTShhcmcsIDApKTsKKyAgICAgICAgICAgIGlmIChzaXplID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXMgPSAoKm1ldGgpKHNlbGYsIFB5VHVwbGVfR0VUX0lURU0oYXJnLCAwKSk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfUkVTVUxUKHJlcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50ICglemQgZ2l2ZW4pIiwKICAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lLCBzaXplKTsKQEAgLTExNCw2ICsxMzcsOCBAQAogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICIlLjIwMHMoKSB0YWtlcyBubyBrZXl3b3JkIGFyZ3VtZW50cyIsCiAgICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUpOwogICAgIHJldHVybiBOVUxMOworCisjdW5kZWYgQ0hFQ0tfUkVTVUxUCiB9CiAKIC8qIE1ldGhvZHMgKHRoZSBzdGFuZGFyZCBidWlsdC1pbiBtZXRob2RzLCB0aGF0IGlzKSAqLwpAQCAtMTM1LDE0ICsxNjAsMzUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK21ldGhfcmVkdWNlKFB5Q0Z1bmN0aW9uT2JqZWN0ICptKQoreworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBQeU9iamVjdCAqZ2V0YXR0cjsKKyAgICBfUHlfSURFTlRJRklFUihnZXRhdHRyKTsKKworICAgIGlmIChtLT5tX3NlbGYgPT0gTlVMTCB8fCBQeU1vZHVsZV9DaGVjayhtLT5tX3NlbGYpKQorICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcobS0+bV9tbC0+bWxfbmFtZSk7CisKKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT3MpIiwgZ2V0YXR0ciwgbS0+bV9zZWxmLCBtLT5tX21sLT5tbF9uYW1lKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG1ldGhfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbiltZXRoX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK21ldGhfZ2V0X190ZXh0X3NpZ25hdHVyZV9fKFB5Q0Z1bmN0aW9uT2JqZWN0ICptLCB2b2lkICpjbG9zdXJlKQoreworICAgIHJldHVybiBfUHlUeXBlX0dldFRleHRTaWduYXR1cmVGcm9tSW50ZXJuYWxEb2MobS0+bV9tbC0+bWxfbmFtZSwgbS0+bV9tbC0+bWxfZG9jKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIG1ldGhfZ2V0X19kb2NfXyhQeUNGdW5jdGlvbk9iamVjdCAqbSwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBjb25zdCBjaGFyICpkb2MgPSBtLT5tX21sLT5tbF9kb2M7Ci0KLSAgICBpZiAoZG9jICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhkb2MpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICByZXR1cm4gX1B5VHlwZV9HZXREb2NGcm9tSW50ZXJuYWxEb2MobS0+bV9tbC0+bWxfbmFtZSwgbS0+bV9tbC0+bWxfZG9jKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIxMSw2ICsyNTcsNyBAQAogICAgIHsiX19uYW1lX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X19uYW1lX18sIE5VTEwsIE5VTEx9LAogICAgIHsiX19xdWFsbmFtZV9fIiwgKGdldHRlciltZXRoX2dldF9fcXVhbG5hbWVfXywgTlVMTCwgTlVMTH0sCiAgICAgeyJfX3NlbGZfXyIsIChnZXR0ZXIpbWV0aF9nZXRfX3NlbGZfXywgTlVMTCwgTlVMTH0sCisgICAgeyJfX3RleHRfc2lnbmF0dXJlX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X190ZXh0X3NpZ25hdHVyZV9fLCBOVUxMLCBOVUxMfSwKICAgICB7MH0KIH07CiAKQEAgLTMwOCw3ICszNTUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgbWV0aF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgbWV0aF9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWV0aF9nZXRzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTM0NiwxNyArMzkzLDMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmVlIFB5Q0Z1bmN0aW9uT2JqZWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWZyZWUsIHNpemVvZihQeUNGdW5jdGlvbk9iamVjdCkpOwogfQotCi0vKiBQeUNGdW5jdGlvbl9OZXcoKSBpcyBub3cganVzdCBhIG1hY3JvIHRoYXQgY2FsbHMgUHlDRnVuY3Rpb25fTmV3RXgoKSwKLSAgIGJ1dCBpdCdzIHBhcnQgb2YgdGhlIEFQSSBzbyB3ZSBuZWVkIHRvIGtlZXAgYSBmdW5jdGlvbiBhcm91bmQgdGhhdAotICAgZXhpc3RpbmcgQyBleHRlbnNpb25zIGNhbiBjYWxsLgotKi8KLQotI3VuZGVmIFB5Q0Z1bmN0aW9uX05ldwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKiwgUHlPYmplY3QgKik7Ci0KLVB5T2JqZWN0ICoKLVB5Q0Z1bmN0aW9uX05ldyhQeU1ldGhvZERlZiAqbWwsIFB5T2JqZWN0ICpzZWxmKQotewotICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChtbCwgc2VsZiwgTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9PYmplY3RzL21vZHVsZW9iamVjdC5jIGIvT2JqZWN0cy9tb2R1bGVvYmplY3QuYwppbmRleCA3Mjk3OGFlLi5mNTA5OTMyIDEwMDY0NAotLS0gYS9PYmplY3RzL21vZHVsZW9iamVjdC5jCisrKyBiL09iamVjdHMvbW9kdWxlb2JqZWN0LmMKQEAgLTExLDYgKzExLDggQEAKICAgICBQeU9iamVjdCAqbWRfZGljdDsKICAgICBzdHJ1Y3QgUHlNb2R1bGVEZWYgKm1kX2RlZjsKICAgICB2b2lkICptZF9zdGF0ZTsKKyAgICBQeU9iamVjdCAqbWRfd2Vha2xpc3Q7CisgICAgUHlPYmplY3QgKm1kX25hbWU7ICAvKiBmb3IgbG9nZ2luZyBwdXJwb3NlcyBhZnRlciBtZF9kaWN0IGlzIGNsZWFyZWQgKi8KIH0gUHlNb2R1bGVPYmplY3Q7CiAKIHN0YXRpYyBQeU1lbWJlckRlZiBtb2R1bGVfbWVtYmVyc1tdID0gewpAQCAtMjYsNiArMjgsMzUgQEAKIH07CiAKIAorc3RhdGljIGludAorbW9kdWxlX2luaXRfZGljdChQeU1vZHVsZU9iamVjdCAqbW9kLCBQeU9iamVjdCAqbWRfZGljdCwKKyAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpkb2MpCit7CisgICAgaWYgKG1kX2RpY3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChkb2MgPT0gTlVMTCkKKyAgICAgICAgZG9jID0gUHlfTm9uZTsKKworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtZF9kaWN0LCAiX19uYW1lX18iLCBuYW1lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX2RvY19fIiwgZG9jKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX3BhY2thZ2VfXyIsIFB5X05vbmUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fbG9hZGVyX18iLCBQeV9Ob25lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX3NwZWNfXyIsIFB5X05vbmUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobmFtZSkpIHsKKyAgICAgICAgUHlfSU5DUkVGKG5hbWUpOworICAgICAgICBQeV9YREVDUkVGKG1vZC0+bWRfbmFtZSk7CisgICAgICAgIG1vZC0+bWRfbmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKwogUHlPYmplY3QgKgogUHlNb2R1bGVfTmV3T2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewpAQCAtMzUsMTQgKzY2LDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG0tPm1kX2RlZiA9IE5VTEw7CiAgICAgbS0+bWRfc3RhdGUgPSBOVUxMOworICAgIG0tPm1kX3dlYWtsaXN0ID0gTlVMTDsKKyAgICBtLT5tZF9uYW1lID0gTlVMTDsKICAgICBtLT5tZF9kaWN0ID0gUHlEaWN0X05ldygpOwotICAgIGlmIChtLT5tZF9kaWN0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fbmFtZV9fIiwgbmFtZSkgIT0gMCkKLSAgICAgICAgZ290byBmYWlsOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19kb2NfXyIsIFB5X05vbmUpICE9IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fcGFja2FnZV9fIiwgUHlfTm9uZSkgIT0gMCkKKyAgICBpZiAobW9kdWxlX2luaXRfZGljdChtLCBtLT5tZF9kaWN0LCBuYW1lLCBOVUxMKSAhPSAwKQogICAgICAgICBnb3RvIGZhaWw7CiAgICAgUHlPYmplY3RfR0NfVHJhY2sobSk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW07CkBAIC0yNzIsNiArMjk5LDE0IEBACiB2b2lkCiBfUHlNb2R1bGVfQ2xlYXIoUHlPYmplY3QgKm0pCiB7CisgICAgUHlPYmplY3QgKmQgPSAoKFB5TW9kdWxlT2JqZWN0ICopbSktPm1kX2RpY3Q7CisgICAgaWYgKGQgIT0gTlVMTCkKKyAgICAgICAgX1B5TW9kdWxlX0NsZWFyRGljdChkKTsKK30KKwordm9pZAorX1B5TW9kdWxlX0NsZWFyRGljdChQeU9iamVjdCAqZCkKK3sKICAgICAvKiBUbyBtYWtlIHRoZSBleGVjdXRpb24gb3JkZXIgb2YgZGVzdHJ1Y3RvcnMgZm9yIGdsb2JhbAogICAgICAgIG9iamVjdHMgYSBiaXQgbW9yZSBwcmVkaWN0YWJsZSwgd2UgZmlyc3QgemFwIGFsbCBvYmplY3RzCiAgICAgICAgd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBhIHNpbmdsZSB1bmRlcnNjb3JlLCBiZWZvcmUgd2UgY2xlYXIKQEAgLTI4MSwxMSArMzE2LDYgQEAKIAogICAgIFB5X3NzaXplX3QgcG9zOwogICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKLSAgICBQeU9iamVjdCAqZDsKLQotICAgIGQgPSAoKFB5TW9kdWxlT2JqZWN0ICopbSktPm1kX2RpY3Q7Ci0gICAgaWYgKGQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgLyogRmlyc3QsIGNsZWFyIG9ubHkgbmFtZXMgc3RhcnRpbmcgd2l0aCBhIHNpbmdsZSB1bmRlcnNjb3JlICovCiAgICAgcG9zID0gMDsKQEAgLTM0OSw5ICszNzksNyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBtLT5tZF9kaWN0ID0gZGljdDsKICAgICB9Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICJfX25hbWVfXyIsIG5hbWUpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAiX19kb2NfXyIsIGRvYykgPCAwKQorICAgIGlmIChtb2R1bGVfaW5pdF9kaWN0KG0sIGRpY3QsIG5hbWUsIGRvYykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNjAsMTIgKzM4OCwxNSBAQAogbW9kdWxlX2RlYWxsb2MoUHlNb2R1bGVPYmplY3QgKm0pCiB7CiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhtKTsKKyAgICBpZiAoUHlfVmVyYm9zZUZsYWcgJiYgbS0+bWRfbmFtZSkgeworICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgZGVzdHJveSAlU1xuIiwgbS0+bWRfbmFtZSk7CisgICAgfQorICAgIGlmIChtLT5tZF93ZWFrbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBtKTsKICAgICBpZiAobS0+bWRfZGVmICYmIG0tPm1kX2RlZi0+bV9mcmVlKQogICAgICAgICBtLT5tZF9kZWYtPm1fZnJlZShtKTsKLSAgICBpZiAobS0+bWRfZGljdCAhPSBOVUxMKSB7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcigoUHlPYmplY3QgKiltKTsKLSAgICAgICAgUHlfREVDUkVGKG0tPm1kX2RpY3QpOwotICAgIH0KKyAgICBQeV9YREVDUkVGKG0tPm1kX2RpY3QpOworICAgIFB5X1hERUNSRUYobS0+bWRfbmFtZSk7CiAgICAgaWYgKG0tPm1kX3N0YXRlICE9IE5VTEwpCiAgICAgICAgIFB5TWVtX0ZSRUUobS0+bWRfc3RhdGUpOwogICAgIFB5X1RZUEUobSktPnRwX2ZyZWUoKFB5T2JqZWN0ICopbSk7CkBAIC0zNzQsNTUgKzQwNSwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1vZHVsZV9yZXByKFB5TW9kdWxlT2JqZWN0ICptKQogewotICAgIFB5T2JqZWN0ICpuYW1lLCAqZmlsZW5hbWUsICpyZXByLCAqbG9hZGVyID0gTlVMTDsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7CiAKLSAgICAvKiBTZWUgaWYgdGhlIG1vZHVsZSBoYXMgYW4gX19sb2FkZXJfXy4gIElmIGl0IGRvZXMsIGdpdmUgdGhlIGxvYWRlciB0aGUKLSAgICAgKiBmaXJzdCBzaG90IGF0IHByb2R1Y2luZyBhIHJlcHIgZm9yIHRoZSBtb2R1bGUuCi0gICAgICovCi0gICAgaWYgKG0tPm1kX2RpY3QgIT0gTlVMTCkgewotICAgICAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19sb2FkZXJfXyIpOwotICAgIH0KLSAgICBpZiAobG9hZGVyICE9IE5VTEwpIHsKLSAgICAgICAgcmVwciA9IFB5T2JqZWN0X0NhbGxNZXRob2QobG9hZGVyLCAibW9kdWxlX3JlcHIiLCAiKE8pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopbSwgTlVMTCk7Ci0gICAgICAgIGlmIChyZXByID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVwcjsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBfX2xvYWRlcl9fLm1vZHVsZV9yZXByKG0pIGRpZCBub3QgcHJvdmlkZSB1cyB3aXRoIGEgcmVwci4gIE5leHQsIHNlZSBpZgotICAgICAqIHRoZSBtb2R1bGUgaGFzIGFuIF9fZmlsZV9fLiAgSWYgaXQgZG9lc24ndCB0aGVuIHVzZSByZXByKF9fbG9hZGVyX18pIGlmCi0gICAgICogaXQgZXhpc3RzLCBvdGhlcndpc2UsIGp1c3QgdXNlIG1vZHVsZS5fX25hbWVfXy4KLSAgICAgKi8KLSAgICBuYW1lID0gUHlNb2R1bGVfR2V0TmFtZU9iamVjdCgoUHlPYmplY3QgKiltKTsKLSAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIG5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIj8iLCAxKTsKLSAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBmaWxlbmFtZSA9IFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0KChQeU9iamVjdCAqKW0pOwotICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIC8qIFRoZXJlJ3Mgbm8gbS5fX2ZpbGVfXywgc28gaWYgdGhlcmUgd2FzIGFuIF9fbG9hZGVyX18sIHVzZSB0aGF0IGluCi0gICAgICAgICAqIHRoZSByZXByLCBvdGhlcndpc2UsIHRoZSBvbmx5IHRoaW5nIHlvdSBjYW4gdXNlIGlzIG0uX19uYW1lX18KLSAgICAgICAgICovCi0gICAgICAgIGlmIChsb2FkZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSPiIsIG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSICglUik+IiwgbmFtZSwgbG9hZGVyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBGaW5hbGx5LCB1c2UgbS5fX2ZpbGVfXyAqLwotICAgIGVsc2UgewotICAgICAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxtb2R1bGUgJVIgZnJvbSAlUj4iLCBuYW1lLCBmaWxlbmFtZSk7Ci0gICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7Ci0gICAgfQotICAgIFB5X0RFQ1JFRihuYW1lKTsKLSAgICByZXR1cm4gcmVwcjsKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnRlcnAtPmltcG9ydGxpYiwgIl9tb2R1bGVfcmVwciIsICJPIiwgbSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTUxMSw3ICs0OTcsNyBAQAogICAgICh0cmF2ZXJzZXByb2MpbW9kdWxlX3RyYXZlcnNlLCAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSltb2R1bGVfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBvZmZzZXRvZihQeU1vZHVsZU9iamVjdCwgbWRfd2Vha2xpc3QpLCAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIG1vZHVsZV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYyBiL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMKaW5kZXggZmYyNzhkMy4uNzIwYWMwZCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYworKysgYi9PYmplY3RzL25hbWVzcGFjZW9iamVjdC5jCkBAIC00NCw3ICs0NCw3IEBACiAgICAgaWYgKGFyZ3MgIT0gTlVMTCkgewogICAgICAgICBQeV9zc2l6ZV90IGFyZ2NvdW50ID0gUHlPYmplY3RfU2l6ZShhcmdzKTsKICAgICAgICAgaWYgKGFyZ2NvdW50IDwgMCkKLSAgICAgICAgICAgIHJldHVybiBhcmdjb3VudDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZWxzZSBpZiAoYXJnY291bnQgPiAwKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAibm8gcG9zaXRpb25hbCBhcmd1bWVudHMgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTY2LDE2ICs2NiwyMCBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1uYW1lc3BhY2VfcmVwcihfUHlOYW1lc3BhY2VPYmplY3QgKm5zKQorbmFtZXNwYWNlX3JlcHIoUHlPYmplY3QgKm5zKQogewogICAgIGludCBpLCBsb29wX2Vycm9yID0gMDsKICAgICBQeU9iamVjdCAqcGFpcnMgPSBOVUxMLCAqZCA9IE5VTEwsICprZXlzID0gTlVMTCwgKmtleXNfaXRlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmtleTsKICAgICBQeU9iamVjdCAqc2VwYXJhdG9yLCAqcGFpcnNyZXByLCAqcmVwciA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIG5hbWU7CiAKLSAgICBpID0gUHlfUmVwckVudGVyKChQeU9iamVjdCAqKW5zKTsKKyAgICBuYW1lID0gKFB5X1RZUEUobnMpID09ICZfUHlOYW1lc3BhY2VfVHlwZSkgPyAibmFtZXNwYWNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5zLT5vYl90eXBlLT50cF9uYW1lOworCisgICAgaSA9IFB5X1JlcHJFbnRlcihucyk7CiAgICAgaWYgKGkgIT0gMCkgewotICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygibmFtZXNwYWNlKC4uLikiKSA6IE5VTEw7CisgICAgICAgIHJldHVybiBpID4gMCA/IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyguLi4pIiwgbmFtZSkgOiBOVUxMOwogICAgIH0KIAogICAgIHBhaXJzID0gUHlMaXN0X05ldygwKTsKQEAgLTk3LDcgKzEwMSw3IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICB3aGlsZSAoKGtleSA9IFB5SXRlcl9OZXh0KGtleXNfaXRlcikpICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5VW5pY29kZV9HRVRfU0laRShrZXkpID4gMCkgeworICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGtleSkgJiYgUHlVbmljb2RlX0dFVF9MRU5HVEgoa2V5KSA+IDApIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSwgKml0ZW07CiAKICAgICAgICAgICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW0oZCwga2V5KTsKQEAgLTEyNyw4ICsxMzEsNyBAQAogICAgIGlmIChwYWlyc3JlcHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoJVMpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQeU9iamVjdCAqKW5zKS0+b2JfdHlwZS0+dHBfbmFtZSwgcGFpcnNyZXByKTsKKyAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKCVTKSIsIG5hbWUsIHBhaXJzcmVwcik7CiAgICAgUHlfREVDUkVGKHBhaXJzcmVwcik7CiAKIGVycm9yOgpAQCAtMTM2LDcgKzEzOSw3IEBACiAgICAgUHlfWERFQ1JFRihkKTsKICAgICBQeV9YREVDUkVGKGtleXMpOwogICAgIFB5X1hERUNSRUYoa2V5c19pdGVyKTsKLSAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopbnMpOworICAgIFB5X1JlcHJMZWF2ZShucyk7CiAKICAgICByZXR1cm4gcmVwcjsKIH0KQEAgLTE1OCwxNCArMTYxLDQ5IEBACiB9CiAKIAorc3RhdGljIFB5T2JqZWN0ICoKK25hbWVzcGFjZV9yaWNoY29tcGFyZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyLCBpbnQgb3ApCit7CisgICAgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2Uoc2VsZiwgKFB5T2JqZWN0ICopJl9QeU5hbWVzcGFjZV9UeXBlKSAmJgorICAgICAgICAgICAgUHlPYmplY3RfSXNJbnN0YW5jZShvdGhlciwgKFB5T2JqZWN0ICopJl9QeU5hbWVzcGFjZV9UeXBlKSkKKyAgICAgICAgcmV0dXJuIFB5T2JqZWN0X1JpY2hDb21wYXJlKCgoX1B5TmFtZXNwYWNlT2JqZWN0ICopc2VsZiktPm5zX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX1B5TmFtZXNwYWNlT2JqZWN0ICopb3RoZXIpLT5uc19kaWN0LCBvcCk7CisgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKKyAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7Cit9CisKKworUHlEb2NfU1RSVkFSKG5hbWVzcGFjZV9yZWR1Y2VfX2RvY19fLCAiUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZyIpOworCitzdGF0aWMgUHlPYmplY3QgKgorbmFtZXNwYWNlX3JlZHVjZShfUHlOYW1lc3BhY2VPYmplY3QgKm5zKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQsICphcmdzID0gUHlUdXBsZV9OZXcoMCk7CisKKyAgICBpZiAoIWFyZ3MpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmVzdWx0ID0gUHlUdXBsZV9QYWNrKDMsIChQeU9iamVjdCAqKVB5X1RZUEUobnMpLCBhcmdzLCBucy0+bnNfZGljdCk7CisgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIFB5TWV0aG9kRGVmIG5hbWVzcGFjZV9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKW5hbWVzcGFjZV9yZWR1Y2UsIE1FVEhfTk9BUkdTLAorICAgICBuYW1lc3BhY2VfcmVkdWNlX19kb2NfX30sCisgICAge05VTEwsICAgICAgICAgTlVMTH0gIC8qIHNlbnRpbmVsICovCit9OworCisKIFB5RG9jX1NUUlZBUihuYW1lc3BhY2VfZG9jLAogIkEgc2ltcGxlIGF0dHJpYnV0ZS1iYXNlZCBuYW1lc3BhY2UuXG5cCiBcblwKLW5hbWVzcGFjZSgqKmt3YXJncykiKTsKK1NpbXBsZU5hbWVzcGFjZSgqKmt3YXJncykiKTsKIAogUHlUeXBlT2JqZWN0IF9QeU5hbWVzcGFjZV9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCi0gICAgIm5hbWVzcGFjZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgInR5cGVzLlNpbXBsZU5hbWVzcGFjZSIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCiAgICAgc2l6ZW9mKF9QeU5hbWVzcGFjZU9iamVjdCksICAgICAgICAgICAgICAgICAvKiB0cF9zaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLwogICAgIChkZXN0cnVjdG9yKW5hbWVzcGFjZV9kZWFsbG9jLCAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwpAQCAtMTg4LDExICsyMjYsMTEgQEAKICAgICBuYW1lc3BhY2VfZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpbmFtZXNwYWNlX3RyYXZlcnNlLCAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSluYW1lc3BhY2VfY2xlYXIsICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG5hbWVzcGFjZV9yaWNoY29tcGFyZSwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIG5hbWVzcGFjZV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIG5hbWVzcGFjZV9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCmRpZmYgLS1naXQgYS9PYmplY3RzL29iamVjdC5jIGIvT2JqZWN0cy9vYmplY3QuYwppbmRleCBlMDc5ZDUxLi5jNjM0ZTcwIDEwMDY0NAotLS0gYS9PYmplY3RzL29iamVjdC5jCisrKyBiL09iamVjdHMvb2JqZWN0LmMKQEAgLTgsNiArOCwxMiBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoUHlfUmVwcik7CitfUHlfSURFTlRJRklFUihfX2J5dGVzX18pOworX1B5X0lERU5USUZJRVIoX19kaXJfXyk7CitfUHlfSURFTlRJRklFUihfX2lzYWJzdHJhY3RtZXRob2RfXyk7CitfUHlfSURFTlRJRklFUihidWlsdGlucyk7CisKICNpZmRlZiBQeV9SRUZfREVCVUcKIFB5X3NzaXplX3QgX1B5X1JlZlRvdGFsOwogCkBAIC0yMiw3ICsyOCw3IEBACiAgICAgbyA9IF9QeURpY3RfRHVtbXkoKTsKICAgICBpZiAobyAhPSBOVUxMKQogICAgICAgICB0b3RhbCAtPSBvLT5vYl9yZWZjbnQ7Ci0gICAgbyA9IF9QeVNldF9EdW1teSgpOworICAgIG8gPSBfUHlTZXRfRHVtbXk7CiAgICAgaWYgKG8gIT0gTlVMTCkKICAgICAgICAgdG90YWwgLT0gby0+b2JfcmVmY250OwogICAgIHJldHVybiB0b3RhbDsKQEAgLTI1NSw2ICsyNjEsNzIgQEAKICAgICByZXR1cm4gUHlPYmplY3RfSU5JVF9WQVIob3AsIHRwLCBuaXRlbXMpOwogfQogCit2b2lkCitQeU9iamVjdF9DYWxsRmluYWxpemVyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5VHlwZU9iamVjdCAqdHAgPSBQeV9UWVBFKHNlbGYpOworCisgICAgLyogVGhlIGZvcm1lciBjb3VsZCBoYXBwZW4gb24gaGVhcHR5cGVzIGNyZWF0ZWQgZnJvbSB0aGUgQyBBUEksIGUuZy4KKyAgICAgICBQeVR5cGVfRnJvbVNwZWMoKS4gKi8KKyAgICBpZiAoIVB5VHlwZV9IYXNGZWF0dXJlKHRwLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpIHx8CisgICAgICAgIHRwLT50cF9maW5hbGl6ZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgLyogdHBfZmluYWxpemUgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuICovCisgICAgaWYgKFB5VHlwZV9JU19HQyh0cCkgJiYgX1B5R0NfRklOQUxJWkVEKHNlbGYpKQorICAgICAgICByZXR1cm47CisKKyAgICB0cC0+dHBfZmluYWxpemUoc2VsZik7CisgICAgaWYgKFB5VHlwZV9JU19HQyh0cCkpCisgICAgICAgIF9QeUdDX1NFVF9GSU5BTElaRUQoc2VsZiwgMSk7Cit9CisKK2ludAorUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5X3NzaXplX3QgcmVmY250OworCisgICAgLyogVGVtcG9yYXJpbHkgcmVzdXJyZWN0IHRoZSBvYmplY3QuICovCisgICAgaWYgKHNlbGYtPm9iX3JlZmNudCAhPSAwKSB7CisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyBjYWxsZWQgb24gIgorICAgICAgICAgICAgICAgICAgICAgICJvYmplY3Qgd2l0aCBhIG5vbi16ZXJvIHJlZmNvdW50Iik7CisgICAgfQorICAgIHNlbGYtPm9iX3JlZmNudCA9IDE7CisKKyAgICBQeU9iamVjdF9DYWxsRmluYWxpemVyKHNlbGYpOworCisgICAgLyogVW5kbyB0aGUgdGVtcG9yYXJ5IHJlc3VycmVjdGlvbjsgY2FuJ3QgdXNlIERFQ1JFRiBoZXJlLCBpdCB3b3VsZAorICAgICAqIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwuCisgICAgICovCisgICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA+IDApOworICAgIGlmICgtLXNlbGYtPm9iX3JlZmNudCA9PSAwKQorICAgICAgICByZXR1cm4gMDsgICAgICAgICAvKiB0aGlzIGlzIHRoZSBub3JtYWwgcGF0aCBvdXQgKi8KKworICAgIC8qIHRwX2ZpbmFsaXplIHJlc3VycmVjdGVkIGl0ISAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIG9yaWdpbmFsIFB5X0RFQ1JFRgorICAgICAqIG5ldmVyIGhhcHBlbmVkLgorICAgICAqLworICAgIHJlZmNudCA9IHNlbGYtPm9iX3JlZmNudDsKKyAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOworICAgIHNlbGYtPm9iX3JlZmNudCA9IHJlZmNudDsKKworICAgIGlmIChQeVR5cGVfSVNfR0MoUHlfVFlQRShzZWxmKSkpIHsKKyAgICAgICAgYXNzZXJ0KF9QeUdDX1JFRlMoc2VsZikgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOworICAgIH0KKyAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KKyAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KKyAgICBfUHlfREVDX1JFRlRPVEFMOworICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0CisgICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCisgICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCisgICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCisgICAgICogdW5kb25lLgorICAgICAqLworI2lmZGVmIENPVU5UX0FMTE9DUworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7CisgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7CisjZW5kaWYKKyAgICByZXR1cm4gLTE7Cit9CisKIGludAogUHlPYmplY3RfUHJpbnQoUHlPYmplY3QgKm9wLCBGSUxFICpmcCwgaW50IGZsYWdzKQogewpAQCAtMzQwLDExICs0MTIsMTcgQEAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbDsKICNlbmRpZgorICAgICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib2JqZWN0ICA6ICIpOwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgICAgIGdpbCA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAjZW5kaWYKKworICAgICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKICAgICAgICAgKHZvaWQpUHlPYmplY3RfUHJpbnQob3AsIHN0ZGVyciwgMCk7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsKTsKICNlbmRpZgpAQCAtMzc3LDYgKzQ1NSwxNCBAQAogICAgIGlmIChQeV9UWVBFKHYpLT50cF9yZXByID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG9iamVjdCBhdCAlcD4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi0+b2JfdHlwZS0+dHBfbmFtZSwgdik7CisKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIFB5T2JqZWN0X1JlcHIoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgcmVzID0gKCp2LT5vYl90eXBlLT50cF9yZXByKSh2KTsKICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDE5LDYgKzUwNSwxMyBAQAogICAgIGlmIChQeV9UWVBFKHYpLT50cF9zdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X1JlcHIodik7CiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIFB5T2JqZWN0X1N0cigpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQsCisgICAgICAgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGFuZCBzbyB0aGUKKyAgICAgICBjYWxsZXIgbG9zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIC8qIEl0IGlzIHBvc3NpYmxlIGZvciBhIHR5cGUgdG8gaGF2ZSBhIHRwX3N0ciByZXByZXNlbnRhdGlvbiB0aGF0IGxvb3BzCiAgICAgICAgaW5maW5pdGVseS4gKi8KICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZ2V0dGluZyB0aGUgc3RyIG9mIGFuIG9iamVjdCIpKQpAQCAtNDUxLDYgKzU0NCw5IEBACiAgICAgaWYgKHJlcHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHJlcHIpKQorICAgICAgICByZXR1cm4gcmVwcjsKKwogICAgIC8qIHJlcHIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIFB5VW5pY29kZSBvYmplY3QgYnkgUHlPYmplY3RfUmVwciAqLwogICAgIGFzY2lpID0gX1B5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nKHJlcHIsICJiYWNrc2xhc2hyZXBsYWNlIik7CiAgICAgUHlfREVDUkVGKHJlcHIpOwpAQCAtNDcwLDcgKzU2Niw2IEBACiBQeU9iamVjdF9CeXRlcyhQeU9iamVjdCAqdikKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0LCAqZnVuYzsKLSAgICBfUHlfSURFTlRJRklFUihfX2J5dGVzX18pOwogCiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZygiPE5VTEw+Iik7CkBAIC02MzYsMTUwICs3MzEsNiBAQAogICAgIHJldHVybiBvazsKIH0KIAotLyogU2V0IG9mIGhhc2ggdXRpbGl0eSBmdW5jdGlvbnMgdG8gaGVscCBtYWludGFpbmluZyB0aGUgaW52YXJpYW50IHRoYXQKLSAgICBpZiBhPT1iIHRoZW4gaGFzaChhKT09aGFzaChiKQotCi0gICBBbGwgdGhlIHV0aWxpdHkgZnVuY3Rpb25zIChfUHlfSGFzaCooKSkgcmV0dXJuICItMSIgdG8gc2lnbmlmeSBhbiBlcnJvci4KLSovCi0KLS8qIEZvciBudW1lcmljIHR5cGVzLCB0aGUgaGFzaCBvZiBhIG51bWJlciB4IGlzIGJhc2VkIG9uIHRoZSByZWR1Y3Rpb24KLSAgIG9mIHggbW9kdWxvIHRoZSBwcmltZSBQID0gMioqX1B5SEFTSF9CSVRTIC0gMS4gIEl0J3MgZGVzaWduZWQgc28gdGhhdAotICAgaGFzaCh4KSA9PSBoYXNoKHkpIHdoZW5ldmVyIHggYW5kIHkgYXJlIG51bWVyaWNhbGx5IGVxdWFsLCBldmVuIGlmCi0gICB4IGFuZCB5IGhhdmUgZGlmZmVyZW50IHR5cGVzLgotCi0gICBBIHF1aWNrIHN1bW1hcnkgb2YgdGhlIGhhc2hpbmcgc3RyYXRlZ3k6Ci0KLSAgICgxKSBGaXJzdCBkZWZpbmUgdGhlICdyZWR1Y3Rpb24gb2YgeCBtb2R1bG8gUCcgZm9yIGFueSByYXRpb25hbAotICAgbnVtYmVyIHg7IHRoaXMgaXMgYSBzdGFuZGFyZCBleHRlbnNpb24gb2YgdGhlIHVzdWFsIG5vdGlvbiBvZgotICAgcmVkdWN0aW9uIG1vZHVsbyBQIGZvciBpbnRlZ2Vycy4gIElmIHggPT0gcC9xICh3cml0dGVuIGluIGxvd2VzdAotICAgdGVybXMpLCB0aGUgcmVkdWN0aW9uIGlzIGludGVycHJldGVkIGFzIHRoZSByZWR1Y3Rpb24gb2YgcCB0aW1lcwotICAgdGhlIGludmVyc2Ugb2YgdGhlIHJlZHVjdGlvbiBvZiBxLCBhbGwgbW9kdWxvIFA7IGlmIHEgaXMgZXhhY3RseQotICAgZGl2aXNpYmxlIGJ5IFAgdGhlbiBkZWZpbmUgdGhlIHJlZHVjdGlvbiB0byBiZSBpbmZpbml0eS4gIFNvIHdlJ3ZlCi0gICBnb3QgYSB3ZWxsLWRlZmluZWQgbWFwCi0KLSAgICAgIHJlZHVjZSA6IHsgcmF0aW9uYWwgbnVtYmVycyB9IC0+IHsgMCwgMSwgMiwgLi4uLCBQLTEsIGluZmluaXR5IH0uCi0KLSAgICgyKSBOb3cgZm9yIGEgcmF0aW9uYWwgbnVtYmVyIHgsIGRlZmluZSBoYXNoKHgpIGJ5OgotCi0gICAgICByZWR1Y2UoeCkgICBpZiB4ID49IDAKLSAgICAgIC1yZWR1Y2UoLXgpIGlmIHggPCAwCi0KLSAgIElmIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbiBpcyBpbmZpbml0eSAodGhpcyBpcyBpbXBvc3NpYmxlIGZvcgotICAgaW50ZWdlcnMsIGZsb2F0cyBhbmQgRGVjaW1hbHMpIHRoZW4gdXNlIHRoZSBwcmVkZWZpbmVkIGhhc2ggdmFsdWUKLSAgIF9QeUhBU0hfSU5GIGZvciB4ID49IDAsIG9yIC1fUHlIQVNIX0lORiBmb3IgeCA8IDAsIGluc3RlYWQuCi0gICBfUHlIQVNIX0lORiwgLV9QeUhBU0hfSU5GIGFuZCBfUHlIQVNIX05BTiBhcmUgYWxzbyB1c2VkIGZvciB0aGUKLSAgIGhhc2hlcyBvZiBmbG9hdCBhbmQgRGVjaW1hbCBpbmZpbml0aWVzIGFuZCBuYW5zLgotCi0gICBBIHNlbGxpbmcgcG9pbnQgZm9yIHRoZSBhYm92ZSBzdHJhdGVneSBpcyB0aGF0IGl0IG1ha2VzIGl0IHBvc3NpYmxlCi0gICB0byBjb21wdXRlIGhhc2hlcyBvZiBkZWNpbWFsIGFuZCBiaW5hcnkgZmxvYXRpbmctcG9pbnQgbnVtYmVycwotICAgZWZmaWNpZW50bHksIGV2ZW4gaWYgdGhlIGV4cG9uZW50IG9mIHRoZSBiaW5hcnkgb3IgZGVjaW1hbCBudW1iZXIKLSAgIGlzIGxhcmdlLiAgVGhlIGtleSBwb2ludCBpcyB0aGF0Ci0KLSAgICAgIHJlZHVjZSh4ICogeSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKHkpIChtb2R1bG8gX1B5SEFTSF9NT0RVTFVTKQotCi0gICBwcm92aWRlZCB0aGF0IHtyZWR1Y2UoeCksIHJlZHVjZSh5KX0gIT0gezAsIGluZmluaXR5fS4gIFRoZSByZWR1Y3Rpb24gb2YgYQotICAgYmluYXJ5IG9yIGRlY2ltYWwgZmxvYXQgaXMgbmV2ZXIgaW5maW5pdHksIHNpbmNlIHRoZSBkZW5vbWluYXRvciBpcyBhIHBvd2VyCi0gICBvZiAyIChmb3IgYmluYXJ5KSBvciBhIGRpdmlzb3Igb2YgYSBwb3dlciBvZiAxMCAoZm9yIGRlY2ltYWwpLiAgU28gd2UgaGF2ZSwKLSAgIGZvciBub25uZWdhdGl2ZSB4LAotCi0gICAgICByZWR1Y2UoeCAqIDIqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgyKiplKSAlIF9QeUhBU0hfTU9EVUxVUwotCi0gICAgICByZWR1Y2UoeCAqIDEwKiplKSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoMTAqKmUpICUgX1B5SEFTSF9NT0RVTFVTCi0KLSAgIGFuZCByZWR1Y2UoMTAqKmUpIGNhbiBiZSBjb21wdXRlZCBlZmZpY2llbnRseSBieSB0aGUgdXN1YWwgbW9kdWxhcgotICAgZXhwb25lbnRpYXRpb24gYWxnb3JpdGhtLiAgRm9yIHJlZHVjZSgyKiplKSBpdCdzIGV2ZW4gYmV0dGVyOiBzaW5jZQotICAgUCBpcyBvZiB0aGUgZm9ybSAyKipuLTEsIHJlZHVjZSgyKiplKSBpcyAyKiooZSBtb2QgbiksIGFuZCBtdWx0aXBsaWNhdGlvbgotICAgYnkgMioqKGUgbW9kIG4pIG1vZHVsbyAyKipuLTEganVzdCBhbW91bnRzIHRvIGEgcm90YXRpb24gb2YgYml0cy4KLQotICAgKi8KLQotUHlfaGFzaF90Ci1fUHlfSGFzaERvdWJsZShkb3VibGUgdikKLXsKLSAgICBpbnQgZSwgc2lnbjsKLSAgICBkb3VibGUgbTsKLSAgICBQeV91aGFzaF90IHgsIHk7Ci0KLSAgICBpZiAoIVB5X0lTX0ZJTklURSh2KSkgewotICAgICAgICBpZiAoUHlfSVNfSU5GSU5JVFkodikpCi0gICAgICAgICAgICByZXR1cm4gdiA+IDAgPyBfUHlIQVNIX0lORiA6IC1fUHlIQVNIX0lORjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIF9QeUhBU0hfTkFOOwotICAgIH0KLQotICAgIG0gPSBmcmV4cCh2LCAmZSk7Ci0KLSAgICBzaWduID0gMTsKLSAgICBpZiAobSA8IDApIHsKLSAgICAgICAgc2lnbiA9IC0xOwotICAgICAgICBtID0gLW07Ci0gICAgfQotCi0gICAgLyogcHJvY2VzcyAyOCBiaXRzIGF0IGEgdGltZTsgIHRoaXMgc2hvdWxkIHdvcmsgd2VsbCBib3RoIGZvciBiaW5hcnkKLSAgICAgICBhbmQgaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQuICovCi0gICAgeCA9IDA7Ci0gICAgd2hpbGUgKG0pIHsKLSAgICAgICAgeCA9ICgoeCA8PCAyOCkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gMjgpOwotICAgICAgICBtICo9IDI2ODQzNTQ1Ni4wOyAgLyogMioqMjggKi8KLSAgICAgICAgZSAtPSAyODsKLSAgICAgICAgeSA9IChQeV91aGFzaF90KW07ICAvKiBwdWxsIG91dCBpbnRlZ2VyIHBhcnQgKi8KLSAgICAgICAgbSAtPSB5OwotICAgICAgICB4ICs9IHk7Ci0gICAgICAgIGlmICh4ID49IF9QeUhBU0hfTU9EVUxVUykKLSAgICAgICAgICAgIHggLT0gX1B5SEFTSF9NT0RVTFVTOwotICAgIH0KLQotICAgIC8qIGFkanVzdCBmb3IgdGhlIGV4cG9uZW50OyAgZmlyc3QgcmVkdWNlIGl0IG1vZHVsbyBfUHlIQVNIX0JJVFMgKi8KLSAgICBlID0gZSA+PSAwID8gZSAlIF9QeUhBU0hfQklUUyA6IF9QeUhBU0hfQklUUy0xLSgoLTEtZSkgJSBfUHlIQVNIX0JJVFMpOwotICAgIHggPSAoKHggPDwgZSkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gZSk7Ci0KLSAgICB4ID0geCAqIHNpZ247Ci0gICAgaWYgKHggPT0gKFB5X3VoYXNoX3QpLTEpCi0gICAgICAgIHggPSAoUHlfdWhhc2hfdCktMjsKLSAgICByZXR1cm4gKFB5X2hhc2hfdCl4OwotfQotCi1QeV9oYXNoX3QKLV9QeV9IYXNoUG9pbnRlcih2b2lkICpwKQotewotICAgIFB5X2hhc2hfdCB4OwotICAgIHNpemVfdCB5ID0gKHNpemVfdClwOwotICAgIC8qIGJvdHRvbSAzIG9yIDQgYml0cyBhcmUgbGlrZWx5IHRvIGJlIDA7IHJvdGF0ZSB5IGJ5IDQgdG8gYXZvaWQKLSAgICAgICBleGNlc3NpdmUgaGFzaCBjb2xsaXNpb25zIGZvciBkaWN0cyBhbmQgc2V0cyAqLwotICAgIHkgPSAoeSA+PiA0KSB8ICh5IDw8ICg4ICogU0laRU9GX1ZPSURfUCAtIDQpKTsKLSAgICB4ID0gKFB5X2hhc2hfdCl5OwotICAgIGlmICh4ID09IC0xKQotICAgICAgICB4ID0gLTI7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLVB5X2hhc2hfdAotX1B5X0hhc2hCeXRlcyh1bnNpZ25lZCBjaGFyICpwLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICBQeV91aGFzaF90IHg7Ci0gICAgUHlfc3NpemVfdCBpOwotCi0gICAgLyoKLSAgICAgIFdlIG1ha2UgdGhlIGhhc2ggb2YgdGhlIGVtcHR5IHN0cmluZyBiZSAwLCByYXRoZXIgdGhhbiB1c2luZwotICAgICAgKHByZWZpeCBeIHN1ZmZpeCksIHNpbmNlIHRoaXMgc2xpZ2h0bHkgb2JmdXNjYXRlcyB0aGUgaGFzaCBzZWNyZXQKLSAgICAqLwotI2lmZGVmIFB5X0RFQlVHCi0gICAgYXNzZXJ0KF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkKTsKLSNlbmRpZgotICAgIGlmIChsZW4gPT0gMCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgeCA9IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5wcmVmaXg7Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgKnAgPDwgNzsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIHggPSAoX1B5SEFTSF9NVUxUSVBMSUVSICogeCkgXiAoUHlfdWhhc2hfdCkgKnArKzsKLSAgICB4IF49IChQeV91aGFzaF90KSBsZW47Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuc3VmZml4OwotICAgIGlmICh4ID09IC0xKQotICAgICAgICB4ID0gLTI7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KIFB5X2hhc2hfdAogUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkKFB5T2JqZWN0ICp2KQogewpAQCAtNzg4LDggKzczOSw2IEBACiAgICAgcmV0dXJuIC0xOwogfQogCi1fUHlfSGFzaFNlY3JldF90IF9QeV9IYXNoU2VjcmV0OwotCiBQeV9oYXNoX3QKIFB5T2JqZWN0X0hhc2goUHlPYmplY3QgKnYpCiB7CkBAIC04NTksNyArODA4LDYgQEAKIHsKICAgICBpbnQgcmVzOwogICAgIFB5T2JqZWN0KiBpc2Fic3RyYWN0OwotICAgIF9QeV9JREVOVElGSUVSKF9faXNhYnN0cmFjdG1ldGhvZF9fKTsKIAogICAgIGlmIChvYmogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDMyLDggKzk4MCwxMiBAQAogUHlPYmplY3QgKgogX1B5T2JqZWN0X0dldEJ1aWx0aW4oY29uc3QgY2hhciAqbmFtZSkKIHsKLSAgICBQeU9iamVjdCAqbW9kLCAqYXR0cjsKLSAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImJ1aWx0aW5zIik7CisgICAgUHlPYmplY3QgKm1vZF9uYW1lLCAqbW9kLCAqYXR0cjsKKworICAgIG1vZF9uYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfYnVpbHRpbnMpOyAgIC8qIGJvcnJvd2VkICovCisgICAgaWYgKG1vZF9uYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydChtb2RfbmFtZSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBhdHRyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtb2QsIG5hbWUpOwpAQCAtMTMxNywxMiArMTI2OSwxMSBAQAogX2Rpcl9sb2NhbHModm9pZCkKIHsKICAgICBQeU9iamVjdCAqbmFtZXM7Ci0gICAgUHlPYmplY3QgKmxvY2FscyA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKKyAgICBQeU9iamVjdCAqbG9jYWxzOwogCi0gICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgImZyYW1lIGRvZXMgbm90IGV4aXN0Iik7CisgICAgbG9jYWxzID0gUHlFdmFsX0dldExvY2FscygpOworICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgbmFtZXMgPSBQeU1hcHBpbmdfS2V5cyhsb2NhbHMpOwogICAgIGlmICghbmFtZXMpCkBAIC0xMzQ3LDcgKzEyOTgsNiBAQAogX2Rpcl9vYmplY3QoUHlPYmplY3QgKm9iaikKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0LCAqc29ydGVkOwotICAgIF9QeV9JREVOVElGSUVSKF9fZGlyX18pOwogICAgIFB5T2JqZWN0ICpkaXJmdW5jID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwob2JqLCAmUHlJZF9fX2Rpcl9fKTsKIAogICAgIGFzc2VydChvYmopOwpAQCAtMTUxNSw2ICsxNDY1LDE3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitOb3RJbXBsZW1lbnRlZF9yZWR1Y2UoUHlPYmplY3QgKm9wKQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiTm90SW1wbGVtZW50ZWQiKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG5vdGltcGxlbWVudGVkX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pTm90SW1wbGVtZW50ZWRfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlPYmplY3QgKgogbm90aW1wbGVtZW50ZWRfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykgfHwgKGt3YXJncyAmJiBQeURpY3RfU2l6ZShrd2FyZ3MpKSkgewpAQCAtMTUyNCwxMiArMTQ4NSwyMSBAQAogICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKIH0KIAorc3RhdGljIHZvaWQKK25vdGltcGxlbWVudGVkX2RlYWxsb2MoUHlPYmplY3QqIGlnbm9yZSkKK3sKKyAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBnZXQgY2FsbGVkLCBidXQgd2UgYWxzbyBkb24ndCB3YW50IHRvIFNFR1YgaWYKKyAgICAgKiB3ZSBhY2NpZGVudGFsbHkgZGVjcmVmIE5vdEltcGxlbWVudGVkIG91dCBvZiBleGlzdGVuY2UuCisgICAgICovCisgICAgUHlfRmF0YWxFcnJvcigiZGVhbGxvY2F0aW5nIE5vdEltcGxlbWVudGVkIik7Cit9CisKIFB5VHlwZU9iamVjdCBfUHlOb3RJbXBsZW1lbnRlZF9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCiAgICAgIk5vdEltcGxlbWVudGVkVHlwZSIsCiAgICAgMCwKICAgICAwLAotICAgIG5vbmVfZGVhbGxvYywgICAgICAgLyp0cF9kZWFsbG9jKi8gLypuZXZlciBjYWxsZWQqLworICAgIG5vdGltcGxlbWVudGVkX2RlYWxsb2MsICAgICAgIC8qdHBfZGVhbGxvYyovIC8qbmV2ZXIgY2FsbGVkKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCkBAIC0xNTUyLDcgKzE1MjIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMgKi8KKyAgICBub3RpbXBsZW1lbnRlZF9tZXRob2RzLCAvKnRwX21ldGhvZHMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYmFzZSAqLwpAQCAtMTY5OSwxNSArMTY2OSw2IEBACiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlNZW1iZXJEZXNjcl9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgbWVtYmVyIGRlc2NyaXB0b3IgdHlwZSIpOwogCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlGaWx0ZXJfVHlwZSkgPCAwKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIGZpbHRlciB0eXBlIik7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeU1hcF9UeXBlKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgbWFwIHR5cGUiKTsKLQotICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5WmlwX1R5cGUpIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSB6aXAgdHlwZSIpOwotCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmX1B5TmFtZXNwYWNlX1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBuYW1lc3BhY2UgdHlwZSIpOwogCkBAIC0xNzQ5LDEwICsxNzEwLDEwIEBACiB9CiAKIHZvaWQKLV9QeV9Gb3JnZXRSZWZlcmVuY2UocmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorX1B5X0ZvcmdldFJlZmVyZW5jZShQeU9iamVjdCAqb3ApCiB7CiAjaWZkZWYgU0xPV19VTlJFRl9DSEVDSwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpwOworICAgIFB5T2JqZWN0ICpwOwogI2VuZGlmCiAgICAgaWYgKG9wLT5vYl9yZWZjbnQgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJVTlJFRiBuZWdhdGl2ZSByZWZjbnQiKTsKQEAgLTE4NTYsMjYgKzE4MTcsNiBAQAogUHlfc3NpemVfdCAoKl9QeV9hYnN0cmFjdF9oYWNrKShQeU9iamVjdCAqKSA9IFB5T2JqZWN0X1NpemU7CiAKIAotLyogUHl0aG9uJ3MgbWFsbG9jIHdyYXBwZXJzIChzZWUgcHltZW0uaCkgKi8KLQotdm9pZCAqCi1QeU1lbV9NYWxsb2Moc2l6ZV90IG5ieXRlcykKLXsKLSAgICByZXR1cm4gUHlNZW1fTUFMTE9DKG5ieXRlcyk7Ci19Ci0KLXZvaWQgKgotUHlNZW1fUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBQeU1lbV9SRUFMTE9DKHAsIG5ieXRlcyk7Ci19Ci0KLXZvaWQKLVB5TWVtX0ZyZWUodm9pZCAqcCkKLXsKLSAgICBQeU1lbV9GUkVFKHApOwotfQotCiB2b2lkCiBfUHlPYmplY3RfRGVidWdUeXBlU3RhdHMoRklMRSAqb3V0KQogewpAQCAtMTg4NSw3ICsxODI2LDYgQEAKICAgICBfUHlGcmFtZV9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiAgICAgX1B5TGlzdF9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiAgICAgX1B5TWV0aG9kX0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKLSAgICBfUHlTZXRfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwogICAgIF9QeVR1cGxlX0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKIH0KIApAQCAtMTkwMSw4ICsxODQxLDYgQEAKICAgIFNlZSBkaWN0b2JqZWN0LmMgYW5kIGxpc3RvYmplY3QuYyBmb3IgZXhhbXBsZXMgb2YgdXNlLgogKi8KIAotI2RlZmluZSBLRVkgIlB5X1JlcHIiCi0KIGludAogUHlfUmVwckVudGVyKFB5T2JqZWN0ICpvYmopCiB7CkBAIC0xOTEzLDEyICsxODUxLDEyIEBACiAgICAgZGljdCA9IFB5VGhyZWFkU3RhdGVfR2V0RGljdCgpOwogICAgIGlmIChkaWN0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIGxpc3QgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkaWN0LCBLRVkpOworICAgIGxpc3QgPSBfUHlEaWN0X0dldEl0ZW1JZChkaWN0LCAmUHlJZF9QeV9SZXByKTsKICAgICBpZiAobGlzdCA9PSBOVUxMKSB7CiAgICAgICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgICAgICBpZiAobGlzdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgS0VZLCBsaXN0KSA8IDApCisgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZChkaWN0LCAmUHlJZF9QeV9SZXByLCBsaXN0KSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKICAgICB9CkBAIC0xOTI3LDcgKzE4NjUsOCBAQAogICAgICAgICBpZiAoUHlMaXN0X0dFVF9JVEVNKGxpc3QsIGkpID09IG9iaikKICAgICAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBQeUxpc3RfQXBwZW5kKGxpc3QsIG9iaik7CisgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgb2JqKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTkzNywxMyArMTg3NiwxOCBAQAogICAgIFB5T2JqZWN0ICpkaWN0OwogICAgIFB5T2JqZWN0ICpsaXN0OwogICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CiAKICAgICBkaWN0ID0gUHlUaHJlYWRTdGF0ZV9HZXREaWN0KCk7CiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotICAgIGxpc3QgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkaWN0LCBLRVkpOworICAgICAgICBnb3RvIGZpbmFsbHk7CisKKyAgICBsaXN0ID0gX1B5RGljdF9HZXRJdGVtSWQoZGljdCwgJlB5SWRfUHlfUmVwcik7CiAgICAgaWYgKGxpc3QgPT0gTlVMTCB8fCAhUHlMaXN0X0NoZWNrKGxpc3QpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGdvdG8gZmluYWxseTsKKwogICAgIGkgPSBQeUxpc3RfR0VUX1NJWkUobGlzdCk7CiAgICAgLyogQ291bnQgYmFja3dhcmRzIGJlY2F1c2Ugd2UgYWx3YXlzIGV4cGVjdCBvYmogdG8gYmUgbGlzdFstMV0gKi8KICAgICB3aGlsZSAoLS1pID49IDApIHsKQEAgLTE5NTIsNiArMTg5NiwxMCBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKK2ZpbmFsbHk6CisgICAgLyogaWdub3JlIGV4Y2VwdGlvbnMgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gcmVwb3J0IHRoZW0uICovCisgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKIH0KIAogLyogVHJhc2hjYW4gc3VwcG9ydC4gKi8KQEAgLTE5NzIsNyArMTkyMCw3IEBACiBfUHlUcmFzaF9kZXBvc2l0X29iamVjdChQeU9iamVjdCAqb3ApCiB7CiAgICAgYXNzZXJ0KFB5T2JqZWN0X0lTX0dDKG9wKSk7Ci0gICAgYXNzZXJ0KF9QeV9BU19HQyhvcCktPmdjLmdjX3JlZnMgPT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOworICAgIGFzc2VydChfUHlHQ19SRUZTKG9wKSA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CiAgICAgYXNzZXJ0KG9wLT5vYl9yZWZjbnQgPT0gMCk7CiAgICAgX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcHJldiA9IChQeUdDX0hlYWQgKilfUHlUcmFzaF9kZWxldGVfbGF0ZXI7CiAgICAgX1B5VHJhc2hfZGVsZXRlX2xhdGVyID0gb3A7CkBAIC0xOTg0LDcgKzE5MzIsNyBAQAogewogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAgICAgYXNzZXJ0KFB5T2JqZWN0X0lTX0dDKG9wKSk7Ci0gICAgYXNzZXJ0KF9QeV9BU19HQyhvcCktPmdjLmdjX3JlZnMgPT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOworICAgIGFzc2VydChfUHlHQ19SRUZTKG9wKSA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CiAgICAgYXNzZXJ0KG9wLT5vYl9yZWZjbnQgPT0gMCk7CiAgICAgX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcHJldiA9IChQeUdDX0hlYWQgKikgdHN0YXRlLT50cmFzaF9kZWxldGVfbGF0ZXI7CiAgICAgdHN0YXRlLT50cmFzaF9kZWxldGVfbGF0ZXIgPSBvcDsKZGlmZiAtLWdpdCBhL09iamVjdHMvb2JtYWxsb2MuYyBiL09iamVjdHMvb2JtYWxsb2MuYwppbmRleCBjMjYxYjY4Li4wMDRjZmFhIDEwMDY0NAotLS0gYS9PYmplY3RzL29ibWFsbG9jLmMKKysrIGIvT2JqZWN0cy9vYm1hbGxvYy5jCkBAIC0xLDE0ICsxLDM3NCBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogCi0jaWZkZWYgV0lUSF9QWU1BTExPQworLyogUHl0aG9uJ3MgbWFsbG9jIHdyYXBwZXJzIChzZWUgcHltZW0uaCkgKi8KIAotI2lmZGVmIEhBVkVfTU1BUAotICNpbmNsdWRlIDxzeXMvbW1hbi5oPgotICNpZmRlZiBNQVBfQU5PTllNT1VTCi0gICNkZWZpbmUgQVJFTkFTX1VTRV9NTUFQCisjaWZkZWYgUFlNQUxMT0NfREVCVUcgICAvKiBXSVRIX1BZTUFMTE9DICYmIFBZTUFMTE9DX0RFQlVHICovCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCogX1B5TWVtX0RlYnVnTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgX1B5TWVtX0RlYnVnRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApOworc3RhdGljIHZvaWQqIF9QeU1lbV9EZWJ1Z1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKKworc3RhdGljIHZvaWQgX1B5T2JqZWN0X0RlYnVnRHVtcEFkZHJlc3MoY29uc3Qgdm9pZCAqcCk7CitzdGF0aWMgdm9pZCBfUHlNZW1fRGVidWdDaGVja0FkZHJlc3MoY2hhciBhcGlfaWQsIGNvbnN0IHZvaWQgKnApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9faGFzX2ZlYXR1cmUpICAvKiBDbGFuZyAqLworICNpZiBfX2hhc19mZWF0dXJlKGFkZHJlc3Nfc2FuaXRpemVyKSAgLyogaXMgQVNBTiBlbmFibGVkPyAqLworICAjZGVmaW5lIEFUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUyBcCisgICAgICAgIF9fYXR0cmlidXRlX18oKG5vX2FkZHJlc3Nfc2FmZXR5X2FuYWx5c2lzKSkgXAorICAgICAgICBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorICNlbHNlCisgICNkZWZpbmUgQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCisgI2VuZGlmCisjZWxzZQorICNpZiBkZWZpbmVkKF9fU0FOSVRJWkVfQUREUkVTU19fKSAgLyogR0NDIDQuOC54LCBpcyBBU0FOIGVuYWJsZWQ/ICovCisgICNkZWZpbmUgQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXygobm9fYWRkcmVzc19zYWZldHlfYW5hbHlzaXMpKSBcCisgICAgICAgIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCisgI2Vsc2UKKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMKICAjZW5kaWYKICNlbmRpZgogCisjaWZkZWYgV0lUSF9QWU1BTExPQworCisjaWZkZWYgTVNfV0lORE9XUworIyAgaW5jbHVkZSA8d2luZG93cy5oPgorI2VsaWYgZGVmaW5lZChIQVZFX01NQVApCisjICBpbmNsdWRlIDxzeXMvbW1hbi5oPgorIyAgaWZkZWYgTUFQX0FOT05ZTU9VUworIyAgICBkZWZpbmUgQVJFTkFTX1VTRV9NTUFQCisjICBlbmRpZgorI2VuZGlmCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkKiBfUHlPYmplY3RfTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgX1B5T2JqZWN0X0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwKTsKK3N0YXRpYyB2b2lkKiBfUHlPYmplY3RfUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworI2VuZGlmCisKKworc3RhdGljIHZvaWQgKgorX1B5TWVtX1Jhd01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIC8qIFB5TWVtX01hbGxvYygwKSBtZWFucyBtYWxsb2MoMSkuIFNvbWUgc3lzdGVtcyB3b3VsZCByZXR1cm4gTlVMTAorICAgICAgIGZvciBtYWxsb2MoMCksIHdoaWNoIHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuIFNvbWUgcGxhdGZvcm1zIHdvdWxkCisgICAgICAgcmV0dXJuIGEgcG9pbnRlciB3aXRoIG5vIG1lbW9yeSBiZWhpbmQgaXQsIHdoaWNoIHdvdWxkIGJyZWFrIHB5bWFsbG9jLgorICAgICAgIFRvIHNvbHZlIHRoZXNlIHByb2JsZW1zLCBhbGxvY2F0ZSBhbiBleHRyYSBieXRlLiAqLworICAgIGlmIChzaXplID09IDApCisgICAgICAgIHNpemUgPSAxOworICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9SYXdSZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICBzaXplID0gMTsKKyAgICByZXR1cm4gcmVhbGxvYyhwdHIsIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorX1B5TWVtX1Jhd0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgZnJlZShwdHIpOworfQorCisKKyNpZmRlZiBNU19XSU5ET1dTCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfQXJlbmFWaXJ0dWFsQWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gVmlydHVhbEFsbG9jKE5VTEwsIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBNRU1fQ09NTUlUIHwgTUVNX1JFU0VSVkUsIFBBR0VfUkVBRFdSSVRFKTsKK30KKworc3RhdGljIHZvaWQKK19QeU9iamVjdF9BcmVuYVZpcnR1YWxGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBWaXJ0dWFsRnJlZShwdHIsIDAsIE1FTV9SRUxFQVNFKTsKK30KKworI2VsaWYgZGVmaW5lZChBUkVOQVNfVVNFX01NQVApCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfQXJlbmFNbWFwKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgdm9pZCAqcHRyOworICAgIHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisgICAgICAgICAgICAgICBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCk7CisgICAgaWYgKHB0ciA9PSBNQVBfRkFJTEVEKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBhc3NlcnQocHRyICE9IE5VTEwpOworICAgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlPYmplY3RfQXJlbmFNdW5tYXAodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIG11bm1hcChwdHIsIHNpemUpOworfQorCisjZWxzZQorc3RhdGljIHZvaWQgKgorX1B5T2JqZWN0X0FyZW5hTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKworc3RhdGljIHZvaWQKK19QeU9iamVjdF9BcmVuYUZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIGZyZWUocHRyKTsKK30KKyNlbmRpZgorCisKKyNkZWZpbmUgUFlSQVdfRlVOQ1MgX1B5TWVtX1Jhd01hbGxvYywgX1B5TWVtX1Jhd1JlYWxsb2MsIF9QeU1lbV9SYXdGcmVlCisjaWZkZWYgV0lUSF9QWU1BTExPQworIyAgZGVmaW5lIFBZT0JKX0ZVTkNTIF9QeU9iamVjdF9NYWxsb2MsIF9QeU9iamVjdF9SZWFsbG9jLCBfUHlPYmplY3RfRnJlZQorI2Vsc2UKKyMgIGRlZmluZSBQWU9CSl9GVU5DUyBQWVJBV19GVU5DUworI2VuZGlmCisjZGVmaW5lIFBZTUVNX0ZVTkNTIFBZUkFXX0ZVTkNTCisKKyNpZmRlZiBQWU1BTExPQ19ERUJVRwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIFdlIHRhZyBlYWNoIGJsb2NrIHdpdGggYW4gQVBJIElEIGluIG9yZGVyIHRvIHRhZyBBUEkgdmlvbGF0aW9ucyAqLworICAgIGNoYXIgYXBpX2lkOworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworfSBkZWJ1Z19hbGxvY19hcGlfdDsKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGRlYnVnX2FsbG9jX2FwaV90IHJhdzsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCBtZW07CisgICAgZGVidWdfYWxsb2NfYXBpX3Qgb2JqOworfSBfUHlNZW1fRGVidWcgPSB7CisgICAgeydyJywge05VTEwsIFBZUkFXX0ZVTkNTfX0sCisgICAgeydtJywge05VTEwsIFBZTUVNX0ZVTkNTfX0sCisgICAgeydvJywge05VTEwsIFBZT0JKX0ZVTkNTfX0KKyAgICB9OworCisjZGVmaW5lIFBZREJHX0ZVTkNTIF9QeU1lbV9EZWJ1Z01hbGxvYywgX1B5TWVtX0RlYnVnUmVhbGxvYywgX1B5TWVtX0RlYnVnRnJlZQorI2VuZGlmCisKK3N0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlNZW1fUmF3ID0geworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgJl9QeU1lbV9EZWJ1Zy5yYXcsIFBZREJHX0ZVTkNTCisjZWxzZQorICAgIE5VTEwsIFBZUkFXX0ZVTkNTCisjZW5kaWYKKyAgICB9OworCitzdGF0aWMgUHlNZW1BbGxvY2F0b3IgX1B5TWVtID0geworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgJl9QeU1lbV9EZWJ1Zy5tZW0sIFBZREJHX0ZVTkNTCisjZWxzZQorICAgIE5VTEwsIFBZTUVNX0ZVTkNTCisjZW5kaWYKKyAgICB9OworCitzdGF0aWMgUHlNZW1BbGxvY2F0b3IgX1B5T2JqZWN0ID0geworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgJl9QeU1lbV9EZWJ1Zy5vYmosIFBZREJHX0ZVTkNTCisjZWxzZQorICAgIE5VTEwsIFBZT0JKX0ZVTkNTCisjZW5kaWYKKyAgICB9OworCisjdW5kZWYgUFlSQVdfRlVOQ1MKKyN1bmRlZiBQWU1FTV9GVU5DUworI3VuZGVmIFBZT0JKX0ZVTkNTCisjdW5kZWYgUFlEQkdfRlVOQ1MKKworc3RhdGljIFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgX1B5T2JqZWN0X0FyZW5hID0ge05VTEwsCisjaWZkZWYgTVNfV0lORE9XUworICAgIF9QeU9iamVjdF9BcmVuYVZpcnR1YWxBbGxvYywgX1B5T2JqZWN0X0FyZW5hVmlydHVhbEZyZWUKKyNlbGlmIGRlZmluZWQoQVJFTkFTX1VTRV9NTUFQKQorICAgIF9QeU9iamVjdF9BcmVuYU1tYXAsIF9QeU9iamVjdF9BcmVuYU11bm1hcAorI2Vsc2UKKyAgICBfUHlPYmplY3RfQXJlbmFNYWxsb2MsIF9QeU9iamVjdF9BcmVuYUZyZWUKKyNlbmRpZgorICAgIH07CisKK3ZvaWQKK1B5TWVtX1NldHVwRGVidWdIb29rcyh2b2lkKQoreworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7CisKKyAgICBhbGxvYy5tYWxsb2MgPSBfUHlNZW1fRGVidWdNYWxsb2M7CisgICAgYWxsb2MucmVhbGxvYyA9IF9QeU1lbV9EZWJ1Z1JlYWxsb2M7CisgICAgYWxsb2MuZnJlZSA9IF9QeU1lbV9EZWJ1Z0ZyZWU7CisKKyAgICBpZiAoX1B5TWVtX1Jhdy5tYWxsb2MgIT0gX1B5TWVtX0RlYnVnTWFsbG9jKSB7CisgICAgICAgIGFsbG9jLmN0eCA9ICZfUHlNZW1fRGVidWcucmF3OworICAgICAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJl9QeU1lbV9EZWJ1Zy5yYXcuYWxsb2MpOworICAgICAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jKTsKKyAgICB9CisKKyAgICBpZiAoX1B5TWVtLm1hbGxvYyAhPSBfUHlNZW1fRGVidWdNYWxsb2MpIHsKKyAgICAgICAgYWxsb2MuY3R4ID0gJl9QeU1lbV9EZWJ1Zy5tZW07CisgICAgICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmX1B5TWVtX0RlYnVnLm1lbS5hbGxvYyk7CisgICAgICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmYWxsb2MpOworICAgIH0KKworICAgIGlmIChfUHlPYmplY3QubWFsbG9jICE9IF9QeU1lbV9EZWJ1Z01hbGxvYykgeworICAgICAgICBhbGxvYy5jdHggPSAmX1B5TWVtX0RlYnVnLm9iajsKKyAgICAgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9PQkosICZfUHlNZW1fRGVidWcub2JqLmFsbG9jKTsKKyAgICAgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9PQkosICZhbGxvYyk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQKK1B5TWVtX0dldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpCit7CisgICAgc3dpdGNoKGRvbWFpbikKKyAgICB7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fUkFXOiAqYWxsb2NhdG9yID0gX1B5TWVtX1JhdzsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fTUVNOiAqYWxsb2NhdG9yID0gX1B5TWVtOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9PQko6ICphbGxvY2F0b3IgPSBfUHlPYmplY3Q7IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIHVua25vd24gZG9tYWluICovCisgICAgICAgIGFsbG9jYXRvci0+Y3R4ID0gTlVMTDsKKyAgICAgICAgYWxsb2NhdG9yLT5tYWxsb2MgPSBOVUxMOworICAgICAgICBhbGxvY2F0b3ItPnJlYWxsb2MgPSBOVUxMOworICAgICAgICBhbGxvY2F0b3ItPmZyZWUgPSBOVUxMOworICAgIH0KK30KKwordm9pZAorUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IF9QeU1lbV9SYXcgPSAqYWxsb2NhdG9yOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IF9QeU1lbSA9ICphbGxvY2F0b3I7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogX1B5T2JqZWN0ID0gKmFsbG9jYXRvcjsgYnJlYWs7CisgICAgLyogaWdub3JlIHVua25vd24gZG9tYWluICovCisgICAgfQorCit9CisKK3ZvaWQKK1B5T2JqZWN0X0dldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICAqYWxsb2NhdG9yID0gX1B5T2JqZWN0X0FyZW5hOworfQorCit2b2lkCitQeU9iamVjdF9TZXRBcmVuYUFsbG9jYXRvcihQeU9iamVjdEFyZW5hQWxsb2NhdG9yICphbGxvY2F0b3IpCit7CisgICAgX1B5T2JqZWN0X0FyZW5hID0gKmFsbG9jYXRvcjsKK30KKwordm9pZCAqCitQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgLyoKKyAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KKyAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjaworICAgICAqIHRoaW5ncyB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvd3Mgb3IgbmVnYXRpdmVzLgorICAgICAqIEFzIHNpemVfdCBpcyB1bnNpZ25lZCwgY2hlY2tpbmcgZm9yIHNpemUgPCAwIGlzIG5vdCByZXF1aXJlZC4KKyAgICAgKi8KKyAgICBpZiAoc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIF9QeU1lbV9SYXcubWFsbG9jKF9QeU1lbV9SYXcuY3R4LCBzaXplKTsKK30KKwordm9pZCoKK1B5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKG5ld19zaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU1lbV9SYXcucmVhbGxvYyhfUHlNZW1fUmF3LmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3ZvaWQgUHlNZW1fUmF3RnJlZSh2b2lkICpwdHIpCit7CisgICAgX1B5TWVtX1Jhdy5mcmVlKF9QeU1lbV9SYXcuY3R4LCBwdHIpOworfQorCit2b2lkICoKK1B5TWVtX01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAoc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlNZW0ubWFsbG9jKF9QeU1lbS5jdHgsIHNpemUpOworfQorCit2b2lkICoKK1B5TWVtX1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKG5ld19zaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU1lbS5yZWFsbG9jKF9QeU1lbS5jdHgsIHB0ciwgbmV3X3NpemUpOworfQorCit2b2lkCitQeU1lbV9GcmVlKHZvaWQgKnB0cikKK3sKKyAgICBfUHlNZW0uZnJlZShfUHlNZW0uY3R4LCBwdHIpOworfQorCitjaGFyICoKK19QeU1lbV9SYXdTdHJkdXAoY29uc3QgY2hhciAqc3RyKQoreworICAgIHNpemVfdCBzaXplOworICAgIGNoYXIgKmNvcHk7CisKKyAgICBzaXplID0gc3RybGVuKHN0cikgKyAxOworICAgIGNvcHkgPSBQeU1lbV9SYXdNYWxsb2Moc2l6ZSk7CisgICAgaWYgKGNvcHkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbWVtY3B5KGNvcHksIHN0ciwgc2l6ZSk7CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK2NoYXIgKgorX1B5TWVtX1N0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgY2hhciAqY29weTsKKworICAgIHNpemUgPSBzdHJsZW4oc3RyKSArIDE7CisgICAgY29weSA9IFB5TWVtX01hbGxvYyhzaXplKTsKKyAgICBpZiAoY29weSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtZW1jcHkoY29weSwgc3RyLCBzaXplKTsKKyAgICByZXR1cm4gY29weTsKK30KKwordm9pZCAqCitQeU9iamVjdF9NYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKHNpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5T2JqZWN0Lm1hbGxvYyhfUHlPYmplY3QuY3R4LCBzaXplKTsKK30KKwordm9pZCAqCitQeU9iamVjdF9SZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLworICAgIGlmIChuZXdfc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlPYmplY3QucmVhbGxvYyhfUHlPYmplY3QuY3R4LCBwdHIsIG5ld19zaXplKTsKK30KKwordm9pZAorUHlPYmplY3RfRnJlZSh2b2lkICpwdHIpCit7CisgICAgX1B5T2JqZWN0LmZyZWUoX1B5T2JqZWN0LmN0eCwgcHRyKTsKK30KKworCisjaWZkZWYgV0lUSF9QWU1BTExPQworCiAjaWZkZWYgV0lUSF9WQUxHUklORAogI2luY2x1ZGUgPHZhbGdyaW5kL3ZhbGdyaW5kLmg+CiAKQEAgLTUyNSw2ICs4ODUsMTUgQEAKIC8qIEhpZ2ggd2F0ZXIgbWFyayAobWF4IHZhbHVlIGV2ZXIgc2VlbikgZm9yIG5hcmVuYXNfY3VycmVudGx5X2FsbG9jYXRlZC4gKi8KIHN0YXRpYyBzaXplX3QgbmFyZW5hc19oaWdod2F0ZXIgPSAwOwogCitzdGF0aWMgUHlfc3NpemVfdCBfUHlfQWxsb2NhdGVkQmxvY2tzID0gMDsKKworUHlfc3NpemVfdAorX1B5X0dldEFsbG9jYXRlZEJsb2Nrcyh2b2lkKQoreworICAgIHJldHVybiBfUHlfQWxsb2NhdGVkQmxvY2tzOworfQorCisKIC8qIEFsbG9jYXRlIGEgbmV3IGFyZW5hLiAgSWYgd2UgcnVuIG91dCBvZiBtZW1vcnksIHJldHVybiBOVUxMLiAgRWxzZQogICogYWxsb2NhdGUgYSBuZXcgYXJlbmEsIGFuZCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgYW4gYXJlbmFfb2JqZWN0CiAgKiBkZXNjcmliaW5nIHRoZSBuZXcgYXJlbmEuICBJdCdzIGV4cGVjdGVkIHRoYXQgdGhlIGNhbGxlciB3aWxsIHNldApAQCAtNTM2LDcgKzkwNSw2IEBACiAgICAgc3RydWN0IGFyZW5hX29iamVjdCogYXJlbmFvYmo7CiAgICAgdWludCBleGNlc3M7ICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgYWJvdmUgcG9vbCBhbGlnbm1lbnQgKi8KICAgICB2b2lkICphZGRyZXNzOwotICAgIGludCBlcnI7CiAKICNpZmRlZiBQWU1BTExPQ19ERUJVRwogICAgIGlmIChQeV9HRVRFTlYoIlBZVEhPTk1BTExPQ1NUQVRTIikpCkBAIC01NTgsNyArOTI2LDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBvdmVyZmxvdyAqLwogI2VuZGlmCiAgICAgICAgIG5ieXRlcyA9IG51bWFyZW5hcyAqIHNpemVvZigqYXJlbmFzKTsKLSAgICAgICAgYXJlbmFvYmogPSAoc3RydWN0IGFyZW5hX29iamVjdCAqKXJlYWxsb2MoYXJlbmFzLCBuYnl0ZXMpOworICAgICAgICBhcmVuYW9iaiA9IChzdHJ1Y3QgYXJlbmFfb2JqZWN0ICopUHlNZW1fUmF3UmVhbGxvYyhhcmVuYXMsIG5ieXRlcyk7CiAgICAgICAgIGlmIChhcmVuYW9iaiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGFyZW5hcyA9IGFyZW5hb2JqOwpAQCAtNTg5LDE1ICs5NTcsOCBAQAogICAgIGFyZW5hb2JqID0gdW51c2VkX2FyZW5hX29iamVjdHM7CiAgICAgdW51c2VkX2FyZW5hX29iamVjdHMgPSBhcmVuYW9iai0+bmV4dGFyZW5hOwogICAgIGFzc2VydChhcmVuYW9iai0+YWRkcmVzcyA9PSAwKTsKLSNpZmRlZiBBUkVOQVNfVVNFX01NQVAKLSAgICBhZGRyZXNzID0gbW1hcChOVUxMLCBBUkVOQV9TSVpFLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApOwotICAgIGVyciA9IChhZGRyZXNzID09IE1BUF9GQUlMRUQpOwotI2Vsc2UKLSAgICBhZGRyZXNzID0gbWFsbG9jKEFSRU5BX1NJWkUpOwotICAgIGVyciA9IChhZGRyZXNzID09IDApOwotI2VuZGlmCi0gICAgaWYgKGVycikgeworICAgIGFkZHJlc3MgPSBfUHlPYmplY3RfQXJlbmEuYWxsb2MoX1B5T2JqZWN0X0FyZW5hLmN0eCwgQVJFTkFfU0laRSk7CisgICAgaWYgKGFkZHJlc3MgPT0gTlVMTCkgewogICAgICAgICAvKiBUaGUgYWxsb2NhdGlvbiBmYWlsZWQ6IHJldHVybiBOVUxMIGFmdGVyIHB1dHRpbmcgdGhlCiAgICAgICAgICAqIGFyZW5hb2JqIGJhY2suCiAgICAgICAgICAqLwpAQCAtNzYwLDE1ICsxMTIxLDE2IEBACiAgKiBVbmxlc3MgdGhlIG9wdGltaXplciByZW9yZGVycyBldmVyeXRoaW5nLCBiZWluZyB0b28gc21hcnQuLi4KICAqLwogCi0jdW5kZWYgUHlPYmplY3RfTWFsbG9jCi12b2lkICoKLVB5T2JqZWN0X01hbGxvYyhzaXplX3QgbmJ5dGVzKQorc3RhdGljIHZvaWQgKgorX1B5T2JqZWN0X01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBuYnl0ZXMpCiB7CiAgICAgYmxvY2sgKmJwOwogICAgIHBvb2xwIHBvb2w7CiAgICAgcG9vbHAgbmV4dDsKICAgICB1aW50IHNpemU7CiAKKyAgICBfUHlfQWxsb2NhdGVkQmxvY2tzKys7CisKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAgICAgaWYgKFVOTElLRUxZKHJ1bm5pbmdfb25fdmFsZ3JpbmQgPT0gLTEpKQogICAgICAgICBydW5uaW5nX29uX3ZhbGdyaW5kID0gUlVOTklOR19PTl9WQUxHUklORDsKQEAgLTc3NywxNSArMTEzOSw2IEBACiAjZW5kaWYKIAogICAgIC8qCi0gICAgICogTGltaXQgb3Vyc2VsdmVzIHRvIFBZX1NTSVpFX1RfTUFYIGJ5dGVzIHRvIHByZXZlbnQgc2VjdXJpdHkgaG9sZXMuCi0gICAgICogTW9zdCBweXRob24gaW50ZXJuYWxzIGJsaW5kbHkgdXNlIGEgc2lnbmVkIFB5X3NzaXplX3QgdG8gdHJhY2sKLSAgICAgKiB0aGluZ3Mgd2l0aG91dCBjaGVja2luZyBmb3Igb3ZlcmZsb3dzIG9yIG5lZ2F0aXZlcy4KLSAgICAgKiBBcyBzaXplX3QgaXMgdW5zaWduZWQsIGNoZWNraW5nIGZvciBuYnl0ZXMgPCAwIGlzIG5vdCByZXF1aXJlZC4KLSAgICAgKi8KLSAgICBpZiAobmJ5dGVzID4gUFlfU1NJWkVfVF9NQVgpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyoKICAgICAgKiBUaGlzIGltcGxpY2l0bHkgcmVkaXJlY3RzIG1hbGxvYygwKS4KICAgICAgKi8KICAgICBpZiAoKG5ieXRlcyAtIDEpIDwgU01BTExfUkVRVUVTVF9USFJFU0hPTEQpIHsKQEAgLTkwMSw2ICsxMjU0LDcgQEAKICAgICAgICAgICAgICAgICAgKiBhbmQgZnJlZSBsaXN0IGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLgogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGJwID0gcG9vbC0+ZnJlZWJsb2NrOworICAgICAgICAgICAgICAgIGFzc2VydChicCAhPSBOVUxMKTsKICAgICAgICAgICAgICAgICBwb29sLT5mcmVlYmxvY2sgPSAqKGJsb2NrICoqKWJwOwogICAgICAgICAgICAgICAgIFVOTE9DSygpOwogICAgICAgICAgICAgICAgIHJldHVybiAodm9pZCAqKWJwOwpAQCAtOTU2LDE2ICsxMzEwLDE5IEBACiAgICAgICogbGFzdCBjaGFuY2UgdG8gc2VydmUgdGhlIHJlcXVlc3QpIG9yIHdoZW4gdGhlIG1heCBtZW1vcnkgbGltaXQKICAgICAgKiBoYXMgYmVlbiByZWFjaGVkLgogICAgICAqLwotICAgIGlmIChuYnl0ZXMgPT0gMCkKLSAgICAgICAgbmJ5dGVzID0gMTsKLSAgICByZXR1cm4gKHZvaWQgKiltYWxsb2MobmJ5dGVzKTsKKyAgICB7CisgICAgICAgIHZvaWQgKnJlc3VsdCA9IFB5TWVtX1Jhd01hbGxvYyhuYnl0ZXMpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MtLTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiB9CiAKIC8qIGZyZWUgKi8KIAotI3VuZGVmIFB5T2JqZWN0X0ZyZWUKLXZvaWQKLVB5T2JqZWN0X0ZyZWUodm9pZCAqcCkKK0FUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUworc3RhdGljIHZvaWQKK19QeU9iamVjdF9GcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCkKIHsKICAgICBwb29scCBwb29sOwogICAgIGJsb2NrICpsYXN0ZnJlZTsKQEAgLTk3OCw2ICsxMzM1LDggQEAKICAgICBpZiAocCA9PSBOVUxMKSAgICAgIC8qIGZyZWUoTlVMTCkgaGFzIG5vIGVmZmVjdCAqLwogICAgICAgICByZXR1cm47CiAKKyAgICBfUHlfQWxsb2NhdGVkQmxvY2tzLS07CisKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAgICAgaWYgKFVOTElLRUxZKHJ1bm5pbmdfb25fdmFsZ3JpbmQgPiAwKSkKICAgICAgICAgZ290byByZWRpcmVjdDsKQEAgLTEwNzIsMTEgKzE0MzEsOCBAQAogICAgICAgICAgICAgICAgIHVudXNlZF9hcmVuYV9vYmplY3RzID0gYW87CiAKICAgICAgICAgICAgICAgICAvKiBGcmVlIHRoZSBlbnRpcmUgYXJlbmEuICovCi0jaWZkZWYgQVJFTkFTX1VTRV9NTUFQCi0gICAgICAgICAgICAgICAgbXVubWFwKCh2b2lkICopYW8tPmFkZHJlc3MsIEFSRU5BX1NJWkUpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBmcmVlKCh2b2lkICopYW8tPmFkZHJlc3MpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgX1B5T2JqZWN0X0FyZW5hLmZyZWUoX1B5T2JqZWN0X0FyZW5hLmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWFvLT5hZGRyZXNzLCBBUkVOQV9TSVpFKTsKICAgICAgICAgICAgICAgICBhby0+YWRkcmVzcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbWFyayB1bmFzc29jaWF0ZWQgKi8KICAgICAgICAgICAgICAgICAtLW5hcmVuYXNfY3VycmVudGx5X2FsbG9jYXRlZDsKIApAQCAtMTE4NSw3ICsxNTQxLDcgQEAKIHJlZGlyZWN0OgogI2VuZGlmCiAgICAgLyogV2UgZGlkbid0IGFsbG9jYXRlIHRoaXMgYWRkcmVzcy4gKi8KLSAgICBmcmVlKHApOworICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiB9CiAKIC8qIHJlYWxsb2MuICBJZiBwIGlzIE5VTEwsIHRoaXMgYWN0cyBsaWtlIG1hbGxvYyhuYnl0ZXMpLiAgRWxzZSBpZiBuYnl0ZXM9PTAsCkBAIC0xMTkzLDkgKzE1NDksOSBAQAogICogcmV0dXJuIGEgbm9uLU5VTEwgcmVzdWx0LgogICovCiAKLSN1bmRlZiBQeU9iamVjdF9SZWFsbG9jCi12b2lkICoKLVB5T2JqZWN0X1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKK0FUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUworc3RhdGljIHZvaWQgKgorX1B5T2JqZWN0X1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQogewogICAgIHZvaWQgKmJwOwogICAgIHBvb2xwIHBvb2w7CkBAIC0xMjA1LDE2ICsxNTYxLDcgQEAKICNlbmRpZgogCiAgICAgaWYgKHAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X01hbGxvYyhuYnl0ZXMpOwotCi0gICAgLyoKLSAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KLSAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjawotICAgICAqIHRoaW5ncyB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvd3Mgb3IgbmVnYXRpdmVzLgotICAgICAqIEFzIHNpemVfdCBpcyB1bnNpZ25lZCwgY2hlY2tpbmcgZm9yIG5ieXRlcyA8IDAgaXMgbm90IHJlcXVpcmVkLgotICAgICAqLwotICAgIGlmIChuYnl0ZXMgPiBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBfUHlPYmplY3RfTWFsbG9jKGN0eCwgbmJ5dGVzKTsKIAogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICAgICAvKiBUcmVhdCBydW5uaW5nX29uX3ZhbGdyaW5kID09IC0xIHRoZSBzYW1lIGFzIDAgKi8KQEAgLTEyNDIsMTAgKzE1ODksMTAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNpemUgPSBuYnl0ZXM7CiAgICAgICAgIH0KLSAgICAgICAgYnAgPSBQeU9iamVjdF9NYWxsb2MobmJ5dGVzKTsKKyAgICAgICAgYnAgPSBfUHlPYmplY3RfTWFsbG9jKGN0eCwgbmJ5dGVzKTsKICAgICAgICAgaWYgKGJwICE9IE5VTEwpIHsKICAgICAgICAgICAgIG1lbWNweShicCwgcCwgc2l6ZSk7Ci0gICAgICAgICAgICBQeU9iamVjdF9GcmVlKHApOworICAgICAgICAgICAgX1B5T2JqZWN0X0ZyZWUoY3R4LCBwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYnA7CiAgICAgfQpAQCAtMTI2MywxNCArMTYxMCwxNCBAQAogICAgICAqIGF0IHAuICBJbnN0ZWFkIHdlIHB1bnQ6ICBsZXQgQyBjb250aW51ZSB0byBtYW5hZ2UgdGhpcyBibG9jay4KICAgICAgKi8KICAgICBpZiAobmJ5dGVzKQotICAgICAgICByZXR1cm4gcmVhbGxvYyhwLCBuYnl0ZXMpOworICAgICAgICByZXR1cm4gUHlNZW1fUmF3UmVhbGxvYyhwLCBuYnl0ZXMpOwogICAgIC8qIEMgZG9lc24ndCBkZWZpbmUgdGhlIHJlc3VsdCBvZiByZWFsbG9jKHAsIDApIChpdCBtYXkgb3IgbWF5IG5vdAogICAgICAqIHJldHVybiBOVUxMIHRoZW4pLCBidXQgUHl0aG9uJ3MgZG9jcyBwcm9taXNlIHRoYXQgbmJ5dGVzPT0wIG5ldmVyCiAgICAgICogcmV0dXJucyBOVUxMLiAgV2UgZG9uJ3QgcGFzcyAwIHRvIHJlYWxsb2MoKSwgdG8gYXZvaWQgdGhhdCBlbmRjYXNlCiAgICAgICogdG8gYmVnaW4gd2l0aC4gIEV2ZW4gdGhlbiwgd2UgY2FuJ3QgYmUgc3VyZSB0aGF0IHJlYWxsb2MoKSB3b24ndAogICAgICAqIHJldHVybiBOVUxMLgogICAgICAqLwotICAgIGJwID0gcmVhbGxvYyhwLCAxKTsKKyAgICBicCA9IFB5TWVtX1Jhd1JlYWxsb2MocCwgMSk7CiAgICAgcmV0dXJuIGJwID8gYnAgOiBwOwogfQogCkBAIC0xMjgwLDIzICsxNjI3LDEyIEBACiAvKiBweW1hbGxvYyBub3QgZW5hYmxlZDogIFJlZGlyZWN0IHRoZSBlbnRyeSBwb2ludHMgdG8gbWFsbG9jLiAgVGhlc2Ugd2lsbAogICogb25seSBiZSB1c2VkIGJ5IGV4dGVuc2lvbnMgdGhhdCBhcmUgY29tcGlsZWQgd2l0aCBweW1hbGxvYyBlbmFibGVkLiAqLwogCi12b2lkICoKLVB5T2JqZWN0X01hbGxvYyhzaXplX3QgbikKK1B5X3NzaXplX3QKK19QeV9HZXRBbGxvY2F0ZWRCbG9ja3Modm9pZCkKIHsKLSAgICByZXR1cm4gUHlNZW1fTUFMTE9DKG4pOworICAgIHJldHVybiAwOwogfQogCi12b2lkICoKLVB5T2JqZWN0X1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG4pCi17Ci0gICAgcmV0dXJuIFB5TWVtX1JFQUxMT0MocCwgbik7Ci19Ci0KLXZvaWQKLVB5T2JqZWN0X0ZyZWUodm9pZCAqcCkKLXsKLSAgICBQeU1lbV9GUkVFKHApOwotfQogI2VuZGlmIC8qIFdJVEhfUFlNQUxMT0MgKi8KIAogI2lmZGVmIFBZTUFMTE9DX0RFQlVHCkBAIC0xMzE2LDEwICsxNjUyLDYgQEAKICNkZWZpbmUgREVBREJZVEUgICAgICAgMHhEQiAgICAvKiBkZWFkIChuZXdseSBmcmVlZCkgbWVtb3J5ICovCiAjZGVmaW5lIEZPUkJJRERFTkJZVEUgIDB4RkIgICAgLyogdW50b3VjaGFibGUgYnl0ZXMgYXQgZWFjaCBlbmQgb2YgYSBibG9jayAqLwogCi0vKiBXZSB0YWcgZWFjaCBibG9jayB3aXRoIGFuIEFQSSBJRCBpbiBvcmRlciB0byB0YWcgQVBJIHZpb2xhdGlvbnMgKi8KLSNkZWZpbmUgX1BZTUFMTE9DX01FTV9JRCAnbScgICAvKiB0aGUgUHlNZW1fTWFsbG9jKCkgQVBJICovCi0jZGVmaW5lIF9QWU1BTExPQ19PQkpfSUQgJ28nICAgLyogVGhlIFB5T2JqZWN0X01hbGxvYygpIEFQSSAqLwotCiBzdGF0aWMgc2l6ZV90IHNlcmlhbG5vID0gMDsgICAgIC8qIGluY3JlbWVudGVkIG9uIGVhY2ggZGVidWcge20scmV9YWxsb2MgKi8KIAogLyogc2VyaWFsbm8gaXMgYWx3YXlzIGluY3JlbWVudGVkIHZpYSBjYWxsaW5nIHRoaXMgcm91dGluZS4gIFRoZSBwb2ludCBpcwpAQCAtMTM5Miw3ICsxNzI0LDkgQEAKIHBbMDogU10KICAgICBOdW1iZXIgb2YgYnl0ZXMgb3JpZ2luYWxseSBhc2tlZCBmb3IuICBUaGlzIGlzIGEgc2l6ZV90LCBiaWctZW5kaWFuIChlYXNpZXIKICAgICB0byByZWFkIGluIGEgbWVtb3J5IGR1bXApLgotcFtTOiAyKlNdCitwW1NdCisgICAgQVBJIElELiAgU2VlIFBFUCA0NDUuICBUaGlzIGlzIGEgY2hhcmFjdGVyLCBidXQgc2VlbXMgdW5kb2N1bWVudGVkLgorcFtTKzE6IDIqU10KICAgICBDb3BpZXMgb2YgRk9SQklEREVOQllURS4gIFVzZWQgdG8gY2F0Y2ggdW5kZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwWzIqUzogMipTK25dCiAgICAgVGhlIHJlcXVlc3RlZCBtZW1vcnksIGZpbGxlZCB3aXRoIGNvcGllcyBvZiBDTEVBTkJZVEUuCkBAIC0xNDAyLDU4ICsxNzM2LDE4IEBACiBwWzIqUytuOiAyKlMrbitTXQogICAgIENvcGllcyBvZiBGT1JCSURERU5CWVRFLiAgVXNlZCB0byBjYXRjaCBvdmVyLSB3cml0ZXMgYW5kIHJlYWRzLgogcFsyKlMrbitTOiAyKlMrbisyKlNdCi0gICAgQSBzZXJpYWwgbnVtYmVyLCBpbmNyZW1lbnRlZCBieSAxIG9uIGVhY2ggY2FsbCB0byBfUHlPYmplY3RfRGVidWdNYWxsb2MKLSAgICBhbmQgX1B5T2JqZWN0X0RlYnVnUmVhbGxvYy4KKyAgICBBIHNlcmlhbCBudW1iZXIsIGluY3JlbWVudGVkIGJ5IDEgb24gZWFjaCBjYWxsIHRvIF9QeU1lbV9EZWJ1Z01hbGxvYworICAgIGFuZCBfUHlNZW1fRGVidWdSZWFsbG9jLgogICAgIFRoaXMgaXMgYSBiaWctZW5kaWFuIHNpemVfdC4KICAgICBJZiAiYmFkIG1lbW9yeSIgaXMgZGV0ZWN0ZWQgbGF0ZXIsIHRoZSBzZXJpYWwgbnVtYmVyIGdpdmVzIGFuCiAgICAgZXhjZWxsZW50IHdheSB0byBzZXQgYSBicmVha3BvaW50IG9uIHRoZSBuZXh0IHJ1biwgdG8gY2FwdHVyZSB0aGUKICAgICBpbnN0YW50IGF0IHdoaWNoIHRoaXMgYmxvY2sgd2FzIHBhc3NlZCBvdXQuCiAqLwogCi0vKiBkZWJ1ZyByZXBsYWNlbWVudHMgZm9yIHRoZSBQeU1lbV8qIG1lbW9yeSBBUEkgKi8KLXZvaWQgKgotX1B5TWVtX0RlYnVnTWFsbG9jKHNpemVfdCBuYnl0ZXMpCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fRGVidWdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3QgbmJ5dGVzKQogewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoX1BZTUFMTE9DX01FTV9JRCwgbmJ5dGVzKTsKLX0KLXZvaWQgKgotX1B5TWVtX0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdSZWFsbG9jQXBpKF9QWU1BTExPQ19NRU1fSUQsIHAsIG5ieXRlcyk7Ci19Ci12b2lkCi1fUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApCi17Ci0gICAgX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShfUFlNQUxMT0NfTUVNX0lELCBwKTsKLX0KLQotLyogZGVidWcgcmVwbGFjZW1lbnRzIGZvciB0aGUgUHlPYmplY3RfKiBtZW1vcnkgQVBJICovCi12b2lkICoKLV9QeU9iamVjdF9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoX1BZTUFMTE9DX09CSl9JRCwgbmJ5dGVzKTsKLX0KLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdSZWFsbG9jQXBpKF9QWU1BTExPQ19PQkpfSUQsIHAsIG5ieXRlcyk7Ci19Ci12b2lkCi1fUHlPYmplY3RfRGVidWdGcmVlKHZvaWQgKnApCi17Ci0gICAgX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShfUFlNQUxMT0NfT0JKX0lELCBwKTsKLX0KLXZvaWQKLV9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzcyhjb25zdCB2b2lkICpwKQotewotICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShfUFlNQUxMT0NfT0JKX0lELCBwKTsKLX0KLQotCi0vKiBnZW5lcmljIGRlYnVnIG1lbW9yeSBhcGksIHdpdGggYW4gImlkIiB0byBpZGVudGlmeSB0aGUgQVBJIGluIHVzZSAqLwotdm9pZCAqCi1fUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoY2hhciBpZCwgc2l6ZV90IG5ieXRlcykKLXsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OwogICAgIHVjaGFyICpwOyAgICAgICAgICAgLyogYmFzZSBhZGRyZXNzIG9mIG1hbGxvYydlZCBibG9jayAqLwogICAgIHVjaGFyICp0YWlsOyAgICAgICAgLyogcCArIDIqU1NUICsgbmJ5dGVzID09IHBvaW50ZXIgdG8gdGFpbCBwYWQgYnl0ZXMgKi8KICAgICBzaXplX3QgdG90YWw7ICAgICAgIC8qIG5ieXRlcyArIDQqU1NUICovCkBAIC0xNDY0LDE0ICsxNzU4LDE0IEBACiAgICAgICAgIC8qIG92ZXJmbG93OiAgY2FuJ3QgcmVwcmVzZW50IHRvdGFsIGFzIGEgc2l6ZV90ICovCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcCA9ICh1Y2hhciAqKVB5T2JqZWN0X01hbGxvYyh0b3RhbCk7CisgICAgcCA9ICh1Y2hhciAqKWFwaS0+YWxsb2MubWFsbG9jKGFwaS0+YWxsb2MuY3R4LCB0b3RhbCk7CiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBhdCBwLCB3cml0ZSBzaXplIChTU1QgYnl0ZXMpLCBpZCAoMSBieXRlKSwgcGFkIChTU1QtMSBieXRlcykgKi8KICAgICB3cml0ZV9zaXplX3QocCwgbmJ5dGVzKTsKLSAgICBwW1NTVF0gPSAodWNoYXIpaWQ7Ci0gICAgbWVtc2V0KHAgKyBTU1QgKyAxICwgRk9SQklEREVOQllURSwgU1NULTEpOworICAgIHBbU1NUXSA9ICh1Y2hhcilhcGktPmFwaV9pZDsKKyAgICBtZW1zZXQocCArIFNTVCArIDEsIEZPUkJJRERFTkJZVEUsIFNTVC0xKTsKIAogICAgIGlmIChuYnl0ZXMgPiAwKQogICAgICAgICBtZW1zZXQocCArIDIqU1NULCBDTEVBTkJZVEUsIG5ieXRlcyk7CkBAIC0xNDg5LDM1ICsxNzgzLDM3IEBACiAgICBUaGVuIGZpbGxzIHRoZSBvcmlnaW5hbCBieXRlcyB3aXRoIERFQURCWVRFLgogICAgVGhlbiBjYWxscyB0aGUgdW5kZXJseWluZyBmcmVlLgogKi8KLXZvaWQKLV9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApCitzdGF0aWMgdm9pZAorX1B5TWVtX0RlYnVnRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApCiB7CisgICAgZGVidWdfYWxsb2NfYXBpX3QgKmFwaSA9IChkZWJ1Z19hbGxvY19hcGlfdCAqKWN0eDsKICAgICB1Y2hhciAqcSA9ICh1Y2hhciAqKXAgLSAyKlNTVDsgIC8qIGFkZHJlc3MgcmV0dXJuZWQgZnJvbSBtYWxsb2MgKi8KICAgICBzaXplX3QgbmJ5dGVzOwogCiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwotICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShhcGksIHApOworICAgIF9QeU1lbV9EZWJ1Z0NoZWNrQWRkcmVzcyhhcGktPmFwaV9pZCwgcCk7CiAgICAgbmJ5dGVzID0gcmVhZF9zaXplX3QocSk7CiAgICAgbmJ5dGVzICs9IDQqU1NUOwogICAgIGlmIChuYnl0ZXMgPiAwKQogICAgICAgICBtZW1zZXQocSwgREVBREJZVEUsIG5ieXRlcyk7Ci0gICAgUHlPYmplY3RfRnJlZShxKTsKKyAgICBhcGktPmFsbG9jLmZyZWUoYXBpLT5hbGxvYy5jdHgsIHEpOwogfQogCi12b2lkICoKLV9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoY2hhciBhcGksIHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKIHsKLSAgICB1Y2hhciAqcSA9ICh1Y2hhciAqKXA7CisgICAgZGVidWdfYWxsb2NfYXBpX3QgKmFwaSA9IChkZWJ1Z19hbGxvY19hcGlfdCAqKWN0eDsKKyAgICB1Y2hhciAqcSA9ICh1Y2hhciAqKXAsICpvbGRxOwogICAgIHVjaGFyICp0YWlsOwogICAgIHNpemVfdCB0b3RhbDsgICAgICAgLyogbmJ5dGVzICsgNCpTU1QgKi8KICAgICBzaXplX3Qgb3JpZ2luYWxfbmJ5dGVzOwogICAgIGludCBpOwogCiAgICAgaWYgKHAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShhcGksIG5ieXRlcyk7CisgICAgICAgIHJldHVybiBfUHlNZW1fRGVidWdNYWxsb2MoY3R4LCBuYnl0ZXMpOwogCi0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGFwaSwgcCk7CisgICAgX1B5TWVtX0RlYnVnQ2hlY2tBZGRyZXNzKGFwaS0+YXBpX2lkLCBwKTsKICAgICBidW1wc2VyaWFsbm8oKTsKICAgICBvcmlnaW5hbF9uYnl0ZXMgPSByZWFkX3NpemVfdChxIC0gMipTU1QpOwogICAgIHRvdGFsID0gbmJ5dGVzICsgNCpTU1Q7CkBAIC0xNTI1LDI0ICsxODIxLDI2IEBACiAgICAgICAgIC8qIG92ZXJmbG93OiAgY2FuJ3QgcmVwcmVzZW50IHRvdGFsIGFzIGEgc2l6ZV90ICovCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKG5ieXRlcyA8IG9yaWdpbmFsX25ieXRlcykgewotICAgICAgICAvKiBzaHJpbmtpbmc6ICBtYXJrIG9sZCBleHRyYSBtZW1vcnkgZGVhZCAqLwotICAgICAgICBtZW1zZXQocSArIG5ieXRlcywgREVBREJZVEUsIG9yaWdpbmFsX25ieXRlcyAtIG5ieXRlcyArIDIqU1NUKTsKLSAgICB9Ci0KICAgICAvKiBSZXNpemUgYW5kIGFkZCBkZWNvcmF0aW9ucy4gV2UgbWF5IGdldCBhIG5ldyBwb2ludGVyIGhlcmUsIGluIHdoaWNoCiAgICAgICogY2FzZSB3ZSBkaWRuJ3QgZ2V0IHRoZSBjaGFuY2UgdG8gbWFyayB0aGUgb2xkIG1lbW9yeSB3aXRoIERFQURCWVRFLAogICAgICAqIGJ1dCB3ZSBsaXZlIHdpdGggdGhhdC4KICAgICAgKi8KLSAgICBxID0gKHVjaGFyICopUHlPYmplY3RfUmVhbGxvYyhxIC0gMipTU1QsIHRvdGFsKTsKKyAgICBvbGRxID0gcTsKKyAgICBxID0gKHVjaGFyICopYXBpLT5hbGxvYy5yZWFsbG9jKGFwaS0+YWxsb2MuY3R4LCBxIC0gMipTU1QsIHRvdGFsKTsKICAgICBpZiAocSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmIChxID09IG9sZHEgJiYgbmJ5dGVzIDwgb3JpZ2luYWxfbmJ5dGVzKSB7CisgICAgICAgIC8qIHNocmlua2luZzogIG1hcmsgb2xkIGV4dHJhIG1lbW9yeSBkZWFkICovCisgICAgICAgIG1lbXNldChxICsgbmJ5dGVzLCBERUFEQllURSwgb3JpZ2luYWxfbmJ5dGVzIC0gbmJ5dGVzKTsKKyAgICB9CisKICAgICB3cml0ZV9zaXplX3QocSwgbmJ5dGVzKTsKLSAgICBhc3NlcnQocVtTU1RdID09ICh1Y2hhcilhcGkpOworICAgIGFzc2VydChxW1NTVF0gPT0gKHVjaGFyKWFwaS0+YXBpX2lkKTsKICAgICBmb3IgKGkgPSAxOyBpIDwgU1NUOyArK2kpCiAgICAgICAgIGFzc2VydChxW1NTVCArIGldID09IEZPUkJJRERFTkJZVEUpOwogICAgIHEgKz0gMipTU1Q7CisKICAgICB0YWlsID0gcSArIG5ieXRlczsKICAgICBtZW1zZXQodGFpbCwgRk9SQklEREVOQllURSwgU1NUKTsKICAgICB3cml0ZV9zaXplX3QodGFpbCArIFNTVCwgc2VyaWFsbm8pOwpAQCAtMTU2MSw4ICsxODU5LDggQEAKICAqIGFuZCBjYWxsIFB5X0ZhdGFsRXJyb3IgdG8ga2lsbCB0aGUgcHJvZ3JhbS4KICAqIFRoZSBBUEkgaWQsIGlzIGFsc28gY2hlY2tlZC4KICAqLwotIHZvaWQKLV9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShjaGFyIGFwaSwgY29uc3Qgdm9pZCAqcCkKK3N0YXRpYyB2b2lkCitfUHlNZW1fRGVidWdDaGVja0FkZHJlc3MoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApCiB7CiAgICAgY29uc3QgdWNoYXIgKnEgPSAoY29uc3QgdWNoYXIgKilwOwogICAgIGNoYXIgbXNnYnVmWzY0XTsKQEAgLTE2MTQsNyArMTkxMiw3IEBACiB9CiAKIC8qIERpc3BsYXkgaW5mbyB0byBzdGRlcnIgYWJvdXQgdGhlIG1lbW9yeSBibG9jayBhdCBwLiAqLwotdm9pZAorc3RhdGljIHZvaWQKIF9QeU9iamVjdF9EZWJ1Z0R1bXBBZGRyZXNzKGNvbnN0IHZvaWQgKnApCiB7CiAgICAgY29uc3QgdWNoYXIgKnEgPSAoY29uc3QgdWNoYXIgKilwOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9yYW5nZW9iamVjdC5jIGIvT2JqZWN0cy9yYW5nZW9iamVjdC5jCmluZGV4IGQ3OTBjYTguLmE0ZDlmYjMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvcmFuZ2VvYmplY3QuYworKysgYi9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKQEAgLTMxOCwxOTUgKzMxOCw2IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotLyogQWRkaXRpb25hbCBoZWxwZXJzLCBzaW5jZSB0aGUgc3RhbmRhcmQgc2xpY2UgaGVscGVycwotICogYWxsIGNsaXAgdG8gUFlfU1NJWkVfVF9NQVgKLSAqLwotCi0vKiBSZXBsYWNlIF9QeUV2YWxfU2xpY2VJbmRleCAqLwotc3RhdGljIFB5T2JqZWN0ICoKLWNvbXB1dGVfc2xpY2VfZWxlbWVudChQeU9iamVjdCAqb2JqKQotewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotICAgIGlmIChvYmogIT0gTlVMTCkgewotICAgICAgICBpZiAoUHlJbmRleF9DaGVjayhvYmopKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9JbmRleChvYmopOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2UgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSBvciBoYXZlIGFuIF9faW5kZXhfXyBtZXRob2QiKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBSZXBsYWNlIFB5U2xpY2VfR2V0SW5kaWNlc0V4Ci0gKiAgIFJlc3VsdCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHNsaWNlIGlzIGVtcHR5Ci0gKiAgICAoLTEgPSBlcnJvciwgMCA9IGVtcHR5IHNsaWNlLCAxID0gc2xpY2UgY29udGFpbnMgZWxlbWVudHMpCi0gKi8KLXN0YXRpYyBpbnQKLWNvbXB1dGVfc2xpY2VfaW5kaWNlcyhyYW5nZW9iamVjdCAqciwgUHlTbGljZU9iamVjdCAqc2xpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGFydCwgUHlPYmplY3QgKipzdG9wLCBQeU9iamVjdCAqKnN0ZXApCi17Ci0gICAgaW50IGNtcF9yZXN1bHQsIGhhc19lbGVtZW50czsKLSAgICBQeV9zc2l6ZV90IGNsYW1wZWRfc3RlcCA9IDA7Ci0gICAgUHlPYmplY3QgKnplcm8gPSBOVUxMLCAqb25lID0gTlVMTCwgKm5lZ19vbmUgPSBOVUxMLCAqY2FuZGlkYXRlID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdG1wX3N0YXJ0ID0gTlVMTCwgKnRtcF9zdG9wID0gTlVMTCwgKnRtcF9zdGVwID0gTlVMTDsKLSAgICB6ZXJvID0gUHlMb25nX0Zyb21Mb25nKDApOwotICAgIGlmICh6ZXJvID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMSk7Ci0gICAgaWYgKG9uZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgbmVnX29uZSA9IFB5TG9uZ19Gcm9tTG9uZygtMSk7Ci0gICAgaWYgKG5lZ19vbmUgPT0gTlVMTCkgZ290byBGYWlsOwotCi0gICAgLyogQ2FsY3VsYXRlIHN0ZXAgdmFsdWUgKi8KLSAgICBpZiAoc2xpY2UtPnN0ZXAgPT0gUHlfTm9uZSkgewotICAgICAgICBjbGFtcGVkX3N0ZXAgPSAxOwotICAgICAgICB0bXBfc3RlcCA9IG9uZTsKLSAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGVwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIV9QeUV2YWxfU2xpY2VJbmRleChzbGljZS0+c3RlcCwgJmNsYW1wZWRfc3RlcCkpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA9PSAwKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2Ugc3RlcCBjYW5ub3QgYmUgemVybyIpOwotICAgICAgICAgICAgZ290byBGYWlsOwotICAgICAgICB9Ci0gICAgICAgIHRtcF9zdGVwID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdGVwKTsKLSAgICAgICAgaWYgKHRtcF9zdGVwID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICB9Ci0KLSAgICAvKiBDYWxjdWxhdGUgc3RhcnQgdmFsdWUgKi8KLSAgICBpZiAoc2xpY2UtPnN0YXJ0ID09IFB5X05vbmUpIHsKLSAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgIHRtcF9zdGFydCA9IFB5TnVtYmVyX1N1YnRyYWN0KHItPmxlbmd0aCwgb25lKTsKLSAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG1wX3N0YXJ0ID0gemVybzsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RhcnQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FuZGlkYXRlID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdGFydCk7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNhbmRpZGF0ZSwgemVybywgUHlfTFQpOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCkgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlIDwgMCAqLwotICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfQWRkKHItPmxlbmd0aCwgY2FuZGlkYXRlKTsKLSAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgUHlfQ0xFQVIoY2FuZGlkYXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA+PSAwICovCi0gICAgICAgICAgICB0bXBfc3RhcnQgPSBjYW5kaWRhdGU7Ci0gICAgICAgICAgICBjYW5kaWRhdGUgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0YXJ0LCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiB0bXBfc3RhcnQgPCAwICovCi0gICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RhcnQpOwotICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSBuZWdfb25lOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSB6ZXJvOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiB0bXBfc3RhcnQgPj0gMCAqLwotICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHItPmxlbmd0aCwgUHlfR0UpOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgLyogdG1wX3N0YXJ0ID49IHItPmxlbmd0aCAqLwotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdGFydCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOwotICAgICAgICAgICAgICAgICAgICBpZiAodG1wX3N0YXJ0ID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSByLT5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RhcnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIENhbGN1bGF0ZSBzdG9wIHZhbHVlICovCi0gICAgaWYgKHNsaWNlLT5zdG9wID09IFB5X05vbmUpIHsKLSAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgIHRtcF9zdG9wID0gbmVnX29uZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRtcF9zdG9wID0gci0+bGVuZ3RoOwotICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRih0bXBfc3RvcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FuZGlkYXRlID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdG9wKTsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY2FuZGlkYXRlLCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiBjYW5kaWRhdGUgPCAwICovCi0gICAgICAgICAgICB0bXBfc3RvcCA9IFB5TnVtYmVyX0FkZChyLT5sZW5ndGgsIGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgICBpZiAodG1wX3N0b3AgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgUHlfQ0xFQVIoY2FuZGlkYXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA+PSAwICovCi0gICAgICAgICAgICB0bXBfc3RvcCA9IGNhbmRpZGF0ZTsKLSAgICAgICAgICAgIGNhbmRpZGF0ZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RvcCwgemVybywgUHlfTFQpOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCkgewotICAgICAgICAgICAgLyogdG1wX3N0b3AgPCAwICovCi0gICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RvcCk7Ci0gICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gbmVnX29uZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdG1wX3N0b3AgPSB6ZXJvOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdG9wKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdG9wID49IDAgKi8KLSAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0b3AsIHItPmxlbmd0aCwgUHlfR0UpOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgLyogdG1wX3N0b3AgPj0gci0+bGVuZ3RoICovCi0gICAgICAgICAgICAgICAgUHlfQ0xFQVIodG1wX3N0b3ApOwotICAgICAgICAgICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOwotICAgICAgICAgICAgICAgICAgICBpZiAodG1wX3N0b3AgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gci0+bGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0b3ApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIENoZWNrIGlmIHRoZSBzbGljZSBpcyBlbXB0eSBvciBub3QgKi8KLSAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICBoYXNfZWxlbWVudHMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0YXJ0LCB0bXBfc3RvcCwgUHlfR1QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGhhc19lbGVtZW50cyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHRtcF9zdG9wLCBQeV9MVCk7Ci0gICAgfQotICAgIGlmIChoYXNfZWxlbWVudHMgPT0gLTEpIGdvdG8gRmFpbDsKLQotICAgICpzdGFydCA9IHRtcF9zdGFydDsKLSAgICAqc3RvcCA9IHRtcF9zdG9wOwotICAgICpzdGVwID0gdG1wX3N0ZXA7Ci0gICAgUHlfREVDUkVGKG5lZ19vbmUpOwotICAgIFB5X0RFQ1JFRihvbmUpOwotICAgIFB5X0RFQ1JFRih6ZXJvKTsKLSAgICByZXR1cm4gaGFzX2VsZW1lbnRzOwotCi0gIEZhaWw6Ci0gICAgUHlfWERFQ1JFRih0bXBfc3RhcnQpOwotICAgIFB5X1hERUNSRUYodG1wX3N0b3ApOwotICAgIFB5X1hERUNSRUYodG1wX3N0ZXApOwotICAgIFB5X1hERUNSRUYoY2FuZGlkYXRlKTsKLSAgICBQeV9YREVDUkVGKG5lZ19vbmUpOwotICAgIFB5X1hERUNSRUYob25lKTsKLSAgICBQeV9YREVDUkVGKHplcm8pOwotICAgIHJldHVybiAtMTsKLX0KLQogc3RhdGljIFB5T2JqZWN0ICoKIGNvbXB1dGVfc2xpY2UocmFuZ2VvYmplY3QgKnIsIFB5T2JqZWN0ICpfc2xpY2UpCiB7CkBAIC01MTQsMTAgKzMyNSwxMSBAQAogICAgIHJhbmdlb2JqZWN0ICpyZXN1bHQ7CiAgICAgUHlPYmplY3QgKnN0YXJ0ID0gTlVMTCwgKnN0b3AgPSBOVUxMLCAqc3RlcCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnN1YnN0YXJ0ID0gTlVMTCwgKnN1YnN0b3AgPSBOVUxMLCAqc3Vic3RlcCA9IE5VTEw7Ci0gICAgaW50IGhhc19lbGVtZW50czsKKyAgICBpbnQgZXJyb3I7CiAKLSAgICBoYXNfZWxlbWVudHMgPSBjb21wdXRlX3NsaWNlX2luZGljZXMociwgc2xpY2UsICZzdGFydCwgJnN0b3AsICZzdGVwKTsKLSAgICBpZiAoaGFzX2VsZW1lbnRzID09IC0xKSByZXR1cm4gTlVMTDsKKyAgICBlcnJvciA9IF9QeVNsaWNlX0dldExvbmdJbmRpY2VzKHNsaWNlLCByLT5sZW5ndGgsICZzdGFydCwgJnN0b3AsICZzdGVwKTsKKyAgICBpZiAoZXJyb3IgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgc3Vic3RlcCA9IFB5TnVtYmVyX011bHRpcGx5KHItPnN0ZXAsIHN0ZXApOwogICAgIGlmIChzdWJzdGVwID09IE5VTEwpIGdvdG8gZmFpbDsKQEAgLTUyNywxMyArMzM5LDggQEAKICAgICBpZiAoc3Vic3RhcnQgPT0gTlVMTCkgZ290byBmYWlsOwogICAgIFB5X0NMRUFSKHN0YXJ0KTsKIAotICAgIGlmIChoYXNfZWxlbWVudHMpIHsKLSAgICAgICAgc3Vic3RvcCA9IGNvbXB1dGVfaXRlbShyLCBzdG9wKTsKLSAgICAgICAgaWYgKHN1YnN0b3AgPT0gTlVMTCkgZ290byBmYWlsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN1YnN0b3AgPSBzdWJzdGFydDsKLSAgICAgICAgUHlfSU5DUkVGKHN1YnN0b3ApOwotICAgIH0KKyAgICBzdWJzdG9wID0gY29tcHV0ZV9pdGVtKHIsIHN0b3ApOworICAgIGlmIChzdWJzdG9wID09IE5VTEwpIGdvdG8gZmFpbDsKICAgICBQeV9DTEVBUihzdG9wKTsKIAogICAgIHJlc3VsdCA9IG1ha2VfcmFuZ2Vfb2JqZWN0KFB5X1RZUEUociksIHN1YnN0YXJ0LCBzdWJzdG9wLCBzdWJzdGVwKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc2V0b2JqZWN0LmMgYi9PYmplY3RzL3NldG9iamVjdC5jCmluZGV4IGVhNWEyNGMuLjM0ZTQzYjkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc2V0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zZXRvYmplY3QuYwpAQCAtMSwxNTQgKzEsMTE4IEBACiAKIC8qIHNldCBvYmplY3QgaW1wbGVtZW50YXRpb24KKwogICAgV3JpdHRlbiBhbmQgbWFpbnRhaW5lZCBieSBSYXltb25kIEQuIEhldHRpbmdlciA8cHl0aG9uQHJjbi5jb20+CiAgICBEZXJpdmVkIGZyb20gTGliL3NldHMucHkgYW5kIE9iamVjdHMvZGljdG9iamVjdC5jLgogCi0gICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KKyAgIENvcHlyaWdodCAoYykgMjAwMy0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgVGhlIGJhc2ljIGxvb2t1cCBmdW5jdGlvbiB1c2VkIGJ5IGFsbCBvcGVyYXRpb25zLgorICAgVGhpcyBpcyBiYXNlZCBvbiBBbGdvcml0aG0gRCBmcm9tIEtudXRoIFZvbC4gMywgU2VjLiA2LjQuCisKKyAgIFRoZSBpbml0aWFsIHByb2JlIGluZGV4IGlzIGNvbXB1dGVkIGFzIGhhc2ggbW9kIHRoZSB0YWJsZSBzaXplLgorICAgU3Vic2VxdWVudCBwcm9iZSBpbmRpY2VzIGFyZSBjb21wdXRlZCBhcyBleHBsYWluZWQgaW4gT2JqZWN0cy9kaWN0b2JqZWN0LmMuCisKKyAgIFRvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHksIGVhY2ggcHJvYmUgaW5zcGVjdHMgYSBzZXJpZXMgb2YgY29uc2VjdXRpdmUKKyAgIG5lYXJieSBlbnRyaWVzIGJlZm9yZSBtb3Zpbmcgb24gdG8gcHJvYmVzIGVsc2V3aGVyZSBpbiBtZW1vcnkuICBUaGlzIGxlYXZlcworICAgdXMgd2l0aCBhIGh5YnJpZCBvZiBsaW5lYXIgcHJvYmluZyBhbmQgb3BlbiBhZGRyZXNzaW5nLiAgVGhlIGxpbmVhciBwcm9iaW5nCisgICByZWR1Y2VzIHRoZSBjb3N0IG9mIGhhc2ggY29sbGlzaW9ucyBiZWNhdXNlIGNvbnNlY3V0aXZlIG1lbW9yeSBhY2Nlc3NlcworICAgdGVuZCB0byBiZSBtdWNoIGNoZWFwZXIgdGhhbiBzY2F0dGVyZWQgcHJvYmVzLiAgQWZ0ZXIgTElORUFSX1BST0JFUyBzdGVwcywKKyAgIHdlIHRoZW4gdXNlIG9wZW4gYWRkcmVzc2luZyB3aXRoIHRoZSB1cHBlciBiaXRzIGZyb20gdGhlIGhhc2ggdmFsdWUuICBUaGlzCisgICBoZWxwcyBicmVhay11cCBsb25nIGNoYWlucyBvZiBjb2xsaXNpb25zLgorCisgICBBbGwgYXJpdGhtZXRpYyBvbiBoYXNoIHNob3VsZCBpZ25vcmUgb3ZlcmZsb3cuCisKKyAgIFVubGlrZSB0aGUgZGljdGlvbmFyeSBpbXBsZW1lbnRhdGlvbiwgdGhlIGxvb2trZXkgZnVuY3Rpb25zIGNhbiByZXR1cm4KKyAgIE5VTEwgaWYgdGhlIHJpY2ggY29tcGFyaXNvbiByZXR1cm5zIGFuIGVycm9yLgogKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9lcS5oIgogCi0vKiBTZXQgYSBrZXkgZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50LCB3cmFwcGluZyBpdCBpbiBhCi0gKiB0dXBsZSBhdXRvbWF0aWNhbGx5IHNvIHRoYXQgdHVwbGUga2V5cyBhcmUgbm90IHVucGFja2VkIGFzIHRoZQotICogZXhjZXB0aW9uIGFyZ3VtZW50cy4gKi8KLXN0YXRpYyB2b2lkCi1zZXRfa2V5X2Vycm9yKFB5T2JqZWN0ICphcmcpCi17Ci0gICAgUHlPYmplY3QgKnR1cDsKLSAgICB0dXAgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsKLSAgICBpZiAoIXR1cCkKLSAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgd2lsbCBleHBlY3QgZXJyb3IgdG8gYmUgc2V0IGFueXdheSAqLwotICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgdHVwKTsKLSAgICBQeV9ERUNSRUYodHVwKTsKLX0KKy8qIE9iamVjdCB1c2VkIGFzIGR1bW15IGtleSB0byBmaWxsIGRlbGV0ZWQgZW50cmllcyAqLworc3RhdGljIFB5T2JqZWN0IF9kdW1teV9zdHJ1Y3Q7CiAKLS8qIFRoaXMgbXVzdCBiZSA+PSAxLiAqLworI2RlZmluZSBkdW1teSAoJl9kdW1teV9zdHJ1Y3QpCisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09IEJlZ2luIGxvZ2ljIGZvciBwcm9iaW5nIHRoZSBoYXNoIHRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogU2V0IHRoaXMgdG8gemVybyB0byB0dXJuLW9mZiBsaW5lYXIgcHJvYmluZyAqLworI2lmbmRlZiBMSU5FQVJfUFJPQkVTCisjZGVmaW5lIExJTkVBUl9QUk9CRVMgOQorI2VuZGlmCisKKy8qIFRoaXMgbXVzdCBiZSA+PSAxICovCiAjZGVmaW5lIFBFUlRVUkJfU0hJRlQgNQogCi0vKiBPYmplY3QgdXNlZCBhcyBkdW1teSBrZXkgdG8gZmlsbCBkZWxldGVkIGVudHJpZXMgKi8KLXN0YXRpYyBQeU9iamVjdCAqZHVtbXkgPSBOVUxMOyAvKiBJbml0aWFsaXplZCBieSBmaXJzdCBjYWxsIHRvIG1ha2VfbmV3X3NldCgpICovCi0KLSNpZmRlZiBQeV9SRUZfREVCVUcKLVB5T2JqZWN0ICoKLV9QeVNldF9EdW1teSh2b2lkKQotewotICAgIHJldHVybiBkdW1teTsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIElOSVRfTk9OWkVST19TRVRfU0xPVFMoc28pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChzbyktPnRhYmxlID0gKHNvKS0+c21hbGx0YWJsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoc28pLT5tYXNrID0gUHlTZXRfTUlOU0laRSAtIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHNvKS0+aGFzaCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCkKLQotI2RlZmluZSBFTVBUWV9UT19NSU5TSVpFKHNvKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtZW1zZXQoKHNvKS0+c21hbGx0YWJsZSwgMCwgc2l6ZW9mKChzbyktPnNtYWxsdGFibGUpKTsgICAgICBcCi0gICAgKHNvKS0+dXNlZCA9IChzbyktPmZpbGwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIElOSVRfTk9OWkVST19TRVRfU0xPVFMoc28pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApCi0KLS8qIFJldXNlIHNjaGVtZSB0byBzYXZlIGNhbGxzIHRvIG1hbGxvYywgZnJlZSwgYW5kIG1lbXNldCAqLwotI2lmbmRlZiBQeVNldF9NQVhGUkVFTElTVAotI2RlZmluZSBQeVNldF9NQVhGUkVFTElTVCA4MAotI2VuZGlmCi1zdGF0aWMgUHlTZXRPYmplY3QgKmZyZWVfbGlzdFtQeVNldF9NQVhGUkVFTElTVF07Ci1zdGF0aWMgaW50IG51bWZyZWUgPSAwOwotCi0KLS8qCi1UaGUgYmFzaWMgbG9va3VwIGZ1bmN0aW9uIHVzZWQgYnkgYWxsIG9wZXJhdGlvbnMuCi1UaGlzIGlzIGJhc2VkIG9uIEFsZ29yaXRobSBEIGZyb20gS251dGggVm9sLiAzLCBTZWMuIDYuNC4KLU9wZW4gYWRkcmVzc2luZyBpcyBwcmVmZXJyZWQgb3ZlciBjaGFpbmluZyBzaW5jZSB0aGUgbGluayBvdmVyaGVhZCBmb3IKLWNoYWluaW5nIHdvdWxkIGJlIHN1YnN0YW50aWFsICgxMDAlIHdpdGggdHlwaWNhbCBtYWxsb2Mgb3ZlcmhlYWQpLgotCi1UaGUgaW5pdGlhbCBwcm9iZSBpbmRleCBpcyBjb21wdXRlZCBhcyBoYXNoIG1vZCB0aGUgdGFibGUgc2l6ZS4gU3Vic2VxdWVudAotcHJvYmUgaW5kaWNlcyBhcmUgY29tcHV0ZWQgYXMgZXhwbGFpbmVkIGluIE9iamVjdHMvZGljdG9iamVjdC5jLgotCi1BbGwgYXJpdGhtZXRpYyBvbiBoYXNoIHNob3VsZCBpZ25vcmUgb3ZlcmZsb3cuCi0KLVVubGlrZSB0aGUgZGljdGlvbmFyeSBpbXBsZW1lbnRhdGlvbiwgdGhlIGxvb2trZXkgZnVuY3Rpb25zIGNhbiByZXR1cm4KLU5VTEwgaWYgdGhlIHJpY2ggY29tcGFyaXNvbiByZXR1cm5zIGFuIGVycm9yLgotKi8KLQogc3RhdGljIHNldGVudHJ5ICoKLXNldF9sb29ra2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2gpCitzZXRfbG9va2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCi0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmZyZWVzbG90OwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gc28tPm1hc2s7CiAgICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKLSAgICByZWdpc3RlciBpbnQgY21wOwotICAgIFB5T2JqZWN0ICpzdGFydGtleTsKKyAgICBzZXRlbnRyeSAqZnJlZXNsb3QgPSBOVUxMOworICAgIHNldGVudHJ5ICplbnRyeTsKKyAgICBzaXplX3QgcGVydHVyYiA9IGhhc2g7CisgICAgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKKyAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaDsgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCisgICAgc2l6ZV90IGo7CisgICAgaW50IGNtcDsKIAotICAgIGkgPSAoc2l6ZV90KWhhc2ggJiBtYXNrOwotICAgIGVudHJ5ID0gJnRhYmxlW2ldOwotICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgfHwgZW50cnktPmtleSA9PSBrZXkpCisgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBlbnRyeTsKIAotICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15KQotICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OwotICAgIGVsc2UgewotICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCkgewotICAgICAgICAgICAgc3RhcnRrZXkgPSBlbnRyeS0+a2V5OworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgZW50cnktPmtleSAhPSBkdW1teSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnN0YXJ0a2V5ID0gZW50cnktPmtleTsKICAgICAgICAgICAgIFB5X0lOQ1JFRihzdGFydGtleSk7CiAgICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0a2V5KTsKICAgICAgICAgICAgIGlmIChjbXAgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgaWYgKHRhYmxlID09IHNvLT50YWJsZSAmJiBlbnRyeS0+a2V5ID09IHN0YXJ0a2V5KSB7CisgICAgICAgICAgICBpZiAodGFibGUgIT0gc28tPnRhYmxlIHx8IGVudHJ5LT5rZXkgIT0gc3RhcnRrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOworICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICB9CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCisgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OworCisgICAgICAgIGZvciAoaiA9IDEgOyBqIDw9IExJTkVBUl9QUk9CRVMgOyBqKyspIHsKKyAgICAgICAgICAgIGVudHJ5ID0gJnRhYmxlWyhpICsgaikgJiBtYXNrXTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnRrZXkgPSBlbnRyeS0+a2V5OworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihzdGFydGtleSk7CisgICAgICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0a2V5LCBrZXksIFB5X0VRKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnRrZXkpOworICAgICAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBpZiAodGFibGUgIT0gc28tPnRhYmxlIHx8IGVudHJ5LT5rZXkgIT0gc3RhcnRrZXkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRfbG9va2tleShzbywga2V5LCBoYXNoKTsKICAgICAgICAgICAgICAgICBpZiAoY21wID4gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogVGhlIGNvbXBhcmUgZGlkIG1ham9yIG5hc3R5IHN0dWZmIHRvIHRoZQotICAgICAgICAgICAgICAgICAqIHNldDogIHN0YXJ0IG92ZXIuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OwogICAgICAgICB9Ci0gICAgICAgIGZyZWVzbG90ID0gTlVMTDsKLSAgICB9CiAKLSAgICAvKiBJbiB0aGUgbG9vcCwga2V5ID09IGR1bW15IGlzIGJ5IGZhciAoZmFjdG9yIG9mIDEwMHMpIHRoZQotICAgICAgIGxlYXN0IGxpa2VseSBvdXRjb21lLCBzbyB0ZXN0IGZvciB0aGF0IGxhc3QuICovCi0gICAgZm9yIChwZXJ0dXJiID0gaGFzaDsgOyBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUKSB7Ci0gICAgICAgIGkgPSAoaSA8PCAyKSArIGkgKyBwZXJ0dXJiICsgMTsKKyAgICAgICAgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVDsKKyAgICAgICAgaSA9IGkgKiA1ICsgMSArIHBlcnR1cmI7CisKICAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOwotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoZnJlZXNsb3QgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBlbnRyeSA9IGZyZWVzbG90OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKLSAgICAgICAgICAgIHN0YXJ0a2V5ID0gZW50cnktPmtleTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihzdGFydGtleSk7Ci0gICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOwotICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0a2V5KTsKLSAgICAgICAgICAgIGlmIChjbXAgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgaWYgKHRhYmxlID09IHNvLT50YWJsZSAmJiBlbnRyeS0+a2V5ID09IHN0YXJ0a2V5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNtcCA+IDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogVGhlIGNvbXBhcmUgZGlkIG1ham9yIG5hc3R5IHN0dWZmIHRvIHRoZQotICAgICAgICAgICAgICAgICAqIHNldDogIHN0YXJ0IG92ZXIuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKLSAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CiAgICAgfQotICAgIHJldHVybiBlbnRyeTsKKyAgZm91bmRfbnVsbDoKKyAgICByZXR1cm4gZnJlZXNsb3QgPT0gTlVMTCA/IGVudHJ5IDogZnJlZXNsb3Q7CiB9CiAKIC8qCkBAIC0xNTcsMTQgKzEyMSwxNSBAQAogICogc2VlIGlmIHRoZSBjb21wYXJpc29uIGFsdGVyZWQgdGhlIHRhYmxlLgogICovCiBzdGF0aWMgc2V0ZW50cnkgKgotc2V0X2xvb2trZXlfdW5pY29kZShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoKQorc2V0X2xvb2trZXlfdW5pY29kZShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCi0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmZyZWVzbG90OwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gc28tPm1hc2s7CiAgICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBzZXRlbnRyeSAqZnJlZXNsb3QgPSBOVUxMOworICAgIHNldGVudHJ5ICplbnRyeTsKKyAgICBzaXplX3QgcGVydHVyYiA9IGhhc2g7CisgICAgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKKyAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaDsKKyAgICBzaXplX3QgajsKIAogICAgIC8qIE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSB0byBoYW5kbGUgbm9uLXVuaWNvZGUga2V5cywKICAgICAgICBpbmNsdWRpbmcgc3ViY2xhc3NlcyBvZiBzdHI7IGUuZy4sIG9uZSByZWFzb24gdG8gc3ViY2xhc3MKQEAgLTE3NCw0NiArMTM5LDk0IEBACiAgICAgICAgIHNvLT5sb29rdXAgPSBzZXRfbG9va2tleTsKICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwogICAgIH0KLSAgICBpID0gKHNpemVfdCloYXNoICYgbWFzazsKLSAgICBlbnRyeSA9ICZ0YWJsZVtpXTsKLSAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMIHx8IGVudHJ5LT5rZXkgPT0ga2V5KQotICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkpCi0gICAgICAgIGZyZWVzbG90ID0gZW50cnk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkKLSAgICAgICAgICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgZnJlZXNsb3QgPSBOVUxMOwotICAgIH0KIAotICAgIC8qIEluIHRoZSBsb29wLCBrZXkgPT0gZHVtbXkgaXMgYnkgZmFyIChmYWN0b3Igb2YgMTAwcykgdGhlCi0gICAgICAgbGVhc3QgbGlrZWx5IG91dGNvbWUsIHNvIHRlc3QgZm9yIHRoYXQgbGFzdC4gKi8KLSAgICBmb3IgKHBlcnR1cmIgPSBoYXNoOyA7IHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQpIHsKLSAgICAgICAgaSA9IChpIDw8IDIpICsgaSArIHBlcnR1cmIgKyAxOwotICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gZnJlZXNsb3QgPT0gTlVMTCA/IGVudHJ5IDogZnJlZXNsb3Q7CisgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBlbnRyeTsKKworICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleQogICAgICAgICAgICAgfHwgKGVudHJ5LT5oYXNoID09IGhhc2gKLSAgICAgICAgICAgICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkKLSAgICAgICAgICAgICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkpCisgICAgICAgICAgICAgICAgJiYgZW50cnktPmtleSAhPSBkdW1teQorICAgICAgICAgICAgICAgICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkpCiAgICAgICAgICAgICByZXR1cm4gZW50cnk7CiAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCiAgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OworCisgICAgICAgIGZvciAoaiA9IDEgOyBqIDw9IExJTkVBUl9QUk9CRVMgOyBqKyspIHsKKyAgICAgICAgICAgIGVudHJ5ID0gJnRhYmxlWyhpICsgaikgJiBtYXNrXTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5CisgICAgICAgICAgICAgICAgfHwgKGVudHJ5LT5oYXNoID09IGhhc2gKKyAgICAgICAgICAgICAgICAgICAgJiYgZW50cnktPmtleSAhPSBkdW1teQorICAgICAgICAgICAgICAgICAgICAmJiB1bmljb2RlX2VxKGVudHJ5LT5rZXksIGtleSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKKyAgICAgICAgfQorCisgICAgICAgIHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQ7CisgICAgICAgIGkgPSBpICogNSArIDEgKyBwZXJ0dXJiOworCisgICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKICAgICB9Ci0gICAgYXNzZXJ0KDApOyAgICAgICAgICAvKiBOT1QgUkVBQ0hFRCAqLwotICAgIHJldHVybiAwOworICBmb3VuZF9udWxsOgorICAgIHJldHVybiBmcmVlc2xvdCA9PSBOVUxMID8gZW50cnkgOiBmcmVlc2xvdDsKIH0KIAogLyoKK0ludGVybmFsIHJvdXRpbmUgdXNlZCBieSBzZXRfdGFibGVfcmVzaXplKCkgdG8gaW5zZXJ0IGFuIGl0ZW0gd2hpY2ggaXMKK2tub3duIHRvIGJlIGFic2VudCBmcm9tIHRoZSBzZXQuICBUaGlzIHJvdXRpbmUgYWxzbyBhc3N1bWVzIHRoYXQKK3RoZSBzZXQgY29udGFpbnMgbm8gZGVsZXRlZCBlbnRyaWVzLiAgQmVzaWRlcyB0aGUgcGVyZm9ybWFuY2UgYmVuZWZpdCwKK3VzaW5nIHNldF9pbnNlcnRfY2xlYW4oKSBpbiBzZXRfdGFibGVfcmVzaXplKCkgaXMgZGFuZ2Vyb3VzIChTRiBidWcgIzE0NTYyMDkpLgorTm90ZSB0aGF0IG5vIHJlZmNvdW50cyBhcmUgY2hhbmdlZCBieSB0aGlzIHJvdXRpbmU7IGlmIG5lZWRlZCwgdGhlIGNhbGxlcgoraXMgcmVzcG9uc2libGUgZm9yIGluY3JlZidpbmcgYGtleWAuCisqLworc3RhdGljIHZvaWQKK3NldF9pbnNlcnRfY2xlYW4oUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKK3sKKyAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7CisgICAgc2V0ZW50cnkgKmVudHJ5OworICAgIHNpemVfdCBwZXJ0dXJiID0gaGFzaDsKKyAgICBzaXplX3QgbWFzayA9IChzaXplX3Qpc28tPm1hc2s7CisgICAgc2l6ZV90IGkgPSAoc2l6ZV90KWhhc2g7CisgICAgc2l6ZV90IGo7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgIGZvciAoaiA9IDEgOyBqIDw9IExJTkVBUl9QUk9CRVMgOyBqKyspIHsKKyAgICAgICAgICAgIGVudHJ5ID0gJnRhYmxlWyhpICsgaikgJiBtYXNrXTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOworICAgICAgICB9CisgICAgICAgIHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQ7CisgICAgICAgIGkgPSBpICogNSArIDEgKyBwZXJ0dXJiOworICAgIH0KKyAgZm91bmRfbnVsbDoKKyAgICBlbnRyeS0+a2V5ID0ga2V5OworICAgIGVudHJ5LT5oYXNoID0gaGFzaDsKKyAgICBzby0+ZmlsbCsrOworICAgIHNvLT51c2VkKys7Cit9CisKKy8qID09PT09PT09IEVuZCBsb2dpYyBmb3IgcHJvYmluZyB0aGUgaGFzaCB0YWJsZSA9PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoKIEludGVybmFsIHJvdXRpbmUgdG8gaW5zZXJ0IGEgbmV3IGtleSBpbnRvIHRoZSB0YWJsZS4KIFVzZWQgYnkgdGhlIHB1YmxpYyBpbnNlcnQgcm91dGluZS4KIEVhdHMgYSByZWZlcmVuY2UgdG8ga2V5LgogKi8KIHN0YXRpYyBpbnQKLXNldF9pbnNlcnRfa2V5KHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCitzZXRfaW5zZXJ0X2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQogewotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAKICAgICBhc3NlcnQoc28tPmxvb2t1cCAhPSBOVUxMKTsKICAgICBlbnRyeSA9IHNvLT5sb29rdXAoc28sIGtleSwgaGFzaCk7CkBAIC0yMzAsNyArMjQzLDYgQEAKICAgICAgICAgZW50cnktPmtleSA9IGtleTsKICAgICAgICAgZW50cnktPmhhc2ggPSBoYXNoOwogICAgICAgICBzby0+dXNlZCsrOwotICAgICAgICBQeV9ERUNSRUYoZHVtbXkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIEFDVElWRSAqLwogICAgICAgICBQeV9ERUNSRUYoa2V5KTsKQEAgLTIzOSwzNSArMjUxLDYgQEAKIH0KIAogLyoKLUludGVybmFsIHJvdXRpbmUgdXNlZCBieSBzZXRfdGFibGVfcmVzaXplKCkgdG8gaW5zZXJ0IGFuIGl0ZW0gd2hpY2ggaXMKLWtub3duIHRvIGJlIGFic2VudCBmcm9tIHRoZSBzZXQuICBUaGlzIHJvdXRpbmUgYWxzbyBhc3N1bWVzIHRoYXQKLXRoZSBzZXQgY29udGFpbnMgbm8gZGVsZXRlZCBlbnRyaWVzLiAgQmVzaWRlcyB0aGUgcGVyZm9ybWFuY2UgYmVuZWZpdCwKLXVzaW5nIHNldF9pbnNlcnRfY2xlYW4oKSBpbiBzZXRfdGFibGVfcmVzaXplKCkgaXMgZGFuZ2Vyb3VzIChTRiBidWcgIzE0NTYyMDkpLgotTm90ZSB0aGF0IG5vIHJlZmNvdW50cyBhcmUgY2hhbmdlZCBieSB0aGlzIHJvdXRpbmU7IGlmIG5lZWRlZCwgdGhlIGNhbGxlcgotaXMgcmVzcG9uc2libGUgZm9yIGluY3JlZidpbmcgYGtleWAuCi0qLwotc3RhdGljIHZvaWQKLXNldF9pbnNlcnRfY2xlYW4ocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKLXsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IChzaXplX3Qpc28tPm1hc2s7Ci0gICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKLQotICAgIGkgPSAoc2l6ZV90KWhhc2ggJiBtYXNrOwotICAgIGVudHJ5ID0gJnRhYmxlW2ldOwotICAgIGZvciAocGVydHVyYiA9IGhhc2g7IGVudHJ5LT5rZXkgIT0gTlVMTDsgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVCkgewotICAgICAgICBpID0gKGkgPDwgMikgKyBpICsgcGVydHVyYiArIDE7Ci0gICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKLSAgICB9Ci0gICAgc28tPmZpbGwrKzsKLSAgICBlbnRyeS0+a2V5ID0ga2V5OwotICAgIGVudHJ5LT5oYXNoID0gaGFzaDsKLSAgICBzby0+dXNlZCsrOwotfQotCi0vKgogUmVzdHJ1Y3R1cmUgdGhlIHRhYmxlIGJ5IGFsbG9jYXRpbmcgYSBuZXcgdGFibGUgYW5kIHJlaW5zZXJ0aW5nIGFsbAoga2V5cyBhZ2Fpbi4gIFdoZW4gZW50cmllcyBoYXZlIGJlZW4gZGVsZXRlZCwgdGhlIG5ldyB0YWJsZSBtYXkKIGFjdHVhbGx5IGJlIHNtYWxsZXIgdGhhbiB0aGUgb2xkIG9uZS4KQEAgLTMzMCwyMyArMzEzLDE0IEBACiAgICAgc28tPnRhYmxlID0gbmV3dGFibGU7CiAgICAgc28tPm1hc2sgPSBuZXdzaXplIC0gMTsKICAgICBtZW1zZXQobmV3dGFibGUsIDAsIHNpemVvZihzZXRlbnRyeSkgKiBuZXdzaXplKTsKKyAgICBpID0gc28tPnVzZWQ7CiAgICAgc28tPnVzZWQgPSAwOwotICAgIGkgPSBzby0+ZmlsbDsKICAgICBzby0+ZmlsbCA9IDA7CiAKICAgICAvKiBDb3B5IHRoZSBkYXRhIG92ZXI7IHRoaXMgaXMgcmVmY291bnQtbmV1dHJhbCBmb3IgYWN0aXZlIGVudHJpZXM7CiAgICAgICAgZHVtbXkgZW50cmllcyBhcmVuJ3QgY29waWVkIG92ZXIsIG9mIGNvdXJzZSAqLwogICAgIGZvciAoZW50cnkgPSBvbGR0YWJsZTsgaSA+IDA7IGVudHJ5KyspIHsKLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkgewotICAgICAgICAgICAgLyogVU5VU0VEICovCi0gICAgICAgICAgICA7Ci0gICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmtleSA9PSBkdW1teSkgewotICAgICAgICAgICAgLyogRFVNTVkgKi8KLSAgICAgICAgICAgIC0taTsKLSAgICAgICAgICAgIGFzc2VydChlbnRyeS0+a2V5ID09IGR1bW15KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIEFDVElWRSAqLworICAgICAgICBpZiAoZW50cnktPmtleSAhPSBOVUxMICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKICAgICAgICAgICAgIC0taTsKICAgICAgICAgICAgIHNldF9pbnNlcnRfY2xlYW4oc28sIGVudHJ5LT5rZXksIGVudHJ5LT5oYXNoKTsKICAgICAgICAgfQpAQCAtMzYwLDkgKzMzNCw5IEBACiAvKiBDQVVUSU9OOiBzZXRfYWRkX2tleS9lbnRyeSgpIG11c3QgZ3VhcmFudGVlIGl0IHdvbid0IHJlc2l6ZSB0aGUgdGFibGUgKi8KIAogc3RhdGljIGludAotc2V0X2FkZF9lbnRyeShyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIHNldGVudHJ5ICplbnRyeSkKK3NldF9hZGRfZW50cnkoUHlTZXRPYmplY3QgKnNvLCBzZXRlbnRyeSAqZW50cnkpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBuX3VzZWQ7CisgICAgUHlfc3NpemVfdCBuX3VzZWQ7CiAgICAgUHlPYmplY3QgKmtleSA9IGVudHJ5LT5rZXk7CiAgICAgUHlfaGFzaF90IGhhc2ggPSBlbnRyeS0+aGFzaDsKIApAQCAtMzc5LDEwICszNTMsMTAgQEAKIH0KIAogc3RhdGljIGludAotc2V0X2FkZF9rZXkocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5KQorc2V0X2FkZF9rZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5KQogewotICAgIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgbl91c2VkOworICAgIFB5X2hhc2hfdCBoYXNoOworICAgIFB5X3NzaXplX3Qgbl91c2VkOwogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8CiAgICAgICAgIChoYXNoID0gKChQeUFTQ0lJT2JqZWN0ICopIGtleSktPmhhc2gpID09IC0xKSB7CkBAIC00MDcsNyArMzgxLDcgQEAKIAogc3RhdGljIGludAogc2V0X2Rpc2NhcmRfZW50cnkoUHlTZXRPYmplY3QgKnNvLCBzZXRlbnRyeSAqb2xkZW50cnkpCi17ICAgICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKK3sgICAgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5T2JqZWN0ICpvbGRfa2V5OwogCiAgICAgZW50cnkgPSAoc28tPmxvb2t1cCkoc28sIG9sZGVudHJ5LT5rZXksIG9sZGVudHJ5LT5oYXNoKTsKQEAgLTQxNiw3ICszOTAsNiBAQAogICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgIHx8ICBlbnRyeS0+a2V5ID09IGR1bW15KQogICAgICAgICByZXR1cm4gRElTQ0FSRF9OT1RGT1VORDsKICAgICBvbGRfa2V5ID0gZW50cnktPmtleTsKLSAgICBQeV9JTkNSRUYoZHVtbXkpOwogICAgIGVudHJ5LT5rZXkgPSBkdW1teTsKICAgICBzby0+dXNlZC0tOwogICAgIFB5X0RFQ1JFRihvbGRfa2V5KTsKQEAgLTQyNiw4ICszOTksOCBAQAogc3RhdGljIGludAogc2V0X2Rpc2NhcmRfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKIHsKLSAgICByZWdpc3RlciBQeV9oYXNoX3QgaGFzaDsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgUHlfaGFzaF90IGhhc2g7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5T2JqZWN0ICpvbGRfa2V5OwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwpAQCAtNDQ0LDEzICs0MTcsMjMgQEAKICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMICB8fCAgZW50cnktPmtleSA9PSBkdW1teSkKICAgICAgICAgcmV0dXJuIERJU0NBUkRfTk9URk9VTkQ7CiAgICAgb2xkX2tleSA9IGVudHJ5LT5rZXk7Ci0gICAgUHlfSU5DUkVGKGR1bW15KTsKICAgICBlbnRyeS0+a2V5ID0gZHVtbXk7CiAgICAgc28tPnVzZWQtLTsKICAgICBQeV9ERUNSRUYob2xkX2tleSk7CiAgICAgcmV0dXJuIERJU0NBUkRfRk9VTkQ7CiB9CiAKK3N0YXRpYyB2b2lkCitzZXRfZW1wdHlfdG9fbWluc2l6ZShQeVNldE9iamVjdCAqc28pCit7CisgICAgbWVtc2V0KHNvLT5zbWFsbHRhYmxlLCAwLCBzaXplb2Yoc28tPnNtYWxsdGFibGUpKTsKKyAgICBzby0+ZmlsbCA9IDA7CisgICAgc28tPnVzZWQgPSAwOworICAgIHNvLT5tYXNrID0gUHlTZXRfTUlOU0laRSAtIDE7CisgICAgc28tPnRhYmxlID0gc28tPnNtYWxsdGFibGU7CisgICAgc28tPmhhc2ggPSAtMTsKK30KKwogc3RhdGljIGludAogc2V0X2NsZWFyX2ludGVybmFsKFB5U2V0T2JqZWN0ICpzbykKIHsKQEAgLTQ1OCwxNCArNDQxLDEzIEBACiAgICAgaW50IHRhYmxlX2lzX21hbGxvY2VkOwogICAgIFB5X3NzaXplX3QgZmlsbDsKICAgICBzZXRlbnRyeSBzbWFsbF9jb3B5W1B5U2V0X01JTlNJWkVdOwotI2lmZGVmIFB5X0RFQlVHCi0gICAgUHlfc3NpemVfdCBpLCBuOwotICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKIAotICAgIG4gPSBzby0+bWFzayArIDE7Ci0gICAgaSA9IDA7CisjaWZkZWYgUHlfREVCVUcKKyAgICBQeV9zc2l6ZV90IGkgPSAwOworICAgIFB5X3NzaXplX3QgbiA9IHNvLT5tYXNrICsgMTsKICNlbmRpZgogCisgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogICAgIHRhYmxlID0gc28tPnRhYmxlOwogICAgIGFzc2VydCh0YWJsZSAhPSBOVUxMKTsKICAgICB0YWJsZV9pc19tYWxsb2NlZCA9IHRhYmxlICE9IHNvLT5zbWFsbHRhYmxlOwpAQCAtNDc4LDcgKzQ2MCw3IEBACiAgICAgICovCiAgICAgZmlsbCA9IHNvLT5maWxsOwogICAgIGlmICh0YWJsZV9pc19tYWxsb2NlZCkKLSAgICAgICAgRU1QVFlfVE9fTUlOU0laRShzbyk7CisgICAgICAgIHNldF9lbXB0eV90b19taW5zaXplKHNvKTsKIAogICAgIGVsc2UgaWYgKGZpbGwgPiAwKSB7CiAgICAgICAgIC8qIEl0J3MgYSBzbWFsbCB0YWJsZSB3aXRoIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGNsZWFyZWQuCkBAIC00ODcsNyArNDY5LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIG1lbWNweShzbWFsbF9jb3B5LCB0YWJsZSwgc2l6ZW9mKHNtYWxsX2NvcHkpKTsKICAgICAgICAgdGFibGUgPSBzbWFsbF9jb3B5OwotICAgICAgICBFTVBUWV9UT19NSU5TSVpFKHNvKTsKKyAgICAgICAgc2V0X2VtcHR5X3RvX21pbnNpemUoc28pOwogICAgIH0KICAgICAvKiBlbHNlIGl0J3MgYSBzbWFsbCB0YWJsZSB0aGF0J3MgYWxyZWFkeSBlbXB0eSAqLwogCkBAIC01MDIsNyArNDg0LDggQEAKICNlbmRpZgogICAgICAgICBpZiAoZW50cnktPmtleSkgewogICAgICAgICAgICAgLS1maWxsOwotICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgIT0gZHVtbXkpCisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOwogICAgICAgICB9CiAjaWZkZWYgUHlfREVCVUcKICAgICAgICAgZWxzZQpAQCAtNTMzLDcgKzUxNiw3IEBACiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgbWFzazsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqdGFibGU7CisgICAgc2V0ZW50cnkgKnRhYmxlOwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogICAgIGkgPSAqcG9zX3B0cjsKQEAgLTU1Myw3ICs1MzYsNyBAQAogc3RhdGljIHZvaWQKIHNldF9kZWFsbG9jKFB5U2V0T2JqZWN0ICpzbykKIHsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5X3NzaXplX3QgZmlsbCA9IHNvLT5maWxsOwogICAgIFB5T2JqZWN0X0dDX1VuVHJhY2soc28pOwogICAgIFB5X1RSQVNIQ0FOX1NBRkVfQkVHSU4oc28pCkBAIC01NjMsMTUgKzU0NiwxMyBAQAogICAgIGZvciAoZW50cnkgPSBzby0+dGFibGU7IGZpbGwgPiAwOyBlbnRyeSsrKSB7CiAgICAgICAgIGlmIChlbnRyeS0+a2V5KSB7CiAgICAgICAgICAgICAtLWZpbGw7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSAhPSBkdW1teSkKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHNvLT50YWJsZSAhPSBzby0+c21hbGx0YWJsZSkKICAgICAgICAgUHlNZW1fREVMKHNvLT50YWJsZSk7Ci0gICAgaWYgKG51bWZyZWUgPCBQeVNldF9NQVhGUkVFTElTVCAmJiBQeUFueVNldF9DaGVja0V4YWN0KHNvKSkKLSAgICAgICAgZnJlZV9saXN0W251bWZyZWUrK10gPSBzbzsKLSAgICBlbHNlCi0gICAgICAgIFB5X1RZUEUoc28pLT50cF9mcmVlKHNvKTsKKyAgICBQeV9UWVBFKHNvKS0+dHBfZnJlZShzbyk7CiAgICAgUHlfVFJBU0hDQU5fU0FGRV9FTkQoc28pCiB9CiAKQEAgLTYzMiw4ICs2MTMsOCBAQAogICAgIFB5U2V0T2JqZWN0ICpvdGhlcjsKICAgICBQeU9iamVjdCAqa2V5OwogICAgIFB5X2hhc2hfdCBoYXNoOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgUHlfc3NpemVfdCBpOworICAgIHNldGVudHJ5ICplbnRyeTsKIAogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKG90aGVyc2V0KSk7CkBAIC03MDEsOCArNjgyLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfcG9wKFB5U2V0T2JqZWN0ICpzbykKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGkgPSAwOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9zc2l6ZV90IGkgPSAwOworICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBQeU9iamVjdCAqa2V5OwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwpAQCAtNzM0LDcgKzcxNSw2IEBACiAgICAgICAgIH0KICAgICB9CiAgICAga2V5ID0gZW50cnktPmtleTsKLSAgICBQeV9JTkNSRUYoZHVtbXkpOwogICAgIGVudHJ5LT5rZXkgPSBkdW1teTsKICAgICBzby0+dXNlZC0tOwogICAgIHNvLT50YWJsZVswXS5oYXNoID0gaSArIDE7ICAvKiBuZXh0IHBsYWNlIHRvIHN0YXJ0ICovCkBAIC03NTgsNiArNzM4LDE3IEBACiBzdGF0aWMgUHlfaGFzaF90CiBmcm96ZW5zZXRfaGFzaChQeU9iamVjdCAqc2VsZikKIHsKKyAgICAvKiBNb3N0IG9mIHRoZSBjb25zdGFudHMgaW4gdGhpcyBoYXNoIGFsZ29yaXRobSBhcmUgcmFuZG9tbHkgY2hvb3NlbgorICAgICAgIGxhcmdlIHByaW1lcyB3aXRoICJpbnRlcmVzdGluZyBiaXQgcGF0dGVybnMiIGFuZCB0aGF0IHBhc3NlZAorICAgICAgIHRlc3RzIGZvciBnb29kIGNvbGxpc2lvbiBzdGF0aXN0aWNzIG9uIGEgdmFyaWV0eSBvZiBwcm9ibGVtYXRpYworICAgICAgIGRhdGFzZXRzIHN1Y2ggYXM6CisKKyAgICAgICAgICBwcyA9IFtdCisgICAgICAgICAgZm9yIHIgaW4gcmFuZ2UoMjEpOgorICAgICAgICAgICAgICBwcyArPSBpdGVydG9vbHMuY29tYmluYXRpb25zKHJhbmdlKDIwKSwgcikKKyAgICAgICAgICBudW1fZGlzdGluY3RfaGFzaGVzID0gbGVuKHtoYXNoKGZyb3plbnNldChzKSkgZm9yIHMgaW4gcHN9KQorCisgICAgKi8KICAgICBQeVNldE9iamVjdCAqc28gPSAoUHlTZXRPYmplY3QgKilzZWxmOwogICAgIFB5X3VoYXNoX3QgaCwgaGFzaCA9IDE5Mjc4NjgyMzdVTDsKICAgICBzZXRlbnRyeSAqZW50cnk7CkBAIC03NzQsOCArNzY1LDEwIEBACiAgICAgICAgICAgIGhhc2hlcyBzbyB0aGF0IG1hbnkgZGlzdGluY3QgY29tYmluYXRpb25zIGNvbGxhcHNlIHRvIG9ubHkKICAgICAgICAgICAgYSBoYW5kZnVsIG9mIGRpc3RpbmN0IGhhc2ggdmFsdWVzLiAqLwogICAgICAgICBoID0gZW50cnktPmhhc2g7Ci0gICAgICAgIGhhc2ggXj0gKGggXiAoaCA8PCAxNikgXiA4OTg2OTc0N1VMKSAgKiAzNjQ0Nzk4MTY3VUw7CisgICAgICAgIGhhc2ggXj0gKChoIF4gODk4Njk3NDdVTCkgXiAoaCA8PCAxNikpICogMzY0NDc5ODE2N1VMOwogICAgIH0KKyAgICAvKiBNYWtlIHRoZSBmaW5hbCByZXN1bHQgc3ByZWFkLW91dCBpbiBhIGRpZmZlcmVudCBwYXR0ZXJuCisgICAgICAgdGhhbiB0aGUgYWxnb3JpdGhtIGZvciB0dXBsZXMgb3Igb3RoZXIgcHl0aG9uIG9iamVjdHMuICovCiAgICAgaGFzaCA9IGhhc2ggKiA2OTA2OVUgKyA5MDcxMzM5MjNVTDsKICAgICBpZiAoaGFzaCA9PSAtMSkKICAgICAgICAgaGFzaCA9IDU5MDkyMzcxM1VMOwpAQCAtODY5LDggKzg2Miw4IEBACiBzdGF0aWMgUHlPYmplY3QgKnNldGl0ZXJfaXRlcm5leHQoc2V0aXRlcm9iamVjdCAqc2kpCiB7CiAgICAgUHlPYmplY3QgKmtleTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2s7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIFB5X3NzaXplX3QgaSwgbWFzazsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlTZXRPYmplY3QgKnNvID0gc2ktPnNpX3NldDsKIAogICAgIGlmIChzbyA9PSBOVUxMKQpAQCAtMTAyNCwzMyArMTAxNywxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1ha2VfbmV3X3NldChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICppdGVyYWJsZSkKIHsKLSAgICByZWdpc3RlciBQeVNldE9iamVjdCAqc28gPSBOVUxMOwotCi0gICAgaWYgKGR1bW15ID09IE5VTEwpIHsgLyogQXV0by1pbml0aWFsaXplIGR1bW15ICovCi0gICAgICAgIGR1bW15ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxkdW1teSBrZXk+Iik7Ci0gICAgICAgIGlmIChkdW1teSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIFB5U2V0T2JqZWN0ICpzbyA9IE5VTEw7CiAKICAgICAvKiBjcmVhdGUgUHlTZXRPYmplY3Qgc3RydWN0dXJlICovCi0gICAgaWYgKG51bWZyZWUgJiYKLSAgICAgICAgKHR5cGUgPT0gJlB5U2V0X1R5cGUgIHx8ICB0eXBlID09ICZQeUZyb3plblNldF9UeXBlKSkgewotICAgICAgICBzbyA9IGZyZWVfbGlzdFstLW51bWZyZWVdOwotICAgICAgICBhc3NlcnQgKHNvICE9IE5VTEwgJiYgUHlBbnlTZXRfQ2hlY2tFeGFjdChzbykpOwotICAgICAgICBQeV9UWVBFKHNvKSA9IHR5cGU7Ci0gICAgICAgIF9QeV9OZXdSZWZlcmVuY2UoKFB5T2JqZWN0ICopc28pOwotICAgICAgICBFTVBUWV9UT19NSU5TSVpFKHNvKTsKLSAgICAgICAgUHlPYmplY3RfR0NfVHJhY2soc28pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNvID0gKFB5U2V0T2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7Ci0gICAgICAgIGlmIChzbyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIC8qIHRwX2FsbG9jIGhhcyBhbHJlYWR5IHplcm9lZCB0aGUgc3RydWN0dXJlICovCi0gICAgICAgIGFzc2VydChzby0+dGFibGUgPT0gTlVMTCAmJiBzby0+ZmlsbCA9PSAwICYmIHNvLT51c2VkID09IDApOwotICAgICAgICBJTklUX05PTlpFUk9fU0VUX1NMT1RTKHNvKTsKLSAgICB9CisgICAgc28gPSAoUHlTZXRPYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBpZiAoc28gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBzby0+ZmlsbCA9IDA7CisgICAgc28tPnVzZWQgPSAwOworICAgIHNvLT5tYXNrID0gUHlTZXRfTUlOU0laRSAtIDE7CisgICAgc28tPnRhYmxlID0gc28tPnNtYWxsdGFibGU7CiAgICAgc28tPmxvb2t1cCA9IHNldF9sb29ra2V5X3VuaWNvZGU7CisgICAgc28tPmhhc2ggPSAtMTsKICAgICBzby0+d2Vha3JlZmxpc3QgPSBOVUxMOwogCiAgICAgaWYgKGl0ZXJhYmxlICE9IE5VTEwpIHsKQEAgLTExMTMsMzUgKzEwOTIsMTUgQEAKIGludAogUHlTZXRfQ2xlYXJGcmVlTGlzdCh2b2lkKQogewotICAgIGludCBmcmVlbGlzdF9zaXplID0gbnVtZnJlZTsKLSAgICBQeVNldE9iamVjdCAqc287Ci0KLSAgICB3aGlsZSAobnVtZnJlZSkgewotICAgICAgICBudW1mcmVlLS07Ci0gICAgICAgIHNvID0gZnJlZV9saXN0W251bWZyZWVdOwotICAgICAgICBQeU9iamVjdF9HQ19EZWwoc28pOwotICAgIH0KLSAgICByZXR1cm4gZnJlZWxpc3Rfc2l6ZTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZAogUHlTZXRfRmluaSh2b2lkKQogewotICAgIFB5U2V0X0NsZWFyRnJlZUxpc3QoKTsKLSAgICBQeV9DTEVBUihkdW1teSk7CiAgICAgUHlfQ0xFQVIoZW1wdHlmcm96ZW5zZXQpOwogfQogCi0vKiBQcmludCBzdW1tYXJ5IGluZm8gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBvcHRpbWl6ZWQgYWxsb2NhdG9yICovCi12b2lkCi1fUHlTZXRfRGVidWdNYWxsb2NTdGF0cyhGSUxFICpvdXQpCi17Ci0gICAgX1B5RGVidWdBbGxvY2F0b3JTdGF0cyhvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJlZSBQeVNldE9iamVjdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBudW1mcmVlLCBzaXplb2YoUHlTZXRPYmplY3QpKTsKLX0KLQotCiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKQEAgLTE5NTIsNyArMTkxMSw3IEBACiAgICAgfQogCiAgICAgaWYgKHJ2ID09IERJU0NBUkRfTk9URk9VTkQpIHsKLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMjM5Niw2ICsyMzU1LDkgQEAKICAgICByZXR1cm4gc2V0X3VwZGF0ZV9pbnRlcm5hbCgoUHlTZXRPYmplY3QgKilzZXQsIGl0ZXJhYmxlKTsKIH0KIAorLyogRXhwb3J0ZWQgZm9yIHRoZSBnZGIgcGx1Z2luJ3MgYmVuZWZpdC4gKi8KK1B5T2JqZWN0ICpfUHlTZXRfRHVtbXkgPSBkdW1teTsKKwogI2lmZGVmIFB5X0RFQlVHCiAKIC8qIFRlc3QgY29kZSB0byBiZSBjYWxsZWQgd2l0aCBhbnkgdGhyZWUgZWxlbWVudCBzZXQuCkBAIC0yNDE0LDcgKzIzNzYsNyBAQAogICAgIFB5X3NzaXplX3QgY291bnQ7CiAgICAgY2hhciAqczsKICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKmVsZW09TlVMTCwgKmR1cD1OVUxMLCAqdCwgKmYsICpkdXAyLCAqeDsKKyAgICBQeU9iamVjdCAqZWxlbT1OVUxMLCAqZHVwPU5VTEwsICp0LCAqZiwgKmR1cDIsICp4PU5VTEw7CiAgICAgUHlPYmplY3QgKm9iID0gKFB5T2JqZWN0ICopc287CiAgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlPYmplY3QgKnN0cjsKQEAgLTI1MzcsMyArMjQ5OSw0NiBAQAogI3VuZGVmIGFzc2VydFJhaXNlcwogCiAjZW5kaWYKKworLyoqKioqIER1bW15IFN0cnVjdCAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2R1bW15X3JlcHIoUHlPYmplY3QgKm9wKQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiPGR1bW15IGtleT4iKTsKK30KKworc3RhdGljIHZvaWQKK2R1bW15X2RlYWxsb2MoUHlPYmplY3QqIGlnbm9yZSkKK3sKKyAgICBQeV9GYXRhbEVycm9yKCJkZWFsbG9jYXRpbmcgPGR1bW15IGtleT4iKTsKK30KKworc3RhdGljIFB5VHlwZU9iamVjdCBfUHlTZXREdW1teV9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCisgICAgIjxkdW1teSBrZXk+IHR5cGUiLAorICAgIDAsCisgICAgMCwKKyAgICBkdW1teV9kZWFsbG9jLCAgICAgIC8qdHBfZGVhbGxvYyovIC8qbmV2ZXIgY2FsbGVkKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkKi8KKyAgICBkdW1teV9yZXByLCAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9zdHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxULCAvKnRwX2ZsYWdzICovCit9OworCitzdGF0aWMgUHlPYmplY3QgX2R1bW15X3N0cnVjdCA9IHsKKyAgX1B5T2JqZWN0X0VYVFJBX0lOSVQKKyAgMiwgJl9QeVNldER1bW15X1R5cGUKK307CisKZGlmZiAtLWdpdCBhL09iamVjdHMvc2xpY2VvYmplY3QuYyBiL09iamVjdHMvc2xpY2VvYmplY3QuYwppbmRleCAxNTkzMzM1Li4xMDQ5NTIzIDEwMDY0NAotLS0gYS9PYmplY3RzL3NsaWNlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zbGljZW9iamVjdC5jCkBAIC0zMyw2ICszMywxNyBAQAogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiRWxsaXBzaXMiKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2VsbGlwc2lzX3JlZHVjZShQeU9iamVjdCAqb3ApCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJFbGxpcHNpcyIpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgZWxsaXBzaXNfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbillbGxpcHNpc19yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKIFB5VHlwZU9iamVjdCBQeUVsbGlwc2lzX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKICAgICAiZWxsaXBzaXMiLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCkBAIC02MSw3ICs3Miw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZWxsaXBzaXNfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC0yOTksMjMgKzMxMCwxOTggQEAKICAgICB7MH0KIH07CiAKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgc2xpY2UgYXJndW1lbnQgdG8gYSBQeUxvbmcsIGFuZCByYWlzZSBUeXBlRXJyb3IKKyAgIHdpdGggYSBzdWl0YWJsZSBtZXNzYWdlIG9uIGZhaWx1cmUuICovCisKK3N0YXRpYyBQeU9iamVjdCoKK2V2YWx1YXRlX3NsaWNlX2luZGV4KFB5T2JqZWN0ICp2KQoreworICAgIGlmIChQeUluZGV4X0NoZWNrKHYpKSB7CisgICAgICAgIHJldHVybiBQeU51bWJlcl9JbmRleCh2KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2UgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJOb25lIG9yIGhhdmUgYW4gX19pbmRleF9fIG1ldGhvZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKy8qIENvbXB1dGUgc2xpY2UgaW5kaWNlcyBnaXZlbiBhIHNsaWNlIGFuZCBsZW5ndGguICBSZXR1cm4gLTEgb24gZmFpbHVyZS4gIFVzZWQKKyAgIGJ5IHNsaWNlLmluZGljZXMgYW5kIHJhbmdlb2JqZWN0IHNsaWNpbmcuICBBc3N1bWVzIHRoYXQgYGxlbmAgaXMgYQorICAgbm9ubmVnYXRpdmUgaW5zdGFuY2Ugb2YgUHlMb25nLiAqLworCitpbnQKK19QeVNsaWNlX0dldExvbmdJbmRpY2VzKFB5U2xpY2VPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0YXJ0X3B0ciwgUHlPYmplY3QgKipzdG9wX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqc3RlcF9wdHIpCit7CisgICAgUHlPYmplY3QgKnN0YXJ0PU5VTEwsICpzdG9wPU5VTEwsICpzdGVwPU5VTEw7CisgICAgUHlPYmplY3QgKnVwcGVyPU5VTEwsICpsb3dlcj1OVUxMOworICAgIGludCBzdGVwX2lzX25lZ2F0aXZlLCBjbXBfcmVzdWx0OworCisgICAgLyogQ29udmVydCBzdGVwIHRvIGFuIGludGVnZXI7IHJhaXNlIGZvciB6ZXJvIHN0ZXAuICovCisgICAgaWYgKHNlbGYtPnN0ZXAgPT0gUHlfTm9uZSkgeworICAgICAgICBzdGVwID0gUHlMb25nX0Zyb21Mb25nKDFMKTsKKyAgICAgICAgaWYgKHN0ZXAgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHN0ZXBfaXNfbmVnYXRpdmUgPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaW50IHN0ZXBfc2lnbjsKKyAgICAgICAgc3RlcCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNlbGYtPnN0ZXApOworICAgICAgICBpZiAoc3RlcCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgc3RlcF9zaWduID0gX1B5TG9uZ19TaWduKHN0ZXApOworICAgICAgICBpZiAoc3RlcF9zaWduID09IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBzdGVwIGNhbm5vdCBiZSB6ZXJvIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHN0ZXBfaXNfbmVnYXRpdmUgPSBzdGVwX3NpZ24gPCAwOworICAgIH0KKworICAgIC8qIEZpbmQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBmb3Igc3RhcnQgYW5kIHN0b3AuICovCisgICAgaWYgKHN0ZXBfaXNfbmVnYXRpdmUpIHsKKyAgICAgICAgbG93ZXIgPSBQeUxvbmdfRnJvbUxvbmcoLTFMKTsKKyAgICAgICAgaWYgKGxvd2VyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHVwcGVyID0gUHlOdW1iZXJfQWRkKGxlbmd0aCwgbG93ZXIpOworICAgICAgICBpZiAodXBwZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsb3dlciA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7CisgICAgICAgIGlmIChsb3dlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICB1cHBlciA9IGxlbmd0aDsKKyAgICAgICAgUHlfSU5DUkVGKHVwcGVyKTsKKyAgICB9CisKKyAgICAvKiBDb21wdXRlIHN0YXJ0LiAqLworICAgIGlmIChzZWxmLT5zdGFydCA9PSBQeV9Ob25lKSB7CisgICAgICAgIHN0YXJ0ID0gc3RlcF9pc19uZWdhdGl2ZSA/IHVwcGVyIDogbG93ZXI7CisgICAgICAgIFB5X0lOQ1JFRihzdGFydCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdGFydCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNlbGYtPnN0YXJ0KTsKKyAgICAgICAgaWYgKHN0YXJ0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChfUHlMb25nX1NpZ24oc3RhcnQpIDwgMCkgeworICAgICAgICAgICAgLyogc3RhcnQgKz0gbGVuZ3RoICovCisgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gUHlOdW1iZXJfQWRkKHN0YXJ0LCBsZW5ndGgpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0KTsKKyAgICAgICAgICAgIHN0YXJ0ID0gdG1wOworICAgICAgICAgICAgaWYgKHN0YXJ0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydCwgbG93ZXIsIFB5X0xUKTsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYobG93ZXIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydCk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBsb3dlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnQsIHVwcGVyLCBQeV9HVCk7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHVwcGVyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnQpOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gdXBwZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDb21wdXRlIHN0b3AuICovCisgICAgaWYgKHNlbGYtPnN0b3AgPT0gUHlfTm9uZSkgeworICAgICAgICBzdG9wID0gc3RlcF9pc19uZWdhdGl2ZSA/IGxvd2VyIDogdXBwZXI7CisgICAgICAgIFB5X0lOQ1JFRihzdG9wKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0b3AgPSBldmFsdWF0ZV9zbGljZV9pbmRleChzZWxmLT5zdG9wKTsKKyAgICAgICAgaWYgKHN0b3AgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKF9QeUxvbmdfU2lnbihzdG9wKSA8IDApIHsKKyAgICAgICAgICAgIC8qIHN0b3AgKz0gbGVuZ3RoICovCisgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gUHlOdW1iZXJfQWRkKHN0b3AsIGxlbmd0aCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcCk7CisgICAgICAgICAgICBzdG9wID0gdG1wOworICAgICAgICAgICAgaWYgKHN0b3AgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0b3AsIGxvd2VyLCBQeV9MVCk7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGxvd2VyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcCk7CisgICAgICAgICAgICAgICAgc3RvcCA9IGxvd2VyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdG9wLCB1cHBlciwgUHlfR1QpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih1cHBlcik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0b3ApOworICAgICAgICAgICAgICAgIHN0b3AgPSB1cHBlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICpzdGFydF9wdHIgPSBzdGFydDsKKyAgICAqc3RvcF9wdHIgPSBzdG9wOworICAgICpzdGVwX3B0ciA9IHN0ZXA7CisgICAgUHlfREVDUkVGKHVwcGVyKTsKKyAgICBQeV9ERUNSRUYobG93ZXIpOworICAgIHJldHVybiAwOworCisgIGVycm9yOgorICAgICpzdGFydF9wdHIgPSAqc3RvcF9wdHIgPSAqc3RlcF9wdHIgPSBOVUxMOworICAgIFB5X1hERUNSRUYoc3RhcnQpOworICAgIFB5X1hERUNSRUYoc3RvcCk7CisgICAgUHlfWERFQ1JFRihzdGVwKTsKKyAgICBQeV9YREVDUkVGKHVwcGVyKTsKKyAgICBQeV9YREVDUkVGKGxvd2VyKTsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIHNsaWNlLmluZGljZXMuICovCisKIHN0YXRpYyBQeU9iamVjdCoKIHNsaWNlX2luZGljZXMoUHlTbGljZU9iamVjdCogc2VsZiwgUHlPYmplY3QqIGxlbikKIHsKLSAgICBQeV9zc2l6ZV90IGlsZW4sIHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbmd0aDsKKyAgICBQeU9iamVjdCAqc3RhcnQsICpzdG9wLCAqc3RlcDsKKyAgICBQeU9iamVjdCAqbGVuZ3RoOworICAgIGludCBlcnJvcjsKIAotICAgIGlsZW4gPSBQeU51bWJlcl9Bc1NzaXplX3QobGVuLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKKyAgICAvKiBDb252ZXJ0IGxlbmd0aCB0byBhbiBpbnRlZ2VyIGlmIG5lY2Vzc2FyeTsgcmFpc2UgZm9yIG5lZ2F0aXZlIGxlbmd0aC4gKi8KKyAgICBsZW5ndGggPSBQeU51bWJlcl9JbmRleChsZW4pOworICAgIGlmIChsZW5ndGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoaWxlbiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgaWYgKF9QeUxvbmdfU2lnbihsZW5ndGgpIDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGggc2hvdWxkIG5vdCBiZSBuZWdhdGl2ZSIpOworICAgICAgICBQeV9ERUNSRUYobGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeU9iamVjdCopc2VsZiwgaWxlbiwgJnN0YXJ0LCAmc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ZXAsICZzbGljZWxlbmd0aCkgPCAwKSB7CisgICAgZXJyb3IgPSBfUHlTbGljZV9HZXRMb25nSW5kaWNlcyhzZWxmLCBsZW5ndGgsICZzdGFydCwgJnN0b3AsICZzdGVwKTsKKyAgICBQeV9ERUNSRUYobGVuZ3RoKTsKKyAgICBpZiAoZXJyb3IgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIobm5uKSIsIHN0YXJ0LCBzdG9wLCBzdGVwKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTk5OKSIsIHN0YXJ0LCBzdG9wLCBzdGVwKTsKIH0KIAogUHlEb2NfU1RSVkFSKHNsaWNlX2luZGljZXNfZG9jLApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaCBiL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmgKaW5kZXggZjYyODEzZC4uZDBmYzE4ZCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgKICNkZWZpbmUgU1RSSU5HTElCX05FVyhTVFIsTEVOKSAgIF9QeVVuaWNvZGVfRnJvbUFTQ0lJKChjaGFyKikoU1RSKSwoTEVOKSkKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIG5vdF9zdXBwb3J0ZWQKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmggYi9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaAppbmRleCBmMzUzMzY3Li4yZWIyZDE0IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaApAQCAtMzgsOCArMzgsOCBAQAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmIChfUHlfSVNfQUxJR05FRChzLCBTSVpFT0ZfTE9ORykpIHsKICAgICAgICAgICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCBjaGFyICpfcyA9IHM7Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXIgU1RSSU5HTElCX0NIQVIgKl9wID0gcDsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfcyA9IHM7CisgICAgICAgICAgICAgICAgU1RSSU5HTElCX0NIQVIgKl9wID0gcDsKICAgICAgICAgICAgICAgICB3aGlsZSAoX3MgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGEgd2hvbGUgbG9uZyBhdCBhIHRpbWUgKGVpdGhlciA0IG9yIDggYnl0ZXMpLAogICAgICAgICAgICAgICAgICAgICAgICBhbmQgZG8gYSBmYXN0IHVucm9sbGVkIGNvcHkgaWYgaXQgb25seSBjb250YWlucyBBU0NJSQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKih1bnNpZ25lZCBsb25nICopIF9zOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiBBU0NJSV9DSEFSX01BU0spCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgorI2lmIFBZX0xJVFRMRV9FTkRJQU4KICAgICAgICAgICAgICAgICAgICAgX3BbMF0gPSAoU1RSSU5HTElCX0NIQVIpKHZhbHVlICYgMHhGRnUpOwogICAgICAgICAgICAgICAgICAgICBfcFsxXSA9IChTVFJJTkdMSUJfQ0hBUikoKHZhbHVlID4+IDgpICYgMHhGRnUpOwogICAgICAgICAgICAgICAgICAgICBfcFsyXSA9IChTVFJJTkdMSUJfQ0hBUikoKHZhbHVlID4+IDE2KSAmIDB4RkZ1KTsKQEAgLTQ4Niw3ICs0ODYsNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEgPSAqaW5wdHI7CiAgICAgU1RSSU5HTElCX0NIQVIgKnAgPSBkZXN0ICsgKm91dHBvczsKICAgICAvKiBPZmZzZXRzIGZyb20gcSBmb3IgcmV0cmlldmluZyBieXRlIHBhaXJzIGluIHRoZSByaWdodCBvcmRlci4gKi8KLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgorI2lmIFBZX0xJVFRMRV9FTkRJQU4KICAgICBpbnQgaWhpID0gISFuYXRpdmVfb3JkZXJpbmcsIGlsbyA9ICFuYXRpdmVfb3JkZXJpbmc7CiAjZWxzZQogICAgIGludCBpaGkgPSAhbmF0aXZlX29yZGVyaW5nLCBpbG8gPSAhIW5hdGl2ZV9vcmRlcmluZzsKQEAgLTQ5OSw3ICs0OTksNyBAQAogICAgICAgICAgICByZWFkcyBhcmUgbW9yZSBleHBlbnNpdmUsIGJldHRlciB0byBkZWZlciB0byBhbm90aGVyIGl0ZXJhdGlvbi4gKi8KICAgICAgICAgaWYgKF9QeV9JU19BTElHTkVEKHEsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAgICAgLyogRmFzdCBwYXRoIGZvciBydW5zIG9mIGluLXJhbmdlIG5vbi1zdXJyb2dhdGUgY2hhcnMuICovCi0gICAgICAgICAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpfcSA9IHE7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfcSA9IHE7CiAgICAgICAgICAgICB3aGlsZSAoX3EgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2sgPSAqICh1bnNpZ25lZCBsb25nICopIF9xOwogICAgICAgICAgICAgICAgIGlmIChuYXRpdmVfb3JkZXJpbmcpIHsKQEAgLTUxNyw3ICs1MTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBibG9jayA9IFNXQUIoYmxvY2spOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogIyBpZiBTSVpFT0ZfTE9ORyA9PSA0CiAgICAgICAgICAgICAgICAgcFswXSA9IChTVFJJTkdMSUJfQ0hBUikoYmxvY2sgJiAweEZGRkZ1KTsKICAgICAgICAgICAgICAgICBwWzFdID0gKFNUUklOR0xJQl9DSEFSKShibG9jayA+PiAxNik7CkBAIC01OTYsMjYgKzU5NiwzMCBAQAogI3VuZGVmIFNXQUIKIAogCi1QeV9MT0NBTF9JTkxJTkUodm9pZCkKLVNUUklOR0xJQih1dGYxNl9lbmNvZGUpKHVuc2lnbmVkIHNob3J0ICpvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqaW4sCisjaWYgU1RSSU5HTElCX01BWF9DSEFSID49IDB4ODAKK1B5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQorU1RSSU5HTElCKHV0ZjE2X2VuY29kZSkoY29uc3QgU1RSSU5HTElCX0NIQVIgKmluLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqKm91dHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYXRpdmVfb3JkZXJpbmcpCiB7CisgICAgdW5zaWduZWQgc2hvcnQgKm91dCA9ICpvdXRwdHI7CiAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKmVuZCA9IGluICsgbGVuOwogI2lmIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiA9PSAxCi0jIGRlZmluZSBTV0FCMihDSCkgICgoQ0gpIDw8IDgpCi0jZWxzZQotIyBkZWZpbmUgU1dBQjIoQ0gpICAoKChDSCkgPDwgOCkgfCAoKENIKSA+PiA4KSkKLSNlbmRpZgotI2lmIFNUUklOR0xJQl9NQVhfQ0hBUiA8IDB4MTAwMDAKICAgICBpZiAobmF0aXZlX29yZGVyaW5nKSB7Ci0jIGlmIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiA9PSAyCi0gICAgICAgIFB5X01FTUNQWShvdXQsIGluLCAyICogbGVuKTsKLSMgZWxzZQotICAgICAgICBfUHlVbmljb2RlX0NPTlZFUlRfQllURVMoU1RSSU5HTElCX0NIQVIsIHVuc2lnbmVkIHNob3J0LCBpbiwgZW5kLCBvdXQpOwotIyBlbmRpZgorICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CisgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgeworICAgICAgICAgICAgb3V0WzBdID0gaW5bMF07CisgICAgICAgICAgICBvdXRbMV0gPSBpblsxXTsKKyAgICAgICAgICAgIG91dFsyXSA9IGluWzJdOworICAgICAgICAgICAgb3V0WzNdID0gaW5bM107CisgICAgICAgICAgICBpbiArPSA0OyBvdXQgKz0gNDsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoaW4gPCBlbmQpIHsKKyAgICAgICAgICAgICpvdXQrKyA9ICppbisrOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKKyMgZGVmaW5lIFNXQUIyKENIKSAgKChDSCkgPDwgOCkgLyogaGlnaCBieXRlIGlzIHplcm8gKi8KICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnVucm9sbGVkX2VuZCA9IGluICsgX1B5X1NJWkVfUk9VTkRfRE9XTihsZW4sIDQpOwogICAgICAgICB3aGlsZSAoaW4gPCB1bnJvbGxlZF9lbmQpIHsKICAgICAgICAgICAgIG91dFswXSA9IFNXQUIyKGluWzBdKTsKQEAgLTYyNSwzNyArNjI5LDk1IEBACiAgICAgICAgICAgICBpbiArPSA0OyBvdXQgKz0gNDsKICAgICAgICAgfQogICAgICAgICB3aGlsZSAoaW4gPCBlbmQpIHsKLSAgICAgICAgICAgICpvdXQrKyA9IFNXQUIyKCppbik7Ci0gICAgICAgICAgICArK2luOworICAgICAgICAgICAgUHlfVUNTNCBjaCA9ICppbisrOworICAgICAgICAgICAgKm91dCsrID0gU1dBQjIoKFB5X1VDUzIpY2gpOwogICAgICAgICB9CisjdW5kZWYgU1dBQjIKICAgICB9CisgICAgKm91dHB0ciA9IG91dDsKKyAgICByZXR1cm4gbGVuOwogI2Vsc2UKICAgICBpZiAobmF0aXZlX29yZGVyaW5nKSB7CisjaWYgU1RSSU5HTElCX01BWF9DSEFSIDwgMHgxMDAwMAorICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CisgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgeworICAgICAgICAgICAgLyogY2hlY2sgaWYgYW55IGNoYXJhY3RlciBpcyBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIGlmICgoKGluWzBdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblsxXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMl0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzNdIF4gMHhkODAwKSAmIDB4ZjgwMCkgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG91dFswXSA9IGluWzBdOworICAgICAgICAgICAgb3V0WzFdID0gaW5bMV07CisgICAgICAgICAgICBvdXRbMl0gPSBpblsyXTsKKyAgICAgICAgICAgIG91dFszXSA9IGluWzNdOworICAgICAgICAgICAgaW4gKz0gNDsgb3V0ICs9IDQ7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICB3aGlsZSAoaW4gPCBlbmQpIHsKLSAgICAgICAgICAgIFB5X1VDUzQgY2ggPSAqaW4rKzsKLSAgICAgICAgICAgIGlmIChjaCA8IDB4MTAwMDApCisgICAgICAgICAgICBQeV9VQ1M0IGNoOworICAgICAgICAgICAgY2ggPSAqaW4rKzsKKyAgICAgICAgICAgIGlmIChjaCA8IDB4ZDgwMCkKICAgICAgICAgICAgICAgICAqb3V0KysgPSBjaDsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAweGUwMDApCisgICAgICAgICAgICAgICAgLyogcmVqZWN0IHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIChVK0RDODAwLVUrREZGRikgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisjaWYgU1RSSU5HTElCX01BWF9DSEFSID49IDB4MTAwMDAKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID49IDB4MTAwMDApIHsKICAgICAgICAgICAgICAgICBvdXRbMF0gPSBQeV9VTklDT0RFX0hJR0hfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgICAgICBvdXRbMV0gPSBQeV9VTklDT0RFX0xPV19TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIG91dCArPSAyOwogICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKm91dCsrID0gY2g7CiAgICAgICAgIH0KICAgICB9IGVsc2UgeworI2RlZmluZSBTV0FCMihDSCkgICgoKENIKSA8PCA4KSB8ICgoQ0gpID4+IDgpKQorI2lmIFNUUklOR0xJQl9NQVhfQ0hBUiA8IDB4MTAwMDAKKyAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnVucm9sbGVkX2VuZCA9IGluICsgX1B5X1NJWkVfUk9VTkRfRE9XTihsZW4sIDQpOworICAgICAgICB3aGlsZSAoaW4gPCB1bnJvbGxlZF9lbmQpIHsKKyAgICAgICAgICAgIC8qIGNoZWNrIGlmIGFueSBjaGFyYWN0ZXIgaXMgYSBzdXJyb2dhdGUgY2hhcmFjdGVyICovCisgICAgICAgICAgICBpZiAoKChpblswXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMV0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzJdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblszXSBeIDB4ZDgwMCkgJiAweGY4MDApID09IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBvdXRbMF0gPSBTV0FCMihpblswXSk7CisgICAgICAgICAgICBvdXRbMV0gPSBTV0FCMihpblsxXSk7CisgICAgICAgICAgICBvdXRbMl0gPSBTV0FCMihpblsyXSk7CisgICAgICAgICAgICBvdXRbM10gPSBTV0FCMihpblszXSk7CisgICAgICAgICAgICBpbiArPSA0OyBvdXQgKz0gNDsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIHdoaWxlIChpbiA8IGVuZCkgewogICAgICAgICAgICAgUHlfVUNTNCBjaCA9ICppbisrOwotICAgICAgICAgICAgaWYgKGNoIDwgMHgxMDAwMCkKKyAgICAgICAgICAgIGlmIChjaCA8IDB4ZDgwMCkKICAgICAgICAgICAgICAgICAqb3V0KysgPSBTV0FCMigoUHlfVUNTMiljaCk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhlMDAwKQorICAgICAgICAgICAgICAgIC8qIHJlamVjdCBzdXJyb2dhdGUgY2hhcmFjdGVycyAoVStEQzgwMC1VK0RGRkYpICovCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworI2lmIFNUUklOR0xJQl9NQVhfQ0hBUiA+PSAweDEwMDAwCisgICAgICAgICAgICBlbHNlIGlmIChjaCA+PSAweDEwMDAwKSB7CiAgICAgICAgICAgICAgICAgUHlfVUNTMiBjaDEgPSBQeV9VTklDT0RFX0hJR0hfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgICAgICBQeV9VQ1MyIGNoMiA9IFB5X1VOSUNPREVfTE9XX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICAgICAgb3V0WzBdID0gU1dBQjIoY2gxKTsKICAgICAgICAgICAgICAgICBvdXRbMV0gPSBTV0FCMihjaDIpOwogICAgICAgICAgICAgICAgIG91dCArPSAyOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogI2VuZGlmCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKm91dCsrID0gU1dBQjIoKFB5X1VDUzIpY2gpOworICAgICAgICB9CiAjdW5kZWYgU1dBQjIKKyAgICB9CisgICAgKm91dHB0ciA9IG91dDsKKyAgICByZXR1cm4gbGVuOworICBmYWlsOgorICAgICpvdXRwdHIgPSBvdXQ7CisgICAgcmV0dXJuIGxlbiAtIChlbmQgLSBpbiArIDEpOworI2VuZGlmCiB9CisjZW5kaWYKKwogI2VuZGlmIC8qIFNUUklOR0xJQl9JU19VTklDT0RFICovCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9lcS5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaAppbmRleCAzZTVmNTEwLi5mOGZkMzg0IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9lcS5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2VxLmgKQEAgLTYsOCArNiw4IEBACiBQeV9MT0NBTF9JTkxJTkUoaW50KQogdW5pY29kZV9lcShQeU9iamVjdCAqYWEsIFB5T2JqZWN0ICpiYikKIHsKLSAgICByZWdpc3RlciBQeVVuaWNvZGVPYmplY3QgKmEgPSAoUHlVbmljb2RlT2JqZWN0ICopYWE7Ci0gICAgcmVnaXN0ZXIgUHlVbmljb2RlT2JqZWN0ICpiID0gKFB5VW5pY29kZU9iamVjdCAqKWJiOworICAgIFB5VW5pY29kZU9iamVjdCAqYSA9IChQeVVuaWNvZGVPYmplY3QgKilhYTsKKyAgICBQeVVuaWNvZGVPYmplY3QgKmIgPSAoUHlVbmljb2RlT2JqZWN0ICopYmI7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGEpID09IC0xIHx8IFB5VW5pY29kZV9SRUFEWShiKSA9PSAtMSkgewogICAgICAgICBhc3NlcnQoMCAmJiAidW5pY29kZV9lcSByZWFkeSBmYWlsIik7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmggYi9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKaW5kZXggNTVhYzc3ZC4uY2Q3Y2FjNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaApAQCAtMTQyLDYgKzE0Miw4IEBACiAgICAgbWFzayA9IDA7CiAKICAgICBpZiAobW9kZSAhPSBGQVNUX1JTRUFSQ0gpIHsKKyAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnNzID0gcyArIG0gLSAxOworICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqcHAgPSBwICsgbSAtIDE7CiAKICAgICAgICAgLyogY3JlYXRlIGNvbXByZXNzZWQgYm95ZXItbW9vcmUgZGVsdGEgMSB0YWJsZSAqLwogCkBAIC0xNTYsNyArMTU4LDcgQEAKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IHc7IGkrKykgewogICAgICAgICAgICAgLyogbm90ZTogdXNpbmcgbWxhc3QgaW4gdGhlIHNraXAgcGF0aCBzbG93cyB0aGluZ3MgZG93biBvbiB4ODYgKi8KLSAgICAgICAgICAgIGlmIChzW2krbS0xXSA9PSBwW20tMV0pIHsKKyAgICAgICAgICAgIGlmIChzc1tpXSA9PSBwcFswXSkgewogICAgICAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSBtYXRjaCAqLwogICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBtbGFzdDsgaisrKQogICAgICAgICAgICAgICAgICAgICBpZiAoc1tpK2pdICE9IHBbal0pCkBAIC0xNzIsMTMgKzE3NCwxMyBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLyogbWlzczogY2hlY2sgaWYgbmV4dCBjaGFyYWN0ZXIgaXMgcGFydCBvZiBwYXR0ZXJuICovCi0gICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc1tpK21dKSkKKyAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzc1tpKzFdKSkKICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBtOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBza2lwOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiBza2lwOiBjaGVjayBpZiBuZXh0IGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KLSAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzW2krbV0pKQorICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNzW2krMV0pKQogICAgICAgICAgICAgICAgICAgICBpID0gaSArIG07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCBiL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaAppbmRleCAwNjU1OWM4Li5lYjNmZTg4IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgd2hpbGUgKHAgPCBlbmQpIHsKICAgICAgICAgaWYgKF9QeV9JU19BTElHTkVEKHAsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAgICAgLyogSGVscCByZWdpc3RlciBhbGxvY2F0aW9uICovCi0gICAgICAgICAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpfcCA9IHA7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfcCA9IHA7CiAgICAgICAgICAgICB3aGlsZSAoX3AgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAqKHVuc2lnbmVkIGxvbmcgKikgX3A7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYgVUNTMV9BU0NJSV9DSEFSX01BU0spCkBAIC02Niw3ICs2Niw3IEBACiAjZWxzZQogI2Vycm9yIEludmFsaWQgU1RSSU5HTElCX1NJWkVPRl9DSEFSIChtdXN0IGJlIDEsIDIgb3IgNCkKICNlbmRpZgotICAgIHJlZ2lzdGVyIFB5X1VDUzQgbWFzazsKKyAgICBQeV9VQ1M0IG1hc2s7CiAgICAgUHlfc3NpemVfdCBuID0gZW5kIC0gYmVnaW47CiAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnAgPSBiZWdpbjsKICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gYmVnaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKG4sIDQpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvam9pbi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvam9pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NjhiMzEKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qIHN0cmluZ2xpYjogYnl0ZXMgam9pbmluZyBpbXBsZW1lbnRhdGlvbiAqLworCisjaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSICE9IDEKKyNlcnJvciBqb2luLmggb25seSBjb21wYXRpYmxlIHdpdGggYnl0ZS13aXNlIHN0cmluZ3MKKyNlbmRpZgorCitQeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKK1NUUklOR0xJQihieXRlc19qb2luKShQeU9iamVjdCAqc2VwLCBQeU9iamVjdCAqaXRlcmFibGUpCit7CisgICAgY2hhciAqc2Vwc3RyID0gU1RSSU5HTElCX1NUUihzZXApOworICAgIGNvbnN0IFB5X3NzaXplX3Qgc2VwbGVuID0gU1RSSU5HTElCX0xFTihzZXApOworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworICAgIGNoYXIgKnA7CisgICAgUHlfc3NpemVfdCBzZXFsZW4gPSAwOworICAgIFB5X3NzaXplX3Qgc3ogPSAwOworICAgIFB5X3NzaXplX3QgaSwgbmJ1ZnM7CisgICAgUHlPYmplY3QgKnNlcSwgKml0ZW07CisgICAgUHlfYnVmZmVyICpidWZmZXJzID0gTlVMTDsKKyNkZWZpbmUgTkJfU1RBVElDX0JVRkZFUlMgMTAKKyAgICBQeV9idWZmZXIgc3RhdGljX2J1ZmZlcnNbTkJfU1RBVElDX0JVRkZFUlNdOworCisgICAgc2VxID0gUHlTZXF1ZW5jZV9GYXN0KGl0ZXJhYmxlLCAiY2FuIG9ubHkgam9pbiBhbiBpdGVyYWJsZSIpOworICAgIGlmIChzZXEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZXFsZW4gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoc2VxKTsKKyAgICBpZiAoc2VxbGVuID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgIHJldHVybiBTVFJJTkdMSUJfTkVXKE5VTEwsIDApOworICAgIH0KKyNpZm5kZWYgU1RSSU5HTElCX01VVEFCTEUKKyAgICBpZiAoc2VxbGVuID09IDEpIHsKKyAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIDApOworICAgICAgICBpZiAoU1RSSU5HTElCX0NIRUNLX0VYQUNUKGl0ZW0pKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIHJldHVybiBpdGVtOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgaWYgKHNlcWxlbiA+IE5CX1NUQVRJQ19CVUZGRVJTKSB7CisgICAgICAgIGJ1ZmZlcnMgPSBQeU1lbV9ORVcoUHlfYnVmZmVyLCBzZXFsZW4pOworICAgICAgICBpZiAoYnVmZmVycyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYnVmZmVycyA9IHN0YXRpY19idWZmZXJzOworICAgIH0KKworICAgIC8qIEhlcmUgaXMgdGhlIGdlbmVyYWwgY2FzZS4gIERvIGEgcHJlLXBhc3MgdG8gZmlndXJlIG91dCB0aGUgdG90YWwKKyAgICAgKiBhbW91bnQgb2Ygc3BhY2Ugd2UnbGwgbmVlZCAoc3opLCBhbmQgc2VlIHdoZXRoZXIgYWxsIGFyZ3VtZW50cyBhcmUKKyAgICAgKiBidWZmZXItY29tcGF0aWJsZS4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwLCBuYnVmcyA9IDA7IGkgPCBzZXFsZW47IGkrKykgeworICAgICAgICBQeV9zc2l6ZV90IGl0ZW1sZW47CisgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKKyAgICAgICAgaWYgKF9nZXRidWZmZXIoaXRlbSwgJmJ1ZmZlcnNbaV0pIDwgMCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2VxdWVuY2UgaXRlbSAlemQ6IGV4cGVjdGVkIGJ5dGVzLCBieXRlYXJyYXksICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAib3IgYW4gb2JqZWN0IHdpdGggdGhlIGJ1ZmZlciBpbnRlcmZhY2UsICUuODBzIGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpLCBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgbmJ1ZnMgPSBpICsgMTsgIC8qIGZvciBlcnJvciBjbGVhbnVwICovCisgICAgICAgIGl0ZW1sZW4gPSBidWZmZXJzW2ldLmxlbjsKKyAgICAgICAgaWYgKGl0ZW1sZW4gPiBQWV9TU0laRV9UX01BWCAtIHN6KSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiam9pbigpIHJlc3VsdCBpcyB0b28gbG9uZyIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBzeiArPSBpdGVtbGVuOworICAgICAgICBpZiAoaSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoc2VwbGVuID4gUFlfU1NJWkVfVF9NQVggLSBzeikgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiam9pbigpIHJlc3VsdCBpcyB0b28gbG9uZyIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeiArPSBzZXBsZW47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlcWxlbiAhPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoc2VxKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VxdWVuY2UgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBbGxvY2F0ZSByZXN1bHQgc3BhY2UuICovCisgICAgcmVzID0gU1RSSU5HTElCX05FVyhOVUxMLCBzeik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgLyogQ2F0ZW5hdGUgZXZlcnl0aGluZy4gKi8KKyAgICBwID0gU1RSSU5HTElCX1NUUihyZXMpOworICAgIGlmICghc2VwbGVuKSB7CisgICAgICAgIC8qIGZhc3QgcGF0aCAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmJ1ZnM7IGkrKykgeworICAgICAgICAgICAgUHlfc3NpemVfdCBuID0gYnVmZmVyc1tpXS5sZW47CisgICAgICAgICAgICBjaGFyICpxID0gYnVmZmVyc1tpXS5idWY7CisgICAgICAgICAgICBQeV9NRU1DUFkocCwgcSwgbik7CisgICAgICAgICAgICBwICs9IG47CisgICAgICAgIH0KKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgbmJ1ZnM7IGkrKykgeworICAgICAgICBQeV9zc2l6ZV90IG47CisgICAgICAgIGNoYXIgKnE7CisgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICBQeV9NRU1DUFkocCwgc2Vwc3RyLCBzZXBsZW4pOworICAgICAgICAgICAgcCArPSBzZXBsZW47CisgICAgICAgIH0KKyAgICAgICAgbiA9IGJ1ZmZlcnNbaV0ubGVuOworICAgICAgICBxID0gYnVmZmVyc1tpXS5idWY7CisgICAgICAgIFB5X01FTUNQWShwLCBxLCBuKTsKKyAgICAgICAgcCArPSBuOworICAgIH0KKyAgICBnb3RvIGRvbmU7CisKK2Vycm9yOgorICAgIHJlcyA9IE5VTEw7Citkb25lOgorICAgIFB5X0RFQ1JFRihzZXEpOworICAgIGZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSsrKQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXJzW2ldKTsKKyAgICBpZiAoYnVmZmVycyAhPSBzdGF0aWNfYnVmZmVycykKKyAgICAgICAgUHlNZW1fRlJFRShidWZmZXJzKTsKKyAgICByZXR1cm4gcmVzOworfQorCisjdW5kZWYgTkJfU1RBVElDX0JVRkZFUlMKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKaW5kZXggNDBjYjUxMi4uZWQzMmE2ZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKQEAgLTI5LDYgKzI5LDExIEBACiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCBTVFJJTkdMSUJfTkVXKHN0ciwgc3RyX2xlbikpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMSwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAyLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKKworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG91dCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogI2Vsc2UKICAgICAgICAgUHlfSU5DUkVGKHN0cl9vYmopOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgKFB5T2JqZWN0Kikgc3RyX29iaik7CkBAIC03OSw2ICs4NCwxMSBAQAogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAxLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDIsIFNUUklOR0xJQl9ORVcoc3RyLCBzdHJfbGVuKSk7CisKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvdXQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICNlbHNlCiAgICAgICAgIFB5X0lOQ1JFRihTVFJJTkdMSUJfRU1QVFkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgKFB5T2JqZWN0KikgU1RSSU5HTElCX0VNUFRZKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3JlcGxhY2UuaCBiL09iamVjdHMvc3RyaW5nbGliL3JlcGxhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjMxOGVkCi0tLSAvZGV2L251bGwKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qIHN0cmluZ2xpYjogcmVwbGFjZSBpbXBsZW1lbnRhdGlvbiAqLworCisjaWZuZGVmIFNUUklOR0xJQl9GQVNUU0VBUkNIX0gKKyNlcnJvciBtdXN0IGluY2x1ZGUgInN0cmluZ2xpYi9mYXN0c2VhcmNoLmgiIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBtb2R1bGUKKyNlbmRpZgorCitQeV9MT0NBTF9JTkxJTkUodm9pZCkKK1NUUklOR0xJQihyZXBsYWNlXzFjaGFyX2lucGxhY2UpKFNUUklOR0xJQl9DSEFSKiBzLCBTVFJJTkdMSUJfQ0hBUiogZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCB1MSwgUHlfVUNTNCB1MiwgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICAqcyA9IHUyOworICAgIHdoaWxlICgtLW1heGNvdW50ICYmICsrcyAhPSBlbmQpIHsKKyAgICAgICAgLyogRmluZCB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgcmVwbGFjZWQuCisKKyAgICAgICAgICAgSWYgaXQgb2NjdXJzIG9mdGVuLCBpdCBpcyBmYXN0ZXIgdG8gc2NhbiBmb3IgaXQgdXNpbmcgYW4gaW5saW5lCisgICAgICAgICAgIGxvb3AuICBJZiBpdCBvY2N1cnMgc2VsZG9tLCBpdCBpcyBmYXN0ZXIgdG8gc2NhbiBmb3IgaXQgdXNpbmcgYQorICAgICAgICAgICBmdW5jdGlvbiBjYWxsOyB0aGUgb3ZlcmhlYWQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaXMgYW1vcnRpemVkCisgICAgICAgICAgIGFjcm9zcyB0aGUgbWFueSBjaGFyYWN0ZXJzIHRoYXQgY2FsbCBjb3ZlcnMuICBXZSBzdGFydCB3aXRoIGFuCisgICAgICAgICAgIGlubGluZSBsb29wIGFuZCB1c2UgYSBoZXVyaXN0aWMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gZmFsbCBiYWNrCisgICAgICAgICAgIHRvIGEgZnVuY3Rpb24gY2FsbC4gKi8KKyAgICAgICAgaWYgKCpzICE9IHUxKSB7CisgICAgICAgICAgICBpbnQgYXR0ZW1wdHMgPSAxMDsKKyAgICAgICAgICAgIC8qIHNlYXJjaCB1MSBpbiBhIGR1bW15IGxvb3AgKi8KKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrcyA9PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gdTEpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICghLS1hdHRlbXB0cykgeworICAgICAgICAgICAgICAgICAgICAvKiBpZiB1MSB3YXMgbm90IGZvdW5kIGZvciBhdHRlbXB0cyBpdGVyYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICB1c2UgRkFTVFNFQVJDSCgpIG9yIG1lbWNocigpICovCisjaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSID09IDEKKyAgICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAgICBzID0gbWVtY2hyKHMsIHUxLCBlbmQgLSBzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgICAgICAgICAgU1RSSU5HTElCX0NIQVIgY2gxID0gKFNUUklOR0xJQl9DSEFSKSB1MTsKKyAgICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAgICBpID0gRkFTVFNFQVJDSChzLCBlbmQgLSBzLCAmY2gxLCAxLCAwLCBGQVNUX1NFQVJDSCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcyArPSBpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIC8qIHJlc3RhcnQgdGhlIGR1bW15IGxvb3AgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICpzID0gdTI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBiL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmgKaW5kZXggOTQ3ZGQyOC4uMzFmNzdhNyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oCkBAIC0zNDUsOCArMzQ1LDggQEAKICAgICAgICBhbmQgdGhlIGFwcGVuZHMgb25seSBkb25lIHdoZW4gdGhlIHByZWFsbG9jIGJ1ZmZlciBpcyBmdWxsLgogICAgICAgIFRoYXQncyB0b28gbXVjaCB3b3JrIGZvciBsaXR0bGUgZ2Fpbi4qLwogCi0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBqOwogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldygwKTsKICAgICBQeU9iamVjdCAqc3ViOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmggYi9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgKaW5kZXggN2JiOTFhNy4uY2UyN2YzZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaApAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIF9QeUJ5dGVzX1Jlc2l6ZQogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlCeXRlc19DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlCeXRlc19DaGVja0V4YWN0CiAjZGVmaW5lIFNUUklOR0xJQl9UT1NUUiAgICAgICAgICBQeU9iamVjdF9TdHIKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKaW5kZXggOTBmYTEyOS4uZGQwMDk3NiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKQEAgLTUsMjEgKzUsMjMgQEAKICAgIHNoYXJlZCBjb2RlIGluIGJ5dGVzX21ldGhvZHMuYyB0byBjdXQgZG93biBvbiBkdXBsaWNhdGUgY29kZSBibG9hdC4gICovCiAKIFB5RG9jX1NUUlZBUihleHBhbmR0YWJzX19kb2NfXywKLSJCLmV4cGFuZHRhYnMoW3RhYnNpemVdKSAtPiBjb3B5IG9mIEJcblwKKyJCLmV4cGFuZHRhYnModGFic2l6ZT04KSAtPiBjb3B5IG9mIEJcblwKIFxuXAogUmV0dXJuIGEgY29weSBvZiBCIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgZXhwYW5kZWQgdXNpbmcgc3BhY2VzLlxuXAogSWYgdGFic2l6ZSBpcyBub3QgZ2l2ZW4sIGEgdGFiIHNpemUgb2YgOCBjaGFyYWN0ZXJzIGlzIGFzc3VtZWQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCoKLXN0cmluZ2xpYl9leHBhbmR0YWJzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3N0cmluZ2xpYl9leHBhbmR0YWJzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgY29uc3QgY2hhciAqZSwgKnA7CiAgICAgY2hhciAqcTsKICAgICBzaXplX3QgaSwgajsKICAgICBQeU9iamVjdCAqdTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InRhYnNpemUiLCAwfTsKICAgICBpbnQgdGFic2l6ZSA9IDg7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmV4cGFuZHRhYnMiLCAmdGFic2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxpOmV4cGFuZHRhYnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnRhYnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEZpcnN0IHBhc3M6IGRldGVybWluZSBzaXplIG9mIG91dHB1dCBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaCBiL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaAppbmRleCBlOGM2ZmNiLi5jZTFlYjU3IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbVVDUzEKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIG5vdF9zdXBwb3J0ZWQKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oCmluZGV4IDQ1ZTU3MjkuLmY5MDBjYjYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV8yQllURV9EQVRBCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSAogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgX1B5VW5pY29kZV9Gcm9tVUNTMgotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgbm90X3N1cHBvcnRlZAogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmggYi9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmgKaW5kZXggNjQ3YTI3ZS4uODZhNDgwZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlXzRCWVRFX0RBVEEKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RICiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBfUHlVbmljb2RlX0Zyb21VQ1M0Ci0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBub3Rfc3VwcG9ydGVkCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmggYi9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oCmluZGV4IDAzMTE3ZWMuLmY5ZDNmMWQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaApAQCAtNiw3ICs2LDYgQEAKICN1bmRlZiAgU1RSSU5HTElCX1NUUgogI3VuZGVmICBTVFJJTkdMSUJfTEVOCiAjdW5kZWYgIFNUUklOR0xJQl9ORVcKLSN1bmRlZiAgU1RSSU5HTElCX1JFU0laRQogI3VuZGVmICBfUHlfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcKICN1bmRlZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaAppbmRleCBkNDcxOWE1Li5hZWMyMjFhIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmgKQEAgLTU0Myw3ICs1NDMsNyBAQAogCiBzdGF0aWMgaW50CiBwYXJzZV9maWVsZChTdWJTdHJpbmcgKnN0ciwgU3ViU3RyaW5nICpmaWVsZF9uYW1lLCBTdWJTdHJpbmcgKmZvcm1hdF9zcGVjLAotICAgICAgICAgICAgUHlfVUNTNCAqY29udmVyc2lvbikKKyAgICAgICAgICAgIGludCAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nLCBQeV9VQ1M0ICpjb252ZXJzaW9uKQogewogICAgIC8qIE5vdGUgdGhpcyBmdW5jdGlvbiB3b3JrcyBpZiB0aGUgZmllbGQgbmFtZSBpcyB6ZXJvIGxlbmd0aCwKICAgICAgICB3aGljaCBpcyBnb29kLiAgWmVybyBsZW5ndGggZmllbGQgbmFtZXMgYXJlIGhhbmRsZWQgbGF0ZXIsIGluCkBAIC01NjEsNiArNTYxLDE1IEBACiAgICAgZmllbGRfbmFtZS0+c3RhcnQgPSBzdHItPnN0YXJ0OwogICAgIHdoaWxlIChzdHItPnN0YXJ0IDwgc3RyLT5lbmQpIHsKICAgICAgICAgc3dpdGNoICgoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKykpKSB7CisgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmV4cGVjdGVkICd7JyBpbiBmaWVsZCBuYW1lIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICBmb3IgKDsgc3RyLT5zdGFydCA8IHN0ci0+ZW5kOyBzdHItPnN0YXJ0KyspCisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQpID09ICddJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnfSc6CiAgICAgICAgIGNhc2UgJzonOgogICAgICAgICBjYXNlICchJzoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTcwLDQxICs1NzksNjIgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgZmllbGRfbmFtZS0+ZW5kID0gc3RyLT5zdGFydCAtIDE7CiAgICAgaWYgKGMgPT0gJyEnIHx8IGMgPT0gJzonKSB7CisgICAgICAgIFB5X3NzaXplX3QgY291bnQ7CiAgICAgICAgIC8qIHdlIGhhdmUgYSBmb3JtYXQgc3BlY2lmaWVyIGFuZC9vciBhIGNvbnZlcnNpb24gKi8KICAgICAgICAgLyogZG9uJ3QgaW5jbHVkZSB0aGUgbGFzdCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgZmllbGRfbmFtZS0+ZW5kID0gc3RyLT5zdGFydC0xOwotCi0gICAgICAgIC8qIHRoZSBmb3JtYXQgc3BlY2lmaWVyIGlzIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgKi8KLSAgICAgICAgZm9ybWF0X3NwZWMtPnN0ciA9IHN0ci0+c3RyOwotICAgICAgICBmb3JtYXRfc3BlYy0+c3RhcnQgPSBzdHItPnN0YXJ0OwotICAgICAgICBmb3JtYXRfc3BlYy0+ZW5kID0gc3RyLT5lbmQ7CiAKICAgICAgICAgLyogc2VlIGlmIHRoZXJlJ3MgYSBjb252ZXJzaW9uIHNwZWNpZmllciAqLwogICAgICAgICBpZiAoYyA9PSAnIScpIHsKICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYW5vdGhlciBjaGFyYWN0ZXIgcHJlc2VudCAqLwotICAgICAgICAgICAgaWYgKGZvcm1hdF9zcGVjLT5zdGFydCA+PSBmb3JtYXRfc3BlYy0+ZW5kKSB7CisgICAgICAgICAgICBpZiAoc3RyLT5zdGFydCA+PSBzdHItPmVuZCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kIG9mIGZvcm1hdCB3aGlsZSBsb29raW5nIGZvciBjb252ZXJzaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZCBvZiBzdHJpbmcgd2hpbGUgbG9va2luZyBmb3IgY29udmVyc2lvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGVjaWZpZXIiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpjb252ZXJzaW9uID0gUHlVbmljb2RlX1JFQURfQ0hBUihmb3JtYXRfc3BlYy0+c3RyLCBmb3JtYXRfc3BlYy0+c3RhcnQrKyk7CisgICAgICAgICAgICAqY29udmVyc2lvbiA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKyk7CiAKLSAgICAgICAgICAgIC8qIGlmIHRoZXJlIGlzIGFub3RoZXIgY2hhcmFjdGVyLCBpdCBtdXN0IGJlIGEgY29sb24gKi8KLSAgICAgICAgICAgIGlmIChmb3JtYXRfc3BlYy0+c3RhcnQgPCBmb3JtYXRfc3BlYy0+ZW5kKSB7Ci0gICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoZm9ybWF0X3NwZWMtPnN0ciwgZm9ybWF0X3NwZWMtPnN0YXJ0KyspOworICAgICAgICAgICAgaWYgKHN0ci0+c3RhcnQgPCBzdHItPmVuZCkgeworICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KyspOworICAgICAgICAgICAgICAgIGlmIChjID09ICd9JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgaWYgKGMgIT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICc6JyBhZnRlciBmb3JtYXQgc3BlY2lmaWVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJzonIGFmdGVyIGNvbnZlcnNpb24gc3BlY2lmaWVyIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBmb3JtYXRfc3BlYy0+c3RyID0gc3RyLT5zdHI7CisgICAgICAgIGZvcm1hdF9zcGVjLT5zdGFydCA9IHN0ci0+c3RhcnQ7CisgICAgICAgIGNvdW50ID0gMTsKKyAgICAgICAgd2hpbGUgKHN0ci0+c3RhcnQgPCBzdHItPmVuZCkgeworICAgICAgICAgICAgc3dpdGNoICgoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKykpKSB7CisgICAgICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgICAgICAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nID0gMTsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAgICAgICAgY291bnQtLTsKKyAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlYy0+ZW5kID0gc3RyLT5zdGFydCAtIDE7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVubWF0Y2hlZCAneycgaW4gZm9ybWF0IHNwZWMiKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgLyogZW5kIG9mIHN0cmluZywgdGhlcmUncyBubyBmb3JtYXRfc3BlYyBvciBjb252ZXJzaW9uICovCi0gICAgICAgIGZpZWxkX25hbWUtPmVuZCA9IHN0ci0+c3RhcnQ7CisgICAgZWxzZSBpZiAoYyAhPSAnfScpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJleHBlY3RlZCAnfScgYmVmb3JlIGVuZCBvZiBzdHJpbmciKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgcmV0dXJuIDE7CiB9CkBAIC02MzgsMTAgKzY2OCw5IEBACiAgICAgICAgICAgICAgICAgICAgIFN1YlN0cmluZyAqZm9ybWF0X3NwZWMsIFB5X1VDUzQgKmNvbnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgIGludCAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nKQogewotICAgIGludCBhdF9lbmQsIGhpdF9mb3JtYXRfc3BlYzsKKyAgICBpbnQgYXRfZW5kOwogICAgIFB5X1VDUzQgYyA9IDA7CiAgICAgUHlfc3NpemVfdCBzdGFydDsKLSAgICBpbnQgY291bnQ7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgaW50IG1hcmt1cF9mb2xsb3dzID0gMDsKIApAQCAtNzEzLDUyICs3NDIsMTIgQEAKICAgICBpZiAoIW1hcmt1cF9mb2xsb3dzKQogICAgICAgICByZXR1cm4gMjsKIAotICAgIC8qIHRoaXMgaXMgbWFya3VwLCBmaW5kIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBieSBjb3VudGluZyBuZXN0ZWQKLSAgICAgICBicmFjZXMuICBub3RlIHRoYXQgdGhpcyBwcm9oaWJpdHMgZXNjYXBlZCBicmFjZXMsIHNvIHRoYXQKLSAgICAgICBmb3JtYXRfc3BlY3MgY2Fubm90IGhhdmUgYnJhY2VzIGluIHRoZW0uICovCisgICAgLyogdGhpcyBpcyBtYXJrdXA7IHBhcnNlIHRoZSBmaWVsZCAqLwogICAgICpmaWVsZF9wcmVzZW50ID0gMTsKLSAgICBjb3VudCA9IDE7Ci0KLSAgICBzdGFydCA9IHNlbGYtPnN0ci5zdGFydDsKLQotICAgIC8qIHdlIGtub3cgd2UgY2FuJ3QgaGF2ZSBhIHplcm8gbGVuZ3RoIHN0cmluZywgc28gZG9uJ3Qgd29ycnkKLSAgICAgICBhYm91dCB0aGF0IGNhc2UgKi8KLSAgICBoaXRfZm9ybWF0X3NwZWMgPSAwOwotICAgIHdoaWxlIChzZWxmLT5zdHIuc3RhcnQgPCBzZWxmLT5zdHIuZW5kKSB7Ci0gICAgICAgIHN3aXRjaCAoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc2VsZi0+c3RyLnN0ciwgc2VsZi0+c3RyLnN0YXJ0KyspKSB7Ci0gICAgICAgIGNhc2UgJzonOgotICAgICAgICAgICAgaWYgKCFoaXRfZm9ybWF0X3NwZWMpIHsKLSAgICAgICAgICAgICAgICBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgaGl0X2Zvcm1hdF9zcGVjID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd7JzoKLSAgICAgICAgICAgIC8qIHRoZSBmb3JtYXQgc3BlYyBuZWVkcyB0byBiZSByZWN1cnNpdmVseSBleHBhbmRlZC4KLSAgICAgICAgICAgICAgIHRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLCBhbmQgbm90IHN0cmljdGx5IG5lZWRlZCAqLwotICAgICAgICAgICAgaWYgKGhpdF9mb3JtYXRfc3BlYykKLSAgICAgICAgICAgICAgICAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nID0gMTsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnfSc6Ci0gICAgICAgICAgICBjb3VudC0tOwotICAgICAgICAgICAgaWYgKGNvdW50IDw9IDApIHsKLSAgICAgICAgICAgICAgICAvKiB3ZSdyZSBkb25lLiAgcGFyc2UgYW5kIGdldCBvdXQgKi8KLSAgICAgICAgICAgICAgICBTdWJTdHJpbmcgczsKLQotICAgICAgICAgICAgICAgIFN1YlN0cmluZ19pbml0KCZzLCBzZWxmLT5zdHIuc3RyLCBzdGFydCwgc2VsZi0+c3RyLnN0YXJ0IC0gMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlX2ZpZWxkKCZzLCBmaWVsZF9uYW1lLCBmb3JtYXRfc3BlYywgY29udmVyc2lvbikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgICAgICAvKiBzdWNjZXNzICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIGVuZCBvZiBzdHJpbmcgd2hpbGUgc2VhcmNoaW5nIGZvciBtYXRjaGluZyAnfScgKi8KLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVubWF0Y2hlZCAneycgaW4gZm9ybWF0Iik7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFwYXJzZV9maWVsZCgmc2VsZi0+c3RyLCBmaWVsZF9uYW1lLCBmb3JtYXRfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZywgY29udmVyc2lvbikpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAyOwogfQogCiAKQEAgLTg3NywyNSArODY2LDE5IEBACiAgICAgU3ViU3RyaW5nIGxpdGVyYWw7CiAgICAgU3ViU3RyaW5nIGZpZWxkX25hbWU7CiAgICAgU3ViU3RyaW5nIGZvcm1hdF9zcGVjOwotICAgIFB5X1VDUzQgY29udmVyc2lvbiwgbWF4Y2hhcjsKLSAgICBQeV9zc2l6ZV90IHN1YmxlbjsKLSAgICBpbnQgZXJyOworICAgIFB5X1VDUzQgY29udmVyc2lvbjsKIAogICAgIE1hcmt1cEl0ZXJhdG9yX2luaXQoJml0ZXIsIGlucHV0LT5zdHIsIGlucHV0LT5zdGFydCwgaW5wdXQtPmVuZCk7CiAgICAgd2hpbGUgKChyZXN1bHQgPSBNYXJrdXBJdGVyYXRvcl9uZXh0KCZpdGVyLCAmbGl0ZXJhbCwgJmZpZWxkX3ByZXNlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWVsZF9uYW1lLCAmZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nKSkgPT0gMikgewotICAgICAgICBzdWJsZW4gPSBsaXRlcmFsLmVuZCAtIGxpdGVyYWwuc3RhcnQ7Ci0gICAgICAgIGlmIChzdWJsZW4pIHsKLSAgICAgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKGxpdGVyYWwuc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbC5zdGFydCwgbGl0ZXJhbC5lbmQpOwotICAgICAgICAgICAgZXJyID0gX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgc3VibGVuLCBtYXhjaGFyKTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gLTEpCisgICAgICAgIGlmIChsaXRlcmFsLmVuZCAhPSBsaXRlcmFsLnN0YXJ0KSB7CisgICAgICAgICAgICBpZiAoIWZpZWxkX3ByZXNlbnQgJiYgaXRlci5zdHIuc3RhcnQgPT0gaXRlci5zdHIuZW5kKQorICAgICAgICAgICAgICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gMDsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3Vic3RyaW5nKHdyaXRlciwgbGl0ZXJhbC5zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsLnN0YXJ0LCBsaXRlcmFsLmVuZCkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbC5zdHIsIGxpdGVyYWwuc3RhcnQsIHN1Ymxlbik7Ci0gICAgICAgICAgICB3cml0ZXItPnBvcyArPSBzdWJsZW47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZmllbGRfcHJlc2VudCkgewpAQCAtOTIwLDcgKzkwMyw2IEBACiAgICAgICAgICAgICAgaW50IHJlY3Vyc2lvbl9kZXB0aCwgQXV0b051bWJlciAqYXV0b19udW1iZXIpCiB7CiAgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7Ci0gICAgUHlfc3NpemVfdCBtaW5sZW47CiAKICAgICAvKiBjaGVjayB0aGUgcmVjdXJzaW9uIGxldmVsICovCiAgICAgaWYgKHJlY3Vyc2lvbl9kZXB0aCA8PSAwKSB7CkBAIC05MjksOCArOTExLDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgbWlubGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5wdXQtPnN0cikgKyAxMDA7Ci0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIG1pbmxlbik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAxOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5wdXQtPnN0cikgKyAxMDA7CiAKICAgICBpZiAoIWRvX21hcmt1cChpbnB1dCwgYXJncywga3dhcmdzLCAmd3JpdGVyLCByZWN1cnNpb25fZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgYXV0b19udW1iZXIpKSB7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaAppbmRleCBmMTZmMjFlLi4zZGI1NjI5IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKQEAgLTIxLDE3ICsyMSwxMSBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRQogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Vbmljb2RlCi0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBQeVVuaWNvZGVfUmVzaXplCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMDAwMDAKLSNkZWZpbmUgU1RSSU5HTElCX1RPU1RSICAgICAgICAgIFB5T2JqZWN0X1VuaWNvZGUKLSNkZWZpbmUgU1RSSU5HTElCX1RPQVNDSUkgICAgICAgIFB5T2JqZWN0X1JlcHIKLSNlbHNlCiAjZGVmaW5lIFNUUklOR0xJQl9UT1NUUiAgICAgICAgICBQeU9iamVjdF9TdHIKICNkZWZpbmUgU1RSSU5HTElCX1RPQVNDSUkgICAgICAgIFB5T2JqZWN0X0FTQ0lJCi0jZW5kaWYKIAogI2RlZmluZSBTVFJJTkdMSUJfV0FOVF9DT05UQUlOU19PQkogMQogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cnVjdHNlcS5jIGIvT2JqZWN0cy9zdHJ1Y3RzZXEuYwppbmRleCBjM2I5YTcyLi42NjQzNDRiIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cnVjdHNlcS5jCisrKyBiL09iamVjdHMvc3RydWN0c2VxLmMKQEAgLTExLDE3ICsxMSwyMCBAQAogLyogRmllbGRzIHdpdGggdGhpcyBuYW1lIGhhdmUgb25seSBhIGZpZWxkIGluZGV4LCBub3QgYSBmaWVsZCBuYW1lLgogICAgVGhleSBhcmUgb25seSBhbGxvd2VkIGZvciBpbmRpY2VzIDwgbl92aXNpYmxlX2ZpZWxkcy4gKi8KIGNoYXIgKlB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkID0gInVubmFtZWQgZmllbGQiOworX1B5X0lERU5USUZJRVIobl9zZXF1ZW5jZV9maWVsZHMpOworX1B5X0lERU5USUZJRVIobl9maWVsZHMpOworX1B5X0lERU5USUZJRVIobl91bm5hbWVkX2ZpZWxkcyk7CiAKICNkZWZpbmUgVklTSUJMRV9TSVpFKG9wKSBQeV9TSVpFKG9wKQogI2RlZmluZSBWSVNJQkxFX1NJWkVfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCB2aXNpYmxlX2xlbmd0aF9rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fc2VxdWVuY2VfZmllbGRzKSkKIAogI2RlZmluZSBSRUFMX1NJWkVfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCByZWFsX2xlbmd0aF9rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fZmllbGRzKSkKICNkZWZpbmUgUkVBTF9TSVpFKG9wKSBSRUFMX1NJWkVfVFAoUHlfVFlQRShvcCkpCiAKICNkZWZpbmUgVU5OQU1FRF9GSUVMRFNfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCB1bm5hbWVkX2ZpZWxkc19rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fdW5uYW1lZF9maWVsZHMpKQogI2RlZmluZSBVTk5BTUVEX0ZJRUxEUyhvcCkgVU5OQU1FRF9GSUVMRFNfVFAoUHlfVFlQRShvcCkpCiAKIApAQCAtNTksNyArNjIsNyBAQAogc3RydWN0c2VxX2RlYWxsb2MoUHlTdHJ1Y3RTZXF1ZW5jZSAqb2JqKQogewogICAgIFB5X3NzaXplX3QgaSwgc2l6ZTsKLSAgICAKKwogICAgIHNpemUgPSBSRUFMX1NJWkUob2JqKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFB5X1hERUNSRUYob2JqLT5vYl9pdGVtW2ldKTsKQEAgLTIzMCw4ICsyMzMsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHN0cnVjdHNlcV9yZWR1Y2UoUHlTdHJ1Y3RTZXF1ZW5jZSogc2VsZikKIHsKLSAgICBQeU9iamVjdCogdHVwOwotICAgIFB5T2JqZWN0KiBkaWN0OworICAgIFB5T2JqZWN0KiB0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0KiBkaWN0ID0gTlVMTDsKICAgICBQeU9iamVjdCogcmVzdWx0OwogICAgIFB5X3NzaXplX3Qgbl9maWVsZHMsIG5fdmlzaWJsZV9maWVsZHMsIG5fdW5uYW1lZF9maWVsZHM7CiAgICAgaW50IGk7CkBAIC0yNDAsMTUgKzI0MywxMiBAQAogICAgIG5fdmlzaWJsZV9maWVsZHMgPSBWSVNJQkxFX1NJWkUoc2VsZik7CiAgICAgbl91bm5hbWVkX2ZpZWxkcyA9IFVOTkFNRURfRklFTERTKHNlbGYpOwogICAgIHR1cCA9IFB5VHVwbGVfTmV3KG5fdmlzaWJsZV9maWVsZHMpOwotICAgIGlmICghdHVwKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIXR1cCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGRpY3QgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKCFkaWN0KSB7Ci0gICAgICAgIFB5X0RFQ1JFRih0dXApOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFkaWN0KQorICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG5fdmlzaWJsZV9maWVsZHM7IGkrKykgewogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+b2JfaXRlbVtpXSk7CkBAIC0yNTcsOCArMjU3LDggQEAKIAogICAgIGZvciAoOyBpIDwgbl9maWVsZHM7IGkrKykgewogICAgICAgICBjaGFyICpuID0gUHlfVFlQRShzZWxmKS0+dHBfbWVtYmVyc1tpLW5fdW5uYW1lZF9maWVsZHNdLm5hbWU7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIG4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2l0ZW1baV0pOworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgbiwgc2VsZi0+b2JfaXRlbVtpXSkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICByZXN1bHQgPSBQeV9CdWlsZFZhbHVlKCIoTyhPTykpIiwgUHlfVFlQRShzZWxmKSwgdHVwLCBkaWN0KTsKQEAgLTI2Nyw2ICsyNjcsMTEgQEAKICAgICBQeV9ERUNSRUYoZGljdCk7CiAKICAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHR1cCk7CisgICAgUHlfWERFQ1JFRihkaWN0KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIHN0cnVjdHNlcV9tZXRob2RzW10gPSB7CkBAIC0zMTUsMTIgKzMyMCwxMyBAQAogICAgIHN0cnVjdHNlcV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiB9OwogCi12b2lkCi1QeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKQoraW50CitQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihQeVR5cGVPYmplY3QgKnR5cGUsIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKIHsKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBQeU1lbWJlckRlZiogbWVtYmVyczsKICAgICBpbnQgbl9tZW1iZXJzLCBuX3VubmFtZWRfbWVtYmVycywgaSwgazsKKyAgICBQeU9iamVjdCAqdjsKIAogI2lmZGVmIFB5X1RSQUNFX1JFRlMKICAgICAvKiBpZiB0aGUgdHlwZSBvYmplY3Qgd2FzIGNoYWluZWQsIHVuY2hhaW4gaXQgZmlyc3QKQEAgLTM0Miw4ICszNDgsMTAgQEAKICAgICB0eXBlLT50cF9kb2MgPSBkZXNjLT5kb2M7CiAKICAgICBtZW1iZXJzID0gUHlNZW1fTkVXKFB5TWVtYmVyRGVmLCBuX21lbWJlcnMtbl91bm5hbWVkX21lbWJlcnMrMSk7Ci0gICAgaWYgKG1lbWJlcnMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtZW1iZXJzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGZvciAoaSA9IGsgPSAwOyBpIDwgbl9tZW1iZXJzOyArK2kpIHsKICAgICAgICAgaWYgKGRlc2MtPmZpZWxkc1tpXS5uYW1lID09IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkKQpAQCAtMzYxLDMwICszNjksNTYgQEAKICAgICB0eXBlLT50cF9tZW1iZXJzID0gbWVtYmVyczsKIAogICAgIGlmIChQeVR5cGVfUmVhZHkodHlwZSkgPCAwKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAtMTsKICAgICBQeV9JTkNSRUYodHlwZSk7CiAKICAgICBkaWN0ID0gdHlwZS0+dHBfZGljdDsKICNkZWZpbmUgU0VUX0RJQ1RfRlJPTV9JTlQoa2V5LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeU9iamVjdCAqdiA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgdmFsdWUpOyAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKHYgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBrZXksIHYpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICB2ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwga2V5LCB2KSA8IDApIHsgICAgICAgICAgIFwKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfREVDUkVGKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAogICAgIFNFVF9ESUNUX0ZST01fSU5UKHZpc2libGVfbGVuZ3RoX2tleSwgZGVzYy0+bl9pbl9zZXF1ZW5jZSk7CiAgICAgU0VUX0RJQ1RfRlJPTV9JTlQocmVhbF9sZW5ndGhfa2V5LCBuX21lbWJlcnMpOwogICAgIFNFVF9ESUNUX0ZST01fSU5UKHVubmFtZWRfZmllbGRzX2tleSwgbl91bm5hbWVkX21lbWJlcnMpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK1B5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCit7CisgICAgKHZvaWQpUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIodHlwZSwgZGVzYyk7CiB9CiAKIFB5VHlwZU9iamVjdCoKIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZShQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCiB7Ci0gICAgUHlUeXBlT2JqZWN0ICpyZXN1bHQgPSAoUHlUeXBlT2JqZWN0KilQeVR5cGVfR2VuZXJpY0FsbG9jKCZQeVR5cGVfVHlwZSwgMCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUocmVzdWx0LCBkZXNjKTsKKyAgICBQeVR5cGVPYmplY3QgKnJlc3VsdDsKKworICAgIHJlc3VsdCA9IChQeVR5cGVPYmplY3QqKVB5VHlwZV9HZW5lcmljQWxsb2MoJlB5VHlwZV9UeXBlLCAwKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihyZXN1bHQsIGRlc2MpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CisKK2ludCBfUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0KHZvaWQpCit7CisgICAgaWYgKF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fc2VxdWVuY2VfZmllbGRzKSA9PSBOVUxMCisgICAgICAgIHx8IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fZmllbGRzKSA9PSBOVUxMCisgICAgICAgIHx8IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fdW5uYW1lZF9maWVsZHMpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy90dXBsZW9iamVjdC5jIGIvT2JqZWN0cy90dXBsZW9iamVjdC5jCmluZGV4IDEyM2RmOGMuLmM2M2FmY2MgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdHVwbGVvYmplY3QuYworKysgYi9PYmplY3RzL3R1cGxlb2JqZWN0LmMKQEAgLTYzLDkgKzYzLDkgQEAKIH0KIAogUHlPYmplY3QgKgotUHlUdXBsZV9OZXcocmVnaXN0ZXIgUHlfc3NpemVfdCBzaXplKQorUHlUdXBsZV9OZXcoUHlfc3NpemVfdCBzaXplKQogewotICAgIHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKm9wOworICAgIFB5VHVwbGVPYmplY3QgKm9wOwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC0xMjIsNyArMTIyLDcgQEAKIH0KIAogUHlfc3NpemVfdAotUHlUdXBsZV9TaXplKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5VHVwbGVfU2l6ZShQeU9iamVjdCAqb3ApCiB7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeVR1cGxlX0dldEl0ZW0ocmVnaXN0ZXIgUHlPYmplY3QgKm9wLCByZWdpc3RlciBQeV9zc2l6ZV90IGkpCitQeVR1cGxlX0dldEl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTE0NywxMCArMTQ3LDEwIEBACiB9CiAKIGludAotUHlUdXBsZV9TZXRJdGVtKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBQeU9iamVjdCAqbmV3aXRlbSkKK1B5VHVwbGVfU2V0SXRlbShQeU9iamVjdCAqb3AsIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKm5ld2l0ZW0pCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9sZGl0ZW07Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipwOworICAgIFB5T2JqZWN0ICpvbGRpdGVtOworICAgIFB5T2JqZWN0ICoqcDsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sob3ApIHx8IG9wLT5vYl9yZWZjbnQgIT0gMSkgewogICAgICAgICBQeV9YREVDUkVGKG5ld2l0ZW0pOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTIyNCwxMCArMjI0LDEwIEBACiAvKiBNZXRob2RzICovCiAKIHN0YXRpYyB2b2lkCi10dXBsZWRlYWxsb2MocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqb3ApCit0dXBsZWRlYWxsb2MoUHlUdXBsZU9iamVjdCAqb3ApCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgbGVuID0gIFB5X1NJWkUob3ApOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9ICBQeV9TSVpFKG9wKTsKICAgICBQeU9iamVjdF9HQ19VblRyYWNrKG9wKTsKICAgICBQeV9UUkFTSENBTl9TQUZFX0JFR0lOKG9wKQogICAgIGlmIChsZW4gPiAwKSB7CkBAIC0yNTUsMjAgKzI1NSwxMiBAQAogdHVwbGVyZXByKFB5VHVwbGVPYmplY3QgKnYpCiB7CiAgICAgUHlfc3NpemVfdCBpLCBuOwotICAgIFB5T2JqZWN0ICpzID0gTlVMTDsKLSAgICBfUHlBY2N1IGFjYzsKLSAgICBzdGF0aWMgUHlPYmplY3QgKnNlcCA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAKICAgICBuID0gUHlfU0laRSh2KTsKICAgICBpZiAobiA9PSAwKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIigpIik7CiAKLSAgICBpZiAoc2VwID09IE5VTEwpIHsKLSAgICAgICAgc2VwID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiwgIik7Ci0gICAgICAgIGlmIChzZXAgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIC8qIFdoaWxlIG5vdCBtdXRhYmxlLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0byBlbmQgdXAgd2l0aCBhIGN5Y2xlIGluIGEKICAgICAgICB0dXBsZSB0aHJvdWdoIGFuIG9iamVjdCB0aGF0IHN0b3JlcyBpdHNlbGYgd2l0aGluIGEgdHVwbGUgKGFuZCB0aHVzCiAgICAgICAgaW5maW5pdGVseSBhc2tzIGZvciB0aGUgcmVwciBvZiBpdHNlbGYpLiBUaGlzIHNob3VsZCBvbmx5IGJlCkBAIC0yNzgsNDAgKzI3MCw1OCBAQAogICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygiKC4uLikiKSA6IE5VTEw7CiAgICAgfQogCi0gICAgaWYgKF9QeUFjY3VfSW5pdCgmYWNjKSkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgaWYgKFB5X1NJWkUodikgPiAxKSB7CisgICAgICAgIC8qICIoIiArICIxIiArICIsIDIiICogKGxlbiAtIDEpICsgIikiICovCisgICAgICAgIHdyaXRlci5taW5fbGVuZ3RoID0gMSArIDEgKyAoMiArIDEpICogKFB5X1NJWkUodikgLSAxKSArIDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiAiKDEsKSIgKi8KKyAgICAgICAgd3JpdGVyLm1pbl9sZW5ndGggPSA0OworICAgIH0KIAotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiKCIpOwotICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAnKCcpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBQeV9DTEVBUihzKTsKIAogICAgIC8qIERvIHJlcHIoKSBvbiBlYWNoIGVsZW1lbnQuICovCiAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBQeU9iamVjdCAqczsKKworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIiwgIiwgMikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZ2V0dGluZyB0aGUgcmVwciBvZiBhIHR1cGxlIikpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzID0gUHlPYmplY3RfUmVwcih2LT5vYl9pdGVtW2ldKTsKICAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7Ci0gICAgICAgIGlmIChpID4gMCAmJiBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgc2VwKSkKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHMpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHMpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgUHlfQ0xFQVIocyk7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHMpOwogICAgIH0KLSAgICBpZiAobiA+IDEpCi0gICAgICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiKSIpOwotICAgIGVsc2UKLSAgICAgICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsKSIpOwotICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOworCisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgaWYgKG4gPiAxKSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAnKScpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsICIsKSIsIDIpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXYpOwotICAgIHJldHVybiBfUHlBY2N1X0ZpbmlzaCgmYWNjKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKIGVycm9yOgotICAgIF9QeUFjY3VfRGVzdHJveSgmYWNjKTsKLSAgICBQeV9YREVDUkVGKHMpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopdik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0zMjIsMTUgKzMzMiwxOCBAQAogCiAgICAgIDEwODI1MjcsIDExNjUwNDksIDEwODI1MzEsIDExNjUwNTcsIDEyNDc1ODEsIDEzMzAxMDMsIDEwODI1MzMsCiAgICAgIDEzMzAxMTEsIDE0MTI2MzMsIDExNjUwNjksIDEyNDc1OTksIDE0OTUxNzcsIDE1Nzc2OTkKKworICAgVGVzdHMgaGF2ZSBzaG93biB0aGF0IGl0J3Mgbm90IHdvcnRoIHRvIGNhY2hlIHRoZSBoYXNoIHZhbHVlLCBzZWUKKyAgIGlzc3VlICM5Njg1LgogKi8KIAogc3RhdGljIFB5X2hhc2hfdAogdHVwbGVoYXNoKFB5VHVwbGVPYmplY3QgKnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfdWhhc2hfdCB4OyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCi0gICAgcmVnaXN0ZXIgUHlfaGFzaF90IHk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBsZW4gPSBQeV9TSVpFKHYpOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqcDsKKyAgICBQeV91aGFzaF90IHg7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KKyAgICBQeV9oYXNoX3QgeTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5X1NJWkUodik7CisgICAgUHlPYmplY3QgKipwOwogICAgIFB5X3VoYXNoX3QgbXVsdCA9IF9QeUhBU0hfTVVMVElQTElFUjsKICAgICB4ID0gMHgzNDU2NzhVTDsKICAgICBwID0gdi0+b2JfaXRlbTsKQEAgLTM2Nyw3ICszODAsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotdHVwbGVpdGVtKHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKmEsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSkKK3R1cGxlaXRlbShQeVR1cGxlT2JqZWN0ICphLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShhKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInR1cGxlIGluZGV4IG91dCBvZiByYW5nZSIpOwpAQCAtMzc4LDEyICszOTEsMTIgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXR1cGxlc2xpY2UocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpbG93LAotICAgICAgICAgICByZWdpc3RlciBQeV9zc2l6ZV90IGloaWdoKQordHVwbGVzbGljZShQeVR1cGxlT2JqZWN0ICphLCBQeV9zc2l6ZV90IGlsb3csCisgICAgICAgICAgIFB5X3NzaXplX3QgaWhpZ2gpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqbnA7CisgICAgUHlUdXBsZU9iamVjdCAqbnA7CiAgICAgUHlPYmplY3QgKipzcmMsICoqZGVzdDsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGlmIChpbG93IDwgMCkKICAgICAgICAgaWxvdyA9IDA7CkBAIC00MjAsMTAgKzQzMywxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotdHVwbGVjb25jYXQocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqYSwgcmVnaXN0ZXIgUHlPYmplY3QgKmJiKQordHVwbGVjb25jYXQoUHlUdXBsZU9iamVjdCAqYSwgUHlPYmplY3QgKmJiKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqKnNyYywgKipkZXN0OwogICAgIFB5VHVwbGVPYmplY3QgKm5wOwogICAgIGlmICghUHlUdXBsZV9DaGVjayhiYikpIHsKQEAgLTgzMyw4ICs4NDYsOCBAQAogaW50CiBfUHlUdXBsZV9SZXNpemUoUHlPYmplY3QgKipwdiwgUHlfc3NpemVfdCBuZXdzaXplKQogewotICAgIHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqc3Y7CisgICAgUHlUdXBsZU9iamVjdCAqdjsKKyAgICBQeVR1cGxlT2JqZWN0ICpzdjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBvbGRzaXplOwogCkBAIC05MjUsNyArOTM4LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKLSAgICBsb25nIGl0X2luZGV4OworICAgIFB5X3NzaXplX3QgaXRfaW5kZXg7CiAgICAgUHlUdXBsZU9iamVjdCAqaXRfc2VxOyAvKiBTZXQgdG8gTlVMTCB3aGVuIGl0ZXJhdG9yIGlzIGV4aGF1c3RlZCAqLwogfSB0dXBsZWl0ZXJvYmplY3Q7CiAKQEAgLTk4Myw3ICs5OTYsNyBAQAogdHVwbGVpdGVyX3JlZHVjZSh0dXBsZWl0ZXJvYmplY3QgKml0KQogewogICAgIGlmIChpdC0+aXRfc2VxKQotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKWwiLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKW4iLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC0+aXRfc2VxLCBpdC0+aXRfaW5kZXgpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oKCkpIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSk7CkBAIC05OTIsNyArMTAwNSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogdHVwbGVpdGVyX3NldHN0YXRlKHR1cGxlaXRlcm9iamVjdCAqaXQsIFB5T2JqZWN0ICpzdGF0ZSkKIHsKLSAgICBsb25nIGluZGV4ID0gUHlMb25nX0FzTG9uZyhzdGF0ZSk7CisgICAgUHlfc3NpemVfdCBpbmRleCA9IFB5TG9uZ19Bc1NzaXplX3Qoc3RhdGUpOwogICAgIGlmIChpbmRleCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoaXQtPml0X3NlcSAhPSBOVUxMKSB7CmRpZmYgLS1naXQgYS9PYmplY3RzL3R5cGVvYmplY3QuYyBiL09iamVjdHMvdHlwZW9iamVjdC5jCmluZGV4IDg4NTFmYWUuLmY1ODk2MGQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdHlwZW9iamVjdC5jCisrKyBiL09iamVjdHMvdHlwZW9iamVjdC5jCkBAIC0zNSwxOSArMzUsMTI3IEBACiBzdGF0aWMgc3RydWN0IG1ldGhvZF9jYWNoZV9lbnRyeSBtZXRob2RfY2FjaGVbMSA8PCBNQ0FDSEVfU0laRV9FWFBdOwogc3RhdGljIHVuc2lnbmVkIGludCBuZXh0X3ZlcnNpb25fdGFnID0gMDsKIAorLyogYWxwaGFiZXRpY2FsIG9yZGVyICovCitfUHlfSURFTlRJRklFUihfX2Fic3RyYWN0bWV0aG9kc19fKTsKIF9QeV9JREVOVElGSUVSKF9fY2xhc3NfXyk7CitfUHlfSURFTlRJRklFUihfX2RlbGl0ZW1fXyk7CiBfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CiBfUHlfSURFTlRJRklFUihfX2RvY19fKTsKLV9QeV9JREVOVElGSUVSKF9fZ2V0aXRlbV9fKTsKIF9QeV9JREVOVElGSUVSKF9fZ2V0YXR0cmlidXRlX18pOworX1B5X0lERU5USUZJRVIoX19nZXRpdGVtX18pOwogX1B5X0lERU5USUZJRVIoX19oYXNoX18pOworX1B5X0lERU5USUZJRVIoX19sZW5fXyk7CiBfUHlfSURFTlRJRklFUihfX21vZHVsZV9fKTsKIF9QeV9JREVOVElGSUVSKF9fbmFtZV9fKTsKIF9QeV9JREVOVElGSUVSKF9fbmV3X18pOworX1B5X0lERU5USUZJRVIoX19zZXRpdGVtX18pOworX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogc2xvdF90cF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpOwogCisvKgorICogZmluZHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jc3RyaW5nJ3MgaW50cm9zcGVjdGlvbiBzaWduYXR1cmUuCisgKiBpZiBwcmVzZW50LCByZXR1cm5zIGEgcG9pbnRlciBwb2ludGluZyB0byB0aGUgZmlyc3QgJygnLgorICogb3RoZXJ3aXNlIHJldHVybnMgTlVMTC4KKyAqCisgKiBkb2Vzbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBzaWduYXR1cmUgaXMgdmFsaWQsIG9ubHkgdGhhdCBpdAorICogaGFzIGEgdmFsaWQgcHJlZml4LiAgKHRoZSBzaWduYXR1cmUgbXVzdCBhbHNvIHBhc3Mgc2tpcF9zaWduYXR1cmUuKQorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitmaW5kX3NpZ25hdHVyZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb2MpCit7CisgICAgY29uc3QgY2hhciAqZG90OworICAgIHNpemVfdCBsZW5ndGg7CisKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhc3NlcnQobmFtZSAhPSBOVUxMKTsKKworICAgIC8qIGZvciBkb3R0ZWQgbmFtZXMgbGlrZSBjbGFzc2VzLCBvbmx5IHVzZSB0aGUgbGFzdCBjb21wb25lbnQgKi8KKyAgICBkb3QgPSBzdHJyY2hyKG5hbWUsICcuJyk7CisgICAgaWYgKGRvdCkKKyAgICAgICAgbmFtZSA9IGRvdCArIDE7CisKKyAgICBsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgaWYgKHN0cm5jbXAoZG9jLCBuYW1lLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkb2MgKz0gbGVuZ3RoOworICAgIGlmICgqZG9jICE9ICcoJykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIGRvYzsKK30KKworI2RlZmluZSBTSUdOQVRVUkVfRU5EX01BUktFUiAgICAgICAgICIpXG4tLVxuXG4iCisjZGVmaW5lIFNJR05BVFVSRV9FTkRfTUFSS0VSX0xFTkdUSCAgNgorLyoKKyAqIHNraXBzIHBhc3QgdGhlIGVuZCBvZiB0aGUgZG9jc3RyaW5nJ3MgaW5zdHJvc3BlY3Rpb24gc2lnbmF0dXJlLgorICogKGFzc3VtZXMgZG9jIHN0YXJ0cyB3aXRoIGEgdmFsaWQgc2lnbmF0dXJlIHByZWZpeC4pCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3NraXBfc2lnbmF0dXJlKGNvbnN0IGNoYXIgKmRvYykKK3sKKyAgICB3aGlsZSAoKmRvYykgeworICAgICAgICBpZiAoKCpkb2MgPT0gKlNJR05BVFVSRV9FTkRfTUFSS0VSKSAmJgorICAgICAgICAgICAgIXN0cm5jbXAoZG9jLCBTSUdOQVRVUkVfRU5EX01BUktFUiwgU0lHTkFUVVJFX0VORF9NQVJLRVJfTEVOR1RIKSkKKyAgICAgICAgICAgIHJldHVybiBkb2MgKyBTSUdOQVRVUkVfRU5EX01BUktFUl9MRU5HVEg7CisgICAgICAgIGlmICgoKmRvYyA9PSAnXG4nKSAmJiAoZG9jWzFdID09ICdcbicpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGRvYysrOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorX1B5VHlwZV9Eb2NXaXRob3V0U2lnbmF0dXJlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmludGVybmFsX2RvYykKK3sKKyAgICBjb25zdCBjaGFyICpkb2MgPSBmaW5kX3NpZ25hdHVyZShuYW1lLCBpbnRlcm5hbF9kb2MpOworCisgICAgaWYgKGRvYykgeworICAgICAgICBkb2MgPSBza2lwX3NpZ25hdHVyZShkb2MpOworICAgICAgICBpZiAoZG9jKQorICAgICAgICAgICAgcmV0dXJuIGRvYzsKKyAgICAgICAgfQorICAgIHJldHVybiBpbnRlcm5hbF9kb2M7Cit9CisKK1B5T2JqZWN0ICoKK19QeVR5cGVfR2V0RG9jRnJvbUludGVybmFsRG9jKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmludGVybmFsX2RvYykKK3sKKyAgICBjb25zdCBjaGFyICpkb2MgPSBfUHlUeXBlX0RvY1dpdGhvdXRTaWduYXR1cmUobmFtZSwgaW50ZXJuYWxfZG9jKTsKKworICAgIGlmICghZG9jKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfQorCisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGRvYyk7Cit9CisKK1B5T2JqZWN0ICoKK19QeVR5cGVfR2V0VGV4dFNpZ25hdHVyZUZyb21JbnRlcm5hbERvYyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICppbnRlcm5hbF9kb2MpCit7CisgICAgY29uc3QgY2hhciAqc3RhcnQgPSBmaW5kX3NpZ25hdHVyZShuYW1lLCBpbnRlcm5hbF9kb2MpOworICAgIGNvbnN0IGNoYXIgKmVuZDsKKworICAgIGlmIChzdGFydCkKKyAgICAgICAgZW5kID0gc2tpcF9zaWduYXR1cmUoc3RhcnQpOworICAgIGVsc2UKKyAgICAgICAgZW5kID0gTlVMTDsKKyAgICBpZiAoIWVuZCkgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0KKworICAgIC8qIGJhY2sgImVuZCIgdXAgdW50aWwgaXQgcG9pbnRzIGp1c3QgcGFzdCB0aGUgZmluYWwgJyknICovCisgICAgZW5kIC09IFNJR05BVFVSRV9FTkRfTUFSS0VSX0xFTkdUSCAtIDE7CisgICAgYXNzZXJ0KChlbmQgLSBzdGFydCkgPj0gMik7IC8qIHNob3VsZCBiZSAiKCkiIGF0IGxlYXN0ICovCisgICAgYXNzZXJ0KGVuZFstMV0gPT0gJyknKTsKKyAgICBhc3NlcnQoZW5kWzBdID09ICdcbicpOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKK30KKwogdW5zaWduZWQgaW50CiBQeVR5cGVfQ2xlYXJDYWNoZSh2b2lkKQogewpAQCAtOTQsMTYgKzIwMiwxNyBAQAogICAgICAgIG5lZWRlZC4KICAgICAgKi8KICAgICBQeU9iamVjdCAqcmF3LCAqcmVmOwotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBpZiAoIVB5VHlwZV9IYXNGZWF0dXJlKHR5cGUsIFB5X1RQRkxBR1NfVkFMSURfVkVSU0lPTl9UQUcpKQogICAgICAgICByZXR1cm47CiAKICAgICByYXcgPSB0eXBlLT50cF9zdWJjbGFzc2VzOwogICAgIGlmIChyYXcgIT0gTlVMTCkgewotICAgICAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHJhdyk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShyYXcsIGkpOworICAgICAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QocmF3KSk7CisgICAgICAgIGkgPSAwOworICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQocmF3LCAmaSwgTlVMTCwgJnJlZikpIHsKKyAgICAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgICAgICByZWYgPSBQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpOwogICAgICAgICAgICAgaWYgKHJlZiAhPSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgUHlUeXBlX01vZGlmaWVkKChQeVR5cGVPYmplY3QgKilyZWYpOwpAQCAtMzM2LDExICs0NDUsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0eXBlX21vZHVsZShQeVR5cGVPYmplY3QgKnR5cGUsIHZvaWQgKmNvbnRleHQpCiB7Ci0gICAgUHlPYmplY3QgKm1vZDsKICAgICBjaGFyICpzOwogCiAgICAgaWYgKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkgewotICAgICAgICBtb2QgPSBfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX21vZHVsZV9fKTsKKyAgICAgICAgUHlPYmplY3QgKm1vZCA9IF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbW9kdWxlX18pOwogICAgICAgICBpZiAoIW1vZCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAiX19tb2R1bGVfXyIpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0zNDksMTEgKzQ1NywxNCBAQAogICAgICAgICByZXR1cm4gbW9kOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKm5hbWU7CiAgICAgICAgIHMgPSBzdHJyY2hyKHR5cGUtPnRwX25hbWUsICcuJyk7CiAgICAgICAgIGlmIChzICE9IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKAogICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUsIChQeV9zc2l6ZV90KShzIC0gdHlwZS0+dHBfbmFtZSkpOwotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoImJ1aWx0aW5zIik7CisgICAgICAgIG5hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9idWlsdGlucyk7CisgICAgICAgIFB5X1hJTkNSRUYobmFtZSk7CisgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KIH0KIApAQCAtMzc1LDkgKzQ4NiwxMSBAQAogICAgIC8qIHR5cGUgaXRzZWxmIGhhcyBhbiBfX2Fic3RyYWN0bWV0aG9kc19fIGRlc2NyaXB0b3IgKHRoaXMpLiBEb24ndCByZXR1cm4KICAgICAgICB0aGF0LiAqLwogICAgIGlmICh0eXBlICE9ICZQeVR5cGVfVHlwZSkKLSAgICAgICAgbW9kID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcodHlwZS0+dHBfZGljdCwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKKyAgICAgICAgbW9kID0gX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19hYnN0cmFjdG1ldGhvZHNfXyk7CiAgICAgaWYgKCFtb2QpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICBQeU9iamVjdCAqbWVzc2FnZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fYWJzdHJhY3RtZXRob2RzX18pOworICAgICAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwgbWVzc2FnZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9YSU5DUkVGKG1vZCk7CkBAIC0zOTYsMTMgKzUwOSwxNSBAQAogICAgICAgICBhYnN0cmFjdCA9IFB5T2JqZWN0X0lzVHJ1ZSh2YWx1ZSk7CiAgICAgICAgIGlmIChhYnN0cmFjdCA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHR5cGUtPnRwX2RpY3QsICJfX2Fic3RyYWN0bWV0aG9kc19fIiwgdmFsdWUpOworICAgICAgICByZXMgPSBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fLCB2YWx1ZSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBhYnN0cmFjdCA9IDA7Ci0gICAgICAgIHJlcyA9IFB5RGljdF9EZWxJdGVtU3RyaW5nKHR5cGUtPnRwX2RpY3QsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CisgICAgICAgIHJlcyA9IF9QeURpY3RfRGVsSXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fYWJzdHJhY3RtZXRob2RzX18pOwogICAgICAgICBpZiAocmVzICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CisgICAgICAgICAgICBQeU9iamVjdCAqbWVzc2FnZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fYWJzdHJhY3RtZXRob2RzX18pOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLCBtZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KQEAgLTQyOCw2ICs1NDMsNyBAQAogc3RhdGljIGludCBjb21wYXRpYmxlX2Zvcl9hc3NpZ25tZW50KFB5VHlwZU9iamVjdCAqLCBQeVR5cGVPYmplY3QgKiwgY2hhciAqKTsKIHN0YXRpYyBpbnQgYWRkX3N1YmNsYXNzKFB5VHlwZU9iamVjdCosIFB5VHlwZU9iamVjdCopOwogc3RhdGljIHZvaWQgcmVtb3ZlX3N1YmNsYXNzKFB5VHlwZU9iamVjdCAqLCBQeVR5cGVPYmplY3QgKik7CitzdGF0aWMgdm9pZCByZW1vdmVfYWxsX3N1YmNsYXNzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYmFzZXMpOwogc3RhdGljIHZvaWQgdXBkYXRlX2FsbF9zbG90cyhQeVR5cGVPYmplY3QgKik7CiAKIHR5cGVkZWYgaW50ICgqdXBkYXRlX2NhbGxiYWNrKShQeVR5cGVPYmplY3QgKiwgdm9pZCAqKTsKQEAgLTQ0MSwxNSArNTU3LDE1IEBACiB7CiAgICAgUHlUeXBlT2JqZWN0ICpzdWJjbGFzczsKICAgICBQeU9iamVjdCAqcmVmLCAqc3ViY2xhc3NlcywgKm9sZF9tcm87Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIHN1YmNsYXNzZXMgPSB0eXBlLT50cF9zdWJjbGFzc2VzOwogICAgIGlmIChzdWJjbGFzc2VzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIGFzc2VydChQeUxpc3RfQ2hlY2soc3ViY2xhc3NlcykpOwotICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUoc3ViY2xhc3Nlcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0oc3ViY2xhc3NlcywgaSk7CisgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KHN1YmNsYXNzZXMpKTsKKyAgICBpID0gMDsKKworICAgIHdoaWxlIChQeURpY3RfTmV4dChzdWJjbGFzc2VzLCAmaSwgTlVMTCwgJnJlZikpIHsKICAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKICAgICAgICAgc3ViY2xhc3MgPSAoUHlUeXBlT2JqZWN0ICopUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKTsKICAgICAgICAgYXNzZXJ0KHN1YmNsYXNzICE9IE5VTEwpOwpAQCAtNTY4LDEzICs2ODQsNyBAQAogICAgIC8qIGZvciBub3csIHNvZCB0aGF0OiBqdXN0IHJlbW92ZSBmcm9tIGFsbCBvbGRfYmFzZXMsCiAgICAgICAgYWRkIHRvIGFsbCBuZXdfYmFzZXMgKi8KIAotICAgIGZvciAoaSA9IFB5VHVwbGVfR0VUX1NJWkUob2xkX2Jhc2VzKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIG9iID0gUHlUdXBsZV9HRVRfSVRFTShvbGRfYmFzZXMsIGkpOwotICAgICAgICBpZiAoUHlUeXBlX0NoZWNrKG9iKSkgewotICAgICAgICAgICAgcmVtb3ZlX3N1YmNsYXNzKAotICAgICAgICAgICAgICAgIChQeVR5cGVPYmplY3QqKW9iLCB0eXBlKTsKLSAgICAgICAgfQotICAgIH0KKyAgICByZW1vdmVfYWxsX3N1YmNsYXNzZXModHlwZSwgb2xkX2Jhc2VzKTsKIAogICAgIGZvciAoaSA9IFB5VHVwbGVfR0VUX1NJWkUodmFsdWUpIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgb2IgPSBQeVR1cGxlX0dFVF9JVEVNKHZhbHVlLCBpKTsKQEAgLTYyMCw4ICs3MzAsOSBAQAogdHlwZV9nZXRfZG9jKFB5VHlwZU9iamVjdCAqdHlwZSwgdm9pZCAqY29udGV4dCkKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGlmICghKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkgJiYgdHlwZS0+dHBfZG9jICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyh0eXBlLT50cF9kb2MpOworICAgIGlmICghKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkgJiYgdHlwZS0+dHBfZG9jICE9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIF9QeVR5cGVfR2V0RG9jRnJvbUludGVybmFsRG9jKHR5cGUtPnRwX25hbWUsIHR5cGUtPnRwX2RvYyk7CisgICAgfQogICAgIHJlc3VsdCA9IF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fZG9jX18pOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewogICAgICAgICByZXN1bHQgPSBQeV9Ob25lOwpAQCAtNjM3LDYgKzc0OCwxMiBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCit0eXBlX2dldF90ZXh0X3NpZ25hdHVyZShQeVR5cGVPYmplY3QgKnR5cGUsIHZvaWQgKmNvbnRleHQpCit7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0VGV4dFNpZ25hdHVyZUZyb21JbnRlcm5hbERvYyh0eXBlLT50cF9uYW1lLCB0eXBlLT50cF9kb2MpOworfQorCiBzdGF0aWMgaW50CiB0eXBlX3NldF9kb2MoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUsIHZvaWQgKmNvbnRleHQpCiB7CkBAIC02ODMsNiArODAwLDcgQEAKICAgICAgKHNldHRlcil0eXBlX3NldF9hYnN0cmFjdG1ldGhvZHMsIE5VTEx9LAogICAgIHsiX19kaWN0X18iLCAgKGdldHRlcil0eXBlX2RpY3QsICBOVUxMLCBOVUxMfSwKICAgICB7Il9fZG9jX18iLCAoZ2V0dGVyKXR5cGVfZ2V0X2RvYywgKHNldHRlcil0eXBlX3NldF9kb2MsIE5VTEx9LAorICAgIHsiX190ZXh0X3NpZ25hdHVyZV9fIiwgKGdldHRlcil0eXBlX2dldF90ZXh0X3NpZ25hdHVyZSwgTlVMTCwgTlVMTH0sCiAgICAgezB9CiB9OwogCkBAIC03MDQsNyArODIyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKG1vZCAhPSBOVUxMICYmIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG1vZCwgImJ1aWx0aW5zIikpCisgICAgaWYgKG1vZCAhPSBOVUxMICYmIF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2QsICZQeUlkX2J1aWx0aW5zKSkKICAgICAgICAgcnRuID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxjbGFzcyAnJVUuJVUnPiIsIG1vZCwgbmFtZSk7CiAgICAgZWxzZQogICAgICAgICBydG4gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPGNsYXNzICclcyc+IiwgdHlwZS0+dHBfbmFtZSk7CkBAIC03MjYsNiArODQ0LDEzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorI2lmZGVmIFB5X0RFQlVHCisgICAgLyogdHlwZV9jYWxsKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIG9iaiA9IHR5cGUtPnRwX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKICAgICBpZiAob2JqICE9IE5VTEwpIHsKICAgICAgICAgLyogVWdseSBleGNlcHRpb246IHdoZW4gdGhlIGNhbGwgd2FzIHR5cGUoc29tZXRoaW5nKSwKQEAgLTc0MCwxMCArODY1LDEyIEBACiAgICAgICAgIGlmICghUHlUeXBlX0lzU3VidHlwZShQeV9UWVBFKG9iaiksIHR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgdHlwZSA9IFB5X1RZUEUob2JqKTsKLSAgICAgICAgaWYgKHR5cGUtPnRwX2luaXQgIT0gTlVMTCAmJgotICAgICAgICAgICAgdHlwZS0+dHBfaW5pdChvYmosIGFyZ3MsIGt3ZHMpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgICAgICBvYmogPSBOVUxMOworICAgICAgICBpZiAodHlwZS0+dHBfaW5pdCAhPSBOVUxMKSB7CisgICAgICAgICAgICBpbnQgcmVzID0gdHlwZS0+dHBfaW5pdChvYmosIGFyZ3MsIGt3ZHMpOworICAgICAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgICAgICAgICBvYmogPSBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBvYmo7CkBAIC03NzAsNyArODk3LDcgQEAKICAgICAgICAgUHlfSU5DUkVGKHR5cGUpOwogCiAgICAgaWYgKHR5cGUtPnRwX2l0ZW1zaXplID09IDApCi0gICAgICAgIFB5T2JqZWN0X0lOSVQob2JqLCB0eXBlKTsKKyAgICAgICAgKHZvaWQpUHlPYmplY3RfSU5JVChvYmosIHR5cGUpOwogICAgIGVsc2UKICAgICAgICAgKHZvaWQpIFB5T2JqZWN0X0lOSVRfVkFSKChQeVZhck9iamVjdCAqKW9iaiwgdHlwZSwgbml0ZW1zKTsKIApAQCAtOTAyLDYgKzEwMjksNyBAQAogICAgIFB5VHlwZU9iamVjdCAqdHlwZSwgKmJhc2U7CiAgICAgZGVzdHJ1Y3RvciBiYXNlZGVhbGxvYzsKICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIGludCBoYXNfZmluYWxpemVyOwogCiAgICAgLyogRXh0cmFjdCB0aGUgdHlwZTsgd2UgZXhwZWN0IGl0IHRvIGJlIGEgaGVhcCB0eXBlICovCiAgICAgdHlwZSA9IFB5X1RZUEUoc2VsZik7CkBAIC05MTcsNiArMTA0NSwxMCBAQAogICAgICAgICAgICBjbGVhcl9zbG90cygpLCBvciBERUNSRUYgdGhlIGRpY3QsIG9yIGNsZWFyIHdlYWtyZWZzLiAqLwogCiAgICAgICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCisgICAgICAgIGlmICh0eXBlLT50cF9maW5hbGl6ZSkgeworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmICh0eXBlLT50cF9kZWwpIHsKICAgICAgICAgICAgIHR5cGUtPnRwX2RlbChzZWxmKTsKICAgICAgICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKQpAQCAtOTY4LDI1ICsxMTAwLDM2IEBACiAgICAgICAgIGFzc2VydChiYXNlKTsKICAgICB9CiAKLSAgICAvKiBJZiB3ZSBhZGRlZCBhIHdlYWtsaXN0LCB3ZSBjbGVhciBpdC4gICAgICBEbyB0aGlzICpiZWZvcmUqIGNhbGxpbmcKLSAgICAgICB0aGUgZmluYWxpemVyIChfX2RlbF9fKSwgY2xlYXJpbmcgc2xvdHMsIG9yIGNsZWFyaW5nIHRoZSBpbnN0YW5jZQotICAgICAgIGRpY3QuICovCisgICAgaGFzX2ZpbmFsaXplciA9IHR5cGUtPnRwX2ZpbmFsaXplIHx8IHR5cGUtPnRwX2RlbDsKIAorICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCisgICAgaWYgKGhhc19maW5hbGl6ZXIpCisgICAgICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKKworICAgIGlmICh0eXBlLT50cF9maW5hbGl6ZSkgeworICAgICAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKHNlbGYpIDwgMCkgeworICAgICAgICAgICAgLyogUmVzdXJyZWN0ZWQgKi8KKyAgICAgICAgICAgIGdvdG8gZW5kbGFiZWw7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogSWYgd2UgYWRkZWQgYSB3ZWFrbGlzdCwgd2UgY2xlYXIgaXQuICAgICAgRG8gdGhpcyAqYmVmb3JlKiBjYWxsaW5nCisgICAgICAgdHBfZGVsLCBjbGVhcmluZyBzbG90cywgb3IgY2xlYXJpbmcgdGhlIGluc3RhbmNlIGRpY3QuICovCiAgICAgaWYgKHR5cGUtPnRwX3dlYWtsaXN0b2Zmc2V0ICYmICFiYXNlLT50cF93ZWFrbGlzdG9mZnNldCkKICAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcyhzZWxmKTsKIAotICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCiAgICAgaWYgKHR5cGUtPnRwX2RlbCkgewotICAgICAgICBfUHlPYmplY3RfR0NfVFJBQ0soc2VsZik7CiAgICAgICAgIHR5cGUtPnRwX2RlbChzZWxmKTsKLSAgICAgICAgaWYgKHNlbGYtPm9iX3JlZmNudCA+IDApCi0gICAgICAgICAgICBnb3RvIGVuZGxhYmVsOyAgICAgICAgICAgICAgLyogcmVzdXJyZWN0ZWQgKi8KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CisgICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKSB7CisgICAgICAgICAgICAvKiBSZXN1cnJlY3RlZCAqLworICAgICAgICAgICAgZ290byBlbmRsYWJlbDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaGFzX2ZpbmFsaXplcikgeworICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICAgICAgLyogTmV3IHdlYWtyZWZzIGNvdWxkIGJlIGNyZWF0ZWQgZHVyaW5nIHRoZSBmaW5hbGl6ZXIgY2FsbC4KLSAgICAgICAgICAgIElmIHRoaXMgb2NjdXJzLCBjbGVhciB0aGVtIG91dCB3aXRob3V0IGNhbGxpbmcgdGhlaXIKLSAgICAgICAgICAgIGZpbmFsaXplcnMgc2luY2UgdGhleSBtaWdodCByZWx5IG9uIHBhcnQgb2YgdGhlIG9iamVjdAotICAgICAgICAgICAgYmVpbmcgZmluYWxpemVkIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuICovCisgICAgICAgICAgIElmIHRoaXMgb2NjdXJzLCBjbGVhciB0aGVtIG91dCB3aXRob3V0IGNhbGxpbmcgdGhlaXIKKyAgICAgICAgICAgZmluYWxpemVycyBzaW5jZSB0aGV5IG1pZ2h0IHJlbHkgb24gcGFydCBvZiB0aGUgb2JqZWN0CisgICAgICAgICAgIGJlaW5nIGZpbmFsaXplZCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiAqLwogICAgICAgICBpZiAodHlwZS0+dHBfd2Vha2xpc3RvZmZzZXQgJiYgIWJhc2UtPnRwX3dlYWtsaXN0b2Zmc2V0KSB7CiAgICAgICAgICAgICAvKiBNb2RlbGVkIGFmdGVyIEdFVF9XRUFLUkVGU19MSVNUUFRSKCkgKi8KICAgICAgICAgICAgIFB5V2Vha1JlZmVyZW5jZSAqKmxpc3QgPSAoUHlXZWFrUmVmZXJlbmNlICoqKSBcCkBAIC0xNDQ2LDggKzE1ODksMTAgQEAKICAgICAgICB0aGF0IGlzIG5vdCBpbmNsdWRlZCBpbiBhY2MuCiAgICAgKi8KICAgICByZW1haW4gPSAoaW50ICopUHlNZW1fTUFMTE9DKFNJWkVPRl9JTlQqdG9fbWVyZ2Vfc2l6ZSk7Ci0gICAgaWYgKHJlbWFpbiA9PSBOVUxMKQorICAgIGlmIChyZW1haW4gPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCB0b19tZXJnZV9zaXplOyBpKyspCiAgICAgICAgIHJlbWFpbltpXSA9IDA7CiAKQEAgLTE0NzksNyArMTYyNCw3IEBACiAgICAgICAgIH0KICAgICAgICAgb2sgPSBQeUxpc3RfQXBwZW5kKGFjYywgY2FuZGlkYXRlKTsKICAgICAgICAgaWYgKG9rIDwgMCkgewotICAgICAgICAgICAgUHlNZW1fRnJlZShyZW1haW4pOworICAgICAgICAgICAgUHlNZW1fRlJFRShyZW1haW4pOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGZvciAoaiA9IDA7IGogPCB0b19tZXJnZV9zaXplOyBqKyspIHsKQEAgLTE5MzksNyArMjA4NCw3IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotbG9uZwordW5zaWduZWQgbG9uZwogUHlUeXBlX0dldEZsYWdzKFB5VHlwZU9iamVjdCAqdHlwZSkKIHsKICAgICByZXR1cm4gdHlwZS0+dHBfZmxhZ3M7CkBAIC0yMTA4LDcgKzIyNTMsNyBAQAogICAgICAgICAgICAgaWYgKCF2YWxpZF9pZGVudGlmaWVyKHRtcCkpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2sodG1wKSk7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcodG1wLCAiX19kaWN0X18iKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKHRtcCwgJlB5SWRfX19kaWN0X18pID09IDApIHsKICAgICAgICAgICAgICAgICBpZiAoIW1heV9hZGRfZGljdCB8fCBhZGRfZGljdCkgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIl9fZGljdF9fIHNsb3QgZGlzYWxsb3dlZDogIgpAQCAtMjEzOSw3ICsyMjg0LDcgQEAKICAgICAgICAgZm9yIChpID0gaiA9IDA7IGkgPCBuc2xvdHM7IGkrKykgewogICAgICAgICAgICAgdG1wID0gUHlUdXBsZV9HRVRfSVRFTShzbG90cywgaSk7CiAgICAgICAgICAgICBpZiAoKGFkZF9kaWN0ICYmCi0gICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKHRtcCwgIl9fZGljdF9fIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKHRtcCwgJlB5SWRfX19kaWN0X18pID09IDApIHx8CiAgICAgICAgICAgICAgICAgKGFkZF93ZWFrICYmCiAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKHRtcCwgIl9fd2Vha3JlZl9fIikgPT0gMCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yMjEwLDcgKzIzNTUsNyBAQAogCiAgICAgLyogSW5pdGlhbGl6ZSB0cF9mbGFncyAqLwogICAgIHR5cGUtPnRwX2ZsYWdzID0gUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IRUFQVFlQRSB8Ci0gICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEU7CisgICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkU7CiAgICAgaWYgKGJhc2UtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dDKQogICAgICAgICB0eXBlLT50cF9mbGFncyB8PSBQeV9UUEZMQUdTX0hBVkVfR0M7CiAKQEAgLTIyODAsOCArMjQyNSwxMCBAQAogICAgICAgICAgICAgLyogU2lsZW50bHkgdHJ1bmNhdGUgdGhlIGRvY3N0cmluZyBpZiBpdCBjb250YWlucyBudWxsIGJ5dGVzLiAqLwogICAgICAgICAgICAgbGVuID0gc3RybGVuKGRvY19zdHIpOwogICAgICAgICAgICAgdHBfZG9jID0gKGNoYXIgKilQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7Ci0gICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpCisgICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1jcHkodHBfZG9jLCBkb2Nfc3RyLCBsZW4gKyAxKTsKICAgICAgICAgICAgIHR5cGUtPnRwX2RvYyA9IHRwX2RvYzsKICAgICAgICAgfQpAQCAtMjQwMSw3ICsyNTQ4LDcgQEAKICAgICBjaGFyICpzOwogICAgIGNoYXIgKnJlc19zdGFydCA9IChjaGFyKilyZXM7CiAgICAgUHlUeXBlX1Nsb3QgKnNsb3Q7Ci0gICAgCisKICAgICAvKiBTZXQgdGhlIHR5cGUgbmFtZSBhbmQgcXVhbG5hbWUgKi8KICAgICBzID0gc3RycmNocihzcGVjLT5uYW1lLCAnLicpOwogICAgIGlmIChzID09IE5VTEwpCkBAIC0yNDIyLDcgKzI1NjksNyBAQAogICAgIHR5cGUtPnRwX25hbWUgPSBzcGVjLT5uYW1lOwogICAgIGlmICghdHlwZS0+dHBfbmFtZSkKICAgICAgICAgZ290byBmYWlsOwotICAgIAorCiAgICAgLyogQWRqdXN0IGZvciBlbXB0eSB0dXBsZSBiYXNlcyAqLwogICAgIGlmICghYmFzZXMpIHsKICAgICAgICAgYmFzZSA9ICZQeUJhc2VPYmplY3RfVHlwZTsKQEAgLTI0ODIsMTEgKzI2MjksMTQgQEAKICAgICAgICAgLyogbmVlZCB0byBtYWtlIGEgY29weSBvZiB0aGUgZG9jc3RyaW5nIHNsb3QsIHdoaWNoIHVzdWFsbHkKICAgICAgICAgICAgcG9pbnRzIHRvIGEgc3RhdGljIHN0cmluZyBsaXRlcmFsICovCiAgICAgICAgIGlmIChzbG90LT5zbG90ID09IFB5X3RwX2RvYykgewotICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzbG90LT5wZnVuYykrMTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9sZF9kb2MgPSBfUHlUeXBlX0RvY1dpdGhvdXRTaWduYXR1cmUodHlwZS0+dHBfbmFtZSwgc2xvdC0+cGZ1bmMpOworICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihvbGRfZG9jKSsxOwogICAgICAgICAgICAgY2hhciAqdHBfZG9jID0gUHlPYmplY3RfTUFMTE9DKGxlbik7Ci0gICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpCisgICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIG1lbWNweSh0cF9kb2MsIHNsb3QtPnBmdW5jLCBsZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtY3B5KHRwX2RvYywgb2xkX2RvYywgbGVuKTsKICAgICAgICAgICAgIHR5cGUtPnRwX2RvYyA9IHRwX2RvYzsKICAgICAgICAgfQogICAgIH0KQEAgLTI1MDYsNyArMjY1Niw3IEBACiAgICAgLyogU2V0IHR5cGUuX19tb2R1bGVfXyAqLwogICAgIHMgPSBzdHJyY2hyKHNwZWMtPm5hbWUsICcuJyk7CiAgICAgaWYgKHMgIT0gTlVMTCkKLSAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXywgCisgICAgICAgIF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbW9kdWxlX18sCiAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoCiAgICAgICAgICAgICAgICAgc3BlYy0+bmFtZSwgKFB5X3NzaXplX3QpKHMgLSBzcGVjLT5uYW1lKSkpOwogCkBAIC0yNTIzLDYgKzI2NzMsMTkgQEAKICAgICByZXR1cm4gUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzKHNwZWMsIE5VTEwpOwogfQogCit2b2lkICoKK1B5VHlwZV9HZXRTbG90KFB5VHlwZU9iamVjdCAqdHlwZSwgaW50IHNsb3QpCit7CisgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0eXBlLCBQeV9UUEZMQUdTX0hFQVBUWVBFKSkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChzbG90ID49IFB5X0FSUkFZX0xFTkdUSChzbG90b2Zmc2V0cykpIHsKKyAgICAgICAgLyogRXh0ZW5zaW9uIG1vZHVsZSByZXF1ZXN0aW5nIHNsb3QgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uICovCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gICoodm9pZCoqKSgoKGNoYXIqKXR5cGUpICsgc2xvdG9mZnNldHNbc2xvdF0pOworfQogCiAvKiBJbnRlcm5hbCBBUEkgdG8gbG9vayBmb3IgYSBuYW1lIHRocm91Z2ggdGhlIE1STy4KICAgIFRoaXMgcmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSwgYW5kIGRvZXNuJ3Qgc2V0IGFuIGV4Y2VwdGlvbiEgKi8KQEAgLTI2OTUsMTAgKzI4NTgsMTQgQEAKIHR5cGVfZGVhbGxvYyhQeVR5cGVPYmplY3QgKnR5cGUpCiB7CiAgICAgUHlIZWFwVHlwZU9iamVjdCAqZXQ7CisgICAgUHlPYmplY3QgKnRwLCAqdmFsLCAqdGI7CiAKICAgICAvKiBBc3NlcnQgdGhpcyBpcyBhIGhlYXAtYWxsb2NhdGVkIHR5cGUgb2JqZWN0ICovCiAgICAgYXNzZXJ0KHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSk7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0sodHlwZSk7CisgICAgUHlFcnJfRmV0Y2goJnRwLCAmdmFsLCAmdGIpOworICAgIHJlbW92ZV9hbGxfc3ViY2xhc3Nlcyh0eXBlLCB0eXBlLT50cF9iYXNlcyk7CisgICAgUHlFcnJfUmVzdG9yZSh0cCwgdmFsLCB0Yik7CiAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKil0eXBlKTsKICAgICBldCA9IChQeUhlYXBUeXBlT2JqZWN0ICopdHlwZTsKICAgICBQeV9YREVDUkVGKHR5cGUtPnRwX2Jhc2UpOwpAQCAtMjcyMyw3ICsyODkwLDcgQEAKIHR5cGVfc3ViY2xhc3NlcyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzX2lnbm9yZWQpCiB7CiAgICAgUHlPYmplY3QgKmxpc3QsICpyYXcsICpyZWY7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmIChsaXN0ID09IE5VTEwpCkBAIC0yNzMxLDEwICsyODk4LDkgQEAKICAgICByYXcgPSB0eXBlLT50cF9zdWJjbGFzc2VzOwogICAgIGlmIChyYXcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhyYXcpKTsKLSAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHJhdyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0ocmF3LCBpKTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QocmF3KSk7CisgICAgaSA9IDA7CisgICAgd2hpbGUgKFB5RGljdF9OZXh0KHJhdywgJmksIE5VTEwsICZyZWYpKSB7CiAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgIHJlZiA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgIGlmIChyZWYgIT0gUHlfTm9uZSkgewpAQCAtMjg2Nyw2ICszMDMzLDggQEAKIH07CiAKIFB5RG9jX1NUUlZBUih0eXBlX2RvYywKKy8qIHRoaXMgdGV4dCBzaWduYXR1cmUgY2Fubm90IGJlIGFjY3VyYXRlIHlldC4gIHdpbGwgZml4LiAgLS1sYXJyeSAqLworInR5cGUob2JqZWN0X29yX25hbWUsIGJhc2VzLCBkaWN0KVxuIgogInR5cGUob2JqZWN0KSAtPiB0aGUgb2JqZWN0J3MgdHlwZVxuIgogInR5cGUobmFtZSwgYmFzZXMsIGRpY3QpIC0+IGEgbmV3IHR5cGUiKTsKIApAQCAtMjkyMyw4ICszMDkxLDggQEAKICAgICAgICAgICAgY2xhc3MncyBkaWN0OyB0aGUgY3ljbGUgd2lsbCBiZSBicm9rZW4gdGhhdCB3YXkuCiAKICAgICAgICB0cF9zdWJjbGFzc2VzOgotICAgICAgICAgICBBIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZTsgYW5kCi0gICAgICAgICAgIGxpc3RzIGhhdmUgdGhlaXIgb3duIHRwX2NsZWFyLgorICAgICAgICAgICBBIGRpY3Qgb2Ygd2VhayByZWZlcmVuY2VzIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZTsgYW5kCisgICAgICAgICAgIGRpY3RzIGhhdmUgdGhlaXIgb3duIHRwX2NsZWFyLgogCiAgICAgICAgc2xvdHMgKGluIFB5SGVhcFR5cGVPYmplY3QpOgogICAgICAgICAgICBBIHR1cGxlIG9mIHN0cmluZ3MgY2FuJ3QgYmUgcGFydCBvZiBhIGN5Y2xlLgpAQCAtMzE0MSw3ICszMzA5LDcgQEAKICAgICAgICAgUHlfWERFQ1JFRihtb2QpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKG1vZCAhPSBOVUxMICYmIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG1vZCwgImJ1aWx0aW5zIikpCisgICAgaWYgKG1vZCAhPSBOVUxMICYmIF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2QsICZQeUlkX2J1aWx0aW5zKSkKICAgICAgICAgcnRuID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlVS4lVSBvYmplY3QgYXQgJXA+IiwgbW9kLCBuYW1lLCBzZWxmKTsKICAgICBlbHNlCiAgICAgICAgIHJ0biA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8JXMgb2JqZWN0IGF0ICVwPiIsCkBAIC0zMzEzLDcgKzM0ODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIl9fY2xhc3NfXyBhc3NpZ25tZW50OiBvbmx5IGZvciBoZWFwIHR5cGVzIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgaWYgKGNvbXBhdGlibGVfZm9yX2Fzc2lnbm1lbnQobmV3dG8sIG9sZHRvLCAiX19jbGFzc19fIikpIHsKKyAgICBpZiAoY29tcGF0aWJsZV9mb3JfYXNzaWdubWVudChvbGR0bywgbmV3dG8sICJfX2NsYXNzX18iKSkgewogICAgICAgICBQeV9JTkNSRUYobmV3dG8pOwogICAgICAgICBQeV9UWVBFKHNlbGYpID0gbmV3dG87CiAgICAgICAgIFB5X0RFQ1JFRihvbGR0byk7CkBAIC0zMzY2LDE1MCArMzUzNCw0MjMgQEAKICAgICByZXR1cm4gUHlJbXBvcnRfSW1wb3J0KGNvcHlyZWdfc3RyKTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXNsb3RuYW1lcyhQeU9iamVjdCAqY2xzKQorUHlfTE9DQUwoUHlPYmplY3QgKikKK19QeVR5cGVfR2V0U2xvdE5hbWVzKFB5VHlwZU9iamVjdCAqY2xzKQogewotICAgIFB5T2JqZWN0ICpjbHNkaWN0OwogICAgIFB5T2JqZWN0ICpjb3B5cmVnOwogICAgIFB5T2JqZWN0ICpzbG90bmFtZXM7CiAgICAgX1B5X0lERU5USUZJRVIoX19zbG90bmFtZXNfXyk7CiAgICAgX1B5X0lERU5USUZJRVIoX3Nsb3RuYW1lcyk7CiAKLSAgICBjbHNkaWN0ID0gKChQeVR5cGVPYmplY3QgKiljbHMpLT50cF9kaWN0OwotICAgIHNsb3RuYW1lcyA9IF9QeURpY3RfR2V0SXRlbUlkKGNsc2RpY3QsICZQeUlkX19fc2xvdG5hbWVzX18pOwotICAgIGlmIChzbG90bmFtZXMgIT0gTlVMTCAmJiBQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSkgeworICAgIGFzc2VydChQeVR5cGVfQ2hlY2soY2xzKSk7CisKKyAgICAvKiBHZXQgdGhlIHNsb3QgbmFtZXMgZnJvbSB0aGUgY2FjaGUgaW4gdGhlIGNsYXNzIGlmIHBvc3NpYmxlLiAqLworICAgIHNsb3RuYW1lcyA9IF9QeURpY3RfR2V0SXRlbUlkV2l0aEVycm9yKGNscy0+dHBfZGljdCwgJlB5SWRfX19zbG90bmFtZXNfXyk7CisgICAgaWYgKHNsb3RuYW1lcyAhPSBOVUxMKSB7CisgICAgICAgIGlmIChzbG90bmFtZXMgIT0gUHlfTm9uZSAmJiAhUHlMaXN0X0NoZWNrKHNsb3RuYW1lcykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcy5fX3Nsb3RuYW1lc19fIHNob3VsZCBiZSBhIGxpc3Qgb3IgTm9uZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbHMtPnRwX25hbWUsIFB5X1RZUEUoc2xvdG5hbWVzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBQeV9JTkNSRUYoc2xvdG5hbWVzKTsKICAgICAgICAgcmV0dXJuIHNsb3RuYW1lczsKICAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAvKiBUaGUgY2xhc3MgZG9lcyBub3QgaGF2ZSB0aGUgc2xvdCBuYW1lcyBjYWNoZWQgeWV0LiAqLworICAgIH0KIAogICAgIGNvcHlyZWcgPSBpbXBvcnRfY29weXJlZygpOwogICAgIGlmIChjb3B5cmVnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2xvdG5hbWVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChjb3B5cmVnLCAmUHlJZF9fc2xvdG5hbWVzLCAiTyIsIGNscyk7CisgICAgLyogVXNlIF9zbG90bmFtZXMgZnVuY3Rpb24gZnJvbSB0aGUgY29weXJlZyBtb2R1bGUgdG8gZmluZCB0aGUgc2xvdHMKKyAgICAgICBieSB0aGlzIGNsYXNzIGFuZCBpdHMgYmFzZXMuIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWNoZSB0aGUgcmVzdWx0CisgICAgICAgaW4gX19zbG90bmFtZXNfXy4gKi8KKyAgICBzbG90bmFtZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhjb3B5cmVnLCAmUHlJZF9fc2xvdG5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscywgTlVMTCk7CiAgICAgUHlfREVDUkVGKGNvcHlyZWcpOwotICAgIGlmIChzbG90bmFtZXMgIT0gTlVMTCAmJgotICAgICAgICBzbG90bmFtZXMgIT0gUHlfTm9uZSAmJgotICAgICAgICAhUHlMaXN0X0NoZWNrKHNsb3RuYW1lcykpCi0gICAgeworICAgIGlmIChzbG90bmFtZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2xvdG5hbWVzICE9IFB5X05vbmUgJiYgIVB5TGlzdF9DaGVjayhzbG90bmFtZXMpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAiY29weXJlZy5fc2xvdG5hbWVzIGRpZG4ndCByZXR1cm4gYSBsaXN0IG9yIE5vbmUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLl9zbG90bmFtZXMgZGlkbid0IHJldHVybiBhIGxpc3Qgb3IgTm9uZSIpOwogICAgICAgICBQeV9ERUNSRUYoc2xvdG5hbWVzKTsKLSAgICAgICAgc2xvdG5hbWVzID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgcmV0dXJuIHNsb3RuYW1lczsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXJlZHVjZV8yKFB5T2JqZWN0ICpvYmopCitQeV9MT0NBTChQeU9iamVjdCAqKQorX1B5T2JqZWN0X0dldFN0YXRlKFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgUHlPYmplY3QgKmNscywgKmdldG5ld2FyZ3M7Ci0gICAgUHlPYmplY3QgKmFyZ3MgPSBOVUxMLCAqYXJnczIgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpnZXRzdGF0ZSA9IE5VTEwsICpzdGF0ZSA9IE5VTEwsICpuYW1lcyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnNsb3RzID0gTlVMTCwgKmxpc3RpdGVtcyA9IE5VTEwsICpkaWN0aXRlbXMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpjb3B5cmVnID0gTlVMTCwgKm5ld29iaiA9IE5VTEwsICpyZXMgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgaSwgbjsKLSAgICBfUHlfSURFTlRJRklFUihfX2dldG5ld2FyZ3NfXyk7CisgICAgUHlPYmplY3QgKnN0YXRlOworICAgIFB5T2JqZWN0ICpnZXRzdGF0ZTsKICAgICBfUHlfSURFTlRJRklFUihfX2dldHN0YXRlX18pOwotICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX18pOwotCi0gICAgY2xzID0gKFB5T2JqZWN0ICopIFB5X1RZUEUob2JqKTsKLQotICAgIGdldG5ld2FyZ3MgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19nZXRuZXdhcmdzX18pOwotICAgIGlmIChnZXRuZXdhcmdzICE9IE5VTEwpIHsKLSAgICAgICAgYXJncyA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZ2V0bmV3YXJncywgTlVMTCk7Ci0gICAgICAgIFB5X0RFQ1JFRihnZXRuZXdhcmdzKTsKLSAgICAgICAgaWYgKGFyZ3MgIT0gTlVMTCAmJiAhUHlUdXBsZV9DaGVjayhhcmdzKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX18gc2hvdWxkIHJldHVybiBhIHR1cGxlLCAiCi0gICAgICAgICAgICAgICAgIm5vdCAnJS4yMDBzJyIsIFB5X1RZUEUoYXJncyktPnRwX25hbWUpOwotICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKLSAgICB9Ci0gICAgaWYgKGFyZ3MgPT0gTlVMTCkKLSAgICAgICAgZ290byBlbmQ7CiAKICAgICBnZXRzdGF0ZSA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX2dldHN0YXRlX18pOwotICAgIGlmIChnZXRzdGF0ZSAhPSBOVUxMKSB7CisgICAgaWYgKGdldHN0YXRlID09IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKnNsb3RuYW1lczsKKworICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeUVycl9DbGVhcigpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqZGljdDsKKyAgICAgICAgICAgIGRpY3QgPSBfUHlPYmplY3RfR2V0RGljdFB0cihvYmopOworICAgICAgICAgICAgLyogSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgb2JqZWN0J3MgZGljdCBpcyBub3QgaW5pdGlhbGl6ZWQKKyAgICAgICAgICAgICAgIHlldC4gSW4gdGhpcyBjYXNlLCB3ZSB3aWxsIHJldHVybiBOb25lIGZvciB0aGUgc3RhdGUuCisgICAgICAgICAgICAgICBXZSBhbHNvIHJldHVybiBOb25lIGlmIHRoZSBkaWN0IGlzIGVtcHR5IHRvIG1ha2UgdGhlIGJlaGF2aW9yCisgICAgICAgICAgICAgICBjb25zaXN0ZW50IHJlZ2FyZGxlc3Mgd2hldGhlciB0aGUgZGljdCB3YXMgaW5pdGlhbGl6ZWQgb3Igbm90LgorICAgICAgICAgICAgICAgVGhpcyBtYWtlIHVuaXQgdGVzdGluZyBlYXNpZXIuICovCisgICAgICAgICAgICBpZiAoZGljdCAhPSBOVUxMICYmICpkaWN0ICE9IE5VTEwgJiYgUHlEaWN0X1NpemUoKmRpY3QpID4gMCkgeworICAgICAgICAgICAgICAgIHN0YXRlID0gKmRpY3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFB5X05vbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9JTkNSRUYoc3RhdGUpOworICAgICAgICB9CisKKyAgICAgICAgc2xvdG5hbWVzID0gX1B5VHlwZV9HZXRTbG90TmFtZXMoUHlfVFlQRShvYmopKTsKKyAgICAgICAgaWYgKHNsb3RuYW1lcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnQoc2xvdG5hbWVzID09IFB5X05vbmUgfHwgUHlMaXN0X0NoZWNrKHNsb3RuYW1lcykpOworICAgICAgICBpZiAoc2xvdG5hbWVzICE9IFB5X05vbmUgJiYgUHlfU0laRShzbG90bmFtZXMpID4gMCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnNsb3RzOworICAgICAgICAgICAgUHlfc3NpemVfdCBzbG90bmFtZXNfc2l6ZSwgaTsKKworICAgICAgICAgICAgc2xvdHMgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICBpZiAoc2xvdHMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90bmFtZXMpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNsb3RuYW1lc19zaXplID0gUHlfU0laRShzbG90bmFtZXMpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNsb3RuYW1lc19zaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSwgKnZhbHVlOworCisgICAgICAgICAgICAgICAgbmFtZSA9IFB5TGlzdF9HRVRfSVRFTShzbG90bmFtZXMsIGkpOworICAgICAgICAgICAgICAgIHZhbHVlID0gUHlPYmplY3RfR2V0QXR0cihvYmosIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogSXQgaXMgbm90IGFuIGVycm9yIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQuICovCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbnQgZXJyID0gUHlEaWN0X1NldEl0ZW0oc2xvdHMsIG5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIFRoZSBsaXN0IGlzIHN0b3JlZCBvbiB0aGUgY2xhc3Mgc28gaXQgbWF5IG11dGF0ZXMgd2hpbGUgd2UKKyAgICAgICAgICAgICAgICAgICBpdGVyYXRlIG92ZXIgaXQgKi8KKyAgICAgICAgICAgICAgICBpZiAoc2xvdG5hbWVzX3NpemUgIT0gUHlfU0laRShzbG90bmFtZXMpKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zbG90c25hbWVfXyBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIFdlIGhhbmRsZSBlcnJvcnMgd2l0aGluIHRoZSBsb29wIGhlcmUuICovCisgICAgICAgICAgICAgICAgaWYgKDApIHsKKyAgICAgICAgICAgICAgICAgIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdG5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBJZiB3ZSBmb3VuZCBzb21lIHNsb3QgYXR0cmlidXRlcywgcGFjayB0aGVtIGluIGEgdHVwbGUgYWxvbmcKKyAgICAgICAgICAgICAgIHRoZSBvcmdpbmFsIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LiAqLworICAgICAgICAgICAgaWYgKFB5RGljdF9TaXplKHNsb3RzKSA+IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhdGUyOworCisgICAgICAgICAgICAgICAgc3RhdGUyID0gUHlUdXBsZV9QYWNrKDIsIHN0YXRlLCBzbG90cyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90cyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90cyk7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7CisgICAgfQorICAgIGVsc2UgeyAvKiBnZXRzdGF0ZSAhPSBOVUxMICovCiAgICAgICAgIHN0YXRlID0gUHlPYmplY3RfQ2FsbE9iamVjdChnZXRzdGF0ZSwgTlVMTCk7CiAgICAgICAgIFB5X0RFQ1JFRihnZXRzdGF0ZSk7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5T2JqZWN0ICoqZGljdDsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZGljdCA9IF9QeU9iamVjdF9HZXREaWN0UHRyKG9iaik7Ci0gICAgICAgIGlmIChkaWN0ICYmICpkaWN0KQotICAgICAgICAgICAgc3RhdGUgPSAqZGljdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhdGUgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoc3RhdGUpOwotICAgICAgICBuYW1lcyA9IHNsb3RuYW1lcyhjbHMpOwotICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICBpZiAobmFtZXMgIT0gUHlfTm9uZSAmJiBQeUxpc3RfR0VUX1NJWkUobmFtZXMpID4gMCkgewotICAgICAgICAgICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhuYW1lcykpOwotICAgICAgICAgICAgc2xvdHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgICAgICBpZiAoc2xvdHMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgIG4gPSAwOwotICAgICAgICAgICAgLyogQ2FuJ3QgcHJlLWNvbXB1dGUgdGhlIGxpc3Qgc2l6ZTsgdGhlIGxpc3QKLSAgICAgICAgICAgICAgIGlzIHN0b3JlZCBvbiB0aGUgY2xhc3Mgc28gYWNjZXNzaWJsZSB0byBvdGhlcgotICAgICAgICAgICAgICAgdGhyZWFkcywgd2hpY2ggbWF5IGJlIHJ1biBieSBERUNSRUYgKi8KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeUxpc3RfR0VUX1NJWkUobmFtZXMpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSwgKnZhbHVlOwotICAgICAgICAgICAgICAgIG5hbWUgPSBQeUxpc3RfR0VUX0lURU0obmFtZXMsIGkpOwotICAgICAgICAgICAgICAgIHZhbHVlID0gUHlPYmplY3RfR2V0QXR0cihvYmosIG5hbWUpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgZXJyID0gUHlEaWN0X1NldEl0ZW0oc2xvdHMsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBQeV9CdWlsZFZhbHVlKCIoTk8pIiwgc3RhdGUsIHNsb3RzKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICB9CisKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK1B5X0xPQ0FMKGludCkKK19QeU9iamVjdF9HZXROZXdBcmd1bWVudHMoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKiphcmdzLCBQeU9iamVjdCAqKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqZ2V0bmV3YXJncywgKmdldG5ld2FyZ3NfZXg7CisgICAgX1B5X0lERU5USUZJRVIoX19nZXRuZXdhcmdzX2V4X18pOworICAgIF9QeV9JREVOVElGSUVSKF9fZ2V0bmV3YXJnc19fKTsKKworICAgIGlmIChhcmdzID09IE5VTEwgfHwga3dhcmdzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBXZSBmaXJzdCBhdHRlbXB0IHRvIGZldGNoIHRoZSBhcmd1bWVudHMgZm9yIF9fbmV3X18gYnkgY2FsbGluZworICAgICAgIF9fZ2V0bmV3YXJnc19leF9fIG9uIHRoZSBvYmplY3QuICovCisgICAgZ2V0bmV3YXJnc19leCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG9iaiwgJlB5SWRfX19nZXRuZXdhcmdzX2V4X18pOworICAgIGlmIChnZXRuZXdhcmdzX2V4ICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKm5ld2FyZ3MgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGdldG5ld2FyZ3NfZXgsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoZ2V0bmV3YXJnc19leCk7CisgICAgICAgIGlmIChuZXdhcmdzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQorICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sobmV3YXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19leF9fIHNob3VsZCByZXR1cm4gYSB0dXBsZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKG5ld2FyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlfU0laRShuZXdhcmdzKSAhPSAyKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX2V4X18gc2hvdWxkIHJldHVybiBhIHR1cGxlIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIDIsIG5vdCAlemQiLCBQeV9TSVpFKG5ld2FyZ3MpKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAqYXJncyA9IFB5VHVwbGVfR0VUX0lURU0obmV3YXJncywgMCk7CisgICAgICAgIFB5X0lOQ1JFRigqYXJncyk7CisgICAgICAgICprd2FyZ3MgPSBQeVR1cGxlX0dFVF9JVEVNKG5ld2FyZ3MsIDEpOworICAgICAgICBQeV9JTkNSRUYoKmt3YXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKworICAgICAgICAvKiBYWFggV2Ugc2hvdWxkIHBlcmhhcHMgYWxsb3cgTm9uZSB0byBiZSBwYXNzZWQgaGVyZS4gKi8KKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKCphcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgaXRlbSBvZiB0aGUgdHVwbGUgcmV0dXJuZWQgYnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfZXhfXyBtdXN0IGJlIGEgdHVwbGUsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSgqYXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmFyZ3MpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmt3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFQeURpY3RfQ2hlY2soKmt3YXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBpdGVtIG9mIHRoZSB0dXBsZSByZXR1cm5lZCBieSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19leF9fIG11c3QgYmUgYSBkaWN0LCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoKmt3YXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmFyZ3MpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmt3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBUaGUgb2JqZWN0IGRvZXMgbm90IGhhdmUgX19nZXRuZXdhcmdzX2V4X18gc28gd2UgZmFsbGJhY2sgb24gdXNpbmcKKyAgICAgICBfX2dldG5ld2FyZ3NfXyBpbnN0ZWFkLiAqLworICAgIGdldG5ld2FyZ3MgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvYmosICZQeUlkX19fZ2V0bmV3YXJnc19fKTsKKyAgICBpZiAoZ2V0bmV3YXJncyAhPSBOVUxMKSB7CisgICAgICAgICphcmdzID0gUHlPYmplY3RfQ2FsbE9iamVjdChnZXRuZXdhcmdzLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGdldG5ld2FyZ3MpOworICAgICAgICBpZiAoKmFyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICghUHlUdXBsZV9DaGVjaygqYXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19fIHNob3VsZCByZXR1cm4gYSB0dXBsZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKCphcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9DTEVBUigqYXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKmt3YXJncyA9IE5VTEw7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogVGhlIG9iamVjdCBkb2VzIG5vdCBoYXZlIF9fZ2V0bmV3YXJnc19leF9fIGFuZCBfX2dldG5ld2FyZ3NfXy4gVGhpcyBtYXkKKyAgICAgICBtZWFucyBfX25ld19fIGRvZXMgbm90IHRha2VzIGFueSBhcmd1bWVudHMgb24gdGhpcyBvYmplY3QsIG9yIHRoYXQgdGhlCisgICAgICAgb2JqZWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgcmVkdWNlIHByb3RvY29sIGZvciBwaWNrbGluZyBvcgorICAgICAgIGNvcHlpbmcuICovCisgICAgKmFyZ3MgPSBOVUxMOworICAgICprd2FyZ3MgPSBOVUxMOworICAgIHJldHVybiAwOworfQorCitQeV9MT0NBTChpbnQpCitfUHlPYmplY3RfR2V0SXRlbXNJdGVyKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICoqbGlzdGl0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKmRpY3RpdGVtcykKK3sKKyAgICBpZiAobGlzdGl0ZW1zID09IE5VTEwgfHwgZGljdGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBpZiAoIVB5TGlzdF9DaGVjayhvYmopKSB7Ci0gICAgICAgIGxpc3RpdGVtcyA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihsaXN0aXRlbXMpOworICAgICAgICAqbGlzdGl0ZW1zID0gUHlfTm9uZTsKKyAgICAgICAgUHlfSU5DUkVGKCpsaXN0aXRlbXMpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgbGlzdGl0ZW1zID0gUHlPYmplY3RfR2V0SXRlcihvYmopOwotICAgICAgICBpZiAobGlzdGl0ZW1zID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgKmxpc3RpdGVtcyA9IFB5T2JqZWN0X0dldEl0ZXIob2JqKTsKKyAgICAgICAgaWYgKCpsaXN0aXRlbXMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBpZiAoIVB5RGljdF9DaGVjayhvYmopKSB7Ci0gICAgICAgIGRpY3RpdGVtcyA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihkaWN0aXRlbXMpOworICAgICAgICAqZGljdGl0ZW1zID0gUHlfTm9uZTsKKyAgICAgICAgUHlfSU5DUkVGKCpkaWN0aXRlbXMpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW1zOwogICAgICAgICBfUHlfSURFTlRJRklFUihpdGVtcyk7Ci0gICAgICAgIFB5T2JqZWN0ICppdGVtcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQob2JqLCAmUHlJZF9pdGVtcywgIiIpOwotICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICBkaWN0aXRlbXMgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZW1zKTsKKworICAgICAgICBpdGVtcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKG9iaiwgJlB5SWRfaXRlbXMsIE5VTEwpOworICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoKmxpc3RpdGVtcyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKmRpY3RpdGVtcyA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlbXMpOwogICAgICAgICBQeV9ERUNSRUYoaXRlbXMpOwotICAgICAgICBpZiAoZGljdGl0ZW1zID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgaWYgKCpkaWN0aXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoKmxpc3RpdGVtcyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBhc3NlcnQoKmxpc3RpdGVtcyAhPSBOVUxMICYmICpkaWN0aXRlbXMgIT0gTlVMTCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3JlZHVjZV80KFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKmFyZ3MgPSBOVUxMLCAqa3dhcmdzID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY29weXJlZzsKKyAgICBQeU9iamVjdCAqbmV3b2JqLCAqbmV3YXJncywgKnN0YXRlLCAqbGlzdGl0ZW1zLCAqZGljdGl0ZW1zOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfZXhfXyk7CisKKyAgICBpZiAoX1B5T2JqZWN0X0dldE5ld0FyZ3VtZW50cyhvYmosICZhcmdzLCAma3dhcmdzKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOworICAgICAgICBpZiAoYXJncyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChrd2FyZ3MgPT0gTlVMTCkgeworICAgICAgICBrd2FyZ3MgPSBQeURpY3RfTmV3KCk7CisgICAgICAgIGlmIChrd2FyZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNvcHlyZWcgPSBpbXBvcnRfY29weXJlZygpOworICAgIGlmIChjb3B5cmVnID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5ld29iaiA9IF9QeU9iamVjdF9HZXRBdHRySWQoY29weXJlZywgJlB5SWRfX19uZXdvYmpfZXhfXyk7CisgICAgUHlfREVDUkVGKGNvcHlyZWcpOworICAgIGlmIChuZXdvYmogPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmV3YXJncyA9IFB5VHVwbGVfUGFjaygzLCBQeV9UWVBFKG9iaiksIGFyZ3MsIGt3YXJncyk7CisgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgIGlmIChuZXdhcmdzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzdGF0ZSA9IF9QeU9iamVjdF9HZXRTdGF0ZShvYmopOworICAgIGlmIChzdGF0ZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoX1B5T2JqZWN0X0dldEl0ZW1zSXRlcihvYmosICZsaXN0aXRlbXMsICZkaWN0aXRlbXMpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeVR1cGxlX1BhY2soNSwgbmV3b2JqLCBuZXdhcmdzLCBzdGF0ZSwgbGlzdGl0ZW1zLCBkaWN0aXRlbXMpOworICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgIFB5X0RFQ1JFRihsaXN0aXRlbXMpOworICAgIFB5X0RFQ1JFRihkaWN0aXRlbXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCityZWR1Y2VfMihQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICpjbHM7CisgICAgUHlPYmplY3QgKmFyZ3MgPSBOVUxMLCAqYXJnczIgPSBOVUxMLCAqa3dhcmdzID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc3RhdGUgPSBOVUxMLCAqbGlzdGl0ZW1zID0gTlVMTCwgKmRpY3RpdGVtcyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNvcHlyZWcgPSBOVUxMLCAqbmV3b2JqID0gTlVMTCwgKnJlcyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBpLCBuOworICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX18pOworCisgICAgaWYgKF9QeU9iamVjdF9HZXROZXdBcmd1bWVudHMob2JqLCAmYXJncywgJmt3YXJncykgPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgIGFzc2VydChrd2FyZ3MgPT0gTlVMTCk7CisgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKyAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoa3dhcmdzICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RGljdF9TaXplKGt3YXJncykgPiAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCB1c2UgcHJvdG9jb2wgNCBvciBncmVhdGVyIHRvIGNvcHkgdGhpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdDsgc2luY2UgX19nZXRuZXdhcmdzX2V4X18gcmV0dXJuZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkIGFyZ3VtZW50cy4iKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoa3dhcmdzKTsKKyAgICB9CisKKyAgICBzdGF0ZSA9IF9QeU9iamVjdF9HZXRTdGF0ZShvYmopOworICAgIGlmIChzdGF0ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVuZDsKKworICAgIGlmIChfUHlPYmplY3RfR2V0SXRlbXNJdGVyKG9iaiwgJmxpc3RpdGVtcywgJmRpY3RpdGVtcykgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKwogICAgIGNvcHlyZWcgPSBpbXBvcnRfY29weXJlZygpOwogICAgIGlmIChjb3B5cmVnID09IE5VTEwpCiAgICAgICAgIGdvdG8gZW5kOwpAQCAtMzUyMSw2ICszOTYyLDcgQEAKICAgICBhcmdzMiA9IFB5VHVwbGVfTmV3KG4rMSk7CiAgICAgaWYgKGFyZ3MyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZW5kOworICAgIGNscyA9IChQeU9iamVjdCAqKSBQeV9UWVBFKG9iaik7CiAgICAgUHlfSU5DUkVGKGNscyk7CiAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzMiwgMCwgY2xzKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0zNTM0LDkgKzM5NzYsNyBAQAogICBlbmQ6CiAgICAgUHlfWERFQ1JFRihhcmdzKTsKICAgICBQeV9YREVDUkVGKGFyZ3MyKTsKLSAgICBQeV9YREVDUkVGKHNsb3RzKTsKICAgICBQeV9YREVDUkVGKHN0YXRlKTsKLSAgICBQeV9YREVDUkVGKG5hbWVzKTsKICAgICBQeV9YREVDUkVGKGxpc3RpdGVtcyk7CiAgICAgUHlfWERFQ1JFRihkaWN0aXRlbXMpOwogICAgIFB5X1hERUNSRUYoY29weXJlZyk7CkBAIC0zNTY0LDcgKzQwMDQsOSBAQAogewogICAgIFB5T2JqZWN0ICpjb3B5cmVnLCAqcmVzOwogCi0gICAgaWYgKHByb3RvID49IDIpCisgICAgaWYgKHByb3RvID49IDQpCisgICAgICAgIHJldHVybiByZWR1Y2VfNChzZWxmKTsKKyAgICBlbHNlIGlmIChwcm90byA+PSAyKQogICAgICAgICByZXR1cm4gcmVkdWNlXzIoc2VsZik7CiAKICAgICBjb3B5cmVnID0gaW1wb3J0X2NvcHlyZWcoKTsKQEAgLTM2NjksMTYgKzQxMTEsOSBAQAogICAgICAgICAvKiBJc3N1ZSA3OTk0OiBJZiB3ZSdyZSBjb252ZXJ0aW5nIHRvIGEgc3RyaW5nLCB3ZQogICAgICAgICAgICBzaG91bGQgcmVqZWN0IGZvcm1hdCBzcGVjaWZpY2F0aW9ucyAqLwogICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoZm9ybWF0X3NwZWMpID4gMCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgaXMgZGVwcmVjYXRlZCIsIDEpIDwgMCkgewotICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBFdmVudHVhbGx5IHRoaXMgd2lsbCBiZWNvbWUgYW4gZXJyb3I6Ci0gICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICJub24tZW1wdHkgZm9ybWF0IHN0cmluZyBwYXNzZWQgdG8gb2JqZWN0Ll9fZm9ybWF0X18iKTsKLSAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgICovCisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9Gb3JtYXQoc2VsZl9hc19zdHIsIGZvcm1hdF9zcGVjKTsKQEAgLTM3ODgsOCArNDIyMyw4IEBACiAgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCi0gICAgUHlEb2NfU1RSKCJUaGUgbW9zdCBiYXNlIHR5cGUiKSwgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgIC8qIHRwX2ZsYWdzICovCisgICAgUHlEb2NfU1RSKCJvYmplY3QoKVxuLS1cblxuVGhlIG1vc3QgYmFzZSB0eXBlIiksICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIG9iamVjdF9yaWNoY29tcGFyZSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KQEAgLTM4MzMsNyArNDI2OCw3IEBACiAgICAgICAgICAgICBkZXNjciA9IFB5RGVzY3JfTmV3Q2xhc3NNZXRob2QodHlwZSwgbWV0aCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAobWV0aC0+bWxfZmxhZ3MgJiBNRVRIX1NUQVRJQykgewotICAgICAgICAgICAgUHlPYmplY3QgKmNmdW5jID0gUHlDRnVuY3Rpb25fTmV3KG1ldGgsIChQeU9iamVjdCopdHlwZSk7CisgICAgICAgICAgUHlPYmplY3QgKmNmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgobWV0aCwgKFB5T2JqZWN0Kil0eXBlLCBOVUxMKTsKICAgICAgICAgICAgIGlmIChjZnVuYyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGRlc2NyID0gUHlTdGF0aWNNZXRob2RfTmV3KGNmdW5jKTsKQEAgLTQxMDMsNiArNDUzOCwxMCBAQAogICAgICAgICBDT1BZU0xPVCh0cF9pbml0KTsKICAgICAgICAgQ09QWVNMT1QodHBfYWxsb2MpOwogICAgICAgICBDT1BZU0xPVCh0cF9pc19nYyk7CisgICAgICAgIGlmICgodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmCisgICAgICAgICAgICAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpKSB7CisgICAgICAgICAgICBDT1BZU0xPVCh0cF9maW5hbGl6ZSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKCh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9HQykgPT0KICAgICAgICAgICAgIChiYXNlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9HQykpIHsKICAgICAgICAgICAgIC8qIFRoZXkgYWdyZWUgYWJvdXQgZ2MuICovCkBAIC00MjUyLDE0ICs0NjkxLDIwIEBACiAgICAgICovCiAgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fZG9jX18pID09IE5VTEwpIHsKICAgICAgICAgaWYgKHR5cGUtPnRwX2RvYyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqZG9jID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodHlwZS0+dHBfZG9jKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9sZF9kb2MgPSBfUHlUeXBlX0RvY1dpdGhvdXRTaWduYXR1cmUodHlwZS0+dHBfbmFtZSwKKyAgICAgICAgICAgICAgICB0eXBlLT50cF9kb2MpOworICAgICAgICAgICAgUHlPYmplY3QgKmRvYyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG9sZF9kb2MpOwogICAgICAgICAgICAgaWYgKGRvYyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2RvY19fLCBkb2MpOworICAgICAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fZG9jX18sIGRvYykgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRvYyk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRihkb2MpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19fZG9jX18sIFB5X05vbmUpOworICAgICAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX19kb2NfXywgUHlfTm9uZSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQzMDMsMTMgKzQ3NDgsMTEgQEAKICAgICAvKiBXYXJuIGZvciBhIHR5cGUgdGhhdCBpbXBsZW1lbnRzIHRwX2NvbXBhcmUgKG5vdyBrbm93biBhcwogICAgICAgIHRwX3Jlc2VydmVkKSBidXQgbm90IHRwX3JpY2hjb21wYXJlLiAqLwogICAgIGlmICh0eXBlLT50cF9yZXNlcnZlZCAmJiAhdHlwZS0+dHBfcmljaGNvbXBhcmUpIHsKLSAgICAgICAgaW50IGVycm9yOwotICAgICAgICBlcnJvciA9IFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCAxLAorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRlZmluZXMgdHBfcmVzZXJ2ZWQgKGZvcm1lcmx5IHRwX2NvbXBhcmUpICIKICAgICAgICAgICAgICJidXQgbm90IHRwX3JpY2hjb21wYXJlLiBDb21wYXJpc29ucyBtYXkgbm90IGJlaGF2ZSBhcyBpbnRlbmRlZC4iLAogICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSk7Ci0gICAgICAgIGlmIChlcnJvciA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgLyogQWxsIGRvbmUgLS0gc2V0IHRoZSByZWFkeSBmbGFnICovCkBAIC00MzI2LDQ5ICs0NzY5LDU3IEBACiBzdGF0aWMgaW50CiBhZGRfc3ViY2xhc3MoUHlUeXBlT2JqZWN0ICpiYXNlLCBQeVR5cGVPYmplY3QgKnR5cGUpCiB7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIGludCByZXN1bHQ7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpyZWYsICpuZXdvYmo7CisgICAgaW50IHJlc3VsdCA9IC0xOworICAgIFB5T2JqZWN0ICpkaWN0LCAqa2V5LCAqbmV3b2JqOwogCi0gICAgbGlzdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7Ci0gICAgaWYgKGxpc3QgPT0gTlVMTCkgewotICAgICAgICBiYXNlLT50cF9zdWJjbGFzc2VzID0gbGlzdCA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgZGljdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkgeworICAgICAgICBiYXNlLT50cF9zdWJjbGFzc2VzID0gZGljdCA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhsaXN0KSk7CisgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KGRpY3QpKTsKKyAgICBrZXkgPSBQeUxvbmdfRnJvbVZvaWRQdHIoKHZvaWQgKikgdHlwZSk7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgbmV3b2JqID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKil0eXBlLCBOVUxMKTsKLSAgICBpID0gUHlMaXN0X0dFVF9TSVpFKGxpc3QpOwotICAgIHdoaWxlICgtLWkgPj0gMCkgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0obGlzdCwgaSk7Ci0gICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7Ci0gICAgICAgIGlmIChQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpID09IFB5X05vbmUpCi0gICAgICAgICAgICByZXR1cm4gUHlMaXN0X1NldEl0ZW0obGlzdCwgaSwgbmV3b2JqKTsKKyAgICBpZiAobmV3b2JqICE9IE5VTEwpIHsKKyAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW0oZGljdCwga2V5LCBuZXdvYmopOworICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMaXN0X0FwcGVuZChsaXN0LCBuZXdvYmopOwotICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgIFB5X0RFQ1JFRihrZXkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkCiByZW1vdmVfc3ViY2xhc3MoUHlUeXBlT2JqZWN0ICpiYXNlLCBQeVR5cGVPYmplY3QgKnR5cGUpCiB7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICpsaXN0LCAqcmVmOworICAgIFB5T2JqZWN0ICpkaWN0LCAqa2V5OwogCi0gICAgbGlzdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7Ci0gICAgaWYgKGxpc3QgPT0gTlVMTCkgeworICAgIGRpY3QgPSBiYXNlLT50cF9zdWJjbGFzc2VzOworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKGxpc3QpKTsKLSAgICBpID0gUHlMaXN0X0dFVF9TSVpFKGxpc3QpOwotICAgIHdoaWxlICgtLWkgPj0gMCkgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0obGlzdCwgaSk7Ci0gICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7Ci0gICAgICAgIGlmIChQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpID09IChQeU9iamVjdCopdHlwZSkgewotICAgICAgICAgICAgLyogdGhpcyBjYW4ndCBmYWlsLCByaWdodD8gKi8KLSAgICAgICAgICAgIFB5U2VxdWVuY2VfRGVsSXRlbShsaXN0LCBpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QoZGljdCkpOworICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cigodm9pZCAqKSB0eXBlKTsKKyAgICBpZiAoa2V5ID09IE5VTEwgfHwgUHlEaWN0X0RlbEl0ZW0oZGljdCwga2V5KSkgeworICAgICAgICAvKiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHR5cGUgaW5pdGlhbGl6YXRpb24gZXJyb3JlZCBvdXQgYmVmb3JlCisgICAgICAgICAgIHRoZSBiYXNlIHN1YmNsYXNzZXMgd2VyZSB1cGRhdGVkIChlLmcuIGEgbm9uLXN0ciBfX3F1YWxuYW1lX18KKyAgICAgICAgICAgd2FzIHBhc3NlZCBpbiB0aGUgdHlwZSBkaWN0KS4gKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CisgICAgUHlfWERFQ1JFRihrZXkpOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2VzKQoreworICAgIGlmIChiYXNlcykgeworICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeVR1cGxlX0dFVF9TSVpFKGJhc2VzKTsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqYmFzZSA9IFB5VHVwbGVfR0VUX0lURU0oYmFzZXMsIGkpOworICAgICAgICAgICAgaWYgKFB5VHlwZV9DaGVjayhiYXNlKSkKKyAgICAgICAgICAgICAgICByZW1vdmVfc3ViY2xhc3MoKFB5VHlwZU9iamVjdCopIGJhc2UsIHR5cGUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDcyNSw2ICs1MTc2LDE4IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCit3cmFwX2RlbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIHZvaWQgKndyYXBwZWQpCit7CisgICAgZGVzdHJ1Y3RvciBmdW5jID0gKGRlc3RydWN0b3Ipd3JhcHBlZDsKKworICAgIGlmICghY2hlY2tfbnVtX2FyZ3MoYXJncywgMCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgKCpmdW5jKShzZWxmKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIHdyYXBfcmljaGNtcGZ1bmMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCB2b2lkICp3cmFwcGVkLCBpbnQgb3ApCiB7CiAgICAgcmljaGNtcGZ1bmMgZnVuYyA9IChyaWNoY21wZnVuYyl3cmFwcGVkOwpAQCAtNDg5MSw4ICs1MzU0LDkgQEAKIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiB0cF9uZXdfbWV0aG9kZGVmW10gPSB7CiAgICAgeyJfX25ld19fIiwgKFB5Q0Z1bmN0aW9uKXRwX25ld193cmFwcGVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgUHlEb2NfU1RSKCJULl9fbmV3X18oUywgLi4uKSAtPiAiCi0gICAgICAgICAgICAgICAiYSBuZXcgb2JqZWN0IHdpdGggdHlwZSBTLCBhIHN1YnR5cGUgb2YgVCIpfSwKKyAgICAgUHlEb2NfU1RSKCJfX25ld19fKCR0eXBlLCAqYXJncywgKiprd2FyZ3MpXG4tLVxuXG4iCisgICAgICAgICAgICAgICAiQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgb2JqZWN0LiAgIgorICAgICAgICAgICAgICAgIlNlZSBoZWxwKHR5cGUpIGZvciBhY2N1cmF0ZSBzaWduYXR1cmUuIil9LAogICAgIHswfQogfTsKIApAQCAtNDkwMyw3ICs1MzY3LDcgQEAKIAogICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX25ld19fKSAhPSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3KHRwX25ld19tZXRob2RkZWYsIChQeU9iamVjdCAqKXR5cGUpOworICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeCh0cF9uZXdfbWV0aG9kZGVmLCAoUHlPYmplY3QgKil0eXBlLCBOVUxMKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbmV3X18sIGZ1bmMpKSB7CkBAIC01MDE1LDcgKzU0NzksNiBAQAogc3RhdGljIFB5X3NzaXplX3QKIHNsb3Rfc3FfbGVuZ3RoKFB5T2JqZWN0ICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKF9fbGVuX18pOwogICAgIFB5T2JqZWN0ICpyZXMgPSBjYWxsX21ldGhvZChzZWxmLCAmUHlJZF9fX2xlbl9fLCAiKCkiKTsKICAgICBQeV9zc2l6ZV90IGxlbjsKIApAQCAtNTA3Niw4ICs1NTM5LDYgQEAKIHNsb3Rfc3FfYXNzX2l0ZW0oUHlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaW5kZXgsIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKF9fZGVsaXRlbV9fKTsKLSAgICBfUHlfSURFTlRJRklFUihfX3NldGl0ZW1fXyk7CiAKICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgcmVzID0gY2FsbF9tZXRob2Qoc2VsZiwgJlB5SWRfX19kZWxpdGVtX18sICIobikiLCBpbmRleCk7CkBAIC01MTI3LDggKzU1ODgsNiBAQAogc2xvdF9tcF9hc3Nfc3Vic2NyaXB0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqdmFsdWUpCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBfUHlfSURFTlRJRklFUihfX2RlbGl0ZW1fXyk7Ci0gICAgX1B5X0lERU5USUZJRVIoX19zZXRpdGVtX18pOwogCiAgICAgaWYgKHZhbHVlID09IE5VTEwpCiAgICAgICAgIHJlcyA9IGNhbGxfbWV0aG9kKHNlbGYsICZQeUlkX19fZGVsaXRlbV9fLCAiKE8pIiwga2V5KTsKQEAgLTUxNzksNyArNTYzOCw2IEBACiAgICAgUHlPYmplY3QgKmZ1bmMsICphcmdzOwogICAgIGludCByZXN1bHQgPSAtMTsKICAgICBpbnQgdXNpbmdfbGVuID0gMDsKLSAgICBfUHlfSURFTlRJRklFUihfX2xlbl9fKTsKICAgICBfUHlfSURFTlRJRklFUihfX2Jvb2xfXyk7CiAKICAgICBmdW5jID0gbG9va3VwX21heWJlKHNlbGYsICZQeUlkX19fYm9vbF9fKTsKQEAgLTUyODEsMjggKzU3MzksMTEgQEAKICAgICBfUHlfSURFTlRJRklFUihfX3N0cl9fKTsKIAogICAgIGZ1bmMgPSBsb29rdXBfbWV0aG9kKHNlbGYsICZQeUlkX19fc3RyX18pOwotICAgIGlmIChmdW5jICE9IE5VTEwpIHsKLSAgICAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZnVuYywgTlVMTCk7Ci0gICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIFB5T2JqZWN0ICpyZXNzOyAqLwotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICByZXMgPSBzbG90X3RwX3JlcHIoc2VsZik7Ci0gICAgICAgIGlmICghcmVzKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIC8qIFhYWCB0aGlzIGlzIG5vbi1zZW5zaWNhbC4gV2h5IHNob3VsZCB3ZSByZXR1cm4KLSAgICAgICAgICAgYSBieXRlcyBvYmplY3QgZnJvbSBfX3N0cl9fLiBJcyB0aGlzIGNvZGUgZXZlbgotICAgICAgICAgICB1c2VkPyAtIG12bCAqLwotICAgICAgICBhc3NlcnQoMCk7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIC8qCi0gICAgICAgIHJlc3MgPSBfUHlVbmljb2RlX0FzRGVmYXVsdEVuY29kZWRTdHJpbmcocmVzKTsKLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgICAgIHJldHVybiByZXNzOwotICAgICAgICAqLwotICAgIH0KKyAgICBpZiAoZnVuYyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLCBOVUxMKTsKKyAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIFB5X2hhc2hfdApAQCAtNTU5OCw3ICs2MDM5LDYgQEAKICAgICBQeU9iamVjdCAqZnVuYzsKICAgICBQeU9iamVjdCAqbmV3YXJncywgKng7CiAgICAgUHlfc3NpemVfdCBpLCBuOwotICAgIF9QeV9JREVOVElGSUVSKF9fbmV3X18pOwogCiAgICAgZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopdHlwZSwgJlB5SWRfX19uZXdfXyk7CiAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKQEAgLTU2MjIsMTYgKzYwNjIsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNsb3RfdHBfZGVsKFB5T2JqZWN0ICpzZWxmKQorc2xvdF90cF9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKIHsKICAgICBfUHlfSURFTlRJRklFUihfX2RlbF9fKTsKICAgICBQeU9iamVjdCAqZGVsLCAqcmVzOwogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAKLSAgICAvKiBUZW1wb3JhcmlseSByZXN1cnJlY3QgdGhlIG9iamVjdC4gKi8KLSAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID09IDApOwotICAgIHNlbGYtPm9iX3JlZmNudCA9IDE7Ci0KICAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLwogICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOwogCkBAIC01NjQ4LDM3ICs2MDg0LDYgQEAKIAogICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOwotCi0gICAgLyogVW5kbyB0aGUgdGVtcG9yYXJ5IHJlc3VycmVjdGlvbjsgY2FuJ3QgdXNlIERFQ1JFRiBoZXJlLCBpdCB3b3VsZAotICAgICAqIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwuCi0gICAgICovCi0gICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA+IDApOwotICAgIGlmICgtLXNlbGYtPm9iX3JlZmNudCA9PSAwKQotICAgICAgICByZXR1cm47ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCi0KLSAgICAvKiBfX2RlbF9fIHJlc3VycmVjdGVkIGl0ISAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIG9yaWdpbmFsIFB5X0RFQ1JFRgotICAgICAqIG5ldmVyIGhhcHBlbmVkLgotICAgICAqLwotICAgIHsKLSAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7Ci0gICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7Ci0gICAgICAgIHNlbGYtPm9iX3JlZmNudCA9IHJlZmNudDsKLSAgICB9Ci0gICAgYXNzZXJ0KCFQeVR5cGVfSVNfR0MoUHlfVFlQRShzZWxmKSkgfHwKLSAgICAgICAgICAgX1B5X0FTX0dDKHNlbGYpLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKLSAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KLSAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KLSAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0Ci0gICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCi0gICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCi0gICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCi0gICAgICogdW5kb25lLgotICAgICAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7Ci0gICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7Ci0jZW5kaWYKIH0KIAogCkBAIC01NzIzLDIyICs2MTI4LDIyIEBACiAgICAgRVRTTE9UKE5BTUUsIGFzX251bWJlci5TTE9ULCBGVU5DVElPTiwgV1JBUFBFUiwgRE9DKQogI2RlZmluZSBVTlNMT1QoTkFNRSwgU0xPVCwgRlVOQ1RJT04sIFdSQVBQRVIsIERPQykgXAogICAgIEVUU0xPVChOQU1FLCBhc19udW1iZXIuU0xPVCwgRlVOQ1RJT04sIFdSQVBQRVIsIFwKLSAgICAgICAgICAgInguIiBOQU1FICIoKSA8PT0+ICIgRE9DKQorICAgICAgICAgICBOQU1FICIoJHNlbGYsIC8pXG4tLVxuXG4iIERPQykKICNkZWZpbmUgSUJTTE9UKE5BTUUsIFNMT1QsIEZVTkNUSU9OLCBXUkFQUEVSLCBET0MpIFwKICAgICBFVFNMT1QoTkFNRSwgYXNfbnVtYmVyLlNMT1QsIEZVTkNUSU9OLCBXUkFQUEVSLCBcCi0gICAgICAgICAgICJ4LiIgTkFNRSAiKHkpIDw9PT4geCIgRE9DICJ5IikKKyAgICAgICAgICAgTkFNRSAiKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmIiBET0MgInZhbHVlLiIpCiAjZGVmaW5lIEJJTlNMT1QoTkFNRSwgU0xPVCwgRlVOQ1RJT04sIERPQykgXAogICAgIEVUU0xPVChOQU1FLCBhc19udW1iZXIuU0xPVCwgRlVOQ1RJT04sIHdyYXBfYmluYXJ5ZnVuY19sLCBcCi0gICAgICAgICAgICJ4LiIgTkFNRSAiKHkpIDw9PT4geCIgRE9DICJ5IikKKyAgICAgICAgICAgTkFNRSAiKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmIiBET0MgInZhbHVlLiIpCiAjZGVmaW5lIFJCSU5TTE9UKE5BTUUsIFNMT1QsIEZVTkNUSU9OLCBET0MpIFwKICAgICBFVFNMT1QoTkFNRSwgYXNfbnVtYmVyLlNMT1QsIEZVTkNUSU9OLCB3cmFwX2JpbmFyeWZ1bmNfciwgXAotICAgICAgICAgICAieC4iIE5BTUUgIih5KSA8PT0+IHkiIERPQyAieCIpCisgICAgICAgICAgIE5BTUUgIigkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gdmFsdWUiIERPQyAic2VsZi4iKQogI2RlZmluZSBCSU5TTE9UTk9USU5GSVgoTkFNRSwgU0xPVCwgRlVOQ1RJT04sIERPQykgXAogICAgIEVUU0xPVChOQU1FLCBhc19udW1iZXIuU0xPVCwgRlVOQ1RJT04sIHdyYXBfYmluYXJ5ZnVuY19sLCBcCi0gICAgICAgICAgICJ4LiIgTkFNRSAiKHkpIDw9PT4gIiBET0MpCisgICAgICAgICAgIE5BTUUgIigkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG4iIERPQykKICNkZWZpbmUgUkJJTlNMT1ROT1RJTkZJWChOQU1FLCBTTE9ULCBGVU5DVElPTiwgRE9DKSBcCiAgICAgRVRTTE9UKE5BTUUsIGFzX251bWJlci5TTE9ULCBGVU5DVElPTiwgd3JhcF9iaW5hcnlmdW5jX3IsIFwKLSAgICAgICAgICAgInguIiBOQU1FICIoeSkgPD09PiAiIERPQykKKyAgICAgICAgICAgTkFNRSAiKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cbiIgRE9DKQogCiBzdGF0aWMgc2xvdGRlZiBzbG90ZGVmc1tdID0gewogICAgIFRQU0xPVCgiX19nZXRhdHRyaWJ1dGVfXyIsIHRwX2dldGF0dHIsIE5VTEwsIE5VTEwsICIiKSwKQEAgLTU3NDYsODAgKzYxNTEsODUgQEAKICAgICBUUFNMT1QoIl9fc2V0YXR0cl9fIiwgdHBfc2V0YXR0ciwgTlVMTCwgTlVMTCwgIiIpLAogICAgIFRQU0xPVCgiX19kZWxhdHRyX18iLCB0cF9zZXRhdHRyLCBOVUxMLCBOVUxMLCAiIiksCiAgICAgVFBTTE9UKCJfX3JlcHJfXyIsIHRwX3JlcHIsIHNsb3RfdHBfcmVwciwgd3JhcF91bmFyeWZ1bmMsCi0gICAgICAgICAgICJ4Ll9fcmVwcl9fKCkgPD09PiByZXByKHgpIiksCisgICAgICAgICAgICJfX3JlcHJfXygkc2VsZiwgLylcbi0tXG5cblJldHVybiByZXByKHNlbGYpLiIpLAogICAgIFRQU0xPVCgiX19oYXNoX18iLCB0cF9oYXNoLCBzbG90X3RwX2hhc2gsIHdyYXBfaGFzaGZ1bmMsCi0gICAgICAgICAgICJ4Ll9faGFzaF9fKCkgPD09PiBoYXNoKHgpIiksCisgICAgICAgICAgICJfX2hhc2hfXygkc2VsZiwgLylcbi0tXG5cblJldHVybiBoYXNoKHNlbGYpLiIpLAogICAgIEZMU0xPVCgiX19jYWxsX18iLCB0cF9jYWxsLCBzbG90X3RwX2NhbGwsICh3cmFwcGVyZnVuYyl3cmFwX2NhbGwsCi0gICAgICAgICAgICJ4Ll9fY2FsbF9fKC4uLikgPD09PiB4KC4uLikiLCBQeVdyYXBwZXJGbGFnX0tFWVdPUkRTKSwKKyAgICAgICAgICAgIl9fY2FsbF9fKCRzZWxmLCAvLCAqYXJncywgKiprd2FyZ3MpXG4tLVxuXG5DYWxsIHNlbGYgYXMgYSBmdW5jdGlvbi4iLAorICAgICAgICAgICBQeVdyYXBwZXJGbGFnX0tFWVdPUkRTKSwKICAgICBUUFNMT1QoIl9fc3RyX18iLCB0cF9zdHIsIHNsb3RfdHBfc3RyLCB3cmFwX3VuYXJ5ZnVuYywKLSAgICAgICAgICAgInguX19zdHJfXygpIDw9PT4gc3RyKHgpIiksCisgICAgICAgICAgICJfX3N0cl9fKCRzZWxmLCAvKVxuLS1cblxuUmV0dXJuIHN0cihzZWxmKS4iKSwKICAgICBUUFNMT1QoIl9fZ2V0YXR0cmlidXRlX18iLCB0cF9nZXRhdHRybywgc2xvdF90cF9nZXRhdHRyX2hvb2ssCi0gICAgICAgICAgIHdyYXBfYmluYXJ5ZnVuYywgInguX19nZXRhdHRyaWJ1dGVfXygnbmFtZScpIDw9PT4geC5uYW1lIiksCisgICAgICAgICAgIHdyYXBfYmluYXJ5ZnVuYywKKyAgICAgICAgICAgIl9fZ2V0YXR0cmlidXRlX18oJHNlbGYsIG5hbWUsIC8pXG4tLVxuXG5SZXR1cm4gZ2V0YXR0cihzZWxmLCBuYW1lKS4iKSwKICAgICBUUFNMT1QoIl9fZ2V0YXR0cl9fIiwgdHBfZ2V0YXR0cm8sIHNsb3RfdHBfZ2V0YXR0cl9ob29rLCBOVUxMLCAiIiksCiAgICAgVFBTTE9UKCJfX3NldGF0dHJfXyIsIHRwX3NldGF0dHJvLCBzbG90X3RwX3NldGF0dHJvLCB3cmFwX3NldGF0dHIsCi0gICAgICAgICAgICJ4Ll9fc2V0YXR0cl9fKCduYW1lJywgdmFsdWUpIDw9PT4geC5uYW1lID0gdmFsdWUiKSwKKyAgICAgICAgICAgIl9fc2V0YXR0cl9fKCRzZWxmLCBuYW1lLCB2YWx1ZSwgLylcbi0tXG5cbkltcGxlbWVudCBzZXRhdHRyKHNlbGYsIG5hbWUsIHZhbHVlKS4iKSwKICAgICBUUFNMT1QoIl9fZGVsYXR0cl9fIiwgdHBfc2V0YXR0cm8sIHNsb3RfdHBfc2V0YXR0cm8sIHdyYXBfZGVsYXR0ciwKLSAgICAgICAgICAgInguX19kZWxhdHRyX18oJ25hbWUnKSA8PT0+IGRlbCB4Lm5hbWUiKSwKKyAgICAgICAgICAgIl9fZGVsYXR0cl9fKCRzZWxmLCBuYW1lLCAvKVxuLS1cblxuSW1wbGVtZW50IGRlbGF0dHIoc2VsZiwgbmFtZSkuIiksCiAgICAgVFBTTE9UKCJfX2x0X18iLCB0cF9yaWNoY29tcGFyZSwgc2xvdF90cF9yaWNoY29tcGFyZSwgcmljaGNtcF9sdCwKLSAgICAgICAgICAgInguX19sdF9fKHkpIDw9PT4geDx5IiksCisgICAgICAgICAgICJfX2x0X18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGY8dmFsdWUuIiksCiAgICAgVFBTTE9UKCJfX2xlX18iLCB0cF9yaWNoY29tcGFyZSwgc2xvdF90cF9yaWNoY29tcGFyZSwgcmljaGNtcF9sZSwKLSAgICAgICAgICAgInguX19sZV9fKHkpIDw9PT4geDw9eSIpLAorICAgICAgICAgICAiX19sZV9fKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmPD12YWx1ZS4iKSwKICAgICBUUFNMT1QoIl9fZXFfXyIsIHRwX3JpY2hjb21wYXJlLCBzbG90X3RwX3JpY2hjb21wYXJlLCByaWNoY21wX2VxLAotICAgICAgICAgICAieC5fX2VxX18oeSkgPD09PiB4PT15IiksCisgICAgICAgICAgICJfX2VxX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGY9PXZhbHVlLiIpLAogICAgIFRQU0xPVCgiX19uZV9fIiwgdHBfcmljaGNvbXBhcmUsIHNsb3RfdHBfcmljaGNvbXBhcmUsIHJpY2hjbXBfbmUsCi0gICAgICAgICAgICJ4Ll9fbmVfXyh5KSA8PT0+IHghPXkiKSwKKyAgICAgICAgICAgIl9fbmVfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZiE9dmFsdWUuIiksCiAgICAgVFBTTE9UKCJfX2d0X18iLCB0cF9yaWNoY29tcGFyZSwgc2xvdF90cF9yaWNoY29tcGFyZSwgcmljaGNtcF9ndCwKLSAgICAgICAgICAgInguX19ndF9fKHkpIDw9PT4geD55IiksCisgICAgICAgICAgICJfX2d0X18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGY+dmFsdWUuIiksCiAgICAgVFBTTE9UKCJfX2dlX18iLCB0cF9yaWNoY29tcGFyZSwgc2xvdF90cF9yaWNoY29tcGFyZSwgcmljaGNtcF9nZSwKLSAgICAgICAgICAgInguX19nZV9fKHkpIDw9PT4geD49eSIpLAorICAgICAgICAgICAiX19nZV9fPSgkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZj49dmFsdWUuIiksCiAgICAgVFBTTE9UKCJfX2l0ZXJfXyIsIHRwX2l0ZXIsIHNsb3RfdHBfaXRlciwgd3JhcF91bmFyeWZ1bmMsCi0gICAgICAgICAgICJ4Ll9faXRlcl9fKCkgPD09PiBpdGVyKHgpIiksCisgICAgICAgICAgICJfX2l0ZXJfXygkc2VsZiwgLylcbi0tXG5cbkltcGxlbWVudCBpdGVyKHNlbGYpLiIpLAogICAgIFRQU0xPVCgiX19uZXh0X18iLCB0cF9pdGVybmV4dCwgc2xvdF90cF9pdGVybmV4dCwgd3JhcF9uZXh0LAotICAgICAgICAgICAieC5fX25leHRfXygpIDw9PT4gbmV4dCh4KSIpLAorICAgICAgICAgICAiX19uZXh0X18oJHNlbGYsIC8pXG4tLVxuXG5JbXBsZW1lbnQgbmV4dChzZWxmKS4iKSwKICAgICBUUFNMT1QoIl9fZ2V0X18iLCB0cF9kZXNjcl9nZXQsIHNsb3RfdHBfZGVzY3JfZ2V0LCB3cmFwX2Rlc2NyX2dldCwKLSAgICAgICAgICAgImRlc2NyLl9fZ2V0X18ob2JqWywgdHlwZV0pIC0+IHZhbHVlIiksCisgICAgICAgICAgICJfX2dldF9fKCRzZWxmLCBpbnN0YW5jZSwgb3duZXIsIC8pXG4tLVxuXG5SZXR1cm4gYW4gYXR0cmlidXRlIG9mIGluc3RhbmNlLCB3aGljaCBpcyBvZiB0eXBlIG93bmVyLiIpLAogICAgIFRQU0xPVCgiX19zZXRfXyIsIHRwX2Rlc2NyX3NldCwgc2xvdF90cF9kZXNjcl9zZXQsIHdyYXBfZGVzY3Jfc2V0LAotICAgICAgICAgICAiZGVzY3IuX19zZXRfXyhvYmosIHZhbHVlKSIpLAorICAgICAgICAgICAiX19zZXRfXygkc2VsZiwgaW5zdGFuY2UsIHZhbHVlLCAvKVxuLS1cblxuU2V0IGFuIGF0dHJpYnV0ZSBvZiBpbnN0YW5jZSB0byB2YWx1ZS4iKSwKICAgICBUUFNMT1QoIl9fZGVsZXRlX18iLCB0cF9kZXNjcl9zZXQsIHNsb3RfdHBfZGVzY3Jfc2V0LAotICAgICAgICAgICB3cmFwX2Rlc2NyX2RlbGV0ZSwgImRlc2NyLl9fZGVsZXRlX18ob2JqKSIpLAorICAgICAgICAgICB3cmFwX2Rlc2NyX2RlbGV0ZSwKKyAgICAgICAgICAgIl9fZGVsZXRlX18oaW5zdGFuY2UsIC8pXG4tLVxuXG5EZWxldGUgYW4gYXR0cmlidXRlIG9mIGluc3RhbmNlLiIpLAogICAgIEZMU0xPVCgiX19pbml0X18iLCB0cF9pbml0LCBzbG90X3RwX2luaXQsICh3cmFwcGVyZnVuYyl3cmFwX2luaXQsCi0gICAgICAgICAgICJ4Ll9faW5pdF9fKC4uLikgaW5pdGlhbGl6ZXMgeDsgIgotICAgICAgICAgICAic2VlIGhlbHAodHlwZSh4KSkgZm9yIHNpZ25hdHVyZSIsCisgICAgICAgICAgICJfX2luaXRfXygkc2VsZiwgLywgKmFyZ3MsICoqa3dhcmdzKVxuLS1cblxuIgorICAgICAgICAgICAiSW5pdGlhbGl6ZSBzZWxmLiAgU2VlIGhlbHAodHlwZShzZWxmKSkgZm9yIGFjY3VyYXRlIHNpZ25hdHVyZS4iLAogICAgICAgICAgICBQeVdyYXBwZXJGbGFnX0tFWVdPUkRTKSwKLSAgICBUUFNMT1QoIl9fbmV3X18iLCB0cF9uZXcsIHNsb3RfdHBfbmV3LCBOVUxMLCAiIiksCi0gICAgVFBTTE9UKCJfX2RlbF9fIiwgdHBfZGVsLCBzbG90X3RwX2RlbCwgTlVMTCwgIiIpLAorICAgIFRQU0xPVCgiX19uZXdfXyIsIHRwX25ldywgc2xvdF90cF9uZXcsIE5VTEwsCisgICAgICAgICAgICJfX25ld19fKHR5cGUsIC8sICphcmdzLCAqKmt3YXJncylcbi0tXG5cbiIKKyAgICAgICAgICAgIkNyZWF0ZSBhbmQgcmV0dXJuIG5ldyBvYmplY3QuICBTZWUgaGVscCh0eXBlKSBmb3IgYWNjdXJhdGUgc2lnbmF0dXJlLiIpLAorICAgIFRQU0xPVCgiX19kZWxfXyIsIHRwX2ZpbmFsaXplLCBzbG90X3RwX2ZpbmFsaXplLCAod3JhcHBlcmZ1bmMpd3JhcF9kZWwsICIiKSwKIAogICAgIEJJTlNMT1QoIl9fYWRkX18iLCBuYl9hZGQsIHNsb3RfbmJfYWRkLAotICAgICAgICAiKyIpLAorICAgICAgICAgICAiKyIpLAogICAgIFJCSU5TTE9UKCJfX3JhZGRfXyIsIG5iX2FkZCwgc2xvdF9uYl9hZGQsCi0gICAgICAgICAgICAgIisiKSwKKyAgICAgICAgICAgIisiKSwKICAgICBCSU5TTE9UKCJfX3N1Yl9fIiwgbmJfc3VidHJhY3QsIHNsb3RfbmJfc3VidHJhY3QsCi0gICAgICAgICItIiksCisgICAgICAgICAgICItIiksCiAgICAgUkJJTlNMT1QoIl9fcnN1Yl9fIiwgbmJfc3VidHJhY3QsIHNsb3RfbmJfc3VidHJhY3QsCi0gICAgICAgICAgICAgIi0iKSwKKyAgICAgICAgICAgIi0iKSwKICAgICBCSU5TTE9UKCJfX211bF9fIiwgbmJfbXVsdGlwbHksIHNsb3RfbmJfbXVsdGlwbHksCi0gICAgICAgICIqIiksCisgICAgICAgICAgICIqIiksCiAgICAgUkJJTlNMT1QoIl9fcm11bF9fIiwgbmJfbXVsdGlwbHksIHNsb3RfbmJfbXVsdGlwbHksCi0gICAgICAgICAgICAgIioiKSwKKyAgICAgICAgICAgIioiKSwKICAgICBCSU5TTE9UKCJfX21vZF9fIiwgbmJfcmVtYWluZGVyLCBzbG90X25iX3JlbWFpbmRlciwKLSAgICAgICAgIiUiKSwKKyAgICAgICAgICAgIiUiKSwKICAgICBSQklOU0xPVCgiX19ybW9kX18iLCBuYl9yZW1haW5kZXIsIHNsb3RfbmJfcmVtYWluZGVyLAotICAgICAgICAgICAgICIlIiksCisgICAgICAgICAgICIlIiksCiAgICAgQklOU0xPVE5PVElORklYKCJfX2Rpdm1vZF9fIiwgbmJfZGl2bW9kLCBzbG90X25iX2Rpdm1vZCwKLSAgICAgICAgImRpdm1vZCh4LCB5KSIpLAorICAgICAgICAgICAiUmV0dXJuIGRpdm1vZChzZWxmLCB2YWx1ZSkuIiksCiAgICAgUkJJTlNMT1ROT1RJTkZJWCgiX19yZGl2bW9kX18iLCBuYl9kaXZtb2QsIHNsb3RfbmJfZGl2bW9kLAotICAgICAgICAgICAgICJkaXZtb2QoeSwgeCkiKSwKKyAgICAgICAgICAgIlJldHVybiBkaXZtb2QodmFsdWUsIHNlbGYpLiIpLAogICAgIE5CU0xPVCgiX19wb3dfXyIsIG5iX3Bvd2VyLCBzbG90X25iX3Bvd2VyLCB3cmFwX3Rlcm5hcnlmdW5jLAotICAgICAgICAgICAieC5fX3Bvd19fKHlbLCB6XSkgPD09PiBwb3coeCwgeVssIHpdKSIpLAorICAgICAgICAgICAiX19wb3dfXygkc2VsZiwgdmFsdWUsIG1vZD1Ob25lLCAvKVxuLS1cblxuUmV0dXJuIHBvdyhzZWxmLCB2YWx1ZSwgbW9kKS4iKSwKICAgICBOQlNMT1QoIl9fcnBvd19fIiwgbmJfcG93ZXIsIHNsb3RfbmJfcG93ZXIsIHdyYXBfdGVybmFyeWZ1bmNfciwKLSAgICAgICAgICAgInkuX19ycG93X18oeFssIHpdKSA8PT0+IHBvdyh4LCB5Wywgel0pIiksCi0gICAgVU5TTE9UKCJfX25lZ19fIiwgbmJfbmVnYXRpdmUsIHNsb3RfbmJfbmVnYXRpdmUsIHdyYXBfdW5hcnlmdW5jLCAiLXgiKSwKLSAgICBVTlNMT1QoIl9fcG9zX18iLCBuYl9wb3NpdGl2ZSwgc2xvdF9uYl9wb3NpdGl2ZSwgd3JhcF91bmFyeWZ1bmMsICIreCIpLAorICAgICAgICAgICAiX19ycG93X18oJHNlbGYsIHZhbHVlLCBtb2Q9Tm9uZSwgLylcbi0tXG5cblJldHVybiBwb3codmFsdWUsIHNlbGYsIG1vZCkuIiksCisgICAgVU5TTE9UKCJfX25lZ19fIiwgbmJfbmVnYXRpdmUsIHNsb3RfbmJfbmVnYXRpdmUsIHdyYXBfdW5hcnlmdW5jLCAiLXNlbGYiKSwKKyAgICBVTlNMT1QoIl9fcG9zX18iLCBuYl9wb3NpdGl2ZSwgc2xvdF9uYl9wb3NpdGl2ZSwgd3JhcF91bmFyeWZ1bmMsICIrc2VsZiIpLAogICAgIFVOU0xPVCgiX19hYnNfXyIsIG5iX2Fic29sdXRlLCBzbG90X25iX2Fic29sdXRlLCB3cmFwX3VuYXJ5ZnVuYywKLSAgICAgICAgICAgImFicyh4KSIpLAorICAgICAgICAgICAiYWJzKHNlbGYpIiksCiAgICAgVU5TTE9UKCJfX2Jvb2xfXyIsIG5iX2Jvb2wsIHNsb3RfbmJfYm9vbCwgd3JhcF9pbnF1aXJ5cHJlZCwKLSAgICAgICAgICAgInggIT0gMCIpLAotICAgIFVOU0xPVCgiX19pbnZlcnRfXyIsIG5iX2ludmVydCwgc2xvdF9uYl9pbnZlcnQsIHdyYXBfdW5hcnlmdW5jLCAifngiKSwKKyAgICAgICAgICAgInNlbGYgIT0gMCIpLAorICAgIFVOU0xPVCgiX19pbnZlcnRfXyIsIG5iX2ludmVydCwgc2xvdF9uYl9pbnZlcnQsIHdyYXBfdW5hcnlmdW5jLCAifnNlbGYiKSwKICAgICBCSU5TTE9UKCJfX2xzaGlmdF9fIiwgbmJfbHNoaWZ0LCBzbG90X25iX2xzaGlmdCwgIjw8IiksCiAgICAgUkJJTlNMT1QoIl9fcmxzaGlmdF9fIiwgbmJfbHNoaWZ0LCBzbG90X25iX2xzaGlmdCwgIjw8IiksCiAgICAgQklOU0xPVCgiX19yc2hpZnRfXyIsIG5iX3JzaGlmdCwgc2xvdF9uYl9yc2hpZnQsICI+PiIpLApAQCAtNTgzMSw5ICs2MjQxLDkgQEAKICAgICBCSU5TTE9UKCJfX29yX18iLCBuYl9vciwgc2xvdF9uYl9vciwgInwiKSwKICAgICBSQklOU0xPVCgiX19yb3JfXyIsIG5iX29yLCBzbG90X25iX29yLCAifCIpLAogICAgIFVOU0xPVCgiX19pbnRfXyIsIG5iX2ludCwgc2xvdF9uYl9pbnQsIHdyYXBfdW5hcnlmdW5jLAotICAgICAgICAgICAiaW50KHgpIiksCisgICAgICAgICAgICJpbnQoc2VsZikiKSwKICAgICBVTlNMT1QoIl9fZmxvYXRfXyIsIG5iX2Zsb2F0LCBzbG90X25iX2Zsb2F0LCB3cmFwX3VuYXJ5ZnVuYywKLSAgICAgICAgICAgImZsb2F0KHgpIiksCisgICAgICAgICAgICJmbG9hdChzZWxmKSIpLAogICAgIElCU0xPVCgiX19pYWRkX18iLCBuYl9pbnBsYWNlX2FkZCwgc2xvdF9uYl9pbnBsYWNlX2FkZCwKICAgICAgICAgICAgd3JhcF9iaW5hcnlmdW5jLCAiKz0iKSwKICAgICBJQlNMT1QoIl9faXN1Yl9fIiwgbmJfaW5wbGFjZV9zdWJ0cmFjdCwgc2xvdF9uYl9pbnBsYWNlX3N1YnRyYWN0LApAQCAtNTg2Myw0NSArNjI3Myw0OCBAQAogICAgIElCU0xPVCgiX19pdHJ1ZWRpdl9fIiwgbmJfaW5wbGFjZV90cnVlX2RpdmlkZSwKICAgICAgICAgICAgc2xvdF9uYl9pbnBsYWNlX3RydWVfZGl2aWRlLCB3cmFwX2JpbmFyeWZ1bmMsICIvIiksCiAgICAgTkJTTE9UKCJfX2luZGV4X18iLCBuYl9pbmRleCwgc2xvdF9uYl9pbmRleCwgd3JhcF91bmFyeWZ1bmMsCi0gICAgICAgICAgICJ4W3k6el0gPD09PiB4W3kuX19pbmRleF9fKCk6ei5fX2luZGV4X18oKV0iKSwKLQorICAgICAgICAgICAiX19pbmRleF9fKCRzZWxmLCAvKVxuLS1cblxuIgorICAgICAgICAgICAiUmV0dXJuIHNlbGYgY29udmVydGVkIHRvIGFuIGludGVnZXIsIGlmIHNlbGYgaXMgc3VpdGFibGUiCisgICAgICAgICAgICJmb3IgdXNlIGFzIGFuIGluZGV4IGludG8gYSBsaXN0LiIpLAogICAgIE1QU0xPVCgiX19sZW5fXyIsIG1wX2xlbmd0aCwgc2xvdF9tcF9sZW5ndGgsIHdyYXBfbGVuZnVuYywKLSAgICAgICAgICAgInguX19sZW5fXygpIDw9PT4gbGVuKHgpIiksCisgICAgICAgICAgICJfX2xlbl9fKCRzZWxmLCAvKVxuLS1cblxuUmV0dXJuIGxlbihzZWxmKS4iKSwKICAgICBNUFNMT1QoIl9fZ2V0aXRlbV9fIiwgbXBfc3Vic2NyaXB0LCBzbG90X21wX3N1YnNjcmlwdCwKICAgICAgICAgICAgd3JhcF9iaW5hcnlmdW5jLAotICAgICAgICAgICAieC5fX2dldGl0ZW1fXyh5KSA8PT0+IHhbeV0iKSwKKyAgICAgICAgICAgIl9fZ2V0aXRlbV9fKCRzZWxmLCBrZXksIC8pXG4tLVxuXG5SZXR1cm4gc2VsZltrZXldLiIpLAogICAgIE1QU0xPVCgiX19zZXRpdGVtX18iLCBtcF9hc3Nfc3Vic2NyaXB0LCBzbG90X21wX2Fzc19zdWJzY3JpcHQsCiAgICAgICAgICAgIHdyYXBfb2Jqb2JqYXJncHJvYywKLSAgICAgICAgICAgInguX19zZXRpdGVtX18oaSwgeSkgPD09PiB4W2ldPXkiKSwKKyAgICAgICAgICAgIl9fc2V0aXRlbV9fKCRzZWxmLCBrZXksIHZhbHVlLCAvKVxuLS1cblxuU2V0IHNlbGZba2V5XSB0byB2YWx1ZS4iKSwKICAgICBNUFNMT1QoIl9fZGVsaXRlbV9fIiwgbXBfYXNzX3N1YnNjcmlwdCwgc2xvdF9tcF9hc3Nfc3Vic2NyaXB0LAogICAgICAgICAgICB3cmFwX2RlbGl0ZW0sCi0gICAgICAgICAgICJ4Ll9fZGVsaXRlbV9fKHkpIDw9PT4gZGVsIHhbeV0iKSwKKyAgICAgICAgICAgIl9fZGVsaXRlbV9fKGtleSlcbi0tXG5cbkRlbGV0ZSBzZWxmW2tleV0uIiksCiAKICAgICBTUVNMT1QoIl9fbGVuX18iLCBzcV9sZW5ndGgsIHNsb3Rfc3FfbGVuZ3RoLCB3cmFwX2xlbmZ1bmMsCi0gICAgICAgICAgICJ4Ll9fbGVuX18oKSA8PT0+IGxlbih4KSIpLAorICAgICAgICAgICAiX19sZW5fXygkc2VsZiwgLylcbi0tXG5cblJldHVybiBsZW4oc2VsZikuIiksCiAgICAgLyogSGVhcCB0eXBlcyBkZWZpbmluZyBfX2FkZF9fL19fbXVsX18gaGF2ZSBzcV9jb25jYXQvc3FfcmVwZWF0ID09IE5VTEwuCiAgICAgICAgVGhlIGxvZ2ljIGluIGFic3RyYWN0LmMgYWx3YXlzIGZhbGxzIGJhY2sgdG8gbmJfYWRkL25iX211bHRpcGx5IGluCiAgICAgICAgdGhpcyBjYXNlLiAgRGVmaW5pbmcgYm90aCB0aGUgbmJfKiBhbmQgdGhlIHNxXyogc2xvdHMgdG8gY2FsbCB0aGUKICAgICAgICB1c2VyLWRlZmluZWQgbWV0aG9kcyBoYXMgdW5leHBlY3RlZCBzaWRlLWVmZmVjdHMsIGFzIHNob3duIGJ5CiAgICAgICAgdGVzdF9kZXNjci5ub3RpbXBsZW1lbnRlZCgpICovCiAgICAgU1FTTE9UKCJfX2FkZF9fIiwgc3FfY29uY2F0LCBOVUxMLCB3cmFwX2JpbmFyeWZ1bmMsCi0gICAgICAieC5fX2FkZF9fKHkpIDw9PT4geCt5IiksCisgICAgICAgICAgICJfX2FkZF9fKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmK3ZhbHVlLiIpLAogICAgIFNRU0xPVCgiX19tdWxfXyIsIHNxX3JlcGVhdCwgTlVMTCwgd3JhcF9pbmRleGFyZ2Z1bmMsCi0gICAgICAieC5fX211bF9fKG4pIDw9PT4geCpuIiksCisgICAgICAgICAgICJfX211bF9fKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmKnZhbHVlLm4iKSwKICAgICBTUVNMT1QoIl9fcm11bF9fIiwgc3FfcmVwZWF0LCBOVUxMLCB3cmFwX2luZGV4YXJnZnVuYywKLSAgICAgICJ4Ll9fcm11bF9fKG4pIDw9PT4gbip4IiksCisgICAgICAgICAgICJfX3JtdWxfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZip2YWx1ZS4iKSwKICAgICBTUVNMT1QoIl9fZ2V0aXRlbV9fIiwgc3FfaXRlbSwgc2xvdF9zcV9pdGVtLCB3cmFwX3NxX2l0ZW0sCi0gICAgICAgICAgICJ4Ll9fZ2V0aXRlbV9fKHkpIDw9PT4geFt5XSIpLAorICAgICAgICAgICAiX19nZXRpdGVtX18oJHNlbGYsIGtleSwgLylcbi0tXG5cblJldHVybiBzZWxmW2tleV0uIiksCiAgICAgU1FTTE9UKCJfX3NldGl0ZW1fXyIsIHNxX2Fzc19pdGVtLCBzbG90X3NxX2Fzc19pdGVtLCB3cmFwX3NxX3NldGl0ZW0sCi0gICAgICAgICAgICJ4Ll9fc2V0aXRlbV9fKGksIHkpIDw9PT4geFtpXT15IiksCisgICAgICAgICAgICJfX3NldGl0ZW1fXygkc2VsZiwga2V5LCB2YWx1ZSwgLylcbi0tXG5cblNldCBzZWxmW2tleV0gdG8gdmFsdWUuIiksCiAgICAgU1FTTE9UKCJfX2RlbGl0ZW1fXyIsIHNxX2Fzc19pdGVtLCBzbG90X3NxX2Fzc19pdGVtLCB3cmFwX3NxX2RlbGl0ZW0sCi0gICAgICAgICAgICJ4Ll9fZGVsaXRlbV9fKHkpIDw9PT4gZGVsIHhbeV0iKSwKKyAgICAgICAgICAgIl9fZGVsaXRlbV9fKCRzZWxmLCBrZXksIC8pXG4tLVxuXG5EZWxldGUgc2VsZltrZXldLiIpLAogICAgIFNRU0xPVCgiX19jb250YWluc19fIiwgc3FfY29udGFpbnMsIHNsb3Rfc3FfY29udGFpbnMsIHdyYXBfb2Jqb2JqcHJvYywKLSAgICAgICAgICAgInguX19jb250YWluc19fKHkpIDw9PT4geSBpbiB4IiksCisgICAgICAgICAgICJfX2NvbnRhaW5zX18oJHNlbGYsIGtleSwgLylcbi0tXG5cblJldHVybiBrZXkgaW4gc2VsZi4iKSwKICAgICBTUVNMT1QoIl9faWFkZF9fIiwgc3FfaW5wbGFjZV9jb25jYXQsIE5VTEwsCi0gICAgICB3cmFwX2JpbmFyeWZ1bmMsICJ4Ll9faWFkZF9fKHkpIDw9PT4geCs9eSIpLAorICAgICAgICAgICB3cmFwX2JpbmFyeWZ1bmMsCisgICAgICAgICAgICJfX2lhZGRfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5JbXBsZW1lbnQgc2VsZis9dmFsdWUuIiksCiAgICAgU1FTTE9UKCJfX2ltdWxfXyIsIHNxX2lucGxhY2VfcmVwZWF0LCBOVUxMLAotICAgICAgd3JhcF9pbmRleGFyZ2Z1bmMsICJ4Ll9faW11bF9fKHkpIDw9PT4geCo9eSIpLAorICAgICAgICAgICB3cmFwX2luZGV4YXJnZnVuYywKKyAgICAgICAgICAgIl9faW11bF9fKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cbkltcGxlbWVudCBzZWxmKj12YWx1ZS4iKSwKIAogICAgIHtOVUxMfQogfTsKQEAgLTYxODQsMTUgKzY1OTcsMTQgQEAKIHsKICAgICBQeVR5cGVPYmplY3QgKnN1YmNsYXNzOwogICAgIFB5T2JqZWN0ICpyZWYsICpzdWJjbGFzc2VzLCAqZGljdDsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgc3ViY2xhc3NlcyA9IHR5cGUtPnRwX3N1YmNsYXNzZXM7CiAgICAgaWYgKHN1YmNsYXNzZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhzdWJjbGFzc2VzKSk7Ci0gICAgbiA9IFB5TGlzdF9HRVRfU0laRShzdWJjbGFzc2VzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShzdWJjbGFzc2VzLCBpKTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3Qoc3ViY2xhc3NlcykpOworICAgIGkgPSAwOworICAgIHdoaWxlIChQeURpY3RfTmV4dChzdWJjbGFzc2VzLCAmaSwgTlVMTCwgJnJlZikpIHsKICAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKICAgICAgICAgc3ViY2xhc3MgPSAoUHlUeXBlT2JqZWN0ICopUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKTsKICAgICAgICAgYXNzZXJ0KHN1YmNsYXNzICE9IE5VTEwpOwpAQCAtNjMzOCw4ICs2NzUwLDggQEAKICAgICAgICAgLyogV2Ugd2FudCBfX2NsYXNzX18gdG8gcmV0dXJuIHRoZSBjbGFzcyBvZiB0aGUgc3VwZXIgb2JqZWN0CiAgICAgICAgICAgIChpLmUuIHN1cGVyLCBvciBhIHN1YmNsYXNzKSwgbm90IHRoZSBjbGFzcyBvZiBzdS0+b2JqLiAqLwogICAgICAgICBza2lwID0gKFB5VW5pY29kZV9DaGVjayhuYW1lKSAmJgotICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgobmFtZSkgPT0gOSAmJgotICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIl9fY2xhc3NfXyIpID09IDApOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpID09IDkgJiYKKyAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobmFtZSwgJlB5SWRfX19jbGFzc19fKSA9PSAwKTsKICAgICB9CiAKICAgICBpZiAoIXNraXApIHsKQEAgLTY1NDUsOCArNjk1Nyw3IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShjby0+Y29fZnJlZXZhcnMsIGkpOwogICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhuYW1lKSk7Ci0gICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18iKSkgeworICAgICAgICAgICAgaWYgKCFfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobmFtZSwgJlB5SWRfX19jbGFzc19fKSkgewogICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaW5kZXggPSBjby0+Y29fbmxvY2FscyArCiAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKSArIGk7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmLT5mX2xvY2Fsc3BsdXNbaW5kZXhdOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYyBiL09iamVjdHMvdW5pY29kZWN0eXBlLmMKaW5kZXggYTU3MmMxMi4uZWE1NDBkNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYworKysgYi9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCkBAIC02MSw3ICs2MSw3IEBACiAvKiBSZXR1cm5zIHRoZSB0aXRsZWNhc2UgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gY2ggb3IganVzdAogICAgY2ggaWYgbm8gdGl0bGVjYXNlIG1hcHBpbmcgaXMga25vd24uICovCiAKLVB5X1VDUzQgX1B5VW5pY29kZV9Ub1RpdGxlY2FzZShyZWdpc3RlciBQeV9VQ1M0IGNoKQorUHlfVUNTNCBfUHlVbmljb2RlX1RvVGl0bGVjYXNlKFB5X1VDUzQgY2gpCiB7CiAgICAgY29uc3QgX1B5VW5pY29kZV9UeXBlUmVjb3JkICpjdHlwZSA9IGdldHR5cGVyZWNvcmQoY2gpOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGVvYmplY3QuYyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCmluZGV4IDg5MDk0ZTAuLjQyYWE5OGQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZW9iamVjdC5jCisrKyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCkBAIC00NywxMyArNDcsMTAgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAotLyogRW5kaWFubmVzcyBzd2l0Y2hlczsgZGVmYXVsdHMgdG8gbGl0dGxlIGVuZGlhbiAqLwotCi0jaWZkZWYgV09SRFNfQklHRU5ESUFOCi0jIGRlZmluZSBCWVRFT1JERVJfSVNfQklHX0VORElBTgotI2Vsc2UKLSMgZGVmaW5lIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCi0jZW5kaWYKKy8qW2NsaW5pYyBpbnB1dF0KK2NsYXNzIHN0ciAiUHlVbmljb2RlT2JqZWN0ICoiICImUHlVbmljb2RlX1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD02MDRlOTE2ODU0ODAwZmE4XSovCiAKIC8qIC0tLSBHbG9iYWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMzAsMTYgKzEyNywxNCBAQAogLyogdHJ1ZSBpZiB0aGUgVW5pY29kZSBvYmplY3QgaGFzIGFuIGFsbG9jYXRlZCBVVEYtOCBtZW1vcnkgYmxvY2sKICAgIChub3Qgc2hhcmVkIHdpdGggb3RoZXIgZGF0YSkgKi8KICNkZWZpbmUgX1B5VW5pY29kZV9IQVNfVVRGOF9NRU1PUlkob3ApICAgICAgICAgICAgICAgICAgXAotICAgIChhc3NlcnQoX1B5VW5pY29kZV9DSEVDSyhvcCkpLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICghUHlVbmljb2RlX0lTX0NPTVBBQ1RfQVNDSUkob3ApICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKCFQeVVuaWNvZGVfSVNfQ09NUEFDVF9BU0NJSShvcCkgICAgICAgICAgICAgICAgICAgXAogICAgICAgJiYgX1B5VW5pY29kZV9VVEY4KG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAmJiBfUHlVbmljb2RlX1VURjgob3ApICE9IFB5VW5pY29kZV9EQVRBKG9wKSkpCiAKIC8qIHRydWUgaWYgdGhlIFVuaWNvZGUgb2JqZWN0IGhhcyBhbiBhbGxvY2F0ZWQgd3N0ciBtZW1vcnkgYmxvY2sKICAgIChub3Qgc2hhcmVkIHdpdGggb3RoZXIgZGF0YSkgKi8KICNkZWZpbmUgX1B5VW5pY29kZV9IQVNfV1NUUl9NRU1PUlkob3ApICAgICAgICAgICAgICAgICAgXAotICAgIChhc3NlcnQoX1B5VW5pY29kZV9DSEVDSyhvcCkpLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIChfUHlVbmljb2RlX1dTVFIob3ApICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9QeVVuaWNvZGVfV1NUUihvcCkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgKCFQeVVuaWNvZGVfSVNfUkVBRFkob3ApIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgX1B5VW5pY29kZV9XU1RSKG9wKSAhPSBQeVVuaWNvZGVfREFUQShvcCkpKSkKIApAQCAtMTUwLDkgKzE0NSw5IEBACiAgICBidWZmZXIgd2hlcmUgdGhlIHJlc3VsdCBjaGFyYWN0ZXJzIGFyZSB3cml0dGVuIHRvLiAqLwogI2RlZmluZSBfUHlVbmljb2RlX0NPTlZFUlRfQllURVMoZnJvbV90eXBlLCB0b190eXBlLCBiZWdpbiwgZW5kLCB0bykgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHRvX3R5cGUgKl90byA9ICh0b190eXBlICopIHRvOyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgZnJvbV90eXBlICpfaXRlciA9IChiZWdpbik7ICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl9lbmQgPSAoZW5kKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRvX3R5cGUgKl90byA9ICh0b190eXBlICopKHRvKTsgICAgICAgICAgICAgICAgXAorICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl9pdGVyID0gKGZyb21fdHlwZSAqKShiZWdpbik7ICBcCisgICAgICAgIGNvbnN0IGZyb21fdHlwZSAqX2VuZCA9IChmcm9tX3R5cGUgKikoZW5kKTsgICAgIFwKICAgICAgICAgUHlfc3NpemVfdCBuID0gKF9lbmQpIC0gKF9pdGVyKTsgICAgICAgICAgICAgICAgXAogICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl91bnJvbGxlZF9lbmQgPSAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBfaXRlciArIF9QeV9TSVpFX1JPVU5EX0RPV04obiwgNCk7ICAgICAgICAgIFwKQEAgLTE5OSw2ICsxOTQsMTAgQEAKICAgICAgICAgcmV0dXJuIHVuaWNvZGVfZW1wdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK1B5X0xPQ0FMX0lOTElORShpbnQpCitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZShfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpOworCiAvKiBMaXN0IG9mIHN0YXRpYyBzdHJpbmdzLiAqLwogc3RhdGljIF9QeV9JZGVudGlmaWVyICpzdGF0aWNfc3RyaW5ncyA9IE5VTEw7CiAKQEAgLTQyNyw4ICs0MjYsNiBAQAogI2lmbmRlZiBQeV9ERUJVRwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgYXNzZXJ0KFB5X1JFRkNOVCh1bmljb2RlKSA9PSAxKTsKLQogICAgIGxlbiA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSk7CiAgICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKQEAgLTQ0NSwxMCArNDQyLDEyIEBACiAgICAgfQogCiAgICAgaWYgKF9QeVVuaWNvZGVfUmVhZHkodW5pY29kZSkgPCAwKSB7Ci0gICAgICAgIFB5X1hERUNSRUYodW5pY29kZSk7CisgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2Vsc2UKKyAgICBhc3NlcnQoUHlfUkVGQ05UKHVuaWNvZGUpID09IDEpOworCiAgICAgLyogZG9uJ3QgbWFrZSB0aGUgcmVzdWx0IHJlYWR5IGluIGRlYnVnIG1vZGUgdG8gZW5zdXJlIHRoYXQgdGhlIGNhbGxlcgogICAgICAgIG1ha2VzIHRoZSBzdHJpbmcgcmVhZHkgYmVmb3JlIHVzaW5nIGl0ICovCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7CkBAIC00NzEsNyArNDcwLDkgQEAKICAgICB9CiAKICAgICBpZiAobGVuZ3RoID09IDEpIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIodW5pY29kZSwgMCk7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmljb2RlKTsKKyAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIDApOwogICAgICAgICBpZiAoY2ggPCAyNTYpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpsYXRpbjFfY2hhciA9IHVuaWNvZGVfbGF0aW4xW2NoXTsKICAgICAgICAgICAgIGlmIChsYXRpbjFfY2hhciAhPSBOVUxMKSB7CkBAIC01NDQsNyArNTQ1LDYgQEAKIAogc3RhdGljIEJMT09NX01BU0sgYmxvb21fbGluZWJyZWFrID0gfihCTE9PTV9NQVNLKTA7CiAKLSNkZWZpbmUgQkxPT01fQUREKG1hc2ssIGNoKSAoKG1hc2sgfD0gKDFVTCA8PCAoKGNoKSAmIChCTE9PTV9XSURUSCAtIDEpKSkpKQogI2RlZmluZSBCTE9PTShtYXNrLCBjaCkgICAgICgobWFzayAmICAoMVVMIDw8ICgoY2gpICYgKEJMT09NX1dJRFRIIC0gMSkpKSkpCiAKICNkZWZpbmUgQkxPT01fTElORUJSRUFLKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTU1NCwyMSArNTU0LDQwIEBACiBQeV9MT0NBTF9JTkxJTkUoQkxPT01fTUFTSykKIG1ha2VfYmxvb21fbWFzayhpbnQga2luZCwgdm9pZCogcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKKyNkZWZpbmUgQkxPT01fVVBEQVRFKFRZUEUsIE1BU0ssIFBUUiwgTEVOKSAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUWVBFICpkYXRhID0gKFRZUEUgKilQVFI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVFlQRSAqZW5kID0gZGF0YSArIExFTjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1VDUzQgY2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmb3IgKDsgZGF0YSAhPSBlbmQ7IGRhdGErKykgeyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNoID0gKmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNQVNLIHw9ICgxVUwgPDwgKGNoICYgKEJMT09NX1dJRFRIIC0gMSkpKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwogICAgIC8qIGNhbGN1bGF0ZSBzaW1wbGUgYmxvb20tc3R5bGUgYml0bWFzayBmb3IgYSBnaXZlbiB1bmljb2RlIHN0cmluZyAqLwogCiAgICAgQkxPT01fTUFTSyBtYXNrOwotICAgIFB5X3NzaXplX3QgaTsKIAogICAgIG1hc2sgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgQkxPT01fQUREKG1hc2ssIFB5VW5pY29kZV9SRUFEKGtpbmQsIHB0ciwgaSkpOwotCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzEsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzIsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzQsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOworICAgIH0KICAgICByZXR1cm4gbWFzazsKLX0KIAotI2RlZmluZSBCTE9PTV9NRU1CRVIobWFzaywgY2hyLCBzdHIpIFwKLSAgICAoQkxPT00obWFzaywgY2hyKSBcCi0gICAgICYmIChQeVVuaWNvZGVfRmluZENoYXIoc3RyLCBjaHIsIDAsIFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0ciksIDEpID49IDApKQorI3VuZGVmIEJMT09NX1VQREFURQorfQogCiAvKiBDb21waWxhdGlvbiBvZiB0ZW1wbGF0ZWQgcm91dGluZXMgKi8KIApAQCAtNTg4LDYgKzYwNyw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvcmVwbGFjZS5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kX21heF9jaGFyLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2xvY2FsZXV0aWwuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvdW5kZWYuaCIKQEAgLTU5OCw2ICs2MTgsNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL3JlcGxhY2UuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9sb2NhbGV1dGlsLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3VuZGVmLmgiCkBAIC02MDgsNiArNjI5LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9yZXBsYWNlLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvbG9jYWxldXRpbC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi91bmRlZi5oIgpAQCAtNjU0LDYgKzY3NiwyNSBAQAogICAgIH0KIH0KIAorI2lmZGVmIFB5X0RFQlVHCisvKiBGaWxsIHRoZSBkYXRhIG9mIGFuIFVuaWNvZGUgc3RyaW5nIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzIHRvIGRldGVjdCBidWdzCisgICBlYXJsaWVyLgorCisgICBfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSBkZXRlY3RzIGludmFsaWQgY2hhcmFjdGVycywgYXQgbGVhc3QgZm9yCisgICBBU0NJSSBhbmQgVUNTLTQgc3RyaW5ncy4gVSswMEZGIGlzIGludmFsaWQgaW4gQVNDSUkgYW5kIFUrRkZGRkZGRkYgaXMgYW4KKyAgIGludmFsaWQgY2hhcmFjdGVyIGluIFVuaWNvZGUgNi4wLiAqLworc3RhdGljIHZvaWQKK3VuaWNvZGVfZmlsbF9pbnZhbGlkKFB5T2JqZWN0ICp1bmljb2RlLCBQeV9zc2l6ZV90IG9sZF9sZW5ndGgpCit7CisgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICBQeV9VQ1MxICpkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSk7CisgICAgUHlfc3NpemVfdCBsZW5ndGggPSBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKTsKKyAgICBpZiAobGVuZ3RoIDw9IG9sZF9sZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICBtZW1zZXQoZGF0YSArIG9sZF9sZW5ndGggKiBraW5kLCAweGZmLCAobGVuZ3RoIC0gb2xkX2xlbmd0aCkgKiBraW5kKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QqCiByZXNpemVfY29tcGFjdChQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCBsZW5ndGgpCiB7CkBAIC02NjIsNiArNzAzLDEwIEBACiAgICAgUHlfc3NpemVfdCBuZXdfc2l6ZTsKICAgICBpbnQgc2hhcmVfd3N0cjsKICAgICBQeU9iamVjdCAqbmV3X3VuaWNvZGU7CisjaWZkZWYgUHlfREVCVUcKKyAgICBQeV9zc2l6ZV90IG9sZF9sZW5ndGggPSBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKTsKKyNlbmRpZgorCiAgICAgYXNzZXJ0KHVuaWNvZGVfbW9kaWZpYWJsZSh1bmljb2RlKSk7CiAgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19SRUFEWSh1bmljb2RlKSk7CiAgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19DT01QQUNUKHVuaWNvZGUpKTsKQEAgLTcwMSw2ICs3NDYsOSBAQAogICAgICAgICBQeU9iamVjdF9ERUwoX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpKTsKICAgICAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpID0gTlVMTDsKICAgICB9CisjaWZkZWYgUHlfREVCVUcKKyAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCh1bmljb2RlLCBvbGRfbGVuZ3RoKTsKKyNlbmRpZgogICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh1bmljb2RlKSwgUHlVbmljb2RlX0RBVEEodW5pY29kZSksCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgMCk7CiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAwKSk7CkBAIC03MTksNiArNzY3LDkgQEAKICAgICAgICAgUHlfc3NpemVfdCBjaGFyX3NpemU7CiAgICAgICAgIGludCBzaGFyZV93c3RyLCBzaGFyZV91dGY4OwogICAgICAgICB2b2lkICpkYXRhOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCA9IF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpOworI2VuZGlmCiAKICAgICAgICAgZGF0YSA9IF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSk7CiAgICAgICAgIGNoYXJfc2l6ZSA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOwpAQCAtNzU0LDYgKzgwNSw5IEBACiAgICAgICAgIH0KICAgICAgICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSBsZW5ndGg7CiAgICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh1bmljb2RlKSwgZGF0YSwgbGVuZ3RoLCAwKTsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCh1bmljb2RlLCBvbGRfbGVuZ3RoKTsKKyNlbmRpZgogICAgICAgICBpZiAoc2hhcmVfd3N0ciB8fCBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPT0gTlVMTCkgewogICAgICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAwKSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTgwNiw4ICs4NjAsOCBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGNvcHlfbGVuZ3RoID0gX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKTsKICAgICAgICAgY29weV9sZW5ndGggPSBQeV9NSU4oY29weV9sZW5ndGgsIGxlbmd0aCk7Ci0gICAgICAgIFB5X1VOSUNPREVfQ09QWShfUHlVbmljb2RlX1dTVFIodyksIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfbGVuZ3RoKTsKKyAgICAgICAgUHlfTUVNQ1BZKF9QeVVuaWNvZGVfV1NUUih3KSwgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgY29weV9sZW5ndGggKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICByZXR1cm4gdzsKICAgICB9CiB9CkBAIC04MjQsNyArODc4LDcgQEAKIHN0YXRpYyBQeVVuaWNvZGVPYmplY3QgKgogX1B5VW5pY29kZV9OZXcoUHlfc3NpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmVnaXN0ZXIgUHlVbmljb2RlT2JqZWN0ICp1bmljb2RlOworICAgIFB5VW5pY29kZU9iamVjdCAqdW5pY29kZTsKICAgICBzaXplX3QgbmV3X3NpemU7CiAKICAgICAvKiBPcHRpbWl6YXRpb24gZm9yIGVtcHR5IHN0cmluZ3MgKi8KQEAgLTg0Nyw2ICs5MDEsMTkgQEAKICAgICBpZiAodW5pY29kZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuZXdfc2l6ZSA9IHNpemVvZihQeV9VTklDT0RFKSAqICgoc2l6ZV90KWxlbmd0aCArIDEpOworCisgICAgX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKSA9IGxlbmd0aDsKKyAgICBfUHlVbmljb2RlX0hBU0godW5pY29kZSkgPSAtMTsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmludGVybmVkID0gMDsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmtpbmQgPSAwOworICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuY29tcGFjdCA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5yZWFkeSA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5hc2NpaSA9IDA7CisgICAgX1B5VW5pY29kZV9EQVRBX0FOWSh1bmljb2RlKSA9IE5VTEw7CisgICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSAwOworICAgIF9QeVVuaWNvZGVfVVRGOCh1bmljb2RlKSA9IE5VTEw7CisgICAgX1B5VW5pY29kZV9VVEY4X0xFTkdUSCh1bmljb2RlKSA9IDA7CisKICAgICBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPSAoUHlfVU5JQ09ERSopIFB5T2JqZWN0X01BTExPQyhuZXdfc2l6ZSk7CiAgICAgaWYgKCFfUHlVbmljb2RlX1dTVFIodW5pY29kZSkpIHsKICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwpAQCAtODYzLDE3ICs5MzAsNyBAQAogICAgICAqLwogICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKVswXSA9IDA7CiAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpW2xlbmd0aF0gPSAwOwotICAgIF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSkgPSBsZW5ndGg7Ci0gICAgX1B5VW5pY29kZV9IQVNIKHVuaWNvZGUpID0gLTE7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5pbnRlcm5lZCA9IDA7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5raW5kID0gMDsKLSAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmNvbXBhY3QgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkucmVhZHkgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuYXNjaWkgPSAwOwotICAgIF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSkgPSBOVUxMOwotICAgIF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpID0gMDsKLSAgICBfUHlVbmljb2RlX1VURjgodW5pY29kZSkgPSBOVUxMOwotICAgIF9QeVVuaWNvZGVfVVRGOF9MRU5HVEgodW5pY29kZSkgPSAwOworCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSgoUHlPYmplY3QgKil1bmljb2RlLCAwKSk7CiAgICAgcmV0dXJuIHVuaWNvZGU7CiB9CkBAIC0xMDc4LDExICsxMTM1LDcgQEAKICAgICAgICAgfQogICAgIH0KICNpZmRlZiBQeV9ERUJVRwotICAgIC8qIEZpbGwgdGhlIGRhdGEgd2l0aCBpbnZhbGlkIGNoYXJhY3RlcnMgdG8gZGV0ZWN0IGJ1Z3MgZWFybGllci4KLSAgICAgICBfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSBkZXRlY3RzIGludmFsaWQgY2hhcmFjdGVycywKLSAgICAgICBhdCBsZWFzdCBmb3IgQVNDSUkgYW5kIFVDUy00IHN0cmluZ3MuIFUrMDBGRiBpcyBpbnZhbGlkIGluIEFTQ0lJCi0gICAgICAgYW5kIFUrRkZGRkZGRkYgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIgaW4gVW5pY29kZSA2LjAuICovCi0gICAgbWVtc2V0KGRhdGEsIDB4ZmYsIHNpemUgKiBraW5kKTsKKyAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCgoUHlPYmplY3QqKXVuaWNvZGUsIDApOwogI2VuZGlmCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSgoUHlPYmplY3QqKXVuaWNvZGUsIDApKTsKICAgICByZXR1cm4gb2JqOwpAQCAtMTUxMiw3ICsxNTY1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLXVuaWNvZGVfZGVhbGxvYyhyZWdpc3RlciBQeU9iamVjdCAqdW5pY29kZSkKK3VuaWNvZGVfZGVhbGxvYyhQeU9iamVjdCAqdW5pY29kZSkKIHsKICAgICBzd2l0Y2ggKFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh1bmljb2RlKSkgewogICAgIGNhc2UgU1NUQVRFX05PVF9JTlRFUk5FRDoKQEAgLTE2NDQsMzggKzE2OTcsNiBAQAogICAgIHJldHVybiB1bmljb2RlX3Jlc2l6ZShwX3VuaWNvZGUsIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbnQKLXVuaWNvZGVfd2lkZW4oUHlPYmplY3QgKipwX3VuaWNvZGUsIFB5X3NzaXplX3QgbGVuZ3RoLAotICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF4Y2hhcikKLXsKLSAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGFzc2VydChQeVVuaWNvZGVfSVNfUkVBRFkoKnBfdW5pY29kZSkpOwotICAgIGFzc2VydChsZW5ndGggPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKnBfdW5pY29kZSkpOwotICAgIGlmIChtYXhjaGFyIDw9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSgqcF91bmljb2RlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmVzdWx0ID0gUHlVbmljb2RlX05ldyhQeVVuaWNvZGVfR0VUX0xFTkdUSCgqcF91bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGNoYXIpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlc3VsdCwgMCwgKnBfdW5pY29kZSwgMCwgbGVuZ3RoKTsKLSAgICBQeV9ERUNSRUYoKnBfdW5pY29kZSk7Ci0gICAgKnBfdW5pY29kZSA9IHJlc3VsdDsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdW5pY29kZV9wdXRjaGFyKFB5T2JqZWN0ICoqcF91bmljb2RlLCBQeV9zc2l6ZV90ICpwb3MsCi0gICAgICAgICAgICAgICAgUHlfVUNTNCBjaCkKLXsKLSAgICBhc3NlcnQoY2ggPD0gTUFYX1VOSUNPREUpOwotICAgIGlmICh1bmljb2RlX3dpZGVuKHBfdW5pY29kZSwgKnBvcywgY2gpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCgqcF91bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0RBVEEoKnBfdW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgICgqcG9zKSsrLCBjaCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIC8qIENvcHkgYSBBU0NJSSBvciBsYXRpbjEgY2hhciogc3RyaW5nIGludG8gYSBQeXRob24gVW5pY29kZSBzdHJpbmcuCiAKICAgIFdBUk5JTkc6IFRoZSBmdW5jdGlvbiBkb2Vzbid0IGNvcHkgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyIGFuZApAQCAtMTY5Miw2ICsxNzEzLDE0IEBACiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDogewogICAgICAgICBhc3NlcnQoaW5kZXggKyBsZW4gPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSkpOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpIHsKKyAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IHVjczFsaWJfZmluZF9tYXhfY2hhcigKKyAgICAgICAgICAgICAgICAoY29uc3QgUHlfVUNTMSopc3RyLAorICAgICAgICAgICAgICAgIChjb25zdCBQeV9VQ1MxKilzdHIgKyBsZW4pOworICAgICAgICAgICAgYXNzZXJ0KG1heGNoYXIgPCAxMjgpOworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgbWVtY3B5KChjaGFyICopIGRhdGEgKyBpbmRleCwgc3RyLCBsZW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNzIwLDcgKzE3NDksNiBAQAogICAgIH0KIH0KIAotCiBzdGF0aWMgUHlPYmplY3QqCiBnZXRfbGF0aW4xX2NoYXIodW5zaWduZWQgY2hhciBjaCkKIHsKQEAgLTE3MzcsNiArMTc2NSwzNCBAQAogICAgIHJldHVybiB1bmljb2RlOwogfQogCitzdGF0aWMgUHlPYmplY3QqCit1bmljb2RlX2NoYXIoUHlfVUNTNCBjaCkKK3sKKyAgICBQeU9iamVjdCAqdW5pY29kZTsKKworICAgIGFzc2VydChjaCA8PSBNQVhfVU5JQ09ERSk7CisKKyAgICBpZiAoY2ggPCAyNTYpCisgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoY2gpOworCisgICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoMSwgY2gpOworICAgIGlmICh1bmljb2RlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN3aXRjaCAoUHlVbmljb2RlX0tJTkQodW5pY29kZSkpIHsKKyAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKVswXSA9IChQeV9VQ1MxKWNoOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICBQeVVuaWNvZGVfMkJZVEVfREFUQSh1bmljb2RlKVswXSA9IChQeV9VQ1MyKWNoOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQodW5pY29kZSkgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOworICAgICAgICBQeVVuaWNvZGVfNEJZVEVfREFUQSh1bmljb2RlKVswXSA9IGNoOworICAgIH0KKyAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDEpKTsKKyAgICByZXR1cm4gdW5pY29kZTsKK30KKwogUHlPYmplY3QgKgogUHlVbmljb2RlX0Zyb21Vbmljb2RlKGNvbnN0IFB5X1VOSUNPREUgKnUsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKQEAgLTE5MzQsMTggKzE5OTAsOCBAQAogICAgIGlmIChzaXplID09IDApCiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIGFzc2VydChzaXplID4gMCk7Ci0gICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICBQeV9VQ1M0IGNoID0gdVswXTsKLSAgICAgICAgaWYgKGNoIDwgMjU2KQotICAgICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhciljaCk7Ci0KLSAgICAgICAgcmVzID0gUHlVbmljb2RlX05ldygxLCBjaCk7Ci0gICAgICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQocmVzKSwgUHlVbmljb2RlX0RBVEEocmVzKSwgMCwgY2gpOwotICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHJlcywgMSkpOwotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KKyAgICBpZiAoc2l6ZSA9PSAxKQorICAgICAgICByZXR1cm4gdW5pY29kZV9jaGFyKHVbMF0pOwogCiAgICAgbWF4X2NoYXIgPSB1Y3MybGliX2ZpbmRfbWF4X2NoYXIodSwgdSArIHNpemUpOwogICAgIHJlcyA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgbWF4X2NoYXIpOwpAQCAtMTk3MCwxOCArMjAxNiw4IEBACiAgICAgaWYgKHNpemUgPT0gMCkKICAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAgICAgYXNzZXJ0KHNpemUgPiAwKTsKLSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIFB5X1VDUzQgY2ggPSB1WzBdOwotICAgICAgICBpZiAoY2ggPCAyNTYpCi0gICAgICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKCh1bnNpZ25lZCBjaGFyKWNoKTsKLQotICAgICAgICByZXMgPSBQeVVuaWNvZGVfTmV3KDEsIGNoKTsKLSAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORChyZXMpLCBQeVVuaWNvZGVfREFUQShyZXMpLCAwLCBjaCk7Ci0gICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmVzLCAxKSk7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQorICAgIGlmIChzaXplID09IDEpCisgICAgICAgIHJldHVybiB1bmljb2RlX2NoYXIodVswXSk7CiAKICAgICBtYXhfY2hhciA9IHVjczRsaWJfZmluZF9tYXhfY2hhcih1LCB1ICsgc2l6ZSk7CiAgICAgcmVzID0gUHlVbmljb2RlX05ldyhzaXplLCBtYXhfY2hhcik7CkBAIC0yMjU3LDcgKzIyOTMsNyBAQAogI2lmZGVmIEhBVkVfV0NIQVJfSAogCiBQeU9iamVjdCAqCi1QeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHJlZ2lzdGVyIGNvbnN0IHdjaGFyX3QgKncsIFB5X3NzaXplX3Qgc2l6ZSkKK1B5VW5pY29kZV9Gcm9tV2lkZUNoYXIoY29uc3Qgd2NoYXJfdCAqdywgUHlfc3NpemVfdCBzaXplKQogewogICAgIGlmICh3ID09IE5VTEwpIHsKICAgICAgICAgaWYgKHNpemUgPT0gMCkKQEAgLTIyNzcsMTYgKzIzMTMsOSBAQAogCiBzdGF0aWMgdm9pZAogbWFrZWZtdChjaGFyICpmbXQsIGludCBsb25nZmxhZywgaW50IGxvbmdsb25nZmxhZywgaW50IHNpemVfdGZsYWcsCi0gICAgICAgIGludCB6ZXJvcGFkLCBpbnQgd2lkdGgsIGludCBwcmVjaXNpb24sIGNoYXIgYykKKyAgICAgICAgY2hhciBjKQogewogICAgICpmbXQrKyA9ICclJzsKLSAgICBpZiAod2lkdGgpIHsKLSAgICAgICAgaWYgKHplcm9wYWQpCi0gICAgICAgICAgICAqZm10KysgPSAnMCc7Ci0gICAgICAgIGZtdCArPSBzcHJpbnRmKGZtdCwgIiVkIiwgd2lkdGgpOwotICAgIH0KLSAgICBpZiAocHJlY2lzaW9uKQotICAgICAgICBmbXQgKz0gc3ByaW50ZihmbXQsICIuJWQiLCBwcmVjaXNpb24pOwogICAgIGlmIChsb25nZmxhZykKICAgICAgICAgKmZtdCsrID0gJ2wnOwogICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykgewpAQCAtMjMxMSw0NCArMjM0MCwxMzkgQEAKICAgICAqZm10ID0gJ1wwJzsKIH0KIAotLyogaGVscGVyIGZvciBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSAqLworLyogbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyByZXF1aXJlZCBmb3Igb3V0cHV0IG9mICVsbGQgb3IgJXAuCisgICBXZSBuZWVkIGF0IG1vc3QgY2VpbChsb2cxMCgyNTYpKlNJWkVPRl9MT05HX0xPTkcpIGRpZ2l0cywKKyAgIHBsdXMgMSBmb3IgdGhlIHNpZ24uICA1My8yMiBpcyBhbiB1cHBlciBib3VuZCBmb3IgbG9nMTAoMjU2KS4gKi8KKyNkZWZpbmUgTUFYX0xPTkdfTE9OR19DSEFSUyAoMiArIChTSVpFT0ZfTE9OR19MT05HKjUzLTEpIC8gMjIpCisKK3N0YXRpYyBpbnQKK3VuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHdpZHRoLCBQeV9zc2l6ZV90IHByZWNpc2lvbikKK3sKKyAgICBQeV9zc2l6ZV90IGxlbmd0aCwgZmlsbCwgYXJnbGVuOworICAgIFB5X1VDUzQgbWF4Y2hhcjsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKKyAgICBpZiAoKHByZWNpc2lvbiA9PSAtMSB8fCBwcmVjaXNpb24gPj0gbGVuZ3RoKQorICAgICAgICAmJiB3aWR0aCA8PSBsZW5ndGgpCisgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgc3RyKTsKKworICAgIGlmIChwcmVjaXNpb24gIT0gLTEpCisgICAgICAgIGxlbmd0aCA9IFB5X01JTihwcmVjaXNpb24sIGxlbmd0aCk7CisKKyAgICBhcmdsZW4gPSBQeV9NQVgobGVuZ3RoLCB3aWR0aCk7CisgICAgaWYgKFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpID4gd3JpdGVyLT5tYXhjaGFyKQorICAgICAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcihzdHIsIDAsIGxlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGFyZ2xlbiwgbWF4Y2hhcikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICh3aWR0aCA+IGxlbmd0aCkgeworICAgICAgICBmaWxsID0gd2lkdGggLSBsZW5ndGg7CisgICAgICAgIGlmIChQeVVuaWNvZGVfRmlsbCh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsIGZpbGwsICcgJykgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHdyaXRlci0+cG9zICs9IGZpbGw7CisgICAgfQorCisgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgMCwgbGVuZ3RoKTsKKyAgICB3cml0ZXItPnBvcyArPSBsZW5ndGg7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9jc3RyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgY29uc3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCB3aWR0aCwgUHlfc3NpemVfdCBwcmVjaXNpb24pCit7CisgICAgLyogVVRGLTggKi8KKyAgICBQeV9zc2l6ZV90IGxlbmd0aDsKKyAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBpbnQgcmVzOworCisgICAgbGVuZ3RoID0gc3RybGVuKHN0cik7CisgICAgaWYgKHByZWNpc2lvbiAhPSAtMSkKKyAgICAgICAgbGVuZ3RoID0gUHlfTUlOKGxlbmd0aCwgcHJlY2lzaW9uKTsKKyAgICB1bmljb2RlID0gUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChzdHIsIGxlbmd0aCwgInJlcGxhY2UiLCBOVUxMKTsKKyAgICBpZiAodW5pY29kZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXMgPSB1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgdW5pY29kZSwgd2lkdGgsIC0xKTsKKyAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgcmV0dXJuIHJlczsKK30KIAogc3RhdGljIGNvbnN0IGNoYXIqCi1wYXJzZV9mb3JtYXRfZmxhZ3MoY29uc3QgY2hhciAqZiwKLSAgICAgICAgICAgICAgICAgICBpbnQgKnBfd2lkdGgsIGludCAqcF9wcmVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgaW50ICpwX2xvbmdmbGFnLCBpbnQgKnBfbG9uZ2xvbmdmbGFnLCBpbnQgKnBfc2l6ZV90ZmxhZykKK3VuaWNvZGVfZnJvbWZvcm1hdF9hcmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmLCB2YV9saXN0ICp2YXJncykKIHsKLSAgICBpbnQgd2lkdGgsIHByZWNpc2lvbiwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZzsKKyAgICBjb25zdCBjaGFyICpwOworICAgIFB5X3NzaXplX3QgbGVuOworICAgIGludCB6ZXJvcGFkOworICAgIFB5X3NzaXplX3Qgd2lkdGg7CisgICAgUHlfc3NpemVfdCBwcmVjaXNpb247CisgICAgaW50IGxvbmdmbGFnOworICAgIGludCBsb25nbG9uZ2ZsYWc7CisgICAgaW50IHNpemVfdGZsYWc7CisgICAgUHlfc3NpemVfdCBmaWxsOworCisgICAgcCA9IGY7CisgICAgZisrOworICAgIHplcm9wYWQgPSAwOworICAgIGlmICgqZiA9PSAnMCcpIHsKKyAgICAgICAgemVyb3BhZCA9IDE7CisgICAgICAgIGYrKzsKKyAgICB9CiAKICAgICAvKiBwYXJzZSB0aGUgd2lkdGgucHJlY2lzaW9uIHBhcnQsIGUuZy4gIiUyLjVzIiA9PiB3aWR0aD0yLCBwcmVjaXNpb249NSAqLwotICAgIGYrKzsKLSAgICB3aWR0aCA9IDA7Ci0gICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkKLSAgICAgICAgd2lkdGggPSAod2lkdGgqMTApICsgKmYrKyAtICcwJzsKLSAgICBwcmVjaXNpb24gPSAwOworICAgIHdpZHRoID0gLTE7CisgICAgaWYgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkgeworICAgICAgICB3aWR0aCA9ICpmIC0gJzAnOworICAgICAgICBmKys7CisgICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpIHsKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IChQWV9TU0laRV9UX01BWCAtICgoaW50KSpmIC0gJzAnKSkgLyAxMCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGggdG9vIGJpZyIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2lkdGggPSAod2lkdGggKiAxMCkgKyAoKmYgLSAnMCcpOworICAgICAgICAgICAgZisrOworICAgICAgICB9CisgICAgfQorICAgIHByZWNpc2lvbiA9IC0xOwogICAgIGlmICgqZiA9PSAnLicpIHsKICAgICAgICAgZisrOwotICAgICAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKQotICAgICAgICAgICAgcHJlY2lzaW9uID0gKHByZWNpc2lvbioxMCkgKyAqZisrIC0gJzAnOworICAgICAgICBpZiAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKSB7CisgICAgICAgICAgICBwcmVjaXNpb24gPSAoKmYgLSAnMCcpOworICAgICAgICAgICAgZisrOworICAgICAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkgeworICAgICAgICAgICAgICAgIGlmIChwcmVjaXNpb24gPiAoUFlfU1NJWkVfVF9NQVggLSAoKGludCkqZiAtICcwJykpIC8gMTApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlY2lzaW9uIHRvbyBiaWciKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IChwcmVjaXNpb24gKiAxMCkgKyAoKmYgLSAnMCcpOworICAgICAgICAgICAgICAgIGYrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBpZiAoKmYgPT0gJyUnKSB7CiAgICAgICAgICAgICAvKiAiJS4zJXMiID0+IGYgcG9pbnRzIHRvICIzIiAqLwogICAgICAgICAgICAgZi0tOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICgqZiA9PSAnXDAnKSB7Ci0gICAgICAgIC8qIGJvZ3VzIGZvcm1hdCAiJS4xIiA9PiBnbyBiYWNrd2FyZCwgZiBwb2ludHMgdG8gIjEiICovCisgICAgICAgIC8qIGJvZ3VzIGZvcm1hdCAiJS4xMjMiID0+IGdvIGJhY2t3YXJkLCBmIHBvaW50cyB0byAiMyIgKi8KICAgICAgICAgZi0tOwogICAgIH0KLSAgICBpZiAocF93aWR0aCAhPSBOVUxMKQotICAgICAgICAqcF93aWR0aCA9IHdpZHRoOwotICAgIGlmIChwX3ByZWNpc2lvbiAhPSBOVUxMKQotICAgICAgICAqcF9wcmVjaXNpb24gPSBwcmVjaXNpb247CiAKICAgICAvKiBIYW5kbGUgJWxkLCAlbHUsICVsbGQgYW5kICVsbHUuICovCiAgICAgbG9uZ2ZsYWcgPSAwOwogICAgIGxvbmdsb25nZmxhZyA9IDA7CiAgICAgc2l6ZV90ZmxhZyA9IDA7Ci0KICAgICBpZiAoKmYgPT0gJ2wnKSB7CiAgICAgICAgIGlmIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JyB8fCBmWzFdID09ICdpJykgewogICAgICAgICAgICAgbG9uZ2ZsYWcgPSAxOwpAQCAtMjM2Nyw0OTkgKzI0OTEsMjg0IEBACiAgICAgICAgIHNpemVfdGZsYWcgPSAxOwogICAgICAgICArK2Y7CiAgICAgfQotICAgIGlmIChwX2xvbmdmbGFnICE9IE5VTEwpCi0gICAgICAgICpwX2xvbmdmbGFnID0gbG9uZ2ZsYWc7Ci0gICAgaWYgKHBfbG9uZ2xvbmdmbGFnICE9IE5VTEwpCi0gICAgICAgICpwX2xvbmdsb25nZmxhZyA9IGxvbmdsb25nZmxhZzsKLSAgICBpZiAocF9zaXplX3RmbGFnICE9IE5VTEwpCi0gICAgICAgICpwX3NpemVfdGZsYWcgPSBzaXplX3RmbGFnOworCisgICAgaWYgKGZbMV0gPT0gJ1wwJykKKyAgICAgICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAwOworCisgICAgc3dpdGNoICgqZikgeworICAgIGNhc2UgJ2MnOgorICAgIHsKKyAgICAgICAgaW50IG9yZGluYWwgPSB2YV9hcmcoKnZhcmdzLCBpbnQpOworICAgICAgICBpZiAob3JkaW5hbCA8IDAgfHwgb3JkaW5hbCA+IE1BWF9VTklDT0RFKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhcmFjdGVyIGFyZ3VtZW50IG5vdCBpbiByYW5nZSgweDExMDAwMCkiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIG9yZGluYWwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdpJzoKKyAgICBjYXNlICdkJzoKKyAgICBjYXNlICd1JzoKKyAgICBjYXNlICd4JzoKKyAgICB7CisgICAgICAgIC8qIHVzZWQgYnkgc3ByaW50ZiAqLworICAgICAgICBjaGFyIGZtdFsxMF07IC8qIHNob3VsZCBiZSBlbm91Z2ggZm9yICIlMGxsZFwwIiAqLworICAgICAgICBjaGFyIGJ1ZmZlcltNQVhfTE9OR19MT05HX0NIQVJTXTsKKyAgICAgICAgUHlfc3NpemVfdCBhcmdsZW47CisKKyAgICAgICAgaWYgKCpmID09ICd1JykgeworICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsICpmKTsKKworICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCB1bnNpZ25lZCBsb25nKSk7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgdW5zaWduZWQgUFlfTE9OR19MT05HKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHNpemVfdCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCB1bnNpZ25lZCBpbnQpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgqZiA9PSAneCcpIHsKKyAgICAgICAgICAgIG1ha2VmbXQoZm10LCAwLCAwLCAwLCAneCcpOworICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwgdmFfYXJnKCp2YXJncywgaW50KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgKmYpOworCisgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIGxvbmcpKTsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBQWV9MT05HX0xPTkcpKTsKKyNlbmRpZgorICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgUHlfc3NpemVfdCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBpbnQpKTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQobGVuID49IDApOworCisgICAgICAgIGlmIChwcmVjaXNpb24gPCBsZW4pCisgICAgICAgICAgICBwcmVjaXNpb24gPSBsZW47CisKKyAgICAgICAgYXJnbGVuID0gUHlfTUFYKHByZWNpc2lvbiwgd2lkdGgpOworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgYXJnbGVuLCAxMjcpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgaWYgKHdpZHRoID4gcHJlY2lzaW9uKSB7CisgICAgICAgICAgICBQeV9VQ1M0IGZpbGxjaGFyOworICAgICAgICAgICAgZmlsbCA9IHdpZHRoIC0gcHJlY2lzaW9uOworICAgICAgICAgICAgZmlsbGNoYXIgPSB6ZXJvcGFkPycwJzonICc7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbGwod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBmaWxsLCBmaWxsY2hhcikgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB3cml0ZXItPnBvcyArPSBmaWxsOworICAgICAgICB9CisgICAgICAgIGlmIChwcmVjaXNpb24gPiBsZW4pIHsKKyAgICAgICAgICAgIGZpbGwgPSBwcmVjaXNpb24gLSBsZW47CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbGwod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBmaWxsLCAnMCcpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gZmlsbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcod3JpdGVyLCBidWZmZXIsIGxlbikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ3AnOgorICAgIHsKKyAgICAgICAgY2hhciBudW1iZXJbTUFYX0xPTkdfTE9OR19DSEFSU107CisKKyAgICAgICAgbGVuID0gc3ByaW50ZihudW1iZXIsICIlcCIsIHZhX2FyZygqdmFyZ3MsIHZvaWQqKSk7CisgICAgICAgIGFzc2VydChsZW4gPj0gMCk7CisKKyAgICAgICAgLyogJXAgaXMgaWxsLWRlZmluZWQ6ICBlbnN1cmUgbGVhZGluZyAweC4gKi8KKyAgICAgICAgaWYgKG51bWJlclsxXSA9PSAnWCcpCisgICAgICAgICAgICBudW1iZXJbMV0gPSAneCc7CisgICAgICAgIGVsc2UgaWYgKG51bWJlclsxXSAhPSAneCcpIHsKKyAgICAgICAgICAgIG1lbW1vdmUobnVtYmVyICsgMiwgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBzdHJsZW4obnVtYmVyKSArIDEpOworICAgICAgICAgICAgbnVtYmVyWzBdID0gJzAnOworICAgICAgICAgICAgbnVtYmVyWzFdID0gJ3gnOworICAgICAgICAgICAgbGVuICs9IDI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKHdyaXRlciwgbnVtYmVyLCBsZW4pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdzJzoKKyAgICB7CisgICAgICAgIC8qIFVURi04ICovCisgICAgICAgIGNvbnN0IGNoYXIgKnMgPSB2YV9hcmcoKnZhcmdzLCBjb25zdCBjaGFyKik7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfY3N0cih3cml0ZXIsIHMsIHdpZHRoLCBwcmVjaXNpb24pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdVJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgYXNzZXJ0KG9iaiAmJiBfUHlVbmljb2RlX0NIRUNLKG9iaikpOworCisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgb2JqLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdWJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyID0gdmFfYXJnKCp2YXJncywgY29uc3QgY2hhciAqKTsKKyAgICAgICAgaWYgKG9iaikgeworICAgICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sob2JqKSk7CisgICAgICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIG9iaiwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoc3RyICE9IE5VTEwpOworICAgICAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9jc3RyKHdyaXRlciwgc3RyLCB3aWR0aCwgcHJlY2lzaW9uKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnUyc6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIFB5T2JqZWN0ICpzdHI7CisgICAgICAgIGFzc2VydChvYmopOworICAgICAgICBzdHIgPSBQeU9iamVjdF9TdHIob2JqKTsKKyAgICAgICAgaWYgKCFzdHIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCBzdHIsIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdSJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgUHlPYmplY3QgKnJlcHI7CisgICAgICAgIGFzc2VydChvYmopOworICAgICAgICByZXByID0gUHlPYmplY3RfUmVwcihvYmopOworICAgICAgICBpZiAoIXJlcHIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCByZXByLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHJlcHIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHJlcHIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdBJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgUHlPYmplY3QgKmFzY2lpOworICAgICAgICBhc3NlcnQob2JqKTsKKyAgICAgICAgYXNjaWkgPSBQeU9iamVjdF9BU0NJSShvYmopOworICAgICAgICBpZiAoIWFzY2lpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgYXNjaWksIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXNjaWkpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGFzY2lpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnJSc6CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsICclJykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogaWYgd2Ugc3R1bWJsZSB1cG9uIGFuIHVua25vd24gZm9ybWF0dGluZyBjb2RlLCBjb3B5IHRoZSByZXN0CisgICAgICAgICAgIG9mIHRoZSBmb3JtYXQgc3RyaW5nIHRvIHRoZSBvdXRwdXQgc3RyaW5nLiAod2UgY2Fubm90IGp1c3QKKyAgICAgICAgICAgc2tpcCB0aGUgY29kZSwgc2luY2UgdGhlcmUncyBubyB3YXkgdG8ga25vdyB3aGF0J3MgaW4gdGhlCisgICAgICAgICAgIGFyZ3VtZW50IGxpc3QpICovCisgICAgICAgIGxlbiA9IHN0cmxlbihwKTsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVMYXRpbjFTdHJpbmcod3JpdGVyLCBwLCBsZW4pID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGYgPSBwK2xlbjsKKyAgICAgICAgcmV0dXJuIGY7CisgICAgfQorCisgICAgZisrOwogICAgIHJldHVybiBmOwogfQogCi0vKiBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciBvdXRwdXQgb2YgJWxkLiAgMjEgY2hhcmFjdGVycwotICAgYWxsb3dzIGZvciA2NC1iaXQgaW50ZWdlcnMgKGluIGRlY2ltYWwpIGFuZCBhbiBvcHRpb25hbCBzaWduLiAqLwotI2RlZmluZSBNQVhfTE9OR19DSEFSUyAyMQotLyogbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyByZXF1aXJlZCBmb3Igb3V0cHV0IG9mICVsbGQuCi0gICBXZSBuZWVkIGF0IG1vc3QgY2VpbChsb2cxMCgyNTYpKlNJWkVPRl9MT05HX0xPTkcpIGRpZ2l0cywKLSAgIHBsdXMgMSBmb3IgdGhlIHNpZ24uICA1My8yMiBpcyBhbiB1cHBlciBib3VuZCBmb3IgbG9nMTAoMjU2KS4gKi8KLSNkZWZpbmUgTUFYX0xPTkdfTE9OR19DSEFSUyAoMiArIChTSVpFT0ZfTE9OR19MT05HKjUzLTEpIC8gMjIpCi0KIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCiB7Ci0gICAgdmFfbGlzdCBjb3VudDsKLSAgICBQeV9zc2l6ZV90IGNhbGxjb3VudCA9IDA7Ci0gICAgUHlPYmplY3QgKipjYWxscmVzdWx0cyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKipjYWxscmVzdWx0ID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IG4gPSAwOwotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IHByZWNpc2lvbiA9IDA7Ci0gICAgaW50IHplcm9wYWQ7Ci0gICAgY29uc3QgY2hhciogZjsKLSAgICBQeU9iamVjdCAqc3RyaW5nOwotICAgIC8qIHVzZWQgYnkgc3ByaW50ZiAqLwotICAgIGNoYXIgZm10WzYxXTsgLyogc2hvdWxkIGJlIGVub3VnaCBmb3IgJTB3aWR0aC5wcmVjaXNpb25sbGQgKi8KLSAgICBQeV9VQ1M0IG1heGNoYXIgPSAxMjc7IC8qIHJlc3VsdCBpcyBBU0NJSSBieSBkZWZhdWx0ICovCi0gICAgUHlfVUNTNCBhcmdtYXhjaGFyOwotICAgIFB5X3NzaXplX3QgbnVtYmVyc2l6ZSA9IDA7Ci0gICAgY2hhciAqbnVtYmVycmVzdWx0cyA9IE5VTEw7Ci0gICAgY2hhciAqbnVtYmVycmVzdWx0ID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgaW50IGtpbmQ7Ci0gICAgdm9pZCAqZGF0YTsKKyAgICB2YV9saXN0IHZhcmdzMjsKKyAgICBjb25zdCBjaGFyICpmOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCi0gICAgUHlfVkFfQ09QWShjb3VudCwgdmFyZ3MpOwotICAgIC8qIHN0ZXAgMTogY291bnQgdGhlIG51bWJlciBvZiAlUy8lUi8lQS8lcyBmb3JtYXQgc3BlY2lmaWNhdGlvbnMKLSAgICAgKiAod2UgY2FsbCBQeU9iamVjdF9TdHIoKS9QeU9iamVjdF9SZXByKCkvUHlPYmplY3RfQVNDSUkoKS8KLSAgICAgKiBQeVVuaWNvZGVfRGVjb2RlVVRGOCgpIGZvciB0aGVzZSBvYmplY3RzIG9uY2UgZHVyaW5nIHN0ZXAgMyBhbmQgcHV0IHRoZQotICAgICAqIHJlc3VsdCBpbiBhbiBhcnJheSkKLSAgICAgKiBhbHNvIGVzdGltYXRlIGEgdXBwZXIgYm91bmQgZm9yIGFsbCB0aGUgbnVtYmVyIGZvcm1hdHMgaW4gdGhlIHN0cmluZywKLSAgICAgKiBudW1iZXJzIHdpbGwgYmUgZm9ybWF0dGVkIGluIHN0ZXAgMyBhbmQgYmUga2VwdCBpbiBhICdcMCctc2VwYXJhdGVkCi0gICAgICogYnVmZmVyIGJlZm9yZSBwdXR0aW5nIGV2ZXJ5dGhpbmcgdG9nZXRoZXIuICovCi0gICAgZm9yIChmID0gZm9ybWF0OyAqZjsgZisrKSB7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc3RybGVuKGZvcm1hdCkgKyAxMDA7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisKKyAgICAvKiB2YV9saXN0IG1heSBiZSBhbiBhcnJheSAob2YgMSBpdGVtKSBvbiBzb21lIHBsYXRmb3JtcyAoZXg6IEFNRDY0KS4KKyAgICAgICBDb3B5IGl0IHRvIGJlIGFibGUgdG8gcGFzcyBhIHJlZmVyZW5jZSB0byBhIHN1YmZ1bmN0aW9uLiAqLworICAgIFB5X1ZBX0NPUFkodmFyZ3MyLCB2YXJncyk7CisKKyAgICBmb3IgKGYgPSBmb3JtYXQ7ICpmOyApIHsKICAgICAgICAgaWYgKCpmID09ICclJykgewotICAgICAgICAgICAgaW50IGxvbmdsb25nZmxhZzsKLSAgICAgICAgICAgIC8qIHNraXAgd2lkdGggb3Igd2lkdGgucHJlY2lzaW9uIChlZy4gIjEuMiIgb2YgIiUxLjJmIikgKi8KLSAgICAgICAgICAgIGYgPSBwYXJzZV9mb3JtYXRfZmxhZ3MoZiwgJndpZHRoLCBOVUxMLCBOVUxMLCAmbG9uZ2xvbmdmbGFnLCBOVUxMKTsKLSAgICAgICAgICAgIGlmICgqZiA9PSAncycgfHwgKmY9PSdTJyB8fCAqZj09J1InIHx8ICpmPT0nQScgfHwgKmY9PSdWJykKLSAgICAgICAgICAgICAgICArK2NhbGxjb3VudDsKLQotICAgICAgICAgICAgZWxzZSBpZiAoKmYgPT0gJ2QnIHx8ICpmPT0ndScgfHwgKmY9PSdpJyB8fCAqZj09J3gnIHx8ICpmPT0ncCcpIHsKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgICAgIGlmIChsb25nbG9uZ2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgTUFYX0xPTkdfTE9OR19DSEFSUykKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gTUFYX0xPTkdfTE9OR19DSEFSUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIC8qIE1BWF9MT05HX0NIQVJTIGlzIGVub3VnaCB0byBob2xkIGEgNjQtYml0IGludGVnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyBzaWduLiAgRGVjaW1hbCB0YWtlcyB0aGUgbW9zdCBzcGFjZS4gIFRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgaXNuJ3QgZW5vdWdoIGZvciBvY3RhbC4gIElmIGEgd2lkdGggaXMgc3BlY2lmaWVkIHdlCi0gICAgICAgICAgICAgICAgICAgICAgIG5lZWQgbW9yZSAod2hpY2ggd2UgYWxsb2NhdGUgbGF0ZXIpLiAqLwotICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPCBNQVhfTE9OR19DSEFSUykKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gTUFYX0xPTkdfQ0hBUlM7Ci0KLSAgICAgICAgICAgICAgICAvKiBhY2NvdW50IGZvciB0aGUgc2l6ZSArICdcMCcgdG8gc2VwYXJhdGUgbnVtYmVycwotICAgICAgICAgICAgICAgICAgIGluc2lkZSBvZiB0aGUgbnVtYmVycmVzdWx0cyBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICBudW1iZXJzaXplICs9ICh3aWR0aCArIDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCh1bnNpZ25lZCBjaGFyKSpmID4gMTI3KSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAiUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgZXhwZWN0cyBhbiBBU0NJSS1lbmNvZGVkIGZvcm1hdCAiCi0gICAgICAgICAgICAgICAgInN0cmluZywgZ290IGEgbm9uLUFTQ0lJIGJ5dGU6IDB4JTAyeCIsCi0gICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpKmYpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogc3RlcCAyOiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSByZXN1bHRzIG9mCi0gICAgICogUHlPYmplY3RfU3RyKCkvUHlPYmplY3RfUmVwcigpL1B5VW5pY29kZV9EZWNvZGVVVEY4KCkgY2FsbHMgKi8KLSAgICBpZiAoY2FsbGNvdW50KSB7Ci0gICAgICAgIGNhbGxyZXN1bHRzID0gUHlPYmplY3RfTWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGNhbGxjb3VudCk7Ci0gICAgICAgIGlmICghY2FsbHJlc3VsdHMpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBjYWxscmVzdWx0ID0gY2FsbHJlc3VsdHM7Ci0gICAgfQotICAgIC8qIHN0ZXAgMi41OiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSByZXN1bHRzIG9mIGZvcm1hdGluZyBudW1iZXJzICovCi0gICAgaWYgKG51bWJlcnNpemUpIHsKLSAgICAgICAgbnVtYmVycmVzdWx0cyA9IFB5T2JqZWN0X01hbGxvYyhudW1iZXJzaXplKTsKLSAgICAgICAgaWYgKCFudW1iZXJyZXN1bHRzKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0gICAgICAgIG51bWJlcnJlc3VsdCA9IG51bWJlcnJlc3VsdHM7Ci0gICAgfQotCi0gICAgLyogc3RlcCAzOiBmb3JtYXQgbnVtYmVycyBhbmQgZmlndXJlIG91dCBob3cgbGFyZ2UgYSBidWZmZXIgd2UgbmVlZCAqLwotICAgIGZvciAoZiA9IGZvcm1hdDsgKmY7IGYrKykgewotICAgICAgICBpZiAoKmYgPT0gJyUnKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBwOwotICAgICAgICAgICAgaW50IGxvbmdmbGFnOwotICAgICAgICAgICAgaW50IGxvbmdsb25nZmxhZzsKLSAgICAgICAgICAgIGludCBzaXplX3RmbGFnOwotICAgICAgICAgICAgaW50IG51bXByaW50ZWQ7Ci0KLSAgICAgICAgICAgIHAgPSBmOwotICAgICAgICAgICAgemVyb3BhZCA9IChmWzFdID09ICcwJyk7Ci0gICAgICAgICAgICBmID0gcGFyc2VfZm9ybWF0X2ZsYWdzKGYsICZ3aWR0aCwgJnByZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvbmdmbGFnLCAmbG9uZ2xvbmdmbGFnLCAmc2l6ZV90ZmxhZyk7Ci0gICAgICAgICAgICBzd2l0Y2ggKCpmKSB7Ci0gICAgICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgb3JkaW5hbCA9IHZhX2FyZyhjb3VudCwgaW50KTsKLSAgICAgICAgICAgICAgICBpZiAob3JkaW5hbCA8IDAgfHwgb3JkaW5hbCA+IE1BWF9VTklDT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVjIGFyZyBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCAoUHlfVUNTNClvcmRpbmFsKTsKLSAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICclJzoKLSAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCB6ZXJvcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIHByZWNpc2lvbiwgKmYpOwotICAgICAgICAgICAgICAgIGlmIChsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgbG9uZykpOwotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBQWV9MT05HX0xPTkcpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIFB5X3NzaXplX3QpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIGludCkpOwotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIGJ5ICsxIHRvIHNraXAgb3ZlciB0aGUgJ1wwJyAqLwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsIHplcm9wYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgcHJlY2lzaW9uLCAndScpOwotICAgICAgICAgICAgICAgIGlmIChsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgdW5zaWduZWQgbG9uZykpOwotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCB1bnNpZ25lZCBQWV9MT05HX0xPTkcpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIHNpemVfdCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgdW5zaWduZWQgaW50KSk7Ci0gICAgICAgICAgICAgICAgbiArPSBudW1wcmludGVkOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgbWFrZWZtdChmbXQsIDAsIDAsIDAsIHplcm9wYWQsIHdpZHRoLCBwcmVjaXNpb24sICd4Jyk7Ci0gICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsIHZhX2FyZyhjb3VudCwgaW50KSk7Ci0gICAgICAgICAgICAgICAgbiArPSBudW1wcmludGVkOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAncCc6Ci0gICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCAiJXAiLCB2YV9hcmcoY291bnQsIHZvaWQqKSk7Ci0gICAgICAgICAgICAgICAgLyogJXAgaXMgaWxsLWRlZmluZWQ6ICBlbnN1cmUgbGVhZGluZyAweC4gKi8KLSAgICAgICAgICAgICAgICBpZiAobnVtYmVycmVzdWx0WzFdID09ICdYJykKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0WzFdID0gJ3gnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG51bWJlcnJlc3VsdFsxXSAhPSAneCcpIHsKLSAgICAgICAgICAgICAgICAgICAgbWVtbW92ZShudW1iZXJyZXN1bHQgKyAyLCBudW1iZXJyZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKG51bWJlcnJlc3VsdCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0WzBdID0gJzAnOwotICAgICAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHRbMV0gPSAneCc7Ci0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgKz0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbiArPSBudW1wcmludGVkOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogVVRGLTggKi8KLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzID0gdmFfYXJnKGNvdW50LCBjb25zdCBjaGFyKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0ciA9IFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwocywgc3RybGVuKHMpLCAicmVwbGFjZSIsIE5VTEwpOwotICAgICAgICAgICAgICAgIGlmICghc3RyKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgLyogc2luY2UgUHlVbmljb2RlX0RlY29kZVVURjggcmV0dXJucyBhbHJlYWR5IGZsZXhpYmxlCi0gICAgICAgICAgICAgICAgICAgdW5pY29kZSBvYmplY3RzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgcmVhZHkgb24gdGhlbSAqLwotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgc3RyIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBzdHI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdVJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqICYmIF9QeVVuaWNvZGVfQ0hFQ0sob2JqKSk7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvYmopID09IC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShvYmopOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnVic6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyID0gdmFfYXJnKGNvdW50LCBjb25zdCBjaGFyICopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHJfb2JqOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmogfHwgc3RyKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoIW9iaiB8fCBfUHlVbmljb2RlX0NIRUNLKG9iaikpOwotICAgICAgICAgICAgICAgIGlmIChvYmopIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvYmopID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKG9iaik7Ci0gICAgICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKTsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHJfb2JqID0gUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChzdHIsIHN0cmxlbihzdHIpLCAicmVwbGFjZSIsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cl9vYmopCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyX29iaikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHJfb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cl9vYmopOwotICAgICAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cl9vYmopOwotICAgICAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gc3RyX29iajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdTJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RyOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmopOwotICAgICAgICAgICAgICAgIHN0ciA9IFB5T2JqZWN0X1N0cihvYmopOwotICAgICAgICAgICAgICAgIGlmICghc3RyKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgc3RyIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBzdHI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdSJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmVwcjsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqKTsKLSAgICAgICAgICAgICAgICByZXByID0gUHlPYmplY3RfUmVwcihvYmopOwotICAgICAgICAgICAgICAgIGlmICghcmVwcikKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwcikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcHIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUocmVwcik7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcHIpOwotICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSByZXByIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSByZXByOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnQSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKmFzY2lpOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmopOwotICAgICAgICAgICAgICAgIGFzY2lpID0gUHlPYmplY3RfQVNDSUkob2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoIWFzY2lpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShhc2NpaSkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFzY2lpKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKGFzY2lpKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgoYXNjaWkpOwotICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSByZXByIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBhc2NpaTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgLyogaWYgd2Ugc3R1bWJsZSB1cG9uIGFuIHVua25vd24KLSAgICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nIGNvZGUsIGNvcHkgdGhlIHJlc3Qgb2YKLSAgICAgICAgICAgICAgICAgICB0aGUgZm9ybWF0IHN0cmluZyB0byB0aGUgb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgc3RyaW5nLiAod2UgY2Fubm90IGp1c3Qgc2tpcCB0aGUKLSAgICAgICAgICAgICAgICAgICBjb2RlLCBzaW5jZSB0aGVyZSdzIG5vIHdheSB0byBrbm93Ci0gICAgICAgICAgICAgICAgICAgd2hhdCdzIGluIHRoZSBhcmd1bWVudCBsaXN0KSAqLwotICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHApOwotICAgICAgICAgICAgICAgIGdvdG8gZXhwYW5kOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG4rKzsKLSAgICB9Ci0gIGV4cGFuZDoKLSAgICAvKiBzdGVwIDQ6IGZpbGwgdGhlIGJ1ZmZlciAqLwotICAgIC8qIFNpbmNlIHdlJ3ZlIGFuYWx5emVkIGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQsCi0gICAgICAgd2UgZG9uJ3QgaGF2ZSB0byByZXNpemUgdGhlIHN0cmluZy4KLSAgICAgICBUaGVyZSBjYW4gYmUgbm8gZXJyb3JzIGJleW9uZCB0aGlzIHBvaW50LiAqLwotICAgIHN0cmluZyA9IFB5VW5pY29kZV9OZXcobiwgbWF4Y2hhcik7Ci0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKTsKLSAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc3RyaW5nKTsKLSAgICBjYWxscmVzdWx0ID0gY2FsbHJlc3VsdHM7Ci0gICAgbnVtYmVycmVzdWx0ID0gbnVtYmVycmVzdWx0czsKLQotICAgIGZvciAoaSA9IDAsIGYgPSBmb3JtYXQ7ICpmOyBmKyspIHsKLSAgICAgICAgaWYgKCpmID09ICclJykgewotICAgICAgICAgICAgY29uc3QgY2hhciogcDsKLQotICAgICAgICAgICAgcCA9IGY7Ci0gICAgICAgICAgICBmID0gcGFyc2VfZm9ybWF0X2ZsYWdzKGYsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgICAgICAgICAgLyogY2hlY2tpbmcgZm9yID09IGJlY2F1c2UgdGhlIGxhc3QgYXJndW1lbnQgY291bGQgYmUgYSBlbXB0eQotICAgICAgICAgICAgICAgc3RyaW5nLCB3aGljaCBjYXVzZXMgaSB0byBwb2ludCB0byBlbmQsIHRoZSBhc3NlcnQgYXQgdGhlIGVuZCBvZgotICAgICAgICAgICAgICAgdGhlIGxvb3AgKi8KLSAgICAgICAgICAgIGFzc2VydChpIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKCpmKSB7Ci0gICAgICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgb3JkaW5hbCA9IHZhX2FyZyh2YXJncywgaW50KTsKLSAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgaSsrLCBvcmRpbmFsKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ2knOgotICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgY2FzZSAncCc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgICAgICAgICAgICAgLyogdW51c2VkLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgIGlmICgqZiA9PSAncCcpCi0gICAgICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcodmFyZ3MsIHZvaWQgKik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCBpbnQpOwotICAgICAgICAgICAgICAgIC8qIGV4dHJhY3QgdGhlIHJlc3VsdCBmcm9tIG51bWJlcnJlc3VsdHMgYW5kIGFwcGVuZC4gKi8KLSAgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4obnVtYmVycmVzdWx0KTsKLSAgICAgICAgICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIoc3RyaW5nLCBpLCBudW1iZXJyZXN1bHQsIGxlbik7Ci0gICAgICAgICAgICAgICAgLyogc2tpcCBvdmVyIHRoZSBzZXBhcmF0aW5nICdcMCcgKi8KLSAgICAgICAgICAgICAgICBpICs9IGxlbjsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gbGVuOwotICAgICAgICAgICAgICAgIGFzc2VydCgqbnVtYmVycmVzdWx0ID09ICdcMCcpOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCsrOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogdW51c2VkLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCBjaGFyICopOwotICAgICAgICAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKCpjYWxscmVzdWx0KSA8PSBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksICpjYWxscmVzdWx0LCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgLyogV2UncmUgZG9uZSB3aXRoIHRoZSB1bmljb2RlKCkvcmVwcigpID0+IGZvcmdldCBpdCAqLwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRigqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgLyogc3dpdGNoIHRvIG5leHQgdW5pY29kZSgpL3JlcHIoKSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICArK2NhbGxyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdVJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKHZhcmdzLCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKG9iaikgPD0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG9iaik7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCBvYmosIDAsIHNpemUpOwotICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1YnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKHZhcmdzLCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICB2YV9hcmcodmFyZ3MsIGNvbnN0IGNoYXIgKik7Ci0gICAgICAgICAgICAgICAgaWYgKG9iaikgewotICAgICAgICAgICAgICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKG9iaikgPD0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgb2JqLCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORCgqY2FsbHJlc3VsdCkgPD0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksICpjYWxscmVzdWx0LCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK2NhbGxyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdTJzoKLSAgICAgICAgICAgIGNhc2UgJ1InOgotICAgICAgICAgICAgY2FzZSAnQSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIC8qIHVudXNlZCwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoKmNhbGxyZXN1bHQpIDw9IFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgKmNhbGxyZXN1bHQsIDAsICBzaXplKTsKLSAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgLyogV2UncmUgZG9uZSB3aXRoIHRoZSB1bmljb2RlKCkvcmVwcigpID0+IGZvcmdldCBpdCAqLwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRigqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgLyogc3dpdGNoIHRvIG5leHQgdW5pY29kZSgpL3JlcHIoKSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICArK2NhbGxyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICclJzoKLSAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgaSsrLCAnJScpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IHN0cmxlbihwKTsKLSAgICAgICAgICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIoc3RyaW5nLCBpLCBwLCBsZW4pOwotICAgICAgICAgICAgICAgIGkgKz0gbGVuOwotICAgICAgICAgICAgICAgIGFzc2VydChpID09IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOwotICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgZiA9IHVuaWNvZGVfZnJvbWZvcm1hdF9hcmcoJndyaXRlciwgZiwgJnZhcmdzMik7CisgICAgICAgICAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFzc2VydChpIDwgUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKSk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgaSsrLCAqZik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0KGkgPT0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKSk7CisgICAgICAgICAgICBjb25zdCBjaGFyICpwOworICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47CiAKLSAgZW5kOgotICAgIGlmIChjYWxscmVzdWx0cykKLSAgICAgICAgUHlPYmplY3RfRnJlZShjYWxscmVzdWx0cyk7Ci0gICAgaWYgKG51bWJlcnJlc3VsdHMpCi0gICAgICAgIFB5T2JqZWN0X0ZyZWUobnVtYmVycmVzdWx0cyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHN0cmluZyk7Ci0gIGZhaWw6Ci0gICAgaWYgKGNhbGxyZXN1bHRzKSB7Ci0gICAgICAgIFB5T2JqZWN0ICoqY2FsbHJlc3VsdDIgPSBjYWxscmVzdWx0czsKLSAgICAgICAgd2hpbGUgKGNhbGxyZXN1bHQyIDwgY2FsbHJlc3VsdCkgewotICAgICAgICAgICAgUHlfWERFQ1JFRigqY2FsbHJlc3VsdDIpOwotICAgICAgICAgICAgKytjYWxscmVzdWx0MjsKKyAgICAgICAgICAgIHAgPSBmOworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGNoYXIpKnAgPiAxMjcpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgZXhwZWN0cyBhbiBBU0NJSS1lbmNvZGVkIGZvcm1hdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nLCBnb3QgYSBub24tQVNDSUkgYnl0ZTogMHglMDJ4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKSpwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgqcCAhPSAnXDAnICYmICpwICE9ICclJyk7CisgICAgICAgICAgICBsZW4gPSBwIC0gZjsKKworICAgICAgICAgICAgaWYgKCpwID09ICdcMCcpCisgICAgICAgICAgICAgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgZiwgbGVuKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgICAgICBmID0gcDsKICAgICAgICAgfQotICAgICAgICBQeU9iamVjdF9GcmVlKGNhbGxyZXN1bHRzKTsKICAgICB9Ci0gICAgaWYgKG51bWJlcnJlc3VsdHMpCi0gICAgICAgIFB5T2JqZWN0X0ZyZWUobnVtYmVycmVzdWx0cyk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOworCisgIGZhaWw6CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yOTY2LDI2ICsyODc1LDE3IEBACiBQeU9iamVjdCAqCiBQeVVuaWNvZGVfRnJvbU9yZGluYWwoaW50IG9yZGluYWwpCiB7Ci0gICAgUHlPYmplY3QgKnY7CiAgICAgaWYgKG9yZGluYWwgPCAwIHx8IG9yZGluYWwgPiBNQVhfVU5JQ09ERSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjaHIoKSBhcmcgbm90IGluIHJhbmdlKDB4MTEwMDAwKSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoKFB5X1VDUzQpb3JkaW5hbCA8IDI1NikKLSAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhcilvcmRpbmFsKTsKLQotICAgIHYgPSBQeVVuaWNvZGVfTmV3KDEsIG9yZGluYWwpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh2KSwgUHlVbmljb2RlX0RBVEEodiksIDAsIG9yZGluYWwpOwotICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kodiwgMSkpOwotICAgIHJldHVybiB2OworICAgIHJldHVybiB1bmljb2RlX2NoYXIoKFB5X1VDUzQpb3JkaW5hbCk7CiB9CiAKIFB5T2JqZWN0ICoKLVB5VW5pY29kZV9Gcm9tT2JqZWN0KHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmopCitQeVVuaWNvZGVfRnJvbU9iamVjdChQeU9iamVjdCAqb2JqKQogewogICAgIC8qIFhYWCBQZXJoYXBzIHdlIHNob3VsZCBtYWtlIHRoaXMgQVBJIGFuIGFsaWFzIG9mCiAgICAgICAgUHlPYmplY3RfU3RyKCkgaW5zdGVhZCA/ISAqLwpAQCAtMzAwNyw3ICsyOTA3LDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosCitQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QoUHlPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCiB7CkBAIC0zMDU5LDE0ICsyOTU5LDE3IEBACiAgICAxIG9uIHN1Y2Nlc3MuICovCiBpbnQKIF9QeV9ub3JtYWxpemVfZW5jb2RpbmcoY29uc3QgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgY2hhciAqbG93ZXIsCi0gICAgICAgICAgICAgICAgICAgc2l6ZV90IGxvd2VyX2xlbikKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb3dlcl9sZW4pCiB7CiAgICAgY29uc3QgY2hhciAqZTsKICAgICBjaGFyICpsOwogICAgIGNoYXIgKmxfZW5kOwogCiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgLyogNiA9PSBzdHJsZW4oInV0Zi04IikgKyAxICovCisgICAgICAgIGlmIChsb3dlcl9sZW4gPCA2KQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHN0cmNweShsb3dlciwgInV0Zi04Iik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KQEAgLTMxMDgsNyArMzAxMSw4IEBACiAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChzLCBzaXplLCBlcnJvcnMsIE5VTEwpOwogICAgICAgICBlbHNlIGlmICgoc3RyY21wKGxvd2VyLCAibGF0aW4tMSIpID09IDApIHx8CiAgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJsYXRpbjEiKSA9PSAwKSB8fAotICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvLTg4NTktMSIpID09IDApKQorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvLTg4NTktMSIpID09IDApIHx8CisgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc284ODU5LTEiKSA9PSAwKSkKICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKHMsIHNpemUsIGVycm9ycyk7CiAjaWZkZWYgSEFWRV9NQkNTCiAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChsb3dlciwgIm1iY3MiKSA9PSAwKQpAQCAtMzEyOSwxMyArMzAzMywxNSBAQAogICAgIGJ1ZmZlciA9IFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKCZpbmZvKTsKICAgICBpZiAoYnVmZmVyID09IE5VTEwpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICB1bmljb2RlID0gUHlDb2RlY19EZWNvZGUoYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzKTsKKyAgICB1bmljb2RlID0gX1B5Q29kZWNfRGVjb2RlVGV4dChidWZmZXIsIGVuY29kaW5nLCBlcnJvcnMpOwogICAgIGlmICh1bmljb2RlID09IE5VTEwpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh1bmljb2RlKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImRlY29kZXIgZGlkIG5vdCByZXR1cm4gYSBzdHIgb2JqZWN0ICh0eXBlPSUuNDAwcykiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh1bmljb2RlKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAiJyUuNDAwcycgZGVjb2RlciByZXR1cm5lZCAnJS40MDBzJyBpbnN0ZWFkIG9mICdzdHInOyAiCisgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5kZWNvZGUoKSB0byBkZWNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh1bmljb2RlKS0+dHBfbmFtZSwgUHlfVFlQRSh1bmljb2RlKS0+dHBfbmFtZSk7CiAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KQEAgLTMxOTMsOCArMzA5OSwxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJkZWNvZGVyIGRpZCBub3QgcmV0dXJuIGEgc3RyIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgIiclLjQwMHMnIGRlY29kZXIgcmV0dXJuZWQgJyUuNDAwcycgaW5zdGVhZCBvZiAnc3RyJzsgIgorICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlKCkgdG8gZGVjb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUsIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CkBAIC0zMzQyLDcgKzMyNTAsNyBAQAogICAgIH0KIAogICAgIGlmIChzdXJyb2dhdGVlc2NhcGUpIHsKLSAgICAgICAgLyogbG9jYWxlIGVuY29kaW5nIHdpdGggc3Vycm9nYXRlZXNjYXBlICovCisgICAgICAgIC8qICJzdXJyb2dhdGVlc2NhcGUiIGVycm9yIGhhbmRsZXIgKi8KICAgICAgICAgY2hhciAqc3RyOwogCiAgICAgICAgIHN0ciA9IF9QeV93Y2hhcjJjaGFyKHdzdHIsICZlcnJvcl9wb3MpOwpAQCAtMzM2Miw2ICszMjcwLDcgQEAKICAgICAgICAgUHlNZW1fRnJlZShzdHIpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgLyogc3RyaWN0IG1vZGUgKi8KICAgICAgICAgc2l6ZV90IGxlbiwgbGVuMjsKIAogICAgICAgICBsZW4gPSB3Y3N0b21icyhOVUxMLCB3c3RyLCAwKTsKQEAgLTM0MDAsNyArMzMwOSw3IEBACiAgICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihlcnJtc2csICZlcnJsZW4pOwogICAgICAgICBpZiAod3N0ciAhPSBOVUxMKSB7CiAgICAgICAgICAgICByZWFzb24gPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdzdHIsIGVycmxlbik7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHdzdHIpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh3c3RyKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBlcnJtc2cgPSBOVUxMOwogICAgIH0KQEAgLTM0NzgsNyArMzM4Nyw4IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoKHN0cmNtcChsb3dlciwgImxhdGluLTEiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAibGF0aW4xIikgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvODg1OS0xIikgPT0gMCkpCiAgICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Bc0xhdGluMVN0cmluZyh1bmljb2RlLCBlcnJvcnMpOwogI2lmZGVmIEhBVkVfTUJDUwogICAgICAgICBlbHNlIGlmIChzdHJjbXAobG93ZXIsICJtYmNzIikgPT0gMCkKQEAgLTM0ODksNyArMzM5OSw3IEBACiAgICAgfQogCiAgICAgLyogRW5jb2RlIHZpYSB0aGUgY29kZWMgcmVnaXN0cnkgKi8KLSAgICB2ID0gUHlDb2RlY19FbmNvZGUodW5pY29kZSwgZW5jb2RpbmcsIGVycm9ycyk7CisgICAgdiA9IF9QeUNvZGVjX0VuY29kZVRleHQodW5pY29kZSwgZW5jb2RpbmcsIGVycm9ycyk7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM1MDMsNyArMzQxMyw4IEBACiAgICAgICAgIFB5T2JqZWN0ICpiOwogCiAgICAgICAgIGVycm9yID0gUHlFcnJfV2FybkZvcm1hdChQeUV4Y19SdW50aW1lV2FybmluZywgMSwKLSAgICAgICAgICAgICJlbmNvZGVyICVzIHJldHVybmVkIGJ5dGVhcnJheSBpbnN0ZWFkIG9mIGJ5dGVzIiwKKyAgICAgICAgICAgICJlbmNvZGVyICVzIHJldHVybmVkIGJ5dGVhcnJheSBpbnN0ZWFkIG9mIGJ5dGVzOyAiCisgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGUoKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKICAgICAgICAgICAgIGVuY29kaW5nKTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CkBAIC0zNTE2LDggKzM0MjcsMTAgQEAKICAgICB9CiAKICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAiZW5jb2RlciBkaWQgbm90IHJldHVybiBhIGJ5dGVzIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICInJS40MDBzJyBlbmNvZGVyIHJldHVybmVkICclLjQwMHMnIGluc3RlYWQgb2YgJ2J5dGVzJzsgIgorICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGUoKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKKyAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUsIFB5X1RZUEUodiktPnRwX25hbWUpOwogICAgIFB5X0RFQ1JFRih2KTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTM1NDMsOCArMzQ1NiwxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJlbmNvZGVyIGRpZCBub3QgcmV0dXJuIGFuIHN0ciBvYmplY3QgKHR5cGU9JS40MDBzKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICInJS40MDBzJyBlbmNvZGVyIHJldHVybmVkICclLjQwMHMnIGluc3RlYWQgb2YgJ3N0cic7ICIKKyAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZSgpIHRvIGVuY29kZSB0byBhcmJpdHJhcnkgdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQpAQCAtMzYwNyw4ICszNTIyLDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKHN1cnJvZ2F0ZWVzY2FwZSkKLSAgICB7CisgICAgaWYgKHN1cnJvZ2F0ZWVzY2FwZSkgeworICAgICAgICAvKiAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyICovCiAgICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihzdHIsICZ3bGVuKTsKICAgICAgICAgaWYgKHdzdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKHdsZW4gPT0gKHNpemVfdCktMSkKQEAgLTM2MTksOSArMzUzNCwxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgdW5pY29kZSA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod3N0ciwgd2xlbik7Ci0gICAgICAgIFB5TWVtX0ZyZWUod3N0cik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICAvKiBzdHJpY3QgbW9kZSAqLwogI2lmbmRlZiBIQVZFX0JST0tFTl9NQlNUT1dDUwogICAgICAgICB3bGVuID0gbWJzdG93Y3MoTlVMTCwgc3RyLCAwKTsKICNlbHNlCkBAIC0zNjQxLDcgKzM1NTcsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICB9CiAKLSAgICAgICAgLyogVGhpcyBzaG91bGRuJ3QgZmFpbCBub3cgKi8KICAgICAgICAgd2xlbjIgPSBtYnN0b3djcyh3c3RyLCBzdHIsIHdsZW4rMSk7CiAgICAgICAgIGlmICh3bGVuMiA9PSAoc2l6ZV90KS0xKSB7CiAgICAgICAgICAgICBpZiAod3N0ciAhPSBzbWFsbGJ1ZikKQEAgLTM2NjcsNyArMzU4Miw3IEBACiAgICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihlcnJtc2csICZlcnJsZW4pOwogICAgICAgICBpZiAod3N0ciAhPSBOVUxMKSB7CiAgICAgICAgICAgICByZWFzb24gPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdzdHIsIGVycmxlbik7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHdzdHIpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh3c3RyKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBlcnJtc2cgPSBOVUxMOwogICAgIH0KQEAgLTM3MzUsMTggKzM2NTAsMjAgQEAKIAogCiBpbnQKLV9QeVVuaWNvZGVfSGFzTlVMQ2hhcnMoUHlPYmplY3QqIHMpCitfUHlVbmljb2RlX0hhc05VTENoYXJzKFB5T2JqZWN0KiBzdHIpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpudWwgPSBOVUxMOworICAgIFB5X3NzaXplX3QgcG9zOwogCi0gICAgaWYgKG51bCA9PSBOVUxMKQotICAgICAgICBudWwgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlwwIiwgMSk7Ci0gICAgaWYgKG51bCA9PSBOVUxMKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBQeVVuaWNvZGVfQ29udGFpbnMocywgbnVsKTsKKyAgICBwb3MgPSBmaW5kY2hhcihQeVVuaWNvZGVfREFUQShzdHIpLCBQeVVuaWNvZGVfS0lORChzdHIpLAorICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0ciksICdcMCcsIDEpOworICAgIGlmIChwb3MgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7CiB9CiAKLQogaW50CiBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoUHlPYmplY3QqIGFyZywgdm9pZCogYWRkcikKIHsKQEAgLTM4NTAsNiArMzc2Nyw3IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpID0gUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNfR0VUX1NJWkUoYnl0ZXMpICsgMSk7CiAgICAgICAgIGlmIChfUHlVbmljb2RlX1VURjgodW5pY29kZSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtNDAxOCw2ICszOTM2LDkgQEAKIFB5X1VDUzQKIFB5VW5pY29kZV9SZWFkQ2hhcihQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCBpbmRleCkKIHsKKyAgICB2b2lkICpkYXRhOworICAgIGludCBraW5kOworCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodW5pY29kZSkgfHwgUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKSB7CiAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CiAgICAgICAgIHJldHVybiAoUHlfVUNTNCktMTsKQEAgLTQwMjYsNyArMzk0Nyw5IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAic3RyaW5nIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gKFB5X1VDUzQpLTE7CiAgICAgfQotICAgIHJldHVybiBQeVVuaWNvZGVfUkVBRF9DSEFSKHVuaWNvZGUsIGluZGV4KTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOworICAgIHJldHVybiBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpbmRleCk7CiB9CiAKIGludApAQCAtNDA4NCw2ICs0MDA3LDcgQEAKICAgICBQeV9DTEVBUigqZXhjZXB0aW9uT2JqZWN0KTsKIH0KIAorI2lmZGVmIEhBVkVfTUJDUwogLyogZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgaGVscGVyOgogICAgYnVpbGQgYXJndW1lbnRzLCBjYWxsIHRoZSBjYWxsYmFjayBhbmQgY2hlY2sgdGhlIGFyZ3VtZW50cywKICAgIGlmIG5vIGV4Y2VwdGlvbiBvY2N1cnJlZCwgY29weSB0aGUgcmVwbGFjZW1lbnQgdG8gdGhlIG91dHB1dApAQCAtNDA5MiwxMSArNDAxNiwxMiBAQAogKi8KIAogc3RhdGljIGludAotdW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoY29uc3QgY2hhciAqZXJyb3JzLCBQeU9iamVjdCAqKmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICpyZWFzb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqaW5wdXQsIGNvbnN0IGNoYXIgKippbmVuZCwgUHlfc3NpemVfdCAqc3RhcnRpbnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmVuZGlucG9zLCBQeU9iamVjdCAqKmV4Y2VwdGlvbk9iamVjdCwgY29uc3QgY2hhciAqKmlucHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipvdXRwdXQsIFB5X3NzaXplX3QgKm91dHBvcykKK3VuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3djaGFyKAorICAgIGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKiplcnJvckhhbmRsZXIsCisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKnJlYXNvbiwKKyAgICBjb25zdCBjaGFyICoqaW5wdXQsIGNvbnN0IGNoYXIgKippbmVuZCwgUHlfc3NpemVfdCAqc3RhcnRpbnBvcywKKyAgICBQeV9zc2l6ZV90ICplbmRpbnBvcywgUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsIGNvbnN0IGNoYXIgKippbnB0ciwKKyAgICBQeU9iamVjdCAqKm91dHB1dCwgUHlfc3NpemVfdCAqb3V0cG9zKQogewogICAgIHN0YXRpYyBjaGFyICphcmdwYXJzZSA9ICJPIW47ZGVjb2RpbmcgZXJyb3IgaGFuZGxlciBtdXN0IHJldHVybiAoc3RyLCBpbnQpIHR1cGxlIjsKIApAQCAtNDEwNywxMiArNDAzMiwxMSBAQAogICAgIFB5X3NzaXplX3QgcmVxdWlyZWRzaXplOwogICAgIFB5X3NzaXplX3QgbmV3cG9zOwogICAgIFB5T2JqZWN0ICppbnB1dG9iaiA9IE5VTEw7Ci0gICAgaW50IHJlcyA9IC0xOworICAgIHdjaGFyX3QgKnJlcHdzdHI7CisgICAgUHlfc3NpemVfdCByZXB3bGVuOwogCi0gICAgaWYgKF9QeVVuaWNvZGVfS0lORCgqb3V0cHV0KSAhPSBQeVVuaWNvZGVfV0NIQVJfS0lORCkKLSAgICAgICAgb3V0c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpvdXRwdXQpOwotICAgIGVsc2UKLSAgICAgICAgb3V0c2l6ZSA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgoKm91dHB1dCk7CisgICAgYXNzZXJ0IChfUHlVbmljb2RlX0tJTkQoKm91dHB1dCkgPT0gUHlVbmljb2RlX1dDSEFSX0tJTkQpOworICAgIG91dHNpemUgPSBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKCpvdXRwdXQpOwogCiAgICAgaWYgKCplcnJvckhhbmRsZXIgPT0gTlVMTCkgewogICAgICAgICAqZXJyb3JIYW5kbGVyID0gUHlDb2RlY19Mb29rdXBFcnJvcihlcnJvcnMpOwpAQCAtNDEzNyw3ICs0MDYxLDk4IEBACiAgICAgfQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShyZXN0dXBsZSwgYXJncGFyc2UsICZQeVVuaWNvZGVfVHlwZSwgJnJlcHVuaWNvZGUsICZuZXdwb3MpKQogICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXB1bmljb2RlKSA9PSAtMSkKKworICAgIC8qIENvcHkgYmFjayB0aGUgYnl0ZXMgdmFyaWFibGVzLCB3aGljaCBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQgYnkgdGhlCisgICAgICAgY2FsbGJhY2sgKi8KKyAgICBpbnB1dG9iaiA9IFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdCgqZXhjZXB0aW9uT2JqZWN0KTsKKyAgICBpZiAoIWlucHV0b2JqKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGlucHV0b2JqKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiZXhjZXB0aW9uIGF0dHJpYnV0ZSBvYmplY3QgbXVzdCBiZSBieXRlcyIpOworICAgIH0KKyAgICAqaW5wdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhpbnB1dG9iaik7CisgICAgaW5zaXplID0gUHlCeXRlc19HRVRfU0laRShpbnB1dG9iaik7CisgICAgKmluZW5kID0gKmlucHV0ICsgaW5zaXplOworICAgIC8qIHdlIGNhbiBERUNSRUYgc2FmZWx5LCBhcyB0aGUgZXhjZXB0aW9uIGhhcyBhbm90aGVyIHJlZmVyZW5jZSwKKyAgICAgICBzbyB0aGUgb2JqZWN0IHdvbid0IGdvIGF3YXkuICovCisgICAgUHlfREVDUkVGKGlucHV0b2JqKTsKKworICAgIGlmIChuZXdwb3M8MCkKKyAgICAgICAgbmV3cG9zID0gaW5zaXplK25ld3BvczsKKyAgICBpZiAobmV3cG9zPDAgfHwgbmV3cG9zPmluc2l6ZSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW5kZXhFcnJvciwgInBvc2l0aW9uICV6ZCBmcm9tIGVycm9yIGhhbmRsZXIgb3V0IG9mIGJvdW5kcyIsIG5ld3Bvcyk7CisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisKKyAgICByZXB3c3RyID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUocmVwdW5pY29kZSwgJnJlcHdsZW4pOworICAgIGlmIChyZXB3c3RyID09IE5VTEwpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAvKiBuZWVkIG1vcmUgc3BhY2U/IChhdCBsZWFzdCBlbm91Z2ggZm9yIHdoYXQgd2UKKyAgICAgICBoYXZlK3RoZSByZXBsYWNlbWVudCt0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIChzdGFydGluZworICAgICAgIGF0IHRoZSBuZXcgaW5wdXQgcG9zaXRpb24pLCBzbyB3ZSB3b24ndCBoYXZlIHRvIGNoZWNrIHNwYWNlCisgICAgICAgd2hlbiB0aGVyZSBhcmUgbm8gZXJyb3JzIGluIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcpICovCisgICAgcmVxdWlyZWRzaXplID0gKm91dHBvcyArIHJlcHdsZW4gKyBpbnNpemUtbmV3cG9zOworICAgIGlmIChyZXF1aXJlZHNpemUgPiBvdXRzaXplKSB7CisgICAgICAgIGlmIChyZXF1aXJlZHNpemUgPCAyKm91dHNpemUpCisgICAgICAgICAgICByZXF1aXJlZHNpemUgPSAyKm91dHNpemU7CisgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShvdXRwdXQsIHJlcXVpcmVkc2l6ZSkgPCAwKQorICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKyAgICB3Y3NuY3B5KF9QeVVuaWNvZGVfV1NUUigqb3V0cHV0KSArICpvdXRwb3MsIHJlcHdzdHIsIHJlcHdsZW4pOworICAgICpvdXRwb3MgKz0gcmVwd2xlbjsKKworICAgICplbmRpbnBvcyA9IG5ld3BvczsKKyAgICAqaW5wdHIgPSAqaW5wdXQgKyBuZXdwb3M7CisKKyAgICAvKiB3ZSBtYWRlIGl0ISAqLworICAgIFB5X1hERUNSRUYocmVzdHVwbGUpOworICAgIHJldHVybiAwOworCisgIG9uRXJyb3I6CisgICAgUHlfWERFQ1JFRihyZXN0dXBsZSk7CisgICAgcmV0dXJuIC0xOworfQorI2VuZGlmICAgLyogSEFWRV9NQkNTICovCisKK3N0YXRpYyBpbnQKK3VuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKKyAgICBjb25zdCBjaGFyICplcnJvcnMsIFB5T2JqZWN0ICoqZXJyb3JIYW5kbGVyLAorICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICpyZWFzb24sCisgICAgY29uc3QgY2hhciAqKmlucHV0LCBjb25zdCBjaGFyICoqaW5lbmQsIFB5X3NzaXplX3QgKnN0YXJ0aW5wb3MsCisgICAgUHlfc3NpemVfdCAqZW5kaW5wb3MsIFB5T2JqZWN0ICoqZXhjZXB0aW9uT2JqZWN0LCBjb25zdCBjaGFyICoqaW5wdHIsCisgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyIC8qIFB5T2JqZWN0ICoqb3V0cHV0LCBQeV9zc2l6ZV90ICpvdXRwb3MgKi8pCit7CisgICAgc3RhdGljIGNoYXIgKmFyZ3BhcnNlID0gIk8hbjtkZWNvZGluZyBlcnJvciBoYW5kbGVyIG11c3QgcmV0dXJuIChzdHIsIGludCkgdHVwbGUiOworCisgICAgUHlPYmplY3QgKnJlc3R1cGxlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVwdW5pY29kZSA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBpbnNpemU7CisgICAgUHlfc3NpemVfdCBuZXdwb3M7CisgICAgUHlfc3NpemVfdCByZXBsZW47CisgICAgUHlPYmplY3QgKmlucHV0b2JqID0gTlVMTDsKKworICAgIGlmICgqZXJyb3JIYW5kbGVyID09IE5VTEwpIHsKKyAgICAgICAgKmVycm9ySGFuZGxlciA9IFB5Q29kZWNfTG9va3VwRXJyb3IoZXJyb3JzKTsKKyAgICAgICAgaWYgKCplcnJvckhhbmRsZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisKKyAgICBtYWtlX2RlY29kZV9leGNlcHRpb24oZXhjZXB0aW9uT2JqZWN0LAorICAgICAgICBlbmNvZGluZywKKyAgICAgICAgKmlucHV0LCAqaW5lbmQgLSAqaW5wdXQsCisgICAgICAgICpzdGFydGlucG9zLCAqZW5kaW5wb3MsCisgICAgICAgIHJlYXNvbik7CisgICAgaWYgKCpleGNlcHRpb25PYmplY3QgPT0gTlVMTCkKKyAgICAgICAgZ290byBvbkVycm9yOworCisgICAgcmVzdHVwbGUgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKCplcnJvckhhbmRsZXIsICpleGNlcHRpb25PYmplY3QsIE5VTEwpOworICAgIGlmIChyZXN0dXBsZSA9PSBOVUxMKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgaWYgKCFQeVR1cGxlX0NoZWNrKHJlc3R1cGxlKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAmYXJncGFyc2VbNF0pOworICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShyZXN0dXBsZSwgYXJncGFyc2UsICZQeVVuaWNvZGVfVHlwZSwgJnJlcHVuaWNvZGUsICZuZXdwb3MpKQogICAgICAgICBnb3RvIG9uRXJyb3I7CiAKICAgICAvKiBDb3B5IGJhY2sgdGhlIGJ5dGVzIHZhcmlhYmxlcywgd2hpY2ggbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHRoZQpAQCAtNDE2Miw1NCArNDE3NywyNSBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCi0gICAgaWYgKF9QeVVuaWNvZGVfS0lORCgqb3V0cHV0KSAhPSBQeVVuaWNvZGVfV0NIQVJfS0lORCkgewotICAgICAgICAvKiBuZWVkIG1vcmUgc3BhY2U/IChhdCBsZWFzdCBlbm91Z2ggZm9yIHdoYXQgd2UKLSAgICAgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAoc3RhcnRpbmcKLSAgICAgICAgICAgYXQgdGhlIG5ldyBpbnB1dCBwb3NpdGlvbiksIHNvIHdlIHdvbid0IGhhdmUgdG8gY2hlY2sgc3BhY2UKLSAgICAgICAgICAgd2hlbiB0aGVyZSBhcmUgbm8gZXJyb3JzIGluIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcpICovCi0gICAgICAgIFB5X3NzaXplX3QgcmVwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVwdW5pY29kZSk7Ci0gICAgICAgIHJlcXVpcmVkc2l6ZSA9ICpvdXRwb3MgKyByZXBsZW4gKyBpbnNpemUtbmV3cG9zOwotICAgICAgICBpZiAocmVxdWlyZWRzaXplID4gb3V0c2l6ZSkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZTwyKm91dHNpemUpCi0gICAgICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKG91dHB1dCwgcmVxdWlyZWRzaXplKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICB9Ci0gICAgICAgIGlmICh1bmljb2RlX3dpZGVuKG91dHB1dCwgKm91dHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHJlcHVuaWNvZGUpKSA8IDApCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKCpvdXRwdXQsICpvdXRwb3MsIHJlcHVuaWNvZGUsIDAsIHJlcGxlbik7Ci0gICAgICAgICpvdXRwb3MgKz0gcmVwbGVuOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgd2NoYXJfdCAqcmVwd3N0cjsKLSAgICAgICAgUHlfc3NpemVfdCByZXB3bGVuOwotICAgICAgICByZXB3c3RyID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUocmVwdW5pY29kZSwgJnJlcHdsZW4pOwotICAgICAgICBpZiAocmVwd3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAvKiBuZWVkIG1vcmUgc3BhY2U/IChhdCBsZWFzdCBlbm91Z2ggZm9yIHdoYXQgd2UKLSAgICAgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAoc3RhcnRpbmcKLSAgICAgICAgICAgYXQgdGhlIG5ldyBpbnB1dCBwb3NpdGlvbiksIHNvIHdlIHdvbid0IGhhdmUgdG8gY2hlY2sgc3BhY2UKLSAgICAgICAgICAgd2hlbiB0aGVyZSBhcmUgbm8gZXJyb3JzIGluIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcpICovCi0gICAgICAgIHJlcXVpcmVkc2l6ZSA9ICpvdXRwb3MgKyByZXB3bGVuICsgaW5zaXplLW5ld3BvczsKLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IG91dHNpemUpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlZHNpemUgPCAyKm91dHNpemUpCi0gICAgICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKG91dHB1dCwgcmVxdWlyZWRzaXplKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICB9Ci0gICAgICAgIHdjc25jcHkoX1B5VW5pY29kZV9XU1RSKCpvdXRwdXQpICsgKm91dHBvcywgcmVwd3N0ciwgcmVwd2xlbik7Ci0gICAgICAgICpvdXRwb3MgKz0gcmVwd2xlbjsKLSAgICB9CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXB1bmljb2RlKSA8IDApCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICByZXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXB1bmljb2RlKTsKKyAgICB3cml0ZXItPm1pbl9sZW5ndGggKz0gcmVwbGVuOworICAgIGlmIChyZXBsZW4gPiAxKQorICAgICAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCByZXB1bmljb2RlKSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOworCiAgICAgKmVuZGlucG9zID0gbmV3cG9zOwogICAgICppbnB0ciA9ICppbnB1dCArIG5ld3BvczsKIAogICAgIC8qIHdlIG1hZGUgaXQhICovCi0gICAgcmVzID0gMDsKKyAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKKyAgICByZXR1cm4gMDsKIAogICBvbkVycm9yOgogICAgIFB5X1hERUNSRUYocmVzdHVwbGUpOwotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJuIC0xOwogfQogCiAvKiAtLS0gVVRGLTcgQ29kZWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQzMTcsOSArNDMwMyw4IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKICAgICBjb25zdCBjaGFyICplOwotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9ICIiOwogICAgIGludCBpblNoaWZ0ID0gMDsKICAgICBQeV9zc2l6ZV90IHNoaWZ0T3V0U3RhcnQ7CkBAIC00MzI5LDE3ICs0MzE0LDE3IEBACiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAKLSAgICAvKiBTdGFydCBvZmYgYXNzdW1pbmcgaXQncyBhbGwgQVNDSUkuIFdpZGVuIGxhdGVyIGFzIG5lY2Vzc2FyeS4gKi8KLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHNpemUgPT0gMCkgewogICAgICAgICBpZiAoY29uc3VtZWQpCiAgICAgICAgICAgICAqY29uc3VtZWQgPSAwOwotICAgICAgICByZXR1cm4gdW5pY29kZTsKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAgICAgfQogCi0gICAgc2hpZnRPdXRTdGFydCA9IG91dHBvcyA9IDA7CisgICAgLyogU3RhcnQgb2ZmIGFzc3VtaW5nIGl0J3MgYWxsIEFTQ0lJLiBXaWRlbiBsYXRlciBhcyBuZWNlc3NhcnkuICovCisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKworICAgIHNoaWZ0T3V0U3RhcnQgPSAwOwogICAgIGUgPSBzICsgc2l6ZTsKIAogICAgIHdoaWxlIChzIDwgZSkgewpAQCAtNDM2MiwxMyArNDM0NywxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhwZWN0aW5nIGEgc2Vjb25kIHN1cnJvZ2F0ZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5X1VOSUNPREVfSVNfTE9XX1NVUlJPR0FURShvdXRDaCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoMiA9IFB5X1VOSUNPREVfSk9JTl9TVVJST0dBVEVTKHN1cnJvZ2F0ZSwgb3V0Q2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoMikgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaDIpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBzdXJyb2dhdGUpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgc3Vycm9nYXRlKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDM3OCw3ICs0MzYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IG91dENoOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgb3V0Q2gpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBvdXRDaCkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQzODcsNyArNDM3Miw3IEBACiAgICAgICAgICAgICAgICAgaW5TaGlmdCA9IDA7CiAgICAgICAgICAgICAgICAgcysrOwogICAgICAgICAgICAgICAgIGlmIChzdXJyb2dhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgc3Vycm9nYXRlKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBzdXJyb2dhdGUpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gMDsKICAgICAgICAgICAgICAgICB9CkBAIC00NDA4LDcgKzQzOTMsNyBAQAogICAgICAgICAgICAgICAgIGlmIChjaCAhPSAnLScpIHsKICAgICAgICAgICAgICAgICAgICAgLyogJy0nIGlzIGFic29yYmVkOyBvdGhlciB0ZXJtaW5hdGluZwogICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIGFyZSBwcmVzZXJ2ZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDQxOCwyMCArNDQwMywyMCBAQAogICAgICAgICAgICAgcysrOyAvKiBjb25zdW1lICcrJyAqLwogICAgICAgICAgICAgaWYgKHMgPCBlICYmICpzID09ICctJykgeyAvKiAnKy0nIGVuY29kZXMgJysnICovCiAgICAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsICcrJykgPCAwKQorICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCAnKycpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7IC8qIGJlZ2luIGJhc2U2NC1lbmNvZGVkIHNlY3Rpb24gKi8KICAgICAgICAgICAgICAgICBpblNoaWZ0ID0gMTsKLSAgICAgICAgICAgICAgICBzaGlmdE91dFN0YXJ0ID0gb3V0cG9zOworICAgICAgICAgICAgICAgIHNoaWZ0T3V0U3RhcnQgPSB3cml0ZXIucG9zOwogICAgICAgICAgICAgICAgIGJhc2U2NGJpdHMgPSAwOwogICAgICAgICAgICAgICAgIGJhc2U2NGJ1ZmZlciA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoREVDT0RFX0RJUkVDVChjaCkpIHsgLyogY2hhcmFjdGVyIGRlY29kZXMgYXMgaXRzZWxmICovCi0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKQEAgLTQ0NDIsMTEgKzQ0MjcsMTEgQEAKICAgICAgICAgY29udGludWU7CiB1dGY3RXJyb3I6CiAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgInV0ZjciLCBlcnJtc2csCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ1bmljb2RlLCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKQEAgLTQ0NTgsMTEgKzQ0NDMsMTEgQEAKICAgICAgICAgICAgICAgICAoYmFzZTY0Yml0cyA+PSA2KSB8fAogICAgICAgICAgICAgICAgIChiYXNlNjRiaXRzID4gMCAmJiBiYXNlNjRidWZmZXIgIT0gMCkpIHsKICAgICAgICAgICAgIGVuZGlucG9zID0gc2l6ZTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgInV0ZjciLCAidW50ZXJtaW5hdGVkIHNoaWZ0IHNlcXVlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGlmIChzIDwgZSkKICAgICAgICAgICAgICAgICBnb3RvIHJlc3RhcnQ7CkBAIC00NDczLDMyICs0NDU4LDI5IEBACiAgICAgaWYgKGNvbnN1bWVkKSB7CiAgICAgICAgIGlmIChpblNoaWZ0KSB7CiAgICAgICAgICAgICAqY29uc3VtZWQgPSBzdGFydGlucG9zOwotICAgICAgICAgICAgaWYgKG91dHBvcyAhPSBzaGlmdE91dFN0YXJ0ICYmCi0gICAgICAgICAgICAgICAgUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHVuaWNvZGUpID4gMTI3KSB7CisgICAgICAgICAgICBpZiAod3JpdGVyLnBvcyAhPSBzaGlmdE91dFN0YXJ0ICYmIHdyaXRlci5tYXhjaGFyID4gMTI3KSB7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tS2luZEFuZERhdGEoCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfS0lORCh1bmljb2RlKSwgUHlVbmljb2RlX0RBVEEodW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBzaGlmdE91dFN0YXJ0KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7Ci0gICAgICAgICAgICAgICAgdW5pY29kZSA9IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgc2hpZnRPdXRTdGFydCk7CisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dHBvcyA9IHNoaWZ0T3V0U3RhcnQ7IC8qIGJhY2sgb2ZmIG91dHB1dCAqLworICAgICAgICAgICAgd3JpdGVyLnBvcyA9IHNoaWZ0T3V0U3RhcnQ7IC8qIGJhY2sgb2ZmIG91dHB1dCAqLwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgKmNvbnN1bWVkID0gcy1zdGFydHM7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh1bmljb2RlKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQ1ODEsNyArNDU2Myw3IEBACiAKICAgICAgICAgICAgIC8qIGNvZGUgZmlyc3Qgc3Vycm9nYXRlICovCiAgICAgICAgICAgICBiYXNlNjRiaXRzICs9IDE2OwotICAgICAgICAgICAgYmFzZTY0YnVmZmVyID0gKGJhc2U2NGJ1ZmZlciA8PCAxNikgfCAweGQ4MDAgfCAoKGNoLTB4MTAwMDApID4+IDEwKTsKKyAgICAgICAgICAgIGJhc2U2NGJ1ZmZlciA9IChiYXNlNjRidWZmZXIgPDwgMTYpIHwgUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICB3aGlsZSAoYmFzZTY0Yml0cyA+PSA2KSB7CiAgICAgICAgICAgICAgICAgKm91dCsrID0gVE9fQkFTRTY0KGJhc2U2NGJ1ZmZlciA+PiAoYmFzZTY0Yml0cy02KSk7CiAgICAgICAgICAgICAgICAgYmFzZTY0Yml0cyAtPSA2OwpAQCAtNDY4Miw5ICs0NjY0LDkgQEAKICAgICBpZiAoX1B5X0lTX0FMSUdORUQocCwgU0laRU9GX0xPTkcpKSB7CiAgICAgICAgIC8qIEZhc3QgcGF0aCwgc2VlIGluIFNUUklOR0xJQih1dGY4X2RlY29kZSkgZm9yCiAgICAgICAgICAgIGFuIGV4cGxhbmF0aW9uLiAqLwotICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqX3AgPSBwOwotICAgICAgICByZWdpc3RlciBQeV9VQ1MxICogcSA9IGRlc3Q7CisgICAgICAgIC8qIEhlbHAgYWxsb2NhdGlvbiAqLworICAgICAgICBjb25zdCBjaGFyICpfcCA9IHA7CisgICAgICAgIFB5X1VDUzEgKiBxID0gZGVzdDsKICAgICAgICAgd2hpbGUgKF9wIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikgX3A7CiAgICAgICAgICAgICBpZiAodmFsdWUgJiBBU0NJSV9DSEFSX01BU0spCkBAIC00NzA3LDggKzQ2ODksOCBAQAogICAgICAgICAvKiBGYXN0IHBhdGgsIHNlZSBpbiBTVFJJTkdMSUIodXRmOF9kZWNvZGUpIGluIHN0cmluZ2xpYi9jb2RlY3MuaAogICAgICAgICAgICBmb3IgYW4gZXhwbGFuYXRpb24uICovCiAgICAgICAgIGlmIChfUHlfSVNfQUxJR05FRChwLCBTSVpFT0ZfTE9ORykpIHsKLSAgICAgICAgICAgIC8qIEhlbHAgcmVnaXN0ZXIgYWxsb2NhdGlvbiAqLwotICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqX3AgPSBwOworICAgICAgICAgICAgLyogSGVscCBhbGxvY2F0aW9uICovCisgICAgICAgICAgICBjb25zdCBjaGFyICpfcCA9IHA7CiAgICAgICAgICAgICB3aGlsZSAoX3AgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAqKHVuc2lnbmVkIGxvbmcgKikgX3A7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYgQVNDSUlfQ0hBUl9NQVNLKQpAQCAtNDczMywxMCArNDcxNSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqY29uc3VtZWQpCiB7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBjb25zdCBjaGFyICplbmQgPSBzICsgc2l6ZTsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKIAogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwpAQCAtNDc1NywyOSArNDczOCwyNiBAQAogICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKCh1bnNpZ25lZCBjaGFyKXNbMF0pOwogICAgIH0KIAotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KHNpemUsIDEyNyk7Ci0gICAgaWYgKCF1bmljb2RlKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKIAotICAgIG91dHBvcyA9IGFzY2lpX2RlY29kZShzLCBlbmQsIFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpKTsKLSAgICBzICs9IG91dHBvczsKKyAgICB3cml0ZXIucG9zID0gYXNjaWlfZGVjb2RlKHMsIGVuZCwgd3JpdGVyLmRhdGEpOworICAgIHMgKz0gd3JpdGVyLnBvczsKICAgICB3aGlsZSAocyA8IGVuZCkgewogICAgICAgICBQeV9VQ1M0IGNoOwotICAgICAgICBpbnQga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOworICAgICAgICBpbnQga2luZCA9IHdyaXRlci5raW5kOwogICAgICAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgewotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh1bmljb2RlKSkKLSAgICAgICAgICAgICAgICBjaCA9IGFzY2lpbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcyk7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHdyaXRlci5idWZmZXIpKQorICAgICAgICAgICAgICAgIGNoID0gYXNjaWlsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwgd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjaCA9IHVjczFsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgICAgICBjaCA9IHVjczFsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwgd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zKTsKICAgICAgICAgfSBlbHNlIGlmIChraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EKSB7Ci0gICAgICAgICAgICBjaCA9IHVjczJsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzJCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MpOworICAgICAgICAgICAgY2ggPSB1Y3MybGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhc3NlcnQoa2luZCA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCk7Ci0gICAgICAgICAgICBjaCA9IHVjczRsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzRCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MpOworICAgICAgICAgICAgY2ggPSB1Y3M0bGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKGNoKSB7CkBAIC00ODAzLDM1ICs0NzgxLDMxIEBACiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyBjaCAtIDE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoKSA8IDApCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgInV0Zi04IiwgZXJybXNnLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ1bmljb2RlLCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKIEVuZDoKLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBpZiAoY29uc3VtZWQpCiAgICAgICAgICpjb25zdW1lZCA9IHMgLSBzdGFydHM7CiAKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kodW5pY29kZSwgMSkpOwotICAgIHJldHVybiB1bmljb2RlOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogb25FcnJvcjoKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIFB5X1hERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00ODQxLDcgKzQ4MTUsNyBAQAogICAgdXNlZCB0byBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgb24gTWFjIE9TIFguCiAKICAgIFJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nICh1c2UKLSAgIFB5TWVtX0ZyZWUoKSB0byBmcmVlIHRoZSBtZW1vcnkpLCBvciBOVUxMIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLiAqLworICAgUHlNZW1fUmF3RnJlZSgpIHRvIGZyZWUgdGhlIG1lbW9yeSksIG9yIE5VTEwgb24gbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuICovCiAKIHdjaGFyX3QqCiBfUHlfRGVjb2RlVVRGOF9zdXJyb2dhdGVlc2NhcGUoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplKQpAQCAtNDg1NCw3ICs0ODI4LDcgQEAKICAgICAgICBjaGFyYWN0ZXIgY291bnQgKi8KICAgICBpZiAoUFlfU1NJWkVfVF9NQVggLyBzaXplb2Yod2NoYXJfdCkgPCAoc2l6ZSArIDEpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB1bmljb2RlID0gUHlNZW1fTWFsbG9jKChzaXplICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOworICAgIHVuaWNvZGUgPSBQeU1lbV9SYXdNYWxsb2MoKHNpemUgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCF1bmljb2RlKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtNDk3NywxNyArNDk1MSwxMSBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcSwgKmU7Ci0gICAgaW50IGJvID0gMDsgICAgICAgLyogYXNzdW1lIG5hdGl2ZSBvcmRlcmluZyBieSBkZWZhdWx0ICovCisgICAgaW50IGxlLCBibyA9IDA7ICAgICAgIC8qIGFzc3VtZSBuYXRpdmUgb3JkZXJpbmcgYnkgZGVmYXVsdCAqLworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOwogICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9ICIiOwotICAgIC8qIE9mZnNldHMgZnJvbSBxIGZvciByZXRyaWV2aW5nIGJ5dGVzIGluIHRoZSByaWdodCBvcmRlci4gKi8KLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgotICAgIGludCBpb3JkZXJbXSA9IHswLCAxLCAyLCAzfTsKLSNlbHNlCi0gICAgaW50IGlvcmRlcltdID0gezMsIDIsIDEsIDB9OwotI2VuZGlmCiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAKQEAgLTUwMDEsMTA3ICs0OTY5LDExOCBAQAogICAgICAgIGJ5dGUgb3JkZXIgc2V0dGluZyBhY2NvcmRpbmdseS4gSW4gbmF0aXZlIG1vZGUsIHRoZSBsZWFkaW5nIEJPTQogICAgICAgIG1hcmsgaXMgc2tpcHBlZCwgaW4gYWxsIG90aGVyIG1vZGVzLCBpdCBpcyBjb3BpZWQgdG8gdGhlIG91dHB1dAogICAgICAgIHN0cmVhbSBhcy1pcyAoZ2l2aW5nIGEgWldOQlNQIGNoYXJhY3RlcikuICovCi0gICAgaWYgKGJvID09IDApIHsKLSAgICAgICAgaWYgKHNpemUgPj0gNCkgewotICAgICAgICAgICAgY29uc3QgUHlfVUNTNCBib20gPSAocVtpb3JkZXJbM11dIDw8IDI0KSB8IChxW2lvcmRlclsyXV0gPDwgMTYpIHwKLSAgICAgICAgICAgICAgICAocVtpb3JkZXJbMV1dIDw8IDgpIHwgcVtpb3JkZXJbMF1dOwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCi0gICAgICAgICAgICBpZiAoYm9tID09IDB4MDAwMEZFRkYpIHsKLSAgICAgICAgICAgICAgICBxICs9IDQ7Ci0gICAgICAgICAgICAgICAgYm8gPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGJvbSA9PSAweEZGRkUwMDAwKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gMTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoYm8gPT0gMCAmJiBzaXplID49IDQpIHsKKyAgICAgICAgUHlfVUNTNCBib20gPSAocVszXSA8PCAyNCkgfCAocVsyXSA8PCAxNikgfCAocVsxXSA8PCA4KSB8IHFbMF07CisgICAgICAgIGlmIChib20gPT0gMHgwMDAwRkVGRikgeworICAgICAgICAgICAgYm8gPSAtMTsKKyAgICAgICAgICAgIHEgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChib20gPT0gMHhGRkZFMDAwMCkgeworICAgICAgICAgICAgYm8gPSAxOworICAgICAgICAgICAgcSArPSA0OworICAgICAgICB9CisgICAgICAgIGlmIChieXRlb3JkZXIpCisgICAgICAgICAgICAqYnl0ZW9yZGVyID0gYm87CisgICAgfQorCisgICAgaWYgKHEgPT0gZSkgeworICAgICAgICBpZiAoY29uc3VtZWQpCisgICAgICAgICAgICAqY29uc3VtZWQgPSBzaXplOworICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKKyAgICB9CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgICBsZSA9IGJvIDwgMDsKICNlbHNlCi0gICAgICAgICAgICBpZiAoYm9tID09IDB4MDAwMEZFRkYpIHsKLSAgICAgICAgICAgICAgICBxICs9IDQ7Ci0gICAgICAgICAgICAgICAgYm8gPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYm9tID09IDB4RkZGRTAwMDApIHsKLSAgICAgICAgICAgICAgICBxICs9IDQ7Ci0gICAgICAgICAgICAgICAgYm8gPSAtMTsKLSAgICAgICAgICAgIH0KKyAgICBsZSA9IGJvIDw9IDA7CiAjZW5kaWYKKyAgICBlbmNvZGluZyA9IGxlID8gInV0Zi0zMi1sZSIgOiAidXRmLTMyLWJlIjsKKworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IChlIC0gcSArIDMpIC8gNDsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBQeV9VQ1M0IGNoID0gMDsKKyAgICAgICAgUHlfVUNTNCBtYXhjaCA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh3cml0ZXIuYnVmZmVyKTsKKworICAgICAgICBpZiAoZSAtIHEgPj0gNCkgeworICAgICAgICAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kID0gd3JpdGVyLmtpbmQ7CisgICAgICAgICAgICB2b2lkICpkYXRhID0gd3JpdGVyLmRhdGE7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpsYXN0ID0gZSAtIDQ7CisgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IHdyaXRlci5wb3M7CisgICAgICAgICAgICBpZiAobGUpIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKHFbM10gPDwgMjQpIHwgKHFbMl0gPDwgMTYpIHwgKHFbMV0gPDwgOCkgfCBxWzBdOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPiBtYXhjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCAhPSBQeVVuaWNvZGVfMUJZVEVfS0lORCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBwb3MrKywgY2gpOworICAgICAgICAgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAocSA8PSBsYXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAocVswXSA8PCAyNCkgfCAocVsxXSA8PCAxNikgfCAocVsyXSA8PCA4KSB8IHFbM107CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+IG1heGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChraW5kICE9IFB5VW5pY29kZV8xQllURV9LSU5EICYmCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIHBvcysrLCBjaCk7CisgICAgICAgICAgICAgICAgICAgIHEgKz0gNDsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChxIDw9IGxhc3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd3JpdGVyLnBvcyA9IHBvczsKICAgICAgICAgfQotICAgIH0KIAotICAgIGlmIChibyA9PSAtMSkgewotICAgICAgICAvKiBmb3JjZSBMRSAqLwotICAgICAgICBpb3JkZXJbMF0gPSAwOwotICAgICAgICBpb3JkZXJbMV0gPSAxOwotICAgICAgICBpb3JkZXJbMl0gPSAyOwotICAgICAgICBpb3JkZXJbM10gPSAzOwotICAgIH0KLSAgICBlbHNlIGlmIChibyA9PSAxKSB7Ci0gICAgICAgIC8qIGZvcmNlIEJFICovCi0gICAgICAgIGlvcmRlclswXSA9IDM7Ci0gICAgICAgIGlvcmRlclsxXSA9IDI7Ci0gICAgICAgIGlvcmRlclsyXSA9IDE7Ci0gICAgICAgIGlvcmRlclszXSA9IDA7Ci0gICAgfQotCi0gICAgLyogVGhpcyBtaWdodCBiZSBvbmUgdG8gbXVjaCwgYmVjYXVzZSBvZiBhIEJPTSAqLwotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KChzaXplKzMpLzQsIDEyNyk7Ci0gICAgaWYgKCF1bmljb2RlKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdW5pY29kZTsKLSAgICBvdXRwb3MgPSAwOwotCi0gICAgd2hpbGUgKHEgPCBlKSB7Ci0gICAgICAgIFB5X1VDUzQgY2g7Ci0gICAgICAgIC8qIHJlbWFpbmluZyBieXRlcyBhdCB0aGUgZW5kPyAoc2l6ZSBzaG91bGQgYmUgZGl2aXNpYmxlIGJ5IDQpICovCi0gICAgICAgIGlmIChlLXE8NCkgewotICAgICAgICAgICAgaWYgKGNvbnN1bWVkKQorICAgICAgICBpZiAoUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKSB7CisgICAgICAgICAgICBlcnJtc2cgPSAiY29kZXBvaW50IGluIHN1cnJvZ2F0ZSBjb2RlIHBvaW50IHJhbmdlKDB4ZDgwMCwgMHhlMDAwKSI7CisgICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSkgLSBzdGFydHM7CisgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyA0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNoIDw9IG1heGNoKSB7CisgICAgICAgICAgICBpZiAocSA9PSBlIHx8IGNvbnN1bWVkKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogcmVtYWluaW5nIGJ5dGVzIGF0IHRoZSBlbmQ/IChzaXplIHNob3VsZCBiZSBkaXZpc2libGUgYnkgNCkgKi8KICAgICAgICAgICAgIGVycm1zZyA9ICJ0cnVuY2F0ZWQgZGF0YSI7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSktc3RhcnRzOwotICAgICAgICAgICAgZW5kaW5wb3MgPSAoKGNvbnN0IGNoYXIgKillKS1zdGFydHM7Ci0gICAgICAgICAgICBnb3RvIHV0ZjMyRXJyb3I7Ci0gICAgICAgICAgICAvKiBUaGUgcmVtYWluaW5nIGlucHV0IGNoYXJzIGFyZSBpZ25vcmVkIGlmIHRoZSBjYWxsYmFjawotICAgICAgICAgICAgICAgY2hvb3NlcyB0byBza2lwIHRoZSBpbnB1dCAqLworICAgICAgICAgICAgc3RhcnRpbnBvcyA9ICgoY29uc3QgY2hhciAqKXEpIC0gc3RhcnRzOworICAgICAgICAgICAgZW5kaW5wb3MgPSAoKGNvbnN0IGNoYXIgKillKSAtIHN0YXJ0czsKICAgICAgICAgfQotICAgICAgICBjaCA9IChxW2lvcmRlclszXV0gPDwgMjQpIHwgKHFbaW9yZGVyWzJdXSA8PCAxNikgfAotICAgICAgICAgICAgKHFbaW9yZGVyWzFdXSA8PCA4KSB8IHFbaW9yZGVyWzBdXTsKLQotICAgICAgICBpZiAoY2ggPj0gMHgxMTAwMDApCi0gICAgICAgIHsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoY2ggPCAweDExMDAwMCkgeworICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICAgICAgcSArPSA0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZXJybXNnID0gImNvZGVwb2ludCBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIjsKLSAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKS1zdGFydHM7Ci0gICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrNDsKLSAgICAgICAgICAgIGdvdG8gdXRmMzJFcnJvcjsKKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKSAtIHN0YXJ0czsKKyAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgcSArPSA0OwotICAgICAgICBjb250aW51ZTsKLSAgICAgIHV0ZjMyRXJyb3I6Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKworICAgICAgICAvKiBUaGUgcmVtYWluaW5nIGlucHV0IGNoYXJzIGFyZSBpZ25vcmVkIGlmIHRoZSBjYWxsYmFjaworICAgICAgICAgICBjaG9vc2VzIHRvIHNraXAgdGhlIGlucHV0ICovCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAotICAgICAgICAgICAgICAgICJ1dGYzMiIsIGVycm1zZywKKyAgICAgICAgICAgICAgICBlbmNvZGluZywgZXJybXNnLAogICAgICAgICAgICAgICAgICZzdGFydHMsIChjb25zdCBjaGFyICoqKSZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAoY29uc3QgY2hhciAqKikmcSwKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCi0gICAgaWYgKGJ5dGVvcmRlcikKLSAgICAgICAgKmJ5dGVvcmRlciA9IGJvOwotCiAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAqY29uc3VtZWQgPSAoY29uc3QgY2hhciAqKXEtc3RhcnRzOwogCi0gICAgLyogQWRqdXN0IGxlbmd0aCAqLwotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdW5pY29kZSwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHVuaWNvZGUpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTUxMTksMTEgKzUwOTgsMTUgQEAKICAgICB1bnNpZ25lZCBjaGFyICpwOwogICAgIFB5X3NzaXplX3QgbnNpemUsIGk7CiAgICAgLyogT2Zmc2V0cyBmcm9tIHAgZm9yIHN0b3JpbmcgYnl0ZSBwYWlycyBpbiB0aGUgcmlnaHQgb3JkZXIuICovCi0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAgICAgaW50IGlvcmRlcltdID0gezAsIDEsIDIsIDN9OwogI2Vsc2UKICAgICBpbnQgaW9yZGVyW10gPSB7MywgMiwgMSwgMH07CiAjZW5kaWYKKyAgICBjb25zdCBjaGFyICplbmNvZGluZzsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVwID0gTlVMTDsKIAogI2RlZmluZSBTVE9SRUNIQVIoQ0gpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTE1NSw3ICs1MTM4LDcgQEAKICAgICBpZiAoYnl0ZW9yZGVyID09IDApCiAgICAgICAgIFNUT1JFQ0hBUigweEZFRkYpOwogICAgIGlmIChsZW4gPT0gMCkKLSAgICAgICAgZ290byBkb25lOworICAgICAgICByZXR1cm4gdjsKIAogICAgIGlmIChieXRlb3JkZXIgPT0gLTEpIHsKICAgICAgICAgLyogZm9yY2UgTEUgKi8KQEAgLTUxNjMsNiArNTE0Niw3IEBACiAgICAgICAgIGlvcmRlclsxXSA9IDE7CiAgICAgICAgIGlvcmRlclsyXSA9IDI7CiAgICAgICAgIGlvcmRlclszXSA9IDM7CisgICAgICAgIGVuY29kaW5nID0gInV0Zi0zMi1sZSI7CiAgICAgfQogICAgIGVsc2UgaWYgKGJ5dGVvcmRlciA9PSAxKSB7CiAgICAgICAgIC8qIGZvcmNlIEJFICovCkBAIC01MTcwLDEzICs1MTU0LDEwMyBAQAogICAgICAgICBpb3JkZXJbMV0gPSAyOwogICAgICAgICBpb3JkZXJbMl0gPSAxOwogICAgICAgICBpb3JkZXJbM10gPSAwOworICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzItYmUiOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGVuY29kaW5nID0gInV0Zi0zMiI7CisKKyAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgICAgICBTVE9SRUNIQVIoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpOworICAgICAgICByZXR1cm4gdjsKICAgICB9CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIFNUT1JFQ0hBUihQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSk7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjspIHsKKyAgICAgICAgUHlfc3NpemVfdCByZXBzaXplLCBtb3JldW5pdHM7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgaSsrOworICAgICAgICBhc3NlcnQoY2ggPD0gTUFYX1VOSUNPREUpOworICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgeworICAgICAgICAgICAgU1RPUkVDSEFSKGNoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgZG9uZToKKyAgICAgICAgcmVwID0gdW5pY29kZV9lbmNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAorICAgICAgICAgICAgICAgIGVuY29kaW5nLCAic3Vycm9nYXRlcyBub3QgYWxsb3dlZCIsCisgICAgICAgICAgICAgICAgc3RyLCAmZXhjLCBpLTEsIGksICZpKTsKKworICAgICAgICBpZiAoIXJlcCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2socmVwKSkgeworICAgICAgICAgICAgcmVwc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUocmVwKTsKKyAgICAgICAgICAgIGlmIChyZXBzaXplICYgMykgeworICAgICAgICAgICAgICAgIHJhaXNlX2VuY29kZV9leGNlcHRpb24oJmV4YywgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIGkgLSAxLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSAvIDQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKHJlcCkpOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXApIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcCk7CisgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9JU19BU0NJSShyZXApKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgaSAtIDEsIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlcyBub3QgYWxsb3dlZCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBmb3VyIGJ5dGVzIGFyZSByZXNlcnZlZCBmb3IgZWFjaCBzdXJyb2dhdGUgKi8KKyAgICAgICAgaWYgKG1vcmV1bml0cyA+IDEpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0cG9zID0gcCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG1vcmVieXRlcyA9IDQgKiAobW9yZXVuaXRzIC0gMSk7CisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRSh2KSA+IFBZX1NTSVpFX1RfTUFYIC0gbW9yZWJ5dGVzKSB7CisgICAgICAgICAgICAgICAgLyogaW50ZWdlciBvdmVyZmxvdyAqLworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnYsIFB5Qnl0ZXNfR0VUX1NJWkUodikgKyBtb3JlYnl0ZXMpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgcCA9ICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodikgKyBvdXRwb3M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhyZXApKSB7CisgICAgICAgICAgICBQeV9NRU1DUFkocCwgUHlCeXRlc19BU19TVFJJTkcocmVwKSwgcmVwc2l6ZSk7CisgICAgICAgICAgICBwICs9IHJlcHNpemU7CisgICAgICAgIH0gZWxzZSAvKiByZXAgaXMgdW5pY29kZSAqLyB7CisgICAgICAgICAgICBjb25zdCBQeV9VQ1MxICpyZXBkYXRhOworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKHJlcCkgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpOworICAgICAgICAgICAgcmVwZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHJlcCk7CisgICAgICAgICAgICB3aGlsZSAocmVwc2l6ZS0tKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9ICpyZXBkYXRhKys7CisgICAgICAgICAgICAgICAgU1RPUkVDSEFSKGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFB5X0NMRUFSKHJlcCk7CisgICAgfQorCisgICAgLyogQ3V0IGJhY2sgdG8gc2l6ZSBhY3R1YWxseSBuZWVkZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciwgZm9yIGV4YW1wbGUsCisgICAgICAgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgY29udGFpbmluZyBpc29sYXRlZCBzdXJyb2dhdGVzIGFuZCB0aGUgJ2lnbm9yZScKKyAgICAgICBoYW5kbGVyIGlzIHVzZWQuICovCisgICAgbnNpemUgPSBwIC0gKHVuc2lnbmVkIGNoYXIqKSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICBpZiAobnNpemUgIT0gUHlCeXRlc19HRVRfU0laRSh2KSkKKyAgICAgIF9QeUJ5dGVzX1Jlc2l6ZSgmdiwgbnNpemUpOworICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIHY7CisgIGVycm9yOgorICAgIFB5X1hERUNSRUYocmVwKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIFB5X1hERUNSRUYodik7CisgICAgcmV0dXJuIE5VTEw7CiAjdW5kZWYgU1RPUkVDSEFSCiB9CiAKQEAgLTUyMjIsMTQgKzUyOTYsMTQgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEsICplOwogICAgIGludCBibyA9IDA7ICAgICAgIC8qIGFzc3VtZSBuYXRpdmUgb3JkZXJpbmcgYnkgZGVmYXVsdCAqLwogICAgIGludCBuYXRpdmVfb3JkZXJpbmc7CiAgICAgY29uc3QgY2hhciAqZXJybXNnID0gIiI7CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZW5jb2Rpbmc7CiAKICAgICBxID0gKHVuc2lnbmVkIGNoYXIgKilzOwogICAgIGUgPSBxICsgc2l6ZTsKQEAgLTUyNjEsNDAgKzUzMzUsNDIgQEAKICAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAgICAgfQogCi0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAgICAgbmF0aXZlX29yZGVyaW5nID0gYm8gPD0gMDsKKyAgICBlbmNvZGluZyA9IGJvIDw9IDAgPyAidXRmLTE2LWxlIiA6ICJ1dGYtMTYtYmUiOwogI2Vsc2UKICAgICBuYXRpdmVfb3JkZXJpbmcgPSBibyA+PSAwOworICAgIGVuY29kaW5nID0gYm8gPj0gMCA/ICJ1dGYtMTYtYmUiIDogInV0Zi0xNi1sZSI7CiAjZW5kaWYKIAogICAgIC8qIE5vdGU6IHNpemUgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZyBVbmljb2RlCiAgICAgICAgY2hhcmFjdGVyIGNvdW50ICovCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoKGUgLSBxICsgMSkgLyAyLCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gKGUgLSBxICsgMSkgLyAyOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKIAotICAgIG91dHBvcyA9IDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgUHlfVUNTNCBjaCA9IDA7CiAgICAgICAgIGlmIChlIC0gcSA+PSAyKSB7Ci0gICAgICAgICAgICBpbnQga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOworICAgICAgICAgICAgaW50IGtpbmQgPSB3cml0ZXIua2luZDsKICAgICAgICAgICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh1bmljb2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHdyaXRlci5idWZmZXIpKQogICAgICAgICAgICAgICAgICAgICBjaCA9IGFzY2lpbGliX3V0ZjE2X2RlY29kZSgmcSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMSopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaCA9IHVjczFsaWJfdXRmMTZfZGVjb2RlKCZxLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MxKil3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX29yZGVyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgewogICAgICAgICAgICAgICAgIGNoID0gdWNzMmxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMkJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MyKil3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBhc3NlcnQoa2luZCA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCk7CiAgICAgICAgICAgICAgICAgY2ggPSB1Y3M0bGliX3V0ZjE2X2RlY29kZSgmcSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV80QllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzQqKXdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTUzMzAsMjMgKzU0MDYsMjIgQEAKICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoKSA8IDApCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsCiAgICAgICAgICAgICAgICAgJmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAidXRmMTYiLCBlcnJtc2csCisgICAgICAgICAgICAgICAgZW5jb2RpbmcsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLAogICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICoqKSZlLAogICAgICAgICAgICAgICAgICZzdGFydGlucG9zLAogICAgICAgICAgICAgICAgICZlbmRpbnBvcywKICAgICAgICAgICAgICAgICAmZXhjLAogICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICoqKSZxLAotICAgICAgICAgICAgICAgICZ1bmljb2RlLAotICAgICAgICAgICAgICAgICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIApAQCAtNTM1NCwxNiArNTQyOSwxMiBAQAogICAgIGlmIChjb25zdW1lZCkKICAgICAgICAgKmNvbnN1bWVkID0gKGNvbnN0IGNoYXIgKilxLXN0YXJ0czsKIAotICAgIC8qIEFkanVzdCBsZW5ndGggKi8KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh1bmljb2RlKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01Mzc5LDEzICs1NDUwLDE3IEBACiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgc2hvcnQgKm91dDsKLSAgICBQeV9zc2l6ZV90IGJ5dGVzaXplOwogICAgIFB5X3NzaXplX3QgcGFpcnM7Ci0jaWZkZWYgV09SRFNfQklHRU5ESUFOCisjaWYgUFlfQklHX0VORElBTgogICAgIGludCBuYXRpdmVfb3JkZXJpbmcgPSBieXRlb3JkZXIgPj0gMDsKICNlbHNlCiAgICAgaW50IG5hdGl2ZV9vcmRlcmluZyA9IGJ5dGVvcmRlciA8PSAwOwogI2VuZGlmCisgICAgY29uc3QgY2hhciAqZW5jb2Rpbmc7CisgICAgUHlfc3NpemVfdCBuc2l6ZSwgcG9zOworICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOworICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXAgPSBOVUxMOwogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soc3RyKSkgewogICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwpAQCAtNTQwNyw4ICs1NDgyLDggQEAKICAgICB9CiAgICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMiAtIHBhaXJzIC0gKGJ5dGVvcmRlciA9PSAwKSkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgYnl0ZXNpemUgPSAobGVuICsgcGFpcnMgKyAoYnl0ZW9yZGVyID09IDApKSAqIDI7Ci0gICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnl0ZXNpemUpOworICAgIG5zaXplID0gbGVuICsgcGFpcnMgKyAoYnl0ZW9yZGVyID09IDApOworICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG5zaXplICogMik7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTU0MjAsMjUgKzU0OTUsMTA3IEBACiAgICAgaWYgKGxlbiA9PSAwKQogICAgICAgICBnb3RvIGRvbmU7CiAKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOiB7Ci0gICAgICAgIHVjczFsaWJfdXRmMTZfZW5jb2RlKG91dCwgKGNvbnN0IFB5X1VDUzEgKilkYXRhLCBsZW4sIG5hdGl2ZV9vcmRlcmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOiB7Ci0gICAgICAgIHVjczJsaWJfdXRmMTZfZW5jb2RlKG91dCwgKGNvbnN0IFB5X1VDUzIgKilkYXRhLCBsZW4sIG5hdGl2ZV9vcmRlcmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOiB7Ci0gICAgICAgIHVjczRsaWJfdXRmMTZfZW5jb2RlKG91dCwgKGNvbnN0IFB5X1VDUzQgKilkYXRhLCBsZW4sIG5hdGl2ZV9vcmRlcmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoMCk7CisgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgdWNzMWxpYl91dGYxNl9lbmNvZGUoKGNvbnN0IFB5X1VDUzEgKilkYXRhLCBsZW4sICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CisgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKKyAgICBpZiAoYnl0ZW9yZGVyIDwgMCkKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWxlIjsKKyAgICBlbHNlIGlmIChieXRlb3JkZXIgPiAwKQorICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMTYtYmUiOworICAgIGVsc2UKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTE2IjsKKworICAgIHBvcyA9IDA7CisgICAgd2hpbGUgKHBvcyA8IGxlbikgeworICAgICAgICBQeV9zc2l6ZV90IHJlcHNpemUsIG1vcmV1bml0czsKKworICAgICAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgeworICAgICAgICAgICAgcG9zICs9IHVjczJsaWJfdXRmMTZfZW5jb2RlKChjb25zdCBQeV9VQ1MyICopZGF0YSArIHBvcywgbGVuIC0gcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoa2luZCA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCk7CisgICAgICAgICAgICBwb3MgKz0gdWNzNGxpYl91dGYxNl9lbmNvZGUoKGNvbnN0IFB5X1VDUzQgKilkYXRhICsgcG9zLCBsZW4gLSBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dCwgbmF0aXZlX29yZGVyaW5nKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocG9zID09IGxlbikKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJlcCA9IHVuaWNvZGVfZW5jb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICBlbmNvZGluZywgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiLAorICAgICAgICAgICAgICAgIHN0ciwgJmV4YywgcG9zLCBwb3MgKyAxLCAmcG9zKTsKKyAgICAgICAgaWYgKCFyZXApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKHJlcCkpIHsKKyAgICAgICAgICAgIHJlcHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlcCk7CisgICAgICAgICAgICBpZiAocmVwc2l6ZSAmIDEpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lbmNvZGVfZXhjZXB0aW9uKCZleGMsIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBwb3MgLSAxLCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlcyBub3QgYWxsb3dlZCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3JldW5pdHMgPSByZXBzaXplIC8gMjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2socmVwKSk7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHJlcCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBtb3JldW5pdHMgPSByZXBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVwKTsKKyAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0lTX0FTQ0lJKHJlcCkpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lbmNvZGVfZXhjZXB0aW9uKCZleGMsIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBwb3MgLSAxLCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlcyBub3QgYWxsb3dlZCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiB0d28gYnl0ZXMgYXJlIHJlc2VydmVkIGZvciBlYWNoIHN1cnJvZ2F0ZSAqLworICAgICAgICBpZiAobW9yZXVuaXRzID4gMSkgeworICAgICAgICAgICAgUHlfc3NpemVfdCBvdXRwb3MgPSBvdXQgLSAodW5zaWduZWQgc2hvcnQqKSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbW9yZWJ5dGVzID0gMiAqIChtb3JldW5pdHMgLSAxKTsKKyAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHYpID4gUFlfU1NJWkVfVF9NQVggLSBtb3JlYnl0ZXMpIHsKKyAgICAgICAgICAgICAgICAvKiBpbnRlZ2VyIG92ZXJmbG93ICovCisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmdiwgUHlCeXRlc19HRVRfU0laRSh2KSArIG1vcmVieXRlcykgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBvdXQgPSAodW5zaWduZWQgc2hvcnQqKSBQeUJ5dGVzX0FTX1NUUklORyh2KSArIG91dHBvczsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKHJlcCkpIHsKKyAgICAgICAgICAgIFB5X01FTUNQWShvdXQsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcCksIHJlcHNpemUpOworICAgICAgICAgICAgb3V0ICs9IG1vcmV1bml0czsKKyAgICAgICAgfSBlbHNlIC8qIHJlcCBpcyB1bmljb2RlICovIHsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChyZXApID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICAgICAgICAgIHVjczFsaWJfdXRmMTZfZW5jb2RlKFB5VW5pY29kZV8xQllURV9EQVRBKHJlcCksIHJlcHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOworICAgICAgICB9CisKKyAgICAgICAgUHlfQ0xFQVIocmVwKTsKKyAgICB9CisKKyAgICAvKiBDdXQgYmFjayB0byBzaXplIGFjdHVhbGx5IG5lZWRlZC4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yLCBmb3IgZXhhbXBsZSwKKyAgICBlbmNvZGluZyBvZiBhIHN0cmluZyBjb250YWluaW5nIGlzb2xhdGVkIHN1cnJvZ2F0ZXMgYW5kIHRoZSAnaWdub3JlJyBoYW5kbGVyCisgICAgaXMgdXNlZC4gKi8KKyAgICBuc2l6ZSA9ICh1bnNpZ25lZCBjaGFyKikgb3V0IC0gKHVuc2lnbmVkIGNoYXIqKSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICBpZiAobnNpemUgIT0gUHlCeXRlc19HRVRfU0laRSh2KSkKKyAgICAgIF9QeUJ5dGVzX1Jlc2l6ZSgmdiwgbnNpemUpOworICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CiAgIGRvbmU6CiAgICAgcmV0dXJuIHY7CisgIGVycm9yOgorICAgIFB5X1hERUNSRUYocmVwKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIFB5X1hERUNSRUYodik7CisgICAgcmV0dXJuIE5VTEw7CisjdW5kZWYgU1RPUkVDSEFSCiB9CiAKIFB5T2JqZWN0ICoKQEAgLTU1MjksMjcgKzU2ODYsMjYgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5T2JqZWN0ICp2OworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKmVuZDsKICAgICBjaGFyKiBtZXNzYWdlOwogICAgIFB5X1VDUzQgY2hyID0gMHhmZmZmZmZmZjsgLyogaW4gY2FzZSAnZ2V0Y29kZScgbWVzc2VzIHVwICovCiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgUHlfc3NpemVfdCBpOwogCiAgICAgbGVuID0gbGVuZ3RoX29mX2VzY2FwZWRfYXNjaWlfc3RyaW5nKHMsIHNpemUpOworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAKICAgICAvKiBBZnRlciBsZW5ndGhfb2ZfZXNjYXBlZF9hc2NpaV9zdHJpbmcoKSB0aGVyZSBhcmUgdHdvIGFsdGVybmF0aXZlcywKICAgICAgICBlaXRoZXIgdGhlIHN0cmluZyBpcyBwdXJlIEFTQ0lJIHdpdGggbmFtZWQgZXNjYXBlcyBsaWtlIFxuLCBldGMuCiAgICAgICAgYW5kIHdlIGRldGVybWluZWQgaXQncyBleGFjdCBzaXplIChjb21tb24gY2FzZSkKICAgICAgICBvciBpdCBjb250YWlucyBceCwgXHUsIC4uLiBlc2NhcGUgc2VxdWVuY2VzLiAgdGhlbiB3ZSBjcmVhdGUgYQogICAgICAgIGxlZ2FjeSB3Y2hhciBzdHJpbmcgYW5kIHJlc2l6ZSBpdCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uICovCi0gICAgaWYgKGxlbiA+PSAwKSB7Ci0gICAgICAgIHYgPSBQeVVuaWNvZGVfTmV3KGxlbiwgMTI3KTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQodikgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICBpZiAobGVuID4gMCkgeworICAgICAgICB3cml0ZXIubWluX2xlbmd0aCA9IGxlbjsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIEVzY2FwZWQgc3RyaW5ncyB3aWxsIGFsd2F5cyBiZSBsb25nZXIgdGhhbiB0aGUgcmVzdWx0aW5nCkBAIC01NTU3LDE1ICs1NzEzLDExIEBACiAgICAgICAgICAgIGxlbmd0aCBhZnRlciBjb252ZXJzaW9uIHRvIHRoZSB0cnVlIHZhbHVlLgogICAgICAgICAgICAoYnV0IGlmIHRoZSBlcnJvciBjYWxsYmFjayByZXR1cm5zIGEgbG9uZyByZXBsYWNlbWVudCBzdHJpbmcKICAgICAgICAgICAgd2UnbGwgaGF2ZSB0byBhbGxvY2F0ZSBtb3JlIHNwYWNlKSAqLwotICAgICAgICB2ID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIGxlbiA9IHNpemU7CisgICAgICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKICAgICB9CiAKICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdjsKLSAgICBpID0gMDsKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogICAgIGVuZCA9IHMgKyBzaXplOwogCiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKQEAgLTU1NzMsMTMgKzU3MjUsMTEgQEAKICAgICAgICAgUHlfVUNTNCB4OwogICAgICAgICBpbnQgZGlnaXRzOwogCi0gICAgICAgIC8qIFRoZSBvbmx5IGNhc2UgaW4gd2hpY2ggaSA9PSBhc2NpaV9sZW5ndGggaXMgYSBiYWNrc2xhc2gKLSAgICAgICAgICAgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLiAqLwotICAgICAgICBhc3NlcnQoaSA8PSBsZW4pOwotCiAgICAgICAgIC8qIE5vbi1lc2NhcGUgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgVW5pY29kZSBvcmRpbmFscyAqLwogICAgICAgICBpZiAoKnMgIT0gJ1xcJykgewotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJmksICh1bnNpZ25lZCBjaGFyKSAqcysrKSA8IDApCisgICAgICAgICAgICB4ID0gKHVuc2lnbmVkIGNoYXIpKnM7CisgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC01NTkxLDE4ICs1NzQxLDE0IEBACiAgICAgICAgIGlmIChzID4gZW5kKQogICAgICAgICAgICAgYyA9ICdcMCc7IC8qIEludmFsaWQgYWZ0ZXIgXCAqLwogCi0gICAgICAgIC8qIFRoZSBvbmx5IGNhc2UgaW4gd2hpY2ggaSA9PSBhc2NpaV9sZW5ndGggaXMgYSBiYWNrc2xhc2gKLSAgICAgICAgICAgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLiAqLwotICAgICAgICBhc3NlcnQoaSA8IGxlbiB8fCAoaSA9PSBsZW4gJiYgYyA9PSAnXG4nKSk7Ci0KICAgICAgICAgc3dpdGNoIChjKSB7CiAKICAgICAgICAgICAgIC8qIFx4IGVzY2FwZXMgKi8KLSNkZWZpbmUgV1JJVEVDSEFSKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJmksIGNoKSA8IDApICAgIFwKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfXdoaWxlKDApCisjZGVmaW5lIFdSSVRFQ0hBUihjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIChjaCkpIDwgMCkgICAgXAorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAgICAgICAgIGNhc2UgJ1xuJzogYnJlYWs7CiAgICAgICAgIGNhc2UgJ1xcJzogV1JJVEVDSEFSKCdcXCcpOyBicmVhazsKQEAgLTU3MjYsMzUgKzU4NzIsMzIgQEAKIAogICAgICAgZXJyb3I6CiAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgInVuaWNvZGVlc2NhcGUiLCBtZXNzYWdlLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ2LCAmaSkpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpOwogICAgICAgICBjb250aW51ZTsKICAgICB9CiAjdW5kZWYgV1JJVEVDSEFSCiAKLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIGkpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHYpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICB1Y25oYXNoRXJyb3I6CiAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICBQeUV4Y19Vbmljb2RlRXJyb3IsCiAgICAgICAgICJcXE4gZXNjYXBlcyBub3Qgc3VwcG9ydGVkIChjYW4ndCBsb2FkIHVuaWNvZGVkYXRhIG1vZHVsZSkiCiAgICAgICAgICk7Ci0gICAgUHlfWERFQ1JFRih2KTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKIAogICBvbkVycm9yOgotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01OTA3LDIzICs2MDUwLDIyIEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBQeU9iamVjdCAqdjsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplbmQ7CiAgICAgY29uc3QgY2hhciAqYnM7CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKKwogICAgIC8qIEVzY2FwZWQgc3RyaW5ncyB3aWxsIGFsd2F5cyBiZSBsb25nZXIgdGhhbiB0aGUgcmVzdWx0aW5nCiAgICAgICAgVW5pY29kZSBzdHJpbmcsIHNvIHdlIHN0YXJ0IHdpdGggc2l6ZSBoZXJlIGFuZCB0aGVuIHJlZHVjZSB0aGUKICAgICAgICBsZW5ndGggYWZ0ZXIgY29udmVyc2lvbiB0byB0aGUgdHJ1ZSB2YWx1ZS4gKEJ1dCBkZWNvZGluZyBlcnJvcgogICAgICAgIGhhbmRsZXIgbWlnaHQgaGF2ZSB0byByZXNpemUgdGhlIHN0cmluZykgKi8KLSAgICB2ID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdjsKLSAgICBvdXRwb3MgPSAwOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisKICAgICBlbmQgPSBzICsgc2l6ZTsKICAgICB3aGlsZSAocyA8IGVuZCkgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGM7CkBAIC01OTMzLDcgKzYwNzUsOCBAQAogCiAgICAgICAgIC8qIE5vbi1lc2NhcGUgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgVW5pY29kZSBvcmRpbmFscyAqLwogICAgICAgICBpZiAoKnMgIT0gJ1xcJykgewotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgKHVuc2lnbmVkIGNoYXIpKnMrKykgPCAwKQorICAgICAgICAgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSpzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC01OTQ1LDcgKzYwODgsOCBAQAogICAgICAgICBmb3IgKDtzIDwgZW5kOykgewogICAgICAgICAgICAgaWYgKCpzICE9ICdcXCcpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCAodW5zaWduZWQgY2hhcikqcysrKSA8IDApCisgICAgICAgICAgICB4ID0gKHVuc2lnbmVkIGNoYXIpKnMrKzsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCB4KSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHMgLSBicykgJiAxKSA9PSAwIHx8CkBAIC01OTUzLDcgKzYwOTcsNyBAQAogICAgICAgICAgICAgKCpzICE9ICd1JyAmJiAqcyAhPSAnVScpKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBvdXRwb3MtLTsKKyAgICAgICAgd3JpdGVyLnBvcy0tOwogICAgICAgICBjb3VudCA9ICpzPT0ndScgPyA0IDogODsKICAgICAgICAgcysrOwogCkBAIC01OTYyLDExICs2MTA2LDExIEBACiAgICAgICAgICAgICBjID0gKHVuc2lnbmVkIGNoYXIpKnM7CiAgICAgICAgICAgICBpZiAoIVB5X0lTWERJR0lUKGMpKSB7CiAgICAgICAgICAgICAgICAgZW5kaW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICJyYXd1bmljb2RlZXNjYXBlIiwgInRydW5jYXRlZCBcXHVYWFhYIiwKICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICBnb3RvIG5leHRCeXRlOwogICAgICAgICAgICAgfQpAQCAtNTk3OSwyOCArNjEyMywyNyBAQAogICAgICAgICAgICAgICAgIHggKz0gMTAgKyBjIC0gJ0EnOwogICAgICAgICB9CiAgICAgICAgIGlmICh4IDw9IE1BWF9VTklDT0RFKSB7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCB4KSA8IDApCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICJyYXd1bmljb2RlZXNjYXBlIiwgIlxcVXh4eHh4eHh4IG91dCBvZiByYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgbmV4dEJ5dGU6CiAgICAgICAgIDsKICAgICB9Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHYpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC02MTAwLDggKzYyNDMsNyBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgUHlPYmplY3QgKnY7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgY2hhciAqZW5kOwogICAgIGNvbnN0IGNoYXIgKnJlYXNvbjsKICAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKQEAgLTYxMTIsMTUgKzYyNTQsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgIDEpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8qIFhYWCBvdmVyZmxvdyBkZXRlY3Rpb24gbWlzc2luZyAqLwotICAgIHYgPSBQeVVuaWNvZGVfTmV3KChzaXplK1B5X1VOSUNPREVfU0laRS0xKS8gUHlfVU5JQ09ERV9TSVpFLCAxMjcpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgodikgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgb3V0cG9zID0gMDsKLSAgICBlbmQgPSBzICsgc2l6ZTsKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKIAorICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICBpZiAoc2l6ZSAvIFB5X1VOSUNPREVfU0laRSA+IFBZX1NTSVpFX1RfTUFYIC0gMSkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorICAgIHdyaXRlci5taW5fbGVuZ3RoID0gKHNpemUgKyAoUHlfVU5JQ09ERV9TSVpFIC0gMSkpIC8gUHlfVU5JQ09ERV9TSVpFOworCisgICAgZW5kID0gcyArIHNpemU7CiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKICAgICAgICAgUHlfVU5JQ09ERSB1Y2g7CiAgICAgICAgIFB5X1VDUzQgY2g7CkBAIC02MTYyLDI4ICs2MzA2LDI2IEBACiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsIGNoKSA8IDApCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICBjb250aW51ZTsKIAogICBlcnJvcjoKICAgICAgICAgc3RhcnRpbnBvcyA9IHMgLSBzdGFydHM7Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgInVuaWNvZGVfaW50ZXJuYWwiLCByZWFzb24sCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmVuZCwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNjU0Niw3ICs2Njg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCiB7CiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBpbnQga2luZDsKICAgICB2b2lkICpkYXRhOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKQEAgLTY1NjMsNDYgKzY3MDUsNDYgQEAKICAgICBpZiAoc2l6ZSA9PSAxICYmICh1bnNpZ25lZCBjaGFyKXNbMF0gPCAxMjgpCiAgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoKHVuc2lnbmVkIGNoYXIpc1swXSk7CiAKLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICh1bmljb2RlID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGUgPSBzICsgc2l6ZTsKLSAgICBkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSk7CisgICAgZGF0YSA9IHdyaXRlci5kYXRhOwogICAgIG91dHBvcyA9IGFzY2lpX2RlY29kZShzLCBlLCAoUHlfVUNTMSAqKWRhdGEpOwotICAgIGlmIChvdXRwb3MgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7CisgICAgd3JpdGVyLnBvcyA9IG91dHBvczsKKyAgICBpZiAod3JpdGVyLnBvcyA9PSBzaXplKQorICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKLSAgICBzICs9IG91dHBvczsKLSAgICBraW5kID0gUHlVbmljb2RlXzFCWVRFX0tJTkQ7CisgICAgcyArPSB3cml0ZXIucG9zOworICAgIGtpbmQgPSB3cml0ZXIua2luZDsKICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBjID0gKHVuc2lnbmVkIGNoYXIpKnM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSpzOwogICAgICAgICBpZiAoYyA8IDEyOCkgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIG91dHBvcysrLCBjKTsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCB3cml0ZXIucG9zLCBjKTsKKyAgICAgICAgICAgIHdyaXRlci5wb3MrKzsKICAgICAgICAgICAgICsrczsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDE7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICJhc2NpaSIsICJvcmRpbmFsIG5vdCBpbiByYW5nZSgxMjgpIiwKICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKLSAgICAgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmljb2RlKTsKKyAgICAgICAgICAgIGtpbmQgPSB3cml0ZXIua2luZDsKKyAgICAgICAgICAgIGRhdGEgPSB3cml0ZXIuZGF0YTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDEpKTsKLSAgICByZXR1cm4gdW5pY29kZTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNjYzNCw3ICs2Nzc2LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogRmFzdCBwYXRoOiBpZiBpdCBpcyBhbiBBU0NJSS1vbmx5IHN0cmluZywgY29uc3RydWN0IGJ5dGVzIG9iamVjdAogICAgICAgIGRpcmVjdGx5LiBFbHNlIGRlZmVyIHRvIGFib3ZlIGZ1bmN0aW9uIHRvIHJhaXNlIHRoZSBleGNlcHRpb24uICovCi0gICAgaWYgKFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh1bmljb2RlKSA8IDEyOCkKKyAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHVuaWNvZGUpKQogICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShQeVVuaWNvZGVfREFUQSh1bmljb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSkpOwogICAgIHJldHVybiB1bmljb2RlX2VuY29kZV91Y3MxKHVuaWNvZGUsIGVycm9ycywgMTI4KTsKQEAgLTY3MTIsOCArNjg1NCw4IEBACiAgKiBEZWNvZGUgYSBieXRlIHN0cmluZyBmcm9tIGEgV2luZG93cyBjb2RlIHBhZ2UgaW50byB1bmljb2RlIG9iamVjdCBpbiBzdHJpY3QKICAqIG1vZGUuCiAgKgotICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIHJldHVybnMgLTIgb24gZGVjb2RlIGVycm9yLCBvciByYWlzZSBhCi0gKiBXaW5kb3dzRXJyb3IgYW5kIHJldHVybnMgLTEgb24gb3RoZXIgZXJyb3IuCisgKiBSZXR1cm5zIGNvbnN1bWVkIHNpemUgaWYgc3VjY2VlZCwgcmV0dXJucyAtMiBvbiBkZWNvZGUgZXJyb3IsIG9yIHJhaXNlIGFuCisgKiBPU0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgogICovCiBzdGF0aWMgaW50CiBkZWNvZGVfY29kZV9wYWdlX3N0cmljdChVSU5UIGNvZGVfcGFnZSwKQEAgLTY3NjQsNyArNjkwNiw3IEBACiAgKiBEZWNvZGUgYSBieXRlIHN0cmluZyBmcm9tIGEgY29kZSBwYWdlIGludG8gdW5pY29kZSBvYmplY3Qgd2l0aCBhbiBlcnJvcgogICogaGFuZGxlci4KICAqCi0gKiBSZXR1cm5zIGNvbnN1bWVkIHNpemUgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYSBXaW5kb3dzRXJyb3Igb3IKKyAqIFJldHVybnMgY29uc3VtZWQgc2l6ZSBpZiBzdWNjZWVkLCBvciByYWlzZSBhbiBPU0Vycm9yIG9yCiAgKiBVbmljb2RlRGVjb2RlRXJyb3IgZXhjZXB0aW9uIGFuZCByZXR1cm5zIC0xIG9uIGVycm9yLgogICovCiBzdGF0aWMgaW50CkBAIC02NzgzLDcgKzY5MjUsOCBAQAogICAgIC8qIGVhY2ggc3RlcCBjYW5ub3QgZGVjb2RlIG1vcmUgdGhhbiAxIGNoYXJhY3RlciwgYnV0IGEgY2hhcmFjdGVyIGNhbiBiZQogICAgICAgIHJlcHJlc2VudGVkIGFzIGEgc3Vycm9nYXRlIHBhaXIgKi8KICAgICB3Y2hhcl90IGJ1ZmZlclsyXSwgKnN0YXJ0b3V0LCAqb3V0OwotICAgIGludCBpbnNpemUsIG91dHNpemU7CisgICAgaW50IGluc2l6ZTsKKyAgICBQeV9zc2l6ZV90IG91dHNpemU7CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmVuY29kaW5nX29iaiA9IE5VTEw7CkBAIC02ODYzLDcgKzcwMDYsNyBAQAogICAgICAgICAgICAgc3RhcnRpbnBvcyA9IGluIC0gc3RhcnRpbjsKICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDE7CiAgICAgICAgICAgICBvdXRwb3MgPSBvdXQgLSBQeVVuaWNvZGVfQVNfVU5JQ09ERSgqdik7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd2NoYXIoCiAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsIHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0aW4sICZlbmRpbiwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJmluLApAQCAtNzAxOSw3ICs3MTYyLDcgQEAKICAqIG1vZGUuCiAgKgogICogUmV0dXJucyBjb25zdW1lZCBjaGFyYWN0ZXJzIGlmIHN1Y2NlZWQsIHJldHVybnMgLTIgb24gZW5jb2RlIGVycm9yLCBvciByYWlzZQotICogYSBXaW5kb3dzRXJyb3IgYW5kIHJldHVybnMgLTEgb24gb3RoZXIgZXJyb3IuCisgKiBhbiBPU0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgogICovCiBzdGF0aWMgaW50CiBlbmNvZGVfY29kZV9wYWdlX3N0cmljdChVSU5UIGNvZGVfcGFnZSwgUHlPYmplY3QgKipvdXRieXRlcywKQEAgLTcwNTMsMTAgKzcxOTYsMTEgQEAKICAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgYXNzZXJ0KHNpemUgPD0gSU5UX01BWCk7CiAKICAgICAvKiBGaXJzdCBnZXQgdGhlIHNpemUgb2YgdGhlIHJlc3VsdCAqLwogICAgIG91dHNpemUgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKGNvZGVfcGFnZSwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCAoaW50KXNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBwdXNlZERlZmF1bHRDaGFyKTsKICAgICBpZiAob3V0c2l6ZSA8PSAwKQpAQCAtNzA5Myw3ICs3MjM3LDcgQEAKIAogICAgIC8qIERvIHRoZSBjb252ZXJzaW9uICovCiAgICAgb3V0c2l6ZSA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoY29kZV9wYWdlLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIChpbnQpc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIG91dHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcHVzZWREZWZhdWx0Q2hhcik7CiAgICAgUHlfQ0xFQVIoc3Vic3RyaW5nKTsKQEAgLTcxMTUsNyArNzI1OSw3IEBACiAgKiBFbmNvZGUgYSBVbmljb2RlIHN0cmluZyB0byBhIFdpbmRvd3MgY29kZSBwYWdlIGludG8gYSBieXRlIHN0cmluZyB1c2luZyBhCiAgKiBlcnJvciBoYW5kbGVyLgogICoKLSAqIFJldHVybnMgY29uc3VtZWQgY2hhcmFjdGVycyBpZiBzdWNjZWVkLCBvciByYWlzZSBhIFdpbmRvd3NFcnJvciBhbmQgcmV0dXJucworICogUmV0dXJucyBjb25zdW1lZCBjaGFyYWN0ZXJzIGlmIHN1Y2NlZWQsIG9yIHJhaXNlIGFuIE9TRXJyb3IgYW5kIHJldHVybnMKICAqIC0xIG9uIG90aGVyIGVycm9yLgogICovCiBzdGF0aWMgaW50CkBAIC03MjAxLDkgKzczNDUsOCBAQAogICAgICAgICAgICAgY2hhcnNpemUgPSAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2ggLT0gMHgxMDAwMDsKLSAgICAgICAgICAgIGNoYXJzWzBdID0gMHhkODAwICsgKGNoID4+IDEwKTsKLSAgICAgICAgICAgIGNoYXJzWzFdID0gMHhkYzAwICsgKGNoICYgMHgzZmYpOworICAgICAgICAgICAgY2hhcnNbMF0gPSBQeV9VTklDT0RFX0hJR0hfU1VSUk9HQVRFKGNoKTsKKyAgICAgICAgICAgIGNoYXJzWzFdID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgIGNoYXJzaXplID0gMjsKICAgICAgICAgfQogCkBAIC03Mzk2LDIyMCArNzUzOSwyNTggQEAKIAogLyogLS0tIENoYXJhY3RlciBNYXBwaW5nIENvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBpbnQKK2NoYXJtYXBfZGVjb2RlX3N0cmluZyhjb25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQoreworICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CisgICAgY29uc3QgY2hhciAqZTsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3MsIGVuZGlucG9zOworICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMLCAqZXhjID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IG1hcGxlbjsKKyAgICBlbnVtIFB5VW5pY29kZV9LaW5kIG1hcGtpbmQ7CisgICAgdm9pZCAqbWFwZGF0YTsKKyAgICBQeV9VQ1M0IHg7CisgICAgdW5zaWduZWQgY2hhciBjaDsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobWFwcGluZykgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1hcGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG1hcHBpbmcpOworICAgIG1hcGRhdGEgPSBQeVVuaWNvZGVfREFUQShtYXBwaW5nKTsKKyAgICBtYXBraW5kID0gUHlVbmljb2RlX0tJTkQobWFwcGluZyk7CisKKyAgICBlID0gcyArIHNpemU7CisKKyAgICBpZiAobWFwa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCAmJiBtYXBsZW4gPj0gMjU2KSB7CisgICAgICAgIC8qIGZhc3QtcGF0aCBmb3IgY3AwMzcsIGNwNTAwIGFuZCBpc284ODU5XzEgZW5jb2RpbmdzLiBpc284ODU5XzEKKyAgICAgICAgICogaXMgZGlzYWJsZWQgaW4gZW5jb2RpbmcgYWxpYXNlcywgbGF0aW4xIGlzIHByZWZlcnJlZCBiZWNhdXNlCisgICAgICAgICAqIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBmYXN0ZXIuICovCisgICAgICAgIFB5X1VDUzEgKm1hcGRhdGFfdWNzMSA9IChQeV9VQ1MxICopbWFwZGF0YTsKKyAgICAgICAgUHlfVUNTMSAqb3V0ZGF0YSA9IChQeV9VQ1MxICopd3JpdGVyLT5kYXRhOworICAgICAgICBQeV9VQ1M0IG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisKKyAgICAgICAgYXNzZXJ0ICh3cml0ZXItPmtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpOworICAgICAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgICAgIGNoID0gKnM7CisgICAgICAgICAgICB4ID0gbWFwZGF0YV91Y3MxW2NoXTsKKyAgICAgICAgICAgIGlmICh4ID4gbWF4Y2hhcikgeworICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCAxLCAweGZmKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IChQeV9VQ1MxICopd3JpdGVyLT5kYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0ZGF0YVt3cml0ZXItPnBvc10gPSB4OworICAgICAgICAgICAgd3JpdGVyLT5wb3MrKzsKKyAgICAgICAgICAgICsrczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgaWYgKG1hcGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQgJiYgbWFwbGVuID49IDI1NikgeworICAgICAgICAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBvdXRraW5kID0gd3JpdGVyLT5raW5kOworICAgICAgICAgICAgUHlfVUNTMiAqbWFwZGF0YV91Y3MyID0gKFB5X1VDUzIgKiltYXBkYXRhOworICAgICAgICAgICAgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1MxICpvdXRkYXRhID0gKFB5X1VDUzEgKil3cml0ZXItPmRhdGE7CisgICAgICAgICAgICAgICAgUHlfVUNTNCBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgICAgICAgICAgICAgIHdoaWxlIChzIDwgZSkgeworICAgICAgICAgICAgICAgICAgICBjaCA9ICpzOworICAgICAgICAgICAgICAgICAgICB4ID0gbWFwZGF0YV91Y3MyW2NoXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPiBtYXhjaGFyKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YVt3cml0ZXItPnBvc10gPSB4OworICAgICAgICAgICAgICAgICAgICB3cml0ZXItPnBvcysrOworICAgICAgICAgICAgICAgICAgICArK3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAob3V0a2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgeworICAgICAgICAgICAgICAgIFB5X1VDUzIgKm91dGRhdGEgPSAoUHlfVUNTMiAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqczsKKyAgICAgICAgICAgICAgICAgICAgeCA9IG1hcGRhdGFfdWNzMltjaF07CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IDB4RkZGRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIG91dGRhdGFbd3JpdGVyLT5wb3NdID0geDsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5wb3MrKzsKKyAgICAgICAgICAgICAgICAgICAgKytzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjaCA9ICpzOworCisgICAgICAgIGlmIChjaCA8IG1hcGxlbikKKyAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfUkVBRChtYXBraW5kLCBtYXBkYXRhLCBjaCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHggPSAweGZmZmU7IC8qIGludmFsaWQgdmFsdWUgKi8KK0Vycm9yOgorICAgICAgICBpZiAoeCA9PSAweGZmZmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHVuZGVmaW5lZCBtYXBwaW5nICovCisgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CisgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCisgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgImNoYXJtYXAiLCAiY2hhcmFjdGVyIG1hcHMgdG8gPHVuZGVmaW5lZD4iLAorICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCisgICAgICAgICAgICAgICAgICAgIHdyaXRlcikpIHsKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIHgpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgKytzOworICAgIH0KKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAwOworCitvbkVycm9yOgorICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50CitjaGFybWFwX2RlY29kZV9tYXBwaW5nKGNvbnN0IGNoYXIgKnMsCisgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQoreworICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CisgICAgY29uc3QgY2hhciAqZTsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3MsIGVuZGlucG9zOworICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMLCAqZXhjID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyIGNoOworICAgIFB5T2JqZWN0ICprZXksICppdGVtID0gTlVMTDsKKworICAgIGUgPSBzICsgc2l6ZTsKKworICAgIHdoaWxlIChzIDwgZSkgeworICAgICAgICBjaCA9ICpzOworCisgICAgICAgIC8qIEdldCBtYXBwaW5nIChjaGFyIG9yZGluYWwgLT4gaW50ZWdlciwgVW5pY29kZSBjaGFyIG9yIE5vbmUpICovCisgICAgICAgIGtleSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZyljaCk7CisgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKworICAgICAgICBpdGVtID0gUHlPYmplY3RfR2V0SXRlbShtYXBwaW5nLCBrZXkpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTG9va3VwRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgLyogTm8gbWFwcGluZyBmb3VuZCBtZWFuczogbWFwcGluZyBpcyB1bmRlZmluZWQuICovCisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEFwcGx5IG1hcHBpbmcgKi8KKyAgICAgICAgaWYgKGl0ZW0gPT0gUHlfTm9uZSkKKyAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOworICAgICAgICBpZiAoUHlMb25nX0NoZWNrKGl0ZW0pKSB7CisgICAgICAgICAgICBsb25nIHZhbHVlID0gUHlMb25nX0FTX0xPTkcoaXRlbSk7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQorICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOworICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IE1BWF9VTklDT0RFKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgYmUgaW4gcmFuZ2UoMHglbHgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpTUFYX1VOSUNPREUgKyAxKTsKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIHZhbHVlKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhpdGVtKSkgeworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShpdGVtKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoaXRlbSkgPT0gMSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgdmFsdWUgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKGl0ZW0sIDApOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAweEZGRkUpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIHZhbHVlKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIGl0ZW0pID09IC0xKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiB3cm9uZyByZXR1cm4gdmFsdWUgKi8KKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgcmV0dXJuIGludGVnZXIsIE5vbmUgb3Igc3RyIik7CisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoaXRlbSk7CisgICAgICAgICsrczsKKyAgICAgICAgY29udGludWU7CisKK1VuZGVmaW5lZDoKKyAgICAgICAgLyogdW5kZWZpbmVkIG1hcHBpbmcgKi8KKyAgICAgICAgUHlfQ0xFQVIoaXRlbSk7CisgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKKyAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzE7CisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCisgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAorICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKKyAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCisgICAgICAgICAgICAgICAgd3JpdGVyKSkgeworICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICB9CisgICAgfQorICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgcmV0dXJuIDA7CisKK29uRXJyb3I6CisgICAgUHlfWERFQ1JFRihpdGVtKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAtMTsKK30KKwogUHlPYmplY3QgKgogUHlVbmljb2RlX0RlY29kZUNoYXJtYXAoY29uc3QgY2hhciAqcywKICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptYXBwaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewotICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7Ci0gICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwotICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgY29uc3QgY2hhciAqZTsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBQeV9zc2l6ZV90IGV4dHJhY2hhcnMgPSAwOwotICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCiAgICAgLyogRGVmYXVsdCB0byBMYXRpbi0xICovCiAgICAgaWYgKG1hcHBpbmcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVMYXRpbjEocywgc2l6ZSwgZXJyb3JzKTsKIAotICAgIHYgPSBQeVVuaWNvZGVfTmV3KHNpemUsIDEyNyk7Ci0gICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIGlmIChzaXplID09IDApCi0gICAgICAgIHJldHVybiB2OwotICAgIG91dHBvcyA9IDA7Ci0gICAgZSA9IHMgKyBzaXplOworICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChtYXBwaW5nKSkgewotICAgICAgICBQeV9zc2l6ZV90IG1hcGxlbjsKLSAgICAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBtYXBraW5kOwotICAgICAgICB2b2lkICptYXBkYXRhOwotICAgICAgICBQeV9VQ1M0IHg7Ci0KLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShtYXBwaW5nKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIG1hcGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG1hcHBpbmcpOwotICAgICAgICBtYXBkYXRhID0gUHlVbmljb2RlX0RBVEEobWFwcGluZyk7Ci0gICAgICAgIG1hcGtpbmQgPSBQeVVuaWNvZGVfS0lORChtYXBwaW5nKTsKLSAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoOwotICAgICAgICAgICAgaWYgKG1hcGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQgJiYgbWFwbGVuID49IDI1NikgewotICAgICAgICAgICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQgb3V0a2luZCA9IFB5VW5pY29kZV9LSU5EKHYpOwotICAgICAgICAgICAgICAgIGlmIChvdXRraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGRhdGEgPSBQeVVuaWNvZGVfREFUQSh2KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHYpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSAqczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfUkVBRChQeVVuaWNvZGVfMkJZVEVfS0lORCwgbWFwZGF0YSwgY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPiBtYXhjaGFyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlXzFCWVRFX0tJTkQsIG91dGRhdGEsIG91dHBvcysrLCB4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0a2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgewotICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRkYXRhID0gUHlVbmljb2RlX0RBVEEodik7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChzIDwgZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaCA9ICpzOwotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFB5VW5pY29kZV9SRUFEKFB5VW5pY29kZV8yQllURV9LSU5ELCBtYXBkYXRhLCBjaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAweEZGRkUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBFcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfMkJZVEVfS0lORCwgb3V0ZGF0YSwgb3V0cG9zKyssIHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgKytzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoID0gKnM7Ci0KLSAgICAgICAgICAgIGlmIChjaCA8IG1hcGxlbikKLSAgICAgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQobWFwa2luZCwgbWFwZGF0YSwgY2gpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHggPSAweGZmZmU7IC8qIGludmFsaWQgdmFsdWUgKi8KLUVycm9yOgotICAgICAgICAgICAgaWYgKHggPT0gMHhmZmZlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIHVuZGVmaW5lZCBtYXBwaW5nICovCi0gICAgICAgICAgICAgICAgc3RhcnRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcysxOwotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkgewotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCB4KSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgKytzOwotICAgICAgICB9CisgICAgICAgIGlmIChjaGFybWFwX2RlY29kZV9zdHJpbmcocywgc2l6ZSwgbWFwcGluZywgZXJyb3JzLCAmd3JpdGVyKSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSAqczsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp3LCAqeDsKLQotICAgICAgICAgICAgLyogR2V0IG1hcHBpbmcgKGNoYXIgb3JkaW5hbCAtPiBpbnRlZ2VyLCBVbmljb2RlIGNoYXIgb3IgTm9uZSkgKi8KLSAgICAgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpY2gpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShtYXBwaW5nLCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Mb29rdXBFcnJvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogTm8gbWFwcGluZyBmb3VuZCBtZWFuczogbWFwcGluZyBpcyB1bmRlZmluZWQuICovCi0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIEFwcGx5IG1hcHBpbmcgKi8KLSAgICAgICAgICAgIGlmICh4ID09IFB5X05vbmUpCi0gICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7Ci0gICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHgpKSB7Ci0gICAgICAgICAgICAgICAgbG9uZyB2YWx1ZSA9IFB5TG9uZ19BU19MT05HKHgpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAweEZGRkUpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiBNQVhfVU5JQ09ERSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgYmUgaW4gcmFuZ2UoMHglbHgpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKU1BWF9VTklDT0RFICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCB2YWx1ZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh4KSkgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgdGFyZ2V0c2l6ZTsKLQotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoeCkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRhcmdldHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh4KTsKLQotICAgICAgICAgICAgICAgIGlmICh0YXJnZXRzaXplID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogMS0xIG1hcHBpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCB2YWx1ZSA9IFB5VW5pY29kZV9SRUFEX0NIQVIoeCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAweEZGRkUpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgdmFsdWUpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldHNpemUgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIDEtbiBtYXBwaW5nICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRzaXplID4gZXh0cmFjaGFycykgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzaXplIGZpcnN0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5lZWRlZCA9ICh0YXJnZXRzaXplIC0gZXh0cmFjaGFycykgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldHNpemUgPDwgMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWNoYXJzICs9IG5lZWRlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCBvdmVyZmxvdyBkZXRlY3Rpb24gbWlzc2luZyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpICsgbmVlZGVkKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV93aWRlbigmdiwgb3V0cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoeCkpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db3B5Q2hhcmFjdGVycyh2LCBvdXRwb3MsIHgsIDAsIHRhcmdldHNpemUpOwotICAgICAgICAgICAgICAgICAgICBvdXRwb3MgKz0gdGFyZ2V0c2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFjaGFycyAtPSB0YXJnZXRzaXplOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiAxLTAgbWFwcGluZzogc2tpcCB0aGUgY2hhcmFjdGVyICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiB3cm9uZyByZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhcmFjdGVyIG1hcHBpbmcgbXVzdCByZXR1cm4gaW50ZWdlciwgTm9uZSBvciBzdHIiKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgKytzOwotICAgICAgICAgICAgY29udGludWU7Ci1VbmRlZmluZWQ6Ci0gICAgICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLwotICAgICAgICAgICAgUHlfWERFQ1JFRih4KTsKLSAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcysxOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAotICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKLSAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpIHsKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGNoYXJtYXBfZGVjb2RlX21hcHBpbmcocywgc2l6ZSwgbWFwcGluZywgZXJyb3JzLCAmd3JpdGVyKSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7Ci0gICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7Ci0gICAgUHlfWERFQ1JFRihleGMpOwotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC04MTIzLDEwICs4MzA0LDE0IEBACiAgICAgICogLTE9bm90IGluaXRpYWxpemVkLCAwPXVua25vd24sIDE9c3RyaWN0LCAyPXJlcGxhY2UsCiAgICAgICogMz1pZ25vcmUsIDQ9eG1sY2hhcnJlZnJlcGxhY2UgKi8KICAgICBpbnQga25vd25fZXJyb3JIYW5kbGVyID0gLTE7CisgICAgdm9pZCAqZGF0YTsKKyAgICBpbnQga2luZDsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodW5pY29kZSkgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmljb2RlKTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOwogCiAgICAgLyogRGVmYXVsdCB0byBMYXRpbi0xICovCiAgICAgaWYgKG1hcHBpbmcgPT0gTlVMTCkKQEAgLTgxNDEsNyArODMyNiw3IEBACiAgICAgICAgIHJldHVybiByZXM7CiAKICAgICB3aGlsZSAoaW5wb3M8c2l6ZSkgewotICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQURfQ0hBUih1bmljb2RlLCBpbnBvcyk7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpbnBvcyk7CiAgICAgICAgIC8qIHRyeSB0byBlbmNvZGUgaXQgKi8KICAgICAgICAgY2hhcm1hcGVuY29kZV9yZXN1bHQgeCA9IGNoYXJtYXBlbmNvZGVfb3V0cHV0KGNoLCBtYXBwaW5nLCAmcmVzLCAmcmVzcG9zKTsKICAgICAgICAgaWYgKHg9PWVuY19FWENFUFRJT04pIC8qIGVycm9yICovCkBAIC04MjI2LDE5ICs4NDExLDYgQEAKICAgICB9CiB9CiAKLS8qIHJhaXNlcyBhIFVuaWNvZGVUcmFuc2xhdGVFcnJvciAqLwotc3RhdGljIHZvaWQKLXJhaXNlX3RyYW5zbGF0ZV9leGNlcHRpb24oUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmljb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0cG9zLCBQeV9zc2l6ZV90IGVuZHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVhc29uKQotewotICAgIG1ha2VfdHJhbnNsYXRlX2V4Y2VwdGlvbihleGNlcHRpb25PYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUsIHN0YXJ0cG9zLCBlbmRwb3MsIHJlYXNvbik7Ci0gICAgaWYgKCpleGNlcHRpb25PYmplY3QgIT0gTlVMTCkKLSAgICAgICAgUHlDb2RlY19TdHJpY3RFcnJvcnMoKmV4Y2VwdGlvbk9iamVjdCk7Ci19Ci0KIC8qIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGhlbHBlcjoKICAgIGJ1aWxkIGFyZ3VtZW50cywgY2FsbCB0aGUgY2FsbGJhY2sgYW5kIGNoZWNrIHRoZSBhcmd1bWVudHMsCiAgICBwdXQgdGhlIHJlc3VsdCBpbnRvIG5ld3BvcyBhbmQgcmV0dXJuIHRoZSByZXBsYWNlbWVudCBzdHJpbmcsIHdoaWNoCkBAIC04NTE0LDggKzg2ODYsMTAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN3aXRjaCAoa25vd25fZXJyb3JIYW5kbGVyKSB7CiAgICAgICAgICAgICBjYXNlIDE6IC8qIHN0cmljdCAqLwotICAgICAgICAgICAgICAgIHJhaXNlX3RyYW5zbGF0ZV9leGNlcHRpb24oJmV4YywgaW5wdXQsIGNvbGxzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlbmQsIHJlYXNvbik7CisgICAgICAgICAgICAgICAgbWFrZV90cmFuc2xhdGVfZXhjZXB0aW9uKCZleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBjb2xsc3RhcnQsIGNvbGxlbmQsIHJlYXNvbik7CisgICAgICAgICAgICAgICAgaWYgKGV4YyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBQeUNvZGVjX1N0cmljdEVycm9ycyhleGMpOwogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNhc2UgMjogLyogcmVwbGFjZSAqLwogICAgICAgICAgICAgICAgIC8qIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHNwYWNlLCB0aGlzIGlzIGEgMToxIHJlcGxhY2VtZW50ICovCkBAIC05MTA3LDcgKzkyODEsNyBAQAogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSB8fAogICAgICAgICBQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChzdWJzdHJpbmcpID09IDApCiAgICAgICAgIHJldHVybiAxOwpAQCAtOTE0NSw3ICs5MzE5LDYgQEAKICAgICAgICAgICAgIC8qIFdlIGRvIG5vdCBuZWVkIHRvIGNvbXBhcmUgMCBhbmQgbGVuKHN1YnN0cmluZyktMSBiZWNhdXNlCiAgICAgICAgICAgICAgICB0aGUgaWYgc3RhdGVtZW50IGFib3ZlIGVuc3VyZWQgYWxyZWFkeSB0aGF0IHRoZXkgYXJlIGVxdWFsCiAgICAgICAgICAgICAgICB3aGVuIHdlIGVuZCB1cCBoZXJlLiAqLwotICAgICAgICAgICAgLyogVE9ETzogaG9ub3IgZGlyZWN0aW9uIGFuZCBkbyBhIGZvcndhcmQgb3IgYmFja3dhcmRzIHNlYXJjaCAqLwogICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGVuZF9zdWI7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kX3NlbGYsIGRhdGFfc2VsZiwgb2Zmc2V0ICsgaSkgIT0KICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZF9zdWIsIGRhdGFfc3ViLCBpKSkKQEAgLTk2MDcsNDEgKzk3ODAsNDkgQEAKICAgICAgICAgICAgIHNlcF9kYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEoc2VwKTsKICAgICB9CiAjZW5kaWYKLSAgICBmb3IgKGkgPSAwLCByZXNfb2Zmc2V0ID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKLSAgICAgICAgaXRlbSA9IGl0ZW1zW2ldOwotICAgICAgICAvKiBDb3B5IGl0ZW0sIGFuZCBtYXliZSB0aGUgc2VwYXJhdG9yLiAqLwotICAgICAgICBpZiAoaSAmJiBzZXBsZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKHVzZV9tZW1jcHkpIHsKKyAgICBpZiAodXNlX21lbWNweSkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTsKKworICAgICAgICAgICAgLyogQ29weSBpdGVtLCBhbmQgbWF5YmUgdGhlIHNlcGFyYXRvci4gKi8KKyAgICAgICAgICAgIGlmIChpICYmIHNlcGxlbiAhPSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfTUVNQ1BZKHJlc19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZCAqIHNlcGxlbik7CiAgICAgICAgICAgICAgICAgcmVzX2RhdGEgKz0ga2luZCAqIHNlcGxlbjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcywgcmVzX29mZnNldCwgc2VwLCAwLCBzZXBsZW4pOwotICAgICAgICAgICAgICAgIHJlc19vZmZzZXQgKz0gc2VwbGVuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGl0ZW1sZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpdGVtKTsKLSAgICAgICAgaWYgKGl0ZW1sZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKHVzZV9tZW1jcHkpIHsKKworICAgICAgICAgICAgaXRlbWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pOworICAgICAgICAgICAgaWYgKGl0ZW1sZW4gIT0gMCkgewogICAgICAgICAgICAgICAgIFB5X01FTUNQWShyZXNfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0RBVEEoaXRlbSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQgKiBpdGVtbGVuKTsKICAgICAgICAgICAgICAgICByZXNfZGF0YSArPSBraW5kICogaXRlbWxlbjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICB9CisgICAgICAgIGFzc2VydChyZXNfZGF0YSA9PSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICArIGtpbmQgKiBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXMpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDAsIHJlc19vZmZzZXQgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTsKKworICAgICAgICAgICAgLyogQ29weSBpdGVtLCBhbmQgbWF5YmUgdGhlIHNlcGFyYXRvci4gKi8KKyAgICAgICAgICAgIGlmIChpICYmIHNlcGxlbiAhPSAwKSB7CisgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMocmVzLCByZXNfb2Zmc2V0LCBzZXAsIDAsIHNlcGxlbik7CisgICAgICAgICAgICAgICAgcmVzX29mZnNldCArPSBzZXBsZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZW1sZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpdGVtKTsKKyAgICAgICAgICAgIGlmIChpdGVtbGVuICE9IDApIHsKICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXMsIHJlc19vZmZzZXQsIGl0ZW0sIDAsIGl0ZW1sZW4pOwogICAgICAgICAgICAgICAgIHJlc19vZmZzZXQgKz0gaXRlbWxlbjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KLSAgICBpZiAodXNlX21lbWNweSkKLSAgICAgICAgYXNzZXJ0KHJlc19kYXRhID09IFB5VW5pY29kZV8xQllURV9EQVRBKHJlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICsga2luZCAqIFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcykpOwotICAgIGVsc2UKICAgICAgICAgYXNzZXJ0KHJlc19vZmZzZXQgPT0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzKSk7CisgICAgfQogCiAgICAgUHlfREVDUkVGKGZzZXEpOwogICAgIFB5X1hERUNSRUYoc2VwKTsKQEAgLTEwMDMzLDYgKzEwMjE0LDMxIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCityZXBsYWNlXzFjaGFyX2lucGxhY2UoUHlPYmplY3QgKnUsIFB5X3NzaXplX3QgcG9zLAorICAgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgdTEsIFB5X1VDUzQgdTIsIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1KTsKKyAgICB2b2lkICpkYXRhID0gUHlVbmljb2RlX0RBVEEodSk7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1KTsKKyAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgeworICAgICAgICB1Y3MxbGliX3JlcGxhY2VfMWNoYXJfaW5wbGFjZSgoUHlfVUNTMSAqKWRhdGEgKyBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MxICopZGF0YSArIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEsIHUyLCBtYXhjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgdWNzMmxpYl9yZXBsYWNlXzFjaGFyX2lucGxhY2UoKFB5X1VDUzIgKilkYXRhICsgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMiAqKWRhdGEgKyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxLCB1MiwgbWF4Y291bnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOworICAgICAgICB1Y3M0bGliX3JlcGxhY2VfMWNoYXJfaW5wbGFjZSgoUHlfVUNTNCAqKWRhdGEgKyBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1M0ICopZGF0YSArIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEsIHUyLCBtYXhjb3VudCk7CisgICAgfQorfQorCiBzdGF0aWMgUHlPYmplY3QgKgogcmVwbGFjZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cjEsCiAgICAgICAgIFB5T2JqZWN0ICpzdHIyLCBQeV9zc2l6ZV90IG1heGNvdW50KQpAQCAtMTAwNDksNyArMTAyNTUsNyBAQAogICAgIFB5X3NzaXplX3QgbGVuMSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjEpOwogICAgIFB5X3NzaXplX3QgbGVuMiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjIpOwogICAgIGludCBtYXlzaHJpbms7Ci0gICAgUHlfVUNTNCBtYXhjaGFyLCBtYXhjaGFyX3N0cjI7CisgICAgUHlfVUNTNCBtYXhjaGFyLCBtYXhjaGFyX3N0cjEsIG1heGNoYXJfc3RyMjsKIAogICAgIGlmIChtYXhjb3VudCA8IDApCiAgICAgICAgIG1heGNvdW50ID0gUFlfU1NJWkVfVF9NQVg7CkBAIC0xMDA1OCwxNSArMTAyNjQsMTYgQEAKIAogICAgIGlmIChzdHIxID09IHN0cjIpCiAgICAgICAgIGdvdG8gbm90aGluZzsKLSAgICBpZiAoc2tpbmQgPCBraW5kMSkKLSAgICAgICAgLyogc3Vic3RyaW5nIHRvbyB3aWRlIHRvIGJlIHByZXNlbnQgKi8KLSAgICAgICAgZ290byBub3RoaW5nOwogCiAgICAgbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzZWxmKTsKKyAgICBtYXhjaGFyX3N0cjEgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyMSk7CisgICAgaWYgKG1heGNoYXIgPCBtYXhjaGFyX3N0cjEpCisgICAgICAgIC8qIHN1YnN0cmluZyB0b28gd2lkZSB0byBiZSBwcmVzZW50ICovCisgICAgICAgIGdvdG8gbm90aGluZzsKICAgICBtYXhjaGFyX3N0cjIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyMik7CiAgICAgLyogUmVwbGFjaW5nIHN0cjEgd2l0aCBzdHIyIG1heSBjYXVzZSBhIG1heGNoYXIgcmVkdWN0aW9uIGluIHRoZQogICAgICAgIHJlc3VsdCBzdHJpbmcuICovCi0gICAgbWF5c2hyaW5rID0gKG1heGNoYXJfc3RyMiA8IG1heGNoYXIpOworICAgIG1heXNocmluayA9IChtYXhjaGFyX3N0cjIgPCBtYXhjaGFyX3N0cjEpICYmIChtYXhjaGFyID09IG1heGNoYXJfc3RyMSk7CiAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBtYXhjaGFyX3N0cjIpOwogCiAgICAgaWYgKGxlbjEgPT0gbGVuMikgewpAQCAtMTAwNzYsMzUgKzEwMjgzLDE5IEBACiAgICAgICAgIGlmIChsZW4xID09IDEpIHsKICAgICAgICAgICAgIC8qIHJlcGxhY2UgY2hhcmFjdGVycyAqLwogICAgICAgICAgICAgUHlfVUNTNCB1MSwgdTI7Ci0gICAgICAgICAgICBpbnQgcmtpbmQ7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGluZGV4LCBwb3M7Ci0gICAgICAgICAgICBjaGFyICpzcmM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IHBvczsKIAotICAgICAgICAgICAgdTEgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0cjEsIDApOwotICAgICAgICAgICAgcG9zID0gZmluZGNoYXIoc2J1ZiwgUHlVbmljb2RlX0tJTkQoc2VsZiksIHNsZW4sIHUxLCAxKTsKKyAgICAgICAgICAgIHUxID0gUHlVbmljb2RlX1JFQUQoa2luZDEsIGJ1ZjEsIDApOworICAgICAgICAgICAgcG9zID0gZmluZGNoYXIoc2J1Ziwgc2tpbmQsIHNsZW4sIHUxLCAxKTsKICAgICAgICAgICAgIGlmIChwb3MgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gbm90aGluZzsKLSAgICAgICAgICAgIHUyID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHIyLCAwKTsKKyAgICAgICAgICAgIHUyID0gUHlVbmljb2RlX1JFQUQoa2luZDIsIGJ1ZjIsIDApOwogICAgICAgICAgICAgdSA9IFB5VW5pY29kZV9OZXcoc2xlbiwgbWF4Y2hhcik7CiAgICAgICAgICAgICBpZiAoIXUpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHUsIDAsIHNlbGYsIDAsIHNsZW4pOwotICAgICAgICAgICAgcmtpbmQgPSBQeVVuaWNvZGVfS0lORCh1KTsKIAotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHJraW5kLCBQeVVuaWNvZGVfREFUQSh1KSwgcG9zLCB1Mik7Ci0gICAgICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgICAgICBzcmMgPSBzYnVmOwotICAgICAgICAgICAgd2hpbGUgKC0tbWF4Y291bnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICAgICAgc3JjICs9IHBvcyAqIFB5VW5pY29kZV9LSU5EKHNlbGYpOwotICAgICAgICAgICAgICAgIHNsZW4gLT0gcG9zOwotICAgICAgICAgICAgICAgIGluZGV4ICs9IHBvczsKLSAgICAgICAgICAgICAgICBwb3MgPSBmaW5kY2hhcihzcmMsIFB5VW5pY29kZV9LSU5EKHNlbGYpLCBzbGVuLCB1MSwgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA8IDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShya2luZCwgUHlVbmljb2RlX0RBVEEodSksIGluZGV4ICsgcG9zLCB1Mik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh1LCAwLCBzZWxmLCAwLCBzbGVuKTsKKyAgICAgICAgICAgIHJlcGxhY2VfMWNoYXJfaW5wbGFjZSh1LCBwb3MsIHUxLCB1MiwgbWF4Y291bnQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaW50IHJraW5kID0gc2tpbmQ7CkBAIC0xMDQxNiw5ICsxMDYwNywyNCBAQAogc3RhdGljIGludAogdW5pY29kZV9jb21wYXJlKFB5T2JqZWN0ICpzdHIxLCBQeU9iamVjdCAqc3RyMikKIHsKKyNkZWZpbmUgQ09NUEFSRShUWVBFMSwgVFlQRTIpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgVFlQRTEqIHAxID0gKFRZUEUxICopZGF0YTE7IFwKKyAgICAgICAgVFlQRTIqIHAyID0gKFRZUEUyICopZGF0YTI7IFwKKyAgICAgICAgVFlQRTEqIGVuZCA9IHAxICsgbGVuOyBcCisgICAgICAgIFB5X1VDUzQgYzEsIGMyOyBcCisgICAgICAgIGZvciAoOyBwMSAhPSBlbmQ7IHAxKyssIHAyKyspIHsgXAorICAgICAgICAgICAgYzEgPSAqcDE7IFwKKyAgICAgICAgICAgIGMyID0gKnAyOyBcCisgICAgICAgICAgICBpZiAoYzEgIT0gYzIpIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gKGMxIDwgYzIpID8gLTEgOiAxOyBcCisgICAgICAgIH0gXAorICAgIH0gXAorICAgIHdoaWxlICgwKQorCiAgICAgaW50IGtpbmQxLCBraW5kMjsKICAgICB2b2lkICpkYXRhMSwgKmRhdGEyOwotICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMiwgaTsKKyAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjIsIGxlbjsKIAogICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoc3RyMSk7CiAgICAga2luZDIgPSBQeVVuaWNvZGVfS0lORChzdHIyKTsKQEAgLTEwNDI2LDE5ICsxMDYzMiwxMTYgQEAKICAgICBkYXRhMiA9IFB5VW5pY29kZV9EQVRBKHN0cjIpOwogICAgIGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIxKTsKICAgICBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMik7CisgICAgbGVuID0gUHlfTUlOKGxlbjEsIGxlbjIpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbjEgJiYgaSA8IGxlbjI7ICsraSkgewotICAgICAgICBQeV9VQ1M0IGMxLCBjMjsKLSAgICAgICAgYzEgPSBQeVVuaWNvZGVfUkVBRChraW5kMSwgZGF0YTEsIGkpOwotICAgICAgICBjMiA9IFB5VW5pY29kZV9SRUFEKGtpbmQyLCBkYXRhMiwgaSk7Ci0KLSAgICAgICAgaWYgKGMxICE9IGMyKQotICAgICAgICAgICAgcmV0dXJuIChjMSA8IGMyKSA/IC0xIDogMTsKKyAgICBzd2l0Y2goa2luZDEpIHsKKyAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgc3dpdGNoKGtpbmQyKSB7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBjbXAgPSBtZW1jbXAoZGF0YTEsIGRhdGEyLCBsZW4pOworICAgICAgICAgICAgLyogbm9ybWFsaXplIHJlc3VsdCBvZiBtZW1jbXAoKSBpbnRvIHRoZSByYW5nZSBbLTE7IDFdICovCisgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzEsIFB5X1VDUzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzEsIFB5X1VDUzQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBzd2l0Y2goa2luZDIpIHsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMiwgUHlfVUNTMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MyLCBQeV9VQ1MyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzIsIFB5X1VDUzQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBzd2l0Y2goa2luZDIpIHsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTNCwgUHlfVUNTMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTNCwgUHlfVUNTMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgeworI2lmIGRlZmluZWQoSEFWRV9XTUVNQ01QKSAmJiBTSVpFT0ZfV0NIQVJfVCA9PSA0CisgICAgICAgICAgICBpbnQgY21wID0gd21lbWNtcCgod2NoYXJfdCAqKWRhdGExLCAod2NoYXJfdCAqKWRhdGEyLCBsZW4pOworICAgICAgICAgICAgLyogbm9ybWFsaXplIHJlc3VsdCBvZiB3bWVtY21wKCkgaW50byB0aGUgcmFuZ2UgWy0xOyAxXSAqLworICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisjZWxzZQorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1M0LCBQeV9VQ1M0KTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOwogICAgIH0KIAotICAgIHJldHVybiAobGVuMSA8IGxlbjIpID8gLTEgOiAobGVuMSAhPSBsZW4yKTsKKyAgICBpZiAobGVuMSA9PSBsZW4yKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobGVuMSA8IGxlbjIpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAxOworCisjdW5kZWYgQ09NUEFSRQogfQogCitQeV9MT0NBTChpbnQpCit1bmljb2RlX2NvbXBhcmVfZXEoUHlPYmplY3QgKnN0cjEsIFB5T2JqZWN0ICpzdHIyKQoreworICAgIGludCBraW5kOworICAgIHZvaWQgKmRhdGExLCAqZGF0YTI7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgaW50IGNtcDsKKworICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjEpOworICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIyKSAhPSBsZW4pCisgICAgICAgIHJldHVybiAwOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzdHIxKTsKKyAgICBpZiAoUHlVbmljb2RlX0tJTkQoc3RyMikgIT0ga2luZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZGF0YTEgPSBQeVVuaWNvZGVfREFUQShzdHIxKTsKKyAgICBkYXRhMiA9IFB5VW5pY29kZV9EQVRBKHN0cjIpOworCisgICAgY21wID0gbWVtY21wKGRhdGExLCBkYXRhMiwgbGVuICoga2luZCk7CisgICAgcmV0dXJuIChjbXAgPT0gMCk7Cit9CisKKwogaW50CiBQeVVuaWNvZGVfQ29tcGFyZShQeU9iamVjdCAqbGVmdCwgUHlPYmplY3QgKnJpZ2h0KQogewpAQCAtMTA0NDYsNiArMTA3NDksMTEgQEAKICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShsZWZ0KSA9PSAtMSB8fAogICAgICAgICAgICAgUHlVbmljb2RlX1JFQURZKHJpZ2h0KSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICAvKiBhIHN0cmluZyBpcyBlcXVhbCB0byBpdHNlbGYgKi8KKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAgICByZXR1cm4gMDsKKwogICAgICAgICByZXR1cm4gdW5pY29kZV9jb21wYXJlKGxlZnQsIHJpZ2h0KTsKICAgICB9CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKQEAgLTEwNDU2LDI5ICsxMDc2NCw1OSBAQAogfQogCiBpbnQKK19QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChQeU9iamVjdCAqbGVmdCwgX1B5X0lkZW50aWZpZXIgKnJpZ2h0KQoreworICAgIFB5T2JqZWN0ICpyaWdodF9zdHIgPSBfUHlVbmljb2RlX0Zyb21JZChyaWdodCk7ICAgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAocmlnaHRfc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0NvbXBhcmUobGVmdCwgcmlnaHRfc3RyKTsKK30KKworaW50CiBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhQeU9iamVjdCogdW5pLCBjb25zdCBjaGFyKiBzdHIpCiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBraW5kOwotICAgIHZvaWQgKmRhdGE7CiAgICAgUHlfVUNTNCBjaHI7CiAKICAgICBhc3NlcnQoX1B5VW5pY29kZV9DSEVDSyh1bmkpKTsKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaSkgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pKTsKLSAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pKTsKLSAgICAvKiBDb21wYXJlIFVuaWNvZGUgc3RyaW5nIGFuZCBzb3VyY2UgY2hhcmFjdGVyIHNldCBzdHJpbmcgKi8KLSAgICBmb3IgKGkgPSAwOyAoY2hyID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpICYmIHN0cltpXTsgaSsrKQotICAgICAgICBpZiAoY2hyICE9IHN0cltpXSkKLSAgICAgICAgICAgIHJldHVybiAoY2hyIDwgKHVuc2lnbmVkIGNoYXIpKHN0cltpXSkpID8gLTEgOiAxOwotICAgIC8qIFRoaXMgY2hlY2sga2VlcHMgUHl0aG9uIHN0cmluZ3MgdGhhdCBlbmQgaW4gJ1wwJyBmcm9tIGNvbXBhcmluZyBlcXVhbAotICAgICB0byBDIHN0cmluZ3MgaWRlbnRpY2FsIHVwIHRvIHRoYXQgcG9pbnQuICovCi0gICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaSkgIT0gaSB8fCBjaHIpCi0gICAgICAgIHJldHVybiAxOyAvKiB1bmkgaXMgbG9uZ2VyICovCi0gICAgaWYgKHN0cltpXSkKLSAgICAgICAgcmV0dXJuIC0xOyAvKiBzdHIgaXMgbG9uZ2VyICovCi0gICAgcmV0dXJuIDA7CisgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHVuaSk7CisgICAgICAgIHNpemVfdCBsZW4xID0gKHNpemVfdClQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmkpOworICAgICAgICBzaXplX3QgbGVuLCBsZW4yID0gc3RybGVuKHN0cik7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgbGVuID0gUHlfTUlOKGxlbjEsIGxlbjIpOworICAgICAgICBjbXAgPSBtZW1jbXAoZGF0YSwgc3RyLCBsZW4pOworICAgICAgICBpZiAoY21wICE9IDApIHsKKyAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGVuMSA+IGxlbjIpCisgICAgICAgICAgICByZXR1cm4gMTsgLyogdW5pIGlzIGxvbmdlciAqLworICAgICAgICBpZiAobGVuMiA+IGxlbjEpCisgICAgICAgICAgICByZXR1cm4gLTE7IC8qIHN0ciBpcyBsb25nZXIgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB2b2lkICpkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pKTsKKyAgICAgICAgLyogQ29tcGFyZSBVbmljb2RlIHN0cmluZyBhbmQgc291cmNlIGNoYXJhY3RlciBzZXQgc3RyaW5nICovCisgICAgICAgIGZvciAoaSA9IDA7IChjaHIgPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSkgJiYgc3RyW2ldOyBpKyspCisgICAgICAgICAgICBpZiAoY2hyICE9IHN0cltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGNociA8ICh1bnNpZ25lZCBjaGFyKShzdHJbaV0pKSA/IC0xIDogMTsKKyAgICAgICAgLyogVGhpcyBjaGVjayBrZWVwcyBQeXRob24gc3RyaW5ncyB0aGF0IGVuZCBpbiAnXDAnIGZyb20gY29tcGFyaW5nIGVxdWFsCisgICAgICAgICB0byBDIHN0cmluZ3MgaWRlbnRpY2FsIHVwIHRvIHRoYXQgcG9pbnQuICovCisgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmkpICE9IGkgfHwgY2hyKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8qIHVuaSBpcyBsb25nZXIgKi8KKyAgICAgICAgaWYgKHN0cltpXSkKKyAgICAgICAgICAgIHJldHVybiAtMTsgLyogc3RyIGlzIGxvbmdlciAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiB9CiAKIApAQCAtMTA0ODksMzYgKzEwODI3LDQzIEBACiBQeVVuaWNvZGVfUmljaENvbXBhcmUoUHlPYmplY3QgKmxlZnQsIFB5T2JqZWN0ICpyaWdodCwgaW50IG9wKQogewogICAgIGludCByZXN1bHQ7CisgICAgUHlPYmplY3QgKnY7CiAKLSAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGxlZnQpICYmIFB5VW5pY29kZV9DaGVjayhyaWdodCkpIHsKLSAgICAgICAgUHlPYmplY3QgKnY7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobGVmdCkgPT0gLTEgfHwKLSAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEWShyaWdodCkgPT0gLTEpCisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sobGVmdCkgfHwgIVB5VW5pY29kZV9DaGVjayhyaWdodCkpCisgICAgICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobGVmdCkgPT0gLTEgfHwKKyAgICAgICAgUHlVbmljb2RlX1JFQURZKHJpZ2h0KSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAobGVmdCA9PSByaWdodCkgeworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgUHlfRVE6CisgICAgICAgIGNhc2UgUHlfTEU6CisgICAgICAgIGNhc2UgUHlfR0U6CisgICAgICAgICAgICAvKiBhIHN0cmluZyBpcyBlcXVhbCB0byBpdHNlbGYgKi8KKyAgICAgICAgICAgIHYgPSBQeV9UcnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlfTkU6CisgICAgICAgIGNhc2UgUHlfTFQ6CisgICAgICAgIGNhc2UgUHlfR1Q6CisgICAgICAgICAgICB2ID0gUHlfRmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGxlZnQpICE9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJpZ2h0KSB8fAotICAgICAgICAgICAgUHlVbmljb2RlX0tJTkQobGVmdCkgIT0gUHlVbmljb2RlX0tJTkQocmlnaHQpKSB7Ci0gICAgICAgICAgICBpZiAob3AgPT0gUHlfRVEpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9GYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBQeV9ORSkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlfVHJ1ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IHVuaWNvZGVfY29tcGFyZShsZWZ0LCByaWdodCk7CisgICAgfQorICAgIGVsc2UgaWYgKG9wID09IFB5X0VRIHx8IG9wID09IFB5X05FKSB7CisgICAgICAgIHJlc3VsdCA9IHVuaWNvZGVfY29tcGFyZV9lcShsZWZ0LCByaWdodCk7CisgICAgICAgIHJlc3VsdCBePSAob3AgPT0gUHlfTkUpOworICAgICAgICB2ID0gVEVTVF9DT05EKHJlc3VsdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSB1bmljb2RlX2NvbXBhcmUobGVmdCwgcmlnaHQpOwogCiAgICAgICAgIC8qIENvbnZlcnQgdGhlIHJldHVybiB2YWx1ZSB0byBhIEJvb2xlYW4gKi8KICAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFB5X0VROgotICAgICAgICAgICAgdiA9IFRFU1RfQ09ORChyZXN1bHQgPT0gMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQeV9ORToKLSAgICAgICAgICAgIHYgPSBURVNUX0NPTkQocmVzdWx0ICE9IDApOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUHlfTEU6CiAgICAgICAgICAgICB2ID0gVEVTVF9DT05EKHJlc3VsdCA8PSAwKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA1MzUsMTggKzEwODgwLDE2IEBACiAgICAgICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKHYpOwotICAgICAgICByZXR1cm4gdjsKICAgICB9Ci0KLSAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CisgICAgUHlfSU5DUkVGKHYpOworICAgIHJldHVybiB2OwogfQogCiBpbnQKIFB5VW5pY29kZV9Db250YWlucyhQeU9iamVjdCAqY29udGFpbmVyLCBQeU9iamVjdCAqZWxlbWVudCkKIHsKICAgICBQeU9iamVjdCAqc3RyLCAqc3ViOwotICAgIGludCBraW5kMSwga2luZDIsIGtpbmQ7CisgICAgaW50IGtpbmQxLCBraW5kMjsKICAgICB2b2lkICpidWYxLCAqYnVmMjsKICAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CiAgICAgaW50IHJlc3VsdDsKQEAgLTEwNTY1LDIzICsxMDkwOCwxOCBAQAogICAgICAgICBQeV9ERUNSRUYoc3ViKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YikgPT0gLTEgfHwgUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpIHsKLSAgICAgICAgUHlfREVDUkVGKHN1Yik7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgIH0KIAogICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoc3RyKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHN1Yik7Ci0gICAga2luZCA9IGtpbmQxOwogICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzdHIpOwogICAgIGJ1ZjIgPSBQeVVuaWNvZGVfREFUQShzdWIpOwotICAgIGlmIChraW5kMiAhPSBraW5kKSB7Ci0gICAgICAgIGlmIChraW5kMiA+IGtpbmQpIHsKKyAgICBpZiAoa2luZDIgIT0ga2luZDEpIHsKKyAgICAgICAgaWYgKGtpbmQyID4ga2luZDEpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBidWYyID0gX1B5VW5pY29kZV9Bc0tpbmQoc3ViLCBraW5kKTsKKyAgICAgICAgYnVmMiA9IF9QeVVuaWNvZGVfQXNLaW5kKHN1Yiwga2luZDEpOwogICAgIH0KICAgICBpZiAoIWJ1ZjIpIHsKICAgICAgICAgUHlfREVDUkVGKHN1Yik7CkBAIC0xMDU5MSw3ICsxMDkyOSw3IEBACiAgICAgbGVuMSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7CiAgICAgbGVuMiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN1Yik7CiAKLSAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBzd2l0Y2ggKGtpbmQxKSB7CiAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKICAgICAgICAgcmVzdWx0ID0gdWNzMWxpYl9maW5kKGJ1ZjEsIGxlbjEsIGJ1ZjIsIGxlbjIsIDApICE9IC0xOwogICAgICAgICBicmVhazsKQEAgLTEwNjA5LDcgKzEwOTQ3LDcgQEAKICAgICBQeV9ERUNSRUYoc3RyKTsKICAgICBQeV9ERUNSRUYoc3ViKTsKIAotICAgIGlmIChraW5kMiAhPSBraW5kKQorICAgIGlmIChraW5kMiAhPSBraW5kMSkKICAgICAgICAgUHlNZW1fRnJlZShidWYyKTsKIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMDY4NSw3ICsxMTAyMyw4IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbGVmdCA9ICpwX2xlZnQ7Ci0gICAgaWYgKHJpZ2h0ID09IE5VTEwgfHwgbGVmdCA9PSBOVUxMIHx8ICFQeVVuaWNvZGVfQ2hlY2sobGVmdCkpIHsKKyAgICBpZiAocmlnaHQgPT0gTlVMTCB8fCBsZWZ0ID09IE5VTEwKKyAgICAgICAgfHwgIVB5VW5pY29kZV9DaGVjayhsZWZ0KSB8fCAhUHlVbmljb2RlX0NoZWNrKHJpZ2h0KSkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTEwNzI1LDE1ICsxMTA2NCw5IEBACiAgICAgICAgICYmICEoUHlVbmljb2RlX0lTX0FTQ0lJKGxlZnQpICYmICFQeVVuaWNvZGVfSVNfQVNDSUkocmlnaHQpKSkKICAgICB7CiAgICAgICAgIC8qIGFwcGVuZCBpbnBsYWNlICovCi0gICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShwX2xlZnQsIG5ld19sZW4pICE9IDApIHsKLSAgICAgICAgICAgIC8qIFhYWCBpZiBfUHlVbmljb2RlX1Jlc2l6ZSgpIGZhaWxzLCAnbGVmdCcgaGFzIGJlZW4KLSAgICAgICAgICAgICAqIGRlYWxsb2NhdGVkIHNvIGl0IGNhbm5vdCBiZSBwdXQgYmFjayBpbnRvCi0gICAgICAgICAgICAgKiAndmFyaWFibGUnLiAgVGhlIE1lbW9yeUVycm9yIGlzIHJhaXNlZCB3aGVuIHRoZXJlCi0gICAgICAgICAgICAgKiBpcyBubyB2YWx1ZSBpbiAndmFyaWFibGUnLCB3aGljaCBtaWdodCAodmVyeQotICAgICAgICAgICAgICogcmVtb3RlbHkpIGJlIGEgY2F1c2Ugb2YgaW5jb21wYXRpYmlsaXRpZXMuCi0gICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKHBfbGVmdCwgbmV3X2xlbikgIT0gMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KKwogICAgICAgICAvKiBjb3B5ICdyaWdodCcgaW50byB0aGUgbmV3bHkgYWxsb2NhdGVkIGFyZWEgb2YgJ2xlZnQnICovCiAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKCpwX2xlZnQsIGxlZnRfbGVuLCByaWdodCwgMCwgcmlnaHRfbGVuKTsKICAgICB9CkBAIC0xMDc4OSw4ICsxMTEyMiwxMCBAQAogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHN1YnN0cmluZyk7Ci0gICAgaWYgKGtpbmQyID4ga2luZDEpCisgICAgaWYgKGtpbmQyID4ga2luZDEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgfQogICAgIGtpbmQgPSBraW5kMTsKICAgICBidWYxID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAgICAgYnVmMiA9IFB5VW5pY29kZV9EQVRBKHN1YnN0cmluZyk7CkBAIC0xMDg2MSwyMyArMTExOTYsMjUgQEAKIH0KIAogUHlEb2NfU1RSVkFSKGV4cGFuZHRhYnNfX2RvY19fLAotICAgICAgICAgICAgICJTLmV4cGFuZHRhYnMoW3RhYnNpemVdKSAtPiBzdHJcblwKKyAgICAgICAgICAgICAiUy5leHBhbmR0YWJzKHRhYnNpemU9OCkgLT4gc3RyXG5cCiBcblwKIFJldHVybiBhIGNvcHkgb2YgUyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIGV4cGFuZGVkIHVzaW5nIHNwYWNlcy5cblwKIElmIHRhYnNpemUgaXMgbm90IGdpdmVuLCBhIHRhYiBzaXplIG9mIDggY2hhcmFjdGVycyBpcyBhc3N1bWVkLiIpOwogCiBzdGF0aWMgUHlPYmplY3QqCi11bmljb2RlX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQordW5pY29kZV9leHBhbmR0YWJzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlfc3NpemVfdCBpLCBqLCBsaW5lX3Bvcywgc3JjX2xlbiwgaW5jcjsKICAgICBQeV9VQ1M0IGNoOwogICAgIFB5T2JqZWN0ICp1OwogICAgIHZvaWQgKnNyY19kYXRhLCAqZGVzdF9kYXRhOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsidGFic2l6ZSIsIDB9OwogICAgIGludCB0YWJzaXplID0gODsKICAgICBpbnQga2luZDsKICAgICBpbnQgZm91bmQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmV4cGFuZHRhYnMiLCAmdGFic2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxpOmV4cGFuZHRhYnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnRhYnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCkBAIC0xMDk2OCwxMCArMTEzMDUsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmZW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXN1bHQgPSBhbnlfZmluZF9zbGljZSgxLCBzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQpOwogCkBAIC0xMDk4OSw3ICsxMTMzMCw2IEBACiAgICAgdm9pZCAqZGF0YTsKICAgICBlbnVtIFB5VW5pY29kZV9LaW5kIGtpbmQ7CiAgICAgUHlfVUNTNCBjaDsKLSAgICBQeU9iamVjdCAqcmVzOwogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soc2VsZikgfHwgUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CiAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CkBAIC0xMTAwMiwxNyArMTEzNDIsNyBAQAogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAgICAgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpbmRleCk7Ci0gICAgaWYgKGNoIDwgMjU2KQotICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKGNoKTsKLQotICAgIHJlcyA9IFB5VW5pY29kZV9OZXcoMSwgY2gpOwotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHJlcyk7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHJlcyk7Ci0gICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIDAsIGNoKTsKLSAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHJlcywgMSkpOwotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJuIHVuaWNvZGVfY2hhcihjaCk7CiB9CiAKIC8qIEJlbGlldmUgaXQgb3Igbm90LCB0aGlzIHByb2R1Y2VzIHRoZSBzYW1lIHZhbHVlIGZvciBBU0NJSSBzdHJpbmdzCkBAIC0xMTAzOSw0MyArMTEzNjksMTEgQEAKICAgICAgICAgX1B5VW5pY29kZV9IQVNIKHNlbGYpID0gMDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgLyogVGhlIGhhc2ggZnVuY3Rpb24gYXMgYSBtYWNybywgZ2V0cyBleHBhbmRlZCB0aHJlZSB0aW1lcyBiZWxvdy4gKi8KLSNkZWZpbmUgSEFTSChQKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHggXj0gKFB5X3VoYXNoX3QpICpQIDw8IDc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKC0tbGVuID49IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeCA9IChfUHlIQVNIX01VTFRJUExJRVIgKiB4KSBeIChQeV91aGFzaF90KSAqUCsrOyAgXAotCi0gICAgeCA9IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5wcmVmaXg7Ci0gICAgc3dpdGNoIChQeVVuaWNvZGVfS0lORChzZWxmKSkgewotICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6IHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYyA9IFB5VW5pY29kZV8xQllURV9EQVRBKHNlbGYpOwotICAgICAgICBIQVNIKGMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDogewotICAgICAgICBjb25zdCBQeV9VQ1MyICpzID0gUHlVbmljb2RlXzJCWVRFX0RBVEEoc2VsZik7Ci0gICAgICAgIEhBU0gocyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OiB7Ci0gICAgICAgIFB5X1VDUzQgKmw7Ci0gICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChzZWxmKSA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCAmJgotICAgICAgICAgICAgICAgIkltcG9zc2libGUgc3dpdGNoIGNhc2UgaW4gdW5pY29kZV9oYXNoIik7Ci0gICAgICAgIGwgPSBQeVVuaWNvZGVfNEJZVEVfREFUQShzZWxmKTsKLSAgICAgICAgSEFTSChsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICB4IF49IChQeV91aGFzaF90KSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKTsKLSAgICB4IF49IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5zdWZmaXg7Ci0KLSAgICBpZiAoeCA9PSAtMSkKLSAgICAgICAgeCA9IC0yOworICAgIHggPSBfUHlfSGFzaEJ5dGVzKFB5VW5pY29kZV9EQVRBKHNlbGYpLAorICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYpICogUHlVbmljb2RlX0tJTkQoc2VsZikpOwogICAgIF9QeVVuaWNvZGVfSEFTSChzZWxmKSA9IHg7CiAgICAgcmV0dXJuIHg7CiB9Ci0jdW5kZWYgSEFTSAogCiBQeURvY19TVFJWQVIoaW5kZXhfX2RvY19fLAogICAgICAgICAgICAgICJTLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pIC0+IGludFxuXApAQCAtMTEwOTQsMTAgKzExMzkyLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJmVuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmVzdWx0ID0gYW55X2ZpbmRfc2xpY2UoMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTE2MjcsNiArMTE5MjksNyBAQAogICAgIGludCBraW5kOwogICAgIFB5X3NzaXplX3QgaSwgaiwgbGVuOwogICAgIEJMT09NX01BU0sgc2VwbWFzazsKKyAgICBQeV9zc2l6ZV90IHNlcGxlbjsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEgfHwgUHlVbmljb2RlX1JFQURZKHNlcG9iaikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTE2MzQsMjQgKzExOTM3LDM1IEBACiAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHNlbGYpOwogICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKTsKKyAgICBzZXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZXBvYmopOwogICAgIHNlcG1hc2sgPSBtYWtlX2Jsb29tX21hc2soUHlVbmljb2RlX0tJTkQoc2Vwb2JqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9EQVRBKHNlcG9iaiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZXBvYmopKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGxlbik7CiAKICAgICBpID0gMDsKICAgICBpZiAoc3RyaXB0eXBlICE9IFJJR0hUU1RSSVApIHsKLSAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYKLSAgICAgICAgICAgICAgIEJMT09NX01FTUJFUihzZXBtYXNrLCBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSwgc2Vwb2JqKSkgeworICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpOworICAgICAgICAgICAgaWYgKCFCTE9PTShzZXBtYXNrLCBjaCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbmRDaGFyKHNlcG9iaiwgY2gsIDAsIHNlcGxlbiwgMSkgPCAwKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaSsrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaiA9IGxlbjsKICAgICBpZiAoc3RyaXB0eXBlICE9IExFRlRTVFJJUCkgewotICAgICAgICBkbyB7CisgICAgICAgIGotLTsKKyAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGopOworICAgICAgICAgICAgaWYgKCFCTE9PTShzZXBtYXNrLCBjaCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbmRDaGFyKHNlcG9iaiwgY2gsIDAsIHNlcGxlbiwgMSkgPCAwKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgai0tOwotICAgICAgICB9IHdoaWxlIChqID49IGkgJiYKLSAgICAgICAgICAgICAgICAgQkxPT01fTUVNQkVSKHNlcG1hc2ssIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGopLCBzZXBvYmopKTsKKyAgICAgICAgfQorCiAgICAgICAgIGorKzsKICAgICB9CiAKQEAgLTExNjk4LDMwICsxMjAxMiw2MyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRvX3N0cmlwKFB5T2JqZWN0ICpzZWxmLCBpbnQgc3RyaXB0eXBlKQogewotICAgIGludCBraW5kOwotICAgIHZvaWQgKmRhdGE7CiAgICAgUHlfc3NpemVfdCBsZW4sIGksIGo7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKLSAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZik7CiAKLSAgICBpID0gMDsKLSAgICBpZiAoc3RyaXB0eXBlICE9IFJJR0hUU1RSSVApIHsKLSAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgUHlfVU5JQ09ERV9JU1NQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKSkgewotICAgICAgICAgICAgaSsrOworICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkoc2VsZikpIHsKKyAgICAgICAgUHlfVUNTMSAqZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHNlbGYpOworCisgICAgICAgIGkgPSAwOworICAgICAgICBpZiAoc3RyaXB0eXBlICE9IFJJR0hUU1RSSVApIHsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgbGVuKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTMSBjaCA9IGRhdGFbaV07CisgICAgICAgICAgICAgICAgaWYgKCFfUHlfYXNjaWlfd2hpdGVzcGFjZVtjaF0pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGogPSBsZW47CisgICAgICAgIGlmIChzdHJpcHR5cGUgIT0gTEVGVFNUUklQKSB7CisgICAgICAgICAgICBqLS07CisgICAgICAgICAgICB3aGlsZSAoaiA+PSBpKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTMSBjaCA9IGRhdGFbal07CisgICAgICAgICAgICAgICAgaWYgKCFfUHlfYXNjaWlfd2hpdGVzcGFjZVtjaF0pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGorKzsKICAgICAgICAgfQogICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKKyAgICAgICAgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogCi0gICAgaiA9IGxlbjsKLSAgICBpZiAoc3RyaXB0eXBlICE9IExFRlRTVFJJUCkgewotICAgICAgICBkbyB7CisgICAgICAgIGkgPSAwOworICAgICAgICBpZiAoc3RyaXB0eXBlICE9IFJJR0hUU1RSSVApIHsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgbGVuKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpOworICAgICAgICAgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU1NQQUNFKGNoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaiA9IGxlbjsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKICAgICAgICAgICAgIGotLTsKLSAgICAgICAgfSB3aGlsZSAoaiA+PSBpICYmIFB5X1VOSUNPREVfSVNTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKSkpOwotICAgICAgICBqKys7CisgICAgICAgICAgICB3aGlsZSAoaiA+PSBpKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGopOworICAgICAgICAgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU1NQQUNFKGNoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgai0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaisrOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIFB5VW5pY29kZV9TdWJzdHJpbmcoc2VsZiwgaSwgaik7CkBAIC0xMTczMyw3ICsxMjA4MCw3IEBACiB7CiAgICAgUHlPYmplY3QgKnNlcCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgKGNoYXIgKilzdHJpcGZvcm1hdFtzdHJpcHR5cGVdLCAmc2VwKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHNlcCAhPSBOVUxMICYmIHNlcCAhPSBQeV9Ob25lKSB7CkBAIC0xMTk0NSw3ICsxMjI5Miw3IEBACiAgICAgUHlfc3NpemVfdCBpc2l6ZTsKICAgICBQeV9zc2l6ZV90IG9zaXplLCBzcXVvdGUsIGRxdW90ZSwgaSwgbzsKICAgICBQeV9VQ1M0IG1heCwgcXVvdGU7Ci0gICAgaW50IGlraW5kLCBva2luZDsKKyAgICBpbnQgaWtpbmQsIG9raW5kLCB1bmNoYW5nZWQ7CiAgICAgdm9pZCAqaWRhdGEsICpvZGF0YTsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodW5pY29kZSkgPT0gLTEpCkBAIC0xMTk1Niw3ICsxMjMwMyw3IEBACiAKICAgICAvKiBDb21wdXRlIGxlbmd0aCBvZiBvdXRwdXQsIHF1b3RlIGNoYXJhY3RlcnMsIGFuZAogICAgICAgIG1heGltdW0gY2hhcmFjdGVyICovCi0gICAgb3NpemUgPSAyOyAvKiBxdW90ZXMgKi8KKyAgICBvc2l6ZSA9IDA7CiAgICAgbWF4ID0gMTI3OwogICAgIHNxdW90ZSA9IGRxdW90ZSA9IDA7CiAgICAgaWtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKQEAgLTExOTg3LDcgKzEyMzM0LDkgQEAKICAgICB9CiAKICAgICBxdW90ZSA9ICdcJyc7CisgICAgdW5jaGFuZ2VkID0gKG9zaXplID09IGlzaXplKTsKICAgICBpZiAoc3F1b3RlKSB7CisgICAgICAgIHVuY2hhbmdlZCA9IDA7CiAgICAgICAgIGlmIChkcXVvdGUpCiAgICAgICAgICAgICAvKiBCb3RoIHNxdW90ZSBhbmQgZHF1b3RlIHByZXNlbnQuIFVzZSBzcXVvdGUsCiAgICAgICAgICAgICAgICBhbmQgZXNjYXBlIHRoZW0gKi8KQEAgLTExOTk1LDYgKzEyMzQ0LDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcXVvdGUgPSAnIic7CiAgICAgfQorICAgIG9zaXplICs9IDI7ICAgLyogcXVvdGVzICovCiAKICAgICByZXByID0gUHlVbmljb2RlX05ldyhvc2l6ZSwgbWF4KTsKICAgICBpZiAocmVwciA9PSBOVUxMKQpAQCAtMTIwMDQsODEgKzEyMzU0LDg3IEBACiAKICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCAwLCBxdW90ZSk7CiAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgb3NpemUtMSwgcXVvdGUpOworICAgIGlmICh1bmNoYW5nZWQpIHsKKyAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMocmVwciwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNpemUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMCwgbyA9IDE7IGkgPCBpc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoaWtpbmQsIGlkYXRhLCBpKTsKIAotICAgIGZvciAoaSA9IDAsIG8gPSAxOyBpIDwgaXNpemU7IGkrKykgewotICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoaWtpbmQsIGlkYXRhLCBpKTsKLQotICAgICAgICAvKiBFc2NhcGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyAqLwotICAgICAgICBpZiAoKGNoID09IHF1b3RlKSB8fCAoY2ggPT0gJ1xcJykpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogTWFwIHNwZWNpYWwgd2hpdGVzcGFjZSB0byAnXHQnLCBcbicsICdccicgKi8KLSAgICAgICAgaWYgKGNoID09ICdcdCcpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd0Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xuJykgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ24nKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjaCA9PSAnXHInKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAncicpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogTWFwIG5vbi1wcmludGFibGUgVVMgQVNDSUkgdG8gJ1x4aGgnICovCi0gICAgICAgIGVsc2UgaWYgKGNoIDwgJyAnIHx8IGNoID09IDB4N0YpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd4Jyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweDAwMEZdKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHgwMDBGXSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBDb3B5IEFTQ0lJIGNoYXJhY3RlcnMgYXMtaXMgKi8KLSAgICAgICAgZWxzZSBpZiAoY2ggPCAweDdGKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE5vbi1BU0NJSSBjaGFyYWN0ZXJzICovCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogTWFwIFVuaWNvZGUgd2hpdGVzcGFjZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzCi0gICAgICAgICAgICAgICAoY2F0ZWdvcmllcyBaKiBhbmQgQyogZXhjZXB0IEFTQ0lJIHNwYWNlKQotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU1BSSU5UQUJMRShjaCkpIHsKKyAgICAgICAgICAgIC8qIEVzY2FwZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzICovCisgICAgICAgICAgICBpZiAoKGNoID09IHF1b3RlKSB8fCAoY2ggPT0gJ1xcJykpIHsKICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgICAgIC8qIE1hcCA4LWJpdCBjaGFyYWN0ZXJzIHRvICdceGhoJyAqLwotICAgICAgICAgICAgICAgIGlmIChjaCA8PSAweGZmKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3gnKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHgwMDBGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHgwMDBGXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIE1hcCAxNi1iaXQgY2hhcmFjdGVycyB0byAnXHV4eHh4JyAqLwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoIDw9IDB4ZmZmZikgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd1Jyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxMikgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDgpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4Rl0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBNYXAgMjEtYml0IGNoYXJhY3RlcnMgdG8gJ1xVMDB4eHh4eHgnICovCi0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1UnKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI4KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjQpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAyMCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDE2KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBDb3B5IGNoYXJhY3RlcnMgYXMtaXMgKi8KLSAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgY2gpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBNYXAgc3BlY2lhbCB3aGl0ZXNwYWNlIHRvICdcdCcsIFxuJywgJ1xyJyAqLworICAgICAgICAgICAgaWYgKGNoID09ICdcdCcpIHsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3QnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ24nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICdccicpIHsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3InKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogTWFwIG5vbi1wcmludGFibGUgVVMgQVNDSUkgdG8gJ1x4aGgnICovCisgICAgICAgICAgICBlbHNlIGlmIChjaCA8ICcgJyB8fCBjaCA9PSAweDdGKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd4Jyk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHgwMDBGXSk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweDAwMEZdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQ29weSBBU0NJSSBjaGFyYWN0ZXJzIGFzLWlzICovCisgICAgICAgICAgICBlbHNlIGlmIChjaCA8IDB4N0YpIHsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogTm9uLUFTQ0lJIGNoYXJhY3RlcnMgKi8KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIE1hcCBVbmljb2RlIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgIChjYXRlZ29yaWVzIFoqIGFuZCBDKiBleGNlcHQgQVNDSUkgc3BhY2UpCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNQUklOVEFCTEUoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7CisgICAgICAgICAgICAgICAgICAgIC8qIE1hcCA4LWJpdCBjaGFyYWN0ZXJzIHRvICdceGhoJyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPD0gMHhmZikgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHgwMDBGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIE1hcCAxNi1iaXQgY2hhcmFjdGVycyB0byAnXHV4eHh4JyAqLworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA8PSAweGZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxMikgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIE1hcCAyMS1iaXQgY2hhcmFjdGVycyB0byAnXFUwMHh4eHh4eCcgKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdVJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjgpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjQpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjApICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTYpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBDb3B5IGNoYXJhY3RlcnMgYXMtaXMgKi8KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTIxMDgsMTAgKzEyNDY0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJmVuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmVzdWx0ID0gYW55X2ZpbmRfc2xpY2UoLTEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTEyMTQwLDEwICsxMjUwMCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKC0xLCBzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQpOwogCkBAIC0xMjUwMCwyOCArMTI4NjQsNzYgQEAKICAgICByZXR1cm4gY2FzZV9vcGVyYXRpb24oc2VsZiwgZG9fc3dhcGNhc2UpOwogfQogCi1QeURvY19TVFJWQVIobWFrZXRyYW5zX19kb2NfXywKLSAgICAgICAgICAgICAic3RyLm1ha2V0cmFucyh4WywgeVssIHpdXSkgLT4gZGljdCAoc3RhdGljIG1ldGhvZClcblwKLVxuXAotUmV0dXJuIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvciBzdHIudHJhbnNsYXRlKCkuXG5cCi1JZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZyBVbmljb2RlXG5cCi1vcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBOb25lLlxuXAotQ2hhcmFjdGVyIGtleXMgd2lsbCBiZSB0aGVuIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cblwKLUlmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsIGFuZFxuXAotaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkIHRvIHRoZVxuXAotY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuIElmIHRoZXJlIGlzIGEgdGhpcmQgYXJndW1lbnQsIGl0XG5cCi1tdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvIE5vbmUgaW4gdGhlIHJlc3VsdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KIAotc3RhdGljIFB5T2JqZWN0KgotdW5pY29kZV9tYWtldHJhbnMoUHlPYmplY3QgKm51bGwsIFB5T2JqZWN0ICphcmdzKQorQHN0YXRpY21ldGhvZAorc3RyLm1ha2V0cmFucyBhcyB1bmljb2RlX21ha2V0cmFucworCisgIHg6IG9iamVjdAorCisgIHk6IHVuaWNvZGU9TlVMTAorCisgIHo6IHVuaWNvZGU9TlVMTAorCisgIC8KKworUmV0dXJuIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvciBzdHIudHJhbnNsYXRlKCkuCisKK0lmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nIFVuaWNvZGUKK29yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIE5vbmUuCitDaGFyYWN0ZXIga2V5cyB3aWxsIGJlIHRoZW4gY29udmVydGVkIHRvIG9yZGluYWxzLgorSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCwgYW5kCitpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWQgdG8gdGhlCitjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gSWYgdGhlcmUgaXMgYSB0aGlyZCBhcmd1bWVudCwgaXQKK211c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG8gTm9uZSBpbiB0aGUgcmVzdWx0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIodW5pY29kZV9tYWtldHJhbnNfX2RvY19fLAorIm1ha2V0cmFucyh4LCB5PU5vbmUsIHo9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3Igc3RyLnRyYW5zbGF0ZSgpLlxuIgorIlxuIgorIklmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nIFVuaWNvZGVcbiIKKyJvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBOb25lLlxuIgorIkNoYXJhY3RlciBrZXlzIHdpbGwgYmUgdGhlbiBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG4iCisiSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCwgYW5kXG4iCisiaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkIHRvIHRoZVxuIgorImNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiBJZiB0aGVyZSBpcyBhIHRoaXJkIGFyZ3VtZW50LCBpdFxuIgorIm11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG8gTm9uZSBpbiB0aGUgcmVzdWx0LiIpOworCisjZGVmaW5lIFVOSUNPREVfTUFLRVRSQU5TX01FVEhPRERFRiAgICBcCisgICAgeyJtYWtldHJhbnMiLCAoUHlDRnVuY3Rpb24pdW5pY29kZV9tYWtldHJhbnMsIE1FVEhfVkFSQVJHU3xNRVRIX1NUQVRJQywgdW5pY29kZV9tYWtldHJhbnNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVfbWFrZXRyYW5zX2ltcGwoUHlPYmplY3QgKngsIFB5T2JqZWN0ICp5LCBQeU9iamVjdCAqeik7CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlX21ha2V0cmFucyh2b2lkICpudWxsLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqeCwgKnkgPSBOVUxMLCAqeiA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKng7CisgICAgUHlPYmplY3QgKnkgPSBOVUxMOworICAgIFB5T2JqZWN0ICp6ID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiT3xVVTptYWtldHJhbnMiLAorICAgICAgICAmeCwgJnksICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHVuaWNvZGVfbWFrZXRyYW5zX2ltcGwoeCwgeSwgeik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVfbWFrZXRyYW5zX2ltcGwoUHlPYmplY3QgKngsIFB5T2JqZWN0ICp5LCBQeU9iamVjdCAqeikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NjZlZGY2MzBmNzc0MzZhIGlucHV0PTdiZmJmNTI5YTI5M2M2YzVdKi8KK3sKICAgICBQeU9iamVjdCAqbmV3ID0gTlVMTCwgKmtleSwgKnZhbHVlOwogICAgIFB5X3NzaXplX3QgaSA9IDA7CiAgICAgaW50IHJlczsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xVVTptYWtldHJhbnMiLCAmeCwgJnksICZ6KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmV3ID0gUHlEaWN0X05ldygpOwogICAgIGlmICghbmV3KQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEyNzMyLDYgKzEzMTQ0LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsIC0xKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKICAgICAgICAgICAgIH0KQEAgLTEyNzQ4LDYgKzEzMTYyLDggQEAKICAgICB9CiAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgLTEpOwogICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgIGlmIChyZXN1bHQgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmVzdWx0KTsKIH0KIApAQCAtMTI3ODEsNiArMTMxOTcsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgKzEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwogICAgICAgICAgICAgfQpAQCAtMTI3OTYsMzMgKzEzMjE0LDQ4IEBACiAgICAgfQogICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsICsxKTsKICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKKyAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlc3VsdCk7CiB9CiAKIFB5X0xPQ0FMX0lOTElORSh2b2lkKQogX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewotICAgIHdyaXRlci0+c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKTsKKyAgICBpZiAoIXdyaXRlci0+cmVhZG9ubHkpCisgICAgICAgIHdyaXRlci0+c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLyogQ29weS1vbi13cml0ZSBtb2RlOiBzZXQgYnVmZmVyIHNpemUgdG8gMCBzbworICAgICAgICAgKiBfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoKSB3aWxsIGNvcHkgKGFuZCBlbmxhcmdlKSB0aGUgYnVmZmVyIG9uCisgICAgICAgICAqIG5leHQgd3JpdGUuICovCisgICAgICAgIHdyaXRlci0+c2l6ZSA9IDA7CisgICAgfQogICAgIHdyaXRlci0+bWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh3cml0ZXItPmJ1ZmZlcik7CiAgICAgd3JpdGVyLT5kYXRhID0gUHlVbmljb2RlX0RBVEEod3JpdGVyLT5idWZmZXIpOwogICAgIHdyaXRlci0+a2luZCA9IFB5VW5pY29kZV9LSU5EKHdyaXRlci0+YnVmZmVyKTsKIH0KIAogdm9pZAotX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfc3NpemVfdCBtaW5fbGVuZ3RoKQorX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKICAgICBtZW1zZXQod3JpdGVyLCAwLCBzaXplb2YoKndyaXRlcikpOwogI2lmZGVmIFB5X0RFQlVHCiAgICAgd3JpdGVyLT5raW5kID0gNTsgICAgLyogaW52YWxpZCBraW5kICovCiAjZW5kaWYKLSAgICB3cml0ZXItPm1pbl9sZW5ndGggPSBQeV9NQVgobWluX2xlbmd0aCwgMTAwKTsKLSAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IChtaW5fbGVuZ3RoID4gMCk7CisgICAgd3JpdGVyLT5taW5fY2hhciA9IDEyNzsKIH0KIAogaW50CiBfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmVJbnRlcm5hbChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfVUNTNCBtYXhjaGFyKQogeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgIC8qIE9uIFdpbmRvd3MsIG92ZXJhbGxvY2F0ZSBieSA1MCUgaXMgdGhlIGJlc3QgZmFjdG9yICovCisjICBkZWZpbmUgT1ZFUkFMTE9DQVRFX0ZBQ1RPUiAyCisjZWxzZQorICAgLyogT24gTGludXgsIG92ZXJhbGxvY2F0ZSBieSAyNSUgaXMgdGhlIGJlc3QgZmFjdG9yICovCisjICBkZWZpbmUgT1ZFUkFMTE9DQVRFX0ZBQ1RPUiA0CisjZW5kaWYKICAgICBQeV9zc2l6ZV90IG5ld2xlbjsKICAgICBQeU9iamVjdCAqbmV3YnVmZmVyOwogCkBAIC0xMjgzNCwyOSArMTMyNjcsMzAgQEAKICAgICB9CiAgICAgbmV3bGVuID0gd3JpdGVyLT5wb3MgKyBsZW5ndGg7CiAKKyAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHdyaXRlci0+bWluX2NoYXIpOworCiAgICAgaWYgKHdyaXRlci0+YnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHdyaXRlci0+b3ZlcmFsbG9jYXRlKSB7Ci0gICAgICAgICAgICAvKiBvdmVyYWxsb2NhdGUgMjUlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVzaXplICovCi0gICAgICAgICAgICBpZiAobmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIDQpKQotICAgICAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyA0OwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8IHdyaXRlci0+bWluX2xlbmd0aCkKLSAgICAgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CisgICAgICAgIGFzc2VydCghd3JpdGVyLT5yZWFkb25seSk7CisgICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZQorICAgICAgICAgICAgJiYgbmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIE9WRVJBTExPQ0FURV9GQUNUT1IpKSB7CisgICAgICAgICAgICAvKiBvdmVyYWxsb2NhdGUgdG8gbGltaXQgdGhlIG51bWJlciBvZiByZWFsbG9jKCkgKi8KKyAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyBPVkVSQUxMT0NBVEVfRkFDVE9SOwogICAgICAgICB9CisgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCisgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CisKICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBQeVVuaWNvZGVfTmV3KG5ld2xlbiwgbWF4Y2hhcik7CiAgICAgICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOwotICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBpZiAobmV3bGVuID4gd3JpdGVyLT5zaXplKSB7Ci0gICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZSkgewotICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIDI1JSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHJlc2l6ZSAqLwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyA0KSkKLSAgICAgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gNDsKLSAgICAgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCi0gICAgICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOworICAgIGVsc2UgaWYgKG5ld2xlbiA+IHdyaXRlci0+c2l6ZSkgeworICAgICAgICBpZiAod3JpdGVyLT5vdmVyYWxsb2NhdGUKKyAgICAgICAgICAgICYmIG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyBPVkVSQUxMT0NBVEVfRkFDVE9SKSkgeworICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVhbGxvYygpICovCisgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gT1ZFUkFMTE9DQVRFX0ZBQ1RPUjsKICAgICAgICAgfQorICAgICAgICBpZiAobmV3bGVuIDwgd3JpdGVyLT5taW5fbGVuZ3RoKQorICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOwogCiAgICAgICAgIGlmIChtYXhjaGFyID4gd3JpdGVyLT5tYXhjaGFyIHx8IHdyaXRlci0+cmVhZG9ubHkpIHsKICAgICAgICAgICAgIC8qIHJlc2l6ZSArIHdpZGVuICovCkBAIC0xMjg3NCw3ICsxMzMwOCw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gbmV3YnVmZmVyOwotICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOwogICAgIH0KICAgICBlbHNlIGlmIChtYXhjaGFyID4gd3JpdGVyLT5tYXhjaGFyKSB7CiAgICAgICAgIGFzc2VydCghd3JpdGVyLT5yZWFkb25seSk7CkBAIC0xMjg4NSw5ICsxMzMxOCwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXItPmJ1ZmZlciwgMCwgd3JpdGVyLT5wb3MpOwogICAgICAgICBQeV9ERUNSRUYod3JpdGVyLT5idWZmZXIpOwogICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IG5ld2J1ZmZlcjsKLSAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKICAgICB9CisgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKICAgICByZXR1cm4gMDsKKworI3VuZGVmIE9WRVJBTExPQ0FURV9GQUNUT1IKK30KKworUHlfTE9DQUxfSU5MSU5FKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfVUNTNCBjaCkKK3sKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgMSwgY2gpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsIGNoKTsKKyAgICB3cml0ZXItPnBvcysrOworICAgIHJldHVybiAwOworfQorCitpbnQKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfVUNTNCBjaCkKK3sKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCBjaCk7CiB9CiAKIGludApAQCAtMTI5MDQsMTEgKzEzMzU1LDEwIEBACiAgICAgbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpOwogICAgIGlmIChtYXhjaGFyID4gd3JpdGVyLT5tYXhjaGFyIHx8IGxlbiA+IHdyaXRlci0+c2l6ZSAtIHdyaXRlci0+cG9zKSB7CiAgICAgICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMICYmICF3cml0ZXItPm92ZXJhbGxvY2F0ZSkgeworICAgICAgICAgICAgd3JpdGVyLT5yZWFkb25seSA9IDE7CiAgICAgICAgICAgICBQeV9JTkNSRUYoc3RyKTsKICAgICAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gc3RyOwogICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKLSAgICAgICAgICAgIHdyaXRlci0+cmVhZG9ubHkgPSAxOwotICAgICAgICAgICAgd3JpdGVyLT5zaXplID0gMDsKICAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IGxlbjsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMjkyMSwyOCArMTMzNzEsMTQyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludAorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5T2JqZWN0ICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kKQoreworICAgIFB5X1VDUzQgbWF4Y2hhcjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgYXNzZXJ0KDAgPD0gc3RhcnQpOworICAgIGFzc2VydChlbmQgPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKSk7CisgICAgYXNzZXJ0KHN0YXJ0IDw9IGVuZCk7CisKKyAgICBpZiAoZW5kID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHN0YXJ0ID09IDAgJiYgZW5kID09IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cikpCisgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgc3RyKTsKKworICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKSA+IHdyaXRlci0+bWF4Y2hhcikKKyAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIoc3RyLCBzdGFydCwgZW5kKTsKKyAgICBlbHNlCisgICAgICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisgICAgbGVuID0gZW5kIC0gc3RhcnQ7CisKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgbGVuLCBtYXhjaGFyKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIHN0YXJ0LCBsZW4pOworICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICByZXR1cm4gMDsKK30KKworaW50CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFzY2lpLCBQeV9zc2l6ZV90IGxlbikKK3sKKyAgICBpZiAobGVuID09IC0xKQorICAgICAgICBsZW4gPSBzdHJsZW4oYXNjaWkpOworCisgICAgYXNzZXJ0KHVjczFsaWJfZmluZF9tYXhfY2hhcigoUHlfVUNTMSopYXNjaWksIChQeV9VQ1MxKilhc2NpaSArIGxlbikgPCAxMjgpOworCisgICAgaWYgKHdyaXRlci0+YnVmZmVyID09IE5VTEwgJiYgIXdyaXRlci0+b3ZlcmFsbG9jYXRlKSB7CisgICAgICAgIFB5T2JqZWN0ICpzdHI7CisKKyAgICAgICAgc3RyID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYXNjaWksIGxlbik7CisgICAgICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICB3cml0ZXItPnJlYWRvbmx5ID0gMTsKKyAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBzdHI7CisgICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CisgICAgICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGxlbiwgMTI3KSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc3dpdGNoICh3cml0ZXItPmtpbmQpCisgICAgeworICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBjb25zdCBQeV9VQ1MxICpzdHIgPSAoY29uc3QgUHlfVUNTMSAqKWFzY2lpOworICAgICAgICBQeV9VQ1MxICpkYXRhID0gd3JpdGVyLT5kYXRhOworCisgICAgICAgIFB5X01FTUNQWShkYXRhICsgd3JpdGVyLT5wb3MsIHN0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBfUHlVbmljb2RlX0NPTlZFUlRfQllURVMoCisgICAgICAgICAgICBQeV9VQ1MxLCBQeV9VQ1MyLAorICAgICAgICAgICAgYXNjaWksIGFzY2lpICsgbGVuLAorICAgICAgICAgICAgKFB5X1VDUzIgKil3cml0ZXItPmRhdGEgKyB3cml0ZXItPnBvcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgIHsKKyAgICAgICAgX1B5VW5pY29kZV9DT05WRVJUX0JZVEVTKAorICAgICAgICAgICAgUHlfVUNTMSwgUHlfVUNTNCwKKyAgICAgICAgICAgIGFzY2lpLCBhc2NpaSArIGxlbiwKKyAgICAgICAgICAgIChQeV9VQ1M0ICopd3JpdGVyLT5kYXRhICsgd3JpdGVyLT5wb3MpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOworICAgIH0KKworICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICByZXR1cm4gMDsKK30KKworaW50CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlTGF0aW4xU3RyaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyLCBQeV9zc2l6ZV90IGxlbikKK3sKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisKKyAgICBtYXhjaGFyID0gdWNzMWxpYl9maW5kX21heF9jaGFyKChQeV9VQ1MxKilzdHIsIChQeV9VQ1MxKilzdHIgKyBsZW4pOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBsZW4sIG1heGNoYXIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgdW5pY29kZV93cml0ZV9jc3RyKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgc3RyLCBsZW4pOworICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICByZXR1cm4gMDsKK30KKwogUHlPYmplY3QgKgogX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogeworICAgIFB5T2JqZWN0ICpzdHI7CiAgICAgaWYgKHdyaXRlci0+cG9zID09IDApIHsKLSAgICAgICAgUHlfWERFQ1JFRih3cml0ZXItPmJ1ZmZlcik7CisgICAgICAgIFB5X0NMRUFSKHdyaXRlci0+YnVmZmVyKTsKICAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAgICAgfQogICAgIGlmICh3cml0ZXItPnJlYWRvbmx5KSB7Ci0gICAgICAgIGFzc2VydChQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcikgPT0gd3JpdGVyLT5wb3MpOwotICAgICAgICByZXR1cm4gd3JpdGVyLT5idWZmZXI7CisgICAgICAgIHN0ciA9IHdyaXRlci0+YnVmZmVyOworICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IE5VTEw7CisgICAgICAgIGFzc2VydChQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpID09IHdyaXRlci0+cG9zKTsKKyAgICAgICAgcmV0dXJuIHN0cjsKICAgICB9CiAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKSAhPSB3cml0ZXItPnBvcykgewogICAgICAgICBQeU9iamVjdCAqbmV3YnVmZmVyOwogICAgICAgICBuZXdidWZmZXIgPSByZXNpemVfY29tcGFjdCh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MpOwogICAgICAgICBpZiAobmV3YnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3cml0ZXItPmJ1ZmZlcik7CisgICAgICAgICAgICBQeV9DTEVBUih3cml0ZXItPmJ1ZmZlcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IG5ld2J1ZmZlcjsKICAgICB9Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh3cml0ZXItPmJ1ZmZlciwgMSkpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdF9yZWFkeSh3cml0ZXItPmJ1ZmZlcik7CisgICAgc3RyID0gd3JpdGVyLT5idWZmZXI7CisgICAgd3JpdGVyLT5idWZmZXIgPSBOVUxMOworICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSk7CisgICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0X3JlYWR5KHN0cik7CiB9CiAKIHZvaWQKQEAgLTEyOTc3LDcgKzEzNTQxLDcgQEAKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5VW5pY29kZV9Gb3JtYXRBZHZhbmNlZFdyaXRlcigmd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgZm9ybWF0X3NwZWMsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChmb3JtYXRfc3BlYykpOwpAQCAtMTMwNDYsNyArMTM2MTAsOCBAQAogICAgIHsidGl0bGUiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfdGl0bGUsIE1FVEhfTk9BUkdTLCB0aXRsZV9fZG9jX199LAogICAgIHsiY2VudGVyIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2NlbnRlciwgTUVUSF9WQVJBUkdTLCBjZW50ZXJfX2RvY19ffSwKICAgICB7ImNvdW50IiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2NvdW50LCBNRVRIX1ZBUkFSR1MsIGNvdW50X19kb2NfX30sCi0gICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUywgZXhwYW5kdGFic19fZG9jX199LAorICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9leHBhbmR0YWJzLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBleHBhbmR0YWJzX19kb2NfX30sCiAgICAgeyJmaW5kIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2ZpbmQsIE1FVEhfVkFSQVJHUywgZmluZF9fZG9jX199LAogICAgIHsicGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3BhcnRpdGlvbiwgTUVUSF9PLCBwYXJ0aXRpb25fX2RvY19ffSwKICAgICB7ImluZGV4IiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2luZGV4LCBNRVRIX1ZBUkFSR1MsIGluZGV4X19kb2NfX30sCkBAIC0xMzA1OCw3ICsxMzYyMyw4IEBACiAgICAgeyJyanVzdCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9yanVzdCwgTUVUSF9WQVJBUkdTLCByanVzdF9fZG9jX199LAogICAgIHsicnN0cmlwIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3JzdHJpcCwgTUVUSF9WQVJBUkdTLCByc3RyaXBfX2RvY19ffSwKICAgICB7InJwYXJ0aXRpb24iLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcnBhcnRpdGlvbiwgTUVUSF9PLCBycGFydGl0aW9uX19kb2NfX30sCi0gICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3NwbGl0bGluZXMsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHNwbGl0bGluZXNfX2RvY19ffSwKKyAgICB7InNwbGl0bGluZXMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfc3BsaXRsaW5lcywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgc3BsaXRsaW5lc19fZG9jX199LAogICAgIHsic3RyaXAiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfc3RyaXAsIE1FVEhfVkFSQVJHUywgc3RyaXBfX2RvY19ffSwKICAgICB7InN3YXBjYXNlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3N3YXBjYXNlLCBNRVRIX05PQVJHUywgc3dhcGNhc2VfX2RvY19ffSwKICAgICB7InRyYW5zbGF0ZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV90cmFuc2xhdGUsIE1FVEhfTywgdHJhbnNsYXRlX19kb2NfX30sCkBAIC0xMzA4MCw4ICsxMzY0Niw3IEBACiAgICAgeyJmb3JtYXQiLCAoUHlDRnVuY3Rpb24pIGRvX3N0cmluZ19mb3JtYXQsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGZvcm1hdF9fZG9jX199LAogICAgIHsiZm9ybWF0X21hcCIsIChQeUNGdW5jdGlvbikgZG9fc3RyaW5nX2Zvcm1hdF9tYXAsIE1FVEhfTywgZm9ybWF0X21hcF9fZG9jX199LAogICAgIHsiX19mb3JtYXRfXyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9fZm9ybWF0X18sIE1FVEhfVkFSQVJHUywgcF9mb3JtYXRfX2RvY19ffSwKLSAgICB7Im1ha2V0cmFucyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9tYWtldHJhbnMsCi0gICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfU1RBVElDLCBtYWtldHJhbnNfX2RvY19ffSwKKyAgICBVTklDT0RFX01BS0VUUkFOU19NRVRIT0RERUYKICAgICB7Il9fc2l6ZW9mX18iLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfX3NpemVvZl9fLCBNRVRIX05PQVJHUywgc2l6ZW9mX19kb2NfX30sCiAjaWYgMAogICAgIC8qIFRoZXNlIG1ldGhvZHMgYXJlIGp1c3QgdXNlZCBmb3IgZGVidWdnaW5nIHRoZSBpbXBsZW1lbnRhdGlvbi4gKi8KQEAgLTEzMTk2LDE2ICsxMzc2MSwzOSBAQAogCiAvKiBIZWxwZXJzIGZvciBQeVVuaWNvZGVfRm9ybWF0KCkgKi8KIAorc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgeworICAgIFB5T2JqZWN0ICphcmdzOworICAgIGludCBhcmdzX293bmVkOworICAgIFB5X3NzaXplX3QgYXJnbGVuLCBhcmdpZHg7CisgICAgUHlPYmplY3QgKmRpY3Q7CisKKyAgICBlbnVtIFB5VW5pY29kZV9LaW5kIGZtdGtpbmQ7CisgICAgUHlfc3NpemVfdCBmbXRjbnQsIGZtdHBvczsKKyAgICB2b2lkICpmbXRkYXRhOworICAgIFB5T2JqZWN0ICpmbXRzdHI7CisKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKK307CisKK3N0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCB7CisgICAgUHlfVUNTNCBjaDsKKyAgICBpbnQgZmxhZ3M7CisgICAgUHlfc3NpemVfdCB3aWR0aDsKKyAgICBpbnQgcHJlYzsKKyAgICBpbnQgc2lnbjsKK307CisKIHN0YXRpYyBQeU9iamVjdCAqCi1nZXRuZXh0YXJnKFB5T2JqZWN0ICphcmdzLCBQeV9zc2l6ZV90IGFyZ2xlbiwgUHlfc3NpemVfdCAqcF9hcmdpZHgpCit1bmljb2RlX2Zvcm1hdF9nZXRuZXh0YXJnKHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgpCiB7Ci0gICAgUHlfc3NpemVfdCBhcmdpZHggPSAqcF9hcmdpZHg7Ci0gICAgaWYgKGFyZ2lkeCA8IGFyZ2xlbikgewotICAgICAgICAoKnBfYXJnaWR4KSsrOwotICAgICAgICBpZiAoYXJnbGVuIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBhcmdzOworICAgIFB5X3NzaXplX3QgYXJnaWR4ID0gY3R4LT5hcmdpZHg7CisKKyAgICBpZiAoYXJnaWR4IDwgY3R4LT5hcmdsZW4pIHsKKyAgICAgICAgY3R4LT5hcmdpZHgrKzsKKyAgICAgICAgaWYgKGN0eC0+YXJnbGVuIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBjdHgtPmFyZ3M7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBQeVR1cGxlX0dldEl0ZW0oYXJncywgYXJnaWR4KTsKKyAgICAgICAgICAgIHJldHVybiBQeVR1cGxlX0dldEl0ZW0oY3R4LT5hcmdzLCBhcmdpZHgpOwogICAgIH0KICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZvcm1hdCBzdHJpbmciKTsKQEAgLTEzMjE0LDMzICsxMzgwMiw0MiBAQAogCiAvKiBSZXR1cm5zIGEgbmV3IHJlZmVyZW5jZSB0byBhIFB5VW5pY29kZSBvYmplY3QsIG9yIE5VTEwgb24gZmFpbHVyZS4gKi8KIAorLyogRm9ybWF0IGEgZmxvYXQgaW50byB0aGUgd3JpdGVyIGlmIHRoZSB3cml0ZXIgaXMgbm90IE5VTEwsIG9yIGludG8gKnBfb3V0cHV0CisgICBvdGhlcndpc2UuCisKKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLwogc3RhdGljIGludAotZm9ybWF0ZmxvYXQoUHlPYmplY3QgKnYsIGludCBmbGFncywgaW50IHByZWMsIGludCB0eXBlLAotICAgICAgICAgICAgUHlPYmplY3QgKipwX291dHB1dCwgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQorZm9ybWF0ZmxvYXQoUHlPYmplY3QgKnYsIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnLAorICAgICAgICAgICAgUHlPYmplY3QgKipwX291dHB1dCwKKyAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKICAgICBjaGFyICpwOwogICAgIGRvdWJsZSB4OwogICAgIFB5X3NzaXplX3QgbGVuOworICAgIGludCBwcmVjOworICAgIGludCBkdG9hX2ZsYWdzOwogCiAgICAgeCA9IFB5RmxvYXRfQXNEb3VibGUodik7CiAgICAgaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gLTE7CiAKKyAgICBwcmVjID0gYXJnLT5wcmVjOwogICAgIGlmIChwcmVjIDwgMCkKICAgICAgICAgcHJlYyA9IDY7CiAKLSAgICBwID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsIHR5cGUsIHByZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBGX0FMVCkgPyBQeV9EVFNGX0FMVCA6IDAsIE5VTEwpOworICAgIGlmIChhcmctPmZsYWdzICYgRl9BTFQpCisgICAgICAgIGR0b2FfZmxhZ3MgPSBQeV9EVFNGX0FMVDsKKyAgICBlbHNlCisgICAgICAgIGR0b2FfZmxhZ3MgPSAwOworICAgIHAgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoeCwgYXJnLT5jaCwgcHJlYywgZHRvYV9mbGFncywgTlVMTCk7CiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGxlbiA9IHN0cmxlbihwKTsKICAgICBpZiAod3JpdGVyKSB7Ci0gICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBsZW4sIDEyNykgPT0gLTEpIHsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyh3cml0ZXIsIHAsIGxlbikgPCAwKSB7CiAgICAgICAgICAgICBQeU1lbV9GcmVlKHApOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIHVuaWNvZGVfd3JpdGVfY3N0cih3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsIHAsIGxlbik7Ci0gICAgICAgIHdyaXRlci0+cG9zICs9IGxlbjsKICAgICB9CiAgICAgZWxzZQogICAgICAgICAqcF9vdXRwdXQgPSBfUHlVbmljb2RlX0Zyb21BU0NJSShwLCBsZW4pOwpAQCAtMTMyNjcsNyArMTM4NjQsNyBAQAogICogcHJvZHVjZSBhICctJyBzaWduLCBidXQgY2FuIGZvciBQeXRob24ncyB1bmJvdW5kZWQgaW50cy4KICAqLwogc3RhdGljIFB5T2JqZWN0KgotZm9ybWF0bG9uZyhQeU9iamVjdCAqdmFsLCBpbnQgZmxhZ3MsIGludCBwcmVjLCBpbnQgdHlwZSkKK2Zvcm1hdGxvbmcoUHlPYmplY3QgKnZhbCwgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgY2hhciAqYnVmOwpAQCAtMTMyNzcsNiArMTM4NzQsOCBAQAogICAgIFB5X3NzaXplX3QgbGxlbjsKICAgICBpbnQgbnVtZGlnaXRzOyAgICAgIC8qIGxlbiA9PSBudW1ub25kaWdpdHMgKyBudW1kaWdpdHMgKi8KICAgICBpbnQgbnVtbm9uZGlnaXRzID0gMDsKKyAgICBpbnQgcHJlYyA9IGFyZy0+cHJlYzsKKyAgICBpbnQgdHlwZSA9IGFyZy0+Y2g7CiAKICAgICAvKiBBdm9pZCBleGNlZWRpbmcgU1NJWkVfVF9NQVggKi8KICAgICBpZiAocHJlYyA+IElOVF9NQVgtMykgewpAQCAtMTMyODgsMTMgKzEzODg3LDE0IEBACiAgICAgYXNzZXJ0KFB5TG9uZ19DaGVjayh2YWwpKTsKIAogICAgIHN3aXRjaCAodHlwZSkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghIid0eXBlJyBub3QgaW4gW2RpdW94WF0iKTsKICAgICBjYXNlICdkJzoKKyAgICBjYXNlICdpJzoKICAgICBjYXNlICd1JzoKLSAgICAgICAgLyogU3BlY2lhbC1jYXNlIGJvb2xlYW46IHdlIHdhbnQgMC8xICovCi0gICAgICAgIGlmIChQeUJvb2xfQ2hlY2sodmFsKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX1RvQmFzZSh2YWwsIDEwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gUHlfVFlQRSh2YWwpLT50cF9zdHIodmFsKTsKKyAgICAgICAgLyogaW50IGFuZCBpbnQgc3ViY2xhc3NlcyBzaG91bGQgcHJpbnQgbnVtZXJpY2FsbHkgd2hlbiBhIG51bWVyaWMgKi8KKyAgICAgICAgLyogZm9ybWF0IGNvZGUgaXMgdXNlZCAoc2VlIGlzc3VlMTg3ODApICovCisgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX1RvQmFzZSh2YWwsIDEwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAnbyc6CiAgICAgICAgIG51bW5vbmRpZ2l0cyA9IDI7CkBAIC0xMzMwNSw4ICsxMzkwNSw2IEBACiAgICAgICAgIG51bW5vbmRpZ2l0cyA9IDI7CiAgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX1RvQmFzZSh2YWwsIDE2KTsKICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYXNzZXJ0KCEiJ3R5cGUnIG5vdCBpbiBbZHVveFhdIik7CiAgICAgfQogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzMzE3LDEyICsxMzkxNSwxNCBAQAogCiAgICAgLyogVG8gbW9kaWZ5IHRoZSBzdHJpbmcgaW4tcGxhY2UsIHRoZXJlIGNhbiBvbmx5IGJlIG9uZSByZWZlcmVuY2UuICovCiAgICAgaWYgKFB5X1JFRkNOVChyZXN1bHQpICE9IDEpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgYnVmID0gUHlVbmljb2RlX0RBVEEocmVzdWx0KTsKICAgICBsbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzdWx0KTsKICAgICBpZiAobGxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyB0b28gbGFyZ2UgaW4gX1B5Qnl0ZXNfRm9ybWF0TG9uZyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzMzM0LDcgKzEzOTM0LDcgQEAKICAgICBhc3NlcnQobnVtZGlnaXRzID4gMCk7CiAKICAgICAvKiBHZXQgcmlkIG9mIGJhc2UgbWFya2VyIHVubGVzcyBGX0FMVCAqLwotICAgIGlmICgoKGZsYWdzICYgRl9BTFQpID09IDAgJiYKKyAgICBpZiAoKChhcmctPmZsYWdzICYgRl9BTFQpID09IDAgJiYKICAgICAgICAgKHR5cGUgPT0gJ28nIHx8IHR5cGUgPT0gJ3gnIHx8IHR5cGUgPT0gJ1gnKSkpIHsKICAgICAgICAgYXNzZXJ0KGJ1ZltzaWduXSA9PSAnMCcpOwogICAgICAgICBhc3NlcnQoYnVmW3NpZ24rMV0gPT0gJ3gnIHx8IGJ1ZltzaWduKzFdID09ICdYJyB8fApAQCAtMTMzNzksMTUgKzEzOTc5LDEyMSBAQAogICAgICAgICAgICAgaWYgKGJ1ZltpXSA+PSAnYScgJiYgYnVmW2ldIDw9ICd4JykKICAgICAgICAgICAgICAgICBidWZbaV0gLT0gJ2EnLSdBJzsKICAgICB9Ci0gICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2socmVzdWx0KSB8fCBsZW4gIT0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzdWx0KSkgeworICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHJlc3VsdCkKKyAgICAgICAgfHwgYnVmICE9IFB5VW5pY29kZV9EQVRBKHJlc3VsdCkpIHsKICAgICAgICAgUHlPYmplY3QgKnVuaWNvZGU7CiAgICAgICAgIHVuaWNvZGUgPSBfUHlVbmljb2RlX0Zyb21BU0NJSShidWYsIGxlbik7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXN1bHQgPSB1bmljb2RlOwogICAgIH0KKyAgICBlbHNlIGlmIChsZW4gIT0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzdWx0KSkgeworICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmcmVzdWx0LCBsZW4pIDwgMCkKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8qIEZvcm1hdCBhbiBpbnRlZ2VyIG9yIGEgZmxvYXQgYXMgYW4gaW50ZWdlci4KKyAqIFJldHVybiAxIGlmIHRoZSBudW1iZXIgaGFzIGJlZW4gZm9ybWF0dGVkIGludG8gdGhlIHdyaXRlciwKKyAqICAgICAgICAwIGlmIHRoZSBudW1iZXIgaGFzIGJlZW4gZm9ybWF0dGVkIGludG8gKnBfb3V0cHV0CisgKiAgICAgICAtMSBhbmQgcmFpc2UgYW4gZXhjZXB0aW9uIG9uIGVycm9yICovCitzdGF0aWMgaW50CittYWluZm9ybWF0bG9uZyhQeU9iamVjdCAqdiwKKyAgICAgICAgICAgICAgIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnLAorICAgICAgICAgICAgICAgUHlPYmplY3QgKipwX291dHB1dCwKKyAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK3sKKyAgICBQeU9iamVjdCAqaW9iaiwgKnJlczsKKyAgICBjaGFyIHR5cGUgPSAoY2hhcilhcmctPmNoOworCisgICAgaWYgKCFQeU51bWJlcl9DaGVjayh2KSkKKyAgICAgICAgZ290byB3cm9uZ3R5cGU7CisKKyAgICAvKiBtYWtlIHN1cmUgbnVtYmVyIGlzIGEgdHlwZSBvZiBpbnRlZ2VyICovCisgICAgLyogaWYgbm90LCBpc3N1ZSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciBub3cgKi8KKyAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgeworICAgICAgICBpZiAodHlwZSA9PSAnbycgfHwgdHlwZSA9PSAneCcgfHwgdHlwZSA9PSAnWCcpIHsKKyAgICAgICAgICAgIGlvYmogPSBQeU51bWJlcl9JbmRleCh2KTsKKyAgICAgICAgICAgIGlmIChpb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9tYXRpYyBpbnQgY29udmVyc2lvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfTG9uZyh2KTsKKyAgICAgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3cm9uZ3R5cGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfTG9uZyh2KTsKKyAgICAgICAgICAgIGlmIChpb2JqID09IE5VTEwgKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byB3cm9uZ3R5cGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydChQeUxvbmdfQ2hlY2soaW9iaikpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaW9iaiA9IHY7CisgICAgICAgIFB5X0lOQ1JFRihpb2JqKTsKKyAgICB9CisKKyAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikKKyAgICAgICAgJiYgYXJnLT53aWR0aCA9PSAtMSAmJiBhcmctPnByZWMgPT0gLTEKKyAgICAgICAgJiYgIShhcmctPmZsYWdzICYgKEZfU0lHTiB8IEZfQkxBTkspKQorICAgICAgICAmJiB0eXBlICE9ICdYJykKKyAgICB7CisgICAgICAgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICBpbnQgYWx0ZXJuYXRlID0gYXJnLT5mbGFncyAmIEZfQUxUOworICAgICAgICBpbnQgYmFzZTsKKworICAgICAgICBzd2l0Y2godHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBhc3NlcnQoMCAmJiAiJ3R5cGUnIG5vdCBpbiBbZGl1b3hYXSIpOworICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICBjYXNlICdpJzoKKyAgICAgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ28nOgorICAgICAgICAgICAgICAgIGJhc2UgPSA4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICBjYXNlICdYJzoKKyAgICAgICAgICAgICAgICBiYXNlID0gMTY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIod3JpdGVyLCB2LCBiYXNlLCBhbHRlcm5hdGUpID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGlvYmopOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXMgPSBmb3JtYXRsb25nKGlvYmosIGFyZyk7CisgICAgUHlfREVDUkVGKGlvYmopOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICpwX291dHB1dCA9IHJlczsKKyAgICByZXR1cm4gMDsKKword3Jvbmd0eXBlOgorICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiJSUlYyBmb3JtYXQ6IGEgbnVtYmVyIGlzIHJlcXVpcmVkLCAiCisgICAgICAgICAgICAibm90ICUuMjAwcyIsCisgICAgICAgICAgICB0eXBlLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKKyAgICByZXR1cm4gLTE7Cit9CisKIHN0YXRpYyBQeV9VQ1M0CiBmb3JtYXRjaGFyKFB5T2JqZWN0ICp2KQogewpAQCAtMTMzOTksOCArMTQxMDUsMzAgQEAKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgLyogSW50ZWdlciBpbnB1dCB0cnVuY2F0ZWQgdG8gYSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgUHlPYmplY3QgKmlvYmo7CiAgICAgICAgIGxvbmcgeDsKKyAgICAgICAgLyogbWFrZSBzdXJlIG51bWJlciBpcyBhIHR5cGUgb2YgaW50ZWdlciAqLworICAgICAgICAvKiBpZiBub3QsIGlzc3VlIGRlcHJlY2F0aW9uIHdhcm5pbmcgZm9yIG5vdyAqLworICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgeworICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0luZGV4KHYpOworICAgICAgICAgICAgaWYgKGlvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXV0b21hdGljIGludCBjb252ZXJzaW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlvYmogPSBQeU51bWJlcl9Mb25nKHYpOworICAgICAgICAgICAgICAgIGlmIChpb2JqID09IE5VTEwgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2ID0gaW9iajsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICAgICAgfQorICAgICAgICAvKiBJbnRlZ2VyIGlucHV0IHRydW5jYXRlZCB0byBhIGNoYXJhY3RlciAqLwogICAgICAgICB4ID0gUHlMb25nX0FzTG9uZyh2KTsKICAgICAgICAgaWYgKHggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKQEAgLTEzNDIwLDU0MCArMTQxNDgsNTg4IEBACiAgICAgcmV0dXJuIChQeV9VQ1M0KSAtMTsKIH0KIAorLyogUGFyc2Ugb3B0aW9ucyBvZiBhbiBhcmd1bWVudDogZmxhZ3MsIHdpZHRoLCBwcmVjaXNpb24uCisgICBIYW5kbGUgYWxzbyAiJShuYW1lKSIgc3ludGF4LgorCisgICBSZXR1cm4gMCBpZiB0aGUgYXJndW1lbnQgaGFzIGJlZW4gZm9ybWF0dGVkIGludG8gYXJnLT5zdHIuCisgICBSZXR1cm4gMSBpZiB0aGUgYXJndW1lbnQgaGFzIGJlZW4gd3JpdHRlbiBpbnRvIGN0eC0+d3JpdGVyLAorICAgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitzdGF0aWMgaW50Cit1bmljb2RlX2Zvcm1hdF9hcmdfcGFyc2Uoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZykKK3sKKyNkZWZpbmUgRk9STUFUX1JFQUQoY3R4KSBcCisgICAgICAgIFB5VW5pY29kZV9SRUFEKChjdHgpLT5mbXRraW5kLCAoY3R4KS0+Zm10ZGF0YSwgKGN0eCktPmZtdHBvcykKKworICAgIFB5T2JqZWN0ICp2OworCisgICAgaWYgKGFyZy0+Y2ggPT0gJygnKSB7CisgICAgICAgIC8qIEdldCBhcmd1bWVudCB2YWx1ZSBmcm9tIGEgZGljdGlvbmFyeS4gRXhhbXBsZTogIiUobmFtZSlzIi4gKi8KKyAgICAgICAgUHlfc3NpemVfdCBrZXlzdGFydDsKKyAgICAgICAgUHlfc3NpemVfdCBrZXlsZW47CisgICAgICAgIFB5T2JqZWN0ICprZXk7CisgICAgICAgIGludCBwY291bnQgPSAxOworCisgICAgICAgIGlmIChjdHgtPmRpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IHJlcXVpcmVzIGEgbWFwcGluZyIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICsrY3R4LT5mbXRwb3M7CisgICAgICAgIC0tY3R4LT5mbXRjbnQ7CisgICAgICAgIGtleXN0YXJ0ID0gY3R4LT5mbXRwb3M7CisgICAgICAgIC8qIFNraXAgb3ZlciBiYWxhbmNlZCBwYXJlbnRoZXNlcyAqLworICAgICAgICB3aGlsZSAocGNvdW50ID4gMCAmJiAtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgaWYgKGFyZy0+Y2ggPT0gJyknKQorICAgICAgICAgICAgICAgIC0tcGNvdW50OworICAgICAgICAgICAgZWxzZSBpZiAoYXJnLT5jaCA9PSAnKCcpCisgICAgICAgICAgICAgICAgKytwY291bnQ7CisgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICB9CisgICAgICAgIGtleWxlbiA9IGN0eC0+Zm10cG9zIC0ga2V5c3RhcnQgLSAxOworICAgICAgICBpZiAoY3R4LT5mbXRjbnQgPCAwIHx8IHBjb3VudCA+IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvbXBsZXRlIGZvcm1hdCBrZXkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBrZXkgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKGN0eC0+Zm10c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXN0YXJ0LCBrZXlzdGFydCArIGtleWxlbik7CisgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGN0eC0+YXJnc19vd25lZCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGN0eC0+YXJncyk7CisgICAgICAgICAgICBjdHgtPmFyZ3Nfb3duZWQgPSAwOworICAgICAgICB9CisgICAgICAgIGN0eC0+YXJncyA9IFB5T2JqZWN0X0dldEl0ZW0oY3R4LT5kaWN0LCBrZXkpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgaWYgKGN0eC0+YXJncyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBjdHgtPmFyZ3Nfb3duZWQgPSAxOworICAgICAgICBjdHgtPmFyZ2xlbiA9IC0xOworICAgICAgICBjdHgtPmFyZ2lkeCA9IC0yOworICAgIH0KKworICAgIC8qIFBhcnNlIGZsYWdzLiBFeGFtcGxlOiAiJStpIiA9PiBmbGFncz1GX1NJR04uICovCisgICAgd2hpbGUgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgc3dpdGNoIChhcmctPmNoKSB7CisgICAgICAgIGNhc2UgJy0nOiBhcmctPmZsYWdzIHw9IEZfTEpVU1Q7IGNvbnRpbnVlOworICAgICAgICBjYXNlICcrJzogYXJnLT5mbGFncyB8PSBGX1NJR047IGNvbnRpbnVlOworICAgICAgICBjYXNlICcgJzogYXJnLT5mbGFncyB8PSBGX0JMQU5LOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnIyc6IGFyZy0+ZmxhZ3MgfD0gRl9BTFQ7IGNvbnRpbnVlOworICAgICAgICBjYXNlICcwJzogYXJnLT5mbGFncyB8PSBGX1pFUk87IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIFBhcnNlIHdpZHRoLiBFeGFtcGxlOiAiJTEwcyIgPT4gd2lkdGg9MTAgKi8KKyAgICBpZiAoYXJnLT5jaCA9PSAnKicpIHsKKyAgICAgICAgdiA9IHVuaWNvZGVfZm9ybWF0X2dldG5leHRhcmcoY3R4KTsKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiogd2FudHMgaW50Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgYXJnLT53aWR0aCA9IFB5TG9uZ19Bc1NzaXplX3Qodik7CisgICAgICAgIGlmIChhcmctPndpZHRoID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChhcmctPndpZHRoIDwgMCkgeworICAgICAgICAgICAgYXJnLT5mbGFncyB8PSBGX0xKVVNUOworICAgICAgICAgICAgYXJnLT53aWR0aCA9IC1hcmctPndpZHRoOworICAgICAgICB9CisgICAgICAgIGlmICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChhcmctPmNoID49ICcwJyAmJiBhcmctPmNoIDw9ICc5JykgeworICAgICAgICBhcmctPndpZHRoID0gYXJnLT5jaCAtICcwJzsKKyAgICAgICAgd2hpbGUgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICAgICAgaWYgKGFyZy0+Y2ggPCAnMCcgfHwgYXJnLT5jaCA+ICc5JykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8qIFNpbmNlIGFyZy0+Y2ggaXMgdW5zaWduZWQsIHRoZSBSSFMgd291bGQgZW5kIHVwIGFzIHVuc2lnbmVkLAorICAgICAgICAgICAgICAgbWl4aW5nIHNpZ25lZCBhbmQgdW5zaWduZWQgY29tcGFyaXNvbi4gU2luY2UgYXJnLT5jaCBpcyBiZXR3ZWVuCisgICAgICAgICAgICAgICAnMCcgYW5kICc5JywgY2FzdGluZyB0byBpbnQgaXMgc2FmZS4gKi8KKyAgICAgICAgICAgIGlmIChhcmctPndpZHRoID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpYXJnLT5jaCAtICcwJykpIC8gMTApIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIHRvbyBiaWciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmctPndpZHRoID0gYXJnLT53aWR0aCoxMCArIChhcmctPmNoIC0gJzAnKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFBhcnNlIHByZWNpc2lvbi4gRXhhbXBsZTogIiUuM2YiID0+IHByZWM9MyAqLworICAgIGlmIChhcmctPmNoID09ICcuJykgeworICAgICAgICBhcmctPnByZWMgPSAwOworICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFyZy0+Y2ggPT0gJyonKSB7CisgICAgICAgICAgICB2ID0gdW5pY29kZV9mb3JtYXRfZ2V0bmV4dGFyZyhjdHgpOworICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFyZy0+cHJlYyA9IF9QeUxvbmdfQXNJbnQodik7CisgICAgICAgICAgICBpZiAoYXJnLT5wcmVjID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGFyZy0+cHJlYyA8IDApCisgICAgICAgICAgICAgICAgYXJnLT5wcmVjID0gMDsKKyAgICAgICAgICAgIGlmICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFyZy0+Y2ggPj0gJzAnICYmIGFyZy0+Y2ggPD0gJzknKSB7CisgICAgICAgICAgICBhcmctPnByZWMgPSBhcmctPmNoIC0gJzAnOworICAgICAgICAgICAgd2hpbGUgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgICAgICAgICAgaWYgKGFyZy0+Y2ggPCAnMCcgfHwgYXJnLT5jaCA+ICc5JykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKGFyZy0+cHJlYyA+IChJTlRfTUFYIC0gKChpbnQpYXJnLT5jaCAtICcwJykpIC8gMTApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlY2lzaW9uIHRvbyBiaWciKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcmctPnByZWMgPSBhcmctPnByZWMqMTAgKyAoYXJnLT5jaCAtICcwJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBJZ25vcmUgImgiLCAibCIgYW5kICJMIiBmb3JtYXQgcHJlZml4IChleDogIiVoaSIgb3IgIiVscyIpICovCisgICAgaWYgKGN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgaWYgKGFyZy0+Y2ggPT0gJ2gnIHx8IGFyZy0+Y2ggPT0gJ2wnIHx8IGFyZy0+Y2ggPT0gJ0wnKSB7CisgICAgICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY3R4LT5mbXRjbnQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImluY29tcGxldGUgZm9ybWF0Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisKKyN1bmRlZiBGT1JNQVRfUkVBRAorfQorCisvKiBGb3JtYXQgb25lIGFyZ3VtZW50LiBTdXBwb3J0ZWQgY29udmVyc2lvbiBzcGVjaWZpZXJzOgorCisgICAtICJzIiwgInIiLCAiYSI6IGFueSB0eXBlCisgICAtICJpIiwgImQiLCAidSI6IGludCBvciBmbG9hdAorICAgLSAibyIsICJ4IiwgIlgiOiBpbnQKKyAgIC0gImUiLCAiRSIsICJmIiwgIkYiLCAiZyIsICJHIjogZmxvYXQKKyAgIC0gImMiOiBpbnQgb3Igc3RyICgxIGNoYXJhY3RlcikKKworICAgV2hlbiBwb3NzaWJsZSwgdGhlIG91dHB1dCBpcyB3cml0dGVuIGRpcmVjdGx5IGludG8gdGhlIFVuaWNvZGUgd3JpdGVyCisgICAoY3R4LT53cml0ZXIpLiBBIHN0cmluZyBpcyBjcmVhdGVkIHdoZW4gcGFkZGluZyBpcyByZXF1aXJlZC4KKworICAgUmV0dXJuIDAgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvICpwX3N0ciwKKyAgICAgICAgICAxIGlmIHRoZSBhcmd1bWVudCBoYXMgYmVlbiB3cml0dGVuIGludG8gY3R4LT53cml0ZXIsCisgICAgICAgICAtMSBvbiBlcnJvci4gKi8KK3N0YXRpYyBpbnQKK3VuaWNvZGVfZm9ybWF0X2FyZ19mb3JtYXQoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9zdHIpCit7CisgICAgUHlPYmplY3QgKnY7CisgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyID0gJmN0eC0+d3JpdGVyOworCisgICAgaWYgKGN0eC0+Zm10Y250ID09IDApCisgICAgICAgIGN0eC0+d3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisKKyAgICBpZiAoYXJnLT5jaCA9PSAnJScpIHsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgJyUnKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHYgPSB1bmljb2RlX2Zvcm1hdF9nZXRuZXh0YXJnKGN0eCk7CisgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICBzd2l0Y2ggKGFyZy0+Y2gpIHsKKyAgICBjYXNlICdzJzoKKyAgICBjYXNlICdyJzoKKyAgICBjYXNlICdhJzoKKyAgICAgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpICYmIGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xKSB7CisgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcih3cml0ZXIsIHYsIDEwLCBhcmctPmZsYWdzICYgRl9BTFQpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpICYmIGFyZy0+Y2ggPT0gJ3MnKSB7CisgICAgICAgICAgICAqcF9zdHIgPSB2OworICAgICAgICAgICAgUHlfSU5DUkVGKCpwX3N0cik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoYXJnLT5jaCA9PSAncycpCisgICAgICAgICAgICAgICAgKnBfc3RyID0gUHlPYmplY3RfU3RyKHYpOworICAgICAgICAgICAgZWxzZSBpZiAoYXJnLT5jaCA9PSAncicpCisgICAgICAgICAgICAgICAgKnBfc3RyID0gUHlPYmplY3RfUmVwcih2KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqcF9zdHIgPSBQeU9iamVjdF9BU0NJSSh2KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgJ2knOgorICAgIGNhc2UgJ2QnOgorICAgIGNhc2UgJ3UnOgorICAgIGNhc2UgJ28nOgorICAgIGNhc2UgJ3gnOgorICAgIGNhc2UgJ1gnOgorICAgIHsKKyAgICAgICAgaW50IHJldCA9IG1haW5mb3JtYXRsb25nKHYsIGFyZywgcF9zdHIsIHdyaXRlcik7CisgICAgICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIGFyZy0+c2lnbiA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ2UnOgorICAgIGNhc2UgJ0UnOgorICAgIGNhc2UgJ2YnOgorICAgIGNhc2UgJ0YnOgorICAgIGNhc2UgJ2cnOgorICAgIGNhc2UgJ0cnOgorICAgICAgICBpZiAoYXJnLT53aWR0aCA9PSAtMSAmJiBhcmctPnByZWMgPT0gLTEKKyAgICAgICAgICAgICYmICEoYXJnLT5mbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICAgICAgaWYgKGZvcm1hdGZsb2F0KHYsIGFyZywgTlVMTCwgd3JpdGVyKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZy0+c2lnbiA9IDE7CisgICAgICAgIGlmIChmb3JtYXRmbG9hdCh2LCBhcmcsIHBfc3RyLCBOVUxMKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdjJzoKKyAgICB7CisgICAgICAgIFB5X1VDUzQgY2ggPSBmb3JtYXRjaGFyKHYpOworICAgICAgICBpZiAoY2ggPT0gKFB5X1VDUzQpIC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYXJnLT53aWR0aCA9PSAtMSAmJiBhcmctPnByZWMgPT0gLTEpIHsKKyAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgY2gpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICAqcF9zdHIgPSBQeVVuaWNvZGVfRnJvbU9yZGluYWwoY2gpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyICclYycgKDB4JXgpICIKKyAgICAgICAgICAgICAgICAgICAgICJhdCBpbmRleCAlemQiLAorICAgICAgICAgICAgICAgICAgICAgKDMxPD1hcmctPmNoICYmIGFyZy0+Y2g8PTEyNikgPyAoY2hhcilhcmctPmNoIDogJz8nLAorICAgICAgICAgICAgICAgICAgICAgKGludClhcmctPmNoLAorICAgICAgICAgICAgICAgICAgICAgY3R4LT5mbXRwb3MgLSAxKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoKnBfc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBhc3NlcnQgKFB5VW5pY29kZV9DaGVjaygqcF9zdHIpKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordW5pY29kZV9mb3JtYXRfYXJnX291dHB1dChzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0cikKK3sKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBlbnVtIFB5VW5pY29kZV9LaW5kIGtpbmQ7CisgICAgdm9pZCAqcGJ1ZjsKKyAgICBQeV9zc2l6ZV90IHBpbmRleDsKKyAgICBQeV9VQ1M0IHNpZ25jaGFyOworICAgIFB5X3NzaXplX3QgYnVmbGVuOworICAgIFB5X1VDUzQgbWF4Y2hhcjsKKyAgICBQeV9zc2l6ZV90IHN1YmxlbjsKKyAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIgPSAmY3R4LT53cml0ZXI7CisgICAgUHlfVUNTNCBmaWxsOworCisgICAgZmlsbCA9ICcgJzsKKyAgICBpZiAoYXJnLT5zaWduICYmIGFyZy0+ZmxhZ3MgJiBGX1pFUk8pCisgICAgICAgIGZpbGwgPSAnMCc7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7CisgICAgaWYgKChhcmctPndpZHRoID09IC0xIHx8IGFyZy0+d2lkdGggPD0gbGVuKQorICAgICAgICAmJiAoYXJnLT5wcmVjID09IC0xIHx8IGFyZy0+cHJlYyA+PSBsZW4pCisgICAgICAgICYmICEoYXJnLT5mbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkpCisgICAgeworICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCBzdHIpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBUcnVuY2F0ZSB0aGUgc3RyaW5nIGZvciAicyIsICJyIiBhbmQgImEiIGZvcm1hdHMKKyAgICAgICBpZiB0aGUgcHJlY2lzaW9uIGlzIHNldCAqLworICAgIGlmIChhcmctPmNoID09ICdzJyB8fCBhcmctPmNoID09ICdyJyB8fCBhcmctPmNoID09ICdhJykgeworICAgICAgICBpZiAoYXJnLT5wcmVjID49IDAgJiYgbGVuID4gYXJnLT5wcmVjKQorICAgICAgICAgICAgbGVuID0gYXJnLT5wcmVjOworICAgIH0KKworICAgIC8qIEFkanVzdCBzaWduIGFuZCB3aWR0aCAqLworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzdHIpOworICAgIHBidWYgPSBQeVVuaWNvZGVfREFUQShzdHIpOworICAgIHBpbmRleCA9IDA7CisgICAgc2lnbmNoYXIgPSAnXDAnOworICAgIGlmIChhcmctPnNpZ24pIHsKKyAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCk7CisgICAgICAgIGlmIChjaCA9PSAnLScgfHwgY2ggPT0gJysnKSB7CisgICAgICAgICAgICBzaWduY2hhciA9IGNoOworICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICBwaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhcmctPmZsYWdzICYgRl9TSUdOKQorICAgICAgICAgICAgc2lnbmNoYXIgPSAnKyc7CisgICAgICAgIGVsc2UgaWYgKGFyZy0+ZmxhZ3MgJiBGX0JMQU5LKQorICAgICAgICAgICAgc2lnbmNoYXIgPSAnICc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZy0+c2lnbiA9IDA7CisgICAgfQorICAgIGlmIChhcmctPndpZHRoIDwgbGVuKQorICAgICAgICBhcmctPndpZHRoID0gbGVuOworCisgICAgLyogUHJlcGFyZSB0aGUgd3JpdGVyICovCisgICAgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKyAgICBpZiAoIShhcmctPmZsYWdzICYgRl9MSlVTVCkpIHsKKyAgICAgICAgaWYgKGFyZy0+c2lnbikgeworICAgICAgICAgICAgaWYgKChhcmctPndpZHRoLTEpID4gbGVuKQorICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgZmlsbCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoYXJnLT53aWR0aCA+IGxlbikKKyAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGZpbGwpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKSA+IG1heGNoYXIpIHsKKyAgICAgICAgUHlfVUNTNCBzdHJtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcihzdHIsIDAsIHBpbmRleCtsZW4pOworICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHN0cm1heGNoYXIpOworICAgIH0KKworICAgIGJ1ZmxlbiA9IGFyZy0+d2lkdGg7CisgICAgaWYgKGFyZy0+c2lnbiAmJiBsZW4gPT0gYXJnLT53aWR0aCkKKyAgICAgICAgYnVmbGVuKys7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGJ1ZmxlbiwgbWF4Y2hhcikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIFdyaXRlIHRoZSBzaWduIGlmIG5lZWRlZCAqLworICAgIGlmIChhcmctPnNpZ24pIHsKKyAgICAgICAgaWYgKGZpbGwgIT0gJyAnKSB7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCBzaWduY2hhcik7CisgICAgICAgICAgICB3cml0ZXItPnBvcyArPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChhcmctPndpZHRoID4gbGVuKQorICAgICAgICAgICAgYXJnLT53aWR0aC0tOworICAgIH0KKworICAgIC8qIFdyaXRlIHRoZSBudW1lcmljIHByZWZpeCBmb3IgIngiLCAiWCIgYW5kICJvIiBmb3JtYXRzCisgICAgICAgaWYgdGhlIGFsdGVybmF0ZSBmb3JtIGlzIHVzZWQuCisgICAgICAgRm9yIGV4YW1wbGUsIHdyaXRlICIweCIgZm9yIHRoZSAiJSN4IiBmb3JtYXQuICovCisgICAgaWYgKChhcmctPmZsYWdzICYgRl9BTFQpICYmIChhcmctPmNoID09ICd4JyB8fCBhcmctPmNoID09ICdYJyB8fCBhcmctPmNoID09ICdvJykpIHsKKyAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCkgPT0gJzAnKTsKKyAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCArIDEpID09IGFyZy0+Y2gpOworICAgICAgICBpZiAoZmlsbCAhPSAnICcpIHsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsICcwJyk7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zKzEsIGFyZy0+Y2gpOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gMjsKKyAgICAgICAgICAgIHBpbmRleCArPSAyOworICAgICAgICB9CisgICAgICAgIGFyZy0+d2lkdGggLT0gMjsKKyAgICAgICAgaWYgKGFyZy0+d2lkdGggPCAwKQorICAgICAgICAgICAgYXJnLT53aWR0aCA9IDA7CisgICAgICAgIGxlbiAtPSAyOworICAgIH0KKworICAgIC8qIFBhZCBsZWZ0IHdpdGggdGhlIGZpbGwgY2hhcmFjdGVyIGlmIG5lZWRlZCAqLworICAgIGlmIChhcmctPndpZHRoID4gbGVuICYmICEoYXJnLT5mbGFncyAmIEZfTEpVU1QpKSB7CisgICAgICAgIHN1YmxlbiA9IGFyZy0+d2lkdGggLSBsZW47CisgICAgICAgIEZJTEwod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIGZpbGwsIHdyaXRlci0+cG9zLCBzdWJsZW4pOworICAgICAgICB3cml0ZXItPnBvcyArPSBzdWJsZW47CisgICAgICAgIGFyZy0+d2lkdGggPSBsZW47CisgICAgfQorCisgICAgLyogSWYgcGFkZGluZyB3aXRoIHNwYWNlczogd3JpdGUgc2lnbiBpZiBuZWVkZWQgYW5kL29yIG51bWVyaWMgcHJlZml4IGlmCisgICAgICAgdGhlIGFsdGVybmF0ZSBmb3JtIGlzIHVzZWQgKi8KKyAgICBpZiAoZmlsbCA9PSAnICcpIHsKKyAgICAgICAgaWYgKGFyZy0+c2lnbikgeworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgc2lnbmNoYXIpOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGFyZy0+ZmxhZ3MgJiBGX0FMVCkgJiYgKGFyZy0+Y2ggPT0gJ3gnIHx8IGFyZy0+Y2ggPT0gJ1gnIHx8IGFyZy0+Y2ggPT0gJ28nKSkgeworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCkgPT0gJzAnKTsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgrMSkgPT0gYXJnLT5jaCk7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCAnMCcpOworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcysxLCBhcmctPmNoKTsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IDI7CisgICAgICAgICAgICBwaW5kZXggKz0gMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFdyaXRlIGNoYXJhY3RlcnMgKi8KKyAgICBpZiAobGVuKSB7CisgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBwaW5kZXgsIGxlbik7CisgICAgICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICB9CisKKyAgICAvKiBQYWQgcmlnaHQgd2l0aCB0aGUgZmlsbCBjaGFyYWN0ZXIgaWYgbmVlZGVkICovCisgICAgaWYgKGFyZy0+d2lkdGggPiBsZW4pIHsKKyAgICAgICAgc3VibGVuID0gYXJnLT53aWR0aCAtIGxlbjsKKyAgICAgICAgRklMTCh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgJyAnLCB3cml0ZXItPnBvcywgc3VibGVuKTsKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gc3VibGVuOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyogSGVscGVyIG9mIFB5VW5pY29kZV9Gb3JtYXQoKTogZm9ybWF0IG9uZSBhcmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK3N0YXRpYyBpbnQKK3VuaWNvZGVfZm9ybWF0X2FyZyhzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCAqY3R4KQoreworICAgIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCBhcmc7CisgICAgUHlPYmplY3QgKnN0cjsKKyAgICBpbnQgcmV0OworCisgICAgYXJnLmNoID0gUHlVbmljb2RlX1JFQUQoY3R4LT5mbXRraW5kLCBjdHgtPmZtdGRhdGEsIGN0eC0+Zm10cG9zKTsKKyAgICBhcmcuZmxhZ3MgPSAwOworICAgIGFyZy53aWR0aCA9IC0xOworICAgIGFyZy5wcmVjID0gLTE7CisgICAgYXJnLnNpZ24gPSAwOworICAgIHN0ciA9IE5VTEw7CisKKyAgICByZXQgPSB1bmljb2RlX2Zvcm1hdF9hcmdfcGFyc2UoY3R4LCAmYXJnKTsKKyAgICBpZiAocmV0ID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXQgPSB1bmljb2RlX2Zvcm1hdF9hcmdfZm9ybWF0KGN0eCwgJmFyZywgJnN0cik7CisgICAgaWYgKHJldCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKHJldCAhPSAxKSB7CisgICAgICAgIHJldCA9IHVuaWNvZGVfZm9ybWF0X2FyZ19vdXRwdXQoY3R4LCAmYXJnLCBzdHIpOworICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgaWYgKHJldCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoY3R4LT5kaWN0ICYmIChjdHgtPmFyZ2lkeCA8IGN0eC0+YXJnbGVuKSAmJiBhcmcuY2ggIT0gJyUnKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAibm90IGFsbCBhcmd1bWVudHMgY29udmVydGVkIGR1cmluZyBzdHJpbmcgZm9ybWF0dGluZyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiBQeU9iamVjdCAqCiBQeVVuaWNvZGVfRm9ybWF0KFB5T2JqZWN0ICpmb3JtYXQsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5X3NzaXplX3QgZm10Y250LCBmbXRwb3MsIGFyZ2xlbiwgYXJnaWR4OwotICAgIGludCBhcmdzX293bmVkID0gMDsKLSAgICBQeU9iamVjdCAqZGljdCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnRlbXAgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpzZWNvbmQgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp1Zm9ybWF0OwotICAgIHZvaWQgKmZtdDsKLSAgICBlbnVtIFB5VW5pY29kZV9LaW5kIGtpbmQsIGZtdGtpbmQ7Ci0gICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7Ci0gICAgUHlfc3NpemVfdCBzdWJsZW47Ci0gICAgUHlfVUNTNCBtYXhjaGFyOworICAgIHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90IGN0eDsKIAogICAgIGlmIChmb3JtYXQgPT0gTlVMTCB8fCBhcmdzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICB1Zm9ybWF0ID0gUHlVbmljb2RlX0Zyb21PYmplY3QoZm9ybWF0KTsKLSAgICBpZiAodWZvcm1hdCA9PSBOVUxMKQorCisgICAgY3R4LmZtdHN0ciA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KGZvcm1hdCk7CisgICAgaWYgKGN0eC5mbXRzdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWSh1Zm9ybWF0KSA9PSAtMSkgewotICAgICAgICBQeV9ERUNSRUYodWZvcm1hdCk7CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShjdHguZm10c3RyKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoY3R4LmZtdHN0cik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBjdHguZm10ZGF0YSA9IFB5VW5pY29kZV9EQVRBKGN0eC5mbXRzdHIpOworICAgIGN0eC5mbXRraW5kID0gUHlVbmljb2RlX0tJTkQoY3R4LmZtdHN0cik7CisgICAgY3R4LmZtdGNudCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGN0eC5mbXRzdHIpOworICAgIGN0eC5mbXRwb3MgPSAwOwogCi0gICAgZm10ID0gUHlVbmljb2RlX0RBVEEodWZvcm1hdCk7Ci0gICAgZm10a2luZCA9IFB5VW5pY29kZV9LSU5EKHVmb3JtYXQpOwotICAgIGZtdGNudCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHVmb3JtYXQpOwotICAgIGZtdHBvcyA9IDA7Ci0KLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgZm10Y250ICsgMTAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJmN0eC53cml0ZXIpOworICAgIGN0eC53cml0ZXIubWluX2xlbmd0aCA9IGN0eC5mbXRjbnQgKyAxMDA7CisgICAgY3R4LndyaXRlci5vdmVyYWxsb2NhdGUgPSAxOwogCiAgICAgaWYgKFB5VHVwbGVfQ2hlY2soYXJncykpIHsKLSAgICAgICAgYXJnbGVuID0gUHlUdXBsZV9TaXplKGFyZ3MpOwotICAgICAgICBhcmdpZHggPSAwOworICAgICAgICBjdHguYXJnbGVuID0gUHlUdXBsZV9TaXplKGFyZ3MpOworICAgICAgICBjdHguYXJnaWR4ID0gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGFyZ2xlbiA9IC0xOwotICAgICAgICBhcmdpZHggPSAtMjsKKyAgICAgICAgY3R4LmFyZ2xlbiA9IC0xOworICAgICAgICBjdHguYXJnaWR4ID0gLTI7CiAgICAgfQorICAgIGN0eC5hcmdzX293bmVkID0gMDsKICAgICBpZiAoUHlNYXBwaW5nX0NoZWNrKGFyZ3MpICYmICFQeVR1cGxlX0NoZWNrKGFyZ3MpICYmICFQeVVuaWNvZGVfQ2hlY2soYXJncykpCi0gICAgICAgIGRpY3QgPSBhcmdzOworICAgICAgICBjdHguZGljdCA9IGFyZ3M7CisgICAgZWxzZQorICAgICAgICBjdHguZGljdCA9IE5VTEw7CisgICAgY3R4LmFyZ3MgPSBhcmdzOwogCi0gICAgd2hpbGUgKC0tZm10Y250ID49IDApIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKSAhPSAnJScpIHsKKyAgICB3aGlsZSAoLS1jdHguZm10Y250ID49IDApIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGN0eC5mbXRraW5kLCBjdHguZm10ZGF0YSwgY3R4LmZtdHBvcykgIT0gJyUnKSB7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IG5vbmZtdHBvczsKLSAgICAgICAgICAgIG5vbmZtdHBvcyA9IGZtdHBvcysrOwotICAgICAgICAgICAgd2hpbGUgKGZtdGNudCA+PSAwICYmCi0gICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MpICE9ICclJykgewotICAgICAgICAgICAgICAgIGZtdHBvcysrOwotICAgICAgICAgICAgICAgIGZtdGNudC0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZtdGNudCA8IDApCi0gICAgICAgICAgICAgICAgZm10cG9zLS07Ci0gICAgICAgICAgICBzdWJsZW4gPSBmbXRwb3MgLSBub25mbXRwb3M7Ci0gICAgICAgICAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcih1Zm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uZm10cG9zLCBub25mbXRwb3MgKyBzdWJsZW4pOwotICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCBzdWJsZW4sIG1heGNoYXIpID09IC0xKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKIAotICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLmJ1ZmZlciwgd3JpdGVyLnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVmb3JtYXQsIG5vbmZtdHBvcywgc3VibGVuKTsKLSAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gc3VibGVuOworICAgICAgICAgICAgbm9uZm10cG9zID0gY3R4LmZtdHBvcysrOworICAgICAgICAgICAgd2hpbGUgKGN0eC5mbXRjbnQgPj0gMCAmJgorICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEKGN0eC5mbXRraW5kLCBjdHguZm10ZGF0YSwgY3R4LmZtdHBvcykgIT0gJyUnKSB7CisgICAgICAgICAgICAgICAgY3R4LmZtdHBvcysrOworICAgICAgICAgICAgICAgIGN0eC5mbXRjbnQtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdHguZm10Y250IDwgMCkgeworICAgICAgICAgICAgICAgIGN0eC5mbXRwb3MtLTsKKyAgICAgICAgICAgICAgICBjdHgud3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3Vic3RyaW5nKCZjdHgud3JpdGVyLCBjdHguZm10c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uZm10cG9zLCBjdHguZm10cG9zKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogR290IGEgZm9ybWF0IHNwZWNpZmllciAqLwotICAgICAgICAgICAgaW50IGZsYWdzID0gMDsKLSAgICAgICAgICAgIFB5X3NzaXplX3Qgd2lkdGggPSAtMTsKLSAgICAgICAgICAgIGludCBwcmVjID0gLTE7Ci0gICAgICAgICAgICBQeV9VQ1M0IGMgPSAnXDAnOwotICAgICAgICAgICAgUHlfVUNTNCBmaWxsOwotICAgICAgICAgICAgaW50IHNpZ247Ci0gICAgICAgICAgICBQeV9VQ1M0IHNpZ25jaGFyOwotICAgICAgICAgICAgaW50IGlzbnVtb2s7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdiA9IE5VTEw7Ci0gICAgICAgICAgICB2b2lkICpwYnVmID0gTlVMTDsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgcGluZGV4LCBsZW47Ci0gICAgICAgICAgICBQeV9VQ1M0IGJ1Zm1heGNoYXI7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKLQotICAgICAgICAgICAgZm10cG9zKys7Ci0gICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MpOwotICAgICAgICAgICAgaWYgKGMgPT0gJygnKSB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBrZXlzdGFydDsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGtleWxlbjsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqa2V5OwotICAgICAgICAgICAgICAgIGludCBwY291bnQgPSAxOwotCi0gICAgICAgICAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCByZXF1aXJlcyBhIG1hcHBpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK2ZtdHBvczsKLSAgICAgICAgICAgICAgICAtLWZtdGNudDsKLSAgICAgICAgICAgICAgICBrZXlzdGFydCA9IGZtdHBvczsKLSAgICAgICAgICAgICAgICAvKiBTa2lwIG92ZXIgYmFsYW5jZWQgcGFyZW50aGVzZXMgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAocGNvdW50ID4gMCAmJiAtLWZtdGNudCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjID09ICcpJykKLSAgICAgICAgICAgICAgICAgICAgICAgIC0tcGNvdW50OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09ICcoJykKLSAgICAgICAgICAgICAgICAgICAgICAgICsrcGNvdW50OwotICAgICAgICAgICAgICAgICAgICBmbXRwb3MrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAga2V5bGVuID0gZm10cG9zIC0ga2V5c3RhcnQgLSAxOwotICAgICAgICAgICAgICAgIGlmIChmbXRjbnQgPCAwIHx8IHBjb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSBmb3JtYXQga2V5Iik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAga2V5ID0gUHlVbmljb2RlX1N1YnN0cmluZyh1Zm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5c3RhcnQsIGtleXN0YXJ0ICsga2V5bGVuKTsKLSAgICAgICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICBpZiAoYXJnc19vd25lZCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXJncyk7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3Nfb3duZWQgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdzID0gUHlPYmplY3RfR2V0SXRlbShkaWN0LCBrZXkpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwotICAgICAgICAgICAgICAgIGlmIChhcmdzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdzX293bmVkID0gMTsKLSAgICAgICAgICAgICAgICBhcmdsZW4gPSAtMTsKLSAgICAgICAgICAgICAgICBhcmdpZHggPSAtMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICgtLWZtdGNudCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgICAgICAgIGNhc2UgJy0nOiBmbGFncyB8PSBGX0xKVVNUOyBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjYXNlICcrJzogZmxhZ3MgfD0gRl9TSUdOOyBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjYXNlICcgJzogZmxhZ3MgfD0gRl9CTEFOSzsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAnIyc6IGZsYWdzIHw9IEZfQUxUOyBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjYXNlICcwJzogZmxhZ3MgfD0gRl9aRVJPOyBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYyA9PSAnKicpIHsKLSAgICAgICAgICAgICAgICB2ID0gZ2V0bmV4dGFyZyhhcmdzLCBhcmdsZW4sICZhcmdpZHgpOwotICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiogd2FudHMgaW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBQeUxvbmdfQXNTc2l6ZV90KHYpOwotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSBGX0xKVVNUOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IC13aWR0aDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKC0tZm10Y250ID49IDApCi0gICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBjIC0gJzAnOwotICAgICAgICAgICAgICAgIHdoaWxlICgtLWZtdGNudCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAvKiBTaW5jZSBjIGlzIHVuc2lnbmVkLCB0aGUgUkhTIHdvdWxkIGVuZCB1cCBhcyB1bnNpZ25lZCwKLSAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5nIHNpZ25lZCBhbmQgdW5zaWduZWQgY29tcGFyaXNvbi4gU2luY2UgYyBpcyBiZXR3ZWVuCi0gICAgICAgICAgICAgICAgICAgICAgICcwJyBhbmQgJzknLCBjYXN0aW5nIHRvIGludCBpcyBzYWZlLiAqLwotICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoUFlfU1NJWkVfVF9NQVggLSAoKGludCljIC0gJzAnKSkgLyAxMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIHRvbyBiaWciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHdpZHRoKjEwICsgKGMgLSAnMCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjID09ICcuJykgewotICAgICAgICAgICAgICAgIHByZWMgPSAwOwotICAgICAgICAgICAgICAgIGlmICgtLWZtdGNudCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAgIHYgPSBnZXRuZXh0YXJnKGFyZ3MsIGFyZ2xlbiwgJmFyZ2lkeCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHByZWMgPSBfUHlMb25nX0FzSW50KHYpOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJlYyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJlYyA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKC0tZm10Y250ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByZWMgPSBjIC0gJzAnOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoLS1mbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVjID4gKElOVF9NQVggLSAoKGludCljIC0gJzAnKSkgLyAxMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlYyB0b28gYmlnIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcHJlYyA9IHByZWMqMTAgKyAoYyAtICcwJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IC8qIHByZWMgKi8KLSAgICAgICAgICAgIGlmIChmbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgIGlmIChjID09ICdoJyB8fCBjID09ICdsJyB8fCBjID09ICdMJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoLS1mbXRjbnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZm10Y250IDwgMCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSBmb3JtYXQiKTsKKyAgICAgICAgICAgIGN0eC5mbXRwb3MrKzsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2Zvcm1hdF9hcmcoJmN0eCkgPT0gLTEpCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZtdGNudCA9PSAwKQotICAgICAgICAgICAgICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgICAgICBpZiAoYyA9PSAnJScpIHsKLSAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIDEsICclJykgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCAnJScpOwotICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdiA9IGdldG5leHRhcmcoYXJncywgYXJnbGVuLCAmYXJnaWR4KTsKLSAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotCi0gICAgICAgICAgICBzaWduID0gMDsKLSAgICAgICAgICAgIHNpZ25jaGFyID0gJ1wwJzsKLSAgICAgICAgICAgIGZpbGwgPSAnICc7Ci0gICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLQotICAgICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICBjYXNlICdyJzoKLSAgICAgICAgICAgIGNhc2UgJ2EnOgotICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSAmJiB3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgMTAsIGZsYWdzICYgRl9BTFQpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpICYmIGMgPT0gJ3MnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXAgPSB2OwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodGVtcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAncycpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUHlPYmplY3RfU3RyKHYpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09ICdyJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBQeU9iamVjdF9SZXByKHYpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUHlPYmplY3RfQVNDSUkodik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICBjYXNlICdvJzoKLSAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgY2FzZSAnWCc6Ci0gICAgICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpCi0gICAgICAgICAgICAgICAgICAgICYmIHdpZHRoID09IC0xICYmIHByZWMgPT0gLTEKLSAgICAgICAgICAgICAgICAgICAgJiYgIShmbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2knOgotICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcigmd3JpdGVyLCB2LCAxMCwgZmxhZ3MgJiBGX0FMVCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcigmd3JpdGVyLCB2LCAxNiwgZmxhZ3MgJiBGX0FMVCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdvJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcigmd3JpdGVyLCB2LCA4LCBmbGFncyAmIEZfQUxUKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlzbnVtb2sgPSAwOwotICAgICAgICAgICAgICAgIGlmIChQeU51bWJlcl9DaGVjayh2KSkgewotICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqaW9iaj1OVUxMOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlvYmogPSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGlvYmopOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlvYmohPU5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2soaW9iaikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc251bW9rID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gZm9ybWF0bG9uZyhpb2JqLCBmbGFncywgcHJlYywgKGMgPT0gJ2knPyAnZCc6IGMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFpc251bW9rKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSUlYyBmb3JtYXQ6IGEgbnVtYmVyIGlzIHJlcXVpcmVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIChjaGFyKWMsIFB5X1RZUEUodiktPnRwX25hbWUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZfWkVSTykKLSAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICcwJzsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnZSc6Ci0gICAgICAgICAgICBjYXNlICdFJzoKLSAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgY2FzZSAnRic6Ci0gICAgICAgICAgICBjYXNlICdnJzoKLSAgICAgICAgICAgIGNhc2UgJ0cnOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xCi0gICAgICAgICAgICAgICAgICAgICYmICEoZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXRmbG9hdCh2LCBmbGFncywgcHJlYywgYywgTlVMTCwgJndyaXRlcikgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzaWduID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGX1pFUk8pCi0gICAgICAgICAgICAgICAgICAgIGZpbGwgPSAnMCc7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcm1hdGZsb2F0KHYsIGZsYWdzLCBwcmVjLCBjLCAmdGVtcCwgTlVMTCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHRlbXAgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gZm9ybWF0Y2hhcih2KTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gKFB5X1VDUzQpIC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID09IC0xICYmIHByZWMgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgMSwgY2gpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCBjaCk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKGNoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXIgJyVjJyAoMHgleCkgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXQgaW5kZXggJXpkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMxPD1jICYmIGM8PTEyNikgPyAoY2hhciljIDogJz8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdHBvcyAtIDEpOwotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgYXNzZXJ0IChQeVVuaWNvZGVfQ2hlY2sodGVtcCkpOwotCi0gICAgICAgICAgICBpZiAod2lkdGggPT0gLTEgJiYgcHJlYyA9PSAtMQotICAgICAgICAgICAgICAgICYmICEoZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHRlbXApID09IC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHRlbXApID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIodGVtcCk7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHRlbXApOwotICAgICAgICAgICAgcGJ1ZiA9IFB5VW5pY29kZV9EQVRBKHRlbXApOwotICAgICAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodGVtcCk7Ci0KLSAgICAgICAgICAgIGlmIChjID09ICdzJyB8fCBjID09ICdyJyB8fCBjID09ICdhJykgewotICAgICAgICAgICAgICAgIGlmIChwcmVjID49IDAgJiYgbGVuID4gcHJlYykKLSAgICAgICAgICAgICAgICAgICAgbGVuID0gcHJlYzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogcGJ1ZiBpcyBpbml0aWFsaXplZCBoZXJlLiAqLwotICAgICAgICAgICAgcGluZGV4ID0gMDsKLSAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICctJyB8fCBjaCA9PSAnKycpIHsKLSAgICAgICAgICAgICAgICAgICAgc2lnbmNoYXIgPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgbGVuLS07Ci0gICAgICAgICAgICAgICAgICAgIHBpbmRleCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIEZfU0lHTikKLSAgICAgICAgICAgICAgICAgICAgc2lnbmNoYXIgPSAnKyc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBGX0JMQU5LKQotICAgICAgICAgICAgICAgICAgICBzaWduY2hhciA9ICcgJzsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNpZ24gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdpZHRoIDwgbGVuKQotICAgICAgICAgICAgICAgIHdpZHRoID0gbGVuOwotCi0gICAgICAgICAgICAvKiBDb21wdXRlIHRoZSBsZW5ndGggYW5kIG1heGltdW0gY2hhcmFjdGVyIG9mIHRoZQotICAgICAgICAgICAgICAgd3JpdHRlbiBjaGFyYWN0ZXJzICovCi0gICAgICAgICAgICBidWZtYXhjaGFyID0gMTI3OwotICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBGX0xKVVNUKSkgewotICAgICAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgod2lkdGgtMSkgPiBsZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBidWZtYXhjaGFyID0gUHlfTUFYKGJ1Zm1heGNoYXIsIGZpbGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmbWF4Y2hhciA9IFB5X01BWChidWZtYXhjaGFyLCBmaWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcih0ZW1wLCAwLCBwaW5kZXgrbGVuKTsKLSAgICAgICAgICAgIGJ1Zm1heGNoYXIgPSBQeV9NQVgoYnVmbWF4Y2hhciwgbWF4Y2hhcik7Ci0KLSAgICAgICAgICAgIGJ1ZmxlbiA9IHdpZHRoOwotICAgICAgICAgICAgaWYgKHNpZ24gJiYgbGVuID09IHdpZHRoKQotICAgICAgICAgICAgICAgIGJ1ZmxlbisrOwotCi0gICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIGJ1ZmxlbiwgYnVmbWF4Y2hhcikgPT0gLTEpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotCi0gICAgICAgICAgICAvKiBXcml0ZSBjaGFyYWN0ZXJzICovCi0gICAgICAgICAgICBpZiAoc2lnbikgewotICAgICAgICAgICAgICAgIGlmIChmaWxsICE9ICcgJykgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCBzaWduY2hhcik7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuKQotICAgICAgICAgICAgICAgICAgICB3aWR0aC0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChmbGFncyAmIEZfQUxUKSAmJiAoYyA9PSAneCcgfHwgYyA9PSAnWCcgfHwgYyA9PSAnbycpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCkgPT0gJzAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4ICsgMSkgPT0gYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpbGwgIT0gJyAnKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MsICcwJyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MrMSwgYyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgcGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdpZHRoIC09IDI7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAwOwotICAgICAgICAgICAgICAgIGxlbiAtPSAyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuICYmICEoZmxhZ3MgJiBGX0xKVVNUKSkgewotICAgICAgICAgICAgICAgIHN1YmxlbiA9IHdpZHRoIC0gbGVuOwotICAgICAgICAgICAgICAgIEZJTEwod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCBmaWxsLCB3cml0ZXIucG9zLCBzdWJsZW4pOwotICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gc3VibGVuOwotICAgICAgICAgICAgICAgIHdpZHRoID0gbGVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpbGwgPT0gJyAnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgc2lnbmNoYXIpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGX0FMVCkgJiYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnIHx8IGMgPT0gJ28nKSkgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KSA9PSAnMCcpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KzEpID09IGMpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCAnMCcpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zKzEsIGMpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgIHBpbmRleCArPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxlbikgewotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci5idWZmZXIsIHdyaXRlci5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCwgcGluZGV4LCBsZW4pOwotICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gbGVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuKSB7Ci0gICAgICAgICAgICAgICAgc3VibGVuID0gd2lkdGggLSBsZW47Ci0gICAgICAgICAgICAgICAgRklMTCh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsICcgJywgd3JpdGVyLnBvcywgc3VibGVuKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IHN1YmxlbjsKLSAgICAgICAgICAgIH0KLQotbmV4dGFyZzoKLSAgICAgICAgICAgIGlmIChkaWN0ICYmIChhcmdpZHggPCBhcmdsZW4pICYmIGMgIT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKTsKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9DTEVBUih0ZW1wKTsKLSAgICAgICAgfSAvKiAnJScgKi8KLSAgICB9IC8qIHVudGlsIGVuZCAqLwotICAgIGlmIChhcmdpZHggPCBhcmdsZW4gJiYgIWRpY3QpIHsKKyAgICBpZiAoY3R4LmFyZ2lkeCA8IGN0eC5hcmdsZW4gJiYgIWN0eC5kaWN0KSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGFsbCBhcmd1bWVudHMgY29udmVydGVkIGR1cmluZyBzdHJpbmcgZm9ybWF0dGluZyIpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCi0gICAgaWYgKGFyZ3Nfb3duZWQpIHsKLSAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIGlmIChjdHguYXJnc19vd25lZCkgeworICAgICAgICBQeV9ERUNSRUYoY3R4LmFyZ3MpOwogICAgIH0KLSAgICBQeV9ERUNSRUYodWZvcm1hdCk7Ci0gICAgUHlfWERFQ1JFRih0ZW1wKTsKLSAgICBQeV9YREVDUkVGKHNlY29uZCk7Ci0gICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOworICAgIFB5X0RFQ1JFRihjdHguZm10c3RyKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJmN0eC53cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKHVmb3JtYXQpOwotICAgIFB5X1hERUNSRUYodGVtcCk7Ci0gICAgUHlfWERFQ1JFRihzZWNvbmQpOwotICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKLSAgICBpZiAoYXJnc19vd25lZCkgewotICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgUHlfREVDUkVGKGN0eC5mbXRzdHIpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmY3R4LndyaXRlcik7CisgICAgaWYgKGN0eC5hcmdzX293bmVkKSB7CisgICAgICAgIFB5X0RFQ1JFRihjdHguYXJncyk7CiAgICAgfQogICAgIHJldHVybiBOVUxMOwogfQpAQCAtMTQyMTMsNyArMTQ5ODksNyBAQAogdm9pZAogUHlVbmljb2RlX0ludGVybkluUGxhY2UoUHlPYmplY3QgKipwKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpzID0gKnA7CisgICAgUHlPYmplY3QgKnMgPSAqcDsKICAgICBQeU9iamVjdCAqdDsKICNpZmRlZiBQeV9ERUJVRwogICAgIGFzc2VydChzICE9IE5VTEwpOwpAQCAtMTQyNDIsMTIgKzE1MDE4LDEyIEBACiAgICAgdCA9IFB5RGljdF9HZXRJdGVtKGludGVybmVkLCBzKTsKICAgICBQeV9FTkRfQUxMT1dfUkVDVVJTSU9OCiAKLSAgICAgICAgaWYgKHQpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih0KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRigqcCk7Ci0gICAgICAgICAgICAqcCA9IHQ7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAodCkgeworICAgICAgICBQeV9JTkNSRUYodCk7CisgICAgICAgIFB5X0RFQ1JFRigqcCk7CisgICAgICAgICpwID0gdDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFB5VGhyZWFkU3RhdGVfR0VUKCktPnJlY3Vyc2lvbl9jcml0aWNhbCA9IDE7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtKGludGVybmVkLCBzLCBzKSA8IDApIHsKQEAgLTE0NTQ2LDcgKzE1MzIyLDcgQEAKIGludAogUHlfVU5JQ09ERV9zdHJuY21wKGNvbnN0IFB5X1VOSUNPREUgKnMxLCBjb25zdCBQeV9VTklDT0RFICpzMiwgc2l6ZV90IG4pCiB7Ci0gICAgcmVnaXN0ZXIgUHlfVU5JQ09ERSB1MSwgdTI7CisgICAgUHlfVU5JQ09ERSB1MSwgdTI7CiAgICAgZm9yICg7IG4gIT0gMDsgbi0tKSB7CiAgICAgICAgIHUxID0gKnMxOwogICAgICAgICB1MiA9ICpzMjsKZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaCBiL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaAppbmRleCA0NmE5MmJiLi4xZmRjMDkyIDEwMDY0NAotLS0gYS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKKysrIGIvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCkBAIC0xNTg5LDcgKzE1ODksNyBAQAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgCiAgICAgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNSwgNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEsIDIxLCAyMSwgCiAgICAgMjEsIDIxLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDUsIDAsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgMjUsIDI1LCAyNSwgNSwgMjEsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgOTYsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA3LCA4LCAKQEAgLTE4MDEsNyArMTgwMSw3IEBACiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCA1LCA1LCA5NiwgNSwgNSwgNSwgNSwgNTUsIDI1LCAwLCAwLCA3LCAKICAgICA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDI1LCAyNSwgMjUsIDIsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNSwgMjUsIDI1LCAyMSwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgOTYsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIApAQCAtMTgyOCw3ICsxODI4LDcgQEAKICAgICA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTMyLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMTgsIDE4LCAxOCwgMCwgMCwgNSwgNSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMTgsIDE4LCAyNSwgMCwgMCwgNSwgNSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMjUsIDE4LCAyNSwgCkBAIC0xOTE1LDExICsxOTE1LDExIEBACiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNiwgNSwgNSwgNiwgMywgMywgMjEsIDIxLCAyMSwgMjEsIDIxLCAyLCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOCwgMTgsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE4LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDI0NSwgOTUsIDAsIDAsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjQ1LCA5NSwgMCwgMCwgCiAgICAgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgNSwgNSwgNSwgNSwgNSwgOTUsIDI0NSwgMjYsIDIyLCAyMywgMjQ2LCAKICAgICAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgNSwgNSwgNSwgNSwgNSwgMCwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAogICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCA2LCA2LCA2LCA2LCAyNSwgNiwgNiwgNiwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgMTEzLCA1LCA1LCAKQEAgLTI1OTMsMTAgKzI1OTMsMTAgQEAKICAgICAwLCAwLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCi0gICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMjUyLCAyNTIsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCi0gICAgMTQxLCAxNDEsIDE0MSwgMjUyLCAyNTIsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIApAQCAtMzM4MCw2ICszMzgwLDcgQEAKICAgICBjYXNlIDB4MTI0MzU6CiAgICAgY2FzZSAweDEyNDRBOgogICAgIGNhc2UgMHgxMjQ1MDoKKyAgICBjYXNlIDB4MTI0NTY6CiAgICAgY2FzZSAweDEyNDU5OgogICAgIGNhc2UgMHgxRDM2MToKICAgICBjYXNlIDB4MUQ3RDA6CkBAIC0zNDI3LDYgKzM0MjgsOCBAQAogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjAwMDAuMDsKICAgICBjYXNlIDB4MzI1MToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDIxLjA7CisgICAgY2FzZSAweDEyNDMyOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjE2MDAwLjA7CiAgICAgY2FzZSAweDMyNTI6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAyMi4wOwogICAgIGNhc2UgMHgzMjUzOgpAQCAtMzUzNCw2ICszNTM3LDcgQEAKICAgICBjYXNlIDB4MTI0M0I6CiAgICAgY2FzZSAweDEyNDRCOgogICAgIGNhc2UgMHgxMjQ1MToKKyAgICBjYXNlIDB4MTI0NTc6CiAgICAgY2FzZSAweDFEMzYyOgogICAgIGNhc2UgMHgxRDdEMToKICAgICBjYXNlIDB4MUQ3REI6CkBAIC0zNzIxLDYgKzM3MjUsOCBAQAogICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDIuMDsKICAgICBjYXNlIDB4MzJCODoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQzLjA7CisgICAgY2FzZSAweDEyNDMzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDMyMDAwLjA7CiAgICAgY2FzZSAweDMyQjk6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA0NC4wOwogICAgIGNhc2UgMHgzMkJBOgpAQCAtNDI3MSw3ICs0Mjc3LDcgQEAKIC8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgYmlkaXJlY3Rpb25hbAogICogdHlwZSAnV1MnLCAnQicgb3IgJ1MnIG9yIHRoZSBjYXRlZ29yeSAnWnMnLCAwIG90aGVyd2lzZS4KICAqLwotaW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKHJlZ2lzdGVyIGNvbnN0IFB5X1VDUzQgY2gpCitpbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UoY29uc3QgUHlfVUNTNCBjaCkKIHsKICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgY2FzZSAweDAwMDk6CkBAIC00Mjg3LDcgKzQyOTMsNiBAQAogICAgIGNhc2UgMHgwMDg1OgogICAgIGNhc2UgMHgwMEEwOgogICAgIGNhc2UgMHgxNjgwOgotICAgIGNhc2UgMHgxODBFOgogICAgIGNhc2UgMHgyMDAwOgogICAgIGNhc2UgMHgyMDAxOgogICAgIGNhc2UgMHgyMDAyOgpAQCAtNDMxMyw3ICs0MzE4LDcgQEAKICAqIHByb3BlcnR5ICdCSycsICdDUicsICdMRicgb3IgJ05MJyBvciBoYXZpbmcgYmlkaXJlY3Rpb25hbAogICogdHlwZSAnQicsIDAgb3RoZXJ3aXNlLgogICovCi1pbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKQoraW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsoY29uc3QgUHlfVUNTNCBjaCkKIHsKICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgY2FzZSAweDAwMEE6CmRpZmYgLS1naXQgYS9PYmplY3RzL3dlYWtyZWZvYmplY3QuYyBiL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCmluZGV4IGI0OWRjZWUuLmMwODNmOGYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCisrKyBiL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCkBAIC0zMzgsNiArMzM4LDExIEBACiB9CiAKIAorc3RhdGljIFB5TWVtYmVyRGVmIHdlYWtyZWZfbWVtYmVyc1tdID0geworICAgIHsiX19jYWxsYmFja19fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5V2Vha1JlZmVyZW5jZSwgd3JfY2FsbGJhY2spLCBSRUFET05MWX0sCisgICAge05VTEx9IC8qIFNlbnRpbmVsICovCit9OworCiBQeVR5cGVPYmplY3QKIF9QeVdlYWtyZWZfUmVmVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQpAQCAtMzY5LDcgKzM3NCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMqLworICAgIHdlYWtyZWZfbWVtYmVycywgICAgICAgICAgICAvKnRwX21lbWJlcnMqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldHNldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzZSovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdCovCmRpZmYgLS1naXQgYS9QQy9WQzYvX2N0eXBlcy5kc3AgYi9QQy9WQzYvX2N0eXBlcy5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOThlYWMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19jdHlwZXMuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2N0eXBlcyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fY3R5cGVzIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXMubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXMubWFrIiBDRkc9Il9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfY3R5cGVzIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2N0eXBlcyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlcyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc19kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfY3R5cGVzIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxsYmFja3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbHByb2MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2ZpZWxkLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xtYWxsb2NfY2xvc3VyZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xwcmVwX2NpZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xzdGdkaWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjMyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX2N0eXBlc190ZXN0LmRzcCBiL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWViMjE3Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfY3R5cGVzX3Rlc3QiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXNfdGVzdC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlc190ZXN0Lm1hayIgQ0ZHPSJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9jdHlwZXNfdGVzdCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX3Rlc3QucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX2N0eXBlc190ZXN0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX3Rlc3RfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fZWxlbWVudHRyZWUuZHNwIGIvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYzBjZGQuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfZWxlbWVudHRyZWUiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9lbGVtZW50dHJlZS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2VsZW1lbnR0cmVlLm1hayIgQ0ZHPSJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9lbGVtZW50dHJlZSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EICJCWVRFT1JERVI9MTIzNCIgL0QgIlhNTF9DT05URVhUX0JZVEVTPTEwMjQiIC9EICJVU0VfUFlFWFBBVF9DQVBJIiAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19lbGVtZW50dHJlZS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfZWxlbWVudHRyZWUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgIkJZVEVPUkRFUj0xMjM0IiAvRCAiWE1MX0NPTlRFWFRfQllURVM9MTAyNCIgL0QgIlVTRV9QWUVYUEFUX0NBUEkiIC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2VsZW1lbnR0cmVlX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9lbGVtZW50dHJlZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19tc2kuZHNwIGIvUEMvVkM2L19tc2kuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmE2MWJjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fbXNpLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX21zaSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fbXNpIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tc2kubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tc2kubWFrIiBDRkc9Il9tc2kgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfbXNpIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX21zaSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfbXNpIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX21zaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXNpLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX21zaSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfbXNpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX21zaV9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfbXNpIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQQ1xfbXNpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX211bHRpcHJvY2Vzc2luZy5kc3AgYi9QQy9WQzYvX211bHRpcHJvY2Vzc2luZy5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYjg0NzAuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19tdWx0aXByb2Nlc3NpbmcuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX211bHRpcHJvY2Vzc2luZyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tdWx0aXByb2Nlc3NpbmcubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tdWx0aXByb2Nlc3NpbmcubWFrIiBDRkc9Il9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tdWx0aXByb2Nlc3NpbmcucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9tdWx0aXByb2Nlc3NpbmciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMWQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tdWx0aXByb2Nlc3NpbmdfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xzZW1hcGhvcmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcd2luMzJfZnVuY3Rpb25zLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3NvY2tldC5kc3AgYi9QQy9WQzYvX3NvY2tldC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZWU4ZjIuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19zb2NrZXQuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfc29ja2V0IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9zb2NrZXQgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NvY2tldC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NvY2tldC5tYWsiIENGRz0iX3NvY2tldCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfc29ja2V0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfc29ja2V0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfc29ja2V0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NvY2tldC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NvY2tldCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NvY2tldF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3NvY2tldCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfc29ja2V0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNvY2tldG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19zcWxpdGUzLmRzcCBiL1BDL1ZDNi9fc3FsaXRlMy5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Njk5MzguLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19zcWxpdGUzLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zcWxpdGUzIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9zcWxpdGUzIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zcWxpdGUzLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc3FsaXRlMy5tYWsiIENGRz0iX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3NxbGl0ZTMgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfc3FsaXRlMyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EIE1PRFVMRV9OQU1FPVwic3FsaXRlM1wiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTgwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zcWxpdGUzLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NxbGl0ZTMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCBNT0RVTEVfTkFNRT1cInNxbGl0ZTNcIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc3FsaXRlM19kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3NxbGl0ZTMgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtaWNyb3Byb3RvY29scy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc3NsLmRzcCBiL1BDL1ZDNi9fc3NsLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiYjk5My4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3NzbC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zc2wiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEV4dGVybmFsIFRhcmdldCIgMHgwMTA2DQotDQotQ0ZHPV9zc2wgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NzbC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NzbC5tYWsiIENGRz0iX3NzbCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfc3NsIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBFeHRlcm5hbCBUYXJnZXQiKQ0KLSFNRVNTQUdFICJfc3NsIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBDbWRfTGluZSAiTk1BS0UgL2YgX3NzbC5tYWsiDQotIyBQUk9QIEJBU0UgUmVidWlsZF9PcHQgIi9hIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9GaWxlICJfc3NsLmV4ZSINCi0jIFBST1AgQkFTRSBCc2NfTmFtZSAiX3NzbC5ic2MiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3NzbCINCi0jIFBST1AgQ21kX0xpbmUgInB5dGhvbiBidWlsZF9zc2wucHkiDQotIyBQUk9QIFJlYnVpbGRfT3B0ICItYSINCi0jIFBST1AgVGFyZ2V0X0ZpbGUgIl9zc2wucHlkIg0KLSMgUFJPUCBCc2NfTmFtZSAiIg0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3NsIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zc2wiDQotIyBQUk9QIEJBU0UgQ21kX0xpbmUgIk5NQUtFIC9mIF9zc2wubWFrIg0KLSMgUFJPUCBCQVNFIFJlYnVpbGRfT3B0ICIvYSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRmlsZSAiX3NzbF9kLnB5ZCINCi0jIFBST1AgQkFTRSBCc2NfTmFtZSAiX3NzbF9kLmJzYyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCINCi0jIFBST1AgQ21kX0xpbmUgInB5dGhvbl9kIC11IGJ1aWxkX3NzbC5weSAtZCINCi0jIFBST1AgUmVidWlsZF9PcHQgIi1hIg0KLSMgUFJPUCBUYXJnZXRfRmlsZSAiX3NzbF9kLnB5ZCINCi0jIFBST1AgQnNjX05hbWUgIiINCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfc3NsIC0gV2luMzIgRGVidWciDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zc2wuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc3NsLm1hayBiL1BDL1ZDNi9fc3NsLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc3YTYxNC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3NzbC5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0KLSFJRkRFRiBERUJVRwotTU9EVUxFPV9zc2xfZC5weWQKLVRFTVBfRElSPXg4Ni10ZW1wLWRlYnVnL19zc2wKLUNGTEFHUz0vT2QgL1ppIC9NRGQgL0xEZCAvRERFQlVHIC9EX0RFQlVHIC9EV0lOMzIKLUxGTEFHUz0vbm9kZWZhdWx0bGliOiJtc3ZjcnQiCi0hRUxTRQotTU9EVUxFPV9zc2wucHlkCi1URU1QX0RJUj14ODYtdGVtcC1yZWxlYXNlL19zc2wKLUNGTEFHUz0vT3ggL01EIC9MRCAvRFdJTjMyCi1MRkxBR1M9Ci0hRU5ESUYKLQotSU5DTFVERVM9LUkgLi4vLi4vSW5jbHVkZSAtSSAuLiAtSSAkKFNTTF9ESVIpL2luYzMyCi1TU0xfTElCX0RJUj0kKFNTTF9ESVIpL291dDMyCi1MSUJTPWdkaTMyLmxpYiB3c29jazMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbGlicGF0aDokKFNTTF9MSUJfRElSKSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliCi0KLVNPVVJDRT0uLi8uLi9Nb2R1bGVzL19zc2wuYyAkKFNTTF9MSUJfRElSKS9saWJlYXkzMi5saWIgJChTU0xfTElCX0RJUikvc3NsZWF5MzIubGliCi0KLSQoTU9EVUxFKTogJChTT1VSQ0UpIC4uLyouaCAuLi8uLi9JbmNsdWRlLyouaAotICAgIEBpZiBub3QgZXhpc3QgIiQoVEVNUF9ESVIpLy4iIG1rZGlyICIkKFRFTVBfRElSKSIKLSAgICBjbCAvbm9sb2dvICQoU09VUkNFKSAkKENGTEFHUykgL0ZvJChURU1QX0RJUilcJCoub2JqICQoSU5DTFVERVMpIC9saW5rIC9vdXQ6JChNT0RVTEUpICQoTElCUykgJChMRkxBR1MpCmRpZmYgLS1naXQgYS9QQy9WQzYvX3Rlc3RjYXBpLmRzcCBiL1BDL1ZDNi9fdGVzdGNhcGkuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWFhMjVhLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fdGVzdGNhcGkuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfdGVzdGNhcGkiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3Rlc3RjYXBpIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl90ZXN0Y2FwaS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3Rlc3RjYXBpLm1hayIgQ0ZHPSJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3Rlc3RjYXBpIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl90ZXN0Y2FwaSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfdGVzdGNhcGkgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfdGVzdGNhcGkiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUYwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGVzdGNhcGkucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3Rlc3RjYXBpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUYwMDAwIiAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3Rlc3RjYXBpX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfdGVzdGNhcGkgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF90ZXN0Y2FwaW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L190a2ludGVyLmRzcCBiL1BDL1ZDNi9fdGtpbnRlci5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNjlmNTkuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L190a2ludGVyLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il90a2ludGVyIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV90a2ludGVyIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3RraW50ZXIubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl90a2ludGVyLm1hayIgQ0ZHPSJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl90a2ludGVyIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3RraW50ZXIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uXC4uXC4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3RraW50ZXIgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3RraW50ZXIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlIiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiV0lUSF9BUFBJTklUIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXHRjbHRrXGxpYlx0azg1Zy5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg1Zy5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE5MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGtpbnRlcl9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF90a2ludGVyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXC4uXHRjbHRrXGluY2x1ZGUiIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJXSVRIX0FQUElOSVQiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cdGNsdGtcbGliXHRrODUubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NS5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE5MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGtpbnRlci5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGtpbnRlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcdGthcHBpbml0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvYnVpbGRfc3NsLnB5IGIvUEMvVkM2L2J1aWxkX3NzbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVhZjA4NC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvYnVpbGRfc3NsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLSMgU2NyaXB0IGZvciBidWlsZGluZyB0aGUgX3NzbCBtb2R1bGUgZm9yIFdpbmRvd3MuCi0jIFVzZXMgUGVybCB0byBzZXR1cCB0aGUgT3BlblNTTCBlbnZpcm9ubWVudCBjb3JyZWN0bHkKLSMgYW5kIGJ1aWxkIE9wZW5TU0wsIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBubWFrZSBzZXNzaW9uCi0jIGZvciBfc3NsLnB5ZCBpdHNlbGYuCi0KLSMgVEhFT1JFVElDQUxMWSwgeW91IGNhbjoKLSMgKiBVbnBhY2sgdGhlIGxhdGVzdCBTU0wgcmVsZWFzZSBvbmUgbGV2ZWwgYWJvdmUgeW91ciBtYWluIFB5dGhvbiBzb3VyY2UKLSMgICBkaXJlY3RvcnkuICBJdCBpcyBsaWtlbHkgeW91IHdpbGwgYWxyZWFkeSBmaW5kIHRoZSB6bGliIGxpYnJhcnkgYW5kCi0jICAgYW55IG90aGVyIGV4dGVybmFsIHBhY2thZ2VzIHRoZXJlLgotIyAqIEluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGlzIHNvbWV3aGVyZSBvbiB5b3VyIHBhdGguCi0jICogUnVuIHRoaXMgc2NyaXB0IGZyb20gdGhlIFBDL1ZDNiBkaXJlY3RvcnkuCi0jCi0jIGl0IHNob3VsZCBjb25maWd1cmUgYW5kIGJ1aWxkIFNTTCwgdGhlbiBidWlsZCB0aGUgc3NsIFB5dGhvbiBleHRlbnNpb24KLSMgd2l0aG91dCBpbnRlcnZlbnRpb24uCi0KLSMgTW9kaWZpZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcwotIyBOb3cgdGhpcyBzY3JpcHQgc3VwcG9ydHMgcHJlLWdlbmVyYXRlZCBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgotIyBEZXZlbG9wZXJzIGRvbid0IG5lZWQgYW4gaW5zdGFsbGF0aW9uIG9mIFBlcmwgYW55bW9yZSB0byBidWlsZCBQeXRob24uIEEgc3ZuCi0jIGNoZWNrb3V0IGZyb20gb3VyIHN2biByZXBvc2l0b3J5IGlzIGVub3VnaC4KLQotaW1wb3J0IG9zLCBzeXMsIHJlLCBzaHV0aWwKLQotIyBGaW5kIGFsbCAiZm9vLmV4ZSIgZmlsZXMgb24gdGhlIFBBVEguCi1kZWYgZmluZF9hbGxfb25fcGF0aChmaWxlbmFtZSwgZXh0cmFzID0gTm9uZSk6Ci0gICAgZW50cmllcyA9IG9zLmVudmlyb25bIlBBVEgiXS5zcGxpdChvcy5wYXRoc2VwKQotICAgIHJldCA9IFtdCi0gICAgZm9yIHAgaW4gZW50cmllczoKLSAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICBpZiBleHRyYXM6Ci0gICAgICAgIGZvciBwIGluIGV4dHJhczoKLSAgICAgICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICByZXR1cm4gcmV0Ci0KLSMgRmluZCBhIHN1aXRhYmxlIFBlcmwgaW5zdGFsbGF0aW9uIGZvciBPcGVuU1NMLgotIyBjeWd3aW4gcGVybCBkb2VzICpub3QqIHdvcmsuICBBY3RpdmVQZXJsIGRvZXMuCi0jIEJlaW5nIGEgUGVybCBkdW1teSwgdGhlIHNpbXBsZXN0IHdheSBJIGNhbiBjaGVjayBpcyBpZiB0aGUgIldpbjMyIiBwYWNrYWdlCi0jIGlzIGF2YWlsYWJsZS4KLWRlZiBmaW5kX3dvcmtpbmdfcGVybChwZXJscyk6Ci0gICAgZm9yIHBlcmwgaW4gcGVybHM6Ci0gICAgICAgIGZoID0gb3MucG9wZW4oJyIlcyIgLWUgInVzZSBXaW4zMjsiJyAlIHBlcmwpCi0gICAgICAgIGZoLnJlYWQoKQotICAgICAgICByYyA9IGZoLmNsb3NlKCkKLSAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICByZXR1cm4gcGVybAotICAgIHByaW50KCJDYW4gbm90IGZpbmQgYSBzdWl0YWJsZSBQRVJMOiIpCi0gICAgaWYgcGVybHM6Ci0gICAgICAgIHByaW50KCIgdGhlIGZvbGxvd2luZyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kOiIpCi0gICAgICAgIGZvciBwIGluIHBlcmxzOgotICAgICAgICAgICAgcHJpbnQoIiAiLCBwKQotICAgICAgICBwcmludCgiIE5vbmUgb2YgdGhlc2UgdmVyc2lvbnMgYXBwZWFyIHN1aXRhYmxlIGZvciBidWlsZGluZyBPcGVuU1NMIikKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiIE5PIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQgb24gdGhpcyBtYWNoaW5lIGF0IGFsbCEiKQotICAgIHByaW50KCIgUGxlYXNlIGluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGFwcGVhcnMgb24geW91ciBwYXRoIikKLSAgICByZXR1cm4gTm9uZQotCi0jIExvY2F0ZSB0aGUgYmVzdCBTU0wgZGlyZWN0b3J5IGdpdmVuIGEgZmV3IHJvb3RzIHRvIGxvb2sgaW50by4KLWRlZiBmaW5kX2Jlc3Rfc3NsX2Rpcihzb3VyY2VzKToKLSAgICBjYW5kaWRhdGVzID0gW10KLSAgICBmb3IgcyBpbiBzb3VyY2VzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIG5vdGU6IGRvIG5vdCBhYnNwYXRoIHM7IHRoZSBidWlsZCB3aWxsIGZhaWwgaWYgYW55Ci0gICAgICAgICAgICAjIGhpZ2hlciB1cCBkaXJlY3RvcnkgbmFtZSBoYXMgc3BhY2VzIGluIGl0LgotICAgICAgICAgICAgZm5hbWVzID0gb3MubGlzdGRpcihzKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICBmbmFtZXMgPSBbXQotICAgICAgICBmb3IgZm5hbWUgaW4gZm5hbWVzOgotICAgICAgICAgICAgZnFuID0gb3MucGF0aC5qb2luKHMsIGZuYW1lKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmcW4pIGFuZCBmbmFtZS5zdGFydHN3aXRoKCJvcGVuc3NsLSIpOgotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGZxbikKLSAgICAjIE5vdyB3ZSBoYXZlIGFsbCB0aGUgY2FuZGlkYXRlcywgbG9jYXRlIHRoZSBiZXN0LgotICAgIGJlc3RfcGFydHMgPSBbXQotICAgIGJlc3RfbmFtZSA9IE5vbmUKLSAgICBmb3IgYyBpbiBjYW5kaWRhdGVzOgotICAgICAgICBwYXJ0cyA9IHJlLnNwbGl0KCJbLi1dIiwgb3MucGF0aC5iYXNlbmFtZShjKSlbMTpdCi0gICAgICAgICMgZWcgLSBvcGVuc3NsLTAuOS43LWJldGExIC0gaWdub3JlIGFsbCAiYmV0YSIgb3IgYW55IG90aGVyIHF1YWxpZmllcnMKLSAgICAgICAgaWYgbGVuKHBhcnRzKSA+PSA0OgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgcGFydHMgPiBiZXN0X3BhcnRzOgotICAgICAgICAgICAgYmVzdF9wYXJ0cyA9IHBhcnRzCi0gICAgICAgICAgICBiZXN0X25hbWUgPSBjCi0gICAgaWYgYmVzdF9uYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcmludCgiRm91bmQgYW4gU1NMIGRpcmVjdG9yeSBhdCAnJXMnIiAlIChiZXN0X25hbWUsKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiQ291bGQgbm90IGZpbmQgYW4gU1NMIGRpcmVjdG9yeSBpbiAnJXMnIiAlIChzb3VyY2VzLCkpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgcmV0dXJuIGJlc3RfbmFtZQotCi1kZWYgZml4X21ha2VmaWxlKG1ha2VmaWxlKToKLSAgICAiIiJGaXggc29tZSBzdHVmZiBpbiBhbGwgbWFrZWZpbGVzCi0gICAgIiIiCi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKToKLSAgICAgICAgcmV0dXJuCi0gICAgd2l0aCBvcGVuKG1ha2VmaWxlKSBhcyBmaW46Ci0gICAgICAgIGxpbmVzID0gZmluLnJlYWRsaW5lcygpCi0gICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6Ci0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJQRVJMPSIpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkNQPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSAiQ1A9Y29weVxuIgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJNS0RJUj0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gIk1LRElSPW1rZGlyXG4iCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkNGTEFHPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBmb3IgYWxnbyBpbiAoIlJDNSIsICJNREMyIiwgIklERUEiKToKLSAgICAgICAgICAgICAgICAgICAgbm9hbGdvID0gIiAtRE9QRU5TU0xfTk9fJXMiICUgYWxnbwotICAgICAgICAgICAgICAgICAgICBpZiBub2FsZ28gbm90IGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArIG5vYWxnbwotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJ1xuJwotICAgICAgICAgICAgZm91dC53cml0ZShsaW5lKQotCi1kZWYgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCk6Ci0gICAgcHJpbnQoInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKQotICAgIG9zLnN5c3RlbSgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUpCi0gICAgcHJpbnQoZG9fc2NyaXB0KQotICAgIG9zLnN5c3RlbShkb19zY3JpcHQpCi0KLWRlZiBjbXAoZjEsIGYyKToKLSAgICBidWZzaXplID0gMTAyNCAqIDgKLSAgICB3aXRoIG9wZW4oZjEsICdyYicpIGFzIGZwMSwgb3BlbihmMiwgJ3JiJykgYXMgZnAyOgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgYjEgPSBmcDEucmVhZChidWZzaXplKQotICAgICAgICAgICAgYjIgPSBmcDIucmVhZChidWZzaXplKQotICAgICAgICAgICAgaWYgYjEgIT0gYjI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBpZiBub3QgYjE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotZGVmIGNvcHkoc3JjLCBkc3QpOgotICAgIGlmIG9zLnBhdGguaXNmaWxlKGRzdCkgYW5kIGNtcChzcmMsIGRzdCk6Ci0gICAgICAgIHJldHVybgotICAgIHNodXRpbC5jb3B5KHNyYywgZHN0KQotCi1kZWYgbWFpbigpOgotICAgIGRlYnVnID0gIi1kIiBpbiBzeXMuYXJndgotICAgIGJ1aWxkX2FsbCA9ICItYSIgaW4gc3lzLmFyZ3YKLSAgICBpZiAxOiAjIFdpbjMyCi0gICAgICAgIGFyY2ggPSAieDg2IgotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lOMzIiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fbmFzbSIKLSAgICAgICAgbWFrZWZpbGU9Im1zXFxudC5tYWsiCi0gICAgICAgIG0zMiA9IG1ha2VmaWxlCi0gICAgICAgIGRpcnN1ZmZpeCA9ICIzMiIKLSAgICBjb25maWd1cmUgKz0gIiBuby1pZGVhIG5vLXJjNSBuby1tZGMyIgotICAgIG1ha2VfZmxhZ3MgPSAiIgotICAgIGlmIGJ1aWxkX2FsbDoKLSAgICAgICAgbWFrZV9mbGFncyA9ICItYSIKLSAgICAjIHBlcmwgc2hvdWxkIGJlIG9uIHRoZSBwYXRoLCBidXQgd2UgYWxzbyBsb29rIGluICJccGVybCIgYW5kICJjOlxccGVybCIKLSAgICAjIGFzICJ3ZWxsIGtub3duIiBsb2NhdGlvbnMKLSAgICBwZXJscyA9IGZpbmRfYWxsX29uX3BhdGgoInBlcmwuZXhlIiwgWyJcXHBlcmxcXGJpbiIsICJDOlxccGVybFxcYmluIl0pCi0gICAgcGVybCA9IGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKQotICAgIGlmIHBlcmw6Ci0gICAgICAgIHByaW50KCJGb3VuZCBhIHdvcmtpbmcgcGVybCBhdCAnJXMnIiAlIChwZXJsLCkpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIk5vIFBlcmwgaW5zdGFsbGF0aW9uIHdhcyBmb3VuZC4gRXhpc3RpbmcgTWFrZWZpbGVzIGFyZSB1c2VkLiIpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgIyBMb29rIGZvciBTU0wgMyBsZXZlbHMgdXAgZnJvbSBQQy9WQzYgLSBpZSwgc2FtZSBwbGFjZSB6bGliIGV0YyBhbGwgbGl2ZS4KLSAgICBzc2xfZGlyID0gZmluZF9iZXN0X3NzbF9kaXIoKCIuLlxcLi5cXC4uIiwpKQotICAgIGlmIHNzbF9kaXIgaXMgTm9uZToKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIG9sZF9jZCA9IG9zLmdldGN3ZCgpCi0gICAgdHJ5OgotICAgICAgICBvcy5jaGRpcihzc2xfZGlyKQotICAgICAgICAjIElmIHRoZSBzc2wgbWFrZWZpbGVzIGRvIG5vdCBleGlzdCwgd2UgaW52b2tlIFBlcmwgdG8gZ2VuZXJhdGUgdGhlbS4KLSAgICAgICAgIyBEdWUgdG8gYSBidWcgaW4gdGhpcyBzY3JpcHQsIHRoZSBtYWtlZmlsZSBzb21ldGltZXMgZW5kZWQgdXAgZW1wdHkKLSAgICAgICAgIyBGb3JjZSBhIHJlZ2VuZXJhdGlvbiBpZiBpdCBpcy4KLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKSBvciBvcy5wYXRoLmdldHNpemUobWFrZWZpbGUpPT0wOgotICAgICAgICAgICAgaWYgcGVybCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHByaW50KCJQZXJsIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBtYWtlZmlsZXMhIikKLSAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgICAgICAgICBwcmludCgiQ3JlYXRpbmcgdGhlIG1ha2VmaWxlcy4uLiIpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgICMgUHV0IG91ciB3b3JraW5nIFBlcmwgYXQgdGhlIGZyb250IG9mIG91ciBwYXRoCi0gICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0gPSBvcy5wYXRoLmRpcm5hbWUocGVybCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoc2VwICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdCi0gICAgICAgICAgICBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KQotICAgICAgICAgICAgaWYgZGVidWc6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIk9wZW5TU0wgZGVidWcgYnVpbGRzIGFyZW4ndCBzdXBwb3J0ZWQuIikKLSAgICAgICAgICAgICNpZiBhcmNoPT0ieDg2IiBhbmQgZGVidWc6Ci0gICAgICAgICAgICAjICAgICMgdGhlIGRvX21hc20gc2NyaXB0IGluIG9wZW5zc2wgZG9lc24ndCBnZW5lcmF0ZSBhIGRlYnVnCi0gICAgICAgICAgICAjICAgICMgYnVpbGQgbWFrZWZpbGUgc28gd2UgZ2VuZXJhdGUgaXQgaGVyZToKLSAgICAgICAgICAgICMgICAgb3Muc3lzdGVtKCJwZXJsIHV0aWxcbWsxbWYucGwgZGVidWcgIitjb25maWd1cmUrIiA+IittYWtlZmlsZSkKLQotICAgICAgICAgICAgZml4X21ha2VmaWxlKG1ha2VmaWxlKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZi5oIiwgciJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZi5oIiwgciJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoKQotCi0gICAgICAgICMgSWYgdGhlIGFzc2VtYmxlciBmaWxlcyBkb24ndCBleGlzdCBpbiB0bXBYWCwgY29weSB0aGVtIHRoZXJlCi0gICAgICAgIGlmIHBlcmwgaXMgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygidG1wIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKCJ0bXAiK2RpcnN1ZmZpeCkKLSAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgICAgICBpZiBub3QgZi5lbmRzd2l0aCgiLmFzbSIpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHIidG1wJXNcJXMiICUgKGRpcnN1ZmZpeCwgZikpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KHIiYXNtJXNcJXMiICUgKGRpcnN1ZmZpeCwgZiksICJ0bXAiK2RpcnN1ZmZpeCkKLQotICAgICAgICAjIE5vdyBydW4gbWFrZS4KLSAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXGJ1aWxkaW5mLmgiKQotICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cb3BlbnNzbGNvbmYuaCIpCi0KLSAgICAgICAgI21ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gUEVSTD1cIiVzXCIgLWYgXCIlc1wiIiAlKHBlcmwsIG1ha2VmaWxlKQotICAgICAgICBtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIC1mIFwiJXNcIiIgJSBtYWtlZmlsZQotICAgICAgICBwcmludCgiRXhlY3V0aW5nIHNzbCBtYWtlZmlsZXM6IiwgbWFrZUNvbW1hbmQpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByYyA9IG9zLnN5c3RlbShtYWtlQ29tbWFuZCkKLSAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICBwcmludCgiRXhlY3V0aW5nICIrbWFrZWZpbGUrIiBmYWlsZWQiKQotICAgICAgICAgICAgcHJpbnQocmMpCi0gICAgICAgICAgICBzeXMuZXhpdChyYykKLSAgICBmaW5hbGx5OgotICAgICAgICBvcy5jaGRpcihvbGRfY2QpCi0gICAgIyBBbmQgZmluYWxseSwgd2UgY2FuIGJ1aWxkIHRoZSBfc3NsIG1vZHVsZSBpdHNlbGYgZm9yIFB5dGhvbi4KLSAgICBkZWZzID0gIlNTTF9ESVI9JXMiICUgKHNzbF9kaXIsKQotICAgIGlmIGRlYnVnOgotICAgICAgICBkZWZzID0gZGVmcyArICIgIiArICJERUJVRz0xIgotICAgIHJjID0gb3Muc3lzdGVtKCdubWFrZSAvbm9sb2dvIC1mIF9zc2wubWFrICcgKyBkZWZzICsgIiAiICsgbWFrZV9mbGFncykKLSAgICBzeXMuZXhpdChyYykKLQotaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9QQy9WQzYvYnVpbGRfdGtpbnRlci5weSBiL1BDL1ZDNi9idWlsZF90a2ludGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWNhOTJjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9idWlsZF90a2ludGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgc3VicHJvY2VzcwotCi1UQ0xfTUFKT1IgPSA4Ci1UQ0xfTUlOT1IgPSA1Ci1UQ0xfUEFUQ0ggPSAyCi0KLVRJWF9NQUpPUiA9IDgKLVRJWF9NSU5PUiA9IDQKLVRJWF9QQVRDSCA9IDMKLQotZGVmIGFic3BhdGgobmFtZSk6Ci0gICAgcGFyID0gb3MucGF0aC5wYXJkaXIKLSAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihfX2ZpbGVfXywgcGFyLCBwYXIsIHBhciwgcGFyLCBuYW1lKSkKLQotVENMX0RJUiA9IGFic3BhdGgoInRjbCVkLiVkLiVkIiAlIChUQ0xfTUFKT1IsIFRDTF9NSU5PUiwgVENMX1BBVENIKSkKLVRLX0RJUiAgPSBhYnNwYXRoKCJ0ayVkLiVkLiVkIiAgJSAoVENMX01BSk9SLCBUQ0xfTUlOT1IsIFRDTF9QQVRDSCkpCi1USVhfRElSID0gYWJzcGF0aCgidGl4JWQuJWQuJWQiICUgKFRJWF9NQUpPUiwgVElYX01JTk9SLCBUSVhfUEFUQ0gpKQotT1VUX0RJUiA9IGFic3BhdGgoInRjbHRrIikKLQotZGVmIGhhdmVfYXJncygqYSk6Ci0gICAgcmV0dXJuIGFueShzIGluIHN5cy5hcmd2WzE6XSBmb3IgcyBpbiBhKQotCi1kZWYgZW50ZXIoZGlyKToKLSAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oZGlyLCAid2luIikpCi0KLWRlZiBtYWluKCk6Ci0gICAgZGVidWcgPSBoYXZlX2FyZ3MoIi1kIiwgIi0tZGVidWciKQotICAgIGNsZWFuID0gaGF2ZV9hcmdzKCJjbGVhbiIpCi0gICAgaW5zdGFsbCA9IGhhdmVfYXJncygiaW5zdGFsbCIpCi0gICAgdGNsID0gaGF2ZV9hcmdzKCJ0Y2wiKQotICAgIHRrID0gaGF2ZV9hcmdzKCJ0ayIpCi0gICAgdGl4ID0gaGF2ZV9hcmdzKCJ0aXgiKQotICAgIGlmIG5vdCh0Y2wpIGFuZCBub3QodGspIGFuZCBub3QodGl4KToKLSAgICAgICAgdGNsID0gdGsgPSB0aXggPSBUcnVlCi0KLSAgICBkZWYgbm1ha2UobWFrZWZpbGUsICphKToKLSAgICAgICAgYXJncyA9IFsibm1ha2UiLCAiL25vbG9nbyIsICIvZiIsIG1ha2VmaWxlLCAiREVCVUc9JWQiICUgZGVidWddCi0gICAgICAgIGFyZ3MuZXh0ZW5kKGEpCi0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChhcmdzKQotCi0gICAgaWYgdGNsOgotICAgICAgICBlbnRlcihUQ0xfRElSKQotICAgICAgICBkZWYgbm1ha2VfdGNsKCphKToKLSAgICAgICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICphKQotICAgICAgICBpZiBjbGVhbjoKLSAgICAgICAgICAgIG5tYWtlX3RjbCgiY2xlYW4iKQotICAgICAgICBlbGlmIGluc3RhbGw6Ci0gICAgICAgICAgICBubWFrZV90Y2woImluc3RhbGwiLCAiSU5TVEFMTERJUj0iICsgT1VUX0RJUikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5tYWtlX3RjbCgpCi0KLSAgICBpZiB0azoKLSAgICAgICAgZW50ZXIoVEtfRElSKQotICAgICAgICBkZWYgbm1ha2VfdGsoKmEpOgotICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgIlRDTERJUj0iICsgVENMX0RJUiwgKmEpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2VfdGsoImNsZWFuIikKLSAgICAgICAgZWxpZiBpbnN0YWxsOgotICAgICAgICAgICAgbm1ha2VfdGsoImluc3RhbGwiLCAiSU5TVEFMTERJUj0iICsgT1VUX0RJUikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5tYWtlX3RrKCkKLQotICAgIGlmIHRpeDoKLSAgICAgICAgZW50ZXIoVElYX0RJUikKLSAgICAgICAgZGVmIG5tYWtlX3RpeCgqYSk6Ci0gICAgICAgICAgICBubWFrZSgicHl0aG9uLm1hayIsCi0gICAgICAgICAgICAgICAgICAiVENMX01BSk9SPSVkIiAlIFRDTF9NQUpPUiwKLSAgICAgICAgICAgICAgICAgICJUQ0xfTUlOT1I9JWQiICUgVENMX01JTk9SLAotICAgICAgICAgICAgICAgICAgIlRDTF9QQVRDSD0lZCIgJSBUQ0xfUEFUQ0gsCi0gICAgICAgICAgICAgICAgICAiTUFDSElORT1JWDg2IiwgKmEpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2VfdGl4KCJjbGVhbiIpCi0gICAgICAgIGVsaWYgaW5zdGFsbDoKLSAgICAgICAgICAgIG5tYWtlX3RpeCgiaW5zdGFsbCIsICJJTlNUQUxMX0RJUj0iICsgT1VUX0RJUikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5tYWtlX3RpeCgpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9QQy9WQzYvYnoyLmRzcCBiL1BDL1ZDNi9iejIuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTJjYmFkLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9iejIuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJiejIiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9YnoyIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgImJ6Mi5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiYnoyLm1hayIgQ0ZHPSJiejIgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiYnoyIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgImJ6MiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgImJ6MiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJiejIgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxiejIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cYnppcDItMS4wLjYiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cYnppcDItMS4wLjZcbGliYnoyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTcwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL2J6Mi5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lIC9ub2RlZmF1bHRsaWINCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiYnoyIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXGJ6MiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGJ6aXAyLTEuMC42IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXGJ6aXAyLTEuMC42XGxpYmJ6Mi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE3MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibXN2Y3J0IiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL2J6Ml9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiYnoyIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgImJ6MiAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xiejJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9tYWtlX3ZlcnNpb25pbmZvLmRzcCBiL1BDL1ZDNi9tYWtlX3ZlcnNpb25pbmZvLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTczNWUxMi4uMDAwMDAwMAotLS0gYS9QQy9WQzYvbWFrZV92ZXJzaW9uaW5mby5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJtYWtlX3ZlcnNpb25pbmZvIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMNCi0NCi1DRkc9bWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIm1ha2VfdmVyc2lvbmluZm8ubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIm1ha2VfdmVyc2lvbmluZm8ubWFrIiBDRkc9Im1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAibWFrZV92ZXJzaW9uaW5mbyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcbWFrZV92ZXJzaW9uaW5mbyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLSMgQmVnaW4gQ3VzdG9tIEJ1aWxkDQotSW5wdXRQYXRoPS5cbWFrZV92ZXJzaW9uaW5mby5leGUNCi1TT1VSQ0U9IiQoSW5wdXRQYXRoKSINCi0NCi0iLi5ccHl0aG9ubnRfcmMuaCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCi0JLlxtYWtlX3ZlcnNpb25pbmZvLmV4ZSA+Li5ccHl0aG9ubnRfcmMuaA0KLQ0KLSMgRW5kIEN1c3RvbSBCdWlsZA0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXG1ha2VfdmVyc2lvbmluZm8iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uXC4uXEluY2x1ZGUiIC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9tYWtlX3ZlcnNpb25pbmZvX2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotIyBCZWdpbiBDdXN0b20gQnVpbGQNCi1JbnB1dFBhdGg9LlxtYWtlX3ZlcnNpb25pbmZvX2QuZXhlDQotU09VUkNFPSIkKElucHV0UGF0aCkiDQotDQotIi4uXHB5dGhvbm50X3JjX2QuaCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCi0JLlxtYWtlX3ZlcnNpb25pbmZvX2QuZXhlID4uLlxweXRob25udF9yY19kLmgNCi0NCi0jIEVuZCBDdXN0b20gQnVpbGQNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cbWFrZV92ZXJzaW9uaW5mby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3BjYnVpbGQuZHN3IGIvUEMvVkM2L3BjYnVpbGQuZHN3CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2IyZWJjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9wY2J1aWxkLmRzdworKysgL2Rldi9udWxsCkBAIC0xLDMwNiArMCwwIEBACi1NaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhDQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfY3R5cGVzIj0iLlxfY3R5cGVzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfY3R5cGVzX3Rlc3QiPSIuXF9jdHlwZXNfdGVzdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfZWxlbWVudHRyZWUiPSIuXF9lbGVtZW50dHJlZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfbXNpIj0iLlxfbXNpLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfbXVsdGlwcm9jZXNzaW5nIj0iLlxfbXVsdGlwcm9jZXNzaW5nLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfc29ja2V0Ij0iLlxfc29ja2V0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfc3FsaXRlMyI9Ii5cX3NxbGl0ZTMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3NzbCI9Ii5cX3NzbC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob24NCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSB3OXhwb3Blbg0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfdGVzdGNhcGkiPSIuXF90ZXN0Y2FwaS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX3RraW50ZXIiPSIuXF90a2ludGVyLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJiejIiPSIuXGJ6Mi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJtYWtlX3ZlcnNpb25pbmZvIj0iLlxtYWtlX3ZlcnNpb25pbmZvLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5ZXhwYXQiPSIuXHB5ZXhwYXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5dGhvbiI9Ii5ccHl0aG9uLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJweXRob25jb3JlIj0iLlxweXRob25jb3JlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgbWFrZV92ZXJzaW9uaW5mbw0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJweXRob253Ij0iLlxweXRob253LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzZWxlY3QiPSIuXHNlbGVjdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAidW5pY29kZWRhdGEiPSIuXHVuaWNvZGVkYXRhLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJ3OXhwb3BlbiI9Ii5cdzl4cG9wZW4uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAid2luc291bmQiPSIuXHdpbnNvdW5kLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLUdsb2JhbDoNCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDM+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLQ0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9weWV4cGF0LmRzcCBiL1BDL1ZDNi9weWV4cGF0LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYxYzllZi4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcHlleHBhdC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweWV4cGF0IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweWV4cGF0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweWV4cGF0Lm1hayIgQ0ZHPSJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJweWV4cGF0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAicHlleHBhdCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHlleHBhdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgQllURU9SREVSPTEyMzQgL0QgWE1MX0NPTlRFWFRfQllURVM9MTAyNCAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5ZXhwYXQucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweWV4cGF0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5ZXhwYXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJIQVZFX0VYUEFUX0giIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgQllURU9SREVSPTEyMzQgL0QgWE1MX0NPTlRFWFRfQllURVM9MTAyNCAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5ZXhwYXRfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAicHlleHBhdCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xweWV4cGF0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcHl0aG9uLmRzcCBiL1BDL1ZDNi9weXRob24uZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYThiNzcyLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9weXRob24uZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHl0aG9uIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMNCi0NCi1DRkc9cHl0aG9uIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob24ubWFrIiBDRkc9InB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgInB5dGhvbiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAicHl0aG9uIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweXRob24gLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHl0aG9uIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLi4uXFxJbmNsdWRlIiAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N0YWNrOjB4MjAwMDAwIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5dGhvbl9kLmV4ZSIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAicHl0aG9uIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5dGhvbiAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHljb24uaWNvDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccHl0aG9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHl0aG9uX2V4ZS5yYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9weXRob25jb3JlLmRzcCBiL1BDL1ZDNi9weXRob25jb3JlLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlOThkMS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcHl0aG9uY29yZS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3ODAgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweXRob25jb3JlIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob25jb3JlLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob25jb3JlLm1hayIgQ0ZHPSJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAicHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJweXRob25jb3JlIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAicHl0aG9uY29yZSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHl0aG9uY29yZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxtb2R1bGVzXHpsaWIiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJVU0VfRExfRVhQT1JUIiAvWVggL0ZEIC9abTIwMCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbGFyZ2VpbnQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3B5dGhvbjMzLmRsbCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob25jb3JlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cbW9kdWxlc1x6bGliIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJVU0VfRExfRVhQT1JUIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvWm0yMDAgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uXC4uXEluY2x1ZGUiIC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGxhcmdlaW50LmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9weXRob24zM19kLmRsbCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAicHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJweXRob25jb3JlIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9iaXNlY3Rtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2NuLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19oay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaXNvMjAyMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfanAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2tyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc190dy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2NvZGVjc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2NvbGxlY3Rpb25zbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3N2LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfZGF0ZXRpbWVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9mdW5jdG9vbHNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9oZWFwcW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2pzb24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9sb2NhbGVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9sc3Byb2YuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tYXRoLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfcGlja2xlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3JlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3RydWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUENcX3N1YnByb2Nlc3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF90aHJlYWRtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF90aW1lLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXF93YXJuaW5ncy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGFic3RyYWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xhY2N1LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGFjY2VsZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cYXNkbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxhc3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGF0ZXhpdG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYXVkaW9vcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYmluYXNjaWkuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcYml0c2V0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGJsdGlubW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xib29sb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cYnVmZmVyZWRpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYnl0ZWFycmF5b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlc19tZXRob2RzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cYnl0ZXNpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYnl0ZXNvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNhcHN1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNlbGxvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cY2V2YWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNsYXNzb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjbWF0aG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxjb2RlY3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNvZGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cY29tcGlsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY29tcGxleG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxjb21wcmVzcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXGNvbmZpZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxkeW5hbWljX2Fubm90YXRpb25zLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGRlc2Nyb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xkaWN0b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cZGxfbnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZHRvYS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxkeW5sb2FkX3dpbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZW51bW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXJybm9tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZXJyb3JzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xleGNlcHRpb25zLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cZmlsZWlvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmaWxlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGZpbGV1dGlscy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxmaXJzdHNldHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZsb2F0b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGZvcm1hdHRlcl91bmljb2RlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmcmFtZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmcm96ZW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZ1bmNvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZnV0dXJlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xnY21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZ2Vub2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGFyZ3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jDQotIyBBREQgQ1BQIC9EIEJVSUxEPTQ2DQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRjb21waWxlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRjb3B5cmlnaHQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0b3B0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cZ2V0cGF0aHAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0cGxhdGZvcm0uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0dmVyc2lvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxncmFtaW5pdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxncmFtbWFyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGdyYW1tYXIxLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGd6aW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25caW1wb3J0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGltcG9ydGRsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZmJhY2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9caW9iYXNlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xpdGVyb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xpdGVydG9vbHNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcbGlzdG5vZGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGxpc3RvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGxvbmdvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1haW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cbWFyc2hhbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbWF0aG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xtZW1vcnlvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcbWV0YWdyYW1tYXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG1ldGhvZG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxtb2RzdXBwb3J0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xtb2R1bGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxtc3ZjcnRtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtdWx0aWJ5dGVjb2RlYy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxteXJlYWRsaW5lLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG15c25wcmludGYuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cbXlzdHJ0b3VsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXG5vZGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcb2JtYWxsb2MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG9wZXJhdG9yLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXHBhcnNlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXHBhcnNldG9rLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHBlZXBob2xlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xwb3NpeG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweWFyZW5hLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5Y3R5cGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlmcGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHltYXRoLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5c3RhdGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlzdHJjbXAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlzdHJ0b2QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cUHl0aG9uXFB5dGhvbi1hc3QuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHl0aG9uX250LnJjDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXRob25ydW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHl0aW1lLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHJhbmRvbS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNccmFuZ2VvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaGExbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYTUxMm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2lnbmFsbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xzbGljZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXHN0cmluZ2lvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcc3RydWN0c2VxLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHN5bXRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxzeXNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1x0ZXh0aW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cdGhyZWFkLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x0aW1lbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXHRva2VuaXplci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblx0cmFjZWJhY2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHR1cGxlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x0eXBlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXHVuY29tcHIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHVuaWNvZGVjdHlwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdW5pY29kZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcd2Vha3JlZm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHdpbnJlZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNceHhzdWJ0eXBlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6aXBpbXBvcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9weXRob253LmRzcCBiL1BDL1ZDNi9weXRob253LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTljMzI1Yy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcHl0aG9udy5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweXRob253IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIgMHgwMTAxDQotDQotQ0ZHPXB5dGhvbncgLSBXaW4zMiBBbHBoYSBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob253Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob253Lm1hayIgQ0ZHPSJweXRob253IC0gV2luMzIgQWxwaGEgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAicHl0aG9udyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJweXRob253IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAicHl0aG9udyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi5ccGMiDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJweXRob253IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHl0aG9udyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweXRob253IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5dGhvbnciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHl0aG9ud19kLmV4ZSIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAicHl0aG9udyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJweXRob253IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweXRob25fZXhlLnJjDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXFdpbk1haW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9yZWFkbWUudHh0IGIvUEMvVkM2L3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NzhmODUuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotQnVpbGRpbmcgUHl0aG9uIHVzaW5nIFZDKysgNi4wIG9yIDUuMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBQeXRob24gZm9yIFdpbjMyIHBsYXRmb3JtcywgZS5nLiBXaW5kb3dzCi0yMDAwIGFuZCBYUC4gIEl0IHJlcXVpcmVzIE1pY3Jvc29mdCBWaXN1YWwgQysrIDYueCBvciA1LnggYW5kIFBsYXRmb3JtCi1TREsgRmVicnVhcnkgMjAwMyBFZGl0aW9uIChDb3JlIFNESykuCi0oRm9yIG90aGVyIFdpbmRvd3MgcGxhdGZvcm1zIGFuZCBjb21waWxlcnMsIHNlZSAuLi9yZWFkbWUudHh0LikKLQotQWxsIHlvdSBuZWVkIHRvIGRvIGlzIG9wZW4gdGhlIHdvcmtzcGFjZSAicGNidWlsZC5kc3ciIGluIE1TVkMrKywgc2VsZWN0Ci10aGUgRGVidWcgb3IgUmVsZWFzZSBzZXR0aW5nICh1c2luZyBCdWlsZCAtPiBTZXQgQWN0aXZlIENvbmZpZ3VyYXRpb24uLi4pLAotYW5kIGJ1aWxkIHRoZSBwcm9qZWN0cy4KLQotVGhlIHByb3BlciBvcmRlciB0byBidWlsZCBzdWJwcm9qZWN0czoKLQotMSkgcHl0aG9uY29yZSAodGhpcyBidWlsZHMgdGhlIG1haW4gUHl0aG9uIERMTCBhbmQgbGlicmFyeSBmaWxlcywKLSAgICAgICAgICAgICAgIHB5dGhvbjMzLntkbGwsIGxpYn0gaW4gUmVsZWFzZSBtb2RlKQotCi0yKSBweXRob24gKHRoaXMgYnVpbGRzIHRoZSBtYWluIFB5dGhvbiBleGVjdXRhYmxlLAotICAgICAgICAgICBweXRob24uZXhlIGluIFJlbGVhc2UgbW9kZSkKLQotMykgdGhlIG90aGVyIHN1YnByb2plY3RzLCBhcyBkZXNpcmVkIG9yIG5lZWRlZCAobm90ZTogIHlvdSBwcm9iYWJseSBkb24ndAotICAgd2FudCB0byBidWlsZCBtb3N0IG9mIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgdW5sZXNzIHlvdSdyZSBidWlsZGluZyBhbgotICAgZW50aXJlIFB5dGhvbiBkaXN0cmlidXRpb24gZnJvbSBzY3JhdGNoLCBvciBzcGVjaWZpY2FsbHkgbWFraW5nIGNoYW5nZXMKLSAgIHRvIHRoZSBzdWJzeXN0ZW1zIHRoZXkgaW1wbGVtZW50OyBzZWUgU1VCUFJPSkVDVFMgYmVsb3cpCi0KLVdoZW4gdXNpbmcgdGhlIERlYnVnIHNldHRpbmcsIHRoZSBvdXRwdXQgZmlsZXMgaGF2ZSBhIF9kIGFkZGVkIHRvCi10aGVpciBuYW1lOiAgcHl0aG9uMzNfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcHlleHBhdF9kLnB5ZCwgYW5kIHNvIG9uLgotCi1TVUJQUk9KRUNUUwotLS0tLS0tLS0tLS0KLVRoZXNlIHN1YnByb2plY3RzIHNob3VsZCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFN1YnByb2plY3RzIG90aGVyIHRoYW4gdGhlCi1tYWluIG9uZXMgKHB5dGhvbmNvcmUsIHB5dGhvbiwgcHl0aG9udykgZ2VuZXJhbGx5IGJ1aWxkIGEgRExMIChyZW5hbWVkIHRvCi0ucHlkKSBmcm9tIGEgc3BlY2lmaWMgbW9kdWxlIHNvIHRoYXQgdXNlcnMgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBjb2RlCi1zdXBwb3J0aW5nIHRoYXQgbW9kdWxlIHVubGVzcyB0aGV5IGltcG9ydCB0aGUgbW9kdWxlLgotCi1weXRob25jb3JlCi0gICAgLmRsbCBhbmQgLmxpYgotcHl0aG9uCi0gICAgLmV4ZQotcHl0aG9udwotICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3QgcG9wIHVwIGEgRE9TIGJveAotX21zaQotICAgIF9tc2kuYy4gWW91IG5lZWQgdG8gaW5zdGFsbCBXaW5kb3dzIEluc3RhbGxlciBTREsgdG8gYnVpbGQgdGhpcyBtb2R1bGUuCi1fc29ja2V0Ci0gICAgc29ja2V0bW9kdWxlLmMKLV90ZXN0Y2FwaQotICAgIHRlc3RzIG9mIHRoZSBQeXRob24gQyBBUEksIHJ1biB2aWEgTGliL3Rlc3QvdGVzdF9jYXBpLnB5LCBhbmQKLSAgICBpbXBsZW1lbnRlZCBieSBtb2R1bGUgTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwotcHlleHBhdAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciBhY2NlbGVyYXRlZCBYTUwgcGFyc2luZywgd2hpY2ggaW5jb3Jwb3JhdGVzIHN0YWJsZQotICAgIGNvZGUgZnJvbSB0aGUgRXhwYXQgcHJvamVjdDogIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZXhwYXQvCi1zZWxlY3QKLSAgICBzZWxlY3Rtb2R1bGUuYwotdW5pY29kZWRhdGEKLSAgICBsYXJnZSB0YWJsZXMgb2YgVW5pY29kZSBkYXRhCi13aW5zb3VuZAotICAgIHBsYXkgc291bmRzICh0eXBpY2FsbHkgLndhdiBmaWxlcykgdW5kZXIgV2luZG93cwotCi1UaGUgZm9sbG93aW5nIHN1YnByb2plY3RzIHdpbGwgZ2VuZXJhbGx5IE5PVCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFRoZXkKLXdyYXAgY29kZSBQeXRob24gZG9lc24ndCBjb250cm9sLCBhbmQgeW91J2xsIG5lZWQgdG8gZG93bmxvYWQgdGhlIGJhc2UKLXBhY2thZ2VzIGZpcnN0IGFuZCB1bnBhY2sgdGhlbSBpbnRvIHNpYmxpbmdzIG9mIFBDYnVpbGRzJ3MgcGFyZW50Ci1kaXJlY3Rvcnk7IGZvciBleGFtcGxlLCBpZiB5b3VyIFBDYnVpbGQgaXMgIC4uLi4uLi5cZGlzdFxzcmNcUENidWlsZFwsCi11bnBhY2sgaW50byBuZXcgc3ViZGlyZWN0b3JpZXMgb2YgZGlzdFwuCi0KLV90a2ludGVyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBUayB3aW5kb3dpbmcgc3lzdGVtLiAgUmVxdWlyZXMgYnVpbGRpbmcKLSAgICBUY2wvVGsgZmlyc3QuICBGb2xsb3dpbmcgYXJlIGluc3RydWN0aW9ucyBmb3IgVGNsL1RrIDguNS4yLgotCi0gICAgR2V0IHNvdXJjZQotICAgIC0tLS0tLS0tLS0KLSAgICBJbiB0aGUgZGlzdCBkaXJlY3RvcnksIHJ1bgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RjbC04LjUuMi4xIHRjbDguNS4yCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGstOC41LjIuMCB0azguNS4yCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGl4LTguNC4zLjEgdGl4OC40LjMKLQotICAgIERlYnVnIEJ1aWxkCi0gICAgLS0tLS0tLS0tLS0KLSAgICBUbyBidWlsZCBkZWJ1ZyB2ZXJzaW9uLCBhZGQgREVCVUc9MSB0byBhbGwgbm1ha2UgY2FsbCBiZWxsb3cuCi0KLSAgICBCdWlsZCBUY2wgZmlyc3QgKGRvbmUgaGVyZSB3LyBNU1ZDIDYgb24gV2luMkspCi0gICAgLS0tLS0tLS0tLS0tLS0tCi0gICAgSWYgeW91ciBlbnZpcm9ubWVudCBkb2Vzbid0IGhhdmUgc3RydWN0IF9zdGF0NjQsIHlvdSBuZWVkIHRvIGFwcGx5Ci0gICAgdGNsODUyLnBhdGNoIGluIHRoaXMgZGlyZWN0b3J5IHRvIGRpc3RcdGNsOC41LjJcZ2VuZXJpY1x0Y2wuaC4KLQotICAgIGNkIGRpc3RcdGNsOC41LjJcd2luCi0gICAgcnVuIHZjdmFyczMyLmJhdAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0KLSAgICBPcHRpb25hbDogIHJ1biB0ZXN0cywgdmlhCi0gICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIHRlc3QKLQotICAgICAgICBhbGwudGNsOiAgICAgICAgVG90YWwgICAyNDI0MiAgIFBhc3NlZCAgMjMzNTggICBTa2lwcGVkIDg3NyAgICAgRmFpbGVkICA3Ci0gICAgICAgIFNvdXJjZWQgMTM3IFRlc3QgRmlsZXMuCi0gICAgICAgIEZpbGVzIHdpdGggZmFpbGluZyB0ZXN0czogZXhlYy50ZXN0IGh0dHAudGVzdCBpby50ZXN0IG1haW4udGVzdCBzdHJpbmcudGVzdCBzdHJpCi0gICAgICAgIG5nT2JqLnRlc3QKLQotICAgIEJ1aWxkIFRrCi0gICAgLS0tLS0tLS0KLSAgICBjZCBkaXN0XHRrOC41LjJcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNS4yCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNS4yIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotCi0gICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwotCi0gICAgWFhYIEkgaGF2ZSBubyBpZGVhIHdoZXRoZXIgIm5tYWtlIC1mIG1ha2VmaWxlLnZjIHRlc3QiIHBhc3NlZCBvcgotICAgIFhYWCBmYWlsZWQuICBJdCBwb3BwZWQgdXAgdG9ucyBvZiBsaXR0bGUgd2luZG93cywgYW5kIGRpZCBsb3RzIG9mCi0gICAgWFhYIHN0dWZmLCBhbmQgbm90aGluZyBibGV3IHVwLgotCi0gICAgQnVpbGQgVGl4Ci0gICAgLS0tLS0tLS0tCi0gICAgY2QgZGlzdFx0aXg4LjQuM1x3aW4KLSAgICBubWFrZSAtZiBweXRob24ubWFrIFRDTF9NQUpPUj04IFRDTF9NSU5PUj01IFRDTF9QQVRDSD0yIE1BQ0hJTkU9SVg4NiBERUJVRz0wCi0gICAgbm1ha2UgLWYgcHl0aG9uLm1hayBUQ0xfTUFKT1I9OCBUQ0xfTUlOT1I9NSBUQ0xfUEFUQ0g9MiBNQUNISU5FPUlYODYgREVCVUc9MCBJTlNUQUxMX0RJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLWJ6MgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGliYnoyIGNvbXByZXNzaW9uIGxpYnJhcnkuICBIb21lcGFnZQotICAgICAgICBodHRwOi8vd3d3LmJ6aXAub3JnLwotICAgIERvd25sb2FkIHRoZSBzb3VyY2UgZnJvbSB0aGUgcHl0aG9uLm9yZyBjb3B5IGludG8gdGhlIGRpc3QKLSAgICBkaXJlY3Rvcnk6Ci0KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9iemlwMi0xLjAuNgotCi0gICAgQW5kIHJlcXVpcmVzIGJ1aWxkaW5nIGJ6MiBmaXJzdC4KLQotICAgIGNkIGRpc3RcYnppcDItMS4wLjYKLSAgICBubWFrZSAtZiBtYWtlZmlsZS5tc2MKLQotICAgIEFsbCBvZiB0aGlzIG1hbmFnZWQgdG8gYnVpbGQgYnppcDItMS4wLjZcbGliYnoyLmxpYiwgd2hpY2ggdGhlIFB5dGhvbgotICAgIHByb2plY3QgbGlua3MgaW4uCi0KLQotX3NxbGl0ZTMKLSAgICBQeXRob24gd3JhcHBlciBmb3IgU1FMaXRlIGxpYnJhcnkuCi0gICAgCi0gICAgR2V0IHRoZSBzb3VyY2UgY29kZSB0aHJvdWdoCi0gICAgCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvc3FsaXRlLXNvdXJjZS0zLjMuNAotICAgIAotICAgIFRvIHVzZSB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBpbiBhIFB5dGhvbiBidWlsZCB0cmVlLCBjb3B5IHNxbGl0ZTMuZGxsIGludG8KLSAgICB0aGUgUEMvVkM2IGZvbGRlci4KLQotCi1fc3NsCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBzZWN1cmUgc29ja2V0cyBsaWJyYXJ5LgotCi0gICAgR2V0IHRoZSBsYXRlc3Qgc291cmNlIGNvZGUgZm9yIE9wZW5TU0wgZnJvbQotICAgICAgICBodHRwOi8vd3d3Lm9wZW5zc2wub3JnCi0KLSAgICBZb3UgKHByb2JhYmx5KSBkb24ndCB3YW50IHRoZSAiZW5naW5lIiBjb2RlLiAgRm9yIGV4YW1wbGUsIGRvbid0IGdldAotICAgICAgICBvcGVuc3NsLWVuZ2luZS0wLjkuNmcudGFyLmd6Ci0KLSAgICBVbnBhY2sgaW50byB0aGUgImRpc3QiIGRpcmVjdG9yeSwgcmV0YWluaW5nIHRoZSBmb2xkZXIgbmFtZSBmcm9tCi0gICAgdGhlIGFyY2hpdmUgLSBmb3IgZXhhbXBsZSwgdGhlIGxhdGVzdCBzdGFibGUgT3BlblNTTCB3aWxsIGluc3RhbGwgYXMKLSAgICAgICAgZGlzdC9vcGVuc3NsLTEuMC4xZQotCi0gICAgWW91IG5lZWQgdG8gdXNlIHZlcnNpb24gMS4wLjFlIG9mIE9wZW5TU0wuCi0KLSAgICBZb3UgY2FuIGluc3RhbGwgdGhlIE5BU00gYXNzZW1ibGVyIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5uYXNtLnVzLwotICAgIGZvciB4ODYgYnVpbGRzLiAgUHV0IG5hc213LmV4ZSBhbnl3aGVyZSBpbiB5b3VyIFBBVEguCi0gICAgTm90ZTogcmVjZW50IHJlbGVhc2VzIG9mIG5hc20gb25seSBoYXZlIG5hc20uZXhlLiBKdXN0IHJlbmFtZSBpdCB0byAKLSAgICBuYXNtdy5leGUuCi0KLSAgICBZb3UgY2FuIGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcGVybC8KLSAgICBpZiB5b3UgbGlrZSB0byB1c2UgdGhlIG9mZmljaWFsIHNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgZmlsZXMgZnJvbSAKLSAgICBweXRob24ncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuIFRoZSBzdm4gdmVyc2lvbiBjb250YWlucyBwcmUtYnVpbGQKLSAgICBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgotCi0gICAgVGhlIE1TVkMgcHJvamVjdCBzaW1wbHkgaW52b2tlcyBQQy9WQzYvYnVpbGRfc3NsLnB5IHRvIHBlcmZvcm0KLSAgICB0aGUgYnVpbGQuICBUaGlzIFB5dGhvbiBzY3JpcHQgbG9jYXRlcyBhbmQgYnVpbGRzIHlvdXIgT3BlblNTTAotICAgIGluc3RhbGxhdGlvbiwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG1ha2VmaWxlIHRvIGJ1aWxkIHRoZSBmaW5hbCAucHlkLgotCi0gICAgYnVpbGRfc3NsLnB5IGF0dGVtcHRzIHRvIGNhdGNoIHRoZSBtb3N0IGNvbW1vbiBlcnJvcnMgKHN1Y2ggYXMgbm90Ci0gICAgYmVpbmcgYWJsZSB0byBmaW5kIE9wZW5TU0wgc291cmNlcywgb3Igbm90IGJlaW5nIGFibGUgdG8gZmluZCBhIFBlcmwKLSAgICB0aGF0IHdvcmtzIHdpdGggT3BlblNTTCkgYW5kIGdpdmUgYSByZWFzb25hYmxlIGVycm9yIG1lc3NhZ2UuCi0gICAgSWYgeW91IGhhdmUgYSBwcm9ibGVtIHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5Ci0gICAgKGVnLCB5b3Uga25vdyB5b3UgaGF2ZSBBY3RpdmVQZXJsIGJ1dCB3ZSBjYW4ndCBmaW5kIGl0KSwgcGxlYXNlIHRha2UKLSAgICBhIHBlZWsgYXQgYnVpbGRfc3NsLnB5IGFuZCBzdWdnZXN0IHBhdGNoZXMuICBOb3RlIHRoYXQgYnVpbGRfc3NsLnB5Ci0gICAgc2hvdWxkIGJlIGFibGUgdG8gYmUgcnVuIGRpcmVjdGx5IGZyb20gdGhlIGNvbW1hbmQtbGluZS4KLQotICAgIGJ1aWxkX3NzbC5weS9NU1ZDIGlzbid0IGNsZXZlciBlbm91Z2ggdG8gY2xlYW4gT3BlblNTTCAtIHlvdSBtdXN0IGRvCi0gICAgdGhpcyBieSBoYW5kLgotCi0KLVlPVVIgT1dOIEVYVEVOU0lPTiBETExzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSWYgeW91IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIGV4dGVuc2lvbiBtb2R1bGUgRExMLCB0aGVyZSdzIGFuIGV4YW1wbGUKLXdpdGggZWFzeS10by1mb2xsb3cgaW5zdHJ1Y3Rpb25zIGluIC4uL1BDL2V4YW1wbGUvOyByZWFkIHRoZSBmaWxlCi1yZWFkbWUudHh0IHRoZXJlIGZpcnN0LgpkaWZmIC0tZ2l0IGEvUEMvVkM2L3JtcHljLnB5IGIvUEMvVkM2L3JtcHljLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGQ2ODIzLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9ybXB5Yy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgUmVtb3ZlIGFsbCB0aGUgLnB5YyBhbmQgLnB5byBmaWxlcyB1bmRlciAuLi9MaWIuCi0KLQotZGVmIGRlbHRyZWUocm9vdCk6Ci0gICAgaW1wb3J0IG9zCi0gICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luCi0KLSAgICBucHljID0gbnB5byA9IDAKLSAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhyb290KToKLSAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBkZWxldGUgPSBGYWxzZQotICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLnB5YycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHljICs9IDEKLSAgICAgICAgICAgIGVsaWYgbmFtZS5lbmRzd2l0aCgnLnB5bycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHlvICs9IDEKLQotICAgICAgICAgICAgaWYgZGVsZXRlOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShqb2luKHJvb3QsIG5hbWUpKQotCi0gICAgcmV0dXJuIG5weWMsIG5weW8KLQotbnB5YywgbnB5byA9IGRlbHRyZWUoIi4uLy4uL0xpYiIpCi1wcmludCBucHljLCAiLnB5YyBkZWxldGVkLCIsIG5weW8sICIucHlvIGRlbGV0ZWQiCmRpZmYgLS1naXQgYS9QQy9WQzYvcnQuYmF0IGIvUEMvVkM2L3J0LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTllYWRkNy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcnQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotQHJlbSBSdW4gVGVzdHMuICBSdW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4KLUByZW0gVXNhZ2U6ICBydCBbLWRdIFstT10gWy1xXSByZWdydGVzdF9hcmdzCi1AcmVtIC1kICAgUnVuIERlYnVnIGJ1aWxkIChweXRob25fZC5leGUpLiAgRWxzZSByZWxlYXNlIGJ1aWxkLgotQHJlbSAtTyAgIFJ1biBweXRob24uZXhlIG9yIHB5dGhvbl9kLmV4ZSAoc2VlIC1kKSB3aXRoIC1PLgotQHJlbSAtcSAgICJxdWljayIgLS0gbm9ybWFsbHkgdGhlIHRlc3RzIGFyZSBydW4gdHdpY2UsIHRoZSBmaXJzdCB0aW1lCi1AcmVtICAgICAgYWZ0ZXIgZGVsZXRpbmcgYWxsIHRoZSAucHlbY29dIGZpbGVzIHJlYWNoYWJsZSBmcm9tIExpYi8uCi1AcmVtICAgICAgLXEgcnVucyB0aGUgdGVzdHMganVzdCBvbmNlLCBhbmQgd2l0aG91dCBkZWxldGluZyAucHlbY29dIGZpbGVzLgotQHJlbSBBbGwgbGVhZGluZyBpbnN0YW5jZXMgb2YgdGhlc2Ugc3dpdGNoZXMgYXJlIHNoaWZ0ZWQgb2ZmLCBhbmQKLUByZW0gd2hhdGV2ZXIgcmVtYWlucyBpcyBwYXNzZWQgdG8gcmVncnRlc3QucHkuICBGb3IgZXhhbXBsZSwKLUByZW0gICAgIHJ0IC1PIC1kIC14IHRlc3RfdGhyZWFkCi1AcmVtIHJ1bnMKLUByZW0gICAgIHB5dGhvbl9kIC1PIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC14IHRlc3RfdGhyZWFkCi1AcmVtIHR3aWNlLCBhbmQKLUByZW0gICAgIHJ0IC1xIC1nIHRlc3RfYmluYXNjaWkKLUByZW0gcnVucwotQHJlbSAgICAgcHl0aG9uX2QgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLWcgdGVzdF9iaW5hc2NpaQotQHJlbSB0byBnZW5lcmF0ZSB0aGUgZXhwZWN0ZWQtb3V0cHV0IGZpbGUgZm9yIGJpbmFzY2lpIHF1aWNrbHkuCi1Ac2V0IF9leGU9cHl0aG9uCi1Ac2V0IF9xbW9kZT1ubwotQHNldCBfZGFzaE89Ci1AZ290byBDaGVja09wdHMKLTpBZ2FpbgotQHNoaWZ0Ci06Q2hlY2tPcHRzCi1AaWYgIiUxIj09Ii1PIiBzZXQgX2Rhc2hPPS1PCi1AaWYgIiUxIj09Ii1PIiBnb3RvIEFnYWluCi1AaWYgIiUxIj09Ii1xIiBzZXQgX3Ftb2RlPXllcwotQGlmICIlMSI9PSItcSIgZ290byBBZ2FpbgotQGlmICIlMSI9PSItZCIgc2V0IF9leGU9cHl0aG9uX2QKLUBpZiAiJTEiPT0iLWQiIGdvdG8gQWdhaW4KLUBpZiAiJV9xbW9kZSUiPT0ieWVzIiBnb3RvIFFtb2RlCi1AZWNobyBEZWxldGluZyAucHljLy5weW8gZmlsZXMgLi4uCi1AJV9leGUlIHJtcHljLnB5Ci0lX2V4ZSUgJV9kYXNoTyUgLUUgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKLUBlY2hvIEFib3V0IHRvIHJ1biBhZ2FpbiB3aXRob3V0IGRlbGV0aW5nIC5weWMvLnB5byBmaXJzdDoKLUBwYXVzZQotOlFtb2RlCi0lX2V4ZSUgJV9kYXNoTyUgLUUgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKLUBzZXQgX2V4ZT0KLUBzZXQgX3Ftb2RlPQotQHNldCBfZGFzaE89CmRpZmYgLS1naXQgYS9QQy9WQzYvc2VsZWN0LmRzcCBiL1BDL1ZDNi9zZWxlY3QuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGU1MjhjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9zZWxlY3QuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJzZWxlY3QiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9c2VsZWN0IC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInNlbGVjdC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAic2VsZWN0Lm1hayIgQ0ZHPSJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAic2VsZWN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInNlbGVjdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInNlbGVjdCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxzZWxlY3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzb2NrMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vc2VsZWN0LnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAic2VsZWN0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHNlbGVjdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3c29jazMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvbm9kZWZhdWx0bGliOiJtc3ZjcnQiIC9vdXQ6Ii4vc2VsZWN0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAic2VsZWN0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNlbGVjdG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3RjbDg1Mi5wYXRjaCBiL1BDL1ZDNi90Y2w4NTIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNjc4MGEuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3RjbDg1Mi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLS0tLSB0Y2w4LjUuMlxnZW5lcmljXHRjbC5oCUZyaSBKdW4gMTMgMDM6MzU6MzkgMjAwOAotKysrIHRjbDguNS4yXGdlbmVyaWNcdGNsLmgJU3VuIEphbiAgNCAxNjo1MjozMCAyMDA5Ci1AQCAtMzY3LDcgKzM2Nyw3IEBACi0gdHlwZWRlZiBzdHJ1Y3Qgc3RhdGk2NCBUY2xfU3RhdEJ1ZjsKLSAjICAgICAgICAgZGVmaW5lIFRDTF9MTF9NT0RJRklFUgkiTCIKLSAjICAgICAgZWxzZSAvKiBfX0JPUkxBTkRDX18gKi8KLS0jICAgICAgICAgaWYgX01TQ19WRVIgPCAxNDAwICYmICFkZWZpbmVkKF9NX0lYODYpCi0rIyAgICAgICAgIGlmIF9NU0NfVkVSIDwgMTQwMCAvKiYmICFkZWZpbmVkKF9NX0lYODYpKi8KLSB0eXBlZGVmIHN0cnVjdCBfc3RhdGk2NAlUY2xfU3RhdEJ1ZjsKLSAjICAgICAgICAgZWxzZQotIHR5cGVkZWYgc3RydWN0IF9zdGF0NjQJVGNsX1N0YXRCdWY7CmRpZmYgLS1naXQgYS9QQy9WQzYvdW5pY29kZWRhdGEuZHNwIGIvUEMvVkM2L3VuaWNvZGVkYXRhLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA0ZGI2Ny4uMDAwMDAwMAotLS0gYS9QQy9WQzYvdW5pY29kZWRhdGEuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ1bmljb2RlZGF0YSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz11bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ1bmljb2RlZGF0YS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidW5pY29kZWRhdGEubWFrIiBDRkc9InVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInVuaWNvZGVkYXRhIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAidW5pY29kZWRhdGEiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAidW5pY29kZWRhdGEgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMjAwMDAiIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiIuL3VuaWNvZGVkYXRhLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAidW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcdW5pY29kZWRhdGEiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi91bmljb2RlZGF0YV9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAidW5pY29kZWRhdGEgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAidW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi93OXhwb3Blbi5kc3AgYi9QQy9WQzYvdzl4cG9wZW4uZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTY0MDNjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi93OXhwb3Blbi5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Inc5eHBvcGVuIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIgMHgwMTAxDQotDQotQ0ZHPXc5eHBvcGVuIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInc5eHBvcGVuLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3OXhwb3Blbi5tYWsiIENGRz0idzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAidzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2Vcdzl4cG9wZW4iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiAvbm9sb2dvIC9tYWNoaW5lOkkzODYNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAidzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcdzl4cG9wZW4iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIgL25vbG9nbyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3c5eHBvcGVuX2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJ3OXhwb3BlbiAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cdzl4cG9wZW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi93aW5zb3VuZC5kc3AgYi9QQy9WQzYvd2luc291bmQuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTA5YjliLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi93aW5zb3VuZC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9IndpbnNvdW5kIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXdpbnNvdW5kIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIndpbnNvdW5kLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3aW5zb3VuZC5tYWsiIENGRz0id2luc291bmQgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAid2luc291bmQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAid2luc291bmQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJ3aW5zb3VuZCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi5ccGMiDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJ3aW5zb3VuZCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHdpbnNvdW5kIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgd2lubW0ubGliIHVzZXIzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE2MDAwMCIgL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vd2luc291bmQucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x3aW5zb3VuZCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiB3aW5tbS5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE2MDAwMCIgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3dpbnNvdW5kX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJ3aW5zb3VuZCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cd2luc291bmQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL1VuaW5zdGFsLndzZSBiL1BDL1ZTNy4xL1VuaW5zdGFsLndzZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2ZGQzMC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9Vbmluc3RhbC53c2UKKysrIC9kZXYvbnVsbApAQCAtMSw1MTQgKzAsMCBAQAotRG9jdW1lbnQgVHlwZTogV1NFCi1pdGVtOiBHbG9iYWwKLSAgVmVyc2lvbj04LjE0Ci0gIEZsYWdzPTAwMDAwMTAwCi0gIFNwbGl0PTE0MjAKLSAgTGFuZ3VhZ2VzPTY1IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCi0gIENvcHkgRGVmYXVsdD0xCi0gIEphcGFuZXNlIEZvbnQgTmFtZT1NUyBHb3RoaWMKLSAgSmFwYW5lc2UgRm9udCBTaXplPTEwCi0gIFN0YXJ0IEdyYWRpZW50PTAgMCAyNTUKLSAgRW5kIEdyYWRpZW50PTAgMCAwCi0gIFdpbmRvd3MgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMDAwMDAxMDEwMDAwMDEwMDAKLSAgTWVzc2FnZSBGb250PU1TIFNhbnMgU2VyaWYKLSAgRm9udCBTaXplPTgKLSAgRGlzayBMYWJlbD1HTEJTCi0gIERpc2sgRmlsZW5hbWU9SU5TVEFMTAotICBQYXRjaCBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gIFBhdGNoIFRocmVzaG9sZD0yMDAKLSAgUGF0Y2ggTWVtb3J5PTQwOTYKLSAgUGVyLVVzZXIgVmVyc2lvbiBJRD0xCi0gIENyeXN0YWwgRm9ybWF0PTEwMTExMTAwMTAxMTAwMDAwMDEwMDAxMDAxMDAxMDAxCi0gIFN0ZXAgVmlldz0mUHJvcGVydGllcwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiAgVGhpcyBpcyBhIHZlcmJhdGltIGNvcHkgb2YgV2lzZSdzIFVuaW5zdGFsLndzZSwgYWx0ZXJlZCBhdCB0aGUgZW5kIHRvIHdyaXRlCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PXVuaW5zdGFsbCBpbmZvIHVuZGVyIEhLQ1UgaW5zdGVhZCBvZiBIS0xNIGlmIG91ciBET0FETUlOIHZhciBpcyBmYWxzZS4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICAgSW5zdGFsbCBTdXBwb3J0IGZvciB1bmluc3RhbGxpbmcgdGhlIGFwcGxpY2F0aW9uLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVOSU5TVEFMTF9QQVRICi0gIFZhbHVlPSVfTE9HRklMRV9QQVRIXyUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVOSU5TVEFMTF9QQVRICi0gIFZhbHVlPSVVTklOU1RBTExfUEFUSCVcVU5XSVNFLkVYRQotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fRVhFX09TX1RZUEVfCi0gIFZhbHVlPVdJTjMyCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcVU5XSVNFMzIuRVhFCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfUEFUSCUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbHNlCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcVU5XSVNFLkVYRQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX1BBVEglCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgIEluc3RhbGwgU3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX0xBTkcKLSAgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX0xBTkcKLSAgVmFsdWU9JVVOSU5TVEFMTF9MQU5HJVxVTldJU0UuSU5JCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZSQQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfQ19OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRlJBCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1ECi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GUkEKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0RfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZSQQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9RQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuREVVCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19FX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5ERVUKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUYKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLlBURwotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfRl9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuUFRHCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1HCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5FU1AKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0dfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkVTUAotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9SAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRVNQCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19IX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5FU1AKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUkKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLklUQQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfSV9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSVRBCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1KCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5EQU4KLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0pfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkRBTgotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9SwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRklOCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19LX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GSU4KLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUwKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLklTTAotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfTF9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSVNMCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1NCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5OTEQKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX01fTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLk5MRAotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9TgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuTk9SCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19OX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5OT1IKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPU8KLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLlNWRQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfT19OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuU1ZFCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1QCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5KUE4KLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX1BfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkpQTgotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICAgSW5zdGFsbCB0aGUgYWRkL3JlbW92ZSBvciB1bmluc3RhbGwgaWNvbgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVOSU5TVEFMTF9QQVRICi0gIFZhbHVlPSVVTklOU1RBTExfUEFUSCUKLSAgRmxhZ3M9MDAwMTAxMDAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUlOU1RfTE9HX1BBVEgKLSAgVmFsdWU9JV9MT0dGSUxFX1BBVEhfJQotICBGbGFncz0wMDAxMDEwMAotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTEwMTExMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V3JpdGUgdW5pbnN0YWxsIGluZm8gdW5kZXIgSEtMTS4gIFRoaXMgaWYvZWxzZS9lbmQgYmxvY2sgYWRkZWQgYnkgVGltLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVBUFBUSVRMRSUKLSAgVmFsdWUgTmFtZT1EaXNwbGF5TmFtZQotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglICVJTlNUX0xPR19QQVRIJQotICBOZXcgVmFsdWU9Ci0gIFZhbHVlIE5hbWU9VW5pbnN0YWxsU3RyaW5nCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGUgc2FtZSwgYnV0IHdyaXRlIHVuZGVyIEhLQ1UgaW5zdGVhZC4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lQVBQVElUTEUlCi0gIFZhbHVlIE5hbWU9RGlzcGxheU5hbWUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJSAlSU5TVF9MT0dfUEFUSCUKLSAgTmV3IFZhbHVlPQotICBWYWx1ZSBOYW1lPVVuaW5zdGFsbFN0cmluZwotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IEFkZCBQcm9nTWFuIEljb24KLSAgR3JvdXA9JUdST1VQJQotICBJY29uIE5hbWU9VW5pbnN0YWxsICVBUFBUSVRMRSUKLSAgQ29tbWFuZCBMaW5lPSVVTklOU1RBTExfUEFUSCUgJUlOU1RfTE9HX1BBVEglCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTExMTEwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0JSQU5ECi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTIKLSAgaXRlbTogS2V5Ci0gICAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gICAgTmV3IFZhbHVlPSVDT01QQU5ZJQotICAgIFZhbHVlIE5hbWU9UmVnQ29tcGFueQotICAgIFJvb3Q9MgotICBlbmQKLSAgaXRlbTogS2V5Ci0gICAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gICAgTmV3IFZhbHVlPSVOQU1FJQotICAgIFZhbHVlIE5hbWU9UmVnT3duZXIKLSAgICBSb290PTIKLSAgZW5kCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZApkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX2N0eXBlcy52Y3Byb2ogYi9QQy9WUzcuMS9fY3R5cGVzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM1OWQ4OC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fY3R5cGVzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDMxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX2N0eXBlcyINCi0JUHJvamVjdEdVSUQ9IntGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9Ig0KLQlSb290TmFtZXNwYWNlPSJfY3R5cGVzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9jdHlwZXMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlNaW5pbWFsUmVidWlsZD0iRkFMU0UiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iRkFMU0UiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc19kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iRkFMU0UiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjAiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlcy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IkZBTFNFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlcy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfY3R5cGVzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsgL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlcy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IkZBTFNFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlcy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iaWE2NC10ZW1wLXJlbGVhc2VcX2N0eXBlcyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIC9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJGQUxTRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlcy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbGJhY2tzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2ZpZWxkLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmkuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xwcmVwX2NpZi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcc3RnZGljdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYyI+DQotCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIvPg0KLQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjY0LmFzbSI+DQotCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQlFeGNsdWRlZEZyb21CdWlsZD0iVFJVRSI+DQotCQkJCTxUb29sDQotCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJUUlVFIj4NCi0JCQkJPFRvb2wNCi0JCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIj4NCi0JCQkJPFRvb2wNCi0JCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJQ29tbWFuZExpbmU9ImFtZDY0X21sNjQgL25vbG9nbyAvYyAvRm8gJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsNCi0iDQotCQkJCQlPdXRwdXRzPSImcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7Ii8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJUUlVFIj4NCi0JCQkJPFRvb2wNCi0JCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX2N0eXBlc190ZXN0LnZjcHJvaiBiL1BDL1ZTNy4xL19jdHlwZXNfdGVzdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZThhMmMuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX2N0eXBlc190ZXN0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX2N0eXBlc190ZXN0Ig0KLQlQcm9qZWN0R1VJRD0iezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0iDQotCUtleXdvcmQ9IldpbjMyUHJvaiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX2N0eXBlc190ZXN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlNaW5pbWFsUmVidWlsZD0iRkFMU0UiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc190ZXN0X2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc190ZXN0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX3Rlc3RfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc190ZXN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX3Rlc3QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJpYTY0LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCU1pbmltYWxSZWJ1aWxkPSJGQUxTRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc190ZXN0X2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc190ZXN0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX3Rlc3RfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19jdHlwZXNfdGVzdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IkZBTFNFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc190ZXN0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fY3R5cGVzX3Rlc3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19lbGVtZW50dHJlZS52Y3Byb2ogYi9QQy9WUzcuMS9fZWxlbWVudHRyZWUudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTJiOWQ5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19lbGVtZW50dHJlZS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9lbGVtZW50dHJlZSINCi0JUHJvamVjdEdVSUQ9InsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9Ig0KLQlTY2NQcm9qZWN0TmFtZT0iX2VsZW1lbnR0cmVlIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfZWxlbWVudHRyZWUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztIQVZFX0VYUEFUX0g7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19lbGVtZW50dHJlZV9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19lbGVtZW50dHJlZV9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZV9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2VsZW1lbnR0cmVlLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19lbGVtZW50dHJlZS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fZWxlbWVudHRyZWUubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9lbGVtZW50dHJlZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fZWxlbWVudHRyZWUucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9lbGVtZW50dHJlZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2VsZW1lbnR0cmVlLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19lbGVtZW50dHJlZS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fZWxlbWVudHRyZWUubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2VsZW1lbnR0cmVlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fbXNpLnZjcHJvaiBiL1BDL1ZTNy4xL19tc2kudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGZkNDQ3Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19tc2kudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfbXNpIg0KLQlQcm9qZWN0R1VJRD0iezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0iDQotCVNjY1Byb2plY3ROYW1lPSJfbXNpIg0KLQlTY2NMb2NhbFBhdGg9Ii4uXC4uXHBjIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfbXNpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fbXNpX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX21zaV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fbXNpX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfbXNpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fbXNpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fbXNpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fbXNpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfbXNpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgYnVmZmVyb3ZlcmZsb3dVLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fbXNpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fbXNpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fbXNpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX21zaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiBidWZmZXJvdmVyZmxvd1UubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19tc2kucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19tc2kucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2kubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXF9tc2kuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19zb2NrZXQudmNwcm9qIGIvUEMvVlM3LjEvX3NvY2tldC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZWQ4ZTQuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3NvY2tldC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9zb2NrZXQiDQotCVNjY1Byb2plY3ROYW1lPSJfc29ja2V0Ig0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfc29ja2V0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc29ja2V0X2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NvY2tldF9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zb2NrZXRfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9zb2NrZXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NvY2tldC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc29ja2V0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zb2NrZXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9zb2NrZXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zb2NrZXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NvY2tldC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc29ja2V0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3NvY2tldCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zb2NrZXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NvY2tldC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc29ja2V0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNvY2tldG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM3LjEvX3NxbGl0ZTMudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjdkOTkxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19zcWxpdGUzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX3NxbGl0ZTMiDQotCVByb2plY3RHVUlEPSJ7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fSINCi0JU2NjUHJvamVjdE5hbWU9Il9zcWxpdGUzIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfc3FsaXRlMyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsuLlwuLlxQQzsuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTNfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zcWxpdGUzX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NxbGl0ZTNfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsuLlwuLlxQQzsuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zcWxpdGUzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NxbGl0ZTMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NxbGl0ZTMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxpYTY0XHNxbGl0ZTMubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zcWxpdGUzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NxbGl0ZTMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NxbGl0ZTMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfc3FsaXRlMyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsuLlwuLlxQQzsuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO01PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XGFtZDY0XHNxbGl0ZTMubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zcWxpdGUzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NxbGl0ZTMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NxbGl0ZTMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY29ubmVjdGlvbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtaWNyb3Byb3RvY29scy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3NzbC5tYWsgYi9QQy9WUzcuMS9fc3NsLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ3NmE2My4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fc3NsLm1haworKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLUVYVFJBX0xJQlM9Ci0KLSFJRkRFRiBERUJVRwotU1VGRklYPV9kLnB5ZAotVEVNUD14ODYtdGVtcC1kZWJ1Zy8KLUNGTEFHUz0vT2QgL1ppIC9NRGQgL0xEZCAvRERFQlVHIC9EX0RFQlVHIC9EV0lOMzIKLVNTTF9MSUJfRElSPSQoU1NMX0RJUikvb3V0MzIuZGJnCi0hRUxTRQotU1VGRklYPS5weWQKLVRFTVA9eDg2LXRlbXAtcmVsZWFzZS8KLUNGTEFHUz0vT3ggL01EIC9MRCAvRFdJTjMyCi1TU0xfTElCX0RJUj0kKFNTTF9ESVIpL291dDMyCi0hRU5ESUYKLQotSU5DTFVERVM9LUkgLi4vLi4vSW5jbHVkZSAtSSAuLi8uLi9QQyAtSSAkKFNTTF9ESVIpL2luYzMyCi0KLVNTTF9MSUJTPWdkaTMyLmxpYiB3c29jazMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvTElCUEFUSDokKFNTTF9MSUJfRElSKSBsaWJlYXkzMi5saWIgc3NsZWF5MzIubGliCi1TU0xfU09VUkNFPS4uLy4uL01vZHVsZXMvX3NzbC5jIAotCi1IQVNIX0xJQlM9Z2RpMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9saWJwYXRoOiQoU1NMX0xJQl9ESVIpIGxpYmVheTMyLmxpYgotSEFTSF9TT1VSQ0U9Li4vLi4vTW9kdWxlcy9faGFzaG9wZW5zc2wuYyAKLQotYWxsOiBfc3NsJChTVUZGSVgpIF9oYXNobGliJChTVUZGSVgpCi0KLSMgU3BsaXQgY29tcGlsZS9saW5rIGludG8gdHdvIHN0ZXBzIHRvIGJldHRlciBzdXBwb3J0IFZTRXh0Q29tcAotX3NzbCQoU1VGRklYKTogJChTU0xfU09VUkNFKSAkKFNTTF9MSUJfRElSKS9saWJlYXkzMi5saWIgJChTU0xfTElCX0RJUikvc3NsZWF5MzIubGliIC4uLy4uL1BDLyouaCAuLi8uLi9JbmNsdWRlLyouaAotCUBpZiBub3QgZXhpc3QgIiQoVEVNUCkvX3NzbC8uIiBta2RpciAiJChURU1QKS9fc3NsIgotCWNsIC9ub2xvZ28gL2MgJChTU0xfU09VUkNFKSAkKENGTEFHUykgL0ZvJChURU1QKVxfc3NsXCQqLm9iaiAkKElOQ0xVREVTKQotCWxpbmsgL25vbG9nbyBAPDwKLSAgICAgICAgICAgICAvZGxsIC9vdXQ6X3NzbCQoU1VGRklYKSAkKFRFTVApXF9zc2xcJCoub2JqICQoU1NMX0xJQlMpICQoRVhUUkFfTElCUykKLTw8Ci0KLV9oYXNobGliJChTVUZGSVgpOiAkKEhBU0hfU09VUkNFKSAkKFNTTF9MSUJfRElSKS9saWJlYXkzMi5saWIgLi4vLi4vUEMvKi5oIC4uLy4uL0luY2x1ZGUvKi5oCi0gICAgQGlmIG5vdCBleGlzdCAiJChURU1QKS9faGFzaGxpYi8uIiBta2RpciAiJChURU1QKS9faGFzaGxpYiIKLSAgICBjbCAvbm9sb2dvIC9jICQoSEFTSF9TT1VSQ0UpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgL0ZvJChURU1QKVxfaGFzaGxpYlwkKi5vYmogJChJTkNMVURFUykgCi0gICAgbGluayAvbm9sb2dvIEA8PAotCS9kbGwgL291dDpfaGFzaGxpYiQoU1VGRklYKSAkKEhBU0hfTElCUykgJChFWFRSQV9MSUJTKSAkKFRFTVApXF9oYXNobGliXCQqLm9iagotPDwKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19zc2wudmNwcm9qIGIvUEMvVlM3LjEvX3NzbC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZDY1ZmUuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3NzbC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX3NzbCINCi0JUm9vdE5hbWVzcGFjZT0iX3NzbCINCi0JU2NjUHJvamVjdE5hbWU9IiINCi0JU2NjTG9jYWxQYXRoPSIiDQotCUtleXdvcmQ9Ik1ha2VGaWxlUHJvaiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9zc2wiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIC1hIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSJlY2hvIE5vdGhpbmcgdG8gZG8iDQotCQkJCU91dHB1dD0iX3NzbC5weWQiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9zc2wiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIC1hIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSJlY2hvIE5vdGhpbmcgdG8gZG8iDQotCQkJCU91dHB1dD0iX3NzbF9kLnB5ZCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3NzbCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkgLWEiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImVjaG8gTm90aGluZyB0byBkbyINCi0JCQkJT3V0cHV0PSJfc3NsLnB5ZCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9zc2wiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIC1hIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSJlY2hvIE5vdGhpbmcgdG8gZG8iDQotCQkJCU91dHB1dD0iX3NzbC5weWQiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NzbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oYXNob3BlbnNzbC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3Rlc3RjYXBpLnZjcHJvaiBiL1BDL1ZTNy4xL190ZXN0Y2FwaS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxOTc4NDIuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3Rlc3RjYXBpLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX3Rlc3RjYXBpIg0KLQlTY2NQcm9qZWN0TmFtZT0iX3Rlc3RjYXBpIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3Rlc3RjYXBpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGVzdGNhcGkucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190ZXN0Y2FwaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3Rlc3RjYXBpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfdGVzdGNhcGkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190ZXN0Y2FwaV9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190ZXN0Y2FwaV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGVzdGNhcGlfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3Rlc3RjYXBpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3Rlc3RjYXBpLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGVzdGNhcGkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190ZXN0Y2FwaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF90ZXN0Y2FwaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGVzdGNhcGkucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190ZXN0Y2FwaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3Rlc3RjYXBpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90ZXN0Y2FwaW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3RraW50ZXIudmNwcm9qIGIvUEMvVlM3LjEvX3RraW50ZXIudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjczNDE2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL190a2ludGVyLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX3RraW50ZXIiDQotCVNjY1Byb2plY3ROYW1lPSJfdGtpbnRlciINCi0JU2NjTG9jYWxQYXRoPSIuLlwuLlwuLlwuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF90a2ludGVyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NC5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg0LmxpYiBvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3RraW50ZXIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGtpbnRlci5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxOTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGtpbnRlci5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX3RraW50ZXIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHRjbHRrXGluY2x1ZGUsLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NC5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg0LmxpYiBvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3RraW50ZXJfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190a2ludGVyX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTkwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3RraW50ZXJfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3RraW50ZXIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHRjbHRrXGluY2x1ZGUsLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NC5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg0LmxpYiBvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3RraW50ZXIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fdGtpbnRlci5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxOTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGtpbnRlci5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF90a2ludGVyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGtpbnRlci5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190a2ludGVyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE5MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190a2ludGVyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90a2ludGVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdGthcHBpbml0LmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9hbWQ2NF9tbDY0LmJhdCBiL1BDL1ZTNy4xL2FtZDY0X21sNjQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTlhY2YxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2FtZDY0X21sNjQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gVHJ5IHRvIGZpbmQgdGhlIEFNRDY0IGFzc2VtYmxlciBhbmQgY2FsbCBpdCB3aXRoIHRoZSBzdXBwbGllZCBhcmd1bWVudHMuCi0KLXNldCBNTEVYRT1NaWNyb3NvZnQgUGxhdGZvcm0gU0RLXEJpblxXaW42NFx4ODZcQU1ENjRcbWw2NC5FWEUKLQotcmVtIEZvciB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNlZSBhbHNvCi1yZW0gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2VuLXVzL3dpbjY0L3dpbjY0L3dvdzY0X2ltcGxlbWVudGF0aW9uX2RldGFpbHMuYXNwCi0KLWlmIGV4aXN0ICIlUHJvZ3JhbUZpbGVzJVwlTUxFWEUlIiAoCi0gIHNldCBNTDY0PSIlUHJvZ3JhbUZpbGVzJVwlTUxFWEUlIgotKSBlbHNlIGlmIGV4aXN0ICIlUHJvZ3JhbVc2NDMyJVwlTUxFWEUlIiAoCi0gIHNldCBNTDY0PSIlUHJvZ3JhbVc2NDMyJVwlTUxFWEUlIgotKSBlbHNlICgKLSAgc2V0IE1MNjQ9bWw2NC5leGUKLSkKLQotJU1MNjQlICUqCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9idWlsZF9zc2wuYmF0IGIvUEMvVlM3LjEvYnVpbGRfc3NsLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZiZTNjMC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9idWlsZF9zc2wuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotaWYgIiUxIiA9PSAiUmVsZWFzZUFNRDY0IiBjYWxsICIlTVNTZGslXFNldEVudiIgL1hQNjQgL1JFVEFJTAotCi1AZWNobyBvZmYKLWlmIG5vdCBkZWZpbmVkIEhPU1RfUFlUSE9OICgKLSAgaWYgJTEgRVFVIERlYnVnICgKLSAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uX2QuZXhlCi0gICkgRUxTRSAoCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUKLSAgKQotKQotJUhPU1RfUFlUSE9OJSBidWlsZF9zc2wucHkgJTEgJTIKLQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvYnVpbGRfc3NsLnB5IGIvUEMvVlM3LjEvYnVpbGRfc3NsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTlmNGUzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2J1aWxkX3NzbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0jIFNjcmlwdCBmb3IgYnVpbGRpbmcgdGhlIF9zc2wgYW5kIF9oYXNobGliIG1vZHVsZXMgZm9yIFdpbmRvd3MuCi0jIFVzZXMgUGVybCB0byBzZXR1cCB0aGUgT3BlblNTTCBlbnZpcm9ubWVudCBjb3JyZWN0bHkKLSMgYW5kIGJ1aWxkIE9wZW5TU0wsIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBubWFrZSBzZXNzaW9uCi0jIGZvciB0aGUgYWN0dWFsIF9zc2wucHlkIGFuZCBfaGFzaGxpYi5weWQgRExMcy4KLQotIyBUSEVPUkVUSUNBTExZLCB5b3UgY2FuOgotIyAqIFVucGFjayB0aGUgbGF0ZXN0IFNTTCByZWxlYXNlIG9uZSBsZXZlbCBhYm92ZSB5b3VyIG1haW4gUHl0aG9uIHNvdXJjZQotIyAgIGRpcmVjdG9yeS4gIEl0IGlzIGxpa2VseSB5b3Ugd2lsbCBhbHJlYWR5IGZpbmQgdGhlIHpsaWIgbGlicmFyeSBhbmQKLSMgICBhbnkgb3RoZXIgZXh0ZXJuYWwgcGFja2FnZXMgdGhlcmUuCi0jICogSW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgaXMgc29tZXdoZXJlIG9uIHlvdXIgcGF0aC4KLSMgKiBSdW4gdGhpcyBzY3JpcHQgZnJvbSB0aGUgUENCdWlsZCBkaXJlY3RvcnkuCi0jCi0jIGl0IHNob3VsZCBjb25maWd1cmUgYW5kIGJ1aWxkIFNTTCwgdGhlbiBidWlsZCB0aGUgX3NzbCBhbmQgX2hhc2hsaWIKLSMgUHl0aG9uIGV4dGVuc2lvbnMgd2l0aG91dCBpbnRlcnZlbnRpb24uCi0KLWltcG9ydCBvcywgc3lzLCByZQotCi0jIEZpbmQgYWxsICJmb28uZXhlIiBmaWxlcyBvbiB0aGUgUEFUSC4KLWRlZiBmaW5kX2FsbF9vbl9wYXRoKGZpbGVuYW1lLCBleHRyYXMgPSBOb25lKToKLSAgICBlbnRyaWVzID0gb3MuZW52aXJvblsiUEFUSCJdLnNwbGl0KG9zLnBhdGhzZXApCi0gICAgcmV0ID0gW10KLSAgICBmb3IgcCBpbiBlbnRyaWVzOgotICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIGlmIGV4dHJhczoKLSAgICAgICAgZm9yIHAgaW4gZXh0cmFzOgotICAgICAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIHJldHVybiByZXQKLQotIyBGaW5kIGEgc3VpdGFibGUgUGVybCBpbnN0YWxsYXRpb24gZm9yIE9wZW5TU0wuCi0jIGN5Z3dpbiBwZXJsIGRvZXMgKm5vdCogd29yay4gIEFjdGl2ZVBlcmwgZG9lcy4KLSMgQmVpbmcgYSBQZXJsIGR1bW15LCB0aGUgc2ltcGxlc3Qgd2F5IEkgY2FuIGNoZWNrIGlzIGlmIHRoZSAiV2luMzIiIHBhY2thZ2UKLSMgaXMgYXZhaWxhYmxlLgotZGVmIGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKToKLSAgICBmb3IgcGVybCBpbiBwZXJsczoKLSAgICAgICAgZmggPSBvcy5wb3BlbihwZXJsICsgJyAtZSAidXNlIFdpbjMyOyInKQotICAgICAgICBmaC5yZWFkKCkKLSAgICAgICAgcmMgPSBmaC5jbG9zZSgpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcmV0dXJuIHBlcmwKLSAgICBwcmludCAiQ2FuIG5vdCBmaW5kIGEgc3VpdGFibGUgUEVSTDoiCi0gICAgaWYgcGVybHM6Ci0gICAgICAgIHByaW50ICIgdGhlIGZvbGxvd2luZyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kOiIKLSAgICAgICAgZm9yIHAgaW4gcGVybHM6Ci0gICAgICAgICAgICBwcmludCAiICIsIHAKLSAgICAgICAgcHJpbnQgIiBOb25lIG9mIHRoZXNlIHZlcnNpb25zIGFwcGVhciBzdWl0YWJsZSBmb3IgYnVpbGRpbmcgT3BlblNTTCIKLSAgICBlbHNlOgotICAgICAgICBwcmludCAiIE5PIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQgb24gdGhpcyBtYWNoaW5lIGF0IGFsbCEiCi0gICAgcHJpbnQgIiBQbGVhc2UgaW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgYXBwZWFycyBvbiB5b3VyIHBhdGgiCi0gICAgcHJpbnQgIlRoZSBQeXRob24gU1NMIG1vZHVsZSB3YXMgbm90IGJ1aWx0IgotICAgIHJldHVybiBOb25lCi0KLSMgTG9jYXRlIHRoZSBiZXN0IFNTTCBkaXJlY3RvcnkgZ2l2ZW4gYSBmZXcgcm9vdHMgdG8gbG9vayBpbnRvLgotZGVmIGZpbmRfYmVzdF9zc2xfZGlyKHNvdXJjZXMpOgotICAgIGNhbmRpZGF0ZXMgPSBbXQotICAgIGZvciBzIGluIHNvdXJjZXM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgbm90ZTogZG8gbm90IGFic3BhdGggczsgdGhlIGJ1aWxkIHdpbGwgZmFpbCBpZiBhbnkKLSAgICAgICAgICAgICMgaGlnaGVyIHVwIGRpcmVjdG9yeSBuYW1lIGhhcyBzcGFjZXMgaW4gaXQuCi0gICAgICAgICAgICBmbmFtZXMgPSBvcy5saXN0ZGlyKHMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIGZuYW1lcyA9IFtdCi0gICAgICAgIGZvciBmbmFtZSBpbiBmbmFtZXM6Ci0gICAgICAgICAgICBmcW4gPSBvcy5wYXRoLmpvaW4ocywgZm5hbWUpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZxbikgYW5kIGZuYW1lLnN0YXJ0c3dpdGgoIm9wZW5zc2wtIik6Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoZnFuKQotICAgICMgTm93IHdlIGhhdmUgYWxsIHRoZSBjYW5kaWRhdGVzLCBsb2NhdGUgdGhlIGJlc3QuCi0gICAgYmVzdF9wYXJ0cyA9IFtdCi0gICAgYmVzdF9uYW1lID0gTm9uZQotICAgIGZvciBjIGluIGNhbmRpZGF0ZXM6Ci0gICAgICAgIHBhcnRzID0gcmUuc3BsaXQoIlsuLV0iLCBvcy5wYXRoLmJhc2VuYW1lKGMpKVsxOl0KLSAgICAgICAgIyBlZyAtIG9wZW5zc2wtMC45LjctYmV0YTEgLSBpZ25vcmUgYWxsICJiZXRhIiBvciBhbnkgb3RoZXIgcXVhbGlmaWVycwotICAgICAgICBpZiBsZW4ocGFydHMpID49IDQ6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBwYXJ0cyA+IGJlc3RfcGFydHM6Ci0gICAgICAgICAgICBiZXN0X3BhcnRzID0gcGFydHMKLSAgICAgICAgICAgIGJlc3RfbmFtZSA9IGMKLSAgICBpZiBiZXN0X25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIHByaW50ICJGb3VuZCBhbiBTU0wgZGlyZWN0b3J5IGF0ICclcyciICUgKGJlc3RfbmFtZSwpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCBmaW5kIGFuIFNTTCBkaXJlY3RvcnkgaW4gJyVzJyIgJSAoc291cmNlcywpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgcmV0dXJuIGJlc3RfbmFtZQotCi1kZWYgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCk6Ci0gICAgb3Muc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSkKLSAgICBvcy5zeXN0ZW0oZG9fc2NyaXB0KQotCi1kZWYgbWFpbigpOgotICAgIGJ1aWxkX2FsbCA9ICItYSIgaW4gc3lzLmFyZ3YKLSAgICBpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZSI6Ci0gICAgICAgIGFyY2ggPSAieDg2IgotICAgICAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU4zMiIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb19tYXNtIgotICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQubWFrIgotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gIkRlYnVnIjoKLSAgICAgICAgYXJjaCA9ICJ4ODYiCi0gICAgICAgIGRlYnVnID0gVHJ1ZQotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lOMzIiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fbWFzbSIKLSAgICAgICAgbWFrZWZpbGU9Im1zXFxkMzIubWFrIgotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gIlJlbGVhc2VJdGFuaXVtIjoKLSAgICAgICAgYXJjaCA9ICJpYTY0IgotICAgICAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU42NEkiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fd2luNjRpIgotICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQubWFrIgotICAgICAgICBvcy5lbnZpcm9uWyJWU0VYVENPTVBfVVNFQ0wiXSA9ICJNU19JVEFOSVVNIgotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gIlJlbGVhc2VBTUQ2NCI6Ci0gICAgICAgIGFyY2g9ImFtZDY0IgotICAgICAgICBkZWJ1Zz1GYWxzZQotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lONjRBIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX3dpbjY0YSIKLSAgICAgICAgbWFrZWZpbGUgPSAibXNcXG50Lm1hayIKLSAgICAgICAgb3MuZW52aXJvblsiVlNFWFRDT01QX1VTRUNMIl0gPSAiTVNfT1BURVJPTiIKLSAgICBtYWtlX2ZsYWdzID0gIiIKLSAgICBpZiBidWlsZF9hbGw6Ci0gICAgICAgIG1ha2VfZmxhZ3MgPSAiLWEiCi0gICAgIyBwZXJsIHNob3VsZCBiZSBvbiB0aGUgcGF0aCwgYnV0IHdlIGFsc28gbG9vayBpbiAiXHBlcmwiIGFuZCAiYzpcXHBlcmwiCi0gICAgIyBhcyAid2VsbCBrbm93biIgbG9jYXRpb25zCi0gICAgcGVybHMgPSBmaW5kX2FsbF9vbl9wYXRoKCJwZXJsLmV4ZSIsIFsiXFxwZXJsXFxiaW4iLCAiQzpcXHBlcmxcXGJpbiJdKQotICAgIHBlcmwgPSBmaW5kX3dvcmtpbmdfcGVybChwZXJscykKLSAgICBpZiBwZXJsIGlzIE5vbmU6Ci0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBwcmludCAiRm91bmQgYSB3b3JraW5nIHBlcmwgYXQgJyVzJyIgJSAocGVybCwpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgIyBMb29rIGZvciBTU0wgMiBsZXZlbHMgdXAgZnJvbSBwY2J1aWxkIC0gaWUsIHNhbWUgcGxhY2UgemxpYiBldGMgYWxsIGxpdmUuCi0gICAgc3NsX2RpciA9IGZpbmRfYmVzdF9zc2xfZGlyKCgiLi5cXC4uXFwuLiIsKSkKLSAgICBpZiBzc2xfZGlyIGlzIE5vbmU6Ci0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBvbGRfY2QgPSBvcy5nZXRjd2QoKQotICAgIHRyeToKLSAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKLSAgICAgICAgIyBJZiB0aGUgc3NsIG1ha2VmaWxlcyBkbyBub3QgZXhpc3QsIHdlIGludm9rZSBQZXJsIHRvIGdlbmVyYXRlIHRoZW0uCi0gICAgICAgICMgRHVlIHRvIGEgYnVnIGluIHRoaXMgc2NyaXB0LCB0aGUgbWFrZWZpbGUgc29tZXRpbWVzIGVuZGVkIHVwIGVtcHR5Ci0gICAgICAgICMgRm9yY2UgYSByZWdlbmVyYXRpb24gaWYgaXQgaXMuCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSkgb3Igb3MucGF0aC5nZXRzaXplKG1ha2VmaWxlKT09MDoKLSAgICAgICAgICAgIHByaW50ICJDcmVhdGluZyB0aGUgbWFrZWZpbGVzLi4uIgotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICAjIFB1dCBvdXIgd29ya2luZyBQZXJsIGF0IHRoZSBmcm9udCBvZiBvdXIgcGF0aAotICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdID0gb3MucGF0aC5kaXJuYW1lKHBlcmwpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aHNlcCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXQotICAgICAgICAgICAgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCkKLSAgICAgICAgICAgIGlmIGFyY2g9PSJ4ODYiIGFuZCBkZWJ1ZzoKLSAgICAgICAgICAgICAgICAjIHRoZSBkb19tYXNtIHNjcmlwdCBpbiBvcGVuc3NsIGRvZXNuJ3QgZ2VuZXJhdGUgYSBkZWJ1ZwotICAgICAgICAgICAgICAgICMgYnVpbGQgbWFrZWZpbGUgc28gd2UgZ2VuZXJhdGUgaXQgaGVyZToKLSAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oInBlcmwgdXRpbFxtazFtZi5wbCBkZWJ1ZyAiK2NvbmZpZ3VyZSsiID4iK21ha2VmaWxlKQotCi0gICAgICAgICMgTm93IHJ1biBtYWtlLgotICAgICAgICBtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIFBFUkw9XCIlc1wiIC1mIFwiJXNcIiIgJShwZXJsLCBtYWtlZmlsZSkKLSAgICAgICAgcHJpbnQgIkV4ZWN1dGluZyBzc2wgbWFrZWZpbGVzOiIsIG1ha2VDb21tYW5kCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByYyA9IG9zLnN5c3RlbShtYWtlQ29tbWFuZCkKLSAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICBwcmludCAiRXhlY3V0aW5nICIrbWFrZWZpbGUrIiBmYWlsZWQiCi0gICAgICAgICAgICBwcmludCByYwotICAgICAgICAgICAgc3lzLmV4aXQocmMpCi0gICAgZmluYWxseToKLSAgICAgICAgb3MuY2hkaXIob2xkX2NkKQotICAgICMgQW5kIGZpbmFsbHksIHdlIGNhbiBidWlsZCB0aGUgX3NzbCBtb2R1bGUgaXRzZWxmIGZvciBQeXRob24uCi0gICAgZGVmcyA9ICJTU0xfRElSPVwiJXNcIiIgJSAoc3NsX2RpciwpCi0gICAgaWYgZGVidWc6Ci0gICAgICAgIGRlZnMgPSBkZWZzICsgIiAiICsgIkRFQlVHPTEiCi0gICAgaWYgYXJjaCBpbiAoJ2FtZDY0JywgJ2lhNjQnKToKLSAgICAgICAgZGVmcyA9IGRlZnMgKyAiIEVYVFJBX0NGTEFHUz0vR1MtIEVYVFJBX0xJQlM9YnVmZmVyb3ZlcmZsb3dVLmxpYiIKLSAgICBtYWtlQ29tbWFuZCA9ICdubWFrZSAvbm9sb2dvIC1mIF9zc2wubWFrICcgKyBkZWZzICsgIiAiICsgbWFrZV9mbGFncwotICAgIHByaW50ICJFeGVjdXRpbmc6IiwgbWFrZUNvbW1hbmQKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByYyA9IG9zLnN5c3RlbShtYWtlQ29tbWFuZCkKLSAgICBzeXMuZXhpdChyYykKLQotaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9iejIudmNwcm9qIGIvUEMvVlM3LjEvYnoyLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwMDVhMS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9iejIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJiejIiDQotCVJvb3ROYW1lc3BhY2U9ImJ6MiINCi0JU2NjUHJvamVjdE5hbWU9ImJ6MiINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcYnoyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cYnppcDItMS4wLjNcbGliYnoyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9iejJfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJtc3ZjcnQsbGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vYnoyX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vYnoyX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkIC4uXC4uXC4uXGJ6aXAyLTEuMC4zDQotbm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MNCi0iLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcYnoyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlwuLlxiemlwMi0xLjAuMyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxiemlwMi0xLjAuM1xsaWJiejIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL2J6Mi5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9iejIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vYnoyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAuLlwuLlwuLlxiemlwMi0xLjAuMw0KLW5tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYg0KLSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXGJ6MiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlwuLlxiemlwMi0xLjAuMyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vYnoyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL2J6Mi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9iejIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkIC4uXC4uXC4uXGJ6aXAyLTEuMC4zDQotbm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliDQotIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXGJ6MiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlwuLlxiemlwMi0xLjAuMyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxiemlwMi0xLjAuM1xsaWJiejIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL2J6Mi5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9iejIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vYnoyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAuLlwuLlwuLlxiemlwMi0xLjAuMw0KLW5tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYg0KLSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYnoybW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9kYi5idWlsZCBiL1BDL1ZTNy4xL2RiLmJ1aWxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTg3Zjc0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2RiLmJ1aWxkCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdD4KLSA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVzY3JpcHRpb249IkJ1aWxkIGFsbCB0YXJnZXRzLiI+Ci0gICA8c29sdXRpb24gY29uZmlndXJhdGlvbj0icmVsZWFzZSI+Ci0gICAgIDxwcm9qZWN0cz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJkYl9zdGF0aWMudmNwcm9qIiAvPgotICAgICA8L3Byb2plY3RzPgotICAgPC9zb2x1dGlvbj4KLSA8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2ZpZWxkMy5weSBiL1BDL1ZTNy4xL2ZpZWxkMy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdmMjRjYS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9maWVsZDMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIEFuIGFic3VyZCB3b3JrYXJvdW5kIGZvciB0aGUgbGFjayBvZiBhcml0aG1ldGljIGluIE1TJ3MgcmVzb3VyY2UgY29tcGlsZXIuCi0jIEFmdGVyIGJ1aWxkaW5nIFB5dGhvbiwgcnVuIHRoaXMsIHRoZW4gcGFzdGUgdGhlIG91dHB1dCBpbnRvIHRoZSBhcHByb3ByaWF0ZQotIyBwYXJ0IG9mIFBDXHB5dGhvbl9udC5yYy4KLSMgRXhhbXBsZSBvdXRwdXQ6Ci0jCi0jICogRm9yIDIuM2EwLAotIyAqIFBZX01JQ1JPX1ZFUlNJT04gPSAwCi0jICogUFlfUkVMRUFTRV9MRVZFTCA9ICdhbHBoYScgPSAweEEKLSMgKiBQWV9SRUxFQVNFX1NFUklBTCA9IDEKLSMgKgotIyAqIGFuZCAwKjEwMDAgKyAxMCoxMCArIDEgPSAxMDEuCi0jICovCi0jICNkZWZpbmUgRklFTEQzIDEwMQotCi1pbXBvcnQgc3lzCi0KLW1ham9yLCBtaW5vciwgbWljcm8sIGxldmVsLCBzZXJpYWwgPSBzeXMudmVyc2lvbl9pbmZvCi1sZXZlbG51bSA9IHsnYWxwaGEnOiAweEEsCi0gICAgICAgICAgICAnYmV0YSc6IDB4QiwKLSAgICAgICAgICAgICdjYW5kaWRhdGUnOiAweEMsCi0gICAgICAgICAgICAnZmluYWwnOiAweEYsCi0gICAgICAgICAgIH1bbGV2ZWxdCi1zdHJpbmcgPSBzeXMudmVyc2lvbi5zcGxpdCgpWzBdICMgbGlrZSAnMi4zYTAnCi0KLXByaW50ICIgKiBGb3IgJXMsIiAlIHN0cmluZwotcHJpbnQgIiAqIFBZX01JQ1JPX1ZFUlNJT04gPSAlZCIgJSBtaWNybwotcHJpbnQgIiAqIFBZX1JFTEVBU0VfTEVWRUwgPSAlciA9ICVzIiAlIChsZXZlbCwgaGV4KGxldmVsbnVtKSkKLXByaW50ICIgKiBQWV9SRUxFQVNFX1NFUklBTCA9ICVkIiAlIHNlcmlhbAotcHJpbnQgIiAqIgotCi1maWVsZDMgPSBtaWNybyAqIDEwMDAgKyBsZXZlbG51bSAqIDEwICsgc2VyaWFsCi0KLXByaW50ICIgKiBhbmQgJWQqMTAwMCArICVkKjEwICsgJWQgPSAlZCIgJSAobWljcm8sIGxldmVsbnVtLCBzZXJpYWwsIGZpZWxkMykKLXByaW50ICIgKi8iCi1wcmludCAiI2RlZmluZSBGSUVMRDMiLCBmaWVsZDMKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2luc3RhbGxlci5ibXAgYi9QQy9WUzcuMS9pbnN0YWxsZXIuYm1wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODc1ZTE5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2luc3RhbGxlci5ibXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby5jIGIvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFhMmI2Ni4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qIFRoaXMgZmlsZSBjcmVhdGVzIHRoZSBnZXRidWlsZGluZm8ubyBvYmplY3QsIGJ5IGZpcnN0Ci0gICBpbnZva2luZyBzdWJ3Y3Jldi5leGUgKGlmIGZvdW5kKSwgYW5kIHRoZW4gaW52b2tpbmcgY2wuZXhlLgotICAgQXMgYSBzaWRlIGVmZmVjdCwgaXQgbWlnaHQgZ2VuZXJhdGUgUENcVlM3LjFcZ2V0YnVpbGRpbmZvMi5jCi0gICBhbHNvLiBJZiB0aGlzIGlzbid0IGEgc3VidmVyc2lvbiBjaGVja291dCwgb3Igc3Vid2NyZXYgaXNuJ3QKLSAgIGZvdW5kLCBpdCBjb21waWxlcyAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIGluc3RlYWQuCi0KLSAgIEN1cnJlbnRseSwgc3Vid2NyZXYuZXhlIGlzIGZvdW5kIGZyb20gdGhlIHJlZ2lzdHJ5IGVudHJpZXMKLSAgIG9mIFRvcnRvaXNlU1ZOLgotCi0gICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gcGxhY2UgZ2V0YnVpbGRpbmZvLm8gaW50byB0aGUgcHJvcGVyCi0gICBiaW5hcnkgZGlyZWN0b3J5LiBUaGlzIGlzbid0IG5lY2Vzc2FyeSwgYXMgdGhpcyB0b29sIGlzCi0gICBpbnZva2VkIGFzIGEgcHJlLWxpbmsgc3RlcCBmb3IgcHl0aG9uY29yZSwgc28gdGhhdCBvdmVyd3JpdGVzCi0gICBhbnkgcHJldmlvdXMgZ2V0YnVpbGRpbmZvLm8uCi0KLSovCi0KLWludCBtYWtlX2J1aWxkaW5mbzIoKQotewotICAgIHN0cnVjdCBfc3RhdCBzdDsKLSAgICBIS0VZIGhUb3J0b2lzZTsKLSAgICBjaGFyIGNvbW1hbmRbNTAwXTsKLSAgICBEV09SRCB0eXBlLCBzaXplOwotICAgIGlmIChfc3RhdCgiLnN2biIsICZzdCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvKiBBbGxvdyBzdXBwcmVzc2lvbiBvZiBzdWJ3Y3Jldi5leGUgaW52b2NhdGlvbiBpZiBhIG5vX3N1YndjcmV2IGZpbGUgaXMgcHJlc2VudC4gKi8KLSAgICBpZiAoX3N0YXQoIm5vX3N1YndjcmV2IiwgJnN0KSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoUmVnT3BlbktleShIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTICYmCi0gICAgICAgIFJlZ09wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAvKiBUb3J0b2lzZSBub3QgaW5zdGFsbGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbW1hbmRbMF0gPSAnIic7ICAvKiBxdW90ZSB0aGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZSAqLwotICAgIHNpemUgPSBzaXplb2YoY29tbWFuZCkgLSAxOwotICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoaFRvcnRvaXNlLCAiRGlyZWN0b3J5IiwgMCwgJnR5cGUsIGNvbW1hbmQrMSwgJnNpemUpICE9IEVSUk9SX1NVQ0NFU1MgfHwKLSAgICAgICAgdHlwZSAhPSBSRUdfU1opCi0gICAgICAgIC8qIFJlZ2lzdHJ5IGNvcnJ1cHRlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXQoY29tbWFuZCwgImJpblxcc3Vid2NyZXYuZXhlIik7Ci0gICAgaWYgKF9zdGF0KGNvbW1hbmQrMSwgJnN0KSA8IDApCi0gICAgICAgIC8qIHN1YndjcmV2LmV4ZSBub3QgcGFydCBvZiB0aGUgcmVsZWFzZSAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXQoY29tbWFuZCwgIlwiIC4uXFwuLiAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIGdldGJ1aWxkaW5mbzIuYyIpOwotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIGlmIChzeXN0ZW0oY29tbWFuZCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQotewotICAgIGNoYXIgY29tbWFuZFs1MDBdID0gImNsLmV4ZSAtYyAtRF9XSU4zMiAtRFVTRV9ETF9FWFBPUlQgLURfV0lORE9XUyAtRFdJTjMyIC1EX1dJTkRMTCAiOwotICAgIGludCBkb191bmxpbmssIHJlc3VsdDsKLSAgICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibWFrZV9idWlsZGluZm8gJChDb25maWd1cmF0aW9uTmFtZSlcbiIpOwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLSAgICBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlIikgPT0gMCkgewotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi1NRCAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJEZWJ1ZyIpID09IDApIHsKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICItRF9ERUJVRyAtTURkICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VJdGFuaXVtIikgPT0gMCkgewotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi1NRCAvVVNFQ0w6TVNfSVRBTklVTSAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlQU1ENjQiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLU1EICIpOwotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi1NRCAvVVNFQ0w6TVNfT1BURVJPTiAiKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbiAlc1xuIiwgYXJndlsxXSk7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAgaWYgKChkb191bmxpbmsgPSBtYWtlX2J1aWxkaW5mbzIoKSkpCi0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiZ2V0YnVpbGRpbmZvMi5jIC1EU1VCV0NSRVYgIik7Ci0gICAgZWxzZQotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMiKTsKLSAgICBzdHJjYXQoY29tbWFuZCwgIiAtRm9nZXRidWlsZGluZm8ubyAtSS4uXFwuLlxcSW5jbHVkZSAtSS4uXFwuLlxcUEMiKTsKLSAgICBwdXRzKGNvbW1hbmQpOyBmZmx1c2goc3Rkb3V0KTsKLSAgICByZXN1bHQgPSBzeXN0ZW0oY29tbWFuZCk7Ci0gICAgaWYgKGRvX3VubGluaykKLSAgICAgICAgdW5saW5rKCJnZXRidWlsZGluZm8yLmMiKTsKLSAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLnZjcHJvaiBiL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBjOGE1ZC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUwIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Im1ha2VfYnVpbGRpbmZvIg0KLQlQcm9qZWN0R1VJRD0ie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQotCUtleXdvcmQ9IldpbjMyUHJvaiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcbWFrZV9idWlsZGluZm8iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NPTlNPTEUiDQotCQkJCU1pbmltYWxSZWJ1aWxkPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSI1Ig0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpL21ha2VfYnVpbGRpbmZvLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIyIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKS9tYWtlX2J1aWxkaW5mby5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXG1ha2VfYnVpbGRpbmZvIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjQiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbWFrZV9idWlsZGluZm8uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiDQotCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLlxtYWtlX2J1aWxkaW5mby5jIj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvbWFrZV92ZXJzaW9uaW5mby52Y3Byb2ogYi9QQy9WUzcuMS9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZmYTRlYi4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0ibWFrZV92ZXJzaW9uaW5mbyINCi0JUm9vdE5hbWVzcGFjZT0ibWFrZV92ZXJzaW9uaW5mbyINCi0JU2NjUHJvamVjdE5hbWU9Im1ha2VfdmVyc2lvbmluZm8iDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxtYWtlX3ZlcnNpb25pbmZvIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJQ29tbWFuZExpbmU9Ii5cbWFrZV92ZXJzaW9uaW5mby5leGUgJmd0Oy4uXC4uXFBDXHB5dGhvbm50X3JjLmgNCi0iDQotCQkJCU91dHB1dHM9Ii4uXC4uXFBDXHB5dGhvbm50X3JjLmgiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL21ha2VfdmVyc2lvbmluZm8uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vbWFrZV92ZXJzaW9uaW5mby5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIkKFRhcmdldEZpbGVOYW1lKSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udC5oIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXG1ha2VfdmVyc2lvbmluZm8iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19DT05TT0xFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIuXG1ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0Oy4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaA0KLSINCi0JCQkJT3V0cHV0cz0iLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL21ha2VfdmVyc2lvbmluZm9fZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIkKFRhcmdldEZpbGVOYW1lKSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udF9kLmgiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcbWFrZV92ZXJzaW9uaW5mby5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcGNidWlsZC5zbG4gYi9QQy9WUzcuMS9wY2J1aWxkLnNsbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIwZjE5Yy4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9wY2J1aWxkLnNsbgorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi1NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiA4LjAwDQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc29ja2V0IiwgIl9zb2NrZXQudmNwcm9qIiwgInszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NzbCIsICJfc3NsLnZjcHJvaiIsICJ7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0gPSB7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fQ0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0gPSB7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0Y2FwaSIsICJfdGVzdGNhcGkudmNwcm9qIiwgIns1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3RraW50ZXIiLCAiX3RraW50ZXIudmNwcm9qIiwgIns1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiYnoyIiwgImJ6Mi52Y3Byb2oiLCAie0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX3ZlcnNpb25pbmZvIiwgIm1ha2VfdmVyc2lvbmluZm8udmNwcm9qIiwgIntGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHlleHBhdCIsICJweWV4cGF0LnZjcHJvaiIsICJ7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbiIsICJweXRob24udmNwcm9qIiwgIntCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uY29yZSIsICJweXRob25jb3JlLnZjcHJvaiIsICJ7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0gPSB7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfQ0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0gPSB7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbnciLCAicHl0aG9udy52Y3Byb2oiLCAie0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzZWxlY3QiLCAic2VsZWN0LnZjcHJvaiIsICJ7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInVuaWNvZGVkYXRhIiwgInVuaWNvZGVkYXRhLnZjcHJvaiIsICJ7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInc5eHBvcGVuIiwgInc5eHBvcGVuLnZjcHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbnNvdW5kIiwgIndpbnNvdW5kLnZjcHJvaiIsICJ7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9lbGVtZW50dHJlZSIsICJfZWxlbWVudHRyZWUudmNwcm9qIiwgInsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV9idWlsZGluZm8iLCAibWFrZV9idWlsZGluZm8udmNwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX21zaSIsICJfbXNpLnZjcHJvaiIsICJ7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9jdHlwZXMiLCAiX2N0eXBlcy52Y3Byb2oiLCAie0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfY3R5cGVzX3Rlc3QiLCAiX2N0eXBlc190ZXN0LnZjcHJvaiIsICJ7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0gPSB7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zcWxpdGUzIiwgIl9zcWxpdGUzLnZjcHJvaiIsICJ7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1HbG9iYWwNCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb24pID0gcHJlU29sdXRpb24NCi0JCURlYnVnID0gRGVidWcNCi0JCVJlbGVhc2UgPSBSZWxlYXNlDQotCQlSZWxlYXNlQU1ENjQgPSBSZWxlYXNlQU1ENjQNCi0JCVJlbGVhc2VJdGFuaXVtID0gUmVsZWFzZUl0YW5pdW0NCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uKSA9IHBvc3RTb2x1dGlvbg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvbkl0ZW1zKSA9IHBvc3RTb2x1dGlvbg0KLQkJLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYyA9IC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMNCi0JCXJlYWRtZS50eHQgPSByZWFkbWUudHh0DQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihFeHRlbnNpYmlsaXR5R2xvYmFscykgPSBwb3N0U29sdXRpb24NCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKEV4dGVuc2liaWxpdHlBZGRJbnMpID0gcG9zdFNvbHV0aW9uDQotCUVuZEdsb2JhbFNlY3Rpb24NCi1FbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weWV4cGF0LnZjcHJvaiBiL1BDL1ZTNy4xL3B5ZXhwYXQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDczOWZhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5ZXhwYXQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJweWV4cGF0Ig0KLQlTY2NQcm9qZWN0TmFtZT0icHlleHBhdCINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdccHlleHBhdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO0hBVkVfRVhQQVRfSDtXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5ZXhwYXRfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weWV4cGF0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHlleHBhdF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VccHlleHBhdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9weWV4cGF0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5ZXhwYXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHlleHBhdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VccHlleHBhdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHlleHBhdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weWV4cGF0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5ZXhwYXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxweWV4cGF0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAgL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5ZXhwYXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHlleHBhdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weWV4cGF0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHB5ZXhwYXQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbi5idWlsZCBiL1BDL1ZTNy4xL3B5dGhvbi5idWlsZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcxMTAxZC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob24uYnVpbGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0PgotIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXNjcmlwdGlvbj0iQnVpbGQgYWxsIHRhcmdldHMuIj4KLSAgIDxzb2x1dGlvbiBjb25maWd1cmF0aW9uPSJyZWxlYXNlIj4KLSAgICAgPHByb2plY3RzPgotICAgICAgIDxpbmNsdWRlIG5hbWU9Im1ha2VfdmVyc2lvbmluZm8udmNwcm9qIiAvPgotICAgICA8L3Byb2plY3RzPgotICAgPC9zb2x1dGlvbj4KLSAgIDxleGVjIHByb2dyYW09Im1ha2VfdmVyc2lvbmluZm8iIG91dHB1dD0icHl0aG9ubnRfcmMuaCIgLz4KLQotICAgPHNvbHV0aW9uIGNvbmZpZ3VyYXRpb249InJlbGVhc2UiIHNvbHV0aW9uZmlsZT0icGNidWlsZC5zbG4iPgotICAgICA8ZXhjbHVkZXByb2plY3RzPgotICAgICAgIDxpbmNsdWRlIG5hbWU9Il90a2ludGVyLnZjcHJvaiIgLz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJiejIudmNwcm9qIiAvPgotICAgICAgIDxpbmNsdWRlIG5hbWU9Il9zcWxpdGUzLnZjcHJvaiIgLz4KLSAgICAgICA8aW5jbHVkZSBuYW1lPSJfc3NsLnZjcHJvaiIgLz4KLSAgICAgPC9leGNsdWRlcHJvamVjdHM+Ci0gICA8L3NvbHV0aW9uPgotIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uLmlzcyBiL1BDL1ZTNy4xL3B5dGhvbi5pc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNmEzYzAuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9uLmlzcworKysgL2Rldi9udWxsCkBAIC0xLDM0MSArMCwwIEBACi07IFNjcmlwdCBnZW5lcmF0ZWQgYnkgdGhlIElubm8gU2V0dXAgU2NyaXB0IFdpemFyZC4KLTsgU0VFIFRIRSBET0NVTUVOVEFUSU9OIEZPUiBERVRBSUxTIE9OIENSRUFUSU5HIElOTk8gU0VUVVAgU0NSSVBUIEZJTEVTIQotCi07IFRoaXMgaXMgdGhlIHdob2xlIGJhbGwgb2Ygd2F4IGZvciBhbiBJbm5vIGluc3RhbGxlciBmb3IgUHl0aG9uLgotOyBUbyB1c2UsIGRvd25sb2FkIElubm8gU2V0dXAgZnJvbSBodHRwOi8vd3d3Lmpyc29mdHdhcmUub3JnL2lzZGwuaHRtLywKLTsgaW5zdGFsbCBpdCwgYW5kIGRvdWJsZS1jbGljayBvbiB0aGlzIGZpbGUuICBUaGF0IGxhdW5jaGVzIHRoZSBJbm5vCi07IHNjcmlwdCBjb21waWxlci4gIFRoZSBHVUkgaXMgZXh0ZW1lbHkgc2ltcGxlLCBhbmQgaGFzIG9ubHkgb25lIGJ1dHRvbgotOyB5b3UgbWF5IG5vdCByZWNvZ25pemUgaW5zdGFudGx5OiAgY2xpY2sgaXQuICBZb3UncmUgZG9uZS4gIEl0IGJ1aWxkcwotOyB0aGUgaW5zdGFsbGVyIGludG8gUENCdWlsZC9QeXRob24tMi4yYTEuZXhlLiAgU2l6ZSBhbmQgc3BlZWQgb2YgdGhlCi07IGluc3RhbGxlciBhcmUgY29tcGV0aXRpdmUgd2l0aCB0aGUgV2lzZSBpbnN0YWxsZXI7IElubm8gdW5pbnN0YWxsCi07IHNlZW1zIG11Y2ggcXVpY2tlciB0aGFuIFdpc2UgKGJ1dCBhbHNvIGZlZWJsZXIsIGFuZCB0aGUgdW5pbnN0YWxsCi07IGxvZyBpcyBpbiBzb21lIHVuKGh1bWFuKXJlYWRhYmxlIGJpbmFyeSBmb3JtYXQpLgotOwotOyBXaGF0J3MgRG9uZQotOyAtLS0tLS0tLS0tLQotOyBBbGwgdGhlIHVzdWFsIFdpbmRvd3MgUHl0aG9uIGZpbGVzIGFyZSBpbnN0YWxsZWQgYnkgdGhpcyBub3cuCi07IEFsbCB0aGUgdXN1YWwgV2luZG93cyBQeXRob24gU3RhcnQgbWVudSBlbnRyaWVzIGFyZSBjcmVhdGVkIGFuZAotOyB3b3JrIGZpbmUuCi07IC5weSwgLnB5dywgLnB5YyBhbmQgLnB5byBleHRlbnNpb25zIGFyZSByZWdpc3RlcmVkLgotOyAgICAgUFJPQkxFTTogIElubm8gdW5pbnN0YWxsIGRvZXMgbm90IHJlc3RvcmUgdGhlaXIgcHJldmlvdXMgcmVnaXN0cnkKLTsgICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMgKGlmIGFueSkuICBXaXNlIGRpZC4gIFRoaXMgd2lsbCBtYWtlIGxpZmUKLTsgICAgICAgICAgICAgICBkaWZmaWN1bHQgZm9yIGFscGhhIChldGMpIHRlc3RlcnMuCi07IFRoZSBQeXRob24gaW5zdGFsbCBpcyBmdWxseSBmdW5jdGlvbmFsIGZvciAidHlwaWNhbCIgdXNlcy4KLTsKLTsgV2hhdCdzIE5vdCBEb25lCi07IC0tLS0tLS0tLS0tLS0tLQotOyBOb25lIG9mICJNYXJrIEhhbW1vbmQncyIgcmVnaXN0cnkgZW50cmllcyBhcmUgd3JpdHRlbi4KLTsgTm8gaW5zdGFsbGF0aW9uIG9mIGZpbGVzIGlzIGRvbmUgaW50byB0aGUgc3lzdGVtIGRpcjoKLTsgICAgIFRoZSBNUyBETExzIGFyZW4ndCBoYW5kbGVkIGF0IGFsbCBieSB0aGlzIHlldC4KLTsgICAgIFB5dGhvbjIyLmRsbCBpcyB1bnBhY2tlZCBpbnRvIHRoZSBtYWluIFB5dGhvbiBkaXIuCi07Ci07IElubm8gY2FuJ3QgZG8gZGlmZmVyZW50IHRoaW5ncyBvbiBOVC8yMDAwIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB1c2VyCi07IGhhcyBBZG1pbiBwcml2aWxlZ2VzLCBzbyBJIGRvbid0IGtub3cgaG93IHRvICJzb2x2ZSIgZWl0aGVyIG9mIHRob3NlLAotOyBzaG9ydCBvZiBidWlsZGluZyB0d28gaW5zdGFsbGVycyAob25lICpyZXF1aXJpbmcqIEFkbWluIHByaXZzLCB0aGUKLTsgb3RoZXIgbm90IGRvaW5nIGFueXRoaW5nIHRoYXQgbmVlZHMgQWRtaW4gcHJpdnMpLgotOwotOyBJbm5vIGhhcyBubyBjb25jZXB0IG9mIHZhcmlhYmxlcywgc28gbG90cyBvZiBsaW5lcyBpbiB0aGlzIGZpbGUgbmVlZAotOyB0byBiZSBmaWRkbGVkIGJ5IGhhbmQgYWNyb3NzIHJlbGVhc2VzLiAgU2ltcGxlc3Qgd2F5IG91dDogIHN0aWNrIHRoaXMKLTsgZmlsZSBpbiBhIGdpYW50IHRyaXBsZS1xdW90ZWQgci1zdHJpbmcgKG5vdGUgdGhhdCBiYWNrc2xhc2hlcyBhcmUKLTsgcmVxdWlyZWQgYWxsIG92ZXIgdGhlIHBsYWNlIGhlcmUgLS0gZm9yd2FyZCBzbGFzaGVzIERPTidUIFdPUksgaW4KLTsgSW5ubyksIGFuZCB1c2UgJSh5YWRkYSlzIHN0cmluZyBpbnRlcnBvbGF0aW9uIHRvIGRvIHN1YnN0aXR1dGlvbnM7IGkuZS4sCi07IHdyaXRlIGEgdmVyeSBzaW1wbGUgUHl0aG9uIHByb2dyYW0gdG8gKnByb2R1Y2UqIHRoaXMgc2NyaXB0LgotCi1bU2V0dXBdCi1BcHBOYW1lPVB5dGhvbiBhbmQgY29tYmluZWQgV2luMzIgRXh0ZW5zaW9ucwotQXBwVmVyTmFtZT1QeXRob24gMi4yLjIgYW5kIGNvbWJpbmVkIFdpbjMyIEV4dGVuc2lvbnMgMTUwCi1BcHBJZD1QeXRob24gMi4yLjIuMTUwCi1BcHBWZXJzaW9uPTIuMi4yLjE1MAotQXBwQ29weXJpZ2h0PVB5dGhvbiBpcyBDb3B5cmlnaHQgqSAyMDAxIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBXaW4zMiBFeHRlbnNpb25zIGFyZSBDb3B5cmlnaHQgqSAxOTk2LTIwMDEgR3JlZyBTdGVpbiBhbmQgTWFyayBIYW1tb25kLgotCi07IERlZmF1bHQgaW5zdGFsbCBkaXI7IHZhbHVlIG9mIHthcHB9IGxhdGVyICh1bmxlc3MgdXNlciBvdmVycmlkZXMpLgotOyB7c2R9ID0gc3lzdGVtIHJvb3QgZHJpdmUsIHByb2JhYmx5ICJDOiIuCi1EZWZhdWx0RGlyTmFtZT17c2R9XFB5dGhvbjIyCi07RGVmYXVsdERpck5hbWU9e3BmfVxQeXRob24KLQotOyBTdGFydCBtZW51IGZvbGRlciBuYW1lOyB2YWx1ZSBvZiB7Z3JvdXB9IGxhdGVyICh1bmxlc3MgdXNlciBvdmVycmlkZXMpLgotRGVmYXVsdEdyb3VwTmFtZT1QeXRob24gMi4yCi0KLTsgUG9pbnQgU291cmNlRGlyIHRvIG9uZSBhYm92ZSBQQ0J1aWxkID0gc3JjLgotOyBtZWFucyB0aGlzIHNjcmlwdCBjYW4gcnVuIHVuY2hhbmdlZCBmcm9tIGFueW9uZSdzIENWUyB0cmVlLCBubyBtYXR0ZXIKLTsgd2hhdCB0aGV5IGNhbGxlZCB0aGUgdG9wLWxldmVsIGRpcmVjdG9yaWVzLgotU291cmNlRGlyPS4KLU91dHB1dERpcj0uLgotT3V0cHV0QmFzZUZpbGVuYW1lPVB5dGhvbi0yLjIuMi1XaW4zMi0xNTAtU2V0dXAKLQotQXBwUHVibGlzaGVyPVB5dGhvbkxhYnMgYXQgRGlnaXRhbCBDcmVhdGlvbnMKLUFwcFB1Ymxpc2hlclVSTD1odHRwOi8vd3d3LnB5dGhvbi5vcmcKLUFwcFN1cHBvcnRVUkw9aHR0cDovL3d3dy5weXRob24ub3JnCi1BcHBVcGRhdGVzVVJMPWh0dHA6Ly93d3cucHl0aG9uLm9yZwotCi1BbHdheXNDcmVhdGVVbmluc3RhbGxJY29uPXRydWUKLUNoYW5nZXNBc3NvY2lhdGlvbnM9dHJ1ZQotVW5pbnN0YWxsTG9nTW9kZT1uZXcKLUFsbG93Tm9JY29ucz10cnVlCi1BZG1pblByaXZpbGVnZXNSZXF1aXJlZD10cnVlCi1Vbmluc3RhbGxEaXNwbGF5SWNvbj17YXBwfVxweWMuaWNvCi1XaXphcmREZWJ1Zz1mYWxzZQotCi07IFRoZSBmZXdlciBzY3JlZW5zIHRoZSBiZXR0ZXI7IGxlYXZlIHRoZXNlIGNvbW1lbnRlZC4KLQotQ29tcHJlc3Npb249YnppcAotSW5mb0JlZm9yZUZpbGU9TElDRU5TRS50eHQKLTtJbmZvQmVmb3JlRmlsZT1NaXNjXE5FV1MKLQotOyB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHlvdSB3YW50IHlvdXIgaW5zdGFsbGF0aW9uIHRvIHJ1biBvbiBOVCAzLjUxIHRvby4KLTsgTWluVmVyc2lvbj00LDMuNTEKLQotW1R5cGVzXQotTmFtZTogbm9ybWFsOyBEZXNjcmlwdGlvbjogU2VsZWN0IGRlc2lyZWQgY29tcG9uZW50czsgRmxhZ3M6IGlzY3VzdG9tCi0KLVtDb21wb25lbnRzXQotTmFtZTogbWFpbjsgRGVzY3JpcHRpb246IFB5dGhvbiBhbmQgV2luMzIgRXh0ZW5zaW9uczsgVHlwZXM6IG5vcm1hbAotTmFtZTogZG9jczsgRGVzY3JpcHRpb246IFB5dGhvbiBkb2N1bWVudGF0aW9uIChIVE1MKTsgVHlwZXM6IG5vcm1hbAotTmFtZTogdGs7IERlc2NyaXB0aW9uOiBUQ0wvVEssIHRraW50ZXIsIGFuZCBJZGxlOyBUeXBlczogbm9ybWFsCi1OYW1lOiB0b29sczsgRGVzY3JpcHRpb246IFB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzXCk7IFR5cGVzOiBub3JtYWwKLU5hbWU6IHRlc3Q7IERlc2NyaXB0aW9uOiBQeXRob24gdGVzdCBzdWl0ZSAoTGliXHRlc3RcKTsgVHlwZXM6IG5vcm1hbAotCi1bVGFza3NdCi1OYW1lOiBleHRlbnNpb25zOyBEZXNjcmlwdGlvbjogUmVnaXN0ZXIgZmlsZSBhc3NvY2lhdGlvbnMgKC5weSwgLnB5dywgLnB5YywgLnB5byk7IENvbXBvbmVudHM6IG1haW47IENoZWNrOiBJc0FkbWluTG9nZ2VkT24KLQotW0ZpbGVzXQotOyBDYXV0aW9uOiAgVXNpbmcgZm9yd2FyZCBzbGFzaGVzIGluc3RlYWQgc2NyZXdzIHVwIGluIGFtYXppbmcgd2F5cy4KLTsgVW5rbm93bjogIEJ5IHRoZSB0aW1lIENvbXBvbmVudHMgKGFuZCBvdGhlciBhdHRycykgYXJlIGFkZGVkIHRvIHRoZXNlIGxpbmVzLCB0aGV5J3JlCi07IGdvaW5nIHRvIGdldCBhd2Z1bGx5IGxvbmcuICBCdXQgZG9uJ3Qgc2VlIGEgd2F5IHRvIGNvbnRpbnVlIGxvZ2ljYWwgbGluZXMgYWNyb3NzCi07IHBoeXNpY2FsIGxpbmVzLgotCi1Tb3VyY2U6IExJQ0VOU0UudHh0OyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZQotU291cmNlOiBSRUFETUUudHh0OyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZQotU291cmNlOiBOZXdzLnR4dDsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGUKLVNvdXJjZTogKi5pY287IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogcHl0aG9uLmV4ZTsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogcHl0aG9udy5leGU7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IHc5eHBvcGVuLmV4ZTsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotCi1Tb3VyY2U6IERMTHNcdGNsODMuZGxsOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0awotU291cmNlOiBETExzXHRrODMuZGxsOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0awotU291cmNlOiB0Y2xcKi4qOyBEZXN0RGlyOiB7YXBwfVx0Y2w7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLQotU291cmNlOiBzeXNkaXJccHl0aG9uMjIuZGxsOyBEZXN0RGlyOiB7c3lzfTsgQ29weU1vZGU6IGFsd2F5c3NraXBpZnNhbWVvcm9sZGVyOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogc2hhcmVkZmlsZSByZXN0YXJ0cmVwbGFjZQotU291cmNlOiBzeXNkaXJcUHlXaW5UeXBlczIyLmRsbDsgRGVzdERpcjoge3N5c307IENvcHlNb2RlOiBhbHdheXNza2lwaWZzYW1lb3JvbGRlcjsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlc3RhcnRyZXBsYWNlIHNoYXJlZGZpbGUKLVNvdXJjZTogc3lzZGlyXHB5dGhvbmNvbTIyLmRsbDsgRGVzdERpcjoge3N5c307IENvcHlNb2RlOiBhbHdheXNza2lwaWZzYW1lb3JvbGRlcjsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlc3RhcnRyZXBsYWNlIHNoYXJlZGZpbGUKLQotU291cmNlOiBETExzXF9zb2NrZXQucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcX3NvY2tldC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXF9zcmUucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcX3NyZS5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXF9zeW10YWJsZS5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xfc3ltdGFibGUubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xfdGVzdGNhcGkucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcX3Rlc3RjYXBpLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcX3RraW50ZXIucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0awotU291cmNlOiBsaWJzXF90a2ludGVyLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGsKLQotU291cmNlOiBETExzXG1tYXAucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcbW1hcC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHBhcnNlci5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xwYXJzZXIubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xweWV4cGF0LnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHB5ZXhwYXQubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xzZWxlY3QucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcc2VsZWN0LmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcdW5pY29kZWRhdGEucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcdW5pY29kZWRhdGEubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1x3aW5yZWcucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcd2lucmVnLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcd2luc291bmQucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcd2luc291bmQubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1x6bGliLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHpsaWIubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogbGlic1xweXRob24yMi5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXGV4cGF0LmRsbDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi0KLQotU291cmNlOiBMaWJcKi5weTsgRGVzdERpcjoge2FwcH1cTGliOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IExpYlxjb21waWxlclwqLio7IERlc3REaXI6IHthcHB9XExpYlxjb21waWxlcjsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxkaXN0dXRpbHNcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcZGlzdHV0aWxzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGVtYWlsXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGVtYWlsOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGVuY29kaW5nc1wqLio7IERlc3REaXI6IHthcHB9XExpYlxlbmNvZGluZ3M7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcaG90c2hvdFwqLio7IERlc3REaXI6IHthcHB9XExpYlxob3RzaG90OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGxpYi1vbGRcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcbGliLW9sZDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlx4bWxcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJceG1sOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGhvdHNob3RcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcaG90c2hvdDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlx0ZXN0XCouKjsgRGVzdERpcjoge2FwcH1cTGliXHRlc3Q7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRlc3Q7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcdGtpbnRlclwqLnB5OyBEZXN0RGlyOiB7YXBwfVxMaWJcdGtpbnRlcjsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGs7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IExpYlxzaXRlLXBhY2thZ2VzXFJFQURNRS50eHQ7IERlc3REaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcUHlXaW4zMi5jaG07IERlc3REaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBkb2NzCi1Tb3VyY2U6IExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyXCouKjsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzI7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbVwqLio7IERlc3REaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb21leHRcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbWV4dDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogaW5jbHVkZVwqLmg7IERlc3REaXI6IHthcHB9XGluY2x1ZGU7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBUb29sc1xpZGxlXCouKjsgRGVzdERpcjoge2FwcH1cVG9vbHNcaWRsZTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGs7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IFRvb2xzXHB5bmNoZVwqLio7IERlc3REaXI6IHthcHB9XFRvb2xzXHB5bmNoZTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdG9vbHM7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBUb29sc1xzY3JpcHRzXCouKjsgRGVzdERpcjoge2FwcH1cVG9vbHNcU2NyaXB0czsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdG9vbHM7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBUb29sc1x3ZWJjaGVja2VyXCouKjsgRGVzdERpcjoge2FwcH1cVG9vbHNcd2ViY2hlY2tlcjsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdG9vbHM7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBUb29sc1x2ZXJzaW9uY2hlY2tcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1x2ZXJzaW9uY2hlY2s7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRvb2xzOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLQotU291cmNlOiBEb2NcKi4qOyBEZXN0RGlyOiB7YXBwfVxEb2M7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IEZsYWdzOiByZWN1cnNlc3ViZGlyczsgQ29tcG9uZW50czogZG9jcwotCi0KLVtJY29uc10KLU5hbWU6IHtncm91cH1cUHl0aG9uIChjb21tYW5kIGxpbmUpOyBGaWxlbmFtZToge2FwcH1ccHl0aG9uLmV4ZTsgV29ya2luZ0Rpcjoge2FwcH07IENvbXBvbmVudHM6IG1haW4KLU5hbWU6IHtncm91cH1cUHl0aG9uIE1hbnVhbHM7IEZpbGVuYW1lOiB7YXBwfVxEb2NcaW5kZXguaHRtbDsgV29ya2luZ0Rpcjoge2FwcH07IENvbXBvbmVudHM6IGRvY3MKLU5hbWU6IHtncm91cH1cV2luMzIgRXh0ZW5zaW9ucyBIZWxwOyBGaWxlbmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcUHlXaW4zMi5jaG07IFdvcmtpbmdEaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzOyBDb21wb25lbnRzOiBkb2NzCi1OYW1lOiB7Z3JvdXB9XE1vZHVsZSBEb2NzOyBGaWxlbmFtZToge2FwcH1ccHl0aG9udy5leGU7IFdvcmtpbmdEaXI6IHthcHB9OyBQYXJhbWV0ZXJzOiAiIiJ7YXBwfVxUb29sc1xTY3JpcHRzXHB5ZG9jLnB5dyIiIjsgQ29tcG9uZW50czogdG9vbHMKLU5hbWU6IHtncm91cH1cSURMRSAoUHl0aG9uIEdVSSk7IEZpbGVuYW1lOiB7YXBwfVxweXRob253LmV4ZTsgV29ya2luZ0Rpcjoge2FwcH07IFBhcmFtZXRlcnM6ICIiInthcHB9XFRvb2xzXGlkbGVcaWRsZS5weXciIiI7IENvbXBvbmVudHM6IHRvb2xzCi0KLVtSZWdpc3RyeV0KLTsgUmVnaXN0ZXIgLnB5Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHk7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogQ29udGVudCBUeXBlOyBWYWx1ZURhdGE6IHRleHQvcGxhaW47IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gRmlsZTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBGaWxlOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBGaWxlXERlZmF1bHRJY29uOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YToge2FwcH1cUHkuaWNvCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQ7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiAiIiJ7YXBwfVxweXRob24uZXhlIiIgIiIlMSIiICUqIgotCi07IFJlZ2lzdGVyIC5weWMKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weWM7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gQ29tcGlsZWRGaWxlOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIENvbXBpbGVkRmlsZTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IENvbXBpbGVkIFB5dGhvbiBGaWxlOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBDb21waWxlZEZpbGVcRGVmYXVsdEljb247IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiB7YXBwfVxweWMuaWNvCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gQ29tcGlsZWRGaWxlXHNoZWxsXG9wZW5cY29tbWFuZDsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6ICIiInthcHB9XHB5dGhvbi5leGUiIiAiIiUxIiIgJSoiCi0KLTsgUmVnaXN0ZXIgLnB5bwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5bzsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBDb21waWxlZEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi0KLTsgUmVnaXN0ZXIgLnB5dwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5dzsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBOb0NvbkZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHl3OyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiBDb250ZW50IFR5cGU7IFZhbHVlRGF0YTogdGV4dC9wbGFpbjsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBOb0NvbkZpbGU7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiBQeXRob24gRmlsZSAobm8gY29uc29sZSk7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIE5vQ29uRmlsZVxEZWZhdWx0SWNvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IHthcHB9XFB5LmljbwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIE5vQ29uRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQ7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiAiIiJ7YXBwfVxweXRob253LmV4ZSIiICIiJTEiIiAlKiIKLQotCi07IFB5dGhvbiBSZWdpc3RyeSBLZXlzCi1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvbjsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eTsgQ2hlY2s6IElzQWRtaW5Mb2dnZWRPbgotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjI7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXFB5dGhvblBhdGg7IFZhbHVlRGF0YTogInthcHB9XExpYjt7YXBwfVxETExzIjsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcUHl0aG9uUGF0aFx3aW4zMjsgVmFsdWVEYXRhOiAie2FwcH1cbGliXHNpdGUtcGFja2FnZXNcd2luMzI7e2FwcH1cbGliXHNpdGUtcGFja2FnZXNcd2luMzJcbGliIjsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxQeXRob25QYXRoXHdpbjMyY29tOyBWYWx1ZURhdGE6IEM6XFB5dGhvblxsaWJcc2l0ZS1wYWNrYWdlczsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxNb2R1bGVzOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxNb2R1bGVzXHB5dGhvbmNvbTsgVmFsdWVEYXRhOiB7c3lzfVxweXRob25jb20yMi5kbGw7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcTW9kdWxlc1xweXdpbnR5cGVzOyBWYWx1ZURhdGE6IHtzeXN9XFB5V2luVHlwZXMyMi5kbGw7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcSW5zdGFsbFBhdGg7IFZhbHVlRGF0YToge2FwcH07IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHk7IFZhbHVlVHlwZTogc3RyaW5nCi1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxJbnN0YWxsUGF0aFxJbnN0YWxsR3JvdXA7IFZhbHVlRGF0YToge2dyb3VwfTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxIZWxwOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxIZWxwXE1haW4gUHl0aG9uIERvY3VtZW50YXRpb247IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZURhdGE6IHthcHB9XERvY1xpbmRleC5odG1sOyBGbGFnczogdW5pbnNkZWxldGVrZXk7IENvbXBvbmVudHM6IGRvY3MKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEhlbHBcUHl0aG9uIFdpbjMyIERvY3VtZW50YXRpb247IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZURhdGE6IHthcHB9XGxpYlxzaXRlLXBhY2thZ2VzXFB5V2luMzIuY2htOyBGbGFnczogdW5pbnNkZWxldGVrZXk7IENvbXBvbmVudHM6IGRvY3MKLQotW19JU1Rvb2xdCi1FbmFibGVJU1g9dHJ1ZQotCi0KLVtDb2RlXQotUHJvZ3JhbSBTZXR1cDsKLQotRnVuY3Rpb24gSXNBZG1pbk5vdExvZ2dlZE9uKCk6IEJvb2xlYW47Ci1iZWdpbgotICBSZXN1bHQgOj0gTm90IElzQWRtaW5Mb2dnZWRPbigpOwotZW5kOwotCi1iZWdpbgotZW5kLgotCi0KLQotCi1bVW5pbnN0YWxsRGVsZXRlXQotTmFtZToge2FwcH1cTGliXGNvbXBpbGVyXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGNvbXBpbGVyXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGNvbXBpbGVyOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzXGNvbW1hbmRcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzXGNvbW1hbmRcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzXGNvbW1hbmQ7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsczsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGVtYWlsXHRlc3RcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW1haWxcdGVzdFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbWFpbFx0ZXN0OyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcZW1haWxcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW1haWxcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW1haWw7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxlbmNvZGluZ3NcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW5jb2RpbmdzXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVuY29kaW5nczsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGhvdHNob3RcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcaG90c2hvdFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxob3RzaG90OyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcbGliLW9sZFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxsaWItb2xkXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGxpYi1vbGQ7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx0a2ludGVyXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHRraW50ZXJcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcdGtpbnRlcjsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHRlc3RcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcdGVzdFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx0ZXN0OyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJceG1sXGRvbVwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxcZG9tXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxkb207IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx4bWxccGFyc2Vyc1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxccGFyc2Vyc1wqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxccGFyc2VyczsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHhtbFxzYXhcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXHNheFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxcc2F4OyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJceG1sXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWw7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzI7IFR5cGU6IGZpbGVzYW5kb3JkaXJzCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbTsgVHlwZTogZmlsZXNhbmRvcmRpcnMKLU5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tZXh0OyBUeXBlOiBmaWxlc2FuZG9yZGlycwotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXNccHl0aG9uY29tLnB5KjsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XExpYlwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYjsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1xweW5jaGVcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xweW5jaGVcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xweW5jaGU7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHNcaWRsZVwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXGlkbGVcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xpZGxlOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXHNjcmlwdHNcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xzY3JpcHRzXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcc2NyaXB0czsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1x2ZXJzaW9uY2hlY2tcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1x2ZXJzaW9uY2hlY2tcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1x2ZXJzaW9uY2hlY2s7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHNcd2ViY2hlY2tlclwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHdlYmNoZWNrZXJcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1x3ZWJjaGVja2VyOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzOyBUeXBlOiBkaXJpZmVtcHR5Ci0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbi52Y3Byb2ogYi9QQy9WUzcuMS9weXRob24udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGI0NDAxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InB5dGhvbiINCi0JU2NjUHJvamVjdE5hbWU9InB5dGhvbiINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbi5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24ucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHB5dGhvbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbl9kLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbl9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxweXRob24iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAgL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsgL1ZTRVhUQ09NUF9WRVJCT1NFIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob24uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VccHl0aG9uIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9uLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHljb24uaWNvIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHB5dGhvbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fZXhlLnJjIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uMjAud3NlIGIvUEMvVlM3LjEvcHl0aG9uMjAud3NlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTdmNmFkMy4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob24yMC53c2UKKysrIC9kZXYvbnVsbApAQCAtMSwzMTE3ICswLDAgQEAKLURvY3VtZW50IFR5cGU6IFdTRQotaXRlbTogR2xvYmFsCi0gIFZlcnNpb249OS4wCi0gIFRpdGxlPVB5dGhvbiAyLjRhMQotICBGbGFncz0wMDAxMDEwMAotICBMYW5ndWFnZXM9NjUgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKLSAgSmFwYW5lc2UgRm9udCBOYW1lPU1TIEdvdGhpYwotICBKYXBhbmVzZSBGb250IFNpemU9MTAKLSAgU3RhcnQgR3JhZGllbnQ9MCAyNTUgMAotICBFbmQgR3JhZGllbnQ9MCAxMjggMAotICBXaW5kb3dzIEZsYWdzPTAwMDAwMTAwMDAwMDExMDEwMDEwMDEwMTAwMDAxMDEwCi0gIExvZyBQYXRobmFtZT0lTUFJTkRJUiVcSU5TVEFMTC5MT0cKLSAgTWVzc2FnZSBGb250PU1TIFNhbnMgU2VyaWYKLSAgRm9udCBTaXplPTgKLSAgUGFnZXMgTW9kaWZpZWQ9MDAwMTAwMDAwMTExMDEwMDAwMDAwMDAxMDAwMDAxMTEKLSAgRXh0cmEgUGFnZXM9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxMTAwMTAKLSAgRGlzayBGaWxlbmFtZT1TRVRVUAotICBQYXRjaCBGbGFncz0wMDAwMDAwMDAwMDAxMDAxCi0gIFBhdGNoIFRocmVzaG9sZD04NQotICBQYXRjaCBNZW1vcnk9NDAwMAotICBNSUYgUERGIFZlcnNpb249MS4wCi0gIE1JRiBTTVMgVmVyc2lvbj0yLjAKLSAgRVhFIEZpbGVuYW1lPVB5dGhvbi0yLjRhMS5leGUKLSAgRGlhbG9ncyBWZXJzaW9uPTgKLSAgVmVyc2lvbiBGaWxlPTIuNGExCi0gIFZlcnNpb24gRGVzY3JpcHRpb249UHl0aG9uIFByb2dyYW1taW5nIExhbmd1YWdlCi0gIFZlcnNpb24gQ29weXJpZ2h0PakyMDAxLTIwMDcgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KLSAgVmVyc2lvbiBDb21wYW55PVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gIENyeXN0YWwgRm9ybWF0PTEwMTExMTAwMTAxMTAwMDAwMDEwMDAxMDAxMDAxMDAxCi0gIFN0ZXAgVmlldz0mQWxsCi0gIFZhcmlhYmxlIE5hbWUxPV9XSVNFXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjE9V0lTRSByb290IGRpcmVjdG9yeQotICBWYXJpYWJsZSBEZWZhdWx0MT1DOlxQcm9ncmFtbWVcV2lzZSBJbnN0YWxsYXRpb24gU3lzdGVtCi0gIFZhcmlhYmxlIEZsYWdzMT0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lMj1fVENMRElSXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjI9VGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgVGNsL1RrIGluc3RhbGxhdGlvbgotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjI9bGl2ZXMuICBUaGlzIG11c3QgYmUgYSBzaWJsaW5nIG9mIHRoZSBQeXRob24KLSAgVmFyaWFibGUgRGVzY3JpcHRpb24yPWRpcmVjdG9yeS4KLSAgVmFyaWFibGUgRGVmYXVsdDI9dGNsODQKLSAgVmFyaWFibGUgRmxhZ3MyPTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWUzPV9ET0NfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMz1UaGUgdW5wYWNrZWQgSFRNTCBkb2MgZGlyZWN0b3J5LgotICBWYXJpYWJsZSBEZWZhdWx0Mz0uLlxodG1sCi0gIFZhcmlhYmxlIEZsYWdzMz0wMDAwMTAwMQotICBWYXJpYWJsZSBOYW1lND1fU1lTXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjQ9U3lzdGVtIGRpcmVjdG9yeSAod2hlcmUgdG8gZmluZCBNU1ZDUlQuRExMKQotICBWYXJpYWJsZSBEZWZhdWx0ND1DOlxXaW5kb3dzXFN5c3RlbQotICBWYXJpYWJsZSBWYWx1ZXM0PUM6XFdpbmRvd3NcU3lzdGVtCi0gIFZhcmlhYmxlIFZhbHVlczQ9QzpcV0lOTlRcU3lzdGVtMzIKLSAgVmFyaWFibGUgVmFsdWVzND1DOlxDb2RlXE1TRExMcwotICBWYXJpYWJsZSBWYWx1ZXM0PUM6XFdpbmRvd3NcU3lzdGVtMzIKLSAgVmFyaWFibGUgRmxhZ3M0PTAwMDAwMDEwCi0gIFZhcmlhYmxlIE5hbWU1PV9QWU1BSk9SXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjU9UHl0aG9uIG1ham9yIHZlcnNpb24gbnVtYmVyOyB0aGUgMiBpbiAyLjMuCi0gIFZhcmlhYmxlIERlZmF1bHQ1PTIKLSAgVmFyaWFibGUgRmxhZ3M1PTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWU2PV9QWU1JTk9SXwotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjY9UHl0aG9uIG1pbm9yIHZlcnNpb24gbnVtYmVyOyB0aGUgMyBpbiAyLjMKLSAgVmFyaWFibGUgRGVmYXVsdDY9MwotICBWYXJpYWJsZSBGbGFnczY9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTc9X0RPQURNSU5fCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNz1UaGUgaW5pdGlhbCB2YWx1ZSBmb3IgJURPQURNSU4lLgotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjc9V2hlbiAwLCB3ZSBuZXZlciB0cnkgdG8gd3JpdGUgdW5kZXIgSEtMTSwKLSAgVmFyaWFibGUgRGVzY3JpcHRpb243PWFuZCBpbnN0YWxsIHRoZSBQeXRob24gKyBNUyBydW50aW1lIERMTHMgaW4KLSAgVmFyaWFibGUgRGVzY3JpcHRpb243PXRoZSBQeXRob24gZGlyZWN0b3J5IGluc3RlYWQgb2YgdGhlIHN5c3RlbSBkaXIuCi0gIFZhcmlhYmxlIERlZmF1bHQ3PTEKLSAgVmFyaWFibGUgVmFsdWVzNz0xCi0gIFZhcmlhYmxlIFZhbHVlczc9MAotICBWYXJpYWJsZSBGbGFnczc9MDAwMDEwMTAKLSAgVmFyaWFibGUgTmFtZTg9X0FMSUFTTkFNRV8KLSAgVmFyaWFibGUgRmxhZ3M4PTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWU5PV9BTElBU1BBVEhfCi0gIFZhcmlhYmxlIEZsYWdzOT0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lMTA9X0FMSUFTVFlQRV8KLSAgVmFyaWFibGUgRmxhZ3MxMD0wMDAwMTAwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9UFlWRVJfU1RSSU5HCi0gIFZhbHVlPTIuMwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V2hlbiB0aGUgdmVyc2lvbiBudW1iZXIgY2hhbmdlcywgc2V0IHRoZSBjb21waWxlcgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD12cmJscyBfUFlNQUpPUl8gYW5kICBfUFlNSU5PUl8uCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGhpbmcgaW4gdGhlIHNjcmlwdCBiZWxvdyBzaG91bGQgbmVlZCBmaWRkbGluZyB0aGVuLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1PdGhlciB0aGluZ3MgdGhhdCBuZWVkIGZpZGRsaW5nOgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgUFlWRVJfU1RSSU5HIGFib3ZlLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgVGhlICJUaXRsZToiIGluIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgR1VJLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD0gICAgQnVpbGQgU2V0dGluZ3MgYW5kIFZlcnNpb24gUmVzb3VyY2Ugb24gc3RlcCA2IChGaW5pc2gpIG9mIHRoZSBJbnN0YWxsYXRpb24gRXhwZXJ0Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICAgICAgQmUgc3VyZSB0byBzZWxlY3QgU3RlcHMtPkFsbCBvciB5b3UgbWF5IG5vdCBzZWUgdGhlc2UhCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1XaGVuIHRoZSB2ZXJzaW9uIG9mIFRjbC9UayBjaGFuZ2VzLCB0aGUgY29tcGlsZXIgdnJibAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1fVENMRElSXyBtYXkgYWxzbyBuZWVkIHRvIGJlIGNoYW5nZWQuCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9QVBQVElUTEUKLSAgVmFsdWU9UHl0aG9uICVQWVZFUl9TVFJJTkclCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVBZX1ZFUlNJT04gc2hvdWxkIGJlIG1ham9yLm1pbm9yIG9ubHk7IHVzZWQgdG8gY3JlYXRlIHRoZSByZWdpc3RyeSBrZXk7IG11c3QgbWF0Y2ggTVNfRExMX0lEIGluIHB5dGhvbl9udC5yYwotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9UFlfVkVSU0lPTgotICBWYWx1ZT0lX1BZTUFKT1JfJS4lX1BZTUlOT1JfJQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1HUk9VUCBpcyB0aGUgU3RhcnQgbWVudSBncm91cCBuYW1lOyB1c2VyIGNhbiBvdmVycmlkZS4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUdST1VQCi0gIFZhbHVlPVB5dGhvbiAlUFlfVkVSU0lPTiUKLSAgRmxhZ3M9MTAwMDAwMDAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TUFJTkRJUiBpcyB0aGUgYXBwIGRpcmVjdG9yeTsgdXNlciBjYW4gb3ZlcnJpZGUuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1NQUlORElSCi0gIFZhbHVlPVB5dGhvbiVfUFlNQUpPUl8lJV9QWU1JTk9SXyUKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPSVfRE9BRE1JTl8lCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUdpdmUgbm9uLWFkbWluIHVzZXJzIGEgY2hhbmNlIHRvIGFib3J0LgotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTEwMDExMTExCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogRGlzcGxheSBNZXNzYWdlCi0gIFRpdGxlPURvaW5nIG5vbi1hZG1pbiBpbnN0YWxsCi0gIFRleHQ9VGhlIGN1cnJlbnQgbG9naW4gZG9lcyBub3QgaGF2ZSBBZG1pbmlzdHJhdG9yIFByaXZpbGVnZXMgb24gdGhpcyBtYWNoaW5lLiAgUHl0aG9uIHdpbGwgaW5zdGFsbCBpdHMgcmVnaXN0cnkgaW5mb3JtYXRpb24gaW50byB0aGUgcGVyLXVzZXIgYXJlYSBvbmx5IGZvciB0aGUgY3VycmVudCBsb2dpbiwgaW5zdGVhZCBvZiBpbnRvIHRoZSBwZXItbWFjaGluZSBhcmVhIGZvciBldmVyeSBhY2NvdW50IG9uIHRoaXMgbWFjaGluZS4gIFNvbWUgYWR2YW5jZWQgdXNlcyBvZiBQeXRob24gbWF5IG5vdCB3b3JrIGFzIGEgcmVzdWx0IChmb3IgZXhhbXBsZSwgcnVubmluZyBhIFB5dGhvbiBzY3JpcHQgYXMgYSBzZXJ2aWNlKS4KLSAgVGV4dD0KLSAgVGV4dD1JZiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50LCBwbGVhc2UgY2xpY2sgQ2FuY2VsIHRvIGFib3J0IHRoaXMgaW5zdGFsbGF0aW9uLCBsb2cgb24gYXMgYW4gQWRtaW5pc3RyYXRvciwgYW5kIHN0YXJ0IHRoZSBpbnN0YWxsYXRpb24gYWdhaW4uCi0gIEZsYWdzPTAwMDAxMDAwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QkVHSU4gV0laQVJEIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06IHRoZSAic3RvcCIgb24gdGhlIG5leHQgbGluZSBpcyBhY3R1YWxseSAicGF1c2UiLgotZW5kCi1pdGVtOiBPcGVuL0Nsb3NlIElOU1RBTEwuTE9HCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUlmIHRoZSBkZXN0aW5hdGlvbiBzeXN0ZW0gZG9lcyBub3QgaGF2ZSBhIHdyaXRhYmxlIFdpbmRvd3NcU3lzdGVtIGRpcmVjdG9yeSwgc3lzdGVtIGZpbGVzIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgV2luZG93c1wgZGlyZWN0b3J5Ci1lbmQKLWl0ZW06IENoZWNrIGlmIEZpbGUvRGlyIEV4aXN0cwotICBQYXRobmFtZT0lU1lTJQotICBGbGFncz0xMDAwMDEwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1lTCi0gIFZhbHVlPSVXSU4lCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTEwMTExMDExCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9Q09NTU9OCi0gIEtleT1TT0ZUV0FSRVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvbgotICBEZWZhdWx0PUM6XFByb2dyYW0gRmlsZXNcQ29tbW9uIEZpbGVzCi0gIFZhbHVlIE5hbWU9Q29tbW9uRmlsZXNEaXIKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1QUk9HUkFNX0ZJTEVTCi0gIEtleT1TT0ZUV0FSRVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvbgotICBEZWZhdWx0PUM6XFByb2dyYW0gRmlsZXMKLSAgVmFsdWUgTmFtZT1Qcm9ncmFtRmlsZXNEaXIKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUVYUExPUkVSCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06ICBUaGUgV2l6YXJkIGhhcmRjb2QgIkM6IiBhdCB0aGUgc3RhcnQgb2YgdGhlIHJlcGxhY2VtZW50IHRleHQgZm9yIE1BSU5ESVIuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoYXQncyBub3QgYXBwcm9wcmlhdGUgaWYgdGhlIHN5c3RlbSBkcml2ZSBkb2Vzbid0IGhhcHBlbiB0byBiZSBDOi4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SSByZW1vdmVkIHRoZSAiQzoiLCBhbmQgdGhhdCBkaWQgdGhlIHJpZ2h0IHRoaW5nIGZvciB0d28gcGVvcGxlIHdobyB0ZXN0ZWQgaXQgb24gbm9uLUM6IG1hY2hpbmVzLAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1idXQgaXQncyB1bmNsZWFyIHdoZXRoZXIgaXQgd2lsbCBhbHdheXMgZG8gdGhlIHJpZ2h0IHRoaW5nLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9TUFJTkRJUgotICBWYWx1ZT1cJU1BSU5ESVIlCi0gIEZsYWdzPTAwMDAxMTAwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJBQ0tVUCBpcyB0aGUgdmFyaWFibGUgdGhhdCBob2xkcyB0aGUgcGF0aCB0aGF0IGFsbCBiYWNrdXAgZmlsZXMgd2lsbCBiZSBjb3BpZWQgdG8gd2hlbiBvdmVyd3JpdHRlbgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9QkFDS1VQCi0gIFZhbHVlPSVNQUlORElSJVxCQUNLVVAKLSAgRmxhZ3M9MTAwMDAwMDAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RE9CQUNLVVAgZGV0ZXJtaW5lcyBpZiBhIGJhY2t1cCB3aWxsIGJlIHBlcmZvcm1lZC4gIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlIEEgKGRvIGJhY2t1cCkgb3IgQiAoZG8gbm90IGRvIGJhY2t1cCkKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQkFDS1VQCi0gIFZhbHVlPUEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QlJBTkRJTkcgZGV0ZXJtaW5lcyBpZiB0aGUgaW5zdGFsbGF0aW9uIHdpbGwgYmUgYnJhbmRlZCB3aXRoIGEgbmFtZSBhbmQgY29tcGFueS4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgd3JpdHRlbiB0byB0aGUgSU5TVCBkaXJlY3RvcnkgKGluc3RhbGxhdGlvbiBtZWRpYSkuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1CUkFORElORwotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1CUkFORElORwotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IFJlYWQgSU5JIFZhbHVlCi0gIFZhcmlhYmxlPU5BTUUKLSAgUGF0aG5hbWU9JUlOU1QlXENVU1REQVRBLklOSQotICBTZWN0aW9uPVJlZ2lzdHJhdGlvbgotICBJdGVtPU5hbWUKLWVuZAotaXRlbTogUmVhZCBJTkkgVmFsdWUKLSAgVmFyaWFibGU9Q09NUEFOWQotICBQYXRobmFtZT0lSU5TVCVcQ1VTVERBVEEuSU5JCi0gIFNlY3Rpb249UmVnaXN0cmF0aW9uCi0gIEl0ZW09Q29tcGFueQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TkFNRQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RE9CUkFORAotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEdldCBTeXN0ZW0gSW5mb3JtYXRpb24KLSAgVmFyaWFibGU9TkFNRQotICBGbGFncz0wMDAwMDExMAotZW5kCi1pdGVtOiBHZXQgU3lzdGVtIEluZm9ybWF0aW9uCi0gIFZhcmlhYmxlPUNPTVBBTlkKLSAgRmxhZ3M9MDAwMDAxMTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FTkQgV0laQVJEIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1TZXQgdnJibHMgZm9yIHRoZSAiQWR2YW5jZWQgT3B0aW9ucyIgc3ViZGlhbG9nIG9mIENvbXBvbmVudHMuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgVmFsdWU9QgotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRBU0tTIHZhbHVlczoKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QTogUmVnaXN0ZXIgZmlsZSBleHRlbnNpb25zCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUI6IENyZWF0ZSBTdGFydCBNZW51IHNob3J0Y3V0cwotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QUIKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUNPTVBPTkVOVFMgdmFsdWVzOgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1BOiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUI6IFRjbC9UawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DOiBkb2NzCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUQ6IHRvb2xzCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUU6IHRlc3Qgc3VpdGUKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QUJDREUKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU1hcmNoIHRocnUgdGhlIHVzZXIgR1VJLgotZW5kCi1pdGVtOiBXaXphcmQgQmxvY2sKLSAgRGlyZWN0aW9uIFZhcmlhYmxlPURJUkVDVElPTgotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgQml0bWFwIFBhdGhuYW1lPS5caW5zdGFsbGVyLmJtcAotICBYIFBvc2l0aW9uPTkKLSAgWSBQb3NpdGlvbj0xMAotICBGaWxsZXIgQ29sb3I9MTExNzM3NTkKLSAgRGlhbG9nPVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgRGlhbG9nPUJhY2t1cCBSZXBsYWNlZCBGaWxlcwotICBEaWFsb2c9U2VsZWN0IENvbXBvbmVudHMKLSAgRGlhbG9nPVNlbGVjdCBQcm9ncmFtIE1hbmFnZXIgR3JvdXAKLSAgVmFyaWFibGU9Ci0gIFZhcmlhYmxlPQotICBWYXJpYWJsZT0KLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9Ci0gIFZhbHVlPQotICBWYWx1ZT0KLSAgVmFsdWU9QgotICBDb21wYXJlPTAKLSAgQ29tcGFyZT0wCi0gIENvbXBhcmU9MAotICBDb21wYXJlPTMKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURJU1BMQVkKLSAgVmFsdWU9U3RhcnQgSW5zdGFsbGF0aW9uCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPUluc3RhbGwgZGlyZWN0b3J5OiAgJU1BSU5ESVIlJUNSTEYlCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9U0VMRUNUX0FETUlOCi0gIFZhbHVlPUEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlRG9pbmcgYWRtaW4gaW5zdGFsbC4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlRG9pbmcgbm9uLWFkbWluIGluc3RhbGwuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQkFDS1VQCi0gIFZhbHVlPUEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlTWFrZSBiYWNrdXBzLCBpbnRvICVCQUNLVVAlJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJURvbid0IG1ha2UgYmFja3Vwcy4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVDb21wb25lbnRzOiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSAgICBQeXRob24gaW50ZXJwcmV0ZXIgYW5kIGxpYnJhcmllcyVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgVGNsL1RrIChUa2ludGVyLCBJRExFLCBweWRvYyklQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFB5dGhvbiBkb2N1bWVudGF0aW9uJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1ECi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSAgICBUb29sIGFuZCB1dGlsaXR5IHNjcmlwdHMlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFB5dGhvbiB0ZXN0IHN1aXRlJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlUmVnaXN0ZXIgZmlsZSBleHRlbnNpb25zLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVEb24ndCByZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVRBU0tTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlU3RhcnQgTWVudSBncm91cDogICVHUk9VUCUlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlTm8gU3RhcnQgTWVudSBzaG9ydGN1dHMuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9SW5zdGFsbGF0aW9uIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBHZXJtYW49SW5zdGFsbGF0aW9uIHZvbiAlQVBQVElUTEUlCi0gICAgVGl0bGUgU3BhbmlzaD1JbnN0YWxhY2nzbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgSXRhbGlhbj1JbnN0YWxsYXppb25lIGRpICVBUFBUSVRMRSUKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mTmV4dCA+Ci0gICAgICBUZXh0IEZyZW5jaD0mU3VpdGUgPgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlciA+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNjQgMjM0IDMyMCAyNTMKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JkNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9JkFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPSZBYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD0mQ2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mQW5udWxsYQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDExIDMyMyAzMwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gICAgICBUZXh0IEZyZW5jaD1T6WxlY3Rpb25uZXIgbGUgculwZXJ0b2lyZSBkZSBkZXN0aW5hdGlvbgotICAgICAgVGV4dCBHZXJtYW49WmllbHZlcnplaWNobmlzIHfkaGxlbgotICAgICAgVGV4dCBTcGFuaXNoPVNlbGVjY2lvbmUgZWwgZGlyZWN0b3JpbyBkZSBkZXN0aW5vCi0gICAgICBUZXh0IEl0YWxpYW49U2VsZXppb25hcmUgRGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZQotICAgIGVuZAotICAgIGl0ZW06IExpc3Rib3gKLSAgICAgIFJlY3RhbmdsZT0xMDggNTggMzIxIDIxOQotICAgICAgVmFyaWFibGU9TUFJTkRJUgotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMTAwMDAwMDEwMDAwMDAwMTAxMDAwMDAxCi0gICAgICBGbGFncz0wMDAwMTEwMDAwMDAxMDEwCi0gICAgICBUZXh0PSVNQUlORElSJQotICAgICAgVGV4dD0KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDAgMzEzIDU4Ci0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9UGxlYXNlIHNlbGVjdCBhIGRpcmVjdG9yeSBmb3IgdGhlICVBUFBUSVRMRSUgZmlsZXMuCi0gICAgZW5kCi0gIGVuZAotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gICAgVGl0bGUgRnJlbmNoPVPpbGVjdGlvbm5lciBsZSBy6XBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uCi0gICAgVGl0bGUgR2VybWFuPVppZWx2ZXJ6ZWljaG5pcyB35GhsZW4KLSAgICBUaXRsZSBTcGFuaXNoPVNlbGVjY2lvbmUgZWwgZGlyZWN0b3JpbyBkZSBkZXN0aW5vCi0gICAgVGl0bGUgSXRhbGlhbj1TZWxlemlvbmFyZSBEaXJlY3RvcnkgZGkgZGVzdGluYXppb25lCi0gICAgV2lkdGg9Mjc2Ci0gICAgSGVpZ2h0PTIxNgotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBMaXN0Ym94Ci0gICAgICBSZWN0YW5nbGU9NiA2IDIwNCAxODYKLSAgICAgIFZhcmlhYmxlPU1BSU5ESVIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDEwMDAwMDAxMDAwMDAwMDEwMTAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDExMDAwMDEwMDAxMAotICAgICAgVGV4dD0lTUFJTkRJUiUKLSAgICAgIFRleHQgRnJlbmNoPSVNQUlORElSJQotICAgICAgVGV4dCBHZXJtYW49JU1BSU5ESVIlCi0gICAgICBUZXh0IFNwYW5pc2g9JU1BSU5ESVIlCi0gICAgICBUZXh0IEl0YWxpYW49JU1BSU5ESVIlCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yMDkgOCAyNjUgMjYKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD1PSwotICAgICAgVGV4dCBGcmVuY2g9T0sKLSAgICAgIFRleHQgR2VybWFuPU9LCi0gICAgICBUZXh0IFNwYW5pc2g9QWNlcHRhcgotICAgICAgVGV4dCBJdGFsaWFuPU9LCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yMDkgMzEgMjY1IDUwCi0gICAgICBWYXJpYWJsZT1NQUlORElSCi0gICAgICBWYWx1ZT0lTUFJTkRJUl9TQVZFJQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PUNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9QW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49QWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9Q2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj1Bbm51bGxhCi0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPUJhY2t1cCBSZXBsYWNlZCBGaWxlcwotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9RmljaGllcnMgZGUgU2F1dmVnYXJkZSBSZW1wbGFj6XMKLSAgICBUaXRsZSBHZXJtYW49U2ljaGVydW5nc2tvcGllIHZvbiBlcnNldHp0ZW4gRGF0ZWllbiBlcnN0ZWxsZW4KLSAgICBUaXRsZSBQb3J0dWd1ZXNlPUZpY2hlaXJvcyBzdWJzdGl0de1kb3MgZGUgc2VndXJhbudhCi0gICAgVGl0bGUgU3BhbmlzaD1Db3BpYXMgZGUgc2VndXJpZGFkIGRlIGxvcyBhcmNoaXZvcyByZWVtcGxhemFkb3MKLSAgICBUaXRsZSBJdGFsaWFuPUJhY2t1cCBmaWxlIHNvc3RpdHVpdGkKLSAgICBUaXRsZSBEYW5pc2g9U2lra2VyaGVkc2tvcGllcmluZyBhZiBlcnN0YXR0ZWRlIGZpbGVyCi0gICAgVGl0bGUgRHV0Y2g9VmVydmFuZ2VuIGJlc3RhbmRlbiBrb3Bp63JlbgotICAgIFRpdGxlIE5vcndlZ2lhbj1TaWtrZXJoZXRza29waWVyZSBlcnN0YXR0ZWRlIGZpbGVyCi0gICAgVGl0bGUgU3dlZGlzaD1T5GtlcmhldHNrb3BpZXJhIHV0Ynl0dGEgZmlsZXIKLSAgICBXaWR0aD0zNTAKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUxCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mTmV4dCA+Ci0gICAgICBUZXh0IEZyZW5jaD0mU3VpdmFudD4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXI+Ci0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9JlBy83hpbW8+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgICBUZXh0IERhbmlzaD0mTuZzdGU+Ci0gICAgICBUZXh0IER1dGNoPSZWb2xnZW5kZT4KLSAgICAgIFRleHQgTm9yd2VnaWFuPSZOZXN0ZT4KLSAgICAgIFRleHQgU3dlZGlzaD0mTuRzdGEgPgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTMxIDIzNCAxODggMjUxCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPUIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD08ICZCYWNrCi0gICAgICBUZXh0IEZyZW5jaD08JlJldG91cgotICAgICAgVGV4dCBHZXJtYW49PCZadXL8Y2sKLSAgICAgIFRleHQgUG9ydHVndWVzZT08JlJldG9ybmFyCi0gICAgICBUZXh0IFNwYW5pc2g9PCZSZXRyb2NlZGVyCi0gICAgICBUZXh0IEl0YWxpYW49PCAmSW5kaWV0cm8KLSAgICAgIFRleHQgRGFuaXNoPTwmVGlsYmFnZQotICAgICAgVGV4dCBEdXRjaD08JlRlcnVnCi0gICAgICBUZXh0IE5vcndlZ2lhbj08JlRpbGJha2UKLSAgICAgIFRleHQgU3dlZGlzaD08ICZUaWxsYmFrYQotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9Mjc4IDIzNCAzMzAgMjUxCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9QW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49QWJicmVjaGVuCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9Q2FuY2VsYXIKLSAgICAgIFRleHQgU3BhbmlzaD1DYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPUFubnVsbGEKLSAgICAgIFRleHQgRGFuaXNoPUFubnVsbGVyCi0gICAgICBUZXh0IER1dGNoPUFubnVsZXJlbgotICAgICAgVGV4dCBOb3J3ZWdpYW49QXZicnl0Ci0gICAgICBUZXh0IFN3ZWRpc2g9QXZicnl0Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTEgMjIxIDMyOSAyMjMKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDYgMzIwIDk4Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9VGhpcyBpbnN0YWxsYXRpb24gcHJvZ3JhbSBjYW4gY3JlYXRlIGJhY2t1cCBjb3BpZXMgb2YgYWxsIGZpbGVzIHJlcGxhY2VkIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uLiBUaGVzZSBmaWxlcyB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgc29mdHdhcmUgaXMgdW5pbnN0YWxsZWQgYW5kIGEgcm9sbGJhY2sgaXMgcmVxdWVzdGVkLiAgSWYgYmFja3VwIGNvcGllcyBhcmUgbm90IGNyZWF0ZWQsIHlvdSB3aWxsIG9ubHkgYmUgYWJsZSB0byB1bmluc3RhbGwgdGhlIHNvZnR3YXJlIGFuZCBub3Qgcm9sbCB0aGUgc3lzdGVtIGJhY2sgdG8gYSBwcmV2aW91cyBzdGF0ZS4KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PURvIHlvdSB3YW50IHRvIGNyZWF0ZSBiYWNrdXBzIG9mIHJlcGxhY2VkIGZpbGVzPwotICAgICAgVGV4dCBGcmVuY2g9TGUgcHJvZ3JhbW1lIGQnaW5zdGFsbGF0aW9uIHBldXQgY3LpZXIgZGVzIGNvcGllcyBkZSBzYXV2ZWdhcmRlIGRlIHRvdXMgbGVzIGZpY2hpZXJzIHJlbXBsYWPpcyBwZW5kYW50IGwnaW5zdGFsbGF0aW9uLiBDZXMgZmljaGllcnMgc29udCB1dGlsaXPpcyBhdSBjYXMgb/kgbGUgbG9naWNpZWwgZXN0IGTpc2luc3RhbGzpIGV0IHF1ZSBsJ29uIHByb2PoZGUg4CBsYSByZXByaXNlIGR1IHN5c3TobWUuIFNpIGxlcyBjb3BpZXMgZGUgc2F1dmVnYXJkZSBuZSBzb250IHBhcyBjcunpZXMsIG9uIG5lIHBvdXJyYSBxdWUgZOlzaW5zdGFsbGVyIGxlIGxvZ2ljaWVsIHNhbnMgcmVwcmVuZHJlIGxlIHN5c3TobWUg4CB1biDpdGF0IHBy6WPpZGVudC4gVm91bGV6LXZvdXMgY3LpZXIgdW5lIHNhdXZlZ2FyZGUgZGVzIGZpY2hpZXJzIHJlbXBsYWPpcyA/Ci0gICAgICBUZXh0IEdlcm1hbj1EaWVzZXMgSW5zdGFsbGF0aW9uc3Byb2dyYW1tIGthbm4gU2ljaGVydW5nc2tvcGllbiB2b24gYWxsZW4gd+RocmVuZCBkZXIgSW5zdGFsbGF0aW9uIGVyc2V0enRlbiBEYXRlaWVuIGVyc3RlbGxlbi4gRGllc2UgRGF0ZWllbiB3ZXJkZW4genVyIFL8Y2tn5G5naWdtYWNodW5nIGRlciBJbnN0YWxsYXRpb24gdW5kIGJlaSBBbmZvcmRlcnVuZyBlaW5lcyBSb2xsYmFja3MgdmVyd2VuZGV0LiBPaG5lIFNpY2hlcnVuZ3Nrb3BpZW4gaXN0IG51ciBlaW5lIFL8Y2tn5G5naWdtYWNodW5nIGRlciBJbnN0YWxsYXRpb24gbfZnbGljaCwgbmljaHQgYWJlciBlaW4gUm9sbGJhY2sgZGVzIFN5c3RlbXMuIFNpY2hlcnVuZ3Nrb3BpZW4gZGVyIGVyc2V0enRlbiBEYXRlaWVuIGVyc3RlbGxlbj8KLSAgICAgIFRleHQgUG9ydHVndWVzZT1Fc3RlIHByb2dyYW1hIGRlIGluc3RhbGHn428gcG9kZSBjcmlhciBj83BpYXMgZGUgc2VndXJhbudhIGRlIHRvZG9zIG9zIGZpY2hlaXJvcyBzdWJzdGl0de1kb3MgZHVyYW50ZSBhIGluc3RhbGHn428uIEVzdGVzIGZpY2hlaXJvcyBzZXLjbyB1dGlsaXphZG9zIHF1YW5kbyBvIHByb2dyYW1hIGZvciBkZXNpbnN0YWxhZG8gIGUgZm9yIHJlcXVpc2l0YWRhIHVtYSByZXRvbWFkYS4gU2UgYXMgY/NwaWFzIGRlIHNlZ3VyYW7nYSBu428gZm9yZW0gY3JpYWRhcywgc/MgcG9kZXLhIGRlc2luc3RhbGFyIG8gcHJvZ3JhbWEgZSBu428gcG9kZSByZXRvbWFyICB1bSBlc3RhZG8gYW50ZXJpb3IgZG8gc2lzdGVtYS4gRGVzZWphIGNyaWFyIGPzcGlhcyBkZSBzZWd1cmFu52EgZG9zIGZpY2hlaXJvcyBzdWJzdGl0de1kb3M/Ci0gICAgICBUZXh0IFNwYW5pc2g9RXN0ZSBwcm9ncmFtYSBkZSBpbnN0YWxhY2nzbiBwdWVkZSBjcmVhciBjb3BpYXMgZGUgc2VndXJpZGFkIGRlIHRvZG9zIGxvcyBhcmNoaXZvcyByZWVtcGxhemFkb3MgZHVyYW50ZSBsYSBpbnN0YWxhY2nzbi4gRXN0b3MgYXJjaGl2b3Mgc2UgdXRpbGl6YXLhbiBjdWFuZG8gc2UgZGVzaW5zdGFsZSBlbCBzb2Z0d2FyZSB5IHNlIHNvbGljaXRlIHZvbHZlciBhbCBlc3RhZG8gYW50ZXJpb3IuIFNpIG5vIHNlIGNyZWFuIGNvcGlhcyBkZSBzZWd1cmlkYWQsIPpuaWNhbWVudGUgcG9kcuEgZGVzaW5zdGFsYXIgZWwgc29mdHdhcmUgeSBubyBwb2Ry4SBkZXZvbHZlciBlbCBzaXN0ZW1hIGFsIGVzdGFkbyBhbnRlcmlvci4gv0Rlc2VhIGNyZWFyIGFyY2hpdm9zIGRlIHNlZ3VyaWRhZCBkZSBsb3MgYXJjaGl2b3MgcmVlbXBsYXphZG9zPwotICAgICAgVGV4dCBJdGFsaWFuPVF1ZXN0byBwcm9ncmFtbWEgZGkgaW5zdGFsbGF6aW9uZSBwdfIgY3JlYXJlIGNvcGllIGRpIGJhY2t1cCBkaSB0dXR0aSBpIGZpbGUgc29zdGl0dWl0aSBkdXJhbnRlIGySaW5zdGFsbGF6aW9uZS4gUXVlc3RpIGZpbGUgc2FyYW5ubyB1c2F0aSBxdWFuZG8gaWwgc29mdHdhcmUgc2Fy4CBkaXNpbnN0YWxsYXRvIGUgc2Fy4CByaWNoaWVzdG8gdW4gcml0b3JubyBhbGxvIHN0YXRvIHByZWNlZGVudGUuIFNlIG5vbiBjcmVpIGxlIGNvcGllIGRpIGJhY2t1cCwgcG90cmFpIHNvbG8gZGlzaW5zdGFsbGFyZSBpbCBzb2Z0d2FyZSwgbWEgbm9uIHBvdHJhaSByaXBvcnRhcmUgaWwgc2lzdGVtYSBhbGxvIHN0YXRvIHByZWNlZGVudGUuIFZ1b2kgY3JlYXJlIGkgZmlsZSBkaSBiYWNrdXAgZGVpIGZpbGUgc29zdGl0dWl0aT8KLSAgICAgIFRleHQgRGFuaXNoPURldHRlIGluc3RhbGxhdGlvbnNwcm9ncmFtIGthbiBvcHJldHRlIHNpa2tlcmhlZHNrb3BpZXIgYWYgYWxsZSBmaWxlciwgc29tIGVyc3RhdHRlcyB1bmRlciBpbnN0YWxsYXRpb25lbi4gRGlzc2UgZmlsZXIgYmVueXR0ZXMsIG7lciBzb2Z0d2FyZW4gZmplcm5lcywgb2cgZGVuIHRpZGxpZ2VyZSBzeXN0ZW1rb25maWd1cmF0aW9uIGdlbmV0YWJsZXJlcy4gSHZpcyBkZXIgaWtrZSBvcHJldHRlcyBzaWtrZXJoZWRza29waWVyLCBrYW4gZHUga3VuIGZqZXJuZSBkZW4gaW5zdGFsbGVyZWRlIHNvZnR3YXJlIG9nIGlra2UgZ2VuZXRhYmxlcmUgZGVuIHRpZGxpZ2VyZSBzeXN0ZW1rb25maWd1cmF0aW9uLiBWaWwgZHUgb3ByZXR0ZSBzaWtrZXJoZWRza29waWVyIGFmIGZpbGVyLCBzb20gZXJzdGF0dGVzPwotICAgICAgVGV4dCBEdXRjaD1EaXQgaW5zdGFsbGF0aWVwcm9ncmFtbWEga2FuIGtvcGll624gbWFrZW4gdmFuIGFsbGUgYmVzdGFuZGVuIGRpZSB0aWpkZW5zIGRlIGluc3RhbGxhdGllIHdvcmRlbiB2ZXJ2YW5nZW4uIERlemUgd29yZGVuIGRhbiBnZWJydWlrdCBhbHMgZGUgc29mdHdhcmUtaW5zdGFsbGF0aWUgb25nZWRhYW4gd29yZHQgZ2VtYWFrdCBlbiB1IGhldCBzeXN0ZWVtIHdpbHQgbGF0ZW4gdGVydWdrZXJlbiBuYWFyIGRlIG9vcnNwcm9ua2VsaWprZSBzdGFhdC4gQWxzIGVyIGdlZW4gYmFjay11cCBrb3BpZetuIHdvcmRlbiBnZW1hYWt0LCBrdW50IHUgZGUgc29mdHdhcmUgZW5rZWwgdmVyd2lqZGVyZW4gbWFhciBoZXQgc3lzdGVlbSBuaWV0IGluIGRlIG9vcnNwcm9ua2VsaWprZSBzdGFhdCB0ZXJ1Z2JyZW5nZW4uIFdpbHQgdSBlZW4gYmFjay11cCBtYWtlbiB2YW4gZGUgdmVydmFuZ2VuIGJlc3RhbmRlbj8KLSAgICAgIFRleHQgTm9yd2VnaWFuPURldHRlIGluc3RhbGxhc2pvbnNwcm9ncmFtbWV0IGthbiBsYWdlIHNpa2tlcmhldHNrb3BpZXIgYXYgYWxsZSBmaWxlciBzb20gYmxpciBlcnN0YXR0ZXQgdW5kZXIgaW5zdGFsbGFzam9uZW4uIERpc3NlIGZpbGVuZSB2aWwgdGFzIGkgYnJ1ayBu5XIgcHJvZ3JhbXZhcmVuIGVyIGF2aW5zdGFsbGVydCBvZyBkZXQgZXIgYmVob3YgZm9yIHRpbGJha2VzdGlsbGluZy4gSHZpcyBkZXQgaWtrZSBlciBsYWdldCBzaWtrZXJoZXRza29waWVyLCBrYW4gZHUga3VuIGF2aW5zdGFsbGVyZSBwcm9ncmFtdmFyZW4gb2cgaWtrZSBzdGlsbGUgc3lzdGVtZXQgdGlsYmFrZSB0aWwgdGlkbGlnZXJlIHN0YXR1cy4g2G5za2VyIGR1IOUgbGFnZSBzaWtrZXJoZXRza29waWVyIGF2IGRlIGZpbGVuZSBzb20gYmxpciBlcnN0YXR0ZXQgbuU/Ci0gICAgICBUZXh0IFN3ZWRpc2g9SW5zdGFsbGF0aW9uc3Byb2dyYW1tZXQga2FuIHNrYXBhIHPka2VyaGV0c2tvcGlvciBhdiBhbGxhIGZpbGVyIHNvbSBieXRzIHV0IHVuZGVyIGluc3RhbGxhdGlvbmVuLiBEZXNzYSBmaWxlciBrYW4gc2VkYW4gYW525G5kYXMgbuRyIHByb2dyYW12YXJhbiBhdmluc3RhbGxlcmFzIG9jaCBkdSBiZWfkciByb2xsYmFjay4gT20gZHUgZOUgaW50ZSBoYXIgbuVncmEgc+RrZXJoZXRza29waW9yIGthbiBkdSBiYXJhIGF2aW5zdGFsbGVyYSBwcm9ncmFtdmFyYW4sIGludGUg5XRlcnNrYXBhIHN5c3RlbWV0IGkgZGVzcyB0aWRpZ2FyZSBza2ljay4gVmlsbCBkdSBn9nJhIHPka2VyaGV0c2tvcGlvciBhdiBkZSBlcnNhdHRhIGZpbGVybmE/Ci0gICAgZW5kCi0gICAgaXRlbTogUmFkaW8gQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTQxIDEwNiAyNjUgMTM2Ci0gICAgICBWYXJpYWJsZT1ET0JBQ0tVUAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAxMDAxCi0gICAgICBUZXh0PSZZZXMsIG1ha2UgYmFja3VwcwotICAgICAgVGV4dD1OJm8sIGRvIG5vdCBtYWtlIGJhY2t1cHMKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0IEZyZW5jaD0mT3VpCi0gICAgICBUZXh0IEZyZW5jaD1OJm9uCi0gICAgICBUZXh0IEZyZW5jaD0KLSAgICAgIFRleHQgR2VybWFuPSZKYQotICAgICAgVGV4dCBHZXJtYW49TiZlaW4KLSAgICAgIFRleHQgR2VybWFuPQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPSZTaW0KLSAgICAgIFRleHQgUG9ydHVndWVzZT1O4yZvCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9Ci0gICAgICBUZXh0IFNwYW5pc2g9JlPtCi0gICAgICBUZXh0IFNwYW5pc2g9TiZvCi0gICAgICBUZXh0IFNwYW5pc2g9Ci0gICAgICBUZXh0IEl0YWxpYW49JlPsCi0gICAgICBUZXh0IEl0YWxpYW49TiZvCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgICBUZXh0IERhbmlzaD0mSmEKLSAgICAgIFRleHQgRGFuaXNoPSZOZWoKLSAgICAgIFRleHQgRGFuaXNoPQotICAgICAgVGV4dCBEdXRjaD0mSmEKLSAgICAgIFRleHQgRHV0Y2g9TiZlZQotICAgICAgVGV4dCBEdXRjaD0KLSAgICAgIFRleHQgTm9yd2VnaWFuPSZKYQotICAgICAgVGV4dCBOb3J3ZWdpYW49Jk5laQotICAgICAgVGV4dCBOb3J3ZWdpYW49Ci0gICAgICBUZXh0IFN3ZWRpc2g9JkphCi0gICAgICBUZXh0IFN3ZWRpc2g9TiZlagotICAgICAgVGV4dCBTd2VkaXNoPQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgQ29udHJvbCBOYW1lPUJBQ0syCi0gICAgICBSZWN0YW5nbGU9MTA4IDE3MyAzMjAgMjA4Ci0gICAgICBBY3Rpb249MQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgICBUZXh0PUJhY2t1cCBGaWxlIERlc3RpbmF0aW9uIERpcmVjdG9yeQotICAgICAgVGV4dCBGcmVuY2g9UulwZXJ0b2lyZSBkZSBkZXN0aW5hdGlvbiBkZXMgZmljaGllcnMgZGUgc2F1dmVnYXJkZQotICAgICAgVGV4dCBHZXJtYW49WmllbHZlcnplaWNobmlzIGb8ciBkaWUgU2ljaGVydW5nc2RhdGVpCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9RGlyZWN083JpbyBkZSBkZXN0aW5vIGRlIGZpY2hlaXJvIGRlIHNlZ3VyYW7nYQotICAgICAgVGV4dCBTcGFuaXNoPURpcmVjdG9yaW8gZGUgRGVzdGlubyBkZSBsb3MgQXJjaGl2b3MgZGUgU2VndXJpZGFkCi0gICAgICBUZXh0IEl0YWxpYW49RGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZSBkZWkgZmlsZSBkaSBiYWNrdXAKLSAgICAgIFRleHQgRGFuaXNoPURlc3RpbmF0aW9uc2JpYmxpb3RlayB0aWwgc2lra2VyaGVkc2tvcGllcgotICAgICAgVGV4dCBEdXRjaD1Eb2VsZGlyZWN0b3J5IGJhY2t1cC1iZXN0YW5kCi0gICAgICBUZXh0IE5vcndlZ2lhbj1N5WxrYXRhbG9nIGZvciBzaWtrZXJoZXRza29waWVyCi0gICAgICBUZXh0IFN3ZWRpc2g9S2F0YWxvZyBm9nIgc+RrZXJoZXRza29waWVyYWRlIGZpbGVyCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLMwotICAgICAgUmVjdGFuZ2xlPTI2NSAxODUgMzE4IDIwMwotICAgICAgVmFyaWFibGU9QkFDS1VQX1NBVkUKLSAgICAgIFZhbHVlPSVCQUNLVVAlCi0gICAgICBEZXN0aW5hdGlvbiBEaWFsb2c9MQotICAgICAgQWN0aW9uPTIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1CJnJvd3NlLi4uCi0gICAgICBUZXh0IEZyZW5jaD1QJmFyY291cmlyCi0gICAgICBUZXh0IEdlcm1hbj1CJmzkdHRlcm4uLi4KLSAgICAgIFRleHQgUG9ydHVndWVzZT1QJnJvY3VyYXIKLSAgICAgIFRleHQgU3BhbmlzaD1WJmlzdWFsaXphci4uLgotICAgICAgVGV4dCBJdGFsaWFuPVNmb2dsaWEuLi4KLSAgICAgIFRleHQgRGFuaXNoPSZHZW5uZW1zZS4uLgotICAgICAgVGV4dCBEdXRjaD1CJmxhZGVyZW4uLi4KLSAgICAgIFRleHQgTm9yd2VnaWFuPUJsYSBpZ2plbm5vbQotICAgICAgVGV4dCBTd2VkaXNoPSZCbORkZHJhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzQKLSAgICAgIFJlY3RhbmdsZT0xMjkgMTg4IDI1NCAyMDAKLSAgICAgIERlc3RpbmF0aW9uIERpYWxvZz0yCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JUJBQ0tVUCUKLSAgICAgIFRleHQgRnJlbmNoPSVCQUNLVVAlCi0gICAgICBUZXh0IEdlcm1hbj0lQkFDS1VQJQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPSVCQUNLVVAlCi0gICAgICBUZXh0IFNwYW5pc2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgSXRhbGlhbj0lQkFDS1VQJQotICAgICAgVGV4dCBEYW5pc2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgRHV0Y2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgTm9yd2VnaWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IFN3ZWRpc2g9JUJBQ0tVUCUKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTEgMzIzIDM2Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PUJhY2t1cCBSZXBsYWNlZCBGaWxlcwotICAgICAgVGV4dCBGcmVuY2g9U+lsZWN0aW9ubmVyIGxlcyBjb21wb3NhbnRzCi0gICAgICBUZXh0IEdlcm1hbj1Lb21wb25lbnRlbiBhdXN35GhsZW4KLSAgICAgIFRleHQgU3BhbmlzaD1TZWxlY2Npb25lIGNvbXBvbmVudGVzCi0gICAgICBUZXh0IEl0YWxpYW49U2VsZXppb25hcmUgaSBjb21wb25lbnRpCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1ET0JBQ0tVUAotICAgICAgVmFsdWU9QgotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUJBQ0szCi0gICAgICBPcGVyYXRpb249MQotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUJBQ0s0Ci0gICAgICBPcGVyYXRpb249MQotICAgIGVuZAotICAgIGl0ZW06IEVsc2UgU3RhdGVtZW50Ci0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzMKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLNAotICAgIGVuZAotICAgIGl0ZW06IEVuZCBCbG9jawotICAgIGVuZAotICBlbmQKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotICAgIFRpdGxlIEZyZW5jaD1DaG9pc2lzc2V6IGxlIHLpcGVydG9pcmUgZGUgZGVzdGluYXRpb24KLSAgICBUaXRsZSBHZXJtYW49WmllbHZlcnplaWNobmlzIHfkaGxlbgotICAgIFRpdGxlIFBvcnR1Z3Vlc2U9U2VsZWNjaW9uYXIgRGlyZWN083JpbyBkZSBEZXN0aW5vCi0gICAgVGl0bGUgU3BhbmlzaD1TZWxlY2Npb25lIGVsIERpcmVjdG9yaW8gZGUgRGVzdGlubwotICAgIFRpdGxlIEl0YWxpYW49U2VsZXppb25hIERpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmUKLSAgICBUaXRsZSBEYW5pc2g9VuZsZyBEZXN0aW5hdGlvbnNiaWJsaW90ZWsKLSAgICBUaXRsZSBEdXRjaD1LaWVzIERvZWxkaXJlY3RvcnkKLSAgICBUaXRsZSBOb3J3ZWdpYW49VmVsZyBt5WxrYXRhbG9nCi0gICAgVGl0bGUgU3dlZGlzaD1W5GxqIGRlc3RpbmF0aW9uc2thbGF0b2cKLSAgICBXaWR0aD0yNzYKLSAgICBIZWlnaHQ9MjE2Ci0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IExpc3Rib3gKLSAgICAgIFJlY3RhbmdsZT02IDMgMjAwIDE4NgotICAgICAgVmFyaWFibGU9QkFDS1VQCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAxMDAwMDAwMTAwMDAwMDAxMDEwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAxMTAwMDAxMDAwMTAKLSAgICAgIFRleHQ9JUJBQ0tVUCUKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0IEZyZW5jaD0lQkFDS1VQJQotICAgICAgVGV4dCBGcmVuY2g9Ci0gICAgICBUZXh0IEdlcm1hbj0lQkFDS1VQJQotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9JUJBQ0tVUCUKLSAgICAgIFRleHQgUG9ydHVndWVzZT0KLSAgICAgIFRleHQgU3BhbmlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBJdGFsaWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgICBUZXh0IERhbmlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBEYW5pc2g9Ci0gICAgICBUZXh0IER1dGNoPSVCQUNLVVAlCi0gICAgICBUZXh0IER1dGNoPQotICAgICAgVGV4dCBOb3J3ZWdpYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgTm9yd2VnaWFuPQotICAgICAgVGV4dCBTd2VkaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IFN3ZWRpc2g9Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yMDkgOCAyNjUgMjYKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD1PSwotICAgICAgVGV4dCBGcmVuY2g9T0sKLSAgICAgIFRleHQgR2VybWFuPU9LCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9T0sKLSAgICAgIFRleHQgU3BhbmlzaD1BQ0VQVEFSCi0gICAgICBUZXh0IEl0YWxpYW49T0sKLSAgICAgIFRleHQgRGFuaXNoPU9LCi0gICAgICBUZXh0IER1dGNoPU9LCi0gICAgICBUZXh0IE5vcndlZ2lhbj1PSwotICAgICAgVGV4dCBTd2VkaXNoPU9LCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yMDkgMzEgMjY1IDUwCi0gICAgICBWYXJpYWJsZT1CQUNLVVAKLSAgICAgIFZhbHVlPSVCQUNLVVBfU0FWRSUKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD1DYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPUFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPUFiYnJlY2hlbgotICAgICAgVGV4dCBQb3J0dWd1ZXNlPUNhbmNlbGFyCi0gICAgICBUZXh0IFNwYW5pc2g9Q2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj1Bbm51bGxhCi0gICAgICBUZXh0IERhbmlzaD1TbGV0Ci0gICAgICBUZXh0IER1dGNoPUFubnVsZXJlbgotICAgICAgVGV4dCBOb3J3ZWdpYW49QXZicnl0Ci0gICAgICBUZXh0IFN3ZWRpc2g9QXZicnl0Ci0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPVNlbGVjdCBDb21wb25lbnRzCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTEzMSAyMzQgMTg4IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1CCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9PCAmQmFjawotICAgICAgVGV4dCBGcmVuY2g9PCAmUmV0b3VyCi0gICAgICBUZXh0IEdlcm1hbj08ICZadXL8Y2sKLSAgICAgIFRleHQgU3BhbmlzaD08ICZBdHLhcwotICAgICAgVGV4dCBJdGFsaWFuPTwgJkluZGlldHJvCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNjQgMjM0IDMyMCAyNTMKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JkNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9JkFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPSZBYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD0mQ2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mQW5udWxsYQotICAgIGVuZAotICAgIGl0ZW06IENoZWNrYm94Ci0gICAgICBSZWN0YW5nbGU9MTA4IDY2IDMxMyAxNTYKLSAgICAgIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAxMQotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDExMAotICAgICAgVGV4dD1QeXRob24gaW50ZXJwcmV0ZXIgYW5kIGxpYnJhcmllcwotICAgICAgVGV4dD1UY2wvVGsgKFRraW50ZXIsIElETEUsIHB5ZG9jKQotICAgICAgVGV4dD1QeXRob24gSFRNTCBkb2NzCi0gICAgICBUZXh0PVB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykKLSAgICAgIFRleHQ9UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0IEZyZW5jaD1QeXRob24gaW50ZXJwcmV0ZXIsIGxpYnJhcnkgYW5kIElETEUKLSAgICAgIFRleHQgRnJlbmNoPVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQgRnJlbmNoPVB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykKLSAgICAgIFRleHQgRnJlbmNoPVB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pCi0gICAgICBUZXh0IEZyZW5jaD0KLSAgICAgIFRleHQgR2VybWFuPVB5dGhvbiBpbnRlcnByZXRlciwgbGlicmFyeSBhbmQgSURMRQotICAgICAgVGV4dCBHZXJtYW49UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dCBHZXJtYW49UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dCBHZXJtYW49UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQgR2VybWFuPQotICAgICAgVGV4dCBTcGFuaXNoPVB5dGhvbiBpbnRlcnByZXRlciwgbGlicmFyeSBhbmQgSURMRQotICAgICAgVGV4dCBTcGFuaXNoPVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQgU3BhbmlzaD1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0IFNwYW5pc2g9UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgSXRhbGlhbj1QeXRob24gaW50ZXJwcmV0ZXIsIGxpYnJhcnkgYW5kIElETEUKLSAgICAgIFRleHQgSXRhbGlhbj1QeXRob24gSFRNTCBkb2NzCi0gICAgICBUZXh0IEl0YWxpYW49UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dCBJdGFsaWFuPVB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDQ1IDMyMCA2MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUNob29zZSB3aGljaCBjb21wb25lbnRzIHRvIGluc3RhbGwgYnkgY2hlY2tpbmcgdGhlIGJveGVzIGJlbG93LgotICAgICAgVGV4dCBGcmVuY2g9Q2hvaXNpc3NleiBsZXMgY29tcG9zYW50cyBxdWUgdm91cyB2b3VsZXogaW5zdGFsbGVyIGVuIGNvY2hhbnQgbGVzIGNhc2VzIGNpLWRlc3NvdXMuCi0gICAgICBUZXh0IEdlcm1hbj1X5GhsZW4gU2llIGRpZSB6dSBpbnN0YWxsaWVyZW5kZW4gS29tcG9uZW50ZW4sIGluZGVtIFNpZSBpbiBkaWUgZW50c3ByZWNoZW5kZW4gS+RzdGNoZW4ga2xpY2tlbi4KLSAgICAgIFRleHQgU3BhbmlzaD1FbGlqYSBsb3MgY29tcG9uZW50ZXMgcXVlIGRlc2VlIGluc3RhbGFyIG1hcmNhbmRvIGxvcyBjdWFkcm9zIGRlIGFiYWpvLgotICAgICAgVGV4dCBJdGFsaWFuPVNjZWdsaWVyZSBxdWFsaSBjb21wb25lbnRpIGluc3RhbGxhcmUgc2VsZXppb25hbmRvIGxlIGNhc2VsbGUgc290dG9zdGFudGkuCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjAzIDI2OSAyMjAKLSAgICAgIERlc3RpbmF0aW9uIERpYWxvZz0xCi0gICAgICBBY3Rpb249MgotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUFkdmFuY2VkIE9wdGlvbnMgLi4uCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTAgMjI1IDMyMCAyMjYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTAgMzIzIDQzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PVNlbGVjdCBDb21wb25lbnRzCi0gICAgICBUZXh0IEZyZW5jaD1T6WxlY3Rpb25uZXIgbGVzIGNvbXBvc2FudHMKLSAgICAgIFRleHQgR2VybWFuPUtvbXBvbmVudGVuIGF1c3fkaGxlbgotICAgICAgVGV4dCBTcGFuaXNoPVNlbGVjY2lvbmUgY29tcG9uZW50ZXMKLSAgICAgIFRleHQgSXRhbGlhbj1TZWxlemlvbmFyZSBpIGNvbXBvbmVudGkKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0yNTEgMTgwIDMxMSAxOTMKLSAgICAgIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgICAgIFZhbHVlPU1BSU5ESVIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTI1MSAxNjggMzExIDE3OQotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTIzIDE2OCAyMzQgMTgxCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9RGlzayBTcGFjZSBSZXF1aXJlZDoKLSAgICAgIFRleHQgRnJlbmNoPUVzcGFjZSBkaXNxdWUgcmVxdWlzIDoKLSAgICAgIFRleHQgR2VybWFuPU5vdHdlbmRpZ2VyIFNwZWljaGVycGxhdHo6Ci0gICAgICBUZXh0IFNwYW5pc2g9RXNwYWNpbyByZXF1ZXJpZG8gZW4gZWwgZGlzY286Ci0gICAgICBUZXh0IEl0YWxpYW49U3BhemlvIHN1IGRpc2NvIG5lY2Vzc2FyaW86Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTIzIDE4MCAyMzQgMTkzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9RGlzayBTcGFjZSBSZW1haW5pbmc6Ci0gICAgICBUZXh0IEZyZW5jaD1Fc3BhY2UgZGlzcXVlIGRpc3BvbmlibGUgOgotICAgICAgVGV4dCBHZXJtYW49VmVyYmxlaWJlbmRlciBTcGVpY2hlcnBsYXR6OgotICAgICAgVGV4dCBTcGFuaXNoPUVzcGFjaW8gZW4gZGlzY28gZGlzcG9uaWJsZToKLSAgICAgIFRleHQgSXRhbGlhbj1TcGF6aW8gc3UgZGlzY28gZGlzcG9uaWJpbGU6Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDE1OCAzMjAgMTk2Ci0gICAgICBBY3Rpb249MQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1ETEdfRVZFTlRfVFlQRQotICAgICAgVmFsdWU9VkVSSUZZCi0gICAgZW5kCi0gICAgaXRlbTogUmVtYXJrCi0gICAgICBUZXh0PUlmIHRoZXkncmUgaW5zdGFsbGluZyBUY2wvVGssIFRvb2xzLCBvciB0aGUgdGVzdCBzdWl0ZSwgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdW5sZXNzIHRoZXkncmUgaW5zdGFsbGluZyBQeXRob24gdG9vLgotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgVmFsdWU9QkRFCi0gICAgICBGbGFncz0wMDAwMTAxMAotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgVmFsdWU9QQotICAgICAgRmxhZ3M9MDAwMDAwMTEKLSAgICBlbmQKLSAgICBpdGVtOiBEaXNwbGF5IE1lc3NhZ2UKLSAgICAgIFRpdGxlPUFyZSB5b3Ugc3VyZT8KLSAgICAgIFRleHQ9SW5zdGFsbGluZyBUY2wvVGssIFRvb2xzIG9yIHRoZSB0ZXN0IHN1aXRlIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHVubGVzcyB5b3UgaW5zdGFsbCB0aGUgUHl0aG9uIGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMgdG9vLgotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9Q2xpY2sgWWVzIGlmIHRoYXQncyByZWFsbHkgd2hhdCB5b3Ugd2FudC4KLSAgICAgIEZsYWdzPTAwMTAxMTAxCi0gICAgZW5kCi0gICAgaXRlbTogUmVtYXJrCi0gICAgICBUZXh0PU5vdGhpbmcgLS0ganVzdCBwcm9jZWVkIHRvIHRoZSBuZXh0IGRpYWxvZy4KLSAgICBlbmQKLSAgICBpdGVtOiBFbHNlIFN0YXRlbWVudAotICAgIGVuZAotICAgIGl0ZW06IFJlbWFyawotICAgICAgVGV4dD1SZXR1cm4gdG8gdGhlIGRpYWxvZy4KLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgVmFyaWFibGUKLSAgICAgIFZhcmlhYmxlPURMR19FVkVOVF9UWVBFCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gIGVuZAotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT1BZHZhbmNlZCBPcHRpb25zCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTIxMwotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBSYWRpbyBCdXR0b24KLSAgICAgIENvbnRyb2wgTmFtZT1BRE1JTjIKLSAgICAgIFJlY3RhbmdsZT0xMSA0NiA5MCA3NgotICAgICAgVmFyaWFibGU9U0VMRUNUX0FETUlOCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDEwMDEKLSAgICAgIFRleHQ9QWRtaW4gaW5zdGFsbAotICAgICAgVGV4dD1Ob24tQWRtaW4gaW5zdGFsbGwKLSAgICAgIFRleHQ9Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMTcwIDI0NCAxODkKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PU9LCi0gICAgICBUZXh0IEZyZW5jaD0mU3VpdGUgPgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlciA+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9NSAzIDMyNiA4MwotICAgICAgQWN0aW9uPTEKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMQotICAgICAgUmVjdGFuZ2xlPTExIDExIDMyMSA0NQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUJ5IGRlZmF1bHQsIHRoZSBpbnN0YWxsIHJlY29yZHMgc2V0dGluZ3MgaW4gdGhlIHBlci1tYWNoaW5lIGFyZWEgb2YgdGhlIHJlZ2lzdHJ5IChIS0xNKSwgYW5kIGluc3RhbGxzIHRoZSBQeXRob24gYW5kIEMgcnVudGltZSBETExzIHRvICVTWVMzMiUuICBDaG9vc2UgIk5vbi1BZG1pbiBpbnN0YWxsIiBpZiB5b3Ugd291bGQgcHJlZmVyIHNldHRpbmdzIG1hZGUgaW4gdGhlIHBlci11c2VyIHJlZ2lzdHJ5IChIS0NVKSwgYW5kIERMTHMgaW5zdGFsbGVkIGluICVNQUlORElSJS4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT01IDkwIDMyNiAxNTcKLSAgICAgIEFjdGlvbj0xCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBDaGVja2JveAotICAgICAgUmVjdGFuZ2xlPTExIDEyMSAyNDMgMTUxCi0gICAgICBWYXJpYWJsZT1UQVNLUwotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDExCi0gICAgICBUZXh0PVJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucyAoLnB5LCAucHl3LCAucHljLCAucHlvKQotICAgICAgVGV4dD1DcmVhdGUgU3RhcnQgTWVudSBzaG9ydGN1dHMKLSAgICAgIFRleHQ9Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTEgMTAzIDMyMCAxMjEKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1DaG9vc2UgdGFza3MgdG8gcGVyZm9ybSBieSBjaGVja2luZyB0aGUgYm94ZXMgYmVsb3cuCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1ETEdfRVZFTlRfVFlQRQotICAgICAgVmFsdWU9SU5JVAotICAgIGVuZAotICAgIGl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICAgICAgVmFyaWFibGU9RE9BRE1JTgotICAgICAgVmFsdWU9MQotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMgotICAgIGVuZAotICAgIGl0ZW06IEVsc2UgU3RhdGVtZW50Ci0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgVGV4dAotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMQotICAgICAgQ29udHJvbCBUZXh0PVRoaXMgc2VjdGlvbiBpcyBhdmFpbGFibGUgb25seSBpZiBsb2dnZWQgaW4gdG8gYW4gYWNjb3VudCB3aXRoIEFkbWluaXN0cmF0b3IgcHJpdmlsZWdlcy4KLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1BRE1JTjIKLSAgICAgIE9wZXJhdGlvbj0xCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPVNlbGVjdCBQcm9ncmFtIE1hbmFnZXIgR3JvdXAKLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUluc3RhbGxhdGlvbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgR2VybWFuPUluc3RhbGxhdGlvbiB2b24gJUFQUFRJVExFJQotICAgIFRpdGxlIFNwYW5pc2g9SW5zdGFsYWNp824gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEl0YWxpYW49SW5zdGFsbGF6aW9uZSBkaSAlQVBQVElUTEUlCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Jk5leHQgPgotICAgICAgVGV4dCBGcmVuY2g9JlN1aXRlID4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIgPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTMxIDIzNCAxODggMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPUIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD08ICZCYWNrCi0gICAgICBUZXh0IEZyZW5jaD08ICZSZXRvdXIKLSAgICAgIFRleHQgR2VybWFuPTwgJlp1cvxjawotICAgICAgVGV4dCBTcGFuaXNoPTwgJkF0cuFzCi0gICAgICBUZXh0IEl0YWxpYW49PCAmSW5kaWV0cm8KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTAgMjI1IDMyMCAyMjYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTAgMzIzIDUzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PVNlbGVjdCBTdGFydCBNZW51IEdyb3VwCi0gICAgICBUZXh0IEZyZW5jaD1T6WxlY3Rpb25uZXIgbGUgZ3JvdXBlIGR1IEdlc3Rpb25uYWlyZSBkZSBwcm9ncmFtbWUKLSAgICAgIFRleHQgR2VybWFuPUJlc3RpbW11bmcgZGVyIFByb2dyYW1tLU1hbmFnZXJncnVwcGUKLSAgICAgIFRleHQgU3BhbmlzaD1TZWxlY2Npb25lIGdydXBvIGRlbCBBZG1pbmlzdHJhZG9yIGRlIHByb2dyYW1hcwotICAgICAgVGV4dCBJdGFsaWFuPVNlbGV6aW9uYXJlIGlsIGdydXBwbyBQcm9nTWFuCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDM1IDMyMCA2NQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUVudGVyIHRoZSBuYW1lIG9mIHRoZSBTdGFydCBNZW51IHByb2dyYW0gZ3JvdXAgdG8gd2hpY2ggdG8gYWRkIHRoZSAlQVBQVElUTEUlIGljb25zOgotICAgICAgVGV4dCBGcmVuY2g9RW50cmV6IGxlIG5vbSBkdSBncm91cGUgZHUgR2VzdGlvbm5haXJlIGRlIHByb2dyYW1tZSBkYW5zIGxlcXVlbCB2b3VzIHNvdWhhaXRleiBham91dGVyIGxlcyBpY/RuZXMgZGUgJUFQUFRJVExFJSA6Ci0gICAgICBUZXh0IEdlcm1hbj1HZWJlbiBTaWUgZGVuIE5hbWVuIGRlciBQcm9ncmFtbWdydXBwZSBlaW4sIGRlciBkYXMgU3ltYm9sICVBUFBUSVRMRSUgaGluenVnZWb8Z3Qgd2VyZGVuIHNvbGw6Ci0gICAgICBUZXh0IFNwYW5pc2g9RXNjcmliYSBlbCBub21icmUgZGVsIGdydXBvIGRlbCBBZG1pbmlzdHJhZG9yIGRlIHByb2dyYW1hcyBlbiBlbCBxdWUgZGVzZWEgYWdyZWdhciBsb3MgaWNvbm9zIGRlICVBUFBUSVRMRSU6Ci0gICAgICBUZXh0IEl0YWxpYW49SW5zZXJpcmUgaWwgbm9tZSBkZWwgZ3J1cHBvIFByb2dyYW0gTWFuYWdlciBwZXIgYWdnaXVuZ2VyZSBsZSBpY29uZSAlQVBQVElUTEUlIGE6Ci0gICAgZW5kCi0gICAgaXRlbTogQ29tYm9ib3gKLSAgICAgIFJlY3RhbmdsZT0xMDggNTYgMzIwIDIxOQotICAgICAgVmFyaWFibGU9R1JPVVAKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMTAwMDAxMDAwMDAwMTEwMDAwMDAwMQotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0lR1JPVVAlCi0gICAgICBUZXh0PQotICAgICAgVGV4dCBGcmVuY2g9JUdST1VQJQotICAgICAgVGV4dCBHZXJtYW49JUdST1VQJQotICAgICAgVGV4dCBTcGFuaXNoPSVHUk9VUCUKLSAgICAgIFRleHQgSXRhbGlhbj0lR1JPVVAlCi0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPVN0YXJ0IEluc3RhbGxhdGlvbgotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9SW5zdGFsbGF0aW9uIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBHZXJtYW49SW5zdGFsbGF0aW9uIHZvbiAlQVBQVElUTEUlCi0gICAgVGl0bGUgU3BhbmlzaD1JbnN0YWxhY2nzbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgSXRhbGlhbj1JbnN0YWxsYXppb25lIGRpICVBUFBUSVRMRSUKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mTmV4dCA+Ci0gICAgICBUZXh0IEZyZW5jaD0mU3VpdGUgPgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlciA+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xMzEgMjM0IDE4OCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9QgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PTwgJkJhY2sKLSAgICAgIFRleHQgRnJlbmNoPTwgJlJldG91cgotICAgICAgVGV4dCBHZXJtYW49PCAmWnVy/GNrCi0gICAgICBUZXh0IFNwYW5pc2g9PCAmQXRy4XMKLSAgICAgIFRleHQgSXRhbGlhbj08ICZJbmRpZXRybwotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSZDYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPSZBbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj0mQWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9JkNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49JkFubnVsbGEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMCAzMjMgNTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9UmVhZHkgdG8gSW5zdGFsbCEKLSAgICAgIFRleHQgRnJlbmNoPVBy6nQg4CBpbnN0YWxsZXIgIQotICAgICAgVGV4dCBHZXJtYW49SW5zdGFsbGF0aW9uc2JlcmVpdCEKLSAgICAgIFRleHQgU3BhbmlzaD2hUHJlcGFyYWRvIHBhcmEgbGEgaW5zdGFsYWNp824hCi0gICAgICBUZXh0IEl0YWxpYW49UHJvbnRvIHBlciBsJ2luc3RhbGxhemlvbmUhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDQwIDMyMCA2MgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUNsaWNrIHRoZSBOZXh0IGJ1dHRvbiB0byBpbnN0YWxsICVBUFBUSVRMRSUsIG9yIHRoZSBCYWNrIGJ1dHRvbiB0byBjaGFuZ2UgY2hvaWNlczoKLSAgICAgIFRleHQgRnJlbmNoPVZvdXMg6nRlcyBtYWludGVuYW50IHBy6nQg4CBpbnN0YWxsZXIgbGVzIGZpY2hpZXJzICVBUFBUSVRMRSUuCi0gICAgICBUZXh0IEZyZW5jaD0KLSAgICAgIFRleHQgRnJlbmNoPUNsaXF1ZXogc3VyIGxlIGJvdXRvbiBTdWl0ZSBwb3VyIGNvbW1lbmNlciBsJ2luc3RhbGxhdGlvbiBvdSBzdXIgbGUgYm91dG9uIFJldG91ciBwb3VyIGVudHJlciBsZXMgaW5mb3JtYXRpb25zIGQnaW5zdGFsbGF0aW9uIOAgbm91dmVhdS4KLSAgICAgIFRleHQgR2VybWFuPVNpZSBr9m5uZW4gJUFQUFRJVExFJSBudW4gaW5zdGFsbGllcmVuLgotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IEdlcm1hbj1LbGlja2VuIFNpZSBhdWYgIldlaXRlciIsIHVtIG1pdCBkZXIgSW5zdGFsbGF0aW9uIHp1IGJlZ2lubmVuLiBLbGlja2VuIFNpZSBhdWYgIlp1cvxjayIsIHVtIGRpZSBJbnN0YWxsYXRpb25zaW5mb3JtYXRpb25lbiBuZXUgZWluenVnZWJlbi4KLSAgICAgIFRleHQgU3BhbmlzaD1ZYSBlc3ThIGxpc3RvIHBhcmEgaW5zdGFsYXIgJUFQUFRJVExFJS4KLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgU3BhbmlzaD1QcmVzaW9uZSBlbCBib3TzbiBTaWd1aWVudGUgcGFyYSBjb21lbnphciBsYSBpbnN0YWxhY2nzbiBvIHByZXNpb25lIEF0cuFzIHBhcmEgdm9sdmVyIGEgaW5ncmVzYXIgbGEgaW5mb3JtYWNp824gcGFyYSBsYSBpbnN0YWxhY2nzbi4KLSAgICAgIFRleHQgSXRhbGlhbj1PcmEg6CBwb3NzaWJpbGUgaW5zdGFsbGFyZSAlQVBQVElUTEUlLgotICAgICAgVGV4dCBJdGFsaWFuPQotICAgICAgVGV4dCBJdGFsaWFuPVByZW1lcmUgaWwgcHVsc2FudGUgQXZhbnRpIHBlciBhdnZpYXJlIGwnaW5zdGFsbGF6aW9uZSBvIGlsIHB1bHNhbnRlIEluZGlldHJvIHBlciByZWluc2VyaXJlIGxlIGluZm9ybWF6aW9uaSBkaSBpbnN0YWxsYXppb25lLgotICAgIGVuZAotICAgIGl0ZW06IEVkaXRib3gKLSAgICAgIFJlY3RhbmdsZT0xMDggNjYgMzI0IDIxOQotICAgICAgSGVscCBDb250ZXh0PTE2NzExNjgxCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAxMDAwMDAwMDAwMDExMDAwMTEwMDAxMDAKLSAgICAgIFRleHQ9JVNVTU1BUlklCi0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURJU1BMQVkKLSAgVmFsdWU9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Vc2VyIG1heSBoYXZlIGNoYW5nZWQgTUFJTkRJUiwgc28gcmVzZXQgQkFDS1VQIHRvIG1hdGNoLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9QkFDS1VQCi0gIFZhbHVlPSVNQUlORElSJVxCQUNLVVAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJFR0lOIFdJWkFSRCBTVFVGRiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1XaGVuIHRoZSBCQUNLVVAgZmVhdHVyZSBpcyBlbmFibGVkLCB0aGUgQkFDS1VQRElSIGlzIGluaXRpYWxpemVkCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0JBQ0tVUAotICBWYWx1ZT1BCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1CQUNLVVBESVIKLSAgVmFsdWU9JUJBQ0tVUCUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZSBCUkFORElORyBpbmZvcm1hdGlvbiBpcyB3cml0dGVuIHRvIHRoZSBJTkkgZmlsZSBvbiB0aGUgaW5zdGFsbGF0aW9uIG1lZGlhLgotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9QlJBTkRJTkcKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9CUkFORAotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgSU5JIEZpbGUKLSAgUGF0aG5hbWU9JUlOU1QlXENVU1REQVRBLklOSQotICBTZXR0aW5ncz1bUmVnaXN0cmF0aW9uXQotICBTZXR0aW5ncz1OQU1FPSVOQU1FJQotICBTZXR0aW5ncz1DT01QQU5ZPSVDT01QQU5ZJQotICBTZXR0aW5ncz0KLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CZWdpbiB3cml0aW5nIHRvIHRoZSBJTlNUQUxMLkxPRwotZW5kCi1pdGVtOiBPcGVuL0Nsb3NlIElOU1RBTEwuTE9HCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUNoZWNrIGZyZWUgZGlzayBzcGFjZSBjYWxjdWxhdGVzIGZyZWUgZGlzayBzcGFjZSBhcyB3ZWxsIGFzIGNvbXBvbmVudCBzaXplcy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SXQgc2hvdWxkIGJlIGxvY2F0ZWQgYmVmb3JlIGFsbCBJbnN0YWxsIEZpbGUgYWN0aW9ucy4KLWVuZAotaXRlbTogQ2hlY2sgRGlzayBTcGFjZQotICBDb21wb25lbnQ9Q09NUE9ORU5UUwotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzIGluY2x1ZGUgc2NyaXB0IGFsbG93cyB1bmluc3RhbGwgc3VwcG9ydAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiAgdGhpcyBpcyBvdXIgb3duIFVuaW5zdGFsLndzZSwgYSBjb3B5IG9mIFdpc2UncyBleGNlcHQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9aXQgd3JpdGVzIHRvIEhLQ1UgKGluc3RlYWQgb2YgSEtMTSkgaWYgdGhlIHVzZXIgZG9lc24ndCBoYXZlIGFkbWluIHByaXZzLgotZW5kCi1pdGVtOiBJbmNsdWRlIFNjcmlwdAotICBQYXRobmFtZT0uXFVuaW5zdGFsLndzZQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3RlIGZyb20gVGltOiB0aGVzZSBzZWVtaW5nIG5vLW9wcyBhY3R1YWxseSBjb252ZXJ0IHRvIHNob3J0IGZpbGVuYW1lcy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUNPTU1PTgotICBWYWx1ZT0lQ09NTU9OJQotICBGbGFncz0wMDAxMDEwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9TUFJTkRJUgotICBWYWx1ZT0lTUFJTkRJUiUKLSAgRmxhZ3M9MDAwMTAxMDAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyBJRi9USEVOL0VMU0UgcmVhZHMgdGhlIGNvcnJlY3QgcmVnaXN0cnkgZW50cmllcyBmb3Igc2hvcnRjdXQvaWNvbiBwbGFjZW1lbnQKLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMDExMTAxMQotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPVNUQVJUVVBESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lV0lOJVxTdGFydCBNZW51XFByb2dyYW1zXFN0YXJ0VXAKLSAgVmFsdWUgTmFtZT1TdGFydFVwCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9REVTS1RPUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVXSU4lXERlc2t0b3AKLSAgVmFsdWUgTmFtZT1EZXNrdG9wCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9U1RBUlRNRU5VRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVdJTiVcU3RhcnQgTWVudQotICBWYWx1ZSBOYW1lPVN0YXJ0IE1lbnUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1HUk9VUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVXSU4lXFN0YXJ0IE1lbnVcUHJvZ3JhbXMKLSAgVmFsdWUgTmFtZT1Qcm9ncmFtcwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNTVEFSVFVQRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVNUQVJUVVBESVIlCi0gIFZhbHVlIE5hbWU9Q29tbW9uIFN0YXJ0dXAKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DREVTS1RPUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVERVNLVE9QRElSJQotICBWYWx1ZSBOYW1lPUNvbW1vbiBEZXNrdG9wCi0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9Q1NUQVJUTUVOVURJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVTVEFSVE1FTlVESVIlCi0gIFZhbHVlIE5hbWU9Q29tbW9uIFN0YXJ0IE1lbnUKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DR1JPVVBESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lR1JPVVBESVIlCi0gIFZhbHVlIE5hbWU9Q29tbW9uIFByb2dyYW1zCi0gIEZsYWdzPTAwMDAwMTAwCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06ICB0aGUgV2l6YXJkIGxlZnQgdGhpcyBibG9jayBlbXB0eSEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UGVyaGFwcyBpdCdzIG9ubHkgcmVsZXZhbnQgb24gV2luZG93cyAzLjEuCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FTkQgV0laQVJEIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9U0VMRUNUX0FETUlOCi0gIFZhbHVlPUIKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlIHVzZXIgY2hvc2UgYSBub24tYWRtaW4gaW5zdGFsbCBpbiAiQWR2YW5jZWQgT3B0aW9ucyIuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoaXMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhlIGluY2x1ZGUgb2YgVW5pbnN0YWwud3NlIGFib3ZlLCBiZWNhdXNlCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PXdyaXRpbmcgdW5pbnN0YWxsIGluZm8gdG8gSEtDVSBpcyBpbmVmZmVjdGl2ZSBleGNlcHQgdW5kZXIgV2luMksuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9Q0dST1VQX1NBVkUKLSAgVmFsdWU9JUdST1VQJQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1HUk9VUAotICBWYWx1ZT0lQ0dST1VQRElSJVwlR1JPVVAlCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1HUk9VUAotICBWYWx1ZT0lR1JPVVBESVIlXCVHUk9VUCUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TG9uZyBzZWN0aW9uIHRvIGluc3RhbGwgZmlsZXMuCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ETExERVNUCi0gIFZhbHVlPSVTWVMzMiUKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURMTERFU1QKLSAgVmFsdWU9JU1BSU5ESVIlCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SW5zdGFsbCB0aGUgbGljZW5zZSBldmVuIGlmIHRoZXkgZGVzZWxlY3QgZXZlcnl0aGluZyA8d2luaz4uCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGljZW5zZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTElDRU5TRS50eHQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcUkVBRE1FLnR4dAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbWlzY1xuZXdzCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxORVdTLnR4dAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUljb25zIC0tIGFsd2F5cyBpbnN0YWxsIHNvIHRoYXQgdGhlIHVuaW5zdGFsbGVyIGNhbiB1c2UgdGhlbSBmb3IgaXRzIG93biBkaXNwbGF5LgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHBjXHB5Y29uLmljbwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHljb24uaWNvCi0gIEZsYWdzPTAwMDAwMDAwMTAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxwY1xweWMuaWNvCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxweWMuaWNvCi0gIEZsYWdzPTAwMDAwMDAwMTAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxwY1xweS5pY28KLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHB5LmljbwotICBGbGFncz0wMDAwMDAwMDEwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGVzZSBhcnJhbmdlIHRvIChyZWN1cnNpdmVseSEpIGRlbGV0ZSBhbGwgLnB5YyBhbmQgLnB5byBmaWxlcyBhdCB1bmluc3RhbGwgdGltZS4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyAiZG9lcyB0aGUgcmlnaHQgdGhpbmciOiAgYW55IGRpcmVjdG9yaWVzIGxlZnQgZW1wdHkgYXQgdGhlIGVuZCBhcmUgcmVtb3ZlZC4KLWVuZAotaXRlbTogQWRkIFRleHQgdG8gSU5TVEFMTC5MT0cKLSAgVGV4dD1GaWxlIFRyZWU6ICVNQUlORElSJVwqLnB5YwotZW5kCi1pdGVtOiBBZGQgVGV4dCB0byBJTlNUQUxMLkxPRwotICBUZXh0PUZpbGUgVHJlZTogJU1BSU5ESVIlXCoucHlvCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1BOiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RXhlY3V0YWJsZXMKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5dGhvbi5leGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHB5dGhvbi5leGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHl0aG9udy5leGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHB5dGhvbncuZXhlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHc5eHBvcGVuLmV4ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcdzl4cG9wZW4uZXhlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUV4dGVuc2lvbiBtb2R1bGUgRExMcyAoLnB5ZCk7IGtlZXAgaW4gc3luY2ggd2l0aCBsaWJzIGRpcmVjdG9yeSBuZXh0Ci1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx3aW5yZWcucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHdpbnJlZy5weWQKLSAgRGVzY3JpcHRpb249RXh0ZW5zaW9uIG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX2Nzdi5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX2Nzdi5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NyZS5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3NyZS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NzbC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3NzbC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3N5bXRhYmxlLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfc3ltdGFibGUucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF90ZXN0Y2FwaS5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3Rlc3RjYXBpLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfdGtpbnRlci5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3RraW50ZXIucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zb2NrZXQucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF9zb2NrZXQucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXGJ6Mi5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcYnoyLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxkYXRldGltZS5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcZGF0ZXRpbWUucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXG1tYXAucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXG1tYXAucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHBhcnNlci5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNccGFyc2VyLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweWV4cGF0LnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xweWV4cGF0LnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxzZWxlY3QucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHNlbGVjdC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cdW5pY29kZWRhdGEucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHVuaWNvZGVkYXRhLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx3aW5zb3VuZC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcd2luc291bmQucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHpsaWIucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHpsaWIucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUxpbmsgbGlicmFyaWVzICgubGliKTsga2VlcCBpbiBzeW5jaCB3aXRoIERMTHMgYWJvdmUsIGV4Y2VwdCB0aGF0IHRoZSBQeXRob24gbGliIGxpdmVzIGhlcmUuCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx3aW5yZWcubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHdpbnJlZy5saWIKLSAgRGVzY3JpcHRpb249TGluayBsaWJyYXJ5IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9jc3YubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF9jc3YubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zcmUubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF9zcmUubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zc2wubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF9zc2wubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zeW10YWJsZS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3N5bXRhYmxlLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfdGVzdGNhcGkubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF90ZXN0Y2FwaS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3RraW50ZXIubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF90a2ludGVyLmxpYgotICBEZXNjcmlwdGlvbj1FeHRlbnNpb24gbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc29ja2V0LmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfc29ja2V0LmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxiejIubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXGJ6Mi5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cZGF0ZXRpbWUubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXGRhdGV0aW1lLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxtbWFwLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xtbWFwLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxwYXJzZXIubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHBhcnNlci5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHlleHBhdC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNccHlleHBhdC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cc2VsZWN0LmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xzZWxlY3QubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHVuaWNvZGVkYXRhLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1x1bmljb2RlZGF0YS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cd2luc291bmQubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHdpbnNvdW5kLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx6bGliLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1x6bGliLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHl0aG9uJV9weW1ham9yXyUlX3B5bWlub3JfJS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNccHl0aG9uJV9QWU1BSk9SXyUlX1BZTUlOT1JfJS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TWFpbiBQeXRob24gRExMCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRlbGwgV2lzZSBpdCdzIE9LIHRvIGRlbGV0ZSB0aGUgUHl0aG9uIERMTCBhdCB1bmluc3RhbGwgdGltZSwKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ZGVzcGl0ZSB0aGF0IHdlIChtYXkpIHdyaXRlIGl0IGludG8gYSBzeXN0ZW0gZGlyZWN0b3J5LgotZW5kCi1pdGVtOiBBZGQgVGV4dCB0byBJTlNUQUxMLkxPRwotICBUZXh0PU5vbi1TeXN0ZW0gRmlsZToKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5dGhvbiVfcHltYWpvcl8lJV9weW1pbm9yXyUuZGxsCi0gIERlc3RpbmF0aW9uPSVETExERVNUJVxweXRob24lX1BZTUFKT1JfJSVfUFlNSU5PUl8lLmRsbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1MaWJyYXJpZXMgKExpYi8pCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYgotICBEZXNjcmlwdGlvbj1MaWJyYXJ5IE1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcY29tcGlsZXJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGNvbXBpbGVyCi0gIERlc2NyaXB0aW9uPVB5dGhvbiBjb21waWxlciB3cml0dGVuIGluIFB5dGhvbgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlscwotICBEZXNjcmlwdGlvbj1EaXN0cmlidXRpb24gdXRpbGl0eSBtb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZGlzdHV0aWxzXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlsc1xSRUFETUUudHh0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlsc1xjb21tYW5kCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC5leGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LmV4ZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGRpc3R1dGlsc1xjb21tYW5kXGNvbW1hbmRfdGVtcGxhdGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxkaXN0dXRpbHNcY29tbWFuZFxjb21tYW5kX3RlbXBsYXRlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbWFpbAotICBEZXNjcmlwdGlvbj1MaWJyYXJ5IGVtYWlsIHBhY2thZ2UKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbWFpbFx0ZXN0XCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbWFpbFx0ZXN0Ci0gIERlc2NyaXB0aW9uPWVtYWlsIHRlc3RzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcdGVzdFxkYXRhXCoudHh0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWxcdGVzdFxkYXRhCi0gIERlc2NyaXB0aW9uPWVtYWlsIHRlc3QgZGF0YQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXHRlc3RcZGF0YVwqLmdpZgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsXHRlc3RcZGF0YQotICBEZXNjcmlwdGlvbj1lbWFpbCB0ZXN0IGRhdGEKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbWFpbFx0ZXN0XGRhdGFcKi5hdQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsXHRlc3RcZGF0YQotICBEZXNjcmlwdGlvbj1lbWFpbCB0ZXN0IGRhdGEKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW5jb2RpbmdzXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbmNvZGluZ3MKLSAgRGVzY3JpcHRpb249VW5pY29kZSBlbmNvZGluZyB0YWJsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcaG90c2hvdFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaG90c2hvdAotICBEZXNjcmlwdGlvbj1GYXN0IFB5dGhvbiBwcm9maWxlcgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxsaWItb2xkXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxsaWItb2xkCi0gIERlc2NyaXB0aW9uPU9ic29sZXRlIG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGtpbnRlclwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGtpbnRlcgotICBEZXNjcmlwdGlvbj1Ua2ludGVyIHJlbGF0ZWQgbGlicmFyeSBtb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGxvZ2dpbmdcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGxvZ2dpbmcKLSAgRGVzY3JpcHRpb249TG9nZ2luZyBwYWNrYWdlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHNpdGUtcGFja2FnZXNccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcc2l0ZS1wYWNrYWdlc1xSRUFETUUudHh0Ci0gIERlc2NyaXB0aW9uPVNpdGUgcGFja2FnZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJceG1sXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx4bWwKLSAgRGVzY3JpcHRpb249WE1MIHN1cHBvcnQgcGFja2FnZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx4bWxcZG9tXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx4bWxcZG9tCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJceG1sXHBhcnNlcnNcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHhtbFxwYXJzZXJzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJceG1sXHNheFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJceG1sXHNheAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DIEluY2x1ZGUgZmlsZXMKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxpbmNsdWRlXCouaAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcaW5jbHVkZQotICBEZXNjcmlwdGlvbj1IZWFkZXIgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHBjXHB5Y29uZmlnLmgKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGluY2x1ZGVccHljb25maWcuaAotICBEZXNjcmlwdGlvbj1IZWFkZXIgZmlsZXMgKHB5Y29uZmlnLmgpCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU1pY3Jvc29mdCBDIHJ1bnRpbWUgbGlicmFyaWVzCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9TWVNfJVxNU1ZDSVJULkRMTAotICBEZXN0aW5hdGlvbj0lRExMREVTVCVcTVNWQ0lSVC5ETEwKLSAgRGVzY3JpcHRpb249VmlzdWFsIEMrKyBSdW50aW1lIERMTHMKLSAgRmxhZ3M9MDAwMDAxMTAwMDAxMDAxMQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfU1lTXyVcTVNWQ1JULkRMTAotICBEZXN0aW5hdGlvbj0lRExMREVTVCVcTVNWQ1JULkRMTAotICBEZXNjcmlwdGlvbj1WaXN1YWwgQysrIFJ1bnRpbWUgRExMcwotICBGbGFncz0wMDAwMDExMDAwMDEwMDExCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QjogVGNsL1RrIChUa2ludGVyLCBJRExFLCBweWRvYykKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UY2wvVGsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlwuLlwlX3RjbGRpcl8lXGJpblwqLmRsbAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMcwotICBEZXNjcmlwdGlvbj1UY2wvVGsgYmluYXJpZXMgYW5kIGxpYnJhcmllcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cLi5cJV90Y2xkaXJfJVxsaWJcKi4qCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVx0Y2wKLSAgRGVzY3JpcHRpb249VGNsL1RrIGJpbmFyaWVzIGFuZCBsaWJyYXJpZXMKLSAgRmxhZ3M9MDAwMDAwMDEwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SURMRQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXExpYlxpZGxlbGliXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxpZGxlbGliCi0gIERlc2NyaXB0aW9uPUludGVncmF0ZWQgRGV2ZUxvcG1lbnQgRW52aXJvbm1lbnQgZm9yIFB5dGhvbgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cTGliXGlkbGVsaWJcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxpZGxlbGliCi0gIERlc2NyaXB0aW9uPUludGVncmF0ZWQgRGV2ZUxvcG1lbnQgRW52aXJvbm1lbnQgZm9yIFB5dGhvbgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cTGliXGlkbGVsaWJcKi5kZWYKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxpZGxlbGliCi0gIERlc2NyaXB0aW9uPUludGVncmF0ZWQgRGV2ZUxvcG1lbnQgRW52aXJvbm1lbnQgZm9yIFB5dGhvbgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cTGliXGlkbGVsaWJcSWNvbnNcKgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWJcSWNvbnMKLSAgRGVzY3JpcHRpb249SW50ZWdyYXRlZCBEZXZlTG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxUb29sc1xzY3JpcHRzXGlkbGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3Ci0gIERlc2NyaXB0aW9uPUlETEUgYm9vdHN0cmFwIHNjcmlwdAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1XaW5kb3dzIHB5ZG9jIGRyaXZlcgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHNjcmlwdHNcKi5weXcKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXFNjcmlwdHMKLSAgRGVzY3JpcHRpb249V2luZG93cyBweWRvYyBkcml2ZXIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUM6IGRvY3MKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfRE9DXyVcKi4qCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxEb2MKLSAgRGVzY3JpcHRpb249UHl0aG9uIERvY3VtZW50YXRpb24gKEhUTUwpCi0gIEZsYWdzPTAwMDAwMDAxMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1EOiB0b29scwotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1ECi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcc2NyaXB0c1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xTY3JpcHRzCi0gIERlc2NyaXB0aW9uPVV0aWxpdHkgU2NyaXB0cwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcc2NyaXB0c1wqLmRvYwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcU2NyaXB0cwotICBEZXNjcmlwdGlvbj1VdGlsaXR5IFNjcmlwdHMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHNjcmlwdHNccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xTY3JpcHRzXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249VXRpbGl0eSBTY3JpcHRzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcd2ViY2hlY2tlclwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1x3ZWJjaGVja2VyCi0gIERlc2NyaXB0aW9uPVdlYiBjaGVja2VyIHRvb2wKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHdlYmNoZWNrZXJccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1x3ZWJjaGVja2VyXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249V2ViIGNoZWNrZXIgdG9vbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHZlcnNpb25jaGVja1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1x2ZXJzaW9uY2hlY2sKLSAgRGVzY3JpcHRpb249VmVyc2lvbiBjaGVja2VyIHRvb2wKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHZlcnNpb25jaGVja1xyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHZlcnNpb25jaGVja1xSRUFETUUudHh0Ci0gIERlc2NyaXB0aW9uPVZlcnNpb24gY2hlY2tlciB0b29sCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZQotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZQotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVceFwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlXFgKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvciAtIFggZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVxyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZVxSRUFETUUudHh0Ci0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IgLSBSRUFETUUKLSAgRmxhZ3M9MDAwMDAwMDEwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVxweW5jaGUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZVxweW5jaGUucHkKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvciAtIG1haW4KLSAgRmxhZ3M9MDAwMDAwMDEwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVxweW5jaGUucHl3Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGVccHluY2hlLnB5dwotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yIC0gbm9jb25zb2xlIG1haW4KLSAgRmxhZ3M9MDAwMDAwMDEwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xpMThuXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXGkxOG4KLSAgRGVzY3JpcHRpb249SW50ZXJuYXRpb25hbGl6YXRpb24gaGVscGVycwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RTogdGVzdCBzdWl0ZQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1FCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcYXVkaW90ZXN0LmF1Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdFxhdWRpb3Rlc3QuYXUKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoudXVlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoueG1sCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi5vdXQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLmJ6MgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoudGFyCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi5negotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCoudHh0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XG91dHB1dFwqLioKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0XG91dHB1dAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBvdXRwdXQgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PURPTkUgd2l0aCBmaWxlIGNvcHlpbmcuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZSByZXN0IGlzIHJlZ2lzdHJ5IGFuZCBTdGFydCBNZW51IGZpZGRsaW5nLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1SZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMuICBBcyB1c3VhbCwgQWRtaW4gcHJpdnMgZ2V0IGluIHRoZSB3YXksIGJ1dCB3aXRoIGEgdHdpc3Q6Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVlvdSBkb24ndCBuZWVkIGFkbWluIHByaXZzIHRvIHdyaXRlIHRvIEhLRVlfQ0xBU1NFU19ST09UICpleGNlcHQqIHVuZGVyIFdpbjJLLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1PbiBXaW4ySywgYSB1c2VyIHdpdGhvdXQgQWRtaW4gcHJpdnMgaGFzIHRvIHJlZ2lzdGVyIGV4dGVuc2lvbnMgdW5kZXIgSEtDVVxTb2Z0d2FyZVxDTEFTU0VTIGluc3RlYWQuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJ1dCB3aGlsZSB5b3UgY2FuICpkbyogdGhhdCB1bmRlciBvdGhlciBmbGF2b3JzIG9mIFdpbmRvd3MgdG9vLCBpdCBoYXMgbm8gdXNlZnVsIGVmZmVjdCBleGNlcHQgaW4gV2luMksuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VU0VfSEtDUgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTExMTAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VVNFX0hLQ1IKLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1VU0VfSEtDUgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUZpbGUgdHlwZXMuCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uRmlsZQotICBOZXcgVmFsdWU9UHl0aG9uIEZpbGUKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5GaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbi5leGUgIiUlMSIgJSUqCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5LmljbwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Ob0NvbkZpbGUKLSAgTmV3IFZhbHVlPVB5dGhvbiBGaWxlIChubyBjb25zb2xlKQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLk5vQ29uRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAiJSUxIiAlJSoKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Ob0NvbkZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeS5pY28KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uQ29tcGlsZWRGaWxlCi0gIE5ldyBWYWx1ZT1Db21waWxlZCBQeXRob24gRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkNvbXBpbGVkRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob24uZXhlICIlJTEiICUlKgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkNvbXBpbGVkRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5Yy5pY28KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUZpbGUgZXh0ZW5zaW9ucy4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weQotICBOZXcgVmFsdWU9UHl0aG9uLkZpbGUKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weQotICBOZXcgVmFsdWU9dGV4dC9wbGFpbgotICBWYWx1ZSBOYW1lPUNvbnRlbnQgVHlwZQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weXcKLSAgTmV3IFZhbHVlPVB5dGhvbi5Ob0NvbkZpbGUKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weXcKLSAgTmV3IFZhbHVlPXRleHQvcGxhaW4KLSAgVmFsdWUgTmFtZT1Db250ZW50IFR5cGUKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHljCi0gIE5ldyBWYWx1ZT1QeXRob24uQ29tcGlsZWRGaWxlCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT0ucHlvCi0gIE5ldyBWYWx1ZT1QeXRob24uQ29tcGlsZWRGaWxlCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUZpbGUgdHlwZXMuCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5GaWxlCi0gIE5ldyBWYWx1ZT1QeXRob24gRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9uLmV4ZSAiJSUxIiAlJSoKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5GaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHkuaWNvCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLk5vQ29uRmlsZQotICBOZXcgVmFsdWU9UHl0aG9uIEZpbGUgKG5vIGNvbnNvbGUpCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uTm9Db25GaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICIlJTEiICUlKgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLk5vQ29uRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5LmljbwotICBSb290PTEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Db21waWxlZEZpbGUKLSAgTmV3IFZhbHVlPUNvbXBpbGVkIFB5dGhvbiBGaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uQ29tcGlsZWRGaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbi5leGUgIiUlMSIgJSUqCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uQ29tcGlsZWRGaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHljLmljbwotICBSb290PTEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUZpbGUgZXh0ZW5zaW9ucy4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5Ci0gIE5ldyBWYWx1ZT1QeXRob24uRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5Ci0gIE5ldyBWYWx1ZT10ZXh0L3BsYWluCi0gIFZhbHVlIE5hbWU9Q29udGVudCBUeXBlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5dwotICBOZXcgVmFsdWU9UHl0aG9uLk5vQ29uRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5dwotICBOZXcgVmFsdWU9dGV4dC9wbGFpbgotICBWYWx1ZSBOYW1lPUNvbnRlbnQgVHlwZQotICBSb290PTEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weWMKLSAgTmV3IFZhbHVlPVB5dGhvbi5Db21waWxlZEZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXC5weW8KLSAgTmV3IFZhbHVlPVB5dGhvbi5Db21waWxlZEZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SWYgd2UncmUgaW5zdGFsbGluZyBJRExFLCBhbHNvIHNldCBhbiBFZGl0IGNvbnRleHQgbWVudSBhY3Rpb24gdG8gdXNlIElETEUsIGZvciAucHkgYW5kIC5weXcgZmlsZXMuCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVVTRV9IS0NSCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Ob0NvbkZpbGVcc2hlbGxcRWRpdCB3aXRoIElETEVcY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyAtbiAtZSAiJSUxIgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkZpbGVcc2hlbGxcRWRpdCB3aXRoIElETEVcY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyAtbiAtZSAiJSUxIgotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uTm9Db25GaWxlXHNoZWxsXEVkaXQgd2l0aCBJRExFXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAlTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXcgLW4gLWUgIiUlMSIKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5GaWxlXHNoZWxsXEVkaXQgd2l0aCBJRExFXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob253LmV4ZSAlTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXcgLW4gLWUgIiUlMSIKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1SZWdpc3RlciBQeXRob24gcGF0aHMuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdyaXRlIHRvIEhLTE0gZm9yIGFkbWluLCBlbHNlIEhLQ1UuICBLZWVwIHRoZXNlIGJsb2NrcyBvdGhlcndpc2UgaWRlbnRpY2FsIQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVxDdXJyZW50VmVyc2lvbgotICBSb290PTEzMAotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEluc3RhbGxQYXRoCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiUKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSW5zdGFsbFBhdGhcSW5zdGFsbEdyb3VwCi0gIE5ldyBWYWx1ZT0lQ0dST1VQX1NBVkUlCi0gIE5ldyBWYWx1ZT0KLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcUHl0aG9uUGF0aAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXExpYjslTUFJTkRJUiVcRExMcwotICBOZXcgVmFsdWU9Ci0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXE1vZHVsZXMKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxBcHAgUGF0aHNcUHl0aG9uLmV4ZQotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5dGhvbi5leGUKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVxDdXJyZW50VmVyc2lvbgotICBSb290PTEyOQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXEluc3RhbGxQYXRoCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSW5zdGFsbFBhdGhcSW5zdGFsbEdyb3VwCi0gIE5ldyBWYWx1ZT0lQ0dST1VQX1NBVkUlCi0gIE5ldyBWYWx1ZT0KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcUHl0aG9uUGF0aAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXExpYjslTUFJTkRJUiVcRExMcwotICBOZXcgVmFsdWU9Ci0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcJVBZX1ZFUlNJT04lXE1vZHVsZXMKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxBcHAgUGF0aHNcUHl0aG9uLmV4ZQotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5dGhvbi5leGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVJlZ2lzdHJ5IGZpZGRsaW5nIGZvciBkb2NzLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Xcml0ZSB0byBIS0xNIGZvciBhZG1pbiwgZWxzZSBIS0NVLiAgS2VlcCB0aGVzZSBibG9ja3Mgb3RoZXJ3aXNlIGlkZW50aWNhbCEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSGVscFxNYWluIFB5dGhvbiBEb2N1bWVudGF0aW9uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcRG9jXGluZGV4Lmh0bWwKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSGVscFxNYWluIFB5dGhvbiBEb2N1bWVudGF0aW9uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcRG9jXGluZGV4Lmh0bWwKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVNldCB0aGUgYXBwIHB1Ymxpc2hlciBhbmQgVVJMIGVudHJpZXMgZm9yIFdpbjJLIGFkZC9yZW1vdmUuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUl0IGRvZXNuJ3QgaHVydCBvbiBvdGhlciBzeXN0ZW1zLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1BcyB1c3VhbCwgd3JpdGUgdG8gSEtMTSBvciBIS0NVIGRlcGVuZGluZyBvbiBBZG1pbiBwcml2cy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Q0FVVElPTjogIElmIHlvdSBzZXQgdGhpcyBpbmZvIG9uIHRoZSAiV2luZG93cyAyMDAwIiBwYWdlIChzdGVwIDYpIG9mIHRoZQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JbnN0YWxsYXRpb24gRXhwZXJ0LCBpdCBvbmx5IHNob3dzIHVwIGluIHRoZSAiSWYiIGJsb2NrIGJlbG93LiAgS2VlcCBpbiBzeW5jaCEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPWh0dHA6Ly93d3cucHl0aG9uLm9yZy8KLSAgVmFsdWUgTmFtZT1IZWxwTGluawotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1QeXRob25MYWJzIGF0IFpvcGUgQ29ycG9yYXRpb24KLSAgVmFsdWUgTmFtZT1QdWJsaXNoZXIKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9aHR0cDovL3d3dy5weXRob24ub3JnLwotICBWYWx1ZSBOYW1lPVVSTEluZm9BYm91dAotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lUFlWRVJfU1RSSU5HJQotICBWYWx1ZSBOYW1lPURpc3BsYXlWZXJzaW9uCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweS5pY28sLTAKLSAgVmFsdWUgTmFtZT1EaXNwbGF5SWNvbgotICBSb290PTIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1odHRwOi8vd3d3LnB5dGhvbi5vcmcvCi0gIFZhbHVlIE5hbWU9SGVscExpbmsKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9UHl0aG9uTGFicyBhdCBab3BlIENvcnBvcmF0aW9uCi0gIFZhbHVlIE5hbWU9UHVibGlzaGVyCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPWh0dHA6Ly93d3cucHl0aG9uLm9yZy8KLSAgVmFsdWUgTmFtZT1VUkxJbmZvQWJvdXQKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JVBZVkVSX1NUUklORyUKLSAgVmFsdWUgTmFtZT1EaXNwbGF5VmVyc2lvbgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHkuaWNvLC0wCi0gIFZhbHVlIE5hbWU9RGlzcGxheUljb24KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UG9wdWxhdGUgU3RhcnQgTWVudSBncm91cAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1TaG9ydGN1dCB0byBpbnN0YWxsZXIgbm8gbWF0dGVyIHdoYXQuCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXHVud2lzZS5leGUKLSAgRGVzdGluYXRpb249JUdST1VQJVxVbmluc3RhbGwgUHl0aG9uLmxuawotICBXb3JraW5nIERpcmVjdG9yeT0lTUFJTkRJUiUKLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDcmVhdGUgU2hvcnRjdXQKLSAgU291cmNlPSVNQUlORElSJVxweXRob24uZXhlCi0gIERlc3RpbmF0aW9uPSVHUk9VUCVcUHl0aG9uIChjb21tYW5kIGxpbmUpLmxuawotICBXb3JraW5nIERpcmVjdG9yeT0lTUFJTkRJUiUKLSAgSWNvbiBQYXRobmFtZT0lTUFJTkRJUiVccHljb24uaWNvCi0gIEtleSBUeXBlPTE1MzYKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXHB5dGhvbncuZXhlCi0gIERlc3RpbmF0aW9uPSVHUk9VUCVcSURMRSAoUHl0aG9uIEdVSSkubG5rCi0gIENvbW1hbmQgT3B0aW9ucz0iJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IgotICBXb3JraW5nIERpcmVjdG9yeT0lTUFJTkRJUiUKLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBDcmVhdGUgU2hvcnRjdXQKLSAgU291cmNlPSVNQUlORElSJVxweXRob253LmV4ZQotICBEZXN0aW5hdGlvbj0lR1JPVVAlXE1vZHVsZSBEb2NzLmxuawotICBDb21tYW5kIE9wdGlvbnM9IiVNQUlORElSJVxUb29sc1xTY3JpcHRzXHB5ZG9jZ3VpLnB5dyIKLSAgV29ya2luZyBEaXJlY3Rvcnk9JU1BSU5ESVIlCi0gIEtleSBUeXBlPTE1MzYKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXERvY1xpbmRleC5odG1sCi0gIERlc3RpbmF0aW9uPSVHUk9VUCVcUHl0aG9uIE1hbnVhbHMubG5rCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUkgZG9uJ3QgdGhpbmsgd2UgbmVlZCB0aGlzLCBidXQgaGF2ZSBhbHdheXMgZG9uZSBpdC4KLWVuZAotaXRlbTogU2VsZi1SZWdpc3RlciBPQ1hzL0RMTHMKLSAgRGVzY3JpcHRpb249VXBkYXRpbmcgU3lzdGVtIENvbmZpZ3VyYXRpb24sIFBsZWFzZSBXYWl0Li4uCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1yZW1hcmtlZCBpdGVtOiBSZW1hcmsKLSAgVGV4dD1Eb24ndCBlbmFibGUgIkRlbGV0ZSBpbi11c2UgZmlsZXMiLiAgSGVyZSdzIHdoYXQgaGFwcGVuczoKLWVuZAotcmVtYXJrZWQgaXRlbTogUmVtYXJrCi0gIFRleHQ9SW5zdGFsbCBQeXRob247IHVuaW5zdGFsbCBQeXRob247IGluc3RhbGwgUHl0aG9uIGFnYWluLiAgUmVib290IHRoZSBtYWNoaW5lLgotZW5kCi1yZW1hcmtlZCBpdGVtOiBSZW1hcmsKLSAgVGV4dD1Ob3cgVU5XSVNFLkVYRSBpcyBtaXNzaW5nLiAgSSB0aGluayB0aGlzIGlzIGEgV2lzZSBidWcsIGJ1dCBzbyBpdCBnb2VzLgotZW5kCi1yZW1hcmtlZCBpdGVtOiBBZGQgVGV4dCB0byBJTlNUQUxMLkxPRwotICBUZXh0PURlbGV0ZSBpbi11c2UgZmlsZXM6IE9uCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBXaXphcmQgQmxvY2sKLSAgRGlyZWN0aW9uIFZhcmlhYmxlPURJUkVDVElPTgotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgQml0bWFwIFBhdGhuYW1lPS5caW5zdGFsbGVyLmJtcAotICBYIFBvc2l0aW9uPTkKLSAgWSBQb3NpdGlvbj0xMAotICBGaWxsZXIgQ29sb3I9MTExNzM3NTkKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1GaW5pc2hlZAotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9SW5zdGFsbGF0aW9uIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBHZXJtYW49SW5zdGFsbGF0aW9uIHZvbiAlQVBQVElUTEUlCi0gICAgVGl0bGUgU3BhbmlzaD1JbnN0YWxhY2nzbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgSXRhbGlhbj1JbnN0YWxsYXppb25lIGRpICVBUFBUSVRMRSUKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mRmluaXNoCi0gICAgICBUZXh0IEZyZW5jaD0mRmluCi0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyCi0gICAgICBUZXh0IFNwYW5pc2g9JlRlcm1pbmFyCi0gICAgICBUZXh0IEl0YWxpYW49JkZpbmUKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgVmFyaWFibGU9RElTQUJMRUQKLSAgICAgIFZhbHVlPSEKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JkNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9JkFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPSZBYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD0mQ2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mQW5udWxsYQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMCAzMjMgNDgKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9SW5zdGFsbGF0aW9uIENvbXBsZXRlZCEKLSAgICAgIFRleHQgRnJlbmNoPUluc3RhbGxhdGlvbiB0ZXJtaW7pZSAhCi0gICAgICBUZXh0IEdlcm1hbj1EaWUgSW5zdGFsbGF0aW9uIGlzdCBhYmdlc2NobG9zc2VuIQotICAgICAgVGV4dCBTcGFuaXNoPaFJbnN0YWxhY2nzbiB0ZXJtaW5hZGEhCi0gICAgICBUZXh0IEl0YWxpYW49SW5zdGFsbGF6aW9uZSBjb21wbGV0YXRhIQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0NCAzMjAgODIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0lQVBQVElUTEUlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQuCi0gICAgICBUZXh0PQotICAgICAgVGV4dD1QcmVzcyB0aGUgRmluaXNoIGJ1dHRvbiB0byBleGl0IHRoaXMgaW5zdGFsbGF0aW9uLgotICAgICAgVGV4dCBGcmVuY2g9JUFQUFRJVExFJSBlc3QgbWFpbnRlbmFudCBpbnN0YWxs6S4KLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBGcmVuY2g9Q2xpcXVleiBzdXIgbGUgYm91dG9uIEZpbiBwb3VyIHF1aXR0ZXIgbCdpbnN0YWxsYXRpb24uCi0gICAgICBUZXh0IEdlcm1hbj0lQVBQVElUTEUlIHd1cmRlIGVyZm9sZ3JlaWNoIGluc3RhbGxpZXJ0LgotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IEdlcm1hbj1LbGlja2VuIFNpZSBhdWYgIldlaXRlciIsIHVtIGRpZSBJbnN0YWxsYXRpb24genUgYmVlbmRlbi4KLSAgICAgIFRleHQgU3BhbmlzaD0lQVBQVElUTEUlIHNlIGhhIGluc3RhbGFkbyBjb24g6XhpdG8uCi0gICAgICBUZXh0IFNwYW5pc2g9Ci0gICAgICBUZXh0IFNwYW5pc2g9UHJlc2lvbmUgZWwgYm90824gVGVybWluYXIgcGFyYSBzYWxpciBkZSBlc3RhIGluc3RhbGFjafNuLgotICAgICAgVGV4dCBJdGFsaWFuPUwnaW5zdGFsbGF6aW9uZSAlQVBQVElUTEUlIOggc3RhdGEgcG9ydGF0YSBhIHRlcm1pbmUgY29uIHN1Y2Nlc3NvLgotICAgICAgVGV4dCBJdGFsaWFuPQotICAgICAgVGV4dCBJdGFsaWFuPVByZW1lcmUgaWwgcHVsc2FudGUgRmluZSBwZXIgdXNjaXJlIGRhbGwnaW5zdGFsbGF6aW9uZS4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwNiAxMDUgMzEyIDIxMAotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PVNwZWNpYWwgV2luZG93cyB0aGFua3MgdG86Ci0gICAgICBUZXh0PQotICAgICAgVGV4dD1XaXNlIFNvbHV0aW9ucywgZm9yIHRoZSB1c2Ugb2YgSW5zdGFsbE1hc3RlciA4LjEuCi0gICAgICBUZXh0PSAgICBodHRwOi8vd3d3Lndpc2Vzb2x1dGlvbnMuY29tLwotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PUxldHRFcnJvciwgRXJpayB2YW4gQmxva2xhbmQsIGZvciB0aGUgUHl0aG9uIGZvciBXaW5kb3dzIGdyYXBoaWMuCi0gICAgICBUZXh0PSAgICBodHRwOi8vd3d3LmxldHRlcnJvci5jb20vCi0gICAgICBUZXh0PQotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9TWFyayBIYW1tb25kLCB3aXRob3V0IHdob3NlIHllYXJzIG9mIGZyZWVseSBzaGFyZWQgV2luZG93cyBleHBlcnRpc2UsIFB5dGhvbiBmb3IgV2luZG93cyB3b3VsZCBzdGlsbCBiZSBQeXRob24gZm9yIERPUy4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDYgOTUgMzEyIDk2Ci0gICAgICBBY3Rpb249MwotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAxCi0gICAgZW5kCi0gIGVuZAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogTmV3IEV2ZW50Ci0gIE5hbWU9Q2FuY2VsCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoaXMgaW5jbHVkZSBzY3JpcHQgc3VwcG9ydHMgYSByb2xsYmFjayB0byBwcmVpbnN0YWxsYXRpb24gc3RhdGUgaWYgdGhlIHVzZXIgY2hvb3NlcyB0byBjYW5jZWwgYmVmb3JlIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGUuCi1lbmQKLWl0ZW06IEluY2x1ZGUgU2NyaXB0Ci0gIFBhdGhuYW1lPSVfV0lTRV8lXElOQ0xVREVccm9sbGJhY2sud3NlCi1lbmQKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbmNvcmUudmNwcm9qIGIvUEMvVlM3LjEvcHl0aG9uY29yZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YzQxODQuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9uY29yZS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw4MjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InB5dGhvbmNvcmUiDQotCVByb2plY3RHVUlEPSJ7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTMwfSINCi0JUm9vdE5hbWVzcGFjZT0icHl0aG9uY29yZSINCi0JU2NjUHJvamVjdE5hbWU9InB5dGhvbmNvcmUiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24zMy5kbGwiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24zMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iZ2VuZXJhdGUgYnVpbGRpbmZvIg0KLQkJCQlDb21tYW5kTGluZT0ibWFrZV9idWlsZGluZm8uZXhlICQoQ29uZmlndXJhdGlvbk5hbWUpIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdccHl0aG9uY29yZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7VVNFX0RMX0VYUE9SVDtXSU4zMjtfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMzX2QuZGxsIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMzNfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24zM19kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJnZW5lcmF0ZSBidWlsZGluZm8iDQotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxweXRob25jb3JlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1VTRV9ETF9FWFBPUlQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24zMy5kbGwiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJGQUxTRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMzMucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMzMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249ImdlbmVyYXRlIGJ1aWxkaW5mbyINCi0JCQkJQ29tbWFuZExpbmU9Im1ha2VfYnVpbGRpbmZvLmV4ZSAkKENvbmZpZ3VyYXRpb25OYW1lKSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxhbWQ2NC10ZW1wLXJlbGVhc2VccHl0aG9uY29yZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24zMy5kbGwiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24zMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iZ2VuZXJhdGUgYnVpbGRpbmZvIg0KLQkJCQlDb21tYW5kTGluZT0ibWFrZV9idWlsZGluZm8uZXhlICQoQ29uZmlndXJhdGlvbk5hbWUpIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iX2lvIg0KLSAgICAgICAgICAgIEZpbHRlcj0iIj4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGZpbGVpby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xieXRlc2lvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHN0cmluZ2lvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ1ZmZlcmVkaW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9caW9iYXNlLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHRleHRpby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuYyI+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotDQotCQk8RmlsdGVyDQotCQkJTmFtZT0iemxpYiINCi0JCQlGaWx0ZXI9IiI+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY29tcHJlc3MuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxnemlvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHVuY29tcHIuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGlibW9kdWxlLmMiPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcemxpYiIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIj4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXHpsaWIiLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiI+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1x6bGliIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIj4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXHpsaWIiLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuYyI+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfY24uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19oay5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2lzbzIwMjIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19qcC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2tyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfdHcuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY29kZWNzbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2NvbGxlY3Rpb25zbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Nzdi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kYXRldGltZW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9mdW5jdG9vbHNtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaGVhcHFtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfanNvbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9sb2NhbGVtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbHNwcm9mLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX21hdGguYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcGlja2xlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcmUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3RydWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBjXF9zdWJwcm9jZXNzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXF93YXJuaW5ncy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF93ZWFrcmVmLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYWJzdHJhY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhY2N1LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxhY2NlbGVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGFzZGwuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGFzdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGF0ZXhpdG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGF1ZGlvb3AuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xiaW5hc2NpaS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcYml0c2V0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxibHRpbm1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlc19tZXRob2RzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZWFycmF5b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjYXBzdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2VsbG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY2V2YWwuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjbGFzc29iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNtYXRobW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjb2RlY3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjb2Rlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjb21waWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29tcGxleG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xjb25maWcuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmFtaWNfYW5ub3RhdGlvbnMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xkZXNjcm9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGRpY3RvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcZGxfbnQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR0b2EuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZW51bW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGVycm5vbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxlcnJvcnMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xleGNlcHRpb25zLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZmlsZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZmlsZXV0aWxzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxmaXJzdHNldHMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmbG9hdG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZm9ybWF0dGVyX3VuaWNvZGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmcmFtZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZm9ybWF0dGVyX3VuaWNvZGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZyb3plbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZ1bmNvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZ1dHVyZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGdjbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZ2Vub2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRhcmdzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRjb21waWxlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0Y29weXJpZ2h0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRvcHQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcZ2V0cGF0aHAuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldHBsYXRmb3JtLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXR2ZXJzaW9uLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxncmFtaW5pdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcZ3JhbW1hci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcZ3JhbW1hcjEuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25caW1wb3J0ZGwuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xpdGVyb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcaXRlcnRvb2xzbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxsaXN0bm9kZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGxpc3RvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xsb25nb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWFpbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbWFyc2hhbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotIAkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxtZXRhZ3JhbW1hci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1lbW9yeW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1ldGhvZG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG1vZHN1cHBvcnQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtb2R1bGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcbXN2Y3J0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxteXJlYWRsaW5lLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxteXNucHJpbnRmLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxteXN0cnRvdWwuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG5vZGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xvYm1hbGxvYy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG9wZXJhdG9yLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxwYXJzZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNldG9rLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxwZWVwaG9sZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWFyZW5hLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWN0eXBlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWZwZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHltYXRoLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0YXRlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0cmNtcC5jIg0KLQkJCT4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdHJ0b2QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5dGltZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cUHl0aG9uLWFzdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fbnQucmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXRob25ydW4uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHJhbmRvbS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHJhbmdlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhMjU2bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhMW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzdHJ1Y3RtZW1iZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJ1Y3RzZXEuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN5bXRhYmxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3ltdGFibGVtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN5c21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RocmVhZG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHRva2VuaXplci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdHJhY2ViYWNrLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdHVwbGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0eXBlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdW5pY29kZWN0eXBlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdW5pY29kZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQY1x3aW5yZWcuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x3ZWFrcmVmb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNceHhzdWJ0eXBlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemlwaW1wb3J0LmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob253LnZjcHJvaiBiL1BDL1ZTNy4xL3B5dGhvbncudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2Q3ZjUwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbncudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJweXRob253Ig0KLQlTY2NQcm9qZWN0TmFtZT0icHl0aG9udyINCi0JU2NjTG9jYWxQYXRoPSIuLlwuLlxwYyI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdccHl0aG9udyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9ud19kLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbndfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbnciDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob253LmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbncucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5dGhvbnciDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9udy5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob253LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VccHl0aG9udyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbncuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9udy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX2V4ZS5yYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcV2luTWFpbi5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcmVhZG1lLnR4dCBiL1BDL1ZTNy4xL3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZDhhNzAuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi1CdWlsZGluZyBQeXRob24gdXNpbmcgVkMrKyA3LjEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoaXMgZGlyZWN0b3J5IGlzIHVzZWQgdG8gYnVpbGQgUHl0aG9uIGZvciBXaW4zMiBwbGF0Zm9ybXMsIGUuZy4gV2luZG93cwotOTUsIDk4IGFuZCBOVC4gIEl0IHJlcXVpcmVzIE1pY3Jvc29mdCBWaXN1YWwgQysrIDcuMQotKGEuay5hLiBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMykuCi0oRm9yIG90aGVyIFdpbmRvd3MgcGxhdGZvcm1zIGFuZCBjb21waWxlcnMsIHNlZSAuLi9QQy9yZWFkbWUudHh0LikKLQotQWxsIHlvdSBuZWVkIHRvIGRvIGlzIG9wZW4gdGhlIHdvcmtzcGFjZSAicGNidWlsZC5zbG4iIGluIE1TVkMrKywgc2VsZWN0Ci10aGUgRGVidWcgb3IgUmVsZWFzZSBzZXR0aW5nICh1c2luZyAiU29sdXRpb24gQ29uZmlndXJhdGlvbiIgZnJvbQotdGhlICJTdGFuZGFyZCIgdG9vbGJhciIpLCBhbmQgYnVpbGQgdGhlIHByb2plY3RzLgotCi1UaGUgcHJvcGVyIG9yZGVyIHRvIGJ1aWxkIHN1YnByb2plY3RzOgotCi0xKSBweXRob25jb3JlICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gRExMIGFuZCBsaWJyYXJ5IGZpbGVzLAotICAgICAgICAgICAgICAgcHl0aG9uMzMue2RsbCwgbGlifSBpbiBSZWxlYXNlIG1vZGUpCi0gICAgICAgICAgICAgIE5PVEU6ICBpbiBwcmV2aW91cyByZWxlYXNlcywgdGhpcyBzdWJwcm9qZWN0IHdhcwotICAgICAgICAgICAgICBuYW1lZCBhZnRlciB0aGUgcmVsZWFzZSBudW1iZXIsIGUuZy4gcHl0aG9uMjAuCi0KLTIpIHB5dGhvbiAodGhpcyBidWlsZHMgdGhlIG1haW4gUHl0aG9uIGV4ZWN1dGFibGUsCi0gICAgICAgICAgIHB5dGhvbi5leGUgaW4gUmVsZWFzZSBtb2RlKQotCi0zKSB0aGUgb3RoZXIgc3VicHJvamVjdHMsIGFzIGRlc2lyZWQgb3IgbmVlZGVkIChub3RlOiAgeW91IHByb2JhYmx5IGRvbid0Ci0gICB3YW50IHRvIGJ1aWxkIG1vc3Qgb2YgdGhlIG90aGVyIHN1YnByb2plY3RzLCB1bmxlc3MgeW91J3JlIGJ1aWxkaW5nIGFuCi0gICBlbnRpcmUgUHl0aG9uIGRpc3RyaWJ1dGlvbiBmcm9tIHNjcmF0Y2gsIG9yIHNwZWNpZmljYWxseSBtYWtpbmcgY2hhbmdlcwotICAgdG8gdGhlIHN1YnN5c3RlbXMgdGhleSBpbXBsZW1lbnQsIG9yIGFyZSBydW5uaW5nIGEgUHl0aG9uIGNvcmUgYnVpbGRib3QKLSAgIHRlc3Qgc2xhdmU7IHNlZSBTVUJQUk9KRUNUUyBiZWxvdykKLQotV2hlbiB1c2luZyB0aGUgRGVidWcgc2V0dGluZywgdGhlIG91dHB1dCBmaWxlcyBoYXZlIGEgX2QgYWRkZWQgdG8KLXRoZWlyIG5hbWU6ICBweXRob24zM19kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4KLQotU1VCUFJPSkVDVFMKLS0tLS0tLS0tLS0tCi1UaGVzZSBzdWJwcm9qZWN0cyBzaG91bGQgYnVpbGQgb3V0IG9mIHRoZSBib3guICBTdWJwcm9qZWN0cyBvdGhlciB0aGFuIHRoZQotbWFpbiBvbmVzIChweXRob25jb3JlLCBweXRob24sIHB5dGhvbncpIGdlbmVyYWxseSBidWlsZCBhIERMTCAocmVuYW1lZCB0bwotLnB5ZCkgZnJvbSBhIHNwZWNpZmljIG1vZHVsZSBzbyB0aGF0IHVzZXJzIGRvbid0IGhhdmUgdG8gbG9hZCB0aGUgY29kZQotc3VwcG9ydGluZyB0aGF0IG1vZHVsZSB1bmxlc3MgdGhleSBpbXBvcnQgdGhlIG1vZHVsZS4KLQotcHl0aG9uY29yZQotICAgIC5kbGwgYW5kIC5saWIKLXB5dGhvbgotICAgIC5leGUKLXB5dGhvbncKLSAgICBweXRob253LmV4ZSwgYSB2YXJpYW50IG9mIHB5dGhvbi5leGUgdGhhdCBkb2Vzbid0IHBvcCB1cCBhIERPUyBib3gKLV9zb2NrZXQKLSAgICBzb2NrZXRtb2R1bGUuYwotX3Rlc3RjYXBpCi0gICAgdGVzdHMgb2YgdGhlIFB5dGhvbiBDIEFQSSwgcnVuIHZpYSBMaWIvdGVzdC90ZXN0X2NhcGkucHksIGFuZAotICAgIGltcGxlbWVudGVkIGJ5IG1vZHVsZSBNb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCi1weWV4cGF0Ci0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIGFjY2VsZXJhdGVkIFhNTCBwYXJzaW5nLCB3aGljaCBpbmNvcnBvcmF0ZXMgc3RhYmxlCi0gICAgY29kZSBmcm9tIHRoZSBFeHBhdCBwcm9qZWN0OiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBhdC8KLXNlbGVjdAotICAgIHNlbGVjdG1vZHVsZS5jCi11bmljb2RlZGF0YQotICAgIGxhcmdlIHRhYmxlcyBvZiBVbmljb2RlIGRhdGEKLXdpbnNvdW5kCi0gICAgcGxheSBzb3VuZHMgKHR5cGljYWxseSAud2F2IGZpbGVzKSB1bmRlciBXaW5kb3dzCi0KLVRoZSBmb2xsb3dpbmcgc3VicHJvamVjdHMgd2lsbCBnZW5lcmFsbHkgTk9UIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgVGhleQotd3JhcCBjb2RlIFB5dGhvbiBkb2Vzbid0IGNvbnRyb2wsIGFuZCB5b3UnbGwgbmVlZCB0byBkb3dubG9hZCB0aGUgYmFzZQotcGFja2FnZXMgZmlyc3QgYW5kIHVucGFjayB0aGVtIGludG8gc2libGluZ3Mgb2YgUEMncyBwYXJlbnQKLWRpcmVjdG9yeTsgZm9yIGV4YW1wbGUsIGlmIHRoaXMgZGlyZWN0b3J5IGlzIC4uLi5cZGlzdFx0cnVua1xQQ1xWUzcuMSwKLXVucGFjayBpbnRvIG5ldyBzdWJkaXJlY3RvcmllcyBvZiBkaXN0XC4KLQotX3RraW50ZXIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uICBSZXF1aXJlcyBidWlsZGluZwotICAgIFRjbC9UayBmaXJzdC4gIEZvbGxvd2luZyBhcmUgaW5zdHJ1Y3Rpb25zIGZvciBUY2wvVGsgOC40LjEyLgotCi0gICAgR2V0IHNvdXJjZQotICAgIC0tLS0tLS0tLS0KLSAgICBJbiB0aGUgZGlzdCBkaXJlY3RvcnksIHJ1bgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RjbDguNC4xMgotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RrOC40LjEyCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGl4LTguNC4wCi0KLSAgICBCdWlsZCBUY2wgZmlyc3QgKGRvbmUgaGVyZSB3LyBNU1ZDIDcuMSBvbiBXaW5kb3dzIFhQKQotICAgIC0tLS0tLS0tLS0tLS0tLQotICAgIFVzZSAiU3RhcnQgLT4gQWxsIFByb2dyYW1zIC0+IE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMwotICAgICAgICAgLT4gVmlzdWFsIFN0dWRpbyAuTkVUIFRvb2xzIC0+IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzIENvbW1hbmQgUHJvbXB0IgotICAgIHRvIGdldCBhIHNoZWxsIHdpbmRvdyB3aXRoIHRoZSBjb3JyZWN0IGVudmlyb25tZW50IHNldHRpbmdzCi0gICAgY2QgZGlzdFx0Y2w4LjQuMTJcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLQotICAgIE9wdGlvbmFsOiAgcnVuIHRlc3RzLCB2aWEKLSAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgdGVzdAotCi0gICAgICAgIE9uIFdpblhQIFBybywgd2hvbGx5IHVwIHRvIGRhdGUgYXMgb2YgMzAtQXVnLTIwMDQ6Ci0gICAgICAgIGFsbC50Y2w6ICAgICAgICBUb3RhbCAgIDEwNjc4ICAgUGFzc2VkICA5OTY5ICAgIFNraXBwZWQgNzA5ICAgICBGYWlsZWQgIDAKLSAgICAgICAgU291cmNlZCAxMjkgVGVzdCBGaWxlcy4KLQotICAgIEJ1aWxkIFRrCi0gICAgLS0tLS0tLS0KLSAgICBjZCBkaXN0XHRrOC40LjEyXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjQuMTIKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC40LjEyIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotCi0gICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwotCi0gICAgWFhYIE91ciBpbnN0YWxsZXIgY29waWVzIGEgbG90IG9mIHN0dWZmIG91dCBvZiB0aGUgVGNsL1RrIGluc3RhbGwKLSAgICBYWFggZGlyZWN0b3J5LiAgSXMgYWxsIG9mIHRoYXQgcmVhbGx5IG5lZWRlZCBmb3IgUHl0aG9uIHVzZSBvZiBUY2wvVGs/Ci0KLSAgICBPcHRpb25hbDogIHJ1biB0ZXN0cywgdmlhCi0gICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjQuMTIgdGVzdAotCi0gICAgICAgIE9uIFdpblhQIFBybywgd2hvbGx5IHVwIHRvIGRhdGUgYXMgb2YgMzAtQXVnLTIwMDQ6Ci0gICAgICAgIGFsbC50Y2w6ICAgICAgICBUb3RhbCAgIDg0MjAgICAgUGFzc2VkICA2ODI2ICAgIFNraXBwZWQgMTU4MSAgICBGYWlsZWQgIDEzCi0gICAgICAgIFNvdXJjZWQgOTEgVGVzdCBGaWxlcy4KLSAgICAgICAgRmlsZXMgd2l0aCBmYWlsaW5nIHRlc3RzOiBjYW52SW1nLnRlc3Qgc2Nyb2xsYmFyLnRlc3QgdGV4dFdpbmQudGVzdCB3aW5XbS50ZXN0Ci0KLSAgIEJ1aWx0IFRpeAotICAgLS0tLS0tLS0tCi0gICBjZCBkaXN0XHRpeC04LjQuMFx3aW4KLSAgIG5tYWtlIC1mIHB5dGhvbi5tYWsKLSAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgaW5zdGFsbAotCi1iejIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIGxpYmJ6MiBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgSG9tZXBhZ2UKLSAgICAgICAgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9iemlwMi8KLSAgICBEb3dubG9hZCB0aGUgc291cmNlIGZyb20gdGhlIHB5dGhvbi5vcmcgY29weSBpbnRvIHRoZSBkaXN0Ci0gICAgZGlyZWN0b3J5OgotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvYnppcDItMS4wLjMKLQotICAgIEEgY3VzdG9tIHByZS1saW5rIHN0ZXAgaW4gdGhlIGJ6MiBwcm9qZWN0IHNldHRpbmdzIHNob3VsZCBtYW5hZ2UgdG8KLSAgICBidWlsZCBiemlwMi0xLjAuM1xsaWJiejIubGliIGJ5IG1hZ2ljIGJlZm9yZSBiejIucHlkIChvciBiejJfZC5weWQpIGlzCi0gICAgbGlua2VkIGluIFZTNy4xXC4KLSAgICBIb3dldmVyLCB0aGUgYnoyIHByb2plY3QgaXMgbm90IHNtYXJ0IGVub3VnaCB0byByZW1vdmUgYW55dGhpbmcgdW5kZXIKLSAgICBiemlwMi0xLjAuM1wgd2hlbiB5b3UgZG8gYSBjbGVhbiwgc28gaWYgeW91IHdhbnQgdG8gcmVidWlsZCBiemlwMi5saWIKLSAgICB5b3UgbmVlZCB0byBjbGVhbiB1cCBiemlwMi0xLjAuM1wgYnkgaGFuZC4KLQotICAgIFRoZSBidWlsZCBzdGVwIHNob3VsZG4ndCB5aWVsZCBhbnkgd2FybmluZ3Mgb3IgZXJyb3JzLCBhbmQgc2hvdWxkIGVuZAotICAgIGJ5IGRpc3BsYXlpbmcgNiBibG9ja3MgZWFjaCB0ZXJtaW5hdGVkIHdpdGgKLSAgICAgICAgRkM6IG5vIGRpZmZlcmVuY2VzIGVuY291bnRlcmVkCi0KLSAgICBBbGwgb2YgdGhpcyBtYW5hZ2VkIHRvIGJ1aWxkIGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIsIHdoaWNoIHRoZSBQeXRob24KLSAgICBwcm9qZWN0IGxpbmtzIGluLgotCi1fc3FsaXRlMwotICAgIFB5dGhvbiB3cmFwcGVyIGZvciBTUUxpdGUgbGlicmFyeS4KLSAgICAKLSAgICBHZXQgdGhlIHNvdXJjZSBjb2RlIHRocm91Z2gKLSAgICAKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9zcWxpdGUtc291cmNlLTMuMy40Ci0gICAgCi0gICAgVG8gdXNlIHRoZSBleHRlbnNpb24gbW9kdWxlIGluIGEgUHl0aG9uIGJ1aWxkIHRyZWUsIGNvcHkgc3FsaXRlMy5kbGwgaW50bwotICAgIHRoZSBWUzcuMSBmb2xkZXIuCi0KLV9zc2wKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIHNlY3VyZSBzb2NrZXRzIGxpYnJhcnkuCi0KLSAgICBHZXQgdGhlIHNvdXJjZSBjb2RlIHRocm91Z2gKLQotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL29wZW5zc2wtMC45LjhhCi0KLSAgICBBbHRlcm5hdGl2ZWx5LCBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gaHR0cDovL3d3dy5vcGVuc3NsLm9yZy4KLSAgICBZb3UgY2FuICh0aGVvcmV0aWNhbGx5KSB1c2UgYW55IHZlcnNpb24gb2YgT3BlblNTTCB5b3UgbGlrZSAtIHRoZQotICAgIGJ1aWxkIHByb2Nlc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgbGF0ZXN0IHZlcnNpb24uCi0KLSAgICBZb3UgbXVzdCBhbHNvIGluc3RhbGwgQWN0aXZlUGVybCBmcm9tCi0gICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL1Byb2R1Y3RzL0FjdGl2ZVBlcmwvCi0gICAgYXMgdGhpcyBpcyB1c2VkIGJ5IHRoZSBPcGVuU1NMIGJ1aWxkIHByb2Nlc3MuICBDb21wbGFpbiB0byB0aGVtIDx3aW5rPi4KLQotICAgIFRoZSBNU1ZDIHByb2plY3Qgc2ltcGx5IGludm9rZXMgYnVpbGRfc3NsLnB5IHRvIHBlcmZvcm0KLSAgICB0aGUgYnVpbGQuICBUaGlzIFB5dGhvbiBzY3JpcHQgbG9jYXRlcyBhbmQgYnVpbGRzIHlvdXIgT3BlblNTTAotICAgIGluc3RhbGxhdGlvbiwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG1ha2VmaWxlIHRvIGJ1aWxkIHRoZSBmaW5hbCAucHlkLgotCi0gICAgYnVpbGRfc3NsLnB5IGF0dGVtcHRzIHRvIGNhdGNoIHRoZSBtb3N0IGNvbW1vbiBlcnJvcnMgKHN1Y2ggYXMgbm90Ci0gICAgYmVpbmcgYWJsZSB0byBmaW5kIE9wZW5TU0wgc291cmNlcywgb3Igbm90IGJlaW5nIGFibGUgdG8gZmluZCBhIFBlcmwKLSAgICB0aGF0IHdvcmtzIHdpdGggT3BlblNTTCkgYW5kIGdpdmUgYSByZWFzb25hYmxlIGVycm9yIG1lc3NhZ2UuCi0gICAgSWYgeW91IGhhdmUgYSBwcm9ibGVtIHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5Ci0gICAgKGVnLCB5b3Uga25vdyB5b3UgaGF2ZSBBY3RpdmVQZXJsIGJ1dCB3ZSBjYW4ndCBmaW5kIGl0KSwgcGxlYXNlIHRha2UKLSAgICBhIHBlZWsgYXQgYnVpbGRfc3NsLnB5IGFuZCBzdWdnZXN0IHBhdGNoZXMuICBOb3RlIHRoYXQgYnVpbGRfc3NsLnB5Ci0gICAgc2hvdWxkIGJlIGFibGUgdG8gYmUgcnVuIGRpcmVjdGx5IGZyb20gdGhlIGNvbW1hbmQtbGluZS4KLQotICAgIGJ1aWxkX3NzbC5weS9NU1ZDIGlzbid0IGNsZXZlciBlbm91Z2ggdG8gY2xlYW4gT3BlblNTTCAtIHlvdSBtdXN0IGRvCi0gICAgdGhpcyBieSBoYW5kLgotCi1CdWlsZGluZyBmb3IgSXRhbml1bQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIHByb2plY3QgZmlsZXMgc3VwcG9ydCBhIFJlbGVhc2VJdGFuaXVtIGNvbmZpZ3VyYXRpb24gd2hpY2ggY3JlYXRlcwotV2luNjQvSXRhbml1bSBiaW5hcmllcy4gRm9yIHRoaXMgdG8gd29yaywgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgUGxhdGZvcm0KLVNESywgaW4gcGFydGljdWxhciB0aGUgNjQtYml0IHN1cHBvcnQuIFRoaXMgaW5jbHVkZXMgYW4gSXRhbml1bSBjb21waWxlcgotKGZ1dHVyZSByZWxlYXNlcyBvZiB0aGUgU0RLIGxpa2VseSBpbmNsdWRlIGFuIEFNRDY0IGNvbXBpbGVyIGFzIHdlbGwpLgotSW4gYWRkaXRpb24sIHlvdSBuZWVkIHRoZSBWaXN1YWwgU3R1ZGlvIHBsdWdpbiBmb3IgZXh0ZXJuYWwgQyBjb21waWxlcnMsCi1mcm9tIGh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvdnNleHRjb21wLiBUaGUgcGx1Z2luIHdpbGwgd3JhcCBjbC5leGUsIHRvCi1sb2NhdGUgdGhlIHByb3BlciB0YXJnZXQgY29tcGlsZXIsIGFuZCBjb252ZXJ0IGNvbXBpbGVyIG9wdGlvbnMKLWFjY29yZGluZ2x5LiBUaGUgcHJvamVjdCBmaWxlcyByZXF1aXJlIGF0bGVhc3QgdmVyc2lvbiAwLjkuCi0KLUJ1aWxkaW5nIGZvciBBTUQ2NAotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBidWlsZCBwcm9jZXNzIGZvciB0aGUgUmVsZWFzZUFNRDY0IGNvbmZpZ3VyYXRpb24gaXMgdmVyeSBzaW1pbGFyCi10byB0aGUgSXRhbml1bSBjb25maWd1cmF0aW9uOyBtYWtlIHN1cmUgeW91IHVzZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YKLXZzZXh0Y29tcC4KLQotQnVpbGRpbmcgUHl0aG9uIFVzaW5nIHRoZSBmcmVlIE1TIFRvb2xraXQgQ29tcGlsZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBidWlsZCBwcm9jZXNzIGZvciBWaXN1YWwgQysrIGNhbiBiZSB1c2VkIGFsbW9zdCB1bmNoYW5nZWQgd2l0aCB0aGUgZnJlZSBNUwotVG9vbGtpdCBDb21waWxlci4gVGhpcyBwcm92aWRlcyBhIHdheSBvZiBidWlsZGluZyBQeXRob24gdXNpbmcgZnJlZWx5Ci1hdmFpbGFibGUgc29mdHdhcmUuCi0KLU5vdGUgdGhhdCBNaWNyb3NvZnQgaGF2ZSB3aXRoZHJhd24gdGhlIGZyZWUgTVMgVG9vbGtpdCBDb21waWxlciwgc28gdGhpcyBjYW4KLW5vIGxvbmdlciBiZSBjb25zaWRlcmVkIGEgc3VwcG9ydGVkIG9wdGlvbi4gVGhlIGluc3RydWN0aW9ucyBhcmUgc3RpbGwKLWNvcnJlY3QsIGJ1dCB5b3UgbmVlZCB0byBhbHJlYWR5IGhhdmUgYSBjb3B5IG9mIHRoZSBjb21waWxlciBpbiBvcmRlciB0byB1c2UKLXRoZW0uIE1pY3Jvc29mdCBub3cgc3VwcGx5IFZpc3VhbCBDKysgMjAwOCBFeHByZXNzIEVkaXRpb24gZm9yIGZyZWUsIGJ1dCB0aGlzCi1pcyBOT1QgY29tcGF0aWJsZSB3aXRoIFZpc3VhbCBDKysgNy4xIChpdCB1c2VzIGEgZGlmZmVyZW50IEMgcnVudGltZSksIGFuZCBzbwotY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYSB2ZXJzaW9uIG9mIFB5dGhvbiBjb21wYXRpYmxlIHdpdGggdGhlIHN0YW5kYXJkCi1weXRob24ub3JnIGJ1aWxkLiBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gdXNpbmcgVmlzdWFsIEMrKyAyMDA4IEV4cHJlc3MKLUVkaXRpb24sIGhvd2V2ZXIsIHlvdSBzaG91bGQgbG9vayBhdCB0aGUgUENCdWlsZCBkaXJlY3RvcnkuCi0KLVJlcXVpcmVtZW50cwotCi0gICAgVG8gYnVpbGQgUHl0aG9uLCB0aGUgZm9sbG93aW5nIHRvb2xzIGFyZSByZXF1aXJlZDoKLQotICAgICogVGhlIFZpc3VhbCBDKysgVG9vbGtpdCBDb21waWxlcgotICAgICAgICBubyBsb25nZXIgYXZhaWxhYmxlIGZvciBkb3dubG9hZCAtIHNlZSBhYm92ZQotICAgICogQSByZWNlbnQgUGxhdGZvcm0gU0RLCi0gICAgICAgIGZyb20gaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2Rvd25sb2Fkcy9kZXRhaWxzLmFzcHg/RmFtaWx5SUQ9NDg0MjY5ZTItM2I4OS00N2UzLThlYjctMWYyYmU2ZDcxMjNhCi0gICAgKiBUaGUgLk5FVCAxLjEgU0RLCi0gICAgICAgIGZyb20gaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2Rvd25sb2Fkcy9kZXRhaWxzLmFzcHg/RmFtaWx5SUQ9OWIzYTJjYTYtMzY0Ny00MDcwLTlmNDEtYTMzM2M2YjkxODFkCi0KLSAgICBbRG9lcyBhbnlvbmUgaGF2ZSBiZXR0ZXIgVVJMcyBmb3IgdGhlIGxhc3QgMiBvZiB0aGVzZT9dCi0KLSAgICBUaGUgdG9vbGtpdCBjb21waWxlciBpcyBuZWVkZWQgYXMgaXQgaXMgYW4gb3B0aW1pc2luZyBjb21waWxlciAodGhlCi0gICAgY29tcGlsZXIgc3VwcGxpZWQgd2l0aCB0aGUgLk5FVCBTREsgaXMgYSBub24tb3B0aW1pc2luZyB2ZXJzaW9uKS4gVGhlCi0gICAgcGxhdGZvcm0gU0RLIGlzIG5lZWRlZCB0byBwcm92aWRlIHRoZSBXaW5kb3dzIGhlYWRlciBmaWxlcyBhbmQgbGlicmFyaWVzCi0gICAgKHRoZSBXaW5kb3dzIDIwMDMgU2VydmVyIFNQMSBlZGl0aW9uLCB0eXBpY2FsIGluc3RhbGwsIGlzIGtub3duIHRvIHdvcmsgLQotICAgIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHZlcnNpb25zIGFyZSBwcm9iYWJseSBmaW5lIGFzIHdlbGwpLiBUaGUgLk5FVCAxLjEKLSAgICBTREsgaXMgbmVlZGVkIGJlY2F1c2UgaXQgY29udGFpbnMgYSB2ZXJzaW9uIG9mIG1zdmNydC5kbGwgd2hpY2ggbGlua3MgdG8KLSAgICB0aGUgbXN2Y3I3MS5kbGwgQ1JULiBOb3RlIHRoYXQgdGhlIC5ORVQgMi4wIFNESyBpcyBOT1QgYWNjZXB0YWJsZSwgYXMgaXQKLSAgICByZWZlcmVuY2VzIG1zdmNyODAuZGxsLgotCi0gICAgQWxsIG9mIHRoZSBhYm92ZSBpdGVtcyBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIG5vcm1hbC4KLQotICAgIElmIHlvdSBpbnRlbmQgdG8gYnVpbGQgdGhlIG9wZW5zc2wgKG5lZWRlZCBmb3IgdGhlIF9zc2wgZXh0ZW5zaW9uKSB5b3UKLSAgICB3aWxsIG5lZWQgdGhlIEMgcnVudGltZSBzb3VyY2VzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBwbGF0Zm9ybSBTREsuCi0KLSAgICBJbiBhZGRpdGlvbiwgeW91IHdpbGwgbmVlZCBOYW50LCBhdmFpbGFibGUgZnJvbQotICAgIGh0dHA6Ly9uYW50LnNvdXJjZWZvcmdlLm5ldC4gVGhlIDAuODUgcmVsZWFzZSBjYW5kaWRhdGUgMyB2ZXJzaW9uIGlzIGtub3duCi0gICAgdG8gd29yay4gVGhpcyBpcyB0aGUgbGF0ZXN0IHJlbGVhc2VkIHZlcnNpb24gYXQgdGhlIHRpbWUgb2Ygd3JpdGluZy4gTGF0ZXIKLSAgICAibmlnaHRseSBidWlsZCIgdmVyc2lvbnMgYXJlIGtub3duIE5PVCB0byB3b3JrIC0gaXQgaXMgbm90IGNsZWFyIGF0Ci0gICAgcHJlc2VudCB3aGV0aGVyIGZ1dHVyZSByZWxlYXNlZCB2ZXJzaW9ucyB3aWxsIHdvcmsuCi0KLVNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50Ci0KLSAgICBTdGFydCBhIHBsYXRmb3JtIFNESyAiYnVpbGQgZW52aXJvbm1lbnQgd2luZG93IiBmcm9tIHRoZSBzdGFydCBtZW51LiBUaGUKLSAgICAiV2luZG93cyBYUCAzMi1iaXQgcmV0YWlsIiB2ZXJzaW9uIGlzIGtub3duIHRvIHdvcmsuCi0KLSAgICBBZGQgdGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyB0byB5b3VyIFBBVEg6Ci0gICAgICAgICogVGhlIHRvb2xraXQgY29tcGlsZXIgZGlyZWN0b3J5Ci0gICAgICAgICogVGhlIFNESyAiV2luNjQiIGJpbmFyaWVzIGRpcmVjdG9yeQotCSogVGhlIE5hbnQgZGlyZWN0b3J5Ci0gICAgQWRkIHRvIHlvdXIgSU5DTFVERSBlbnZpcm9ubWVudCB2YXJpYWJsZToKLSAgICAgICAgKiBUaGUgdG9vbGtpdCBjb21waWxlciBJTkNMVURFIGRpcmVjdG9yeQotICAgIEFkZCB0byB5b3VyIExJQiBlbnZpcm9ubWVudCB2YXJpYWJsZToKLSAgICAgICAgKiBUaGUgdG9vbGtpdCBjb21waWxlciBMSUIgZGlyZWN0b3J5Ci0JKiBUaGUgLk5FVCBTREsgVmlzdWFsIFN0dWRpbyAyMDAzIFZDN1xsaWIgZGlyZWN0b3J5Ci0KLSAgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHNob3VsZCBzZXQgdGhpbmdzIHVwIGFzIHlvdSBuZWVkIHRoZW06Ci0KLSAgICAgICAgcmVtIFNldCB0aGVzZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHdoZXJlIHlvdSBpbnN0YWxsZWQgdGhlIHNvZnR3YXJlCi0gICAgICAgIHNldCBUT09MS0lUPUM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBDKysgVG9vbGtpdCAyMDAzCi0gICAgICAgIHNldCBTREs9QzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgUGxhdGZvcm0gU0RLCi0gICAgICAgIHNldCBORVQ9QzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMKLSAgICAgICAgc2V0IE5BTlQ9QzpcVXRpbHNcTmFudAotCi0gICAgICAgIHNldCBQQVRIPSVUT09MS0lUJVxiaW47JVBBVEglOyVTREslXEJpblx3aW42NDslTkFOVCVcYmluCi0gICAgICAgIHNldCBJTkNMVURFPSVUT09MS0lUJVxpbmNsdWRlOyVJTkNMVURFJQotICAgICAgICBzZXQgTElCPSVUT09MS0lUJVxsaWI7JU5FVCVcVkM3XGxpYjslTElCJQotCi0gICAgVGhlICJ3aW42NCIgZGlyZWN0b3J5IGZyb20gdGhlIFNESyBpcyBhZGRlZCB0byBzdXBwbHkgZXhlY3V0YWJsZXMgc3VjaCBhcwotICAgICJjdnRyZXMiIGFuZCAibGliIiwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgZWxzZXdoZXJlLiBUaGUgdmVyc2lvbnMgaW4gdGhlCi0gICAgIndpbjY0IiBkaXJlY3RvcnkgYXJlIDMyLWJpdCBwcm9ncmFtcywgc28gdGhleSBhcmUgZmluZSB0byB1c2UgaGVyZS4KLQotICAgIFRoYXQncyBpdC4gVG8gYnVpbGQgUHl0aG9uICh0aGUgY29yZSBvbmx5LCBubyBiaW5hcnkgZXh0ZW5zaW9ucyB3aGljaAotICAgIGRlcGVuZCBvbiBleHRlcm5hbCBsaWJyYXJpZXMpIHlvdSBqdXN0IG5lZWQgdG8gaXNzdWUgdGhlIGNvbW1hbmQKLQotICAgICAgICBuYW50IC1idWlsZGZpbGU6cHl0aG9uLmJ1aWxkIGFsbAotCi0gICAgZnJvbSB3aXRoaW4gdGhlIFZTNy4xIGRpcmVjdG9yeS4KLQotRXh0ZW5zaW9uIG1vZHVsZXMKLQotICAgIFRvIGJ1aWxkIHRob3NlIGV4dGVuc2lvbiBtb2R1bGVzIHdoaWNoIHJlcXVpcmUgZXh0ZXJuYWwgbGlicmFyaWVzCi0gICAgKF90a2ludGVyLCBiejIsIF9zcWxpdGUzLCBfc3NsKSB5b3UgY2FuIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zCi0gICAgZm9yIHRoZSBWaXN1YWwgU3R1ZGlvIGJ1aWxkIGFib3ZlLCB3aXRoIGEgZmV3IG1pbm9yIG1vZGlmaWNhdGlvbnMuIFRoZXNlCi0gICAgaW5zdHJ1Y3Rpb25zIGhhdmUgb25seSBiZWVuIHRlc3RlZCB1c2luZyB0aGUgc291cmNlcyBpbiB0aGUgUHl0aG9uCi0gICAgc3VidmVyc2lvbiByZXBvc2l0b3J5IC0gYnVpbGRpbmcgZnJvbSBvcmlnaW5hbCBzb3VyY2VzIHNob3VsZCB3b3JrLCBidXQKLSAgICBoYXMgbm90IGJlZW4gdGVzdGVkLgotCi0gICAgRm9yIGVhY2ggZXh0ZW5zaW9uIG1vZHVsZSB5b3Ugd2lzaCB0byBidWlsZCwgeW91IHNob3VsZCByZW1vdmUgdGhlCi0gICAgYXNzb2NpYXRlZCBpbmNsdWRlIGxpbmUgZnJvbSB0aGUgZXhjbHVkZXByb2plY3RzIHNlY3Rpb24gb2YgcGMuYnVpbGQuCi0KLSAgICBUaGUgY2hhbmdlcyByZXF1aXJlZCBhcmU6Ci0KLSAgICBfdGtpbnRlcgotICAgICAgICBUaGUgdGl4IG1ha2VmaWxlICh0aXgtOC40LjBcd2luXG1ha2VmaWxlLnZjKSBtdXN0IGJlIG1vZGlmaWVkIHRvCi0JcmVtb3ZlIHJlZmVyZW5jZXMgdG8gVE9PTFMzMi4gVGhlIHJlbGV2YW50IGxpbmVzIHNob3VsZCBiZSBjaGFuZ2VkIHRvCi0JcmVhZDoKLSAgICAgICAgICAgIGNjMzIgPSBjbC5leGUKLSAgICAgICAgICAgIGxpbmszMiA9IGxpbmsuZXhlCi0gICAgICAgICAgICBpbmNsdWRlMzIgPSAKLQlUaGUgcmVtYWluZGVyIG9mIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgd2lsbCB3b3JrIGFzIGdpdmVuLgotCi0gICAgYnoyCi0gICAgICAgIE5vIGNoYW5nZXMgYXJlIG5lZWRlZAotCi0gICAgX3NxbGl0ZTMKLSAgICAgICAgTm8gY2hhbmdlcyBhcmUgbmVlZGVkLiBIb3dldmVyLCBpbiBvcmRlciBmb3IgdGhlIHRlc3RzIHRvIHN1Y2NlZWQsIGEKLQljb3B5IG9mIHNxbGl0ZTMuZGxsIG11c3QgYmUgZG93bmxvYWRlZCwgYW5kIHBsYWNlZCBhbG9uZ3NpZGUKLQlweXRob24uZXhlLgotCi0gICAgX3NzbAotICAgICAgICBUaGUgZG9jdW1lbnRlZCBidWlsZCBwcm9jZXNzIHdvcmtzIGFzIHdyaXR0ZW4uIEhvd2V2ZXIsIGl0IG5lZWRzIGEKLQljb3B5IG9mIHRoZSBmaWxlIHNldGFyZ3Yub2JqLCB3aGljaCBpcyBub3Qgc3VwcGxpZWQgaW4gdGhlIHBsYXRmb3JtCi0JU0RLLiBIb3dldmVyLCB0aGUgc291cmNlcyBhcmUgYXZhaWxhYmxlIChpbiB0aGUgY3J0IHNvdXJjZSBjb2RlKS4gVG8KLQlidWlsZCBzZXRhcmd2Lm9iaiwgcHJvY2VlZCBhcyBmb2xsb3dzOgotCi0gICAgICAgIENvcHkgc2V0YXJndi5jLCBjcnVudGltZS5oIGFuZCBpbnRlcm5hbC5oIGZyb20gJVNESyVcc3JjXGNydCB0byBhCi0JdGVtcG9yYXJ5IGRpcmVjdG9yeS4KLQlDb21waWxlIHVzaW5nICJjbCAvYyAvSS4gL01EIC9EX0NSVEJMRCBzZXRhcmd2LmMiCi0JQ29weSB0aGUgcmVzdWx0aW5nIHNldGFyZ3Yub2JqIHRvIHNvbWV3aGVyZSBvbiB5b3VyIExJQiBlbnZpcm9ubWVudAotCSglU0RLJVxsaWIgaXMgYSByZWFzb25hYmxlIHBsYWNlKS4KLQotCVdpdGggc2V0YXJndi5vYmogaW4gcGxhY2UsIHRoZSBzdGFuZGFyZCBidWlsZCBwcm9jZXNzIHNob3VsZCB3b3JrCi0JZmluZS4KLQotWU9VUiBPV04gRVhURU5TSU9OIERMTHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1JZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gZXh0ZW5zaW9uIG1vZHVsZSBETEwsIHRoZXJlJ3MgYW4gZXhhbXBsZQotd2l0aCBlYXN5LXRvLWZvbGxvdyBpbnN0cnVjdGlvbnMgaW4gLi4vUEMvZXhhbXBsZS87IHJlYWQgdGhlIGZpbGUKLXJlYWRtZS50eHQgdGhlcmUgZmlyc3QuCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9ybXB5Yy5weSBiL1BDL1ZTNy4xL3JtcHljLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2M4NTc2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3JtcHljLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBSZW1vdmUgYWxsIHRoZSAucHljIGFuZCAucHlvIGZpbGVzIHVuZGVyIC4uL0xpYi4KLQotCi1kZWYgZGVsdHJlZShyb290KToKLSAgICBpbXBvcnQgb3MKLSAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4KLQotICAgIG5weWMgPSBucHlvID0gMAotICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHJvb3QpOgotICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGRlbGV0ZSA9IEZhbHNlCi0gICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCcucHljJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weWMgKz0gMQotICAgICAgICAgICAgZWxpZiBuYW1lLmVuZHN3aXRoKCcucHlvJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weW8gKz0gMQotCi0gICAgICAgICAgICBpZiBkZWxldGU6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKGpvaW4ocm9vdCwgbmFtZSkpCi0KLSAgICByZXR1cm4gbnB5YywgbnB5bwotCi1ucHljLCBucHlvID0gZGVsdHJlZSgiLi4vTGliIikKLXByaW50IG5weWMsICIucHljIGRlbGV0ZWQsIiwgbnB5bywgIi5weW8gZGVsZXRlZCIKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3J0LmJhdCBiL1BDL1ZTNy4xL3J0LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTkxMGE3OS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9ydC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBSdW4gVGVzdHMuICBSdW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4KLXJlbSBVc2FnZTogIHJ0IFstZF0gWy1PXSBbLXFdIHJlZ3J0ZXN0X2FyZ3MKLXJlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4KLXJlbSAtTyAgIFJ1biBweXRob24uZXhlIG9yIHB5dGhvbl9kLmV4ZSAoc2VlIC1kKSB3aXRoIC1PLgotcmVtIC1xICAgInF1aWNrIiAtLSBub3JtYWxseSB0aGUgdGVzdHMgYXJlIHJ1biB0d2ljZSwgdGhlIGZpcnN0IHRpbWUKLXJlbSAgICAgIGFmdGVyIGRlbGV0aW5nIGFsbCB0aGUgLnB5W2NvXSBmaWxlcyByZWFjaGFibGUgZnJvbSBMaWIvLgotcmVtICAgICAgLXEgcnVucyB0aGUgdGVzdHMganVzdCBvbmNlLCBhbmQgd2l0aG91dCBkZWxldGluZyAucHlbY29dIGZpbGVzLgotcmVtIEFsbCBsZWFkaW5nIGluc3RhbmNlcyBvZiB0aGVzZSBzd2l0Y2hlcyBhcmUgc2hpZnRlZCBvZmYsIGFuZAotcmVtIHdoYXRldmVyIHJlbWFpbnMgaXMgcGFzc2VkIHRvIHJlZ3J0ZXN0LnB5LiAgRm9yIGV4YW1wbGUsCi1yZW0gICAgIHJ0IC1PIC1kIC14IHRlc3RfdGhyZWFkCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAtTyAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAteCB0ZXN0X3RocmVhZAotcmVtIHR3aWNlLCBhbmQKLXJlbSAgICAgcnQgLXEgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHJ1bnMKLXJlbSAgICAgcHl0aG9uX2QgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHRvIGdlbmVyYXRlIHRoZSBleHBlY3RlZC1vdXRwdXQgZmlsZSBmb3IgYmluYXNjaWkgcXVpY2tseS4KLXJlbQotcmVtIENvbmZ1c2luZzogIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgbGlrZQotcmVtICAgICAtdSBuZXR3b3JrLGxhcmdlZmlsZQotcmVtIHRoZW4geW91IGhhdmUgdG8gcXVvdGUgaXQgb24gdGhlIHJ0IGxpbmUsIGxpa2UKLXJlbSAgICAgcnQgLXUgIm5ldHdvcmssbGFyZ2VmaWxlIgotCi1zZXRsb2NhbAotCi1zZXQgZXhlPXB5dGhvbgotc2V0IHFtb2RlPQotc2V0IGRhc2hPPQotUEFUSCAlUEFUSCU7JX5kcDAuLlwuLlwuLlx0Y2x0a1xiaW4KLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1PIiAoc2V0IGRhc2hPPS1PKSAgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXEiIChzZXQgcW1vZGU9eWVzKSAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItZCIgKHNldCBleGU9cHl0aG9uX2QpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgY21kPSVleGUlICVkYXNoTyUgLUUgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKLWlmIGRlZmluZWQgcW1vZGUgZ290byBRbW9kZQotCi1lY2hvIERlbGV0aW5nIC5weWMvLnB5byBmaWxlcyAuLi4KLSVleGUlIHJtcHljLnB5Ci0KLWVjaG8gb24KLSVjbWQlCi1AZWNobyBvZmYKLQotZWNobyBBYm91dCB0byBydW4gYWdhaW4gd2l0aG91dCBkZWxldGluZyAucHljLy5weW8gZmlyc3Q6Ci1wYXVzZQotCi06UW1vZGUKLWVjaG8gb24KLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9zZWxlY3QudmNwcm9qIGIvUEMvVlM3LjEvc2VsZWN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI1MmQ0NS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9zZWxlY3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJzZWxlY3QiDQotCVNjY1Byb2plY3ROYW1lPSJzZWxlY3QiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxzZWxlY3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3NlbGVjdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9zZWxlY3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHNlbGVjdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0X2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyxtc3ZjcnQiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3NlbGVjdF9kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3NlbGVjdF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxzZWxlY3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3NlbGVjdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9zZWxlY3QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vc2VsZWN0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2Vcc2VsZWN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3NlbGVjdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9zZWxlY3QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vc2VsZWN0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNlbGVjdG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvdW5pY29kZWRhdGEudmNwcm9qIGIvUEMvVlM3LjEvdW5pY29kZWRhdGEudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQ3ZjliLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3VuaWNvZGVkYXRhLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0idW5pY29kZWRhdGEiDQotCVNjY1Byb2plY3ROYW1lPSJ1bmljb2RlZGF0YSINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHVuaWNvZGVkYXRhIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi91bmljb2RlZGF0YS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdW5pY29kZWRhdGEucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3VuaWNvZGVkYXRhLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1x1bmljb2RlZGF0YSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vdW5pY29kZWRhdGFfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi91bmljb2RlZGF0YV9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vdW5pY29kZWRhdGEubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVx1bmljb2RlZGF0YSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi91bmljb2RlZGF0YS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vdW5pY29kZWRhdGEucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3VuaWNvZGVkYXRhLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS93OXhwb3Blbi52Y3Byb2ogYi9QQy9WUzcuMS93OXhwb3Blbi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZjNiNGUuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvdzl4cG9wZW4udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJ3OXhwb3BlbiINCi0JU2NjUHJvamVjdE5hbWU9IiINCi0JU2NjTG9jYWxQYXRoPSIiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHc5eHBvcGVuIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vdzl4cG9wZW5fZC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93OXhwb3Blbl9kLnBkYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2Vcdzl4cG9wZW4iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3c5eHBvcGVuLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93OXhwb3Blbi5wZGIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcdzl4cG9wZW4uYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3dpbnNvdW5kLnZjcHJvaiBiL1BDL1ZTNy4xL3dpbnNvdW5kLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM0Y2YzOS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS93aW5zb3VuZC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9IndpbnNvdW5kIg0KLQlTY2NQcm9qZWN0TmFtZT0id2luc291bmQiDQotCVNjY0xvY2FsUGF0aD0iLi5cLi5ccGMiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHdpbnNvdW5kIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi93aW5zb3VuZF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3dpbnNvdW5kX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3dpbnNvdW5kX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vd2luc291bmQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3dpbnNvdW5kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi93aW5zb3VuZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2Vcd2luc291bmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi93aW5zb3VuZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmQucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3dpbnNvdW5kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2Vcd2luc291bmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vd2luc291bmQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3dpbnNvdW5kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi93aW5zb3VuZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcd2luc291bmQuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19jdHlwZXMudmNwcm9qIGIvUEMvVlM4LjAvX2N0eXBlcy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NzMyMzMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX2N0eXBlcy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw3MDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9jdHlwZXMiDQotCVByb2plY3RHVUlEPSJ7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fSINCi0JUm9vdE5hbWVzcGFjZT0iX2N0eXBlcyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY3R5cGVzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY3R5cGVzX2RsZmNuLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpX2NvbW1vbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaWNvbmZpZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaXRhcmdldC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbGJhY2tzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbHByb2MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjZmllbGQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmkuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xtYWxsb2NfY2xvc3VyZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHByZXBfY2lmLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcc3RnZGljdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjMyLmMiDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjY0LmFzbSINCi0JCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL1ppIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcd2luNjQub2JqIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkJQ29tbWFuZExpbmU9Im1sNjQgL25vbG9nbyAvYyAvRm8gJnF1b3Q7JChJbnREaXIpXHdpbjY0Lm9iaiZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsmI3gwQTsiDQotCQkJCQkJT3V0cHV0cz0iJChJbnREaXIpXHdpbjY0Lm9iaiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcd2luNjQub2JqIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcd2luNjQub2JqIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2N0eXBlc190ZXN0LnZjcHJvaiBiL1BDL1ZTOC4wL19jdHlwZXNfdGVzdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NzI0MWUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX2N0eXBlc190ZXN0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX2N0eXBlc190ZXN0Ig0KLQlQcm9qZWN0R1VJRD0iezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0iDQotCVJvb3ROYW1lc3BhY2U9Il9jdHlwZXNfdGVzdCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19lbGVtZW50dHJlZS52Y3Byb2ogYi9QQy9WUzguMC9fZWxlbWVudHRyZWUudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTdkYTcyLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19lbGVtZW50dHJlZS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9lbGVtZW50dHJlZSINCi0JUHJvamVjdEdVSUQ9InsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9Ig0KLQlSb290TmFtZXNwYWNlPSJfZWxlbWVudHRyZWUiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGFzY2lpLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGFzY2lpdGFiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGV4cGF0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGV4cGF0X2NvbmZpZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxleHBhdF9leHRlcm5hbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxpYXNjaWl0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcaW50ZXJuYWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcbGF0aW4xdGFiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XG1hY2NvbmZpZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxuYW1ldGFiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHB5ZXhwYXRucy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx1dGY4dGFiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHdpbmNvbmZpZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2VsZW1lbnR0cmVlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2hhc2hsaWIudmNwcm9qIGIvUEMvVlM4LjAvX2hhc2hsaWIudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDMxZTJlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19oYXNobGliLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX2hhc2hsaWIiDQotCVByb2plY3RHVUlEPSJ7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfSINCi0JUm9vdE5hbWVzcGFjZT0iX2hhc2hsaWIiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaGFzaG9wZW5zc2wuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fbXNpLnZjcHJvaiBiL1BDL1ZTOC4wL19tc2kudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTk3MWM2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19tc2kudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfbXNpIg0KLQlQcm9qZWN0R1VJRD0iezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30iDQotCVJvb3ROYW1lc3BhY2U9Il9tc2kiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXF9tc2kuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fbXVsdGlwcm9jZXNzaW5nLnZjcHJvaiBiL1BDL1ZTOC4wL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjFjYWZjLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfbXVsdGlwcm9jZXNzaW5nIg0KLQlQcm9qZWN0R1VJRD0iezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0iDQotCVJvb3ROYW1lc3BhY2U9Il9tdWx0aXByb2Nlc3NpbmciDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdcbXVsdGlwcm9jZXNzaW5nLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNlbWFwaG9yZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHdpbjMyX2Z1bmN0aW9ucy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19zb2NrZXQudmNwcm9qIGIvUEMvVlM4LjAvX3NvY2tldC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYmQ5ODIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3NvY2tldC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9zb2NrZXQiDQotCVByb2plY3RHVUlEPSJ7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfSINCi0JUm9vdE5hbWVzcGFjZT0iX3NvY2tldCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc29ja2V0bW9kdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fc3FsaXRlMy52Y3Byb2ogYi9QQy9WUzguMC9fc3FsaXRlMy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZjE5ZjEuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3NxbGl0ZTMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNjEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfc3FsaXRlMyINCi0JUHJvamVjdEdVSUQ9InsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9Ig0KLQlSb290TmFtZXNwYWNlPSJfc3FsaXRlMyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNvbm5lY3Rpb24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjdXJzb3IuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtaWNyb3Byb3RvY29scy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1vZHVsZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzcWxpdGVjb21wYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY29ubmVjdGlvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fc3NsLnZjcHJvaiBiL1BDL1ZTOC4wL19zc2wudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTI2N2E0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL19zc2wudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfc3NsIg0KLQlQcm9qZWN0R1VJRD0ie0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0iDQotCVJvb3ROYW1lc3BhY2U9Il9zc2wiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3NsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3RraW50ZXIudmNwcm9qIGIvUEMvVlM4LjAvX3RraW50ZXIudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzAwYmRlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL190a2ludGVyLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3RraW50ZXIiDQotCVByb2plY3RHVUlEPSJ7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfSINCi0JUm9vdE5hbWVzcGFjZT0iX3RraW50ZXIiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0a0RpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0a0xpYkRlYnVnKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0azY0RGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrNjRMaWJEZWJ1ZykiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGtEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGtMaWIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0azY0RGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrNjRMaWIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0a0RpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0a0xpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0azY0RGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrNjRMaWIpIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0azY0RGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrNjRMaWIpIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RraW50ZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdGthcHBpbml0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYmRpc3Rfd2luaW5zdC52Y3Byb2ogYi9QQy9WUzguMC9iZGlzdF93aW5pbnN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDExZWRmMi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9iZGlzdF93aW5pbnN0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iYmRpc3Rfd2luaW5zdCINCi0JUHJvamVjdEdVSUQ9IntFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9Ig0KLQlSb290TmFtZXNwYWNlPSJ3aW5pbnN0Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlNa1R5cExpYkNvbXBhdGlibGU9InRydWUiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQotCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlwuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC50bGIiDQotCQkJCUhlYWRlckZpbGVOYW1lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjEiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGU7Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDOy4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iY29tY3RsMzIubGliIGltYWdlaGxwLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOC4wLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IkxJQkMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTguMC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlPdXRwdXREaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoUGxhdGZvcm1OYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJTWtUeXBMaWJDb21wYXRpYmxlPSJ0cnVlIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCQlUeXBlTGlicmFyeU5hbWU9Ii5cLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QudGxiIg0KLQkJCQlIZWFkZXJGaWxlTmFtZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIxIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQzsuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImNvbWN0bDMyLmxpYiBpbWFnZWhscC5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTguMC1hbWQ2NC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJMSUJDIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC04LjAtYW1kNjQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ig0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3RcZXh0cmFjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxpbnN0YWxsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJ6bGliIg0KLQkJCQk+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJPC9GaWx0ZXI+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3RcYXJjaGl2ZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGUiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxpbnN0YWxsLnJjIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxQeXRob25Qb3dlcmVkLmJtcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZC5iYXQgYi9QQy9WUzguMC9idWlsZC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYzgxODYuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gQSBiYXRjaCBwcm9ncmFtIHRvIGJ1aWxkIG9yIHJlYnVpbGQgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24uCi1yZW0ganVzdCBmb3IgY29udmVuaWVuY2UuCi0KLXNldGxvY2FsCi1zZXQgcGxhdGY9V2luMzIKLXNldCBjb25mPVJlbGVhc2UKLXNldCBidWlsZD0vYnVpbGQKLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1jIiAoc2V0IGNvbmY9JTIpICAgICAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1wIiAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1yIiAoc2V0IGJ1aWxkPS9yZWJ1aWxkKSAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLQotc2V0IGNtZD1kZXZlbnYgcGNidWlsZC5zbG4gJWJ1aWxkJSAiJWNvbmYlfCVwbGF0ZiUiCi1lY2hvICVjbWQlCi0lY21kJQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfZW52LmJhdCBiL1BDL1ZTOC4wL2J1aWxkX2Vudi5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNjdhZTMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfZW52LmJhdAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUAlY29tc3BlYyUgL2sgZW52LmJhdCAlKgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfcGdvLmJhdCBiL1BDL1ZTOC4wL2J1aWxkX3Bnby5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzN2I1YmYuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfcGdvLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIEEgYmF0Y2ggcHJvZ3JhbSB0byBidWlsZCBQR08gKFByb2ZpbGUgZ3VpZGVkIG9wdGltaXphdGlvbikgYnkgZmlyc3QKLXJlbSBidWlsZGluZyBpbnN0cnVtZW50ZWQgYmluYXJpZXMsIHRoZW4gcnVubmluZyB0aGUgdGVzdHN1aXRlLCBhbmQKLXJlbSBmaW5hbGx5IGJ1aWxkaW5nIHRoZSBvcHRpbWl6ZWQgY29kZS4KLXJlbSBOb3RlLCBhZnRlciB0aGUgZmlyc3QgaW5zdHJ1bWVudGVkIHJ1biwgb25lIGNhbiBqdXN0IGtlZXAgb24KLXJlbSBidWlsZGluZyB0aGUgUEdVcGRhdGUgY29uZmlndXJhdGlvbiB3aGlsZSBkZXZlbG9waW5nLgotCi1zZXRsb2NhbAotc2V0IHBsYXRmPVdpbjMyCi0KLXJlbSB1c2UgdGhlIHBlcmZvcm1hbmNlIHRlc3RzdWl0ZS4gIFRoaXMgaXMgcXVpY2sgYW5kIHNpbXBsZQotc2V0IGpvYjE9Li5cLi5cdG9vbHNccHliZW5jaFxweWJlbmNoLnB5IC1uIDEgLUMgMSAtLXdpdGgtZ2MKLXNldCBwYXRoMT0uLlwuLlx0b29sc1xweWJlbmNoCi0KLXJlbSBvciB0aGUgd2hvbGUgdGVzdHN1aXRlIGZvciBtb3JlIHRob3JvdWdoIHRlc3RpbmcKLXNldCBqb2IyPS4uXC4uXGxpYlx0ZXN0XHJlZ3J0ZXN0LnB5Ci1zZXQgcGF0aDI9Li5cLi5cbGliCi0KLXNldCBqb2I9JWpvYjElCi1zZXQgY2xycGF0aD0lcGF0aDElCi0KLTpDaGVja09wdHMKLWlmICIlMSI9PSItcCIgKHNldCBwbGF0Zj0lMikgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItMiIgKHNldCBqb2I9JWpvYjIlKSAmIChzZXQgY2xycGF0aD0lcGF0aDIlKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLQotc2V0IFBHST0lcGxhdGYlLXBnaQotc2V0IFBHTz0lcGxhdGYlLXBnbwotCi1AZWNobyBvbgotcmVtIGJ1aWxkIHRoZSBpbnN0cnVtZW50ZWQgdmVyc2lvbgotY2FsbCBidWlsZCAtcCAlcGxhdGYlIC1jIFBHSW5zdHJ1bWVudAotCi1yZW0gcmVtb3ZlIC5weWMgZmlsZXMsIC5wZ2MgZmlsZXMgYW5kIGV4ZWN1dGUgdGhlIGpvYgotJVBHSSVccHl0aG9uLmV4ZSBybXB5Yy5weSAlY2xycGF0aCUKLWRlbCAlUEdJJVwqLnBnYwotJVBHSSVccHl0aG9uLmV4ZSAlam9iJQotCi1yZW0gZmluYWxseSBidWlsZCB0aGUgb3B0aW1pemVkIHZlcnNpb24KLWlmIGV4aXN0ICVQR08lIGRlbCAvcyAvcSAlUEdPJQotY2FsbCBidWlsZCAtcCAlcGxhdGYlIC1jIFBHVXBkYXRlCi0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkX3NzbC5iYXQgYi9QQy9WUzguMC9idWlsZF9zc2wuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTdiMDhiLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J1aWxkX3NzbC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1AZWNobyBvZmYKLWlmIG5vdCBkZWZpbmVkIEhPU1RfUFlUSE9OICgKLSAgaWYgJTEgRVFVIERlYnVnICgKLSAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uX2QuZXhlCi0gICAgaWYgbm90IGV4aXN0IHB5dGhvbjMzX2QuZGxsIGV4aXQgMQotICApIEVMU0UgKAotICAgIHNldCBIT1NUX1BZVEhPTj1weXRob24uZXhlCi0gICAgaWYgbm90IGV4aXN0IHB5dGhvbjMzLmRsbCBleGl0IDEKLSAgKQotKQotJUhPU1RfUFlUSE9OJSBidWlsZF9zc2wucHkgJTEgJTIgJTMKLQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfc3NsLnB5IGIvUEMvVlM4LjAvYnVpbGRfc3NsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzEzZWY1Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J1aWxkX3NzbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCwwIEBACi0jIFNjcmlwdCBmb3IgYnVpbGRpbmcgdGhlIF9zc2wgYW5kIF9oYXNobGliIG1vZHVsZXMgZm9yIFdpbmRvd3MuCi0jIFVzZXMgUGVybCB0byBzZXR1cCB0aGUgT3BlblNTTCBlbnZpcm9ubWVudCBjb3JyZWN0bHkKLSMgYW5kIGJ1aWxkIE9wZW5TU0wsIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBubWFrZSBzZXNzaW9uCi0jIGZvciB0aGUgYWN0dWFsIF9zc2wucHlkIGFuZCBfaGFzaGxpYi5weWQgRExMcy4KLQotIyBUSEVPUkVUSUNBTExZLCB5b3UgY2FuOgotIyAqIFVucGFjayB0aGUgbGF0ZXN0IFNTTCByZWxlYXNlIG9uZSBsZXZlbCBhYm92ZSB5b3VyIG1haW4gUHl0aG9uIHNvdXJjZQotIyAgIGRpcmVjdG9yeS4gIEl0IGlzIGxpa2VseSB5b3Ugd2lsbCBhbHJlYWR5IGZpbmQgdGhlIHpsaWIgbGlicmFyeSBhbmQKLSMgICBhbnkgb3RoZXIgZXh0ZXJuYWwgcGFja2FnZXMgdGhlcmUuCi0jICogSW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgaXMgc29tZXdoZXJlIG9uIHlvdXIgcGF0aC4KLSMgKiBSdW4gdGhpcyBzY3JpcHQgZnJvbSB0aGUgUEMvVlM4LjAgZGlyZWN0b3J5LgotIwotIyBpdCBzaG91bGQgY29uZmlndXJlIGFuZCBidWlsZCBTU0wsIHRoZW4gYnVpbGQgdGhlIF9zc2wgYW5kIF9oYXNobGliCi0jIFB5dGhvbiBleHRlbnNpb25zIHdpdGhvdXQgaW50ZXJ2ZW50aW9uLgotCi0jIE1vZGlmaWVkIGJ5IENocmlzdGlhbiBIZWltZXMKLSMgTm93IHRoaXMgc2NyaXB0IHN1cHBvcnRzIHByZS1nZW5lcmF0ZWQgbWFrZWZpbGVzIGFuZCBhc3NlbWJseSBmaWxlcy4KLSMgRGV2ZWxvcGVycyBkb24ndCBuZWVkIGFuIGluc3RhbGxhdGlvbiBvZiBQZXJsIGFueW1vcmUgdG8gYnVpbGQgUHl0aG9uLiBBIHN2bgotIyBjaGVja291dCBmcm9tIG91ciBzdm4gcmVwb3NpdG9yeSBpcyBlbm91Z2guCi0jCi0jIEluIE9yZGVyIHRvIGNyZWF0ZSB0aGUgZmlsZXMgaW4gdGhlIGNhc2Ugb2YgYW4gdXBkYXRlIHlvdSBzdGlsbCBuZWVkIFBlcmwuCi0jIFJ1biBidWlsZF9zc2wgaW4gdGhpcyBvcmRlcjoKLSMgcHl0aG9uLmV4ZSBidWlsZF9zc2wucHkgUmVsZWFzZSB4NjQKLSMgcHl0aG9uLmV4ZSBidWlsZF9zc2wucHkgUmVsZWFzZSBXaW4zMgotCi1pbXBvcnQgb3MsIHN5cywgcmUsIHNodXRpbAotCi0jIEZpbmQgYWxsICJmb28uZXhlIiBmaWxlcyBvbiB0aGUgUEFUSC4KLWRlZiBmaW5kX2FsbF9vbl9wYXRoKGZpbGVuYW1lLCBleHRyYXMgPSBOb25lKToKLSAgICBlbnRyaWVzID0gb3MuZW52aXJvblsiUEFUSCJdLnNwbGl0KG9zLnBhdGhzZXApCi0gICAgcmV0ID0gW10KLSAgICBmb3IgcCBpbiBlbnRyaWVzOgotICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIGlmIGV4dHJhczoKLSAgICAgICAgZm9yIHAgaW4gZXh0cmFzOgotICAgICAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIHJldHVybiByZXQKLQotIyBGaW5kIGEgc3VpdGFibGUgUGVybCBpbnN0YWxsYXRpb24gZm9yIE9wZW5TU0wuCi0jIGN5Z3dpbiBwZXJsIGRvZXMgKm5vdCogd29yay4gIEFjdGl2ZVBlcmwgZG9lcy4KLSMgQmVpbmcgYSBQZXJsIGR1bW15LCB0aGUgc2ltcGxlc3Qgd2F5IEkgY2FuIGNoZWNrIGlzIGlmIHRoZSAiV2luMzIiIHBhY2thZ2UKLSMgaXMgYXZhaWxhYmxlLgotZGVmIGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKToKLSAgICBmb3IgcGVybCBpbiBwZXJsczoKLSAgICAgICAgZmggPSBvcy5wb3BlbignIiVzIiAtZSAidXNlIFdpbjMyOyInICUgcGVybCkKLSAgICAgICAgZmgucmVhZCgpCi0gICAgICAgIHJjID0gZmguY2xvc2UoKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHJldHVybiBwZXJsCi0gICAgcHJpbnQoIkNhbiBub3QgZmluZCBhIHN1aXRhYmxlIFBFUkw6IikKLSAgICBpZiBwZXJsczoKLSAgICAgICAgcHJpbnQoIiB0aGUgZm9sbG93aW5nIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQ6IikKLSAgICAgICAgZm9yIHAgaW4gcGVybHM6Ci0gICAgICAgICAgICBwcmludCgiICIsIHApCi0gICAgICAgIHByaW50KCIgTm9uZSBvZiB0aGVzZSB2ZXJzaW9ucyBhcHBlYXIgc3VpdGFibGUgZm9yIGJ1aWxkaW5nIE9wZW5TU0wiKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCIgTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIpCi0gICAgcHJpbnQoIiBQbGVhc2UgaW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgYXBwZWFycyBvbiB5b3VyIHBhdGgiKQotICAgIHJldHVybiBOb25lCi0KLSMgTG9jYXRlIHRoZSBiZXN0IFNTTCBkaXJlY3RvcnkgZ2l2ZW4gYSBmZXcgcm9vdHMgdG8gbG9vayBpbnRvLgotZGVmIGZpbmRfYmVzdF9zc2xfZGlyKHNvdXJjZXMpOgotICAgIGNhbmRpZGF0ZXMgPSBbXQotICAgIGZvciBzIGluIHNvdXJjZXM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgbm90ZTogZG8gbm90IGFic3BhdGggczsgdGhlIGJ1aWxkIHdpbGwgZmFpbCBpZiBhbnkKLSAgICAgICAgICAgICMgaGlnaGVyIHVwIGRpcmVjdG9yeSBuYW1lIGhhcyBzcGFjZXMgaW4gaXQuCi0gICAgICAgICAgICBmbmFtZXMgPSBvcy5saXN0ZGlyKHMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIGZuYW1lcyA9IFtdCi0gICAgICAgIGZvciBmbmFtZSBpbiBmbmFtZXM6Ci0gICAgICAgICAgICBmcW4gPSBvcy5wYXRoLmpvaW4ocywgZm5hbWUpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZxbikgYW5kIGZuYW1lLnN0YXJ0c3dpdGgoIm9wZW5zc2wtIik6Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoZnFuKQotICAgICMgTm93IHdlIGhhdmUgYWxsIHRoZSBjYW5kaWRhdGVzLCBsb2NhdGUgdGhlIGJlc3QuCi0gICAgYmVzdF9wYXJ0cyA9IFtdCi0gICAgYmVzdF9uYW1lID0gTm9uZQotICAgIGZvciBjIGluIGNhbmRpZGF0ZXM6Ci0gICAgICAgIHBhcnRzID0gcmUuc3BsaXQoIlsuLV0iLCBvcy5wYXRoLmJhc2VuYW1lKGMpKVsxOl0KLSAgICAgICAgIyBlZyAtIG9wZW5zc2wtMC45LjctYmV0YTEgLSBpZ25vcmUgYWxsICJiZXRhIiBvciBhbnkgb3RoZXIgcXVhbGlmaWVycwotICAgICAgICBpZiBsZW4ocGFydHMpID49IDQ6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBwYXJ0cyA+IGJlc3RfcGFydHM6Ci0gICAgICAgICAgICBiZXN0X3BhcnRzID0gcGFydHMKLSAgICAgICAgICAgIGJlc3RfbmFtZSA9IGMKLSAgICBpZiBiZXN0X25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIHByaW50KCJGb3VuZCBhbiBTU0wgZGlyZWN0b3J5IGF0ICclcyciICUgKGJlc3RfbmFtZSwpKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCJDb3VsZCBub3QgZmluZCBhbiBTU0wgZGlyZWN0b3J5IGluICclcyciICUgKHNvdXJjZXMsKSkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByZXR1cm4gYmVzdF9uYW1lCi0KLWRlZiBjcmVhdGVfbWFrZWZpbGU2NChtYWtlZmlsZSwgbTMyKToKLSAgICAiIiJDcmVhdGUgYW5kIGZpeCBtYWtlZmlsZSBmb3IgNjRiaXQKLQotICAgIFJlcGxhY2UgMzIgd2l0aCA2NGJpdCBkaXJlY3RvcmllcwotICAgICIiIgotICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtMzIpOgotICAgICAgICByZXR1cm4KLSAgICB3aXRoIG9wZW4obTMyKSBhcyBmaW46Ci0gICAgICAgIHdpdGggb3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBmb3V0OgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIj10bXAzMiIsICI9dG1wNjQiKQotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIj1vdXQzMiIsICI9b3V0NjQiKQotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIj1pbmMzMiIsICI9aW5jNjQiKQotICAgICAgICAgICAgICAgICMgZm9yY2UgNjQgYml0IG1hY2hpbmUKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJNS0xJQj1saWIiLCAiTUtMSUI9bGliIC9NQUNISU5FOlg2NCIpCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiTEZMQUdTPSIsICJMRkxBR1M9L01BQ0hJTkU6WDY0ICIpCi0gICAgICAgICAgICAgICAgIyBkb24ndCBsaW5rIGFnYWluc3QgdGhlIGxpYiBvbiA2NGJpdCBzeXN0ZW1zCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiYnVmZmVyb3ZlcmZsb3d1LmxpYiIsICIiKQotICAgICAgICAgICAgICAgIGZvdXQud3JpdGUobGluZSkKLSAgICBvcy51bmxpbmsobTMyKQotCi1kZWYgZml4X21ha2VmaWxlKG1ha2VmaWxlKToKLSAgICAiIiJGaXggc29tZSBzdHVmZiBpbiBhbGwgbWFrZWZpbGVzCi0gICAgIiIiCi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKToKLSAgICAgICAgcmV0dXJuCi0gICAgd2l0aCBvcGVuKG1ha2VmaWxlKSBhcyBmaW46Ci0gICAgICAgIGxpbmVzID0gZmluLnJlYWRsaW5lcygpCi0gICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6Ci0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJQRVJMPSIpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkNQPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSAiQ1A9Y29weVxuIgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJNS0RJUj0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gIk1LRElSPW1rZGlyXG4iCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkNGTEFHPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBmb3IgYWxnbyBpbiAoIlJDNSIsICJNREMyIiwgIklERUEiKToKLSAgICAgICAgICAgICAgICAgICAgbm9hbGdvID0gIiAtRE9QRU5TU0xfTk9fJXMiICUgYWxnbwotICAgICAgICAgICAgICAgICAgICBpZiBub2FsZ28gbm90IGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArIG5vYWxnbwotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJ1xuJwotICAgICAgICAgICAgZm91dC53cml0ZShsaW5lKQotCi1kZWYgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCk6Ci0gICAgcHJpbnQoInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKyIgbm8taWRlYSBuby1tZGMyIikKLSAgICBvcy5zeXN0ZW0oInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKyIgbm8taWRlYSBuby1tZGMyIikKLSAgICBwcmludChkb19zY3JpcHQpCi0gICAgb3Muc3lzdGVtKGRvX3NjcmlwdCkKLQotZGVmIGNtcChmMSwgZjIpOgotICAgIGJ1ZnNpemUgPSAxMDI0ICogOAotICAgIHdpdGggb3BlbihmMSwgJ3JiJykgYXMgZnAxLCBvcGVuKGYyLCAncmInKSBhcyBmcDI6Ci0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBiMSA9IGZwMS5yZWFkKGJ1ZnNpemUpCi0gICAgICAgICAgICBiMiA9IGZwMi5yZWFkKGJ1ZnNpemUpCi0gICAgICAgICAgICBpZiBiMSAhPSBiMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIGlmIG5vdCBiMToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi1kZWYgY29weShzcmMsIGRzdCk6Ci0gICAgaWYgb3MucGF0aC5pc2ZpbGUoZHN0KSBhbmQgY21wKHNyYywgZHN0KToKLSAgICAgICAgcmV0dXJuCi0gICAgc2h1dGlsLmNvcHkoc3JjLCBkc3QpCi0KLWRlZiBtYWluKCk6Ci0gICAgYnVpbGRfYWxsID0gIi1hIiBpbiBzeXMuYXJndgotICAgIGlmIHN5cy5hcmd2WzFdID09ICJSZWxlYXNlIjoKLSAgICAgICAgZGVidWcgPSBGYWxzZQotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gIkRlYnVnIjoKLSAgICAgICAgZGVidWcgPSBUcnVlCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihzdHIoc3lzLmFyZ3YpKQotCi0gICAgaWYgc3lzLmFyZ3ZbMl0gPT0gIldpbjMyIjoKLSAgICAgICAgYXJjaCA9ICJ4ODYiCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU4zMiIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb19uYXNtIgotICAgICAgICBtYWtlZmlsZT0ibXNcXG50Lm1hayIKLSAgICAgICAgbTMyID0gbWFrZWZpbGUKLSAgICAgICAgZGlyc3VmZml4ID0gIjMyIgotICAgIGVsaWYgc3lzLmFyZ3ZbMl0gPT0gIng2NCI6Ci0gICAgICAgIGFyY2g9ImFtZDY0IgotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lONjRBIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX3dpbjY0YSIKLSAgICAgICAgbWFrZWZpbGUgPSAibXNcXG50NjQubWFrIgotICAgICAgICBtMzIgPSBtYWtlZmlsZS5yZXBsYWNlKCc2NCcsICcnKQotICAgICAgICBkaXJzdWZmaXggPSAiNjQiCi0gICAgICAgICNvcy5lbnZpcm9uWyJWU0VYVENPTVBfVVNFQ0wiXSA9ICJNU19PUFRFUk9OIgotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3Ioc3RyKHN5cy5hcmd2KSkKLQotICAgIG1ha2VfZmxhZ3MgPSAiIgotICAgIGlmIGJ1aWxkX2FsbDoKLSAgICAgICAgbWFrZV9mbGFncyA9ICItYSIKLSAgICAjIHBlcmwgc2hvdWxkIGJlIG9uIHRoZSBwYXRoLCBidXQgd2UgYWxzbyBsb29rIGluICJccGVybCIgYW5kICJjOlxccGVybCIKLSAgICAjIGFzICJ3ZWxsIGtub3duIiBsb2NhdGlvbnMKLSAgICBwZXJscyA9IGZpbmRfYWxsX29uX3BhdGgoInBlcmwuZXhlIiwgWyJcXHBlcmxcXGJpbiIsICJDOlxccGVybFxcYmluIl0pCi0gICAgcGVybCA9IGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKQotICAgIGlmIHBlcmw6Ci0gICAgICAgIHByaW50KCJGb3VuZCBhIHdvcmtpbmcgcGVybCBhdCAnJXMnIiAlIChwZXJsLCkpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIk5vIFBlcmwgaW5zdGFsbGF0aW9uIHdhcyBmb3VuZC4gRXhpc3RpbmcgTWFrZWZpbGVzIGFyZSB1c2VkLiIpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgIyBMb29rIGZvciBTU0wgMyBsZXZlbHMgdXAgZnJvbSBQQy9WUzguMCAtIGllLCBzYW1lIHBsYWNlIHpsaWIgZXRjIGFsbCBsaXZlLgotICAgIHNzbF9kaXIgPSBmaW5kX2Jlc3Rfc3NsX2RpcigoIi4uXFwuLlxcLi4iLCkpCi0gICAgaWYgc3NsX2RpciBpcyBOb25lOgotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgb2xkX2NkID0gb3MuZ2V0Y3dkKCkKLSAgICB0cnk6Ci0gICAgICAgIG9zLmNoZGlyKHNzbF9kaXIpCi0gICAgICAgICMgcmVidWlsZCBtYWtlZmlsZSB3aGVuIHdlIGRvIHRoZSByb2xlIG92ZXIgZnJvbSAzMiB0byA2NCBidWlsZAotICAgICAgICBpZiBhcmNoID09ICJhbWQ2NCIgYW5kIG9zLnBhdGguaXNmaWxlKG0zMikgYW5kIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSk6Ci0gICAgICAgICAgICBvcy51bmxpbmsobTMyKQotCi0gICAgICAgICMgSWYgdGhlIHNzbCBtYWtlZmlsZXMgZG8gbm90IGV4aXN0LCB3ZSBpbnZva2UgUGVybCB0byBnZW5lcmF0ZSB0aGVtLgotICAgICAgICAjIER1ZSB0byBhIGJ1ZyBpbiB0aGlzIHNjcmlwdCwgdGhlIG1ha2VmaWxlIHNvbWV0aW1lcyBlbmRlZCB1cCBlbXB0eQotICAgICAgICAjIEZvcmNlIGEgcmVnZW5lcmF0aW9uIGlmIGl0IGlzLgotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpIG9yIG9zLnBhdGguZ2V0c2l6ZShtYWtlZmlsZSk9PTA6Ci0gICAgICAgICAgICBpZiBwZXJsIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIlBlcmwgaXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIG1ha2VmaWxlcyEiKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICAgICAgICAgIHByaW50KCJDcmVhdGluZyB0aGUgbWFrZWZpbGVzLi4uIikKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgIyBQdXQgb3VyIHdvcmtpbmcgUGVybCBhdCB0aGUgZnJvbnQgb2Ygb3VyIHBhdGgKLSAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXSA9IG9zLnBhdGguZGlybmFtZShwZXJsKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGhzZXAgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0KLSAgICAgICAgICAgIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpCi0gICAgICAgICAgICBpZiBkZWJ1ZzoKLSAgICAgICAgICAgICAgICBwcmludCgiT3BlblNTTCBkZWJ1ZyBidWlsZHMgYXJlbid0IHN1cHBvcnRlZC4iKQotICAgICAgICAgICAgI2lmIGFyY2g9PSJ4ODYiIGFuZCBkZWJ1ZzoKLSAgICAgICAgICAgICMgICAgIyB0aGUgZG9fbWFzbSBzY3JpcHQgaW4gb3BlbnNzbCBkb2Vzbid0IGdlbmVyYXRlIGEgZGVidWcKLSAgICAgICAgICAgICMgICAgIyBidWlsZCBtYWtlZmlsZSBzbyB3ZSBnZW5lcmF0ZSBpdCBoZXJlOgotICAgICAgICAgICAgIyAgICBvcy5zeXN0ZW0oInBlcmwgdXRpbFxtazFtZi5wbCBkZWJ1ZyAiK2NvbmZpZ3VyZSsiID4iK21ha2VmaWxlKQotCi0gICAgICAgICAgICBpZiBhcmNoID09ICJhbWQ2NCI6Ci0gICAgICAgICAgICAgICAgY3JlYXRlX21ha2VmaWxlNjQobWFrZWZpbGUsIG0zMikKLSAgICAgICAgICAgIGZpeF9tYWtlZmlsZShtYWtlZmlsZSkKLSAgICAgICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmYuaCIsIHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCkKLSAgICAgICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmYuaCIsIHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCkKLQotICAgICAgICAjIElmIHRoZSBhc3NlbWJsZXIgZmlsZXMgZG9uJ3QgZXhpc3QgaW4gdG1wWFgsIGNvcHkgdGhlbSB0aGVyZQotICAgICAgICBpZiBwZXJsIGlzIE5vbmUgYW5kIG9zLnBhdGguZXhpc3RzKCJhc20iK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoInRtcCIrZGlyc3VmZml4KToKLSAgICAgICAgICAgICAgICBvcy5ta2RpcigidG1wIitkaXJzdWZmaXgpCi0gICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKCJhc20iK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGYuZW5kc3dpdGgoIi5hc20iKTogY29udGludWUKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShyInRtcCVzXCVzIiAlIChkaXJzdWZmaXgsIGYpKTogY29udGludWUKLSAgICAgICAgICAgICAgICBzaHV0aWwuY29weShyImFzbSVzXCVzIiAlIChkaXJzdWZmaXgsIGYpLCAidG1wIitkaXJzdWZmaXgpCi0KLSAgICAgICAgIyBOb3cgcnVuIG1ha2UuCi0gICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IjoKLSAgICAgICAgICAgIHJjID0gb3Muc3lzdGVtKCJtbDY0IC1jIC1Gb21zXFx1cHRhYmxlLm9iaiBtc1xcdXB0YWJsZS5hc20iKQotICAgICAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIm1sNjQgYXNzZW1ibGVyIGhhcyBmYWlsZWQuIikKLSAgICAgICAgICAgICAgICBzeXMuZXhpdChyYykKLQotICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cYnVpbGRpbmYuaCIpCi0gICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xvcGVuc3NsY29uZi5oIikKLQotICAgICAgICAjbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyBQRVJMPVwiJXNcIiAtZiBcIiVzXCIiICUocGVybCwgbWFrZWZpbGUpCi0gICAgICAgIG1ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gLWYgXCIlc1wiIiAlIG1ha2VmaWxlCi0gICAgICAgIHByaW50KCJFeGVjdXRpbmcgc3NsIG1ha2VmaWxlczoiLCBtYWtlQ29tbWFuZCkKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIHByaW50KCJFeGVjdXRpbmcgIittYWtlZmlsZSsiIGZhaWxlZCIpCi0gICAgICAgICAgICBwcmludChyYykKLSAgICAgICAgICAgIHN5cy5leGl0KHJjKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIG9zLmNoZGlyKG9sZF9jZCkKLSAgICBzeXMuZXhpdChyYykKLQotaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF90a2ludGVyLnB5IGIvUEMvVlM4LjAvYnVpbGRfdGtpbnRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE1OTAzOS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF90a2ludGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotIiIiU2NyaXB0IHRvIGNvbXBpbGUgdGhlIGRlcGVuZGVuY2llcyBvZiBfdGtpbnRlcgotCi1Db3B5cmlnaHQgKGMpIDIwMDcgYnkgQ2hyaXN0aWFuIEhlaW1lcyA8Y2hyaXN0aWFuQGNoZWltZXMuZGU+Ci0KLUxpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotaGVyZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQotcGFyID0gb3MucGF0aC5wYXJkaXIKLQotaWYgMToKLSAgICBUQ0wgPSAidGNsOC40LjE2IgotICAgIFRLID0gInRrOC40LjE2IgotICAgIFRJWCA9ICJ0aXgtOC40LjAiCi1lbHNlOgotICAgIFRDTCA9ICJ0Y2w4LjViMyIKLSAgICBUSyA9ICJ0Y2w4LjViMyIKLSAgICBUSVggPSAiVGl4OC40LjIiCi0KLVJPT1QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGhlcmUsIHBhciwgcGFyLCBwYXIpKQotIyBXaW5kb3dzIDIwMDAgY29tcGF0aWJpbGl0eTogV0lOVkVSIDB4MDUwMAotIyBodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMzgzNzQ1LmFzcHgKLU5NQUtFID0gIm5tYWtlIC9ub2xvZ28gL2YgJXMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgJXMgJXMiCi0KLWRlZiBubWFrZShtYWtlZmlsZSwgY29tbWFuZD0iIiwgKiprdyk6Ci0gICAgZGVmaW5lcyA9ICcgJy5qb2luKGsrJz0nK3YgZm9yIGssIHYgaW4ga3cuaXRlbXMoKSkKLSAgICBjbWQgPSBOTUFLRSAlIChtYWtlZmlsZSwgZGVmaW5lcywgY29tbWFuZCkKLSAgICBwcmludCgiXG5cbiIrY21kKyJcbiIpCi0gICAgaWYgb3Muc3lzdGVtKGNtZCkgIT0gMDoKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKGNtZCkKLQotZGVmIGJ1aWxkKHBsYXRmb3JtLCBjbGVhbik6Ci0gICAgaWYgcGxhdGZvcm0gPT0gIldpbjMyIjoKLSAgICAgICAgZGVzdCA9IG9zLnBhdGguam9pbihST09ULCAidGNsdGsiKQotICAgICAgICBtYWNoaW5lID0gIlg4NiIKLSAgICBlbGlmIHBsYXRmb3JtID09ICJ4NjQiOgotICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKFJPT1QsICJ0Y2x0azY0IikKLSAgICAgICAgbWFjaGluZSA9ICJYNjQiCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihwbGF0Zm9ybSkKLQotICAgICMgVENMCi0gICAgdGNsZGlyID0gb3MucGF0aC5qb2luKFJPT1QsIFRDTCkKLSAgICBpZiAxOgotICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4odGNsZGlyLCAid2luIikpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImNsZWFuIikKLSAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIikKLSAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImluc3RhbGwiLCBJTlNUQUxMRElSPWRlc3QpCi0KLSAgICAjIFRLCi0gICAgaWYgMToKLSAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKFJPT1QsIFRLLCAid2luIikpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImNsZWFuIiwgVENMRElSPXRjbGRpcikKLSAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgVENMRElSPXRjbGRpcikKLSAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImluc3RhbGwiLCBUQ0xESVI9dGNsZGlyLCBJTlNUQUxMRElSPWRlc3QpCi0KLSAgICAjIFRJWAotICAgIGlmIDE6Ci0gICAgICAgICMgcHl0aG9uOS5tYWsgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZwotICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oUk9PVCwgVElYLCAid2luIikpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2UoInB5dGhvbjkubWFrIiwgImNsZWFuIikKLSAgICAgICAgbm1ha2UoInB5dGhvbjkubWFrIiwgTUFDSElORT1tYWNoaW5lKQotICAgICAgICBubWFrZSgicHl0aG9uOS5tYWsiLCAiaW5zdGFsbCIpCi0KLWRlZiBtYWluKCk6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSA8IDIgb3Igc3lzLmFyZ3ZbMV0gbm90IGluICgiV2luMzIiLCAieDY0Iik6Ci0gICAgICAgIHByaW50KCIlcyBXaW4zMnx4NjQiICUgc3lzLmFyZ3ZbMF0pCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBpZiAiLWMiIGluIHN5cy5hcmd2OgotICAgICAgICBjbGVhbiA9IFRydWUKLSAgICBlbHNlOgotICAgICAgICBjbGVhbiA9IEZhbHNlCi0KLSAgICBidWlsZChzeXMuYXJndlsxXSwgY2xlYW4pCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J6Mi52Y3Byb2ogYi9QQy9WUzguMC9iejIudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjExOTc5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J6Mi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1ODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9ImJ6MiINCi0JUHJvamVjdEdVSUQ9Ins3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9Ig0KLQlSb290TmFtZXNwYWNlPSJiejIiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYnoybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJiemlwMiAxLjAuNiBIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJ6bGliLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWJfcHJpdmF0ZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iYnppcDIgMS4wLjYgU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxibG9ja3NvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGNvbXByZXNzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcY3JjdGFibGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxkZWNvbXByZXNzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcaHVmZm1hbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXHJhbmR0YWJsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2RlYnVnLnZzcHJvcHMgYi9QQy9WUzguMC9kZWJ1Zy52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzY0M2NiLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2RlYnVnLnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iZGVidWciDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJLaWxsUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoT3V0RGlyKVxraWxsX3B5dGhvbl9kLmV4ZSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvZW52LmJhdCBiL1BDL1ZTOC4wL2Vudi5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0OTkwYTguLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvZW52LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGVjaG8gb2ZmCi1zZXQgVlM4PSVQcm9ncmFtRmlsZXMlXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDgKLWVjaG8gQnVpbGQgZW52aXJvbm1lbnRzOiB4ODYsIGlhNjQsIGFtZDY0LCB4ODZfYW1kNjQsIHg4Nl9pYTY0Ci1lY2hvLgotY2FsbCAiJVZTOCVcVkNcdmN2YXJzYWxsLmJhdCIgJTEKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2ZpZWxkMy5weSBiL1BDL1ZTOC4wL2ZpZWxkMy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRjYmUzNi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9maWVsZDMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIEFuIGFic3VyZCB3b3JrYXJvdW5kIGZvciB0aGUgbGFjayBvZiBhcml0aG1ldGljIGluIE1TJ3MgcmVzb3VyY2UgY29tcGlsZXIuCi0jIEFmdGVyIGJ1aWxkaW5nIFB5dGhvbiwgcnVuIHRoaXMsIHRoZW4gcGFzdGUgdGhlIG91dHB1dCBpbnRvIHRoZSBhcHByb3ByaWF0ZQotIyBwYXJ0IG9mIFBDXHB5dGhvbl9udC5yYy4KLSMgRXhhbXBsZSBvdXRwdXQ6Ci0jCi0jICogRm9yIDIuM2EwLAotIyAqIFBZX01JQ1JPX1ZFUlNJT04gPSAwCi0jICogUFlfUkVMRUFTRV9MRVZFTCA9ICdhbHBoYScgPSAweEEKLSMgKiBQWV9SRUxFQVNFX1NFUklBTCA9IDEKLSMgKgotIyAqIGFuZCAwKjEwMDAgKyAxMCoxMCArIDEgPSAxMDEuCi0jICovCi0jICNkZWZpbmUgRklFTEQzIDEwMQotCi1pbXBvcnQgc3lzCi0KLW1ham9yLCBtaW5vciwgbWljcm8sIGxldmVsLCBzZXJpYWwgPSBzeXMudmVyc2lvbl9pbmZvCi1sZXZlbG51bSA9IHsnYWxwaGEnOiAweEEsCi0gICAgICAgICAgICAnYmV0YSc6IDB4QiwKLSAgICAgICAgICAgICdjYW5kaWRhdGUnOiAweEMsCi0gICAgICAgICAgICAnZmluYWwnOiAweEYsCi0gICAgICAgICAgIH1bbGV2ZWxdCi1zdHJpbmcgPSBzeXMudmVyc2lvbi5zcGxpdCgpWzBdICMgbGlrZSAnMi4zYTAnCi0KLXByaW50KCIgKiBGb3IgJXMsIiAlIHN0cmluZykKLXByaW50KCIgKiBQWV9NSUNST19WRVJTSU9OID0gJWQiICUgbWljcm8pCi1wcmludCgiICogUFlfUkVMRUFTRV9MRVZFTCA9ICVyID0gJXMiICUgKGxldmVsLCBoZXgobGV2ZWxudW0pKSkKLXByaW50KCIgKiBQWV9SRUxFQVNFX1NFUklBTCA9ICVkIiAlIHNlcmlhbCkKLXByaW50KCIgKiIpCi0KLWZpZWxkMyA9IG1pY3JvICogMTAwMCArIGxldmVsbnVtICogMTAgKyBzZXJpYWwKLQotcHJpbnQoIiAqIGFuZCAlZCoxMDAwICsgJWQqMTAgKyAlZCA9ICVkIiAlIChtaWNybywgbGV2ZWxudW0sIHNlcmlhbCwgZmllbGQzKSkKLXByaW50KCIgKi8iKQotcHJpbnQoIiNkZWZpbmUgRklFTEQzIiwgZmllbGQzKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvaWRsZS5iYXQgYi9QQy9WUzguMC9pZGxlLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIzZTcwNC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9pZGxlLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIHN0YXJ0IGlkbGUKLXJlbSBVc2FnZTogIGlkbGUgWy1kXQotcmVtIC1kICAgUnVuIERlYnVnIGJ1aWxkIChweXRob25fZC5leGUpLiAgRWxzZSByZWxlYXNlIGJ1aWxkLgotCi1zZXRsb2NhbAotc2V0IGV4ZT1weXRob24KLVBBVEggJVBBVEglOy4uXC4uXC4uXHRjbHRrXGJpbgotCi1pZiAiJTEiPT0iLWQiIChzZXQgZXhlPXB5dGhvbl9kKSAmIHNoaWZ0Ci0KLXNldCBjbWQ9JWV4ZSUgLi4vLi4vTGliL2lkbGVsaWIvaWRsZS5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotCi1lY2hvIG9uCi0lY21kJQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAva2lsbF9weXRob24uYyBiL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMzIzZDMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAva2lsbF9weXRob24uYworKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogSGVscGVyIHByb2dyYW0gZm9yIGtpbGxpbmcgbGluZ2VyaW5nIHB5dGhvbltfZF0uZXhlIHByb2Nlc3NlcyBiZWZvcmUKLSAqIGJ1aWxkaW5nLCB0aHVzIGF0dGVtcHRpbmcgdG8gYXZvaWQgYnVpbGQgZmFpbHVyZXMgZHVlIHRvIGZpbGVzIGJlaW5nCi0gKiBsb2NrZWQuCi0gKi8KLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3Y2hhci5oPgotI2luY2x1ZGUgPHRsaGVscDMyLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI3ByYWdtYSBjb21tZW50KGxpYiwgInBzYXBpIikKLQotI2lmZGVmIF9ERUJVRwotI2RlZmluZSBQWVRIT05fRVhFICAgICAgICAgIChMInB5dGhvbl9kLmV4ZSIpCi0jZGVmaW5lIFBZVEhPTl9FWEVfTEVOICAgICAgKDEyKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEUgICAgIChMImtpbGxfcHl0aG9uX2QuZXhlIikKLSNkZWZpbmUgS0lMTF9QWVRIT05fRVhFX0xFTiAoMTcpCi0jZWxzZQotI2RlZmluZSBQWVRIT05fRVhFICAgICAgICAgIChMInB5dGhvbi5leGUiKQotI2RlZmluZSBQWVRIT05fRVhFX0xFTiAgICAgICgxMCkKLSNkZWZpbmUgS0lMTF9QWVRIT05fRVhFICAgICAoTCJraWxsX3B5dGhvbi5leGUiKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEVfTEVOICgxNSkKLSNlbmRpZgotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIEhBTkRMRSAgIGhwLCBoc3AsIGhzbTsgLyogcHJvY2Vzcywgc25hcHNob3QgcHJvY2Vzc2VzLCBzbmFwc2hvdCBtb2R1bGVzICovCi0gICAgRFdPUkQgICAgZGFjLCBvdXJfcGlkOwotICAgIHNpemVfdCAgIGxlbjsKLSAgICB3Y2hhcl90ICBwYXRoW01BWF9QQVRIKzFdOwotCi0gICAgTU9EVUxFRU5UUlkzMlcgIG1lOwotICAgIFBST0NFU1NFTlRSWTMyVyBwZTsKLQotICAgIG1lLmR3U2l6ZSA9IHNpemVvZihNT0RVTEVFTlRSWTMyVyk7Ci0gICAgcGUuZHdTaXplID0gc2l6ZW9mKFBST0NFU1NFTlRSWTMyVyk7Ci0KLSAgICBtZW1zZXQocGF0aCwgMCwgTUFYX1BBVEgrMSk7Ci0KLSAgICBvdXJfcGlkID0gR2V0Q3VycmVudFByb2Nlc3NJZCgpOwotCi0gICAgaHNtID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQTU9EVUxFLCBvdXJfcGlkKTsKLSAgICBpZiAoaHNtID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgICAgIHByaW50ZigiQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90WzFdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaWYgKCFNb2R1bGUzMkZpcnN0Vyhoc20sICZtZSkpIHsKLSAgICAgICAgcHJpbnRmKCJNb2R1bGUzMkZpcnN0V1sxXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogRW51bWVyYXRlIG92ZXIgdGhlIG1vZHVsZXMgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MgaW4gb3JkZXIgdG8gZmluZAotICAgICAqIGtpbGxfcHJvY2Vzc1tfZF0uZXhlLCB0aGVuIHRha2UgYSBub3RlIG9mIHRoZSBkaXJlY3RvcnkgaXQgbGl2ZXMgaW4uCi0gICAgICovCi0gICAgZG8gewotICAgICAgICBpZiAoX3djc25pY21wKG1lLnN6TW9kdWxlLCBLSUxMX1BZVEhPTl9FWEUsIEtJTExfUFlUSE9OX0VYRV9MRU4pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbGVuID0gd2Nzbmxlbl9zKG1lLnN6RXhlUGF0aCwgTUFYX1BBVEgpIC0gS0lMTF9QWVRIT05fRVhFX0xFTjsKLSAgICAgICAgd2NzbmNweV9zKHBhdGgsIE1BWF9QQVRIKzEsIG1lLnN6RXhlUGF0aCwgbGVuKTsgCi0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICB9IHdoaWxlIChNb2R1bGUzMk5leHRXKGhzbSwgJm1lKSk7Ci0KLSAgICBDbG9zZUhhbmRsZShoc20pOwotCi0gICAgaWYgKHBhdGggPT0gTlVMTCkgewotICAgICAgICBwcmludGYoImZhaWxlZCB0byBkaXNjZXJuIGRpcmVjdG9yeSBvZiBydW5uaW5nIHByb2Nlc3NcbiIpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFRha2UgYSBzbmFwc2hvdCBvZiBzeXN0ZW0gcHJvY2Vzc2VzLiAgRW51bWVyYXRlIG92ZXIgdGhlIHNuYXBzaG90LAotICAgICAqIGxvb2tpbmcgZm9yIHB5dGhvbiBwcm9jZXNzZXMuICBXaGVuIHdlIGZpbmQgb25lLCB2ZXJpZnkgaXQgbGl2ZXMKLSAgICAgKiBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd2UgbGl2ZSBpbi4gIElmIGl0IGRvZXMsIGtpbGwgaXQuICBJZiB3ZSdyZQotICAgICAqIHVuYWJsZSB0byBraWxsIGl0LCB0cmVhdCB0aGlzIGFzIGEgZmF0YWwgZXJyb3IgYW5kIHJldHVybiAxLgotICAgICAqIAotICAgICAqIFRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgaXMgdGhhdCB3ZSdyZSBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSAKLSAgICAgKiBidWlsZCBwcm9jZXNzIG9uIHRoZSBiYXNpcyB0aGF0IHdlJ2xsIHRha2UgY2FyZSBvZiBraWxsaW5nIGFueQotICAgICAqIHJ1bm5pbmcgaW5zdGFuY2VzLCBzdWNoIHRoYXQgdGhlIGJ1aWxkIHdvbid0IGVuY291bnRlciBwZXJtaXNzaW9uCi0gICAgICogZGVuaWVkIGVycm9ycyBkdXJpbmcgbGlua2luZy4gSWYgd2UgY2FuJ3Qga2lsbCBvbmUgb2YgdGhlIHByb2Nlc3NlcywKLSAgICAgKiB3ZSBjYW4ndCBwcm92aWRlIHRoaXMgYXNzdXJhbmNlLCBhbmQgdGhlIGJ1aWxkIHNob3VsZG4ndCBzdGFydC4KLSAgICAgKi8KLQotICAgIGhzcCA9IENyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdChUSDMyQ1NfU05BUFBST0NFU1MsIDApOwotICAgIGlmIChoc3AgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgcHJpbnRmKCJDcmVhdGVUb29saGVscDMyU25hcHNob3RbMl0gZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoIVByb2Nlc3MzMkZpcnN0Vyhoc3AsICZwZSkpIHsKLSAgICAgICAgcHJpbnRmKCJQcm9jZXNzMzJGaXJzdFcgZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBkYWMgPSBQUk9DRVNTX1FVRVJZX0lORk9STUFUSU9OIHwgUFJPQ0VTU19WTV9SRUFEIHwgUFJPQ0VTU19URVJNSU5BVEU7Ci0gICAgZG8gewotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFhYWCBUT0RPOiBpZiB3ZSByZWFsbHkgd2FudGVkIHRvIGJlIGZhbmN5LCB3ZSBjb3VsZCBjaGVjayB0aGUgCi0gICAgICAgICAqIG1vZHVsZXMgZm9yIGFsbCBwcm9jZXNzZXMgKG5vdCBqdXN0IHRoZSBweXRob25bX2RdLmV4ZSBvbmVzKQotICAgICAgICAgKiBhbmQgc2VlIGlmIGFueSBvZiBvdXIgRExMcyBhcmUgbG9hZGVkIChpLmUuIHB5dGhvbjMzW19kXS5kbGwpLAotICAgICAgICAgKiBhcyB0aGF0IHdvdWxkIGFsc28gaW5oaWJpdCBvdXIgYWJpbGl0eSB0byByZWJ1aWxkIHRoZSBzb2x1dGlvbi4KLSAgICAgICAgICogTm90IHdvcnRoIGxvb3Npbmcgc2xlZXAgb3ZlciB0aG91Z2g7IGZvciBub3csIGEgc2ltcGxlIGNoZWNrIAotICAgICAgICAgKiBmb3IganVzdCB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCi0gICAgICAgICAqLwotCi0gICAgICAgIGlmIChfd2NzbmljbXAocGUuc3pFeGVGaWxlLCBQWVRIT05fRVhFLCBQWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICAvKiBUaGlzIGlzbid0IGEgcHl0aG9uIHByb2Nlc3MuICovCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvKiBJdCdzIGEgcHl0aG9uIHByb2Nlc3MsIHNvIGZpZ3VyZSBvdXQgd2hpY2ggZGlyZWN0b3J5IGl0J3MgaW4uLi4gKi8KLSAgICAgICAgaHNtID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQTU9EVUxFLCBwZS50aDMyUHJvY2Vzc0lEKTsKLSAgICAgICAgaWYgKGhzbSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAgIC8qIAotICAgICAgICAgICAgICogSWYgb3VyIG1vZHVsZSBzbmFwc2hvdCBmYWlscyAod2hpY2ggd2lsbCBoYXBwZW4gaWYgd2UgZG9uJ3Qgb3duCi0gICAgICAgICAgICAgKiB0aGUgcHJvY2VzcyksIGp1c3QgaWdub3JlIGl0IGFuZCBjb250aW51ZS4gIChJdCBzZWVtcyBkaWZmZXJlbnQKLSAgICAgICAgICAgICAqIHZlcnNpb25zIG9mIFdpbmRvd3MgcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMgZm9yIEdldExhc3RFcnJvcigpCi0gICAgICAgICAgICAgKiBpbiB0aGlzIHNpdHVhdGlvbjsgaXQncyBlYXNpZXIgdG8ganVzdCBpZ25vcmUgaXQgYW5kIG1vdmUgb24gdnMuCi0gICAgICAgICAgICAgKiBzdG9wcGluZyB0aGUgYnVpbGQgZm9yIHdoYXQgY291bGQgYmUgYSBmYWxzZSBwb3NpdGl2ZS4pCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIU1vZHVsZTMyRmlyc3RXKGhzbSwgJm1lKSkgewotICAgICAgICAgICAgcHJpbnRmKCJNb2R1bGUzMkZpcnN0V1syXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKF93Y3NuaWNtcChtZS5zek1vZHVsZSwgUFlUSE9OX0VYRSwgUFlUSE9OX0VYRV9MRU4pKQotICAgICAgICAgICAgICAgIC8qIFdyb25nIG1vZHVsZSwgd2UncmUgbG9va2luZyBmb3IgcHl0aG9uW19kXS5leGUuLi4gKi8KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKF93Y3NuaWNtcChwYXRoLCBtZS5zekV4ZVBhdGgsIGxlbikpCi0gICAgICAgICAgICAgICAgLyogUHJvY2VzcyBkb2Vzbid0IGxpdmUgaW4gb3VyIGRpcmVjdG9yeS4gKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLyogUHl0aG9uIHByb2Nlc3MgcmVzaWRpbmcgaW4gdGhlIHJpZ2h0IGRpcmVjdG9yeSwga2lsbCBpdCEgICovCi0gICAgICAgICAgICBocCA9IE9wZW5Qcm9jZXNzKGRhYywgRkFMU0UsIHBlLnRoMzJQcm9jZXNzSUQpOwotICAgICAgICAgICAgaWYgKCFocCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiT3BlblByb2Nlc3MgZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFUZXJtaW5hdGVQcm9jZXNzKGhwLCAxKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiVGVybWluYXRlUHJvY2VzcyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNwKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHApOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgfSB3aGlsZSAoTW9kdWxlMzJOZXh0Vyhoc20sICZtZSkpOwotCi0gICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0KLSAgICB9IHdoaWxlIChQcm9jZXNzMzJOZXh0Vyhoc3AsICZwZSkpOwotCi0gICAgQ2xvc2VIYW5kbGUoaHNwKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vKiB2aTogc2V0IHRzPTggc3c9NCBzdHM9NCBleHBhbmR0YWIgKi8KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLnZjcHJvaiBiL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTliZTMzMC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9raWxsX3B5dGhvbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9ImtpbGxfcHl0aG9uIg0KLQlQcm9qZWN0R1VJRD0iezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0iDQotCVJvb3ROYW1lc3BhY2U9ImtpbGxfcHl0aG9uIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii5ca2lsbF9weXRob24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby5jIGIvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVmYTA3YS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jZGVmaW5lIENNRF9TSVpFIDUwMAotCi0vKiBUaGlzIGZpbGUgY3JlYXRlcyB0aGUgZ2V0YnVpbGRpbmZvLm8gb2JqZWN0LCBieSBmaXJzdAotICAgaW52b2tpbmcgc3Vid2NyZXYuZXhlIChpZiBmb3VuZCksIGFuZCB0aGVuIGludm9raW5nIGNsLmV4ZS4KLSAgIEFzIGEgc2lkZSBlZmZlY3QsIGl0IG1pZ2h0IGdlbmVyYXRlIFBDQnVpbGRcZ2V0YnVpbGRpbmZvMi5jCi0gICBhbHNvLiBJZiB0aGlzIGlzbid0IGEgc3VidmVyc2lvbiBjaGVja291dCwgb3Igc3Vid2NyZXYgaXNuJ3QKLSAgIGZvdW5kLCBpdCBjb21waWxlcyAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIGluc3RlYWQuCi0KLSAgIEN1cnJlbnRseSwgc3Vid2NyZXYuZXhlIGlzIGZvdW5kIGZyb20gdGhlIHJlZ2lzdHJ5IGVudHJpZXMKLSAgIG9mIFRvcnRvaXNlU1ZOLgotCi0gICBObyBhdHRlbXB0IGlzIG1hZGUgdG8gcGxhY2UgZ2V0YnVpbGRpbmZvLm8gaW50byB0aGUgcHJvcGVyCi0gICBiaW5hcnkgZGlyZWN0b3J5LiBUaGlzIGlzbid0IG5lY2Vzc2FyeSwgYXMgdGhpcyB0b29sIGlzCi0gICBpbnZva2VkIGFzIGEgcHJlLWxpbmsgc3RlcCBmb3IgcHl0aG9uY29yZSwgc28gdGhhdCBvdmVyd3JpdGVzCi0gICBhbnkgcHJldmlvdXMgZ2V0YnVpbGRpbmZvLm8uCi0KLSAgIEhvd2V2ZXIsIGlmIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB0aGlzIHdpbGwgYmUgdXNlZAotICAgYXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHdoZXJlIGFueSBnZXRidWlsZGluZm8yLmMgYW5kCi0gICBnZXRidWlsZGluZm8ubyBmaWxlcyBhcmUgcHV0LiAgVGhpcyBpcyB1c2VmdWwgaWYgbXVsdGlwbGUKLSAgIGNvbmZpZ3VyYXRpb25zIGFyZSBiZWluZyBidWlsdCBpbiBwYXJhbGxlbCwgdG8gYXZvaWQgdGhlbQotICAgdHJhbXBsaW5nIGVhY2ggb3RoZXIncyBmaWxlcy4KLQotKi8KLQotaW50IG1ha2VfYnVpbGRpbmZvMihjb25zdCBjaGFyICp0bXBwYXRoKQotewotICAgIHN0cnVjdCBfc3RhdCBzdDsKLSAgICBIS0VZIGhUb3J0b2lzZTsKLSAgICBjaGFyIGNvbW1hbmRbQ01EX1NJWkUrMV07Ci0gICAgRFdPUkQgdHlwZSwgc2l6ZTsKLSAgICBpZiAoX3N0YXQoIi5zdm4iLCAmc3QpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLyogQWxsb3cgc3VwcHJlc3Npb24gb2Ygc3Vid2NyZXYuZXhlIGludm9jYXRpb24gaWYgYSBub19zdWJ3Y3JldiBmaWxlIGlzIHByZXNlbnQuICovCi0gICAgaWYgKF9zdGF0KCJub19zdWJ3Y3JldiIsICZzdCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKFJlZ09wZW5LZXkoSEtFWV9MT0NBTF9NQUNISU5FLCAiU29mdHdhcmVcXFRvcnRvaXNlU1ZOIiwgJmhUb3J0b2lzZSkgIT0gRVJST1JfU1VDQ0VTUyAmJgotICAgICAgICBSZWdPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCAiU29mdHdhcmVcXFRvcnRvaXNlU1ZOIiwgJmhUb3J0b2lzZSkgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgLyogVG9ydG9pc2Ugbm90IGluc3RhbGxlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBjb21tYW5kWzBdID0gJyInOyAgLyogcXVvdGUgdGhlIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUgKi8KLSAgICBzaXplID0gc2l6ZW9mKGNvbW1hbmQpIC0gMTsKLSAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGhUb3J0b2lzZSwgIkRpcmVjdG9yeSIsIDAsICZ0eXBlLCBjb21tYW5kKzEsICZzaXplKSAhPSBFUlJPUl9TVUNDRVNTIHx8Ci0gICAgICAgIHR5cGUgIT0gUkVHX1NaKQotICAgICAgICAvKiBSZWdpc3RyeSBjb3JydXB0ZWQgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJiaW5cXHN1YndjcmV2LmV4ZSIpOwotICAgIGlmIChfc3RhdChjb21tYW5kKzEsICZzdCkgPCAwKQotICAgICAgICAvKiBzdWJ3Y3Jldi5leGUgbm90IHBhcnQgb2YgdGhlIHJlbGVhc2UgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJcIiAuLlxcLi4gLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyAiKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmMiKTsKLSAgICBwdXRzKGNvbW1hbmQpOyBmZmx1c2goc3Rkb3V0KTsKLSAgICBpZiAoc3lzdGVtKGNvbW1hbmQpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKmFyZ3ZbXSkKLXsKLSAgICBjaGFyIGNvbW1hbmRbQ01EX1NJWkVdID0gImNsLmV4ZSAtYyAtRF9XSU4zMiAtRFVTRV9ETF9FWFBPUlQgLURfV0lORE9XUyAtRFdJTjMyIC1EX1dJTkRMTCAiOwotICAgIGNoYXIgdG1wcGF0aFtDTURfU0laRV0gPSAiIjsKLSAgICBpbnQgZG9fdW5saW5rLCByZXN1bHQ7Ci0gICAgY2hhciAqdG1wZGlyID0gTlVMTDsKLSAgICBpZiAoYXJnYyA8PSAyIHx8IGFyZ2MgPiAzKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibWFrZV9idWlsZGluZm8gJChDb25maWd1cmF0aW9uTmFtZSkgW3RtcGRpcl1cbiIpOwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLSAgICBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlIikgPT0gMCkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1NRCAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJEZWJ1ZyIpID09IDApIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItRF9ERUJVRyAtTURkICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VJdGFuaXVtIikgPT0gMCkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1NRCAvVVNFQ0w6TVNfSVRBTklVTSAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlQU1ENjQiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EICIpOwotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1NRCAvVVNFQ0w6TVNfT1BURVJPTiAiKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbiAlc1xuIiwgYXJndlsxXSk7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotICAgIGlmIChhcmdjID4gMikgewotICAgICAgICB0bXBkaXIgPSBhcmd2WzJdOwotICAgICAgICBzdHJjYXRfcyh0bXBwYXRoLCBfY291bnRvZih0bXBwYXRoKSwgdG1wZGlyKTsKLSAgICAgICAgc3RyY2F0X3ModG1wcGF0aCwgX2NvdW50b2YodG1wcGF0aCksICJcXCIpOwotICAgIH0KLQotICAgIGlmICgoZG9fdW5saW5rID0gbWFrZV9idWlsZGluZm8yKHRtcHBhdGgpKSkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvMi5jIC1EU1VCV0NSRVYgIik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiIC1GbyIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mby5vIC1JLi5cXC4uXFxJbmNsdWRlIC1JLi5cXC4uXFxQQyIpOwotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIHJlc3VsdCA9IHN5c3RlbShjb21tYW5kKTsKLSAgICBpZiAoZG9fdW5saW5rKSB7Ci0gICAgICAgIGNvbW1hbmRbMF0gPSAnXDAnOwotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvMi5jIik7Ci0gICAgICAgIF91bmxpbmsoY29tbWFuZCk7Ci0gICAgfQotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8udmNwcm9qIGIvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjVjY2NkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ibWFrZV9idWlsZGluZm8iDQotCVByb2plY3RHVUlEPSJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCi0JUm9vdE5hbWVzcGFjZT0ibWFrZV9idWlsZGluZm8iDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbWFrZV9idWlsZGluZm8uZXhlIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKFRhcmdldERpcikkKFRhcmdldE5hbWUpLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuXG1ha2VfYnVpbGRpbmZvLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvbWFrZV92ZXJzaW9uaW5mby52Y3Byb2ogYi9QQy9WUzguMC9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRiZjEwZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDMyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ibWFrZV92ZXJzaW9uaW5mbyINCi0JUHJvamVjdEdVSUQ9IntGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9Ig0KLQlSb290TmFtZXNwYWNlPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbm50X3JjLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmMuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mby5leGUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbm50X3JjLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmMuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mby5leGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250LmgmI3gwRDsmI3gwQTsiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCQlPdXRwdXRzPSIkKFNvbHV0aW9uRGlyKS4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKFNvbHV0aW9uRGlyKW1ha2VfdmVyc2lvbmluZm9fZC5leGUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250X2QuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCQlPdXRwdXRzPSIkKFNvbHV0aW9uRGlyKS4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvX2QuZXhlIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mb19kLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udF9kLmgmI3gwRDsmI3gwQTsiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtYWtlX3ZlcnNpb25pbmZvLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcGNidWlsZC5zbG4gYi9QQy9WUzguMC9wY2J1aWxkLnNsbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFjYTRhYS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9wY2J1aWxkLnNsbgorKysgL2Rldi9udWxsCkBAIC0xLDU2MCArMCwwIEBACi1NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiA5LjAwDQotIyBWaXN1YWwgU3R1ZGlvIDIwMDUNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbiIsICJweXRob24udmNwcm9qIiwgIntCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSA9IHtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV92ZXJzaW9uaW5mbyIsICJtYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiIsICJ7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfSINCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob25jb3JlIiwgInB5dGhvbmNvcmUudmNwcm9qIiwgIntDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfSA9IHtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSA9IHs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9DQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSA9IHtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9udyIsICJweXRob253LnZjcHJvaiIsICJ7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInc5eHBvcGVuIiwgInc5eHBvcGVuLnZjcHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfYnVpbGRpbmZvIiwgIm1ha2VfYnVpbGRpbmZvLnZjcHJvaiIsICJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJTb2x1dGlvbiBJdGVtcyIsICJTb2x1dGlvbiBJdGVtcyIsICJ7NTUzRUMzM0UtOTgxNi00OTk2LUE2NjAtNUQ2MTg2QTBCMEIzfSINCi0JUHJvamVjdFNlY3Rpb24oU29sdXRpb25JdGVtcykgPSBwcmVQcm9qZWN0DQotCQkuLlwuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jID0gLi5cLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYw0KLQkJcmVhZG1lLnR4dCA9IHJlYWRtZS50eHQNCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3aW5zb3VuZCIsICJ3aW5zb3VuZC52Y3Byb2oiLCAiezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfY3R5cGVzIiwgIl9jdHlwZXMudmNwcm9qIiwgInswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2N0eXBlc190ZXN0IiwgIl9jdHlwZXNfdGVzdC52Y3Byb2oiLCAiezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfZWxlbWVudHRyZWUiLCAiX2VsZW1lbnR0cmVlLnZjcHJvaiIsICJ7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9tc2kiLCAiX21zaS52Y3Byb2oiLCAiezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc29ja2V0IiwgIl9zb2NrZXQudmNwcm9qIiwgIns4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NxbGl0ZTMiLCAiX3NxbGl0ZTMudmNwcm9qIiwgInsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfSA9IHtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NzbCIsICJfc3NsLnZjcHJvaiIsICJ7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0gPSB7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fQ0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0gPSB7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfQ0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0gPSB7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0Y2FwaSIsICJfdGVzdGNhcGkudmNwcm9qIiwgIns2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3RraW50ZXIiLCAiX3RraW50ZXIudmNwcm9qIiwgIns0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiYnoyIiwgImJ6Mi52Y3Byb2oiLCAiezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzZWxlY3QiLCAic2VsZWN0LnZjcHJvaiIsICJ7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInVuaWNvZGVkYXRhIiwgInVuaWNvZGVkYXRhLnZjcHJvaiIsICJ7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5ZXhwYXQiLCAicHlleHBhdC52Y3Byb2oiLCAie0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJiZGlzdF93aW5pbnN0IiwgImJkaXN0X3dpbmluc3QudmNwcm9qIiwgIntFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9oYXNobGliIiwgIl9oYXNobGliLnZjcHJvaiIsICJ7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0gPSB7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fQ0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0gPSB7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNxbGl0ZTMiLCAic3FsaXRlMy52Y3Byb2oiLCAie0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9ID0gezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfbXVsdGlwcm9jZXNzaW5nIiwgIl9tdWx0aXByb2Nlc3NpbmcudmNwcm9qIiwgIns5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3NsIiwgInNzbC52Y3Byb2oiLCAie0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9ID0ge0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJraWxsX3B5dGhvbiIsICJraWxsX3B5dGhvbi52Y3Byb2oiLCAiezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0iDQotRW5kUHJvamVjdA0KLUdsb2JhbA0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KLQkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KLQkJRGVidWd8eDY0ID0gRGVidWd8eDY0DQotCQlQR0luc3RydW1lbnR8V2luMzIgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCVBHSW5zdHJ1bWVudHx4NjQgPSBQR0luc3RydW1lbnR8eDY0DQotCQlQR1VwZGF0ZXxXaW4zMiA9IFBHVXBkYXRlfFdpbjMyDQotCQlQR1VwZGF0ZXx4NjQgPSBQR1VwZGF0ZXx4NjQNCi0JCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyDQotCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0DQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24NCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24NCi0JCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KLQlFbmRHbG9iYWxTZWN0aW9uDQotRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcGdpbnN0cnVtZW50LnZzcHJvcHMgYi9QQy9WUzguMC9wZ2luc3RydW1lbnQudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhjNWYxOC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9wZ2luc3RydW1lbnQudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJwZ2luc3RydW1lbnQiDQotCU91dHB1dERpcmVjdG9yeT0iJChPdXREaXJQR0kpIg0KLQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtcGdpXCQoUHJvamVjdE5hbWUpXCINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCU9wdGltaXphdGlvbj0iMiINCi0JCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCUZhdm9yU2l6ZU9yU3BlZWQ9IjIiDQotCQlPbWl0RnJhbWVQb2ludGVycz0idHJ1ZSINCi0JCUVuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM9ImZhbHNlIg0KLQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0KLQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KLQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQotCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIg0KLQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iMiINCi0JCVByb2ZpbGVHdWlkZWREYXRhYmFzZT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktcGdpXCQoVGFyZ2V0TmFtZSkucGdkIg0KLQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpXCQoVGFyZ2V0TmFtZSkubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJPdXREaXJQR0kiDQotCQlWYWx1ZT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktcGdpXCINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcGd1cGRhdGUudnNwcm9wcyBiL1BDL1ZTOC4wL3BndXBkYXRlLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2Y2ZjMmQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcGd1cGRhdGUudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJwZ3VwZGF0ZSINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ29cIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChTb2x1dGlvbkRpcilccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCUFkZGl0aW9uYWxNYW5pZmVzdERlcGVuZGVuY2llcz0iIg0KLQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iNCINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHlkLnZzcHJvcHMgYi9QQy9WUzguMC9weWQudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRjMjFlMS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weWQudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweWQiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFIg0KLQkJUnVudGltZUxpYnJhcnk9IjIiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkucHlkIg0KLQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLnBkYiINCi0JCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKVwkKFRhcmdldE5hbWUpLmxpYiINCi0JCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQlFbWJlZE1hbmlmZXN0PSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJQ29tbWFuZExpbmU9IiINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHlkX2QudnNwcm9wcyBiL1BDL1ZTOC4wL3B5ZF9kLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxM2EzMGIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcHlkX2QudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweWRfZCINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjAiDQotCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFIg0KLQkJUnVudGltZUxpYnJhcnk9IjMiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5weWQiDQotCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5wZGIiDQotCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcilcJChUYXJnZXROYW1lKS5saWIiDQotCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJRW1iZWRNYW5pZmVzdD0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCUNvbW1hbmRMaW5lPSIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKXB5dGhvbl9kLmV4ZSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHlleHBhdC52Y3Byb2ogYi9QQy9WUzguMC9weWV4cGF0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU5ZTRlYy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weWV4cGF0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHlleHBhdCINCi0JUHJvamVjdEdVSUQ9IntEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9Ig0KLQlSb290TmFtZXNwYWNlPSJweWV4cGF0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xweWV4cGF0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHlwcm9qZWN0LnZzcHJvcHMgYi9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMxYmQzZi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweXByb2plY3QiDQotCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb25OYW1lKVwkKFByb2plY3ROYW1lKVwiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlPcHRpbWl6YXRpb249IjIiDQotCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7IC4uXC4uXFBDIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMiINCi0JCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCi0JCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJQ29tcGlsZUFzPSIwIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIg0KLQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KLQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQlTdWJTeXN0ZW09IjIiDQotCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQotCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCi0JCVRhcmdldE1hY2hpbmU9IjEiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUEM7Li5cLi5cSW5jbHVkZSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHlEbGxOYW1lIg0KLQkJVmFsdWU9InB5dGhvbjMzIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeXRob25FeGUiDQotCQlWYWx1ZT0iJChTb2x1dGlvbkRpcilccHl0aG9uLmV4ZSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iZXh0ZXJuYWxzRGlyIg0KLQkJVmFsdWU9Ii4uXC4uXC4uIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJzcWxpdGUzRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy42LjIxIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJiejJEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXGJ6aXAyLTEuMC42Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJvcGVuc3NsRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxvcGVuc3NsLTEuMC4xZSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGtEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHRjbHRrIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0RGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVx0Y2x0azY0Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0xpYiINCi0JCVZhbHVlPSIkKHRjbHRrRGlyKVxsaWJcdGNsODUubGliICQodGNsdGtEaXIpXGxpYlx0azg1LmxpYiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGtMaWJEZWJ1ZyINCi0JCVZhbHVlPSIkKHRjbHRrRGlyKVxsaWJcdGNsODVnLmxpYiAkKHRjbHRrRGlyKVxsaWJcdGs4NWcubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0TGliIg0KLQkJVmFsdWU9IiQodGNsdGs2NERpcilcbGliXHRjbDg1LmxpYiAkKHRjbHRrNjREaXIpXGxpYlx0azg1LmxpYiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGs2NExpYkRlYnVnIg0KLQkJVmFsdWU9IiQodGNsdGs2NERpcilcbGliXHRjbDg1Zy5saWIgJCh0Y2x0azY0RGlyKVxsaWJcdGs4NWcubGliIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weXRob24udmNwcm9qIGIvUEMvVlM4LjAvcHl0aG9uLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0N2MwZS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXRob24udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNjM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweXRob24iDQotCVByb2plY3RHVUlEPSJ7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbl9kLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMTAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHljb24uaWNvIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX2V4ZS5yYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHB5dGhvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5dGhvbmNvcmUudmNwcm9qIGIvUEMvVlM4LjAvcHl0aG9uY29yZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NWJiOWQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcHl0aG9uY29yZS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweXRob25jb3JlIg0KLQlQcm9qZWN0R1VJRD0ie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0iDQotCVJvb3ROYW1lc3BhY2U9InB5dGhvbmNvcmUiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IERlYnVnICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpX2QuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSlfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcikkKFB5RGxsTmFtZSlfZC5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IERlYnVnICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpX2QuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSlfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcikkKFB5RGxsTmFtZSlfZC5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAkKEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSkkKFB5RGxsTmFtZSkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICgkSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkluY2x1ZGUiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxhYnN0cmFjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxhY2N1LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFzZGwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYXN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJpdHNldC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxib29sb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJ5dGVzX21ldGhvZHMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYnl0ZWFycmF5b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJ5dGVzb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNlbGxvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY2V2YWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY2xhc3NvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY29kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb2RlY3MuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY29tcGlsZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb21wbGV4b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGRhdGV0aW1lLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGRlc2Nyb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGRpY3RvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZHluYW1pY19hbm5vdGF0aW9ucy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxlbnVtb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGVycmNvZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZXZhbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmaWxlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZpbGV1dGlscy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmbG9hdG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmb3JtYXR0ZXJfdW5pY29kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmcmFtZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmdW5jb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGdlbm9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxncmFtaW5pdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxncmFtbWFyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGltcG9ydC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxpbnRyY2hlY2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcaXRlcm9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxsaXN0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGxvbmdpbnRyZXByLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGxvbmdvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbWFyc2hhbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtZW1vcnlvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbWV0YWdyYW1tYXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbWV0aG9kb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1vZHN1cHBvcnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbW9kdWxlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG5vZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG9iamltcGwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb3Bjb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG9zZGVmcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxwYXJzZXRvay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxwYXRjaGxldmVsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBnZW4uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccGdlbmhlYWRlcnMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlfY3Vyc2VzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5YXJlbmEuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHljYXBzdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5Y3R5cGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlkZWJ1Zy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWVycm9ycy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWV4cGF0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZnBlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5Z2V0b3B0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5bWFjdG9vbGJveC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweW1hdGguaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHl0aW1lLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5bWVtLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5cG9ydC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXN0YXRlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5c3RyY21wLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5c3RydG9kLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGR0b2EuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcUHl0aG9uLWFzdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxQeXRob24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHl0aG9ucnVuLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5dGhyZWFkLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHJhbmdlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHNldG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzbGljZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzdHJ1Y3RtZW1iZXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3RydWN0c2VxLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHN5bXRhYmxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHN5c21vZHVsZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0aW1lZnVuY3MuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdG9rZW4uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdHJhY2ViYWNrLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHR1cGxlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHVjbmhhc2guaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdW5pY29kZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx3ZWFrcmVmb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJNb2R1bGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Jpc2VjdG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY29kZWNzbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2xsZWN0aW9uc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3N2LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9mdW5jdG9vbHNtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2hlYXBxbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9qc29uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9sb2NhbGVtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xzcHJvZi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbWF0aC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbWF0aC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcGlja2xlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NyZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3RydWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90aW1lLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90aW1lLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF93ZWFrcmVmLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGFycmF5bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGF0ZXhpdG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhdWRpb29wLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGJpbmFzY2lpLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNtYXRobW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kYXRldGltZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xnY21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xpdGVydG9vbHNtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWFpbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtYXRobW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1kNW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG9wZXJhdG9yLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xwb3NpeG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNoYTFtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhMjU2bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNoYTUxMm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3ltdGFibGVtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RocmVhZG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x0aW1lbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHh4c3VidHlwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6aXBpbXBvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWx0ZXINCi0JCQkJTmFtZT0iX2lvIg0KLQkJCQk+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGZpbGVpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ5dGVzaW8uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xzdHJpbmdpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ1ZmZlcmVkaW8uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xpb2Jhc2UuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1x0ZXh0aW8uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCTwvRmlsdGVyPg0KLQkJCTxGaWx0ZXINCi0JCQkJTmFtZT0iemxpYiINCi0JCQkJPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjb21wcmVzcy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jIg0KLQkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZml4ZWQuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHRyZWVzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHRyZWVzLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHVuY29tcHIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcemNvbmYuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcemNvbmYuaW4uaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcemxpYi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJPC9GaWx0ZXI+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJjamtjb2RlY3MiDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19jbi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaGsuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2lzbzIwMjIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2pwLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19rci5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfdHcuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xhbGdfamlzeDAyMDEuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xjamtjb2RlY3MuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xlbXVfamlzeDAyMTNfMjAwMC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2NuLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfaGsuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19qaXN4MDIxM19wYWlyLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfanAuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19rci5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX3R3LmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbXVsdGlieXRlY29kZWMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtdWx0aWJ5dGVjb2RlYy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJPC9GaWx0ZXI+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJPYmplY3RzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYWJzdHJhY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYWNjdS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xib29sb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVzX21ldGhvZHMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZWFycmF5b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVzb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNhcHN1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2VsbG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjbGFzc29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjb2Rlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNvbXBsZXhvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXGNvdW50LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGRlc2Nyb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGRpY3RvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZW51bW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xleGNlcHRpb25zLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxmYXN0c2VhcmNoLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZpbGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXGZpbmQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZmxvYXRvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZnJhbWVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZnVuY29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xnZW5vYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcaXRlcm9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xsaXN0b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGxvbmdvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWVtb3J5b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1ldGhvZG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtb2R1bGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG9ibWFsbG9jLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxwYXJ0aXRpb24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNccmFuZ2VvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxzcGxpdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJ1Y3RzZXEuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdHVwbGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdHlwZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2RlY3R5cGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcdW5pY29kZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2RldHlwZV9kYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x3ZWFrcmVmb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJQYXJzZXIiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGFjY2VsZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxiaXRzZXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxmaXJzdHNldHMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcZ3JhbW1hcjEuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxsaXN0bm9kZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG1ldGFncmFtbWFyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbXlyZWFkbGluZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG5vZGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxwYXJzZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxwYXJzZXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxwYXJzZXRvay5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHRva2VuaXplci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHRva2VuaXplci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUEMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcX3N1YnByb2Nlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHdpbnJlZy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcY29uZmlnLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xkbF9udC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcZXJybWFwLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xnZXRwYXRocC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcbXN2Y3J0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweWNvbmZpZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUHl0aG9uIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxfd2FybmluZ3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxhc2RsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYXN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYmx0aW5tb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjZXZhbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNvZGVjcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNvbXBpbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5hbWljX2Fubm90YXRpb25zLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHlubG9hZF93aW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxlcnJvcnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmaWxldXRpbHMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZyb3plbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZ1dHVyZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGFyZ3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRjb21waWxlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvcHlyaWdodC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldG9wdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldHBsYXRmb3JtLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0dmVyc2lvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdyYW1pbml0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25caW1wb3J0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25caW1wb3J0ZGwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnRkbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG1hcnNoYWwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxtb2RzdXBwb3J0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbXlzbnByaW50Zi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG15c3RydG91bC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHBlZXBob2xlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlhcmVuYS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5Y3R5cGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWZwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5bWF0aC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5dGltZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RhdGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0cmNtcC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RydG9kLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHRvYS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXFB5dGhvbi1hc3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXRob25ydW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxyYW5kb20uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzdHJ1Y3RtZW1iZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxzeW10YWJsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN5c21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHRocmVhZC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHRocmVhZF9udC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHRyYWNlYmFjay5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX250LnJjIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5dGhvbncudmNwcm9qIGIvUEMvVlM4LjAvcHl0aG9udy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMzdiNzguLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcHl0aG9udy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5dGhvbnciDQotCVByb2plY3RHVUlEPSJ7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfSINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbndfZC5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253X2QuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9udy5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9leGUucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcV2luTWFpbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3JlbGVhc2UudnNwcm9wcyBiL1BDL1ZTOC4wL3JlbGVhc2UudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhkZWY5MC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9yZWxlYXNlLnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icmVsZWFzZSINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IktpbGxQeXRob25FeGUiDQotCQlWYWx1ZT0iJChPdXREaXIpXGtpbGxfcHl0aG9uLmV4ZSINCi0JLz4JDQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3JtcHljLnB5IGIvUEMvVlM4LjAvcm1weWMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZTE3MDUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvcm1weWMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIFJlbW92ZSBhbGwgdGhlIC5weWMgYW5kIC5weW8gZmlsZXMgdW5kZXIgLi4vTGliLgotCi0KLWRlZiBkZWx0cmVlKHJvb3QpOgotICAgIGltcG9ydCBvcwotICAgIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbgotCi0gICAgbnB5YyA9IG5weW8gPSAwCi0gICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocm9vdCk6Ci0gICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgZGVsZXRlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy5weWMnKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5YyArPSAxCi0gICAgICAgICAgICBlbGlmIG5hbWUuZW5kc3dpdGgoJy5weW8nKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5byArPSAxCi0KLSAgICAgICAgICAgIGlmIGRlbGV0ZToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoam9pbihyb290LCBuYW1lKSkKLQotICAgIHJldHVybiBucHljLCBucHlvCi0KLW5weWMsIG5weW8gPSBkZWx0cmVlKCIuLi8uLi9MaWIiKQotcHJpbnQobnB5YywgIi5weWMgZGVsZXRlZCwiLCBucHlvLCAiLnB5byBkZWxldGVkIikKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3J0LmJhdCBiL1BDL1ZTOC4wL3J0LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyOWUxOS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9ydC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBSdW4gVGVzdHMuICBSdW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4KLXJlbSBVc2FnZTogIHJ0IFstZF0gWy1PXSBbLXFdIHJlZ3J0ZXN0X2FyZ3MKLXJlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4KLXJlbSAtTyAgIFJ1biBweXRob24uZXhlIG9yIHB5dGhvbl9kLmV4ZSAoc2VlIC1kKSB3aXRoIC1PLgotcmVtIC1xICAgInF1aWNrIiAtLSBub3JtYWxseSB0aGUgdGVzdHMgYXJlIHJ1biB0d2ljZSwgdGhlIGZpcnN0IHRpbWUKLXJlbSAgICAgIGFmdGVyIGRlbGV0aW5nIGFsbCB0aGUgLnB5W2NvXSBmaWxlcyByZWFjaGFibGUgZnJvbSBMaWIvLgotcmVtICAgICAgLXEgcnVucyB0aGUgdGVzdHMganVzdCBvbmNlLCBhbmQgd2l0aG91dCBkZWxldGluZyAucHlbY29dIGZpbGVzLgotcmVtIEFsbCBsZWFkaW5nIGluc3RhbmNlcyBvZiB0aGVzZSBzd2l0Y2hlcyBhcmUgc2hpZnRlZCBvZmYsIGFuZAotcmVtIHdoYXRldmVyIHJlbWFpbnMgaXMgcGFzc2VkIHRvIHJlZ3J0ZXN0LnB5LiAgRm9yIGV4YW1wbGUsCi1yZW0gICAgIHJ0IC1PIC1kIC14IHRlc3RfdGhyZWFkCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAtTyAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAteCB0ZXN0X3RocmVhZAotcmVtIHR3aWNlLCBhbmQKLXJlbSAgICAgcnQgLXEgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHJ1bnMKLXJlbSAgICAgcHl0aG9uX2QgLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHRvIGdlbmVyYXRlIHRoZSBleHBlY3RlZC1vdXRwdXQgZmlsZSBmb3IgYmluYXNjaWkgcXVpY2tseS4KLXJlbQotcmVtIENvbmZ1c2luZzogIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgbGlrZQotcmVtICAgICAtdSBuZXR3b3JrLGxhcmdlZmlsZQotcmVtIHRoZW4geW91IGhhdmUgdG8gcXVvdGUgaXQgb24gdGhlIHJ0IGxpbmUsIGxpa2UKLXJlbSAgICAgcnQgLXUgIm5ldHdvcmssbGFyZ2VmaWxlIgotCi1zZXRsb2NhbAotCi1zZXQgZXhlPXB5dGhvbgotc2V0IHFtb2RlPQotc2V0IGRhc2hPPQotUEFUSCAlUEFUSCU7JX5kcDAuLlwuLlwuLlx0Y2x0a1xiaW4KLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1PIiAoc2V0IGRhc2hPPS1PKSAgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXEiIChzZXQgcW1vZGU9eWVzKSAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItZCIgKHNldCBleGU9cHl0aG9uX2QpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgY21kPSVleGUlICVkYXNoTyUgLUUgLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKLWlmIGRlZmluZWQgcW1vZGUgZ290byBRbW9kZQotCi1lY2hvIERlbGV0aW5nIC5weWMvLnB5byBmaWxlcyAuLi4KLSVleGUlIHJtcHljLnB5Ci0KLWVjaG8gb24KLSVjbWQlCi1AZWNobyBvZmYKLQotZWNobyBBYm91dCB0byBydW4gYWdhaW4gd2l0aG91dCBkZWxldGluZyAucHljLy5weW8gZmlyc3Q6Ci1wYXVzZQotCi06UW1vZGUKLWVjaG8gb24KLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzguMC9zZWxlY3QudmNwcm9qIGIvUEMvVlM4LjAvc2VsZWN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcxZmMxNi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9zZWxlY3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJzZWxlY3QiDQotCVByb2plY3RHVUlEPSJ7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfSINCi0JUm9vdE5hbWVzcGFjZT0ic2VsZWN0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzZWxlY3Rtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZiZTVkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJzcWxpdGUzIg0KLQlQcm9qZWN0R1VJRD0ie0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0iDQotCVJvb3ROYW1lc3BhY2U9InNxbGl0ZTMiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXGRlYnVnLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDsuLlwuLlwuLlxzcWxpdGUtMy42LjIxJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjFcc3FsaXRlMy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMVxzcWxpdGUzZXh0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMVxzcWxpdGUzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvc3FsaXRlMy52c3Byb3BzIGIvUEMvVlM4LjAvc3FsaXRlMy52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzAwMzI4Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3NxbGl0ZTMudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJzcWxpdGUzIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wcyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iU1FMSVRFX0FQST1fX2RlY2xzcGVjKGRsbGV4cG9ydCkiDQotCQlXYXJuaW5nTGV2ZWw9IjEiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NzbC52Y3Byb2ogYi9QQy9WUzguMC9zc2wudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGQ2MzVlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3NzbC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNzbCINCi0JUHJvamVjdEdVSUQ9IntFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9Ig0KLQlSb290TmFtZXNwYWNlPSJzc2wiDQotCUtleXdvcmQ9Ik1ha2VGaWxlUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvdW5pY29kZWRhdGEudmNwcm9qIGIvUEMvVlM4LjAvdW5pY29kZWRhdGEudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2Y3ZDIzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3VuaWNvZGVkYXRhLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0idW5pY29kZWRhdGEiDQotCVByb2plY3RHVUlEPSJ7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfSINCi0JUm9vdE5hbWVzcGFjZT0idW5pY29kZWRhdGEiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhX2RiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHVuaWNvZGVuYW1lX2RiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x1bmljb2RlZGF0YS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3c5eHBvcGVuLnZjcHJvaiBiL1BDL1ZTOC4wL3c5eHBvcGVuLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE0ZDIwNi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC93OXhwb3Blbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1NzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Inc5eHBvcGVuIg0KLQlQcm9qZWN0R1VJRD0ie0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0iDQotCVJvb3ROYW1lc3BhY2U9Inc5eHBvcGVuIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcdzl4cG9wZW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC93aW5zb3VuZC52Y3Byb2ogYi9QQy9WUzguMC93aW5zb3VuZC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNzkzNTcuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvd2luc291bmQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJ3aW5zb3VuZCINCi0JUHJvamVjdEdVSUQ9InsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9Ig0KLQlSb290TmFtZXNwYWNlPSJ3aW5zb3VuZCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3aW5zb3VuZC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3g2NC52c3Byb3BzIGIvUEMvVlM4LjAveDY0LnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODhkNDQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAveDY0LnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iYW1kNjQiDQotCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcilcYW1kNjRcIg0KLQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uTmFtZSlcJChQcm9qZWN0TmFtZSlcIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjY0O19NX1g2NCINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeXRob25FeGUiDQotCQlWYWx1ZT0iJChIT1NUX1BZVEhPTikiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL19zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTOS4wL19zcWxpdGUzLnZjcHJvagppbmRleCBmNzEwMGYxLi44MmM1N2FlIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9fc3FsaXRlMy52Y3Byb2oKKysrIGIvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qCkBAIC01NTUsMTAgKzU1NSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzcWxpdGVjb21wYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9fc3NsLnZjcHJvaiBiL1BDL1ZTOS4wL19zc2wudmNwcm9qCmluZGV4IDk3YWEyOTQuLmI0N2RjMjcgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL19zc2wudmNwcm9qCisrKyBiL1BDL1ZTOS4wL19zc2wudmNwcm9qCkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQogPFZpc3VhbFN0dWRpb1Byb2plY3QNCiAJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQorCVZlcnNpb249IjksMDAiDQogCU5hbWU9Il9zc2wiDQogCVByb2plY3RHVUlEPSJ7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfSINCiAJUm9vdE5hbWVzcGFjZT0iX3NzbCINCkBAIC01Niw3ICs1Niw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTExOCw3ICsxMTgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0xODAsNyArMTgwLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMjQzLDcgKzI0Myw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTMwNSw3ICszMDUsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0zNjgsNyArMzY4LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KIAkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNDMxLDcgKzQzMSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTQ5NCw3ICs0OTQsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQogCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KIAkJCS8+DQogCQkJPFRvb2wNCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fdGVzdGNhcGkudmNwcm9qIGIvUEMvVlM5LjAvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3Byb2oKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gUEMvVlM4LjAvX3Rlc3RjYXBpLnZjcHJvagpyZW5hbWUgdG8gUEMvVlM5LjAvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3Byb2oKaW5kZXggNzZhZDJkOC4uMTRkOTEwZCAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvX3Rlc3RjYXBpLnZjcHJvagorKysgYi9QQy9WUzkuMC9fdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvagpAQCAtMSwxMCArMSwxMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQogPFZpc3VhbFN0dWRpb1Byb2plY3QNCiAJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il90ZXN0Y2FwaSINCi0JUHJvamVjdEdVSUQ9Ins2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9Ig0KLQlSb290TmFtZXNwYWNlPSJfdGVzdGNhcGkiDQorCVZlcnNpb249IjkuMDAiDQorCU5hbWU9Il90ZXN0aW1wb3J0bXVsdGlwbGUiDQorCVByb2plY3RHVUlEPSJ7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfSINCisJUm9vdE5hbWVzcGFjZT0iX3Rlc3RpbXBvcnRtdWx0aXBsZSINCiAJS2V5d29yZD0iV2luMzJQcm9qIg0KIAlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQogCT4NCkBAIC01MTEsNyArNTExLDcgQEAKIAkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCiAJCQk+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90ZXN0Y2FwaW1vZHVsZS5jIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3Rlc3RpbXBvcnRtdWx0aXBsZS5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJPC9GaWx0ZXI+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAva2lsbF9weXRob24uYyBiL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLmMKaW5kZXggYmIzMjNkMy4uNjA0NzMxZiAxMDA2NDQKLS0tIGEvUEMvVlM5LjAva2lsbF9weXRob24uYworKysgYi9QQy9WUzkuMC9raWxsX3B5dGhvbi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKICAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzNbX2RdLmRsbCksCisgICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzRbX2RdLmRsbCksCiAgICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgogICAgICAgICAgKiBOb3Qgd29ydGggbG9vc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sgCiAgICAgICAgICAqIGZvciBqdXN0IHRoZSBweXRob24gZXhlY3V0YWJsZSBzaG91bGQgYmUgc3VmZmljaWVudC4KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3BjYnVpbGQuc2xuIGIvUEMvVlM5LjAvcGNidWlsZC5zbG4KaW5kZXggOGY4Y2JiNi4uYmE3ZjY5YyAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvcGNidWlsZC5zbG4KKysrIGIvUEMvVlM5LjAvcGNidWlsZC5zbG4KQEAgLTIwLDExICsyMCw2IEBACiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCiAJRW5kUHJvamVjdFNlY3Rpb24NCiBFbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3OXhwb3BlbiIsICJ3OXhwb3Blbi52Y3Byb2oiLCAie0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9ID0gezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX2J1aWxkaW5mbyIsICJtYWtlX2J1aWxkaW5mby52Y3Byb2oiLCAie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQogRW5kUHJvamVjdA0KIFByb2plY3QoInsyMTUwRTMzMy04RkRDLTQyQTMtOTQ3NC0xQTM5NTZENDZERTh9IikgPSAiU29sdXRpb24gSXRlbXMiLCAiU29sdXRpb24gSXRlbXMiLCAiezU1M0VDMzNFLTk4MTYtNDk5Ni1BNjYwLTVENjE4NkEwQjBCM30iDQpAQCAtODcsNiArODIsMTEgQEAKIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KIAlFbmRQcm9qZWN0U2VjdGlvbg0KIEVuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0aW1wb3J0bXVsdGlwbGUiLCAiX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3Byb2oiLCAiezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0iDQorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCisJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCisJRW5kUHJvamVjdFNlY3Rpb24NCitFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3Byb2oiLCAiezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQogCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCkBAIC00MjAsNiArNDIwLDIyIEBACiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQpAQCAtNjUxLDYgKzY2NywyMiBAQAogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAlFbmRHbG9iYWxTZWN0aW9uDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uDQogCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UNCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9weXByb2plY3QudnNwcm9wcyBiL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzCmluZGV4IGZmMzc1OWUuLmVkNTQ2NGQgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzCisrKyBiL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzCkBAIC0zOCw3ICszOCw3IEBACiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0iUHlEbGxOYW1lIg0KLQkJVmFsdWU9InB5dGhvbjMzIg0KKwkJVmFsdWU9InB5dGhvbjM0Ig0KIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJQeXRob25FeGUiDQpAQCAtNTAsNyArNTAsNyBAQAogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9InNxbGl0ZTNEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjcuMTIiDQorCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjguMSINCiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0iYnoyRGlyIg0KQEAgLTU4LDcgKzU4LDcgQEAKIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJsem1hRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVx4ei01LjAuMyINCisJCVZhbHVlPSIkKGV4dGVybmFsc0RpcilceHotNS4wLjUiDQogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9Im9wZW5zc2xEaXIiDQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagppbmRleCA5ZmI2M2ZmLi5jZjYwNDcwIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagorKysgYi9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagpAQCAtMTExOSw3ICsxMTE5LDcgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xvcGVyYXRvci5jIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX29wZXJhdG9yLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCkBAIC0xMTU1LDYgKzExNTUsMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzcmUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3JlX2NvbnN0YW50cy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzcmVfbGliLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdGF0LmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTI0Miw3NCArMTI1OCw2IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jIg0KLQkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAtMTU4Nyw2ICsxNTM1LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHJlcGxhY2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvdzl4cG9wZW4udmNwcm9qIGIvUEMvVlM5LjAvdzl4cG9wZW4udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTg1YjAwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL3c5eHBvcGVuLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0idzl4cG9wZW4iDQotCVByb2plY3RHVUlEPSJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUm9vdE5hbWVzcGFjZT0idzl4cG9wZW4iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3OXhwb3Blbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL19tc2kuYyBiL1BDL19tc2kuYwppbmRleCAwYjViOTRlLi42YTk5YjQwIDEwMDY0NAotLS0gYS9QQy9fbXNpLmMKKysrIGIvUEMvX21zaS5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyBGTkZDSU9QRU4oY2Jfb3BlbikKIHsKLSAgICBpbnQgcmVzdWx0ID0gX29wZW4ocHN6RmlsZSwgb2ZsYWcsIHBtb2RlKTsKKyAgICBpbnQgcmVzdWx0ID0gX29wZW4ocHN6RmlsZSwgb2ZsYWcgfCBPX05PSU5IRVJJVCwgcG1vZGUpOwogICAgIGlmIChyZXN1bHQgPT0gLTEpCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjMsNyArNjMsNyBAQAogCiBzdGF0aWMgRk5GQ0lSRUFEKGNiX3JlYWQpCiB7Ci0gICAgVUlOVCByZXN1bHQgPSAoVUlOVClfcmVhZChoZiwgbWVtb3J5LCBjYik7CisgICAgVUlOVCByZXN1bHQgPSAoVUlOVClfcmVhZCgoaW50KWhmLCBtZW1vcnksIGNiKTsKICAgICBpZiAocmVzdWx0ICE9IGNiKQogICAgICAgICAqZXJyID0gZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTcxLDcgKzcxLDcgQEAKIAogc3RhdGljIEZORkNJV1JJVEUoY2Jfd3JpdGUpCiB7Ci0gICAgVUlOVCByZXN1bHQgPSAoVUlOVClfd3JpdGUoaGYsIG1lbW9yeSwgY2IpOworICAgIFVJTlQgcmVzdWx0ID0gKFVJTlQpX3dyaXRlKChpbnQpaGYsIG1lbW9yeSwgY2IpOwogICAgIGlmIChyZXN1bHQgIT0gY2IpCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzksNyArNzksNyBAQAogCiBzdGF0aWMgRk5GQ0lDTE9TRShjYl9jbG9zZSkKIHsKLSAgICBpbnQgcmVzdWx0ID0gX2Nsb3NlKGhmKTsKKyAgICBpbnQgcmVzdWx0ID0gX2Nsb3NlKChpbnQpaGYpOwogICAgIGlmIChyZXN1bHQgIT0gMCkKICAgICAgICAgKmVyciA9IGVycm5vOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04Nyw3ICs4Nyw3IEBACiAKIHN0YXRpYyBGTkZDSVNFRUsoY2Jfc2VlaykKIHsKLSAgICBsb25nIHJlc3VsdCA9IChsb25nKV9sc2VlayhoZiwgZGlzdCwgc2Vla3R5cGUpOworICAgIGxvbmcgcmVzdWx0ID0gKGxvbmcpX2xzZWVrKChpbnQpaGYsIGRpc3QsIHNlZWt0eXBlKTsKICAgICBpZiAocmVzdWx0ID09IC0xKQogICAgICAgICAqZXJyID0gZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAgICAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKIAotICAgIHJldHVybiBfb3Blbihwc3pOYW1lLCBfT19SRE9OTFkgfCBfT19CSU5BUlkpOworICAgIHJldHVybiBfb3Blbihwc3pOYW1lLCBfT19SRE9OTFkgfCBfT19CSU5BUlkgfCBPX05PSU5IRVJJVCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCogZmNpY3JlYXRlKFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0KiBhcmdzKQpAQCAtMTAzMCw0MCArMTAzMCw0MCBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lEQk9QRU5fVFJBTlNBQ1QiLCAoaW50KU1TSURCT1BFTl9UUkFOU0FDVCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSURCT1BFTl9QQVRDSEZJTEUiLCAoaW50KU1TSURCT1BFTl9QQVRDSEZJTEUpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSUNPTElORk9fTkFNRVMiLCBNU0lDT0xJTkZPX05BTUVTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJQ09MSU5GT19UWVBFUyIsIE1TSUNPTElORk9fVFlQRVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSUNPTElORk9fTkFNRVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSUNPTElORk9fVFlQRVMpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9TRUVLIiwgTVNJTU9ESUZZX1NFRUspOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfUkVGUkVTSCIsIE1TSU1PRElGWV9SRUZSRVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0lOU0VSVCIsIE1TSU1PRElGWV9JTlNFUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfVVBEQVRFIiwgTVNJTU9ESUZZX1VQREFURSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9BU1NJR04iLCBNU0lNT0RJRllfQVNTSUdOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1JFUExBQ0UiLCBNU0lNT0RJRllfUkVQTEFDRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9NRVJHRSIsIE1TSU1PRElGWV9NRVJHRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9ERUxFVEUiLCBNU0lNT0RJRllfREVMRVRFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0lOU0VSVF9URU1QT1JBUlkiLCBNU0lNT0RJRllfSU5TRVJUX1RFTVBPUkFSWSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9WQUxJREFURSIsIE1TSU1PRElGWV9WQUxJREFURSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9WQUxJREFURV9ORVciLCBNU0lNT0RJRllfVkFMSURBVEVfTkVXKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEIiwgTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFX0RFTEVURSIsIE1TSU1PRElGWV9WQUxJREFURV9ERUxFVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9TRUVLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfUkVGUkVTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0lOU0VSVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1VQREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0FTU0lHTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1JFUExBQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9NRVJHRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0RFTEVURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0lOU0VSVF9URU1QT1JBUlkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9WQUxJREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1ZBTElEQVRFX05FVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfVkFMSURBVEVfREVMRVRFKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ09ERVBBR0UiLCBQSURfQ09ERVBBR0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfVElUTEUiLCBQSURfVElUTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfU1VCSkVDVCIsIFBJRF9TVUJKRUNUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0FVVEhPUiIsIFBJRF9BVVRIT1IpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfS0VZV09SRFMiLCBQSURfS0VZV09SRFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ09NTUVOVFMiLCBQSURfQ09NTUVOVFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfVEVNUExBVEUiLCBQSURfVEVNUExBVEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfTEFTVEFVVEhPUiIsIFBJRF9MQVNUQVVUSE9SKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1JFVk5VTUJFUiIsIFBJRF9SRVZOVU1CRVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfTEFTVFBSSU5URUQiLCBQSURfTEFTVFBSSU5URUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ1JFQVRFX0RUTSIsIFBJRF9DUkVBVEVfRFRNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0xBU1RTQVZFX0RUTSIsIFBJRF9MQVNUU0FWRV9EVE0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfUEFHRUNPVU5UIiwgUElEX1BBR0VDT1VOVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9XT1JEQ09VTlQiLCBQSURfV09SRENPVU5UKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0NIQVJDT1VOVCIsIFBJRF9DSEFSQ09VTlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQVBQTkFNRSIsIFBJRF9BUFBOQU1FKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1NFQ1VSSVRZIiwgUElEX1NFQ1VSSVRZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQ09ERVBBR0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9USVRMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1NVQkpFQ1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9BVVRIT1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9LRVlXT1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0NPTU1FTlRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfVEVNUExBVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9MQVNUQVVUSE9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfUkVWTlVNQkVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfTEFTVFBSSU5URUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9DUkVBVEVfRFRNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfTEFTVFNBVkVfRFRNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfUEFHRUNPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfV09SRENPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQ0hBUkNPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQVBQTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1NFQ1VSSVRZKTsKIAogICAgIE1TSUVycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uICgiX21zaS5NU0lFcnJvciIsIE5VTEwsIE5VTEwpOwogICAgIGlmICghTVNJRXJyb3IpCmRpZmYgLS1naXQgYS9QQy9iZGlzdF93aW5pbnN0L2luc3RhbGwuYyBiL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCmluZGV4IGMxMWQ0NWQuLmU5NDAxZDkgMTAwNjQ0Ci0tLSBhL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCisrKyBiL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCkBAIC03NDMsNyArNzQzLDcgQEAKICAgICBpZiAocGF0aG5hbWUgPT0gTlVMTCB8fCBwYXRobmFtZVswXSA9PSAnXDAnKQogICAgICAgICByZXR1cm4gMjsKIAotICAgIGZoID0gb3BlbihwYXRobmFtZSwgX09fUkRPTkxZKTsKKyAgICBmaCA9IG9wZW4ocGF0aG5hbWUsIF9PX1JET05MWSB8IE9fTk9JTkhFUklUKTsKICAgICBpZiAoLTEgPT0gZmgpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBwb3N0aW5zdGFsbC1zY3JpcHQgJXNcbiIsCiAgICAgICAgICAgICBwYXRobmFtZSk7CmRpZmYgLS1naXQgYS9QQy9jb25maWcuYyBiL1BDL2NvbmZpZy5jCmluZGV4IDU3YjUwNzMuLjcyYzkzODEgMTAwNjQ0Ci0tLSBhL1BDL2NvbmZpZy5jCisrKyBiL1BDL2NvbmZpZy5jCkBAIC0xMywxMSArMTMsMTIgQEAKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X2NtYXRoKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfZXJybm8odm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9mYXVsdGhhbmRsZXIodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fdHJhY2VtYWxsb2Modm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9nYyh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X21hdGgodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fbWQ1KHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfbnQodm9pZCk7Ci1leHRlcm4gUHlPYmplY3QqIFB5SW5pdF9vcGVyYXRvcih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19vcGVyYXRvcih2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X3NpZ25hbCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19zaGExKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3NoYTI1Nih2b2lkKTsKQEAgLTY0LDYgKzY1LDggQEAKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X2F0ZXhpdCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogX1B5V2FybmluZ3NfSW5pdCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19zdHJpbmcodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RhdCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19vcGNvZGUodm9pZCk7CiAKIC8qIHRvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5IG1hcmtlciBmb3IgYWRkaXRpb25hbCAiZXh0ZXJuIiAqLwogLyogLS0gQURETU9EVUxFIE1BUktFUiAxIC0tICovCkBAIC04Nyw3ICs5MCw3IEBACiAgICAgeyJnYyIsIFB5SW5pdF9nY30sCiAgICAgeyJtYXRoIiwgUHlJbml0X21hdGh9LAogICAgIHsibnQiLCBQeUluaXRfbnR9LCAvKiBVc2UgdGhlIE5UIG9zIGZ1bmN0aW9ucywgbm90IHBvc2l4ICovCi0gICAgeyJvcGVyYXRvciIsIFB5SW5pdF9vcGVyYXRvcn0sCisgICAgeyJfb3BlcmF0b3IiLCBQeUluaXRfX29wZXJhdG9yfSwKICAgICB7InNpZ25hbCIsIFB5SW5pdF9zaWduYWx9LAogICAgIHsiX21kNSIsIFB5SW5pdF9fbWQ1fSwKICAgICB7Il9zaGExIiwgUHlJbml0X19zaGExfSwKQEAgLTEwMSw2ICsxMDQsNyBAQAogICAgIHsibXN2Y3J0IiwgUHlJbml0X21zdmNydH0sCiAgICAgeyJfbG9jYWxlIiwgUHlJbml0X19sb2NhbGV9LAogI2VuZGlmCisgICAgeyJfdHJhY2VtYWxsb2MiLCBQeUluaXRfX3RyYWNlbWFsbG9jfSwKICAgICAvKiBYWFggU2hvdWxkIF93aW5hcGkgZ28gaW4gYSBXSU4zMiBibG9jaz8gIG5vdCBXSU42ND8gKi8KICAgICB7Il93aW5hcGkiLCBQeUluaXRfX3dpbmFwaX0sCiAKQEAgLTE1NCw2ICsxNTgsOCBAQAogICAgIHsiX2lvIiwgUHlJbml0X19pb30sCiAgICAgeyJfcGlja2xlIiwgUHlJbml0X19waWNrbGV9LAogICAgIHsiYXRleGl0IiwgUHlJbml0X2F0ZXhpdH0sCisgICAgeyJfc3RhdCIsIFB5SW5pdF9fc3RhdH0sCisgICAgeyJfb3Bjb2RlIiwgUHlJbml0X19vcGNvZGV9LAogCiAgICAgLyogU2VudGluZWwgKi8KICAgICB7MCwgMH0KZGlmZiAtLWdpdCBhL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2ogYi9QQy9leGFtcGxlX250L2V4YW1wbGUudmNwcm9qCmluZGV4IGZiYTAwYjYuLmRmMzYzNDEgMTAwNjQ0Ci0tLSBhL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2oKKysrIGIvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvagpAQCAtMzksNyArMzksNyBAQAogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL2V4cG9ydDppbml0ZXhhbXBsZSINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMzMubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24zNC5saWIiDQogCQkJCU91dHB1dEZpbGU9Ii5cUmVsZWFzZS9leGFtcGxlLnB5ZCINCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQpAQCAtMTA1LDcgKzEwNSw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvZXhwb3J0OmluaXRleGFtcGxlIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24zM19kLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMzRfZC5saWIiDQogCQkJCU91dHB1dEZpbGU9Ii5cRGVidWcvZXhhbXBsZV9kLnB5ZCINCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQpkaWZmIC0tZ2l0IGEvUEMvZ2V0cGF0aHAuYyBiL1BDL2dldHBhdGhwLmMKaW5kZXggYjViZjMyNS4uZGViNDBlNyAxMDA2NDQKLS0tIGEvUEMvZ2V0cGF0aHAuYworKysgYi9QQy9nZXRwYXRocC5jCkBAIC0xLDYgKzEsNiBAQAogCiAvKiBSZXR1cm4gdGhlIGluaXRpYWwgbW9kdWxlIHNlYXJjaCBwYXRoLiAqLwotLyogVXNlZCBieSBET1MsIE9TLzIsIFdpbmRvd3MgMy4xLCBXaW5kb3dzIDk1Lzk4LCBXaW5kb3dzIE5ULiAqLworLyogVXNlZCBieSBET1MsIFdpbmRvd3MgMy4xLCBXaW5kb3dzIDk1Lzk4LCBXaW5kb3dzIE5ULiAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBQQVRIIFJVTEVTIEZPUiBXSU5ET1dTOgpAQCAtMjQ1LDkgKzI0NSw5IEBACiAgICAgLyogVHJpZWQgdG8gdXNlIHN5c2dldCgid2ludmVyIikgYnV0IGhlcmUgaXMgdG9vIGVhcmx5IDotKCAqLwogICAgIHZlcnNpb25MZW4gPSBzdHJsZW4oUHlXaW5fRExMVmVyc2lvblN0cmluZyk7CiAgICAgLyogU3BhY2UgZm9yIGFsbCB0aGUgY2hhcnMsIHBsdXMgb25lIFwwICovCi0gICAga2V5QnVmID0ga2V5QnVmUHRyID0gbWFsbG9jKHNpemVvZihrZXlQcmVmaXgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFdDSEFSKSoodmVyc2lvbkxlbi0xKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrZXlTdWZmaXgpKTsKKyAgICBrZXlCdWYgPSBrZXlCdWZQdHIgPSBQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKGtleVByZWZpeCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV0NIQVIpKih2ZXJzaW9uTGVuLTEpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtleVN1ZmZpeCkpOwogICAgIGlmIChrZXlCdWY9PU5VTEwpIGdvdG8gZG9uZTsKIAogICAgIG1lbWNweShrZXlCdWZQdHIsIGtleVByZWZpeCwgc2l6ZW9mKGtleVByZWZpeCktc2l6ZW9mKFdDSEFSKSk7CkBAIC0yNzEsNyArMjcxLDcgQEAKICAgICAvKiBBbGxvY2F0ZSBhIHRlbXAgYXJyYXkgb2YgY2hhciBidWZmZXJzLCBzbyB3ZSBvbmx5IG5lZWQgdG8gbG9vcAogICAgICAgIHJlYWRpbmcgdGhlIHJlZ2lzdHJ5IG9uY2UKICAgICAqLwotICAgIHBwUGF0aHMgPSBtYWxsb2MoIHNpemVvZihXQ0hBUiAqKSAqIG51bUtleXMgKTsKKyAgICBwcFBhdGhzID0gUHlNZW1fUmF3TWFsbG9jKCBzaXplb2YoV0NIQVIgKikgKiBudW1LZXlzICk7CiAgICAgaWYgKHBwUGF0aHM9PU5VTEwpIGdvdG8gZG9uZTsKICAgICBtZW1zZXQocHBQYXRocywgMCwgc2l6ZW9mKFdDSEFSICopICogbnVtS2V5cyk7CiAgICAgLyogTG9vcCBvdmVyIGFsbCBzdWJrZXlzLCBhbGxvY2F0aW5nIGEgdGVtcCBzdWItYnVmZmVyLiAqLwpAQCAtMjkzLDcgKzI5Myw3IEBACiAgICAgICAgIC8qIEZpbmQgdGhlIHZhbHVlIG9mIHRoZSBidWZmZXIgc2l6ZSwgbWFsbG9jLCB0aGVuIHJlYWQgaXQgKi8KICAgICAgICAgUmVnUXVlcnlWYWx1ZUV4VyhzdWJLZXksIE5VTEwsIDAsIE5VTEwsIE5VTEwsICZyZXFkU2l6ZSk7CiAgICAgICAgIGlmIChyZXFkU2l6ZSkgewotICAgICAgICAgICAgcHBQYXRoc1tpbmRleF0gPSBtYWxsb2MocmVxZFNpemUpOworICAgICAgICAgICAgcHBQYXRoc1tpbmRleF0gPSBQeU1lbV9SYXdNYWxsb2MocmVxZFNpemUpOwogICAgICAgICAgICAgaWYgKHBwUGF0aHNbaW5kZXhdKSB7CiAgICAgICAgICAgICAgICAgUmVnUXVlcnlWYWx1ZUV4VyhzdWJLZXksIE5VTEwsIDAsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUEJZVEUpcHBQYXRoc1tpbmRleF0sCkBAIC0zMDgsNyArMzA4LDcgQEAKICAgICBpZiAoZGF0YVNpemUgPT0gMCkgZ290byBkb25lOwogCiAgICAgLyogb3JpZ2luYWwgZGF0YXNpemUgZnJvbSBSZWdRdWVyeUluZm8gZG9lc24ndCBpbmNsdWRlIHRoZSBcMCAqLwotICAgIGRhdGFCdWYgPSBtYWxsb2MoKGRhdGFTaXplKzEpICogc2l6ZW9mKFdDSEFSKSk7CisgICAgZGF0YUJ1ZiA9IFB5TWVtX1Jhd01hbGxvYygoZGF0YVNpemUrMSkgKiBzaXplb2YoV0NIQVIpKTsKICAgICBpZiAoZGF0YUJ1ZikgewogICAgICAgICBXQ0hBUiAqc3pDdXIgPSBkYXRhQnVmOwogICAgICAgICBEV09SRCByZXFkU2l6ZSA9IGRhdGFTaXplOwpAQCAtMzQ2LDE0ICszNDYsMTMgQEAKIGRvbmU6CiAgICAgLyogTG9vcCBmcmVlaW5nIG15IHRlbXAgYnVmZmVycyAqLwogICAgIGlmIChwcFBhdGhzKSB7Ci0gICAgICAgIGZvcihpbmRleD0wO2luZGV4PG51bUtleXM7aW5kZXgrKykKLSAgICAgICAgICAgIGlmIChwcFBhdGhzW2luZGV4XSkgZnJlZShwcFBhdGhzW2luZGV4XSk7Ci0gICAgICAgIGZyZWUocHBQYXRocyk7CisgICAgICAgIGZvcihpbmRleD0wOyBpbmRleDxudW1LZXlzOyBpbmRleCsrKQorICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwcFBhdGhzW2luZGV4XSk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocHBQYXRocyk7CiAgICAgfQogICAgIGlmIChuZXdLZXkpCiAgICAgICAgIFJlZ0Nsb3NlS2V5KG5ld0tleSk7Ci0gICAgaWYgKGtleUJ1ZikKLSAgICAgICAgZnJlZShrZXlCdWYpOworICAgIFB5TWVtX1Jhd0ZyZWUoa2V5QnVmKTsKICAgICByZXR1cm4gcmV0dmFsOwogfQogI2VuZGlmIC8qIFB5X0VOQUJMRV9TSEFSRUQgKi8KQEAgLTQzNCw3ICs0MzMsNyBAQAogICAgICAgICBjaGFyICogcCA9IGZnZXRzKGJ1ZmZlciwgTUFYUEFUSExFTioyLCBlbnZfZmlsZSk7CiAgICAgICAgIHdjaGFyX3QgdG1wYnVmZmVyW01BWFBBVEhMRU4qMisxXTsKICAgICAgICAgUHlPYmplY3QgKiBkZWNvZGVkOwotICAgICAgICBpbnQgbjsKKyAgICAgICAgc2l6ZV90IG47CiAKICAgICAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjE2LDcgKzYxNSw3IEBACiAgICAgaWYgKGVudnBhdGggIT0gTlVMTCkKICAgICAgICAgYnVmc3ogKz0gd2NzbGVuKGVudnBhdGgpICsgMTsKIAotICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZiA9IG1hbGxvYyhidWZzeipzaXplb2Yod2NoYXJfdCkpOworICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZiA9IFB5TWVtX1Jhd01hbGxvYyhidWZzeipzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmIChidWYgPT0gTlVMTCkgewogICAgICAgICAvKiBXZSBjYW4ndCBleGl0LCBzbyBwcmludCBhIHdhcm5pbmcgYW5kIGxpbXAgYWxvbmcgKi8KICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBtYWxsb2MgZHluYW1pYyBQWVRIT05QQVRILlxuIik7CkBAIC02MjksMTAgKzYyOCw4IEBACiAgICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQWVRIT05QQVRIOwogICAgICAgICB9CiAjaWZkZWYgTVNfV0lORE9XUwotICAgICAgICBpZiAobWFjaGluZXBhdGgpCi0gICAgICAgICAgICBmcmVlKG1hY2hpbmVwYXRoKTsKLSAgICAgICAgaWYgKHVzZXJwYXRoKQotICAgICAgICAgICAgZnJlZSh1c2VycGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobWFjaGluZXBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHVzZXJwYXRoKTsKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02NTIsMTMgKzY0OSwxMyBAQAogICAgICAgICB3Y3NjcHkoYnVmLCB1c2VycGF0aCk7CiAgICAgICAgIGJ1ZiA9IHdjc2NocihidWYsIEwnXDAnKTsKICAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgIGZyZWUodXNlcnBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHVzZXJwYXRoKTsKICAgICB9CiAgICAgaWYgKG1hY2hpbmVwYXRoKSB7CiAgICAgICAgIHdjc2NweShidWYsIG1hY2hpbmVwYXRoKTsKICAgICAgICAgYnVmID0gd2NzY2hyKGJ1ZiwgTCdcMCcpOwogICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgZnJlZShtYWNoaW5lcGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobWFjaGluZXBhdGgpOwogICAgIH0KICAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghc2tpcGRlZmF1bHQpIHsKQEAgLTc0NSw3ICs3NDIsNyBAQAogUHlfU2V0UGF0aChjb25zdCB3Y2hhcl90ICpwYXRoKQogewogICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGggIT0gTlVMTCkgewotICAgICAgICBmcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobW9kdWxlX3NlYXJjaF9wYXRoKTsKICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKICAgICB9CiAgICAgaWYgKHBhdGggIT0gTlVMTCkgewpAQCAtNzUzLDEwICs3NTAsMTAgQEAKICAgICAgICAgd2NoYXJfdCAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7CiAgICAgICAgIHdjc25jcHkocHJvZ3BhdGgsIHByb2csIE1BWFBBVEhMRU4pOwogICAgICAgICBwcmVmaXhbMF0gPSBMJ1wwJzsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gbWFsbG9jKCh3Y3NsZW4ocGF0aCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFB5TWVtX1Jhd01hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpCiAgICAgICAgICAgICB3Y3NjcHkobW9kdWxlX3NlYXJjaF9wYXRoLCBwYXRoKTsKLQl9CisgICAgfQogfQogCiB3Y2hhcl90ICoKZGlmZiAtLWdpdCBhL1BDL2xhdW5jaGVyLmMgYi9QQy9sYXVuY2hlci5jCmluZGV4IDIxNmE1NjIuLmVlM2NkNDQgMTAwNjQ0Ci0tLSBhL1BDL2xhdW5jaGVyLmMKKysrIGIvUEMvbGF1bmNoZXIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBWaW5heSBTYWppcC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIFZpbmF5IFNhamlwLgogICogTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgogICoKICAqIEJhc2VkIG9uIHRoZSB3b3JrIG9mOgpAQCAtMTgsNyArMTgsMjggQEAKIAogLyogQnVpbGQgb3B0aW9ucy4gKi8KICNkZWZpbmUgU0tJUF9QUkVGSVgKLS8qICNkZWZpbmUgU0VBUkNIX1BBVEggKi8KKyNkZWZpbmUgU0VBUkNIX1BBVEgKKworLyogRXJyb3IgY29kZXMgKi8KKworI2RlZmluZSBSQ19OT19TVERfSEFORExFUyAgIDEwMAorI2RlZmluZSBSQ19DUkVBVEVfUFJPQ0VTUyAgIDEwMQorI2RlZmluZSBSQ19CQURfVklSVFVBTF9QQVRIIDEwMgorI2RlZmluZSBSQ19OT19QWVRIT04gICAgICAgIDEwMworI2RlZmluZSBSQ19OT19NRU1PUlkgICAgICAgIDEwNAorLyoKKyAqIFNDUklQVF9XUkFQUEVSIGlzIHVzZWQgdG8gY2hvb3NlIGJldHdlZW4gdHdvIHZhcmlhbnRzIG9mIGFuIGV4ZWN1dGFibGUgYnVpbHQKKyAqIGZyb20gdGhpcyBzb3VyY2UgZmlsZS4gSWYgbm90IGRlZmluZWQsIHRoZSBQRVAgMzk3IFB5dGhvbiBsYXVuY2hlciBpcyBidWlsdDsKKyAqIGlmIGRlZmluZWQsIGEgc2NyaXB0IGxhdW5jaGVyIG9mIHRoZSB0eXBlIHVzZWQgYnkgc2V0dXB0b29scyBpcyBidWlsdCwgd2hpY2gKKyAqIGxvb2tzIGZvciBhIHNjcmlwdCBuYW1lIHJlbGF0ZWQgdG8gdGhlIGV4ZWN1dGFibGUgbmFtZSBhbmQgcnVucyB0aGF0IHNjcmlwdAorICogd2l0aCB0aGUgYXBwcm9wcmlhdGUgUHl0aG9uIGludGVycHJldGVyLgorICoKKyAqIFNDUklQVF9XUkFQUEVSIHNob3VsZCBiZSB1bmRlZmluZWQgaW4gdGhlIHNvdXJjZSwgYW5kIGRlZmluZWQgaW4gYSBWUyBwcm9qZWN0CisgKiB3aGljaCBidWlsZHMgdGhlIHNldHVwdG9vbHMtc3R5bGUgbGF1bmNoZXIuCisgKi8KKyNpZiBkZWZpbmVkKFNDUklQVF9XUkFQUEVSKQorI2RlZmluZSBSQ19OT19TQ1JJUFQgICAgICAgIDEwNQorI2VuZGlmCiAKIC8qIEp1c3QgZm9yIG5vdyAtIHN0YXRpYyBkZWZpbml0aW9uICovCiAKQEAgLTMyLDMyICs1Myw2IEBACiAgICAgcmV0dXJuIHA7CiB9CiAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGhlcmUgdG8gc2ltcGxpZnkgbWVtb3J5IG1hbmFnZW1lbnQKLSAqIGFuZCB0byB0cmVhdCBibGFuayB2YWx1ZXMgYXMgaWYgdGhleSBhcmUgYWJzZW50LgotICovCi1zdGF0aWMgd2NoYXJfdCAqIGdldF9lbnYod2NoYXJfdCAqIGtleSkKLXsKLSAgICAvKiBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSwganVzdCBsaWtlIGdldGVudiAqLwotICAgIHN0YXRpYyB3Y2hhcl90IGJ1ZlsyNTZdOwotICAgIERXT1JEIHJlc3VsdCA9IEdldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgYnVmLCAyNTYpOwotCi0gICAgaWYgKHJlc3VsdCA+IDI1NSkgewotICAgICAgICAvKiBMYXJnZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWNjZXB0IHNvbWUgbGVha2FnZSAqLwotICAgICAgICB3Y2hhcl90ICpidWYyID0gKHdjaGFyX3QqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiAocmVzdWx0KzEpKTsKLSAgICAgICAgR2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoa2V5LCBidWYyLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gYnVmMjsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0ID09IDApCi0gICAgICAgIC8qIEVpdGhlciBzb21lIGVycm9yLCBlLmcuIEVSUk9SX0VOVlZBUl9OT1RfRk9VTkQsCi0gICAgICAgICAgIG9yIGFuIGVtcHR5IGVudmlyb25tZW50IHZhcmlhYmxlLiAqLwotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJldHVybiBidWY7Ci19Ci0KLQogc3RhdGljIHZvaWQKIGRlYnVnKHdjaGFyX3QgKiBmb3JtYXQsIC4uLikKIHsKQEAgLTEwMCwxMSArOTUsNDAgQEAKICNpZiAhZGVmaW5lZChfV0lORE9XUykKICAgICBmd3ByaW50ZihzdGRlcnIsIEwiJXNcbiIsIG1lc3NhZ2UpOwogI2Vsc2UKLSAgICBNZXNzYWdlQm94KE5VTEwsIG1lc3NhZ2UsIFRFWFQoIlB5dGhvbiBMYXVuY2hlciBpcyBzb3JyeSB0byBzYXkgLi4uIiksIE1CX09LKTsgCisgICAgTWVzc2FnZUJveChOVUxMLCBtZXNzYWdlLCBURVhUKCJQeXRob24gTGF1bmNoZXIgaXMgc29ycnkgdG8gc2F5IC4uLiIpLAorICAgICAgICAgICAgICAgTUJfT0spOyAKICNlbmRpZgogICAgIEV4aXRQcm9jZXNzKHJjKTsKIH0KIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSB0byBzaW1wbGlmeSBtZW1vcnkgbWFuYWdlbWVudAorICogYW5kIHRvIHRyZWF0IGJsYW5rIHZhbHVlcyBhcyBpZiB0aGV5IGFyZSBhYnNlbnQuCisgKi8KK3N0YXRpYyB3Y2hhcl90ICogZ2V0X2Vudih3Y2hhcl90ICoga2V5KQoreworICAgIC8qIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlLCBqdXN0IGxpa2UgZ2V0ZW52ICovCisgICAgc3RhdGljIHdjaGFyX3QgYnVmW0JVRlNJWkVdOworICAgIERXT1JEIHJlc3VsdCA9IEdldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgYnVmLCBCVUZTSVpFKTsKKworICAgIGlmIChyZXN1bHQgPj0gQlVGU0laRSkgeworICAgICAgICAvKiBMYXJnZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWNjZXB0IHNvbWUgbGVha2FnZSAqLworICAgICAgICB3Y2hhcl90ICpidWYyID0gKHdjaGFyX3QqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiAocmVzdWx0KzEpKTsKKyAgICAgICAgaWYgKGJ1ZjIgPSBOVUxMKSB7CisgICAgICAgICAgICBlcnJvcihSQ19OT19NRU1PUlksIEwiQ291bGQgbm90IGFsbG9jYXRlIGVudmlyb25tZW50IGJ1ZmZlciIpOworICAgICAgICB9CisgICAgICAgIEdldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgYnVmMiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGJ1ZjI7CisgICAgfQorCisgICAgaWYgKHJlc3VsdCA9PSAwKQorICAgICAgICAvKiBFaXRoZXIgc29tZSBlcnJvciwgZS5nLiBFUlJPUl9FTlZWQVJfTk9UX0ZPVU5ELAorICAgICAgICAgICBvciBhbiBlbXB0eSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gYnVmOworfQorCiAjaWYgZGVmaW5lZChfV0lORE9XUykKIAogI2RlZmluZSBQWVRIT05fRVhFQ1VUQUJMRSBMInB5dGhvbncuZXhlIgpAQCAtMTE1LDExICsxMzksNiBAQAogCiAjZW5kaWYKIAotI2RlZmluZSBSQ19OT19TVERfSEFORExFUyAgIDEwMAotI2RlZmluZSBSQ19DUkVBVEVfUFJPQ0VTUyAgIDEwMQotI2RlZmluZSBSQ19CQURfVklSVFVBTF9QQVRIIDEwMgotI2RlZmluZSBSQ19OT19QWVRIT04gICAgICAgIDEwMwotCiAjZGVmaW5lIE1BWF9WRVJTSU9OX1NJWkUgICAgNAogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC00NTcsNiArNDc2LDUxIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmIGRlZmluZWQoU0NSSVBUX1dSQVBQRVIpCisvKgorICogQ2hlY2sgZm9yIGEgc2NyaXB0IGxvY2F0ZWQgYWxvbmdzaWRlIHRoZSBleGVjdXRhYmxlCisgKi8KKworI2lmIGRlZmluZWQoX1dJTkRPV1MpCisjZGVmaW5lIFNDUklQVF9TVUZGSVggTCItc2NyaXB0LnB5dyIKKyNlbHNlCisjZGVmaW5lIFNDUklQVF9TVUZGSVggTCItc2NyaXB0LnB5IgorI2VuZGlmCisKK3N0YXRpYyB3Y2hhcl90IHdyYXBwZWRfc2NyaXB0X3BhdGhbTUFYX1BBVEhdOworCisvKiBMb2NhdGUgdGhlIHNjcmlwdCBiZWluZyB3cmFwcGVkLgorICoKKyAqIFRoaXMgY29kZSBzaG91bGQgc3RvcmUgdGhlIG5hbWUgb2YgdGhlIHdyYXBwZWQgc2NyaXB0IGluCisgKiB3cmFwcGVkX3NjcmlwdF9wYXRoLCBvciB0ZXJtaW5hdGUgdGhlIHByb2dyYW0gd2l0aCBhbiBlcnJvciBpZiB0aGVyZSBpcyBubworICogdmFsaWQgd3JhcHBlZCBzY3JpcHQgZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK2xvY2F0ZV93cmFwcGVkX3NjcmlwdCgpCit7CisgICAgd2NoYXJfdCAqIHA7CisgICAgc2l6ZV90IHBsZW47CisgICAgRFdPUkQgYXR0cnM7CisKKyAgICBwbGVuID0gR2V0TW9kdWxlRmlsZU5hbWVXKE5VTEwsIHdyYXBwZWRfc2NyaXB0X3BhdGgsIE1BWF9QQVRIKTsKKyAgICBwID0gd2NzcmNocih3cmFwcGVkX3NjcmlwdF9wYXRoLCBMJy4nKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgIGRlYnVnKEwiR2V0TW9kdWxlRmlsZU5hbWVXIHJldHVybmVkIHZhbHVlIGhhcyBubyBleHRlbnNpb246ICVzXG4iLAorICAgICAgICAgICAgICB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICAgICAgZXJyb3IoUkNfTk9fU0NSSVBULCBMIldyYXBwZXIgbmFtZSAnJXMnIGlzIG5vdCB2YWxpZC4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICB9CisKKyAgICB3Y3NuY3B5X3MocCwgTUFYX1BBVEggLSAocCAtIHdyYXBwZWRfc2NyaXB0X3BhdGgpICsgMSwgU0NSSVBUX1NVRkZJWCwgX1RSVU5DQVRFKTsKKyAgICBhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyh3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICBpZiAoYXR0cnMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpIHsKKyAgICAgICAgZGVidWcoTCJGaWxlICclcycgbm9uLWV4aXN0ZW50XG4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICAgICAgZXJyb3IoUkNfTk9fU0NSSVBULCBMIlNjcmlwdCBmaWxlICclcycgaXMgbm90IHByZXNlbnQuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgfQorCisgICAgZGVidWcoTCJVc2luZyB3cmFwcGVkIHNjcmlwdCBmaWxlICclcydcbiIsIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworfQorI2VuZGlmCisKIC8qCiAgKiBQcm9jZXNzIGNyZWF0aW9uIGNvZGUKICAqLwpAQCAtNTUwLDcgKzYxNCw3IEBACiAgICAgICAgIGVycm9yKFJDX0NSRUFURV9QUk9DRVNTLCBMIlVuYWJsZSB0byBjcmVhdGUgcHJvY2VzcyB1c2luZyAnJXMnIiwgY21kbGluZSk7CiAgICAgQXNzaWduUHJvY2Vzc1RvSm9iT2JqZWN0KGpvYiwgcGkuaFByb2Nlc3MpOwogICAgIENsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOwotICAgIFdhaXRGb3JTaW5nbGVPYmplY3QocGkuaFByb2Nlc3MsIElORklOSVRFKTsKKyAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgocGkuaFByb2Nlc3MsIElORklOSVRFLCBGQUxTRSk7CiAgICAgb2sgPSBHZXRFeGl0Q29kZVByb2Nlc3MocGkuaFByb2Nlc3MsICZyYyk7CiAgICAgaWYgKCFvaykKICAgICAgICAgZXJyb3IoUkNfQ1JFQVRFX1BST0NFU1MsIEwiRmFpbGVkIHRvIGdldCBleGl0IGNvZGUgb2YgcHJvY2VzcyIpOwpAQCAtNTk1LDEyICs2NTksMTcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyB3Y2hhcl90ICogYnVpbHRpbl92aXJ0dWFsX3BhdGhzIFtdID0gewotICAgIEwiL3Vzci9iaW4vZW52IHB5dGhvbiIsCi0gICAgTCIvdXNyL2Jpbi9weXRob24iLAotICAgIEwiL3Vzci9sb2NhbC9iaW4vcHl0aG9uIiwKLSAgICBMInB5dGhvbiIsCi0gICAgTlVMTAordHlwZWRlZiBzdHJ1Y3QgeworICAgIHdjaGFyX3QgKnNoZWJhbmc7CisgICAgQk9PTCBzZWFyY2g7Cit9IFNIRUJBTkc7CisKK3N0YXRpYyBTSEVCQU5HIGJ1aWx0aW5fdmlydHVhbF9wYXRocyBbXSA9IHsKKyAgICB7IEwiL3Vzci9iaW4vZW52IHB5dGhvbiIsIFRSVUUgfSwKKyAgICB7IEwiL3Vzci9iaW4vcHl0aG9uIiwgRkFMU0UgfSwKKyAgICB7IEwiL3Vzci9sb2NhbC9iaW4vcHl0aG9uIiwgRkFMU0UgfSwKKyAgICB7IEwicHl0aG9uIiwgRkFMU0UgfSwKKyAgICB7IE5VTEwsIEZBTFNFIH0sCiB9OwogCiAvKiBGb3Igbm93LCBhIHN0YXRpYyBhcnJheSBvZiBjb21tYW5kcy4gKi8KQEAgLTc3NiwxMCArODQ1LDEwIEBACiAKIHN0YXRpYyBCT09MCiBwYXJzZV9zaGViYW5nKHdjaGFyX3QgKiBzaGViYW5nX2xpbmUsIGludCBuY2hhcnMsIHdjaGFyX3QgKiogY29tbWFuZCwKLSAgICAgICAgICAgICAgd2NoYXJfdCAqKiBzdWZmaXgpCisgICAgICAgICAgICAgIHdjaGFyX3QgKiogc3VmZml4LCBCT09MICpzZWFyY2gpCiB7CiAgICAgQk9PTCByYyA9IEZBTFNFOwotICAgIHdjaGFyX3QgKiogdnBwOworICAgIFNIRUJBTkcgKiB2cHA7CiAgICAgc2l6ZV90IHBsZW47CiAgICAgd2NoYXJfdCAqIHA7CiAgICAgd2NoYXJfdCB6YXBwZWQ7CkBAIC03ODksMTUgKzg1OCwxNyBAQAogCiAgICAgKmNvbW1hbmQgPSBOVUxMOyAgICAvKiBmYWlsdXJlIHJldHVybiAqLwogICAgICpzdWZmaXggPSBOVUxMOworICAgICpzZWFyY2ggPSBGQUxTRTsKIAogICAgIGlmICgoKnNoZWJhbmdfbGluZSsrID09IEwnIycpICYmICgqc2hlYmFuZ19saW5lKysgPT0gTCchJykpIHsKICAgICAgICAgc2hlYmFuZ19saW5lID0gc2tpcF93aGl0ZXNwYWNlKHNoZWJhbmdfbGluZSk7CiAgICAgICAgIGlmICgqc2hlYmFuZ19saW5lKSB7CiAgICAgICAgICAgICAqY29tbWFuZCA9IHNoZWJhbmdfbGluZTsKLSAgICAgICAgICAgIGZvciAodnBwID0gYnVpbHRpbl92aXJ0dWFsX3BhdGhzOyAqdnBwOyArK3ZwcCkgewotICAgICAgICAgICAgICAgIHBsZW4gPSB3Y3NsZW4oKnZwcCk7Ci0gICAgICAgICAgICAgICAgaWYgKHdjc25jbXAoc2hlYmFuZ19saW5lLCAqdnBwLCBwbGVuKSA9PSAwKSB7CisgICAgICAgICAgICBmb3IgKHZwcCA9IGJ1aWx0aW5fdmlydHVhbF9wYXRoczsgdnBwLT5zaGViYW5nOyArK3ZwcCkgeworICAgICAgICAgICAgICAgIHBsZW4gPSB3Y3NsZW4odnBwLT5zaGViYW5nKTsKKyAgICAgICAgICAgICAgICBpZiAod2NzbmNtcChzaGViYW5nX2xpbmUsIHZwcC0+c2hlYmFuZywgcGxlbikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICByYyA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICpzZWFyY2ggPSB2cHAtPnNlYXJjaDsKICAgICAgICAgICAgICAgICAgICAgLyogV2UgY2FuIGRvIHRoaXMgYmVjYXVzZSBhbGwgYnVpbHRpbiBjb21tYW5kcyBjb250YWluCiAgICAgICAgICAgICAgICAgICAgICAqICJweXRob24iLgogICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTgwNSw3ICs4NzYsNyBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKnZwcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAodnBwLT5zaGViYW5nID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIE5vdCBmb3VuZCBpbiBidWlsdGlucyAtIGxvb2sgaW4gY3VzdG9taXplZCBjb21tYW5kcy4KICAgICAgICAgICAgICAgICAgKgpAQCAtODU2LDcgKzkyNyw3IEBACiB9IEJPTTsKIAogLyoKLSAqIFN0cmljdGx5LCB3ZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBVVEYtMTYgYW5mIFVURi0zMiwgc2luY2UgUHl0aG9uIGl0c2VsZgorICogU3RyaWN0bHksIHdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIFVURi0xNiBhbmQgVVRGLTMyLCBzaW5jZSBQeXRob24gaXRzZWxmCiAgKiBkb2Vzbid0LiBOZXZlciBtaW5kLCBvbmUgZGF5IGl0IG1pZ2h0IC0gdGhlcmUncyBubyBoYXJtIGxlYXZpbmcgaXQgaW4uCiAgKi8KIHN0YXRpYyBCT00gQk9Nc1tdID0gewpAQCAtMTAxMiw4ICsxMDgzLDEwIEBACiAgICAgaW50IGksIGosIG5jaGFycyA9IDA7CiAgICAgaW50IGhlYWRlcl9sZW47CiAgICAgQk9PTCBpc192aXJ0OworICAgIEJPT0wgc2VhcmNoOwogICAgIHdjaGFyX3QgKiBjb21tYW5kOwogICAgIHdjaGFyX3QgKiBzdWZmaXg7CisgICAgQ09NTUFORCAqY21kID0gTlVMTDsKICAgICBJTlNUQUxMRURfUFlUSE9OICogaXA7CiAKICAgICBpZiAocmMgPT0gMCkgewpAQCAtMTEyNSw3ICsxMTk4LDcgQEAKICAgICAgICAgICAgIGlmIChuY2hhcnMgPiAwKSB7CiAgICAgICAgICAgICAgICAgc2hlYmFuZ19saW5lWy0tbmNoYXJzXSA9IEwnXDAnOwogICAgICAgICAgICAgICAgIGlzX3ZpcnQgPSBwYXJzZV9zaGViYW5nKHNoZWJhbmdfbGluZSwgbmNoYXJzLCAmY29tbWFuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3VmZml4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3VmZml4LCAmc2VhcmNoKTsKICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwicGFyc2Vfc2hlYmFuZzogZm91bmQgY29tbWFuZDogJXNcbiIsIGNvbW1hbmQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX3ZpcnQpIHsKQEAgLTExNDEsNiArMTIxNCwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKFJDX0JBRF9WSVJUVUFMX1BBVEgsIEwiVW5rbm93biB2aXJ0dWFsIFwKIHBhdGggJyVzJyIsIGNvbW1hbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCArPSA2OyAgIC8qIHNraXAgcGFzdCAicHl0aG9uIiAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaCAmJiAoKCpjb21tYW5kID09IEwnXDAnKSB8fCBpc3NwYWNlKCpjb21tYW5kKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGlzIGVsaWdpYmxlIGZvciBwYXRoIHNlYXJjaCwgYW5kIHRoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaXMgbm8gdmVyc2lvbiBzcGVjaWZpY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwic2VhcmNoaW5nIFBBVEggZm9yIHB5dGhvbiBleGVjdXRhYmxlXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBmaW5kX29uX3BhdGgoTCJweXRob24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMIlB5dGhvbiBvbiBwYXRoOiAlc1xuIiwgY21kID8gY21kLT52YWx1ZSA6IEwiPG5vdCBmb3VuZD4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwibG9jYXRlZCBweXRob24gb24gUEFUSDogJXNcbiIsIGNtZC0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VfY2hpbGQoY21kLT52YWx1ZSwgc3VmZml4LCBjbWRsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBoZXJlLCBhcyB3ZSBoYXZlIGZvdW5kIHRoZSBjb21tYW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRkFMTCBUSFJPVUdIOiBObyBweXRob24gZm91bmQgb24gUEFUSCwgc28gZmFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJhY2sgdG8gbG9jYXRpbmcgdGhlIGNvcnJlY3QgaW5zdGFsbGVkIHB5dGhvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqY29tbWFuZCAmJiAhdmFsaWRhdGVfdmVyc2lvbihjb21tYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihSQ19CQURfVklSVFVBTF9QQVRILCBMIkludmFsaWQgdmVyc2lvbiBcCiBzcGVjaWZpY2F0aW9uOiAnJXMnLlxuSW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNjcmlwdCwgJ3B5dGhvbicgbmVlZHMgdG8gYmUgXApAQCAtMTIyMyw2ICsxMzEzLDEyIEBACiAgICAgdm9pZCAqIHZlcnNpb25fZGF0YTsKICAgICBWU19GSVhFREZJTEVJTkZPICogZmlsZV9pbmZvOwogICAgIFVJTlQgYmxvY2tfc2l6ZTsKKyAgICBpbnQgaW5kZXg7CisjaWYgZGVmaW5lZChTQ1JJUFRfV1JBUFBFUikKKyAgICBpbnQgbmV3bGVuOworICAgIHdjaGFyX3QgKiBuZXdjb21tYW5kOworICAgIHdjaGFyX3QgKiBhdlsyXTsKKyNlbmRpZgogCiAgICAgd3AgPSBnZXRfZW52KEwiUFlMQVVOQ0hfREVCVUciKTsKICAgICBpZiAoKHdwICE9IE5VTEwpICYmICgqd3AgIT0gTCdcMCcpKQpAQCAtMTI3MSw4ICsxMzY3LDggQEAKICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgZGVidWcoTCJHZXRGaWxlVmVyc2lvbkluZm8gZmFpbGVkOiAlWFxuIiwgR2V0TGFzdEVycm9yKCkpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uX2RhdGEsIEwiXFwiLCAmZmlsZV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJsb2NrX3NpemUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gVmVyUXVlcnlWYWx1ZVcodmVyc2lvbl9kYXRhLCBMIlxcIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUFZPSUQgKikgJmZpbGVfaW5mbywgJmJsb2NrX3NpemUpOwogICAgICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwiVmVyUXVlcnlWYWx1ZSBmYWlsZWQ6ICVYXG4iLCBHZXRMYXN0RXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0xMzAyLDcgKzEzOTgsNDAgQEAKICAgICB9CiAKICAgICBjb21tYW5kID0gc2tpcF9tZShHZXRDb21tYW5kTGluZVcoKSk7Ci0gICAgZGVidWcoTCJDYWxsZWQgd2l0aCBjb21tYW5kIGxpbmU6ICVzIiwgY29tbWFuZCk7CisgICAgZGVidWcoTCJDYWxsZWQgd2l0aCBjb21tYW5kIGxpbmU6ICVzXG4iLCBjb21tYW5kKTsKKworI2lmIGRlZmluZWQoU0NSSVBUX1dSQVBQRVIpCisgICAgLyogVGhlIGxhdW5jaGVyIGlzIGJlaW5nIHVzZWQgaW4gInNjcmlwdCB3cmFwcGVyIiBtb2RlLgorICAgICAqIFRoZXJlIHNob3VsZCB0aGVyZWZvcmUgYmUgYSBQeXRob24gc2NyaXB0IG5hbWVkIDxleGVuYW1lPi1zY3JpcHQucHkgaW4KKyAgICAgKiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGxhdW5jaGVyIGV4ZWN1dGFibGUuCisgICAgICogUHV0IHRoZSBzY3JpcHQgbmFtZSBpbnRvIGFyZ3YgYXMgdGhlIGZpcnN0IChzY3JpcHQgbmFtZSkgYXJndW1lbnQuCisgICAgICovCisKKyAgICAvKiBHZXQgdGhlIHdyYXBwZWQgc2NyaXB0IG5hbWUgLSBpZiB0aGUgc2NyaXB0IGlzIG5vdCBwcmVzZW50LCB0aGlzIHdpbGwKKyAgICAgKiB0ZXJtaW5hdGUgdGhlIHByb2dyYW0gd2l0aCBhbiBlcnJvci4KKyAgICAgKi8KKyAgICBsb2NhdGVfd3JhcHBlZF9zY3JpcHQoKTsKKworICAgIC8qIEFkZCB0aGUgd3JhcHBlZCBzY3JpcHQgdG8gdGhlIHN0YXJ0IG9mIGNvbW1hbmQgKi8KKyAgICBuZXdsZW4gPSB3Y3NsZW4od3JhcHBlZF9zY3JpcHRfcGF0aCkgKyB3Y3NsZW4oY29tbWFuZCkgKyAyOyAvKiAnICcgKyBOVUwgKi8KKyAgICBuZXdjb21tYW5kID0gbWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIG5ld2xlbik7CisgICAgaWYgKCFuZXdjb21tYW5kKSB7CisgICAgICAgIGVycm9yKFJDX05PX01FTU9SWSwgTCJDb3VsZCBub3QgYWxsb2NhdGUgbmV3IGNvbW1hbmQgbGluZSIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgd2NzY3B5X3MobmV3Y29tbWFuZCwgbmV3bGVuLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICAgICAgd2NzY2F0X3MobmV3Y29tbWFuZCwgbmV3bGVuLCBMIiAiKTsKKyAgICAgICAgd2NzY2F0X3MobmV3Y29tbWFuZCwgbmV3bGVuLCBjb21tYW5kKTsKKyAgICAgICAgZGVidWcoTCJSdW5uaW5nIHdyYXBwZWQgc2NyaXB0IHdpdGggY29tbWFuZCBsaW5lICclcydcbiIsIG5ld2NvbW1hbmQpOworICAgICAgICByZWFkX2NvbW1hbmRzKCk7CisgICAgICAgIGF2WzBdID0gd3JhcHBlZF9zY3JpcHRfcGF0aDsKKyAgICAgICAgYXZbMV0gPSBOVUxMOworICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZyhhdiwgbmV3Y29tbWFuZCk7CisgICAgICAgIC8qIFJldHVybnMgaWYgbm8gc2hlYmFuZyBsaW5lIC0gcGFzcyB0byBkZWZhdWx0IHByb2Nlc3NpbmcgKi8KKyAgICAgICAgY29tbWFuZCA9IG5ld2NvbW1hbmQ7CisgICAgICAgIHZhbGlkID0gRkFMU0U7CisgICAgfQorI2Vsc2UKICAgICBpZiAoYXJnYyA8PSAxKSB7CiAgICAgICAgIHZhbGlkID0gRkFMU0U7CiAgICAgICAgIHAgPSBOVUxMOwpAQCAtMTMxMCwxMyArMTQzOSw2IEBACiAgICAgZWxzZSB7CiAgICAgICAgIHAgPSBhcmd2WzFdOwogICAgICAgICBwbGVuID0gd2NzbGVuKHApOwotICAgICAgICBpZiAocFswXSAhPSBMJy0nKSB7Ci0gICAgICAgICAgICByZWFkX2NvbW1hbmRzKCk7Ci0gICAgICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZygmYXJndlsxXSwgY29tbWFuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogTm8gZmlsZSB3aXRoIHNoZWJhbmcsIG9yIGFuIHVucmVjb2duaXNlZCBzaGViYW5nLgotICAgICAgICAgKiBJcyB0aGUgZmlyc3QgYXJnIGEgc3BlY2lhbCB2ZXJzaW9uIHF1YWxpZmllcj8KLSAgICAgICAgICovCiAgICAgICAgIHZhbGlkID0gKCpwID09IEwnLScpICYmIHZhbGlkYXRlX3ZlcnNpb24oJnBbMV0pOwogICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgICAgIGlwID0gbG9jYXRlX3B5dGhvbigmcFsxXSk7CkBAIC0xMzI2LDcgKzE0NDgsMTkgQEAKICAgICAgICAgICAgIGNvbW1hbmQgKz0gd2NzbGVuKHApOwogICAgICAgICAgICAgY29tbWFuZCA9IHNraXBfd2hpdGVzcGFjZShjb21tYW5kKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAxOyBpbmRleCA8IGFyZ2M7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoKmFyZ3ZbaW5kZXhdICE9IEwnLScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4IDwgYXJnYykgeworICAgICAgICAgICAgICAgIHJlYWRfY29tbWFuZHMoKTsKKyAgICAgICAgICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZygmYXJndltpbmRleF0sIGNvbW1hbmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQorI2VuZGlmCisKICAgICBpZiAoIXZhbGlkKSB7CiAgICAgICAgIGlwID0gbG9jYXRlX3B5dGhvbihMIiIpOwogICAgICAgICBpZiAoaXAgPT0gTlVMTCkKQEAgLTEzNDQsNyArMTQ3OCw3IEBACiAgICAgICAgICAgICBmd3ByaW50ZihzdGRvdXQsIEwiXAogUHl0aG9uIExhdW5jaGVyIGZvciBXaW5kb3dzIFZlcnNpb24gJXNcblxuIiwgdmVyc2lvbl90ZXh0KTsKICAgICAgICAgICAgIGZ3cHJpbnRmKHN0ZG91dCwgTCJcCi11c2FnZTogJXMgWyBsYXVuY2hlci1hcmd1bWVudHMgXSBzY3JpcHQgWyBzY3JpcHQtYXJndW1lbnRzIF1cblxuIiwgYXJndlswXSk7Cit1c2FnZTogJXMgWyBsYXVuY2hlci1hcmd1bWVudHMgXSBbIHB5dGhvbi1hcmd1bWVudHMgXSBzY3JpcHQgWyBzY3JpcHQtYXJndW1lbnRzIF1cblxuIiwgYXJndlswXSk7CiAgICAgICAgICAgICBmcHV0d3MoTCJcCiBMYXVuY2hlciBhcmd1bWVudHM6XG5cblwKIC0yICAgICA6IExhdW5jaCB0aGUgbGF0ZXN0IFB5dGhvbiAyLnggdmVyc2lvblxuXApkaWZmIC0tZ2l0IGEvUEMvbXN2Y3J0bW9kdWxlLmMgYi9QQy9tc3ZjcnRtb2R1bGUuYwppbmRleCAwNGQyMDg4Li4xOGRlYzZkIDEwMDY0NAotLS0gYS9QQy9tc3ZjcnRtb2R1bGUuYworKysgYi9QQy9tc3ZjcnRtb2R1bGUuYwpAQCAtMTEzLDExICsxMTMsMTIgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtc3ZjcnRfb3Blbl9vc2ZoYW5kbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGxvbmcgaGFuZGxlOworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKICAgICBpbnQgZmxhZ3M7CiAgICAgaW50IGZkOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJsaTpvcGVuX29zZmhhbmRsZSIsICZoYW5kbGUsICZmbGFncykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgImk6b3Blbl9vc2ZoYW5kbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZkID0gX29wZW5fb3NmaGFuZGxlKGhhbmRsZSwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L01ha2VmaWxlIGIvUEMvb3MyZW14L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDA2MTBlLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDY3MiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyM9PT09PT09PT09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tCi0jCi0jIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIDIuNiBmb3IgT1MvMiB1c2luZyBHQ0MvRU1YCi0jIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbmRyZXcgWmFib2xvdG55LCA8Yml0QGVsdGVjaC5ydT4gZm9yIFB5dGhvbiAxLjUuMgotIyBNb2RpZmllZCBieSBBbmRyZXcgTWFjSW50eXJlLCA8YW5keW1hY0BwY3VnLm9yZy5hdT4gZm9yIFB5dGhvbiAyLjYKLSMKLSMgVGhpcyBtYWtlZmlsZSB3YXMgZGV2ZWxvcGVkIGZvciB1c2Ugd2l0aCBbUF1HQ0MvRU1YIGNvbXBpbGVyIGFueQotIyB2ZXJzaW9uIGFuZCBHTlUgTWFrZS4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjI2LkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gV2hlbiBlbWJlZGRpbmcgUHl0aG9uIHdpdGhpbiBhbm90aGVyIHByb2dyYW0sIG9ubHkKLSMgUHl0aG9uMjYuRExMIGlzIG5lZWRlZC4gV2UgYWxzbyBidWlsZCBweXRob25fcy5hIHN0YXRpYyBsaWJyYXJ5ICh3aGljaAotIyBjYW4gYmUgY29udmVydGVkIGludG8gT01GICgubGliKSBmb3JtYXQgdXNpbmcgZW14b21mIHRvb2wpIGFuZCBib3RoCi0jIHB5dGhvbi5hIGFuZCBweXRob24ubGliIGltcG9ydCBsaWJyYXJpZXMuICBUaGVuIHRoZSBvcHRpb25hbCAKLSMgZXh0ZW5zaW9uIG1vZHVsZXMsIHdoaWNoIGFyZSBPUy8yIERMTHMgcmVuYW1lZCB3aXRoIGEgUFlEIGZpbGUgZXh0ZW5zaW9uLgotIwotIyBSZWNvbW1lbmRlZCBidWlsZCBvcmRlcjoKLSMgICBtYWtlIGRlcGVuZAkJKGlmIHlvdSBoYXZlIG1ha2VkZXApCi0jICAgbWFrZSBhbGwKLSMgICBtYWtlIGx4CQkoaWYgeW91IGhhdmUgbHhsaXRlKQotIyAgIG1ha2UgdGVzdAkJKG9wdGlvbmFsKQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjPT09PT09PT09PT09PT09PT09LS0tLS0tLS0tLS0tLS0tLQotCi0jID09PSBDb21waWxhdGlvbiBtb2RlOiBkZWJ1ZyBvciByZWxlYXNlID09PQotTU9ERT0JCW9wdGltaXplCi0jTU9ERT0JCWRlYnVnCi0jID09PSBBc3NlcnQoKSBlbmFibGVkID09PQotQVNTRVJUSU9OUz1ubwotI0FTU0VSVElPTlM9eWVzCi0jID09PSBIYXJkLXdpcmUgaW5zdGFsbGF0aW9uIGxvY2F0aW9uID09PQotRklYRURfUFlIT01FPW5vCi0jRklYRURfUFlIT01FPXllcwotCi0jID09PSBPcHRpb25hbCBtb2R1bGVzID09PQotIyBEbyB5b3UgaGF2ZSB0aGUgSW5mb1ppcCBjb21wcmVzc2lvbiBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfWkxJQj0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIFVsdHJhIEZhc3QgQ3J5cHQgKFVGQykgbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX1VGQz0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIFRjbC9UayBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfVENMVEs9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBHTlUgcmVhZGxpbmUgbGlicmFyeSBpbnN0YWxsZWQ/Ci0jIE5PVEU6IEknbSB1c2luZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgS2FpIFV3ZSBSb21tZWwncyBwb3J0IHRoYXQgCi0jICAgICAgIC0gaXMgY29tcGlsZWQgd2l0aCBtdWx0aXRocmVhZGluZyBlbmFibGVkCi0jICAgICAgIC0gaXMgbGlua2VkIHN0YXRpY2FsbHkKLSMgICAgICAgSSBoYXZlIGhhZCBubyBzdWNjZXNzIHRyeWluZyB0byB1c2UgYSBETEwgdmVyc2lvbiwgZXZlbiB3aGVuCi0jICAgICAgIGNvbXBpbGVkIHdpdGggbXVsdGl0aHJlYWRpbmcgZW5hYmxlZC4KLUhBVkVfR1JFQURMSU5FPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgQlNEIERCIGxpYnJhcnkgKHYxLjg1KSBhcyBpbmNsdWRlZCBpbiB0aGUgRU1YQlNEIHBhY2thZ2U/Ci0jIE5PVEU6IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSByZWNvbXBpbGVkIHdpdGggYSBzdHJ1Y3R1cmUgbWVtYmVyCi0jICAgICAgIHJlbmFtZWQgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB0aGUgbXVsdGl0aHJlYWRlZCBlcnJubyBzdXBwb3J0Ci0jICAgICAgICh0aGVyZSBpcyBhIHN0cnVjdHVyZSBtZW1iZXIgY2FsbGVkIGVycm5vLCB1c2VkIGZvciBzaGFkb3dpbmcgdGhlCi0jICAgICAgIHJlYWwgZXJybm8sIHdoaWNoIGNvbmZsaWN0cyB3aXRoIHRoZSBlcnJubyByZWRlZmluaXRpb24gb2YgLVptdCkKLUhBVkVfQlNEREI9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBuY3Vyc2VzIGxpYnJhcnkgaW5zdGFsbGVkPyBFTVgncyBCU0QgY3Vyc2VzIGFyZW4ndCBlbm91Z2ghIAotSEFWRV9OQ1VSU0VTPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgR0RCTSBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfR0RCTT0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIEJaMiBjb21wcmVzc2lvbiBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfQloyPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgT3BlblNTTCBsaWJyYXJpZXMgaW5zdGFsbGVkCi1IQVZFX09QRU5TU0w9CW5vCi0KLSMgPT09IGluc3RhbGwgbG9jYXRpb25zID09PQotIyBkZWZhdWx0IHZhbHVlIG9mIFBZVEhPTkhPTUUKLUxJQl9ESVI9QzovUHl0aG9uMjYKLSMgZGVmYXVsdCBpcyB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gb3IgdW5kZXIgUFlUSE9OSE9NRQotRVhFX0RJUj0kKExJQl9ESVIpCi1ETExfRElSPSQoRVhFX0RJUikKLQotCi0jID09PSBUaGUgVG9vbHMgPT09Ci1DQz0JCWdjYwotQ0ZMQUdTPQkJLVptdCAtV2FsbCAkKElOQ0xVREUpCi1DRkxBR1MuTElCPQkkKENGTEFHUykKLUxEPQkJZ2NjCi1MREZMQUdTPQktWm10IC1aY3J0ZGxsIC1MLiAtbGdjYwotTERGTEFHUy5FWEU9CSQoTERGTEFHUykKLUxERkxBR1MuRExMPQkkKExERkxBR1MpIC1aZGxsCi1MREZMQUdTLkE9CSQoTERGTEFHUykgJChMSUJTKQotQVJGTEFHUz0JY3JzCi1JTVBMSUI9CQllbXhpbXAKLUVYUExJQj0JCWVteGV4cAotRVhFT1BUPQkJZW14YmluZAotUFlfREVGPQkJLURQeV9CVUlMRF9DT1JFCi0KLQotIyBhZGp1c3QgQyBjb21waWxlciBzZXR0aW5ncyBiYXNlZCBvbiBidWlsZCBvcHRpb25zCi1pZmVxICgkKE1PREUpLGRlYnVnKQotICBDRkxBR1MrPQktZyAtTwotICBMREZMQUdTKz0JLWcKLWVsc2UKLSAgQ0ZMQUdTKz0JLXMgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tcHJvYmUKLSAgTERGTEFHUys9CS1zCi1lbmRpZgotQ0ZMQUdTKz0JJChQWV9ERUYpCi1pZmVxICgkKEFTU0VSVElPTlMpLG5vKQotICBDRkxBR1MrPQktRE5ERUJVRwotZW5kaWYKLWlmZXEgKCQoRklYRURfUFlIT01FKSx5ZXMpCi0gIENGTEFHUys9CS1EUFJFRklYPSQoRFFVT1RFKSQoTElCX0RJUikkKERRVU9URSkKLWVuZGlmCi0KLSMgV2UncmUgdXNpbmcgdGhlIE9NRiBmb3JtYXQgc2luY2UgRU1YJ3MgbGQgaGFzIGEgb2JzY3VyZSBidWcKLSMgYmVjYXVzZSBvZiB3aGljaCBpdCBzb21ldGltZXMgZmFpbHMgdG8gYnVpbGQgcmVsb2NhdGlvbnMKLSMgaW4gLmRhdGEgc2VnbWVudCB0aGF0IHBvaW50IHRvIGFub3RoZXIgLmRhdGEgbG9jYXRpb25zCi0jIChleGNlcHQgZm9yIHRoZSBmaW5hbCBsaW5raW5nIGlmIHRoZSAuRVhFcykKLU9NRj0JCXllcwotCi0jIGlmIGZvcmsoKSBzdXBwb3J0IGlzIHJlcXVpcmVkLCB0aGUgbWFpbiBleGVjdXRhYmxlIG11c3QgYmUgbGlua2VkIHdpdGggbGQKLUVYRU9NRj0JCW5vCi0KLSMgRmlsZSBleHRlbnNpb25zCi1NT0RVTEUuRVhUPQkucHlkCi1NT0RMSUIuRVhUPQkuZGxsCi1pZmVxICgkKE9NRikseWVzKQotICBPPQkJLm9iagotICBBPQkJLmxpYgotICBBUj0JCWVteG9tZmFyCi0gIENGTEFHUys9CS1ab21mCi0gIExERkxBR1MrPQktWm9tZgotICBpZmVxICgkKE1PREUpLGRlYnVnKQotICAgIEFSRkxBR1M9CS1wNjQgY3JzCi0gIGVsc2UKLSAgICBBUkZMQUdTPQktcDMyIGNycwotICBlbmRpZgotZWxzZQotICBPPQkJLm8KLSAgQT0JCS5hCi0gIEFSPQkJYXIKLWVuZGlmCi0KLQotIyA9PT0gQnVpbGQgdGltZSByZXNvdXJjZSBzZXR0aW5ncyA9PT0KLQotIyBFTVgncyBkZWZhdWx0IG51bWJlciBvZiBmaWxlIGhhbmRsZXMgaXMgNDAsIHdoaWNoIGlzIHNvbWV0aW1lcyBpbnN1ZmZpY2llbnQKLSMgKHRoZSB0ZW1wZmlsZSByZWdyZXNzaW9uIHRlc3QgdHJpZXMgdG8gY3JlYXRlIDEwMCB0ZW1wb3JhcnkgZmlsZXMpCi1ORklMRVM9MjUwCi0KLSMgVGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3IgY2hpbGQgdGhyZWFkcyBpcyA2NGsgYnl0ZXMsIHdoaWNoIGlzCi0jIGluc3VmZmljaWVudCBmb3Igc29tZSBhcHBsaWNhdGlvbnMgd2hpY2ggZG8gYSBsb3Qgb2Ygd29yayBpbiB0aHJlYWRzCi0jIChzdWNoIGFzIFpvcGUsIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCBQbG9uZSkuCi0jIE5vdGUgdGhhdCB0aGlzIHNldHRpbmcgaXMgZGlzdGluY3QgZnJvbSB0aGUgc3RhY2sgc2l6ZSBmb3IgdGhlIG1haW4KLSMgdGhyZWFkLCB3aGljaCBpcyBzZXQgdmlhIHRoZSAlLmRlZiBydWxlIGJlbG93LgotIyBFTVggZG9jdW1lbnRzIHRoYXQgdGhlIHRocmVhZCBzdGFjayBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCAzMjc2OCBieXRlczsKLSMgZm9yIFpvcGUvUGxvbmUgYXQgbGVhc3QgMTI4ayBieXRlcyBpcyByZWNvbW1lbmRlZC4KLSMgVW5jb21tZW50ICYgYWRqdXN0IHRoZSBuZXh0IGxpbmUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3RhY2sgc2l6ZToKLSNDRkxBR1MrPQktRFRIUkVBRF9TVEFDS19TSVpFPTB4MjAwMDAKLQotCi0jID09PSBUaGUgZW52aXJvbm1lbnQgPT09Ci0KLSMgU291cmNlIGZpbGUgcGF0aHMKLVNSQ1BBVEg9LjsuLi8uLi9QeXRob247Li4vLi4vUGFyc2VyOy4uLy4uL09iamVjdHM7Li4vLi4vSW5jbHVkZTsuLi8uLi9Nb2R1bGVzCi0jIFB5dGhvbiBjb250YWlucyB0aGUgY2VudHJhbCBjb3JlLCBjb250YWluaW5nIHRoZSBidWlsdGlucyBhbmQgaW50ZXJwcmV0ZXIuCi0jIFBhcnNlciBjb250YWlucyBQeXRob24ncyBJbnRlcm5hbCBQYXJzZXIgYW5kCi0jICAgU3RhbmRhbG9uZSBQYXJzZXIgR2VuZXJhdG9yIFByb2dyYW0gKFNoYXJlcyBTb21lIG9mIFB5dGhvbidzIE1vZHVsZXMpCi0jIE9iamVjdHMgY29udGFpbnMgUHl0aG9uIE9iamVjdCBUeXBlcwotIyBNb2R1bGVzIGNvbnRhaW5zIGV4dGVuc2lvbiBNb2R1bGVzIChCdWlsdC1JbiBvciBhcyBTZXBhcmF0ZSBETExzKQotCi0jIFVuaXggc2hlbGxzIHRlbmQgdG8gdXNlICIkIiBhcyBkZWxpbWl0ZXIgZm9yIHZhcmlhYmxlIG5hbWVzLgotIyBUZXN0IGZvciB0aGlzIGJlaGF2aW91ciBhbmQgc2V0ICQoQlVDSykgdmFyaWFibGUgY29ycmVzcG9uZGlnbHkgLi4uCi1fX1RNUF9fOj0kKHNoZWxsIGVjaG8gJCQkJCkKLWlmZXEgKCQoX19UTVBfXyksJCQkJCkKLSAgQlVDSz0JCSQkCi0gIEJSTz0JCSgKLSAgQlJDPQkJKQotZWxzZQotICBCVUNLPQkJXCQkCi0gIEJSTz0JCVwoCi0gIEJSQz0JCVwpCi1lbmRpZgotIyBDb21wdXRlIHRoZSAiZG91YmxlIHF1b3RlIiB2YXJpYWJsZQotX19UTVBfXzo9JChzaGVsbCBlY2hvICIiKQotaWZlcSAoJChfX1RNUF9fKSwiIikKLSAgRFFVT1RFPQkiCi1lbHNlCi0gIERRVU9URT0JXCIKLWVuZGlmCi0KLSMgSW5jbHVkZSBwYXRocwotI0lOQ0xVREU9CS1JJChzdWJzdCA7LCAtSSwgJChTUkNQQVRIKSkKLUlOQ0xVREU9CS1JLiAtSS4uLy4uL0luY2x1ZGUKLQotIyBQYXRoIHRvIHNlYXJjaCBmb3IgLmMgZmlsZXMKLXZwYXRoICUuYyAuOy4uOyQoU1JDUEFUSCkKLQotIyBUb3Agb2YgdGhlIHBhY2thZ2UgdHJlZQotVE9QPQkJLi4vLi4vCi0KLSMgRGlyZWN0b3J5IGZvciBvdXRwdXQgZmlsZXMKLU9VVEJBU0U9CW91dC8KLU9VVD0JCSQoT1VUQkFTRSkkKE1PREUpLwotCi0jIEFkZGl0aW9uYWwgbGlicmFyaWVzCi1MSUJTPQkJLWxzb2NrZXQKLQotIyBVdGlsaXR5IG1hY3JvOiByZXBsYWNlbWVudCBmb3IgJF4KLV5ePQkJJChmaWx0ZXItb3V0ICUkQSwkXikKLSMgVXNlICQoTF4pIHRvIGxpbmsgd2l0aCBhbGwgbGlicmFyaWVzIHNwZWNpZmllZCBhcyBkZXBlbmRlbmNpZXMKLUxePQkJJChhZGRwcmVmaXggLWwsJChiYXNlbmFtZSAkKG5vdGRpciAkKGZpbHRlciAlJEEsJCspKSkpCi0KLSMgQnVpbGQgcnVsZXMKLSQoT1VUKSUkTzogJS5jCi0JJChDQykgJChDRkxBR1MuTElCKSAtYyAkPCAtbyAkQAotCi0lLmE6Ci0JJChMRCkgJChMREZMQUdTLkEpIC1vICRAICQoXl4pICQoTF4pCi0KLSUuZGxsOgotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykKLQotJS5weWQ6ICQoT1VUKSVtb2R1bGUkTyAkKE9VVCklX20uZGVmCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChQWVRIT04uSU1QTElCKSAkKExJQlMpCi0KLSUuZXhlOgotCSQoTEQpICQoTERGTEFHUy5FWEUpIC1vICRAICQoXl4pICQoTF4pCi0KLSVfbS5kZWY6Ci0JQGVjaG8gQ3JlYXRpbmcgLkRFRiBmaWxlOiAkQAotCUBlY2hvIExJQlJBUlkgJChub3RkaXIgJCopIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgPiRACi0gICAgICAgIGlmZXEgKCQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopJChNT0RVTEUuRVhUKSksKQotCSAgQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpUHl0aG9uIHN0YW5kYXJkIG1vZHVsZSAkKG5vdGRpciAkKikkKERRVU9URSkgPj4kQAotICAgICAgICBlbHNlCi0JICBAZWNobyBERVNDUklQVElPTiAkKERRVU9URSkkKERFU0NSSVBUSU9OLiQobm90ZGlyICQqKSQoTU9EVUxFLkVYVCkpJChEUVVPVEUpID4+JEAKLSAgICAgICAgZW5kaWYKLQlAZWNobyBEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCA+PiRACi0JQGVjaG8gRVhQT1JUUyA+PiRACi0JQGVjaG8gCWluaXQkKG5vdGRpciAkKikgPj4kQAotCi0lLmRlZjoKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTkFNRSAkKG5vdGRpciAkKikgJChFWEVUWVBFLiQobm90ZGlyICQqKS5leGUpID4kQAotCUBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKSQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopLmV4ZSkkKERRVU9URSkgPj4kQAotCUBlY2hvIFNUQUNLU0laRSAyMDk3MTUyID4+JEAKLQotIyBPdXRwdXQgZmlsZSBuYW1lcwotUFlUSE9OX1ZFUj0JMi42Ci1QWVRIT05fTElCPQlweXRob24zMwotUFlUSE9OLkxJQj0JJChQWVRIT05fTElCKV9zJEEKLVBZVEhPTi5JTVBMSUI9CSQoUFlUSE9OX0xJQikkQQotaWZlcSAoJChFWEVPTUYpLHllcykKLSAgUFlUSE9OLkVYRUlNUD0JJChQWVRIT04uSU1QTElCKQotICBMRE1PREUuRVhFPQkJLVpvbWYKLWVsc2UKLSAgUFlUSE9OLkVYRUlNUD0JJChQWVRIT05fTElCKS5hCi0gIExETU9ERS5FWEUgPSAKLWVuZGlmCi1QWVRIT04uRExMPQkkKFBZVEhPTl9MSUIpLmRsbAotUFlUSE9OLkRFRj0JJChQWVRIT05fTElCKS5kZWYKLVBZVEhPTi5FWEU9CXB5dGhvbi5leGUKLVBZVEhPTlBNLkVYRT0JcHl0aG9ucG0uZXhlCi1QR0VOLkVYRT0JcGdlbi5leGUKLUxJQlJBUlk9CSQoUFlUSE9OLkxJQikKLUxEX0xJQlJBUlk9CSQoUFlUSE9OLklNUExJQikKLQotIyBBZGRpdGlvbmFsIGV4ZWN1dGFibGUgcGFyYW1ldGVycwotRVhFVFlQRS4kKFBZVEhPTi5FWEUpPQkJV0lORE9XQ09NUEFUCi1FWEVUWVBFLiQoUFlUSE9OUE0uRVhFKT0JV0lORE9XQVBJCi1FWEVUWVBFLiQoUEdFTi5FWEUpPQkJV0lORE9XQ09NUEFUCi1ERVNDUklQVElPTi4kKFBZVEhPTi5FWEUpPQlQeXRob24gb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIGludGVycHJldGVyIGZvciBPUy8yCi1ERVNDUklQVElPTi4kKFBZVEhPTlBNLkVYRSk9CSQoREVTQ1JJUFRJT04uJChQWVRIT04uRVhFKSkKLURFU0NSSVBUSU9OLiQoUEdFTi5FWEUpPQlQeXRob24gb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIHBhcnNlciBnZW5lcmF0b3IgZm9yIE9TLzIKLQotIyBNb2R1bGUgZGVzY3JpcHRpb25zCi1ERVNDUklQVElPTi56bGliJChNT0RVTEUuRVhUKT0JCVB5dGhvbiBFeHRlbnNpb24gRExMIGZvciBhY2Nlc3NpbmcgdGhlIEluZm9aaXAgY29tcHJlc3Npb24gbGlicmFyeQotREVTQ1JJUFRJT04uY3J5cHQkKE1PRFVMRS5FWFQpPQkJUHl0aG9uIEV4dGVuc2lvbiBETEwgaW1wbGVtZW50aW5nIHRoZSBjcnlwdCQoQlJPKSQoQlJDKSBmdW5jdGlvbgotREVTQ1JJUFRJT04uX3RraW50ZXIkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIFRjbC9UayBFbnZpcm9ubWVudAotREVTQ1JJUFRJT04ucmVhZGxpbmUkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIEdOVSBSZWFkTGluZSBsaWJyYXJ5Ci1ERVNDUklQVElPTi5fY3Vyc2VzJChNT0RMSUIuRVhUKT0JUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2VzcyB0byBuY3Vyc2VzIGxpYnJhcnkKLURFU0NSSVBUSU9OLnB5ZXhwYXQkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIGV4cGF0IGxpYnJhcnkKLURFU0NSSVBUSU9OLmJ6MiQoTU9EVUxFLkVYVCk9CQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzaW5nIHRoZSBiejIgY29tcHJlc3Npb24gbGlicmFyeQotCi0jIFNvdXJjZSBmaWxlcwotU1JDLk9TMkVNWD0JY29uZmlnLmMgZGxmY24uYyBnZXRwYXRocC5jCi1TUkMuTUFJTj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCU1vZHVsZXMvZ2V0YnVpbGRpbmZvLmMgXAotCQlNb2R1bGVzL21haW4uYykKLVNSQy5NT0RVTEVTPQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJTW9kdWxlcy9nY21vZHVsZS5jIFwKLQkJTW9kdWxlcy9zaWduYWxtb2R1bGUuYyBcCi0JCU1vZHVsZXMvcG9zaXhtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX3RocmVhZG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9hcnJheW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9iaW5hc2NpaS5jIFwKLQkJTW9kdWxlcy9jbWF0aG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMgXAotCQlNb2R1bGVzL2NvbGxlY3Rpb25zbW9kdWxlLmMgXAotCQlNb2R1bGVzL19jc3YuYyBcCi0JCU1vZHVsZXMvZGF0ZXRpbWVtb2R1bGUuYyBcCi0JCU1vZHVsZXMvZXJybm9tb2R1bGUuYyBcCi0JCU1vZHVsZXMvZmNudGxtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2Z1bmN0b29sc21vZHVsZS5jIFwKLQkJTW9kdWxlcy9faGVhcHFtb2R1bGUuYyBcCi0JCU1vZHVsZXMvaW1hZ2VvcC5jIFwKLQkJTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2xvY2FsZW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9tYXRobW9kdWxlLmMgXAotCQlNb2R1bGVzL29wZXJhdG9yLmMgXAotCQlNb2R1bGVzL19yYW5kb21tb2R1bGUuYyBcCi0JCU1vZHVsZXMvc2hhMjU2bW9kdWxlLmMgXAotCQlNb2R1bGVzL3NoYTUxMm1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fc3JlLmMgXAotCQlNb2R1bGVzL19zdHJ1Y3QuYyBcCi0JCU1vZHVsZXMvc3ltdGFibGVtb2R1bGUuYyBcCi0JCU1vZHVsZXMvdGVybWlvcy5jIFwKLQkJTW9kdWxlcy90aW1lbW9kdWxlLmMgXAotCQlNb2R1bGVzL193ZWFrcmVmLmMgXAotCQlNb2R1bGVzL3h4c3VidHlwZS5jIFwKLQkJTW9kdWxlcy96aXBpbXBvcnQuYykKLVNSQy5QQVJTRTE9CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQYXJzZXIvYWNjZWxlci5jIFwKLQkJUGFyc2VyL2dyYW1tYXIxLmMgXAotCQlQYXJzZXIvbGlzdG5vZGUuYyBcCi0JCVBhcnNlci9ub2RlLmMgXAotCQlQYXJzZXIvcGFyc2VyLmMgXAotCQlQYXJzZXIvcGFyc2V0b2suYyBcCi0JCVBhcnNlci9iaXRzZXQuYyBcCi0JCVBhcnNlci9tZXRhZ3JhbW1hci5jKQotU1JDLlBBUlNFMj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCVBhcnNlci90b2tlbml6ZXIuYyBcCi0JCVBhcnNlci9teXJlYWRsaW5lLmMpCi1TUkMuUEFSU0VSPQkkKFNSQy5QQVJTRTEpIFwKLQkJJChTUkMuUEFSU0UyKQotU1JDLlBZVEhPTj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCVB5dGhvbi9QeXRob24tYXN0LmMgXAotCQlQeXRob24vYXNkbC5jIFwKLQkJUHl0aG9uL2FzdC5jIFwKLQkJUHl0aG9uL2JsdGlubW9kdWxlLmMgXAotCQlQeXRob24vZXhjZXB0aW9ucy5jIFwKLQkJUHl0aG9uL2NldmFsLmMgXAotCQlQeXRob24vY29tcGlsZS5jIFwKLQkJUHl0aG9uL2NvZGVjcy5jIFwKLQkJUHl0aG9uL2R5bmFtaWNfYW5ub3RhdGlvbnMuYyBcCi0JCVB5dGhvbi9lcnJvcnMuYyBcCi0JCVB5dGhvbi9mcm96ZW4uYyBcCi0JCVB5dGhvbi9mcm96ZW5tYWluLmMgXAotCQlQeXRob24vZnV0dXJlLmMgXAotCQlQeXRob24vZ2V0YXJncy5jIFwKLQkJUHl0aG9uL2dldGNvbXBpbGVyLmMgXAotCQlQeXRob24vZ2V0Y29weXJpZ2h0LmMgXAotCQlQeXRob24vZ2V0cGxhdGZvcm0uYyBcCi0JCVB5dGhvbi9nZXR2ZXJzaW9uLmMgXAotCQlQeXRob24vZ3JhbWluaXQuYyBcCi0JCVB5dGhvbi9pbXBvcnQuYyBcCi0JCVB5dGhvbi9pbXBvcnRkbC5jIFwKLQkJUHl0aG9uL21hcnNoYWwuYyBcCi0JCVB5dGhvbi9tb2RzdXBwb3J0LmMgXAotCQlQeXRob24vbXlzbnByaW50Zi5jIFwKLQkJUHl0aG9uL215c3RydG91bC5jIFwKLQkJUHl0aG9uL3B5YXJlbmEuYyBcCi0JCVB5dGhvbi9weWN0eXBlLmMgXAotCQlQeXRob24vcHlmcGUuYyBcCi0JCVB5dGhvbi9weXN0YXRlLmMgXAotCQlQeXRob24vcHlzdHJ0b2QuYyBcCi0JCVB5dGhvbi9weXRob25ydW4uYyBcCi0JCVB5dGhvbi9zdHJ1Y3RtZW1iZXIuYyBcCi0JCVB5dGhvbi9zeW10YWJsZS5jIFwKLQkJUHl0aG9uL3N5c21vZHVsZS5jIFwKLQkJUHl0aG9uL3RyYWNlYmFjay5jIFwKLQkJUHl0aG9uL2dldG9wdC5jIFwKLQkJUHl0aG9uL2R5bmxvYWRfc2hsaWIuYyBcCi0JCVB5dGhvbi90aHJlYWQuYykKLVNSQy5PQkpFQ1Q9CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlPYmplY3RzL2Fic3RyYWN0LmMgXAotCQlPYmplY3RzL2Jvb2xvYmplY3QuYyBcCi0JCU9iamVjdHMvY2VsbG9iamVjdC5jIFwKLQkJT2JqZWN0cy9jbGFzc29iamVjdC5jIFwKLQkJT2JqZWN0cy9jb2JqZWN0LmMgXAotCQlPYmplY3RzL2NvZGVvYmplY3QuYyBcCi0JCU9iamVjdHMvY29tcGxleG9iamVjdC5jIFwKLQkJT2JqZWN0cy9kZXNjcm9iamVjdC5jIFwKLQkJT2JqZWN0cy9kaWN0b2JqZWN0LmMgXAotCQlPYmplY3RzL2VudW1vYmplY3QuYyBcCi0JCU9iamVjdHMvZmlsZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9mbG9hdG9iamVjdC5jIFwKLQkJT2JqZWN0cy9mcmFtZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9mdW5jb2JqZWN0LmMgXAotCQlPYmplY3RzL2dlbm9iamVjdC5jIFwKLQkJT2JqZWN0cy9pdGVyb2JqZWN0LmMgXAotCQlPYmplY3RzL2xpc3RvYmplY3QuYyBcCi0JCU9iamVjdHMvbG9uZ29iamVjdC5jIFwKLQkJT2JqZWN0cy9tZXRob2RvYmplY3QuYyBcCi0JCU9iamVjdHMvbW9kdWxlb2JqZWN0LmMgXAotCQlPYmplY3RzL29iamVjdC5jIFwKLQkJT2JqZWN0cy9vYm1hbGxvYy5jIFwKLQkJT2JqZWN0cy9yYW5nZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9zZXRvYmplY3QuYyBcCi0JCU9iamVjdHMvc2xpY2VvYmplY3QuYyBcCi0JCU9iamVjdHMvc3RyaW5nb2JqZWN0LmMgXAotCQlPYmplY3RzL3N0cnVjdHNlcS5jIFwKLQkJT2JqZWN0cy90dXBsZW9iamVjdC5jIFwKLQkJT2JqZWN0cy90eXBlb2JqZWN0LmMgXAotCQlPYmplY3RzL3VuaWNvZGVvYmplY3QuYyBcCi0JCU9iamVjdHMvdW5pY29kZWN0eXBlLmMgXAotCQlPYmplY3RzL3dlYWtyZWZvYmplY3QuYykKLQotU1JDLkxJQj0JJChTUkMuT1MyRU1YKSBcCi0JCSQoU1JDLk1BSU4pIFwKLQkJJChTUkMuUEFSU0VSKSBcCi0JCSQoU1JDLk9CSkVDVCkgXAotCQkkKFNSQy5QWVRIT04pIFwKLQkJJChTUkMuTU9EVUxFUykKLU9CSi5MSUI9CSQoYWRkcHJlZml4ICQoT1VUKSwkKG5vdGRpciAkKFNSQy5MSUI6LmM9JE8pKSkKLQotU1JDLlBHRU49CSQoU1JDLlBBUlNFMSkgXAotCQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJT2JqZWN0cy9vYm1hbGxvYy5jKSBcCi0JCSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQeXRob24vbXlzbnByaW50Zi5jKSBcCi0JCSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQYXJzZXIvdG9rZW5pemVyX3BnZW4uYyBcCi0JCVBhcnNlci9wZ2VubWFpbi5jIFwKLQkJUGFyc2VyL3BnZW4uYyBcCi0JCVBhcnNlci9wcmludGdyYW1tYXIuYyBcCi0JCVBhcnNlci9ncmFtbWFyLmMgXAotCQlQYXJzZXIvZmlyc3RzZXRzLmMpIFwKLQotT0JKLlBHRU49CSQoYWRkcHJlZml4ICQoT1VUKSwkKG5vdGRpciAkKFNSQy5QR0VOOi5jPSRPKSkpCi0KLVNSQy5FWEU9CSQoVE9QKU1vZHVsZXMvcHl0aG9uLmMKLVNSQy5QTUVYRT0JcHl0aG9ucG0uYwotCi0jIFB5dGhvbiBtb2R1bGVzIHRvIGJlIGR5bmFtaWNhbGx5IGxvYWRlZCB0aGF0OgotIyAgIDEpIGhhdmUgb25seSBzaW5nbGUgc291cmNlIGZpbGUgYW5kIHJlcXVpcmUgbm8gZXh0cmEgbGlicwotIyAgIDIpIHVzZSB0aGUgc3RhbmRhcmQgbW9kdWxlIG5hbWluZyBjb252ZW50aW9uCi0jICAgICAgKHRoZSAnbW9kdWxlJyBpbiA/Pz8/P21vZHVsZS5jIGlzIGFzc3VtZWQpCi0jIC0gdGhlc2UgY2FuIGJlIGJ1aWx0IHdpdGggaW1wbGljaXQgcnVsZXMKLUVBU1lFWFRNT0RVTEVTPQlmcGVjdGwgXAotCQlmcGV0ZXN0IFwKLQkJcGFyc2VyIFwKLQkJcHdkIFwKLQkJc2VsZWN0IAotCi0jIFB5dGhvbiBtb2R1bGVzIHRvIGJlIGR5bmFtaWNhbGx5IGxvYWRlZCB0aGF0IG5lZWQgZXhwbGljaXQgYnVpbGQgcnVsZXMKLSMgIChlaXRoZXIgbXVsdGlwbGUgc291cmNlIGZpbGVzIGFuZC9vciBub24tc3RhbmRhcmQgbW9kdWxlIG5hbWluZykKLSMgIChOT1RFOiB1c2Ugc2hvcnRlbmVkIG5hbWVzIGZvciBtb2R1bGVzIGFmZmVjdGVkIGJ5IDggY2hhciBuYW1lIGxpbWl0KQotSEFSREVYVE1PRFVMRVM9CV9zb2NrZXQgXAotCQlfdGVzdGNhcCBcCi0JCXVuaWNvZGVkCi0KLSMgUHl0aG9uIG1vZHVsZXMgdGhhdCBhcmUgdXNlZCBhcyBsaWJyYXJpZXMgYW5kIHRoZXJlZm9yZSBtdXN0IHVzZQotIyBhIC5ETEwgZXh0ZW5zaW9uCi1MSUJFWFRNT0RVTEVTPQotCi0jIFB5dGhvbiBleHRlcm5hbCAoJChNT0RVTEUuRVhUKSkgbW9kdWxlcyAtIGNhbiBiZSBFQVNZIG9yIEhBUkQKLWlmZXEgKCQoSEFWRV9aTElCKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JemxpYgotZW5kaWYKLWlmZXEgKCQoSEFWRV9VRkMpLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQljcnlwdAotZW5kaWYKLWlmZXEgKCQoSEFWRV9UQ0xUSykseWVzKQotICBIQVJERVhUTU9EVUxFUys9CV90a2ludGVyCi0gIENGTEFHUys9CQktREhBU19ESVJFTlQgLUkvVGNsVGs4MC9pbmNsdWRlCi0gIFRLX0xJQlMrPQkJLUwvVGNsVGs4MC9saWIgLWx0Y2w4MCAtbHRrODAKLWVuZGlmCi1pZmVxICgkKEhBVkVfR1JFQURMSU5FKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JcmVhZGxpbmUKLWVuZGlmCi1pZmVxICgkKEhBVkVfTkNVUlNFUykseWVzKQotICBMSUJFWFRNT0RVTEVTKz0JX2N1cnNlcwotICBIQVJERVhUTU9EVUxFUys9CV9jdXJzZXNfCi1lbmRpZgotaWZlcSAoJChIQVZFX0dEQk0pLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQlfZ2RibSBfZGJtCi1lbmRpZgotaWZlcSAoJChIQVZFX0JaMikseWVzKQotICBIQVJERVhUTU9EVUxFUys9CWJ6MgotZW5kaWYKLWlmZXEgKCQoSEFWRV9PUEVOU1NMKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JX3NzbAotZW5kaWYKLQotIyBFeHBhdCBpcyBub3cgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgUHl0aG9uIHNvdXJjZQotSEFSREVYVE1PRFVMRVMrPQlweWV4cGF0Ci1FWFBBVC5JTkM9CS1JLi4vLi4vTW9kdWxlcy9leHBhdAotRVhQQVQuREVGPQktREhBVkVfRVhQQVRfSCAtRFhNTF9OUz0xIC1EWE1MX0RURD0xIC1EWE1MX0JZVEVfT1JERVI9MTIgXAotCQktRFhNTF9DT05URU5UX0JZVEVTPTEwMjQgLURIQVZFX01FTU1PVkU9MSAtREhBVkVfQkNPUFk9MQotRVhQQVQuU1JDPQkkKGFkZHByZWZpeCAuLi8uLi9Nb2R1bGVzL2V4cGF0LywgXAotCQl4bWxwYXJzZS5jIFwKLQkJeG1scm9sZS5jIFwKLQkJeG1sdG9rLmMpCi0KLSMgYWxsIHRoZSBleHRlcm5hbCBtb2R1bGVzCi1FWFRFUk5ETExTPQkkKGFkZHN1ZmZpeCAkKE1PRFVMRS5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoRUFTWUVYVE1PRFVMRVMpKSkKLUVYVEVSTkRMTFMrPQkkKGFkZHN1ZmZpeCAkKE1PRFVMRS5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoSEFSREVYVE1PRFVMRVMpKSkKLUVYVEVSTkRMTFMrPQkkKGFkZHN1ZmZpeCAkKE1PRExJQi5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoTElCRVhUTU9EVUxFUykpKQotCi0jIFRhcmdldHMKLWFsbDogICQoT1VUKSAkKFBZVEhPTi5MSUIpICQoUFlUSE9OLkRFRikgJChQWVRIT04uSU1QTElCKSAkKFBZVEhPTi5ETEwpIFwKLQlweXRob25fbm9uY29yZQotCi1weXRob25fbm9uY29yZToKLQltYWtlIFBZX0RFRj0gJChQWVRIT04uRVhFKSAkKFBZVEhPTlBNLkVYRSkgJChQR0VOLkVYRSkgJChFWFRFUk5ETExTKQotCi1jbGVhbjoKLQlybSAtZiAkKE9VVCkqCi0Jcm0gLWYgJChQWVRIT04uTElCKSAkKFBZVEhPTi5JTVBMSUIpICQoUFlUSE9OLkVYRUlNUCkgJChQWVRIT04uRExMKSBcCi0JICAkKFBZVEhPTi5FWEUpICQoUFlUSE9OUE0uRVhFKSAkKFBHRU4uRVhFKSAqJChNT0RVTEUuRVhUKSAqLmRsbAotCWZpbmQgLi4vLi4vTGliIC1uYW1lICIqLnB5W2NvXSIgLWV4ZWMgcm0ge30gIjsiCi0KLWx4OgotCUBlY2hvIFBhY2tpbmcgZXZlcnl0aGluZyB3aXRoIGx4TGl0ZS4uLgotCWx4bGl0ZSAkKFBZVEhPTi5ETEwpICQoUFlUSE9OLkVYRSkgJChQWVRIT05QTS5FWEUpICQoUEdFTi5FWEUpCi0KLWRlcGVuZDogJChPVVRCQVNFKQotCW1ha2VkZXAgLWYgJChPVVRCQVNFKXB5dGhvbi5kZXAgLW8gJChCVUNLKU8gLXAgJChCVUNLKVwoT1VUXCkgXAotCSAgLXIgLWMgJChJTkNMVURFKSAkKFNSQy5MSUIpICQoU1JDLlBHRU4pCi0KLSQoT1VUKTogJChPVVRCQVNFKQotCi0kKE9VVCkgJChPVVRCQVNFKToKLQlta2Rpci5leGUgJEAKLQotJChQWVRIT04uTElCKTogJChPQkouTElCKQotCXJtLmV4ZSAtZiAkQAotCSQoQVIpICQoQVJGTEFHUykgJEAgJF4KLQotIyB0aGUgUHl0aG9uIGNvcmUgRExMIC5kZWYgZmlsZSBuZWVkcyB0byBoYXZlIGEgbnVtYmVyIG9mIG5vbi1zdGF0aWMKLSMgc3ltYm9scyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZSBQeXRob24gQyBBUEkgcmVtb3ZlZCAoY29tbWVudGVkIG91dCkKLSMgZnJvbSB0aGUgRExMIGV4cG9ydCBsaXN0LgotJChQWVRIT04uREVGKTogJChQWVRIT04uTElCKQotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBMSUJSQVJZICQoUFlUSE9OX0xJQikgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSlQeXRob24gJChQWVRIT05fVkVSKSBDb3JlIERMTCQoRFFVT1RFKSA+PiRACi0JQGVjaG8gUFJPVE1PREUgPj4kQAotCUBlY2hvIERBVEEgTVVMVElQTEUgTk9OU0hBUkVEID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQkkKEVYUExJQikgLXUgJChQWVRIT04uTElCKSB8XAotCSBzZWQgLWUgIi9eICAuaW5pdC4qL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLnBjcmVfLiovcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuYXJyYXlfbWV0aG9kcy9zL14gLzsgLyIgXAotCQktZSAiL14gIC5mYXN0X3NhdmVfbGVhdmUvcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZGxvcGVuL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsc3ltL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsY2xvc2Uvcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZGxlcnJvci9zL14gLzsgLyIgXAotCQktZSAiL14gIC5fUHlfcmVfLiovcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuX1B5X01ENS4qL3MvXiAvOyAvIiA+PiRACi0KLSQoUFlUSE9OLklNUExJQik6ICQoUFlUSE9OLkRFRikKLQkkKElNUExJQikgLW8gJEAgJF4KLQotJChQWVRIT04uRVhFSU1QKTogJChQWVRIT04uREVGKQotCSQoSU1QTElCKSAtbyAkQCAkXgotCi0kKFBZVEhPTi5ETEwpOiAkKE9VVClkbGxlbnRyeSRPICQoUFlUSE9OLkxJQikgJChQWVRIT04uREVGKQotCi0jIEV4cGxpY2l0IG1ha2UgdGFyZ2V0cyBmb3IgdGhlIC5FWEVzIHRvIGJlIGFibGUgdG8gdXNlIExEIHRvIGxpbmsKLSMgKHNvIHRoYXQgZm9yaygpIHdpbGwgd29yayBpZiByZXF1aXJlZCkKLQotJChQWVRIT04uRVhFKTogJChTUkMuRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoT1VUKXB5dGhvbi5kZWYKLQkkKENDKSAtWm10ICQoTERNT0RFLkVYRSkgLVpjcnRkbGwgLVdhbGwgJChJTkNMVURFKSAtTC4gLWxnY2MgLW8gJEAgJChTUkMuRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoTElCUykgJChPVVQpcHl0aG9uLmRlZgotCSQoRVhFT1BUKSAtYXEgJChQWVRIT04uRVhFKSAtaCQoTkZJTEVTKQotCi0kKFBZVEhPTlBNLkVYRSk6ICQoU1JDLlBNRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoT1VUKXB5dGhvbnBtLmRlZgotCSQoQ0MpIC1abXQgJChMRE1PREUuRVhFKSAtWmNydGRsbCAtV2FsbCAkKElOQ0xVREUpIC1MLiAtbGdjYyAtbyAkQCAkKFNSQy5QTUVYRSkgJChQWVRIT04uRVhFSU1QKSAkKExJQlMpICQoT1VUKXB5dGhvbnBtLmRlZgotCSQoRVhFT1BUKSAtYXEgJChQWVRIT05QTS5FWEUpIC1oJChORklMRVMpCi0KLSQoUEdFTi5FWEUpOiAkKE9CSi5QR0VOKSAkKE9VVClwZ2VuLmRlZgotCi0jIEV4cGxpY2l0IGJ1aWxkaW5nIGluc3RydWN0aW9ucyBmb3IgdGhvc2UgZXh0ZXJuYWwgbW9kdWxlcyB0aGF0IHJlcXVpcmUgCi0jIGF3a3dhcmQgaGFuZGxpbmcgKGR1ZSBlLmcuIHRvIG5vbi1zdGQgbmFtaW5nLCBvciBtdWx0aXBsZSBzb3VyY2UgZmlsZXMpCi0jIC0gc3RhbmRhcmQgbW9kdWxlcwotCi1fc29ja2V0JChNT0RVTEUuRVhUKTogJChPVVQpc29ja2V0bW9kdWxlJE8gJChPVVQpX3NvY2tldF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKQotCi0jIF90ZXN0Y2FwaSBuZWVkcyB0byBiZSByZW5hbWVkIHRvIGJlIHVzZWZ1bAotX3Rlc3RjYXBpJChNT0RVTEUuRVhUKTogJChPVVQpX3Rlc3RjYXBpbW9kdWxlJE8gJChPVVQpX3Rlc3RjYXBpX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpCi0KLV90ZXN0Y2FwJChNT0RVTEUuRVhUKTogX3Rlc3RjYXBpJChNT0RVTEUuRVhUKQotCWNwICReICRACi0KLSMgdW5pY29kZWRhdGEgbmVlZHMgdG8gYmUgcmVuYW1lZCB0byBiZSB1c2VmdWwKLXVuaWNvZGVkYXRhJChNT0RVTEUuRVhUKTogJChPVVQpdW5pY29kZWRhdGEkTyAkKE9VVCl1bmljb2RlZGF0YV9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAkKE1PRFVMRV9MSUJTKQotCi11bmljb2RlZCQoTU9EVUxFLkVYVCk6IHVuaWNvZGVkYXRhJChNT0RVTEUuRVhUKQotCWNwICReICRACi0KLWNyeXB0JChNT0RVTEUuRVhUKTogJChPVVQpY3J5cHRtb2R1bGUkTyAkKE9VVCljcnlwdF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgLWx1ZmMgJChMSUJTKQotCi0jIFRoZSBfY3Vyc2VzX3BhbmVsIG1vZHVsZSByZXF1aXJlcyBhIGNvdXBsZSBvZiBuY3Vyc2VzIGxpYnJhcnkgZW50cnkKLSMgcG9pbnRzLCB3aGljaCBhcmUgYmVzdCBleHBvc2VkIGFzIGV4cG9ydHMgZnJvbSB0aGUgX2N1cnNlcyBtb2R1bGUgRExMCi0kKE9VVClfY3Vyc2VzX20uZGVmOgotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBMSUJSQVJZICQobm90ZGlyICQqKSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFID4kQAotCUBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKSQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopJChNT0RMSUIuRVhUKSkkKERRVU9URSkgPj4kQAotCUBlY2hvIERBVEEgTVVMVElQTEUgTk9OU0hBUkVEID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQlAZWNobyAJaW5pdF9jdXJzZXMgPj4kQAotCUBlY2hvIAl3bm91dHJlZnJlc2ggPj4kQAotCUBlY2hvIAlfbmNfcGFuZWxob29rID4+JEAKLQlAZWNobyAJaXNfbGluZXRvdWNoZWQgPj4kQAotCUBlY2hvIAltdndpbiA+PiRACi0JQGVjaG8gCXN0ZHNjciA+PiRACi0JQGVjaG8gCXd0b3VjaGxuID4+JEAKLQotJChPVVQpX2N1cnNlc19wYW5lbF9tLmRlZjoKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTElCUkFSWSAkKG5vdGRpciAkKikgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSlQeXRob24gc3RhbmRhcmQgbW9kdWxlICQobm90ZGlyICQqKSQoRFFVT1RFKSA+PiRACi0JQGVjaG8gREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgPj4kQAotCUBlY2hvIElNUE9SVFMgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLndub3V0cmVmcmVzaCA+PiRACi0JQGVjaG8gCV9jdXJzZXMuX25jX3BhbmVsaG9vayA+PiRACi0JQGVjaG8gCV9jdXJzZXMuaXNfbGluZXRvdWNoZWQgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLm12d2luID4+JEAKLQlAZWNobyAJX2N1cnNlcy5zdGRzY3IgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLnd0b3VjaGxuID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQlAZWNobyAJaW5pdF9jdXJzZXNfcGFuZWwgPj4kQAotCi1fY3Vyc2VzJChNT0RMSUIuRVhUKTogJChPVVQpX2N1cnNlc21vZHVsZSRPICQoT1VUKV9jdXJzZXNfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxuY3Vyc2VzCi0KLSMgY3Vyc2VzX3BhbmVsIG5lZWRzIHRvIGJlIHJlbmFtZWQgdG8gYmUgdXNlZnVsCi1fY3Vyc2VzX3BhbmVsJChNT0RVTEUuRVhUKTogJChPVVQpX2N1cnNlc19wYW5lbCRPICQoT1VUKV9jdXJzZXNfcGFuZWxfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxwYW5lbAotCi1fY3Vyc2VzXyQoTU9EVUxFLkVYVCk6IF9jdXJzZXNfcGFuZWwkKE1PRFVMRS5FWFQpCi0JY3AgJF4gJEAKLQotX2RibSQoTU9EVUxFLkVYVCk6ICQoT1VUKV9kYm1tb2R1bGUkTyAkKE9VVClkYm1fbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxnZGJtCi0KLV9nZGJtJChNT0RVTEUuRVhUKTogJChPVVQpX2dkYm1tb2R1bGUkTyAkKE9VVClnZGJtX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1sZ2RibQotCi0KLSMgRXhwYXQgaXMgbm93IGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uLCBzbyB1c2UgdGhlIGluY2x1ZGVkIHZlcnNpb24KLSQoT1VUKXB5ZXhwYXQkTzoJLi4vLi4vTW9kdWxlcy9weWV4cGF0LmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpIC1jIC1vICRAICReCi0kKE9VVCl4bWxwYXJzZSRPOgkuLi8uLi9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpICQoRVhQQVQuREVGKSAtYyAtbyAkQCAkXgotJChPVVQpeG1scm9sZSRPOgkuLi8uLi9Nb2R1bGVzL2V4cGF0L3htbHJvbGUuYwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEVYUEFULklOQykgJChFWFBBVC5ERUYpIC1jIC1vICRAICReCi0kKE9VVCl4bWx0b2skTzoJLi4vLi4vTW9kdWxlcy9leHBhdC94bWx0b2suYwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEVYUEFULklOQykgJChFWFBBVC5ERUYpIC1jIC1vICRAICReCi1weWV4cGF0JChNT0RVTEUuRVhUKTogJChPVVQpcHlleHBhdCRPICQoT1VUKXhtbHBhcnNlJE8gJChPVVQpeG1scm9sZSRPIFwKLQkJJChPVVQpeG1sdG9rJE8gJChPVVQpcHlleHBhdF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKQotCi1yZWFkbGluZSQoTU9EVUxFLkVYVCk6ICQoT1VUKXJlYWRsaW5lJE8gJChPVVQpcmVhZGxpbmVfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxyZWFkbGluZSAtbG5jdXJzZXMKLQotI190a2ludGVyJChNT0RVTEUuRVhUKTogJChPVVQpX3RraW50ZXIkTyAkKE9VVCl0Y2xOb3RpZnkkTyAkKE9VVCl0a2FwcGluaXQkTwotX3RraW50ZXIkKE1PRFVMRS5FWFQpOiAkKE9VVClfdGtpbnRlciRPICQoT1VUKXRjbE5vdGlmeSRPIFwKLQkJJChPVVQpX3RraW50ZXJfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgJChUS19MSUJTKQotCi16bGliJChNT0RVTEUuRVhUKTogJChPVVQpemxpYm1vZHVsZSRPICQoT1VUKXpsaWJfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWx6Ci0KLWJ6MiQoTU9EVUxFLkVYVCk6ICQoT1VUKWJ6Mm1vZHVsZSRPICQoT1VUKWJ6Ml9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbGJ6MgotCi1fc3NsJChNT0RVTEUuRVhUKTogJChPVVQpX3NzbCRPICQoT1VUKV9zc2xfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxzc2wgLWxjcnlwdG8KLQotIyB0aGUgdGVzdCB0YXJnZXQKLXRlc3Q6Ci0JLWZpbmQgLi4vLi4vTGliIC1uYW1lICIqLnB5W2NvXSIgLWV4ZWMgcm0ge30gIjsiCi0JLS4vcHl0aG9uIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1sIC11ICJuZXR3b3JrIgotCS4vcHl0aG9uIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1sIC11ICJuZXR3b3JrIgotCi0taW5jbHVkZSAkKE9VVEJBU0UpcHl0aG9uLmRlcApkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L1JFQURNRS5vczJlbXggYi9QQy9vczJlbXgvUkVBRE1FLm9zMmVteApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFjZjZkZi4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvUkVBRE1FLm9zMmVteAorKysgL2Rldi9udWxsCkBAIC0xLDY2MyArMCwwIEBACi1UaGlzIGlzIGEgcG9ydCBvZiBQeXRob24gMi42IHRvIE9TLzIgdXNpbmcgdGhlIEVNWCBkZXZlbG9wbWVudCB0b29scwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1XaGF0J3MgbmV3IHNpbmNlIHRoZSBwcmV2aW91cyByZWxlYXNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFub3RoZXIgZGF5LCBhbm90aGVyIHZlcnNpb24uLi4KLQotCi1MaWNlbnNlcyBhbmQgaW5mbyBhYm91dCBQeXRob24gYW5kIEVNWAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGxlYXNlIHJlYWQgdGhlIGZpbGUgUkVBRE1FLlB5dGhvbi0yLjYgaW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlIGZvciAKLWluZm9ybWF0aW9uIGFib3V0IFB5dGhvbiAyLjYuICBUaGlzIGZpbGUgaXMgdGhlIFJFQURNRSBmaWxlIGZyb20gdGhlIAotUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uIGF2YWlsYWJsZSB2aWEgaHR0cDovL3d3dy5weXRob24ub3JnLyAKLWFuZCBpdHMgbWlycm9ycy4gIFRoZSBmaWxlIExJQ0VOQ0UuUHl0aG9uLTIuNiBpcyB0aGUgdGV4dCBvZiB0aGUgTGljZW5jZSAKLWZyb20gdGhlIFB5dGhvbiAyLjYgc291cmNlIGRpc3RyaWJ1dGlvbi4KLQotTm90ZSB0aGF0IHRoZSBFTVggcGFja2FnZSB0aGF0IHRoaXMgcGFja2FnZSBkZXBlbmRzIG9uIGlzIHJlbGVhc2VkIHVuZGVyIAotdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIAotYWNjb21wYW55aW5nIHRoZSBFTVggUnVudGltZSBsaWJyYXJpZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIAotaW1wbGljYXRpb25zIG9mIHRoaXMuICBBIGNvcHkgb2YgdmVyc2lvbiAyIG9mIHRoZSBHUEwgaXMgaW5jbHVkZWQgYXMgdGhlIAotZmlsZSBDT1BZSU5HLmdwbDIuCi0KLVJlYWRsaW5lIGFuZCBHREJNIGFyZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZS4gIEkgdGhpbmsgCi1FYmVyaGFyZCBNYXR0ZXMnIHBvcnRpbmcgY2hhbmdlcyB0byBCU0QgREIgdjEuODUgYXJlIGFsc28gR1BMJ2VkIChCU0QgREIgCi1pdHNlbGYgaXMgQlNEIExpY2VuY2VkKS4gIG5jdXJzZXMgYW5kIGV4cGF0IGFwcGVhciB0byBiZSBjb3ZlcmVkIGJ5IE1JVCAKLXN0eWxlIGxpY2VuY2VzIC0gcGxlYXNlIHJlZmVyIHRvIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9ucyBmb3IgbW9yZSBkZXRhaWwuICAKLXpsaWIgaXMgZGlzdHJpYnV0YWJsZSB1bmRlciBhIHZlcnkgZnJlZSBsaWNlbnNlLiAgR05VIFVGQyBpcyB1bmRlciB0aGUgCi1HTlUgTEdQTCAoc2VlIGZpbGUgQ09QWUlORy5saWIpLgotCi1NeSBwYXRjaGVzIHRvIHRoZSBQeXRob24tMi54IHNvdXJjZSBkaXN0cmlidXRpb25zLCBhbmQgYW55IG90aGVyIHBhY2thZ2VzIAotdXNlZCBpbiB0aGlzIHBvcnQsIGFyZSBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLVRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9yIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGZyb20gdGhlIAotdXNlIG9mIHRoZSBzb2Z0d2FyZS4KLQotSSBkbyBob3BlIGhvd2V2ZXIgdGhhdCBpdCBwcm92ZXMgdXNlZnVsIHRvIHNvbWVvbmUuCi0KLQotT3RoZXIgcG9ydHMKLS0tLS0tLS0tLS0tCi0KLVRoZXJlIGhhdmUgYmVlbiBwb3J0cyBvZiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQeXRob24gdG8gT1MvMi4KLQotVGhlIGJlc3Qga25vd24gd291bGQgYmUgdGhhdCBieSBKZWZmIFJ1c2gsIG1vc3QgcmVjZW50bHkgb2YgdmVyc2lvbiAKLTEuNS4yLiAgSmVmZiB1c2VkIElCTSdzIFZpc3VhbCBBZ2UgQysrICh2MykgZm9yIGhpcyBwb3J0cywgYW5kIGhpcyAKLXBhdGNoZXMgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHRoZSBQeXRob24gMi42IHNvdXJjZSBkaXN0cmlidXRpb24uCi0KLUFuZHkgWmFib2xvdG55IGltcGxlbWVudGVkIGEgcG9ydCBvZiBQeXRob24gdjEuNS4yIHVzaW5nIHRoZSBFTVggCi1kZXZlbG9wbWVudCB0b29scy4gIEhpcyBwYXRjaGVzIGFnYWluc3QgdGhlIFB5dGhvbiB2MS41LjIgc291cmNlIAotZGlzdHJpYnV0aW9uIGhhdmUgYmVjb21lIHRoZSBjb3JlIG9mIHRoaXMgcG9ydCwgYW5kIHdpdGhvdXQgaGlzIGVmZm9ydHMgCi10aGlzIHBvcnQgd291bGRuJ3QgZXhpc3QuICBBbmR5J3MgcG9ydCBhbHNvIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIAotY29tcGlsZWQgd2l0aCBoaXMgcG9ydCBvZiBnY2MgMi45NS4yIHRvIEVNWCwgd2hpY2ggSSBoYXZlIGJ1dCBoYXZlIAotY2hvc2VuIG5vdCB0byB1c2UgZm9yIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcG9ydCAoc2VlIGl0ZW0gMTYgCi1vZiB0aGUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBzZWN0aW9uIGJlbG93KS4KLQotSXQgaXMgcG9zc2libGUgdG8gaGF2ZSB0aGVzZSBlYXJsaWVyIHBvcnRzIHN0aWxsIHVzYWJsZSBhZnRlciBpbnN0YWxsaW5nIAotdGhpcyBwb3J0IC0gc2VlIHRoZSBSRUFETUUub3MyZW14Lm11bHRpcGxlX3ZlcnNpb25zIGZpbGUsIGNvbnRyaWJ1dGVkIGJ5Ci1EciBEYXZpZCBNZXJ0eiwgZm9yIGEgc3VnZ2VzdGVkIGFwcHJvYWNoIHRvIGFjaGlldmluZyB0aGlzLgotCi0KLVNvZnR3YXJlIHJlcXVpcmVtZW50cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgcGFja2FnZSByZXF1aXJlcyB0aGUgRU1YIFJ1bnRpbWUgcGFja2FnZSwgYXZhaWxhYmxlIGZyb20gdGhlIAotSG9iYmVzIChodHRwOi8vaG9iYmVzLm5tc3UuZWR1LykgYW5kIExFTyAoaHR0cDovL2FyY2hpdi5sZW8ub3JnLykgCi1hcmNoaXZlcyBvZiBPUy8yIHNvZnR3YXJlLiAgSSBoYXZlIHVzZWQgRU1YIHZlcnNpb24gMC45ZCBmaXgwNCBpbiAKLWRldmVsb3BpbmcgdGhpcyBwb3J0LgotCi1NeSBkZXZlbG9wbWVudCBzeXN0ZW0gaXMgcnVubmluZyBPUy8yIHY0IHdpdGggZml4cGFjayAxMi4KLQotM3JkIHBhcnR5IHNvZnR3YXJlIHdoaWNoIGhhcyBiZWVuIGxpbmtlZCBpbnRvIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzOgotLSBuY3Vyc2VzICAgICAgKHNlZSBodHRwOi8vZGlja2V5Lmhpcy5jb20vIGZvciBtb3JlIGluZm8sIHY1LjIpCi0tIEdOVSBSZWFkbGluZSAoS2FpIFV3ZSBSb21tZWwncyBwb3J0IGF2YWlsYWJsZSBmcm9tIEhvYmJlcyBvciBMRU8sIHYyLjEpCi0tIEdOVSBHREJNICAgICAoS2FpIFV3ZSBSb21tZWwncyBwb3J0IGF2YWlsYWJsZSBmcm9tIEhvYmJlcyBvciBMRU8sIHYxLjcuMykKLS0gemxpYiAgICAgICAgIChkZXJpdmVkIGZyb20gSHVuZy1DaGkgQ2h1J3MgcG9ydCBvZiB2MS4xLjMsIHYxLjEuNCkKLS0gZXhwYXQgICAgICAgIChkaXN0cmlidXRlZCB3aXRoIFB5dGhvbiwgdjEuOTUuNikKLS0gR05VIFVGQyAgICAgIChLYWkgVXdlIFJvbW1lbCdzIHBvcnQgYXZhaWxhYmxlIGZyb20gTEVPLCB2Mi4wLjQpCi0KLQotQWJvdXQgdGhpcyBwb3J0Ci0tLS0tLS0tLS0tLS0tLS0KLQotSSBoYXZlIGF0dGVtcHRlZCB0byBtYWtlIHRoaXMgcG9ydCBhcyBjb21wbGV0ZSBhbmQgZnVuY3Rpb25hbCBhcyBJIGNhbiwgCi1ub3R3aXRoc3RhbmRpbmcgdGhlIGlzc3VlcyBpbiB0aGUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBzZWN0aW9uIGJlbG93LgotCi1Db3JlIGNvbXBvbmVudHM6Ci0KLVB5dGhvbi5leGUgaXMgbGlua2VkIGFzIGFuIGEub3V0IGV4ZWN1dGFibGUsIGllIHVzaW5nIEVNWCBtZXRob2QgRTEgCi10byBjb21waWxlICYgbGluayB0aGUgZXhlY3V0YWJsZS4gIFRoaXMgaXMgc28gdGhhdCBmb3JrKCkgd29ya3MgKHNlZSAKLSJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAxKS4KLQotUHl0aG9uMjYuZGxsIGlzIGNyZWF0ZWQgYXMgYSBub3JtYWwgT01GIERMTCwgd2l0aCBhbiBPTUYgaW1wb3J0IAotbGlicmFyeSBhbmQgbW9kdWxlIGRlZmluaXRpb24gZmlsZS4gIFRoZXJlIGlzIGFsc28gYW4gYS5vdXQgKC5hKSBpbXBvcnQgCi1saWJyYXJ5IHRvIHN1cHBvcnQgbGlua2luZyB0aGUgRExMIHRvIGEub3V0IGV4ZWN1dGFibGVzLiAgVGhlIERMTCAKLXJlcXVpcmVzIHRoZSBFTVggcnVudGltZSBETExzLgotCi1UaGlzIHBvcnQgaGFzIGJlZW4gYnVpbHQgd2l0aCBjb21wbGV0ZSBzdXBwb3J0IGZvciBtdWx0aXRocmVhZGluZy4KLQotTW9kdWxlczoKLQotV2l0aCB0aGUgZXhjZXB0aW9uIG9mIG1vZHVsZXMgdGhhdCBoYXZlIGEgc2lnbmlmaWNhbnQgY29kZSBzaXplLCBvciBhcmUgCi1ub3QgcmVjb21tZW5kZWQgb3IgZGVzaXJlZCBmb3Igbm9ybWFsIHVzZSwgdGhlIHN0YW5kYXJkIG1vZHVsZXMgYXJlIG5vdyAKLWJ1aWx0IGludG8gdGhlIGNvcmUgRExMIHJhdGhlciB0aGFuIGNvbmZpZ3VyZWQgYXMgZHluYW1pY2FsbHkgbG9hZGFibGUgCi1tb2R1bGVzLiAgVGhpcyBpcyBmb3IgYm90aCByZWFzb25zIG9mIHBlcmZvcm1hbmNlIChzdGFydHVwIHRpbWUpIGFuZCAKLW1lbW9yeSB1c2UgKGxvdHMgb2Ygc21hbGwgRExMcyBmcmFnbWVudCB0aGUgYWRkcmVzcyBzcGFjZSkuCi0KLUkgaGF2ZW4ndCB5ZXQgY2hhbmdlZCB0aGUgYnVpbGRpbmcgb2YgUHl0aG9uJ3MgZHluYW1pY2FsbHkgbG9hZGFibGUgCi1tb2R1bGVzIG92ZXIgdG8gdXNpbmcgdGhlIERpc3RVdGlscy4KLQotU2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAzIGZvciBub3RlcyBhYm91dCB0aGUgZmNudGwgbW9kdWxlLCBhbmQgCi0iWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMTAgZm9yIG5vdGVzIGFib3V0IHRoZSBwd2QgYW5kIGdycCBtb2R1bGVzLgotCi1UaGlzIHBvcnQgc3VwcG9ydHMgY2FzZSBzZW5zaXRpdmUgbW9kdWxlIGltcG9ydCBzZW1hbnRpY3MsIG1hdGNoaW5nIAotdGhlIFdpbmRvd3MgcmVsZWFzZS4gIFRoaXMgY2FuIGJlIGRlYWN0aXZhdGVkIGJ5IHNldHRpbmcgdGhlIFBZVEhPTkNBU0VPSyAKLWVudmlyb25tZW50IHZhcmlhYmxlICh0aGUgdmFsdWUgZG9lc24ndCBtYXR0ZXIpIC0gc2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgCi1pdGVtIDEyLgotCi1PcHRpb25hbCBtb2R1bGVzOgotCi1XaGVyZSBJJ3ZlIGJlZW4gYWJsZSB0byBsb2NhdGUgdGhlIHJlcXVpcmVkIDNyZCBwYXJ0eSBwYWNrYWdlcyBhbHJlYWR5IAotcG9ydGVkIHRvIE9TLzIsIEkndmUgYnVpbHQgYW5kIGluY2x1ZGVkIHRoZW0uCi0KLVRoZXNlIGluY2x1ZGUgbmN1cnNlcyAoX2N1cnNlcywgX2N1cnNlc19wYW5lbCksCi1HTlUgR0RCTSAoZ2RibSwgZGJtKSwgemxpYiAoemxpYiksIEdOVSBSZWFkbGluZSAocmVhZGxpbmUpLCBhbmQgR05VIFVGQyAKLShjcnlwdCkuCi0KLUV4cGF0IGlzIG5vdyBpbmNsdWRlZCBpbiB0aGUgUHl0aG9uIHJlbGVhc2Ugc291cmNlYmFsbCwgYW5kIHRoZSBweWV4cGF0IAotbW9kdWxlIGlzIGFsd2F5cyBidWlsdC4KLQotSSBoYXZlIGJ1aWx0IHRoZXNlIG1vZHVsZXMgc3RhdGljYWxseSBsaW5rZWQgYWdhaW5zdCB0aGUgM3JkIHBhcnR5IAotbGlicmFyaWVzLiAgVW5mb3J0dW5hdGVseSBteSBhdHRlbXB0cyB0byB1c2UgdGhlIGRsbCB2ZXJzaW9uIG9mIEdOVSAKLXJlYWRsaW5lIGhhdmUgYmVlbiBhIGRpc21hbCBmYWlsdXJlLCBpbiB0aGF0IHdoZW4gdGhlIGR5bmFtaWNhbGx5IAotbGlua2VkIHJlYWRsaW5lIG1vZHVsZSBpcyBhY3RpdmUgb3RoZXIgbW9kdWxlcyBpbW1lZGlhdGVseSBwcm92b2tlIGEgCi1jb3JlIGR1bXAgd2hlbiBpbXBvcnRlZC4KLQotT25seSB0aGUgQlNEIERCIHBhY2thZ2UgKHBhcnQgb2YgdGhlIEJTRCBwYWNrYWdlIGRpc3RyaWJ1dGVkIHdpdGggRU1YKSAKLW5lZWRzIHNvdXJjZSBtb2RpZmljYXRpb25zIHRvIGJlIHVzZWQgZm9yIHRoaXMgcG9ydCwgcGVydGFpbmluZyB0byB1c2UgCi1vZiBlcnJubyB3aXRoIG11bHRpdGhyZWFkaW5nLgotCi1UaGUgb3RoZXIgcGFja2FnZXMsIGV4Y2VwdCBmb3IgbmN1cnNlcyBhbmQgemxpYiwgbmVlZGVkIE1ha2VmaWxlIGNoYW5nZXMgCi1mb3IgbXVsdGl0aHJlYWRpbmcgc3VwcG9ydCBidXQgbm8gc291cmNlIGNoYW5nZXMuCi0KLVRoZSBfY3Vyc2VzX3BhbmVsIG1vZHVsZSBpcyBhIHBvdGVudGlhbCBwcm9ibGVtIC0gc2VlICJZT1UgSEFWRSBCRUVOIAotV0FSTkVEIiBpdGVtIDEzLgotCi1VcHN0cmVhbSBzb3VyY2UgcGF0Y2hlczoKLQotTm8gdXBkYXRlcyB0byB0aGUgUHl0aG9uIDIuNiByZWxlYXNlIGhhdmUgYmVjb21lIGF2YWlsYWJsZS4KLQotTGlicmFyeSBhbmQgb3RoZXIgZGlzdHJpYnV0ZWQgUHl0aG9uIGNvZGU6Ci0KLVRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeSBsaXZlcyBpbiB0aGUgTGliIGRpcmVjdG9yeS4gIEFsbCB0aGUgc3RhbmRhcmQgCi1saWJyYXJ5IGNvZGUgaW5jbHVkZWQgd2l0aCB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uIGlzIGluY2x1ZGVkIAotaW4gdGhlIGJpbmFyeSBhcmNoaXZlLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGRvcy04eDMgYW5kIHRraW50ZXIgCi1zdWJkaXJlY3RvcmllcyB3aGljaCBoYXZlIGJlZW4gb21pdHRlZCB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGJpbmFyeSAKLWFyY2hpdmUgLSB0aGUgZG9zLTh4MyBjb21wb25lbnRzIGFyZSB1bm5lY2Vzc2FyeSBkdXBsaWNhdGVzIGFuZCBUa2ludGVyIAotaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHBvcnQgKHlldCkuICBBbGwgdGhlIHBsYXQtKiBzdWJkaXJlY3RvcmllcyBpbiB0aGUgCi1zb3VyY2UgZGlzdHJpYnV0aW9uIGhhdmUgYWxzbyBiZWVuIG9taXR0ZWQsIGV4Y2VwdCBmb3IgdGhlIHBsYXQtb3MyZW14IAotc3ViZGlyZWN0b3J5LgotCi1UaGUgVG9vbHMgYW5kIERlbW8gZGlyZWN0b3JpZXMgY29udGFpbiBhIGNvbGxlY3Rpb24gb2YgUHl0aG9uIHNjcmlwdHMuICAKLVRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgYmluYXJ5IGFyY2hpdmUsIHRoZSBEZW1vL3NnaSwgRGVtby9UaXgsIAotRGVtby90a2ludGVyLCBUb29scy9hdWRpb3B5IGFuZCBUb29scy9JRExFIHN1YmRpcmVjdG9yaWVzIGhhdmUgYmVlbiAKLW9taXR0ZWQgYXMgbm90IGJlaW5nIHN1cHBvcnRlZCBieSB0aGlzIHBvcnQuICBUaGUgTWlzYyBkaXJlY3RvcnkgaGFzIAotYWxzbyBiZWVuIG9taXR0ZWQuCi0KLUFsbCBzdWJkaXJlY3RvcmllcyBvbWl0dGVkIGZyb20gdGhlIGJpbmFyeSBhcmNoaXZlIGNhbiBiZSByZWNvbnN0aXR1dGVkIAotZnJvbSB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uLCBpZiBkZXNpcmVkLgotCi1TdXBwb3J0IGZvciBidWlsZGluZyBQeXRob24gZXh0ZW5zaW9uczoKLQotVGhlIENvbmZpZyBzdWJkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZpbGVzIGRlc2NyaWJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gCi1vZiB0aGUgaW50ZXJwcmV0ZXIgYW5kIHRoZSBNYWtlZmlsZSwgaW1wb3J0IGxpYnJhcmllcyBmb3IgdGhlIFB5dGhvbiBETEwsIAotYW5kIHRoZSBtb2R1bGUgZGVmaW5pdGlvbiBmaWxlIHVzZWQgdG8gY3JlYXRlIHRoZSBQeXRob24gRExMLiAgVGhlIAotSW5jbHVkZSBzdWJkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoZSBzdGFuZGFyZCBQeXRob24gaGVhZGVyIGZpbGVzIAotbmVlZGVkIGZvciBidWlsZGluZyBleHRlbnNpb25zLgotCi1BcyBJIGRvbid0IGhhdmUgdGhlIFZpc3VhbCBBZ2UgQysrIGNvbXBpbGVyLCBJJ3ZlIG1hZGUgbm8gYXR0ZW1wdCB0byAKLWhhdmUgdGhpcyBwb3J0IHN1cHBvcnQgZXh0ZW5zaW9ucyBidWlsdCB3aXRoIHRoYXQgY29tcGlsZXIuCi0KLQotUGFja2FnaW5nCi0tLS0tLS0tLS0KLQotVGhpcyBwb3J0IGlzIHBhY2thZ2VkIGFzIGZvbGxvd3M6Ci0tIHB5dGhvbi0yLjYtb3MyZW14LWJpbi0wMz8/Pz8uemlwICAoYmluYXJpZXMsIGxpYnJhcnkgbW9kdWxlcykKLS0gcHl0aG9uLTIuNi1vczJlbXgtc3JjLTAzPz8/PyAgICAgIChwYXRjaGVzK21ha2VmaWxlcyBmb3Igbm9uLVB5dGhvbiBjb2RlKQotCi1BcyBhbGwgdGhlIFB5dGhvbiBzcGVjaWZpYyBwYXRjaGVzIGZvciB0aGUgcG9ydCBhcmUgbm93IHBhcnQgb2YgdGhlIAotUHl0aG9uIHJlbGVhc2UgdGFyYmFsbCwgb25seSB0aGUgcGF0Y2hlcyBhbmQgbWFrZWZpbGVzIGludm9sdmVkIGluIAotYnVpbGRpbmcgZXh0ZXJuYWwgbGlicmFyaWVzIGZvciBvcHRpb25hbCBleHRlbnNpb25zIGFyZSBpbmNsdWRlZCBpbiAKLXRoZSBzb3VyY2UgYXJjaGl2ZS4KLQotRG9jdW1lbnRhdGlvbiBmb3IgdGhlIFB5dGhvbiBsYW5ndWFnZSwgYXMgd2VsbCBhcyB0aGUgUHl0aG9uIDIuNiAKLXNvdXJjZSBkaXN0aWJ1dGlvbiwgY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIFB5dGhvbiB3ZWJzaXRlIAotKGh0dHA6Ly93d3cucHl0aG9uLm9yZy8pIG9yIHRoZSBQeXRob24gcHJvamVjdCBwYWdlcyBhdCBTb3VyY2Vmb3JnZSAKLShodHRwOi8vc2YubmV0L3Byb2plY3RzL3B5dGhvbi8pLgotCi0KLUluc3RhbGxhdGlvbgotLS0tLS0tLS0tLS0tCi0KLU9idGFpbiBhbmQgaW5zdGFsbCwgYXMgcGVyIHRoZSBpbmNsdWRlZCBpbnN0cnVjdGlvbnMsIHRoZSBFTVggcnVudGltZSAKLXBhY2thZ2UuCi0KLVVucGFjayB0aGlzIGFyY2hpdmUsIHByZXNlcnZpbmcgdGhlIHN1YmRpcmVjdG9yaWVzLCBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgCi1vZiB0aGUgZHJpdmUgd2hlcmUgeW91IHdhbnQgUHl0aG9uIHRvIGxpdmUuCi0KLUFkZCB0aGUgUHl0aG9uIGRpcmVjdG9yeSAoZWcgQzpcUHl0aG9uMjYpIHRvIHRoZSBQQVRIIGFuZCBMSUJQQVRIIAotdmFyaWFibGVzIGluIENPTkZJRy5TWVMuCi0KLVlvdSBzaG91bGQgdGhlbiBzZXQgdGhlIFBZVEhPTkhPTUUgYW5kIFBZVEhPTlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGVzIAotaW4gQ09ORklHLlNZUy4KLQotUFlUSE9OSE9NRSBzaG91bGQgYmUgc2V0IHRvIFB5dGhvbidzIHRvcCBsZXZlbCBkaXJlY3RvcnkuICBQWVRIT05QQVRIIAotc2hvdWxkIGJlIHNldCB0byB0aGUgc2VtaWNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIHByaW5jaXBhbCBQeXRob24gbGlicmFyeSAKLWRpcmVjdG9yaWVzLgotSSB1c2U6Ci0gIFNFVCBQWVRIT05IT01FPUY6L1B5dGhvbjI2Ci0gIFNFVCBQWVRIT05QQVRIPUY6L1B5dGhvbjI2L0xpYjtGOi9QeXRob24yNi9MaWIvcGxhdC1vczJlbXg7Ci0gICAgICAgICAgICAgICAgIEY6L1B5dGhvbjI2L0xpYi9saWItZHlubG9hZDtGOi9QeXRob24yNi9MaWIvc2l0ZS1wYWNrYWdlcwotCi1OT1RFITogIHRoZSBQWVRIT05QQVRIIHNldHRpbmcgYWJvdmUgaXMgbGluZXdyYXBwZWQgZm9yIHRoaXMgZG9jdW1lbnQgLSBpdCAKLXNob3VsZCBhbGwgYmUgb24gb25lIGxpbmUgaW4gQ09ORklHLlNZUyEKLQotSWYgeW91IHdpc2ggdG8gdXNlIHRoZSBjdXJzZXMgbW9kdWxlLCB5b3Ugc2hvdWxkIHNldCB0aGUgVEVSTSBhbmQgVEVSTUlORk8gCi1lbnZpcm9ubWVudCB2YXJpYWJsZXMgYXBwcm9wcmlhdGVseS4KLQotSWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBuY3Vyc2VzIGluc3RhbGxlZCwgSSBoYXZlIGluY2x1ZGVkIGEgY29weSBvZiB0aGUgCi1FTVggc3Vic2V0IG9mIHRoZSBUZXJtaW5mbyBkYXRhYmFzZSBpbmNsdWRlZCB3aXRoIHRoZSBuY3Vyc2VzLTUuMiBzb3VyY2UgCi1kaXN0cmlidXRpb24uICBUaGlzIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhlIFRFUk1JTkZPIGVudmlyb25tZW50IHZhcmlhYmxlIAotdG8gdGhlIHBhdGggb2YgdGhlIFRlcm1pbmZvIHN1YmRpcmVjdG9yeSBiZWxvdyB0aGUgUHl0aG9uIGhvbWUgZGlyZWN0b3J5LgotT24gbXkgc3lzdGVtIHRoaXMgbG9va3MgbGlrZToKLSAgU0VUIFRFUk1JTkZPPUY6L1B5dGhvbjI2L1Rlcm1pbmZvCi0KLUZvciB0aGUgVEVSTSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgSSB3b3VsZCB0cnkgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gIFNFVCBURVJNPWFuc2kKLSAgU0VUIFRFUk09b3MyCi0gIFNFVCBURVJNPXdpbmRvdwotCi1Zb3Ugd2lsbCBoYXZlIHRvIHJlYm9vdCB5b3VyIHN5c3RlbSBmb3IgdGhlc2UgY2hhbmdlcyB0byBDT05GSUcuU1lTIHRvIHRha2UgCi1lZmZlY3QuCi0KLUlmIHlvdSB3aXNoIHRvIGNvbXBpbGUgYWxsIHRoZSBpbmNsdWRlZCBQeXRob24gbGlicmFyeSBtb2R1bGVzIHRvIGJ5dGVjb2RlLCAKLXlvdSBjYW4gY2hhbmdlIGludG8gdGhlIFB5dGhvbiBob21lIGRpcmVjdG9yeSBhbmQgcnVuIHRoZSBDT01QSUxFQUxMLkNNRCAKLWJhdGNoIGZpbGUuCi0KLVlvdSBjYW4gZXhlY3V0ZSB0aGUgcmVncmVzc2lvbiB0ZXN0cyBpbmNsdWRlZCB3aXRoIHRoZSBQeXRob24gMi42IHNvdXJjZSAKLWRpc3RyaWJ1dGlvbiBieSBjaGFuZ2luZyB0byB0aGUgUHl0aG9uIDIuNiBob21lIGRpcmVjdG9yeSBhbmQgZXhlY3V0aW5nIHRoZSAKLVJFR1JURVNULkNNRCBiYXRjaCBmaWxlLiAgVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUga25vd24gdG8gZmFpbCBhdCB0aGlzIAotdGltZToKLS0gdGVzdF9taGxpYiAoSSBkb24ndCBrbm93IG9mIGFueSBwb3J0IG9mIE1IIHRvIE9TLzIpOwotLSB0ZXN0X3N0cnB0aW1lIChzZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDIyKTsKLS0gdGVzdF90aW1lIChzZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDIyKTsKLS0gdGVzdF9wb3NpeHBhdGggKHNlZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMjMpLgotCi1Ob3RlIHRoYXQgc29tZSBvZiB0aGUgbmV0d29yayByZWxhdGVkIHRlc3RzIGV4cGVjdCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlCi0oaW50ZXJmYWNlICJsbyIsIHdpdGggSVAgYWRkcmVzcyAxMjcuMC4wLjEpIHRvIGJlIGVuYWJsZWQsIHdoaWNoIGZyb20gbXkKLWV4cGVyaWVuY2UgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uICBBZGRpdGlvbmFsbHksIHRlc3RfcG9wZW4yCi1leHBlY3RzIHRoZSAiY2F0IiB1dGlsaXR5IChzdWNoIGFzIGZvdW5kIGluIHBvcnRzIG9mIHRoZSBHTlUgdG9vbHMpIHRvCi1iZSBpbnN0YWxsZWQuCi0KLQotQnVpbGRpbmcgZnJvbSBzb3VyY2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdpdGggdGhlIEVNWCBwb3J0IG5vdyBjaGVja2VkIGludG8gUHl0aG9uJ3MgQ1ZTIHJlcG9zaXRvcnksIHRoZSBidWlsZCAKLWluZnJhc3RydWN0dXJlIGlzIHBhcnQgb2YgdGhlIFB5dGhvbiByZWxlYXNlIHNvdXJjZWJhbGwuCi0KLVByZXJlcXVpc2l0ZXMKLQotRmlyc3QgYW5kIGZvcmVtb3N0LCB5b3UgbmVlZCBhbiBvcGVyYXRpb25hbCBFTVggZGV2ZWxvcG1lbnQgaW5zdGFsbGF0aW9uIC0gCi1FTVggdjAuOWQgd2l0aCBmaXgwNCAodGhlIGxhdGVzdCBhdCB0aW1lIG9mIHdyaXRpbmcpICYgdGhlIGdjYyAyLjguMSAKLWNvbXBpbGVyIHJlbGVhc2VkIGJ5IEViZXJoYXJkIE1hdHRlcyBpcyB0aGUgcmVjb21tZW5kZWQgc2V0dXAuCi0KLUlmIHlvdSBoYXZlIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgZ2NjIGluc3RhbGxlZCwgc2VlICJZT1UgSEFWRSBCRUVOIAotV0FSTkVEIiBpdGVtIDE2LgotCi1PdGhlciBpdGVtcyBvZiBzb2Z0d2FyZSByZXF1aXJlZDotCi0KLS0gR05VIG1ha2UgKEknbSB1c2luZyB2My43Ni4xKQotLSBybSwgY3AsIG1rZGlyIGZyb20gdGhlIEdOVSBmaWxlIHV0aWxpdGllcyBwYWNrYWdlCi0tIEdOVSBmaW5kCi0tIEdOVSBzZWQKLQotUHJvY2VkdXJlCi0KLTAuIGFsbCBjaGFuZ2VzIG1lbnRpb25lZCBhcHBseSB0byBmaWxlcyBpbiB0aGUgUEMvb3MyZW14IHN1YmRpcmVjdG9yeSAKLSAgIG9mIHRoZSBQeXRob24gcmVsZWFzZSBzb3VyY2UgdHJlZS4gIG1ha2UgaXMgYWxzbyBleGVjdXRlZCBmcm9tIHRoaXMgCi0gICBkaXJlY3RvcnksIHNvIGNoYW5nZSBpbnRvIHRoaXMgZGlyZWN0b3J5IGJlZm9yZSBwcm9jZWVkaW5nLgotCi0xLiBkZWNpZGUgaWYgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbi4KLSAgIElmIHlvdSB3aXNoIHRvIGRvIHRoaXMsIHNldCB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIExJQl9ESVIgCi0gICB0byB0aGUgZGlyZWN0b3J5IHlvdSB3aXNoIHRvIHVzZSBmb3IgUFlUSE9OSE9NRSAKLSAgIChlZyAvdXNyL2xvY2FsL2xpYi9weXRob24yLjYpLgotCi0gICBJZiB5b3Ugd2FudCBQeXRob24gdG8gZmluZCBpdHMgbGlicmFyeSB3aXRob3V0IHRoZSBQWVRIT05IT01FIAotICAgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0LCBzZXQgdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSAKLSAgIEZJWEVEX1BZSE9NRSB0byAieWVzIiAodW5jb21tZW50IHRoZSBhcHByb3ByaWF0ZSBsaW5lKS4KLQotMi4gSWYgeW91IHdpc2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlcyAocHl0aG9uLmV4ZSwgcHl0aG9ucG0uZXhlICYgcGdlbi5leGUpIAotICAgdG8gYmUgaW5zdGFsbGVkIGluIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIFBZVEhPTkhPTUUgZGlyZWN0b3J5LCBzZXQgCi0gICB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIEVYRV9ESVIgdG8gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeS4KLQotMy4gSWYgeW91IHdpc2ggdGhlIFB5dGhvbiBjb3JlIERMTCAocHl0aG9uMzMuZGxsKSB0byBiZSBpbnN0YWxsZWQgaW4gYSAKLSAgIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlcyBhcmUgCi0gICBpbnN0YWxsZWQgKGJ5IGRlZmF1bHQsIHRoZSBQWVRIT05IT01FIGRpcmVjdG9yeSksIHNldCB0aGUgdmFsdWUgb2YgdGhlIAotICAgTWFrZWZpbGUgdmFyaWFibGUgRExMX0RJUiB0byB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5LiAgVGhpcyBETEwgbXVzdCAKLSAgIGJlIHBsYWNlZCBpbiBhIGRpcmVjdG9yeSBvbiB0aGUgc3lzdGVtJ3MgTElCUEFUSCwgb3IgdGhhdCBnZXRzIHNldCAKLSAgIHdpdGggQkVHSU5MSUJQQVRIIG9yIEVORExJQlBBVEguCi0KLTQuIElmIHlvdSBoYXZlIGluc3RhbGxlZCBhbnkgb2YgdGhlIGxpYnJhcmllcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkIAotICAgb3B0aW9uYWwgUHl0aG9uIG1vZHVsZXMsIHNldCB0aGUgdmFsdWUgb2YgdGhlIHJlbGV2YW50IEhBVkVfPHBhY2thZ2U+IAotICAgTWFrZWZpbGUgdmFyaWFibGUgdG8gInllcyIuICBUaGUgTWFrZWZpbGUgY3VycmVudGx5IHN1cHBvcnRzOgotCi0gICBsaWJyYXJ5ICAgICAgICAgICAgICAgTWFrZWZpbGUgdmFyaWFibGUKLSAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgIHpsaWIgKDEuMS40KSAgICAgICAgICBIQVZFX1pMSUIKLSAgIEdOVSBVbHRyYUZhc3QgQ3J5cHQgICBIQVZFX1VGQwotICAgVGNsL1RrICAgICAgICAgICAgICAgIEhBVkVfVENMVEsgKG5vdCBrbm93biB0byB3b3JrKQotICAgR05VIFJlYWRsaW5lICAgICAgICAgIEhBVkVfR1JFQURMSU5FCi0gICBuY3Vyc2VzICAgICAgICAgICAgICAgSEFWRV9OQ1VSU0VTCi0gICBHTlUgZ2RibSAgICAgICAgICAgICAgSEFWRV9HREJNCi0gICBsaWJiejIgICAgICAgICAgICAgICAgSEFWRV9CWjIKLSAgIE9wZW5TU0wgICAgICAgICAgICAgICBIQVZFX09QRU5TU0wKLQotICAgUGxlYXNlIG5vdGUgdGhhdCB5b3UgbmVlZCB0byBjaGVjayB0aGF0IHdoYXQgeW91IGhhdmUgaW5zdGFsbGVkIAotICAgaXMgY29tcGF0aWJsZSB3aXRoIFB5dGhvbidzIGJ1aWxkIG9wdGlvbnMuICBJbiBwYXJ0aWN1bGFyLCB0aGUgCi0gICBCU0QgREIgdjEuODUgbGlicmFyeSBuZWVkcyB0byBiZSByZWJ1aWx0IHdpdGggYSBzb3VyY2UgcGF0Y2ggZm9yIAotICAgbXVsdGl0aHJlYWQgc3VwcG9ydCAoZG9lc24ndCBjaGFuZ2UgdGhlIGxpYnJhcnkncyByZWVudHJhbnQgc3RhdHVzIAotICAgYnV0IGFsbG93cyBpdCB0byBiZSBsaW5rZWQgdG8gUHl0aG9uIHdoaWNoIGlzIG11bHRpdGhyZWFkZWQpLiAgCi0gICBXaWRlbHkgYXZhaWxhYmxlIGJpbmFyeSBwYWNrYWdlcyBvZiBvdGhlciBsaWJyYXJ5cyAmIERMTHMgYXJlIAotICAgbm90IGJ1aWx0L2xpbmtlZCB3aXRoIG11bHRpdGhyZWFkIHN1cHBvcnQuICBCZXdhcmUhCi0KLSAgIEFsc28gbm90ZSB0aGF0IHRoZSBNYWtlZmlsZSBjdXJyZW50bHkgZXhwZWN0cyBhbnkgbGlicmFyaWVzIHRvIGJlIAotICAgZm91bmQgd2l0aCB0aGUgZGVmYXVsdCBsaWJyYXJ5IHNlYXJjaCBwYXRoLiAgWW91IG1heSBuZWVkIHRvIGFkZCAKLSAgIC1MIHN3aXRjaGVzIHRvIHRoZSBMREZMQUdTIE1ha2VmaWxlIHZhcmlhYmxlIGlmIHlvdSBoYXZlIGluc3RhbGxlZCAKLSAgIGxpYnJhcmllcyBpbiBkaXJlY3RvcmllcyBub3QgaW4gdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGggKHdoaWNoIGNhbiAKLSAgIGJlIGNvbnRyb2xsZWQgYnkgdGhlIExJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSB1c2VkIGJ5IEVNWCkuCi0KLTUuIG1ha2UKLQotICAgSXQgaXMgdXN1YWxseSBhIGdvb2QgaWRlYSB0byByZWRpcmVjdCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyAKLSAgIG9mIHRoZSBtYWtlIHByb2Nlc3MgdG8gbG9nIGZpbGVzLCBzbyB0aGF0IHlvdSBjYW4gcmV2aWV3IGFueSBtZXNzYWdlcy4gCi0KLTYuIG1ha2UgdGVzdAotCi0gICBUaGlzIHJ1bnMgdGhlIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzLCBhbmQgY29tcGxldGlvbiBpcyBhIHNpZ24gb2YgCi0gICBhIHVzYWJsZSBidWlsZC4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGxpc3Qgb2Ygc2tpcHBlZCBtb2R1bGVzIHRvIAotICAgZW5zdXJlIHRoYXQgYW55IG9wdGlvbmFsIG1vZHVsZXMgeW91IHNlbGVjdGVkIGhhdmUgYmVlbiBidWlsdDsgCi0gICBjaGVja2luZyB0aGUgbGlzdCBvZiBmYWlsdXJlcyBhZ2FpbnN0IHRoZSBsaXN0IG9mIGtub3duIGZhaWx1cmVzIAotICAgZWxzZXdoZXJlIGluIHRoaXMgZG9jdW1lbnQgaXMgYWxzbyBwcnVkZW50LgotCi03LiBtYWtlIGluc3RhbGwKLSAgID4+Pj4+PiBOT1QgWUVUIENPTVBMRVRFIDw8PDw8PCAKLQotOC4gY2hhbmdlIHRvIGEgZGlyZWN0b3J5IG91dHNpZGUgdGhlIFB5dGhvbiBzb3VyY2UgdHJlZSBhbmQgc3RhcnQgUHl0aG9uLiAKLSAgIENoZWNrIHRoZSB2ZXJzaW9uIGFuZCBidWlsZCBkYXRlIHRvIGNvbmZpcm0gc2F0aXNmYWN0b3J5IGluc3RhbGxhdGlvbi4KLQotCi1ZT1UgSEFWRSBCRUVOIFdBUk5FRCEhCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUkga25vdyBhYm91dCBhIG51bWJlciBvZiBuYXN0aWVzIGluIHRoaXMgcG9ydC4KLQotMS4gIEViZXJoYXJkIE1hdHRlcywgYXV0aG9yIG9mIEVNWCwgd3JpdGVzIGluIGhpcyBkb2N1bWVudGF0aW9uIHRoYXQgZm9yaygpIAotaXMgdmVyeSBpbmVmZmljaWVudCBpbiB0aGUgT1MvMiBlbnZpcm9ubWVudC4gIEl0IGFsc28gcmVxdWlyZXMgdGhhdCB0aGUgCi1leGVjdXRhYmxlIGJlIGxpbmtlZCBpbiBhLm91dCBmb3JtYXQgcmF0aGVyIHRoYW4gT01GLiAgVXNlIHRoZSBvcy5leGVjIAotYW5kL29yIHRoZSBvcy5zcGF3biBmYW1pbHkgb2YgZnVuY3Rpb25zIHdoZXJlIHBvc3NpYmxlLgotCi0yLiAgSW4gdGhlIGFic2VuY2Ugb2YgR05VIFJlYWRsaW5lLCB0ZXJtaW5hdGluZyB0aGUgaW50ZXJwcmV0ZXIgcmVxdWlyZXMgYSAKLWNvbnRyb2wtWiAoXlopIGZvbGxvd2VkIGJ5IGEgY2FycmlhZ2UgcmV0dXJuLiAgSmVmZiBSdXNoIGRvY3VtZW50ZWQgdGhpcyAKLXByb2JsZW0gaW4gaGlzIFB5dGhvbiAxLjUuMiBwb3J0LiAgV2l0aCBSZWFkbGluZSwgYSBjb250cm9sLUQgKF5EKSB3b3JrcyAKLWFzIHBlciB0aGUgc3RhbmRhcmQgVW5peCBlbnZpcm9ubWVudC4KLQotMy4gIEVNWCBvbmx5IGhhcyBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgZmNudGwoKS4gIFRoZSBmY250bCBtb2R1bGUgCi1pbiB0aGlzIHBvcnQgc3VwcG9ydHMgd2hhdCBFTVggc3VwcG9ydHMuICBJZiBmY250bCBpcyBpbXBvcnRhbnQgdG8geW91LCAKLXBsZWFzZSByZXZpZXcgdGhlIEVNWCBDIExpYnJhcnkgUmVmZXJlbmNlIChpbmNsdWRlZCBpbiAuSU5GIGZvcm1hdCBpbiB0aGUgCi1FTVhWSUVXLlpJUCBhcmNoaXZlIGFzIHBhcnQgb2YgdGhlIGNvbXBsZXRlIEVNWCBkZXZlbG9wbWVudCB0b29scyBzdWl0ZSkuCi1CZWNhdXNlIG9mIG90aGVyIHNpZGUtZWZmZWN0cyBJIGhhdmUgbW9kaWZpZWQgdGhlIHRlc3RfZmNudGwucHkgdGVzdCAKLXNjcmlwdCB0byBkZWFjdGl2YXRlIHRoZSBleGVyY2lzaW5nIG9mIHRoZSBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkuCi0KLTQuICBUaGUgcmVhZGxpbmUgbW9kdWxlIGhhcyBiZWVuIGxpbmtlZCBhZ2FpbnN0IG5jdXJzZXMgcmF0aGVyIHRoYW4gdGhlIAotdGVybWNhcCBsaWJyYXJ5IHN1cHBsaWVkIHdpdGggRU1YLgotCi01LiAgSSBoYXZlIGNvbmZpZ3VyZWQgdGhpcyBwb3J0IHRvIHVzZSAiLyIgYXMgdGhlIHByZWZlcnJlZCBwYXRoIHNlcGFyYXRvciAKLWNoYXJhY3RlciwgcmF0aGVyIHRoYW4gIlwiICgnXFwnKSwgaW4gbGluZSB3aXRoIHRoZSBjb252ZW50aW9uIHN1cHBvcnRlZCAKLWJ5IEVNWC4gIEJhY2tzbGFzaGVzIGFyZSBzdGlsbCBzdXBwb3J0ZWQgb2YgY291cnNlLCBhbmQgc3RpbGwgYXBwZWFyIGluIAotdW5leHBlY3RlZCBwbGFjZXMgZHVlIHRvIG91dHNpZGUgc291cmNlcyB0aGF0IGRvbid0IGdldCBub3JtYWxpc2VkLgotCi02LiAgV2hpbGUgdGhlIERpc3RVdGlscyBjb21wb25lbnRzIGFyZSBub3cgZnVuY3Rpb25hbCwgb3RoZXIgCi1wYWNrYWdpbmcvYmluYXJ5IGhhbmRsaW5nIHRvb2xzIGFuZCB1dGlsaXRpZXMgc3VjaCBhcyB0aG9zZSBpbmNsdWRlZCBpbgotdGhlIERlbW8gYW5kIFRvb2xzIGRpcmVjdG9yaWVzIC0gZnJlZXplIGluIHBhcnRpY3VsYXIgLSBhcmUgdW5saWtlbHkgdG8gCi13b3JrLiAgSWYgeW91IGRvIGdldCB0aGVtIGdvaW5nLCBJJ2QgbGlrZSB0byBrbm93IGFib3V0IHlvdXIgc3VjY2Vzcy4KLQotNy4gIEkgaGF2ZW4ndCBzZXQgb3V0IHRvIHN1cHBvcnQgdGhlIFtCRUdJTnxFTkRdTElCUEFUSCBmdW5jdGlvbmFsaXR5IAotc3VwcG9ydGVkIGJ5IG9uZSBvZiB0aGUgZWFybGllciBwb3J0cyAoUnVzaCdzPz8pLiAgSWYgaXQgd29ya3MgbGV0IG1lIGtub3cuCi0KLTguIEFzIGEgcmVzdWx0IG9mIHRoZSBsaW1pdGF0aW9ucyBpbXBvc2VkIGJ5IEVNWCdzIGxpYnJhcnkgcm91dGluZXMsIHRoZSAKLXN0YW5kYXJkIGV4dGVuc2lvbiBtb2R1bGUgcHdkIG9ubHkgc3ludGhlc2lzZXMgYSBzaW1wbGUgcGFzc3dkIGRhdGFiYXNlLCAKLWFuZCB0aGUgZ3JwIG1vZHVsZSBjYW5ub3QgYmUgc3VwcG9ydGVkIGF0IGFsbC4KLQotSSBoYXZlIHdyaXR0ZW4gcHVyZSBQeXRob24gc3Vic3RpdHV0ZXMgZm9yIHB3ZCBhbmQgZ3JwLCB3aGljaCBjYW4gcHJvY2VzcyAKLXJlYWwgcGFzc3dkIGFuZCBncm91cCBmaWxlcyBmb3IgdGhvc2UgYXBwbGljYXRpb25zIChzdWNoIGFzIE1haWxNYW4pIHRoYXQgCi1yZXF1aXJlIG1vcmUgdGhhbiBFTVggZW11bGF0ZXMuICBJIGhhdmUgcGxhY2VkIHB3ZC5weSBhbmQgZ3JwLnB5IGluIAotTGliL3BsYXQtb3MyZW14LCB3aGljaCBpcyB1c3VhbGx5IGJlZm9yZSBMaWIvbGliLWR5bmxvYWQgKHdoaWNoIGNvbnRhaW5zIAotcHdkLnB5ZCkgaW4gdGhlIFBZVEhPTlBBVEguICBJZiB5b3UgaGF2ZSBiZWNvbWUgYXR0YWNoZWQgdG8gd2hhdCBwd2QucHlkIAotc3VwcG9ydHMsIHlvdSBjYW4gcHV0IExpYi9saWItZHlubG9hZCBiZWZvcmUgTGliL3BsYXQtb3MyZW14IGluIFBZVEhPTlBBVEggCi1vciBkZWxldGUvcmVuYW1lIHB3ZC5weSAmIGdycC5weS4KLQotcHdkLnB5ICYgZ3JwLnB5IHN1cHBvcnQgbG9jYXRpbmcgdGhlaXIgZGF0YSBmaWxlcyBieSBsb29raW5nIGluIHRoZSAKLWVudmlyb25tZW50IGZvciB0aGVtIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6Ci1wd2QucHk6ICAkRVRDX1BBU1NXRCAgICAgICAgICAgICAoJUVUQ19QQVNTV0QlKQotICAgICAgICAgJEVUQy9wYXNzd2QgICAgICAgICAgICAgKCVFVEMlL3Bhc3N3ZCkKLSAgICAgICAgICRQWVRIT05IT01FL0V0Yy9wYXNzd2QgICglUFlUSE9OSE9NRSUvRXRjL3Bhc3N3ZCkKLWdycC5weTogICRFVENfR1JPVVAgICAgICAgICAgICAgICglRVRDX0dST1VQJSkKLSAgICAgICAgICRFVEMvZ3JvdXAgICAgICAgICAgICAgICglRVRDJS9ncm91cCkKLSAgICAgICAgICRQWVRIT05IT01FL0V0Yy9ncm91cCAgICglUFlUSE9OSE9NRSUvRXRjL2dyb3VwKQotCi1UaGUgRVRDX1BBU1NXRCBhbmQgRVRDX0dST1VQIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cgCi1zdXBwb3J0IGZvciBtdWx0aXBsZSBwYXNzd2QvZ3JwIGZpbGVzLCB3aGVyZSBvdGhlciBhcHBsaWNhdGlvbnMgbWF5IG5vdCAKLXN1cHBvcnQgYXMgd2lkZSBhIHZhcmlldHkgb2YgaW5wdXQgdmFyaWF0aW9ucyAoZHJpdmUgcmVtYXBwaW5ncywgCi1zZXBhcmF0b3JzIGV0YykuCi0KLUJvdGggbW9kdWxlcyBzdXBwb3J0IHVzaW5nIGVpdGhlciB0aGUgIjoiIGNoYXJhY3RlciAoVW5peCBzdGFuZGFyZCkgb3IgCi0iOyIgKE9TLzIsIERPUywgV2luZG93cyBzdGFuZGFyZCkgZmllbGQgc2VwYXJhdG9yIGNoYXJhY3RlciwgYW5kIHB3ZC5weSAKLWltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBkcml2ZSBsZXR0ZXIgY29udmVyc2lvbnMgZm9yIHRoZSBob21lX2RpcmVjdG9yeSBhbmQgCi1zaGVsbCBmaWVsZHMgKGZvciB0aGUgIjoiIHNlcGFyYXRvciBvbmx5KToKLSAgICAgICAgICR4ICAtPiAgeDoKLSAgICAgICAgIHg7ICAtPiAgeDoKLQotRXhhbXBsZSB2ZXJzaW9ucyBvZiBwYXNzd2QgYW5kIGdyb3VwIGFyZSBpbiB0aGUgRXRjIHN1YmRpcmVjdG9yeS4gIFRoZSAKLXJlZ3Jlc3Npb24gdGVzdHMgKHRlc3RfcHdkIGFuZCB0ZXN0X2dycCkgd2lsbCBmYWlsIGlmIHZhbGlkIHBhc3N3b3JkIGFuZCAKLWdyb3VwIGZpbGVzIGNhbm5vdCBiZSBmb3VuZCwgYnV0IHNob3VsZCBwYXNzIG90aGVyd2lzZS4KLQotQmUgYXdhcmUgdGhhdCBQeXRob24ncyBwd2QgJiBncm91cCBtb2R1bGVzIGFyZSBmb3IgcmVhZGluZyBwYXNzd29yZCBhbmQgCi1ncm91cCBpbmZvcm1hdGlvbiBvbmx5LgotCi0xMS4gRU1YJ3MgdGVybWlvcyByb3V0aW5lcyBkb24ndCBzdXBwb3J0IGFsbCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBub3cgCi1leHBvc2VkIGJ5IHRoZSB0ZXJtaW9zIG1vZHVsZSAtIHJlZmVyIHRvIHRoZSBFTVggZG9jdW1lbnRhdGlvbiB0byBmaW5kIAotb3V0IHdoYXQgaXMgc3VwcG9ydGVkLgotCi0xMi4gVGhlIGNhc2Ugc2Vuc2l0aXZlIGltcG9ydCBzZW1hbnRpY3MgaW50cm9kdWNlZCBpbiBQeXRob24gMi4xIGZvciBvdGhlciAKLWNhc2UgaW5zZW5zaXRpdmUgYnV0IGNhc2UgcHJlc2VydmluZyBmaWxlL29wZXJhdGluZyBzeXN0ZW1zIChXaW5kb3dzIGV0YyksIAotaGF2ZSBiZWVuIGluY29ycG9yYXRlZCBpbnRvIHRoaXMgcG9ydCwgYW5kIGFyZSBhY3RpdmUgYnkgZGVmYXVsdC4gIFNldHRpbmcgCi10aGUgUFlUSE9OQ0FTRU9LIGVudmlyb25tZW50IHZhcmlhYmxlICh0byBhbnkgdmFsdWUpIHJldmVydHMgdG8gdGhlIAotcHJldmlvdXMgKGNhc2UgaW5zZW5zaXRpdmUpIHNlbWFudGljcy4gIFRoaXMgY2FuIGJlIGFuIGlzc3VlIHdpdGggc29tZSAKLWZpbGUgbWFuYWdlbWVudCB1dGlsaXRpZXMgdGhhdCBkbyBub3QgcHJlc2VydmUgdGhlIGNhc2Ugb2YgZmlsZSBhbmQKLWRpcmVjdG9yeSBuYW1lcy4KLQotMTMuIEJlY2F1c2UgSSBhbSBzdGF0aWNhbGx5IGxpbmtpbmcgbmN1cnNlcywgdGhlIF9jdXJzZXNfcGFuZWwgCi1tb2R1bGUgaGFzIHBvdGVudGlhbCBwcm9ibGVtcyBhcmlzaW5nIGZyb20gc2VwYXJhdGUgbGlicmFyeSBkYXRhIGFyZWFzLgotVG8gYXZvaWQgdGhpcywgSSBoYXZlIGNvbmZpZ3VyZWQgdGhlIF9jdXJzZXNfLnB5ZCAoaW1wb3J0ZWQgYXMgCi0iX2N1cnNlc19wYW5lbCIpIHRvIGltcG9ydCB0aGUgbmN1cnNlcyBzeW1ib2xzIGl0IG5lZWRzIGZyb20gX2N1cnNlcy5kbGwgCi0od2hpY2ggaXMgdGhlIGN1cnNlcyBtb2R1bGUsIGJ1dCB3aXRoIGEgLmRsbCBleHRlbnNpb24gcmF0aGVyIHRoYW4gLnB5ZCAKLXNvIHRoYXQgdGhlIGR5bmFtaWMgbG9hZGVyIGNhbiBhY3R1YWxseSBpbXBvcnQgdGhlIHN5bWJvbHMgZnJvbSBpdCBhcyBhIAotRExMKS4KLQotVGhlIHNpdGUgbW9kdWxlIChMaWIvc2l0ZS5weSkgaGFzIGNvZGUgYWRkZWQgdG8gdHdlYWsgQkVHSU5MSUJQQVRIIHNvCi10aGF0IF9jdXJzZXMuZGxsIGlzIGZvdW5kIHdoZW4gX2N1cnNlc19wYW5lbCBpcyBpbXBvcnRlZC4gIElmIHlvdSBoYXZlCi1wcm9ibGVtcyBhdHRlbXB0aW5nIHRvIHVzZSB0aGUgX2N1cnNlc19wYW5lbCBzdXBwb3J0IHBsZWFzZSBsZXQgbWUga25vdywKLWFuZCBJJ2xsIGhhdmUgYW5vdGhlciBsb29rIGF0IHRoaXMuCi0KLTE0LiBzeXMucGxhdGZvcm0gcmVwb3J0cyAib3MyZW14IiBpbnN0ZWFkIG9mICJvczIiLiAgb3MubmFtZSBzdGlsbCAKLXJlcG9ydHMgIm9zMiIuICBUaGlzIGNoYW5nZSB3YXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiAKLXRoZSBWQUMrKyBidWlsZCAoZm9ybWVybHkgbWFpbnRhaW5lZCBieSBNaWNoYWVsIE11bGxlcikgYW5kIHRoZSBFTVggYnVpbGQgCi0odGhpcyBwb3J0KSwgcHJpbmNpcGFsbHkgZm9yIERpc3RVdGlscy4KLQotMTUuIGl0IGFwcGVhcnMgdGhhdCB0aGUgJVcgc3Vic3RpdHV0aW9uIGluIHRoZSBFTVggc3RyZnRpbWUoKSByb3V0aW5lIGhhcyAKLWFuIG9mZi1ieS1vbmUgYnVnLiAgc3RyZnRpbWUgd2FzIGxpc3RlZCBhcyBwYXNzaW5nIHRoZSByZWdyZXNzaW9uIHRlc3RzIAotaW4gcHJldmlvdXMgcmVsZWFzZXMsIGJ1dCB0aGlzIGZhY3QgYXBwZWFycyB0byBoYXZlIGJlZW4gYW4gb3ZlcnNpZ2h0IGluIAotdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4gIFRvIGZpeCB0aGlzIHJlYWxseSByZXF1aXJlcyBhIHBvcnRhYmxlIAotc3RyZnRpbWUgcm91dGluZSAtIEknbSBsb29raW5nIGludG8gdXNpbmcgb25lIGZyb20gRnJlZUJTRCwgYnV0IGl0cyBub3QgCi1yZWFkeSB5ZXQuCi0KLTE2LiBJIGhhdmUgc3VjY2Vzc2Z1bGx5IGJ1aWx0IHRoaXMgcG9ydCB3aXRoIEFuZHkgWmFib2xvdG55J3MgcG9ydHMgb2YgCi1wZ2NjIDIuOTUgYW5kIGdjYyAzLjIuMSwgaW4gYWRkaXRpb24gdG8gRU0ncyBnY2MgMi44LjEuCi0KLUkgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIGNvbXBpbGUgUHl0aG9uIHdpdGggYW55IHZlcnNpb24gb2YgZ2NjIHByaW9yIHRvIAotdjIuOC4xLgotCi1UaGlzIHJlbGVhc2Ugc2VlcyB0aGUgZGVmYXVsdCBvcHRpbWlzYXRpb24gY2hhbmdlIHRvIAotIi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIi4gIFRoaXMgd29ya3MgZmluZSB0b28gZm9yIHBnY2MgMi45NSAKLWJ1dCBub3QgZm9yIGdjYyAzLjIuMS4KLQotV2l0aCBnY2MgMy4yLjEsIC1PMyBjYXVzZXMgMiB1bmV4cGVjdGVkIHRlc3QgZmFpbHVyZXM6IHRlc3RfZm9ybWF0IGFuZCAKLXRlc3RfdW5pY29kZS4gIEJvdGggdGhlc2UgdGVzdHMgcGFzcyBpZiAtTzIgaXMgaW5zdGVhZCBvZiAtTzMgd2l0aCB0aGlzIAotY29tcGlsZXIsIGFuZCB0aGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBpcyBuZWdsaWdpYmxlIChpbiBjb250cmFzdCB0byAKLWdjYyAyLjguMSBhbmQgcGdjYyAyLjk1LCB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSAKLTIgb3B0aW1pc2F0aW9uIHNldHRpbmdzIGFwcHJvYWNoZXMgMTAlKS4KLQotMTcuICBvcy5zcGF3bnYoKSBhbmQgb3Muc3Bhd252ZSgpIGV4cG9zZSBFTVgncyBsaWJyYXJ5IHJvdXRpbmVzIHJhdGhlciAKLXRoYW4gdXNlIHRoZSBlbXVsYXRpb24gaW4gb3MucHkuCi0KLUluIG9yZGVyIHRvIG1ha2UgdXNlIG9mIHNvbWUgb2YgdGhlIGZlYXR1cmVzIHRoaXMgbWFrZXMgYXZhaWxhYmxlIGluIAotdGhlIE9TLzIgZW52aXJvbm1lbnQsIHlvdSBzaG91bGQgcGVydXNlIHRoZSByZWxldmFudCBFTVggZG9jdW1lbnRhdGlvbiAKLShFTVhMSUIuSU5GIGluIHRoZSBFTVhWSUVXLlpJUCBhcmNoaXZlIGFjY29tcGFueWluZyB0aGUgRU1YIGFyY2hpdmVzIAotb24gSG9iYmVzIG9yIExFTykuICBCZSBhd2FyZSB0aGF0IEkgaGF2ZSBleHBvc2VkIGFsbCB0aGUgIm1vZGUiIG9wdGlvbnMgCi1zdXBwb3J0ZWQgYnkgRU1YLCBidXQgdGhlcmUgYXJlIGNvbWJpbmF0aW9ucyB0aGF0IGVpdGhlciBjYW5ub3QgYmUgCi1wcmFjdGljYWxseSB1c2VkIGJ5L2luIFB5dGhvbiBvciBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gY29tcHJvbWlzZSB5b3VyIAotc3lzdGVtJ3Mgc3RhYmlsaXR5LgotCi0xOC4gIHB5dGhvbnBtLmV4ZSB1c2VkIHRvIGJlIGp1c3QgcHl0aG9uLmV4ZSB3aXRoIHRoZSBXSU5ET1dBUEkgbGlua2VyIAotb3B0aW9uIHNldCBpbiB0aGUgcHl0aG9ucG0uZGVmIGZpbGUuICBJbiBwcmFjdGljZSwgdGhpcyB0dXJucyBvdXQgdG8gZG8gCi1ub3RoaW5nIHVzZWZ1bC4KLQotSSBoYXZlIHdyaXR0ZW4gYSByZXBsYWNlbWVudCB3aGljaCB3cmFwcyB0aGUgUHl0aG9uIERMTCBpbiBhIGdlbnVpbmUgCi1QcmVzZW50YXRpb24gTWFuYWdlciBhcHBsaWNhdGlvbi4gIFRoaXMgdmVyc2lvbiBhY3R1YWxseSBydW5zIHRoZSAKLVB5dGhvbiBpbnRlcnByZXRlciBpbiBhIHNlcGFyYXRlIHRocmVhZCBmcm9tIHRoZSBQTSBzaGVsbCwgaW4gb3JkZXIgCi10aGF0IFB5dGhvblBNIGhhcyBhIGZ1bmN0aW9uaW5nIG1lc3NhZ2UgcXVldWUgYXMgZ29vZCBQTSBhcHBzIHNob3VsZC4KLUluIGl0cyBjdXJyZW50IHN0YXRlLCBQeXRob25QTSdzIHdpbmRvdyBpcyBoaWRkZW4uICBJdCBjYW4gYmUgZGlzcGxheWVkLCAKLWFsdGhvdWdoIGl0IHdpbGwgaGF2ZSBubyBjb250ZW50IGFzIG5vdGhpbmcgaXMgZXZlciB3cml0dGVuIHRvIHRoZSAKLXdpbmRvdy4gIE9ubHkgdGhlICJoaWRlIiBidXR0b24gaXMgYXZhaWxhYmxlLiAgQWx0aG91Z2ggdGhlIGNvZGUgCi1oYXMgc3VwcG9ydCBmb3Igc2h1dHRpbmcgUHl0aG9uUE0gZG93biB3aGVuIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgCi1zdGlsbCBidXN5ICh2aWEgdGhlICJjb250cm9sIiBtZW51KSwgdGhpcyBpcyBub3Qgd2VsbCB0ZXN0ZWQgYW5kIGdpdmVuIAotY29tbWVudHMgSSd2ZSBjb21lIGFjcm9zcyBpbiBFTVggZG9jdW1lbnRhdGlvbiBzdWdnZXN0aW5nIHRoYXQgdGhlIAotdGhyZWFkIGtpbGxpbmcgb3BlcmF0aW9uIGhhcyBwcm9ibGVtcyBJIHdvdWxkIHN1Z2dlc3QgY2F1dGlvbiBpbiAKLXJlbHlpbmcgb24gdGhpcyBjYXBhYmlsaXR5LgotCi1QeXRob25QTSBwcm9jZXNzZXMgY29tbWFuZGxpbmUgcGFyYW1ldGVycyBub3JtYWxseS4gIFRoZSBzdGFuZGFyZCBpbnB1dCwgCi1vdXRwdXQgYW5kIGVycm9yIHN0cmVhbXMgYXJlIG9ubHkgdXNlZnVsIGlmIHJlZGlyZWN0ZWQsIGFzIFB5dGhvblBNJ3MgCi13aW5kb3cgaXMgbm90IGEgY29uc29sZSBpbiBhbnkgZm9ybSBhbmQgc28gY2Fubm90IGFjY2VwdCBvciBkaXNwbGF5IAotYW55dGhpbmcuICBUaGlzIG1lYW5zIHRoYXQgdGhlIC1pIG9wdGlvbiBpcyBpbmVmZmVjdGl2ZS4KLQotQmVjYXVzZSB0aGUgUHl0aG9uIHRocmVhZCBkb2Vzbid0IGNyZWF0ZSBpdHMgb3duIG1lc3NhZ2UgcXVldWUsIGNyZWF0aW5nIAotUE0gV2luZG93cyBhbmQgcGVyZm9ybWluZyBtb3N0IFBNIG9wZXJhdGlvbnMgaXMgbm90IHBvc3NpYmxlIGZyb20gd2l0aGluIAotdGhpcyB0aHJlYWQuICBIb3cgdGhpcyB3aWxsIGFmZmVjdCBzdXBwb3J0aW5nIFBNIGV4dGVuc2lvbnMgKHN1Y2ggYXMgCi1Ua2ludGVyIHVzaW5nIGEgUE0gcG9ydCBvZiBUY2wvVGssIG9yIHd4UHl0aG9uIHVzaW5nIHRoZSBQTSBwb3J0IG9mIAotV3hXaW5kb3dzKSBpcyBzdGlsbCBiZWluZyByZXNlYXJjaGVkLgotCi1Ob3RlIHRoYXQgb3MuZm9yaygpIF9ET0VTX05PVF9XT1JLXyBpbiBQeXRob25QTSAtIFNZUzMxNzVzIGFyZSB0aGUgcmVzdWx0IAotb2YgdHJ5aW5nLiAgb3Muc3Bhd252KCkgX2RvZXNfIHdvcmsuICBQeXRob25QTSBwYXNzZXMgYWxsIHJlZ3Jlc3Npb24gdGVzdHMgCi10aGF0IHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIgKHB5dGhvbi5leGUpIHBhc3Nlcywgd2l0aCB0aGUgZXhjZXB0aW9uIAotb2YgdGVzdF9mb3JrMSBhbmQgdGVzdF9zb2NrZXQgd2hpY2ggYm90aCBhdHRlbXB0IHRvIHVzZSBvcy5mb3JrKCkuCi0KLUkgdmVyeSBtdWNoIHdhbnQgZmVlZGJhY2sgb24gdGhlIHBlcmZvcm1hbmNlLCBiZWhhdmlvdXIgYW5kIHV0aWxpdHkgb2YgCi1QeXRob25QTS4gIEkgd291bGQgbGlrZSB0byBhZGQgYSBQTSBjb25zb2xlIGNhcGFiaWxpdHkgdG8gaXQsIGJ1dCB0aGF0IAotd2lsbCBiZSBhIG5vbi10cml2aWFsIGVmZm9ydC4gIEkgbWF5IGJlIGFibGUgdG8gbGV2ZXJhZ2UgdGhlIGNvZGUgaW4gCi1JbGx5YSBWYWVzJyBUY2wvVGsgcG9ydCwgd2hpY2ggd291bGQgbWFrZSBpdCBlYXNpZXIuCi0KLTE5LiAgb3MuY2hkaXIoKSB1c2VzIEVNWCdzIF9jaGRpcjIoKSwgd2hpY2ggc3VwcG9ydHMgY2hhbmdpbmcgYm90aCBkcml2ZSAKLWFuZCBkaXJlY3RvcnkgYXQgb25jZS4gIFNpbWlsYXJseSwgb3MuZ2V0Y3dkKCkgdXNlcyBFTVgncyBfZ2V0Y3dkKCkgCi13aGljaCByZXR1cm5zIGRyaXZlIGFzIHdlbGwgYXMgcGF0aC4KLQotMjAuICBweWNvbmZpZy5oIGlzIGluc3RhbGxlZCBpbiB0aGUgSW5jbHVkZSBzdWJkaXJlY3Rvcnkgd2l0aCBhbGwgCi1vdGhlciBpbmNsdWRlIGZpbGVzLgotCi0yMS4gIHRoZSBkZWZhdWx0IGJ1aWxkIGV4cGxpY2l0bHkgc2V0cyB0aGUgbnVtYmVyIG9mIGZpbGUgaGFuZGxlcyAKLWF2YWlsYWJsZSB0byBhIFB5dGhvbiBwcm9jZXNzIHRvIDI1MC4gIEVNWCBkZWZhdWx0IGlzIDQwLCB3aGljaCBpcyAKLWluc3VmZmljaWVudCBmb3IgdGhlIHRlbXBmaWxlIHJlZ3Jlc3Npb24gdGVzdCAodGVzdF90ZW1wZmlsZSkgd2hpY2ggCi10cmllcyB0byBjcmVhdGUgMTAwIHRlbXBvcmFyeSBmaWxlcy4KLQotVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIHZpYSB0aGUgRU1YT1BUIGVudmlyb25tZW50IHZhcmlhYmxlOgotICBzZXQgRU1YT1BUPS1oMjUwCi1pcyBlcXVpdmFsZW50IHRvIHRoZSBzZXR0aW5nIGN1cnJlbnRseSB1c2VkLiAgVGhlIGVteGJpbmQgdXRpbGl0eSAoaWYgeW91IAotaGF2ZSBpdCBpbnN0YWxsZWQpIGNhbiBhbHNvIGJlIHVzZWQgdG8gcGVybWFuZW50bHkgY2hhbmdlIHRoZSBzZXR0aW5nIGluIAotcHl0aG9uLmV4ZSAtIHBsZWFzZSByZWZlciB0byB0aGUgRU1YIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLTIyLiAgYSBwdXJlIHB5dGhvbiBzdHJwdGltZSBtb2R1bGUgaXMgbm93IHBhcnQgb2YgdGhlIFB5dGhvbiBzdGFuZGFyZAotbGlicmFyeSwgc3VwZXJjZWRpbmcgYSBwbGF0Zm9ybSBzcGVjaWZpYyBleHRlbnNpb24gbW9kdWxlLiBUaGlzIG1vZHVsZQotbGV2ZXJhZ2VzIHRoZSBzdHJmdGltZSBtb2R1bGUsIGFuZCBhcyBhIHJlc3VsdCB0ZXN0X3N0cnB0aW1lIGZhaWxzCi1kdWUgdG8gdGhlIEVNWCBzdHJmdGltZSBidWcgaW4gaXRlbSAyMCBhYm92ZS4KLQotMjMuICB0ZXN0X3Bvc2l4cGF0aCBhdHRlbXB0cyB0byBleGVyY2lzZSB2YXJpb3VzIFBvc2l4IHBhdGggcmVsYXRlZAotZnVuY3Rpb25hbGl0eS4gIE1vc3Qgb2YgdGhlIHN1Yi10ZXN0cyBwYXNzLCBidXQgdGhlICJpc21vdW50IiBhbmQKLSJzYW1lc3RhdCIgc3VidGVzdHMgZmFpbDoKLS0gRU1YIHByb3ZpZGVzIG5vdCBzYXRpc2ZhY3RvcnkgbW91bnQgcG9pbnQgZW11bGF0aW9uLCBzbyAiaXNtb3VudCIKLSAgY2Fubm90IHN1Y2NlZWQ7Ci0tIEVNWCBkb2N1bWVudHMgdGhhdCBzdWNjZXNzaXZlIHN0YXQoKSBjYWxscyB3aWxsIHByb2R1Y2UgZGlmZmVyZW50Ci0gIHJlc3VsdHMsIHNvICJzYW1lc3RhdCIgY2Fubm90IHN1Y2NlZWQuCi0KLXRlc3RfcG9zaXhwYXRoIHNob3VsZCBza2lwIHRoZXNlIHRlc3RzIG9uIEVNWC4KLQotMjQuICBJIGhhdmUgcmVwb3J0cyBvZiBCaXRUb3JyZW50IG5vdCB3b3JraW5nLiAgSXQgYXBwZWFycyB0aGF0IHRoZQotRU1YIHNlbGVjdCgpIGVtdWxhdGlvbiwgcG9zc2libHkgaW4gY29uY2VydCB3aXRoIGJ1Z3MgaW4gdGhlIFRDUC9JUAotc3RhY2ssIHJ1bnMgaW50byBwcm9ibGVtcyB1bmRlciB0aGUgc3RyZXNzIGltcG9zZWQgYnkgdGhpcyBhcHBsaWNhdGlvbi4KLUkgdGhpbmsgaXQgc3VmZmljZXMgdG8gc2F5IHRoYXQgQml0VG9ycmVudCBpcyBhIGZhaXIgc3RyZXNzIHRlc3Qgb2YgYQotc3lzdGVtJ3MgbmV0d29ya2luZyBjYXBhYmlsaXR5LgotCi0yNS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIEVNWCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGluaygpIGZ1bmN0aW9uLCBJJ3ZlIAotaW1wbGVtZW50ZWQgYSBjcnVkZSBQeXRob24gZW11bGF0aW9uLCBpbiB0aGUgZmlsZSAKLUxpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkuICBUaGlzIGlzIGltcG9ydGVkIGludG8gdGhlIG9zIG1vZHVsZSwgYW5kIAotYmVjb21lcyBhdmFpbGFibGUgYXMgb3MubGluaygpIGluIHRoZSBub3JtYWwgd2F5LgotCi1UaGUgZW11bGF0aW9uIGNvcGllcyB0aGUgc291cmNlIGZpbGUgaW4gYmluYXJ5IG1vZGUsIGFuZCB3aWxsIGZhaWwgaWYgCi1kaXNrIHNwYWNlIGlzIGV4aGF1c3RlZC4gVGhlIGNhbGwgZmFpbHMgaWYgdGhlIHRhcmdldCBhbHJlYWR5IGV4aXN0cy4gCi1UaGVyZSBhcmUgbm8gZ3VhcmFudGVlcyB0byB0aHJlYWQgc2FmZXR5IHdpdGggdGhpcyBlbXVsYXRpb24gLSBiZXdhcmUhCi0KLVRoZSBlbXVsYXRpb24gd2FzIHdyaXR0ZW4gdG8gc3VwcG9ydCBhIGxpbmsoKSBiYXNlZCBmaWxlIGxvY2tpbmcgc3lzdGVtIAotdXNlZCBpbiBHTlUgTWFpbG1hbi4KLQotMjYuICBBRl9VTklYIHNvY2tldHMsIG90aGVyd2lzZSBrbm93biBhcyBVbml4IGRvbWFpbiBzb2NrZXRzLCBhcmUgbm93Ci1zdXBwb3J0ZWQuICBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgc29tZSB0cmFwcyBhcmlzaW5nIGZyb20gdGhlCi1pbXBsZW1lbnRhdGlvbiBpbiBJQk0ncyBUQ1AvSVAgc3RhY2s6LQotLSB0aGUgcGF0aCBuYW1lIG11c3Qgc3RhcnQgd2l0aCAnXFxzb2NrZXRcXCcgKCcvc29ja2V0Lycgd29uJ3Qgd29yayEpLAotICB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGwgcGF0aCBuYW1lIGxlc3MgdGhhbiAxMDggY2hhcmFjdGVyczsKLS0gdW5saWtlIFVuaXgsIHRoZSBzb2NrZXQgZW5kcG9pbnRzIGRvbid0IGV4aXN0IGluIHRoZSBmaWxlc3lzdGVtOwotLSBieSBkZWZhdWx0LCBzb2NrZXRzIGFyZSBpbiBiaW5hcnkgbW9kZS4KLQotMjcuICBBcyBvZiBQeXRob24gMi40LCB0aGUgbXB6LCByb3RvciBhbmQgeHJlYWRsaW5lcyBtb2R1bGVzIGhhdmUgYmVlbiAKLWRyb3BwZWQgZnJvbSB0aGUgUHl0aG9uIHNvdXJjZSB0cmVlLgotCi0yOC4gIFRoZSBzdWJwcm9jZXNzIG1vZHVsZSB3YXMgYWRkZWQgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgcmVsYXRpdmVseQotbGF0ZSBpbiB0aGUgMi40IGRldmVsb3BtZW50IGN5Y2xlLiAgVW5mb3J0dW5hdGVseSBJIGhhdmVuJ3QgaGFkIHRoZQotcm91bmQgdHVpdHMgdG8gYWRhcHQgdGhlIG1vZHVsZSB0byB0aGUgRU1YIGVudmlyb25tZW50IHlldCwgYW5kCi10ZXN0X3N1YnByb2Nlc3MgaGFzIGEgbnVtYmVyIG9mIGZhaWx1cmVzIGFzIGEgcmVzdWx0LgotCi0yOS4gIFRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZm9yIHRocmVhZHMgaGFzIGJlZW4gNjRrLiAgVGhpcyBpcyBwcm92aW5nCi1pbnN1ZmZpY2llbnQgZm9yIHNvbWUgY29kZWJhc2VzLCBzdWNoIGFzIFpvcGUuICBUaGUgdGhyZWFkIHN0YWNrIHNpemUKLXN0aWxsIGRlZmF1bHRzIHRvIDY0aywgYnV0IHRoaXMgY2FuIG5vdyBiZSBpbmNyZWFzZWQgdmlhIHRoZSBzdGFja19zaXplKCkKLWZ1bmN0aW9uIGV4cG9zZWQgYnkgdGhlIHRocmVhZGluZyAmIHRocmVhZCBtb2R1bGVzIGFzIHdlbGwgYXMgYnkgZGVmaW5pbmcKLVRIUkVBRF9TVEFDS19TSVpFIHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGluIHRoZSBNYWtlZmlsZSAod2hpY2ggY29udGFpbnMKLWEgY29tbWVudGVkIG91dCBkZWZpbml0aW9uIGZvciAxMjhrQiB0aHJlYWQgc3RhY2tzKS4gIEkgaGF2ZSBzZWVuCi1yZWZlcmVuY2VzIHRvIGhlYXZ5IFpvcGUvUGxvbmUgdXNhZ2UgcmVxdWlyaW5nIDFNQiB0aHJlYWQgc3RhY2tzIG9uCi1GcmVlQlNEIGFuZCBMaW51eCwgYnV0IGRvdWJ0IHRoYXQgZm9yIG1vc3QgbGlrZWx5IHVzYWdlIG9uIE9TLzIgdGhhdAotbW9yZSB0aGFuIDI1NmtCIGlzIG5lY2Vzc2FyeS4gIFRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBzdGFja3MgKG1haW4gCi1hbmQgdGhyZWFkKSBjYW4gdmFyeSBzaWduaWZpY2FudGx5IGRlcGVuZGluZyBvbiB3aGljaCB2ZXJzaW9uIG9mIGdjYwotaXMgdXNlZCBhbG9uZyB3aXRoIHRoZSBjb21waWxlciBvcHRpbWlzYXRpb25zIHNlbGVjdGVkLiAgTm90ZSB0aGF0IHRoZQotbWFpbiB0aHJlYWQgc3RhY2sgc2l6ZSBpcyBzZXQgZHVyaW5nIGxpbmtpbmcgYW5kIGlzIGN1cnJlbnRseSAyTUIuCi0KLS4uLiBwcm9iYWJseSBvdGhlciBpc3N1ZXMgdGhhdCBJJ3ZlIG5vdCBlbmNvdW50ZXJlZCwgb3IgZG9uJ3QgcmVtZW1iZXIgOi0oCi0KLUlmIHlvdSBlbmNvdW50ZXIgb3RoZXIgZGlmZmljdWx0aWVzIHdpdGggdGhpcyBwb3J0LCB3aGljaCBjYW4gYmUgCi1jaGFyYWN0ZXJpc2VkIGFzIHBlY3VsaWFyIHRvIHRoaXMgcG9ydCByYXRoZXIgdGhhbiB0byB0aGUgUHl0aG9uIHJlbGVhc2UsCi1JIHdvdWxkIGxpa2UgdG8gaGVhciBhYm91dCB0aGVtLiAgSG93ZXZlciBJIGNhbm5vdCBwcm9taXNlIHRvIGJlIGFibGUgdG8gZG8gCi1hbnl0aGluZyB0byByZXNvbHZlIHN1Y2ggcHJvYmxlbXMuICBTZWUgdGhlIENvbnRhY3Qgc2VjdGlvbiBiZWxvdy4uLgotCi0KLVRvIGRvLi4uCi0tLS0tLS0tLQotCi1JbiBubyBwYXJ0aWN1bGFyIG9yZGVyIG9mIGFwcGFyZW50IGltcG9ydGFuY2Ugb3IgbGlrZWxpaG9vZC4uLgotCi0tIHN1cHBvcnQgVGtpbnRlciBhbmQvb3IgYWx0ZXJuYXRpdmUgR1VJICh3eFdpbmRvd3M/PykKLQotCi1DcmVkaXRzCi0tLS0tLS0tCi0KLUluIGFkZGl0aW9uIHRvIHBlb3BsZSBpZGVudGlmaWVkIGFib3ZlLCBJJ2QgbGlrZSB0byB0aGFuazoKLS0gdGhlIEJERkwsIEd1aWRvIHZhbiBSb3NzdW0sIGFuZCBjcmV3IGZvciBQeXRob247Ci0tIERyIERhdmlkIE1lcnR6LCBmb3IgdHJ5aW5nIG91dCBhIHByZS1yZWxlYXNlIG9mIHRoaXMgcG9ydDsKLS0gdGhlIFB5dGhvbi1saXN0L2NvbXAubGFuZy5weXRob24gY29tbXVuaXR5OwotLSBKb2huIFBvbHRvcmFrLCBmb3IgaW5wdXQgYWJvdXQgcHdkL2dycC4KLQotQ29udGFjdAotLS0tLS0tLQotCi1Db25zdHJ1Y3RpdmUgZmVlZGJhY2ssIG5lZ2F0aXZlIG9yIHBvc2l0aXZlLCBhYm91dCB0aGlzIHBvcnQgaXMgd2VsY29tZSAKLWFuZCBzaG91bGQgYmUgYWRkcmVzc2VkIHRvIG1lIGF0IHRoZSBlLW1haWwgYWRkcmVzc2VzIGJlbG93LgotCi1JIGhhdmUgYSBwcml2YXRlIG1haWxpbmcgbGlzdCBmb3IgYW5ub3VuY2VtZW50cyBvZiBmaXhlcyAmIHVwZGF0ZXMgdG8gCi10aGlzIHBvcnQuICBJZiB5b3Ugd2lzaCB0byByZWNlaXZlIHN1Y2ggZS1tYWlsIGFubm91bmNtZW50cywgcGxlYXNlIHNlbmQgCi1tZSBhbiBlLW1haWwgcmVxdWVzdGluZyB0aGF0IHlvdSBiZSBhZGRlZCB0byB0aGlzIGxpc3QuCi0KLUFuZHJldyBNYWNJbnR5cmUKLUUtbWFpbDogYW5keW1hY0BidWxsc2V5ZS5hcGFuYS5vcmcuYXUsIG9yIGFuZHltYWNAcGN1Zy5vcmcuYXUKLVdlYjogICAgaHR0cDovL3d3dy5hbmR5bWFjLm9yZy8KLQotMjggSmFudWFyeSwgMjAwOC4KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9jb25maWcuYyBiL1BDL29zMmVteC9jb25maWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg3OTExMC4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvY29uZmlnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyogLSotIEMgLSotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1Db3B5cmlnaHQgMTk5MS0xOTk1IGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLAotVGhlIE5ldGhlcmxhbmRzLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkCi0KLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAotcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAotYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCi1zdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoCi1DZW50cnVtIG9yIENXSSBvciBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMgb3IKLUNOUkkgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgotcGVybWlzc2lvbi4KLQotV2hpbGUgQ1dJIGlzIHRoZSBpbml0aWFsIHNvdXJjZSBmb3IgdGhpcyBzb2Z0d2FyZSwgYSBtb2RpZmllZCB2ZXJzaW9uCi1pcyBtYWRlIGF2YWlsYWJsZSBieSB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzCi0oQ05SSSkgYXQgdGhlIEludGVybmV0IGFkZHJlc3MgZnRwOi8vZnRwLnB5dGhvbi5vcmcuCi0KLVNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBBTkQgQ05SSSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRICi1SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSAotQ0VOVFJVTSBPUiBDTlJJIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKLVRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKLVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTW9kdWxlIGNvbmZpZ3VyYXRpb24gKi8KLQotLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLgotICAgU2VlIGluaXRfYnVpbHRpbigpIGluIGltcG9ydC5jLiAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLWV4dGVybiB2b2lkIGluaXRvczIoKTsKLWV4dGVybiB2b2lkIGluaXRzaWduYWwoKTsKLSNpZmRlZiBXSVRIX1RIUkVBRAotZXh0ZXJuIHZvaWQgaW5pdF90aHJlYWQoKTsKLSNlbmRpZgotZXh0ZXJuIHZvaWQgaW5pdF9jb2RlY3MoKTsKLWV4dGVybiB2b2lkIGluaXRfY3N2KCk7Ci1leHRlcm4gdm9pZCBpbml0X2xvY2FsZSgpOwotZXh0ZXJuIHZvaWQgaW5pdF9yYW5kb20oKTsKLWV4dGVybiB2b2lkIGluaXRfc3JlKCk7Ci1leHRlcm4gdm9pZCBpbml0X3N5bXRhYmxlKCk7Ci1leHRlcm4gdm9pZCBpbml0X3dlYWtyZWYoKTsKLWV4dGVybiB2b2lkIGluaXRhcnJheSgpOwotZXh0ZXJuIHZvaWQgaW5pdGJpbmFzY2lpKCk7Ci1leHRlcm4gdm9pZCBpbml0Y29sbGVjdGlvbnMoKTsKLWV4dGVybiB2b2lkIGluaXRjbWF0aCgpOwotZXh0ZXJuIHZvaWQgaW5pdGRhdGV0aW1lKCk7Ci1leHRlcm4gdm9pZCBpbml0ZGwoKTsKLWV4dGVybiB2b2lkIGluaXRlcnJubygpOwotZXh0ZXJuIHZvaWQgaW5pdGZjbnRsKCk7Ci1leHRlcm4gdm9pZCBpbml0X2Z1bmN0b29scygpOwotZXh0ZXJuIHZvaWQgaW5pdF9oZWFwcSgpOwotZXh0ZXJuIHZvaWQgaW5pdGltYWdlb3AoKTsKLWV4dGVybiB2b2lkIGluaXRpdGVydG9vbHMoKTsKLWV4dGVybiB2b2lkIGluaXRtYXRoKCk7Ci1leHRlcm4gdm9pZCBpbml0X21kNSgpOwotZXh0ZXJuIHZvaWQgaW5pdG9wZXJhdG9yKCk7Ci1leHRlcm4gdm9pZCBpbml0X3NoYSgpOwotZXh0ZXJuIHZvaWQgaW5pdF9zaGEyNTYoKTsKLWV4dGVybiB2b2lkIGluaXRfc2hhNTEyKCk7Ci1leHRlcm4gdm9pZCBpbml0X3N0cnVjdCgpOwotZXh0ZXJuIHZvaWQgaW5pdHRlcm1pb3MoKTsKLWV4dGVybiB2b2lkIGluaXR0aW1lKCk7Ci1leHRlcm4gdm9pZCBpbml0eHhzdWJ0eXBlKCk7Ci1leHRlcm4gdm9pZCBpbml0emlwaW1wb3J0KCk7Ci0jaWYgIUhBVkVfRFlOQU1JQ19MT0FESU5HCi1leHRlcm4gdm9pZCBpbml0X2N1cnNlcygpOwotZXh0ZXJuIHZvaWQgaW5pdF9jdXJzZXNfcGFuZWwoKTsKLWV4dGVybiB2b2lkIGluaXRfdGVzdGNhcGkoKTsKLWV4dGVybiB2b2lkIGluaXRiejIoKTsKLWV4dGVybiB2b2lkIGluaXRmcGVjdGwoKTsKLWV4dGVybiB2b2lkIGluaXRmcGV0ZXN0KCk7Ci1leHRlcm4gdm9pZCBpbml0cGFyc2VyKCk7Ci1leHRlcm4gdm9pZCBpbml0cHdkKCk7Ci1leHRlcm4gdm9pZCBpbml0dW5pY29kZWRhdGEoKTsKLWV4dGVybiB2b2lkIGluaXR6bGliKCk7Ci0jaWZkZWYgVVNFX1NPQ0tFVAotZXh0ZXJuIHZvaWQgaW5pdF9zb2NrZXQoKTsKLWV4dGVybiB2b2lkIGluaXRzZWxlY3QoKTsKLSNlbmRpZgotI2VuZGlmCi0vKiAtLSBBRERNT0RVTEUgTUFSS0VSIDEgLS0gKi8KLQotZXh0ZXJuIHZvaWQgUHlNYXJzaGFsX0luaXQoKTsKLWV4dGVybiB2b2lkIGluaXRpbXAoKTsKLWV4dGVybiB2b2lkIGluaXRnYygpOwotCi1zdHJ1Y3QgX2luaXR0YWIgX1B5SW1wb3J0X0luaXR0YWJbXSA9IHsKLQotICAgIHsib3MyIiwgaW5pdG9zMn0sCi0gICAgeyJzaWduYWwiLCBpbml0c2lnbmFsfSwKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgIHsiX3RocmVhZCIsIGluaXRfdGhyZWFkfSwKLSNlbmRpZgotICAgIHsiX2NvZGVjcyIsIGluaXRfY29kZWNzfSwKLSAgICB7Il9jc3YiLCBpbml0X2Nzdn0sCi0gICAgeyJfbG9jYWxlIiwgaW5pdF9sb2NhbGV9LAotICAgIHsiX3JhbmRvbSIsIGluaXRfcmFuZG9tfSwKLSAgICB7Il9zcmUiLCBpbml0X3NyZX0sCi0gICAgeyJfc3ltdGFibGUiLCBpbml0X3N5bXRhYmxlfSwKLSAgICB7Il93ZWFrcmVmIiwgaW5pdF93ZWFrcmVmfSwKLSAgICB7ImFycmF5IiwgaW5pdGFycmF5fSwKLSAgICB7ImJpbmFzY2lpIiwgaW5pdGJpbmFzY2lpfSwKLSAgICB7ImNvbGxlY3Rpb25zIiwgaW5pdGNvbGxlY3Rpb25zfSwKLSAgICB7ImNtYXRoIiwgaW5pdGNtYXRofSwKLSAgICB7ImRhdGV0aW1lIiwgaW5pdGRhdGV0aW1lfSwKLSAgICB7ImRsIiwgaW5pdGRsfSwKLSAgICB7ImVycm5vIiwgaW5pdGVycm5vfSwKLSAgICB7ImZjbnRsIiwgaW5pdGZjbnRsfSwKLSAgICB7Il9mdW5jdG9vbHMiLCBpbml0X2Z1bmN0b29sc30sCi0gICAgeyJfaGVhcHEiLCBpbml0X2hlYXBxfSwKLSAgICB7ImltYWdlb3AiLCBpbml0aW1hZ2VvcH0sCi0gICAgeyJpdGVydG9vbHMiLCBpbml0aXRlcnRvb2xzfSwKLSAgICB7Im1hdGgiLCBpbml0bWF0aH0sCi0gICAgeyJvcGVyYXRvciIsIGluaXRvcGVyYXRvcn0sCi0gICAgeyJfc2hhMjU2IiwgaW5pdF9zaGEyNTZ9LAotICAgIHsiX3NoYTUxMiIsIGluaXRfc2hhNTEyfSwKLSAgICB7Il9zdHJ1Y3QiLCBpbml0X3N0cnVjdH0sCi0gICAgeyJ0ZXJtaW9zIiwgaW5pdHRlcm1pb3N9LAotICAgIHsidGltZSIsIGluaXR0aW1lfSwKLSAgICB7Inh4c3VidHlwZSIsIGluaXR4eHN1YnR5cGV9LAotICAgIHsiemlwaW1wb3J0IiwgaW5pdHppcGltcG9ydH0sCi0jaWYgIUhBVkVfRFlOQU1JQ19MT0FESU5HCi0gICAgeyJfY3Vyc2VzIiwgaW5pdF9jdXJzZXN9LAotICAgIHsiX2N1cnNlc19wYW5lbCIsIGluaXRfY3Vyc2VzX3BhbmVsfSwKLSAgICB7Il90ZXN0Y2FwaSIsIGluaXRfdGVzdGNhcGl9LAotICAgIHsiYnoyIiwgaW5pdGJ6Mn0sCi0gICAgeyJmcGVjdGwiLCBpbml0ZnBlY3RsfSwKLSAgICB7ImZwZXRlc3QiLCBpbml0ZnBldGVzdH0sCi0gICAgeyJwYXJzZXIiLCBpbml0cGFyc2VyfSwKLSAgICB7InB3ZCIsIGluaXRwd2R9LAotICAgIHsidW5pY29kZWRhdGEiLCBpbml0dW5pY29kZWRhdGF9LAotICAgIHsiemxpYiIsIGluaXR6bGlifSwKLSNpZmRlZiBVU0VfU09DS0VUCi0gICAgeyJfc29ja2V0IiwgaW5pdF9zb2NrZXR9LAotICAgIHsic2VsZWN0IiwgaW5pdHNlbGVjdH0sCi0jZW5kaWYKLSNlbmRpZgotLyogLS0gQURETU9EVUxFIE1BUktFUiAyIC0tICovCi0KLSAgICAvKiBUaGlzIG1vZHVsZSAibGl2ZXMgaW4iIHdpdGggbWFyc2hhbC5jICovCi0gICAgeyJtYXJzaGFsIiwgUHlNYXJzaGFsX0luaXR9LAotCi0gICAgLyogVGhpcyBsaXZlcyBpdCB3aXRoIGltcG9ydC5jICovCi0gICAgeyJfaW1wIiwgaW5pdGltcH0sCi0KLSAgICAvKiBUaGVzZSBlbnRyaWVzIGFyZSBoZXJlIGZvciBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMgKi8KLSAgICB7ImJ1aWx0aW5zIiwgTlVMTH0sCi0gICAgeyJzeXMiLCBOVUxMfSwKLQotICAgIC8qIFRoaXMgbGl2ZXMgaW4gZ2Ntb2R1bGUuYyAqLwotICAgIHsiZ2MiLCBpbml0Z2N9LAotCi0gICAgLyogU2VudGluZWwgKi8KLSAgICB7MCwgMH0KLX07CmRpZmYgLS1naXQgYS9QQy9vczJlbXgvZGxmY24uYyBiL1BDL29zMmVteC9kbGZjbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmRhOWNkLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9kbGZjbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NSBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgb3IgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIG9yCi1DTlJJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKLXBlcm1pc3Npb24uCi0KLVdoaWxlIENXSSBpcyB0aGUgaW5pdGlhbCBzb3VyY2UgZm9yIHRoaXMgc29mdHdhcmUsIGEgbW9kaWZpZWQgdmVyc2lvbgotaXMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcwotKENOUkkpIGF0IHRoZSBJbnRlcm5ldCBhZGRyZXNzIGZ0cDovL2Z0cC5weXRob24ub3JnLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQU5EIENOUkkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSAotUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0gKLUNFTlRSVU0gT1IgQ05SSSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLVBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCi1UT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCi1QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIGRsb3BlbigpIC0gVW5peC1saWtlIGR5bmFtaWMgbGlua2luZwotICogZW11bGF0aW9uIGZ1bmN0aW9ucyBmb3IgT1MvMiB1c2luZyBEb3NMb2FkTW9kdWxlKCkgYW5kIGNvbXBhbnkuCi0gKi8KLQotI2RlZmluZSBJTkNMX0RPUwotI2RlZmluZSBJTkNMX0RPU0VSUk9SUwotI2RlZmluZSBJTkNMX0RPU1NFU01HUgotI2RlZmluZSBJTkNMX1dJTlBST0dSQU1MSVNUCi0jZGVmaW5lIElOQ0xfV0lORlJBTUVNR1IKLSNpbmNsdWRlIDxvczIuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF90cmFja19yZWMgewotICAgIGNoYXIgKm5hbWU7Ci0gICAgSE1PRFVMRSBoYW5kbGU7Ci0gICAgdm9pZCAqaWQ7Ci0gICAgc3RydWN0IF90cmFja19yZWMgKm5leHQ7Ci19IHRETExjaGFpbiwgKkRMTGNoYWluOwotCi1zdGF0aWMgRExMY2hhaW4gZGxsb2FkID0gTlVMTDsgIC8qIEEgc2ltcGxlIGNoYWluZWQgbGlzdCBvZiBETEwgbmFtZXMgKi8KLXN0YXRpYyBjaGFyIGRsZXJyIFsyNTZdOyAgICAgICAgLyogbGFzdCBlcnJvciB0ZXh0IHN0cmluZyAqLwotc3RhdGljIHZvaWQgKmxhc3RfaWQ7Ci0KLXN0YXRpYyBETExjaGFpbiBmaW5kX2lkKHZvaWQgKmlkKQotewotICAgIERMTGNoYWluIHRtcDsKLQotICAgIGZvciAodG1wID0gZGxsb2FkOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKLSAgICAgICAgaWYgKGlkID09IHRtcC0+aWQpCi0gICAgICAgICAgICByZXR1cm4gdG1wOwotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGxvYWQgYSBkeW5hbWljLWxpbmsgbGlicmFyeSBhbmQgcmV0dXJuIGhhbmRsZSAqLwotdm9pZCAqZGxvcGVuKGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MpCi17Ci0gICAgSE1PRFVMRSBobTsKLSAgICBETExjaGFpbiB0bXA7Ci0gICAgY2hhciBlcnJbMjU2XTsKLSAgICBjaGFyICplcnJ0eHQ7Ci0gICAgaW50IHJjID0gMCwgc2V0X2NoYWluID0gMDsKLQotICAgIGZvciAodG1wID0gZGxsb2FkOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKLSAgICAgICAgaWYgKHN0cm5pY21wKHRtcC0+bmFtZSwgZmlsZW5hbWUsIDk5OSkgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgaWYgKCF0bXApCi0gICAgewotICAgICAgICB0bXAgPSAoRExMY2hhaW4pIG1hbGxvYyhzaXplb2YodERMTGNoYWluKSk7Ci0gICAgICAgIGlmICghdG1wKQotICAgICAgICAgICAgZ290byBub21lbTsKLSAgICAgICAgdG1wLT5uYW1lID0gc3RyZHVwKGZpbGVuYW1lKTsKLSAgICAgICAgdG1wLT5uZXh0ID0gZGxsb2FkOwotICAgICAgICBzZXRfY2hhaW4gPSAxOwotICAgIH0KLQotICAgIHN3aXRjaCAocmMgPSBEb3NMb2FkTW9kdWxlKChQU1opJmVyciwgc2l6ZW9mKGVyciksIGZpbGVuYW1lLCAmaG0pKQotICAgIHsKLSAgICAgICAgY2FzZSBOT19FUlJPUjoKLSAgICAgICAgICAgIHRtcC0+aGFuZGxlID0gaG07Ci0gICAgICAgICAgICBpZiAoc2V0X2NoYWluKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRvCi0gICAgICAgICAgICAgICAgICAgIGxhc3RfaWQrKzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGxhc3RfaWQgPT0gMCkgfHwgKGZpbmRfaWQobGFzdF9pZCkpKTsKLSAgICAgICAgICAgICAgICB0bXAtPmlkID0gbGFzdF9pZDsKLSAgICAgICAgICAgICAgICBkbGxvYWQgPSB0bXA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdG1wLT5pZDsKLSAgICAgICAgY2FzZSBFUlJPUl9GSUxFX05PVF9GT1VORDoKLSAgICAgICAgY2FzZSBFUlJPUl9QQVRIX05PVF9GT1VORDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJtb2R1bGUgYCVzJyBub3QgZm91bmQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUzoKLSAgICAgICAgY2FzZSBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWToKLSAgICAgICAgY2FzZSBFUlJPUl9TSEFSSU5HX0JVRkZFUl9FWENFRURFRDoKLW5vbWVtOgotICAgICAgICAgICAgZXJydHh0ID0gIm91dCBvZiBzeXN0ZW0gcmVzb3VyY2VzIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAiYWNjZXNzIGRlbmllZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUlJPUl9CQURfRk9STUFUOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfU0VHTUVOVF9OVU1CRVI6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9PUkRJTkFMOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfTU9EVUxFVFlQRToKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0VYRV9TSUdOQVRVUkU6Ci0gICAgICAgIGNhc2UgRVJST1JfRVhFX01BUktFRF9JTlZBTElEOgotICAgICAgICBjYXNlIEVSUk9SX0lURVJBVEVEX0RBVEFfRVhDRUVEU182NEs6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9NSU5BTExPQ1NJWkU6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9TRUdEUEw6Ci0gICAgICAgIGNhc2UgRVJST1JfQVVUT0RBVEFTRUdfRVhDRUVEU182NEs6Ci0gICAgICAgIGNhc2UgRVJST1JfUkVMT0NTUkNfQ0hBSU5fRVhDRUVEU19TRUdMSU1JVDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJpbnZhbGlkIG1vZHVsZSBmb3JtYXQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9OQU1FOgotICAgICAgICAgICAgZXJydHh0ID0gImZpbGVuYW1lIGRvZXNuJ3QgbWF0Y2ggbW9kdWxlIG5hbWUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfU0hBUklOR19WSU9MQVRJT046Ci0gICAgICAgIGNhc2UgRVJST1JfTE9DS19WSU9MQVRJT046Ci0gICAgICAgICAgICBlcnJ0eHQgPSAic2hhcmluZyB2aW9sYXRpb24iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfSU5JVF9ST1VUSU5FX0ZBSUxFRDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJtb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJydHh0ID0gImNhdXNlIGAlcycsIGVycm9yIGNvZGUgPSAlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgc25wcmludGYoZGxlcnIsIHNpemVvZihkbGVyciksIGVycnR4dCwgJmVyciwgcmMpOwotICAgIGlmICh0bXApCi0gICAgewotICAgICAgICBpZiAodG1wLT5uYW1lKQotICAgICAgICAgICAgZnJlZSh0bXAtPm5hbWUpOwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBgc3ltYm9sJyBpbiBETEwgKi8KLXZvaWQgKmRsc3ltKHZvaWQgKmhhbmRsZSwgY2hhciAqc3ltYm9sKQotewotICAgIGludCByYyA9IDA7Ci0gICAgUEZOIGFkZHI7Ci0gICAgY2hhciAqZXJydHh0OwotICAgIGludCBzeW1vcmQgPSAwOwotICAgIERMTGNoYWluIHRtcCA9IGZpbmRfaWQoaGFuZGxlKTsKLQotICAgIGlmICghdG1wKQotICAgICAgICBnb3RvIGludl9oYW5kbGU7Ci0KLSAgICBpZiAoKnN5bWJvbCA9PSAnIycpCi0gICAgICAgIHN5bW9yZCA9IGF0b2koc3ltYm9sICsgMSk7Ci0KLSAgICBzd2l0Y2ggKHJjID0gRG9zUXVlcnlQcm9jQWRkcih0bXAtPmhhbmRsZSwgc3ltb3JkLCBzeW1ib2wsICZhZGRyKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgTk9fRVJST1I6Ci0gICAgICAgICAgICByZXR1cm4gKHZvaWQgKilhZGRyOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfSEFORExFOgotaW52X2hhbmRsZToKLSAgICAgICAgICAgIGVycnR4dCA9ICJpbnZhbGlkIG1vZHVsZSBoYW5kbGUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfUFJPQ19OT1RfRk9VTkQ6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9OQU1FOgotICAgICAgICAgICAgZXJydHh0ID0gIm5vIHN5bWJvbCBgJXMnIGluIG1vZHVsZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJzeW1ib2wgYCVzJywgZXJyb3IgY29kZSA9ICVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBzbnByaW50ZihkbGVyciwgc2l6ZW9mKGRsZXJyKSwgZXJydHh0LCBzeW1ib2wsIHJjKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyogZnJlZSBkeW5hbWljYWxseS1saW5rZWQgbGlicmFyeSAqLwotaW50IGRsY2xvc2Uodm9pZCAqaGFuZGxlKQotewotICAgIGludCByYzsKLSAgICBETExjaGFpbiB0bXAgPSBmaW5kX2lkKGhhbmRsZSk7Ci0KLSAgICBpZiAoIXRtcCkKLSAgICAgICAgZ290byBpbnZfaGFuZGxlOwotCi0gICAgc3dpdGNoIChyYyA9IERvc0ZyZWVNb2R1bGUodG1wLT5oYW5kbGUpKQotICAgIHsKLSAgICAgICAgY2FzZSBOT19FUlJPUjoKLSAgICAgICAgICAgIGZyZWUodG1wLT5uYW1lKTsKLSAgICAgICAgICAgIGRsbG9hZCA9IHRtcC0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUodG1wKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfSEFORExFOgotaW52X2hhbmRsZToKLSAgICAgICAgICAgIHN0cmNweShkbGVyciwgImludmFsaWQgbW9kdWxlIGhhbmRsZSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfQUNDRVNTOgotICAgICAgICAgICAgc3RyY3B5KGRsZXJyLCAiYWNjZXNzIGRlbmllZCIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX0KLQotLyogcmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgbGFzdCBvY2N1cnJlZCBkbCBlcnJvciAqLwotY2hhciAqZGxlcnJvcigpCi17Ci0gICAgcmV0dXJuIGRsZXJyOwotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2RsZmNuLmggYi9QQy9vczJlbXgvZGxmY24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczYWU2OS4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvZGxmY24uaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NSBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgb3IgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIG9yCi1DTlJJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKLXBlcm1pc3Npb24uCi0KLVdoaWxlIENXSSBpcyB0aGUgaW5pdGlhbCBzb3VyY2UgZm9yIHRoaXMgc29mdHdhcmUsIGEgbW9kaWZpZWQgdmVyc2lvbgotaXMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcwotKENOUkkpIGF0IHRoZSBJbnRlcm5ldCBhZGRyZXNzIGZ0cDovL2Z0cC5weXRob24ub3JnLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQU5EIENOUkkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSAotUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0gKLUNFTlRSVU0gT1IgQ05SSSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLVBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCi1UT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCi1QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIGRsb3BlbigpIC0gVW5peC1saWtlIGR5bmFtaWMgbGlua2luZwotICogZW11bGF0aW9uIGZ1bmN0aW9ucyBmb3IgT1MvMiB1c2luZyBEb3NMb2FkTW9kdWxlKCkgYW5kIGNvbXBhbnkuCi0gKi8KLQotI2lmbmRlZiBfRExGQ05fSAotI2RlZmluZSBfRExGQ05fSAotCi0vKiBsb2FkIGEgZHluYW1pYy1saW5rIGxpYnJhcnkgYW5kIHJldHVybiBoYW5kbGUgKi8KLXZvaWQgKmRsb3BlbihjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzKTsKLQotLyogcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYHN5bWJvbCcgaW4gRExMICovCi12b2lkICpkbHN5bSh2b2lkICpoYW5kbGUsIGNoYXIgKnN5bWJvbCk7Ci0KLS8qIGZyZWUgZHluYW1pY2FsbHktbGlua2VkIGxpYnJhcnkgKi8KLWludCBkbGNsb3NlKHZvaWQgKmhhbmRsZSk7Ci0KLS8qIHJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGxhc3Qgb2NjdXJyZWQgZGwgZXJyb3IgKi8KLWNoYXIgKmRsZXJyb3Iodm9pZCk7Ci0KLSNlbmRpZiAvKiAhX0RMRkNOX0ggKi8KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9kbGxlbnRyeS5jIGIvUEMvb3MyZW14L2RsbGVudHJ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljY2NhMWMuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L2RsbGVudHJ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBQeXRob24gMi4zIGNvcmUgRExMLgotICovCi0KLSNkZWZpbmUgTlVMTCAwCi0KLSNkZWZpbmUgUkVGKHMpICBleHRlcm4gdm9pZCBzKCk7IHZvaWQgKl9fX19yZWZfIyNzID0gJnM7Ci0KLS8qIE1ha2UgcmVmZXJlbmNlcyB0byBpbXBvcnRlZCBzeW1ib2xzIHRvIHB1bGwgdGhlbSBmcm9tIHN0YXRpYyBsaWJyYXJ5ICovCi1SRUYoUHlfTWFpbik7Ci0KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotZXh0ZXJuIGludCBfQ1JUX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBfQ1JUX3Rlcm0odm9pZCk7Ci1leHRlcm4gdm9pZCBfX2N0b3JkdG9ySW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9fY3RvcmR0b3JUZXJtKHZvaWQpOwotCi11bnNpZ25lZCBsb25nIF9ETExfSW5pdFRlcm0odW5zaWduZWQgbG9uZyBtb2RfaGFuZGxlLCB1bnNpZ25lZCBsb25nIGZsYWcpCi17Ci0gICAgc3dpdGNoIChmbGFnKQotICAgIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgaWYgKF9DUlRfaW5pdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgX19jdG9yZHRvckluaXQoKTsKLQotICAgICAgICAgICAgLyogSWdub3JlIGZhdGFsIHNpZ25hbHMgKi8KLSAgICAgICAgICAgIHNpZ25hbChTSUdTRUdWLCBTSUdfSUdOKTsKLSAgICAgICAgICAgIHNpZ25hbChTSUdGUEUsIFNJR19JR04pOwotCi0gICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBfX2N0b3JkdG9yVGVybSgpOwotICAgICAgICAgICAgX0NSVF90ZXJtKCk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2dldHBhdGhwLmMgYi9QQy9vczJlbXgvZ2V0cGF0aHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ3Mzc3NC4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvZ2V0cGF0aHAuYworKysgL2Rldi9udWxsCkBAIC0xLDQxOCArMCwwIEBACi0KLS8qIFJldHVybiB0aGUgaW5pdGlhbCBtb2R1bGUgc2VhcmNoIHBhdGguICovCi0vKiBUaGlzIHZlcnNpb24gdXNlZCBieSBPUy8yK0VNWCAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBQQVRIIFJVTEVTIEZPUiBPUy8yK0VNWDoKLSAgIFRoaXMgZGVzY3JpYmVzIGhvdyBzeXMucGF0aCBpcyBmb3JtZWQgb24gT1MvMitFTVguICBJdCBkZXNjcmliZXMgdGhlCi0gICBmdW5jdGlvbmFsaXR5LCBub3QgdGhlIGltcGxlbWVudGF0aW9uIChpZSwgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXNlCi0gICBhcmUgYWN0dWFsbHkgZmV0Y2hlZCBpcyBkaWZmZXJlbnQpCi0KLSAgICogUHl0aG9uIGFsd2F5cyBhZGRzIGFuIGVtcHR5IGVudHJ5IGF0IHRoZSBzdGFydCwgd2hpY2ggY29ycmVzcG9uZHMKLSAgICAgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotCi0gICAqIElmIHRoZSBQWVRIT05QQVRIIGVudi4gdmFyLiBleGlzdHMsIGl0cyBlbnRyaWVzIGFyZSBhZGRlZCBuZXh0LgotCi0gICAqIFdlIGF0dGVtcHQgdG8gbG9jYXRlIHRoZSAiUHl0aG9uIEhvbWUiIC0gaWYgdGhlIFBZVEhPTkhPTUUgZW52IHZhcgotICAgICBpcyBzZXQsIHdlIGJlbGlldmUgaXQuICBPdGhlcndpc2UsIHdlIHVzZSB0aGUgcGF0aCBvZiBvdXIgaG9zdCAuRVhFJ3MKLSAgICAgdG8gdHJ5IGFuZCBsb2NhdGUgb3VyICJsYW5kbWFyayIgKGxpYlxcb3MucHkpIGFuZCBkZWR1Y2Ugb3VyIGhvbWUuCi0gICAgIC0gSWYgd2UgRE8gaGF2ZSBhIFB5dGhvbiBIb21lOiBUaGUgcmVsZXZhbnQgc3ViLWRpcmVjdG9yaWVzIChMaWIsCi0gICAgICAgcGxhdC13aW4sIGV0YykgYXJlIGJhc2VkIG9uIHRoZSBQeXRob24gSG9tZQotICAgICAtIElmIHdlIERPIE5PVCBoYXZlIGEgUHl0aG9uIEhvbWUsIHRoZSBjb3JlIFB5dGhvbiBQYXRoIGlzCi0gICAgICAgbG9hZGVkIGZyb20gdGhlIHJlZ2lzdHJ5LiAgVGhpcyBpcyB0aGUgbWFpbiBQeXRob25QYXRoIGtleSwKLSAgICAgICBhbmQgYm90aCBIS0xNIGFuZCBIS0NVIGFyZSBjb21iaW5lZCB0byBmb3JtIHRoZSBwYXRoKQotCi0gICAqIElmZiAtIHdlIGNhbiBub3QgbG9jYXRlIHRoZSBQeXRob24gSG9tZSwgYW5kIGhhdmUgbm90IGhhZCBhIFBZVEhPTlBBVEgKLSAgICAgc3BlY2lmaWVkIChpZSwgd2UgaGF2ZSBfbm90aGluZ18gd2UgY2FuIGFzc3VtZSBpcyBhIGdvb2QgcGF0aCksIGEKLSAgICAgZGVmYXVsdCBwYXRoIHdpdGggcmVsYXRpdmUgZW50cmllcyBpcyB1c2VkIChlZy4gLlxMaWI7LlxwbGF0LXdpbiwgZXRjKQotCi0KLSAgVGhlIGVuZCByZXN1bHQgb2YgYWxsIHRoaXMgaXM6Ci0gICogV2hlbiBydW5uaW5nIHB5dGhvbi5leGUsIG9yIGFueSBvdGhlciAuZXhlIGluIHRoZSBtYWluIFB5dGhvbiBkaXJlY3RvcnkKLSAgICAoZWl0aGVyIGFuIGluc3RhbGxlZCB2ZXJzaW9uLCBvciBkaXJlY3RseSBmcm9tIHRoZSBQQ2J1aWxkIGRpcmVjdG9yeSksCi0gICAgdGhlIGNvcmUgcGF0aCBpcyBkZWR1Y2VkLgotCi0gICogV2hlbiBQeXRob24gaXMgaG9zdGVkIGluIGFub3RoZXIgZXhlIChkaWZmZXJlbnQgZGlyZWN0b3J5LCBlbWJlZGRlZCB2aWEKLSAgICBDT00sIGV0YyksIHRoZSBQeXRob24gSG9tZSB3aWxsIG5vdCBiZSBkZWR1Y2VkLCBzbyB0aGUgY29yZSBwYXRoIGZyb20KLSAgICB0aGUgcmVnaXN0cnkgaXMgdXNlZC4gIE90aGVyICJhcHBsaWNhdGlvbiBwYXRocyAiaW4gdGhlIHJlZ2lzdHJ5IGFyZQotICAgIGFsd2F5cyByZWFkLgotCi0gICogSWYgUHl0aG9uIGNhbid0IGZpbmQgaXRzIGhvbWUgYW5kIHRoZXJlIGlzIG5vIHJlZ2lzdHJ5IChlZywgZnJvemVuCi0gICAgZXhlLCBzb21lIHZlcnkgc3RyYW5nZSBpbnN0YWxsYXRpb24gc2V0dXApIHlvdSBnZXQgYSBwYXRoIHdpdGgKLSAgICBzb21lIGRlZmF1bHQsIGJ1dCByZWxhdGl2ZSwgcGF0aHMuCi0KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAib3NkZWZzLmgiCi0KLSNpZm5kZWYgUFlPU19PUzIKLSNlcnJvciBUaGlzIGZpbGUgb25seSBjb21waWxhYmxlIG9uIE9TLzIKLSNlbmRpZgotCi0jZGVmaW5lIElOQ0xfRE9TCi0jaW5jbHVkZSA8b3MyLmg+Ci0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmIC8qIEhBVkVfVU5JU1REX0ggKi8KLQotLyogU2VhcmNoIGluIHNvbWUgY29tbW9uIGxvY2F0aW9ucyBmb3IgdGhlIGFzc29jaWF0ZWQgUHl0aG9uIGxpYnJhcmllcy4KLSAqCi0gKiBQeV9HZXRQYXRoKCkgdHJpZXMgdG8gcmV0dXJuIGEgc2Vuc2libGUgUHl0aG9uIG1vZHVsZSBzZWFyY2ggcGF0aC4KLSAqCi0gKiBUaGUgYXBwcm9hY2ggaXMgYW4gYWRhcHRhdGlvbiBmb3IgV2luZG93cyBvZiB0aGUgc3RyYXRlZ3kgdXNlZCBpbgotICogLi4vTW9kdWxlcy9nZXRwYXRoLmM7IGl0IHVzZXMgdGhlIFdpbmRvd3MgUmVnaXN0cnkgYXMgb25lIG9mIGl0cwotICogaW5mb3JtYXRpb24gc291cmNlcy4KLSAqLwotCi0jaWZuZGVmIExBTkRNQVJLCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTEFORE1BUksgImxpYi9vcy5weSIKLSNlbHNlCi0jZGVmaW5lIExBTkRNQVJLICJsaWJcXG9zLnB5IgotI2VuZGlmCi0jZW5kaWYKLQotc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Ci0KLQotc3RhdGljIGludAotaXNfc2VwKGNoYXIgY2gpIC8qIGRldGVybWluZSBpZiAiY2giIGlzIGEgc2VwYXJhdG9yIGNoYXJhY3RlciAqLwotewotI2lmZGVmIEFMVFNFUAotICAgIHJldHVybiBjaCA9PSBTRVAgfHwgY2ggPT0gQUxUU0VQOwotI2Vsc2UKLSAgICByZXR1cm4gY2ggPT0gU0VQOwotI2VuZGlmCi19Ci0KLS8qIGFzc3VtZXMgJ2RpcicgbnVsbCB0ZXJtaW5hdGVkIGluIGJvdW5kcy4KLSAqIE5ldmVyIHdyaXRlcyBiZXlvbmQgZXhpc3RpbmcgdGVybWluYXRvci4KLSAqLwotc3RhdGljIHZvaWQKLXJlZHVjZShjaGFyICpkaXIpCi17Ci0gICAgc2l6ZV90IGkgPSBzdHJsZW4oZGlyKTsKLSAgICB3aGlsZSAoaSA+IDAgJiYgIWlzX3NlcChkaXJbaV0pKQotICAgICAgICAtLWk7Ci0gICAgZGlyW2ldID0gJ1wwJzsKLX0KLQotc3RhdGljIGludAotZXhpc3RzKGNoYXIgKmZpbGVuYW1lKQotewotICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLSAgICByZXR1cm4gc3RhdChmaWxlbmFtZSwgJmJ1ZikgPT0gMDsKLX0KLQotLyogSXMgbW9kdWxlICAoY2hlY2sgZm9yIC5weWMvLnB5byB0b28pCi0gKiBBc3N1bWVzICdmaWxlbmFtZScgTUFYUEFUSExFTisxIGJ5dGVzIGxvbmcgLQotICogbWF5IGV4dGVuZCAnZmlsZW5hbWUnIGJ5IG9uZSBjaGFyYWN0ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWlzbW9kdWxlKGNoYXIgKmZpbGVuYW1lKQotewotICAgIGlmIChleGlzdHMoZmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIC8qIENoZWNrIGZvciB0aGUgY29tcGlsZWQgdmVyc2lvbiBvZiBwcmVmaXguICovCi0gICAgaWYgKHN0cmxlbihmaWxlbmFtZSkgPCBNQVhQQVRITEVOKSB7Ci0gICAgICAgIHN0cmNhdChmaWxlbmFtZSwgUHlfT3B0aW1pemVGbGFnID8gIm8iIDogImMiKTsKLSAgICAgICAgaWYgKGV4aXN0cyhmaWxlbmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIEFkZCBhIHBhdGggY29tcG9uZW50LCBieSBhcHBlbmRpbmcgc3R1ZmYgdG8gYnVmZmVyLgotICAgYnVmZmVyIG11c3QgaGF2ZSBhdCBsZWFzdCBNQVhQQVRITEVOICsgMSBieXRlcyBhbGxvY2F0ZWQsIGFuZCBjb250YWluIGEKLSAgIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoIG5vIG1vcmUgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgKG5vdCBjb3VudGluZwotICAgdGhlIHRyYWlsaW5nIE5VTCkuICBJdCdzIGEgZmF0YWwgZXJyb3IgaWYgaXQgY29udGFpbnMgYSBzdHJpbmcgbG9uZ2VyIHRoYW4KLSAgIHRoYXQgKGNhbGxlcnMgbXVzdCBiZSBjYXJlZnVsISkuICBJZiB0aGVzZSByZXF1aXJlbWVudHMgYXJlIG1ldCwgaXQncwotICAgZ3VhcmFudGVlZCB0aGF0IGJ1ZmZlciB3aWxsIHN0aWxsIGJlIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbm8gbW9yZQotICAgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgYXQgZXhpdC4gIElmIHN0dWZmIGlzIHRvbyBsb25nLCBvbmx5IGFzIG11Y2ggb2YKLSAgIHN0dWZmIGFzIGZpdHMgd2lsbCBiZSBhcHBlbmRlZC4KLSovCi0KLXN0YXRpYyB2b2lkCi1qb2luKGNoYXIgKmJ1ZmZlciwgY2hhciAqc3R1ZmYpCi17Ci0gICAgc2l6ZV90IG4sIGs7Ci0gICAgaWYgKGlzX3NlcChzdHVmZlswXSkpCi0gICAgICAgIG4gPSAwOwotICAgIGVsc2UgewotICAgICAgICBuID0gc3RybGVuKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChuID4gMCAmJiAhaXNfc2VwKGJ1ZmZlcltuLTFdKSAmJiBuIDwgTUFYUEFUSExFTikKLSAgICAgICAgICAgIGJ1ZmZlcltuKytdID0gU0VQOwotICAgIH0KLSAgICBpZiAobiA+IE1BWFBBVEhMRU4pCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3Mgam9pbnBhdGgoKSIpOwotICAgIGsgPSBzdHJsZW4oc3R1ZmYpOwotICAgIGlmIChuICsgayA+IE1BWFBBVEhMRU4pCi0gICAgICAgIGsgPSBNQVhQQVRITEVOIC0gbjsKLSAgICBzdHJuY3B5KGJ1ZmZlcituLCBzdHVmZiwgayk7Ci0gICAgYnVmZmVyW24ra10gPSAnXDAnOwotfQotCi0vKiBnb3RsYW5kbWFyayBvbmx5IGNhbGxlZCBieSBzZWFyY2hfZm9yX3ByZWZpeCwgd2hpY2ggZW5zdXJlcwotICogJ3ByZWZpeCcgaXMgbnVsbCB0ZXJtaW5hdGVkIGluIGJvdW5kcy4gIGpvaW4oKSBlbnN1cmVzCi0gKiAnbGFuZG1hcmsnIGNhbiBub3Qgb3ZlcmZsb3cgcHJlZml4IGlmIHRvbyBsb25nLgotICovCi1zdGF0aWMgaW50Ci1nb3RsYW5kbWFyayhjaGFyICpsYW5kbWFyaykKLXsKLSAgICBpbnQgbiwgb2s7Ci0KLSAgICBuID0gc3RybGVuKHByZWZpeCk7Ci0gICAgam9pbihwcmVmaXgsIGxhbmRtYXJrKTsKLSAgICBvayA9IGlzbW9kdWxlKHByZWZpeCk7Ci0gICAgcHJlZml4W25dID0gJ1wwJzsKLSAgICByZXR1cm4gb2s7Ci19Ci0KLS8qIGFzc3VtZXMgYXJndjBfcGF0aCBpcyBNQVhQQVRITEVOKzEgYnl0ZXMgbG9uZywgYWxyZWFkeSBcMCB0ZXJtJ2QuCi0gKiBhc3N1bXB0aW9uIHByb3ZpZGVkIGJ5IG9ubHkgY2FsbGVyLCBjYWxjdWxhdGVfcGF0aCgpCi0gKi8KLXN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KGNoYXIgKmFyZ3YwX3BhdGgsIGNoYXIgKmxhbmRtYXJrKQotewotICAgIC8qIFNlYXJjaCBmcm9tIGFyZ3YwX3BhdGgsIHVudGlsIGxhbmRtYXJrIGlzIGZvdW5kICovCi0gICAgc3RyY3B5KHByZWZpeCwgYXJndjBfcGF0aCk7Ci0gICAgZG8gewotICAgICAgICBpZiAoZ290bGFuZG1hcmsobGFuZG1hcmspKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIHJlZHVjZShwcmVmaXgpOwotICAgIH0gd2hpbGUgKHByZWZpeFswXSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdldF9wcm9ncGF0aCh2b2lkKQotewotICAgIGV4dGVybiBjaGFyICpQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKLSAgICBjaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIIik7Ci0gICAgY2hhciAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7Ci0KLSAgICBQUElCIHBpYjsKLSAgICBpZiAoKERvc0dldEluZm9CbG9ja3MoTlVMTCwgJnBpYikgPT0gMCkgJiYKLSAgICAgICAgKERvc1F1ZXJ5TW9kdWxlTmFtZShwaWItPnBpYl9obXRlLCBzaXplb2YocHJvZ3BhdGgpLCBwcm9ncGF0aCkgPT0gMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcm9nID09IE5VTEwgfHwgKnByb2cgPT0gJ1wwJykKLSAgICAgICAgcHJvZyA9ICJweXRob24iOwotCi0gICAgLyogSWYgdGhlcmUgaXMgbm8gc2xhc2ggaW4gdGhlIGFyZ3YwIHBhdGgsIHRoZW4gd2UgaGF2ZSB0bwotICAgICAqIGFzc3VtZSBweXRob24gaXMgb24gdGhlIHVzZXIncyAkUEFUSCwgc2luY2UgdGhlcmUncyBubwotICAgICAqIG90aGVyIHdheSB0byBmaW5kIGEgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gIElmCi0gICAgICogJFBBVEggaXNuJ3QgZXhwb3J0ZWQsIHlvdSBsb3NlLgotICAgICAqLwotI2lmZGVmIEFMVFNFUAotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSB8fCBzdHJjaHIocHJvZywgQUxUU0VQKSkKLSNlbHNlCi0gICAgaWYgKHN0cmNocihwcm9nLCBTRVApKQotI2VuZGlmCi0gICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHByb2csIE1BWFBBVEhMRU4pOwotICAgIGVsc2UgaWYgKHBhdGgpIHsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGNoYXIgKmRlbGltID0gc3RyY2hyKHBhdGgsIERFTElNKTsKLQotICAgICAgICAgICAgaWYgKGRlbGltKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IGRlbGltIC0gcGF0aDsKLSAgICAgICAgICAgICAgICAvKiBlbnN1cmUgd2UgY2FuJ3Qgb3ZlcndyaXRlIGJ1ZmZlciAqLwotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgICAgICAgICAgICAgIGxlbiA9IG1pbihNQVhQQVRITEVOLGxlbik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGxlbiA9IE1BWFBBVEhMRU4gPCBsZW4gPyBNQVhQQVRITEVOIDogbGVuOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgc3RybmNweShwcm9ncGF0aCwgcGF0aCwgbGVuKTsKLSAgICAgICAgICAgICAgICAqKHByb2dwYXRoICsgbGVuKSA9ICdcMCc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RybmNweShwcm9ncGF0aCwgcGF0aCwgTUFYUEFUSExFTik7Ci0KLSAgICAgICAgICAgIC8qIGpvaW4oKSBpcyBzYWZlIGZvciBNQVhQQVRITEVOKzEgc2l6ZSBidWZmZXIgKi8KLSAgICAgICAgICAgIGpvaW4ocHJvZ3BhdGgsIHByb2cpOwotICAgICAgICAgICAgaWYgKGV4aXN0cyhwcm9ncGF0aCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICghZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotfQotCi1zdGF0aWMgdm9pZAotY2FsY3VsYXRlX3BhdGgodm9pZCkKLXsKLSAgICBjaGFyIGFyZ3YwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBjaGFyICpidWY7Ci0gICAgc2l6ZV90IGJ1ZnN6OwotICAgIGNoYXIgKnB5dGhvbmhvbWUgPSBQeV9HZXRQeXRob25Ib21lKCk7Ci0gICAgY2hhciAqZW52cGF0aCA9IGdldGVudigiUFlUSE9OUEFUSCIpOwotICAgIGNoYXIgemlwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBzaXplX3QgbGVuOwotCi0gICAgZ2V0X3Byb2dwYXRoKCk7Ci0gICAgLyogcHJvZ3BhdGggZ3VhcmFudGVlZCBcMCB0ZXJtaW5hdGVkIGluIE1BWFBBVEgrMSBieXRlcy4gKi8KLSAgICBzdHJjcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgpOwotICAgIHJlZHVjZShhcmd2MF9wYXRoKTsKLSAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMIHx8ICpweXRob25ob21lID09ICdcMCcpIHsKLSAgICAgICAgaWYgKHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIExBTkRNQVJLKSkKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBwcmVmaXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHN0cm5jcHkocHJlZml4LCBweXRob25ob21lLCBNQVhQQVRITEVOKTsKLQotICAgIGlmIChlbnZwYXRoICYmICplbnZwYXRoID09ICdcMCcpCi0gICAgICAgIGVudnBhdGggPSBOVUxMOwotCi0gICAgLyogQ2FsY3VsYXRlIHppcCBhcmNoaXZlIHBhdGggKi8KLSAgICBzdHJuY3B5KHppcF9wYXRoLCBwcm9ncGF0aCwgTUFYUEFUSExFTik7Ci0gICAgemlwX3BhdGhbTUFYUEFUSExFTl0gPSAnXDAnOwotICAgIGxlbiA9IHN0cmxlbih6aXBfcGF0aCk7Ci0gICAgaWYgKGxlbiA+IDQpIHsKLSAgICAgICAgemlwX3BhdGhbbGVuLTNdID0gJ3onOyAgLyogY2hhbmdlIGVuZGluZyB0byAiemlwIiAqLwotICAgICAgICB6aXBfcGF0aFtsZW4tMl0gPSAnaSc7Ci0gICAgICAgIHppcF9wYXRoW2xlbi0xXSA9ICdwJzsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHppcF9wYXRoWzBdID0gMDsKLSAgICB9Ci0KLSAgICAvKiBXZSBuZWVkIHRvIGNvbnN0cnVjdCBhIHBhdGggZnJvbSB0aGUgZm9sbG93aW5nIHBhcnRzLgotICAgICAqICgxKSB0aGUgUFlUSE9OUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgaWYgc2V0OwotICAgICAqICgyKSB0aGUgemlwIGFyY2hpdmUgZmlsZSBwYXRoOwotICAgICAqICgzKSB0aGUgUFlUSE9OUEFUSCBjb25maWcgbWFjcm8sIHdpdGggdGhlIGxlYWRpbmcgIi4iCi0gICAgICogICAgIG9mIGVhY2ggY29tcG9uZW50IHJlcGxhY2VkIHdpdGggcHl0aG9uaG9tZSwgaWYgc2V0OwotICAgICAqICg0KSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgKGFyZ3YwX3BhdGgpLgotICAgICAqIFRoZSBsZW5ndGggY2FsY3VsYXRpb24gY2FsY3VsYXRlcyAjMyBmaXJzdC4KLSAgICAgKi8KLQotICAgIC8qIENhbGN1bGF0ZSBzaXplIG9mIHJldHVybiBidWZmZXIgKi8KLSAgICBpZiAocHl0aG9uaG9tZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNoYXIgKnA7Ci0gICAgICAgIGJ1ZnN6ID0gMTsKLSAgICAgICAgZm9yIChwID0gUFlUSE9OUEFUSDsgKnA7IHArKykgewotICAgICAgICAgICAgaWYgKCpwID09IERFTElNKQotICAgICAgICAgICAgICAgIGJ1ZnN6Kys7IC8qIG51bWJlciBvZiBERUxJTSBwbHVzIG9uZSAqLwotICAgICAgICB9Ci0gICAgICAgIGJ1ZnN6ICo9IHN0cmxlbihweXRob25ob21lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBidWZzeiA9IDA7Ci0gICAgYnVmc3ogKz0gc3RybGVuKFBZVEhPTlBBVEgpICsgMTsKLSAgICBidWZzeiArPSBzdHJsZW4oYXJndjBfcGF0aCkgKyAxOwotICAgIGJ1ZnN6ICs9IHN0cmxlbih6aXBfcGF0aCkgKyAxOwotICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCi0gICAgICAgIGJ1ZnN6ICs9IHN0cmxlbihlbnZwYXRoKSArIDE7Ci0KLSAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBtYWxsb2MoYnVmc3opOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICAvKiBXZSBjYW4ndCBleGl0LCBzbyBwcmludCBhIHdhcm5pbmcgYW5kIGxpbXAgYWxvbmcgKi8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBtYWxsb2MgZHluYW1pYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIGlmIChlbnZwYXRoKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVzaW5nIGVudmlyb25tZW50ICRQWVRIT05QQVRILlxuIik7Ci0gICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBlbnZwYXRoOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyBwYXRoLlxuIik7Ci0gICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQWVRIT05QQVRIOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZW52cGF0aCkgewotICAgICAgICBzdHJjcHkoYnVmLCBlbnZwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSAgICBpZiAoemlwX3BhdGhbMF0pIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgemlwX3BhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotCi0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewotICAgICAgICBzdHJjcHkoYnVmLCBQWVRIT05QQVRIKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBjaGFyICpwID0gUFlUSE9OUEFUSDsKLSAgICAgICAgY2hhciAqcTsKLSAgICAgICAgc2l6ZV90IG47Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHEgPSBzdHJjaHIocCwgREVMSU0pOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBuID0gc3RybGVuKHApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG4gPSBxLXA7Ci0gICAgICAgICAgICBpZiAocFswXSA9PSAnLicgJiYgaXNfc2VwKHBbMV0pKSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgcHl0aG9uaG9tZSk7Ci0gICAgICAgICAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIG4tLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0cm5jcHkoYnVmLCBwLCBuKTsKLSAgICAgICAgICAgIGJ1ZiArPSBuOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICAgICAgcCA9IHErMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYXJndjBfcGF0aCkgewotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgYXJndjBfcGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICAqYnVmID0gJ1wwJzsKLX0KLQotCi0vKiBFeHRlcm5hbCBpbnRlcmZhY2UgKi8KLQotY2hhciAqCi1QeV9HZXRQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0gICAgcmV0dXJuIG1vZHVsZV9zZWFyY2hfcGF0aDsKLX0KLQotY2hhciAqCi1QeV9HZXRQcmVmaXgodm9pZCkKLXsKLSAgICBpZiAoIW1vZHVsZV9zZWFyY2hfcGF0aCkKLSAgICAgICAgY2FsY3VsYXRlX3BhdGgoKTsKLSAgICByZXR1cm4gcHJlZml4OwotfQotCi1jaGFyICoKLVB5X0dldEV4ZWNQcmVmaXgodm9pZCkKLXsKLSAgICByZXR1cm4gUHlfR2V0UHJlZml4KCk7Ci19Ci0KLWNoYXIgKgotUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0gICAgcmV0dXJuIHByb2dwYXRoOwotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L3B5Y29uZmlnLmggYi9QQy9vczJlbXgvcHljb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2MTA1YS4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvcHljb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi0jaWZuZGVmIFB5X0NPTkZJR19ICi0jZGVmaW5lIFB5X0NPTkZJR19ICi0KLSNlcnJvciAiUEVQIDExOiBPUy8yIGlzIG5vdyB1bnN1cHBvcnRlZCwgY29kZSB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNCIKLQotLyogY29uZmlnLmguCi0gKiBBdCBzb21lIHRpbWUgaW4gdGhlIHBhc3QsIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5L2Zyb20gY29uZmlndXJlLgotICogbm93IG1haW50YWluZWQgbWFudWFsbHkuCi0gKi8KLQotLyogYnVpbGQgZW52aXJvbm1lbnQgKi8KLSNkZWZpbmUgUExBVEZPUk0JIm9zMmVteCIKLSNkZWZpbmUgQ09NUElMRVIJIltFTVggR0NDICIgX19WRVJTSU9OX18gIl0iCi0jZGVmaW5lIFBZT1NfT1MyCTEKLSNkZWZpbmUgUFlDQ19HQ0MJMQotCi0vKiBkZWZhdWx0IGxvY2F0aW9uKHMpICovCi0jaWZuZGVmIFBSRUZJWAotI2RlZmluZSBQUkVGSVgJCSIiCi0jZW5kaWYKLSNpZm5kZWYgUFlUSE9OUEFUSAotI2RlZmluZSBQWVRIT05QQVRICSIuL0xpYjsuL0xpYi9wbGF0LSIgUExBVEZPUk0gXAotCQkJIjsuL0xpYi9saWItZHlubG9hZDsuL0xpYi9zaXRlLXBhY2thZ2VzIgotI2VuZGlmCi0KLS8qIERlYnVnZ2luZyAqLwotI2lmbmRlZiBQeV9ERUJVRwotLyojZGVmaW5lIFB5X0RFQlVHIDEqLwotI2VuZGlmCi0KLS8qIGlmIGJ1aWxkaW5nIGFuIGV4dGVuc2lvbiBvciB3cmFwcGVyIGV4ZWN1dGFibGUsCi0gKiBtYXJrIFB5dGhvbiBBUEkgc3ltYm9scyAiZXh0ZXJuIiBzbyB0aGF0IHN5bWJvbHMKLSAqIGltcG9ydGVkIGZyb20gdGhlIFB5dGhvbiBjb3JlIERMTCBhcmVuJ3QgZHVwbGljYXRlZC4KLSAqLwotI2lmZGVmIFB5X0JVSUxEX0NPUkUKLSMgIGRlZmluZSBQeUFQSV9GVU5DKFJUWVBFKQlSVFlQRQotI2Vsc2UKLSMgIGRlZmluZSBQeUFQSV9GVU5DKFJUWVBFKQlleHRlcm4gUlRZUEUKLSNlbmRpZgotI2RlZmluZSBQeUFQSV9EQVRBKFJUWVBFKQlleHRlcm4gUlRZUEUKLSNkZWZpbmUgUHlNT0RJTklUX0ZVTkMJdm9pZAotCi0vKiBVc2UgT1MvMiBmbGF2b3VyIG9mIHRocmVhZHMgKi8KLSNkZWZpbmUgV0lUSF9USFJFQUQJMQotI2RlZmluZSBPUzJfVEhSRUFEUwkxCi0KLS8qIFdlIHdhbnQgc29ja2V0cyAqLwotI2RlZmluZSBUQ1BJUFY0CQkxCi0jZGVmaW5lIFVTRV9TT0NLRVQJMQotI2RlZmluZSBzb2NrbGVuX3QJaW50Ci0jZGVmaW5lIEZEX1NFVFNJWkUJMTAyNAotCi0vKiBlbmFibGUgdGhlIFB5dGhvbiBvYmplY3QgYWxsb2NhdG9yICovCi0jZGVmaW5lCVdJVEhfUFlNQUxMT0MJMQotCi0vKiBlbmFibGUgdGhlIEdDIG1vZHVsZSAqLwotI2RlZmluZSBXSVRIX0NZQ0xFX0dDCTEKLQotLyogRGVmaW5lIGlmIHlvdSB3YW50IGRvY3VtZW50YXRpb24gc3RyaW5ncyBpbiBleHRlbnNpb24gbW9kdWxlcyAqLwotI2RlZmluZSBXSVRIX0RPQ19TVFJJTkdTIDEKLQotLyogVW5pY29kZSByZWxhdGVkICovCi0jZGVmaW5lIFBZX1VOSUNPREVfVFlQRQl3Y2hhcl90Ci0jZGVmaW5lIFB5X1VOSUNPREVfU0laRSBTSVpFT0ZfU0hPUlQKLQotLyogRU1YIGRlZmluZXMgc3NpemVfdCAqLwotI2RlZmluZSBIQVZFX1NTSVpFX1QJMQotCi0vKiBzeXN0ZW0gY2FwYWJpbGl0aWVzICovCi0jZGVmaW5lIEhBVkVfVFRZTkFNRQkxCi0jZGVmaW5lIEhBVkVfV0FJVAkxCi0jZGVmaW5lIEhBVkVfR0VURUdJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VURVVJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VUR0lEICAgICAxCi0jZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VUVUlEICAgICAxCi0jZGVmaW5lIEhBVkVfT1BFTkRJUiAgICAxCi0jZGVmaW5lIEhBVkVfUElQRSAgICAgICAxCi0jZGVmaW5lIEhBVkVfUE9QRU4gICAgICAxCi0jZGVmaW5lIEhBVkVfU1lTVEVNCTEKLSNkZWZpbmUgSEFWRV9UVFlOQU1FCTEKLSNkZWZpbmUgSEFWRV9EWU5BTUlDX0xPQURJTkcJMQotCi0vKiBpZiBwb3J0IG9mIEdEQk0gaW5zdGFsbGVkLCBpdCBpbmNsdWRlcyBOREJNIGVtdWxhdGlvbiAqLwotI2RlZmluZSBIQVZFX05EQk1fSCAxCi0KLS8qIG5lZWQgdGhpcyBmb3Igc3Bhd252IGNvZGUgaW4gcG9zaXhtb2R1bGUgKGNsb25lZCBmcm9tIFdJTjMyIGRlZiduKSAqLwotdHlwZWRlZiBsb25nIGludHB0cl90OwotCi0vKiB3ZSBkb24ndCBoYXZlIHRtX3pvbmUgYnV0IGRvIGhhdmUgdGhlIGV4dGVybmFsIGFycmF5IHR6bmFtZSAqLwotI2RlZmluZSBIQVZFX1RaTkFNRSAxCi0KLS8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkuICovCi0jZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCi0jZGVmaW5lIFNURENfSEVBREVSUyAxCi0KLS8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KLSNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKLQotLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBsb25nLiAqLwotI2RlZmluZSBIQVZFX0xPTkdfTE9ORyAxCi0KLS8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGZ1bmN0aW9uIHByb3RvdHlwZXMuICovCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAxCi0KLS8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIHZhcmlhYmxlIGxlbmd0aCBmdW5jdGlvbiBwcm90b3R5cGVzCi0gKiAoZS5nLiB2b2lkIGZwcmludGYoRklMRSAqLCBjaGFyICosIC4uLik7KSAqYW5kKiA8c3RkYXJnLmg+LgotICovCi0jZGVmaW5lIEhBVkVfU1REQVJHX1BST1RPVFlQRVMgMQotCi0vKiBEZWZpbmUgaWYgbWFsbG9jKDApIHJldHVybnMgYSBOVUxMIHBvaW50ZXIuICovCi0jZGVmaW5lIE1BTExPQ19aRVJPX1JFVFVSTlNfTlVMTCAxCi0KLS8qIERlZmluZSB0byBmb3JjZSB1c2Ugb2YgdGhyZWFkLXNhZmUgZXJybm8sIGhfZXJybm8sIGFuZCBvdGhlciBmdW5jdGlvbnMuICovCi0jZGVmaW5lIF9SRUVOVFJBTlQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvc2VsZWN0Lmg+IGFuZCA8c3lzL3RpbWUuaD4KLSAqICh3aGljaCB5b3UgY2FuJ3Qgb24gU0NPIE9EVCAzLjApLgotICovCi0jZGVmaW5lIFNZU19TRUxFQ1RfV0lUSF9TWVNfVElNRSAxCi0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gb2ZmX3QuICovCi0jZGVmaW5lIFNJWkVPRl9PRkZfVCA0Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gdGltZV90LiAqLwotI2RlZmluZSBTSVpFT0ZfVElNRV9UIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHNob3J0LiAqLwotI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgaW50LiAqLwotI2RlZmluZSBTSVpFT0ZfSU5UIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIGxvbmcuICovCi0jZGVmaW5lIFNJWkVPRl9MT05HIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIGxvbmcgbG9uZy4gKi8KLSNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSB2b2lkICouICovCi0jZGVmaW5lIFNJWkVPRl9WT0lEX1AgNAotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgc2l6ZV90LiAqLwotI2RlZmluZSBTSVpFT0ZfU0laRV9UIDQKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9BTEFSTSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgY2xvY2sgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfQ0xPQ0sgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGR1cDIgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRFVQMiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZXhlY3YgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRVhFQ1YgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNwYXdudiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TUEFXTlYgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZsb2NrIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZMT0NLIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmb3JrIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZPUksgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZzeW5jIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZTWU5DIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmdGltZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GVElNRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZnRydW5jYXRlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0Y3dkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVENXRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGVlcm5hbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUEVFUk5BTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUEdSUCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGlkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFBJRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cHdlbnQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUFdFTlQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHRpbWVvZmRheSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHdkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFdEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBoeXBvdCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9IWVBPVCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUga2lsbCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9LSUxMIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBtZW1tb3ZlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01FTU1PVkUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIG1rdGltZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NS1RJTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHBhdXNlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BBVVNFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwdXRlbnYgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfUFVURU5WIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZWxlY3QgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VMRUNUIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRnaWQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUR0lEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRsb2NhbGUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRwZ2lkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFBHSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHVpZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRVRVSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHZidWYgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUVkJVRiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2lnYWN0aW9uIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NJR0FDVElPTiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyZXJyb3IgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSRVJST1IgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmZ0aW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUkZUSU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0Y2dldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVENHRVRQR1JQIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0Y3NldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVENTRVRQR1JQIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0bXBmaWxlIGZ1bmN0aW9uLiAgKi8KLSNkZWZpbmUgSEFWRV9UTVBGSUxFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0aW1lcyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9USU1FUyAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdHJ1bmNhdGUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVFJVTkNBVEUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHVuYW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1VOQU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB3YWl0cGlkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1dBSVRQSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxjb25pby5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0NPTklPX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZWN0Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfRElSRUNUX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0RJUkVOVF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfRVJSTk9fSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0ZDTlRMX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0lPX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmN1cnNlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9OQ1VSU0VTX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfUFJPQ0VTU19IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX0ZJTEVfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfUEFSQU1fSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1RJTUVTX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdW4uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1VOX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdXRzbmFtZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVVRTTkFNRV9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHV0aW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1VUSU1FX0ggMQotCi0vKiBFTVggaGFzIGFuIHNucHJpbnRmKCkuICovCi0jZGVmaW5lIEhBVkVfU05QUklOVEYgMQotCi0jZW5kaWYgLyogIVB5X0NPTkZJR19IICovCi0KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9weXRob24zMy5kZWYgYi9QQy9vczJlbXgvcHl0aG9uMzMuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTY3MjZiLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9weXRob24zMy5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwxMzE0ICswLDAgQEAKLUxJQlJBUlkgcHl0aG9uMzMgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSAKLURFU0NSSVBUSU9OICJQeXRob24gMi42IENvcmUgRExMIiAKLVBST1RNT0RFIAotREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgCi1FWFBPUlRTIAotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29uZmlnKQotICAiX1B5SW1wb3J0X0luaXR0YWIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkbGZjbikKLTsgICJkbG9wZW4iCi07ICAiZGxzeW0iCi07ICAiZGxjbG9zZSIKLTsgICJkbGVycm9yIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0cGF0aHApCi0gICJQeV9HZXRQcm9ncmFtRnVsbFBhdGgiCi0gICJQeV9HZXRQcmVmaXgiCi0gICJQeV9HZXRFeGVjUHJlZml4IgotICAiUHlfR2V0UGF0aCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldGJ1aWxkaW5mbykKLSAgIlB5X0dldEJ1aWxkSW5mbyIKLSAgIl9QeV9zdm52ZXJzaW9uIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWFpbikKLSAgIlB5X01haW4iCi0gICJQeV9HZXRBcmdjQXJndiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFjY2VsZXIpCi0gICJQeUdyYW1tYXJfQWRkQWNjZWxlcmF0b3JzIgotICAiUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdyYW1tYXIxKQotICAiUHlHcmFtbWFyX0ZpbmRERkEiCi0gICJQeUdyYW1tYXJfTGFiZWxSZXByIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobGlzdG5vZGUpCi0gICJQeU5vZGVfTGlzdFRyZWUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihub2RlKQotICAiUHlOb2RlX05ldyIKLSAgIlB5Tm9kZV9BZGRDaGlsZCIKLSAgIlB5Tm9kZV9GcmVlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocGFyc2VyKQotICAiUHlQYXJzZXJfQWRkVG9rZW4iCi0gICJQeVBhcnNlcl9OZXciCi0gICJQeVBhcnNlcl9EZWxldGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihwYXJzZXRvaykKLSAgIlB5UGFyc2VyX1BhcnNlU3RyaW5nIgotICAiUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lIgotICAiUHlQYXJzZXJfUGFyc2VGaWxlIgotICAiUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MiCi0gICJQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYml0c2V0KQotICAiX1B5X25ld2JpdHNldCIKLSAgIl9QeV9kZWxiaXRzZXQiCi0gICJfUHlfYWRkYml0IgotICAiX1B5X3NhbWViaXRzZXQiCi0gICJfUHlfbWVyZ2ViaXRzZXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtZXRhZ3JhbW1hcikKLSAgIl9QeV9tZXRhX2dyYW1tYXIiCi0gICJQeV9tZXRhX2dyYW1tYXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0b2tlbml6ZXIpCi0gICJQeVRva2VuX09uZUNoYXIiCi0gICJQeVRva2VuX1R3b0NoYXJzIgotICAiUHlUb2tlbl9UaHJlZUNoYXJzIgotICAiUHlUb2tlbml6ZXJfRnJvbVN0cmluZyIKLSAgIlB5VG9rZW5pemVyX0ZyZWUiCi0gICJQeVRva2VuaXplcl9Gcm9tRmlsZSIKLSAgIlB5VG9rZW5pemVyX0dldCIKLSAgIl9QeVBhcnNlcl9Ub2tlbk5hbWVzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobXlyZWFkbGluZSkKLSAgIl9QeU9TX1JlYWRsaW5lVFN0YXRlIgotICAiUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciIKLSAgIlB5T1NfU3RkaW9SZWFkbGluZSIKLSAgIlB5T1NfUmVhZGxpbmUiCi0gICJQeU9TX0lucHV0SG9vayIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFic3RyYWN0KQotICAiX1B5T2JqZWN0X0xlbmd0aEhpbnQiCi0gICJQeU1hcHBpbmdfU2l6ZSIKLSAgIlB5T2JqZWN0X0NhbGxNZXRob2QiCi0gICJQeU9iamVjdF9HZXRJdGVtIgotICAiUHlTZXF1ZW5jZV9HZXRJdGVtIgotICAiUHlPYmplY3RfU2V0SXRlbSIKLSAgIlB5U2VxdWVuY2VfU2V0SXRlbSIKLSAgIlB5T2JqZWN0X0RlbEl0ZW0iCi0gICJQeVNlcXVlbmNlX0RlbEl0ZW0iCi0gICJQeU51bWJlcl9NdWx0aXBseSIKLSAgIlB5TnVtYmVyX0luUGxhY2VBZGQiCi0gICJQeU51bWJlcl9JblBsYWNlTXVsdGlwbHkiCi0gICJQeU51bWJlcl9JbnQiCi0gICJQeU51bWJlcl9Mb25nIgotICAiUHlOdW1iZXJfRmxvYXQiCi0gICJQeVNlcXVlbmNlX0NvbmNhdCIKLSAgIlB5U2VxdWVuY2VfUmVwZWF0IgotICAiUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0IgotICAiUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0IgotICAiUHlTZXF1ZW5jZV9HZXRTbGljZSIKLSAgIlB5U2VxdWVuY2VfU2V0U2xpY2UiCi0gICJQeVNlcXVlbmNlX1R1cGxlIgotICAiUHlPYmplY3RfR2V0SXRlciIKLSAgIlB5SXRlcl9OZXh0IgotICAiUHlTZXF1ZW5jZV9GYXN0IgotICAiX1B5U2VxdWVuY2VfSXRlclNlYXJjaCIKLSAgIlB5T2JqZWN0X0NhbGxGdW5jdGlvbiIKLSAgIl9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQiCi0gICJfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVCIKLSAgIlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzIgotICAiUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyIKLSAgIlB5T2JqZWN0X0NtcCIKLSAgIlB5T2JqZWN0X0NhbGwiCi0gICJQeU9iamVjdF9DYWxsT2JqZWN0IgotICAiUHlPYmplY3RfVHlwZSIKLSAgIlB5T2JqZWN0X1NpemUiCi0gICJQeU9iamVjdF9MZW5ndGgiCi0gICJQeU9iamVjdF9EZWxJdGVtU3RyaW5nIgotICAiUHlPYmplY3RfQXNDaGFyQnVmZmVyIgotICAiUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyIgotICAiUHlPYmplY3RfQXNSZWFkQnVmZmVyIgotICAiUHlPYmplY3RfQXNXcml0ZUJ1ZmZlciIKLSAgIlB5TnVtYmVyX0NoZWNrIgotICAiUHlOdW1iZXJfQWRkIgotICAiUHlOdW1iZXJfU3VidHJhY3QiCi0gICJQeU51bWJlcl9EaXZpZGUiCi0gICJQeU51bWJlcl9GbG9vckRpdmlkZSIKLSAgIlB5TnVtYmVyX1RydWVEaXZpZGUiCi0gICJQeU51bWJlcl9SZW1haW5kZXIiCi0gICJQeU51bWJlcl9EaXZtb2QiCi0gICJQeU51bWJlcl9Qb3dlciIKLSAgIlB5TnVtYmVyX05lZ2F0aXZlIgotICAiUHlOdW1iZXJfUG9zaXRpdmUiCi0gICJQeU51bWJlcl9BYnNvbHV0ZSIKLSAgIlB5TnVtYmVyX0ludmVydCIKLSAgIlB5TnVtYmVyX0xzaGlmdCIKLSAgIlB5TnVtYmVyX1JzaGlmdCIKLSAgIlB5TnVtYmVyX0FuZCIKLSAgIlB5TnVtYmVyX1hvciIKLSAgIlB5TnVtYmVyX09yIgotICAiUHlOdW1iZXJfSW5kZXgiCi0gICJQeU51bWJlcl9JblBsYWNlU3VidHJhY3QiCi0gICJQeU51bWJlcl9JblBsYWNlRGl2aWRlIgotICAiUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlIgotICAiUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUiCi0gICJQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyIgotICAiUHlOdW1iZXJfSW5QbGFjZVBvd2VyIgotICAiUHlOdW1iZXJfSW5QbGFjZUxzaGlmdCIKLSAgIlB5TnVtYmVyX0luUGxhY2VSc2hpZnQiCi0gICJQeU51bWJlcl9JblBsYWNlQW5kIgotICAiUHlOdW1iZXJfSW5QbGFjZVhvciIKLSAgIlB5TnVtYmVyX0luUGxhY2VPciIKLSAgIlB5U2VxdWVuY2VfQ2hlY2siCi0gICJQeVNlcXVlbmNlX1NpemUiCi0gICJQeVNlcXVlbmNlX0xlbmd0aCIKLSAgIlB5U2VxdWVuY2VfRGVsU2xpY2UiCi0gICJQeVNlcXVlbmNlX0xpc3QiCi0gICJQeVNlcXVlbmNlX0NvdW50IgotICAiUHlTZXF1ZW5jZV9Db250YWlucyIKLSAgIlB5U2VxdWVuY2VfSW4iCi0gICJQeVNlcXVlbmNlX0luZGV4IgotICAiUHlNYXBwaW5nX0NoZWNrIgotICAiUHlNYXBwaW5nX0xlbmd0aCIKLSAgIlB5TWFwcGluZ19IYXNLZXlTdHJpbmciCi0gICJQeU1hcHBpbmdfSGFzS2V5IgotICAiUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmciCi0gICJQeU1hcHBpbmdfU2V0SXRlbVN0cmluZyIKLSAgIlB5T2JqZWN0X0lzSW5zdGFuY2UiCi0gICJQeU9iamVjdF9Jc1N1YmNsYXNzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYm9vbG9iamVjdCkKLSAgIlB5Qm9vbF9Gcm9tTG9uZyIKLSAgIlB5Qm9vbF9UeXBlIgotICAiX1B5X1plcm9TdHJ1Y3QiCi0gICJfUHlfVHJ1ZVN0cnVjdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJ1ZmZlcm9iamVjdCkKLSAgIlB5QnVmZmVyX0Zyb21PYmplY3QiCi0gICJQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlT2JqZWN0IgotICAiUHlCdWZmZXJfRnJvbU1lbW9yeSIKLSAgIlB5QnVmZmVyX0Zyb21SZWFkV3JpdGVNZW1vcnkiCi0gICJQeUJ1ZmZlcl9OZXciCi0gICJQeUJ1ZmZlcl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2VsbG9iamVjdCkKLSAgIlB5Q2VsbF9OZXciCi0gICJQeUNlbGxfR2V0IgotICAiUHlDZWxsX1NldCIKLSAgIlB5Q2VsbF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2xhc3NvYmplY3QpCi0gICJQeUNsYXNzX05ldyIKLSAgIlB5Q2xhc3NfSXNTdWJjbGFzcyIKLSAgIlB5SW5zdGFuY2VfTmV3IgotICAiUHlJbnN0YW5jZV9OZXdSYXciCi0gICJQeU1ldGhvZF9OZXciCi0gICJQeU1ldGhvZF9GdW5jdGlvbiIKLSAgIlB5TWV0aG9kX1NlbGYiCi0gICJQeU1ldGhvZF9DbGFzcyIKLSAgIl9QeUluc3RhbmNlX0xvb2t1cCIKLSAgIlB5TWV0aG9kX0ZpbmkiCi0gICJQeUNsYXNzX1R5cGUiCi0gICJQeUluc3RhbmNlX1R5cGUiCi0gICJQeU1ldGhvZF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2Fwc3VsZSkKLSAgIlB5Q2Fwc3VsZV9HZXRDb250ZXh0IgotICAiUHlDYXBzdWxlX0dldERlc3RydWN0b3IiCi0gICJQeUNhcHN1bGVfR2V0TmFtZSIKLSAgIlB5Q2Fwc3VsZV9HZXRQb2ludGVyIgotICAiUHlDYXBzdWxlX0ltcG9ydCIKLSAgIlB5Q2Fwc3VsZV9Jc1ZhbGlkIgotICAiUHlDYXBzdWxlX05ldyIKLSAgIlB5Q2Fwc3VsZV9TZXRDb250ZXh0IgotICAiUHlDYXBzdWxlX1NldERlc3RydWN0b3IiCi0gICJQeUNhcHN1bGVfU2V0TmFtZSIKLSAgIlB5Q2Fwc3VsZV9TZXRQb2ludGVyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29iamVjdCkKLSAgIlB5Q09iamVjdF9Gcm9tVm9pZFB0ciIKLSAgIlB5Q09iamVjdF9Gcm9tVm9pZFB0ckFuZERlc2MiCi0gICJQeUNPYmplY3RfQXNWb2lkUHRyIgotICAiUHlDT2JqZWN0X0dldERlc2MiCi0gICJQeUNPYmplY3RfSW1wb3J0IgotICAiUHlDT2JqZWN0X1NldFZvaWRQdHIiCi0gICJQeUNPYmplY3RfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvZGVvYmplY3QpCi0gICJQeUNvZGVfTmV3IgotICAiUHlDb2RlX0FkZHIyTGluZSIKLSAgIlB5Q29kZV9DaGVja0xpbmVOdW1iZXIiCi0gICJQeUNvZGVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvbXBsZXhvYmplY3QpCi0gICJfUHlfY19wb3ciCi0gICJfUHlfY19zdW0iCi0gICJfUHlfY19kaWZmIgotICAiX1B5X2NfbmVnIgotICAiX1B5X2NfcHJvZCIKLSAgIl9QeV9jX3F1b3QiCi0gICJQeUNvbXBsZXhfRnJvbUNDb21wbGV4IgotICAiUHlDb21wbGV4X0Zyb21Eb3VibGVzIgotICAiUHlDb21wbGV4X1JlYWxBc0RvdWJsZSIKLSAgIlB5Q29tcGxleF9JbWFnQXNEb3VibGUiCi0gICJQeUNvbXBsZXhfQXNDQ29tcGxleCIKLSAgIlB5Q29tcGxleF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGVzY3JvYmplY3QpCi0gICJQeVdyYXBwZXJfTmV3IgotICAiUHlEZXNjcl9OZXdNZXRob2QiCi0gICJQeURlc2NyX05ld0NsYXNzTWV0aG9kIgotICAiUHlEZXNjcl9OZXdNZW1iZXIiCi0gICJQeURlc2NyX05ld0dldFNldCIKLSAgIlB5RGVzY3JfTmV3V3JhcHBlciIKLSAgIlB5RGljdFByb3h5X05ldyIKLSAgIlB5V3JhcHBlckRlc2NyX1R5cGUiCi0gICJQeVByb3BlcnR5X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkaWN0b2JqZWN0KQotICAiUHlEaWN0X05ldyIKLSAgIlB5RGljdF9HZXRJdGVtIgotICAiUHlEaWN0X1NldEl0ZW0iCi0gICJQeURpY3RfRGVsSXRlbSIKLSAgIlB5RGljdF9DbGVhciIKLSAgIlB5RGljdF9NZXJnZUZyb21TZXEyIgotICAiUHlEaWN0X01lcmdlIgotICAiUHlEaWN0X0tleXMiCi0gICJQeURpY3RfVmFsdWVzIgotICAiUHlEaWN0X0NvbnRhaW5zIgotICAiUHlEaWN0X05leHQiCi0gICJQeURpY3RfSXRlbXMiCi0gICJQeURpY3RfU2l6ZSIKLSAgIlB5RGljdF9Db3B5IgotICAiUHlEaWN0X1VwZGF0ZSIKLSAgIlB5RGljdF9HZXRJdGVtU3RyaW5nIgotICAiUHlEaWN0X1NldEl0ZW1TdHJpbmciCi0gICJQeURpY3RfRGVsSXRlbVN0cmluZyIKLSAgIlB5RGljdF9UeXBlIgotICAiUHlEaWN0SXRlcktleV9UeXBlIgotICAiUHlEaWN0SXRlclZhbHVlX1R5cGUiCi0gICJQeURpY3RJdGVySXRlbV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZW51bW9iamVjdCkKLSAgIlB5RW51bV9UeXBlIgotICAiUHlSZXZlcnNlZF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZmlsZW9iamVjdCkKLSAgIlB5RmlsZV9Gcm9tU3RyaW5nIgotICAiUHlfVW5pdmVyc2FsTmV3bGluZUZyZWFkIgotICAiUHlGaWxlX0dldExpbmUiCi0gICJQeUZpbGVfU29mdFNwYWNlIgotICAiUHlGaWxlX1dyaXRlT2JqZWN0IgotICAiUHlGaWxlX1dyaXRlU3RyaW5nIgotICAiUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvciIKLSAgIlB5X1VuaXZlcnNhbE5ld2xpbmVGZ2V0cyIKLSAgIlB5RmlsZV9TZXRCdWZTaXplIgotICAiUHlGaWxlX1NldEVuY29kaW5nIgotICAiUHlGaWxlX0Zyb21GaWxlIgotICAiUHlGaWxlX0FzRmlsZSIKLSAgIlB5RmlsZV9OYW1lIgotICAiUHlGaWxlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmbG9hdG9iamVjdCkKLSAgIlB5RmxvYXRfRnJvbVN0cmluZyIKLSAgIlB5RmxvYXRfQXNEb3VibGUiCi0gICJQeUZsb2F0X0ZpbmkiCi0gICJfUHlGbG9hdF9QYWNrNCIKLSAgIl9QeUZsb2F0X1BhY2s4IgotICAiX1B5RmxvYXRfVW5wYWNrNCIKLSAgIl9QeUZsb2F0X1VucGFjazgiCi0gICJQeUZsb2F0X0Zyb21Eb3VibGUiCi0gICJQeUZsb2F0X0FzUmVwclN0cmluZyIKLSAgIlB5RmxvYXRfQXNTdHJpbmciCi0gICJfUHlGbG9hdF9Jbml0IgotICAiUHlGbG9hdF9Bc1N0cmluZ0V4IgotICAiUHlGbG9hdF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZnJhbWVvYmplY3QpCi0gICJQeUZyYW1lX05ldyIKLSAgIlB5RnJhbWVfRmFzdFRvTG9jYWxzIgotICAiUHlGcmFtZV9Mb2NhbHNUb0Zhc3QiCi0gICJfUHlGcmFtZV9Jbml0IgotICAiUHlGcmFtZV9GaW5pIgotICAiUHlGcmFtZV9CbG9ja1NldHVwIgotICAiUHlGcmFtZV9CbG9ja1BvcCIKLSAgIlB5RnJhbWVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZ1bmNvYmplY3QpCi0gICJQeUZ1bmN0aW9uX05ldyIKLSAgIlB5RnVuY3Rpb25fR2V0Q29kZSIKLSAgIlB5RnVuY3Rpb25fR2V0R2xvYmFscyIKLSAgIlB5RnVuY3Rpb25fR2V0TW9kdWxlIgotICAiUHlGdW5jdGlvbl9HZXREZWZhdWx0cyIKLSAgIlB5RnVuY3Rpb25fU2V0RGVmYXVsdHMiCi0gICJQeUZ1bmN0aW9uX0dldENsb3N1cmUiCi0gICJQeUZ1bmN0aW9uX1NldENsb3N1cmUiCi0gICJQeUNsYXNzTWV0aG9kX05ldyIKLSAgIlB5U3RhdGljTWV0aG9kX05ldyIKLSAgIlB5RnVuY3Rpb25fVHlwZSIKLSAgIlB5Q2xhc3NNZXRob2RfVHlwZSIKLSAgIlB5U3RhdGljTWV0aG9kX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZW5vYmplY3QpCi0gICJQeUdlbl9OZXciCi0gICJQeUdlbl9OZWVkc0ZpbmFsaXppbmciCi0gICJQeUdlbl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaW50b2JqZWN0KQotICAiUHlJbnRfQXNMb25nIgotICAiUHlJbnRfQXNVbnNpZ25lZExvbmdNYXNrIgotICAiUHlJbnRfQXNVbnNpZ25lZExvbmdMb25nTWFzayIKLSAgIlB5SW50X0Zyb21TdHJpbmciCi0gICJQeUludF9Bc1NzaXplX3QiCi0gICJQeUludF9GaW5pIgotICAiUHlJbnRfRnJvbVVuaWNvZGUiCi0gICJQeUludF9Gcm9tTG9uZyIKLSAgIlB5SW50X0Zyb21TaXplX3QiCi0gICJQeUludF9Gcm9tU3NpemVfdCIKLSAgIlB5SW50X0dldE1heCIKLSAgIl9QeUludF9Jbml0IgotICAiUHlJbnRfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGl0ZXJvYmplY3QpCi0gICJQeVNlcUl0ZXJfTmV3IgotICAiUHlDYWxsSXRlcl9OZXciCi0gICJQeVNlcUl0ZXJfVHlwZSIKLSAgIlB5Q2FsbEl0ZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGxpc3RvYmplY3QpCi0gICJQeUxpc3RfTmV3IgotICAiUHlMaXN0X0FwcGVuZCIKLSAgIlB5TGlzdF9TaXplIgotICAiUHlMaXN0X0dldEl0ZW0iCi0gICJQeUxpc3RfU2V0SXRlbSIKLSAgIlB5TGlzdF9JbnNlcnQiCi0gICJQeUxpc3RfR2V0U2xpY2UiCi0gICJQeUxpc3RfU2V0U2xpY2UiCi0gICJQeUxpc3RfU29ydCIKLSAgIlB5TGlzdF9SZXZlcnNlIgotICAiUHlMaXN0X0FzVHVwbGUiCi0gICJfUHlMaXN0X0V4dGVuZCIKLSAgIlB5TGlzdF9GaW5pIgotICAiUHlMaXN0X1R5cGUiCi0gICJQeUxpc3RJdGVyX1R5cGUiCi0gICJQeUxpc3RSZXZJdGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihsb25nb2JqZWN0KQotICAiUHlMb25nX0Zyb21Eb3VibGUiCi0gICJQeUxvbmdfQXNMb25nIgotICAiX1B5TG9uZ19Bc1NzaXplX3QiCi0gICJQeUxvbmdfQXNVbnNpZ25lZExvbmciCi0gICJfUHlMb25nX0Zyb21CeXRlQXJyYXkiCi0gICJfUHlMb25nX0FzQnl0ZUFycmF5IgotICAiUHlMb25nX0FzRG91YmxlIgotICAiUHlMb25nX0Zyb21Mb25nTG9uZyIKLSAgIlB5TG9uZ19Bc0xvbmdMb25nIgotICAiUHlMb25nX0Zyb21TdHJpbmciCi0gICJQeUxvbmdfRnJvbUxvbmciCi0gICJQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyIKLSAgIlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2siCi0gICJfUHlMb25nX0Zyb21TaXplX3QiCi0gICJfUHlMb25nX0Zyb21Tc2l6ZV90IgotICAiX1B5TG9uZ19Bc1NjYWxlZERvdWJsZSIKLSAgIlB5TG9uZ19Gcm9tVm9pZFB0ciIKLSAgIlB5TG9uZ19Bc1ZvaWRQdHIiCi0gICJQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmciCi0gICJQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nIgotICAiUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2siCi0gICJQeUxvbmdfRnJvbVVuaWNvZGUiCi0gICJfUHlMb25nX1NpZ24iCi0gICJfUHlMb25nX051bUJpdHMiCi0gICJfUHlMb25nX05ldyIKLSAgIl9QeUxvbmdfQ29weSIKLSAgIlB5TG9uZ19UeXBlIgotICAiX1B5TG9uZ19EaWdpdFZhbHVlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWV0aG9kb2JqZWN0KQotICAiUHlDRnVuY3Rpb25fQ2FsbCIKLSAgIlB5X0ZpbmRNZXRob2RJbkNoYWluIgotICAiUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24iCi0gICJQeUNGdW5jdGlvbl9HZXRTZWxmIgotICAiUHlDRnVuY3Rpb25fR2V0RmxhZ3MiCi0gICJQeV9GaW5kTWV0aG9kIgotICAiUHlDRnVuY3Rpb25fTmV3RXgiCi0gICJQeUNGdW5jdGlvbl9GaW5pIgotICAiUHlDRnVuY3Rpb25fTmV3IgotICAiUHlDRnVuY3Rpb25fVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1vZHVsZW9iamVjdCkKLSAgIlB5TW9kdWxlX05ldyIKLSAgIl9QeU1vZHVsZV9DbGVhciIKLSAgIlB5TW9kdWxlX0dldERpY3QiCi0gICJQeU1vZHVsZV9HZXROYW1lIgotICAiUHlNb2R1bGVfR2V0RmlsZW5hbWUiCi0gICJQeU1vZHVsZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob2JqZWN0KQotICAiUHlfRGl2aXNpb25XYXJuaW5nRmxhZyIKLSAgIlB5T2JqZWN0X1N0ciIKLSAgIlB5T2JqZWN0X1JlcHIiCi0gICJfUHlPYmplY3RfU3RyIgotICAiUHlPYmplY3RfVW5pY29kZSIKLSAgIlB5T2JqZWN0X0dldEF0dHIiCi0gICJQeU9iamVjdF9Jc1RydWUiCi0gICJQeU51bWJlcl9Db2VyY2VFeCIKLSAgIlB5T2JqZWN0X0NvbXBhcmUiCi0gICJQeU9iamVjdF9SaWNoQ29tcGFyZSIKLSAgIl9QeV9IYXNoRG91YmxlIgotICAiUHlPYmplY3RfSGFzaCIKLSAgIlB5T2JqZWN0X1NldEF0dHIiCi0gICJQeU9iamVjdF9HZW5lcmljR2V0QXR0ciIKLSAgIlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyIgotICAiUHlDYWxsYWJsZV9DaGVjayIKLSAgIlB5T2JqZWN0X0RpciIKLSAgIlB5TWVtX01hbGxvYyIKLSAgIlB5TWVtX1JlYWxsb2MiCi0gICJQeU1lbV9GcmVlIgotICAiUHlPYmplY3RfUHJpbnQiCi0gICJfUHlPYmplY3RfRHVtcCIKLSAgIlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCIKLSAgIlB5T2JqZWN0X0dldEF0dHJTdHJpbmciCi0gICJQeU9iamVjdF9TZXRBdHRyU3RyaW5nIgotICAiUHlPYmplY3RfSGFzQXR0clN0cmluZyIKLSAgIlB5T2JqZWN0X0hhc0F0dHIiCi0gICJfUHlPYmplY3RfR2V0RGljdFB0ciIKLSAgIlB5T2JqZWN0X1NlbGZJdGVyIgotICAiUHlPYmplY3RfTm90IgotICAiUHlOdW1iZXJfQ29lcmNlIgotICAiUHlfUmVwckVudGVyIgotICAiUHlfUmVwckxlYXZlIgotICAiX1B5X0hhc2hQb2ludGVyIgotICAiUHlfSW5jUmVmIgotICAiUHlfRGVjUmVmIgotICAiX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QiCi0gICJfUHlUcmFzaF9kZXN0cm95X2NoYWluIgotICAiUHlPYmplY3RfSW5pdCIKLSAgIlB5T2JqZWN0X0luaXRWYXIiCi0gICJfUHlPYmplY3RfTmV3IgotICAiX1B5T2JqZWN0X05ld1ZhciIKLSAgIl9QeU9iamVjdF9EZWwiCi0gICJfUHlfUmVhZHlUeXBlcyIKLSAgIl9QeV9Td2FwcGVkT3AiCi0gICJfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QiCi0gICJfUHlfTm9uZVN0cnVjdCIKLSAgIl9QeV9jb2JqZWN0X2hhY2siCi0gICJfUHlfYWJzdHJhY3RfaGFjayIKLSAgIl9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIgotICAiX1B5VHJhc2hfZGVsZXRlX2xhdGVyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob2JtYWxsb2MpCi0gICJQeU9iamVjdF9NYWxsb2MiCi0gICJQeU9iamVjdF9GcmVlIgotICAiUHlPYmplY3RfUmVhbGxvYyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHJhbmdlb2JqZWN0KQotICAiUHlSYW5nZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2V0b2JqZWN0KQotICAiUHlTZXRfUG9wIgotICAiUHlTZXRfTmV3IgotICAiUHlGcm96ZW5TZXRfTmV3IgotICAiUHlTZXRfU2l6ZSIKLSAgIlB5U2V0X0NsZWFyIgotICAiUHlTZXRfQ29udGFpbnMiCi0gICJQeVNldF9EaXNjYXJkIgotICAiUHlTZXRfQWRkIgotICAiX1B5U2V0X05leHQiCi0gICJfUHlTZXRfVXBkYXRlIgotICAiUHlTZXRfRmluaSIKLSAgIlB5U2V0X1R5cGUiCi0gICJQeUZyb3plblNldF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2xpY2VvYmplY3QpCi0gICJfUHlTbGljZV9Gcm9tSW5kaWNlcyIKLSAgIlB5U2xpY2VfR2V0SW5kaWNlcyIKLSAgIlB5U2xpY2VfR2V0SW5kaWNlc0V4IgotICAiUHlTbGljZV9OZXciCi0gICJfUHlfRWxsaXBzaXNPYmplY3QiCi0gICJQeVNsaWNlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzdHJpbmdvYmplY3QpCi0gICJQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSIKLSAgIlB5U3RyaW5nX0ludGVybkluUGxhY2UiCi0gICJQeVN0cmluZ19Gcm9tU3RyaW5nIgotICAiUHlTdHJpbmdfRnJvbUZvcm1hdFYiCi0gICJQeVN0cmluZ19Bc1N0cmluZyIKLSAgIl9QeVN0cmluZ19SZXNpemUiCi0gICJQeVN0cmluZ19Gcm9tRm9ybWF0IgotICAiUHlTdHJpbmdfQXNEZWNvZGVkU3RyaW5nIgotICAiUHlTdHJpbmdfQXNFbmNvZGVkU3RyaW5nIgotICAiUHlTdHJpbmdfRGVjb2RlRXNjYXBlIgotICAiUHlTdHJpbmdfUmVwciIKLSAgIlB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZSIKLSAgIl9QeVN0cmluZ19Gb3JtYXRMb25nIgotICAiUHlTdHJpbmdfRm9ybWF0IgotICAiX1B5X1JlbGVhc2VJbnRlcm5lZFN0cmluZ3MiCi0gICJQeVN0cmluZ19TaXplIgotICAiUHlTdHJpbmdfQ29uY2F0IgotICAiUHlTdHJpbmdfQ29uY2F0QW5kRGVsIgotICAiX1B5U3RyaW5nX0VxIgotICAiUHlTdHJpbmdfSW50ZXJuSW1tb3J0YWwiCi0gICJQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nIgotICAiX1B5U3RyaW5nX0pvaW4iCi0gICJQeVN0cmluZ19EZWNvZGUiCi0gICJQeVN0cmluZ19FbmNvZGUiCi0gICJQeVN0cmluZ19Bc0VuY29kZWRPYmplY3QiCi0gICJQeVN0cmluZ19Bc0RlY29kZWRPYmplY3QiCi0gICJQeVN0cmluZ19GaW5pIgotICAiUHlTdHJpbmdfVHlwZSIKLSAgIlB5QmFzZVN0cmluZ19UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3RydWN0c2VxKQotICAiUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSIKLSAgIlB5U3RydWN0U2VxdWVuY2VfTmV3IgotICAiUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0dXBsZW9iamVjdCkKLSAgIlB5VHVwbGVfTmV3IgotICAiUHlUdXBsZV9QYWNrIgotICAiX1B5VHVwbGVfUmVzaXplIgotICAiUHlUdXBsZV9TaXplIgotICAiUHlUdXBsZV9HZXRJdGVtIgotICAiUHlUdXBsZV9TZXRJdGVtIgotICAiUHlUdXBsZV9HZXRTbGljZSIKLSAgIlB5VHVwbGVfRmluaSIKLSAgIlB5VHVwbGVfVHlwZSIKLSAgIlB5VHVwbGVJdGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0eXBlb2JqZWN0KQotICAiUHlUeXBlX0lzU3VidHlwZSIKLSAgIl9QeVR5cGVfTG9va3VwIgotICAiUHlUeXBlX1JlYWR5IgotICAiUHlUeXBlX0dlbmVyaWNBbGxvYyIKLSAgIl9QeU9iamVjdF9TbG90Q29tcGFyZSIKLSAgIlB5VHlwZV9HZW5lcmljTmV3IgotICAiUHlUeXBlX1R5cGUiCi0gICJQeUJhc2VPYmplY3RfVHlwZSIKLSAgIlB5U3VwZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHVuaWNvZGVvYmplY3QpCi0gICJQeVVuaWNvZGVVQ1MyX1Jlc2l6ZSIKLSAgIlB5VW5pY29kZVVDUzJfRnJvbU9yZGluYWwiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21PYmplY3QiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21FbmNvZGVkT2JqZWN0IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldERlZmF1bHRFbmNvZGluZyIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOCIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlTGF0aW4xIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVBU0NJSSIKLSAgIlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9Bc1VURjhTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0FzTGF0aW4xU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9Bc0FTQ0lJU3RyaW5nIgotICAiUHlVbmljb2RlX0RlY29kZVVURjciCi0gICJQeVVuaWNvZGVfRW5jb2RlVVRGNyIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOFN0YXRlZnVsIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVVEY4IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNlN0YXRlZnVsIgotICAiUHlVbmljb2RlVUNTMl9Bc1VURjE2U3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVSYXdVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVSYXdVbmljb2RlRXNjYXBlIgotICAiX1B5VW5pY29kZV9EZWNvZGVVbmljb2RlSW50ZXJuYWwiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZUNoYXJtYXAiCi0gICJQeVVuaWNvZGVfQnVpbGRFbmNvZGluZ01hcCIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlQ2hhcm1hcCIKLSAgIlB5VW5pY29kZVVDUzJfVHJhbnNsYXRlQ2hhcm1hcCIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlRGVjaW1hbCIKLSAgIlB5VW5pY29kZVVDUzJfQ291bnQiCi0gICJQeVVuaWNvZGVVQ1MyX0ZpbmQiCi0gICJQeVVuaWNvZGVVQ1MyX0pvaW4iCi0gICJQeVVuaWNvZGVVQ1MyX1NwbGl0bGluZXMiCi0gICJQeVVuaWNvZGVVQ1MyX0NvbXBhcmUiCi0gICJQeVVuaWNvZGVVQ1MyX0NvbnRhaW5zIgotICAiUHlVbmljb2RlVUNTMl9Db25jYXQiCi0gICJfUHlVbmljb2RlX1hTdHJpcCIKLSAgIlB5VW5pY29kZVVDUzJfUmVwbGFjZSIKLSAgIlB5VW5pY29kZVVDUzJfU3BsaXQiCi0gICJQeVVuaWNvZGVVQ1MyX1JTcGxpdCIKLSAgIlB5VW5pY29kZVVDUzJfRm9ybWF0IgotICAiX1B5VW5pY29kZVVDUzJfSW5pdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0ZpbmkiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21Vbmljb2RlIgotICAiUHlVbmljb2RlVUNTMl9Bc1VuaWNvZGUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldFNpemUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldE1heCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0FzRGVmYXVsdEVuY29kZWRTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX1NldERlZmF1bHRFbmNvZGluZyIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlIgotICAiUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRPYmplY3QiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZVVURjE2IgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVVEYxNiIKLSAgIlB5VW5pY29kZVVDUzJfQXNVbmljb2RlRXNjYXBlU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZUxhdGluMSIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlQVNDSUkiCi0gICJQeVVuaWNvZGVVQ1MyX0FzQ2hhcm1hcFN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfUGFydGl0aW9uIgotICAiUHlVbmljb2RlVUNTMl9SUGFydGl0aW9uIgotICAiUHlVbmljb2RlVUNTMl9UcmFuc2xhdGUiCi0gICJQeVVuaWNvZGVVQ1MyX1RhaWxtYXRjaCIKLSAgIlB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3QiCi0gICJQeVVuaWNvZGVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHVuaWNvZGVjdHlwZSkKLSAgIl9QeVVuaWNvZGVfVHlwZVJlY29yZHMiCi0gICJfUHlVbmljb2RlVUNTMl9Ub051bWVyaWMiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0xvd2VyY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzVXBwZXJjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfSXNUaXRsZWNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Jc1doaXRlc3BhY2UiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0xpbmVicmVhayIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvTG93ZXJjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfVG9VcHBlcmNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Ub1RpdGxlY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvRGVjaW1hbERpZ2l0IgotICAiX1B5VW5pY29kZVVDUzJfVG9EaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzRGVjaW1hbERpZ2l0IgotICAiX1B5VW5pY29kZVVDUzJfSXNEaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzTnVtZXJpYyIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzQWxwaGEiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih3ZWFrcmVmb2JqZWN0KQotICAiUHlXZWFrcmVmX05ld1JlZiIKLSAgIlB5V2Vha3JlZl9OZXdQcm94eSIKLSAgIlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMiCi0gICJQeVdlYWtyZWZfR2V0T2JqZWN0IgotICAiX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQiCi0gICJfUHlXZWFrcmVmX0NsZWFyUmVmIgotICAiX1B5V2Vha3JlZl9SZWZUeXBlIgotICAiX1B5V2Vha3JlZl9Qcm94eVR5cGUiCi0gICJfUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoUHl0aG9uLWFzdCkKLTsgICJpbml0X2FzdCIKLSAgIk1vZHVsZSIKLSAgIkludGVyYWN0aXZlIgotICAiRXhwcmVzc2lvbiIKLSAgIlN1aXRlIgotICAiRnVuY3Rpb25EZWYiCi0gICJDbGFzc0RlZiIKLSAgIlJldHVybiIKLSAgIkRlbGV0ZSIKLSAgIkFzc2lnbiIKLSAgIkF1Z0Fzc2lnbiIKLSAgIlByaW50IgotICAiRm9yIgotICAiV2hpbGUiCi0gICJJZiIKLSAgIldpdGgiCi0gICJSYWlzZSIKLSAgIlRyeUV4Y2VwdCIKLSAgIlRyeUZpbmFsbHkiCi0gICJBc3NlcnQiCi0gICJJbXBvcnQiCi0gICJJbXBvcnRGcm9tIgotICAiRXhlYyIKLSAgIkdsb2JhbCIKLSAgIkV4cHIiCi0gICJQYXNzIgotICAiQnJlYWsiCi0gICJDb250aW51ZSIKLSAgIkJvb2xPcCIKLSAgIkJpbk9wIgotICAiVW5hcnlPcCIKLSAgIkxhbWJkYSIKLSAgIklmRXhwIgotICAiRGljdCIKLSAgIkxpc3RDb21wIgotICAiR2VuZXJhdG9yRXhwIgotICAiWWllbGQiCi0gICJDb21wYXJlIgotICAiQ2FsbCIKLSAgIlJlcHIiCi0gICJOdW0iCi0gICJTdHIiCi0gICJBdHRyaWJ1dGUiCi0gICJTdWJzY3JpcHQiCi0gICJOYW1lIgotICAiTGlzdCIKLSAgIlR1cGxlIgotICAiRWxsaXBzaXMiCi0gICJTbGljZSIKLSAgIkV4dFNsaWNlIgotICAiSW5kZXgiCi0gICJjb21wcmVoZW5zaW9uIgotICAiZXhjZXB0aGFuZGxlciIKLSAgImFyZ3VtZW50cyIKLSAgImtleXdvcmQiCi0gICJhbGlhcyIKLSAgIlB5QVNUX21vZDJvYmoiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhc2RsKQotICAiYXNkbF9zZXFfbmV3IgotICAiYXNkbF9pbnRfc2VxX25ldyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFzdCkKLSAgIlB5QVNUX0Zyb21Ob2RlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYmx0aW5tb2R1bGUpCi0gICJfUHlCdWlsdGluX0luaXQiCi0gICJQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXhjZXB0aW9ucykKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0IgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQiCi0gICJfUHlFeGNfSW5pdCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nIgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmciCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0IgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydCIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbiIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbiIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbiIKLSAgIl9QeUV4Y19GaW5pIgotICAiUHlFeGNfQmFzZUV4Y2VwdGlvbiIKLSAgIlB5RXhjX0V4Y2VwdGlvbiIKLSAgIlB5RXhjX1N0YW5kYXJkRXJyb3IiCi0gICJQeUV4Y19UeXBlRXJyb3IiCi0gICJQeUV4Y19TdG9wSXRlcmF0aW9uIgotICAiUHlFeGNfR2VuZXJhdG9yRXhpdCIKLSAgIlB5RXhjX1N5c3RlbUV4aXQiCi0gICJQeUV4Y19LZXlib2FyZEludGVycnVwdCIKLSAgIlB5RXhjX0ltcG9ydEVycm9yIgotICAiUHlFeGNfRW52aXJvbm1lbnRFcnJvciIKLSAgIlB5RXhjX0lPRXJyb3IiCi0gICJQeUV4Y19PU0Vycm9yIgotICAiUHlFeGNfRU9GRXJyb3IiCi0gICJQeUV4Y19SdW50aW1lRXJyb3IiCi0gICJQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIgotICAiUHlFeGNfTmFtZUVycm9yIgotICAiUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IiCi0gICJQeUV4Y19BdHRyaWJ1dGVFcnJvciIKLSAgIlB5RXhjX0luZGV4RXJyb3IiCi0gICJQeUV4Y19TeW50YXhFcnJvciIKLSAgIlB5RXhjX0luZGVudGF0aW9uRXJyb3IiCi0gICJQeUV4Y19UYWJFcnJvciIKLSAgIlB5RXhjX0xvb2t1cEVycm9yIgotICAiUHlFeGNfS2V5RXJyb3IiCi0gICJQeUV4Y19WYWx1ZUVycm9yIgotICAiUHlFeGNfVW5pY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZUVuY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZURlY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIgotICAiUHlFeGNfQXNzZXJ0aW9uRXJyb3IiCi0gICJQeUV4Y19Bcml0aG1ldGljRXJyb3IiCi0gICJQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IiCi0gICJQeUV4Y19PdmVyZmxvd0Vycm9yIgotICAiUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IiCi0gICJQeUV4Y19TeXN0ZW1FcnJvciIKLSAgIlB5RXhjX1JlZmVyZW5jZUVycm9yIgotICAiUHlFeGNfTWVtb3J5RXJyb3IiCi0gICJQeUV4Y19XYXJuaW5nIgotICAiUHlFeGNfVXNlcldhcm5pbmciCi0gICJQeUV4Y19EZXByZWNhdGlvbldhcm5pbmciCi0gICJQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIgotICAiUHlFeGNfU3ludGF4V2FybmluZyIKLSAgIlB5RXhjX1J1bnRpbWVXYXJuaW5nIgotICAiUHlFeGNfRnV0dXJlV2FybmluZyIKLSAgIlB5RXhjX0ltcG9ydFdhcm5pbmciCi0gICJQeUV4Y19NZW1vcnlFcnJvckluc3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjZXZhbCkKLSAgIlB5RXZhbF9FdmFsRnJhbWVFeCIKLSAgIlB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzIgotICAiUHlFdmFsX0V2YWxDb2RlRXgiCi0gICJQeUV2YWxfR2V0RnJhbWUiCi0gICJQeUV2YWxfQ2FsbE9iamVjdCIKLSAgIlB5RXZhbF9TZXRQcm9maWxlIgotICAiUHlFdmFsX1NldFRyYWNlIgotICAiUHlFdmFsX0dldEJ1aWx0aW5zIgotICAiUHlFdmFsX0dldEdsb2JhbHMiCi0gICJQeUV2YWxfR2V0TG9jYWxzIgotICAiUHlFdmFsX0dldFJlc3RyaWN0ZWQiCi0gICJQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzIgotICAiUHlfRmx1c2hMaW5lIgotICAiUHlfQWRkUGVuZGluZ0NhbGwiCi0gICJQeV9NYWtlUGVuZGluZ0NhbGxzIgotICAiUHlfU2V0UmVjdXJzaW9uTGltaXQiCi0gICJQeV9HZXRSZWN1cnNpb25MaW1pdCIKLSAgIl9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwiCi0gICJQeUV2YWxfR2V0RnVuY05hbWUiCi0gICJQeUV2YWxfR2V0RnVuY0Rlc2MiCi0gICJQeUV2YWxfR2V0Q2FsbFN0YXRzIgotICAiUHlFdmFsX0V2YWxGcmFtZSIKLSAgIlB5RXZhbF9TYXZlVGhyZWFkIgotICAiUHlFdmFsX1Jlc3RvcmVUaHJlYWQiCi0gICJQeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkIgotICAiUHlFdmFsX0luaXRUaHJlYWRzIgotICAiUHlFdmFsX0FjcXVpcmVMb2NrIgotICAiUHlFdmFsX1JlbGVhc2VMb2NrIgotICAiUHlFdmFsX0FjcXVpcmVUaHJlYWQiCi0gICJQeUV2YWxfUmVsZWFzZVRocmVhZCIKLSAgIlB5RXZhbF9SZUluaXRUaHJlYWRzIgotICAiX1B5RXZhbF9TbGljZUluZGV4IgotICAiUHlFdmFsX0V2YWxDb2RlIgotICAiX1B5RXZhbF9DYWxsVHJhY2luZyIKLSAgIl9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IgotICAiX1B5X0NoZWNrSW50ZXJ2YWwiCi0gICJfUHlfVGlja2VyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29tcGlsZSkKLSAgIl9QeV9NYW5nbGUiCi0gICJQeUFTVF9Db21waWxlIgotICAiUHlOb2RlX0NvbXBpbGUiCi0gICJQeV9PcHRpbWl6ZUZsYWciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb2RlY3MpCi0gICJfUHlDb2RlY19Mb29rdXAiCi0gICJQeUNvZGVjX0VuY29kZSIKLSAgIlB5Q29kZWNfRGVjb2RlIgotICAiUHlDb2RlY19JZ25vcmVFcnJvcnMiCi0gICJQeUNvZGVjX1JlcGxhY2VFcnJvcnMiCi0gICJQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzIgotICAiUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzIgotICAiUHlDb2RlY19SZWdpc3RlciIKLSAgIlB5Q29kZWNfRW5jb2RlciIKLSAgIlB5Q29kZWNfRGVjb2RlciIKLSAgIlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyIgotICAiUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIiCi0gICJQeUNvZGVjX1N0cmVhbVJlYWRlciIKLSAgIlB5Q29kZWNfU3RyZWFtV3JpdGVyIgotICAiUHlDb2RlY19SZWdpc3RlckVycm9yIgotICAiUHlDb2RlY19Mb29rdXBFcnJvciIKLSAgIlB5Q29kZWNfU3RyaWN0RXJyb3JzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXJyb3JzKQotICAiUHlFcnJfU2V0Tm9uZSIKLSAgIlB5RXJyX1NldFN0cmluZyIKLSAgIlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyIKLSAgIlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbiIKLSAgIlB5RXJyX0ZldGNoIgotICAiUHlFcnJfQ2xlYXIiCi0gICJQeUVycl9Ob01lbW9yeSIKLSAgIlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdCIKLSAgIlB5RXJyX0Zvcm1hdCIKLSAgIlB5RXJyX05ld0V4Y2VwdGlvbiIKLSAgIlB5RXJyX1dyaXRlVW5yYWlzYWJsZSIKLSAgIlB5RXJyX1N5bnRheExvY2F0aW9uIgotICAiUHlFcnJfUHJvZ3JhbVRleHQiCi0gICJQeUVycl9TZXRPYmplY3QiCi0gICJQeUVycl9PY2N1cnJlZCIKLSAgIlB5RXJyX1Jlc3RvcmUiCi0gICJQeUVycl9FeGNlcHRpb25NYXRjaGVzIgotICAiUHlFcnJfQmFkQXJndW1lbnQiCi0gICJQeUVycl9TZXRGcm9tRXJybm8iCi0gICJQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUiCi0gICJQeUVycl9CYWRJbnRlcm5hbENhbGwiCi0gICJfUHlFcnJfQmFkSW50ZXJuYWxDYWxsIgotICAiUHlFcnJfV2FybiIKLSAgIlB5RXJyX1dhcm5FeHBsaWNpdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZyb3plbikKLSAgIlB5SW1wb3J0X0Zyb3plbk1vZHVsZXMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmcm96ZW5tYWluKQotICAiUHlfRnJvemVuTWFpbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZ1dHVyZSkKLSAgIlB5RnV0dXJlX0Zyb21BU1QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRhcmdzKQotICAiUHlBcmdfUGFyc2UiCi0gICJfUHlBcmdfUGFyc2VfU2l6ZVQiCi0gICJQeUFyZ19QYXJzZVR1cGxlIgotICAiX1B5QXJnX1BhcnNlVHVwbGVfU2l6ZVQiCi0gICJQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMiCi0gICJfUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUIgotICAiUHlBcmdfVW5wYWNrVHVwbGUiCi0gICJfUHlBcmdfTm9LZXl3b3JkcyIKLSAgIlB5QXJnX1ZhUGFyc2UiCi0gICJQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcyIKLSAgIl9QeUFyZ19WYVBhcnNlX1NpemVUIgotICAiX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0Y29tcGlsZXIpCi0gICJQeV9HZXRDb21waWxlciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldGNvcHlyaWdodCkKLSAgIlB5X0dldENvcHlyaWdodCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldHBsYXRmb3JtKQotICAiUHlfR2V0UGxhdGZvcm0iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXR2ZXJzaW9uKQotICAiUHlfR2V0VmVyc2lvbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdyYW1pbml0KQotICAiX1B5UGFyc2VyX0dyYW1tYXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpbXBvcnQpCi0gICJfUHlJbXBvcnRfSW5pdCIKLSAgIl9QeUltcG9ydEhvb2tzX0luaXQiCi0gICJQeUltcG9ydF9JbXBvcnRNb2R1bGUiCi0gICJQeUltcG9ydF9DbGVhbnVwIgotICAiX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uIgotICAiUHlJbXBvcnRfQWRkTW9kdWxlIgotICAiUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCIKLSAgIlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZSIKLSAgIlB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4IgotICAiUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwiCi0gICJQeUltcG9ydF9SZWxvYWRNb2R1bGUiCi0gICJQeUltcG9ydF9JbXBvcnQiCi07ICAiaW5pdGltcCIKLSAgIl9QeUltcG9ydF9GaW5pIgotICAiUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIiCi0gICJQeUltcG9ydF9FeGVjQ29kZU1vZHVsZSIKLSAgIlB5SW1wb3J0X0dldE1vZHVsZURpY3QiCi0gICJfUHlJbXBvcnRfRmluZE1vZHVsZSIKLSAgIl9QeUltcG9ydF9Jc1NjcmlwdCIKLSAgIl9QeUltcG9ydF9SZUluaXRMb2NrIgotICAiX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb24iCi0gICJQeUltcG9ydF9BcHBlbmRJbml0dGFiIgotICAiUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYiIKLSAgIlB5SW1wb3J0X0luaXR0YWIiCi0gICJfUHlJbXBvcnRfRmlsZXRhYiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGltcG9ydGRsKQotICAiX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWFyc2hhbCkKLSAgIlB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlIgotICAiUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmciCi0gICJQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlIgotICAiUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZSIKLSAgIlB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nIgotICAiUHlNYXJzaGFsX0luaXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtb2RzdXBwb3J0KQotICAiUHlfSW5pdE1vZHVsZTQiCi0gICJQeV9CdWlsZFZhbHVlIgotICAiX1B5X0J1aWxkVmFsdWVfU2l6ZVQiCi0gICJQeUV2YWxfQ2FsbEZ1bmN0aW9uIgotICAiUHlFdmFsX0NhbGxNZXRob2QiCi0gICJfUHlfVmFCdWlsZFZhbHVlX1NpemVUIgotICAiUHlfVmFCdWlsZFZhbHVlIgotICAiUHlNb2R1bGVfQWRkT2JqZWN0IgotICAiUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQiCi0gICJQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudCIKLSAgIl9QeV9QYWNrYWdlQ29udGV4dCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG15c25wcmludGYpCi0gICJQeU9TX3NucHJpbnRmIgotICAiUHlPU192c25wcmludGYiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihteXN0cnRvdWwpCi0gICJQeU9TX3N0cnRvdWwiCi0gICJQeU9TX3N0cnRvbCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHB5YXJlbmEpCi0gICJQeUFyZW5hX05ldyIKLSAgIlB5QXJlbmFfRnJlZSIKLSAgIlB5QXJlbmFfTWFsbG9jIgotICAiUHlBcmVuYV9BZGRQeU9iamVjdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHB5ZnBlKQotICAiUHlGUEVfZHVtbXkiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihweXN0YXRlKQotICAiUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyIgotICAiUHlUaHJlYWRTdGF0ZV9DbGVhciIKLSAgIl9QeVRocmVhZF9DdXJyZW50RnJhbWVzIgotICAiUHlHSUxTdGF0ZV9FbnN1cmUiCi0gICJQeUdJTFN0YXRlX1JlbGVhc2UiCi0gICJQeUludGVycHJldGVyU3RhdGVfTmV3IgotICAiUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZSIKLSAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlIgotICAiUHlUaHJlYWRTdGF0ZV9OZXciCi0gICJQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQiCi0gICJQeVRocmVhZFN0YXRlX0dldCIKLSAgIlB5VGhyZWFkU3RhdGVfU3dhcCIKLSAgIlB5VGhyZWFkU3RhdGVfR2V0RGljdCIKLSAgIlB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGMiCi0gICJQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSIKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9IZWFkIgotICAiUHlJbnRlcnByZXRlclN0YXRlX05leHQiCi0gICJQeUludGVycHJldGVyU3RhdGVfVGhyZWFkSGVhZCIKLSAgIlB5VGhyZWFkU3RhdGVfTmV4dCIKLSAgIl9QeUdJTFN0YXRlX0luaXQiCi0gICJfUHlHSUxTdGF0ZV9GaW5pIgotICAiX1B5VGhyZWFkU3RhdGVfQ3VycmVudCIKLSAgIl9QeVRocmVhZFN0YXRlX0dldEZyYW1lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocHl0aG9ucnVuKQotICAiUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnIgotICAiUHlfRGVidWdGbGFnIgotICAiUHlfVmVyYm9zZUZsYWciCi0gICJQeV9Ob1NpdGVGbGFnIgotICAiUHlfSW50ZXJhY3RpdmVGbGFnIgotICAiUHlfRnJvemVuRmxhZyIKLSAgIlB5X0luaXRpYWxpemVFeCIKLSAgIlB5X0ZhdGFsRXJyb3IiCi0gICJQeV9OZXdJbnRlcnByZXRlciIKLSAgIlB5RXJyX1ByaW50IgotICAiUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFncyIKLSAgIlB5UGFyc2VyX0FTVEZyb21GaWxlIgotICAiUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MiCi0gICJQeVJ1bl9GaWxlRXhGbGFncyIKLSAgIlB5X0V4aXQiCi0gICJQeUVycl9QcmludEV4IgotICAiUHlFcnJfRGlzcGxheSIKLSAgIlB5X1NldFByb2dyYW1OYW1lIgotICAiUHlfR2V0UHJvZ3JhbU5hbWUiCi0gICJQeV9TZXRQeXRob25Ib21lIgotICAiUHlfR2V0UHl0aG9uSG9tZSIKLSAgIlB5X0luaXRpYWxpemUiCi0gICJQeV9GaW5hbGl6ZSIKLSAgIlB5X0lzSW5pdGlhbGl6ZWQiCi0gICJQeV9FbmRJbnRlcnByZXRlciIKLSAgIlB5UnVuX0FueUZpbGVGbGFncyIKLSAgIlB5X0ZkSXNJbnRlcmFjdGl2ZSIKLSAgIlB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzIgotICAiUHlSdW5fQW55RmlsZUV4RmxhZ3MiCi0gICJQeVJ1bl9TaW1wbGVTdHJpbmdGbGFncyIKLSAgIlB5UnVuX1N0cmluZ0ZsYWdzIgotICAiUHlQYXJzZXJfQVNURnJvbVN0cmluZyIKLSAgIlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncyIKLSAgIlB5X0NvbXBpbGVTdHJpbmdGbGFncyIKLSAgIlB5X1N5bXRhYmxlU3RyaW5nIgotICAiUHlfQXRFeGl0IgotICAiUHlPU19nZXRzaWciCi0gICJQeU9TX3NldHNpZyIKLSAgIlB5UGFyc2VyX1NldEVycm9yIgotICAiUHlNb2R1bGVfR2V0V2FybmluZ3NNb2R1bGUiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWUiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZpbGVuYW1lIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmciCi0gICJQeVJ1bl9BbnlGaWxlIgotICAiUHlSdW5fQW55RmlsZUV4IgotICAiUHlSdW5fRmlsZSIKLSAgIlB5UnVuX0ZpbGVFeCIKLSAgIlB5UnVuX0ZpbGVGbGFncyIKLSAgIlB5UnVuX1NpbXBsZUZpbGUiCi0gICJQeVJ1bl9TaW1wbGVGaWxlRXgiCi0gICJQeVJ1bl9TdHJpbmciCi0gICJQeVJ1bl9TaW1wbGVTdHJpbmciCi0gICJQeV9Db21waWxlU3RyaW5nIgotICAiUHlSdW5fSW50ZXJhY3RpdmVPbmUiCi0gICJQeVJ1bl9JbnRlcmFjdGl2ZUxvb3AiCi0gICJQeV9Vc2VDbGFzc0V4Y2VwdGlvbnNGbGFnIgotICAiUHlfVW5pY29kZUZsYWciCi0gICJfUHlfUW5ld0ZsYWciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzdHJ1Y3RtZW1iZXIpCi0gICJQeU1lbWJlcl9HZXQiCi0gICJQeU1lbWJlcl9HZXRPbmUiCi0gICJQeU1lbWJlcl9TZXRPbmUiCi0gICJQeU1lbWJlcl9TZXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzeW10YWJsZSkKLSAgIlB5U3ltdGFibGVfQnVpbGQiCi0gICJQeVN5bXRhYmxlX0ZyZWUiCi0gICJQeVNUX0dldFNjb3BlIgotICAiUHlTeW10YWJsZV9Mb29rdXAiCi0gICJQeVNURW50cnlfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN5c21vZHVsZSkKLSAgIl9QeVN5c19Jbml0IgotICAiUHlTeXNfV3JpdGVTdGRlcnIiCi0gICJQeVN5c19TZXRQYXRoIgotICAiUHlTeXNfU2V0QXJndiIKLSAgIlB5U3lzX1dyaXRlU3Rkb3V0IgotICAiUHlfU3VidmVyc2lvblJldmlzaW9uIgotICAiUHlfU3VidmVyc2lvblNob3J0QnJhbmNoIgotICAiUHlTeXNfR2V0T2JqZWN0IgotICAiUHlTeXNfU2V0T2JqZWN0IgotICAiUHlTeXNfR2V0RmlsZSIKLSAgIlB5U3lzX1Jlc2V0V2Fybk9wdGlvbnMiCi0gICJQeVN5c19BZGRXYXJuT3B0aW9uIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodHJhY2ViYWNrKQotICAiUHlUcmFjZUJhY2tfSGVyZSIKLSAgIlB5VHJhY2VCYWNrX1ByaW50IgotICAiUHlUcmFjZUJhY2tfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldG9wdCkKLSAgIl9QeU9TX0dldE9wdCIKLSAgIl9QeU9TX29wdGVyciIKLSAgIl9QeU9TX29wdGluZCIKLSAgIl9QeU9TX29wdGFyZyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGR5bmxvYWRfc2hsaWIpCi0gICJfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWIiCi0gICJfUHlJbXBvcnRfR2V0RHluTG9hZEZ1bmMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0aHJlYWQpCi0gICJQeVRocmVhZF9kZWxldGVfa2V5X3ZhbHVlIgotICAiUHlUaHJlYWRfaW5pdF90aHJlYWQiCi0gICJQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIgotICAiUHlUaHJlYWRfZXhpdF90aHJlYWQiCi0gICJQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50IgotICAiUHlUaHJlYWRfYWxsb2NhdGVfbG9jayIKLSAgIlB5VGhyZWFkX2ZyZWVfbG9jayIKLSAgIlB5VGhyZWFkX2FjcXVpcmVfbG9jayIKLSAgIlB5VGhyZWFkX3JlbGVhc2VfbG9jayIKLSAgIlB5VGhyZWFkX2dldF9zdGFja3NpemUiCi0gICJQeVRocmVhZF9zZXRfc3RhY2tzaXplIgotICAiUHlUaHJlYWRfY3JlYXRlX2tleSIKLSAgIlB5VGhyZWFkX2RlbGV0ZV9rZXkiCi0gICJQeVRocmVhZF9zZXRfa2V5X3ZhbHVlIgotICAiUHlUaHJlYWRfZ2V0X2tleV92YWx1ZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdjbW9kdWxlKQotOyAgImluaXRnYyIKLSAgIl9QeU9iamVjdF9HQ19OZXciCi0gICJfUHlPYmplY3RfR0NfTmV3VmFyIgotICAiUHlHQ19Db2xsZWN0IgotICAiX1B5T2JqZWN0X0dDX1Jlc2l6ZSIKLSAgIl9QeU9iamVjdF9HQ19NYWxsb2MiCi0gICJQeU9iamVjdF9HQ19UcmFjayIKLSAgIlB5T2JqZWN0X0dDX1VuVHJhY2siCi0gICJQeU9iamVjdF9HQ19EZWwiCi0gICJfUHlHQ19EdW1wIgotICAiX1B5T2JqZWN0X0dDX1RyYWNrIgotICAiX1B5T2JqZWN0X0dDX1VuVHJhY2siCi0gICJfUHlPYmplY3RfR0NfRGVsIgotICAiX1B5R0NfZ2VuZXJhdGlvbjAiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzaWduYWxtb2R1bGUpCi07ICAiaW5pdHNpZ25hbCIKLSAgIlB5RXJyX0NoZWNrU2lnbmFscyIKLSAgIlB5RXJyX1NldEludGVycnVwdCIKLSAgIlB5T1NfRmluaUludGVycnVwdHMiCi0gICJQeU9TX0ludGVycnVwdE9jY3VycmVkIgotICAiUHlPU19Jbml0SW50ZXJydXB0cyIKLSAgIlB5T1NfQWZ0ZXJGb3JrIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocG9zaXhtb2R1bGUpCi07ICAiaW5pdG9zMiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF90aHJlYWRtb2R1bGUpCi07ICAiaW5pdF90aHJlYWQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhcnJheW1vZHVsZSkKLTsgICJpbml0YXJyYXkiCi07ICAiYXJyYXlfbWV0aG9kcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJpbmFzY2lpKQotOyAgImluaXRiaW5hc2NpaSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNtYXRobW9kdWxlKQotOyAgImluaXRjbWF0aCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9jb2RlY3Ntb2R1bGUpCi07ICAiaW5pdF9jb2RlY3MiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb2xsZWN0aW9uc21vZHVsZSkKLTsgICJpbml0Y29sbGVjdGlvbnMiCi0gICJkZXF1ZWl0ZXJfdHlwZSIKLSAgImRlcXVlcmV2aXRlcl90eXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY1BpY2tsZSkKLTsgICJpbml0Y1BpY2tsZSIKLTsgICJmYXN0X3NhdmVfbGVhdmUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfY3N2KQotOyAgImluaXRfY3N2IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGF0ZXRpbWVtb2R1bGUpCi07ICAiaW5pdGRhdGV0aW1lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGxtb2R1bGUpCi07ICAiaW5pdGRsIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXJybm9tb2R1bGUpCi07ICAiaW5pdGVycm5vIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZmNudGxtb2R1bGUpCi07ICAiaW5pdGZjbnRsIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2Z1bmN0b29sc21vZHVsZSkKLTsgICJpbml0X2Z1bmN0b29scyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9oZWFwcW1vZHVsZSkKLTsgICJpbml0X2hlYXBxIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaW1hZ2VvcCkKLTsgICJpbml0aW1hZ2VvcCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGl0ZXJ0b29sc21vZHVsZSkKLTsgICJpbml0aXRlcnRvb2xzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2xvY2FsZW1vZHVsZSkKLTsgICJpbml0X2xvY2FsZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1hdGhtb2R1bGUpCi07ICAiaW5pdG1hdGgiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtZDUpCi0gICJtZDVfZmluaXNoIgotICAibWQ1X2luaXQiCi0gICJtZDVfYXBwZW5kIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWQ1bW9kdWxlKQotOyAgImluaXRfbWQ1IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob3BlcmF0b3IpCi07ICAiaW5pdG9wZXJhdG9yIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3JhbmRvbW1vZHVsZSkKLTsgICJpbml0X3JhbmRvbSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHJnYmltZ21vZHVsZSkKLTsgICJpbml0cmdiaW1nIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhbW9kdWxlKQotOyAgImluaXRfc2hhIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhMjU2bW9kdWxlKQotOyAgImluaXRfc2hhMjU2IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhNTEybW9kdWxlKQotOyAgImluaXRfc2hhNTEyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3NyZSkKLTsgICJpbml0X3NyZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN0cm9wbW9kdWxlKQotOyAgImluaXRzdHJvcCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9zdHJ1Y3QpCi07ICAiaW5pdF9zdHJ1Y3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzeW10YWJsZW1vZHVsZSkKLTsgICJpbml0X3N5bXRhYmxlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodGVybWlvcykKLTsgICJpbml0dGVybWlvcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRpbWVtb2R1bGUpCi07ICAiaW5pdHRpbWUiCi0gICJfUHlUaW1lX0RvdWJsZVRvVGltZXQiCi07ICAiaW5pdHRpbWV6b25lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodGltaW5nbW9kdWxlKQotOyAgImluaXR0aW1pbmciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfd2Vha3JlZikKLTsgICJpbml0X3dlYWtyZWYiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih4eHN1YnR5cGUpCi07ICAiaW5pdHh4c3VidHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHppcGltcG9ydCkKLTsgICJpbml0emlwaW1wb3J0IgpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L3B5dGhvbnBtLmMgYi9QQy9vczJlbXgvcHl0aG9ucG0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE0N2Y0Yi4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvcHl0aG9ucG0uYworKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKiBPUy8yIFBNIG1haW4gcHJvZ3JhbSAtIGNyZWF0ZXMgYSBoaWRkZW4gd2luZG93LCBhbmQgc3RhcnRzIFB5dGhvbgotICogaW50ZXJwcmV0ZXIgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIHNvIHRoYXQgUHl0aG9uIHNjcmlwdHMgY2FuIGJlCi0gKiBydW4gaW4gUE0gcHJvY2VzcyBzcGFjZSB3aXRob3V0IGEgY29uc29sZSBXaW5kb3cuICBUaGUgaW50ZXJwcmV0ZXIKLSAqIGlzIGluY29ycG9yYXRlZCBieSBsaW5raW5nIGluIHRoZSBQeXRob24gRExMLgotICoKLSAqIEFzIGl0IHN0YW5kcywgSSBkb24ndCB0aGluayB0aGlzIGlzIGFkZXF1YXRlIGZvciBzdXBwb3J0aW5nIFB5dGhvbgotICogR1VJIG1vZHVsZXMsIGFzIHRoZSBQeXRob24gdGhyZWFkIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIG1lc3NhZ2UKLSAqIHF1ZXVlIC0gd2hpY2ggaXMgcmVxdWlyZWQgb2YgdGhyZWFkcyB0aGF0IHdhbnQgdG8gY3JlYXRlL3VzZQotICogUE0gd2luZG93cy4KLSAqCi0gKiBUaGlzIGNvZGUgb3dlcyBhIGxvdCB0byAiT1MvMiBQcmVzZW50YXRpb24gTWFuYWdlciBQcm9ncmFtbWluZyIsIGJ5Ci0gKiBDaGFybGVzIFBldHpvbGQuCi0gKgotICogQW5kcmV3IE1hY0ludHlyZSA8YW5keW1hY0BidWxsc2V5ZS5hcGFuYS5vcmcuYXU+LCBBdWd1c3QgMjAwMS4KLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgUHl0aG9uIDIuMS4xIGxpY2VuY2UgLSBzZWUgdGhlIExJQ0VOQ0UKLSAqIGZpbGUgaW4gdGhlIFB5dGhvbiB2Mi4xLjEgKG9yIGxhdGVyKSBzb3VyY2UgZGlzdHJpYnV0aW9uLgotICogQ29weXJpZ2h0IGFzc2lnbmVkIHRvIHRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgMjAwMS4KLSAqLwotCi0jZGVmaW5lIElOQ0xfRE9TCi0jZGVmaW5lIElOQ0xfV0lOCi0jaW5jbHVkZSA8b3MyLmg+Ci0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLS8qIHVzZSBzdHJ1Y3R1cmUgdG8gcGFzcyBjb21tYW5kIGxpbmUgdG8gUHl0aG9uIHRocmVhZCAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBpbnQgYXJnYzsKLSAgICBjaGFyICoqYXJndjsKLSAgICBIV05EIEZyYW1lOwotICAgIGludCBydW5uaW5nOwotfSBhcmdsaXN0OwotCi0vKiBtYWtlIHRoaXMgYSBnbG9iYWwgdG8gc2ltcGxpZnkgYWNjZXNzLgotICogaXQgc2hvdWxkIG9ubHkgYmUgc2V0IGZyb20gdGhlIFB5dGhvbiB0aHJlYWQsIG9yIGJ5IHRoZSBjb2RlIHRoYXQKLSAqIGluaXRpYXRlcyB0aGUgUHl0aG9uIHRocmVhZCB3aGVuIHRoZSB0aHJlYWQgY2Fubm90IGJlIGNyZWF0ZWQuCi0gKi8KLWludCBQeXRob25SQzsKLQotZXh0ZXJuIERMX0VYUE9SVChpbnQpIFB5X01haW4oaW50LCBjaGFyICoqKTsKLXZvaWQgUHl0aG9uVGhyZWFkKHZvaWQgKik7Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgVUxPTkcgRnJhbWVGbGFncyA9IEZDRl9USVRMRUJBUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9TWVNNRU5VIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX1NJWkVCT1JERVIgfAotICAgICAgICAgICAgICAgICAgICAgICBGQ0ZfSElERUJVVFRPTiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9TSEVMTFBPU0lUSU9OIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX1RBU0tMSVNUOwotICAgIEhBQiBoYWI7Ci0gICAgSE1RIGhtcTsKLSAgICBIV05EIENsaWVudDsKLSAgICBRTVNHIHFtc2c7Ci0gICAgYXJnbGlzdCBhcmdzOwotICAgIGludCBweXRob25fdGlkOwotCi0gICAgLyogaW5pdCBQTSBhbmQgY3JlYXRlIG1lc3NhZ2UgcXVldWUgKi8KLSAgICBoYWIgPSBXaW5Jbml0aWFsaXplKDApOwotICAgIGhtcSA9IFdpbkNyZWF0ZU1zZ1F1ZXVlKGhhYiwgMCk7Ci0KLSAgICAvKiBjcmVhdGUgYSAoaGlkZGVuKSBXaW5kb3cgdG8gaG91c2UgdGhlIHdpbmRvdyBwcm9jZWR1cmUgKi8KLSAgICBhcmdzLkZyYW1lID0gV2luQ3JlYXRlU3RkV2luZG93KEhXTkRfREVTS1RPUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRnJhbWVGbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uUE0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDbGllbnQpOwotCi0gICAgLyogcnVuIFB5dGhvbiBpbnRlcnByZXRlciBpbiBhIHRocmVhZCAqLwotICAgIGFyZ3MuYXJnYyA9IGFyZ2M7Ci0gICAgYXJncy5hcmd2ID0gYXJndjsKLSAgICBhcmdzLnJ1bm5pbmcgPSAwOwotICAgIGlmICgtMSA9PSAocHl0aG9uX3RpZCA9IF9iZWdpbnRocmVhZChQeXRob25UaHJlYWQsIE5VTEwsIDEwMjQgKiAxMDI0LCAmYXJncykpKQotICAgIHsKLSAgICAgICAgLyogY291bGRuJ3Qgc3RhcnQgdGhyZWFkICovCi0gICAgICAgIFdpbkFsYXJtKEhXTkRfREVTS1RPUCwgV0FfRVJST1IpOwotICAgICAgICBQeXRob25SQyA9IDE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8qIHByb2Nlc3MgUE0gbWVzc2FnZXMsIHVudGlsIFB5dGhvbiBleGl0cyAqLwotICAgICAgICB3aGlsZSAoV2luR2V0TXNnKGhhYiwgJnFtc2csIE5VTExIQU5ETEUsIDAsIDApKQotICAgICAgICAgICAgV2luRGlzcGF0Y2hNc2coaGFiLCAmcW1zZyk7Ci0gICAgICAgIGlmIChhcmdzLnJ1bm5pbmcgPiAwKQotICAgICAgICAgICAgRG9zS2lsbFRocmVhZChweXRob25fdGlkKTsKLSAgICB9Ci0KLSAgICAvKiBkZXN0cm95IHdpbmRvdywgc2h1dGRvd24gbWVzc2FnZSBxdWV1ZSBhbmQgUE0gKi8KLSAgICBXaW5EZXN0cm95V2luZG93KGFyZ3MuRnJhbWUpOwotICAgIFdpbkRlc3Ryb3lNc2dRdWV1ZShobXEpOwotICAgIFdpblRlcm1pbmF0ZShoYWIpOwotCi0gICAgcmV0dXJuIFB5dGhvblJDOwotfQotCi12b2lkIFB5dGhvblRocmVhZCh2b2lkICphcmdsKQotewotICAgIEhBQiBoYWI7Ci0gICAgYXJnbGlzdCAqYXJnczsKLQotICAgIC8qIFBNIGluaXRpYWxpc2F0aW9uICovCi0gICAgaGFiID0gV2luSW5pdGlhbGl6ZSgwKTsKLQotICAgIC8qIHN0YXJ0IFB5dGhvbiAqLwotICAgIGFyZ3MgPSAoYXJnbGlzdCAqKWFyZ2w7Ci0gICAgYXJncy0+cnVubmluZyA9IDE7Ci0gICAgUHl0aG9uUkMgPSBQeV9NYWluKGFyZ3MtPmFyZ2MsIGFyZ3MtPmFyZ3YpOwotCi0gICAgLyogZW50ZXIgYSBjcml0aWNhbCBzZWN0aW9uIGFuZCBzZW5kIHRoZSB0ZXJtaW5hdGlvbiBtZXNzYWdlICovCi0gICAgRG9zRW50ZXJDcml0U2VjKCk7Ci0gICAgYXJncy0+cnVubmluZyA9IDA7Ci0gICAgV2luUG9zdE1zZyhhcmdzLT5GcmFtZSwgV01fUVVJVCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAvKiBzaHV0ZG93biBQTSBhbmQgdGVybWluYXRlIHRocmVhZCAqLwotICAgIFdpblRlcm1pbmF0ZShoYWIpOwotICAgIF9lbmR0aHJlYWQoKTsKLX0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL190a2ludGVyLmRlZiBiL1BDL29zMnZhY3BwL190a2ludGVyLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlkYWI4ZC4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9fdGtpbnRlci5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLUxJQlJBUlkgICAgICAgIF9US0lOVEVSIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UKLURFU0NSSVBUSU9OICAgICdQeXRob24gRXh0ZW5zaW9uIERMTCB2MS4wIGZvciBBY2Nlc3MgdG8gVGNsL1RrIEVudmlyb25tZW50JwotUFJPVE1PREUKLURBVEEgICAgICAgICAgIE1VTFRJUExFIE5PTlNIQVJFRAotCi1FWFBPUlRTCi0gICAgICAgICAgICAgICBpbml0X3RraW50ZXIKLQpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvY29uZmlnLmMgYi9QQy9vczJ2YWNwcC9jb25maWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2YjUyMS4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9jb25maWcuYworKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IChjKSAyMDAwLCBCZU9wZW4uY29tLgotQ29weXJpZ2h0IChjKSAxOTk1LTIwMDAsIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcy4KLUNvcHlyaWdodCAoYykgMTk5MC0xOTk1LCBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1TZWUgdGhlIGZpbGUgIk1pc2MvQ09QWVJJR0hUIiBmb3IgaW5mb3JtYXRpb24gb24gdXNhZ2UgYW5kCi1yZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIGFuZCBmb3IgYSBESVNDTEFJTUVSIE9GIEFMTCBXQVJSQU5USUVTLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBNb2R1bGUgY29uZmlndXJhdGlvbiAqLwotCi0vKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHRhYmxlIG9mIGJ1aWx0LWluIG1vZHVsZXMuCi0gICBTZWUgaW5pdF9idWlsdGluKCkgaW4gaW1wb3J0LmMuICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotZXh0ZXJuIHZvaWQgaW5pdGFycmF5KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGF1ZGlvb3Aodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0YmluYXNjaWkodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0Y21hdGgodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0ZXJybm8odm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0aW1hZ2VvcCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRtYXRoKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdG1kNSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRudCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRvczIodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0b3BlcmF0b3Iodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0cG9zaXgodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0cmdiaW1nKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHNpZ25hbCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRzZWxlY3Qodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X3NvY2tldCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRzdHJ1Y3Qodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0dGltZSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfdGhyZWFkKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHBjcmUodm9pZCk7Ci0jaWZkZWYgV0lOMzIKLWV4dGVybiB2b2lkIGluaXRtc3ZjcnQodm9pZCk7Ci0jZW5kaWYKLQotLyogLS0gQURETU9EVUxFIE1BUktFUiAxIC0tICovCi0KLWV4dGVybiB2b2lkIFB5TWFyc2hhbF9Jbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGltcCh2b2lkKTsKLQotc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW10gPSB7Ci0KLSAgICAgICAgeyJhcnJheSIsIGluaXRhcnJheX0sCi0jaWZkZWYgTV9JMzg2Ci0gICAgICAgIHsiYXVkaW9vcCIsIGluaXRhdWRpb29wfSwKLSNlbmRpZgotICAgICAgICB7ImJpbmFzY2lpIiwgaW5pdGJpbmFzY2lpfSwKLSAgICAgICAgeyJjbWF0aCIsIGluaXRjbWF0aH0sCi0gICAgICAgIHsiZXJybm8iLCBpbml0ZXJybm99LAotLy8gICAgICAgIHsiaW1hZ2VvcCIsIGluaXRpbWFnZW9wfSwKLSAgICAgICAgeyJtYXRoIiwgaW5pdG1hdGh9LAotICAgICAgICB7Im1kNSIsIGluaXRtZDV9LAotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pCi0gICAgICAgIHsibnQiLCBpbml0bnR9LCAvKiBVc2UgdGhlIE5UIG9zIGZ1bmN0aW9ucywgbm90IHBvc2l4ICovCi0jZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIHsib3MyIiwgaW5pdG9zMn0sCi0jZWxzZQotICAgICAgICB7InBvc2l4IiwgaW5pdHBvc2l4fSwKLSNlbmRpZgotI2VuZGlmCi0gICAgICAgIHsib3BlcmF0b3IiLCBpbml0b3BlcmF0b3J9LAotLy8gICAgICAgIHsicmdiaW1nIiwgaW5pdHJnYmltZ30sCi0gICAgICAgIHsic2lnbmFsIiwgaW5pdHNpZ25hbH0sCi0jaWZkZWYgVVNFX1NPQ0tFVAotICAgICAgICB7Il9zb2NrZXQiLCBpbml0X3NvY2tldH0sCi0gICAgICAgIHsic2VsZWN0IiwgaW5pdHNlbGVjdH0sCi0jZW5kaWYKLSAgICAgICAgeyJzdHJ1Y3QiLCBpbml0c3RydWN0fSwKLSAgICAgICAgeyJ0aW1lIiwgaW5pdHRpbWV9LAotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgICAgIHsiX3RocmVhZCIsIGluaXRfdGhyZWFkfSwKLSNlbmRpZgotICAgICAgICB7InBjcmUiLCBpbml0cGNyZX0sCi0jaWZkZWYgV0lOMzIKLSAgICAgICAgeyJtc3ZjcnQiLCBpbml0bXN2Y3J0fSwKLSNlbmRpZgotCi0vKiAtLSBBRERNT0RVTEUgTUFSS0VSIDIgLS0gKi8KLQotICAgICAgICAvKiBUaGlzIG1vZHVsZSAibGl2ZXMgaW4iIHdpdGggbWFyc2hhbC5jICovCi0gICAgICAgIHsibWFyc2hhbCIsIFB5TWFyc2hhbF9Jbml0fSwKLQotICAgICAgICAvKiBUaGlzIGxpdmVzIGl0IHdpdGggaW1wb3J0LmMgKi8KLSAgICAgICAgeyJfaW1wIiwgaW5pdGltcH0sCi0KLSAgICAgICAgLyogVGhlc2UgZW50cmllcyBhcmUgaGVyZSBmb3Igc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzICovCi0gICAgICAgIHsiYnVpbHRpbnMiLCBOVUxMfSwKLSAgICAgICAgeyJzeXMiLCBOVUxMfSwKLQotICAgICAgICAvKiBTZW50aW5lbCAqLwotICAgICAgICB7MCwgMH0KLX07CmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9nZXRwYXRocC5jIGIvUEMvb3MydmFjcHAvZ2V0cGF0aHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJjMjgyNy4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9nZXRwYXRocC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDgyICswLDAgQEAKLQotLyogUmV0dXJuIHRoZSBpbml0aWFsIG1vZHVsZSBzZWFyY2ggcGF0aC4gKi8KLS8qIFVzZWQgYnkgRE9TLCBPUy8yLCBXaW5kb3dzIDMuMS4gIFdvcmtzIG9uIE5UIHRvby4gKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgIm9zZGVmcy5oIgotCi0jaWZkZWYgTVNfV0lOMzIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci1leHRlcm4gQk9PTCBQeVdpbl9Jc1dpbjMycyh2b2lkKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZiAvKiBIQVZFX1VOSVNURF9IICovCi0KLS8qIFNlYXJjaCBpbiBzb21lIGNvbW1vbiBsb2NhdGlvbnMgZm9yIHRoZSBhc3NvY2lhdGVkIFB5dGhvbiBsaWJyYXJpZXMuCi0gKgotICogVHdvIGRpcmVjdG9yaWVzIG11c3QgYmUgZm91bmQsIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBkaXJlY3RvcnkKLSAqIChwcmVmaXgpLCBjb250YWluaW5nIHRoZSBjb21tb24gLnB5IGFuZCAucHljIGZpbGVzLCBhbmQgdGhlIHBsYXRmb3JtCi0gKiBkZXBlbmRlbnQgZGlyZWN0b3J5IChleGVjX3ByZWZpeCksIGNvbnRhaW5pbmcgdGhlIHNoYXJlZCBsaWJyYXJ5Ci0gKiBtb2R1bGVzLiAgTm90ZSB0aGF0IHByZWZpeCBhbmQgZXhlY19wcmVmaXggY2FuIGJlIHRoZSBzYW1lIGRpcmVjdG9yeSwKLSAqIGJ1dCBmb3Igc29tZSBpbnN0YWxsYXRpb25zLCB0aGV5IGFyZSBkaWZmZXJlbnQuCi0gKgotICogUHlfR2V0UGF0aCgpIHRyaWVzIHRvIHJldHVybiBhIHNlbnNpYmxlIFB5dGhvbiBtb2R1bGUgc2VhcmNoIHBhdGguCi0gKgotICogRmlyc3QsIHdlIGxvb2sgdG8gc2VlIGlmIHRoZSBleGVjdXRhYmxlIGlzIGluIGEgc3ViZGlyZWN0b3J5IG9mCi0gKiB0aGUgUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeS4gIFdlIGNhbGN1bGF0ZSB0aGUgZnVsbCBwYXRoIG9mIHRoZQotICogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgYXMgcHJvZ3BhdGguICBXZSB3b3JrIGJhY2t3YXJkcwotICogYWxvbmcgcHJvZ3BhdGggYW5kIGxvb2sgZm9yICRkaXIvTW9kdWxlcy9TZXR1cC5pbiwgYSBkaXN0aW5jdGl2ZQotICogbGFuZG1hcmsuICBJZiBmb3VuZCwgd2UgdXNlICRkaXIvTGliIGFzICRyb290LiAgVGhlIHJldHVybmVkCi0gKiBQeXRob24gcGF0aCBpcyB0aGUgY29tcGlsZWQgI2RlZmluZSBQWVRIT05QQVRIIHdpdGggYWxsIHRoZSBpbml0aWFsCi0gKiAiLi9saWIiIHJlcGxhY2VkIGJ5ICRyb290LgotICoKLSAqIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYSBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCB3ZSByZXR1cm4gdGhhdC4KLSAqCi0gKiBPdGhlcndpc2Ugd2UgdHJ5IHRvIGZpbmQgJHByb2dwYXRoL2xpYi9vcy5weSwgYW5kIGlmIGZvdW5kLCB0aGVuCi0gKiByb290IGlzICRwcm9ncGF0aC9saWIsIGFuZCB3ZSByZXR1cm4gUHl0aG9uIHBhdGggYXMgY29tcGlsZWQgUFlUSE9OUEFUSAotICogd2l0aCBhbGwgIi4vbGliIiByZXBsYWNlZCBieSAkcm9vdCAoYXMgYWJvdmUpLgotICoKLSAqLwotCi0jaWZuZGVmIExBTkRNQVJLCi0jZGVmaW5lIExBTkRNQVJLICJsaWJcXG9zLnB5IgotI2VuZGlmCi0KLXN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKLXN0YXRpYyBjaGFyIHByb2dwYXRoW01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLQotCi1zdGF0aWMgaW50Ci1pc19zZXAoY2hhciBjaCkgLyogZGV0ZXJtaW5lIGlmICJjaCIgaXMgYSBzZXBhcmF0b3IgY2hhcmFjdGVyICovCi17Ci0jaWZkZWYgQUxUU0VQCi0gICAgcmV0dXJuIGNoID09IFNFUCB8fCBjaCA9PSBBTFRTRVA7Ci0jZWxzZQotICAgIHJldHVybiBjaCA9PSBTRVA7Ci0jZW5kaWYKLX0KLQotCi1zdGF0aWMgdm9pZAotcmVkdWNlKGNoYXIgKmRpcikKLXsKLSAgICBpbnQgaSA9IHN0cmxlbihkaXIpOwotICAgIHdoaWxlIChpID4gMCAmJiAhaXNfc2VwKGRpcltpXSkpCi0gICAgICAgIC0taTsKLSAgICBkaXJbaV0gPSAnXDAnOwotfQotCi0KLXN0YXRpYyBpbnQKLWV4aXN0cyhjaGFyICpmaWxlbmFtZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gICAgcmV0dXJuIHN0YXQoZmlsZW5hbWUsICZidWYpID09IDA7Ci19Ci0KLQotLyogQWRkIGEgcGF0aCBjb21wb25lbnQsIGJ5IGFwcGVuZGluZyBzdHVmZiB0byBidWZmZXIuCi0gICBidWZmZXIgbXVzdCBoYXZlIGF0IGxlYXN0IE1BWFBBVEhMRU4gKyAxIGJ5dGVzIGFsbG9jYXRlZCwgYW5kIGNvbnRhaW4gYQotICAgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbm8gbW9yZSB0aGFuIE1BWFBBVEhMRU4gY2hhcmFjdGVycyAobm90IGNvdW50aW5nCi0gICB0aGUgdHJhaWxpbmcgTlVMKS4gIEl0J3MgYSBmYXRhbCBlcnJvciBpZiBpdCBjb250YWlucyBhIHN0cmluZyBsb25nZXIgdGhhbgotICAgdGhhdCAoY2FsbGVycyBtdXN0IGJlIGNhcmVmdWwhKS4gIElmIHRoZXNlIHJlcXVpcmVtZW50cyBhcmUgbWV0LCBpdCdzCi0gICBndWFyYW50ZWVkIHRoYXQgYnVmZmVyIHdpbGwgc3RpbGwgYmUgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBubyBtb3JlCi0gICB0aGFuIE1BWFBBVEhMRU4gY2hhcmFjdGVycyBhdCBleGl0LiAgSWYgc3R1ZmYgaXMgdG9vIGxvbmcsIG9ubHkgYXMgbXVjaCBvZgotICAgc3R1ZmYgYXMgZml0cyB3aWxsIGJlIGFwcGVuZGVkLgotKi8KLXN0YXRpYyB2b2lkCi1qb2luKGNoYXIgKmJ1ZmZlciwgY2hhciAqc3R1ZmYpCi17Ci0gICAgaW50IG4sIGs7Ci0gICAgaWYgKGlzX3NlcChzdHVmZlswXSkpCi0gICAgICAgIG4gPSAwOwotICAgIGVsc2UgewotICAgICAgICBuID0gc3RybGVuKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChuID4gMCAmJiAhaXNfc2VwKGJ1ZmZlcltuLTFdKSAmJiBuIDwgTUFYUEFUSExFTikKLSAgICAgICAgICAgIGJ1ZmZlcltuKytdID0gU0VQOwotICAgIH0KLSAgICBpZiAobiA+IE1BWFBBVEhMRU4pCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3Mgam9pbnBhdGgoKSIpOwotICAgIGsgPSBzdHJsZW4oc3R1ZmYpOwotICAgIGlmIChuICsgayA+IE1BWFBBVEhMRU4pCi0gICAgICAgIGsgPSBNQVhQQVRITEVOIC0gbjsKLSAgICBzdHJuY3B5KGJ1ZmZlcituLCBzdHVmZiwgayk7Ci0gICAgYnVmZmVyW24ra10gPSAnXDAnOwotfQotCi0KLXN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KGNoYXIgKmFyZ3YwX3BhdGgsIGNoYXIgKmxhbmRtYXJrKQotewotICAgIGludCBuOwotCi0gICAgLyogU2VhcmNoIGZyb20gYXJndjBfcGF0aCwgdW50aWwgcm9vdCBpcyBmb3VuZCAqLwotICAgIHN0cmNweShwcmVmaXgsIGFyZ3YwX3BhdGgpOwotICAgIGRvIHsKLSAgICAgICAgbiA9IHN0cmxlbihwcmVmaXgpOwotICAgICAgICBqb2luKHByZWZpeCwgbGFuZG1hcmspOwotICAgICAgICBpZiAoZXhpc3RzKHByZWZpeCkpIHsKLSAgICAgICAgICAgIHByZWZpeFtuXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBwcmVmaXhbbl0gPSAnXDAnOwotICAgICAgICByZWR1Y2UocHJlZml4KTsKLSAgICB9IHdoaWxlIChwcmVmaXhbMF0pOwotICAgIHJldHVybiAwOwotfQotCi0jaWZkZWYgTVNfV0lOMzIKLSNpbmNsdWRlICJtYWxsb2MuaCIgLy8gZm9yIGFsbG9jYSAtIHNlZSBjb21tZW50cyBiZWxvdyEKLWV4dGVybiBjb25zdCBjaGFyICpQeVdpbl9ETExWZXJzaW9uU3RyaW5nOyAvLyBhIHN0cmluZyBsb2FkZWQgZnJvbSB0aGUgRExMIGF0IHN0YXJ0dXAuCi0KLQotLyogTG9hZCBhIFBZVEhPTlBBVEggdmFsdWUgZnJvbSB0aGUgcmVnaXN0cnkuCi0gICBMb2FkIGZyb20gZWl0aGVyIEhLRVlfTE9DQUxfTUFDSElORSBvciBIS0VZX0NVUlJFTlRfVVNFUi4KLQotICAgUmV0dXJucyBOVUxMLCBvciBhIHBvaW50ZXIgdGhhdCBzaG91bGQgYmUgZnJlZWQuCi0qLwotCi1zdGF0aWMgY2hhciAqCi1nZXRweXRob25yZWdwYXRoKEhLRVkga2V5QmFzZSwgQk9PTCBiV2luMzJzKQotewotICAgIEhLRVkgbmV3S2V5ID0gMDsKLSAgICBEV09SRCBuYW1lU2l6ZSA9IDA7Ci0gICAgRFdPUkQgZGF0YVNpemUgPSAwOwotICAgIERXT1JEIG51bUVudHJpZXMgPSAwOwotICAgIExPTkcgcmM7Ci0gICAgY2hhciAqcmV0dmFsID0gTlVMTDsKLSAgICBjaGFyICpkYXRhQnVmOwotICAgIGNvbnN0IGNoYXIga2V5UHJlZml4W10gPSAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxcIjsKLSAgICBjb25zdCBjaGFyIGtleVN1ZmZpeFtdID0gIlxcUHl0aG9uUGF0aCI7Ci0gICAgaW50IHZlcnNpb25MZW47Ci0gICAgY2hhciAqa2V5QnVmOwotCi0gICAgLy8gVHJpZWQgdG8gdXNlIHN5c2dldCgid2ludmVyIikgYnV0IGhlcmUgaXMgdG9vIGVhcmx5IDotKAotICAgIHZlcnNpb25MZW4gPSBzdHJsZW4oUHlXaW5fRExMVmVyc2lvblN0cmluZyk7Ci0gICAgLy8gYWxsb2NhID09IG5vIGZyZWUgcmVxdWlyZWQsIGJ1dCBtZW1vcnkgb25seSBsb2NhbCB0byBmbi4KLSAgICAvLyBhbHNvIG5vIGhlYXAgZnJhZ21lbnRhdGlvbiEgIEFtIEkgYmVpbmcgc2lsbHk/Ci0gICAga2V5QnVmID0gYWxsb2NhKHNpemVvZihrZXlQcmVmaXgpLTEgKyB2ZXJzaW9uTGVuICsgc2l6ZW9mKGtleVN1ZmZpeCkpOyAvLyBjaGFycyBvbmx5LCBwbHVzIDEgTlVMTC4KLSAgICAvLyBsb3RzIG9mIGNvbnN0YW50cyBoZXJlIGZvciB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgYXdheSA6LSkKLSAgICBtZW1jcHkoa2V5QnVmLCBrZXlQcmVmaXgsIHNpemVvZihrZXlQcmVmaXgpLTEpOwotICAgIG1lbWNweShrZXlCdWYrc2l6ZW9mKGtleVByZWZpeCktMSwgUHlXaW5fRExMVmVyc2lvblN0cmluZywgdmVyc2lvbkxlbik7Ci0gICAgbWVtY3B5KGtleUJ1ZitzaXplb2Yoa2V5UHJlZml4KS0xK3ZlcnNpb25MZW4sIGtleVN1ZmZpeCwgc2l6ZW9mKGtleVN1ZmZpeCkpOyAvLyBOVUxMIGNvbWVzIHdpdGggdGhpcyBvbmUhCi0KLSAgICByYz1SZWdPcGVuS2V5KGtleUJhc2UsCi0gICAgICAgICAgICAgICAgICBrZXlCdWYsCi0gICAgICAgICAgICAgICAgICAmbmV3S2V5KTsKLSAgICBpZiAocmM9PUVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgUmVnUXVlcnlJbmZvS2V5KG5ld0tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZudW1FbnRyaWVzLCAmbmFtZVNpemUsICZkYXRhU2l6ZSwgTlVMTCwgTlVMTCk7Ci0gICAgfQotICAgIGlmIChiV2luMzJzICYmIG51bUVudHJpZXM9PTAgJiYgZGF0YVNpemU9PTApIHsKLSAgICAgICAgLyogbXVzdCBoYXJkY29kZSBmb3IgV2luMzJzICovCi0gICAgICAgIG51bUVudHJpZXMgPSAxOwotICAgICAgICBkYXRhU2l6ZSA9IDUxMTsKLSAgICB9Ci0gICAgaWYgKG51bUVudHJpZXMpIHsKLSAgICAgICAgLyogTG9vcCBvdmVyIGFsbCBzdWJrZXlzLiAqLwotICAgICAgICAvKiBXaW4zMnMgZG9lc250IGtub3cgaG93IG1hbnkgc3Via2V5cywgc28gd2UgZG8KLSAgICAgICAgICAgaXQgdHdpY2UgKi8KLSAgICAgICAgY2hhciBrZXlCdWZbTUFYX1BBVEgrMV07Ci0gICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgIGludCBvZmYgPSAwOwotICAgICAgICBmb3IoaW5kZXg9MDs7aW5kZXgrKykgewotICAgICAgICAgICAgbG9uZyByZXFkU2l6ZSA9IDA7Ci0gICAgICAgICAgICBEV09SRCByYyA9IFJlZ0VudW1LZXkobmV3S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBrZXlCdWYsIE1BWF9QQVRIKzEpOwotICAgICAgICAgICAgaWYgKHJjKSBicmVhazsKLSAgICAgICAgICAgIHJjID0gUmVnUXVlcnlWYWx1ZShuZXdLZXksIGtleUJ1ZiwgTlVMTCwgJnJlcWRTaXplKTsKLSAgICAgICAgICAgIGlmIChyYykgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoYldpbjMycyAmJiByZXFkU2l6ZT09MCkgcmVxZFNpemUgPSA1MTI7Ci0gICAgICAgICAgICBkYXRhU2l6ZSArPSByZXFkU2l6ZSArIDE7IC8qIDEgZm9yIHRoZSAiOyIgKi8KLSAgICAgICAgfQotICAgICAgICBkYXRhQnVmID0gbWFsbG9jKGRhdGFTaXplKzEpOwotICAgICAgICBpZiAoZGF0YUJ1Zj09TlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOyAvKiBwcmV0dHkgc2VyaW91cz8gIFJhaXNlIGVycm9yPyAqLwotICAgICAgICAvKiBOb3cgbG9vcCBvdmVyLCBncmFiYmluZyB0aGUgcGF0aHMuCi0gICAgICAgICAgIFN1YmtleXMgYmVmb3JlIG1haW4gbGlicmFyeSAqLwotICAgICAgICBmb3IoaW5kZXg9MDs7aW5kZXgrKykgewotICAgICAgICAgICAgaW50IGFkanVzdDsKLSAgICAgICAgICAgIGxvbmcgcmVxZFNpemUgPSBkYXRhU2l6ZTsKLSAgICAgICAgICAgIERXT1JEIHJjID0gUmVnRW51bUtleShuZXdLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIGtleUJ1ZixNQVhfUEFUSCsxKTsKLSAgICAgICAgICAgIGlmIChyYykgYnJlYWs7Ci0gICAgICAgICAgICByYyA9IFJlZ1F1ZXJ5VmFsdWUobmV3S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUJ1ZiwgZGF0YUJ1ZitvZmYsICZyZXFkU2l6ZSk7Ci0gICAgICAgICAgICBpZiAocmMpIGJyZWFrOwotICAgICAgICAgICAgaWYgKHJlcWRTaXplPjEpIHsKLSAgICAgICAgICAgICAgICAvKiBJZiBOb3RoaW5nLCBvciBvbmx5ICdcMCcgY29waWVkLiAqLwotICAgICAgICAgICAgICAgIGFkanVzdCA9IHN0cmxlbihkYXRhQnVmK29mZik7Ci0gICAgICAgICAgICAgICAgZGF0YVNpemUgLT0gYWRqdXN0OwotICAgICAgICAgICAgICAgIG9mZiArPSBhZGp1c3Q7Ci0gICAgICAgICAgICAgICAgZGF0YUJ1ZltvZmYrK10gPSAnOyc7Ci0gICAgICAgICAgICAgICAgZGF0YUJ1ZltvZmZdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBkYXRhU2l6ZS0tOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIEFkZGl0aW9uYWxseSwgd2luMzJzIGRvZXNudCB3b3JrIGFzIGV4cGVjdGVkLCBzbwotICAgICAgICAgICB0aGUgc3BlY2lmaWMgc3RybGVuKCkgaXMgcmVxdWlyZWQgZm9yIDMuMS4gKi8KLSAgICAgICAgcmMgPSBSZWdRdWVyeVZhbHVlKG5ld0tleSwgIiIsIGRhdGFCdWYrb2ZmLCAmZGF0YVNpemUpOwotICAgICAgICBpZiAocmM9PUVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGlmIChzdHJsZW4oZGF0YUJ1Zik9PTApCi0gICAgICAgICAgICAgICAgZnJlZShkYXRhQnVmKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBkYXRhQnVmOyAvKiBjYWxsZXIgd2lsbCBmcmVlICovCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJlZShkYXRhQnVmKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3S2V5KQotICAgICAgICBSZWdDbG9zZUtleShuZXdLZXkpOwotICAgIHJldHVybiByZXR2YWw7Ci19Ci0jZW5kaWYgLyogTVNfV0lOMzIgKi8KLQotc3RhdGljIHZvaWQKLWdldF9wcm9ncGF0aCh2b2lkKQotewotICAgIGV4dGVybiBjaGFyICpQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKLSAgICBjaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIIik7Ci0gICAgY2hhciAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7Ci0KLSNpZmRlZiBNU19XSU4zMgotICAgIGlmIChHZXRNb2R1bGVGaWxlTmFtZShOVUxMLCBwcm9ncGF0aCwgTUFYUEFUSExFTikpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIGlmIChwcm9nID09IE5VTEwgfHwgKnByb2cgPT0gJ1wwJykKLSAgICAgICAgcHJvZyA9ICJweXRob24iOwotCi0gICAgLyogSWYgdGhlcmUgaXMgbm8gc2xhc2ggaW4gdGhlIGFyZ3YwIHBhdGgsIHRoZW4gd2UgaGF2ZSB0bwotICAgICAqIGFzc3VtZSBweXRob24gaXMgb24gdGhlIHVzZXIncyAkUEFUSCwgc2luY2UgdGhlcmUncyBubwotICAgICAqIG90aGVyIHdheSB0byBmaW5kIGEgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gIElmCi0gICAgICogJFBBVEggaXNuJ3QgZXhwb3J0ZWQsIHlvdSBsb3NlLgotICAgICAqLwotI2lmZGVmIEFMVFNFUAotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSB8fCBzdHJjaHIocHJvZywgQUxUU0VQKSkKLSNlbHNlCi0gICAgaWYgKHN0cmNocihwcm9nLCBTRVApKQotI2VuZGlmCi0gICAgICAgIHN0cmNweShwcm9ncGF0aCwgcHJvZyk7Ci0gICAgZWxzZSBpZiAocGF0aCkgewotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgY2hhciAqZGVsaW0gPSBzdHJjaHIocGF0aCwgREVMSU0pOwotCi0gICAgICAgICAgICBpZiAoZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gZGVsaW0gLSBwYXRoOwotICAgICAgICAgICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHBhdGgsIGxlbik7Ci0gICAgICAgICAgICAgICAgKihwcm9ncGF0aCArIGxlbikgPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0cmNweShwcm9ncGF0aCwgcGF0aCk7Ci0KLSAgICAgICAgICAgIGpvaW4ocHJvZ3BhdGgsIHByb2cpOwotICAgICAgICAgICAgaWYgKGV4aXN0cyhwcm9ncGF0aCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICghZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotfQotCi1zdGF0aWMgdm9pZAotY2FsY3VsYXRlX3BhdGgodm9pZCkKLXsKLSAgICBjaGFyIGFyZ3YwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBjaGFyICpidWY7Ci0gICAgaW50IGJ1ZnN6OwotICAgIGNoYXIgKnB5dGhvbmhvbWUgPSBQeV9HZXRQeXRob25Ib21lKCk7Ci0gICAgY2hhciAqZW52cGF0aCA9IFB5X0dFVEVOVigiUFlUSE9OUEFUSCIpOwotI2lmZGVmIE1TX1dJTjMyCi0gICAgY2hhciAqbWFjaGluZXBhdGgsICp1c2VycGF0aDsKLQotICAgIC8qIEFyZSB3ZSBydW5uaW5nIHVuZGVyIFdpbmRvd3MgMy4xKDEpIFdpbjMycz8gKi8KLSAgICBpZiAoUHlXaW5fSXNXaW4zMnMoKSkgewotICAgICAgICAvKiBPbmx5IENMQVNTRVNfUk9PVCBpcyBzdXBwb3J0ZWQgKi8KLSAgICAgICAgbWFjaGluZXBhdGggPSBnZXRweXRob25yZWdwYXRoKEhLRVlfQ0xBU1NFU19ST09ULCBUUlVFKTsKLSAgICAgICAgdXNlcnBhdGggPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1hY2hpbmVwYXRoID0gZ2V0cHl0aG9ucmVncGF0aChIS0VZX0xPQ0FMX01BQ0hJTkUsIEZBTFNFKTsKLSAgICAgICAgdXNlcnBhdGggPSBnZXRweXRob25yZWdwYXRoKEhLRVlfQ1VSUkVOVF9VU0VSLCBGQUxTRSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBnZXRfcHJvZ3BhdGgoKTsKLSAgICBzdHJjcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgpOwotICAgIHJlZHVjZShhcmd2MF9wYXRoKTsKLSAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMIHx8ICpweXRob25ob21lID09ICdcMCcpIHsKLSAgICAgICAgaWYgKHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIExBTkRNQVJLKSkKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBwcmVmaXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICBjaGFyICpkZWxpbTsKLQotICAgICAgICBzdHJjcHkocHJlZml4LCBweXRob25ob21lKTsKLQotICAgIC8qIEV4dHJhY3QgQW55IE9wdGlvbmFsIFRyYWlsaW5nIEVYRUNfUFJFRklYICovCi0gICAgLyogZS5nLiBQWVRIT05IT01FPTxwcmVmaXg+OjxleGVjX3ByZWZpeD4gICAqLwotICAgIGRlbGltID0gc3RyY2hyKHByZWZpeCwgREVMSU0pOwotICAgIGlmIChkZWxpbSkgewotICAgICAgICAqZGVsaW0gPSAnXDAnOwotICAgICAgICBzdHJjcHkoZXhlY19wcmVmaXgsIGRlbGltKzEpOwotICAgIH0gZWxzZQotICAgICAgICBzdHJjcHkoZXhlY19wcmVmaXgsIEVYRUNfUFJFRklYKTsKLSAgICB9Ci0KLSAgICBpZiAoZW52cGF0aCAmJiAqZW52cGF0aCA9PSAnXDAnKQotICAgICAgICBlbnZwYXRoID0gTlVMTDsKLQotICAgIC8qIFdlIG5lZWQgdG8gY29uc3RydWN0IGEgcGF0aCBmcm9tIHRoZSBmb2xsb3dpbmcgcGFydHM6Ci0gICAgICAgKDEpIHRoZSBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBpZiBzZXQ7Ci0gICAgICAgKDIpIGZvciBXaW4zMiwgdGhlIG1hY2hpbmVwYXRoIGFuZCB1c2VycGF0aCwgaWYgc2V0OwotICAgICAgICgzKSB0aGUgUFlUSE9OUEFUSCBjb25maWcgbWFjcm8sIHdpdGggdGhlIGxlYWRpbmcgIi4iCi0gICAgICAgICAgIG9mIGVhY2ggY29tcG9uZW50IHJlcGxhY2VkIHdpdGggcHl0aG9uaG9tZSwgaWYgc2V0OwotICAgICAgICg0KSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgKGFyZ3YwX3BhdGgpLgotICAgICAgIFRoZSBsZW5ndGggY2FsY3VsYXRpb24gY2FsY3VsYXRlcyAjMyBmaXJzdC4KLSAgICAqLwotCi0gICAgLyogQ2FsY3VsYXRlIHNpemUgb2YgcmV0dXJuIGJ1ZmZlciAqLwotICAgIGlmIChweXRob25ob21lICE9IE5VTEwpIHsKLSAgICAgICAgY2hhciAqcDsKLSAgICAgICAgYnVmc3ogPSAxOwotICAgICAgICBmb3IgKHAgPSBQWVRIT05QQVRIOyAqcDsgcCsrKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPT0gREVMSU0pCi0gICAgICAgICAgICAgICAgYnVmc3orKzsgLyogbnVtYmVyIG9mIERFTElNIHBsdXMgb25lICovCi0gICAgICAgIH0KLSAgICAgICAgYnVmc3ogKj0gc3RybGVuKHB5dGhvbmhvbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGJ1ZnN6ID0gMDsKLSAgICBidWZzeiArPSBzdHJsZW4oUFlUSE9OUEFUSCkgKyAxOwotICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCi0gICAgICAgIGJ1ZnN6ICs9IHN0cmxlbihlbnZwYXRoKSArIDE7Ci0gICAgYnVmc3ogKz0gc3RybGVuKGFyZ3YwX3BhdGgpICsgMTsKLSNpZmRlZiBNU19XSU4zMgotICAgIGlmIChtYWNoaW5lcGF0aCkKLSAgICAgICAgYnVmc3ogKz0gc3RybGVuKG1hY2hpbmVwYXRoKSArIDE7Ci0gICAgaWYgKHVzZXJwYXRoKQotICAgICAgICBidWZzeiArPSBzdHJsZW4odXNlcnBhdGgpICsgMTsKLSNlbmRpZgotCi0gICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmID0gbWFsbG9jKGJ1ZnN6KTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgLyogV2UgY2FuJ3QgZXhpdCwgc28gcHJpbnQgYSB3YXJuaW5nIGFuZCBsaW1wIGFsb25nICovCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgbWFsbG9jIGR5bmFtaWMgUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICBpZiAoZW52cGF0aCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyAkUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gZW52cGF0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZW52aXJvbm1lbnQgJFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFBZVEhPTlBBVEg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChlbnZwYXRoKSB7Ci0gICAgICAgIHN0cmNweShidWYsIGVudnBhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotI2lmZGVmIE1TX1dJTjMyCi0gICAgaWYgKG1hY2hpbmVwYXRoKSB7Ci0gICAgICAgIHN0cmNweShidWYsIG1hY2hpbmVwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSAgICBpZiAodXNlcnBhdGgpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgdXNlcnBhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewotICAgICAgICBzdHJjcHkoYnVmLCBQWVRIT05QQVRIKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBjaGFyICpwID0gUFlUSE9OUEFUSDsKLSAgICAgICAgY2hhciAqcTsKLSAgICAgICAgaW50IG47Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHEgPSBzdHJjaHIocCwgREVMSU0pOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBuID0gc3RybGVuKHApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG4gPSBxLXA7Ci0gICAgICAgICAgICBpZiAocFswXSA9PSAnLicgJiYgaXNfc2VwKHBbMV0pKSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgcHl0aG9uaG9tZSk7Ci0gICAgICAgICAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIG4tLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0cm5jcHkoYnVmLCBwLCBuKTsKLSAgICAgICAgICAgIGJ1ZiArPSBuOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICAgICAgcCA9IHErMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYXJndjBfcGF0aCkgewotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgYXJndjBfcGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICAqYnVmID0gJ1wwJzsKLX0KLQotCi0vKiBFeHRlcm5hbCBpbnRlcmZhY2UgKi8KLQotY2hhciAqCi1QeV9HZXRQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gbW9kdWxlX3NlYXJjaF9wYXRoOwotfQotCi1jaGFyICoKLVB5X0dldFByZWZpeCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotCi0gICAgcmV0dXJuIHByZWZpeDsKLX0KLQotY2hhciAqCi1QeV9HZXRFeGVjUHJlZml4KHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gZXhlY19wcmVmaXg7Ci19Ci0KLWNoYXIgKgotUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gcHJvZ3BhdGg7Ci19CmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9tYWtlZmlsZSBiL1BDL29zMnZhY3BwL21ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmYwYWRjLi4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL21ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTU0OSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jICAgICAgICAgIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIGZvciBPUy8yCi0jCi0jIFRoaXMgbWFrZWZpbGUgd2FzIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggSUJNJ3MgVmlzdWFsQWdlIEMvQysrCi0jIGZvciBPUy8yIGNvbXBpbGVyLCB2ZXJzaW9uIDMuMCwgd2l0aCBGaXhwYWNrIDggYXBwbGllZC4gIEl0IHVzZXMKLSMgdmVyc2lvbiA0LjAgb2YgdGhlIE5NQUtFIHRvb2wgdGhhdCBjb21lcyB3aXRoIHRoYXQgcGFja2FnZS4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjIzLkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gIFdoZW4gZW1iZWRkaW5nIFB5dGhvbiB3aXRoaW4gYW5vdGhlciBwcm9ncmFtLCBvbmx5Ci0jIFB5dGhvbjIzLkRMTCBpcyBuZWVkZWQuCi0jCi0jIFRoZXNlIHR3byBiaW5hcmllcyBjYW4gYmUgc3RhdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgVmlzdWFsQWdlIEMvQysrCi0jIHJ1bnRpbWUgbGlicmFyeSAocHJvZHVjaW5nIGxhcmdlciBiaW5hcmllcyksIG9yIGR5bmFtaWNhbGx5IGxpbmtlZAotIyB0byBtYWtlIHNtYWxsZXIgb25lcyB0aGF0IHJlcXVpcmUgdGhlIGNvbXBpbGVyIHRvIGJlIGluc3RhbGxlZCBvbgotIyBhbnkgc3lzdGVtIFB5dGhvbiBpcyB1c2VkIG9uLiAgUmV2aWV3IHRoZSAvR2QrIGNvbXBpbGVyIG9wdGlvbiBmb3IKLSMgaG93IHRvIGRvIHRoaXMuCi0jCi0jIE5PVEU6IElCTSdzIE5NQUtFIDQuMCBpcyByYXRoZXIgZHVtYiwgcmVxdWlyaW5nIHRoaXMgbWFrZWZpbGUgdG8KLSMgICAgICAgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gbmVjZXNzYXJ5LiAgSSB1c2UgT3B1c01BS0UKLSMgICAgICAgbXlzZWxmIGZvciBhIG11Y2ggbW9yZSBwb3dlcmZ1bCBNQUtFIHRvb2wgYnV0IG5vdCBldmVyeW9uZQotIyAgICAgICB3aXNoZXMgdG8gYnV5IGl0LiAgSG93ZXZlciwgYXMgYSByZXN1bHQgSSBkaWRuJ3QgaG9vayBpbgotIyAgICAgICB0aGUgZGVwZW5kZW5jaWVzIG9uIHRoZSBpbmNsdWRlIGZpbGVzIGFzIE5NQUtFIGhhcyBubyBlYXN5Ci0jICAgICAgIHdheSB0byBkbyB0aGlzIHdpdGhvdXQgZXhwbGljaXRseSBzcGVsbGluZyBpdCBhbGwgb3V0LgotIwotIyBIaXN0b3J5IChNb3N0IFJlY2VudCBGaXJzdCkKLSMKLSMgMjYtU2VwLTk4IGpyciBSZXRlc3RlZCBhbmQgYWRqdXN0ZWQgZm9yIGJ1aWxkaW5nIHcvUHl0aG9uIDEuNS4yYTEKLSMgMjAtTm92LTk3IGpyciBDbGVhbmVkIFVwIGZvciBBcHBseWluZyB0byBEaXN0cmlidXRpb24KLSMgMjktT2N0LTk3IGpyciBNb2RpZmllZCBmb3IgVXNlIHdpdGggUHl0aG9uIDEuNSBBbHBoYSA0Ci0jIDAzLUF1Zy05NiBqcnIgT3JpZ2luYWwgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjQgUmVsZWFzZQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBsYWNlcyBhbmQgVGhpbmdzCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi1QWV9NT0RVTEVTICAgICAgPSAuLlwuLlxNb2R1bGVzCi1QWV9PQkpFQ1RTICAgICAgPSAuLlwuLlxPYmplY3RzCi1QWV9QQVJTRVIgICAgICAgPSAuLlwuLlxQYXJzZXIKLVBZX1BZVEhPTiAgICAgICA9IC4uXC4uXFB5dGhvbgotUFlfSU5DTFVERSAgICAgID0gLi5cLi5cSW5jbHVkZQotUFlfSU5DTFVERVMgICAgID0gLjskKFBZX0lOQ0xVREUpOyQoUFlfTU9EVUxFUyk7JChQWV9PQkpFQ1RTKTskKFBZX1BBUlNFUik7JChQWV9QWVRIT04pCi0KLSMgRmlsZSB0byBDb2xsZWN0IFdvcmR5IENvbXBpbGVyIE91dHB1dCByZSBFcnJvcnMKLUVSUlMJCT0gbWFrZS5vdXQKLQotIyBXaGVyZSB0byBGaW5kIHRoZSBJQk0gVENQL0lQIFNvY2tldCBJbmNsdWRlcyBhbmQgTGlicmFyaWVzCi1PUzJUQ1BJUCAgICAgICAgPSBDOlxNUFROCi0KLSMgV2hlcmUgdG8gRmluZCB0aGUgVGNsL1RrIEJhc2UgRGlyZWN0b3J5IGZvciBMaWJzL0luY2x1ZGVzCi1UQ0xUSwkJPSBEOlxUY2xUawotVENMQkFTRQkJPSBEOlxUY2w3LjZcT1MyCi1US0JBU0UJCT0gRDpcVGs0LjJcT1MyCi0KLSMgV2hlcmUgdG8gUHV0IHRoZSAuT0JKIEZpbGVzLCBUbyBLZWVwIFRoZW0gT3V0IG9mIHRoZSBXYXkKLVBBVEhPQkoJCT0gb2JqCi0KLSMgU2VhcmNoIFBhdGggZm9yIEluY2x1ZGUgRmlsZXMKLVBST0pJTkNMVURFCT0gLjskKFRDTEJBU0UpOyQoVEtCQVNFKTskKE9TMlRDUElQKVxJbmNsdWRlOyQoUFlfSU5DTFVERVMpCi0KLSMgUGxhY2UgdG8gU2VhcmNoIGZvciBTb3VyY2VzIHJlIE9wdXNNQUtFIERlcGVuZGVuY3kgR2VuZXJhdG9yIChDb21tZXJjaWFsKQotTUtNRl9TUkNTCT0gJChQWV9NT0RVTEVTKVwqLmMgJChQWV9PQkpFQ1RTKVwqLmMgJChQWV9QQVJTRVIpXCouYyAkKFBZX1BZVEhPTilcKi5jCi0KLSMuSERSUEFUSC5jCTo9ICQoUFJPSklOQ0xVREUsOz0gKSAkKC5IRFJQQVRILmMpCi0jLlBBVEguYyAgICAgICAgID0gLjskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotT1RIRVJMSUJTCT0gc28zMmRsbC5saWIgdGNwMzJkbGwubGliICMgVGNsNzYubGliIFRrNDIubGliCi0KLSMjIyMjIyMjIyMjIyMjIyMjCi0jIEluZmVyZW5jZSBSdWxlcwotIyMjIyMjIyMjIyMjIyMjIyMKLXskKFBZX01PRFVMRVMpXH0uY3skKFBBVEhPQkopXH0ub2JqOgkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLXskKFBZX09CSkVDVFMpXH0uY3skKFBBVEhPQkopXH0ub2JqOgkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLXskKFBZX1BBUlNFUilcfS5jeyQoUEFUSE9CSilcfS5vYmo6CSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQoteyQoUFlfUFlUSE9OKVx9LmN7JChQQVRIT0JKKVx9Lm9iajoJIyBDb21waWxlIEMgQ29kZSBpbnRvIGEgLk9CSiBGaWxlCi0JQCBFY2hvIENvbXBpbGluZyAkPAotCUAgJChDQykgLWMgJChDRkxBR1MpIC1GbyRAICQ8ID4+JChFUlJTKQotCi0uY3skKFBBVEhPQkopXH0ub2JqOgkJCSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQeXRob24gU3Vic3lzdGVtcwotIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIFBZVEhPTiBpcyB0aGUgY2VudHJhbCBjb3JlLCBjb250YWluaW5nIHRoZSBidWlsdGlucyBhbmQgaW50ZXJwcmV0ZXIuCi1QWVRIT04JCT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCbHRpbk1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDRXZhbC5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDb21waWxlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxFcnJvcnMub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGcm96ZW4ub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRhcmdzLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRDb21waWxlci5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRDb3B5cmlnaHQub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRNVGltZS5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRPcHQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRQbGF0Zm9ybS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRWZXJzaW9uLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHcmFtSW5pdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJbXBvcnQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJbXBvcnRETC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNYXJzaGFsLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNb2RTdXBwb3J0Lm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNeVN0cnRvdWwub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeVN0YXRlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeXRob25SdW4ub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJ1Y3RNZW1iZXIub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTeXNNb2R1bGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaHJlYWQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUcmFjZUJhY2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGcm96ZW5NYWluLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxleGNlcHRpb25zLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxzeW10YWJsZS5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxjb2RlY3Mub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxmdXR1cmUub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxkeW5sb2FkX29zMi5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxteXNucHJpbnRmLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxpdGVyb2JqZWN0Lm9iagotCi0jIFB5dGhvbidzIEludGVybmFsIFBhcnNlcgotUEFSU0VSCQk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxBY2NlbGVyLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdyYW1tYXIxLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTGlzdE5vZGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxOb2RlLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBhcnNlci5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUGFyc2VUb2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCaXRTZXQub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1ldGFHcmFtbWFyLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVG9rZW5pemVyLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNeVJlYWRsaW5lLm9iagotCi0jIFB5dGhvbiBPYmplY3QgVHlwZXMKLU9CSkVDVFMJCT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEFic3RyYWN0Lm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQm9vbE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCdWZmZXJPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENlbGxPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ2xhc3NPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDT2JqZWN0Lm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENvbXBsZXhPYmplY3Qub2JqIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRGVzY3JPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxEaWN0T2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEVudW1PYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRmlsZU9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGbG9hdE9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZyYW1lT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRnVuY09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJdGVyT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXExpc3RPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTG9uZ09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNZXRob2RPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1vZHVsZU9iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcT2JqZWN0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxPYk1hbGxvYy5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFJhbmdlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU2xpY2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJpbmdPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cnVjdFNlcS5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVHVwbGVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUeXBlT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFVuaWNvZGVPYmplY3Qub2JqIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVW5pY29kZUNUeXBlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxXZWFrcmVmT2JqZWN0Lm9iagotCi0jIEV4dGVuc2lvbiBNb2R1bGVzIChCdWlsdC1JbiBvciBhcyBTZXBhcmF0ZSBETExzKQotTU9EVUxFUwkJPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQXJyYXlNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCaW5Bc2NpaS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENNYXRoTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRXJybm9Nb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHQ01vZHVsZS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldEJ1aWxkSW5mby5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0UGF0aFAub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNYWluLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1hdGhNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTUQ1Yy5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNRDVNb2R1bGUub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE9wZXJhdG9yLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUENSRU1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeVBDUkUub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBvc2l4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUmVnZXhNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxSZWdFeHByLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFNlbGVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU2lnbmFsTW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTb2NrZXRNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cm9wTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3RydWN0TW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaW1lTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRocmVhZE1vZHVsZS5vYmoKLQotIyBTdGFuZGFsb25lIFBhcnNlciBHZW5lcmF0b3IgUHJvZ3JhbSAoU2hhcmVzIFNvbWUgb2YgUHl0aG9uJ3MgTW9kdWxlcykKLVBHRU4gICAgICAgICAgICA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQR2VuLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBHZW5NYWluLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTXlTTlByaW50Zi5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUb2tlbml6ZXJfUGdlbi5vYmogXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQcmludEdyYW1tYXIub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdyYW1tYXIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRmlyc3RTZXRzLm9iagotCi0jIyMjIyMjIyMjIyMjIyMjIyMKLSMgTWFjcm9zIGFuZCBGbGFncwotIyMjIyMjIyMjIyMjIyMjIyMjCi1fQkFTRQkJPSAvUSAvVzIgL0kkKFBST0pJTkNMVURFKQotCQkjIC9RICAgPSBPbWl0IElCTSBDb3B5cmlnaHQKLQkJIyAvVzIgID0gU2hvdyBXYXJuaW5ncy9FcnJvcnMgT25seQotCi1fR0VOCQk9IC9HNCAvR20gL0dkLQotCQkjIC9HNCAgPSBHZW5lcmF0ZSBDb2RlIGZvciA0ODYgKFVzZSAzODYgZm9yIERlYnVnZ2VyKQotCQkjIC9HbSAgPSBVc2UgTXVsdGl0aHJlYWQgUnVudGltZQotCQkjIC9HZCAgPSBEeW5hbWljYWxseSBMb2FkIFJ1bnRpbWUKLQkJIyAvTXMgID0gVXNlIF9TeXN0ZW0gQ2FsbGluZyBDb252ZW50aW9uICh2cyBfT3B0bGluaykKLQkJIyAgICAgICAgKHRvIGFsbG93IG5vbi1WQUMrKyBjb2RlIHRvIGNhbGwgaW50byBQeXRob24yMy5kbGwpCi0KLV9PUFQJCT0gL08gL0dsCi0JCSMgL08gICA9IEVuYWJsZSBTcGVlZC1PcHRpbWl6YXRpb25zCi0JCSMgL09sICA9IFBhc3MgQ29kZSBUaHJ1IEludGVybWVkaWF0ZSBMaW5rZXIKLQkJIyAvR3UgID0gQWR2aXNlIExpbmtlciBBbGwgRXh0IERhdGEgaXMgSUQnZAotCQkjIC9HbCAgPSBIYXZlIExpbmtlciBSZW1vdmUgVW51c2VkIEZucwotCi1fREJHCQk9IC9XcHJvLSAvVGktIC9ESEFWRV9DT05GSUdfSCAvRFVTRV9TT0NLRVQKLSAgICAgICAgICAgICAgICAjIC9XcHJvPSBHZW5lcmF0ZSBDb21waWxlciBXYXJuaW5ncyByZSBNaXNzaW5nIFByb3RvdHlwZXMKLQkJIyAvVGkgID0gRW1iZWQgRGVidWdnZXIvQW5hbHl6ZXIgUmVjcwotCQkjIC9UbSAgPSBFbmFibGUgRGVidWcgTWVtb3J5IEZucwotCQkjIC9UeCAgPSBSZXF1ZXN0IEZ1bGwgRHVtcCBVcG9uIEV4Y2VwdGlvbgotCQkjIC9ESEFWRV9DT05GSUdfSCA9IENhdXNlcyBVc2Ugb2YgQ09ORklHLkggU2V0dGluZ3MKLSAgICAgICAgICAgICAgICAjIC9EVVNFX1NPQ0tFVCA9IEVuYWJsZXMgQnVpbGRpbmcgSW4gb2YgU29ja2V0IEFQSQotCi1fT1VUCQk9IAotCQkjIC9GYiAgPSBFbWJlZCBCcm93c2VyIFJlY3MKLQkJIyAvR2ggID0gR2VuZXJhdGUgQ29kZSBmb3IgUHJvZmlsZXIgSG9va3MKLQkJIyAvRmwgID0gT3V0cHV0IEMvQysrIExpc3RpbmcgRmlsZXMKLSAgICAgICAgICAgICAgICAjIC9MZiAgPSBQcm92aWRlIEZ1bGwgKERldGFpbGVkKSBMaXN0aW5nIEZpbGVzCi0JCSMgL0ZtLiA9IE91dHB1dCBMaW5rZXIgTWFwIEZpbGUKLQkJIyAvRnQuID0gT3V0cHV0IEMrKyBUZW1wbGF0ZSBSZXNvbHV0aW9uIEZpbGVzCi0KLV9NQVAJCT0gL0ZtTm9pc2VcJChAUikubWFwCi0KLV9ETEwJCT0gL0dlLQotX0VYRQkJPSAvR2UKLQkJIyAvR2UgPSBDcmVhdGUgYW4gRVhFLCBub3QgRExMCi0KLUNGTEFHUwkJPSAkKF9CQVNFKSAkKF9HRU4pICQoX09QVCkgJChfREJHKSAkKF9PVVQpICQoX0VYRSkgL1NzCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHJpbWFyeSBUYXJnZXQocykKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLUFsbDogIG9iaiBub2lzZSBQeUNvcmUubGliIFB5dGhvbjIzLmxpYiBQR2VuLmV4ZSBcCi0gICAgICBQeXRob24uZXhlIFB5dGhvblBNLmV4ZSBQeXRob24yMy5kbGwgIyBfdGtpbnRlci5kbGwKLQotTW9kdWxlczogJChNT0RVTEVTKQotT2JqZWN0czogJChPQkpFQ1RTKQotUGFyc2VyOiAgJChQQVJTRVIpCi1QeXRob246ICAkKFBZVEhPTikKLQotIyBEaXJlY3RvcnkgdG8gS2VlcCAuT0JKIEZpbGVzIE91dCBvZiB0aGUgV2F5Ci1vYmo6Ci0JQC1ta2RpciBvYmogPj5OVUwKLQotIyBEaXJlY3RvcnkgdG8gS2VlcCAuTUFQIGFuZCBTdWNoIFRleHQgRmlsZXMgT3V0IG9mIHRoZSBXYXkKLW5vaXNlOgotCUAtbWtkaXIgbm9pc2UgPj5OVUwKLQotIyMjIyMjIyMjIyMjIyMKLSMKLSMjIyMjIyMjIyMjIyMjCi0KLSMgUHl0aG9uIEV4dGVuc2lvbiBETEw6IFRjbC9UayBJbnRlcmZhY2UKLSNfdGtpbnRlci5kbGw6ICQoUEFUSE9CSilcX3RraW50ZXIub2JqIFB5dGhvbjIzLmxpYiBfdGtpbnRlci5kZWYKLSMJQCBFY2hvIExpbmtpbmcgJEAgQXMgRExMCi0jCUAgJChDQykgJChDRkxBR1MpIC9CIi9OT0UiICQoX0RMTCkgL0ZlJEAgJChfTUFQKSAkKiogJChPVEhFUkxJQlMpID4+JChFUlJTKQotCi0jJChQQVRIT0JKKVxfdGtpbnRlci5vYmo6ICQoUFlfTU9EVUxFUylcX3RraW50ZXIuYwotIwlAIEVjaG8gQ29tcGlsaW5nICQqKgotIwlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAkKF9ETEwpIC1GbyRAICQqKiA+PiQoRVJSUykKLQotIyBPYmplY3QgTGlicmFyeSBvZiBBbGwgRXNzZW50aWFsIFB5dGhvbiBSb3V0aW5lcwotUHlDb3JlLmxpYjogJChNT0RVTEVTKSAkKE9CSkVDVFMpICQoUEFSU0VSKSAkKFBZVEhPTikgJChQQVRIT0JKKVxDb25maWcub2JqCi0JQCBFY2hvIEFkZGluZyBVcGRhdGVkIE9iamVjdCBGaWxlcyB0byBMaW5rIExpYnJhcnkgJEAKLQlAICEgSUxJQiAkQCAvTk9MT0dPIC9OT0JBQ0tVUCAtKyQ/IDsgPj4kKEVSUlMpCi0KLVB5dGhvbjIzLmRsbDogJChQQVRIT0JKKVxDb21waWxlLm9iaiBQeUNvcmUubGliIFB5dGhvbi5kZWYKLQlAIEVjaG8gTGlua2luZyAkQCBBcyBETEwKLQlAICQoQ0MpICQoQ0ZMQUdTKSAvQiIvTk9FIiAkKF9ETEwpIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLSMJQCBFY2hvIENvbXByZXNzaW5nICRAIHdpdGggTHhMaXRlCi0jCUAgbHhsaXRlICRACi0KLSMgSUJNIExpbmtlciBSZXF1aXJlcyBPbmUgRXhwbGljaXQgLk9CSiBUbyBCdWlsZCBhIC5ETEwgZnJvbSBhIC5MSUIKLSQoUEFUSE9CSilcQ29tcGlsZS5vYmo6ICQoUFlfUFlUSE9OKVxDb21waWxlLmMKLQlAIEVjaG8gQ29tcGlsaW5nICQqKgotCUAgJChDQykgLWMgJChDRkxBR1MpICQoX0RMTCkgLUZvJEAgJCoqID4+JChFUlJTKQotCi0jIEltcG9ydCBMaWJyYXJ5IGZvciBVc2luZyB0aGUgUHl0aG9uMjMuZGxsCi1QeXRob24yMy5saWI6IFB5dGhvbi5kZWYKLQlAIEVjaG8gTWFraW5nICRACi0JQCBJTVBMSUIgL05PTE9HTyAvTk9JR05PUkUgJEAgJCoqID4+JChFUlJTKQotCUAgSUxJQiAvTk9MT0dPIC9DT05WRk9STUFUIC9OT0VYVERJQ1RJT05BUlkgL05PQlJPV1NFIC9OT0JBQ0tVUCAkQDsgPj4kKEVSUlMpCi0KLSMgU21hbGwgQ29tbWFuZC1MaW5lIFByb2dyYW0gdG8gU3RhcnQgSW50ZXJwcmV0ZXIgaW4gUHl0aG9uMjMuZGxsCi1QeXRob24uZXhlOiAkKFBBVEhPQkopXFB5dGhvbi5vYmogUHl0aG9uMjMubGliCi0JQCBFY2hvIExpbmtpbmcgJEAgQXMgRVhFCi0JQCAkKENDKSAkKENGTEFHUykgJChfRVhFKSAvQiIvUE06VklPIC9TVEFDSzozNjAwMDAiIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotIyBTbWFsbCBQTS1HVUkgUHJvZ3JhbSB0byBTdGFydCBJbnRlcnByZXRlciBpbiBQeXRob24yMy5kbGwKLVB5dGhvblBNLmV4ZTogJChQQVRIT0JKKVxQeXRob24ub2JqIFB5dGhvbjIzLmxpYgotCUAgRWNobyBMaW5raW5nICRAIEFzIEVYRQotCUAgJChDQykgJChDRkxBR1MpICQoX0VYRSkgL0IiL1BNOlBNIC9TVEFDSzozNjAwMDAiIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotUEdlbi5leGU6ICQoUEdFTikgUHlDb3JlLmxpYgotCUAgRWNobyBMaW5raW5nICRAIEFzIEVYRQotCUAgJChDQykgJChDRkxBR1MpICQoX0VYRSkgL0IiL1NUQUNLOjM2MDAwMCIgL0ZlJEAgJChfTUFQKSAkKiogJChPVEhFUkxJQlMpID4+JChFUlJTKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBNaXNjZWxsYW5lb3VzIFRhcmdldHMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgUmVtb3ZlIEludGVybWVkaWF0ZSBUYXJnZXRzIGJ1dCBMZWF2ZSBFeGVjdXRhYmxlIEJpbmFyaWVzCi1jbGVhbjoKLQktLSBEZWwgL1EgJChQQVRIT0JKKVwqLm9iagkJPk5VTCAyPiYxCi0JLS0gRGVsIC9RIC9ZIE5vaXNlCQkJPk5VTCAyPiYxCi0JLS0gRGVsIC9RICQoRVJSUykJCQk+TlVMIDI+JjEKLQotIyBSZW1vdmUgQWxsIFRhcmdldHMsIEluY2x1ZGluZyBGaW5hbCBCaW5hcmllcwotZGlzdGNsZWFuOiBjbGVhbgotICAgICAgICAtLSBEZWwgL1EgUHlDb3JlLmxpYiBQeXRob24yMy5saWIgICAgICAgPk5VTCAyPiYxCi0gICAgICAgIC0tIERlbCAvUSBQeXRob24yMy5kbGwgUHl0aG9uLmV4ZSBQR2VuLmV4ZSA+TlVMIDI+JjEKLQotcmVsZWFzZTogUHl0aG9uLmV4ZSBQeXRob24yMy5kbGwgUHl0aG9uMjMubGliCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgUHl0aG9uLmV4ZSAgIEQ6XEVYRXMKLQktLSBARWNobyBZIHwgY29weSAvVSBQeXRob24yMy5kbGwgRDpcRExMcwotCS0tIEBFY2hvIFkgfCBjb3B5IC9VIFB5dGhvbjIzLmxpYiBFOlxUYXVcTGliCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgX3RraW50ZXIuZGxsIEQ6XFB5dGhvbgotCi10ZXN0OgotICAgICAgICBweXRob24gLi5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLQotIyBVcGRhdGUgRGVwZW5kZW5jaWVzIG9uIFRhcmdldHMgKFVzZXMgT3B1c01BS0UgQ29tbWVyY2lhbCBQcm9kdWN0KQotZGVwZW5kOgotCUQ6XE9wdXNNYWtlXG9zMm1rbWYgLWMgLXMKLQotIyMjIE9QVVMgTUtNRjogIERvIG5vdCByZW1vdmUgdGhpcyBsaW5lISAgR2VuZXJhdGVkIGRlcGVuZGVuY2llcyBmb2xsb3cuCi0KLV90a2ludGVyLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hcnJheW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hdWRpb29wLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotYmluYXNjaWkub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNtYXRobW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY3BpY2tsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNyeXB0bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWN1cnNlc21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1fZGJtbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1lcnJuby5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZXJybm9tb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZmNudGxtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxzeXNcaW9jdGwuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcGVjdGxtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnBldGVzdG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1fZ2RibW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0YnVpbGRpbmZvLm9iajogcHljb25maWcuaAotCi1nZXRwYXRoLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxvc2RlZnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ3JwbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxncnAuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotaW1hZ2VvcC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbWFpbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbWF0aG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteW1hdGguaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1wem1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdpbnRyZXByLmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbmlzbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHRpbWUuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1vcGVyYXRvci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcGFyc2VybW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCBcCi0JICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1pbml0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1wb3NpeC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG15dGltZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXBvc2l4bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcHdkbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChPUzJUQ1BJUClcSW5jbHVkZVxwd2QuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcmVhZGxpbmUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXJlc291cmNlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHRpbWUuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zZWxlY3Rtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxteXNlbGVjdC5oICQoUFlfSU5DTFVERSlcbXl0aW1lLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc2lnbmFsbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNvY2tldG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXG5ldGluZXRcaW4uaCBcCi0JICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHNvY2tldC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChPUzJUQ1BJUClcSW5jbHVkZVxuZXRkYi5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN0cnVjdG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN5c2xvZ21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzbG9nLmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCBcCi0JICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXRlcm1pb3Mub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLV90aHJlYWRtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdGhyZWFkLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10aW1lbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQoteHhtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXpsaWJtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWFic3RyYWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jbGFzc29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNvbXBsZXhvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1kaWN0b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1maWxlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZmxvYXRvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcmFtZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmcmFtZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvcGNvZGUuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnVuY29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWxpc3RvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWxvbmdvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25naW50cmVwci5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tZXRob2RvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdG9rZW4uaCBcCi0JICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1vZHVsZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1vYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXJhbmdlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNsaWNlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN0cmluZ29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXR1cGxlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXR5cGVvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXh4b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hY2NlbGVyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9QQVJTRVIpXHBhcnNlci5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1iaXRzZXQub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLWZpcnN0c2V0cy5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotZ3JhbW1hci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotZ3JhbW1hcjEub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLWludHJjaGVjay5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1saXN0bm9kZS5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLW1ldGFncmFtbWFyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRhZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLW15cmVhZGxpbmUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmgKLQotbm9kZS5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLXBhcnNlci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGVycmNvZGUuaCBcCi0JICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfUEFSU0VSKVxwYXJzZXIuaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotcGFyc2V0b2sub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX1BBUlNFUilccGFyc2VyLmggJChQWV9JTkNMVURFKVxwYXJzZXRvay5oIFwKLQkgJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlcdG9rZW4uaCBcCi0JICQoUFlfUEFSU0VSKVx0b2tlbml6ZXIuaAotCi1wZ2VuLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRhZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLXBnZW5tYWluLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9JTkNMVURFKVxwYXJzZXRvay5oICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmgKLQotcHJpbnRncmFtbWFyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLXRva2VuaXplci5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVx0b2tlbi5oICQoUFlfUEFSU0VSKVx0b2tlbml6ZXIuaAotCi1hdG9mLm9iajogcHljb25maWcuaAotCi1ibHRpbm1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxldmFsLmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY2V2YWwub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGV2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnJhbWVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlcb3Bjb2RlLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jb21waWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxncmFtaW5pdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXG9wY29kZS5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1lcnJvcnMub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZtb2Qub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmgKLQotZnJvemVuLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcm96ZW5tYWluLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRhcmdzLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRjb21waWxlci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRjb3B5cmlnaHQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0cGxhdGZvcm0ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0dmVyc2lvbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccGF0Y2hsZXZlbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1ncmFtaW5pdC5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi1oeXBvdC5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1pbXBvcnQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGVycmNvZGUuaCAkKFBZX0lOQ0xVREUpXGV2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9QWVRIT04pXGltcG9ydGRsLmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1hcnNoYWwuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvc2RlZnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1pbXBvcnRkbC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9QWVRIT04pXGltcG9ydGRsLmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvc2RlZnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1hcnNoYWwub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25naW50cmVwci5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWFyc2hhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1vZHN1cHBvcnQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW15c3RydG91bC5vYmo6IHB5Y29uZmlnLmgKLQotcHlmcGUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlccHlmcGUuaAotCi1weXN0YXRlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1weXRob25ydW4ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxiaXRzZXQuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxlcnJjb2RlLmggJChQWV9JTkNMVURFKVxldmFsLmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCBcCi0JICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWFyc2hhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccGFyc2V0b2suaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNpZ2NoZWNrLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zdHJkdXAub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1zdHJ0b2Qub2JqOiBweWNvbmZpZy5oCi0KLXN0cnVjdG1lbWJlci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN5c21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlcb3NkZWZzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXRocmVhZC5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVx0aHJlYWQuaAotCi10cmFjZWJhY2sub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZyYW1lb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXG9zZGVmcy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9tYWtlZmlsZS5vbWsgYi9QQy9vczJ2YWNwcC9tYWtlZmlsZS5vbWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMTJjOTYuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvbWFrZWZpbGUub21rCisrKyAvZGV2L251bGwKQEAgLTEsMTA0NyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jICAgICAgICAgIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIGZvciBPUy8yCi0jCi0jIFRoaXMgbWFrZWZpbGUgd2FzIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggSUJNJ3MgVmlzdWFsQWdlIEMvQysrCi0jIGZvciBPUy8yIGNvbXBpbGVyLCB2ZXJzaW9uIDMuMCwgd2l0aCBGaXhwYWNrIDggYXBwbGllZC4gIEl0IHVzZXMKLSMgdGhlIGNvbW1lcmNpYWwgT3B1c01BS0UgdG9vbC4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjE1LkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gIFdoZW4gZW1iZWRkaW5nIFB5dGhvbiB3aXRoaW4gYW5vdGhlciBwcm9ncmFtLCBvbmx5Ci0jIFB5dGhvbjE1LkRMTCBpcyBuZWVkZWQuCi0jCi0jIFRoZXNlIHR3byBiaW5hcmllcyBjYW4gYmUgc3RhdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgVmlzdWFsQWdlIEMvQysrCi0jIHJ1bnRpbWUgbGlicmFyeSAocHJvZHVjaW5nIGxhcmdlciBiaW5hcmllcyksIG9yIGR5bmFtaWNhbGx5IGxpbmtlZAotIyB0byBtYWtlIHNtYWxsZXIgb25lcyB0aGF0IHJlcXVpcmUgdGhlIGNvbXBpbGVyIHRvIGJlIGluc3RhbGxlZCBvbgotIyBhbnkgc3lzdGVtIFB5dGhvbiBpcyB1c2VkIG9uLgotIwotIyBIaXN0b3J5IChNb3N0IFJlY2VudCBGaXJzdCkKLSMKLSMgMjAtTm92LTk3IGpyciBDbGVhbmVkIFVwIGZvciBBcHBseWluZyB0byBEaXN0cmlidXRpb24KLSMgMjktT2N0LTk3IGpyciBNb2RpZmllZCBmb3IgVXNlIHdpdGggUHl0aG9uIDEuNSBBbHBoYSA0Ci0jIDAzLUF1Zy05NiBqcnIgT3JpZ2luYWwgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjQgUmVsZWFzZQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBsYWNlcyBhbmQgVGhpbmdzCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi1QWV9NT0RVTEVTICAgICAgPSAuLlwuLlxNb2R1bGVzCi1QWV9PQkpFQ1RTICAgICAgPSAuLlwuLlxPYmplY3RzCi1QWV9QQVJTRVIgICAgICAgPSAuLlwuLlxQYXJzZXIKLVBZX1BZVEhPTiAgICAgICA9IC4uXC4uXFB5dGhvbgotUFlfSU5DTFVERSAgICAgID0gLi5cLi5cSW5jbHVkZQotUFlfSU5DTFVERVMgICAgID0gLjskKFBZX0lOQ0xVREUpOyQoUFlfTU9EVUxFUyk7JChQWV9PQkpFQ1RTKTskKFBZX1BBUlNFUik7JChQWV9QWVRIT04pCi0KLSMgV2hlcmUgdG8gRmluZCB0aGUgSUJNIFRDUC9JUCBTb2NrZXQgSW5jbHVkZXMgYW5kIExpYnJhcmllcwotT1MyVENQSVAgICAgICAgID0gQzpcTVBUTgotCi0jIFdoZXJlIHRvIFB1dCB0aGUgLk9CSiBGaWxlcywgVG8gS2VlcCBUaGVtIE91dCBvZiB0aGUgV2F5Ci0uUEFUSC5vYmoJPSBvYmoKLQotIyBTZWFyY2ggUGF0aCBmb3IgSW5jbHVkZSBGaWxlcwotUFJPSklOQ0xVREUJPSAuOyQoT1MyVENQSVApXEluY2x1ZGU7JChQWV9JTkNMVURFUykKLQotIyBQbGFjZSB0byBTZWFyY2ggZm9yIFNvdXJjZXMgcmUgT3B1c01BS0UgRGVwZW5kZW5jeSBHZW5lcmF0b3IgKENvbW1lcmNpYWwpCi1NS01GX1NSQ1MJPSAkKFBZX01PRFVMRVMpXCouYyAkKFBZX09CSkVDVFMpXCouYyAkKFBZX1BBUlNFUilcKi5jICQoUFlfUFlUSE9OKVwqLmMKLQotLkhEUlBBVEguYwk6PSAkKFBST0pJTkNMVURFLDs9ICkgJCguSERSUEFUSC5jKQotLlBBVEguYyAgICAgICAgID0gLjskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotT1RIRVJMSUJTCT0gJChPUzJUQ1BJUClcbGliXHNvMzJkbGwubGliICQoT1MyVENQSVApXGxpYlx0Y3AzMmRsbC5saWIKLQotIyMjIyMjIyMjIyMjIyMjIyMKLSMgSW5mZXJlbmNlIFJ1bGVzCi0jIyMjIyMjIyMjIyMjIyMjIwotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHl0aG9uIFN1YnN5c3RlbXMKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBQWVRIT04gaXMgdGhlIGNlbnRyYWwgY29yZSwgY29udGFpbmluZyB0aGUgYnVpbHRpbnMgYW5kIGludGVycHJldGVyLgotUFlUSE9OCQk9ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBCbHRpbk1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgQ0V2YWwub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENvbXBpbGUub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBFcnJvcnMub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgRnJvemVuLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldGFyZ3Mub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRDb21waWxlci5vYmogICAgXAotICAgICAgICAgICAgICAgICAgR2V0Q29weXJpZ2h0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEdldE1UaW1lLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRPcHQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgR2V0UGxhdGZvcm0ub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldFZlcnNpb24ub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBHcmFtSW5pdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgSW1wb3J0Lm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEltcG9ydERMLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBNYXJzaGFsLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgTW9kU3VwcG9ydC5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgIE15U3RydG91bC5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBQeVN0YXRlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUHl0aG9uUnVuLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cnVjdE1lbWJlci5vYmogICBcCi0gICAgICAgICAgICAgICAgICBTeXNNb2R1bGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgVGhyZWFkLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFRyYWNlQmFjay5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBGcm96ZW5NYWluLm9iagotCi0jIE9taXR0ZWQgUHl0aG9uIEVsZW1lbnRzIChhbmQgUmVhc29uKToKLSAgIyBhdG9mLmMgICAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIGR1cDIuYyAgICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgZm1vZC5jICAgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBnZXRjd2QuYyAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIGh5cG90LmMgICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgbWVtbW92ZS5jICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBzdHJkdXAuYyAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIHN0cmVycm9yLmMgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgc3RydG9kLmMgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLQotICAjIHNpZ2NoZWNrLmMgICAgICAtLSBQcmltaXRpdmUgU2lnbmFsIENhdGNoZXIgKFNpZ25hbE1vZHVsZS5jIFVzZWQgSW5zdGVhZCkKLSAgIyBweWZwZS5jICAgICAgICAgLS0gUHJpbWl0aXZlIEZQRSBDYXRjaGVyIChOb3QgUmVmZXJlbmNlZCBieSBBbnlvbmUpCi0gICMgZnJvemVubWFpbi5jCi0KLSMgUHl0aG9uJ3MgSW50ZXJuYWwgUGFyc2VyCi1QQVJTRVIJCT0gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQWNjZWxlci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgR3JhbW1hcjEub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgTXlSZWFkbGluZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTm9kZS5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUGFyc2VyLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUGFyc2VUb2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgVG9rZW5pemVyLm9iagotCi0jIFB5dGhvbiBPYmplY3QgVHlwZXMKLU9CSkVDVFMJCT0gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQWJzdHJhY3Qub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgQ2xhc3NPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgQ09iamVjdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgQ29tcGxleE9iamVjdC5vYmogXAotICAgICAgICAgICAgICAgICAgRGljdE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgRmlsZU9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgRmxvYXRPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgRnJhbWVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgRnVuY09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTGlzdE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTG9uZ09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTWV0aG9kT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgTW9kdWxlT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgT2JqZWN0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUmFuZ2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgU2xpY2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgU3RyaW5nT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgVHVwbGVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgVHlwZU9iamVjdC5vYmoKLQotIyBPbWl0dGVkIE9iamVjdHMgKGFuZCBSZWFzb24pOgotICAjIHh4b2JqZWN0LmMgICAgICAtLSBUZW1wbGF0ZSB0byBDcmVhdGUgWW91ciBPd24gT2JqZWN0IFR5cGVzCi0KLSMgRXh0ZW5zaW9uIE1vZHVsZXMgKEJ1aWx0LUluIG9yIGFzIFNlcGFyYXRlIERMTHMpCi1NT0RVTEVTCQk9ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEFycmF5TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEJpbkFzY2lpLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENNYXRoTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEVycm5vTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEdldEJ1aWxkSW5mby5vYmogIFwKLSAgICAgICAgICAgICAgICAgIEdldFBhdGhQLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1haW4ub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1hdGhNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIE1ENWMub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1ENU1vZHVsZS5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgIE9wZXJhdG9yLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFBvc2l4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFJlZ2V4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFJlZ0V4cHIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFJlb3BNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIFNlbGVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNpZ25hbE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNvY2tldE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNvdW5kRXgub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cm9wTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cnVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFRpbWVNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIFRocmVhZE1vZHVsZS5vYmoKLQotIyBPbWl0dGVkIE1vZHVsZXMgKGFuZCBEZXNjcmlwdGlvbi9SZWFzb24pOgotICAjCi0gICMgTXVsdGltZWRpYToKLSAgIyBhdWRpb29wLmMgICAgICAgLS0gVmFyaW91cyBDb21wdXRlIE9wZXJhdGlvbnMgb24gQXVkaW8gU2FtcGxlcwotCi0gICMgRGF0YWJhc2U6Ci0gICMgX2RibW1vZHVsZS5jICAgIC0tIFdyYXBwZXIgb2YgREJNIERhdGFiYXNlIEFQSSAoR2VuZXJpYyBGbGF2b3IpCi0gICMgX2dkYm1tb2R1bGUuYyAgIC0tIFdyYXBwZXIgb2YgREJNIERhdGFiYXNlIEFQSSAoR05VIEZsYXZvcikKLQotICAjIENyeXB0b2dyYXBoeToKLSAgIyBjcnlwdG1vZHVsZS5jICAgLS0gU2ltcGxlIFdyYXBwZXIgZm9yIGNyeXB0KCkgRnVuY3Rpb24KLQotIyAgICAgICAgICAgICAgICAgIGZjbnRsbW9kdWxlLm9iaiAgIFwKLSMgICAgICAgICAgICAgICAgICBmcGVjdGxtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgZnBldGVzdG1vZHVsZS5vYmogXAotIyBVbml4LVNwZWNpZmljICAgIGdldHBhdGgub2JqICAgICAgIFwKLSMgICAgICAgICAgICAgICAgICBncnBtb2R1bGUub2JqICAgICBcCi0jICAgICAgICAgICAgICAgICAgbXB6bW9kdWxlLm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIG5pc21vZHVsZS5vYmogICAgIFwKLSMgICAgICAgICAgICAgICAgICBwYXJzZXJtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgcHdkbW9kdWxlLm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIHJlYWRsaW5lLm9iaiAgICAgIFwKLSMgICAgICAgICAgICAgICAgICByZXNvdXJjZS5vYmogICAgICBcCi0jICAgICAgICAgICAgICAgICAgc3lzbG9nbW9kdWxlLm9iaiAgXAotIyAgICAgICAgICAgICAgICAgIHRlcm1pb3Mub2JqICAgICAgIFwKLQotICAjIFVzZXIgSW50ZXJmYWNlOgotIyAgICAgICAgICAgICAgICAgIF90a2ludGVyLm9iaiAgICAgIFwgICAgIAotIyAgICAgICAgICAgICAgICAgIHN0ZHdpbm1vZHVsZS5vYmogIFwKLSMgICAgICAgICAgICAgICAgICBjdXJzZXNtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgdGNsTm90aWZ5Lm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIHRrYXBwaW5pdC5vYmogICAgIFwKLSAgIyBmbG1vZHVsZS5jICAgICAgLS0gV3JhcHBlciBvZiBGT1JNUyBMaWJyYXJ5IChTY3JlZW4gRm9ybXMpCi0KLSAgIyB6bGlibW9kdWxlLmMgICAgLS0gV3JhcHBlciBvZiBaTGliIENvbXByZXNzaW9uIEFQSSAoR1ppcCBGb3JtYXQpCi0gICMgcHVyZW1vZHVsZS5jICAgIC0tIFdyYXBwZXIgb2YgUHVyaWZ5IERlYnVnZ2luZyBBUEkgKFByb2JhYmx5IE5vbi1PUy8yKQotICAjIHh4bW9kdWxlLmMgICAgICAtLSBUZW1wbGF0ZSB0byBDcmVhdGUgWW91ciBPd24gTW9kdWxlCi0KLSMKLSMgU3RhbmRhbG9uZSBQYXJzZXIgR2VuZXJhdG9yIFByb2dyYW0gKFNoYXJlcyBTb21lIG9mIFB5dGhvbidzIE1vZHVsZXMpCi1QR0VOICAgICAgICAgICAgPSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBQR2VuTWFpbi5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBQR2VuLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBQcmludEdyYW1tYXIub2JqICBcCi0gICAgICAgICAgICAgICAgICBMaXN0Tm9kZS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBHcmFtbWFyLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBCaXRTZXQub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBGaXJzdFNldHMub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBNZXRhR3JhbW1hci5vYmoKLQotIyBPbWl0dGVkIFBhcnNlciBFbGVtZW50cyAoYW5kIFJlYXNvbik6Ci0gICMgaW50cmNoZWNrLmMgICAgIC0tIE5vdCBSZWZlcmVuY2VkIGJ5IEFueW9uZSAoPykKLQotIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1hY3JvcyBhbmQgRmxhZ3MKLSMjIyMjIyMjIyMjIyMjIyMjIwotX0JBU0UJCT0gL1EgL1cyIC9JJChQUk9KSU5DTFVERSkKLQkJIyAvUSAgID0gT21pdCBJQk0gQ29weXJpZ2h0Ci0JCSMgL1cyICA9IFNob3cgV2FybmluZ3MvRXJyb3JzIE9ubHkKLQkJIyAvRmkgID0gQ3JlYXRlIFByZWNvbXBpbGVkIEhlYWRlcnMKLQkJIyAvU2kgID0gVXRpbGl6ZSBQcmVjb21waWxlZCBIZWFkZXJzCi0KLV9HRU4JCT0gL0c0IC9HbSAvR2QgL0IiL1NUQUNLOjM2MDAwMCIKLQkJIyAvRzQgID0gR2VuZXJhdGUgQ29kZSBmb3IgNDg2IChVc2UgMzg2IGZvciBEZWJ1Z2dlcikKLQkJIyAvR20gID0gVXNlIE11bHRpdGhyZWFkIFJ1bnRpbWUKLQkJIyAvR2QgID0gRHluYW1pY2FsbHkgTG9hZCBSdW50aW1lCi0JCSMgL0dzICA9IFJlbW92ZSBDb2RlIGZvciBTdGFjayBQcm9iZXMKLQkJIyAvR3ggID0gUmVtb3ZlIEMrKyBFeGNlcHRpb24tSGFuZGxpbmcgSW5mbwotCQkjIC9UZHAgPSBHZW5lcmF0ZSBDb2RlIGZvciBDKysgVGVtcGxhdGVzCi0JCSMgL1JuICA9IEdlbmVyYXRlIENvZGUgd2l0aG91dCBhIFJ1bnRpbWUKLQkJIyAvQiIvU1RBQ0s6biIgPSBTZXQgU3RhY2sgU2l6ZQotCi1fT1BUCQk9IC9PIC9HbAotCQkjIC9PICAgPSBFbmFibGUgU3BlZWQtT3B0aW1pemF0aW9ucwotCQkjIC9PbCAgPSBQYXNzIENvZGUgVGhydSBJbnRlcm1lZGlhdGUgTGlua2VyCi0JCSMgL0d1ICA9IEFkdmlzZSBMaW5rZXIgQWxsIEV4dCBEYXRhIGlzIElEJ2QKLQkJIyAvR2wgID0gSGF2ZSBMaW5rZXIgUmVtb3ZlIFVudXNlZCBGbnMKLQotX0RCRwkJPSAvREhBVkVfQ09ORklHX0ggL0RVU0VfU09DS0VUCi0JCSMgL1RpICA9IEVtYmVkIERlYnVnZ2VyL0FuYWx5emVyIFJlY3MKLQkJIyAvVG0gID0gRW5hYmxlIERlYnVnIE1lbW9yeSBGbnMKLQkJIyAvVHggID0gUmVxdWVzdCBGdWxsIER1bXAgVXBvbiBFeGNlcHRpb24KLQkJIyAvRERFQlVHID0gRW5hYmxlIEFwcC1JbnRlcm5hbCBEZWJ1Z2dpbmcgQ29kZQotICAgICAgICAgICAgICAgICMgL0RVU0VfU09DS0VUID0gCi0gICAgICAgICAgICAgICAgIyAvRFVTRV9ETF9FWFBPUlQgPSAKLQotX09VVAkJPSAKLQkJIyAvRmIgID0gRW1iZWQgQnJvd3NlciBSZWNzCi0JCSMgL0doICA9IEdlbmVyYXRlIENvZGUgZm9yIFByb2ZpbGVyIEhvb2tzCi0JCSMgL0ZsICA9IE91dHB1dCBDL0MrKyBMaXN0aW5nIEZpbGVzCi0gICAgICAgICAgICAgICAgIyAvTGYgID0gUHJvdmlkZSBGdWxsIChEZXRhaWxlZCkgTGlzdGluZyBGaWxlcwotCQkjIC9GbS4gPSBPdXRwdXQgTGlua2VyIE1hcCBGaWxlCi0JCSMgL0Z0LiA9IE91dHB1dCBDKysgVGVtcGxhdGUgUmVzb2x1dGlvbiBGaWxlcwotCi1fTUFQCQk9IC9GbU5vaXNlXCQoLlRBUkdFVCxCLD4ubWFwKQotCi1fRExMCQk9IC9HZS0KLV9FWEUJCT0gL0dlCi0JCSMgL0dlID0gQ3JlYXRlIGFuIEVYRSwgbm90IERMTAotCi1DRkxBR1MJCT0gJChfQkFTRSkgJChfR0VOKSAkKF9PUFQpICQoX0RCRykgJChfT1VUKSAkKF9FWEUpIC9TcwotQ1BQRkxBR1MJPSAkKF9CQVNFKSAkKF9HRU4pICQoX09QVCkgJChfREJHKSAkKF9PVVQpICQoX0VYRSkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQcmltYXJ5IFRhcmdldChzKQotIyMjIyMjIyMjIyMjIyMjIyMjIwotQWxsOiAgb2JqIG5vaXNlIFB5Q29yZS5saWIgUHl0aG9uMTUubGliIFB5dGhvbjE1LmRsbCBQeXRob24uZXhlIFBHZW4uZXhlCi0KLSMjIyMjIyMjIyMjIyMjCi0jCi0jIyMjIyMjIyMjIyMjIwotCi0jIE9iamVjdCBMaWJyYXJ5IG9mIEFsbCBFc3NlbnRpYWwgUHl0aG9uIFJvdXRpbmVzCi1QeUNvcmUubGliOiAkKE1PRFVMRVMpICQoT0JKRUNUUykgJChQQVJTRVIpICQoUFlUSE9OKSBDb25maWcub2JqCi0gICAgICAgICVkbyAiJS5saWIiCi0KLVB5dGhvbjE1LmRsbDogQ29tcGlsZS5vYmogUHlDb3JlLmxpYiBQeXRob24uZGVmCi0gICAgICAgICVkbyAiJS5kbGwiIENQUEZMQUdTKz0vQiIvTk9FIiBDUFBGTEFHUys9JChfTUFQKQotCi1Db21waWxlLm9iajogQ29tcGlsZS5jCi0gICAgICAgICVkbyAiLmMub2JqIiBDRkxBR1MrPSQoX0RMTCkKLQotIyBJbXBvcnQgTGlicmFyeSBmb3IgVXNpbmcgdGhlIFB5dGhvbjE1LmRsbAotUHl0aG9uMTUubGliOiBQeXRob24uZGVmCi0gICAgICAgICVkbyAiLmRlZi5saWIiCi0KLSMgU21hbGwgUHJvZ3JhbSB0byBTdGFydCBJbnRlcnByZXRlciBpbiBQeXRob24xNS5kbGwKLVB5dGhvbi5leGU6IFB5dGhvbi5vYmogUHl0aG9uMTUubGliCi0gICAgICAgICVkbyAiJS5leGUiIENQUEZMQUdTKz0kKF9NQVApCi0KLSNQeXRob24ub2JqOiBQeXRob24uYwotIyAgICAgICAgJWRvICIuYy5vYmoiIENGTEFHUys9JChfRVhFKQotCi1QR2VuLmV4ZTogJChQR0VOKSBQeUNvcmUubGliCi0gICAgICAgICVkbyAiJS5leGUiIENQUEZMQUdTKz0kKF9NQVApCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1pc2NlbGxhbmVvdXMgVGFyZ2V0cwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBSZW1vdmUgSW50ZXJtZWRpYXRlIFRhcmdldHMgYnV0IExlYXZlIEV4ZWN1dGFibGUgQmluYXJpZXMKLWNsZWFuOgotCS0tIERlbCAvUSAkKC5QQVRILm9iailcKi5vYmoJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAvWSBOb2lzZQkJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAkKEVSUlMpCQkJPk5VTCAyPiYxCi0KLSMgUmVtb3ZlIEFsbCBUYXJnZXRzLCBJbmNsdWRpbmcgRmluYWwgQmluYXJpZXMKLWRpc3RjbGVhbjogY2xlYW4KLSAgICAgICAgLS0gRGVsIC9RIFB5Q29yZS5saWIgUHl0aG9uMTUubGliICAgICAgID5OVUwgMj4mMQotICAgICAgICAtLSBEZWwgL1EgUHl0aG9uMTUuZGxsIFB5dGhvbi5leGUgICAgICAgPk5VTCAyPiYxCi0KLXJlbGVhc2U6IFB5dGhvbi5leGUgUHl0aG9uMTUuZGxsIFB5dGhvbjE1LmxpYgotCS0tIEBFY2hvIFkgfCBjb3B5IC9VICQoLlNPVVJDRVMsTSIqLmV4ZSIpIEQ6XEVYRXMKLQktLSBARWNobyBZIHwgY29weSAvVSAkKC5TT1VSQ0VTLE0iKi5kbGwiKSBEOlxETExzCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgJCguU09VUkNFUyxNIioubGliIikgRTpcVGF1XExpYgotCi10ZXN0OgotICAgICAgICBweXRob24gLi5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLQotIyBVcGRhdGUgRGVwZW5kZW5jaWVzIG9uIFRhcmdldHMgKFVzZXMgT3B1c01BS0UgQ29tbWVyY2lhbCBQcm9kdWN0KQotZGVwZW5kOgotCUQ6XE9wdXNNYWtlXG9zMm1rbWYgLWMgLXMKLQotIyMjIE9QVVMgTUtNRjogIERvIG5vdCByZW1vdmUgdGhpcyBsaW5lISAgR2VuZXJhdGVkIGRlcGVuZGVuY2llcyBmb2xsb3cuCi0KLV90a2ludGVyLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWFycmF5bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWF1ZGlvb3Aub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotYmluYXNjaWkub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY21hdGhtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY3BpY2tsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jcnlwdG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jdXJzZXNtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX2RibW1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1lcnJuby5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1lcnJub21vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mY250bG1vZHVsZS5vYmo6IGFic3RyYWN0LmggYzpcbXB0blxpbmNsdWRlXHN5c1xpb2N0bC5oIGNldmFsLmggXAotCSBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggXAotCSBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggXAotCSBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZnBlY3RsbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZwZXRlc3Rtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX2dkYm1tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0YnVpbGRpbmZvLm9iajogcHljb25maWcuaAotCi1nZXRwYXRoLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdycG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBncnAuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1pbWFnZW9wLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1haW4ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbWF0aG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tcHptb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ2ludHJlcHIuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCi0JIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1uaXNtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGM6XG1wdG5caW5jbHVkZVxzeXNcdGltZS5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBcCi0JIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIFwKLQkgZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotb3BlcmF0b3Iub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcGFyc2VybW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBncmFtaW5pdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdG9rZW4uaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcG9zaXgub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG15dGltZS5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcG9zaXhtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG15dGltZS5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcHdkbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHdkLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJlYWRsaW5lLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJlc291cmNlLm9iajogYWJzdHJhY3QuaCBjOlxtcHRuXGluY2x1ZGVcc3lzXHRpbWUuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggXAotCSBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBcCi0JIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNlbGVjdG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggbXlzZWxlY3QuaCBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNpZ25hbG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zb2NrZXRtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGM6XG1wdG5caW5jbHVkZVxuZXRpbmV0XGluLmggXAotCSBjOlxtcHRuXGluY2x1ZGVcc3lzXHNvY2tldC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG15dGltZS5oIG5ldGRiLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIFwKLQkgcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zdHJ1Y3Rtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc3lzbG9nbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNsb2cuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXRlcm1pb3Mub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX3RocmVhZG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdGhyZWFkLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10aW1lbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXh4bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXpsaWJtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotYWJzdHJhY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY2xhc3NvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN0cnVjdG1lbWJlci5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jb21wbGV4b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15bWF0aC5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWRpY3RvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZmlsZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3RydWN0bWVtYmVyLmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mbG9hdG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mcmFtZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmcmFtZW9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9wY29kZS5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3RydWN0bWVtYmVyLmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZ1bmNvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotbGlzdG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1sb25nb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdpbnRyZXByLmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIFwKLQkgdHVwbGVvYmplY3QuaAotCi1tZXRob2RvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRva2VuLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tb2R1bGVvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJhbmdlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNsaWNlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXN0cmluZ29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10dXBsZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10eXBlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXh4b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWFjY2VsZXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggXAotCSBwYXJzZXIuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWJpdHNldC5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotZmlyc3RzZXRzLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWdyYW1tYXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotZ3JhbW1hcjEub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotaW50cmNoZWNrLm9iajogcHljb25maWcuaCBpbnRyY2hlY2suaCBteW1hbGxvYy5oIG15cHJvdG8uaAotCi1saXN0bm9kZS5vYmo6IHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIFwKLQkgdG9rZW4uaAotCi1tZXRhZ3JhbW1hci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG1ldGFncmFtbWFyLmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBwZ2VuLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotbXlyZWFkbGluZS5vYmo6IHB5Y29uZmlnLmggaW50cmNoZWNrLmggbXltYWxsb2MuaCBteXByb3RvLmgKLQotbm9kZS5vYmo6IHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLXBhcnNlci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZXJyY29kZS5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG5vZGUuaCBwYXJzZXIuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLXBhcnNldG9rLm9iajogYml0c2V0LmggcHljb25maWcuaCBlcnJjb2RlLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbm9kZS5oIHBhcnNlci5oIHBhcnNldG9rLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaCBcCi0JIHRva2VuaXplci5oCi0KLXBnZW4ub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBtZXRhZ3JhbW1hci5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggbm9kZS5oIHBnZW4uaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLXBnZW5tYWluLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIFwKLQkgcGFyc2V0b2suaCBwZ2VuLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotcHJpbnRncmFtbWFyLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi10b2tlbml6ZXIub2JqOiBweWNvbmZpZy5oIGVycmNvZGUuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBwZ2VuaGVhZGVycy5oIFwKLQkgcHlkZWJ1Zy5oIHRva2VuLmggdG9rZW5pemVyLmgKLQotYXRvZi5vYmo6IHB5Y29uZmlnLmgKLQotYmx0aW5tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGV2YWwuaCBmaWxlb2JqZWN0LmggXAotCSBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteW1hdGguaCBteXByb3RvLmggbm9kZS5oIG9iamVjdC5oIFwKLQkgb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jZXZhbC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZXZhbC5oIGZpbGVvYmplY3QuaCBcCi0JIGZsb2F0b2JqZWN0LmggZnJhbWVvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggXAotCSBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBvcGNvZGUuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIFwKLQkgdHVwbGVvYmplY3QuaAotCi1jb21waWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBncmFtaW5pdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIFwKLQkgb3Bjb2RlLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0b2tlbi5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZXJyb3JzLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZtb2Qub2JqOiBweWNvbmZpZy5oIG15bWF0aC5oCi0KLWZyb3plbi5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mcm96ZW5tYWluLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldGFyZ3Mub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29tcGlsZXIub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29weXJpZ2h0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldHBsYXRmb3JtLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldHZlcnNpb24ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBwYXRjaGxldmVsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdyYW1pbml0Lm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi1oeXBvdC5vYmo6IHB5Y29uZmlnLmggbXltYXRoLmggbXlwcm90by5oCi0KLWltcG9ydC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZXJyY29kZS5oIGV2YWwuaCBcCi0JIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbXBvcnRkbC5oIFwKLQkgaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtYXJzaGFsLmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9zZGVmcy5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdG9rZW4uaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWltcG9ydGRsLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGltcG9ydGRsLmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBvc2RlZnMuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbWFyc2hhbC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ2ludHJlcHIuaCBsb25nb2JqZWN0LmggbWFyc2hhbC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbW9kc3VwcG9ydC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1teXN0cnRvdWwub2JqOiBweWNvbmZpZy5oCi0KLXB5ZnBlLm9iajogcHljb25maWcuaCBweWZwZS5oCi0KLXB5c3RhdGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcHl0aG9ucnVuLm9iajogYWJzdHJhY3QuaCBiaXRzZXQuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGlsZS5oIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBlcnJjb2RlLmggZXZhbC5oIFwKLQkgZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGdyYW1tYXIuaCBpbXBvcnQuaCBcCi0JIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWFyc2hhbC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbm9kZS5oIG9iamVjdC5oIG9iamltcGwuaCBwYXJzZXRvay5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zaWdjaGVjay5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zdHJkdXAub2JqOiBweWNvbmZpZy5oIG15bWFsbG9jLmggbXlwcm90by5oCi0KLXN0cnRvZC5vYmo6IHB5Y29uZmlnLmgKLQotc3RydWN0bWVtYmVyLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotc3lzbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXRocmVhZC5vYmo6IHB5Y29uZmlnLmggdGhyZWFkLmgKLQotdHJhY2ViYWNrLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZyYW1lb2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggXAotCSBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCBcCi0JIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3B5Y29uZmlnLmggYi9QQy9vczJ2YWNwcC9weWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzY1YjQ0Li4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3B5Y29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotI2lmbmRlZiBQeV9DT05GSUdfSAotI2RlZmluZSBQeV9DT05GSUdfSAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcHljb25maWcuaC4gIE5PVCBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuCi0gKgotICogVGhpcyBpcyBhIG1hbnVhbGx5IG1haW50YWluZWQgdmVyc2lvbiB1c2VkIGZvciB0aGUgSUJNIFZpc3VhbEFnZQotICogQy9DKysgY29tcGlsZXIgb24gdGhlIE9TLzIgcGxhdGZvcm0uICBJdCBpcyBhIHN0YW5kYXJkIHBhcnQgb2YKLSAqIHRoZSBQeXRob24gZGlzdHJpYnV0aW9uLgotICoKLSAqIEZJTEVTWVNURU0gREVGSU5FUzoKLSAqIFRoZSBjb2RlIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciB3YXkgb2YgbmFtaW5nIGZpbGVzIGFuZAotICogZGlyZWN0b3J5IHBhdGhzIHNob3VsZCBiZSB3cmFwcGVkIGFyb3VuZCBvbmUgb2YgdGhlIGZvbGxvd2luZwotICogI2RlZmluZXM6Ci0gKgotICogICAgIERPU0ZJTEVTWVMgICBQQ0RPUy1TdHlsZSAoZm9yIFBDRE9TLCBXaW5kb3dzIGFuZCBPUy8yKQotICogICAgIE1BQ0ZJTEVTWVMgICBNYWNpbnRvc2gtU3R5bGUKLSAqICAgICBVTklYRklMRVNZUyAgVW5peC1TdHlsZQotICogICAgIEFNSUdBRklMRVNZUyBBbWlnYURPUy1TdHlsZQotICogCi0gKiBCZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgY29tcGlsZXJzIGFuZCBvcGVyYXRpbmcgc3lzdGVtcyBpbgotICogdXNlIG9uIHRoZSBJbnRlbCBwbGF0Zm9ybSwgbmVpdGhlciB0aGUgY29tcGlsZXIgbmFtZSBub3IKLSAqIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgaXMgc3VmZmljaWVudC4KLSAqCi0gKiBPUy8yIERFRklORVM6Ci0gKiBUaGUgY29kZSBzcGVjaWZpYyB0byBPUy8yJ3MgUHJvZ3JhbSBBUEkgc2hvdWxkIGJlIHdyYXBwZWQgYXJvdW5kCi0gKgotICogX19UT1NfT1MyX18gICBUYXJnZXQgT3BlcmF0aW5nIFN5c3RlbSwgT1MvMgotICoKLSAqIEFueSBjb2RlIHNwZWNpZmljIHRvIHRoZSBjb21waWxlciBpdHNlbGYgc2hvdWxkIGJlIHdyYXBwZWQgd2l0aAotICoKLSAqIF9fSUJNQ19fICAgICAgSUJNIEMgQ29tcGlsZXIKLSAqIF9fSUJNQ1BQX18gICAgSUJNIEMrKyBDb21waWxlcgotICoKLSAqIE5vdGUgdGhhdCBzaW5jZSB0aGUgVmlzdWFsQWdlIEMvQysrIGNvbXBpbGVyIGlzIGFsc28gYXZhaWxhYmxlCi0gKiBmb3IgdGhlIFdpbmRvd3MgcGxhdGZvcm0sIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gdXNlIGJvdGggYQotICogX19UT1NfT1MyX18gYW5kIGEgX19JQk1DX18gdG8gc2VsZWN0IGEgdmVyeSBzcGVjaWZpYyBlbnZpcm9ubWVudC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNvbWUgc3lzdGVtcyByZXF1aXJlIHNwZWNpYWwgZGVjbGFyYXRpb25zIGZvciBkYXRhIGl0ZW1zIGltcG9ydGVkCi0gKiBvciBleHBvcnRlZCBmcm9tIGR5bmFtaWMgbGluayBsaWJyYXJpZXMuICBOb3RlIHRoYXQgdGhlIGRlZmluaXRpb24KLSAqIG9mIERMX0lNUE9SVCBjb3ZlcnMgYm90aCBjYXNlcy4gIERlZmluZSBVU0VfRExfSU1QT1JUIGZvciB0aGUgY2xpZW50Ci0gKiBvZiBhIERMTC4gIERlZmluZSBVU0VfRExfRVhQT1JUIHdoZW4gbWFraW5nIGEgRExMLgotICovCi0KLSNpbmNsdWRlIDxpby5oPgotCi0vKiBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIEZpbmRpbmcgTW9kdWxlcyAqLwotI2RlZmluZSBQUkVGSVggICAgICAgICAgICAgICAgICIiCi0jZGVmaW5lIEVYRUNfUFJFRklYICAgICAgICAgICAgIiIKLQotLyogUHJvdmlkZSBhIGRlZmF1bHQgbGlicmFyeSBzbyB3cml0ZXJzIG9mIGV4dGVuc2lvbiBtb2R1bGVzCi0gKiB3b24ndCBoYXZlIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBpdCBhbnltb3JlCi0gKi8KLSNwcmFnbWEgbGlicmFyeSgiUHl0aG9uMjQubGliIikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgIDMyLUJpdCBJQk0gVmlzdWFsQWdlIEMvQysrIHYzLjAgZm9yIE9TLzIgICAgICovCi0vKiAgKENvbnZlcnQgQ29tcGlsZXIgRmxhZ3MgaW50byBVc2VmdWwgU3dpdGNoZXMpICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgUExBVEZPUk0gICAgIm9zMiIKLSNkZWZpbmUgQ09NUElMRVIgICAgIltWaXN1YWxBZ2UgQy9DKytdIgotI2RlZmluZSBQWU9TX09TMiAgICAvKiBEZWZpbmUgSW5kaWNhdG9yIG9mIE9wZXJhdGluZyBTeXN0ZW0gKi8KLSNkZWZpbmUgUFlDQ19WQUNQUCAgLyogRGVmaW5lIEluZGljYXRvciBvZiBDIENvbXBpbGVyICovCi0KLSAgLyogUGxhdGZvcm0gRmlsZXN5c3RlbSAqLwotI2RlZmluZSBQWVRIT05QQVRIICAiLjsuXFxsaWI7LlxcbGliXFxwbGF0LXdpbiIKLSNkZWZpbmUgRE9TRklMRVNZUyAgLyogT1MvMiBVc2VzIHRoZSBET1MgRmlsZSBOYW1pbmcgQ29udmVudGlvbnMgKi8KLS8qICNkZWZpbmUgSU1QT1JUXzh4M19OQU1FUyAobGV0J3MgbW92ZSB1cCB0byBsb25nIGZpbGVuYW1lcykgKi8KLQotICAvKiBQbGF0Zm9ybSBDUFUtTW9kZSBEZXBlbmRlbmNpZXMgKi8KLSNkZWZpbmUgV09SRF9CSVQgICAgICAgICAgICAgICAgMzIgLyogT1MvMiBpcyBhIDMyLUJpdCBPcGVyYXRpbmcgU3lzdGVtICovCi0jZGVmaW5lIExPTkdfQklUICAgICAgICAgICAgICAgIDMyCi0jZGVmaW5lIFNJWkVPRl9JTlQgICAgICAgICAgICAgICA0IC8qIENvdW50IG9mIEJ5dGVzIGluIGFuIChpbnQpICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0laRU9GX0xPTkcgICAgICAgICAgICAgIDQgLyogQ291bnQgb2YgQnl0ZXMgaW4gYSAobG9uZykgICAgICAgICAgICAqLwotI2RlZmluZSBTSVpFT0ZfVk9JRF9QICAgICAgICAgICAgNCAvKiBDb3VudCBvZiBCeXRlcyBpbiBhICh2b2lkICopICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfTE9OR19MT05HICAgICAxICovIC8qIFZBQysrIGRvZXMgbm90IHN1cHBvcnQgKGxvbmcgbG9uZykgICAgKi8KLS8qICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyAgIDggKi8gLyogQ291bnQgb2YgQnl0ZXMgaW4gYSAobG9uZyBsb25nKSAgICAgICAqLwotCi0vKiB1bmljb2RlIGRlZmluaW5lcyAqLwotI2RlZmluZSBQWV9VTklDT0RFX1RZUEUgICAgd2NoYXJfdAotI2RlZmluZSBQeV9VTklDT0RFX1NJWkUgU0laRU9GX1NIT1JUCi0KLS8qIGR5bmFtaWMgbG9hZGluZyAqLwotI2RlZmluZSBIQVZFX0RZTkFNSUNfTE9BRElORyAxCi0KLS8qIERlZmluZSBpZiB0eXBlIGNoYXIgaXMgdW5zaWduZWQgYW5kIHlvdSBhcmUgbm90IHVzaW5nIGdjYy4gICovCi0jaWZuZGVmIF9fQ0hBUl9VTlNJR05FRF9fCi0vKiAjdW5kZWYgX19DSEFSX1VOU0lHTkVEX18gKi8KLSNlbmRpZgotCi10eXBlZGVmIGludCBtb2RlX3Q7Ci10eXBlZGVmIGludCB1aWRfdDsKLXR5cGVkZWYgaW50IGdpZF90OwotdHlwZWRlZiBpbnQgcGlkX3Q7Ci0KLSNpZiBkZWZpbmVkKF9fTVVMVElfXykgICAgIC8qIElmIENvbXBpbGVyIC9HdCsgTXVsdGl0aHJlYWQgT3B0aW9uIEVuYWJsZWQsICAqLwotICAjZGVmaW5lIFdJVEhfVEhSRUFEICAgICAgICAgICAgMSAvKiBFbmFibGUgVGhyZWFkaW5nIFRocm91Z2hvdXQgUHl0aG9uICAgICovCi0gICNkZWZpbmUgT1MyX1RIUkVBRFMgICAgICAgICAgICAxIC8qIEFuZCBVc2UgdGhlIE9TLzIgRmxhdm9yIG9mIFRocmVhZHMgICAgKi8KLS8qICNkZWZpbmUgX1JFRU5UUkFOVCAxICovIC8qIFVzZSB0aHJlYWQtc2FmZSBlcnJubywgaF9lcnJubywgYW5kIG90aGVyIGZucyAqLwotI2VuZGlmCi0KLSAgLyogQ29tcGlsZXIgUnVudGltZSBMaWJyYXJ5IENhcGFiaWxpdGllcyAqLwotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZGlyZWN0Lmg+Ci0vKiAjdW5kZWYgQkFEX1NUQVRJQ19GT1JXQVJEICovIC8qIGlmIGNvbXBpbGVyIGJvdGNoZXMgc3RhdGljIGZ3ZCBkZWNscyAqLwotCi0jZGVmaW5lIFNURENfSEVBREVSUyAgICAgICAgICAgICAxIC8qIFZBQysrIGlzIGFuIEFOU0kgQyBDb21waWxlciAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9IWVBPVCAgICAgICAgICAgICAgIDEgLyogaHlwb3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1BVVEVOViAgICAgICAgICAgICAgMSAvKiBwdXRlbnYoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIFZBX0xJU1RfSVNfQVJSQVkgICAxICovIC8qIGlmIHZhX2xpc3QgaXMgYW4gYXJyYXkgb2Ygc29tZSBraW5kICAgKi8KLS8qICNkZWZpbmUgSEFWRV9DT05JT19IICAgICAgIDEgKi8gLyogI2luY2x1ZGUgPGNvbmlvLmg+ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0VSUk5PX0ggICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAgICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvc3RhdC5oPiAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgICAgICAgICAgICAqLwotCi0gIC8qIFZhcmlhYmxlLUFyZ3VtZW50cy9Qcm90b3R5cGVzICovCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAgICAgICAgICAxIC8qIFZBQysrIHN1cHBvcnRzIEMgRnVuY3Rpb24gUHJvdG90eXBlcyAgKi8KLSNkZWZpbmUgSEFWRV9TVERBUkdfUFJPVE9UWVBFUyAgIDEgLyogT3VyIDxzdGRhcmcuaD4gaGFzIHByb3RvdHlwZXMgICAgICAgICAqLwotCi0gIC8qIFN0cmluZy9NZW1vcnkvTG9jYWxlIE9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgSEFWRV9NRU1NT1ZFICAgICAgICAgICAgIDEgLyogbWVtbW92ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NUUkVSUk9SICAgICAgICAgICAgMSAvKiBzdHJlcnJvcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU0VUTE9DQUxFICAgICAgICAgICAxIC8qIHNldGxvY2FsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTUFMTE9DX1pFUk9fUkVUVVJOU19OVUxMIDEgLyogT3VyIG1hbGxvYygwKSByZXR1cm5zIGEgTlVMTCBwdHIgICAgICAqLwotCi0gIC8qIFNpZ25hbCBIYW5kbGluZyAqLwotI2RlZmluZSBIQVZFX1NJR05BTF9IICAgICAgICAgICAgMSAvKiBzaWduYWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJFVFNJR1RZUEUgICAgICAgICAgICB2b2lkIC8qIFJldHVybiB0eXBlIG9mIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkgKi8KLS8qICN1bmRlZiBXQU5UX1NJR0ZQRV9IQU5ETEVSICAgKi8gLyogSGFuZGxlIFNJR0ZQRSAoc2VlIEluY2x1ZGUvcHlmcGUuaCkgICAqLwotLyogI2RlZmluZSBIQVZFX0FMQVJNICAgICAgICAgMSAqLyAvKiBhbGFybSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU0lHSU5URVJSVVBUICAxICovIC8qIHNpZ2ludGVycnVwdCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9TSUdSRUxTRSAgICAgIDEgKi8gLyogc2lncmVsc2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBET05UX0hBVkVfU0lHX0FMQVJNICAgICAgMQotI2RlZmluZSBET05UX0hBVkVfU0lHX1BBVVNFICAgICAgMQotCi0gIC8qIENsb2NrL1RpbWUgU3VwcG9ydCAqLwotI2RlZmluZSBIQVZFX0ZUSU1FICAgICAgICAgICAgICAgMSAvKiBXZSBoYXZlIGZ0aW1lKCkgaW4gPHN5cy90aW1lYi5oPiAgICAgICovCi0jZGVmaW5lIEhBVkVfQ0xPQ0sgICAgICAgICAgICAgICAxIC8qIGNsb2NrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TVFJGVElNRSAgICAgICAgICAgIDEgLyogc3RyZnRpbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX01LVElNRSAgICAgICAgICAgICAgMSAvKiBta3RpbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfVFpOQU1FICAgICAgICAgICAgICAxIC8qIE5vIHRtX3pvbmUgYnV0IGRvIGhhdmUgdHpuYW1lW10gICAgICAgKi8KLSNkZWZpbmUgSEFWRV9USU1FUyAgICAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90aW1lcy5oPiAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU19VVElNRV9IICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3V0aW1lLmg+ICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVVRJTUVfSCAgICAgICAxICovIC8qICNpbmNsdWRlIDx1dGltZS5oPiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90aW1lLmg+ICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBUTV9JTl9TWVNfVElNRSAgICAgMSAqLyAvKiA8c3lzL3RpbWUuaD4gZGVjbGFyZXMgc3RydWN0IHRtICAgICAgICovCi0jZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZICAgICAgICAxIC8qIGdldHRpbWVvZmRheSgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgR0VUVElNRU9GREFZX05PX1RaIDEgKi8gLyogZ2V0dGltZW9mZGF5KCkgZG9lcyBub3QgaGF2ZSAybmQgYXJnICAqLwotLyogI2RlZmluZSBIQVZFX1RJTUVHTSAgICAgICAgMSAqLyAvKiB0aW1lZ20oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAgICAgICAxIC8qIE1peCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+ICAgICAgICAgKi8KLSNkZWZpbmUgU1lTX1NFTEVDVF9XSVRIX1NZU19USU1FIDEgLyogTWl4IDxzeXMvc2VsZWN0Lmg+IGFuZCA8c3lzL3RpbWUuaD4gICAqLwotLyogI2RlZmluZSBIQVZFX0FMVFpPTkUgICAgICAgMSAqLyAvKiBpZiA8dGltZS5oPiBkZWZpbmVzIGFsdHpvbmUgICAgICAgICAgICovCi0KLSAgLyogTmV0d29yay9Tb2NrZXRzIFN1cHBvcnQgKi8KLSNkZWZpbmUgSEFWRV9TWVNfU0VMRUNUX0ggICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPiAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBCU0RfU0VMRUNUICAgICAgICAgICAgICAxIC8qIFVzZSBCU0QgdmVyc3VzIE9TLzIgZm9ybSBvZiBzZWxlY3QoKSAgICovCi0jZGVmaW5lIEhBVkVfU0VMRUNUICAgICAgICAgICAgIDEgLyogc2VsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRQRUVSTkFNRSAgICAgICAgMSAvKiBnZXRwZWVybmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI3VuZGVmIEhBVkVfR0VUSE9TVE5BTUVfUiAxICovIC8qIGdldGhvc3RuYW1lX3IoKSAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogRmlsZSBJL08gKi8KLSNkZWZpbmUgSEFWRV9EVVAyICAgICAgICAgICAgICAgIDEgLyogZHVwMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0VYRUNWICAgICAgICAgICAgICAgMSAvKiBleGVjdigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU0VUVkJVRiAgICAgICAgICAgICAxIC8qIHNldHZidWYoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgICAgICAgICAgIDEgLyogZ2V0Y3dkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1BJUEUgICAgICAgICAgICAgICAgMSAvKiBwaXBlKCkgICAgIFtPUy8yLXNwZWNpZmljIGNvZGUgYWRkZWRdICovCi0jZGVmaW5lIEhBVkVfSU9fSCAgICAgICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxpby5oPiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9GQ05UTF9IICAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0RJUkVDVF9IICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8ZGlyZWN0Lmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfRkxPQ0sgICAgICAgICAxICovIC8qIGZsb2NrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9UUlVOQ0FURSAgICAgIDEgKi8gLyogdHJ1bmNhdGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAgICAgMSAqLyAvKiBmdHJ1bmNhdGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfTFNUQVQgICAgICAgICAxICovIC8qIGxzdGF0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9ESVJFTlRfSCAgICAgIDEgKi8gLyogI2luY2x1ZGUgPGRpcmVudC5oPiAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX09QRU5ESVIgICAgICAgMSAqLyAvKiBvcGVuZGlyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogUHJvY2VzcyBPcGVyYXRpb25zICovCi0jZGVmaW5lIEhBVkVfUFJPQ0VTU19IICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxwcm9jZXNzLmg+ICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRQSUQgICAgICAgICAgICAgIDEgLyogZ2V0cGlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgICAgICAgICAgMSAvKiBzeXN0ZW0oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfV0FJVCAgICAgICAgICAgICAgICAxIC8qIHdhaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9LSUxMICAgICAgICAgICAgICAgIDEgLyoga2lsbCgpICAgICBbT1MvMi1zcGVjaWZpYyBjb2RlIGFkZGVkXSAqLwotI2RlZmluZSBIQVZFX1BPUEVOICAgICAgICAgICAgICAgMSAvKiBwb3BlbigpICAgIFtPUy8yLXNwZWNpZmljIGNvZGUgYWRkZWRdICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAgICAxICovIC8qIGdldHBwaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9XQUlUUElEICAgICAgIDEgKi8gLyogd2FpdHBpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0ZPUksgICAgICAgICAgMSAqLyAvKiBmb3JrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogVXNlci9Hcm91cCBJRCBRdWVyaWVzICovCi0vKiAjZGVmaW5lIEhBVkVfR0VURUdJRCAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VURVVJRCAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUR0lEICAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUVUlEICAgICAgICAxICovCi0KLSAgLyogVW5peC1TcGVjaWZpYyAqLwotLyogI2RlZmluZSBIQVZFX1NZU19VTl9IICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3VuLmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU1lTX1VUU05BTUVfSCAxICovIC8qICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPiAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IICAgIDEgKi8gLyogI2luY2x1ZGUgPHN5cy93YWl0Lmg+ICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1VOSVNURF9IICAgICAgMSAqLyAvKiAjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVU5BTUUgICAgICAgICAxICovIC8qIHVuYW1lICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotLyogRGVmaW5lIGlmIHlvdSB3YW50IGRvY3VtZW50YXRpb24gc3RyaW5ncyBpbiBleHRlbnNpb24gbW9kdWxlcyAqLwotI2RlZmluZSBXSVRIX0RPQ19TVFJJTkdTIDEKLQotI2lmZGVmIFVTRV9ETF9FWFBPUlQKLSAgI2RlZmluZSBETF9JTVBPUlQoUlRZUEUpIFJUWVBFIF9TeXN0ZW0KLSNlbmRpZgotCi0jZW5kaWYgLyogIVB5X0NPTkZJR19IICovCi0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYgYi9QQy9vczJ2YWNwcC9weXRob24uZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTI1YzJhLi4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSw0NzkgKzAsMCBAQAotTElCUkFSWSAgICAgICAgUFlUSE9OMjQgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRQotREVTQ1JJUFRJT04gICAgJ1B5dGhvbiAyLjQgQ29yZSBETEwnCi1QUk9UTU9ERQotREFUQSAgICAgICAgICAgTVVMVElQTEUgTk9OU0hBUkVECi0KLUVYUE9SVFMKLSAgICAgICAgICAgICAgIDsgRGF0YQotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fVHlwZQotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9UeXBlCi0gICAgICAgICAgICAgICBQeUNsYXNzX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q29kZV9UeXBlCi0gICAgICAgICAgICAgICBQeUNvbXBsZXhfVHlwZQotICAgICAgICAgICAgICAgUHlEaWN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5RXhjX0FyaXRobWV0aWNFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfQXNzZXJ0aW9uRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0F0dHJpYnV0ZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19FT0ZFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfRXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0lPRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0ltcG9ydEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19JbmRleEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19LZXlFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgIFB5RXhjX0xvb2t1cEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19NZW1vcnlFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0Ci0gICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX092ZXJmbG93RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfU3ludGF4RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1N5c3RlbUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FeGl0Ci0gICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yCi0gICAgICAgICAgICAgICBQeUZpbGVfVHlwZQotICAgICAgICAgICAgICAgUHlGbG9hdF9UeXBlCi0gICAgICAgICAgICAgICBQeUZyYW1lX1R5cGUKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fVHlwZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfRnJvemVuTW9kdWxlcwotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW5pdHRhYgotICAgICAgICAgICAgICAgUHlJbnN0YW5jZV9UeXBlCi0gICAgICAgICAgICAgICBQeUludF9UeXBlCi0gICAgICAgICAgICAgICBQeUxpc3RfVHlwZQotICAgICAgICAgICAgICAgUHlMb25nX1R5cGUKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX1R5cGUKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5T1NfSW5wdXRIb29rCi0gICAgICAgICAgICAgICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyCi0gICAgICAgICAgICAgICBQeVJhbmdlX1R5cGUKLSAgICAgICAgICAgICAgIFB5U2xpY2VfVHlwZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfVHlwZQotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfVHlwZQotICAgICAgICAgICAgICAgUHlUdXBsZV9UeXBlCi0gICAgICAgICAgICAgICBQeVR5cGVfVHlwZQotICAgICAgICAgICAgICAgUHlfRGVidWdGbGFnCi0gICAgICAgICAgICAgICBQeV9Gcm96ZW5GbGFnCi0gICAgICAgICAgICAgICBQeV9JbnRlcmFjdGl2ZUZsYWcKLSAgICAgICAgICAgICAgIFB5X05vU2l0ZUZsYWcKLSAgICAgICAgICAgICAgIFB5X09wdGltaXplRmxhZwotICAgICAgICAgICAgICAgUHlfVXNlQ2xhc3NFeGNlcHRpb25zRmxhZwotICAgICAgICAgICAgICAgUHlfVmVyYm9zZUZsYWcKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaWxldGFiCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfSW5pdHRhYgotICAgICAgICAgICAgICAgX1B5UGFyc2VyX0dyYW1tYXIKLSAgICAgICAgICAgICAgIF9QeVBhcnNlcl9Ub2tlbk5hbWVzCi0gICAgICAgICAgICAgICBfUHlfRWxsaXBzaXNPYmplY3QKLSAgICAgICAgICAgICAgIF9QeV9Ob25lU3RydWN0Ci0gICAgICAgICAgICAgICBfUHlfUGFja2FnZUNvbnRleHQKLSAgICAgICAgICAgICAgIF9QeV9UcnVlU3RydWN0Ci0gICAgICAgICAgICAgICBfUHlfWmVyb1N0cnVjdAotICAgICAgICAgICAgICAgX1B5X2Fic3RyYWN0X2hhY2sKLSAgICAgICAgICAgICAgIF9QeV9jYXBzdWxlX2hhY2sKLSAgICAgICAgICAgICAgIF9QeV9yZV9zeW50YXgKLSAgICAgICAgICAgICAgIF9QeV9yZV9zeW50YXhfdGFibGUKLQotICAgICAgICAgICAgICAgOyBDb2RlCi0gICAgICAgICAgICAgICBQeUFyZ19QYXJzZQotICAgICAgICAgICAgICAgUHlBcmdfUGFyc2VUdXBsZQotICAgICAgICAgICAgICAgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gICAgICAgICAgICAgICBQeUFyZ19WYVBhcnNlCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9GaW5pCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HZXRGbGFncwotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0dldFNlbGYKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX05ldwotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldENvbnRleHQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0TmFtZQotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldFBvaW50ZXIKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9JbXBvcnQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9Jc1ZhbGlkCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfTmV3Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0Q29udGV4dAotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldERlc3RydWN0b3IKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXROYW1lCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0UG9pbnRlcgotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0FzVm9pZFB0cgotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzYwotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfR2V0RGVzYwotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0ltcG9ydAotICAgICAgICAgICAgICAgUHlDYWxsYWJsZV9DaGVjawotICAgICAgICAgICAgICAgUHlDbGFzc19Jc1N1YmNsYXNzCi0gICAgICAgICAgICAgICBQeUNsYXNzX05ldwotICAgICAgICAgICAgICAgUHlDb2RlX0FkZHIyTGluZQotICAgICAgICAgICAgICAgUHlDb2RlX05ldwotICAgICAgICAgICAgICAgUHlDb21wbGV4X0FzQ0NvbXBsZXgKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9Gcm9tRG91YmxlcwotICAgICAgICAgICAgICAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZQotICAgICAgICAgICAgICAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZQotICAgICAgICAgICAgICAgUHlEaWN0X0NsZWFyCi0gICAgICAgICAgICAgICBQeURpY3RfRGVsSXRlbQotICAgICAgICAgICAgICAgUHlEaWN0X0RlbEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlEaWN0X0l0ZW1zCi0gICAgICAgICAgICAgICBQeURpY3RfS2V5cwotICAgICAgICAgICAgICAgUHlEaWN0X05ldwotICAgICAgICAgICAgICAgUHlEaWN0X05leHQKLSAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlEaWN0X1NpemUKLSAgICAgICAgICAgICAgIFB5RGljdF9WYWx1ZXMKLSAgICAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50Ci0gICAgICAgICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwKLSAgICAgICAgICAgICAgIFB5RXJyX0NoZWNrU2lnbmFscwotICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMKLSAgICAgICAgICAgICAgIFB5RXJyX0ZldGNoCi0gICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQKLSAgICAgICAgICAgICAgIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcwotICAgICAgICAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeQotICAgICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUVycl9PY2N1cnJlZAotICAgICAgICAgICAgICAgUHlFcnJfUHJpbnQKLSAgICAgICAgICAgICAgIFB5RXJyX1ByaW50RXgKLSAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUKLSAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubwotICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCi0gICAgICAgICAgICAgICBQeUVycl9TZXRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUKLSAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdAotICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nCi0gICAgICAgICAgICAgICBQeUV2YWxfQWNxdWlyZUxvY2sKLSAgICAgICAgICAgICAgIFB5RXZhbF9BY3F1aXJlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbEZ1bmN0aW9uCi0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbE1ldGhvZAotICAgICAgICAgICAgICAgUHlFdmFsX0NhbGxPYmplY3QKLSAgICAgICAgICAgICAgIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzCi0gICAgICAgICAgICAgICBQeUV2YWxfRXZhbENvZGUKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucwotICAgICAgICAgICAgICAgUHlFdmFsX0dldEZyYW1lCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0R2xvYmFscwotICAgICAgICAgICAgICAgUHlFdmFsX0dldExvY2FscwotICAgICAgICAgICAgICAgUHlFdmFsX0dldFJlc3RyaWN0ZWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9Jbml0VGhyZWFkcwotICAgICAgICAgICAgICAgUHlFdmFsX1JlbGVhc2VMb2NrCi0gICAgICAgICAgICAgICBQeUV2YWxfUmVsZWFzZVRocmVhZAotICAgICAgICAgICAgICAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9TYXZlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUZpbGVfQXNGaWxlCi0gICAgICAgICAgICAgICBQeUZpbGVfRnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5RmlsZV9Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeUZpbGVfR2V0TGluZQotICAgICAgICAgICAgICAgUHlGaWxlX05hbWUKLSAgICAgICAgICAgICAgIFB5RmlsZV9TZXRCdWZTaXplCi0gICAgICAgICAgICAgICBQeUZpbGVfU29mdFNwYWNlCi0gICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QKLSAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZwotICAgICAgICAgICAgICAgUHlGbG9hdF9Bc0RvdWJsZQotICAgICAgICAgICAgICAgUHlGbG9hdF9Bc1N0cmluZwotICAgICAgICAgICAgICAgUHlGbG9hdF9GaW5pCi0gICAgICAgICAgICAgICBQeUZsb2F0X0Zyb21Eb3VibGUKLSAgICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tQb3AKLSAgICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cAotICAgICAgICAgICAgICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMKLSAgICAgICAgICAgICAgIFB5RnJhbWVfRmluaQotICAgICAgICAgICAgICAgUHlGcmFtZV9Mb2NhbHNUb0Zhc3QKLSAgICAgICAgICAgICAgIFB5RnJhbWVfTmV3Ci0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dldENvZGUKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR2V0RGVmYXVsdHMKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR2V0R2xvYmFscwotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9OZXcKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9BZGRBY2NlbGVyYXRvcnMKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9GaW5kREZBCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfTGFiZWxSZXByCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfUmVtb3ZlQWNjZWxlcmF0b3JzCi0gICAgICAgICAgICAgICBQeUltcG9ydF9BZGRNb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0FwcGVuZEluaXR0YWIKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0NsZWFudXAKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9FeHRlbmRJbml0dGFiCi0gICAgICAgICAgICAgICBQeUltcG9ydF9HZXRNYWdpY051bWJlcgotICAgICAgICAgICAgICAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdAotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXgKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X1JlbG9hZE1vZHVsZQotICAgICAgICAgICAgICAgUHlJbnN0YW5jZV9Eb0Jpbk9wCi0gICAgICAgICAgICAgICBQeUluc3RhbmNlX05ldwotICAgICAgICAgICAgICAgUHlJbnRfQXNMb25nCi0gICAgICAgICAgICAgICBQeUludF9GaW5pCi0gICAgICAgICAgICAgICBQeUludF9Gcm9tTG9uZwotICAgICAgICAgICAgICAgUHlJbnRfR2V0TWF4Ci0gICAgICAgICAgICAgICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUKLSAgICAgICAgICAgICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKLSAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQKLSAgICAgICAgICAgICAgIFB5TGlzdF9Bc1R1cGxlCi0gICAgICAgICAgICAgICBQeUxpc3RfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlMaXN0X0dldFNsaWNlCi0gICAgICAgICAgICAgICBQeUxpc3RfSW5zZXJ0Ci0gICAgICAgICAgICAgICBQeUxpc3RfTmV3Ci0gICAgICAgICAgICAgICBQeUxpc3RfUmV2ZXJzZQotICAgICAgICAgICAgICAgUHlMaXN0X1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5TGlzdF9TZXRTbGljZQotICAgICAgICAgICAgICAgUHlMaXN0X1NpemUKLSAgICAgICAgICAgICAgIFB5TGlzdF9Tb3J0Ci0gICAgICAgICAgICAgICBQeUxvbmdfQXNEb3VibGUKLSAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmcKLTsgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0FzVW5zaWduZWRMb25nCi07ICAgICAgICAgICAgICAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0FzVm9pZFB0cgotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Eb3VibGUKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Wb2lkUHRyCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfSGFzS2V5Ci0gICAgICAgICAgICAgICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlNYXJzaGFsX0luaXQKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGUKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvRmlsZQotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUKLSAgICAgICAgICAgICAgIFB5TWVtX01hbGxvYwotICAgICAgICAgICAgICAgUHlNZW1fUmVhbGxvYwotICAgICAgICAgICAgICAgUHlNZXRob2RfQ2xhc3MKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX0ZpbmkKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX0Z1bmN0aW9uCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9OZXcKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX1NlbGYKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX0dldERpY3QKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX0dldE5hbWUKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX05ldwotICAgICAgICAgICAgICAgUHlOb2RlX0FkZENoaWxkCi0gICAgICAgICAgICAgICBQeU5vZGVfQ29tcGlsZQotICAgICAgICAgICAgICAgUHlOb2RlX0ZyZWUKLTsgICAgICAgICAgICAgICBQeU5vZGVfTGlzdFRyZWUKLSAgICAgICAgICAgICAgIFB5Tm9kZV9OZXcKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0Fic29sdXRlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9BZGQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0FuZAotICAgICAgICAgICAgICAgUHlOdW1iZXJfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0NvZXJjZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfQ29lcmNlRXgKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0RpdmlkZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfRGl2bW9kCi0gICAgICAgICAgICAgICBQeU51bWJlcl9GbG9hdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfSW50Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9JbnZlcnQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0xvbmcKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0xzaGlmdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfTXVsdGlwbHkKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX05lZ2F0aXZlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9PcgotICAgICAgICAgICAgICAgUHlOdW1iZXJfUG9zaXRpdmUKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1Bvd2VyCi0gICAgICAgICAgICAgICBQeU51bWJlcl9SZW1haW5kZXIKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1JzaGlmdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfU3VidHJhY3QKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1hvcgotICAgICAgICAgICAgICAgUHlPU19BZnRlckZvcmsKLSAgICAgICAgICAgICAgIFB5T1NfRmluaUludGVycnVwdHMKLSAgICAgICAgICAgICAgIFB5T1NfSW5pdEludGVycnVwdHMKLSAgICAgICAgICAgICAgIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQKLSAgICAgICAgICAgICAgIFB5T1NfUmVhZGxpbmUKLSAgICAgICAgICAgICAgIFB5T1NfU3RkaW9SZWFkbGluZQotICAgICAgICAgICAgICAgUHlPU19zdHJ0b2wKLSAgICAgICAgICAgICAgIFB5T1Nfc3RydG91bAotICAgICAgICAgICAgICAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uCi0gICAgICAgICAgICAgICBQeU9iamVjdF9DYWxsTWV0aG9kCi0gICAgICAgICAgICAgICBQeU9iamVjdF9DYWxsT2JqZWN0Ci0gICAgICAgICAgICAgICBQeU9iamVjdF9DbXAKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NvbXBhcmUKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0RlbEl0ZW0KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEF0dHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc0F0dHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc2gKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0lzVHJ1ZQotICAgICAgICAgICAgICAgUHlPYmplY3RfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeU9iamVjdF9Ob3QKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1ByaW50Ci0gICAgICAgICAgICAgICBQeU9iamVjdF9SZXByCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRBdHRyCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TdHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX0FkZFRva2VuCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9EZWxldGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX05ldwotICAgICAgICAgICAgICAgUHlQYXJzZXJfUGFyc2VGaWxlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9QYXJzZVN0cmluZwotICAgICAgICAgICAgICAgUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZwotICAgICAgICAgICAgICAgUHlSYW5nZV9OZXcKLSAgICAgICAgICAgICAgIFB5UnVuX0FueUZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX0ZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX0ludGVyYWN0aXZlTG9vcAotICAgICAgICAgICAgICAgUHlSdW5fSW50ZXJhY3RpdmVPbmUKLSAgICAgICAgICAgICAgIFB5UnVuX1NpbXBsZUZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX1NpbXBsZVN0cmluZwotICAgICAgICAgICAgICAgUHlSdW5fU3RyaW5nCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NoZWNrCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NvbmNhdAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9Db250YWlucwotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9Db3VudAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9EZWxJdGVtCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0RlbFNsaWNlCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfR2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfSW4KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfSW5kZXgKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0xpc3QKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfUmVwZWF0Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfU2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfVHVwbGUKLSAgICAgICAgICAgICAgIFB5U2xpY2VfR2V0SW5kaWNlcwotICAgICAgICAgICAgICAgUHlTbGljZV9OZXcKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nCi0gICAgICAgICAgICAgICBQeVN0cmluZ19Db25jYXQKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0NvbmNhdEFuZERlbAotICAgICAgICAgICAgICAgUHlTdHJpbmdfRmluaQotICAgICAgICAgICAgICAgUHlTdHJpbmdfRm9ybWF0Ci0gICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlTdHJpbmdfSW50ZXJuSW5QbGFjZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfU2l6ZQotICAgICAgICAgICAgICAgUHlTeXNfR2V0RmlsZQotICAgICAgICAgICAgICAgUHlTeXNfR2V0T2JqZWN0Ci0gICAgICAgICAgICAgICBQeVN5c19TZXRBcmd2Ci0gICAgICAgICAgICAgICBQeVN5c19TZXRPYmplY3QKLSAgICAgICAgICAgICAgIFB5U3lzX1NldFBhdGgKLSAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyCi0gICAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZG91dAotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9DbGVhcgotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9EZWxldGUKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfR2V0Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX0dldERpY3QKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfTmV3Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX1N3YXAKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfc2VtYQotICAgICAgICAgICAgICAgUHlUaHJlYWRfZG93bl9zZW1hCi0gICAgICAgICAgICAgICBQeVRocmVhZF9leGl0X3RocmVhZAotICAgICAgICAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrCi0gICAgICAgICAgICAgICBQeVRocmVhZF9mcmVlX3NlbWEKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkCi0gICAgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX3VwX3NlbWEKLSAgICAgICAgICAgICAgIFB5VG9rZW5fT25lQ2hhcgotICAgICAgICAgICAgICAgUHlUb2tlbl9Ud29DaGFycwotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZQotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfRnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0Zyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0dldAotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfSGVyZQotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfUHJpbnQKLSAgICAgICAgICAgICAgIFB5VHVwbGVfRmluaQotICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeVR1cGxlX0dldFNsaWNlCi0gICAgICAgICAgICAgICBQeVR1cGxlX05ldwotICAgICAgICAgICAgICAgUHlUdXBsZV9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeVR1cGxlX1NpemUKLSAgICAgICAgICAgICAgIFB5X0FkZFBlbmRpbmdDYWxsCi0gICAgICAgICAgICAgICBQeV9BdEV4aXQKLSAgICAgICAgICAgICAgIFB5X0J1aWxkVmFsdWUKLSAgICAgICAgICAgICAgIFB5X0NvbXBpbGVTdHJpbmcKLSAgICAgICAgICAgICAgIFB5X0VuZEludGVycHJldGVyCi0gICAgICAgICAgICAgICBQeV9FeGl0Ci0gICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yCi0gICAgICAgICAgICAgICBQeV9GZElzSW50ZXJhY3RpdmUKLSAgICAgICAgICAgICAgIFB5X0ZpbmFsaXplCi0gICAgICAgICAgICAgICBQeV9GaW5kTWV0aG9kCi0gICAgICAgICAgICAgICBQeV9GaW5kTWV0aG9kSW5DaGFpbgotICAgICAgICAgICAgICAgUHlfRmx1c2hMaW5lCi0gICAgICAgICAgICAgICBQeV9GcmVlCi0gICAgICAgICAgICAgICBQeV9HZXRBcmdjQXJndgotICAgICAgICAgICAgICAgUHlfR2V0QnVpbGRJbmZvCi0gICAgICAgICAgICAgICBQeV9HZXRDb21waWxlcgotICAgICAgICAgICAgICAgUHlfR2V0Q29weXJpZ2h0Ci0gICAgICAgICAgICAgICBQeV9HZXRFeGVjUHJlZml4Ci0gICAgICAgICAgICAgICBQeV9HZXRQYXRoCi0gICAgICAgICAgICAgICBQeV9HZXRQbGF0Zm9ybQotICAgICAgICAgICAgICAgUHlfR2V0UHJlZml4Ci0gICAgICAgICAgICAgICBQeV9HZXRQcm9ncmFtRnVsbFBhdGgKLSAgICAgICAgICAgICAgIFB5X0dldFByb2dyYW1OYW1lCi0gICAgICAgICAgICAgICBQeV9HZXRQeXRob25Ib21lCi0gICAgICAgICAgICAgICBQeV9HZXRWZXJzaW9uCi0gICAgICAgICAgICAgICBQeV9Jbml0TW9kdWxlNAotICAgICAgICAgICAgICAgUHlfSW5pdGlhbGl6ZQotICAgICAgICAgICAgICAgUHlfSXNJbml0aWFsaXplZAotICAgICAgICAgICAgICAgUHlfTWFpbgotICAgICAgICAgICAgICAgUHlfTWFrZVBlbmRpbmdDYWxscwotICAgICAgICAgICAgICAgUHlfTWFsbG9jCi0gICAgICAgICAgICAgICBQeV9OZXdJbnRlcnByZXRlcgotICAgICAgICAgICAgICAgUHlfUmVhbGxvYwotICAgICAgICAgICAgICAgUHlfUmVwckVudGVyCi0gICAgICAgICAgICAgICBQeV9SZXByTGVhdmUKLSAgICAgICAgICAgICAgIFB5X1NldFByb2dyYW1OYW1lCi0gICAgICAgICAgICAgICBQeV9TZXRQeXRob25Ib21lCi0gICAgICAgICAgICAgICBQeV9WYUJ1aWxkVmFsdWUKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fRmluaV8xCi0gICAgICAgICAgICAgICBfUHlCdWlsdGluX0ZpbmlfMgotICAgICAgICAgICAgICAgX1B5QnVpbHRpbl9Jbml0XzEKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fSW5pdF8yCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0ZpbmkKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0luaXQKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZQotICAgICAgICAgICAgICAgX1B5TG9uZ19OZXcKLSAgICAgICAgICAgICAgIF9QeU1vZHVsZV9DbGVhcgotICAgICAgICAgICAgICAgX1B5T2JqZWN0X05ldwotICAgICAgICAgICAgICAgX1B5T2JqZWN0X05ld1ZhcgotICAgICAgICAgICAgICAgX1B5U3RyaW5nX1Jlc2l6ZQotICAgICAgICAgICAgICAgX1B5U3lzX0luaXQKLSAgICAgICAgICAgICAgIF9QeVR1cGxlX1Jlc2l6ZQotICAgICAgICAgICAgICAgX1B5X01ENUZpbmFsCi0gICAgICAgICAgICAgICBfUHlfTUQ1SW5pdAotICAgICAgICAgICAgICAgX1B5X01ENVVwZGF0ZQotOyAgICAgICAgICAgICAgIF9QeV9hZGRiaXQKLSAgICAgICAgICAgICAgIF9QeV9jX2RpZmYKLSAgICAgICAgICAgICAgIF9QeV9jX25lZwotICAgICAgICAgICAgICAgX1B5X2NfcG93Ci0gICAgICAgICAgICAgICBfUHlfY19wcm9kCi0gICAgICAgICAgICAgICBfUHlfY19xdW90Ci0gICAgICAgICAgICAgICBfUHlfY19zdW0KLTsgICAgICAgICAgICAgICBfUHlfZGVsYml0c2V0Ci07ICAgICAgICAgICAgICAgX1B5X21lcmdlYml0c2V0Ci07ICAgICAgICAgICAgICAgX1B5X21ldGFfZ3JhbW1hcgotOyAgICAgICAgICAgICAgIF9QeV9uZXdiaXRzZXQKLTsgICAgICAgICAgICAgICBfUHlfc2FtZWJpdHNldAotICAgICAgICAgICAgICAgUHlCdWZmZXJfVHlwZQotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbU9iamVjdAotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbU1lbW9yeQotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbVJlYWRXcml0ZU1lbW9yeQotICAgICAgICAgICAgICAgUHlCdWZmZXJfTmV3Ci0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3JlYWRtZS50eHQgYi9QQy9vczJ2YWNwcC9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU4NjA0Li4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotSUJNIFZpc3VhbEFnZSBDL0MrKyBmb3IgT1MvMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UbyBidWlsZCBQeXRob24gZm9yIE9TLzIsIGNoYW5nZSBpbnRvIC4vb3MydmFjcHAgYW5kIGlzc3VlIGFuICdOTUFLRScKLWNvbW1hbmQuICBUaGlzIHdpbGwgYnVpbGQgYSBQWVRIT04xNS5ETEwgY29udGFpbmluZyB0aGUgc2V0IG9mIFB5dGhvbgotbW9kdWxlcyBsaXN0ZWQgaW4gY29uZmlnLmMgYW5kIGEgc21hbGwgUFlUSE9OLkVYRSB0byBzdGFydCB0aGUKLWludGVycHJldGVyLgotCi1CeSBjaGFuZ2luZyB0aGUgQyBjb21waWxlciBmbGFnIC9HZC0gaW4gdGhlIG1ha2VmaWxlIHRvIC9HZCssIHlvdSBjYW4KLXJlZHVjZSB0aGUgc2l6ZSBvZiB0aGVzZSBieSBjYXVzaW5nIFB5dGhvbiB0byBkeW5hbWljYWxseSBsaW5rIHRvIHRoZQotQyBydW50aW1lIERMTHMgaW5zdGVhZCBvZiBpbmNsdWRpbmcgdGhlaXIgYnVsayBpbiB5b3VyIGJpbmFyaWVzLiAKLUhvd2V2ZXIsIHRoaXMgbWVhbnMgdGhhdCBhbnkgc3lzdGVtIG9uIHdoaWNoIHlvdSBydW4gUHl0aG9uIG11c3QgaGF2ZQotdGhlIFZBQysrIGNvbXBpbGVyIGluc3RhbGxlZCBpbiBvcmRlciB0byBoYXZlIHRob3NlIERMTHMgYXZhaWxhYmxlLgotCi1EdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgeW91IG1heSBzZWUgYSBjb3VwbGUgb2YgaGFybWxlc3Mgd2FybmluZ3M6Ci0KLSAgRnJvbSB0aGUgQyBDb21waWxlciwgIk5vIGZ1bmN0aW9uIHByb3RvdHlwZSBnaXZlbiBmb3IgWFhYIiwgd2hpY2gKLSAgY29tZXMgZnJvbSB0aGUgdXNlIG9mIEsmUiBwYXJhbWV0ZXJzIHdpdGhpbiBQeXRob24gZm9yIHBvcnRhYmlsaXR5LgotCi0gIEZyb20gdGhlIElMSUIgbGlicmFyaWFuLCAiTW9kdWxlIE5vdCBGb3VuZCAoWFhYKSIsIHdoaWNoIGNvbWVzCi0gIGZyb20gaXRzIGF0dGVtcHQgdG8gcGVyZm9ybSB0aGUgKC0rKSBvcGVyYXRpb24sIHdoaWNoIHJlbW92ZXMgYW5kCi0gIHRoZW4gYWRkcyBhIC5PQkogdG8gdGhlIGxpYnJhcnkuICBUaGUgZmlyc3QgdGltZSBhIGJ1aWxkIGlzIGRvbmUsCi0gIGl0IG9idmlvdXNseSBjYW5ub3QgcmVtb3ZlIHdoYXQgaXMgbm90IHlldCBidWlsdC4KLQotVGhpcyBidWlsZCBpbmNsdWRlcyBzdXBwb3J0IGZvciBtb3N0IFB5dGhvbiBmdW5jdGlvbmFsaXR5IGFzIHdlbGwgYXMKLVRDUC9JUCBzb2NrZXRzLiAgSXQgb21pdHMgdGhlIFBvc2l4IGFiaWxpdHkgdG8gJ2ZvcmsnIGEgcHJvY2VzcyBidXQKLXN1cHBvcnRzIHRocmVhZHMgdXNpbmcgT1MvMiBuYXRpdmUgY2FwYWJpbGl0aWVzLiAgSSBoYXZlIHRyaWVkIHRvCi1zdXBwb3J0IGV2ZXJ5dGhpbmcgcG9zc2libGUgYnV0IGhlcmUgYXJlIGEgZmV3IHVzYWdlIG5vdGVzLgotCi0KLS0tIG9zLnBvcGVuKCkgVXNhZ2UgV2FybmluZ3MKLQotV2l0aCByZXNwZWN0IHRvIG15IGltcGxlbWVudGF0aW9uIG9mIHBvcGVuKCkgdW5kZXIgT1MvMjoKLQotICAgIGltcG9ydCBvcwotCi0gICAgZmQgPSBvcy5wb3BlbigicGt6aXAuZXhlIC1AIGp1bmsuemlwIiwgJ3diJykKLSAgICBmZC53cml0ZSgiZmlsZTEudHh0XG4iKQotICAgIGZkLndyaXRlKCJmaWxlMi50eHRcbiIpCi0gICAgZmQud3JpdGUoImZpbGUzLnR4dFxuIikKLSAgICBmZC53cml0ZSgiXHgxYSIpICAjIFNob3VsZCBOb3QgQmUgTmVjZXNzYXJ5IEJ1dCBJcwotICAgIGZkLmNsb3NlKCkKLQotVGhlcmUgaXMgYSBidWcsIGVpdGhlciBpbiB0aGUgVkFDKysgY29tcGlsZXIgb3IgT1MvMiBpdHNlbGYsIHdoZXJlIHRoZQotc2ltcGxlIGNsb3N1cmUgb2YgdGhlIHdyaXRlLXNpZGUgb2YgYSBwaXBlIC10by0gYSBwcm9jZXNzIGRvZXMgbm90Ci1zZW5kIGFuIEVPRiB0byB0aGF0IHByb2Nlc3MuICBJIGZpbmQgSSBtdXN0IGV4cGxpY2l0bHkgd3JpdGUgYQotY29udHJvbC1aIChFT0YpIGJlZm9yZSBjbG9zaW5nIHRoZSBwaXBlLiAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIHdoZW4KLXVzaW5nIHBvcGVuKCkgaW4gcmVhZCBtb2RlLgotCi1PbmUgb3RoZXIgc2xpZ2h0IGRpZmZlcmVuY2Ugd2l0aCBteSBwb3BlbigpIGlzIHRoYXQgSSByZXR1cm4gTm9uZQotZnJvbSB0aGUgY2xvc2UoKSwgaW5zdGVhZCBvZiB0aGUgVW5peCBjb252ZW50aW9uIG9mIHRoZSByZXR1cm4gY29kZQotb2YgdGhlIHNwYXduZWQgcHJvZ3JhbS4gIEkgY291bGQgZmluZCBubyBlYXN5IHdheSB0byBkbyB0aGlzIHVuZGVyCi1PUy8yLgotCi0KLS0tIEJFR0lOTElCUEFUSC9FTkRMSUJQQVRICi0KLVdpdGggcmVzcGVjdCB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHRoaXMgT1MvMiBwb3J0IHN1cHBvcnRzIHRoZQotc3BlY2lhbC10by1PUy8yIG1hZ2ljIG5hbWVzIG9mICdCRUdJTkxJQlBBVEgnIGFuZCAnRU5ETElCUEFUSCcgdG8KLWNvbnRyb2wgd2hlcmUgdG8gbG9hZCBjb252ZW50aW9uYWwgRExMcyBmcm9tLiAgVGhvc2UgbmFtZXMgYXJlCi1pbnRlcmNlcHRlZCBhbmQgY29udmVydGVkIHRvIGNhbGxzIG9uIHRoZSBPUy8yIGtlcm5lbCBBUElzIGFuZAotYXJlIGluaGVyaXRlZCBieSBjaGlsZCBwcm9jZXNzZXMsIHdoZXRoZXIgUHl0aG9uLWJhc2VkIG9yIG5vdC4KLQotQSBmZXcgbmV3IGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBvcyBtb2R1bGU6Ci0KLSAgICBvcy5tZW1pbnN0YWxsZWQgICMgQ291bnQgb2YgQnl0ZXMgb2YgUkFNIEluc3RhbGxlZCBvbiBNYWNoaW5lCi0gICAgb3MubWVta2VybmVsICAgICAjIENvdW50IG9mIEJ5dGVzIG9mIFJBTSBSZXNlcnZlZCAoTm9uLVN3YXBwYWJsZSkKLSAgICBvcy5tZW12aXJ0dWFsICAgICMgQ291bnQgb2YgQnl0ZXMgb2YgVmlydHVhbCBSQU0gUG9zc2libGUKLSAgICBvcy50aW1lc2xpY2UgICAgICMgRHVyYXRpb24gb2YgU2NoZWR1bGVyIFRpbWVzbGljZSwgaW4gTWlsbGlzZWNvbmRzCi0gICAgb3MubWF4cGF0aGxlbiAgICAjIE1heGltdW0gTGVuZ3RoIG9mIGEgUGF0aCBTcGVjaWZpY2F0aW9uLCBpbiBjaGFycwotICAgIG9zLm1heG5hbWVsZW4gICAgIyBNYXhpbXVtIExlbmd0aCBvZiBhIFNpbmdsZSBEaXIvRmlsZSBOYW1lLCBpbiBjaGFycwotICAgIG9zLnZlcnNpb24gICAgICAgIyBWZXJzaW9uIG9mIE9TLzIgQmVpbmcgUnVuIGUuZy4gIjQuMDAiCi0gICAgb3MucmV2aXNpb24gICAgICAjIFJldmlzaW9uIG9mIE9TLzIgQmVpbmcgUnVuICh1c3VhbGx5IHplcm8pCi0gICAgb3MuYm9vdGRyaXZlICAgICAjIERyaXZlIHRoYXQgU3lzdGVtIEJvb3RlZCBGcm9tIGUuZy4gIkM6IgotICAgICAgICAgICAgICAgICAgICAgIyAodXNlZnVsIHRvIGZpbmQgdGhlIENPTkZJRy5TWVMgdXNlZCB0byBib290IHdpdGgpCi0KLQotLS0gVXNpbmcgUHl0aG9uIGFzIHRoZSBEZWZhdWx0IE9TLzIgQmF0Y2ggTGFuZ3VhZ2UKLQotTm90ZSB0aGF0IE9TLzIgc3VwcG9ydHMgdGhlIFVuaXggdGVjaG5pcXVlIG9mIHB1dHRpbmcgdGhlIHNwZWNpYWwKLWNvbW1lbnQgbGluZSBhdCB0aGUgdGltZSBvZiBzY3JpcHRzIGUuZy4gIiMhL3Vzci9iaW4vcHl0aG9uIiBpbgotYSBkaWZmZXJlbnQgc3ludGFjdGljIGZvcm0uICBUbyBkbyB0aGlzLCBwdXQgeW91ciBzY3JpcHQgaW50byBhIGZpbGUKLXdpdGggYSAuQ01EIGV4dGVuc2lvbiBhbmQgYWRkZWQgJ2V4dHByb2MnIHRvIHRoZSB0b3AgYXMgZm9sbG93czoKLQotICAgIGV4dHByb2MgQzpcUHl0aG9uXFB5dGhvbi5leGUgLXgKLSAgICBpbXBvcnQgb3MKLSAgICBwcmludCAiSGVsbG8gZnJvbSBQeXRob24iCi0KLVRoZSAnLXgnIG9wdGlvbiB0ZWxscyBQeXRob24gdG8gc2tpcCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlsZQotd2hpbGUgcHJvY2Vzc2luZyB0aGUgcmVzdCBhcyBub3JtYWwgUHl0aG9uIHNvdXJjZS4KLQotCi0tLSBTdWdnZXN0ZWQgRW52aXJvbm1lbnQgVmFyaWFibGUgU2V0dXAKLQotV2l0aCByZXNwZWN0IHRvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIFB5dGhvbiwgSSB1c2UgdGhlCi1mb2xsb3dpbmcgc2V0dXA6Ci0KLSAgICBTZXQgUFlUSE9OSE9NRT1FOlxUYXVcUHJvamVjdHNcUHl0aG9uO0Q6XERMTHMKLSAgICBTZXQgUFlUSE9OUEFUSD0uO0U6XFRhdVxQcm9qZWN0c1xQeXRob25cTGliOyBcCi0gICAgICAgICAgICAgICAgICAgICBFOlxUYXVcUHJvamVjdHNcUHl0aG9uXExpYlxwbGF0LXdpbgotCi1UaGUgRVhFQ19QUkVGSVggKG9wdGlvbmFsIHNlY29uZCBwYXRoc3BlYyBvbiBQWVRIT05IT01FKSBpcyB3aGVyZQoteW91IHB1dCBhbnkgUHl0aG9uIGV4dGVuc2lvbiBETExzIHlvdSBtYXkgY3JlYXRlL29idGFpbi4gIFRoZXJlCi1hcmUgbm9uZSBwcm92aWRlZCB3aXRoIHRoaXMgcmVsZWFzZS4KLQotCi0tLSBDb250YWN0IEluZm8KLQotSmVmZiBSdXNoIGlzIG5vIGxvbmdlciBzdXBwb3J0aW5nIHRoZSBWQUNQUCBwb3J0IDotKAotCi1JIGRvbid0IGhhdmUgdGhlIFZBQ1BQIGNvbXBpbGVyLCBzbyBjYW4ndCByZWxpYWJseSBtYWludGFpbiB0aGlzIHBvcnQuIAotCi1BbnlvbmUgd2l0aCBWQUNQUCB3aG8gY2FuIGNvbnRyaWJ1dGUgcGF0Y2hlcyB0byBrZWVwIHRoaXMgcG9ydCBidWlsZGFibGUKLXNob3VsZCB1cGxvYWQgdGhlbSB0byB0aGUgUHl0aG9uIFBhdGNoIE1hbmFnZXIgYXQgU291cmNlZm9yZ2UgYW5kIAotYXNzaWduIHRoZW0gdG8gbWUgZm9yIHJldmlldy9jaGVja2luLgotCi1BbmRyZXcgTWFjSW50eXJlCi1haW1hY2ludHlyZSBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKLUF1Z3VzdCAxOCwgMjAwMi4KZGlmZiAtLWdpdCBhL1BDL3B5Y29uZmlnLmggYi9QQy9weWNvbmZpZy5oCmluZGV4IGYzMjBjY2YuLjI5OTUyN2QgMTAwNjQ0Ci0tLSBhL1BDL3B5Y29uZmlnLmgKKysrIGIvUEMvcHljb25maWcuaApAQCAtNzQsOCArNzQsNiBAQAogI2RlZmluZSBET05UX0hBVkVfU0lHX1BBVVNFCiAjZGVmaW5lIExPTkdfQklUCTMyCiAjZGVmaW5lIFdPUkRfQklUIDMyCi0jZGVmaW5lIFBSRUZJWCAiIgotI2RlZmluZSBFWEVDX1BSRUZJWCAiIgogCiAjZGVmaW5lIE1TX1dJTjMyIC8qIG9ubHkgc3VwcG9ydCB3aW4zMiBhbmQgZ3JlYXRlci4gKi8KICNkZWZpbmUgTVNfV0lORE9XUwpAQCAtMTU2LDE1ICsxNTQsOSBAQAogI2VuZGlmIC8qIE1TX1dJTjY0ICovCiAKIC8qIHNldCB0aGUgdmVyc2lvbiBtYWNyb3MgZm9yIHRoZSB3aW5kb3dzIGhlYWRlcnMgKi8KLSNpZmRlZiBNU19XSU5YNjQKLS8qIDY0IGJpdCBvbmx5IHJ1bnMgb24gWFAgb3IgZ3JlYXRlciAqLworLyogUHl0aG9uIDMuNCsgcmVxdWlyZXMgV2luZG93cyBYUCBvciBncmVhdGVyICovCiAjZGVmaW5lIFB5X1dJTlZFUiAweDA1MDEgLyogX1dJTjMyX1dJTk5UX1dJTlhQICovCiAjZGVmaW5lIFB5X05URERJIE5URERJX1dJTlhQCi0jZWxzZQotLyogUHl0aG9uIDIuNisgcmVxdWlyZXMgV2luZG93cyAyMDAwIG9yIGdyZWF0ZXIgKi8KLSNkZWZpbmUgUHlfV0lOVkVSIDB4MDUwMCAvKiBfV0lOMzJfV0lOTlRfV0lOMksgKi8KLSNkZWZpbmUgUHlfTlREREkgTlRERElfV0lOMktTUDQKLSNlbmRpZgogCiAvKiBXZSBvbmx5IHNldCB0aGVzZSB2YWx1ZXMgd2hlbiBidWlsZGluZyBQeXRob24gLSB3ZSBkb24ndCB3YW50IHRvIGZvcmNlCiAgICB0aGVzZSB2YWx1ZXMgb24gZXh0ZW5zaW9ucywgYXMgdGhhdCB3aWxsIGFmZmVjdCB0aGUgcHJvdG90eXBlcyBhbmQKQEAgLTE5OSw4ICsxOTEsMTAgQEAKICNkZWZpbmUgSEFWRV9TU0laRV9UIDEKIAogI2lmIGRlZmluZWQoTVNfV0lOMzIpICYmICFkZWZpbmVkKE1TX1dJTjY0KQotI2lmZGVmIF9NX0lYODYKKyNpZiBkZWZpbmVkKF9NX0lYODYpCiAjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCIzMiBiaXQgKEludGVsKSIpCisjZWxpZiBkZWZpbmVkKF9NX0FSTSkKKyNkZWZpbmUgQ09NUElMRVIgX1B5X1BBU1RFX1ZFUlNJT04oIjMyIGJpdCAoQVJNKSIpCiAjZWxzZQogI2RlZmluZSBDT01QSUxFUiBfUHlfUEFTVEVfVkVSU0lPTigiMzIgYml0IChVbmtub3duKSIpCiAjZW5kaWYKQEAgLTMyNCwxMSArMzE4LDExIEBACiAJCQl0aGVpciBNYWtlZmlsZSAob3RoZXIgY29tcGlsZXJzIGFyZSBnZW5lcmFsbHkKIAkJCXRha2VuIGNhcmUgb2YgYnkgZGlzdHV0aWxzLikgKi8KICMJCQlpZiBkZWZpbmVkKF9ERUJVRykKLSMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zM19kLmxpYiIpCisjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzRfZC5saWIiKQogIwkJCWVsaWYgZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkKICMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zLmxpYiIpCiAjCQkJZWxzZQotIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjMzLmxpYiIpCisjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzQubGliIikKICMJCQllbmRpZiAvKiBfREVCVUcgKi8KICMJCWVuZGlmIC8qIF9NU0NfVkVSICovCiAjCWVuZGlmIC8qIFB5X0JVSUxEX0NPUkUgKi8KQEAgLTcyNyw2ICs3MjEsOSBAQAogLyogVGhlIHNpemUgb2YgYHdjaGFyX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjZGVmaW5lIFNJWkVPRl9XQ0hBUl9UIDIKIAorLyogVGhlIHNpemUgb2YgYHBpZF90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfUElEX1QgU0laRU9GX0lOVAorCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGRsIGxpYnJhcnkgKC1sZGwpLiAgKi8KIC8qICN1bmRlZiBIQVZFX0xJQkRMICovCiAKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbi5tayBiL1BDL3B5dGhvbi5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2NTEwNi4uMDAwMDAwMAotLS0gYS9QQy9weXRob24ubWsKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXByb2plY3QgOiBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9vczJccHl0aF9vczIuZXhlIG46XHB5dGhvblxweXRob24tMS4mDQotNS4xXHBjXHdhdF9kb3NccHl0aF9kb3MuZXhlIC5TWU1CT0xJQw0KLQ0KLSFpbmNsdWRlIG46XHB5dGhvblxweXRob24tMS41LjFccGNcd2F0X29zMlxweXRoX29zMi5tazENCi0haW5jbHVkZSBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9kb3NccHl0aF9kb3MubWsxDQpkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMy5kZWYgYi9QQy9weXRob24zLmRlZgppbmRleCA5NjZlNmM5Li4zN2U0NTRiIDEwMDY0NAotLS0gYS9QQy9weXRob24zLmRlZgorKysgYi9QQy9weXRob24zLmRlZgpAQCAtMSw2OTkgKzEsNzAxIEBACi07IFdoZW4gY2hhbmdpbmcgdGhpcyBmaWxlLCBydW4gcHl0aG9uMzNnZW4ucHkKKzsgV2hlbiBjaGFuZ2luZyB0aGlzIGZpbGUsIHJ1biBweXRob24zNGdlbi5weQogTElCUkFSWQkicHl0aG9uMyIKIEVYUE9SVFMKLSAgUHlBcmdfUGFyc2U9cHl0aG9uMzMuUHlBcmdfUGFyc2UKLSAgUHlBcmdfUGFyc2VUdXBsZT1weXRob24zMy5QeUFyZ19QYXJzZVR1cGxlCi0gIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zMy5QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMKLSAgUHlBcmdfVW5wYWNrVHVwbGU9cHl0aG9uMzMuUHlBcmdfVW5wYWNrVHVwbGUKLSAgUHlBcmdfVmFQYXJzZT1weXRob24zMy5QeUFyZ19WYVBhcnNlCi0gIFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzPXB5dGhvbjMzLlB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gIFB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cz1weXRob24zMy5QeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHMKLSAgUHlCYXNlT2JqZWN0X1R5cGU9cHl0aG9uMzMuUHlCYXNlT2JqZWN0X1R5cGUgREFUQQotICBQeUJvb2xfRnJvbUxvbmc9cHl0aG9uMzMuUHlCb29sX0Zyb21Mb25nCi0gIFB5Qm9vbF9UeXBlPXB5dGhvbjMzLlB5Qm9vbF9UeXBlIERBVEEKLSAgUHlCeXRlQXJyYXlJdGVyX1R5cGU9cHl0aG9uMzMuUHlCeXRlQXJyYXlJdGVyX1R5cGUgREFUQQotICBQeUJ5dGVBcnJheV9Bc1N0cmluZz1weXRob24zMy5QeUJ5dGVBcnJheV9Bc1N0cmluZwotICBQeUJ5dGVBcnJheV9Db25jYXQ9cHl0aG9uMzMuUHlCeXRlQXJyYXlfQ29uY2F0Ci0gIFB5Qnl0ZUFycmF5X0Zyb21PYmplY3Q9cHl0aG9uMzMuUHlCeXRlQXJyYXlfRnJvbU9iamVjdAotICBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zMy5QeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZQotICBQeUJ5dGVBcnJheV9SZXNpemU9cHl0aG9uMzMuUHlCeXRlQXJyYXlfUmVzaXplCi0gIFB5Qnl0ZUFycmF5X1NpemU9cHl0aG9uMzMuUHlCeXRlQXJyYXlfU2l6ZQotICBQeUJ5dGVBcnJheV9UeXBlPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X1R5cGUgREFUQQotICBQeUJ5dGVzSXRlcl9UeXBlPXB5dGhvbjMzLlB5Qnl0ZXNJdGVyX1R5cGUgREFUQQotICBQeUJ5dGVzX0FzU3RyaW5nPXB5dGhvbjMzLlB5Qnl0ZXNfQXNTdHJpbmcKLSAgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemU9cHl0aG9uMzMuUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUKLSAgUHlCeXRlc19Db25jYXQ9cHl0aG9uMzMuUHlCeXRlc19Db25jYXQKLSAgUHlCeXRlc19Db25jYXRBbmREZWw9cHl0aG9uMzMuUHlCeXRlc19Db25jYXRBbmREZWwKLSAgUHlCeXRlc19EZWNvZGVFc2NhcGU9cHl0aG9uMzMuUHlCeXRlc19EZWNvZGVFc2NhcGUKLSAgUHlCeXRlc19Gcm9tRm9ybWF0PXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbUZvcm1hdAotICBQeUJ5dGVzX0Zyb21Gb3JtYXRWPXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbUZvcm1hdFYKLSAgUHlCeXRlc19Gcm9tT2JqZWN0PXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbU9iamVjdAotICBQeUJ5dGVzX0Zyb21TdHJpbmc9cHl0aG9uMzMuUHlCeXRlc19Gcm9tU3RyaW5nCi0gIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzMuUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQotICBQeUJ5dGVzX1JlcHI9cHl0aG9uMzMuUHlCeXRlc19SZXByCi0gIFB5Qnl0ZXNfU2l6ZT1weXRob24zMy5QeUJ5dGVzX1NpemUKLSAgUHlCeXRlc19UeXBlPXB5dGhvbjMzLlB5Qnl0ZXNfVHlwZSBEQVRBCi0gIFB5Q0Z1bmN0aW9uX0NhbGw9cHl0aG9uMzMuUHlDRnVuY3Rpb25fQ2FsbAotICBQeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0PXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0NsZWFyRnJlZUxpc3QKLSAgUHlDRnVuY3Rpb25fR2V0RmxhZ3M9cHl0aG9uMzMuUHlDRnVuY3Rpb25fR2V0RmxhZ3MKLSAgUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb249cHl0aG9uMzMuUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KLSAgUHlDRnVuY3Rpb25fR2V0U2VsZj1weXRob24zMy5QeUNGdW5jdGlvbl9HZXRTZWxmCi0gIFB5Q0Z1bmN0aW9uX05ld0V4PXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX05ld0V4Ci0gIFB5Q0Z1bmN0aW9uX1R5cGU9cHl0aG9uMzMuUHlDRnVuY3Rpb25fVHlwZSBEQVRBCi0gIFB5Q2FsbEl0ZXJfTmV3PXB5dGhvbjMzLlB5Q2FsbEl0ZXJfTmV3Ci0gIFB5Q2FsbEl0ZXJfVHlwZT1weXRob24zMy5QeUNhbGxJdGVyX1R5cGUgREFUQQotICBQeUNhbGxhYmxlX0NoZWNrPXB5dGhvbjMzLlB5Q2FsbGFibGVfQ2hlY2sKLSAgUHlDYXBzdWxlX0dldENvbnRleHQ9cHl0aG9uMzMuUHlDYXBzdWxlX0dldENvbnRleHQKLSAgUHlDYXBzdWxlX0dldERlc3RydWN0b3I9cHl0aG9uMzMuUHlDYXBzdWxlX0dldERlc3RydWN0b3IKLSAgUHlDYXBzdWxlX0dldE5hbWU9cHl0aG9uMzMuUHlDYXBzdWxlX0dldE5hbWUKLSAgUHlDYXBzdWxlX0dldFBvaW50ZXI9cHl0aG9uMzMuUHlDYXBzdWxlX0dldFBvaW50ZXIKLSAgUHlDYXBzdWxlX0ltcG9ydD1weXRob24zMy5QeUNhcHN1bGVfSW1wb3J0Ci0gIFB5Q2Fwc3VsZV9Jc1ZhbGlkPXB5dGhvbjMzLlB5Q2Fwc3VsZV9Jc1ZhbGlkCi0gIFB5Q2Fwc3VsZV9OZXc9cHl0aG9uMzMuUHlDYXBzdWxlX05ldwotICBQeUNhcHN1bGVfU2V0Q29udGV4dD1weXRob24zMy5QeUNhcHN1bGVfU2V0Q29udGV4dAotICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3Rvcj1weXRob24zMy5QeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgotICBQeUNhcHN1bGVfU2V0TmFtZT1weXRob24zMy5QeUNhcHN1bGVfU2V0TmFtZQotICBQeUNhcHN1bGVfU2V0UG9pbnRlcj1weXRob24zMy5QeUNhcHN1bGVfU2V0UG9pbnRlcgotICBQeUNhcHN1bGVfVHlwZT1weXRob24zMy5QeUNhcHN1bGVfVHlwZSBEQVRBCi0gIFB5Q2xhc3NNZXRob2REZXNjcl9UeXBlPXB5dGhvbjMzLlB5Q2xhc3NNZXRob2REZXNjcl9UeXBlIERBVEEKLSAgUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycwotICBQeUNvZGVjX0RlY29kZT1weXRob24zMy5QeUNvZGVjX0RlY29kZQotICBQeUNvZGVjX0RlY29kZXI9cHl0aG9uMzMuUHlDb2RlY19EZWNvZGVyCi0gIFB5Q29kZWNfRW5jb2RlPXB5dGhvbjMzLlB5Q29kZWNfRW5jb2RlCi0gIFB5Q29kZWNfRW5jb2Rlcj1weXRob24zMy5QeUNvZGVjX0VuY29kZXIKLSAgUHlDb2RlY19JZ25vcmVFcnJvcnM9cHl0aG9uMzMuUHlDb2RlY19JZ25vcmVFcnJvcnMKLSAgUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXI9cHl0aG9uMzMuUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIKLSAgUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXI9cHl0aG9uMzMuUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIKLSAgUHlDb2RlY19Lbm93bkVuY29kaW5nPXB5dGhvbjMzLlB5Q29kZWNfS25vd25FbmNvZGluZwotICBQeUNvZGVjX0xvb2t1cEVycm9yPXB5dGhvbjMzLlB5Q29kZWNfTG9va3VwRXJyb3IKLSAgUHlDb2RlY19SZWdpc3Rlcj1weXRob24zMy5QeUNvZGVjX1JlZ2lzdGVyCi0gIFB5Q29kZWNfUmVnaXN0ZXJFcnJvcj1weXRob24zMy5QeUNvZGVjX1JlZ2lzdGVyRXJyb3IKLSAgUHlDb2RlY19SZXBsYWNlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfUmVwbGFjZUVycm9ycwotICBQeUNvZGVjX1N0cmVhbVJlYWRlcj1weXRob24zMy5QeUNvZGVjX1N0cmVhbVJlYWRlcgotICBQeUNvZGVjX1N0cmVhbVdyaXRlcj1weXRob24zMy5QeUNvZGVjX1N0cmVhbVdyaXRlcgotICBQeUNvZGVjX1N0cmljdEVycm9ycz1weXRob24zMy5QeUNvZGVjX1N0cmljdEVycm9ycwotICBQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMKLSAgUHlDb21wbGV4X0Zyb21Eb3VibGVzPXB5dGhvbjMzLlB5Q29tcGxleF9Gcm9tRG91YmxlcwotICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlPXB5dGhvbjMzLlB5Q29tcGxleF9JbWFnQXNEb3VibGUKLSAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZT1weXRob24zMy5QeUNvbXBsZXhfUmVhbEFzRG91YmxlCi0gIFB5Q29tcGxleF9UeXBlPXB5dGhvbjMzLlB5Q29tcGxleF9UeXBlIERBVEEKLSAgUHlEZXNjcl9OZXdDbGFzc01ldGhvZD1weXRob24zMy5QeURlc2NyX05ld0NsYXNzTWV0aG9kCi0gIFB5RGVzY3JfTmV3R2V0U2V0PXB5dGhvbjMzLlB5RGVzY3JfTmV3R2V0U2V0Ci0gIFB5RGVzY3JfTmV3TWVtYmVyPXB5dGhvbjMzLlB5RGVzY3JfTmV3TWVtYmVyCi0gIFB5RGVzY3JfTmV3TWV0aG9kPXB5dGhvbjMzLlB5RGVzY3JfTmV3TWV0aG9kCi0gIFB5RGljdEl0ZW1zX1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlbXNfVHlwZSBEQVRBCi0gIFB5RGljdEl0ZXJJdGVtX1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlckl0ZW1fVHlwZSBEQVRBCi0gIFB5RGljdEl0ZXJLZXlfVHlwZT1weXRob24zMy5QeURpY3RJdGVyS2V5X1R5cGUgREFUQQotICBQeURpY3RJdGVyVmFsdWVfVHlwZT1weXRob24zMy5QeURpY3RJdGVyVmFsdWVfVHlwZSBEQVRBCi0gIFB5RGljdEtleXNfVHlwZT1weXRob24zMy5QeURpY3RLZXlzX1R5cGUgREFUQQotICBQeURpY3RQcm94eV9OZXc9cHl0aG9uMzMuUHlEaWN0UHJveHlfTmV3Ci0gIFB5RGljdFByb3h5X1R5cGU9cHl0aG9uMzMuUHlEaWN0UHJveHlfVHlwZSBEQVRBCi0gIFB5RGljdFZhbHVlc19UeXBlPXB5dGhvbjMzLlB5RGljdFZhbHVlc19UeXBlIERBVEEKLSAgUHlEaWN0X0NsZWFyPXB5dGhvbjMzLlB5RGljdF9DbGVhcgotICBQeURpY3RfQ29udGFpbnM9cHl0aG9uMzMuUHlEaWN0X0NvbnRhaW5zCi0gIFB5RGljdF9Db3B5PXB5dGhvbjMzLlB5RGljdF9Db3B5Ci0gIFB5RGljdF9EZWxJdGVtPXB5dGhvbjMzLlB5RGljdF9EZWxJdGVtCi0gIFB5RGljdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjMzLlB5RGljdF9EZWxJdGVtU3RyaW5nCi0gIFB5RGljdF9HZXRJdGVtPXB5dGhvbjMzLlB5RGljdF9HZXRJdGVtCi0gIFB5RGljdF9HZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5RGljdF9HZXRJdGVtU3RyaW5nCi0gIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yPXB5dGhvbjMzLlB5RGljdF9HZXRJdGVtV2l0aEVycm9yCi0gIFB5RGljdF9JdGVtcz1weXRob24zMy5QeURpY3RfSXRlbXMKLSAgUHlEaWN0X0tleXM9cHl0aG9uMzMuUHlEaWN0X0tleXMKLSAgUHlEaWN0X01lcmdlPXB5dGhvbjMzLlB5RGljdF9NZXJnZQotICBQeURpY3RfTWVyZ2VGcm9tU2VxMj1weXRob24zMy5QeURpY3RfTWVyZ2VGcm9tU2VxMgotICBQeURpY3RfTmV3PXB5dGhvbjMzLlB5RGljdF9OZXcKLSAgUHlEaWN0X05leHQ9cHl0aG9uMzMuUHlEaWN0X05leHQKLSAgUHlEaWN0X1NldEl0ZW09cHl0aG9uMzMuUHlEaWN0X1NldEl0ZW0KLSAgUHlEaWN0X1NldEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlEaWN0X1NldEl0ZW1TdHJpbmcKLSAgUHlEaWN0X1NpemU9cHl0aG9uMzMuUHlEaWN0X1NpemUKLSAgUHlEaWN0X1R5cGU9cHl0aG9uMzMuUHlEaWN0X1R5cGUgREFUQQotICBQeURpY3RfVXBkYXRlPXB5dGhvbjMzLlB5RGljdF9VcGRhdGUKLSAgUHlEaWN0X1ZhbHVlcz1weXRob24zMy5QeURpY3RfVmFsdWVzCi0gIFB5RWxsaXBzaXNfVHlwZT1weXRob24zMy5QeUVsbGlwc2lzX1R5cGUgREFUQQotICBQeUVudW1fVHlwZT1weXRob24zMy5QeUVudW1fVHlwZSBEQVRBCi0gIFB5RXJyX0JhZEFyZ3VtZW50PXB5dGhvbjMzLlB5RXJyX0JhZEFyZ3VtZW50Ci0gIFB5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zMy5QeUVycl9CYWRJbnRlcm5hbENhbGwKLSAgUHlFcnJfQ2hlY2tTaWduYWxzPXB5dGhvbjMzLlB5RXJyX0NoZWNrU2lnbmFscwotICBQeUVycl9DbGVhcj1weXRob24zMy5QeUVycl9DbGVhcgotICBQeUVycl9EaXNwbGF5PXB5dGhvbjMzLlB5RXJyX0Rpc3BsYXkKLSAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zMy5QeUVycl9FeGNlcHRpb25NYXRjaGVzCi0gIFB5RXJyX0ZldGNoPXB5dGhvbjMzLlB5RXJyX0ZldGNoCi0gIFB5RXJyX0Zvcm1hdD1weXRob24zMy5QeUVycl9Gb3JtYXQKLSAgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzPXB5dGhvbjMzLlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcwotICBQeUVycl9OZXdFeGNlcHRpb249cHl0aG9uMzMuUHlFcnJfTmV3RXhjZXB0aW9uCi0gIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M9cHl0aG9uMzMuUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYwotICBQeUVycl9Ob01lbW9yeT1weXRob24zMy5QeUVycl9Ob01lbW9yeQotICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb249cHl0aG9uMzMuUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCi0gIFB5RXJyX09jY3VycmVkPXB5dGhvbjMzLlB5RXJyX09jY3VycmVkCi0gIFB5RXJyX1ByaW50PXB5dGhvbjMzLlB5RXJyX1ByaW50Ci0gIFB5RXJyX1ByaW50RXg9cHl0aG9uMzMuUHlFcnJfUHJpbnRFeAotICBQeUVycl9Qcm9ncmFtVGV4dD1weXRob24zMy5QeUVycl9Qcm9ncmFtVGV4dAotICBQeUVycl9SZXN0b3JlPXB5dGhvbjMzLlB5RXJyX1Jlc3RvcmUKLSAgUHlFcnJfU2V0RnJvbUVycm5vPXB5dGhvbjMzLlB5RXJyX1NldEZyb21FcnJubwotICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWU9cHl0aG9uMzMuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCi0gIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdD1weXRob24zMy5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QKLSAgUHlFcnJfU2V0SW50ZXJydXB0PXB5dGhvbjMzLlB5RXJyX1NldEludGVycnVwdAotICBQeUVycl9TZXROb25lPXB5dGhvbjMzLlB5RXJyX1NldE5vbmUKLSAgUHlFcnJfU2V0T2JqZWN0PXB5dGhvbjMzLlB5RXJyX1NldE9iamVjdAotICBQeUVycl9TZXRTdHJpbmc9cHl0aG9uMzMuUHlFcnJfU2V0U3RyaW5nCi0gIFB5RXJyX1N5bnRheExvY2F0aW9uPXB5dGhvbjMzLlB5RXJyX1N5bnRheExvY2F0aW9uCi0gIFB5RXJyX1dhcm5FeD1weXRob24zMy5QeUVycl9XYXJuRXgKLSAgUHlFcnJfV2FybkV4cGxpY2l0PXB5dGhvbjMzLlB5RXJyX1dhcm5FeHBsaWNpdAotICBQeUVycl9XYXJuRm9ybWF0PXB5dGhvbjMzLlB5RXJyX1dhcm5Gb3JtYXQKLSAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlPXB5dGhvbjMzLlB5RXJyX1dyaXRlVW5yYWlzYWJsZQotICBQeUV2YWxfQWNxdWlyZUxvY2s9cHl0aG9uMzMuUHlFdmFsX0FjcXVpcmVMb2NrCi0gIFB5RXZhbF9BY3F1aXJlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9BY3F1aXJlVGhyZWFkCi0gIFB5RXZhbF9DYWxsRnVuY3Rpb249cHl0aG9uMzMuUHlFdmFsX0NhbGxGdW5jdGlvbgotICBQeUV2YWxfQ2FsbE1ldGhvZD1weXRob24zMy5QeUV2YWxfQ2FsbE1ldGhvZAotICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3Jkcz1weXRob24zMy5QeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcwotICBQeUV2YWxfRXZhbENvZGU9cHl0aG9uMzMuUHlFdmFsX0V2YWxDb2RlCi0gIFB5RXZhbF9FdmFsQ29kZUV4PXB5dGhvbjMzLlB5RXZhbF9FdmFsQ29kZUV4Ci0gIFB5RXZhbF9FdmFsRnJhbWU9cHl0aG9uMzMuUHlFdmFsX0V2YWxGcmFtZQotICBQeUV2YWxfRXZhbEZyYW1lRXg9cHl0aG9uMzMuUHlFdmFsX0V2YWxGcmFtZUV4Ci0gIFB5RXZhbF9HZXRCdWlsdGlucz1weXRob24zMy5QeUV2YWxfR2V0QnVpbHRpbnMKLSAgUHlFdmFsX0dldENhbGxTdGF0cz1weXRob24zMy5QeUV2YWxfR2V0Q2FsbFN0YXRzCi0gIFB5RXZhbF9HZXRGcmFtZT1weXRob24zMy5QeUV2YWxfR2V0RnJhbWUKLSAgUHlFdmFsX0dldEZ1bmNEZXNjPXB5dGhvbjMzLlB5RXZhbF9HZXRGdW5jRGVzYwotICBQeUV2YWxfR2V0RnVuY05hbWU9cHl0aG9uMzMuUHlFdmFsX0dldEZ1bmNOYW1lCi0gIFB5RXZhbF9HZXRHbG9iYWxzPXB5dGhvbjMzLlB5RXZhbF9HZXRHbG9iYWxzCi0gIFB5RXZhbF9HZXRMb2NhbHM9cHl0aG9uMzMuUHlFdmFsX0dldExvY2FscwotICBQeUV2YWxfSW5pdFRocmVhZHM9cHl0aG9uMzMuUHlFdmFsX0luaXRUaHJlYWRzCi0gIFB5RXZhbF9SZUluaXRUaHJlYWRzPXB5dGhvbjMzLlB5RXZhbF9SZUluaXRUaHJlYWRzCi0gIFB5RXZhbF9SZWxlYXNlTG9jaz1weXRob24zMy5QeUV2YWxfUmVsZWFzZUxvY2sKLSAgUHlFdmFsX1JlbGVhc2VUaHJlYWQ9cHl0aG9uMzMuUHlFdmFsX1JlbGVhc2VUaHJlYWQKLSAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQ9cHl0aG9uMzMuUHlFdmFsX1Jlc3RvcmVUaHJlYWQKLSAgUHlFdmFsX1NhdmVUaHJlYWQ9cHl0aG9uMzMuUHlFdmFsX1NhdmVUaHJlYWQKLSAgUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZD1weXRob24zMy5QeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkCi0gIFB5RXhjX0FyaXRobWV0aWNFcnJvcj1weXRob24zMy5QeUV4Y19Bcml0aG1ldGljRXJyb3IgREFUQQotICBQeUV4Y19Bc3NlcnRpb25FcnJvcj1weXRob24zMy5QeUV4Y19Bc3NlcnRpb25FcnJvciBEQVRBCi0gIFB5RXhjX0F0dHJpYnV0ZUVycm9yPXB5dGhvbjMzLlB5RXhjX0F0dHJpYnV0ZUVycm9yIERBVEEKLSAgUHlFeGNfQmFzZUV4Y2VwdGlvbj1weXRob24zMy5QeUV4Y19CYXNlRXhjZXB0aW9uIERBVEEKLSAgUHlFeGNfQnVmZmVyRXJyb3I9cHl0aG9uMzMuUHlFeGNfQnVmZmVyRXJyb3IgREFUQQotICBQeUV4Y19CeXRlc1dhcm5pbmc9cHl0aG9uMzMuUHlFeGNfQnl0ZXNXYXJuaW5nIERBVEEKLSAgUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0RlcHJlY2F0aW9uV2FybmluZyBEQVRBCi0gIFB5RXhjX0VPRkVycm9yPXB5dGhvbjMzLlB5RXhjX0VPRkVycm9yIERBVEEKLSAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcj1weXRob24zMy5QeUV4Y19FbnZpcm9ubWVudEVycm9yIERBVEEKLSAgUHlFeGNfRXhjZXB0aW9uPXB5dGhvbjMzLlB5RXhjX0V4Y2VwdGlvbiBEQVRBCi0gIFB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvcj1weXRob24zMy5QeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IgREFUQQotICBQeUV4Y19GdXR1cmVXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0Z1dHVyZVdhcm5pbmcgREFUQQotICBQeUV4Y19HZW5lcmF0b3JFeGl0PXB5dGhvbjMzLlB5RXhjX0dlbmVyYXRvckV4aXQgREFUQQotICBQeUV4Y19JT0Vycm9yPXB5dGhvbjMzLlB5RXhjX0lPRXJyb3IgREFUQQotICBQeUV4Y19JbXBvcnRFcnJvcj1weXRob24zMy5QeUV4Y19JbXBvcnRFcnJvciBEQVRBCi0gIFB5RXhjX0ltcG9ydFdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfSW1wb3J0V2FybmluZyBEQVRBCi0gIFB5RXhjX0luZGVudGF0aW9uRXJyb3I9cHl0aG9uMzMuUHlFeGNfSW5kZW50YXRpb25FcnJvciBEQVRBCi0gIFB5RXhjX0luZGV4RXJyb3I9cHl0aG9uMzMuUHlFeGNfSW5kZXhFcnJvciBEQVRBCi0gIFB5RXhjX0tleUVycm9yPXB5dGhvbjMzLlB5RXhjX0tleUVycm9yIERBVEEKLSAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQ9cHl0aG9uMzMuUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQgREFUQQotICBQeUV4Y19Mb29rdXBFcnJvcj1weXRob24zMy5QeUV4Y19Mb29rdXBFcnJvciBEQVRBCi0gIFB5RXhjX01lbW9yeUVycm9yPXB5dGhvbjMzLlB5RXhjX01lbW9yeUVycm9yIERBVEEKLSAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0PXB5dGhvbjMzLlB5RXhjX01lbW9yeUVycm9ySW5zdCBEQVRBCi0gIFB5RXhjX05hbWVFcnJvcj1weXRob24zMy5QeUV4Y19OYW1lRXJyb3IgREFUQQotICBQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yPXB5dGhvbjMzLlB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IgREFUQQotICBQeUV4Y19PU0Vycm9yPXB5dGhvbjMzLlB5RXhjX09TRXJyb3IgREFUQQotICBQeUV4Y19PdmVyZmxvd0Vycm9yPXB5dGhvbjMzLlB5RXhjX092ZXJmbG93RXJyb3IgREFUQQotICBQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgREFUQQotICBQeUV4Y19SZWN1cnNpb25FcnJvckluc3Q9cHl0aG9uMzMuUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0IERBVEEKLSAgUHlFeGNfUmVmZXJlbmNlRXJyb3I9cHl0aG9uMzMuUHlFeGNfUmVmZXJlbmNlRXJyb3IgREFUQQotICBQeUV4Y19SdW50aW1lRXJyb3I9cHl0aG9uMzMuUHlFeGNfUnVudGltZUVycm9yIERBVEEKLSAgUHlFeGNfUnVudGltZVdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfUnVudGltZVdhcm5pbmcgREFUQQotICBQeUV4Y19TdG9wSXRlcmF0aW9uPXB5dGhvbjMzLlB5RXhjX1N0b3BJdGVyYXRpb24gREFUQQotICBQeUV4Y19TeW50YXhFcnJvcj1weXRob24zMy5QeUV4Y19TeW50YXhFcnJvciBEQVRBCi0gIFB5RXhjX1N5bnRheFdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfU3ludGF4V2FybmluZyBEQVRBCi0gIFB5RXhjX1N5c3RlbUVycm9yPXB5dGhvbjMzLlB5RXhjX1N5c3RlbUVycm9yIERBVEEKLSAgUHlFeGNfU3lzdGVtRXhpdD1weXRob24zMy5QeUV4Y19TeXN0ZW1FeGl0IERBVEEKLSAgUHlFeGNfVGFiRXJyb3I9cHl0aG9uMzMuUHlFeGNfVGFiRXJyb3IgREFUQQotICBQeUV4Y19UeXBlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVHlwZUVycm9yIERBVEEKLSAgUHlFeGNfVW5ib3VuZExvY2FsRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5pY29kZURlY29kZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVFcnJvcj1weXRob24zMy5QeUV4Y19Vbmljb2RlRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZVdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfVW5pY29kZVdhcm5pbmcgREFUQQotICBQeUV4Y19Vc2VyV2FybmluZz1weXRob24zMy5QeUV4Y19Vc2VyV2FybmluZyBEQVRBCi0gIFB5RXhjX1ZhbHVlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVmFsdWVFcnJvciBEQVRBCi0gIFB5RXhjX1dhcm5pbmc9cHl0aG9uMzMuUHlFeGNfV2FybmluZyBEQVRBCi0gIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yPXB5dGhvbjMzLlB5RXhjX1plcm9EaXZpc2lvbkVycm9yIERBVEEKLSAgUHlFeGNlcHRpb25fR2V0Q2F1c2U9cHl0aG9uMzMuUHlFeGNlcHRpb25fR2V0Q2F1c2UKLSAgUHlFeGNlcHRpb25fR2V0Q29udGV4dD1weXRob24zMy5QeUV4Y2VwdGlvbl9HZXRDb250ZXh0Ci0gIFB5RXhjZXB0aW9uX0dldFRyYWNlYmFjaz1weXRob24zMy5QeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2sKLSAgUHlFeGNlcHRpb25fU2V0Q2F1c2U9cHl0aG9uMzMuUHlFeGNlcHRpb25fU2V0Q2F1c2UKLSAgUHlFeGNlcHRpb25fU2V0Q29udGV4dD1weXRob24zMy5QeUV4Y2VwdGlvbl9TZXRDb250ZXh0Ci0gIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjaz1weXRob24zMy5QeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sKLSAgUHlGaWxlX0Zyb21GZD1weXRob24zMy5QeUZpbGVfRnJvbUZkCi0gIFB5RmlsZV9HZXRMaW5lPXB5dGhvbjMzLlB5RmlsZV9HZXRMaW5lCi0gIFB5RmlsZV9Xcml0ZU9iamVjdD1weXRob24zMy5QeUZpbGVfV3JpdGVPYmplY3QKLSAgUHlGaWxlX1dyaXRlU3RyaW5nPXB5dGhvbjMzLlB5RmlsZV9Xcml0ZVN0cmluZwotICBQeUZpbHRlcl9UeXBlPXB5dGhvbjMzLlB5RmlsdGVyX1R5cGUgREFUQQotICBQeUZsb2F0X0FzRG91YmxlPXB5dGhvbjMzLlB5RmxvYXRfQXNEb3VibGUKLSAgUHlGbG9hdF9Gcm9tRG91YmxlPXB5dGhvbjMzLlB5RmxvYXRfRnJvbURvdWJsZQotICBQeUZsb2F0X0Zyb21TdHJpbmc9cHl0aG9uMzMuUHlGbG9hdF9Gcm9tU3RyaW5nCi0gIFB5RmxvYXRfR2V0SW5mbz1weXRob24zMy5QeUZsb2F0X0dldEluZm8KLSAgUHlGbG9hdF9HZXRNYXg9cHl0aG9uMzMuUHlGbG9hdF9HZXRNYXgKLSAgUHlGbG9hdF9HZXRNaW49cHl0aG9uMzMuUHlGbG9hdF9HZXRNaW4KLSAgUHlGbG9hdF9UeXBlPXB5dGhvbjMzLlB5RmxvYXRfVHlwZSBEQVRBCi0gIFB5RnJvemVuU2V0X05ldz1weXRob24zMy5QeUZyb3plblNldF9OZXcKLSAgUHlGcm96ZW5TZXRfVHlwZT1weXRob24zMy5QeUZyb3plblNldF9UeXBlIERBVEEKLSAgUHlHQ19Db2xsZWN0PXB5dGhvbjMzLlB5R0NfQ29sbGVjdAotICBQeUdJTFN0YXRlX0Vuc3VyZT1weXRob24zMy5QeUdJTFN0YXRlX0Vuc3VyZQotICBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZT1weXRob24zMy5QeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZQotICBQeUdJTFN0YXRlX1JlbGVhc2U9cHl0aG9uMzMuUHlHSUxTdGF0ZV9SZWxlYXNlCi0gIFB5R2V0U2V0RGVzY3JfVHlwZT1weXRob24zMy5QeUdldFNldERlc2NyX1R5cGUgREFUQQotICBQeUltcG9ydF9BZGRNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfQWRkTW9kdWxlCi0gIFB5SW1wb3J0X0FwcGVuZEluaXR0YWI9cHl0aG9uMzMuUHlJbXBvcnRfQXBwZW5kSW5pdHRhYgotICBQeUltcG9ydF9DbGVhbnVwPXB5dGhvbjMzLlB5SW1wb3J0X0NsZWFudXAKLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUKLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeD1weXRob24zMy5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4Ci0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcz1weXRob24zMy5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMKLSAgUHlJbXBvcnRfR2V0SW1wb3J0ZXI9cHl0aG9uMzMuUHlJbXBvcnRfR2V0SW1wb3J0ZXIKLSAgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXI9cHl0aG9uMzMuUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIKLSAgUHlJbXBvcnRfR2V0TWFnaWNUYWc9cHl0aG9uMzMuUHlJbXBvcnRfR2V0TWFnaWNUYWcKLSAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdD1weXRob24zMy5QeUltcG9ydF9HZXRNb2R1bGVEaWN0Ci0gIFB5SW1wb3J0X0ltcG9ydD1weXRob24zMy5QeUltcG9ydF9JbXBvcnQKLSAgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZQotICBQeUltcG9ydF9JbXBvcnRNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0TW9kdWxlCi0gIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsCi0gIFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2s9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jawotICBQeUltcG9ydF9SZWxvYWRNb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfUmVsb2FkTW9kdWxlCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcj1weXRob24zMy5QeUludGVycHJldGVyU3RhdGVfQ2xlYXIKLSAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZT1weXRob24zMy5QeUludGVycHJldGVyU3RhdGVfRGVsZXRlCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXc9cHl0aG9uMzMuUHlJbnRlcnByZXRlclN0YXRlX05ldwotICBQeUl0ZXJfTmV4dD1weXRob24zMy5QeUl0ZXJfTmV4dAotICBQeUxpc3RJdGVyX1R5cGU9cHl0aG9uMzMuUHlMaXN0SXRlcl9UeXBlIERBVEEKLSAgUHlMaXN0UmV2SXRlcl9UeXBlPXB5dGhvbjMzLlB5TGlzdFJldkl0ZXJfVHlwZSBEQVRBCi0gIFB5TGlzdF9BcHBlbmQ9cHl0aG9uMzMuUHlMaXN0X0FwcGVuZAotICBQeUxpc3RfQXNUdXBsZT1weXRob24zMy5QeUxpc3RfQXNUdXBsZQotICBQeUxpc3RfR2V0SXRlbT1weXRob24zMy5QeUxpc3RfR2V0SXRlbQotICBQeUxpc3RfR2V0U2xpY2U9cHl0aG9uMzMuUHlMaXN0X0dldFNsaWNlCi0gIFB5TGlzdF9JbnNlcnQ9cHl0aG9uMzMuUHlMaXN0X0luc2VydAotICBQeUxpc3RfTmV3PXB5dGhvbjMzLlB5TGlzdF9OZXcKLSAgUHlMaXN0X1JldmVyc2U9cHl0aG9uMzMuUHlMaXN0X1JldmVyc2UKLSAgUHlMaXN0X1NldEl0ZW09cHl0aG9uMzMuUHlMaXN0X1NldEl0ZW0KLSAgUHlMaXN0X1NldFNsaWNlPXB5dGhvbjMzLlB5TGlzdF9TZXRTbGljZQotICBQeUxpc3RfU2l6ZT1weXRob24zMy5QeUxpc3RfU2l6ZQotICBQeUxpc3RfU29ydD1weXRob24zMy5QeUxpc3RfU29ydAotICBQeUxpc3RfVHlwZT1weXRob24zMy5QeUxpc3RfVHlwZSBEQVRBCi0gIFB5TG9uZ1JhbmdlSXRlcl9UeXBlPXB5dGhvbjMzLlB5TG9uZ1JhbmdlSXRlcl9UeXBlIERBVEEKLSAgUHlMb25nX0FzRG91YmxlPXB5dGhvbjMzLlB5TG9uZ19Bc0RvdWJsZQotICBQeUxvbmdfQXNMb25nPXB5dGhvbjMzLlB5TG9uZ19Bc0xvbmcKLSAgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjMzLlB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdwotICBQeUxvbmdfQXNMb25nTG9uZz1weXRob24zMy5QeUxvbmdfQXNMb25nTG9uZwotICBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjMzLlB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cKLSAgUHlMb25nX0FzU2l6ZV90PXB5dGhvbjMzLlB5TG9uZ19Bc1NpemVfdAotICBQeUxvbmdfQXNTc2l6ZV90PXB5dGhvbjMzLlB5TG9uZ19Bc1NzaXplX3QKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nPXB5dGhvbjMzLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZwotICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nPXB5dGhvbjMzLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2s9cHl0aG9uMzMuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2sKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrCi0gIFB5TG9uZ19Bc1ZvaWRQdHI9cHl0aG9uMzMuUHlMb25nX0FzVm9pZFB0cgotICBQeUxvbmdfRnJvbURvdWJsZT1weXRob24zMy5QeUxvbmdfRnJvbURvdWJsZQotICBQeUxvbmdfRnJvbUxvbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21Mb25nCi0gIFB5TG9uZ19Gcm9tTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21Mb25nTG9uZwotICBQeUxvbmdfRnJvbVNpemVfdD1weXRob24zMy5QeUxvbmdfRnJvbVNpemVfdAotICBQeUxvbmdfRnJvbVNzaXplX3Q9cHl0aG9uMzMuUHlMb25nX0Zyb21Tc2l6ZV90Ci0gIFB5TG9uZ19Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tU3RyaW5nCi0gIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nCi0gIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZz1weXRob24zMy5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcKLSAgUHlMb25nX0Zyb21Wb2lkUHRyPXB5dGhvbjMzLlB5TG9uZ19Gcm9tVm9pZFB0cgotICBQeUxvbmdfR2V0SW5mbz1weXRob24zMy5QeUxvbmdfR2V0SW5mbwotICBQeUxvbmdfVHlwZT1weXRob24zMy5QeUxvbmdfVHlwZSBEQVRBCi0gIFB5TWFwX1R5cGU9cHl0aG9uMzMuUHlNYXBfVHlwZSBEQVRBCi0gIFB5TWFwcGluZ19DaGVjaz1weXRob24zMy5QeU1hcHBpbmdfQ2hlY2sKLSAgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKLSAgUHlNYXBwaW5nX0hhc0tleT1weXRob24zMy5QeU1hcHBpbmdfSGFzS2V5Ci0gIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc9cHl0aG9uMzMuUHlNYXBwaW5nX0hhc0tleVN0cmluZwotICBQeU1hcHBpbmdfSXRlbXM9cHl0aG9uMzMuUHlNYXBwaW5nX0l0ZW1zCi0gIFB5TWFwcGluZ19LZXlzPXB5dGhvbjMzLlB5TWFwcGluZ19LZXlzCi0gIFB5TWFwcGluZ19MZW5ndGg9cHl0aG9uMzMuUHlNYXBwaW5nX0xlbmd0aAotICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZz1weXRob24zMy5QeU1hcHBpbmdfU2V0SXRlbVN0cmluZwotICBQeU1hcHBpbmdfU2l6ZT1weXRob24zMy5QeU1hcHBpbmdfU2l6ZQotICBQeU1hcHBpbmdfVmFsdWVzPXB5dGhvbjMzLlB5TWFwcGluZ19WYWx1ZXMKLSAgUHlNZW1fRnJlZT1weXRob24zMy5QeU1lbV9GcmVlCi0gIFB5TWVtX01hbGxvYz1weXRob24zMy5QeU1lbV9NYWxsb2MKLSAgUHlNZW1fUmVhbGxvYz1weXRob24zMy5QeU1lbV9SZWFsbG9jCi0gIFB5TWVtYmVyRGVzY3JfVHlwZT1weXRob24zMy5QeU1lbWJlckRlc2NyX1R5cGUgREFUQQotICBQeU1lbW9yeVZpZXdfRnJvbU9iamVjdD1weXRob24zMy5QeU1lbW9yeVZpZXdfRnJvbU9iamVjdAotICBQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cz1weXRob24zMy5QeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cwotICBQeU1lbW9yeVZpZXdfVHlwZT1weXRob24zMy5QeU1lbW9yeVZpZXdfVHlwZSBEQVRBCi0gIFB5TWV0aG9kRGVzY3JfVHlwZT1weXRob24zMy5QeU1ldGhvZERlc2NyX1R5cGUgREFUQQotICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudD1weXRob24zMy5QeU1vZHVsZV9BZGRJbnRDb25zdGFudAotICBQeU1vZHVsZV9BZGRPYmplY3Q9cHl0aG9uMzMuUHlNb2R1bGVfQWRkT2JqZWN0Ci0gIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50PXB5dGhvbjMzLlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50Ci0gIFB5TW9kdWxlX0NyZWF0ZTI9cHl0aG9uMzMuUHlNb2R1bGVfQ3JlYXRlMgotICBQeU1vZHVsZV9HZXREZWY9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RGVmCi0gIFB5TW9kdWxlX0dldERpY3Q9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RGljdAotICBQeU1vZHVsZV9HZXRGaWxlbmFtZT1weXRob24zMy5QeU1vZHVsZV9HZXRGaWxlbmFtZQotICBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdD1weXRob24zMy5QeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdAotICBQeU1vZHVsZV9HZXROYW1lPXB5dGhvbjMzLlB5TW9kdWxlX0dldE5hbWUKLSAgUHlNb2R1bGVfR2V0U3RhdGU9cHl0aG9uMzMuUHlNb2R1bGVfR2V0U3RhdGUKLSAgUHlNb2R1bGVfTmV3PXB5dGhvbjMzLlB5TW9kdWxlX05ldwotICBQeU1vZHVsZV9UeXBlPXB5dGhvbjMzLlB5TW9kdWxlX1R5cGUgREFUQQotICBQeU51bGxJbXBvcnRlcl9UeXBlPXB5dGhvbjMzLlB5TnVsbEltcG9ydGVyX1R5cGUgREFUQQotICBQeU51bWJlcl9BYnNvbHV0ZT1weXRob24zMy5QeU51bWJlcl9BYnNvbHV0ZQotICBQeU51bWJlcl9BZGQ9cHl0aG9uMzMuUHlOdW1iZXJfQWRkCi0gIFB5TnVtYmVyX0FuZD1weXRob24zMy5QeU51bWJlcl9BbmQKLSAgUHlOdW1iZXJfQXNTc2l6ZV90PXB5dGhvbjMzLlB5TnVtYmVyX0FzU3NpemVfdAotICBQeU51bWJlcl9DaGVjaz1weXRob24zMy5QeU51bWJlcl9DaGVjawotICBQeU51bWJlcl9EaXZtb2Q9cHl0aG9uMzMuUHlOdW1iZXJfRGl2bW9kCi0gIFB5TnVtYmVyX0Zsb2F0PXB5dGhvbjMzLlB5TnVtYmVyX0Zsb2F0Ci0gIFB5TnVtYmVyX0Zsb29yRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX0Zsb29yRGl2aWRlCi0gIFB5TnVtYmVyX0luUGxhY2VBZGQ9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZUFkZAotICBQeU51bWJlcl9JblBsYWNlQW5kPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VBbmQKLSAgUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZQotICBQeU51bWJlcl9JblBsYWNlTHNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VMc2hpZnQKLSAgUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VNdWx0aXBseQotICBQeU51bWJlcl9JblBsYWNlT3I9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZU9yCi0gIFB5TnVtYmVyX0luUGxhY2VQb3dlcj1weXRob24zMy5QeU51bWJlcl9JblBsYWNlUG93ZXIKLSAgUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcj1weXRob24zMy5QeU51bWJlcl9JblBsYWNlUmVtYWluZGVyCi0gIFB5TnVtYmVyX0luUGxhY2VSc2hpZnQ9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVJzaGlmdAotICBQeU51bWJlcl9JblBsYWNlU3VidHJhY3Q9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0Ci0gIFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlCi0gIFB5TnVtYmVyX0luUGxhY2VYb3I9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVhvcgotICBQeU51bWJlcl9JbmRleD1weXRob24zMy5QeU51bWJlcl9JbmRleAotICBQeU51bWJlcl9JbnZlcnQ9cHl0aG9uMzMuUHlOdW1iZXJfSW52ZXJ0Ci0gIFB5TnVtYmVyX0xvbmc9cHl0aG9uMzMuUHlOdW1iZXJfTG9uZwotICBQeU51bWJlcl9Mc2hpZnQ9cHl0aG9uMzMuUHlOdW1iZXJfTHNoaWZ0Ci0gIFB5TnVtYmVyX011bHRpcGx5PXB5dGhvbjMzLlB5TnVtYmVyX011bHRpcGx5Ci0gIFB5TnVtYmVyX05lZ2F0aXZlPXB5dGhvbjMzLlB5TnVtYmVyX05lZ2F0aXZlCi0gIFB5TnVtYmVyX09yPXB5dGhvbjMzLlB5TnVtYmVyX09yCi0gIFB5TnVtYmVyX1Bvc2l0aXZlPXB5dGhvbjMzLlB5TnVtYmVyX1Bvc2l0aXZlCi0gIFB5TnVtYmVyX1Bvd2VyPXB5dGhvbjMzLlB5TnVtYmVyX1Bvd2VyCi0gIFB5TnVtYmVyX1JlbWFpbmRlcj1weXRob24zMy5QeU51bWJlcl9SZW1haW5kZXIKLSAgUHlOdW1iZXJfUnNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX1JzaGlmdAotICBQeU51bWJlcl9TdWJ0cmFjdD1weXRob24zMy5QeU51bWJlcl9TdWJ0cmFjdAotICBQeU51bWJlcl9Ub0Jhc2U9cHl0aG9uMzMuUHlOdW1iZXJfVG9CYXNlCi0gIFB5TnVtYmVyX1RydWVEaXZpZGU9cHl0aG9uMzMuUHlOdW1iZXJfVHJ1ZURpdmlkZQotICBQeU51bWJlcl9Yb3I9cHl0aG9uMzMuUHlOdW1iZXJfWG9yCi0gIFB5T1NfQWZ0ZXJGb3JrPXB5dGhvbjMzLlB5T1NfQWZ0ZXJGb3JrCi0gIFB5T1NfSW5pdEludGVycnVwdHM9cHl0aG9uMzMuUHlPU19Jbml0SW50ZXJydXB0cwotICBQeU9TX0lucHV0SG9vaz1weXRob24zMy5QeU9TX0lucHV0SG9vayBEQVRBCi0gIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQ9cHl0aG9uMzMuUHlPU19JbnRlcnJ1cHRPY2N1cnJlZAotICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyPXB5dGhvbjMzLlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgREFUQQotICBQeU9TX2RvdWJsZV90b19zdHJpbmc9cHl0aG9uMzMuUHlPU19kb3VibGVfdG9fc3RyaW5nCi0gIFB5T1NfZ2V0c2lnPXB5dGhvbjMzLlB5T1NfZ2V0c2lnCi0gIFB5T1NfbXlzdHJpY21wPXB5dGhvbjMzLlB5T1NfbXlzdHJpY21wCi0gIFB5T1NfbXlzdHJuaWNtcD1weXRob24zMy5QeU9TX215c3RybmljbXAKLSAgUHlPU19zZXRzaWc9cHl0aG9uMzMuUHlPU19zZXRzaWcKLSAgUHlPU19zbnByaW50Zj1weXRob24zMy5QeU9TX3NucHJpbnRmCi0gIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZT1weXRob24zMy5QeU9TX3N0cmluZ190b19kb3VibGUKLSAgUHlPU19zdHJ0b2w9cHl0aG9uMzMuUHlPU19zdHJ0b2wKLSAgUHlPU19zdHJ0b3VsPXB5dGhvbjMzLlB5T1Nfc3RydG91bAotICBQeU9TX3ZzbnByaW50Zj1weXRob24zMy5QeU9TX3ZzbnByaW50ZgotICBQeU9iamVjdF9BU0NJST1weXRob24zMy5QeU9iamVjdF9BU0NJSQotICBQeU9iamVjdF9Bc0NoYXJCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQXNDaGFyQnVmZmVyCi0gIFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I9cHl0aG9uMzMuUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcgotICBQeU9iamVjdF9Bc1JlYWRCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQXNSZWFkQnVmZmVyCi0gIFB5T2JqZWN0X0FzV3JpdGVCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcgotICBQeU9iamVjdF9CeXRlcz1weXRob24zMy5QeU9iamVjdF9CeXRlcwotICBQeU9iamVjdF9DYWxsPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGwKLSAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxGdW5jdGlvbgotICBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MKLSAgUHlPYmplY3RfQ2FsbE1ldGhvZD1weXRob24zMy5QeU9iamVjdF9DYWxsTWV0aG9kCi0gIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzCi0gIFB5T2JqZWN0X0NhbGxPYmplY3Q9cHl0aG9uMzMuUHlPYmplY3RfQ2FsbE9iamVjdAotICBQeU9iamVjdF9DaGVja1JlYWRCdWZmZXI9cHl0aG9uMzMuUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyCi0gIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnM9cHl0aG9uMzMuUHlPYmplY3RfQ2xlYXJXZWFrUmVmcwotICBQeU9iamVjdF9EZWxJdGVtPXB5dGhvbjMzLlB5T2JqZWN0X0RlbEl0ZW0KLSAgUHlPYmplY3RfRGVsSXRlbVN0cmluZz1weXRob24zMy5QeU9iamVjdF9EZWxJdGVtU3RyaW5nCi0gIFB5T2JqZWN0X0Rpcj1weXRob24zMy5QeU9iamVjdF9EaXIKLSAgUHlPYmplY3RfRm9ybWF0PXB5dGhvbjMzLlB5T2JqZWN0X0Zvcm1hdAotICBQeU9iamVjdF9GcmVlPXB5dGhvbjMzLlB5T2JqZWN0X0ZyZWUKLSAgUHlPYmplY3RfR0NfRGVsPXB5dGhvbjMzLlB5T2JqZWN0X0dDX0RlbAotICBQeU9iamVjdF9HQ19UcmFjaz1weXRob24zMy5QeU9iamVjdF9HQ19UcmFjawotICBQeU9iamVjdF9HQ19VblRyYWNrPXB5dGhvbjMzLlB5T2JqZWN0X0dDX1VuVHJhY2sKLSAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfR2VuZXJpY0dldEF0dHIKLSAgUHlPYmplY3RfR2VuZXJpY1NldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfR2VuZXJpY1NldEF0dHIKLSAgUHlPYmplY3RfR2V0QXR0cj1weXRob24zMy5QeU9iamVjdF9HZXRBdHRyCi0gIFB5T2JqZWN0X0dldEF0dHJTdHJpbmc9cHl0aG9uMzMuUHlPYmplY3RfR2V0QXR0clN0cmluZwotICBQeU9iamVjdF9HZXRJdGVtPXB5dGhvbjMzLlB5T2JqZWN0X0dldEl0ZW0KLSAgUHlPYmplY3RfR2V0SXRlcj1weXRob24zMy5QeU9iamVjdF9HZXRJdGVyCi0gIFB5T2JqZWN0X0hhc0F0dHI9cHl0aG9uMzMuUHlPYmplY3RfSGFzQXR0cgotICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nPXB5dGhvbjMzLlB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKLSAgUHlPYmplY3RfSGFzaD1weXRob24zMy5QeU9iamVjdF9IYXNoCi0gIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZD1weXRob24zMy5QeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQKLSAgUHlPYmplY3RfSW5pdD1weXRob24zMy5QeU9iamVjdF9Jbml0Ci0gIFB5T2JqZWN0X0luaXRWYXI9cHl0aG9uMzMuUHlPYmplY3RfSW5pdFZhcgotICBQeU9iamVjdF9Jc0luc3RhbmNlPXB5dGhvbjMzLlB5T2JqZWN0X0lzSW5zdGFuY2UKLSAgUHlPYmplY3RfSXNTdWJjbGFzcz1weXRob24zMy5QeU9iamVjdF9Jc1N1YmNsYXNzCi0gIFB5T2JqZWN0X0lzVHJ1ZT1weXRob24zMy5QeU9iamVjdF9Jc1RydWUKLSAgUHlPYmplY3RfTGVuZ3RoPXB5dGhvbjMzLlB5T2JqZWN0X0xlbmd0aAotICBQeU9iamVjdF9NYWxsb2M9cHl0aG9uMzMuUHlPYmplY3RfTWFsbG9jCi0gIFB5T2JqZWN0X05vdD1weXRob24zMy5QeU9iamVjdF9Ob3QKLSAgUHlPYmplY3RfUmVhbGxvYz1weXRob24zMy5QeU9iamVjdF9SZWFsbG9jCi0gIFB5T2JqZWN0X1JlcHI9cHl0aG9uMzMuUHlPYmplY3RfUmVwcgotICBQeU9iamVjdF9SaWNoQ29tcGFyZT1weXRob24zMy5QeU9iamVjdF9SaWNoQ29tcGFyZQotICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2w9cHl0aG9uMzMuUHlPYmplY3RfUmljaENvbXBhcmVCb29sCi0gIFB5T2JqZWN0X1NlbGZJdGVyPXB5dGhvbjMzLlB5T2JqZWN0X1NlbGZJdGVyCi0gIFB5T2JqZWN0X1NldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfU2V0QXR0cgotICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nPXB5dGhvbjMzLlB5T2JqZWN0X1NldEF0dHJTdHJpbmcKLSAgUHlPYmplY3RfU2V0SXRlbT1weXRob24zMy5QeU9iamVjdF9TZXRJdGVtCi0gIFB5T2JqZWN0X1NpemU9cHl0aG9uMzMuUHlPYmplY3RfU2l6ZQotICBQeU9iamVjdF9TdHI9cHl0aG9uMzMuUHlPYmplY3RfU3RyCi0gIFB5T2JqZWN0X1R5cGU9cHl0aG9uMzMuUHlPYmplY3RfVHlwZSBEQVRBCi0gIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzPXB5dGhvbjMzLlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzCi0gIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3M9cHl0aG9uMzMuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncwotICBQeVByb3BlcnR5X1R5cGU9cHl0aG9uMzMuUHlQcm9wZXJ0eV9UeXBlIERBVEEKLSAgUHlSYW5nZUl0ZXJfVHlwZT1weXRob24zMy5QeVJhbmdlSXRlcl9UeXBlIERBVEEKLSAgUHlSYW5nZV9UeXBlPXB5dGhvbjMzLlB5UmFuZ2VfVHlwZSBEQVRBCi0gIFB5UmV2ZXJzZWRfVHlwZT1weXRob24zMy5QeVJldmVyc2VkX1R5cGUgREFUQQotICBQeVNlcUl0ZXJfTmV3PXB5dGhvbjMzLlB5U2VxSXRlcl9OZXcKLSAgUHlTZXFJdGVyX1R5cGU9cHl0aG9uMzMuUHlTZXFJdGVyX1R5cGUgREFUQQotICBQeVNlcXVlbmNlX0NoZWNrPXB5dGhvbjMzLlB5U2VxdWVuY2VfQ2hlY2sKLSAgUHlTZXF1ZW5jZV9Db25jYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9Db25jYXQKLSAgUHlTZXF1ZW5jZV9Db250YWlucz1weXRob24zMy5QeVNlcXVlbmNlX0NvbnRhaW5zCi0gIFB5U2VxdWVuY2VfQ291bnQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9Db3VudAotICBQeVNlcXVlbmNlX0RlbEl0ZW09cHl0aG9uMzMuUHlTZXF1ZW5jZV9EZWxJdGVtCi0gIFB5U2VxdWVuY2VfRGVsU2xpY2U9cHl0aG9uMzMuUHlTZXF1ZW5jZV9EZWxTbGljZQotICBQeVNlcXVlbmNlX0Zhc3Q9cHl0aG9uMzMuUHlTZXF1ZW5jZV9GYXN0Ci0gIFB5U2VxdWVuY2VfR2V0SXRlbT1weXRob24zMy5QeVNlcXVlbmNlX0dldEl0ZW0KLSAgUHlTZXF1ZW5jZV9HZXRTbGljZT1weXRob24zMy5QeVNlcXVlbmNlX0dldFNsaWNlCi0gIFB5U2VxdWVuY2VfSW49cHl0aG9uMzMuUHlTZXF1ZW5jZV9JbgotICBQeVNlcXVlbmNlX0luUGxhY2VDb25jYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0Ci0gIFB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdD1weXRob24zMy5QeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQKLSAgUHlTZXF1ZW5jZV9JbmRleD1weXRob24zMy5QeVNlcXVlbmNlX0luZGV4Ci0gIFB5U2VxdWVuY2VfTGVuZ3RoPXB5dGhvbjMzLlB5U2VxdWVuY2VfTGVuZ3RoCi0gIFB5U2VxdWVuY2VfTGlzdD1weXRob24zMy5QeVNlcXVlbmNlX0xpc3QKLSAgUHlTZXF1ZW5jZV9SZXBlYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9SZXBlYXQKLSAgUHlTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjMzLlB5U2VxdWVuY2VfU2V0SXRlbQotICBQeVNlcXVlbmNlX1NldFNsaWNlPXB5dGhvbjMzLlB5U2VxdWVuY2VfU2V0U2xpY2UKLSAgUHlTZXF1ZW5jZV9TaXplPXB5dGhvbjMzLlB5U2VxdWVuY2VfU2l6ZQotICBQeVNlcXVlbmNlX1R1cGxlPXB5dGhvbjMzLlB5U2VxdWVuY2VfVHVwbGUKLSAgUHlTZXRJdGVyX1R5cGU9cHl0aG9uMzMuUHlTZXRJdGVyX1R5cGUgREFUQQotICBQeVNldF9BZGQ9cHl0aG9uMzMuUHlTZXRfQWRkCi0gIFB5U2V0X0NsZWFyPXB5dGhvbjMzLlB5U2V0X0NsZWFyCi0gIFB5U2V0X0NvbnRhaW5zPXB5dGhvbjMzLlB5U2V0X0NvbnRhaW5zCi0gIFB5U2V0X0Rpc2NhcmQ9cHl0aG9uMzMuUHlTZXRfRGlzY2FyZAotICBQeVNldF9OZXc9cHl0aG9uMzMuUHlTZXRfTmV3Ci0gIFB5U2V0X1BvcD1weXRob24zMy5QeVNldF9Qb3AKLSAgUHlTZXRfU2l6ZT1weXRob24zMy5QeVNldF9TaXplCi0gIFB5U2V0X1R5cGU9cHl0aG9uMzMuUHlTZXRfVHlwZSBEQVRBCi0gIFB5U2xpY2VfR2V0SW5kaWNlcz1weXRob24zMy5QeVNsaWNlX0dldEluZGljZXMKLSAgUHlTbGljZV9HZXRJbmRpY2VzRXg9cHl0aG9uMzMuUHlTbGljZV9HZXRJbmRpY2VzRXgKLSAgUHlTbGljZV9OZXc9cHl0aG9uMzMuUHlTbGljZV9OZXcKLSAgUHlTbGljZV9UeXBlPXB5dGhvbjMzLlB5U2xpY2VfVHlwZSBEQVRBCi0gIFB5U29ydFdyYXBwZXJfVHlwZT1weXRob24zMy5QeVNvcnRXcmFwcGVyX1R5cGUgREFUQQotICBQeVN0YXRlX0ZpbmRNb2R1bGU9cHl0aG9uMzMuUHlTdGF0ZV9GaW5kTW9kdWxlCi0gIFB5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjMzLlB5U3RhdGVfQWRkTW9kdWxlCi0gIFB5U3RhdGVfUmVtb3ZlTW9kdWxlPXB5dGhvbjMzLlB5U3RhdGVfUmVtb3ZlTW9kdWxlCi0gIFB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbT1weXRob24zMy5QeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW0KLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXc9cHl0aG9uMzMuUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcKLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlPXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZQotICBQeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW09cHl0aG9uMzMuUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtCi0gIFB5U3VwZXJfVHlwZT1weXRob24zMy5QeVN1cGVyX1R5cGUgREFUQQotICBQeVN5c19BZGRXYXJuT3B0aW9uPXB5dGhvbjMzLlB5U3lzX0FkZFdhcm5PcHRpb24KLSAgUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGU9cHl0aG9uMzMuUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGUKLSAgUHlTeXNfRm9ybWF0U3RkZXJyPXB5dGhvbjMzLlB5U3lzX0Zvcm1hdFN0ZGVycgotICBQeVN5c19Gb3JtYXRTdGRvdXQ9cHl0aG9uMzMuUHlTeXNfRm9ybWF0U3Rkb3V0Ci0gIFB5U3lzX0dldE9iamVjdD1weXRob24zMy5QeVN5c19HZXRPYmplY3QKLSAgUHlTeXNfSGFzV2Fybk9wdGlvbnM9cHl0aG9uMzMuUHlTeXNfSGFzV2Fybk9wdGlvbnMKLSAgUHlTeXNfUmVzZXRXYXJuT3B0aW9ucz1weXRob24zMy5QeVN5c19SZXNldFdhcm5PcHRpb25zCi0gIFB5U3lzX1NldEFyZ3Y9cHl0aG9uMzMuUHlTeXNfU2V0QXJndgotICBQeVN5c19TZXRBcmd2RXg9cHl0aG9uMzMuUHlTeXNfU2V0QXJndkV4Ci0gIFB5U3lzX1NldE9iamVjdD1weXRob24zMy5QeVN5c19TZXRPYmplY3QKLSAgUHlTeXNfU2V0UGF0aD1weXRob24zMy5QeVN5c19TZXRQYXRoCi0gIFB5U3lzX1dyaXRlU3RkZXJyPXB5dGhvbjMzLlB5U3lzX1dyaXRlU3RkZXJyCi0gIFB5U3lzX1dyaXRlU3Rkb3V0PXB5dGhvbjMzLlB5U3lzX1dyaXRlU3Rkb3V0Ci0gIFB5VGhyZWFkU3RhdGVfQ2xlYXI9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9DbGVhcgotICBQeVRocmVhZFN0YXRlX0RlbGV0ZT1weXRob24zMy5QeVRocmVhZFN0YXRlX0RlbGV0ZQotICBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQ9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50Ci0gIFB5VGhyZWFkU3RhdGVfR2V0PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfR2V0Ci0gIFB5VGhyZWFkU3RhdGVfR2V0RGljdD1weXRob24zMy5QeVRocmVhZFN0YXRlX0dldERpY3QKLSAgUHlUaHJlYWRTdGF0ZV9OZXc9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9OZXcKLSAgUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Yz1weXRob24zMy5QeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjCi0gIFB5VGhyZWFkU3RhdGVfU3dhcD1weXRob24zMy5QeVRocmVhZFN0YXRlX1N3YXAKLSAgUHlUcmFjZUJhY2tfSGVyZT1weXRob24zMy5QeVRyYWNlQmFja19IZXJlCi0gIFB5VHJhY2VCYWNrX1ByaW50PXB5dGhvbjMzLlB5VHJhY2VCYWNrX1ByaW50Ci0gIFB5VHJhY2VCYWNrX1R5cGU9cHl0aG9uMzMuUHlUcmFjZUJhY2tfVHlwZSBEQVRBCi0gIFB5VHVwbGVJdGVyX1R5cGU9cHl0aG9uMzMuUHlUdXBsZUl0ZXJfVHlwZSBEQVRBCi0gIFB5VHVwbGVfQ2xlYXJGcmVlTGlzdD1weXRob24zMy5QeVR1cGxlX0NsZWFyRnJlZUxpc3QKLSAgUHlUdXBsZV9HZXRJdGVtPXB5dGhvbjMzLlB5VHVwbGVfR2V0SXRlbQotICBQeVR1cGxlX0dldFNsaWNlPXB5dGhvbjMzLlB5VHVwbGVfR2V0U2xpY2UKLSAgUHlUdXBsZV9OZXc9cHl0aG9uMzMuUHlUdXBsZV9OZXcKLSAgUHlUdXBsZV9QYWNrPXB5dGhvbjMzLlB5VHVwbGVfUGFjawotICBQeVR1cGxlX1NldEl0ZW09cHl0aG9uMzMuUHlUdXBsZV9TZXRJdGVtCi0gIFB5VHVwbGVfU2l6ZT1weXRob24zMy5QeVR1cGxlX1NpemUKLSAgUHlUdXBsZV9UeXBlPXB5dGhvbjMzLlB5VHVwbGVfVHlwZSBEQVRBCi0gIFB5VHlwZV9DbGVhckNhY2hlPXB5dGhvbjMzLlB5VHlwZV9DbGVhckNhY2hlCi0gIFB5VHlwZV9Gcm9tU3BlYz1weXRob24zMy5QeVR5cGVfRnJvbVNwZWMKLSAgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzPXB5dGhvbjMzLlB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcwotICBQeVR5cGVfR2VuZXJpY0FsbG9jPXB5dGhvbjMzLlB5VHlwZV9HZW5lcmljQWxsb2MKLSAgUHlUeXBlX0dlbmVyaWNOZXc9cHl0aG9uMzMuUHlUeXBlX0dlbmVyaWNOZXcKLSAgUHlUeXBlX0dldEZsYWdzPXB5dGhvbjMzLlB5VHlwZV9HZXRGbGFncwotICBQeVR5cGVfSXNTdWJ0eXBlPXB5dGhvbjMzLlB5VHlwZV9Jc1N1YnR5cGUKLSAgUHlUeXBlX01vZGlmaWVkPXB5dGhvbjMzLlB5VHlwZV9Nb2RpZmllZAotICBQeVR5cGVfUmVhZHk9cHl0aG9uMzMuUHlUeXBlX1JlYWR5Ci0gIFB5VHlwZV9UeXBlPXB5dGhvbjMzLlB5VHlwZV9UeXBlIERBVEEKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZQotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZz1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZwotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kCi0gIFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbgotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kCi0gIFB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24KLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZUl0ZXJfVHlwZT1weXRob24zMy5QeVVuaWNvZGVJdGVyX1R5cGUgREFUQQotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbgotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24KLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQKLSAgUHlVbmljb2RlX0FwcGVuZD1weXRob24zMy5QeVVuaWNvZGVfQXBwZW5kCi0gIFB5VW5pY29kZV9BcHBlbmRBbmREZWw9cHl0aG9uMzMuUHlVbmljb2RlX0FwcGVuZEFuZERlbAotICBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNBU0NJSVN0cmluZwotICBQeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc0NoYXJtYXBTdHJpbmcKLSAgUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0Ci0gIFB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlPXB5dGhvbjMzLlB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlCi0gIFB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlX0FzRW5jb2RlZE9iamVjdAotICBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcKLSAgUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGU9cHl0aG9uMzMuUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGUKLSAgUHlVbmljb2RlX0FzTGF0aW4xU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc0xhdGluMVN0cmluZwotICBQeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGMTZTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0FzVVRGMTZTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGMzJTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0FzVVRGMzJTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGOFN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNVVEY4U3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZwotICBQeVVuaWNvZGVfQXNXaWRlQ2hhcj1weXRob24zMy5QeVVuaWNvZGVfQXNXaWRlQ2hhcgotICBQeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdD1weXRob24zMy5QeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdAotICBQeVVuaWNvZGVfQ29tcGFyZT1weXRob24zMy5QeVVuaWNvZGVfQ29tcGFyZQotICBQeVVuaWNvZGVfQ29uY2F0PXB5dGhvbjMzLlB5VW5pY29kZV9Db25jYXQKLSAgUHlVbmljb2RlX0NvbnRhaW5zPXB5dGhvbjMzLlB5VW5pY29kZV9Db250YWlucwotICBQeVVuaWNvZGVfQ291bnQ9cHl0aG9uMzMuUHlVbmljb2RlX0NvdW50Ci0gIFB5VW5pY29kZV9EZWNvZGU9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZQotICBQeVVuaWNvZGVfRGVjb2RlQVNDSUk9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZUFTQ0lJCi0gIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVDaGFybWFwCi0gIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQ9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdAotICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZT1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZQotICBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVMYXRpbjEKLSAgUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGU9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUKLSAgUHlVbmljb2RlX0RlY29kZVVURjE2PXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEYxNgotICBQeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRGVjb2RlVVRGMzI9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjMyCi0gIFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsCi0gIFB5VW5pY29kZV9EZWNvZGVVVEY4PXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEY4Ci0gIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWw9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZT1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZQotICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXI9cHl0aG9uMzMuUHlVbmljb2RlX0ZTQ29udmVydGVyCi0gIFB5VW5pY29kZV9GU0RlY29kZXI9cHl0aG9uMzMuUHlVbmljb2RlX0ZTRGVjb2RlcgotICBQeVVuaWNvZGVfRmluZD1weXRob24zMy5QeVVuaWNvZGVfRmluZAotICBQeVVuaWNvZGVfRm9ybWF0PXB5dGhvbjMzLlB5VW5pY29kZV9Gb3JtYXQKLSAgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdAotICBQeVVuaWNvZGVfRnJvbUZvcm1hdD1weXRob24zMy5QeVVuaWNvZGVfRnJvbUZvcm1hdAotICBQeVVuaWNvZGVfRnJvbUZvcm1hdFY9cHl0aG9uMzMuUHlVbmljb2RlX0Zyb21Gb3JtYXRWCi0gIFB5VW5pY29kZV9Gcm9tT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tT2JqZWN0Ci0gIFB5VW5pY29kZV9Gcm9tT3JkaW5hbD1weXRob24zMy5QeVVuaWNvZGVfRnJvbU9yZGluYWwKLSAgUHlVbmljb2RlX0Zyb21TdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0Zyb21TdHJpbmcKLSAgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZQotICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyPXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tV2lkZUNoYXIKLSAgUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nCi0gIFB5VW5pY29kZV9HZXRTaXplPXB5dGhvbjMzLlB5VW5pY29kZV9HZXRTaXplCi0gIFB5VW5pY29kZV9Jc0lkZW50aWZpZXI9cHl0aG9uMzMuUHlVbmljb2RlX0lzSWRlbnRpZmllcgotICBQeVVuaWNvZGVfSm9pbj1weXRob24zMy5QeVVuaWNvZGVfSm9pbgotICBQeVVuaWNvZGVfUGFydGl0aW9uPXB5dGhvbjMzLlB5VW5pY29kZV9QYXJ0aXRpb24KLSAgUHlVbmljb2RlX1JQYXJ0aXRpb249cHl0aG9uMzMuUHlVbmljb2RlX1JQYXJ0aXRpb24KLSAgUHlVbmljb2RlX1JTcGxpdD1weXRob24zMy5QeVVuaWNvZGVfUlNwbGl0Ci0gIFB5VW5pY29kZV9SZXBsYWNlPXB5dGhvbjMzLlB5VW5pY29kZV9SZXBsYWNlCi0gIFB5VW5pY29kZV9SZXNpemU9cHl0aG9uMzMuUHlVbmljb2RlX1Jlc2l6ZQotICBQeVVuaWNvZGVfUmljaENvbXBhcmU9cHl0aG9uMzMuUHlVbmljb2RlX1JpY2hDb21wYXJlCi0gIFB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZwotICBQeVVuaWNvZGVfU3BsaXQ9cHl0aG9uMzMuUHlVbmljb2RlX1NwbGl0Ci0gIFB5VW5pY29kZV9TcGxpdGxpbmVzPXB5dGhvbjMzLlB5VW5pY29kZV9TcGxpdGxpbmVzCi0gIFB5VW5pY29kZV9UYWlsbWF0Y2g9cHl0aG9uMzMuUHlVbmljb2RlX1RhaWxtYXRjaAotICBQeVVuaWNvZGVfVHJhbnNsYXRlPXB5dGhvbjMzLlB5VW5pY29kZV9UcmFuc2xhdGUKLSAgUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXA9cHl0aG9uMzMuUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAKLSAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcKLSAgUHlVbmljb2RlX0RlY29kZVVURjc9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjcKLSAgUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsCi0gIFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQ9cHl0aG9uMzMuUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdAotICBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZwotICBQeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWw9cHl0aG9uMzMuUHlVbmljb2RlX0ludGVybkltbW9ydGFsCi0gIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlPXB5dGhvbjMzLlB5VW5pY29kZV9JbnRlcm5JblBsYWNlCi0gIFB5VW5pY29kZV9UeXBlPXB5dGhvbjMzLlB5VW5pY29kZV9UeXBlIERBVEEKLSAgUHlXZWFrcmVmX0dldE9iamVjdD1weXRob24zMy5QeVdlYWtyZWZfR2V0T2JqZWN0IERBVEEKLSAgUHlXZWFrcmVmX05ld1Byb3h5PXB5dGhvbjMzLlB5V2Vha3JlZl9OZXdQcm94eQotICBQeVdlYWtyZWZfTmV3UmVmPXB5dGhvbjMzLlB5V2Vha3JlZl9OZXdSZWYKLSAgUHlXcmFwcGVyRGVzY3JfVHlwZT1weXRob24zMy5QeVdyYXBwZXJEZXNjcl9UeXBlIERBVEEKLSAgUHlXcmFwcGVyX05ldz1weXRob24zMy5QeVdyYXBwZXJfTmV3Ci0gIFB5WmlwX1R5cGU9cHl0aG9uMzMuUHlaaXBfVHlwZSBEQVRBCi0gIFB5X0FkZFBlbmRpbmdDYWxsPXB5dGhvbjMzLlB5X0FkZFBlbmRpbmdDYWxsCi0gIFB5X0F0RXhpdD1weXRob24zMy5QeV9BdEV4aXQKLSAgUHlfQnVpbGRWYWx1ZT1weXRob24zMy5QeV9CdWlsZFZhbHVlCi0gIFB5X0NvbXBpbGVTdHJpbmc9cHl0aG9uMzMuUHlfQ29tcGlsZVN0cmluZwotICBQeV9EZWNSZWY9cHl0aG9uMzMuUHlfRGVjUmVmCi0gIFB5X0VuZEludGVycHJldGVyPXB5dGhvbjMzLlB5X0VuZEludGVycHJldGVyCi0gIFB5X0V4aXQ9cHl0aG9uMzMuUHlfRXhpdAotICBQeV9GYXRhbEVycm9yPXB5dGhvbjMzLlB5X0ZhdGFsRXJyb3IKLSAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKLSAgUHlfRmluYWxpemU9cHl0aG9uMzMuUHlfRmluYWxpemUKLSAgUHlfR2V0QnVpbGRJbmZvPXB5dGhvbjMzLlB5X0dldEJ1aWxkSW5mbwotICBQeV9HZXRDb21waWxlcj1weXRob24zMy5QeV9HZXRDb21waWxlcgotICBQeV9HZXRDb3B5cmlnaHQ9cHl0aG9uMzMuUHlfR2V0Q29weXJpZ2h0Ci0gIFB5X0dldEV4ZWNQcmVmaXg9cHl0aG9uMzMuUHlfR2V0RXhlY1ByZWZpeAotICBQeV9HZXRQYXRoPXB5dGhvbjMzLlB5X0dldFBhdGgKLSAgUHlfR2V0UGxhdGZvcm09cHl0aG9uMzMuUHlfR2V0UGxhdGZvcm0KLSAgUHlfR2V0UHJlZml4PXB5dGhvbjMzLlB5X0dldFByZWZpeAotICBQeV9HZXRQcm9ncmFtRnVsbFBhdGg9cHl0aG9uMzMuUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoCi0gIFB5X0dldFByb2dyYW1OYW1lPXB5dGhvbjMzLlB5X0dldFByb2dyYW1OYW1lCi0gIFB5X0dldFB5dGhvbkhvbWU9cHl0aG9uMzMuUHlfR2V0UHl0aG9uSG9tZQotICBQeV9HZXRSZWN1cnNpb25MaW1pdD1weXRob24zMy5QeV9HZXRSZWN1cnNpb25MaW1pdAotICBQeV9HZXRWZXJzaW9uPXB5dGhvbjMzLlB5X0dldFZlcnNpb24KLSAgUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKLSAgUHlfSW5jUmVmPXB5dGhvbjMzLlB5X0luY1JlZgotICBQeV9Jbml0aWFsaXplPXB5dGhvbjMzLlB5X0luaXRpYWxpemUKLSAgUHlfSW5pdGlhbGl6ZUV4PXB5dGhvbjMzLlB5X0luaXRpYWxpemVFeAotICBQeV9Jc0luaXRpYWxpemVkPXB5dGhvbjMzLlB5X0lzSW5pdGlhbGl6ZWQKLSAgUHlfTWFpbj1weXRob24zMy5QeV9NYWluCi0gIFB5X01ha2VQZW5kaW5nQ2FsbHM9cHl0aG9uMzMuUHlfTWFrZVBlbmRpbmdDYWxscwotICBQeV9OZXdJbnRlcnByZXRlcj1weXRob24zMy5QeV9OZXdJbnRlcnByZXRlcgotICBQeV9SZXByRW50ZXI9cHl0aG9uMzMuUHlfUmVwckVudGVyCi0gIFB5X1JlcHJMZWF2ZT1weXRob24zMy5QeV9SZXByTGVhdmUKLSAgUHlfU2V0UHJvZ3JhbU5hbWU9cHl0aG9uMzMuUHlfU2V0UHJvZ3JhbU5hbWUKLSAgUHlfU2V0UHl0aG9uSG9tZT1weXRob24zMy5QeV9TZXRQeXRob25Ib21lCi0gIFB5X1NldFJlY3Vyc2lvbkxpbWl0PXB5dGhvbjMzLlB5X1NldFJlY3Vyc2lvbkxpbWl0Ci0gIFB5X1N5bXRhYmxlU3RyaW5nPXB5dGhvbjMzLlB5X1N5bXRhYmxlU3RyaW5nCi0gIFB5X1ZhQnVpbGRWYWx1ZT1weXRob24zMy5QeV9WYUJ1aWxkVmFsdWUKLSAgX1B5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zMy5fUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi0gIF9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQ9cHl0aG9uMzMuX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVAotICBfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVD1weXRob24zMy5fUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVAotICBfUHlPYmplY3RfR0NfTWFsbG9jPXB5dGhvbjMzLl9QeU9iamVjdF9HQ19NYWxsb2MKLSAgX1B5T2JqZWN0X0dDX05ldz1weXRob24zMy5fUHlPYmplY3RfR0NfTmV3Ci0gIF9QeU9iamVjdF9HQ19OZXdWYXI9cHl0aG9uMzMuX1B5T2JqZWN0X0dDX05ld1ZhcgotICBfUHlPYmplY3RfR0NfUmVzaXplPXB5dGhvbjMzLl9QeU9iamVjdF9HQ19SZXNpemUKLSAgX1B5T2JqZWN0X05ldz1weXRob24zMy5fUHlPYmplY3RfTmV3Ci0gIF9QeU9iamVjdF9OZXdWYXI9cHl0aG9uMzMuX1B5T2JqZWN0X05ld1ZhcgotICBfUHlTdGF0ZV9BZGRNb2R1bGU9cHl0aG9uMzMuX1B5U3RhdGVfQWRkTW9kdWxlCi0gIF9QeVRocmVhZFN0YXRlX0luaXQ9cHl0aG9uMzMuX1B5VGhyZWFkU3RhdGVfSW5pdAotICBfUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYz1weXRob24zMy5fUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYwotICBfUHlUcmFzaF9kZWxldGVfbGF0ZXI9cHl0aG9uMzMuX1B5VHJhc2hfZGVsZXRlX2xhdGVyIERBVEEKLSAgX1B5VHJhc2hfZGVsZXRlX25lc3Rpbmc9cHl0aG9uMzMuX1B5VHJhc2hfZGVsZXRlX25lc3RpbmcgREFUQQotICBfUHlUcmFzaF9kZXBvc2l0X29iamVjdD1weXRob24zMy5fUHlUcmFzaF9kZXBvc2l0X29iamVjdAotICBfUHlUcmFzaF9kZXN0cm95X2NoYWluPXB5dGhvbjMzLl9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW4KLSAgX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZT1weXRob24zMy5fUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIERBVEEKLSAgX1B5V2Vha3JlZl9Qcm94eVR5cGU9cHl0aG9uMzMuX1B5V2Vha3JlZl9Qcm94eVR5cGUgREFUQQotICBfUHlXZWFrcmVmX1JlZlR5cGU9cHl0aG9uMzMuX1B5V2Vha3JlZl9SZWZUeXBlIERBVEEKLSAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzMuX1B5X0J1aWxkVmFsdWVfU2l6ZVQKLSAgX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQ9cHl0aG9uMzMuX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQgREFUQQotICBfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsPXB5dGhvbjMzLl9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwKLSAgX1B5X0RlYWxsb2M9cHl0aG9uMzMuX1B5X0RlYWxsb2MKLSAgX1B5X0VsbGlwc2lzT2JqZWN0PXB5dGhvbjMzLl9QeV9FbGxpcHNpc09iamVjdCBEQVRBCi0gIF9QeV9GYWxzZVN0cnVjdD1weXRob24zMy5fUHlfRmFsc2VTdHJ1Y3QgREFUQQotICBfUHlfTm9uZVN0cnVjdD1weXRob24zMy5fUHlfTm9uZVN0cnVjdCBEQVRBCi0gIF9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdD1weXRob24zMy5fUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QgREFUQQotICBfUHlfU3dhcHBlZE9wPXB5dGhvbjMzLl9QeV9Td2FwcGVkT3AgREFUQQotICBfUHlfVHJ1ZVN0cnVjdD1weXRob24zMy5fUHlfVHJ1ZVN0cnVjdCBEQVRBCi0gIF9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzMuX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVAotICBfUHlBcmdfUGFyc2VfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1BhcnNlX1NpemVUCi0gIF9QeUFyZ19QYXJzZVR1cGxlX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19QYXJzZVR1cGxlX1NpemVUCi0gIF9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAotICBfUHlBcmdfVmFQYXJzZV9TaXplVD1weXRob24zMy5fUHlBcmdfVmFQYXJzZV9TaXplVAotICBfUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCi0gIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMzLl9QeV9CdWlsZFZhbHVlX1NpemVUCisgIFB5QXJnX1BhcnNlPXB5dGhvbjM0LlB5QXJnX1BhcnNlCisgIFB5QXJnX1BhcnNlVHVwbGU9cHl0aG9uMzQuUHlBcmdfUGFyc2VUdXBsZQorICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzQuUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCisgIFB5QXJnX1VucGFja1R1cGxlPXB5dGhvbjM0LlB5QXJnX1VucGFja1R1cGxlCisgIFB5QXJnX1ZhUGFyc2U9cHl0aG9uMzQuUHlBcmdfVmFQYXJzZQorICBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zNC5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcworICBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHM9cHl0aG9uMzQuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCisgIFB5QmFzZU9iamVjdF9UeXBlPXB5dGhvbjM0LlB5QmFzZU9iamVjdF9UeXBlIERBVEEKKyAgUHlCb29sX0Zyb21Mb25nPXB5dGhvbjM0LlB5Qm9vbF9Gcm9tTG9uZworICBQeUJvb2xfVHlwZT1weXRob24zNC5QeUJvb2xfVHlwZSBEQVRBCisgIFB5Qnl0ZUFycmF5SXRlcl9UeXBlPXB5dGhvbjM0LlB5Qnl0ZUFycmF5SXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlQXJyYXlfQXNTdHJpbmc9cHl0aG9uMzQuUHlCeXRlQXJyYXlfQXNTdHJpbmcKKyAgUHlCeXRlQXJyYXlfQ29uY2F0PXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0NvbmNhdAorICBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0Zyb21PYmplY3QKKyAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzQuUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlQXJyYXlfUmVzaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X1Jlc2l6ZQorICBQeUJ5dGVBcnJheV9TaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X1NpemUKKyAgUHlCeXRlQXJyYXlfVHlwZT1weXRob24zNC5QeUJ5dGVBcnJheV9UeXBlIERBVEEKKyAgUHlCeXRlc0l0ZXJfVHlwZT1weXRob24zNC5QeUJ5dGVzSXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlc19Bc1N0cmluZz1weXRob24zNC5QeUJ5dGVzX0FzU3RyaW5nCisgIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCisgIFB5Qnl0ZXNfQ29uY2F0PXB5dGhvbjM0LlB5Qnl0ZXNfQ29uY2F0CisgIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsPXB5dGhvbjM0LlB5Qnl0ZXNfQ29uY2F0QW5kRGVsCisgIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlPXB5dGhvbjM0LlB5Qnl0ZXNfRGVjb2RlRXNjYXBlCisgIFB5Qnl0ZXNfRnJvbUZvcm1hdD1weXRob24zNC5QeUJ5dGVzX0Zyb21Gb3JtYXQKKyAgUHlCeXRlc19Gcm9tRm9ybWF0Vj1weXRob24zNC5QeUJ5dGVzX0Zyb21Gb3JtYXRWCisgIFB5Qnl0ZXNfRnJvbU9iamVjdD1weXRob24zNC5QeUJ5dGVzX0Zyb21PYmplY3QKKyAgUHlCeXRlc19Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbVN0cmluZworICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlc19SZXByPXB5dGhvbjM0LlB5Qnl0ZXNfUmVwcgorICBQeUJ5dGVzX1NpemU9cHl0aG9uMzQuUHlCeXRlc19TaXplCisgIFB5Qnl0ZXNfVHlwZT1weXRob24zNC5QeUJ5dGVzX1R5cGUgREFUQQorICBQeUNGdW5jdGlvbl9DYWxsPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0NhbGwKKyAgUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdD1weXRob24zNC5QeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0CisgIFB5Q0Z1bmN0aW9uX0dldEZsYWdzPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldEZsYWdzCisgIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCisgIFB5Q0Z1bmN0aW9uX0dldFNlbGY9cHl0aG9uMzQuUHlDRnVuY3Rpb25fR2V0U2VsZgorICBQeUNGdW5jdGlvbl9OZXc9cHl0aG9uMzQuUHlDRnVuY3Rpb25fTmV3CisgIFB5Q0Z1bmN0aW9uX05ld0V4PXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX05ld0V4CisgIFB5Q0Z1bmN0aW9uX1R5cGU9cHl0aG9uMzQuUHlDRnVuY3Rpb25fVHlwZSBEQVRBCisgIFB5Q2FsbEl0ZXJfTmV3PXB5dGhvbjM0LlB5Q2FsbEl0ZXJfTmV3CisgIFB5Q2FsbEl0ZXJfVHlwZT1weXRob24zNC5QeUNhbGxJdGVyX1R5cGUgREFUQQorICBQeUNhbGxhYmxlX0NoZWNrPXB5dGhvbjM0LlB5Q2FsbGFibGVfQ2hlY2sKKyAgUHlDYXBzdWxlX0dldENvbnRleHQ9cHl0aG9uMzQuUHlDYXBzdWxlX0dldENvbnRleHQKKyAgUHlDYXBzdWxlX0dldERlc3RydWN0b3I9cHl0aG9uMzQuUHlDYXBzdWxlX0dldERlc3RydWN0b3IKKyAgUHlDYXBzdWxlX0dldE5hbWU9cHl0aG9uMzQuUHlDYXBzdWxlX0dldE5hbWUKKyAgUHlDYXBzdWxlX0dldFBvaW50ZXI9cHl0aG9uMzQuUHlDYXBzdWxlX0dldFBvaW50ZXIKKyAgUHlDYXBzdWxlX0ltcG9ydD1weXRob24zNC5QeUNhcHN1bGVfSW1wb3J0CisgIFB5Q2Fwc3VsZV9Jc1ZhbGlkPXB5dGhvbjM0LlB5Q2Fwc3VsZV9Jc1ZhbGlkCisgIFB5Q2Fwc3VsZV9OZXc9cHl0aG9uMzQuUHlDYXBzdWxlX05ldworICBQeUNhcHN1bGVfU2V0Q29udGV4dD1weXRob24zNC5QeUNhcHN1bGVfU2V0Q29udGV4dAorICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3Rvcj1weXRob24zNC5QeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgorICBQeUNhcHN1bGVfU2V0TmFtZT1weXRob24zNC5QeUNhcHN1bGVfU2V0TmFtZQorICBQeUNhcHN1bGVfU2V0UG9pbnRlcj1weXRob24zNC5QeUNhcHN1bGVfU2V0UG9pbnRlcgorICBQeUNhcHN1bGVfVHlwZT1weXRob24zNC5QeUNhcHN1bGVfVHlwZSBEQVRBCisgIFB5Q2xhc3NNZXRob2REZXNjcl9UeXBlPXB5dGhvbjM0LlB5Q2xhc3NNZXRob2REZXNjcl9UeXBlIERBVEEKKyAgUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycworICBQeUNvZGVjX0RlY29kZT1weXRob24zNC5QeUNvZGVjX0RlY29kZQorICBQeUNvZGVjX0RlY29kZXI9cHl0aG9uMzQuUHlDb2RlY19EZWNvZGVyCisgIFB5Q29kZWNfRW5jb2RlPXB5dGhvbjM0LlB5Q29kZWNfRW5jb2RlCisgIFB5Q29kZWNfRW5jb2Rlcj1weXRob24zNC5QeUNvZGVjX0VuY29kZXIKKyAgUHlDb2RlY19JZ25vcmVFcnJvcnM9cHl0aG9uMzQuUHlDb2RlY19JZ25vcmVFcnJvcnMKKyAgUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXI9cHl0aG9uMzQuUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIKKyAgUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXI9cHl0aG9uMzQuUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIKKyAgUHlDb2RlY19Lbm93bkVuY29kaW5nPXB5dGhvbjM0LlB5Q29kZWNfS25vd25FbmNvZGluZworICBQeUNvZGVjX0xvb2t1cEVycm9yPXB5dGhvbjM0LlB5Q29kZWNfTG9va3VwRXJyb3IKKyAgUHlDb2RlY19SZWdpc3Rlcj1weXRob24zNC5QeUNvZGVjX1JlZ2lzdGVyCisgIFB5Q29kZWNfUmVnaXN0ZXJFcnJvcj1weXRob24zNC5QeUNvZGVjX1JlZ2lzdGVyRXJyb3IKKyAgUHlDb2RlY19SZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfUmVwbGFjZUVycm9ycworICBQeUNvZGVjX1N0cmVhbVJlYWRlcj1weXRob24zNC5QeUNvZGVjX1N0cmVhbVJlYWRlcgorICBQeUNvZGVjX1N0cmVhbVdyaXRlcj1weXRob24zNC5QeUNvZGVjX1N0cmVhbVdyaXRlcgorICBQeUNvZGVjX1N0cmljdEVycm9ycz1weXRob24zNC5QeUNvZGVjX1N0cmljdEVycm9ycworICBQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMKKyAgUHlDb21wbGV4X0Zyb21Eb3VibGVzPXB5dGhvbjM0LlB5Q29tcGxleF9Gcm9tRG91YmxlcworICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlPXB5dGhvbjM0LlB5Q29tcGxleF9JbWFnQXNEb3VibGUKKyAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZT1weXRob24zNC5QeUNvbXBsZXhfUmVhbEFzRG91YmxlCisgIFB5Q29tcGxleF9UeXBlPXB5dGhvbjM0LlB5Q29tcGxleF9UeXBlIERBVEEKKyAgUHlEZXNjcl9OZXdDbGFzc01ldGhvZD1weXRob24zNC5QeURlc2NyX05ld0NsYXNzTWV0aG9kCisgIFB5RGVzY3JfTmV3R2V0U2V0PXB5dGhvbjM0LlB5RGVzY3JfTmV3R2V0U2V0CisgIFB5RGVzY3JfTmV3TWVtYmVyPXB5dGhvbjM0LlB5RGVzY3JfTmV3TWVtYmVyCisgIFB5RGVzY3JfTmV3TWV0aG9kPXB5dGhvbjM0LlB5RGVzY3JfTmV3TWV0aG9kCisgIFB5RGljdEl0ZW1zX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlbXNfVHlwZSBEQVRBCisgIFB5RGljdEl0ZXJJdGVtX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlckl0ZW1fVHlwZSBEQVRBCisgIFB5RGljdEl0ZXJLZXlfVHlwZT1weXRob24zNC5QeURpY3RJdGVyS2V5X1R5cGUgREFUQQorICBQeURpY3RJdGVyVmFsdWVfVHlwZT1weXRob24zNC5QeURpY3RJdGVyVmFsdWVfVHlwZSBEQVRBCisgIFB5RGljdEtleXNfVHlwZT1weXRob24zNC5QeURpY3RLZXlzX1R5cGUgREFUQQorICBQeURpY3RQcm94eV9OZXc9cHl0aG9uMzQuUHlEaWN0UHJveHlfTmV3CisgIFB5RGljdFByb3h5X1R5cGU9cHl0aG9uMzQuUHlEaWN0UHJveHlfVHlwZSBEQVRBCisgIFB5RGljdFZhbHVlc19UeXBlPXB5dGhvbjM0LlB5RGljdFZhbHVlc19UeXBlIERBVEEKKyAgUHlEaWN0X0NsZWFyPXB5dGhvbjM0LlB5RGljdF9DbGVhcgorICBQeURpY3RfQ29udGFpbnM9cHl0aG9uMzQuUHlEaWN0X0NvbnRhaW5zCisgIFB5RGljdF9Db3B5PXB5dGhvbjM0LlB5RGljdF9Db3B5CisgIFB5RGljdF9EZWxJdGVtPXB5dGhvbjM0LlB5RGljdF9EZWxJdGVtCisgIFB5RGljdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9EZWxJdGVtU3RyaW5nCisgIFB5RGljdF9HZXRJdGVtPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtCisgIFB5RGljdF9HZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtU3RyaW5nCisgIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtV2l0aEVycm9yCisgIFB5RGljdF9JdGVtcz1weXRob24zNC5QeURpY3RfSXRlbXMKKyAgUHlEaWN0X0tleXM9cHl0aG9uMzQuUHlEaWN0X0tleXMKKyAgUHlEaWN0X01lcmdlPXB5dGhvbjM0LlB5RGljdF9NZXJnZQorICBQeURpY3RfTWVyZ2VGcm9tU2VxMj1weXRob24zNC5QeURpY3RfTWVyZ2VGcm9tU2VxMgorICBQeURpY3RfTmV3PXB5dGhvbjM0LlB5RGljdF9OZXcKKyAgUHlEaWN0X05leHQ9cHl0aG9uMzQuUHlEaWN0X05leHQKKyAgUHlEaWN0X1NldEl0ZW09cHl0aG9uMzQuUHlEaWN0X1NldEl0ZW0KKyAgUHlEaWN0X1NldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlEaWN0X1NldEl0ZW1TdHJpbmcKKyAgUHlEaWN0X1NpemU9cHl0aG9uMzQuUHlEaWN0X1NpemUKKyAgUHlEaWN0X1R5cGU9cHl0aG9uMzQuUHlEaWN0X1R5cGUgREFUQQorICBQeURpY3RfVXBkYXRlPXB5dGhvbjM0LlB5RGljdF9VcGRhdGUKKyAgUHlEaWN0X1ZhbHVlcz1weXRob24zNC5QeURpY3RfVmFsdWVzCisgIFB5RWxsaXBzaXNfVHlwZT1weXRob24zNC5QeUVsbGlwc2lzX1R5cGUgREFUQQorICBQeUVudW1fVHlwZT1weXRob24zNC5QeUVudW1fVHlwZSBEQVRBCisgIFB5RXJyX0JhZEFyZ3VtZW50PXB5dGhvbjM0LlB5RXJyX0JhZEFyZ3VtZW50CisgIFB5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zNC5QeUVycl9CYWRJbnRlcm5hbENhbGwKKyAgUHlFcnJfQ2hlY2tTaWduYWxzPXB5dGhvbjM0LlB5RXJyX0NoZWNrU2lnbmFscworICBQeUVycl9DbGVhcj1weXRob24zNC5QeUVycl9DbGVhcgorICBQeUVycl9EaXNwbGF5PXB5dGhvbjM0LlB5RXJyX0Rpc3BsYXkKKyAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zNC5QeUVycl9FeGNlcHRpb25NYXRjaGVzCisgIFB5RXJyX0ZldGNoPXB5dGhvbjM0LlB5RXJyX0ZldGNoCisgIFB5RXJyX0Zvcm1hdD1weXRob24zNC5QeUVycl9Gb3JtYXQKKyAgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzPXB5dGhvbjM0LlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcworICBQeUVycl9OZXdFeGNlcHRpb249cHl0aG9uMzQuUHlFcnJfTmV3RXhjZXB0aW9uCisgIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M9cHl0aG9uMzQuUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYworICBQeUVycl9Ob01lbW9yeT1weXRob24zNC5QeUVycl9Ob01lbW9yeQorICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb249cHl0aG9uMzQuUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCisgIFB5RXJyX09jY3VycmVkPXB5dGhvbjM0LlB5RXJyX09jY3VycmVkCisgIFB5RXJyX1ByaW50PXB5dGhvbjM0LlB5RXJyX1ByaW50CisgIFB5RXJyX1ByaW50RXg9cHl0aG9uMzQuUHlFcnJfUHJpbnRFeAorICBQeUVycl9Qcm9ncmFtVGV4dD1weXRob24zNC5QeUVycl9Qcm9ncmFtVGV4dAorICBQeUVycl9SZXN0b3JlPXB5dGhvbjM0LlB5RXJyX1Jlc3RvcmUKKyAgUHlFcnJfU2V0RnJvbUVycm5vPXB5dGhvbjM0LlB5RXJyX1NldEZyb21FcnJubworICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWU9cHl0aG9uMzQuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCisgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdD1weXRob24zNC5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QKKyAgUHlFcnJfU2V0SW50ZXJydXB0PXB5dGhvbjM0LlB5RXJyX1NldEludGVycnVwdAorICBQeUVycl9TZXROb25lPXB5dGhvbjM0LlB5RXJyX1NldE5vbmUKKyAgUHlFcnJfU2V0T2JqZWN0PXB5dGhvbjM0LlB5RXJyX1NldE9iamVjdAorICBQeUVycl9TZXRTdHJpbmc9cHl0aG9uMzQuUHlFcnJfU2V0U3RyaW5nCisgIFB5RXJyX1N5bnRheExvY2F0aW9uPXB5dGhvbjM0LlB5RXJyX1N5bnRheExvY2F0aW9uCisgIFB5RXJyX1dhcm5FeD1weXRob24zNC5QeUVycl9XYXJuRXgKKyAgUHlFcnJfV2FybkV4cGxpY2l0PXB5dGhvbjM0LlB5RXJyX1dhcm5FeHBsaWNpdAorICBQeUVycl9XYXJuRm9ybWF0PXB5dGhvbjM0LlB5RXJyX1dhcm5Gb3JtYXQKKyAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlPXB5dGhvbjM0LlB5RXJyX1dyaXRlVW5yYWlzYWJsZQorICBQeUV2YWxfQWNxdWlyZUxvY2s9cHl0aG9uMzQuUHlFdmFsX0FjcXVpcmVMb2NrCisgIFB5RXZhbF9BY3F1aXJlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9BY3F1aXJlVGhyZWFkCisgIFB5RXZhbF9DYWxsRnVuY3Rpb249cHl0aG9uMzQuUHlFdmFsX0NhbGxGdW5jdGlvbgorICBQeUV2YWxfQ2FsbE1ldGhvZD1weXRob24zNC5QeUV2YWxfQ2FsbE1ldGhvZAorICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3Jkcz1weXRob24zNC5QeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcworICBQeUV2YWxfRXZhbENvZGU9cHl0aG9uMzQuUHlFdmFsX0V2YWxDb2RlCisgIFB5RXZhbF9FdmFsQ29kZUV4PXB5dGhvbjM0LlB5RXZhbF9FdmFsQ29kZUV4CisgIFB5RXZhbF9FdmFsRnJhbWU9cHl0aG9uMzQuUHlFdmFsX0V2YWxGcmFtZQorICBQeUV2YWxfRXZhbEZyYW1lRXg9cHl0aG9uMzQuUHlFdmFsX0V2YWxGcmFtZUV4CisgIFB5RXZhbF9HZXRCdWlsdGlucz1weXRob24zNC5QeUV2YWxfR2V0QnVpbHRpbnMKKyAgUHlFdmFsX0dldENhbGxTdGF0cz1weXRob24zNC5QeUV2YWxfR2V0Q2FsbFN0YXRzCisgIFB5RXZhbF9HZXRGcmFtZT1weXRob24zNC5QeUV2YWxfR2V0RnJhbWUKKyAgUHlFdmFsX0dldEZ1bmNEZXNjPXB5dGhvbjM0LlB5RXZhbF9HZXRGdW5jRGVzYworICBQeUV2YWxfR2V0RnVuY05hbWU9cHl0aG9uMzQuUHlFdmFsX0dldEZ1bmNOYW1lCisgIFB5RXZhbF9HZXRHbG9iYWxzPXB5dGhvbjM0LlB5RXZhbF9HZXRHbG9iYWxzCisgIFB5RXZhbF9HZXRMb2NhbHM9cHl0aG9uMzQuUHlFdmFsX0dldExvY2FscworICBQeUV2YWxfSW5pdFRocmVhZHM9cHl0aG9uMzQuUHlFdmFsX0luaXRUaHJlYWRzCisgIFB5RXZhbF9SZUluaXRUaHJlYWRzPXB5dGhvbjM0LlB5RXZhbF9SZUluaXRUaHJlYWRzCisgIFB5RXZhbF9SZWxlYXNlTG9jaz1weXRob24zNC5QeUV2YWxfUmVsZWFzZUxvY2sKKyAgUHlFdmFsX1JlbGVhc2VUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1JlbGVhc2VUaHJlYWQKKyAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1Jlc3RvcmVUaHJlYWQKKyAgUHlFdmFsX1NhdmVUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1NhdmVUaHJlYWQKKyAgUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZD1weXRob24zNC5QeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkCisgIFB5RXhjX0FyaXRobWV0aWNFcnJvcj1weXRob24zNC5QeUV4Y19Bcml0aG1ldGljRXJyb3IgREFUQQorICBQeUV4Y19Bc3NlcnRpb25FcnJvcj1weXRob24zNC5QeUV4Y19Bc3NlcnRpb25FcnJvciBEQVRBCisgIFB5RXhjX0F0dHJpYnV0ZUVycm9yPXB5dGhvbjM0LlB5RXhjX0F0dHJpYnV0ZUVycm9yIERBVEEKKyAgUHlFeGNfQmFzZUV4Y2VwdGlvbj1weXRob24zNC5QeUV4Y19CYXNlRXhjZXB0aW9uIERBVEEKKyAgUHlFeGNfQnVmZmVyRXJyb3I9cHl0aG9uMzQuUHlFeGNfQnVmZmVyRXJyb3IgREFUQQorICBQeUV4Y19CeXRlc1dhcm5pbmc9cHl0aG9uMzQuUHlFeGNfQnl0ZXNXYXJuaW5nIERBVEEKKyAgUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0RlcHJlY2F0aW9uV2FybmluZyBEQVRBCisgIFB5RXhjX0VPRkVycm9yPXB5dGhvbjM0LlB5RXhjX0VPRkVycm9yIERBVEEKKyAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcj1weXRob24zNC5QeUV4Y19FbnZpcm9ubWVudEVycm9yIERBVEEKKyAgUHlFeGNfRXhjZXB0aW9uPXB5dGhvbjM0LlB5RXhjX0V4Y2VwdGlvbiBEQVRBCisgIFB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvcj1weXRob24zNC5QeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IgREFUQQorICBQeUV4Y19GdXR1cmVXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0Z1dHVyZVdhcm5pbmcgREFUQQorICBQeUV4Y19HZW5lcmF0b3JFeGl0PXB5dGhvbjM0LlB5RXhjX0dlbmVyYXRvckV4aXQgREFUQQorICBQeUV4Y19JT0Vycm9yPXB5dGhvbjM0LlB5RXhjX0lPRXJyb3IgREFUQQorICBQeUV4Y19JbXBvcnRFcnJvcj1weXRob24zNC5QeUV4Y19JbXBvcnRFcnJvciBEQVRBCisgIFB5RXhjX0ltcG9ydFdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfSW1wb3J0V2FybmluZyBEQVRBCisgIFB5RXhjX0luZGVudGF0aW9uRXJyb3I9cHl0aG9uMzQuUHlFeGNfSW5kZW50YXRpb25FcnJvciBEQVRBCisgIFB5RXhjX0luZGV4RXJyb3I9cHl0aG9uMzQuUHlFeGNfSW5kZXhFcnJvciBEQVRBCisgIFB5RXhjX0tleUVycm9yPXB5dGhvbjM0LlB5RXhjX0tleUVycm9yIERBVEEKKyAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQ9cHl0aG9uMzQuUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQgREFUQQorICBQeUV4Y19Mb29rdXBFcnJvcj1weXRob24zNC5QeUV4Y19Mb29rdXBFcnJvciBEQVRBCisgIFB5RXhjX01lbW9yeUVycm9yPXB5dGhvbjM0LlB5RXhjX01lbW9yeUVycm9yIERBVEEKKyAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0PXB5dGhvbjM0LlB5RXhjX01lbW9yeUVycm9ySW5zdCBEQVRBCisgIFB5RXhjX05hbWVFcnJvcj1weXRob24zNC5QeUV4Y19OYW1lRXJyb3IgREFUQQorICBQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yPXB5dGhvbjM0LlB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IgREFUQQorICBQeUV4Y19PU0Vycm9yPXB5dGhvbjM0LlB5RXhjX09TRXJyb3IgREFUQQorICBQeUV4Y19PdmVyZmxvd0Vycm9yPXB5dGhvbjM0LlB5RXhjX092ZXJmbG93RXJyb3IgREFUQQorICBQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgREFUQQorICBQeUV4Y19SZWN1cnNpb25FcnJvckluc3Q9cHl0aG9uMzQuUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0IERBVEEKKyAgUHlFeGNfUmVmZXJlbmNlRXJyb3I9cHl0aG9uMzQuUHlFeGNfUmVmZXJlbmNlRXJyb3IgREFUQQorICBQeUV4Y19SdW50aW1lRXJyb3I9cHl0aG9uMzQuUHlFeGNfUnVudGltZUVycm9yIERBVEEKKyAgUHlFeGNfUnVudGltZVdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfUnVudGltZVdhcm5pbmcgREFUQQorICBQeUV4Y19TdG9wSXRlcmF0aW9uPXB5dGhvbjM0LlB5RXhjX1N0b3BJdGVyYXRpb24gREFUQQorICBQeUV4Y19TeW50YXhFcnJvcj1weXRob24zNC5QeUV4Y19TeW50YXhFcnJvciBEQVRBCisgIFB5RXhjX1N5bnRheFdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfU3ludGF4V2FybmluZyBEQVRBCisgIFB5RXhjX1N5c3RlbUVycm9yPXB5dGhvbjM0LlB5RXhjX1N5c3RlbUVycm9yIERBVEEKKyAgUHlFeGNfU3lzdGVtRXhpdD1weXRob24zNC5QeUV4Y19TeXN0ZW1FeGl0IERBVEEKKyAgUHlFeGNfVGFiRXJyb3I9cHl0aG9uMzQuUHlFeGNfVGFiRXJyb3IgREFUQQorICBQeUV4Y19UeXBlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVHlwZUVycm9yIERBVEEKKyAgUHlFeGNfVW5ib3VuZExvY2FsRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZURlY29kZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVFcnJvcj1weXRob24zNC5QeUV4Y19Vbmljb2RlRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZVdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfVW5pY29kZVdhcm5pbmcgREFUQQorICBQeUV4Y19Vc2VyV2FybmluZz1weXRob24zNC5QeUV4Y19Vc2VyV2FybmluZyBEQVRBCisgIFB5RXhjX1ZhbHVlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVmFsdWVFcnJvciBEQVRBCisgIFB5RXhjX1dhcm5pbmc9cHl0aG9uMzQuUHlFeGNfV2FybmluZyBEQVRBCisgIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yPXB5dGhvbjM0LlB5RXhjX1plcm9EaXZpc2lvbkVycm9yIERBVEEKKyAgUHlFeGNlcHRpb25fR2V0Q2F1c2U9cHl0aG9uMzQuUHlFeGNlcHRpb25fR2V0Q2F1c2UKKyAgUHlFeGNlcHRpb25fR2V0Q29udGV4dD1weXRob24zNC5QeUV4Y2VwdGlvbl9HZXRDb250ZXh0CisgIFB5RXhjZXB0aW9uX0dldFRyYWNlYmFjaz1weXRob24zNC5QeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2sKKyAgUHlFeGNlcHRpb25fU2V0Q2F1c2U9cHl0aG9uMzQuUHlFeGNlcHRpb25fU2V0Q2F1c2UKKyAgUHlFeGNlcHRpb25fU2V0Q29udGV4dD1weXRob24zNC5QeUV4Y2VwdGlvbl9TZXRDb250ZXh0CisgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjaz1weXRob24zNC5QeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sKKyAgUHlGaWxlX0Zyb21GZD1weXRob24zNC5QeUZpbGVfRnJvbUZkCisgIFB5RmlsZV9HZXRMaW5lPXB5dGhvbjM0LlB5RmlsZV9HZXRMaW5lCisgIFB5RmlsZV9Xcml0ZU9iamVjdD1weXRob24zNC5QeUZpbGVfV3JpdGVPYmplY3QKKyAgUHlGaWxlX1dyaXRlU3RyaW5nPXB5dGhvbjM0LlB5RmlsZV9Xcml0ZVN0cmluZworICBQeUZpbHRlcl9UeXBlPXB5dGhvbjM0LlB5RmlsdGVyX1R5cGUgREFUQQorICBQeUZsb2F0X0FzRG91YmxlPXB5dGhvbjM0LlB5RmxvYXRfQXNEb3VibGUKKyAgUHlGbG9hdF9Gcm9tRG91YmxlPXB5dGhvbjM0LlB5RmxvYXRfRnJvbURvdWJsZQorICBQeUZsb2F0X0Zyb21TdHJpbmc9cHl0aG9uMzQuUHlGbG9hdF9Gcm9tU3RyaW5nCisgIFB5RmxvYXRfR2V0SW5mbz1weXRob24zNC5QeUZsb2F0X0dldEluZm8KKyAgUHlGbG9hdF9HZXRNYXg9cHl0aG9uMzQuUHlGbG9hdF9HZXRNYXgKKyAgUHlGbG9hdF9HZXRNaW49cHl0aG9uMzQuUHlGbG9hdF9HZXRNaW4KKyAgUHlGbG9hdF9UeXBlPXB5dGhvbjM0LlB5RmxvYXRfVHlwZSBEQVRBCisgIFB5RnJvemVuU2V0X05ldz1weXRob24zNC5QeUZyb3plblNldF9OZXcKKyAgUHlGcm96ZW5TZXRfVHlwZT1weXRob24zNC5QeUZyb3plblNldF9UeXBlIERBVEEKKyAgUHlHQ19Db2xsZWN0PXB5dGhvbjM0LlB5R0NfQ29sbGVjdAorICBQeUdJTFN0YXRlX0Vuc3VyZT1weXRob24zNC5QeUdJTFN0YXRlX0Vuc3VyZQorICBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZT1weXRob24zNC5QeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZQorICBQeUdJTFN0YXRlX1JlbGVhc2U9cHl0aG9uMzQuUHlHSUxTdGF0ZV9SZWxlYXNlCisgIFB5R2V0U2V0RGVzY3JfVHlwZT1weXRob24zNC5QeUdldFNldERlc2NyX1R5cGUgREFUQQorICBQeUltcG9ydF9BZGRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfQWRkTW9kdWxlCisgIFB5SW1wb3J0X0FwcGVuZEluaXR0YWI9cHl0aG9uMzQuUHlJbXBvcnRfQXBwZW5kSW5pdHRhYgorICBQeUltcG9ydF9DbGVhbnVwPXB5dGhvbjM0LlB5SW1wb3J0X0NsZWFudXAKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeD1weXRob24zNC5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4CisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcz1weXRob24zNC5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMKKyAgUHlJbXBvcnRfR2V0SW1wb3J0ZXI9cHl0aG9uMzQuUHlJbXBvcnRfR2V0SW1wb3J0ZXIKKyAgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXI9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIKKyAgUHlJbXBvcnRfR2V0TWFnaWNUYWc9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TWFnaWNUYWcKKyAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdD1weXRob24zNC5QeUltcG9ydF9HZXRNb2R1bGVEaWN0CisgIFB5SW1wb3J0X0ltcG9ydD1weXRob24zNC5QeUltcG9ydF9JbXBvcnQKKyAgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZQorICBQeUltcG9ydF9JbXBvcnRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0TW9kdWxlCisgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsCisgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2s9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaworICBQeUltcG9ydF9SZWxvYWRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfUmVsb2FkTW9kdWxlCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcj1weXRob24zNC5QeUludGVycHJldGVyU3RhdGVfQ2xlYXIKKyAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZT1weXRob24zNC5QeUludGVycHJldGVyU3RhdGVfRGVsZXRlCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXc9cHl0aG9uMzQuUHlJbnRlcnByZXRlclN0YXRlX05ldworICBQeUl0ZXJfTmV4dD1weXRob24zNC5QeUl0ZXJfTmV4dAorICBQeUxpc3RJdGVyX1R5cGU9cHl0aG9uMzQuUHlMaXN0SXRlcl9UeXBlIERBVEEKKyAgUHlMaXN0UmV2SXRlcl9UeXBlPXB5dGhvbjM0LlB5TGlzdFJldkl0ZXJfVHlwZSBEQVRBCisgIFB5TGlzdF9BcHBlbmQ9cHl0aG9uMzQuUHlMaXN0X0FwcGVuZAorICBQeUxpc3RfQXNUdXBsZT1weXRob24zNC5QeUxpc3RfQXNUdXBsZQorICBQeUxpc3RfR2V0SXRlbT1weXRob24zNC5QeUxpc3RfR2V0SXRlbQorICBQeUxpc3RfR2V0U2xpY2U9cHl0aG9uMzQuUHlMaXN0X0dldFNsaWNlCisgIFB5TGlzdF9JbnNlcnQ9cHl0aG9uMzQuUHlMaXN0X0luc2VydAorICBQeUxpc3RfTmV3PXB5dGhvbjM0LlB5TGlzdF9OZXcKKyAgUHlMaXN0X1JldmVyc2U9cHl0aG9uMzQuUHlMaXN0X1JldmVyc2UKKyAgUHlMaXN0X1NldEl0ZW09cHl0aG9uMzQuUHlMaXN0X1NldEl0ZW0KKyAgUHlMaXN0X1NldFNsaWNlPXB5dGhvbjM0LlB5TGlzdF9TZXRTbGljZQorICBQeUxpc3RfU2l6ZT1weXRob24zNC5QeUxpc3RfU2l6ZQorICBQeUxpc3RfU29ydD1weXRob24zNC5QeUxpc3RfU29ydAorICBQeUxpc3RfVHlwZT1weXRob24zNC5QeUxpc3RfVHlwZSBEQVRBCisgIFB5TG9uZ1JhbmdlSXRlcl9UeXBlPXB5dGhvbjM0LlB5TG9uZ1JhbmdlSXRlcl9UeXBlIERBVEEKKyAgUHlMb25nX0FzRG91YmxlPXB5dGhvbjM0LlB5TG9uZ19Bc0RvdWJsZQorICBQeUxvbmdfQXNMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmcKKyAgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdworICBQeUxvbmdfQXNMb25nTG9uZz1weXRob24zNC5QeUxvbmdfQXNMb25nTG9uZworICBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cKKyAgUHlMb25nX0FzU2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Bc1NpemVfdAorICBQeUxvbmdfQXNTc2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Bc1NzaXplX3QKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZworICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2s9cHl0aG9uMzQuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2sKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrCisgIFB5TG9uZ19Bc1ZvaWRQdHI9cHl0aG9uMzQuUHlMb25nX0FzVm9pZFB0cgorICBQeUxvbmdfRnJvbURvdWJsZT1weXRob24zNC5QeUxvbmdfRnJvbURvdWJsZQorICBQeUxvbmdfRnJvbUxvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21Mb25nCisgIFB5TG9uZ19Gcm9tTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21Mb25nTG9uZworICBQeUxvbmdfRnJvbVNpemVfdD1weXRob24zNC5QeUxvbmdfRnJvbVNpemVfdAorICBQeUxvbmdfRnJvbVNzaXplX3Q9cHl0aG9uMzQuUHlMb25nX0Zyb21Tc2l6ZV90CisgIFB5TG9uZ19Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tU3RyaW5nCisgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nCisgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZz1weXRob24zNC5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcKKyAgUHlMb25nX0Zyb21Wb2lkUHRyPXB5dGhvbjM0LlB5TG9uZ19Gcm9tVm9pZFB0cgorICBQeUxvbmdfR2V0SW5mbz1weXRob24zNC5QeUxvbmdfR2V0SW5mbworICBQeUxvbmdfVHlwZT1weXRob24zNC5QeUxvbmdfVHlwZSBEQVRBCisgIFB5TWFwX1R5cGU9cHl0aG9uMzQuUHlNYXBfVHlwZSBEQVRBCisgIFB5TWFwcGluZ19DaGVjaz1weXRob24zNC5QeU1hcHBpbmdfQ2hlY2sKKyAgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKKyAgUHlNYXBwaW5nX0hhc0tleT1weXRob24zNC5QeU1hcHBpbmdfSGFzS2V5CisgIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX0hhc0tleVN0cmluZworICBQeU1hcHBpbmdfSXRlbXM9cHl0aG9uMzQuUHlNYXBwaW5nX0l0ZW1zCisgIFB5TWFwcGluZ19LZXlzPXB5dGhvbjM0LlB5TWFwcGluZ19LZXlzCisgIFB5TWFwcGluZ19MZW5ndGg9cHl0aG9uMzQuUHlNYXBwaW5nX0xlbmd0aAorICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZz1weXRob24zNC5QeU1hcHBpbmdfU2V0SXRlbVN0cmluZworICBQeU1hcHBpbmdfU2l6ZT1weXRob24zNC5QeU1hcHBpbmdfU2l6ZQorICBQeU1hcHBpbmdfVmFsdWVzPXB5dGhvbjM0LlB5TWFwcGluZ19WYWx1ZXMKKyAgUHlNZW1fRnJlZT1weXRob24zNC5QeU1lbV9GcmVlCisgIFB5TWVtX01hbGxvYz1weXRob24zNC5QeU1lbV9NYWxsb2MKKyAgUHlNZW1fUmVhbGxvYz1weXRob24zNC5QeU1lbV9SZWFsbG9jCisgIFB5TWVtYmVyRGVzY3JfVHlwZT1weXRob24zNC5QeU1lbWJlckRlc2NyX1R5cGUgREFUQQorICBQeU1lbW9yeVZpZXdfRnJvbU9iamVjdD1weXRob24zNC5QeU1lbW9yeVZpZXdfRnJvbU9iamVjdAorICBQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cz1weXRob24zNC5QeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cworICBQeU1lbW9yeVZpZXdfVHlwZT1weXRob24zNC5QeU1lbW9yeVZpZXdfVHlwZSBEQVRBCisgIFB5TWV0aG9kRGVzY3JfVHlwZT1weXRob24zNC5QeU1ldGhvZERlc2NyX1R5cGUgREFUQQorICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudD1weXRob24zNC5QeU1vZHVsZV9BZGRJbnRDb25zdGFudAorICBQeU1vZHVsZV9BZGRPYmplY3Q9cHl0aG9uMzQuUHlNb2R1bGVfQWRkT2JqZWN0CisgIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50PXB5dGhvbjM0LlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50CisgIFB5TW9kdWxlX0NyZWF0ZTI9cHl0aG9uMzQuUHlNb2R1bGVfQ3JlYXRlMgorICBQeU1vZHVsZV9HZXREZWY9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RGVmCisgIFB5TW9kdWxlX0dldERpY3Q9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RGljdAorICBQeU1vZHVsZV9HZXRGaWxlbmFtZT1weXRob24zNC5QeU1vZHVsZV9HZXRGaWxlbmFtZQorICBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdD1weXRob24zNC5QeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdAorICBQeU1vZHVsZV9HZXROYW1lPXB5dGhvbjM0LlB5TW9kdWxlX0dldE5hbWUKKyAgUHlNb2R1bGVfR2V0U3RhdGU9cHl0aG9uMzQuUHlNb2R1bGVfR2V0U3RhdGUKKyAgUHlNb2R1bGVfTmV3PXB5dGhvbjM0LlB5TW9kdWxlX05ldworICBQeU1vZHVsZV9UeXBlPXB5dGhvbjM0LlB5TW9kdWxlX1R5cGUgREFUQQorICBQeU51bGxJbXBvcnRlcl9UeXBlPXB5dGhvbjM0LlB5TnVsbEltcG9ydGVyX1R5cGUgREFUQQorICBQeU51bWJlcl9BYnNvbHV0ZT1weXRob24zNC5QeU51bWJlcl9BYnNvbHV0ZQorICBQeU51bWJlcl9BZGQ9cHl0aG9uMzQuUHlOdW1iZXJfQWRkCisgIFB5TnVtYmVyX0FuZD1weXRob24zNC5QeU51bWJlcl9BbmQKKyAgUHlOdW1iZXJfQXNTc2l6ZV90PXB5dGhvbjM0LlB5TnVtYmVyX0FzU3NpemVfdAorICBQeU51bWJlcl9DaGVjaz1weXRob24zNC5QeU51bWJlcl9DaGVjaworICBQeU51bWJlcl9EaXZtb2Q9cHl0aG9uMzQuUHlOdW1iZXJfRGl2bW9kCisgIFB5TnVtYmVyX0Zsb2F0PXB5dGhvbjM0LlB5TnVtYmVyX0Zsb2F0CisgIFB5TnVtYmVyX0Zsb29yRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0Zsb29yRGl2aWRlCisgIFB5TnVtYmVyX0luUGxhY2VBZGQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZUFkZAorICBQeU51bWJlcl9JblBsYWNlQW5kPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VBbmQKKyAgUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZQorICBQeU51bWJlcl9JblBsYWNlTHNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VMc2hpZnQKKyAgUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VNdWx0aXBseQorICBQeU51bWJlcl9JblBsYWNlT3I9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZU9yCisgIFB5TnVtYmVyX0luUGxhY2VQb3dlcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlUG93ZXIKKyAgUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlUmVtYWluZGVyCisgIFB5TnVtYmVyX0luUGxhY2VSc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVJzaGlmdAorICBQeU51bWJlcl9JblBsYWNlU3VidHJhY3Q9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0CisgIFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlCisgIFB5TnVtYmVyX0luUGxhY2VYb3I9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVhvcgorICBQeU51bWJlcl9JbmRleD1weXRob24zNC5QeU51bWJlcl9JbmRleAorICBQeU51bWJlcl9JbnZlcnQ9cHl0aG9uMzQuUHlOdW1iZXJfSW52ZXJ0CisgIFB5TnVtYmVyX0xvbmc9cHl0aG9uMzQuUHlOdW1iZXJfTG9uZworICBQeU51bWJlcl9Mc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfTHNoaWZ0CisgIFB5TnVtYmVyX011bHRpcGx5PXB5dGhvbjM0LlB5TnVtYmVyX011bHRpcGx5CisgIFB5TnVtYmVyX05lZ2F0aXZlPXB5dGhvbjM0LlB5TnVtYmVyX05lZ2F0aXZlCisgIFB5TnVtYmVyX09yPXB5dGhvbjM0LlB5TnVtYmVyX09yCisgIFB5TnVtYmVyX1Bvc2l0aXZlPXB5dGhvbjM0LlB5TnVtYmVyX1Bvc2l0aXZlCisgIFB5TnVtYmVyX1Bvd2VyPXB5dGhvbjM0LlB5TnVtYmVyX1Bvd2VyCisgIFB5TnVtYmVyX1JlbWFpbmRlcj1weXRob24zNC5QeU51bWJlcl9SZW1haW5kZXIKKyAgUHlOdW1iZXJfUnNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX1JzaGlmdAorICBQeU51bWJlcl9TdWJ0cmFjdD1weXRob24zNC5QeU51bWJlcl9TdWJ0cmFjdAorICBQeU51bWJlcl9Ub0Jhc2U9cHl0aG9uMzQuUHlOdW1iZXJfVG9CYXNlCisgIFB5TnVtYmVyX1RydWVEaXZpZGU9cHl0aG9uMzQuUHlOdW1iZXJfVHJ1ZURpdmlkZQorICBQeU51bWJlcl9Yb3I9cHl0aG9uMzQuUHlOdW1iZXJfWG9yCisgIFB5T1NfQWZ0ZXJGb3JrPXB5dGhvbjM0LlB5T1NfQWZ0ZXJGb3JrCisgIFB5T1NfSW5pdEludGVycnVwdHM9cHl0aG9uMzQuUHlPU19Jbml0SW50ZXJydXB0cworICBQeU9TX0lucHV0SG9vaz1weXRob24zNC5QeU9TX0lucHV0SG9vayBEQVRBCisgIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQ9cHl0aG9uMzQuUHlPU19JbnRlcnJ1cHRPY2N1cnJlZAorICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyPXB5dGhvbjM0LlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgREFUQQorICBQeU9TX2RvdWJsZV90b19zdHJpbmc9cHl0aG9uMzQuUHlPU19kb3VibGVfdG9fc3RyaW5nCisgIFB5T1NfZ2V0c2lnPXB5dGhvbjM0LlB5T1NfZ2V0c2lnCisgIFB5T1NfbXlzdHJpY21wPXB5dGhvbjM0LlB5T1NfbXlzdHJpY21wCisgIFB5T1NfbXlzdHJuaWNtcD1weXRob24zNC5QeU9TX215c3RybmljbXAKKyAgUHlPU19zZXRzaWc9cHl0aG9uMzQuUHlPU19zZXRzaWcKKyAgUHlPU19zbnByaW50Zj1weXRob24zNC5QeU9TX3NucHJpbnRmCisgIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZT1weXRob24zNC5QeU9TX3N0cmluZ190b19kb3VibGUKKyAgUHlPU19zdHJ0b2w9cHl0aG9uMzQuUHlPU19zdHJ0b2wKKyAgUHlPU19zdHJ0b3VsPXB5dGhvbjM0LlB5T1Nfc3RydG91bAorICBQeU9TX3ZzbnByaW50Zj1weXRob24zNC5QeU9TX3ZzbnByaW50ZgorICBQeU9iamVjdF9BU0NJST1weXRob24zNC5QeU9iamVjdF9BU0NJSQorICBQeU9iamVjdF9Bc0NoYXJCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNDaGFyQnVmZmVyCisgIFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I9cHl0aG9uMzQuUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcgorICBQeU9iamVjdF9Bc1JlYWRCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNSZWFkQnVmZmVyCisgIFB5T2JqZWN0X0FzV3JpdGVCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcgorICBQeU9iamVjdF9CeXRlcz1weXRob24zNC5QeU9iamVjdF9CeXRlcworICBQeU9iamVjdF9DYWxsPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGwKKyAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxGdW5jdGlvbgorICBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MKKyAgUHlPYmplY3RfQ2FsbE1ldGhvZD1weXRob24zNC5QeU9iamVjdF9DYWxsTWV0aG9kCisgIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzCisgIFB5T2JqZWN0X0NhbGxPYmplY3Q9cHl0aG9uMzQuUHlPYmplY3RfQ2FsbE9iamVjdAorICBQeU9iamVjdF9DaGVja1JlYWRCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyCisgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnM9cHl0aG9uMzQuUHlPYmplY3RfQ2xlYXJXZWFrUmVmcworICBQeU9iamVjdF9EZWxJdGVtPXB5dGhvbjM0LlB5T2JqZWN0X0RlbEl0ZW0KKyAgUHlPYmplY3RfRGVsSXRlbVN0cmluZz1weXRob24zNC5QeU9iamVjdF9EZWxJdGVtU3RyaW5nCisgIFB5T2JqZWN0X0Rpcj1weXRob24zNC5QeU9iamVjdF9EaXIKKyAgUHlPYmplY3RfRm9ybWF0PXB5dGhvbjM0LlB5T2JqZWN0X0Zvcm1hdAorICBQeU9iamVjdF9GcmVlPXB5dGhvbjM0LlB5T2JqZWN0X0ZyZWUKKyAgUHlPYmplY3RfR0NfRGVsPXB5dGhvbjM0LlB5T2JqZWN0X0dDX0RlbAorICBQeU9iamVjdF9HQ19UcmFjaz1weXRob24zNC5QeU9iamVjdF9HQ19UcmFjaworICBQeU9iamVjdF9HQ19VblRyYWNrPXB5dGhvbjM0LlB5T2JqZWN0X0dDX1VuVHJhY2sKKyAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2VuZXJpY0dldEF0dHIKKyAgUHlPYmplY3RfR2VuZXJpY1NldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2VuZXJpY1NldEF0dHIKKyAgUHlPYmplY3RfR2V0QXR0cj1weXRob24zNC5QeU9iamVjdF9HZXRBdHRyCisgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmc9cHl0aG9uMzQuUHlPYmplY3RfR2V0QXR0clN0cmluZworICBQeU9iamVjdF9HZXRJdGVtPXB5dGhvbjM0LlB5T2JqZWN0X0dldEl0ZW0KKyAgUHlPYmplY3RfR2V0SXRlcj1weXRob24zNC5QeU9iamVjdF9HZXRJdGVyCisgIFB5T2JqZWN0X0hhc0F0dHI9cHl0aG9uMzQuUHlPYmplY3RfSGFzQXR0cgorICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKKyAgUHlPYmplY3RfSGFzaD1weXRob24zNC5QeU9iamVjdF9IYXNoCisgIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZD1weXRob24zNC5QeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQKKyAgUHlPYmplY3RfSW5pdD1weXRob24zNC5QeU9iamVjdF9Jbml0CisgIFB5T2JqZWN0X0luaXRWYXI9cHl0aG9uMzQuUHlPYmplY3RfSW5pdFZhcgorICBQeU9iamVjdF9Jc0luc3RhbmNlPXB5dGhvbjM0LlB5T2JqZWN0X0lzSW5zdGFuY2UKKyAgUHlPYmplY3RfSXNTdWJjbGFzcz1weXRob24zNC5QeU9iamVjdF9Jc1N1YmNsYXNzCisgIFB5T2JqZWN0X0lzVHJ1ZT1weXRob24zNC5QeU9iamVjdF9Jc1RydWUKKyAgUHlPYmplY3RfTGVuZ3RoPXB5dGhvbjM0LlB5T2JqZWN0X0xlbmd0aAorICBQeU9iamVjdF9NYWxsb2M9cHl0aG9uMzQuUHlPYmplY3RfTWFsbG9jCisgIFB5T2JqZWN0X05vdD1weXRob24zNC5QeU9iamVjdF9Ob3QKKyAgUHlPYmplY3RfUmVhbGxvYz1weXRob24zNC5QeU9iamVjdF9SZWFsbG9jCisgIFB5T2JqZWN0X1JlcHI9cHl0aG9uMzQuUHlPYmplY3RfUmVwcgorICBQeU9iamVjdF9SaWNoQ29tcGFyZT1weXRob24zNC5QeU9iamVjdF9SaWNoQ29tcGFyZQorICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2w9cHl0aG9uMzQuUHlPYmplY3RfUmljaENvbXBhcmVCb29sCisgIFB5T2JqZWN0X1NlbGZJdGVyPXB5dGhvbjM0LlB5T2JqZWN0X1NlbGZJdGVyCisgIFB5T2JqZWN0X1NldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfU2V0QXR0cgorICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X1NldEF0dHJTdHJpbmcKKyAgUHlPYmplY3RfU2V0SXRlbT1weXRob24zNC5QeU9iamVjdF9TZXRJdGVtCisgIFB5T2JqZWN0X1NpemU9cHl0aG9uMzQuUHlPYmplY3RfU2l6ZQorICBQeU9iamVjdF9TdHI9cHl0aG9uMzQuUHlPYmplY3RfU3RyCisgIFB5T2JqZWN0X1R5cGU9cHl0aG9uMzQuUHlPYmplY3RfVHlwZSBEQVRBCisgIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzPXB5dGhvbjM0LlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzCisgIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3M9cHl0aG9uMzQuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncworICBQeVByb3BlcnR5X1R5cGU9cHl0aG9uMzQuUHlQcm9wZXJ0eV9UeXBlIERBVEEKKyAgUHlSYW5nZUl0ZXJfVHlwZT1weXRob24zNC5QeVJhbmdlSXRlcl9UeXBlIERBVEEKKyAgUHlSYW5nZV9UeXBlPXB5dGhvbjM0LlB5UmFuZ2VfVHlwZSBEQVRBCisgIFB5UmV2ZXJzZWRfVHlwZT1weXRob24zNC5QeVJldmVyc2VkX1R5cGUgREFUQQorICBQeVNlcUl0ZXJfTmV3PXB5dGhvbjM0LlB5U2VxSXRlcl9OZXcKKyAgUHlTZXFJdGVyX1R5cGU9cHl0aG9uMzQuUHlTZXFJdGVyX1R5cGUgREFUQQorICBQeVNlcXVlbmNlX0NoZWNrPXB5dGhvbjM0LlB5U2VxdWVuY2VfQ2hlY2sKKyAgUHlTZXF1ZW5jZV9Db25jYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db25jYXQKKyAgUHlTZXF1ZW5jZV9Db250YWlucz1weXRob24zNC5QeVNlcXVlbmNlX0NvbnRhaW5zCisgIFB5U2VxdWVuY2VfQ291bnQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db3VudAorICBQeVNlcXVlbmNlX0RlbEl0ZW09cHl0aG9uMzQuUHlTZXF1ZW5jZV9EZWxJdGVtCisgIFB5U2VxdWVuY2VfRGVsU2xpY2U9cHl0aG9uMzQuUHlTZXF1ZW5jZV9EZWxTbGljZQorICBQeVNlcXVlbmNlX0Zhc3Q9cHl0aG9uMzQuUHlTZXF1ZW5jZV9GYXN0CisgIFB5U2VxdWVuY2VfR2V0SXRlbT1weXRob24zNC5QeVNlcXVlbmNlX0dldEl0ZW0KKyAgUHlTZXF1ZW5jZV9HZXRTbGljZT1weXRob24zNC5QeVNlcXVlbmNlX0dldFNsaWNlCisgIFB5U2VxdWVuY2VfSW49cHl0aG9uMzQuUHlTZXF1ZW5jZV9JbgorICBQeVNlcXVlbmNlX0luUGxhY2VDb25jYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0CisgIFB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdD1weXRob24zNC5QeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQKKyAgUHlTZXF1ZW5jZV9JbmRleD1weXRob24zNC5QeVNlcXVlbmNlX0luZGV4CisgIFB5U2VxdWVuY2VfTGVuZ3RoPXB5dGhvbjM0LlB5U2VxdWVuY2VfTGVuZ3RoCisgIFB5U2VxdWVuY2VfTGlzdD1weXRob24zNC5QeVNlcXVlbmNlX0xpc3QKKyAgUHlTZXF1ZW5jZV9SZXBlYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9SZXBlYXQKKyAgUHlTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2V0SXRlbQorICBQeVNlcXVlbmNlX1NldFNsaWNlPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2V0U2xpY2UKKyAgUHlTZXF1ZW5jZV9TaXplPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2l6ZQorICBQeVNlcXVlbmNlX1R1cGxlPXB5dGhvbjM0LlB5U2VxdWVuY2VfVHVwbGUKKyAgUHlTZXRJdGVyX1R5cGU9cHl0aG9uMzQuUHlTZXRJdGVyX1R5cGUgREFUQQorICBQeVNldF9BZGQ9cHl0aG9uMzQuUHlTZXRfQWRkCisgIFB5U2V0X0NsZWFyPXB5dGhvbjM0LlB5U2V0X0NsZWFyCisgIFB5U2V0X0NvbnRhaW5zPXB5dGhvbjM0LlB5U2V0X0NvbnRhaW5zCisgIFB5U2V0X0Rpc2NhcmQ9cHl0aG9uMzQuUHlTZXRfRGlzY2FyZAorICBQeVNldF9OZXc9cHl0aG9uMzQuUHlTZXRfTmV3CisgIFB5U2V0X1BvcD1weXRob24zNC5QeVNldF9Qb3AKKyAgUHlTZXRfU2l6ZT1weXRob24zNC5QeVNldF9TaXplCisgIFB5U2V0X1R5cGU9cHl0aG9uMzQuUHlTZXRfVHlwZSBEQVRBCisgIFB5U2xpY2VfR2V0SW5kaWNlcz1weXRob24zNC5QeVNsaWNlX0dldEluZGljZXMKKyAgUHlTbGljZV9HZXRJbmRpY2VzRXg9cHl0aG9uMzQuUHlTbGljZV9HZXRJbmRpY2VzRXgKKyAgUHlTbGljZV9OZXc9cHl0aG9uMzQuUHlTbGljZV9OZXcKKyAgUHlTbGljZV9UeXBlPXB5dGhvbjM0LlB5U2xpY2VfVHlwZSBEQVRBCisgIFB5U29ydFdyYXBwZXJfVHlwZT1weXRob24zNC5QeVNvcnRXcmFwcGVyX1R5cGUgREFUQQorICBQeVN0YXRlX0ZpbmRNb2R1bGU9cHl0aG9uMzQuUHlTdGF0ZV9GaW5kTW9kdWxlCisgIFB5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfQWRkTW9kdWxlCisgIFB5U3RhdGVfUmVtb3ZlTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfUmVtb3ZlTW9kdWxlCisgIFB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbT1weXRob24zNC5QeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW0KKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXc9cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcKKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlPXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZQorICBQeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW09cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtCisgIFB5U3VwZXJfVHlwZT1weXRob24zNC5QeVN1cGVyX1R5cGUgREFUQQorICBQeVN5c19BZGRXYXJuT3B0aW9uPXB5dGhvbjM0LlB5U3lzX0FkZFdhcm5PcHRpb24KKyAgUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGU9cHl0aG9uMzQuUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGUKKyAgUHlTeXNfRm9ybWF0U3RkZXJyPXB5dGhvbjM0LlB5U3lzX0Zvcm1hdFN0ZGVycgorICBQeVN5c19Gb3JtYXRTdGRvdXQ9cHl0aG9uMzQuUHlTeXNfRm9ybWF0U3Rkb3V0CisgIFB5U3lzX0dldE9iamVjdD1weXRob24zNC5QeVN5c19HZXRPYmplY3QKKyAgUHlTeXNfSGFzV2Fybk9wdGlvbnM9cHl0aG9uMzQuUHlTeXNfSGFzV2Fybk9wdGlvbnMKKyAgUHlTeXNfUmVzZXRXYXJuT3B0aW9ucz1weXRob24zNC5QeVN5c19SZXNldFdhcm5PcHRpb25zCisgIFB5U3lzX1NldEFyZ3Y9cHl0aG9uMzQuUHlTeXNfU2V0QXJndgorICBQeVN5c19TZXRBcmd2RXg9cHl0aG9uMzQuUHlTeXNfU2V0QXJndkV4CisgIFB5U3lzX1NldE9iamVjdD1weXRob24zNC5QeVN5c19TZXRPYmplY3QKKyAgUHlTeXNfU2V0UGF0aD1weXRob24zNC5QeVN5c19TZXRQYXRoCisgIFB5U3lzX1dyaXRlU3RkZXJyPXB5dGhvbjM0LlB5U3lzX1dyaXRlU3RkZXJyCisgIFB5U3lzX1dyaXRlU3Rkb3V0PXB5dGhvbjM0LlB5U3lzX1dyaXRlU3Rkb3V0CisgIFB5VGhyZWFkU3RhdGVfQ2xlYXI9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9DbGVhcgorICBQeVRocmVhZFN0YXRlX0RlbGV0ZT1weXRob24zNC5QeVRocmVhZFN0YXRlX0RlbGV0ZQorICBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQ9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50CisgIFB5VGhyZWFkU3RhdGVfR2V0PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfR2V0CisgIFB5VGhyZWFkU3RhdGVfR2V0RGljdD1weXRob24zNC5QeVRocmVhZFN0YXRlX0dldERpY3QKKyAgUHlUaHJlYWRTdGF0ZV9OZXc9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9OZXcKKyAgUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Yz1weXRob24zNC5QeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjCisgIFB5VGhyZWFkU3RhdGVfU3dhcD1weXRob24zNC5QeVRocmVhZFN0YXRlX1N3YXAKKyAgUHlUcmFjZUJhY2tfSGVyZT1weXRob24zNC5QeVRyYWNlQmFja19IZXJlCisgIFB5VHJhY2VCYWNrX1ByaW50PXB5dGhvbjM0LlB5VHJhY2VCYWNrX1ByaW50CisgIFB5VHJhY2VCYWNrX1R5cGU9cHl0aG9uMzQuUHlUcmFjZUJhY2tfVHlwZSBEQVRBCisgIFB5VHVwbGVJdGVyX1R5cGU9cHl0aG9uMzQuUHlUdXBsZUl0ZXJfVHlwZSBEQVRBCisgIFB5VHVwbGVfQ2xlYXJGcmVlTGlzdD1weXRob24zNC5QeVR1cGxlX0NsZWFyRnJlZUxpc3QKKyAgUHlUdXBsZV9HZXRJdGVtPXB5dGhvbjM0LlB5VHVwbGVfR2V0SXRlbQorICBQeVR1cGxlX0dldFNsaWNlPXB5dGhvbjM0LlB5VHVwbGVfR2V0U2xpY2UKKyAgUHlUdXBsZV9OZXc9cHl0aG9uMzQuUHlUdXBsZV9OZXcKKyAgUHlUdXBsZV9QYWNrPXB5dGhvbjM0LlB5VHVwbGVfUGFjaworICBQeVR1cGxlX1NldEl0ZW09cHl0aG9uMzQuUHlUdXBsZV9TZXRJdGVtCisgIFB5VHVwbGVfU2l6ZT1weXRob24zNC5QeVR1cGxlX1NpemUKKyAgUHlUdXBsZV9UeXBlPXB5dGhvbjM0LlB5VHVwbGVfVHlwZSBEQVRBCisgIFB5VHlwZV9DbGVhckNhY2hlPXB5dGhvbjM0LlB5VHlwZV9DbGVhckNhY2hlCisgIFB5VHlwZV9Gcm9tU3BlYz1weXRob24zNC5QeVR5cGVfRnJvbVNwZWMKKyAgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzPXB5dGhvbjM0LlB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcworICBQeVR5cGVfR2VuZXJpY0FsbG9jPXB5dGhvbjM0LlB5VHlwZV9HZW5lcmljQWxsb2MKKyAgUHlUeXBlX0dlbmVyaWNOZXc9cHl0aG9uMzQuUHlUeXBlX0dlbmVyaWNOZXcKKyAgUHlUeXBlX0dldEZsYWdzPXB5dGhvbjM0LlB5VHlwZV9HZXRGbGFncworICBQeVR5cGVfR2V0U2xvdD1weXRob24zNC5QeVR5cGVfR2V0U2xvdAorICBQeVR5cGVfSXNTdWJ0eXBlPXB5dGhvbjM0LlB5VHlwZV9Jc1N1YnR5cGUKKyAgUHlUeXBlX01vZGlmaWVkPXB5dGhvbjM0LlB5VHlwZV9Nb2RpZmllZAorICBQeVR5cGVfUmVhZHk9cHl0aG9uMzQuUHlUeXBlX1JlYWR5CisgIFB5VHlwZV9UeXBlPXB5dGhvbjM0LlB5VHlwZV9UeXBlIERBVEEKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZQorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZz1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZworICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kCisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbgorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kCisgIFB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24KKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZUl0ZXJfVHlwZT1weXRob24zNC5QeVVuaWNvZGVJdGVyX1R5cGUgREFUQQorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbgorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24KKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQKKyAgUHlVbmljb2RlX0FwcGVuZD1weXRob24zNC5QeVVuaWNvZGVfQXBwZW5kCisgIFB5VW5pY29kZV9BcHBlbmRBbmREZWw9cHl0aG9uMzQuUHlVbmljb2RlX0FwcGVuZEFuZERlbAorICBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNBU0NJSVN0cmluZworICBQeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0NoYXJtYXBTdHJpbmcKKyAgUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0CisgIFB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlCisgIFB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlX0FzRW5jb2RlZE9iamVjdAorICBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGU9cHl0aG9uMzQuUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGUKKyAgUHlVbmljb2RlX0FzTGF0aW4xU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0xhdGluMVN0cmluZworICBQeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmcKKyAgUHlVbmljb2RlX0FzVVRGMTZTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzVVRGMTZTdHJpbmcKKyAgUHlVbmljb2RlX0FzVVRGMzJTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzVVRGMzJTdHJpbmcKKyAgUHlVbmljb2RlX0FzVVRGOFN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNVVEY4U3RyaW5nCisgIFB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZworICBQeVVuaWNvZGVfQXNXaWRlQ2hhcj1weXRob24zNC5QeVVuaWNvZGVfQXNXaWRlQ2hhcgorICBQeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdD1weXRob24zNC5QeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdAorICBQeVVuaWNvZGVfQ29tcGFyZT1weXRob24zNC5QeVVuaWNvZGVfQ29tcGFyZQorICBQeVVuaWNvZGVfQ29uY2F0PXB5dGhvbjM0LlB5VW5pY29kZV9Db25jYXQKKyAgUHlVbmljb2RlX0NvbnRhaW5zPXB5dGhvbjM0LlB5VW5pY29kZV9Db250YWlucworICBQeVVuaWNvZGVfQ291bnQ9cHl0aG9uMzQuUHlVbmljb2RlX0NvdW50CisgIFB5VW5pY29kZV9EZWNvZGU9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZQorICBQeVVuaWNvZGVfRGVjb2RlQVNDSUk9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZUFTQ0lJCisgIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVDaGFybWFwCisgIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQ9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdAorICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZT1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZQorICBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVMYXRpbjEKKyAgUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGU9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUKKyAgUHlVbmljb2RlX0RlY29kZVVURjE2PXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEYxNgorICBQeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVVRGMzI9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjMyCisgIFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsCisgIFB5VW5pY29kZV9EZWNvZGVVVEY4PXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEY4CisgIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZT1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZQorICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXI9cHl0aG9uMzQuUHlVbmljb2RlX0ZTQ29udmVydGVyCisgIFB5VW5pY29kZV9GU0RlY29kZXI9cHl0aG9uMzQuUHlVbmljb2RlX0ZTRGVjb2RlcgorICBQeVVuaWNvZGVfRmluZD1weXRob24zNC5QeVVuaWNvZGVfRmluZAorICBQeVVuaWNvZGVfRm9ybWF0PXB5dGhvbjM0LlB5VW5pY29kZV9Gb3JtYXQKKyAgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdAorICBQeVVuaWNvZGVfRnJvbUZvcm1hdD1weXRob24zNC5QeVVuaWNvZGVfRnJvbUZvcm1hdAorICBQeVVuaWNvZGVfRnJvbUZvcm1hdFY9cHl0aG9uMzQuUHlVbmljb2RlX0Zyb21Gb3JtYXRWCisgIFB5VW5pY29kZV9Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tT2JqZWN0CisgIFB5VW5pY29kZV9Gcm9tT3JkaW5hbD1weXRob24zNC5QeVVuaWNvZGVfRnJvbU9yZGluYWwKKyAgUHlVbmljb2RlX0Zyb21TdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0Zyb21TdHJpbmcKKyAgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZQorICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyPXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tV2lkZUNoYXIKKyAgUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nCisgIFB5VW5pY29kZV9HZXRTaXplPXB5dGhvbjM0LlB5VW5pY29kZV9HZXRTaXplCisgIFB5VW5pY29kZV9Jc0lkZW50aWZpZXI9cHl0aG9uMzQuUHlVbmljb2RlX0lzSWRlbnRpZmllcgorICBQeVVuaWNvZGVfSm9pbj1weXRob24zNC5QeVVuaWNvZGVfSm9pbgorICBQeVVuaWNvZGVfUGFydGl0aW9uPXB5dGhvbjM0LlB5VW5pY29kZV9QYXJ0aXRpb24KKyAgUHlVbmljb2RlX1JQYXJ0aXRpb249cHl0aG9uMzQuUHlVbmljb2RlX1JQYXJ0aXRpb24KKyAgUHlVbmljb2RlX1JTcGxpdD1weXRob24zNC5QeVVuaWNvZGVfUlNwbGl0CisgIFB5VW5pY29kZV9SZXBsYWNlPXB5dGhvbjM0LlB5VW5pY29kZV9SZXBsYWNlCisgIFB5VW5pY29kZV9SZXNpemU9cHl0aG9uMzQuUHlVbmljb2RlX1Jlc2l6ZQorICBQeVVuaWNvZGVfUmljaENvbXBhcmU9cHl0aG9uMzQuUHlVbmljb2RlX1JpY2hDb21wYXJlCisgIFB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZworICBQeVVuaWNvZGVfU3BsaXQ9cHl0aG9uMzQuUHlVbmljb2RlX1NwbGl0CisgIFB5VW5pY29kZV9TcGxpdGxpbmVzPXB5dGhvbjM0LlB5VW5pY29kZV9TcGxpdGxpbmVzCisgIFB5VW5pY29kZV9UYWlsbWF0Y2g9cHl0aG9uMzQuUHlVbmljb2RlX1RhaWxtYXRjaAorICBQeVVuaWNvZGVfVHJhbnNsYXRlPXB5dGhvbjM0LlB5VW5pY29kZV9UcmFuc2xhdGUKKyAgUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXA9cHl0aG9uMzQuUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAKKyAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcKKyAgUHlVbmljb2RlX0RlY29kZVVURjc9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjcKKyAgUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsCisgIFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQ9cHl0aG9uMzQuUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdAorICBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZworICBQeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWw9cHl0aG9uMzQuUHlVbmljb2RlX0ludGVybkltbW9ydGFsCisgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlPXB5dGhvbjM0LlB5VW5pY29kZV9JbnRlcm5JblBsYWNlCisgIFB5VW5pY29kZV9UeXBlPXB5dGhvbjM0LlB5VW5pY29kZV9UeXBlIERBVEEKKyAgUHlXZWFrcmVmX0dldE9iamVjdD1weXRob24zNC5QeVdlYWtyZWZfR2V0T2JqZWN0IERBVEEKKyAgUHlXZWFrcmVmX05ld1Byb3h5PXB5dGhvbjM0LlB5V2Vha3JlZl9OZXdQcm94eQorICBQeVdlYWtyZWZfTmV3UmVmPXB5dGhvbjM0LlB5V2Vha3JlZl9OZXdSZWYKKyAgUHlXcmFwcGVyRGVzY3JfVHlwZT1weXRob24zNC5QeVdyYXBwZXJEZXNjcl9UeXBlIERBVEEKKyAgUHlXcmFwcGVyX05ldz1weXRob24zNC5QeVdyYXBwZXJfTmV3CisgIFB5WmlwX1R5cGU9cHl0aG9uMzQuUHlaaXBfVHlwZSBEQVRBCisgIFB5X0FkZFBlbmRpbmdDYWxsPXB5dGhvbjM0LlB5X0FkZFBlbmRpbmdDYWxsCisgIFB5X0F0RXhpdD1weXRob24zNC5QeV9BdEV4aXQKKyAgUHlfQnVpbGRWYWx1ZT1weXRob24zNC5QeV9CdWlsZFZhbHVlCisgIFB5X0NvbXBpbGVTdHJpbmc9cHl0aG9uMzQuUHlfQ29tcGlsZVN0cmluZworICBQeV9EZWNSZWY9cHl0aG9uMzQuUHlfRGVjUmVmCisgIFB5X0VuZEludGVycHJldGVyPXB5dGhvbjM0LlB5X0VuZEludGVycHJldGVyCisgIFB5X0V4aXQ9cHl0aG9uMzQuUHlfRXhpdAorICBQeV9GYXRhbEVycm9yPXB5dGhvbjM0LlB5X0ZhdGFsRXJyb3IKKyAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKKyAgUHlfRmluYWxpemU9cHl0aG9uMzQuUHlfRmluYWxpemUKKyAgUHlfR2V0QnVpbGRJbmZvPXB5dGhvbjM0LlB5X0dldEJ1aWxkSW5mbworICBQeV9HZXRDb21waWxlcj1weXRob24zNC5QeV9HZXRDb21waWxlcgorICBQeV9HZXRDb3B5cmlnaHQ9cHl0aG9uMzQuUHlfR2V0Q29weXJpZ2h0CisgIFB5X0dldEV4ZWNQcmVmaXg9cHl0aG9uMzQuUHlfR2V0RXhlY1ByZWZpeAorICBQeV9HZXRQYXRoPXB5dGhvbjM0LlB5X0dldFBhdGgKKyAgUHlfR2V0UGxhdGZvcm09cHl0aG9uMzQuUHlfR2V0UGxhdGZvcm0KKyAgUHlfR2V0UHJlZml4PXB5dGhvbjM0LlB5X0dldFByZWZpeAorICBQeV9HZXRQcm9ncmFtRnVsbFBhdGg9cHl0aG9uMzQuUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoCisgIFB5X0dldFByb2dyYW1OYW1lPXB5dGhvbjM0LlB5X0dldFByb2dyYW1OYW1lCisgIFB5X0dldFB5dGhvbkhvbWU9cHl0aG9uMzQuUHlfR2V0UHl0aG9uSG9tZQorICBQeV9HZXRSZWN1cnNpb25MaW1pdD1weXRob24zNC5QeV9HZXRSZWN1cnNpb25MaW1pdAorICBQeV9HZXRWZXJzaW9uPXB5dGhvbjM0LlB5X0dldFZlcnNpb24KKyAgUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKKyAgUHlfSW5jUmVmPXB5dGhvbjM0LlB5X0luY1JlZgorICBQeV9Jbml0aWFsaXplPXB5dGhvbjM0LlB5X0luaXRpYWxpemUKKyAgUHlfSW5pdGlhbGl6ZUV4PXB5dGhvbjM0LlB5X0luaXRpYWxpemVFeAorICBQeV9Jc0luaXRpYWxpemVkPXB5dGhvbjM0LlB5X0lzSW5pdGlhbGl6ZWQKKyAgUHlfTWFpbj1weXRob24zNC5QeV9NYWluCisgIFB5X01ha2VQZW5kaW5nQ2FsbHM9cHl0aG9uMzQuUHlfTWFrZVBlbmRpbmdDYWxscworICBQeV9OZXdJbnRlcnByZXRlcj1weXRob24zNC5QeV9OZXdJbnRlcnByZXRlcgorICBQeV9SZXByRW50ZXI9cHl0aG9uMzQuUHlfUmVwckVudGVyCisgIFB5X1JlcHJMZWF2ZT1weXRob24zNC5QeV9SZXByTGVhdmUKKyAgUHlfU2V0UHJvZ3JhbU5hbWU9cHl0aG9uMzQuUHlfU2V0UHJvZ3JhbU5hbWUKKyAgUHlfU2V0UHl0aG9uSG9tZT1weXRob24zNC5QeV9TZXRQeXRob25Ib21lCisgIFB5X1NldFJlY3Vyc2lvbkxpbWl0PXB5dGhvbjM0LlB5X1NldFJlY3Vyc2lvbkxpbWl0CisgIFB5X1N5bXRhYmxlU3RyaW5nPXB5dGhvbjM0LlB5X1N5bXRhYmxlU3RyaW5nCisgIFB5X1ZhQnVpbGRWYWx1ZT1weXRob24zNC5QeV9WYUJ1aWxkVmFsdWUKKyAgX1B5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zNC5fUHlFcnJfQmFkSW50ZXJuYWxDYWxsCisgIF9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQ9cHl0aG9uMzQuX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVAorICBfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVD1weXRob24zNC5fUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVAorICBfUHlPYmplY3RfR0NfTWFsbG9jPXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19NYWxsb2MKKyAgX1B5T2JqZWN0X0dDX05ldz1weXRob24zNC5fUHlPYmplY3RfR0NfTmV3CisgIF9QeU9iamVjdF9HQ19OZXdWYXI9cHl0aG9uMzQuX1B5T2JqZWN0X0dDX05ld1ZhcgorICBfUHlPYmplY3RfR0NfUmVzaXplPXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19SZXNpemUKKyAgX1B5T2JqZWN0X05ldz1weXRob24zNC5fUHlPYmplY3RfTmV3CisgIF9QeU9iamVjdF9OZXdWYXI9cHl0aG9uMzQuX1B5T2JqZWN0X05ld1ZhcgorICBfUHlTdGF0ZV9BZGRNb2R1bGU9cHl0aG9uMzQuX1B5U3RhdGVfQWRkTW9kdWxlCisgIF9QeVRocmVhZFN0YXRlX0luaXQ9cHl0aG9uMzQuX1B5VGhyZWFkU3RhdGVfSW5pdAorICBfUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYz1weXRob24zNC5fUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYworICBfUHlUcmFzaF9kZWxldGVfbGF0ZXI9cHl0aG9uMzQuX1B5VHJhc2hfZGVsZXRlX2xhdGVyIERBVEEKKyAgX1B5VHJhc2hfZGVsZXRlX25lc3Rpbmc9cHl0aG9uMzQuX1B5VHJhc2hfZGVsZXRlX25lc3RpbmcgREFUQQorICBfUHlUcmFzaF9kZXBvc2l0X29iamVjdD1weXRob24zNC5fUHlUcmFzaF9kZXBvc2l0X29iamVjdAorICBfUHlUcmFzaF9kZXN0cm95X2NoYWluPXB5dGhvbjM0Ll9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW4KKyAgX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZT1weXRob24zNC5fUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIERBVEEKKyAgX1B5V2Vha3JlZl9Qcm94eVR5cGU9cHl0aG9uMzQuX1B5V2Vha3JlZl9Qcm94eVR5cGUgREFUQQorICBfUHlXZWFrcmVmX1JlZlR5cGU9cHl0aG9uMzQuX1B5V2Vha3JlZl9SZWZUeXBlIERBVEEKKyAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzQuX1B5X0J1aWxkVmFsdWVfU2l6ZVQKKyAgX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQ9cHl0aG9uMzQuX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQgREFUQQorICBfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsPXB5dGhvbjM0Ll9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwKKyAgX1B5X0RlYWxsb2M9cHl0aG9uMzQuX1B5X0RlYWxsb2MKKyAgX1B5X0VsbGlwc2lzT2JqZWN0PXB5dGhvbjM0Ll9QeV9FbGxpcHNpc09iamVjdCBEQVRBCisgIF9QeV9GYWxzZVN0cnVjdD1weXRob24zNC5fUHlfRmFsc2VTdHJ1Y3QgREFUQQorICBfUHlfTm9uZVN0cnVjdD1weXRob24zNC5fUHlfTm9uZVN0cnVjdCBEQVRBCisgIF9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdD1weXRob24zNC5fUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QgREFUQQorICBfUHlfU3dhcHBlZE9wPXB5dGhvbjM0Ll9QeV9Td2FwcGVkT3AgREFUQQorICBfUHlfVHJ1ZVN0cnVjdD1weXRob24zNC5fUHlfVHJ1ZVN0cnVjdCBEQVRBCisgIF9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzQuX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVAorICBfUHlBcmdfUGFyc2VfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1BhcnNlX1NpemVUCisgIF9QeUFyZ19QYXJzZVR1cGxlX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19QYXJzZVR1cGxlX1NpemVUCisgIF9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAorICBfUHlBcmdfVmFQYXJzZV9TaXplVD1weXRob24zNC5fUHlBcmdfVmFQYXJzZV9TaXplVAorICBfUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCisgIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM0Ll9QeV9CdWlsZFZhbHVlX1NpemVUCmRpZmYgLS1naXQgYS9QQy9weXRob24zLm1hayBiL1BDL3B5dGhvbjMubWFrCmluZGV4IDljZjE4MDcuLmZiOGU3YWEgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbjMubWFrCisrKyBiL1BDL3B5dGhvbjMubWFrCkBAIC0xLDE0ICsxLDE0IEBACi0kKE91dERpcilweXRob24zLmRsbDoJcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzNzdHViLmxpYgotCWNsIC9MRCAvRmUkKE91dERpcilweXRob24zLmRsbCBweXRob24zZGxsLmMgcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzNzdHViLmxpYgorJChPdXREaXIpcHl0aG9uMy5kbGw6CXB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIKKwljbCAvTEQgL0ZlJChPdXREaXIpcHl0aG9uMy5kbGwgcHl0aG9uM2RsbC5jIHB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIKIAotJChPdXREaXIpcHl0aG9uMzNzdHViLmxpYjoJcHl0aG9uMzNzdHViLmRlZgotCWxpYiAvZGVmOnB5dGhvbjMzc3R1Yi5kZWYgL291dDokKE91dERpcilweXRob24zM3N0dWIubGliIC9NQUNISU5FOiQoTUFDSElORSkKKyQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWI6CXB5dGhvbjM0c3R1Yi5kZWYKKwlsaWIgL2RlZjpweXRob24zNHN0dWIuZGVmIC9vdXQ6JChPdXREaXIpcHl0aG9uMzRzdHViLmxpYiAvTUFDSElORTokKE1BQ0hJTkUpCiAKIGNsZWFuOgogCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMuZGxsIGRlbCAkKE91dERpcilweXRob24zLmRsbAogCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMubGliIGRlbCAkKE91dERpcilweXRob24zLmxpYgotCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIgZGVsICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIKKwlJRiBFWElTVCAkKE91dERpcilweXRob24zNHN0dWIubGliIGRlbCAkKE91dERpcilweXRob24zNHN0dWIubGliCiAJSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMy5leHAgZGVsICQoT3V0RGlyKXB5dGhvbjMuZXhwCi0JSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMzNzdHViLmV4cCBkZWwgJChPdXREaXIpcHl0aG9uMzNzdHViLmV4cAorCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5leHAgZGVsICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5leHAKIAogcmVidWlsZDogY2xlYW4gJChPdXREaXIpcHl0aG9uMy5kbGwKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMzZ2VuLnB5IGIvUEMvcHl0aG9uMzRnZW4ucHkKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gUEMvcHl0aG9uMzNnZW4ucHkKcmVuYW1lIHRvIFBDL3B5dGhvbjM0Z2VuLnB5CmluZGV4IDIxYjlmNTYuLjE4MGNlMTEgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbjMzZ2VuLnB5CisrKyBiL1BDL3B5dGhvbjM0Z2VuLnB5CkBAIC0xLDkgKzEsOSBAQAotIyBHZW5lcmF0ZSBweXRob24zM3N0dWIuZGVmIG91dCBvZiBweXRob24zLmRlZgorIyBHZW5lcmF0ZSBweXRob24zNHN0dWIuZGVmIG91dCBvZiBweXRob24zLmRlZgogIyBUaGUgcmVndWxhciBpbXBvcnQgbGlicmFyeSBjYW5ub3QgYmUgdXNlZCwKICMgc2luY2UgaXQgZG9lc24ndCBwcm92aWRlIHRoZSByaWdodCBzeW1ib2xzIGZvcgogIyBkYXRhIGZvcndhcmRpbmcKLW91dCA9IG9wZW4oInB5dGhvbjMzc3R1Yi5kZWYiLCAidyIpCi1vdXQud3JpdGUoJ0xJQlJBUlkgInB5dGhvbjMzIlxuJykKK291dCA9IG9wZW4oInB5dGhvbjM0c3R1Yi5kZWYiLCAidyIpCitvdXQud3JpdGUoJ0xJQlJBUlkgInB5dGhvbjM0IlxuJykKIG91dC53cml0ZSgnRVhQT1JUU1xuJykKIAogaW5wID0gb3BlbigicHl0aG9uMy5kZWYiKQpAQCAtMTQsNyArMTQsNyBAQAogYXNzZXJ0IGxpbmUuc3RyaXAoKT09J0VYUE9SVFMnCiAKIGZvciBsaW5lIGluIGlucDoKLSAgICAjIFNZTTE9cHl0aG9uMzMuU1lNMlsgREFUQV0KKyAgICAjIFNZTTE9cHl0aG9uMzQuU1lNMlsgREFUQV0KICAgICBoZWFkLCB0YWlsID0gbGluZS5zcGxpdCgnLicpCiAgICAgaWYgJ0RBVEEnIGluIHRhaWw6CiAgICAgICAgIHN5bWJvbCwgdGFpbCA9IHRhaWwuc3BsaXQoJyAnKQpkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMzNzdHViLmRlZiBiL1BDL3B5dGhvbjM0c3R1Yi5kZWYKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gUEMvcHl0aG9uMzNzdHViLmRlZgpyZW5hbWUgdG8gUEMvcHl0aG9uMzRzdHViLmRlZgppbmRleCBkYjFhNTQ2Li4zMDc0Y2YzIDEwMDY0NAotLS0gYS9QQy9weXRob24zM3N0dWIuZGVmCisrKyBiL1BDL3B5dGhvbjM0c3R1Yi5kZWYKQEAgLTEsNCArMSw0IEBACi1MSUJSQVJZICJweXRob24zMyIKK0xJQlJBUlkgInB5dGhvbjM0IgogRVhQT1JUUwogUHlBcmdfUGFyc2UKIFB5QXJnX1BhcnNlVHVwbGUKQEAgLTM3LDYgKzM3LDcgQEAKIFB5Q0Z1bmN0aW9uX0dldEZsYWdzCiBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbgogUHlDRnVuY3Rpb25fR2V0U2VsZgorUHlDRnVuY3Rpb25fTmV3CiBQeUNGdW5jdGlvbl9OZXdFeAogUHlDRnVuY3Rpb25fVHlwZQogUHlDYWxsSXRlcl9OZXcKQEAgLTUxNyw2ICs1MTgsNyBAQAogUHlUeXBlX0dlbmVyaWNBbGxvYwogUHlUeXBlX0dlbmVyaWNOZXcKIFB5VHlwZV9HZXRGbGFncworUHlUeXBlX0dldFNsb3QKIFB5VHlwZV9Jc1N1YnR5cGUKIFB5VHlwZV9Nb2RpZmllZAogUHlUeXBlX1JlYWR5CmRpZmYgLS1naXQgYS9QQy9yZWFkbWUudHh0IGIvUEMvcmVhZG1lLnR4dAppbmRleCBmZGMwOWFiLi42MGYyMzFlIDEwMDY0NAotLS0gYS9QQy9yZWFkbWUudHh0CisrKyBiL1BDL3JlYWRtZS50eHQKQEAgLTc5LDE5ICs3OSw2IEBACiBUaGUgc3ViZGlyZWN0b3JpZXMgVkM2LCBWUzcuMSBhbmQgVlM4LjAgY29udGFpbiBsZWdhY3kgc3VwcG9ydCBvbGRlcgogdmVyc2lvbnMgb2YgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uIFNlZSBQQ2J1aWxkL3JlYWRtZS50eHQuCiAKLUVNWCBkZXZlbG9wbWVudCB0b29scyBmb3IgT1MvMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVNlZSBvczJlbXgvcmVhZG1lLnR4dC4gVGhpcyBwbGF0Zm9ybSBpcyBtYWludGFpbmVkIGJ5IEFuZHJldyBNYWNJbnR5cmUuCi0KLUlCTSBWaXN1YWxBZ2UgQy9DKysgZm9yIE9TLzIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotU2VlIG9zMnZhY3BwL3JlYWRtZS50eHQuICBUaGlzIHBsYXRmb3JtIGlzIHN1cHBvcnRlZCBieSBKZWZmIFJ1c2guCi0KLU5PVEU6IFN1cHBvcnQgZm9yIG9zMnZhY3BwIG1heSBiZSBkcm9wcGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4gUGxlYXNlIG1vdmUKLSAgICAgIHRvIEVNWC4KLQogTm90ZSBmb3IgV2luZG93cyAzLnggYW5kIERPUyB1c2VycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9QQy93OXhwb3Blbi5jIGIvUEMvdzl4cG9wZW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM5NzhkZC4uMDAwMDAwMAotLS0gYS9QQy93OXhwb3Blbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiB3OXhwb3Blbi5jCi0gKgotICogU2VydmVzIGFzIGFuIGludGVybWVkaWF0ZSBzdHViIFdpbjMyIGNvbnNvbGUgYXBwbGljYXRpb24gdG8KLSAqIGF2b2lkIGEgaGFuZ2luZyBwaXBlIHdoZW4gcmVkaXJlY3RpbmcgMTYtYml0IGNvbnNvbGUgYmFzZWQKLSAqIHByb2dyYW1zIChpbmNsdWRpbmcgTVMtRE9TIGNvbnNvbGUgYmFzZWQgcHJvZ3JhbXMgYW5kIGJhdGNoCi0gKiBmaWxlcykgb24gV2luZG93IDk1IGFuZCBXaW5kb3dzIDk4LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyB0byBiZSBsYXVuY2hlZCB3aXRoIHJlZGlyZWN0ZWQgc3RhbmRhcmQKLSAqIGhhbmRsZXMuIEl0IHdpbGwgbGF1bmNoIHRoZSBjb21tYW5kIGxpbmUgc3BlY2lmaWVkIDE2LWJpdAotICogY29uc29sZSBiYXNlZCBhcHBsaWNhdGlvbiBpbiB0aGUgc2FtZSBjb25zb2xlLCBmb3J3YXJkaW5nCi0gKiBpdHMgb3duIHJlZGlyZWN0ZWQgc3RhbmRhcmQgaGFuZGxlcyB0byB0aGUgMTYtYml0IGNoaWxkLgotCi0gKiBBS0Egc29sdXRpb24gdG8gdGhlIHByb2JsZW0gZGVzY3JpYmVkIGluIEtCOiBRMTUwOTU2LgotICovICAgIAotCi0jZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4gIC8qIGZvciBtYWxsb2MgYW5kIGl0cyBmcmllbmRzICovCi0KLWNvbnN0IGNoYXIgKnVzYWdlID0KLSJUaGlzIHByb2dyYW0gaXMgdXNlZCBieSBQeXRob24ncyBvcy5wb3BlbiBmdW5jdGlvblxuIgotInRvIHdvcmsgYXJvdW5kIGEgbGltaXRhdGlvbiBpbiBXaW5kb3dzIDk1Lzk4LiAgSXQgaXNcbiIKLSJub3QgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIHN0YW5kLWFsb25lIHByb2dyYW0uIjsKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgICBCT09MIGJSZXQ7Ci0gICAgU1RBUlRVUElORk8gc2k7Ci0gICAgUFJPQ0VTU19JTkZPUk1BVElPTiBwaTsKLSAgICBEV09SRCBleGl0X2NvZGU9MDsKLSAgICBzaXplX3QgY21kbGVuID0gMDsKLSAgICBpbnQgaTsKLSAgICBjaGFyICpjbWRsaW5lLCAqY21kbGluZWZpbGw7Ci0KLSAgICBpZiAoYXJnYyA8IDIpIHsKLSAgICAgICAgaWYgKEdldEZpbGVUeXBlKEdldFN0ZEhhbmRsZShTVERfSU5QVVRfSEFORExFKSk9PUZJTEVfVFlQRV9DSEFSKQotICAgICAgICAgICAgLyogQXR0YWNoZWQgdG8gYSBjb25zb2xlLCBhbmQgdGhlcmVmb3JlIG5vdCBleGVjdXRlZCBieSBQeXRob24KLSAgICAgICAgICAgICAgIERpc3BsYXkgYSBtZXNzYWdlIGJveCBmb3IgdGhlIGlucXVpc2l0aXZlIHVzZXIKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBNZXNzYWdlQm94KE5VTEwsIHVzYWdlLCBhcmd2WzBdLCBNQl9PSyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogRWVlayAtIGV4ZWN1dGVkIGJ5IFB5dGhvbiwgYnV0IGFyZ3MgYXJlIHNjcmV3ZWQhCi0gICAgICAgICAgICAgICBXcml0ZSBhbiBlcnJvciBtZXNzYWdlIHRvIHN0ZG91dCBzbyB0aGVyZSBpcyBhdAotICAgICAgICAgICAgICAgbGVhc3Qgc29tZSBjbHVlIGZvciB0aGUgZW5kIHVzZXIgd2hlbiBpdCBhcHBlYXJzCi0gICAgICAgICAgICAgICBpbiB0aGVpciBvdXRwdXQuCi0gICAgICAgICAgICAgICBBIG1lc3NhZ2UgYm94IHdvdWxkIGJlIGhpZGRlbiBhbmQgYmxvY2tzIHRoZSBhcHAuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiSW50ZXJuYWwgcG9wZW4gZXJyb3IgLSBubyBhcmdzIHNwZWNpZmllZFxuJXNcbiIsIHVzYWdlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgLyogQnVpbGQgdXAgdGhlIGNvbW1hbmQtbGluZSBmcm9tIHRoZSBhcmdzLgotICAgICAgIEFyZ3Mgd2l0aCBhIHNwYWNlIGFyZSBxdW90ZWQsIGV4aXN0aW5nIHF1b3RlcyBhcmUgZXNjYXBlZC4KLSAgICAgICBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgY2FsY3VsYXRpbmcgdGhlIGJ1ZmZlciBzaXplLCB3ZSBhc3N1bWUKLSAgICAgICBldmVyeSBjaGFyYWN0ZXIgaXMgYSBxdW90ZSAtIGllLCB3ZSBhbGxvY2F0ZSBkb3VibGUgd2hhdCB3ZSBuZWVkCi0gICAgICAgaW4gdGhlIHdvcnN0IGNhc2UuICBBcyB0aGlzIGlzIG9ubHkgZG91YmxlIHRoZSBjb21tYW5kIGxpbmUgcGFzc2VkCi0gICAgICAgdG8gdXMsIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhpcyBpcyByZWFzb25hYmx5IHNtYWxsLCBzbyB0aGUgdG90YWwgCi0gICAgICAgYWxsb2NhdGlvbiB3aWxsIGFsbW9zdCBhbHdheXMgYmUgPCA1MTIgYnl0ZXMuCi0gICAgKi8KLSAgICBmb3IgKGk9MTtpPGFyZ2M7aSsrKQotICAgICAgICBjbWRsZW4gKz0gc3RybGVuKGFyZ3ZbaV0pKjIgKyAzOyAvKiBvbmUgc3BhY2UsIG1heWJlIDIgcXVvdGVzICovCi0gICAgY21kbGluZSA9IGNtZGxpbmVmaWxsID0gKGNoYXIgKiltYWxsb2MoY21kbGVuKzEpOwotICAgIGlmIChjbWRsaW5lID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBmb3IgKGk9MTtpPGFyZ2M7aSsrKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmFyZ2xvb2s7Ci0gICAgICAgIGludCBiUXVvdGUgPSBzdHJjaHIoYXJndltpXSwgJyAnKSAhPSBOVUxMOwotICAgICAgICBpZiAoYlF1b3RlKQotICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnIic7Ci0gICAgICAgIC8qIGVzY2FwZSBxdW90ZXMgKi8KLSAgICAgICAgZm9yIChhcmdsb29rPWFyZ3ZbaV07KmFyZ2xvb2s7YXJnbG9vaysrKSB7Ci0gICAgICAgICAgICBpZiAoKmFyZ2xvb2s9PSciJykKLSAgICAgICAgICAgICAgICAqY21kbGluZWZpbGwrKyA9ICdcXCc7Ci0gICAgICAgICAgICAqY21kbGluZWZpbGwrKyA9ICphcmdsb29rOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiUXVvdGUpCi0gICAgICAgICAgICAqY21kbGluZWZpbGwrKyA9ICciJzsKLSAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnICc7Ci0gICAgfQotICAgICpjbWRsaW5lZmlsbCA9ICdcMCc7Ci0KLSAgICAvKiBNYWtlIGNoaWxkIHByb2Nlc3MgdXNlIHRoaXMgYXBwJ3Mgc3RhbmRhcmQgZmlsZXMuICovCi0gICAgWmVyb01lbW9yeSgmc2ksIHNpemVvZiBzaSk7Ci0gICAgc2kuY2IgPSBzaXplb2Ygc2k7Ci0gICAgc2kuZHdGbGFncyA9IFNUQVJURl9VU0VTVERIQU5ETEVTOwotICAgIHNpLmhTdGRJbnB1dCA9IEdldFN0ZEhhbmRsZShTVERfSU5QVVRfSEFORExFKTsKLSAgICBzaS5oU3RkT3V0cHV0ID0gR2V0U3RkSGFuZGxlKFNURF9PVVRQVVRfSEFORExFKTsKLSAgICBzaS5oU3RkRXJyb3IgPSBHZXRTdGRIYW5kbGUoU1REX0VSUk9SX0hBTkRMRSk7Ci0KLSAgICBiUmV0ID0gQ3JlYXRlUHJvY2VzcygKLSAgICAgICAgTlVMTCwgY21kbGluZSwKLSAgICAgICAgTlVMTCwgTlVMTCwKLSAgICAgICAgVFJVRSwgMCwKLSAgICAgICAgTlVMTCwgTlVMTCwKLSAgICAgICAgJnNpLCAmcGkKLSAgICAgICAgKTsKLQotICAgIGZyZWUoY21kbGluZSk7Ci0KLSAgICBpZiAoYlJldCkgewotICAgICAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdChwaS5oUHJvY2VzcywgSU5GSU5JVEUpICE9IFdBSVRfRkFJTEVEKSB7Ci0JICAgIEdldEV4aXRDb2RlUHJvY2VzcyhwaS5oUHJvY2VzcywgJmV4aXRfY29kZSk7Ci0JfQotICAgICAgICBDbG9zZUhhbmRsZShwaS5oUHJvY2Vzcyk7Ci0gICAgICAgIENsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOwotICAgICAgICByZXR1cm4gZXhpdF9jb2RlOwotICAgIH0KLQotICAgIHJldHVybiAxOwotfQpkaWZmIC0tZ2l0IGEvUEMvd2lucmVnLmMgYi9QQy93aW5yZWcuYwppbmRleCAzYjk2OTNjLi41NjNhM2ViIDEwMDY0NAotLS0gYS9QQy93aW5yZWcuYworKysgYi9QQy93aW5yZWcuYwpAQCAtOTM3LDcgKzkzNyw3IEBACiAgICAgICAgICAgICAgICAgd2NoYXJfdCAqZGF0YSA9ICh3Y2hhcl90ICopcmV0RGF0YUJ1ZjsKICAgICAgICAgICAgICAgICBpbnQgbGVuID0gcmV0RGF0YVNpemUgLyAyOwogICAgICAgICAgICAgICAgIGludCBzID0gY291bnRTdHJpbmdzKGRhdGEsIGxlbik7Ci0gICAgICAgICAgICAgICAgd2NoYXJfdCAqKnN0ciA9ICh3Y2hhcl90ICoqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCAqKSpzKTsKKyAgICAgICAgICAgICAgICB3Y2hhcl90ICoqc3RyID0gKHdjaGFyX3QgKiopUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90ICopKnMpOwogICAgICAgICAgICAgICAgIGlmIChzdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAKQEAgLTk1OCw3ICs5NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihzdHJbaW5kZXhdLCBsZW4pKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoc3RyKTsKIAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTc5Myw5ICsxNzkzLDkgQEAKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkhLRVlUeXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopJlB5SEtFWV9UeXBlKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9JTkNSRUYoUHlFeGNfV2luZG93c0Vycm9yKTsKKyAgICBQeV9JTkNSRUYoUHlFeGNfT1NFcnJvcik7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJlcnJvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvcikgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvcikgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBBZGQgdGhlIHJlbGV2YW50IGNvbnN0YW50cyAqLwpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qIGIvUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qCnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvagpyZW5hbWUgdG8gUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qCmluZGV4IGQxYWZlMjIuLmQwZWU3MmYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvagorKysgYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2oKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CkBAIC0zNSwxMDQgKzM1LDk1IEBACiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KICAgPC9JdGVtR3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+e0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH08L1Byb2plY3RHdWlkPgotICAgIDxSb290TmFtZXNwYWNlPnc5eHBvcGVuPC9Sb290TmFtZXNwYWNlPgorICAgIDxQcm9qZWN0R3VpZD57RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X292ZXJsYXBwZWQ8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CiAgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CiAgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KQEAgLTE1OSwxMjcgKzE1MCw4MyBAQAogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG92ZXJsYXBwZWQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2ouZmlsdGVycwpzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBQQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ouZmlsdGVycwpyZW5hbWUgdG8gUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZGVjNjdhZC4uNzhkZTg5NSAxMDA2NDQKLS0tIGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qLmZpbHRlcnMKQEAgLTIsMTEgKzIsMTEgQEAKIDxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cD4KICAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57YWJjMmRmZmQtM2YyYS00N2JkLWI4OWItMDMxNGM5OWVmMjFlfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2ZjY3YzhkYi03ZGU3LTQ3MTQtYTk2Ny0yYjBkNGJjNzFmMmV9PC9VbmlxdWVJZGVudGlmaWVyPgogICAgIDwvRmlsdGVyPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xvdmVybGFwcGVkLmMiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ogYi9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2oKaW5kZXggMzkyZGFkMS4uZWQzNWQ1YiAxMDA2NDQKLS0tIGEvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvagpAQCAtMjQzLDcgKzI0Myw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuaCIgLz4KICAgPC9JdGVtR3JvdXA+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ouZmlsdGVycyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCmluZGV4IDg4ZTVmZGIuLmRjZTc3YzkgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCkBAIC0zMCw5ICszMCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVccm93LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxzcWxpdGVjb21wYXQuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zc2wudmN4cHJvaiBiL1BDYnVpbGQvX3NzbC52Y3hwcm9qCmluZGV4IGFlNzFkMTkuLjczNzg3OTQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3NzbC52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3NzbC52Y3hwcm9qCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KQEAgLTIxMiw3ICsyMTIsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KQEAgLTIyNyw3ICsyMjcsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgpAQCAtMjU1LDcgKzI1NSw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2ogYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2M3YWQyCi0tLSAvZGV2L251bGwKKysrIGIvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2oKQEAgLTAsMCArMSwxNjEgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X3Rlc3RlbWJlZDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0ZW1iZWQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFByaXZhdGU+dHJ1ZTwvUHJpdmF0ZT4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT50cnVlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICAgIDxDb3B5TG9jYWxTYXRlbGxpdGVBc3NlbWJsaWVzPmZhbHNlPC9Db3B5TG9jYWxTYXRlbGxpdGVBc3NlbWJsaWVzPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPnRydWU8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgICAgPFVzZUxpYnJhcnlEZXBlbmRlbmN5SW5wdXRzPmZhbHNlPC9Vc2VMaWJyYXJ5RGVwZW5kZW5jeUlucHV0cz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTU0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsMjIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXA+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdGVtYmVkLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2oKc2ltaWxhcml0eSBpbmRleCA2NSUKY29weSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvagpjb3B5IHRvIFBDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qCmluZGV4IGQxYWZlMjIuLjg0OTg0ZmYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvagorKysgYi9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvagpAQCAtMzUsMTA0ICszNSw5NSBAQAogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CiAgIDwvSXRlbUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9PC9Qcm9qZWN0R3VpZD4KLSAgICA8Um9vdE5hbWVzcGFjZT53OXhwb3BlbjwvUm9vdE5hbWVzcGFjZT4KKyAgICA8UHJvamVjdEd1aWQ+ezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX08L1Byb2plY3RHdWlkPgorICAgIDxSb290TmFtZXNwYWNlPl90ZXN0aW1wb3J0bXVsdGlwbGU8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CiAgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CiAgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KQEAgLTE1OSwxMjkgKzE1MCw2OSBAQAogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0aW1wb3J0bXVsdGlwbGUuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2ouZmlsdGVycwpzaW1pbGFyaXR5IGluZGV4IDcyJQpjb3B5IGZyb20gUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMKY29weSB0byBQQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvai5maWx0ZXJzCmluZGV4IGRlYzY3YWQuLmRiMGQwYTYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTIsMTIgKzIsMTIgQEAKIDxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cD4KICAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57YWJjMmRmZmQtM2YyYS00N2JkLWI4OWItMDMxNGM5OWVmMjFlfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnsxZWMzOGFkOS0xYWJmLTRiODAtODYyOC1hYzQzY2NiYTMyNGJ9PC9VbmlxdWVJZGVudGlmaWVyPgogICAgIDwvRmlsdGVyPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdGltcG9ydG11bHRpcGxlLmMiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9idWlsZF9zc2wuYmF0IGIvUENidWlsZC9idWlsZF9zc2wuYmF0CmluZGV4IDM1N2IwOGIuLjgwNWQ3N2EgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvYnVpbGRfc3NsLmJhdAorKysgYi9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQKQEAgLTIsMTAgKzIsMTAgQEAKIGlmIG5vdCBkZWZpbmVkIEhPU1RfUFlUSE9OICgKICAgaWYgJTEgRVFVIERlYnVnICgKICAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uX2QuZXhlCi0gICAgaWYgbm90IGV4aXN0IHB5dGhvbjMzX2QuZGxsIGV4aXQgMQorICAgIGlmIG5vdCBleGlzdCBweXRob24zNF9kLmRsbCBleGl0IDEKICAgKSBFTFNFICgKICAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24zMy5kbGwgZXhpdCAxCisgICAgaWYgbm90IGV4aXN0IHB5dGhvbjM0LmRsbCBleGl0IDEKICAgKQogKQogJUhPU1RfUFlUSE9OJSBidWlsZF9zc2wucHkgJTEgJTIgJTMKZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weSBiL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weQppbmRleCA0MTk2Y2YzLi5jODA3ZTdiIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKKysrIGIvUENidWlsZC9idWlsZF90a2ludGVyLnB5CkBAIC0xMSwxNiArMTEsMTIgQEAKIGhlcmUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKIHBhciA9IG9zLnBhdGgucGFyZGlyCiAKLVRDTCA9ICJ0Y2w4LjUuMTEiCi1USyA9ICJ0azguNS4xMSIKLVRJWCA9ICJ0aXgtOC40LjMueCIKK1RDTCA9ICJ0Y2w4LjYuMSIKK1RLID0gInRrOC42LjEiCitUSVggPSAidGl4LTguNC4zLjMiCiAKIFJPT1QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGhlcmUsIHBhciwgcGFyKSkKLSMgV2luZG93cyAyMDAwIGNvbXBhdGliaWxpdHk6IFdJTlZFUiAweDA1MDAKLSMgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9hYTM4Mzc0NS5hc3B4Ci1OTUFLRSA9ICgnbm1ha2UgL25vbG9nbyAvZiAlcyAnCi0gICAgJ0NPTVBJTEVSRkxBR1M9XCItRFdJTlZFUj0weDA1MDAgLURfV0lOMzJfV0lOTlQ9MHgwNTAwIC1ETlRERElfVkVSU0lPTj1OVERESV9XSU4yS1NQNFwiICcKLSAgICAnJXMgJXMnKQorTk1BS0UgPSAoJ25tYWtlIC9ub2xvZ28gL2YgJXMgJXMgJXMnKQogCiBkZWYgbm1ha2UobWFrZWZpbGUsIGNvbW1hbmQ9IiIsICoqa3cpOgogICAgIGRlZmluZXMgPSAnICcuam9pbihrKyc9JytzdHIodikgZm9yIGssIHYgaW4ga3cuaXRlbXMoKSkKZGlmZiAtLWdpdCBhL1BDYnVpbGQva2lsbF9weXRob24uYyBiL1BDYnVpbGQva2lsbF9weXRob24uYwppbmRleCBiYjMyM2QzLi42MDQ3MzFmIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2tpbGxfcHl0aG9uLmMKKysrIGIvUENidWlsZC9raWxsX3B5dGhvbi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKICAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzNbX2RdLmRsbCksCisgICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzRbX2RdLmRsbCksCiAgICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgogICAgICAgICAgKiBOb3Qgd29ydGggbG9vc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sgCiAgICAgICAgICAqIGZvciBqdXN0IHRoZSBweXRob24gZXhlY3V0YWJsZSBzaG91bGQgYmUgc3VmZmljaWVudC4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcGNidWlsZC5zbG4gYi9QQ2J1aWxkL3BjYnVpbGQuc2xuCmluZGV4IGQ2YTAyMmYuLmY0NTkwM2QgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcGNidWlsZC5zbG4KKysrIGIvUENidWlsZC9wY2J1aWxkLnNsbgpAQCAtMTQsOCArMTQsNiBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9udyIsICJweXRob253LnZjeHByb2oiLCAie0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0iDQogRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmN4cHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi1FbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX2J1aWxkaW5mbyIsICJtYWtlX2J1aWxkaW5mby52Y3hwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbnNvdW5kIiwgIndpbnNvdW5kLnZjeHByb2oiLCAiezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0iDQpAQCAtMzgsNiArMzYsOCBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RjYXBpIiwgIl90ZXN0Y2FwaS52Y3hwcm9qIiwgIns2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9Ig0KIEVuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0aW1wb3J0bXVsdGlwbGUiLCAiX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qIiwgInszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9Ig0KK0VuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90a2ludGVyIiwgIl90a2ludGVyLnZjeHByb2oiLCAiezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2J6MiIsICJfYnoyLnZjeHByb2oiLCAiezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0iDQpAQCAtNzQsNiArNzQsMTAgQEAKIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9mcmVlemVfaW1wb3J0bGliIiwgIl9mcmVlemVfaW1wb3J0bGliLnZjeHByb2oiLCAiezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30iDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX292ZXJsYXBwZWQiLCAiX292ZXJsYXBwZWQudmN4cHJvaiIsICJ7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGVtYmVkIiwgIl90ZXN0ZW1iZWQudmN4cHJvaiIsICJ7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfSINCitFbmRQcm9qZWN0DQogR2xvYmFsDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQogCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQpAQCAtMTUwLDIyICsxNTQsNiBAQAogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KIAkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQpAQCAtMzQyLDYgKzMzMCwyMiBAQAogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KQEAgLTYxMSw2ICs2MTUsNTQgQEAKIAkJezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KIAkJezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJRW5kR2xvYmFsU2VjdGlvbg0KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KIAkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXByb2plY3QucHJvcHMgYi9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcwppbmRleCA4MTU1MjMxLi43YjY1OTYxIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcworKysgYi9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcwpAQCAtMTMsMjAgKzEzLDIwIEBACiAgICAgPEludERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLSQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiPgotICAgIDxQeURsbE5hbWU+cHl0aG9uMzMkKFB5RGVidWdFeHQpPC9QeURsbE5hbWU+CisgICAgPFB5RGxsTmFtZT5weXRob24zNCQoUHlEZWJ1Z0V4dCk8L1B5RGxsTmFtZT4KICAgICA8UHl0aG9uRXhlPiQoT3V0RGlyKXB5dGhvbiQoUHlEZWJ1Z0V4dCkuZXhlPC9QeXRob25FeGU+CiAgICAgPEtpbGxQeXRob25FeGU+JChPdXREaXIpa2lsbF9weXRob24kKFB5RGVidWdFeHQpLmV4ZTwvS2lsbFB5dGhvbkV4ZT4KICAgICA8ZXh0ZXJuYWxzRGlyPi4uXC4uPC9leHRlcm5hbHNEaXI+Ci0gICAgPHNxbGl0ZTNEaXI+JChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjcuMTI8L3NxbGl0ZTNEaXI+CisgICAgPHNxbGl0ZTNEaXI+JChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjguMTwvc3FsaXRlM0Rpcj4KICAgICA8YnoyRGlyPiQoZXh0ZXJuYWxzRGlyKVxiemlwMi0xLjAuNjwvYnoyRGlyPgotICAgIDxsem1hRGlyPiQoZXh0ZXJuYWxzRGlyKVx4ei01LjAuMzwvbHptYURpcj4KKyAgICA8bHptYURpcj4kKGV4dGVybmFsc0RpcilceHotNS4wLjU8L2x6bWFEaXI+CiAgICAgPG9wZW5zc2xEaXI+JChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFlPC9vcGVuc3NsRGlyPgogICAgIDx0Y2x0a0Rpcj4kKGV4dGVybmFsc0RpcilcdGNsdGs8L3RjbHRrRGlyPgogICAgIDx0Y2x0azY0RGlyPiQoZXh0ZXJuYWxzRGlyKVx0Y2x0azY0PC90Y2x0azY0RGlyPgotICAgIDx0Y2x0a0xpYj4kKHRjbHRrRGlyKVxsaWJcdGNsODUubGliOyQodGNsdGtEaXIpXGxpYlx0azg1LmxpYjwvdGNsdGtMaWI+Ci0gICAgPHRjbHRrTGliRGVidWc+JCh0Y2x0a0RpcilcbGliXHRjbDg1Zy5saWI7JCh0Y2x0a0RpcilcbGliXHRrODVnLmxpYjwvdGNsdGtMaWJEZWJ1Zz4KLSAgICA8dGNsdGs2NExpYj4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NS5saWI7JCh0Y2x0azY0RGlyKVxsaWJcdGs4NS5saWI8L3RjbHRrNjRMaWI+Ci0gICAgPHRjbHRrNjRMaWJEZWJ1Zz4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NWcubGliOyQodGNsdGs2NERpcilcbGliXHRrODVnLmxpYjwvdGNsdGs2NExpYkRlYnVnPgorICAgIDx0Y2x0a0xpYj4kKHRjbHRrRGlyKVxsaWJcdGNsODZ0LmxpYjskKHRjbHRrRGlyKVxsaWJcdGs4NnQubGliPC90Y2x0a0xpYj4KKyAgICA8dGNsdGtMaWJEZWJ1Zz4kKHRjbHRrRGlyKVxsaWJcdGNsODZ0Zy5saWI7JCh0Y2x0a0RpcilcbGliXHRrODZ0Zy5saWI8L3RjbHRrTGliRGVidWc+CisgICAgPHRjbHRrNjRMaWI+JCh0Y2x0azY0RGlyKVxsaWJcdGNsODZ0LmxpYjskKHRjbHRrNjREaXIpXGxpYlx0azg2dC5saWI8L3RjbHRrNjRMaWI+CisgICAgPHRjbHRrNjRMaWJEZWJ1Zz4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NnRnLmxpYjskKHRjbHRrNjREaXIpXGxpYlx0azg2dGcubGliPC90Y2x0azY0TGliRGVidWc+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPENsQ29tcGlsZT4KQEAgLTQ5LDkgKzQ5LDggQEAKICAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgogICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpJChUYXJnZXROYW1lKS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CiAgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KLSAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KLSAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KLSAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPnRydWU8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj50cnVlPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICAgIDxSZXNvdXJjZUNvbXBpbGU+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qIGIvUENidWlsZC9weXRob24udmN4cHJvagppbmRleCBkMGE5ZGUwLi5iZDEyNjI0IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qCisrKyBiL1BDYnVpbGQvcHl0aG9uLnZjeHByb2oKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgIDxMaW5rPgogICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpcHl0aG9uX2QuZXhlPC9PdXRwdXRGaWxlPgogICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8U3RhY2tSZXNlcnZlU2l6ZT4yMTAwMDAwPC9TdGFja1Jlc2VydmVTaXplPgorICAgICAgPFN0YWNrUmVzZXJ2ZVNpemU+NDE5NDMwNDwvU3RhY2tSZXNlcnZlU2l6ZT4KICAgICAgIDxCYXNlQWRkcmVzcz4weDFkMDAwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KQEAgLTM1NywxMiArMzU3LDggQEAKICAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgogICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KICAgICA8L1Byb2plY3RSZWZlcmVuY2U+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0idzl4cG9wZW4udmN4cHJvaiI+Ci0gICAgICA8UHJvamVjdD57ZTllMGExZjYtMDAwOS00ZThjLWI4ZjgtMWI4ZjVkNDlhMDU4fTwvUHJvamVjdD4KLSAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+Ci0gICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgogICA8L0l0ZW1Hcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvaiBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qCmluZGV4IDg5YTYzZDEuLjExYjcwNTQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qCisrKyBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qCkBAIC00NjAsNiArNDYwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccGF0Y2hsZXZlbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxwZ2VuLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHBnZW5oZWFkZXJzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5aGFzaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweV9jdXJzZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHlhcmVuYS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweWNhcHN1bGUuaCIgLz4KQEAgLTQ5Niw3ICs0OTcsMTEgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVcdW5pY29kZW9iamVjdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVx3ZWFrcmVmb2JqZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9tYXRoLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGhhc2h0YWJsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9jb25zdGFudHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlX2xpYi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHpsaWJcY3JjMzIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmgiIC8+CkBAIC01MjMsNiArNTI4LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXGZhc3RzZWFyY2guaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXGZpbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHBhcnRpdGlvbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJccmVwbGFjZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJcc3BsaXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcdW5pY29kZXR5cGVfZGIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXFBhcnNlclxwYXJzZXIuaCIgLz4KQEAgLTU0OCw2ICs1NTQsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfcGlja2xlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NyZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3RhdC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3RydWN0LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF93ZWFrcmVmLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGFycmF5bW9kdWxlLmMiIC8+CkBAIC01NTksMTIgKzU2NiwxNCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xmYXVsdGhhbmRsZXIuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcZ2Ntb2R1bGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaGFzaHRhYmxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xtYWluLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcb3BlcmF0b3IuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX29wY29kZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfb3BlcmF0b3IuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jIiAvPgpAQCAtNTc0LDYgKzU4Myw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90cmFjZW1hbGxvYy5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x0aW1lbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHh4c3VidHlwZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x6aXBpbXBvcnQuYyIgLz4KQEAgLTY1OSw2ICs2NjksNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcZGxfbnQuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXGdldHBhdGhwLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xtc3ZjcnRtb2R1bGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxweWhhc2guYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxyYW5kb20uYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxfd2FybmluZ3MuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxhc2RsLmMiIC8+CkBAIC03MjUsNCArNzM2LDQgQEAKICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA1NjQ3ZmViLi44YzY1MjQ3IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTMwMCw2ICszMDAsMTUgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmgiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZS5oIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmVfY29uc3RhbnRzLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9saWIuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5oIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1xfaW88L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTM3OCw2ICszODcsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJccGFydGl0aW9uLmgiPgogICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxyZXBsYWNlLmgiPgorICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxzcGxpdC5oIj4KICAgICAgIDxGaWx0ZXI+T2JqZWN0czwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDA4LDkgKzQyMCwxNSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cUHl0aG9uXGNldmFsX2dpbC5oIj4KICAgICAgIDxGaWx0ZXI+UHl0aG9uPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5aGFzaC5oIj4KKyAgICAgIDxGaWx0ZXI+SW5jbHVkZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxuYW1lc3BhY2VvYmplY3QuaCI+CiAgICAgICA8RmlsdGVyPkluY2x1ZGU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaGFzaHRhYmxlLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMiPgpAQCAtNTAwLDcgKzUxOCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcb3BlcmF0b3IuYyI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9vcGVyYXRvci5jIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYyI+CkBAIC05MTcsOSArOTM1LDI0IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF93aW5hcGkuYyI+CiAgICAgICA8RmlsdGVyPlBDPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zdGF0LmMiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25ccHloYXNoLmMiPgorICAgICAgPEZpbHRlcj5QeXRob248L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE9iamVjdHNcbmFtZXNwYWNlb2JqZWN0LmMiPgogICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9vcGNvZGUuYyI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3RyYWNlbWFsbG9jLmMiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGhhc2h0YWJsZS5jIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbl9udC5yYyI+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3JlYWRtZS50eHQgYi9QQ2J1aWxkL3JlYWRtZS50eHQKaW5kZXggNmYwNzY4OS4uZDVjNjlhNyAxMDA2NDQKLS0tIGEvUENidWlsZC9yZWFkbWUudHh0CisrKyBiL1BDYnVpbGQvcmVhZG1lLnR4dApAQCAtMSwyMDAgKzEsMjU4IEBACi1CdWlsZGluZyBQeXRob24gdXNpbmcgVkMrKyAxMC4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCdWlsZGluZyBQeXRob24gdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBDKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGlzIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBmb3IgV2luMzIgYW5kIHg2NCBwbGF0Zm9ybXMsIGUuZy4KLVdpbmRvd3MgWFAsIFZpc3RhIGFuZCBXaW5kb3dzIFNlcnZlciAyMDA4LiAgSW4gb3JkZXIgdG8gYnVpbGQgMzItYml0Ci1kZWJ1ZyBhbmQgcmVsZWFzZSBleGVjdXRhYmxlcywgTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMCBFeHByZXNzIEVkaXRpb24gaXMKLXJlcXVpcmVkIGF0IHRoZSB2ZXJ5IGxlYXN0LiAgSW4gb3JkZXIgdG8gYnVpbGQgNjQtYml0IGRlYnVnIGFuZCByZWxlYXNlCi1leGVjdXRhYmxlcywgVmlzdWFsIFN0dWRpbyAyMDEwIFN0YW5kYXJkIEVkaXRpb24gaXMgcmVxdWlyZWQgYXQgdGhlIHZlcnkKLWxlYXN0LiAgSW4gb3JkZXIgdG8gYnVpbGQgYWxsIG9mIHRoZSBhYm92ZSwgYXMgd2VsbCBhcyBnZW5lcmF0ZSByZWxlYXNlIGJ1aWxkcwotdGhhdCBtYWtlIHVzZSBvZiBQcm9maWxlIEd1aWRlZCBPcHRpbWlzYXRpb24gKFBHMCksIFZpc3VhbCBTdHVkaW8gMjAxMAotUHJvZmVzc2lvbmFsIEVkaXRpb24gaXMgcmVxdWlyZWQgYXQgdGhlIHZlcnkgbGVhc3QuICBUaGUgb2ZmaWNpYWwgUHl0aG9uCi1yZWxlYXNlcyBhcmUgYnVpbHQgd2l0aCB0aGlzIHZlcnNpb24gb2YgVmlzdWFsIFN0dWRpby4KK1RoaXMgZGlyZWN0b3J5IGlzIHVzZWQgdG8gYnVpbGQgQ1B5dGhvbiBmb3IgTWljcm9zb2Z0IFdpbmRvd3MgTlQgdmVyc2lvbgorNS4xIG9yIGhpZ2hlciAoV2luZG93cyBYUCwgV2luZG93cyBTZXJ2ZXIgMjAwMywgb3IgbGF0ZXIpIG9uIDMyIGFuZCA2NAorYml0IHBsYXRmb3Jtcy4gIFVzaW5nIHRoaXMgZGlyZWN0b3J5IHJlcXVpcmVzIGFuIGluc3RhbGxhdGlvbiBvZgorTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMCAoTVNWQyAxMC4wKSBvZiBhbnkgZWRpdGlvbi4gIFRoZSBzcGVjaWZpYworcmVxdWlyZW1lbnRzIGFyZSBhcyBmb2xsb3dzOgorVmlzdWFsIEMrKyAyMDEwIEV4cHJlc3MgRWRpdGlvbgorICAgIFJlcXVpcmVkIGZvciBidWlsZGluZyAzMi1iaXQgRGVidWcgYW5kIFJlbGVhc2UgY29uZmlndXJhdGlvbiBidWlsZHMuCisgICAgVGhpcyBlZGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgInNvbHV0aW9uIGZvbGRlcnMiLCB3aGljaCBwY2J1aWxkLnNsbgorICAgIHVzZXM7IHRoaXMgd2lsbCBub3QgcHJldmVudCBidWlsZGluZy4KK1Zpc3VhbCBTdHVkaW8gMjAxMCBTdGFuZGFyZCBFZGl0aW9uCisgICAgUmVxdWlyZWQgZm9yIGJ1aWxkaW5nIDY0LWJpdCBEZWJ1ZyBhbmQgUmVsZWFzZSBjb25maWd1cmF0aW9uIGJ1aWxkcworVmlzdWFsIFN0dWRpbyAyMDEwIFByb2Zlc3Npb25hbCBFZGl0aW9uCisgICAgUmVxdWlyZWQgZm9yIGJ1aWxkaW5nIFJlbGVhc2UgY29uZmlndXJhdGlvbiBidWlsZHMgdGhhdCBtYWtlIHVzZSBvZgorICAgIFByb2ZpbGUgR3VpZGVkIE9wdGltaXphdGlvbiAoUEdPKSwgb24gZWl0aGVyIHBsYXRmb3JtLiAgVGhlIG9mZmljaWFsCisgICAgUHl0aG9uIHJlbGVhc2VzIGFyZSBidWlsdCB3aXRoIFByb2Zlc3Npb25hbCBFZGl0aW9uIHVzaW5nIFBHTy4KIAotRm9yIG90aGVyIFdpbmRvd3MgcGxhdGZvcm1zIGFuZCBjb21waWxlcnMsIHNlZSAuLi9QQy9yZWFkbWUudHh0LgorQWxsIHlvdSBuZWVkIHRvIGRvIHRvIGJ1aWxkIGlzIG9wZW4gdGhlIHNvbHV0aW9uICJwY2J1aWxkLnNsbiIgaW4gVmlzdWFsCitTdHVkaW8sIHNlbGVjdCB0aGUgZGVzaXJlZCBjb21iaW5hdGlvbiBvZiBjb25maWd1cmF0aW9uIGFuZCBwbGF0Zm9ybSwKK3RoZW4gYnVpbGQgd2l0aCAiQnVpbGQgU29sdXRpb24iIG9yIHRoZSBGNyBrZXlib2FyZCBzaG9ydGN1dC4gIFlvdSBjYW4KK2Fsc28gYnVpbGQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHVzaW5nIHRoZSAiYnVpbGQuYmF0IiBzY3JpcHQgaW4gdGhpcworZGlyZWN0b3J5LiAgVGhlIHNvbHV0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gYnVpbGQgdGhlIHByb2plY3RzIGluIHRoZQorY29ycmVjdCBvcmRlci4KIAotQWxsIHlvdSBuZWVkIHRvIGRvIGlzIG9wZW4gdGhlIHdvcmtzcGFjZSAicGNidWlsZC5zbG4iIGluIFZpc3VhbCBTdHVkaW8sCi1zZWxlY3QgdGhlIGRlc2lyZWQgY29tYmluYXRpb24gb2YgY29uZmlndXJhdGlvbiBhbmQgcGxhdGZvcm0gYW5kIGV2ZW50dWFsbHkKLWJ1aWxkIHRoZSBzb2x1dGlvbi4gVW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gZGVidWcgYSBwcm9ibGVtIGluIHRoZSBjb3JlIG9yCi15b3UgYXJlIGdvaW5nIHRvIGNyZWF0ZSBhbiBvcHRpbWl6ZWQgYnVpbGQgeW91IHdhbnQgdG8gc2VsZWN0ICJSZWxlYXNlIiBhcwotY29uZmlndXJhdGlvbi4KK1RoZSBzb2x1dGlvbiBjdXJyZW50bHkgc3VwcG9ydHMgdHdvIHBsYXRmb3Jtcy4gIFRoZSBXaW4zMiBwbGF0Zm9ybSBpcwordXNlZCB0byBidWlsZCBzdGFuZGFyZCB4ODYtY29tcGF0aWJsZSAzMi1iaXQgYmluYXJpZXMsIG91dHB1dCBpbnRvIHRoaXMKK2RpcmVjdG9yeS4gIFRoZSB4NjQgcGxhdGZvcm0gaXMgdXNlZCBmb3IgYnVpbGRpbmcgNjQtYml0IEFNRDY0IChha2EKK3g4Nl82NCBvciBFTTY0VCkgYmluYXJpZXMsIG91dHB1dCBpbnRvIHRoZSBhbWQ2NCBzdWItZGlyZWN0b3J5IHdoaWNoCit3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LiAgVGhlIEl0YW5pdW0gKElBLTY0KQorcGxhdGZvcm0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIFNlZSB0aGUgIkJ1aWxkaW5nIGZvciBBTUQ2NCIgc2VjdGlvbgorYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgNjQtYml0IGJ1aWxkcy4KIAotVGhlIFBDYnVpbGQgZGlyZWN0b3J5IGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgdmVyc2lvbnMgb2YgVmlzdWFsIFN0dWRpbyBmcm9tCi1WUyBDKysgRXhwcmVzcyBFZGl0aW9uIG92ZXIgdGhlIHN0YW5kYXJkIGVkaXRpb24gdXAgdG8gdGhlIHByb2Zlc3Npb25hbAotZWRpdGlvbi4gSG93ZXZlciB0aGUgZXhwcmVzcyBlZGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZXMgbGlrZSBzb2x1dGlvbgotZm9sZGVycyBvciBwcm9maWxlIGd1aWRlZCBvcHRpbWl6YXRpb24gKFBHTykuIFRoZSBtaXNzaW5nIGJpdHMgYW5kIHBpZWNlcwotd29uJ3Qgc3RvcCB5b3UgZnJvbSBidWlsZGluZyBQeXRob24uCitGb3VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBzb2x1dGlvbjoKK0RlYnVnCisgICAgVXNlZCB0byBidWlsZCBQeXRob24gd2l0aCBleHRyYSBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzLCBlcXVpdmFsZW50CisgICAgdG8gdXNpbmcgLi9jb25maWd1cmUgLS13aXRoLXB5ZGVidWcgb24gVU5JWC4gIEFsbCBiaW5hcmllcyBidWlsdAorICAgIHVzaW5nIHRoaXMgY29uZmlndXJhdGlvbiBoYXZlICJfZCIgYWRkZWQgdG8gdGhlaXIgbmFtZToKKyAgICBweXRob24zNF9kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4gIEJvdGggdGhlCisgICAgYnVpbGQgYW5kIHJ0IChydW4gdGVzdCkgYmF0Y2ggZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgYWNjZXB0IGEgLWQKKyAgICBvcHRpb24gZm9yIGRlYnVnIGJ1aWxkcy4gIElmIHlvdSBhcmUgYnVpbGRpbmcgUHl0aG9uIHRvIGhlbHAgd2l0aAorICAgIGRldmVsb3BtZW50IG9mIENQeXRob24sIHlvdSB3aWxsIG1vc3QgbGlrZWx5IHVzZSB0aGlzIGNvbmZpZ3VyYXRpb24uCitQR0luc3RydW1lbnQsIFBHVXBkYXRlCisgICAgVXNlZCB0byBidWlsZCBQeXRob24gaW4gUmVsZWFzZSBjb25maWd1cmF0aW9uIHVzaW5nIFBHTywgd2hpY2gKKyAgICByZXF1aXJlcyBQcm9mZXNzaW9uYWwgRWRpdGlvbiBvZiBWaXN1YWwgU3R1ZGlvLiAgU2VlIHRoZSAiUHJvZmlsZQorICAgIEd1aWRlZCBPcHRpbWl6YXRpb24iIHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBCdWlsZAorICAgIG91dHB1dCBmcm9tIGVhY2ggb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgbGFuZHMgaW4gaXRzIG93bgorICAgIHN1Yi1kaXJlY3Rvcnkgb2YgdGhpcyBkaXJlY3RvcnkuICBUaGUgb2ZmaWNpYWwgUHl0aG9uIHJlbGVhc2VzIGFyZQorICAgIGJ1aWx0IHVzaW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgorUmVsZWFzZQorICAgIFVzZWQgdG8gYnVpbGQgUHl0aG9uIGFzIGl0IGlzIG1lYW50IHRvIGJlIHVzZWQgaW4gcHJvZHVjdGlvbgorICAgIHNldHRpbmdzLCB0aG91Z2ggd2l0aG91dCBQR08uCiAKLVRoZSBzb2x1dGlvbiBpcyBjb25maWd1cmVkIHRvIGJ1aWxkIHRoZSBwcm9qZWN0cyBpbiB0aGUgY29ycmVjdCBvcmRlci4gIkJ1aWxkCi1Tb2x1dGlvbiIgb3IgRjcgdGFrZXMgY2FyZSBvZiBkZXBlbmRlbmNpZXMgZXhjZXB0IGZvciB4NjQgYnVpbGRzLiBUbyBtYWtlCi1jcm9zcyBjb21waWxpbmcgeDY0IGJ1aWxkcyBvbiBhIDMyYml0IE9TIHBvc3NpYmxlIHRoZSB4NjQgYnVpbGRzIHJlcXVpcmUgYQotMzJiaXQgdmVyc2lvbiBvZiBQeXRob24uCi0KLU5PVEU6Ci0gICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBidWlsZCBtb3N0IG9mIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgdW5sZXNzCi0gICB5b3UncmUgYnVpbGRpbmcgYW4gZW50aXJlIFB5dGhvbiBkaXN0cmlidXRpb24gZnJvbSBzY3JhdGNoLCBvcgotICAgc3BlY2lmaWNhbGx5IG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBzdWJzeXN0ZW1zIHRoZXkgaW1wbGVtZW50LCBvciBhcmUKLSAgIHJ1bm5pbmcgYSBQeXRob24gY29yZSBidWlsZGJvdCB0ZXN0IHNsYXZlOyBzZWUgU1VCUFJPSkVDVFMgYmVsb3cpCi0KLVdoZW4gdXNpbmcgdGhlIERlYnVnIHNldHRpbmcsIHRoZSBvdXRwdXQgZmlsZXMgaGF2ZSBhIF9kIGFkZGVkIHRvCi10aGVpciBuYW1lOiAgcHl0aG9uMzNfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcGFyc2VyX2QucHlkLCBhbmQgc28gb24uIEJvdGgKLXRoZSBidWlsZCBhbmQgcnQgYmF0Y2ggZmlsZXMgYWNjZXB0IGEgLWQgb3B0aW9uIGZvciBkZWJ1ZyBidWlsZHMuCi0KLVRoZSAzMmJpdCBidWlsZHMgZW5kIHVwIGluIHRoZSBzb2x1dGlvbiBmb2xkZXIgUENidWlsZCB3aGlsZSB0aGUgeDY0IGJ1aWxkcwotbGFuZCBpbiB0aGUgYW1kNjQgc3ViZm9sZGVyLiBUaGUgUEdJIGFuZCBQR08gYnVpbGRzIGZvciBwcm9maWxlIGd1aWRlZAotb3B0aW1pemF0aW9uIGVuZCB1cCBpbiB0aGVpciBvd24gZm9sZGVycywgdG9vLgogCiBMZWdhY3kgc3VwcG9ydAogLS0tLS0tLS0tLS0tLS0KIAogWW91IGNhbiBmaW5kIGJ1aWxkIGRpcmVjdG9yaWVzIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvIGFuZAotVmlzdWFsIEMrKyBpbiB0aGUgUEMgZGlyZWN0b3J5LiBUaGUgbGVnYWN5IGJ1aWxkIGRpcmVjdG9yaWVzIGFyZSBubyBsb25nZXIKLWFjdGl2ZWx5IG1haW50YWluZWQgYW5kIG1heSBub3Qgd29yayBvdXQgb2YgdGhlIGJveC4KK1Zpc3VhbCBDKysgaW4gdGhlIFBDIGRpcmVjdG9yeS4gVGhlIGxlZ2FjeSBidWlsZCBkaXJlY3RvcmllcyBhcmUgbm8KK2xvbmdlciBhY3RpdmVseSBtYWludGFpbmVkIGFuZCBtYXkgbm90IHdvcmsgb3V0IG9mIHRoZSBib3guCiAKLVBDL1ZDNi8KLSAgICBWaXN1YWwgQysrIDYuMAotUEMvVlM3LjEvCi0gICAgVmlzdWFsIFN0dWRpbyAyMDAzICg3LjEpCi1QQy9WUzguMC8KLSAgICBWaXN1YWwgU3R1ZGlvIDIwMDUgKDguMCkKLVBDL1ZTOS4wLwotICAgIFZpc3VhbCBTdHVkaW8gMjAwOCAoOS4wKQorQ3VycmVudGx5LCB0aGUgb25seSBsZWdhY3kgYnVpbGQgZGlyZWN0b3J5IGlzIFBDXFZTOS4wLCBmb3IgVmlzdWFsCitTdHVkaW8gMjAwOCAoOS4wKS4KIAogCi1DIFJVTlRJTUUKK0MgUnVudGltZQogLS0tLS0tLS0tCiAKLVZpc3VhbCBTdHVkaW8gMjAxMCB1c2VzIHZlcnNpb24gMTAgb2YgdGhlIEMgcnVudGltZSAoTVNWQ1JUMTApLiAgVGhlIGV4ZWN1dGFibGVzCi1ubyBsb25nZXIgdXNlIHRoZSAiU2lkZSBieSBTaWRlIiBhc3NlbWJsaWVzIHVzZWQgaW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlCi1jb21waWxlci4gIFRoaXMgc2ltcGxpZmllcyBkaXN0cmlidXRpb24gb2YgYXBwbGljYXRpb25zLgotVGhlIHJ1biB0aW1lIGxpYnJhcmllcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBWQy9SZWRpc3QgZm9sZGVyIG9mIHlvdXIgdmlzdWFsIHN0dWRpbwotZGlzdHJpYnV0aW9uLiBGb3IgbW9yZSBpbmZvLCBzZWUgdGhlIFJlYWRtZSBpbiB0aGUgVkMvUmVkaXN0IGZvbGRlci4KK1Zpc3VhbCBTdHVkaW8gMjAxMCB1c2VzIHZlcnNpb24gMTAgb2YgdGhlIEMgcnVudGltZSAoTVNWQ1JUMTApLiAgVGhlCitleGVjdXRhYmxlcyBubyBsb25nZXIgdXNlIHRoZSAiU2lkZSBieSBTaWRlIiBhc3NlbWJsaWVzIHVzZWQgaW4gcHJldmlvdXMKK3ZlcnNpb25zIG9mIHRoZSBjb21waWxlci4gIFRoaXMgc2ltcGxpZmllcyBkaXN0cmlidXRpb24gb2YgYXBwbGljYXRpb25zLgogCi1TVUJQUk9KRUNUUwotLS0tLS0tLS0tLS0KLVRoZXNlIHN1YnByb2plY3RzIHNob3VsZCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFN1YnByb2plY3RzIG90aGVyIHRoYW4gdGhlCi1tYWluIG9uZXMgKHB5dGhvbmNvcmUsIHB5dGhvbiwgcHl0aG9udykgZ2VuZXJhbGx5IGJ1aWxkIGEgRExMIChyZW5hbWVkIHRvCi0ucHlkKSBmcm9tIGEgc3BlY2lmaWMgbW9kdWxlIHNvIHRoYXQgdXNlcnMgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBjb2RlCi1zdXBwb3J0aW5nIHRoYXQgbW9kdWxlIHVubGVzcyB0aGV5IGltcG9ydCB0aGUgbW9kdWxlLgorVGhlIHJ1biB0aW1lIGxpYnJhcmllcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBWQy9SZWRpc3QgZm9sZGVyIG9mIHlvdXIKK1Zpc3VhbCBTdHVkaW8gZGlzdHJpYnV0aW9uLiBGb3IgbW9yZSBpbmZvLCBzZWUgdGhlIFJlYWRtZSBpbiB0aGUKK1ZDL1JlZGlzdCBmb2xkZXIuCiAKKworU3ViLVByb2plY3RzCistLS0tLS0tLS0tLS0KKworVGhlIENQeXRob24gcHJvamVjdCBpcyBzcGxpdCB1cCBpbnRvIHNldmVyYWwgc21hbGxlciBzdWItcHJvamVjdHMgd2hpY2gKK2FyZSBtYW5hZ2VkIGJ5IHRoZSBwY2J1aWxkLnNsbiBzb2x1dGlvbiBmaWxlLiAgRWFjaCBzdWItcHJvamVjdCBpcworcmVwcmVzZW50ZWQgYnkgYSAudmN4cHJvaiBhbmQgYSAudmN4cHJvai5maWx0ZXJzIGZpbGUgc3RhcnRpbmcgd2l0aCB0aGUKK25hbWUgb2YgdGhlIHN1Yi1wcm9qZWN0LiAgVGhlc2Ugc3ViLXByb2plY3RzIGZhbGwgaW50byBhIGZldyBnZW5lcmFsCitjYXRlZ29yaWVzOgorCitUaGUgZm9sbG93aW5nIHN1Yi1wcm9qZWN0cyByZXByZXNlbnQgdGhlIGJhcmUgbWluaW11bSByZXF1aXJlZCB0byBidWlsZAorYSBmdW5jdGlvbmluZyBDUHl0aG9uIGludGVycHJldGVyLiAgSWYgbm90aGluZyBlbHNlIGJ1aWxkcyBidXQgdGhlc2UsCit5b3UnbGwgaGF2ZSBhIHZlcnkgbGltaXRlZCBidXQgdXNhYmxlIHB5dGhvbi5leGU6CiBweXRob25jb3JlCiAgICAgLmRsbCBhbmQgLmxpYgogcHl0aG9uCiAgICAgLmV4ZQora2lsbF9weXRob24KKyAgICBraWxsX3B5dGhvbi5leGUsIGEgc21hbGwgcHJvZ3JhbSBkZXNpZ25lZCB0byBraWxsIGFueSBpbnN0YW5jZXMgb2YKKyAgICBweXRob24oX2QpLmV4ZSB0aGF0IGFyZSBydW5uaW5nIGFuZCBsaXZlIGluIHRoZSBidWlsZCBvdXRwdXQKKyAgICBkaXJlY3Rvcnk7IHRoaXMgaXMgbWVhbnQgdG8gYXZvaWQgYnVpbGQgaXNzdWVzIGR1ZSB0byBsb2NrZWQgZmlsZXMKK21ha2VfYnVpbGRpbmZvLCBtYWtlX3ZlcnNpb25pbmZvCisgICAgaGVscGVycyB0byBwcm92aWRlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byB0aGUgYnVpbGQgcHJvY2VzcworCitUaGVzZSBzdWItcHJvamVjdHMgcHJvdmlkZSBleHRyYSBleGVjdXRhYmxlcyB0aGF0IGFyZSB1c2VmdWwgZm9yIHJ1bm5pbmcKK0NQeXRob24gaW4gZGlmZmVyZW50IHdheXM6CiBweXRob253Ci0gICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBwb3AgdXAgYSBET1MgYm94CisgICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBvcGVuIGEgQ29tbWFuZAorICAgIFByb21wdCB3aW5kb3cKK3B5bGF1bmNoZXIKKyAgICBweS5leGUsIHRoZSBQeXRob24gTGF1bmNoZXIgZm9yIFdpbmRvd3MsIHNlZQorICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvd2luZG93cy5odG1sI2xhdW5jaGVyCitweXdsYXVuY2hlcgorICAgIHB5dy5leGUsIGEgdmFyaWFudCBvZiBweS5leGUgdGhhdCBkb2Vzbid0IG9wZW4gYSBDb21tYW5kIFByb21wdAorICAgIHdpbmRvdworX3Rlc3RlbWJlZAorICAgIF90ZXN0ZW1iZWQuZXhlLCBhIHNtYWxsIHByb2dyYW0gdGhhdCBlbWJlZHMgUHl0aG9uIGZvciB0ZXN0aW5nCisgICAgcHVycG9zZXMsIHVzZWQgYnkgdGVzdF9jYXBpLnB5CisKK1RoZXNlIGFyZSBtaXNjZWxsYW5lb3VzIHN1Yi1wcm9qZWN0cyB0aGF0IGRvbid0IHJlYWxseSBmaXQgdGhlIG90aGVyCitjYXRlZ29yaWVzLiAgQnkgZGVmYXVsdCwgdGhlc2UgcHJvamVjdHMgZG8gbm90IGJ1aWxkIGluIERlYnVnCitjb25maWd1cmF0aW9uOgorX2ZyZWV6ZV9pbXBvcnRsaWIKKyAgICBfZnJlZXplX2ltcG9ydGxpYi5leGUsIHVzZWQgdG8gcmVnZW5lcmF0ZSBQeXRob25caW1wb3J0bGliLmggYWZ0ZXIKKyAgICBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIExpYlxpbXBvcnRsaWJcX2Jvb3RzdHJhcC5weQorYmRpc3Rfd2luaW5zdAorICAgIC4uXExpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTEwLjBbLWFtZDY0XS5leGUsIHRoZSBiYXNlCisgICAgZXhlY3V0YWJsZSB1c2VkIGJ5IHRoZSBkaXN0dXRpbHMgYmRpc3Rfd2luaW5zdCBjb21tYW5kCitweXRob24zZGxsCisgICAgcHl0aG9uMy5kbGwsIHRoZSBQRVAgMzg0IFN0YWJsZSBBQkkgZGxsCit4eGxpbWl0ZWQKKyAgICBidWlsZHMgYW4gZXhhbXBsZSBtb2R1bGUgdGhhdCBtYWtlcyB1c2Ugb2YgdGhlIFBFUCAzODQgU3RhYmxlIEFCSSwKKyAgICBzZWUgTW9kdWxlc1x4eGxpbWl0ZWQuYworCitUaGUgZm9sbG93aW5nIHN1Yi1wcm9qZWN0cyBhcmUgZm9yIGluZGl2aWR1YWwgbW9kdWxlcyBvZiB0aGUgc3RhbmRhcmQKK2xpYnJhcnkgd2hpY2ggYXJlIGltcGxlbWVudGVkIGluIEM7IGVhY2ggb25lIGJ1aWxkcyBhIERMTCAocmVuYW1lZCB0bworLnB5ZCkgb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcHJvamVjdDoKK19jdHlwZXMKK19jdHlwZXNfdGVzdAorX2RlY2ltYWwKK19lbGVtZW50dHJlZQorX2hhc2hsaWIKK19tc2kKK19tdWx0aXByb2Nlc3NpbmcKK19vdmVybGFwcGVkCiBfc29ja2V0Ci0gICAgc29ja2V0bW9kdWxlLmMKIF90ZXN0Y2FwaQotICAgIHRlc3RzIG9mIHRoZSBQeXRob24gQyBBUEksIHJ1biB2aWEgTGliL3Rlc3QvdGVzdF9jYXBpLnB5LCBhbmQKLSAgICBpbXBsZW1lbnRlZCBieSBtb2R1bGUgTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwogX3Rlc3RidWZmZXIKLSAgICBidWZmZXIgcHJvdG9jb2wgdGVzdHMsIHJ1biB2aWEgTGliL3Rlc3QvdGVzdF9idWZmZXIucHksIGFuZAotICAgIGltcGxlbWVudGVkIGJ5IG1vZHVsZSBNb2R1bGVzL190ZXN0YnVmZmVyLmMKK190ZXN0aW1wb3J0bXVsdGlwbGUKIHB5ZXhwYXQKLSAgICBQeXRob24gd3JhcHBlciBmb3IgYWNjZWxlcmF0ZWQgWE1MIHBhcnNpbmcsIHdoaWNoIGluY29ycG9yYXRlcyBzdGFibGUKLSAgICBjb2RlIGZyb20gdGhlIEV4cGF0IHByb2plY3Q6ICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGF0Lwogc2VsZWN0Ci0gICAgc2VsZWN0bW9kdWxlLmMKIHVuaWNvZGVkYXRhCi0gICAgbGFyZ2UgdGFibGVzIG9mIFVuaWNvZGUgZGF0YQogd2luc291bmQKLSAgICBwbGF5IHNvdW5kcyAodHlwaWNhbGx5IC53YXYgZmlsZXMpIHVuZGVyIFdpbmRvd3MKIAotUHl0aG9uLWNvbnRyb2xsZWQgc3VicHJvamVjdHMgdGhhdCB3cmFwIGV4dGVybmFsIHByb2plY3RzOgotX3NxbGl0ZTMKLSAgICBXcmFwcyBTUUxpdGUgMy43LjEyLCB3aGljaCBpcyBjdXJyZW50bHkgYnVpbHQgYnkgc3FsaXRlMy52Y3hwcm9qLgotX3RraW50ZXIKLSAgICBXcmFwcyB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4gIFVubGlrZSBfc3FsaXRlMywgdGhlcmUncyBubwotICAgIGNvcnJlc3BvbmRpbmcgdGNsdGsudmN4cHJvai10eXBlIHByb2plY3QgdGhhdCBidWlsZHMgVGNsL1RrIGZyb20gdmN4cHJvaidzCi0gICAgd2l0aGluIG91ciBwY2J1aWxkLnNsbiwgd2hpY2ggbWVhbnMgdGhpcyBtb2R1bGUgZXhwZWN0cyB0byBmaW5kIGEKLSAgICBwcmUtYnVpbHQgVGNsL1RrIGluIGVpdGhlciAuLlwuLlx0Y2x0ayBmb3IgMzItYml0IG9yIC4uXC4uXHRjbHRrNjQgZm9yCi0gICAgNjQtYml0IChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkuICBTZWUgYmVsb3cgZm9yIGluc3RydWN0aW9ucyB0byBidWlsZAotICAgIFRjbC9Uay4KK1RoZSBmb2xsb3dpbmcgUHl0aG9uLWNvbnRyb2xsZWQgc3ViLXByb2plY3RzIHdyYXAgZXh0ZXJuYWwgcHJvamVjdHMuCitOb3RlIHRoYXQgdGhlc2UgZXh0ZXJuYWwgbGlicmFyaWVzIGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhIHdvcmtpbmcKK2ludGVycHJldGVyLCBidXQgdGhleSBkbyBpbXBsZW1lbnQgc2V2ZXJhbCBtYWpvciBmZWF0dXJlcy4gIFNlZSB0aGUKKyJHZXR0aW5nIEV4dGVybmFsIFNvdXJjZXMiIHNlY3Rpb24gYmVsb3cgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK2Fib3V0IGdldHRpbmcgdGhlIHNvdXJjZSBmb3IgYnVpbGRpbmcgdGhlc2UgbGlicmFyaWVzLiAgVGhlIHN1Yi1wcm9qZWN0cworYXJlOgogX2J6MgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGliYnppcDIgY29tcHJlc3Npb24gbGlicmFyeS4gIEhvbWVwYWdlCisgICAgUHl0aG9uIHdyYXBwZXIgZm9yIHZlcnNpb24gMS4wLjYgb2YgdGhlIGxpYmJ6aXAyIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAgICBIb21lcGFnZToKICAgICAgICAgaHR0cDovL3d3dy5iemlwLm9yZy8KLSAgICBEb3dubG9hZCB0aGUgc291cmNlIGZyb20gdGhlIHB5dGhvbi5vcmcgY29weSBpbnRvIHRoZSBkaXN0Ci0gICAgZGlyZWN0b3J5OgotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvYnppcDItMS4wLjYKLQotICAgICoqIE5PVEU6IGlmIHlvdSB1c2UgdGhlIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsKC1hbWQ2NCkuYmF0IGFwcHJvYWNoIGZvcgotICAgIG9idGFpbmluZyBleHRlcm5hbCBzb3VyY2VzIHRoZW4geW91IGRvbid0IG5lZWQgdG8gbWFudWFsbHkgZ2V0IHRoZSBzb3VyY2UKLSAgICBhYm92ZSB2aWEgc3VidmVyc2lvbi4gKioKIF9sem1hCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJsem1hIGNvbXByZXNzaW9uIGxpYnJhcnkuCi0KLSAgICBEb3dubG9hZCB0aGUgcHJlLWJ1aWx0IFdpbmRvd3MgYmluYXJpZXMgZnJvbSBodHRwOi8vdHVrYWFuaS5vcmcveHovLCBhbmQKLSAgICBleHRyYWN0IHRvIC4uXHh6LTUuMC4zLiBJZiB5b3UgYXJlIHVzaW5nIGEgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiBsaWJsem1hLAotICAgIGl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIHJlbmFtZSB0aGUgZGlyZWN0b3J5IGZyb20geHotPFZFUlNJT04+IHRvIHh6LTUuMC4zLgotCisgICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJsem1hIGNvbXByZXNzaW9uIGxpYnJhcnksIHVzaW5nIHByZS1idWlsdAorICAgIGJpbmFyaWVzIG9mIFhaIFV0aWxzIHZlcnNpb24gNS4wLjUKKyAgICBIb21lcGFnZToKKyAgICAgICAgaHR0cDovL3R1a2Fhbmkub3JnL3h6LwogX3NzbAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgc2VjdXJlIHNvY2tldHMgbGlicmFyeS4KKyAgICBQeXRob24gd3JhcHBlciBmb3IgdmVyc2lvbiAxLjAuMWUgb2YgdGhlIE9wZW5TU0wgc2VjdXJlIHNvY2tldHMKKyAgICBsaWJyYXJ5LCB3aGljaCBpcyBidWlsdCBieSBzc2wudmN4cHJvagorICAgIEhvbWVwYWdlOgorICAgICAgICBodHRwOi8vd3d3Lm9wZW5zc2wub3JnLwogCi0gICAgR2V0IHRoZSBzb3VyY2UgY29kZSB0aHJvdWdoCisgICAgQnVpbGRpbmcgT3BlblNTTCByZXF1aXJlcyBuYXNtLmV4ZSAodGhlIE5ldHdpZGUgQXNzZW1ibGVyKSwgdmVyc2lvbgorICAgIDIuMTAgb3IgbmV3ZXIgZnJvbQorICAgICAgICBodHRwOi8vd3d3Lm5hc20udXMvCisgICAgdG8gYmUgc29tZXdoZXJlIG9uIHlvdXIgUEFUSC4gIE1vcmUgcmVjZW50IHZlcnNpb25zIG9mIE9wZW5TU0wgbWF5CisgICAgbmVlZCBhIGxhdGVyIHZlcnNpb24gb2YgTkFTTS4gSWYgT3BlblNTTCdzIHNlbGYgdGVzdHMgZG9uJ3QgcGFzcywKKyAgICB5b3Ugc2hvdWxkIGZpcnN0IHRyeSB0byB1cGRhdGUgTkFTTSBhbmQgZG8gYSBmdWxsIHJlYnVpbGQgb2YKKyAgICBPcGVuU1NMLgogCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvb3BlbnNzbC0xLjAuMWUKLQotICAgICoqIE5PVEU6IGlmIHlvdSB1c2UgdGhlIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsKC1hbWQ2NCkuYmF0IGFwcHJvYWNoIGZvcgotICAgIG9idGFpbmluZyBleHRlcm5hbCBzb3VyY2VzIHRoZW4geW91IGRvbid0IG5lZWQgdG8gbWFudWFsbHkgZ2V0IHRoZSBzb3VyY2UKLSAgICBhYm92ZSB2aWEgc3VidmVyc2lvbi4gKioKLQotICAgIEFsdGVybmF0aXZlbHksIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnLgotICAgIFlvdSBjYW4gKHRoZW9yZXRpY2FsbHkpIHVzZSBhbnkgdmVyc2lvbiBvZiBPcGVuU1NMIHlvdSBsaWtlIC0gdGhlCi0gICAgYnVpbGQgcHJvY2VzcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBsYXRlc3QgdmVyc2lvbi4KLQotICAgIFlvdSBtdXN0IGluc3RhbGwgdGhlIE5BU00gYXNzZW1ibGVyIDIuMTAgb3IgbmV3ZXIgZnJvbQotICAgICAgICBodHRwOi8vbmFzbS5zZi5uZXQKLSAgICBmb3IgeDg2IGJ1aWxkcy4gIFB1dCBuYXNtLmV4ZSBhbnl3aGVyZSBpbiB5b3VyIFBBVEguIE1vcmUgcmVjZW50Ci0gICAgdmVyc2lvbnMgb2YgT3BlblNTTCBtYXkgbmVlZCBhIGxhdGVyIHZlcnNpb24gb2YgTkFTTS4gSWYgT3BlblNTTCdzIHNlbGYKLSAgICB0ZXN0cyBkb24ndCBwYXNzLCB5b3Ugc2hvdWxkIGZpcnN0IHRyeSB0byB1cGRhdGUgTkFTTSBhbmQgZG8gYSBmdWxsCi0gICAgcmVidWlsZCBvZiBPcGVuU1NMLgotCi0gICAgWW91IGNhbiBhbHNvIGluc3RhbGwgQWN0aXZlUGVybCBmcm9tCisgICAgSWYgeW91IGxpa2UgdG8gdXNlIHRoZSBvZmZpY2lhbCBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGZpbGVzIGZyb20KKyAgICBweXRob24ub3JnJ3Mgc3VidmVyc2lvbiByZXBvc2l0b3J5LCBQZXJsIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZQorICAgIG5lY2Vzc2FyeSBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLiAgQWN0aXZlUGVybCBpcyBhdmFpbGFibGUKKyAgICBmcm9tCiAgICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL2FjdGl2ZXBlcmwvCi0gICAgaWYgeW91IGxpa2UgdG8gdXNlIHRoZSBvZmZpY2lhbCBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGZpbGVzIGZyb20KLSAgICBweXRob24ncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuIFRoZSBzdm4gdmVyc2lvbiBjb250YWlucyBwcmUtYnVpbGQKLSAgICBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgorICAgIFRoZSBzdm4ucHl0aG9uLm9yZyB2ZXJzaW9uIGNvbnRhaW5zIHByZS1idWlsdCBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5CisgICAgZmlsZXMuCiAKLSAgICBUaGUgYnVpbGQgcHJvY2VzcyBtYWtlcyBzdXJlIHRoYXQgbm8gcGF0ZW50ZWQgYWxnb3JpdGhtcyBhcmUgaW5jbHVkZWQuCi0gICAgRm9yIG5vdyBSQzUsIE1EQzIgYW5kIElERUEgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLiBZb3UgbWF5IGhhdmUKLSAgICB0byBtYW51YWxseSByZW1vdmUgJChPQkpfRClcaV8qLm9iaiBmcm9tIG1zXG50Lm1hayBpZiB0aGUgYnVpbGQgcHJvY2VzcwotICAgIGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIGZpbGVzIG9yIGZvcmJpZGRlbiBJREVBLiBBZ2FpbiB0aGUgZmlsZXMgcHJvdmlkZWQKLSAgICBpbiB0aGUgc3VidmVyc2lvbiByZXBvc2l0b3J5IGFyZSBhbHJlYWR5IGZpeGVkLgorICAgIFRoZSBidWlsZCBwcm9jZXNzIG1ha2VzIHN1cmUgdGhhdCBubyBwYXRlbnRlZCBhbGdvcml0aG1zIGFyZQorICAgIGluY2x1ZGVkLiAgRm9yIG5vdyBSQzUsIE1EQzIgYW5kIElERUEgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLgorICAgIFlvdSBtYXkgaGF2ZSB0byBtYW51YWxseSByZW1vdmUgJChPQkpfRClcaV8qLm9iaiBmcm9tIG1zXG50Lm1hayBpZgorICAgIHVzaW5nIG9mZmljaWFsIHNvdXJjZXM7IHRoZSBzdm4ucHl0aG9uLm9yZy1ob3N0ZWQgdmVyc2lvbiBpcyBhbHJlYWR5CisgICAgZml4ZWQuCiAKLSAgICBUaGUgTVNWQyBwcm9qZWN0IHNpbXBseSBpbnZva2VzIFBDQnVpbGQvYnVpbGRfc3NsLnB5IHRvIHBlcmZvcm0KLSAgICB0aGUgYnVpbGQuICBUaGlzIFB5dGhvbiBzY3JpcHQgbG9jYXRlcyBhbmQgYnVpbGRzIHlvdXIgT3BlblNTTAotICAgIGluc3RhbGxhdGlvbiwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG1ha2VmaWxlIHRvIGJ1aWxkIHRoZSBmaW5hbCAucHlkLgorICAgIFRoZSBzc2wudmN4cHJvaiBzdWItcHJvamVjdCBzaW1wbHkgaW52b2tlcyBQQ2J1aWxkL2J1aWxkX3NzbC5weSwKKyAgICB3aGljaCBsb2NhdGVzIGFuZCBidWlsZHMgT3BlblNTTC4KIAogICAgIGJ1aWxkX3NzbC5weSBhdHRlbXB0cyB0byBjYXRjaCB0aGUgbW9zdCBjb21tb24gZXJyb3JzIChzdWNoIGFzIG5vdAogICAgIGJlaW5nIGFibGUgdG8gZmluZCBPcGVuU1NMIHNvdXJjZXMsIG9yIG5vdCBiZWluZyBhYmxlIHRvIGZpbmQgYSBQZXJsCi0gICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLgotICAgIElmIHlvdSBoYXZlIGEgcHJvYmxlbSB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBoYW5kbGVkIGNvcnJlY3RseQotICAgIChlZywgeW91IGtub3cgeW91IGhhdmUgQWN0aXZlUGVybCBidXQgd2UgY2FuJ3QgZmluZCBpdCksIHBsZWFzZSB0YWtlCi0gICAgYSBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQorICAgIHRoYXQgd29ya3Mgd2l0aCBPcGVuU1NMKSBhbmQgZ2l2ZSBhIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZS4gIElmCisgICAgeW91IGhhdmUgYSBwcm9ibGVtIHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5IChlLmcuLAorICAgIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZSBhCisgICAgcGVlayBhdCBidWlsZF9zc2wucHkgYW5kIHN1Z2dlc3QgcGF0Y2hlcy4gIE5vdGUgdGhhdCBidWlsZF9zc2wucHkKICAgICBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZC1saW5lLgogCi0gICAgYnVpbGRfc3NsLnB5L01TVkMgaXNuJ3QgY2xldmVyIGVub3VnaCB0byBjbGVhbiBPcGVuU1NMIC0geW91IG11c3QgZG8KLSAgICB0aGlzIGJ5IGhhbmQuCisgICAgVGhlIHNzbCBzdWItcHJvamVjdCBkb2VzIG5vdCBoYXZlIHRoZSBhYmlsaXR5IHRvIGNsZWFuIHRoZSBPcGVuU1NMCisgICAgYnVpbGQ7IGlmIHlvdSBuZWVkIHRvIHJlYnVpbGQsIHlvdSdsbCBoYXZlIHRvIGNsZWFuIGl0IGJ5IGhhbmQuCitfc3FsaXRlMworICAgIFdyYXBzIFNRTGl0ZSAzLjguMSwgd2hpY2ggaXMgaXRzZWxmIGJ1aWx0IGJ5IHNxbGl0ZTMudmN4cHJvagorICAgIEhvbWVwYWdlOgorICAgICAgICBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvCitfdGtpbnRlcgorICAgIFdyYXBzIHZlcnNpb24gOC42LjEgb2YgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uCisgICAgSG9tZXBhZ2U6CisgICAgICAgIGh0dHA6Ly93d3cudGNsLnRrLwogCi1UaGUgc3VicHJvamVjdHMgYWJvdmUgd3JhcCBleHRlcm5hbCBwcm9qZWN0cyBQeXRob24gZG9lc24ndCBjb250cm9sLCBhbmQgYXMKLXN1Y2gsIGEgbGl0dGxlIG1vcmUgd29yayBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBkb3dubG9hZCB0aGUgcmVsZXZhbnQgc291cmNlCi1maWxlcyBmb3IgZWFjaCBwcm9qZWN0IGJlZm9yZSB0aGV5IGNhbiBiZSBidWlsdC4gIFRoZSBidWlsZGJvdHMgZG8gdGhpcyBlYWNoCi10aW1lIHRoZXkncmUgYnVpbHQsIHNvIHRoZSBlYXNpZXN0IGFwcHJvYWNoIGlzIHRvIHJ1biBlaXRoZXIgZXh0ZXJuYWwuYmF0IG9yCi1leHRlcm5hbC1hbWQ2NC5iYXQgaW4gdGhlIC4uXFRvb2xzXGJ1aWxkYm90IGRpcmVjdG9yeSBmcm9tIC4uXCwgaS5lLjoKKyAgICBVbmxpa2UgdGhlIG90aGVyIGV4dGVybmFsIGxpYnJhcmllcyBsaXN0ZWQgYWJvdmUsIFRrIG11c3QgYmUgYnVpbHQKKyAgICBzZXBhcmF0ZWx5IGJlZm9yZSB0aGUgX3RraW50ZXIgbW9kdWxlIGNhbiBiZSBidWlsdC4gVGhpcyBtZWFucyB0aGF0CisgICAgYSBwcmUtYnVpbHQgVGNsL1RrIGluc3RhbGxhdGlvbiBpcyBleHBlY3RlZCBpbiAuLlwuLlx0Y2x0ayAodGNsdGs2NAorICAgIGZvciA2NC1iaXQpIHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5LiAgU2VlICJHZXR0aW5nIEV4dGVybmFsCisgICAgU291cmNlcyIgYmVsb3cgZm9yIHRoZSBlYXNpZXN0IG1ldGhvZCB0byBlbnN1cmUgVGNsL1RrIGlzIGJ1aWx0LgogCi0gICAgQzpcLi5cc3ZuLnB5dGhvbi5vcmdccHJvamVjdHNccHl0aG9uXHRydW5rXFBDYnVpbGQ+Y2QgLi4KLSAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cdHJ1bms+VG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwuYmF0CiAKLVRoaXMgZXh0cmFjdHMgYWxsIHRoZSBleHRlcm5hbCBzdWJwcm9qZWN0cyBmcm9tIGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9leHRlcm5hbAotdmlhIFN1YnZlcnNpb24gKHNvIHlvdSdsbCBuZWVkIGFuIHN2bi5leGUgb24geW91ciBQQVRIKSBhbmQgcGxhY2VzIHRoZW0gaW4KLS4uXC4uIChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkuICBUaGUgZXh0ZXJuYWwoLWFtZDY0KS5iYXQgc2NyaXB0cyB3aWxsCi1hbHNvIGJ1aWxkIGEgZGVidWcgYnVpbGQgb2YgVGNsL1RrOyB0aGVyZSBhcmVuJ3QgYW55IGVxdWl2YWxlbnQgYmF0Y2ggZmlsZXMKLWZvciBidWlsZGluZyByZWxlYXNlIHZlcnNpb25zIG9mIFRjbC9UayBseWluZyBhcm91bmQgaW4gdGhlIFRvb2xzXGJ1aWxkYm90Ci1kaXJlY3RvcnkuICBJZiB5b3UgbmVlZCB0byBidWlsZCBhIHJlbGVhc2UgdmVyc2lvbiBvZiBUY2wvVGsgaXQgaXNuJ3QgaGFyZAotdGhvdWdoLCB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgZXh0ZXJuYWwoLWFtZDY0KS5iYXQgZmlsZSBhbmQgZmluZCB0aGUKLXR3byBubWFrZSBsaW5lcywgdGhlbiBjYWxsIGVhY2ggb25lIHdpdGhvdXQgdGhlICdERUJVRz0xJyBwYXJhbWV0ZXIsIGkuZS46CitHZXR0aW5nIEV4dGVybmFsIFNvdXJjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGFzdCBjYXRlZ29yeSBvZiBzdWItcHJvamVjdHMgbGlzdGVkIGFib3ZlIHdyYXAgZXh0ZXJuYWwgcHJvamVjdHMKK1B5dGhvbiBkb2Vzbid0IGNvbnRyb2wsIGFuZCBhcyBzdWNoIGEgbGl0dGxlIG1vcmUgd29yayBpcyByZXF1aXJlZCBpbgorb3JkZXIgdG8gZG93bmxvYWQgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBmb3IgZWFjaCBwcm9qZWN0IGJlZm9yZSB0aGV5CitjYW4gYmUgYnVpbHQuICBUaGUgYnVpbGRib3RzIG11c3QgZW5zdXJlIHRoYXQgYWxsIGxpYnJhcmllcyBhcmUgcHJlc2VudAorYmVmb3JlIGJ1aWxkaW5nLCBzbyB0aGUgZWFzaWVzdCBhcHByb2FjaCBpcyB0byBydW4gZWl0aGVyIGV4dGVybmFsLmJhdAorb3IgZXh0ZXJuYWwtYW1kNjQuYmF0IChkZXBlbmRpbmcgb24gcGxhdGZvcm0pIGluIHRoZSAuLlxUb29sc1xidWlsZGJvdAorZGlyZWN0b3J5IGZyb20gLi5cLCBpLmUuOgorCisgICAgQzpccHl0aG9uXGNweXRob25cUENidWlsZD5jZCAuLgorICAgIEM6XHB5dGhvblxjcHl0aG9uPlRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLmJhdAorCitUaGlzIGV4dHJhY3RzIGFsbCB0aGUgZXh0ZXJuYWwgc3ViLXByb2plY3RzIGZyb20KKyAgICBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwKK3ZpYSBTdWJ2ZXJzaW9uIChzbyB5b3UnbGwgbmVlZCBhbiBzdm4uZXhlIG9uIHlvdXIgUEFUSCkgYW5kIHBsYWNlcyB0aGVtCitpbiAuLlwuLiAocmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkpLgorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGRvd25sb2FkIHNvdXJjZXMgZnJvbSBlYWNoIHByb2plY3QncyBob21lcGFnZSwKK3Rob3VnaCB5b3UgbWF5IGhhdmUgdG8gY2hhbmdlIHRoZSBuYW1lcyBvZiBzb21lIGZvbGRlcnMgaW4gb3JkZXIgdG8gbWFrZQordGhpbmdzIHdvcmsuICBGb3IgaW5zdGFuY2UsIGlmIHlvdSB3ZXJlIHRvIGRvd25sb2FkIGEgdmVyc2lvbiA1LjAuNyBvZgorWFogVXRpbHMsIHlvdSB3b3VsZCBuZWVkIHRvIGV4dHJhY3QgdGhlIGFyY2hpdmUgaW50byAuLlwuLlx4ei01LjAuNQorYW55d2F5LCBzaW5jZSB0aGF0IGlzIHdoZXJlIHRoZSBzb2x1dGlvbiBpcyBzZXQgdG8gbG9vayBmb3IgeHouICBUaGUKK3NhbWUgaXMgdHJ1ZSBmb3IgYWxsIG90aGVyIGV4dGVybmFsIHByb2plY3RzLgorCitUaGUgZXh0ZXJuYWwoLWFtZDY0KS5iYXQgc2NyaXB0cyB3aWxsIGFsc28gYnVpbGQgYSBkZWJ1ZyBidWlsZCBvZgorVGNsL1RrLCBidXQgdGhlcmUgYXJlbid0IGFueSBlcXVpdmFsZW50IGJhdGNoIGZpbGVzIGZvciBidWlsZGluZyByZWxlYXNlCit2ZXJzaW9ucyBvZiBUY2wvVGsgY3VycmVudGx5IGF2YWlsYWJsZS4gIElmIHlvdSBuZWVkIHRvIGJ1aWxkIGEgcmVsZWFzZQordmVyc2lvbiBvZiBUY2wvVGssIGp1c3QgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGV4dGVybmFsKC1hbWQ2NCkuYmF0CitmaWxlIGFuZCBmaW5kIHRoZSB0d28gbm1ha2UgbGluZXMsIHRoZW4gY2FsbCBlYWNoIG9uZSB3aXRob3V0IHRoZQorJ0RFQlVHPTEnIHBhcmFtZXRlciwgaS5lLjoKIAogVGhlIGV4dGVybmFsLWFtZDY0LmJhdCBmaWxlIGNvbnRhaW5zIHRoaXMgZm9yIHRjbDoKICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbCBpbnN0YWxsCkBAIC0yMDIsODkgKzI2MCw1NCBAQAogU28gZm9yIGEgcmVsZWFzZSBidWlsZCwgeW91J2QgY2FsbCBpdCBhczoKICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBjbGVhbiBhbGwgaW5zdGFsbAogCi0gICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwotICAgIFhYWCBPdXIgaW5zdGFsbGVyIGNvcGllcyBhIGxvdCBvZiBzdHVmZiBvdXQgb2YgdGhlIFRjbC9UayBpbnN0YWxsCi0gICAgWFhYIGRpcmVjdG9yeS4gIElzIGFsbCBvZiB0aGF0IHJlYWxseSBuZWVkZWQgZm9yIFB5dGhvbiB1c2Ugb2YgVGNsL1RrPworTm90ZSB0aGF0IHRoZSBhYm92ZSBjb21tYW5kIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiAuLlwuLlx0Y2wtOC42LjEuMFx3aW4KKyhyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSk7IGRvbid0IGZvcmdldCB0byBidWlsZCBUayBhcyB3ZWxsIGFzIFRjbCEKIAotVGhpcyB3aWxsIGJlIGNsZWFuZWQgdXAgaW4gdGhlIGZ1dHVyZTsgaWRlYWxseSBUY2wvVGsgd2lsbCBiZSBicm91Z2h0IGludG8gb3VyCi1wY2J1aWxkLnNsbiBhcyBjdXN0b20gLnZjeHByb2ogZmlsZXMsIGp1c3QgYXMgd2UndmUgcmVjZW50bHkgZG9uZSB3aXRoIHRoZQotc3FsaXRlMy52Y3hwcm9qIGZpbGUsIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBuZWVkIGZvciBUY2wvVGsgdG8gYmUgYnVpbHQKLXNlcGFyYXRlbHkgdmlhIGEgYmF0Y2ggZmlsZS4KK1RoaXMgd2lsbCBiZSBjbGVhbmVkIHVwIGluIHRoZSBmdXR1cmU7IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTk2OAordHJhY2tzIGFkZGluZyBhIG5ldyB0Y2x0ay52Y3hwcm9qIGZpbGUgdGhhdCB3aWxsIGJ1aWxkIFRjbC9UayBhbmQgVGl4Cit0aGUgc2FtZSB3YXkgdGhlIG90aGVyIGV4dGVybmFsIHByb2plY3RzIGxpc3RlZCBhYm92ZSBhcmUgYnVpbHQuCiAKLVhYWCB0cmVudC5uZWxzb24gMDItQXByLTA4OgotICAgIEhhdmluZyB0aGUgZXh0ZXJuYWwgc3VicHJvamVjdHMgaW4gLi5cLi4gcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkgaXMgYQotICAgIGJpdCBvZiBhIG51aXNhbmNlIHdoZW4geW91J3JlIHdvcmtpbmcgb24gcHkzayBhbmQgdHJ1bmsgaW4gcGFyYWxsZWwgYW5kCi0gICAgeW91ciBkaXJlY3RvcnkgbGF5b3V0IG1pbWljcyB0aGF0IG9mIFB5dGhvbidzIHN1YnZlcnNpb24gbGF5b3V0LCBlLmcuOgotCi0gICAgICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblx0cnVuawotICAgICAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cYnJhbmNoZXNccHkzawotICAgICAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cYnJhbmNoZXNccmVsZWFzZTI1LW1haW50Ci0KLSAgICBJJ2QgbGlrZSB0byBjaGFuZ2UgdGhpbmdzIHNvIHRoYXQgZXh0ZXJuYWwgc3VicHJvamVjdHMgYXJlIGZldGNoZWQgZnJvbQotICAgIC4uXGV4dGVybmFsIGluc3RlYWQgb2YgLi5cLi4sIHRoZW4gcHJvdmlkZSBzb21lIGhlbHBlciBzY3JpcHRzIG9yIGJhdGNoCi0gICAgZmlsZXMgdGhhdCB3b3VsZCBzZXQgdXAgYSBuZXcgLi5cZXh0ZXJuYWwgZGlyZWN0b3J5IHdpdGggc3ZuIGNoZWNrb3V0cyBvZgotICAgIHRoZSByZWxldmFudCBicmFuY2hlcyBpbiBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvLCBvcgotICAgIGFsdGVybmF0aXZlbHksIHVzZSBqdW5jdGlvbnMgdG8gbGluayAuLlxleHRlcm5hbCB3aXRoIGEgcHJlLWV4aXN0aW5nCi0gICAgZXh0ZXJuYWxzIGRpcmVjdG9yeSBiZWluZyB1c2VkIGJ5IGFub3RoZXIgYnJhbmNoLiAgaS5lLiBpZiBJJ20gdXN1YWxseQotICAgIHdvcmtpbmcgb24gdHJ1bmsgKGFuZCBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCB0cnVua1xleHRlcm5hbCB2aWEgdGhlCi0gICAgcHJvdmlkZWQgYmF0Y2ggZmlsZSksIGFuZCB3YW50IHRvIGRvIHNvbWUgd29yayBvbiBweTNrLCBJJ2Qgc2V0IHVwIGEKLSAgICBqdW5jdGlvbiBhcyBmb2xsb3dzICh1c2luZyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBhYm92ZSBhcyBhbiBleGFtcGxlKToKLQotICAgICAgICBDOlwuLlxweXRob25cdHJ1bmtcZXh0ZXJuYWwgPC0gYWxyZWFkeSBleGlzdHMgYW5kIGhhcyBidWlsdCB2ZXJzaW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGV4dGVybmFsIHN1YnByb2plY3RzCi0KLSAgICAgICAgQzpcLi5ccHl0aG9uXGJyYW5jaGVzXHB5M2s+bGlua2QuZXhlIGV4dGVybmFsIC4uXC4uXHRydW5rXGV4dGVybmFsCi0gICAgICAgIExpbmsgY3JlYXRlZCBhdDogZXh0ZXJuYWwKLQotICAgIE9ubHkgYSBzbGlnaHQgdHdlYWsgd291bGQgYmUgbmVlZGVkIHRvIHRoZSBidWlsZGJvdHMgc3VjaCB0aGF0IGJvdHMKLSAgICBidWlsZGluZyB0cnVuayBhbmQgcHkzayBjb3VsZCBtYWtlIHVzZSBvZiB0aGUgc2FtZSBmYWNpbGl0eS4gICgyLjUueAotICAgIGJ1aWxkcyBuZWVkIHRvIGJlIGtlcHQgc2VwYXJhdGUgYXMgdGhleSdyZSB1c2luZyBWaXN1YWwgU3R1ZGlvIDcuMS4pCi0vWFhYIHRyZW50Lm5lbHNvbiAwMi1BcHItMDgKLQotQnVpbGRpbmcgZm9yIEl0YW5pdW0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU9mZmljaWFsIHN1cHBvcnQgZm9yIEl0YW5pdW0gYnVpbGRzIGhhdmUgYmVlbiBkcm9wcGVkIGZyb20gdGhlIGJ1aWxkLiBQbGVhc2UKLWNvbnRhY3QgdXMgYW5kIHByb3ZpZGUgcGF0Y2hlcyBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gSXRhbml1bSBidWlsZHMuCiAKIEJ1aWxkaW5nIGZvciBBTUQ2NAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBidWlsZCBwcm9jZXNzIGZvciBBTUQ2NCAvIHg2NCBpcyB2ZXJ5IHNpbWlsYXIgdG8gc3RhbmRhcmQgYnVpbGRzLiBZb3UganVzdAotaGF2ZSB0byBzZXQgeDY0IGFzIHBsYXRmb3JtLiBJbiBhZGRpdGlvbiwgdGhlIEhPU1RfUFlUSE9OIGVudmlyb25tZW50IHZhcmlhYmxlCi1tdXN0IHBvaW50IHRvIGEgUHl0aG9uIGludGVycHJldGVyIChhdCBsZWFzdCAyLjQpLCB0byBzdXBwb3J0IGNyb3NzLWNvbXBpbGF0aW9uLgorVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIEFNRDY0IC8geDY0IGlzIHZlcnkgc2ltaWxhciB0byBzdGFuZGFyZCBidWlsZHMsCit5b3UganVzdCBoYXZlIHRvIHNldCB4NjQgYXMgcGxhdGZvcm0uIEluIGFkZGl0aW9uLCB0aGUgSE9TVF9QWVRIT04KK2Vudmlyb25tZW50IHZhcmlhYmxlIG11c3QgcG9pbnQgdG8gYSBQeXRob24gaW50ZXJwcmV0ZXIgKGF0IGxlYXN0IDIuNCksCit0byBzdXBwb3J0IGNyb3NzLWNvbXBpbGF0aW9uIGZyb20gV2luMzIuICBOb3RlIHRoYXQgVmlzdWFsIFN0dWRpbworcmVxdWlyZXMgZWl0aGVyIFN0YW5kYXJkIEVkaXRpb24gb3IgYmV0dGVyLCBvciBFeHByZXNzIEVkaXRpb24gd2l0aCB0aGUKK1dpbmRvd3MgU0RLIDY0LWJpdCBjb21waWxlcnMgdG8gYmUgYXZhaWxhYmxlIGluIG9yZGVyIHRvIGJ1aWxkIDY0LWJpdAorYmluYXJpZXMuCiAKLUJ1aWxkaW5nIFB5dGhvbiBVc2luZyB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NaWNyb3NvZnQgaGFzIHdpdGhkcmF3biB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyLCBzbyB0aGlzIGNhbiBubyBsb25nZXIKLWJlIGNvbnNpZGVyZWQgYSBzdXBwb3J0ZWQgb3B0aW9uLiBJbnN0ZWFkIHlvdSBjYW4gdXNlIHRoZSBmcmVlIFZTIEMrKyBFeHByZXNzCi1FZGl0aW9uLgogCiBQcm9maWxlIEd1aWRlZCBPcHRpbWl6YXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgc29sdXRpb24gaGFzIHR3byBjb25maWd1cmF0aW9ucyBmb3IgUEdPLiBUaGUgUEdJbnN0cnVtZW50Ci1jb25maWd1cmF0aW9uIG11c3QgYmUgYnVpbGQgZmlyc3QuIFRoZSBQR0luc3RydW1lbnQgYmluYXJpZXMgYXJlCi1saW5rZWQgYWdhaW5zdCBhIHByb2ZpbGluZyBsaWJyYXJ5IGFuZCBjb250YWluIGV4dHJhIGRlYnVnCi1pbmZvcm1hdGlvbi4gVGhlIFBHVXBkYXRlIGNvbmZpZ3VyYXRpb24gdGFrZXMgdGhlIHByb2ZpbGluZyBkYXRhIGFuZAotZ2VuZXJhdGVzIG9wdGltaXplZCBiaW5hcmllcy4KK2NvbmZpZ3VyYXRpb24gbXVzdCBiZSBidWlsdCBmaXJzdC4gVGhlIFBHSW5zdHJ1bWVudCBiaW5hcmllcyBhcmUgbGlua2VkCithZ2FpbnN0IGEgcHJvZmlsaW5nIGxpYnJhcnkgYW5kIGNvbnRhaW4gZXh0cmEgZGVidWcgaW5mb3JtYXRpb24uIFRoZQorUEdVcGRhdGUgY29uZmlndXJhdGlvbiB0YWtlcyB0aGUgcHJvZmlsaW5nIGRhdGEgYW5kIGdlbmVyYXRlcyBvcHRpbWl6ZWQKK2JpbmFyaWVzLgogCi1UaGUgYnVpbGRfcGdvLmJhdCBzY3JpcHQgYXV0b21hdGVzIHRoZSBjcmVhdGlvbiBvZiBvcHRpbWl6ZWQgYmluYXJpZXMuIEl0Ci1jcmVhdGVzIHRoZSBQR0kgZmlsZXMsIHJ1bnMgdGhlIHVuaXQgdGVzdCBzdWl0ZSBvciBQeUJlbmNoIHdpdGggdGhlIFBHSQotcHl0aG9uIGFuZCBmaW5hbGx5IGNyZWF0ZXMgdGhlIG9wdGltaXplZCBmaWxlcy4KK1RoZSBidWlsZF9wZ28uYmF0IHNjcmlwdCBhdXRvbWF0ZXMgdGhlIGNyZWF0aW9uIG9mIG9wdGltaXplZCBiaW5hcmllcy4KK0l0IGNyZWF0ZXMgdGhlIFBHSSBmaWxlcywgcnVucyB0aGUgdW5pdCB0ZXN0IHN1aXRlIG9yIFB5QmVuY2ggd2l0aCB0aGUKK1BHSSBweXRob24sIGFuZCBmaW5hbGx5IGNyZWF0ZXMgdGhlIG9wdGltaXplZCBmaWxlcy4KIAotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2U3azMyZjRrKFZTLjEwMCkuYXNweAorU2VlCisgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2U3azMyZjRrKFZTLjEwMCkuYXNweAorZm9yIG1vcmUgb24gdGhpcyB0b3BpYy4KKwogCiBTdGF0aWMgbGlicmFyeQogLS0tLS0tLS0tLS0tLS0KIAotVGhlIHNvbHV0aW9uIGhhcyBubyBjb25maWd1cmF0aW9uIGZvciBzdGF0aWMgbGlicmFyaWVzLiBIb3dldmVyIGl0IGlzIGVhc3kKLWl0IGJ1aWxkIGEgc3RhdGljIGxpYnJhcnkgaW5zdGVhZCBvZiBhIERMTC4gWW91IHNpbXBseSBoYXZlIHRvIHNldCB0aGUKLSJDb25maWd1cmF0aW9uIFR5cGUiIHRvICJTdGF0aWMgTGlicmFyeSAoLmxpYikiIGFuZCBhbHRlciB0aGUgcHJlcHJvY2Vzc29yCi1tYWNybyAiUHlfRU5BQkxFX1NIQVJFRCIgdG8gIlB5X05PX0VOQUJMRV9TSEFSRUQiLiBZb3UgbWF5IGFsc28gaGF2ZSB0bwotY2hhbmdlIHRoZSAiUnVudGltZSBMaWJyYXJ5IiBmcm9tICJNdWx0aS10aHJlYWRlZCBETEwgKC9NRCkiIHRvCi0iTXVsdGktdGhyZWFkZWQgKC9NVCkiLgorVGhlIHNvbHV0aW9uIGhhcyBubyBjb25maWd1cmF0aW9uIGZvciBzdGF0aWMgbGlicmFyaWVzLiBIb3dldmVyIGl0IGlzCitlYXN5IHRvIGJ1aWxkIGEgc3RhdGljIGxpYnJhcnkgaW5zdGVhZCBvZiBhIERMTC4gWW91IHNpbXBseSBoYXZlIHRvIHNldAordGhlICJDb25maWd1cmF0aW9uIFR5cGUiIHRvICJTdGF0aWMgTGlicmFyeSAoLmxpYikiIGFuZCBhbHRlciB0aGUKK3ByZXByb2Nlc3NvciBtYWNybyAiUHlfRU5BQkxFX1NIQVJFRCIgdG8gIlB5X05PX0VOQUJMRV9TSEFSRUQiLiBZb3UgbWF5CithbHNvIGhhdmUgdG8gY2hhbmdlIHRoZSAiUnVudGltZSBMaWJyYXJ5IiBmcm9tICJNdWx0aS10aHJlYWRlZCBETEwKKygvTUQpIiB0byAiTXVsdGktdGhyZWFkZWQgKC9NVCkiLgorCiAKIFZpc3VhbCBTdHVkaW8gcHJvcGVydGllcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yOTMsNiArMzE2LDcgQEAKICgqLnByb3BzKS4gVGhlIHByb3BlcnRpZXMgY2FuIGJlIHZpZXdlZCBhbmQgYWx0ZXJlZCBpbiB0aGUgUHJvcGVydHkKIE1hbmFnZXIgKFZpZXcgLT4gT3RoZXIgV2luZG93cyAtPiBQcm9wZXJ0eSBNYW5hZ2VyKS4KIAorVGhlIHByb3BlcnR5IGZpbGVzIHVzZWQgYXJlICgrLS0gPSAiYWxzbyBpbXBvcnRzIik6CiAgKiBkZWJ1ZyAoZGVidWcgbWFjcm86IF9ERUJVRykKICAqIHBnaW5zdHJ1bWVudCAoUEdPKQogICogcGd1cGRhdGUgKFBHTykKQEAgLTMwNSwxNSArMzI5LDE4IEBACiAgICAgKy0tIHB5cHJvamVjdAogICogcHlwcm9qZWN0IChiYXNlIHNldHRpbmdzIGZvciBhbGwgcHJvamVjdHMsIHVzZXIgbWFjcm9zIGxpa2UgUHlEbGxOYW1lKQogICogcmVsZWFzZSAocmVsZWFzZSBtYWNybzogTkRFQlVHKQorICogc3FsaXRlMyAodXNlZCBvbmx5IGJ5IHNxbGl0ZTMudmN4cHJvaikKICAqIHg2NCAoQU1ENjQgLyB4NjQgcGxhdGZvcm0gc3BlY2lmaWMgc2V0dGluZ3MpCiAKLVRoZSBweXByb2plY3QgcHJvcGVydHlmaWxlIGRlZmluZXMgX1dJTjMyIGFuZCB4NjQgZGVmaW5lcyBfV0lONjQgYW5kIF9NX1g2NAotYWx0aG91Z2ggdGhlIG1hY3JvcyBhcmUgc2V0IGJ5IHRoZSBjb21waWxlciwgdG9vLiBUaGUgR1VJIGRvZXNuJ3QgYWx3YXlzIGtub3cKLWFib3V0IHRoZSBtYWNyb3MgYW5kIGNvbmZ1c2UgdGhlIHVzZXIgd2l0aCBmYWxzZSBpbmZvcm1hdGlvbi4KK1RoZSBweXByb2plY3QgcHJvcGVydHkgZmlsZSBkZWZpbmVzIF9XSU4zMiBhbmQgeDY0IGRlZmluZXMgX1dJTjY0IGFuZAorX01fWDY0IGFsdGhvdWdoIHRoZSBtYWNyb3MgYXJlIHNldCBieSB0aGUgY29tcGlsZXIsIHRvby4gVGhlIEdVSSBkb2Vzbid0CithbHdheXMga25vdyBhYm91dCB0aGUgbWFjcm9zIGFuZCBjb25mdXNlIHRoZSB1c2VyIHdpdGggZmFsc2UKK2luZm9ybWF0aW9uLgogCi1ZT1VSIE9XTiBFWFRFTlNJT04gRExMcworCitZb3VyIE93biBFeHRlbnNpb24gRExMcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSWYgeW91IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIGV4dGVuc2lvbiBtb2R1bGUgRExMLCB0aGVyZSdzIGFuIGV4YW1wbGUKLXdpdGggZWFzeS10by1mb2xsb3cgaW5zdHJ1Y3Rpb25zIGluIC4uL1BDL2V4YW1wbGUvOyByZWFkIHRoZSBmaWxlCi1yZWFkbWUudHh0IHRoZXJlIGZpcnN0LgorSWYgeW91IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIGV4dGVuc2lvbiBtb2R1bGUgRExMICgucHlkKSwgdGhlcmUncyBhbgorZXhhbXBsZSB3aXRoIGVhc3ktdG8tZm9sbG93IGluc3RydWN0aW9ucyBpbiAuLlxQQ1xleGFtcGxlXDsgcmVhZCB0aGUKK2ZpbGUgcmVhZG1lLnR4dCB0aGVyZSBmaXJzdC4KZGlmZiAtLWdpdCBhL1BDYnVpbGQveHhsaW1pdGVkLnZjeHByb2ogYi9QQ2J1aWxkL3h4bGltaXRlZC52Y3hwcm9qCmluZGV4IDI2YmMyMGQuLmY5NzcwZDkgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQveHhsaW1pdGVkLnZjeHByb2oKKysrIGIvUENidWlsZC94eGxpbWl0ZWQudmN4cHJvagpAQCAtMTgzLDExICsxODMsNiBAQAogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x4eGxpbWl0ZWQuYyIgLz4KICAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KLSAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KLSAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+CmRpZmYgLS1naXQgYS9QYXJzZXIvUHl0aG9uLmFzZGwgYi9QYXJzZXIvUHl0aG9uLmFzZGwKaW5kZXggYzI0ZDg0MC4uZGViZDg5ZSAxMDA2NDQKLS0tIGEvUGFyc2VyL1B5dGhvbi5hc2RsCisrKyBiL1BhcnNlci9QeXRob24uYXNkbApAQCAtMSw0ICsxLDQgQEAKLS0tIEFTREwncyBmaXZlIGJ1aWx0aW4gdHlwZXMgYXJlIGlkZW50aWZpZXIsIGludCwgc3RyaW5nLCBieXRlcywgb2JqZWN0CistLSBBU0RMJ3Mgc2l4IGJ1aWx0aW4gdHlwZXMgYXJlIGlkZW50aWZpZXIsIGludCwgc3RyaW5nLCBieXRlcywgb2JqZWN0LCBzaW5nbGV0b24KIAogbW9kdWxlIFB5dGhvbgogewpAQCAtNjksOCArNjksOCBAQAogICAgICAgICAgfCBOdW0ob2JqZWN0IG4pIC0tIGEgbnVtYmVyIGFzIGEgUHlPYmplY3QuCiAgICAgICAgICB8IFN0cihzdHJpbmcgcykgLS0gbmVlZCB0byBzcGVjaWZ5IHJhdywgdW5pY29kZSwgZXRjPwogICAgICAgICAgfCBCeXRlcyhieXRlcyBzKQorICAgICAgICAgfCBOYW1lQ29uc3RhbnQoc2luZ2xldG9uIHZhbHVlKQogICAgICAgICAgfCBFbGxpcHNpcwotICAgICAgICAgLS0gb3RoZXIgbGl0ZXJhbHM/IGJvb2xzPwogCiAgICAgICAgICAtLSB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb24gY2FuIGFwcGVhciBpbiBhc3NpZ25tZW50IGNvbnRleHQKICAgICAgICAgIHwgQXR0cmlidXRlKGV4cHIgdmFsdWUsIGlkZW50aWZpZXIgYXR0ciwgZXhwcl9jb250ZXh0IGN0eCkKQEAgLTEwMywxMSArMTAzLDExIEBACiAgICAgZXhjZXB0aGFuZGxlciA9IEV4Y2VwdEhhbmRsZXIoZXhwcj8gdHlwZSwgaWRlbnRpZmllcj8gbmFtZSwgc3RtdCogYm9keSkKICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyAoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiAKLSAgICBhcmd1bWVudHMgPSAoYXJnKiBhcmdzLCBpZGVudGlmaWVyPyB2YXJhcmcsIGV4cHI/IHZhcmFyZ2Fubm90YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBhcmcqIGt3b25seWFyZ3MsIGlkZW50aWZpZXI/IGt3YXJnLAotICAgICAgICAgICAgICAgICAgICAgZXhwcj8ga3dhcmdhbm5vdGF0aW9uLCBleHByKiBkZWZhdWx0cywKLSAgICAgICAgICAgICAgICAgICAgIGV4cHIqIGt3X2RlZmF1bHRzKQorICAgIGFyZ3VtZW50cyA9IChhcmcqIGFyZ3MsIGFyZz8gdmFyYXJnLCBhcmcqIGt3b25seWFyZ3MsIGV4cHIqIGt3X2RlZmF1bHRzLAorICAgICAgICAgICAgICAgICBhcmc/IGt3YXJnLCBleHByKiBkZWZhdWx0cykKKwogICAgIGFyZyA9IChpZGVudGlmaWVyIGFyZywgZXhwcj8gYW5ub3RhdGlvbikKKyAgICAgICAgICAgYXR0cmlidXRlcyAoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiAKICAgICAtLSBrZXl3b3JkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBjYWxsCiAgICAga2V5d29yZCA9IChpZGVudGlmaWVyIGFyZywgZXhwciB2YWx1ZSkKZGlmZiAtLWdpdCBhL1BhcnNlci9hc2RsLnB5IGIvUGFyc2VyL2FzZGwucHkKaW5kZXggMDhhYTA1Yi4uZmMxYjE2YyAxMDA2NDQKLS0tIGEvUGFyc2VyL2FzZGwucHkKKysrIGIvUGFyc2VyL2FzZGwucHkKQEAgLTE2LDggKzE2LDkgQEAKIAogaW1wb3J0IHNwYXJrCiAKLWRlZiBvdXRwdXQoc3RyaW5nKToKLSAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cmluZyArICJcbiIpCitkZWYgb3V0cHV0KCpzdHJpbmdzKToKKyAgICBmb3IgcyBpbiBzdHJpbmdzOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cihzKSArICJcbiIpCiAKIAogY2xhc3MgVG9rZW4ob2JqZWN0KToKQEAgLTE1OCwxMSArMTU5LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJleHBlY3RlZCBhdHRyaWJ1dGVzLCBmb3VuZCAlcyIgJSBpZCkKICAgICAgICAgcmV0dXJuIFN1bShzdW0sIGF0dHJpYnV0ZXMpCiAKLSAgICBkZWYgcF9wcm9kdWN0KHNlbGYsIGluZm8pOgorICAgIGRlZiBwX3Byb2R1Y3RfMChzZWxmLCBpbmZvKToKICAgICAgICAgIiBwcm9kdWN0IDo6PSAoIGZpZWxkcyApICIKICAgICAgICAgXzAsIGZpZWxkcywgXzEgPSBpbmZvCiAgICAgICAgIHJldHVybiBQcm9kdWN0KGZpZWxkcykKIAorICAgIGRlZiBwX3Byb2R1Y3RfMShzZWxmLCBpbmZvKToKKyAgICAgICAgIiBwcm9kdWN0IDo6PSAoIGZpZWxkcyApIElkICggZmllbGRzICkgIgorICAgICAgICBfMCwgZmllbGRzLCBfMSwgaWQsIF8yLCBhdHRyaWJ1dGVzLCBfMyA9IGluZm8KKyAgICAgICAgaWYgaWQudmFsdWUgIT0gImF0dHJpYnV0ZXMiOgorICAgICAgICAgICAgcmFpc2UgQVNETFN5bnRheEVycm9yKGlkLmxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ImV4cGVjdGVkIGF0dHJpYnV0ZXMsIGZvdW5kICVzIiAlIGlkKQorICAgICAgICByZXR1cm4gUHJvZHVjdChmaWVsZHMsIGF0dHJpYnV0ZXMpCisKICAgICBkZWYgcF9zdW1fMChzZWxmLCBjb25zdHJ1Y3Rvcik6CiAgICAgICAgICIgc3VtIDo6PSBjb25zdHJ1Y3RvciAiCiAgICAgICAgIHJldHVybiBbY29uc3RydWN0b3JbMF1dCkBAIC0yMjIsNyArMjMxLDcgQEAKICAgICAgICAgIiBmaWVsZCA6Oj0gSWQgPyAiCiAgICAgICAgIHJldHVybiBGaWVsZCh0eXBlWzBdLCBvcHQ9VHJ1ZSkKIAotYnVpbHRpbl90eXBlcyA9ICgiaWRlbnRpZmllciIsICJzdHJpbmciLCAiYnl0ZXMiLCAiaW50IiwgIm9iamVjdCIpCitidWlsdGluX3R5cGVzID0gKCJpZGVudGlmaWVyIiwgInN0cmluZyIsICJieXRlcyIsICJpbnQiLCAib2JqZWN0IiwgInNpbmdsZXRvbiIpCiAKICMgYmVsb3cgaXMgYSBjb2xsZWN0aW9uIG9mIGNsYXNzZXMgdG8gY2FwdHVyZSB0aGUgQVNUIG9mIGFuIEFTVCA6LSkKICMgbm90IHN1cmUgaWYgYW55IG9mIHRoZSBtZXRob2RzIGFyZSB1c2VmdWwgeWV0LCBidXQgSSdtIGFkZGluZyB0aGVtCkBAIC0yODksMTEgKzI5OCwxNSBAQAogICAgICAgICAgICAgcmV0dXJuICJTdW0oJXMsICVzKSIgJSAoc2VsZi50eXBlcywgc2VsZi5hdHRyaWJ1dGVzKQogCiBjbGFzcyBQcm9kdWN0KEFTVCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpZWxkcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpZWxkcywgYXR0cmlidXRlcz1Ob25lKToKICAgICAgICAgc2VsZi5maWVsZHMgPSBmaWVsZHMKKyAgICAgICAgc2VsZi5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyBvciBbXQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIlByb2R1Y3QoJXMpIiAlIHNlbGYuZmllbGRzCisgICAgICAgIGlmIHNlbGYuYXR0cmlidXRlcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICJQcm9kdWN0KCVzKSIgJSBzZWxmLmZpZWxkcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJQcm9kdWN0KCVzLCAlcykiICUgKHNlbGYuZmllbGRzLCBzZWxmLmF0dHJpYnV0ZXMpCiAKIGNsYXNzIFZpc2l0b3JCYXNlKG9iamVjdCk6CiAKQEAgLTM4NSw3ICszOTgsMTEgQEAKICAgICBzY2FubmVyID0gQVNETFNjYW5uZXIoKQogICAgIHBhcnNlciA9IEFTRExQYXJzZXIoKQogCi0gICAgYnVmID0gb3BlbihmaWxlKS5yZWFkKCkKKyAgICBmID0gb3BlbihmaWxlKQorICAgIHRyeToKKyAgICAgICAgYnVmID0gZi5yZWFkKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBmLmNsb3NlKCkKICAgICB0b2tlbnMgPSBzY2FubmVyLnRva2VuaXplKGJ1ZikKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2UodG9rZW5zKQpAQCAtNDE2LDQgKzQzMyw0IEBACiAgICAgICAgICAgICBvdXRwdXQoIkNoZWNrIGZhaWxlZCIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmb3IgZGZuIGluIG1vZC5kZm5zOgotICAgICAgICAgICAgICAgIG91dHB1dChkZm4udHlwZSkKKyAgICAgICAgICAgICAgICBvdXRwdXQoZGZuLm5hbWUsIGRmbi52YWx1ZSkKZGlmZiAtLWdpdCBhL1BhcnNlci9hc2RsX2MucHkgYi9QYXJzZXIvYXNkbF9jLnB5CmluZGV4IDRiODRlMGYuLmQ2MDg2ZTYgMTAwNzU1Ci0tLSBhL1BhcnNlci9hc2RsX2MucHkKKysrIGIvUGFyc2VyL2FzZGxfYy5weQpAQCAtMjA5LDYgKzIwOSwxMSBAQAogICAgICAgICBzZWxmLmVtaXQoInN0cnVjdCBfJShuYW1lKXMgeyIgJSBsb2NhbHMoKSwgZGVwdGgpCiAgICAgICAgIGZvciBmIGluIHByb2R1Y3QuZmllbGRzOgogICAgICAgICAgICAgc2VsZi52aXNpdChmLCBkZXB0aCArIDEpCisgICAgICAgIGZvciBmaWVsZCBpbiBwcm9kdWN0LmF0dHJpYnV0ZXM6CisgICAgICAgICAgICAjIHJ1ZGltZW50YXJ5IGF0dHJpYnV0ZSBoYW5kbGluZworICAgICAgICAgICAgdHlwZSA9IHN0cihmaWVsZC50eXBlKQorICAgICAgICAgICAgYXNzZXJ0IHR5cGUgaW4gYXNkbC5idWlsdGluX3R5cGVzLCB0eXBlCisgICAgICAgICAgICBzZWxmLmVtaXQoIiVzICVzOyIgJSAodHlwZSwgZmllbGQubmFtZSksIGRlcHRoICsgMSk7CiAgICAgICAgIHNlbGYuZW1pdCgifTsiLCBkZXB0aCkKICAgICAgICAgc2VsZi5lbWl0KCIiLCBkZXB0aCkKIApAQCAtNDkzLDcgKzQ5OCwxMSBAQAogCiAgICAgZGVmIHZpc2l0RmllbGQoc2VsZiwgZmllbGQsIG5hbWUsIHN1bT1Ob25lLCBwcm9kPU5vbmUsIGRlcHRoPTApOgogICAgICAgICBjdHlwZSA9IGdldF9jX3R5cGUoZmllbGQudHlwZSkKLSAgICAgICAgc2VsZi5lbWl0KCJpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkXyVzKSkgeyIgJSBmaWVsZC5uYW1lLCBkZXB0aCkKKyAgICAgICAgaWYgZmllbGQub3B0OgorICAgICAgICAgICAgY2hlY2sgPSAiZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfJXMpIiAlIChmaWVsZC5uYW1lLCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoZWNrID0gIl9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF8lcykiICUgKGZpZWxkLm5hbWUsKQorICAgICAgICBzZWxmLmVtaXQoImlmICglcykgeyIgJSAoY2hlY2ssKSwgZGVwdGgsIHJlZmxvdz1GYWxzZSkKICAgICAgICAgc2VsZi5lbWl0KCJpbnQgcmVzOyIsIGRlcHRoKzEpCiAgICAgICAgIGlmIGZpZWxkLnNlcToKICAgICAgICAgICAgIHNlbGYuZW1pdCgiUHlfc3NpemVfdCBsZW47IiwgZGVwdGgrMSkKQEAgLTUxMCw5ICs1MTksOSBAQAogICAgICAgICAgICAgc2VsZi5lbWl0KCJ9IiwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgibGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7IiwgZGVwdGgrMSkKICAgICAgICAgICAgIGlmIHNlbGYuaXNTaW1wbGVUeXBlKGZpZWxkKToKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gX1B5X2FzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCiAgICAgICAgICAgICBzZWxmLmVtaXQoImlmICglcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgiZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7IiwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgdmFsdWU7IiAlIGN0eXBlLCBkZXB0aCsyKQpAQCAtNTU4LDYgKzU2NywxMyBAQAogICAgIGRlZiB2aXNpdFByb2R1Y3Qoc2VsZiwgcHJvZCwgbmFtZSk6CiAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIFB5VHlwZU9iamVjdCAqJXNfdHlwZTsiICUgbmFtZSwgMCkKICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgUHlPYmplY3QqIGFzdDJvYmpfJXModm9pZCopOyIgJSBuYW1lLCAwKQorICAgICAgICBpZiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBmb3IgYSBpbiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0X2lkZW50aWZpZXIoYS5uYW1lKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgY2hhciAqJXNfYXR0cmlidXRlc1tdID0geyIgJSBuYW1lLCAwKQorICAgICAgICAgICAgZm9yIGEgaW4gcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnIiVzIiwnICUgYS5uYW1lLCAxKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJ9OyIsIDApCiAgICAgICAgIGlmIHByb2QuZmllbGRzOgogICAgICAgICAgICAgZm9yIGYgaW4gcHJvZC5maWVsZHM6CiAgICAgICAgICAgICAgICAgc2VsZi5lbWl0X2lkZW50aWZpZXIoZi5uYW1lKQpAQCAtODE5LDYgKzgzNSw3IEBACiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopbyk7CiAgICAgcmV0dXJuIChQeU9iamVjdCopbzsKIH0KKyNkZWZpbmUgYXN0Mm9ial9zaW5nbGV0b24gYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9pZGVudGlmaWVyIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfc3RyaW5nIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfYnl0ZXMgYXN0Mm9ial9vYmplY3QKQEAgLTgzMCw2ICs4NDcsMTcgQEAKIAogLyogQ29udmVyc2lvbiBQeXRob24gLT4gQVNUICovCiAKK3N0YXRpYyBpbnQgb2JqMmFzdF9zaW5nbGV0b24oUHlPYmplY3QgKm9iaiwgUHlPYmplY3QqKiBvdXQsIFB5QXJlbmEqIGFyZW5hKQoreworICAgIGlmIChvYmogIT0gUHlfTm9uZSAmJiBvYmogIT0gUHlfVHJ1ZSAmJiBvYmogIT0gUHlfRmFsc2UpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQVNUIHNpbmdsZXRvbiBtdXN0IGJlIFRydWUsIEZhbHNlLCBvciBOb25lIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAqb3V0ID0gb2JqOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG9iajJhc3Rfb2JqZWN0KFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKIHsKICAgICBpZiAob2JqID09IFB5X05vbmUpCkBAIC05MDQsNiArOTMyLDE5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXhpc3RzX25vdF9ub25lKFB5T2JqZWN0ICpvYmosIF9QeV9JZGVudGlmaWVyICppZCkKK3sKKyAgICBpbnQgaXNub25lOworICAgIFB5T2JqZWN0ICphdHRyID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosIGlkKTsKKyAgICBpZiAoIWF0dHIpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlzbm9uZSA9IGF0dHIgPT0gUHlfTm9uZTsKKyAgICBQeV9ERUNSRUYoYXR0cik7CisgICAgcmV0dXJuICFpc25vbmU7Cit9CisKICIiIiwgMCwgcmVmbG93PUZhbHNlKQogCiAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIGludCBpbml0X3R5cGVzKHZvaWQpIiwwKQpAQCAtOTI1LDYgKzk2NiwxMSBAQAogICAgICAgICBzZWxmLmVtaXQoJyVzX3R5cGUgPSBtYWtlX3R5cGUoIiVzIiwgJkFTVF90eXBlLCAlcywgJWQpOycgJQogICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIG5hbWUsIGZpZWxkcywgbGVuKHByb2QuZmllbGRzKSksIDEpCiAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCElc190eXBlKSByZXR1cm4gMDsiICUgbmFtZSwgMSkKKyAgICAgICAgaWYgcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIWFkZF9hdHRyaWJ1dGVzKCVzX3R5cGUsICVzX2F0dHJpYnV0ZXMsICVkKSkgcmV0dXJuIDA7IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIG5hbWUsIGxlbihwcm9kLmF0dHJpYnV0ZXMpKSwgMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFhZGRfYXR0cmlidXRlcyglc190eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7IiAlIG5hbWUsIDEpCiAKICAgICBkZWYgdmlzaXRTdW0oc2VsZiwgc3VtLCBuYW1lKToKICAgICAgICAgc2VsZi5lbWl0KCclc190eXBlID0gbWFrZV90eXBlKCIlcyIsICZBU1RfdHlwZSwgTlVMTCwgMCk7JyAlCkBAIC05NjgsNyArMTAxNCw3IEBACiAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFtKSByZXR1cm4gTlVMTDsiLCAxKQogICAgICAgICBzZWxmLmVtaXQoImQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOyIsIDEpCiAgICAgICAgIHNlbGYuZW1pdCgnaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBU1QiLCAoUHlPYmplY3QqKSZBU1RfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsnLCAxKQotICAgICAgICBzZWxmLmVtaXQoJ2lmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlDRl9PTkxZX0FTVCIsIFB5Q0ZfT05MWV9BU1QpIDwgMCknLCAxKQorICAgICAgICBzZWxmLmVtaXQoJ2lmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUNGX09OTFlfQVNUKSA8IDApJywgMSkKICAgICAgICAgc2VsZi5lbWl0KCJyZXR1cm4gTlVMTDsiLCAyKQogICAgICAgICBmb3IgZGZuIGluIG1vZC5kZm5zOgogICAgICAgICAgICAgc2VsZi52aXNpdChkZm4pCkBAIC0xMDgwLDYgKzExMjYsMTIgQEAKICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIXJlc3VsdCkgcmV0dXJuIE5VTEw7IiwgMSkKICAgICAgICAgZm9yIGZpZWxkIGluIHByb2QuZmllbGRzOgogICAgICAgICAgICAgc2VsZi52aXNpdEZpZWxkKGZpZWxkLCBuYW1lLCAxLCBUcnVlKQorICAgICAgICBmb3IgYSBpbiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBzZWxmLmVtaXQoInZhbHVlID0gYXN0Mm9ial8lcyhvLT4lcyk7IiAlIChhLnR5cGUsIGEubmFtZSksIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoImlmICghdmFsdWUpIGdvdG8gZmFpbGVkOyIsIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ2lmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfJXMsIHZhbHVlKSA8IDApJyAlIGEubmFtZSwgMSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnZ290byBmYWlsZWQ7JywgMikKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnUHlfREVDUkVGKHZhbHVlKTsnLCAxKQogICAgICAgICBzZWxmLmZ1bmNfZW5kKCkKIAogICAgIGRlZiB2aXNpdENvbnN0cnVjdG9yKHNlbGYsIGNvbnMsIGVudW0sIG5hbWUpOgpAQCAtMTE0Miw3ICsxMTk0LDggQEAKICAgICBDT0RFID0gIiIiCiBQeU9iamVjdCogUHlBU1RfbW9kMm9iaihtb2RfdHkgdCkKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBhc3Qyb2JqX21vZCh0KTsKIH0KIApAQCAtMTE2MCw3ICsxMjEzLDggQEAKIAogICAgIGFzc2VydCgwIDw9IG1vZGUgJiYgbW9kZSA8PSAyKTsKIAotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShhc3QsIHJlcV90eXBlW21vZGVdKTsKICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkKQEAgLTExNzgsNyArMTIzMiw4IEBACiAKIGludCBQeUFTVF9DaGVjayhQeU9iamVjdCogb2JqKQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpOwogfQogIiIiCmRpZmYgLS1naXQgYS9QYXJzZXIvZ3JhbW1hci5jIGIvUGFyc2VyL2dyYW1tYXIuYwppbmRleCBmMmEyNWNhLi5iNTk4Mjk0IDEwMDY0NAotLS0gYS9QYXJzZXIvZ3JhbW1hci5jCisrKyBiL1BhcnNlci9ncmFtbWFyLmMKQEAgLTI5LDcgKzI5LDcgQEAKIH0KIAogZGZhICoKLWFkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY2hhciAqbmFtZSkKK2FkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBkZmEgKmQ7CiAKQEAgLTYzLDcgKzYzLDcgQEAKICAgICBzLT5zX3VwcGVyID0gMDsKICAgICBzLT5zX2FjY2VsID0gTlVMTDsKICAgICBzLT5zX2FjY2VwdCA9IDA7Ci0gICAgcmV0dXJuIHMgLSBkLT5kX3N0YXRlOworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKHMgLSBkLT5kX3N0YXRlLCBQeV9pbnRwdHJfdCwgaW50KTsKIH0KIAogdm9pZApAQCAtODUsNyArODUsNyBAQAogfQogCiBpbnQKLWFkZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjaGFyICpzdHIpCithZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKQogewogICAgIGludCBpOwogICAgIGxhYmVsICpsYjsKQEAgLTEwNSwxMyArMTA1LDEzIEBACiAgICAgaWYgKFB5X0RlYnVnRmxhZykKICAgICAgICAgcHJpbnRmKCJMYWJlbCBAICU4cCwgJWQ6ICVzXG4iLCBsbCwgbGwtPmxsX25sYWJlbHMsCiAgICAgICAgICAgICAgICBQeUdyYW1tYXJfTGFiZWxSZXByKGxiKSk7Ci0gICAgcmV0dXJuIGxiIC0gbGwtPmxsX2xhYmVsOworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKGxiIC0gbGwtPmxsX2xhYmVsLCBQeV9pbnRwdHJfdCwgaW50KTsKIH0KIAogLyogU2FtZSwgYnV0IHJhdGhlciBkaWVzIHRoYW4gYWRkcyAqLwogCiBpbnQKLWZpbmRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorZmluZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpCiB7CiAgICAgaW50IGk7CiAKZGlmZiAtLWdpdCBhL1BhcnNlci9ncmFtbWFyMS5jIGIvUGFyc2VyL2dyYW1tYXIxLmMKaW5kZXggNDQwYmE0NC4uMzBhNmYwNyAxMDA2NDQKLS0tIGEvUGFyc2VyL2dyYW1tYXIxLmMKKysrIGIvUGFyc2VyL2dyYW1tYXIxLmMKQEAgLTksOSArOSw5IEBACiAvKiBSZXR1cm4gdGhlIERGQSBmb3IgdGhlIGdpdmVuIHR5cGUgKi8KIAogZGZhICoKLVB5R3JhbW1hcl9GaW5kREZBKGdyYW1tYXIgKmcsIHJlZ2lzdGVyIGludCB0eXBlKQorUHlHcmFtbWFyX0ZpbmRERkEoZ3JhbW1hciAqZywgaW50IHR5cGUpCiB7Ci0gICAgcmVnaXN0ZXIgZGZhICpkOworICAgIGRmYSAqZDsKICNpZiAxCiAgICAgLyogTWFzc2l2ZSBzcGVlZC11cCAqLwogICAgIGQgPSAmZy0+Z19kZmFbdHlwZSAtIE5UX09GRlNFVF07CkBAIC0xOSw3ICsxOSw3IEBACiAgICAgcmV0dXJuIGQ7CiAjZWxzZQogICAgIC8qIE9sZCwgc2xvdyB2ZXJzaW9uICovCi0gICAgcmVnaXN0ZXIgaW50IGk7CisgICAgaW50IGk7CiAKICAgICBmb3IgKGkgPSBnLT5nX25kZmFzLCBkID0gZy0+Z19kZmE7IC0taSA+PSAwOyBkKyspIHsKICAgICAgICAgaWYgKGQtPmRfdHlwZSA9PSB0eXBlKQpAQCAtMzAsNyArMzAsNyBAQAogI2VuZGlmCiB9CiAKLWNoYXIgKgorY29uc3QgY2hhciAqCiBQeUdyYW1tYXJfTGFiZWxSZXByKGxhYmVsICpsYikKIHsKICAgICBzdGF0aWMgY2hhciBidWZbMTAwXTsKZGlmZiAtLWdpdCBhL1BhcnNlci9teXJlYWRsaW5lLmMgYi9QYXJzZXIvbXlyZWFkbGluZS5jCmluZGV4IDlmMWZjMWUuLjI4YzdiNmQgMTAwNjQ0Ci0tLSBhL1BhcnNlci9teXJlYWRsaW5lLmMKKysrIGIvUGFyc2VyL215cmVhZGxpbmUuYwpAQCAtMTUsMTAgKzE1LDYgQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCi0jaWZkZWYgX19WTVMKLWV4dGVybiBjaGFyKiB2bXNfX1N0ZGlvUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjaGFyICpwcm9tcHQpOwotI2VuZGlmCi0KIAogUHlUaHJlYWRTdGF0ZSogX1B5T1NfUmVhZGxpbmVUU3RhdGU7CiAKQEAgLTY4LDcgKzY0LDcgQEAKICAgICAgICAgKi8KICAgICAgICAgaWYgKEdldExhc3RFcnJvcigpPT1FUlJPUl9PUEVSQVRJT05fQUJPUlRFRCkgewogICAgICAgICAgICAgaEludGVycnVwdEV2ZW50ID0gX1B5T1NfU2lnaW50RXZlbnQoKTsKLSAgICAgICAgICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdChoSW50ZXJydXB0RXZlbnQsIDEwKSkgeworICAgICAgICAgICAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaEludGVycnVwdEV2ZW50LCAxMCwgRkFMU0UpKSB7CiAgICAgICAgICAgICBjYXNlIFdBSVRfT0JKRUNUXzA6CiAgICAgICAgICAgICAgICAgUmVzZXRFdmVudChoSW50ZXJydXB0RXZlbnQpOwogICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiBJbnRlcnJ1cHQgKi8KQEAgLTEwOSwyMiArMTA1LDI2IEBACiAvKiBSZWFkbGluZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBmZ2V0cygpICovCiAKIGNoYXIgKgotUHlPU19TdGRpb1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorUHlPU19TdGRpb1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY29uc3QgY2hhciAqcHJvbXB0KQogewogICAgIHNpemVfdCBuOwogICAgIGNoYXIgKnAsICpwcjsKKwogICAgIG4gPSAxMDA7Ci0gICAgaWYgKChwID0gKGNoYXIgKilQeU1lbV9NQUxMT0MobikpID09IE5VTEwpCisgICAgcCA9IChjaGFyICopUHlNZW1fUmF3TWFsbG9jKG4pOworICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgZmZsdXNoKHN5c19zdGRvdXQpOwogICAgIGlmIChwcm9tcHQpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBwcm9tcHQpOwogICAgIGZmbHVzaChzdGRlcnIpOworCiAgICAgc3dpdGNoIChteV9mZ2V0cyhwLCAoaW50KW4sIHN5c19zdGRpbikpIHsKICAgICBjYXNlIDA6IC8qIE5vcm1hbCBjYXNlICovCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMTogLyogSW50ZXJydXB0ICovCi0gICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGNhc2UgLTE6IC8qIEVPRiAqLwogICAgIGNhc2UgLTI6IC8qIEVycm9yICovCkBAIC0xMzYsMTMgKzEzNiwxMyBAQAogICAgIHdoaWxlIChuID4gMCAmJiBwW24tMV0gIT0gJ1xuJykgewogICAgICAgICBzaXplX3QgaW5jciA9IG4rMjsKICAgICAgICAgaWYgKGluY3IgPiBJTlRfTUFYKSB7Ci0gICAgICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAiaW5wdXQgbGluZSB0b28gbG9uZyIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcHIgPSAoY2hhciAqKVB5TWVtX1JFQUxMT0MocCwgbiArIGluY3IpOworICAgICAgICBwciA9IChjaGFyICopUHlNZW1fUmF3UmVhbGxvYyhwLCBuICsgaW5jcik7CiAgICAgICAgIGlmIChwciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTUxLDkgKzE1MSw5IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbiArPSBzdHJsZW4ocCtuKTsKICAgICB9Ci0gICAgcHIgPSAoY2hhciAqKVB5TWVtX1JFQUxMT0MocCwgbisxKTsKKyAgICBwciA9IChjaGFyICopUHlNZW1fUmF3UmVhbGxvYyhwLCBuKzEpOwogICAgIGlmIChwciA9PSBOVUxMKSB7Ci0gICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE2NiwxNSArMTY2LDE2IEBACiAKICAgIE5vdGU6IFB5dGhvbiBleHBlY3RzIGluIHJldHVybiBhIGJ1ZmZlciBhbGxvY2F0ZWQgd2l0aCBQeU1lbV9NYWxsb2MuICovCiAKLWNoYXIgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitjaGFyICooKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogCiAKIC8qIEludGVyZmFjZSB1c2VkIGJ5IHRva2VuaXplci5jIGFuZCBibHRpbm1vZHVsZS5jICovCiAKIGNoYXIgKgotUHlPU19SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK1B5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7Ci0gICAgY2hhciAqcnY7CisgICAgY2hhciAqcnYsICpyZXM7CisgICAgc2l6ZV90IGxlbjsKIAogICAgIGlmIChfUHlPU19SZWFkbGluZVRTdGF0ZSA9PSBQeVRocmVhZFN0YXRlX0dFVCgpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCkBAIC0xODQsMTEgKzE4NSw3IEBACiAKIAogICAgIGlmIChQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyID09IE5VTEwpIHsKLSNpZmRlZiBfX1ZNUwotICAgICAgICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyID0gdm1zX19TdGRpb1JlYWRsaW5lOwotI2Vsc2UKICAgICAgICAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciA9IFB5T1NfU3RkaW9SZWFkbGluZTsKLSNlbmRpZgogICAgIH0KIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0yMjEsNSArMjE4LDE0IEBACiAKICAgICBfUHlPU19SZWFkbGluZVRTdGF0ZSA9IE5VTEw7CiAKLSAgICByZXR1cm4gcnY7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbGVuID0gc3RybGVuKHJ2KSArIDE7CisgICAgcmVzID0gUHlNZW1fTWFsbG9jKGxlbik7CisgICAgaWYgKHJlcyAhPSBOVUxMKQorICAgICAgICBtZW1jcHkocmVzLCBydiwgbGVuKTsKKyAgICBQeU1lbV9SYXdGcmVlKHJ2KTsKKworICAgIHJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9QYXJzZXIvbm9kZS5jIGIvUGFyc2VyL25vZGUuYwppbmRleCAxZTRmMGRhLi41NjRiZDkxIDEwMDY0NAotLS0gYS9QYXJzZXIvbm9kZS5jCisrKyBiL1BhcnNlci9ub2RlLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogCiBpbnQKLVB5Tm9kZV9BZGRDaGlsZChyZWdpc3RlciBub2RlICpuMSwgaW50IHR5cGUsIGNoYXIgKnN0ciwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCitQeU5vZGVfQWRkQ2hpbGQobm9kZSAqbjEsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIGNvbnN0IGludCBuY2ggPSBuMS0+bl9uY2hpbGRyZW47CiAgICAgaW50IGN1cnJlbnRfY2FwYWNpdHk7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgaWYgKGN1cnJlbnRfY2FwYWNpdHkgPCAwIHx8IHJlcXVpcmVkX2NhcGFjaXR5IDwgMCkKICAgICAgICAgcmV0dXJuIEVfT1ZFUkZMT1c7CiAgICAgaWYgKGN1cnJlbnRfY2FwYWNpdHkgPCByZXF1aXJlZF9jYXBhY2l0eSkgewotICAgICAgICBpZiAocmVxdWlyZWRfY2FwYWNpdHkgPiBQWV9TSVpFX01BWCAvIHNpemVvZihub2RlKSkgeworICAgICAgICBpZiAoKHNpemVfdClyZXF1aXJlZF9jYXBhY2l0eSA+IFBZX1NJWkVfTUFYIC8gc2l6ZW9mKG5vZGUpKSB7CiAgICAgICAgICAgICByZXR1cm4gRV9OT01FTTsKICAgICAgICAgfQogICAgICAgICBuID0gbjEtPm5fY2hpbGQ7CmRpZmYgLS1naXQgYS9QYXJzZXIvcGFyc2VyLmMgYi9QYXJzZXIvcGFyc2VyLmMKaW5kZXggYjUwNWZlMC4uNTZlYzUxNCAxMDA2NDQKLS0tIGEvUGFyc2VyL3BhcnNlci5jCisrKyBiL1BhcnNlci9wYXJzZXIuYwpAQCAtMzUsOSArMzUsOSBAQAogI2RlZmluZSBzX2VtcHR5KHMpICgocyktPnNfdG9wID09ICYocyktPnNfYmFzZVtNQVhTVEFDS10pCiAKIHN0YXRpYyBpbnQKLXNfcHVzaChyZWdpc3RlciBzdGFjayAqcywgZGZhICpkLCBub2RlICpwYXJlbnQpCitzX3B1c2goc3RhY2sgKnMsIGRmYSAqZCwgbm9kZSAqcGFyZW50KQogewotICAgIHJlZ2lzdGVyIHN0YWNrZW50cnkgKnRvcDsKKyAgICBzdGFja2VudHJ5ICp0b3A7CiAgICAgaWYgKHMtPnNfdG9wID09IHMtPnNfYmFzZSkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNfcHVzaDogcGFyc2VyIHN0YWNrIG92ZXJmbG93XG4iKTsKICAgICAgICAgcmV0dXJuIEVfTk9NRU07CkBAIC01Miw3ICs1Miw3IEBACiAjaWZkZWYgUHlfREVCVUcKIAogc3RhdGljIHZvaWQKLXNfcG9wKHJlZ2lzdGVyIHN0YWNrICpzKQorc19wb3Aoc3RhY2sgKnMpCiB7CiAgICAgaWYgKHNfZW1wdHkocykpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInNfcG9wOiBwYXJzZXIgc3RhY2sgdW5kZXJmbG93IC0tIEZBVEFMIik7CkBAIC0xMDUsNyArMTA1LDcgQEAKIC8qIFBBUlNFUiBTVEFDSyBPUEVSQVRJT05TICovCiAKIHN0YXRpYyBpbnQKLXNoaWZ0KHJlZ2lzdGVyIHN0YWNrICpzLCBpbnQgdHlwZSwgY2hhciAqc3RyLCBpbnQgbmV3c3RhdGUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorc2hpZnQoc3RhY2sgKnMsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgaW50IGVycjsKICAgICBhc3NlcnQoIXNfZW1wdHkocykpOwpAQCAtMTE3LDEwICsxMTcsMTAgQEAKIH0KIAogc3RhdGljIGludAotcHVzaChyZWdpc3RlciBzdGFjayAqcywgaW50IHR5cGUsIGRmYSAqZCwgaW50IG5ld3N0YXRlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK3B1c2goc3RhY2sgKnMsIGludCB0eXBlLCBkZmEgKmQsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgaW50IGVycjsKLSAgICByZWdpc3RlciBub2RlICpuOworICAgIG5vZGUgKm47CiAgICAgbiA9IHMtPnNfdG9wLT5zX3BhcmVudDsKICAgICBhc3NlcnQoIXNfZW1wdHkocykpOwogICAgIGVyciA9IFB5Tm9kZV9BZGRDaGlsZChuLCB0eXBlLCAoY2hhciAqKU5VTEwsIGxpbmVubywgY29sX29mZnNldCk7CkBAIC0xMzQsMTUgKzEzNCwxNSBAQAogLyogUEFSU0VSIFBST1BFUiAqLwogCiBzdGF0aWMgaW50Ci1jbGFzc2lmeShwYXJzZXJfc3RhdGUgKnBzLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorY2xhc3NpZnkocGFyc2VyX3N0YXRlICpwcywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cikKIHsKICAgICBncmFtbWFyICpnID0gcHMtPnBfZ3JhbW1hcjsKLSAgICByZWdpc3RlciBpbnQgbiA9IGctPmdfbGwubGxfbmxhYmVsczsKKyAgICBpbnQgbiA9IGctPmdfbGwubGxfbmxhYmVsczsKIAogICAgIGlmICh0eXBlID09IE5BTUUpIHsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciAqcyA9IHN0cjsKLSAgICAgICAgcmVnaXN0ZXIgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOwotICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgY29uc3QgY2hhciAqcyA9IHN0cjsKKyAgICAgICAgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOworICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gbjsgaSA+IDA7IGktLSwgbCsrKSB7CiAgICAgICAgICAgICBpZiAobC0+bGJfdHlwZSAhPSBOQU1FIHx8IGwtPmxiX3N0ciA9PSBOVUxMIHx8CiAgICAgICAgICAgICAgICAgbC0+bGJfc3RyWzBdICE9IHNbMF0gfHwKQEAgLTE2NSw4ICsxNjUsOCBAQAogICAgIH0KIAogICAgIHsKLSAgICAgICAgcmVnaXN0ZXIgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOwotICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOworICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gbjsgaSA+IDA7IGktLSwgbCsrKSB7CiAgICAgICAgICAgICBpZiAobC0+bGJfdHlwZSA9PSB0eXBlICYmIGwtPmxiX3N0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgRChwcmludGYoIkl0J3MgYSB0b2tlbiB3ZSBrbm93XG4iKSk7CkBAIC0yMjUsMTAgKzIyNSwxMCBAQAogI2VuZGlmIC8qIGZ1dHVyZSBrZXl3b3JkICovCiAKIGludAotUHlQYXJzZXJfQWRkVG9rZW4ocmVnaXN0ZXIgcGFyc2VyX3N0YXRlICpwcywgcmVnaXN0ZXIgaW50IHR5cGUsIGNoYXIgKnN0ciwKK1B5UGFyc2VyX0FkZFRva2VuKHBhcnNlcl9zdGF0ZSAqcHMsIGludCB0eXBlLCBjaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgaW50ICpleHBlY3RlZF9yZXQpCiB7Ci0gICAgcmVnaXN0ZXIgaW50IGlsYWJlbDsKKyAgICBpbnQgaWxhYmVsOwogICAgIGludCBlcnI7CiAKICAgICBEKHByaW50ZigiVG9rZW4gJXMvJyVzJyAuLi4gIiwgX1B5UGFyc2VyX1Rva2VuTmFtZXNbdHlwZV0sIHN0cikpOwpAQCAtMjQxLDE1ICsyNDEsMTUgQEAKICAgICAvKiBMb29wIHVudGlsIHRoZSB0b2tlbiBpcyBzaGlmdGVkIG9yIGFuIGVycm9yIG9jY3VycmVkICovCiAgICAgZm9yICg7OykgewogICAgICAgICAvKiBGZXRjaCB0aGUgY3VycmVudCBkZmEgYW5kIHN0YXRlICovCi0gICAgICAgIHJlZ2lzdGVyIGRmYSAqZCA9IHBzLT5wX3N0YWNrLnNfdG9wLT5zX2RmYTsKLSAgICAgICAgcmVnaXN0ZXIgc3RhdGUgKnMgPSAmZC0+ZF9zdGF0ZVtwcy0+cF9zdGFjay5zX3RvcC0+c19zdGF0ZV07CisgICAgICAgIGRmYSAqZCA9IHBzLT5wX3N0YWNrLnNfdG9wLT5zX2RmYTsKKyAgICAgICAgc3RhdGUgKnMgPSAmZC0+ZF9zdGF0ZVtwcy0+cF9zdGFjay5zX3RvcC0+c19zdGF0ZV07CiAKICAgICAgICAgRChwcmludGYoIiBERkEgJyVzJywgc3RhdGUgJWQ6IiwKICAgICAgICAgICAgIGQtPmRfbmFtZSwgcHMtPnBfc3RhY2suc190b3AtPnNfc3RhdGUpKTsKIAogICAgICAgICAvKiBDaGVjayBhY2NlbGVyYXRvciAqLwogICAgICAgICBpZiAocy0+c19sb3dlciA8PSBpbGFiZWwgJiYgaWxhYmVsIDwgcy0+c191cHBlcikgewotICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHggPSBzLT5zX2FjY2VsW2lsYWJlbCAtIHMtPnNfbG93ZXJdOworICAgICAgICAgICAgaW50IHggPSBzLT5zX2FjY2VsW2lsYWJlbCAtIHMtPnNfbG93ZXJdOwogICAgICAgICAgICAgaWYgKHggIT0gLTEpIHsKICAgICAgICAgICAgICAgICBpZiAoeCAmICgxPDw3KSkgewogICAgICAgICAgICAgICAgICAgICAvKiBQdXNoIG5vbi10ZXJtaW5hbCAqLwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3BhcnNldG9rLmMgYi9QYXJzZXIvcGFyc2V0b2suYwppbmRleCA3YmViNzM1Li42MjlkZWU1IDEwMDY0NAotLS0gYS9QYXJzZXIvcGFyc2V0b2suYworKysgYi9QYXJzZXIvcGFyc2V0b2suYwpAQCAtMTMsNyArMTMsNyBAQAogCiAvKiBGb3J3YXJkICovCiBzdGF0aWMgbm9kZSAqcGFyc2V0b2soc3RydWN0IHRva19zdGF0ZSAqLCBncmFtbWFyICosIGludCwgcGVycmRldGFpbCAqLCBpbnQgKik7Ci1zdGF0aWMgaW50IGluaXRlcnIocGVycmRldGFpbCAqZXJyX3JldCwgY29uc3QgY2hhciogZmlsZW5hbWUpOworc3RhdGljIGludCBpbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIFB5T2JqZWN0ICogZmlsZW5hbWUpOwogCiAvKiBQYXJzZSBpbnB1dCBjb21pbmcgZnJvbSBhIHN0cmluZy4gIFJldHVybiBlcnJvciBjb2RlLCBwcmludCBzb21lIGVycm9ycy4gKi8KIG5vZGUgKgpAQCAtNDEsOSArNDEsOSBAQAogfQogCiBub2RlICoKLVB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCitQeVBhcnNlcl9QYXJzZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzLCBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvazsKICAgICBpbnQgZXhlY19pbnB1dCA9IHN0YXJ0ID09IGZpbGVfaW5wdXQ7CkBAIC02NywxMSArNjcsMzUgQEAKICAgICByZXR1cm4gcGFyc2V0b2sodG9rLCBnLCBzdGFydCwgZXJyX3JldCwgZmxhZ3MpOwogfQogCitub2RlICoKK1B5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQoreworICAgIG5vZGUgKm47CisgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gTlVMTDsKKyNpZm5kZWYgUEdFTgorICAgIGlmIChmaWxlbmFtZV9zdHIgIT0gTlVMTCkgeworICAgICAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgbiA9IFB5UGFyc2VyX1BhcnNlU3RyaW5nT2JqZWN0KHMsIGZpbGVuYW1lLCBnLCBzdGFydCwgZXJyX3JldCwgZmxhZ3MpOworI2lmbmRlZiBQR0VOCisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbjsKK30KKwogLyogUGFyc2UgaW5wdXQgY29taW5nIGZyb20gYSBmaWxlLiAgUmV0dXJuIGVycm9yIGNvZGUsIHByaW50IHNvbWUgZXJyb3JzLiAqLwogCiBub2RlICoKIFB5UGFyc2VyX1BhcnNlRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCkKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0KQogewogICAgIHJldHVybiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyhmcCwgZmlsZW5hbWUsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcsIHN0YXJ0LCBwczEsIHBzMiwgZXJyX3JldCwgMCk7CkBAIC04MCw3ICsxMDQsOCBAQAogbm9kZSAqCiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmVuYywKICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMSwgY2hhciAqcHMyLCBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCBmbGFncykKIHsKICAgICBpbnQgaWZsYWdzID0gZmxhZ3M7CiAgICAgcmV0dXJuIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoZnAsIGZpbGVuYW1lLCBlbmMsIGcsIHN0YXJ0LCBwczEsCkBAIC04OCwxNiArMTEzLDE3IEBACiB9CiAKIG5vZGUgKgotUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeChGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKK1B5UGFyc2VyX1BhcnNlRmlsZU9iamVjdChGSUxFICpmcCwgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rOwogCiAgICAgaWYgKGluaXRlcnIoZXJyX3JldCwgZmlsZW5hbWUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoKHRvayA9IFB5VG9rZW5pemVyX0Zyb21GaWxlKGZwLCAoY2hhciAqKWVuYywgcHMxLCBwczIpKSA9PSBOVUxMKSB7CisgICAgaWYgKCh0b2sgPSBQeVRva2VuaXplcl9Gcm9tRmlsZShmcCwgZW5jLCBwczEsIHBzMikpID09IE5VTEwpIHsKICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX05PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMDgsNiArMTM0LDMxIEBACiAgICAgcmV0dXJuIHBhcnNldG9rKHRvaywgZywgc3RhcnQsIGVycl9yZXQsIGZsYWdzKTsKIH0KIAorbm9kZSAqCitQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jLCBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQoreworICAgIG5vZGUgKm47CisgICAgUHlPYmplY3QgKmZpbGVvYmogPSBOVUxMOworI2lmbmRlZiBQR0VOCisgICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW9iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOworICAgICAgICBpZiAoZmlsZW9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIG4gPSBQeVBhcnNlcl9QYXJzZUZpbGVPYmplY3QoZnAsIGZpbGVvYmosIGVuYywgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBwczEsIHBzMiwgZXJyX3JldCwgZmxhZ3MpOworI2lmbmRlZiBQR0VOCisgICAgUHlfWERFQ1JFRihmaWxlb2JqKTsKKyNlbmRpZgorICAgIHJldHVybiBuOworfQorCiAjaWZkZWYgUFlfUEFSU0VSX1JFUVVJUkVTX0ZVVFVSRV9LRVlXT1JECiAjaWYgMAogc3RhdGljIGNoYXIgd2l0aF9tc2dbXSA9CkBAIC0xMzgsNyArMTg5LDYgQEAKICAgICBpbnQgc3RhcnRlZCA9IDA7CiAKICAgICBpZiAoKHBzID0gUHlQYXJzZXJfTmV3KGcsIHN0YXJ0KSkgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vIG1lbSBmb3IgbmV3IHBhcnNlclxuIik7CiAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZSh0b2spOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3OCw3ICsyMjgsNiBAQAogICAgICAgICBsZW4gPSBiIC0gYTsgLyogWFhYIHRoaXMgbWF5IGNvbXB1dGUgTlVMTCAtIE5VTEwgKi8KICAgICAgICAgc3RyID0gKGNoYXIgKikgUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwogICAgICAgICBpZiAoc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibm8gbWVtIGZvciBuZXh0IHRva2VuXG4iKTsKICAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDUsNyArMjU0LDggQEAKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGlmIChhID49IHRvay0+bGluZV9zdGFydCkKLSAgICAgICAgICAgIGNvbF9vZmZzZXQgPSBhIC0gdG9rLT5saW5lX3N0YXJ0OworICAgICAgICAgICAgY29sX29mZnNldCA9IFB5X1NBRkVfRE9XTkNBU1QoYSAtIHRvay0+bGluZV9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2ludHB0cl90LCBpbnQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2xfb2Zmc2V0ID0gLTE7CiAKQEAgLTMwOCw3ICszNTgsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1pbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoraW5pdGVycihwZXJyZGV0YWlsICplcnJfcmV0LCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX09LOwogICAgIGVycl9yZXQtPmxpbmVubyA9IDA7CkBAIC0zMTcsMTMgKzM2NywxNiBAQAogICAgIGVycl9yZXQtPnRva2VuID0gLTE7CiAgICAgZXJyX3JldC0+ZXhwZWN0ZWQgPSAtMTsKICNpZm5kZWYgUEdFTgotICAgIGlmIChmaWxlbmFtZSkKLSAgICAgICAgZXJyX3JldC0+ZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKLSAgICBlbHNlCisgICAgaWYgKGZpbGVuYW1lKSB7CisgICAgICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CisgICAgICAgIGVycl9yZXQtPmZpbGVuYW1lID0gZmlsZW5hbWU7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBlcnJfcmV0LT5maWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8c3RyaW5nPiIpOwotICAgIGlmIChlcnJfcmV0LT5maWxlbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoZXJyX3JldC0+ZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9QYXJzZXIvcGdlbm1haW4uYyBiL1BhcnNlci9wZ2VubWFpbi5jCmluZGV4IDUyYjgzODAuLjAxN2E0ZjkgMTAwNjQ0Ci0tLSBhL1BhcnNlci9wZ2VubWFpbi5jCisrKyBiL1BhcnNlci9wZ2VubWFpbi5jCkBAIC0xMTMsNiArMTEzLDcgQEAKICAgICAgICAgUHlfRXhpdCgxKTsKICAgICB9CiAgICAgZyA9IHBnZW4obik7CisgICAgUHlOb2RlX0ZyZWUobik7CiAgICAgaWYgKGcgPT0gTlVMTCkgewogICAgICAgICBwcmludGYoIkJhZCBncmFtbWFyLlxuIik7CiAgICAgICAgIFB5X0V4aXQoMSk7CkBAIC0xMzcsNyArMTM4LDcgQEAKIC8qIE5vLW5vbnNlbnNlIG15X3JlYWRsaW5lKCkgZm9yIHRva2VuaXplci5jICovCiAKIGNoYXIgKgotUHlPU19SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK1B5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7CiAgICAgc2l6ZV90IG4gPSAxMDAwOwogICAgIGNoYXIgKnAgPSAoY2hhciAqKVB5TWVtX01BTExPQyhuKTsKZGlmZiAtLWdpdCBhL1BhcnNlci90b2tlbml6ZXIuYyBiL1BhcnNlci90b2tlbml6ZXIuYwppbmRleCA4NTMwNzIzLi5jMzJhM2JmIDEwMDY0NAotLS0gYS9QYXJzZXIvdG9rZW5pemVyLmMKKysrIGIvUGFyc2VyL3Rva2VuaXplci5jCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgICAgICAgICB8fCBjID09ICdfJ1wKICAgICAgICAgICAgICAgIHx8IChjID49IDEyOCkpCiAKLWV4dGVybiBjaGFyICpQeU9TX1JlYWRsaW5lKEZJTEUgKiwgRklMRSAqLCBjaGFyICopOworZXh0ZXJuIGNoYXIgKlB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CiAvKiBSZXR1cm4gbWFsbG9jJ2VkIHN0cmluZyBpbmNsdWRpbmcgdHJhaWxpbmcgXG47CiAgICBlbXB0eSBtYWxsb2MnZWQgc3RyaW5nIGZvciBFT0Y7CiAgICBOVUxMIGlmIGludGVycnVwdGVkICovCkBAIC00Nyw3ICs0Nyw3IEBACiAKIC8qIFRva2VuIG5hbWVzICovCiAKLWNoYXIgKl9QeVBhcnNlcl9Ub2tlbk5hbWVzW10gPSB7Citjb25zdCBjaGFyICpfUHlQYXJzZXJfVG9rZW5OYW1lc1tdID0gewogICAgICJFTkRNQVJLRVIiLAogICAgICJOQU1FIiwKICAgICAiTlVNQkVSIiwKQEAgLTY4MSw3ICs2ODEsOCBAQAogCiBzdGF0aWMgY2hhciAqCiB0cmFuc2xhdGVfbmV3bGluZXMoY29uc3QgY2hhciAqcywgaW50IGV4ZWNfaW5wdXQsIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykgewotICAgIGludCBza2lwX25leHRfbGYgPSAwLCBuZWVkZWRfbGVuZ3RoID0gc3RybGVuKHMpICsgMiwgZmluYWxfbGVuZ3RoOworICAgIGludCBza2lwX25leHRfbGYgPSAwOworICAgIHNpemVfdCBuZWVkZWRfbGVuZ3RoID0gc3RybGVuKHMpICsgMiwgZmluYWxfbGVuZ3RoOwogICAgIGNoYXIgKmJ1ZiwgKmN1cnJlbnQ7CiAgICAgY2hhciBjID0gJ1wwJzsKICAgICBidWYgPSBQeU1lbV9NQUxMT0MobmVlZGVkX2xlbmd0aCk7CkBAIC03ODksNyArNzkwLDcgQEAKICAgICBzdHJ1Y3QgdG9rX3N0YXRlICp0b2sgPSB0b2tfbmV3KCk7CiAgICAgaWYgKHRvayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBzdHIgPSAoY2hhciAqKWRlY29kZV9zdHIoc3RyLCBleGVjX2lucHV0LCB0b2spOworICAgIHN0ciA9IGRlY29kZV9zdHIoc3RyLCBleGVjX2lucHV0LCB0b2spOwogICAgIGlmIChzdHIgPT0gTlVMTCkgewogICAgICAgICBQeVRva2VuaXplcl9GcmVlKHRvayk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODMyLDcgKzgzMyw4IEBACiAvKiBTZXQgdXAgdG9rZW5pemVyIGZvciBmaWxlICovCiAKIHN0cnVjdCB0b2tfc3RhdGUgKgotUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqZnAsIGNoYXIqIGVuYywgY2hhciAqcHMxLCBjaGFyICpwczIpCitQeVRva2VuaXplcl9Gcm9tRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciogZW5jLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHMxLCBjb25zdCBjaGFyICpwczIpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rID0gdG9rX25ldygpOwogICAgIGlmICh0b2sgPT0gTlVMTCkKQEAgLTg4Myw3ICs4ODUsNyBAQAogLyogR2V0IG5leHQgY2hhciwgdXBkYXRpbmcgc3RhdGU7IGVycm9yIGNvZGUgZ29lcyBpbnRvIHRvay0+ZG9uZSAqLwogCiBzdGF0aWMgaW50Ci10b2tfbmV4dGMocmVnaXN0ZXIgc3RydWN0IHRva19zdGF0ZSAqdG9rKQordG9rX25leHRjKHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmICh0b2stPmN1ciAhPSB0b2stPmlucCkgewpAQCAtMTA4MCw3ICsxMDgyLDcgQEAKIC8qIEJhY2stdXAgb25lIGNoYXJhY3RlciAqLwogCiBzdGF0aWMgdm9pZAotdG9rX2JhY2t1cChyZWdpc3RlciBzdHJ1Y3QgdG9rX3N0YXRlICp0b2ssIHJlZ2lzdGVyIGludCBjKQordG9rX2JhY2t1cChzdHJ1Y3QgdG9rX3N0YXRlICp0b2ssIGludCBjKQogewogICAgIGlmIChjICE9IEVPRikgewogICAgICAgICBpZiAoLS10b2stPmN1ciA8IHRvay0+YnVmKQpAQCAtMTMxMCw5ICsxMzEyLDkgQEAKIC8qIEdldCBuZXh0IHRva2VuLCBhZnRlciBzcGFjZSBzdHJpcHBpbmcgZXRjLiAqLwogCiBzdGF0aWMgaW50Ci10b2tfZ2V0KHJlZ2lzdGVyIHN0cnVjdCB0b2tfc3RhdGUgKnRvaywgY2hhciAqKnBfc3RhcnQsIGNoYXIgKipwX2VuZCkKK3Rva19nZXQoc3RydWN0IHRva19zdGF0ZSAqdG9rLCBjaGFyICoqcF9zdGFydCwgY2hhciAqKnBfZW5kKQogewotICAgIHJlZ2lzdGVyIGludCBjOworICAgIGludCBjOwogICAgIGludCBibGFua2xpbmUsIG5vbmFzY2lpOwogCiAgICAgKnBfc3RhcnQgPSAqcF9lbmQgPSBOVUxMOwpAQCAtMTMyMiw4ICsxMzI0LDggQEAKIAogICAgIC8qIEdldCBpbmRlbnRhdGlvbiBsZXZlbCAqLwogICAgIGlmICh0b2stPmF0Ym9sKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGludCBjb2wgPSAwOwotICAgICAgICByZWdpc3RlciBpbnQgYWx0Y29sID0gMDsKKyAgICAgICAgaW50IGNvbCA9IDA7CisgICAgICAgIGludCBhbHRjb2wgPSAwOwogICAgICAgICB0b2stPmF0Ym9sID0gMDsKICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwpAQCAtMTczOSwxMCArMTc0MSwxNSBAQAogICAgIEZJTEUgKmZwOwogICAgIGNoYXIgKnBfc3RhcnQgPU5VTEwgLCAqcF9lbmQgPU5VTEwgLCAqZW5jb2RpbmcgPSBOVUxMOwogCisjaWZuZGVmIFBHRU4KKyAgICBmZCA9IF9QeV9kdXAoZmQpOworI2Vsc2UKICAgICBmZCA9IGR1cChmZCk7CisjZW5kaWYKICAgICBpZiAoZmQgPCAwKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKwogICAgIGZwID0gZmRvcGVuKGZkLCAiciIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3Rva2VuaXplci5oIGIvUGFyc2VyL3Rva2VuaXplci5oCmluZGV4IGVkMWYzYWEuLjFjZTZlZWIgMTAwNjQ0Ci0tLSBhL1BhcnNlci90b2tlbml6ZXIuaAorKysgYi9QYXJzZXIvdG9rZW5pemVyLmgKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBpbnQgaW5kc3RhY2tbTUFYSU5ERU5UXTsgICAgICAgICAgICAvKiBTdGFjayBvZiBpbmRlbnRzICovCiAgICAgaW50IGF0Ym9sOyAgICAgICAgICAvKiBOb256ZXJvIGlmIGF0IGJlZ2luIG9mIG5ldyBsaW5lICovCiAgICAgaW50IHBlbmRpbjsgICAgICAgICAvKiBQZW5kaW5nIGluZGVudHMgKGlmID4gMCkgb3IgZGVkZW50cyAoaWYgPCAwKSAqLwotICAgIGNoYXIgKnByb21wdCwgKm5leHRwcm9tcHQ7ICAgICAgICAgIC8qIEZvciBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgKi8KKyAgICBjb25zdCBjaGFyICpwcm9tcHQsICpuZXh0cHJvbXB0OyAgICAgICAgICAvKiBGb3IgaW50ZXJhY3RpdmUgcHJvbXB0aW5nICovCiAgICAgaW50IGxpbmVubzsgICAgICAgICAvKiBDdXJyZW50IGxpbmUgbnVtYmVyICovCiAgICAgaW50IGxldmVsOyAgICAgICAgICAvKiAoKSBbXSB7fSBQYXJlbnRoZXNlcyBuZXN0aW5nIGxldmVsICovCiAgICAgICAgICAgICAvKiBVc2VkIHRvIGFsbG93IGZyZWUgY29udGludWF0aW9ucyBpbnNpZGUgdGhlbSAqLwpAQCAtNjksOCArNjksOCBAQAogCiBleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbVN0cmluZyhjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbVVURjgoY29uc3QgY2hhciAqLCBpbnQpOwotZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKiwgY2hhciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICopOworZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKiwgY29uc3QgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIHZvaWQgUHlUb2tlbml6ZXJfRnJlZShzdHJ1Y3QgdG9rX3N0YXRlICopOwogZXh0ZXJuIGludCBQeVRva2VuaXplcl9HZXQoc3RydWN0IHRva19zdGF0ZSAqLCBjaGFyICoqLCBjaGFyICoqKTsKIGV4dGVybiBjaGFyICogUHlUb2tlbml6ZXJfUmVzdG9yZUVuY29kaW5nKHN0cnVjdCB0b2tfc3RhdGUqIHRvaywKZGlmZiAtLWdpdCBhL1B5dGhvbi9QeXRob24tYXN0LmMgYi9QeXRob24vUHl0aG9uLWFzdC5jCmluZGV4IGFhMDMyMzMuLjQ0ZmRhZmMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9QeXRob24tYXN0LmMKKysrIGIvUHl0aG9uL1B5dGhvbi1hc3QuYwpAQCAtMjcxLDYgKzI3MSwxMCBAQAogc3RhdGljIGNoYXIgKkJ5dGVzX2ZpZWxkc1tdPXsKICAgICAicyIsCiB9Oworc3RhdGljIFB5VHlwZU9iamVjdCAqTmFtZUNvbnN0YW50X3R5cGU7CitzdGF0aWMgY2hhciAqTmFtZUNvbnN0YW50X2ZpZWxkc1tdPXsKKyAgICAidmFsdWUiLAorfTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKkVsbGlwc2lzX3R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpBdHRyaWJ1dGVfdHlwZTsKIF9QeV9JREVOVElGSUVSKGF0dHIpOwpAQCAtNDA4LDI0ICs0MTIsMjQgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgKmFyZ3VtZW50c190eXBlOwogc3RhdGljIFB5T2JqZWN0KiBhc3Qyb2JqX2FyZ3VtZW50cyh2b2lkKik7CiBfUHlfSURFTlRJRklFUih2YXJhcmcpOwotX1B5X0lERU5USUZJRVIodmFyYXJnYW5ub3RhdGlvbik7CiBfUHlfSURFTlRJRklFUihrd29ubHlhcmdzKTsKLV9QeV9JREVOVElGSUVSKGt3YXJnKTsKLV9QeV9JREVOVElGSUVSKGt3YXJnYW5ub3RhdGlvbik7Ci1fUHlfSURFTlRJRklFUihkZWZhdWx0cyk7CiBfUHlfSURFTlRJRklFUihrd19kZWZhdWx0cyk7CitfUHlfSURFTlRJRklFUihrd2FyZyk7CitfUHlfSURFTlRJRklFUihkZWZhdWx0cyk7CiBzdGF0aWMgY2hhciAqYXJndW1lbnRzX2ZpZWxkc1tdPXsKICAgICAiYXJncyIsCiAgICAgInZhcmFyZyIsCi0gICAgInZhcmFyZ2Fubm90YXRpb24iLAogICAgICJrd29ubHlhcmdzIiwKLSAgICAia3dhcmciLAotICAgICJrd2FyZ2Fubm90YXRpb24iLAotICAgICJkZWZhdWx0cyIsCiAgICAgImt3X2RlZmF1bHRzIiwKKyAgICAia3dhcmciLAorICAgICJkZWZhdWx0cyIsCiB9Owogc3RhdGljIFB5VHlwZU9iamVjdCAqYXJnX3R5cGU7CiBzdGF0aWMgUHlPYmplY3QqIGFzdDJvYmpfYXJnKHZvaWQqKTsKK3N0YXRpYyBjaGFyICphcmdfYXR0cmlidXRlc1tdID0geworICAgICJsaW5lbm8iLAorICAgICJjb2xfb2Zmc2V0IiwKK307CiBfUHlfSURFTlRJRklFUihhcmcpOwogX1B5X0lERU5USUZJRVIoYW5ub3RhdGlvbik7CiBzdGF0aWMgY2hhciAqYXJnX2ZpZWxkc1tdPXsKQEAgLTY3Myw2ICs2NzcsNyBAQAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKW8pOwogICAgIHJldHVybiAoUHlPYmplY3QqKW87CiB9CisjZGVmaW5lIGFzdDJvYmpfc2luZ2xldG9uIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfaWRlbnRpZmllciBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX3N0cmluZyBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX2J5dGVzIGFzdDJvYmpfb2JqZWN0CkBAIC02ODQsNiArNjg5LDE3IEBACiAKIC8qIENvbnZlcnNpb24gUHl0aG9uIC0+IEFTVCAqLwogCitzdGF0aWMgaW50IG9iajJhc3Rfc2luZ2xldG9uKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKK3sKKyAgICBpZiAob2JqICE9IFB5X05vbmUgJiYgb2JqICE9IFB5X1RydWUgJiYgb2JqICE9IFB5X0ZhbHNlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkFTVCBzaW5nbGV0b24gbXVzdCBiZSBUcnVlLCBGYWxzZSwgb3IgTm9uZSIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgKm91dCA9IG9iajsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvYmoyYXN0X29iamVjdChQeU9iamVjdCogb2JqLCBQeU9iamVjdCoqIG91dCwgUHlBcmVuYSogYXJlbmEpCiB7CiAgICAgaWYgKG9iaiA9PSBQeV9Ob25lKQpAQCAtNzU4LDYgKzc3NCwxOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGV4aXN0c19ub3Rfbm9uZShQeU9iamVjdCAqb2JqLCBfUHlfSWRlbnRpZmllciAqaWQpCit7CisgICAgaW50IGlzbm9uZTsKKyAgICBQeU9iamVjdCAqYXR0ciA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCBpZCk7CisgICAgaWYgKCFhdHRyKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpc25vbmUgPSBhdHRyID09IFB5X05vbmU7CisgICAgUHlfREVDUkVGKGF0dHIpOworICAgIHJldHVybiAhaXNub25lOworfQorCiAKIHN0YXRpYyBpbnQgaW5pdF90eXBlcyh2b2lkKQogewpAQCAtODYyLDYgKzg5MSw5IEBACiAgICAgaWYgKCFTdHJfdHlwZSkgcmV0dXJuIDA7CiAgICAgQnl0ZXNfdHlwZSA9IG1ha2VfdHlwZSgiQnl0ZXMiLCBleHByX3R5cGUsIEJ5dGVzX2ZpZWxkcywgMSk7CiAgICAgaWYgKCFCeXRlc190eXBlKSByZXR1cm4gMDsKKyAgICBOYW1lQ29uc3RhbnRfdHlwZSA9IG1ha2VfdHlwZSgiTmFtZUNvbnN0YW50IiwgZXhwcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVDb25zdGFudF9maWVsZHMsIDEpOworICAgIGlmICghTmFtZUNvbnN0YW50X3R5cGUpIHJldHVybiAwOwogICAgIEVsbGlwc2lzX3R5cGUgPSBtYWtlX3R5cGUoIkVsbGlwc2lzIiwgZXhwcl90eXBlLCBOVUxMLCAwKTsKICAgICBpZiAoIUVsbGlwc2lzX3R5cGUpIHJldHVybiAwOwogICAgIEF0dHJpYnV0ZV90eXBlID0gbWFrZV90eXBlKCJBdHRyaWJ1dGUiLCBleHByX3R5cGUsIEF0dHJpYnV0ZV9maWVsZHMsIDMpOwpAQCAtMTAzOSw2ICsxMDcxLDcgQEAKICAgICBjb21wcmVoZW5zaW9uX3R5cGUgPSBtYWtlX3R5cGUoImNvbXByZWhlbnNpb24iLCAmQVNUX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fZmllbGRzLCAzKTsKICAgICBpZiAoIWNvbXByZWhlbnNpb25fdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhjb21wcmVoZW5zaW9uX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICBleGNlcHRoYW5kbGVyX3R5cGUgPSBtYWtlX3R5cGUoImV4Y2VwdGhhbmRsZXIiLCAmQVNUX3R5cGUsIE5VTEwsIDApOwogICAgIGlmICghZXhjZXB0aGFuZGxlcl90eXBlKSByZXR1cm4gMDsKICAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGV4Y2VwdGhhbmRsZXJfdHlwZSwgZXhjZXB0aGFuZGxlcl9hdHRyaWJ1dGVzLCAyKSkKQEAgLTEwNDYsMTYgKzEwNzksMjEgQEAKICAgICBFeGNlcHRIYW5kbGVyX3R5cGUgPSBtYWtlX3R5cGUoIkV4Y2VwdEhhbmRsZXIiLCBleGNlcHRoYW5kbGVyX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdEhhbmRsZXJfZmllbGRzLCAzKTsKICAgICBpZiAoIUV4Y2VwdEhhbmRsZXJfdHlwZSkgcmV0dXJuIDA7Ci0gICAgYXJndW1lbnRzX3R5cGUgPSBtYWtlX3R5cGUoImFyZ3VtZW50cyIsICZBU1RfdHlwZSwgYXJndW1lbnRzX2ZpZWxkcywgOCk7CisgICAgYXJndW1lbnRzX3R5cGUgPSBtYWtlX3R5cGUoImFyZ3VtZW50cyIsICZBU1RfdHlwZSwgYXJndW1lbnRzX2ZpZWxkcywgNik7CiAgICAgaWYgKCFhcmd1bWVudHNfdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhhcmd1bWVudHNfdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGFyZ190eXBlID0gbWFrZV90eXBlKCJhcmciLCAmQVNUX3R5cGUsIGFyZ19maWVsZHMsIDIpOwogICAgIGlmICghYXJnX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoYXJnX3R5cGUsIGFyZ19hdHRyaWJ1dGVzLCAyKSkgcmV0dXJuIDA7CiAgICAga2V5d29yZF90eXBlID0gbWFrZV90eXBlKCJrZXl3b3JkIiwgJkFTVF90eXBlLCBrZXl3b3JkX2ZpZWxkcywgMik7CiAgICAgaWYgKCFrZXl3b3JkX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoa2V5d29yZF90eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgYWxpYXNfdHlwZSA9IG1ha2VfdHlwZSgiYWxpYXMiLCAmQVNUX3R5cGUsIGFsaWFzX2ZpZWxkcywgMik7CiAgICAgaWYgKCFhbGlhc190eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGFsaWFzX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICB3aXRoaXRlbV90eXBlID0gbWFrZV90eXBlKCJ3aXRoaXRlbSIsICZBU1RfdHlwZSwgd2l0aGl0ZW1fZmllbGRzLCAyKTsKICAgICBpZiAoIXdpdGhpdGVtX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMod2l0aGl0ZW1fdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGluaXRpYWxpemVkID0gMTsKICAgICByZXR1cm4gMTsKIH0KQEAgLTE5MjMsNiArMTk2MSwyNSBAQAogfQogCiBleHByX3R5CitOYW1lQ29uc3RhbnQoc2luZ2xldG9uIHZhbHVlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgZXhwcl90eSBwOworICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQgdmFsdWUgaXMgcmVxdWlyZWQgZm9yIE5hbWVDb25zdGFudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcCA9IChleHByX3R5KVB5QXJlbmFfTWFsbG9jKGFyZW5hLCBzaXplb2YoKnApKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHAtPmtpbmQgPSBOYW1lQ29uc3RhbnRfa2luZDsKKyAgICBwLT52Lk5hbWVDb25zdGFudC52YWx1ZSA9IHZhbHVlOworICAgIHAtPmxpbmVubyA9IGxpbmVubzsKKyAgICBwLT5jb2xfb2Zmc2V0ID0gY29sX29mZnNldDsKKyAgICByZXR1cm4gcDsKK30KKworZXhwcl90eQogRWxsaXBzaXMoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGV4cHJfdHkgcDsKQEAgLTIxNzcsOSArMjIzNCw4IEBACiB9CiAKIGFyZ3VtZW50c190eQotYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgaWRlbnRpZmllciB2YXJhcmcsIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbiwKLSAgICAgICAgICBhc2RsX3NlcSAqIGt3b25seWFyZ3MsIGlkZW50aWZpZXIga3dhcmcsIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uLAotICAgICAgICAgIGFzZGxfc2VxICogZGVmYXVsdHMsIGFzZGxfc2VxICoga3dfZGVmYXVsdHMsIFB5QXJlbmEgKmFyZW5hKQorYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgYXJnX3R5IHZhcmFyZywgYXNkbF9zZXEgKiBrd29ubHlhcmdzLCBhc2RsX3NlcSAqCisgICAgICAgICAga3dfZGVmYXVsdHMsIGFyZ190eSBrd2FyZywgYXNkbF9zZXEgKiBkZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgYXJndW1lbnRzX3R5IHA7CiAgICAgcCA9IChhcmd1bWVudHNfdHkpUHlBcmVuYV9NYWxsb2MoYXJlbmEsIHNpemVvZigqcCkpOwpAQCAtMjE4NywxMiArMjI0MywxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBwLT5hcmdzID0gYXJnczsKICAgICBwLT52YXJhcmcgPSB2YXJhcmc7Ci0gICAgcC0+dmFyYXJnYW5ub3RhdGlvbiA9IHZhcmFyZ2Fubm90YXRpb247CiAgICAgcC0+a3dvbmx5YXJncyA9IGt3b25seWFyZ3M7Ci0gICAgcC0+a3dhcmcgPSBrd2FyZzsKLSAgICBwLT5rd2FyZ2Fubm90YXRpb24gPSBrd2FyZ2Fubm90YXRpb247Ci0gICAgcC0+ZGVmYXVsdHMgPSBkZWZhdWx0czsKICAgICBwLT5rd19kZWZhdWx0cyA9IGt3X2RlZmF1bHRzOworICAgIHAtPmt3YXJnID0ga3dhcmc7CisgICAgcC0+ZGVmYXVsdHMgPSBkZWZhdWx0czsKICAgICByZXR1cm4gcDsKIH0KIApAQCAtMjk0Myw2ICsyOTk3LDE1IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKKyAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoTmFtZUNvbnN0YW50X3R5cGUsIE5VTEwsIE5VTEwpOworICAgICAgICBpZiAoIXJlc3VsdCkgZ290byBmYWlsZWQ7CisgICAgICAgIHZhbHVlID0gYXN0Mm9ial9zaW5nbGV0b24oby0+di5OYW1lQ29uc3RhbnQudmFsdWUpOworICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF92YWx1ZSwgdmFsdWUpID09IC0xKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoRWxsaXBzaXNfdHlwZSwgTlVMTCwgTlVMTCk7CiAgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKQEAgLTMzNjEsMjkgKzM0MjQsMjQgQEAKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2FyZ3MsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfaWRlbnRpZmllcihvLT52YXJhcmcpOworICAgIHZhbHVlID0gYXN0Mm9ial9hcmcoby0+dmFyYXJnKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX3ZhcmFyZywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9leHByKG8tPnZhcmFyZ2Fubm90YXRpb24pOwotICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfdmFyYXJnYW5ub3RhdGlvbiwgdmFsdWUpID09IC0xKQotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmt3b25seWFyZ3MsIGFzdDJvYmpfYXJnKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3b25seWFyZ3MsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfaWRlbnRpZmllcihvLT5rd2FyZyk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+a3dfZGVmYXVsdHMsIGFzdDJvYmpfZXhwcik7CiAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7Ci0gICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZywgdmFsdWUpID09IC0xKQorICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dfZGVmYXVsdHMsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfZXhwcihvLT5rd2FyZ2Fubm90YXRpb24pOworICAgIHZhbHVlID0gYXN0Mm9ial9hcmcoby0+a3dhcmcpOwogICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dhcmdhbm5vdGF0aW9uLCB2YWx1ZSkgPT0gLTEpCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmRlZmF1bHRzLCBhc3Qyb2JqX2V4cHIpOwpAQCAtMzM5MSwxMSArMzQ0OSw2IEBACiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9kZWZhdWx0cywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmt3X2RlZmF1bHRzLCBhc3Qyb2JqX2V4cHIpOwotICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dfZGVmYXVsdHMsIHZhbHVlKSA9PSAtMSkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogZmFpbGVkOgogICAgIFB5X1hERUNSRUYodmFsdWUpOwpAQCAtMzQyNSw2ICszNDc4LDE2IEBACiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9hbm5vdGF0aW9uLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2ludChvLT5saW5lbm8pOworICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfbGluZW5vLCB2YWx1ZSkgPCAwKQorICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICBQeV9ERUNSRUYodmFsdWUpOworICAgIHZhbHVlID0gYXN0Mm9ial9pbnQoby0+Y29sX29mZnNldCk7CisgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9jb2xfb2Zmc2V0LCB2YWx1ZSkgPCAwKQorICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHJldHVybiByZXN1bHQ7CiBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CkBAIC0zNTQ5LDcgKzM2MTIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNTg0LDcgKzM2NDcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNjQxLDcgKzM3MDQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNzQ0LDcgKzM4MDcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNzY4LDcgKzM4MzEsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkZWNvcmF0b3JfbGlzdCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC0zNzgxLDcgKzM4NDQsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiZGVjb3JhdG9yX2xpc3RcIiBtaXNzaW5nIGZyb20gRnVuY3Rpb25EZWYiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfcmV0dXJucykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3JldHVybnMpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3JldHVybnMpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTM4MzEsNyArMzg5NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJhc2VzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYmFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJhc2VzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTM4NTUsNyArMzkxOCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGtleXdvcmRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAga2V5d29yZHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXdvcmRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAga2V5d29yZF90eSB2YWx1ZTsKQEAgLTM4NjgsNyArMzkzMSw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrZXl3b3Jkc1wiIG1pc3NpbmcgZnJvbSBDbGFzc0RlZiIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3N0YXJhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzg3OCw3ICszOTQxLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXJhcmdzID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3YXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2t3YXJncykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC0zODk5LDcgKzM5NjIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zOTIzLDcgKzM5ODYsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkZWNvcmF0b3JfbGlzdCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC0zOTQ4LDcgKzQwMTEsNyBAQAogICAgIGlmIChpc2luc3RhbmNlKSB7CiAgICAgICAgIGV4cHJfdHkgdmFsdWU7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YWx1ZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3ZhbHVlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YWx1ZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzk4MCw3ICs0MDQzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHRhcmdldHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHRhcmdldHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNDAxNiw3ICs0MDc5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHRhcmdldHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHRhcmdldHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNDEzMyw3ICs0MTk2LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDE1Nyw3ICs0MjIwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDIwNSw3ICs0MjY4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDIyOSw3ICs0MjkyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDI3Nyw3ICs0MzQwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDMwMSw3ICs0MzY0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDMzNyw3ICs0NDAwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgaXRlbXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBpdGVtcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICB3aXRoaXRlbV90eSB2YWx1ZTsKQEAgLTQzNjEsNyArNDQyNCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQzODYsNyArNDQ0OSw3IEBACiAgICAgICAgIGV4cHJfdHkgZXhjOwogICAgICAgICBleHByX3R5IGNhdXNlOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfZXhjKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfZXhjKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9leGMpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQzOTYsNyArNDQ1OSw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleGMgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfY2F1c2UpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9jYXVzZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfY2F1c2UpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ0MzEsNyArNDQ5NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ0NTUsNyArNDUxOCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGhhbmRsZXJzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgaGFuZGxlcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGhhbmRsZXJzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhjZXB0aGFuZGxlcl90eSB2YWx1ZTsKQEAgLTQ0NzksNyArNDU0Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9yZWxzZSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3JlbHNlID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ1MDMsNyArNDU2Niw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGZpbmFsYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGZpbmFsYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZmluYWxib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ1NDAsNyArNDYwMyw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJ0ZXN0XCIgbWlzc2luZyBmcm9tIEFzc2VydCIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9tc2cpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9tc2cpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX21zZyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDU3Miw3ICs0NjM1LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBhbGlhc190eSB2YWx1ZTsKQEAgLTQ1OTgsNyArNDY2MSw3IEBACiAgICAgICAgIGFzZGxfc2VxKiBuYW1lczsKICAgICAgICAgaW50IGxldmVsOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbW9kdWxlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbW9kdWxlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9tb2R1bGUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ2MTksNyArNDY4Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG5hbWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgbmFtZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgYWxpYXNfdHkgdmFsdWU7CkBAIC00NjMyLDcgKzQ2OTUsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwibmFtZXNcIiBtaXNzaW5nIGZyb20gSW1wb3J0RnJvbSIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9sZXZlbCkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2xldmVsKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9sZXZlbCk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDY2NCw3ICs0NzI3LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyIHZhbHVlOwpAQCAtNDY5OSw3ICs0NzYyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyIHZhbHVlOwpAQCAtNDg0MCw3ICs0OTAzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdmFsdWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh2YWx1ZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTAzNiw3ICs1MDk5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAga2V5cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGtleXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTA2MCw3ICs1MTIzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdmFsdWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh2YWx1ZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTA5NSw3ICs1MTU4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTE0Miw3ICs1MjA1LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTE4OSw3ICs1MjUyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTI0OCw3ICs1MzExLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTI5NSw3ICs1MzU4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTMxOSw3ICs1MzgyLDcgQEAKICAgICBpZiAoaXNpbnN0YW5jZSkgewogICAgICAgICBleHByX3R5IHZhbHVlOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF92YWx1ZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTUzODYsNyArNTQ0OSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9wcyA9IGFzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcHMgPSBfUHlfYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjbXBvcF90eSB2YWx1ZTsKQEAgLTU0MTAsNyArNTQ3Myw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGNvbXBhcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgY29tcGFyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU0NjAsNyArNTUyMyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGFyZ3MgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBhcmdzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChhcmdzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU0ODQsNyArNTU0Nyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGtleXdvcmRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAga2V5d29yZHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXdvcmRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAga2V5d29yZF90eSB2YWx1ZTsKQEAgLTU0OTcsNyArNTU2MCw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrZXl3b3Jkc1wiIG1pc3NpbmcgZnJvbSBDYWxsIik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfc3RhcmFyZ3MpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01NTA3LDcgKzU1NzAsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhcmFyZ3MgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfa3dhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZ3MpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU1ODgsNiArNTY1MSwyOCBAQAogICAgICAgICBpZiAoKm91dCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilOYW1lQ29uc3RhbnRfdHlwZSk7CisgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmIChpc2luc3RhbmNlKSB7CisgICAgICAgIHNpbmdsZXRvbiB2YWx1ZTsKKworICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhbHVlKSkgeworICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YWx1ZSk7CisgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9zaW5nbGV0b24odG1wLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBQeV9DTEVBUih0bXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwidmFsdWVcIiBtaXNzaW5nIGZyb20gTmFtZUNvbnN0YW50Iik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICAqb3V0ID0gTmFtZUNvbnN0YW50KHZhbHVlLCBsaW5lbm8sIGNvbF9vZmZzZXQsIGFyZW5hKTsKKyAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopRWxsaXBzaXNfdHlwZSk7CiAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIDE7CkBAIC01Nzc3LDcgKzU4NjIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01ODI0LDcgKzU5MDksNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01OTM3LDcgKzYwMjIsNyBAQAogICAgICAgICBleHByX3R5IHVwcGVyOwogICAgICAgICBleHByX3R5IHN0ZXA7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9sb3dlcikpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2xvd2VyKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9sb3dlcik7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTk0Nyw3ICs2MDMyLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGxvd2VyID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3VwcGVyKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdXBwZXIpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3VwcGVyKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01OTU3LDcgKzYwNDIsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdXBwZXIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfc3RlcCkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3N0ZXApKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3N0ZXApOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU5ODksNyArNjA3NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGRpbXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBkaW1zID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkaW1zID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc2xpY2VfdHkgdmFsdWU7CkBAIC02MzQwLDcgKzY0MjUsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGlmcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgaWZzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGlmcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNjQwNCw3ICs2NDg5LDcgQEAKICAgICAgICAgaWRlbnRpZmllciBuYW1lOwogICAgICAgICBhc2RsX3NlcSogYm9keTsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3R5cGUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF90eXBlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF90eXBlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NDE0LDcgKzY0OTksNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdHlwZSA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9uYW1lKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbmFtZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbmFtZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjQzNSw3ICs2NTIwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNjQ2NCwxMyArNjU0OSwxMSBAQAogewogICAgIFB5T2JqZWN0KiB0bXAgPSBOVUxMOwogICAgIGFzZGxfc2VxKiBhcmdzOwotICAgIGlkZW50aWZpZXIgdmFyYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbjsKKyAgICBhcmdfdHkgdmFyYXJnOwogICAgIGFzZGxfc2VxKiBrd29ubHlhcmdzOwotICAgIGlkZW50aWZpZXIga3dhcmc7Ci0gICAgZXhwcl90eSBrd2FyZ2Fubm90YXRpb247Ci0gICAgYXNkbF9zZXEqIGRlZmF1bHRzOwogICAgIGFzZGxfc2VxKiBrd19kZWZhdWx0czsKKyAgICBhcmdfdHkga3dhcmc7CisgICAgYXNkbF9zZXEqIGRlZmF1bHRzOwogCiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9hcmdzKSkgewogICAgICAgICBpbnQgcmVzOwpAQCAtNjQ4Myw3ICs2NTY2LDcgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICB9CiAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBhcmdzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBhcmdzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgYXJnX3R5IHZhbHVlOwpAQCAtNjQ5NiwyNiArNjU3OSwxNiBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJhcmdzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YXJhcmcpKSB7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3ZhcmFyZykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhcmFyZyk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfaWRlbnRpZmllcih0bXAsICZ2YXJhcmcsIGFyZW5hKTsKKyAgICAgICAgcmVzID0gb2JqMmFzdF9hcmcodG1wLCAmdmFyYXJnLCBhcmVuYSk7CiAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CiAgICAgICAgIFB5X0NMRUFSKHRtcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmFyYXJnID0gTlVMTDsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YXJhcmdhbm5vdGF0aW9uKSkgewotICAgICAgICBpbnQgcmVzOwotICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFyYXJnYW5ub3RhdGlvbik7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcih0bXAsICZ2YXJhcmdhbm5vdGF0aW9uLCBhcmVuYSk7Ci0gICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiA9IE5VTEw7Ci0gICAgfQogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dvbmx5YXJncykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CkBAIC02NTI3LDcgKzY2MDAsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGt3b25seWFyZ3MgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGt3b25seWFyZ3MgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICBpZiAoa3dvbmx5YXJncyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBhcmdfdHkgdmFsdWU7CkBAIC02NTQwLDUwICs2NjEzLDYgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwia3dvbmx5YXJnc1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmcpKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZyk7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfaWRlbnRpZmllcih0bXAsICZrd2FyZywgYXJlbmEpOwotICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGt3YXJnID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd2FyZ2Fubm90YXRpb24pKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZ2Fubm90YXRpb24pOwotICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIodG1wLCAma3dhcmdhbm5vdGF0aW9uLCBhcmVuYSk7Ci0gICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAga3dhcmdhbm5vdGF0aW9uID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9kZWZhdWx0cykpIHsKLSAgICAgICAgaW50IHJlczsKLSAgICAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgICAgIFB5X3NzaXplX3QgaTsKLSAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2sodG1wKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50cyBmaWVsZCBcImRlZmF1bHRzXCIgbXVzdCBiZSBhIGxpc3QsIG5vdCBhICUuMjAwcyIsIHRtcC0+b2JfdHlwZS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgICAgfQotICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgZGVmYXVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7Ci0gICAgICAgIGlmIChkZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBleHByX3R5IHZhbHVlOwotICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKLSAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgICAgICBhc2RsX3NlcV9TRVQoZGVmYXVsdHMsIGksIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImRlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9CiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd19kZWZhdWx0cykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CkBAIC02NTk1LDcgKzY2MjQsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGt3X2RlZmF1bHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBrd19kZWZhdWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgIGlmIChrd19kZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNjYwOCw4ICs2NjM3LDQyIEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImt3X2RlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgKm91dCA9IGFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIHZhcmFyZ2Fubm90YXRpb24sIGt3b25seWFyZ3MsIGt3YXJnLAotICAgICAgICAgICAgICAgICAgICAga3dhcmdhbm5vdGF0aW9uLCBkZWZhdWx0cywga3dfZGVmYXVsdHMsIGFyZW5hKTsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfa3dhcmcpKSB7CisgICAgICAgIGludCByZXM7CisgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZyk7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIHJlcyA9IG9iajJhc3RfYXJnKHRtcCwgJmt3YXJnLCBhcmVuYSk7CisgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAga3dhcmcgPSBOVUxMOworICAgIH0KKyAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKSkgeworICAgICAgICBpbnQgcmVzOworICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfZGVmYXVsdHMpOworICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayh0bXApKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiYXJndW1lbnRzIGZpZWxkIFwiZGVmYXVsdHNcIiBtdXN0IGJlIGEgbGlzdCwgbm90IGEgJS4yMDBzIiwgdG1wLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOworICAgICAgICBkZWZhdWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGlmIChkZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBleHByX3R5IHZhbHVlOworICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBhc2RsX3NlcV9TRVQoZGVmYXVsdHMsIGksIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUih0bXApOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImRlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgKm91dCA9IGFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIGt3b25seWFyZ3MsIGt3X2RlZmF1bHRzLCBrd2FyZywgZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICBhcmVuYSk7CiAgICAgcmV0dXJuIDA7CiBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRih0bXApOwpAQCAtNjYzNCw3ICs2Njk3LDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiYXJnXCIgbWlzc2luZyBmcm9tIGFyZyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9hbm5vdGF0aW9uKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9hbm5vdGF0aW9uKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfYW5ub3RhdGlvbik7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NzA1LDcgKzY3NjgsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJuYW1lXCIgbWlzc2luZyBmcm9tIGFsaWFzIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2FzbmFtZSkpIHsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfYXNuYW1lKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfYXNuYW1lKTsKICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY3NDAsNyArNjgwMyw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImNvbnRleHRfZXhwclwiIG1pc3NpbmcgZnJvbSB3aXRoaXRlbSIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9vcHRpb25hbF92YXJzKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9vcHRpb25hbF92YXJzKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfb3B0aW9uYWxfdmFycyk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NzcwLDcgKzY4MzMsNyBAQAogICAgIGlmICghbSkgcmV0dXJuIE5VTEw7CiAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBU1QiLCAoUHlPYmplY3QqKSZBU1RfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5Q0ZfT05MWV9BU1QiLCBQeUNGX09OTFlfQVNUKSA8IDApCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5Q0ZfT05MWV9BU1QpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJtb2QiLCAoUHlPYmplY3QqKW1vZF90eXBlKSA8IDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiTW9kdWxlIiwgKFB5T2JqZWN0KilNb2R1bGVfdHlwZSkgPCAwKSByZXR1cm4KQEAgLTY4NTAsNiArNjkxMyw4IEBACiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJTdHIiLCAoUHlPYmplY3QqKVN0cl90eXBlKSA8IDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQnl0ZXMiLCAoUHlPYmplY3QqKUJ5dGVzX3R5cGUpIDwgMCkgcmV0dXJuCiAgICAgICAgIE5VTEw7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJOYW1lQ29uc3RhbnQiLCAoUHlPYmplY3QqKU5hbWVDb25zdGFudF90eXBlKSA8CisgICAgICAgIDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiRWxsaXBzaXMiLCAoUHlPYmplY3QqKUVsbGlwc2lzX3R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBdHRyaWJ1dGUiLCAoUHlPYmplY3QqKUF0dHJpYnV0ZV90eXBlKSA8IDApCkBAIC02OTQ5LDcgKzcwMTQsOCBAQAogCiBQeU9iamVjdCogUHlBU1RfbW9kMm9iaihtb2RfdHkgdCkKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBhc3Qyb2JqX21vZCh0KTsKIH0KIApAQCAtNjk2MCwxNCArNzAyNiwxNSBAQAogICAgIFB5T2JqZWN0ICpyZXFfdHlwZVszXTsKICAgICBjaGFyICpyZXFfbmFtZVtdID0geyJNb2R1bGUiLCAiRXhwcmVzc2lvbiIsICJJbnRlcmFjdGl2ZSJ9OwogICAgIGludCBpc2luc3RhbmNlOwotICAgIAorCiAgICAgcmVxX3R5cGVbMF0gPSAoUHlPYmplY3QqKU1vZHVsZV90eXBlOwogICAgIHJlcV90eXBlWzFdID0gKFB5T2JqZWN0KilFeHByZXNzaW9uX3R5cGU7CiAgICAgcmVxX3R5cGVbMl0gPSAoUHlPYmplY3QqKUludGVyYWN0aXZlX3R5cGU7Ci0gICAgCisKICAgICBhc3NlcnQoMCA8PSBtb2RlICYmIG1vZGUgPD0gMik7CiAKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2UoYXN0LCByZXFfdHlwZVttb2RlXSk7CiAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpCkBAIC02OTg1LDcgKzcwNTIsOCBAQAogCiBpbnQgUHlBU1RfQ2hlY2soUHlPYmplY3QqIG9iaikKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopJkFTVF90eXBlKTsKIH0KIApkaWZmIC0tZ2l0IGEvUHl0aG9uL193YXJuaW5ncy5jIGIvUHl0aG9uL193YXJuaW5ncy5jCmluZGV4IGYzM2U0NzcuLjYwMTNkN2QgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9fd2FybmluZ3MuYworKysgYi9QeXRob24vX3dhcm5pbmdzLmMKQEAgLTEzLDYgKzEzLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqX29uY2VfcmVnaXN0cnk7ICAvKiBEaWN0ICovCiBzdGF0aWMgUHlPYmplY3QgKl9kZWZhdWx0X2FjdGlvbjsgLyogU3RyaW5nICovCiAKK19QeV9JREVOVElGSUVSKGFyZ3YpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKIAogc3RhdGljIGludAogY2hlY2tfbWF0Y2hlZChQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqYXJnKQpAQCAtOTksNyArMTAxLDcgQEAKIAogCiAvKiBUaGUgaXRlbSBpcyBhIGJvcnJvd2VkIHJlZmVyZW5jZS4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKK3N0YXRpYyBQeU9iamVjdCoKIGdldF9maWx0ZXIoUHlPYmplY3QgKmNhdGVnb3J5LCBQeU9iamVjdCAqdGV4dCwgUHlfc3NpemVfdCBsaW5lbm8sCiAgICAgICAgICAgIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICoqaXRlbSkKIHsKQEAgLTE0NCwyMSArMTQ2LDI4IEBACiAgICAgICAgIGxuX29iaiA9IFB5VHVwbGVfR0VUX0lURU0odG1wX2l0ZW0sIDQpOwogCiAgICAgICAgIGdvb2RfbXNnID0gY2hlY2tfbWF0Y2hlZChtc2csIHRleHQpOworICAgICAgICBpZiAoZ29vZF9tc2cgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICBnb29kX21vZCA9IGNoZWNrX21hdGNoZWQobW9kLCBtb2R1bGUpOworICAgICAgICBpZiAoZ29vZF9tb2QgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICBpc19zdWJjbGFzcyA9IFB5T2JqZWN0X0lzU3ViY2xhc3MoY2F0ZWdvcnksIGNhdCk7CisgICAgICAgIGlmIChpc19zdWJjbGFzcyA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgIGxuID0gUHlMb25nX0FzU3NpemVfdChsbl9vYmopOwotICAgICAgICBpZiAoZ29vZF9tc2cgPT0gLTEgfHwgZ29vZF9tb2QgPT0gLTEgfHwgaXNfc3ViY2xhc3MgPT0gLTEgfHwKLSAgICAgICAgICAgIChsbiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSkKKyAgICAgICAgaWYgKGxuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICBpZiAoZ29vZF9tc2cgJiYgaXNfc3ViY2xhc3MgJiYgZ29vZF9tb2QgJiYgKGxuID09IDAgfHwgbGluZW5vID09IGxuKSkKLSAgICAgICAgICAgIHJldHVybiBfUHlVbmljb2RlX0FzU3RyaW5nKGFjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwogICAgIH0KIAogICAgIGFjdGlvbiA9IGdldF9kZWZhdWx0X2FjdGlvbigpOwotICAgIGlmIChhY3Rpb24gIT0gTlVMTCkgewotICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Bc1N0cmluZyhhY3Rpb24pOwotICAgIH0KKyAgICBpZiAoYWN0aW9uICE9IE5VTEwpCisgICAgICAgIHJldHVybiBhY3Rpb247CiAKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX05BTUUgIi5kZWZhdWx0YWN0aW9uIG5vdCBmb3VuZCIpOwpAQCAtMTkyLDIzICsyMDEsMjYgQEAKIG5vcm1hbGl6ZV9tb2R1bGUoUHlPYmplY3QgKmZpbGVuYW1lKQogewogICAgIFB5T2JqZWN0ICptb2R1bGU7Ci0gICAgY29uc3QgY2hhciAqbW9kX3N0cjsKKyAgICBpbnQga2luZDsKKyAgICB2b2lkICpkYXRhOwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaW50IHJjID0gUHlPYmplY3RfSXNUcnVlKGZpbGVuYW1lKTsKLSAgICBpZiAocmMgPT0gLTEpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGVsc2UgaWYgKHJjID09IDApCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHVua25vd24+Iik7Ci0KLSAgICBtb2Rfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhmaWxlbmFtZSk7Ci0gICAgaWYgKG1vZF9zdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbGVuID0gUHlVbmljb2RlX0dldExlbmd0aChmaWxlbmFtZSk7CiAgICAgaWYgKGxlbiA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGxlbiA9PSAwKQorICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjx1bmtub3duPiIpOworCisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKGZpbGVuYW1lKTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoZmlsZW5hbWUpOworCisgICAgLyogaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5weSIpOiAqLwogICAgIGlmIChsZW4gPj0gMyAmJgotICAgICAgICBzdHJuY21wKG1vZF9zdHIgKyAobGVuIC0gMyksICIucHkiLCAzKSA9PSAwKSB7CisgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGxlbi0zKSA9PSAnLicgJiYKKyAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgbGVuLTIpID09ICdwJyAmJgorICAgICAgICBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBsZW4tMSkgPT0gJ3knKQorICAgIHsKICAgICAgICAgbW9kdWxlID0gUHlVbmljb2RlX1N1YnN0cmluZyhmaWxlbmFtZSwgMCwgbGVuLTMpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTI1MywzOSArMjY1LDYzIEBACiAKICAgICBuYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChjYXRlZ29yeSwgJlB5SWRfX19uYW1lX18pOwogICAgIGlmIChuYW1lID09IE5VTEwpICAvKiBYWFggQ2FuIGFuIG9iamVjdCBsYWNrIGEgJ19fbmFtZV9fJyBhdHRyaWJ1dGU/ICovCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBlcnJvcjsKIAotICAgIGZfc3RkZXJyID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBmX3N0ZGVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIGlmIChmX3N0ZGVyciA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibG9zdCBzeXMuc3RkZXJyXG4iKTsKLSAgICAgICAgUHlfREVDUkVGKG5hbWUpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgLyogUHJpbnQgImZpbGVuYW1lOmxpbmVubzogY2F0ZWdvcnk6IHRleHRcbiIgKi8KLSAgICBQeUZpbGVfV3JpdGVPYmplY3QoZmlsZW5hbWUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpOwotICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhsaW5lbm9fc3RyLCBmX3N0ZGVycik7Ci0gICAgUHlGaWxlX1dyaXRlT2JqZWN0KG5hbWUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpOwotICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmX3N0ZGVycik7Ci0gICAgUHlGaWxlX1dyaXRlT2JqZWN0KHRleHQsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpOwotICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmX3N0ZGVycik7Ci0gICAgUHlfWERFQ1JFRihuYW1lKTsKKyAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KGZpbGVuYW1lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZyhsaW5lbm9fc3RyLCBmX3N0ZGVycikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QobmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjogIiwgZl9zdGRlcnIpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KHRleHQsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGZfc3RkZXJyKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgUHlfQ0xFQVIobmFtZSk7CiAKICAgICAvKiBQcmludCAiICBzb3VyY2VfbGluZVxuIiAqLwogICAgIGlmIChzb3VyY2VsaW5lKSB7Ci0gICAgICAgIGNoYXIgKnNvdXJjZV9saW5lX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoc291cmNlbGluZSk7Ci0gICAgICAgIGlmIChzb3VyY2VfbGluZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdoaWxlICgqc291cmNlX2xpbmVfc3RyID09ICcgJyB8fCAqc291cmNlX2xpbmVfc3RyID09ICdcdCcgfHwKLSAgICAgICAgICAgICAgICAqc291cmNlX2xpbmVfc3RyID09ICdcMDE0JykKLSAgICAgICAgICAgIHNvdXJjZV9saW5lX3N0cisrOworICAgICAgICBpbnQga2luZDsKKyAgICAgICAgdm9pZCAqZGF0YTsKKyAgICAgICAgUHlfc3NpemVfdCBpLCBsZW47CisgICAgICAgIFB5X1VDUzQgY2g7CisgICAgICAgIFB5T2JqZWN0ICp0cnVuY2F0ZWQ7CiAKLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKHNvdXJjZV9saW5lX3N0ciwgZl9zdGRlcnIpOworICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNvdXJjZWxpbmUpIDwgMSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHNvdXJjZWxpbmUpOworICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc291cmNlbGluZSk7CisgICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNvdXJjZWxpbmUpOworICAgICAgICBmb3IgKGk9MDsgaTxsZW47IGkrKykgeworICAgICAgICAgICAgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgIGlmIChjaCAhPSAnICcgJiYgY2ggIT0gJ1x0JyAmJiBjaCAhPSAnXDAxNCcpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICB0cnVuY2F0ZWQgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKHNvdXJjZWxpbmUsIGksIGxlbik7CisgICAgICAgIGlmICh0cnVuY2F0ZWQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KHNvdXJjZWxpbmUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpOworICAgICAgICBQeV9ERUNSRUYodHJ1bmNhdGVkKTsKICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGZfc3RkZXJyKTsKICAgICB9Ci0gICAgZWxzZQotICAgICAgICBpZiAoX1B5X0Rpc3BsYXlTb3VyY2VMaW5lKGZfc3RkZXJyLCBmaWxlbmFtZSwgbGluZW5vLCAyKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgIGVsc2UgeworICAgICAgICBfUHlfRGlzcGxheVNvdXJjZUxpbmUoZl9zdGRlcnIsIGZpbGVuYW1lLCBsaW5lbm8sIDIpOworICAgIH0KKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICBQeUVycl9DbGVhcigpOwogfQogCkBAIC0yOTYsOSArMzMyLDE2IEBACiB7CiAgICAgUHlPYmplY3QgKmtleSA9IE5VTEwsICp0ZXh0ID0gTlVMTCwgKnJlc3VsdCA9IE5VTEwsICpsaW5lbm9fb2JqID0gTlVMTDsKICAgICBQeU9iamVjdCAqaXRlbSA9IFB5X05vbmU7Ci0gICAgY29uc3QgY2hhciAqYWN0aW9uOworICAgIFB5T2JqZWN0ICphY3Rpb247CiAgICAgaW50IHJjOwogCisgICAgLyogbW9kdWxlIGNhbiBiZSBOb25lIGlmIGEgd2FybmluZyBpcyBlbWl0dGVkIGxhdGUgZHVyaW5nIFB5dGhvbiBzaHV0ZG93bi4KKyAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBQeXRob24gd2FybmluZ3MgbW9kdWxlIHdhcyBwcm9iYWJseSB1bmxvYWRlZCwgZmlsdGVycworICAgICAgIGFyZSBubyBtb3JlIGF2YWlsYWJsZSB0byBjaG9vc2UgYXMgYWN0aW9uLiBJdCBpcyBzYWZlciB0byBpZ25vcmUgdGhlCisgICAgICAgd2FybmluZyBhbmQgZG8gbm90aGluZy4gKi8KKyAgICBpZiAobW9kdWxlID09IFB5X05vbmUpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworCiAgICAgaWYgKHJlZ2lzdHJ5ICYmICFQeURpY3RfQ2hlY2socmVnaXN0cnkpICYmIChyZWdpc3RyeSAhPSBQeV9Ob25lKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ3JlZ2lzdHJ5JyBtdXN0IGJlIGEgZGljdCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM1NCw3ICszOTcsNyBAQAogICAgIGlmIChhY3Rpb24gPT0gTlVMTCkKICAgICAgICAgZ290byBjbGVhbnVwOwogCi0gICAgaWYgKHN0cmNtcChhY3Rpb24sICJlcnJvciIpID09IDApIHsKKyAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAiZXJyb3IiKSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChjYXRlZ29yeSwgbWVzc2FnZSk7CiAgICAgICAgIGdvdG8gY2xlYW51cDsKICAgICB9CkBAIC0zNjIsMTMgKzQwNSwxMyBAQAogICAgIC8qIFN0b3JlIGluIHRoZSByZWdpc3RyeSB0aGF0IHdlJ3ZlIGJlZW4gaGVyZSwgKmV4Y2VwdCogd2hlbiB0aGUgYWN0aW9uCiAgICAgICAgaXMgImFsd2F5cyIuICovCiAgICAgcmMgPSAwOwotICAgIGlmIChzdHJjbXAoYWN0aW9uLCAiYWx3YXlzIikgIT0gMCkgeworICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJhbHdheXMiKSAhPSAwKSB7CiAgICAgICAgIGlmIChyZWdpc3RyeSAhPSBOVUxMICYmIHJlZ2lzdHJ5ICE9IFB5X05vbmUgJiYKICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWdpc3RyeSwga2V5LCBQeV9UcnVlKSA8IDApCiAgICAgICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJpZ25vcmUiKSA9PSAwKQorICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJpZ25vcmUiKSA9PSAwKQogICAgICAgICAgICAgZ290byByZXR1cm5fbm9uZTsKLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgIm9uY2UiKSA9PSAwKSB7CisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgIm9uY2UiKSA9PSAwKSB7CiAgICAgICAgICAgICBpZiAocmVnaXN0cnkgPT0gTlVMTCB8fCByZWdpc3RyeSA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgcmVnaXN0cnkgPSBnZXRfb25jZV9yZWdpc3RyeSgpOwogICAgICAgICAgICAgICAgIGlmIChyZWdpc3RyeSA9PSBOVUxMKQpAQCAtMzc3LDI0ICs0MjAsMTUgQEAKICAgICAgICAgICAgIC8qIF9vbmNlX3JlZ2lzdHJ5Wyh0ZXh0LCBjYXRlZ29yeSldID0gMSAqLwogICAgICAgICAgICAgcmMgPSB1cGRhdGVfcmVnaXN0cnkocmVnaXN0cnksIHRleHQsIGNhdGVnb3J5LCAwKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAibW9kdWxlIikgPT0gMCkgeworICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJtb2R1bGUiKSA9PSAwKSB7CiAgICAgICAgICAgICAvKiByZWdpc3RyeVsodGV4dCwgY2F0ZWdvcnksIDApXSA9IDEgKi8KICAgICAgICAgICAgIGlmIChyZWdpc3RyeSAhPSBOVUxMICYmIHJlZ2lzdHJ5ICE9IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgcmMgPSB1cGRhdGVfcmVnaXN0cnkocmVnaXN0cnksIHRleHQsIGNhdGVnb3J5LCAwKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAiZGVmYXVsdCIpICE9IDApIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp0b19zdHIgPSBQeU9iamVjdF9TdHIoaXRlbSk7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICplcnJfc3RyID0gIj8/PyI7Ci0KLSAgICAgICAgICAgIGlmICh0b19zdHIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGVycl9zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHRvX3N0cik7Ci0gICAgICAgICAgICAgICAgaWYgKGVycl9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAiZGVmYXVsdCIpICE9IDApIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5yZWNvZ25pemVkIGFjdGlvbiAoJXMpIGluIHdhcm5pbmdzLmZpbHRlcnM6XG4gJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLCBlcnJfc3RyKTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodG9fc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJVbnJlY29nbml6ZWQgYWN0aW9uICglUikgaW4gd2FybmluZ3MuZmlsdGVyczpcbiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sIGl0ZW0pOwogICAgICAgICAgICAgZ290byBjbGVhbnVwOwogICAgICAgICB9CiAgICAgfQpAQCAtNTI4LDEzICs1NjIsMTIgQEAKICAgICAgICAgICAgIFB5X0lOQ1JFRigqZmlsZW5hbWUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoKm1vZHVsZSk7CiAgICAgICAgICpmaWxlbmFtZSA9IE5VTEw7Ci0gICAgICAgIGlmIChtb2R1bGVfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7Ci0gICAgICAgIGlmIChzdHJjbXAobW9kdWxlX3N0ciwgIl9fbWFpbl9fIikgPT0gMCkgewotICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3YgPSBQeVN5c19HZXRPYmplY3QoImFyZ3YiKTsKLSAgICAgICAgICAgIGlmIChhcmd2ICE9IE5VTEwgJiYgUHlMaXN0X1NpemUoYXJndikgPiAwKSB7CisgICAgICAgIGlmICgqbW9kdWxlICE9IFB5X05vbmUgJiYgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoKm1vZHVsZSwgIl9fbWFpbl9fIikgPT0gMCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3YgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfYXJndik7CisgICAgICAgICAgICAvKiBQeUxpc3RfQ2hlY2soKSBpcyBuZWVkZWQgYmVjYXVzZSBzeXMuYXJndiBpcyBzZXQgdG8gTm9uZSBkdXJpbmcKKyAgICAgICAgICAgICAgIFB5dGhvbiBmaW5hbGl6YXRpb24gKi8KKyAgICAgICAgICAgIGlmIChhcmd2ICE9IE5VTEwgJiYgUHlMaXN0X0NoZWNrKGFyZ3YpICYmIFB5TGlzdF9TaXplKGFyZ3YpID4gMCkgewogICAgICAgICAgICAgICAgIGludCBpc190cnVlOwogICAgICAgICAgICAgICAgICpmaWxlbmFtZSA9IFB5TGlzdF9HZXRJdGVtKGFyZ3YsIDApOwogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRigqZmlsZW5hbWUpOwpAQCAtNTU0LDggKzU4Nyw4IEBACiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiBlbWJlZGRlZCBpbnRlcnByZXRlcnMgZG9uJ3QgaGF2ZSBzeXMuYXJndiwgc2VlIGJ1ZyAjODM5MTUxICovCiAgICAgICAgICAgICAgICAgKmZpbGVuYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIl9fbWFpbl9fIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAgICAgICAgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKSB7CkBAIC02NDksNyArNjgyLDcgQEAKICAgICBQeU9iamVjdCAqcmVnaXN0cnkgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptb2R1bGVfZ2xvYmFscyA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT09PaXxPT086d2Fybl9leHBsaWNpdCIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PVWl8T09POndhcm5fZXhwbGljaXQiLAogICAgICAgICAgICAgICAgIGt3ZF9saXN0LCAmbWVzc2FnZSwgJmNhdGVnb3J5LCAmZmlsZW5hbWUsICZsaW5lbm8sICZtb2R1bGUsCiAgICAgICAgICAgICAgICAgJnJlZ2lzdHJ5LCAmbW9kdWxlX2dsb2JhbHMpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTcwNywxNCArNzQwLDE0IEBACiAKICAgICAgICAgLyogSGFuZGxlIHRoZSB3YXJuaW5nLiAqLwogICAgICAgICByZXR1cm5lZCA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sIG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgc291cmNlX2xpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnksIHNvdXJjZV9saW5lKTsKICAgICAgICAgUHlfREVDUkVGKHNvdXJjZV9saXN0KTsKICAgICAgICAgcmV0dXJuIHJldHVybmVkOwogICAgIH0KIAogIHN0YW5kYXJkX2NhbGw6CiAgICAgcmV0dXJuIHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sIG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBOVUxMKTsKIH0KIAogCkBAIC03ODYsMTEgKzgxOSwyNiBAQAogCiAvKiBXYXJuaW5nIHdpdGggZXhwbGljaXQgb3JpZ2luICovCiBpbnQKK1B5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCit7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBpZiAoY2F0ZWdvcnkgPT0gTlVMTCkKKyAgICAgICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKKyAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCByZWdpc3RyeSwgTlVMTCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAogUHlFcnJfV2FybkV4cGxpY2l0KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqdGV4dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciwgUHlPYmplY3QgKnJlZ2lzdHJ5KQogewotICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyh0ZXh0KTsKICAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CiAgICAgUHlPYmplY3QgKm1vZHVsZSA9IE5VTEw7CkBAIC04MDAsMTggKzg0OCwxMiBAQAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgaWYgKG1vZHVsZV9zdHIgIT0gTlVMTCkgewogICAgICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2R1bGVfc3RyKTsKLSAgICAgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKLSAgICBpZiAoY2F0ZWdvcnkgPT0gTlVMTCkKLSAgICAgICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKLSAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLCBtb2R1bGUsIHJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgcmV0ID0gMDsKKyAgICByZXQgPSBQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSwgcmVnaXN0cnkpOwogCiAgZXhpdDoKICAgICBQeV9YREVDUkVGKG1lc3NhZ2UpOwpAQCAtODIwLDYgKzg2Miw0OSBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKK2ludAorUHlFcnJfV2FybkV4cGxpY2l0Rm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciwgUHlPYmplY3QgKnJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIFB5T2JqZWN0ICptZXNzYWdlOworICAgIFB5T2JqZWN0ICptb2R1bGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpbnQgcmV0ID0gLTE7CisgICAgdmFfbGlzdCB2YXJnczsKKworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKG1vZHVsZV9zdHIgIT0gTlVMTCkgeworICAgICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2R1bGVfc3RyKTsKKyAgICAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBleGl0OworICAgIH0KKworI2lmZGVmIEhBVkVfU1REQVJHX1BST1RPVFlQRVMKKyAgICB2YV9zdGFydCh2YXJncywgZm9ybWF0KTsKKyNlbHNlCisgICAgdmFfc3RhcnQodmFyZ3MpOworI2VuZGlmCisgICAgbWVzc2FnZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihmb3JtYXQsIHZhcmdzKTsKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgIHJlcyA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCByZWdpc3RyeSwgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKKyAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgdmFfZW5kKHZhcmdzKTsKK2V4aXQ6CisgICAgUHlfWERFQ1JFRihtb2R1bGUpOworICAgIFB5X1hERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiByZXQ7Cit9CisKIAogUHlEb2NfU1RSVkFSKHdhcm5fZG9jLAogIklzc3VlIGEgd2FybmluZywgb3IgbWF5YmUgaWdub3JlIGl0IG9yIHJhaXNlIGFuIGV4Y2VwdGlvbi4iKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9hc2RsLmMgYi9QeXRob24vYXNkbC5jCmluZGV4IGU3ZTMyODAuLjc0ZmE5NDEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9hc2RsLmMKKysrIGIvUHl0aG9uL2FzZGwuYwpAQCAtMiw3ICsyLDcgQEAKICNpbmNsdWRlICJhc2RsLmgiCiAKIGFzZGxfc2VxICoKLWFzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQorX1B5X2FzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGFzZGxfc2VxICpzZXEgPSBOVUxMOwogICAgIHNpemVfdCBuID0gKHNpemUgPyAoc2l6ZW9mKHZvaWQgKikgKiAoc2l6ZSAtIDEpKSA6IDApOwpAQCAtMzMsNyArMzMsNyBAQAogfQogCiBhc2RsX2ludF9zZXEgKgotYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQorX1B5X2FzZGxfaW50X3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBhc2RsX2ludF9zZXEgKnNlcSA9IE5VTEw7CiAgICAgc2l6ZV90IG4gPSAoc2l6ZSA/IChzaXplb2Yodm9pZCAqKSAqIChzaXplIC0gMSkpIDogMCk7CmRpZmYgLS1naXQgYS9QeXRob24vYXN0LmMgYi9QeXRob24vYXN0LmMKaW5kZXggOWEwYjA2NC4uNTY2ODc1NSAxMDA2NDQKLS0tIGEvUHl0aG9uL2FzdC5jCisrKyBiL1B5dGhvbi9hc3QuYwpAQCAtMTA5LDIyICsxMDksMTQgQEAKIHsKICAgICBpZiAoIXZhbGlkYXRlX2FyZ3MoYXJncy0+YXJncykpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhcmdzLT52YXJhcmdhbm5vdGF0aW9uKSB7Ci0gICAgICAgIGlmICghYXJncy0+dmFyYXJnKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInZhcmFyZ2Fubm90YXRpb24gYnV0IG5vIHZhcmFyZyBvbiBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdmFsaWRhdGVfZXhwcihhcmdzLT52YXJhcmdhbm5vdGF0aW9uLCBMb2FkKSkKKyAgICBpZiAoYXJncy0+dmFyYXJnICYmIGFyZ3MtPnZhcmFyZy0+YW5ub3RhdGlvbgorICAgICAgICAmJiAhdmFsaWRhdGVfZXhwcihhcmdzLT52YXJhcmctPmFubm90YXRpb24sIExvYWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCF2YWxpZGF0ZV9hcmdzKGFyZ3MtPmt3b25seWFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoYXJncy0+a3dhcmdhbm5vdGF0aW9uKSB7Ci0gICAgICAgIGlmICghYXJncy0+a3dhcmcpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAia3dhcmdhbm5vdGF0aW9uIGJ1dCBubyBrd2FyZyBvbiBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdmFsaWRhdGVfZXhwcihhcmdzLT5rd2FyZ2Fubm90YXRpb24sIExvYWQpKQorICAgIGlmIChhcmdzLT5rd2FyZyAmJiBhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiAKKyAgICAgICAgJiYgIXZhbGlkYXRlX2V4cHIoYXJncy0+a3dhcmctPmFubm90YXRpb24sIExvYWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKGFzZGxfc2VxX0xFTihhcmdzLT5kZWZhdWx0cykgPiBhc2RsX3NlcV9MRU4oYXJncy0+YXJncykpIHsKQEAgLTI4Miw2ICsyNzQsNyBAQAogICAgICAgICByZXR1cm4gdmFsaWRhdGVfZXhwcnMoZXhwLT52LlR1cGxlLmVsdHMsIGN0eCwgMCk7CiAgICAgLyogVGhlc2UgbGFzdCBjYXNlcyBkb24ndCBoYXZlIGFueSBjaGVja2luZy4gKi8KICAgICBjYXNlIE5hbWVfa2luZDoKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgcmV0dXJuIDE7CiAgICAgZGVmYXVsdDoKQEAgLTQ5OCw3ICs0OTEsNyBAQAogc3RydWN0IGNvbXBpbGluZyB7CiAgICAgY2hhciAqY19lbmNvZGluZzsgLyogc291cmNlIGVuY29kaW5nICovCiAgICAgUHlBcmVuYSAqY19hcmVuYTsgLyogYXJlbmEgZm9yIGFsbG9jYXRpbmcgbWVtZW9yeSAqLwotICAgIGNvbnN0IGNoYXIgKmNfZmlsZW5hbWU7IC8qIGZpbGVuYW1lICovCisgICAgUHlPYmplY3QgKmNfZmlsZW5hbWU7IC8qIGZpbGVuYW1lICovCiAgICAgUHlPYmplY3QgKmNfbm9ybWFsaXplOyAvKiBOb3JtYWxpemF0aW9uIGZ1bmN0aW9uIGZyb20gdW5pY29kZWRhdGEuICovCiAgICAgUHlPYmplY3QgKmNfbm9ybWFsaXplX2FyZ3M7IC8qIE5vcm1hbGl6YXRpb24gYXJndW1lbnQgdHVwbGUuICovCiB9OwpAQCAtNTY3LDcgKzU2MCwxMCBAQAogICAgICAgICBpZCA9IGlkMjsKICAgICB9CiAgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJmlkKTsKLSAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIGlkKTsKKyAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBpZCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihpZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gaWQ7CiB9CiAKQEAgLTU3NywyNCArNTczLDEzIEBACiBhc3RfZXJyb3Ioc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbiwgY29uc3QgY2hhciAqZXJybXNnKQogewogICAgIFB5T2JqZWN0ICp2YWx1ZSwgKmVycnN0ciwgKmxvYywgKnRtcDsKLSAgICBQeU9iamVjdCAqZmlsZW5hbWVfb2JqOwogCi0gICAgbG9jID0gUHlFcnJfUHJvZ3JhbVRleHQoYy0+Y19maWxlbmFtZSwgTElORU5PKG4pKTsKKyAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChjLT5jX2ZpbGVuYW1lLCBMSU5FTk8obikpOwogICAgIGlmICghbG9jKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgbG9jID0gUHlfTm9uZTsKICAgICB9Ci0gICAgaWYgKGMtPmNfZmlsZW5hbWUpIHsKLSAgICAgICAgZmlsZW5hbWVfb2JqID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChjLT5jX2ZpbGVuYW1lKTsKLSAgICAgICAgaWYgKCFmaWxlbmFtZV9vYmopIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihsb2MpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIGZpbGVuYW1lX29iaiA9IFB5X05vbmU7Ci0gICAgfQotICAgIHRtcCA9IFB5X0J1aWxkVmFsdWUoIihOaWlOKSIsIGZpbGVuYW1lX29iaiwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGxvYyk7CisgICAgdG1wID0gUHlfQnVpbGRWYWx1ZSgiKE9paU4pIiwgYy0+Y19maWxlbmFtZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGxvYyk7CiAgICAgaWYgKCF0bXApCiAgICAgICAgIHJldHVybiAwOwogICAgIGVycnN0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGVycm1zZyk7CkBAIC02NzcsOCArNjYyLDggQEAKICovCiAKIG1vZF90eQotUHlBU1RfRnJvbU5vZGUoY29uc3Qgbm9kZSAqbiwgUHlDb21waWxlckZsYWdzICpmbGFncywgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK1B5QVNUX0Zyb21Ob2RlT2JqZWN0KGNvbnN0IG5vZGUgKm4sIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZmlsZW5hbWUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGludCBpLCBqLCBrLCBudW07CiAgICAgYXNkbF9zZXEgKnN0bXRzID0gTlVMTDsKQEAgLTY4OCw2ICs2NzMsNyBAQAogICAgIG1vZF90eSByZXMgPSBOVUxMOwogCiAgICAgYy5jX2FyZW5hID0gYXJlbmE7CisgICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCiAgICAgYy5jX2ZpbGVuYW1lID0gZmlsZW5hbWU7CiAgICAgYy5jX25vcm1hbGl6ZSA9IGMuY19ub3JtYWxpemVfYXJncyA9IE5VTEw7CiAgICAgaWYgKGZsYWdzICYmIGZsYWdzLT5jZl9mbGFncyAmIFB5Q0ZfU09VUkNFX0lTX1VURjgpIHsKQEAgLTcxMCw3ICs2OTYsNyBAQAogICAgIGsgPSAwOwogICAgIHN3aXRjaCAoVFlQRShuKSkgewogICAgICAgICBjYXNlIGZpbGVfaW5wdXQ6Ci0gICAgICAgICAgICBzdG10cyA9IGFzZGxfc2VxX25ldyhudW1fc3RtdHMobiksIGFyZW5hKTsKKyAgICAgICAgICAgIHN0bXRzID0gX1B5X2FzZGxfc2VxX25ldyhudW1fc3RtdHMobiksIGFyZW5hKTsKICAgICAgICAgICAgIGlmICghc3RtdHMpCiAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pIC0gMTsgaSsrKSB7CkBAIC03NTAsNyArNzM2LDcgQEAKICAgICAgICAgfQogICAgICAgICBjYXNlIHNpbmdsZV9pbnB1dDoKICAgICAgICAgICAgIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBORVdMSU5FKSB7Ci0gICAgICAgICAgICAgICAgc3RtdHMgPSBhc2RsX3NlcV9uZXcoMSwgYXJlbmEpOworICAgICAgICAgICAgICAgIHN0bXRzID0gX1B5X2FzZGxfc2VxX25ldygxLCBhcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdG10cykKICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKHN0bXRzLCAwLCBQYXNzKG4tPm5fbGluZW5vLCBuLT5uX2NvbF9vZmZzZXQsCkBAIC03NjIsNyArNzQ4LDcgQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICAgICAgICAgICAgICBudW0gPSBudW1fc3RtdHMobik7Ci0gICAgICAgICAgICAgICAgc3RtdHMgPSBhc2RsX3NlcV9uZXcobnVtLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgc3RtdHMgPSBfUHlfYXNkbF9zZXFfbmV3KG51bSwgYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghc3RtdHMpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgICAgIGlmIChudW0gPT0gMSkgewpAQCAtODAxLDYgKzc4NywyMSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKK21vZF90eQorUHlBU1RfRnJvbU5vZGUoY29uc3Qgbm9kZSAqbiwgUHlDb21waWxlckZsYWdzICpmbGFncywgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLAorICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgbW9kX3R5IG1vZDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIG1vZDsKKworfQorCiAvKiBSZXR1cm4gdGhlIEFTVCByZXByLiBvZiB0aGUgb3BlcmF0b3IgcmVwcmVzZW50ZWQgYXMgc3ludGF4ICh8LCBeLCBldGMuKQogKi8KIApAQCAtOTAzLDcgKzkwNCw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOYW1lX2tpbmQ6CiAgICAgICAgICAgICBpZiAoY3R4ID09IFN0b3JlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGUtPnYuTmFtZS5pZCwgbiwgMSkpCisgICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGUtPnYuTmFtZS5pZCwgbiwgMCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOyAvKiBmb3JiaWRkZW5fbmFtZSgpIGNhbGxzIGFzdF9lcnJvcigpICovCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlLT52Lk5hbWUuY3R4ID0gY3R4OwpAQCAtOTU1LDYgKzk1Niw5IEBACiAgICAgICAgIGNhc2UgQnl0ZXNfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJsaXRlcmFsIjsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgorICAgICAgICAgICAgZXhwcl9uYW1lID0gImtleXdvcmQiOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJFbGxpcHNpcyI7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwOTUsNyArMTA5OSw3IEBACiAgICAgaW50IGk7CiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdGVzdGxpc3QgfHwgVFlQRShuKSA9PSB0ZXN0bGlzdF9zdGFyX2V4cHIgfHwgVFlQRShuKSA9PSB0ZXN0bGlzdF9jb21wKTsKIAotICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTExOSw2ICsxMTIzLDcgQEAKICAgICBpZGVudGlmaWVyIG5hbWU7CiAgICAgZXhwcl90eSBhbm5vdGF0aW9uID0gTlVMTDsKICAgICBub2RlICpjaDsKKyAgICBhcmdfdHkgdG1wOwogCiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdGZwZGVmIHx8IFRZUEUobikgPT0gdmZwZGVmKTsKICAgICBjaCA9IENISUxEKG4sIDApOwpAQCAtMTEzNCw3ICsxMTM5LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm4gYXJnKG5hbWUsIGFubm90YXRpb24sIGMtPmNfYXJlbmEpOworICAgIHRtcCA9IGFyZyhuYW1lLCBhbm5vdGF0aW9uLCBjLT5jX2FyZW5hKTsKKyAgICBpZiAoIXRtcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0bXAtPmxpbmVubyA9IExJTkVOTyhuKTsKKyAgICB0bXAtPmNvbF9vZmZzZXQgPSBuLT5uX2NvbF9vZmZzZXQ7CisgICAgcmV0dXJuIHRtcDsKIH0KIAogLyogcmV0dXJucyAtMSBpZiBmYWlsZWQgdG8gaGFuZGxlIGtleXdvcmQgb25seSBhcmd1bWVudHMKQEAgLTExOTIsNiArMTIwMyw4IEBACiAgICAgICAgICAgICAgICAgYXJnID0gYXJnKGFyZ25hbWUsIGFubm90YXRpb24sIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghYXJnKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIGFyZy0+bGluZW5vID0gTElORU5PKGNoKTsKKyAgICAgICAgICAgICAgICBhcmctPmNvbF9vZmZzZXQgPSBjaC0+bl9jb2xfb2Zmc2V0OwogICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChrd29ubHlhcmdzLCBqKyssIGFyZyk7CiAgICAgICAgICAgICAgICAgaSArPSAyOyAvKiB0aGUgbmFtZSBhbmQgdGhlIGNvbW1hICovCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjMwLDE1ICsxMjQzLDEzIEBACiAgICAgaW50IGksIGosIGssIG5wb3NhcmdzID0gMCwgbmt3b25seWFyZ3MgPSAwOwogICAgIGludCBucG9zZGVmYXVsdHMgPSAwLCBmb3VuZF9kZWZhdWx0ID0gMDsKICAgICBhc2RsX3NlcSAqcG9zYXJncywgKnBvc2RlZmF1bHRzLCAqa3dvbmx5YXJncywgKmt3ZGVmYXVsdHM7Ci0gICAgaWRlbnRpZmllciB2YXJhcmcgPSBOVUxMLCBrd2FyZyA9IE5VTEw7CisgICAgYXJnX3R5IHZhcmFyZyA9IE5VTEwsIGt3YXJnID0gTlVMTDsKICAgICBhcmdfdHkgYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbiA9IE5VTEwsIGt3YXJnYW5ub3RhdGlvbiA9IE5VTEw7CiAgICAgbm9kZSAqY2g7CiAKICAgICBpZiAoVFlQRShuKSA9PSBwYXJhbWV0ZXJzKSB7CiAgICAgICAgIGlmIChOQ0gobikgPT0gMikgLyogKCkgYXMgYXJndW1lbnQgbGlzdCAqLwotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHMoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIG4gPSBDSElMRChuLCAxKTsKICAgICB9CiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdHlwZWRhcmdzbGlzdCB8fCBUWVBFKG4pID09IHZhcmFyZ3NsaXN0KTsKQEAgLTEyNzAsMjIgKzEyODEsMjIgQEAKICAgICAgICAgaWYgKFRZUEUoY2gpID09IERPVUJMRVNUQVIpIGJyZWFrOwogICAgICAgICBpZiAoVFlQRShjaCkgPT0gdGZwZGVmIHx8IFRZUEUoY2gpID09IHZmcGRlZikgbmt3b25seWFyZ3MrKzsKICAgICB9Ci0gICAgcG9zYXJncyA9IChucG9zYXJncyA/IGFzZGxfc2VxX25ldyhucG9zYXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICBwb3NhcmdzID0gKG5wb3NhcmdzID8gX1B5X2FzZGxfc2VxX25ldyhucG9zYXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIXBvc2FyZ3MgJiYgbnBvc2FyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGt3b25seWFyZ3MgPSAobmt3b25seWFyZ3MgPwotICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX25ldyhua3dvbmx5YXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICBfUHlfYXNkbF9zZXFfbmV3KG5rd29ubHlhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICgha3dvbmx5YXJncyAmJiBua3dvbmx5YXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcG9zZGVmYXVsdHMgPSAobnBvc2RlZmF1bHRzID8KLSAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfbmV3KG5wb3NkZWZhdWx0cywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgX1B5X2FzZGxfc2VxX25ldyhucG9zZGVmYXVsdHMsIGMtPmNfYXJlbmEpIDogTlVMTCk7CiAgICAgaWYgKCFwb3NkZWZhdWx0cyAmJiBucG9zZGVmYXVsdHMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIFRoZSBsZW5ndGggb2Yga3dvbmx5YXJncyBhbmQga3dkZWZhdWx0cyBhcmUgc2FtZQogICAgICAgIHNpbmNlIHdlIHNldCBOVUxMIGFzIGRlZmF1bHQgZm9yIGtleXdvcmQgb25seSBhcmd1bWVudCB3L28gZGVmYXVsdAogICAgICAgIC0gd2UgaGF2ZSBzZXF1ZW5jZSBkYXRhIHN0cnVjdHVyZSwgYnV0IG5vIGRpY3Rpb25hcnkgKi8KICAgICBrd2RlZmF1bHRzID0gKG5rd29ubHlhcmdzID8KLSAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9uZXcobmt3b25seWFyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CisgICAgICAgICAgICAgICAgICAgX1B5X2FzZGxfc2VxX25ldyhua3dvbmx5YXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIWt3ZGVmYXVsdHMgJiYgbmt3b25seWFyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMzQ0LDE3ICsxMzU1LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGkgPSByZXM7IC8qIHJlcyBoYXMgbmV3IHBvc2l0aW9uIHRvIHByb2Nlc3MgKi8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhcmFyZyA9IE5FV19JREVOVElGSUVSKENISUxEKGNoLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHZhcmFyZyA9IGFzdF9mb3JfYXJnKGMsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJhcmcpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIHZhcmFyZywgQ0hJTEQoY2gsIDApLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpZiAoTkNIKGNoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZXJlIGlzIGFuIGFubm90YXRpb24gb24gdGhlIHZhcmFyZyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMikpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJhcmdhbm5vdGF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgaSArPSAzOwogICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IE5DSChuKSAmJiAoVFlQRShDSElMRChuLCBpKSkgPT0gdGZwZGVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBUWVBFKENISUxEKG4sIGkpKSA9PSB2ZnBkZWYpKSB7CkBAIC0xMzY5LDE3ICsxMzczLDkgQEAKICAgICAgICAgICAgIGNhc2UgRE9VQkxFU1RBUjoKICAgICAgICAgICAgICAgICBjaCA9IENISUxEKG4sIGkrMSk7ICAvKiB0ZnBkZWYgKi8KICAgICAgICAgICAgICAgICBhc3NlcnQoVFlQRShjaCkgPT0gdGZwZGVmIHx8IFRZUEUoY2gpID09IHZmcGRlZik7Ci0gICAgICAgICAgICAgICAga3dhcmcgPSBORVdfSURFTlRJRklFUihDSElMRChjaCwgMCkpOworICAgICAgICAgICAgICAgIGt3YXJnID0gYXN0X2Zvcl9hcmcoYywgY2gpOwogICAgICAgICAgICAgICAgIGlmICgha3dhcmcpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAvKiB0aGVyZSBpcyBhbiBhbm5vdGF0aW9uIG9uIHRoZSBrd2FyZyAqLwotICAgICAgICAgICAgICAgICAgICBrd2FyZ2Fubm90YXRpb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFrd2FyZ2Fubm90YXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGt3YXJnLCBDSElMRChjaCwgMCksIDApKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICBpICs9IDM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTM4OSw4ICsxMzg1LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnRzKHBvc2FyZ3MsIHZhcmFyZywgdmFyYXJnYW5ub3RhdGlvbiwga3dvbmx5YXJncywga3dhcmcsCi0gICAgICAgICAgICAgICAgICAgIGt3YXJnYW5ub3RhdGlvbiwgcG9zZGVmYXVsdHMsIGt3ZGVmYXVsdHMsIGMtPmNfYXJlbmEpOworICAgIHJldHVybiBhcmd1bWVudHMocG9zYXJncywgdmFyYXJnLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCBrd2FyZywgcG9zZGVmYXVsdHMsIGMtPmNfYXJlbmEpOwogfQogCiBzdGF0aWMgZXhwcl90eQpAQCAtMTQ2OSw3ICsxNDY0LDcgQEAKICAgICBpbnQgaTsKIAogICAgIFJFUShuLCBkZWNvcmF0b3JzKTsKLSAgICBkZWNvcmF0b3Jfc2VxID0gYXNkbF9zZXFfbmV3KE5DSChuKSwgYy0+Y19hcmVuYSk7CisgICAgZGVjb3JhdG9yX3NlcSA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWRlY29yYXRvcl9zZXEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xNTU1LDggKzE1NTAsNyBAQAogICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKIAogICAgIGlmIChOQ0gobikgPT0gMykgewotICAgICAgICBhcmdzID0gYXJndW1lbnRzKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgYy0+Y19hcmVuYSk7CisgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghYXJncykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDIpKTsKQEAgLTE2NjYsNyArMTY2MCw3IEBACiAgICAgaWYgKG5fZm9ycyA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBjb21wcyA9IGFzZGxfc2VxX25ldyhuX2ZvcnMsIGMtPmNfYXJlbmEpOworICAgIGNvbXBzID0gX1B5X2FzZGxfc2VxX25ldyhuX2ZvcnMsIGMtPmNfYXJlbmEpOwogICAgIGlmICghY29tcHMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xNzA3LDcgKzE3MDEsNyBAQAogICAgICAgICAgICAgaWYgKG5faWZzID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBpZnMgPSBhc2RsX3NlcV9uZXcobl9pZnMsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWZzID0gX1B5X2FzZGxfc2VxX25ldyhuX2lmcywgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWlmcykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTgxOSwxMSArMTgxMywyMSBAQAogCiAgICAgc3dpdGNoIChUWVBFKGNoKSkgewogICAgIGNhc2UgTkFNRTogewotICAgICAgICAvKiBBbGwgbmFtZXMgc3RhcnQgaW4gTG9hZCBjb250ZXh0LCBidXQgbWF5IGxhdGVyIGJlCi0gICAgICAgICAgIGNoYW5nZWQuICovCi0gICAgICAgIFB5T2JqZWN0ICpuYW1lID0gTkVXX0lERU5USUZJRVIoY2gpOworICAgICAgICBQeU9iamVjdCAqbmFtZTsKKyAgICAgICAgY29uc3QgY2hhciAqcyA9IFNUUihjaCk7CisgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4ocyk7CisgICAgICAgIGlmIChsZW4gPj0gNCAmJiBsZW4gPD0gNSkgeworICAgICAgICAgICAgaWYgKCFzdHJjbXAocywgIk5vbmUiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUNvbnN0YW50KFB5X05vbmUsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHMsICJUcnVlIikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVDb25zdGFudChQeV9UcnVlLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChzLCAiRmFsc2UiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUNvbnN0YW50KFB5X0ZhbHNlLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIH0KKyAgICAgICAgbmFtZSA9IG5ld19pZGVudGlmaWVyKHMsIGMpOwogICAgICAgICBpZiAoIW5hbWUpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgLyogQWxsIG5hbWVzIHN0YXJ0IGluIExvYWQgY29udGV4dCwgYnV0IG1heSBsYXRlciBiZSBjaGFuZ2VkLiAqLwogICAgICAgICByZXR1cm4gTmFtZShuYW1lLCBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGNhc2UgU1RSSU5HOiB7CkBAIC0xODQ4LDEyICsxODUyLDE1IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFzdF9lcnJvcihjLCBuLCBidWYpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0eXBlKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodGJhY2spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpOworICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBpZiAoYnl0ZXNtb2RlKQogICAgICAgICAgICAgcmV0dXJuIEJ5dGVzKHN0ciwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgICAgICBlbHNlCkBAIC0xODY0LDcgKzE4NzEsMTAgQEAKICAgICAgICAgaWYgKCFweW51bSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgcHludW0pOworICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBweW51bSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocHludW0pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE51bShweW51bSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICBjYXNlIEVMTElQU0lTOiAvKiBFbGxpcHNpcyAqLwpAQCAtMTkxMyw3ICsxOTIzLDcgQEAKICAgICAgICAgICAgIC8qIGl0J3MgYSBzaW1wbGUgc2V0ICovCiAgICAgICAgICAgICBhc2RsX3NlcSAqZWx0czsKICAgICAgICAgICAgIHNpemUgPSAoTkNIKGNoKSArIDEpIC8gMjsgLyogKzEgaW4gY2FzZSBubyB0cmFpbGluZyBjb21tYSAqLwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFlbHRzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChjaCk7IGkgKz0gMikgewpAQCAtMTkzMiwxMSArMTk0MiwxMSBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogaXQncyBhIGRpY3QgKi8KICAgICAgICAgICAgIHNpemUgPSAoTkNIKGNoKSArIDEpIC8gNDsgLyogKzEgaW4gY2FzZSBubyB0cmFpbGluZyBjb21tYSAqLwotICAgICAgICAgICAga2V5cyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGtleXMgPSBfUHlfYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFrZXlzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICB2YWx1ZXMgPSBhc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICB2YWx1ZXMgPSBfUHlfYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIwOTMsMTUgKzIxMDMsMjIgQEAKICAgICAgICAgaWYgKE5DSChuKSA9PSAyKQogICAgICAgICAgICAgcmV0dXJuIENhbGwobGVmdF9leHByLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBMSU5FTk8obiksCiAgICAgICAgICAgICAgICAgICAgICAgICBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9jYWxsKGMsIENISUxEKG4sIDEpLCBsZWZ0X2V4cHIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGV4cHJfdHkgdG1wID0gYXN0X2Zvcl9jYWxsKGMsIENISUxEKG4sIDEpLCBsZWZ0X2V4cHIpOworICAgICAgICAgICAgaWYgKCF0bXApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgIHRtcC0+bGluZW5vID0gTElORU5PKG4pOworICAgICAgICAgICAgdG1wLT5jb2xfb2Zmc2V0ID0gbi0+bl9jb2xfb2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIHRtcDsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBET1QgKSB7CiAgICAgICAgIFB5T2JqZWN0ICphdHRyX2lkID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMSkpOwogICAgICAgICBpZiAoIWF0dHJfaWQpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcmV0dXJuIEF0dHJpYnV0ZShsZWZ0X2V4cHIsIGF0dHJfaWQsIExvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgICAgICAgICAgIExJTkVOTyhDSElMRChuLCAxKSksIENISUxEKG4sIDEpLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUkVRKENISUxEKG4sIDApLCBMU1FCKTsKQEAgLTIxMjQsNyArMjE0MSw3IEBACiAgICAgICAgICAgICBleHByX3R5IGU7CiAgICAgICAgICAgICBpbnQgc2ltcGxlID0gMTsKICAgICAgICAgICAgIGFzZGxfc2VxICpzbGljZXMsICplbHRzOwotICAgICAgICAgICAgc2xpY2VzID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgc2xpY2VzID0gX1B5X2FzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghc2xpY2VzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IE5DSChuKTsgaiArPSAyKSB7CkBAIC0yMTQwLDcgKzIxNTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9hZCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogZXh0cmFjdCBJbmRleCB2YWx1ZXMgYW5kIHB1dCB0aGVtIGluIGEgVHVwbGUgKi8KLSAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcoYXNkbF9zZXFfTEVOKHNsaWNlcyksIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcoYXNkbF9zZXFfTEVOKHNsaWNlcyksIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFlbHRzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFzZGxfc2VxX0xFTihzbGljZXMpOyArK2opIHsKQEAgLTIyMDIsOCArMjIxOSw2IEBACiAgICAgICAgIHRtcCA9IGFzdF9mb3JfdHJhaWxlcihjLCBjaCwgZSk7CiAgICAgICAgIGlmICghdG1wKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHRtcC0+bGluZW5vID0gZS0+bGluZW5vOwotICAgICAgICB0bXAtPmNvbF9vZmZzZXQgPSBlLT5jb2xfb2Zmc2V0OwogICAgICAgICBlID0gdG1wOwogICAgIH0KICAgICBpZiAoVFlQRShDSElMRChuLCBOQ0gobikgLSAxKSkgPT0gZmFjdG9yKSB7CkBAIC0yMjc1LDcgKzIyOTAsNyBAQAogICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICAgICAgICAgICAgICBnb3RvIGxvb3A7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXEgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFzZXEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTIzMTEsMTAgKzIzMjYsMTAgQEAKICAgICAgICAgICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CiAgICAgICAgICAgICAgICAgYXNkbF9pbnRfc2VxICpvcHM7CiAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmNtcHM7Ci0gICAgICAgICAgICAgICAgb3BzID0gYXNkbF9pbnRfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgICAgICBvcHMgPSBfUHlfYXNkbF9pbnRfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIW9wcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgY21wcyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgICAgICBjbXBzID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIWNtcHMpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjQ0MCwxMCArMjQ1NSwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBhcmdzID0gYXNkbF9zZXFfbmV3KG5hcmdzICsgbmdlbnMsIGMtPmNfYXJlbmEpOworICAgIGFyZ3MgPSBfUHlfYXNkbF9zZXFfbmV3KG5hcmdzICsgbmdlbnMsIGMtPmNfYXJlbmEpOwogICAgIGlmICghYXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAga2V5d29yZHMgPSBhc2RsX3NlcV9uZXcobmtleXdvcmRzLCBjLT5jX2FyZW5hKTsKKyAgICBrZXl3b3JkcyA9IF9QeV9hc2RsX3NlcV9uZXcobmtleXdvcmRzLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWtleXdvcmRzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuYXJncyA9IDA7CkBAIC0yNjIwLDcgKzI2MzUsNyBAQAogCiAgICAgICAgIC8qIGEgbm9ybWFsIGFzc2lnbm1lbnQgKi8KICAgICAgICAgUkVRKENISUxEKG4sIDEpLCBFUVVBTCk7Ci0gICAgICAgIHRhcmdldHMgPSBhc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIHRhcmdldHMgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoIXRhcmdldHMpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKSAtIDI7IGkgKz0gMikgewpAQCAtMjY2MSw3ICsyNjc2LDcgQEAKIAogICAgIFJFUShuLCBleHBybGlzdCk7CiAKLSAgICBzZXEgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgc2VxID0gX1B5X2FzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXNlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSArPSAyKSB7CkBAIC0yODQ2LDEzICsyODYxLDE5IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIHN0ciA9IHVuaTsKICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmc3RyKTsKLSAgICAgICAgICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgICAgICAgICAgaWYgKFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMoc3RyLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNUQVI6CiAgICAgICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiKiIpOwotICAgICAgICAgICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpOworICAgICAgICAgICAgaWYgKFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhbGlhcyhzdHIsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLApAQCAtMjg4NSw3ICsyOTA2LDcgQEAKICAgICBpZiAoVFlQRShuKSA9PSBpbXBvcnRfbmFtZSkgewogICAgICAgICBuID0gQ0hJTEQobiwgMSk7CiAgICAgICAgIFJFUShuLCBkb3R0ZWRfYXNfbmFtZXMpOwotICAgICAgICBhbGlhc2VzID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICBhbGlhc2VzID0gX1B5X2FzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFhbGlhc2VzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTI5NDcsNyArMjk2OCw3IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAgIGFsaWFzZXMgPSBhc2RsX3NlcV9uZXcoKG5fY2hpbGRyZW4gKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICBhbGlhc2VzID0gX1B5X2FzZGxfc2VxX25ldygobl9jaGlsZHJlbiArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghYWxpYXNlcykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yOTg2LDcgKzMwMDcsNyBAQAogICAgIGludCBpOwogCiAgICAgUkVRKG4sIGdsb2JhbF9zdG10KTsKLSAgICBzID0gYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgIHMgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMTsgaSA8IE5DSChuKTsgaSArPSAyKSB7CkBAIC0zMDA3LDcgKzMwMjgsNyBAQAogICAgIGludCBpOwogCiAgICAgUkVRKG4sIG5vbmxvY2FsX3N0bXQpOwotICAgIHMgPSBhc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgcyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTMwNjAsNyArMzA4MSw3IEBACiAgICAgUkVRKG4sIHN1aXRlKTsKIAogICAgIHRvdGFsID0gbnVtX3N0bXRzKG4pOwotICAgIHNlcSA9IGFzZGxfc2VxX25ldyh0b3RhbCwgYy0+Y19hcmVuYSk7CisgICAgc2VxID0gX1B5X2FzZGxfc2VxX25ldyh0b3RhbCwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzZXEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBzaW1wbGVfc3RtdCkgewpAQCAtMzE3OSw3ICszMjAwLDcgQEAKICAgICAgICAgaWYgKGhhc19lbHNlKSB7CiAgICAgICAgICAgICBhc2RsX3NlcSAqc3VpdGVfc2VxMjsKIAotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghb3JlbHNlKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBOQ0gobikgLSA2KSk7CkBAIC0zMjAzLDcgKzMyMjQsNyBAQAogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuX2VsaWY7IGkrKykgewogICAgICAgICAgICAgaW50IG9mZiA9IDUgKyAobl9lbGlmIC0gaSAtIDEpICogNDsKLSAgICAgICAgICAgIGFzZGxfc2VxICpuZXdvYmogPSBhc2RsX3NlcV9uZXcoMSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBhc2RsX3NlcSAqbmV3b2JqID0gX1B5X2FzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghbmV3b2JqKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBvZmYpKTsKQEAgLTM0MTUsNyArMzQzNiw3IEBACiAgICAgaWYgKG5fZXhjZXB0ID4gMCkgewogICAgICAgICBpbnQgaTsKICAgICAgICAgLyogcHJvY2VzcyBleGNlcHQgc3RhdGVtZW50cyB0byBjcmVhdGUgYSB0cnkgLi4uIGV4Y2VwdCAqLwotICAgICAgICBoYW5kbGVycyA9IGFzZGxfc2VxX25ldyhuX2V4Y2VwdCwgYy0+Y19hcmVuYSk7CisgICAgICAgIGhhbmRsZXJzID0gX1B5X2FzZGxfc2VxX25ldyhuX2V4Y2VwdCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmIChoYW5kbGVycyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM0NjYsNyArMzQ4Nyw3IEBACiAgICAgUkVRKG4sIHdpdGhfc3RtdCk7CiAKICAgICBuX2l0ZW1zID0gKE5DSChuKSAtIDIpIC8gMjsKLSAgICBpdGVtcyA9IGFzZGxfc2VxX25ldyhuX2l0ZW1zLCBjLT5jX2FyZW5hKTsKKyAgICBpdGVtcyA9IF9QeV9hc2RsX3NlcV9uZXcobl9pdGVtcywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFpdGVtcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMTsgaSA8IE5DSChuKSAtIDI7IGkgKz0gMikgewpAQCAtMzYzMiwxOCArMzY1MywxNiBAQAogICAgIGVuZCA9IHMgKyBzdHJsZW4ocykgLSAxOwogICAgIGltZmxhZyA9ICplbmQgPT0gJ2onIHx8ICplbmQgPT0gJ0onOwogICAgIGlmIChzWzBdID09ICcwJykgewotICAgICAgICB4ID0gKGxvbmcpIFB5T1Nfc3RydG91bCgoY2hhciAqKXMsIChjaGFyICoqKSZlbmQsIDApOworICAgICAgICB4ID0gKGxvbmcpIFB5T1Nfc3RydG91bChzLCAoY2hhciAqKikmZW5kLCAwKTsKICAgICAgICAgaWYgKHggPCAwICYmIGVycm5vID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZygoY2hhciAqKXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZyhzLCAoY2hhciAqKikwLCAwKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCi0gICAgICAgIHggPSBQeU9TX3N0cnRvbCgoY2hhciAqKXMsIChjaGFyICoqKSZlbmQsIDApOworICAgICAgICB4ID0gUHlPU19zdHJ0b2wocywgKGNoYXIgKiopJmVuZCwgMCk7CiAgICAgaWYgKCplbmQgPT0gJ1wwJykgewogICAgICAgICBpZiAoZXJybm8gIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZygoY2hhciAqKXMsIChjaGFyICoqKTAsIDApOworICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKHMsIChjaGFyICoqKTAsIDApOwogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHgpOwogICAgIH0KICAgICAvKiBYWFggSHVnZSBmbG9hdHMgbWF5IHNpbGVudGx5IGZhaWwgKi8KQEAgLTM2NjYsOCArMzY4NSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGVjb2RlX3V0Zjgoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3QgY2hhciAqKnNQdHIsIGNvbnN0IGNoYXIgKmVuZCkKIHsKLSAgICBjaGFyICpzLCAqdDsKLSAgICB0ID0gcyA9IChjaGFyICopKnNQdHI7CisgICAgY29uc3QgY2hhciAqcywgKnQ7CisgICAgdCA9IHMgPSAqc1B0cjsKICAgICAvKiB3aGlsZSAocyA8IGVuZCAmJiAqcyAhPSAnXFwnKSBzKys7ICovIC8qIGluZWZmaWNpZW50IGZvciB1Ii4uIiAqLwogICAgIHdoaWxlIChzIDwgZW5kICYmICgqcyAmIDB4ODApKSBzKys7CiAgICAgKnNQdHIgPSBzOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2JsdGlubW9kdWxlLmMgYi9QeXRob24vYmx0aW5tb2R1bGUuYwppbmRleCBjOTRkYWVhLi43NDU0NTdmIDEwMDY0NAotLS0gYS9QeXRob24vYmx0aW5tb2R1bGUuYworKysgYi9QeXRob24vYmx0aW5tb2R1bGUuYwpAQCAtMzIsOCArMzIsMTkgQEAKIGludCBQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nID0gMDsKICNlbmRpZgogCitfUHlfSURFTlRJRklFUihfX2J1aWx0aW5zX18pOworX1B5X0lERU5USUZJRVIoX19kaWN0X18pOworX1B5X0lERU5USUZJRVIoX19wcmVwYXJlX18pOworX1B5X0lERU5USUZJRVIoX19yb3VuZF9fKTsKK19QeV9JREVOVElGSUVSKGVuY29kaW5nKTsKK19QeV9JREVOVElGSUVSKGVycm9ycyk7CiBfUHlfSURFTlRJRklFUihmaWxlbm8pOwogX1B5X0lERU5USUZJRVIoZmx1c2gpOworX1B5X0lERU5USUZJRVIobWV0YWNsYXNzKTsKK19QeV9JREVOVElGSUVSKHNvcnQpOworX1B5X0lERU5USUZJRVIoc3RkaW4pOworX1B5X0lERU5USUZJRVIoc3Rkb3V0KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX19fYnVpbGRfY2xhc3NfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQpAQCAtNDIsNyArNTMsNiBAQAogICAgIFB5T2JqZWN0ICpjbHMgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbmFyZ3M7CiAgICAgaW50IGlzY2xhc3M7Ci0gICAgX1B5X0lERU5USUZJRVIoX19wcmVwYXJlX18pOwogCiAgICAgYXNzZXJ0KGFyZ3MgIT0gTlVMTCk7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CkBAIC01Nyw2ICs2NywxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZnVuYyA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCk7IC8qIEJldHRlciBiZSBjYWxsYWJsZSAqLworICAgIGlmICghUHlGdW5jdGlvbl9DaGVjayhmdW5jKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIl9fYnVpbGRfX2NsYXNzX186IGZ1bmMgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAxKTsKICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhuYW1lKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtNzcsMTAgKzkyLDEwIEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZXMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgbWV0YSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1rdywgIm1ldGFjbGFzcyIpOworICAgICAgICBtZXRhID0gX1B5RGljdF9HZXRJdGVtSWQobWt3LCAmUHlJZF9tZXRhY2xhc3MpOwogICAgICAgICBpZiAobWV0YSAhPSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9JTkNSRUYobWV0YSk7Ci0gICAgICAgICAgICBpZiAoUHlEaWN0X0RlbEl0ZW1TdHJpbmcobWt3LCAibWV0YWNsYXNzIikgPCAwKSB7CisgICAgICAgICAgICBpZiAoX1B5RGljdF9EZWxJdGVtSWQobWt3LCAmUHlJZF9tZXRhY2xhc3MpIDwgMCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtZXRhKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobWt3KTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZXMpOwpAQCAtMTU1LDcgKzE3MCw5IEBACiAgICAgICAgIFB5X0RFQ1JFRihiYXNlcyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBjZWxsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmdW5jLCBucywgTlVMTCk7CisgICAgY2VsbCA9IFB5RXZhbF9FdmFsQ29kZUV4KFB5RnVuY3Rpb25fR0VUX0NPREUoZnVuYyksIFB5RnVuY3Rpb25fR0VUX0dMT0JBTFMoZnVuYyksIG5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dFVF9DTE9TVVJFKGZ1bmMpKTsKICAgICBpZiAoY2VsbCAhPSBOVUxMKSB7CiAgICAgICAgIFB5T2JqZWN0ICptYXJnczsKICAgICAgICAgbWFyZ3MgPSBQeVR1cGxlX1BhY2soMywgbmFtZSwgYmFzZXMsIG5zKTsKQEAgLTMzMyw3ICszNTAsMTEgQEAKIFB5RG9jX1NUUlZBUihiaW5fZG9jLAogImJpbihudW1iZXIpIC0+IHN0cmluZ1xuXAogXG5cCi1SZXR1cm4gdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiIpOworUmV0dXJuIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci5cblwKK1xuXAorICAgPj4+IGJpbigyNzk2MjAyKVxuXAorICAgJzBiMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCdcblwKKyIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NzIsOCArNTkzLDcgQEAKIGJ1aWx0aW5fY29tcGlsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIGNoYXIgKnN0cjsKLSAgICBQeU9iamVjdCAqZmlsZW5hbWVfb2JqOwotICAgIGNoYXIgKmZpbGVuYW1lOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKICAgICBjaGFyICpzdGFydHN0cjsKICAgICBpbnQgbW9kZSA9IC0xOwogICAgIGludCBkb250X2luaGVyaXQgPSAwOwpAQCAtNTg5LDEyICs2MDksMTEgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPTyZzfGlpaTpjb21waWxlIiwgIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJmZpbGVuYW1lX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0c3RyLCAmc3VwcGxpZWRfZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvbnRfaW5oZXJpdCwgJm9wdGltaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBmaWxlbmFtZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGZpbGVuYW1lX29iaik7CiAgICAgY2YuY2ZfZmxhZ3MgPSBzdXBwbGllZF9mbGFncyB8IFB5Q0ZfU09VUkNFX0lTX1VURjg7CiAKICAgICBpZiAoc3VwcGxpZWRfZmxhZ3MgJgpAQCAtNjUyLDI0ICs2NzEsMjQgQEAKICAgICAgICAgICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQgPSAoUHlPYmplY3QqKVB5QVNUX0NvbXBpbGVFeChtb2QsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNmLCBvcHRpbWl6ZSwgYXJlbmEpOworICAgICAgICAgICAgcmVzdWx0ID0gKFB5T2JqZWN0KilQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNmLCBvcHRpbWl6ZSwgYXJlbmEpOwogICAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgfQogICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgfQogCi0gICAgc3RyID0gc291cmNlX2FzX3N0cmluZyhjbWQsICJjb21waWxlIiwgInN0cmluZywgYnl0ZXMsIEFTVCBvciBjb2RlIiwgJmNmKTsKKyAgICBzdHIgPSBzb3VyY2VfYXNfc3RyaW5nKGNtZCwgImNvbXBpbGUiLCAic3RyaW5nLCBieXRlcyBvciBBU1QiLCAmY2YpOwogICAgIGlmIChzdHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHJlc3VsdCA9IFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKHN0ciwgZmlsZW5hbWUsIHN0YXJ0W21vZGVdLCAmY2YsIG9wdGltaXplKTsKKyAgICByZXN1bHQgPSBQeV9Db21waWxlU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0W21vZGVdLCAmY2YsIG9wdGltaXplKTsKICAgICBnb3RvIGZpbmFsbHk7CiAKIGVycm9yOgogICAgIHJlc3VsdCA9IE5VTEw7CiBmaW5hbGx5OgotICAgIFB5X0RFQ1JFRihmaWxlbmFtZV9vYmopOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzUwLDggKzc2OSwxMSBAQAogICAgIH0KICAgICBpZiAoZ2xvYmFscyA9PSBQeV9Ob25lKSB7CiAgICAgICAgIGdsb2JhbHMgPSBQeUV2YWxfR2V0R2xvYmFscygpOwotICAgICAgICBpZiAobG9jYWxzID09IFB5X05vbmUpCisgICAgICAgIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgbG9jYWxzID0gUHlFdmFsX0dldExvY2FscygpOworICAgICAgICAgICAgaWYgKGxvY2FscyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGxvY2FscyA9PSBQeV9Ob25lKQogICAgICAgICBsb2NhbHMgPSBnbG9iYWxzOwpAQCAtNzYzLDkgKzc4NSw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChQeURpY3RfR2V0SXRlbVN0cmluZyhnbG9iYWxzLCAiX19idWlsdGluc19fIikgPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fYnVpbHRpbnNfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMoKSkgIT0gMCkKKyAgICBpZiAoX1B5RGljdF9HZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fKSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZChnbG9iYWxzLCAmUHlJZF9fX2J1aWx0aW5zX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMoKSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtODE1LDYgKzgzNyw4IEBACiAgICAgICAgIGdsb2JhbHMgPSBQeUV2YWxfR2V0R2xvYmFscygpOwogICAgICAgICBpZiAobG9jYWxzID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIGxvY2FscyA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKKyAgICAgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBpZiAoIWdsb2JhbHMgfHwgIWxvY2FscykgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLApAQCAtODM2LDkgKzg2MCw5IEBACiAgICAgICAgICAgICBsb2NhbHMtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKFB5RGljdF9HZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX2J1aWx0aW5zX18iKSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhnbG9iYWxzLCAiX19idWlsdGluc19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKQorICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZChnbG9iYWxzLCAmUHlJZF9fX2J1aWx0aW5zX18pID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMjU2LDcgKzEyODAsMTEgQEAKIFB5RG9jX1NUUlZBUihoZXhfZG9jLAogImhleChudW1iZXIpIC0+IHN0cmluZ1xuXAogXG5cCi1SZXR1cm4gdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuIik7CitSZXR1cm4gdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuXG5cCitcblwKKyAgID4+PiBoZXgoMzczNTkyODU1OSlcblwKKyAgICcweGRlYWRiZWVmJ1xuXAorIik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEyOTcsNyArMTMyNSw3IEBACiB9CiAKIFB5RG9jX1NUUlZBUihsZW5fZG9jLAotImxlbihvYmplY3QpIC0+IGludGVnZXJcblwKKyJsZW4obW9kdWxlLCBvYmplY3QpXG5cCiBcblwKIFJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIG9mIGEgc2VxdWVuY2Ugb3IgbWFwcGluZy4iKTsKIApAQCAtMTMyMiwyNiArMTM1MCwzNSBAQAogbWluX21heChQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMsIGludCBvcCkKIHsKICAgICBQeU9iamVjdCAqdiwgKml0LCAqaXRlbSwgKnZhbCwgKm1heGl0ZW0sICptYXh2YWwsICprZXlmdW5jPU5VTEw7CisgICAgUHlPYmplY3QgKmVtcHR5dHVwbGUsICpkZWZhdWx0dmFsID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImtleSIsICJkZWZhdWx0IiwgTlVMTH07CiAgICAgY29uc3QgY2hhciAqbmFtZSA9IG9wID09IFB5X0xUID8gIm1pbiIgOiAibWF4IjsKKyAgICBjb25zdCBpbnQgcG9zaXRpb25hbCA9IFB5VHVwbGVfU2l6ZShhcmdzKSA+IDE7CisgICAgaW50IHJldDsKIAotICAgIGlmIChQeVR1cGxlX1NpemUoYXJncykgPiAxKQorICAgIGlmIChwb3NpdGlvbmFsKQogICAgICAgICB2ID0gYXJnczsKLSAgICBlbHNlIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgKGNoYXIgKiluYW1lLCAxLCAxLCAmdikpCisgICAgZWxzZSBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsIG5hbWUsIDEsIDEsICZ2KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoa3dkcyAhPSBOVUxMICYmIFB5RGljdF9DaGVjayhrd2RzKSAmJiBQeURpY3RfU2l6ZShrd2RzKSkgewotICAgICAgICBrZXlmdW5jID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoa3dkcywgImtleSIpOwotICAgICAgICBpZiAoUHlEaWN0X1NpemUoa3dkcykhPTEgIHx8ICBrZXlmdW5jID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgIiVzKCkgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCIsIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKGtleWZ1bmMpOworICAgIGVtcHR5dHVwbGUgPSBQeVR1cGxlX05ldygwKTsKKyAgICBpZiAoZW1wdHl0dXBsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXQgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoZW1wdHl0dXBsZSwga3dkcywgInwkT08iLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlmdW5jLCAmZGVmYXVsdHZhbCk7CisgICAgUHlfREVDUkVGKGVtcHR5dHVwbGUpOworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChwb3NpdGlvbmFsICYmIGRlZmF1bHR2YWwgIT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5IGEgZGVmYXVsdCBmb3IgJXMoKSB3aXRoIG11bHRpcGxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbmFsIGFyZ3VtZW50cyIsIG5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIodik7CiAgICAgaWYgKGl0ID09IE5VTEwpIHsKLSAgICAgICAgUHlfWERFQ1JFRihrZXlmdW5jKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMzg1LDE0ICsxNDIyLDE4IEBACiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIGdvdG8gRmFpbF9pdDsKICAgICBpZiAobWF4dmFsID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiJXMoKSBhcmcgaXMgYW4gZW1wdHkgc2VxdWVuY2UiLCBuYW1lKTsKICAgICAgICAgYXNzZXJ0KG1heGl0ZW0gPT0gTlVMTCk7CisgICAgICAgIGlmIChkZWZhdWx0dmFsICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZhdWx0dmFsKTsKKyAgICAgICAgICAgIG1heGl0ZW0gPSBkZWZhdWx0dmFsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKCkgYXJnIGlzIGFuIGVtcHR5IHNlcXVlbmNlIiwgbmFtZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgICAgICBQeV9ERUNSRUYobWF4dmFsKTsKICAgICBQeV9ERUNSRUYoaXQpOwotICAgIFB5X1hERUNSRUYoa2V5ZnVuYyk7CiAgICAgcmV0dXJuIG1heGl0ZW07CiAKIEZhaWxfaXRfaXRlbV9hbmRfdmFsOgpAQCAtMTQwMyw3ICsxNDQ0LDYgQEAKICAgICBQeV9YREVDUkVGKG1heHZhbCk7CiAgICAgUHlfWERFQ1JFRihtYXhpdGVtKTsKICAgICBQeV9ERUNSRUYoaXQpOwotICAgIFB5X1hERUNSRUYoa2V5ZnVuYyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE0NDQsNyArMTQ4NCwxMSBAQAogUHlEb2NfU1RSVkFSKG9jdF9kb2MsCiAib2N0KG51bWJlcikgLT4gc3RyaW5nXG5cCiBcblwKLVJldHVybiB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4iKTsKK1JldHVybiB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci5cblwKK1xuXAorICAgPj4+IG9jdCgzNDIzOTEpXG5cCisgICAnMG8xMjM0NTY3J1xuXAorIik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE1MzAsNyArMTU3NCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnNlcCwgJmVuZCwgJmZpbGUsICZmbHVzaCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChmaWxlID09IE5VTEwgfHwgZmlsZSA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOworICAgICAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZG91dCk7CisgICAgICAgIGlmIChmaWxlID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IHN5cy5zdGRvdXQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKICAgICAgICAgLyogc3lzLnN0ZG91dCBtYXkgYmUgTm9uZSB3aGVuIEZJTEUqIHN0ZG91dCBpc24ndCBjb25uZWN0ZWQgKi8KICAgICAgICAgaWYgKGZpbGUgPT0gUHlfTm9uZSkKICAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMTU4NCw3ICsxNjMzLDcgQEAKICAgICAgICAgaWYgKGRvX2ZsdXNoID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGVsc2UgaWYgKGRvX2ZsdXNoKSB7Ci0gICAgICAgICAgICB0bXAgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGZpbGUsICJmbHVzaCIsICIiKTsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZmlsZSwgJlB5SWRfZmx1c2gsICIiKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGVsc2UKQEAgLTE2MTAsOSArMTY1OSw5IEBACiBidWlsdGluX2lucHV0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcHJvbXB0YXJnID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZmluID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRpbiIpOwotICAgIFB5T2JqZWN0ICpmb3V0ID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKLSAgICBQeU9iamVjdCAqZmVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgUHlPYmplY3QgKmZpbiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRpbik7CisgICAgUHlPYmplY3QgKmZvdXQgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKKyAgICBQeU9iamVjdCAqZmVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIFB5T2JqZWN0ICp0bXA7CiAgICAgbG9uZyBmZDsKICAgICBpbnQgdHR5OwpAQCAtMTY4Myw4ICsxNzMyLDYgQEAKICAgICAgICAgY2hhciAqc3RkaW5fZW5jb2Rpbmdfc3RyLCAqc3RkaW5fZXJyb3JzX3N0cjsKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOwotICAgICAgICBfUHlfSURFTlRJRklFUihlcnJvcnMpOwogCiAgICAgICAgIHN0ZGluX2VuY29kaW5nID0gX1B5T2JqZWN0X0dldEF0dHJJZChmaW4sICZQeUlkX2VuY29kaW5nKTsKICAgICAgICAgc3RkaW5fZXJyb3JzID0gX1B5T2JqZWN0X0dldEF0dHJJZChmaW4sICZQeUlkX2Vycm9ycyk7CkBAIC0xODEwLDEwICsxODU3LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX3JvdW5kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpyb3VuZF9zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuZGlnaXRzID0gTlVMTDsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im51bWJlciIsICJuZGlnaXRzIiwgMH07Ci0gICAgUHlPYmplY3QgKm51bWJlciwgKnJvdW5kOworICAgIFB5T2JqZWN0ICpudW1iZXIsICpyb3VuZCwgKnJlc3VsdDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86cm91bmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm51bWJlciwgJm5kaWdpdHMpKQpAQCAtMTgyNCwyNCArMTg3MCwyMSBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKHJvdW5kX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIHJvdW5kX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3JvdW5kX18iKTsKLSAgICAgICAgaWYgKHJvdW5kX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcm91bmQgPSBfUHlUeXBlX0xvb2t1cChQeV9UWVBFKG51bWJlciksIHJvdW5kX3N0cik7CisgICAgcm91bmQgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChudW1iZXIsICZQeUlkX19fcm91bmRfXyk7CiAgICAgaWYgKHJvdW5kID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJ0eXBlICUuMTAwcyBkb2Vzbid0IGRlZmluZSBfX3JvdW5kX18gbWV0aG9kIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobnVtYmVyKS0+dHBfbmFtZSk7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUgJS4xMDBzIGRvZXNuJ3QgZGVmaW5lIF9fcm91bmRfXyBtZXRob2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobnVtYmVyKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGlmIChuZGlnaXRzID09IE5VTEwpCi0gICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocm91bmQsICJPIiwgbnVtYmVyKTsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhyb3VuZCwgTlVMTCk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJvdW5kLCAiT08iLCBudW1iZXIsIG5kaWdpdHMpOworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHJvdW5kLCBuZGlnaXRzLCBOVUxMKTsKKyAgICBQeV9ERUNSRUYocm91bmQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB5RG9jX1NUUlZBUihyb3VuZF9kb2MsCkBAIC0xODU5LDcgKzE5MDIsNiBAQAogICAgIFB5T2JqZWN0ICpjYWxsYWJsZTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Iml0ZXJhYmxlIiwgImtleSIsICJyZXZlcnNlIiwgMH07CiAgICAgaW50IHJldmVyc2U7Ci0gICAgX1B5X0lERU5USUZJRVIoc29ydCk7CiAKICAgICAvKiBhcmdzIDEtMyBzaG91bGQgbWF0Y2ggbGlzdHNvcnQgaW4gT2JqZWN0cy9saXN0b2JqZWN0LmMgKi8KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPaTpzb3J0ZWQiLApAQCAtMTkwNywxNiArMTk0OSwxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgIGQgPSBQeUV2YWxfR2V0TG9jYWxzKCk7Ci0gICAgICAgIGlmIChkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXJzKCk6IG5vIGxvY2FscyE/Iik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlfSU5DUkVGKGQpOworICAgICAgICBpZiAoZCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5X0lOQ1JFRihkKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKICAgICAgICAgZCA9IF9QeU9iamVjdF9HZXRBdHRySWQodiwgJlB5SWRfX19kaWN0X18pOwogICAgICAgICBpZiAoZCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtMjQxMyw2ICsyNDUwLDEyIEBACiBfUHlCdWlsdGluX0luaXQodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbW9kLCAqZGljdCwgKmRlYnVnOworCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlGaWx0ZXJfVHlwZSkgPCAwIHx8CisgICAgICAgIFB5VHlwZV9SZWFkeSgmUHlNYXBfVHlwZSkgPCAwIHx8CisgICAgICAgIFB5VHlwZV9SZWFkeSgmUHlaaXBfVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIG1vZCA9IFB5TW9kdWxlX0NyZWF0ZSgmYnVpbHRpbnNtb2R1bGUpOwogICAgIGlmIChtb2QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9QeXRob24vY2V2YWwuYyBiL1B5dGhvbi9jZXZhbC5jCmluZGV4IDJiMTYxOTEuLjVkYjg4YmUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jZXZhbC5jCisrKyBiL1B5dGhvbi9jZXZhbC5jCkBAIC0zNyw3ICszNyw3IEBACiBzdGF0aWMgdm9pZAogcHBjX2dldGNvdW50ZXIodWludDY0ICp2KQogewotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdGJ1LCB0YiwgdGJ1MjsKKyAgICB1bnNpZ25lZCBsb25nIHRidSwgdGIsIHRidTI7CiAKICAgbG9vcDoKICAgICBhc20gdm9sYXRpbGUgKCJtZnRidSAlMCIgOiAiPXIiICh0YnUpICk7CkBAIC0xMjMsMTMgKzEyMywxNiBAQAogc3RhdGljIGludCBsbHRyYWNlOwogc3RhdGljIGludCBwcnRyYWNlKFB5T2JqZWN0ICosIGNoYXIgKik7CiAjZW5kaWYKLXN0YXRpYyBpbnQgY2FsbF90cmFjZShQeV90cmFjZWZ1bmMsIFB5T2JqZWN0ICosIFB5RnJhbWVPYmplY3QgKiwKK3N0YXRpYyBpbnQgY2FsbF90cmFjZShQeV90cmFjZWZ1bmMsIFB5T2JqZWN0ICosCisgICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgaW50LCBQeU9iamVjdCAqKTsKIHN0YXRpYyBpbnQgY2FsbF90cmFjZV9wcm90ZWN0ZWQoUHlfdHJhY2VmdW5jLCBQeU9iamVjdCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUZyYW1lT2JqZWN0ICosIGludCwgUHlPYmplY3QgKik7Ci1zdGF0aWMgdm9pZCBjYWxsX2V4Y190cmFjZShQeV90cmFjZWZ1bmMsIFB5T2JqZWN0ICosIFB5RnJhbWVPYmplY3QgKik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKiwgUHlGcmFtZU9iamVjdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIFB5T2JqZWN0ICopOworc3RhdGljIHZvaWQgY2FsbF9leGNfdHJhY2UoUHlfdHJhY2VmdW5jLCBQeU9iamVjdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwogc3RhdGljIGludCBtYXliZV9jYWxsX2xpbmVfdHJhY2UoUHlfdHJhY2VmdW5jLCBQeU9iamVjdCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqLCBpbnQgKiwgaW50ICosIGludCAqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKiwgUHlGcmFtZU9iamVjdCAqLCBpbnQgKiwgaW50ICosIGludCAqKTsKIAogc3RhdGljIFB5T2JqZWN0ICogY21wX291dGNvbWUoaW50LCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIHN0YXRpYyBQeU9iamVjdCAqIGltcG9ydF9mcm9tKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwpAQCAtMTQyLDggKzE0NSw2IEBACiAKICNkZWZpbmUgTkFNRV9FUlJPUl9NU0cgXAogICAgICJuYW1lICclLjIwMHMnIGlzIG5vdCBkZWZpbmVkIgotI2RlZmluZSBHTE9CQUxfTkFNRV9FUlJPUl9NU0cgXAotICAgICJnbG9iYWwgbmFtZSAnJS4yMDBzJyBpcyBub3QgZGVmaW5lZCIKICNkZWZpbmUgVU5CT1VORExPQ0FMX0VSUk9SX01TRyBcCiAgICAgImxvY2FsIHZhcmlhYmxlICclLjIwMHMnIHJlZmVyZW5jZWQgYmVmb3JlIGFzc2lnbm1lbnQiCiAjZGVmaW5lIFVOQk9VTkRGUkVFX0VSUk9SX01TRyBcCkBAIC0zNjQsMjkgKzM2NSwyOCBAQAogICAgIGRyb3BfZ2lsKHRzdGF0ZSk7CiB9CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gUHlPU19BZnRlckZvcmsgdG8gZW5zdXJlIHRoYXQgbmV3bHkKLSAgIGNyZWF0ZWQgY2hpbGQgcHJvY2Vzc2VzIGRvbid0IGhvbGQgbG9ja3MgcmVmZXJyaW5nIHRvIHRocmVhZHMgd2hpY2gKLSAgIGFyZSBub3QgcnVubmluZyBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4gIChUaGlzIGNvdWxkIGFsc28gYmUgZG9uZSB1c2luZwotICAgcHRocmVhZF9hdGZvcmsgbWVjaGFuaXNtLCBhdCBsZWFzdCBmb3IgdGhlIHB0aHJlYWRzIGltcGxlbWVudGF0aW9uLikgKi8KKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gUHlPU19BZnRlckZvcmsgdG8gZGVzdHJveSBhbGwgdGhyZWFkcyB3aGljaCBhcmUKKyAqIG5vdCBydW5uaW5nIGluIHRoZSBjaGlsZCBwcm9jZXNzLCBhbmQgY2xlYXIgaW50ZXJuYWwgbG9ja3Mgd2hpY2ggbWlnaHQgYmUKKyAqIGhlbGQgYnkgdGhvc2UgdGhyZWFkcy4gKFRoaXMgY291bGQgYWxzbyBiZSBkb25lIHVzaW5nIHB0aHJlYWRfYXRmb3JrCisgKiBtZWNoYW5pc20sIGF0IGxlYXN0IGZvciB0aGUgcHRocmVhZHMgaW1wbGVtZW50YXRpb24uKSAqLwogCiB2b2lkCiBQeUV2YWxfUmVJbml0VGhyZWFkcyh2b2lkKQogewogICAgIF9QeV9JREVOVElGSUVSKF9hZnRlcl9mb3JrKTsKICAgICBQeU9iamVjdCAqdGhyZWFkaW5nLCAqcmVzdWx0OwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgUHlUaHJlYWRTdGF0ZSAqY3VycmVudF90c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogCiAgICAgaWYgKCFnaWxfY3JlYXRlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgcmVjcmVhdGVfZ2lsKCk7CiAgICAgcGVuZGluZ19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwotICAgIHRha2VfZ2lsKHRzdGF0ZSk7CisgICAgdGFrZV9naWwoY3VycmVudF90c3RhdGUpOwogICAgIG1haW5fdGhyZWFkID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwogCiAgICAgLyogVXBkYXRlIHRoZSB0aHJlYWRpbmcgbW9kdWxlIHdpdGggdGhlIG5ldyBzdGF0ZS4KICAgICAgKi8KLSAgICB0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwotICAgIHRocmVhZGluZyA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKHRzdGF0ZS0+aW50ZXJwLT5tb2R1bGVzLAorICAgIHRocmVhZGluZyA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKGN1cnJlbnRfdHN0YXRlLT5pbnRlcnAtPm1vZHVsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRocmVhZGluZyIpOwogICAgIGlmICh0aHJlYWRpbmcgPT0gTlVMTCkgewogICAgICAgICAvKiB0aHJlYWRpbmcgbm90IGltcG9ydGVkICovCkBAIC0zOTksNiArMzk5LDkgQEAKICAgICBlbHNlCiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgIFB5X0RFQ1JFRih0aHJlYWRpbmcpOworCisgICAgLyogRGVzdHJveSBhbGwgdGhyZWFkcyBleGNlcHQgdGhlIGN1cnJlbnQgb25lICovCisgICAgX1B5VGhyZWFkU3RhdGVfRGVsZXRlRXhjZXB0KGN1cnJlbnRfdHN0YXRlKTsKIH0KIAogI2Vsc2UKQEAgLTc0Miw3ICs3NDUsNiBAQAogZW51bSB3aHlfY29kZSB7CiAgICAgICAgIFdIWV9OT1QgPSAgICAgICAweDAwMDEsIC8qIE5vIGVycm9yICovCiAgICAgICAgIFdIWV9FWENFUFRJT04gPSAweDAwMDIsIC8qIEV4Y2VwdGlvbiBvY2N1cnJlZCAqLwotICAgICAgICBXSFlfUkVSQUlTRSA9ICAgMHgwMDA0LCAvKiBFeGNlcHRpb24gcmUtcmFpc2VkIGJ5ICdmaW5hbGx5JyAqLwogICAgICAgICBXSFlfUkVUVVJOID0gICAgMHgwMDA4LCAvKiAncmV0dXJuJyBzdGF0ZW1lbnQgKi8KICAgICAgICAgV0hZX0JSRUFLID0gICAgIDB4MDAxMCwgLyogJ2JyZWFrJyBzdGF0ZW1lbnQgKi8KICAgICAgICAgV0hZX0NPTlRJTlVFID0gIDB4MDAyMCwgLyogJ2NvbnRpbnVlJyBzdGF0ZW1lbnQgKi8KQEAgLTc1Myw3ICs3NTUsNyBAQAogc3RhdGljIHZvaWQgc2F2ZV9leGNfc3RhdGUoUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwogc3RhdGljIHZvaWQgc3dhcF9leGNfc3RhdGUoUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwogc3RhdGljIHZvaWQgcmVzdG9yZV9hbmRfY2xlYXJfZXhjX3N0YXRlKFB5VGhyZWFkU3RhdGUgKiwgUHlGcmFtZU9iamVjdCAqKTsKLXN0YXRpYyBlbnVtIHdoeV9jb2RlIGRvX3JhaXNlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworc3RhdGljIGludCBkb19yYWlzZShQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIHN0YXRpYyBpbnQgdW5wYWNrX2l0ZXJhYmxlKFB5T2JqZWN0ICosIGludCwgaW50LCBQeU9iamVjdCAqKik7CiAKIC8qIFJlY29yZHMgd2hldGhlciB0cmFjaW5nIGlzIG9uIGZvciBhbnkgdGhyZWFkLiAgQ291bnRzIHRoZSBudW1iZXIgb2YKQEAgLTc5MywxOCArNzk1LDEyIEBACiAjaWZkZWYgRFhQQUlSUwogICAgIGludCBsYXN0b3Bjb2RlID0gMDsKICNlbmRpZgotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqc3RhY2tfcG9pbnRlcjsgIC8qIE5leHQgZnJlZSBzbG90IGluIHZhbHVlIHN0YWNrICovCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqbmV4dF9pbnN0cjsKLSAgICByZWdpc3RlciBpbnQgb3Bjb2RlOyAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgKi8KLSAgICByZWdpc3RlciBpbnQgb3Bhcmc7ICAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgYXJndW1lbnQsIGlmIGFueSAqLwotICAgIHJlZ2lzdGVyIGVudW0gd2h5X2NvZGUgd2h5OyAvKiBSZWFzb24gZm9yIGJsb2NrIHN0YWNrIHVud2luZCAqLwotICAgIHJlZ2lzdGVyIGludCBlcnI7ICAgICAgICAgICAvKiBFcnJvciBzdGF0dXMgLS0gbm9uemVybyBpZiBlcnJvciAqLwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp4OyAgICAgICAvKiBSZXN1bHQgb2JqZWN0IC0tIE5VTEwgaWYgZXJyb3IgKi8KLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsgICAgICAgLyogVGVtcG9yYXJ5IG9iamVjdHMgcG9wcGVkIG9mZiBzdGFjayAqLwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp3OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp1OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp0OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipmcmVldmFyczsKKyAgICBQeU9iamVjdCAqKnN0YWNrX3BvaW50ZXI7ICAvKiBOZXh0IGZyZWUgc2xvdCBpbiB2YWx1ZSBzdGFjayAqLworICAgIHVuc2lnbmVkIGNoYXIgKm5leHRfaW5zdHI7CisgICAgaW50IG9wY29kZTsgICAgICAgIC8qIEN1cnJlbnQgb3Bjb2RlICovCisgICAgaW50IG9wYXJnOyAgICAgICAgIC8qIEN1cnJlbnQgb3Bjb2RlIGFyZ3VtZW50LCBpZiBhbnkgKi8KKyAgICBlbnVtIHdoeV9jb2RlIHdoeTsgLyogUmVhc29uIGZvciBibG9jayBzdGFjayB1bndpbmQgKi8KKyAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqZnJlZXZhcnM7CiAgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7ICAgICAgICAgICAgLyogUmV0dXJuIHZhbHVlICovCiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBQeUNvZGVPYmplY3QgKmNvOwpAQCAtMTE0Myw3ICsxMTM5LDcgQEAKICAgICAgICAgICAgICAgIHdoZW5ldmVyIGFuIGV4Y2VwdGlvbiBpcyBkZXRlY3RlZC4gKi8KICAgICAgICAgICAgIGlmIChjYWxsX3RyYWNlX3Byb3RlY3RlZCh0c3RhdGUtPmNfdHJhY2VmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZW9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLCBQeVRyYWNlX0NBTEwsIFB5X05vbmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLCBQeVRyYWNlX0NBTEwsIFB5X05vbmUpKSB7CiAgICAgICAgICAgICAgICAgLyogVHJhY2UgZnVuY3Rpb24gcmFpc2VkIGFuIGVycm9yICovCiAgICAgICAgICAgICAgICAgZ290byBleGl0X2V2YWxfZnJhbWU7CiAgICAgICAgICAgICB9CkBAIC0xMTUzLDcgKzExNDksNyBAQAogICAgICAgICAgICAgICAgcmV0dXJuIGl0c2VsZiBhbmQgaXNuJ3QgY2FsbGVkIGZvciAibGluZSIgZXZlbnRzICovCiAgICAgICAgICAgICBpZiAoY2FsbF90cmFjZV9wcm90ZWN0ZWQodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y19wcm9maWxlb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYsIFB5VHJhY2VfQ0FMTCwgUHlfTm9uZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUsIGYsIFB5VHJhY2VfQ0FMTCwgUHlfTm9uZSkpIHsKICAgICAgICAgICAgICAgICAvKiBQcm9maWxlIGZ1bmN0aW9uIHJhaXNlZCBhbiBlcnJvciAqLwogICAgICAgICAgICAgICAgIGdvdG8gZXhpdF9ldmFsX2ZyYW1lOwogICAgICAgICAgICAgfQpAQCAtMTE4OSw2ICsxMTg1LDcgQEAKICAgICBzdGFja19wb2ludGVyID0gZi0+Zl9zdGFja3RvcDsKICAgICBhc3NlcnQoc3RhY2tfcG9pbnRlciAhPSBOVUxMKTsKICAgICBmLT5mX3N0YWNrdG9wID0gTlVMTDsgICAgICAgLyogcmVtYWlucyBOVUxMIHVubGVzcyB5aWVsZCBzdXNwZW5kcyBmcmFtZSAqLworICAgIGYtPmZfZXhlY3V0aW5nID0gMTsKIAogICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19HRU5FUkFUT1IgJiYgIXRocm93ZmxhZykgewogICAgICAgICBpZiAoZi0+Zl9leGNfdHlwZSAhPSBOVUxMICYmIGYtPmZfZXhjX3R5cGUgIT0gUHlfTm9uZSkgewpAQCAtMTIwNiwxNCArMTIwMywxNiBAQAogI2VuZGlmCiAKICAgICB3aHkgPSBXSFlfTk9UOwotICAgIGVyciA9IDA7Ci0gICAgeCA9IFB5X05vbmU7ICAgICAgICAvKiBOb3QgYSByZWZlcmVuY2UsIGp1c3QgYW55dGhpbmcgbm9uLU5VTEwgKi8KLSAgICB3ID0gTlVMTDsKIAotICAgIGlmICh0aHJvd2ZsYWcpIHsgLyogc3VwcG9ydCBmb3IgZ2VuZXJhdG9yLnRocm93KCkgKi8KLSAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgZ290byBvbl9lcnJvcjsKLSAgICB9CisgICAgaWYgKHRocm93ZmxhZykgLyogc3VwcG9ydCBmb3IgZ2VuZXJhdG9yLnRocm93KCkgKi8KKyAgICAgICAgZ290byBlcnJvcjsKKworI2lmZGVmIFB5X0RFQlVHCisgICAgLyogUHlFdmFsX0V2YWxGcmFtZUV4KCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKIAogICAgIGZvciAoOzspIHsKICNpZmRlZiBXSVRIX1RTQwpAQCAtMTIzNSw2ICsxMjM0LDcgQEAKICNlbmRpZgogICAgICAgICBhc3NlcnQoc3RhY2tfcG9pbnRlciA+PSBmLT5mX3ZhbHVlc3RhY2spOyAvKiBlbHNlIHVuZGVyZmxvdyAqLwogICAgICAgICBhc3NlcnQoU1RBQ0tfTEVWRUwoKSA8PSBjby0+Y29fc3RhY2tzaXplKTsgIC8qIGVsc2Ugb3ZlcmZsb3cgKi8KKyAgICAgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKIAogICAgICAgICAvKiBEbyBwZXJpb2RpYyB0aGluZ3MuICBEb2luZyB0aGlzIGV2ZXJ5IHRpbWUgdGhyb3VnaAogICAgICAgICAgICB0aGUgbG9vcCB3b3VsZCBhZGQgdG9vIG11Y2ggb3ZlcmhlYWQsIHNvIHdlIGRvIGl0CkBAIC0xMjUwLDE1ICsxMjUwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgYSB0cnk6IGZpbmFsbHk6IGJsb2NrIHVuaW50ZXJydXB0aWJsZS4gKi8KICAgICAgICAgICAgICAgICBnb3RvIGZhc3RfbmV4dF9vcGNvZGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0c3RhdGUtPnRpY2tfY291bnRlcisrOwogI2lmZGVmIFdJVEhfVFNDCiAgICAgICAgICAgICB0aWNrZWQgPSAxOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJnBlbmRpbmdjYWxsc190b19kbykpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlfTWFrZVBlbmRpbmdDYWxscygpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uX2Vycm9yOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoUHlfTWFrZVBlbmRpbmdDYWxscygpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICAgICAgaWYgKF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZnaWxfZHJvcF9yZXF1ZXN0KSkgewpAQCAtMTI3NiwxMyArMTI3MywxMiBAQAogI2VuZGlmCiAgICAgICAgICAgICAvKiBDaGVjayBmb3IgYXN5bmNocm9ub3VzIGV4Y2VwdGlvbnMuICovCiAgICAgICAgICAgICBpZiAodHN0YXRlLT5hc3luY19leGMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHggPSB0c3RhdGUtPmFzeW5jX2V4YzsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZXhjID0gdHN0YXRlLT5hc3luY19leGM7CiAgICAgICAgICAgICAgICAgdHN0YXRlLT5hc3luY19leGMgPSBOVUxMOwogICAgICAgICAgICAgICAgIFVOU0lHTkFMX0FTWU5DX0VYQygpOwotICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoeCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgZ290byBvbl9lcnJvcjsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXROb25lKGV4Yyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGV4Yyk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMjkzLDI0ICsxMjg5LDI0IEBACiAKICAgICAgICAgaWYgKF9QeV9UcmFjaW5nUG9zc2libGUgJiYKICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTCAmJiAhdHN0YXRlLT50cmFjaW5nKSB7CisgICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgLyogc2VlIG1heWJlX2NhbGxfbGluZV90cmFjZQogICAgICAgICAgICAgICAgZm9yIGV4cG9zaXRvcnkgY29tbWVudHMgKi8KICAgICAgICAgICAgIGYtPmZfc3RhY2t0b3AgPSBzdGFja19wb2ludGVyOwogCiAgICAgICAgICAgICBlcnIgPSBtYXliZV9jYWxsX2xpbmVfdHJhY2UodHN0YXRlLT5jX3RyYWNlZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUtPmNfdHJhY2VvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiwgJmluc3RyX2xiLCAmaW5zdHJfdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluc3RyX3ByZXYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5zdHJfbGIsICZpbnN0cl91YiwgJmluc3RyX3ByZXYpOwogICAgICAgICAgICAgLyogUmVsb2FkIHBvc3NpYmx5IGNoYW5nZWQgZnJhbWUgZmllbGRzICovCiAgICAgICAgICAgICBKVU1QVE8oZi0+Zl9sYXN0aSk7CiAgICAgICAgICAgICBpZiAoZi0+Zl9zdGFja3RvcCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlciA9IGYtPmZfc3RhY2t0b3A7CiAgICAgICAgICAgICAgICAgZi0+Zl9zdGFja3RvcCA9IE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBpZiAoZXJyKQogICAgICAgICAgICAgICAgIC8qIHRyYWNlIGZ1bmN0aW9uIHJhaXNlZCBhbiBleGNlcHRpb24gKi8KLSAgICAgICAgICAgICAgICBnb3RvIG9uX2Vycm9yOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBFeHRyYWN0IG9wY29kZSBhbmQgYXJndW1lbnQgKi8KQEAgLTEzNTcsODcgKzEzNTMsOTkgQEAKICAgICAgICAgVEFSR0VUKE5PUCkKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKIAotICAgICAgICBUQVJHRVQoTE9BRF9GQVNUKQotICAgICAgICAgICAgeCA9IEdFVExPQ0FMKG9wYXJnKTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIFRBUkdFVChMT0FEX0ZBU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IEdFVExPQ0FMKG9wYXJnKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5CT1VORExPQ0FMX0VSUk9SX01TRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dldEl0ZW0oY28tPmNvX3Zhcm5hbWVzLCBvcGFyZykpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19VbmJvdW5kTG9jYWxFcnJvciwKLSAgICAgICAgICAgICAgICBVTkJPVU5ETE9DQUxfRVJST1JfTVNHLAotICAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0SXRlbShjby0+Y29fdmFybmFtZXMsIG9wYXJnKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTE9BRF9DT05TVCkKLSAgICAgICAgICAgIHggPSBHRVRJVEVNKGNvbnN0cywgb3BhcmcpOwotICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgUFVTSCh4KTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQVVNIKHZhbHVlKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChMT0FEX0NPTlNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBHRVRJVEVNKGNvbnN0cywgb3BhcmcpOworICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFBVU0godmFsdWUpOworICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFNUT1JFX0ZBU1QpOwotICAgICAgICBUQVJHRVQoU1RPUkVfRkFTVCkKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIFNFVExPQ0FMKG9wYXJnLCB2KTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX0ZBU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFBPUCgpOworICAgICAgICAgICAgU0VUTE9DQUwob3BhcmcsIHZhbHVlKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChQT1BfVE9QKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICBUQVJHRVQoUE9QX1RPUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUE9QKCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFJPVF9UV08pCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB3ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICBTRVRfVE9QKHcpOwotICAgICAgICAgICAgU0VUX1NFQ09ORCh2KTsKKyAgICAgICAgVEFSR0VUKFJPVF9UV08pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0b3AgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZWNvbmQgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc2Vjb25kKTsKKyAgICAgICAgICAgIFNFVF9TRUNPTkQodG9wKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChST1RfVEhSRUUpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB3ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICB4ID0gVEhJUkQoKTsKLSAgICAgICAgICAgIFNFVF9UT1Aodyk7Ci0gICAgICAgICAgICBTRVRfU0VDT05EKHgpOwotICAgICAgICAgICAgU0VUX1RISVJEKHYpOworICAgICAgICBUQVJHRVQoUk9UX1RIUkVFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9wID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2Vjb25kID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdGhpcmQgPSBUSElSRCgpOworICAgICAgICAgICAgU0VUX1RPUChzZWNvbmQpOworICAgICAgICAgICAgU0VUX1NFQ09ORCh0aGlyZCk7CisgICAgICAgICAgICBTRVRfVEhJUkQodG9wKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChEVVBfVE9QKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgUHlfSU5DUkVGKHYpOwotICAgICAgICAgICAgUFVTSCh2KTsKKyAgICAgICAgVEFSR0VUKERVUF9UT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0b3AgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih0b3ApOworICAgICAgICAgICAgUFVTSCh0b3ApOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERVUF9UT1BfVFdPKQotICAgICAgICAgICAgeCA9IFRPUCgpOwotICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgdyA9IFNFQ09ORCgpOwotICAgICAgICAgICAgUHlfSU5DUkVGKHcpOworICAgICAgICBUQVJHRVQoRFVQX1RPUF9UV08pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0b3AgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZWNvbmQgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih0b3ApOworICAgICAgICAgICAgUHlfSU5DUkVGKHNlY29uZCk7CiAgICAgICAgICAgICBTVEFDS0FESigyKTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBTRVRfU0VDT05EKHcpOworICAgICAgICAgICAgU0VUX1RPUCh0b3ApOworICAgICAgICAgICAgU0VUX1NFQ09ORChzZWNvbmQpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFVOQVJZX1BPU0lUSVZFKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1Bvc2l0aXZlKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKFVOQVJZX1BPU0lUSVZFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Qb3NpdGl2ZSh2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFVOQVJZX05FR0FUSVZFKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX05lZ2F0aXZlKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKFVOQVJZX05FR0FUSVZFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9OZWdhdGl2ZSh2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFVOQVJZX05PVCkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgVEFSR0VUKFVOQVJZX05PVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gVE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyID0gUHlPYmplY3RfSXNUcnVlKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICBpZiAoZXJyID09IDApIHsKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfVHJ1ZSk7CiAgICAgICAgICAgICAgICAgU0VUX1RPUChQeV9UcnVlKTsKQEAgLTE0NTAsNDE2ICsxNDU4LDQ2NCBAQAogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5BUllfSU5WRVJUKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0ludmVydCh2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChVTkFSWV9JTlZFUlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0ludmVydCh2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9QT1dFUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Qb3dlcih2LCB3LCBQeV9Ob25lKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfUE9XRVIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleHAgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiYXNlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfUG93ZXIoYmFzZSwgZXhwLCBQeV9Ob25lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihiYXNlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihleHApOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9NVUxUSVBMWSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9NdWx0aXBseSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfTVVMVElQTFkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9NdWx0aXBseShsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9UUlVFX0RJVklERSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9UcnVlRGl2aWRlKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9UUlVFX0RJVklERSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1b3RpZW50ID0gUHlOdW1iZXJfVHJ1ZURpdmlkZShkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgU0VUX1RPUChxdW90aWVudCk7CisgICAgICAgICAgICBpZiAocXVvdGllbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfRkxPT1JfRElWSURFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0Zsb29yRGl2aWRlKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9GTE9PUl9ESVZJREUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdW90aWVudCA9IFB5TnVtYmVyX0Zsb29yRGl2aWRlKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBTRVRfVE9QKHF1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChxdW90aWVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9NT0RVTE8pCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikpCi0gICAgICAgICAgICAgICAgeCA9IFB5VW5pY29kZV9Gb3JtYXQodiwgdyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1JlbWFpbmRlcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfTU9EVUxPKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlVbmljb2RlX0NoZWNrRXhhY3QoZGl2aWRlbmQpID8KKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRm9ybWF0KGRpdmlkZW5kLCBkaXZpc29yKSA6CisgICAgICAgICAgICAgICAgUHlOdW1iZXJfUmVtYWluZGVyKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX0FERCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSAmJgotICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QodykpIHsKLSAgICAgICAgICAgICAgICB4ID0gdW5pY29kZV9jb25jYXRlbmF0ZSh2LCB3LCBmLCBuZXh0X2luc3RyKTsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9BREQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdW07CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobGVmdCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9DaGVja0V4YWN0KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHN1bSA9IHVuaWNvZGVfY29uY2F0ZW5hdGUobGVmdCwgcmlnaHQsIGYsIG5leHRfaW5zdHIpOwogICAgICAgICAgICAgICAgIC8qIHVuaWNvZGVfY29uY2F0ZW5hdGUgY29uc3VtZWQgdGhlIHJlZiB0byB2ICovCi0gICAgICAgICAgICAgICAgZ290byBza2lwX2RlY3JlZl92eDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHggPSBQeU51bWJlcl9BZGQodiwgdyk7CisgICAgICAgICAgICAgICAgc3VtID0gUHlOdW1iZXJfQWRkKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChzdW0pOworICAgICAgICAgICAgaWYgKHN1bSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9TVUJUUkFDVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpZmYgPSBQeU51bWJlcl9TdWJ0cmFjdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgU0VUX1RPUChkaWZmKTsKKyAgICAgICAgICAgIGlmIChkaWZmID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX1NVQlNDUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnN1YiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmNvbnRhaW5lciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5T2JqZWN0X0dldEl0ZW0oY29udGFpbmVyLCBzdWIpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbnRhaW5lcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfTFNISUZUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfTHNoaWZ0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX1JTSElGVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX1JzaGlmdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9BTkQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9BbmQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfWE9SKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfWG9yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX09SKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfT3IobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChMSVNUX0FQUEVORCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsaXN0ID0gUEVFSyhvcGFyZyk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlMaXN0X0FwcGVuZChsaXN0LCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICBza2lwX2RlY3JlZl92eDoKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9TVUJUUkFDVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9TdWJ0cmFjdCh2LCB3KTsKKyAgICAgICAgVEFSR0VUKFNFVF9BREQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2V0ID0gc3RhY2tfcG9pbnRlclstb3BhcmddOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZChzZXQsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1NVQlNDUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfUE9XRVIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleHAgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiYXNlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZVBvd2VyKGJhc2UsIGV4cCwgUHlfTm9uZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXhwKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfTFNISUZUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0xzaGlmdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX01VTFRJUExZKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1JTSElGVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Sc2hpZnQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9UUlVFX0RJVklERSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1b3RpZW50ID0gUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFNFVF9UT1AocXVvdGllbnQpOworICAgICAgICAgICAgaWYgKHF1b3RpZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX0FORCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9BbmQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9GTE9PUl9ESVZJREUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdW90aWVudCA9IFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZShkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgU0VUX1RPUChxdW90aWVudCk7CisgICAgICAgICAgICBpZiAocXVvdGllbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfWE9SKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1hvcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX01PRFVMTykgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm1vZCA9IFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXIobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AobW9kKTsKKyAgICAgICAgICAgIGlmIChtb2QgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfT1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfT3Iodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChMSVNUX0FQUEVORCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBQRUVLKG9wYXJnKTsKLSAgICAgICAgICAgIGVyciA9IFB5TGlzdF9BcHBlbmQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoU0VUX0FERCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBzdGFja19wb2ludGVyWy1vcGFyZ107Ci0gICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9QT1dFUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlUG93ZXIodiwgdywgUHlfTm9uZSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX01VTFRJUExZKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfVFJVRV9ESVZJREUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX0ZMT09SX0RJVklERSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX01PRFVMTykKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9BREQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikgJiYKLSAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9DaGVja0V4YWN0KHcpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IHVuaWNvZGVfY29uY2F0ZW5hdGUodiwgdywgZiwgbmV4dF9pbnN0cik7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX0FERCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnN1bTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChsZWZ0KSAmJiBQeVVuaWNvZGVfQ2hlY2tFeGFjdChyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzdW0gPSB1bmljb2RlX2NvbmNhdGVuYXRlKGxlZnQsIHJpZ2h0LCBmLCBuZXh0X2luc3RyKTsKICAgICAgICAgICAgICAgICAvKiB1bmljb2RlX2NvbmNhdGVuYXRlIGNvbnN1bWVkIHRoZSByZWYgdG8gdiAqLwotICAgICAgICAgICAgICAgIGdvdG8gc2tpcF9kZWNyZWZfdjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlQWRkKHYsIHcpOworICAgICAgICAgICAgICAgIHN1bSA9IFB5TnVtYmVyX0luUGxhY2VBZGQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICBza2lwX2RlY3JlZl92OgotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHN1bSk7CisgICAgICAgICAgICBpZiAoc3VtID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9TVUJUUkFDVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlU3VidHJhY3Qodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9TVUJUUkFDVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpZmYgPSBQeU51bWJlcl9JblBsYWNlU3VidHJhY3QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AoZGlmZik7CisgICAgICAgICAgICBpZiAoZGlmZiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfTFNISUZUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VMc2hpZnQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9MU0hJRlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlTHNoaWZ0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9SU0hJRlQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVJzaGlmdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1JTSElGVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VSc2hpZnQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX0FORCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlQW5kKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfQU5EKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZUFuZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfWE9SKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VYb3Iodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9YT1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlWG9yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9PUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlT3Iodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9PUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VPcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX1NVQlNDUikKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIHYgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIHUgPSBUSElSRCgpOworICAgICAgICBUQVJHRVQoU1RPUkVfU1VCU0NSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3ViID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFRISVJEKCk7CisgICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgU1RBQ0tBREooLTMpOwogICAgICAgICAgICAgLyogdlt3XSA9IHUgKi8KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEl0ZW0odiwgdywgdSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKGNvbnRhaW5lciwgc3ViLCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbnRhaW5lcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfU1VCU0NSKQotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgdiA9IFNFQ09ORCgpOworICAgICAgICBUQVJHRVQoREVMRVRFX1NVQlNDUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnN1YiA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmNvbnRhaW5lciA9IFNFQ09ORCgpOworICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKICAgICAgICAgICAgIC8qIGRlbCB2W3ddICovCi0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9EZWxJdGVtKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9EZWxJdGVtKGNvbnRhaW5lciwgc3ViKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb250YWluZXIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUFJJTlRfRVhQUikKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIHcgPSBQeVN5c19HZXRPYmplY3QoImRpc3BsYXlob29rIik7Ci0gICAgICAgICAgICBpZiAodyA9PSBOVUxMKSB7CisgICAgICAgIFRBUkdFVChQUklOVF9FWFBSKSB7CisgICAgICAgICAgICBfUHlfSURFTlRJRklFUihkaXNwbGF5aG9vayk7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpob29rID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX2Rpc3BsYXlob29rKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgICAgICBpZiAoaG9vayA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvc3Qgc3lzLmRpc3BsYXlob29rIik7Ci0gICAgICAgICAgICAgICAgZXJyID0gLTE7Ci0gICAgICAgICAgICAgICAgeCA9IE5VTEw7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5VHVwbGVfUGFjaygxLCB2KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIHcgPSBQeUV2YWxfQ2FsbE9iamVjdCh3LCB4KTsKLSAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHcpOwotICAgICAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih4KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhob29rLCB2YWx1ZSwgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogI2lmZGVmIENBU0VfVE9PX0JJRwogICAgICAgICBkZWZhdWx0OiBzd2l0Y2ggKG9wY29kZSkgewogI2VuZGlmCi0gICAgICAgIFRBUkdFVChSQUlTRV9WQVJBUkdTKQotICAgICAgICAgICAgdiA9IHcgPSBOVUxMOworICAgICAgICBUQVJHRVQoUkFJU0VfVkFSQVJHUykgeworICAgICAgICAgICAgUHlPYmplY3QgKmNhdXNlID0gTlVMTCwgKmV4YyA9IE5VTEw7CiAgICAgICAgICAgICBzd2l0Y2ggKG9wYXJnKSB7CiAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgdiA9IFBPUCgpOyAvKiBjYXVzZSAqLworICAgICAgICAgICAgICAgIGNhdXNlID0gUE9QKCk7IC8qIGNhdXNlICovCiAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOyAvKiBleGMgKi8KKyAgICAgICAgICAgICAgICBleGMgPSBQT1AoKTsgLyogZXhjICovCiAgICAgICAgICAgICBjYXNlIDA6IC8qIEZhbGx0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgd2h5ID0gZG9fcmFpc2Uodywgdik7CisgICAgICAgICAgICAgICAgaWYgKGRvX3JhaXNlKGV4YywgY2F1c2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIFJBSVNFX1ZBUkFSR1Mgb3BhcmciKTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX0xPQ0FMUykKLSAgICAgICAgICAgIHggPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBmLT5mX2xvY2FsczsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodik7Ci0gICAgICAgICAgICBmLT5mX2xvY2FscyA9IHg7Ci0gICAgICAgICAgICBESVNQQVRDSCgpOwotCi0gICAgICAgIFRBUkdFVChSRVRVUk5fVkFMVUUpCisgICAgICAgIFRBUkdFVChSRVRVUk5fVkFMVUUpIHsKICAgICAgICAgICAgIHJldHZhbCA9IFBPUCgpOwogICAgICAgICAgICAgd2h5ID0gV0hZX1JFVFVSTjsKICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoWUlFTERfRlJPTSkKLSAgICAgICAgICAgIHUgPSBQT1AoKTsKLSAgICAgICAgICAgIHggPSBUT1AoKTsKLSAgICAgICAgICAgIC8qIHNlbmQgdSB0byB4ICovCi0gICAgICAgICAgICBpZiAoUHlHZW5fQ2hlY2tFeGFjdCh4KSkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeUdlbl9TZW5kKChQeUdlbk9iamVjdCAqKXgsIHUpOworICAgICAgICBUQVJHRVQoWUlFTERfRlJPTSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZWNpZXZlciA9IFRPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChQeUdlbl9DaGVja0V4YWN0KHJlY2lldmVyKSkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeUdlbl9TZW5kKChQeUdlbk9iamVjdCAqKXJlY2lldmVyLCB2KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoc2VuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHUgPT0gUHlfTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gUHlfVFlQRSh4KS0+dHBfaXRlcm5leHQoeCk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gUHlfTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gUHlfVFlQRShyZWNpZXZlciktPnRwX2l0ZXJuZXh0KHJlY2lldmVyKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoeCwgJlB5SWRfc2VuZCwgIk8iLCB1KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChyZWNpZXZlciwgJlB5SWRfc2VuZCwgIk8iLCB2KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmICghcmV0dmFsKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICBpZiAocmV0dmFsID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsOwotICAgICAgICAgICAgICAgIHggPSBQT1AoKTsgLyogUmVtb3ZlIGl0ZXIgZnJvbSBzdGFjayAqLwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N0b3BJdGVyYXRpb24pKQorICAgICAgICAgICAgICAgICAgICBjYWxsX2V4Y190cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosIHRzdGF0ZSwgZik7CiAgICAgICAgICAgICAgICAgZXJyID0gX1B5R2VuX0ZldGNoU3RvcEl0ZXJhdGlvblZhbHVlKCZ2YWwpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeCA9IHZhbDsKLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZWNpZXZlcik7CisgICAgICAgICAgICAgICAgU0VUX1RPUCh2YWwpOworICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiB4IHJlbWFpbnMgb24gc3RhY2ssIHJldHZhbCBpcyB2YWx1ZSB0byBiZSB5aWVsZGVkICovCiAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gc3RhY2tfcG9pbnRlcjsKQEAgLTE4NjcsMzkgKzE5MjMsMzggQEAKICAgICAgICAgICAgIC8qIGFuZCByZXBlYXQuLi4gKi8KICAgICAgICAgICAgIGYtPmZfbGFzdGktLTsKICAgICAgICAgICAgIGdvdG8gZmFzdF95aWVsZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChZSUVMRF9WQUxVRSkKKyAgICAgICAgVEFSR0VUKFlJRUxEX1ZBTFVFKSB7CiAgICAgICAgICAgICByZXR2YWwgPSBQT1AoKTsKICAgICAgICAgICAgIGYtPmZfc3RhY2t0b3AgPSBzdGFja19wb2ludGVyOwogICAgICAgICAgICAgd2h5ID0gV0hZX1lJRUxEOwogICAgICAgICAgICAgZ290byBmYXN0X3lpZWxkOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBPUF9FWENFUFQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7Ci0gICAgICAgICAgICAgICAgaWYgKGItPmJfdHlwZSAhPSBFWENFUFRfSEFORExFUikgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAicG9wcGVkIGJsb2NrIGlzIG5vdCBhbiBleGNlcHQgaGFuZGxlciIpOwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgVU5XSU5EX0VYQ0VQVF9IQU5ETEVSKGIpOworICAgICAgICBUQVJHRVQoUE9QX0VYQ0VQVCkgeworICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7CisgICAgICAgICAgICBpZiAoYi0+Yl90eXBlICE9IEVYQ0VQVF9IQU5ETEVSKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wcGVkIGJsb2NrIGlzIG5vdCBhbiBleGNlcHQgaGFuZGxlciIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBVTldJTkRfRVhDRVBUX0hBTkRMRVIoYik7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBPUF9CTE9DSykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gUHlGcmFtZV9CbG9ja1BvcChmKTsKLSAgICAgICAgICAgICAgICBVTldJTkRfQkxPQ0soYik7Ci0gICAgICAgICAgICB9CisgICAgICAgIFRBUkdFVChQT1BfQkxPQ0spIHsKKyAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOworICAgICAgICAgICAgVU5XSU5EX0JMT0NLKGIpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRChFTkRfRklOQUxMWSk7Ci0gICAgICAgIFRBUkdFVChFTkRfRklOQUxMWSkKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICB3aHkgPSAoZW51bSB3aHlfY29kZSkgUHlMb25nX0FTX0xPTkcodik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KHdoeSAhPSBXSFlfWUlFTEQpOworICAgICAgICBUQVJHRVQoRU5EX0ZJTkFMTFkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdGF0dXMgPSBQT1AoKTsKKyAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2soc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIHdoeSA9IChlbnVtIHdoeV9jb2RlKSBQeUxvbmdfQVNfTE9ORyhzdGF0dXMpOworICAgICAgICAgICAgICAgIGFzc2VydCh3aHkgIT0gV0hZX1lJRUxEICYmIHdoeSAhPSBXSFlfRVhDRVBUSU9OKTsKICAgICAgICAgICAgICAgICBpZiAod2h5ID09IFdIWV9SRVRVUk4gfHwKICAgICAgICAgICAgICAgICAgICAgd2h5ID09IFdIWV9DT05USU5VRSkKICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gUE9QKCk7CkBAIC0xOTEyLDI0OCArMTk2NywyODAgQEAKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGItPmJfdHlwZSA9PSBFWENFUFRfSEFORExFUik7CiAgICAgICAgICAgICAgICAgICAgIFVOV0lORF9FWENFUFRfSEFORExFUihiKTsKICAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX05PVDsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgIHUgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICBQeUVycl9SZXN0b3JlKHYsIHcsIHUpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9SRVJBSVNFOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZWxzZSBpZiAoUHlFeGNlcHRpb25DbGFzc19DaGVjayhzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmV4YyA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0YiA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoc3RhdHVzLCBleGMsIHRiKTsKKyAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2ICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyAhPSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAiJ2ZpbmFsbHknIHBvcHMgYmFkIGV4Y2VwdGlvbiIpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXR1cyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfQlVJTERfQ0xBU1MpCi0gICAgICAgIHsKKyAgICAgICAgVEFSR0VUKExPQURfQlVJTERfQ0xBU1MpIHsKICAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fYnVpbGRfY2xhc3NfXyk7CiAKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiYzsKICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2J1aWx0aW5zKSkgewotICAgICAgICAgICAgICAgIHggPSBfUHlEaWN0X0dldEl0ZW1JZChmLT5mX2J1aWx0aW5zLCAmUHlJZF9fX2J1aWxkX2NsYXNzX18pOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBiYyA9IF9QeURpY3RfR2V0SXRlbUlkKGYtPmZfYnVpbHRpbnMsICZQeUlkX19fYnVpbGRfY2xhc3NfXyk7CisgICAgICAgICAgICAgICAgaWYgKGJjID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05hbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2J1aWxkX2NsYXNzX18gbm90IGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGJjKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpidWlsZF9jbGFzc19zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX2J1aWxkX2NsYXNzX18pOwogICAgICAgICAgICAgICAgIGlmIChidWlsZF9jbGFzc19zdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgYnVpbGRfY2xhc3Nfc3RyKTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYmMgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIGJ1aWxkX2NsYXNzX3N0cik7CisgICAgICAgICAgICAgICAgaWYgKGJjID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05hbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19idWlsZF9jbGFzc19fIG5vdCBmb3VuZCIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKGJjKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfTkFNRSkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAoKHggPSBmLT5mX2xvY2FscykgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdCh4KSkKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oeCwgdywgdik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKHgsIHcsIHYpOworICAgICAgICBUQVJHRVQoU1RPUkVfTkFNRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm5zID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKG5zID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgZm91bmQgd2hlbiBzdG9yaW5nICVSIiwgbmFtZSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgZm91bmQgd2hlbiBzdG9yaW5nICVSIiwgdyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChucykpCisgICAgICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0obnMsIG5hbWUsIHYpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEl0ZW0obnMsIG5hbWUsIHYpOworICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9OQU1FKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIGlmICgoeCA9IGYtPmZfbG9jYWxzKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChlcnIgPSBQeU9iamVjdF9EZWxJdGVtKHgsIHcpKSAhPSAwKQotICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3KTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKERFTEVURV9OQU1FKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpucyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChucyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gZGVsZXRpbmcgJVIiLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgd2hlbiBkZWxldGluZyAlUiIsIHcpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9EZWxJdGVtKG5zLCBuYW1lKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX05hbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhVTlBBQ0tfU0VRVUVOQ0UpOwotICAgICAgICBUQVJHRVQoVU5QQUNLX1NFUVVFTkNFKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKFB5VHVwbGVfQ2hlY2tFeGFjdCh2KSAmJgotICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUodikgPT0gb3BhcmcpIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqKml0ZW1zID0gXAotICAgICAgICAgICAgICAgICAgICAoKFB5VHVwbGVPYmplY3QgKil2KS0+b2JfaXRlbTsKKyAgICAgICAgVEFSR0VUKFVOUEFDS19TRVFVRU5DRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnNlcSA9IFBPUCgpLCAqaXRlbSwgKippdGVtczsKKyAgICAgICAgICAgIGlmIChQeVR1cGxlX0NoZWNrRXhhY3Qoc2VxKSAmJgorICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUoc2VxKSA9PSBvcGFyZykgeworICAgICAgICAgICAgICAgIGl0ZW1zID0gKChQeVR1cGxlT2JqZWN0ICopc2VxKS0+b2JfaXRlbTsKICAgICAgICAgICAgICAgICB3aGlsZSAob3BhcmctLSkgewotICAgICAgICAgICAgICAgICAgICB3ID0gaXRlbXNbb3BhcmddOwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodyk7Ci0gICAgICAgICAgICAgICAgICAgIFBVU0godyk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tvcGFyZ107CisgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgUFVTSChpdGVtKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFB5TGlzdF9DaGVja0V4YWN0KHYpICYmCi0gICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRSh2KSA9PSBvcGFyZykgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqaXRlbXMgPSBcCi0gICAgICAgICAgICAgICAgICAgICgoUHlMaXN0T2JqZWN0ICopdiktPm9iX2l0ZW07CisgICAgICAgICAgICB9IGVsc2UgaWYgKFB5TGlzdF9DaGVja0V4YWN0KHNlcSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0dFVF9TSVpFKHNlcSkgPT0gb3BhcmcpIHsKKyAgICAgICAgICAgICAgICBpdGVtcyA9ICgoUHlMaXN0T2JqZWN0ICopc2VxKS0+b2JfaXRlbTsKICAgICAgICAgICAgICAgICB3aGlsZSAob3BhcmctLSkgewotICAgICAgICAgICAgICAgICAgICB3ID0gaXRlbXNbb3BhcmddOwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodyk7Ci0gICAgICAgICAgICAgICAgICAgIFBVU0godyk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tvcGFyZ107CisgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgUFVTSChpdGVtKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHVucGFja19pdGVyYWJsZSh2LCBvcGFyZywgLTEsCisgICAgICAgICAgICB9IGVsc2UgaWYgKHVucGFja19pdGVyYWJsZShzZXEsIG9wYXJnLCAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgKyBvcGFyZykpIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESihvcGFyZyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8qIHVucGFja19pdGVyYWJsZSgpIHJhaXNlZCBhbiBleGNlcHRpb24gKi8KLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTlBBQ0tfRVgpCi0gICAgICAgIHsKKyAgICAgICAgVEFSR0VUKFVOUEFDS19FWCkgewogICAgICAgICAgICAgaW50IHRvdGFsYXJncyA9IDEgKyAob3BhcmcgJiAweEZGKSArIChvcGFyZyA+PiA4KTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXEgPSBQT1AoKTsKIAotICAgICAgICAgICAgaWYgKHVucGFja19pdGVyYWJsZSh2LCBvcGFyZyAmIDB4RkYsIG9wYXJnID4+IDgsCisgICAgICAgICAgICBpZiAodW5wYWNrX2l0ZXJhYmxlKHNlcSwgb3BhcmcgJiAweEZGLCBvcGFyZyA+PiA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyICsgdG90YWxhcmdzKSkgewogICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgKz0gdG90YWxhcmdzOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9BVFRSKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHUgPSBTRUNPTkQoKTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX0FUVFIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKm93bmVyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFNFQ09ORCgpOworICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIodiwgdywgdSk7IC8qIHYudyA9IHUgKi8KKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIob3duZXIsIG5hbWUsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYob3duZXIpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9BVFRSKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIodiwgdywgKFB5T2JqZWN0ICopTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlbCB2LncgKi8KKyAgICAgICAgVEFSR0VUKERFTEVURV9BVFRSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvd25lciA9IFBPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIob3duZXIsIG5hbWUsIChQeU9iamVjdCAqKU5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKG93bmVyKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChTVE9SRV9HTE9CQUwpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShmLT5mX2dsb2JhbHMsIG5hbWUsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfR0xPQkFMKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKGYtPmZfZ2xvYmFscywgdywgdik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoREVMRVRFX0dMT0JBTCkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoKGVyciA9IFB5RGljdF9EZWxJdGVtKGYtPmZfZ2xvYmFscywgdykpICE9IDApCisgICAgICAgIFRBUkdFVChERUxFVEVfR0xPQkFMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeURpY3RfRGVsSXRlbShmLT5mX2dsb2JhbHMsIG5hbWUpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CiAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoCi0gICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwgR0xPQkFMX05BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChMT0FEX05BTUUpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgaWYgKCh2ID0gZi0+Zl9sb2NhbHMpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgd2hlbiBsb2FkaW5nICVSIiwgdyk7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLCBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICAgICAgICAgIHggPSBQeURpY3RfR2V0SXRlbSh2LCB3KTsKLSAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHgpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChMT0FEX05BTUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKmxvY2FscyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgUHlPYmplY3QgKnY7CisgICAgICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgd2hlbiBsb2FkaW5nICVSIiwgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChsb2NhbHMpKSB7CisgICAgICAgICAgICAgICAgdiA9IFB5RGljdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgUHlfWElOQ1JFRih2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKHYsIHcpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwgJiYgX1B5RXJyX09DQ1VSUkVEKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfS2V5RXJyb3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0dldEl0ZW0obG9jYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMICYmIF9QeUVycl9PQ0NVUlJFRCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9nbG9iYWxzLCB3KTsKLSAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHgpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9nbG9iYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHYpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGYtPmZfYnVpbHRpbnMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKKyAgICAgICAgICAgIFBVU0godik7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfR0xPQkFMKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgVEFSR0VUKExPQURfR0xPQkFMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2OwogICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGYtPmZfZ2xvYmFscykKICAgICAgICAgICAgICAgICAmJiBQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2J1aWx0aW5zKSkgewotICAgICAgICAgICAgICAgIHggPSBfUHlEaWN0X0xvYWRHbG9iYWwoKFB5RGljdE9iamVjdCAqKWYtPmZfZ2xvYmFscywKKyAgICAgICAgICAgICAgICB2ID0gX1B5RGljdF9Mb2FkR2xvYmFsKChQeURpY3RPYmplY3QgKilmLT5mX2dsb2JhbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlEaWN0T2JqZWN0ICopZi0+Zl9idWlsdGlucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFfUHlFcnJfT0NDVVJSRUQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMT0JBTF9OQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogU2xvdy1wYXRoIGlmIGdsb2JhbHMgb3IgYnVpbHRpbnMgaXMgbm90IGEgZGljdCAqLwotICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgdyk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICB2ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTE9CQUxfTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQVVNIKHYpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfRkFTVCkKLSAgICAgICAgICAgIHggPSBHRVRMT0NBTChvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7CisgICAgICAgIFRBUkdFVChERUxFVEVfRkFTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBHRVRMT0NBTChvcGFyZyk7CisgICAgICAgICAgICBpZiAodiAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgU0VUTE9DQUwob3BhcmcsIE5VTEwpOwogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CkBAIC0yMTYyLDI1MiArMjI0OSwzMTIgQEAKICAgICAgICAgICAgICAgICBVTkJPVU5ETE9DQUxfRVJST1JfTVNHLAogICAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0SXRlbShjby0+Y29fdmFybmFtZXMsIG9wYXJnKQogICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX0RFUkVGKQotICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKLSAgICAgICAgICAgIGlmIChQeUNlbGxfR0VUKHgpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUNlbGxfU2V0KHgsIE5VTEwpOworICAgICAgICBUQVJHRVQoREVMRVRFX0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgIGlmIChQeUNlbGxfR0VUKGNlbGwpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUNlbGxfU2V0KGNlbGwsIE5VTEwpOwogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSAtMTsKICAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfQ0xPU1VSRSkKLSAgICAgICAgICAgIHggPSBmcmVldmFyc1tvcGFyZ107Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChMT0FEX0RFUkVGKQotICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKLSAgICAgICAgICAgIHcgPSBQeUNlbGxfR2V0KHgpOwotICAgICAgICAgICAgaWYgKHcgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFBVU0godyk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoU1RPUkVfREVSRUYpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB4ID0gZnJlZXZhcnNbb3BhcmddOwotICAgICAgICAgICAgUHlDZWxsX1NldCh4LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgVEFSR0VUKExPQURfQ0xPU1VSRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBQeV9JTkNSRUYoY2VsbCk7CisgICAgICAgICAgICBQVVNIKGNlbGwpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCVUlMRF9UVVBMRSkKLSAgICAgICAgICAgIHggPSBQeVR1cGxlX05ldyhvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7IC0tb3BhcmcgPj0gMDspIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHgsIG9wYXJnLCB3KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICBUQVJHRVQoTE9BRF9DTEFTU0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSwgKnZhbHVlLCAqbG9jYWxzID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGlkeDsKKyAgICAgICAgICAgIGFzc2VydChsb2NhbHMpOworICAgICAgICAgICAgYXNzZXJ0KG9wYXJnID49IFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKSk7CisgICAgICAgICAgICBpZHggPSBvcGFyZyAtIFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKTsKKyAgICAgICAgICAgIGFzc2VydChpZHggPj0gMCAmJiBpZHggPCBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19mcmVldmFycykpOworICAgICAgICAgICAgbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oY28tPmNvX2ZyZWV2YXJzLCBpZHgpOworICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGxvY2FscykpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgUHlfWElOQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoQlVJTERfTElTVCkKLSAgICAgICAgICAgIHggPSAgUHlMaXN0X05ldyhvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7IC0tb3BhcmcgPj0gMDspIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0oeCwgb3BhcmcsIHcpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeU9iamVjdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKEJVSUxEX1NFVCkKLSAgICAgICAgICAgIHggPSBQeVNldF9OZXcoTlVMTCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7IC0tb3BhcmcgPj0gMDspIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQoeCwgdyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5Q2VsbF9HRVQoY2VsbCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJVSUxEX01BUCkKLSAgICAgICAgICAgIHggPSBfUHlEaWN0X05ld1ByZXNpemVkKChQeV9zc2l6ZV90KW9wYXJnKTsKLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKFNUT1JFX01BUCkKLSAgICAgICAgICAgIHcgPSBUT1AoKTsgICAgIC8qIGtleSAqLwotICAgICAgICAgICAgdSA9IFNFQ09ORCgpOyAgLyogdmFsdWUgKi8KLSAgICAgICAgICAgIHYgPSBUSElSRCgpOyAgIC8qIGRpY3QgKi8KLSAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKLSAgICAgICAgICAgIGFzc2VydCAoUHlEaWN0X0NoZWNrRXhhY3QodikpOwotICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0odiwgdywgdSk7ICAvKiB2W3ddID0gdSAqLwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKE1BUF9BREQpCi0gICAgICAgICAgICB3ID0gVE9QKCk7ICAgICAvKiBrZXkgKi8KLSAgICAgICAgICAgIHUgPSBTRUNPTkQoKTsgIC8qIHZhbHVlICovCi0gICAgICAgICAgICBTVEFDS0FESigtMik7Ci0gICAgICAgICAgICB2ID0gc3RhY2tfcG9pbnRlclstb3BhcmddOyAgLyogZGljdCAqLwotICAgICAgICAgICAgYXNzZXJ0IChQeURpY3RfQ2hlY2tFeGFjdCh2KSk7Ci0gICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbSh2LCB3LCB1KTsgIC8qIHZbd10gPSB1ICovCi0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIFRBUkdFVChMT0FEX0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5Q2VsbF9HRVQoY2VsbCk7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQVVNIKHZhbHVlKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoTE9BRF9BVFRSKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRBdHRyKHYsIHcpOworICAgICAgICBUQVJHRVQoU1RPUkVfREVSRUYpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgIFB5Q2VsbF9TZXQoY2VsbCwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChDT01QQVJFX09QKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IGNtcF9vdXRjb21lKG9wYXJnLCB2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSBicmVhazsKKyAgICAgICAgVEFSR0VUKEJVSUxEX1RVUExFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdHVwID0gUHlUdXBsZV9OZXcob3BhcmcpOworICAgICAgICAgICAgaWYgKHR1cCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB3aGlsZSAoLS1vcGFyZyA+PSAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgb3BhcmcsIGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUFVTSCh0dXApOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCVUlMRF9MSVNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCA9ICBQeUxpc3RfTmV3KG9wYXJnKTsKKyAgICAgICAgICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHdoaWxlICgtLW9wYXJnID49IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBvcGFyZywgaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQVVNIKGxpc3QpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCVUlMRF9TRVQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXQgPSBQeVNldF9OZXcoTlVMTCk7CisgICAgICAgICAgICBpbnQgZXJyID0gMDsKKyAgICAgICAgICAgIGlmIChzZXQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgd2hpbGUgKC0tb3BhcmcgPj0gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUE9QKCk7CisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKQorICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQoc2V0LCBpdGVtKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2V0KTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUFVTSChzZXQpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCVUlMRF9NQVApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptYXAgPSBfUHlEaWN0X05ld1ByZXNpemVkKChQeV9zc2l6ZV90KW9wYXJnKTsKKyAgICAgICAgICAgIGlmIChtYXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFVTSChtYXApOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChTVE9SRV9NQVApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm1hcCA9IFRISVJEKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgU1RBQ0tBREooLTIpOworICAgICAgICAgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KG1hcCkpOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0obWFwLCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChNQVBfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptYXA7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgU1RBQ0tBREooLTIpOworICAgICAgICAgICAgbWFwID0gc3RhY2tfcG9pbnRlclstb3BhcmddOyAgLyogZGljdCAqLworICAgICAgICAgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KG1hcCkpOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0obWFwLCBrZXksIHZhbHVlKTsgIC8qIHZbd10gPSB1ICovCisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKExPQURfQVRUUikgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqb3duZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9HZXRBdHRyKG93bmVyLCBuYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvd25lcik7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQ09NUEFSRV9PUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IGNtcF9vdXRjb21lKG9wYXJnLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBQUkVESUNUKFBPUF9KVU1QX0lGX0ZBTFNFKTsKICAgICAgICAgICAgIFBSRURJQ1QoUE9QX0pVTVBfSUZfVFJVRSk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOwotCi0gICAgICAgIFRBUkdFVChJTVBPUlRfTkFNRSkKLSAgICAgICAgewotICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19pbXBvcnRfXyk7Ci0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgeCA9IF9QeURpY3RfR2V0SXRlbUlkKGYtPmZfYnVpbHRpbnMsICZQeUlkX19faW1wb3J0X18pOwotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9faW1wb3J0X18gbm90IGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICB1ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlMb25nX0FzTG9uZyh1KSAhPSAtMSB8fCBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgIHcgPSBQeVR1cGxlX1BhY2soNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2xvY2FscyA9PSBOVUxMID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lIDogZi0+Zl9sb2NhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB3ID0gUHlUdXBsZV9QYWNrKDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPT0gTlVMTCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSA6IGYtPmZfbG9jYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHUgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICB2ID0geDsKLSAgICAgICAgICAgIHggPSBQeUV2YWxfQ2FsbE9iamVjdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU1QT1JUX1NUQVIpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhmKTsKLSAgICAgICAgICAgIGlmICgoeCA9IGYtPmZfbG9jYWxzKSA9PSBOVUxMKSB7CisgICAgICAgIFRBUkdFVChJTVBPUlRfTkFNRSkgeworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19pbXBvcnRfXyk7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jID0gX1B5RGljdF9HZXRJdGVtSWQoZi0+Zl9idWlsdGlucywgJlB5SWRfX19pbXBvcnRfXyk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnJvbSwgKmxldmVsLCAqYXJncywgKnJlczsKKyAgICAgICAgICAgIGlmIChmdW5jID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW1wb3J0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2ltcG9ydF9fIG5vdCBmb3VuZCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CisgICAgICAgICAgICBmcm9tID0gUE9QKCk7CisgICAgICAgICAgICBsZXZlbCA9IFRPUCgpOworICAgICAgICAgICAgaWYgKFB5TG9uZ19Bc0xvbmcobGV2ZWwpICE9IC0xIHx8IFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgYXJncyA9IFB5VHVwbGVfUGFjayg1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9nbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfbG9jYWxzID09IE5VTEwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUgOiBmLT5mX2xvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmdzID0gUHlUdXBsZV9QYWNrKDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2dsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPT0gTlVMTCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSA6IGYtPmZfbG9jYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20pOworICAgICAgICAgICAgUHlfREVDUkVGKGxldmVsKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcm9tKTsKKyAgICAgICAgICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7CisgICAgICAgICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLCBhcmdzKTsKKyAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChJTVBPUlRfU1RBUikgeworICAgICAgICAgICAgUHlPYmplY3QgKmZyb20gPSBQT1AoKSwgKmxvY2FsczsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIGZvdW5kIGR1cmluZyAnaW1wb3J0IConIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKLSAgICAgICAgICAgIGVyciA9IGltcG9ydF9hbGxfZnJvbSh4LCB2KTsKKyAgICAgICAgICAgIGVyciA9IGltcG9ydF9hbGxfZnJvbShsb2NhbHMsIGZyb20pOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOwogICAgICAgICAgICAgUHlGcmFtZV9Mb2NhbHNUb0Zhc3QoZiwgMCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcm9tKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTVBPUlRfRlJPTSkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7CisgICAgICAgIFRBUkdFVChJTVBPUlRfRlJPTSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnJvbSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlczsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKLSAgICAgICAgICAgIHggPSBpbXBvcnRfZnJvbSh2LCB3KTsKKyAgICAgICAgICAgIHJlcyA9IGltcG9ydF9mcm9tKGZyb20sIG5hbWUpOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOwotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0gocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChKVU1QX0ZPUldBUkQpCisgICAgICAgIFRBUkdFVChKVU1QX0ZPUldBUkQpIHsKICAgICAgICAgICAgIEpVTVBCWShvcGFyZyk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoUE9QX0pVTVBfSUZfRkFMU0UpOwotICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfRkFMU0UpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfRkFMU0UpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb25kID0gUE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKGNvbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApCiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKQogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoUE9QX0pVTVBfSUZfVFJVRSk7Ci0gICAgICAgIFRBUkdFVChQT1BfSlVNUF9JRl9UUlVFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgIFRBUkdFVChQT1BfSlVNUF9JRl9UUlVFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29uZCA9IFBPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKGNvbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApIHsKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CkBAIC0yNDE1LDU4ICsyNTYyLDYzIEBACiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkKICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSlVNUF9JRl9GQUxTRV9PUl9QT1ApCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7CisgICAgICAgIFRBUkdFVChKVU1QX0lGX0ZBTFNFX09SX1BPUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9UcnVlKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X0ZhbHNlKSB7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoY29uZCk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEpVTVBfSUZfVFJVRV9PUl9QT1ApCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgeworICAgICAgICBUQVJHRVQoSlVNUF9JRl9UUlVFX09SX1BPUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X1RydWUpIHsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShjb25kKTsKICAgICAgICAgICAgIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgVEFSR0VUKEpVTVBfQUJTT0xVVEUpCisgICAgICAgIFRBUkdFVChKVU1QX0FCU09MVVRFKSB7CiAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogI2lmIEZBU1RfTE9PUFMKICAgICAgICAgICAgIC8qIEVuYWJsaW5nIHRoaXMgcGF0aCBzcGVlZHMtdXAgYWxsIHdoaWxlIGFuZCBmb3ItbG9vcHMgYnkgYnlwYXNzaW5nCkBAIC0yNDgwLDYwICsyNjMyLDYyIEBACiAjZWxzZQogICAgICAgICAgICAgRElTUEFUQ0goKTsKICNlbmRpZgorICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEdFVF9JVEVSKQorICAgICAgICBUQVJHRVQoR0VUX0lURVIpIHsKICAgICAgICAgICAgIC8qIGJlZm9yZTogW29ial07IGFmdGVyIFtnZXRpdGVyKG9iaildICovCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlcih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgICAgIFBSRURJQ1QoRk9SX0lURVIpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVyYWJsZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZXJhYmxlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyYWJsZSk7CisgICAgICAgICAgICBTRVRfVE9QKGl0ZXIpOworICAgICAgICAgICAgaWYgKGl0ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFJFRElDVChGT1JfSVRFUik7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKEZPUl9JVEVSKTsKLSAgICAgICAgVEFSR0VUKEZPUl9JVEVSKQorICAgICAgICBUQVJHRVQoRk9SX0lURVIpIHsKICAgICAgICAgICAgIC8qIGJlZm9yZTogW2l0ZXJdOyBhZnRlcjogW2l0ZXIsIGl0ZXIoKV0gKm9yKiBbXSAqLwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9ICgqdi0+b2JfdHlwZS0+dHBfaXRlcm5leHQpKHYpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm5leHQgPSAoKml0ZXItPm9iX3R5cGUtPnRwX2l0ZXJuZXh0KShpdGVyKTsKKyAgICAgICAgICAgIGlmIChuZXh0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQVVNIKG5leHQpOwogICAgICAgICAgICAgICAgIFBSRURJQ1QoU1RPUkVfRkFTVCk7CiAgICAgICAgICAgICAgICAgUFJFRElDVChVTlBBQ0tfU0VRVUVOQ0UpOwogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfU3RvcEl0ZXJhdGlvbikpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TdG9wSXRlcmF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGNhbGxfZXhjX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsIHRzdGF0ZS0+Y190cmFjZW9iaiwgdHN0YXRlLCBmKTsKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogaXRlcmF0b3IgZW5kZWQgbm9ybWFsbHkgKi8KLSAgICAgICAgICAgIHggPSB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICBTVEFDS0FESigtMSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcik7CiAgICAgICAgICAgICBKVU1QQlkob3BhcmcpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCUkVBS19MT09QKQorICAgICAgICBUQVJHRVQoQlJFQUtfTE9PUCkgewogICAgICAgICAgICAgd2h5ID0gV0hZX0JSRUFLOwogICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChDT05USU5VRV9MT09QKQorICAgICAgICBUQVJHRVQoQ09OVElOVUVfTE9PUCkgewogICAgICAgICAgICAgcmV0dmFsID0gUHlMb25nX0Zyb21Mb25nKG9wYXJnKTsKLSAgICAgICAgICAgIGlmICghcmV0dmFsKSB7Ci0gICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmV0dmFsID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIHdoeSA9IFdIWV9DT05USU5VRTsKICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgIH0KIAogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKFNFVFVQX0xPT1AsIF9zZXR1cF9maW5hbGx5KQogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKFNFVFVQX0VYQ0VQVCwgX3NldHVwX2ZpbmFsbHkpCiAgICAgICAgIFRBUkdFVChTRVRVUF9GSU5BTExZKQotICAgICAgICBfc2V0dXBfZmluYWxseToKKyAgICAgICAgX3NldHVwX2ZpbmFsbHk6IHsKICAgICAgICAgICAgIC8qIE5PVEU6IElmIHlvdSBhZGQgYW55IG5ldyBibG9jay1zZXR1cCBvcGNvZGVzIHRoYXQKICAgICAgICAgICAgICAgIGFyZSBub3QgdHJ5L2V4Y2VwdC9maW5hbGx5IGhhbmRsZXJzLCB5b3UgbWF5IG5lZWQKICAgICAgICAgICAgICAgIHRvIHVwZGF0ZSB0aGUgUHlHZW5fTmVlZHNGaW5hbGl6aW5nKCkgZnVuY3Rpb24uCkBAIC0yNTQyLDM3ICsyNjk2LDM1IEBACiAgICAgICAgICAgICBQeUZyYW1lX0Jsb2NrU2V0dXAoZiwgb3Bjb2RlLCBJTlNUUl9PRkZTRVQoKSArIG9wYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQUNLX0xFVkVMKCkpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTRVRVUF9XSVRIKQotICAgICAgICB7CisgICAgICAgIFRBUkdFVChTRVRVUF9XSVRIKSB7CiAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2V4aXRfXyk7CiAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2VudGVyX18pOwotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IHNwZWNpYWxfbG9va3VwKHcsICZQeUlkX19fZXhpdF9fKTsKLSAgICAgICAgICAgIGlmICgheCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICB1ID0gc3BlY2lhbF9sb29rdXAodywgJlB5SWRfX19lbnRlcl9fKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmICghdSkgewotICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3ModSwgTlVMTCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBpZiAoIXgpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeU9iamVjdCAqbWdyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhpdCA9IHNwZWNpYWxfbG9va3VwKG1nciwgJlB5SWRfX19leGl0X18pLCAqZW50ZXI7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzOworICAgICAgICAgICAgaWYgKGV4aXQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgU0VUX1RPUChleGl0KTsKKyAgICAgICAgICAgIGVudGVyID0gc3BlY2lhbF9sb29rdXAobWdyLCAmUHlJZF9fX2VudGVyX18pOworICAgICAgICAgICAgUHlfREVDUkVGKG1ncik7CisgICAgICAgICAgICBpZiAoZW50ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhlbnRlciwgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW50ZXIpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgZmluYWxseSBibG9jayBiZWZvcmUgcHVzaGluZyB0aGUgcmVzdWx0CiAgICAgICAgICAgICAgICBvZiBfX2VudGVyX18gb24gdGhlIHN0YWNrLiAqLwogICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1NldHVwKGYsIFNFVFVQX0ZJTkFMTFksIElOU1RSX09GRlNFVCgpICsgb3BhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfTEVWRUwoKSk7CiAKLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQVVNIKHJlcyk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFdJVEhfQ0xFQU5VUCkKLSAgICAgICAgeworICAgICAgICBUQVJHRVQoV0lUSF9DTEVBTlVQKSB7CiAgICAgICAgICAgICAvKiBBdCB0aGUgdG9wIG9mIHRoZSBzdGFjayBhcmUgMS02IHZhbHVlcyBpbmRpY2F0aW5nCiAgICAgICAgICAgICAgICBob3cvd2h5IHdlIGVudGVyZWQgdGhlIGZpbmFsbHkgY2xhdXNlOgogICAgICAgICAgICAgICAgLSBUT1AgPSBOb25lCkBAIC0yNTk5LDQyICsyNzUxLDQyIEBACiAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICBQeU9iamVjdCAqZXhpdF9mdW5jOwotICAgICAgICAgICAgdSA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKHUgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmV4YyA9IFRPUCgpLCAqdmFsID0gUHlfTm9uZSwgKnRiID0gUHlfTm9uZSwgKnJlczsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoZXhjID09IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICAodm9pZClQT1AoKTsKICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBUT1AoKTsKLSAgICAgICAgICAgICAgICBTRVRfVE9QKHUpOwotICAgICAgICAgICAgICAgIHYgPSB3ID0gUHlfTm9uZTsKKyAgICAgICAgICAgICAgICBTRVRfVE9QKGV4Yyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2sodSkpIHsKLSAgICAgICAgICAgICAgICAodm9pZClQT1AoKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2goUHlMb25nX0FzTG9uZyh1KSkgeworICAgICAgICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKGV4YykpIHsKKyAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChQeUxvbmdfQXNMb25nKGV4YykpIHsKICAgICAgICAgICAgICAgICBjYXNlIFdIWV9SRVRVUk46CiAgICAgICAgICAgICAgICAgY2FzZSBXSFlfQ09OVElOVUU6CiAgICAgICAgICAgICAgICAgICAgIC8qIFJldHZhbCBpbiBUT1AuICovCiAgICAgICAgICAgICAgICAgICAgIGV4aXRfZnVuYyA9IFNFQ09ORCgpOwogICAgICAgICAgICAgICAgICAgICBTRVRfU0VDT05EKFRPUCgpKTsKLSAgICAgICAgICAgICAgICAgICAgU0VUX1RPUCh1KTsKKyAgICAgICAgICAgICAgICAgICAgU0VUX1RPUChleGMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBUT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgU0VUX1RPUCh1KTsKKyAgICAgICAgICAgICAgICAgICAgU0VUX1RPUChleGMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdSA9IHYgPSB3ID0gUHlfTm9uZTsKKyAgICAgICAgICAgICAgICBleGMgPSBQeV9Ob25lOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnRwLCAqZXhjLCAqdGI7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRwMiwgKmV4YzIsICp0YjI7CiAgICAgICAgICAgICAgICAgUHlUcnlCbG9jayAqYmxvY2s7Ci0gICAgICAgICAgICAgICAgdiA9IFNFQ09ORCgpOwotICAgICAgICAgICAgICAgIHcgPSBUSElSRCgpOwotICAgICAgICAgICAgICAgIHRwID0gRk9VUlRIKCk7Ci0gICAgICAgICAgICAgICAgZXhjID0gUEVFSyg1KTsKLSAgICAgICAgICAgICAgICB0YiA9IFBFRUsoNik7CisgICAgICAgICAgICAgICAgdmFsID0gU0VDT05EKCk7CisgICAgICAgICAgICAgICAgdGIgPSBUSElSRCgpOworICAgICAgICAgICAgICAgIHRwMiA9IEZPVVJUSCgpOworICAgICAgICAgICAgICAgIGV4YzIgPSBQRUVLKDUpOworICAgICAgICAgICAgICAgIHRiMiA9IFBFRUsoNik7CiAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gUEVFSyg3KTsKLSAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNywgdGIpOwotICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg2LCBleGMpOwotICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg1LCB0cCk7CisgICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDcsIHRiMik7CisgICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDYsIGV4YzIpOworICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg1LCB0cDIpOwogICAgICAgICAgICAgICAgIC8qIFVOV0lORF9FWENFUFRfSEFORExFUiB3aWxsIHBvcCB0aGlzIG9mZi4gKi8KICAgICAgICAgICAgICAgICBTRVRfRk9VUlRIKE5VTEwpOwogICAgICAgICAgICAgICAgIC8qIFdlIGp1c3Qgc2hpZnRlZCB0aGUgc3RhY2sgZG93biwgc28gd2UgaGF2ZQpAQCAtMjY0NSw1NiArMjc5Nyw1MyBAQAogICAgICAgICAgICAgICAgIGJsb2NrLT5iX2xldmVsLS07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBYWFggTm90IHRoZSBmYXN0ZXN0IHdheSB0byBjYWxsIGl0Li4uICovCi0gICAgICAgICAgICB4ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhleGl0X2Z1bmMsIHUsIHYsIHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZXhpdF9mdW5jLCBleGMsIHZhbCwgdGIsIE5VTEwpOwogICAgICAgICAgICAgUHlfREVDUkVGKGV4aXRfZnVuYyk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBHbyB0byBlcnJvciBleGl0ICovCisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKIAotICAgICAgICAgICAgaWYgKHUgIT0gUHlfTm9uZSkKLSAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoeCk7CisgICAgICAgICAgICBpZiAoZXhjICE9IFB5X05vbmUpCisgICAgICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZXJyID0gMDsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogCiAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgICAgICBicmVhazsgLyogR28gdG8gZXJyb3IgZXhpdCAqLworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgICAgICAvKiBUaGVyZSB3YXMgYW4gZXhjZXB0aW9uIGFuZCBhIFRydWUgcmV0dXJuICovCiAgICAgICAgICAgICAgICAgUFVTSChQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIFdIWV9TSUxFTkNFRCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUFJFRElDVChFTkRfRklOQUxMWSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQ0FMTF9GVU5DVElPTikKLSAgICAgICAgewotICAgICAgICAgICAgUHlPYmplY3QgKipzcDsKKyAgICAgICAgVEFSR0VUKENBTExfRlVOQ1RJT04pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqc3AsICpyZXM7CiAgICAgICAgICAgICBQQ0FMTChQQ0FMTF9BTEwpOwogICAgICAgICAgICAgc3AgPSBzdGFja19wb2ludGVyOwogI2lmZGVmIFdJVEhfVFNDCi0gICAgICAgICAgICB4ID0gY2FsbF9mdW5jdGlvbigmc3AsIG9wYXJnLCAmaW50cjAsICZpbnRyMSk7CisgICAgICAgICAgICByZXMgPSBjYWxsX2Z1bmN0aW9uKCZzcCwgb3BhcmcsICZpbnRyMCwgJmludHIxKTsKICNlbHNlCi0gICAgICAgICAgICB4ID0gY2FsbF9mdW5jdGlvbigmc3AsIG9wYXJnKTsKKyAgICAgICAgICAgIHJlcyA9IGNhbGxfZnVuY3Rpb24oJnNwLCBvcGFyZyk7CiAjZW5kaWYKICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgPSBzcDsKLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0gocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoQ0FMTF9GVU5DVElPTl9WQVIsIF9jYWxsX2Z1bmN0aW9uX3Zhcl9rdykKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChDQUxMX0ZVTkNUSU9OX0tXLCBfY2FsbF9mdW5jdGlvbl92YXJfa3cpCiAgICAgICAgIFRBUkdFVChDQUxMX0ZVTkNUSU9OX1ZBUl9LVykKLSAgICAgICAgX2NhbGxfZnVuY3Rpb25fdmFyX2t3OgotICAgICAgICB7CisgICAgICAgIF9jYWxsX2Z1bmN0aW9uX3Zhcl9rdzogewogICAgICAgICAgICAgaW50IG5hID0gb3BhcmcgJiAweGZmOwogICAgICAgICAgICAgaW50IG5rID0gKG9wYXJnPj44KSAmIDB4ZmY7CiAgICAgICAgICAgICBpbnQgZmxhZ3MgPSAob3Bjb2RlIC0gQ0FMTF9GVU5DVElPTikgJiAzOwogICAgICAgICAgICAgaW50IG4gPSBuYSArIDIgKiBuazsKLSAgICAgICAgICAgIFB5T2JqZWN0ICoqcGZ1bmMsICpmdW5jLCAqKnNwOworICAgICAgICAgICAgUHlPYmplY3QgKipwZnVuYywgKmZ1bmMsICoqc3AsICpyZXM7CiAgICAgICAgICAgICBQQ0FMTChQQ0FMTF9BTEwpOwogICAgICAgICAgICAgaWYgKGZsYWdzICYgQ0FMTF9GTEFHX1ZBUikKICAgICAgICAgICAgICAgICBuKys7CkBAIC0yNzE3LDEzNyArMjg2NiwxNTYgQEAKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CiAgICAgICAgICAgICBzcCA9IHN0YWNrX3BvaW50ZXI7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICB4ID0gZXh0X2RvX2NhbGwoZnVuYywgJnNwLCBmbGFncywgbmEsIG5rKTsKKyAgICAgICAgICAgIHJlcyA9IGV4dF9kb19jYWxsKGZ1bmMsICZzcCwgZmxhZ3MsIG5hLCBuayk7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7CiAgICAgICAgICAgICBzdGFja19wb2ludGVyID0gc3A7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CiAKICAgICAgICAgICAgIHdoaWxlIChzdGFja19wb2ludGVyID4gcGZ1bmMpIHsKLSAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG8pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChNQUtFX0NMT1NVUkUsIF9tYWtlX2Z1bmN0aW9uKQogICAgICAgICBUQVJHRVQoTUFLRV9GVU5DVElPTikKLSAgICAgICAgX21ha2VfZnVuY3Rpb246Ci0gICAgICAgIHsKKyAgICAgICAgX21ha2VfZnVuY3Rpb246IHsKICAgICAgICAgICAgIGludCBwb3NkZWZhdWx0cyA9IG9wYXJnICYgMHhmZjsKICAgICAgICAgICAgIGludCBrd2RlZmF1bHRzID0gKG9wYXJnPj44KSAmIDB4ZmY7CiAgICAgICAgICAgICBpbnQgbnVtX2Fubm90YXRpb25zID0gKG9wYXJnID4+IDE2KSAmIDB4N2ZmZjsKIAotICAgICAgICAgICAgdyA9IFBPUCgpOyAvKiBxdWFsbmFtZSAqLwotICAgICAgICAgICAgdiA9IFBPUCgpOyAvKiBjb2RlIG9iamVjdCAqLwotICAgICAgICAgICAgeCA9IFB5RnVuY3Rpb25fTmV3V2l0aFF1YWxOYW1lKHYsIGYtPmZfZ2xvYmFscywgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVhbG5hbWUgPSBQT1AoKTsgLyogcXVhbG5hbWUgKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb2RlID0gUE9QKCk7IC8qIGNvZGUgb2JqZWN0ICovCisgICAgICAgICAgICBQeU9iamVjdCAqZnVuYyA9IFB5RnVuY3Rpb25fTmV3V2l0aFF1YWxOYW1lKGNvZGUsIGYtPmZfZ2xvYmFscywgcXVhbG5hbWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvZGUpOworICAgICAgICAgICAgUHlfREVDUkVGKHF1YWxuYW1lKTsKIAotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCAmJiBvcGNvZGUgPT0gTUFLRV9DTE9TVVJFKSB7Ci0gICAgICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldENsb3N1cmUoeCwgdikgIT0gMCkgeworICAgICAgICAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBpZiAob3Bjb2RlID09IE1BS0VfQ0xPU1VSRSkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjbG9zdXJlID0gUE9QKCk7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0Q2xvc3VyZShmdW5jLCBjbG9zdXJlKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MgYnl0ZWNvZGUgaXMgY29ycnVwdC4gKi8KLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY2xvc3VyZSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY2xvc3VyZSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYgbnVtX2Fubm90YXRpb25zID4gMCkgeworICAgICAgICAgICAgaWYgKG51bV9hbm5vdGF0aW9ucyA+IDApIHsKICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5hbWVfaXg7Ci0gICAgICAgICAgICAgICAgdSA9IFBPUCgpOyAvKiBuYW1lcyBvZiBhcmdzIHdpdGggYW5ub3RhdGlvbnMgKi8KLSAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X05ldygpOwotICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWVzID0gUE9QKCk7IC8qIG5hbWVzIG9mIGFyZ3Mgd2l0aCBhbm5vdGF0aW9ucyAqLworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphbm5zID0gUHlEaWN0X05ldygpOworICAgICAgICAgICAgICAgIGlmIChhbm5zID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lX2l4ID0gUHlUdXBsZV9TaXplKHUpOworICAgICAgICAgICAgICAgIG5hbWVfaXggPSBQeVR1cGxlX1NpemUobmFtZXMpOwogICAgICAgICAgICAgICAgIGFzc2VydChudW1fYW5ub3RhdGlvbnMgPT0gbmFtZV9peCsxKTsKICAgICAgICAgICAgICAgICB3aGlsZSAobmFtZV9peCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsICp2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgICAgICAgICAgLS1uYW1lX2l4OwotICAgICAgICAgICAgICAgICAgICB0ID0gUHlUdXBsZV9HRVRfSVRFTSh1LCBuYW1lX2l4KTsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICAvKiBYWFgobm5vcndpdHopOiBjaGVjayBmb3IgZXJyb3JzICovCi0gICAgICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHYsIHQsIHcpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKG5hbWVzLCBuYW1lX2l4KTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oYW5ucywgbmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhbm5zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRBbm5vdGF0aW9ucyh4LCB2KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0QW5ub3RhdGlvbnMoZnVuYywgYW5ucykgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCiAgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0QW5ub3RhdGlvbnMgY2hhbmdlcy4gKi8KLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFubnMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFubnMpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lcyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8qIFhYWCBNYXliZSB0aGlzIHNob3VsZCBiZSBhIHNlcGFyYXRlIG9wY29kZT8gKi8KLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYgcG9zZGVmYXVsdHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdiA9IFB5VHVwbGVfTmV3KHBvc2RlZmF1bHRzKTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aGlsZSAoLS1wb3NkZWZhdWx0cyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh2LCBwb3NkZWZhdWx0cywgdyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldERlZmF1bHRzKHgsIHYpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcwotICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldERlZmF1bHRzIGNoYW5nZXMuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYga3dkZWZhdWx0cyA+IDApIHsKLSAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X05ldygpOwotICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoa3dkZWZhdWx0cyA+IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVmcyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVmcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgd2hpbGUgKC0ta3dkZWZhdWx0cyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsgLyogZGVmYXVsdCB2YWx1ZSAqLwotICAgICAgICAgICAgICAgICAgICB1ID0gUE9QKCk7IC8qIGt3IG9ubHkgYXJnIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogY2hlY2sgZm9yIGVycm9ycyAqLwotICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbSh2LCB1LCB3KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7IC8qIGRlZmF1bHQgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IFBPUCgpOyAvKiBrdyBvbmx5IGFyZyBuYW1lICovCisgICAgICAgICAgICAgICAgICAgIGludCBlcnIgPSBQeURpY3RfU2V0SXRlbShkZWZzLCBrZXksIHYpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0S3dEZWZhdWx0cyh4LCB2KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0S3dEZWZhdWx0cyhmdW5jLCBkZWZzKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MKICAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXRLd0RlZmF1bHRzIGNoYW5nZXMuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKHBvc2RlZmF1bHRzID4gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkZWZzID0gUHlUdXBsZV9OZXcocG9zZGVmYXVsdHMpOworICAgICAgICAgICAgICAgIGlmIChkZWZzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAoLS1wb3NkZWZhdWx0cyA+PSAwKQorICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGRlZnMsIHBvc2RlZmF1bHRzLCBQT1AoKSk7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMoZnVuYywgZGVmcykgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCisgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMgY2hhbmdlcy4gKi8KKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBVU0goZnVuYyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJVSUxEX1NMSUNFKQorICAgICAgICBUQVJHRVQoQlVJTERfU0xJQ0UpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdGFydCwgKnN0b3AsICpzdGVwLCAqc2xpY2U7CiAgICAgICAgICAgICBpZiAob3BhcmcgPT0gMykKLSAgICAgICAgICAgICAgICB3ID0gUE9QKCk7CisgICAgICAgICAgICAgICAgc3RlcCA9IFBPUCgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHcgPSBOVUxMOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgdSA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5U2xpY2VfTmV3KHUsIHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgc3RlcCA9IE5VTEw7CisgICAgICAgICAgICBzdG9wID0gUE9QKCk7CisgICAgICAgICAgICBzdGFydCA9IFRPUCgpOworICAgICAgICAgICAgc2xpY2UgPSBQeVNsaWNlX05ldyhzdGFydCwgc3RvcCwgc3RlcCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0b3ApOworICAgICAgICAgICAgUHlfWERFQ1JFRihzdGVwKTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc2xpY2UpOworICAgICAgICAgICAgaWYgKHNsaWNlID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoRVhURU5ERURfQVJHKQorICAgICAgICBUQVJHRVQoRVhURU5ERURfQVJHKSB7CiAgICAgICAgICAgICBvcGNvZGUgPSBORVhUT1AoKTsKICAgICAgICAgICAgIG9wYXJnID0gb3Bhcmc8PDE2IHwgTkVYVEFSRygpOwogICAgICAgICAgICAgZ290byBkaXNwYXRjaF9vcGNvZGU7CisgICAgICAgIH0KIAogI2lmIFVTRV9DT01QVVRFRF9HT1RPUwogICAgICAgICBfdW5rbm93bl9vcGNvZGU6CkBAIC0yODU4LDggKzMwMjYsNyBAQAogICAgICAgICAgICAgICAgIFB5RnJhbWVfR2V0TGluZU51bWJlcihmKSwKICAgICAgICAgICAgICAgICBvcGNvZGUpOwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAidW5rbm93biBvcGNvZGUiKTsKLSAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKICNpZmRlZiBDQVNFX1RPT19CSUcKICAgICAgICAgfQpAQCAtMjg2Nyw3MSArMzAzNCwzNiBAQAogCiAgICAgICAgIH0gLyogc3dpdGNoICovCiAKLSAgICAgICAgb25fZXJyb3I6CisgICAgICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQuIEV2ZXJ5IG9wY29kZSBzaG91bGQgZW5kIHdpdGggRElTUEFUQ0goKQorICAgICAgICAgICBvciBnb3RvIGVycm9yLiAqLworICAgICAgICBhc3NlcnQoMCk7CiAKK2Vycm9yOgogICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnN0MSk7CiAKLSAgICAgICAgLyogUXVpY2tseSBjb250aW51ZSBpZiBubyBlcnJvciBvY2N1cnJlZCAqLworICAgICAgICBhc3NlcnQod2h5ID09IFdIWV9OT1QpOworICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwogCi0gICAgICAgIGlmICh3aHkgPT0gV0hZX05PVCkgewotICAgICAgICAgICAgaWYgKGVyciA9PSAwICYmIHggIT0gTlVMTCkgewotI2lmZGVmIENIRUNLRVhDCi0gICAgICAgICAgICAgICAgLyogVGhpcyBjaGVjayBpcyBleHBlbnNpdmUhICovCi0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgIlhYWCB1bmRldGVjdGVkIGVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChsb29wMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBOb3JtYWwsIGZhc3QgcGF0aCAqLwotI2lmZGVmIENIRUNLRVhDCi0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgeCA9IFB5X05vbmU7Ci0gICAgICAgICAgICBlcnIgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogRG91YmxlLWNoZWNrIGV4Y2VwdGlvbiBzdGF0dXMgKi8KLQotICAgICAgICBpZiAod2h5ID09IFdIWV9FWENFUFRJT04gfHwgd2h5ID09IFdIWV9SRVJBSVNFKSB7Ci0gICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJlcnJvciByZXR1cm4gd2l0aG91dCBleGNlcHRpb24gc2V0Iik7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVmIENIRUNLRVhDCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogVGhpcyBjaGVjayBpcyBleHBlbnNpdmUhICovCi0gICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIGNoYXIgYnVmWzEyOF07Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJTdGFjayB1bndpbmQgd2l0aCBleGNlcHRpb24gIgotICAgICAgICAgICAgICAgICAgICAic2V0IGFuZCB3aHk9JWQiLCB3aHkpOwotICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoYnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAvKiBEb3VibGUtY2hlY2sgZXhjZXB0aW9uIHN0YXR1cy4gKi8KKyNpZmRlZiBOREVCVUcKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciByZXR1cm4gd2l0aG91dCBleGNlcHRpb24gc2V0Iik7CisjZWxzZQorICAgICAgICBhc3NlcnQoUHlFcnJfT2NjdXJyZWQoKSk7CiAjZW5kaWYKIAotICAgICAgICAvKiBMb2cgdHJhY2ViYWNrIGluZm8gaWYgdGhpcyBpcyBhIHJlYWwgZXhjZXB0aW9uICovCisgICAgICAgIC8qIExvZyB0cmFjZWJhY2sgaW5mby4gKi8KKyAgICAgICAgUHlUcmFjZUJhY2tfSGVyZShmKTsKIAotICAgICAgICBpZiAod2h5ID09IFdIWV9FWENFUFRJT04pIHsKLSAgICAgICAgICAgIFB5VHJhY2VCYWNrX0hlcmUoZik7Ci0KLSAgICAgICAgICAgIGlmICh0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgY2FsbF9leGNfdHJhY2UodHN0YXRlLT5jX3RyYWNlZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUtPmNfdHJhY2VvYmosIGYpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogRm9yIHRoZSByZXN0LCB0cmVhdCBXSFlfUkVSQUlTRSBhcyBXSFlfRVhDRVBUSU9OICovCi0KLSAgICAgICAgaWYgKHdoeSA9PSBXSFlfUkVSQUlTRSkKLSAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0KLSAgICAgICAgLyogVW53aW5kIHN0YWNrcyBpZiBhIChwc2V1ZG8pIGV4Y2VwdGlvbiBvY2N1cnJlZCAqLworICAgICAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMKQorICAgICAgICAgICAgY2FsbF9leGNfdHJhY2UodHN0YXRlLT5jX3RyYWNlZnVuYywgdHN0YXRlLT5jX3RyYWNlb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmKTsKIAogZmFzdF9ibG9ja19lbmQ6CisgICAgICAgIGFzc2VydCh3aHkgIT0gV0hZX05PVCk7CisKKyAgICAgICAgLyogVW53aW5kIHN0YWNrcyBpZiBhIChwc2V1ZG8pIGV4Y2VwdGlvbiBvY2N1cnJlZCAqLwogICAgICAgICB3aGlsZSAod2h5ICE9IFdIWV9OT1QgJiYgZi0+Zl9pYmxvY2sgPiAwKSB7CiAgICAgICAgICAgICAvKiBQZWVrIGF0IHRoZSBjdXJyZW50IGJsb2NrLiAqLwogICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9ICZmLT5mX2Jsb2Nrc3RhY2tbZi0+Zl9pYmxvY2sgLSAxXTsKQEAgLTI5NzgsNyArMzExMCwxMCBAQAogICAgICAgICAgICAgICAgICAgIFB5dGhvbiBtYWluIGxvb3AuICovCiAgICAgICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAmZXhjLCAmdmFsLCAmdGIpOwotICAgICAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2YWwsIHRiKTsKKyAgICAgICAgICAgICAgICBpZiAodGIgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHZhbCwgdGIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHZhbCwgUHlfTm9uZSk7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGV4Yyk7CiAgICAgICAgICAgICAgICAgdHN0YXRlLT5leGNfdHlwZSA9IGV4YzsKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodmFsKTsKQEAgLTMwMTAsMTggKzMxNDUsMjMgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBSRUFEX1RJTUVTVEFNUChsb29wMSk7CiAKKyAgICAgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKwogICAgIH0gLyogbWFpbiBsb29wICovCiAKICAgICBhc3NlcnQod2h5ICE9IFdIWV9ZSUVMRCk7CiAgICAgLyogUG9wIHJlbWFpbmluZyBzdGFjayBlbnRyaWVzLiAqLwogICAgIHdoaWxlICghRU1QVFkoKSkgewotICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgIFB5X1hERUNSRUYodik7CisgICAgICAgIFB5T2JqZWN0ICpvID0gUE9QKCk7CisgICAgICAgIFB5X1hERUNSRUYobyk7CiAgICAgfQogCiAgICAgaWYgKHdoeSAhPSBXSFlfUkVUVVJOKQogICAgICAgICByZXR2YWwgPSBOVUxMOwogCisgICAgYXNzZXJ0KChyZXR2YWwgIT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHx8IChyZXR2YWwgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CisKIGZhc3RfeWllbGQ6CiAgICAgaWYgKGNvLT5jb19mbGFncyAmIENPX0dFTkVSQVRPUiAmJiAod2h5ID09IFdIWV9ZSUVMRCB8fCB3aHkgPT0gV0hZX1JFVFVSTikpIHsKICAgICAgICAgLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBibG9jayBpcyB0byBwdXQgYXNpZGUgdGhlIGdlbmVyYXRvcidzIGV4Y2VwdGlvbgpAQCAtMzA0NiwyNiArMzE4NiwyNyBAQAogICAgIGlmICh0c3RhdGUtPnVzZV90cmFjaW5nKSB7CiAgICAgICAgIGlmICh0c3RhdGUtPmNfdHJhY2VmdW5jKSB7CiAgICAgICAgICAgICBpZiAod2h5ID09IFdIWV9SRVRVUk4gfHwgd2h5ID09IFdIWV9ZSUVMRCkgewotICAgICAgICAgICAgICAgIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlb2JqLCBmLAorICAgICAgICAgICAgICAgIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsIHRzdGF0ZS0+Y190cmFjZW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUsIGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUcmFjZV9SRVRVUk4sIHJldHZhbCkpIHsKICAgICAgICAgICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKICAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICh3aHkgPT0gV0hZX0VYQ0VQVElPTikgewotICAgICAgICAgICAgICAgIGNhbGxfdHJhY2VfcHJvdGVjdGVkKHRzdGF0ZS0+Y190cmFjZWZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlb2JqLCBmLAorICAgICAgICAgICAgICAgIGNhbGxfdHJhY2VfcHJvdGVjdGVkKHRzdGF0ZS0+Y190cmFjZWZ1bmMsIHRzdGF0ZS0+Y190cmFjZW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUsIGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUcmFjZV9SRVRVUk4sIE5VTEwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMpIHsKICAgICAgICAgICAgIGlmICh3aHkgPT0gV0hZX0VYQ0VQVElPTikKICAgICAgICAgICAgICAgICBjYWxsX3RyYWNlX3Byb3RlY3RlZCh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosIGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHJhY2VfUkVUVVJOLCBOVUxMKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNhbGxfdHJhY2UodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUtPmNfcHJvZmlsZW9iaiwgZiwKKyAgICAgICAgICAgIGVsc2UgaWYgKGNhbGxfdHJhY2UodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLCB0c3RhdGUtPmNfcHJvZmlsZW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVRyYWNlX1JFVFVSTiwgcmV0dmFsKSkgewogICAgICAgICAgICAgICAgIFB5X0NMRUFSKHJldHZhbCk7CiAgICAgICAgICAgICAgICAgLyogd2h5ID0gV0hZX0VYQ0VQVElPTjsgKi8KQEAgLTMwNzYsNiArMzIxNyw3IEBACiAgICAgLyogcG9wIGZyYW1lICovCiBleGl0X2V2YWxfZnJhbWU6CiAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOwogICAgIHRzdGF0ZS0+ZnJhbWUgPSBmLT5mX2JhY2s7CiAKICAgICByZXR1cm4gcmV0dmFsOwpAQCAtMzI0MSw5ICszMzgzLDkgQEAKICAgICAgICAgICAgUHlPYmplY3QgKipkZWZzLCBpbnQgZGVmY291bnQsIFB5T2JqZWN0ICprd2RlZnMsIFB5T2JqZWN0ICpjbG9zdXJlKQogewogICAgIFB5Q29kZU9iamVjdCogY28gPSAoUHlDb2RlT2JqZWN0KilfY287Ci0gICAgcmVnaXN0ZXIgUHlGcmFtZU9iamVjdCAqZjsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqZnJlZXZhcnM7CisgICAgUHlGcmFtZU9iamVjdCAqZjsKKyAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKKyAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqZnJlZXZhcnM7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBQeU9iamVjdCAqeCwgKnU7CiAgICAgaW50IHRvdGFsX2FyZ3MgPSBjby0+Y29fYXJnY291bnQgKyBjby0+Y29fa3dvbmx5YXJnY291bnQ7CkBAIC0zNTE5LDcgKzM2NjEsNyBAQAogCiAvKiBMb2dpYyBmb3IgdGhlIHJhaXNlIHN0YXRlbWVudCAodG9vIGNvbXBsaWNhdGVkIGZvciBpbmxpbmluZykuCiAgICBUaGlzICpjb25zdW1lcyogYSByZWZlcmVuY2UgY291bnQgdG8gZWFjaCBvZiBpdHMgYXJndW1lbnRzLiAqLwotc3RhdGljIGVudW0gd2h5X2NvZGUKK3N0YXRpYyBpbnQKIGRvX3JhaXNlKFB5T2JqZWN0ICpleGMsIFB5T2JqZWN0ICpjYXVzZSkKIHsKICAgICBQeU9iamVjdCAqdHlwZSA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7CkBAIC0zNTM0LDEzICszNjc2LDEzIEBACiAgICAgICAgIGlmICh0eXBlID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIGFjdGl2ZSBleGNlcHRpb24gdG8gcmVyYWlzZSIpOwotICAgICAgICAgICAgcmV0dXJuIFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBQeV9YSU5DUkVGKHR5cGUpOwogICAgICAgICBQeV9YSU5DUkVGKHZhbHVlKTsKICAgICAgICAgUHlfWElOQ1JFRih0Yik7CiAgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRiKTsKLSAgICAgICAgcmV0dXJuIFdIWV9SRVJBSVNFOworICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKICAgICAvKiBXZSBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgZm9ybXMgb2YgcmFpc2U6CkBAIC0zNjAzLDEzICszNzQ1LDEzIEBACiAgICAgLyogUHlFcnJfU2V0T2JqZWN0IGluY3JlZidzIGl0cyBhcmd1bWVudHMgKi8KICAgICBQeV9YREVDUkVGKHZhbHVlKTsKICAgICBQeV9YREVDUkVGKHR5cGUpOwotICAgIHJldHVybiBXSFlfRVhDRVBUSU9OOworICAgIHJldHVybiAwOwogCiByYWlzZV9lcnJvcjoKICAgICBQeV9YREVDUkVGKHZhbHVlKTsKICAgICBQeV9YREVDUkVGKHR5cGUpOwogICAgIFB5X1hERUNSRUYoY2F1c2UpOwotICAgIHJldHVybiBXSFlfRVhDRVBUSU9OOworICAgIHJldHVybiAwOwogfQogCiAvKiBJdGVyYXRlIHYgYXJnY250IHRpbWVzIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBvbiB0aGUgc3RhY2sgKHZpYSBkZWNyZWFzaW5nCkBAIC0zNzA2LDQwICszODQ4LDQzIEBACiAjZW5kaWYKIAogc3RhdGljIHZvaWQKLWNhbGxfZXhjX3RyYWNlKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqc2VsZiwgUHlGcmFtZU9iamVjdCAqZikKK2NhbGxfZXhjX3RyYWNlKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlGcmFtZU9iamVjdCAqZikKIHsKLSAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrLCAqYXJnOworICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0cmFjZWJhY2ssICpvcmlnX3RyYWNlYmFjaywgKmFyZzsKICAgICBpbnQgZXJyOwotICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOworICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZvcmlnX3RyYWNlYmFjayk7CiAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKICAgICAgICAgdmFsdWUgPSBQeV9Ob25lOwogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgIH0KLSAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7CisgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZ0eXBlLCAmdmFsdWUsICZvcmlnX3RyYWNlYmFjayk7CisgICAgdHJhY2ViYWNrID0gKG9yaWdfdHJhY2ViYWNrICE9IE5VTEwpID8gb3JpZ190cmFjZWJhY2sgOiBQeV9Ob25lOwogICAgIGFyZyA9IFB5VHVwbGVfUGFjaygzLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKICAgICBpZiAoYXJnID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKKyAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgb3JpZ190cmFjZWJhY2spOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGVyciA9IGNhbGxfdHJhY2UoZnVuYywgc2VsZiwgZiwgUHlUcmFjZV9FWENFUFRJT04sIGFyZyk7CisgICAgZXJyID0gY2FsbF90cmFjZShmdW5jLCBzZWxmLCB0c3RhdGUsIGYsIFB5VHJhY2VfRVhDRVBUSU9OLCBhcmcpOwogICAgIFB5X0RFQ1JFRihhcmcpOwogICAgIGlmIChlcnIgPT0gMCkKLSAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKKyAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgb3JpZ190cmFjZWJhY2spOwogICAgIGVsc2UgewogICAgICAgICBQeV9YREVDUkVGKHR5cGUpOwogICAgICAgICBQeV9YREVDUkVGKHZhbHVlKTsKLSAgICAgICAgUHlfWERFQ1JFRih0cmFjZWJhY2spOworICAgICAgICBQeV9YREVDUkVGKG9yaWdfdHJhY2ViYWNrKTsKICAgICB9CiB9CiAKIHN0YXRpYyBpbnQKLWNhbGxfdHJhY2VfcHJvdGVjdGVkKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqb2JqLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKK2NhbGxfdHJhY2VfcHJvdGVjdGVkKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqb2JqLAorICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGludCB3aGF0LCBQeU9iamVjdCAqYXJnKQogewogICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0cmFjZWJhY2s7CiAgICAgaW50IGVycjsKICAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKLSAgICBlcnIgPSBjYWxsX3RyYWNlKGZ1bmMsIG9iaiwgZnJhbWUsIHdoYXQsIGFyZyk7CisgICAgZXJyID0gY2FsbF90cmFjZShmdW5jLCBvYmosIHRzdGF0ZSwgZnJhbWUsIHdoYXQsIGFyZyk7CiAgICAgaWYgKGVyciA9PSAwKQogICAgIHsKICAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKQEAgLTM3NTQsMTAgKzM4OTksMTAgQEAKIH0KIAogc3RhdGljIGludAotY2FsbF90cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwgUHlGcmFtZU9iamVjdCAqZnJhbWUsCitjYWxsX3RyYWNlKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqb2JqLAorICAgICAgICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5RnJhbWVPYmplY3QgKmZyYW1lLAogICAgICAgICAgICBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKLSAgICByZWdpc3RlciBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CiAgICAgaW50IHJlc3VsdDsKICAgICBpZiAodHN0YXRlLT50cmFjaW5nKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM3NzMsOCArMzkxOCw3IEBACiBQeU9iamVjdCAqCiBfUHlFdmFsX0NhbGxUcmFjaW5nKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeUZyYW1lT2JqZWN0ICpmcmFtZSA9IFB5RXZhbF9HZXRGcmFtZSgpOwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IGZyYW1lLT5mX3RzdGF0ZTsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogICAgIGludCBzYXZlX3RyYWNpbmcgPSB0c3RhdGUtPnRyYWNpbmc7CiAgICAgaW50IHNhdmVfdXNlX3RyYWNpbmcgPSB0c3RhdGUtPnVzZV90cmFjaW5nOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CkBAIC0zNzkxLDggKzM5MzUsOCBAQAogLyogU2VlIE9iamVjdHMvbG5vdGFiX25vdGVzLnR4dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiBob3cgdHJhY2luZyB3b3Jrcy4gKi8KIHN0YXRpYyBpbnQKIG1heWJlX2NhbGxfbGluZV90cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwKLSAgICAgICAgICAgICAgICAgICAgICBQeUZyYW1lT2JqZWN0ICpmcmFtZSwgaW50ICppbnN0cl9sYiwgaW50ICppbnN0cl91YiwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKmluc3RyX3ByZXYpCisgICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKmluc3RyX2xiLCBpbnQgKmluc3RyX3ViLCBpbnQgKmluc3RyX3ByZXYpCiB7CiAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgaW50IGxpbmUgPSBmcmFtZS0+Zl9saW5lbm87CkBAIC0zODEyLDcgKzM5NTYsNyBAQAogICAgICAgIG51bWJlciBhbmQgY2FsbCB0aGUgdHJhY2UgZnVuY3Rpb24uICovCiAgICAgaWYgKGZyYW1lLT5mX2xhc3RpID09ICppbnN0cl9sYiB8fCBmcmFtZS0+Zl9sYXN0aSA8ICppbnN0cl9wcmV2KSB7CiAgICAgICAgIGZyYW1lLT5mX2xpbmVubyA9IGxpbmU7Ci0gICAgICAgIHJlc3VsdCA9IGNhbGxfdHJhY2UoZnVuYywgb2JqLCBmcmFtZSwgUHlUcmFjZV9MSU5FLCBQeV9Ob25lKTsKKyAgICAgICAgcmVzdWx0ID0gY2FsbF90cmFjZShmdW5jLCBvYmosIHRzdGF0ZSwgZnJhbWUsIFB5VHJhY2VfTElORSwgUHlfTm9uZSk7CiAgICAgfQogICAgICppbnN0cl9wcmV2ID0gZnJhbWUtPmZfbGFzdGk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM4NjgsOSArNDAxMiwxNSBAQAogUHlFdmFsX0dldExvY2Fscyh2b2lkKQogewogICAgIFB5RnJhbWVPYmplY3QgKmN1cnJlbnRfZnJhbWUgPSBQeUV2YWxfR2V0RnJhbWUoKTsKLSAgICBpZiAoY3VycmVudF9mcmFtZSA9PSBOVUxMKQorICAgIGlmIChjdXJyZW50X2ZyYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiZnJhbWUgZG9lcyBub3QgZXhpc3QiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoY3VycmVudF9mcmFtZSk7CisgICAgfQorCisgICAgaWYgKFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKGN1cnJlbnRfZnJhbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhc3NlcnQoY3VycmVudF9mcmFtZS0+Zl9sb2NhbHMgIT0gTlVMTCk7CiAgICAgcmV0dXJuIGN1cnJlbnRfZnJhbWUtPmZfbG9jYWxzOwogfQogCkBAIC0zODgwLDggKzQwMzAsOSBAQAogICAgIFB5RnJhbWVPYmplY3QgKmN1cnJlbnRfZnJhbWUgPSBQeUV2YWxfR2V0RnJhbWUoKTsKICAgICBpZiAoY3VycmVudF9mcmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBjdXJyZW50X2ZyYW1lLT5mX2dsb2JhbHM7CisKKyAgICBhc3NlcnQoY3VycmVudF9mcmFtZS0+Zl9nbG9iYWxzICE9IE5VTEwpOworICAgIHJldHVybiBjdXJyZW50X2ZyYW1lLT5mX2dsb2JhbHM7CiB9CiAKIFB5RnJhbWVPYmplY3QgKgpAQCAtMzkyMyw2ICs0MDc0LDEzIEBACiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAorI2lmZGVmIFB5X0RFQlVHCisgICAgLyogUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24KKyAgICAgICBzZXQsIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KQorICAgICAgIGFuZCBzbyB0aGUgY2FsbGVyIGxvb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgaWYgKGFyZyA9PSBOVUxMKSB7CiAgICAgICAgIGFyZyA9IFB5VHVwbGVfTmV3KDApOwogICAgICAgICBpZiAoYXJnID09IE5VTEwpCkBAIC0zOTQ1LDYgKzQxMDMsOSBAQAogCiAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbChmdW5jLCBhcmcsIGt3KTsKICAgICBQeV9ERUNSRUYoYXJnKTsKKworICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8IChyZXN1bHQgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzk5MSwxMCArNDE1Miw5IEBACiAKICNkZWZpbmUgQ19UUkFDRSh4LCBjYWxsKSBcCiBpZiAodHN0YXRlLT51c2VfdHJhY2luZyAmJiB0c3RhdGUtPmNfcHJvZmlsZWZ1bmMpIHsgXAotICAgIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y19wcm9maWxlZnVuYywgXAotICAgICAgICB0c3RhdGUtPmNfcHJvZmlsZW9iaiwgXAotICAgICAgICB0c3RhdGUtPmZyYW1lLCBQeVRyYWNlX0NfQ0FMTCwgXAotICAgICAgICBmdW5jKSkgeyBcCisgICAgaWYgKGNhbGxfdHJhY2UodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLCB0c3RhdGUtPmNfcHJvZmlsZW9iaiwgXAorICAgICAgICB0c3RhdGUsIHRzdGF0ZS0+ZnJhbWUsIFwKKyAgICAgICAgUHlUcmFjZV9DX0NBTEwsIGZ1bmMpKSB7IFwKICAgICAgICAgeCA9IE5VTEw7IFwKICAgICB9IFwKICAgICBlbHNlIHsgXApAQCAtNDAwMywxNCArNDE2MywxNCBAQAogICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeyBcCiAgICAgICAgICAgICAgICAgY2FsbF90cmFjZV9wcm90ZWN0ZWQodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLCBcCiAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y19wcm9maWxlb2JqLCBcCi0gICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+ZnJhbWUsIFB5VHJhY2VfQ19FWENFUFRJT04sIFwKLSAgICAgICAgICAgICAgICAgICAgZnVuYyk7IFwKKyAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCB0c3RhdGUtPmZyYW1lLCBcCisgICAgICAgICAgICAgICAgICAgIFB5VHJhY2VfQ19FWENFUFRJT04sIGZ1bmMpOyBcCiAgICAgICAgICAgICAgICAgLyogWFhYIHNob3VsZCBwYXNzICh0eXBlLCB2YWx1ZSwgdGIpICovIFwKICAgICAgICAgICAgIH0gZWxzZSB7IFwKICAgICAgICAgICAgICAgICBpZiAoY2FsbF90cmFjZSh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMsIFwKICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosIFwKLSAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5mcmFtZSwgUHlUcmFjZV9DX1JFVFVSTiwgXAotICAgICAgICAgICAgICAgICAgICBmdW5jKSkgeyBcCisgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgdHN0YXRlLT5mcmFtZSwgXAorICAgICAgICAgICAgICAgICAgICBQeVRyYWNlX0NfUkVUVVJOLCBmdW5jKSkgeyBcCiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsgXAogICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsgXAogICAgICAgICAgICAgICAgIH0gXApAQCAtNDA2MiwxMCArNDIyMiwxNSBAQAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpjYWxsYXJnczsKICAgICAgICAgICAgIGNhbGxhcmdzID0gbG9hZF9hcmdzKHBwX3N0YWNrLCBuYSk7Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIwKTsKLSAgICAgICAgICAgIENfVFJBQ0UoeCwgUHlDRnVuY3Rpb25fQ2FsbChmdW5jLGNhbGxhcmdzLE5VTEwpKTsKLSAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjEpOwotICAgICAgICAgICAgUHlfWERFQ1JFRihjYWxsYXJncyk7CisgICAgICAgICAgICBpZiAoY2FsbGFyZ3MgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjApOworICAgICAgICAgICAgICAgIENfVFJBQ0UoeCwgUHlDRnVuY3Rpb25fQ2FsbChmdW5jLGNhbGxhcmdzLE5VTEwpKTsKKyAgICAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIxKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGNhbGxhcmdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHggPSBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFB5TWV0aG9kX0NoZWNrKGZ1bmMpICYmIFB5TWV0aG9kX0dFVF9TRUxGKGZ1bmMpICE9IE5VTEwpIHsKQEAgLTQwOTAsNiArNDI1NSw4IEBACiAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjEpOwogICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CiAgICAgfQorICAgIGFzc2VydCgoeCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICB8fCAoeCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKIAogICAgIC8qIENsZWFyIHRoZSBzdGFjayBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgQWxzbyByZW1vdmVzCiAgICAgICAgdGhlIGFyZ3VtZW50cyBpbiBjYXNlIHRoZXkgd2VyZW4ndCBjb25zdW1lZCBhbHJlYWR5CkBAIC00MTAwLDYgKzQyNjcsOSBAQAogICAgICAgICBQeV9ERUNSRUYodyk7CiAgICAgICAgIFBDQUxMKFBDQUxMX1BPUCk7CiAgICAgfQorCisgICAgYXNzZXJ0KCh4ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8ICh4ID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOwogICAgIHJldHVybiB4OwogfQogCkBAIC00MzgzLDYgKzQ1NTMsOCBAQAogICAgIFB5X1hERUNSRUYoY2FsbGFyZ3MpOwogICAgIFB5X1hERUNSRUYoa3dkaWN0KTsKICAgICBQeV9YREVDUkVGKHN0YXJhcmcpOworICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8IChyZXN1bHQgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDQyMSw3ICs0NTkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFzZUV4Y2VwdGlvbiBpcyBub3QgYWxsb3dlZCIKIAogc3RhdGljIFB5T2JqZWN0ICoKLWNtcF9vdXRjb21lKGludCBvcCwgcmVnaXN0ZXIgUHlPYmplY3QgKnYsIHJlZ2lzdGVyIFB5T2JqZWN0ICp3KQorY21wX291dGNvbWUoaW50IG9wLCBQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7CiAgICAgaW50IHJlcyA9IDA7CiAgICAgc3dpdGNoIChvcCkgewpAQCAtNDQ3OSw3ICs0NjUxLDcgQEAKIAogICAgIHggPSBQeU9iamVjdF9HZXRBdHRyKHYsIG5hbWUpOwogICAgIGlmICh4ID09IE5VTEwgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLCAiY2Fubm90IGltcG9ydCBuYW1lICVTIiwgbmFtZSk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbXBvcnRFcnJvciwgImNhbm5vdCBpbXBvcnQgbmFtZSAlUiIsIG5hbWUpOwogICAgIH0KICAgICByZXR1cm4geDsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9jb2RlY3MuYyBiL1B5dGhvbi9jb2RlY3MuYwppbmRleCBmZDY3ZDFiLi5lMDZkNmUwIDEwMDY0NAotLS0gYS9QeXRob24vY29kZWNzLmMKKysrIGIvUHl0aG9uL2NvZGVjcy5jCkBAIC01Myw3ICs1Myw3IEBACiBzdGF0aWMKIFB5T2JqZWN0ICpub3JtYWxpemVzdHJpbmcoY29uc3QgY2hhciAqc3RyaW5nKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOworICAgIHNpemVfdCBpOwogICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyaW5nKTsKICAgICBjaGFyICpwOwogICAgIFB5T2JqZWN0ICp2OwpAQCAtNjUsOSArNjUsOSBAQAogCiAgICAgcCA9IFB5TWVtX01hbGxvYyhsZW4gKyAxKTsKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgY2ggPSBzdHJpbmdbaV07CisgICAgICAgIGNoYXIgY2ggPSBzdHJpbmdbaV07CiAgICAgICAgIGlmIChjaCA9PSAnICcpCiAgICAgICAgICAgICBjaCA9ICctJzsKICAgICAgICAgZWxzZQpAQCAtMjQzLDIwICsyNDMsMTUgQEAKICAgICByZXR1cm4gdjsKIH0KIAotLyogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBpbmNyZW1lbnRhbCBjb2RlYy4gKi8KLQorLyogSGVscGVyIGZ1bmN0aW9ucyB0byBjcmVhdGUgYW4gaW5jcmVtZW50YWwgY29kZWMuICovCiBzdGF0aWMKLVB5T2JqZWN0ICpjb2RlY19nZXRpbmNyZW1lbnRhbGNvZGVjKGNvbnN0IGNoYXIgKmVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXR0cm5hbWUpCitQeU9iamVjdCAqY29kZWNfbWFrZWluY3JlbWVudGFsY29kZWMoUHlPYmplY3QgKmNvZGVjX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF0dHJuYW1lKQogewotICAgIFB5T2JqZWN0ICpjb2RlY3MsICpyZXQsICppbmNjb2RlYzsKKyAgICBQeU9iamVjdCAqcmV0LCAqaW5jY29kZWM7CiAKLSAgICBjb2RlY3MgPSBfUHlDb2RlY19Mb29rdXAoZW5jb2RpbmcpOwotICAgIGlmIChjb2RlY3MgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaW5jY29kZWMgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvZGVjcywgYXR0cm5hbWUpOwotICAgIFB5X0RFQ1JFRihjb2RlY3MpOworICAgIGluY2NvZGVjID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb2RlY19pbmZvLCBhdHRybmFtZSk7CiAgICAgaWYgKGluY2NvZGVjID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChlcnJvcnMpCkBAIC0yNjcsNiArMjYyLDIxIEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAorc3RhdGljCitQeU9iamVjdCAqY29kZWNfZ2V0aW5jcmVtZW50YWxjb2RlYyhjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmF0dHJuYW1lKQoreworICAgIFB5T2JqZWN0ICpjb2RlY19pbmZvLCAqcmV0OworCisgICAgY29kZWNfaW5mbyA9IF9QeUNvZGVjX0xvb2t1cChlbmNvZGluZyk7CisgICAgaWYgKGNvZGVjX2luZm8gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0ID0gY29kZWNfbWFrZWluY3JlbWVudGFsY29kZWMoY29kZWNfaW5mbywgZXJyb3JzLCBhdHRybmFtZSk7CisgICAgUHlfREVDUkVGKGNvZGVjX2luZm8pOworICAgIHJldHVybiByZXQ7Cit9CisKIC8qIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBzdHJlYW0gY29kZWMuICovCiAKIHN0YXRpYwpAQCAtMjkwLDYgKzMwMCwyNCBAQAogICAgIHJldHVybiBzdHJlYW1jb2RlYzsKIH0KIAorLyogSGVscGVycyB0byB3b3JrIHdpdGggdGhlIHJlc3VsdCBvZiBfUHlDb2RlY19Mb29rdXAKKworICovCitQeU9iamVjdCAqX1B5Q29kZWNJbmZvX0dldEluY3JlbWVudGFsRGVjb2RlcihQeU9iamVjdCAqY29kZWNfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKK3sKKyAgICByZXR1cm4gY29kZWNfbWFrZWluY3JlbWVudGFsY29kZWMoY29kZWNfaW5mbywgZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jcmVtZW50YWxkZWNvZGVyIik7Cit9CisKK1B5T2JqZWN0ICpfUHlDb2RlY0luZm9fR2V0SW5jcmVtZW50YWxFbmNvZGVyKFB5T2JqZWN0ICpjb2RlY19pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQoreworICAgIHJldHVybiBjb2RlY19tYWtlaW5jcmVtZW50YWxjb2RlYyhjb2RlY19pbmZvLCBlcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNyZW1lbnRhbGVuY29kZXIiKTsKK30KKworCiAvKiBDb252ZW5pZW5jZSBBUElzIHRvIHF1ZXJ5IHRoZSBDb2RlYyByZWdpc3RyeS4KIAogICAgQWxsIEFQSXMgcmV0dXJuIGEgY29kZWMgb2JqZWN0IHdpdGggaW5jcmVtZW50ZWQgcmVmY291bnQuCkBAIC0zMzIsMzAgKzM2MCw0NSBAQAogICAgIHJldHVybiBjb2RlY19nZXRzdHJlYW1jb2RlYyhlbmNvZGluZywgc3RyZWFtLCBlcnJvcnMsIDMpOwogfQogCisvKiBIZWxwZXIgdGhhdCB0cmllcyB0byBlbnN1cmUgdGhlIHJlcG9ydGVkIGV4Y2VwdGlvbiBjaGFpbiBpbmRpY2F0ZXMgdGhlCisgKiBjb2RlYyB0aGF0IHdhcyBpbnZva2VkIHRvIHRyaWdnZXIgdGhlIGZhaWx1cmUgd2l0aG91dCBjaGFuZ2luZyB0aGUgdHlwZQorICogb2YgdGhlIGV4Y2VwdGlvbiByYWlzZWQuCisgKi8KK3N0YXRpYyB2b2lkCit3cmFwX2NvZGVjX2Vycm9yKGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisgICAgLyogVHJ5U2V0RnJvbUNhdXNlIHdpbGwgcmVwbGFjZSB0aGUgYWN0aXZlIGV4Y2VwdGlvbiB3aXRoIGEgc3VpdGFibHkKKyAgICAgKiB1cGRhdGVkIGNsb25lIGlmIGl0IGNhbiwgb3RoZXJ3aXNlIGl0IHdpbGwgbGVhdmUgdGhlIG9yaWdpbmFsCisgICAgICogZXhjZXB0aW9uIGFsb25lLgorICAgICAqLworICAgIF9QeUVycl9UcnlTZXRGcm9tQ2F1c2UoIiVzIHdpdGggJyVzJyBjb2RlYyBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLCBlbmNvZGluZyk7Cit9CisKIC8qIEVuY29kZSBhbiBvYmplY3QgKGUuZy4gYW4gVW5pY29kZSBvYmplY3QpIHVzaW5nIHRoZSBnaXZlbiBlbmNvZGluZwogICAgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGVuY29kZWQgb2JqZWN0ICh1c3VhbGx5IGEgUHl0aG9uIHN0cmluZykuCiAKICAgIGVycm9ycyBpcyBwYXNzZWQgdG8gdGhlIGVuY29kZXIgZmFjdG9yeSBhcyBhcmd1bWVudCBpZiBub24tTlVMTC4gKi8KIAotUHlPYmplY3QgKlB5Q29kZWNfRW5jb2RlKFB5T2JqZWN0ICpvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorc3RhdGljIFB5T2JqZWN0ICoKK19QeUNvZGVjX0VuY29kZUludGVybmFsKFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewotICAgIFB5T2JqZWN0ICplbmNvZGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICpyZXN1bHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICp2ID0gTlVMTDsKIAotICAgIGVuY29kZXIgPSBQeUNvZGVjX0VuY29kZXIoZW5jb2RpbmcpOwotICAgIGlmIChlbmNvZGVyID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQogICAgIGFyZ3MgPSBhcmdzX3R1cGxlKG9iamVjdCwgZXJyb3JzKTsKICAgICBpZiAoYXJncyA9PSBOVUxMKQogICAgICAgICBnb3RvIG9uRXJyb3I7CiAKICAgICByZXN1bHQgPSBQeUV2YWxfQ2FsbE9iamVjdChlbmNvZGVyLCBhcmdzKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHdyYXBfY29kZWNfZXJyb3IoImVuY29kaW5nIiwgZW5jb2RpbmcpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQogCiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKHJlc3VsdCkgfHwKICAgICAgICAgUHlUdXBsZV9HRVRfU0laRShyZXN1bHQpICE9IDIpIHsKQEAgLTM4NCwyNSArNDI3LDI0IEBACiAKICAgIGVycm9ycyBpcyBwYXNzZWQgdG8gdGhlIGRlY29kZXIgZmFjdG9yeSBhcyBhcmd1bWVudCBpZiBub24tTlVMTC4gKi8KIAotUHlPYmplY3QgKlB5Q29kZWNfRGVjb2RlKFB5T2JqZWN0ICpvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorc3RhdGljIFB5T2JqZWN0ICoKK19QeUNvZGVjX0RlY29kZUludGVybmFsKFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewotICAgIFB5T2JqZWN0ICpkZWNvZGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICpyZXN1bHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICp2OwogCi0gICAgZGVjb2RlciA9IFB5Q29kZWNfRGVjb2RlcihlbmNvZGluZyk7Ci0gICAgaWYgKGRlY29kZXIgPT0gTlVMTCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgYXJncyA9IGFyZ3NfdHVwbGUob2JqZWN0LCBlcnJvcnMpOwogICAgIGlmIChhcmdzID09IE5VTEwpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKIAogICAgIHJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGRlY29kZXIsYXJncyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICB3cmFwX2NvZGVjX2Vycm9yKCJkZWNvZGluZyIsIGVuY29kaW5nKTsKICAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KICAgICBpZiAoIVB5VHVwbGVfQ2hlY2socmVzdWx0KSB8fAogICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHJlc3VsdCkgIT0gMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtNDI1LDYgKzQ2NywxMzIgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLyogR2VuZXJpYyBlbmNvZGluZy9kZWNvZGluZyBBUEkgKi8KK1B5T2JqZWN0ICpQeUNvZGVjX0VuY29kZShQeU9iamVjdCAqb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKK3sKKyAgICBQeU9iamVjdCAqZW5jb2RlcjsKKworICAgIGVuY29kZXIgPSBQeUNvZGVjX0VuY29kZXIoZW5jb2RpbmcpOworICAgIGlmIChlbmNvZGVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIF9QeUNvZGVjX0VuY29kZUludGVybmFsKG9iamVjdCwgZW5jb2RlciwgZW5jb2RpbmcsIGVycm9ycyk7Cit9CisKK1B5T2JqZWN0ICpQeUNvZGVjX0RlY29kZShQeU9iamVjdCAqb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKK3sKKyAgICBQeU9iamVjdCAqZGVjb2RlcjsKKworICAgIGRlY29kZXIgPSBQeUNvZGVjX0RlY29kZXIoZW5jb2RpbmcpOworICAgIGlmIChkZWNvZGVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIF9QeUNvZGVjX0RlY29kZUludGVybmFsKG9iamVjdCwgZGVjb2RlciwgZW5jb2RpbmcsIGVycm9ycyk7Cit9CisKKy8qIFRleHQgZW5jb2RpbmcvZGVjb2RpbmcgQVBJICovCitQeU9iamVjdCAqIF9QeUNvZGVjX0xvb2t1cFRleHRFbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFsdGVybmF0ZV9jb21tYW5kKQoreworICAgIF9QeV9JREVOVElGSUVSKF9pc190ZXh0X2VuY29kaW5nKTsKKyAgICBQeU9iamVjdCAqY29kZWM7CisgICAgUHlPYmplY3QgKmF0dHI7CisgICAgaW50IGlzX3RleHRfY29kZWM7CisKKyAgICBjb2RlYyA9IF9QeUNvZGVjX0xvb2t1cChlbmNvZGluZyk7CisgICAgaWYgKGNvZGVjID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHk6IGFzc3VtZSBhbnkgcmF3IHR1cGxlIGRlc2NyaWJlcyBhIHRleHQKKyAgICAgKiBlbmNvZGluZywgYW5kIHRoZSBzYW1lIGZvciBhbnl0aGluZyBsYWNraW5nIHRoZSBwcml2YXRlCisgICAgICogYXR0cmlidXRlLgorICAgICAqLworICAgIGlmICghUHlUdXBsZV9DaGVja0V4YWN0KGNvZGVjKSkgeworICAgICAgICBhdHRyID0gX1B5T2JqZWN0X0dldEF0dHJJZChjb2RlYywgJlB5SWRfX2lzX3RleHRfZW5jb2RpbmcpOworICAgICAgICBpZiAoYXR0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29kZWMpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXNfdGV4dF9jb2RlYyA9IFB5T2JqZWN0X0lzVHJ1ZShhdHRyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyKTsKKyAgICAgICAgICAgIGlmICghaXNfdGV4dF9jb2RlYykgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb2RlYyk7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0xvb2t1cEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyUuNDAwcycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlICVzIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsIGFsdGVybmF0ZV9jb21tYW5kKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFRoaXMgYXBwZWFycyB0byBiZSBhIHZhbGlkIHRleHQgZW5jb2RpbmcgKi8KKyAgICByZXR1cm4gY29kZWM7Cit9CisKKworc3RhdGljCitQeU9iamVjdCAqY29kZWNfZ2V0aXRlbV9jaGVja2VkKGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphbHRlcm5hdGVfY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4KQoreworICAgIFB5T2JqZWN0ICpjb2RlYzsKKyAgICBQeU9iamVjdCAqdjsKKworICAgIGNvZGVjID0gX1B5Q29kZWNfTG9va3VwVGV4dEVuY29kaW5nKGVuY29kaW5nLCBhbHRlcm5hdGVfY29tbWFuZCk7CisgICAgaWYgKGNvZGVjID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdiA9IFB5VHVwbGVfR0VUX0lURU0oY29kZWMsIGluZGV4KTsKKyAgICBQeV9JTkNSRUYodik7CisgICAgUHlfREVDUkVGKGNvZGVjKTsKKyAgICByZXR1cm4gdjsKK30KKworc3RhdGljIFB5T2JqZWN0ICogX1B5Q29kZWNfVGV4dEVuY29kZXIoY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisgICAgcmV0dXJuIGNvZGVjX2dldGl0ZW1fY2hlY2tlZChlbmNvZGluZywgImNvZGVjcy5lbmNvZGUoKSIsIDApOworfQorCitzdGF0aWMgUHlPYmplY3QgKiBfUHlDb2RlY19UZXh0RGVjb2Rlcihjb25zdCBjaGFyICplbmNvZGluZykKK3sKKyAgICByZXR1cm4gY29kZWNfZ2V0aXRlbV9jaGVja2VkKGVuY29kaW5nLCAiY29kZWNzLmRlY29kZSgpIiwgMSk7Cit9CisKK1B5T2JqZWN0ICpfUHlDb2RlY19FbmNvZGVUZXh0KFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKK3sKKyAgICBQeU9iamVjdCAqZW5jb2RlcjsKKworICAgIGVuY29kZXIgPSBfUHlDb2RlY19UZXh0RW5jb2RlcihlbmNvZGluZyk7CisgICAgaWYgKGVuY29kZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX1B5Q29kZWNfRW5jb2RlSW50ZXJuYWwob2JqZWN0LCBlbmNvZGVyLCBlbmNvZGluZywgZXJyb3JzKTsKK30KKworUHlPYmplY3QgKl9QeUNvZGVjX0RlY29kZVRleHQoUHlPYmplY3QgKm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQoreworICAgIFB5T2JqZWN0ICpkZWNvZGVyOworCisgICAgZGVjb2RlciA9IF9QeUNvZGVjX1RleHREZWNvZGVyKGVuY29kaW5nKTsKKyAgICBpZiAoZGVjb2RlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBfUHlDb2RlY19EZWNvZGVJbnRlcm5hbChvYmplY3QsIGRlY29kZXIsIGVuY29kaW5nLCBlcnJvcnMpOworfQorCiAvKiBSZWdpc3RlciB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gZXJyb3IgdW5kZXIgdGhlIG5hbWUKICAgIG5hbWUuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGNvZGVjIHdoZW4gaXQgZW5jb3VudGVycwogICAgYW4gdW5lbmNvZGFibGUgY2hhcmFjdGVycy91bmRlY29kYWJsZSBieXRlcyBhbmQgZG9lc24ndCBrbm93IHRoZQpAQCAtNDQxLDcgKzYwOSw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgcmV0dXJuIFB5RGljdF9TZXRJdGVtU3RyaW5nKGludGVycC0+Y29kZWNfZXJyb3JfcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopbmFtZSwgZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBlcnJvcik7CiB9CiAKIC8qIExvb2t1cCB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB1bmRlciB0aGUKQEAgLTQ1Nyw3ICs2MjUsNyBAQAogCiAgICAgaWYgKG5hbWU9PU5VTEwpCiAgICAgICAgIG5hbWUgPSAic3RyaWN0IjsKLSAgICBoYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSwgKGNoYXIgKiluYW1lKTsKKyAgICBoYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSwgbmFtZSk7CiAgICAgaWYgKCFoYW5kbGVyKQogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTG9va3VwRXJyb3IsICJ1bmtub3duIGVycm9yIGhhbmRsZXIgbmFtZSAnJS40MDBzJyIsIG5hbWUpOwogICAgIGVsc2UKQEAgLTczMyw2ICs5MDEsNjUgQEAKICAgICB9CiB9CiAKKyNkZWZpbmUgRU5DX1VURjggICAgICAgIDAKKyNkZWZpbmUgRU5DX1VURjE2QkUgICAgIDEKKyNkZWZpbmUgRU5DX1VURjE2TEUgICAgIDIKKyNkZWZpbmUgRU5DX1VURjMyQkUgICAgIDMKKyNkZWZpbmUgRU5DX1VURjMyTEUgICAgIDQKKworc3RhdGljIGludAorZ2V0X3N0YW5kYXJkX2VuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBpbnQgKmJ5dGVsZW5ndGgpCit7CisgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICd1JyAmJgorICAgICAgICBQeV9UT0xPV0VSKGVuY29kaW5nWzFdKSA9PSAndCcgJiYKKyAgICAgICAgUHlfVE9MT1dFUihlbmNvZGluZ1syXSkgPT0gJ2YnKSB7CisgICAgICAgIGVuY29kaW5nICs9IDM7CisgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJy0nIHx8ICplbmNvZGluZyA9PSAnXycgKQorICAgICAgICAgICAgZW5jb2RpbmcrKzsKKyAgICAgICAgaWYgKGVuY29kaW5nWzBdID09ICcxJyAmJiBlbmNvZGluZ1sxXSA9PSAnNicpIHsKKyAgICAgICAgICAgIGVuY29kaW5nICs9IDI7CisgICAgICAgICAgICAqYnl0ZWxlbmd0aCA9IDI7CisgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICdcMCcpIHsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjE2QkU7CisjZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZMRTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCplbmNvZGluZyA9PSAnLScgfHwgKmVuY29kaW5nID09ICdfJyApCisgICAgICAgICAgICAgICAgZW5jb2RpbmcrKzsKKyAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzFdKSA9PSAnZScgJiYgZW5jb2RpbmdbMl0gPT0gJ1wwJykgeworICAgICAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAnYicpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZCRTsKKyAgICAgICAgICAgICAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1swXSkgPT0gJ2wnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjE2TEU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZW5jb2RpbmdbMF0gPT0gJzMnICYmIGVuY29kaW5nWzFdID09ICcyJykgeworICAgICAgICAgICAgZW5jb2RpbmcgKz0gMjsKKyAgICAgICAgICAgICpieXRlbGVuZ3RoID0gNDsKKyAgICAgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJ1wwJykgeworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMzJCRTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkxFOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICctJyB8fCAqZW5jb2RpbmcgPT0gJ18nICkKKyAgICAgICAgICAgICAgICBlbmNvZGluZysrOworICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMV0pID09ICdlJyAmJiBlbmNvZGluZ1syXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICdiJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkJFOworICAgICAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAnbCcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMzJMRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvKiB1dGYtOCAqLworICAgICpieXRlbGVuZ3RoID0gMzsKKyAgICByZXR1cm4gRU5DX1VURjg7Cit9CisKIC8qIFRoaXMgaGFuZGxlciBpcyBkZWNsYXJlZCBzdGF0aWMgdW50aWwgc29tZW9uZSBkZW1vbnN0cmF0ZXMKICAgIGEgbmVlZCB0byBjYWxsIGl0IGRpcmVjdGx5LiAqLwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTc0MCwzNyArOTY3LDc3IEBACiB7CiAgICAgUHlPYmplY3QgKnJlc3R1cGxlOwogICAgIFB5T2JqZWN0ICpvYmplY3Q7CisgICAgUHlPYmplY3QgKmVuY29kZTsKKyAgICBjaGFyICplbmNvZGluZzsKKyAgICBpbnQgY29kZTsKKyAgICBpbnQgYnl0ZWxlbmd0aDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBzdGFydDsKICAgICBQeV9zc2l6ZV90IGVuZDsKICAgICBQeU9iamVjdCAqcmVzOwogICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgewotICAgICAgICBjaGFyICpvdXRwOworICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwOwogICAgICAgICBpZiAoUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQoZXhjLCAmc3RhcnQpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmIChQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQoZXhjLCAmZW5kKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoIShvYmplY3QgPSBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QoZXhjKSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAzKihlbmQtc3RhcnQpKTsKKyAgICAgICAgaWYgKCEoZW5jb2RlID0gUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcoZXhjKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEoZW5jb2RpbmcgPSBQeVVuaWNvZGVfQXNVVEY4KGVuY29kZSkpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgY29kZSA9IGdldF9zdGFuZGFyZF9lbmNvZGluZyhlbmNvZGluZywgJmJ5dGVsZW5ndGgpOworICAgICAgICBQeV9ERUNSRUYoZW5jb2RlKTsKKworICAgICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ5dGVsZW5ndGgqKGVuZC1zdGFydCkpOwogICAgICAgICBpZiAoIXJlcykgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBvdXRwID0gUHlCeXRlc19Bc1N0cmluZyhyZXMpOworICAgICAgICBvdXRwID0gKHVuc2lnbmVkIGNoYXIqKVB5Qnl0ZXNfQXNTdHJpbmcocmVzKTsKICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgICAgICAgLyogb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgInJlYWR5IiAqLwogICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIob2JqZWN0LCBpKTsKLSAgICAgICAgICAgIGlmIChjaCA8IDB4ZDgwMCB8fCBjaCA+IDB4ZGZmZikgeworICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpIHsKICAgICAgICAgICAgICAgICAvKiBOb3QgYSBzdXJyb2dhdGUsIGZhaWwgd2l0aCBvcmlnaW5hbCBleGNlcHRpb24gKi8KICAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNlcHRpb25JbnN0YW5jZV9DbGFzcyhleGMpLCBleGMpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgKm91dHArKyA9IChjaGFyKSgweGUwIHwgKGNoID4+IDEyKSk7Ci0gICAgICAgICAgICAqb3V0cCsrID0gKGNoYXIpKDB4ODAgfCAoKGNoID4+IDYpICYgMHgzZikpOwotICAgICAgICAgICAgKm91dHArKyA9IChjaGFyKSgweDgwIHwgKGNoICYgMHgzZikpOworICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEY4OgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoMHhlMCB8IChjaCA+PiAxMikpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoMHg4MCB8ICgoY2ggPj4gNikgJiAweDNmKSk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSgweDgwIHwgKGNoICYgMHgzZikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMTZMRToKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpIGNoOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gOCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYxNkJFOgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gOCk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSBjaDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjMyTEU6CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSBjaDsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gMTYpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gMjQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMzJCRToKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDI0KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDE2KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikgY2g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmVzdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCIoT24pIiwgcmVzLCBlbmQpOwogICAgICAgICBQeV9ERUNSRUYocmVzKTsKQEAgLTc4MiwzNCArMTA0OSw2NCBAQAogICAgICAgICBQeV9VQ1M0IGNoID0gMDsKICAgICAgICAgaWYgKFB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0KGV4YywgJnN0YXJ0KSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kKGV4YywgJmVuZCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKCEob2JqZWN0ID0gUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0KGV4YykpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmICghKHAgPSAodW5zaWduZWQgY2hhciopUHlCeXRlc19Bc1N0cmluZyhvYmplY3QpKSkgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAoIShlbmNvZGUgPSBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZyhleGMpKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShlbmNvZGluZyA9IFB5VW5pY29kZV9Bc1VURjgoZW5jb2RlKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBjb2RlID0gZ2V0X3N0YW5kYXJkX2VuY29kaW5nKGVuY29kaW5nLCAmYnl0ZWxlbmd0aCk7CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworCiAgICAgICAgIC8qIFRyeSBkZWNvZGluZyBhIHNpbmdsZSBzdXJyb2dhdGUgY2hhcmFjdGVyLiBJZgogICAgICAgICAgICB0aGVyZSBhcmUgbW9yZSwgbGV0IHRoZSBjb2RlYyBjYWxsIHVzIGFnYWluLiAqLwogICAgICAgICBwICs9IHN0YXJ0OwotICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShvYmplY3QpIC0gc3RhcnQgPj0gMyAmJgotICAgICAgICAgICAgKHBbMF0gJiAweGYwKSA9PSAweGUwICYmCi0gICAgICAgICAgICAocFsxXSAmIDB4YzApID09IDB4ODAgJiYKLSAgICAgICAgICAgIChwWzJdICYgMHhjMCkgPT0gMHg4MCkgewotICAgICAgICAgICAgLyogaXQncyBhIHRocmVlLWJ5dGUgY29kZSAqLwotICAgICAgICAgICAgY2ggPSAoKHBbMF0gJiAweDBmKSA8PCAxMikgKyAoKHBbMV0gJiAweDNmKSA8PCA2KSArIChwWzJdICYgMHgzZik7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweGQ4MDAgfHwgY2ggPiAweGRmZmYpCi0gICAgICAgICAgICAgICAgLyogaXQncyBub3QgYSBzdXJyb2dhdGUgLSBmYWlsICovCi0gICAgICAgICAgICAgICAgY2ggPSAwOworICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShvYmplY3QpIC0gc3RhcnQgPj0gYnl0ZWxlbmd0aCkgeworICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEY4OgorICAgICAgICAgICAgICAgIGlmICgocFswXSAmIDB4ZjApID09IDB4ZTAgJiYKKyAgICAgICAgICAgICAgICAgICAgKHBbMV0gJiAweGMwKSA9PSAweDgwICYmCisgICAgICAgICAgICAgICAgICAgIChwWzJdICYgMHhjMCkgPT0gMHg4MCkgeworICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgdGhyZWUtYnl0ZSBjb2RlICovCisgICAgICAgICAgICAgICAgICAgIGNoID0gKChwWzBdICYgMHgwZikgPDwgMTIpICsgKChwWzFdICYgMHgzZikgPDwgNikgKyAocFsyXSAmIDB4M2YpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjE2TEU6CisgICAgICAgICAgICAgICAgY2ggPSBwWzFdIDw8IDggfCBwWzBdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMTZCRToKKyAgICAgICAgICAgICAgICBjaCA9IHBbMF0gPDwgOCB8IHBbMV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYzMkxFOgorICAgICAgICAgICAgICAgIGNoID0gKHBbM10gPDwgMjQpIHwgKHBbMl0gPDwgMTYpIHwgKHBbMV0gPDwgOCkgfCBwWzBdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMzJCRToKKyAgICAgICAgICAgICAgICBjaCA9IChwWzBdIDw8IDI0KSB8IChwWzFdIDw8IDE2KSB8IChwWzJdIDw8IDgpIHwgcFszXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwotICAgICAgICBpZiAoY2ggPT0gMCkgeworICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgeworICAgICAgICAgICAgLyogaXQncyBub3QgYSBzdXJyb2dhdGUgLSBmYWlsICovCiAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNlcHRpb25JbnN0YW5jZV9DbGFzcyhleGMpLCBleGMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKGNoKTsKICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTm4pIiwgcmVzLCBzdGFydCszKTsKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihObikiLCByZXMsIHN0YXJ0ICsgYnl0ZWxlbmd0aCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB3cm9uZ19leGNlcHRpb25fdHlwZShleGMpOwpAQCAtMTAyNiw3ICsxMzIzLDcgQEAKIAogICAgIGlmIChpbnRlcnAtPmNvZGVjX2Vycm9yX3JlZ2lzdHJ5KSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeV9BUlJBWV9MRU5HVEgobWV0aG9kcyk7ICsraSkgewotICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcoJm1ldGhvZHNbaV0uZGVmLCBOVUxMKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgoJm1ldGhvZHNbaV0uZGVmLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICBpZiAoIWZ1bmMpCiAgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiY2FuJ3QgaW5pdGlhbGl6ZSBjb2RlYyBlcnJvciByZWdpc3RyeSIpOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvbXBpbGUuYyBiL1B5dGhvbi9jb21waWxlLmMKaW5kZXggNmQ2NjI1NS4uYTdkZGM1YSAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvbXBpbGUuYworKysgYi9QeXRob24vY29tcGlsZS5jCkBAIC05NCw2ICs5NCw3IEBACiAgICAgQ09NUElMRVJfU0NPUEVfTU9EVUxFLAogICAgIENPTVBJTEVSX1NDT1BFX0NMQVNTLAogICAgIENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OLAorICAgIENPTVBJTEVSX1NDT1BFX0xBTUJEQSwKICAgICBDT01QSUxFUl9TQ09QRV9DT01QUkVIRU5TSU9OLAogfTsKIApAQCAtMTE5LDggKzEyMCw4IEBACiAKICAgICBQeU9iamVjdCAqdV9wcml2YXRlOyAgICAgICAgLyogZm9yIHByaXZhdGUgbmFtZSBtYW5nbGluZyAqLwogCi0gICAgaW50IHVfYXJnY291bnQ7ICAgICAgICAvKiBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBibG9jayAqLwotICAgIGludCB1X2t3b25seWFyZ2NvdW50OyAvKiBudW1iZXIgb2Yga2V5d29yZCBvbmx5IGFyZ3VtZW50cyBmb3IgYmxvY2sgKi8KKyAgICBQeV9zc2l6ZV90IHVfYXJnY291bnQ7ICAgICAgICAvKiBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBibG9jayAqLworICAgIFB5X3NzaXplX3QgdV9rd29ubHlhcmdjb3VudDsgLyogbnVtYmVyIG9mIGtleXdvcmQgb25seSBhcmd1bWVudHMgZm9yIGJsb2NrICovCiAgICAgLyogUG9pbnRlciB0byB0aGUgbW9zdCByZWNlbnRseSBhbGxvY2F0ZWQgYmxvY2suICBCeSBmb2xsb3dpbmcgYl9saXN0CiAgICAgICAgbWVtYmVycywgeW91IGNhbiByZWFjaCBhbGwgZWFybHkgYWxsb2NhdGVkIGJsb2Nrcy4gKi8KICAgICBiYXNpY2Jsb2NrICp1X2Jsb2NrczsKQEAgLTE0OSw4ICsxNTAsNyBAQAogKi8KIAogc3RydWN0IGNvbXBpbGVyIHsKLSAgICBjb25zdCBjaGFyICpjX2ZpbGVuYW1lOwotICAgIFB5T2JqZWN0ICpjX2ZpbGVuYW1lX29iajsKKyAgICBQeU9iamVjdCAqY19maWxlbmFtZTsKICAgICBzdHJ1Y3Qgc3ltdGFibGUgKmNfc3Q7CiAgICAgUHlGdXR1cmVGZWF0dXJlcyAqY19mdXR1cmU7IC8qIHBvaW50ZXIgdG8gbW9kdWxlJ3MgX19mdXR1cmVfXyAqLwogICAgIFB5Q29tcGlsZXJGbGFncyAqY19mbGFnczsKQEAgLTE3MCw3ICsxNzAsNyBAQAogc3RhdGljIGludCBjb21waWxlcl9uZXh0X2luc3RyKHN0cnVjdCBjb21waWxlciAqLCBiYXNpY2Jsb2NrICopOwogc3RhdGljIGludCBjb21waWxlcl9hZGRvcChzdHJ1Y3QgY29tcGlsZXIgKiwgaW50KTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3BfbyhzdHJ1Y3QgY29tcGlsZXIgKiwgaW50LCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKLXN0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3BfaShzdHJ1Y3QgY29tcGlsZXIgKiwgaW50LCBpbnQpOworc3RhdGljIGludCBjb21waWxlcl9hZGRvcF9pKHN0cnVjdCBjb21waWxlciAqLCBpbnQsIFB5X3NzaXplX3QpOwogc3RhdGljIGludCBjb21waWxlcl9hZGRvcF9qKHN0cnVjdCBjb21waWxlciAqLCBpbnQsIGJhc2ljYmxvY2sgKiwgaW50KTsKIHN0YXRpYyBiYXNpY2Jsb2NrICpjb21waWxlcl91c2VfbmV3X2Jsb2NrKHN0cnVjdCBjb21waWxlciAqKTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfZXJyb3Ioc3RydWN0IGNvbXBpbGVyICosIGNvbnN0IGNoYXIgKik7CkBAIC0xOTUsMTIgKzE5NSwxMyBAQAogc3RhdGljIGludCBleHByX2NvbnN0YW50KHN0cnVjdCBjb21waWxlciAqLCBleHByX3R5KTsKIAogc3RhdGljIGludCBjb21waWxlcl93aXRoKHN0cnVjdCBjb21waWxlciAqLCBzdG10X3R5LCBpbnQpOwotc3RhdGljIGludCBjb21waWxlcl9jYWxsX2hlbHBlcihzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBuLAorc3RhdGljIGludCBjb21waWxlcl9jYWxsX2hlbHBlcihzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5X3NzaXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICprZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBzdGFyYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBrd2FyZ3MpOwogc3RhdGljIGludCBjb21waWxlcl90cnlfZXhjZXB0KHN0cnVjdCBjb21waWxlciAqLCBzdG10X3R5KTsKK3N0YXRpYyBpbnQgY29tcGlsZXJfc2V0X3F1YWxuYW1lKHN0cnVjdCBjb21waWxlciAqKTsKIAogc3RhdGljIFB5Q29kZU9iamVjdCAqYXNzZW1ibGUoc3RydWN0IGNvbXBpbGVyICosIGludCBhZGROb25lKTsKIHN0YXRpYyBQeU9iamVjdCAqX19kb2NfXzsKQEAgLTI4OCw4ICsyODksOCBAQAogfQogCiBQeUNvZGVPYmplY3QgKgotUHlBU1RfQ29tcGlsZUV4KG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAotICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSwgUHlBcmVuYSAqYXJlbmEpCitQeUFTVF9Db21waWxlT2JqZWN0KG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW1pemUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIHN0cnVjdCBjb21waWxlciBjOwogICAgIFB5Q29kZU9iamVjdCAqY28gPSBOVUxMOwpAQCAtMzA0LDEyICszMDUsMTAgQEAKIAogICAgIGlmICghY29tcGlsZXJfaW5pdCgmYykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CiAgICAgYy5jX2ZpbGVuYW1lID0gZmlsZW5hbWU7Ci0gICAgYy5jX2ZpbGVuYW1lX29iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwotICAgIGlmICghYy5jX2ZpbGVuYW1lX29iaikKLSAgICAgICAgZ290byBmaW5hbGx5OwogICAgIGMuY19hcmVuYSA9IGFyZW5hOwotICAgIGMuY19mdXR1cmUgPSBQeUZ1dHVyZV9Gcm9tQVNUKG1vZCwgZmlsZW5hbWUpOworICAgIGMuY19mdXR1cmUgPSBQeUZ1dHVyZV9Gcm9tQVNUT2JqZWN0KG1vZCwgZmlsZW5hbWUpOwogICAgIGlmIChjLmNfZnV0dXJlID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICBpZiAoIWZsYWdzKSB7CkBAIC0zMjMsNyArMzIyLDcgQEAKICAgICBjLmNfb3B0aW1pemUgPSAob3B0aW1pemUgPT0gLTEpID8gUHlfT3B0aW1pemVGbGFnIDogb3B0aW1pemU7CiAgICAgYy5jX25lc3RsZXZlbCA9IDA7CiAKLSAgICBjLmNfc3QgPSBQeVN5bXRhYmxlX0J1aWxkKG1vZCwgZmlsZW5hbWUsIGMuY19mdXR1cmUpOworICAgIGMuY19zdCA9IFB5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kLCBmaWxlbmFtZSwgYy5jX2Z1dHVyZSk7CiAgICAgaWYgKGMuY19zdCA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgIm5vIHN5bXRhYmxlIik7CkBAIC0zMzksNiArMzM4LDIxIEBACiB9CiAKIFB5Q29kZU9iamVjdCAqCitQeUFTVF9Db21waWxlRXgobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSwgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIFB5Q29kZU9iamVjdCAqY287CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGNvID0gUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLCBmbGFncywgb3B0aW1pemUsIGFyZW5hKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBjbzsKKworfQorCitQeUNvZGVPYmplY3QgKgogUHlOb2RlX0NvbXBpbGUoc3RydWN0IF9ub2RlICpuLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKICAgICBQeUNvZGVPYmplY3QgKmNvID0gTlVMTDsKQEAgLTM2MCw4ICszNzQsNyBAQAogICAgICAgICBQeVN5bXRhYmxlX0ZyZWUoYy0+Y19zdCk7CiAgICAgaWYgKGMtPmNfZnV0dXJlKQogICAgICAgICBQeU9iamVjdF9GcmVlKGMtPmNfZnV0dXJlKTsKLSAgICBpZiAoYy0+Y19maWxlbmFtZV9vYmopCi0gICAgICAgIFB5X0RFQ1JFRihjLT5jX2ZpbGVuYW1lX29iaik7CisgICAgUHlfWERFQ1JFRihjLT5jX2ZpbGVuYW1lKTsKICAgICBQeV9ERUNSRUYoYy0+Y19zdGFjayk7CiB9CiAKQEAgLTM3NSw3ICszODgsNyBAQAogCiAgICAgbiA9IFB5TGlzdF9TaXplKGxpc3QpOwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZyhpKTsKKyAgICAgICAgdiA9IFB5TG9uZ19Gcm9tU3NpemVfdChpKTsKICAgICAgICAgaWYgKCF2KSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQwMyw3ICs0MTYsNyBAQAogKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RieXR5cGUoUHlPYmplY3QgKnNyYywgaW50IHNjb3BlX3R5cGUsIGludCBmbGFnLCBpbnQgb2Zmc2V0KQorZGljdGJ5dHlwZShQeU9iamVjdCAqc3JjLCBpbnQgc2NvcGVfdHlwZSwgaW50IGZsYWcsIFB5X3NzaXplX3Qgb2Zmc2V0KQogewogICAgIFB5X3NzaXplX3QgaSA9IG9mZnNldCwgc2NvcGUsIG51bV9rZXlzLCBrZXlfaTsKICAgICBQeU9iamVjdCAqaywgKnYsICpkZXN0ID0gUHlEaWN0X05ldygpOwpAQCAtNDM3LDcgKzQ1MCw3IEBACiAgICAgICAgIHNjb3BlID0gKHZpID4+IFNDT1BFX09GRlNFVCkgJiBTQ09QRV9NQVNLOwogCiAgICAgICAgIGlmIChzY29wZSA9PSBzY29wZV90eXBlIHx8IHZpICYgZmxhZykgewotICAgICAgICAgICAgUHlPYmplY3QgKnR1cGxlLCAqaXRlbSA9IFB5TG9uZ19Gcm9tTG9uZyhpKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0dXBsZSwgKml0ZW0gPSBQeUxvbmdfRnJvbVNzaXplX3QoaSk7CiAgICAgICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNvcnRlZF9rZXlzKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVzdCk7CkBAIC01MzUsNiArNTQ4LDM3IEBACiAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlmICh1LT51X3N0ZS0+c3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUpIHsKKyAgICAgICAgLyogQ29vayB1cCBhIGltcGxpY2l0IF9fY2xhc3NfXyBjZWxsLiAqLworICAgICAgICBfUHlfSURFTlRJRklFUihfX2NsYXNzX18pOworICAgICAgICBQeU9iamVjdCAqdHVwbGUsICpuYW1lLCAqemVybzsKKyAgICAgICAgaW50IHJlczsKKyAgICAgICAgYXNzZXJ0KHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9DTEFTUyk7CisgICAgICAgIGFzc2VydChQeURpY3RfU2l6ZSh1LT51X2NlbGx2YXJzKSA9PSAwKTsKKyAgICAgICAgbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fY2xhc3NfXyk7CisgICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdHVwbGUgPSBQeVR1cGxlX1BhY2soMiwgbmFtZSwgUHlfVFlQRShuYW1lKSk7CisgICAgICAgIGlmICghdHVwbGUpIHsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgICAgIGlmICghemVybykgeworICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtKHUtPnVfY2VsbHZhcnMsIHR1cGxlLCB6ZXJvKTsKKyAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgUHlfREVDUkVGKHplcm8pOworICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CiAKICAgICB1LT51X2ZyZWV2YXJzID0gZGljdGJ5dHlwZSh1LT51X3N0ZS0+c3RlX3N5bWJvbHMsIEZSRUUsIERFRl9GUkVFX0NMQVNTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9TaXplKHUtPnVfY2VsbHZhcnMpKTsKQEAgLTU4MCwxMyArNjI0LDE4IEBACiAgICAgaWYgKGNvbXBpbGVyX3VzZV9uZXdfYmxvY2soYykgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpZiAodS0+dV9zY29wZV90eXBlICE9IENPTVBJTEVSX1NDT1BFX01PRFVMRSkgeworICAgICAgICBpZiAoIWNvbXBpbGVyX3NldF9xdWFsbmFtZShjKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIHJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZAogY29tcGlsZXJfZXhpdF9zY29wZShzdHJ1Y3QgY29tcGlsZXIgKmMpCiB7Ci0gICAgaW50IG47CisgICAgUHlfc3NpemVfdCBuOwogICAgIFB5T2JqZWN0ICpjYXBzdWxlOwogCiAgICAgYy0+Y19uZXN0bGV2ZWwtLTsKQEAgLTYwNyw1NyArNjU2LDc3IEBACiAKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKHN0cnVjdCBjb21waWxlciAqYykKK3N0YXRpYyBpbnQKK2NvbXBpbGVyX3NldF9xdWFsbmFtZShzdHJ1Y3QgY29tcGlsZXIgKmMpCiB7Ci0gICAgUHlfc3NpemVfdCBzdGFja19zaXplLCBpOwogICAgIF9QeV9zdGF0aWNfc3RyaW5nKGRvdCwgIi4iKTsKLSAgICBfUHlfc3RhdGljX3N0cmluZyhsb2NhbHMsICI8bG9jYWxzPiIpOwotICAgIHN0cnVjdCBjb21waWxlcl91bml0ICp1OwotICAgIFB5T2JqZWN0ICpjYXBzdWxlLCAqbmFtZSwgKnNlcSwgKmRvdF9zdHIsICpsb2NhbHNfc3RyOworICAgIF9QeV9zdGF0aWNfc3RyaW5nKGRvdF9sb2NhbHMsICIuPGxvY2Fscz4iKTsKKyAgICBQeV9zc2l6ZV90IHN0YWNrX3NpemU7CisgICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnUgPSBjLT51OworICAgIFB5T2JqZWN0ICpuYW1lLCAqYmFzZSwgKmRvdF9zdHIsICpkb3RfbG9jYWxzX3N0cjsKIAotICAgIHUgPSBjLT51OwotICAgIGlmICh1LT51X3F1YWxuYW1lICE9IE5VTEwpIHsKLSAgICAgICAgUHlfSU5DUkVGKHUtPnVfcXVhbG5hbWUpOwotICAgICAgICByZXR1cm4gdS0+dV9xdWFsbmFtZTsKLSAgICB9Ci0KLSAgICBzZXEgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChzZXEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KKyAgICBiYXNlID0gTlVMTDsKICAgICBzdGFja19zaXplID0gUHlMaXN0X0dFVF9TSVpFKGMtPmNfc3RhY2spOwotICAgIGZvciAoaSA9IDA7IGkgPCBzdGFja19zaXplOyBpKyspIHsKLSAgICAgICAgY2Fwc3VsZSA9IFB5TGlzdF9HRVRfSVRFTShjLT5jX3N0YWNrLCBpKTsKLSAgICAgICAgdSA9IChzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqKVB5Q2Fwc3VsZV9HZXRQb2ludGVyKGNhcHN1bGUsIENPTVBJTEVSX0NBUFNVTEVfTkFNRV9DT01QSUxFUl9VTklUKTsKLSAgICAgICAgYXNzZXJ0KHUpOwotICAgICAgICBpZiAodS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX01PRFVMRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChzZXEsIHUtPnVfbmFtZSkpCi0gICAgICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICAgICAgaWYgKHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9GVU5DVElPTikgewotICAgICAgICAgICAgbG9jYWxzX3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZsb2NhbHMpOwotICAgICAgICAgICAgaWYgKGxvY2Fsc19zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlcSwgbG9jYWxzX3N0cikpCi0gICAgICAgICAgICAgICAgZ290byBfZXJyb3I7CisgICAgYXNzZXJ0KHN0YWNrX3NpemUgPj0gMSk7CisgICAgaWYgKHN0YWNrX3NpemUgPiAxKSB7CisgICAgICAgIGludCBzY29wZSwgZm9yY2VfZ2xvYmFsID0gMDsKKyAgICAgICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnBhcmVudDsKKyAgICAgICAgUHlPYmplY3QgKm1hbmdsZWQsICpjYXBzdWxlOworCisgICAgICAgIGNhcHN1bGUgPSBQeUxpc3RfR0VUX0lURU0oYy0+Y19zdGFjaywgc3RhY2tfc2l6ZSAtIDEpOworICAgICAgICBwYXJlbnQgPSAoc3RydWN0IGNvbXBpbGVyX3VuaXQgKilQeUNhcHN1bGVfR2V0UG9pbnRlcihjYXBzdWxlLCBDT01QSUxFUl9DQVBTVUxFX05BTUVfQ09NUElMRVJfVU5JVCk7CisgICAgICAgIGFzc2VydChwYXJlbnQpOworCisgICAgICAgIGlmICh1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04gfHwgdS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0NMQVNTKSB7CisgICAgICAgICAgICBhc3NlcnQodS0+dV9uYW1lKTsKKyAgICAgICAgICAgIG1hbmdsZWQgPSBfUHlfTWFuZ2xlKHBhcmVudC0+dV9wcml2YXRlLCB1LT51X25hbWUpOworICAgICAgICAgICAgaWYgKCFtYW5nbGVkKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgc2NvcGUgPSBQeVNUX0dldFNjb3BlKHBhcmVudC0+dV9zdGUsIG1hbmdsZWQpOworICAgICAgICAgICAgUHlfREVDUkVGKG1hbmdsZWQpOworICAgICAgICAgICAgYXNzZXJ0KHNjb3BlICE9IEdMT0JBTF9JTVBMSUNJVCk7CisgICAgICAgICAgICBpZiAoc2NvcGUgPT0gR0xPQkFMX0VYUExJQ0lUKQorICAgICAgICAgICAgICAgIGZvcmNlX2dsb2JhbCA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvcmNlX2dsb2JhbCkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OCisgICAgICAgICAgICAgICAgfHwgcGFyZW50LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfTEFNQkRBKSB7CisgICAgICAgICAgICAgICAgZG90X2xvY2Fsc19zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmZG90X2xvY2Fscyk7CisgICAgICAgICAgICAgICAgaWYgKGRvdF9sb2NhbHNfc3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGJhc2UgPSBQeVVuaWNvZGVfQ29uY2F0KHBhcmVudC0+dV9xdWFsbmFtZSwgZG90X2xvY2Fsc19zdHIpOworICAgICAgICAgICAgICAgIGlmIChiYXNlID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHBhcmVudC0+dV9xdWFsbmFtZSk7CisgICAgICAgICAgICAgICAgYmFzZSA9IHBhcmVudC0+dV9xdWFsbmFtZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICB1ID0gYy0+dTsKLSAgICBpZiAoUHlMaXN0X0FwcGVuZChzZXEsIHUtPnVfbmFtZSkpCi0gICAgICAgIGdvdG8gX2Vycm9yOwotICAgIGRvdF9zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmZG90KTsKLSAgICBpZiAoZG90X3N0ciA9PSBOVUxMKQotICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICBuYW1lID0gUHlVbmljb2RlX0pvaW4oZG90X3N0ciwgc2VxKTsKLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICB1LT51X3F1YWxuYW1lID0gbmFtZTsKLSAgICBQeV9YSU5DUkVGKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwogCi1fZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihzZXEpOwotICAgIHJldHVybiBOVUxMOworICAgIGlmIChiYXNlICE9IE5VTEwpIHsKKyAgICAgICAgZG90X3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZkb3QpOworICAgICAgICBpZiAoZG90X3N0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBuYW1lID0gUHlVbmljb2RlX0NvbmNhdChiYXNlLCBkb3Rfc3RyKTsKKyAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICBpZiAobmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFB5VW5pY29kZV9BcHBlbmQoJm5hbWUsIHUtPnVfbmFtZSk7CisgICAgICAgIGlmIChuYW1lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5X0lOQ1JFRih1LT51X25hbWUpOworICAgICAgICBuYW1lID0gdS0+dV9uYW1lOworICAgIH0KKyAgICB1LT51X3F1YWxuYW1lID0gbmFtZTsKKworICAgIHJldHVybiAxOwogfQogCiAvKiBBbGxvY2F0ZSBhIG5ldyBibG9jayBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4KQEAgLTc4NCw4ICs4NTMsOCBAQAogICAgIGItPmJfaW5zdHJbb2ZmXS5pX2xpbmVubyA9IGMtPnUtPnVfbGluZW5vOwogfQogCi1zdGF0aWMgaW50Ci1vcGNvZGVfc3RhY2tfZWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZykKK2ludAorUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZykKIHsKICAgICBzd2l0Y2ggKG9wY29kZSkgewogICAgICAgICBjYXNlIFBPUF9UT1A6CkBAIC04NjIsOCArOTMxLDYgQEAKICAgICAgICAgICAgIHJldHVybiA3OwogICAgICAgICBjYXNlIFdJVEhfQ0xFQU5VUDoKICAgICAgICAgICAgIHJldHVybiAtMTsgLyogWFhYIFNvbWV0aW1lcyBtb3JlICovCi0gICAgICAgIGNhc2UgU1RPUkVfTE9DQUxTOgotICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIFJFVFVSTl9WQUxVRToKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBJTVBPUlRfU1RBUjoKQEAgLTk3MCwxNyArMTAzNywxNiBAQAogICAgICAgICBjYXNlIExPQURfQ0xPU1VSRToKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIExPQURfREVSRUY6CisgICAgICAgIGNhc2UgTE9BRF9DTEFTU0RFUkVGOgogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGNhc2UgU1RPUkVfREVSRUY6CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNhc2UgREVMRVRFX0RFUkVGOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9wY29kZSA9ICVkXG4iLCBvcGNvZGUpOwotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigib3Bjb2RlX3N0YWNrX2VmZmVjdCgpIik7Ci0KKyAgICAgICAgICAgIHJldHVybiBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVDsKICAgICB9Ci0gICAgcmV0dXJuIDA7IC8qIG5vdCByZWFjaGFibGUgKi8KKyAgICByZXR1cm4gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1Q7IC8qIG5vdCByZWFjaGFibGUgKi8KIH0KIAogLyogQWRkIGFuIG9wY29kZSB3aXRoIG5vIGFyZ3VtZW50LgpAQCAtMTAwNiw3ICsxMDcyLDcgQEAKICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIFB5X3NzaXplX3QKIGNvbXBpbGVyX2FkZF9vKHN0cnVjdCBjb21waWxlciAqYywgUHlPYmplY3QgKmRpY3QsIFB5T2JqZWN0ICpvKQogewogICAgIFB5T2JqZWN0ICp0LCAqdjsKQEAgLTEwNjAsNyArMTEyNiw3IEBACiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBhcmcgPSBQeURpY3RfU2l6ZShkaWN0KTsKLSAgICAgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZyhhcmcpOworICAgICAgICB2ID0gUHlMb25nX0Zyb21Tc2l6ZV90KGFyZyk7CiAgICAgICAgIGlmICghdikgewogICAgICAgICAgICAgUHlfREVDUkVGKHQpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTA4Miw3ICsxMTQ4LDcgQEAKIGNvbXBpbGVyX2FkZG9wX28oc3RydWN0IGNvbXBpbGVyICpjLCBpbnQgb3Bjb2RlLCBQeU9iamVjdCAqZGljdCwKICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvKQogewotICAgIGludCBhcmcgPSBjb21waWxlcl9hZGRfbyhjLCBkaWN0LCBvKTsKKyAgICBQeV9zc2l6ZV90IGFyZyA9IGNvbXBpbGVyX2FkZF9vKGMsIGRpY3QsIG8pOwogICAgIGlmIChhcmcgPCAwKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gY29tcGlsZXJfYWRkb3BfaShjLCBvcGNvZGUsIGFyZyk7CkBAIC0xMDkyLDcgKzExNTgsNyBAQAogY29tcGlsZXJfYWRkb3BfbmFtZShzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBvcGNvZGUsIFB5T2JqZWN0ICpkaWN0LAogICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbykKIHsKLSAgICBpbnQgYXJnOworICAgIFB5X3NzaXplX3QgYXJnOwogICAgIFB5T2JqZWN0ICptYW5nbGVkID0gX1B5X01hbmdsZShjLT51LT51X3ByaXZhdGUsIG8pOwogICAgIGlmICghbWFuZ2xlZCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTA4LDE2ICsxMTc0LDIyIEBACiAqLwogCiBzdGF0aWMgaW50Ci1jb21waWxlcl9hZGRvcF9pKHN0cnVjdCBjb21waWxlciAqYywgaW50IG9wY29kZSwgaW50IG9wYXJnKQorY29tcGlsZXJfYWRkb3BfaShzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBvcGNvZGUsIFB5X3NzaXplX3Qgb3BhcmcpCiB7CiAgICAgc3RydWN0IGluc3RyICppOwogICAgIGludCBvZmY7CisKKyAgICAvKiBJbnRlZ2VyIGFyZ3VtZW50cyBhcmUgbGltaXQgdG8gMTYtYml0LiBUaGVyZSBpcyBhbiBleHRlbnNpb24gZm9yIDMyLWJpdAorICAgICAgIGludGVnZXIgYXJndW1lbnRzLiAqLworICAgIGFzc2VydCgoLTIxNDc0ODM2NDctMSkgPD0gb3BhcmcpOworICAgIGFzc2VydChvcGFyZyA8PSAyMTQ3NDgzNjQ3KTsKKwogICAgIG9mZiA9IGNvbXBpbGVyX25leHRfaW5zdHIoYywgYy0+dS0+dV9jdXJibG9jayk7CiAgICAgaWYgKG9mZiA8IDApCiAgICAgICAgIHJldHVybiAwOwogICAgIGkgPSAmYy0+dS0+dV9jdXJibG9jay0+Yl9pbnN0cltvZmZdOwogICAgIGktPmlfb3Bjb2RlID0gb3Bjb2RlOwotICAgIGktPmlfb3BhcmcgPSBvcGFyZzsKKyAgICBpLT5pX29wYXJnID0gUHlfU0FGRV9ET1dOQ0FTVChvcGFyZywgUHlfc3NpemVfdCwgaW50KTsKICAgICBpLT5pX2hhc2FyZyA9IDE7CiAgICAgY29tcGlsZXJfc2V0X2xpbmVubyhjLCBvZmYpOwogICAgIHJldHVybiAxOwpAQCAtMTMzMCwxNiArMTQwMiwxOSBAQAogc3RhdGljIGludAogZ2V0X3JlZl90eXBlKHN0cnVjdCBjb21waWxlciAqYywgUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgaW50IHNjb3BlID0gUHlTVF9HZXRTY29wZShjLT51LT51X3N0ZSwgbmFtZSk7CisgICAgaW50IHNjb3BlOworICAgIGlmIChjLT51LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQ0xBU1MgJiYKKyAgICAgICAgIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJfX2NsYXNzX18iKSkKKyAgICAgICAgcmV0dXJuIENFTEw7CisgICAgc2NvcGUgPSBQeVNUX0dldFNjb3BlKGMtPnUtPnVfc3RlLCBuYW1lKTsKICAgICBpZiAoc2NvcGUgPT0gMCkgewogICAgICAgICBjaGFyIGJ1ZlszNTBdOwogICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2NvcGUgZm9yICUuMTAwcyBpbiAlLjEwMHMoJXMpIGluICVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2NvcGUgZm9yICUuMTAwcyBpbiAlLjEwMHMoJXMpXG4iCiAgICAgICAgICAgICAgICAgICAgICAgInN5bWJvbHM6ICVzXG5sb2NhbHM6ICVzXG5nbG9iYWxzOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcobmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYy0+dS0+dV9uYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdF9SRVBSKGMtPnUtPnVfc3RlLT5zdGVfaWQpLAotICAgICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X3N0ZS0+c3RlX3N5bWJvbHMpLAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIoYy0+dS0+dV92YXJuYW1lcyksCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X25hbWVzKQpAQCAtMTM2NSw5ICsxNDQwLDkgQEAKIH0KIAogc3RhdGljIGludAotY29tcGlsZXJfbWFrZV9jbG9zdXJlKHN0cnVjdCBjb21waWxlciAqYywgUHlDb2RlT2JqZWN0ICpjbywgaW50IGFyZ3MsIFB5T2JqZWN0ICpxdWFsbmFtZSkKK2NvbXBpbGVyX21ha2VfY2xvc3VyZShzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5Q29kZU9iamVjdCAqY28sIFB5X3NzaXplX3QgYXJncywgUHlPYmplY3QgKnF1YWxuYW1lKQogewotICAgIGludCBpLCBmcmVlID0gUHlDb2RlX0dldE51bUZyZWUoY28pOworICAgIFB5X3NzaXplX3QgaSwgZnJlZSA9IFB5Q29kZV9HZXROdW1GcmVlKGNvKTsKICAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCkKICAgICAgICAgcXVhbG5hbWUgPSBjby0+Y29fbmFtZTsKIApAQCAtMTQ5NCwyMiArMTU2OSwyMiBAQAogICAgICAgICovCiAgICAgc3RhdGljIGlkZW50aWZpZXIgcmV0dXJuX3N0cjsKICAgICBQeU9iamVjdCAqbmFtZXM7Ci0gICAgaW50IGxlbjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBuYW1lcyA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKCFuYW1lcykKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb25zKGMsIGFyZ3MtPmFyZ3MsIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoYXJncy0+dmFyYXJnYW5ub3RhdGlvbiAmJgotICAgICAgICBjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9uKGMsIGFyZ3MtPnZhcmFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT52YXJhcmdhbm5vdGF0aW9uLCBuYW1lcykpCisgICAgaWYgKGFyZ3MtPnZhcmFyZyAmJiBhcmdzLT52YXJhcmctPmFubm90YXRpb24gJiYKKyAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT52YXJhcmctPmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT52YXJhcmctPmFubm90YXRpb24sIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbnMoYywgYXJncy0+a3dvbmx5YXJncywgbmFtZXMpKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmIChhcmdzLT5rd2FyZ2Fubm90YXRpb24gJiYKLSAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT5rd2FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd2FyZ2Fubm90YXRpb24sIG5hbWVzKSkKKyAgICBpZiAoYXJncy0+a3dhcmcgJiYgYXJncy0+a3dhcmctPmFubm90YXRpb24gJiYKKyAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT5rd2FyZy0+YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoIXJldHVybl9zdHIpIHsKQEAgLTE1MzEsNyArMTYwNiw3IEBACiAgICAgaWYgKGxlbikgewogICAgICAgICAvKiBjb252ZXJ0IG5hbWVzIHRvIGEgdHVwbGUgYW5kIHBsYWNlIG9uIHN0YWNrICovCiAgICAgICAgIFB5T2JqZWN0ICplbHQ7Ci0gICAgICAgIGludCBpOworICAgICAgICBQeV9zc2l6ZV90IGk7CiAgICAgICAgIFB5T2JqZWN0ICpzID0gUHlUdXBsZV9OZXcobGVuKTsKICAgICAgICAgaWYgKCFzKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTE1NDUsNyArMTYyMCw5IEBACiAgICAgICAgIGxlbisrOyAvKiBpbmNsdWRlIHRoZSBqdXN0LXB1c2hlZCB0dXBsZSAqLwogICAgIH0KICAgICBQeV9ERUNSRUYobmFtZXMpOwotICAgIHJldHVybiBsZW47CisKKyAgICAvKiBXZSBqdXN0IGNoZWNrZWQgdGhhdCBsZW4gPD0gNjU1MzUsIHNlZSBhYm92ZSAqLworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKGxlbiwgUHlfc3NpemVfdCwgaW50KTsKIAogZXJyb3I6CiAgICAgUHlfREVDUkVGKG5hbWVzKTsKQEAgLTE1NjEsMTMgKzE2MzgsMTYgQEAKICAgICBleHByX3R5IHJldHVybnMgPSBzLT52LkZ1bmN0aW9uRGVmLnJldHVybnM7CiAgICAgYXNkbF9zZXEqIGRlY29zID0gcy0+di5GdW5jdGlvbkRlZi5kZWNvcmF0b3JfbGlzdDsKICAgICBzdG10X3R5IHN0OwotICAgIGludCBpLCBuLCBkb2NzdHJpbmcsIGt3X2RlZmF1bHRfY291bnQgPSAwLCBhcmdsZW5ndGg7CisgICAgUHlfc3NpemVfdCBpLCBuLCBhcmdsZW5ndGg7CisgICAgaW50IGRvY3N0cmluZywga3dfZGVmYXVsdF9jb3VudCA9IDA7CiAgICAgaW50IG51bV9hbm5vdGF0aW9uczsKIAogICAgIGFzc2VydChzLT5raW5kID09IEZ1bmN0aW9uRGVmX2tpbmQpOwogCiAgICAgaWYgKCFjb21waWxlcl9kZWNvcmF0b3JzKGMsIGRlY29zKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGFyZ3MtPmRlZmF1bHRzKQorICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgYXJncy0+ZGVmYXVsdHMpOwogICAgIGlmIChhcmdzLT5rd29ubHlhcmdzKSB7CiAgICAgICAgIGludCByZXMgPSBjb21waWxlcl92aXNpdF9rd29ubHlkZWZhdWx0cyhjLCBhcmdzLT5rd29ubHlhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+a3dfZGVmYXVsdHMpOwpAQCAtMTU3NSw4ICsxNjU1LDYgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBrd19kZWZhdWx0X2NvdW50ID0gcmVzOwogICAgIH0KLSAgICBpZiAoYXJncy0+ZGVmYXVsdHMpCi0gICAgICAgIFZJU0lUX1NFUShjLCBleHByLCBhcmdzLT5kZWZhdWx0cyk7CiAgICAgbnVtX2Fubm90YXRpb25zID0gY29tcGlsZXJfdmlzaXRfYW5ub3RhdGlvbnMoYywgYXJncywgcmV0dXJucyk7CiAgICAgaWYgKG51bV9hbm5vdGF0aW9ucyA8IDApCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTYwNSw5ICsxNjgzLDEwIEBACiAgICAgICAgIFZJU0lUX0lOX1NDT1BFKGMsIHN0bXQsIHN0KTsKICAgICB9CiAgICAgY28gPSBhc3NlbWJsZShjLCAxKTsKLSAgICBxdWFsbmFtZSA9IGNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKGMpOworICAgIHF1YWxuYW1lID0gYy0+dS0+dV9xdWFsbmFtZTsKKyAgICBQeV9JTkNSRUYocXVhbG5hbWUpOwogICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7Ci0gICAgaWYgKHF1YWxuYW1lID09IE5VTEwgfHwgY28gPT0gTlVMTCkgeworICAgIGlmIChjbyA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1hERUNSRUYocXVhbG5hbWUpOwogICAgICAgICBQeV9YREVDUkVGKGNvKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjYxLDEyICsxNzQwLDYgQEAKICAgICAgICAgUHlfSU5DUkVGKHMtPnYuQ2xhc3NEZWYubmFtZSk7CiAgICAgICAgIFB5X1hERUNSRUYoYy0+dS0+dV9wcml2YXRlKTsKICAgICAgICAgYy0+dS0+dV9wcml2YXRlID0gcy0+di5DbGFzc0RlZi5uYW1lOwotICAgICAgICAvKiBmb3JjZSBpdCB0byBoYXZlIG9uZSBtYW5kYXRvcnkgYXJndW1lbnQgKi8KLSAgICAgICAgYy0+dS0+dV9hcmdjb3VudCA9IDE7Ci0gICAgICAgIC8qIGxvYWQgdGhlIGZpcnN0IGFyZ3VtZW50IChfX2xvY2Fsc19fKSAuLi4gKi8KLSAgICAgICAgQURET1BfSShjLCBMT0FEX0ZBU1QsIDApOwotICAgICAgICAvKiAuLi4gYW5kIHN0b3JlIGl0IGludG8gZl9sb2NhbHMgKi8KLSAgICAgICAgQURET1BfSU5fU0NPUEUoYywgU1RPUkVfTE9DQUxTKTsKICAgICAgICAgLyogbG9hZCAoZ2xvYmFsKSBfX25hbWVfXyAuLi4gKi8KICAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7CiAgICAgICAgIGlmICghc3RyIHx8ICFjb21waWxlcl9uYW1lb3AoYywgc3RyLCBMb2FkKSkgewpAQCAtMTY4MywxNCArMTc1Niw4IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICAgICAgLyogc3RvcmUgdGhlIF9fcXVhbG5hbWVfXyAqLwotICAgICAgICBzdHIgPSBjb21waWxlcl9zY29wZV9xdWFsbmFtZShjKTsKLSAgICAgICAgaWYgKCFzdHIpIHsKLSAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIHN0ciwgY29uc3RzKTsKLSAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgIGFzc2VydChjLT51LT51X3F1YWxuYW1lKTsKKyAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBjLT51LT51X3F1YWxuYW1lLCBjb25zdHMpOwogICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19xdWFsbmFtZV9fIik7CiAgICAgICAgIGlmICghc3RyIHx8ICFjb21waWxlcl9uYW1lb3AoYywgc3RyLCBTdG9yZSkpIHsKICAgICAgICAgICAgIFB5X1hERUNSRUYoc3RyKTsKQEAgLTE3MDMsMjQgKzE3NzAsMjggQEAKICAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICAvKiByZXR1cm4gdGhlIChlbXB0eSkgX19jbGFzc19fIGNlbGwgKi8KLSAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fY2xhc3NfXyIpOwotICAgICAgICBpZiAoc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpID0gY29tcGlsZXJfbG9va3VwX2FyZyhjLT51LT51X2NlbGx2YXJzLCBzdHIpOwotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICAgICAgaWYgKGkgPT0gLTEpIHsKLSAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyB3aGVuIG5vYm9keSByZWZlcmVuY2VzIHRoZSBjZWxsICovCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgLyogUmV0dXJuIE5vbmUgKi8KLSAgICAgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgUHlfTm9uZSwgY29uc3RzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGMtPnUtPnVfc3RlLT5zdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSkgeworICAgICAgICAgICAgLyogcmV0dXJuIHRoZSAoZW1wdHkpIF9fY2xhc3NfXyBjZWxsICovCisgICAgICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19jbGFzc19fIik7CisgICAgICAgICAgICBpZiAoc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IGNvbXBpbGVyX2xvb2t1cF9hcmcoYy0+dS0+dV9jZWxsdmFycywgc3RyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICAgICAgaWYgKGkgPCAwKSB7CisgICAgICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydChpID09IDApOwogICAgICAgICAgICAgLyogUmV0dXJuIHRoZSBjZWxsIHdoZXJlIHRvIHN0b3JlIF9fY2xhc3NfXyAqLwogICAgICAgICAgICAgQURET1BfSShjLCBMT0FEX0NMT1NVUkUsIGkpOwogICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KFB5RGljdF9TaXplKGMtPnUtPnVfY2VsbHZhcnMpID09IDApOworICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIHdoZW4gbm9ib2R5IHJlZmVyZW5jZXMgdGhlIGNlbGwuIFJldHVybiBOb25lLiAqLworICAgICAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBQeV9Ob25lLCBjb25zdHMpOworICAgICAgICB9CiAgICAgICAgIEFERE9QX0lOX1NDT1BFKGMsIFJFVFVSTl9WQUxVRSk7CiAgICAgICAgIC8qIGNyZWF0ZSB0aGUgY29kZSBvYmplY3QgKi8KICAgICAgICAgY28gPSBhc3NlbWJsZShjLCAxKTsKQEAgLTE3ODcsNyArMTg1OCw4IEBACiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeU9iamVjdCAqcXVhbG5hbWU7CiAgICAgc3RhdGljIGlkZW50aWZpZXIgbmFtZTsKLSAgICBpbnQga3dfZGVmYXVsdF9jb3VudCA9IDAsIGFyZ2xlbmd0aDsKKyAgICBpbnQga3dfZGVmYXVsdF9jb3VudCA9IDA7CisgICAgUHlfc3NpemVfdCBhcmdsZW5ndGg7CiAgICAgYXJndW1lbnRzX3R5IGFyZ3MgPSBlLT52LkxhbWJkYS5hcmdzOwogICAgIGFzc2VydChlLT5raW5kID09IExhbWJkYV9raW5kKTsKIApAQCAtMTc5NywxNSArMTg2OSwxNSBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAgaWYgKGFyZ3MtPmRlZmF1bHRzKQorICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgYXJncy0+ZGVmYXVsdHMpOwogICAgIGlmIChhcmdzLT5rd29ubHlhcmdzKSB7CiAgICAgICAgIGludCByZXMgPSBjb21waWxlcl92aXNpdF9rd29ubHlkZWZhdWx0cyhjLCBhcmdzLT5rd29ubHlhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+a3dfZGVmYXVsdHMpOwogICAgICAgICBpZiAocmVzIDwgMCkgcmV0dXJuIDA7CiAgICAgICAgIGt3X2RlZmF1bHRfY291bnQgPSByZXM7CiAgICAgfQotICAgIGlmIChhcmdzLT5kZWZhdWx0cykKLSAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGFyZ3MtPmRlZmF1bHRzKTsKLSAgICBpZiAoIWNvbXBpbGVyX2VudGVyX3Njb3BlKGMsIG5hbWUsIENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OLAorICAgIGlmICghY29tcGlsZXJfZW50ZXJfc2NvcGUoYywgbmFtZSwgQ09NUElMRVJfU0NPUEVfTEFNQkRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKillLCBlLT5saW5lbm8pKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTgyNCw5ICsxODk2LDEwIEBACiAgICAgICAgIEFERE9QX0lOX1NDT1BFKGMsIFJFVFVSTl9WQUxVRSk7CiAgICAgfQogICAgIGNvID0gYXNzZW1ibGUoYywgMSk7Ci0gICAgcXVhbG5hbWUgPSBjb21waWxlcl9zY29wZV9xdWFsbmFtZShjKTsKKyAgICBxdWFsbmFtZSA9IGMtPnUtPnVfcXVhbG5hbWU7CisgICAgUHlfSU5DUkVGKHF1YWxuYW1lKTsKICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgIGlmIChxdWFsbmFtZSA9PSBOVUxMIHx8IGNvID09IE5VTEwpCisgICAgaWYgKGNvID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgYXJnbGVuZ3RoID0gYXNkbF9zZXFfTEVOKGFyZ3MtPmRlZmF1bHRzKTsKQEAgLTIwOTcsNyArMjE3MCw3IEBACiBjb21waWxlcl90cnlfZXhjZXB0KHN0cnVjdCBjb21waWxlciAqYywgc3RtdF90eSBzKQogewogICAgIGJhc2ljYmxvY2sgKmJvZHksICpvcmVsc2UsICpleGNlcHQsICplbmQ7Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogCiAgICAgYm9keSA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBleGNlcHQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CkBAIC0yMjYzLDcgKzIzMzYsNyBAQAogICAgICAgIG1vZHVsZSBuYW1lcy4KICAgICAgICBYWFggUGVyaGFwcyBjaGFuZ2UgdGhlIHJlcHJlc2VudGF0aW9uIHRvIG1ha2UgdGhpcyBjYXNlIHNpbXBsZXI/CiAgICAgICovCi0gICAgaW50IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5JbXBvcnQubmFtZXMpOworICAgIFB5X3NzaXplX3QgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkltcG9ydC5uYW1lcyk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgIGFsaWFzX3R5IGFsaWFzID0gKGFsaWFzX3R5KWFzZGxfc2VxX0dFVChzLT52LkltcG9ydC5uYW1lcywgaSk7CkBAIC0yMjg4LDggKzIzNjEsMTEgQEAKICAgICAgICAgICAgIGlkZW50aWZpZXIgdG1wID0gYWxpYXMtPm5hbWU7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IGRvdCA9IFB5VW5pY29kZV9GaW5kQ2hhcigKICAgICAgICAgICAgICAgICBhbGlhcy0+bmFtZSwgJy4nLCAwLCBQeVVuaWNvZGVfR0VUX0xFTkdUSChhbGlhcy0+bmFtZSksIDEpOwotICAgICAgICAgICAgaWYgKGRvdCAhPSAtMSkKKyAgICAgICAgICAgIGlmIChkb3QgIT0gLTEpIHsKICAgICAgICAgICAgICAgICB0bXAgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKGFsaWFzLT5uYW1lLCAwLCBkb3QpOworICAgICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByID0gY29tcGlsZXJfbmFtZW9wKGMsIHRtcCwgU3RvcmUpOwogICAgICAgICAgICAgaWYgKGRvdCAhPSAtMSkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOwpAQCAtMjMwNCw3ICsyMzgwLDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX2Zyb21faW1wb3J0KHN0cnVjdCBjb21waWxlciAqYywgc3RtdF90eSBzKQogewotICAgIGludCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuSW1wb3J0RnJvbS5uYW1lcyk7CisgICAgUHlfc3NpemVfdCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuSW1wb3J0RnJvbS5uYW1lcyk7CiAKICAgICBQeU9iamVjdCAqbmFtZXMgPSBQeVR1cGxlX05ldyhuKTsKICAgICBQeU9iamVjdCAqbGV2ZWw7CkBAIC0yMzgwLDYgKzI0NTYsNyBAQAogewogICAgIHN0YXRpYyBQeU9iamVjdCAqYXNzZXJ0aW9uX2Vycm9yID0gTlVMTDsKICAgICBiYXNpY2Jsb2NrICplbmQ7CisgICAgUHlPYmplY3QqIG1zZzsKIAogICAgIGlmIChjLT5jX29wdGltaXplKQogICAgICAgICByZXR1cm4gMTsKQEAgLTIzOTAsMTEgKzI0NjcsMTcgQEAKICAgICB9CiAgICAgaWYgKHMtPnYuQXNzZXJ0LnRlc3QtPmtpbmQgPT0gVHVwbGVfa2luZCAmJgogICAgICAgICBhc2RsX3NlcV9MRU4ocy0+di5Bc3NlcnQudGVzdC0+di5UdXBsZS5lbHRzKSA+IDApIHsKLSAgICAgICAgY29uc3QgY2hhciogbXNnID0KLSAgICAgICAgICAgICJhc3NlcnRpb24gaXMgYWx3YXlzIHRydWUsIHBlcmhhcHMgcmVtb3ZlIHBhcmVudGhlc2VzPyI7Ci0gICAgICAgIGlmIChQeUVycl9XYXJuRXhwbGljaXQoUHlFeGNfU3ludGF4V2FybmluZywgbXNnLCBjLT5jX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPnUtPnVfbGluZW5vLCBOVUxMLCBOVUxMKSA9PSAtMSkKKyAgICAgICAgbXNnID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzc2VydGlvbiBpcyBhbHdheXMgdHJ1ZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyaGFwcyByZW1vdmUgcGFyZW50aGVzZXM/Iik7CisgICAgICAgIGlmIChtc2cgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2ZpbGVuYW1lLCBjLT51LT51X2xpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG1zZyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYobXNnKTsKICAgICB9CiAgICAgVklTSVQoYywgZXhwciwgcy0+di5Bc3NlcnQudGVzdCk7CiAgICAgZW5kID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwpAQCAtMjQxNCw3ICsyNDk3LDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3Zpc2l0X3N0bXQoc3RydWN0IGNvbXBpbGVyICpjLCBzdG10X3R5IHMpCiB7Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogCiAgICAgLyogQWx3YXlzIGFzc2lnbiBhIGxpbmVubyB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbiBmb3IgYSBzdG10LiAqLwogICAgIGMtPnUtPnVfbGluZW5vID0gcy0+bGluZW5vOwpAQCAtMjQ2MiwxMiArMjU0NSwxMiBAQAogICAgICAgICBpZiAocy0+di5SYWlzZS5leGMpIHsKICAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuUmFpc2UuZXhjKTsKICAgICAgICAgICAgIG4rKzsKLSAgICAgICAgaWYgKHMtPnYuUmFpc2UuY2F1c2UpIHsKLSAgICAgICAgVklTSVQoYywgZXhwciwgcy0+di5SYWlzZS5jYXVzZSk7Ci0gICAgICAgIG4rKzsKKyAgICAgICAgICAgIGlmIChzLT52LlJhaXNlLmNhdXNlKSB7CisgICAgICAgICAgICAgICAgVklTSVQoYywgZXhwciwgcy0+di5SYWlzZS5jYXVzZSk7CisgICAgICAgICAgICAgICAgbisrOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgQURET1BfSShjLCBSQUlTRV9WQVJBUkdTLCBuKTsKKyAgICAgICAgQURET1BfSShjLCBSQUlTRV9WQVJBUkdTLCAoaW50KW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRyeV9raW5kOgogICAgICAgICByZXR1cm4gY29tcGlsZXJfdHJ5KGMsIHMpOwpAQCAtMjYyNyw3ICsyNzEwLDggQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX25hbWVvcChzdHJ1Y3QgY29tcGlsZXIgKmMsIGlkZW50aWZpZXIgbmFtZSwgZXhwcl9jb250ZXh0X3R5IGN0eCkKIHsKLSAgICBpbnQgb3AsIHNjb3BlLCBhcmc7CisgICAgaW50IG9wLCBzY29wZTsKKyAgICBQeV9zc2l6ZV90IGFyZzsKICAgICBlbnVtIHsgT1BfRkFTVCwgT1BfR0xPQkFMLCBPUF9ERVJFRiwgT1BfTkFNRSB9IG9wdHlwZTsKIAogICAgIFB5T2JqZWN0ICpkaWN0ID0gYy0+dS0+dV9uYW1lczsKQEAgLTI2MzgsNiArMjcyMiwxMCBAQAogICAgIGlmICghbWFuZ2xlZCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBhc3NlcnQoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIk5vbmUiKSAmJgorICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiVHJ1ZSIpICYmCisgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJGYWxzZSIpKTsKKwogICAgIG9wID0gMDsKICAgICBvcHR5cGUgPSBPUF9OQU1FOwogICAgIHNjb3BlID0gUHlTVF9HZXRTY29wZShjLT51LT51X3N0ZSwgbWFuZ2xlZCk7CkBAIC0yNjczLDcgKzI3NjEsOSBAQAogICAgIHN3aXRjaCAob3B0eXBlKSB7CiAgICAgY2FzZSBPUF9ERVJFRjoKICAgICAgICAgc3dpdGNoIChjdHgpIHsKLSAgICAgICAgY2FzZSBMb2FkOiBvcCA9IExPQURfREVSRUY7IGJyZWFrOworICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICBvcCA9IChjLT51LT51X3N0ZS0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jaykgPyBMT0FEX0NMQVNTREVSRUYgOiBMT0FEX0RFUkVGOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RvcmU6IG9wID0gU1RPUkVfREVSRUY7IGJyZWFrOwogICAgICAgICBjYXNlIEF1Z0xvYWQ6CiAgICAgICAgIGNhc2UgQXVnU3RvcmU6CkBAIC0yNzQ3LDcgKzI4MzcsOCBAQAogY29tcGlsZXJfYm9vbG9wKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewogICAgIGJhc2ljYmxvY2sgKmVuZDsKLSAgICBpbnQganVtcGksIGksIG47CisgICAgaW50IGp1bXBpOworICAgIFB5X3NzaXplX3QgaSwgbjsKICAgICBhc2RsX3NlcSAqczsKIAogICAgIGFzc2VydChlLT5raW5kID09IEJvb2xPcF9raW5kKTsKQEAgLTI3NzMsNyArMjg2NCw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl9saXN0KHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIGludCBuID0gYXNkbF9zZXFfTEVOKGUtPnYuTGlzdC5lbHRzKTsKKyAgICBQeV9zc2l6ZV90IG4gPSBhc2RsX3NlcV9MRU4oZS0+di5MaXN0LmVsdHMpOwogICAgIGlmIChlLT52Lkxpc3QuY3R4ID09IFN0b3JlKSB7CiAgICAgICAgIGludCBpLCBzZWVuX3N0YXIgPSAwOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0yODA2LDcgKzI4OTcsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfdHVwbGUoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCiB7Ci0gICAgaW50IG4gPSBhc2RsX3NlcV9MRU4oZS0+di5UdXBsZS5lbHRzKTsKKyAgICBQeV9zc2l6ZV90IG4gPSBhc2RsX3NlcV9MRU4oZS0+di5UdXBsZS5lbHRzKTsKICAgICBpZiAoZS0+di5UdXBsZS5jdHggPT0gU3RvcmUpIHsKICAgICAgICAgaW50IGksIHNlZW5fc3RhciA9IDA7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTI4MzksNyArMjkzMCw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl9jb21wYXJlKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKICAgICBiYXNpY2Jsb2NrICpjbGVhbnVwID0gTlVMTDsKIAogICAgIC8qIFhYWCB0aGUgbG9naWMgY2FuIGJlIGNsZWFuZWQgdXAgZm9yIDEgb3IgbXVsdGlwbGUgY29tcGFyaXNvbnMgKi8KQEAgLTI4OTUsMTEgKzI5ODYsMTEgQEAKIC8qIHNoYXJlZCBjb2RlIGJldHdlZW4gY29tcGlsZXJfY2FsbCBhbmQgY29tcGlsZXJfY2xhc3MgKi8KIHN0YXRpYyBpbnQKIGNvbXBpbGVyX2NhbGxfaGVscGVyKHN0cnVjdCBjb21waWxlciAqYywKLSAgICAgICAgICAgICAgICAgICAgIGludCBuLCAvKiBBcmdzIGFscmVhZHkgcHVzaGVkICovCi0gICAgICAgICAgICAgYXNkbF9zZXEgKmFyZ3MsCi0gICAgICAgICAgICAgYXNkbF9zZXEgKmtleXdvcmRzLAotICAgICAgICAgICAgIGV4cHJfdHkgc3RhcmFyZ3MsCi0gICAgICAgICAgICAgZXhwcl90eSBrd2FyZ3MpCisgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG4sIC8qIEFyZ3MgYWxyZWFkeSBwdXNoZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmtleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBzdGFyYXJncywKKyAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkga3dhcmdzKQogewogICAgIGludCBjb2RlID0gMDsKIApAQCAtMjk2MCw3ICszMDUxLDcgQEAKIAogICAgIGNvbXByZWhlbnNpb25fdHkgZ2VuOwogICAgIGJhc2ljYmxvY2sgKnN0YXJ0LCAqYW5jaG9yLCAqc2tpcCwgKmlmX2NsZWFudXA7Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogCiAgICAgc3RhcnQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CiAgICAgc2tpcCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKQEAgLTMwODUsOSArMzE3NiwxMCBAQAogICAgIH0KIAogICAgIGNvID0gYXNzZW1ibGUoYywgMSk7Ci0gICAgcXVhbG5hbWUgPSBjb21waWxlcl9zY29wZV9xdWFsbmFtZShjKTsKKyAgICBxdWFsbmFtZSA9IGMtPnUtPnVfcXVhbG5hbWU7CisgICAgUHlfSU5DUkVGKHF1YWxuYW1lKTsKICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgIGlmIChxdWFsbmFtZSA9PSBOVUxMIHx8IGNvID09IE5VTEwpCisgICAgaWYgKGNvID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoIWNvbXBpbGVyX21ha2VfY2xvc3VyZShjLCBjbywgMCwgcXVhbG5hbWUpKQpAQCAtMzE5NywxMiArMzI4OSwxOCBAQAogICAgIGNhc2UgTmFtZV9raW5kOgogICAgICAgICAvKiBvcHRpbWl6ZSBhd2F5IG5hbWVzIHRoYXQgY2FuJ3QgYmUgcmVhc3NpZ25lZCAqLwogICAgICAgICBpZCA9IFB5VW5pY29kZV9Bc1VURjgoZS0+di5OYW1lLmlkKTsKLSAgICAgICAgaWYgKHN0cmNtcChpZCwgIlRydWUiKSA9PSAwKSByZXR1cm4gMTsKLSAgICAgICAgaWYgKHN0cmNtcChpZCwgIkZhbHNlIikgPT0gMCkgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChzdHJjbXAoaWQsICJOb25lIikgPT0gMCkgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChzdHJjbXAoaWQsICJfX2RlYnVnX18iKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuICEgYy0+Y19vcHRpbWl6ZTsKLSAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgIGlmIChpZCAmJiBzdHJjbXAoaWQsICJfX2RlYnVnX18iKSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuICFjLT5jX29wdGltaXplOworICAgICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDogeworICAgICAgICBQeU9iamVjdCAqbyA9IGUtPnYuTmFtZUNvbnN0YW50LnZhbHVlOworICAgICAgICBpZiAobyA9PSBQeV9Ob25lKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UgaWYgKG8gPT0gUHlfVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBlbHNlIGlmIChvID09IFB5X0ZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0zMjkyLDcgKzMzOTAsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfdmlzaXRfZXhwcihzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKICAgICAvKiBJZiBleHByIGUgaGFzIGEgZGlmZmVyZW50IGxpbmUgbnVtYmVyIHRoYW4gdGhlIGxhc3QgZXhwci9zdG10LAogICAgICAgIHNldCBhIG5ldyBsaW5lIG51bWJlciBmb3IgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCkBAIC0zMzIxLDYgKzM0MTksOCBAQAogICAgICAgICByZXR1cm4gY29tcGlsZXJfaWZleHAoYywgZSk7CiAgICAgY2FzZSBEaWN0X2tpbmQ6CiAgICAgICAgIG4gPSBhc2RsX3NlcV9MRU4oZS0+di5EaWN0LnZhbHVlcyk7CisgICAgICAgIC8qIEJVSUxEX01BUCBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIHRvIHByZWFsbG9jYXRlIHRoZSBkaWN0aW9uYXJ5LAorICAgICAgICAgICBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgZXhhY3QgKi8KICAgICAgICAgQURET1BfSShjLCBCVUlMRF9NQVAsIChuPjB4RkZGRiA/IDB4RkZGRiA6IG4pKTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgVklTSVQoYywgZXhwciwKQEAgLTMzNzgsNiArMzQ3OCw5IEBACiAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X0VsbGlwc2lzLCBjb25zdHMpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgorICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIGUtPnYuTmFtZUNvbnN0YW50LnZhbHVlLCBjb25zdHMpOworICAgICAgICBicmVhazsKICAgICAvKiBUaGUgZm9sbG93aW5nIGV4cHJzIGNhbiBiZSBhc3NpZ25tZW50IHRhcmdldHMuICovCiAgICAgY2FzZSBBdHRyaWJ1dGVfa2luZDoKICAgICAgICAgaWYgKGUtPnYuQXR0cmlidXRlLmN0eCAhPSBBdWdTdG9yZSkKQEAgLTM1NDcsMTIgKzM2NTAsMTIgQEAKICAgICBQeU9iamVjdCAqbG9jOwogICAgIFB5T2JqZWN0ICp1ID0gTlVMTCwgKnYgPSBOVUxMOwogCi0gICAgbG9jID0gUHlFcnJfUHJvZ3JhbVRleHQoYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8pOworICAgIGxvYyA9IFB5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vKTsKICAgICBpZiAoIWxvYykgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIGxvYyA9IFB5X05vbmU7CiAgICAgfQotICAgIHUgPSBQeV9CdWlsZFZhbHVlKCIoT2lpTykiLCBjLT5jX2ZpbGVuYW1lX29iaiwgYy0+dS0+dV9saW5lbm8sCisgICAgdSA9IFB5X0J1aWxkVmFsdWUoIihPaWlPKSIsIGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vLAogICAgICAgICAgICAgICAgICAgICAgIGMtPnUtPnVfY29sX29mZnNldCwgbG9jKTsKICAgICBpZiAoIXUpCiAgICAgICAgIGdvdG8gZXhpdDsKQEAgLTM2NjUsNyArMzc2OCw3IEBACiAgICAgY2FzZSBFeHRTbGljZV9raW5kOgogICAgICAgICBraW5kbmFtZSA9ICJleHRlbmRlZCBzbGljZSI7CiAgICAgICAgIGlmIChjdHggIT0gQXVnU3RvcmUpIHsKLSAgICAgICAgICAgIGludCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuRXh0U2xpY2UuZGltcyk7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5FeHRTbGljZS5kaW1zKTsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzbGljZV90eSBzdWIgPSAoc2xpY2VfdHkpYXNkbF9zZXFfR0VUKAogICAgICAgICAgICAgICAgICAgICBzLT52LkV4dFNsaWNlLmRpbXMsIGkpOwpAQCAtMzcyNCw3ICszODI3LDcgQEAKIHN0YXRpYyBpbnQKIHN0YWNrZGVwdGhfd2FsayhzdHJ1Y3QgY29tcGlsZXIgKmMsIGJhc2ljYmxvY2sgKmIsIGludCBkZXB0aCwgaW50IG1heGRlcHRoKQogewotICAgIGludCBpLCB0YXJnZXRfZGVwdGg7CisgICAgaW50IGksIHRhcmdldF9kZXB0aCwgZWZmZWN0OwogICAgIHN0cnVjdCBpbnN0ciAqaW5zdHI7CiAgICAgaWYgKGItPmJfc2VlbiB8fCBiLT5iX3N0YXJ0ZGVwdGggPj0gZGVwdGgpCiAgICAgICAgIHJldHVybiBtYXhkZXB0aDsKQEAgLTM3MzIsNyArMzgzNSwxMyBAQAogICAgIGItPmJfc3RhcnRkZXB0aCA9IGRlcHRoOwogICAgIGZvciAoaSA9IDA7IGkgPCBiLT5iX2l1c2VkOyBpKyspIHsKICAgICAgICAgaW5zdHIgPSAmYi0+Yl9pbnN0cltpXTsKLSAgICAgICAgZGVwdGggKz0gb3Bjb2RlX3N0YWNrX2VmZmVjdChpbnN0ci0+aV9vcGNvZGUsIGluc3RyLT5pX29wYXJnKTsKKyAgICAgICAgZWZmZWN0ID0gUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KGluc3RyLT5pX29wY29kZSwgaW5zdHItPmlfb3BhcmcpOworICAgICAgICBpZiAoZWZmZWN0ID09IFBZX0lOVkFMSURfU1RBQ0tfRUZGRUNUKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9wY29kZSA9ICVkXG4iLCBpbnN0ci0+aV9vcGNvZGUpOworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KCkiKTsKKyAgICAgICAgfQorICAgICAgICBkZXB0aCArPSBlZmZlY3Q7CisKICAgICAgICAgaWYgKGRlcHRoID4gbWF4ZGVwdGgpCiAgICAgICAgICAgICBtYXhkZXB0aCA9IGRlcHRoOwogICAgICAgICBhc3NlcnQoZGVwdGggPj0gMCk7IC8qIGludmFsaWQgY29kZSBvciBidWcgaW4gc3RhY2tkZXB0aCgpICovCkBAIC0zNzkwLDcgKzM4OTksNyBAQAogICAgIGEtPmFfbG5vdGFiID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBERUZBVUxUX0xOT1RBQl9TSVpFKTsKICAgICBpZiAoIWEtPmFfbG5vdGFiKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobmJsb2NrcyA+IFBZX1NJWkVfTUFYIC8gc2l6ZW9mKGJhc2ljYmxvY2sgKikpIHsKKyAgICBpZiAoKHNpemVfdCluYmxvY2tzID4gUFlfU0laRV9NQVggLyBzaXplb2YoYmFzaWNibG9jayAqKSkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0zODQzLDcgKzM5NTIsNyBAQAogYXNzZW1ibGVfbG5vdGFiKHN0cnVjdCBhc3NlbWJsZXIgKmEsIHN0cnVjdCBpbnN0ciAqaSkKIHsKICAgICBpbnQgZF9ieXRlY29kZSwgZF9saW5lbm87Ci0gICAgaW50IGxlbjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKICAgICB1bnNpZ25lZCBjaGFyICpsbm90YWI7CiAKICAgICBkX2J5dGVjb2RlID0gYS0+YV9vZmZzZXQgLSBhLT5hX2xpbmVub19vZmY7CkBAIC00MDM0LDcgKzQxNDMsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9rZXlzX2lub3JkZXIoUHlPYmplY3QgKmRpY3QsIGludCBvZmZzZXQpCitkaWN0X2tleXNfaW5vcmRlcihQeU9iamVjdCAqZGljdCwgUHlfc3NpemVfdCBvZmZzZXQpCiB7CiAgICAgUHlPYmplY3QgKnR1cGxlLCAqaywgKnY7CiAgICAgUHlfc3NpemVfdCBpLCBwb3MgPSAwLCBzaXplID0gUHlEaWN0X1NpemUoZGljdCk7CkBAIC00MDU5LDEwICs0MTY4LDEwIEBACiBjb21wdXRlX2NvZGVfZmxhZ3Moc3RydWN0IGNvbXBpbGVyICpjKQogewogICAgIFB5U1RFbnRyeU9iamVjdCAqc3RlID0gYy0+dS0+dV9zdGU7Ci0gICAgaW50IGZsYWdzID0gMCwgbjsKLSAgICBpZiAoc3RlLT5zdGVfdHlwZSAhPSBNb2R1bGVCbG9jaykKLSAgICAgICAgZmxhZ3MgfD0gQ09fTkVXTE9DQUxTOworICAgIGludCBmbGFncyA9IDA7CisgICAgUHlfc3NpemVfdCBuOwogICAgIGlmIChzdGUtPnN0ZV90eXBlID09IEZ1bmN0aW9uQmxvY2spIHsKKyAgICAgICAgZmxhZ3MgfD0gQ09fTkVXTE9DQUxTOwogICAgICAgICBpZiAoIXN0ZS0+c3RlX3Vub3B0aW1pemVkKQogICAgICAgICAgICAgZmxhZ3MgfD0gQ09fT1BUSU1JWkVEOwogICAgICAgICBpZiAoc3RlLT5zdGVfbmVzdGVkKQpAQCAtNDA4NCw5ICs0MTkzLDkgQEAKICAgICBpZiAobiA9PSAwKSB7CiAgICAgICAgIG4gPSBQeURpY3RfU2l6ZShjLT51LT51X2NlbGx2YXJzKTsKICAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChuID09IDApIHsKLSAgICAgICAgZmxhZ3MgfD0gQ09fTk9GUkVFOworICAgICAgICAgICAgZmxhZ3MgfD0gQ09fTk9GUkVFOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MTA1LDcgKzQyMTQsMTAgQEAKICAgICBQeU9iamVjdCAqZnJlZXZhcnMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpjZWxsdmFycyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmJ5dGVjb2RlID0gTlVMTDsKLSAgICBpbnQgbmxvY2FscywgZmxhZ3M7CisgICAgUHlfc3NpemVfdCBubG9jYWxzOworICAgIGludCBubG9jYWxzX2ludDsKKyAgICBpbnQgZmxhZ3M7CisgICAgaW50IGFyZ2NvdW50LCBrd29ubHlhcmdjb3VudDsKIAogICAgIHRtcCA9IGRpY3Rfa2V5c19pbm9yZGVyKGMtPnUtPnVfY29uc3RzLCAwKTsKICAgICBpZiAoIXRtcCkKQEAgLTQxMjQsNyArNDIzNiwxMSBAQAogICAgIGZyZWV2YXJzID0gZGljdF9rZXlzX2lub3JkZXIoYy0+dS0+dV9mcmVldmFycywgUHlUdXBsZV9TaXplKGNlbGx2YXJzKSk7CiAgICAgaWYgKCFmcmVldmFycykKICAgICAgICAgZ290byBlcnJvcjsKKwogICAgIG5sb2NhbHMgPSBQeURpY3RfU2l6ZShjLT51LT51X3Zhcm5hbWVzKTsKKyAgICBhc3NlcnQobmxvY2FscyA8IElOVF9NQVgpOworICAgIG5sb2NhbHNfaW50ID0gUHlfU0FGRV9ET1dOQ0FTVChubG9jYWxzLCBQeV9zc2l6ZV90LCBpbnQpOworCiAgICAgZmxhZ3MgPSBjb21wdXRlX2NvZGVfZmxhZ3MoYyk7CiAgICAgaWYgKGZsYWdzIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTQxMzksMTEgKzQyNTUsMTMgQEAKICAgICBQeV9ERUNSRUYoY29uc3RzKTsKICAgICBjb25zdHMgPSB0bXA7CiAKLSAgICBjbyA9IFB5Q29kZV9OZXcoYy0+dS0+dV9hcmdjb3VudCwgYy0+dS0+dV9rd29ubHlhcmdjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgbmxvY2Fscywgc3RhY2tkZXB0aChjKSwgZmxhZ3MsCisgICAgYXJnY291bnQgPSBQeV9TQUZFX0RPV05DQVNUKGMtPnUtPnVfYXJnY291bnQsIFB5X3NzaXplX3QsIGludCk7CisgICAga3dvbmx5YXJnY291bnQgPSBQeV9TQUZFX0RPV05DQVNUKGMtPnUtPnVfa3dvbmx5YXJnY291bnQsIFB5X3NzaXplX3QsIGludCk7CisgICAgY28gPSBQeUNvZGVfTmV3KGFyZ2NvdW50LCBrd29ubHlhcmdjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgbmxvY2Fsc19pbnQsIHN0YWNrZGVwdGgoYyksIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICBieXRlY29kZSwgY29uc3RzLCBuYW1lcywgdmFybmFtZXMsCiAgICAgICAgICAgICAgICAgICAgIGZyZWV2YXJzLCBjZWxsdmFycywKLSAgICAgICAgICAgICAgICAgICAgYy0+Y19maWxlbmFtZV9vYmosIGMtPnUtPnVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9uYW1lLAogICAgICAgICAgICAgICAgICAgICBjLT51LT51X2ZpcnN0bGluZW5vLAogICAgICAgICAgICAgICAgICAgICBhLT5hX2xub3RhYik7CiAgZXJyb3I6CkBAIC00MjU5LDQgKzQzNzcsMyBAQAogICAgIHJldHVybiBQeUFTVF9Db21waWxlRXgobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIC0xLCBhcmVuYSk7CiB9CiAKLQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvbmR2YXIuaCBiL1B5dGhvbi9jb25kdmFyLmgKaW5kZXggYmJiNDBiYS4uZTAyMmRjNyAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvbmR2YXIuaAorKysgYi9QeXRob24vY29uZHZhci5oCkBAIC0yNDEsNyArMjQxLDcgQEAKICAgICAgKiBidXQgd2UgYXJlIHNhZmUgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgYSBzZW1hcGhvcmUgd2ljaCBoYXMgYW4gaW50ZXJuYWwKICAgICAgKiBjb3VudC4KICAgICAgKi8KLSAgICB3YWl0ID0gV2FpdEZvclNpbmdsZU9iamVjdChjdi0+c2VtLCBtcyk7CisgICAgd2FpdCA9IFdhaXRGb3JTaW5nbGVPYmplY3RFeChjdi0+c2VtLCBtcywgRkFMU0UpOwogICAgIFB5TVVURVhfTE9DSyhjcyk7CiAgICAgaWYgKHdhaXQgIT0gV0FJVF9PQkpFQ1RfMCkKICAgICAgICAgLS1jdi0+d2FpdGluZzsKZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX2FpeC5jIGIvUHl0aG9uL2R5bmxvYWRfYWl4LmMKaW5kZXggZjQwYTBiZS4uNWFjMzBlZCAxMDA2NDQKLS0tIGEvUHl0aG9uL2R5bmxvYWRfYWl4LmMKKysrIGIvUHl0aG9uL2R5bmxvYWRfYWl4LmMKQEAgLTMwLDExICszMCwxMSBAQAogc3RhdGljIGludAogYWl4X2dldG9sZG1vZHVsZXModm9pZCAqKm1vZGxpc3RwdHIpCiB7Ci0gICAgcmVnaXN0ZXIgTW9kdWxlUHRyICAgICAgIG1vZHB0ciwgcHJldm1vZHB0cjsKLSAgICByZWdpc3RlciBzdHJ1Y3QgbGRfaW5mbyAgKmxkaXB0cjsKLSAgICByZWdpc3RlciBjaGFyICAgICAgICAgICAgKmxkaWJ1ZjsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICAgZXJyZmxhZywgYnVmc2l6ZSA9IDEwMjQ7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50ICAgIG9mZnNldDsKKyAgICBNb2R1bGVQdHIgICAgICAgbW9kcHRyLCBwcmV2bW9kcHRyOworICAgIHN0cnVjdCBsZF9pbmZvICAqbGRpcHRyOworICAgIGNoYXIgICAgICAgICAgICAqbGRpYnVmOworICAgIGludCAgICAgICAgICAgICBlcnJmbGFnLCBidWZzaXplID0gMTAyNDsKKyAgICB1bnNpZ25lZCBpbnQgICAgb2Zmc2V0OwogICAgIGNoYXIgKnByb2duYW1lID0gUHlfR2V0UHJvZ3JhbU5hbWUoKTsKIAogICAgIC8qCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICBjaGFyICptZXNzYWdlWzEwMjRdLCBlcnJidWZbMTAyNF07CiAgICAgUHlPYmplY3QgKnBhdGhuYW1lX29iID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXJyYnVmX29iID0gTlVMTDsKLSAgICByZWdpc3RlciBpbnQgaSxqOworICAgIGludCBpLGo7CiAKICAgICBzdHJ1Y3QgZXJydGFiIHsKICAgICAgICAgaW50IGVyck5vOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2R5bmxvYWRfb3MyLmMgYi9QeXRob24vZHlubG9hZF9vczIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUxYjkwNy4uMDAwMDAwMAotLS0gYS9QeXRob24vZHlubG9hZF9vczIuYworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLQotLyogU3VwcG9ydCBmb3IgZHluYW1pYyBsb2FkaW5nIG9mIGV4dGVuc2lvbiBtb2R1bGVzICovCi0KLSNkZWZpbmUgIElOQ0xfRE9TRVJST1JTCi0jZGVmaW5lICBJTkNMX0RPU01PRFVMRU1HUgotI2luY2x1ZGUgPG9zMi5oPgotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAiaW1wb3J0ZGwuaCIKLQotCi1jb25zdCBjaGFyICpfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWJbXSA9IHsiLnB5ZCIsICIuZGxsIiwgTlVMTH07Ci0KLWRsX2Z1bmNwdHIgX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jKGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBGSUxFICpmcCkKLXsKLSAgICBkbF9mdW5jcHRyIHA7Ci0gICAgQVBJUkVUICByYzsKLSAgICBITU9EVUxFIGhETEw7Ci0gICAgY2hhciBmYWlscmVhc29uWzI1Nl07Ci0gICAgY2hhciBmdW5jbmFtZVsyNThdOwotCi0gICAgcmMgPSBEb3NMb2FkTW9kdWxlKGZhaWxyZWFzb24sCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihmYWlscmVhc29uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICZoRExMKTsKLQotICAgIGlmIChyYyAhPSBOT19FUlJPUikgewotICAgICAgICBjaGFyIGVyckJ1ZlsyNTZdOwotICAgICAgICBQeU9TX3NucHJpbnRmKGVyckJ1Ziwgc2l6ZW9mKGVyckJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgIkRMTCBsb2FkIGZhaWxlZCwgcmMgPSAlZDogJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICByYywgZmFpbHJlYXNvbik7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwgZXJyQnVmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgUHlPU19zbnByaW50ZihmdW5jbmFtZSwgc2l6ZW9mKGZ1bmNuYW1lKSwgIlB5SW5pdF8lLjIwMHMiLCBzaG9ydG5hbWUpOwotICAgIHJjID0gRG9zUXVlcnlQcm9jQWRkcihoRExMLCAwTCwgZnVuY25hbWUsICZwKTsKLSAgICBpZiAocmMgIT0gTk9fRVJST1IpCi0gICAgICAgIHAgPSBOVUxMOyAvKiBTaWduaWZ5IEZhaWx1cmUgdG8gQWNxdWlyZSBFbnRyeXBvaW50ICovCi0gICAgcmV0dXJuIHA7Ci19CmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF9zaGxpYi5jIGIvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYwppbmRleCA3NTU0NGVkLi41Y2QxZWZkIDEwMDY0NAotLS0gYS9QeXRob24vZHlubG9hZF9zaGxpYi5jCisrKyBiL1B5dGhvbi9keW5sb2FkX3NobGliLmMKQEAgLTE4LDEwICsxOCw2IEBACiAKICNpZmRlZiBIQVZFX0RMRkNOX0gKICNpbmNsdWRlIDxkbGZjbi5oPgotI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgImRsZmNuLmgiCi0jZW5kaWYKICNlbmRpZgogCiAjaWYgKGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykpICYmICFkZWZpbmVkKF9fRUxGX18pCkBAIC00MCwzMCArMzYsMTYgQEAKICNpZmRlZiBfX0NZR1dJTl9fCiAgICAgIi5kbGwiLAogI2Vsc2UgIC8qICFfX0NZR1dJTl9fICovCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICAiLnB5ZCIsCi0gICAgIi5kbGwiLAotI2Vsc2UgIC8qICEoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykpICovCi0jaWZkZWYgX19WTVMKLSAgICAiLmV4ZSIsCi0gICAgIi5FWEUiLAotI2Vsc2UgIC8qICFfX1ZNUyAqLwogICAgICIuIiBTT0FCSSAiLnNvIiwKICAgICAiLmFiaSIgUFlUSE9OX0FCSV9TVFJJTkcgIi5zbyIsCiAgICAgIi5zbyIsCi0jZW5kaWYgIC8qIF9fVk1TICovCi0jZW5kaWYgIC8qIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpICovCiAjZW5kaWYgIC8qIF9fQ1lHV0lOX18gKi8KICAgICBOVUxMLAogfTsKIAogc3RhdGljIHN0cnVjdCB7CiAgICAgZGV2X3QgZGV2OwotI2lmZGVmIF9fVk1TCi0gICAgaW5vX3QgaW5vWzNdOwotI2Vsc2UKICAgICBpbm9fdCBpbm87Ci0jZW5kaWYKICAgICB2b2lkICpoYW5kbGU7CiB9IGhhbmRsZXNbMTI4XTsKIHN0YXRpYyBpbnQgbmhhbmRsZXMgPSAwOwpAQCAtMTA0LDQ3ICs4NiwzOSBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChuaGFuZGxlcyA8IDEyOCkgewogICAgICAgICAgICAgaGFuZGxlc1tuaGFuZGxlc10uZGV2ID0gc3RhdGIuc3RfZGV2OwotI2lmZGVmIF9fVk1TCi0gICAgICAgICAgICBoYW5kbGVzW25oYW5kbGVzXS5pbm9bMF0gPSBzdGF0Yi5zdF9pbm9bMF07Ci0gICAgICAgICAgICBoYW5kbGVzW25oYW5kbGVzXS5pbm9bMV0gPSBzdGF0Yi5zdF9pbm9bMV07Ci0gICAgICAgICAgICBoYW5kbGVzW25oYW5kbGVzXS5pbm9bMl0gPSBzdGF0Yi5zdF9pbm9bMl07Ci0jZWxzZQogICAgICAgICAgICAgaGFuZGxlc1tuaGFuZGxlc10uaW5vID0gc3RhdGIuc3RfaW5vOwotI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAKLSNpZiAhKGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpKQogICAgIGRsb3BlbmZsYWdzID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwLT5kbG9wZW5mbGFnczsKLSNlbmRpZgotCi0jaWZkZWYgX19WTVMKLSAgICAvKiBWTVMgY3VycmVudGx5IGRvbid0IGFsbG93IGEgcGF0aG5hbWUsIHVzZSBhIGxvZ2ljYWwgbmFtZSBpbnN0ZWFkICovCi0gICAgLyogQ29uY2F0ZW5hdGUgJ3B5dGhvbl9tb2R1bGVfJyBhbmQgc2hvcnRuYW1lICovCi0gICAgLyogc28gImltcG9ydCB2bXMuYmFyIiB3aWxsIHVzZSB0aGUgbG9naWNhbCBweXRob25fbW9kdWxlX2JhciAqLwotICAgIC8qIEFzIEMgbW9kdWxlIHVzZSBvbmx5IG9uZSBuYW1lIHNwYWNlIHRoaXMgaXMgcHJvYmFibHkgbm90IGEgKi8KLSAgICAvKiBpbXBvcnRhbnQgbGltaXRhdGlvbiAqLwotICAgIFB5T1Nfc25wcmludGYocGF0aGJ1Ziwgc2l6ZW9mKHBhdGhidWYpLCAicHl0aG9uX21vZHVsZV8lLS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgIHNob3J0bmFtZSk7Ci0gICAgcGF0aG5hbWUgPSBwYXRoYnVmOwotI2VuZGlmCiAKICAgICBoYW5kbGUgPSBkbG9wZW4ocGF0aG5hbWUsIGRsb3BlbmZsYWdzKTsKIAogICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqbW9kX25hbWUgPSBOVUxMOwotICAgICAgICBQeU9iamVjdCAqcGF0aCA9IE5VTEw7Ci0gICAgICAgIFB5T2JqZWN0ICplcnJvcl9vYiA9IE5VTEw7CisgICAgICAgIFB5T2JqZWN0ICptb2RfbmFtZTsKKyAgICAgICAgUHlPYmplY3QgKnBhdGg7CisgICAgICAgIFB5T2JqZWN0ICplcnJvcl9vYjsKICAgICAgICAgY29uc3QgY2hhciAqZXJyb3IgPSBkbGVycm9yKCk7CiAgICAgICAgIGlmIChlcnJvciA9PSBOVUxMKQogICAgICAgICAgICAgZXJyb3IgPSAidW5rbm93biBkbG9wZW4oKSBlcnJvciI7CiAgICAgICAgIGVycm9yX29iID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZXJyb3IpOwotICAgICAgICBwYXRoID0gUHlVbmljb2RlX0Zyb21TdHJpbmcocGF0aG5hbWUpOworICAgICAgICBpZiAoZXJyb3Jfb2IgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBtb2RfbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHNob3J0bmFtZSk7CisgICAgICAgIGlmIChtb2RfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXJyb3Jfb2IpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcGF0aCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHBhdGhuYW1lKTsKKyAgICAgICAgaWYgKHBhdGggPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVycm9yX29iKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtb2RfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBQeUVycl9TZXRJbXBvcnRFcnJvcihlcnJvcl9vYiwgbW9kX25hbWUsIHBhdGgpOwotICAgICAgICBQeV9YREVDUkVGKGVycm9yX29iKTsKLSAgICAgICAgUHlfWERFQ1JFRihwYXRoKTsKLSAgICAgICAgUHlfWERFQ1JFRihtb2RfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihlcnJvcl9vYik7CisgICAgICAgIFB5X0RFQ1JFRihtb2RfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihwYXRoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChmcCAhPSBOVUxMICYmIG5oYW5kbGVzIDwgMTI4KQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Vycm9ycy5jIGIvUHl0aG9uL2Vycm9ycy5jCmluZGV4IDYyNmIxNmUuLjk5NjI5MmEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9lcnJvcnMuYworKysgYi9QeXRob24vZXJyb3JzLmMKQEAgLTIwLDYgKzIwLDkgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CisKIAogdm9pZAogUHlFcnJfUmVzdG9yZShQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdHJhY2ViYWNrKQpAQCAtNzEsNiArNzQsMTEgQEAKICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwgfHwgIVB5RXhjZXB0aW9uSW5zdGFuY2VfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgICAgICAvKiBXZSBtdXN0IG5vcm1hbGl6ZSB0aGUgdmFsdWUgcmlnaHQgbm93ICovCiAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgKmZpeGVkX3ZhbHVlOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgICAgICAvKiBpbiBkZWJ1ZyBtb2RlLCBQeUV2YWxfRXZhbEZyYW1lRXgoKSBmYWlscyB3aXRoIGFuIGFzc2VydGlvbgorICAgICAgICAgICAgICAgZXJyb3IgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCB3aGVuIGl0IGlzIGNhbGxlZCAqLworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyNlbmRpZgogICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwgfHwgdmFsdWUgPT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7CiAgICAgICAgICAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKHZhbHVlKSkgewpAQCAtMTEyLDYgKzEyMCwyMCBAQAogICAgIFB5RXJyX1Jlc3RvcmUoZXhjZXB0aW9uLCB2YWx1ZSwgdGIpOwogfQogCisvKiBTZXQgYSBrZXkgZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50LCB3cmFwcGluZyBpdCBpbiBhCisgKiB0dXBsZSBhdXRvbWF0aWNhbGx5IHNvIHRoYXQgdHVwbGUga2V5cyBhcmUgbm90IHVucGFja2VkIGFzIHRoZQorICogZXhjZXB0aW9uIGFyZ3VtZW50cy4gKi8KK3ZvaWQKK19QeUVycl9TZXRLZXlFcnJvcihQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICp0dXA7CisgICAgdHVwID0gUHlUdXBsZV9QYWNrKDEsIGFyZyk7CisgICAgaWYgKCF0dXApCisgICAgICAgIHJldHVybjsgLyogY2FsbGVyIHdpbGwgZXhwZWN0IGVycm9yIHRvIGJlIHNldCBhbnl3YXkgKi8KKyAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIHR1cCk7CisgICAgUHlfREVDUkVGKHR1cCk7Cit9CisKIHZvaWQKIFB5RXJyX1NldE5vbmUoUHlPYmplY3QgKmV4Y2VwdGlvbikKIHsKQEAgLTIyNywxMiArMjQ5LDIxIEBACiAgICAgICAgdmFsdWUgd2lsbCBiZSBhbiBpbnN0YW5jZS4KICAgICAqLwogICAgIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHR5cGUpKSB7CisgICAgICAgIGludCBpc19zdWJjbGFzczsKKyAgICAgICAgaWYgKGluY2xhc3MpIHsKKyAgICAgICAgICAgIGlzX3N1YmNsYXNzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhpbmNsYXNzLCB0eXBlKTsKKyAgICAgICAgICAgIGlmIChpc19zdWJjbGFzcyA8IDApCisgICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlzX3N1YmNsYXNzID0gMDsKKwogICAgICAgICAvKiBpZiB0aGUgdmFsdWUgd2FzIG5vdCBhbiBpbnN0YW5jZSwgb3IgaXMgbm90IGFuIGluc3RhbmNlCiAgICAgICAgICAgIHdob3NlIGNsYXNzIGlzIChvciBpcyBkZXJpdmVkIGZyb20pIHR5cGUsIHRoZW4gdXNlIHRoZQogICAgICAgICAgICB2YWx1ZSBhcyBhbiBhcmd1bWVudCB0byBpbnN0YW50aWF0aW9uIG9mIHRoZSB0eXBlCiAgICAgICAgICAgIGNsYXNzLgogICAgICAgICAqLwotICAgICAgICBpZiAoIWluY2xhc3MgfHwgIVB5T2JqZWN0X0lzU3ViY2xhc3MoaW5jbGFzcywgdHlwZSkpIHsKKyAgICAgICAgaWYgKCFpbmNsYXNzIHx8ICFpc19zdWJjbGFzcykgewogICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsICpyZXM7CiAKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBQeV9Ob25lKQpAQCAtMzY2LDYgKzM5NywxMiBAQAogUHlPYmplY3QgKgogUHlFcnJfTm9NZW1vcnkodm9pZCkKIHsKKyAgICBpZiAoUHlfVFlQRShQeUV4Y19NZW1vcnlFcnJvcikgPT0gTlVMTCkgeworICAgICAgICAvKiBQeUVycl9Ob01lbW9yeSgpIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUgUHlFeGNfTWVtb3J5RXJyb3IgaGFzIGJlZW4KKyAgICAgICAgICAgaW5pdGlhbGl6ZWQgYnkgX1B5RXhjX0luaXQoKSAqLworICAgICAgICBQeV9GYXRhbEVycm9yKCJPdXQgb2YgbWVtb3J5IGFuZCBQeUV4Y19NZW1vcnlFcnJvciBpcyBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsaXplZCB5ZXQiKTsKKyAgICB9CiAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19NZW1vcnlFcnJvcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0zNzMsNiArNDEwLDEyIEBACiBQeU9iamVjdCAqCiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlPYmplY3QgKmV4YywgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0KQogeworICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RzKGV4YywgZmlsZW5hbWVPYmplY3QsIE5VTEwpOworfQorCitQeU9iamVjdCAqCitQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RzKFB5T2JqZWN0ICpleGMsIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdCwgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0MikKK3sKICAgICBQeU9iamVjdCAqbWVzc2FnZTsKICAgICBQeU9iamVjdCAqdiwgKmFyZ3M7CiAgICAgaW50IGkgPSBlcnJubzsKQEAgLTQ0MywxMCArNDg2LDE1IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChmaWxlbmFtZU9iamVjdCAhPSBOVUxMKQotICAgICAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSgiKGlPTykiLCBpLCBtZXNzYWdlLCBmaWxlbmFtZU9iamVjdCk7Ci0gICAgZWxzZQorICAgIGlmIChmaWxlbmFtZU9iamVjdCAhPSBOVUxMKSB7CisgICAgICAgIGlmIChmaWxlbmFtZU9iamVjdDIgIT0gTlVMTCkKKyAgICAgICAgICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlKCIoaU9PaU8pIiwgaSwgbWVzc2FnZSwgZmlsZW5hbWVPYmplY3QsIDAsIGZpbGVuYW1lT2JqZWN0Mik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlKCIoaU9PKSIsIGksIG1lc3NhZ2UsIGZpbGVuYW1lT2JqZWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NlcnQoZmlsZW5hbWVPYmplY3QyID09IE5VTEwpOwogICAgICAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSgiKGlPKSIsIGksIG1lc3NhZ2UpOworICAgIH0KICAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAKICAgICBpZiAoYXJncyAhPSBOVUxMKSB7CkBAIC00NjMsMTIgKzUxMSwxMSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0KIFB5T2JqZWN0ICoKIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeU9iamVjdCAqZXhjLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSkgOiBOVUxMOwotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoZXhjLCBuYW1lKTsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0cyhleGMsIG5hbWUsIE5VTEwpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ4MCw3ICs1MjcsNyBAQAogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPwogICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Vbmljb2RlKGZpbGVuYW1lLCB3Y3NsZW4oZmlsZW5hbWUpKSA6CiAgICAgICAgICAgICAgTlVMTDsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KGV4YywgbmFtZSk7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoZXhjLCBuYW1lLCBOVUxMKTsKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00ODksNyArNTM2LDcgQEAKIFB5T2JqZWN0ICoKIFB5RXJyX1NldEZyb21FcnJubyhQeU9iamVjdCAqZXhjKQogewotICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoZXhjLCBOVUxMKTsKKyAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0cyhleGMsIE5VTEwsIE5VTEwpOwogfQogCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtNDk5LDYgKzU0NiwxNiBAQAogICAgIGludCBpZXJyLAogICAgIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdCkKIHsKKyAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKGV4YywgaWVyciwKKyAgICAgICAgZmlsZW5hbWVPYmplY3QsIE5VTEwpOworfQorCitQeU9iamVjdCAqUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKAorICAgIFB5T2JqZWN0ICpleGMsCisgICAgaW50IGllcnIsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0LAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdDIpCit7CiAgICAgaW50IGxlbjsKICAgICBXQ0hBUiAqc19idWYgPSBOVUxMOyAvKiBGcmVlIHZpYSBMb2NhbEZyZWUgKi8KICAgICBQeU9iamVjdCAqbWVzc2FnZTsKQEAgLTUzNCwxMSArNTkxLDE1IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChmaWxlbmFtZU9iamVjdCA9PSBOVUxMKQotICAgICAgICBmaWxlbmFtZU9iamVjdCA9IFB5X05vbmU7Ci0gICAgLyogVGhpcyBpcyB0aGUgY29uc3RydWN0b3Igc2lnbmF0dXJlIGZvciBwYXNzaW5nIGEgV2luZG93cyBlcnJvciBjb2RlLgorICAgIGlmIChmaWxlbmFtZU9iamVjdCA9PSBOVUxMKSB7CisgICAgICAgIGFzc2VydChmaWxlbmFtZU9iamVjdDIgPT0gTlVMTCk7CisgICAgICAgIGZpbGVuYW1lT2JqZWN0ID0gZmlsZW5hbWVPYmplY3QyID0gUHlfTm9uZTsKKyAgICB9CisgICAgZWxzZSBpZiAoZmlsZW5hbWVPYmplY3QyID09IE5VTEwpCisgICAgICAgIGZpbGVuYW1lT2JqZWN0MiA9IFB5X05vbmU7CisgICAgLyogVGhpcyBpcyB0aGUgY29uc3RydWN0b3Igc2lnbmF0dXJlIGZvciBPU0Vycm9yLgogICAgICAgIFRoZSBQT1NJWCB0cmFuc2xhdGlvbiB3aWxsIGJlIGZpZ3VyZWQgb3V0IGJ5IHRoZSBjb25zdHJ1Y3Rvci4gKi8KLSAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSgiKGlPT2kpIiwgMCwgbWVzc2FnZSwgZmlsZW5hbWVPYmplY3QsIGVycik7CisgICAgYXJncyA9IFB5X0J1aWxkVmFsdWUoIihpT09pTykiLCAwLCBtZXNzYWdlLCBmaWxlbmFtZU9iamVjdCwgZXJyLCBmaWxlbmFtZU9iamVjdDIpOwogICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKIAogICAgIGlmIChhcmdzICE9IE5VTEwpIHsKQEAgLTU1OSw5ICs2MjAsMTAgQEAKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSkgOiBOVUxMOwotICAgIFB5T2JqZWN0ICpyZXQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdChleGMsCisgICAgUHlPYmplY3QgKnJldCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0cyhleGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXQ7CiB9CkBAIC01NzQsOSArNjM2LDEwIEBACiAgICAgUHlPYmplY3QgKm5hbWUgPSBmaWxlbmFtZSA/CiAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoZmlsZW5hbWUsIHdjc2xlbihmaWxlbmFtZSkpIDoKICAgICAgICAgICAgICBOVUxMOwotICAgIFB5T2JqZWN0ICpyZXQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdChleGMsCisgICAgUHlPYmplY3QgKnJldCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0cyhleGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXQ7CiB9CkBAIC01ODgsMTcgKzY1MSwxOCBAQAogCiBQeU9iamVjdCAqUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoaW50IGllcnIpCiB7Ci0gICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgTlVMTCk7CiB9CisKIFB5T2JqZWN0ICpQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZSgKICAgICBpbnQgaWVyciwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSkgOiBOVUxMOwotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLCBuYW1lKTsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLCBuYW1lLCBOVUxMKTsKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC02MTAsOSArNjc0LDkgQEAKICAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8KICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tVW5pY29kZShmaWxlbmFtZSwgd2NzbGVuKGZpbGVuYW1lKSkgOgogICAgICAgICAgICAgIE5VTEw7Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsIG5hbWUpOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsIG5hbWUsIE5VTEwpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTY0Niw4ICs3MTAsMTEgQEAKIAogICAgIFB5X0lOQ1JFRihtc2cpOwogICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMCwgbXNnKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJuYW1lIiwgbmFtZSk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dhcmdzLCAicGF0aCIsIHBhdGgpOworCisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3YXJncywgIm5hbWUiLCBuYW1lKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJwYXRoIiwgcGF0aCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGVycm9yID0gUHlPYmplY3RfQ2FsbChQeUV4Y19JbXBvcnRFcnJvciwgYXJncywga3dhcmdzKTsKICAgICBpZiAoZXJyb3IgIT0gTlVMTCkgewpAQCAtNjc1LDYgKzc0Miw3IEBACiB2b2lkCiBQeUVycl9CYWRJbnRlcm5hbENhbGwodm9pZCkKIHsKKyAgICBhc3NlcnQoMCAmJiAiYmFkIGFyZ3VtZW50IHRvIGludGVybmFsIGZ1bmN0aW9uIik7CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAiYmFkIGFyZ3VtZW50IHRvIGludGVybmFsIGZ1bmN0aW9uIik7CiB9CkBAIC02OTQsNiArNzYyLDEyIEBACiAgICAgdmFfc3RhcnQodmFyZ3MpOwogI2VuZGlmCiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIGluIGRlYnVnIG1vZGUsIFB5RXZhbF9FdmFsRnJhbWVFeCgpIGZhaWxzIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yCisgICAgICAgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCB3aGVuIGl0IGlzIGNhbGxlZCAqLworICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKKwogICAgIHN0cmluZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihmb3JtYXQsIHZhcmdzKTsKICAgICBQeUVycl9TZXRPYmplY3QoZXhjZXB0aW9uLCBzdHJpbmcpOwogICAgIFB5X1hERUNSRUYoc3RyaW5nKTsKQEAgLTc5NSw2MCArODY5LDg0IEBACiB7CiAgICAgX1B5X0lERU5USUZJRVIoX19tb2R1bGVfXyk7CiAgICAgUHlPYmplY3QgKmYsICp0LCAqdiwgKnRiOwotICAgIFB5RXJyX0ZldGNoKCZ0LCAmdiwgJnRiKTsKLSAgICBmID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKLSAgICBpZiAoZiAhPSBOVUxMICYmIGYgIT0gUHlfTm9uZSkgewotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIkV4Y2VwdGlvbiAiLCBmKTsKLSAgICAgICAgaWYgKHQpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0KiBtb2R1bGVOYW1lOwotICAgICAgICAgICAgY2hhciogY2xhc3NOYW1lOwotICAgICAgICAgICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodCkpOwotICAgICAgICAgICAgY2xhc3NOYW1lID0gUHlFeGNlcHRpb25DbGFzc19OYW1lKHQpOwotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY2hhciAqZG90ID0gc3RycmNocihjbGFzc05hbWUsICcuJyk7Ci0gICAgICAgICAgICAgICAgaWYgKGRvdCAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBkb3QrMTsKLSAgICAgICAgICAgIH0KKyAgICBQeU9iamVjdCAqbW9kdWxlTmFtZSA9IE5VTEw7CisgICAgY2hhciogY2xhc3NOYW1lOwogCi0gICAgICAgICAgICBtb2R1bGVOYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZCh0LCAmUHlJZF9fX21vZHVsZV9fKTsKLSAgICAgICAgICAgIGlmIChtb2R1bGVOYW1lID09IE5VTEwpCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGNoYXIqIG1vZHN0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobW9kdWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1vZHN0ciAmJgotICAgICAgICAgICAgICAgICAgICBzdHJjbXAobW9kc3RyLCAiYnVpbHRpbnMiKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKG1vZHN0ciwgZik7Ci0gICAgICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiLiIsIGYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhjbGFzc05hbWUsIGYpOwotICAgICAgICAgICAgaWYgKHYgJiYgdiAhPSBQeV9Ob25lKSB7Ci0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGYpOwotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdCh2LCBmLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X1hERUNSRUYobW9kdWxlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9iaikgewotICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIgaW4gIiwgZik7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3Qob2JqLCBmLCAwKTsKLSAgICAgICAgfQotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIiBpZ25vcmVkXG4iLCBmKTsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsgLyogSnVzdCBpbiBjYXNlICovCisgICAgUHlFcnJfRmV0Y2goJnQsICZ2LCAmdGIpOworCisgICAgZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOworICAgIGlmIChmID09IE5VTEwgfHwgZiA9PSBQeV9Ob25lKQorICAgICAgICBnb3RvIGRvbmU7CisKKyAgICBpZiAob2JqKSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIkV4Y2VwdGlvbiBpZ25vcmVkIGluOiAiLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3Qob2JqLCBmLCAwKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOwogICAgIH0KKworICAgIGlmIChQeVRyYWNlQmFja19QcmludCh0YiwgZikgPCAwKQorICAgICAgICBnb3RvIGRvbmU7CisKKyAgICBpZiAoIXQpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGFzc2VydChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHQpKTsKKyAgICBjbGFzc05hbWUgPSBQeUV4Y2VwdGlvbkNsYXNzX05hbWUodCk7CisgICAgaWYgKGNsYXNzTmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGNoYXIgKmRvdCA9IHN0cnJjaHIoY2xhc3NOYW1lLCAnLicpOworICAgICAgICBpZiAoZG90ICE9IE5VTEwpCisgICAgICAgICAgICBjbGFzc05hbWUgPSBkb3QrMTsKKyAgICB9CisKKyAgICBtb2R1bGVOYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZCh0LCAmUHlJZF9fX21vZHVsZV9fKTsKKyAgICBpZiAobW9kdWxlTmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobW9kdWxlTmFtZSwgJlB5SWRfYnVpbHRpbnMpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QobW9kdWxlTmFtZSwgZiwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiLiIsIGYpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNsYXNzTmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoY2xhc3NOYW1lLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgaWYgKHYgJiYgdiAhPSBQeV9Ob25lKSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjogIiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KHYsIGYsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGYpIDwgMCkKKyAgICAgICAgZ290byBkb25lOworCitkb25lOgorICAgIFB5X1hERUNSRUYobW9kdWxlTmFtZSk7CiAgICAgUHlfWERFQ1JFRih0KTsKICAgICBQeV9YREVDUkVGKHYpOwogICAgIFB5X1hERUNSRUYodGIpOworICAgIFB5RXJyX0NsZWFyKCk7IC8qIEp1c3QgaW4gY2FzZSAqLwogfQogCiBleHRlcm4gUHlPYmplY3QgKlB5TW9kdWxlX0dldFdhcm5pbmdzTW9kdWxlKHZvaWQpOwogCiAKIHZvaWQKLVB5RXJyX1N5bnRheExvY2F0aW9uKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKSB7CitQeUVycl9TeW50YXhMb2NhdGlvbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3sKICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBsaW5lbm8sIC0xKTsKIH0KIApAQCAtODU4LDcgKzk1Niw3IEBACiAgICB0byBtYWtlIHByaW50aW5nIG9mIGV4Y2VwdGlvbnMgYmVsaWV2ZSBpdCBpcyBhIHN5bnRheCBlcnJvci4gKi8KIAogdm9pZAotUHlFcnJfU3ludGF4TG9jYXRpb25FeChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCitQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIFB5T2JqZWN0ICpleGMsICp2LCAqdGIsICp0bXA7CiAgICAgX1B5X0lERU5USUZJRVIoZmlsZW5hbWUpOwpAQCAtODkyLDE2ICs5OTAsMTAgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZmlsZW5hbWUgIT0gTlVMTCkgewotICAgICAgICB0bXAgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZCh2LCAmUHlJZF9maWxlbmFtZSwgZmlsZW5hbWUpKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZCh2LCAmUHlJZF9maWxlbmFtZSwgdG1wKSkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7Ci0gICAgICAgIH0KIAotICAgICAgICB0bXAgPSBQeUVycl9Qcm9ncmFtVGV4dChmaWxlbmFtZSwgbGluZW5vKTsKKyAgICAgICAgdG1wID0gUHlFcnJfUHJvZ3JhbVRleHRPYmplY3QoZmlsZW5hbWUsIGxpbmVubyk7CiAgICAgICAgIGlmICh0bXApIHsKICAgICAgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHYsICZQeUlkX3RleHQsIHRtcCkpCiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTkzMSwyMiArMTAyMywzMyBAQAogICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2LCB0Yik7CiB9CiAKK3ZvaWQKK1B5RXJyX1N5bnRheExvY2F0aW9uRXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQoreworICAgIFB5T2JqZWN0ICpmaWxlb2JqOworICAgIGlmIChmaWxlbmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGZpbGVvYmogPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKGZpbGVvYmogPT0gTlVMTCkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgZmlsZW9iaiA9IE5VTEw7CisgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoZmlsZW9iaiwgbGluZW5vLCBjb2xfb2Zmc2V0KTsKKyAgICBQeV9YREVDUkVGKGZpbGVvYmopOworfQorCiAvKiBBdHRlbXB0IHRvIGxvYWQgdGhlIGxpbmUgb2YgdGV4dCB0aGF0IHRoZSBleGNlcHRpb24gcmVmZXJzIHRvLiAgSWYgaXQKICAgIGZhaWxzLCBpdCB3aWxsIHJldHVybiBOVUxMIGJ1dCB3aWxsIG5vdCBzZXQgYW4gZXhjZXB0aW9uLgogCiAgICBYWFggVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBmdW5jdGlvbiBpcyBxdWl0ZSBzaW1pbGFyIHRvIHRoZQogICAgZnVuY3Rpb25hbGl0eSBpbiB0Yl9kaXNwbGF5bGluZSgpIGluIHRyYWNlYmFjay5jLiAqLwogCi1QeU9iamVjdCAqCi1QeUVycl9Qcm9ncmFtVGV4dChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3N0YXRpYyBQeU9iamVjdCAqCitlcnJfcHJvZ3JhbXRleHQoRklMRSAqZnAsIGludCBsaW5lbm8pCiB7Ci0gICAgRklMRSAqZnA7CiAgICAgaW50IGk7CiAgICAgY2hhciBsaW5lYnVmWzEwMDBdOwogCi0gICAgaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgKmZpbGVuYW1lID09ICdcMCcgfHwgbGluZW5vIDw9IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGZwID0gZm9wZW4oZmlsZW5hbWUsICJyIiBQWV9TVERJT1RFWFRNT0RFKTsKICAgICBpZiAoZnAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVubzsgaSsrKSB7CkBAIC05NzcsNiArMTA4MCwyNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitQeU9iamVjdCAqCitQeUVycl9Qcm9ncmFtVGV4dChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3sKKyAgICBGSUxFICpmcDsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCAqZmlsZW5hbWUgPT0gJ1wwJyB8fCBsaW5lbm8gPD0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZnAgPSBfUHlfZm9wZW4oZmlsZW5hbWUsICJyIiBQWV9TVERJT1RFWFRNT0RFKTsKKyAgICByZXR1cm4gZXJyX3Byb2dyYW10ZXh0KGZwLCBsaW5lbm8pOworfQorCitQeU9iamVjdCAqCitQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8pCit7CisgICAgRklMRSAqZnA7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgbGluZW5vIDw9IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZwID0gX1B5X2ZvcGVuX29iaihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOworICAgIHJldHVybiBlcnJfcHJvZ3JhbXRleHQoZnAsIGxpbmVubyk7Cit9CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9QeXRob24vZmlsZXV0aWxzLmMgYi9QeXRob24vZmlsZXV0aWxzLmMKaW5kZXggZDI1MTExZi4uYTU1MDY0ZiAxMDA2NDQKLS0tIGEvUHl0aG9uL2ZpbGV1dGlscy5jCisrKyBiL1B5dGhvbi9maWxldXRpbHMuYwpAQCAtMTAsMjAgKzEwLDM5IEBACiAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KICNlbmRpZgogCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmIC8qIEhBVkVfRkNOVExfSCAqLworCiAjaWZkZWYgX19BUFBMRV9fCiBleHRlcm4gd2NoYXJfdCogX1B5X0RlY29kZVVURjhfc3Vycm9nYXRlZXNjYXBlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSk7CiAjZW5kaWYKIAorI2lmZGVmIE9fQ0xPRVhFQworLyogRG9lcyBvcGVuKCkgc3VwcG9ydCB0aGUgT19DTE9FWEVDIGZsYWc/IFBvc3NpYmxlIHZhbHVlczoKKworICAgLTE6IHVua25vd24KKyAgICAwOiBvcGVuKCkgaWdub3JlcyBPX0NMT0VYRUMgZmxhZywgZXg6IExpbnV4IGtlcm5lbCBvbGRlciB0aGFuIDIuNi4yMworICAgIDE6IG9wZW4oKSBzdXBwb3J0cyBPX0NMT0VYRUMgZmxhZywgY2xvc2Utb24tZXhlYyBpcyBzZXQKKworICAgVGhlIGZsYWcgaXMgdXNlZCBieSBfUHlfb3BlbigpLCBpby5GaWxlSU8gYW5kIG9zLm9wZW4oKSAqLworaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3MgPSAtMTsKKyNlbmRpZgorCiBQeU9iamVjdCAqCiBfUHlfZGV2aWNlX2VuY29kaW5nKGludCBmZCkKIHsKLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoTVNfV0lONjQpCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIFVJTlQgY3A7CiAjZW5kaWYKICAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkgfHwgIWlzYXR0eShmZCkpIHsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChNU19XSU42NCkKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgaWYgKGZkID09IDApCiAgICAgICAgIGNwID0gR2V0Q29uc29sZUNQKCk7CiAgICAgZWxzZSBpZiAoZmQgPT0gMSB8fCBmZCA9PSAyKQpAQCAtNjEsNyArODAsNyBAQAogICAgd29ya2Fyb3VuZCBpcyBhbHNvIGVuYWJsZWQgb24gZXJyb3IsIGZvciBleGFtcGxlIGlmIGdldHRpbmcgdGhlIGxvY2FsZQogICAgZmFpbGVkLgogCi0gICBWYWx1ZXMgb2YgbG9jYWxlX2lzX2FzY2lpOgorICAgVmFsdWVzIG9mIGZvcmNlX2FzY2lpOgogCiAgICAgICAgMTogdGhlIHdvcmthcm91bmQgaXMgdXNlZDogX1B5X3djaGFyMmNoYXIoKSB1c2VzCiAgICAgICAgICAgZW5jb2RlX2FzY2lpX3N1cnJvZ2F0ZWVzY2FwZSgpIGFuZCBfUHlfY2hhcjJ3Y2hhcigpIHVzZXMKQEAgLTIwMiw3ICsyMjEsNyBAQAogICAgIHVuc2lnbmVkIGNoYXIgKmluOwogICAgIHdjaGFyX3QgKm91dDsKIAotICAgIHJlcyA9IFB5TWVtX01hbGxvYygoc3RybGVuKGFyZykrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICByZXMgPSBQeU1lbV9SYXdNYWxsb2MoKHN0cmxlbihhcmcpKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCFyZXMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yMzAsNyArMjQ5LDcgQEAKICAgIFVzZSBfUHlfd2NoYXIyY2hhcigpIHRvIGVuY29kZSB0aGUgY2hhcmFjdGVyIHN0cmluZyBiYWNrIHRvIGEgYnl0ZSBzdHJpbmcuCiAKICAgIFJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nICh1c2UKLSAgIFB5TWVtX0ZyZWUoKSB0byBmcmVlIHRoZSBtZW1vcnkpIGFuZCB3cml0ZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gd2lkZQorICAgUHlNZW1fUmF3RnJlZSgpIHRvIGZyZWUgdGhlIG1lbW9yeSkgYW5kIHdyaXRlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiB3aWRlCiAgICBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0ZXIgaW50byAqc2l6ZSBpZiBzaXplIGlzIG5vdCBOVUxMLCBvcgogICAgTlVMTCBvbiBlcnJvciAoZGVjb2Rpbmcgb3IgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IpLiBJZiBzaXplIGlzIG5vdCBOVUxMLAogICAgKnNpemUgaXMgc2V0IHRvIChzaXplX3QpLTEgb24gbWVtb3J5IGVycm9yIGFuZCAoc2l6ZV90KS0yIG9uIGRlY29kaW5nCkBAIC0yNTUsOSArMjc0LDkgQEAKICAgICB3Y2hhcl90ICpyZXM7CiAgICAgc2l6ZV90IGFyZ3NpemU7CiAgICAgc2l6ZV90IGNvdW50OworI2lmZGVmIEhBVkVfTUJSVE9XQwogICAgIHVuc2lnbmVkIGNoYXIgKmluOwogICAgIHdjaGFyX3QgKm91dDsKLSNpZmRlZiBIQVZFX01CUlRPV0MKICAgICBtYnN0YXRlX3QgbWJzOwogI2VuZGlmCiAKQEAgLTI4NCw3ICszMDMsNyBAQAogICAgIGFyZ3NpemUgPSBtYnN0b3djcyhOVUxMLCBhcmcsIDApOwogI2VuZGlmCiAgICAgaWYgKGFyZ3NpemUgIT0gKHNpemVfdCktMSkgewotICAgICAgICByZXMgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYygoYXJnc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgICAgICByZXMgPSAod2NoYXJfdCAqKVB5TWVtX1Jhd01hbGxvYygoYXJnc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAoIXJlcykKICAgICAgICAgICAgIGdvdG8gb29tOwogICAgICAgICBjb3VudCA9IG1ic3Rvd2NzKHJlcywgYXJnLCBhcmdzaXplKzEpOwpAQCAtMjkzLDcgKzMxMiw3IEBACiAgICAgICAgICAgICAvKiBPbmx5IHVzZSB0aGUgcmVzdWx0IGlmIGl0IGNvbnRhaW5zIG5vCiAgICAgICAgICAgICAgICBzdXJyb2dhdGUgY2hhcmFjdGVycy4gKi8KICAgICAgICAgICAgIGZvciAodG1wID0gcmVzOyAqdG1wICE9IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKnRtcCA8IDB4ZDgwMCB8fCAqdG1wID4gMHhkZmZmKTsgdG1wKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKCp0bXApOyB0bXArKykKICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICBpZiAoKnRtcCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNpemUgIT0gTlVMTCkKQEAgLTMwMSw3ICszMjAsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgUHlNZW1fRnJlZShyZXMpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHJlcyk7CiAgICAgfQogICAgIC8qIENvbnZlcnNpb24gZmFpbGVkLiBGYWxsIGJhY2sgdG8gZXNjYXBpbmcgd2l0aCBzdXJyb2dhdGVlc2NhcGUuICovCiAjaWZkZWYgSEFWRV9NQlJUT1dDCkBAIC0zMTAsNyArMzI5LDcgQEAKICAgICAvKiBPdmVyYWxsb2NhdGU7IGFzIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBhcmUgaW4gdGhlIGFyZ3VtZW50LCB0aGUKICAgICAgICBhY3R1YWwgb3V0cHV0IGNvdWxkIHVzZSBsZXNzIG1lbW9yeS4gKi8KICAgICBhcmdzaXplID0gc3RybGVuKGFyZykgKyAxOwotICAgIHJlcyA9ICh3Y2hhcl90KilQeU1lbV9NYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOworICAgIHJlcyA9ICh3Y2hhcl90KilQeU1lbV9SYXdNYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghcmVzKQogICAgICAgICBnb3RvIG9vbTsKICAgICBpbiA9ICh1bnNpZ25lZCBjaGFyKilhcmc7CkBAIC0zMjYsNyArMzQ1LDcgQEAKICAgICAgICAgICAgICAgIHNpbmNlIHdlIHByb3ZpZGUgZXZlcnl0aGluZyB0aGF0IHdlIGhhdmUgLQogICAgICAgICAgICAgICAgdW5sZXNzIHRoZXJlIGlzIGEgYnVnIGluIHRoZSBDIGxpYnJhcnksIG9yIEkKICAgICAgICAgICAgICAgIG1pc3VuZGVyc3Rvb2QgaG93IG1icnRvd2Mgd29ya3MuICovCi0gICAgICAgICAgICBQeU1lbV9GcmVlKHJlcyk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHJlcyk7CiAgICAgICAgICAgICBpZiAoc2l6ZSAhPSBOVUxMKQogICAgICAgICAgICAgICAgICpzaXplID0gKHNpemVfdCktMjsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzM5LDcgKzM1OCw3IEBACiAgICAgICAgICAgICBtZW1zZXQoJm1icywgMCwgc2l6ZW9mIG1icyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoKm91dCA+PSAweGQ4MDAgJiYgKm91dCA8PSAweGRmZmYpIHsKKyAgICAgICAgaWYgKFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKCpvdXQpKSB7CiAgICAgICAgICAgICAvKiBTdXJyb2dhdGUgY2hhcmFjdGVyLiAgRXNjYXBlIHRoZSBvcmlnaW5hbAogICAgICAgICAgICAgICAgYnl0ZSBzZXF1ZW5jZSB3aXRoIHN1cnJvZ2F0ZWVzY2FwZS4gKi8KICAgICAgICAgICAgIGFyZ3NpemUgLT0gY29udmVydGVkOwpAQCAtNTQ4LDE0ICs1NjcsMjE1IEBACiAKICNlbmRpZgogCi0vKiBPcGVuIGEgZmlsZS4gVXNlIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGxvY2FsZQotICAgZW5jb2RpbmcgYW5kIHVzZSBmb3BlbigpIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBpbnQKK2dldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCByYWlzZSkKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgSEFORExFIGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKIAorICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBoYW5kbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKyAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCFHZXRIYW5kbGVJbmZvcm1hdGlvbihoYW5kbGUsICZmbGFncykpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gKGZsYWdzICYgSEFORExFX0ZMQUdfSU5IRVJJVCk7CisjZWxzZQorICAgIGludCBmbGFnczsKKworICAgIGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQsIDApOworICAgIGlmIChmbGFncyA9PSAtMSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuICEoZmxhZ3MgJiBGRF9DTE9FWEVDKTsKKyNlbmRpZgorfQorCisvKiBHZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisgICBSZXR1cm4gMSBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGNhbiBiZSBpbmhlcml0ZWQsIDAgaWYgaXQgY2Fubm90LAorICAgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitpbnQKK19QeV9nZXRfaW5oZXJpdGFibGUoaW50IGZkKQoreworICAgIHJldHVybiBnZXRfaW5oZXJpdGFibGUoZmQsIDEpOworfQorCitzdGF0aWMgaW50CitzZXRfaW5oZXJpdGFibGUoaW50IGZkLCBpbnQgaW5oZXJpdGFibGUsIGludCByYWlzZSwgaW50ICphdG9taWNfZmxhZ193b3JrcykKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgSEFORExFIGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9DTEVYKSAmJiBkZWZpbmVkKEZJT05DTEVYKQorICAgIGludCByZXF1ZXN0OworICAgIGludCBlcnI7CisjZWxpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkKKyAgICBpbnQgZmxhZ3M7CisgICAgaW50IHJlczsKKyNlbmRpZgorCisgICAgLyogYXRvbWljX2ZsYWdfd29ya3MgY2FuIG9ubHkgYmUgdXNlZCB0byBtYWtlIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICBub24taW5oZXJpdGFibGUgKi8KKyAgICBhc3NlcnQoIShhdG9taWNfZmxhZ193b3JrcyAhPSBOVUxMICYmIGluaGVyaXRhYmxlKSk7CisKKyAgICBpZiAoYXRvbWljX2ZsYWdfd29ya3MgIT0gTlVMTCAmJiAhaW5oZXJpdGFibGUpIHsKKyAgICAgICAgaWYgKCphdG9taWNfZmxhZ193b3JrcyA9PSAtMSkgeworICAgICAgICAgICAgaW50IGluaGVyaXRhYmxlID0gZ2V0X2luaGVyaXRhYmxlKGZkLCByYWlzZSk7CisgICAgICAgICAgICBpZiAoaW5oZXJpdGFibGUgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgKmF0b21pY19mbGFnX3dvcmtzID0gIWluaGVyaXRhYmxlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCphdG9taWNfZmxhZ193b3JrcykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgZmxhZ3MgPSBIQU5ETEVfRkxBR19JTkhFUklUOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgPSAwOworICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oaGFuZGxlLCBIQU5ETEVfRkxBR19JTkhFUklULCBmbGFncykpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisKKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9DTEVYKSAmJiBkZWZpbmVkKEZJT05DTEVYKQorICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgcmVxdWVzdCA9IEZJT05DTEVYOworICAgIGVsc2UKKyAgICAgICAgcmVxdWVzdCA9IEZJT0NMRVg7CisgICAgZXJyID0gaW9jdGwoZmQsIHJlcXVlc3QsIE5VTEwpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworCisjZWxzZQorICAgIGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQpOworICAgIGlmIChmbGFncyA8IDApIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICBmbGFncyAmPSB+RkRfQ0xPRVhFQzsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzIHw9IEZEX0NMT0VYRUM7CisgICAgcmVzID0gZmNudGwoZmQsIEZfU0VURkQsIGZsYWdzKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyogTWFrZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG5vbi1pbmhlcml0YWJsZS4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAorbWFrZV9ub25faW5oZXJpdGFibGUoaW50IGZkKQoreworICAgIHJldHVybiBzZXRfaW5oZXJpdGFibGUoZmQsIDAsIDAsIE5VTEwpOworfQorCisvKiBTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisgICBPbiBzdWNjZXNzOiByZXR1cm4gMCwgb24gZXJyb3I6IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiByYWlzZSBpcyBub256ZXJvCisgICBhbmQgcmV0dXJuIC0xLgorCisgICBJZiBhdG9taWNfZmxhZ193b3JrcyBpcyBub3QgTlVMTDoKKworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0tMSwgY2hlY2sgaWYgdGhlIGluaGVyaXRhYmxlIGlzIHNldCBvbiB0aGUgZmlsZQorICAgICAgZGVzY3JpcHRvcjogaWYgeWVzLCBzZXQgKmF0b21pY19mbGFnX3dvcmtzIHRvIDEsIG90aGVyd2lzZSBzZXQgdG8gMCBhbmQKKyAgICAgIHNldCB0aGUgaW5oZXJpdGFibGUgZmxhZworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0xOiBkbyBub3RoaW5nCisgICAgKiBpZiAqYXRvbWljX2ZsYWdfd29ya3M9PTA6IHNldCBpbmhlcml0YWJsZSBmbGFnIHRvIEZhbHNlCisKKyAgIFNldCBhdG9taWNfZmxhZ193b3JrcyB0byBOVUxMIGlmIG5vIGF0b21pYyBmbGFnIHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUKKyAgIGZpbGUgZGVzY3JpcHRvci4KKworICAgYXRvbWljX2ZsYWdfd29ya3MgY2FuIG9ubHkgYmUgdXNlZCB0byBtYWtlIGEgZmlsZSBkZXNjcmlwdG9yCisgICBub24taW5oZXJpdGFibGU6IGF0b21pY19mbGFnX3dvcmtzIG11c3QgYmUgTlVMTCBpZiBpbmhlcml0YWJsZT0xLiAqLworaW50CitfUHlfc2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IGluaGVyaXRhYmxlLCBpbnQgKmF0b21pY19mbGFnX3dvcmtzKQoreworICAgIHJldHVybiBzZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlLCAxLCBhdG9taWNfZmxhZ193b3Jrcyk7Cit9CisKKy8qIE9wZW4gYSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBmbGFncyAod3JhcHBlciB0byBvcGVuKCkgZnVuY3Rpb24pLgorICAgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZS4gKi8KK2ludAorX1B5X29wZW4oY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncykKK3sKKyAgICBpbnQgZmQ7CisjaWZkZWYgTVNfV0lORE9XUworICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MgfCBPX05PSU5IRVJJVCk7CisgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIGZkOworI2Vsc2UKKworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3M7CisjaWZkZWYgT19DTE9FWEVDCisgICAgYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyAgICBmbGFncyB8PSBPX0NMT0VYRUM7CisjZWxzZQorICAgIGF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MpOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiBmZDsKKworICAgIGlmIChzZXRfaW5oZXJpdGFibGUoZmQsIDAsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmICAgLyogIU1TX1dJTkRPV1MgKi8KKyAgICByZXR1cm4gZmQ7Cit9CisKKy8qIE9wZW4gYSBmaWxlLiBVc2UgX3dmb3BlbigpIG9uIFdpbmRvd3MsIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgbG9jYWxlCisgICBlbmNvZGluZyBhbmQgdXNlIGZvcGVuKCkgb3RoZXJ3aXNlLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQKKyAgIG5vbi1pbmhlcml0YWJsZS4gKi8KIEZJTEUgKgogX1B5X3dmb3Blbihjb25zdCB3Y2hhcl90ICpwYXRoLCBjb25zdCB3Y2hhcl90ICptb2RlKQogewotI2lmbmRlZiBNU19XSU5ET1dTCiAgICAgRklMRSAqZjsKKyNpZm5kZWYgTVNfV0lORE9XUwogICAgIGNoYXIgKmNwYXRoOwogICAgIGNoYXIgY21vZGVbMTBdOwogICAgIHNpemVfdCByOwpAQCAtNTY5LDIxICs3ODksNDIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZiA9IGZvcGVuKGNwYXRoLCBjbW9kZSk7CiAgICAgUHlNZW1fRnJlZShjcGF0aCk7Ci0gICAgcmV0dXJuIGY7CiAjZWxzZQotICAgIHJldHVybiBfd2ZvcGVuKHBhdGgsIG1vZGUpOworICAgIGYgPSBfd2ZvcGVuKHBhdGgsIG1vZGUpOwogI2VuZGlmCisgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKG1ha2Vfbm9uX2luaGVyaXRhYmxlKGZpbGVubyhmKSkgPCAwKSB7CisgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBmOwogfQogCi0vKiBDYWxsIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBvciBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgYW5kCi0gICBjYWxsIGZvcGVuKCkgb3RoZXJ3aXNlLgorLyogV3JhcHBlciB0byBmb3BlbigpLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQgbm9uLWluaGVyaXRhYmxlLiAqLworRklMRSoKK19QeV9mb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgY29uc3QgY2hhciAqbW9kZSkKK3sKKyAgICBGSUxFICpmID0gZm9wZW4ocGF0aG5hbWUsIG1vZGUpOworICAgIGlmIChmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChtYWtlX25vbl9pbmhlcml0YWJsZShmaWxlbm8oZikpIDwgMCkgeworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gZjsKK30KKworLyogT3BlbiBhIGZpbGUuIENhbGwgX3dmb3BlbigpIG9uIFdpbmRvd3MsIG9yIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgZmlsZXN5c3RlbQorICAgZW5jb2RpbmcgYW5kIGNhbGwgZm9wZW4oKSBvdGhlcndpc2UuIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZAorICAgbm9uLWluaGVyaXRhYmxlLgogCiAgICBSZXR1cm4gdGhlIG5ldyBmaWxlIG9iamVjdCBvbiBzdWNjZXNzLCBvciBOVUxMIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuIG9yCi0gICAoaWYgUHlFcnJfT2NjdXJyZWQoKSkgb24gdW5pY29kZSBlcnJvciAqLwotCisgICAoaWYgUHlFcnJfT2NjdXJyZWQoKSkgb24gdW5pY29kZSBlcnJvci4gKi8KIEZJTEUqCi1fUHlfZm9wZW4oUHlPYmplY3QgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCitfUHlfZm9wZW5fb2JqKFB5T2JqZWN0ICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogeworICAgIEZJTEUgKmY7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIHdjaGFyX3QgKndwYXRoOwogICAgIHdjaGFyX3Qgd21vZGVbMTBdOwpAQCAtNjAzLDE2ICs4NDQsMjEgQEAKICAgICBpZiAodXNpemUgPT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gX3dmb3Blbih3cGF0aCwgd21vZGUpOworICAgIGYgPSBfd2ZvcGVuKHdwYXRoLCB3bW9kZSk7CiAjZWxzZQotICAgIEZJTEUgKmY7CiAgICAgUHlPYmplY3QgKmJ5dGVzOwogICAgIGlmICghUHlVbmljb2RlX0ZTQ29udmVydGVyKHBhdGgsICZieXRlcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGYgPSBmb3BlbihQeUJ5dGVzX0FTX1NUUklORyhieXRlcyksIG1vZGUpOwogICAgIFB5X0RFQ1JFRihieXRlcyk7Ci0gICAgcmV0dXJuIGY7CiAjZW5kaWYKKyAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAobWFrZV9ub25faW5oZXJpdGFibGUoZmlsZW5vKGYpKSA8IDApIHsKKyAgICAgICAgZmNsb3NlKGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGY7CiB9CiAKICNpZmRlZiBIQVZFX1JFQURMSU5LCkBAIC02NDksMTIgKzg5NSwxMiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGlmIChidWZzaXogPD0gcjEpIHsKLSAgICAgICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3YnVmKTsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgd2NzbmNweShidWYsIHdidWYsIGJ1ZnNpeik7Ci0gICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICBQeU1lbV9SYXdGcmVlKHdidWYpOwogICAgIHJldHVybiAoaW50KXIxOwogfQogI2VuZGlmCkBAIC02OTAsMTIgKzkzNiwxMiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKHJlc29sdmVkX3BhdGhfc2l6ZSA8PSByKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUod3Jlc29sdmVkX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdyZXNvbHZlZF9wYXRoKTsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICB3Y3NuY3B5KHJlc29sdmVkX3BhdGgsIHdyZXNvbHZlZF9wYXRoLCByZXNvbHZlZF9wYXRoX3NpemUpOwotICAgIFB5TWVtX0ZyZWUod3Jlc29sdmVkX3BhdGgpOworICAgIFB5TWVtX1Jhd0ZyZWUod3Jlc29sdmVkX3BhdGgpOwogICAgIHJldHVybiByZXNvbHZlZF9wYXRoOwogfQogI2VuZGlmCkBAIC03MDgsNyArOTU0LDggQEAKIF9QeV93Z2V0Y3dkKHdjaGFyX3QgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgIHJldHVybiBfd2dldGN3ZChidWYsIHNpemUpOworICAgIGludCBpc2l6ZSA9IChpbnQpUHlfTUlOKHNpemUsIElOVF9NQVgpOworICAgIHJldHVybiBfd2dldGN3ZChidWYsIGlzaXplKTsKICNlbHNlCiAgICAgY2hhciBmbmFtZVtNQVhQQVRITEVOXTsKICAgICB3Y2hhcl90ICp3bmFtZTsKQEAgLTcyMCwxMiArOTY3LDgxIEBACiAgICAgaWYgKHduYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaXplIDw9IGxlbikgewotICAgICAgICBQeU1lbV9GcmVlKHduYW1lKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3bmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICB3Y3NuY3B5KGJ1Ziwgd25hbWUsIHNpemUpOwotICAgIFB5TWVtX0ZyZWUod25hbWUpOworICAgIFB5TWVtX1Jhd0ZyZWUod25hbWUpOwogICAgIHJldHVybiBidWY7CiAjZW5kaWYKIH0KIAorLyogRHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yLiBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIGFzCisgICBub24taW5oZXJpdGFibGUuIFJldHVybiBhIG5ldyBmaWxlIGRlc2NyaXB0b3Igb24gc3VjY2VzcywgcmFpc2UgYW4gT1NFcnJvcgorICAgZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuCisKKyAgIFRoZSBHSUwgaXMgcmVsZWFzZWQgdG8gY2FsbCBkdXAoKS4gVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIEdJTC4gKi8KK2ludAorX1B5X2R1cChpbnQgZmQpCit7CisjaWZkZWYgTVNfV0lORE9XUworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgZnR5cGU7CisjZW5kaWYKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIGdldCB0aGUgZmlsZSB0eXBlLCBpZ25vcmUgdGhlIGVycm9yIGlmIGl0IGZhaWxlZCAqLworICAgIGZ0eXBlID0gR2V0RmlsZVR5cGUoaGFuZGxlKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBmZCA9IGR1cChmZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIENoYXJhY3RlciBmaWxlcyBsaWtlIGNvbnNvbGUgY2Fubm90IGJlIG1ha2Ugbm9uLWluaGVyaXRhYmxlICovCisgICAgaWYgKGZ0eXBlICE9IEZJTEVfVFlQRV9DSEFSKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyNlbGlmIGRlZmluZWQoSEFWRV9GQ05UTF9IKSAmJiBkZWZpbmVkKEZfRFVQRkRfQ0xPRVhFQykKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgZmQgPSBmY250bChmZCwgRl9EVVBGRF9DTE9FWEVDLCAwKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjZWxzZQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBmZCA9IGR1cChmZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGZkOworfQorCmRpZmYgLS1naXQgYS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYyBiL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCmluZGV4IGE2NTE2ZGMuLjBhM2NjNTkgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCisrKyBiL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAogLyogRG8gdGhlIHBhZGRpbmcsIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBjYWxsZXItc3VwcGxpZWQKICAgIGNvbnRlbnQgZ29lcy4gKi8KLXN0YXRpYyBQeV9zc2l6ZV90CitzdGF0aWMgaW50CiBmaWxsX3BhZGRpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgIFB5X3NzaXplX3QgbmNoYXJzLAogICAgICAgICAgICAgIFB5X1VDUzQgZmlsbF9jaGFyLCBQeV9zc2l6ZV90IG5fbHBhZGRpbmcsCkBAIC01NTYsNyArNTU2LDcgQEAKIHsKICAgICAvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgZGlnaXRzLCBkZWNpbWFsLCBhbmQgcmVtYWluZGVyLiAqLwogICAgIFB5X3NzaXplX3QgZF9wb3MgPSBkX3N0YXJ0OwotICAgIGNvbnN0IGVudW0gUHlVbmljb2RlX0tpbmQga2luZCA9IHdyaXRlci0+a2luZDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQga2luZCA9IHdyaXRlci0+a2luZDsKICAgICBjb25zdCB2b2lkICpkYXRhID0gd3JpdGVyLT5kYXRhOwogICAgIFB5X3NzaXplX3QgcjsKIApAQCAtNzU3LDcgKzc1Nyw4IEBACiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKLSAgICBpZiAoZm9ybWF0LT53aWR0aCA9PSAtMSAmJiBmb3JtYXQtPnByZWNpc2lvbiA9PSAtMSkgeworICAgIGlmICgoZm9ybWF0LT53aWR0aCA9PSAtMSB8fCBmb3JtYXQtPndpZHRoIDw9IGxlbikKKyAgICAgICAgJiYgKGZvcm1hdC0+cHJlY2lzaW9uID09IC0xIHx8IGZvcm1hdC0+cHJlY2lzaW9uID49IGxlbikpIHsKICAgICAgICAgLyogRmFzdCBwYXRoICovCiAgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgdmFsdWUpOwogICAgIH0KQEAgLTc3MCw5ICs3NzEsMTMgQEAKIAogICAgIGNhbGNfcGFkZGluZyhsZW4sIGZvcm1hdC0+d2lkdGgsIGZvcm1hdC0+YWxpZ24sICZscGFkLCAmcnBhZCwgJnRvdGFsKTsKIAotICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHZhbHVlLCAwLCBsZW4pOworICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CiAgICAgaWYgKGxwYWQgIT0gMCB8fCBycGFkICE9IDApCiAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgZm9ybWF0LT5maWxsX2NoYXIpOworICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUodmFsdWUpID4gbWF4Y2hhcikgeworICAgICAgICBQeV9VQ1M0IHZhbG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHZhbHVlLCAwLCBsZW4pOworICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHZhbG1heGNoYXIpOworICAgIH0KIAogICAgIC8qIGFsbG9jYXRlIHRoZSByZXN1bHRpbmcgc3RyaW5nICovCiAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIHRvdGFsLCBtYXhjaGFyKSA9PSAtMSkKQEAgLTk3Nyw4ICs5ODIsNyBAQAogICAgIFB5X3NzaXplX3Qgbl90b3RhbDsKICAgICBpbnQgaGFzX2RlY2ltYWw7CiAgICAgZG91YmxlIHZhbDsKLSAgICBQeV9zc2l6ZV90IHByZWNpc2lvbjsKLSAgICBQeV9zc2l6ZV90IGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKKyAgICBpbnQgcHJlY2lzaW9uLCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CiAgICAgUHlfVUNTNCB0eXBlID0gZm9ybWF0LT50eXBlOwogICAgIGludCBhZGRfcGN0ID0gMDsKICAgICBQeV9zc2l6ZV90IGluZGV4OwpAQCAtMTA0OSwyNCArMTA1MywyNCBAQAogICAgICAgICBuX2RpZ2l0cyArPSAxOwogICAgIH0KIAotICAgIC8qIFNpbmNlIHRoZXJlIGlzIG5vIHVuaWNvZGUgdmVyc2lvbiBvZiBQeU9TX2RvdWJsZV90b19zdHJpbmcsCi0gICAgICAganVzdCB1c2UgdGhlIDggYml0IHZlcnNpb24gYW5kIHRoZW4gY29udmVydCB0byB1bmljb2RlLiAqLwotICAgIHVuaWNvZGVfdG1wID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYnVmLCBuX2RpZ2l0cyk7Ci0gICAgUHlNZW1fRnJlZShidWYpOwotICAgIGlmICh1bmljb2RlX3RtcCA9PSBOVUxMKQotICAgICAgICBnb3RvIGRvbmU7Ci0KICAgICBpZiAoZm9ybWF0LT5zaWduICE9ICcrJyAmJiBmb3JtYXQtPnNpZ24gIT0gJyAnCiAgICAgICAgICYmIGZvcm1hdC0+d2lkdGggPT0gLTEKICAgICAgICAgJiYgZm9ybWF0LT50eXBlICE9ICduJwogICAgICAgICAmJiAhZm9ybWF0LT50aG91c2FuZHNfc2VwYXJhdG9ycykKICAgICB7CiAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICByZXN1bHQgPSBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgdW5pY29kZV90bXApOwotICAgICAgICBQeV9ERUNSRUYodW5pY29kZV90bXApOworICAgICAgICByZXN1bHQgPSBfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcod3JpdGVyLCBidWYsIG5fZGlnaXRzKTsKKyAgICAgICAgUHlNZW1fRnJlZShidWYpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIC8qIFNpbmNlIHRoZXJlIGlzIG5vIHVuaWNvZGUgdmVyc2lvbiBvZiBQeU9TX2RvdWJsZV90b19zdHJpbmcsCisgICAgICAganVzdCB1c2UgdGhlIDggYml0IHZlcnNpb24gYW5kIHRoZW4gY29udmVydCB0byB1bmljb2RlLiAqLworICAgIHVuaWNvZGVfdG1wID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYnVmLCBuX2RpZ2l0cyk7CisgICAgUHlNZW1fRnJlZShidWYpOworICAgIGlmICh1bmljb2RlX3RtcCA9PSBOVUxMKQorICAgICAgICBnb3RvIGRvbmU7CisKICAgICAvKiBJcyBhIHNpZ24gY2hhcmFjdGVyIHByZXNlbnQgaW4gdGhlIG91dHB1dD8gIElmIHNvLCByZW1lbWJlciBpdAogICAgICAgIGFuZCBza2lwIGl0ICovCiAgICAgaW5kZXggPSAwOwpAQCAtMTEzMyw4ICsxMTM3LDcgQEAKICAgICBQeV9zc2l6ZV90IG5faW1fdG90YWw7CiAgICAgaW50IHJlX2hhc19kZWNpbWFsOwogICAgIGludCBpbV9oYXNfZGVjaW1hbDsKLSAgICBpbnQgcHJlY2lzaW9uOwotICAgIFB5X3NzaXplX3QgZGVmYXVsdF9wcmVjaXNpb24gPSA2OworICAgIGludCBwcmVjaXNpb24sIGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKICAgICBQeV9VQ1M0IHR5cGUgPSBmb3JtYXQtPnR5cGU7CiAgICAgUHlfc3NpemVfdCBpX3JlOwogICAgIFB5X3NzaXplX3QgaV9pbTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9mcm96ZW4uYyBiL1B5dGhvbi9mcm96ZW4uYwppbmRleCAyNWZkYzE3Li45YmM2NjJiIDEwMDY0NAotLS0gYS9QeXRob24vZnJvemVuLmMKKysrIGIvUHl0aG9uL2Zyb3plbi5jCkBAIC0yOCw3ICsyOCw3IEBACiAKICNkZWZpbmUgU0laRSAoaW50KXNpemVvZihNX19faGVsbG9fXykKIAotc3RhdGljIHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IF9mcm96ZW4gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXNbXSA9IHsKICAgICAvKiBpbXBvcnRsaWIgKi8KICAgICB7Il9mcm96ZW5faW1wb3J0bGliIiwgX1B5X01fX2ltcG9ydGxpYiwgKGludClzaXplb2YoX1B5X01fX2ltcG9ydGxpYil9LAogICAgIC8qIFRlc3QgbW9kdWxlICovCkBAIC00Miw0ICs0Miw0IEBACiAvKiBFbWJlZGRpbmcgYXBwcyBtYXkgY2hhbmdlIHRoaXMgcG9pbnRlciB0byBwb2ludCB0byB0aGVpciBmYXZvcml0ZQogICAgY29sbGVjdGlvbiBvZiBmcm96ZW4gbW9kdWxlczogKi8KIAotc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXMgPSBfUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKK2NvbnN0IHN0cnVjdCBfZnJvemVuICpQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzID0gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CmRpZmYgLS1naXQgYS9QeXRob24vZnJvemVubWFpbi5jIGIvUHl0aG9uL2Zyb3plbm1haW4uYwppbmRleCA4YjFmMmQ0Li41NWQwNWZjIDEwMDY0NAotLS0gYS9QeXRob24vZnJvemVubWFpbi5jCisrKyBiL1B5dGhvbi9mcm96ZW5tYWluLmMKQEAgLTE2LDE5ICsxNiwxOSBAQAogUHlfRnJvemVuTWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAgICAgY2hhciAqcDsKLSAgICBpbnQgaSwgbiwgc3RzOworICAgIGludCBpLCBuLCBzdHMgPSAxOwogICAgIGludCBpbnNwZWN0ID0gMDsKICAgICBpbnQgdW5idWZmZXJlZCA9IDA7Ci0gICAgY2hhciAqb2xkbG9jOwotICAgIHdjaGFyX3QgKiphcmd2X2NvcHk7CisgICAgY2hhciAqb2xkbG9jID0gTlVMTDsKKyAgICB3Y2hhcl90ICoqYXJndl9jb3B5ID0gTlVMTDsKICAgICAvKiBXZSBuZWVkIGEgc2Vjb25kIGNvcGllcywgYXMgUHl0aG9uIG1pZ2h0IG1vZGlmeSB0aGUgZmlyc3Qgb25lLiAqLwotICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyOworICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyID0gTlVMTDsKIAotICAgIGFyZ3ZfY29weSA9IFB5TWVtX01hbGxvYyhzaXplb2Yod2NoYXJfdCopKmFyZ2MpOwotICAgIGFyZ3ZfY29weTIgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSphcmdjKTsKKyAgICBhcmd2X2NvcHkgPSBQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSAqIGFyZ2MpOworICAgIGFyZ3ZfY29weTIgPSBQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSAqIGFyZ2MpOwogICAgIGlmICghYXJndl9jb3B5IHx8ICFhcmd2X2NvcHkyKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7Ci0gICAgICAgIHJldHVybiAxOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIFB5X0Zyb3plbkZsYWcgPSAxOyAvKiBTdXBwcmVzcyBlcnJvcnMgZnJvbSBnZXRwYXRoLmMgKi8KQEAgLTQ0LDMyICs0NCwyNiBAQAogICAgICAgICBzZXRidWYoc3RkZXJyLCAoY2hhciAqKU5VTEwpOwogICAgIH0KIAotICAgIG9sZGxvYyA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworICAgIG9sZGxvYyA9IF9QeU1lbV9SYXdTdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworICAgIGlmICghb2xkbG9jKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSNpZmRlZiBIQVZFX0JST0tFTl9NQlNUT1dDUwotICAgICAgICBzaXplX3QgYXJnc2l6ZSA9IHN0cmxlbihhcmd2W2ldKTsKLSNlbHNlCi0gICAgICAgIHNpemVfdCBhcmdzaXplID0gbWJzdG93Y3MoTlVMTCwgYXJndltpXSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgc2l6ZV90IGNvdW50OwotICAgICAgICBpZiAoYXJnc2l6ZSA9PSAoc2l6ZV90KS0xKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50ICVkIHRvIHN0cmluZ1xuIiwgaSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBhcmd2X2NvcHlbaV0gPSBQeU1lbV9NYWxsb2MoKGFyZ3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgYXJndl9jb3B5W2ldID0gX1B5X2NoYXIyd2NoYXIoYXJndltpXSwgTlVMTCk7CiAgICAgICAgIGFyZ3ZfY29weTJbaV0gPSBhcmd2X2NvcHlbaV07CiAgICAgICAgIGlmICghYXJndl9jb3B5W2ldKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgY291bnQgPSBtYnN0b3djcyhhcmd2X2NvcHlbaV0sIGFyZ3ZbaV0sIGFyZ3NpemUrMSk7Ci0gICAgICAgIGlmIChjb3VudCA9PSAoc2l6ZV90KS0xKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50ICVkIHRvIHN0cmluZ1xuIiwgaSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICMlaVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICsgMSk7CisgICAgICAgICAgICBhcmdjID0gaTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICB9CiAgICAgc2V0bG9jYWxlKExDX0FMTCwgb2xkbG9jKTsKKyAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CisgICAgb2xkbG9jID0gTlVMTDsKIAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeUluaXRGcm96ZW5FeHRlbnNpb25zKCk7CkBAIC0xMDMsMTAgKzk3LDE0IEBACiAgICAgUHlXaW5GcmVlemVfRXhlVGVybSgpOwogI2VuZGlmCiAgICAgUHlfRmluYWxpemUoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5MltpXSk7CisKK2Vycm9yOgorICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5KTsKKyAgICBpZiAoYXJndl9jb3B5MikgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyW2ldKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyKTsKICAgICB9Ci0gICAgUHlNZW1fRnJlZShhcmd2X2NvcHkpOwotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5Mik7CisgICAgUHlNZW1fUmF3RnJlZShvbGRsb2MpOwogICAgIHJldHVybiBzdHM7CiB9CmRpZmYgLS1naXQgYS9QeXRob24vZnV0dXJlLmMgYi9QeXRob24vZnV0dXJlLmMKaW5kZXggZDI0YWU0MS4uODFlYWI1NCAxMDA2NDQKLS0tIGEvUHl0aG9uL2Z1dHVyZS5jCisrKyBiL1B5dGhvbi9mdXR1cmUuYwpAQCAtMTEsNyArMTEsNyBAQAogImZyb20gX19mdXR1cmVfXyBpbXBvcnRzIG11c3Qgb2NjdXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSIKIAogc3RhdGljIGludAotZnV0dXJlX2NoZWNrX2ZlYXR1cmVzKFB5RnV0dXJlRmVhdHVyZXMgKmZmLCBzdG10X3R5IHMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorZnV0dXJlX2NoZWNrX2ZlYXR1cmVzKFB5RnV0dXJlRmVhdHVyZXMgKmZmLCBzdG10X3R5IHMsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKICAgICBpbnQgaTsKICAgICBhc2RsX3NlcSAqbmFtZXM7CkBAIC00MywxMiArNDMsMTIgQEAKICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZmVhdHVyZSwgImJyYWNlcyIpID09IDApIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgY2hhbmNlIik7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICBVTkRFRklORURfRlVUVVJFX0ZFQVRVUkUsIGZlYXR1cmUpOwotICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC01NiwxMyArNTYsMTcgQEAKIH0KIAogc3RhdGljIGludAotZnV0dXJlX3BhcnNlKFB5RnV0dXJlRmVhdHVyZXMgKmZmLCBtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2Z1dHVyZV9wYXJzZShQeUZ1dHVyZUZlYXR1cmVzICpmZiwgbW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lKQogewotICAgIGludCBpLCBmb3VuZF9kb2NzdHJpbmcgPSAwLCBkb25lID0gMCwgcHJldl9saW5lID0gMDsKKyAgICBpbnQgaSwgZG9uZSA9IDAsIHByZXZfbGluZSA9IDA7CisgICAgc3RtdF90eSBmaXJzdDsKIAogICAgIGlmICghKG1vZC0+a2luZCA9PSBNb2R1bGVfa2luZCB8fCBtb2QtPmtpbmQgPT0gSW50ZXJhY3RpdmVfa2luZCkpCiAgICAgICAgIHJldHVybiAxOwogCisgICAgaWYgKGFzZGxfc2VxX0xFTihtb2QtPnYuTW9kdWxlLmJvZHkpID09IDApCisgICAgICAgIHJldHVybiAxOworCiAgICAgLyogQSBzdWJzZXF1ZW50IHBhc3Mgd2lsbCBkZXRlY3QgZnV0dXJlIGltcG9ydHMgdGhhdCBkb24ndAogICAgICAgIGFwcGVhciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgVGhlcmUncyBvbmUgY2FzZSwKICAgICAgICBob3dldmVyLCB0aGF0IGlzIGVhc2llciB0byBoYW5kbGUgaGVyZTogQSBzZXJpZXMgb2YgaW1wb3J0cwpAQCAtNzEsOCArNzUsMTMgQEAKICAgICAgICBidXQgaXMgcHJlY2VkZWQgYnkgYSByZWd1bGFyIGltcG9ydC4KICAgICAqLwogCisgICAgaSA9IDA7CisgICAgZmlyc3QgPSAoc3RtdF90eSlhc2RsX3NlcV9HRVQobW9kLT52Lk1vZHVsZS5ib2R5LCBpKTsKKyAgICBpZiAoZmlyc3QtPmtpbmQgPT0gRXhwcl9raW5kICYmIGZpcnN0LT52LkV4cHIudmFsdWUtPmtpbmQgPT0gU3RyX2tpbmQpCisgICAgICAgIGkrKzsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBhc2RsX3NlcV9MRU4obW9kLT52Lk1vZHVsZS5ib2R5KTsgaSsrKSB7CisKKyAgICBmb3IgKDsgaSA8IGFzZGxfc2VxX0xFTihtb2QtPnYuTW9kdWxlLmJvZHkpOyBpKyspIHsKICAgICAgICAgc3RtdF90eSBzID0gKHN0bXRfdHkpYXNkbF9zZXFfR0VUKG1vZC0+di5Nb2R1bGUuYm9keSwgaSk7CiAKICAgICAgICAgaWYgKGRvbmUgJiYgcy0+bGluZW5vID4gcHJldl9saW5lKQpAQCAtOTIsMzIgKzEwMSwyNyBAQAogICAgICAgICAgICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUl9MQVRFX0ZVVFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFmdXR1cmVfY2hlY2tfZmVhdHVyZXMoZmYsIHMsIGZpbGVuYW1lKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgZmYtPmZmX2xpbmVubyA9IHMtPmxpbmVubzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHMtPmtpbmQgPT0gRXhwcl9raW5kICYmICFmb3VuZF9kb2NzdHJpbmcpIHsKLSAgICAgICAgICAgIGV4cHJfdHkgZSA9IHMtPnYuRXhwci52YWx1ZTsKLSAgICAgICAgICAgIGlmIChlLT5raW5kICE9IFN0cl9raW5kKQotICAgICAgICAgICAgICAgIGRvbmUgPSAxOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvdW5kX2RvY3N0cmluZyA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAxOwogfQogCiAKIFB5RnV0dXJlRmVhdHVyZXMgKgotUHlGdXR1cmVfRnJvbUFTVChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK1B5RnV0dXJlX0Zyb21BU1RPYmplY3QobW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lKQogewogICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZmOwogCkBAIC0xMzUsMyArMTM5LDE4IEBACiAgICAgfQogICAgIHJldHVybiBmZjsKIH0KKworCitQeUZ1dHVyZUZlYXR1cmVzICoKK1B5RnV0dXJlX0Zyb21BU1QobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyKQoreworICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZmOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmZiA9IFB5RnV0dXJlX0Zyb21BU1RPYmplY3QobW9kLCBmaWxlbmFtZSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gZmY7Cit9CmRpZmYgLS1naXQgYS9QeXRob24vZ2V0YXJncy5jIGIvUHl0aG9uL2dldGFyZ3MuYwppbmRleCBhZTkzMWI5Li45NDZmYWYyIDEwMDY0NAotLS0gYS9QeXRob24vZ2V0YXJncy5jCisrKyBiL1B5dGhvbi9nZXRhcmdzLmMKQEAgLTQ2LDE0ICs0NiwxNiBAQAogfSBmcmVlbGlzdGVudHJ5X3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgaW50IGZpcnN0X2F2YWlsYWJsZTsKICAgZnJlZWxpc3RlbnRyeV90ICplbnRyaWVzOworICBpbnQgZmlyc3RfYXZhaWxhYmxlOworICBpbnQgZW50cmllc19tYWxsb2NlZDsKIH0gZnJlZWxpc3RfdDsKIAorI2RlZmluZSBTVEFUSUNfRlJFRUxJU1RfRU5UUklFUyA4CiAKIC8qIEZvcndhcmQgKi8KIHN0YXRpYyBpbnQgdmdldGFyZ3MxKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCAqLCBpbnQpOwotc3RhdGljIHZvaWQgc2V0ZXJyb3IoaW50LCBjb25zdCBjaGFyICosIGludCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgdm9pZCBzZXRlcnJvcihQeV9zc2l6ZV90LCBjb25zdCBjaGFyICosIGludCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBzdGF0aWMgY2hhciAqY29udmVydGl0ZW0oUHlPYmplY3QgKiwgY29uc3QgY2hhciAqKiwgdmFfbGlzdCAqLCBpbnQsIGludCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgc2l6ZV90LCBmcmVlbGlzdF90ICopOwogc3RhdGljIGNoYXIgKmNvbnZlcnR0dXBsZShQeU9iamVjdCAqLCBjb25zdCBjaGFyICoqLCB2YV9saXN0ICosIGludCwKQEAgLTE4Nyw3ICsxODksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVsaXN0LT5lbnRyaWVzW2luZGV4XS5pdGVtKTsKICAgICAgIH0KICAgICB9Ci0gICAgUHlNZW1fRlJFRShmcmVlbGlzdC0+ZW50cmllcyk7CisgICAgaWYgKGZyZWVsaXN0LT5lbnRyaWVzX21hbGxvY2VkKQorICAgICAgICBQeU1lbV9GUkVFKGZyZWVsaXN0LT5lbnRyaWVzKTsKICAgICByZXR1cm4gcmV0dmFsOwogfQogCkBAIC0yMDYsOCArMjA5LDEzIEBACiAgICAgY29uc3QgY2hhciAqZm9ybWF0c2F2ZSA9IGZvcm1hdDsKICAgICBQeV9zc2l6ZV90IGksIGxlbjsKICAgICBjaGFyICptc2c7Ci0gICAgZnJlZWxpc3RfdCBmcmVlbGlzdCA9IHswLCBOVUxMfTsKICAgICBpbnQgY29tcGF0ID0gZmxhZ3MgJiBGTEFHX0NPTVBBVDsKKyAgICBmcmVlbGlzdGVudHJ5X3Qgc3RhdGljX2VudHJpZXNbU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVNdOworICAgIGZyZWVsaXN0X3QgZnJlZWxpc3Q7CisKKyAgICBmcmVlbGlzdC5lbnRyaWVzID0gc3RhdGljX2VudHJpZXM7CisgICAgZnJlZWxpc3QuZmlyc3RfYXZhaWxhYmxlID0gMDsKKyAgICBmcmVlbGlzdC5lbnRyaWVzX21hbGxvY2VkID0gMDsKIAogICAgIGFzc2VydChjb21wYXQgfHwgKGFyZ3MgIT0gKFB5T2JqZWN0KilOVUxMKSk7CiAgICAgZmxhZ3MgPSBmbGFncyAmIH5GTEFHX0NPTVBBVDsKQEAgLTI0MCwxNSArMjQ4LDE1IEBACiAgICAgICAgICAgICBtZXNzYWdlID0gZm9ybWF0OwogICAgICAgICAgICAgZW5kZm10ID0gMTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd8JzoKKyAgICAgICAgICAgIGlmIChsZXZlbCA9PSAwKQorICAgICAgICAgICAgICAgIG1pbiA9IG1heDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGxldmVsID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnTycpCi0gICAgICAgICAgICAgICAgICAgIG1heCsrOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKFB5X0lTQUxQSEEoUHlfQ0hBUk1BU0soYykpKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5X0lTQUxQSEEoUHlfQ0hBUk1BU0soYykpKQogICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSAnZScpIC8qIHNraXAgZW5jb2RlZCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgbWF4Kys7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICd8JykKLSAgICAgICAgICAgICAgICAgICAgbWluID0gbWF4OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI2MiwxMCArMjcwLDEzIEBACiAKICAgICBmb3JtYXQgPSBmb3JtYXRzYXZlOwogCi0gICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIG1heCk7Ci0gICAgaWYgKGZyZWVsaXN0LmVudHJpZXMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobWF4ID4gU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVMpIHsKKyAgICAgICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIG1heCk7CisgICAgICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBmcmVlbGlzdC5lbnRyaWVzX21hbGxvY2VkID0gMTsKICAgICB9CiAKICAgICBpZiAoY29tcGF0KSB7CkBAIC0zNTAsNyArMzYxLDcgQEAKIAogCiBzdGF0aWMgdm9pZAotc2V0ZXJyb3IoaW50IGlhcmcsIGNvbnN0IGNoYXIgKm1zZywgaW50ICpsZXZlbHMsIGNvbnN0IGNoYXIgKmZuYW1lLAorc2V0ZXJyb3IoUHlfc3NpemVfdCBpYXJnLCBjb25zdCBjaGFyICptc2csIGludCAqbGV2ZWxzLCBjb25zdCBjaGFyICpmbmFtZSwKICAgICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAgICAgY2hhciBidWZbNTEyXTsKQEAgLTM2NiwxMCArMzc3LDEwIEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGlhcmcgIT0gMCkgewogICAgICAgICAgICAgUHlPU19zbnByaW50ZihwLCBzaXplb2YoYnVmKSAtIChwIC0gYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICVkIiwgaWFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIiwgaWFyZyk7CiAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgIHAgKz0gc3RybGVuKHApOwotICAgICAgICAgICAgd2hpbGUgKGxldmVsc1tpXSA+IDAgJiYgaSA8IDMyICYmIChpbnQpKHAtYnVmKSA8IDIyMCkgeworICAgICAgICAgICAgd2hpbGUgKGkgPCAzMiAmJiBsZXZlbHNbaV0gPiAwICYmIChpbnQpKHAtYnVmKSA8IDIyMCkgewogICAgICAgICAgICAgICAgIFB5T1Nfc25wcmludGYocCwgc2l6ZW9mKGJ1ZikgLSAocCAtIGJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBpdGVtICVkIiwgbGV2ZWxzW2ldLTEpOwogICAgICAgICAgICAgICAgIHAgKz0gc3RybGVuKHApOwpAQCAtNDE0LDYgKzQyNSw3IEBACiAgICAgaW50IG4gPSAwOwogICAgIGNvbnN0IGNoYXIgKmZvcm1hdCA9ICpwX2Zvcm1hdDsKICAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IGxlbjsKIAogICAgIGZvciAoOzspIHsKICAgICAgICAgaW50IGMgPSAqZm9ybWF0Kys7CkBAIC00NDMsMTIgKzQ1NSwyMCBAQAogICAgICAgICByZXR1cm4gbXNnYnVmOwogICAgIH0KIAotICAgIGlmICgoaSA9IFB5U2VxdWVuY2VfU2l6ZShhcmcpKSAhPSBuKSB7CisgICAgbGVuID0gUHlTZXF1ZW5jZV9TaXplKGFyZyk7CisgICAgaWYgKGxlbiAhPSBuKSB7CiAgICAgICAgIGxldmVsc1swXSA9IDA7Ci0gICAgICAgIFB5T1Nfc25wcmludGYobXNnYnVmLCBidWZzaXplLAotICAgICAgICAgICAgICAgICAgICAgIHRvcGxldmVsID8gImV4cGVjdGVkICVkIGFyZ3VtZW50cywgbm90ICVkIiA6Ci0gICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzZXF1ZW5jZSBvZiBsZW5ndGggJWQsIG5vdCAlZCIsCi0gICAgICAgICAgICAgICAgICBuLCBpKTsKKyAgICAgICAgaWYgKHRvcGxldmVsKSB7CisgICAgICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVkIGFyZ3VtZW50cywgbm90ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuLCBsZW4pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlPU19zbnByaW50Zihtc2didWYsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHNlcXVlbmNlIG9mIGxlbmd0aCAlZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuLCBsZW4pOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtc2didWY7CiAgICAgfQogCkBAIC01NjMsNyArNTgzLDcgQEAKICAgICAgICAgICAgICAgICAic2l6ZSBkb2VzIG5vdCBmaXQgaW4gYW4gaW50Iik7IFwKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCIiLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7IFwKICAgICAgICAgfSBcCi0gICAgICAgICpxPXM7IFwKKyAgICAgICAgKnEgPSAoaW50KXM7IFwKICAgICB9CiAjZGVmaW5lIEJVRkZFUl9MRU4gICAgICAoKGZsYWdzICYgRkxBR19TSVpFX1QpID8gKnEyOipxKQogI2RlZmluZSBSRVRVUk5fRVJSX09DQ1VSUkVEIHJldHVybiBtc2didWYKQEAgLTE0MTksOSArMTQzOSwxNSBAQAogICAgIGNvbnN0IGNoYXIgKmZuYW1lLCAqbXNnLCAqY3VzdG9tX21zZywgKmtleXdvcmQ7CiAgICAgaW50IG1pbiA9IElOVF9NQVg7CiAgICAgaW50IG1heCA9IElOVF9NQVg7Ci0gICAgaW50IGksIGxlbiwgbmFyZ3MsIG5rZXl3b3JkczsKKyAgICBpbnQgaSwgbGVuOworICAgIFB5X3NzaXplX3QgbmFyZ3MsIG5rZXl3b3JkczsKICAgICBQeU9iamVjdCAqY3VycmVudF9hcmc7Ci0gICAgZnJlZWxpc3RfdCBmcmVlbGlzdCA9IHswLCBOVUxMfTsKKyAgICBmcmVlbGlzdGVudHJ5X3Qgc3RhdGljX2VudHJpZXNbU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVNdOworICAgIGZyZWVsaXN0X3QgZnJlZWxpc3Q7CisKKyAgICBmcmVlbGlzdC5lbnRyaWVzID0gc3RhdGljX2VudHJpZXM7CisgICAgZnJlZWxpc3QuZmlyc3RfYXZhaWxhYmxlID0gMDsKKyAgICBmcmVlbGlzdC5lbnRyaWVzX21hbGxvY2VkID0gMDsKIAogICAgIGFzc2VydChhcmdzICE9IE5VTEwgJiYgUHlUdXBsZV9DaGVjayhhcmdzKSk7CiAgICAgYXNzZXJ0KGtleXdvcmRzID09IE5VTEwgfHwgUHlEaWN0X0NoZWNrKGtleXdvcmRzKSk7CkBAIC0xNDQ1LDE3ICsxNDcxLDIwIEBACiAgICAgZm9yIChsZW49MDsga3dsaXN0W2xlbl07IGxlbisrKQogICAgICAgICBjb250aW51ZTsKIAotICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBsZW4pOwotICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbiA+IFNUQVRJQ19GUkVFTElTVF9FTlRSSUVTKSB7CisgICAgICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBsZW4pOworICAgICAgICBpZiAoZnJlZWxpc3QuZW50cmllcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZnJlZWxpc3QuZW50cmllc19tYWxsb2NlZCA9IDE7CiAgICAgfQogCiAgICAgbmFyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOwogICAgIG5rZXl3b3JkcyA9IChrZXl3b3JkcyA9PSBOVUxMKSA/IDAgOiBQeURpY3RfU2l6ZShrZXl3b3Jkcyk7CiAgICAgaWYgKG5hcmdzICsgbmtleXdvcmRzID4gbGVuKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiJXMlcyB0YWtlcyBhdCBtb3N0ICVkIGFyZ3VtZW50JXMgKCVkIGdpdmVuKSIsCisgICAgICAgICAgICAgICAgICAgICAiJXMlcyB0YWtlcyBhdCBtb3N0ICVkIGFyZ3VtZW50JXMgKCV6ZCBnaXZlbikiLAogICAgICAgICAgICAgICAgICAgICAgKGZuYW1lID09IE5VTEwpID8gImZ1bmN0aW9uIiA6IGZuYW1lLAogICAgICAgICAgICAgICAgICAgICAgKGZuYW1lID09IE5VTEwpID8gIiIgOiAiKCkiLAogICAgICAgICAgICAgICAgICAgICAgbGVuLApAQCAtMTU3NCwyMCArMTYwMywxNSBAQAogICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CiAgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChrZXl3b3JkcywgJnBvcywgJmtleSwgJnZhbHVlKSkgewogICAgICAgICAgICAgaW50IG1hdGNoID0gMDsKLSAgICAgICAgICAgIGNoYXIgKmtzOwogICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soa2V5KSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkcyBtdXN0IGJlIHN0cmluZ3MiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY2xlYW5yZXR1cm4oMCwgJmZyZWVsaXN0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIGNoZWNrIHRoYXQgX1B5VW5pY29kZV9Bc1N0cmluZygpIHJlc3VsdCBpcyBub3QgTlVMTCAqLwotICAgICAgICAgICAga3MgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGtleSk7Ci0gICAgICAgICAgICBpZiAoa3MgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChrcywga3dsaXN0W2ldKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCBrd2xpc3RbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFtYXRjaCkgewpAQCAtMTc4OSw3ICsxODEzLDcgQEAKIAogLyogRm9yIHR5cGUgY29uc3RydWN0b3JzIHRoYXQgZG9uJ3QgdGFrZSBrZXl3b3JkIGFyZ3MKICAqCi0gKiBTZXRzIGEgVHlwZUVycm9yIGFuZCByZXR1cm5zIDAgaWYgdGhlIGt3ZHMgZGljdCBpcworICogU2V0cyBhIFR5cGVFcnJvciBhbmQgcmV0dXJucyAwIGlmIHRoZSBhcmdzL2t3YXJncyBpcwogICogbm90IGVtcHR5LCByZXR1cm5zIDEgb3RoZXJ3aXNlCiAgKi8KIGludApAQCAtMTgwOCw2ICsxODMyLDI1IEBACiAgICAgICAgICAgICAgICAgICAgIGZ1bmNuYW1lKTsKICAgICByZXR1cm4gMDsKIH0KKworCitpbnQKK19QeUFyZ19Ob1Bvc2l0aW9uYWwoY29uc3QgY2hhciAqZnVuY25hbWUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGlmIChhcmdzID09IE5VTEwpCisgICAgICAgIHJldHVybiAxOworICAgIGlmICghUHlUdXBsZV9DaGVja0V4YWN0KGFyZ3MpKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykgPT0gMCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiJXMgZG9lcyBub3QgdGFrZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyIsCisgICAgICAgICAgICAgICAgICAgIGZ1bmNuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9QeXRob24vZ2V0Y3dkLmMgYi9QeXRob24vZ2V0Y3dkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZWRiZDEuLjAwMDAwMDAKLS0tIGEvUHl0aG9uL2dldGN3ZC5jCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotCi0vKiBUd28gUEQgZ2V0Y3dkKCkgaW1wbGVtZW50YXRpb25zLgotICAgQXV0aG9yOiBHdWlkbyB2YW4gUm9zc3VtLCBDV0kgQW1zdGVyZGFtLCBKYW4gMTk5MSwgPGd1aWRvQGN3aS5ubD4uICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZmRlZiBIQVZFX0dFVFdECi0KLS8qIFZlcnNpb24gZm9yIEJTRCBzeXN0ZW1zIC0tIHVzZSBnZXR3ZCgpICovCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBNQVhQQVRITEVOCi0jaWYgZGVmaW5lZChQQVRIX01BWCkgJiYgUEFUSF9NQVggPiAxMDI0Ci0jZGVmaW5lIE1BWFBBVEhMRU4gUEFUSF9NQVgKLSNlbHNlCi0jZGVmaW5lIE1BWFBBVEhMRU4gMTAyNAotI2VuZGlmCi0jZW5kaWYKLQotZXh0ZXJuIGNoYXIgKmdldHdkKGNoYXIgKik7Ci0KLWNoYXIgKgotZ2V0Y3dkKGNoYXIgKmJ1ZiwgaW50IHNpemUpCi17Ci0gICAgY2hhciBsb2NhbGJ1ZltNQVhQQVRITEVOKzFdOwotICAgIGNoYXIgKnJldDsKLQotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXQgPSBnZXR3ZChsb2NhbGJ1Zik7Ci0gICAgaWYgKHJldCAhPSBOVUxMICYmIHN0cmxlbihsb2NhbGJ1ZikgPj0gKHNpemVfdClzaXplKSB7Ci0gICAgICAgIGVycm5vID0gRVJBTkdFOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKHJldCA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm5vID0gRUFDQ0VTOyAvKiBNb3N0IGxpa2VseSBlcnJvciAqLwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgc3RybmNweShidWYsIGxvY2FsYnVmLCBzaXplKTsKLSAgICByZXR1cm4gYnVmOwotfQotCi0jZWxzZSAvKiAhSEFWRV9HRVRXRCAqLwotCi0vKiBWZXJzaW9uIGZvciByZWFsbHkgb2xkIFVOSVggc3lzdGVtcyAtLSB1c2UgcGlwZSBmcm9tIHB3ZCAqLwotCi0jaWZuZGVmIFBXRF9DTUQKLSNkZWZpbmUgUFdEX0NNRCAiL2Jpbi9wd2QiCi0jZW5kaWYKLQotY2hhciAqCi1nZXRjd2QoY2hhciAqYnVmLCBpbnQgc2l6ZSkKLXsKLSAgICBGSUxFICpmcDsKLSAgICBjaGFyICpwOwotICAgIGludCBzdHM7Ci0gICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmICgoZnAgPSBwb3BlbihQV0RfQ01ELCAiciIpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoZmdldHMoYnVmLCBzaXplLCBmcCkgPT0gTlVMTCB8fCAoc3RzID0gcGNsb3NlKGZwKSkgIT0gMCkgewotICAgICAgICBlcnJubyA9IEVBQ0NFUzsgLyogTW9zdCBsaWtlbHkgZXJyb3IgKi8KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGZvciAocCA9IGJ1ZjsgKnAgIT0gJ1xuJzsgcCsrKSB7Ci0gICAgICAgIGlmICgqcCA9PSAnXDAnKSB7Ci0gICAgICAgICAgICBlcnJubyA9IEVSQU5HRTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgICpwID0gJ1wwJzsKLSAgICByZXR1cm4gYnVmOwotfQotCi0jZW5kaWYgLyogIUhBVkVfR0VUV0QgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnQuYyBiL1B5dGhvbi9pbXBvcnQuYwppbmRleCAyNmY4MmNmLi43OTcyZjg2IDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0LmMKKysrIGIvUHl0aG9uL2ltcG9ydC5jCkBAIC0xOSwyMiArMTksMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZmRlZiBNU19XSU5ET1dTCi0vKiBmb3Igc3RhdC5zdF9tb2RlICovCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1vZGVfdDsKLS8qIGZvciBfbWtkaXIgKi8KLSNpbmNsdWRlIDxkaXJlY3QuaD4KLSNlbmRpZgotCi0KICNkZWZpbmUgQ0FDSEVESVIgIl9fcHljYWNoZV9fIgogCiAvKiBTZWUgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KCkgYmVsb3cgKi8KIHN0YXRpYyBQeU9iamVjdCAqZXh0ZW5zaW9ucyA9IE5VTEw7CiAKLS8qIEZ1bmN0aW9uIGZyb20gUGFyc2VyL3Rva2VuaXplci5jICovCi1leHRlcm4gY2hhciAqIFB5VG9rZW5pemVyX0ZpbmRFbmNvZGluZ0ZpbGVuYW1lKGludCwgUHlPYmplY3QgKik7Ci0KIC8qIFRoaXMgdGFibGUgaXMgZGVmaW5lZCBpbiBjb25maWcuYzogKi8KIGV4dGVybiBzdHJ1Y3QgX2luaXR0YWIgX1B5SW1wb3J0X0luaXR0YWJbXTsKIApAQCAtNDIsMTQgKzMxLDMxIEBACiAKIHN0YXRpYyBQeU9iamVjdCAqaW5pdHN0ciA9IE5VTEw7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfaW1wCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD05YzMzMjQ3NWQ4Njg2Mjg0XSovCisKKy8qW3B5dGhvbiBpbnB1dF0KK2NsYXNzIGZzX3VuaWNvZGVfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlPYmplY3QgKicKKyAgICBjb252ZXJ0ZXIgPSAnUHlVbmljb2RlX0ZTRGVjb2RlcicKKworW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbcHl0aG9uIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9OWQ2Nzg2MjMwMTY2MDA2ZV0qLworCiAvKiBJbml0aWFsaXplIHRoaW5ncyAqLwogCiB2b2lkCiBfUHlJbXBvcnRfSW5pdCh2b2lkKQogeworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HZXQoKS0+aW50ZXJwOwogICAgIGluaXRzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19pbml0X18iKTsKICAgICBpZiAoaW5pdHN0ciA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIGltcG9ydCB2YXJpYWJsZXMiKTsKKyAgICBpbnRlcnAtPmJ1aWx0aW5zX2NvcHkgPSBQeURpY3RfQ29weShpbnRlcnAtPmJ1aWx0aW5zKTsKKyAgICBpZiAoaW50ZXJwLT5idWlsdGluc19jb3B5ID09IE5VTEwpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGJhY2t1cCBidWlsdGlucyBkaWN0Iik7CiB9CiAKIHZvaWQKQEAgLTkzLDggKzk5LDEwIEBACiAgICAgaW50IGVyciA9IDA7CiAKICAgICBwYXRoX2hvb2tzID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2hvb2tzIik7Ci0gICAgaWYgKHBhdGhfaG9va3MgPT0gTlVMTCkKKyAgICBpZiAocGF0aF9ob29rcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5wYXRoX2hvb2tzIik7CiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQogICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBpbnN0YWxsaW5nIHppcGltcG9ydCBob29rXG4iKTsKQEAgLTIwNCw4ICsyMTIsMTEgQEAKICAgICBpZiAoaW1wb3J0X2xvY2tfbGV2ZWwgPiAxKSB7CiAgICAgICAgIC8qIEZvcmtlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIGltcG9ydCAqLwogICAgICAgICBsb25nIG1lID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwotICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soaW1wb3J0X2xvY2ssIDApOwotICAgICAgICAvKiBYWFg6IGNhbiB0aGUgcHJldmlvdXMgbGluZSBmYWlsPyAqLworICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGNvdWxkIGZhaWwgaWYgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLCBidXQgZm9ya2luZyBhcworICAgICAgICAgICBhIHNpZGUtZWZmZWN0IG9mIGFuIGltcG9ydCBpcyBhKSByYXJlLCBiKSBudXRzLCBhbmQgYykgZGlmZmljdWx0IHRvCisgICAgICAgICAgIGRvIHRoYW5rcyB0byB0aGUgbG9jayBvbmx5IGJlaW5nIGhlbGQgd2hlbiBkb2luZyBpbmRpdmlkdWFsIG1vZHVsZQorICAgICAgICAgICBsb2NrcyBwZXIgaW1wb3J0LiAqLworICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soaW1wb3J0X2xvY2ssIE5PV0FJVF9MT0NLKTsKICAgICAgICAgaW1wb3J0X2xvY2tfdGhyZWFkID0gbWU7CiAgICAgICAgIGltcG9ydF9sb2NrX2xldmVsLS07CiAgICAgfSBlbHNlIHsKQEAgLTIxNiw4ICsyMjcsMzcgQEAKIAogI2VuZGlmCiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAubG9ja19oZWxkCisKK1JldHVybiBUcnVlIGlmIHRoZSBpbXBvcnQgbG9jayBpcyBjdXJyZW50bHkgaGVsZCwgZWxzZSBGYWxzZS4KKworT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgcmV0dXJuIEZhbHNlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9sb2NrX2hlbGRfX2RvY19fLAorImxvY2tfaGVsZCgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIFRydWUgaWYgdGhlIGltcG9ydCBsb2NrIGlzIGN1cnJlbnRseSBoZWxkLCBlbHNlIEZhbHNlLlxuIgorIlxuIgorIk9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHJldHVybiBGYWxzZS4iKTsKKworI2RlZmluZSBfSU1QX0xPQ0tfSEVMRF9NRVRIT0RERUYgICAgXAorICAgIHsibG9ja19oZWxkIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfbG9ja19oZWxkLCBNRVRIX05PQVJHUywgX2ltcF9sb2NrX2hlbGRfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9sb2NrX2hlbGQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfaW1wX2xvY2tfaGVsZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9sb2NrX2hlbGQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2ltcF9sb2NrX2hlbGRfaW1wbChtb2R1bGUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9sb2NrX2hlbGRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhZTY1Njc0OTY2YmFhNjUgaW5wdXQ9OWIwODhmOWIyMTdkOWJkZl0qLwogewogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhpbXBvcnRfbG9ja190aHJlYWQgIT0gLTEpOwpAQCAtMjI2LDggKzI2NiwzOSBAQAogI2VuZGlmCiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAuYWNxdWlyZV9sb2NrCisKK0FjcXVpcmVzIHRoZSBpbnRlcnByZXRlcidzIGltcG9ydCBsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQuCisKK1RoaXMgbG9jayBzaG91bGQgYmUgdXNlZCBieSBpbXBvcnQgaG9va3MgdG8gZW5zdXJlIHRocmVhZC1zYWZldHkgd2hlbiBpbXBvcnRpbmcKK21vZHVsZXMuIE9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9hY3F1aXJlX2xvY2tfX2RvY19fLAorImFjcXVpcmVfbG9jaygkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQWNxdWlyZXMgdGhlIGludGVycHJldGVyXCdzIGltcG9ydCBsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQuXG4iCisiXG4iCisiVGhpcyBsb2NrIHNob3VsZCBiZSB1c2VkIGJ5IGltcG9ydCBob29rcyB0byBlbnN1cmUgdGhyZWFkLXNhZmV0eSB3aGVuIGltcG9ydGluZ1xuIgorIm1vZHVsZXMuIE9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiIpOworCisjZGVmaW5lIF9JTVBfQUNRVUlSRV9MT0NLX01FVEhPRERFRiAgICBcCisgICAgeyJhY3F1aXJlX2xvY2siLCAoUHlDRnVuY3Rpb24pX2ltcF9hY3F1aXJlX2xvY2ssIE1FVEhfTk9BUkdTLCBfaW1wX2FjcXVpcmVfbG9ja19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2FjcXVpcmVfbG9jayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK19pbXBfYWNxdWlyZV9sb2NrX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2FjcXVpcmVfbG9jayhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW1wX2FjcXVpcmVfbG9ja19pbXBsKG1vZHVsZSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2FjcXVpcmVfbG9ja19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDc4ZjFmYTA4OWZkYjlhNCBpbnB1dD00YTJkNDM4MTg2NmQ1ZmRjXSovCiB7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBfUHlJbXBvcnRfQWNxdWlyZUxvY2soKTsKQEAgLTIzNiw4ICszMDcsMzcgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5yZWxlYXNlX2xvY2sKKworUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXIncyBpbXBvcnQgbG9jay4KKworT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX3JlbGVhc2VfbG9ja19fZG9jX18sCisicmVsZWFzZV9sb2NrKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZWxlYXNlIHRoZSBpbnRlcnByZXRlclwncyBpbXBvcnQgbG9jay5cbiIKKyJcbiIKKyJPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4iKTsKKworI2RlZmluZSBfSU1QX1JFTEVBU0VfTE9DS19NRVRIT0RERUYgICAgXAorICAgIHsicmVsZWFzZV9sb2NrIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfcmVsZWFzZV9sb2NrLCBNRVRIX05PQVJHUywgX2ltcF9yZWxlYXNlX2xvY2tfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9yZWxlYXNlX2xvY2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfaW1wX3JlbGVhc2VfbG9ja19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9yZWxlYXNlX2xvY2soUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2ltcF9yZWxlYXNlX2xvY2tfaW1wbChtb2R1bGUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9yZWxlYXNlX2xvY2tfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTM2Yzc3YTY4MzJmZGFmZDQgaW5wdXQ9OTM0ZmIxMTUxNmRkNzc4Yl0qLwogewogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgaWYgKF9QeUltcG9ydF9SZWxlYXNlTG9jaygpIDwgMCkgewpAQCAtMjc5LDYgKzM3OSw3IEBACiAgICAgInBhdGgiLCAiYXJndiIsICJwczEiLCAicHMyIiwKICAgICAibGFzdF90eXBlIiwgImxhc3RfdmFsdWUiLCAibGFzdF90cmFjZWJhY2siLAogICAgICJwYXRoX2hvb2tzIiwgInBhdGhfaW1wb3J0ZXJfY2FjaGUiLCAibWV0YV9wYXRoIiwKKyAgICAiX19pbnRlcmFjdGl2ZWhvb2tfXyIsCiAgICAgLyogbWlzYyBzdHVmZiAqLwogICAgICJmbGFncyIsICJmbG9hdF9pbmZvIiwKICAgICBOVUxMCkBAIC0yOTEsMTYgKzM5MiwxNyBAQAogICAgIE5VTEwKIH07CiAKLQogLyogVW4taW5pdGlhbGl6ZSB0aGluZ3MsIGFzIGdvb2QgYXMgd2UgY2FuICovCiAKIHZvaWQKIFB5SW1wb3J0X0NsZWFudXAodm9pZCkKIHsKLSAgICBQeV9zc2l6ZV90IHBvcywgbmRvbmU7CisgICAgUHlfc3NpemVfdCBwb3M7CiAgICAgUHlPYmplY3QgKmtleSwgKnZhbHVlLCAqZGljdDsKICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycDsKICAgICBQeU9iamVjdCAqbW9kdWxlcyA9IGludGVycC0+bW9kdWxlczsKKyAgICBQeU9iamVjdCAqd2Vha2xpc3QgPSBOVUxMOworICAgIGNoYXIgKipwOwogCiAgICAgaWYgKG1vZHVsZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOyAvKiBBbHJlYWR5IGRvbmUgKi8KQEAgLTMxMSwxMTQgKzQxMywxMjkgQEAKICAgICAgICBkZWxldGVkICpsYXN0KiBvZiBhbGwsIHRoZXkgd291bGQgY29tZSB0b28gbGF0ZSBpbiB0aGUgbm9ybWFsCiAgICAgICAgZGVzdHJ1Y3Rpb24gb3JkZXIuICBTaWdoLiAqLwogCi0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiYnVpbHRpbnMiKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgZGljdCA9IFB5TW9kdWxlX0dldERpY3QodmFsdWUpOworICAgIC8qIFhYWCBQZXJoYXBzIHRoZXNlIHByZWNhdXRpb25zIGFyZSBvYnNvbGV0ZS4gV2hvIGtub3dzPyAqLworCisgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQorICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhciBidWlsdGlucy5fXG4iKTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhpbnRlcnAtPmJ1aWx0aW5zLCAiXyIsIFB5X05vbmUpOworCisgICAgZm9yIChwID0gc3lzX2RlbGV0ZXM7ICpwICE9IE5VTEw7IHArKykgewogICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhciBidWlsdGlucy5fXG4iKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgIl8iLCBQeV9Ob25lKTsKKyAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGNsZWFyIHN5cy4lc1xuIiwgKnApOworICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhpbnRlcnAtPnN5c2RpY3QsICpwLCBQeV9Ob25lKTsKICAgICB9Ci0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAic3lzIik7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIGNoYXIgKipwOwotICAgICAgICBQeU9iamVjdCAqdjsKLSAgICAgICAgZGljdCA9IFB5TW9kdWxlX0dldERpY3QodmFsdWUpOwotICAgICAgICBmb3IgKHAgPSBzeXNfZGVsZXRlczsgKnAgIT0gTlVMTDsgcCsrKSB7Ci0gICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYXIgc3lzLiVzXG4iLCAqcCk7Ci0gICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAqcCwgUHlfTm9uZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChwID0gc3lzX2ZpbGVzOyAqcCAhPSBOVUxMOyBwKz0yKSB7Ci0gICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgcmVzdG9yZSBzeXMuJXNcbiIsICpwKTsKLSAgICAgICAgICAgIHYgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkaWN0LCAqKHArMSkpOwotICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB2ID0gUHlfTm9uZTsKLSAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICpwLCB2KTsKKyAgICBmb3IgKHAgPSBzeXNfZmlsZXM7ICpwICE9IE5VTEw7IHArPTIpIHsKKyAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQorICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgcmVzdG9yZSBzeXMuJXNcbiIsICpwKTsKKyAgICAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhpbnRlcnAtPnN5c2RpY3QsICoocCsxKSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgICAgdmFsdWUgPSBQeV9Ob25lOworICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhpbnRlcnAtPnN5c2RpY3QsICpwLCB2YWx1ZSk7CisgICAgfQorCisgICAgLyogV2UgcHJlcGFyZSBhIGxpc3Qgd2hpY2ggd2lsbCByZWNlaXZlIChuYW1lLCB3ZWFrcmVmKSB0dXBsZXMgb2YKKyAgICAgICBtb2R1bGVzIHdoZW4gdGhleSBhcmUgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzLiAgVGhlIG5hbWUgaXMgdXNlZAorICAgICAgIGZvciBkaWFnbm9zaXMgbWVzc2FnZXMgKGluIHZlcmJvc2UgbW9kZSksIHdoaWxlIHRoZSB3ZWFrcmVmIGhlbHBzCisgICAgICAgZGV0ZWN0IHRob3NlIG1vZHVsZXMgd2hpY2ggaGF2ZSBiZWVuIGhlbGQgYWxpdmUuICovCisgICAgd2Vha2xpc3QgPSBQeUxpc3RfTmV3KDApOworICAgIGlmICh3ZWFrbGlzdCA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOworCisjZGVmaW5lIFNUT1JFX01PRFVMRV9XRUFLUkVGKG5hbWUsIG1vZCkgXAorICAgIGlmICh3ZWFrbGlzdCAhPSBOVUxMKSB7IFwKKyAgICAgICAgUHlPYmplY3QgKndyID0gUHlXZWFrcmVmX05ld1JlZihtb2QsIE5VTEwpOyBcCisgICAgICAgIGlmIChuYW1lICYmIHdyKSB7IFwKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0dXAgPSBQeVR1cGxlX1BhY2soMiwgbmFtZSwgd3IpOyBcCisgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHdlYWtsaXN0LCB0dXApOyBcCisgICAgICAgICAgICBQeV9YREVDUkVGKHR1cCk7IFwKKyAgICAgICAgfSBcCisgICAgICAgIFB5X1hERUNSRUYod3IpOyBcCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSBcCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOyBcCisgICAgfQorCisgICAgLyogUmVtb3ZlIGFsbCBtb2R1bGVzIGZyb20gc3lzLm1vZHVsZXMsIGhvcGluZyB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgIGNhbiByZWNsYWltIG1vc3Qgb2YgdGhlbS4gKi8KKyAgICBwb3MgPSAwOworICAgIHdoaWxlIChQeURpY3RfTmV4dChtb2R1bGVzLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7CisgICAgICAgIGlmIChQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZyAmJiBQeVVuaWNvZGVfQ2hlY2soa2V5KSkKKyAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgY2xlYW51cFsyXSByZW1vdmluZyAlVVxuIiwga2V5LCB2YWx1ZSk7CisgICAgICAgICAgICBTVE9SRV9NT0RVTEVfV0VBS1JFRihrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKG1vZHVsZXMsIGtleSwgUHlfTm9uZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBGaXJzdCwgZGVsZXRlIF9fbWFpbl9fICovCi0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiX19tYWluX18iKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYW51cCBfX21haW5fX1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJfX21haW5fXyIsIFB5X05vbmUpOwotICAgIH0KKyAgICAvKiBDbGVhciB0aGUgbW9kdWxlcyBkaWN0LiAqLworICAgIFB5RGljdF9DbGVhcihtb2R1bGVzKTsKKyAgICAvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBidWlsdGlucyBkaWN0LCB0byBlbnN1cmUgdGhhdCBhbnkKKyAgICAgICB1c2VyIGRhdGEgZ2V0cyBjbGVhcmVkLiAqLworICAgIGRpY3QgPSBQeURpY3RfQ29weShpbnRlcnAtPmJ1aWx0aW5zKTsKKyAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIFB5RGljdF9DbGVhcihpbnRlcnAtPmJ1aWx0aW5zKTsKKyAgICBpZiAoUHlEaWN0X1VwZGF0ZShpbnRlcnAtPmJ1aWx0aW5zLCBpbnRlcnAtPmJ1aWx0aW5zX2NvcHkpKQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIFB5X1hERUNSRUYoZGljdCk7CisgICAgLyogQ2xlYXIgbW9kdWxlIGRpY3QgY29waWVzIHN0b3JlZCBpbiB0aGUgaW50ZXJwcmV0ZXIgc3RhdGUgKi8KKyAgICBfUHlTdGF0ZV9DbGVhck1vZHVsZXMoKTsKKyAgICAvKiBDb2xsZWN0IHJlZmVyZW5jZXMgKi8KKyAgICBfUHlHQ19Db2xsZWN0Tm9GYWlsKCk7CisgICAgLyogRHVtcCBHQyBzdGF0cyBiZWZvcmUgaXQncyB0b28gbGF0ZSwgc2luY2UgaXQgdXNlcyB0aGUgd2FybmluZ3MKKyAgICAgICBtYWNoaW5lcnkuICovCisgICAgX1B5R0NfRHVtcFNodXRkb3duU3RhdHMoKTsKIAotICAgIC8qIFRoZSBzcGVjaWFsIHRyZWF0bWVudCBvZiAiYnVpbHRpbnMiIGhlcmUgaXMgYmVjYXVzZSBldmVuCisgICAgLyogTm93LCBpZiB0aGVyZSBhcmUgYW55IG1vZHVsZXMgbGVmdCBhbGl2ZSwgY2xlYXIgdGhlaXIgZ2xvYmFscyB0bworICAgICAgIG1pbmltaXplIHBvdGVudGlhbCBsZWFrcy4gIEFsbCBDIGV4dGVuc2lvbiBtb2R1bGVzIGFjdHVhbGx5IGVuZAorICAgICAgIHVwIGhlcmUsIHNpbmNlIHRoZXkgYXJlIGtlcHQgYWxpdmUgaW4gdGhlIGludGVycHJldGVyIHN0YXRlLgorCisgICAgICAgVGhlIHNwZWNpYWwgdHJlYXRtZW50IG9mICJidWlsdGlucyIgaGVyZSBpcyBiZWNhdXNlIGV2ZW4KICAgICAgICB3aGVuIGl0J3Mgbm90IHJlZmVyZW5jZWQgYXMgYSBtb2R1bGUsIGl0cyBkaWN0aW9uYXJ5IGlzCiAgICAgICAgcmVmZXJlbmNlZCBieSBhbG1vc3QgZXZlcnkgbW9kdWxlJ3MgX19idWlsdGluc19fLiAgU2luY2UKICAgICAgICBkZWxldGluZyBhIG1vZHVsZSBjbGVhcnMgaXRzIGRpY3Rpb25hcnkgKGV2ZW4gaWYgdGhlcmUgYXJlCiAgICAgICAgcmVmZXJlbmNlcyBsZWZ0IHRvIGl0KSwgd2UgbmVlZCB0byBkZWxldGUgdGhlICJidWlsdGlucyIKICAgICAgICBtb2R1bGUgbGFzdC4gIExpa2V3aXNlLCB3ZSBkb24ndCBkZWxldGUgc3lzIHVudGlsIHRoZSB2ZXJ5Ci0gICAgICAgZW5kIGJlY2F1c2UgaXQgaXMgaW1wbGljaXRseSByZWZlcmVuY2VkIChlLmcuIGJ5IHByaW50KS4KLQotICAgICAgIEFsc28gbm90ZSB0aGF0IHdlICdkZWxldGUnIG1vZHVsZXMgYnkgcmVwbGFjaW5nIHRoZWlyIGVudHJ5Ci0gICAgICAgaW4gdGhlIG1vZHVsZXMgZGljdCB3aXRoIE5vbmUsIHJhdGhlciB0aGFuIHJlYWxseSBkZWxldGluZwotICAgICAgIHRoZW07IHRoaXMgYXZvaWRzIGEgcmVoYXNoIG9mIHRoZSBtb2R1bGVzIGRpY3Rpb25hcnkgYW5kCi0gICAgICAgYWxzbyBtYXJrcyB0aGVtIGFzICJub24gZXhpc3RlbnQiIHNvIHRoZXkgd29uJ3QgYmUKLSAgICAgICByZS1pbXBvcnRlZC4gKi8KLQotICAgIC8qIE5leHQsIHJlcGVhdGVkbHkgZGVsZXRlIG1vZHVsZXMgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZgotICAgICAgIG9uZSAoc2tpcHBpbmcgYnVpbHRpbnMgYW5kIHN5cykgYW5kIGRlbGV0ZSB0aGVtICovCi0gICAgZG8gewotICAgICAgICBuZG9uZSA9IDA7Ci0gICAgICAgIHBvcyA9IDA7Ci0gICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChtb2R1bGVzLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUtPm9iX3JlZmNudCAhPSAxKQorICAgICAgIGVuZCBiZWNhdXNlIGl0IGlzIGltcGxpY2l0bHkgcmVmZXJlbmNlZCAoZS5nLiBieSBwcmludCkuICovCisgICAgaWYgKHdlYWtsaXN0ICE9IE5VTEwpIHsKKyAgICAgICAgUHlfc3NpemVfdCBpLCBuOworICAgICAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHdlYWtsaXN0KTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKnR1cCA9IFB5TGlzdF9HRVRfSVRFTSh3ZWFrbGlzdCwgaSk7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0odHVwLCAwKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptb2QgPSBQeVdlYWtyZWZfR0VUX09CSkVDVChQeVR1cGxlX0dFVF9JVEVNKHR1cCwgMSkpOworICAgICAgICAgICAgaWYgKG1vZCA9PSBQeV9Ob25lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksICJidWlsdGlucyIpID09IDApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksICJzeXMiKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigKLSAgICAgICAgICAgICAgICAgICAgICAgICIjIGNsZWFudXBbMV0gJVVcbiIsIGtleSk7Ci0gICAgICAgICAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShtb2R1bGVzLCBrZXksIFB5X05vbmUpOwotICAgICAgICAgICAgICAgIG5kb25lKys7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQoUHlNb2R1bGVfQ2hlY2sobW9kKSk7CisgICAgICAgICAgICBkaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtb2QpOworICAgICAgICAgICAgaWYgKGRpY3QgPT0gaW50ZXJwLT5idWlsdGlucyB8fCBkaWN0ID09IGludGVycC0+c3lzZGljdCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihtb2QpOworICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnICYmIFB5VW5pY29kZV9DaGVjayhuYW1lKSkKKyAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgY2xlYW51cFszXSB3aXBpbmcgJVVcbiIsIG5hbWUpOworICAgICAgICAgICAgX1B5TW9kdWxlX0NsZWFyKG1vZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobW9kKTsKICAgICAgICAgfQotICAgIH0gd2hpbGUgKG5kb25lID4gMCk7Ci0KLSAgICAvKiBOZXh0LCBkZWxldGUgYWxsIG1vZHVsZXMgKHN0aWxsIHNraXBwaW5nIGJ1aWx0aW5zIGFuZCBzeXMpICovCi0gICAgcG9zID0gMDsKLSAgICB3aGlsZSAoUHlEaWN0X05leHQobW9kdWxlcywgJnBvcywgJmtleSwgJnZhbHVlKSkgewotICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGtleSkgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCAiYnVpbHRpbnMiKSA9PSAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwgInN5cyIpID09IDApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGNsZWFudXBbMl0gJVVcbiIsIGtleSk7Ci0gICAgICAgICAgICBfUHlNb2R1bGVfQ2xlYXIodmFsdWUpOwotICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0obW9kdWxlcywga2V5LCBQeV9Ob25lKTsKLSAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYod2Vha2xpc3QpOwogICAgIH0KIAogICAgIC8qIE5leHQsIGRlbGV0ZSBzeXMgYW5kIGJ1aWx0aW5zIChpbiB0aGF0IG9yZGVyKSAqLwotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgInN5cyIpOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhbnVwIHN5c1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJzeXMiLCBQeV9Ob25lKTsKLSAgICB9Ci0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiYnVpbHRpbnMiKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYW51cCBidWlsdGluc1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJidWlsdGlucyIsIFB5X05vbmUpOwotICAgIH0KKyAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCisgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzNdIHdpcGluZyBzeXNcbiIpOworICAgIF9QeU1vZHVsZV9DbGVhckRpY3QoaW50ZXJwLT5zeXNkaWN0KTsKKyAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCisgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzNdIHdpcGluZyBidWlsdGluc1xuIik7CisgICAgX1B5TW9kdWxlX0NsZWFyRGljdChpbnRlcnAtPmJ1aWx0aW5zKTsKIAotICAgIC8qIEZpbmFsbHksIGNsZWFyIGFuZCBkZWxldGUgdGhlIG1vZHVsZXMgZGlyZWN0b3J5ICovCi0gICAgUHlEaWN0X0NsZWFyKG1vZHVsZXMpOworICAgIC8qIENsZWFyIGFuZCBkZWxldGUgdGhlIG1vZHVsZXMgZGlyZWN0b3J5LiAgQWN0dWFsIG1vZHVsZXMgd2lsbAorICAgICAgIHN0aWxsIGJlIHRoZXJlIG9ubHkgaWYgaW1wb3J0ZWQgZHVyaW5nIHRoZSBleGVjdXRpb24gb2Ygc29tZQorICAgICAgIGRlc3RydWN0b3IuICovCiAgICAgaW50ZXJwLT5tb2R1bGVzID0gTlVMTDsKICAgICBQeV9ERUNSRUYobW9kdWxlcyk7CisKKyAgICAvKiBPbmNlIG1vcmUgKi8KKyAgICBfUHlHQ19Db2xsZWN0Tm9GYWlsKCk7CisKKyN1bmRlZiBTVE9SRV9NT0RVTEVfV0VBS1JFRgogfQogCiAKQEAgLTQ1MCwxMiArNTY3LDEyIEBACiAKIC8qIE1hZ2ljIGZvciBleHRlbnNpb24gbW9kdWxlcyAoYnVpbHQtaW4gYXMgd2VsbCBhcyBkeW5hbWljYWxseQogICAgbG9hZGVkKS4gIFRvIHByZXZlbnQgaW5pdGlhbGl6aW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUgbW9yZSB0aGFuCi0gICBvbmNlLCB3ZSBrZWVwIGEgc3RhdGljIGRpY3Rpb25hcnkgJ2V4dGVuc2lvbnMnIGtleWVkIGJ5IG1vZHVsZSBuYW1lCi0gICAoZm9yIGJ1aWx0LWluIG1vZHVsZXMpIG9yIGJ5IGZpbGVuYW1lIChmb3IgZHluYW1pY2FsbHkgbG9hZGVkCi0gICBtb2R1bGVzKSwgY29udGFpbmluZyB0aGVzZSBtb2R1bGVzLiAgQSBjb3B5IG9mIHRoZSBtb2R1bGUncwotICAgZGljdGlvbmFyeSBpcyBzdG9yZWQgYnkgY2FsbGluZyBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoKQotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBzdWNjZWVkcy4gIEEKLSAgIGNvcHkgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZXJlIGJ5IGNhbGxpbmcKKyAgIG9uY2UsIHdlIGtlZXAgYSBzdGF0aWMgZGljdGlvbmFyeSAnZXh0ZW5zaW9ucycga2V5ZWQgYnkgdGhlIHR1cGxlCisgICAobW9kdWxlIG5hbWUsIG1vZHVsZSBuYW1lKSAgKGZvciBidWlsdC1pbiBtb2R1bGVzKSBvciBieQorICAgKGZpbGVuYW1lLCBtb2R1bGUgbmFtZSkgKGZvciBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyksIGNvbnRhaW5pbmcgdGhlc2UKKyAgIG1vZHVsZXMuICBBIGNvcHkgb2YgdGhlIG1vZHVsZSdzIGRpY3Rpb25hcnkgaXMgc3RvcmVkIGJ5IGNhbGxpbmcKKyAgIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdCgpIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAgIGZ1bmN0aW9uIHN1Y2NlZWRzLiAgQSBjb3B5IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGVyZSBieSBjYWxsaW5nCiAgICBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdCgpLgogCiAgICBNb2R1bGVzIHdoaWNoIGRvIHN1cHBvcnQgbXVsdGlwbGUgaW5pdGlhbGl6YXRpb24gc2V0IHRoZWlyIG1fc2l6ZQpAQCAtNDY4LDggKzU4NSw5IEBACiBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoUHlPYmplY3QgKm1vZCwgUHlPYmplY3QgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmZpbGVuYW1lKQogewotICAgIFB5T2JqZWN0ICptb2R1bGVzLCAqZGljdDsKKyAgICBQeU9iamVjdCAqbW9kdWxlcywgKmRpY3QsICprZXk7CiAgICAgc3RydWN0IFB5TW9kdWxlRGVmICpkZWY7CisgICAgaW50IHJlczsKICAgICBpZiAoZXh0ZW5zaW9ucyA9PSBOVUxMKSB7CiAgICAgICAgIGV4dGVuc2lvbnMgPSBQeURpY3RfTmV3KCk7CiAgICAgICAgIGlmIChleHRlbnNpb25zID09IE5VTEwpCkBAIC01MDUsMTIgKzYyMywxOCBAQAogICAgICAgICBpZiAoZGVmLT5tX2Jhc2UubV9jb3B5ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIFB5RGljdF9TZXRJdGVtKGV4dGVuc2lvbnMsIGZpbGVuYW1lLCAoUHlPYmplY3QqKWRlZik7CisgICAga2V5ID0gUHlUdXBsZV9QYWNrKDIsIGZpbGVuYW1lLCBuYW1lKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXMgPSBQeURpY3RfU2V0SXRlbShleHRlbnNpb25zLCBrZXksIChQeU9iamVjdCAqKWRlZik7CisgICAgUHlfREVDUkVGKGtleSk7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gMDsKIH0KIAogaW50Ci1fUHlJbXBvcnRfRml4dXBCdWlsdGluKFB5T2JqZWN0ICptb2QsIGNoYXIgKm5hbWUpCitfUHlJbXBvcnRfRml4dXBCdWlsdGluKFB5T2JqZWN0ICptb2QsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgaW50IHJlczsKICAgICBQeU9iamVjdCAqbmFtZW9iajsKQEAgLTUyNSwxMSArNjQ5LDE1IEBACiBQeU9iamVjdCAqCiBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKmZpbGVuYW1lKQogewotICAgIFB5T2JqZWN0ICptb2QsICptZGljdDsKKyAgICBQeU9iamVjdCAqbW9kLCAqbWRpY3QsICprZXk7CiAgICAgUHlNb2R1bGVEZWYqIGRlZjsKICAgICBpZiAoZXh0ZW5zaW9ucyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBkZWYgPSAoUHlNb2R1bGVEZWYqKVB5RGljdF9HZXRJdGVtKGV4dGVuc2lvbnMsIGZpbGVuYW1lKTsKKyAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgZmlsZW5hbWUsIG5hbWUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZGVmID0gKFB5TW9kdWxlRGVmICopUHlEaWN0X0dldEl0ZW0oZXh0ZW5zaW9ucywga2V5KTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKICAgICBpZiAoZGVmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChkZWYtPm1fc2l6ZSA9PSAtMSkgewpAQCAtNjQ1LDIyICs3NzMsMjMgQEAKICAqIGludGVyZmFjZS4gIFRoZSBvdGhlciB0d28gZXhpc3QgcHJpbWFyaWx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogICovCiBQeU9iamVjdCAqCi1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZShjaGFyICpuYW1lLCBQeU9iamVjdCAqY28pCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZShjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY28pCiB7CiAgICAgcmV0dXJuIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygKICAgICAgICAgbmFtZSwgY28sIChjaGFyICopTlVMTCwgKGNoYXIgKilOVUxMKTsKIH0KIAogUHlPYmplY3QgKgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lKQorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNvbnN0IGNoYXIgKnBhdGhuYW1lKQogewogICAgIHJldHVybiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoCiAgICAgICAgIG5hbWUsIGNvLCBwYXRobmFtZSwgKGNoYXIgKilOVUxMKTsKIH0KIAogUHlPYmplY3QgKgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3BhdGhuYW1lKQorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjcGF0aG5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm0gPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lb2JqLCAqcGF0aG9iaiA9IE5VTEwsICpjcGF0aG9iaiA9IE5VTEw7CkBAIC02OTEsNyArODIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGludGVycHJldGVyISIpOwogICAgICAgICB9CiAKLSAgICAgICAgcGF0aG9iaiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICBwYXRob2JqID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fZ2V0X3NvdXJjZWZpbGUsIGNwYXRob2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgICAgIGlmIChwYXRob2JqID09IE5VTEwpCkBAIC04MDUsMzUgKzkzNCw2NiBAQAogICAgIFB5X0RFQ1JFRihvbGRuYW1lKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5fZml4X2NvX2ZpbGVuYW1lCisKKyAgICBjb2RlOiBvYmplY3QodHlwZT0iUHlDb2RlT2JqZWN0ICoiLCBzdWJjbGFzc19vZj0iJlB5Q29kZV9UeXBlIikKKyAgICAgICAgQ29kZSBvYmplY3QgdG8gY2hhbmdlLgorCisgICAgcGF0aDogdW5pY29kZQorICAgICAgICBGaWxlIHBhdGggdG8gdXNlLgorICAgIC8KKworQ2hhbmdlcyBjb2RlLmNvX2ZpbGVuYW1lIHRvIHNwZWNpZnkgdGhlIHBhc3NlZC1pbiBmaWxlIHBhdGguCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX19maXhfY29fZmlsZW5hbWVfX2RvY19fLAorIl9maXhfY29fZmlsZW5hbWUoJG1vZHVsZSwgY29kZSwgcGF0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNoYW5nZXMgY29kZS5jb19maWxlbmFtZSB0byBzcGVjaWZ5IHRoZSBwYXNzZWQtaW4gZmlsZSBwYXRoLlxuIgorIlxuIgorIiAgY29kZVxuIgorIiAgICBDb2RlIG9iamVjdCB0byBjaGFuZ2UuXG4iCisiICBwYXRoXG4iCisiICAgIEZpbGUgcGF0aCB0byB1c2UuIik7CisKKyNkZWZpbmUgX0lNUF9fRklYX0NPX0ZJTEVOQU1FX01FVEhPRERFRiAgICBcCisgICAgeyJfZml4X2NvX2ZpbGVuYW1lIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfX2ZpeF9jb19maWxlbmFtZSwgTUVUSF9WQVJBUkdTLCBfaW1wX19maXhfY29fZmlsZW5hbWVfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9maXhfY29fZmlsZW5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2ltcF9fZml4X2NvX2ZpbGVuYW1lX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlDb2RlT2JqZWN0ICpjb2RlLCBQeU9iamVjdCAqcGF0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX19maXhfY29fZmlsZW5hbWUoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKmNvOwotICAgIFB5T2JqZWN0ICpmaWxlX3BhdGg7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlDb2RlT2JqZWN0ICpjb2RlOworICAgIFB5T2JqZWN0ICpwYXRoOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTzpfZml4X2NvX2ZpbGVuYW1lIiwgJmNvLCAmZmlsZV9wYXRoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPIVU6X2ZpeF9jb19maWxlbmFtZSIsCisgICAgICAgICZQeUNvZGVfVHlwZSwgJmNvZGUsICZwYXRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfX2ZpeF9jb19maWxlbmFtZV9pbXBsKG1vZHVsZSwgY29kZSwgcGF0aCk7CiAKLSAgICBpZiAoIVB5Q29kZV9DaGVjayhjbykpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29kZSBvYmplY3QiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQogCi0gICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZmlsZV9wYXRoKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX19maXhfY29fZmlsZW5hbWVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeUNvZGVPYmplY3QgKmNvZGUsIFB5T2JqZWN0ICpwYXRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZiNGIxZWRlYjBkNTVjNWQgaW5wdXQ9ODk1YmE1MGU3OGI4MmYwNV0qLwogCi0gICAgdXBkYXRlX2NvbXBpbGVkX21vZHVsZSgoUHlDb2RlT2JqZWN0KiljbywgZmlsZV9wYXRoKTsKK3sKKyAgICB1cGRhdGVfY29tcGlsZWRfbW9kdWxlKGNvZGUsIHBhdGgpOwogCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIAogLyogRm9yd2FyZCAqLwotc3RhdGljIHN0cnVjdCBfZnJvemVuICogZmluZF9mcm96ZW4oUHlPYmplY3QgKik7CitzdGF0aWMgY29uc3Qgc3RydWN0IF9mcm96ZW4gKiBmaW5kX2Zyb3plbihQeU9iamVjdCAqKTsKIAogCiAvKiBIZWxwZXIgdG8gdGVzdCBmb3IgYnVpbHQtaW4gbW9kdWxlICovCkBAIC05MTUsMTEgKzEwNzUsMTEgQEAKIFB5SW1wb3J0X0dldEltcG9ydGVyKFB5T2JqZWN0ICpwYXRoKSB7CiAgICAgUHlPYmplY3QgKmltcG9ydGVyPU5VTEwsICpwYXRoX2ltcG9ydGVyX2NhY2hlPU5VTEwsICpwYXRoX2hvb2tzPU5VTEw7CiAKLSAgICBpZiAoKHBhdGhfaW1wb3J0ZXJfY2FjaGUgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaW1wb3J0ZXJfY2FjaGUiKSkpIHsKLSAgICAgICAgaWYgKChwYXRoX2hvb2tzID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2hvb2tzIikpKSB7Ci0gICAgICAgICAgICBpbXBvcnRlciA9IGdldF9wYXRoX2ltcG9ydGVyKHBhdGhfaW1wb3J0ZXJfY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaG9va3MsIHBhdGgpOwotICAgICAgICB9CisgICAgcGF0aF9pbXBvcnRlcl9jYWNoZSA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9pbXBvcnRlcl9jYWNoZSIpOworICAgIHBhdGhfaG9va3MgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaG9va3MiKTsKKyAgICBpZiAocGF0aF9pbXBvcnRlcl9jYWNoZSAhPSBOVUxMICYmIHBhdGhfaG9va3MgIT0gTlVMTCkgeworICAgICAgICBpbXBvcnRlciA9IGdldF9wYXRoX2ltcG9ydGVyKHBhdGhfaW1wb3J0ZXJfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9ob29rcywgcGF0aCk7CiAgICAgfQogICAgIFB5X1hJTkNSRUYoaW1wb3J0ZXIpOyAvKiBnZXRfcGF0aF9pbXBvcnRlciByZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlICovCiAgICAgcmV0dXJuIGltcG9ydGVyOwpAQCAtOTM2LDggKzEwOTYsMTIgQEAKIGluaXRfYnVpbHRpbihQeU9iamVjdCAqbmFtZSkKIHsKICAgICBzdHJ1Y3QgX2luaXR0YWIgKnA7CisgICAgUHlPYmplY3QgKm1vZDsKIAotICAgIGlmIChfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChuYW1lLCBuYW1lKSAhPSBOVUxMKQorICAgIG1vZCA9IF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uT2JqZWN0KG5hbWUsIG5hbWUpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG1vZCAhPSBOVUxMKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIGZvciAocCA9IFB5SW1wb3J0X0luaXR0YWI7IHAtPm5hbWUgIT0gTlVMTDsgcCsrKSB7CkBAIC05NzAsMTAgKzExMzQsMTAgQEAKIAogLyogRnJvemVuIG1vZHVsZXMgKi8KIAotc3RhdGljIHN0cnVjdCBfZnJvemVuICoKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqCiBmaW5kX2Zyb3plbihQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdHJ1Y3QgX2Zyb3plbiAqcDsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcDsKIAogICAgIGlmIChuYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtOTkwLDcgKzExNTQsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9mcm96ZW5fb2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwID0gZmluZF9mcm96ZW4obmFtZSk7CisgICAgY29uc3Qgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKICAgICBpbnQgc2l6ZTsKIAogICAgIGlmIChwID09IE5VTEwpIHsKQEAgLTEwMDgsMTMgKzExNzIsMTMgQEAKICAgICBzaXplID0gcC0+c2l6ZTsKICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgIHNpemUgPSAtc2l6ZTsKLSAgICByZXR1cm4gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjaGFyICopcC0+Y29kZSwgc2l6ZSk7CisgICAgcmV0dXJuIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZygoY29uc3QgY2hhciAqKXAtPmNvZGUsIHNpemUpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogaXNfZnJvemVuX3BhY2thZ2UoUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcCA9IGZpbmRfZnJvemVuKG5hbWUpOwogICAgIGludCBzaXplOwogCiAgICAgaWYgKHAgPT0gTlVMTCkgewpAQCAtMTA0MSw3ICsxMjA1LDcgQEAKIGludAogUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwOwogICAgIFB5T2JqZWN0ICpjbywgKm0sICpwYXRoOwogICAgIGludCBpc3BhY2thZ2U7CiAgICAgaW50IHNpemU7CkBAIC0xMDYwLDcgKzEyMjQsNyBAQAogICAgIGlzcGFja2FnZSA9IChzaXplIDwgMCk7CiAgICAgaWYgKGlzcGFja2FnZSkKICAgICAgICAgc2l6ZSA9IC1zaXplOwotICAgIGNvID0gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjaGFyICopcC0+Y29kZSwgc2l6ZSk7CisgICAgY28gPSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoKGNvbnN0IGNoYXIgKilwLT5jb2RlLCBzaXplKTsKICAgICBpZiAoY28gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICghUHlDb2RlX0NoZWNrKGNvKSkgewpAQCAtMTA3MCwxOSArMTIzNCwxNyBAQAogICAgICAgICBnb3RvIGVycl9yZXR1cm47CiAgICAgfQogICAgIGlmIChpc3BhY2thZ2UpIHsKLSAgICAgICAgLyogU2V0IF9fcGF0aF9fIHRvIHRoZSBwYWNrYWdlIG5hbWUgKi8KKyAgICAgICAgLyogU2V0IF9fcGF0aF9fIHRvIHRoZSBlbXB0eSBsaXN0ICovCiAgICAgICAgIFB5T2JqZWN0ICpkLCAqbDsKICAgICAgICAgaW50IGVycjsKICAgICAgICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZU9iamVjdChuYW1lKTsKICAgICAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyX3JldHVybjsKICAgICAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgICAgIGwgPSBQeUxpc3RfTmV3KDEpOworICAgICAgICBsID0gUHlMaXN0X05ldygwKTsKICAgICAgICAgaWYgKGwgPT0gTlVMTCkgewogICAgICAgICAgICAgZ290byBlcnJfcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGwsIDAsIG5hbWUpOwogICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19wYXRoX18iLCBsKTsKICAgICAgICAgUHlfREVDUkVGKGwpOwogICAgICAgICBpZiAoZXJyICE9IDApCkBAIC0xMTA0LDcgKzEyNjYsNyBAQAogfQogCiBpbnQKLVB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZShjaGFyICpuYW1lKQorUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm5hbWVvYmo7CiAgICAgaW50IHJldDsKQEAgLTEyMTgsNyArMTM4MCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwpCiB7CiAgICAgX1B5X0lERU5USUZJRVIoX19pbXBvcnRfXyk7Ci0gICAgX1B5X0lERU5USUZJRVIoX19pbml0aWFsaXppbmdfXyk7CisgICAgX1B5X0lERU5USUZJRVIoX19zcGVjX18pOworICAgIF9QeV9JREVOVElGSUVSKF9pbml0aWFsaXppbmcpOwogICAgIF9QeV9JREVOVElGSUVSKF9fcGFja2FnZV9fKTsKICAgICBfUHlfSURFTlRJRklFUihfX3BhdGhfXyk7CiAgICAgX1B5X0lERU5USUZJRVIoX19uYW1lX18pOwpAQCAtMTM1NCw3ICsxNTE3LDExIEBACiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIGJhc2UgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKHBhY2thZ2UsIDAsIGxhc3RfZG90KTsKKyAgICAgICAgaWYgKGJhc2UgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpID4gMCkgewogICAgICAgICAgICAgUHlPYmplY3QgKmJvcnJvd2VkX2RvdCwgKnNlcSA9IE5VTEw7CiAKQEAgLTE0MDgsMTYgKzE1NzUsMjEgQEAKICAgICAgICAgZ290byBlcnJvcl93aXRoX3VubG9jazsKICAgICB9CiAgICAgZWxzZSBpZiAobW9kICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKnZhbHVlOworICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOworICAgICAgICBQeU9iamVjdCAqc3BlYzsKICAgICAgICAgaW50IGluaXRpYWxpemluZyA9IDA7CiAKICAgICAgICAgUHlfSU5DUkVGKG1vZCk7CiAgICAgICAgIC8qIE9wdGltaXphdGlvbjogb25seSBjYWxsIF9ib290c3RyYXAuX2xvY2tfdW5sb2NrX21vZHVsZSgpIGlmCi0gICAgICAgICAgIF9faW5pdGlhbGl6aW5nX18gaXMgdHJ1ZS4KLSAgICAgICAgICAgTk9URTogYmVjYXVzZSBvZiB0aGlzLCBfX2luaXRpYWxpemluZ19fIG11c3QgYmUgc2V0ICpiZWZvcmUqCisgICAgICAgICAgIF9fc3BlY19fLl9pbml0aWFsaXppbmcgaXMgdHJ1ZS4KKyAgICAgICAgICAgTk9URTogYmVjYXVzZSBvZiB0aGlzLCBpbml0aWFsaXppbmcgbXVzdCBiZSBzZXQgKmJlZm9yZSoKICAgICAgICAgICAgc3R1ZmZpbmcgdGhlIG5ldyBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuCiAgICAgICAgICAqLwotICAgICAgICB2YWx1ZSA9IF9QeU9iamVjdF9HZXRBdHRySWQobW9kLCAmUHlJZF9fX2luaXRpYWxpemluZ19fKTsKKyAgICAgICAgc3BlYyA9IF9QeU9iamVjdF9HZXRBdHRySWQobW9kLCAmUHlJZF9fX3NwZWNfXyk7CisgICAgICAgIGlmIChzcGVjICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gX1B5T2JqZWN0X0dldEF0dHJJZChzcGVjLCAmUHlJZF9faW5pdGlhbGl6aW5nKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzcGVjKTsKKyAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGVsc2UgewpAQCAtMTQyOCw3ICsxNjAwLDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoaW5pdGlhbGl6aW5nID4gMCkgewogICAgICAgICAgICAgLyogX2Jvb3RzdHJhcC5fbG9ja191bmxvY2tfbW9kdWxlKCkgcmVsZWFzZXMgdGhlIGltcG9ydCBsb2NrICovCi0gICAgICAgICAgICB2YWx1ZSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICAgICAgdmFsdWUgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX2xvY2tfdW5sb2NrX21vZHVsZSwgYWJzX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCkBAIC0xNDQ2LDcgKzE2MTgsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLyogX2Jvb3RzdHJhcC5fZmluZF9hbmRfbG9hZCgpIHJlbGVhc2VzIHRoZSBpbXBvcnQgbG9jayAqLwotICAgICAgICBtb2QgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19maW5kX2FuZF9sb2FkLCBhYnNfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRpbnNfaW1wb3J0LCBOVUxMKTsKICAgICAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CkBAIC0xNTE1LDcgKzE2ODcsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBmaW5hbF9tb2QgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgZmluYWxfbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19oYW5kbGVfZnJvbWxpc3QsIG1vZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3QsIGJ1aWx0aW5zX2ltcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CkBAIC0xNjY3LDggKzE4MzksMzMgQEAKICAgICByZXR1cm4gcjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5leHRlbnNpb25fc3VmZml4ZXMKKworUmV0dXJucyB0aGUgbGlzdCBvZiBmaWxlIHN1ZmZpeGVzIHVzZWQgdG8gaWRlbnRpZnkgZXh0ZW5zaW9uIG1vZHVsZXMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19fZG9jX18sCisiZXh0ZW5zaW9uX3N1ZmZpeGVzKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBsaXN0IG9mIGZpbGUgc3VmZml4ZXMgdXNlZCB0byBpZGVudGlmeSBleHRlbnNpb24gbW9kdWxlcy4iKTsKKworI2RlZmluZSBfSU1QX0VYVEVOU0lPTl9TVUZGSVhFU19NRVRIT0RERUYgICAgXAorICAgIHsiZXh0ZW5zaW9uX3N1ZmZpeGVzIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzLCBNRVRIX05PQVJHUywgX2ltcF9leHRlbnNpb25fc3VmZml4ZXNfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9leHRlbnNpb25fc3VmZml4ZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9leHRlbnNpb25fc3VmZml4ZXMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2ltcF9leHRlbnNpb25fc3VmZml4ZXNfaW1wbChtb2R1bGUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9leHRlbnNpb25fc3VmZml4ZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJiMzBhMjQzODE2Nzc5OGMgaW5wdXQ9ZWNkZWVlY2ZjYjZmODM5ZV0qLwogewogICAgIFB5T2JqZWN0ICpsaXN0OwogICAgIGNvbnN0IGNoYXIgKnN1ZmZpeDsKQEAgLTE2OTYsMTQgKzE4OTMsNTAgQEAKICAgICByZXR1cm4gbGlzdDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5pbml0X2J1aWx0aW4KKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK0luaXRpYWxpemVzIGEgYnVpbHQtaW4gbW9kdWxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9pbml0X2J1aWx0aW5fX2RvY19fLAorImluaXRfYnVpbHRpbigkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiSW5pdGlhbGl6ZXMgYSBidWlsdC1pbiBtb2R1bGUuIik7CisKKyNkZWZpbmUgX0lNUF9JTklUX0JVSUxUSU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImluaXRfYnVpbHRpbiIsIChQeUNGdW5jdGlvbilfaW1wX2luaXRfYnVpbHRpbiwgTUVUSF9WQVJBUkdTLCBfaW1wX2luaXRfYnVpbHRpbl9fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2luaXRfYnVpbHRpbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2luaXRfYnVpbHRpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaW5pdF9idWlsdGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmluaXRfYnVpbHRpbiIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaW5pdF9idWlsdGluX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pbml0X2J1aWx0aW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hMDI0NDk0OGE0M2Y4ZTI2IGlucHV0PWY5MzRkMjIzMWVjNTJhMmVdKi8KK3sKICAgICBpbnQgcmV0OwogICAgIFB5T2JqZWN0ICptOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTppbml0X2J1aWx0aW4iLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworCiAgICAgcmV0ID0gaW5pdF9idWlsdGluKG5hbWUpOwogICAgIGlmIChyZXQgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3MTYsMTQgKzE5NDksNTAgQEAKICAgICByZXR1cm4gbTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5pbml0X2Zyb3plbgorCisgICAgbmFtZTogdW5pY29kZQorICAgIC8KKworSW5pdGlhbGl6ZXMgYSBmcm96ZW4gbW9kdWxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9pbml0X2Zyb3plbl9fZG9jX18sCisiaW5pdF9mcm96ZW4oJG1vZHVsZSwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkluaXRpYWxpemVzIGEgZnJvemVuIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0lOSVRfRlJPWkVOX01FVEhPRERFRiAgICBcCisgICAgeyJpbml0X2Zyb3plbiIsIChQeUNGdW5jdGlvbilfaW1wX2luaXRfZnJvemVuLCBNRVRIX1ZBUkFSR1MsIF9pbXBfaW5pdF9mcm96ZW5fX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9pbml0X2Zyb3plbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2luaXRfZnJvemVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pbml0X2Zyb3plbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiVTppbml0X2Zyb3plbiIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaW5pdF9mcm96ZW5faW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2luaXRfZnJvemVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTRiYzJiZmYyOTZmOGYyMiBpbnB1dD0xMzAxOWFkZmMwNGYzZmIzXSovCit7CiAgICAgaW50IHJldDsKICAgICBQeU9iamVjdCAqbTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6aW5pdF9mcm96ZW4iLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworCiAgICAgcmV0ID0gUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0KG5hbWUpOwogICAgIGlmIChyZXQgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3MzYsNjEgKzIwMDUsMjM5IEBACiAgICAgcmV0dXJuIG07CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAuZ2V0X2Zyb3plbl9vYmplY3QKKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK0NyZWF0ZSBhIGNvZGUgb2JqZWN0IGZvciBhIGZyb3plbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2dldF9mcm96ZW5fb2JqZWN0X19kb2NfXywKKyJnZXRfZnJvemVuX29iamVjdCgkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgY29kZSBvYmplY3QgZm9yIGEgZnJvemVuIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0dFVF9GUk9aRU5fT0JKRUNUX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRfZnJvemVuX29iamVjdCIsIChQeUNGdW5jdGlvbilfaW1wX2dldF9mcm96ZW5fb2JqZWN0LCBNRVRIX1ZBUkFSR1MsIF9pbXBfZ2V0X2Zyb3plbl9vYmplY3RfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9nZXRfZnJvemVuX29iamVjdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2dldF9mcm96ZW5fb2JqZWN0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9nZXRfZnJvemVuX29iamVjdChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpnZXRfZnJvemVuX29iamVjdCIsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmdldF9mcm96ZW5fb2JqZWN0IiwKKyAgICAgICAgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9nZXRfZnJvemVuX29iamVjdF9pbXBsKG1vZHVsZSwgbmFtZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfZ2V0X2Zyb3plbl9vYmplY3RfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00MDg5ZWM3MDJhOWQ3MGM1IGlucHV0PWVkNjg5YmMwNTM1OGZkYmRdKi8KK3sKICAgICByZXR1cm4gZ2V0X2Zyb3plbl9vYmplY3QobmFtZSk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAuaXNfZnJvemVuX3BhY2thZ2UKKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK1JldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgaXMgb2YgYSBmcm96ZW4gcGFja2FnZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfaXNfZnJvemVuX3BhY2thZ2VfX2RvY19fLAorImlzX2Zyb3plbl9wYWNrYWdlKCRtb2R1bGUsIG5hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIFRydWUgaWYgdGhlIG1vZHVsZSBuYW1lIGlzIG9mIGEgZnJvemVuIHBhY2thZ2UuIik7CisKKyNkZWZpbmUgX0lNUF9JU19GUk9aRU5fUEFDS0FHRV9NRVRIT0RERUYgICAgXAorICAgIHsiaXNfZnJvemVuX3BhY2thZ2UiLCAoUHlDRnVuY3Rpb24pX2ltcF9pc19mcm96ZW5fcGFja2FnZSwgTUVUSF9WQVJBUkdTLCBfaW1wX2lzX2Zyb3plbl9wYWNrYWdlX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1pbXBfaXNfZnJvemVuX3BhY2thZ2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2ltcF9pc19mcm96ZW5fcGFja2FnZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfZnJvemVuX3BhY2thZ2UoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm5hbWU7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6aXNfZnJvemVuX3BhY2thZ2UiLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiVTppc19mcm96ZW5fcGFja2FnZSIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaXNfZnJvemVuX3BhY2thZ2VfaW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2lzX2Zyb3plbl9wYWNrYWdlX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODZhYWIxNGRjZDRiOTU5YiBpbnB1dD04MWI2Y2RlY2QwODBmYmI4XSovCit7CiAgICAgcmV0dXJuIGlzX2Zyb3plbl9wYWNrYWdlKG5hbWUpOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmlzX2J1aWx0aW4KKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK1JldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgY29ycmVzcG9uZHMgdG8gYSBidWlsdC1pbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2lzX2J1aWx0aW5fX2RvY19fLAorImlzX2J1aWx0aW4oJG1vZHVsZSwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgY29ycmVzcG9uZHMgdG8gYSBidWlsdC1pbiBtb2R1bGUuIik7CisKKyNkZWZpbmUgX0lNUF9JU19CVUlMVElOX01FVEhPRERFRiAgICBcCisgICAgeyJpc19idWlsdGluIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfaXNfYnVpbHRpbiwgTUVUSF9WQVJBUkdTLCBfaW1wX2lzX2J1aWx0aW5fX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9pc19idWlsdGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pbXBfaXNfYnVpbHRpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfYnVpbHRpbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6aXNfYnVpbHRpbiIsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhpc19idWlsdGluKG5hbWUpKTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiVTppc19idWlsdGluIiwKKyAgICAgICAgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9pc19idWlsdGluX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2lzX2Zyb3plbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2lzX2J1aWx0aW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNTg0N2Y4Y2FjNTA5NDZlIGlucHV0PTg2YmVmZGFjMDIxZGQxYzddKi8KIHsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGlzX2J1aWx0aW4obmFtZSkpOworfQorCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmlzX2Zyb3plbgorCisgICAgbmFtZTogdW5pY29kZQorICAgIC8KKworUmV0dXJucyBUcnVlIGlmIHRoZSBtb2R1bGUgbmFtZSBjb3JyZXNwb25kcyB0byBhIGZyb3plbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2lzX2Zyb3plbl9fZG9jX18sCisiaXNfZnJvemVuKCRtb2R1bGUsIG5hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIFRydWUgaWYgdGhlIG1vZHVsZSBuYW1lIGNvcnJlc3BvbmRzIHRvIGEgZnJvemVuIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0lTX0ZST1pFTl9NRVRIT0RERUYgICAgXAorICAgIHsiaXNfZnJvemVuIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfaXNfZnJvemVuLCBNRVRIX1ZBUkFSR1MsIF9pbXBfaXNfZnJvemVuX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2lzX2Zyb3plbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfZnJvemVuKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lOwotICAgIHN0cnVjdCBfZnJvemVuICpwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTppc19mcm96ZW4iLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmlzX2Zyb3plbiIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaXNfZnJvemVuX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pc19mcm96ZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02NjkxYWY4ODRiYTQ5ODdkIGlucHV0PTczMDFkYmNhMTg5N2Q2NmJdKi8KK3sKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcDsKKwogICAgIHAgPSBmaW5kX2Zyb3plbihuYW1lKTsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKChsb25nKSAocCA9PSBOVUxMID8gMCA6IHAtPnNpemUpKTsKIH0KIAogI2lmZGVmIEhBVkVfRFlOQU1JQ19MT0FESU5HCiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAubG9hZF9keW5hbWljCisKKyAgICBuYW1lOiB1bmljb2RlCisgICAgcGF0aDogZnNfdW5pY29kZQorICAgIGZpbGU6IG9iamVjdCA9IE5VTEwKKyAgICAvCisKK0xvYWRzIGFuIGV4dGVuc2lvbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2xvYWRfZHluYW1pY19fZG9jX18sCisibG9hZF9keW5hbWljKCRtb2R1bGUsIG5hbWUsIHBhdGgsIGZpbGU9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkxvYWRzIGFuIGV4dGVuc2lvbiBtb2R1bGUuIik7CisKKyNkZWZpbmUgX0lNUF9MT0FEX0RZTkFNSUNfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvYWRfZHluYW1pYyIsIChQeUNGdW5jdGlvbilfaW1wX2xvYWRfZHluYW1pYywgTUVUSF9WQVJBUkdTLCBfaW1wX2xvYWRfZHluYW1pY19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2xvYWRfZHluYW1pYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2xvYWRfZHluYW1pY19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqcGF0aCwgUHlPYmplY3QgKmZpbGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9sb2FkX2R5bmFtaWMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm5hbWUsICpwYXRobmFtZSwgKmZvYiA9IE5VTEwsICptb2Q7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm5hbWU7CisgICAgUHlPYmplY3QgKnBhdGg7CisgICAgUHlPYmplY3QgKmZpbGUgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVTyZ8Tzpsb2FkX2R5bmFtaWMiLAorICAgICAgICAmbmFtZSwgUHlVbmljb2RlX0ZTRGVjb2RlciwgJnBhdGgsICZmaWxlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfbG9hZF9keW5hbWljX2ltcGwobW9kdWxlLCBuYW1lLCBwYXRoLCBmaWxlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9sb2FkX2R5bmFtaWNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnBhdGgsIFB5T2JqZWN0ICpmaWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTgxZDExYTFmYmQxZWEwYTggaW5wdXQ9YWY2NGYwNmU0YmFkMzUyNl0qLworeworICAgIFB5T2JqZWN0ICptb2Q7CiAgICAgRklMRSAqZnA7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVPJnxPOmxvYWRfZHluYW1pYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmcGF0aG5hbWUsICZmb2IpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoZm9iICE9IE5VTEwpIHsKLSAgICAgICAgZnAgPSBfUHlfZm9wZW4ocGF0aG5hbWUsICJyIik7CisgICAgaWYgKGZpbGUgIT0gTlVMTCkgeworICAgICAgICBmcCA9IF9QeV9mb3Blbl9vYmoocGF0aCwgInIiKTsKICAgICAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihwYXRobmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocGF0aCk7CiAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzk4LDggKzIyNDUsOCBAQAogICAgIH0KICAgICBlbHNlCiAgICAgICAgIGZwID0gTlVMTDsKLSAgICBtb2QgPSBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGUobmFtZSwgcGF0aG5hbWUsIGZwKTsKLSAgICBQeV9ERUNSRUYocGF0aG5hbWUpOworICAgIG1vZCA9IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZShuYW1lLCBwYXRoLCBmcCk7CisgICAgUHlfREVDUkVGKHBhdGgpOwogICAgIGlmIChmcCkKICAgICAgICAgZmNsb3NlKGZwKTsKICAgICByZXR1cm4gbW9kOwpAQCAtMTgwNyw1MCArMjI1NCwzMyBAQAogCiAjZW5kaWYgLyogSEFWRV9EWU5BTUlDX0xPQURJTkcgKi8KIAorLypbY2xpbmljIGlucHV0XQorZHVtcCBidWZmZXIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotLyogRG9jIHN0cmluZ3MgKi8KKyNpZm5kZWYgX0lNUF9MT0FEX0RZTkFNSUNfTUVUSE9EREVGCisgICAgI2RlZmluZSBfSU1QX0xPQURfRFlOQU1JQ19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChfSU1QX0xPQURfRFlOQU1JQ19NRVRIT0RERUYpICovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDA3YzFkNGEzNDNhOTU3OSBpbnB1dD01MjRjZTJlMDIxZTRlYmE2XSovCisKIAogUHlEb2NfU1RSVkFSKGRvY19pbXAsCiAiKEV4dHJlbWVseSkgbG93LWxldmVsIGltcG9ydCBtYWNoaW5lcnkgYml0cyBhcyB1c2VkIGJ5IGltcG9ydGxpYiBhbmQgaW1wLiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2V4dGVuc2lvbl9zdWZmaXhlcywKLSJleHRlbnNpb25fc3VmZml4ZXMoKSAtPiBsaXN0IG9mIHN0cmluZ3NcblwKLVJldHVybnMgdGhlIGxpc3Qgb2YgZmlsZSBzdWZmaXhlcyB1c2VkIHRvIGlkZW50aWZ5IGV4dGVuc2lvbiBtb2R1bGVzLiIpOwotCi1QeURvY19TVFJWQVIoZG9jX2xvY2tfaGVsZCwKLSJsb2NrX2hlbGQoKSAtPiBib29sZWFuXG5cCi1SZXR1cm4gVHJ1ZSBpZiB0aGUgaW1wb3J0IGxvY2sgaXMgY3VycmVudGx5IGhlbGQsIGVsc2UgRmFsc2UuXG5cCi1PbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCByZXR1cm4gRmFsc2UuIik7Ci0KLVB5RG9jX1NUUlZBUihkb2NfYWNxdWlyZV9sb2NrLAotImFjcXVpcmVfbG9jaygpIC0+IE5vbmVcblwKLUFjcXVpcmVzIHRoZSBpbnRlcnByZXRlcidzIGltcG9ydCBsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQuXG5cCi1UaGlzIGxvY2sgc2hvdWxkIGJlIHVzZWQgYnkgaW1wb3J0IGhvb2tzIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5XG5cCi13aGVuIGltcG9ydGluZyBtb2R1bGVzLlxuXAotT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIik7Ci0KLVB5RG9jX1NUUlZBUihkb2NfcmVsZWFzZV9sb2NrLAotInJlbGVhc2VfbG9jaygpIC0+IE5vbmVcblwKLVJlbGVhc2UgdGhlIGludGVycHJldGVyJ3MgaW1wb3J0IGxvY2suXG5cCi1PbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4iKTsKLQogc3RhdGljIFB5TWV0aG9kRGVmIGltcF9tZXRob2RzW10gPSB7Ci0gICAgeyJleHRlbnNpb25fc3VmZml4ZXMiLCBpbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzLCBNRVRIX05PQVJHUywKLSAgICAgICAgZG9jX2V4dGVuc2lvbl9zdWZmaXhlc30sCi0gICAgeyJsb2NrX2hlbGQiLCAgICAgICAgaW1wX2xvY2tfaGVsZCwgICAgTUVUSF9OT0FSR1MsICBkb2NfbG9ja19oZWxkfSwKLSAgICB7ImFjcXVpcmVfbG9jayIsIGltcF9hY3F1aXJlX2xvY2ssIE1FVEhfTk9BUkdTLCAgZG9jX2FjcXVpcmVfbG9ja30sCi0gICAgeyJyZWxlYXNlX2xvY2siLCBpbXBfcmVsZWFzZV9sb2NrLCBNRVRIX05PQVJHUywgIGRvY19yZWxlYXNlX2xvY2t9LAotICAgIHsiZ2V0X2Zyb3plbl9vYmplY3QiLCAgICAgICBpbXBfZ2V0X2Zyb3plbl9vYmplY3QsICBNRVRIX1ZBUkFSR1N9LAotICAgIHsiaXNfZnJvemVuX3BhY2thZ2UiLCAgIGltcF9pc19mcm96ZW5fcGFja2FnZSwgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpbml0X2J1aWx0aW4iLCAgICAgICAgICAgIGltcF9pbml0X2J1aWx0aW4sICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpbml0X2Zyb3plbiIsICAgICAgICAgICAgIGltcF9pbml0X2Zyb3plbiwgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpc19idWlsdGluIiwgICAgICAgICAgICAgIGltcF9pc19idWlsdGluLCAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpc19mcm96ZW4iLCAgICAgICAgICAgICAgIGltcF9pc19mcm96ZW4sICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0jaWZkZWYgSEFWRV9EWU5BTUlDX0xPQURJTkcKLSAgICB7ImxvYWRfZHluYW1pYyIsICAgICAgICAgICAgaW1wX2xvYWRfZHluYW1pYywgICAgICAgTUVUSF9WQVJBUkdTfSwKLSNlbmRpZgotICAgIHsiX2ZpeF9jb19maWxlbmFtZSIsICAgICAgICBpbXBfZml4X2NvX2ZpbGVuYW1lLCAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KKyAgICBfSU1QX0VYVEVOU0lPTl9TVUZGSVhFU19NRVRIT0RERUYKKyAgICBfSU1QX0xPQ0tfSEVMRF9NRVRIT0RERUYKKyAgICBfSU1QX0FDUVVJUkVfTE9DS19NRVRIT0RERUYKKyAgICBfSU1QX1JFTEVBU0VfTE9DS19NRVRIT0RERUYKKyAgICBfSU1QX0dFVF9GUk9aRU5fT0JKRUNUX01FVEhPRERFRgorICAgIF9JTVBfSVNfRlJPWkVOX1BBQ0tBR0VfTUVUSE9EREVGCisgICAgX0lNUF9JTklUX0JVSUxUSU5fTUVUSE9EREVGCisgICAgX0lNUF9JTklUX0ZST1pFTl9NRVRIT0RERUYKKyAgICBfSU1QX0lTX0JVSUxUSU5fTUVUSE9EREVGCisgICAgX0lNUF9JU19GUk9aRU5fTUVUSE9EREVGCisgICAgX0lNUF9MT0FEX0RZTkFNSUNfTUVUSE9EREVGCisgICAgX0lNUF9fRklYX0NPX0ZJTEVOQU1FX01FVEhPRERFRgorICAgIHtOVUxMLCBOVUxMfSAgLyogc2VudGluZWwgKi8KIH07CiAKIApAQCAtMTk0MCwzICsyMzcwLDQgQEAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCisKZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnRkbC5jIGIvUHl0aG9uL2ltcG9ydGRsLmMKaW5kZXggMGVhOTU0Yy4uYjYwZjFjNyAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydGRsLmMKKysrIGIvUHl0aG9uL2ltcG9ydGRsLmMKQEAgLTc3LDYgKzc3LDggQEAKICAgICAgICAgUHlPYmplY3QgKm1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJkeW5hbWljIG1vZHVsZSBkb2VzIG5vdCBkZWZpbmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluaXQgZnVuY3Rpb24gKFB5SW5pdF8lcykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRuYW1lKTsKKyAgICAgICAgaWYgKG1zZyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgUHlFcnJfU2V0SW1wb3J0RXJyb3IobXNnLCBuYW1lLCBwYXRoKTsKICAgICAgICAgUHlfREVDUkVGKG1zZyk7CiAgICAgICAgIGdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0ZGwuaCBiL1B5dGhvbi9pbXBvcnRkbC5oCmluZGV4IDZiOWNmNzUuLjZhNTFhOTEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnRkbC5oCisrKyBiL1B5dGhvbi9pbXBvcnRkbC5oCkBAIC0xOCwxMyArMTgsOCBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIHR5cGVkZWYgRkFSUFJPQyBkbF9mdW5jcHRyOwogI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxvczJkZWYuaD4KLXR5cGVkZWYgaW50ICgqIEFQSUVOVFJZIGRsX2Z1bmNwdHIpKCk7Ci0jZWxzZQogdHlwZWRlZiB2b2lkICgqZGxfZnVuY3B0cikodm9pZCk7CiAjZW5kaWYKLSNlbmRpZgogCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydGxpYi5oIGIvUHl0aG9uL2ltcG9ydGxpYi5oCmluZGV4IGNiNmFmYzUuLmQ4NGQ5ZmIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnRsaWIuaAorKysgYi9QeXRob24vaW1wb3J0bGliLmgKQEAgLTEsMjg2ICsxLDI1NyBAQAogLyogQXV0by1nZW5lcmF0ZWQgYnkgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jICovCi11bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHsKLSAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwKLSAgICAwLDY0LDAsMCwwLDExNSwyMDYsMywwLDAsMTAwLDAsMCw5MCwwLDAsCi0gICAgMTAwLDEzMSwwLDkwLDEsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCwKK2NvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X01fX2ltcG9ydGxpYltdID0geworICAgIDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLAorICAgIDAsNjQsMCwwLDAsMTE1LDIxMyw0LDAsMCwxMDAsMCwwLDkwLDAsMCwKKyAgICAxMDAsMTYxLDAsOTAsMSwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLAogICAgIDIsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCwzLDAsMTAwLDgsCiAgICAgMCwxMDAsOSwwLDEzMiwwLDAsOTAsNCwwLDEwMCwxMCwwLDEwMCwxMSwwLAogICAgIDEzMiwwLDAsOTAsNSwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsCiAgICAgNiwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxNiwKICAgICAwLDEwMCwxNywwLDEzMiwwLDAsOTAsOCwwLDEwMCwxOCwwLDEwMCwxOSwwLAotICAgIDEzMiwwLDAsOTAsOSwwLDEwMCwyMCwwLDEwMCwyMSwwLDEwMCwyMiwwLDEzMiwKLSAgICAxLDAsOTAsMTAsMCwxMDAsMjMsMCwxMDAsMjQsMCwxMzIsMCwwLDkwLDExLAotICAgIDAsMTAxLDEyLDAsMTAxLDExLDAsMTA2LDEzLDAsMTMxLDEsMCw5MCwxNCwwLAotICAgIDEwMCwyNSwwLDEwMCwyNiwwLDEzMiwwLDAsOTAsMTUsMCwxMDUsMCwwLDkwLAotICAgIDE2LDAsMTA1LDAsMCw5MCwxNywwLDcxLDEwMCwyNywwLDEwMCwyOCwwLDEzMiwKLSAgICAwLDAsMTAwLDI4LDAsMTAxLDE4LDAsMTMxLDMsMCw5MCwxOSwwLDcxLDEwMCwKLSAgICAyOSwwLDEwMCwzMCwwLDEzMiwwLDAsMTAwLDMwLDAsMTMxLDIsMCw5MCwyMCwKLSAgICAwLDcxLDEwMCwzMSwwLDEwMCwzMiwwLDEzMiwwLDAsMTAwLDMyLDAsMTMxLDIsCi0gICAgMCw5MCwyMSwwLDEwMCwzMywwLDEwMCwzNCwwLDEzMiwwLDAsOTAsMjIsMCwKLSAgICAxMDAsMzUsMCwxMDAsMzYsMCwxMzIsMCwwLDkwLDIzLDAsMTAwLDM3LDAsMTAwLAotICAgIDM4LDAsMTMyLDAsMCw5MCwyNCwwLDEwMCwzOSwwLDEwMSwyNSwwLDEwMCw0MCwKLSAgICAwLDEzMSwxLDAsMTAwLDQxLDAsNjIsNjYsMTAxLDI1LDAsMTAwLDQyLDAsMTMxLAotICAgIDEsMCwxMDAsNDMsMCw2Miw2Niw5MCwyNiwwLDEwMSwyNywwLDEwMCw0NCwwLAotICAgIDEwMCw0NSwwLDEzMiwwLDAsMTAxLDI4LDAsMTAwLDQ2LDAsMTAwLDQ3LDAsMTAwLAotICAgIDQ4LDAsMTMxLDMsMCw2OCwxMzEsMSwwLDEzMSwxLDAsOTAsMjksMCwxMDAsCi0gICAgNDksMCw5MCwzMCwwLDEwMCw1MCwwLDEwMywxLDAsOTAsMzEsMCwxMDAsNTEsCi0gICAgMCwxMDMsMSwwLDkwLDMyLDAsMTAwLDUyLDAsMTAzLDEsMCw5MCwzMywwLAotICAgIDEwMCwxMzAsMCwxMDAsNTMsMCwxMDAsNTQsMCwxMzIsMSwwLDkwLDM1LDAsMTAwLAotICAgIDU1LDAsMTAwLDU2LDAsMTMyLDAsMCw5MCwzNiwwLDEwMCw1NywwLDEwMCw1OCwKLSAgICAwLDEzMiwwLDAsOTAsMzcsMCwxMDAsNTksMCwxMDAsNjAsMCwxMDAsNjEsMCwKLSAgICAxMDAsNjIsMCwxMzIsMCwxLDkwLDM4LDAsMTAwLDYzLDAsMTAwLDY0LDAsMTMyLAotICAgIDAsMCw5MCwzOSwwLDEwMCw2NSwwLDEwMCw2NiwwLDEzMiwwLDAsOTAsNDAsCi0gICAgMCwxMDAsNjcsMCwxMDAsNjgsMCwxMzIsMCwwLDkwLDQxLDAsMTAwLDY5LDAsCi0gICAgMTAwLDcwLDAsMTMyLDAsMCw5MCw0MiwwLDEwMCw3MSwwLDEwMCw3MiwwLDEzMiwKLSAgICAwLDAsOTAsNDMsMCwxMDAsNzMsMCwxMDAsNzQsMCwxMzIsMCwwLDkwLDQ0LAotICAgIDAsMTAwLDc1LDAsMTAwLDc2LDAsMTMyLDAsMCw5MCw0NSwwLDcxLDEwMCw3NywKLSAgICAwLDEwMCw3OCwwLDEzMiwwLDAsMTAwLDc4LDAsMTMxLDIsMCw5MCw0NiwwLAotICAgIDcxLDEwMCw3OSwwLDEwMCw4MCwwLDEzMiwwLDAsMTAwLDgwLDAsMTMxLDIsMCwKLSAgICA5MCw0NywwLDcxLDEwMCw4MSwwLDEwMCw4MiwwLDEzMiwwLDAsMTAwLDgyLDAsCi0gICAgMTMxLDIsMCw5MCw0OCwwLDcxLDEwMCw4MywwLDEwMCw4NCwwLDEzMiwwLDAsCi0gICAgMTAwLDg0LDAsMTMxLDIsMCw5MCw0OSwwLDcxLDEwMCw4NSwwLDEwMCw4NiwwLAotICAgIDEzMiwwLDAsMTAwLDg2LDAsMTAxLDQ5LDAsMTMxLDMsMCw5MCw1MCwwLDcxLAotICAgIDEwMCw4NywwLDEwMCw4OCwwLDEzMiwwLDAsMTAwLDg4LDAsMTMxLDIsMCw5MCwKLSAgICA1MSwwLDcxLDEwMCw4OSwwLDEwMCw5MCwwLDEzMiwwLDAsMTAwLDkwLDAsMTAxLAotICAgIDUxLDAsMTAxLDUwLDAsMTMxLDQsMCw5MCw1MiwwLDcxLDEwMCw5MSwwLDEwMCwKLSAgICA5MiwwLDEzMiwwLDAsMTAwLDkyLDAsMTAxLDUxLDAsMTAxLDQ5LDAsMTMxLDQsCi0gICAgMCw5MCw1MywwLDEwMywwLDAsOTAsNTQsMCw3MSwxMDAsOTMsMCwxMDAsOTQsCi0gICAgMCwxMzIsMCwwLDEwMCw5NCwwLDEzMSwyLDAsOTAsNTUsMCw3MSwxMDAsOTUsCi0gICAgMCwxMDAsOTYsMCwxMzIsMCwwLDEwMCw5NiwwLDEzMSwyLDAsOTAsNTYsMCwKLSAgICA3MSwxMDAsOTcsMCwxMDAsOTgsMCwxMzIsMCwwLDEwMCw5OCwwLDEzMSwyLDAsCi0gICAgOTAsNTcsMCw3MSwxMDAsOTksMCwxMDAsMTAwLDAsMTMyLDAsMCwxMDAsMTAwLDAsCi0gICAgMTMxLDIsMCw5MCw1OCwwLDcxLDEwMCwxMDEsMCwxMDAsMTAyLDAsMTMyLDAsMCwKLSAgICAxMDAsMTAyLDAsMTMxLDIsMCw5MCw1OSwwLDcxLDEwMCwxMDMsMCwxMDAsMTA0LDAsCi0gICAgMTMyLDAsMCwxMDAsMTA0LDAsMTMxLDIsMCw5MCw2MCwwLDEwMCwxMDUsMCwxMDAsCi0gICAgMTA2LDAsMTMyLDAsMCw5MCw2MSwwLDEwMCwxMDcsMCwxMDAsMTA4LDAsMTMyLDAsCi0gICAgMCw5MCw2MiwwLDEwMCwxMDksMCwxMDAsMTEwLDAsMTMyLDAsMCw5MCw2MywwLAotICAgIDEwMCwxMTEsMCw5MCw2NCwwLDEwMCwxMTIsMCwxMDAsMTEzLDAsMTMyLDAsMCw5MCwKLSAgICA2NSwwLDEwMCwxMTQsMCwxMDAsMTE1LDAsMTMyLDAsMCw5MCw2NiwwLDEwMCwxMzAsCi0gICAgMCwxMDAsNDYsMCwxMDAsMTE2LDAsMTAwLDExNywwLDEzMiwyLDAsOTAsNjcsMCwKLSAgICAxMDAsMTE4LDAsMTAwLDExOSwwLDEzMiwwLDAsOTAsNjgsMCwxMDAsMTIwLDAsMTAwLAotICAgIDEyMSwwLDEzMiwwLDAsOTAsNjksMCwxMDAsMTIyLDAsMTAwLDEyMywwLDEzMiwwLAotICAgIDAsOTAsNzAsMCwxMDAsMTMwLDAsMTAwLDEzMCwwLDEwMiwwLDAsMTAwLDQ2LDAsCi0gICAgMTAwLDEyNCwwLDEwMCwxMjUsMCwxMzIsNCwwLDkwLDcxLDAsMTAwLDEyNiwwLDEwMCwKLSAgICAxMjcsMCwxMzIsMCwwLDkwLDcyLDAsMTAwLDEyOCwwLDEwMCwxMjksMCwxMzIsMCwKLSAgICAwLDkwLDczLDAsMTAwLDEzMCwwLDgzLDQwLDEzMiwwLDAsMCwxMTcsODMsMSwKLSAgICAwLDAsNjcsMTExLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsCi0gICAgMTAsMTAsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiw3OCw3OSw4NCwzMiwxMDksMTAxLDk3LDExMCwxMTYsMzIsMTE2LDExMSwzMiw5OCwxMDEsCi0gICAgMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMDgsMTIxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMDAsMzMsMzIsNzMsMTE2LDMyLDEwNCw5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsMzIsCi0gICAgMTAwLDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTUsMTE3LDk5LDEwNCwxMCwxMTYsMTA0LAotICAgIDk3LDExNiwzMiwxMDUsMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwxMDEsMzIsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDExMiwxMDEsMTAwLDMyLDEwNSwxMTAsMTE2LDExMSwzMiw4MCwKLSAgICAxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwKLSAgICAxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw0NiwzMiw2NSwxMTUsMTAsMTE1LDExNyw5OSwxMDQsMzIsMTA1LAotICAgIDExNiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwKLSAgICAxMTAsMTA2LDEwMSw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTUsMTEyLDEwMSw5OSwKLSAgICAxMDUsMTAyLDEwNSw5OSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwKLSAgICAzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTExLAotICAgIDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDEwLDExOSwxMTEsMTE0LDEwNyw0NiwzMiw3OSwxMTAsCi0gICAgMTAxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDExNywxMTUsMTAxLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTcsCi0gICAgOTgsMTA4LDEwNSw5OSw0NSwxMDIsOTcsOTksMTA1LDExMCwxMDMsMzIsMTE4LDEwMSwxMTQsMTE1LAotICAgIDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDQ2LDEwLDEwLDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNyw2LDAsCi0gICAgMCwwLDk5LDEyMSwxMDMsMTE5LDEwNSwxMTAsMTE3LDYsMCwwLDAsMTAwLDk3LDExNCwKLSAgICAxMTksMTA1LDExMCw5OSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKLSAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSw0OSwwLDAsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTA2LDIsMCwxMTYsMywwLDEzMSwxLDAsMTE0LDMzLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzMiwwLDAsMTI1LDAsMCwxMTAsMTIsMCwxMDAsMywKLSAgICAwLDEwMCwyLDAsMTMyLDAsMCwxMjUsMCwwLDEyNCwwLDAsODMsNDAsNCwKLSAgICAwLDAsMCw3OCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0gICAgMCwyLDAsMCwwLDgzLDAsMCwwLDExNSwxMywwLDAsMCwxMDAsMSwKLSAgICAwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDgzLDQwLDIsMCwwLDAsCi0gICAgMTE3LDUzLDAsMCwwLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTAyLDEwNSwxMDgsCi0gICAgMTAxLDExMCw5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk5LAotICAgIDEwNCwxMDEsOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsMTEwLDExNSwxMDEsCi0gICAgMTEwLDExNSwxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsMTE1LDEyLDAsMCwwLDgwLAotICAgIDg5LDg0LDcyLDc5LDc4LDY3LDY1LDgzLDY5LDc5LDc1LDQwLDIsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNywwLDAsMCwxMDEsMTEwLDExOCwKLSAgICAxMDUsMTE0LDExMSwxMTAsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsCi0gICAgOTUsOTksOTcsMTE1LDEwMSwzNCwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsCi0gICAgMTE3LDM3LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCwKLSAgICA5NSw5OSw5NywxMTUsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwKLSAgICAxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDgzLDAsMCwwLDExNSwKLSAgICA0LDAsMCwwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNTMsMCwKLSAgICAwLDAsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsOTksMTA0LDEwMSw5OSwKLSAgICAxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLDQ1LDEwNSwxMTAsMTE1LDEwMSwxMTAsMTE1LDEwNSwKLSAgICAxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0Niw3MCw0MCwxLDAsMCwwLDExNyw1LDAsCi0gICAgMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCisgICAgMTMyLDAsMCw5MCw5LDAsMTAwLDIwLDAsMTAwLDIxLDAsMTMyLDAsMCw5MCwKKyAgICAxMCwwLDEwMCwyMiwwLDEwMCwyMywwLDEwMCwyNCwwLDEzMiwxLDAsOTAsMTEsCisgICAgMCwxMDAsMjUsMCwxMDAsMjYsMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDI3LDAsCisgICAgMTAwLDI4LDAsMTMyLDAsMCw5MCwxMywwLDEwMSwxNCwwLDEwMSwxMiwwLDEwNiwKKyAgICAxNSwwLDEzMSwxLDAsOTAsMTYsMCw3MSwxMDAsMjksMCwxMDAsMzAsMCwxMzIsCisgICAgMCwwLDEwMCwzMCwwLDEzMSwyLDAsOTAsMTcsMCwxMDUsMCwwLDkwLDE4LAorICAgIDAsMTA1LDAsMCw5MCwxOSwwLDcxLDEwMCwzMSwwLDEwMCwzMiwwLDEzMiwwLAorICAgIDAsMTAwLDMyLDAsMTAxLDIwLDAsMTMxLDMsMCw5MCwyMSwwLDcxLDEwMCwzMywKKyAgICAwLDEwMCwzNCwwLDEzMiwwLDAsMTAwLDM0LDAsMTMxLDIsMCw5MCwyMiwwLAorICAgIDcxLDEwMCwzNSwwLDEwMCwzNiwwLDEzMiwwLDAsMTAwLDM2LDAsMTMxLDIsMCwKKyAgICA5MCwyMywwLDcxLDEwMCwzNywwLDEwMCwzOCwwLDEzMiwwLDAsMTAwLDM4LDAsCisgICAgMTMxLDIsMCw5MCwyNCwwLDEwMCwzOSwwLDEwMCw0MCwwLDEzMiwwLDAsOTAsCisgICAgMjUsMCwxMDAsNDEsMCwxMDAsNDIsMCwxMzIsMCwwLDkwLDI2LDAsMTAwLDQzLAorICAgIDAsMTAwLDQ0LDAsMTMyLDAsMCw5MCwyNywwLDEwMCw0NSwwLDEwNiwyOCwwLAorICAgIDEwMCw0NiwwLDEwMCw0NywwLDEzMSwyLDAsMTAwLDQ4LDAsMjMsOTAsMjksMCwKKyAgICAxMDEsMzAsMCwxMDYsMzEsMCwxMDEsMjksMCwxMDAsNDcsMCwxMzEsMiwwLDkwLAorICAgIDMyLDAsMTAwLDQ5LDAsOTAsMzMsMCwxMDAsNTAsMCwxMDMsMSwwLDkwLDM0LAorICAgIDAsMTAwLDUxLDAsMTAzLDEsMCw5MCwzNSwwLDEwMCw1MiwwLDEwMywxLDAsCisgICAgOTAsMzYsMCwxMDAsNTMsMCwxMDAsNTQsMCwxMDAsNTUsMCwxMzIsMSwwLDkwLAorICAgIDM3LDAsMTAwLDU2LDAsMTAwLDU3LDAsMTMyLDAsMCw5MCwzOCwwLDEwMCw1OCwKKyAgICAwLDEwMCw1OSwwLDEzMiwwLDAsOTAsMzksMCwxMDAsNjAsMCwxMDAsNjEsMCwKKyAgICAxMzIsMCwwLDkwLDQwLDAsMTAwLDYyLDAsMTAwLDYzLDAsMTAwLDY0LDAsMTAwLAorICAgIDY1LDAsMTMyLDAsMSw5MCw0MSwwLDEwMCw2NiwwLDEwMCw2NywwLDEzMiwwLAorICAgIDAsOTAsNDIsMCwxMDAsNjgsMCwxMDAsNjksMCwxMzIsMCwwLDkwLDQzLDAsCisgICAgMTAwLDcwLDAsMTAwLDcxLDAsMTMyLDAsMCw5MCw0NCwwLDEwMCw3MiwwLDEwMCwKKyAgICA3MywwLDEzMiwwLDAsOTAsNDUsMCwxMDAsNzQsMCwxMDAsNzUsMCwxMzIsMCwKKyAgICAwLDkwLDQ2LDAsMTAwLDUzLDAsMTAwLDUzLDAsMTAwLDUzLDAsMTAwLDc2LDAsCisgICAgMTAwLDc3LDAsMTMyLDMsMCw5MCw0NywwLDEwMCw1MywwLDEwMCw1MywwLDEwMCwKKyAgICA1MywwLDEwMCw3OCwwLDEwMCw3OSwwLDEzMiwzLDAsOTAsNDgsMCwxMDAsODAsCisgICAgMCwxMDAsODAsMCwxMDAsODEsMCwxMDAsODIsMCwxMzIsMiwwLDkwLDQ5LDAsCisgICAgMTAwLDgzLDAsMTAwLDg0LDAsMTMyLDAsMCw5MCw1MCwwLDEwMCw4NSwwLDEwMCwKKyAgICA4NiwwLDEzMiwwLDAsOTAsNTEsMCw3MSwxMDAsODcsMCwxMDAsODgsMCwxMzIsCisgICAgMCwwLDEwMCw4OCwwLDEzMSwyLDAsOTAsNTIsMCw3MSwxMDAsODksMCwxMDAsCisgICAgOTAsMCwxMzIsMCwwLDEwMCw5MCwwLDEzMSwyLDAsOTAsNTMsMCwxMDAsOTEsCisgICAgMCwxMDAsNTMsMCwxMDAsOTIsMCwxMDAsNTMsMCwxMDAsOTMsMCwxMDAsOTQsMCwKKyAgICAxMzIsMCwyLDkwLDU0LDAsMTAxLDU1LDAsMTMxLDAsMCw5MCw1NiwwLDEwMCwKKyAgICA1MywwLDEwMCw5NSwwLDEwMCw1MywwLDEwMCw5NiwwLDEwMSw1NiwwLDEwMCw5NywKKyAgICAwLDEwMCw5OCwwLDEzMiwxLDIsOTAsNTcsMCwxMDAsNTMsMCwxMDAsNTMsMCwKKyAgICAxMDAsOTksMCwxMDAsMTAwLDAsMTMyLDIsMCw5MCw1OCwwLDcxLDEwMCwxMDEsMCwKKyAgICAxMDAsMTAyLDAsMTMyLDAsMCwxMDAsMTAyLDAsMTMxLDIsMCw5MCw1OSwwLDcxLAorICAgIDEwMCwxMDMsMCwxMDAsMTA0LDAsMTMyLDAsMCwxMDAsMTA0LDAsMTMxLDIsMCw5MCwKKyAgICA2MCwwLDcxLDEwMCwxMDUsMCwxMDAsMTA2LDAsMTMyLDAsMCwxMDAsMTA2LDAsMTMxLAorICAgIDIsMCw5MCw2MSwwLDcxLDEwMCwxMDcsMCwxMDAsMTA4LDAsMTMyLDAsMCwxMDAsCisgICAgMTA4LDAsMTMxLDIsMCw5MCw2MiwwLDcxLDEwMCwxMDksMCwxMDAsMTEwLDAsMTMyLAorICAgIDAsMCwxMDAsMTEwLDAsMTMxLDIsMCw5MCw2MywwLDcxLDEwMCwxMTEsMCwxMDAsCisgICAgMTEyLDAsMTMyLDAsMCwxMDAsMTEyLDAsMTAxLDYzLDAsMTMxLDMsMCw5MCw2NCwKKyAgICAwLDcxLDEwMCwxMTMsMCwxMDAsMTE0LDAsMTMyLDAsMCwxMDAsMTE0LDAsMTMxLDIsCisgICAgMCw5MCw2NSwwLDcxLDEwMCwxMTUsMCwxMDAsMTE2LDAsMTMyLDAsMCwxMDAsMTE2LAorICAgIDAsMTAxLDY1LDAsMTAxLDY0LDAsMTMxLDQsMCw5MCw2NiwwLDcxLDEwMCwxMTcsCisgICAgMCwxMDAsMTE4LDAsMTMyLDAsMCwxMDAsMTE4LDAsMTAxLDY1LDAsMTAxLDYzLDAsCisgICAgMTMxLDQsMCw5MCw2NywwLDEwMywwLDAsOTAsNjgsMCw3MSwxMDAsMTE5LDAsCisgICAgMTAwLDEyMCwwLDEzMiwwLDAsMTAwLDEyMCwwLDEzMSwyLDAsOTAsNjksMCw3MSwKKyAgICAxMDAsMTIxLDAsMTAwLDEyMiwwLDEzMiwwLDAsMTAwLDEyMiwwLDEzMSwyLDAsOTAsCisgICAgNzAsMCw3MSwxMDAsMTIzLDAsMTAwLDEyNCwwLDEzMiwwLDAsMTAwLDEyNCwwLDEzMSwKKyAgICAyLDAsOTAsNzEsMCw3MSwxMDAsMTI1LDAsMTAwLDEyNiwwLDEzMiwwLDAsMTAwLAorICAgIDEyNiwwLDEzMSwyLDAsOTAsNzIsMCw3MSwxMDAsMTI3LDAsMTAwLDEyOCwwLDEzMiwKKyAgICAwLDAsMTAwLDEyOCwwLDEzMSwyLDAsOTAsNzMsMCw3MSwxMDAsMTI5LDAsMTAwLAorICAgIDEzMCwwLDEzMiwwLDAsMTAwLDEzMCwwLDEzMSwyLDAsOTAsNzQsMCwxMDAsMTMxLAorICAgIDAsMTAwLDEzMiwwLDEzMiwwLDAsOTAsNzUsMCwxMDAsMTMzLDAsMTAwLDEzNCwwLAorICAgIDEzMiwwLDAsOTAsNzYsMCwxMDAsNTMsMCwxMDAsMTM1LDAsMTAwLDEzNiwwLDEzMiwKKyAgICAxLDAsOTAsNzcsMCwxMDAsMTM3LDAsMTAwLDEzOCwwLDEzMiwwLDAsOTAsNzgsCisgICAgMCwxMDAsMTM5LDAsOTAsNzksMCwxMDEsNzksMCwxMDAsMTQwLDAsMjMsOTAsODAsCisgICAgMCwxMDAsMTQxLDAsMTAwLDE0MiwwLDEzMiwwLDAsOTAsODEsMCwxMDAsMTQzLDAsCisgICAgMTAwLDE0NCwwLDEzMiwwLDAsOTAsODIsMCwxMDAsNTMsMCwxMDAsODAsMCwxMDAsCisgICAgMTQ1LDAsMTAwLDE0NiwwLDEzMiwyLDAsOTAsODMsMCwxMDAsMTQ3LDAsMTAwLDE0OCwKKyAgICAwLDEzMiwwLDAsOTAsODQsMCwxMDAsMTQ5LDAsMTAwLDE1MCwwLDEzMiwwLDAsCisgICAgOTAsODUsMCwxMDAsMTUxLDAsMTAwLDE1MiwwLDEzMiwwLDAsOTAsODYsMCwxMDAsCisgICAgNTMsMCwxMDAsNTMsMCwxMDIsMCwwLDEwMCw4MCwwLDEwMCwxNTMsMCwxMDAsMTU0LAorICAgIDAsMTMyLDQsMCw5MCw4NywwLDEwMCwxNTUsMCwxMDAsMTU2LDAsMTMyLDAsMCwKKyAgICA5MCw4OCwwLDEwMCwxNTcsMCwxMDAsMTU4LDAsMTMyLDAsMCw5MCw4OSwwLDEwMCwKKyAgICAxNTksMCwxMDAsMTYwLDAsMTMyLDAsMCw5MCw5MCwwLDEwMCw1MywwLDgzLDQxLAorICAgIDE2Miw5Nyw4MywxLDAsMCw2NywxMTEsMTE0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLAorICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiw0NiwxMCwxMCw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMDUsMTE1LDMyLDc4LDc5LDg0LDMyLDEwOSwxMDEsOTcsMTEwLDExNiwzMiwxMTYsCisgICAgMTExLDMyLDk4LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDEwOCwxMjEsMzIsMTA1LDEwOSwKKyAgICAxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMywzMiw3MywxMTYsMzIsMTA0LDk3LDExNSwzMiw5OCwKKyAgICAxMDEsMTAxLDExMCwzMiwxMDAsMTAxLDExNSwxMDUsMTAzLDExMCwxMDEsMTAwLDMyLDExNSwxMTcsOTksCisgICAgMTA0LDEwLDExNiwxMDQsOTcsMTE2LDMyLDEwNSwxMTYsMzIsOTksOTcsMTEwLDMyLDk4LDEwMSwKKyAgICAzMiw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsMTEyLDEwMSwxMDAsMzIsMTA1LDExMCwKKyAgICAxMTYsMTExLDMyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwKKyAgICAxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LDMyLDY1LDExNSwxMCwxMTUsMTE3LAorICAgIDk5LDEwNCwzMiwxMDUsMTE2LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA1LDExMCwxMDYsMTAxLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLAorICAgIDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDk5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwKKyAgICAzMiw5NywxMTAsMTAwLDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsMzIsCisgICAgMTA1LDExMCwzMiwxMTEsMTE0LDEwMCwxMDEsMTE0LDMyLDExNiwxMTEsMTAsMTE5LDExMSwxMTQsMTA3LAorICAgIDQ2LDMyLDc5LDExMCwxMDEsMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTE3LDExNSwxMDEsCisgICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiw5NywxMTUsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTEyLDExNyw5OCwxMDgsMTA1LDk5LDQ1LDEwMiw5Nyw5OSwxMDUsMTEwLDEwMywzMiwKKyAgICAxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMjE4LDMsMTE5LDEwNSwxMTAsMjE4LDYsCisgICAgOTksMTIxLDEwMywxMTksMTA1LDExMCwyMTgsNiwxMDAsOTcsMTE0LDExOSwxMDUsMTEwLDk5LDAsCisgICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDQ5LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMDYsMiwKKyAgICAwLDExNiwzLDAsMTMxLDEsMCwxMTQsMzMsMCwxMDAsMSwwLDEwMCwyLDAsCisgICAgMTMyLDAsMCwxMjUsMCwwLDExMCwxMiwwLDEwMCwzLDAsMTAwLDIsMCwxMzIsCisgICAgMCwwLDEyNSwwLDAsMTI0LDAsMCw4Myw0MSw0LDc4LDk5LDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsODMsMCwwLAorICAgIDAsMTE1LDEzLDAsMCwwLDEwMCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNywKKyAgICA2LDAsODMsNDEsMiwxMjIsNTMsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMDIsCisgICAgMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsCisgICAgMzIsOTksMTA0LDEwMSw5OSwxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLDQ1LDEwNSwxMTAsCisgICAgMTE1LDEwMSwxMTAsMTE1LDEwNSwxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0NiwxMTUsMTIsMCwwLAorICAgIDAsODAsODksODQsNzIsNzksNzgsNjcsNjUsODMsNjksNzksNzUsNDEsMiwyMTgsCisgICAgMyw5NSwxMTEsMTE1LDkwLDcsMTAxLDExMCwxMTgsMTA1LDExNCwxMTEsMTEwLDE2OSwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDI1MCwyOSw2MCwxMDIsMTE0LDExMSwxMjIsCiAgICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwKLSAgICAxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMzgsMCwwLDAsMTE1LDIsMCwwLAotICAgIDAsMCwyLDQwLDQsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsCi0gICAgMTE3LDgsMCwwLDAsMTEyLDEwOCw5NywxMTYsMTAyLDExMSwxMTQsMTA5LDExNywxMCwwLAotICAgIDAsMCwxMTUsMTE2LDk3LDExNCwxMTYsMTE1LDExOSwxMDUsMTE2LDEwNCwxMTcsMjcsMCwwLAotICAgIDAsOTUsNjcsNjUsODMsNjksOTUsNzMsNzgsODMsNjksNzgsODMsNzMsODQsNzMsCi0gICAgODYsNjksOTUsODAsNzYsNjUsODQsNzAsNzksODIsNzcsODMsNDAsMSwwLDAsCi0gICAgMCwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwKLSAgICAxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwKLSAgICAwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LAotICAgIDExNSwxMDEsMzIsMCwwLDAsMTE1LDgsMCwwLDAsMCwxLDE4LDEsMTUsCi0gICAgNCwxMiwzLDExNywxNiwwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsMTAxLAotICAgIDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMDgsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDAsMCwxMDMsMCwKLSAgICAwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDEsMCwKLSAgICA2NCwxMzEsMSwwLDEsMTI0LDEsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDIsCi0gICAgMCw2MywxMDAsMSwwLDY0LDEzMSwxLDAsMSwxMjQsMSwwLDEwNiwxLDAsCi0gICAgMTI0LDAsMCwxMDAsMywwLDYzLDEwMCwxLDAsNjQsMTMxLDEsMCwxLDEyNCwKLSAgICAxLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCw0LDAsNjMsMTAwLDEsMCw2NCwKLSAgICAxMzEsMSwwLDEsMTE2LDIsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDAsNSwKLSAgICAwLDAsMCwxMTcsMTExLDAsMCwwLDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LDMyLAorICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDIxOCwxMSw5NSwxMTQsMTAxLDEwOCw5NywxMjAsCisgICAgOTUsOTksOTcsMTE1LDEwMSwzMCwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsCisgICAgMTIyLDM3LDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywKKyAgICAxMTUsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwxMTQsMTAxLDEwOCwKKyAgICA5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwxLDAsMCwwLDgzLDAsMCwwLDExNSw0LDAsMCwKKyAgICAwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTMsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwKKyAgICAzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwzMiwKKyAgICA5OCwxMDEsMzIsOTksMTA0LDEwMSw5OSwxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLDQ1LAorICAgIDEwNSwxMTAsMTE1LDEwMSwxMTAsMTE1LDEwNSwxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0Niw3MCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNiwwLDAsMCwzNCwwLDAsCisgICAgMCwxMTUsMiwwLDAsMCwwLDIsNDEsNCwyMTgsMywxMTUsMTIxLDExNSwyMTgsCisgICAgOCwxMTIsMTA4LDk3LDExNiwxMDIsMTExLDExNCwxMDksMjE4LDEwLDExNSwxMTYsOTcsMTE0LDExNiwKKyAgICAxMTUsMTE5LDEwNSwxMTYsMTA0LDIxOCwyNyw5NSw2Nyw2NSw4Myw2OSw5NSw3Myw3OCw4MywKKyAgICA2OSw3OCw4Myw3Myw4NCw3Myw4Niw2OSw5NSw4MCw3Niw2NSw4NCw3MCw3OSw4MiwKKyAgICA3Nyw4Myw0MSwxLDExNCw2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMDksOTcsMTA3LDEwMSw5NSwKKyAgICAxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwyOCwwLDAsMCwxMTUsOCwKKyAgICAwLDAsMCwwLDEsMTgsMSwxNSw0LDEyLDMsMTE0LDExLDAsMCwwLAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDI2LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwKKyAgICAxMzEsMSwwLDEwMCwxLDAsNjQsMTA2LDEsMCwxMDAsMiwwLDEwMCwzLDAsCisgICAgMTMxLDIsMCw4Myw0MSw0LDEyMiw0Miw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiwKICAgICA5NywzMiw1MSw1MCw0NSw5OCwxMDUsMTE2LDMyLDEwNSwxMTAsMTE2LDEwMSwxMDMsMTAxLDExNCwKICAgICAzMiwxMTYsMTExLDMyLDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywKLSAgICAxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODgsODgsODgsMzIsODQsMTAxLDEwOSwxMTIsCi0gICAgMTExLDExNCw5NywxMTQsMTIxLDMyLDExNywxMTAsMTE2LDEwNSwxMDgsMzIsMTA5LDk3LDExNCwxMTUsCi0gICAgMTA0LDk3LDEwOCwzOSwxMTUsMzIsMTA4LDExMSwxMTAsMTAzLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwKLSAgICAxMDUsMTExLDExMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsMTIwLDExMiwxMTEsMTE1LDEwMSwxMDAsCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTA1LDI1NSwwLDAsMCwxMDUsOCwwLDAsCi0gICAgMCwxMDUsMTYsMCwwLDAsMTA1LDI0LDAsMCwwLDQwLDMsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsMTA1LDExMCwxMTYsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwKLSAgICAxMDEsMTEwLDEwMCwxMTcsOSwwLDAsMCw5OCwxMjEsMTE2LDEwMSw5NywxMTQsMTE0LDk3LAotICAgIDEyMSw0MCwyLDAsMCwwLDExNywxLDAsMCwwLDEyMCwxMTcsOSwwLDAsCi0gICAgMCwxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywwLDAsMCw5NSwxMTksOTUsMTA4LDExMSwKLSAgICAxMTAsMTAzLDQ1LDAsMCwwLDExNSwxNCwwLDAsMCwwLDYsMTIsMSw2LAotICAgIDEsMTcsMSwyMSwxLDIxLDEsMjEsMSwxMTcsNywwLDAsMCw5NSwxMTksCi0gICAgOTUsMTA4LDExMSwxMTAsMTAzLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDY4LDAsMCwwLDEyNCwKLSAgICAwLDAsMTAwLDEsMCwyNSwxMjUsMSwwLDEyNCwxLDAsMTI0LDAsMCwxMDAsCi0gICAgMiwwLDI1LDEwMCwzLDAsNjIsNzksMTI1LDEsMCwxMjQsMSwwLDEyNCwwLAotICAgIDAsMTAwLDQsMCwyNSwxMDAsNSwwLDYyLDc5LDEyNSwxLDAsMTI0LDEsMCwKLSAgICAxMjQsMCwwLDEwMCw2LDAsMjUsMTAwLDcsMCw2Miw3OSwxMjUsMSwwLDEyNCwKLSAgICAxLDAsODMsNDAsOCwwLDAsMCwxMTcsMTE1LDAsMCwwLDY3LDExMSwxMTAsCi0gICAgMTE4LDEwMSwxMTQsMTE2LDMyLDUyLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMDUsMTEwLDMyLAotICAgIDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywxMTAsMzIsMTE2LDExMSwKLSAgICAzMiw5NywxMTAsMzIsMTA1LDExMCwxMTYsMTAxLDEwMywxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDg4LDg4LDg4LDMyLDg0LDEwMSwxMDksMTEyLDExMSwxMTQsOTcsMTE0LDEyMSwzMiwKLSAgICAxMTcsMTEwLDExNiwxMDUsMTA4LDMyLDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsMzksMTE1LDMyLAotICAgIDEwOCwxMTEsMTEwLDEwMywzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsOTcsMTE0LAotICAgIDEwMSwzMiwxMDEsMTIwLDExMiwxMTEsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTA1LDAsMCwwLDAsMTA1LDEsMCwwLDAsMTA1LDgsMCwwLDAsMTA1LAotICAgIDIsMCwwLDAsMTA1LDE2LDAsMCwwLDEwNSwzLDAsMCwwLDEwNSwyNCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDksMCwKLSAgICAwLDAsMTA1LDExMCwxMTYsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDExNywxLDAsMCwwLAotICAgIDEyMCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LDAsCi0gICAgMCwwLDk1LDExNCw5NSwxMDgsMTExLDExMCwxMDMsNjEsMCwwLDAsMTE1LDEwLDAsCi0gICAgMCwwLDAsNiwxMCwxLDE4LDEsMTgsMSwxOCwxLDExNyw3LDAsMCwKLSAgICAwLDk1LDExNCw5NSwxMDgsMTExLDExMCwxMDMsOTksMCwwLDAsMCwwLDAsMCwKLSAgICAwLDMsMCwwLDAsNCwwLDAsMCw3MSwwLDAsMCwxMTUsMTAzLDAsCi0gICAgMCwwLDEwMywwLDAsMTI1LDEsMCwxMjAsNzEsMCwxMjQsMCwwLDY4LDkzLAotICAgIDYzLDAsMTI1LDIsMCwxMjQsMiwwLDExNSwzMSwwLDExMywxMywwLDExMCwwLAotICAgIDAsMTI0LDEsMCwxMDYsMCwwLDEyNCwyLDAsMTMxLDEsMCwxLDEyNCwyLAotICAgIDAsMTAwLDQsMCwyNSwxMTYsMSwwLDEwNyw3LDAsMTE0LDEzLDAsMTI0LDEsCi0gICAgMCwxMDYsMCwwLDExNiwyLDAsMTMxLDEsMCwxLDExMywxMywwLDExMywxMywKLSAgICAwLDg3LDEwMCwyLDAsMTA2LDMsMCwxMjQsMSwwLDEwMCwzLDAsMTAwLDUsCi0gICAgMCwxMzMsMiwwLDI1LDEzMSwxLDAsODMsNDAsNiwwLDAsMCwxMTcsMzEsCi0gICAgMCwwLDAsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNiwxMTEsMTA1LDExMCw0MCwKLSAgICA0MSw0NiwxMDUsMSwwLDAsMCwxMTcsMCwwLDAsMCw3OCwxMDUsMjU1LDI1NSwKLSAgICAyNTUsMjU1LDEwNSwyNTUsMjU1LDI1NSwyNTUsNDAsNCwwLDAsMCwxMTcsNiwwLDAsCi0gICAgMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDExNywxNSwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDExNyw4LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDExNyw0LDAsMCwwLDEwNiwxMTEsMTA1LAotICAgIDExMCw0MCwzLDAsMCwwLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwKLSAgICAxMTIsOTcsMTE0LDExNiwxMTUsMTE3LDksMCwwLDAsMTEwLDEwMSwxMTksOTUsMTEyLDk3LAotICAgIDExNCwxMTYsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTQsMTE2LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCw3NCwwLDAsMCwxMTUsMTYsMCwwLDAsCi0gICAgMCwyLDYsMSwxMywxLDYsMSw2LDEsMTMsMSwxNiwxLDIwLDEsCi0gICAgMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSw4NSwwLDAsMCwxMjAsNDgsMCwxMTYsMCwwLDEyNCwKLSAgICAwLDAsMTMxLDEsMCw2OCw5MywyOCwwLDEyNSwxLDAsMTI0LDEsMCwxMTYsCi0gICAgMSwwLDEwNyw2LDAsMTE0LDEzLDAsMTI0LDEsMCwxMjUsMiwwLDgwLDExMywKLSAgICAxMywwLDExMywxMywwLDg3LDExNiwyLDAsMTI1LDIsMCwxMjQsMCwwLDEwNiwKLSAgICAzLDAsMTI0LDIsMCwxMzEsMSwwLDkyLDMsMCwxMjUsMywwLDEyNSw0LAotICAgIDAsMTI1LDUsMCwxMjQsMywwLDEyNCw1LDAsMTAyLDIsMCw4Myw0MCwxLAotICAgIDAsMCwwLDExNywzMiwwLDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsCi0gICAgMTE1LDExMiwxMDgsMTA1LDExNiw0MCw0MSw0Niw0MCw0LDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDExNCwxMDEsMTE4LDEwMSwxMTQsMTE1LDEwMSwxMDAsMTE3LDE1LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsCi0gICAgMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDEwLDAsMCwwLAotICAgIDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDQwLDYsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDEsMCwwLDAsMTIwLDExNywzLAotICAgIDAsMCwwLDExNSwxMDEsMTEyLDExNyw1LDAsMCwwLDEwMiwxMTQsMTExLDExMCwxMTYsCi0gICAgMTE3LDEsMCwwLDAsOTUsMTE3LDQsMCwwLDAsMTE2LDk3LDEwNSwxMDgsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiw4NiwwLDAsMCwxMTUsCi0gICAgMTQsMCwwLDAsMCwyLDE5LDEsMTIsMSw2LDEsOCwyLDYsMSwKLSAgICAyNCwxLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwKLSAgICAxMDUsMTE2LDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDExLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSw2MSwwLDAsMCwxMjEsMTksMCwxMTYsCi0gICAgMCwwLDEwNiwxLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLAotICAgIDIyLDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw0MywwLDEsMSwxLDEwMCwKLSAgICAyLDAsODMsODksMTEwLDEsMCw4OCwxMjQsMiwwLDEwNiw0LDAsMTAwLDEsCi0gICAgMCw2NCwxMjQsMSwwLDEwNywyLDAsODMsNDAsMywwLDAsMCwxMTcsNDksCi0gICAgMCwwLDAsODQsMTAxLDExNSwxMTYsMzIsMTE5LDEwNCwxMDEsMTE2LDEwNCwxMDEsMTE0LDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMDEsMzIsMTE2LAotICAgIDEyMSwxMTIsMTAxLDQ2LDEwNSwwLDI0MCwwLDAsNzAsNDAsNSwwLDAsMCwxMTcsCi0gICAgMywwLDAsMCw5NSwxMTEsMTE1LDExNyw0LDAsMCwwLDExNSwxMTYsOTcsMTE2LAotICAgIDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNSwwLDAsCi0gICAgMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsNywwLDAsMCwxMTUsMTE2LDk1LDEwOSwxMTEsCi0gICAgMTAwLDEwMSw0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDExNyw0LDAsMCwwLDEwOSwxMTEsMTAwLDEwMSwxMTcsOSwwLDAsMCwxMTUsMTE2LAotICAgIDk3LDExNiw5NSwxMDUsMTEwLDEwMiwxMTEsNDAsMCwwLDAsMCw0MCwwLDAsMCwKLSAgICAwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LAotICAgIDk3LDExMiw2MiwxMTcsMTgsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwKLSAgICA5NSwxMDksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDk4LDAsMCwwLDExNSwxMCwKLSAgICAwLDAsMCwwLDIsMywxLDE5LDEsMTMsMSw5LDEsMTE3LDE4LDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsOTUsMTA5LDExMSwxMDAsMTAxLDk1LAotICAgIDExNiwxMjEsMTEyLDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCi0gICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMTYsMCwKLSAgICAwLDEyNCwwLDAsMTAwLDEsMCwxMzEsMiwwLDgzLDQwLDIsMCwwLDAsCi0gICAgMTE3LDMxLDAsMCwwLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMDUsMTE1LDEwMiwKLSAgICAxMDUsMTA4LDEwMSw0NiwxMDUsMCwxMjgsMCwwLDQwLDEsMCwwLDAsMTE3LDE4LAotICAgIDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsOTUsMTA5LDExMSwxMDAsMTAxLAotICAgIDk1LDExNiwxMjEsMTEyLDEwMSw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDEyLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLAotICAgIDEwOCwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDEyLDAsMCwwLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDk5LDEsMCwwLAotICAgIDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDM0LDAsMCwwLDEyNCwwLDAsMTE1LDIxLDAsMTE2LDAsMCwxMDYsCi0gICAgMSwwLDEzMSwwLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwyLDAsMTI0LDAsCi0gICAgMCwxMDAsMSwwLDEzMSwyLDAsODMsNDAsMiwwLDAsMCwxMTcsMzAsMCwKLSAgICAwLDAsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAwLDEwNSwxMTQsNDYsCi0gICAgMTA1LDAsNjQsMCwwLDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsOTUsCi0gICAgMTExLDExNSwxMTcsNiwwLDAsMCwxMDMsMTAxLDExNiw5OSwxMTksMTAwLDExNywxOCwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwKLSAgICAxMTYsMTIxLDExMiwxMDEsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDExNCwwLAotICAgIDAsMCwxMTUsNiwwLDAsMCwwLDIsNiwxLDE1LDEsMTE3LDExLDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTA1LDE4MiwxLAorICAgIDExMCw0NiwxMDgsMywwLDAsMCwyNTUsMTI3LDI1NSwxMjcsMywwLDIzMyw0LDAsCisgICAgMCwwLDIxOCw2LDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQxLDIsMjE4LDMsMTA1LDExMCwKKyAgICAxMTYsMjE4LDgsMTE2LDExMSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMSwyMTgsMSwxMjAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDcsOTUsMTE5LDk1LDEwOCwxMTEsMTEwLDEwMyw0MCwwLDAsMCwxMTUsMiwwLDAsCisgICAgMCwwLDIsMTE0LDE3LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCwxLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsCisgICAgMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsCisgICAgMCw4Myw0MSwyLDEyMiw0Nyw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiw1MiwzMiwKKyAgICA5OCwxMjEsMTE2LDEwMSwxMTUsMzIsMTA1LDExMCwzMiwxMDgsMTA1LDExNiwxMTYsMTA4LDEwMSw0NSwKKyAgICAxMDEsMTEwLDEwMCwxMDUsOTcsMTEwLDMyLDExNiwxMTEsMzIsOTcsMTEwLDMyLDEwNSwxMTAsMTE2LAorICAgIDEwMSwxMDMsMTAxLDExNCw0NiwxMTQsMTMsMCwwLDAsNDEsMiwxMTQsMTQsMCwwLAorICAgIDAsMjE4LDEwLDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMSw5MCwKKyAgICA5LDEwNSwxMTAsMTE2LDk1LDk4LDEyMSwxMTYsMTAxLDExNSwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsNyw5NSwxMTQsOTUsMTA4LDExMSwKKyAgICAxMTAsMTAzLDQ1LDAsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTQsMTksMCwKKyAgICAwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywKKyAgICAwLDAsMCw3MSwwLDAsMCwxMTUsMjYsMCwwLDAsMTE2LDAsMCwxMDYsCisgICAgMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDEyNCwwLDAsNjgsMTMxLAorICAgIDEsMCwxMzEsMSwwLDgzLDQxLDMsMTIyLDMxLDgyLDEwMSwxMTIsMTA4LDk3LDk5LAorICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LAorICAgIDEwNCw0NiwxMDYsMTExLDEwNSwxMTAsNDAsNDEsNDYsOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsNCwwLDAsMCw4MywwLDAsMCwxMTUsMzcsCisgICAgMCwwLDAsMTAzLDAsMCwxMjQsMCwwLDkzLDI3LDAsMTI1LDEsMCwxMjQsCisgICAgMSwwLDExNCw2LDAsMTI0LDEsMCwxMDYsMCwwLDExNiwxLDAsMTMxLDEsCisgICAgMCwxNDUsMiwwLDExMyw2LDAsODMsMTE0LDQsMCwwLDAsNDEsMiwyMTgsCisgICAgNiwxMTQsMTE1LDExNiwxMTQsMTA1LDExMiwyMTgsMTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwKKyAgICAxMTIsOTcsMTE0LDk3LDExNiwxMTEsMTE0LDExNSw0MSwyLDIxOCwyLDQ2LDQ4LDIxOCw0LAorICAgIDExMiw5NywxMTQsMTE2LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDI1MCwxMCw2MCwxMDgsMTA1LDExNSwxMTYsOTksMTExLDEwOSwxMTIsNjIsNTIsCisgICAgMCwwLDAsMTE1LDIsMCwwLDAsOSwxLDEyMiwzMCw5NSwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LAorICAgIDYwLDEwOCwxMDUsMTE1LDExNiw5OSwxMTEsMTA5LDExMiw2Miw0MSwyLDIxOCw4LDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDIxOCw0LDEwNiwxMTEsMTA1LDExMCw0MSwxLDIxOCwxMCwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMTIsOTcsMTE0LDExNiwxMTUsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDk1LDExMiw5NywxMTYsMTA0LAorICAgIDk1LDEwNiwxMTEsMTA1LDExMCw1MCwwLDAsMCwxMTUsNCwwLDAsMCwwLDIsCisgICAgMTUsMSwxMTQsMjgsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLAorICAgIDUsMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMTM0LDAsMCwKKyAgICAwLDExNiwwLDAsMTE2LDEsMCwxMzEsMSwwLDEwMCwxLDAsMTA3LDIsMCwKKyAgICAxMTQsNTIsMCwxMjQsMCwwLDEwNiwyLDAsMTE2LDMsMCwxMzEsMSwwLDkyLAorICAgIDMsMCwxMjUsMSwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMSwwLDEyNCwzLAorICAgIDAsMTAyLDIsMCw4MywxMjAsNjksMCwxMTYsNCwwLDEyNCwwLDAsMTMxLDEsCisgICAgMCw2OCw5Myw1NSwwLDEyNSw0LDAsMTI0LDQsMCwxMTYsMSwwLDEwNyw2LAorICAgIDAsMTE0LDY1LDAsMTI0LDAsMCwxMDYsNSwwLDEyNCw0LDAsMTAwLDIsMCwKKyAgICAxMDAsMSwwLDEzMSwxLDEsOTIsMiwwLDEyNSwxLDAsMTI1LDMsMCwxMjQsCisgICAgMSwwLDEyNCwzLDAsMTAyLDIsMCw4MywxMTMsNjUsMCw4NywxMDAsMywwLAorICAgIDEyNCwwLDAsMTAyLDIsMCw4Myw0MSw0LDEyMiwzMiw4MiwxMDEsMTEyLDEwOCw5NywKKyAgICA5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LAorICAgIDExNiwxMDQsNDYsMTE1LDExMiwxMDgsMTA1LDExNiw0MCw0MSw0NiwyMzMsMSwwLDAsMCwKKyAgICA5MCw4LDEwOSw5NywxMjAsMTE1LDExMiwxMDgsMTA1LDExNiwyMTgsMCw0MSw2LDIxOCwzLAorICAgIDEwOCwxMDEsMTEwLDExNCwyMSwwLDAsMCwyMTgsMTAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwKKyAgICAxMTYsMTA1LDExMSwxMTAsMTE0LDI1LDAsMCwwLDIxOCw4LDExNCwxMDEsMTE4LDEwMSwxMTQsCisgICAgMTE1LDEwMSwxMDAsMjE4LDYsMTE0LDExNSwxMTIsMTA4LDEwNSwxMTYsNDEsNSwyMTgsNCwxMTIsCisgICAgOTcsMTE2LDEwNCw5MCw1LDEwMiwxMTQsMTExLDExMCwxMTYsMjE4LDEsOTUsMjE4LDQsMTE2LAorICAgIDk3LDEwNSwxMDgsMTE0LDE2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCwxMSw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsCisgICAgMTEyLDEwOCwxMDUsMTE2LDU2LDAsMCwwLDExNSwxNiwwLDAsMCwwLDIsMTgsCisgICAgMSwyNCwxLDEwLDEsMTksMSwxMiwxLDI3LDEsMTQsMSwxMTQsMzgsMCwKKyAgICAwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMDYsCisgICAgMSwwLDEyNCwwLDAsMTMxLDEsMCw4Myw0MSwxLDEyMiwxMjYsODMsMTE2LDk3LAorICAgIDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiw3Nyw5NywxMDAsMTAxLDMyLDk3LDMyLDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTAxLAorICAgIDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDEwOSw5NywxMDcsCisgICAgMTAxLDMyLDEwNSwxMTYsMzIsMTAxLDk3LDExNSwxMDUsMTAxLDExNCwzMiwxMTYsMTExLDMyLDExMSwKKyAgICAxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMzIsMTA1LDExMCwzMiwxMDEsMTIwLDExMiwxMDEsMTE0LAorICAgIDEwNSwxMDksMTAxLDExMCwxMTYsMTE1LDEwLDMyLDMyLDMyLDMyLDQwLDEwMSw0NiwxMDMsNDYsCisgICAgMzIsOTksOTcsOTksMTA0LDEwMSwzMiwxMTUsMTE2LDk3LDExNiwzMiwxMTQsMTAxLDExNSwxMTcsCisgICAgMTA4LDExNiwxMTUsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNDEsMiwxMTQsMywwLAorICAgIDAsMCw5MCw0LDExNSwxMTYsOTcsMTE2LDQxLDEsMTE0LDM1LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCwKKyAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiw2OCwwLDAsMCwxMTUsMiwKKyAgICAwLDAsMCwwLDcsMTE0LDM5LDAsMCwwLDk5LDIsMCwwLDAsMCwKKyAgICAwLDAsMCwzLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA1OCwwLDAsMCwxMjEsMTYsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsMCwKKyAgICAxMjUsMiwwLDg3LDExMCwyMiwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsNDAsCisgICAgMCwxLDEsMSwxMDAsMSwwLDgzLDg5LDExMCwxLDAsODgsMTI0LDIsMCwKKyAgICAxMDYsMiwwLDEwMCwyLDAsNjQsMTI0LDEsMCwxMDcsMiwwLDgzLDQxLDMsCisgICAgMTIyLDQ5LDg0LDEwMSwxMTUsMTE2LDMyLDExOSwxMDQsMTAxLDExNiwxMDQsMTAxLDExNCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwKKyAgICAxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTAxLDMyLDExNiwxMjEsCisgICAgMTEyLDEwMSw0Niw3MCwxMDUsMCwyNDAsMCwwLDQxLDMsMTE0LDM5LDAsMCwwLAorICAgIDIxOCw3LDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwyMTgsNywxMTUsMTE2LDk1LDEwOSwxMTEsCisgICAgMTAwLDEwMSw0MSwzLDExNCwzNSwwLDAsMCwyMTgsNCwxMDksMTExLDEwMCwxMDEsOTAsCisgICAgOSwxMTUsMTE2LDk3LDExNiw5NSwxMDUsMTEwLDEwMiwxMTEsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE4LDk1LDExMiw5NywxMTYsMTA0LAorICAgIDk1LDEwNSwxMTUsOTUsMTA5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSw3OCwwLDAsCisgICAgMCwxMTUsMTAsMCwwLDAsMCwyLDMsMSwxNiwxLDEzLDEsOSwxLAorICAgIDExNCw0MywwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLAorICAgIDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMTYsCisgICAgMCwwLDEyNCwwLDAsMTAwLDEsMCwxMzEsMiwwLDgzLDQxLDIsMTIyLDMxLAorICAgIDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsCisgICAgMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSw0NiwxMDUsCisgICAgMCwxMjgsMCwwLDQxLDEsMTE0LDQzLDAsMCwwLDQxLDEsMTE0LDM1LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDIxOCwxMiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSw4NywKKyAgICAwLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE0LDQ0LDAsMCwwLDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDM0LDAsMCwwLDEyNCwwLDAsMTE1LDIxLDAsMTE2LAorICAgIDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwyLAorICAgIDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsODMsNDEsMiwxMjIsMzAsODIsCisgICAgMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTEsCisgICAgMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAwLDEwNSwxMTQsNDYsMTA1LDAsNjQsCisgICAgMCwwLDQxLDMsMTE0LDMsMCwwLDAsMjE4LDYsMTAzLDEwMSwxMTYsOTksMTE5LAorICAgIDEwMCwxMTQsNDMsMCwwLDAsNDEsMSwxMTQsMzUsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDExLDk1LDExMiwKKyAgICA5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsOTIsMCwwLDAsMTE1LDYsMCwKKyAgICAwLDAsMCwyLDYsMSwxNSwxLDExNCw0NiwwLDAsMCwxMDUsMTgyLDEsCiAgICAgMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDE3LAogICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxOTIsMCwwLDAsMTAwLDEsMCwxMDYsCiAgICAgMCwwLDEyNCwwLDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDIsCkBAIC0yOTQsOTYzICsyNjUsNjkxIEBACiAgICAgMCwxMDcsMTAsMCwxMTQsMTg3LDAsMSwxLDEsMTIxLDE3LDAsMTE2LDIsMCwKICAgICAxMDYsMTIsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywxMTAsMTgsMCw0LDExNiwKICAgICAxMSwwLDEwNywxMCwwLDExNCwxNzksMCwxLDEsMSw4OSwxMTAsMSwwLDg4LAotICAgIDEzMCwwLDAsODksMTEwLDEsMCw4OCwxMDAsNCwwLDgzLDQwLDUsMCwwLAotICAgIDAsMTE3LDE2MiwwLDAsMCw2NiwxMDEsMTE1LDExNiw0NSwxMDEsMTAyLDEwMiwxMTEsMTE0LAotICAgIDExNiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMTksMTE0LAotICAgIDEwNSwxMTYsMTAxLDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCwzMiw5NywxMTYsMTExLDEwOSwxMDUsOTksOTcsMTA4LDEwOCwxMjEsNDYsMTAsMzIsCi0gICAgMzIsMzIsMzIsNjYsMTAxLDMyLDExMiwxMTQsMTAxLDExMiw5NywxMTQsMTAxLDEwMCwzMiwxMTYsCi0gICAgMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsOTcsMzIsNzAsMTA1LDEwOCwxMDEsNjksCi0gICAgMTIwLDEwNSwxMTUsMTE2LDExNSw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDEwMiwzMiw5OSwxMTEsCi0gICAgMTEwLDk5LDExNywxMTQsMTE0LDEwMSwxMTAsMTE2LDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywKLSAgICAzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMDEsMTA5LDExMiwKLSAgICAxMTEsMTE0LDk3LDExNCwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTE2LAotICAgIDExNiwxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCw0NiwxMTcsNSwwLDAsMCwxMjMsMTI1LDQ2LAotICAgIDEyMywxMjUsMTA1LDE4MiwxLDAsMCwxMTcsMiwwLDAsMCwxMTksOTgsNzgsNDAsCi0gICAgMTMsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsCi0gICAgMiwwLDAsMCwxMDUsMTAwLDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDQsCi0gICAgMCwwLDAsMTExLDExMiwxMDEsMTEwLDExNyw2LDAsMCwwLDc5LDk1LDY5LDg4LAotICAgIDY3LDc2LDExNyw3LDAsMCwwLDc5LDk1LDY3LDgyLDY5LDY1LDg0LDExNyw4LAotICAgIDAsMCwwLDc5LDk1LDg3LDgyLDc5LDc4LDc2LDg5LDExNywzLDAsMCwwLAotICAgIDk1LDEwNSwxMTEsMTE3LDYsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzMsNzksMTE3LDUsCi0gICAgMCwwLDAsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTcsNywwLDAsMCwxMTQsMTAxLDExMiwKLSAgICAxMDgsOTcsOTksMTAxLDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAxMTcsNiwwLDAsMCwxMTcsMTEwLDEwOCwxMDUsMTEwLDEwNyw0MCw2LDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywKLSAgICAxMTYsOTcsMTE3LDQsMCwwLDAsMTA5LDExMSwxMDAsMTAxLDExNyw4LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDExNiwxMDksMTEyLDExNywyLDAsMCwwLDEwMiwxMDAsMTE3LAotICAgIDQsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDEzLDAsMCwwLDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsCi0gICAgOTcsMTE2LDExMSwxMDksMTA1LDk5LDEyMSwwLDAsMCwxMTUsMjYsMCwwLDAsMCwKLSAgICA1LDI0LDEsOSwxLDMzLDEsMywzLDIxLDEsMTksMSwyMCwxLDEzLAotICAgIDEsMywxLDE3LDEsMTMsMSw1LDEsMTE3LDEzLDAsMCwwLDk1LDExOSwKLSAgICAxMTQsMTA1LDExNiwxMDEsOTUsOTcsMTE2LDExMSwxMDksMTA1LDk5LDk5LDIsMCwwLDAsCi0gICAgMCwwLDAsMCwzLDAsMCwwLDcsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDk1LDAsMCwwLDEyMCw2OSwwLDEwMCwxLDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEwMCw0LDAsMTAzLDQsMCw2OCw5Myw0OSwwLDEyNSwyLDAsMTE2LDAsCi0gICAgMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTQsMTksMCwxMTYsMSwwLAotICAgIDEyNCwwLDAsMTI0LDIsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsCi0gICAgMiwwLDEzMSwzLDAsMSwxMTMsMTksMCwxMTMsMTksMCw4NywxMjQsMCwwLAotICAgIDEwNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDEsMCwxLAotICAgIDEwMCw1LDAsODMsNDAsNiwwLDAsMCwxMTcsNDcsMCwwLDAsODMsMTA1LAotICAgIDEwOSwxMTIsMTA4LDEwMSwzMiwxMTUsMTE3LDk4LDExNSwxMTYsMTA1LDExNiwxMTcsMTE2LDEwMSwzMiwKLSAgICAxMDIsMTExLDExNCwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTExLDExMSwxMDgsMTE1LDQ2LDExNywxMTIsCi0gICAgMTAwLDk3LDExNiwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDYsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwKLSAgICAxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSwxMDAsMTExLDk5LDk1LDk1LDc4LDQwLDUsMCwwLDAsMTE3LDcsMCwwLAotICAgIDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsNywwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NywxMTYsMTE2LDExNCwxMTcsNywwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwxMTcsNiwwLAotICAgIDAsMCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDQwLDMsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsMTEwLDEwMSwxMTksMTE3LDMsMCwwLDAsMTExLDEwOCwxMDAsMTE3LDcsMCwKLSAgICAwLDAsMTE0LDEwMSwxMTIsMTA4LDk3LDk5LDEwMSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDE0MywKLSAgICAwLDAsMCwxMTUsOCwwLDAsMCwwLDIsMjUsMSwxNSwxLDMyLDEsCi0gICAgMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywxMTIsOTksMSwwLDAsMCwwLAotICAgIDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgMTYsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEzMSwxLDAsMTI0LDAsMCwKLSAgICAxMzEsMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDc1LDAsMCwwLDY3LDExNCwKLSAgICAxMDEsOTcsMTE2LDEwMSwzMiw5NywzMiwxMTAsMTAxLDExOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTAxLDExMCwxMTYsMTAxLDExNCwxMDEsCi0gICAgMTAwLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNDAsMiwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTYsMTIxLDExMiwxMDEsMTE3LDMsMCwwLDAsOTUsMTA1LDExMSw0MCwKLSAgICAxLDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMCwxMDEsCi0gICAgMTE5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE1NCwwLDAsMCwxMTUsMiwwLDAsCi0gICAgMCwwLDYsMTE3LDEwLDAsMCwwLDExMCwxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsCi0gICAgMCwwLDAsNjYsMCwwLDAsMTE1LDIwLDAsMCwwLDEyNCwwLDAsNjksCi0gICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw4MywKLSAgICA0MCwyLDAsMCwwLDExNywxNCwwLDAsMCw5NSw2OCwxMDEsOTcsMTAwLDEwOCwKLSAgICAxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCw3OCw0MCwzLDAsMCwwLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCwKLSAgICA5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsCi0gICAgOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsNDAsMSwwLDAsMCwKLSAgICAxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE0LDAsMCwwLAotICAgIDk1LDY4LDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDE3MSwwLAotICAgIDAsMCwxMTUsMiwwLDAsMCwxNiwxLDExNywxNCwwLDAsMCw5NSw2OCwKLSAgICAxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCw5OSwxLDAsMCwKLSAgICAwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY2LDAsMCwKLSAgICAwLDExNSw4NiwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLAotICAgIDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLAotICAgIDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsCi0gICAgMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLAotICAgIDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTAsMCwxMDAsCi0gICAgMTEsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTIsMCw4Myw0MCwxMywwLDAsCi0gICAgMCwxMTcsMTEsMCwwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksCi0gICAgMTA3LDExNywxNjksMCwwLDAsNjUsMzIsMTE0LDEwMSw5OSwxMTcsMTE0LDExNSwxMDUsMTE4LAotICAgIDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwKLSAgICA5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNSwxMTUsMzIsOTcsCi0gICAgOTgsMTA4LDEwMSwzMiwxMTYsMTExLDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsMzIsMTAwLDEwMSwKLSAgICA5NywxMDAsMTA4LDExMSw5OSwxMDcsMTE1LDEwLDMyLDMyLDMyLDMyLDQwLDEwMSw0NiwxMDMsCi0gICAgNDYsMzIsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwzMiw0OSwzMiwxMTYsMTE0LDEyMSwxMDUsMTEwLAotICAgIDEwMywzMiwxMTYsMTExLDMyLDExNiw5NywxMDcsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDExNSwzMiwKLSAgICA2NSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNjYsNDQsMzIsOTcsMTEwLDEwMCwzMiwxMTYsMTA0LAotICAgIDExNCwxMDEsOTcsMTAwLDMyLDUwLDMyLDExNiwxMTQsMTIxLDEwNSwxMTAsMTAzLDMyLDExNiwxMTEsCi0gICAgMTAsMzIsMzIsMzIsMzIsMTE2LDk3LDEwNywxMDEsMzIsMTA4LDExMSw5OSwxMDcsMTE1LDMyLAotICAgIDY2LDMyLDExNiwxMDQsMTAxLDExMCwzMiw2NSw0MSw0NiwxMCwzMiwzMiwzMiwzMiw5OSwKLSAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSw3MCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLAotICAgIDAsMCwxMjQsMCwwLDk1LDIsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsCi0gICAgMCwxMjQsMCwwLDk1LDMsMCwxMjQsMSwwLDEyNCwwLDAsOTUsNCwwLAotICAgIDEwMCwwLDAsMTI0LDAsMCw5NSw2LDAsMTAwLDEsMCwxMjQsMCwwLDk1LAotICAgIDcsMCwxMDAsMSwwLDEyNCwwLDAsOTUsOCwwLDEwMCwwLDAsODMsNDAsCi0gICAgMiwwLDAsMCw3OCwxMDUsMCwwLDAsMCw0MCw5LDAsMCwwLDExNywKLSAgICA3LDAsMCwwLDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTE3LDEzLDAsMCwwLAotICAgIDk3LDEwOCwxMDgsMTExLDk5LDk3LDExNiwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LDQsMCwKLSAgICAwLDAsMTA4LDExMSw5OSwxMDcsMTE3LDYsMCwwLDAsMTE5LDk3LDEwNywxMDEsMTE3LAotICAgIDExMiwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw3OCwKLSAgICAxMTEsMTEwLDEwMSwxMTcsNSwwLDAsMCwxMTEsMTE5LDExMCwxMDEsMTE0LDExNyw1LDAsCi0gICAgMCwwLDk5LDExMSwxMTcsMTEwLDExNiwxMTcsNywwLDAsMCwxMTksOTcsMTA1LDExNiwKLSAgICAxMDEsMTE0LDExNSw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LAotICAgIDExNiw5NSw5NSwxODEsMCwwLDAsMTE1LDEyLDAsMCwwLDAsMSwxNSwxLAotICAgIDE1LDEsOSwxLDksMSw5LDEsMTE3LDIwLDAsMCwwLDk1LDc3LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsCi0gICAgOTUsOTksMSwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMiwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsODcsMCwwLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTI1LDIsMCwKLSAgICAxMjAsNTksMCwxMTYsMywwLDEwNiw0LDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwKLSAgICAzLDAsMTI0LDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDU1LDAsMTAwLDEsCi0gICAgMCw4MywxMjQsMywwLDEwNiwyLDAsMTI1LDIsMCwxMjQsMiwwLDEyNCwxLAotICAgIDAsMTA3LDIsMCwxMTQsMjQsMCwxMDAsMiwwLDgzLDExMywyNCwwLDEwMCwwLAotICAgIDAsODMsNDAsMywwLDAsMCw3OCw3MCw4NCw0MCw4LDAsMCwwLDExNywKLSAgICA3LDAsMCwwLDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTE3LDksMCwwLDAsCi0gICAgMTAzLDEwMSwxMTYsOTUsMTA1LDEwMCwxMDEsMTEwLDExNiwxMTcsNSwwLDAsMCwxMTEsMTE5LAotICAgIDExMCwxMDEsMTE0LDExNywxMiwwLDAsMCw5NSw5OCwxMDgsMTExLDk5LDEwNywxMDUsMTEwLAotICAgIDEwMyw5NSwxMTEsMTEwLDExNywzLDAsMCwwLDEwMywxMDEsMTE2LDExNyw0LDAsMCwKLSAgICAwLDc4LDExMSwxMTAsMTAxLDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDExNywKLSAgICA0LDAsMCwwLDg0LDExNCwxMTcsMTAxLDQwLDQsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywyLDAsMCwwLDEwOSwxMDEsMTE3LDMsMCwKLSAgICAwLDAsMTE2LDEwNSwxMDAsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsNDAsMCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsMTA0LAotICAgIDk3LDExNSw5NSwxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNywxODksMCwwLDAsMTE1LAotICAgIDE4LDAsMCwwLDAsMiwxMiwxLDksMSwzLDEsMTUsMSwxMiwxLAotICAgIDQsMSw5LDEsMTIsMSwxMTcsMjQsMCwwLDAsOTUsNzcsMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDEwNCw5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LAotICAgIDExMSw5OSwxMDcsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgMTcsMCwwLDAsNjcsMCwwLDAsMTE1LDIxNCwwLDAsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTMxLDAsMCwxMjUsMSwwLDEyNCwwLDAsMTE2LDIsMCwxMjQsCi0gICAgMSwwLDYwLDEyMiwxNzcsMCwxMjAsMTcwLDAsMTI0LDAsMCwxMDYsMywwLDE0MywKLSAgICAxMzAsMCwxLDEyNCwwLDAsMTA2LDQsMCwxMDAsMSwwLDEwNywyLDAsMTE1LAotICAgIDY4LDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwxLDAsMTA3LDIsMCwxMTQsOTYsCi0gICAgMCwxMjQsMSwwLDEyNCwwLDAsOTUsNSwwLDEyNCwwLDAsNCwxMDYsNCwKLSAgICAwLDEwMCwyLDAsNTUsMiw5NSw0LDAsMTAwLDUsMCw4MywxMjQsMCwwLAotICAgIDEwNiw3LDAsMTMxLDAsMCwxMTQsMTI3LDAsMTE2LDgsMCwxMDAsMywwLDEyNCwKLSAgICAwLDAsMjIsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwxMDYsCi0gICAgOSwwLDEwNiwxMCwwLDEwMCw2LDAsMTMxLDEsMCwxMTQsMTYzLDAsMTI0LDAsCi0gICAgMCw0LDEwNiwxMiwwLDEwMCwyLDAsNTUsMiw5NSwxMiwwLDExMCwwLDAsCi0gICAgODcsMTAwLDQsMCw4MSw4OCwxMjQsMCwwLDEwNiw5LDAsMTA2LDEwLDAsMTMxLAotICAgIDAsMCwxLDEyNCwwLDAsMTA2LDksMCwxMDYsMTMsMCwxMzEsMCwwLDEsCi0gICAgMTEzLDI4LDAsODcsMTAwLDQsMCwxMTYsMiwwLDEyNCwxLDAsNjEsODgsMTAwLAotICAgIDQsMCw4Myw0MCw3LDAsMCwwLDExNywxODUsMCwwLDAsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsNjUsOTksMTEzLDExNywxMDUsMTE0LDEwMSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNyw0NiwzMiwzMiwKLSAgICA3MywxMDIsMzIsOTcsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LDk3LDEwOCwzMiwxMDAsCi0gICAgMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwKLSAgICAxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5NywzMiw5NSwKLSAgICA2OCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LAotICAgIDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsNzksMTE2LDEwNCwxMDEsMTE0LDExOSwxMDUsMTE1LDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LDMyLDk3LDEwOCwxMTksOTcsMTIxLDExNSwzMiw5NywKLSAgICA5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiw5NywxMTAsMTAwLDMyLDg0LDExNCwxMTcsMTAxLAotICAgIDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCw0NiwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwxMDUsMCwwLDAsMCwxMDUsMSwwLDAsMCwKLSAgICAxMTcsMjMsMCwwLDAsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTAwLDEwMSwKLSAgICAxMTYsMTAxLDk5LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwzNywxMTQsNzgsODQsNzAsNDAsCi0gICAgMTQsMCwwLDAsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwKLSAgICAxMTcsOSwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDUsMTAwLDEwMSwxMTAsMTE2LDExNywxMiwKLSAgICAwLDAsMCw5NSw5OCwxMDgsMTExLDk5LDEwNywxMDUsMTEwLDEwMyw5NSwxMTEsMTEwLDExNywKLSAgICA0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDExNyw1LDAsMCwwLDk5LDExMSwxMTcsCi0gICAgMTEwLDExNiwxMTcsNSwwLDAsMCwxMTEsMTE5LDExMCwxMDEsMTE0LDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDExNywxMiwwLDAsMCwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsCi0gICAgOTcsMTAwLDEwOCwxMTEsOTksMTA3LDExNywxNCwwLDAsMCw5NSw2OCwxMDEsOTcsMTAwLAotICAgIDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNiwwLDAsMCwxMTksOTcsCi0gICAgMTA3LDEwMSwxMTcsMTEyLDExNyw3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LDcsMCwwLDAsMTE5LAotICAgIDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsMTE3LDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LAotICAgIDExNSwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsCi0gICAgMTE3LDMsMCwwLDAsMTE2LDEwNSwxMDAsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDIwMSwwLDAsMCwxMTUsMzIsMCwwLDAsMCw2LDEyLDEsMTAsMSwzLAotICAgIDEsMywxLDEwLDEsMzAsMSw5LDEsMTUsMSw0LDEsMTIsMSwxOSwKLSAgICAxLDE4LDEsMjQsMiwxMywxLDIwLDIsMTE3LDE5LDAsMCwwLDk1LDc3LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsCi0gICAgMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEwLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNjUsMCwwLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTQzLDEzOCwwLAotICAgIDEsMTI0LDAsMCwxMDYsMywwLDEyNCwxLDAsMTA3LDMsMCwxMTQsNTIsMCwKLSAgICAxMTYsNCwwLDEwMCwxLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LAotICAgIDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDQsMCwxMTUsNzMsMCwxMTYsNiwKLSAgICAwLDEzMCwxLDAsMTI0LDAsMCw0LDEwNiw1LDAsMTAwLDMsMCw1NiwyLAotICAgIDk1LDUsMCwxMjQsMCwwLDEwNiw1LDAsMTAwLDIsMCwxMDcsMiwwLDExNCwKLSAgICAxNTUsMCwxMDAsMCwwLDEyNCwwLDAsOTUsMywwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMTQsMTU1LDAsMTI0LDAsMCw0LDEwNiw4LDAsMTAwLDMsMCw1NiwyLAotICAgIDk1LDgsMCwxMjQsMCwwLDEwNiw5LDAsMTA2LDEwLDAsMTMxLDAsMCwxLAotICAgIDExMywxNTUsMCwxMTAsMCwwLDg3LDEwMCwwLDAsODEsODgsMTAwLDAsMCw4MywKLSAgICA0MCw0LDAsMCwwLDc4LDExNywzMSwwLDAsMCw5OSw5NywxMTAsMTEwLDExMSwKLSAgICAxMTYsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE3LDExMCw0NSw5Nyw5OSwxMTMsCi0gICAgMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiwxMDgsMTExLDk5LDEwNywxMDUsMCwwLDAsMCwxMDUsCi0gICAgMSwwLDAsMCw0MCwxMSwwLDAsMCwxMTcsNywwLDAsMCw5NSwxMTYsCi0gICAgMTA0LDExNCwxMDEsOTcsMTAwLDExNyw5LDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwNSwxMDAsCi0gICAgMTAxLDExMCwxMTYsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsMTE3LDUsMCwwLAotICAgIDAsMTExLDExOSwxMTAsMTAxLDExNCwxMTcsMTIsMCwwLDAsODIsMTE3LDExMCwxMTYsMTA1LAotICAgIDEwOSwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw1LDAsMCwwLDk5LDExMSwxMTcsMTEwLAotICAgIDExNiwxMTcsMTQsMCwwLDAsNjUsMTE1LDExNSwxMDEsMTE0LDExNiwxMDUsMTExLDExMCw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDcsMCwKLSAgICAwLDAsMTE5LDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsMTE3LDYsMCwwLDAsMTE5LDk3LAotICAgIDEwNywxMDEsMTE3LDExMiwxMTcsNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwKLSAgICA0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsMywKLSAgICAwLDAsMCwxMTYsMTA1LDEwMCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDIyNiwwLAotICAgIDAsMCwxMTUsMjIsMCwwLDAsMCwxLDEyLDEsMTAsMSwxNSwxLDE1LAotICAgIDEsMjEsMSwxNSwxLDE1LDEsOSwxLDksMSwxNSwxLDExNywxOSwwLAotICAgIDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKLSAgICAwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMjMsMCwwLDAsMTAwLAotICAgIDEsMCwxMjQsMCwwLDEwNiwwLDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwxLAotICAgIDAsMTAyLDIsMCwyMiw4Myw0MCwyLDAsMCwwLDc4LDExNywyMSwwLDAsCi0gICAgMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDAsMzcsMTE0LDQxLAotICAgIDMyLDk3LDExNiwzMiwzNywxMDAsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTcsMiwwLDAsMCwxMDUsMTAwLDQwLDEsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LAotICAgIDk1LDk1LDIzOSwwLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDIwLDAsCi0gICAgMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwKLSAgICAxMTQsMTAxLDExMiwxMTQsOTUsOTUsNzgsNDAsOSwwLDAsMCwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywKLSAgICAxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LAotICAgIDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAotICAgIDk1LDk1LDExNywxMiwwLDAsMCwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsOTcsMTAwLDEwOCwKLSAgICAxMTEsOTksMTA3LDExNyw3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE3LAotICAgIDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQwLDEsMCwwLDAsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCw5NSw3NywxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsMTc1LDAsMCwwLDExNSwxMiwwLDAsCi0gICAgMCwxNiw0LDYsMiwxMiw4LDEyLDEyLDEyLDI1LDEyLDEzLDExNywxMSwwLAotICAgIDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsOTksMSwwLAotICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NiwwLAotICAgIDAsMCwxMTUsNzQsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsCisgICAgMTMwLDAsMCw4OSwxMTAsMSwwLDg4LDEwMCw0LDAsODMsNDEsNSwxMjIsMTYyLAorICAgIDY2LDEwMSwxMTUsMTE2LDQ1LDEwMSwxMDIsMTAyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTcsMTEwLDk5LAorICAgIDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMzIsMTAwLDk3LAorICAgIDExNiw5NywzMiwxMTYsMTExLDMyLDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDk3LDExNiwxMTEsCisgICAgMTA5LDEwNSw5OSw5NywxMDgsMTA4LDEyMSw0NiwxMCwzMiwzMiwzMiwzMiw2NiwxMDEsMzIsCisgICAgMTEyLDExNCwxMDEsMTEyLDk3LDExNCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA0LDk3LDExMCwxMDAsCisgICAgMTA4LDEwMSwzMiw5NywzMiw3MCwxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LDExNSwxMTYsMTE1LDY5LAorICAgIDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTAyLDMyLDk5LDExMSwxMTAsOTksMTE3LDExNCwxMTQsMTAxLAorICAgIDExMCwxMTYsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwKKyAgICAxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDEwMSwxMDksMTEyLDExMSwxMTQsOTcsMTE0LDEyMSwzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5NywxMTYsMTE2LDEwMSwxMDksMTEyLDExNiwxMDEsCisgICAgMTAwLDQ2LDEyMiw1LDEyMywxMjUsNDYsMTIzLDEyNSwxMDUsMTgyLDEsMCwwLDkwLDIsCisgICAgMTE5LDk4LDc4LDQxLDEzLDIxOCw2LDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMjE4LDIsMTA1LAorICAgIDEwMCwxMTQsMywwLDAsMCw5MCw0LDExMSwxMTIsMTAxLDExMCw5MCw2LDc5LDk1LAorICAgIDY5LDg4LDY3LDc2LDkwLDcsNzksOTUsNjcsODIsNjksNjUsODQsOTAsOCw3OSwKKyAgICA5NSw4Nyw4Miw3OSw3OCw3Niw4OSwyMTgsMyw5NSwxMDUsMTExLDIxOCw2LDcwLDEwNSwKKyAgICAxMDgsMTAxLDczLDc5LDIxOCw1LDExOSwxMTQsMTA1LDExNiwxMDEsMjE4LDcsMTE0LDEwMSwxMTIsCisgICAgMTA4LDk3LDk5LDEwMSwxMTQsNDAsMCwwLDAsOTAsNiwxMTcsMTEwLDEwOCwxMDUsMTEwLAorICAgIDEwNyw0MSw2LDExNCwzNSwwLDAsMCwyMTgsNCwxMDAsOTcsMTE2LDk3LDExNCw0MiwKKyAgICAwLDAsMCw5MCw4LDExMiw5NywxMTYsMTA0LDk1LDExNiwxMDksMTEyLDkwLDIsMTAyLAorICAgIDEwMCwyMTgsNCwxMDIsMTA1LDEwOCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDEzLDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsOTcsCisgICAgMTE2LDExMSwxMDksMTA1LDk5LDk5LDAsMCwwLDExNSwyNiwwLDAsMCwwLDUsCisgICAgMjQsMSw5LDEsMzMsMSwzLDMsMjEsMSwxOSwxLDIwLDEsMTMsMSwKKyAgICAzLDEsMTcsMSwxMywxLDUsMSwxMTQsNTUsMCwwLDAsOTksMiwwLAorICAgIDAsMCwwLDAsMCwwLDMsMCwwLDAsNywwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsOTUsMCwwLDAsMTIwLDY5LDAsMTAwLDEsMCwxMDAsMiwwLAorICAgIDEwMCwzLDAsMTAwLDQsMCwxMDMsNCwwLDY4LDkzLDQ5LDAsMTI1LDIsMCwKKyAgICAxMTYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDExNCwxOSwwLDExNiwKKyAgICAxLDAsMTI0LDAsMCwxMjQsMiwwLDExNiwyLDAsMTI0LDEsMCwxMjQsMiwKKyAgICAwLDEzMSwyLDAsMTMxLDMsMCwxLDExMywxOSwwLDExMywxOSwwLDg3LDEyNCwKKyAgICAwLDAsMTA2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsMSwKKyAgICAwLDEsMTAwLDUsMCw4Myw0MSw2LDEyMiw0Nyw4MywxMDUsMTA5LDExMiwxMDgsMTAxLAorICAgIDMyLDExNSwxMTcsOTgsMTE1LDExNiwxMDUsMTE2LDExNywxMTYsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLAorICAgIDEwMiwxMTcsMTEwLDk5LDExNiwxMTEsMTExLDEwOCwxMTUsNDYsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSwKKyAgICA5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0NiwyMTgsMTAsOTUsOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsOTUsOTUsMjE4LDgsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMjE4LAorICAgIDEyLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDIxOCw3LDk1LAorICAgIDk1LDEwMCwxMTEsOTksOTUsOTUsNzgsNDEsNSwyMTgsNywxMDQsOTcsMTE1LDk3LDExNiwKKyAgICAxMTYsMTE0LDIxOCw3LDExNSwxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDIxOCw3LDEwMywxMDEsMTE2LAorICAgIDk3LDExNiwxMTYsMTE0LDIxOCw4LDk1LDk1LDEwMCwxMDUsOTksMTE2LDk1LDk1LDIxOCw2LAorICAgIDExNywxMTIsMTAwLDk3LDExNiwxMDEsNDEsMyw5MCwzLDExMCwxMDEsMTE5LDkwLDMsMTExLAorICAgIDEwOCwxMDAsMTE0LDUyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDIxOCw1LDk1LDExOSwxMTQsOTcsMTEyLDEyMSwwLDAsCisgICAgMCwxMTUsOCwwLDAsMCwwLDIsMjUsMSwxNSwxLDMyLDEsMTE0LDY1LAorICAgIDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAorICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDExNiwwLDAsCisgICAgMTE2LDEsMCwxMzEsMSwwLDEyNCwwLDAsMTMxLDEsMCw4Myw0MSwxLDc4LAorICAgIDQxLDIsMjE4LDQsMTE2LDEyMSwxMTIsMTAxLDExNCw3LDAsMCwwLDQxLDEsMjE4LAorICAgIDQsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDExLDk1LDExMCwxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDEyOSwwLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE0LDY4LDAsMCwKKyAgICAwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsNjQsMCwwLDAsMTE1LDU4LDAsMCwwLDEwMSwwLDAsOTAsMSwKICAgICAwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsCiAgICAgMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLAogICAgIDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwKLSAgICAwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTAsMCwKLSAgICA4Myw0MCwxMSwwLDAsMCwxMTcsMTYsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksCi0gICAgMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywxMTcsODYsMCwwLDAsCi0gICAgNjUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMDEsMzIsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA3NiwxMTEsOTksMTA3LDMyLDEwMSwxMTMsMTE3LDEwNSwxMTgsOTcsMTA4LDEwMSwxMTAsMTE2LDMyLAotICAgIDEwMiwxMTEsMTE0LDMyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsMzIsOTgsMTE3LDEwNSwxMDgsMTAwLAotICAgIDExNSwzMiwxMTksMTA1LDExNiwxMDQsMTExLDExNywxMTYsMTAsMzIsMzIsMzIsMzIsMTA5LDExNywKLSAgICAxMDgsMTE2LDEwNSw0NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNSwxMTcsCi0gICAgMTEyLDExMiwxMTEsMTE0LDExNiw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKLSAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwKLSAgICAxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEwMCwxLDAsMTI0LDAsMCw5NSwKLSAgICAxLDAsMTAwLDAsMCw4Myw0MCwyLDAsMCwwLDc4LDEwNSwwLDAsMCwKLSAgICAwLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LAotICAgIDUsMCwwLDAsOTksMTExLDExNywxMTAsMTE2LDQwLDIsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDI0NywwLDAsMCwxMTUsNCwwLAotICAgIDAsMCwwLDEsOSwxLDExNywyNSwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwKLSAgICAxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDEwNSwxMTAsCi0gICAgMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCi0gICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxOSwwLDAsMCwxMjQsMCwKLSAgICAwLDQsMTA2LDAsMCwxMDAsMSwwLDU1LDIsOTUsMCwwLDEwMCwyLDAsCi0gICAgODMsNDAsMywwLDAsMCw3OCwxMDUsMSwwLDAsMCw4NCw0MCwyLDAsCi0gICAgMCwwLDExNyw1LDAsMCwwLDk5LDExMSwxMTcsMTEwLDExNiwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExNSwKLSAgICAxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICA3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMjUxLDAsMCwwLDExNSwKLSAgICA0LDAsMCwwLDAsMSwxNSwxLDExNywyNCwwLDAsMCw5NSw2OCwxMTcsCi0gICAgMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk3LDk5LAotICAgIDExMywxMTcsMTA1LDExNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKLSAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNDksMCwwLDAsMTI0LAotICAgIDAsMCwxMDYsMCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMzAsMCwxMTYsMSwKLSAgICAwLDEwMCwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwKLSAgICA0LDEwNiwwLDAsMTAwLDMsMCw1NiwyLDk1LDAsMCwxMDAsMCwwLDgzLAotICAgIDQwLDQsMCwwLDAsNzgsMTA1LDAsMCwwLDAsMTE3LDMxLDAsMCwwLAotICAgIDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTcsCi0gICAgMTEwLDQ1LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwxMTEsOTksMTA3LDEwNSwKLSAgICAxLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDUsMCwwLDAsOTksMTExLAotICAgIDExNywxMTAsMTE2LDExNywxMiwwLDAsMCw4MiwxMTcsMTEwLDExNiwxMDUsMTA5LDEwMSw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLAotICAgIDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywKLSAgICAwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwyNTUsMCwwLDAsMTE1LDYsCi0gICAgMCwwLDAsMCwxLDE1LDEsMTUsMSwxMTcsMjQsMCwwLDAsOTUsNjgsCi0gICAgMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMTQsCi0gICAgMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKLSAgICAwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsMCwKLSAgICAxMDAsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLAotICAgIDEsMCwxMDIsMiwwLDIyLDgzLDQwLDIsMCwwLDAsNzgsMTE3LDI2LDAsCi0gICAgMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKLSAgICA5OSwxMDcsNDAsMzcsMTE0LDQxLDMyLDk3LDExNiwzMiwzNywxMDAsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMiwwLDAsMCwxMDUsCi0gICAgMTAwLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQsMSwwLDAsMTE1LDIsMCwwLAotICAgIDAsMCwxLDExNywyNSwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSwKLSAgICA5NSw3OCw0MCw4LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDcsMCwKLSAgICAwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsNywwLDAsMCwxMTQsMTAxLAotICAgIDEwOCwxMDEsOTcsMTE1LDEwMSwxMTcsOCwwLDAsMCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgOTUsOTUsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsMjQzLDAsMCwwLDExNSwxMCwwLDAsMCwKLSAgICAxNiwyLDYsMiwxMiw0LDEyLDQsMTIsNSwxMTcsMTYsMCwwLDAsOTUsCi0gICAgNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwxMSwwLDAsMCwKLSAgICAzLDAsMCwwLDExNSwxNDIsMCwwLDAsMTAwLDMsMCwxMjUsMSwwLDEyMSwKLSAgICAxNywwLDExNiwxLDAsMTM2LDAsMCwyNSwxMzEsMCwwLDEyNSwxLDAsODcsCi0gICAgMTEwLDE4LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw0MywwLDEsMSwxLAotICAgIDg5LDExMCwxLDAsODgsMTI0LDEsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDEzOCwKLSAgICAwLDExNiwzLDAsMTAwLDMsMCwxMDcsOCwwLDExNCw4MywwLDExNiw0LDAsCi0gICAgMTM2LDAsMCwxMzEsMSwwLDEyNSwxLDAsMTEwLDEyLDAsMTE2LDUsMCwxMzYsCi0gICAgMCwwLDEzMSwxLDAsMTI1LDEsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsCi0gICAgMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDIsMCwxMTYsNiwwLDEwNiw3LDAsCi0gICAgMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTE2LDEsMCwxMzYsMCwwLDYwLAotICAgIDExMCwwLDAsMTI0LDEsMCw4Myw0MCw0LDAsMCwwLDExNywxMDksMCwwLAotICAgIDAsNzEsMTAxLDExNiwzMiwxMTEsMTE0LDMyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDIsCi0gICAgMTExLDExNCwzMiw5NywzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsCi0gICAgMTE3LDEwOCwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LAotICAgIDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNiw5NywxMDcsMTAxLDExMCw0Niw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDE5LAotICAgIDAsMCwwLDExNSwxMSwwLDAsMCwxMTYsMCwwLDEzNiwwLDAsNjEsMTAwLAotICAgIDAsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLDEsMCwwLDAsMTE3LDEzLAotICAgIDAsMCwwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNSwKLSAgICA0MCwxLDAsMCwwLDExNywxLDAsMCwwLDk1LDQwLDEsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDIsMCwwLDAsOTksOTgsMjQsMSwwLDAsMTE1LDIsMCwwLDAsCi0gICAgMCwxLDExNywyOCwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsCisgICAgMCwxMDAsOCwwLDgzLDQxLDksMjE4LDEzLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLAorICAgIDgyLDEwMSwxMDgsMTExLDk3LDEwMCwxMjIsNjMsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE1LDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiw5OSwxMDgsMTAxLAorICAgIDk3LDExMCw0NSwxMTcsMTEyLDMyLDExMSwxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDQwLDQxLDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwKKyAgICAwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDAsMCw4Myw0MSwxLAorICAgIDc4LDQxLDEsMjE4LDUsOTUsMTEwLDk3LDEwOSwxMDEsNDEsMiwyMTgsNCwxMTUsMTAxLAorICAgIDEwOCwxMDIsMTE0LDY3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDIxOCw4LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwKKyAgICAxNDEsMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMiw5NSw3Nyw5NywKKyAgICAxMTAsOTcsMTAzLDEwMSw4MiwxMDEsMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsMTA1LDExMCwxMDUsCisgICAgMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAorICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwwLDEyNCwwLDAsCisgICAgMTA2LDAsMCwxMTYsMSwwLDEwNiwyLDAsMTA3LDYsMCwxMjQsMCwwLDk1LAorICAgIDMsMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsNCwxMTQsNzAsMCwwLDAsCisgICAgMTE0LDcsMCwwLDAsMjE4LDcsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDIxOCwxMCwKKyAgICA5NSwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsNDEsMSwxMTQsNzEsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDksOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSwxNDQsMCwwLDAsMTE1LAorICAgIDIsMCwwLDAsMCwxLDEyMiwyMyw5NSw3Nyw5NywxMTAsOTcsMTAzLDEwMSw4MiwKKyAgICAxMDEsMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMiwwLDAsMCwKKyAgICA3MSwwLDAsMCwxMTUsODAsMCwwLDAsMTE2LDAsMCwxMDAsMSwwLDEwMCwKKyAgICAyLDAsMTMyLDAsMCwxMjQsMSwwLDY4LDEzMSwxLDAsMTMxLDEsMCwxMTQsCisgICAgNzYsMCwxMjQsMCwwLDEwNiwxLDAsMTIsMTE0LDc2LDAsMTIxLDE3LDAsMTE2LAorICAgIDIsMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCw2MSw4NywxMTMsNzYsMCwKKyAgICA0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDcyLDAsMSwxLDEsODksMTEzLDc2LAorICAgIDAsODgsMTEwLDAsMCwxMDAsMCwwLDgzLDQxLDMsNzgsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwxMTUsMCwwLAorICAgIDAsMTE1LDI3LDAsMCwwLDEyNCwwLDAsOTMsMTcsMCwxMjUsMSwwLDEyNCwKKyAgICAxLDAsMTAwLDAsMCwxMDcsOSwwLDg2LDEsMTEzLDMsMCwxMDAsMCwwLAorICAgIDgzLDQxLDEsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjIsMCwwLDAsCisgICAgMjE4LDMsOTcsMTE0LDEwMywxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyNTAsOSw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTQ4LAorICAgIDAsMCwwLDExNSwyLDAsMCwwLDYsMCwxMjIsNDEsOTUsNzcsOTcsMTEwLAorICAgIDk3LDEwMywxMDEsODIsMTAxLDEwOCwxMTEsOTcsMTAwLDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiwKKyAgICA5NSw5NSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsCisgICAgMTAxLDEyMCwxMTIsMTE0LDYyLDQxLDYsMjE4LDMsOTcsMTEwLDEyMSwxMTQsNzQsMCwwLAorICAgIDAsMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwwLDExNCw3MCwwLDAsMCwKKyAgICAyMTgsOCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLDExNCw0MSwyLDExNCw3MSwwLDAsCisgICAgMCwyMTgsNCw5NywxMTQsMTAzLDExNSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwyMTgsOCw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsCisgICAgMTQ3LDAsMCwwLDExNSwxMCwwLDAsMCwwLDEsMzUsMSwzLDEsMTcsCisgICAgMSwxMywxLDEyMiwyMiw5NSw3Nyw5NywxMTAsOTcsMTAzLDEwMSw4MiwxMDEsMTA4LDExMSwKKyAgICA5NywxMDAsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLDcsMTE0LDU3LAorICAgIDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsCisgICAgMCwwLDExNCw3MiwwLDAsMCwxMTQsNzUsMCwwLDAsMTE0LDgxLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCw2OSwwLDAsMCwxMzcsMCwwLDAsMTE1LDgsCisgICAgMCwwLDAsMTIsMiw2LDIsMTIsMywxMiwzLDExNCw2OSwwLDAsMCwKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSwxNiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwKKyAgICAxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDgzLDQxLDIsMjE4LDE0LDk1LDY4LAorICAgIDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDc4LDQxLDMsMTE0LAorICAgIDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDgyLDAsMCwwLDE2MiwwLDAsMCwxMTUsMiwwLDAsMCwKKyAgICAxMiwxLDExNCw4MiwwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw4MiwwLDAsCisgICAgMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLAorICAgIDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLAorICAgIDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsCisgICAgMCwxMzIsMCwwLDkwLDYsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCwKKyAgICA5MCw3LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCw4LDAsMTAwLAorICAgIDEyLDAsODMsNDEsMTMsMjE4LDExLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAorICAgIDk5LDEwNywxMjIsMTY5LDY1LDMyLDExNCwxMDEsOTksMTE3LDExNCwxMTUsMTA1LDExOCwxMDEsMzIsCisgICAgMTA4LDExMSw5OSwxMDcsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LAorICAgIDEwNSwxMTEsMTEwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTE1LDMyLDk3LDk4LDEwOCwKKyAgICAxMDEsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDMyLDEwMCwxMDEsOTcsMTAwLAorICAgIDEwOCwxMTEsOTksMTA3LDExNSwxMCwzMiwzMiwzMiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLAorICAgIDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMzIsNDksMzIsMTE2LDExNCwxMjEsMTA1LDExMCwxMDMsMzIsCisgICAgMTE2LDExMSwzMiwxMTYsOTcsMTA3LDEwMSwzMiwxMDgsMTExLDk5LDEwNywxMTUsMzIsNjUsMzIsCisgICAgMTE2LDEwNCwxMDEsMTEwLDMyLDY2LDQ0LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMTQsMTAxLAorICAgIDk3LDEwMCwzMiw1MCwzMiwxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMTYsMTExLDEwLDMyLAorICAgIDMyLDMyLDMyLDExNiw5NywxMDcsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDExNSwzMiw2NiwzMiwKKyAgICAxMTYsMTA0LDEwMSwxMTAsMzIsNjUsNDEsNDYsMTAsMzIsMzIsMzIsMzIsOTksMiwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsNzAsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsCisgICAgMTI0LDAsMCw5NSwyLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI0LAorICAgIDAsMCw5NSwzLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDQsMCwxMDAsMCwKKyAgICAwLDEyNCwwLDAsOTUsNSwwLDEwMCwxLDAsMTI0LDAsMCw5NSw2LDAsCisgICAgMTAwLDEsMCwxMjQsMCwwLDk1LDcsMCwxMDAsMCwwLDgzLDQxLDIsNzgsCisgICAgMjMzLDAsMCwwLDAsNDEsOCwyMTgsNyw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLAorICAgIDkwLDEzLDk3LDEwOCwxMDgsMTExLDk5LDk3LDExNiwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMjE4LAorICAgIDQsMTA4LDExMSw5OSwxMDcsMjE4LDYsMTE5LDk3LDEwNywxMDEsMTE3LDExMiwxMTQsNjcsMCwKKyAgICAwLDAsMjE4LDUsMTExLDExOSwxMTAsMTAxLDExNCwyMTgsNSw5OSwxMTEsMTE3LDExMCwxMTYsCisgICAgMjE4LDcsMTE5LDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsNDEsMiwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDY3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCw3MiwwLDAsMCwxNzIsMCwwLDAsMTE1LDEyLDAsCisgICAgMCwwLDAsMSwxNSwxLDE1LDEsOSwxLDksMSw5LDEsMTIyLDIwLAorICAgIDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLAorICAgIDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDQsMCwwLAorICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsODcsMCwwLDAsMTE2LDAsCisgICAgMCwxMDYsMSwwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwyLDAsCisgICAgMTI1LDIsMCwxMjAsNTksMCwxMTYsMywwLDEwNiw0LDAsMTI0LDIsMCwxMzEsCisgICAgMSwwLDEyNSwzLDAsMTI0LDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDU1LAorICAgIDAsMTAwLDEsMCw4MywxMjQsMywwLDEwNiwyLDAsMTI1LDIsMCwxMjQsMiwKKyAgICAwLDEyNCwxLDAsMTA3LDIsMCwxMTQsMjQsMCwxMDAsMiwwLDgzLDExMywyNCwKKyAgICAwLDEwMCwwLDAsODMsNDEsMyw3OCw3MCw4NCw0MSw1LDExNCw4NSwwLDAsCisgICAgMCwyMTgsOSwxMDMsMTAxLDExNiw5NSwxMDUsMTAwLDEwMSwxMTAsMTE2LDExNCw4OCwwLDAsCisgICAgMCwyMTgsMTIsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwxMDMsOTUsMTExLDExMCwyMTgsCisgICAgMywxMDMsMTAxLDExNiw0MSw0LDExNCw3MSwwLDAsMCwyMTgsMiwxMDksMTAxLDIxOCwKKyAgICAzLDExNiwxMDUsMTAwLDExNCw4NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTIsMTA0LDk3LDExNSw5NSwxMDAsMTAxLAorICAgIDk3LDEwMCwxMDgsMTExLDk5LDEwNywxODAsMCwwLDAsMTE1LDE4LDAsMCwwLDAsCisgICAgMiwxMiwxLDksMSwzLDEsMTUsMSwxMiwxLDQsMSw5LDEsMTIsCisgICAgMSwxMjIsMjQsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDEwNCwKKyAgICA5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMTcsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDIxNCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMSwKKyAgICAwLDEyNCwwLDAsMTE2LDIsMCwxMjQsMSwwLDYwLDEyMiwxNzcsMCwxMjAsMTcwLAorICAgIDAsMTI0LDAsMCwxMDYsMywwLDE0MywxMzAsMCwxLDEyNCwwLDAsMTA2LDQsCisgICAgMCwxMDAsMSwwLDEwNywyLDAsMTE1LDY4LDAsMTI0LDAsMCwxMDYsNSwwLAorICAgIDEyNCwxLDAsMTA3LDIsMCwxMTQsOTYsMCwxMjQsMSwwLDEyNCwwLDAsOTUsCisgICAgNSwwLDEyNCwwLDAsNCwxMDYsNCwwLDEwMCwyLDAsNTUsMiw5NSw0LAorICAgIDAsMTAwLDMsMCw4MywxMjQsMCwwLDEwNiw2LDAsMTMxLDAsMCwxMTQsMTI3LAorICAgIDAsMTE2LDcsMCwxMDAsNCwwLDEyNCwwLDAsMjIsMTMxLDEsMCwxMzAsMSwKKyAgICAwLDExMCwwLDAsMTI0LDAsMCwxMDYsOCwwLDEwNiw5LDAsMTAwLDUsMCwKKyAgICAxMzEsMSwwLDExNCwxNjMsMCwxMjQsMCwwLDQsMTA2LDEwLDAsMTAwLDIsMCwKKyAgICA1NSwyLDk1LDEwLDAsMTEwLDAsMCw4NywxMDAsNiwwLDgxLDg4LDEyNCwwLAorICAgIDAsMTA2LDgsMCwxMDYsOSwwLDEzMSwwLDAsMSwxMjQsMCwwLDEwNiw4LAorICAgIDAsMTA2LDExLDAsMTMxLDAsMCwxLDExMywyOCwwLDg3LDEwMCw2LDAsMTE2LAorICAgIDIsMCwxMjQsMSwwLDYxLDg4LDEwMCw2LDAsODMsNDEsNywxMjIsMTg1LDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsNDYsCisgICAgMzIsMzIsNzMsMTAyLDMyLDk3LDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsCisgICAgMzIsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNiwKKyAgICAxMDEsOTksMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsCisgICAgMzIsOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMzIsCisgICAgMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDc5LDExNiwxMDQsMTAxLDExNCwxMTksMTA1LDExNSwxMDEsNDQsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsCisgICAgMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiw4NCwxMTQsCisgICAgMTE3LDEwMSwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsNDYsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDg0LDAsMCwwLDExNCwyOSwwLAorICAgIDAsMCw4NCwxMjIsMjMsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTAwLDEwMSwKKyAgICAxMTYsMTAxLDk5LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwzNywxMTQsNzAsNzgsNDEsMTIsCisgICAgMTE0LDg1LDAsMCwwLDExNCw5MSwwLDAsMCwxMTQsOTIsMCwwLDAsMTE0LAorICAgIDg2LDAsMCwwLDExNCw4OSwwLDAsMCwxMTQsODgsMCwwLDAsMTE0LDk2LAorICAgIDAsMCwwLDExNCw4MiwwLDAsMCwxMTQsODcsMCwwLDAsMjE4LDcsOTcsCisgICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTQsOTAsMCwwLDAsMjE4LDcsMTE0LDEwMSwxMDgsCisgICAgMTAxLDk3LDExNSwxMDEsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDk1LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICA5NywwLDAsMCwxOTIsMCwwLDAsMTE1LDMyLDAsMCwwLDAsNiwxMiwKKyAgICAxLDEwLDEsMywxLDMsMSwxMCwxLDMwLDEsOSwxLDE1LDEsNCwKKyAgICAxLDEyLDEsMTksMSwxOCwxLDI0LDIsMTMsMSwyMCwyLDEyMiwxOSw5NSwKKyAgICA3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTcsOTksMTEzLDExNywxMDUsCisgICAgMTE0LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMCwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTY1LDAsMCwwLDExNiwwLDAsMTA2LAorICAgIDEsMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLDE0MywxMzgsCisgICAgMCwxLDEyNCwwLDAsMTA2LDMsMCwxMjQsMSwwLDEwNywzLDAsMTE0LDUyLAorICAgIDAsMTE2LDQsMCwxMDAsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLAorICAgIDEyNCwwLDAsMTA2LDUsMCwxMDAsMiwwLDEwNyw0LDAsMTE1LDczLDAsMTE2LAorICAgIDYsMCwxMzAsMSwwLDEyNCwwLDAsNCwxMDYsNSwwLDEwMCwzLDAsNTYsCisgICAgMiw5NSw1LDAsMTI0LDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDIsMCwKKyAgICAxMTQsMTU1LDAsMTAwLDAsMCwxMjQsMCwwLDk1LDMsMCwxMjQsMCwwLDEwNiwKKyAgICA3LDAsMTE0LDE1NSwwLDEyNCwwLDAsNCwxMDYsNywwLDEwMCwzLDAsNTYsCisgICAgMiw5NSw3LDAsMTI0LDAsMCwxMDYsOCwwLDEwNiw5LDAsMTMxLDAsMCwKKyAgICAxLDExMywxNTUsMCwxMTAsMCwwLDg3LDEwMCwwLDAsODEsODgsMTAwLDAsMCwKKyAgICA4Myw0MSw0LDc4LDEyMiwzMSw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTE0LDEwMSwxMDgsCisgICAgMTAxLDk3LDExNSwxMDEsMzIsMTE3LDExMCw0NSw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwKKyAgICAzMiwxMDgsMTExLDk5LDEwNywxMTQsODQsMCwwLDAsMTE0LDI5LDAsMCwwLDQxLAorICAgIDEwLDExNCw4NSwwLDAsMCwxMTQsOTEsMCwwLDAsMTE0LDg2LDAsMCwwLAorICAgIDExNCw4OCwwLDAsMCwyMTgsMTIsODIsMTE3LDExMCwxMTYsMTA1LDEwOSwxMDEsNjksMTE0LAorICAgIDExNCwxMTEsMTE0LDExNCw4OSwwLDAsMCwyMTgsMTQsNjUsMTE1LDExNSwxMDEsMTE0LDExNiwKKyAgICAxMDUsMTExLDExMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDkwLDAsMCwwLDExNCw4NywwLAorICAgIDAsMCwxMTQsOTgsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDk1LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw5OCwwLDAsMCwyMTcsMCwwLDAsMTE1LDIyLDAsMCwwLAorICAgIDAsMSwxMiwxLDEwLDEsMTUsMSwxNSwxLDIxLDEsMTUsMSwxNSwxLAorICAgIDksMSw5LDEsMTUsMSwxMjIsMTksOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwKKyAgICAxMTEsOTksMTA3LDQ2LDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwxLDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDI1LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLAorICAgIDAsMTE2LDIsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDIsMCw4Myw0MSwyLAorICAgIDc4LDEyMiwyMyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDAsMTIzLAorICAgIDMzLDExNCwxMjUsNDEsMzIsOTcsMTE2LDMyLDEyMywxMjUsNDEsMywxMTQsNDcsMCwwLAorICAgIDAsMTE0LDY3LDAsMCwwLDExNCw0OCwwLDAsMCw0MSwxLDExNCw3MSwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwyMTgsOCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsMjMwLDAsMCwwLDExNSwKKyAgICAyLDAsMCwwLDAsMSwxMjIsMjAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwKKyAgICAxMTEsOTksMTA3LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MSw5LDExNCwKKyAgICA1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwKKyAgICAwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDk2LDAsMCwwLDExNCw5NywwLAorICAgIDAsMCwxMTQsOTgsMCwwLDAsMTE0LDEwMSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsODMsMCwwLDAsMTY2LDAsMCwwLDExNSwxMiwwLDAsMCwxMiw0LAorICAgIDYsMiwxMiw4LDEyLDEyLDEyLDI1LDEyLDEzLDExNCw4MywwLDAsMCw5OSwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDY0LDAsMCwwLDExNSw3MCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsCisgICAgMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLAorICAgIDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCisgICAgOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsCisgICAgOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsODMsNDEsCisgICAgMTEsMjE4LDE2LDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LAorICAgIDExMSw5OSwxMDcsMTIyLDg2LDY1LDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTAxLDMyLDk1LDc3LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywzMiwxMDEsMTEzLDExNywxMDUsMTE4LDk3LAorICAgIDEwOCwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLAorICAgIDk4LDExNywxMDUsMTA4LDEwMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDExMSwxMTcsMTE2LDEwLDMyLAorICAgIDMyLDMyLDMyLDEwOSwxMTcsMTA4LDExNiwxMDUsNDUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMDUsCisgICAgMTEwLDEwMywzMiwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsNDYsOTksMiwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMjIsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMSwKKyAgICAwLDEyNCwwLDAsOTUsMSwwLDEwMCwwLDAsODMsNDEsMiw3OCwxMTQsODQsCisgICAgMCwwLDAsNDEsMiwxMTQsNjcsMCwwLDAsMTE0LDg5LDAsMCwwLDQxLAorICAgIDIsMTE0LDcxLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzIsMCwwLDAsMjM4LAorICAgIDAsMCwwLDExNSw0LDAsMCwwLDAsMSw5LDEsMTIyLDI1LDk1LDY4LAorICAgIDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsCisgICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAxLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LDAsMCwKKyAgICAwLDEyNCwwLDAsNCwxMDYsMCwwLDEwMCwxLDAsNTUsMiw5NSwwLDAsCisgICAgMTAwLDIsMCw4Myw0MSwzLDc4LDExNCwyOSwwLDAsMCw4NCw0MSwxLDExNCwKKyAgICA4OSwwLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsOTcsMCwwLDAsMjQyLAorICAgIDAsMCwwLDExNSw0LDAsMCwwLDAsMSwxNSwxLDEyMiwyNCw5NSw2OCwKKyAgICAxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk3LAorICAgIDk5LDExMywxMTcsMTA1LDExNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsCisgICAgMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNDksMCwwLDAsCisgICAgMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMzAsMCwxMTYsCisgICAgMSwwLDEwMCwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDAsCisgICAgMCw0LDEwNiwwLDAsMTAwLDMsMCw1NiwyLDk1LDAsMCwxMDAsMCwwLAorICAgIDgzLDQxLDQsNzgsMTE0LDg0LDAsMCwwLDEyMiwzMSw5OSw5NywxMTAsMTEwLDExMSwKKyAgICAxMTYsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE3LDExMCw0NSw5Nyw5OSwxMTMsCisgICAgMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiwxMDgsMTExLDk5LDEwNywxMTQsMjksMCwwLDAsNDEsCisgICAgMiwxMTQsODksMCwwLDAsMTE0LDk5LDAsMCwwLDQxLDEsMTE0LDcxLDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCw5OCwwLDAsMCwyNDYsMCwwLDAsMTE1LDYsMCwwLDAsMCwKKyAgICAxLDE1LDEsMTUsMSwxMjIsMjQsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwyNSwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LAorICAgIDAsMCwxMDYsMSwwLDExNiwyLDAsMTI0LDAsMCwxMzEsMSwwLDEzMSwyLAorICAgIDAsODMsNDEsMiw3OCwxMjIsMjgsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0MCwxMjMsMzMsMTE0LDEyNSw0MSwzMiw5NywxMTYsCisgICAgMzIsMTIzLDEyNSw0MSwzLDExNCw0NywwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LAorICAgIDQ4LDAsMCwwLDQxLDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMDEsMCwwLDAsMjUxLAorICAgIDAsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjUsOTUsNjgsMTE3LDEwOSwKKyAgICAxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMTQsCisgICAgMTAxLDExMiwxMTQsOTUsOTUsNzgsNDEsOCwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsCisgICAgMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDcyLDAsMCwKKyAgICAwLDExNCw5NywwLDAsMCwxMTQsOTgsMCwwLDAsMTE0LDEwMSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsMTAyLDAsMCwwLDIzNCwwLDAsMCwxMTUsMTAsMCwKKyAgICAwLDAsMTIsMiw2LDIsMTIsNCwxMiw0LDEyLDUsMTE0LDEwMiwwLDAsCisgICAgMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsCisgICAgMCwwLDY0LDAsMCwwLDExNSw1MiwwLDAsMCwxMDEsMCwwLDkwLDEsCisgICAgMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCwKKyAgICA5MCwzLDAsMTAwLDMsMCwxMDAsNCwwLDEzMiwwLDAsOTAsNCwwLDEwMCwKKyAgICA1LDAsMTAwLDYsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNywwLDgzLDQxLAorICAgIDgsMjE4LDE4LDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw3Nyw5NywKKyAgICAxMTAsOTcsMTAzLDEwMSwxMTQsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsMTI0LAorICAgIDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMCwwLDEyNCwwLDAsOTUsMSwKKyAgICAwLDEwMCwwLDAsODMsNDEsMSw3OCw0MSwyLDExNCw3MCwwLDAsMCwyMTgsCisgICAgNSw5NSwxMDgsMTExLDk5LDEwNyw0MSwyLDExNCw3MSwwLDAsMCwxMTQsNjcsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDcyLDAsMCwwLDEsMSwwLDAsMTE1LDQsMCwwLDAsMCwKKyAgICAxLDksMSwxMjIsMjcsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LAorICAgIDc3LDk3LDExMCw5NywxMDMsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsCisgICAgOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMTAsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDUzLDAsMCwwLDEyMiwyMiwwLDExNiwwLDAsCisgICAgMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwyLDAsODcsCisgICAgMTAwLDAsMCwxMTYsMywwLDEwNiw0LDAsMTMxLDAsMCwxLDg4LDEyNCwwLAorICAgIDAsMTA2LDIsMCwxMDYsNSwwLDEzMSwwLDAsMSwxMDAsMCwwLDgzLDQxLAorICAgIDEsNzgsNDEsNiwyMTgsMTYsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE0LDcwLDAsMCwwLDExNCwxMDQsMCwwLDAsCisgICAgMjE4LDQsOTUsMTA1LDEwOSwxMTIsMjE4LDEyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LAorICAgIDEwOCwxMTEsOTksMTA3LDExNCw5NywwLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgNzUsMCwwLDAsNSwxLDAsMCwxMTUsOCwwLDAsMCwwLDEsMywKKyAgICAxLDIyLDIsMTEsMSwxMjIsMjgsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCisgICAgOTksMTA3LDc3LDk3LDExMCw5NywxMDMsMTAxLDExNCw0Niw5NSw5NSwxMDEsMTEwLDExNiwxMDEsCisgICAgMTE0LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAorICAgIDEsMCwwLDAsNzksMCwwLDAsMTE1LDE3LDAsMCwwLDEyNCwwLDAsCisgICAgMTA2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMSwxMDAsMCwwLDgzLDQxLDEsCisgICAgNzgsNDEsMiwxMTQsMTA0LDAsMCwwLDExNCw5OCwwLDAsMCw0MSwzLDExNCwKKyAgICA3MSwwLDAsMCwxMTQsODAsMCwwLDAsMjE4LDYsMTA3LDExOSw5NywxMTQsMTAzLAorICAgIDExNSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsODEsMCwwLDAsMTIsMSwwLDAsMTE1LDIsMCwwLDAsMCwxLAorICAgIDEyMiwyNyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNzcsOTcsMTEwLAorICAgIDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSw3OCw0MSw2LAorICAgIDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwKKyAgICA3MiwwLDAsMCwxMTQsNzUsMCwwLDAsMTE0LDgxLDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCwxMDMsMCwwLDAsMjU1LDAsMCwwLDExNSw2LDAsMCwwLAorICAgIDEyLDIsMTIsNCwxMiw3LDExNCwxMDMsMCwwLDAsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDMsMCwwLDAsMTEsMCwwLDAsMywwLDAsMCwKKyAgICAxMTUsMTQyLDAsMCwwLDEwMCwxLDAsMTI1LDEsMCwxMjEsMTcsMCwxMTYsMCwKKyAgICAwLDEzNiwwLDAsMjUsMTMxLDAsMCwxMjUsMSwwLDg3LDExMCwxOCwwLDQsCisgICAgMTE2LDEsMCwxMDcsMTAsMCwxMTQsNDMsMCwxLDEsMSw4OSwxMTAsMSwwLAorICAgIDg4LDEyNCwxLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxMzgsMCwxMTYsMiwwLAorICAgIDEwMCwxLDAsMTA3LDgsMCwxMTQsODMsMCwxMTYsMywwLDEzNiwwLDAsMTMxLAorICAgIDEsMCwxMjUsMSwwLDExMCwxMiwwLDExNiw0LDAsMTM2LDAsMCwxMzEsMSwKKyAgICAwLDEyNSwxLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwyLDAsMTAwLDMsMCwKKyAgICAxMzQsMCwwLDEyNSwyLDAsMTE2LDUsMCwxMDYsNiwwLDEyNCwxLDAsMTI0LAorICAgIDIsMCwxMzEsMiwwLDExNiwwLDAsMTM2LDAsMCw2MCwxMTAsMCwwLDEyNCwKKyAgICAxLDAsODMsNDEsNCwxMjIsMTA5LDcxLDEwMSwxMTYsMzIsMTExLDExNCwzMiw5OSwxMTQsCisgICAgMTAxLDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCisgICAgMTA4LDExMSw5OSwxMDcsMzIsMTAyLDExMSwxMTQsMzIsOTcsMzIsMTAzLDEwNSwxMTgsMTAxLDExMCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiw4MywxMDQsMTExLDExNywxMDgsMTAwLDMyLDExMSwxMTAsMTA4LDEyMSwzMiw5OCwKKyAgICAxMDEsMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTYsOTcsCisgICAgMTA3LDEwMSwxMTAsNDYsNzgsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKKyAgICAwLDAsMiwwLDAsMCwxOSwwLDAsMCwxMTUsMTEsMCwwLDAsMTE2LAorICAgIDAsMCwxMzYsMCwwLDYxLDEwMCwwLDAsODMsNDEsMSw3OCw0MSwxLDIxOCwKKyAgICAxMyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTUsNDEsMSwKKyAgICAxMTQsMzYsMCwwLDAsNDEsMSwxMTQsNjcsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDIsOTksOTgsMzIsMSwwLDAsMTE1LDIsCisgICAgMCwwLDAsMCwxLDEyMiwyOCw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsCiAgICAgMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNyw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsCi0gICAgNDYsOTksOTgsNzgsNDAsOCwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsCi0gICAgMTEwLDEwMSwxMTcsMTMsMCwwLDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LAotICAgIDExMSw5OSwxMDcsMTE1LDExNyw4LDAsMCwwLDc1LDEwMSwxMjEsNjksMTE0LDExNCwxMTEsCi0gICAgMTE0LDExNyw3LDAsMCwwLDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTE3LDE2LDAsCi0gICAgMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKLSAgICA5OSwxMDcsMTE3LDExLDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAotICAgIDk5LDEwNywxMTcsOCwwLDAsMCw5NSwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiwxMTcsCi0gICAgMywwLDAsMCwxMTQsMTAxLDEwMiw0MCwzLDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDExNywyLAotICAgIDAsMCwwLDk5LDk4LDQwLDAsMCwwLDAsNDAsMSwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LAotICAgIDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDEwLAotICAgIDEsMCwwLDExNSwyNCwwLDAsMCwwLDQsNiwxLDMsMSwxNywxLAotICAgIDEzLDEsNSwxLDEyLDEsMTIsMSwxNSwyLDEyLDEsMTgsMiwyNSwxLAotICAgIDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSwxMDgsMTExLDk5LDEwNyw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLAotICAgIDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsNzEsMCwwLDAsMTE2LAotICAgIDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDEsMCwxMTYsMSwwLDEwNiwyLAotICAgIDAsMTMxLDAsMCwxLDEyMSwxNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsMCwKLSAgICAwLDEsODcsMTEwLDE4LDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCw1NiwwLAotICAgIDEsMSwxLDg5LDExMCwxMSwwLDg4LDEyNCwxLDAsMTA2LDUsMCwxMzEsMCwKLSAgICAwLDEsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyMSwxLDAsMCwKLSAgICA4MiwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMDgsMTExLDk4LAotICAgIDk3LDEwOCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0NCwzMiwKLSAgICA5NywxMTAsMTAwLDMyLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLAotICAgIDExMCwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwKLSAgICAzMiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDIsMTExLAotICAgIDExNCwzMiw5NywzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDExMCw5NywxMDksMTAxLDQ2LDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLAotICAgIDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDExMCwxMTUsMTE3LDExNCwKLSAgICAxMDEsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5OSwxMTEsCi0gICAgMTA5LDExMiwxMDgsMTAxLDExNiwxMDEsMTA4LDEyMSwzMiwxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwKLSAgICAxMDUsMTIyLDEwMSwxMDAsNDQsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDEsMTE4LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTYsMzIsMTA1LDExNSwzMiw5OCwxMDEsMTA1LAotICAgIDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTcsCi0gICAgMTEwLDExMSwxMTYsMTA0LDEwMSwxMTQsMzIsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw4MywxMDQsMTExLDExNywxMDgsMTAwLDMyLDExMSwxMTAsMTA4LDEyMSwzMiwKLSAgICA5OCwxMDEsMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTYsCi0gICAgOTcsMTA3LDEwMSwxMTAsNDYsNzgsNDAsNiwwLDAsMCwxMTcsMTYsMCwwLDAsCi0gICAgOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsCi0gICAgMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLDAsMCwwLDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNyw3LDAsMCwwLDk3LAotICAgIDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE3LDE0LDAsMCwwLDk1LDY4LDEwMSw5NywxMDAsCi0gICAgMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDExNyw3LDAsMCwwLDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTksMCwwLDAsOTUsMTA4LDExMSwKLSAgICA5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAyOSwxLDAsMCwxMTUsMTQsMCwwLDAsMCw3LDEyLDEsMTAsMSwzLAotICAgIDEsMTQsMSwxMywzLDUsMiwxMTcsMTksMCwwLDAsOTUsMTA4LDExMSw5OSwKLSAgICAxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLAotICAgIDc5LDAsMCwwLDExNSwxMywwLDAsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LAotICAgIDIsMCwxNDIsMCwwLDgzLDQwLDEsMCwwLDAsMTE3LDQ2LDEsMCwwLAotICAgIDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDQ2LDk5LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsMzIsCi0gICAgMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMzIsMTE1LDEwMSwxMTMsMTE3LDEwMSwxMTAsOTksMTAxLDExNSwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsMzIsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDEsMTEwLAotICAgIDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsOTcsMzIsOTksOTcsMTA4LDEwOCwzMiwxMTYsMTExLAotICAgIDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDUsMTE2LDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsCi0gICAgOTcsMTAwLDMyLDExMSwxMDIsMzIsOTcsMzIsMTEwLDExMSwxMTQsMTA5LDk3LDEwOCwzMiw5OSwKLSAgICA5NywxMDgsMTA4LDMyLDEwNSwxMTAsMzIsMTEyLDEwOCw5Nyw5OSwxMDEsMTE1LDMyLDExOSwxMDQsCi0gICAgMTAxLDExNCwxMDEsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDEwLDMyLDMyLDMyLDMyLAotICAgIDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwxMTYsMTE0LDExMSwxMDAsMTE3LDk5LDEwMSwKLSAgICAxMTUsMzIsMTE3LDExMCwxMTksOTcsMTEwLDExNiwxMDEsMTAwLDMyLDExMCwxMTEsMTA1LDExNSwxMDEsCi0gICAgMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDExNiwxMTQsOTcsOTksMTAxLDk4LAotICAgIDk3LDk5LDEwNywzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMDEsCi0gICAgMTIwLDEwMSw5OSwxMTcsMTE2LDEwNSwxMTAsMTAzLDEwLDMyLDMyLDMyLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQxLDEwLDMyLDMyLDMyLDMyLDQwLDAsCi0gICAgMCwwLDAsNDAsMywwLDAsMCwxMTcsMSwwLDAsMCwxMDIsMTE3LDQsCi0gICAgMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LDQsMCwwLDAsMTA3LDExOSwxMDAsMTE1LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI1LDAsMCwKLSAgICAwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LAotICAgIDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDQ5LDEsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsOCwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwKLSAgICAxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsCi0gICAgMTE4LDEwMSwxMDAsMTA1LDE1OCwxMiwwLDAsMTE3LDEsMCwwLDAsMTMsMTA1LDE2LAotICAgIDAsMCwwLDExNywxLDAsMCwwLDEwLDEwNSwyNCwwLDAsMCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDk5LAotICAgIDAsMCwwLDExNSwyOSwwLDAsMCwxMjQsMCwwLDkzLDE5LDAsMTI1LDEsCi0gICAgMCwxMTYsMCwwLDEyNCwxLDAsNjMsMTAwLDAsMCw2NCw4NiwxLDExMywzLAotICAgIDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDEwNSwyNTUsMCwwLDAsNzgsCi0gICAgNDAsMSwwLDAsMCwxMTcsMTcsMCwwLDAsOTUsODIsNjUsODcsOTUsNzcsCi0gICAgNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsNDAsMiwwLDAsMCwKLSAgICAxMTcsMiwwLDAsMCw0Niw0OCwxMTcsMSwwLDAsMCwxMTAsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsCi0gICAgMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTUwLDEsMCwwLDExNSwyLDAsMCwwLAotICAgIDYsMCwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsCi0gICAgMTA1LDAsMCwwLDAsMTA1LDI1LDAsMCwwLDEwNSw4LDAsMCwwLDExNywKLSAgICAxMSwwLDAsMCw5NSw5NSwxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsOTUsOTUsMTE3LAotICAgIDMsMCwwLDAsNDYsMTEyLDEyMSwxMTcsNCwwLDAsMCw0NiwxMTIsMTIxLDk5LAotICAgIDExNyw0LDAsMCwwLDQ2LDExMiwxMjEsMTExLDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwxMSwwLDAsMCw2LDAsMCwwLDY3LDAsMCwwLDExNSwxODAsCi0gICAgMCwwLDAsMTI0LDEsMCwxMDAsNSwwLDEwNyw4LDAsMTE0LDI1LDAsMTE2LAotICAgIDEsMCwxMDYsMiwwLDEwNiwzLDAsMTIsMTEwLDMsMCwxMjQsMSwwLDEyNSwKLSAgICAyLDAsMTI0LDIsMCwxMTQsNDYsMCwxMTYsNCwwLDEyNSwzLDAsMTEwLDYsCi0gICAgMCwxMTYsNSwwLDEyNSwzLDAsMTE2LDYsMCwxMjQsMCwwLDEzMSwxLDAsCi0gICAgOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw3LDAsMTAwLAotICAgIDEsMCwxMzEsMSwwLDkyLDMsMCwxMjUsNiwwLDEyNSw3LDAsMTI1LDgsCi0gICAgMCwxMTYsMSwwLDEwNiw4LDAsMTA2LDksMCwxMjUsOSwwLDEyNCw5LDAsCi0gICAgMTAwLDUsMCwxMDcsOCwwLDExNCwxMzMsMCwxMTYsMTAsMCwxMDAsMiwwLDEzMSwKLSAgICAxLDAsMTMwLDEsMCwxMTAsMCwwLDEwMCwzLDAsMTA2LDExLDAsMTI0LDYsCi0gICAgMCwxMjQsNywwLDEyNCw5LDAsMTI0LDMsMCwxMDAsNCwwLDI1LDEwMyw0LAotICAgIDAsMTMxLDEsMCwxMjUsMTAsMCwxMTYsMTIsMCwxMjQsNCwwLDExNiwxMywwLAotICAgIDEyNCwxMCwwLDEzMSwzLDAsODMsNDAsNiwwLDAsMCwxMTcsMjQ0LDEsMCwKLSAgICAwLDcxLDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwKLSAgICAxMTYsMTExLDMyLDk3LDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ0LDMyLDExNCwKLSAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwKLSAgICAxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw0NiwKLSAgICAxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTEwLDExMSwxMTYsCi0gICAgMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiw1OSwzMiwKLSAgICAxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsMzIsMTE0LDEwMSwxMTYsMTE3LAotICAgIDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsCi0gICAgMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLAotICAgIDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwKLSAgICAxMDAsMzIsOTcsMTE1LDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTE5LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMDAsNDYsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTExLDExMCwxMCwzMiwzMiwzMiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDQ2LAotICAgIDExMiwxMjEsOTksMzIsMTE3LDExMCwxMDgsMTAxLDExNSwxMTUsMzIsMTE1LDEyMSwxMTUsNDYsMTAyLAotICAgIDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiwxMTAsMTExLDExMCw0NSwxMjIsMTAxLDExNCwxMTEsNDQsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLAotICAgIDEwNSwxMTYsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiw0NiwxMTIsMTIxLDExMSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTAwLDEwMSw5OCwxMTcsMTAzLDk1LDExMSwKLSAgICAxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw3OCwKLSAgICAxMTEsMTEwLDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTA1LDExNiwzMiwxMDksMTE3LDExNSwKLSAgICAxMTYsMzIsOTgsMTAxLDMyLDk3LDMyLDk4LDExMSwxMTEsMTA4LDEwMSw5NywxMTAsMzIsOTcsCi0gICAgMTEwLDEwMCwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDExMiwxMDgsOTcsOTksMTAxLDMyLDExMSwxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTAyLAotICAgIDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LAotICAgIDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMTAsCi0gICAgMzIsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMTcsMSwwLDAsMCw0NiwxMTcsMzYsMCwwLDAsCi0gICAgMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwKLSAgICAxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLAotICAgIDc4LDExMSwxMTAsMTAxLDExNywwLDAsMCwwLDEwNSwwLDAsMCwwLDc4LDQwLAotICAgIDE0LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsCi0gICAgMCwwLDExNSwxMjEsMTE1LDExNyw1LDAsMCwwLDEwMiwxMDgsOTcsMTAzLDExNSwxMTcsCi0gICAgOCwwLDAsMCwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDExNywyMywwLDAsCi0gICAgMCw2OCw2OSw2Niw4NSw3MSw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSwKLSAgICA4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsMjcsMCwwLDAsNzksODAsODQsCi0gICAgNzMsNzcsNzMsOTAsNjksNjgsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsCi0gICAgODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LDExLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDksMCwwLDAsMTEyLDk3LDExNCwKLSAgICAxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMTQsMCwwLDAsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDExNyw5LDAsMCwwLDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywKLSAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywKLSAgICA0LDAsMCwwLDEwNiwxMTEsMTA1LDExMCwxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDExNyw4LDAsMCwwLDk1LDgwLDg5LDY3LAotICAgIDY1LDY3LDcyLDY5LDQwLDExLDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNywxNCwwLDAsMCwxMDAsMTAxLDk4LDExNywxMDMsOTUsMTExLDExOCwxMDEsCi0gICAgMTE0LDExNCwxMDUsMTAwLDEwMSwxMTcsNSwwLDAsMCwxMDAsMTAxLDk4LDExNywxMDMsMTE3LAotICAgIDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsNCwwLDAsCi0gICAgMCwxMDQsMTAxLDk3LDEwMCwxMTcsNCwwLDAsMCwxMTYsOTcsMTA1LDEwOCwxMTcsMTMsCi0gICAgMCwwLDAsOTgsOTcsMTE1LDEwMSw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTIsMTE3LDEsMCwwLDAsOTUsMTE3LDMsCi0gICAgMCwwLDAsMTE2LDk3LDEwMywxMTcsOCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsMTEwLAotICAgIDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwxNTksMSwwLDAsMTE1LDIyLDAsMCwwLDAsMTMsCi0gICAgMzEsMSw2LDEsOSwyLDYsMSwxOCwxLDI0LDEsMTIsMSwxMiwxLAotICAgIDE1LDEsMzEsMSwxMTcsMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsCi0gICAgMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwxLDAsMCwwLDAsCi0gICAgMCwwLDAsNSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICAxOTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTAwLDcsMCwKLSAgICAxMDcsOCwwLDExNCwzMywwLDExNiw0LDAsMTAwLDEsMCwxMzEsMSwwLDEzMCwKLSAgICAxLDAsMTEwLDAsMCwxMTYsNSwwLDEyNCwwLDAsMTMxLDEsMCw5MiwyLAotICAgIDAsMTI1LDEsMCwxMjUsMiwwLDExNiw1LDAsMTI0LDEsMCwxMzEsMSwwLAotICAgIDkyLDIsMCwxMjUsMSwwLDEyNSwzLDAsMTI0LDMsMCwxMTYsNiwwLDEwNywKLSAgICAzLDAsMTE0LDEwOCwwLDExNiw3LDAsMTAwLDIsMCwxMDYsOCwwLDExNiw2LAotICAgIDAsMTI0LDAsMCwxMzEsMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLAotICAgIDEyNCwyLDAsMTA2LDksMCwxMDAsMywwLDEzMSwxLDAsMTAwLDQsMCwxMDcsCi0gICAgMywwLDExNCwxNTMsMCwxMTYsNywwLDEwMCw1LDAsMTA2LDgsMCwxMjQsMiwKLSAgICAwLDEzMSwxLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDIsMCwKLSAgICAxMDYsMTAsMCwxMDAsMywwLDEzMSwxLDAsMTAwLDYsMCwyNSwxMjUsNCwwLAotICAgIDExNiwxMSwwLDEyNCwxLDAsMTI0LDQsMCwxMTYsMTIsMCwxMDAsNiwwLDI1LAotICAgIDIzLDEzMSwyLDAsODMsNDAsOCwwLDAsMCwxMTcsMTIxLDEsMCwwLDcxLAotICAgIDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLAotICAgIDMyLDk3LDMyLDQ2LDExMiwxMjEsOTksNDYsNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDQ0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiwKLSAgICA5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSwzMiwxMDIsCi0gICAgMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw0NiwxMTIsCi0gICAgMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwKLSAgICAxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwKLSAgICAxMDUsMTE1LDExNiw1OSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsCi0gICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsCi0gICAgMTA0LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwKLSAgICAzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwxMDAsCi0gICAgMzIsMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsMTE1LDExMiwxMTEsMTEwLDEwMCwzMiwxMTYsCi0gICAgMTExLDMyLDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDQ2LDMyLDMyLDczLDEwMiwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDAsCi0gICAgMTExLDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTEwLDExMSwxMTYsMzIsOTksMTExLDExMCwxMDIsCi0gICAgMTExLDExNCwxMDksMzIsMTE2LDExMSwzMiw4MCw2OSw4MCwzMiw1MSw0OSw1Miw1NSwzMiwKLSAgICAxMDIsMTExLDExNCwxMDksOTcsMTE2LDQ0LDMyLDg2LDk3LDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDExNCw5NywxMDUsMTE1LDEwMSwKLSAgICAxMDAsNDYsMzIsNzMsMTAyLDEwLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksCi0gICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwKLSAgICAxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwxMTAsMzIsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAotICAgIDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLAotICAgIDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTcsMzYsMCwwLDAsMTE1LDEyMSwxMTUsCi0gICAgNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LAotICAgIDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsCi0gICAgMTAxLDExNywzNywwLDAsMCwxMjMsMTI1LDMyLDExMCwxMTEsMTE2LDMyLDk4LDExMSwxMTYsCi0gICAgMTE2LDExMSwxMDksNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LAotICAgIDExMSwxMTQsMTIxLDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTE3LDEsMCwwLDAsCi0gICAgNDYsMTA1LDIsMCwwLDAsMTE3LDI4LDAsMCwwLDEwMSwxMjAsMTEyLDEwMSw5OSwKLSAgICAxMTYsMTAxLDEwMCwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsNTAsMzIsMTAwLDExMSwxMTYsMTE1LDMyLAotICAgIDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTA1LDAsMCwwLDAsNzgsNDAsMTMsMCwKLSAgICAwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDE0LDAsMCwwLDEwNSwKLSAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwxMTcsOSwwLAotICAgIDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMTE3LDQsMCwwLDAsCi0gICAgNzgsMTExLDExMCwxMDEsMTE3LDE5LDAsMCwwLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsCi0gICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsMCwwLAotICAgIDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsOCwwLDAsCi0gICAgMCw5NSw4MCw4OSw2Nyw2NSw2Nyw3Miw2OSwxMTcsMTAsMCwwLDAsODYsOTcsCi0gICAgMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LAotICAgIDEwOSw5NywxMTYsMTE3LDUsMCwwLDAsOTksMTExLDExNywxMTAsMTE2LDExNyw5LDAsCi0gICAgMCwwLDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDEwLDAsMCwwLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCwxMTcsMTUsMCwwLDAsODMsCi0gICAgNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsNDAsNSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsCi0gICAgMCwxMDQsMTAxLDk3LDEwMCwxMTcsMTYsMCwwLDAsMTEyLDEyMSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMTIsCi0gICAgMTIxLDk5LDk3LDk5LDEwNCwxMDEsMTE3LDEzLDAsMCwwLDk4LDk3LDExNSwxMDEsOTUsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDE3LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsCi0gICAgMTAyLDExNCwxMTEsMTA5LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTg2LDEsMCwwLDExNSwyNCwKLSAgICAwLDAsMCwwLDksMTgsMSwxNSwxLDE4LDEsMTgsMSwxMiwxLDksCi0gICAgMSwxOCwxLDIxLDEsOSwxLDE1LDEsMTksMSwxMTcsMTcsMCwwLDAsCi0gICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsOTksOTcsOTksMTA0LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwxMywwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTY0LDAsMCwwLDExNiwwLDAsMTI0LDAsCi0gICAgMCwxMzEsMSwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjIsMCwxMDAsNiwwLAotICAgIDgzLDEyNCwwLDAsMTA2LDIsMCwxMDAsMiwwLDEzMSwxLDAsOTIsMywwLAotICAgIDEyNSwxLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwxLDAsMTIsMTE1LDgxLDAsCi0gICAgMTI0LDMsMCwxMDYsMywwLDEzMSwwLDAsMTAwLDcsMCwxMDAsOCwwLDEzMywKLSAgICAyLDAsMjUsMTAwLDUsMCwxMDcsMywwLDExNCw4NSwwLDEyNCwwLDAsODMsCi0gICAgMTIxLDE2LDAsMTE2LDQsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDQsMCw4NywKLSAgICAxMTAsNDAsMCw0LDExNiw1LDAsMTE2LDYsMCwxMDIsMiwwLDEwNywxMCwwLAotICAgIDExNCwxNDMsMCwxLDEsMSwxMjQsMCwwLDEwMCw2LDAsMTAwLDksMCwxMzMsCi0gICAgMiwwLDI1LDEyNSw0LDAsODksMTEwLDEsMCw4OCwxMTYsNywwLDEyNCw0LAotICAgIDAsMTMxLDEsMCwxMTQsMTYwLDAsMTI0LDQsMCw4MywxMjQsMCwwLDgzLDQwLAotICAgIDEwLDAsMCwwLDExNywxODgsMCwwLDAsNjcsMTExLDExMCwxMTgsMTAxLDExNCwxMTYsCi0gICAgMzIsOTcsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLAotICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsOTcsMzIsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw0MCwxMDUsMTAyLDMyLDExMiwxMTEsMTE1LDExNSwxMDUsCi0gICAgOTgsMTA4LDEwMSw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwKLSAgICAxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwxMTUsMzIsCi0gICAgMTEyLDExNywxMTQsMTAxLDEwOCwxMjEsMzIsMTAyLDExMSwxMTQsMzIsOTgsOTcsOTksMTA3LDExOSwKLSAgICA5NywxMTQsMTAwLDExNSw0NSw5OSwxMTEsMTA5LDExMiw5NywxMTYsMTA1LDk4LDEwNSwxMDgsMTA1LAotICAgIDExNiwxMjEsMzIsMTAyLDExMSwxMTQsMTAsMzIsMzIsMzIsMzIsODAsMTIxLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsOTUsNjksMTIwLDEwMSw5OSw2NywxMTEsMTAwLDEwMSw3NywxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDg3LDEwNSwxMTYsMTA0LDcwLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNSw0MCwKLSAgICA0MSwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDY3LDMyLDY1LDgwLDczLDQ2LDEwLAotICAgIDEwLDMyLDMyLDMyLDMyLDEwNSwwLDAsMCwwLDExNywxLDAsMCwwLDQ2LAotICAgIDEwNSwzLDAsMCwwLDEwNSwxLDAsMCwwLDExNywyLDAsMCwwLDExMiwKLSAgICAxMjEsNzgsMTA1LDI1MywyNTUsMjU1LDI1NSwxMDUsMjU1LDI1NSwyNTUsMjU1LDEwNSwyNTUsMjU1LDI1NSwKLSAgICAyNTUsNDAsOCwwLDAsMCwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwxMTcsNCwKLSAgICAwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsCi0gICAgMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDUsMCwwLDAsMTA4LDExMSwxMTksMTAxLDExNCwKLSAgICAxMTcsMTcsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksCi0gICAgOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywxMDksCi0gICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMCwKLSAgICAwLDAsMCw4Niw5NywxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEyLDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDQwLDUsCi0gICAgMCwwLDAsMTE3LDEzLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDExNCwxMDEsMTE1LDExNiwxMTcsMSwKLSAgICAwLDAsMCw5NSwxMTcsOSwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTExLDExMCwxMTcsMTEsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNSwKLSAgICAwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwMiwxMDUsCi0gICAgMTA4LDEwMSwyMDksMSwwLDAsMTE1LDIwLDAsMCwwLDAsNywxOCwxLDQsCi0gICAgMSwyNCwxLDM1LDEsNCwxLDMsMSwxNiwxLDE5LDEsMjEsMSwxMTcsCi0gICAgMTUsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsMTE3LDksMCwwLDAsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDUsMTE2LAotICAgIDEyMSwxMDUsMSwwLDAsMCw5OSwxLDAsMCwwLDEsMCwwLDAsMywKLSAgICAwLDAsMCw0LDAsMCwwLDcxLDAsMCwwLDExNSw4MSwwLDAsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMjQsMSwwLDEwNyw1LDAsMTE0LAotICAgIDc3LDAsMTI0LDAsMCwxMDYsMywwLDEwMCw2LDAsMTMxLDEsMCwxMTUsNDYsCi0gICAgMCwxMDAsMywwLDEyNCwwLDAsMjMsMTI1LDAsMCwxMTAsMCwwLDExNiw0LAotICAgIDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwyLDAsMTQwLDAsMCwxMDAsNCwwLAotICAgIDExNiwwLDAsMTA2LDYsMCwxMzEsMSwxLDEsMTEwLDAsMCwxMDAsNSwwLAotICAgIDgzLDQwLDcsMCwwLDAsMTE3LDYxLDAsMCwwLDgwLDExNCwxMDUsMTEwLDExNiwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwzMiwxMTYsMTExLDMyLAotICAgIDExNSwxMTYsMTAwLDEwMSwxMTQsMTE0LDMyLDEwNSwxMDIsMzIsNDUsMTE4LDQ3LDgwLDg5LDg0LAotICAgIDcyLDc5LDc4LDg2LDY5LDgyLDY2LDc5LDgzLDY5LDMyLDEwNSwxMTUsMzIsMTE2LDExNywKLSAgICAxMTQsMTEwLDEwMSwxMDAsMzIsMTExLDExMCw0NiwxMTcsMSwwLDAsMCwzNSwxMTcsNywKLSAgICAwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMTcsMiwwLDAsMCwzNSwKLSAgICAzMiwxMTcsNCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsNzgsNDAsMiwwLDAsMCwKLSAgICAxMTcsMSwwLDAsMCwzNSwxMTcsNywwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiw0MCw3LDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywKLSAgICA1LDAsMCwwLDEwMiwxMDgsOTcsMTAzLDExNSwxMTcsNywwLDAsMCwxMTgsMTAxLAotICAgIDExNCw5OCwxMTEsMTE1LDEwMSwxMTcsMTAsMCwwLDAsMTE1LDExNiw5NywxMTQsMTE2LDExNSwKLSAgICAxMTksMTA1LDExNiwxMDQsMTE3LDUsMCwwLDAsMTEyLDExNCwxMDUsMTEwLDExNiwxMTcsNiwKLSAgICAwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNyw2LDAsMCwwLDExNSwxMTYsCi0gICAgMTAwLDEwMSwxMTQsMTE0LDQwLDMsMCwwLDAsMTE3LDcsMCwwLDAsMTA5LDEwMSwKLSAgICAxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDksMCwwLDAsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwKLSAgICAxMDUsMTE2LDEyMSwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLAotICAgIDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwyMjgsMSwwLAotICAgIDAsMTE1LDgsMCwwLDAsMCwyLDE4LDEsMTUsMSwxMywxLDExNywxNiwKLSAgICAwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsCi0gICAgOTcsMTAzLDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKLSAgICAzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsCi0gICAgMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwKLSAgICAwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLAotICAgIDQwLDMsMCwwLDAsMTE3LDM5LDAsMCwwLDgzLDEwMSwxMTYsMzIsOTUsOTUsCi0gICAgMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA0Niw5OSwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw0LDAsCi0gICAgMCwwLDMxLDAsMCwwLDExNSwxMDEsMCwwLDAsMTM2LDAsMCwxMjQsMCwKLSAgICAwLDEyNCwxLDAsMTQyLDAsMCwxMjUsMiwwLDExNiwwLDAsMTI0LDIsMCwKLSAgICAxMDAsMSwwLDEwMCwwLDAsMTMxLDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LAotICAgIDk3LDAsMTI0LDIsMCwxMDYsMiwwLDEyNCwyLDAsOTUsMywwLDExNiw0LAotICAgIDAsMTI0LDIsMCwxMDAsMiwwLDEzMSwyLDAsMTE1LDk3LDAsMTI0LDIsMCwKLSAgICAxMDYsMywwLDEwNiw1LDAsMTAwLDMsMCwxMzEsMSwwLDEwMCw0LDAsMjUsCi0gICAgMTI0LDIsMCw5NSwzLDAsMTEzLDk3LDAsMTEwLDAsMCwxMjQsMiwwLDgzLAotICAgIDQwLDUsMCwwLDAsNzgsMTE3LDExLDAsMCwwLDk1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSw5NSwxMTcsMSwwLDAsMCw0NiwxMDUsMCwwLDAsMCw0MCw2LAotICAgIDAsMCwwLDExNyw3LDAsMCwwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNywKLSAgICA0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw4LDAsMCwwLDk1LDk1LDExMCwKLSAgICA5NywxMDksMTAxLDk1LDk1LDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksMTA3LAotICAgIDk3LDEwMywxMDEsOTUsOTUsMTE3LDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LAotICAgIDExNCwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsCi0gICAgNDAsMywwLDAsMCwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNiwKLSAgICAwLDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDExNyw2LDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwKLSAgICAxMTAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE5LDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwKLSAgICAyMzgsMSwwLDAsMTE1LDEyLDAsMCwwLDAsMSwxNSwxLDI0LDEsMTIsCi0gICAgMSwxNSwxLDMxLDEsMTE3LDQwLDAsMCwwLDExNSwxMDEsMTE2LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTE1LAotICAgIDEwMSwxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwKLSAgICAxMDEsMTE0LDQwLDEsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMTksCi0gICAgMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDExOSwKLSAgICAxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMSwwLDAsMCwKLSAgICAxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDExNSwKLSAgICAxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwyMzYsMSwwLDAsMTE1LDYsCi0gICAgMCwwLDAsMCwyLDE4LDcsMTMsMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwKLSAgICAxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDEsMCwwLDAsMCwwLAotICAgIDAsMCwyLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwxMTUsMzUsCi0gICAgMCwwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsCi0gICAgMCwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwwLDEzNiwwLDAsMTMxLDIsCi0gICAgMCwxLDEyNCwxLDAsODMsNDAsMywwLDAsMCwxMTcsMzgsMCwwLDAsCi0gICAgODMsMTAxLDExNiwzMiw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDMyLDExMSwKLSAgICAxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5OSwxLDAsMCwwLDAsMCwwLDAsNCwKLSAgICAwLDAsMCw0LDAsMCwwLDMxLDAsMCwwLDExNSw0OSwwLDAsMCwKLSAgICAxMzYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDE0MiwxLDAsMTI1LAotICAgIDMsMCwxMTYsMCwwLDEyNCwzLDAsMTAwLDEsMCwxMzEsMiwwLDExNSw0NSwKLSAgICAwLDEyNCwwLDAsMTI0LDMsMCw5NSwxLDAsMTEwLDAsMCwxMjQsMywwLAotICAgIDgzLDQwLDIsMCwwLDAsNzgsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsOTUsOTUsNDAsMiwwLDAsMCwxMTcsNywwLDAsMCwKLSAgICAxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk1LDk1LDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsCi0gICAgMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDk3LDExNCwxMDMsMTE1LDExNyw2LDAsCi0gICAgMCwwLDEwNywxMTksOTcsMTE0LDEwMywxMTUsMTE3LDYsMCwwLDAsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwyNTEsMSwKLSAgICAwLDAsMTE1LDgsMCwwLDAsMCwxLDE4LDEsMTUsMSwxMiwxLDExNywKLSAgICAzOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDYwLAotICAgIDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwxMTUsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDEsMCwwLDAsMTE3LAotICAgIDUsMCwwLDAsOTUsMTE5LDExNCw5NywxMTIsNDAsMiwwLDAsMCwxMTcsMywKLSAgICAwLDAsMCwxMDIsMTIwLDExMCwxMTcsMTgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsCi0gICAgMCwwLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LAotICAgIDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLAotICAgIDYyLDExNywxMCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDI0OSwxLDAsMCwxMTUsNiwwLDAsMCwwLDIsMTgsNSwxMywxLDExNywKLSAgICAxMCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMywKLSAgICAwLDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLAotICAgIDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwwLAotICAgIDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDAsMywwLDAsMCwKLSAgICAxMTcsNDIsMywwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LAotICAgIDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDExNSwxMDEsMTA4LDEwMSw5OSwxMTYsMTA1LAotICAgIDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDExNCwxMTEsMTEyLDEwMSwxMTQsMzIsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsCi0gICAgOTcsMTE2LDEwMSwxMDAsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwxMTUsCi0gICAgMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwzMiwxMTYsMTExLDMyLDExNywxMTUsMTAxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsCi0gICAgMTAwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTAsCi0gICAgMzIsMzIsMzIsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMzIsODQsMTA0LDEwMSwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMTIsOTcsMTE1LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LAotICAgIDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTA1LAotICAgIDExNSwzMiwxMDEsMTA1LDExNiwxMDQsMTAxLDExNCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE1LDEyMSwKLSAgICAxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA1LDExNiwzMiw5NywxMDgsMTE0LDEwMSw5NywxMDAsMTIxLDMyLDEwMSwxMjAsMTA1LDExNSwKLSAgICAxMTYsMTE1LDMyLDExMSwxMTQsMzIsMTA1LDExNSwzMiw5NywzMiwxMTAsMTAxLDExOSwzMiwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDExOSw0NCwzMiwxMTYsMTA0LDEwMSwKLSAgICAxMTAsMzIsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTAsMzIsMzIsMzIsMzIsMTA1LAotICAgIDExNSwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExNCwxMTUsMTE2LDMyLAotICAgIDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDQ0LDMyLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgOTUsOTUsMzIsMTA1LDExNSwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDExNSwxMDEsMTA4LAotICAgIDEwMiw0NCwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDk1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMDUsMTE1LDMyLDExNSwxMDEsMTE2LDMyLDk3LDk5LAotICAgIDk5LDExMSwxMTQsMTAwLDEwNSwxMTAsMTAzLDEwOCwxMjEsMzIsNDAsMTA1LDEwMiwzMiwxMTUsMTAxLAotICAgIDEwOCwxMDIsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDAsNDEsMzIsCi0gICAgMTA1LDExNSwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwxMDAsNDEsMzIsMTE5LDEwNSwxMDgsMTA4LAotICAgIDMyLDk4LDEwMSwzMiwxMTUsMTAxLDExNiwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTAyLDExMSwKLSAgICAxMTQsMTAxLDMyLDEwNSwxMTYsMzIsMTA1LDExNSwzMiwxMTIsOTcsMTE1LDExNSwxMDEsMTAwLDMyLAotICAgIDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMDEsMTAwLAotICAgIDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiw0MCwxMDUsMTAyLDMyLDExNSwxMDEsCi0gICAgMTA4LDEwMiw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MCw0MSwzMiwKLSAgICAxMDAsMTExLDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTEwLDExMSwxMTYsMzIsMTE5LDExMSwxMTQsCi0gICAgMTA3LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDEwNSwxMTYsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiwxMTUsMTAxLDExNiwzMiwKLSAgICAxMTIsMTExLDExNSwxMTYsNDUsMTA4LDExMSw5NywxMDAsNDEsNDYsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsNzMsMTAyLDMyLDk3LDExMCwzMiwxMDEsMTIwLDk5LDEwMSwxMTIsMTE2LDEwNSwxMTEsMTEwLAotICAgIDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiw5NywxMTAsMTAwLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiw5OSwxMTQsMTAxLAotICAgIDk3LDExNiwxMDEsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAotICAgIDEwNSwxMTYsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiwxMTUsMTE3LDk4LDExNSwxMDEsMTEzLAotICAgIDExNywxMDEsMTEwLDExNiwxMDgsMTIxLDMyLDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwzMiwxMDIsCi0gICAgMTE0LDExMSwxMDksMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LAotICAgIDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LDk3LAotICAgIDExNiwxMTEsMTE0LDMyLDk3LDExNSwxMTUsMTE3LDEwOSwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywxMTYsMTAxLDEwMCwzMiwxMDIsCi0gICAgMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDk3LDEwNywxMDEsMTE1LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDk3LDExNSwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLDk5LDExMSwxMTAsMTAwLDMyLAotICAgIDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5OSwKLSAgICAyLDAsMCwwLDAsMCwwLDAsNywwLDAsMCwyNSwwLDAsMCwKLSAgICAzMSwwLDAsMCwxMTUsMjU0LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMDYsCi0gICAgMiwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsNCwwLDEyNCw0LDAsMTAwLDAsCi0gICAgMCwxMDcsOSwwLDEyNSw1LDAsMTI0LDUsMCwxMTUsMTY4LDAsMTE2LDQsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDAsMTI1LDQsMCwxMDAsMywwLDEyNCw0LDAsOTUsCi0gICAgNiwwLDEyNCw0LDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsNjAsMTI0LAotICAgIDAsMCwxMjQsNCwwLDk1LDcsMCwxMjEsMTksMCwxMjQsMCwwLDEwNiw4LAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw2LDAsODcsMTEwLDI0LDAsNCwxMTYsCi0gICAgOSwwLDExNiwxMCwwLDEwMiwyLDAsMTA3LDEwLDAsMTE0LDEyNCwwLDEsMSwKLSAgICAxLDg5LDExMywxNzcsMCw4OCwxMjQsNiwwLDExNCwxNDMsMCwxMjQsMSwwLDEyNCwKLSAgICA0LDAsOTUsMTEsMCwxMTMsMTc3LDAsMTI0LDEsMCwxMDYsMTIsMCwxMDAsMSwKLSAgICAwLDEzMSwxLDAsMTAwLDIsMCwyNSwxMjQsNCwwLDk1LDExLDAsMTEwLDksCi0gICAgMCwxMDAsMywwLDEyNCw0LDAsOTUsNiwwLDEyMiw2MCwwLDEyMSwyMywwLAotICAgIDEzNiwwLDAsMTI0LDAsMCwxMjQsNCwwLDEyNCwyLDAsMTI0LDMsMCwxNDIsCi0gICAgMiwwLDgzLDg3LDExMCwzMCwwLDEsMSwxLDEyNCw1LDAsMTE1LDIyOCwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDYxLDExMCwwLDAsMTMwLDAsMCwKLSAgICA4OSwxMTAsMSwwLDg4LDg3LDEwMCwwLDAsMTAwLDQsMCwxMjQsNCwwLDk1LAotICAgIDYsMCw4OCwxMDAsMCwwLDgzLDQwLDUsMCwwLDAsNzgsMTE3LDEsMCwKLSAgICAwLDAsNDYsMTA1LDAsMCwwLDAsODQsNzAsNDAsMTQsMCwwLDAsMTE3LAotICAgIDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE1LDExNywzLDAsMCwwLDEwMywxMDEsMTE2LDExNyw0LDAsMCwwLAotICAgIDc4LDExMSwxMTAsMTAxLDExNywxMCwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsNCwwLDAsMCw4NCwxMTQsMTE3LDEwMSwxMTcsMTYsMCwwLAotICAgIDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDEwNSw5NywxMDgsMTA1LDEyMiwxMDUsMTEwLDEwMyw5NSwKLSAgICA5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwKLSAgICAxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LAotICAgIDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywKLSAgICAxNCwwLDAsMCw2NSwxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgOTUsOTUsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsCi0gICAgMTEwLDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDQwLDcsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsCi0gICAgNiwwLDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDExNyw2LDAsMCwwLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDExNyw5LDAsMCwwLDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsCi0gICAgMTExLDk3LDEwMCwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjUsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LAotICAgIDExMiwxMTIsMTAxLDExNCwyMiwyLDAsMCwxMTUsNDQsMCwwLDAsMCwxLDE4LAotICAgIDEsMTIsMSw2LDQsMTIsMyw5LDEsMTMsMSw5LDEsMywxLDE5LAotICAgIDEsMTksMSw1LDIsNiwxLDEyLDIsMjUsMiw5LDEsNiwyLDIzLAotICAgIDEsMywxLDYsMSwxMywxLDEyLDIsMTE3LDUyLDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCi0gICAgNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLAotICAgIDEwMSwxMTQsNDAsMSwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTksMTE0LDk3LAotICAgIDExMiw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywyNSwKLSAgICAwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwwLAotICAgIDAsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDE3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNCwyLDAsMCwxMTUsNiwwLDAsMCwwLAotICAgIDE4LDE4LDMzLDEzLDEsMTE3LDE3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwKLSAgICAwLDAsMCwwLDIsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLAotICAgIDExNSwzOCwwLDAsMCwxMDAsMywwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwKLSAgICAwLDEwMCwyLDAsMTM0LDEsMCwxMjUsMSwwLDExNiwxLDAsMTI0LDEsMCwKLSAgICAxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDQsMCwwLDAsCi0gICAgMTE3LDI1MiwwLDAsMCw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwxMTYsCi0gICAgMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsOTcsMTE2LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywzMiwxMTQsCi0gICAgMTAxLDExMywxMTcsMTAxLDExNSwxMTYsMTAxLDEwMCwzMiwxMDksOTcsMTE2LDk5LDEwNCwxMDEsMTE1LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTksOTcsMTEwLDMyLDEwNCw5NywxMTAsMTAwLAotICAgIDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDIsMTA1LDExNCwKLSAgICAxMTUsMTE2LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiw0MCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsNDEsMzIsMTA5LDExNywxMTUsMTE2LDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDMyLDk1LAotICAgIDExMCw5NywxMDksMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsCi0gICAgMTAxLDk5LDExMSwxMTAsMTAwLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMDUsCi0gICAgMTE1LDEwLDMyLDMyLDMyLDMyLDk5LDExMSwxMDksMTEyLDk3LDExNCwxMDEsMTAwLDMyLDk3LAotICAgIDEwMyw5NywxMDUsMTEwLDExNSwxMTYsNDYsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDk5LAotICAgIDExMSwxMDksMTEyLDk3LDExNCwxMDUsMTE1LDExMSwxMTAsMzIsMTAyLDk3LDEwNSwxMDgsMTE1LDMyLAotICAgIDExNiwxMDQsMTAxLDExMCwzMiw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsNSwwLAotICAgIDAsMCwzMSwwLDAsMCwxMTUsODMsMCwwLDAsMTI0LDEsMCwxMDAsMCwKLSAgICAwLDEwNyw4LDAsMTE0LDI0LDAsMTI0LDAsMCwxMDYsMSwwLDEyNSwxLDAsCi0gICAgMTEwLDQwLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTA3LDMsMCwxMTQsCi0gICAgNjQsMCwxMTYsMiwwLDEwMCwxLDAsMTI0LDEsMCwyMiwxMDAsMiwwLDEyNCwKLSAgICAxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LDAsMCwxMjQsMCwKLSAgICAwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDE0MiwyLDAsODMsNDAsMywKLSAgICAwLDAsMCw3OCwxMTcsMjMsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwKLSAgICA5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwzNywxMTUsCi0gICAgMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsMywwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsCi0gICAgMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsCi0gICAgMTE3LDYsMCwwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSw0MCwxLDAsMCwwLAotICAgIDExNyw2LDAsMCwwLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxOSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw2NywyLDAsMCwxMTUsMTAsCi0gICAgMCwwLDAsMCwxLDEyLDEsMTIsMSwxNSwxLDI1LDEsMTE3LDQwLDAsCi0gICAgMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDQ2LDYwLDEwOCwKLSAgICAxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw3OCw0MCwyLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw1LDAsMCwwLDk1LDExOSwKLSAgICAxMTQsOTcsMTEyLDQwLDIsMCwwLDAsMTE3LDYsMCwwLDAsMTA5LDEwMSwxMTYsCi0gICAgMTA0LDExMSwxMDAsMTE3LDE5LDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCwKLSAgICA5NywxMDksMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwwLDAsCi0gICAgNDAsMSwwLDAsMCwxMTcsNiwwLDAsMCwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDU5LDIsMCwwLDExNSw2LDAsMCwwLDAsOCwyMSw2LDEzLAotICAgIDEsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksCi0gICAgMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwKLSAgICAwLDAsMywwLDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsMSwKLSAgICAwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsMCwKLSAgICAxMjQsMSwwLDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDAsMywKLSAgICAwLDAsMCwxMTcsNDksMCwwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwKKyAgICA0Niw5OSw5OCw0MSw3LDExNCwxMDksMCwwLDAsMTE0LDc5LDAsMCwwLDExNCwKKyAgICA4NSwwLDAsMCwxMTQsMTAyLDAsMCwwLDExNCw4MywwLDAsMCwyMTgsOCwKKyAgICA5NSwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5MCwzLDExNCwxMDEsMTAyLDQxLDMsMTE0LAorICAgIDY3LDAsMCwwLDExNCw4NiwwLDAsMCwxMTQsMTEwLDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDQxLDEsMTE0LDY3LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAxMDUsMCwwLDAsMTgsMSwwLDAsMTE1LDI0LDAsMCwwLDAsNCw2LAorICAgIDEsMywxLDE3LDEsMTMsMSw1LDEsMTIsMSwxMiwxLDE1LDIsMTIsCisgICAgMSwxOCwyLDI1LDEsMTE0LDEwNSwwLDAsMCw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgNzEsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDEsMCwKKyAgICAxMTYsMSwwLDEwNiwyLDAsMTMxLDAsMCwxLDEyMSwxNCwwLDEyNCwxLDAsCisgICAgMTA2LDMsMCwxMzEsMCwwLDEsODcsMTEwLDE4LDAsNCwxMTYsNCwwLDEwNywKKyAgICAxMCwwLDExNCw1NiwwLDEsMSwxLDg5LDExMCwxMSwwLDg4LDEyNCwxLDAsCisgICAgMTA2LDUsMCwxMzEsMCwwLDEsMTAwLDEsMCw4Myw0MSwyLDk3LDIxLDEsCisgICAgMCwwLDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDEwOCwKKyAgICAxMTEsOTgsOTcsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LAorICAgIDQ0LDMyLDk3LDExMCwxMDAsMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTE2LAorICAgIDEwNCwxMDEsMTEwLDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDEwLAorICAgIDMyLDMyLDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLAorICAgIDEwMiwxMTEsMTE0LDMyLDk3LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwKKyAgICAxMTUsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTEwLDExNSwKKyAgICAxMTcsMTE0LDEwMSwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLAorICAgIDk5LDExMSwxMDksMTEyLDEwOCwxMDEsMTE2LDEwMSwxMDgsMTIxLDMyLDEwNSwxMTAsMTA1LDExNiwxMDUsCisgICAgOTcsMTA4LDEwNSwxMjIsMTAxLDEwMCw0NCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDEwLDMyLAorICAgIDMyLDMyLDMyLDEwMSwxMTgsMTAxLDExMCwxMTYsMzIsMTA1LDExNiwzMiwxMDUsMTE1LDMyLDk4LAorICAgIDEwMSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwKKyAgICAzMiw5NywxMTAsMTExLDExNiwxMDQsMTAxLDExNCwzMiwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTExLDExMCwxMDgsCisgICAgMTIxLDMyLDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LAorICAgIDMyLDExNiw5NywxMDcsMTAxLDExMCw0Niw3OCw0MSw2LDExNCwxMDUsMCwwLDAsMTE0LAorICAgIDEwNiwwLDAsMCwxMTQsMTA3LDAsMCwwLDExNCw5NywwLDAsMCwxMTQsODIsCisgICAgMCwwLDAsMTE0LDk4LDAsMCwwLDQxLDIsMTE0LDY3LDAsMCwwLDExNCwKKyAgICA4NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsMTksOTUsMTA4LDExMSw5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LAorICAgIDEwNyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzNywxLDAsMCwxMTUsMTQsMCwwLAorICAgIDAsMCw3LDEyLDEsMTAsMSwzLDEsMTQsMSwxMywzLDUsMiwxMTQsCisgICAgMTEyLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwKKyAgICAwLDMsMCwwLDAsNzksMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwwLAorICAgIDAsMTI0LDEsMCwxMjQsMiwwLDE0MiwwLDAsODMsNDEsMSw5Nyw0NiwxLAorICAgIDAsMCwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCisgICAgMTA1LDk4LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiw0Niw5OSwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTcsMTA4LDExOSw5NywxMjEsCisgICAgMTE1LDMyLDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDMyLDExNSwxMDEsMTEzLDExNywxMDEsMTEwLDk5LAorICAgIDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAxMDgsMTA1LDk4LDMyLDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMzIsCisgICAgMTAxLDExMCwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDk3LDMyLDk5LDk3LDEwOCwxMDgsMzIsCisgICAgMTE2LDExMSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDg1LDExNSwxMDEsMzIsMTA1LDExNiwzMiwxMDUsMTEwLDExNSwKKyAgICAxMTYsMTAxLDk3LDEwMCwzMiwxMTEsMTAyLDMyLDk3LDMyLDExMCwxMTEsMTE0LDEwOSw5NywxMDgsCisgICAgMzIsOTksOTcsMTA4LDEwOCwzMiwxMDUsMTEwLDMyLDExMiwxMDgsOTcsOTksMTAxLDExNSwzMiwKKyAgICAxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTA1LDExMCwxMDMsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwxMCwzMiwzMiwKKyAgICAzMiwzMiwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDEwNSwxMTAsMTE2LDExNCwxMTEsMTAwLDExNywKKyAgICA5OSwxMDEsMTE1LDMyLDExNywxMTAsMTE5LDk3LDExMCwxMTYsMTAxLDEwMCwzMiwxMTAsMTExLDEwNSwKKyAgICAxMTUsMTAxLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsMTE0LDk3LDk5LAorICAgIDEwMSw5OCw5Nyw5OSwxMDcsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiwxMTksMTA0LDEwMSwxMTAsCisgICAgMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDUsMTEwLDEwMywxMCwzMiwzMiwzMiwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0MSwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMTQsNCwwLDAsMCw0MSwzLDIxOCwxLDEwMiwxMTQsODAsMCwwLDAsOTAsCisgICAgNCwxMDcsMTE5LDEwMCwxMTUsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDI1LDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LAorICAgIDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDU3LAorICAgIDEsMCwwLDExNSwyLDAsMCwwLDAsOCwxMTQsMTE0LDAsMCwwLDEwNSwKKyAgICAyMjgsMTIsMCwwLDIzMywyLDAsMCwwLDExNCwxMywwLDAsMCwxMTUsMiwKKyAgICAwLDAsMCwxMywxMCw5MCwxMSw5NSw5NSwxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsCisgICAgOTUsOTUsMTIyLDMsNDYsMTEyLDEyMSwxMjIsNCw0NiwxMTIsMTIxLDk5LDEyMiw0LDQ2LAorICAgIDExMiwxMjEsMTExLDc4LDk5LDIsMCwwLDAsMCwwLDAsMCwxMSwwLDAsCisgICAgMCw2LDAsMCwwLDY3LDAsMCwwLDExNSwxODAsMCwwLDAsMTI0LDEsCisgICAgMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDI1LDAsMTE2LDAsMCwxMDYsMSwwLAorICAgIDEwNiwyLDAsMTIsMTEwLDMsMCwxMjQsMSwwLDEyNSwyLDAsMTI0LDIsMCwKKyAgICAxMTQsNDYsMCwxMTYsMywwLDEyNSwzLDAsMTEwLDYsMCwxMTYsNCwwLDEyNSwKKyAgICAzLDAsMTE2LDUsMCwxMjQsMCwwLDEzMSwxLDAsOTIsMiwwLDEyNSw0LAorICAgIDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw2LDAsMTAwLDIsMCwxMzEsMSwwLAorICAgIDkyLDMsMCwxMjUsNiwwLDEyNSw3LDAsMTI1LDgsMCwxMTYsMCwwLDEwNiwKKyAgICA3LDAsMTA2LDgsMCwxMjUsOSwwLDEyNCw5LDAsMTAwLDEsMCwxMDcsOCwKKyAgICAwLDExNCwxMzMsMCwxMTYsOSwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsMSwwLAorICAgIDExMCwwLDAsMTAwLDQsMCwxMDYsMTAsMCwxMjQsNiwwLDEyNCw3LDAsMTI0LAorICAgIDksMCwxMjQsMywwLDEwMCw1LDAsMjUsMTAzLDQsMCwxMzEsMSwwLDEyNSwKKyAgICAxMCwwLDExNiwxMSwwLDEyNCw0LDAsMTE2LDEyLDAsMTI0LDEwLDAsMTMxLDMsCisgICAgMCw4Myw0MSw2LDk3LDI0NCwxLDAsMCw3MSwxMDUsMTE4LDEwMSwxMTAsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiw5NywzMiw0NiwxMTIsMTIxLAorICAgIDMyLDEwMiwxMDUsMTA4LDEwMSw0NCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDQ2LDExMiwKKyAgICAxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsCisgICAgMTAwLDExMSwxMDEsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLAorICAgIDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsNTksMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDExNSwxMDUsMTA5LAorICAgIDExMiwxMDgsMTIxLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLAorICAgIDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk5LAorICAgIDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMTAwLDMyLDk3LDExNSwzMiwxMDUsMTAyLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExOSwxMDEsMTE0LAorICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg0LDEwNCwxMDEsCisgICAgMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMTAsMzIsMzIsMzIsMzIsMTE5LAorICAgIDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiw0NiwxMTIsMTIxLDk5LDMyLDExNywxMTAsMTA4LDEwMSwKKyAgICAxMTUsMTE1LDMyLDExNSwxMjEsMTE1LDQ2LDEwMiwxMDgsOTcsMTAzLDExNSw0NiwxMTEsMTEyLDExNiwKKyAgICAxMDUsMTA5LDEwNSwxMjIsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTAsNDUsMTIyLDEwMSwxMTQsCisgICAgMTExLDQ0LDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMDUsMTE2LDMyLDExOSwxMDUsMTA4LDEwOCwzMiwKKyAgICA5OCwxMDEsMzIsNDYsMTEyLDEyMSwxMTEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTAyLAorICAgIDMyLDEwMCwxMDEsOTgsMTE3LDEwMyw5NSwxMTEsMTE4LDEwMSwxMTQsMTE0LDEwNSwxMDAsMTAxLDMyLAorICAgIDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsNzgsMTExLDExMCwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsCisgICAgMTEwLDMyLDEwNSwxMTYsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiw5NywzMiw5OCwKKyAgICAxMTEsMTExLDEwOCwxMDEsOTcsMTEwLDMyLDk3LDExMCwxMDAsMzIsMTA1LDExNSwzMiwxMTcsMTE1LAorICAgIDEwMSwxMDAsMzIsMTA1LDExMCwxMCwzMiwzMiwzMiwzMiwxMTIsMTA4LDk3LDk5LDEwMSwzMiwKKyAgICAxMTEsMTAyLDMyLDExNSwxMjEsMTE1LDQ2LDEwMiwxMDgsOTcsMTAzLDExNSw0NiwxMTEsMTEyLDExNiwKKyAgICAxMDUsMTA5LDEwNSwxMjIsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTUsCisgICAgMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwKKyAgICAxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsCisgICAgMTExLDExMCwxMDEsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsCisgICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLAorICAgIDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsMjE4LDEsCisgICAgNDYsMTIyLDM2LDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAorICAgIDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsCisgICAgMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwxMTQsMzAsMCwwLDAsMTE0LDg0LDAsMCwKKyAgICAwLDQxLDEzLDExNCw3LDAsMCwwLDIxOCw1LDEwMiwxMDgsOTcsMTAzLDExNSwyMTgsCisgICAgOCwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDIxOCwyMyw2OCw2OSw2Niw4NSw3MSwKKyAgICA5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCwKKyAgICA2OSw4MywyMTgsMjcsNzksODAsODQsNzMsNzcsNzMsOTAsNjksNjgsOTUsNjYsODksCisgICAgODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE0LAorICAgIDM4LDAsMCwwLDIxOCw5LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMjE4LAorICAgIDE0LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwyMTgsCisgICAgOSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMjE4LDE5LDc4LDExMSwxMTYsNzMsCisgICAgMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTQsCisgICAgMjYsMCwwLDAsMTE0LDI4LDAsMCwwLDIxOCw4LDk1LDgwLDg5LDY3LDY1LAorICAgIDY3LDcyLDY5LDQxLDExLDExNCwzNSwwLDAsMCw5MCwxNCwxMDAsMTAxLDk4LDExNywKKyAgICAxMDMsOTUsMTExLDExOCwxMDEsMTE0LDExNCwxMDUsMTAwLDEwMSwyMTgsNSwxMDAsMTAxLDk4LDExNywKKyAgICAxMDMsMjE4LDgsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwyMTgsNCwxMDQsMTAxLDk3LAorICAgIDEwMCwxMTQsMzcsMCwwLDAsMjE4LDEzLDk4LDk3LDExNSwxMDEsOTUsMTAyLDEwNSwxMDgsCisgICAgMTAxLDExMCw5NywxMDksMTAxLDIxOCwzLDExNSwxMDEsMTEyLDExNCwzNiwwLDAsMCw5MCwKKyAgICAzLDExNiw5NywxMDMsMjE4LDgsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNyw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDE4MCwxLDAsMCwxMTUsMjIsMCwwLDAsMCwxMywzMSwxLDYsMSw5LAorICAgIDIsNiwxLDE4LDEsMjQsMSwxMiwxLDEyLDEsMTUsMSwzMSwxLDExNCwKKyAgICAxMzIsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDUsMCwwLAorICAgIDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMTkzLDAsMCwwLDExNiwwLAorICAgIDAsMTA2LDEsMCwxMDYsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMzMsMCwKKyAgICAxMTYsMywwLDEwMCwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTE2LAorICAgIDQsMCwxMjQsMCwwLDEzMSwxLDAsOTIsMiwwLDEyNSwxLDAsMTI1LDIsCisgICAgMCwxMTYsNCwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDEsMCwKKyAgICAxMjUsMywwLDEyNCwzLDAsMTE2LDUsMCwxMDcsMywwLDExNCwxMDgsMCwxMTYsCisgICAgNiwwLDEwMCwzLDAsMTA2LDcsMCwxMTYsNSwwLDEyNCwwLDAsMTMxLDIsCisgICAgMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMiwwLDEwNiw4LDAsCisgICAgMTAwLDQsMCwxMzEsMSwwLDEwMCw1LDAsMTA3LDMsMCwxMTQsMTUzLDAsMTE2LAorICAgIDYsMCwxMDAsNiwwLDEwNiw3LDAsMTI0LDIsMCwxMzEsMSwwLDEzMSwxLAorICAgIDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwyLDAsMTA2LDksMCwxMDAsNCwwLAorICAgIDEzMSwxLDAsMTAwLDcsMCwyNSwxMjUsNCwwLDExNiwxMCwwLDEyNCwxLDAsCisgICAgMTI0LDQsMCwxMTYsMTEsMCwxMDAsNywwLDI1LDIzLDEzMSwyLDAsODMsNDEsCisgICAgOCw5NywxMjEsMSwwLDAsNzEsMTA1LDExOCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsOTcsMzIsNDYsMTEyLDEyMSw5OSw0Niw0NywKKyAgICA0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwKKyAgICAxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMDUsMTE2LAorICAgIDExNSwzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiw4NCwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLAorICAgIDEwNSwxMDgsMTAxLDMyLDEwMCwxMTEsMTAxLDExNSwzMiwxMTAsMTExLDExNiwzMiwxMTAsMTAxLDEwMSwKKyAgICAxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDU5LDMyLDExNiwxMDQsMTA1LDExNSwKKyAgICAzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5OSw5NywxMDgsCisgICAgOTksMTE3LDEwOCw5NywxMTYsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDk5LDExMSwxMTQsMTE0LDEwMSwKKyAgICAxMTUsMTEyLDExMSwxMTAsMTAwLDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwKKyAgICA5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMzIsMzIsNzMsMTAyLAorICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMCwxMTEsMTAxLDExNSwxMCwzMiwzMiwzMiwzMiwxMTAsCisgICAgMTExLDExNiwzMiw5OSwxMTEsMTEwLDEwMiwxMTEsMTE0LDEwOSwzMiwxMTYsMTExLDMyLDgwLDY5LAorICAgIDgwLDMyLDUxLDQ5LDUyLDU1LDMyLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDQsMzIsODYsCisgICAgOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwKKyAgICAxMDEsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwzMiw3MywxMDIsMTAsMzIsMzIsMzIsCisgICAgMzIsMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LAorICAgIDEwNSwxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LAorICAgIDMyLDc4LDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDExMCwzMiw3OCwxMTEsMTE2LDczLDEwOSwKKyAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LAorICAgIDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LAorICAgIDEyMiwzNiwxMTUsMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywKKyAgICAxMTYsMTA1LDExMSwxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwKKyAgICAxMTUsMzIsNzgsMTExLDExMCwxMDEsMTIyLDM3LDEyMywxMjUsMzIsMTEwLDExMSwxMTYsMzIsOTgsCisgICAgMTExLDExNiwxMTYsMTExLDEwOSw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwMCwxMDUsMTE0LDEwMSwKKyAgICA5OSwxMTYsMTExLDExNCwxMjEsMzIsMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwxMTQsMTE2LDAsCisgICAgMCwwLDExNCwxMTUsMCwwLDAsMTIyLDI4LDEwMSwxMjAsMTEyLDEwMSw5OSwxMTYsMTAxLAorICAgIDEwMCwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsNTAsMzIsMTAwLDExMSwxMTYsMTE1LDMyLDEwNSwxMTAsCisgICAgMzIsMTIzLDMzLDExNCwxMjUsMTE0LDg0LDAsMCwwLDQxLDEyLDExNCw3LDAsMCwKKyAgICAwLDExNCwxMjIsMCwwLDAsMTE0LDEyMywwLDAsMCwxMTQsMTI0LDAsMCwwLAorICAgIDExNCwzOCwwLDAsMCwxMTQsMTI1LDAsMCwwLDIxOCwxMCw4Niw5NywxMDgsMTE3LAorICAgIDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDQ3LDAsMCwwLDExNCw4OSwwLDAsMCwKKyAgICAxMTQsMTIxLDAsMCwwLDExNCwyOCwwLDAsMCwyMTgsMTUsODMsNzksODUsODIsCisgICAgNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsNDEsNSwxMTQsMzUsMCwKKyAgICAwLDAsMTE0LDEyOCwwLDAsMCw5MCwxNiwxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsCisgICAgOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDkwLDcsMTEyLDEyMSw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDExNCwxMjksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDE3LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLAorICAgIDExNCwxMTEsMTA5LDk1LDk5LDk3LDk5LDEwNCwxMDEsMjA3LDEsMCwwLDExNSwyNCwwLAorICAgIDAsMCwwLDksMTgsMSwxNSwxLDE4LDEsMTgsMSwxMiwxLDMsMSwKKyAgICAyNCwxLDIxLDEsMywxLDIxLDEsMTksMSwxMTQsMTM1LDAsMCwwLDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDEzLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwxNjQsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyMiwwLDEwMCwyLDAsODMsMTI0LAorICAgIDAsMCwxMDYsMSwwLDEwMCwzLDAsMTMxLDEsMCw5MiwzLDAsMTI1LDEsCisgICAgMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDEsMCwxMiwxMTUsODEsMCwxMjQsMywKKyAgICAwLDEwNiwyLDAsMTMxLDAsMCwxMDAsNywwLDEwMCw4LDAsMTMzLDIsMCwKKyAgICAyNSwxMDAsNiwwLDEwNywzLDAsMTE0LDg1LDAsMTI0LDAsMCw4MywxMjEsMTYsCisgICAgMCwxMTYsMywwLDEyNCwwLDAsMTMxLDEsMCwxMjUsNCwwLDg3LDExMCw0MCwKKyAgICAwLDQsMTE2LDQsMCwxMTYsNSwwLDEwMiwyLDAsMTA3LDEwLDAsMTE0LDE0MywKKyAgICAwLDEsMSwxLDEyNCwwLDAsMTAwLDIsMCwxMDAsOSwwLDEzMywyLDAsCisgICAgMjUsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDExNiw2LDAsMTI0LDQsMCwxMzEsCisgICAgMSwwLDExNCwxNjAsMCwxMjQsNCwwLDgzLDEyNCwwLDAsODMsNDEsMTAsMTIyLAorICAgIDE4OCw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiw5NywzMiw5OCwxMjEsMTE2LDEwMSw5OSwKKyAgICAxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwKKyAgICAzMiw5NywzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLAorICAgIDEwNSwxMDIsMzIsMTEyLDExMSwxMTUsMTE1LDEwNSw5OCwxMDgsMTAxLDQxLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwKKyAgICAzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDExNSwzMiwxMTIsMTE3LDExNCwxMDEsMTA4LDEyMSwzMiwxMDIsCisgICAgMTExLDExNCwzMiw5OCw5Nyw5OSwxMDcsMTE5LDk3LDExNCwxMDAsMTE1LDQ1LDk5LDExMSwxMDksCisgICAgMTEyLDk3LDExNiwxMDUsOTgsMTA1LDEwOCwxMDUsMTE2LDEyMSwzMiwxMDIsMTExLDExNCwxMCwzMiwKKyAgICAzMiwzMiwzMiw4MCwxMjEsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw2OSwxMjAsMTAxLDk5LAorICAgIDY3LDExMSwxMDAsMTAxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODcsMTA1LDExNiwxMDQsNzAsMTA1LAorICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDQwLDQxLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsNjcsMzIsNjUsODAsNzMsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LDg0LDAsCisgICAgMCwwLDc4LDExNCwxMTYsMCwwLDAsMjMzLDMsMCwwLDAsMTE0LDI5LDAsCisgICAgMCwwLDkwLDIsMTEyLDEyMSwyMzMsMjUzLDI1NSwyNTUsMjU1LDIzMywyNTUsMjU1LDI1NSwyNTUsCisgICAgMTE0LDEzOCwwLDAsMCw0MSw3LDExNCwzMSwwLDAsMCwxMTQsMzIsMCwwLAorICAgIDAsMjE4LDUsMTA4LDExMSwxMTksMTAxLDExNCwxMTQsMTM1LDAsMCwwLDExNCwxMjQsMCwKKyAgICAwLDAsMTE0LDEzMywwLDAsMCwxMTQsNDQsMCwwLDAsNDEsNSwyMTgsMTMsCisgICAgOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTEyLDk3LDExNiwxMDQsOTAsNCwxMTQsCisgICAgMTAxLDExNSwxMTYsMTE0LDM2LDAsMCwwLDkwLDksMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsCisgICAgMTA1LDExMSwxMTAsMjE4LDExLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDE1LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAyLDEwNSwxMDgsMTAxLAorICAgIDIzMCwxLDAsMCwxMTUsMjAsMCwwLDAsMCw3LDE4LDEsNCwxLDI0LAorICAgIDEsMzUsMSw0LDEsMywxLDE2LDEsMTksMSwyMSwxLDExNCwxNDIsMCwKKyAgICAwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTEsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDYwLDAsMCwwLDEyMSwxOSwwLDExNiwKKyAgICAwLDAsMTI0LDAsMCwxMzEsMSwwLDEwNiwxLDAsMTI1LDEsMCw4NywxMTAsCisgICAgMjQsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDQ1LDAsMSwxLDEsMTAwLAorICAgIDEsMCwxMjUsMSwwLDg5LDExMCwxLDAsODgsMTI0LDEsMCwxMDAsMiwwLAorICAgIDc5LDEyNSwxLDAsMTI0LDEsMCw4Myw0MSwzLDEyMiw1MSw2Nyw5NywxMDgsOTksCisgICAgMTE3LDEwOCw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDEwMSwzMiwxMTIsCisgICAgMTAxLDExNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMSwxMTAsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDk3LAorICAgIDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMDUsCisgICAgMTgyLDEsMCwwLDIzMywxMjgsMCwwLDAsNDEsMywxMTQsMzksMCwwLDAsCisgICAgMTE0LDQxLDAsMCwwLDExNCw0MCwwLDAsMCw0MSwyLDExNCwzNSwwLDAsCisgICAgMCwxMTQsNDIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDEwLDk1LDk5LDk3LDEwOCw5OSw5NSwxMDksMTExLDEwMCwKKyAgICAxMDEsMjQ5LDEsMCwwLDExNSwxMiwwLDAsMCwwLDIsMywxLDE5LDEsCisgICAgMTMsMSwxMSwzLDEwLDEsMTE0LDE0NCwwLDAsMCwyMTgsOSwxMTgsMTAxLDExNCwKKyAgICA5OCwxMTEsMTE1LDEwNSwxMTYsMTIxLDExNCwyOSwwLDAsMCw5OSwxLDAsMCwwLAorICAgIDEsMCwwLDAsMywwLDAsMCw0LDAsMCwwLDcxLDAsMCwwLAorICAgIDExNSw4MSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMjQsMSwKKyAgICAwLDEwNyw1LDAsMTE0LDc3LDAsMTI0LDAsMCwxMDYsMywwLDEwMCw2LDAsCisgICAgMTMxLDEsMCwxMTUsNDYsMCwxMDAsMywwLDEyNCwwLDAsMjMsMTI1LDAsMCwKKyAgICAxMTAsMCwwLDExNiw0LDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwyLDAsMTQwLAorICAgIDAsMCwxMDAsNCwwLDExNiwwLDAsMTA2LDYsMCwxMzEsMSwxLDEsMTEwLAorICAgIDAsMCwxMDAsNSwwLDgzLDQxLDcsMTIyLDYxLDgwLDExNCwxMDUsMTEwLDExNiwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwzMiwxMTYsMTExLDMyLDExNSwKKyAgICAxMTYsMTAwLDEwMSwxMTQsMTE0LDMyLDEwNSwxMDIsMzIsNDUsMTE4LDQ3LDgwLDg5LDg0LDcyLAorICAgIDc5LDc4LDg2LDY5LDgyLDY2LDc5LDgzLDY5LDMyLDEwNSwxMTUsMzIsMTE2LDExNywxMTQsCisgICAgMTEwLDEwMSwxMDAsMzIsMTExLDExMCw0NiwyNTAsMSwzNSwyNTAsNywxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwzMiwxMjIsMiwzNSwzMiwxMTQsNTQsMCwwLDAsNzgsNDEsMiwxMTQsCisgICAgMTQ2LDAsMCwwLDExNCwxNDcsMCwwLDAsNDEsNywxMTQsNywwLDAsMCwKKyAgICAxMTQsMTE3LDAsMCwwLDIxOCw3LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDExNCw5LAorICAgIDAsMCwwLDIxOCw1LDExMiwxMTQsMTA1LDExMCwxMTYsMTE0LDQ3LDAsMCwwLDIxOCwKKyAgICA2LDExNSwxMTYsMTAwLDEwMSwxMTQsMTE0LDQxLDMsMjE4LDcsMTA5LDEwMSwxMTUsMTE1LDk3LAorICAgIDEwMywxMDEsMTE0LDE0NSwwLDAsMCwxMTQsODAsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE2LDk1LDExOCwxMDEsCisgICAgMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDUsMiwwLAorICAgIDAsMTE1LDgsMCwwLDAsMCwyLDE4LDEsMTUsMSwxMywxLDExNCwxNTIsCisgICAgMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgNCwwLDAsMCwzLDAsMCwwLDExNSwzOCwwLDAsMCwxMDAsMSwwLAorICAgIDEzNSwwLDAsMTAyLDEsMCwxMDAsMiwwLDEwMCwzLDAsMTM0LDEsMCwxMjUsCisgICAgMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsCisgICAgMSwwLDgzLDQxLDQsMTIyLDI1Miw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwKKyAgICAzMiwxMTYsMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsOTcsMTE2LDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywKKyAgICAzMiwxMTQsMTAxLDExMywxMTcsMTAxLDExNSwxMTYsMTAxLDEwMCwzMiwxMDksOTcsMTE2LDk5LDEwNCwKKyAgICAxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDEwLDMyLAorICAgIDMyLDMyLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTksOTcsMTEwLDMyLDEwNCw5NywKKyAgICAxMTAsMTAwLDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDIsCisgICAgMTA1LDExNCwxMTUsMTE2LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiw0MCwxMTUsCisgICAgMTAxLDEwOCwxMDIsNDEsMzIsMTA5LDExNywxMTUsMTE2LDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLAorICAgIDMyLDk1LDExMCw5NywxMDksMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTUsMTAxLDk5LDExMSwxMTAsMTAwLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwKKyAgICAzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDk5LDExMSwxMDksMTEyLDk3LDExNCwxMDEsMTAwLAorICAgIDMyLDk3LDEwMyw5NywxMDUsMTEwLDExNSwxMTYsNDYsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDk5LDExMSwxMDksMTEyLDk3LDExNCwxMDUsMTE1LDExMSwxMTAsMzIsMTAyLDk3LDEwNSwxMDgsCisgICAgMTE1LDMyLDExNiwxMDQsMTAxLDExMCwzMiw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsCisgICAgMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsNzgsOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLAorICAgIDAsNSwwLDAsMCwzMSwwLDAsMCwxMTUsODMsMCwwLDAsMTI0LDEsCisgICAgMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDI0LDAsMTI0LDAsMCwxMDYsMCwwLAorICAgIDEyNSwxLDAsMTEwLDQwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTA3LAorICAgIDMsMCwxMTQsNjQsMCwxMTYsMSwwLDEwMCwxLDAsMTI0LDEsMCwyMiwxMDAsCisgICAgMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LDAsCisgICAgMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDE0MiwyLDAsCisgICAgODMsNDEsMyw3OCwxMjIsMjMsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5OSw5NywxMTAsCisgICAgMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwzNywxMTUsMTE0LDY3LDAsCisgICAgMCwwLDQxLDIsMTE0LDY3LDAsMCwwLDIxOCwxMSw3MywxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDY5LDExNCwxMTQsMTExLDExNCw0MSw0LDExNCw3MSwwLDAsMCwxMTQsNjcsMCwKKyAgICAwLDAsMTE0LDgwLDAsMCwwLDExNCwxMDgsMCwwLDAsNDEsMSwyMTgsNiwKKyAgICAxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMTksOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsOTUsMTE5LDExNCwKKyAgICA5NywxMTIsMTEyLDEwMSwxMTQsMjEsMiwwLDAsMTE1LDEwLDAsMCwwLDAsMSwKKyAgICAxMiwxLDEyLDEsMTUsMSwyNSwxLDEyMiw0MCw5NSw5OSwxMDQsMTAxLDk5LDEwNywKKyAgICA5NSwxMTAsOTcsMTA5LDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsCisgICAgOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLAorICAgIDEwMSwxMTQsNDEsMSwxMTQsNjUsMCwwLDAsNDEsMiwxMTQsMTU0LDAsMCwwLAorICAgIDExNCwxNTUsMCwwLDAsMTE0LDQsMCwwLDAsNDEsMSwxMTQsMTU0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDIxOCwxMSw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsCisgICAgOTcsMTA5LDEwMSwxMywyLDAsMCwxMTUsNiwwLDAsMCwwLDgsMjEsNiwKKyAgICAxMywxLDExNCwxNTYsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLAorICAgIDIsMCwwLDAsMywwLDAsMCwzLDAsMCwwLDExNSwzNSwwLDAsCisgICAgMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsCisgICAgMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsCisgICAgMTI0LDEsMCw4Myw0MSwzLDEyMiw0OSw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLAogICAgIDExNCwzMiwxMTYsMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsMTAxLDMyLAogICAgIDExMCw5NywxMDksMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLAogICAgIDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDQ2LDk5LDIsMCwwLDAsMCwwLApAQCAtMTI1OCwzMTczICs5NTcsMzM5MiBAQAogICAgIDAsMCwwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw3LDAsMTE0LAogICAgIDQ1LDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwKICAgICAwLDEwMCwyLDAsMTI0LDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwKLSAgICAxMzYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDQwLDMsMCwKLSAgICAwLDAsNzgsMTE3LDI3LDAsMCwwLDEyMywxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLAotICAgIDExNiwzMiw5NywzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCw0LDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywyMCwwLDAsMCw5OCwxMTcsCi0gICAgMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTUsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDAsMiwwLAotICAgIDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsCi0gICAgMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsMTAyLDEyMCwxMTAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI1LDAsMCwKLSAgICAwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LAotICAgIDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNzksMiwwLDAsMTE1LDgsCi0gICAgMCwwLDAsMCwxLDE1LDEsMTgsMSwxMiwxLDExNyw1MiwwLDAsMCwKLSAgICA5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsCi0gICAgMTEwLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwxMTQsMTAxLDExMywxMTcsCi0gICAgMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExOSwxMTQsOTcsCi0gICAgMTEyLDExMiwxMDEsMTE0LDQwLDEsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTE5LAotICAgIDExNCw5NywxMTIsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwKLSAgICAxMTcsMjUsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwKLSAgICAxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLAotICAgIDAsMCwwLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxNywwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LAotICAgIDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDc3LDIsMCwwLDExNSw2LDAsMCwKLSAgICAwLDAsMiwxOCw1LDEzLDEsMTE3LDE3LDAsMCwwLDk1LDExNCwxMDEsMTEzLAotICAgIDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTksMSwwLAotICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwzLDAsCi0gICAgMCwwLDExNSwzNSwwLDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsMCwKLSAgICAxMDAsMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsMTM2LAotICAgIDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MCwzLDAsMCwwLDExNywKLSAgICA0NywwLDAsMCw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwxMTYsMTExLAotICAgIDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLAotICAgIDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDQsMCwwLDAsMTksMCwwLDAsMTE1LDU4LDAsMCwwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTE1LDQ1LDAsMTE2LDIsMCwxMDAsCi0gICAgMSwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDEwMCwyLDAsMTI0LDEsCi0gICAgMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMzYsMCwwLDEyNCwwLDAsCi0gICAgMTI0LDEsMCwxMzEsMiwwLDgzLDQwLDMsMCwwLDAsNzgsMTE3LDI1LDAsCi0gICAgMCwwLDEyMywxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsNCwwLDAsMCwKLSAgICAxMTAsOTcsMTA5LDEwMSw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDk1LDEwNSwKLSAgICAxMDksMTEyLDExNyw5LDAsMCwwLDEwNSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDAsMiwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywKLSAgICAxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsCi0gICAgMTAyLDEyMCwxMTAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI0LDAsMCwwLDk1LAotICAgIDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsCi0gICAgMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsOTAsMiwwLDAsMTE1LDgsMCwwLDAsCi0gICAgMCwxLDE1LDEsMTgsMSwxMiwxLDExNyw1MCwwLDAsMCw5NSwxMTQsMTAxLAotICAgIDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDQ2LDYwLDEwOCwKLSAgICAxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LAotICAgIDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLAotICAgIDEsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywxMTIsNDAsMiwKLSAgICAwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjQsMCwwLDAsCi0gICAgOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICA5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwwLDQwLDEsMCwKLSAgICAwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsCi0gICAgMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDg4LDIsMCwwLDExNSw2LDAsMCwwLDAsMiwxOCw1LDEzLDEsCi0gICAgMTE3LDE2LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwKKyAgICAxMzYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDQxLDMsNzgsCisgICAgMTIyLDI5LDEyMywzMywxMTQsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsCisgICAgOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LAorICAgIDY3LDAsMCwwLDQxLDQsMTE0LDcsMCwwLDAsMjE4LDIwLDk4LDExNywxMDUsCisgICAgMTA4LDExNiwxMDUsMTEwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExMCw5NywxMDksMTAxLAorICAgIDExNSwxMTQsMTUzLDAsMCwwLDExNCw0NywwLDAsMCw0MSwyLDExNCw3MSwwLAorICAgIDAsMCwyMTgsOCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDEsMSwyMTgsMywKKyAgICAxMDIsMTIwLDExMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjUsOTUsCisgICAgMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwKKyAgICA5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwzMywyLDAsMCwxMTUsOCwwLDAsCisgICAgMCwwLDEsMTUsMSwxOCwxLDEyLDEsMTIyLDUyLDk1LDExNCwxMDEsMTEzLDExNywKKyAgICAxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNDYsNjAsMTA4LDExMSwKKyAgICA5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsCisgICAgOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDEsCisgICAgMSwxMTQsNjUsMCwwLDAsNDEsMiwxMTQsMTU5LDAsMCwwLDExNCwxNjAsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsNDEsMSwxMTQsMTU5LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxNyw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LAorICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDMxLDIsMCwwLDExNSw2LDAsMCwwLDAsCisgICAgMiwxOCw1LDEzLDEsMTE0LDE2MSwwLDAsMCw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsMTE1LAorICAgIDM1LDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsCisgICAgMTM0LDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwKKyAgICAyLDAsMSwxMjQsMSwwLDgzLDQxLDMsMTIyLDQ3LDY4LDEwMSw5OSwxMTEsMTE0LAorICAgIDk3LDExNiwxMTEsMTE0LDMyLDExNiwxMTEsMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAorICAgIDEwNSwxMTUsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDYsOTksMiwwLDAsMCwwLAorICAgIDAsMCwwLDIsMCwwLDAsNCwwLDAsMCwxOSwwLDAsMCwxMTUsCisgICAgNTgsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwKKyAgICAxMTUsNDUsMCwxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwKKyAgICAxLDAsMTAwLDIsMCwxMjQsMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwKKyAgICAwLDEzNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsNDEsMywKKyAgICA3OCwxMjIsMjcsMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywKKyAgICAzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsNjcsCisgICAgMCwwLDAsNDEsNCwxMTQsMTA2LDAsMCwwLDIxOCw5LDEwNSwxMTUsOTUsMTAyLAorICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMTE0LDE1MywwLDAsMCwxMTQsNDcsMCwwLDAsNDEsCisgICAgMiwxMTQsNzEsMCwwLDAsMTE0LDE1OCwwLDAsMCw0MSwxLDExNCwxNTksMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDI0LDk1LDExNCwKKyAgICAxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTE5LAorICAgIDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDQsMiwwLDAsMTE1LDgsMCwwLDAsMCwKKyAgICAxLDE1LDEsMTgsMSwxMiwxLDEyMiw1MCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwKKyAgICAxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LAorICAgIDExNSw2Miw0Niw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLAorICAgIDEyMiwxMDEsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQxLDEsMTE0LDY1LDAsCisgICAgMCwwLDQxLDIsMTE0LDE1OSwwLDAsMCwxMTQsMTYzLDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDQxLDEsMTE0LDE1OSwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgMTYsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLAorICAgIDExMCw0MiwyLDAsMCwxMTUsNiwwLDAsMCwwLDIsMTgsNSwxMywxLAorICAgIDExNCwxNjQsMCwwLDAsOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwKICAgICAwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsODcsMCwwLDAsMTI0LAogICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDIsCi0gICAgMCwxMjUsMywwLDEyNCwyLDAsMTAwLDMsMCwxMDcsOCwwLDExNCw4MywwLAotICAgIDExNiwyLDAsMTI0LDMsMCwxMzEsMSwwLDExNCw4MywwLDEwMCwxLDAsMTI1LAotICAgIDQsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDQsMCwxMDYsNSwwLDEyNCwzLAotICAgIDAsMTAwLDIsMCwyNSwxMzEsMSwwLDExNiw2LDAsMTMxLDIsMCwxLDExMCwKLSAgICAwLDAsMTI0LDIsMCw4Myw0MCw0LDAsMCwwLDExNyw4NiwwLDAsMCwKLSAgICA4NCwxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsCi0gICAgOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMjEsCi0gICAgMzIsMTAwLDEwMSwxMDgsMTAxLDEwMyw5NywxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDExMSwxMCwzMiwKLSAgICAzMiwzMiwzMiwxMTUsMTAxLDEwOCwxMDIsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDAsNDEsNDYsMTE3LDQ0LDAsMCwwLDc4LDExMSwxMTYsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwxMDMsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsCi0gICAgMTE0LDEyMSwzMiwxMjMsMTI1LDU4LDMyLDEwOSwxMDUsMTE1LDExNSwxMDUsMTEwLDEwMywzMiw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTA1LDAsMCwwLDAsNzgsNDAsNywwLAotICAgIDAsMCwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsCi0gICAgMTA4LDEwMSwxMTAsMTE3LDksMCwwLDAsOTUsMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsCi0gICAgMTE1LDExNyw0LDAsMCwwLDExOSw5NywxMTQsMTEwLDExNyw2LDAsMCwwLDEwMiwKLSAgICAxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDEzLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgODcsOTcsMTE0LDExMCwxMDUsMTEwLDEwMyw0MCw1LDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDYsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsOCwwLAotICAgIDAsMCwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDExNywzLDAsMCwwLDEwOSwKLSAgICAxMTUsMTAzLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE3LAotICAgIDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICAxMTUsMTA0LDEwNSwxMDksOTksMiwwLDAsMTE1LDEwLDAsMCwwLDAsNiwyMSwKLSAgICAxLDI0LDEsNiwxLDMyLDEsMTE3LDE3LDAsMCwwLDk1LDEwMiwxMDUsMTEwLAotICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksOTksMSwwLAotICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsNiwwLDAsMCw2NiwwLAotICAgIDAsMCwxMTUsMTczLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLAotICAgIDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwKLSAgICAxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsCi0gICAgNCwwLDEwMCwxNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMSwwLDEzMSwxLAotICAgIDAsOTAsNywwLDEwMSw0LDAsMTAxLDgsMCwxMDEsOSwwLDEwMSwxMCwwLAotICAgIDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsOTAsMTEsMCwxMDEsNCwwLDEwMSwxMCwwLDEwMCw4LAotICAgIDAsMTAwLDksMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMiwwLAotICAgIDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsOTAsMTMsMCwxMDEsNCwwLDEwMSwxMCwwLDEwMCwxMiwKLSAgICAwLDEwMCwxMywwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDE0LDAsCi0gICAgMTAwLDE0LDAsODMsNDAsMTUsMCwwLDAsMTE3LDE1LDAsMCwwLDY2LDExNywKLSAgICAxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMTQ0LDAsCi0gICAgMCwwLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LDEwOCwKLSAgICAxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTAxLDEwNSwKLSAgICAxMTYsMTA0LDEwMSwxMTQsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTExLDExNCwzMiwxMTUsMTE2LAotICAgIDk3LDExNiwxMDUsOTksMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDExNiwxMTEsMzIsCi0gICAgOTcsMTE4LDExMSwxMDUsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsCi0gICAgMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwxMTAsMTE1LDExNiw5NywxMTAsMTE2LDEwNSw5NywxMTYsCi0gICAgMTAxLDMyLDExNiwxMDQsMTAxLDMyLDk5LDEwOCw5NywxMTUsMTE1LDQ2LDEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LAotICAgIDAsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MCwyLDAsMCwKLSAgICAwLDc4LDExNywyNCwwLDAsMCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwzOSwKLSAgICAxMjMsMTI1LDM5LDMyLDQwLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDQxLDYyLDQwLAotICAgIDIsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsCi0gICAgOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSw0MCwyLDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDYsMCwwLDAsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LAotICAgIDEyNSwyLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI3LDAsMCwwLAotICAgIDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsOTksMywwLDAsMCwKLSAgICAwLDAsMCwwLDMsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsMzksMCwwLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDE2LAotICAgIDAsMTAwLDEsMCw4MywxMTYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMSwKLSAgICAwLDExNCwzNSwwLDEyNCwwLDAsODMsMTAwLDEsMCw4Myw0MCwyLDAsMCwKLSAgICAwLDExNywxMTMsMCwwLDAsNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsOTgsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsCi0gICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDM5LDExMiw5NywxMTYsCi0gICAgMTA0LDM5LDMyLDEwNSwxMTUsMzIsMTAxLDExOCwxMDEsMTE0LDMyLDExNSwxMTIsMTAxLDk5LDEwNSwKLSAgICAxMDIsMTA1LDEwMSwxMDAsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDEsCi0gICAgOTcsMTE0LDk5LDEwNCwzMiwxMDUsMTE1LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwKLSAgICAxMDEsMTAwLDMyLDk3LDMyLDEwMiw5NywxMDUsMTA4LDExNywxMTQsMTAxLDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQwLDMsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LAotICAgIDEwLDAsMCwwLDEwNSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNDAsMywKLSAgICAwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLAotICAgIDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTI5LDIsMCwKLSAgICAwLDExNSw2LDAsMCwwLDAsNywxMiwxLDQsMSwxMTcsMjcsMCwwLAotICAgIDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAotICAgIDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsMywwLDAsMCw5LDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSw4OCwwLDAsMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsCi0gICAgNiwwLDEyNSwyLDAsMTIxLDIwLDAsMTE2LDIsMCwxMTYsMywwLDEwNiw0LAotICAgIDAsMTI0LDEsMCwxMzEsMiwwLDgzLDg3LDExMCw0NiwwLDEsMSwxLDEyNCwKLSAgICAyLDAsMTIsMTE0LDc2LDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LAotICAgIDYsMCwxMTQsNzYsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCw2MSwxMTAsCi0gICAgMCwwLDEzMCwwLDAsODksMTEwLDEsMCw4OCwxMDAsMSwwLDgzLDQwLDIsCi0gICAgMCwwLDAsMTE3LDIzLDAsMCwwLDc2LDExMSw5NywxMDAsMzIsOTcsMzIsOTgsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNzgsCi0gICAgNDAsNSwwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLAotICAgIDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDI1LDAsMCwwLDk1LDk5LAotICAgIDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsCi0gICAgMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLAotICAgIDExNywxMiwwLDAsMCwxMDUsMTEwLDEwNSwxMTYsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwKLSAgICAxMTAsNDAsMywwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LAotICAgIDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOSwwLDAsMCwKLSAgICAxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTQwLDIsMCwwLDExNSwxNCwwLDAsMCwwLDYsCi0gICAgMTUsMSwzLDEsMjAsMSwzLDEsMjIsMSwxMywxLDExNywyNywwLDAsCi0gICAgMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCi0gICAgNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDU3LDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsCi0gICAgOTcsMTE1LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSwzMiwxMDAsMTExLDMyLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLAotICAgIDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTUsNDYsNzgsNDAsMSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwyLDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywKLSAgICAxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTU0LAotICAgIDIsMCwwLDExNSwyLDAsMCwwLDAsNCwxMTcsMjQsMCwwLDAsNjYsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywKLSAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwKLSAgICAyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLAotICAgIDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNyw1NiwwLDAsMCw4MiwKLSAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiw5OCwxMTcsCi0gICAgMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLAotICAgIDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDQwLDEsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwKLSAgICA5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsCi0gICAgMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDE2MCwyLDAsMCwxMTUsCi0gICAgMiwwLDAsMCwwLDQsMTE3LDI2LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwKLSAgICAxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLAotICAgIDEsMCw4Myw0MCwyLDAsMCwwLDExNyw1MiwwLDAsMCw4MiwxMDEsMTE2LAotICAgIDExNywxMTQsMTEwLDMyLDcwLDk3LDEwOCwxMTUsMTAxLDMyLDk3LDExNSwzMiw5OCwxMTcsMTA1LAotICAgIDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTE0LAotICAgIDEwMSwzMiwxMTAsMTAxLDExOCwxMDEsMTE0LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTUsCi0gICAgNDYsNzAsNDAsMSwwLDAsMCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LAotICAgIDEwMSw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDE2NiwyLDAsMCwxMTUsMiwwLDAsMCwwLAotICAgIDQsMTE3LDI2LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA3OCw0MCwxNSwwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksCi0gICAgMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LAotICAgIDExLDAsMCwwLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywKLSAgICAxMSwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMTE3LAotICAgIDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLAotICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNywwLDAsMCw5NSwxMTQsMTAxLDExMywKLSAgICAxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNywxMSwwLAotICAgIDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOCwwLAotICAgIDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxMTcsMTAsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsMTAsMCwwLDAsMTA1LDExNSwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwKLSAgICAwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE1LDAsMCwwLDY2LDExNywxMDUsCi0gICAgMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTYsMiwwLDAsCi0gICAgMTE1LDI4LDAsMCwwLDE2LDcsNiwyLDE4LDQsMywxLDE4LDEwLDMsCi0gICAgMSwzLDEsMywxLDI3LDExLDMsMSwyMSw1LDMsMSwyMSw1LDMsCi0gICAgMSwxMTcsMTUsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsCi0gICAgMCwwLDYsMCwwLDAsNjYsMCwwLDAsMTE1LDE3MywwLDAsMCwxMjQsCi0gICAgMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwKKyAgICAwLDEyNSwzLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDgzLDAsCisgICAgMTE2LDEsMCwxMjQsMywwLDEzMSwxLDAsMTE0LDgzLDAsMTAwLDIsMCwxMjUsCisgICAgNCwwLDExNiwyLDAsMTA2LDMsMCwxMjQsNCwwLDEwNiw0LDAsMTI0LDMsCisgICAgMCwxMDAsMywwLDI1LDEzMSwxLDAsMTE2LDUsMCwxMzEsMiwwLDEsMTEwLAorICAgIDAsMCwxMjQsMiwwLDgzLDQxLDQsMTIyLDE1NSw4NCwxMTQsMTIxLDMyLDExNiwxMTEsCisgICAgMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLAorICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMjEsMzIsMTAwLDEwMSwxMDgsMTAxLDEwMywKKyAgICA5NywxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTUsMTAxLDEwOCwKKyAgICAxMDIsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsNDEsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwKKyAgICAxMDAsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDMyLAorICAgIDEwNSwxMTAsMzIsMTAyLDk3LDExOCwxMTEsMTE0LDMyLDExMSwxMDIsMzIsMTAyLDEwNSwxMTAsMTAwLAorICAgIDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDQwLDQxLDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDc4LDEyMiw0NCw3OCwxMTEsMTE2LDMyLDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwNSwxMTAsMTAzLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsMzIsCisgICAgMTIzLDEyNSw1OCwzMiwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsOTUsOTUsMTA1LDExMCwKKyAgICAxMDUsMTE2LDk1LDk1LDExNCw4NCwwLDAsMCw0MSw2LDIxOCwxMSwxMDIsMTA1LDExMCwKKyAgICAxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsMzEsMCwwLDAsMjE4LDksOTUsCisgICAgMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDIxOCw0LDExOSw5NywxMTQsMTEwLDExNCw0NywKKyAgICAwLDAsMCwyMTgsMTMsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw4Nyw5NywxMTQsMTEwLDEwNSwKKyAgICAxMTAsMTAzLDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMjE4LDYsCisgICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwyMTgsOCwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LAorICAgIDIxOCwzLDEwOSwxMTUsMTAzLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCwxNyw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDUzLDIsMCwwLDExNSwxMCwwLDAsMCwKKyAgICAwLDEwLDIxLDEsMjQsMSw2LDEsMzIsMSwxMTQsMTcyLDAsMCwwLDk5LAorICAgIDIsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDMsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDkzLDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMjQsCisgICAgMCwwLDEzMSwyLDAsMTI1LDIsMCwxMTYsMSwwLDEyNCwyLDAsMTMxLDEsCisgICAgMCwxMjUsMywwLDEyNCwxLDAsMTE2LDIsMCwxMDYsMywwLDEwNyw2LDAsCisgICAgMTE0LDc5LDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMjUsMTI1LDQsMCwKKyAgICAxMjQsMywwLDEwNiw0LDAsMTI0LDQsMCwxMzEsMSwwLDEsMTE2LDIsMCwKKyAgICAxMDYsMywwLDEyNCwxLDAsMjUsODMsMTI0LDMsMCwxMDYsNSwwLDEzMSwwLAorICAgIDAsODMsMTAwLDEsMCw4Myw0MSwyLDEyMiwxMjgsNzYsMTExLDk3LDEwMCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwKKyAgICAxMDUsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsCisgICAgMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsCisgICAgMTAxLDEwMCw0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCisgICAgMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExMCwxMTUsMTE2LAorICAgIDEwMSw5NywxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsNDEsNiwyMTgsMTYsMTE1LAorICAgIDExMiwxMDEsOTksOTUsMTAyLDExNCwxMTEsMTA5LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LAorICAgIDEyLDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMTE0LDcsMCwKKyAgICAwLDAsMTE0LDczLDAsMCwwLDIxOCw0LDEwMSwxMjAsMTAxLDk5LDIxOCw0LDEwOCwKKyAgICAxMTEsOTcsMTAwLDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMjE4LAorICAgIDQsMTE1LDExMiwxMDEsOTksMjE4LDcsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDIxOCw2LAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCwxNyw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksNzAsMiwwLDAsMTE1LDE0LDAsMCwKKyAgICAwLDAsNiwxNSwxLDEyLDEsMTUsMSwxMywxLDEzLDEsMTEsMiwxMTQsCisgICAgMTgwLDAsMCwwLDk5LDQsMCwwLDAsMCwwLDAsMCwxMSwwLDAsCisgICAgMCwxOSwwLDAsMCw2NywwLDAsMCwxMTUsMjQzLDEsMCwwLDEwNSwwLAorICAgIDAsMTI1LDQsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMzEsMCwKKyAgICAxMjQsMiwwLDEyNCw0LDAsMTAwLDIsMCw2MCwxMTAsNiwwLDEwMCwzLDAsCisgICAgMTI1LDIsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsNjIsMCwxMjQsCisgICAgMywwLDEyNCw0LDAsMTAwLDQsMCw2MCwxMTAsMCwwLDEyNCwwLDAsMTAwLAorICAgIDEsMCwxMDAsNSwwLDEzMywyLDAsMjUsMTI1LDUsMCwxMjQsMCwwLDEwMCwKKyAgICA1LDAsMTAwLDYsMCwxMzMsMiwwLDI1LDEyNSw2LDAsMTI0LDAsMCwxMDAsCisgICAgNiwwLDEwMCw3LDAsMTMzLDIsMCwyNSwxMjUsNywwLDEyNCw1LDAsMTE2LAorICAgIDAsMCwxMDcsMywwLDExNCwxNjgsMCwxMDAsOCwwLDEwNiwxLDAsMTI0LDIsCisgICAgMCwxMjQsNSwwLDEzMSwyLDAsMTI1LDgsMCwxMTYsMiwwLDEyNCw4LDAsCisgICAgMTMxLDEsMCwxLDExNiwzLDAsMTI0LDgsMCwxMjQsNCwwLDE0MSwxLDAsCisgICAgMTMwLDEsMCwxMTAsMTE2LDAsMTE2LDQsMCwxMjQsNiwwLDEzMSwxLDAsMTAwLAorICAgIDUsMCwxMDcsMywwLDExNCwyMjYsMCwxMDAsOSwwLDEwNiwxLDAsMTI0LDIsCisgICAgMCwxMzEsMSwwLDEyNSw4LDAsMTE2LDIsMCwxMjQsOCwwLDEzMSwxLDAsCisgICAgMSwxMTYsNSwwLDEyNCw4LDAsMTMxLDEsMCwxMzAsMSwwLDExMCw1OCwwLAorICAgIDExNiw0LDAsMTI0LDcsMCwxMzEsMSwwLDEwMCw1LDAsMTA3LDMsMCwxMTQsCisgICAgMjgsMSwxMDAsMTAsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsOCwKKyAgICAwLDExNiwyLDAsMTI0LDgsMCwxMzEsMSwwLDEsMTE2LDUsMCwxMjQsOCwKKyAgICAwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwxLDAsMTAwLDEsMCwKKyAgICAxMDcsOSwwLDExNCwyMjksMSwxMjEsMjAsMCwxMTYsNiwwLDEyNCwxLDAsMTAwLAorICAgIDExLDAsMjUsMTMxLDEsMCwxMjUsOSwwLDg3LDExMCwxOCwwLDQsMTE2LDcsCisgICAgMCwxMDcsMTAsMCwxMTQsODAsMSwxLDEsMSw4OSwxMTAsNjIsMCw4OCwxMTYsCisgICAgOCwwLDEyNCw2LDAsMTMxLDEsMCwxMjQsOSwwLDEwNywzLDAsMTE0LDE0MiwKKyAgICAxLDEwMCwxMiwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw4LDAsCisgICAgMTE2LDIsMCwxMjQsOCwwLDEzMSwxLDAsMSwxMTYsMywwLDEyNCw4LDAsCisgICAgMTI0LDQsMCwxNDEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjEsMTgsMCwxMjQsCisgICAgMSwwLDEwMCwxMywwLDI1LDEwMCwxNCwwLDY0LDEyNSwxMCwwLDg3LDExMCwxOCwKKyAgICAwLDQsMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTgwLDEsMSwxLDEsODksMTEzLAorICAgIDIyOSwxLDg4LDExNiw4LDAsMTI0LDcsMCwxMzEsMSwwLDEyNCwxMCwwLDEwNywKKyAgICAzLDAsMTE0LDIyOSwxLDExNiwzLDAsMTAwLDEyLDAsMTA2LDEsMCwxMjQsMiwKKyAgICAwLDEzMSwxLDAsMTI0LDQsMCwxNDEsMSwwLDEzMCwxLDAsMTEzLDIyOSwxLAorICAgIDExMCwwLDAsMTI0LDAsMCwxMDAsNywwLDEwMCwxLDAsMTMzLDIsMCwyNSwKKyAgICA4Myw0MSwxNSw5NywxMjIsMSwwLDAsODYsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDQsMTAxLDk3LDEwMCwxMDEsMTE0LDMyLDExMSwxMDIsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCw0NSwxMDUsMTEwLDMyLDk4LDEyMSwxMTYsCisgICAgMTAxLDk5LDExMSwxMDAsMTAxLDMyLDk3LDEwMyw5NywxMDUsMTEwLDExNSwxMTYsMzIsMTE1LDExMSwKKyAgICAxMTcsMTE0LDk5LDEwMSw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMzIsNDAsMTA1LDEwMiwxMCwzMiwKKyAgICAzMiwzMiwzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDQxLDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwKKyAgICAxMTYsMTE3LDExNCwxMTAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsOTgsMTIxLDExNiwxMDEsCisgICAgOTksMTExLDEwMCwxMDEsMzIsMTE2LDEwNCw5NywxMTYsMzIsOTksOTcsMTEwLDMyLDk4LDEwMSwKKyAgICAzMiw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk5LDExMSwxMDksCisgICAgMTEyLDEwNSwxMDgsMTAxLDQwLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsCisgICAgMzIsMTExLDExNiwxMDQsMTAxLDExNCwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMTE1LAorICAgIDMyLDk3LDExNCwxMDEsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDExMCwxMDQsCisgICAgOTcsMTEwLDk5LDEwMSwzMiwxMDEsMTE0LDExNCwxMTEsMTE0LDMyLDExNCwxMDEsMTEyLDExMSwxMTQsCisgICAgMTE2LDEwNSwxMTAsMTAzLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwKKyAgICAzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDk3LDEwMywxMDUsOTksMzIsCisgICAgMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNSwxMTAsOTksMTExLDExNCwxMTQsCisgICAgMTAxLDk5LDExNiwzMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDk5LAorICAgIDExMSwxMDAsMTAxLDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwKKyAgICAzMiwxMTYsMTExLDMyLDk4LDEwMSwzMiwxMTUsMTE2LDk3LDEwOCwxMDEsNDYsMzIsNjksNzksCisgICAgNzAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwKKyAgICAzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMDUsCisgICAgMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsMTE2LDExMSwzMiw5OCwxMDEsMTAsMzIsMzIsCisgICAgMzIsMzIsMTE2LDExNCwxMTcsMTEwLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDc4LDExNCw2NywwLDAsMCwxMjIsMTAsNjAsOTgsMTIxLDExNiwxMDEsOTksCisgICAgMTExLDEwMCwxMDEsNjIsMTE0LDM1LDAsMCwwLDExNCwxMiwwLDAsMCwyMzMsOCwKKyAgICAwLDAsMCwyMzMsMTIsMCwwLDAsMTIyLDMwLDk4LDk3LDEwMCwzMiwxMDksOTcsCisgICAgMTAzLDEwNSw5OSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDEwNSwxMTAsMzIsMTIzLDMzLAorICAgIDExNCwxMjUsNTgsMzIsMTIzLDMzLDExNCwxMjUsMTIyLDQzLDExNCwxMDEsOTcsOTksMTA0LDEwMSwKKyAgICAxMDAsMzIsNjksNzksNzAsMzIsMTE5LDEwNCwxMDUsMTA4LDEwMSwzMiwxMTQsMTAxLDk3LDEwMCwKKyAgICAxMDUsMTEwLDEwMywzMiwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDEwNSwxMTAsCisgICAgMzIsMTIzLDMzLDExNCwxMjUsMTIyLDQ4LDExNCwxMDEsOTcsOTksMTA0LDEwMSwxMDAsMzIsNjksCisgICAgNzksNzAsMzIsMTE5LDEwNCwxMDUsMTA4LDEwMSwzMiwxMTQsMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywKKyAgICAzMiwxMTUsMTA1LDEyMiwxMDEsMzIsMTExLDEwMiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLAorICAgIDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMjE4LDUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMjIsMjYsCisgICAgOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMTUsMTE2LDk3LDEwOCwKKyAgICAxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTIzLDMzLDExNCwxMjUsMjE4LDQsMTE1LDEwNSwxMjIsMTAxLAorICAgIDEwOCwzLDAsMCwwLDI1NSwxMjcsMjU1LDEyNywzLDAsNDEsOSwyMTgsMTIsNzcsCisgICAgNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsMTE0LDQ3LDAsMCwwLAorICAgIDExNCwxNTIsMCwwLDAsMTE0LDE1MywwLDAsMCwxMTQsMzEsMCwwLDAsMjE4LAorICAgIDgsNjksNzksNzAsNjksMTE0LDExNCwxMTEsMTE0LDExNCwxNCwwLDAsMCwxMTQsNzksCisgICAgMCwwLDAsMTE0LDE5LDAsMCwwLDQxLDExLDExNCw1MywwLDAsMCwyMTgsCisgICAgMTIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE0LDY3LDAsCisgICAgMCwwLDExNCwzNSwwLDAsMCw5MCwxMSwxMDEsMTIwLDk5LDk1LDEwMCwxMDEsMTE2LAorICAgIDk3LDEwNSwxMDgsMTE1LDkwLDUsMTA5LDk3LDEwMywxMDUsOTksOTAsMTMsMTE0LDk3LDExOSwKKyAgICA5NSwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDkwLDgsMTE0LDk3LDExOSw5NSwKKyAgICAxMTUsMTA1LDEyMiwxMDEsMTE0LDE1MSwwLDAsMCwyMTgsMTIsMTE1LDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDIxOCwxMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LAorICAgIDExNSwxMDUsMTIyLDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsMjUsOTUsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTgsCisgICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTA0LDEwMSw5NywxMDAsMTAxLDExNCw4NiwyLAorICAgIDAsMCwxMTUsNzYsMCwwLDAsMCwxMSw2LDEsMTIsMSwxMywzLDYsCisgICAgMSwxMiwxLDEzLDEsMTYsMSwxNiwxLDE2LDEsMTIsMSwxOCwxLDEwLAorICAgIDEsMTgsMSwxOCwxLDE1LDEsMTAsMSwxNSwxLDE4LDEsMTUsMSwxMCwKKyAgICAxLDE1LDEsMTIsMSwzLDEsMjAsMSwxMywxLDUsMiwxOCwxLDE1LAorICAgIDEsMTAsMSwxOCwxLDMsMSwxOCwxLDEzLDEsNSwyLDE4LDEsMTUsCisgICAgMSwxNSwxLDExNCwxOTAsMCwwLDAsOTksNCwwLDAsMCwwLDAsMCwKKyAgICAwLDUsMCwwLDAsNiwwLDAsMCw2NywwLDAsMCwxMTUsMTE1LDAsCisgICAgMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDQsCisgICAgMCwxMTYsMiwwLDEyNCw0LDAsMTE2LDMsMCwxMzEsMiwwLDExNCw3OCwwLAorICAgIDExNiw0LDAsMTAwLDEsMCwxMjQsMiwwLDEzMSwyLDAsMSwxMjQsMywwLAorICAgIDEwMCwyLDAsMTA3LDksMCwxMTQsNzQsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LAorICAgIDQsMCwxMjQsMywwLDEzMSwyLDAsMSwxMTAsMCwwLDEyNCw0LDAsODMsCisgICAgMTE2LDcsMCwxMDAsMywwLDEwNiw4LDAsMTI0LDIsMCwxMzEsMSwwLDEwMCwKKyAgICA0LDAsMTI0LDEsMCwxMDAsNSwwLDEyNCwyLDAsMTMxLDEsMiwxMzAsMSwKKyAgICAwLDEwMCwyLDAsODMsNDEsNiwxMjIsNjAsNjcsMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsCisgICAgMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsOTcsMTE1LDMyLDExNCwxMDEsMTE2LAorICAgIDExNywxMTQsMTEwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk1LDExOCw5NywxMDgsMTA1LDEwMCw5NywKKyAgICAxMTYsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDEwNCwxMDEsOTcsMTAwLAorICAgIDEwMSwxMTQsNDAsNDEsNDYsMTIyLDIxLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLAorICAgIDk5LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsNzgsMTIyLDIzLDc4LAorICAgIDExMSwxMTAsNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwNSwKKyAgICAxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCwKKyAgICA0MSw5LDIxOCw3LDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsOTAsNSwxMDgsMTExLDk3LAorICAgIDEwMCwxMTUsMjE4LDEwLDEwNSwxMTUsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMjE4LDEwLAorICAgIDk1LDk5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTQsMTUyLDAsMCwwLDExNCwKKyAgICAxMDYsMCwwLDAsOTAsMTYsOTUsMTAyLDEwNSwxMjAsOTUsOTksMTExLDk1LDEwMiwxMDUsCisgICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTQsMTUzLDAsMCwwLDExNCw0NywwLDAsMCwKKyAgICA0MSw1LDExNCw1MywwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE0MCwwLDAsCisgICAgMCwxMTQsMTQxLDAsMCwwLDIxOCw0LDk5LDExMSwxMDAsMTAxLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNyw5NSw5OSwxMTEsCisgICAgMTA5LDExMiwxMDUsMTA4LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxNDEsMiwKKyAgICAwLDAsMTE1LDE2LDAsMCwwLDAsMiwxNSwxLDE1LDEsMTMsMSwxMiwKKyAgICAxLDE5LDEsNCwyLDE4LDEsMTE0LDE5NSwwLDAsMCwxMTQsODQsMCwwLAorICAgIDAsOTksMywwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsNzYsMCwwLDAsMTE2LDAsMCwxMTYsMSwKKyAgICAwLDEzMSwxLDAsMTI1LDMsMCwxMjQsMywwLDEwNiwyLDAsMTE2LDMsMCwKKyAgICAxMjQsMSwwLDEzMSwxLDAsMTMxLDEsMCwxLDEyNCwzLDAsMTA2LDIsMCwKKyAgICAxMTYsMywwLDEyNCwyLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDMsMCwKKyAgICAxMDYsMiwwLDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLAorICAgIDEsMCwxLDEyNCwzLDAsODMsNDEsMSwxMjIsODAsNjcsMTExLDEwOSwxMTIsMTA1LAorICAgIDEwOCwxMDEsMzIsOTcsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LAorICAgIDMyLDEwNSwxMTAsMTE2LDExMSwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsCisgICAgMTExLDExNCwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDExNywxMTYsMzIsMTE2LAorICAgIDExMSwzMiw5NywzMiw5OCwxMjEsMTE2LDEwMSw0NSw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwKKyAgICAxMDAsMTAsMzIsMzIsMzIsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDQxLDYsMjE4LDksOTgsCisgICAgMTIxLDExNiwxMDEsOTcsMTE0LDExNCw5NywxMjEsMTE0LDE4NSwwLDAsMCwyMTgsNiwxMDEsCisgICAgMTIwLDExNiwxMDEsMTEwLDEwMCwxMTQsMTcsMCwwLDAsMTE0LDE5MSwwLDAsMCw5MCwKKyAgICA1LDEwMCwxMTcsMTA5LDExMiwxMTUsNDEsNCwxMTQsMTk0LDAsMCwwLDExNCwxODMsMCwKKyAgICAwLDAsMTE0LDE4OSwwLDAsMCwxMTQsNTMsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk1LDk5LDExMSwKKyAgICAxMDAsMTAxLDk1LDExNiwxMTEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTUzLDIsCisgICAgMCwwLDExNSwxMCwwLDAsMCwwLDMsMTIsMSwxOSwxLDE5LDEsMjIsCisgICAgMSwxMTQsMTk4LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCw1LAorICAgIDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDg5LDAsMCwwLAorICAgIDEwMCwxLDAsMTAwLDIsMCwxMDgsMCwwLDEyNSwxLDAsMTE2LDEsMCwxMDYsCisgICAgMiwwLDEyNCwwLDAsMTMxLDEsMCwxMDYsMywwLDEyNSwyLDAsMTI0LDEsCisgICAgMCwxMDYsNCwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsMywwLDExNiwxLDAsCisgICAgMTA2LDUsMCwxMDAsMiwwLDEwMCwzLDAsMTMxLDIsMCwxMjUsNCwwLDEyNCwKKyAgICA0LDAsMTA2LDYsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDMsMCwxMDAsMSwKKyAgICAwLDI1LDEzMSwxLDAsMTMxLDEsMCw4Myw0MSw0LDEyMiwxMjEsNjgsMTAxLDk5LAorICAgIDExMSwxMDAsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwKKyAgICAxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwKKyAgICAxMDAsMTAxLDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTE1LDExNiwxMTQsMTA1LDExMCwxMDMsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODUsCisgICAgMTEwLDEwNSwxMTgsMTAxLDExNCwxMTUsOTcsMTA4LDMyLDExMCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSwKKyAgICAzMiwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsCisgICAgMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsCisgICAgNDYsMTAsMzIsMzIsMzIsMzIsMTE0LDg0LDAsMCwwLDc4LDg0LDQxLDcsMjE4LAorICAgIDgsMTE2LDExMSwxMDcsMTAxLDExMCwxMDUsMTIyLDEwMSwxMTQsNDksMCwwLDAsOTAsNywKKyAgICA2NiwxMjEsMTE2LDEwMSwxMTUsNzMsNzksOTAsOCwxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwKKyAgICAxMDEsOTAsMTUsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiw5NSwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LAorICAgIDExMCwxMDMsOTAsMjUsNzMsMTEwLDk5LDExNCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDEwOCw3OCwKKyAgICAxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDIxOCw2LDEwMCwKKyAgICAxMDEsOTksMTExLDEwMCwxMDEsNDEsNSwyMTgsMTIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwKKyAgICA5OCwxMjEsMTE2LDEwMSwxMTUsMTE0LDE5OSwwLDAsMCw5MCwyMSwxMTUsMTExLDExNywxMTQsCisgICAgOTksMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwKKyAgICAxMDEsMjE4LDgsMTAxLDExMCw5OSwxMTEsMTAwLDEwNSwxMTAsMTAzLDkwLDE1LDExMCwxMDEsMTE5LAorICAgIDEwOCwxMDUsMTEwLDEwMSw5NSwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDExNCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTMsMTAwLDEwMSw5OSwKKyAgICAxMTEsMTAwLDEwMSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDE2MywyLDAsMCwxMTUsMTAsCisgICAgMCwwLDAsMCw1LDEyLDEsMTgsMSwxNSwxLDE4LDEsMTE0LDIwMywwLAorICAgIDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwzNSwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTUsMSwwLDAsMTE2LDAsMCwxMjQsCisgICAgMCwwLDEwMCwxLDAsMTAwLDAsMCwxMzEsMywwLDEyNSwxLDAsMTE2LDEsCisgICAgMCwxMjQsMSwwLDEwMCwyLDAsMTMxLDIsMCwxMTQsNzQsMCwxMjEsMTcsMCwKKyAgICAxMjQsMSwwLDEwNiwyLDAsMTI0LDAsMCwxMzEsMSwwLDgzLDg3LDExMyw3NCwKKyAgICAwLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNzAsMCwxLDEsMSw4OSwxMTMsCisgICAgNzQsMCw4OCwxMTAsMCwwLDEyMSwxMywwLDEyNCwwLDAsMTA2LDQsMCwxMjUsCisgICAgMiwwLDg3LDExMCwxOCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsMTA3LDAsCisgICAgMSwxLDEsODksMTEwLDI5LDAsODgsMTI0LDIsMCwxMDAsMCwwLDEwNyw5LAorICAgIDAsMTE0LDEzNiwwLDExNiw2LDAsMTI0LDIsMCwxMzEsMSwwLDEwNiwyLDAsCisgICAgMTMxLDAsMCw4MywxMjEsMTMsMCwxMjQsMCwwLDEwNiw3LDAsMTI1LDMsMCwKKyAgICA4NywxMTAsMjQsMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDE3NSwwLDEsMSwKKyAgICAxLDEwMCwzLDAsMTI1LDMsMCw4OSwxMTAsMSwwLDg4LDEyMSwxMywwLDEyNCwKKyAgICAwLDAsMTA2LDgsMCwxMjUsNCwwLDg3LDExMCw1OSwwLDQsMTE2LDUsMCwKKyAgICAxMDcsMTAsMCwxMTQsMjUwLDAsMSwxLDEsMTI0LDEsMCwxMDAsMCwwLDEwNywKKyAgICA4LDAsMTE0LDIzMCwwLDEwMCw0LDAsMTA2LDksMCwxMjQsMywwLDEzMSwxLAorICAgIDAsODMsMTAwLDUsMCwxMDYsOSwwLDEyNCwzLDAsMTI0LDEsMCwxMzEsMiwKKyAgICAwLDgzLDg5LDExMCwxNywwLDg4LDEwMCw2LDAsMTA2LDksMCwxMjQsMywwLAorICAgIDEyNCw0LDAsMTMxLDIsMCw4MywxMDAsMCwwLDgzLDQxLDcsNzgsMjE4LDEwLAorICAgIDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMjE4LDExLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwyNTAsMSw2MywxMjIsMTMsNjAsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNjIsMTIyLDIwLDYwLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDEyMywzMywxMTQsMTI1LDQxLDYyLDEyMiwKKyAgICAyMyw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiwxMDIsMTE0LAorICAgIDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsNjIsNDEsMTAsMTE0LDYyLDAsMCwwLDExNCwKKyAgICA2MCwwLDAsMCwxMTQsMjA1LDAsMCwwLDIxOCw5LDY5LDEyMCw5OSwxMDEsMTEyLAorICAgIDExNiwxMDUsMTExLDExMCwyMTgsOCw5NSw5NSwxMTUsMTEyLDEwMSw5OSw5NSw5NSwyMTgsMTQsCisgICAgNjUsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTQsMTc0LAorICAgIDAsMCwwLDExNCw1NywwLDAsMCwyMTgsOCw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsCisgICAgOTUsOTUsMTE0LDQ3LDAsMCwwLDQxLDUsMTE0LDE3OSwwLDAsMCwxMTQsMTY5LAorICAgIDAsMCwwLDExNCwxNzcsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwxMzEsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDEyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxNzcsCisgICAgMiwwLDAsMTE1LDQ2LDAsMCwwLDAsMiwxOCwxLDE1LDQsMywxLAorICAgIDE3LDEsMTMsMSw4LDEsMywxLDEzLDEsMTMsMSw1LDIsMTIsMSwKKyAgICAxNiw0LDMsMSwxMywxLDEzLDEsMTEsMSwzLDEsMTMsMSwxMywxLAorICAgIDEyLDEsMTMsMiwyMSwyLDExNCwyMTEsMCwwLDAsOTksMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwKKyAgICAxMTUsNTIsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLAorICAgIDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywwLDEwMCwzLDAsCisgICAgMTAwLDQsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLAorICAgIDAsMCw5MCw1LDAsMTAwLDcsMCw4Myw0MSw4LDIxOCwxNyw5NSwxMDUsMTEwLAorICAgIDExNSwxMTYsOTcsMTA4LDEwOCwxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwxMjEsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMjUsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsCisgICAgMCwxMjQsMSwwLDEwNiwxLDAsMTI0LDAsMCw5NSwyLDAsMTAwLDAsMCwKKyAgICA4Myw0MSwxLDc4LDQxLDMsMjE4LDcsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LAorICAgIDIwOCwwLDAsMCwyMTgsNSw5NSwxMTUsMTEyLDEwMSw5OSw0MSwyLDExNCw3MSwwLAorICAgIDAsMCwxMTQsMTc5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCw3MiwwLDAsMCwyMTUsMiwwLDAsMTE1LAorICAgIDQsMCwwLDAsMCwxLDksMSwxMjIsMjYsOTUsMTA1LDExMCwxMTUsMTE2LDk3LAorICAgIDEwOCwxMDgsMTAxLDEwMCw5NSwxMTUsOTcsMTAyLDEwMSwxMDgsMTIxLDQ2LDk1LDk1LDEwNSwxMTAsCisgICAgMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCisgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwzOCwwLDAsMCwxMDAsMSwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCw5NSwxLDAsMTI0LDAsMCwxMDYsMiwwLAorICAgIDExNiwzLDAsMTA2LDQsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDUsMCw2MCwKKyAgICAxMDAsMCwwLDgzLDQxLDIsNzgsODQsNDEsNiwxMTQsMjE0LDAsMCwwLDIxOCwKKyAgICAxMyw5NSwxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwNSwxMTAsMTAzLDExNCwyMTMsCisgICAgMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwwLDExNCw2NywwLAorICAgIDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzUsMCwwLDAsMjE5LDIsMCwKKyAgICAwLDExNSw0LDAsMCwwLDAsNCwxMiwxLDEyMiwyNyw5NSwxMDUsMTEwLDExNSwKKyAgICAxMTYsOTcsMTA4LDEwOCwxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwxMjEsNDYsOTUsOTUsCisgICAgMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMywwLDAsMCwxNywwLDAsMCw3MSwwLDAsMCwxMTUsMTIxLDAsMCwKKyAgICAwLDEyMiwxMDEsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDIsMCwxMTYsMSwwLAorICAgIDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDEyNCwxLDAsNjgsMTMxLDEsMCwKKyAgICAxMzEsMSwwLDExNCw3OCwwLDEyMSwxNywwLDExNiwyLDAsMTA2LDMsMCwxMjQsCisgICAgMiwwLDEwNiw0LDAsNjEsODcsMTEzLDEwMCwwLDQsMTE2LDUsMCwxMDcsMTAsCisgICAgMCwxMTQsNzQsMCwxLDEsMSw4OSwxMTMsMTAwLDAsODgsMTEwLDIyLDAsMTE2LAorICAgIDYsMCwxMDAsMywwLDEyNCwyLDAsMTA2LDQsMCwxMjQsMiwwLDEwNiw3LAorICAgIDAsMTMxLDMsMCwxLDg3LDEwMCwwLDAsMTAwLDQsMCwxMjQsMCwwLDEwNiwKKyAgICAwLDAsOTUsOCwwLDg4LDEwMCwwLDAsODMsNDEsNSw3OCw5OSwxLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDExNSwwLAorICAgIDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLDAsCisgICAgMTI0LDEsMCwxMDAsMCwwLDEwNyw5LDAsODYsMSwxMTMsMywwLDEwMCwwLAorICAgIDAsODMsNDEsMSw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwyMiwwLDAsCisgICAgMCwxMTQsNzYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDc3LDAsMCwwLDIyOSwyLDAsMCwxMTUsMiwKKyAgICAwLDAsMCw2LDAsMTIyLDQ1LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDEwMSwKKyAgICAxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsCisgICAgOTUsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwKKyAgICAxMjAsMTEyLDExNCw2MiwxMjIsMTgsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTIzLDMzLDExNCwKKyAgICAxMjUsMzIsMzUsMzIsMTIzLDMzLDExNCwxMjUsNzAsNDEsOSwxMTQsMjE0LDAsMCwwLAorICAgIDExNCw3OCwwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzMsMCwwLDAsMTE0LAorICAgIDY3LDAsMCwwLDExNCw3OSwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCwxNjksCisgICAgMCwwLDAsMTE0LDIxNSwwLDAsMCw0MSwzLDExNCw3MSwwLDAsMCwxMTQsCisgICAgODAsMCwwLDAsMTE0LDE3NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsODEsMCwwLDAsMjI2LDIsMCwKKyAgICAwLDExNSwxOCwwLDAsMCwwLDEsMywxLDksMSwyNSwxLDMsMSwKKyAgICAxNywxLDEzLDEsOCwyLDI2LDIsMTIyLDI2LDk1LDEwNSwxMTAsMTE1LDExNiw5NywKKyAgICAxMDgsMTA4LDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw0Niw5NSw5NSwxMDEsMTIwLAorICAgIDEwNSwxMTYsOTUsOTUsNzgsNDEsNiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwKKyAgICAwLDExNCw1OCwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDc1LDAsMCwwLAorICAgIDExNCw4MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjEyLDAsMCwwLDIxMywyLAorICAgIDAsMCwxMTUsNiwwLDAsMCwxMiwyLDEyLDQsMTIsNywxMTQsMjEyLDAsCisgICAgMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgsCisgICAgMCwwLDAsNjQsMCwwLDAsMTE1LDE3MiwwLDAsMCwxMDEsMCwwLDkwLAorICAgIDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwKKyAgICAwLDEwMCwzLDAsMTAwLDQsMCwxMDAsMywwLDEwMCw1LDAsMTAwLDMsMCwKKyAgICAxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMyw5MCw0LDAsMTAwLDgsMCwxMDAsCisgICAgOSwwLDEzMiwwLDAsOTAsNSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLAorICAgIDAsOTAsNiwwLDEwMSw3LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwKKyAgICAxMzEsMSwwLDkwLDgsMCwxMDEsOCwwLDEwNiw5LDAsMTAwLDE0LDAsMTAwLAorICAgIDEzLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNywwLDEwMCwxNSwKKyAgICAwLDEwMCwxNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSw3LDAsCisgICAgMTAwLDE3LDAsMTAwLDE4LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDExLDAsMTAxLAorICAgIDExLDAsMTA2LDksMCwxMDAsMTksMCwxMDAsMTgsMCwxMzIsMCwwLDEzMSwxLAorICAgIDAsOTAsMTEsMCwxMDAsMywwLDgzLDQxLDIwLDIxOCwxMCw3NywxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDgzLDExMiwxMDEsOTksOTcsMjA4LDUsMCwwLDg0LDEwNCwxMDEsMzIsMTE1LAorICAgIDExMiwxMDEsOTksMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDEwMiwxMTEsMTE0LAorICAgIDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDExNywxMTUsMTAxLDEwMCwzMiwKKyAgICAxMDIsMTExLDExNCwzMiwxMDgsMTExLDk3LDEwMCwxMDUsMTEwLDEwMyw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiw2NSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTE1LDExMiwxMDEsCisgICAgOTksMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLAorICAgIDEwMiwxMTEsMTE0LDMyLDEwNSwxMTAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMDUsMTExLDExMCwzMiwKKyAgICA5Nyw5OCwxMTEsMTE3LDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA0NiwzMiwzMiw3MCwxMTEsMTE0LDEwLDMyLDMyLDMyLDMyLDEwMCw5NywxMTYsOTcsMzIsCisgICAgOTcsMTE1LDExNSwxMTEsOTksMTA1LDk3LDExNiwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMDUsMTEwLDk5LDEwOCwKKyAgICAxMTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDQsMzIsMTE3LDExNSwKKyAgICAxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzksMTE1LDEwLDMyLDMyLDMyLAorICAgIDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsMTEwLAorICAgIDk3LDEwOSwxMDEsOTYsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiw5Nyw5OCwxMTUsMTExLAorICAgIDEwOCwxMTcsMTE2LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDMyLDMyLDk2LDEwOCwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsOTYsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTE5LDEwNCwxMDEsMTEwLAorICAgIDMyLDEwOCwxMTEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDQ2LDMyLDMyLDk2LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTYsMzIsMTA1LAorICAgIDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsCisgICAgMTAxLDEwLDMyLDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDEwNSwxMTAsNDYsMzIsCisgICAgMzIsODQsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTUsMzIsMTAwLAorICAgIDEwMSwxMTQsMTA1LDExOCwxMDEsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTAsOTcsMTA5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NiwxMDUsMTE1LDk1LDExMiwKKyAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NiwzMiwxMDAsMTAxLDExNiwxMDEsMTE0LDEwOSwxMDUsMTEwLAorICAgIDEwMSwxMTUsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAzMiwxMDUsMTE1LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwxMDEsMTAwLDMyLDk3LAorICAgIDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTEsMTE0LDEwLDMyLDMyLDMyLDMyLAorICAgIDExMCwxMTEsMTE2LDQ2LDMyLDMyLDc5LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsCisgICAgMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMDIsMTA4LDEwMSw5OSwxMTYsCisgICAgMTAxLDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsOTYsOTUsOTUsMTEyLDk3LDExNiwKKyAgICAxMDQsOTUsOTUsOTYsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDk2LDExMSwxMTQsMTA1LDEwMywxMDUsMTEwLDk2LDMyLDEwNSwxMTUsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsOTksMzIsMTA4LDExMSwKKyAgICA5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDk4LDEyMSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTksCisgICAgMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDgsMTExLDk3LDEwMCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMDUsMTAyLDMyLAorICAgIDExNiwxMDQsOTcsMTE2LDMyLDEwNSwxMTAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMDUsMTExLDExMCwKKyAgICAzMiwxMDUsMTE1LDMyLDk3LDExOCw5NywxMDUsMTA4LDk3LDk4LDEwOCwxMDEsNDYsMzIsMzIsCisgICAgODcsMTA0LDEwMSwxMTAsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDEwNSwxMTUsCisgICAgMTAsMzIsMzIsMzIsMzIsMTE1LDEwMSwxMTYsNDQsMzIsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsCisgICAgMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDEwOSw5NywxMTYsOTksMTA0LDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDk2LDEwNCw5NywxMTUsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsOTYsCisgICAgMzIsMTA1LDExMCwxMDAsMTA1LDk5LDk3LDExNiwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDMyLAorICAgIDk3LDMyLDExNSwxMTIsMTAxLDk5LDM5LDExNSwzMiwzNCwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCwKKyAgICAzNCwzMiwxMTQsMTAxLDEwMiwxMDgsMTAxLDk5LDExNiwxMTUsMzIsOTcsMzIsMTA4LDExMSw5OSwKKyAgICA5NywxMTYsMTA1LDExMSwxMTAsNDYsMTAsMzIsMzIsMzIsMzIsODcsMTA0LDEwMSwxMTAsMzIsCisgICAgMTE2LDEwNCwxMDUsMTE1LDMyLDEwNSwxMTUsMzIsODQsMTE0LDExNywxMDEsNDQsMzIsOTYsOTUsCisgICAgOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDk1LDk2LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsCisgICAgMTE2LDEwMSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDMyLDEwNSwxMTUsMzIsMTE1LDEwMSwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsOTksCisgICAgOTcsOTksMTA0LDEwMSwxMDAsOTYsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLAorICAgIDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LAorICAgIDk5LDEwNCwxMDEsMTAwLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsCisgICAgMTA4LDEwMSw0NCwzMiwxMDUsMTAyLDMyLDk3LDExMCwxMjEsNDYsMzIsMzIsNzMsMTE2LDEwLAorICAgIDMyLDMyLDMyLDMyLDk5LDExMSwxMTQsMTE0LDEwMSwxMTUsMTEyLDExMSwxMTAsMTAwLDExNSwzMiwKKyAgICAxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDk2LDk1LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTAwLAorICAgIDk1LDk1LDk2LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiw5NiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwKKyAgICAxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsOTYsCisgICAgMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLDExMywxMTcsMTAxLDExMCw5OSwxMDEsCisgICAgMzIsMTExLDEwMiwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTA1LDEwMSwxMTUsCisgICAgMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTE5LAorICAgIDEwNCwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDMyLDExNSwxMTcsCisgICAgOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDMyLDMyLDczLDEwMiwzMiwxMTUsMTAxLAorICAgIDExNiw0NCwzMiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTUsMTA0LAorICAgIDExMSwxMTcsMTA4LDEwMCwzMiw5OCwxMDEsMTAsMzIsMzIsMzIsMzIsODQsMTE0LDExNywxMDEsCisgICAgNDUsNDUsOTcsMTEwLDEwMCwzMiw3MCw5NywxMDgsMTE1LDEwMSwzMiwxMTEsMTE2LDEwNCwxMDEsCisgICAgMTE0LDExOSwxMDUsMTE1LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4MCw5Nyw5OSwxMDcsCisgICAgOTcsMTAzLDEwMSwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMzIsNDAsMTA5LDk3LAorICAgIDEyMSw0MSwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDExNSw0NiwzMiwzMiw3MywxMDIsMzIsOTcsMzIsMTE1LDExMiwxMDEsOTksMTAsMzIsCisgICAgMzIsMzIsMzIsMTA0LDk3LDExNSwzMiw5NywzMiwxMTAsMTExLDExMCw0NSw3OCwxMTEsMTEwLAorICAgIDEwMSwzMiwxMTgsOTcsMTA4LDExNywxMDEsMzIsMTA1LDExMCwzMiw5NiwxMTUsMTE3LDk4LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LAorICAgIDk3LDExNiwxMDUsMTExLDExMCwxMTUsOTYsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMTAsMzIsMzIsMzIsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksMzIsMTE5LAorICAgIDEwNSwxMDgsMTA4LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTUsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzIsOTcsMTE1LDMyLDExMiw5Nyw5OSwKKyAgICAxMDcsOTcsMTAzLDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzksMTEwLDEwOCwxMjEsCisgICAgMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE1LDMyLDQwLDExNSwxMDEsMTAxLDMyLDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTcsOTgsOTksNDYsNzcsMTAxLDExNiw5NywKKyAgICA4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsOTcsMTEwLDEwMCwxMCwzMiwKKyAgICAzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk3LDk4LDk5LAorICAgIDQ2LDgwLDk3LDExNiwxMDQsNjksMTEwLDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgNDEsMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMjEsMzIsCisgICAgNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDMyLDEwNSwxMTAsMTE1LDExNiw5NywKKyAgICAxMTAsOTksMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwyMTgsNiwxMTEsMTE0LDEwNSwKKyAgICAxMDMsMTA1LDExMCw3OCwyMTgsMTIsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTUsMTE2LDk3LAorICAgIDExNiwxMDEsMjE4LDEwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDMsCisgICAgMCwwLDAsMywwLDAsMCw2LDAsMCwwLDIsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDc5LDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLAorICAgIDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMjQsMywwLDEyNCwwLDAsCisgICAgOTUsMiwwLDEyNCw0LDAsMTI0LDAsMCw5NSwzLDAsMTI0LDUsMCwxMTQsCisgICAgNDgsMCwxMDMsMCwwLDExMCwzLDAsMTAwLDAsMCwxMjQsMCwwLDk1LDQsCisgICAgMCwxMDAsMSwwLDEyNCwwLDAsOTUsNSwwLDEwMCwwLDAsMTI0LDAsMCwKKyAgICA5NSw2LDAsMTAwLDAsMCw4Myw0MSwyLDc4LDcwLDQxLDcsMTE0LDY3LDAsCisgICAgMCwwLDExNCwxNjksMCwwLDAsMTE0LDIxNywwLDAsMCwxMTQsMjE4LDAsMCwKKyAgICAwLDIxOCwyNiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsCisgICAgMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsMjE4LDEzLDk1LAorICAgIDExNSwxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSw5NywxMTYsMTE2LDExNCwyMTgsNyw5NSw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDEwMCw0MSw2LDExNCw3MSwwLDAsMCwxMTQsNjcsMCwwLAorICAgIDAsMTE0LDE2OSwwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwyMTgsMCwwLDAsCisgICAgMTE0LDIxOSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsNzIsMCwwLDAsMjEsMywwLDAsMTE1LDE0LDAsCisgICAgMCwwLDAsMiw5LDEsOSwxLDksMSw5LDEsMjEsMyw5LDEsCisgICAgMTIyLDE5LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0Niw5NSw5NSwxMDUsCisgICAgMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMTUzLDAsMCwwLDEwMCwKKyAgICAxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMDAsMiwKKyAgICAwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwxLDAsMTAzLDIsMCwKKyAgICAxMjUsMSwwLDEyNCwwLDAsMTA2LDMsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LAorICAgIDc5LDAsMTI0LDEsMCwxMDYsNCwwLDEwMCwzLDAsMTA2LDAsMCwxMjQsMCwKKyAgICAwLDEwNiwzLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTEwLDAsMCwxMjQsMCwKKyAgICAwLDEwNiw1LDAsMTAwLDAsMCwxMDcsOSwwLDExNCwxMjIsMCwxMjQsMSwwLAorICAgIDEwNiw0LDAsMTAwLDQsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDUsMCwxMzEsCisgICAgMSwwLDEzMSwxLDAsMSwxMTAsMCwwLDEwMCw1LDAsMTA2LDAsMCwxMjQsCisgICAgMCwwLDEwNiw2LDAsMTA2LDcsMCwxMDAsNiwwLDEwNiw4LDAsMTI0LDEsCisgICAgMCwxMzEsMSwwLDEzMSwyLDAsODMsNDEsNyw3OCwxMjIsOSwxMTAsOTcsMTA5LAorICAgIDEwMSw2MSwxMjMsMzMsMTE0LDEyNSwxMjIsMTEsMTA4LDExMSw5NywxMDAsMTAxLDExNCw2MSwxMjMsCisgICAgMzMsMTE0LDEyNSwxMjIsMTEsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsNjEsMTIzLDMzLDExNCwxMjUsCisgICAgMTIyLDI5LDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsCisgICAgOTksMTA0LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNSw2MSwxMjMsMTI1LDEyMiwKKyAgICA2LDEyMywxMjUsNDAsMTIzLDEyNSw0MSwxMjIsMiw0NCwzMiw0MSw5LDExNCw0NywwLAorICAgIDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsMjE3LDAsMCwKKyAgICAwLDIxOCw2LDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTE0LDIyMCwwLDAsMCwyMTgsOSwKKyAgICA5NSw5NSw5OSwxMDgsOTcsMTE1LDExNSw5NSw5NSwxMTQsNTcsMCwwLDAsMTE0LDI2LAorICAgIDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCw4MCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTAxLAorICAgIDAsMCwwLDMzLDMsMCwwLDExNSwxNiwwLDAsMCwwLDEsMTUsMSwKKyAgICAyMSwxLDE1LDEsMjgsMSwxNSwxLDYsMSwyMiwxLDEyMiwxOSw3NywxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LAorICAgIDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDEzLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwxNDUsMCwwLDAsMTI0LDAsMCwxMDYsMCwKKyAgICAwLDEyNSwyLDAsMTIxLDEwNywwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLAorICAgIDEwNiwxLDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwKKyAgICAxLDAsMTA2LDIsMCwxMDcsMiwwLDExMSwxMTQsMCwxMjQsMCwwLDEwNiwzLAorICAgIDAsMTI0LDEsMCwxMDYsMywwLDEwNywyLDAsMTExLDExNCwwLDEyNCwyLDAsCisgICAgMTI0LDEsMCwxMDYsMCwwLDEwNywyLDAsMTExLDExNCwwLDEyNCwwLDAsMTA2LAorICAgIDQsMCwxMjQsMSwwLDEwNiw0LDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDAsCisgICAgMCwxMDYsNSwwLDEyNCwxLDAsMTA2LDUsMCwxMDcsMiwwLDgzLDg3LDExMCwKKyAgICAyMiwwLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsMTQwLDAsMSwxLDEsMTAwLAorICAgIDEsMCw4Myw4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDEsMiw3OCw3MCwKKyAgICA0MSw3LDExNCwyMjAsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwxNjksMCwwLAorICAgIDAsMTE0LDIxNywwLDAsMCwyMTgsNiw5OSw5Nyw5OSwxMDQsMTAxLDEwMCwyMTgsMTIsCisgICAgMTA0LDk3LDExNSw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTQsMjA5LDAsMCwKKyAgICAwLDQxLDMsMTE0LDcxLDAsMCwwLDIxOCw1LDExMSwxMTYsMTA0LDEwMSwxMTQsMjE4LAorICAgIDQsMTE1LDEwOSwxMTUsMTA4LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCw2LDk1LDk1LDEwMSwxMTMsOTUsOTUsNDMsMywwLDAsCisgICAgMTE1LDIwLDAsMCwwLDAsMSw5LDEsMywxLDE4LDEsMTgsMSwxOCwKKyAgICAxLDE1LDEsMTgsMSwyMCwxLDEzLDEsMTIyLDE3LDc3LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsODMsMTEyLDEwMSw5OSw0Niw5NSw5NSwxMDEsMTEzLDk1LDk1LDk5LDEsMCwwLAorICAgIDAsMCwwLDAsMCwyLDAsMCwwLDEyLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwxNTgsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwwLDAsMTA3LAorICAgIDgsMCwxMTQsMTUxLDAsMTI0LDAsMCwxMDYsMSwwLDEwMCwwLDAsMTA3LDksCisgICAgMCwxMTQsMTUxLDAsMTI0LDAsMCwxMDYsMiwwLDExNCwxNTEsMCwxMjQsMCwwLAorICAgIDEwNiwxLDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMTYsCisgICAgNSwwLDEzMSwxLDAsMTMxLDEsMCwxMTQsMTEyLDAsMTIxLDE5LDAsMTE2LDYsCisgICAgMCwxMjQsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwwLDAsODcsMTEzLDE0NSwKKyAgICAwLDQsMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTA4LDAsMSwxLDEsODksMTEzLAorICAgIDE0NSwwLDg4LDExMywxNDgsMCwxMjQsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMTYsCisgICAgOCwwLDEzMSwxLDAsMTMxLDEsMCwxMTQsMTQ4LDAsMTI0LDEsMCwxMjQsMCwKKyAgICAwLDk1LDAsMCwxMTMsMTQ4LDAsMTEzLDE1MSwwLDExMCwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMCwwLDgzLDQxLDEsNzgsNDEsOSwxMTQsMjIyLDAsMCwwLDExNCwyMTcsCisgICAgMCwwLDAsMTE0LDIyMSwwLDAsMCwyMTgsOCwxMDEsMTEwLDEwMCwxMTUsMTE5LDEwNSwKKyAgICAxMTYsMTA0LDIxOCw1LDExNiwxMTcsMTEyLDEwOCwxMDEsMTE0LDEzNCwwLDAsMCwxMTQsMTMyLAorICAgIDAsMCwwLDExNCwxMjQsMCwwLDAsMjE4LDE3LDY2LDg5LDg0LDY5LDY3LDc5LAorICAgIDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQxLDIsMTE0LDcxLDAsCisgICAgMCwwLDExNCwxMzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDIyNSwwLDAsMCw1NSwzLDAsMCwxMTUsCisgICAgMjIsMCwwLDAsMCwyLDE1LDEsMjQsMSw5LDEsMjEsMSwzLDEsCisgICAgMTksMSwxMywxLDgsMSwyMSwxLDE4LDEsMTIyLDE3LDc3LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0Niw5OSw5Nyw5OSwxMDQsMTAxLDEwMCw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwxMywwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLAorICAgIDEwMCwwLDAsODMsNDEsMSw3OCw0MSwxLDExNCwyMjIsMCwwLDAsNDEsMiwKKyAgICAxMTQsNzEsMCwwLDAsMTE0LDIyNSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjI1LDAsMCwwLDY5LDMsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsMiw5OSwxLDAsMCwwLDAsMCwKKyAgICAwLDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw0NiwKKyAgICAwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwKKyAgICAzNSwwLDEyNCwwLDAsMTA2LDEsMCwxMDYsMiwwLDEwMCwyLDAsMTMxLDEsCisgICAgMCwxMDAsMywwLDI1LDgzLDEyNCwwLDAsMTA2LDEsMCw4MywxMDAsMSwwLAorICAgIDgzLDQxLDQsMTIyLDMyLDg0LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEyLDk3LAorICAgIDExNCwxMDEsMTEwLDExNiw0Niw3OCwxMTQsMTE2LDAsMCwwLDExNCw4NCwwLDAsMCwKKyAgICA0MSwzLDExNCwyMjAsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwzMiwwLDAsCisgICAgMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsNiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDczLAorICAgIDMsMCwwLDExNSw2LDAsMCwwLDAsMywxNSwxLDIwLDIsMTIyLDE3LAorICAgIDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0NiwxMTIsOTcsMTE0LDEwMSwxMTAsCisgICAgMTE2LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDcsMCwwLDAsMTI0LDAsMCwxMDYsMCwKKyAgICAwLDgzLDQxLDEsNzgsNDEsMSwxMTQsMjIxLDAsMCwwLDQxLDEsMTE0LDcxLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCwyMjYsMCwwLDAsODEsMywwLDAsMTE1LDIsMCwwLDAsCisgICAgMCwyLDEyMiwyMyw3NywxMTEsMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsMTA0LAorICAgIDk3LDExNSw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwxOSwwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjQsMCwKKyAgICAwLDk1LDEsMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMiwyMTgsNCw5OCwKKyAgICAxMTEsMTExLDEwOCwxMTQsMjIxLDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDIxOCwKKyAgICA1LDExOCw5NywxMDgsMTE3LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMjI2LDAsMCwwLDg1LDMsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMiw0MSwxMiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwKKyAgICAwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDcyLDAsMCwwLAorICAgIDExNCwxMDEsMCwwLDAsMTE0LDIyOSwwLDAsMCwyMTgsOCwxMTIsMTE0LDExMSwxMTIsCisgICAgMTAxLDExNCwxMTYsMTIxLDExNCwyMjUsMCwwLDAsMjE4LDYsMTE1LDEwMSwxMTYsMTE2LDEwMSwKKyAgICAxMTQsMTE0LDIzMywwLDAsMCwxMTQsMjI2LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAyMTYsMCwwLDAsMjQwLDIsMCwwLDExNSwyMCwwLDAsMCwxMiwzNSw2LAorICAgIDIsMTUsMSwxNSwxMSwxMiwxMCwxMiwxMiwxOCwxNCwyMSw0LDE4LDgsMTgsCisgICAgNCwxMTQsMjE2LDAsMCwwLDExNCwyMTcsMCwwLDAsMTE0LDIxOSwwLDAsMCwKKyAgICA5OSwyLDAsMCwwLDIsMCwwLDAsNSwwLDAsMCwxNSwwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsMTkzLDAsMCwwLDExNiwwLDAsMTI0LDEsMCwKKyAgICAxMDAsMSwwLDEzMSwyLDAsMTE0LDgzLDAsMTI0LDMsMCwxMDAsMiwwLDEwNywKKyAgICA4LDAsMTE0LDQzLDAsMTE2LDEsMCwxMjQsMCwwLDEwMCwzLDAsMTI0LDEsCisgICAgMCwxMzEsMSwxLDgzLDEyNCwzLDAsMTE0LDU1LDAsMTAzLDAsMCwxMTAsMywKKyAgICAwLDEwMCwyLDAsMTI1LDQsMCwxMTYsMSwwLDEyNCwwLDAsMTAwLDMsMCwKKyAgICAxMjQsMSwwLDEwMCw0LDAsMTI0LDQsMCwxMzEsMSwyLDgzLDEyNCwzLDAsCisgICAgMTAwLDIsMCwxMDcsOCwwLDExNCwxNjgsMCwxMTYsMCwwLDEyNCwxLDAsMTAwLAorICAgIDUsMCwxMzEsMiwwLDExNCwxNTksMCwxMjEsMTksMCwxMjQsMSwwLDEwNiwyLAorICAgIDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwzLDAsODcsMTEzLDE2NSwwLDQsMTE2LAorICAgIDMsMCwxMDcsMTAsMCwxMTQsMTU1LDAsMSwxLDEsMTAwLDIsMCwxMjUsMywKKyAgICAwLDg5LDExMywxNjUsMCw4OCwxMTMsMTY4LDAsMTAwLDYsMCwxMjUsMywwLDExMCwKKyAgICAwLDAsMTE2LDQsMCwxMjQsMCwwLDEyNCwxLDAsMTAwLDcsMCwxMjQsMiwKKyAgICAwLDEwMCw1LDAsMTI0LDMsMCwxMzEsMiwyLDgzLDQxLDgsMTIyLDUzLDgyLAorICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTE1LAorICAgIDExMiwxMDEsOTksMzIsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTgsOTcsMTE0LAorICAgIDEwNSwxMTEsMTE3LDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwOSwxMDEsMTE2LDEwNCwKKyAgICAxMTEsMTAwLDExNSw0NiwyMTgsMTIsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywKKyAgICAxMDksMTAxLDc4LDExNCwxNjksMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsMjE5LDAsCisgICAgMCwwLDcwLDExNCwyMTcsMCwwLDAsNDEsNSwxMTQsNjAsMCwwLDAsMjE4LAorICAgIDIzLDExNSwxMTIsMTAxLDk5LDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsCisgICAgMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE0LDIxOSwwLDAsMCwxMTQsMTUzLDAsCisgICAgMCwwLDExNCwyMTYsMCwwLDAsNDEsNSwxMTQsNjcsMCwwLDAsMTE0LDE2OSwKKyAgICAwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwyMTksMCwwLDAsOTAsNiwxMTUsCisgICAgMTAxLDk3LDExNCw5OSwxMDQsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDE3MywwLDAsMCw5MCwzLDAsMCwxMTUsMjgsMCwKKyAgICAwLDAsMCwyLDE1LDEsMTIsMSwxNiwxLDE4LDEsMTUsMSw3LDIsCisgICAgMTIsMSwxNSwxLDMsMSwxOSwxLDEzLDEsMTQsMyw5LDIsMTE0LDE3MywKKyAgICAwLDAsMCwxMTQsMTY5LDAsMCwwLDExNCwyMjAsMCwwLDAsOTksMiwwLAorICAgIDAsMCwyLDAsMCwwLDksMCwwLDAsMTksMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDExMCwxLDAsMCwxMjQsMSwwLDEwMCwxLDAsMTA3LDgsMCwKKyAgICAxMTQsNzksMCwxMDAsMiwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMiwwLDEwMCwKKyAgICAzLDAsMTMxLDIsMCwxMTQsNzksMCwxMjEsMTksMCwxMjQsMiwwLDEwNiwxLAorICAgIDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwxLDAsODcsMTEzLDc2LDAsNCwxMTYsCisgICAgMiwwLDEwNywxMCwwLDExNCw3MiwwLDEsMSwxLDg5LDExMyw3NiwwLDg4LAorICAgIDExMyw3OSwwLDExMCwwLDAsMTE2LDMsMCwxMjQsMCwwLDEyNCwyLDAsMTAwLAorICAgIDQsMCwxMjQsMSwwLDEzMSwyLDEsMTI1LDQsMCwxMDAsNSwwLDEyNCw0LAorICAgIDAsOTUsNCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwyMDMsMCwKKyAgICAxMjAsNzksMCwxMTYsNSwwLDEzMSwwLDAsNjgsOTMsNjEsMCw5MiwyLDAsCisgICAgMTI1LDUsMCwxMjUsNiwwLDEyNCwxLDAsMTA2LDYsMCwxMTYsNywwLDEyNCwKKyAgICA2LDAsMTMxLDEsMCwxMzEsMSwwLDExNCwxMzEsMCwxMjQsNSwwLDEyNCwwLAorICAgIDAsMTI0LDEsMCwxMzEsMiwwLDEyNSwyLDAsMTI0LDIsMCwxMjQsNCwwLAorICAgIDk1LDgsMCw4MCwxMTMsMTMxLDAsMTEzLDEzMSwwLDg3LDEwMCwxLDAsODMsMTEwLAorICAgIDAsMCwxMjQsMywwLDExNiw5LDAsMTA3LDgsMCwxMTQsMzgsMSwxMTYsMCwKKyAgICAwLDEyNCwyLDAsMTAwLDYsMCwxMzEsMiwwLDExNCw0NywxLDEyMSwxOSwwLAorICAgIDEyNCwyLDAsMTA2LDEwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw3LDAsODcsCisgICAgMTEwLDE4LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCwxMywxLDEsMSwxLAorICAgIDg5LDExMywzNSwxLDg4LDEyNCw3LDAsMTE0LDM1LDEsMTAzLDAsMCwxMjQsNCwKKyAgICAwLDk1LDExLDAsMTEzLDM1LDEsMTEzLDQ3LDEsMTEwLDksMCwxMjQsMywwLAorICAgIDEyNCw0LDAsOTUsMTEsMCwxMjQsNCwwLDEwNiwxMSwwLDEwMywwLDAsMTA3LAorICAgIDIsMCwxMTQsMTA2LDEsMTI0LDEsMCwxMTQsMTA2LDEsMTE2LDEyLDAsMTI0LDEsCisgICAgMCwxMzEsMSwwLDEwMCw3LDAsMjUsMTI1LDgsMCwxMjQsNCwwLDEwNiwxMSwKKyAgICAwLDEwNiwxMywwLDEyNCw4LDAsMTMxLDEsMCwxLDExMywxMDYsMSwxMTAsMCwKKyAgICAwLDEyNCw0LDAsODMsNDEsOCw5Nyw2MSwxLDAsMCw4MiwxMDEsMTE2LDExNywKKyAgICAxMTQsMTEwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExNSwxMTIsMTAxLDk5LAorICAgIDMyLDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLAorICAgIDMyLDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDg0LDExMSwzMiwxMDUsMTEwLDEwMCwxMDUsOTksOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDk3LDExNiwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LAorICAgIDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NCwzMiwxMTUsMTAxLDExNiwxMCwzMiwzMiwKKyAgICAzMiwzMiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LAorICAgIDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsMzIsMTE2LDExMSwzMiwKKyAgICA5NywzMiwxMDgsMTA1LDExNSwxMTYsMzIsMTExLDEwMiwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LAorICAgIDExMSwxMTQsMTIxLDMyLDExMiw5NywxMTYsMTA0LDExNSw0NiwzMiwzMiw2NSwxMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSwzMiwxMDgsMTA1LDExNSwxMTYsMzIsMTA1LDExNSwKKyAgICAzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDk5LDEwNSwxMDEsMTEwLDExNiw0NCwzMiwxMTYsMTA0LDExMSwKKyAgICAxMTcsMTAzLDEwNCwzMiwxMDUsMTE2LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMTEsMTE2LDEwNCwxMDEsCisgICAgMTE0LDExOSwxMDUsMTE1LDEwMSwzMiwxMTcsMTE1LDEwMSwxMDIsMTE3LDEwOCwzMiwxMTYsMTExLDMyLAorICAgIDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDExNSwKKyAgICAxMjEsMTE1LDExNiwxMDEsMTA5LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsCisgICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDksMTE3LDExNSwxMTYsMzIsMTE2LDk3LDEwNywxMDEsCisgICAgMzIsOTcsMzIsMTE1LDExMiwxMDEsOTksMzIsOTcsMTE1LDMyLDEwNSwxMTYsMTE1LDMyLDExMSwKKyAgICAxMTAsMTA4LDEyMSwzMiw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDAsNDEsMzIsOTcsCisgICAgMTE0LDEwMyw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3OCwxMjIsOSw2MCwxMTcsMTEwLDEwNywKKyAgICAxMTAsMTExLDExOSwxMTAsNjIsMTE0LDIzOCwwLDAsMCwxMTQsMjE3LDAsMCwwLDg0LAorICAgIDExNCwyMTksMCwwLDAsMTE0LDg0LDAsMCwwLDQxLDE0LDExNCw2MCwwLDAsCisgICAgMCwxMTQsMjM4LDAsMCwwLDExNCwxNTMsMCwwLDAsMTE0LDIxNiwwLDAsMCwKKyAgICAxMTQsMjIxLDAsMCwwLDIxOCwyNyw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTE3LDExMiwxMTIsCisgICAgMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSw5NywxMDAsMTAxLAorICAgIDExNCwxMTUsMTE0LDIzMCwwLDAsMCwxMTQsMjMxLDAsMCwwLDExNCwxNjksMCwwLAorICAgIDAsMjE4LDksOTUsODAsNzksODAsODUsNzYsNjUsODQsNjksMTE0LDIxOSwwLDAsCisgICAgMCwxMTQsMjIwLDAsMCwwLDExNCwzOCwwLDAsMCwxMTQsMjIzLDAsMCwwLAorICAgIDQxLDksMTE0LDY3LDAsMCwwLDIxOCw4LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsCisgICAgMTEwLDExNCwxNjksMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsMTc3LDAsMCwwLAorICAgIDIxOCwxMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk5LDEwOCw5NywxMTUsMTE1LDExNCwxMjcsCisgICAgMCwwLDAsMTE0LDIxOSwwLDAsMCw5MCw3LDEwMCwxMDUsMTE0LDExMCw5NywxMDksCisgICAgMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCwyMzksMCwwLDAsMTE1LDMsMCwwLDExNSw2MCwwLDAsMCwwLDEyLAorICAgIDEyLDQsNiwxLDE1LDIsMywxLDE5LDEsMTMsMSwxMSw4LDIxLDEsCisgICAgOSwzLDEyLDEsMjIsMSwyMSwxLDE1LDEsOSwxLDgsMiw3LDMsCisgICAgMTIsMiwxNSwxLDMsMSwxOSwxLDEzLDEsNSwyLDYsMSwxOCwyLAorICAgIDksMSwxNSwxLDYsMSwxNiwxLDIyLDIsMTE0LDIzOSwwLDAsMCw5OSwKKyAgICAzLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCw1MywwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMTI0LDEsMCwwLDEyMSwxMywwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMjUsMywwLDg3LDExMCwxOCwwLDQsMTE2LDEsMCwxMDcsMTAsMCwKKyAgICAxMTQsMzMsMCwxLDEsMSw4OSwxMTAsMTcsMCw4OCwxMjQsMywwLDEwMCwwLAorICAgIDAsMTA3LDksMCwxMTQsNTAsMCwxMjQsMywwLDgzLDEyNCwwLDAsMTA2LDIsCisgICAgMCwxMjUsNCwwLDEyNCwxLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwxMDgsMCwKKyAgICAxMjEsMTMsMCwxMjQsMCwwLDEwNiwzLDAsMTI1LDEsMCw4NywxMTMsMTA4LDAsCisgICAgNCwxMTYsMSwwLDEwNywxMCwwLDExNCwxMDQsMCwxLDEsMSw4OSwxMTMsMTA4LAorICAgIDAsODgsMTEwLDAsMCwxMjEsMTMsMCwxMjQsMCwwLDEwNiw0LDAsMTI1LDUsCisgICAgMCw4NywxMTAsMjQsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDE0NywwLDEsCisgICAgMSwxLDEwMCwwLDAsMTI1LDUsMCw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsCisgICAgMTAwLDAsMCwxMDcsOCwwLDExNCwyMjQsMCwxMjQsNSwwLDEwMCwwLDAsMTA3LAorICAgIDgsMCwxMTQsMjE1LDAsMTIxLDEzLDAsMTI0LDEsMCwxMDYsNSwwLDEyNSwyLAorICAgIDAsODcsMTEzLDIyMSwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsMjExLDAsMSwKKyAgICAxLDEsMTAwLDAsMCwxMjUsMiwwLDg5LDExMywyMjEsMCw4OCwxMTMsMjI0LDAsCisgICAgMTI0LDUsMCwxMjUsMiwwLDExMCwwLDAsMTIxLDEzLDAsMTI0LDAsMCwxMDYsCisgICAgNiwwLDEyNSw2LDAsODcsMTEwLDI0LDAsNCwxMTYsMSwwLDEwNywxMCwwLAorICAgIDExNCw3LDEsMSwxLDEsMTAwLDAsMCwxMjUsNiwwLDg5LDExMCwxLDAsCisgICAgODgsMTIxLDE5LDAsMTE2LDcsMCwxMjQsMCwwLDEwNiw4LDAsMTMxLDEsMCwKKyAgICAxMjUsNywwLDg3LDExMCwyNCwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsNTMsCisgICAgMSwxLDEsMSwxMDAsMCwwLDEyNSw3LDAsODksMTEwLDEsMCw4OCwxMTYsCisgICAgOSwwLDEyNCw0LDAsMTI0LDEsMCwxMDAsMSwwLDEyNCwyLDAsMTMxLDIsCisgICAgMSwxMjUsMywwLDEyNCw1LDAsMTAwLDAsMCwxMDcsOCwwLDExNCw5MywxLAorICAgIDEwMCwyLDAsMTEwLDMsMCwxMDAsMywwLDEyNCwzLDAsOTUsMTAsMCwxMjQsCisgICAgNiwwLDEyNCwzLDAsOTUsMTEsMCwxMjQsNywwLDEyNCwzLDAsOTUsMTIsCisgICAgMCwxMjQsMywwLDgzLDQxLDQsNzgsMTE0LDIxNywwLDAsMCw3MCw4NCw0MSwKKyAgICAxMywxMTQsMjA4LDAsMCwwLDExNCwyMDksMCwwLDAsMTE0LDU3LDAsMCwwLAorICAgIDExNCwyMDQsMCwwLDAsMTE0LDIxMCwwLDAsMCw5MCw3LDk1LDc5LDgyLDczLAorICAgIDcxLDczLDc4LDIxOCwxMCw5NSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDEwMCw5NSw5NSwyMTgsCisgICAgNCwxMDgsMTA1LDExNSwxMTYsMjE4LDgsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE0LAorICAgIDIxNiwwLDAsMCwxMTQsMjIxLDAsMCwwLDExNCwyMjUsMCwwLDAsMTE0LDIyMCwKKyAgICAwLDAsMCw0MSw4LDExNCwxNzksMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsCisgICAgMjE3LDAsMCwwLDExNCwxNzcsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyNDIsCisgICAgMCwwLDAsMTE0LDIyNSwwLDAsMCwxMTQsMjIwLDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNyw5NSwxMTUsCisgICAgMTEyLDEwMSw5OSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTc5LAorICAgIDMsMCwwLDExNSw3MiwwLDAsMCwwLDIsMywxLDEzLDEsMTMsMSwKKyAgICA1LDIsMTIsMSw0LDIsOSwxLDEyLDEsMywxLDEzLDEsMTMsMiwKKyAgICA4LDEsMywxLDEzLDEsMTMsMSwxMSwxLDEyLDEsMTIsMSwzLDEsCisgICAgMTMsMSwxMywxLDE0LDIsOSwxLDMsMSwxMywxLDEzLDEsMTEsMSwKKyAgICAzLDEsMTksMSwxMywxLDExLDIsMjEsMSwyNywxLDksMSw5LDEsCisgICAgMTE0LDI0NywwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCw2LDAsMCwwLDY0LDAsMCwwLDExNSwxNDIsMCwwLDAsMTAxLAorICAgIDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLAorICAgIDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsCisgICAgMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTAwLAorICAgIDgsMCwxMDAsOSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDIsOTAsNiwKKyAgICAwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsNywwLDEwMCwxNCwwLAorICAgIDEwMCwxNSwwLDEzMiwwLDAsOTAsOCwwLDEwMCwxNiwwLDEwMCwxNywwLDEzMiwKKyAgICAwLDAsOTAsOSwwLDEwMCwxOCwwLDEwMCwxOSwwLDEzMiwwLDAsOTAsMTAsCisgICAgMCwxMDAsMjAsMCwxMDAsMjEsMCwxMzIsMCwwLDkwLDExLDAsMTAwLDIyLDAsCisgICAgMTAwLDIzLDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwyNCwwLDgzLDQxLDI1LDExNCwKKyAgICAxNzQsMCwwLDAsMTIyLDc3LDY3LDExMSwxMTAsMTE4LDEwMSwxMTAsMTA1LDEwMSwxMTAsOTksCisgICAgMTAxLDMyLDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDMyLDk3LDExNCwxMTEsMTE3LDExMCwxMDAsCisgICAgMzIsMTE1LDExMiwxMDEsOTksMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNSwzMiwxMTYsMTExLAorICAgIDMyLDExMiwxMTQsMTExLDExOCwxMDUsMTAwLDEwMSwzMiwxMTUsMTEyLDEwMSw5OSw0NSwxMTUsMTEyLAorICAgIDEwMSw5OSwxMDUsMTAyLDEwNSw5OSwxMCwzMiwzMiwzMiwzMiwxMDksMTAxLDExNiwxMDQsMTExLAorICAgIDEwMCwxMTUsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTI0LDEsMCwKKyAgICAxMjQsMCwwLDk1LDAsMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMSwxMTQsCisgICAgMTc3LDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNzcsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAorICAgIDcyLDAsMCwwLDIzMSwzLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLAorICAgIDIxLDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsOTUsCisgICAgMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwzLAorICAgIDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE1OCwwLDAsMCwKKyAgICAxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwxLDAsMTAwLAorICAgIDEsMCwxMDcsOCwwLDExNCwzMCwwLDEwMCwyLDAsMTEwLDYsMCwxMjQsMSwKKyAgICAwLDEwNiwxLDAsMTI1LDIsMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDEsMCwKKyAgICAxMDcsOCwwLDExNCwxMDQsMCwxMjQsMSwwLDEwNiwzLDAsMTAwLDEsMCwxMDcsCisgICAgOCwwLDExNCw4MiwwLDEwMCwzLDAsMTA2LDQsMCwxMjQsMiwwLDEzMSwxLAorICAgIDAsODMsMTAwLDQsMCwxMDYsNCwwLDEyNCwyLDAsMTI0LDEsMCwxMDYsMywKKyAgICAwLDEzMSwyLDAsODMsMTEwLDUwLDAsMTI0LDEsMCwxMDYsNSwwLDExNCwxMzIsCisgICAgMCwxMDAsNSwwLDEwNiw0LDAsMTI0LDIsMCwxMjQsMSwwLDEwNiwyLDAsCisgICAgMTMxLDIsMCw4MywxMDAsNiwwLDEwNiw0LDAsMTI0LDEsMCwxMDYsMSwwLAorICAgIDEyNCwxLDAsMTA2LDIsMCwxMzEsMiwwLDgzLDEwMCwxLDAsODMsNDEsNywKKyAgICAxMjIsMzgsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTQsMTAxLDExMiwKKyAgICAxMTQsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMTQsMjA2LDAsMCwwLDEyMiwxMywKKyAgICA2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMjAsNjAsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDMzLDExNCwKKyAgICAxMjUsNDEsNjIsMTIyLDIzLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsCisgICAgMTI1LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMTgsNjAsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDEyNSw0MSw2MiwKKyAgICA0MSw2LDExNCwxNzcsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyMTcsMCwwLAorICAgIDAsMTE0LDE2OSwwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDIyNiwwLDAsMCwKKyAgICA0MSwzLDExNCw3MSwwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCw2NywwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMjA1LDAsMCwwLDIzNCwzLDAsMCwxMTUsMTgsMCwwLDAsMCwzLAorICAgIDksMSwzMCwxLDE1LDEsMTUsMSwxMywyLDIyLDIsOSwxLDE5LDIsCisgICAgMTIyLDI0LDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDIxOCw5LDk1LDExMSwxMTgsMTAxLAorICAgIDExNCwxMTQsMTA1LDEwMCwxMDEsNzAsMjE4LDExLDk1LDEwMiwxMTEsMTE0LDk5LDEwMSw5NSwxMTAsCisgICAgOTcsMTA5LDEwMSw4NCw5OSwyLDAsMCwwLDIsMCwwLDAsNiwwLDAsCisgICAgMCw2NiwwLDAsMCw2NywwLDAsMCwxMTUsNzUsMiwwLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDEyNSw0LDAsMTI0LDIsMCwxMTUsNDUsMCwxMjQsMywwLAorICAgIDExNSw0NSwwLDExNiwxLDAsMTI0LDEsMCwxMDAsMSwwLDEwMCwyLDAsMTMxLAorICAgIDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDg1LDAsMTIxLDE2LDAsMTI0LDQsCisgICAgMCwxMDYsMiwwLDEyNCwxLDAsOTUsMywwLDg3LDExMyw4NSwwLDQsMTE2LAorICAgIDQsMCwxMDcsMTAsMCwxMTQsODEsMCwxLDEsMSw4OSwxMTMsODUsMCw4OCwKKyAgICAxMTAsMCwwLDEyNCwyLDAsMTE1LDExNSwwLDExNiwxLDAsMTI0LDEsMCwxMDAsCisgICAgMywwLDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDIyMSwKKyAgICAwLDEyNCw0LDAsMTA2LDUsMCwxMjUsNSwwLDEyNCw1LDAsMTAwLDIsMCwKKyAgICAxMDcsOCwwLDExNCwxODQsMCwxMjQsNCwwLDEwNiw2LDAsMTAwLDIsMCwxMDcsCisgICAgOSwwLDExNCwxODQsMCwxMTYsNywwLDEwNiw4LDAsMTE2LDcsMCwxMzEsMSwKKyAgICAwLDEyNSw1LDAsMTI0LDQsMCwxMDYsNiwwLDEyNCw1LDAsOTUsOSwwLAorICAgIDExMywxODQsMCwxMTAsMCwwLDEyMSwxMywwLDEyNCw1LDAsMTI0LDEsMCw5NSwKKyAgICAxMCwwLDg3LDExMywyMjEsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDIxNywwLAorICAgIDEsMSwxLDg5LDExMywyMjEsMCw4OCwxMTAsMCwwLDEyNCwyLDAsMTE1LDI1MSwKKyAgICAwLDExNiwxLDAsMTI0LDEsMCwxMDAsNCwwLDEwMCwyLDAsMTMxLDMsMCwKKyAgICAxMDAsMiwwLDEwNyw4LDAsMTE0LDM1LDEsMTIxLDE2LDAsMTI0LDQsMCwxMDYsCisgICAgMTEsMCwxMjQsMSwwLDk1LDEyLDAsODcsMTEzLDM1LDEsNCwxMTYsNCwwLAorICAgIDEwNywxMCwwLDExNCwzMSwxLDEsMSwxLDg5LDExMywzNSwxLDg4LDExMCwwLAorICAgIDAsMTIxLDEzLDAsMTI0LDQsMCwxMjQsMSwwLDk1LDEzLDAsODcsMTEwLDE4LAorICAgIDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCw2OCwxLDEsMSwxLDg5LDExMCwKKyAgICAxLDAsODgsMTI0LDIsMCwxMTUsOTksMSwxMTYsMSwwLDEyNCwxLDAsMTAwLAorICAgIDUsMCwxMDAsMiwwLDEzMSwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwxNTcsCisgICAgMSwxMjQsNCwwLDEwNiw2LDAsMTAwLDIsMCwxMDcsOSwwLDExNCwxNTcsMSwKKyAgICAxMjEsMTYsMCwxMjQsNCwwLDEwNiw2LDAsMTI0LDEsMCw5NSwxNCwwLDg3LAorICAgIDExMywxNTQsMSw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDE1MCwxLDEsMSwxLAorICAgIDg5LDExMywxNTQsMSw4OCwxMTMsMTU3LDEsMTEwLDAsMCwxMjQsNCwwLDEwNiwxNSwKKyAgICAwLDExNCw3MSwyLDEyNCwyLDAsMTE1LDE5NiwxLDExNiwxLDAsMTI0LDEsMCwKKyAgICAxMDAsNiwwLDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LAorICAgIDIzNiwxLDEyMSwxNiwwLDEyNCw0LDAsMTA2LDE2LDAsMTI0LDEsMCw5NSwxNywKKyAgICAwLDg3LDExMywyMzYsMSw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDIzMiwxLDEsCisgICAgMSwxLDg5LDExMywyMzYsMSw4OCwxMTAsMCwwLDEyNCwyLDAsMTE1LDEwLDIsCisgICAgMTE2LDEsMCwxMjQsMSwwLDEwMCw3LDAsMTAwLDIsMCwxMzEsMywwLDEwMCwKKyAgICAyLDAsMTA3LDgsMCwxMTQsNzEsMiwxMjQsNCwwLDEwNiwxOCwwLDEwMCwyLAorICAgIDAsMTA3LDksMCwxMTQsNjgsMiwxMjEsMTYsMCwxMjQsNCwwLDEwNiwxOCwwLAorICAgIDEyNCwxLDAsOTUsMTksMCw4NywxMTMsNjUsMiw0LDExNiw0LDAsMTA3LDEwLAorICAgIDAsMTE0LDYxLDIsMSwxLDEsODksMTEzLDY1LDIsODgsMTEzLDY4LDIsMTEzLAorICAgIDcxLDIsMTEwLDAsMCwxMDAsMiwwLDgzLDQxLDgsOTcsMjksMiwwLDAsCisgICAgODMsMTAxLDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsCisgICAgMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiw2NSwxMDgsMTA4LDMyLDEwOSwxMDUsMTE1LDExNSwxMDUsMTEwLAorICAgIDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NSwxMTQsMTAxLDEwOCw5NywxMTYsMTAxLDEwMCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwKKyAgICAxMDEsMTE1LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsNDYsMzIsCisgICAgMzIsNzIsMTAxLDExNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTA1LDExNSwKKyAgICAzMiwxMDQsMTExLDExOSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzMiw5NywxMTYsCisgICAgMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwOSw5NywxMTIsMzIsMTExLDExMCwxMTYsCisgICAgMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDU4LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDExMCw5NywxMDksMTAxLAorICAgIDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDExMCw5NywxMDksCisgICAgMTAxLDk1LDk1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LAorICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsNDYsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LAorICAgIDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDExMiw5Nyw5OSwKKyAgICAxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsCisgICAgMTEyLDEwMSw5OSwzMiw0NSw2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwKKyAgICAxMTUsMTEyLDEwMSw5OSw5NSw5NSwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCw1OCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCwzMiw0NSw2MiwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsOTUsCisgICAgMzIsNDAsMTA1LDEwMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTUsMTAxLDExNiw5NSwxMDIsMTA1LAorICAgIDEwOCwxMDEsOTcsMTE2LDExNiwxMTQsMzIsMTA1LDExNSwzMiwxMTYsMTE0LDExNywxMDEsNDEsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsOTksOTcsOTksCisgICAgMTA0LDEwMSwxMDAsMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTUsOTUsCisgICAgOTksOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsMzIsNDAsMTA1LDEwMiwzMiw5NSw5NSwxMDIsCisgICAgMTA1LDEwOCwxMDEsOTUsOTUsMzIsOTcsMTA4LDExNSwxMTEsMzIsMTE1LDEwMSwxMTYsNDEsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTE1LDExNyw5OCwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSwKKyAgICA5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDQ2LDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDMyLDQwLDEwNSwxMDIsMzIsMTE1LAorICAgIDEwMSwxMTYsNDEsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDU3LDAsCisgICAgMCwwLDc4LDExNCwyMDQsMCwwLDAsMjE4LDExLDk1LDk1LDExMiw5Nyw5OSwxMDcsCisgICAgOTcsMTAzLDEwMSw5NSw5NSwxMTQsMjQ2LDAsMCwwLDExNCwyMTAsMCwwLDAsMTE0LAorICAgIDI0NCwwLDAsMCw0MSwyMCwxMTQsMTc3LDAsMCwwLDExNCw2MiwwLDAsMCwKKyAgICAxMTQsNjcsMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwyMDksMCwwLDAsMTE0LAorICAgIDE2OSwwLDAsMCwxMTQsMjIwLDAsMCwwLDIxOCwxNiw5NSw3OCw5NywxMDksMTAxLAorICAgIDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwyMTgsNyw5NSw5NSwxMTAsCisgICAgMTAxLDExOSw5NSw5NSwyMTgsNSw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMjA0LDAsMCwwLAorICAgIDExNCwyMzMsMCwwLDAsMTE0LDI1MCwwLDAsMCwxMTQsMjA4LDAsMCwwLDExNCwKKyAgICAyNDYsMCwwLDAsMTE0LDIyNiwwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwyMTAsCisgICAgMCwwLDAsMTE0LDIyNSwwLDAsMCwxMTQsMjQ0LDAsMCwwLDQxLDYsMTE0LAorICAgIDcxLDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDI0OCwwLDAsMCwxMTQsMjQ5LAorICAgIDAsMCwwLDExNCwxNzcsMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsMTA1LDExMCwKKyAgICAxMDUsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk3LDExNiwxMTYsMTE0LDExNSwyNTAsCisgICAgMywwLDAsMTE1LDg4LDAsMCwwLDAsMTcsOSw2LDEyLDEsMjQsMSwKKyAgICAzLDEsMTYsMSwxMywxLDgsMywzMCwxLDksMSwxMiwyLDE1LDEsCisgICAgMTUsMSwxOCwxLDMsMSwxMywxLDEzLDEsOCwzLDMwLDEsMywxLAorICAgIDE2LDEsMTMsMSw4LDMsMywxLDEzLDEsMTMsMSw1LDMsMzAsMSwKKyAgICAxNSwxLDMsMSwxNiwxLDEzLDEsMTEsMiw5LDIsMzAsMSwzLDEsCisgICAgMTYsMSwxMywxLDgsMywzMCwxLDE1LDEsMywxLDE2LDEsMTMsMSwKKyAgICAxMjIsMzAsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0NiwxMDUsCisgICAgMTEwLDEwNSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTcsMTE2LDExNiwxMTQsMTE1LAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDEwMSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMTI1LDEsMCwxMTYsMSwwLDEyNCwxLDAsMTA2LDIsMCwxMDAsMSwwLDEzMSwKKyAgICAyLDAsMTE0LDQ4LDAsMTI0LDEsMCwxMDYsMiwwLDEwNiwzLDAsMTI0LDEsCisgICAgMCwxMzEsMSwwLDEyNSwyLDAsMTEwLDYsMCwxMDAsMiwwLDEyNSwyLDAsCisgICAgMTI0LDIsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDg0LDAsMTE2LDQsMCwxMjQsCisgICAgMSwwLDEwNiw1LDAsMTMxLDEsMCwxMjUsMiwwLDExMCwwLDAsMTI0LDAsCisgICAgMCwxMDYsNiwwLDEyNCwyLDAsMTMxLDEsMCwxLDEyNCwyLDAsODMsNDEsCisgICAgMywxMjIsMTUzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTA4LDExMSw5NywKKyAgICAxMDAsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsCisgICAgMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ1LDExNCwxMDEsMTA4LDk3LDExNiwxMDEsMTAwLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LAorICAgIDEwMSwxMTUsMzIsOTcsMTE0LDEwMSwzMiw5NywxMDgsMTE1LDExMSwzMiwxMTUsMTAxLDExNiwzMiwKKyAgICAxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsOTcsMTEyLDExMiwxMTQsMTExLDExMiwxMTQsMTA1LDk3LDExNiwxMDEsMzIsMTE4LDk3LDEwOCwKKyAgICAxMTcsMTAxLDExNSwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsCisgICAgOTksNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMjE4LDEzLDk5LDExNCwKKyAgICAxMDEsOTcsMTE2LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MSw3LDExNCwxNzcsCisgICAgMCwwLDAsMTE0LDYwLDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDI1NSwwLAorICAgIDAsMCwxMTQsNjgsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyNTQsMCwwLAorICAgIDAsNDEsMywxMTQsNzEsMCwwLDAsMTE0LDE3NywwLDAsMCwxMTQsMTc5LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDIxOCw2LDk5LDExNCwxMDEsOTcsMTE2LDEwMSw3NCw0LDAsMCwxMTUsMTYsMCwKKyAgICAwLDAsMCw3LDksMiwxOCwzLDIxLDIsNiwxLDEyLDQsMTgsMSwKKyAgICAxMywxLDEyMiwxOSw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LAorICAgIDQ2LDk5LDExNCwxMDEsOTcsMTE2LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsCisgICAgMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsCisgICAgMTMxLDEsMCwxLDEwMCwxLDAsODMsNDEsMiwxMjIsMTg5LDY4LDExMSwzMiwxMDEsCisgICAgMTE4LDEwMSwxMTQsMTIxLDExNiwxMDQsMTA1LDExMCwxMDMsMzIsMTEwLDEwMSw5OSwxMDEsMTE1LDExNSwKKyAgICA5NywxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDEsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAorICAgIDEwMSwzMiwxMTEsMTAyLDMyLDk2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk2LDMyLDEwNSwxMTUsCisgICAgMzIsMTE3LDExNSwxMDEsMTAwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsOTcsMTE0LAorICAgIDEwMywxMDEsMTE2LDMyLDExMSwxMDIsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDUsMTExLDExMCwKKyAgICA0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksCisgICAgMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTcsMTE1LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LAorICAgIDExMSw5NywxMDAsMTAxLDExNCwzOSwxMTUsMzIsOTYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsNDAsNDEsOTYsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsNDYsMTAsCisgICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMywxMTQsMTc3LDAsMCwKKyAgICAwLDExNCwxNjksMCwwLDAsMjE4LDExLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDUsCisgICAgOTUsMTAxLDEyMCwxMDEsOTksOTcsNCwwLDAsMTE1LDIsMCwwLDAsMCw3LAorICAgIDEyMiwxOCw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LAorICAgIDEwMSwxMjAsMTAxLDk5LDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwKKyAgICAwLDExLDAsMCwwLDY3LDAsMCwwLDExNSwxNywxLDAsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTA2LDEsMCwxMjUsMiwwLDExNiwyLDAsMTA2LDMsMCwKKyAgICAxMzEsMCwwLDEsMTE2LDQsMCwxMjQsMiwwLDEzMSwxLDAsMTQzLDIyNiwwLAorICAgIDEsMTE2LDUsMCwxMDYsNiwwLDEwNiw3LDAsMTI0LDIsMCwxMzEsMSwwLAorICAgIDEyNCwxLDAsMTA3LDksMCwxMTQsOTUsMCwxMDAsMSwwLDEwNiw4LDAsMTI0LAorICAgIDIsMCwxMzEsMSwwLDEyNSwzLDAsMTE2LDksMCwxMjQsMywwLDEwMCwyLAorICAgIDAsMTI0LDIsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLAorICAgIDEwNiwwLDAsMTA2LDEwLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxODEsMCwxMjQsCisgICAgMCwwLDEwNiwwLDAsMTA2LDExLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxNTgsCisgICAgMCwxMTYsOSwwLDEwMCw0LDAsMTAwLDIsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMTA2LDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwKKyAgICAxMiwwLDEyNCwxLDAsMTAwLDUsMCwxMDAsNiwwLDEzMSwxLDEsMSwxMjQsCisgICAgMSwwLDgzLDEyNCwwLDAsMTA2LDEyLDAsMTI0LDEsMCwxMDAsNSwwLDEwMCwKKyAgICA2LDAsMTMxLDEsMSwxLDExNiwxMywwLDEyNCwwLDAsMTA2LDAsMCwxMDYsCisgICAgMTAsMCwxMDAsNywwLDEzMSwyLDAsMTE1LDI0MywwLDEyNCwwLDAsMTA2LDAsCisgICAgMCwxMDYsMTAsMCwxMDYsMTQsMCwxMjQsMiwwLDEzMSwxLDAsMSwxMTAsMTMsCisgICAgMCwxMjQsMCwwLDEwNiwxNSwwLDEyNCwxLDAsMTMxLDEsMCwxLDg3LDEwMCwKKyAgICAzLDAsODEsODgsMTE2LDUsMCwxMDYsNiwwLDEyNCwyLDAsMjUsODMsNDEsCisgICAgOCwxMjIsNTEsNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsCisgICAgMTEyLDEwMSw5OSwzMiwxMDUsMTEwLDMyLDk3LDExMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDEwNSwKKyAgICAxMTAsMTAzLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTAsOTcsMTA5LDEwMSwKKyAgICAxMTUsMTEyLDk3LDk5LDEwMSw0NiwxMjIsMzAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLAorICAgIDMzLDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE0LDY3LDAsMCwwLDc4LDEyMiwxNCwxMDksMTA1LAorICAgIDExNSwxMTUsMTA1LDExMCwxMDMsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsMjQ4LDAsMCwKKyAgICAwLDg0LDExNCwxLDEsMCwwLDQxLDE2LDExNCwxNzcsMCwwLDAsMTE0LDY3LAorICAgIDAsMCwwLDExNCwxMDYsMCwwLDAsMjE4LDEyLDk3LDk5LDExMywxMTcsMTA1LDExNCwKKyAgICAxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE0LDEwMywwLDAsMCwxMTQsNywwLDAsMCwKKyAgICAxMTQsNzMsMCwwLDAsMTE0LDkzLDAsMCwwLDExNCw0NywwLDAsMCwxMTQsCisgICAgMTUzLDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsMjU0LAorICAgIDAsMCwwLDExNCw2MCwwLDAsMCwyMTgsMTEsMTA4LDExMSw5NywxMDAsOTUsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDIsMSwwLDAsNDEsNCwxMTQsNzEsMCwwLAorICAgIDAsMTE0LDE3OSwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE3MSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMTc1LDAsMCwwLDEwNyw0LDAsMCwxMTUsMzIsMCwwLDAsMCwyLDEyLAorICAgIDEsMTAsMSwxMywxLDI0LDEsMTUsMSwyMSwxLDE4LDEsMTgsMSwyNywKKyAgICAyLDE5LDEsNCwxLDE5LDEsMjEsNCwyMiwyLDE5LDEsMTIyLDE3LDk1LAorICAgIDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTAxLDEyMCwxMDEsOTksCisgICAgOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMjcsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDI0LDEsMCwwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMjUsMSwwLDEyNCwxLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTA2LAorICAgIDMsMCwxMzEsMSwwLDEsMTE2LDQsMCwxMDYsNSwwLDEyNCwxLDAsMTA2LAorICAgIDMsMCwyNSwxMjUsMiwwLDExNiw2LDAsMTI0LDIsMCwxMDAsMSwwLDEwMCwKKyAgICAwLDAsMTMxLDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDEwOCwwLDEyMSwxNiwKKyAgICAwLDEyNCwxLDAsMTA2LDEsMCwxMjQsMiwwLDk1LDcsMCw4NywxMTMsMTA4LAorICAgIDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwxMDQsMCwxLDEsMSw4OSwxMTMsCisgICAgMTA4LDAsODgsMTEwLDAsMCwxMTYsNiwwLDEyNCwyLDAsMTAwLDIsMCwxMDAsCisgICAgMCwwLDEzMSwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyMTUsMCwxMjEsNTksCisgICAgMCwxMjQsMiwwLDEwNiw5LDAsMTI0LDIsMCw5NSwxMCwwLDExNiwxMSwwLAorICAgIDEyNCwyLDAsMTAwLDMsMCwxMzEsMiwwLDExNSwxOTAsMCwxMjQsMSwwLDEwNiwKKyAgICAzLDAsMTA2LDEyLDAsMTAwLDQsMCwxMzEsMSwwLDEwMCw1LDAsMjUsMTI0LAorICAgIDIsMCw5NSwxMCwwLDExMCwwLDAsODcsMTEzLDIxNSwwLDQsMTE2LDgsMCwKKyAgICAxMDcsMTAsMCwxMTQsMjExLDAsMSwxLDEsODksMTEzLDIxNSwwLDg4LDExMCwwLAorICAgIDAsMTE2LDYsMCwxMjQsMiwwLDEwMCw2LDAsMTAwLDAsMCwxMzEsMywwLAorICAgIDEwMCwwLDAsMTA3LDgsMCwxMTQsMjAsMSwxMjEsMTMsMCwxMjQsMSwwLDEyNCwKKyAgICAyLDAsOTUsMTMsMCw4NywxMTMsMjAsMSw0LDExNiw4LDAsMTA3LDEwLDAsCisgICAgMTE0LDE2LDEsMSwxLDEsODksMTEzLDIwLDEsODgsMTEwLDAsMCwxMjQsMiwKKyAgICAwLDgzLDQxLDcsNzgsMTE0LDIwNCwwLDAsMCwxMTQsMjUwLDAsMCwwLDExNCwKKyAgICAyNDYsMCwwLDAsMTE0LDExNiwwLDAsMCwxMTQsODQsMCwwLDAsMTE0LDIwOCwKKyAgICAwLDAsMCw0MSwxNCwxMTQsMTc3LDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LAorICAgIDQsMSwwLDAsMTE0LDY3LDAsMCwwLDExNCw3LDAsMCwwLDExNCw3MywKKyAgICAwLDAsMCwxMTQsNjIsMCwwLDAsMTE0LDIwNCwwLDAsMCwxMTQsMjA5LDAsCisgICAgMCwwLDExNCw1NywwLDAsMCwxMTQsMjUwLDAsMCwwLDExNCw2MCwwLDAsCisgICAgMCwxMTQsMzIsMCwwLDAsMTE0LDIwOCwwLDAsMCw0MSwzLDExNCw3MSwwLAorICAgIDAsMCwxMTQsMTc3LDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDI1LDk1LDEwOCwxMTEsCisgICAgOTcsMTAwLDk1LDk4LDk3LDk5LDEwNywxMTksOTcsMTE0LDEwMCw5NSw5OSwxMTEsMTA5LDExMiwKKyAgICA5NywxMTYsMTA1LDk4LDEwOCwxMDEsMTMxLDQsMCwwLDExNSw0MiwwLDAsMCwwLAorICAgIDQsOSwxLDE5LDIsMTYsMSwyNCwxLDMsMSwxNiwxLDEzLDEsOCwKKyAgICAxLDI0LDEsMyw0LDEyLDEsMTUsMSwzMiwxLDEzLDEsOCwxLDI0LAorICAgIDEsMywxLDEzLDEsMTMsMSw4LDEsMTIyLDM4LDk1LDgzLDExMiwxMDEsOTksCisgICAgNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsMTA4LDExMSw5NywxMDAsOTUsOTgsOTcsCisgICAgOTksMTA3LDExOSw5NywxMTQsMTAwLDk1LDk5LDExMSwxMDksMTEyLDk3LDExNiwxMDUsOTgsMTA4LAorICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMSwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMTc5LDAsMCwwLDEyNCwwLDAsMTA2LDAsCisgICAgMCwxMDYsMSwwLDEwMCwwLDAsMTA3LDksMCwxMTQsNTIsMCwxMTYsMiwwLAorICAgIDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDIsMCwxMTUsCisgICAgNTIsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDAsMCw4MywxMTAsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDQsMCwxMzEsMCwwLDEyNSwxLDAsMTE2LDUsMCwxMjQsMSwKKyAgICAwLDEzMSwxLDAsMTQzLDg0LDAsMSwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsCisgICAgMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDE0MywwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMDYsNiwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMTU2LDAsMTE2LDcsMCwxMDAsCisgICAgMiwwLDEwMCwzLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiw4LDAsMTMxLDEsCisgICAgMSwxMzAsMSwwLDExMywxNTYsMCwxMTAsMTMsMCwxMjQsMCwwLDEwNiw5LDAsCisgICAgMTI0LDEsMCwxMzEsMSwwLDEsODcsMTAwLDAsMCw4MSw4OCwxMTYsMTAsMCwKKyAgICAxMDYsMTEsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDgsMCwyNSw4Myw0MSw0LAorICAgIDc4LDExNCwxLDEsMCwwLDEyMiwxNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsCisgICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsNjcsMCwwLDAsNDEsMTIsMTE0LDE3NywwLAorICAgIDAsMCwxMTQsMTY5LDAsMCwwLDExNCw2MCwwLDAsMCwxMTQsNSwxLDAsCisgICAgMCwxMTQsMCwxLDAsMCwxMTQsMjEyLDAsMCwwLDExNCwyMjAsMCwwLDAsCisgICAgMTE0LDE1MywwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDIsMSwwLDAsMTE0LAorICAgIDcsMCwwLDAsMTE0LDczLDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLAorICAgIDExNCwxNzksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDE0LDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LDExMSwKKyAgICA5OSwxMDcsMTAxLDEwMCwxNjEsNCwwLDAsMTE1LDIwLDAsMCwwLDAsMiwxOCwKKyAgICAyLDIxLDEsMTMsMiwxMiwxLDEzLDEsMTgsMSwxOCwxLDMwLDMsMTksCisgICAgNSwxMjIsMjcsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0NiwKKyAgICA5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDEwMSwxMDAsOTksMSwKKyAgICAwLDAsMCwwLDAsMCwwLDEsMCwwLDAsOCwwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsNDksMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLAorICAgIDAsMSwxMTYsMiwwLDEyNCwwLDAsMTA2LDMsMCwxMDYsNCwwLDEzMSwxLAorICAgIDAsMTQzLDE1LDAsMSwxMjQsMCwwLDEwNiw1LDAsMTMxLDAsMCw4Myw4NywKKyAgICAxMDAsMSwwLDgxLDg4LDEwMCwxLDAsODMsNDEsMiwxMjIsMjA3LDgyLDEwMSwxMTYsCisgICAgMTE3LDExNCwxMTAsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDQ0LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsCisgICAgOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDM5LDExNSwzMiwxMDgsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LAorICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwKKyAgICAzMiw5NywxMDAsMTAwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDUsMTE2LDExNSwzMiwxMTIsOTcsCisgICAgMTE0LDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLAorICAgIDEwMiwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDEwOCwKKyAgICAxMTQsMTAxLDk3LDEwMCwxMjEsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwKKyAgICAxMDUsMTEwLDEwMywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDMsMTAxLDExNiwxMTUsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksMTA4LDExMSw5OCw5OCwxMDEsMTE0LDEwMSwKKyAgICAxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsNiwxMTQsCisgICAgMTA2LDAsMCwwLDExNCwzLDEsMCwwLDExNCwxMDMsMCwwLDAsMTE0LDE3NywKKyAgICAwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDYsMSwwLDAsNDEsMSwxMTQsCisgICAgNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDE3NiwwLDAsMCwxODQsNCwwLDAsMTE1LDYsMCwwLAorICAgIDAsMCw5LDEwLDEsMTksMSwxMjIsMTcsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsCisgICAgMTE2LDEwNCwxMTEsMTAwLDExNSw0NiwxMDgsMTExLDk3LDEwMCw3OCw0MSwxMywxMTQsNTcsMCwKKyAgICAwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLAorICAgIDAsMTE0LDcyLDAsMCwwLDExNCwyMDUsMCwwLDAsMTE0LDI1NCwwLDAsMCwKKyAgICAxMTQsMCwxLDAsMCwxMTQsMiwxLDAsMCwxMTQsMTc1LDAsMCwwLDExNCwKKyAgICA1LDEsMCwwLDExNCw2LDEsMCwwLDExNCwxNzYsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDE3NCwwLDAsMCwyMjQsMywwLDAsMTE1LDIwLDAsMCwwLAorICAgIDEyLDMsNiw0LDEyLDMsMTIsMTYsMjQsODAsMTIsMjMsMTIsMTAsMTIsMjQsCisgICAgMTIsMzAsMTIsMjMsMTE0LDE3NCwwLDAsMCw5OSwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCw1LDAsMCwwLDY0LDAsMCwwLDExNSwxODEsCisgICAgMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLAogICAgIDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsCi0gICAgMCwxMzEsMSwwLDkwLDUsMCwxMDEsNCwwLDEwMCwxNCwwLDEwMCw0LDAsCi0gICAgMTAwLDUsMCwxMzIsMSwwLDEzMSwxLDAsOTAsNywwLDEwMSw0LDAsMTAxLAotICAgIDgsMCwxMDEsOSwwLDEwMSwxMCwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwKLSAgICAwLDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTEsMCwKLSAgICAxMDEsNCwwLDEwMSwxMCwwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCw5MCwxMiwwLDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEwLAotICAgIDAsMTAwLDExLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTMsMCwKLSAgICAxMDEsNCwwLDEwMSwxMCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDE0LDAsMTAwLDE0LDAsODMsNDAsMTUsMCwwLAotICAgIDAsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDEsMTE0LDExNywxNDIsMCwwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTExLDExNCwzMiwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsNjUsMTA4LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsCi0gICAgMTE0LDEwMSwzMiwxMDEsMTA1LDExNiwxMDQsMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwKLSAgICAxMTEsMTE0LDMyLDExNSwxMTYsOTcsMTE2LDEwNSw5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAxMTUsMzIsMTE2LDExMSwzMiw5NywxMTgsMTExLDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLAotICAgIDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LAotICAgIDExMCwxMTYsMTA1LDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLAotICAgIDgzLDQwLDIsMCwwLDAsNzgsMTE3LDIyLDAsMCwwLDYwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDM5LDEyMywxMjUsMzksMzIsNDAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgNDEsNjIsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksCi0gICAgOTcsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDQwLAotICAgIDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsMSwwLDAsCi0gICAgMCwxMDksNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDE4MiwyLAotICAgIDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI2LDAsMCwwLDcwLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwzLDAsMCwwLDAsMCwwLAotICAgIDAsMywwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLAotICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNCwxOSwKLSAgICAwLDEyNCwwLDAsODMsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyMSwKLSAgICAwLDAsMCw3MCwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCw0MCwzLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNyw5LDAsMCwwLDEwNSwxMTUsOTUsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMywKLSAgICAwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLAotICAgIDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTg2LDIsMCwKLSAgICAwLDExNSwyLDAsMCwwLDAsMywxMTcsMjYsMCwwLDAsNzAsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwKLSAgICA0LDAsMCwwLDksMCwwLDAsNjcsMCwwLDAsMTE1LDEwMCwwLDAsCi0gICAgMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDEyNSwyLDAsCi0gICAgMTIxLDMyLDAsMTE2LDIsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDEsMCwxMzEsCi0gICAgMiwwLDEyNSwzLDAsMTI0LDMsMCw5Niw1LDAsMTI0LDMsMCw4Myw4NywKLSAgICAxMTAsNDYsMCwxLDEsMSwxMjQsMiwwLDEyLDExNCw4OCwwLDEyNCwxLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEwNyw2LDAsMTE0LDg4LDAsMTE2LDAsMCwxMDYsCi0gICAgMSwwLDEyNCwxLDAsNjEsMTEwLDAsMCwxMzAsMCwwLDg5LDExMCwxLDAsCi0gICAgODgsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyMSwwLDAsMCw3NiwKLSAgICAxMTEsOTcsMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDQ2LDc4LDQwLDYsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywyNSwKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LAotICAgIDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsNCwwLDAsCi0gICAgMCw5NSwxMDUsMTA5LDExMiwxMTcsMTEsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDExNyw4LDAsMCwwLDk1LDk1LDEwMiwxMDUsMTA4LDEwMSwKLSAgICA5NSw5NSw0MCw0LDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LAotICAgIDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw5LDAsMCwKLSAgICAwLDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCwxMTcsMSwwLDAsMCwxMDksCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLAotICAgIDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTkxLDIsMCwwLAotICAgIDExNSwxOCwwLDAsMCwwLDYsMTUsMSwzLDEsMTgsMiw2LDEsOCwKLSAgICAxLDMsMSwyMiwxLDEzLDEsMTE3LDI2LDAsMCwwLDcwLDExNCwxMTEsMTIyLAorICAgIDAsMTMxLDEsMCw5MCw1LDAsMTAxLDYsMCwxMDAsNCwwLDEwMCw0LDAsCisgICAgMTAwLDUsMCwxMDAsNiwwLDEzMiwyLDAsMTMxLDEsMCw5MCw3LDAsMTAxLAorICAgIDYsMCwxMDAsNCwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMSwwLDEzMSwxLAorICAgIDAsOTAsOCwwLDEwMSw2LDAsMTAxLDksMCwxMDAsOSwwLDEwMCwxMCwwLAorICAgIDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDEwLDAsMTAxLDYsMCwxMDEsCisgICAgOSwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwKKyAgICAwLDkwLDExLDAsMTAxLDYsMCwxMDEsOSwwLDEwMCwxMywwLDEwMCwxNCwwLAorICAgIDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDEyLDAsMTAxLDYsMCwxMDEsCisgICAgOSwwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwKKyAgICAwLDkwLDEzLDAsMTAwLDQsMCw4Myw0MSwxNywyMTgsMTUsNjYsMTE3LDEwNSwxMDgsCisgICAgMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDEyMiwxNDQsNzcsMTAxLDExNiwKKyAgICA5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTExLAorICAgIDExNCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjUsMTA4LDEwOCwzMiwxMDksMTAxLDExNiwKKyAgICAxMDQsMTExLDEwMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsMTA1LDExNiwxMDQsMTAxLDExNCwzMiwKKyAgICA5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTE0LDMyLDExNSwxMTYsOTcsMTE2LDEwNSw5OSwzMiwKKyAgICAxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsMTE2LDExMSwzMiw5NywxMTgsMTExLDEwNSwxMDAsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsCisgICAgMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCwxMTYsMTA1LDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsOTksMTA4LDk3LDExNSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwwLDAsCisgICAgMTA2LDEsMCwxMzEsMSwwLDgzLDQxLDIsMTIyLDExNSw4MiwxMDEsMTE2LDExNywxMTQsCisgICAgMTEwLDMyLDExNCwxMDEsMTEyLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA4NCwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwKKyAgICAxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwNSwKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOSw5Nyw5OSwxMDQsMTA1LDExMCwxMDEsMTE0LDEyMSwzMiwKKyAgICAxMDAsMTExLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA2LDExMSw5OCwzMiwxMDUsMTE2LDExNSwKKyAgICAxMDEsMTA4LDEwMiw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMjIsMjQsCisgICAgNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsOTgsMTE3LAorICAgIDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsNDEsNjIsNDEsMiwxMTQsNDcsMCwwLDAsMTE0LAorICAgIDU3LDAsMCwwLDQxLDEsMTE0LDE3OSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjA1LDAsMCwwLDIwOSwKKyAgICA0LDAsMCwxMTUsMiwwLDAsMCwwLDcsMTIyLDI3LDY2LDExNywxMDUsMTA4LAorICAgIDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsNzgsOTksNCwwLDAsMCwwLDAsMCwKKyAgICAwLDQsMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsNTgsMCwKKyAgICAwLDAsMTI0LDIsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDE2LDAsMTAwLDAsCisgICAgMCw4MywxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNCw1MCwKKyAgICAwLDExNiwyLDAsMTI0LDEsMCwxMjQsMCwwLDEwMCwxLDAsMTAwLDIsMCwKKyAgICAxMzEsMiwxLDgzLDEwMCwwLDAsODMsMTAwLDAsMCw4Myw0MSwzLDc4LDExNCwKKyAgICAyMTcsMCwwLDAsMTIyLDgsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsNDEsMywKKyAgICAxMTQsMTA2LDAsMCwwLDkwLDEwLDEwNSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwKKyAgICAxMTAsMTE0LDE3MywwLDAsMCw0MSw0LDIxOCwzLDk5LDEwOCwxMTUsMTE0LDE1OCwwLAorICAgIDAsMCwxMTQsMzUsMCwwLDAsMjE4LDYsMTE2LDk3LDExNCwxMDMsMTAxLDExNiwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsOSwKKyAgICAxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksMjE4LDQsMCwwLDExNSwxMCwwLAorICAgIDAsMCwwLDIsMTIsMSw0LDEsMTUsMSwxOSwyLDEyMiwyNSw2NiwxMTcsCisgICAgMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDMsMCwwLDAsMCwwLDAsMCwKKyAgICA0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDQxLDAsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwKKyAgICAxMjUsMywwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOSwwLDExNCwzNywwLDEyNCwKKyAgICAzLDAsMTA2LDEsMCw4MywxMDAsMSwwLDgzLDQxLDIsMTIyLDE3NSw3MCwxMDUsCisgICAgMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw3MywxMDIsMzIsMzksMTEyLDk3LDExNiwxMDQsMzksMzIsMTA1LDExNSwzMiwxMDEsMTE4LAorICAgIDEwMSwxMTQsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMTYsMTA0LDEwMSwKKyAgICAxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSw5NywxMTQsOTksMTA0LDMyLDEwNSwxMTUsMzIsCisgICAgOTksMTExLDExMCwxMTUsMTA1LDEwMCwxMDEsMTE0LDEwMSwxMDAsMzIsOTcsMzIsMTAyLDk3LDEwNSwKKyAgICAxMDgsMTE3LDExNCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsCisgICAgMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LDExNSwzMiwxMDAsMTAxLAorICAgIDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg1LDExNSwxMDEsMzIsMTAyLAorICAgIDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDQwLDQxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsCisgICAgOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQxLDIsCisgICAgMTE0LDEwLDEsMCwwLDExNCwxNjksMCwwLDAsNDEsNCwxMTQsOCwxLDAsCisgICAgMCwxMTQsMTU4LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMTc3LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKKyAgICAxMSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjI3LDQsMCwwLAorICAgIDExNSw0LDAsMCwwLDAsOSwxOCwxLDEyMiwyNyw2NiwxMTcsMTA1LDEwOCwxMTYsCisgICAgMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwzLAorICAgIDAsMCwwLDEwLDAsMCwwLDY3LDAsMCwwLDExNSw1OSwwLDAsMCwKKyAgICAxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxNDMsMjMsMCwxLDExNiwxLDAsCisgICAgMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDIsMCwxMjUsMiwwLDg3LAorICAgIDEwMCwxLDAsODEsODgsMTI0LDAsMCwxMjQsMiwwLDk1LDQsMCwxMDAsMiwKKyAgICAwLDEyNCwyLDAsOTUsNSwwLDEyNCwyLDAsODMsNDEsMywxMjIsMjMsNzYsCisgICAgMTExLDk3LDEwMCwzMiw5NywzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMTQsMzAsMCwwLDAsNDEsNiwxMTQsNjksCisgICAgMCwwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTA2LDAsMCwwLDkwLDEyLDEwNSwKKyAgICAxMTAsMTA1LDExNiw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTQsMjA0LDAsMCwwLAorICAgIDExNCwyNTAsMCwwLDAsNDEsMywxMTQsOCwxLDAsMCwxMTQsMTU4LDAsMCwKKyAgICAwLDExNCwxNzksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDQsMSwwLDAsMjM5LDQsMCwwLDExNSwxMCwKKyAgICAwLDAsMCwwLDYsMTMsMSwyNCwxLDksMSw5LDEsMTIyLDI3LDY2LAorICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDgsCisgICAgMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTcsODIsMTAxLDExNiwxMTcsCisgICAgMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LAorICAgIDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwxMTEsMzIsMTEwLAorICAgIDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwKKyAgICAxMDEsOTksMTE2LDExNSw0Niw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCw4LDEsCisgICAgMCwwLDExNCwxNTgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDgsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsCisgICAgMjUxLDQsMCwwLDExNSwyLDAsMCwwLDAsNCwxMjIsMjQsNjYsMTE3LDEwNSwKKyAgICAxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LAorICAgIDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCisgICAgMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLAorICAgIDEsMCw4Myw0MSwyLDEyMiw1Niw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwKKyAgICAxMTAsMTAxLDMyLDk3LDExNSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsCisgICAgMTE4LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LAorICAgIDExNCw0LDAsMCwwLDQxLDIsMTE0LDgsMSwwLDAsMTE0LDE1OCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMTAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxLDUsMCwwLAorICAgIDExNSwyLDAsMCwwLDAsNCwxMjIsMjYsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsCisgICAgNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLAorICAgIDgzLDQxLDIsMTIyLDUyLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzAsOTcsMTA4LDExNSwKKyAgICAxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTQsMTAxLDMyLDExMCwxMDEsMTE4LDEwMSwxMTQsMzIsCisgICAgMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNSw0Niw3MCwxMTQsNCwwLDAsMCw0MSwKKyAgICAyLDExNCw4LDEsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIxOSwwLDAsMCw3LAorICAgIDUsMCwwLDExNSwyLDAsMCwwLDAsNCwxMjIsMjYsNjYsMTE3LDEwNSwxMDgsCisgICAgMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLAorICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDQxLDE0LDExNCw1NywwLDAsMCwxMTQsNTYsMCwKKyAgICAwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwyMTgsMTIsMTE1LDExNiwKKyAgICA5NywxMTYsMTA1LDk5LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNCwyMDUsMCwwLDAsMjE4LAorICAgIDExLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNCwxMCwxLDAsCisgICAgMCwxMTQsMTEsMSwwLDAsMTE0LDE2MSwwLDAsMCwxMTQsNCwxLDAsMCwKKyAgICAxMTQsMTIsMSwwLDAsMTE0LDEzLDEsMCwwLDExNCwyMTksMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDcsMSwwLDAsMjAwLDQsMCwwLDExNSwyOCwwLDAsCisgICAgMCwxMiw3LDYsMiwxOCw5LDMsMSwyMSw4LDMsMSwxOCwxMSwzLAorICAgIDEsMjEsMTEsMywxLDIxLDUsMywxLDIxLDUsMywxLDExNCw3LDEsCisgICAgMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsCisgICAgMCwwLDAsNjQsMCwwLDAsMTE1LDE5MywwLDAsMCwxMDEsMCwwLDkwLAorICAgIDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDEsNCwKKyAgICAwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLAorICAgIDEwMSw2LDAsMTAwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsCisgICAgMiwwLDEzMSwxLDAsOTAsNywwLDEwMSw2LDAsMTAwLDQsMCwxMDAsNywKKyAgICAwLDEwMCw4LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNCwwLAorICAgIDEwMCw5LDAsMTAwLDEwLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDksMCwxMDEsCisgICAgNiwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwwLDAsMTMxLDEsMCw5MCwxMCwKKyAgICAwLDEwMSw2LDAsMTAxLDExLDAsMTAwLDEzLDAsMTAwLDE0LDAsMTMyLDAsMCwKKyAgICAxMzEsMSwwLDEzMSwxLDAsOTAsMTIsMCwxMDEsNiwwLDEwMSwxMSwwLDEwMCwKKyAgICAxNSwwLDEwMCwxNiwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDEzLAorICAgIDAsMTAxLDYsMCwxMDEsMTEsMCwxMDAsMTcsMCwxMDAsMTgsMCwxMzIsMCwwLAorICAgIDEzMSwxLDAsMTMxLDEsMCw5MCwxNCwwLDEwMCw0LDAsODMsNDEsMTksMjE4LAorICAgIDE0LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDEyMiwKKyAgICAxNDIsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAorICAgIDExNiwzMiwxMDIsMTExLDExNCwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjUsMTA4LDEwOCwzMiwxMDksCisgICAgMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsMTA1LDExNiwxMDQsMTAxLAorICAgIDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTE0LDMyLDExNSwxMTYsOTcsMTE2LDEwNSwKKyAgICA5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsMTE2LDExMSwzMiw5NywxMTgsMTExLAorICAgIDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMTAsMzIsCisgICAgMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCwxMTYsMTA1LDk3LDExNiwxMDEsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQxLDIsMTIyLDExNSw4MiwxMDEsMTE2LAorICAgIDExNywxMTQsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsCisgICAgMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NCwxMDQsMTAxLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOSw5Nyw5OSwxMDQsMTA1LDExMCwxMDEsMTE0LAorICAgIDEyMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA2LDExMSw5OCwzMiwxMDUsCisgICAgMTE2LDExNSwxMDEsMTA4LDEwMiw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAxMjIsMjIsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsCisgICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDEsNjIsNDEsMiwxMTQsNDcsMCwwLDAsMTE0LAorICAgIDU3LDAsMCwwLDQxLDEsMjE4LDEsMTA5LDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMDUsMCwwLDAsMjMsNSwwLAorICAgIDAsMTE1LDIsMCwwLDAsMCw3LDEyMiwyNiw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLAorICAgIDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKKyAgICAxMTQsMTAxLDExMiwxMTQsNzgsOTksNCwwLDAsMCwwLDAsMCwwLDQsMCwKKyAgICAwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsNDIsMCwwLDAsMTE2LAorICAgIDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTQsMzQsMCwxMTYsMiwKKyAgICAwLDEyNCwxLDAsMTI0LDAsMCwxMDAsMSwwLDEwMCwyLDAsMTMxLDIsMSwKKyAgICA4MywxMDAsMCwwLDgzLDEwMCwwLDAsODMsNDEsMyw3OCwxMTQsMjE3LDAsMCwKKyAgICAwLDkwLDYsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDEsMywxMTQsMTA2LDAsMCwwLAorICAgIDExNCwxNjIsMCwwLDAsMTE0LDE3MywwLDAsMCw0MSw0LDExNCw4LDEsMCwKKyAgICAwLDExNCwxNTgsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw5LDEsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAxMCwxLDAsMCwzMiw1LDAsMCwxMTUsNiwwLDAsMCwwLDIsMTUsCisgICAgMSwxOSwyLDEyMiwyNCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksMywwLAorICAgIDAsMCwwLDAsMCwwLDMsMCwwLDAsMiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMjMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsCisgICAgMTMxLDEsMCwxMTQsMTksMCwxMjQsMCwwLDgzLDEwMCwxLDAsODMsNDEsMiwKKyAgICAxMjIsOTMsNzAsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LDExNSwzMiwKKyAgICAxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg1LDExNSwxMDEsCisgICAgMzIsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDQwLDQxLDMyLDEwNSwxMTAsMTE1LAorICAgIDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LAorICAgIDQxLDIsMTE0LDEwNiwwLDAsMCwxMTQsMTYyLDAsMCwwLDQxLDMsMTE0LDgsCisgICAgMSwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDExLDEsMCwKKyAgICAwLDM5LDUsMCwwLDExNSwyLDAsMCwwLDAsNywxMjIsMjYsNzAsMTE0LAorICAgIDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsCisgICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCwzLDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDk1LDAsCisgICAgMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwwLDEyNSwxLDAsMTE2LDIsCisgICAgMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsMCwxMTUsNTcsMCwxMTYsNCwwLAorICAgIDEwMCwxLDAsMTA2LDUsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDIsMCwxMjQsCisgICAgMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDExNiw2LDAsMTE2LDIsCisgICAgMCwxMDYsNywwLDEyNCwxLDAsMTMxLDIsMCwxMjUsMiwwLDExNiw4LDAsCisgICAgMTI0LDIsMCwxMjQsMCwwLDEwNiw5LDAsMTMxLDIsMCwxLDEwMCwwLDAsCisgICAgODMsNDEsMyw3OCwxMjIsMjcsMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLAorICAgIDExNiwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwxMTQsNjcsMCwwLDAsNDEsMTAsMTE0LDIwOCwwLDAsMCwxMTQsNjcsMCwKKyAgICAwLDAsMTE0LDEwNiwwLDAsMCwxMTQsMTYyLDAsMCwwLDExNCwxNTMsMCwwLAorICAgIDAsMTE0LDQ3LDAsMCwwLDExNCwxMTQsMCwwLDAsMjE4LDE3LDEwMywxMDEsMTE2LAorICAgIDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTQsMTc1LAorICAgIDAsMCwwLDExNCw2MywwLDAsMCw0MSwzLDExNCwxNzksMCwwLDAsMTE0LAorICAgIDY3LDAsMCwwLDExNCwxOTQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEsMSwwLDAsNDgsNSwwLAorICAgIDAsMTE1LDEyLDAsMCwwLDAsMiwxMiwxLDE1LDEsMTgsMSwxMiwxLAorICAgIDE4LDEsMTIyLDI2LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAxMDEsMTE0LDQ2LDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDEzLDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMjQsMSwKKyAgICAwLDEzMSwyLDAsODMsNDEsMSwxMjIsOTUsNzYsMTExLDk3LDEwMCwzMiw5NywzMiwKKyAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwKKyAgICAxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwKKyAgICAxMDAsNDYsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw0MSwxLDExNCwxODAsMCwwLDAsNDEsCisgICAgMiwxMTQsOCwxLDAsMCwxMTQsMTU4LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw0LDEsMCwwLDU3LAorICAgIDUsMCwwLDExNSwyLDAsMCwwLDAsNywxMjIsMjYsNzAsMTE0LDExMSwxMjIsCiAgICAgMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsCiAgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsCiAgICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MCwxLDAsCi0gICAgMCwwLDExNyw0NSwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw0Niw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDk1LDEwNSwKLSAgICAxMDksMTEyLDExNywxNywwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCw5NSwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsNDAsMiwwLDAsMCwxMTcsMywwLAotICAgIDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LAotICAgIDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDIwOCwyLDAsMCwxMTUsCi0gICAgMiwwLDAsMCwwLDQsMTE3LDIzLDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwKLSAgICAxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4MywKLSAgICA0MCwyLDAsMCwwLDExNyw1NCwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAotICAgIDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsCi0gICAgOTcsMTE4LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LAotICAgIDc4LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsCi0gICAgMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwKLSAgICAwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDIxNCwyLDAsMCwxMTUsMiwwLDAsMCwwLDQsMTE3LAotICAgIDI1LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwwLAotICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsCi0gICAgMTMxLDEsMCw4Myw0MCwxLDAsMCwwLDExNyw0NiwwLDAsMCw4MiwxMDEsCi0gICAgMTE2LDExNywxMTQsMTEwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LAotICAgIDExNSwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTcsMCwwLDAsMTA1LAotICAgIDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSwyMjAsMiwwLDAsMTE1LDIsMCwwLDAsMCw0LAotICAgIDExNywyNSwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw3OCw0MCwKLSAgICAxNSwwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSwKLSAgICA5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsCi0gICAgMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LAotICAgIDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDExLDAsCi0gICAgMCwwLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywxMSwwLAotICAgIDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNiwwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LAotICAgIDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNywxMSwwLDAsMCwxMDgsCi0gICAgMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsCi0gICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDE3MywyLDAsMCwxMTUsMjgsMCwwLAotICAgIDAsMTYsNyw2LDIsMTgsNCwzLDEsMTgsNCwzLDEsMywxLDMsCi0gICAgMSwyNywxNCwzLDEsMjEsNSwzLDEsMjEsNSwzLDEsMTE3LDE0LDAsCi0gICAgMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAotICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDQsMCwwLAotICAgIDAsNjYsMCwwLDAsMTE1LDEwMSwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLAotICAgIDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLAotICAgIDEwMCwyLDAsOTAsNCwwLDEwMCwzLDAsOTAsNSwwLDEwMCwxMSwwLDkwLAotICAgIDcsMCwxMDEsOCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDEzMSwxLAotICAgIDAsOTAsOSwwLDEwMSw4LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsCi0gICAgMTMxLDEsMCw5MCwxMCwwLDEwMSw4LDAsMTAwLDEwLDAsMTAwLDgsMCwxMDAsCi0gICAgOSwwLDEzMiwxLDAsMTMxLDEsMCw5MCwxMiwwLDEwMCwxMCwwLDgzLDQwLAotICAgIDEyLDAsMCwwLDExNywyMSwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSwKLSAgICA4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNjcsCi0gICAgMCwwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsCi0gICAgMTAwLDEwMSw5OSwxMDgsOTcsMTE0LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICA4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSwzMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLAotICAgIDQ2LDEwLDMyLDMyLDMyLDMyLDExNyw1OSwwLDAsMCw4MywxMTEsMTAyLDExNiwxMTksCi0gICAgOTcsMTE0LDEwMSw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwKLSAgICAxMTAsNjcsMTExLDExNCwxMDEsOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwxMDUsCi0gICAgMTExLDExMCwxMjUsOTIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLDEwMiwxMTcsMTA4LAotICAgIDEwOCwxMTAsOTcsMTA5LDEwMSwxMjUsMTE3LDY1LDAsMCwwLDgzLDExMSwxMDIsMTE2LDExOSwKLSAgICA5NywxMTQsMTAxLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsOTIsODAsMTIxLDExNiwxMDQsMTExLAotICAgIDExMCw2NywxMTEsMTE0LDEwMSw5MiwxMjMsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwKLSAgICAxMTEsMTEwLDEyNSw5Miw3NywxMTEsMTAwLDExNywxMDgsMTAxLDExNSw5MiwxMjMsMTAyLDExNywxMDgsCi0gICAgMTA4LDExMCw5NywxMDksMTAxLDEyNSw5Miw2OCwxMDEsOTgsMTE3LDEwMyw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsNjcsMCwwLDAsMTIxLDIzLDAsMTE2LDAsMCwxMDYsMSwwLDExNiwKLSAgICAwLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwyLDAsODMsODcsMTEwLDM3LDAsCi0gICAgNCwxMTYsMywwLDEwNywxMCwwLDExNCw2MiwwLDEsMSwxLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMTYsMCwwLDEwNiw0LDAsMTI0LDEsMCwxMzEsMiwwLDgzLAotICAgIDg5LDExMCwxLDAsODgsMTAwLDAsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLAotICAgIDUsMCwwLDAsMTE3LDcsMCwwLDAsOTUsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsCi0gICAgMTE3LDcsMCwwLDAsNzksMTEyLDEwMSwxMTAsNzUsMTAxLDEyMSwxMTcsMTcsMCwwLAotICAgIDAsNzIsNzUsNjksODksOTUsNjcsODUsODIsODIsNjksNzgsODQsOTUsODUsODMsCi0gICAgNjksODIsMTE3LDEyLDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDY5LDExNCwKLSAgICAxMTQsMTExLDExNCwxMTcsMTgsMCwwLDAsNzIsNzUsNjksODksOTUsNzYsNzksNjcsCi0gICAgNjUsNzYsOTUsNzcsNjUsNjcsNzIsNzMsNzgsNjksNDAsMiwwLDAsMCwxMTcsCi0gICAgMywwLDAsMCw5OSwxMDgsMTE1LDExNywzLDAsMCwwLDEwNywxMDEsMTIxLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE0LDAsMCwwLAotICAgIDk1LDExMSwxMTIsMTAxLDExMCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDI0MCwyLAotICAgIDAsMCwxMTUsOCwwLDAsMCwwLDIsMywxLDIzLDEsMTMsMSwxMTcsCi0gICAgMzYsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LAotICAgIDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTExLDExMiwxMDEsMTEwLDk1LAotICAgIDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTksMiwwLDAsMCwwLDAsMCwKLSAgICAwLDYsMCwwLDAsMTYsMCwwLDAsNjcsMCwwLDAsMTE1LDE0MiwwLAotICAgIDAsMCwxMjQsMCwwLDEwNiwwLDAsMTE0LDIxLDAsMTI0LDAsMCwxMDYsMSwKLSAgICAwLDEyNSwyLDAsMTEwLDksMCwxMjQsMCwwLDEwNiwyLDAsMTI1LDIsMCwKLSAgICAxMjQsMiwwLDEwNiwzLDAsMTAwLDEsMCwxMjQsMSwwLDEwMCwyLDAsMTE2LAotICAgIDQsMCwxMDYsNSwwLDEwMCwwLDAsMTAwLDMsMCwxMzMsMiwwLDI1LDEzMSwKLSAgICAwLDIsMTI1LDMsMCwxMjEsNDYsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDMsCi0gICAgMCwxMzEsMSwwLDE0MywyNSwwLDEyNSw0LDAsMTE2LDcsMCwxMDYsOCwwLAotICAgIDEyNCw0LDAsMTAwLDQsMCwxMzEsMiwwLDEyNSw1LDAsODcsMTAwLDAsMCwKLSAgICA4MSw4OCw4NywxMTAsMjIsMCw0LDExNiw5LDAsMTA3LDEwLDAsMTE0LDEzNywwLAotICAgIDEsMSwxLDEwMCwwLDAsODMsODksMTEwLDEsMCw4OCwxMjQsNSwwLDgzLAotICAgIDQwLDUsMCwwLDAsNzgsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCwKLSAgICA5NywxMDksMTAxLDExNywxMSwwLDAsMCwxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsCi0gICAgMTA1LDExMSwxMTAsMTA1LDMsMCwwLDAsMTE3LDAsMCwwLDAsNDAsMTEsMCwKLSAgICAwLDAsMTE3LDExLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg1LDczLAotICAgIDc2LDY4LDExNywxOCwwLDAsMCw4Miw2OSw3MSw3Myw4Myw4NCw4Miw4OSw5NSwKLSAgICA3NSw2OSw4OSw5NSw2OCw2OSw2Niw4NSw3MSwxMTcsMTIsMCwwLDAsODIsNjksCi0gICAgNzEsNzMsODMsODQsODIsODksOTUsNzUsNjksODksMTE3LDYsMCwwLDAsMTAyLAotICAgIDExMSwxMTQsMTA5LDk3LDExNiwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLAotICAgIDAsMCwxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMTE3LDE0LDAsMCwwLDk1LDExMSwKLSAgICAxMTIsMTAxLDExMCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDExNyw3LDAsMCwKLSAgICAwLDk1LDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDExNywxMCwwLDAsMCw4MSwxMTcsMTAxLAotICAgIDExNCwxMjEsODYsOTcsMTA4LDExNywxMDEsMTE3LDEyLDAsMCwwLDg3LDEwNSwxMTAsMTAwLAotICAgIDExMSwxMTksMTE1LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLAotICAgIDEwMSw0MCw2LDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNywxMiwwLDAsMCwKLSAgICAxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDk1LDEwNywxMDEsMTIxLDExNywzLDAsMCwKLSAgICAwLDEwNywxMDEsMTIxLDExNyw0LDAsMCwwLDEwNCwxMDcsMTAxLDEyMSwxMTcsOCwwLAotICAgIDAsMCwxMDIsMTA1LDEwOCwxMDEsMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsMTE1LDEwMSw5NywxMTQsCi0gICAgOTksMTA0LDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMjQ3LDIsMCwwLDExNSwKLSAgICAyMiwwLDAsMCwwLDIsOSwxLDEyLDIsOSwxLDE1LDEsMjIsMSwKLSAgICAzLDEsMTgsMSwyOCwxLDEzLDEsOSwxLDExNywzOCwwLDAsMCw4NywKLSAgICAxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTE0LDEwMSwxMDMsCi0gICAgMTA1LDExNSwxMTYsMTE0LDEyMSw5OSwzLDAsMCwwLDAsMCwwLDAsNiwwLAotICAgIDAsMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsMTM3LDAsMCwwLDEyNCwKLSAgICAwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsMywKLSAgICAwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMzEsMCwxMDAsMSwwLDgzLDEyMSwxNywKLSAgICAwLDExNiwyLDAsMTA2LDMsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywxMTAsCi0gICAgMjIsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDcyLDAsMSwxLDEsMTAwLAotICAgIDEsMCw4Myw4OSwxMTAsMSwwLDg4LDEyMCw1NywwLDExNiw1LDAsMTMxLDAsCi0gICAgMCw2OCw5Myw0NiwwLDkyLDIsMCwxMjUsNCwwLDEyNSw1LDAsMTI0LDMsCi0gICAgMCwxMDYsNiwwLDExNiw3LDAsMTI0LDUsMCwxMzEsMSwwLDEzMSwxLDAsCi0gICAgMTE0LDgzLDAsMTI0LDQsMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCw4MywKLSAgICAxMTMsODMsMCw4NywxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDM0LDAsCi0gICAgMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywKLSAgICAxMDksMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNCwxMDEsMTAzLDEwNSwxMTUsCi0gICAgMTE2LDExNCwxMjEsNDYsNzgsNDAsOCwwLDAsMCwxMTcsMTYsMCwwLDAsOTUsCi0gICAgMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMTE3LAotICAgIDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsOTUsMTExLDExNSwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTE2LDk3LDExNiwxMTcsNywwLDAsMCw3OSw4MywKLSAgICA2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDI3LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExNSwKLSAgICAxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsMTA4LDEwMSw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsOCwwLDAsMCwxMDEsMTEwLDEwMCwxMTUsMTE5LDEwNSwKLSAgICAxMTYsMTA0LDExNyw1LDAsMCwwLDExNiwxMTcsMTEyLDEwOCwxMDEsNDAsNiwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsCi0gICAgOCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLAotICAgIDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsOCwwLDAsMCwxMTUsMTE3LDEwMiwxMDIsCi0gICAgMTA1LDEyMCwxMDEsMTE1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA2LDMsMCwwLDExNSwyMCwwLDAsMCwwLDMsMTUsMSwxMiwxLDQsCi0gICAgMSwzLDEsMTcsMSwxMywxLDksMSwyMiwxLDIxLDEsMTE3LDMzLDAsCi0gICAgMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LAotICAgIDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw3OCw3MCw0MCwxMywwLDAsMCwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsCi0gICAgMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsCi0gICAgOTksOTUsOTUsMTE3LDEyLDAsMCwwLDgyLDY5LDcxLDczLDgzLDg0LDgyLDg5LAotICAgIDk1LDc1LDY5LDg5LDExNywxOCwwLDAsMCw4Miw2OSw3MSw3Myw4Myw4NCw4MiwKLSAgICA4OSw5NSw3NSw2OSw4OSw5NSw2OCw2OSw2Niw4NSw3MSwxMTcsNSwwLDAsMCwKLSAgICA3MCw5NywxMDgsMTE1LDEwMSwxMTcsMTEsMCwwLDAsNjgsNjksNjYsODUsNzEsOTUsCi0gICAgNjYsODUsNzMsNzYsNjgsMTE3LDExLDAsMCwwLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwKLSAgICAxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywxNCwwLDAsMCw5NSwxMTEsMTEyLDEwMSwxMTAsOTUsCi0gICAgMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMTcsMTYsMCwwLDAsOTUsMTE1LDEwMSwKLSAgICA5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCwKLSAgICA5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjEsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLAotICAgIDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgMjI3LDIsMCwwLDExNSwxNiwwLDAsMCwxNiwzLDYsMyw2LDMsNiwKLSAgICAyLDYsMiwxOCw3LDE4LDE1LDMsMSwxMTcsMjEsMCwwLDAsODcsMTA1LAotICAgIDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsCi0gICAgMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCi0gICAgNSwwLDAsMCw2NiwwLDAsMCwxMTUsNzQsMCwwLDAsMTI0LDAsMCwKLSAgICA2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLAotICAgIDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLAotICAgIDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMSw2LDAsMTAwLDYsCi0gICAgMCwxMDAsMTAsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMSwxMzEsMSwwLAotICAgIDkwLDgsMCwxMDAsOSwwLDgzLDQwLDExLDAsMCwwLDExNywxMywwLDAsCi0gICAgMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsMTE3LDgzLAotICAgIDAsMCwwLDY2LDk3LDExNSwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTExLDEwMiwKLSAgICAzMiw5OSwxMTEsMTA5LDEwOSwxMTEsMTEwLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMCwxMDEsMTAxLAotICAgIDEwMCwxMDEsMTAwLDMyLDk4LDEyMSwzMiw5OCwxMTEsMTE2LDEwNCwzMiw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk3LDExMCwxMDAsMTAsMzIsMzIsMzIsCi0gICAgMzIsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDUsCi0gICAgMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsODgsMCwwLDAsCi0gICAgMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMTAwLDEsMCwyNSwxMjUsMiwwLDEyNCwyLDAsMTA2LDIsMCwxMDAsCi0gICAgMiwwLDEwMCwxLDAsMTMxLDIsMCwxMDAsMywwLDI1LDEyNSwzLDAsMTI0LAotICAgIDEsMCwxMDYsMywwLDEwMCwyLDAsMTMxLDEsMCwxMDAsNCwwLDI1LDEyNSwKLSAgICA0LDAsMTI0LDMsMCwxMDAsNSwwLDEwNywyLDAsMTExLDg3LDAsMTI0LDQsCi0gICAgMCwxMDAsNSwwLDEwNywzLDAsODMsNDAsNiwwLDAsMCwxMTcsMTQxLDAsCi0gICAgMCwwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsCi0gICAgMTEyLDEwMSw5OSwxMTYsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDMyLDk4LDEyMSwzMiw5OSwxMDQsMTAxLDk5LDEwNywxMDUsMTEwLAotICAgIDEwMywzMiwxMDUsMTAyLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsOTgsCi0gICAgMTIxLDMyLDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwxMDQsCi0gICAgOTcsMTE1LDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLAotICAgIDMyLDM5LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw0NiwxMTIsMTIxLDM5LDQ2LDEwNSwKLSAgICAxLDAsMCwwLDExNywxLDAsMCwwLDQ2LDEwNSwwLDAsMCwwLDEwNSwKLSAgICAyLDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSwKLSAgICA5NSw0MCw0LDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDYsMCwwLDAsMTE0LDExNSwxMTIsMTA4LAotICAgIDEwNSwxMTYsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsCi0gICAgMTEwLDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsCi0gICAgMCwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDEzLDAsMCwwLDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw5NSw5OCw5NywxMTUsMTAxLDExNyw5LDAsMCwwLAotICAgIDExNiw5NywxMDUsMTA4LDk1LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LAotICAgIDEwNyw5NywxMDMsMTAxLDI2LDMsMCwwLDExNSw4LDAsMCwwLDAsMywyNSwKLSAgICAxLDIyLDEsMTksMSwxMTcsMjQsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk5LDUsMCwwLDAsMCwwLDAsMCwxMiwwLDAsMCwyMiwKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsMjA4LDEsMCwwLDEyNCwyLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzMywyLDAsMjUsMTI1LDUsMCwxMjQsMiwwLDEwMCwKLSAgICAyLDAsMTAwLDMsMCwxMzMsMiwwLDI1LDEyNSw2LDAsMTI0LDIsMCwxMDAsCi0gICAgMywwLDEwMCw0LDAsMTMzLDIsMCwyNSwxMjUsNywwLDEyNCw1LDAsMTE2LAotICAgIDAsMCwxMDcsMywwLDExNCwxMTUsMCwxMDAsNSwwLDEwNiwxLDAsMTI0LDEsCi0gICAgMCwxMjQsNSwwLDEzMSwyLDAsMTI1LDgsMCwxMTYsMiwwLDEyNCw4LDAsCi0gICAgMTMxLDEsMCwxLDExNiwzLDAsMTI0LDgsMCwxMDAsNiwwLDEyNCwxLDAsCi0gICAgMTAwLDcsMCwxMjQsMywwLDEzMSwxLDIsMTMwLDEsMCwxMTAsMTE2LDAsMTE2LAotICAgIDQsMCwxMjQsNiwwLDEzMSwxLDAsMTAwLDIsMCwxMDcsMywwLDExNCwxNzMsCi0gICAgMCwxMDAsOCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw5LDAsCi0gICAgMTE2LDIsMCwxMjQsOSwwLDEzMSwxLDAsMSwxMTYsNSwwLDEyNCw5LDAsCi0gICAgMTMxLDEsMCwxMzAsMSwwLDExMCw1OCwwLDExNiw0LDAsMTI0LDcsMCwxMzEsCi0gICAgMSwwLDEwMCwyLDAsMTA3LDMsMCwxMTQsMjMxLDAsMTAwLDksMCwxMDYsMSwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMjUsOSwwLDExNiwyLDAsMTI0LDksMCwKLSAgICAxMzEsMSwwLDEsMTE2LDUsMCwxMjQsOSwwLDEzMSwxLDAsMTMwLDEsMCwKLSAgICAxMTAsMCwwLDEyNCw0LDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxOTQsMSwxMjEsCi0gICAgMjAsMCwxMTYsNywwLDEyNCw0LDAsMTAwLDEwLDAsMjUsMTMxLDEsMCwxMjUsCi0gICAgMTAsMCw4NywxMTAsMTgsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDI3LDEsCi0gICAgMSwxLDEsODksMTEwLDcxLDAsODgsMTE2LDksMCwxMjQsNiwwLDEzMSwxLAotICAgIDAsMTI0LDEwLDAsMTA3LDMsMCwxMTQsOTgsMSwxMDAsMTEsMCwxMDYsMSwwLAotICAgIDEyNCwxLDAsMTMxLDEsMCwxMjUsOSwwLDExNiwyLDAsMTI0LDksMCwxMzEsCi0gICAgMSwwLDEsMTE2LDMsMCwxMjQsOSwwLDEwMCw2LDAsMTI0LDEsMCwxMDAsCi0gICAgNywwLDEyNCwzLDAsMTMxLDEsMiwxMzAsMSwwLDExMCwwLDAsMTIxLDE4LAotICAgIDAsMTI0LDQsMCwxMDAsMTIsMCwyNSwxMDAsMTMsMCw2NCwxMjUsMTEsMCw4NywKLSAgICAxMTAsMTgsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDEzNiwxLDEsMSwxLAotICAgIDg5LDExMywxOTQsMSw4OCwxMTYsOSwwLDEyNCw3LDAsMTMxLDEsMCwxMjQsMTEsCi0gICAgMCwxMDcsMywwLDExNCwxOTQsMSwxMTYsMywwLDEwMCwxMSwwLDEwNiwxLDAsCi0gICAgMTI0LDEsMCwxMzEsMSwwLDEwMCw2LDAsMTI0LDEsMCwxMDAsNywwLDEyNCwKLSAgICAzLDAsMTMxLDEsMiwxMzAsMSwwLDExMywxOTQsMSwxMTAsMCwwLDEyNCwyLAotICAgIDAsMTAwLDQsMCwxMDAsMSwwLDEzMywyLDAsMjUsODMsNDAsMTQsMCwwLAotICAgIDAsMTE3LDE5MywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsMTA4LDEwMSwxMDAsMzIsOTgsMTIxLDExNiwxMDEsCi0gICAgMTE1LDMyLDEwMiwxMTQsMTExLDEwOSwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0NCwKLSAgICAzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDksCi0gICAgOTcsMTAzLDEwNSw5OSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTAsMTE3LDEwOSwKLSAgICA5OCwxMDEsMTE0LDQ0LDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsOTcsCi0gICAgMTEwLDEwMCwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDExNSwxMDUsMTIyLDEwMSwzMiw5NywKLSAgICAxMDgsMTExLDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDk3LDEyMSw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKLSAgICA5NSwxMTUsMTE2LDk3LDExNiwxMTUsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwxMTAsMzIsMTE1LDEwNywxMDUsMTEyLDMyLDExNiwxMDQsMTAxLDMyLDExNiwxMDUsMTA5LAotICAgIDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsOTksMTA0LDEwMSw5OSwxMDcsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsMTA1LDQsMCwwLDAsMTA1LDgsMCwKLSAgICAwLDAsMTA1LDEyLDAsMCwwLDExNywzMCwwLDAsMCw5OCw5NywxMDAsMzIsCi0gICAgMTA5LDk3LDEwMywxMDUsOTksMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMDUsMTEwLDMyLAotICAgIDEyMywzMywxMTQsMTI1LDU4LDMyLDEyMywzMywxMTQsMTI1LDExNyw0LDAsMCwwLDExMCwKLSAgICA5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywxOSwwLDAsCi0gICAgMCw5OCw5NywxMDAsMzIsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwzMiwxMDUsCi0gICAgMTEwLDMyLDEyMywxMjUsMTE3LDE0LDAsMCwwLDk4LDk3LDEwMCwzMiwxMTUsMTA1LDEyMiwKLSAgICAxMDEsMzIsMTA1LDExMCwzMiwxMjMsMTI1LDExNyw1LDAsMCwwLDEwOSwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE3LDI0LDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwNSwKLSAgICAxMTUsMzIsMTE1LDExNiw5NywxMDgsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDEyMywxMjUsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwNSwxMjIsMTAxLDEwOCwzLDAsMCwwLDI1NSwxMjcsMjU1LDEyNywKLSAgICAzLDAsNDAsMTAsMCwwLDAsMTE3LDEyLDAsMCwwLDk1LDc3LDY1LDcxLAotICAgIDczLDY3LDk1LDY2LDg5LDg0LDY5LDgzLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LAotICAgIDEwOSw5NywxMTYsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLAotICAgIDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMSwwLDAsMCw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwKLSAgICAxMTcsOCwwLDAsMCw2OSw3OSw3MCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsMTA1LDExMCwxMTYsMTE3LDgsCi0gICAgMCwwLDAsNzUsMTAxLDEyMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLDAsCi0gICAgOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw0MCwxMiwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywKLSAgICAxMDksMTAxLDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsMTE3LDEzLDAsMCwwLAotICAgIDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwwLAotICAgIDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsNSwKLSAgICAwLDAsMCwxMDksOTcsMTAzLDEwNSw5OSwxMTcsMTMsMCwwLDAsMTE0LDk3LDExOSwKLSAgICA5NSwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDExNyw4LDAsMCwwLDExNCwKLSAgICA5NywxMTksOTUsMTE1LDEwNSwxMjIsMTAxLDExNywzLDAsMCwwLDEwOSwxMTUsMTAzLDExNywKLSAgICA3LDAsMCwwLDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMiwwLDAsMCwKLSAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDExLDAsMCwKLSAgICAwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE1LDEwNSwxMjIsMTAxLDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDIwLDAsMCwwLDk1LDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwKLSAgICAxMDEsMzQsMywwLDAsMTE1LDY4LDAsMCwwLDAsNywxNiwxLDE2LDEsCi0gICAgMTYsMSwxMiwxLDE4LDEsMTAsMSwyNywxLDE4LDEsMTUsMSwxMCwxLAotICAgIDE1LDEsMTgsMSwxNSwxLDEwLDEsMTUsMSwxMiwxLDMsMSwyMCwxLAotICAgIDEzLDEsNSwyLDE4LDEsMTUsMSwxMCwxLDE1LDEsMTIsMSwzLDEsCi0gICAgMTgsMSwxMywxLDUsMiwxOCwxLDMsMSwxNSwxLDIxLDMsMTE3LDM0LAotICAgIDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSwKLSAgICA0Niw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsCi0gICAgMTAxLDk5LDExMSwxMDAsMTAxLDExNywxMCwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLAotICAgIDEwOCwxMDEsMTE1LDExNSw5OSwyLDAsMCwwLDEsMCwwLDAsNSwwLDAsCi0gICAgMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsMjI3LDAsMCwwLDEyNCwxLAotICAgIDAsMTA2LDAsMCwxMjUsMywwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMywwLAotICAgIDEzMSwxLDAsMTI1LDQsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDMsMCwxMzEsCi0gICAgMSwwLDEyNCwxLDAsOTUsMywwLDEyNCwyLDAsMTE1LDEwNiwwLDEyMSwyMiwKLSAgICAwLDExNiw0LDAsMTI0LDEsMCwxMDYsMywwLDEzMSwxLDAsMTI0LDEsMCwKLSAgICA5NSw1LDAsODcsMTEzLDExOCwwLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsMTAyLAotICAgIDAsMSwxLDEsMTI0LDEsMCwxMDYsMywwLDEyNCwxLDAsOTUsNSwwLAotICAgIDg5LDExMywxMTgsMCw4OCwxMTAsMTIsMCwxMjQsMSwwLDEwNiwzLDAsMTI0LDEsCi0gICAgMCw5NSw1LDAsMTI0LDMsMCwxMjQsMSwwLDk1LDcsMCwxMjQsMCwwLAotICAgIDEwNiw4LDAsMTI0LDMsMCwxMzEsMSwwLDExNCwxNzAsMCwxMTYsOSwwLDEyNCwKLSAgICAxLDAsMTA2LDMsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTAzLDEsMCwxMjQsCi0gICAgMSwwLDk1LDEwLDAsMTEwLDI1LDAsMTI0LDEsMCwxMDYsNywwLDEwNiwxMSwKLSAgICAwLDEwMCwyLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEyNCwxLDAsOTUsNywKLSAgICAwLDEyNCwwLDAsMTI0LDEsMCw5NSwxMiwwLDExNiwxMywwLDExNiwxNCwwLAotICAgIDEyNCw0LDAsMTI0LDEsMCwxMDYsMTUsMCwxMzEsMywwLDEsMTI0LDEsMCwKLSAgICA4Myw0MCwzLDAsMCwwLDExNyw4MiwwLDAsMCw3MiwxMDEsMTA4LDExMiwxMDEsCi0gICAgMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDk3LDk4LDEwOCwxMDEsMzIsMTE2LDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLAotICAgIDMyLDEwMSwxMDUsMTE2LDEwNCwxMDEsMTE0LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTExLAotICAgIDExNCwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwxMDgsMTExLDk3LDEwMCwxMDUsMTEwLDEwMyw0NiwxMDUsMCwwLAotICAgIDAsMCwxMTcsMSwwLDAsMCw0Niw0MCwxNiwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsOCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw4LDAsMCwwLDk1LDk1LDEwMiwKLSAgICAxMDUsMTA4LDEwMSw5NSw5NSwxMTcsMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwKLSAgICAxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsOTksOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsMTE3LDE5LDAsMCwwLDc4LAotICAgIDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDk1LDk1LDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LAotICAgIDExNiwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMTcsMTAsCi0gICAgMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTE3LDI1LDAsMCwKLSAgICAwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LAotICAgIDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNyw0LDAsMCwwLDEwMSwKLSAgICAxMjAsMTAxLDk5LDExNyw4LDAsMCwwLDk1LDk1LDEwMCwxMDUsOTksMTE2LDk1LDk1LAotICAgIDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw2LAotICAgIDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMCwwLDAsMCwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTcsMTEsMCwwLDAsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LDEwNiwxMDEsOTksCi0gICAgMTE2LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsCi0gICAgMCwwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDgwLDMsCi0gICAgMCwwLDExNSwzMiwwLDAsMCwwLDQsOSwxLDE1LDEsMTgsMSw2LAotICAgIDEsMywxLDIyLDEsMTMsMSwyMCwyLDEyLDEsOSwxLDE1LDEsMjgsCi0gICAgMiwyNSwxLDksMSwxOSwxLDExNywyNiwwLDAsMCw5NSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsOTUsMTA4LDExMSw5NywxMDAsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNzAsNDAsOSwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDExNywyMCwwLDAsMCw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsCi0gICAgOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNywxNywKLSAgICAwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDExNywxMiwKLSAgICAwLDAsMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwKLSAgICAxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTMsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksCi0gICAgMTE1LDIxLDMsMCwwLDExNSwxMCwwLDAsMCwxNiwzLDYsMiwxMiw4LAotICAgIDEyLDQ2LDYsMSwxMTcsMTMsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDY2LDk3LDExNSwxMDUsOTksMTE1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLAotICAgIDAsMCwwLDIsMCwwLDAsNjYsMCwwLDAsMTE1LDEwNCwwLDAsMCwKLSAgICAxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLAotICAgIDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDkwLDMsMCwxMDAsMywwLDEwMCwKLSAgICA0LDAsMTMyLDAsMCw5MCw0LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwwLAotICAgIDAsOTAsNSwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwwLDkwLDYsMCwKLSAgICAxMDAsOSwwLDEwMCwxMCwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMSwwLDEwMCwKLSAgICAxMiwwLDEzMiwwLDAsOTAsOCwwLDEwMCwxMywwLDEwMCwxNCwwLDEzMiwwLAotICAgIDAsOTAsOSwwLDEwMCwxNSwwLDgzLDQwLDE2LDAsMCwwLDExNywxMiwwLAotICAgIDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDIsCisgICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MSwxLDEyMiwKKyAgICA0NSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDk5LDExMSwxMDAsMTAxLAorICAgIDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw0MSwyLAorICAgIDExNCwxMDYsMCwwLDAsMTE0LDE4LDEsMCwwLDQxLDIsMTE0LDgsMSwwLAorICAgIDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMTIsMSwwLDAsNjYsNSwwLDAsMTE1LDIsCisgICAgMCwwLDAsMCw0LDEyMiwyMyw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLAogICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwxMCwwLDAsMCwxMTYsMCwwLDEzMCwxLDAsMTAwLDEsCi0gICAgMCw4Myw0MCwyLDAsMCwwLDExNywxMjEsMCwwLDAsNzksMTEyLDExNiwxMDUsCi0gICAgMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE2LDEwNCw5NywxMTYsCi0gICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLAotICAgIDEwNSwxMDIsMTA1LDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTA1LDEwOSwxMDEsMzIsNDAsCi0gICAgOTcsMTEwLDMyLDEwNSwxMTAsMTE2LDQxLDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwKLSAgICAxMDAsMzIsMTEyLDk3LDExNiwxMDQsNDQsMzIsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDk3LDMyLDExNSwxMTYsMTE0LDQ2LDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDc4LDQwLDEsMCwwLDAsMTE3LDE5LDAsMCwwLAotICAgIDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwKLSAgICAxMTQsMTExLDExNCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwKLSAgICAxMDksMTE2LDEwNSwxMDksMTAxLDEwNiwzLDAsMCwxMTUsMiwwLDAsMCwwLDQsCi0gICAgMTE3LDIzLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwyMCwwLDAsMCwxMDUsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDAsMTAwLDEsMCw1NCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICAxMTQsMSwwLDAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsCi0gICAgMTA0LDExMSwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTA1LDExMCwxMDMsMzIsOTcsMzIsCi0gICAgMTA5LDEwMSwxMTYsOTcsMTAwLDk3LDExNiw5NywzMiwxMDAsMTA1LDk5LDExNiwzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLAotICAgIDExMiw5NywxMTYsMTA0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsCi0gICAgOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDExNSwxMTYsMTE0LAotICAgIDQxLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDgwLDExMSwxMTUsMTE1LDEwNSwKLSAgICA5OCwxMDgsMTAxLDMyLDEwNywxMDEsMTIxLDExNSw1OCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw0NSwzMiwzOSwxMDksMTE2LDEwNSwxMDksMTAxLDM5LDMyLDQwLDEwOSw5NywxMTAsCi0gICAgMTAwLDk3LDExNiwxMTEsMTE0LDEyMSw0MSwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMCwKLSAgICAxMTcsMTA5LDEwMSwxMTQsMTA1LDk5LDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsCi0gICAgMzIsMTExLDEwMiwzMiwxMDgsOTcsMTE1LDExNiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk5LDExMSwxMDAsMTAxLDMyLDEwOSwKLSAgICAxMTEsMTAwLDEwNSwxMDIsMTA1LDk5LDk3LDExNiwxMDUsMTExLDExMCw1OSwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw0NSwzMiwzOSwxMTUsMTA1LDEyMiwxMDEsMzksMzIsNDAsMTExLAotICAgIDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDQxLDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTE1LDEwNSwxMjIsMTAxLDMyLDEwNSwxMTAsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDExMSwxMDIsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSwKKyAgICAwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDU0LAorICAgIDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDEwMiwKKyAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDAsMTExLAorICAgIDMyLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCisgICAgMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsOCwKKyAgICAxLDAsMCwxMTQsMTU4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCwxMywxLDAsMCw3Miw1LDAsMCwKKyAgICAxMTUsMiwwLDAsMCwwLDQsMTIyLDI1LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCwKKyAgICA5OSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMDYsCisgICAgMSwwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MSwxLDEyMiw0Niw4MiwxMDEsMTE2LAorICAgIDExNywxMTQsMTEwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwKKyAgICAzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsNDEsMiwxMTQsMTA2LDAsCisgICAgMCwwLDkwLDE3LDEwNSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTEyLDk3LAorICAgIDk5LDEwNyw5NywxMDMsMTAxLDQxLDIsMTE0LDgsMSwwLDAsMTE0LDE1OCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMjE5LDAsMCwwLDc4LDUsMCwwLDExNSwyLDAsMCwwLDAsNCwKKyAgICAxMjIsMjUsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCisgICAgNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDEsMTUsMTE0LDU3LDAsCisgICAgMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwKKyAgICAwLDExNCwxNCwxLDAsMCwxMTQsMjA1LDAsMCwwLDExNCwxNSwxLDAsMCwKKyAgICAxMTQsMTAsMSwwLDAsMTE0LDExLDEsMCwwLDExNCwxLDEsMCwwLDExNCwKKyAgICA0LDEsMCwwLDExNCwxNjQsMCwwLDAsMTE0LDEyLDEsMCwwLDExNCwxMywKKyAgICAxLDAsMCwxMTQsMjE5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNiwxLDAsCisgICAgMCwxNCw1LDAsMCwxMTUsMjgsMCwwLDAsMTIsNyw2LDIsMTgsOSwKKyAgICAzLDEsMjEsNiwzLDEsMTgsOCwxOCw5LDE4LDksMywxLDIxLDUsCisgICAgMywxLDIxLDUsMywxLDExNCwxNiwxLDAsMCw5OSwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDY0LDAsMCwwLAorICAgIDExNSwxMjEsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLAorICAgIDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCw5MCw0LDAsMTAwLDMsMCwKKyAgICA5MCw1LDAsMTAwLDQsMCw5MCw2LDAsMTAxLDcsMCwxMDAsNSwwLDEwMCwKKyAgICA2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNywwLDEwMCw3LAorICAgIDAsMTAwLDgsMCwxMzIsMCwwLDEzMSwxLDAsOTAsOSwwLDEwMSw3LDAsCisgICAgMTAwLDksMCwxMDAsOSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwyLDAsMTMxLAorICAgIDEsMCw5MCwxMCwwLDEwMSw3LDAsMTAwLDksMCwxMDAsMTIsMCwxMDAsMTMsCisgICAgMCwxMzIsMSwwLDEzMSwxLDAsOTAsMTEsMCwxMDAsOSwwLDgzLDQxLDE0LAorICAgIDIxOCwyMSw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwKKyAgICAxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMjIsNjIsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsCisgICAgMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLDEwMSw5OSwxMDgsOTcsMTE0LDEwMSwxMDAsMzIsMTA1LAorICAgIDExMCwzMiwxMTYsMTA0LDEwMSwzMiw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSwzMiwxMTQsMTAxLAorICAgIDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDQ2LDEyMiw1OSw4MywxMTEsMTAyLDExNiwxMTksOTcsMTE0LAorICAgIDEwMSw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsNjcsCisgICAgMTExLDExNCwxMDEsOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwKKyAgICAxMjUsOTIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLDEwMiwxMTcsMTA4LDEwOCwxMTAsCisgICAgOTcsMTA5LDEwMSwxMjUsMTIyLDY1LDgzLDExMSwxMDIsMTE2LDExOSw5NywxMTQsMTAxLDkyLDgwLAorICAgIDEyMSwxMTYsMTA0LDExMSwxMTAsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw2NywxMTEsMTE0LDEwMSwKKyAgICA5MiwxMjMsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDEyNSw5Miw3NywKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDExNSw5MiwxMjMsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAorICAgIDEyNSw5Miw2OCwxMDEsOTgsMTE3LDEwMyw3MCw5OSwyLDAsMCwwLDAsMCwwLAorICAgIDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsNjcsMCwKKyAgICAwLDAsMTIxLDIzLDAsMTE2LDAsMCwxMDYsMSwwLDExNiwwLDAsMTA2LDIsCisgICAgMCwxMjQsMSwwLDEzMSwyLDAsODMsODcsMTEwLDM3LDAsNCwxMTYsMywwLAorICAgIDEwNywxMCwwLDExNCw2MiwwLDEsMSwxLDExNiwwLDAsMTA2LDEsMCwxMTYsCisgICAgMCwwLDEwNiw0LDAsMTI0LDEsMCwxMzEsMiwwLDgzLDg5LDExMCwxLDAsCisgICAgODgsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDUsMjE4LDcsOTUsMTE5LDEwNSwxMTAsCisgICAgMTE0LDEwMSwxMDMsOTAsNyw3OSwxMTIsMTAxLDExMCw3NSwxMDEsMTIxLDkwLDE3LDcyLDc1LAorICAgIDY5LDg5LDk1LDY3LDg1LDgyLDgyLDY5LDc4LDg0LDk1LDg1LDgzLDY5LDgyLDExNCwKKyAgICA0MCwwLDAsMCw5MCwxOCw3Miw3NSw2OSw4OSw5NSw3Niw3OSw2Nyw2NSw3NiwKKyAgICA5NSw3Nyw2NSw2Nyw3Miw3Myw3OCw2OSw0MSwyLDExNCw4LDEsMCwwLDIxOCwKKyAgICAzLDEwNywxMDEsMTIxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxNCw5NSwxMTEsMTEyLDEwMSwxMTAsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwKKyAgICAxMTYsMTE0LDEyMSw5Nyw1LDAsMCwxMTUsOCwwLDAsMCwwLDIsMywxLAorICAgIDIzLDEsMTMsMSwxMjIsMzYsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywKKyAgICAxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTExLDExMiwxMDEsCisgICAgMTEwLDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTksMiwwLDAsMCwwLAorICAgIDAsMCwwLDYsMCwwLDAsMTYsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDE0MiwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTE0LDIxLDAsMTI0LDAsMCwKKyAgICAxMDYsMSwwLDEyNSwyLDAsMTEwLDksMCwxMjQsMCwwLDEwNiwyLDAsMTI1LAorICAgIDIsMCwxMjQsMiwwLDEwNiwzLDAsMTAwLDEsMCwxMjQsMSwwLDEwMCwyLAorICAgIDAsMTE2LDQsMCwxMDYsNSwwLDEwMCwwLDAsMTAwLDMsMCwxMzMsMiwwLAorICAgIDI1LDEzMSwwLDIsMTI1LDMsMCwxMjEsNDYsMCwxMjQsMCwwLDEwNiw2LDAsCisgICAgMTI0LDMsMCwxMzEsMSwwLDE0MywyNSwwLDEyNSw0LDAsMTE2LDcsMCwxMDYsCisgICAgOCwwLDEyNCw0LDAsMTAwLDQsMCwxMzEsMiwwLDEyNSw1LDAsODcsMTAwLAorICAgIDAsMCw4MSw4OCw4NywxMTAsMjIsMCw0LDExNiw5LDAsMTA3LDEwLDAsMTE0LAorICAgIDEzNywwLDEsMSwxLDEwMCwwLDAsODMsODksMTEwLDEsMCw4OCwxMjQsNSwKKyAgICAwLDgzLDQxLDUsNzgsMTE0LDE1OCwwLDAsMCw5MCwxMSwxMTUsMTIxLDExNSw5NSwKKyAgICAxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMTE0LDEzNiwwLDAsMCwxMTQsMzAsMCwwLAorICAgIDAsNDEsMTAsMjE4LDExLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg1LDczLDc2LDY4LAorICAgIDIxOCwxOCw4Miw2OSw3MSw3Myw4Myw4NCw4Miw4OSw5NSw3NSw2OSw4OSw5NSw2OCwKKyAgICA2OSw2Niw4NSw3MSwyMTgsMTIsODIsNjksNzEsNzMsODMsODQsODIsODksOTUsNzUsCisgICAgNjksODksMTE0LDQ3LDAsMCwwLDExNCw3LDAsMCwwLDIxOCw3LDExOCwxMDEsCisgICAgMTE0LDExNSwxMDUsMTExLDExMCwxMTQsMjIsMSwwLDAsMTE0LDIwLDEsMCwwLDkwLAorICAgIDEwLDgxLDExNywxMDEsMTE0LDEyMSw4Niw5NywxMDgsMTE3LDEwMSwxMTQsNDAsMCwwLDAsCisgICAgNDEsNiwxMTQsOCwxLDAsMCwxMTQsMTU4LDAsMCwwLDkwLDEyLDExNCwxMDEsCisgICAgMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTUsMTA3LDEwMSwxMjEsMTE0LDIxLDEsMCwwLDkwLAorICAgIDQsMTA0LDEwNywxMDEsMTIxLDIxOCw4LDEwMiwxMDUsMTA4LDEwMSwxMTIsOTcsMTE2LDEwNCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsCisgICAgOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsCisgICAgMTA0LDUsMCwwLDExNSwyMiwwLDAsMCwwLDIsOSwxLDEyLDIsOSwKKyAgICAxLDE1LDEsMjIsMSwzLDEsMTgsMSwyOCwxLDEzLDEsOSwxLDEyMiwKKyAgICAzOCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsCisgICAgNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTE0LAorICAgIDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3OCw5OSw0LDAsMCwwLDAsMCwwLAorICAgIDAsOCwwLDAsMCwxNCwwLDAsMCw2NywwLDAsMCwxMTUsMTU1LDAsCisgICAgMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDQsCisgICAgMCwxMjQsNCwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMzEsMCwxMDAsMCwwLAorICAgIDgzLDEyMSwxNCwwLDExNiwxLDAsMTI0LDQsMCwxMzEsMSwwLDEsODcsMTEwLAorICAgIDIyLDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw2OSwwLDEsMSwxLDEwMCwKKyAgICAwLDAsODMsODksMTEwLDEsMCw4OCwxMjAsNzgsMCwxMTYsMywwLDEzMSwwLAorICAgIDAsNjgsOTMsNjcsMCw5MiwyLDAsMTI1LDUsMCwxMjUsNiwwLDEyNCw0LAorICAgIDAsMTA2LDQsMCwxMTYsNSwwLDEyNCw2LDAsMTMxLDEsMCwxMzEsMSwwLAorICAgIDExNCw4MCwwLDExNiw2LDAsMTI0LDEsMCwxMjQsNSwwLDEyNCwxLDAsMTI0LAorICAgIDQsMCwxMzEsMiwwLDEwMCwxLDAsMTI0LDQsMCwxMzEsMiwxLDEyNSw3LAorICAgIDAsMTI0LDcsMCw4MywxMTMsODAsMCw4NywxMDAsMCwwLDgzLDQxLDIsNzgsCisgICAgMTE0LDIxNywwLDAsMCw0MSw3LDExNCwyOCwxLDAsMCwxMTQsMzksMCwwLAorICAgIDAsMTE0LDQwLDAsMCwwLDExNCwyNDAsMCwwLDAsMTE0LDIzMCwwLDAsMCwKKyAgICAxMTQsMjMxLDAsMCwwLDExNCwxNzMsMCwwLDAsNDEsOCwxMTQsOCwxLDAsCisgICAgMCwxMTQsMTU4LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsOSwxLDAsMCwKKyAgICAxMTQsMjcsMSwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsMTI3LDAsMCwwLDExNCwKKyAgICAxNzcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDEwLDEsMCwwLDExOSw1LDAsMCwxMTUsMjQsMCwwLAorICAgIDAsMCwyLDE1LDEsMTIsMSw0LDEsMywxLDE0LDEsMTMsMSw5LAorICAgIDEsMjIsMSwyMSwxLDIxLDEsOSwxLDEyMiwzMSw4NywxMDUsMTEwLDEwMCwxMTEsCisgICAgMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICA0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksMywwLDAsMCwwLAorICAgIDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgNDUsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTI0LDIsMCwKKyAgICAxMzEsMiwwLDEyNSwzLDAsMTI0LDMsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LAorICAgIDM3LDAsMTI0LDMsMCwxMDYsMSwwLDgzLDEwMCwxLDAsODMsMTAwLDEsMCwKKyAgICA4Myw0MSwyLDEyMiwxMDgsNzAsMTA1LDExMCwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE0LDEwMSwKKyAgICAxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLAorICAgIDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODUsMTE1LDEwMSwKKyAgICAzMiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCw0MSwzMiwxMDUsCisgICAgMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw3OCw0MSwyLDExNCwxMCwxLDAsMCwxMTQsMTY5LDAsMCwwLDQxLDQsCisgICAgMTE0LDgsMSwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LAorICAgIDE3NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMTEsMSwwLDAsMTM0LDUsMCwwLDExNSw4LDAsMCwKKyAgICAwLDAsNywxOCwxLDEyLDEsNywyLDEyMiwzMyw4NywxMDUsMTEwLDEwMCwxMTEsCisgICAgMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICA0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDEsMTIsMTE0LDU3LAorICAgIDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsCisgICAgMCwwLDExNCwyNSwxLDAsMCwxMTQsMjQsMSwwLDAsMTE0LDIzLDEsMCwKKyAgICAwLDExNCwxNSwxLDAsMCwxMTQsMjIsMSwwLDAsMTE0LDI4LDEsMCwwLAorICAgIDExNCwxMCwxLDAsMCwxMTQsMTEsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE5LAorICAgIDEsMCwwLDg1LDUsMCwwLDExNSwyMCwwLDAsMCwxMiwyLDYsMywKKyAgICA2LDMsNiwyLDYsMiwxOCw3LDE4LDE1LDMsMSwyMSwxNCwzLDEsCisgICAgMTE0LDE5LDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDUyLDAsMCwwLDEwMSwKKyAgICAwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywKKyAgICAwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLAorICAgIDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAxLDYsMCw5MCw3LDAsMTAwLAorICAgIDYsMCw4Myw0MSw3LDIxOCwxMyw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsCisgICAgMTE1LDEwNSw5OSwxMTUsMTIyLDgzLDY2LDk3LDExNSwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsCisgICAgMzIsMTExLDEwMiwzMiw5OSwxMTEsMTA5LDEwOSwxMTEsMTEwLDMyLDk5LDExMSwxMDAsMTAxLDMyLAorICAgIDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDk4LDEyMSwzMiw5OCwxMTEsMTE2LDEwNCwzMiw4MywKKyAgICAxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk3LDExMCwxMDAsMTAsCisgICAgMzIsMzIsMzIsMzIsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsCisgICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDUsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsODgsCisgICAgMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsCisgICAgMSwwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMjUsMiwwLDEyNCwyLDAsMTA2LAorICAgIDIsMCwxMDAsMiwwLDEwMCwxLDAsMTMxLDIsMCwxMDAsMywwLDI1LDEyNSwKKyAgICAzLDAsMTI0LDEsMCwxMDYsMywwLDEwMCwyLDAsMTMxLDEsMCwxMDAsNCwKKyAgICAwLDI1LDEyNSw0LDAsMTI0LDMsMCwxMDAsNSwwLDEwNywyLDAsMTExLDg3LAorICAgIDAsMTI0LDQsMCwxMDAsNSwwLDEwNywzLDAsODMsNDEsNiwxMjIsMTQxLDY3LAorICAgIDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsCisgICAgMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwKKyAgICAxMTYsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKKyAgICAxMDMsMTAxLDMyLDk4LDEyMSwzMiw5OSwxMDQsMTAxLDk5LDEwNywxMDUsMTEwLDEwMywzMiwxMDUsCisgICAgMTAyLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywKKyAgICAxMTYsMTA0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDEwMywKKyAgICAxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwxMDQsOTcsMTE1LDMyLAorICAgIDk3LDMyLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDM5LDk1LAorICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw0NiwxMTIsMTIxLDM5LDQ2LDExNCwyOSwwLDAsCisgICAgMCwxMTQsMTE2LDAsMCwwLDExNCw4NCwwLDAsMCwxMTQsMTE1LDAsMCwwLAorICAgIDExNCw3MiwwLDAsMCw0MSw0LDExNCwzOCwwLDAsMCwxMTQsMjM4LDAsMCwKKyAgICAwLDExNCwzNCwwLDAsMCwxMTQsMzIsMCwwLDAsNDEsNSwxMTQsNzEsMCwKKyAgICAwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMTMxLDAsMCwwLDkwLDEzLDEwMiwxMDUsCisgICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw5NSw5OCw5NywxMTUsMTAxLDkwLDksMTE2LDk3LDEwNSwKKyAgICAxMDgsOTUsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDIxOSwwLDAsMCwxNTMsNSwwLDAsMTE1LDgsCisgICAgMCwwLDAsMCwzLDI1LDEsMjIsMSwxOSwxLDEyMiwyNCw5NSw3NiwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsMTA1LDExNSw5NSwxMTIsOTcsCisgICAgOTksMTA3LDk3LDEwMywxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwKKyAgICAwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsODAsMCwwLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLDEyNSwyLAorICAgIDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDU3LDAsMTE2LDIsMCwKKyAgICAxMDAsMiwwLDEwNiwzLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwxLDAsMTMxLAorICAgIDEsMCwxMzAsMSwwLDExMCwwLDAsMTE2LDQsMCwxMTYsNSwwLDEyNCwyLAorICAgIDAsMTI0LDEsMCwxMDYsNiwwLDEzMSwzLDAsMSwxMDAsMSwwLDgzLDQxLAorICAgIDMsMTIyLDE5LDY5LDEyMCwxMDEsOTksMTE3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNzgsMTIyLDUyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwKKyAgICAxMDgsMTExLDk3LDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwKKyAgICAzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsNDAsNDEsCisgICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDc4LDExMSwxMTAsMTAxLDQxLDcsMTE0LAorICAgIDEyLDEsMCwwLDExNCw1NywwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCw0NywKKyAgICAwLDAsMCwxMTQsMTE0LDAsMCwwLDExNCwxNzUsMCwwLDAsMTE0LDYzLDAsCisgICAgMCwwLDQxLDMsMTE0LDcxLDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDE5NCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsMSwxLDAsMCwxNjEsNSwwLDAsMTE1LDEwLDAsMCwwLAorICAgIDAsMiwxOCwxLDEyLDEsMywxLDI0LDEsMTIyLDI1LDk1LDc2LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSw0NiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MSw4LDExNCw1NywwLDAsMCwxMTQsNTYsMCwKKyAgICAwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsMjE5LDAsMCwKKyAgICAwLDExNCwxLDEsMCwwLDExNCwxODAsMCwwLDAsMTE0LDQsMSwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDI5LDEsMCwwLDE0OCw1LDAsMCwxMTUsOCwwLAorICAgIDAsMCwxMiwzLDYsMiwxMiw4LDEyLDgsMTE0LDI5LDEsMCwwLDk5LAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsCisgICAgNjQsMCwwLDAsMTE1LDEwNiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsCisgICAgMCwwLDkwLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCw5MCwzLAorICAgIDAsMTAwLDMsMCwxMDAsNCwwLDEzMiwwLDAsOTAsNCwwLDEwMCw1LDAsCisgICAgMTAwLDYsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNywwLDEwMCw4LDAsMTMyLAorICAgIDAsMCw5MCw2LDAsMTAwLDksMCwxMDAsMTAsMCwxMzIsMCwwLDkwLDcsCisgICAgMCwxMDAsMTEsMCwxMDAsMTgsMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwxLAorICAgIDkwLDgsMCwxMDAsMTUsMCwxMDAsMTYsMCwxMzIsMCwwLDkwLDksMCwxMDAsCisgICAgMTcsMCw4Myw0MSwxOSwyMTgsMTIsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICAxLDAsMCwwLDY3LDAsMCwwLDExNSwxMCwwLDAsMCwxMTYsMCwwLAorICAgIDEzMCwxLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiwxNzgsNzksMTEyLDExNiwxMDUsMTExLAorICAgIDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE2LDEwNCw5NywxMTYsMzIsCisgICAgMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDEwNSwKKyAgICAxMDIsMTA1LDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTA1LDEwOSwxMDEsMzIsNDAsOTcsCisgICAgMTEwLDMyLDEwNSwxMTAsMTE2LDQxLDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsCisgICAgMzIsMTEyLDk3LDExNiwxMDQsNDQsMzIsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMTIsOTcsMTE2LAorICAgIDEwNCwzMiwxMDUsMTE1LDMyLDk3LDMyLDExNSwxMTYsMTE0LDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDgyLDk3LDEwNSwxMTUsMTAxLDExNSwzMiw3Myw3OSw2OSwxMTQsCisgICAgMTE0LDExMSwxMTQsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsCisgICAgMTA0LDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiw5OCwxMDEsMzIsMTA0LDk3LDExMCwxMDAsCisgICAgMTA4LDEwMSwxMDAsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMSwKKyAgICAyMTgsNyw3Myw3OSw2OSwxMTQsMTE0LDExMSwxMTQsNDEsMiwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDM1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCwxMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLAorICAgIDE3NCw1LDAsMCwxMTUsMiwwLDAsMCwwLDYsMTIyLDIzLDgzLDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA5LAorICAgIDExNiwxMDUsMTA5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsCisgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwyMCwwLDAsMCwxMDUsMSwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDEsMCwKKyAgICA1NCw4Myw0MSwyLDk3LDE3MCwxLDAsMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LAorICAgIDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDUsCisgICAgMTEwLDEwMywzMiw5NywzMiwxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMCwxMDUsCisgICAgOTksMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwKKyAgICAxMDIsMTA1LDEwMSwxMDAsMzIsMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMTE2LDExMSwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsCisgICAgMzIsNDAsMTE1LDExNiwxMTQsNDEsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgODAsMTExLDExNSwxMTUsMTA1LDk4LDEwOCwxMDEsMzIsMTA3LDEwMSwxMjEsMTE1LDU4LDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDQ1LDMyLDM5LDEwOSwxMTYsMTA1LDEwOSwxMDEsMzksCisgICAgMzIsNDAsMTA5LDk3LDExMCwxMDAsOTcsMTE2LDExMSwxMTQsMTIxLDQxLDMyLDEwNSwxMTUsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTEwLDExNywxMDksMTAxLDExNCwxMDUsOTksMzIsMTE2LDEwNSwxMDksMTAxLAorICAgIDExNSwxMTYsOTcsMTA5LDExMiwzMiwxMTEsMTAyLDMyLDEwOCw5NywxMTUsMTE2LDMyLDExNSwxMTEsCisgICAgMTE3LDExNCw5OSwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksCisgICAgMTExLDEwMCwxMDEsMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLAorICAgIDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDQ1LDMyLDM5LDExNSwxMDUsMTIyLAorICAgIDEwMSwzOSwzMiw0MCwxMTEsMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsNDEsMzIsMTA1LDExNSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTA1LDEyMiwxMDEsMzIsMTA1LDExMCwzMiw5OCwxMjEsMTE2LAorICAgIDEwMSwxMTUsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDMyLDk5LDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsCisgICAgMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDExNCwxMDEsCisgICAgOTcsMTAwLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwKKyAgICAxMTUsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODIsOTcsMTA1LDExNSwxMDEsCisgICAgMTE1LDMyLDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDk4LAorICAgIDEwMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDEwMCw0NiwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwxMTQsMTgzLDAsMCwwLDQxLDEsMTE0LDMyLDEsMCwwLDQxLAorICAgIDIsMTE0LDcxLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTE1LDExNiw5NywxMTYsMTE1LDE4Miw1LDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDExLDEyMiwyMyw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSw5OSw0LDAsMCwwLDAsCisgICAgMCwwLDAsNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICAxNiwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDIsMCwxMjQsMywwLAorICAgIDEzMSwyLDAsODMsNDEsMSwxMjIsMjI4LDc5LDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LAorICAgIDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTksMTE0LAorICAgIDEwNSwxMTYsMTAxLDExNSwzMiwxMDAsOTcsMTE2LDk3LDMyLDQwLDk4LDEyMSwxMTYsMTAxLDExNSwKKyAgICA0MSwzMiwxMTYsMTExLDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwKKyAgICAzMiw0MCw5NywzMiwxMTUsMTE2LDExNCw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwNSwxMTAsMTAzLDMyLAorICAgIDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiw5NywxMDgsMTA4LDExMSwKKyAgICAxMTksMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExOSwxMTQsMTA1LDExNiwxMDUsCisgICAgMTEwLDEwMywzMiwxMTEsMTAyLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwKKyAgICAxMDUsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsCisgICAgMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwKKyAgICAxMTUsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTEsMTE0LDEwMCwxMDEsCisgICAgMTE0LDMyLDExNiwxMTEsMzIsOTksMTExLDExNCwxMTQsMTAxLDk5LDExNiwxMDgsMTIxLDMyLDExNiwKKyAgICAxMTQsOTcsMTEwLDExNSwxMDIsMTAxLDExNCwzMiwxMTIsMTAxLDExNCwxMDksMTA1LDExNSwxMTUsMTA1LAorICAgIDExMSwxMTAsMTE1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDQxLDEsMjE4LDgsCisgICAgMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw0MSw0LDExNCw3MSwwLDAsMCwxMTQsCisgICAgMTQxLDAsMCwwLDkwLDEwLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTEyLDk3LDExNiwxMDQsCisgICAgMTE0LDUzLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCwxNSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsCisgICAgMTAxLDk5LDExMSwxMDAsMTAxLDE5NSw1LDAsMCwxMTUsMiwwLDAsMCwwLDgsCisgICAgMTIyLDI4LDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsCisgICAgOTksOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5OSwzLAorICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCwxLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsMTUwLAorICAgIDc5LDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLAorICAgIDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTksMTE0LDEwNSwxMTYsMTAxLDExNSwzMiwxMDAsOTcsMTE2LAorICAgIDk3LDMyLDQwLDk4LDEyMSwxMTYsMTAxLDExNSw0MSwzMiwxMTYsMTExLDMyLDk3LDMyLDEwMiwKKyAgICAxMDUsMTA4LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw0MCw5NywzMiwxMTUsMTE2LDExNCw0MSwKICAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDksMTEyLDEwOCwxMDEsCiAgICAgMTA5LDEwMSwxMTAsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwKLSAgICAxMDQsMTExLDEwMCwzMiw5NywxMDgsMTA4LDExMSwxMTksMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwzMiwxMTQsMTAxLDk3LDEwMCwzMiw5OCwxMjEsCisgICAgMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwxMDIsMTExLDExNCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsCiAgICAgMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDExNyw1LDAsMCwwLDEwOSwxMTYsMTA1LDEwOSwxMDEsCi0gICAgNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA5LAotICAgIDExNiwxMDUsMTA5LDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsCi0gICAgMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTEyLDMsMCwwLDExNSwyLDAsMCwwLDAsCi0gICAgMTAsMTE3LDIzLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDk5LDQsMCwKLSAgICAwLDAsMCwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDE2LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMiwwLAotICAgIDEyNCwzLDAsMTMxLDIsMCw4Myw0MCwxLDAsMCwwLDExNywyMjgsMCwwLAotICAgIDAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCi0gICAgMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDEwMCw5NywKLSAgICAxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsMzIsOTcsMzIsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLDExNSwxMTYsMTE0LAotICAgIDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsCi0gICAgMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsCi0gICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLAotICAgIDEwMCwzMiwxMDUsMTEwLDMyLDExMSwxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwzMiw5OSwxMTEsCi0gICAgMTE0LDExNCwxMDEsOTksMTE2LDEwOCwxMjEsMzIsMTE2LDExNCw5NywxMTAsMTE1LDEwMiwxMDEsMTE0LAotICAgIDMyLDExMiwxMDEsMTE0LDEwOSwxMDUsMTE1LDExNSwxMDUsMTExLDExMCwxMTUsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsNDAsMSwwLDAsMCwxMTcsOCwwLDAsMCwxMTUsCi0gICAgMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQwLDQsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNywxMSwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDExNywxMCwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LAotICAgIDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTUsMCwwLDAsOTUsOTksCi0gICAgOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMjQsMywwLAotICAgIDAsMTE1LDIsMCwwLDAsMCw4LDExNywyOCwwLDAsMCw4MywxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTksMywwLDAsMCwwLDAsCi0gICAgMCwwLDMsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsMTAsCi0gICAgMCwwLDAsMTE2LDAsMCwxMzAsMSwwLDEwMCwxLDAsODMsNDAsMiwwLAotICAgIDAsMCwxMTcsMTUxLDAsMCwwLDc5LDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDMyLAotICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTksMTE0LDEwNSwKLSAgICAxMTYsMTAxLDExNSwzMiwxMDAsOTcsMTE2LDk3LDMyLDQwLDk4LDEyMSwxMTYsMTAxLDExNSw0MSwKLSAgICAzMiwxMTYsMTExLDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwKLSAgICA0MCw5NywzMiwxMTUsMTE2LDExNCw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwKLSAgICAxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiw5NywxMDgsMTA4LDExMSwxMTksCi0gICAgMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLAotICAgIDEwMywzMiwxMTEsMTAyLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDAsCi0gICAgMSwwLDAsMCwxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwKLSAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDQwLDMsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMDAsOTcsMTE2LDk3LDEzNCwzLDAsMCwxMTUsMiwwLDAsMCwwLDYsCi0gICAgMTE3LDIxLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNDYsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw5OSwyLDAsMCwwLDAsCi0gICAgMCwwLDAsOSwwLDAsMCw0NCwwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgNjIsMSwwLDAsMTAwLDEsMCwxMDAsMiwwLDEwOCwwLDAsMTI1LDIsMCwKLSAgICAxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTIxLAotICAgIDE5LDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwzLDAsMTMxLDEsMCwxMjUsNCwKLSAgICAwLDg3LDExMCw1OCwwLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsMTA2LDAsMSwKLSAgICAxMjUsNSwwLDEsMTIyLDI2LDAsMTE2LDQsMCwxMDAsMywwLDEwMCw0LDAsCi0gICAgMTI0LDEsMCwxMzEsMSwxLDEyNCw1LDAsMTMwLDIsMCw4Nyw4OSwxMDAsMiwKLSAgICAwLDEwMCwyLDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMCwxLDAsODgsMTE2LAotICAgIDUsMCwxMDYsNiwwLDEyNCw0LDAsMTMxLDEsMCwxMDYsNywwLDEyNSw2LAotICAgIDAsMTIxLDE5LDAsMTI0LDIsMCwxMDYsOCwwLDEyNCw2LDAsMTMxLDEsMCwKLSAgICAxMjUsNywwLDg3LDExMCw1OCwwLDQsMTE2LDksMCwxMDcsMTAsMCwxMTQsMjA0LAotICAgIDAsMSwxMjUsNSwwLDEsMTIyLDI2LDAsMTE2LDQsMCwxMDAsNSwwLDEwMCwKLSAgICA0LDAsMTI0LDEsMCwxMzEsMSwxLDEyNCw1LDAsMTMwLDIsMCw4Nyw4OSwKLSAgICAxMDAsMiwwLDEwMCwyLDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMCwxLDAsCi0gICAgODgsMTE2LDUsMCwxMDYsMTAsMCwxMDAsMiwwLDEwMCw3LDAsMTMxLDIsMCwKLSAgICAxMjUsOCwwLDEyMSwzMCwwLDEyNCw4LDAsMTA2LDEzLDAsMTI0LDQsMCwxMDYsCi0gICAgMTMsMCwxMjQsNywwLDEwMCwxLDAsMjUsMTMxLDEsMCwxMzEsMSwwLDgzLAotICAgIDg3LDExMCw1OCwwLDQsMTE2LDE0LDAsMTA3LDEwLDAsMTE0LDU3LDEsMSwxMjUsCi0gICAgNSwwLDEsMTIyLDI2LDAsMTE2LDQsMCwxMDAsNiwwLDEwMCw0LDAsMTI0LAotICAgIDEsMCwxMzEsMSwxLDEyNCw1LDAsMTMwLDIsMCw4Nyw4OSwxMDAsMiwwLAotICAgIDEwMCwyLDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMCwxLDAsODgsMTAwLDIsCi0gICAgMCw4Myw0MCw4LDAsMCwwLDExNyw1MiwwLDAsMCw2NywxMTEsMTEwLDk5LAotICAgIDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsCi0gICAgMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywxMTAsMTE1LDExMiwxMDEsOTksMTE2LDc2LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDQ2LAotICAgIDEwNSwwLDAsMCwwLDc4LDExNywzOSwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDMyLDExMCwxMTEsMTE2LDMyLDk3LDExOCw5NywxMDUsMTA4LDk3LDk4LDEwOCwxMDEsMzIsCi0gICAgMTE2LDEwNCwxMTQsMTExLDExNywxMDMsMTA0LDMyLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgNDAsNDEsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDI1LDAsMCwwLAotICAgIDcwLDk3LDEwNSwxMDgsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsCi0gICAgMzIsMTAxLDExMCw5OSwxMTEsMTAwLDEwNSwxMTAsMTAzLDExNywyOCwwLDAsMCw3MCw5NywKLSAgICAxMDUsMTA4LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDExNSwKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDg0LDQwLDE1LDAsMCwwLAotICAgIDExNyw4LDAsMCwwLDExNiwxMTEsMTA3LDEwMSwxMTAsMTA1LDEyMiwxMDEsMTE3LDEyLDAsCi0gICAgMCwwLDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOCwKLSAgICAwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDExNyw3LDAsMCwwLAotICAgIDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDMsMCwwLDAsOTUsMTA1LDExMSwxMTcsCi0gICAgNywwLDAsMCw2NiwxMjEsMTE2LDEwMSwxMTUsNzMsNzksMTE3LDgsMCwwLDAsCi0gICAgMTE0LDEwMSw5NywxMDAsMTA4LDEwNSwxMTAsMTAxLDExNywxNSwwLDAsMCwxMDAsMTAxLDExNiwKLSAgICAxMDEsOTksMTE2LDk1LDEwMSwxMTAsOTksMTExLDEwMCwxMDUsMTEwLDEwMywxMTcsMTEsMCwwLAotICAgIDAsODMsMTIxLDExMCwxMTYsOTcsMTIwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMjUsMCwwLAotICAgIDAsNzMsMTEwLDk5LDExNCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDEwOCw3OCwxMDEsMTE5LDEwOCwKLSAgICAxMDUsMTEwLDEwMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDExNyw0LDAsMCwwLDc4LAotICAgIDExMSwxMTAsMTAxLDExNyw0LDAsMCwwLDg0LDExNCwxMTcsMTAxLDExNyw2LDAsMCwKLSAgICAwLDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDE4LDAsMCwwLDg1LDExMCwxMDUsOTksCi0gICAgMTExLDEwMCwxMDEsNjgsMTAxLDk5LDExMSwxMDAsMTAxLDY5LDExNCwxMTQsMTExLDExNCw0MCw5LAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsCi0gICAgMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDgsMCwwLDAsMTE2LDExMSwKLSAgICAxMDcsMTAxLDExMCwxMDUsMTIyLDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsCi0gICAgMTIsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsCi0gICAgMTE3LDMsMCwwLDAsMTAxLDEyMCw5OSwxMTcsMTAsMCwwLDAsMTE0LDEwMSw5NywKLSAgICAxMDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsOCwwLDAsMCwxMDEsMTEwLDk5LDExMSwKLSAgICAxMDAsMTA1LDExMCwxMDMsMTE3LDE1LDAsMCwwLDExMCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSwKLSAgICA5NSwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDExNCw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywKLSAgICAxMTQsOTksMTAxLDE0MywzLDAsMCwxMTUsMzgsMCwwLDAsMCwyLDEyLDEsCi0gICAgMTUsMSwzLDEsMTksMSwxOCwxLDksMSwzMSwxLDE4LDEsMywxLAotICAgIDE5LDEsMTgsMSw5LDEsMzEsMSwxOCwxLDMsMSwzMCwxLDE4LDEsCi0gICAgOSwxLDExNywyMywwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDEyLDAsMCwwLDQ1LDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw1MiwyLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsCi0gICAgMCwxMzEsMSwwLDEyNSwyLDAsMTAwLDEwLDAsMTI1LDMsMCwxMjEsMTYsMCwKLSAgICAxMTYsMiwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsNCwwLDg3LDExMCwyNCwwLAotICAgIDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNjMsMCwxLDEsMSwxMDAsMTAsMCwKLSAgICAxMjUsNCwwLDg5LDExMCwxNCwxLDg4LDEyMSwxOSwwLDEyNCwwLDAsMTA2LDQsCi0gICAgMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDUsMCw4NywxMTAsMTgsMCw0LDExNiwKLSAgICAzLDAsMTA3LDEwLDAsMTE0LDEwMywwLDEsMSwxLDg5LDExMCwyMzAsMCw4OCwKLSAgICAxMTYsNSwwLDEyNCw1LDAsMTAwLDEsMCwyNSwxMzEsMSwwLDEyNSwzLDAsCi0gICAgMTIxLDE5LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCw0LDAsMTMxLDEsMCwxMjUsCi0gICAgNiwwLDg3LDExMCwxOCwwLDQsMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTU5LDAsCi0gICAgMSwxLDEsODksMTEwLDE3NCwwLDg4LDEyMSwyOCwwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMjQsMSwwLDEyNCw2LDAsMTI0LDQsMCwxMjQsNSwwLDEzMSw0LDAsCi0gICAgMTI1LDcsMCw4NywxMTAsMjQsMCw0LDExNiw5LDAsMTE2LDEwLDAsMTAyLDIsCi0gICAgMCwxMDcsMTAsMCwxMTQsMjE0LDAsMSwxLDEsODksMTEwLDExOSwwLDg4LDExNiwKLSAgICAxMSwwLDEwMCwyLDAsMTI0LDQsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMTYsCi0gICAgMTIsMCwxMDYsMTMsMCwxMjQsNywwLDEzMSwxLDAsMTI1LDgsMCwxMTYsMTQsCi0gICAgMCwxMjQsOCwwLDExNiwxNSwwLDEzMSwyLDAsMTE0LDM4LDEsMTE2LDE2LDAsCi0gICAgMTA2LDE3LDAsMTI0LDgsMCwxMjQsMiwwLDEzMSwyLDAsMSwxMTYsMTEsMCwKLSAgICAxMDAsMywwLDEyNCw0LDAsMTMxLDIsMCwxLDEyNCw4LDAsODMsMTAwLDQsCi0gICAgMCwxMjUsOSwwLDExNiw5LDAsMTI0LDksMCwxMDYsMTgsMCwxMjQsNCwwLAotICAgIDEzMSwxLDAsMTAwLDUsMCwxMjQsMSwwLDEwMCw2LDAsMTI0LDQsMCwxMzEsCi0gICAgMSwyLDEzMCwxLDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwyLDAsMTMxLDEsCi0gICAgMCwxMjUsMTAsMCwxMTYsMTksMCwxMTYsMjAsMCwxMjQsMTAsMCwxMjQsMiwwLAotICAgIDEwMCw3LDAsMTAwLDgsMCwxMDAsMTEsMCwxMzEsNCwxLDEyNSwxMSwwLDExNiwKLSAgICAxMSwwLDEwMCwzLDAsMTI0LDIsMCwxMzEsMiwwLDEsMTE2LDIyLDAsMTA2LAotICAgIDIzLDAsMTIsMTE0LDQ4LDIsMTI0LDQsMCwxMDAsMTAsMCwxMDcsOSwwLDExNCwKLSAgICA0OCwyLDEyNCwzLDAsMTAwLDEwLDAsMTA3LDksMCwxMTQsNDgsMiwxMTYsMjQsCi0gICAgMCwxMTYsMjUsMCwxMzEsMSwwLDEyNSw2LDAsMTI0LDYsMCwxMDYsMjYsMCwKLSAgICAxMTYsMjcsMCwxMjQsMywwLDEzMSwxLDAsMTMxLDEsMCwxLDEyNCw2LDAsCi0gICAgMTA2LDI2LDAsMTE2LDI3LDAsMTE2LDI4LDAsMTI0LDEwLDAsMTMxLDEsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsMSwxMjQsNiwwLDEwNiwyNiwwLDExNiwxMiwwLDEwNiwKLSAgICAyOSwwLDEyNCwxMSwwLDEzMSwxLDAsMTMxLDEsMCwxLDEyMSwzNiwwLDEyNCwKLSAgICAwLDAsMTA2LDMwLDAsMTI0LDIsMCwxMjQsNCwwLDEyNCw2LDAsMTMxLDMsCi0gICAgMCwxLDExNiwxMSwwLDEwMCw5LDAsMTI0LDQsMCwxMzEsMiwwLDEsODcsCi0gICAgMTEzLDQ4LDIsNCwxMTYsMywwLDEwNywxMCwwLDExNCw0NCwyLDEsMSwxLAotICAgIDg5LDExMyw0OCwyLDg4LDExMCwwLDAsMTI0LDExLDAsODMsNDAsMTIsMCwwLAotICAgIDAsMTE3LDE5MCwwLDAsMCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsCi0gICAgMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwKLSAgICAzMiw3MywxMTAsMTE1LDExMiwxMDEsOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw4MiwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwKLSAgICAxMDEsOTksMTExLDEwMCwxMDEsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0NiwzMiw4NCwxMTEsMzIsCi0gICAgMTE5LDExNCwxMDUsMTE2LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5OCwxMjEsCi0gICAgMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0NCwzMiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5NywxMDgsMTE1LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwxMTcsNSwwLDAsMCwxMDksMTE2LDEwNSwxMDksMTAxLDExNywxMywKLSAgICAwLDAsMCwxMjMsMTI1LDMyLDEwOSw5NywxMTYsOTksMTA0LDEwMSwxMTUsMzIsMTIzLDEyNSwKLSAgICAxMTcsMTksMCwwLDAsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LAotICAgIDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMTI1LDExNywyMSwwLDAsMCw3OCwxMTEsMTEwLAotICAgIDQ1LDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDUsMTEwLDMyLAotICAgIDEyMywxMjUsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAxLDEyMCwxMDEsOTksMTE3LDEyLDAsCi0gICAgMCwwLDEwMCwxMTEsMTEwLDExNiw5NSwxMDUsMTEwLDEwNCwxMDEsMTE0LDEwNSwxMTYsMTE3LDEwLAotICAgIDAsMCwwLDExOSwxMTQsMTExLDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNzgsODQsNDAsCi0gICAgMzEsMCwwLDAsMTE3LDEyLDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LAotICAgIDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTcsCi0gICAgMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwKLSAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMCwwLDAsCi0gICAgMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LDMsMCwwLDAsCi0gICAgMTA1LDExMCwxMTYsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICAxMTcsNywwLDAsMCw3Myw3OSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDIwLDAsMCwKLSAgICAwLDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwKLSAgICAxMDEsOTksMTExLDEwMCwxMDEsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgNjksMTE0LDExNCwxMTEsMTE0LDExNyw4LDAsMCwwLDY5LDc5LDcwLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsCi0gICAgMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDcsMCwwLDAsMTA5LDk3LDExNCwxMTUsCi0gICAgMTA0LDk3LDEwOCwxMTcsNSwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMTUsMTE3LDEwLDAsCi0gICAgMCwwLDEwNSwxMTUsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMTE3LDEwLDAsMCwKLSAgICAwLDk1LDk5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsNCwwLDAsMCwKLSAgICA5NSwxMDUsMTA5LDExMiwxMTcsMTYsMCwwLDAsOTUsMTAyLDEwNSwxMjAsOTUsOTksMTExLAotICAgIDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsNiwwLDAsMCwxMDIsMTExLAotICAgIDExNCwxMDksOTcsMTE2LDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwKLSAgICAxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsCi0gICAgMTAxLDEwMCwxMTcsNywwLDAsMCw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwxMTcsNCwKLSAgICAwLDAsMCw4NCwxMTQsMTE3LDEwMSwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsCi0gICAgMTksMCwwLDAsMTAwLDExMSwxMTAsMTE2LDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsOTgsCi0gICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDksMCwwLDAsOTgsMTIxLDExNiwxMDEsCi0gICAgOTcsMTE0LDExNCw5NywxMjEsMTE3LDEyLDAsMCwwLDk1LDc3LDY1LDcxLDczLDY3LAotICAgIDk1LDY2LDg5LDg0LDY5LDgzLDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsCi0gICAgMTAwLDExNyw3LDAsMCwwLDk1LDExOSw5NSwxMDgsMTExLDExMCwxMDMsMTE3LDMsMCwKLSAgICAwLDAsMTA4LDEwMSwxMTAsMTE3LDUsMCwwLDAsMTAwLDExNywxMDksMTEyLDExNSwxMTcsCi0gICAgMTUsMCwwLDAsOTUsOTksOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwKLSAgICAxMTEsMTAwLDEwMSw0MCwxMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNywxMSwKLSAgICAwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwKLSAgICAwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LAotICAgIDEzLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDExNywyLDAsMCwwLDExNSwxMTYsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiwKLSAgICA5NywxMTcsMTAsMCwwLDAsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgMTE3LDUsMCwwLDAsMTAyLDExMSwxMTcsMTEwLDEwMCwxMTcsMywwLDAsMCwxMDksCi0gICAgMTE1LDEwMywxMTcsMTIsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSw5OCwxMjEsCi0gICAgMTE2LDEwMSwxMTUsMTE3LDExLDAsMCwwLDk5LDExMSwxMDAsMTAxLDk1LDExMSw5OCwxMDYsCi0gICAgMTAxLDk5LDExNiw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICA4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDE2NSwzLDAsMCwKLSAgICAxMTUsOTgsMCwwLDAsMCw3LDE1LDEsNiwxLDMsMSwxNiwxLDEzLAotICAgIDEsMTEsMiwzLDEsMTksMSwxMywxLDUsMiwxNiwxLDMsMSwxOSwKLSAgICAxLDEzLDEsNSwyLDMsMSwxMiwxLDMsMSwxMywxLDE5LDEsNSwKLSAgICAyLDksMSw3LDEsMTUsMSwxNSwxLDE2LDEsNiwxLDcsMSw0LAotICAgIDIsNiwxLDE4LDEsMTUsMSwxNSwxLDYsMSwxMiwxLDksMSwxMywKLSAgICAxLDIyLDEsMTIsMSwxMiwxLDE5LDEsMjUsMSwyMiwxLDMsMSwxOSwKLSAgICAxLDE3LDEsMTMsMSw4LDEsMTE3LDIxLDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwKLSAgICAxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTI0LDAsMCwxMDYsMCwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MCwxLDAsMCwwLDExNywwLDEsCi0gICAgMCwwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4MiwxMDEsMTEzLDExNywxMDUsMTE0LAotICAgIDEwMSwxMTUsMzIsNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwNSwxMTEsMTEwLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsCi0gICAgOTcsMTEwLDEwMCwzMiw4MiwxMDEsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywzMiwxMTYsMTExLDMyLDk4LAotICAgIDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKLSAgICAxMDEsMTEwLDExNiwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA4LDExMSw5NywxMDAsMzIsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwzMiw4NSwxMTUsMTAxLDMyLDExMSwKLSAgICAxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMDAsMTA1LAotICAgIDk5LDExNiw5NywxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsMTE5LDEwNCwxMDEsMTE2LDEwNCwxMDEsCi0gICAgMTE0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEwMywxMDEsMTE2LDk1LDk5LDExMSwKLSAgICAxMDAsMTAxLDMyLDExNywxMTUsMTAxLDExNSw0NywxMTksMTE0LDEwNSwxMTYsMTAxLDExNSwzMiw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw0MCwxLDAsMCwwLDExNywxMiwwLDAsMCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLAotICAgIDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjI3LAotICAgIDMsMCwwLDExNSwyLDAsMCwwLDAsOCwxMTcsMjQsMCwwLDAsODMsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MCwxMCwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDExNywxMCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LDE1LDAsMCwwLDk1LDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDgsMCwwLAotICAgIDAsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywxMTcsMTAsMCwwLDAsMTAzLDEwMSwKLSAgICAxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiwKLSAgICA5NSw5OSwxMTEsMTAwLDEwMSwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwKLSAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTA0LDMsMCwwLDExNSwxNCwwLDAsMCwxNiwKLSAgICAyLDEyLDYsMTIsMTIsMTIsMTAsMTIsOSwxMiwyMiwxMiw2MiwxMTcsMTIsMCwKLSAgICAwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwwLDIsCi0gICAgMCwwLDAsMTE1LDkyLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwKLSAgICAxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsCi0gICAgMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMSw1LDAsMTM1LDAsMCwKLSAgICAxMDIsMSwwLDEwMCw0LDAsMTAwLDUsMCwxMzQsMCwwLDEzMSwxLDAsOTAsCi0gICAgNiwwLDEwMSw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsCi0gICAgMCw5MCw3LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsOCwwLAotICAgIDEzNSwwLDAsODMsNDAsMTAsMCwwLDAsMTE3LDEwLDAsMCwwLDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTAzLDAsMCwwLDY2LDk3LDExNSwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTksMTA4LAotICAgIDk3LDExNSwxMTUsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLAotICAgIDExMiwxMTQsMTExLDExNiwxMTEsOTksMTExLDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsCi0gICAgMzIsMTE2LDEwNCw5NywxMTYsMTAsMzIsMzIsMzIsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiwxMTcsMTE1LAotICAgIDk3LDEwMywxMDEsNDYsOTksMywwLDAsMCwwLDAsMCwwLDMsMCwwLAotICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsMTI0LDEsCi0gICAgMCwxMjQsMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLDAsOTUsMSwwLAotICAgIDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNzUsMCwwLDAsNjcsOTcsCi0gICAgOTksMTA0LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsCi0gICAgOTcsMTA5LDEwMSwzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LAotICAgIDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMiwxMTEsMTE3LAotICAgIDExMCwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDc4LDQwLDIsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsNDAsMywwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwKLSAgICAwLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsCi0gICAgMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsCi0gICAgNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDI0MywzLAotICAgIDAsMCwxMTUsNCwwLDAsMCwwLDMsOSwxLDExNywxOSwwLDAsMCwKLSAgICA3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsCi0gICAgMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDMsMCwwLDAsMywwLDAsMCwxMTUsMjIsMCwwLDAsMTE2LDAsMCwKLSAgICAxMTYsMSwwLDEyNCwwLDAsMTMxLDIsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLAotICAgIDEsMCw4Myw0MCwxLDAsMCwwLDExNywyNiwwLDAsMCw3NiwxMTEsOTcsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsNzgsMTE0LDQsMCwwLDAsNDEsMywxMTQsNzEsCisgICAgMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw1MywwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMzQsMSwwLAorICAgIDAsMjA1LDUsMCwwLDExNSwwLDAsMCwwLDEyMiwyMSw4MywxMTEsMTE3LDExNCwKKyAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsCisgICAgOTcsOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMTYsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDEwNSwwLDAsMCwxMjQsMCwwLDEwNiwwLAorICAgIDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTIxLDE5LDAsMTI0LDAsMCwKKyAgICAxMDYsMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsMywwLDg3LDExMCw1OCwwLAorICAgIDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsOTQsMCwxLDEyNSw0LDAsMSwxMjIsCisgICAgMjYsMCwxMTYsMywwLDEwMCwxLDAsMTAwLDIsMCwxMjQsMSwwLDEzMSwxLAorICAgIDEsMTI0LDQsMCwxMzAsMiwwLDg3LDg5LDEwMCwzLDAsMTAwLDMsMCwxMjUsCisgICAgNCwwLDEyNiw0LDAsODgsMTEwLDEsMCw4OCwxMTYsNCwwLDEyNCwzLDAsCisgICAgMTMxLDEsMCw4Myw0MSw0LDEyMiw1Miw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwKKyAgICAzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsCisgICAgMTExLDEwMiwzMiw3MywxMTAsMTE1LDExMiwxMDEsOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICA0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDQ2LDEyMiwzOSwxMTUsMTExLAorICAgIDExNywxMTQsOTksMTAxLDMyLDExMCwxMTEsMTE2LDMyLDk3LDExOCw5NywxMDUsMTA4LDk3LDk4LAorICAgIDEwOCwxMDEsMzIsMTE2LDEwNCwxMTQsMTExLDExNywxMDMsMTA0LDMyLDEwMywxMDEsMTE2LDk1LDEwMCwKKyAgICA5NywxMTYsOTcsNDAsNDEsMTE0LDY3LDAsMCwwLDc4LDQxLDUsMTE0LDIzOCwwLAorICAgIDAsMCwyMTgsOCwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDExNCw0MCwwLDAsCisgICAgMCwxMTQsMTUzLDAsMCwwLDExNCwyMDMsMCwwLDAsNDEsNSwxMTQsNzEsMCwKKyAgICAwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDIwMSwwLDAsCisgICAgMCwyMTgsMywxMDEsMTIwLDk5LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwxMywxLDAsMCwyMTIsNSwwLDAsMTE1LDE0LAorICAgIDAsMCwwLDAsMiwxNSwxLDMsMSwxOSwxLDE4LDEsOSwxLDMxLAorICAgIDEsMTIyLDIzLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCisgICAgMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwyMTgsOSw5NSwxMTEsMTEyLDExNiwKKyAgICAxMDUsMTA5LDEwNSwxMjIsMTAxLDExNCwyOSwwLDAsMCw5OSwzLDAsMCwwLDEsCisgICAgMCwwLDAsNCwwLDAsMCw5LDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICAzMSwwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTI0LDEsMCwxMjQsMiwwLAorICAgIDEwMCwxLDAsMTAwLDIsMCwxMDAsMywwLDEwMCw0LDAsMTI0LDMsMCwxMzEsCisgICAgNCwyLDgzLDQxLDUsMTIyLDEzMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiw5OSwxMTEsCisgICAgMTA5LDExMiwxMDUsMTA4LDEwMSwxMDAsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExNSwxMTEsMTE3LDExNCwKKyAgICA5OSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwKKyAgICAzMiwzOSwxMDAsOTcsMTE2LDk3LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwKKyAgICAzMiw5OSw5NywxMTAsMzIsOTgsMTAxLDMyLDk3LDExMCwxMjEsMzIsMTExLDk4LDEwNiwxMDEsCisgICAgOTksMTE2LDMyLDExNiwxMjEsMTEyLDEwMSwzMiwxMTYsMTA0LDk3LDExNiwzMiw5OSwxMTEsMTA5LAorICAgIDExMiwxMDUsMTA4LDEwMSw0MCw0MSwzMiwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTE1LDQ2LAorICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCwxNzUsMCwwLDAsMjE4LDEyLAorICAgIDEwMCwxMTEsMTEwLDExNiw5NSwxMDUsMTEwLDEwNCwxMDEsMTE0LDEwNSwxMTYsODQsMTE0LDExOCwwLAorICAgIDAsMCw0MSwyLDExNCwxMTQsMCwwLDAsMjE4LDcsOTksMTExLDEwOSwxMTIsMTA1LAorICAgIDEwOCwxMDEsNDEsNCwxMTQsNzEsMCwwLDAsMTE0LDUzLDAsMCwwLDExNCwzNSwKKyAgICAwLDAsMCwxMTQsMzgsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDE0LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsCisgICAgMTE2LDExMSw5NSw5OSwxMTEsMTAwLDEwMSwyMjIsNSwwLDAsMTE1LDQsMCwwLDAsCisgICAgMCw1LDE4LDEsMTIyLDI3LDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsNDYsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTYsMTExLDk1LDk5LDExMSwxMDAsCisgICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwxMCwwLDAsMCw0NSwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMTc3LDEsMCwwLDEyNCwwLDAsMTA2LDAsCisgICAgMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMDAsMSwwLDEyNSwzLDAsCisgICAgMTIxLDE2LDAsMTE2LDEsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDQsMCw4NywKKyAgICAxMTAsMjQsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDYzLDAsMSwxLDEsCisgICAgMTAwLDEsMCwxMjUsNCwwLDg5LDExMCwyMDIsMCw4OCwxMjEsMTksMCwxMjQsMCwKKyAgICAwLDEwNiwzLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw1LDAsODcsMTEwLDE4LAorICAgIDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCwxMDMsMCwxLDEsMSw4OSwxMTAsCisgICAgMTYyLDAsODgsMTE2LDUsMCwxMjQsNSwwLDEwMCwyLDAsMjUsMTMxLDEsMCwKKyAgICAxMjUsMywwLDEyMSwxOSwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsNCwwLDEzMSwKKyAgICAxLDAsMTI1LDYsMCw4NywxMTAsMTgsMCw0LDExNiw3LDAsMTA3LDEwLDAsCisgICAgMTE0LDE1OSwwLDEsMSwxLDg5LDExMCwxMDYsMCw4OCwxMjEsMzQsMCwxMTYsOCwKKyAgICAwLDEyNCw2LDAsMTAwLDMsMCwxMjQsNSwwLDEwMCw0LDAsMTI0LDEsMCwKKyAgICAxMDAsNSwwLDEyNCw0LDAsMTMxLDEsMywxMjUsNywwLDg3LDExMCwyNCwwLAorICAgIDQsMTE2LDksMCwxMTYsMTAsMCwxMDIsMiwwLDEwNywxMCwwLDExNCwyMjAsMCwKKyAgICAxLDEsMSw4OSwxMTAsNDUsMCw4OCwxMTYsMTEsMCwxMDAsNiwwLDEyNCw0LAorICAgIDAsMTI0LDIsMCwxMzEsMywwLDEsMTE2LDEyLDAsMTI0LDcsMCwxMDAsNCwKKyAgICAwLDEyNCwxLDAsMTAwLDcsMCwxMjQsNCwwLDEwMCw4LDAsMTI0LDIsMCwKKyAgICAxMzEsMSwzLDgzLDEyNCwwLDAsMTA2LDYsMCwxMjQsMiwwLDEzMSwxLDAsCisgICAgMTI1LDgsMCwxMjQsMCwwLDEwNiwxMywwLDEyNCw4LDAsMTI0LDIsMCwxMzEsCisgICAgMiwwLDEyNSw5LDAsMTE2LDExLDAsMTAwLDksMCwxMjQsMiwwLDEzMSwyLAorICAgIDAsMSwxMTYsMTQsMCwxMDYsMTUsMCwxMiwxMTQsMTczLDEsMTI0LDQsMCwxMDAsCisgICAgMSwwLDEwNyw5LDAsMTE0LDE3MywxLDEyNCwzLDAsMTAwLDEsMCwxMDcsOSwKKyAgICAwLDExNCwxNzMsMSwxMTYsMTYsMCwxMjQsOSwwLDEyNCwzLDAsMTE2LDE3LDAsCisgICAgMTI0LDgsMCwxMzEsMSwwLDEzMSwzLDAsMTI1LDYsMCwxMjEsMzYsMCwxMjQsCisgICAgMCwwLDEwNiwxOCwwLDEyNCwyLDAsMTI0LDQsMCwxMjQsNiwwLDEzMSwzLAorICAgIDAsMSwxMTYsMTEsMCwxMDAsMTAsMCwxMjQsNCwwLDEzMSwyLDAsMSw4NywKKyAgICAxMTMsMTczLDEsNCwxMTYsMiwwLDEwNywxMCwwLDExNCwxNjksMSwxLDEsMSwKKyAgICA4OSwxMTMsMTczLDEsODgsMTEwLDAsMCwxMjQsOSwwLDgzLDQxLDExLDEyMiwxOTAsCisgICAgNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLAorICAgIDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsMTEwLDExNSwxMTIsMTAxLAorICAgIDk5LDExNiw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwKKyAgICAxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODIsMTAxLDk3LDEwMCwKKyAgICAxMDUsMTEwLDEwMywzMiwxMTEsMTAyLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLAorICAgIDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiwKKyAgICA5NywxMTYsMTE1LDMyLDExNiwxMTEsMzIsOTgsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAorICAgIDEwMSwxMTAsMTE2LDEwMSwxMDAsNDYsMzIsODQsMTExLDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsCisgICAgNDQsMzIsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywzMiwxMDksMTE3LDExNSwxMTYsMzIsCisgICAgOTcsMTA4LDExNSwxMTEsMzIsOTgsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsCisgICAgMTE2LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsMTE0LAorICAgIDE4MywwLDAsMCwxMTQsMTg3LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMzUsCisgICAgMCwwLDAsMTIyLDEzLDEyMywxMjUsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwzMiwKKyAgICAxMjMsMTI1LDExNCwxNDAsMCwwLDAsMTE0LDE0MSwwLDAsMCwxMjIsMTksOTksMTExLAorICAgIDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsCisgICAgMTI1LDEyMiwxMCwxMTksMTE0LDExMSwxMTYsMTAxLDMyLDEyMywzMywxMTQsMTI1LDQxLDE5LDExNCwKKyAgICAyMzgsMCwwLDAsMTE0LDEzMiwwLDAsMCwxMTQsMTI0LDAsMCwwLDExNCwzMywKKyAgICAxLDAsMCwxMTQsMzEsMSwwLDAsMTE0LDE0LDAsMCwwLDExNCwzNiwxLAorICAgIDAsMCwxMTQsNDAsMCwwLDAsMTE0LDE5MCwwLDAsMCwxMTQsMTUzLDAsMCwKKyAgICAwLDExNCwxODYsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsMTk1LDAsMCwwLAorICAgIDExNCw0MSwxLDAsMCwxMTQsNywwLDAsMCwyMTgsMTksMTAwLDExMSwxMTAsMTE2LAorICAgIDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE0LAorICAgIDE5OCwwLDAsMCwxMTQsMzEsMCwwLDAsMTE0LDM1LDEsMCwwLDQxLDEwLAorICAgIDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwxNDEsMCwwLDAsMTE0LAorICAgIDE4OCwwLDAsMCwxMTQsMTQwLDAsMCwwLDIxOCwyLDExNSwxMTYsMTE0LDUzLDAsCisgICAgMCwwLDIxOCwxMCw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAwLDk3LDExNiw5NywxMTQsMjAxLAorICAgIDAsMCwwLDkwLDExLDk5LDExMSwxMDAsMTAxLDk1LDExMSw5OCwxMDYsMTAxLDk5LDExNiwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMTIsMSwwLDAsMjMwLDUsMCwwLDExNSw3OCwwLDAsMCwwLDcsMTUsCisgICAgMSw2LDEsMywxLDE2LDEsMTMsMSwxMSwyLDMsMSwxOSwxLDEzLAorICAgIDEsNSwyLDE2LDEsMywxLDE5LDEsMTMsMSw1LDIsMywxLDksCisgICAgMSwxMiwxLDEzLDEsMTksMSw1LDIsOSwxLDcsMSwxNSwxLDYsCisgICAgMSw3LDEsMTUsMSwxOCwxLDEzLDEsMjIsMSwxMiwxLDksMSwxNSwKKyAgICAxLDMsMSwxOSwxLDE3LDEsMTMsMSw4LDEsMTIyLDIxLDgzLDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLAorICAgIDEwMCwxMDEsNzgsMTE0LDEzOCwwLDAsMCw0MSwxMCwxMTQsNTcsMCwwLDAsMTE0LAorICAgIDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsMzIsMSwwLDAsMTE0LDMzLAorICAgIDEsMCwwLDExNCwzNSwxLDAsMCwxMTQsMzQsMSwwLDAsMTE0LDEzLDEsCisgICAgMCwwLDExNCw0MSwxLDAsMCwxMTQsMTIsMSwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDMwLDEsMCwwLDE3Miw1LDAsMCwxMTUsMTQsMCwwLDAsMTIsMiwKKyAgICAxMiw4LDEyLDEzLDEyLDEwLDEyLDcsMTIsMTAsMTgsOCwxMTQsMzAsMSwwLAorICAgIDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLAorICAgIDAsMCwwLDAsMCwwLDExNSwxMTIsMCwwLDAsMTAxLDAsMCw5MCwxLAorICAgIDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwKKyAgICAxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsCisgICAgMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LAorICAgIDAsMTAxLDcsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDgsMCwxMDAsOSwwLAorICAgIDEzNCwwLDAsMTMxLDEsMCw5MCw4LDAsMTAxLDcsMCwxMDAsMTAsMCwxMDAsCisgICAgMTEsMCwxMzIsMCwwLDEzMSwxLDAsOTAsOSwwLDEwMCwxMiwwLDEwMCwxMywKKyAgICAwLDEzMiwwLDAsOTAsMTAsMCwxMzUsMCwwLDgzLDQxLDE0LDIxOCwxMCw3MCwKKyAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTIyLDEwMyw2Niw5NywxMTUsMTAxLDMyLAorICAgIDEwMiwxMDUsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsCisgICAgMTE1LDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLAorICAgIDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTIsMTE0LAorICAgIDExMSwxMTYsMTExLDk5LDExMSwxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDExNiwKKyAgICAxMDQsOTcsMTE2LDEwLDMyLDMyLDMyLDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksMzIsMTE3LDExNSw5NywxMDMsCisgICAgMTAxLDQ2LDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDIsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLDAsMTI0LAorICAgIDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMDAsMSwKKyAgICAwLDgzLDQxLDIsMTIyLDc1LDY3LDk3LDk5LDEwNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsOTcsMTEwLDEwMCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwMiwxMDUsMTA4LDEwMSwzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LAorICAgIDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICA0Niw3OCw0MSwyLDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLDAsNDEsMywKKyAgICAxMTQsNzEsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDcyLAorICAgIDAsMCwwLDMxLDYsMCwwLDExNSw0LDAsMCwwLDAsMyw5LDEsCisgICAgMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsCisgICAgMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMzQsMCwwLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDAsMCwxMDcsMiwwLDExMSwzMywKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEwNiwxLDAsMTA3LDIsMCwKKyAgICA4Myw0MSwxLDc4LDQxLDIsMTE0LDIyNCwwLDAsMCwxMTQsNjMsMCwwLDAsCisgICAgNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDIyNywwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjI5LDAsMCwwLAorICAgIDM3LDYsMCwwLDExNSw0LDAsMCwwLDAsMSwxOCwxLDEyMiwxNyw3MCwKKyAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTAxLDExMyw5NSw5NSwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSwyNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsCisgICAgMTA2LDEsMCwxMzEsMSwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwKKyAgICAxLDAsNjUsODMsNDEsMSw3OCw0MSwzLDIxOCw0LDEwNCw5NywxMTUsMTA0LDExNCwKKyAgICA2NywwLDAsMCwxMTQsMzUsMCwwLDAsNDEsMSwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDgsOTUsOTUsMTA0LDk3LDExNSwxMDQsOTUsOTUsNDEsNiwwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCwxLDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDYsOTUsOTUsMTA0LDk3LDExNSwxMDQsOTUsOTUsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMywwLDAsMCwzLDAsMCwwLDExNSwyMiwKKyAgICAwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTI0LDAsMCwxMzEsMiwwLDEwNiwKKyAgICAyLDAsMTI0LDEsMCwxMzEsMSwwLDgzLDQxLDEsMTIyLDEwMCw3NiwxMTEsOTcsCiAgICAgMTAwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwKLSAgICA5NywzMiwxMDIsMTA1LDEwOCwxMDEsNDYsNDAsMywwLDAsMCwxMTcsNSwwLDAsCi0gICAgMCwxMTUsMTE3LDExMiwxMDEsMTE0LDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LAotICAgIDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwxLDAsMCwwLDExNyw5LDAsMCwwLDk1LDk1LDk5LDEwOCw5NywxMTUsCi0gICAgMTE1LDk1LDk1LDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDgsCi0gICAgMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyNDksMywwLDAsMTE1LDIsCi0gICAgMCwwLDAsMCw1LDExNywyMiwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsCi0gICAgMCw2NywwLDAsMCwxMTUsNywwLDAsMCwxMjQsMCwwLDEwNiwwLDAsCi0gICAgODMsNDAsMSwwLDAsMCwxMTcsNTgsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LAotICAgIDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk3LDExNSwKLSAgICAzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0Niw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLAotICAgIDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMCw0LDAsMCwxMTUsCi0gICAgMiwwLDAsMCwwLDMsMTE3LDIzLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LAotICAgIDEwOSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsOCwKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsNDEsMCwwLDAsMTE2LDAsMCwxMDYsCi0gICAgMSwwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDE0MywxNywwLDEyNSwyLAotICAgIDAsMTI0LDIsMCwxMDYsMiwwLDEzMSwwLDAsODMsODcsMTAwLDIsMCw4MSwKLSAgICA4OCwxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDM5LDAsMCwwLDgyLAotICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMDIsCi0gICAgMTE0LDExMSwxMDksMzIsMTEyLDk3LDExNiwxMDQsMzIsOTcsMTE1LDMyLDExNCw5NywxMTksMzIsCi0gICAgOTgsMTIxLDExNiwxMDEsMTE1LDQ2LDExNywxLDAsMCwwLDExNCw3OCw0MCwzLDAsCi0gICAgMCwwLDExNywzLDAsMCwwLDk1LDEwNSwxMTEsMTE3LDYsMCwwLDAsNzAsCi0gICAgMTA1LDEwOCwxMDEsNzMsNzksMTE3LDQsMCwwLDAsMTE0LDEwMSw5NywxMDAsNDAsMywKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw1LDQsMCwwLDExNSw0LDAsMCwwLAotICAgIDAsMiwyMSwxLDExNywxOSwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw0MCw5LDAsMCwKLSAgICAwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwKLSAgICAwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwKLSAgICAwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsCi0gICAgMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsCi0gICAgOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LAotICAgIDk1LDEwMCw5NywxMTYsOTcsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMSwKLSAgICAwLDAsMCwxMTcsOSwwLDAsMCw5NSw5NSw5OSwxMDgsOTcsMTE1LDExNSw5NSwKLSAgICA5NSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwyMzgsMywwLDAsMTE1LDEwLDAsMCwwLDE2LDMsNiwyLDEyLAotICAgIDYsMjQsNywxOCw1LDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAotICAgIDAsNCwwLDAsMCw2NiwwLDAsMCwxMTUsNjgsMCwwLDAsMTI0LDAsCi0gICAgMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwKLSAgICAwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsCi0gICAgMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLAotICAgIDcsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMSw5MCw2LDAsMTAwLDEwLAotICAgIDAsODMsNDAsMTEsMCwwLDAsMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDYyLDAsMCwKLSAgICAwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE3LDExNSwxMDUsMTEwLDEwMywzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksNDYsOTksCi0gICAgMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMzksMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwKLSAgICAxLDAsMTMxLDEsMCwxMjUsMiwwLDEwNSwyLDAsMTI0LDIsMCwxMDYsMiwKLSAgICAwLDEwMCwxLDAsNTQsMTI0LDIsMCwxMDYsMywwLDEwMCwyLDAsNTQsODMsCi0gICAgNDAsMywwLDAsMCwxMTcsMzMsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDQ2LDExNyw1LDAsMCwwLAotICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTE1LDEwNSwxMjIsMTAxLDQwLDQsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNCwwLDAsMCwKLSAgICAxMTUsMTE2LDk3LDExNiwxMTcsOCwwLDAsMCwxMTUsMTE2LDk1LDEwOSwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE3LDcsMCwwLDAsMTE1LDExNiw5NSwxMTUsMTA1LDEyMiwxMDEsNDAsMywwLAotICAgIDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsMTE3LDIsMCwwLDAsMTE1LDExNiw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTUsNCwwLDAsMTE1LDQsMCwwLDAsMCwKLSAgICAyLDE1LDEsMTE3LDI3LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiwKLSAgICA5NywxMTYsMTE1LDk5LDQsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAotICAgIDEzLDAsMCwwLDY3LDAsMCwwLDExNSw4MSwwLDAsMCwxMjEsMjIsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEwNiwyLDAsMTI1LAotICAgIDQsMCw4NywxMTAsMjQsMCw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDQ4LDAsCi0gICAgMSwxLDEsMTAwLDEsMCwxMjUsNCwwLDg5LDExMCwxLDAsODgsMTI0LDQsCi0gICAgMCwxMDAsMiwwLDc5LDEyNSw0LDAsMTI0LDAsMCwxMDYsNCwwLDEyNCwyLAotICAgIDAsMTI0LDMsMCwxMDAsMywwLDEyNCw0LDAsMTMxLDIsMSw4Myw0MCw0LAotICAgIDAsMCwwLDc4LDEwNSwxODIsMSwwLDAsMTA1LDEyOCwwLDAsMCwxMTcsNSwKLSAgICAwLDAsMCw5NSwxMDksMTExLDEwMCwxMDEsNDAsNSwwLDAsMCwxMTcsMywwLAotICAgIDAsMCw5NSwxMTEsMTE1LDExNyw0LDAsMCwwLDExNSwxMTYsOTcsMTE2LDExNyw3LAotICAgIDAsMCwwLDExNSwxMTYsOTUsMTA5LDExMSwxMDAsMTAxLDExNyw3LDAsMCwwLDc5LAotICAgIDgzLDY5LDExNCwxMTQsMTExLDExNCwxMTcsOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDAsCi0gICAgOTcsMTE2LDk3LDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNywxMSwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDExNywxMywwLDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LDk3LDExNyw0LDAsMCwKLSAgICAwLDEwOSwxMTEsMTAwLDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LAotICAgIDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLAotICAgIDYyLDExNywxNSwwLDAsMCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsCi0gICAgMTAxLDk5LDExMSwxMDAsMTAxLDIwLDQsMCwwLDExNSwxMiwwLDAsMCwwLDIsCi0gICAgMywxLDIyLDEsMTMsMSwxMSwzLDEwLDEsMTE3LDMyLDAsMCwwLDgzLAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsOTksOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsCi0gICAgNSwwLDAsMCw5NSwxMDksMTExLDEwMCwxMDEsMTA1LDE4MiwxLDAsMCw5OSwzLAotICAgIDAsMCwwLDEsMCwwLDAsOSwwLDAsMCwxOCwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsNTMsMSwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLAotICAgIDAsOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMDMsMCwwLDEyNSw2LDAsCi0gICAgMTIwLDU0LDAsMTI0LDQsMCwxMTQsODAsMCwxMTYsMSwwLDEyNCw0LDAsMTMxLAotICAgIDEsMCwxMiwxMTQsODAsMCwxMTYsMCwwLDEyNCw0LDAsMTMxLDEsMCw5MiwKLSAgICAyLDAsMTI1LDQsMCwxMjUsNywwLDEyNCw2LDAsMTA2LDIsMCwxMjQsNywKLSAgICAwLDEzMSwxLDAsMSwxMTMsMjcsMCw4NywxMjAsMTMyLDAsMTE2LDMsMCwxMjQsCi0gICAgNiwwLDEzMSwxLDAsNjgsOTMsMTE4LDAsMTI1LDcsMCwxMTYsNCwwLDEyNCwKLSAgICA0LDAsMTI0LDcsMCwxMzEsMiwwLDEyNSw0LDAsMTIxLDE3LDAsMTE2LDUsCi0gICAgMCwxMDYsNiwwLDEyNCw0LDAsMTMxLDEsMCwxLDg3LDExMyw5NCwwLDQsCi0gICAgMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTU1LDAsMSwxLDEsMTE5LDk0LDAsODksCi0gICAgMTEzLDk0LDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwyMTEsMCwxLDEyNSw4LAotICAgIDAsMSwxMjIsMjUsMCwxMTYsOSwwLDEwMCwxLDAsMTI0LDQsMCwxMjQsOCwKLSAgICAwLDEzMSwzLDAsMSwxMDAsMiwwLDgzLDg3LDg5LDEwMCwyLDAsMTAwLDIsCi0gICAgMCwxMjUsOCwwLDEyNiw4LDAsODgsMTEzLDk0LDAsODgsMTEzLDk0LDAsODcsCi0gICAgMTIxLDMzLDAsMTE2LDEwLDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTMxLAotICAgIDMsMCwxLDExNiw5LDAsMTAwLDMsMCwxMjQsMSwwLDEzMSwyLDAsMSwKLSAgICA4NywxMTAsNTMsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDQ4LDEsMSwxMjUsCi0gICAgOCwwLDEsMTIyLDIxLDAsMTE2LDksMCwxMDAsMSwwLDEyNCwxLDAsMTI0LAotICAgIDgsMCwxMzEsMywwLDEsODcsODksMTAwLDIsMCwxMDAsMiwwLDEyNSw4LAotICAgIDAsMTI2LDgsMCw4OCwxMTAsMSwwLDg4LDEwMCwyLDAsODMsNDAsNCwwLAotICAgIDAsMCwxMTcsMjcsMCwwLDAsODcsMTE0LDEwNSwxMTYsMTAxLDMyLDk4LDEyMSwxMTYsCi0gICAgMTAxLDExNSwzMiwxMDAsOTcsMTE2LDk3LDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsCi0gICAgMTAxLDQ2LDExNywyNywwLDAsMCw5OSwxMTEsMTE3LDEwOCwxMDAsMzIsMTEwLDExMSwxMTYsCi0gICAgMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDEyMywzMywxMTQsMTI1LDU4LDMyLDEyMywzMywKLSAgICAxMTQsMTI1LDc4LDExNywxMiwwLDAsMCw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMTAwLDMyLAotICAgIDEyMywzMywxMTQsMTI1LDQwLDExLDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDExNyw2LDAsMCwwLDk3LDExMiwKLSAgICAxMTIsMTAxLDExMCwxMDAsMTE3LDgsMCwwLDAsMTE0LDEwMSwxMTgsMTAxLDExNCwxMTUsMTAxLAotICAgIDEwMCwxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLAotICAgIDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDUsMCwwLDAsMTA5LDEwNywxMDAsCi0gICAgMTA1LDExNCwxMTcsMTUsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNjksMTIwLDEwNSwxMTUsMTE2LAotICAgIDExNSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLDAsNzksODMsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwKLSAgICAxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTMsMCwwLDAsOTUsMTE5LDExNCwxMDUsCi0gICAgMTE2LDEwMSw5NSw5NywxMTYsMTExLDEwOSwxMDUsOTksNDAsOSwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5NywxMTcsNSwwLDAsMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMDEsMTE3LDYsMCwwLDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDEwLDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDExMiw5NywxMTQsMTE2LDExNSwxMTcsNCwwLDAsMCwxMTIsCi0gICAgOTcsMTE0LDExNiwxMTcsMywwLDAsMCwxMDEsMTIwLDk5LDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsCi0gICAgMTAwLDk3LDExNiw5NywzMSw0LDAsMCwxMTUsMzgsMCwwLDAsMCwyLDE4LAotICAgIDEsNiwyLDIyLDEsMTgsMSwxNywyLDE5LDEsMTUsMSwzLDEsMTcsCi0gICAgMSwxMywyLDcsMSwxOCwzLDE2LDEsMjcsMSwzLDEsMTYsMSwxNywKLSAgICAxLDE4LDIsMTE3LDI1LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiwKLSAgICA5Nyw3OCw0MCw3LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwKLSAgICAxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDExNywKLSAgICAxNSwwLDAsMCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LAotICAgIDExMSwxMDAsMTAxLDExNyw4LDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywKLSAgICAxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTEsNCwwLDAsMTE1LDgsMCwwLDAsMTYsMiwKLSAgICA2LDIsMTIsNSwxMiwxMSwxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLAotICAgIDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY2LDAsMCwwLAotICAgIDExNSw2MiwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwKKyAgICA5NywzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LDExNSwzMiwKKyAgICAxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg1LDExNSwxMDEsCisgICAgMzIsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsNDEsMzIsMTA1LAorICAgIDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsNDEsMywyMTgsNSwxMTUsMTE3LDExMiwxMDEsMTE0LDExNCw0NSwxLDAsMCwxMTQsCisgICAgNCwxLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLAorICAgIDQxLDEsMTE0LDIyNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsNCwxLDAsMCw0NCw2LDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDEwLDEyMiwyMiw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSwKKyAgICA5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNywKKyAgICAwLDAsMCwxMjQsMCwwLDEwNiwwLDAsODMsNDEsMSwxMjIsNTgsODIsMTAxLAorICAgIDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLAorICAgIDMyLDk3LDExNSwzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw0MSwxLDExNCwzNSwwLDAsMCw0MSwKKyAgICAyLDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMzgsMCwwLDAsNTYsCisgICAgNiwwLDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwyMyw3MCwxMDUsMTA4LDEwMSwKKyAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCwKKyAgICA5NywxMDksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAorICAgIDgsMCwwLDAsNjcsMCwwLDAsMTE1LDQxLDAsMCwwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMjQsMSwwLDEwMCwxLDAsMTMxLDIsMCwxNDMsMTcsMCwxMjUsCisgICAgMiwwLDEyNCwyLDAsMTA2LDIsMCwxMzEsMCwwLDgzLDg3LDEwMCwyLDAsCisgICAgODEsODgsMTAwLDIsMCw4Myw0MSwzLDEyMiwzOSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMCw5NywxMTYsOTcsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExMiwKKyAgICA5NywxMTYsMTA0LDMyLDk3LDExNSwzMiwxMTQsOTcsMTE5LDMyLDk4LDEyMSwxMTYsMTAxLDExNSwKKyAgICA0NiwyMTgsMSwxMTQsNzgsNDEsMywxMTQsNDksMCwwLDAsMTE0LDUwLDAsMCwKKyAgICAwLDkwLDQsMTE0LDEwMSw5NywxMDAsNDEsMywxMTQsNzEsMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDExNCw1NCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMzYsMSwwLDAsNjEsNiwwLDAsCisgICAgMTE1LDQsMCwwLDAsMCwyLDIxLDEsMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDc2LAorICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQxLDExLAorICAgIDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwKKyAgICA1OSwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDIyOSwwLDAsMCwxMTQsNDcsCisgICAgMSwwLDAsMTE0LDE1NiwwLDAsMCwxMTQsNCwxLDAsMCwxMTQsMjM4LDAsCisgICAgMCwwLDExNCwzNiwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCw0MSwxLDExNCwyMjQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDQ1LDEsCisgICAgMCwwLDI2LDYsMCwwLDExNSwxNCwwLDAsMCwxMiwzLDYsMiwxMiwKKyAgICA2LDEyLDQsMTIsMywyNCwxMiwxOCw1LDExNCw0NSwxLDAsMCw5OSwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDY0LAorICAgIDAsMCwwLDExNSw2NCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwKKyAgICAwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsCisgICAgMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsCisgICAgNSwwLDEwMCw2LDAsMTAwLDcsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsCisgICAgMSw5MCw2LDAsMTAwLDEwLDAsODMsNDEsMTEsMjE4LDE2LDgzLDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTIyLDYyLDY3LDExMSwKKyAgICAxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAorICAgIDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE3LDExNSwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksNDYsOTksMiwwLDAsCisgICAgMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMzYsMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LAorICAgIDIsMCwxMDUsMiwwLDEyNCwyLDAsMTA2LDEsMCwxMDAsMSwwLDU0LDEyNCwKKyAgICAyLDAsMTA2LDIsMCwxMDAsMiwwLDU0LDgzLDQxLDMsMTIyLDMzLDgyLDEwMSwKKyAgICAxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTYsOTcsMTAwLDk3LDExNiwKKyAgICA5NywzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwxMTQsCisgICAgMTgzLDAsMCwwLDExNCwxODQsMCwwLDAsNDEsMywxMTQsMzksMCwwLDAsCisgICAgMjE4LDgsMTE1LDExNiw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDkwLDcsMTE1LDExNiw5NSwxMTUsCisgICAgMTA1LDEyMiwxMDEsNDEsMywxMTQsNzEsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKKyAgICA0MywxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMzMsMSwwLDAsNzEsNiwwLDAsMTE1LDQsMCwwLAorICAgIDAsMCwyLDEyLDEsMTIyLDI3LDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsMTA4LAorICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywKKyAgICAxMTYsMTE1LDk5LDQsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDUsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDM0LDAsMCwwLDExNiwwLDAsMTI0LAorICAgIDEsMCwxMzEsMSwwLDEyNSw0LDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwyLAorICAgIDAsMTI0LDMsMCwxMDAsMSwwLDEyNCw0LDAsMTMxLDIsMSw4Myw0MSwyLAorICAgIDc4LDIxOCw1LDk1LDEwOSwxMTEsMTAwLDEwMSw0MSwyLDExNCwxNDQsMCwwLDAsMTE0LAorICAgIDM0LDEsMCwwLDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNDEsMCwwLDAsCisgICAgMTE0LDE0MCwwLDAsMCwxMTQsNTMsMCwwLDAsMTE0LDQyLDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzNSwKKyAgICAxLDAsMCw3Niw2LDAsMCwxMTUsNCwwLDAsMCwwLDIsMTIsMSwKKyAgICAxMjIsMzIsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsCisgICAgMTAxLDExNCw0Niw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwKKyAgICAxMDAsMTAxLDExNCw1MiwxLDAsMCwxMDUsMTgyLDEsMCwwLDk5LDMsMCwwLAorICAgIDAsMSwwLDAsMCw5LDAsMCwwLDE4LDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw1MywxLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCw5MiwKKyAgICAyLDAsMTI1LDQsMCwxMjUsNSwwLDEwMywwLDAsMTI1LDYsMCwxMjAsNTQsCisgICAgMCwxMjQsNCwwLDExNCw4MCwwLDExNiwxLDAsMTI0LDQsMCwxMzEsMSwwLAorICAgIDEyLDExNCw4MCwwLDExNiwwLDAsMTI0LDQsMCwxMzEsMSwwLDkyLDIsMCwKKyAgICAxMjUsNCwwLDEyNSw3LDAsMTI0LDYsMCwxMDYsMiwwLDEyNCw3LDAsMTMxLAorICAgIDEsMCwxLDExMywyNywwLDg3LDEyMCwxMzIsMCwxMTYsMywwLDEyNCw2LDAsCisgICAgMTMxLDEsMCw2OCw5MywxMTgsMCwxMjUsNywwLDExNiw0LDAsMTI0LDQsMCwKKyAgICAxMjQsNywwLDEzMSwyLDAsMTI1LDQsMCwxMjEsMTcsMCwxMTYsNSwwLDEwNiwKKyAgICA2LDAsMTI0LDQsMCwxMzEsMSwwLDEsODcsMTEzLDk0LDAsNCwxMTYsNywKKyAgICAwLDEwNywxMCwwLDExNCwxNTUsMCwxLDEsMSwxMTksOTQsMCw4OSwxMTMsOTQsCisgICAgMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDIxMSwwLDEsMTI1LDgsMCwxLAorICAgIDEyMiwyNSwwLDExNiw5LDAsMTAwLDEsMCwxMjQsNCwwLDEyNCw4LDAsMTMxLAorICAgIDMsMCwxLDEwMCwyLDAsODMsODcsODksMTAwLDIsMCwxMDAsMiwwLDEyNSwKKyAgICA4LDAsMTI2LDgsMCw4OCwxMTMsOTQsMCw4OCwxMTMsOTQsMCw4NywxMjEsMzMsCisgICAgMCwxMTYsMTAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsMywwLAorICAgIDEsMTE2LDksMCwxMDAsMywwLDEyNCwxLDAsMTMxLDIsMCwxLDg3LDExMCwKKyAgICA1MywwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsNDgsMSwxLDEyNSw4LDAsCisgICAgMSwxMjIsMjEsMCwxMTYsOSwwLDEwMCwxLDAsMTI0LDEsMCwxMjQsOCwwLAorICAgIDEzMSwzLDAsMSw4Nyw4OSwxMDAsMiwwLDEwMCwyLDAsMTI1LDgsMCwxMjYsCisgICAgOCwwLDg4LDExMCwxLDAsODgsMTAwLDIsMCw4Myw0MSw0LDEyMiwyNyw4NywKKyAgICAxMTQsMTA1LDExNiwxMDEsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsCisgICAgMTE2LDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTIyLDI3LDk5LDExMSwxMTcsMTA4LAorICAgIDEwMCwzMiwxMTAsMTExLDExNiwzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsMTIzLDMzLDExNCwKKyAgICAxMjUsNTgsMzIsMTIzLDMzLDExNCwxMjUsNzgsMTIyLDEyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwKKyAgICAxMDAsMzIsMTIzLDMzLDExNCwxMjUsNDEsMTEsMTE0LDM4LDAsMCwwLDExNCw0NiwwLAorICAgIDAsMCwxMTQsMjIzLDAsMCwwLDExNCwzMywwLDAsMCwxMTQsMjgsMCwwLAorICAgIDAsMTE0LDMsMCwwLDAsOTAsNSwxMDksMTA3LDEwMCwxMDUsMTE0LDIxOCwxNSw3MCwKKyAgICAxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LDExNSwxMTYsMTE1LDY5LDExNCwxMTQsMTExLDExNCwxMTQsNDAsCisgICAgMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsNTUsMCwwLDAsNDEsOSwxMTQsCisgICAgNzEsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw1MywwLDAsMCwxMTQsNTIsCisgICAgMSwwLDAsMTE0LDIzMywwLDAsMCwxMTQsMTMxLDAsMCwwLDExNCwyNywwLAorICAgIDAsMCwxMTQsMjMsMCwwLDAsMTE0LDM3LDEsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzNCwxLDAsMCwKKyAgICA4MSw2LDAsMCwxMTUsMzgsMCwwLDAsMCwyLDE4LDEsNiwyLDIyLAorICAgIDEsMTgsMSwxNywyLDE5LDEsMTUsMSwzLDEsMTcsMSwxMywyLDcsCisgICAgMSwxOCwzLDE2LDEsMjcsMSwzLDEsMTYsMSwxNywxLDE4LDIsMTIyLAorICAgIDI1LDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw3OCw0MSw3LDExNCw1NywwLAorICAgIDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsCisgICAgMCwxMTQsMzMsMSwwLDAsMTE0LDM1LDEsMCwwLDExNCwzNCwxLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsNTAsMSwwLDAsNjcsNiwwLDAsMTE1LDgsMCwKKyAgICAwLDAsMTIsMiw2LDIsMTIsNSwxMiw1LDExNCw1MCwxLDAsMCw5OSwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDY0LDAsMCwwLDExNSw0NiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsCiAgICAgMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLAogICAgIDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCi0gICAgOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsCi0gICAgOCwwLDgzLDQwLDksMCwwLDAsMTE3LDIwLDAsMCwwLDgzLDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNyw0NSwwLDAsMCw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE5LDEwNCwxMDUsCi0gICAgOTksMTA0LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTE1LDMyLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMTA4LDEwMSwxMTUsMTE1LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMTUsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsMTksMCwwLDAsMTI0LDAsMCwKLSAgICAxMDYsMCwwLDEyNCwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzMSwxLDEsODMsCi0gICAgNDAsMywwLDAsMCw3OCwxMTcsMTAsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwxMDgsMTAxLDExNSwxMTUsODQsNDAsMiwwLDAsMCwxMTcsMTIsMCwwLDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLAotICAgIDAsODQsMTE0LDExNywxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDY0LDQsMCwwLAotICAgIDExNSwyLDAsMCwwLDAsMSwxMTcsMzIsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDYsMCwwLDAsNiwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsMTM4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMTI1LDIsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwKLSAgICAwLDEyNSwzLDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwxLDAsMTI0LDMsMCwKLSAgICAxMjQsMiwwLDEwMCwwLDAsMTMxLDQsMCwxMjUsNCwwLDExNiw0LDAsMTA2LAotICAgIDUsMCwxMjQsNCwwLDEzMSwxLDAsMTI1LDUsMCwxMTYsNiwwLDEyNCw1LAotICAgIDAsMTE2LDcsMCwxMzEsMiwwLDExNCwxMDEsMCwxMTYsOCwwLDEwMCwxLDAsCi0gICAgMTI0LDIsMCwxMzEsMiwwLDEsMTI0LDUsMCw4MywxMTYsOSwwLDEwMCwyLAotICAgIDAsMTA2LDEwLDAsMTI0LDIsMCwxMzEsMSwwLDEwMCwzLDAsMTI0LDEsMCwKLSAgICAxMDAsNCwwLDEyNCwyLDAsMTMxLDEsMiwxMzAsMSwwLDEwMCwwLDAsODMsCi0gICAgNDAsNSwwLDAsMCw3OCwxMTcsMjEsMCwwLDAsOTksMTExLDEwMCwxMDEsMzIsCi0gICAgMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSwKLSAgICAxMTcsMjEsMCwwLDAsNzgsMTExLDExMCw0NSw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsCi0gICAgMTA2LDEwMSw5OSwxMTYsMzIsMTA1LDExMCwzMiwxMjMsMTI1LDExNyw0LDAsMCwwLDExMCwKLSAgICA5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDExLDAsMCwKLSAgICAwLDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywxMTcsCi0gICAgMjAsMCwwLDAsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSwKLSAgICA5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLAotICAgIDEwMSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDExNyw1LDAsCi0gICAgMCwwLDEwOCwxMTEsOTcsMTAwLDExNSwxMTcsMTAsMCwwLDAsMTA1LDExNSwxMDUsMTEwLAotICAgIDExNSwxMTYsOTcsMTEwLDk5LDEwMSwxMTcsMTAsMCwwLDAsOTUsOTksMTExLDEwMCwxMDEsCi0gICAgOTUsMTE2LDEyMSwxMTIsMTAxLDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsCi0gICAgMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTEsMCwwLDAsNzMsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLDAsMTAyLAotICAgIDExMSwxMTQsMTA5LDk3LDExNiw0MCw2LDAsMCwwLDExNyw0LDAsMCwwLDExNSwKLSAgICAxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LAotICAgIDExNiw5NywxMTcsMTAsMCwwLDAsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMCw5NywxMTYsCi0gICAgOTcsMTE3LDUsMCwwLDAsMTAyLDExMSwxMTcsMTEwLDEwMCw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LAotICAgIDk5LDExMSwxMDAsMTAxLDY3LDQsMCwwLDExNSwxOCwwLDAsMCwwLDEsMTUsCi0gICAgMSwxNSwxLDI0LDEsMTUsMSwxNSwxLDEzLDEsNCwyLDE4LDEsMTE3LAotICAgIDI5LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsCi0gICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MCwKLSAgICAyLDAsMCwwLDExNywzOSwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLAotICAgIDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTUsCi0gICAgMzIsMTEwLDExMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LAotICAgIDc4LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsCi0gICAgMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwKLSAgICAwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsNzksNCwwLDAsMTE1LDIsMCwwLDAsMCwyLAotICAgIDExNywzMSwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLAotICAgIDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDc4LDQwLDcsMCwwLDAsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LAotICAgIDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLAotICAgIDk5LDk1LDk1LDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwKLSAgICAxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw0MCwKLSAgICAxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMjAsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjAsNCwwLDAsMTE1LDgsMCwwLAotICAgIDAsMTYsMiw2LDIsMTIsMywxMiwxMiwxMTcsMjAsMCwwLDAsODMsMTExLAorICAgIDkwLDUsMCwxMDAsNiwwLDgzLDQxLDcsMjE4LDIwLDgzLDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDEyMiwKKyAgICA0NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNCw5NywKKyAgICAxMTAsMTAwLDEwOCwxMDEsMTE1LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LAorICAgIDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMTUsNDYsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNiwwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsNzYsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLAorICAgIDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMiwwLAorICAgIDEzMSwxLDAsMTI1LDMsMCwxMTYsMiwwLDEyNCwzLDAsMTAwLDEsMCwxMjQsCisgICAgMSwwLDEwMCwyLDAsMTI0LDIsMCwxMzEsMSwyLDEyNSw0LDAsMTE2LDMsCisgICAgMCwxMjQsNCwwLDEwMCwxLDAsMTI0LDEsMCwxMDAsMywwLDEyNCwyLDAsCisgICAgMTMxLDEsMiw4Myw0MSw0LDc4LDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLAorICAgIDAsMTE0LDE0MCwwLDAsMCw0MSw0LDExNCwyMzgsMCwwLDAsMTE0LDM2LDEsCisgICAgMCwwLDExNCwxOTAsMCwwLDAsMTE0LDE5NSwwLDAsMCw0MSw1LDExNCw3MSwKKyAgICAwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNTMsMCwKKyAgICAwLDAsMTE0LDQ0LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCwxMiwxLDAsMCwxMTQsNiwwLDAsMTE1LAorICAgIDgsMCwwLDAsMCwxLDE1LDEsMTUsMSwyNCwxLDEyMiwyOSw4MywxMTEsCiAgICAgMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw1LAotICAgIDAsMCwwLDY2LDAsMCwwLDExNSwxMDQsMCwwLDAsMTI0LDAsMCw2OSwKLSAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLAotICAgIDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAxLDUsCi0gICAgMCwxMDEsNiwwLDEwMSw3LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCi0gICAgMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsOTAsOCwwLDEwMCw2LDAsMTAwLAotICAgIDcsMCwxMzIsMCwwLDkwLDksMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsCi0gICAgMCw5MCwxMCwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsMTEsMCwKLSAgICAxMDAsMTIsMCw4Myw0MCwxMywwLDAsMCwxMTcsMTksMCwwLDAsNjksMTIwLAotICAgIDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsMTE3LDkzLDAsMCwwLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwKLSAgICAzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw5OSwxMTEsMTEwLAotICAgIDExNSwxMTYsMTE0LDExNyw5OSwxMTYsMTExLDExNCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTE1LDEwNSwKLSAgICAxMDMsMTEwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMTksMTExLDExNCwxMDcsMzIsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDMyLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsOTksMywwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCi0gICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsMTI0LDEsMCwKLSAgICAxMjQsMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLDAsOTUsMSwwLDEwMCwKLSAgICAwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwyLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LAotICAgIDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk2LDQsMCwwLDExNSw0LDAsCi0gICAgMCwwLDAsMSw5LDEsMTE3LDI4LDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LAotICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsCi0gICAgNCwwLDAsMCwxMCwwLDAsMCw2NywwLDAsMCwxMTUsMTc1LDAsMCwKLSAgICAwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw2LDAsMTI1LDIsMCwKLSAgICAxMjEsMTA3LDAsMTE2LDIsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDEsMCwxMjQsCi0gICAgMCwwLDEwNiw1LDAsMTMxLDMsMCwxMjUsMywwLDExNiw2LDAsMTAwLDEsCi0gICAgMCwxMjQsMCwwLDEwNiw1LDAsMTMxLDIsMCwxLDEyNCwwLDAsMTA2LDcsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDExNywwLDExNiw4LDAsMTI0LDMsMCwKLSAgICAxMDAsMiwwLDEzMSwyLDAsMTIsMTE0LDExNywwLDExNiw5LDAsMTI0LDAsMCwKLSAgICAxMDYsNSwwLDEzMSwxLDAsMTAwLDMsMCwyNSwxMDMsMSwwLDEyNCwzLDAsCi0gICAgOTUsMTAsMCwxMTAsMCwwLDEyNCwzLDAsODMsODcsMTEwLDQ2LDAsMSwxLAotICAgIDEsMTI0LDIsMCwxMiwxMTQsMTYzLDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLAotICAgIDAsMTA3LDYsMCwxMTQsMTYzLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsCi0gICAgNjEsMTEwLDAsMCwxMzAsMCwwLDg5LDExMCwxLDAsODgsMTAwLDQsMCw4MywKLSAgICA0MCw1LDAsMCwwLDExNywyNSwwLDAsMCw3NiwxMTEsOTcsMTAwLDMyLDk3LAorICAgIDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDM5LDgyLDEwMSwxMTYsCisgICAgMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDExNCwKKyAgICAxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksCisgICAgMTExLDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLAorICAgIDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMTMsMSwwLDAsMTIwLDYsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMiwxMjIsMzEsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LAorICAgIDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsCisgICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw3OCw0MSw2LDExNCw1NywwLDAsMCwxMTQsNTYsCisgICAgMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsMTIsMSwKKyAgICAwLDAsMTE0LDEzLDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw1NCwxLDAsMCwKKyAgICAxMTAsNiwwLDAsMTE1LDYsMCwwLDAsMTIsMiw2LDIsMTIsNiwxMTQsCisgICAgNTQsMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMywwLDAsMCw2NCwwLDAsMCwxMTUsMTMwLDAsMCwwLDEwMSwwLAorICAgIDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLAorICAgIDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCwKKyAgICA1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLAorICAgIDAsOTAsNiwwLDEwMSw3LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsCisgICAgMTMxLDEsMCw5MCw4LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCwKKyAgICA5LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCw5MCwxMCwwLDEwMCwxNCwKKyAgICAwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTEsMCwxMDEsNywwLDEwMCwxNiwwLAorICAgIDEwMCwxNywwLDEzMiwwLDAsMTMxLDEsMCw5MCwxMiwwLDEwMCwxOCwwLDgzLAorICAgIDQxLDE5LDIxOCwxOSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsCisgICAgMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMjIsOTMsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLAorICAgIDEwMiwxMTEsMTE0LDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLAorICAgIDk5LDExMSwxMTAsMTE1LDExNiwxMTQsMTE3LDk5LDExNiwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTAwLAorICAgIDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDExOSwxMTEsMTE0LDEwNywzMiwKKyAgICAxMTksMTA1LDExNiwxMDQsMzIsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwKKyAgICAxMCwxMCwzMiwzMiwzMiwzMiw5OSwzLDAsMCwwLDAsMCwwLDAsMywKKyAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwKKyAgICAxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwKKyAgICAxLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDY3LDAsMCwwLAorICAgIDExNCwzNSwwLDAsMCw0MSwzLDExNCw3MSwwLDAsMCwxMTQsNjcsMCwwLAorICAgIDAsMTE0LDM1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCw3MiwwLDAsMCwxMzcsNiwwLDAsMTE1LDQsCisgICAgMCwwLDAsMCwxLDksMSwxMjIsMjgsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCisgICAgMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LAorICAgIDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCisgICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDM0LDAsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwwLDAsMTA3LDIsMCwxMTEsMzMsCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMDYsMSwwLDEwNywyLDAsCisgICAgODMsNDEsMSw3OCw0MSwyLDExNCwyMjQsMCwwLDAsMTE0LDYzLDAsMCwwLAorICAgIDQxLDIsMTE0LDcxLDAsMCwwLDExNCwyMjcsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIyOSwwLDAsMCwKKyAgICAxNDEsNiwwLDAsMTE1LDQsMCwwLDAsMCwxLDE4LDEsMTIyLDI2LDY5LAorICAgIDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDQ2LDk1LDk1LDEwMSwxMTMsOTUsOTUsOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDEsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMjYsCisgICAgMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMTYsCisgICAgMCwwLDEyNCwwLDAsMTA2LDIsMCwxMzEsMSwwLDY1LDgzLDQxLDEsNzgsCisgICAgNDEsMywxMTQsNDYsMSwwLDAsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsCisgICAgMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsNDcsMSwwLDAsMTQ1LDYsMCwwLAorICAgIDExNSwyLDAsMCwwLDAsMSwxMjIsMjgsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCisgICAgMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA0LAorICAgIDk3LDExNSwxMDQsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwKKyAgICAwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LDE4MywwLDAsMCwxMTYsCisgICAgMCwwLDEyNCwxLDAsMTMxLDEsMCwxNDMsMjksMCwxLDExNiwxLDAsMTE2LAorICAgIDIsMCwxMDYsMywwLDEyNCwxLDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwzLAorICAgIDAsMTI1LDIsMCw4NywxMDAsMSwwLDgxLDg4LDExNiw1LDAsMTAwLDIsMCwKKyAgICAxMjQsMCwwLDEwNiw0LDAsMTMxLDIsMCwxLDEyNCwwLDAsMTA2LDYsMCwKKyAgICAxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsMywwLDExNCwxMjQsMCwxMTYsCisgICAgNywwLDEyNCwyLDAsMTAwLDMsMCwxMzEsMiwwLDEyLDExNCwxMjQsMCwxMTYsCisgICAgOCwwLDEyNCwwLDAsMTA2LDQsMCwxMzEsMSwwLDEwMCw0LDAsMjUsMTAzLAorICAgIDEsMCwxMjQsMiwwLDk1LDksMCwxMTAsMCwwLDEyNCwwLDAsMTI0LDIsCisgICAgMCw5NSwxMCwwLDEyNCwyLDAsMTA2LDExLDAsMTI0LDIsMCw5NSwxMiwwLAorICAgIDEyNCwzLDAsMTE1LDE3OSwwLDEyNCwyLDAsMTA2LDEyLDAsMTA2LDEzLDAsMTAwLAorICAgIDUsMCwxMzEsMSwwLDEwMCw0LDAsMjUsMTI0LDIsMCw5NSwxMiwwLDExMCwKKyAgICAwLDAsMTI0LDIsMCw4Myw0MSw2LDEyMiwyNSw3NiwxMTEsOTcsMTAwLDMyLDk3LAogICAgIDExMCwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw0NiwxMTcsMzMsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKLSAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiwKLSAgICAxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsMTE3LDgsMCwwLDAsOTUsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsOTUsMTA1LDAsMCwwLDAsNzgsNDAsMTEsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LAotICAgIDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwKLSAgICAxMTgsMTAxLDEwMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLAotICAgIDAsMTA4LDExMSw5NywxMDAsOTUsMTAwLDEyMSwxMTAsOTcsMTA5LDEwNSw5OSwxMTcsNCwwLAotICAgIDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsCi0gICAgMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLAotICAgIDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNyw3LDAsMCwwLDEwNCwKLSAgICA5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsOTUsNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw5LAotICAgIDAsMCwwLDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCwxMTcsNiwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMDAsNCwwLDAsMTE1LDI0LDAsMCwwLDAsNSwxNSwxLAotICAgIDMsMSw5LDEsMTUsMSwxNiwxLDMxLDEsMjgsMSw4LDEsMywxLAotICAgIDIyLDEsMTMsMSwxMTcsMzEsMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwKLSAgICAwLDIsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLDExNSw0OCwwLAotICAgIDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDEwMCwxLAotICAgIDAsMjUsMTM3LDAsMCwxMTYsMiwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMiwKLSAgICAwLDEwMCwzLDAsMTM0LDAsMCwxMTYsMywwLDY4LDEzMSwxLDAsMTMxLDEsCi0gICAgMCw4Myw0MCw0LDAsMCwwLDExNyw0OSwwLDAsMCw4MiwxMDEsMTE2LDExNywKLSAgICAxMTQsMTEwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTAxLAotICAgIDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCi0gICAgMTA1LDExNSwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsMTA1LDEsMCwKLSAgICAwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwKLSAgICAwLDAsMCw1MSwwLDAsMCwxMTUsMzEsMCwwLDAsMTI0LDAsMCw5MywKLSAgICAyMSwwLDEyNSwxLDAsMTM2LDAsMCwxMDAsMCwwLDEyNCwxLDAsMjMsMTA3LAotICAgIDIsMCw4NiwxLDExMywzLDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw3OCw0MCwwLAotICAgIDAsMCwwLDQwLDIsMCwwLDAsMTE3LDIsMCwwLDAsNDYsNDgsMTE3LAotICAgIDYsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsNDAsMSwwLDAsMCwxMTcsCi0gICAgOSwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsCi0gICAgMTE0LDYyLDEyMSw0LDAsMCwxMTUsMiwwLDAsMCw2LDEsMTE3LDQ5LDAsCi0gICAgMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLAotICAgIDExMiwxMTQsNjIsNDAsNCwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMywwLDAsMCw5NywxMTAsMTIxLDExNywxOCwwLDAsMCw2OSw4OCwKLSAgICA4NCw2OSw3OCw4Myw3Myw3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywKLSAgICA0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCwKLSAgICA0MCwxLDAsMCwwLDExNyw5LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LAotICAgIDEwNyw5NywxMDMsMTAxLDExOCw0LDAsMCwxMTUsNiwwLDAsMCwwLDIsMTksCi0gICAgMSwxOCwxLDExNywzMCwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKLSAgICAwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLAotICAgIDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNjMsMCwwLDAsODIsMTAxLAorICAgIDEwOCwxMDEsNDYsNzgsMTIyLDMzLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsMTAyLDExNCwKKyAgICAxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LDExNCwyNDYsMCwwLDAsMTE0LDg0LDAsMCwKKyAgICAwLDExNCwxMTYsMCwwLDAsNDEsMTQsMTE0LDY5LDAsMCwwLDExNCwxMTQsMCwKKyAgICAwLDAsMTE0LDEwNiwwLDAsMCw5MCwxMiwxMDgsMTExLDk3LDEwMCw5NSwxMDAsMTIxLAorICAgIDExMCw5NywxMDksMTA1LDk5LDExNCwzNSwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCwKKyAgICAyMTksMCwwLDAsMTE0LDYwLDAsMCwwLDExNCwzOCwwLDAsMCwxMTQsMjQ2LAorICAgIDAsMCwwLDExNCwyMDQsMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwyNTAsMCwKKyAgICAwLDAsMTE0LDMyLDAsMCwwLDQxLDQsMTE0LDcxLDAsMCwwLDExNCwxNTgsCisgICAgMCwwLDAsMTE0LDE3OSwwLDAsMCwxMTQsMjE5LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw0LDEsMCwKKyAgICAwLDE0OCw2LDAsMCwxMTUsMjQsMCwwLDAsMCw1LDEzLDEsOSwxLAorICAgIDIxLDEsMTYsMSwxNSwxLDIyLDEsMjgsMSw5LDEsMTIsMSw2LDEsCisgICAgMjgsMSwxMjIsMzEsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LAorICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgNCwwLDAsMCwzLDAsMCwwLDExNSw0OCwwLDAsMCwxMTYsMCwwLAorICAgIDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTM3LDAsMCwKKyAgICAxMTYsMiwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMiwwLDEwMCwzLDAsMTM0LAorICAgIDAsMCwxMTYsMywwLDY4LDEzMSwxLDAsMTMxLDEsMCw4Myw0MSw0LDEyMiwKKyAgICA0OSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywKKyAgICAxMDEsNDYsMTE0LDI5LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDQsMCwwLDAsNTEsMCwwLDAsMTE1LDMxLDAsMCwKKyAgICAwLDEyNCwwLDAsOTMsMjEsMCwxMjUsMSwwLDEzNiwwLDAsMTAwLDAsMCwKKyAgICAxMjQsMSwwLDIzLDEwNywyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsCisgICAgNDEsMiwxMTQsNzIsMCwwLDAsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsCisgICAgMjIsMCwwLDAsMjE4LDYsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsNDEsMSwyMTgsOSwKKyAgICAxMDIsMTA1LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDc3LDAsMCwwLDE2OSw2LDAsMCwxMTUsMiwwLDAsCisgICAgMCw2LDEsMTIyLDQ5LDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LAorICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNywKKyAgICA5NywxMDMsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLAorICAgIDExMCwxMDEsMTIwLDExMiwxMTQsNjIsNDEsNCwxMTQsMzgsMCwwLDAsMTE0LDM1LDAsCisgICAgMCwwLDExNCw3OCwwLDAsMCwyMTgsMTgsNjksODgsODQsNjksNzgsODMsNzMsCisgICAgNzksNzgsOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsNDEsMiwxMTQsNzEsMCwKKyAgICAwLDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsMCw0MSwxLDExNCw1NywKKyAgICAxLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjE5LDAsMCwwLDE2Niw2LDAsCisgICAgMCwxMTUsNiwwLDAsMCwwLDIsMTksMSwxOCwxLDEyMiwzMCw2OSwxMjAsCisgICAgMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAorICAgIDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwyLDAsMCwKKyAgICAwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNjMsODIsMTAxLAogICAgIDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTcsMTEwLDMyLAogICAgIDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAogICAgIDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsOTcsCi0gICAgMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDQ2LDc4LDQwLDEsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLAotICAgIDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsCi0gICAgMTI0LDQsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjgsMCwwLDAsCisgICAgMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDQ2LDc4LDExNCw0LAorICAgIDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEyLAorICAgIDEsMCwwLDE3Miw2LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLDI4LAogICAgIDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LAogICAgIDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLAogICAgIDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICA1MywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLAotICAgIDk3LDExNSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTUsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTEwLDExMSwzMiwxMTUsMTExLDExNywKLSAgICAxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDQwLDEsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCwKLSAgICA5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTI4LDQsCi0gICAgMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMzAsMCwwLDAsNjksMTIwLAotICAgIDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw3OCw0MCwxMiwwLAotICAgIDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsCi0gICAgMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLAotICAgIDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICA3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNywxMSwwLDAsMCw5NSw5OSwxMDQsCi0gICAgMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksCi0gICAgMTExLDEwMCwxMDEsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE5LDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDg4LDQsMCwwLDExNSwxNiwKLSAgICAwLDAsMCwxNiw2LDYsMiwxMiw0LDMsMSwzLDEsMjQsMTYsMTIsCi0gICAgNiwxMiw0LDExNywxOSwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLAotICAgIDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY2LDAsMCwwLAotICAgIDExNSwxMzQsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsCi0gICAgMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCi0gICAgOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsCi0gICAgOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsMTAwLDExLAotICAgIDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwKLSAgICA5MCw5LDAsMTAwLDE0LDAsMTAwLDE1LDAsMTMyLDAsMCw5MCwxMCwwLDEwMCwKLSAgICAxNiwwLDEwMCwxNywwLDEzMiwwLDAsOTAsMTEsMCwxMDAsMTgsMCwxMDAsMTksCi0gICAgMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDIwLDAsODMsNDAsMjEsMCwwLDAsCi0gICAgMTE3LDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsCi0gICAgOTcsMTE2LDEwNCwxMTcsMzgsMSwwLDAsODIsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLAotICAgIDExNiwxMTUsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDM5LDExNSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwzMiwzMiwKLSAgICA3MywxMTYsMzIsMTE3LDExNSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDMyLDEwNSwxMTYsMTE1LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE2LDMyLDEwOCwxMTEsMTExLDEwNywxMTUsMzIsMTE3LAotICAgIDExMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDM5LDExNSwxMCwzMiwKLSAgICAzMiwzMiwzMiw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSw0NiwzMiwzMiw4NywxMDQsCi0gICAgMTAxLDExMCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsOTksMTA0LDk3LDExMCwxMDMsMTAxLDExNSw0NCwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTExLDExOSwKLSAgICAxMTAsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTQsMTAxLDk5LDExMSwxMDksMTEyLAotICAgIDExNywxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDMyLDMyLDcwLDExMSwKLSAgICAxMTQsMzIsMTE2LDExMSwxMTIsNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsCi0gICAgMzIsMzIsMTA1LDExNSwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0Niw5OSw0LAotICAgIDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw1MiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwKLSAgICAwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsMTE2LDIsMCwxMjQsMCwwLAotICAgIDEwNiwzLDAsMTMxLDAsMCwxMzEsMSwwLDEyNCwwLDAsOTUsNCwwLDEyNCwKLSAgICAzLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDAsMCw4Myw0MCwxLDAsMCwKLSAgICAwLDc4LDQwLDYsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE3LDUsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDUsMCwwLDAsCi0gICAgMTE2LDExNywxMTIsMTA4LDEwMSwxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLAotICAgIDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTcsMCwwLDAsOTUsCi0gICAgMTA4LDk3LDExNSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICAxMTcsMTIsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwKLSAgICAxMTQsNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDExLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsCi0gICAgMTE0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDE0MCw0LDAsMCwxMTUsOCwKLSAgICAwLDAsMCwwLDEsOSwxLDksMSwyMSwxLDExNywyMywwLDAsMCwKLSAgICA5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwKLSAgICA0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDUzLDAsMCwKLSAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDEsMCwKLSAgICA5MiwzLDAsMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsMCwxMDAsCi0gICAgMiwwLDEwNywyLDAsMTE0LDQzLDAsMTAwLDYsMCw4MywxMjQsMSwwLDEwMCwKLSAgICA1LDAsMTAyLDIsMCw4Myw0MCw3LDAsMCwwLDExNyw2MiwwLDAsMCwKLSAgICA4MiwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw5NywzMiwxMTYsMTE3LDExMiwxMDgsMTAxLDMyLAotICAgIDExMSwxMDIsMzIsNDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw0NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw0NSwxMTAsOTcsMTA5LDEwMSw0NCwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDExMiwKLSAgICA5NywxMTYsMTA0LDQ1LDk3LDExNiwxMTYsMTE0LDQ1LDExMCw5NywxMDksMTAxLDQxLDExNywxLAotICAgIDAsMCwwLDQ2LDExNywwLDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsCi0gICAgMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDMsMCwwLAotICAgIDAsMTE1LDEyMSwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsNDAsMiwwLAotICAgIDAsMCwxMTcsNSwwLDAsMCw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTAsMCwwLAotICAgIDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsNDAsNCwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDYsMCwwLDAsMTEyLDk3LAotICAgIDExNCwxMDEsMTEwLDExNiwxMTcsMywwLDAsMCwxMDAsMTExLDExNiwxMTcsMiwwLDAsCi0gICAgMCwxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDIzLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSwxNDYsNCwwLDAsMTE1LAotICAgIDgsMCwwLDAsMCwyLDI3LDEsMTIsMiw0LDMsMTE3LDM4LDAsMCwKLSAgICAwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0NiwKLSAgICA5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsOTksMSwwLDAsMCwwLDAsMCwwLAotICAgIDMsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMzgsMCwwLAotICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEzMSwwLDAsOTIsMiwwLDEyNSwxLDAsCi0gICAgMTI1LDIsMCwxMTYsMSwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwwLDI1LAotICAgIDEyNCwyLDAsMTMxLDIsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLDQsMCwKLSAgICAwLDAsMTE3LDIzLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LAotICAgIDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSwxMTcsNywKLSAgICAwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsMywwLDAsMCwxMTUsCi0gICAgMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDAsMywKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDE4LDAsMCwKLSAgICAwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDE0LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDk3LDExNiwxMTYsCi0gICAgMTE0LDk1LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLAotICAgIDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTU2LDQsMCwwLDExNSw0LDAsMCwwLAotICAgIDAsMSwxOCwxLDExNywzMSwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwKLSAgICAxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMDMsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwKLSAgICAwLDEyNSwxLDAsMTI0LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTA3LDMsMCwKLSAgICAxMTQsOTYsMCwxMjQsMCwwLDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNCwKLSAgICAxLDAsMTMxLDIsMCw5MiwyLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwyLAotICAgIDAsMTAwLDAsMCwxMDcsOCwwLDExNCw4NCwwLDEyNCwzLDAsMTI0LDAsMCwKLSAgICA5NSw2LDAsMTEwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMiwwLDExMCwKLSAgICAwLDAsMTI0LDAsMCwxMDYsNiwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsCi0gICAgNywwLDAsMCwxMTcsNSwwLDAsMCwxMTYsMTE3LDExMiwxMDgsMTAxLDExNywxNiwKLSAgICAwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDExNywxNywwLDAsMCw5NSwxMDgsOTcsMTE1LDExNiw5NSwxMTIsOTcsCi0gICAgMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNSwwLDAsMCw5NSwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNSwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw0MCw0LDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExNSwxMDEsMTA4LDEwMiwxMTcsMTEsMCwwLDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDExNyw4LDAsMCwwLDExMCwxMDEsMTE5LDk1LDExMiw5NywxMTYsMTA0LDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDk1LDExNCwKLSAgICAxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwxNjAsNCwwLDAsMTE1LDE0LAotICAgIDAsMCwwLDAsMiwxOCwxLDE1LDEsMjcsMywxMiwxLDEyLDEsMTIsCi0gICAgMSwxMTcsMjcsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKLSAgICA4MCw5NywxMTYsMTA0LDQ2LDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDEyNCwwLAotICAgIDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsODMsNDAsMSwwLDAsMCwKLSAgICA3OCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDEwNSwxMTYsMTAxLDExNCwxMTcsCi0gICAgMTIsMCwwLDAsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAotICAgIDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LDE3Miw0LDAsMCwxMTUsMiwwLDAsMCwKLSAgICAwLDEsMTE3LDIzLDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwKKyAgICAwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTMsODIsMTAxLAorICAgIDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsMTAxLDEyMCwxMTYsCisgICAgMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwNCwKKyAgICA5NywxMTgsMTAxLDMyLDExMCwxMTEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsCisgICAgMTAwLDEwMSw0Niw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwKKyAgICAxMTQsMTU4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCwxMywxLDAsMCwxNzYsNiwwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCwyLDEyMiwzMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLAorICAgIDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLAorICAgIDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDcsMCwwLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDgzLDQxLDEsMTIyLDU4LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5NywxMTUsMzIsMTAyLAorICAgIDExMSwxMTcsMTEwLDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLAorICAgIDEwMSwxMTQsNDYsNDEsMSwxMTQsMzUsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLAorICAgIDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMjM4LDAsMCwwLDE4MCw2LDAsMCwxMTUsMiwKKyAgICAwLDAsMCwwLDMsMTIyLDMyLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsCisgICAgNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMiwKKyAgICAxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw3OCw0MSwxMywxMTQsNTcsMCwwLDAsMTE0LAorICAgIDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDcyLAorICAgIDAsMCwwLDExNCwyMjksMCwwLDAsMTE0LDQ3LDEsMCwwLDExNCwxNTYsMCwKKyAgICAwLDAsMTE0LDQsMSwwLDAsMTE0LDIxOSwwLDAsMCwxMTQsMTIsMSwwLAorICAgIDAsMTE0LDEzLDEsMCwwLDExNCwyMzgsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAorICAgIDU1LDEsMCwwLDEyOSw2LDAsMCwxMTUsMTgsMCwwLDAsMTIsNiw2LAorICAgIDIsMTIsNCwxMiw0LDEyLDMsMTgsMTgsMTIsNiwxMiw0LDEyLDQsMTE0LAorICAgIDU1LDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDEzMCwwLDAsMCwxMDEsMCwKKyAgICAwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwKKyAgICAxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsCisgICAgNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwKKyAgICAwLDkwLDYsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsCisgICAgMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEyLDAsMTAwLAorICAgIDEzLDAsMTMyLDAsMCw5MCw5LDAsMTAwLDE0LDAsMTAwLDE1LDAsMTMyLDAsCisgICAgMCw5MCwxMCwwLDEwMCwxNiwwLDEwMCwxNywwLDEzMiwwLDAsOTAsMTEsMCwKKyAgICAxMDAsMTgsMCwxMDAsMTksMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDIwLDAsODMsCisgICAgNDEsMjEsMjE4LDE0LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsCisgICAgMTE2LDEwNCw5NywzOCwxLDAsMCw4MiwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsMTE2LAorICAgIDExNSwzMiw5NywzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMTIsOTcsCisgICAgOTksMTA3LDk3LDEwMywxMDEsMzksMTE1LDMyLDExMiw5NywxMTYsMTA0LDQ2LDMyLDMyLDczLAorICAgIDExNiwzMiwxMTcsMTE1LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMDIsMTA1LAorICAgIDExMCwxMDAsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw0NCwzMiw5NywxMTAsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTYsCisgICAgMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTYsMzIsMTA4LDExMSwxMTEsMTA3LDExNSwzMiwxMTcsMTEyLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzksMTE1LDEwLDMyLDMyLAorICAgIDMyLDMyLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDQ2LDMyLDMyLDg3LDEwNCwxMDEsCisgICAgMTEwLDMyLDExNiwxMDQsMTA1LDExNSwzMiw5OSwxMDQsOTcsMTEwLDEwMywxMDEsMTE1LDQ0LDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTEsMTE5LDExMCwKKyAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExNCwxMDEsOTksMTExLDEwOSwxMTIsMTE3LAorICAgIDExNiwxMDEsMTAwLDQ0LDEwLDMyLDMyLDMyLDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTEyLAorICAgIDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMzIsMzIsNzAsMTExLDExNCwKKyAgICAzMiwxMTYsMTExLDExMiw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDExNSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMDUsMTE1LDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDk5LDQsMCwKKyAgICAwLDAsMCwwLDAsMCw0LDAsMCwwLDIsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDUyLDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsCisgICAgMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMTYsMiwwLDEyNCwwLDAsMTA2LAorICAgIDMsMCwxMzEsMCwwLDEzMSwxLDAsMTI0LDAsMCw5NSw0LDAsMTI0LDMsCisgICAgMCwxMjQsMCwwLDk1LDUsMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsNiwKKyAgICAxMTQsNzAsMCwwLDAsMTE0LDI1MywwLDAsMCwxMTQsMjMxLDAsMCwwLDIxOCwKKyAgICAxNiw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsCisgICAgMTA0LDIxOCwxNyw5NSwxMDgsOTcsMTE1LDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LAorICAgIDExMiw5NywxMTYsMTA0LDIxOCwxMiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsCisgICAgMTAxLDExNCw0MSw0LDExNCw3MSwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDIxOCwxMSwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgNzIsMCwwLDAsMTkzLDYsMCwwLDExNSw4LDAsMCwwLDAsMSw5LAorICAgIDEsOSwxLDIxLDEsMTIyLDIzLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwKKyAgICAxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwKKyAgICAwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsNTMsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLAorICAgIDAsMTAwLDEsMCwxMzEsMSwwLDkyLDMsMCwxMjUsMSwwLDEyNSwyLDAsCisgICAgMTI1LDMsMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsNDMsMCwxMDAsCisgICAgNiwwLDgzLDEyNCwxLDAsMTAwLDUsMCwxMDIsMiwwLDgzLDQxLDcsMTIyLAorICAgIDYyLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDExNiwxMTcsMTEyLDEwOCwxMDEsCisgICAgMzIsMTExLDEwMiwzMiw0MCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDQ1LDExMCw5NywxMDksMTAxLDQ0LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsNDUsCisgICAgMTEyLDk3LDExNiwxMDQsNDUsOTcsMTE2LDExNiwxMTQsNDUsMTEwLDk3LDEwOSwxMDEsNDEsMTE0LAorICAgIDExNiwwLDAsMCwxMTQsMzAsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDExNCwyNDYsMCwwLDAsNDEsMiwxMjIsMywxMTUsMTIxLDExNSwxMjIsCisgICAgNCwxMTIsOTcsMTE2LDEwNCw0MSwyLDExNCw3MCwwLDAsMCwxMTQsMzIsMCwwLAorICAgIDAsNDEsNCwxMTQsNzEsMCwwLDAsMTE0LDIzMywwLDAsMCwyMTgsMywxMDAsCisgICAgMTExLDExNiwxMTQsOTQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDIzLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsCisgICAgMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSwxOTksCisgICAgNiwwLDAsMTE1LDgsMCwwLDAsMCwyLDI3LDEsMTIsMiw0LDMsCisgICAgMTIyLDM4LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwKKyAgICA0Niw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsCisgICAgMTE2LDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsOTksMSwwLDAsMCwwLDAsMCwKKyAgICAwLDMsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMzgsMCwKKyAgICAwLDAsMTI0LDAsMCwxMDYsMCwwLDEzMSwwLDAsOTIsMiwwLDEyNSwxLAorICAgIDAsMTI1LDIsMCwxMTYsMSwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwwLAorICAgIDI1LDEyNCwyLDAsMTMxLDIsMCw4Myw0MSwxLDc4LDQxLDQsMTE0LDY1LDEsCisgICAgMCwwLDExNCw2MiwwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzMsMCwwLAorICAgIDAsNDEsMywxMTQsNzEsMCwwLDAsOTAsMTgsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwKKyAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSw5MCwxNCwxMTIsOTcsCisgICAgMTE2LDEwNCw5NSw5NywxMTYsMTE2LDExNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNjAsMSwwLDAsCisgICAgMjA5LDYsMCwwLDExNSw0LDAsMCwwLDAsMSwxOCwxLDEyMiwzMSw5NSwKKyAgICA3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsMTAzLAorICAgIDEwMSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwxMjcsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLAorICAgIDAsMTMxLDAsMCwxMzEsMSwwLDEyNSwxLDAsMTI0LDEsMCwxMjQsMCwwLAorICAgIDEwNiwyLDAsMTA3LDMsMCwxMTQsMTIwLDAsMTI0LDAsMCwxMDYsMywwLDEyNCwKKyAgICAwLDAsMTA2LDQsMCwxMjQsMSwwLDEzMSwyLDAsMTI1LDIsMCwxMjQsMiwKKyAgICAwLDEwMCwwLDAsMTA3LDksMCwxMTQsMTA4LDAsMTI0LDIsMCwxMDYsNSwwLAorICAgIDEwMCwwLDAsMTA3LDgsMCwxMTQsMTA4LDAsMTI0LDIsMCwxMDYsNiwwLDExNCwKKyAgICAxMDgsMCwxMjQsMiwwLDEwNiw2LDAsMTI0LDAsMCw5NSw3LDAsMTEzLDEwOCwKKyAgICAwLDExMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDIsMCwxMTAsMCwwLAorICAgIDEyNCwwLDAsMTA2LDcsMCw4Myw0MSwxLDc4LDQxLDgsMTE0LDIzMSwwLDAsCisgICAgMCwxMTQsNjAsMSwwLDAsMTE0LDYxLDEsMCwwLDExNCw2MiwxLDAsMCwKKyAgICAxMTQsNzAsMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsMjIwLDAsMCwwLDExNCwKKyAgICAyNTMsMCwwLDAsNDEsMywxMTQsNzEsMCwwLDAsOTAsMTEsMTEyLDk3LDExNCwKKyAgICAxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTc3LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMiw5NSwxMTQsCisgICAgMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMjEzLDYsMCwwLDExNSwxNiwKKyAgICAwLDAsMCwwLDIsMTgsMSwxNSwxLDIxLDMsMjcsMSw5LDEsMTgsCisgICAgMSwxMiwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLAorICAgIDk3LDExNiwxMDQsNDYsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCw4Myw0MSwxLDc4LDQxLDIsMjE4LAorICAgIDQsMTA1LDExNiwxMDEsMTE0LDExNCw2NiwxLDAsMCw0MSwxLDExNCw3MSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsOCw5NSw5NSwxMDUsMTE2LDEwMSwxMTQsOTUsOTUsMjI2LDYsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMSwxMjIsMjMsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAogICAgIDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDEwNSwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLAogICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY3LAogICAgIDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEzMSwxLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwyLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLDExNywxMiwwLDAsMCwKLSAgICA5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsNDAsMSwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywwLDAsMCw5NSw5NSwxMDgsMTAxLDExMCwKLSAgICA5NSw5NSwxNzUsNCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyMiwwLAotICAgIDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsCi0gICAgNDYsOTUsOTUsMTA4LDEwMSwxMTAsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwKLSAgICAwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwKLSAgICAwLDgzLDQwLDIsMCwwLDAsNzgsMTE3LDIwLDAsMCwwLDk1LDc4LDk3LAotICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0MCwxMjMsMzMsMTE0LDEyNSwKLSAgICA0MSw0MCwyLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywKLSAgICAxMTYsMTE3LDUsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsNDAsMSwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgOTUsOTUsMTc4LDQsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjMsMCwKLSAgICAwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LAotICAgIDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwKLSAgICAwLDAsMCwxMjQsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMzEsMCwwLDEwNywKLSAgICA2LDAsODMsNDAsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNywxMiwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsNDAsCi0gICAgMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwKLSAgICAwLDAsMTA1LDExNiwxMDEsMTA5LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDEyLDAsMCwwLDk1LDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsCi0gICAgMTE1LDk1LDk1LDE4MSw0LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDI3LAotICAgIDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LAotICAgIDEwNCw0Niw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLDExNSw5NSw5NSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwyMCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMSwxMDAsMCwwLDgzLDQwLDEsMCwwLAotICAgIDAsNzgsNDAsMiwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDEwNSwKLSAgICAxMTYsMTAxLDEwOSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICA2LDAsMCwwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTg0LDQsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsMSwxMTcsMjEsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsCi0gICAgMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk3LDExMiwxMTIsMTAxLDExMCwxMDAsNzgsCi0gICAgNDAsMTMsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsCi0gICAgOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMjMsMCwwLDAsCi0gICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwwLDAsCi0gICAgMCw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwOCwxMDEsMTEwLDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLAotICAgIDExNCw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LAotICAgIDExMCwxMTUsOTUsOTUsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCw0MCwKLSAgICAxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywKLSAgICAxMTYsMTA0LDEzMyw0LDAsMCwxMTUsMjAsMCwwLDAsMTYsNSw2LDIsMTIsCi0gICAgNiwxMiwxMCwxMiw0LDEyLDEyLDEyLDMsMTIsMywxMiwzLDEyLDMsMTE3LAotICAgIDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsCi0gICAgMTE2LDEwNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLAotICAgIDAsMCwwLDY2LDAsMCwwLDExNSw2OCwwLDAsMCwxMjQsMCwwLDY5LAotICAgIDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLAotICAgIDIsMCwxMzIsMCwwLDkwLDMsMCwxMDEsNCwwLDEwMCwzLDAsMTAwLDQsCi0gICAgMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw2LDAsMTAwLDUsMCwKLSAgICAxMDAsNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCw3LDAsMTAwLDcsMCw4MywKLSAgICA0MCw4LDAsMCwwLDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSw0LDAsMCwwLDAsMCwKLSAgICAwLDAsNCwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyNSwKLSAgICAwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwKLSAgICAzLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MCwxLDAsMCwKLSAgICAwLDc4LDQwLDIsMCwwLDAsMTE3LDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwKLSAgICAxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwxMTcsNSwwLDAsMCw5NSwKLSAgICAxMTIsOTcsMTE2LDEwNCw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsCi0gICAgMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsMTEsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTg5LDQsMCwKLSAgICAwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjQsMCwwLDAsNzgsOTcsMTA5LAotICAgIDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LAotICAgIDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwKLSAgICAxLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MCwKLSAgICAyLDAsMCwwLDc4LDExNywyNSwwLDAsMCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiwzOSwxMjMsMTI1LDM5LDMyLDQwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksCi0gICAgMTAxLDQxLDYyLDQwLDIsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsCi0gICAgMTA5LDk3LDExNiwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwKLSAgICA0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDYsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTE0LDEwMSwxMTIsMTE0LDE5Miw0LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LAotICAgIDI3LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwKLSAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwzMiwwLDAsMCwxMTYsMCwwLDEwMCwxLDAsMTI0LAotICAgIDAsMCwxMDYsMSwwLDEzMSwyLDAsMSwxMjQsMCwwLDEwNiwxLDAsMTI0LAotICAgIDEsMCw5NSwyLDAsMTI0LDEsMCw4Myw0MCwyLDAsMCwwLDExNywyNCwKLSAgICAwLDAsMCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDExNywzOCwwLDAsMCwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTIsOTcsMTE2LAotICAgIDEwNCwzMiwxMjMsMzMsMTE0LDEyNSw0MCwzLDAsMCwwLDExNywxNiwwLDAsMCwKLSAgICA5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwKLSAgICAxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSw0MCwyLDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExNSwxMDEsMTA4LDEwMiwxMTcsNiwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxOTYsNCwwLDAsCi0gICAgMTE1LDYsMCwwLDAsMCwzLDE2LDEsMTIsMSwxMTcsMjcsMCwwLDAsCisgICAgMCwxMzEsMCwwLDEzMSwxLDAsODMsNDEsMSw3OCw0MSwyLDExNCwzMSwwLAorICAgIDAsMCwxMTQsNjYsMSwwLDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDcsOTUsCisgICAgOTUsMTA4LDEwMSwxMTAsOTUsOTUsMjI5LDYsMCwwLDExNSwyLDAsMCwwLDAsCisgICAgMSwxMjIsMjIsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsCisgICAgMTA0LDQ2LDk1LDk1LDEwOCwxMDEsMTEwLDk1LDk1LDk5LDEsMCwwLDAsMCwwLAorICAgIDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LAorICAgIDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLAorICAgIDEsMCw4Myw0MSwyLDc4LDEyMiwyMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsCisgICAgOTksMTAxLDgwLDk3LDExNiwxMDQsNDAsMTIzLDMzLDExNCwxMjUsNDEsNDEsMiwxMTQsNDcsCisgICAgMCwwLDAsMTE0LDI1MywwLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTAxLAorICAgIDAsMCwwLDIzMiw2LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIzLAorICAgIDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSwKKyAgICA5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLAorICAgIDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLAorICAgIDAsMTI0LDEsMCwxMjQsMCwwLDEwNiwwLDAsMTMxLDAsMCwxMDcsNiwwLAorICAgIDgzLDQxLDEsNzgsNDEsMSwxMTQsNjYsMSwwLDAsNDEsMiwxMTQsNzEsMCwKKyAgICAwLDAsMjE4LDQsMTA1LDExNiwxMDEsMTA5LDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCwxMiw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywKKyAgICAxMDUsMTEwLDExNSw5NSw5NSwyMzUsNiwwLDAsMTE1LDIsMCwwLDAsMCwxLAorICAgIDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsCisgICAgNDYsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwxMTUsOTUsOTUsOTksMiwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMjAsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsCisgICAgMTI0LDEsMCwxMzEsMSwwLDEsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsCisgICAgMTE0LDI1MywwLDAsMCwxMTQsMjIzLDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwKKyAgICAwLDExNCw3MCwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMjIzLDAsMCwwLDIzOCw2LDAsMCwxMTUsMiwKKyAgICAwLDAsMCwwLDEsMTIyLDIxLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwKKyAgICAxMDEsODAsOTcsMTE2LDEwNCw0Niw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDc4LDQxLDEzLDExNCwKKyAgICA1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwKKyAgICAwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDY1LDEsMCwwLDExNCw2MCwxLAorICAgIDAsMCwxMTQsNjYsMSwwLDAsMTE0LDY4LDEsMCwwLDExNCw2OSwxLDAsCisgICAgMCwxMTQsMTAxLDAsMCwwLDExNCw3MSwxLDAsMCwxMTQsMjIzLDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCw1OSwxLDAsMCwxODYsNiwwLDAsMTE1LDIwLDAsCisgICAgMCwwLDEyLDUsNiwyLDEyLDYsMTIsMTAsMTIsNCwxMiwxMywxMiwzLAorICAgIDEyLDMsMTIsMywxMiwzLDExNCw1OSwxLDAsMCw5OSwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDY0LDAsMCwwLAorICAgIDExNSwxMDYsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLAorICAgIDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywwLDEwMSw0LDAsCisgICAgMTAwLDMsMCwxMDAsNCwwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAwLAorICAgIDUsMCwxMDAsNiwwLDEzMiwwLDAsOTAsNiwwLDEwMCw3LDAsMTAwLDgsCisgICAgMCwxMzIsMCwwLDkwLDcsMCwxMDAsOSwwLDEwMCwxMCwwLDEzMiwwLDAsCisgICAgOTAsOCwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwwLDAsOTAsOSwwLDEwMCwKKyAgICAxMywwLDEwMCwxNCwwLDEzMiwwLDAsOTAsMTAsMCwxMDAsMTUsMCw4Myw0MSwKKyAgICAxNiwxMTQsMjUxLDAsMCwwLDk5LDQsMCwwLDAsMCwwLDAsMCw0LAorICAgIDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwwLAorICAgIDExNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTMxLDMsMCwxMjQsCisgICAgMCwwLDk1LDEsMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMiwxMTQsNTksCisgICAgMSwwLDAsMTE0LDI1MywwLDAsMCw0MSw0LDExNCw3MSwwLDAsMCwxMTQsCisgICAgNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw2MywxLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzIsMCwKKyAgICAwLDAsMjQ0LDYsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjUsOTUsCiAgICAgNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCi0gICAgMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDAsOCwwLDAsCi0gICAgMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsCi0gICAgMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsCi0gICAgMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMTEsMCwwLDAsCi0gICAgOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDExLDAsMCwwLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxMTcsMTcsMCwwLDAsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSwKLSAgICA5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsCi0gICAgMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsCi0gICAgNjIsMTE3LDE1LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDE4OCw0LDAsMCwxMTUsNiwwLDAsMCwxNiwxLAotICAgIDEyLDMsMTgsNCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDEsMCwwLDAsNCwwLDAsMCw2NiwwLDAsMCwxMTUsMTE5LDAsCi0gICAgMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwKLSAgICAyLDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNCwwLDEwMCw0LDAsCi0gICAgMTAwLDUsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNiwwLDEwMSw0LDAsMTAwLAotICAgIDYsMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsMCw5MCw3LDAsMTAxLDQsCi0gICAgMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwKLSAgICAxMDEsNCwwLDEwMCwxMiwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwxLDAsMTMxLAotICAgIDEsMCw5MCwxMCwwLDEwMCwxMiwwLDgzLDQwLDEzLDAsMCwwLDExNywxMCwKLSAgICAwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDYyLDAsCi0gICAgMCwwLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAyLDEwNSwxMTAsMTAwLAotICAgIDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsCi0gICAgOTcsMTEwLDEwMCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsOTUsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsOTUsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSw0NiwKLSAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw0LDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSw1OCwwLDAsMCwxMjAsNTEsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTA2LDIsMCwxMzEsMCwwLDY4LDkzLDM0LDAsMTI1LDEsMCwKLSAgICAxMTYsMywwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDExNCwxNiwwLDEyNCwKLSAgICAxLDAsMTA2LDQsMCwxMzEsMCwwLDEsMTEzLDE2LDAsMTEzLDE2LDAsODcsCi0gICAgMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNywxMjUsMCwwLDAsNjcsOTcsCi0gICAgMTA4LDEwOCwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsCi0gICAgMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDQwLDQxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsCi0gICAgMTAwLDMyLDExMSwxMTAsMzIsOTcsMTA4LDEwOCwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLAotICAgIDExNiwxMTQsMTIxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNSwxMCwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwxMTUsMTE2LDExMSwxMTQsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNSwxMjEsCi0gICAgMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTUsMzIsNDAsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQxLDQ2LDExNywxNywwLDAsMCwKLSAgICAxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgMTE1LDc4LDQwLDUsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LAotICAgIDE5LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwKLSAgICAxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsNiwwLDAsMCwxMTgsOTcsMTA4LDExNywKLSAgICAxMDEsMTE1LDExNyw3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDE3LAotICAgIDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsCi0gICAgOTksMTA0LDEwMSwxMTUsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsCi0gICAgMTE1LDExNyw2LDAsMCwwLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LAotICAgIDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsMjEwLDQsCi0gICAgMCwwLDExNSw2LDAsMCwwLDAsNCwyMiwxLDE1LDEsMTE3LDI4LDAsCi0gICAgMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDUsMTEwLDExOCwKLSAgICA5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDk5LDIsCi0gICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDEyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw5NCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTE1LDI4LAotICAgIDAsMTE2LDIsMCwxMDYsMywwLDEwMCwxLDAsMTE2LDQsMCwxMzEsMiwwLAotICAgIDEsMTEwLDAsMCwxMjAsNTksMCwxMTYsMCwwLDEwNiwxLDAsNjgsOTMsNDQsCi0gICAgMCwxMjUsMiwwLDEyMSwxNCwwLDEyNCwyLDAsMTI0LDEsMCwxMzEsMSwwLAotICAgIDgzLDg3LDExMywzOCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsODEsMCwxLAotICAgIDEsMSwxMTksMzgsMCw4OSwxMTMsMzgsMCw4OCwxMTMsMzgsMCw4NywxMDAsMiwKLSAgICAwLDgzLDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMTEzLDAsMCwwLAotICAgIDgzLDEwMSw5NywxMTQsOTksMTA0LDMyLDExNSwxMDEsMTEzLDExNywxMDEsMTEwLDk5LDEwMSwzMiwKLSAgICAxMTEsMTAyLDMyLDEwNCwxMTEsMTExLDEwNywxMTUsMzIsMTAyLDExMSwxMTQsMzIsOTcsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMzksMTEyLDk3LDExNiwxMDQsMzksCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDM5LDEwNCwKLSAgICAxMTEsMTExLDEwNywxMTUsMzksMzIsMTA1LDExNSwzMiwxMDIsOTcsMTA4LDExNSwxMDEsMzIsMTE2LAotICAgIDEwNCwxMDEsMTEwLDMyLDExNywxMTUsMTAxLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDEwNCwxMTEsMTExLDEwNywxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMTE3LDIzLDAsMCwwLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwKLSAgICAxMTEsMTExLDEwNywxMTUsMzIsMTA1LDExNSwzMiwxMDEsMTA5LDExMiwxMTYsMTIxLDc4LDQwLDcsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDEwLDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMTE3LDksMCwwLDAsOTUsCi0gICAgMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDExNyw0LDAsMCwwLDExOSw5NywxMTQsCi0gICAgMTEwLDExNywxMywwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDg3LDk3LDExNCwxMTAsCi0gICAgMTA1LDExMCwxMDMsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LAotICAgIDExNCwxMTEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLDMsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDQsMTExLDExMSwxMDcsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwyMTgsNCwwLDAsMTE1LDE2LDAsMCwwLAotICAgIDAsNyw5LDEsMTksMSwxNiwxLDMsMSwxNCwxLDEzLDEsMTIsMiwKLSAgICAxMTcsMjIsMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsOTksMiwwLDAsMCwKLSAgICAwLDAsMCwwLDMsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDkxLDAsMCwwLDEyNCwxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyMSwKLSAgICAwLDEwMCwyLDAsMTI1LDEsMCwxMTAsMCwwLDEyMSwxNywwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMjQsMSwwLDI1LDEyNSwyLDAsODcsMTEwLDQ2LDAsNCwxMTYsCi0gICAgMiwwLDEwNywxMCwwLDExNCw4NiwwLDEsMSwxLDEyNCwwLDAsMTA2LDMsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjQsMiwwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMjQsMSwwLDYwLDg5LDExMCwxLDAsODgsMTI0LDIsMCw4MywKLSAgICA0MCwzLDAsMCwwLDExNywyMTAsMCwwLDAsNzEsMTAxLDExNiwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTIxLDMyLDEwMiwxMTQsMTExLDEwOSwKLSAgICAzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwKLSAgICAxMTAsMTE2LDExNCwxMjEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMDUsMTEwLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsNDQsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDk3LDExMiwxMTIsMTE0LDExMSwxMTIsMTE0LDEwNSw5NywxMTYsMTAxLDMyLDEwMiwKLSAgICAxMDUsMTEwLDEwMCwxMDEsMTE0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk3LDExMCwKLSAgICAxMDAsMzIsOTksOTcsOTksMTA0LDEwMSwzMiwxMDUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTAsCi0gICAgMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMTE4LDk3LDEwNSwKLSAgICAxMDgsOTcsOTgsMTA4LDEwMSw0NCwzMiwxMTUsMTE2LDExMSwxMTQsMTAxLDMyLDc4LDExMSwxMTAsCi0gICAgMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNywwLDAsMCwKLSAgICAwLDExNywxLDAsMCwwLDQ2LDQwLDQsMCwwLDAsMTE3LDMsMCwwLAotICAgIDAsMTE1LDEyMSwxMTUsMTE3LDE5LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsOCwwLDAsCi0gICAgMCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSw0MCwzLDAsMCwwLDExNywzLAotICAgIDAsMCwwLDk5LDEwOCwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDYsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDIzNSwKLSAgICA0LDAsMCwxMTUsMTYsMCwwLDAsMCw4LDEyLDEsOSwxLDMsMSwKLSAgICAxNywxLDEzLDEsMTUsMSwxOCwxLDExNywzMSwwLDAsMCw4MCw5NywxMTYsCi0gICAgMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk5LDMsMCwwLAotICAgIDAsMCwwLDAsMCw4LDAsMCwwLDUsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDE4OSwwLDAsMCwxMDMsMCwwLDEyNSwzLDAsMTIwLDE3NiwwLDEyNCwKLSAgICAyLDAsNjgsOTMsMTU4LDAsMTI1LDQsMCwxMTYsMCwwLDEyNCw0LDAsMTE2LAotICAgIDEsMCwxMTYsMiwwLDEwMiwyLDAsMTMxLDIsMCwxMTUsNDYsMCwxMTMsMTMsCi0gICAgMCwxMTAsMCwwLDEyNCwwLDAsMTA2LDMsMCwxMjQsNCwwLDEzMSwxLDAsCi0gICAgMTI1LDUsMCwxMjQsNSwwLDEwMCwyLDAsMTA3LDksMCwxMTQsMTMsMCwxMTYsCi0gICAgNSwwLDEyNCw1LDAsMTAwLDEsMCwxMzEsMiwwLDExNCwxMTIsMCwxMjQsNSwKLSAgICAwLDEwNiw2LDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsNiwwLAotICAgIDEyNSw3LDAsMTEwLDIxLDAsMTI0LDUsMCwxMDYsNywwLDEyNCwxLDAsMTMxLAotICAgIDEsMCwxMjUsNiwwLDEwMywwLDAsMTI1LDcsMCwxMjQsNiwwLDEwMCwyLAotICAgIDAsMTA3LDksMCwxMTQsMTU1LDAsMTI0LDYsMCwxMjQsMywwLDEwMiwyLDAsCi0gICAgODMsMTI0LDMsMCwxMDYsOCwwLDEyNCw3LDAsMTMxLDEsMCwxLDExMywxMywKLSAgICAwLDExMywxMywwLDg3LDEwMCwyLDAsMTI0LDMsMCwxMDIsMiwwLDgzLDEwMCwKLSAgICAyLDAsODMsNDAsMywwLDAsMCwxMTcsNjMsMCwwLDAsNzAsMTA1LDExMCwKKyAgICA5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwKKyAgICAwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwKKyAgICAwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwKKyAgICAwLDgzLDQxLDIsMTIyLDExNSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNCwxMDEsMTEyLAorICAgIDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwKKyAgICAxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywKKyAgICAxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDMyLDEwOSw5Nyw5OSwxMDQsMTA1LDExMCwxMDEsMTE0LDEyMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA2LDExMSw5OCwzMiwxMDUsMTE2LDExNSwxMDEsMTA4LDEwMiw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMjIsMjUsNjAsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5NywKKyAgICA5OSwxMDEsNDEsNjIsNDEsMiwxMTQsNDcsMCwwLDAsMTE0LDU3LDAsMCwwLAorICAgIDQxLDIsMTE0LDgsMSwwLDAsMTE0LDE3OSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjA1LDAsMCwwLAorICAgIDI0Nyw2LDAsMCwxMTUsMiwwLDAsMCwwLDcsMTIyLDI4LDk1LDc4LDk3LAorICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LAorICAgIDAsMCwwLDEwMCwxLDAsODMsNDEsMiw3OCw4NCwxMTQsNCwwLDAsMCwKKyAgICA0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMTksMCwwLDAsCisgICAgMCw3LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDI3LDk1LDc4LDk3LAorICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsCisgICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwKKyAgICAwLDAsMTAwLDEsMCw4Myw0MSwyLDc4LDExNCwzMCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMywKKyAgICAxLDAsMCwzLDcsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjcsCisgICAgOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCw2LDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwyMiwwLDAsMCwxMTYsMCwwLDEwMCwxLDAsMTAwLDIsMCwxMDAsMywKKyAgICAwLDEwMCw0LDAsMTAwLDUsMCwxMzEsMywxLDgzLDQxLDYsNzgsMTE0LDMwLAorICAgIDAsMCwwLDEyMiw4LDYwLDExNSwxMTYsMTE0LDEwNSwxMTAsMTAzLDYyLDExNCwxNzUsMCwKKyAgICAwLDAsMTE0LDM5LDEsMCwwLDg0LDQxLDEsMTE0LDQwLDEsMCwwLDQxLAorICAgIDIsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEyLDEsMCwwLDYsCisgICAgNywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNSw5NSw3OCw5NywxMDksCisgICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiwKKyAgICA5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLAorICAgIDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwKKyAgICAwLDAsODMsNDEsMSw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCw3MSwwLAorICAgIDAsMCwxMTQsMTc5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCwxLDEsMCwwLDksNywwLDAsMTE1LAorICAgIDIsMCwwLDAsMCwxLDEyMiwyOCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsCisgICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsCisgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwyOSwwLDAsMCwxMTYsMCwKKyAgICAwLDEwMCwxLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwyLDAsMSwxMTYsMiwKKyAgICAwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDQxLDIsMTIyLDk4LDc2LAorICAgIDExMSw5NywxMDAsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LDExNSwzMiwKKyAgICAxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg1LDExNSwxMDEsCisgICAgMzIsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsNDEsMzIsMTA1LAorICAgIDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMTIyLDM4LDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLAorICAgIDExMiw5NywxMTYsMTA0LDMyLDEyMywzMywxMTQsMTI1LDQxLDMsMTE0LDE1MiwwLDAsMCwKKyAgICAxMTQsMjUzLDAsMCwwLDExNCwxODAsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLAorICAgIDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsNCwxLDAsMCwxMiw3LDAsMCwxMTUsNCwKKyAgICAwLDAsMCwwLDcsMTYsMSwxMjIsMjgsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLAorICAgIDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDEsMTEsMTE0LDU3LDAsMCwwLDExNCw1NiwwLAorICAgIDAsMCwxMTQsNTgsMCwwLDAsMTE0LDcyLDAsMCwwLDExNCwxNSwxLDAsCisgICAgMCwxMTQsMjA1LDAsMCwwLDExNCwyMTksMCwwLDAsMTE0LDEzLDEsMCwwLAorICAgIDExNCwxMiwxLDAsMCwxMTQsMSwxLDAsMCwxMTQsNCwxLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMjUxLDAsMCwwLDI0Myw2LDAsMCwxMTUsMTQsMCwwLAorICAgIDAsMTIsMSwxMiwzLDE4LDksMTIsMywxMiwzLDEyLDMsMTIsMywxMTQsCisgICAgMjUxLDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDUsMCwwLDAsNjQsMCwwLDAsMTE1LDE2MCwwLDAsMCwxMDEsMCwKKyAgICAwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwKKyAgICAxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDEzMSwxLDAsOTAsCisgICAgNSwwLDEwMSw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsMTMxLDEsCisgICAgMCw5MCw2LDAsMTAxLDQsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCwKKyAgICAxMzEsMSwwLDkwLDcsMCwxMDEsNCwwLDEwMCw4LDAsMTAwLDksMCwxMzIsCisgICAgMCwwLDEzMSwxLDAsOTAsOCwwLDEwMSw0LDAsMTAwLDEwLDAsMTAwLDExLAorICAgIDAsMTAwLDEyLDAsMTMyLDEsMCwxMzEsMSwwLDkwLDksMCwxMDEsNCwwLAorICAgIDEwMCwxMCwwLDEwMCwxMCwwLDEwMCwxMywwLDEwMCwxNCwwLDEzMiwyLDAsMTMxLAorICAgIDEsMCw5MCwxMCwwLDEwMSw0LDAsMTAwLDEwLDAsMTAwLDE1LDAsMTAwLDE2LAorICAgIDAsMTMyLDEsMCwxMzEsMSwwLDkwLDExLDAsMTAwLDEwLDAsODMsNDEsMTcsCisgICAgMjE4LDEwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMjIsNjIsNzcsMTAxLAorICAgIDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsCisgICAgMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwzMiw5NywxMTAsMTAwLDMyLAorICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwKKyAgICAzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDQ2LDk5LDEsMCwwLAorICAgIDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDU4LDAsMCwwLDEyMCw1MSwwLDExNiwwLDAsMTA2LDEsMCwxMDYsCisgICAgMiwwLDEzMSwwLDAsNjgsOTMsMzQsMCwxMjUsMSwwLDExNiwzLDAsMTI0LAorICAgIDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDE2LDAsMTI0LDEsMCwxMDYsNCwKKyAgICAwLDEzMSwwLDAsMSwxMTMsMTYsMCwxMTMsMTYsMCw4NywxMDAsMiwwLDgzLAorICAgIDQxLDMsMTIyLDEyNSw2Nyw5NywxMDgsMTA4LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMTAsMTE4LAorICAgIDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNDAsNDEsCisgICAgMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTExLDExMCwzMiw5NywxMDgsMTA4LDMyLDExMiwKKyAgICA5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgMTE1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTYsMTExLDExNCwxMDEsMTAwLAorICAgIDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSwzMiw0MCwxMTksMTA0LAorICAgIDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNDEsCisgICAgNDYsMjE4LDE3LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsCisgICAgOTksMTA0LDEwMSwxMTUsNzgsNDEsNSwxMTQsNywwLDAsMCwyMTgsMTksMTEyLDk3LAorICAgIDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsCisgICAgMTAxLDIxOCw2LDExOCw5NywxMDgsMTE3LDEwMSwxMTUsMTE0LDYwLDAsMCwwLDExNCw3MywKKyAgICAxLDAsMCw0MSwyLDExNCw4LDEsMCwwLDIxOCw2LDEwMiwxMDUsMTEwLDEwMCwKKyAgICAxMDEsMTE0LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCw3MywxLDAsMCwyOSw3LDAsMCwxMTUsNiwwLDAsMCwwLAorICAgIDQsMjIsMSwxNSwxLDEyMiwyOCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDExNSw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwKKyAgICAxMiwwLDAsMCw2NywwLDAsMCwxMTUsOTQsMCwwLDAsMTE2LDAsMCwKKyAgICAxMDYsMSwwLDExNSwyOCwwLDExNiwyLDAsMTA2LDMsMCwxMDAsMSwwLDExNiwKKyAgICA0LDAsMTMxLDIsMCwxLDExMCwwLDAsMTIwLDU5LDAsMTE2LDAsMCwxMDYsCisgICAgMSwwLDY4LDkzLDQ0LDAsMTI1LDIsMCwxMjEsMTQsMCwxMjQsMiwwLDEyNCwKKyAgICAxLDAsMTMxLDEsMCw4Myw4NywxMTMsMzgsMCw0LDExNiw1LDAsMTA3LDEwLAorICAgIDAsMTE0LDgxLDAsMSwxLDEsMTE5LDM4LDAsODksMTEzLDM4LDAsODgsMTEzLAorICAgIDM4LDAsODcsMTAwLDIsMCw4MywxMDAsMiwwLDgzLDQxLDMsMTIyLDExMyw4MywKKyAgICAxMDEsOTcsMTE0LDk5LDEwNCwzMiwxMTUsMTAxLDExMywxMTcsMTAxLDExMCw5OSwxMDEsMzIsMTExLAorICAgIDEwMiwzMiwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDk3LDMyLDEwMiwxMDUsCisgICAgMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwzOSwxMDQsMTExLAorICAgIDExMSwxMDcsMTE1LDM5LDMyLDEwNSwxMTUsMzIsMTAyLDk3LDEwOCwxMTUsMTAxLDMyLDExNiwxMDQsCisgICAgMTAxLDExMCwzMiwxMTcsMTE1LDEwMSwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMDQsMTExLDExMSwxMDcsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDEyMiwyMywxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LAorICAgIDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSw3OCw0MSw2LDExNCw3LDAsMCwKKyAgICAwLDIxOCwxMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDExNCwxNjYsMCwKKyAgICAwLDAsMTE0LDE2NywwLDAsMCwxMTQsMTY4LDAsMCwwLDExNCwxNTMsMCwwLAorICAgIDAsNDEsMywxMTQsOCwxLDAsMCwxMTQsMzUsMCwwLDAsOTAsNCwxMDQsCisgICAgMTExLDExMSwxMDcsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzcsCisgICAgNywwLDAsMTE1LDE2LDAsMCwwLDAsNyw5LDEsMTksMSwxNiwxLAorICAgIDMsMSwxNCwxLDEzLDEsMTIsMiwxMjIsMjIsODAsOTcsMTE2LDEwNCw3MCwxMDUsCisgICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsCisgICAgOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTEsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDk3LDAsMCwwLDEyNCwxLDAsMTAwLDEsMCwKKyAgICAxMDcsMiwwLDExNCwyNywwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEyNSwKKyAgICAxLDAsMTEwLDAsMCwxMjEsMTcsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDEsCisgICAgMCwyNSwxMjUsMiwwLDg3LDExMCw0NiwwLDQsMTE2LDQsMCwxMDcsMTAsMCwKKyAgICAxMTQsOTIsMCwxLDEsMSwxMjQsMCwwLDEwNiw1LDAsMTI0LDEsMCwxMzEsCisgICAgMSwwLDEyNSwyLDAsMTI0LDIsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDEsCisgICAgMCw2MCw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsODMsNDEsMiwxMjIsMjEwLDcxLAorICAgIDEwMSwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwKKyAgICAxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwxMTYsMTE0LDEyMSwKKyAgICAzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsCisgICAgOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTIxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsCisgICAgMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw5OSw5Nyw5OSwxMDQsMTAxLDQ0LDMyLDEwMiwKKyAgICAxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiw5NywxMTIsMTEyLDExNCwxMTEsMTEyLDExNCwxMDUsCisgICAgOTcsMTE2LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiw5NywxMTAsMTAwLDMyLDk5LDk3LDk5LDEwNCwxMDEsMzIsMTA1LDExNiw0NiwKKyAgICAzMiw3MywxMDIsMzIsMTEwLDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LAorICAgIDMyLDk3LDExOCw5NywxMDUsMTA4LDk3LDk4LDEwOCwxMDEsNDQsMzIsMTE1LDExNiwxMTEsMTE0LAorICAgIDEwMSwzMiw3OCwxMTEsMTEwLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwxMTQsMzAsMCwwLDAsNDEsNiwxMTQsMywwLDAsMCwxMTQsNDUsMCwKKyAgICAwLDAsMTE0LDcsMCwwLDAsMTE0LDc0LDEsMCwwLDExNCw3OSwwLDAsCisgICAgMCwxMTQsNzgsMSwwLDAsNDEsMywxMTQsOCwxLDAsMCwxMTQsMzUsMCwKKyAgICAwLDAsMTE0LDc2LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDIxOCwyMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LAorICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsNTQsNywwLDAsCisgICAgMTE1LDE2LDAsMCwwLDAsOCwxMiwxLDE1LDEsMywxLDE3LDEsMTMsCisgICAgMSwxNSwxLDE4LDEsMTIyLDMxLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLAorICAgIDExNCw0Niw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAorICAgIDk1LDk5LDk3LDk5LDEwNCwxMDEsOTksMywwLDAsMCwwLDAsMCwwLDYsCisgICAgMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTEzLDAsMCwwLAorICAgIDExNiwwLDAsMTI0LDIsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDM5LDAsMTI0LAorICAgIDIsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDMsCisgICAgMCwxMjUsNCwwLDExMCwyMSwwLDEyNCwyLDAsMTA2LDIsMCwxMjQsMSwwLAorICAgIDEzMSwxLDAsMTI1LDMsMCwxMDAsMCwwLDEyNSw0LDAsMTI0LDMsMCwxMDAsCisgICAgMCwwLDEwNyw5LDAsMTE0LDg1LDAsMTE2LDMsMCwxMjQsMSwwLDEyNCwzLAorICAgIDAsMTMxLDIsMCw4MywxMTYsNCwwLDEyNCwxLDAsMTAwLDAsMCwxMzEsMiwKKyAgICAwLDEyNSw1LDAsMTI0LDQsMCwxMjQsNSwwLDk1LDUsMCwxMjQsNSwwLAorICAgIDgzLDQxLDIsNzgsMTE0LDE2NSwwLDAsMCw0MSw2LDExNCw2MCwwLDAsMCwKKyAgICAxMTQsMTY1LDAsMCwwLDExNCwxMSwxLDAsMCwxMTQsMTczLDAsMCwwLDExNCwKKyAgICAyMTYsMCwwLDAsMTE0LDIyMCwwLDAsMCw0MSw2LDExNCw4LDEsMCwwLAorICAgIDExNCwxNTgsMCwwLDAsMTE0LDc2LDEsMCwwLDExNCwxNjksMCwwLDAsMTE0LAorICAgIDE3MCwwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMDgsMTAxLDEwMyw5Nyw5OSwKKyAgICAxMjEsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsOTksNzEsNywwLDAsMTE1LDE4LAorICAgIDAsMCwwLDAsNCwxNSwxLDI0LDIsMTUsMSw2LDEsMTIsMSwxMywKKyAgICAxLDE1LDEsOSwxLDEyMiwyNyw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwKKyAgICAxMTQsNDYsOTUsMTA4LDEwMSwxMDMsOTcsOTksMTIxLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsCisgICAgMTAxLDk5LDc4LDk5LDQsMCwwLDAsMCwwLDAsMCw5LDAsMCwwLAorICAgIDUsMCwwLDAsNjcsMCwwLDAsMTE1LDI1MiwwLDAsMCwxMDMsMCwwLAorICAgIDEyNSw0LDAsMTIwLDIzOSwwLDEyNCwyLDAsNjgsOTMsMjAzLDAsMTI1LDUsMCwKKyAgICAxMTYsMCwwLDEyNCw1LDAsMTE2LDEsMCwxMTYsMiwwLDEwMiwyLDAsMTMxLAorICAgIDIsMCwxMTUsNDYsMCwxMTMsMTMsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LDMsCisgICAgMCwxMjQsNSwwLDEzMSwxLDAsMTI1LDYsMCwxMjQsNiwwLDEwMCwxLDAsCisgICAgMTA3LDksMCwxMTQsMTMsMCwxMTYsNCwwLDEyNCw2LDAsMTAwLDIsMCwxMzEsCisgICAgMiwwLDExNCwxMDksMCwxMjQsNiwwLDEwNiw1LDAsMTI0LDEsMCwxMjQsMywKKyAgICAwLDEzMSwyLDAsMTI1LDcsMCwxMTAsMTgsMCwxMjQsMCwwLDEwNiw2LDAsCisgICAgMTI0LDEsMCwxMjQsNiwwLDEzMSwyLDAsMTI1LDcsMCwxMjQsNywwLDEwMCwKKyAgICAxLDAsMTA3LDgsMCwxMTQsMTQ1LDAsMTEzLDEzLDAsMTEwLDAsMCwxMjQsNywKKyAgICAwLDEwNiw3LDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxNjQsMCwxMjQsNywwLAorICAgIDgzLDEyNCw3LDAsMTA2LDgsMCwxMjUsOCwwLDEyNCw4LDAsMTAwLDEsMCwKKyAgICAxMDcsOCwwLDExNCwyMDAsMCwxMTYsOSwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsCisgICAgMSwwLDExMCwwLDAsMTI0LDQsMCwxMDYsMTAsMCwxMjQsOCwwLDEzMSwxLAorICAgIDAsMSwxMTMsMTMsMCwxMTMsMTMsMCw4NywxMTYsMTEsMCwxMjQsMSwwLDEwMCwKKyAgICAxLDAsMTMxLDIsMCwxMjUsNywwLDEyNCw0LDAsMTI0LDcsMCw5NSw4LAorICAgIDAsMTI0LDcsMCw4MywxMDAsMSwwLDgzLDQxLDQsMTIyLDYzLDcwLDEwNSwxMTAsCiAgICAgMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTExLDExNCwzMiwKICAgICAxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsCiAgICAgMTExLDExNCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDcsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDExNywxMSwwLDAsCi0gICAgMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw3OCw0MCw5LDAsCi0gICAgMCwwLDExNywxMCwwLDAsMCwxMDUsMTE1LDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMTYsMTE0LDExNyw1LDAsMCwwLDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSwxMTcsMjAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw0LDAsMCwKLSAgICAwLDc4LDExMSwxMTAsMTAxLDExNyw3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwKLSAgICAxMTQsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsNDAsOCwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsCi0gICAgMTQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsMTE3LDUsMCwwLDAsMTAxLDExMCwxMTYsMTE0LDEyMSwxMTcsNiwwLDAsCi0gICAgMCwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDExNyw4LDAsMCwwLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwyNTIsNCwwLDAsMTE1LAotICAgIDI4LDAsMCwwLDAsNSw2LDEsMTMsMSwyMSwxLDYsMSwxNSwxLAotICAgIDEyLDEsMTUsMSwyNCwyLDE1LDEsNiwxLDEyLDIsMTAsNSwyMCwyLAotICAgIDExNywyMiwwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwzLDAsMCwwLAotICAgIDAsMCwwLDAsNSwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSw5NywwLDAsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjQsCi0gICAgMCwxMTYsMSwwLDEwNiwyLDAsMTI1LDIsMCwxMTAsMCwwLDEyNCwwLDAsCi0gICAgMTA2LDMsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCw5MiwyLDAsMTI1LAotICAgIDMsMCwxMjUsNCwwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOSwwLDExNCw2NCwKLSAgICAwLDEyNCwzLDAsODMsMTI0LDQsMCwxMTQsODksMCwxMTYsNCwwLDEyNCwxLAotICAgIDAsMTI0LDQsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDMsMCw4MywxMDAsMSwKLSAgICAwLDgzLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsOTgsMCwwLDAsCi0gICAgNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCi0gICAgMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LAotICAgIDExMiw5NywxMTYsMTA0LDM5LDMyLDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LAotICAgIDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsCi0gICAgMTAwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LAotICAgIDEwMSw0Niw3OCw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNywxMSwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0MCw1LDAsMCwwLDExNywzLDAsMCwwLAotICAgIDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDE0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsCi0gICAgOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwyMyw1LDAsMCwxMTUsMTYsMCwwLDAsMCw0LDEyLDEsCi0gICAgMTIsMSwyNCwxLDEyLDEsNCwyLDYsMywxOSwyLDExNywyMiwwLDAsCi0gICAgMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQwLDExLDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsCi0gICAgMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsMTEsMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsCi0gICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwKLSAgICAxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsMTE3LDExLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMTE3LDIwLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDEsCi0gICAgMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSwKLSAgICA5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwKLSAgICAwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMjA2LDQsMCwKLSAgICAwLDExNSwxNCwwLDAsMCwxNiwyLDYsMiwxOCw4LDE4LDE3LDE4LDE3LAotICAgIDE4LDI3LDMsMSwxMTcsMTAsMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAotICAgIDMsMCwwLDAsNjYsMCwwLDAsMTE1LDExMCwwLDAsMCwxMjQsMCwwLAotICAgIDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsCi0gICAgOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsCi0gICAgNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAxLDYsMCw5MCw3LAotICAgIDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsOCwwLDEwMCw4LDAsCi0gICAgMTAwLDksMCwxMzIsMCwwLDkwLDksMCwxMDEsMTAsMCwxMDAsMTAsMCwxMDAsCi0gICAgMTEsMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTEsMCwxMDAsMTIsMCwxMDAsMTMsCi0gICAgMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDE0LDAsODMsNDAsMTUsMCwwLDAsCi0gICAgMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LAotICAgIDE3MiwwLDAsMCw3MCwxMDUsMTA4LDEwMSw0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3MywxMTAsMTE2LDEwMSwKLSAgICAxMTQsOTcsOTksMTE2LDEwNSwxMTEsMTEwLDExNSwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDMyLDk3LDExNCwKLSAgICAxMDEsMzIsOTksOTcsOTksMTA0LDEwMSwxMDAsMzIsMTAyLDExMSwxMTQsMzIsMTEyLDEwMSwxMTQsCi0gICAgMTAyLDExMSwxMTQsMTA5LDk3LDExMCw5OSwxMDEsNDQsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDEwLAotICAgIDMyLDMyLDMyLDMyLDExNCwxMDEsMTAyLDExNCwxMDEsMTE1LDEwNCwxMDEsMTAwLDMyLDExOSwxMDQsCi0gICAgMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsMTA0LAotICAgIDk3LDExMCwxMDAsMTA4LDEwNSwxMTAsMTAzLDMyLDEwNCw5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsCi0gICAgMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICA5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw1LDAsMCwKLSAgICAwLDcsMCwwLDAsMTE1LDEyMiwwLDAsMCwxMDMsMCwwLDEyNSwzLDAsCi0gICAgMTIwLDUyLDAsMTI0LDIsMCw2OCw5Myw0NCwwLDkyLDIsMCwxMzcsMCwwLAotICAgIDEyNSw0LDAsMTI0LDMsMCwxMDYsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsCi0gICAgMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjQsNCwwLDY4LDEzMSwxLDAsMTMxLAotICAgIDEsMCwxLDExMywxMywwLDg3LDEyNCwzLDAsMTI0LDAsMCw5NSwxLDAsCi0gICAgMTI0LDEsMCwxMTIsNzksMCwxMDAsMywwLDEyNCwwLDAsOTUsMiwwLDEwMCwKLSAgICA2LDAsMTI0LDAsMCw5NSwzLDAsMTE2LDQsMCwxMzEsMCwwLDEyNCwwLAotICAgIDAsOTUsNSwwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwwLDk1LDYsMCwKLSAgICAxMDAsNSwwLDgzLDQwLDcsMCwwLDAsMTE3LDE1NCwwLDAsMCw3MywxMTAsCi0gICAgMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTAxLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNSwxMDEsOTcsMTE0LDk5LDEwNCwKLSAgICAzMiwxMTEsMTEwLDMyLDk3LDExMCwxMDAsMzIsOTcsMzIsMTE4LDk3LDExNCwxMDUsOTcsOTgsCi0gICAgMTA4LDEwMSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDExMSwxMDIsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsNTAsNDUsMTE2LDExNywxMTIsMTA4LDEwMSwxMTUsMzIsOTksMTExLAotICAgIDExMCwxMTYsOTcsMTA1LDExMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLAotICAgIDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMTAxLDk5LAotICAgIDExMSwxMDMsMTEwLDEwNSwxMjIsMTAxLDExNSw0Niw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCwzLDAsMCwwLDUxLDAsMCwwLDExNSwyNywwLAotICAgIDAsMCwxMjQsMCwwLDkzLDE3LDAsMTI1LDEsMCwxMjQsMSwwLDEzNiwwLAotICAgIDAsMTAyLDIsMCw4NiwxLDExMywzLDAsMTAwLDAsMCw4Myw0MCwxLDAsCi0gICAgMCwwLDc4LDQwLDAsMCwwLDAsNDAsMiwwLDAsMCwxMTcsMiwwLAotICAgIDAsMCw0Niw0OCwxMTcsNiwwLDAsMCwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw0MCwKLSAgICAxLDAsMCwwLDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsMTAxLAotICAgIDEyMCwxMTIsMTE0LDYyLDU2LDUsMCwwLDExNSwyLDAsMCwwLDYsMCwxMTcsCi0gICAgMzgsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLAotICAgIDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxMTcsMSwwLDAsMCw0NiwKLSAgICAxMDUsMSwwLDAsMCw3OCwxMDUsMjU1LDI1NSwyNTUsMjU1LDQwLDcsMCwwLDAsCi0gICAgMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsMTE3LDgsMCwwLDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTYsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDE5LDAsMCwwLDk1LDExNCwKLSAgICAxMDEsMTA4LDk3LDEyMCwxMDEsMTAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDE0LDAsMCwwLDEwOCwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDcsMCwwLDAsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLAotICAgIDEwNSwxMjAsMTAxLDExNSw0MCwwLDAsMCwwLDQwLDEsMCwwLDAsMTE3LDYsCi0gICAgMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDUwLDUsMCwwLDExNSwxNiwwLDAsCi0gICAgMCwwLDQsNiwxLDE5LDEsMzYsMSw5LDIsMTUsMSw5LDEsMTIsCi0gICAgMSwxMTcsMTksMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICA0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsCi0gICAgMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsCi0gICAgMCwwLDAsMTAwLDMsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMiwwLDgzLAotICAgIDQwLDQsMCwwLDAsMTE3LDMxLDAsMCwwLDczLDExMCwxMTgsOTcsMTA4LDEwNSwKLSAgICAxMDAsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwKLSAgICAxMTQsMTIxLDMyLDEwOSwxMTYsMTA1LDEwOSwxMDEsNDYsMTA1LDEsMCwwLDAsNzgsMTA1LAotICAgIDI1NSwyNTUsMjU1LDI1NSw0MCwxLDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDQwLDEsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LAotICAgIDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNjQsNSwwLDAsMTE1LDIsMCwKLSAgICAwLDAsMCwyLDExNywyOCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksCi0gICAgOTcsOTksMTA0LDEwMSwxMTUsOTksMiwwLDAsMCwwLDAsMCwwLDEyLDAsCi0gICAgMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwyMTYsMSwwLDAsMTAwLAotICAgIDgsMCwxMjUsMiwwLDEyNCwxLDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLAotICAgIDAsMTAwLDIsMCwyNSwxMjUsMywwLDEyMSwyNSwwLDExNiwyLDAsMTA2LDMsCi0gICAgMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDEsMCwxMDYsNSwwLDEyNSw0LDAsCi0gICAgODcsMTEwLDI0LDAsNCwxMTYsNiwwLDEwNywxMCwwLDExNCw3NiwwLDEsMSwKLSAgICAxLDEwMCw5LDAsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDEyNCw0LDAsMTI0LAotICAgIDAsMCwxMDYsNywwLDEwNywzLDAsMTE0LDExNCwwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMzEsMCwwLDEsMTI0LDQsMCwxMjQsMCwwLDk1LDcsMCwxMTAsMCwKLSAgICAwLDExNiw5LDAsMTMxLDAsMCwxMTQsMTQ3LDAsMTI0LDAsMCwxMDYsMTAsMCwKLSAgICAxMjUsNSwwLDEyNCwzLDAsMTA2LDExLDAsMTMxLDAsMCwxMjUsNiwwLDExMCwKLSAgICAxNSwwLDEyNCwwLDAsMTA2LDEyLDAsMTI1LDUsMCwxMjQsMywwLDEyNSw2LAotICAgIDAsMTI0LDYsMCwxMjQsNSwwLDEwNyw2LDAsMTE0LDQ1LDEsMTE2LDEzLDAsCi0gICAgMTI0LDAsMCwxMDYsNCwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNywwLDExNiwKLSAgICAxNCwwLDEyNCw3LDAsMTMxLDEsMCwxMTQsNDUsMSwxMjAsOTEsMCwxMjQsMCwKLSAgICAwLDEwNiwxNSwwLDY4LDkzLDcxLDAsOTIsMiwwLDEyNSw4LDAsMTI1LDksCi0gICAgMCwxMDAsNCwwLDEyNCw4LDAsMjMsMTI1LDEwLDAsMTE2LDEzLDAsMTI0LDcsCi0gICAgMCwxMjQsMTAsMCwxMzEsMiwwLDEyNSwxMSwwLDExNiwxNiwwLDEyNCwxMSwwLAotICAgIDEzMSwxLDAsMTE0LDIxNCwwLDEyNCw5LDAsMTI0LDEsMCwxMjQsMTEsMCwxMzEsCi0gICAgMiwwLDEyNCw3LDAsMTAzLDEsMCwxMDIsMiwwLDgzLDExMywyMTQsMCw4NywKLSAgICAxMDAsMTAsMCwxMjUsMiwwLDExMyw0NSwxLDExMCwwLDAsMTIwLDEyMCwwLDEyNCwKLSAgICAwLDAsMTA2LDE1LDAsNjgsOTMsMTA5LDAsOTIsMiwwLDEyNSw4LDAsMTI1LAotICAgIDksMCwxMTYsMTMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDMsMCwxMjQsOCwKLSAgICAwLDIzLDEzMSwyLDAsMTI1LDExLDAsMTE2LDE4LDAsMTAwLDUsMCwxMDYsMTksCi0gICAgMCwxMjQsMTEsMCwxMzEsMSwwLDEwMCw2LDAsMTAwLDIsMCwxMzEsMSwxLAotICAgIDEsMTI0LDYsMCwxMjQsOCwwLDIzLDEyNCw1LDAsMTA3LDYsMCwxMTQsNTUsCi0gICAgMSwxMTYsMTYsMCwxMjQsMTEsMCwxMzEsMSwwLDExNCwxNjQsMSwxMjQsOSwwLAotICAgIDEyNCwxLDAsMTI0LDExLDAsMTMxLDIsMCwxMDMsMCwwLDEwMiwyLDAsODMsCi0gICAgMTEzLDU1LDEsMTEzLDU1LDEsODcsMTI0LDIsMCwxMTQsMjA2LDEsMTE2LDE4LDAsCi0gICAgMTAwLDcsMCwxMDYsMTksMCwxMjQsNywwLDEzMSwxLDAsMTMxLDEsMCwxLAotICAgIDEwMCwxMSwwLDEyNCw3LDAsMTAzLDEsMCwxMDIsMiwwLDgzLDEwMCwxMSwwLAotICAgIDEwMywwLDAsMTAyLDIsMCw4Myw0MCwxMiwwLDAsMCwxMTcsMTI1LDAsMCwKLSAgICAwLDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLAotICAgIDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLAotICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCi0gICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDMyLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDYsMzIsODIsMTAxLDExNiwxMTcsMTE0LAotICAgIDExMCwxMTUsMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMDgsMTA1LDExNSwxMTYsCi0gICAgNDUsMTExLDEwMiw0NSwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQxLDQ2LDExNywxLAotICAgIDAsMCwwLDQ2LDEwNSwyLDAsMCwwLDEwNSwxLDAsMCwwLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsOSwwLDAsMCwKLSAgICAxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMjMsMTI1LDExNyw5LDAsMCwwLDExOCwxMDEsCi0gICAgMTE0LDk4LDExMSwxMTUsMTA1LDExNiwxMjEsMTE3LDI1LDAsMCwwLDExMiwxMTEsMTE1LDExNSwKLSAgICAxMDUsOTgsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMjMsMTI1LDcwLDEwNSwyNTUsMjU1LDI1NSwyNTUsODQsNzgsNDAsMjEsMCwKLSAgICAwLDAsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LDEwLDAsMCwKLSAgICAwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywzLDAsMCwwLAotICAgIDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsMTE3LDQsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsMTE3LDgsMCwwLDAsMTE1LDExNiw5NSwxMDksMTE2LDEwNSwKLSAgICAxMDksMTAxLDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDExNywxOSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw1LDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsCi0gICAgMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCwxMTcsCi0gICAgMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTcsCi0gICAgOCwwLDAsMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsMTIsMCwwLAotICAgIDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsMTE3LDQsMCwKLSAgICAwLDAsODQsMTE0LDExNywxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LAotICAgIDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNyw2LDAsMCwwLAotICAgIDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsCi0gICAgMTIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsMTIsMCwwLDAsMTA1LAotICAgIDExNSw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwxMTcsMTEsMCwwLDAsCi0gICAgMTE2LDk3LDEwNSwxMDgsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDUsMCwwLDAsCi0gICAgMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsNSwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDExNywKLSAgICAxMiwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDExNyw5LDAsMCwwLDk4LDk3LDExNSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDYsCi0gICAgMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTE3LDYsMCwwLDAsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTcsMTMsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOSwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgNzAsNSwwLDAsMTE1LDY2LDAsMCwwLDAsMyw2LDEsMTksMSwzLAotICAgIDEsMjUsMSwxMywxLDExLDEsMTUsMSwxMCwxLDEyLDIsOSwxLDksCi0gICAgMSwxNSwyLDksMSw2LDIsMTIsMSwxOCwxLDEyLDEsMjIsMSwxMCwKLSAgICAxLDE1LDEsMTIsMSwyNiw0LDEyLDIsMjIsMSwyMiwxLDI1LDEsMTYsCi0gICAgMSwxMiwxLDI2LDEsNiwxLDE5LDEsMTMsMSwxMTcsMjIsMCwwLDAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsOSwKLSAgICAwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsOCwxLDAsMCwKLSAgICAxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjEsMTksMCwxMTYsMSwwLDEwNiwKLSAgICAyLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLDMzLDAsNCwKLSAgICAxMTYsMywwLDExNiw0LDAsMTE2LDUsMCwxMDIsMywwLDEwNywxMCwwLDExNCwKLSAgICA2MywwLDEsMSwxLDEwMywwLDAsMTI1LDIsMCw4OSwxMTAsMSwwLDg4LAotICAgIDExNiw2LDAsMTA2LDcsMCwxMDYsOCwwLDEwMCwxLDAsMTMxLDEsMCwxMTUsCi0gICAgMTAwLDAsMTE2LDksMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxMCwKLSAgICAwLDExMCwxMTEsMCwxMTYsOSwwLDEzMSwwLDAsMTI1LDMsMCwxMjAsOTAsMCwKLSAgICAxMjQsMiwwLDY4LDkzLDgyLDAsMTI1LDQsMCwxMjQsNCwwLDEwNiwxMSwwLAotICAgIDEwMCwyLDAsMTMxLDEsMCw5MiwzLDAsMTI1LDUsMCwxMjUsNiwwLDEyNSwKLSAgICA3LDAsMTI0LDYsMCwxMTQsMTc5LDAsMTAwLDMsMCwxMDYsMTIsMCwxMjQsNSwKLSAgICAwLDEyNCw3LDAsMTA2LDEzLDAsMTMxLDAsMCwxMzEsMiwwLDEyNSw4LDAsCi0gICAgMTEwLDYsMCwxMjQsNSwwLDEyNSw4LDAsMTI0LDMsMCwxMDYsMTQsMCwxMjQsCi0gICAgOCwwLDEzMSwxLDAsMSwxMTMsMTE2LDAsODcsMTI0LDMsMCwxMjQsMCwwLAotICAgIDk1LDEwLDAsMTE2LDYsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDE1LDAsMTMxLAotICAgIDEsMCwxMTQsNCwxLDExNiw5LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAotICAgIDAsMTI0LDIsMCw2OCwxMzEsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxNiwKLSAgICAwLDExMCwwLDAsMTAwLDYsMCw4Myw0MCw3LDAsMCwwLDExNyw2OCwwLAotICAgIDAsMCw3MCwxMDUsMTA4LDEwOCwzMiwxMTYsMTA0LDEwMSwzMiw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDMyLDExMSwxMDIsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LDk3LDEwOCwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDAsMTA1LDExNCwxMDEsCi0gICAgOTksMTE2LDExMSwxMTQsMTIxLDQ2LDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNywxLAotICAgIDAsMCwwLDQ2LDExNyw1LDAsMCwwLDEyMywxMjUsNDYsMTIzLDEyNSw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDExNSwKLSAgICAwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLAotICAgIDAsMTI0LDEsMCwxMDYsMCwwLDEzMSwwLDAsODYsMSwxMTMsMywwLDEwMCwKLSAgICAwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNyw1LAotICAgIDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsNDAsMiwwLDAsMCwxMTcsMiwwLAotICAgIDAsMCw0Niw0OCwxMTcsMiwwLDAsMCwxMDIsMTEwLDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsCi0gICAgMTAxLDEyMCwxMTIsMTE0LDYyLDE0Myw1LDAsMCwxMTUsMiwwLDAsMCw2LDAsCi0gICAgMTE3LDQxLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsNjAsMTA4LDExMSw5OSwKLSAgICA5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2Miw3OCw0MCwKLSAgICAxNywwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMywwLAotICAgIDAsMCw5NSwxMTEsMTE1LDExNyw3LDAsMCwwLDEwOCwxMDUsMTE1LDExNiwxMDAsMTA1LAotICAgIDExNCwxMTcsMTcsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzgsMTExLDExNiw3MCwxMTEsMTE3LAotICAgIDExMCwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxNSwwLDAsMCw4MCwxMDEsMTE0LDEwOSwKLSAgICAxMDUsMTE1LDExNSwxMDUsMTExLDExMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDE4LDAsMCwwLAorICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDc4LDExNCwxMCwxLAorICAgIDAsMCwxMjIsMTksMTE1LDExMiwxMDEsOTksMzIsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLAorICAgIDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDEsMTIsMTE0LDE5MiwwLDAsMCwyMTgsMywKKyAgICAxMTUsMTE2LDExNCwyMTgsNSw5OCwxMjEsMTE2LDEwMSwxMTUsMTE0LDc5LDEsMCwwLDExNCwKKyAgICA2MCwwLDAsMCwxMTQsMTAsMSwwLDAsMTE0LDgwLDEsMCwwLDExNCwxNjksCisgICAgMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwxOTcsMCwKKyAgICAwLDAsMTE0LDIxNiwwLDAsMCw0MSw5LDExNCw4LDEsMCwwLDExNCwxNTgsCisgICAgMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw5LDEsMCwwLDIxOCwxNCwxMTAsCisgICAgOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCw5MCw1LDEwMSwKKyAgICAxMTAsMTE2LDExNCwxMjEsMTE0LDc2LDEsMCwwLDExNCwxNzcsMCwwLDAsMTE0LDE3MCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsOSw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTEyLDEwMSw5OSw4Niw3LDAsCisgICAgMCwxMTUsNDAsMCwwLDAsMCw1LDYsMSwxMywxLDIxLDEsNiwxLAorICAgIDE1LDEsMTIsMSwxNSwxLDIxLDIsMTgsMSwxMiwxLDYsMSwxNSwxLAorICAgIDQsMSw5LDEsMTIsMSwxNSw1LDIwLDIsMTUsMSw5LDEsMTIyLDIwLAorICAgIDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDMsMTAxLDExNiw5NSwKKyAgICAxMTUsMTEyLDEwMSw5OSw5OSw0LDAsMCwwLDAsMCwwLDAsNiwwLDAsCisgICAgMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwxNDMsMCwwLDAsMTI0LDIsCisgICAgMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDI0LDAsMTE2LDAsMCwxMDYsMSwwLAorICAgIDEyNSwyLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDEsMCwxMjQsCisgICAgMiwwLDEyNCwzLDAsMTMxLDMsMCwxMjUsNCwwLDEyNCw0LDAsMTAwLDEsCisgICAgMCwxMDcsOCwwLDExNCw2MSwwLDEwMCwxLDAsODMsMTI0LDQsMCwxMDYsMywKKyAgICAwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMTM1LDAsMTI0LDQsMCwxMDYsNCwwLAorICAgIDEyNSw1LDAsMTI0LDUsMCwxMTQsMTI4LDAsMTAwLDIsMCwxMjQsNCwwLDk1LAorICAgIDUsMCwxMTYsNiwwLDEyNCwxLDAsMTI0LDUsMCwxMjQsMCwwLDEwNiwyLAorICAgIDAsMTMxLDMsMCwxMjQsNCwwLDk1LDQsMCwxMjQsNCwwLDgzLDEwMCwxLAorICAgIDAsODMsMTEwLDQsMCwxMjQsNCwwLDgzLDEwMCwxLDAsODMsNDEsMywxMjIsCisgICAgOTgsMTAyLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDMyLDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsMTExLDExNCwzMiwKKyAgICAzOSwxMTIsOTcsMTE2LDEwNCwzOSwzMiw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLAorICAgIDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzIsOTcsCisgICAgMTEwLDEwMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMTIsCisgICAgOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LAorICAgIDEwNCwxMDEsNDYsNzgsOTAsOSwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw0MSwKKyAgICA3LDExNCw3LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsODQsMSwwLDAsCisgICAgMTE0LDE2OSwwLDAsMCwxMTQsMjIwLDAsMCwwLDExNCwyMTcsMCwwLDAsMTE0LAorICAgIDU5LDEsMCwwLDQxLDYsMTE0LDgsMSwwLDAsMTE0LDE1OCwwLDAsMCwKKyAgICAxMTQsMzUsMCwwLDAsMTE0LDksMSwwLDAsMTE0LDE3NywwLDAsMCwxMTQsCisgICAgODMsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDEwLDEsMCwwLDExOCw3LDAsMCwxMTUsMjYsMCwwLAorICAgIDAsMCw0LDEyLDEsMTIsMSwyMSwxLDEyLDEsNCwxLDE1LDEsOSwKKyAgICAxLDYsMyw5LDEsMjQsMSw0LDIsNywyLDEyMiwyMCw4MCw5NywxMTYsCisgICAgMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLAorICAgIDk5LDk5LDMsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDMsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDQxLDAsMCwwLDEyNCwwLDAsMTA2LDAsCisgICAgMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMjUsMywwLDEyNCwzLDAsCisgICAgMTAwLDEsMCwxMDcsOCwwLDExNCwzNCwwLDEwMCwxLDAsODMsMTI0LDMsMCwKKyAgICAxMDYsMSwwLDgzLDQxLDIsMTIyLDE3MCwxMDIsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsCisgICAgOTcsMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDMyLDk4LDk3LAorICAgIDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA0LDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwKKyAgICAxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsCisgICAgODUsMTE1LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksNDAsNDEsMzIsCisgICAgMTA1LDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsNzgsNDEsMiwxMTQsMTAsMSwwLDAsMTE0LDE2OSwwLDAsMCw0MSwKKyAgICA0LDExNCw4LDEsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDM1LDAsMCwwLAorICAgIDExNCwxNzcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDExLDEsMCwwLDE0MCw3LDAsMCwxMTUsOCwwLAorICAgIDAsMCwwLDgsMTgsMSwxMiwxLDQsMSwxMjIsMjIsODAsOTcsMTE2LDEwNCwKKyAgICA3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw0MSwxMiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwKKyAgICAwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDE1LDEsMCwwLDExNCw3MywxLAorICAgIDAsMCwxMTQsNzgsMSwwLDAsMTE0LDc5LDEsMCwwLDExNCw4MCwxLDAsCisgICAgMCwxMTQsODQsMSwwLDAsMTE0LDEwLDEsMCwwLDExNCwxMSwxLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsNzIsMSwwLDAsMjUsNywwLDAsMTE1LDIyLDAsCisgICAgMCwwLDEyLDIsNiwyLDE4LDgsMTgsMTcsMTgsMTcsMTgsMTUsMywxLAorICAgIDE4LDMxLDMsMSwyMSwyMSwzLDEsMTE0LDcyLDEsMCwwLDk5LDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNjQsMCwKKyAgICAwLDAsMTE1LDEzMywwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLAorICAgIDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLAorICAgIDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwKKyAgICAwLDEwMSw2LDAsOTAsNywwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLAorICAgIDkwLDgsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw5LDAsMTAwLAorICAgIDEwLDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDEsMCw5MCwxMCwwLDEwMCwxMywKKyAgICAwLDEwMCwxNCwwLDEzMiwwLDAsOTAsMTEsMCwxMDEsMTIsMCwxMDAsMTUsMCwKKyAgICAxMDAsMTYsMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTMsMCwxMDAsMTcsMCwxMDAsCisgICAgMTgsMCwxMzIsMCwwLDkwLDE0LDAsMTAwLDEwLDAsODMsNDEsMTksMjE4LDEwLAorICAgIDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTIyLDE3Miw3MCwxMDUsMTA4LDEwMSwKKyAgICA0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiw3MywxMTAsMTE2LDEwMSwxMTQsOTcsOTksMTE2LDEwNSwxMTEsMTEwLDExNSwKKyAgICAzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwKKyAgICAxMjEsMTE1LDExNiwxMDEsMTA5LDMyLDk3LDExNCwxMDEsMzIsOTksOTcsOTksMTA0LDEwMSwxMDAsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsMTEyLDEwMSwxMTQsMTAyLDExMSwxMTQsMTA5LDk3LDExMCw5OSwxMDEsCisgICAgNDQsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDEwLDMyLDMyLDMyLDMyLDExNCwxMDEsMTAyLDExNCwKKyAgICAxMDEsMTE1LDEwNCwxMDEsMTAwLDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsCisgICAgMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLAorICAgIDEwMCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwNSwxMTAsMTAzLDMyLAorICAgIDEwNCw5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsMTAxLAorICAgIDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5OSwyLDAsMCwwLDAsMCwwLAorICAgIDAsNSwwLDAsMCw1LDAsMCwwLDcsMCwwLDAsMTE1LDEyMiwwLAorICAgIDAsMCwxMDMsMCwwLDEyNSwzLDAsMTIwLDUyLDAsMTI0LDIsMCw2OCw5MywKKyAgICA0NCwwLDkyLDIsMCwxMzcsMCwwLDEyNSw0LDAsMTI0LDMsMCwxMDYsMCwKKyAgICAwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwKKyAgICAxMjQsNCwwLDY4LDEzMSwxLDAsMTMxLDEsMCwxLDExMywxMywwLDg3LDEyNCwKKyAgICAzLDAsMTI0LDAsMCw5NSwxLDAsMTI0LDEsMCwxMTIsNzksMCwxMDAsMywKKyAgICAwLDEyNCwwLDAsOTUsMiwwLDEwMCw2LDAsMTI0LDAsMCw5NSwzLDAsCisgICAgMTE2LDQsMCwxMzEsMCwwLDEyNCwwLDAsOTUsNSwwLDExNiw0LDAsMTMxLAorICAgIDAsMCwxMjQsMCwwLDk1LDYsMCwxMDAsNSwwLDgzLDQxLDcsMTIyLDE1NCwKKyAgICA3MywxMTAsMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTAxLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNSwxMDEsOTcsMTE0LAorICAgIDk5LDEwNCwzMiwxMTEsMTEwLDMyLDk3LDExMCwxMDAsMzIsOTcsMzIsMTE4LDk3LDExNCwxMDUsCisgICAgOTcsOTgsMTA4LDEwMSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDExMSwxMDIsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNTAsNDUsMTE2LDExNywxMTIsMTA4LDEwMSwxMTUsMzIsCisgICAgOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDgsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwKKyAgICAxMDgsMTAxLDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsCisgICAgMTAxLDk5LDExMSwxMDMsMTEwLDEwNSwxMjIsMTAxLDExNSw0Niw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDUxLDAsMCwwLDExNSwKKyAgICAyNywwLDAsMCwxMjQsMCwwLDkzLDE3LDAsMTI1LDEsMCwxMjQsMSwwLAorICAgIDEzNiwwLDAsMTAyLDIsMCw4NiwxLDExMywzLDAsMTAwLDAsMCw4Myw0MSwKKyAgICAxLDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDExNCw1NiwKKyAgICAxLDAsMCw0MSwxLDExNCwxNjksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDc3LDAsMCwwLDE2OSw3LDAsMCwxMTUsMiwwLAorICAgIDAsMCw2LDAsMTIyLDM4LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LAorICAgIDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE0LDExNiwwLDAsCisgICAgMCwxMTQsMjksMCwwLDAsNzgsMTE0LDEzOCwwLDAsMCw0MSw3LDExNCwxOTcsCisgICAgMCwwLDAsMjE4LDgsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE0LDM1LDAsCisgICAgMCwwLDIxOCwxMSw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDIxOCwKKyAgICAzLDExNSwxMDEsMTE2LDIxOCwxMSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsCisgICAgMTAxLDIxOCwxOSw5NSwxMTQsMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDQxLDUsMTE0LDcxLDAsMCwwLDExNCwzNSwwLAorICAgIDAsMCwyMTgsMTQsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMDAsMTAxLDExNiw5NywxMDUsCisgICAgMTA4LDExNSw5MCw3LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNCwxMjcsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsNDEsMSwxMTQsMTY5LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCw3MiwwLDAsMCwxNjMsNywwLDAsMTE1LDE2LDAsMCwwLDAsCisgICAgNCw2LDEsMTksMSwzNiwxLDksMiwxNSwxLDksMSwxMiwxLDEyMiwKKyAgICAxOSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsCisgICAgMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCisgICAgMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMDAsMywKKyAgICAwLDEyNCwwLDAsOTUsMCwwLDEwMCwyLDAsODMsNDEsNCwxMjIsMzEsNzMsCisgICAgMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDUsCisgICAgMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsMzIsMTA5LDExNiwxMDUsMTA5LDEwMSw0NiwxMTQsMjksCisgICAgMCwwLDAsNzgsMTE0LDEzOCwwLDAsMCw0MSwxLDExNCw4NywxLDAsMCwKKyAgICA0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwxMTQsNzMsMSwwLDAsMTc3LDcsMCwwLDExNSwKKyAgICAyLDAsMCwwLDAsMiwxMjIsMjgsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsCisgICAgMTAxLDExNCw0NiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LAorICAgIDk5LDEwNCwxMDEsMTE1LDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwKKyAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDU5LDAsMCwwLDEyNCwwLAorICAgIDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjQsMiwwLAorICAgIDEwMCwxLDAsMTA3LDgsMCwxMTQsMzcsMCwxMDAsMSwwLDEwMywwLDAsMTAyLAorICAgIDIsMCw4MywxMjQsMiwwLDEwNiwxLDAsMTI0LDIsMCwxMDYsMiwwLDExMiwKKyAgICA1NSwwLDEwMywwLDAsMTAyLDIsMCw4Myw0MSwyLDEyMiwxOTcsODQsMTE0LDEyMSwKKyAgICAzMiwxMTYsMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDgsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsCisgICAgMTA1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsMTExLDExNCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTEyLDExMSwxMTQsCisgICAgMTE2LDEwNSwxMTEsMTEwLDExNSw0NiwzMiw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw0MCwKKyAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ0LDMyLDEwOCwxMDUsMTE1LDExNiw0NSwxMTEsMTAyLDQ1LAorICAgIDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsCisgICAgMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLAorICAgIDg1LDExNSwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDQwLDQxLDMyLAorICAgIDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDc4LDQxLDMsMTE0LDEwLDEsMCwwLDExNCwxNjksMCwwLDAsMTE0LAorICAgIDIyMCwwLDAsMCw0MSwzLDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLAorICAgIDExNCwxNzcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDE2NSwwLDAsMCwxODMsNywwLDAsMTE1LDgsMCwKKyAgICAwLDAsMCw3LDE1LDEsMTIsMSwxMCwxLDEyMiwyMiw3MCwxMDUsMTA4LDEwMSwKKyAgICA3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDk5LDYsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDcsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQwLDAsMCwwLDEyNCwxLDAsMTI0LAorICAgIDIsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDYsMCwxMTYsMCwwLDEyNCwyLAorICAgIDAsMTI0LDMsMCwxMDAsMSwwLDEyNCw2LDAsMTAwLDIsMCwxMjQsNCwwLAorICAgIDEzMSwyLDIsODMsNDEsMyw3OCwxMTQsMTY5LDAsMCwwLDExNCwyMjAsMCwwLAorICAgIDAsNDEsMSwxMTQsMjM5LDAsMCwwLDQxLDcsMTE0LDcxLDAsMCwwLDExNCwKKyAgICAyNDMsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDIyOCwKKyAgICAwLDAsMCwxMTQsOSwxLDAsMCwxMTQsMTY5LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw4NCwxLDAsCisgICAgMCwxOTUsNywwLDAsMTE1LDYsMCwwLDAsMCwxLDE1LDEsMTgsMSwKKyAgICAxMjIsMjAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDMsMTAxLAorICAgIDExNiw5NSwxMTUsMTEyLDEwMSw5OSw3OCw5OSwzLDAsMCwwLDAsMCwwLDAsCisgICAgMTQsMCwwLDAsMTUsMCwwLDAsNjcsMCwwLDAsMTE1LDI0MCwxLDAsCisgICAgMCwxMDAsMSwwLDEyNSwzLDAsMTI0LDEsMCwxMDYsMCwwLDEwMCwyLDAsCisgICAgMTMxLDEsMCwxMDAsMywwLDI1LDEyNSw0LDAsMTIxLDM0LDAsMTE2LDEsMCwKKyAgICAxMjQsMCwwLDEwNiwyLDAsMTEyLDQ5LDAsMTE2LDMsMCwxMDYsNCwwLDEzMSwKKyAgICAwLDAsMTMxLDEsMCwxMDYsNSwwLDEyNSw1LDAsODcsMTEwLDI0LDAsNCwKKyAgICAxMTYsNiwwLDEwNywxMCwwLDExNCw4NSwwLDEsMSwxLDEwMCwxMCwwLDEyNSwKKyAgICA1LDAsODksMTEwLDEsMCw4OCwxMjQsNSwwLDEyNCwwLDAsMTA2LDcsMCwKKyAgICAxMDcsMywwLDExNCwxMjMsMCwxMjQsMCwwLDEwNiw4LDAsMTMxLDAsMCwxLAorICAgIDEyNCw1LDAsMTI0LDAsMCw5NSw3LDAsMTEwLDAsMCwxMTYsOSwwLDEzMSwKKyAgICAwLDAsMTE0LDE1NiwwLDEyNCwwLDAsMTA2LDEwLDAsMTI1LDYsMCwxMjQsNCwKKyAgICAwLDEwNiwxMSwwLDEzMSwwLDAsMTI1LDcsMCwxMTAsMTUsMCwxMjQsMCwwLAorICAgIDEwNiwxMiwwLDEyNSw2LDAsMTI0LDQsMCwxMjUsNywwLDEyNCw3LDAsMTI0LAorICAgIDYsMCwxMDcsNiwwLDExNCw1MSwxLDExNiwxMywwLDEyNCwwLDAsMTA2LDIsCisgICAgMCwxMjQsNCwwLDEzMSwyLDAsMTI1LDgsMCwxMjAsMTAzLDAsMTI0LDAsMCwKKyAgICAxMDYsMTQsMCw2OCw5Myw3NywwLDkyLDIsMCwxMjUsOSwwLDEyNSwxMCwwLAorICAgIDEwMCw1LDAsMTI0LDksMCwyMywxMjUsMTEsMCwxMTYsMTMsMCwxMjQsOCwwLAorICAgIDEyNCwxMSwwLDEzMSwyLDAsMTI1LDEyLDAsMTE2LDE1LDAsMTI0LDEyLDAsMTMxLAorICAgIDEsMCwxMTQsMjExLDAsMTI0LDAsMCwxMDYsMTYsMCwxMjQsMTAsMCwxMjQsMSwKKyAgICAwLDEyNCwxMiwwLDEyNCw4LDAsMTAzLDEsMCwxMjQsMiwwLDEzMSw1LDAsCisgICAgODMsMTEzLDIxMSwwLDg3LDExNiwxNywwLDEyNCw4LDAsMTMxLDEsMCwxMjUsMywKKyAgICAwLDExMCwwLDAsMTIwLDEyNiwwLDEyNCwwLDAsMTA2LDE0LDAsNjgsOTMsMTE1LAorICAgIDAsOTIsMiwwLDEyNSw5LDAsMTI1LDEwLDAsMTE2LDEzLDAsMTI0LDAsMCwKKyAgICAxMDYsMiwwLDEyNCw0LDAsMTI0LDksMCwyMywxMzEsMiwwLDEyNSwxMiwwLAorICAgIDExNiwxOCwwLDEwMCw2LDAsMTA2LDE5LDAsMTI0LDEyLDAsMTMxLDEsMCwxMDAsCisgICAgNywwLDEwMCwzLDAsMTMxLDEsMSwxLDEyNCw3LDAsMTI0LDksMCwyMywKKyAgICAxMjQsNiwwLDEwNyw2LDAsMTE0LDYxLDEsMTE2LDE1LDAsMTI0LDEyLDAsMTMxLAorICAgIDEsMCwxMTQsMTc2LDEsMTI0LDAsMCwxMDYsMTYsMCwxMjQsMTAsMCwxMjQsMSwKKyAgICAwLDEyNCwxMiwwLDEwMCw4LDAsMTI0LDIsMCwxMzEsNSwwLDgzLDExMyw2MSwKKyAgICAxLDExMyw2MSwxLDg3LDEyNCwzLDAsMTE0LDIzNiwxLDExNiwxOCwwLDEwMCw5LAorICAgIDAsMTA2LDE5LDAsMTI0LDgsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMTYsMjAsCisgICAgMCwxMjQsMSwwLDEwMCw4LDAsMTMxLDIsMCwxMjUsMTMsMCwxMjQsOCwwLAorICAgIDEwMywxLDAsMTI0LDEzLDAsOTUsMjEsMCwxMjQsMTMsMCw4MywxMDAsOCwwLAorICAgIDgzLDQxLDExLDEyMiwxMjUsODQsMTE0LDEyMSwzMiwxMTYsMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwKKyAgICAzMiw5NywzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsNDQsMzIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsCisgICAgMTEyLDk3LDk5LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTIsOTcsOTksCisgICAgMTA3LDk3LDEwMywxMDEsMzIsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0NiwzMiw4MiwKKyAgICAxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw0MCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ0LDMyLAorICAgIDEwOCwxMDUsMTE1LDExNiw0NSwxMTEsMTAyLDQ1LDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsCisgICAgNDEsNDYsNzAsMTE0LDExNiwwLDAsMCwxMTQsMTE1LDAsMCwwLDExNCwyOSwwLAorICAgIDAsMCwxMTQsNzIsMCwwLDAsMTIyLDksMTE2LDExNCwxMjEsMTA1LDExMCwxMDMsMzIsCisgICAgMTIzLDEyNSwxMTQsMTQ1LDAsMCwwLDc4LDEyMiwyNSwxMTIsMTExLDExNSwxMTUsMTA1LDk4LAorICAgIDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTAyLDExMSwxMTQsCisgICAgMzIsMTIzLDEyNSwxMTQsMTM4LDAsMCwwLDQxLDIyLDExNCwzMiwwLDAsMCwxMTQsCisgICAgMzksMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwzLDAsMCwwLDExNCw0NSwKKyAgICAwLDAsMCwxMTQsNTEsMSwwLDAsMTE0LDQwLDAsMCwwLDExNCw4NywxLAorICAgIDAsMCwyMTgsMTEsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE0LAorICAgIDYsMCwwLDAsMTE0LDkwLDEsMCwwLDExNCwxMzksMCwwLDAsMTE0LDg5LAorICAgIDEsMCwwLDExNCwyOCwwLDAsMCwxMTQsODYsMSwwLDAsMTE0LDQ0LDAsCisgICAgMCwwLDExNCw4NCwxLDAsMCwxMTQsNDYsMCwwLDAsMTE0LDE1MiwwLDAsCisgICAgMCwxMTQsNDcsMCwwLDAsMTE0LDIxNiwwLDAsMCwxMTQsMjIwLDAsMCwwLAorICAgIDQxLDE0LDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCw5LDEsMCwKKyAgICAwLDkwLDEyLDEwNSwxMTUsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTAsCisgICAgMTEsMTE2LDk3LDEwNSwxMDgsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDE4MywwLDAsCisgICAgMCw5MCw1LDk5LDk3LDk5LDEwNCwxMDEsOTAsMTIsOTksOTcsOTksMTA0LDEwMSw5NSwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCw5LDk4LDk3LDExNSwxMDEsOTUsMTEyLDk3LDExNiwKKyAgICAxMDQsMTE0LDU2LDEsMCwwLDExNCwyNDMsMCwwLDAsOTAsMTMsMTA1LDExMCwxMDUsCisgICAgMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw5MCw5LDEwMiwxMTcsMTA4LDEwOCwKKyAgICA5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTc3LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMCwxLDAsMCwyMDAsNywKKyAgICAwLDAsMTE1LDY4LDAsMCwwLDAsMyw2LDEsMTksMSwzLDEsMzQsCisgICAgMSwxMywxLDExLDEsMTUsMSwxMCwxLDEyLDIsOSwxLDksMSwxNSwKKyAgICAyLDksMSw2LDIsMTIsMSwxOCwxLDIyLDEsMTAsMSwxNSwxLDEyLAorICAgIDEsMzIsNCwxNSwyLDIyLDEsMjIsMSwyNSwxLDE2LDEsMTIsMSwzMiwKKyAgICAxLDYsMSwxOSwxLDE1LDEsMTIsMSw0LDEsMTIyLDIwLDcwLDEwNSwxMDgsCisgICAgMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLAorICAgIDk5LDk5LDEsMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDEzLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwxNCwxLDAsMCwxMjQsMCwwLDEwNiwwLAorICAgIDAsMTI1LDEsMCwxMjEsMzEsMCwxMTYsMSwwLDEwNiwyLDAsMTI0LDEsMCwKKyAgICAxMTIsMzMsMCwxMTYsMSwwLDEwNiwzLDAsMTMxLDAsMCwxMzEsMSwwLDEyNSwKKyAgICAyLDAsODcsMTEwLDMzLDAsNCwxMTYsNCwwLDExNiw1LDAsMTE2LDYsMCwKKyAgICAxMDIsMywwLDEwNywxMCwwLDExNCw3NSwwLDEsMSwxLDEwMywwLDAsMTI1LAorICAgIDIsMCw4OSwxMTAsMSwwLDg4LDExNiw3LDAsMTA2LDgsMCwxMDYsOSwwLAorICAgIDEwMCwxLDAsMTMxLDEsMCwxMTUsMTEyLDAsMTE2LDEwLDAsMTI0LDIsMCwxMzEsCisgICAgMSwwLDEyNCwwLDAsOTUsMTEsMCwxMTAsMTExLDAsMTE2LDEwLDAsMTMxLDAsCisgICAgMCwxMjUsMywwLDEyMCw5MCwwLDEyNCwyLDAsNjgsOTMsODIsMCwxMjUsNCwKKyAgICAwLDEyNCw0LDAsMTA2LDEyLDAsMTAwLDIsMCwxMzEsMSwwLDkyLDMsMCwKKyAgICAxMjUsNSwwLDEyNSw2LDAsMTI1LDcsMCwxMjQsNiwwLDExNCwxOTEsMCwxMDAsCisgICAgMywwLDEwNiwxMywwLDEyNCw1LDAsMTI0LDcsMCwxMDYsMTQsMCwxMzEsMCwKKyAgICAwLDEzMSwyLDAsMTI1LDgsMCwxMTAsNiwwLDEyNCw1LDAsMTI1LDgsMCwKKyAgICAxMjQsMywwLDEwNiwxNSwwLDEyNCw4LDAsMTMxLDEsMCwxLDExMywxMjgsMCwKKyAgICA4NywxMjQsMywwLDEyNCwwLDAsOTUsMTEsMCwxMTYsNywwLDEwNiw4LDAsCisgICAgMTA2LDksMCwxMTYsMTYsMCwxMzEsMSwwLDExNCwxMCwxLDEwMCw0LDAsMTAwLAorICAgIDUsMCwxMzIsMCwwLDEyNCwyLDAsNjgsMTMxLDEsMCwxMjQsMCwwLDk1LAorICAgIDE3LDAsMTEwLDAsMCwxMDAsNiwwLDgzLDQxLDcsMTIyLDY4LDcwLDEwNSwxMDgsCisgICAgMTA4LDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsMzIsMTExLDEwMiwzMiwxMTIsCisgICAgMTExLDExNiwxMDEsMTEwLDExNiwxMDUsOTcsMTA4LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwKKyAgICAzMiw5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTUsMzIsMTAyLDExMSwKKyAgICAxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsCisgICAgNDYsMTE0LDAsMCwwLDAsMTE0LDExNiwwLDAsMCwxMjIsNSwxMjMsMTI1LDQ2LAorICAgIDEyMywxMjUsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywKKyAgICAwLDAsMCw4MywwLDAsMCwxMTUsMjgsMCwwLDAsMTA0LDAsMCwxMjQsCisgICAgMCwwLDkzLDE4LDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwwLDAsMTMxLDAsCisgICAgMCwxNDYsMiwwLDExMyw2LDAsODMsMTE0LDQsMCwwLDAsNDEsMSwxMTQsCisgICAgMTM5LDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDkwLDIsMTAyLDExMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyNTAsOSwKKyAgICA2MCwxMTUsMTAxLDExNiw5OSwxMTEsMTA5LDExMiw2MiwxOCw4LDAsMCwxMTUsMiwwLAorICAgIDAsMCw5LDAsMTIyLDQxLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgNDYsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsNjAsMTA4LDExMSwKKyAgICA5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLDExNSwxMDEsMTE2LDk5LDExMSwxMDksMTEyLDYyLDc4LAorICAgIDQxLDE4LDExNCwzNSwwLDAsMCwxMTQsMywwLDAsMCw5MCw3LDEwOCwxMDUsCisgICAgMTE1LDExNiwxMDAsMTA1LDExNCwxMTQsNDUsMCwwLDAsMjE4LDE3LDcwLDEwNSwxMDgsMTAxLAorICAgIDc4LDExMSwxMTYsNzAsMTExLDExNywxMTAsMTAwLDY5LDExNCwxMTQsMTExLDExNCwyMTgsMTUsODAsCisgICAgMTAxLDExNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMSwxMTAsNjksMTE0LDExNCwxMTEsMTE0LDIxOCwxOCwKICAgICA3OCwxMTEsMTE2LDY1LDY4LDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDgsMCwwLDAsMTEyLAotICAgIDEwOCw5NywxMTYsMTAyLDExMSwxMTQsMTA5LDExNywxMCwwLDAsMCwxMTUsMTE2LDk3LDExNCwKLSAgICAxMTYsMTE1LDExOSwxMDUsMTE2LDEwNCwxMTcsMywwLDAsMCwxMTUsMTAxLDExNiwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsOSwKLSAgICAwLDAsMCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNyw2LDAsMCwKLSAgICAwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDUsMCwwLDAsMTA4LDExMSwxMTksMTAxLAotICAgIDExNCwxMTcsMywwLDAsMCw5NywxMDAsMTAwLDExNywyNywwLDAsMCw5NSw2NywKLSAgICA2NSw4Myw2OSw5NSw3Myw3OCw4Myw2OSw3OCw4Myw3Myw4NCw3Myw4Niw2OSw5NSwKLSAgICA4MCw3Niw2NSw4NCw3MCw3OSw4Miw3Nyw4MywxMTcsMTksMCwwLDAsOTUsMTE0LAotICAgIDEwMSwxMDgsOTcsMTIwLDEwMSwxMDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LAotICAgIDEwMSw0MCw5LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsOCwwLDAsMCw5OSwxMTEsMTEwLAotICAgIDExNiwxMDEsMTEwLDExNiwxMTUsMTE3LDIxLDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsOTUsCi0gICAgMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsOTUsOTksMTExLDExMCwxMTYsMTAxLDExMCwxMTYsMTE1LDExNywKLSAgICA0LDAsMCwwLDEwNSwxMTYsMTAxLDEwOSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTcsMywwLDAsMCwxMDAsMTExLDExNiwxMTcsNiwwLDAsMCwxMTUsMTE3LAotICAgIDEwMiwxMDIsMTA1LDEyMCwxMTcsOCwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLAotICAgIDAsMCw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LDEwMSwxMTQsNSwwLAotICAgIDAsMTE1LDM0LDAsMCwwLDAsMiw5LDEsMywxLDE5LDEsMjIsMywKLSAgICAxMSwzLDE4LDEsMTgsNyw5LDEsMTMsMSwyNCwxLDYsMSwyNywyLAotICAgIDYsMSwxNywxLDksMSwxOCwxLDExNywyMiwwLDAsMCw3MCwxMDUsMTA4LAotICAgIDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAotICAgIDMsMCwwLDAsNywwLDAsMCwxMTUsMjUsMCwwLDAsMTM1LDAsMCwKLSAgICAxMzUsMSwwLDEwMiwyLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LAotICAgIDIsMCwxMjQsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDIwLDEsMCwwLAotICAgIDY1LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwKLSAgICAxMDQsMTA1LDk5LDEwNCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsMzIsOTksCi0gICAgMTA4LDExMSwxMTUsMTE3LDExNCwxMDEsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMTEsMTEwLAotICAgIDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMCwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDEwNSwxMDgsCi0gICAgMTA4LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNSwxMTYsCi0gICAgOTcsMTEwLDk5LDEwMSwzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExNSwKLSAgICAxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsCi0gICAgMzIsOTcsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTExLDExMCwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiw5OSwxMDgsMTExLDExNSwxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwKLSAgICAxMDQsMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgOTksMTA4LDExMSwxMTUsMTE3LDExNCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywKLSAgICAzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDQ0LDMyLDczLDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCi0gICAgMCw0LDAsMCwwLDE5LDAsMCwwLDExNSw0NiwwLDAsMCwxMTYsMCwKLSAgICAwLDEyNCwwLDAsMTMxLDEsMCwxMTUsMzMsMCwxMTYsMSwwLDEwMCwxLDAsCi0gICAgMTAwLDIsMCwxMjQsMCwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwKLSAgICAwLDAsMTI0LDAsMCwxMzYsMSwwLDE0MCwxLDAsODMsNDAsMywwLDAsCi0gICAgMCwxMTcsNDUsMCwwLDAsODAsOTcsMTE2LDEwNCwzMiwxMDQsMTExLDExMSwxMDcsMzIsCi0gICAgMTAyLDExMSwxMTQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwxMDksOTcsCi0gICAgOTksMTA0LDEwNSwxMTAsMTAxLDExNCwxMjEsNDYsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCw0NiwxMTcsMzAsMCwwLDAsMTExLDExMCwxMDgsMTIxLDMyLDEwMCwxMDUsMTE0LAotICAgIDEwMSw5OSwxMTYsMTExLDExNCwxMDUsMTAxLDExNSwzMiw5NywxMTQsMTAxLDMyLDExNSwxMTcsMTEyLAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLAotICAgIDIsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwKLSAgICAxMTUsMTAwLDEwNSwxMTQsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNywKLSAgICAxNCwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwKLSAgICAxMDgsMTE1LDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTUsMTAyLDExMSwxMTQsOTUsNzAsMTA1LDEwOCwxMDEsCi0gICAgNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxNTUsNSwwLDAsMTE1LDYsMCwwLDAsMCwKLSAgICAyLDEyLDEsMjEsMSwxMTcsNTQsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsNDYsNjAsCi0gICAgMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLAotICAgIDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAotICAgIDQwLDAsMCwwLDAsNDAsMywwLDAsMCwxMTcsMywwLDAsMCw5OSwKLSAgICAxMDgsMTE1LDExNywxNCwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsCi0gICAgMTE2LDk3LDEwNSwxMDgsMTE1LDExNywyNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCi0gICAgMTExLDExMSwxMDcsOTUsMTAyLDExMSwxMTQsOTUsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDMsMCwwLAotICAgIDAsOTksMTA4LDExNSwxMTcsMTQsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwKLSAgICAxMDAsMTAxLDExNiw5NywxMDUsMTA4LDExNSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDE0NSw1LDAsMCwxMTUsNCwwLDAsMCwKLSAgICAwLDEwLDIxLDYsMTE3LDIwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDE0LDAsMCwwLDEwMCwxLDAsMTI0LDAsMCwxMDYsMCwwLAotICAgIDEwMiwxLDAsMjIsODMsNDAsMiwwLDAsMCw3OCwxMTcsMTQsMCwwLDAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwzNywxMTQsNDEsNDAsMSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwxLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLAotICAgIDExNCw5NSw5NSwxNjMsNSwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywxOSwKLSAgICAwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LAotICAgIDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MCwxMywwLDAsMCwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywKLSAgICAxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LAotICAgIDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAotICAgIDk1LDk1LDExNywxNywwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsCi0gICAgMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDExNywxNywwLDAsMCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDExNywxMSwKLSAgICAwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDksCi0gICAgMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwKLSAgICAwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsNzAsMTA1LAotICAgIDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MSw1LDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMTYsNyw2LDIsMTIsMTQsMTIsNCw2LDIsMTIsNDQsMTIsMzEsMTgsCi0gICAgMTgsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsCi0gICAgMCw2NiwwLDAsMCwxMTUsNTAsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwKLSAgICAwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwKLSAgICAxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsCi0gICAgNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsODMsNDAsNywwLDAsCi0gICAgMCwxMTcsMTgsMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksCi0gICAgMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDExNywzNiwwLDAsMCw2NywxMTEsMTEwLAotICAgIDExNiwxMDEsMTIwLDExNiwzMiwxMDksOTcsMTEwLDk3LDEwMywxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LAorICAgIDExMSwxMTQsMTE0LDcsMCwwLDAsMTE0LDgsMCwwLDAsMTE0LDksMCwwLAorICAgIDAsMTE0LDg4LDEsMCwwLDExNCw4OSwxLDAsMCwxMTQsMTIxLDAsMCwwLAorICAgIDExNCw0NywwLDAsMCwxMTQsMTM5LDAsMCwwLDIxOCwzLDk3LDEwMCwxMDAsMTE0LAorICAgIDEwLDAsMCwwLDExNCw5MCwxLDAsMCw0MSw5LDExNCw3MSwwLDAsMCwKKyAgICAxMTQsMzUsMCwwLDAsOTAsOCw5OSwxMTEsMTEwLDExNiwxMDEsMTEwLDExNiwxMTUsOTAsCisgICAgMjEsMTA4LDExMSwxMTksMTAxLDExNCw5NSwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsCisgICAgMTEwLDExNiwxMDEsMTEwLDExNiwxMTUsMTE0LDcwLDEsMCwwLDExNCw2NywwLDAsMCwKKyAgICAxMTQsNjQsMSwwLDAsMTE0LDU2LDEsMCwwLDkwLDgsMTEwLDEwMSwxMTksOTUsCisgICAgMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDkyLDEsMCwwLDI0NSw3LDAsMCwxMTUsMzQsMCwwLAorICAgIDAsMCwyLDksMSwzLDEsMzEsMSwyMiwzLDExLDMsMTgsMSwxOCwKKyAgICA3LDksMSwxMywxLDI0LDEsNiwxLDI3LDIsNiwxLDE3LDEsOSwKKyAgICAxLDE4LDEsMTIyLDIyLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCisgICAgOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCw3LDAsMCwwLAorICAgIDExNSwyNSwwLDAsMCwxMzUsMCwwLDEzNSwxLDAsMTAyLDIsMCwxMDAsMSwKKyAgICAwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMiwwLDEyNCwyLDAsODMsNDEsMywKKyAgICA5NywyMCwxLDAsMCw2NSwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMDksMTAxLDExNiwKKyAgICAxMDQsMTExLDEwMCwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsCisgICAgMTE1LDMyLDk3LDMyLDk5LDEwOCwxMTEsMTE1LDExNywxMTQsMTAxLDMyLDExNiwxMTEsMzIsMTE3LAorICAgIDExNSwxMDEsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCisgICAgMTExLDExMSwxMDcsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE5LDEwNCwxMDUsOTksCisgICAgMTA0LDMyLDExOSwxMDUsMTA4LDEwOCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw5NywxMTAsCisgICAgMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMzIsMTE3LDExNSwxMDUsMTEwLDEwMywzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOCwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsMTE1LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LAorICAgIDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksOTcsMTA4LDEwOCwxMDEsCisgICAgMTAwLDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDExMSwxMTUsMTE3LDExNCwxMDEsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTEsMTEwLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDk5LDEwOCwxMTEsMTE1LDExNywxMTQsMTAxLDMyLDEwNSwxMTUsMzIsCisgICAgMTEwLDExMSwxMTYsMzIsOTcsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSw0NCwKKyAgICAzMiw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsCisgICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDEsMCwwLDAsNCwwLDAsMCwxOSwwLDAsMCwxMTUsNDYsCisgICAgMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTE1LDMzLDAsMTE2LAorICAgIDEsMCwxMDAsMSwwLDEwMCwyLDAsMTI0LDAsMCwxMzEsMSwxLDEzMCwxLAorICAgIDAsMTEwLDAsMCwxMzYsMCwwLDEyNCwwLDAsMTM2LDEsMCwxNDAsMSwwLAorICAgIDgzLDQxLDMsMTIyLDQ1LDgwLDk3LDExNiwxMDQsMzIsMTA0LDExMSwxMTEsMTA3LDMyLDEwMiwKKyAgICAxMTEsMTE0LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsMTA5LDk3LDk5LAorICAgIDEwNCwxMDUsMTEwLDEwMSwxMTQsMTIxLDQ2LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTIyLDMwLDExMSwxMTAsMTA4LDEyMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwKKyAgICAxMTQsMTA1LDEwMSwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsCisgICAgMTAxLDEwMCwxMTQsMzUsMCwwLDAsNDEsMiwxMTQsNDYsMCwwLDAsMTE0LDE1MywKKyAgICAwLDAsMCw0MSwxLDExNCwzNSwwLDAsMCw0MSwyLDExNCw4LDEsMCwKKyAgICAwLDExNCw5MSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMjQsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk1LDEwMiwxMTEsMTE0LDk1LAorICAgIDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzAsOCwwLDAsMTE1LDYsCisgICAgMCwwLDAsMCwyLDEyLDEsMjEsMSwxMjIsNTQsNzAsMTA1LDEwOCwxMDEsNzAsCisgICAgMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsNDYsCisgICAgNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsCisgICAgMTExLDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDExNCw0LDAsMCwwLDQxLDMsMTE0LDgsMSwwLDAsMTE0LDkxLDEsCisgICAgMCwwLDExNCw5OCwxLDAsMCwxMTQsNCwwLDAsMCw0MSwyLDExNCw4LAorICAgIDEsMCwwLDExNCw5MSwxLDAsMCwxMTQsNSwwLDAsMCwyMTgsOSwxMTIsCisgICAgOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMjAsOCwwLDAsMTE1LDQsMCwwLAorICAgIDAsMCwxMCwyMSw2LDEyMiwyMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5OSwxLDAsMCwwLAorICAgIDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwKKyAgICAwLDEzMSwxLDAsODMsNDEsMiw3OCwxMjIsMTYsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LAorICAgIDExMCwxMDAsMTAxLDExNCw0MCwxMjMsMzMsMTE0LDEyNSw0MSw0MSwyLDExNCw0NywwLDAsCisgICAgMCwxMTQsMzUsMCwwLDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwMSwwLDAsCisgICAgMCwzOCw4LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDE5LDcwLDEwNSwKKyAgICAxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LAorICAgIDk1LDQxLDE1LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsCisgICAgMCwwLDExNCw1OSwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDczLDEsMCwKKyAgICAwLDExNCwxNzIsMCwwLDAsMTE0LDExLDEsMCwwLDExNCwxNjUsMCwwLDAsCisgICAgMTE0LDg0LDEsMCwwLDExNCwxMCwxLDAsMCwxMTQsOTIsMSwwLDAsMTE0LAorICAgIDE1LDEsMCwwLDExNCw5OSwxLDAsMCwxMTQsMTAxLDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw4NSwxLDAsMCwxNTQsNywwLDAsMTE1LDIwLDAsMCwwLAorICAgIDEyLDcsNiwyLDEyLDE0LDEyLDQsNiwyLDEyLDEyLDEyLDUsMTUsNDUsCisgICAgMTIsMzEsMTgsMTgsMTE0LDg1LDEsMCwwLDk5LDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDQ2LAorICAgIDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwKKyAgICAxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsCisgICAgMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwKKyAgICA4Myw0MSw3LDIxOCwxOCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsCisgICAgNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMTIyLDM2LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LAorICAgIDMyLDEwOSw5NywxMTAsOTcsMTAzLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMSwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsCisgICAgMSwxMDAsMSwwLDgzLDQxLDIsMTIyLDI0LDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsCiAgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsCi0gICAgNDYsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMSwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEzMSwwLDAsMSwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDI0LAotICAgIDAsMCwwLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLDAsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSw5NSwxMDgsMTExLDk5LDEwNyw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwKLSAgICAxMTQsOTUsOTUsMTczLDUsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjgsCi0gICAgMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwKLSAgICAxMTAsMTE2LDEwMSwxMjAsMTE2LDQ2LDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwxMTQsOTUsOTUsOTksCi0gICAgNCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMSwwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwKLSAgICAwLDAsMSwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDYwLDAsMCwKLSAgICAwLDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTE0LDEwMSwxMDMsOTcsMTE0LDEwMCwxMDgsCi0gICAgMTAxLDExNSwxMTUsMzIsMTExLDEwMiwzMiw5NywxMTAsMTIxLDMyLDExNCw5NywxMDUsMTE1LDEwMSwKLSAgICAxMDAsMzIsMTAxLDEyMCw5OSwxMDEsMTEyLDExNiwxMDUsMTExLDExMCwxMTUsNDYsNzgsNDAsMiwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLAotICAgIDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDAsNCwwLAotICAgIDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsCi0gICAgMTAxLDEyMCw5OSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDksMCwwLDAsMTAxLDEyMCw5OSwKLSAgICA5NSwxMTgsOTcsMTA4LDExNywxMDEsMTE3LDEzLDAsMCwwLDEwMSwxMjAsOTksOTUsMTE2LAotICAgIDExNCw5Nyw5OSwxMDEsOTgsOTcsOTksMTA3LDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LAotICAgIDk1LDE3Nyw1LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI3LDAsMCwKLSAgICAwLDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwKLSAgICAxMDEsMTIwLDExNiw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNzgsNDAsNiwwLAotICAgIDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsCi0gICAgMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLAotICAgIDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICA3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDksMCwwLDAsCi0gICAgOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwKLSAgICAxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE4LDAsMCwwLDk1LDczLDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwxNjksNSwwLAotICAgIDAsMTE1LDYsMCwwLDAsMTYsMiw2LDIsMTIsNCwxMTcsMTgsMCwwLAotICAgIDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LAotICAgIDEwMSwxMjAsMTE2LDk5LDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAotICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDkxLDAsMCwwLDEyNCwxLDAsCi0gICAgMTA2LDAsMCwxMDAsMSwwLDEyNCwyLDAsMTAwLDIsMCwyNCwxMzEsMiwwLAotICAgIDEyNSwzLDAsMTE2LDEsMCwxMjQsMywwLDEzMSwxLDAsMTI0LDIsMCwxMDcsCi0gICAgMCwwLDExNCw1NSwwLDExNiwyLDAsMTAwLDMsMCwxMzEsMSwwLDEzMCwxLAotICAgIDAsMTEwLDAsMCwxMjQsMywwLDEwMCw0LDAsMjUsMTI1LDQsMCwxMjQsMCwKLSAgICAwLDExNCw4NywwLDEwMCw1LDAsMTA2LDMsMCwxMjQsNCwwLDEyNCwwLDAsCi0gICAgMTMxLDIsMCw4MywxMjQsNCwwLDgzLDQwLDYsMCwwLDAsMTE3LDUwLDAsCi0gICAgMCwwLDgyLDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDMyLDk3LDMyLDExNCwxMDEsMTA4LDk3LAotICAgIDExNiwxMDUsMTE4LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwKLSAgICAzMiwxMTYsMTExLDMyLDk3LDExMCwzMiw5Nyw5OCwxMTUsMTExLDEwOCwxMTcsMTE2LDEwMSwzMiwKLSAgICAxMTEsMTEwLDEwMSw0NiwxMTcsMSwwLDAsMCw0NiwxMDUsMSwwLDAsMCwxMTcsCi0gICAgNTAsMCwwLDAsOTcsMTE2LDExNiwxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCwzMiwxMTQsMTAxLAotICAgIDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTgsMTAxLAotICAgIDEyMSwxMTEsMTEwLDEwMCwzMiwxMTYsMTExLDExMiw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMDUsMCwwLDAsMCwxMTcsNSwwLDAsMCwKLSAgICAxMjMsMTI1LDQ2LDEyMywxMjUsNDAsNCwwLDAsMCwxMTcsNiwwLDAsMCwxMTQsCi0gICAgMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwxMTcsMTAsMCwKLSAgICAwLDAsODYsOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw2LDAsMCwKLSAgICAwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDAsNSwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMTE3LDUsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwxMTcsNCwwLDAsMCwKLSAgICA5OCwxMDUsMTE2LDExNSwxMTcsNCwwLDAsMCw5OCw5NywxMTUsMTAxLDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEzLDAsMCwwLDk1LDExNCwKLSAgICAxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxODIsNSwwLDAsMTE1LAotICAgIDEwLDAsMCwwLDAsMiwyMiwxLDE4LDEsMTUsMSwxMCwxLDExNywxMywKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsCi0gICAgOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMTEsMCwwLAotICAgIDAsNjcsMCwwLDAsMTE1LDEzOCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsCi0gICAgMTE1LDI4LDAsMTE2LDIsMCwxMDYsMywwLDEwMCwxLDAsMTE2LDQsMCwxMzEsCi0gICAgMiwwLDEsMTEwLDAsMCwxMjAsMTAzLDAsMTE2LDAsMCwxMDYsMSwwLDY4LAotICAgIDkzLDg4LDAsMTI1LDIsMCwxMTYsNSwwLDEzMSwwLDAsMTQzLDIzLDAsMSwKLSAgICAxMjQsMiwwLDEwNiw2LDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsMTI1LAotICAgIDMsMCw4NywxMDAsMiwwLDgxLDg4LDEyNCwzLDAsMTAwLDIsMCwxMDcsOSwKLSAgICAwLDExNCwzOCwwLDEyNCwwLDAsMTE2LDAsMCwxMDYsOCwwLDEwNyw3LDAsCi0gICAgMTE0LDEwOSwwLDEyNCwzLDAsODMsMTE2LDAsMCwxMDYsOCwwLDEyNCwwLDAsCi0gICAgMjUsMTA2LDksMCw4MywxMTMsMzgsMCwxMTMsMzgsMCw4NywxMDAsMiwwLDgzLAotICAgIDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMjMsMCwwLDAsNzAsMTA1LAotICAgIDExMCwxMDAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsNDYsMTE3LDIyLDAsMCwwLDExNSwxMjEsMTE1LDQ2LDEwOSwxMDEsCi0gICAgMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSwKLSAgICA3OCw0MCwxMCwwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsOSwKLSAgICAwLDAsMCwxMDksMTAxLDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsOSwwLDAsCi0gICAgMCw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsMTE3LDQsMCwwLDAsMTE5LAotICAgIDk3LDExNCwxMTAsMTE3LDEzLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsODcsOTcsCi0gICAgMTE0LDExMCwxMDUsMTEwLDEwMywxMTcsMTgsMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDExNywxMSwwLDAsCi0gICAgMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLAotICAgIDAsNzgsMTExLDExMCwxMDEsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMTE1LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LAotICAgIDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsCi0gICAgMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLAotICAgIDEwMSwxMTQsMTE3LDYsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCw5NSwxMDIsCi0gICAgMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTkxLDUsMCwwLDExNSwyMCwKLSAgICAwLDAsMCwwLDIsOSwxLDE5LDEsMTYsMSwxMCwxLDI0LDEsMTIsCi0gICAgMiwxNSwxLDQsMiwyMSwyLDExNywxMiwwLDAsMCw5NSwxMDIsMTA1LDExMCwKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMywwLDAsMCwwLDAsMCwKLSAgICAwLDQsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMTk0LDAsCi0gICAgMCwwLDExNiwwLDAsMTI0LDAsMCwxMTYsMSwwLDEzMSwyLDAsMTE1LDQ1LAotICAgIDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMjQsMCwwLAotICAgIDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsCi0gICAgMiwwLDEwMCwyLDAsMTA3LDAsMCwxMTQsNzIsMCwxMTYsNSwwLDEwMCwzLAotICAgIDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDEsMCwxMTQsMTU2LDAsCi0gICAgMTE2LDAsMCwxMjQsMSwwLDExNiwxLDAsMTMxLDIsMCwxMTUsMTA4LDAsMTE2LAotICAgIDIsMCwxMDAsNCwwLDEzMSwxLDAsMTMwLDEsMCwxMTMsMTU2LDAsMTI0LDEsCi0gICAgMCwxMTYsNiwwLDEwNiw3LDAsMTA3LDcsMCwxMTQsMTU2LDAsMTAwLDUsMCwKLSAgICAxMjUsMywwLDExNiw4LDAsMTI0LDMsMCwxMDYsMywwLDEyNCwxLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEzLDE1NiwwLDExMCwwLDAsMTI0LDAsCi0gICAgMCwxMiwxMTQsMTkwLDAsMTI0LDIsMCwxMDAsMiwwLDEwNywyLDAsMTE0LDE5MCwKLSAgICAwLDExNiw1LDAsMTAwLDYsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwKLSAgICAxMDAsNywwLDgzLDQwLDgsMCwwLDAsMTE3LDI4LDAsMCwwLDg2LDEwMSwKLSAgICAxMTQsMTA1LDEwMiwxMjEsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDExNSwzMiw5NywKLSAgICAxMTQsMTAxLDMyLDM0LDExNSw5NywxMTAsMTAxLDM0LDQ2LDExNywzMSwwLDAsMCwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMDksMTE3LDExNSwxMTYsMzIsCi0gICAgOTgsMTAxLDMyLDExNSwxMTYsMTE0LDQ0LDMyLDExMCwxMTEsMTE2LDMyLDEyMywxMjUsMTA1LDAsCi0gICAgMCwwLDAsMTE3LDE4LDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTA5LDExNywKLSAgICAxMTUsMTE2LDMyLDk4LDEwMSwzMiw2Miw2MSwzMiw0OCwxMTcsMzEsMCwwLDAsOTUsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDExMCwxMTEsMTE2LDMyLDExNSwKLSAgICAxMDEsMTE2LDMyLDExNiwxMTEsMzIsOTcsMzIsMTE1LDExNiwxMTQsMTA1LDExMCwxMDMsMTE3LDYxLAotICAgIDAsMCwwLDgwLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMjMsMzMsMTE0LDEyNSwzMiwxMTAsMTExLDExNiwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLAotICAgIDQ0LDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTIsMTAxLDExNCwxMDIsMTExLDExNCwxMDksCi0gICAgMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDExNywxNywwLDAsMCw2OSwxMDksMTEyLDExNiwxMjEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNzgsNDAsOSwwLDAsMCwxMTcsMTAsMCwwLAotICAgIDAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwxMTcsMywwLDAsMCwKLSAgICAxMTUsMTE2LDExNCwxMTcsOSwwLDAsMCw4NCwxMjEsMTEyLDEwMSw2OSwxMTQsMTE0LDExMSwKLSAgICAxMTQsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsNCwwLDAsCi0gICAgMCwxMTYsMTIxLDExMiwxMDEsMTE3LDEwLDAsMCwwLDg2LDk3LDEwOCwxMTcsMTAxLDY5LAotICAgIDExNCwxMTQsMTExLDExNCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDExLDAsMCwwLDgzLDEyMSwxMTUsCi0gICAgMTE2LDEwMSwxMDksNjksMTE0LDExNCwxMTEsMTE0LDQwLDQsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDExNyw1LDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDMsMCwwLAotICAgIDAsMTA5LDExNSwxMDMsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSw5OSwxMDQsMTAxLAotICAgIDk5LDEwNywyMDgsNSwwLDAsMTE1LDI0LDAsMCwwLDAsMiwxNSwxLDMwLAotICAgIDEsMTIsMSwxNSwxLDYsMSwxNSwxLDE1LDEsMTUsMSw2LDIsMjcsCi0gICAgMSwxOSwxLDExNywxMywwLDAsMCw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LAotICAgIDk5LDEwNCwxMDEsOTksMTA3LDExNywyMCwwLDAsMCw3OCwxMTEsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEyMywzMywxMTQsMTI1LDk5LDIsCi0gICAgMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDI3LDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwxMiwyLDAsMCwxMDAsMCwwLDEyNSwyLDAsMTI0LDAsCi0gICAgMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDEsMCwxMDAsMiwwLDI1LDEyNSwzLAotICAgIDAsMTI0LDMsMCwxMTQsMTc4LDAsMTI0LDMsMCwxMTYsMiwwLDEwNiwzLDAsCi0gICAgMTA3LDcsMCwxMTQsNjIsMCwxMTYsNCwwLDEyNCwxLDAsMTI0LDMsMCwxMzEsCi0gICAgMiwwLDEsMTEwLDAsMCwxMjQsMCwwLDExNiwyLDAsMTA2LDMsMCwxMDcsCi0gICAgNiwwLDExNCw4OCwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMCwwLDI1LDgzLAotICAgIDExNiwyLDAsMTA2LDMsMCwxMjQsMywwLDI1LDEyNSw0LDAsMTIxLDEzLDAsCi0gICAgMTI0LDQsMCwxMDYsNSwwLDEyNSwyLDAsODcsMTEzLDE3OCwwLDQsMTE2LDYsCi0gICAgMCwxMDcsMTAsMCwxMTQsMTc0LDAsMSwxLDEsMTE2LDcsMCwxMDAsMywwLAotICAgIDIzLDEwNiw4LDAsMTI0LDAsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDUsMCwKLSAgICAxMTYsOSwwLDEyNCw1LDAsMTAwLDQsMCwxMjQsMCwwLDEzMSwxLDEsMTMwLAotICAgIDEsMCw4OSwxMTMsMTc4LDAsODgsMTEwLDAsMCwxMTYsMTAsMCwxMjQsMCwwLAotICAgIDEyNCwyLDAsMTMxLDIsMCwxMjUsNiwwLDEyNCw2LDAsMTAwLDAsMCwxMDcsCi0gICAgOCwwLDExNCwyNTAsMCwxMTYsOSwwLDExNiw3LDAsMTA2LDgsMCwxMjQsMCwKLSAgICAwLDEzMSwxLDAsMTAwLDQsMCwxMjQsMCwwLDEzMSwxLDEsMTI1LDcsMCwKLSAgICAxMDAsMTAsMCwxMjQsNywwLDk1LDEyLDAsMTI0LDcsMCwxMzAsMSwwLDExMCwKLSAgICA0NywwLDEyNCwwLDAsMTE2LDIsMCwxMDYsMywwLDEwNyw3LDAsMTE0LDQxLAotICAgIDEsMTI0LDYsMCwxMDYsMTMsMCwxMjQsMCwwLDEzMSwxLDAsMSwxMTYsMTQsCi0gICAgMCwxMDAsNSwwLDEyNCwwLDAsMTI0LDYsMCwxMzEsMywwLDEsMTEwLDAsCi0gICAgMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDAsMCwyNSwxMjUsOCwwLDEyNCwzLAotICAgIDAsMTE0LDEwNSwxLDExNiwyLDAsMTA2LDMsMCwxMjQsMywwLDI1LDEyNSw0LAotICAgIDAsMTE2LDE1LDAsMTI0LDQsMCwxMjQsMCwwLDEwNiwxLDAsMTAwLDEsMCwKLSAgICAxMzEsMSwwLDEwMCw2LDAsMjUsMTI0LDgsMCwxMzEsMywwLDEsMTEwLDAsCi0gICAgMCwxMTYsMTYsMCwxMjQsOCwwLDEwMCw3LDAsMTAwLDAsMCwxMzEsMywwLAotICAgIDEwMCwwLDAsMTA3LDgsMCwxMTQsMjEyLDEsMTIxLDU5LDAsMTI0LDgsMCwxMDYsCi0gICAgMTcsMCwxMjQsOCwwLDk1LDE4LDAsMTE2LDE5LDAsMTI0LDgsMCwxMDAsOCwKLSAgICAwLDEzMSwyLDAsMTE1LDE4NywxLDEyNCw4LDAsMTA2LDE4LDAsMTA2LDEsMCwKLSAgICAxMDAsMSwwLDEzMSwxLDAsMTAwLDIsMCwyNSwxMjQsOCwwLDk1LDE4LDAsCi0gICAgMTEwLDAsMCw4NywxMTMsMjEyLDEsNCwxMTYsNiwwLDEwNywxMCwwLDExNCwyMDgsCi0gICAgMSwxLDEsMSw4OSwxMTMsMjEyLDEsODgsMTEwLDAsMCwxMTYsMTksMCwxMjQsCi0gICAgOCwwLDEwMCw5LDAsMTMxLDIsMCwxMTUsOCwyLDEyMSwxMywwLDEyNCw2LAotICAgIDAsMTI0LDgsMCw5NSwyMCwwLDg3LDExMyw4LDIsNCwxMTYsNiwwLDEwNywKLSAgICAxMCwwLDExNCw0LDIsMSwxLDEsODksMTEzLDgsMiw4OCwxMTAsMCwwLAotICAgIDEyNCw4LDAsODMsNDAsMTEsMCwwLDAsNzgsMTE3LDEsMCwwLDAsNDYsCi0gICAgMTA1LDAsMCwwLDAsMTE3LDIxLDAsMCwwLDU5LDMyLDEyMywxMjUsMzIsMTA1LAotICAgIDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LAotICAgIDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDE4LDAsMCwwLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDMyLDEyMywzMywxMTQsMTI1LDMyLDM1LDMyLDEyMywzMywxMTQsMTI1LDEwNSwKLSAgICAyLDAsMCwwLDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsCi0gICAgOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsCi0gICAgODQsNDAsMjEsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LAotICAgIDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywzLAotICAgIDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNSwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwKLSAgICAxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE3LDE0LDAsCi0gICAgMCwwLDY1LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDgsMCwwLDAsOTUsNjksODIsODIsOTUsNzcsODMsNzEsMTE3LDYsMCwKLSAgICAwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEyLDAsMCwwLDk1LDEwMiwxMDUsCi0gICAgMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsNCwwLDAsMCw4NCwxMTQsCi0gICAgMTE3LDEwMSwxMTcsMTAsMCwwLDAsOTUsMTEwLDExMSwxMTYsOTUsMTAyLDExMSwxMTcsMTEwLAotICAgIDEwMCwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwKLSAgICAxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNyw3LDAsMCwwLDExNSwxMDEsMTE2LDk3LDExNiwKLSAgICAxMTYsMTE0LDExNyw3LDAsMCwwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMSwwLDAsMCwKLSAgICA5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMTE3LDcsMCwwLDAsCi0gICAgMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSw5NSw0MCw5LDAsMCwwLDExNyw0LDAsMCwwLAotICAgIDExMCw5NywxMDksMTAxLDExNyw3LDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDExMiw5NywKLSAgICAxMTQsMTAxLDExMCwxMTYsMTE3LDEzLDAsMCwwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDMsMCwwLDAsMTA5LDExNSwxMDMsMTE3LDYsCi0gICAgMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMywwLDAsMCwxMDEsMTIwLAotICAgIDk5LDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDIzLDAsMCwwLDk1LDEwMiwxMDUsCi0gICAgMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LDExMSwKLSAgICA5OSwxMDcsMTAxLDEwMCwyMjcsNSwwLDAsMTE1LDc2LDAsMCwwLDAsMSw2LAotICAgIDEsMTksMSw2LDEsMTUsMSwxNiwyLDE1LDEsMTEsMiwxMywxLDMsCi0gICAgMSwxMywxLDEzLDEsMjIsMSwyNiwxLDE1LDEsMTIsMSwyNywzLDksCi0gICAgMSw5LDEsMTUsMiwxMywxLDE5LDIsMTMsMSw2LDIsMTMsMSwzMiwKLSAgICAyLDI0LDEsMywxLDEyLDEsMTUsMSwzMiwxLDEzLDEsOCwyLDE1LAotICAgIDEsMywxLDEzLDEsMTMsMSw4LDEsMTE3LDIzLDAsMCwwLDk1LDEwMiwKLSAgICAxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LAotICAgIDExMSw5OSwxMDcsMTAxLDEwMCw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLAotICAgIDAsMCwxOCwwLDAsMCw2NywwLDAsMCwxMTUsNzUsMCwwLDAsMTIyLAotICAgIDE2LDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDIsMCw4NywxMDAsCi0gICAgMSwwLDExNiwxLDAsMTA2LDIsMCwxMzEsMCwwLDEsODgsMTI0LDIsMCwKLSAgICAxMDYsMywwLDEzMSwwLDAsMSwxMjIsMTcsMCwxMTYsNCwwLDEyNCwwLDAsCi0gICAgMTI0LDEsMCwxMzEsMiwwLDgzLDg3LDEwMCwxLDAsMTI0LDIsMCwxMDYsNSwKLSAgICAwLDEzMSwwLDAsMSw4OCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDU0LDAsMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDk3LDExMCwxMDAsMzIsMTA4LDExMSw5NywKLSAgICAxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLAotICAgIDEwMCwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0Niw3OCw0MCw2LDAsMCwwLAotICAgIDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSwxMDgsMTExLDk5LDEwNywxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsCi0gICAgMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LAotICAgIDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsMjMsMCwwLDAsCi0gICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LAotICAgIDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSwKLSAgICA5NywxMTUsMTAxLDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMTE3LDQsMCwKLSAgICAwLDAsMTA4LDExMSw5OSwxMDcsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTQsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMjEsNiwwLDAsMTE1LDE0LDAsMCwwLDAsMiwKLSAgICAzLDEsMTYsMiwxMSwxLDEwLDEsMywxLDE3LDIsMTE3LDE0LDAsMCwKLSAgICAwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk5LAotICAgIDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDQsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDE3MiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTI0LAotICAgIDEsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMjQsMiwwLDEwMCwxLDAsMTA3LAotICAgIDQsMCwxMTQsNDksMCwxMTYsMSwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwKLSAgICAwLDEzMSwzLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwyLDAsMTA2LDMsMCwKLSAgICAxMzEsMCwwLDEsMTI0LDAsMCwxMTYsNCwwLDEwNiw1LDAsMTA3LDcsMCwKLSAgICAxMTQsODcsMCwxMTYsNiwwLDEyNCwwLDAsMTE2LDcsMCwxMzEsMiwwLDgzLAotICAgIDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDI1LDEyNSwzLDAsMTI0LDMsMCwKLSAgICAxMDAsNCwwLDEwNyw4LDAsMTE0LDE1OCwwLDExNiwyLDAsMTA2LDksMCwxMzEsCi0gICAgMCwwLDEsMTAwLDIsMCwxMDYsMTAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LAotICAgIDQsMCwxMTYsMTEsMCwxMjQsNCwwLDEwMCwzLDAsMTI0LDAsMCwxMzEsMSwKLSAgICAxLDEzMCwxLDAsMTEwLDAsMCwxMTYsMTIsMCwxMjQsMCwwLDEzMSwxLDAsCi0gICAgMSwxMjQsMywwLDgzLDQwLDUsMCwwLDAsMTE3LDUwLDEsMCwwLDczLAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCw5NywxMTUsMTAxLAotICAgIDEwMCwzMiwxMTEsMTEwLDMyLDEwNSwxMTYsMTE1LDMyLDExMCw5NywxMDksMTAxLDQ0LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKLSAgICA5NywxMDgsMTA4LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLAotICAgIDMyLDEwOSw5NywxMDAsMTAxLDMyLDEwMiwxMTQsMTExLDEwOSw0NCwzMiw5NywxMTAsMTAwLDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsOTcsMTAwLDEwNiwxMTcsMTE1LDExNiwKLSAgICAxMDksMTAxLDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCi0gICAgMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwKLSAgICAxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTE0LDEwMSw5NywxMTYsMTAxLDExNSwxMTYsCi0gICAgMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiwxMDAsMTAxLDExMCwxMTEsMTA5LDEwNSwxMTAsOTcsCi0gICAgMTE2LDExMSwxMTQsMzIsMTExLDEwMiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsOTcsCi0gICAgMTA4LDEwNSwxMTYsMTIxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMTYsMTE5LDEwMSwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LAotICAgIDExMCwxMDAsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsNDYsMzIsODQsCi0gICAgMTA0LDEwNSwxMTUsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDEsMTE1LDMyLDExNSwxMDEsMTE2LAotICAgIDExNiwxMDUsMTEwLDEwMywzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsCi0gICAgMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDMyLDEwMCwxMDUsMTAwLDMyLDExMCwxMTEsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwNSwwLDAsMCwwLDExNyw0MCwwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiwxMTEsMTAyLDMyLDEyMywxMjUsMzIsMTA0LDk3LDEwOCwxMTYsMTAxLDEwMCw1OSwzMiwKLSAgICA3OCwxMTEsMTEwLDEwMSwzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw3OCw0MCwxMywwLAotICAgIDAsMCwxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSw5OSwKLSAgICAxMDQsMTAxLDk5LDEwNywxMTcsMTMsMCwwLDAsOTUsMTE0LDEwMSwxMTUsMTExLDEwOCwxMTgsCi0gICAgMTAxLDk1LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywKLSAgICAxMiwwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDk1LDEwOCwxMTEsOTksMTA3LAotICAgIDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNSwxMTcsMTQsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LAotICAgIDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTE3LDExLDAsMCwwLDk1LDEwMyw5OSwxMDAsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsCi0gICAgMTE3LDEyLDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksCi0gICAgMTA3LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDExLDAsMCwKLSAgICAwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywxOSwwLDAsCi0gICAgMCw5NSwxMDgsMTExLDk5LDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNyw1LAotICAgIDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDYsMCwwLDAsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDcsMCwwLDAsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzNCw2LDAsMCwxMTUsCi0gICAgMjgsMCwwLDAsMCw5LDE2LDEsMTIsMSwyMSwxLDEwLDEsMTUsMSwKLSAgICAxMywxLDEzLDEsMTIsMSwxMCwxLDYsMSw5LDEsMjEsMSwxMCwxLAotICAgIDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDE3LDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSwyNTQsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLAotICAgIDEwMCwxLDAsMTMxLDIsMCwxMTQsMjUwLDAsMTAwLDIsMCwxMjQsMSwwLDEwNywKLSAgICA2LDAsMTE0LDg5LDAsMTE2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDEsCi0gICAgMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDIsMCwxMzEsMSwwLDEsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEwMCwzLDAsMTMxLDIsMCwxMTQsODksMCwxMjQsMSwwLAotICAgIDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwxLDAsMSwxMTMsODksMCwKLSAgICAxMTAsMCwwLDEyMCwxNTgsMCwxMjQsMSwwLDY4LDkzLDE0NywwLDEyNSwzLDAsCi0gICAgMTE2LDAsMCwxMjQsMCwwLDEyNCwzLDAsMTMxLDIsMCwxMTUsOTYsMCwxMDAsCi0gICAgNCwwLDEwNiw1LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwzLDAsMTMxLDIsCi0gICAgMCwxMjUsNCwwLDEyMSwxNywwLDExNiw3LDAsMTI0LDIsMCwxMjQsNCwwLAotICAgIDEzMSwyLDAsMSw4NywxMTMsMjQzLDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwKLSAgICAyMzksMCwxLDEyNSw1LDAsMSwxMjIsNTAsMCwxMTYsOSwwLDEyNCw1LDAsCi0gICAgMTAwLDUsMCwxMDAsNywwLDEzMSwzLDAsMTE0LDIxOCwwLDEyNCw1LDAsMTA2LAotICAgIDExLDAsMTI0LDQsMCwxMDcsMiwwLDExNCwyMTgsMCwxMTksOTYsMCwxMTMsMjE4LAotICAgIDAsMTEwLDAsMCwxMzAsMCwwLDg3LDg5LDEwMCw2LDAsMTAwLDYsMCwxMjUsCi0gICAgNSwwLDEyNiw1LDAsODgsMTEzLDI0MywwLDg4LDExMyw5NiwwLDExMyw5NiwwLAotICAgIDg3LDExMCwwLDAsMTI0LDAsMCw4Myw0MCw4LDAsMCwwLDExNywyMzgsMCwKLSAgICAwLDAsNzAsMTA1LDEwMywxMTcsMTE0LDEwMSwzMiwxMTEsMTE3LDExNiwzMiwxMTksMTA0LDk3LAotICAgIDExNiwzMiw5NSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSwzMiwxMTUsMTA0LDExMSwKLSAgICAxMTcsMTA4LDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw4NCwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDMyLDExMiw5NywxMTQsCi0gICAgOTcsMTA5LDEwMSwxMTYsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDk3LDMyLDk5LDk3LDEwOCwxMDgsCi0gICAgOTcsOTgsMTA4LDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDk3LDEwNywxMDEsMTE1LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiw0NiwzMiw3MywxMTYsMzIsMTA1LDExNSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMTAwLDMyLDExNiwxMTEsMzIsMTAwLDEwMSw5OSwxMTEsMTE3LDExMiwxMDgsMTAxLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgOTcsMTE1LDExNSwxMTcsMTA5LDEwNSwxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsMzksMTE1LDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLAotICAgIDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMDUsCi0gICAgMTE1LDMyLDEwMCwxMDEsMTE1LDEwNSwxMTQsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMTcsMSwwLAotICAgIDAsMCw0MiwxMTcsNywwLDAsMCw5NSw5NSw5NywxMDgsMTA4LDk1LDk1LDExNywKLSAgICA1LDAsMCwwLDEyMywxMjUsNDYsMTIzLDEyNSwxMTcsMTAsMCwwLDAsOTUsMTEwLAotICAgIDExMSwxMTYsOTUsMTAyLDExMSwxMTcsMTEwLDEwMCw3OCw3MCw0MCwxMiwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNyw0LDAsMCwwLAotICAgIDEwOCwxMDUsMTE1LDExNiwxMTcsNiwwLDAsMCwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMTcsCi0gICAgNiwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSw5NywxMDgsMTA4LDk1LDk1LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywKLSAgICAxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDI1LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsCi0gICAgOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNywxMSwwLDAsCi0gICAgMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNywwLDAsCi0gICAgMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsCi0gICAgMTE1LDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCw2LDAsMCwwLAotICAgIDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsOTUsMTE3LDEsMCwwLDAsMTIwLDExNyw5LDAsMCwwLDEwMiwKLSAgICAxMTQsMTExLDEwOSw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMywwLDAsMCwxMDEsMTIwLDk5LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LAotICAgIDExNiw1OCw2LDAsMCwxMTUsMzQsMCwwLDAsMCwxMCwxNSwxLDEyLDEsCisgICAgNDYsNzgsNDEsMiwxMTQsMTA2LDAsMCwwLDExNCwzLDEsMCwwLDQxLDEsCisgICAgMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCw3NSwwLDAsMCw0OCw4LDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDIsMTIyLDI4LDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LAorICAgIDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiw0Niw5NSw5NSwxMDEsMTEwLDExNiwxMDEsMTE0LAorICAgIDk1LDk1LDk5LDQsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDEsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDE0LDAsMCwwLDExNiwwLDAsMTA2LAorICAgIDEsMCwxMzEsMCwwLDEsMTAwLDEsMCw4Myw0MSwyLDEyMiw2MCw4MiwxMDEsCisgICAgMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNCwxMDEsMTAzLDk3LDExNCwxMDAsMTA4LDEwMSwxMTUsMTE1LAorICAgIDMyLDExMSwxMDIsMzIsOTcsMTEwLDEyMSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDMyLDEwMSwKKyAgICAxMjAsOTksMTAxLDExMiwxMTYsMTA1LDExMSwxMTAsMTE1LDQ2LDc4LDQxLDIsMTE0LDEwNiwwLAorICAgIDAsMCwxMTQsMTA3LDAsMCwwLDQxLDQsMTE0LDcxLDAsMCwwLDkwLDgsCisgICAgMTAxLDEyMCw5OSw5NSwxMTYsMTIxLDExMiwxMDEsOTAsOSwxMDEsMTIwLDk5LDk1LDExOCw5NywKKyAgICAxMDgsMTE3LDEwMSw5MCwxMywxMDEsMTIwLDk5LDk1LDExNiwxMTQsOTcsOTksMTAxLDk4LDk3LAorICAgIDk5LDEwNywxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsODEsMCwwLDAsNTIsOCwwLDAsMTE1LDIsMCwwLDAsMCwKKyAgICAyLDEyMiwyNyw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLAorICAgIDExMCwxMTYsMTAxLDEyMCwxMTYsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLAorICAgIDYsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsCisgICAgMTE0LDU5LDAsMCwwLDExNCw3NSwwLDAsMCwxMTQsODEsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDEwMCwxLDAsMCw0NCw4LDAsMCwxMTUsNiwwLDAsCisgICAgMCwxMiwyLDYsMiwxMiw0LDExNCwxMDAsMSwwLDAsOTksMywwLDAsCisgICAgMCwwLDAsMCwwLDUsMCwwLDAsNCwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsOTEsMCwwLDAsMTI0LDEsMCwxMDYsMCwwLDEwMCwxLDAsMTI0LAorICAgIDIsMCwxMDAsMiwwLDI0LDEzMSwyLDAsMTI1LDMsMCwxMTYsMSwwLDEyNCwKKyAgICAzLDAsMTMxLDEsMCwxMjQsMiwwLDEwNywwLDAsMTE0LDU1LDAsMTE2LDIsCisgICAgMCwxMDAsMywwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwzLDAsCisgICAgMTAwLDQsMCwyNSwxMjUsNCwwLDEyNCwwLDAsMTE0LDg3LDAsMTAwLDUsMCwKKyAgICAxMDYsMywwLDEyNCw0LDAsMTI0LDAsMCwxMzEsMiwwLDgzLDEyNCw0LDAsCisgICAgODMsNDEsNiwxMjIsNTAsODIsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsMzIsOTcsMzIsMTE0LAorICAgIDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCwKKyAgICA5NywxMDksMTAxLDMyLDExNiwxMTEsMzIsOTcsMTEwLDMyLDk3LDk4LDExNSwxMTEsMTA4LDExNywKKyAgICAxMTYsMTAxLDMyLDExMSwxMTAsMTAxLDQ2LDExNCwxMTYsMCwwLDAsMTE0LDI5LDAsMCwKKyAgICAwLDEyMiw1MCw5NywxMTYsMTE2LDEwMSwxMDksMTEyLDExNiwxMDEsMTAwLDMyLDExNCwxMDEsMTA4LAorICAgIDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw5OCwxMDEsMTIxLAorICAgIDExMSwxMTAsMTAwLDMyLDExNiwxMTEsMTEyLDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTEyLDk3LAorICAgIDk5LDEwNyw5NywxMDMsMTAxLDExNCw4NCwwLDAsMCwxMjIsNSwxMjMsMTI1LDQ2LDEyMywKKyAgICAxMjUsNDEsNCwxMTQsMzQsMCwwLDAsMTE0LDMxLDAsMCwwLDExNCwxMzMsMCwKKyAgICAwLDAsMTE0LDQ3LDAsMCwwLDQxLDUsMTE0LDY3LDAsMCwwLDIxOCw3LAorICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwyMTgsNSwxMDgsMTAxLDExOCwxMDEsMTA4LDkwLDQsCisgICAgOTgsMTA1LDExNiwxMTUsOTAsNCw5OCw5NywxMTUsMTAxLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMyw5NSwxMTQsMTAxLDExNSwxMTEsCisgICAgMTA4LDExOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsNTcsOCwwLDAsMTE1LDEwLDAsMCwKKyAgICAwLDAsMiwyMiwxLDE4LDEsMTUsMSwxMCwxLDExNCwxMDMsMSwwLDAsCisgICAgOTksMywwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsNDcsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLAorICAgIDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDEyNSwzLDAsMTI0LDMsMCwxMDAsCisgICAgMCwwLDEwNyw4LDAsMTE0LDM0LDAsMTAwLDAsMCw4MywxMTYsMSwwLDEyNCwKKyAgICAxLDAsMTI0LDMsMCwxMzEsMiwwLDgzLDQxLDEsNzgsNDEsMiwxMTQsMTEsCisgICAgMSwwLDAsMTE0LDE3MywwLDAsMCw0MSw0LDExNCw3NiwxLDAsMCwxMTQsCisgICAgNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk1LAorICAgIDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5NSwxMDgsMTAxLDEwMyw5Nyw5OSwxMjEsCisgICAgNjYsOCwwLDAsMTE1LDgsMCwwLDAsMCwzLDE4LDEsMTIsMSw0LAorICAgIDEsMTE0LDEwNCwxLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsOSwKKyAgICAwLDAsMCwyNywwLDAsMCw2NywwLDAsMCwxMTUsMzQsMSwwLDAsCisgICAgMTE2LDAsMCwxMDYsMSwwLDExNSwyOCwwLDExNiwyLDAsMTA2LDMsMCwxMDAsCisgICAgMSwwLDExNiw0LDAsMTMxLDIsMCwxLDExMCwwLDAsMTI0LDAsMCwxMTYsCisgICAgMCwwLDEwNiw1LDAsMTA3LDYsMCwxMjUsMywwLDEyMCwyNDAsMCwxMTYsMCwKKyAgICAwLDEwNiwxLDAsNjgsOTMsMjI1LDAsMTI1LDQsMCwxMTYsNiwwLDEzMSwwLAorICAgIDAsMTQzLDkzLDAsMSwxMjEsMTMsMCwxMjQsNCwwLDEwNiw3LDAsMTI1LDUsCisgICAgMCw4NywxMTAsNTQsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDEzOCwwLDEsCisgICAgMSwxLDExNiw5LDAsMTI0LDQsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDMsCisgICAgMCwxMjUsNiwwLDEyNCw2LDAsMTAwLDIsMCwxMDcsOCwwLDExNCwxMzQsMCwKKyAgICAxMTksNTMsMCwxMTAsMCwwLDg5LDExMCwxOSwwLDg4LDEyNCw1LDAsMTI0LDAsCisgICAgMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDMsMCwxMjUsNiwwLDg3LDEwMCwyLAorICAgIDAsODEsODgsMTI0LDYsMCwxMDAsMiwwLDEwNyw5LDAsMTE0LDUzLDAsMTI0LAorICAgIDMsMCwxMiwxMTQsMTUsMSwxMjQsMCwwLDExNiwwLDAsMTA2LDUsMCwxMDcsCisgICAgNiwwLDExNCwxNSwxLDExNiwwLDAsMTA2LDUsMCwxMjQsMCwwLDI1LDEyNSwKKyAgICA3LDAsMTIxLDEzLDAsMTI0LDcsMCwxMDYsMTAsMCwxMjUsOCwwLDg3LDExMCwKKyAgICAyMiwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsMjQ3LDAsMSwxLDEsMTI0LAorICAgIDYsMCw4Myw4OSwxMTMsMTksMSw4OCwxMjQsOCwwLDEwMCwyLDAsMTA3LDgsCisgICAgMCwxMTQsOCwxLDEyNCw2LDAsODMsMTI0LDgsMCw4MywxMTMsMjIsMSwxMjQsCisgICAgNiwwLDgzLDExMyw1MywwLDExMyw1MywwLDg3LDEwMCwyLDAsODMsMTAwLDIsCisgICAgMCw4Myw0MSwzLDEyMiwyMyw3MCwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMjIsMjIsMTE1LAorICAgIDEyMSwxMTUsNDYsMTA5LDEwMSwxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwKKyAgICAxMDEsMTA5LDExMiwxMTYsMTIxLDc4LDQxLDExLDExNCw3LDAsMCwwLDIxOCw5LDEwOSwKKyAgICAxMDEsMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LDExNCwxNjYsMCwwLDAsMTE0LDE2NywwLAorICAgIDAsMCwxMTQsMTY4LDAsMCwwLDExNCw3MywwLDAsMCwxMTQsMTAwLDEsMCwKKyAgICAwLDExNCwxMCwxLDAsMCwxMTQsMjA5LDAsMCwwLDExNCwxMDQsMSwwLDAsCisgICAgMTE0LDIwOCwwLDAsMCw0MSw5LDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLAorICAgIDAsMTE0LDksMSwwLDAsOTAsOSwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywKKyAgICAxMDAsMTE0LDc2LDEsMCwwLDExNCwxMCwxLDAsMCwxMTQsMTc3LDAsMCwwLAorICAgIDExNCwxNzksMCwwLDAsMTE0LDIwOCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsOTUsMTAyLDEwNSwxMTAsMTAwLAorICAgIDk1LDExNSwxMTIsMTAxLDk5LDc1LDgsMCwwLDExNSw0OCwwLDAsMCwwLDIsCisgICAgOSwxLDE5LDQsMTUsMSwxNiwxLDEwLDEsMywxLDEzLDEsMTMsMSwKKyAgICAxOCwxLDEyLDEsMTEsMiwyNCwxLDEyLDIsMjIsMSwxMywxLDMsMSwKKyAgICAxMywxLDEzLDQsOSwyLDEyLDEsNCwyLDcsMiwxMSwyLDExNCwxMDYsCisgICAgMSwwLDAsOTksMywwLDAsMCwwLDAsMCwwLDQsMCwwLDAsCisgICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsMTk0LDAsMCwwLDExNiwwLDAsCisgICAgMTI0LDAsMCwxMTYsMSwwLDEzMSwyLDAsMTE1LDQ1LDAsMTE2LDIsMCwxMDAsCisgICAgMSwwLDEwNiwzLDAsMTE2LDQsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDEsCisgICAgMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMiwwLDEwMCwyLDAsCisgICAgMTA3LDAsMCwxMTQsNzIsMCwxMTYsNSwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsCisgICAgMSwwLDExMCwwLDAsMTI0LDEsMCwxMTQsMTU2LDAsMTE2LDAsMCwxMjQsMSwKKyAgICAwLDExNiwxLDAsMTMxLDIsMCwxMTUsMTA4LDAsMTE2LDIsMCwxMDAsNCwwLAorICAgIDEzMSwxLDAsMTMwLDEsMCwxMTMsMTU2LDAsMTI0LDEsMCwxMTYsNiwwLDEwNiwKKyAgICA3LDAsMTA3LDcsMCwxMTQsMTU2LDAsMTAwLDUsMCwxMjUsMywwLDExNiw4LAorICAgIDAsMTI0LDMsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsMCwxMzEsMSwwLAorICAgIDEzMCwxLDAsMTEzLDE1NiwwLDExMCwwLDAsMTI0LDAsMCwxMiwxMTQsMTkwLDAsCisgICAgMTI0LDIsMCwxMDAsMiwwLDEwNywyLDAsMTE0LDE5MCwwLDExNiw1LDAsMTAwLAorICAgIDYsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMDAsNywwLDgzLDQxLAorICAgIDgsMTIyLDI4LDg2LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwKKyAgICAxMTAsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDM0LDExNSw5NywxMTAsMTAxLDM0LDQ2LDEyMiwKKyAgICAzMSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMDksMTE3LDExNSwKKyAgICAxMTYsMzIsOTgsMTAxLDMyLDExNSwxMTYsMTE0LDQ0LDMyLDExMCwxMTEsMTE2LDMyLDEyMywxMjUsCisgICAgMTE0LDg0LDAsMCwwLDEyMiwxOCwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwOSwxMTcsMTE1LAorICAgIDExNiwzMiw5OCwxMDEsMzIsNjIsNjEsMzIsNDgsMTIyLDMxLDk1LDk1LDExMiw5Nyw5OSwKKyAgICAxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTAsMTExLDExNiwzMiwxMTUsMTAxLDExNiwzMiwxMTYsCisgICAgMTExLDMyLDk3LDMyLDExNSwxMTYsMTE0LDEwNSwxMTAsMTAzLDEyMiw2MSw4MCw5NywxMTQsMTAxLAorICAgIDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsMTEwLAorICAgIDExMSwxMTYsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCw0NCwzMiw5OSw5NywxMTAsMTEwLDExMSwKKyAgICAxMTYsMzIsMTEyLDEwMSwxMTQsMTAyLDExMSwxMTQsMTA5LDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsCisgICAgMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMjIsMTcsNjksMTA5LDExMiwxMTYsMTIxLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDc4LDQxLDksMTE0LAorICAgIDE5MiwwLDAsMCwxMTQsODEsMSwwLDAsMjE4LDksODQsMTIxLDExMiwxMDEsNjksCisgICAgMTE0LDExNCwxMTEsMTE0LDExNCw0NywwLDAsMCwxMTQsNjYsMCwwLDAsMTE0LDEzMywKKyAgICAwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzMsMCwwLDAsMjE4LDExLDgzLAorICAgIDEyMSwxMTUsMTE2LDEwMSwxMDksNjksMTE0LDExNCwxMTEsMTE0LDQxLDQsMTE0LDY3LDAsMCwKKyAgICAwLDExNCwxMDEsMSwwLDAsMTE0LDEwMiwxLDAsMCwxMTQsMTcxLDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKKyAgICAxMyw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LDk5LDEwNCwxMDEsOTksMTA3LDExNSw4LAorICAgIDAsMCwxMTUsMjQsMCwwLDAsMCwyLDE1LDEsMzAsMSwxMiwxLDE1LAorICAgIDEsNiwxLDE1LDEsMTUsMSwxNSwxLDYsMiwyNywxLDE5LDEsMTE0LAorICAgIDEwOSwxLDAsMCwxMjIsMTYsNzgsMTExLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAorICAgIDExMCw5NywxMDksMTAxLDEwMCwzMiwxMjIsNCwxMjMsMzMsMTE0LDEyNSw5OSwyLDAsMCwKKyAgICAwLDAsMCwwLDAsOCwwLDAsMCwxMiwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsNTIsMSwwLDAsMTAwLDAsMCwxMjUsMiwwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMDAsMSwwLDEzMSwxLDAsMTAwLDIsMCwyNSwxMjUsMywwLDEyNCwKKyAgICAzLDAsMTE0LDE3OCwwLDEyNCwzLDAsMTE2LDEsMCwxMDYsMiwwLDEwNyw3LAorICAgIDAsMTE0LDYyLDAsMTE2LDMsMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCwKKyAgICAxLDExMCwwLDAsMTI0LDAsMCwxMTYsMSwwLDEwNiwyLDAsMTA3LDYsMCwKKyAgICAxMTQsODgsMCwxMTYsMSwwLDEwNiwyLDAsMTI0LDAsMCwyNSw4MywxMTYsMSwKKyAgICAwLDEwNiwyLDAsMTI0LDMsMCwyNSwxMjUsNCwwLDEyMSwxMywwLDEyNCw0LAorICAgIDAsMTA2LDQsMCwxMjUsMiwwLDg3LDExMywxNzgsMCw0LDExNiw1LDAsMTA3LAorICAgIDEwLDAsMTE0LDE3NCwwLDEsMSwxLDExNiw2LDAsMTAwLDMsMCwyMywxMDYsCisgICAgNywwLDEyNCwwLDAsMTI0LDMsMCwxMzEsMiwwLDEyNSw1LDAsMTE2LDgsCisgICAgMCwxMjQsNSwwLDEwMCw0LDAsMTI0LDAsMCwxMzEsMSwxLDEzMCwxLDAsCisgICAgODksMTEzLDE3OCwwLDg4LDExMCwwLDAsMTE2LDksMCwxMjQsMCwwLDEyNCwyLAorICAgIDAsMTMxLDIsMCwxMjUsNiwwLDEyNCw2LDAsMTAwLDAsMCwxMDcsOCwwLAorICAgIDExNCwyMzUsMCwxMTYsOCwwLDExNiw2LDAsMTA2LDcsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDAsMTAwLDQsMCwxMjQsMCwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMTgsCisgICAgMCwxMTYsMTAsMCwxMjQsNiwwLDEzMSwxLDAsMTA2LDExLDAsMTMxLDAsMCwKKyAgICAxMjUsNywwLDEyNCwzLDAsMTE0LDQ4LDEsMTE2LDEsMCwxMDYsMiwwLDEyNCwKKyAgICAzLDAsMjUsMTI1LDQsMCwxMTYsMTIsMCwxMjQsNCwwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMDAsMSwwLDEzMSwxLDAsMTAwLDUsMCwyNSwxMjQsNywwLDEzMSwKKyAgICAzLDAsMSwxMTAsMCwwLDEyNCw3LDAsODMsNDEsNiw3OCwxMTQsMTE2LDAsCisgICAgMCwwLDExNCw4NCwwLDAsMCwxMjIsMjMsNTksMzIsMTIzLDMzLDExNCwxMjUsMzIsCisgICAgMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCisgICAgMTE0LDY3LDAsMCwwLDExNCwxMTUsMCwwLDAsNDEsMTMsMTE0LDMyLDAsMCwKKyAgICAwLDExNCw3LDAsMCwwLDExNCw3MywwLDAsMCwxMTQsMTE0LDAsMCwwLAorICAgIDExNCwyNDYsMCwwLDAsMTE0LDIwOSwwLDAsMCwyMTgsOCw5NSw2OSw4Miw4MiwKKyAgICA5NSw3Nyw4Myw3MSwxMTQsNDcsMCwwLDAsMTE0LDE1MywwLDAsMCwxMTQsMTA2LAorICAgIDEsMCwwLDExNCwxNzQsMCwwLDAsMTE0LDYsMSwwLDAsMTE0LDYxLDAsCisgICAgMCwwLDQxLDgsMTE0LDY3LDAsMCwwLDIxOCw3LDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDk1LDExNCwzNSwwLDAsMCwxMTQsMjMzLDAsMCwwLDkwLDEzLDExMiw5NywKKyAgICAxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDE3MSwwLDAsMCwKKyAgICAxMTQsMTc3LDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDIzLDk1LDEwMiwxMDUsMTEwLDEwMCwKKyAgICA5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsCisgICAgMTAxLDEwMCwxMzUsOCwwLDAsMTE1LDQyLDAsMCwwLDAsMSw2LDEsMTksCisgICAgMSw2LDEsMTUsMSwxNiwyLDE1LDEsMTEsMSwxMywxLDMsMSwxMywKKyAgICAxLDEzLDEsMjIsMSwyNiwxLDE1LDEsMTIsMSwzMCwyLDE4LDEsNiwKKyAgICAyLDEzLDEsMzIsMSwxMTQsMTEyLDEsMCwwLDk5LDIsMCwwLDAsMCwKKyAgICAwLDAsMCwyLDAsMCwwLDEwLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICAzNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsMCwxNDMsMTgsMCwKKyAgICAxLDExNiwxLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsODcsMTAwLAorICAgIDEsMCw4MSw4OCwxMDAsMSwwLDgzLDQxLDIsMTIyLDU0LDcwLDEwNSwxMTAsMTAwLAorICAgIDMyLDk3LDExMCwxMDAsMzIsMTA4LDExMSw5NywxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LAorICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LAorICAgIDEwNyw0Niw3OCw0MSwyLDExNCwxMDMsMCwwLDAsMTE0LDExMiwxLDAsMCw0MSwKKyAgICAyLDExNCw2NywwLDAsMCwxMTQsMTExLDEsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNCw5NSwxMDIsMTA1LDExMCwKKyAgICAxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxNjIsOCwwLDAsMTE1LDQsCisgICAgMCwwLDAsMCwyLDEzLDEsMTE0LDExMywxLDAsMCw5OSwzLDAsMCwKKyAgICAwLDAsMCwwLDAsNSwwLDAsMCw0LDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwxNzIsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LAorICAgIDIsMCwxMzEsMywwLDEsMTI0LDIsMCwxMDAsMSwwLDEwNyw0LDAsMTE0LAorICAgIDQ5LDAsMTE2LDEsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMywKKyAgICAwLDEyNSwwLDAsMTEwLDAsMCwxMTYsMiwwLDEwNiwzLDAsMTMxLDAsMCwKKyAgICAxLDEyNCwwLDAsMTE2LDQsMCwxMDYsNSwwLDEwNyw3LDAsMTE0LDg3LDAsCisgICAgMTE2LDYsMCwxMjQsMCwwLDExNiw3LDAsMTMxLDIsMCw4MywxMTYsNCwwLAorICAgIDEwNiw1LDAsMTI0LDAsMCwyNSwxMjUsMywwLDEyNCwzLDAsMTAwLDIsMCwKKyAgICAxMDcsOCwwLDExNCwxNTgsMCwxMTYsMiwwLDEwNiw4LDAsMTMxLDAsMCwxLAorICAgIDEwMCwzLDAsMTA2LDksMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDQsMCwxMTYsCisgICAgMTAsMCwxMjQsNCwwLDEwMCw0LDAsMTI0LDAsMCwxMzEsMSwxLDEzMCwxLAorICAgIDAsMTEwLDAsMCwxMTYsMTEsMCwxMjQsMCwwLDEzMSwxLDAsMSwxMjQsMywKKyAgICAwLDgzLDQxLDUsOTcsNTAsMSwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwKKyAgICA5NywxMTAsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTA1LAorICAgIDExNiwxMTUsMzIsMTEwLDk3LDEwOSwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDk5LAorICAgIDEwNyw5NywxMDMsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LDEwOCwxMDgsMzIsMTA1LDExNSwKKyAgICAxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTA5LDk3LDEwMCwxMDEsMzIsCisgICAgMTAyLDExNCwxMTEsMTA5LDQ0LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDEwMSwKKyAgICAxMTgsMTAxLDEwOCwzMiw5NywxMDAsMTA2LDExNywxMTUsMTE2LDEwOSwxMDEsMTEwLDExNiw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LAorICAgIDExMSwxMTAsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwxMTUsMTAxLDExMCwxMTYsMTE1LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwMywxMTQsMTAxLDk3LDExNiwxMDEsMTE1LDExNiwzMiw5OSwxMTEsMTA5LDEwOSwxMTEsCisgICAgMTEwLDMyLDEwMCwxMDEsMTEwLDExMSwxMDksMTA1LDExMCw5NywxMTYsMTExLDExNCwzMiwxMTEsMTAyLAorICAgIDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCw5NywxMDgsMTA1LDExNiwxMjEsMTAsMzIsCisgICAgMzIsMzIsMzIsOTgsMTAxLDExNiwxMTksMTAxLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTcsMTEwLDEwMCwzMiw5NSw5NSwxMDUsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSw0NiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDUsMTEwLAorICAgIDk5LDEwOCwxMTcsMTAwLDEwMSwxMTUsMzIsMTE1LDEwMSwxMTYsMTE2LDEwNSwxMTAsMTAzLDMyLDk1LAorICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMDUsMTAyLDEwLDMyLDMyLAorICAgIDMyLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAwLDEwNSwxMDAsCisgICAgMzIsMTEwLDExMSwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LDg0LDAsMCwwLAorICAgIDc4LDEyMiw0MCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMTEsMTAyLDMyLDEyMywxMjUsMzIsCisgICAgMTA0LDk3LDEwOCwxMTYsMTAxLDEwMCw1OSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMDUsMTEwLDMyLAorICAgIDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwxMTQsNjcsMCwwLDAsCisgICAgNDEsMTIsMTE0LDEwOSwxLDAsMCwxMTQsMTAzLDEsMCwwLDExNCwxMDYsMCwwLAorICAgIDAsMTE0LDMsMSwwLDAsMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwwLAorICAgIDExNCwxMTMsMSwwLDAsMjE4LDExLDk1LDEwMyw5OSwxMDAsOTUsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMTE0LDEwNywwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDE1MywwLDAsCisgICAgMCwxMTQsMTEyLDAsMCwwLDQxLDUsMTE0LDY3LDAsMCwwLDExNCwxMDEsMSwKKyAgICAwLDAsMTE0LDEwMiwxLDAsMCwxMTQsMTc5LDAsMCwwLDExNCwxNTEsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDExNCwxLDAsMCwxNjgsOCwwLDAsMTE1LDI2LDAsMCwwLDAsOSwKKyAgICAxNiwxLDEyLDEsMjEsMSwxMCwxLDE1LDEsMTMsMSwxMywxLDEyLDEsCisgICAgMTAsMiwxNSwxLDIxLDEsMTAsMSwxMTQsMTE0LDEsMCwwLDk5LDMsMCwKKyAgICAwLDAsMCwwLDAsMCw2LDAsMCwwLDE3LDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwxLDEsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDAsMSwwLAorICAgIDEzMSwyLDAsMTE0LDI1MywwLDEwMCwyLDAsMTI0LDEsMCwxMDcsNiwwLDExNCwKKyAgICA4OSwwLDExNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwxLDAsMTI0LDEsCisgICAgMCwxMDYsMiwwLDEwMCwyLDAsMTMxLDEsMCwxLDExNiwwLDAsMTI0LDAsCisgICAgMCwxMDAsMywwLDEzMSwyLDAsMTE0LDg5LDAsMTI0LDEsMCwxMDYsMywwLAorICAgIDEyNCwwLDAsMTA2LDQsMCwxMzEsMSwwLDEsMTEzLDg5LDAsMTEwLDAsMCwKKyAgICAxMjAsMTYxLDAsMTI0LDEsMCw2OCw5MywxNTAsMCwxMjUsMywwLDExNiwwLDAsCisgICAgMTI0LDAsMCwxMjQsMywwLDEzMSwyLDAsMTE1LDk2LDAsMTAwLDQsMCwxMDYsCisgICAgNSwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDQsCisgICAgMCwxMjEsMTcsMCwxMTYsNywwLDEyNCwyLDAsMTI0LDQsMCwxMzEsMiwwLAorICAgIDEsODcsMTEzLDI0NiwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsMjQyLDAsMSwKKyAgICAxMjUsNSwwLDEsMTIyLDUzLDAsMTE2LDksMCwxMjQsNSwwLDEzMSwxLDAsCisgICAgMTA2LDEwLDAsMTE2LDExLDAsMTMxLDEsMCwxMTQsMjIxLDAsMTI0LDUsMCwxMDYsCisgICAgMTIsMCwxMjQsNCwwLDEwNywyLDAsMTE0LDIyMSwwLDExOSw5NiwwLDExMywyMjEsCisgICAgMCwxMTAsMCwwLDEzMCwwLDAsODcsODksMTAwLDUsMCwxMDAsNSwwLDEyNSwKKyAgICA1LDAsMTI2LDUsMCw4OCwxMTMsMjQ2LDAsODgsMTEzLDk2LDAsMTEzLDk2LDAsCisgICAgODcsMTEwLDAsMCwxMjQsMCwwLDgzLDQxLDYsMTIyLDIzOCw3MCwxMDUsMTAzLDExNywKKyAgICAxMTQsMTAxLDMyLDExMSwxMTcsMTE2LDMyLDExOSwxMDQsOTcsMTE2LDMyLDk1LDk1LDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDk1LDk1LDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDExNCwxMDEsCisgICAgMTE2LDExNywxMTQsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA1LAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMzIsMTEyLDk3LDExNCw5NywxMDksMTAxLDExNiwxMDEsMTE0LAorICAgIDMyLDEwNSwxMTUsMzIsOTcsMzIsOTksOTcsMTA4LDEwOCw5Nyw5OCwxMDgsMTAxLDMyLDExOSwKKyAgICAxMDQsMTA1LDk5LDEwNCwzMiwxMTYsOTcsMTA3LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLAorICAgIDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTYsMTExLAorICAgIDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LDMyLDczLDExNiwzMiwKKyAgICAxMDUsMTE1LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDAsCisgICAgMTAxLDk5LDExMSwxMTcsMTEyLDEwOCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDExNywxMTAsOTksCisgICAgMTE2LDEwNSwxMTEsMTEwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiw5NywxMTUsMTE1LDExNywxMDksMTA1LAorICAgIDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzOSwxMTUsMTAsMzIsCisgICAgMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCisgICAgMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTUsMTA1LAorICAgIDExNCwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCwyNDYsMCwwLDAsMjUwLAorICAgIDEsNDIsMjE4LDcsOTUsOTUsOTcsMTA4LDEwOCw5NSw5NSwxMjIsNSwxMjMsMTI1LDQ2LAorICAgIDEyMywxMjUsNzgsNDEsMTMsMTE0LDYwLDAsMCwwLDExNCwyNDUsMCwwLDAsMjE4LAorICAgIDYsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTE0LDE5NywwLDAsMCwxMTQsMTE2LDEsMCwKKyAgICAwLDExNCw0NywwLDAsMCwxMTQsNTcsMCwwLDAsMTE0LDExNCwwLDAsMCwKKyAgICAxMTQsMTUzLDAsMCwwLDExNCw4MSwxLDAsMCwxMTQsOSwwLDAsMCwyMTgsCisgICAgMTUsOTUsNjksODIsODIsOTUsNzcsODMsNzEsOTUsODAsODIsNjksNzAsNzMsODgsCisgICAgMTE0LDY3LDAsMCwwLDQxLDYsMTE0LDE3OSwwLDAsMCwyMTgsOCwxMDIsMTE0LAorICAgIDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDExNCwxMTEsMSwwLDAsMTE0LDE2LDAsMCwwLAorICAgIDkwLDksMTAyLDExNCwxMTEsMTA5LDk1LDExMCw5NywxMDksMTAxLDExNCwzNywxLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgMTYsOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsCisgICAgMTE2LDE5Miw4LDAsMCwxMTUsMzQsMCwwLDAsMCwxMCwxNSwxLDEyLDEsCiAgICAgMTIsMSwxMywxLDE1LDEsMjIsMSwxMywxLDE1LDEsMjEsMSwzLDEsCi0gICAgMTcsMSwxOCw2LDE4LDEsMTUsMSw5LDEsMzIsMSwxMTcsMTYsMCwwLAotICAgIDAsOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsCi0gICAgMTE2LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwKKyAgICAxNywxLDE4LDQsMjEsMSwxNSwxLDksMSwzMiwxLDExNCwxMjAsMSwwLAorICAgIDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLAogICAgIDAsMCw2NywwLDAsMCwxMTUsNzgsMCwwLDAsMTI0LDAsMCwxMDYsMCwKLSAgICAwLDEwMCwxLDAsMTMxLDEsMCwxMjUsMSwwLDEyNCwxLDAsMTAwLDYsMCwKLSAgICAxMDcsOCwwLDExNCw3NCwwLDEyNCwwLDAsMTAwLDIsMCwyNSwxMjUsMSwwLAotICAgIDEwMCwzLDAsMTI0LDAsMCwxMDcsNywwLDExNCw3NCwwLDEyNCwxLDAsMTA2LAotICAgIDIsMCwxMDAsNCwwLDEzMSwxLDAsMTAwLDUsMCwyNSwxMjUsMSwwLDExMywKLSAgICA3NCwwLDExMCwwLDAsMTI0LDEsMCw4Myw0MCw3LDAsMCwwLDExNywxNjcsCi0gICAgMCwwLDAsNjcsOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwzMiwxMTksMTA0LDk3LAotICAgIDExNiwzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTE1LDEwNCwKLSAgICAxMTEsMTE3LDEwOCwxMDAsMzIsOTgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk1LDk1LAotICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LAotICAgIDMyLDEwMywxMTcsOTcsMTE0LDk3LDExMCwxMTYsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwzMiw5OCwKLSAgICAxMDEsMzIsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMTAwLDMyLDExMSwxMTQsMzIsOTksMTExLDExNywKLSAgICAxMDgsMTAwLDMyLDk4LDEwMSwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDc4LDExMSwxMTAsCi0gICAgMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwxMTUsMTAxLAotICAgIDExMCwxMTYsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDExNCwxMTEsMTEyLAotICAgIDEwMSwxMTQsMzIsMTE4LDk3LDEwOCwxMTcsMTAxLDMyLDEwNSwxMTUsMzIsMTE3LDExMCwxMDcsMTEwLAotICAgIDExMSwxMTksMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNywxMSwwLDAsMCw5NSwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsOTUsMTE3LDEsMCwwLDAsNDYsMTA1LDAsMCwwLDAsNzgsCi0gICAgNDAsMywwLDAsMCwxMTcsMywwLDAsMCwxMDMsMTAxLDExNiwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LAotICAgIDEwNSwxMTYsMTA1LDExMSwxMTAsNDAsMiwwLDAsMCwxMTcsNywwLDAsMCwxMDMsCi0gICAgMTA4LDExMSw5OCw5NywxMDgsMTE1LDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNywKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk1LDk1LDkyLDYsMCwwLDExNSwxMiwwLDAsMCwwLDcsMTUsCi0gICAgMSwxMiwxLDEwLDEsMTIsMSwyNSwxLDExNywxNywwLDAsMCw5NSw5OSwKLSAgICA5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDk5LAotICAgIDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDU1LDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMDYsCi0gICAgMiwwLDEzMSwwLDAsMTAyLDIsMCwxMjUsMCwwLDExNiwzLDAsMTE2LDQsCi0gICAgMCwxMDIsMiwwLDEyNSwxLDAsMTE2LDUsMCwxMTYsNiwwLDEwMiwyLDAsCi0gICAgMTI1LDIsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMDMsMywwLDgzLAotICAgIDQwLDEsMCwwLDAsMTE3LDk1LDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsCi0gICAgMTE1LDMyLDk3LDMyLDEwOCwxMDUsMTE1LDExNiwzMiwxMTEsMTAyLDMyLDEwMiwxMDUsMTA4LDEwMSwKLSAgICA0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw2OSw5Nyw5OSwxMDQsCi0gICAgMzIsMTA1LDExNiwxMDEsMTA5LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE2LDExNywxMTIsMTA4LDEwMSwKLSAgICAzMiw0MCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ0LDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLAotICAgIDEwMSwxMTUsNDEsNDYsMTAsMzIsMzIsMzIsMzIsNDAsNywwLDAsMCwxMTcsMTksCi0gICAgMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSwKLSAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LAotICAgIDE4LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDk1LDExNSwxMTcsCi0gICAgMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE1LDAsMCwwLAotICAgIDgzLDc5LDg1LDgyLDY3LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywKLSAgICAyMCwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTcsMCwwLDAsNjYsODksODQsCi0gICAgNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsNDAsMywKLSAgICAwLDAsMCwxMTcsMTAsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKLSAgICAxMTAsMTE1LDExNyw2LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDgsMCwKLSAgICAwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjcsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsCi0gICAgMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDEwNyw2LDAsMCwxMTUsOCwwLDAsMCwwLAotICAgIDUsMTgsMSwxMiwxLDEyLDEsMTE3LDI3LDAsMCwwLDk1LDEwMywxMDEsMTE2LAotICAgIDk1LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsMTA4LDEwMSw5NSwKLSAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSw5OSw1LDAsMCwwLDAsMCwwLDAsCi0gICAgOSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwyMjcsMCwwLAotICAgIDAsMTI0LDQsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDI3LDAsMTE2LDAsMCwKLSAgICAxMjQsMCwwLDEzMSwxLDAsMTI1LDUsMCwxMTAsNTQsMCwxMjQsMSwwLDEwMCwKLSAgICAzLDAsMTA3LDksMCwxMTQsNDUsMCwxMjQsMSwwLDExMCwzLDAsMTA1LDAsCi0gICAgMCwxMjUsNiwwLDExNiwyLDAsMTI0LDYsMCwxMzEsMSwwLDEyNSw3LDAsCi0gICAgMTE2LDAsMCwxMjQsMCwwLDEyNCw3LDAsMTI0LDQsMCwxMzEsMywwLDEyNSwKLSAgICA1LDAsMTI0LDMsMCwxMTUsMjA3LDAsMTI0LDQsMCwxMDAsMSwwLDEwNywyLAotICAgIDAsMTE0LDEyMiwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMywwLDEwMCwyLDAsCi0gICAgMTMxLDEsMCwxMDAsMSwwLDI1LDEzMSwxLDAsODMsMTI0LDAsMCwxMTUsMTMyLAotICAgIDAsMTI0LDUsMCw4MywxMTYsNCwwLDEyNCwwLDAsMTMxLDEsMCwxMTYsNCwKLSAgICAwLDEyNCwwLDAsMTA2LDMsMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDEsMCwKLSAgICAyNSwxMzEsMSwwLDI0LDEyNSw4LDAsMTE2LDUsMCwxMDYsNiwwLDEyNCw1LAotICAgIDAsMTA2LDcsMCwxMDAsMywwLDExNiw0LDAsMTI0LDUsMCwxMDYsNywwLAotICAgIDEzMSwxLDAsMTI0LDgsMCwyNCwxMzMsMiwwLDI1LDI1LDgzLDExMCwxNiwwLAotICAgIDExNiw4LDAsMTI0LDUsMCwxMjQsMywwLDExNiwwLDAsMTMxLDMsMCw4MywKLSAgICAxMDAsMywwLDgzLDQwLDQsMCwwLDAsMTE3LDIxNCwxLDAsMCw3MywxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSwKLSAgICAzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMTcsMTE1LAotICAgIDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDUsMTEwLDEwMiwxMDEsMTE0LDMyLDExOSwxMDQsMTAxLDExNCwKLSAgICAxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA1LDExNSwzMiwKLSAgICAxMTEsOTksOTksMTE3LDExNCwxMDUsMTEwLDEwMywzMiwxMDIsMTE0LDExMSwxMDksMTAsMzIsMzIsCi0gICAgMzIsMzIsMTE2LDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDExNCwxMDEsMTA4LDk3LAotICAgIDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMTUsNDYsMzIsODQsMTA0LAotICAgIDEwMSwzMiwzOSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LAotICAgIDEwMSwxMTAsMTE2LDMyLDEwNSwxMTUsMzIsMTA1LDEwMywxMTAsMTExLDExNCwxMDEsMTAwLDQ2LDMyLAotICAgIDg0LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzksMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LAotICAgIDExNiwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE1LDExMiwxMDEsOTksCi0gICAgMTA1LDEwMiwxMDUsMTAxLDExNSwzMiwxMTksMTA0LDk3LDExNiwzMiwxMTUsMTA0LDExMSwxMTcsMTA4LAotICAgIDEwMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDMyLDk3LDExNSwzMiw5NywxMTYsMTE2LDExNCwxMDUsCi0gICAgOTgsMTE3LDExNiwxMDEsMTE1LDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiw5Niw5NiwxMDIsCi0gICAgMTE0LDExMSwxMDksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMzIsNjAsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiw2Miw5Niw5Niw0MSw0NiwKLSAgICAzMiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzksMTAsMzIsMzIsCi0gICAgMzIsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDExNCwxMDEsMTEyLDExNCwxMDEsCi0gICAgMTE1LDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMzIsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTA1LDExMCwzMiw5NywzMiwxMTQsCi0gICAgMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiw5Niw5NiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgNDYsNDYsMTEyLDEwNywxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA5LDExMSwxMDAsCi0gICAgOTYsOTYsMzIsMTE5LDExMSwxMTcsMTA4LDEwMCwzMiwxMDQsOTcsMTE4LDEwMSwzMiw5NywzMiwKLSAgICAzOSwxMDgsMTAxLDExOCwxMDEsMTA4LDM5LDMyLDExMSwxMDIsMzIsNTAsNDEsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsMTA1LDAsMCwwLDAsMTE3LDEsMCwwLDAsNDYsNzgsCi0gICAgNDAsOSwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTAzLDk5LDEwMCw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTcsCi0gICAgMCwwLDAsOTUsOTksOTcsMTA4LDk5LDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw5NSw5NSwxMTcsOSwwLDAsMCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwKLSAgICAxMTEsMTEwLDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLDExNywzLDAsMCwwLDExNSwKLSAgICAxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTYsMCwwLDAsCi0gICAgOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LAotICAgIDQwLDksMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDcsCi0gICAgMCwwLDAsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSwxMTcsNiwwLDAsMCwxMDgsCi0gICAgMTExLDk5LDk3LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsCi0gICAgMTE1LDExNiwxMTcsNSwwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDExNyw2LDAsMCwKLSAgICAwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsMCwwLDEwMywxMDgsMTExLDk4LAotICAgIDk3LDEwOCwxMTUsOTUsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDExNyw3LDAsMCwwLDk5LDExNywxMTYsOTUsMTExLDEwMiwxMDIsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsOTUsOTUsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMTE4LDYsMCwwLDExNSwyNiwwLDAsMCwKLSAgICAwLDExLDEyLDEsMTUsMiwyNCwxLDEyLDEsMTgsMSw2LDMsMTIsMSwKLSAgICAyMywxLDYsMSw0LDQsMzUsMyw0MCwyLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMTYsMCwwLDAsMTMsMCwwLDAsNjcsMCwwLDAsMTE1LDI0LAotICAgIDMsMCwwLDEyNCwxLDAsOTcsMCwwLDEyNCwwLDAsOTcsMSwwLDExNiwKLSAgICAxLDAsMTA2LDIsMCwxMDYsMywwLDExNCwzMywwLDExNiw0LDAsOTcsNSwKLSAgICAwLDExMCw2LDAsMTE2LDYsMCw5Nyw1LDAsMTE2LDcsMCwxMTYsMSwwLAotICAgIDEzMSwxLDAsMTI1LDIsMCwxMjAsMTE5LDAsMTE2LDEsMCwxMDYsOCwwLDEwNiwKLSAgICA5LDAsMTMxLDAsMCw2OCw5MywxMDIsMCw5MiwyLDAsMTI1LDMsMCwxMjUsCi0gICAgNCwwLDExNiwxMCwwLDEyNCw0LDAsMTI0LDIsMCwxMzEsMiwwLDExNCw2NywKLSAgICAwLDExNiwxMSwwLDEyNCw0LDAsMTAwLDEsMCwxMzEsMiwwLDExNSwxNjksMCwKLSAgICAxMjQsMywwLDExNiwxLDAsMTA2LDEyLDAsMTA3LDYsMCwxMTQsMTM2LDAsMTE2LAotICAgIDEzLDAsMTI0LDQsMCw5NSwxNCwwLDExMywxNjYsMCwxMTYsMCwwLDEwNiwxNSwKLSAgICAwLDEyNCwzLDAsMTMxLDEsMCwxMTQsMTY2LDAsMTE2LDE2LDAsMTI0LDQsMCwKLSAgICA5NSwxNCwwLDExMywxNjYsMCwxMTMsMTY5LDAsMTEzLDY3LDAsMTEzLDY3LDAsODcsCi0gICAgMTE2LDEsMCwxMDYsOCwwLDExNiwxNywwLDI1LDEyNSw1LDAsMTIwLDc2LDAsCi0gICAgMTAwLDI4LDAsNjgsOTMsNjgsMCwxMjUsNiwwLDEyNCw2LDAsMTE2LDEsMCwKLSAgICAxMDYsOCwwLDEwNyw3LDAsMTE0LDIzMiwwLDExNiwxMywwLDEwNiwxOCwwLDEyNCwKLSAgICA2LDAsMTMxLDEsMCwxMjUsNywwLDExMCwxMywwLDExNiwxLDAsMTA2LDgsCi0gICAgMCwxMjQsNiwwLDI1LDEyNSw3LDAsMTE2LDE5LDAsMTI0LDUsMCwxMjQsNiwKLSAgICAwLDEyNCw3LDAsMTMxLDMsMCwxLDExMywxOTMsMCw4NywxMDAsNiwwLDEwMCwKLSAgICA3LDAsMTAzLDEsMCwxMDIsMiwwLDEwMCw4LDAsMTAwLDksMCwxMDAsNywKLSAgICAwLDEwMywyLDAsMTAyLDIsMCwxMDAsMTAsMCwxMDAsOSwwLDEwMCw3LDAsCi0gICAgMTAzLDIsMCwxMDIsMiwwLDEwMiwzLDAsMTI1LDgsMCwxMjAsMTg5LDAsMTI0LAotICAgIDgsMCw2OCw5MywxNjksMCw5MiwyLDAsMTI1LDksMCwxMjUsMTAsMCwxMTYsCi0gICAgMjAsMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsMCwwLDEyNCwxMCwwLDY4LDEzMSwKLSAgICAxLDAsMTMxLDEsMCwxMTUsMTA3LDEsMTE2LDIxLDAsMTMwLDEsMCwxMjQsMTAsCi0gICAgMCwxMDAsMTMsMCwyNSwxMjUsMTEsMCwxMjQsOSwwLDExNiwxLDAsMTA2LDgsCi0gICAgMCwxMDcsNiwwLDExNCwxNDksMSwxMTYsMSwwLDEwNiw4LDAsMTI0LDksMCwKLSAgICAyNSwxMjUsMTIsMCw4MCwxMTMsNjQsMSwxMjEsNjAsMCwxMTYsMTMsMCwxMDYsMTgsCi0gICAgMCwxMjQsOSwwLDEzMSwxLDAsMTI1LDEyLDAsMTI0LDksMCwxMDAsMTAsMCwKLSAgICAxMDcsMiwwLDExNCwyMDcsMSwxMDAsMTQsMCwxMTYsMSwwLDEwNiwyMiwwLDEwNywKLSAgICA2LDAsMTE0LDIwNywxLDEyNCwxMCwwLDEwMCwxNSwwLDI1LDEyNSwxMSwwLDExMCwKLSAgICAwLDAsODAsODcsMTEzLDY0LDEsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsMjMyLAotICAgIDEsMSwxLDEsMTE5LDY0LDEsODksMTEzLDY0LDEsODgsMTEzLDY0LDEsODcsCi0gICAgMTE2LDIzLDAsMTAwLDE2LDAsMTMxLDEsMCwxMzAsMSwwLDEyMSwxOSwwLDExNiwKLSAgICAxMywwLDEwNiwxOCwwLDEwMCwxNywwLDEzMSwxLDAsMTI1LDEzLDAsODcsMTEwLAotICAgIDI0LDAsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsMzgsMiwxLDEsMSwxMDAsCi0gICAgMjcsMCwxMjUsMTMsMCw4OSwxMTAsMSwwLDg4LDExNiwxMywwLDEwNiwxOCwwLAotICAgIDEwMCwxOCwwLDEzMSwxLDAsMTI1LDE0LDAsMTI0LDksMCwxMDAsOCwwLDEwNywKLSAgICAyLDAsMTE0LDEwMCwyLDExNiwxMywwLDEwNiwxOCwwLDEwMCwxOSwwLDEzMSwxLAotICAgIDAsMTI1LDE1LDAsMTE2LDE5LDAsMTI0LDUsMCwxMDAsMjAsMCwxMjQsMTUsMCwKLSAgICAxMzEsMywwLDEsMTEwLDAsMCwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMSwwLAotICAgIDEyNCwxMiwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwxNywwLAotICAgIDEyNCwxMywwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwxOCwwLAotICAgIDEyNCwxNCwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMiwwLAotICAgIDEyNCwxMSwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMywwLAotICAgIDExNiwyNSwwLDEyNCwxMCwwLDEzMSwxLDAsMTMxLDMsMCwxLDExNiwxOSwwLAotICAgIDEyNCw1LDAsMTAwLDI0LDAsMTE2LDI2LDAsMTMxLDAsMCwxMzEsMywwLDEsCi0gICAgMTE2LDI3LDAsMTA2LDI4LDAsMTE2LDAsMCwxMDYsMjksMCwxMzEsMCwwLDEzMSwKLSAgICAxLDAsMSwxMjQsOSwwLDEwMCw4LDAsMTA3LDIsMCwxMTQsMjAsMywxMTYsCi0gICAgMzAsMCwxMDYsMzEsMCwxMDAsMjUsMCwxMzEsMSwwLDEsMTAwLDI2LDAsMTE2LAotICAgIDI3LDAsMTA3LDYsMCwxMTQsMjAsMywxMDAsMjksMCwxMTYsMzMsMCw5NSwzNCwKLSAgICAwLDExMywyMCwzLDExMCwwLDAsMTAwLDI3LDAsODMsNDAsMzAsMCwwLDAsCi0gICAgMTE3LDI1MCwwLDAsMCw4MywxMDEsMTE2LDExNywxMTIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCwzMiw5OCwxMjEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwKLSAgICAxMDMsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwKLSAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsMzIsMTA1LDExMCwKLSAgICAxMDYsMTAxLDk5LDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwxMDksMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMDgsMTExLDk4LDk3LDEwOCwKLSAgICAzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw2NSwxMTUsMzIsMTE1LDEyMSwxMTUsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLAotICAgIDEwMCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAxMTUsMzIsOTcsOTksOTksMTAxLDExNSwxMTUsMzIsOTcsMTEwLDEwMCwzMiw5NSwxMDUsMTA5LAotICAgIDExMiwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTExLDExNSwxMDEsMzIsCi0gICAgMTE2LDExOSwxMTEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwKLSAgICAzMiw5OCwxMDEsMzIsMTAxLDEyMCwxMTIsMTA4LDEwNSw5OSwxMDUsMTE2LDEwOCwxMjEsMzIsMTEyLAotICAgIDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNywKLSAgICAxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDExNywzLAotICAgIDAsMCwwLDk1LDEwNSwxMTEsMTE3LDksMCwwLDAsOTUsMTE5LDk3LDExNCwxMTAsCi0gICAgMTA1LDExMCwxMDMsMTE1LDExNyw4LDAsMCwwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAotICAgIDExNSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDExNyw1LDAsCi0gICAgMCwwLDExMiwxMTEsMTE1LDEwNSwxMjAsMTE3LDEsMCwwLDAsNDcsMTE3LDIsMCwKLSAgICAwLDAsMTEwLDExNiwxMTcsMSwwLDAsMCw5MiwxMTcsMywwLDAsMCwxMTEsCi0gICAgMTE1LDUwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsCisgICAgMCwxMDAsMSwwLDEzMSwxLDAsMTI1LDEsMCwxMjQsMSwwLDEwMCwyLDAsCisgICAgMTA3LDgsMCwxMTQsNzQsMCwxMjQsMCwwLDEwMCwzLDAsMjUsMTI1LDEsMCwKKyAgICAxMDAsNCwwLDEyNCwwLDAsMTA3LDcsMCwxMTQsNzQsMCwxMjQsMSwwLDEwNiwKKyAgICAxLDAsMTAwLDUsMCwxMzEsMSwwLDEwMCw2LDAsMjUsMTI1LDEsMCwxMTMsCisgICAgNzQsMCwxMTAsMCwwLDEyNCwxLDAsODMsNDEsNywxMjIsMTY3LDY3LDk3LDEwOCwKKyAgICA5OSwxMTcsMTA4LDk3LDExNiwxMDEsMzIsMTE5LDEwNCw5NywxMTYsMzIsOTUsOTUsMTEyLDk3LAorICAgIDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDk4LAorICAgIDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywKKyAgICAxMDEsOTUsOTUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMDMsMTE3LDk3LDExNCw5NywKKyAgICAxMTAsMTE2LDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsOTgsMTAxLDMyLDEwMCwxMDEsMTAyLDEwNSwKKyAgICAxMTAsMTAxLDEwMCwzMiwxMTEsMTE0LDMyLDk5LDExMSwxMTcsMTA4LDEwMCwzMiw5OCwxMDEsMzIsCisgICAgMTE1LDEwMSwxMTYsMzIsMTE2LDExMSwzMiw3OCwxMTEsMTEwLDEwMSwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMTYsMTExLDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsMTE2LDMyLDExNiwxMDQsOTcsCisgICAgMTE2LDMyLDEwNSwxMTYsMTE1LDMyLDExMiwxMTQsMTExLDExMiwxMDEsMTE0LDMyLDExOCw5NywxMDgsCisgICAgMTE3LDEwMSwzMiwxMDUsMTE1LDMyLDExNywxMTAsMTA3LDExMCwxMTEsMTE5LDExMCw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwxMTQsMjUwLDAsMCwwLDc4LDExNCw1NywwLDAsMCwxMTQsCisgICAgMjQ2LDAsMCwwLDExNCwxMTYsMCwwLDAsMTE0LDg0LDAsMCwwLDQxLDIsCisgICAgMTE0LDkzLDAsMCwwLDExNCwzMiwwLDAsMCw0MSwyLDIxOCw3LDEwMywxMDgsCisgICAgMTExLDk4LDk3LDEwOCwxMTUsMTE0LDEwMSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsOTUsOTksOTcsMTA4LDk5LAorICAgIDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwyMjQsOCwwLDAsCisgICAgMTE1LDEyLDAsMCwwLDAsNywxNSwxLDEyLDEsMTAsMSwxMiwxLDI1LAorICAgIDEsMTE0LDEyMiwxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMywKKyAgICAwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw1NSwwLDAsMCwKKyAgICAxMTYsMCwwLDExNiwxLDAsMTA2LDIsMCwxMzEsMCwwLDEwMiwyLDAsMTI1LAorICAgIDAsMCwxMTYsMywwLDExNiw0LDAsMTAyLDIsMCwxMjUsMSwwLDExNiw1LAorICAgIDAsMTE2LDYsMCwxMDIsMiwwLDEyNSwyLDAsMTI0LDAsMCwxMjQsMSwwLAorICAgIDEyNCwyLDAsMTAzLDMsMCw4Myw0MSwxLDEyMiw5NSw4MiwxMDEsMTE2LDExNywxMTQsCisgICAgMTEwLDExNSwzMiw5NywzMiwxMDgsMTA1LDExNSwxMTYsMzIsMTExLDEwMiwzMiwxMDIsMTA1LDEwOCwKKyAgICAxMDEsNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LAorICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjksOTcsOTksCisgICAgMTA0LDMyLDEwNSwxMTYsMTAxLDEwOSwzMiwxMDUsMTE1LDMyLDk3LDMyLDExNiwxMTcsMTEyLDEwOCwKKyAgICAxMDEsMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LAorICAgIDEyMCwxMDEsMTE1LDQxLDQ2LDEwLDMyLDMyLDMyLDMyLDQxLDcsMTE0LDU1LDEsMCwKKyAgICAwLDExNCwxMDYsMCwwLDAsMjE4LDE4LDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCisgICAgMTEwLDk1LDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsMTE0LDUwLDEsMCwwLDExNCwKKyAgICAxMzQsMCwwLDAsMTE0LDU0LDEsMCwwLDExNCwyMzIsMCwwLDAsNDEsMywKKyAgICA5MCwxMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwxMTUsOTAsNiwxMTUsMTExLAorICAgIDExNywxMTQsOTksMTAxLDkwLDgsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDI0MCwwLAorICAgIDAsMCwyMzksOCwwLDAsMTE1LDgsMCwwLDAsMCw1LDE4LDEsMTIsCisgICAgMSwxMiwxLDExNCwyNDAsMCwwLDAsOTksNSwwLDAsMCwwLDAsMCwKKyAgICAwLDksMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMjI3LDAsCisgICAgMCwwLDEyNCw0LDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyNywwLDExNiwwLAorICAgIDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw1LDAsMTEwLDU0LDAsMTI0LDEsMCwKKyAgICAxMDAsMiwwLDEwNyw5LDAsMTE0LDQ1LDAsMTI0LDEsMCwxMTAsMywwLDEwNSwKKyAgICAwLDAsMTI1LDYsMCwxMTYsMSwwLDEyNCw2LDAsMTMxLDEsMCwxMjUsNywKKyAgICAwLDExNiwwLDAsMTI0LDAsMCwxMjQsNywwLDEyNCw0LDAsMTMxLDMsMCwKKyAgICAxMjUsNSwwLDEyNCwzLDAsMTE1LDIwNywwLDEyNCw0LDAsMTAwLDEsMCwxMDcsCisgICAgMiwwLDExNCwxMjIsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDIsMCwxMDAsMywKKyAgICAwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMzEsMSwwLDgzLDEyNCwwLDAsMTE1LAorICAgIDEzMiwwLDEyNCw1LDAsODMsMTE2LDMsMCwxMjQsMCwwLDEzMSwxLDAsMTE2LAorICAgIDMsMCwxMjQsMCwwLDEwNiwyLDAsMTAwLDMsMCwxMzEsMSwwLDEwMCwxLAorICAgIDAsMjUsMTMxLDEsMCwyNCwxMjUsOCwwLDExNiw0LDAsMTA2LDUsMCwxMjQsCisgICAgNSwwLDEwNiw2LDAsMTAwLDIsMCwxMTYsMywwLDEyNCw1LDAsMTA2LDYsCisgICAgMCwxMzEsMSwwLDEyNCw4LDAsMjQsMTMzLDIsMCwyNSwyNSw4MywxMTAsMTYsCisgICAgMCwxMTYsNywwLDEyNCw1LDAsMTI0LDMsMCwxMTYsMCwwLDEzMSwzLDAsCisgICAgODMsMTAwLDIsMCw4Myw0MSw0LDk3LDIxNCwxLDAsMCw3MywxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSwzOSwzMiwKKyAgICA5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsCisgICAgMzIsMTE2LDExMSwzMiwxMDUsMTEwLDEwMiwxMDEsMTE0LDMyLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA1LDExNSwzMiwxMTEsOTksCisgICAgOTksMTE3LDExNCwxMDUsMTEwLDEwMywzMiwxMDIsMTE0LDExMSwxMDksMTAsMzIsMzIsMzIsMzIsCisgICAgMTE2LDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsCisgICAgMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMTUsNDYsMzIsODQsMTA0LDEwMSwzMiwKKyAgICAzOSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsCisgICAgMTE2LDMyLDEwNSwxMTUsMzIsMTA1LDEwMywxMTAsMTExLDExNCwxMDEsMTAwLDQ2LDMyLDg0LDEwNCwKKyAgICAxMDEsMTAsMzIsMzIsMzIsMzIsMzksMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwzOSwKKyAgICAzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwKKyAgICAxMDUsMTAxLDExNSwzMiwxMTksMTA0LDk3LDExNiwzMiwxMTUsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwKKyAgICAxMDEsMTIwLDEwNSwxMTUsMTE2LDMyLDk3LDExNSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LAorICAgIDExNiwxMDEsMTE1LDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwMSwxMDAsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiw5Niw5NiwxMDIsMTE0LDExMSwKKyAgICAxMDksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsCisgICAgNjAsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiw2Miw5Niw5Niw0MSw0NiwzMiwzMiwKKyAgICA4NCwxMDQsMTAxLDMyLDM5LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzksMTAsMzIsMzIsMzIsMzIsCisgICAgOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwKKyAgICAxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsCisgICAgMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTA1LDExMCwzMiw5NywzMiwxMTQsMTAxLDEwOCwKKyAgICA5NywxMTYsMTA1LDExOCwxMDEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiw5Niw5NiwxMDIsMTE0LDExMSwxMDksMzIsNDYsNDYsCisgICAgMTEyLDEwNywxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA5LDExMSwxMDAsOTYsOTYsCisgICAgMzIsMTE5LDExMSwxMTcsMTA4LDEwMCwzMiwxMDQsOTcsMTE4LDEwMSwzMiw5NywzMiwzOSwxMDgsCisgICAgMTAxLDExOCwxMDEsMTA4LDM5LDMyLDExMSwxMDIsMzIsNTAsNDEsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsMTE0LDg0LDAsMCwwLDc4LDExNCwxMTYsMCwwLDAsNDEsOCwxMTQsCisgICAgMTE0LDEsMCwwLDExNCwxMjIsMSwwLDAsMTE0LDEyMSwwLDAsMCwxMTQsMzEsCisgICAgMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwwLDExNCw1NywwLAorICAgIDAsMCwxMTQsMTIwLDEsMCwwLDQxLDksMTE0LDY3LDAsMCwwLDExNCwxMjEsCisgICAgMSwwLDAsMjE4LDYsMTA4LDExMSw5OSw5NywxMDgsMTE1LDExNCwxMTksMSwwLDAsCisgICAgMTE0LDEwMiwxLDAsMCwxMTQsMTc5LDAsMCwwLDkwLDgsMTAzLDEwOCwxMTEsOTgsCisgICAgOTcsMTA4LDExNSw5NSwxMTQsMTAxLDEsMCwwLDkwLDcsOTksMTE3LDExNiw5NSwxMTEsCisgICAgMTAyLDEwMiwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwyMTgsMTAsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMjUwLDgsMCwKKyAgICAwLDExNSwyNiwwLDAsMCwwLDExLDEyLDEsMTUsMiwyNCwxLDEyLDEsCisgICAgMTgsMSw2LDMsMTIsMSwyMywxLDYsMSw0LDQsMzUsMyw0MCwyLAorICAgIDExNCwxMjUsMSwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwKKyAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNjgsMCwwLDAsMTE2LAorICAgIDAsMCwxMDYsMSwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsMSwwLDEyNCwxLAorICAgIDAsMTAwLDAsMCwxMDcsOCwwLDExNCw0NiwwLDExNiwyLDAsMTAwLDEsMCwKKyAgICAxMjQsMCwwLDIzLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDExNiwzLDAsCisgICAgMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTI0LDIsMCwxMDYsNCwwLDEzMSwKKyAgICAwLDAsODMsNDEsMiw3OCwxMjIsMjUsMTEwLDExMSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsCisgICAgNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsCisgICAgMzIsNDEsNSwxMTQsNywxLDAsMCwxMTQsMTAsMSwwLDAsMTE0LDE1MywwLAorICAgIDAsMCwxMTQsMTc0LDAsMCwwLDExNCw2LDEsMCwwLDQxLDMsMTE0LDY3LAorICAgIDAsMCwwLDExNCwxNzcsMCwwLDAsMTE0LDE3OCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTgsOTUsOTgsCisgICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDExMCw5NywxMDksMTAxLAorICAgIDI5LDksMCwwLDExNSwxMCwwLDAsMCwwLDEsMTUsMSwxMiwxLDE5LAorICAgIDEsMTIsMSwxMTQsMTI2LDEsMCwwLDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwxOSwwLDAsMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsMjMyLDIsCisgICAgMCwwLDEyNCwxLDAsOTcsMCwwLDEyNCwwLDAsOTcsMSwwLDExNiwxLAorICAgIDAsMTA2LDIsMCwxMDYsMywwLDExNCwzMywwLDExNiw0LDAsOTcsNSwwLAorICAgIDExMCw2LDAsMTE2LDYsMCw5Nyw1LDAsMTE2LDcsMCwxMTYsMSwwLDEzMSwKKyAgICAxLDAsMTI1LDIsMCwxMjAsMTM4LDAsMTE2LDEsMCwxMDYsOCwwLDEwNiw5LAorICAgIDAsMTMxLDAsMCw2OCw5MywxMjEsMCw5MiwyLDAsMTI1LDMsMCwxMjUsNCwKKyAgICAwLDExNiwxMCwwLDEyNCw0LDAsMTI0LDIsMCwxMzEsMiwwLDExNCw2NywwLAorICAgIDEyNCwzLDAsMTE2LDEsMCwxMDYsMTEsMCwxMDcsNiwwLDExNCwxMTgsMCwxMTYsCisgICAgMTIsMCwxMjUsNSwwLDExMCwyNywwLDExNiwwLDAsMTA2LDEzLDAsMTI0LDMsCisgICAgMCwxMzEsMSwwLDExNCw2NywwLDExNiwxNCwwLDEyNSw1LDAsMTEwLDMsMCwKKyAgICAxMTMsNjcsMCwxMTYsMTUsMCwxMjQsNCwwLDEyNCw1LDAsMTMxLDIsMCwxMjUsCisgICAgNiwwLDExNiwxNiwwLDEyNCw2LDAsMTMxLDEsMCwxMjUsNywwLDEyNCw3LAorICAgIDAsMTA2LDE3LDAsMTI0LDQsMCwxMzEsMSwwLDEsMTEzLDY3LDAsMTEzLDY3LAorICAgIDAsODcsMTE2LDEsMCwxMDYsOCwwLDExNiwxOCwwLDI1LDEyNSw4LDAsMTIwLAorICAgIDczLDAsMTAwLDI2LDAsNjgsOTMsNjUsMCwxMjUsOSwwLDEyNCw5LDAsMTE2LAorICAgIDEsMCwxMDYsOCwwLDEwNyw3LDAsMTE0LDI0OCwwLDExNiwxOSwwLDEyNCw5LAorICAgIDAsMTMxLDEsMCwxMjUsMTAsMCwxMTAsMTMsMCwxMTYsMSwwLDEwNiw4LDAsCisgICAgMTI0LDksMCwyNSwxMjUsMTAsMCwxMTYsMjAsMCwxMjQsOCwwLDEyNCw5LDAsCisgICAgMTI0LDEwLDAsMTMxLDMsMCwxLDExMywyMTIsMCw4NywxMDAsNSwwLDEwMCw2LAorICAgIDAsMTAzLDEsMCwxMDIsMiwwLDEwMCw3LDAsMTAwLDgsMCwxMDAsNiwwLAorICAgIDEwMywyLDAsMTAyLDIsMCwxMDIsMiwwLDEyNSwxMSwwLDEyMCwxNDYsMCwxMjQsCisgICAgMTEsMCw2OCw5MywxMjYsMCw5MiwyLDAsMTI1LDEyLDAsMTI1LDEzLDAsMTE2LAorICAgIDIxLDAsMTAwLDksMCwxMDAsMTAsMCwxMzIsMCwwLDEyNCwxMywwLDY4LDEzMSwKKyAgICAxLDAsMTMxLDEsMCwxMTUsMTA4LDEsMTE2LDIyLDAsMTMwLDEsMCwxMjQsMTMsCisgICAgMCwxMDAsMTEsMCwyNSwxMjUsMTQsMCwxMjQsMTIsMCwxMTYsMSwwLDEwNiw4LAorICAgIDAsMTA3LDYsMCwxMTQsMTUwLDEsMTE2LDEsMCwxMDYsOCwwLDEyNCwxMiwwLAorICAgIDI1LDEyNSwxNSwwLDgwLDExMyw2NSwxLDEyMSwxNywwLDExNiwxOSwwLDEyNCwxMiwKKyAgICAwLDEzMSwxLDAsMTI1LDE1LDAsODAsODcsMTEzLDY1LDEsNCwxMTYsMjMsMCwKKyAgICAxMDcsMTAsMCwxMTQsMTkwLDEsMSwxLDEsMTE5LDY1LDEsODksMTEzLDY1LDEsCisgICAgODgsMTEzLDY1LDEsODcsMTE2LDIzLDAsMTAwLDEyLDAsMTMxLDEsMCwxMzAsMSwKKyAgICAwLDExNiwyMCwwLDEyNCw4LDAsMTAwLDEzLDAsMTI0LDE1LDAsMTMxLDMsMCwKKyAgICAxLDExNiwyMCwwLDEyNCw4LDAsMTAwLDE0LDAsMTI0LDE0LDAsMTMxLDMsMCwKKyAgICAxLDExNiwyMCwwLDEyNCw4LDAsMTAwLDE1LDAsMTAwLDE2LDAsMTA2LDI0LDAsCisgICAgMTI0LDEzLDAsMTMxLDEsMCwxMzEsMywwLDEsMTIxLDE2LDAsMTE2LDE5LDAsCisgICAgMTAwLDE3LDAsMTMxLDEsMCwxMjUsMTYsMCw4NywxMTAsMjQsMCw0LDExNiwyMywKKyAgICAwLDEwNywxMCwwLDExNCw1MCwyLDEsMSwxLDEwMCwxOCwwLDEyNSwxNiwwLAorICAgIDg5LDExMCwxLDAsODgsMTE2LDIwLDAsMTI0LDgsMCwxMDAsMTcsMCwxMjQsMTYsCisgICAgMCwxMzEsMywwLDEsMTE2LDE5LDAsMTAwLDE5LDAsMTMxLDEsMCwxMjUsMTcsCisgICAgMCwxMTYsMjAsMCwxMjQsOCwwLDEwMCwxOSwwLDEyNCwxNywwLDEzMSwzLDAsCisgICAgMSwxMjQsMTIsMCwxMDAsNywwLDEwNywyLDAsMTE0LDEzOCwyLDExNiwxOSwwLAorICAgIDEwMCwyMCwwLDEzMSwxLDAsMTI1LDE4LDAsMTE2LDIwLDAsMTI0LDgsMCwxMDAsCisgICAgMjEsMCwxMjQsMTgsMCwxMzEsMywwLDEsMTEwLDAsMCwxMTYsMjAsMCwxMjQsCisgICAgOCwwLDEwMCwyMiwwLDExNiwyNSwwLDEzMSwwLDAsMTMxLDMsMCwxLDExNiwKKyAgICAyNiwwLDEwNiwyNywwLDExNiwwLDAsMTA2LDI4LDAsMTMxLDAsMCwxMzEsMSwKKyAgICAwLDEsMTI0LDEyLDAsMTAwLDcsMCwxMDcsMiwwLDExNCwyMjgsMiwxMTYsMjksCisgICAgMCwxMDYsMzAsMCwxMDAsMjMsMCwxMzEsMSwwLDEsMTAwLDI0LDAsMTE2LDI2LAorICAgIDAsMTA3LDYsMCwxMTQsMjI4LDIsMTAwLDI1LDAsMTE2LDMxLDAsOTUsMzIsMCwKKyAgICAxMTMsMjI4LDIsMTEwLDAsMCwxMDAsMTgsMCw4Myw0MSwyNywxMjIsMjUwLDgzLDEwMSwKKyAgICAxMTYsMTE3LDExMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDk4LDEyMSwKKyAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLDEwMywzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLAorICAgIDEwMCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMDUsMTEwLDEwNiwxMDEsOTksMTE2LDEwNSwxMTAsMTAzLAorICAgIDMyLDExNiwxMDQsMTAxLDEwOSwxMCwzMiwzMiwzMiwzMiwxMDUsMTEwLDExNiwxMTEsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LDExNSwzMiwxMTUsMTIxLDExNSwKKyAgICAzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDExNSwKKyAgICAxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5Nyw5OSw5OSwxMDEsMTE1LAorICAgIDExNSwzMiw5NywxMTAsMTAwLDMyLDk1LDEwNSwxMDksMTEyLDMyLDEwNSwxMTUsMzIsMTEwLDEwMSwKKyAgICAxMDEsMTAwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDgsMTExLDk3LDEwMCwzMiw5OCwxMTcsMTA1LAorICAgIDEwOCwxMTYsNDUsMTA1LDExMCwxMCwzMiwzMiwzMiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAxMTUsNDQsMzIsMTE2LDEwNCwxMTEsMTE1LDEwMSwzMiwxMTYsMTE5LDExMSwzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiwxMDEsMTIwLDExMiwKKyAgICAxMDgsMTA1LDk5LDEwNSwxMTYsMTA4LDEyMSwzMiwxMTIsOTcsMTE1LDExNSwxMDEsMTAwLDMyLDEwNSwKKyAgICAxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LDQ5LDAsMCwwLDExNCwxNjYsMCwKKyAgICAwLDAsMjE4LDgsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE1LDExNCwxOTEsMCwwLAorICAgIDAsOTAsNSwxMTIsMTExLDExNSwxMDUsMTIwLDI1MCwxLDQ3LDIxOCwyLDExMCwxMTYsMjUwLAorICAgIDEsOTIsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywKICAgICAwLDAsMCwxMTUsMCwwLDAsMTE1LDMzLDAsMCwwLDEyNCwwLDAsOTMsCiAgICAgMjMsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEwMCwwLAotICAgIDAsMTA3LDIsMCw4NiwxLDExMywzLDAsMTAwLDEsMCw4Myw0MCwyLDAsCi0gICAgMCwwLDEwNSwxLDAsMCwwLDc4LDQwLDEsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsMTA4LDEwMSwxMTAsNDAsMiwwLDAsMCwxMTcsMiwwLDAsMCw0NiwKLSAgICA0OCwxMTcsMywwLDAsMCwxMTUsMTAxLDExMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsCi0gICAgMTEyLDExNCw2MiwxOTEsNiwwLDAsMTE1LDIsMCwwLDAsNiwwLDExNywyNSwKLSAgICAwLDAsMCw5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LAotICAgIDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTA1LDAsMCwwLAotICAgIDAsMTE3LDcsMCwwLDAsNjksNzcsODgsMzIsNzEsNjcsNjcsMTA1LDEsMCwKLSAgICAwLDAsMTE3LDMwLDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTIsMTExLDExNSwxMDUsMTIwLDMyLAotICAgIDExMSwxMTQsMzIsMTEwLDExNiwxMTcsNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsCi0gICAgMTAwLDExNyw4LDAsMCwwLDk1LDExOSwxMDEsOTcsMTA3LDExNCwxMDEsMTAyLDExNyw2LAotICAgIDAsMCwwLDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDExNyw3LDAsMCwwLDk1LDExOSwKLSAgICAxMDUsMTEwLDExNCwxMDEsMTAzLDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDgsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDE1LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDExLAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDExNyw0LAotICAgIDAsMCwwLDQ2LDExMiwxMjEsMTE5LDExNyw2LDAsMCwwLDk1LDEwMCw0NiwxMTIsCi0gICAgMTIxLDEwMCw3OCw0MCw0LDAsMCwwLDExNywzLDAsMCwwLDk1LDEwNSwxMTEsCi0gICAgMTE3LDksMCwwLDAsOTUsMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDExNyw4LAotICAgIDAsMCwwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNSwxMTcsNywwLDAsMCwKLSAgICAxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDg0LDQwLDM1LDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDk1LDEwNSwxMDksMTEyLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw1LAotICAgIDAsMCwwLDEwMiwxMDgsOTcsMTAzLDExNSwxMTcsOCwwLDAsMCwxMTEsMTEyLDExNiwKLSAgICAxMDUsMTA5LDEwNSwxMjIsMTAxLDExNywyNywwLDAsMCw3OSw4MCw4NCw3Myw3Nyw3MywKLSAgICA5MCw2OSw2OCw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCwKLSAgICA3MCw3Myw4OCw2OSw4MywxMTcsMTcsMCwwLDAsNjYsODksODQsNjksNjcsNzksCi0gICAgNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LDIzLDAsMCwwLAotICAgIDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LDgzLAotICAgIDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNyw0LDAsMCwwLDExNiwxMjEsMTEyLDEwMSwKLSAgICAxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDUsMCwwLAotICAgIDAsMTA1LDExNiwxMDEsMTA5LDExNSwxMTcsMTAsMCwwLDAsMTA1LDExNSwxMDUsMTEwLDExNSwKLSAgICAxMTYsOTcsMTEwLDk5LDEwMSwxMTcsNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsCi0gICAgMTE0LDExNywyMCwwLDAsMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTE3LDE1LDAsMCwwLDY2LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMTAsCi0gICAgMCwwLDAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwxMTcsOSwwLAotICAgIDAsMCwxMDUsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNywxNCwwLDAsMCwKLSAgICA3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTEsMCwwLDAsCi0gICAgMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDcsMCwwLDAsCi0gICAgMTE1LDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMTE3LDMsMCwwLDAsOTcsMTA4LDEwOCwxMTcsCi0gICAgMTQsMCwwLDAsNjUsMTE1LDExNSwxMDEsMTE0LDExNiwxMDUsMTExLDExMCw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDcsMCwwLDAsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNywxMSwKLSAgICAwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNCwKLSAgICAwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLDAsMCwxMTUsMTAxLDExNiwxMTcsCi0gICAgMTYsMCwwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LAotICAgIDk5LDk3LDExNSwxMDEsMTE3LDE4LDAsMCwwLDY5LDg4LDg0LDY5LDc4LDgzLDczLAotICAgIDc5LDc4LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNyw2LDAsMCwwLAotICAgIDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDExNywxOCwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLAotICAgIDExNSwxMDUsMTExLDExMCw5NSwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDExNywxNSwwLAotICAgIDAsMCw4Myw3OSw4NSw4Miw2Nyw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSwKLSAgICA4MywxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDExNywyMSwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LAotICAgIDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsCi0gICAgMTEsMCwwLDAsNjgsNjksNjYsODUsNzEsOTUsNjYsODUsNzMsNzYsNjgsNDAsCi0gICAgMTYsMCwwLDAsMTE3LDEwLDAsMCwwLDExNSwxMjEsMTE1LDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNywxMSwwLDAsMCw5NSwxMDUsMTA5LDExMiw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE2LAotICAgIDEyMSwxMTIsMTAxLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw2LDAsMCwKLSAgICAwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEyLDAsMCwwLDk4LDExNywxMDUsMTA4LAotICAgIDExNiwxMDUsMTEwLDk1LDExMCw5NywxMDksMTAxLDExNywxNCwwLDAsMCw5OCwxMTcsMTA1LAotICAgIDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTAsMCwwLDAsCi0gICAgMTExLDExNSw5NSwxMDAsMTAxLDExNiw5NywxMDUsMTA4LDExNSwxMTcsMTAsMCwwLDAsOTgsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTExLDExNSwxMTcsMTUsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsOTcsMTE0LDk3LDExNiwxMTEsMTE0LDExNSwxMTcsOCwwLAotICAgIDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiwxMTcsOSwwLDAsMCwxMTEsCi0gICAgMTE1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMywwLDAsMCwxMTYsMTA0LDExNCwKLSAgICAxMDEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxNCwwLDAsMCwxMTksCi0gICAgMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTMsMCwKLSAgICAwLDAsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNiwwLDAsMCwKLSAgICA5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDE1NCw2LDAsMCwxMTUsMTA2LDAsMCwwLDAsCi0gICAgOSw2LDEsNiwyLDEyLDEsOSwyLDYsMiwxMiwxLDI4LDEsMTUsCi0gICAgMSwxNSwxLDE1LDEsMTIsMSwxNSwxLDIyLDIsMTMsMSwxMywxLDE1LAotICAgIDEsMTgsMiwxMywxLDIwLDIsNDgsMSwxOSwyLDMxLDEsMTAsMSwxNSwKLSAgICAxLDEzLDEsNCwyLDMsMSwxNSwyLDI3LDEsMTMsMSw1LDEsMTMsCi0gICAgMSwxMiwyLDEyLDIsMywxLDE5LDEsMTMsMiwxMSwxLDE1LDIsMTIsCi0gICAgMSwxNSwxLDE5LDIsMTYsMSwxNiwxLDE2LDEsMTYsMSwyMiwyLDE5LAotICAgIDEsMTksMSwxMiwxLDEzLDEsMTIsMSwxMTcsNiwwLDAsMCw5NSwxMTUsCi0gICAgMTAxLDExNiwxMTcsMTEyLDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwKLSAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEzNiwwLDAsMCwxMTYsMCwKLSAgICAwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDEsMTE2LDEsMCwxMzEsMCwKLSAgICAwLDEyNSwyLDAsMTE2LDIsMCwxMDYsMywwLDEwNiw0LDAsMTE2LDUsMCwKLSAgICAxMDYsNiwwLDEyNCwyLDAsMTQwLDAsMCwxMDMsMSwwLDEzMSwxLDAsMSwKLSAgICAxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsOSwwLDEzMSwxLDAsMSwKLSAgICAxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTAsMCwxMzEsMSwwLDEsCi0gICAgMTE2LDExLDAsMTA2LDEyLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwxMTYsMCwxMTYsCi0gICAgMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTMsMCwxMzEsMSwwLDEsMTEwLAotICAgIDAsMCwxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTQsMCwxMzEsMSwKLSAgICAwLDEsMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNyw1MCwwLDAsMCwKLSAgICA3MywxMTAsMTE1LDExNiw5NywxMDgsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwKLSAgICAxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDQ2LDExNywyLDAsMCwwLDExMCwxMTYsNzgsNDAsMTUsMCwwLDAsMTE3LAotICAgIDYsMCwwLDAsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiwxMTcsMjcsMCwwLDAsOTUsCi0gICAgMTAzLDEwMSwxMTYsOTUsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNywzLDAsMCwwLDExNSwKLSAgICAxMjEsMTE1LDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsCi0gICAgMTE1LDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDExNywxMCwwLDAsCi0gICAgMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNyw5LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTcsOSwwLDAsMCwxMDksMTAxLAotICAgIDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwKLSAgICAxMTAsMTAwLDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywzLDAsMCwwLDk1LDExMSwKLSAgICAxMTUsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDIxLAotICAgIDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsCi0gICAgMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywxMCwwLDAsMCw4MCw5NywxMTYsCi0gICAgMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDAsMywwLDAsMCwxMTcsMTAsMCwwLAotICAgIDAsMTE1LDEyMSwxMTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLAotICAgIDk1LDEwNSwxMDksMTEyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxNywwLDAsMCwKLSAgICAxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDExNSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsCi0gICAgMCwwLDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDIzMyw2LDAsMCwxMTUsMTYsCi0gICAgMCwwLDAsMCwyLDEzLDEsOSwxLDI4LDEsMTYsMSwxNiwxLDE1LAotICAgIDEsMTksMSwxMTcsOCwwLDAsMCw5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwKLSAgICA3OCw0MCwzLDAsMCwwLDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNyw2LAotICAgIDAsMCwwLDk5LDEyMSwxMDMsMTE5LDEwNSwxMTAsMTE3LDYsMCwwLDAsMTAwLDk3LAotICAgIDExNCwxMTksMTA1LDExMCw0MCw3NCwwLDAsMCwxMTcsNywwLDAsMCw5NSw5NSwKLSAgICAxMDAsMTExLDk5LDk1LDk1LDExNywyNywwLDAsMCw5NSw2Nyw2NSw4Myw2OSw5NSwKLSAgICA3Myw3OCw4Myw2OSw3OCw4Myw3Myw4NCw3Myw4Niw2OSw5NSw4MCw3Niw2NSw4NCwKLSAgICA3MCw3OSw4Miw3Nyw4MywxMTcsMTYsMCwwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsCi0gICAgMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMTE3LDcsMCwwLDAsOTUsCi0gICAgMTE5LDk1LDEwOCwxMTEsMTEwLDEwMywxMTcsNywwLDAsMCw5NSwxMTQsOTUsMTA4LDExMSwKLSAgICAxMTAsMTAzLDExNywxMCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwKLSAgICAxMTAsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwKLSAgICAxMTYsMTE3LDE4LDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsOTUsMTA5LAotICAgIDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsMTIsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTE3LDEzLDAsMCwwLDk1LDExOSwKLSAgICAxMTQsMTA1LDExNiwxMDEsOTUsOTcsMTE2LDExMSwxMDksMTA1LDk5LDExNyw1LDAsMCwwLAotICAgIDk1LDExOSwxMTQsOTcsMTEyLDExNyw0LDAsMCwwLDExNiwxMjEsMTEyLDEwMSwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSw5OSwxMTEsMTAwLDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNywxMCwwLDAsMCwxMTAsCi0gICAgMTAxLDExOSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTMsMCwwLDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE1LDExNywxMiwwLDAsMCwKLSAgICA5NSw5OCwxMDgsMTExLDk5LDEwNywxMDUsMTEwLDEwMyw5NSwxMTEsMTEwLDExNywxMiwwLDAsCi0gICAgMCw4MiwxMTcsMTEwLDExNiwxMDUsMTA5LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDE0LDAsCi0gICAgMCwwLDk1LDY4LDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDExNywxMSwwLDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsCi0gICAgMTE3LDE2LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDc2LDExMSw5OSwxMDcsMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNywxOSwwLDAsMCw5NSwKLSAgICAxMDgsMTExLDk5LDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LAotICAgIDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwKLSAgICAxMTcsMywwLDAsMCwxMTEsMTE0LDEwMCwxMTcsMTcsMCwwLDAsOTUsODIsNjUsCi0gICAgODcsOTUsNzcsNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsMTE3LDUsCi0gICAgMCwwLDAsOTgsMTIxLDExNiwxMDEsMTE1LDExNyw1LDAsMCwwLDExNCw5NywxMTAsCi0gICAgMTAzLDEwMSwxMTcsMTIsMCwwLDAsOTUsNzcsNjUsNzEsNzMsNjcsOTUsNjYsODksCi0gICAgODQsNjksODMsMTE3LDgsMCwwLDAsOTUsODAsODksNjcsNjUsNjcsNzIsNjksCi0gICAgMTE3LDE1LDAsMCwwLDgzLDc5LDg1LDgyLDY3LDY5LDk1LDgzLDg1LDcwLDcwLAotICAgIDczLDg4LDY5LDgzLDExNywyMywwLDAsMCw2OCw2OSw2Niw4NSw3MSw5NSw2NiwKLSAgICA4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywKLSAgICAxMTcsMjcsMCwwLDAsNzksODAsODQsNzMsNzcsNzMsOTAsNjksNjgsOTUsNjYsCi0gICAgODksODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsCi0gICAgMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDE3LDAsMCwwLDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LAotICAgIDE3LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LAotICAgIDk5LDk3LDk5LDEwNCwxMDEsMTE3LDE1LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExNSwKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsMTAyLDEwNSwxMDgsMTAxLDExNywxNiwwLDAsMCw5NSwxMTgsCi0gICAgMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywxMCwKLSAgICAwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNywwLAotICAgIDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDExNywxMSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMTcsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTcsMTYsMCwwLDAsOTUsMTE0LAotICAgIDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsMTcsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDExNSwxMDQsMTA1LDEwOSwxMTcsMTUsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsCi0gICAgNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywxNCwwLDAsMCw3MCwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMjEsMCwwLDAsCi0gICAgODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDEzLDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSwxMTcsMTIsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwKLSAgICAxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywyMCwwLDAsCi0gICAgMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTgsMCwwLDAsNjksODgsODQsNjksNzgsODMsCi0gICAgNzMsNzksNzgsOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LDE5LDAsMCwKLSAgICAwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNywxNCwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsMTE3LDE1LDAsMCwwLDc4LDk3LDEwOSwxMDEsCi0gICAgMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMCwwLDAsMCwKLSAgICA4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDEwLDAsMCwwLDcwLAotICAgIDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDE4LDAsMCwwLDk1LDczLAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwKLSAgICAxMTcsMTMsMCwwLDAsOTUsMTE0LDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDk1LDExMCw5NywKLSAgICAxMDksMTAxLDExNywxMiwwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDEzLDAsMCwwLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsCi0gICAgOTksMTA0LDEwMSw5OSwxMDcsMTE3LDgsMCwwLDAsOTUsNjksODIsODIsOTUsNzcsCi0gICAgODMsNzEsMTE3LDIzLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsMTAxLDEwMCwxMTcsMTQsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywKLSAgICAxMDAsMTE3LDExLDAsMCwwLDk1LDEwMyw5OSwxMDAsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTE3LDE2LDAsMCwwLDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLDExNCwKLSAgICAxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwxMTcsMTcsMCwwLDAsOTUsOTksOTcsMTA4LDk5LAotICAgIDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMTcsMjcsMCwwLAotICAgIDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNywxMCwwLDAsCi0gICAgMCw5NSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSwxMTcsNiwwLDAsMCwKLSAgICA5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDExNyw4LDAsMCwwLDk1LDEwNSwxMTAsMTE1LDExNiwKLSAgICA5NywxMDgsMTA4LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA2Miw4LDAsMCwwLDExNSwxMzIsMCwwLDAsNiwyMSw2LDMsMTIsMTMsCi0gICAgMTIsMTYsMTIsMTMsMTIsMTIsMTIsMTIsMTIsMTAsMTIsNiwxMiw3LDE1LDIyLAotICAgIDEyLDgsMTUsMywxMiwxMiw2LDIsNiwzLDIyLDQsMTksNjgsMTksMjMsCi0gICAgMTIsMTksMTIsMjAsMTIsMTAwLDM0LDEsMzcsMiw2LDIsOSwyLDksMSwKLSAgICA5LDIsMTUsMjcsMTIsMjMsMTIsMTksMTgsOCwxMiwxMywxMiwxMSwxMiw1NSwKLSAgICAxMiwxOCwxMiwxMSwxMiwxMSwxMiwxNywxOSw1NywxOSw1NCwxOSw1MCwxOSw4MywKLSAgICAyMiwxMzQsMTksMjksMjUsNDksMjUsMjUsNiwzLDE5LDQ1LDE5LDU1LDE5LDE4LAotICAgIDE5LDkxLDE5LDEyOCwxOSwxMywxMiw5LDEyLDE3LDEyLDE3LDYsMiwxMiw1MCwKLSAgICAxMiwxMywxOCwyNCwxMiwzNCwxMiwxNSwxMiwxMSwyNCwzNiwxMiw3OSwKKyAgICAwLDEwNywyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsNDEsMiwxMTQsCisgICAgMjksMCwwLDAsNzgsNDEsMSwxMTQsMzEsMCwwLDAsNDEsMiwxMTQsMjIsCisgICAgMCwwLDAsMTE0LDEzMCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsNzcsMCwwLDAsODEsOSwwLDAsCisgICAgMTE1LDIsMCwwLDAsNiwwLDEyMiwyNSw5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDQ2LAorICAgIDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwKKyAgICAxMTQsNjIsMTE0LDg0LDAsMCwwLDEyMiwzMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCisgICAgMTA1LDk4LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTEyLDExMSwxMTUsMTA1LAorICAgIDEyMCwzMiwxMTEsMTE0LDMyLDExMCwxMTYsMTE0LDMsMCwwLDAsMTE0LDI1LDAsMCwKKyAgICAwLDExNCwyMSwwLDAsMCwxMTQsMzAsMCwwLDAsMTE0LDg1LDAsMCwwLAorICAgIDc4LDExNCwxMTEsMCwwLDAsOTAsNiwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywxMTQsMjAsCisgICAgMSwwLDAsMTE0LDYsMCwwLDAsMTIyLDQsNDYsMTEyLDEyMSwxMTksMTIyLDYsCisgICAgOTUsMTAwLDQ2LDExMiwxMjEsMTAwLDg0LDQxLDQsMTIyLDMsOTUsMTA1LDExMSwxMjIsOSwKKyAgICA5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsMTIyLDgsOTgsMTE3LDEwNSwxMDgsMTE2LAorICAgIDEwNSwxMTAsMTE1LDEyMiw3LDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsNDEsMzMsMTE0LDEwNiwKKyAgICAwLDAsMCwxMTQsNywwLDAsMCwxMTQsMTE3LDAsMCwwLDExNCwxMTgsMCwKKyAgICAwLDAsMTE0LDEyMCwwLDAsMCwxMTQsMjMyLDAsMCwwLDExNCwxMTksMCwwLAorICAgIDAsMTE0LDY2LDAsMCwwLDExNCw3MywwLDAsMCwyMTgsNSwxMDUsMTE2LDEwMSwKKyAgICAxMDksMTE1LDExNCwxOTIsMCwwLDAsMTE0LDE1NywwLDAsMCwxMTQsNywxLDAsCisgICAgMCwxMTQsMTYyLDAsMCwwLDExNCwxNiwxLDAsMCwxMTQsMjQ3LDAsMCwwLAorICAgIDExNCwxNzQsMCwwLDAsMTE0LDI1NCwwLDAsMCwxMTQsNTcsMCwwLDAsMTE0LAorICAgIDEyNiwxLDAsMCwxMTQsNjEsMCwwLDAsMjE4LDMsOTcsMTA4LDEwOCwxMTQsMTAwLAorICAgIDAsMCwwLDExNCwxNTMsMCwwLDAsMTE0LDI2LDAsMCwwLDExNCwxMSwwLAorICAgIDAsMCwxMTQsNTgsMSwwLDAsMTE0LDE5NywwLDAsMCwxMTQsMTIzLDEsMCwKKyAgICAwLDExNCwxMzQsMCwwLDAsMTE0LDIyMywwLDAsMCwxMTQsMTksMSwwLDAsCisgICAgMTE0LDIzLDEsMCwwLDQxLDE5LDIxOCwxMCwxMTUsMTIxLDExNSw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwyMTgsMTEsOTUsMTA1LDEwOSwxMTIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgOTAsMTEsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNCw2NywwLAorICAgIDAsMCwxMTQsMTc5LDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDE3NywwLDAsCisgICAgMCwxMTQsMTc4LDAsMCwwLDkwLDExLDExNSwxMDEsMTA4LDEwMiw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw5MCwxMiw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTAsOTcsMTA5LAorICAgIDEwMSw5MCwxNCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSw5MCwxMCwxMTEsMTE1LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LDkwLDEwLDk4LAorICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExMSwxMTUsMTE0LDIxLDAsMCwwLDExNCwyNSwKKyAgICAwLDAsMCw5MCw5LDExMSwxMTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTMsCisgICAgMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxNCwxMTksCisgICAgMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxMywxMTksCisgICAgMTA1LDExMCwxMTQsMTAxLDEwMyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsNiw5NSwxMTUsMTAxLAorICAgIDExNiwxMTcsMTEyLDM3LDksMCwwLDExNSwxMDgsMCwwLDAsMCw5LDYsMSwKKyAgICA2LDIsMTIsMSw5LDIsNiwzLDEyLDEsMjgsMSwxNSwxLDE1LDEsCisgICAgOSwxLDE1LDEsOSwyLDMsMSwxNSwxLDEyLDEsMjAsMywxMywxLAorICAgIDEzLDEsMTUsMSwxNSwyLDEzLDEsMjAsMywzMywxLDE5LDIsMzEsMSwKKyAgICAxMCwxLDE1LDEsMTMsMSw0LDIsMywxLDEyLDEsNSwxLDEzLDEsCisgICAgMTIsMiwxMiwxLDE2LDEsMTYsMSwyNSwzLDMsMSwxNiwxLDEzLDIsCisgICAgMTEsMSwxNiwzLDEyLDEsMTYsMywxMiwxLDEyLDEsMTksMywxOSwxLAorICAgIDE5LDEsMTIsMSwxMywxLDEyLDEsMTE0LDEzNSwxLDAsMCw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwxMzYsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEyNCwxLDAsCisgICAgMTMxLDIsMCwxLDExNiwxLDAsMTMxLDAsMCwxMjUsMiwwLDExNiwyLDAsCisgICAgMTA2LDMsMCwxMDYsNCwwLDExNiw1LDAsMTA2LDYsMCwxMjQsMiwwLDE0MCwKKyAgICAwLDAsMTAzLDEsMCwxMzEsMSwwLDEsMTE2LDIsMCwxMDYsNywwLDEwNiwKKyAgICA4LDAsMTE2LDksMCwxMzEsMSwwLDEsMTE2LDIsMCwxMDYsNywwLDEwNiwKKyAgICA4LDAsMTE2LDEwLDAsMTMxLDEsMCwxLDExNiwxMSwwLDEwNiwxMiwwLDEwMCwKKyAgICAxLDAsMTA3LDIsMCwxMTQsMTE2LDAsMTE2LDIsMCwxMDYsNywwLDEwNiw4LAorICAgIDAsMTE2LDEzLDAsMTMxLDEsMCwxLDExMCwwLDAsMTE2LDIsMCwxMDYsNywKKyAgICAwLDEwNiw4LDAsMTE2LDE0LDAsMTMxLDEsMCwxLDEwMCwyLDAsODMsNDEsCisgICAgMywxMjIsNTAsNzMsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAorICAgIDExNiwxMDgsMTA1LDk4LDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsCisgICAgMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsMTA5LAorICAgIDExMiwxMTEsMTE0LDExNiw0NiwxMTQsMTI5LDEsMCwwLDc4LDQxLDE1LDExNCwxMzUsMSwKKyAgICAwLDAsMTE0LDI0MCwwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzcsMSwwLAorICAgIDAsMTE0LDE5NywwLDAsMCwxMTQsODUsMSwwLDAsMTE0LDk5LDEsMCwwLAorICAgIDExNCwxMDUsMSwwLDAsMTE0LDIyMywwLDAsMCwxMTQsNywxLDAsMCwxMTQsCisgICAgMTYsMSwwLDAsMTE0LDMsMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwxOSwKKyAgICAxLDAsMCwxMTQsNzIsMSwwLDAsNDEsMywxMTQsMTMzLDEsMCwwLDExNCwKKyAgICAxMzQsMSwwLDAsOTAsMTcsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsCisgICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsCisgICAgMTI0LDksMCwwLDExNSwxNiwwLDAsMCwwLDIsMTMsMSw5LDEsMjgsCisgICAgMSwxNiwxLDE2LDEsMTUsMSwxOSwxLDExNCwxMzYsMSwwLDAsNDEsMywKKyAgICAxMjIsMywxMTksMTA1LDExMCwxMTQsMSwwLDAsMCwxMTQsMiwwLDAsMCw0MSwKKyAgICA5MSwxMTQsNTksMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwKKyAgICAxMTQsMTcsMCwwLDAsMTE0LDE5LDAsMCwwLDExNCwyOCwwLDAsMCwxMTQsCisgICAgMzgsMCwwLDAsMTE0LDM5LDAsMCwwLDExNCw0MywwLDAsMCwxMTQsNDQsCisgICAgMCwwLDAsMTE0LDQ2LDAsMCwwLDExNCw1NSwwLDAsMCwxMTQsNjUsMCwKKyAgICAwLDAsMTE0LDY4LDAsMCwwLDExNCw2NiwwLDAsMCwyMTgsOCw5NSw5NSwKKyAgICA5OSwxMTEsMTAwLDEwMSw5NSw5NSwxMTQsMTkzLDAsMCwwLDExNCw2OSwwLDAsMCwKKyAgICAxMTQsMTA5LDAsMCwwLDExNCw5MiwwLDAsMCwxMTQsOTksMCwwLDAsMTE0LAorICAgIDgyLDAsMCwwLDExNCw4MywwLDAsMCwxMTQsMTAyLDAsMCwwLDExNCwxMDMsCisgICAgMCwwLDAsMTE0LDEwNSwwLDAsMCwxMTQsMTEyLDAsMCwwLDExNCwxMTQsMCwKKyAgICAwLDAsMTE0LDE1LDAsMCwwLDExNCwxODUsMCwwLDAsMTE0LDE0LDAsMCwKKyAgICAwLDExNCwxOCwwLDAsMCw5MCwxNyw5NSw4Miw2NSw4Nyw5NSw3Nyw2NSw3MSwKKyAgICA3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4MiwxMTQsMTI1LDAsMCwwLDExNCwxMzQsCisgICAgMCwwLDAsMTE0LDExOSwwLDAsMCwxMTQsMTIwLDAsMCwwLDExNCwxMzIsMCwKKyAgICAwLDAsMTE0LDEzNSwwLDAsMCwxMTQsMTQyLDAsMCwwLDExNCwxNDQsMCwwLAorICAgIDAsMTE0LDE1MiwwLDAsMCwxMTQsMTU2LDAsMCwwLDExNCwxNjEsMCwwLDAsCisgICAgMTE0LDE2NCwwLDAsMCwxMTQsMTcyLDAsMCwwLDExNCwxODAsMCwwLDAsMTE0LAorICAgIDE5MCwwLDAsMCwxMTQsMTk1LDAsMCwwLDExNCwxOTgsMCwwLDAsMTE0LDIwMywKKyAgICAwLDAsMCwxMTQsMjExLDAsMCwwLDExNCwyMTIsMCwwLDAsMTE0LDIxNiwwLAorICAgIDAsMCwxMTQsMTczLDAsMCwwLDIxOCw2LDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTQsCisgICAgMjQxLDAsMCwwLDExNCwyMzksMCwwLDAsMTE0LDI0NywwLDAsMCwxMTQsMTc0LAorICAgIDAsMCwwLDExNCw3LDEsMCwwLDExNCwxNiwxLDAsMCwxMTQsMTksMSwKKyAgICAwLDAsMTE0LDI5LDEsMCwwLDExNCwzMCwxLDAsMCwxMTQsNDUsMSwwLAorICAgIDAsMTE0LDUwLDEsMCwwLDExNCw1NCwxLDAsMCwxMTQsNTgsMSwwLDAsCisgICAgMTE0LDU1LDEsMCwwLDExNCw1OSwxLDAsMCwxMTQsMjUxLDAsMCwwLDExNCwKKyAgICA3MiwxLDAsMCwxMTQsODUsMSwwLDAsMTE0LDEwMCwxLDAsMCwxMTQsMTAzLAorICAgIDEsMCwwLDExNCwxMDQsMSwwLDAsMTE0LDEwNiwxLDAsMCwxMTQsMTA5LDEsCisgICAgMCwwLDExNCwxMTgsMSwwLDAsMTE0LDExMCwxLDAsMCwxMTQsMTEyLDEsMCwKKyAgICAwLDExNCwxMTMsMSwwLDAsMTE0LDExNCwxLDAsMCwxMTQsMTIwLDEsMCwwLAorICAgIDExNCwxMjIsMSwwLDAsMTE0LDI0MCwwLDAsMCwxMTQsMTI1LDEsMCwwLDExNCwKKyAgICAxMjYsMSwwLDAsMTE0LDEzNSwxLDAsMCwxMTQsMTM2LDEsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCw4LDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDYyLDgsMCwwLDAsCisgICAgMTE1LDE2OCwwLDAsMCw2LDE3LDYsMywxMiwxMiwxMiw1LDEyLDUsMTIsCisgICAgNiwxMiwxMiwxMiwxMCwxMiw5LDEyLDUsMTIsNywxNSwyMiwxMiw4LDEyLAorICAgIDQsMTUsNCwxOSwyMCw2LDIsNiwzLDIyLDQsMTksNjgsMTksMjEsMTksCisgICAgMTksMTIsMTksMTIsMjAsMTIsMTEzLDIyLDEsMTgsMiw2LDIsOSwyLDksCisgICAgMSw5LDIsMTUsMjcsMTIsMjMsMTIsMTksMTIsMTIsMTgsOCwxMiwxOCwxMiwKKyAgICAxMSwxMiwxMSwxMiwxNywxMiwxNiwyMSw1NSwyMSwxMiwxOCwxMCwxMiwxNCwxMiwKKyAgICAzNiwxOSwyNywxOSwxMDYsMjQsMjIsOSwzLDEyLDEsMTUsNjMsMTgsNDUsMTksCisgICAgMjMyLDE5LDcwLDE5LDcxLDE5LDYzLDE5LDI0LDIyLDExMCwxOSw0MSwyNSw0MywyNSwKKyAgICAxNiw2LDMsMTksNTcsMTksNTcsMTksMzgsMTksMTI5LDE5LDE0NiwxOSwxMywxMiwKKyAgICA5LDEyLDksMTUsNDAsMTIsMTcsNiwxLDEwLDIsMTIsMjcsMTIsNiwxOCwKKyAgICAyNCwxMiwzMiwxMiwxNSwxMiwxMSwyNCwzNSwxMiw4LDEyLDg3LAogfTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9tYXJzaGFsLmMgYi9QeXRob24vbWFyc2hhbC5jCmluZGV4IGNjMTczMjkuLmRjNTQxMWMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9tYXJzaGFsLmMKKysrIGIvUHl0aG9uL21hcnNoYWwuYwpAQCAtMSw4ICsxLDEwIEBACiAKIC8qIFdyaXRlIFB5dGhvbiBvYmplY3RzIHRvIGZpbGVzIGFuZCByZWFkIHRoZW0gYmFjay4KLSAgIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHdyaXRpbmcgYW5kIHJlYWRpbmcgY29tcGlsZWQgUHl0aG9uIGNvZGUgb25seTsKLSAgIGEgdHJ1ZSBwZXJzaXN0ZW50IHN0b3JhZ2UgZmFjaWxpdHkgd291bGQgYmUgbXVjaCBoYXJkZXIsIHNpbmNlCi0gICBpdCB3b3VsZCBoYXZlIHRvIHRha2UgY2lyY3VsYXIgbGlua3MgYW5kIHNoYXJpbmcgaW50byBhY2NvdW50LiAqLworICAgVGhpcyBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHdyaXRpbmcgYW5kIHJlYWRpbmcgY29tcGlsZWQgUHl0aG9uIGNvZGUsCisgICBldmVuIHRob3VnaCBkaWN0cywgbGlzdHMsIHNldHMgYW5kIGZyb3plbnNldHMsIG5vdCBjb21tb25seSBzZWVuIGluCisgICBjb2RlIG9iamVjdHMsIGFyZSBzdXBwb3J0ZWQuCisgICBWZXJzaW9uIDMgb2YgdGhpcyBwcm90b2NvbCBwcm9wZXJseSBzdXBwb3J0cyBjaXJjdWxhciBsaW5rcworICAgYW5kIHNoYXJpbmcuICovCiAKICNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgogCkBAIC0zMSwxNiArMzMsMTQgQEAKICNkZWZpbmUgVFlQRV9TVE9QSVRFUiAgICAgICAgICAgJ1MnCiAjZGVmaW5lIFRZUEVfRUxMSVBTSVMgICAgICAgICAgICcuJwogI2RlZmluZSBUWVBFX0lOVCAgICAgICAgICAgICAgICAnaScKLS8qIFRZUEVfSU5UNjQgaXMgZGVwcmVjYXRlZC4gSXQgaXMgbm90Ci0gICBnZW5lcmF0ZWQgYW55bW9yZSwgYW5kIHN1cHBvcnQgZm9yIHJlYWRpbmcgaXQKLSAgIHdpbGwgYmUgcmVtb3ZlZCBpbiBQeXRob24gMy40LiAqLwotI2RlZmluZSBUWVBFX0lOVDY0ICAgICAgICAgICAgICAnSScKICNkZWZpbmUgVFlQRV9GTE9BVCAgICAgICAgICAgICAgJ2YnCiAjZGVmaW5lIFRZUEVfQklOQVJZX0ZMT0FUICAgICAgICdnJwogI2RlZmluZSBUWVBFX0NPTVBMRVggICAgICAgICAgICAneCcKICNkZWZpbmUgVFlQRV9CSU5BUllfQ09NUExFWCAgICAgJ3knCiAjZGVmaW5lIFRZUEVfTE9ORyAgICAgICAgICAgICAgICdsJwogI2RlZmluZSBUWVBFX1NUUklORyAgICAgICAgICAgICAncycKKyNkZWZpbmUgVFlQRV9JTlRFUk5FRCAgICAgICAgICAgJ3QnCisjZGVmaW5lIFRZUEVfUkVGICAgICAgICAgICAgICAgICdyJwogI2RlZmluZSBUWVBFX1RVUExFICAgICAgICAgICAgICAnKCcKICNkZWZpbmUgVFlQRV9MSVNUICAgICAgICAgICAgICAgJ1snCiAjZGVmaW5lIFRZUEVfRElDVCAgICAgICAgICAgICAgICd7JwpAQCAtNDksNiArNDksMTMgQEAKICNkZWZpbmUgVFlQRV9VTktOT1dOICAgICAgICAgICAgJz8nCiAjZGVmaW5lIFRZUEVfU0VUICAgICAgICAgICAgICAgICc8JwogI2RlZmluZSBUWVBFX0ZST1pFTlNFVCAgICAgICAgICAnPicKKyNkZWZpbmUgRkxBR19SRUYgICAgICAgICAgICAgICAgJ1x4ODAnIC8qIHdpdGggYSB0eXBlLCBhZGQgb2JqIHRvIGluZGV4ICovCisKKyNkZWZpbmUgVFlQRV9BU0NJSSAgICAgICAgICAgICAgJ2EnCisjZGVmaW5lIFRZUEVfQVNDSUlfSU5URVJORUQgICAgICdBJworI2RlZmluZSBUWVBFX1NNQUxMX1RVUExFICAgICAgICAnKScKKyNkZWZpbmUgVFlQRV9TSE9SVF9BU0NJSSAgICAgICAgJ3onCisjZGVmaW5lIFRZUEVfU0hPUlRfQVNDSUlfSU5URVJORUQgJ1onCiAKICNkZWZpbmUgV0ZFUlJfT0sgMAogI2RlZmluZSBXRkVSUl9VTk1BUlNIQUxMQUJMRSAxCkBAIC02NSwxNSArNzIsMTggQEAKICAgICBQeU9iamVjdCAqY3VycmVudF9maWxlbmFtZTsKICAgICBjaGFyICpwdHI7CiAgICAgY2hhciAqZW5kOworICAgIGNoYXIgKmJ1ZjsKKyAgICBQeV9zc2l6ZV90IGJ1Zl9zaXplOworICAgIFB5T2JqZWN0ICpyZWZzOyAvKiBkaWN0IG9uIG1hcnNoYWwsIGxpc3Qgb24gdW5tYXJzaGFsICovCiAgICAgaW50IHZlcnNpb247CiB9IFdGSUxFOwogCiAjZGVmaW5lIHdfYnl0ZShjLCBwKSBpZiAoKChwKS0+ZnApKSBwdXRjKChjKSwgKHApLT5mcCk7IFwKICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgocCktPnB0ciAhPSAocCktPmVuZCkgKihwKS0+cHRyKysgPSAoYyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugd19tb3JlKGMsIHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdfbW9yZSgoYyksIHApCiAKIHN0YXRpYyB2b2lkCi13X21vcmUoaW50IGMsIFdGSUxFICpwKQord19tb3JlKGNoYXIgYywgV0ZJTEUgKnApCiB7CiAgICAgUHlfc3NpemVfdCBzaXplLCBuZXdzaXplOwogICAgIGlmIChwLT5zdHIgPT0gTlVMTCkKQEAgLTkwLDcgKzEwMCw3IEBACiAgICAgICAgIHAtPnB0ciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKChQeUJ5dGVzT2JqZWN0ICopcC0+c3RyKSArIHNpemU7CiAgICAgICAgIHAtPmVuZCA9CiAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORygoUHlCeXRlc09iamVjdCAqKXAtPnN0cikgKyBuZXdzaXplOwotICAgICAgICAqcC0+cHRyKysgPSBQeV9TQUZFX0RPV05DQVNUKGMsIGludCwgY2hhcik7CisgICAgICAgICpwLT5wdHIrKyA9IGM7CiAgICAgfQogfQogCkBAIC0xNDYsNiArMTU2LDEzIEBACiAgICAgICAgIHdfc3RyaW5nKHMsIG4sIHApOwogfQogCitzdGF0aWMgdm9pZAord19zaG9ydF9wc3RyaW5nKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgbiwgV0ZJTEUgKnApCit7CisgICAgd19ieXRlKFB5X1NBRkVfRE9XTkNBU1QobiwgUHlfc3NpemVfdCwgdW5zaWduZWQgY2hhciksIHApOworICAgIHdfc3RyaW5nKHMsIG4sIHApOworfQorCiAvKiBXZSBhc3N1bWUgdGhhdCBQeXRob24gaW50cyBhcmUgc3RvcmVkIGludGVybmFsbHkgaW4gYmFzZSBzb21lIHBvd2VyIG9mCiAgICAyKioxNTsgZm9yIHRoZSBzYWtlIG9mIHBvcnRhYmlsaXR5IHdlJ2xsIGFsd2F5cyByZWFkIGFuZCB3cml0ZSB0aGVtIGluIGJhc2UKICAgIGV4YWN0bHkgMioqMTUuICovCkBAIC0xNTgsMTMgKzE3NSwxNyBAQAogI2VuZGlmCiAjZGVmaW5lIFB5TG9uZ19NQVJTSEFMX1JBVElPIChQeUxvbmdfU0hJRlQgLyBQeUxvbmdfTUFSU0hBTF9TSElGVCkKIAorI2RlZmluZSBXX1RZUEUodCwgcCkgZG8geyBcCisgICAgd19ieXRlKCh0KSB8IGZsYWcsIChwKSk7IFwKK30gd2hpbGUoMCkKKwogc3RhdGljIHZvaWQKLXdfUHlMb25nKGNvbnN0IFB5TG9uZ09iamVjdCAqb2IsIFdGSUxFICpwKQord19QeUxvbmcoY29uc3QgUHlMb25nT2JqZWN0ICpvYiwgY2hhciBmbGFnLCBXRklMRSAqcCkKIHsKICAgICBQeV9zc2l6ZV90IGksIGosIG4sIGw7CiAgICAgZGlnaXQgZDsKIAotICAgIHdfYnl0ZShUWVBFX0xPTkcsIHApOworICAgIFdfVFlQRShUWVBFX0xPTkcsIHApOwogICAgIGlmIChQeV9TSVpFKG9iKSA9PSAwKSB7CiAgICAgICAgIHdfbG9uZygobG9uZykwLCBwKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjAxLDEwICsyMjIsNjQgQEAKICAgICB9IHdoaWxlIChkICE9IDApOwogfQogCitzdGF0aWMgaW50Cit3X3JlZihQeU9iamVjdCAqdiwgY2hhciAqZmxhZywgV0ZJTEUgKnApCit7CisgICAgUHlPYmplY3QgKmlkOworICAgIFB5T2JqZWN0ICppZHg7CisKKyAgICBpZiAocC0+dmVyc2lvbiA8IDMgfHwgcC0+cmVmcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsgLyogbm90IHdyaXRpbmcgb2JqZWN0IHJlZmVyZW5jZXMgKi8KKworICAgIC8qIGlmIGl0IGhhcyBvbmx5IG9uZSByZWZlcmVuY2UsIGl0IGRlZmluaXRlbHkgaXNuJ3Qgc2hhcmVkICovCisgICAgaWYgKFB5X1JFRkNOVCh2KSA9PSAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlkID0gUHlMb25nX0Zyb21Wb2lkUHRyKCh2b2lkKil2KTsKKyAgICBpZiAoaWQgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnI7CisgICAgaWR4ID0gUHlEaWN0X0dldEl0ZW0ocC0+cmVmcywgaWQpOworICAgIGlmIChpZHggIT0gTlVMTCkgeworICAgICAgICAvKiB3cml0ZSB0aGUgcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBzdHJlYW0gKi8KKyAgICAgICAgbG9uZyB3ID0gUHlMb25nX0FzTG9uZyhpZHgpOworICAgICAgICBQeV9ERUNSRUYoaWQpOworICAgICAgICBpZiAodyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgfQorICAgICAgICAvKiB3ZSBkb24ndCBzdG9yZSAibG9uZyIgaW5kaWNlcyBpbiB0aGUgZGljdCAqLworICAgICAgICBhc3NlcnQoMCA8PSB3ICYmIHcgPD0gMHg3ZmZmZmZmZik7CisgICAgICAgIHdfYnl0ZShUWVBFX1JFRiwgcCk7CisgICAgICAgIHdfbG9uZyh3LCBwKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG9rOworICAgICAgICBQeV9zc2l6ZV90IHMgPSBQeURpY3RfU2l6ZShwLT5yZWZzKTsKKyAgICAgICAgLyogd2UgZG9uJ3Qgc3VwcG9ydCBsb25nIGluZGljZXMgKi8KKyAgICAgICAgaWYgKHMgPj0gMHg3ZmZmZmZmZikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ0b28gbWFueSBvYmplY3RzIik7CisgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgfQorICAgICAgICBpZHggPSBQeUxvbmdfRnJvbVNzaXplX3Qocyk7CisgICAgICAgIG9rID0gaWR4ICYmIFB5RGljdF9TZXRJdGVtKHAtPnJlZnMsIGlkLCBpZHgpID09IDA7CisgICAgICAgIFB5X0RFQ1JFRihpZCk7CisgICAgICAgIFB5X1hERUNSRUYoaWR4KTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICAqZmxhZyB8PSBGTEFHX1JFRjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorZXJyOgorICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCit3X2NvbXBsZXhfb2JqZWN0KFB5T2JqZWN0ICp2LCBjaGFyIGZsYWcsIFdGSUxFICpwKTsKKwogc3RhdGljIHZvaWQKIHdfb2JqZWN0KFB5T2JqZWN0ICp2LCBXRklMRSAqcCkKIHsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgY2hhciBmbGFnID0gJ1wwJzsKIAogICAgIHAtPmRlcHRoKys7CiAKQEAgLTIyOSwyNCArMzA0LDM1IEBACiAgICAgZWxzZSBpZiAodiA9PSBQeV9UcnVlKSB7CiAgICAgICAgIHdfYnl0ZShUWVBFX1RSVUUsIHApOwogICAgIH0KLSAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSkgeworICAgIGVsc2UgaWYgKCF3X3JlZih2LCAmZmxhZywgcCkpCisgICAgICAgIHdfY29tcGxleF9vYmplY3QodiwgZmxhZywgcCk7CisKKyAgICBwLT5kZXB0aC0tOworfQorCitzdGF0aWMgdm9pZAord19jb21wbGV4X29iamVjdChQeU9iamVjdCAqdiwgY2hhciBmbGFnLCBXRklMRSAqcCkKK3sKKyAgICBQeV9zc2l6ZV90IGksIG47CisKKyAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikpIHsKICAgICAgICAgbG9uZyB4ID0gUHlMb25nX0FzTG9uZyh2KTsKICAgICAgICAgaWYgKCh4ID09IC0xKSAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgUHlMb25nT2JqZWN0ICpvYiA9IChQeUxvbmdPYmplY3QgKil2OwogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIHdfUHlMb25nKG9iLCBwKTsKKyAgICAgICAgICAgIHdfUHlMb25nKG9iLCBmbGFnLCBwKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICNpZiBTSVpFT0ZfTE9ORyA+IDQKICAgICAgICAgICAgIGxvbmcgeSA9IFB5X0FSSVRITUVUSUNfUklHSFRfU0hJRlQobG9uZywgeCwgMzEpOwogICAgICAgICAgICAgaWYgKHkgJiYgeSAhPSAtMSkgewogICAgICAgICAgICAgICAgIC8qIFRvbyBsYXJnZSBmb3IgVFlQRV9JTlQgKi8KLSAgICAgICAgICAgICAgICB3X1B5TG9uZygoUHlMb25nT2JqZWN0Kil2LCBwKTsKKyAgICAgICAgICAgICAgICB3X1B5TG9uZygoUHlMb25nT2JqZWN0Kil2LCBmbGFnLCBwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdfYnl0ZShUWVBFX0lOVCwgcCk7CisgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfSU5ULCBwKTsKICAgICAgICAgICAgICAgICB3X2xvbmcoeCwgcCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI1OSw3ICszNDUsNyBAQAogICAgICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgd19ieXRlKFRZUEVfQklOQVJZX0ZMT0FULCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0JJTkFSWV9GTE9BVCwgcCk7CiAgICAgICAgICAgICB3X3N0cmluZygoY2hhciopYnVmLCA4LCBwKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKQEAgLTI3MCw3ICszNTYsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4gPSBzdHJsZW4oYnVmKTsKLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX0ZMT0FULCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0ZMT0FULCBwKTsKICAgICAgICAgICAgIHdfYnl0ZSgoaW50KW4sIHApOwogICAgICAgICAgICAgd19zdHJpbmcoYnVmLCBuLCBwKTsKICAgICAgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKQEAgLTI4NCw3ICszNzAsNyBAQAogICAgICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgd19ieXRlKFRZUEVfQklOQVJZX0NPTVBMRVgsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfQklOQVJZX0NPTVBMRVgsIHApOwogICAgICAgICAgICAgd19zdHJpbmcoKGNoYXIqKWJ1ZiwgOCwgcCk7CiAgICAgICAgICAgICBpZiAoX1B5RmxvYXRfUGFjazgoUHlDb21wbGV4X0ltYWdBc0RvdWJsZSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIDEpIDwgMCkgewpAQCAtMjk1LDcgKzM4MSw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjaGFyICpidWY7Ci0gICAgICAgICAgICB3X2J5dGUoVFlQRV9DT01QTEVYLCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0NPTVBMRVgsIHApOwogICAgICAgICAgICAgYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKFB5Q29tcGxleF9SZWFsQXNEb3VibGUodiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2cnLCAxNywgMCwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoIWJ1ZikgewpAQCAtMzE5LDMxICs0MDUsNjEgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgd19ieXRlKFRZUEVfU1RSSU5HLCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfU1RSSU5HLCBwKTsKICAgICAgICAgd19wc3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKHYpLCBQeUJ5dGVzX0dFVF9TSVpFKHYpLCBwKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgUHlPYmplY3QgKnV0Zjg7Ci0gICAgICAgIHV0ZjggPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHYsICJ1dGY4IiwgInN1cnJvZ2F0ZXBhc3MiKTsKLSAgICAgICAgaWYgKHV0ZjggPT0gTlVMTCkgewotICAgICAgICAgICAgcC0+ZGVwdGgtLTsKLSAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChwLT52ZXJzaW9uID49IDQgJiYgUHlVbmljb2RlX0lTX0FTQ0lJKHYpKSB7CisgICAgICAgICAgICBpbnQgaXNfc2hvcnQgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KSA8IDI1NjsKKyAgICAgICAgICAgIGlmIChpc19zaG9ydCkgeworICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodikpCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX1NIT1JUX0FTQ0lJX0lOVEVSTkVELCBwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX1NIT1JUX0FTQ0lJLCBwKTsKKyAgICAgICAgICAgICAgICB3X3Nob3J0X3BzdHJpbmcoKGNoYXIgKikgUHlVbmljb2RlXzFCWVRFX0RBVEEodiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpLCBwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodikpCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX0FTQ0lJX0lOVEVSTkVELCBwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX0FTQ0lJLCBwKTsKKyAgICAgICAgICAgICAgICB3X3BzdHJpbmcoKGNoYXIgKikgUHlVbmljb2RlXzFCWVRFX0RBVEEodiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpLCBwKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB3X2J5dGUoVFlQRV9VTklDT0RFLCBwKTsKLSAgICAgICAgd19wc3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKHV0ZjgpLCBQeUJ5dGVzX0dFVF9TSVpFKHV0ZjgpLCBwKTsKLSAgICAgICAgUHlfREVDUkVGKHV0ZjgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp1dGY4OworICAgICAgICAgICAgdXRmOCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodiwgInV0ZjgiLCAic3Vycm9nYXRlcGFzcyIpOworICAgICAgICAgICAgaWYgKHV0ZjggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHAtPmRlcHRoLS07CisgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocC0+dmVyc2lvbiA+PSAzICYmICBQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodikpCisgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfSU5URVJORUQsIHApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX1VOSUNPREUsIHApOworICAgICAgICAgICAgd19wc3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKHV0ZjgpLCBQeUJ5dGVzX0dFVF9TSVpFKHV0ZjgpLCBwKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih1dGY4KTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgd19ieXRlKFRZUEVfVFVQTEUsIHApOwogICAgICAgICBuID0gUHlUdXBsZV9TaXplKHYpOwotICAgICAgICBXX1NJWkUobiwgcCk7CisgICAgICAgIGlmIChwLT52ZXJzaW9uID49IDQgJiYgbiA8IDI1NikgeworICAgICAgICAgICAgV19UWVBFKFRZUEVfU01BTExfVFVQTEUsIHApOworICAgICAgICAgICAgd19ieXRlKCh1bnNpZ25lZCBjaGFyKW4sIHApOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgV19UWVBFKFRZUEVfVFVQTEUsIHApOworICAgICAgICAgICAgV19TSVpFKG4sIHApOworICAgICAgICB9CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIHdfb2JqZWN0KFB5VHVwbGVfR0VUX0lURU0odiwgaSksIHApOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFB5TGlzdF9DaGVja0V4YWN0KHYpKSB7Ci0gICAgICAgIHdfYnl0ZShUWVBFX0xJU1QsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9MSVNULCBwKTsKICAgICAgICAgbiA9IFB5TGlzdF9HRVRfU0laRSh2KTsKICAgICAgICAgV19TSVpFKG4sIHApOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0zNTMsNyArNDY5LDcgQEAKICAgICBlbHNlIGlmIChQeURpY3RfQ2hlY2tFeGFjdCh2KSkgewogICAgICAgICBQeV9zc2l6ZV90IHBvczsKICAgICAgICAgUHlPYmplY3QgKmtleSwgKnZhbHVlOwotICAgICAgICB3X2J5dGUoVFlQRV9ESUNULCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfRElDVCwgcCk7CiAgICAgICAgIC8qIFRoaXMgb25lIGlzIE5VTEwgb2JqZWN0IHRlcm1pbmF0ZWQhICovCiAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dCh2LCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7CkBAIC0zNjYsOSArNDgyLDkgQEAKICAgICAgICAgUHlPYmplY3QgKnZhbHVlLCAqaXQ7CiAKICAgICAgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmUHlTZXRfVHlwZSkpCi0gICAgICAgICAgICB3X2J5dGUoVFlQRV9TRVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfU0VULCBwKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgd19ieXRlKFRZUEVfRlJPWkVOU0VULCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0ZST1pFTlNFVCwgcCk7CiAgICAgICAgIG4gPSBQeU9iamVjdF9TaXplKHYpOwogICAgICAgICBpZiAobiA9PSAtMSkgewogICAgICAgICAgICAgcC0+ZGVwdGgtLTsKQEAgLTM5NSw3ICs1MTEsNyBAQAogICAgIH0KICAgICBlbHNlIGlmIChQeUNvZGVfQ2hlY2sodikpIHsKICAgICAgICAgUHlDb2RlT2JqZWN0ICpjbyA9IChQeUNvZGVPYmplY3QgKil2OwotICAgICAgICB3X2J5dGUoVFlQRV9DT0RFLCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfQ09ERSwgcCk7CiAgICAgICAgIHdfbG9uZyhjby0+Y29fYXJnY291bnQsIHApOwogICAgICAgICB3X2xvbmcoY28tPmNvX2t3b25seWFyZ2NvdW50LCBwKTsKICAgICAgICAgd19sb25nKGNvLT5jb19ubG9jYWxzLCBwKTsKQEAgLTQyMSwxNSArNTM3LDE0IEBACiAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHdfYnl0ZShUWVBFX1NUUklORywgcCk7CisgICAgICAgIFdfVFlQRShUWVBFX1NUUklORywgcCk7CiAgICAgICAgIHdfcHN0cmluZyh2aWV3LmJ1Ziwgdmlldy5sZW4sIHApOwogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHdfYnl0ZShUWVBFX1VOS05PV04sIHApOworICAgICAgICBXX1RZUEUoVFlQRV9VTktOT1dOLCBwKTsKICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICB9Ci0gICAgcC0+ZGVwdGgtLTsKIH0KIAogLyogdmVyc2lvbiBjdXJyZW50bHkgaGFzIG5vIGVmZmVjdCBmb3Igd3JpdGluZyBpbnRzLiAqLwpAQCAtNDQwLDYgKzU1NSw3IEBACiAgICAgd2YuZnAgPSBmcDsKICAgICB3Zi5lcnJvciA9IFdGRVJSX09LOwogICAgIHdmLmRlcHRoID0gMDsKKyAgICB3Zi5yZWZzID0gTlVMTDsKICAgICB3Zi52ZXJzaW9uID0gdmVyc2lvbjsKICAgICB3X2xvbmcoeCwgJndmKTsKIH0KQEAgLTQ1MSw4MSArNTY3LDEwNyBAQAogICAgIHdmLmZwID0gZnA7CiAgICAgd2YuZXJyb3IgPSBXRkVSUl9PSzsKICAgICB3Zi5kZXB0aCA9IDA7CisgICAgaWYgKHZlcnNpb24gPj0gMykgeworICAgICAgICBpZiAoKHdmLnJlZnMgPSBQeURpY3RfTmV3KCkpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm47IC8qIGNhbGxlciBtdXNoIGNoZWNrIFB5RXJyX09jY3VycmVkKCkgKi8KKyAgICB9IGVsc2UKKyAgICAgICAgd2YucmVmcyA9IE5VTEw7CiAgICAgd2YudmVyc2lvbiA9IHZlcnNpb247CiAgICAgd19vYmplY3QoeCwgJndmKTsKKyAgICBQeV9YREVDUkVGKHdmLnJlZnMpOwogfQogCiB0eXBlZGVmIFdGSUxFIFJGSUxFOyAvKiBTYW1lIHN0cnVjdCB3aXRoIGRpZmZlcmVudCBpbnZhcmlhbnRzICovCiAKLSNkZWZpbmUgcnNfYnl0ZShwKSAoKChwKS0+cHRyIDwgKHApLT5lbmQpID8gKHVuc2lnbmVkIGNoYXIpKihwKS0+cHRyKysgOiBFT0YpCi0KLXN0YXRpYyBQeV9zc2l6ZV90Ci1yX3N0cmluZyhjaGFyICpzLCBQeV9zc2l6ZV90IG4sIFJGSUxFICpwKQorc3RhdGljIGNoYXIgKgorcl9zdHJpbmcoUHlfc3NpemVfdCBuLCBSRklMRSAqcCkKIHsKLSAgICBjaGFyICpwdHI7Ci0gICAgUHlfc3NpemVfdCByZWFkLCBsZWZ0OworICAgIFB5X3NzaXplX3QgcmVhZCA9IC0xOworCisgICAgaWYgKHAtPnB0ciAhPSBOVUxMKSB7CisgICAgICAgIC8qIEZhc3QgcGF0aCBmb3IgbG9hZHMoKSAqLworICAgICAgICBjaGFyICpyZXMgPSBwLT5wdHI7CisgICAgICAgIFB5X3NzaXplX3QgbGVmdCA9IHAtPmVuZCAtIHAtPnB0cjsKKyAgICAgICAgaWYgKGxlZnQgPCBuKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hcnNoYWwgZGF0YSB0b28gc2hvcnQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHAtPnB0ciArPSBuOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBpZiAocC0+YnVmID09IE5VTEwpIHsKKyAgICAgICAgcC0+YnVmID0gUHlNZW1fTUFMTE9DKG4pOworICAgICAgICBpZiAocC0+YnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwLT5idWZfc2l6ZSA9IG47CisgICAgfQorICAgIGVsc2UgaWYgKHAtPmJ1Zl9zaXplIDwgbikgeworICAgICAgICBwLT5idWYgPSBQeU1lbV9SRUFMTE9DKHAtPmJ1Ziwgbik7CisgICAgICAgIGlmIChwLT5idWYgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHAtPmJ1Zl9zaXplID0gbjsKKyAgICB9CiAKICAgICBpZiAoIXAtPnJlYWRhYmxlKSB7Ci0gICAgICAgIGlmIChwLT5mcCAhPSBOVUxMKQotICAgICAgICAgICAgLyogVGhlIHJlc3VsdCBmaXRzIGludG8gaW50IGJlY2F1c2UgaXQgbXVzdCBiZSA8PW4uICovCi0gICAgICAgICAgICByZWFkID0gZnJlYWQocywgMSwgbiwgcC0+ZnApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxlZnQgPSBwLT5lbmQgLSBwLT5wdHI7Ci0gICAgICAgICAgICByZWFkID0gKGxlZnQgPCBuKSA/IGxlZnQgOiBuOwotICAgICAgICAgICAgbWVtY3B5KHMsIHAtPnB0ciwgcmVhZCk7Ci0gICAgICAgICAgICBwLT5wdHIgKz0gcmVhZDsKLSAgICAgICAgfQorICAgICAgICBhc3NlcnQocC0+ZnAgIT0gTlVMTCk7CisgICAgICAgIHJlYWQgPSBmcmVhZChwLT5idWYsIDEsIG4sIHAtPmZwKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKHJlYWQpOworICAgICAgICBfUHlfSURFTlRJRklFUihyZWFkaW50byk7CisgICAgICAgIFB5T2JqZWN0ICpyZXMsICptdmlldzsKKyAgICAgICAgUHlfYnVmZmVyIGJ1ZjsKIAotICAgICAgICBQeU9iamVjdCAqZGF0YSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQocC0+cmVhZGFibGUsICZQeUlkX3JlYWQsICJuIiwgbik7Ci0gICAgICAgIHJlYWQgPSAwOwotICAgICAgICBpZiAoZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soZGF0YSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZi5yZWFkKCkgcmV0dXJuZWQgbm90IGJ5dGVzIGJ1dCAlLjEwMHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5vYl90eXBlLT50cF9uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJlYWQgPSBQeUJ5dGVzX0dFVF9TSVpFKGRhdGEpOwotICAgICAgICAgICAgICAgIGlmIChyZWFkID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAocmVhZCA+IG4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQoKSByZXR1cm5lZCB0b28gbXVjaCBkYXRhOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXpkIGJ5dGVzIHJlcXVlc3RlZCwgJXpkIHJldHVybmVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4sIHJlYWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCA9IC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gUHlCeXRlc19BU19TVFJJTkcoZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkocywgcHRyLCByZWFkKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKKyAgICAgICAgaWYgKFB5QnVmZmVyX0ZpbGxJbmZvKCZidWYsIE5VTEwsIHAtPmJ1ZiwgbiwgMCwgUHlCVUZfQ09OVElHKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBtdmlldyA9IFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKCZidWYpOworICAgICAgICBpZiAobXZpZXcgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIHJlcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQocC0+cmVhZGFibGUsICZQeUlkX3JlYWRpbnRvLCAiTiIsIG12aWV3KTsKKyAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7CisgICAgICAgICAgICByZWFkID0gUHlOdW1iZXJfQXNTc2l6ZV90KHJlcywgUHlFeGNfVmFsdWVFcnJvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkgJiYgKHJlYWQgPCBuKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsICJFT0YgcmVhZCB3aGVyZSBub3QgZXhwZWN0ZWQiKTsKKyAgICBpZiAocmVhZCAhPSBuKSB7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgaWYgKHJlYWQgPiBuKQorICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZCgpIHJldHVybmVkIHRvbyBtdWNoIGRhdGE6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiV6ZCBieXRlcyByZXF1ZXN0ZWQsICV6ZCByZXR1cm5lZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4sIHJlYWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVPRiByZWFkIHdoZXJlIG5vdCBleHBlY3RlZCIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gcmVhZDsKKyAgICByZXR1cm4gcC0+YnVmOwogfQogCi0KIHN0YXRpYyBpbnQKIHJfYnl0ZShSRklMRSAqcCkKIHsKICAgICBpbnQgYyA9IEVPRjsKLSAgICB1bnNpZ25lZCBjaGFyIGNoOwotICAgIFB5X3NzaXplX3QgbjsKIAotICAgIGlmICghcC0+cmVhZGFibGUpCi0gICAgICAgIGMgPSBwLT5mcCA/IGdldGMocC0+ZnApIDogcnNfYnl0ZShwKTsKKyAgICBpZiAocC0+cHRyICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHAtPnB0ciA8IHAtPmVuZCkKKyAgICAgICAgICAgIGMgPSAodW5zaWduZWQgY2hhcikgKnAtPnB0cisrOworICAgICAgICByZXR1cm4gYzsKKyAgICB9CisgICAgaWYgKCFwLT5yZWFkYWJsZSkgeworICAgICAgICBhc3NlcnQocC0+ZnApOworICAgICAgICBjID0gZ2V0YyhwLT5mcCk7CisgICAgfQogICAgIGVsc2UgewotICAgICAgICBuID0gcl9zdHJpbmcoKGNoYXIgKikgJmNoLCAxLCBwKTsKLSAgICAgICAgaWYgKG4gPiAwKQotICAgICAgICAgICAgYyA9IGNoOworICAgICAgICBjaGFyICpwdHIgPSByX3N0cmluZygxLCBwKTsKKyAgICAgICAgaWYgKHB0ciAhPSBOVUxMKQorICAgICAgICAgICAgYyA9ICoodW5zaWduZWQgY2hhciAqKSBwdHI7CiAgICAgfQogICAgIHJldHVybiBjOwogfQpAQCAtNTMzLDY5ICs2NzUsMzcgQEAKIHN0YXRpYyBpbnQKIHJfc2hvcnQoUkZJTEUgKnApCiB7Ci0gICAgcmVnaXN0ZXIgc2hvcnQgeDsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyXTsKKyAgICBzaG9ydCB4ID0gLTE7CisgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCi0gICAgcl9zdHJpbmcoKGNoYXIgKikgYnVmZmVyLCAyLCBwKTsKLSAgICB4ID0gYnVmZmVyWzBdOwotICAgIHggfD0gYnVmZmVyWzFdIDw8IDg7Ci0gICAgLyogU2lnbi1leHRlbnNpb24sIGluIGNhc2Ugc2hvcnQgZ3JlYXRlciB0aGFuIDE2IGJpdHMgKi8KLSAgICB4IHw9IC0oeCAmIDB4ODAwMCk7CisgICAgYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgcl9zdHJpbmcoMiwgcCk7CisgICAgaWYgKGJ1ZmZlciAhPSBOVUxMKSB7CisgICAgICAgIHggPSBidWZmZXJbMF07CisgICAgICAgIHggfD0gYnVmZmVyWzFdIDw8IDg7CisgICAgICAgIC8qIFNpZ24tZXh0ZW5zaW9uLCBpbiBjYXNlIHNob3J0IGdyZWF0ZXIgdGhhbiAxNiBiaXRzICovCisgICAgICAgIHggfD0gLSh4ICYgMHg4MDAwKTsKKyAgICB9CiAgICAgcmV0dXJuIHg7CiB9CiAKIHN0YXRpYyBsb25nCiByX2xvbmcoUkZJTEUgKnApCiB7Ci0gICAgcmVnaXN0ZXIgbG9uZyB4OwotICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzRdOworICAgIGxvbmcgeCA9IC0xOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAotICAgIHJfc3RyaW5nKChjaGFyICopIGJ1ZmZlciwgNCwgcCk7Ci0gICAgeCA9IGJ1ZmZlclswXTsKLSAgICB4IHw9IChsb25nKWJ1ZmZlclsxXSA8PCA4OwotICAgIHggfD0gKGxvbmcpYnVmZmVyWzJdIDw8IDE2OwotICAgIHggfD0gKGxvbmcpYnVmZmVyWzNdIDw8IDI0OworICAgIGJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIHJfc3RyaW5nKDQsIHApOworICAgIGlmIChidWZmZXIgIT0gTlVMTCkgeworICAgICAgICB4ID0gYnVmZmVyWzBdOworICAgICAgICB4IHw9IChsb25nKWJ1ZmZlclsxXSA8PCA4OworICAgICAgICB4IHw9IChsb25nKWJ1ZmZlclsyXSA8PCAxNjsKKyAgICAgICAgeCB8PSAobG9uZylidWZmZXJbM10gPDwgMjQ7CiAjaWYgU0laRU9GX0xPTkcgPiA0Ci0gICAgLyogU2lnbiBleHRlbnNpb24gZm9yIDY0LWJpdCBtYWNoaW5lcyAqLwotICAgIHggfD0gLSh4ICYgMHg4MDAwMDAwMEwpOwotI2VuZGlmCi0gICAgcmV0dXJuIHg7Ci19Ci0KLS8qIHJfbG9uZzY0IGRlYWxzIHdpdGggdGhlIFRZUEVfSU5UNjQgY29kZS4gIE9uIGEgbWFjaGluZSB3aXRoCi0gICBzaXplb2YobG9uZykgPiA0LCBpdCByZXR1cm5zIGEgUHl0aG9uIGludCBvYmplY3QsIGVsc2UgYSBQeXRob24gbG9uZwotICAgb2JqZWN0LiAgTm90ZSB0aGF0IHdfbG9uZzY0IHdyaXRlcyBvdXQgVFlQRV9JTlQgaWYgMzIgYml0cyBpcyBlbm91Z2gsCi0gICBzbyB0aGVyZSdzIG5vIGluZWZmaWNpZW5jeSBoZXJlIGluIHJldHVybmluZyBhIFB5TG9uZyBvbiAzMi1iaXQgYm94ZXMKLSAgIGZvciBldmVyeXRoaW5nIHdyaXR0ZW4gdmlhIFRZUEVfSU5UNjQgKGkuZS4sIGlmIGFuIGludCBpcyB3cml0dGVuIHZpYQotICAgVFlQRV9JTlQ2NCwgaXQgKm5lZWRzKiBtb3JlIHRoYW4gMzIgYml0cykuCi0qLwotc3RhdGljIFB5T2JqZWN0ICoKLXJfbG9uZzY0KFJGSUxFICpwKQotewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotICAgIGxvbmcgbG80ID0gcl9sb25nKHApOwotICAgIGxvbmcgaGk0ID0gcl9sb25nKHApOwotCi0gICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7Ci0jaWYgU0laRU9GX0xPTkcgPiA0Ci0gICAgICAgIGxvbmcgeCA9IChoaTQgPDwgMzIpIHwgKGxvNCAmIDB4RkZGRkZGRkZMKTsKLSAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Mb25nKHgpOwotI2Vsc2UKLSAgICAgICAgdW5zaWduZWQgY2hhciBidWZbOF07Ci0gICAgICAgIGludCBvbmUgPSAxOwotICAgICAgICBpbnQgaXNfbGl0dGxlX2VuZGlhbiA9IChpbnQpKihjaGFyKikmb25lOwotICAgICAgICBpZiAoaXNfbGl0dGxlX2VuZGlhbikgewotICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgJmxvNCwgNCk7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmKzQsICZoaTQsIDQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgJmhpNCwgNCk7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmKzQsICZsbzQsIDQpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IF9QeUxvbmdfRnJvbUJ5dGVBcnJheShidWYsIDgsIGlzX2xpdHRsZV9lbmRpYW4sIDEpOworICAgICAgICAvKiBTaWduIGV4dGVuc2lvbiBmb3IgNjQtYml0IG1hY2hpbmVzICovCisgICAgICAgIHggfD0gLSh4ICYgMHg4MDAwMDAwMEwpOwogI2VuZGlmCiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHg7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC02MjIsMjUgKzczMiwzMSBAQAogICAgIG9iID0gX1B5TG9uZ19OZXcoc2l6ZSk7CiAgICAgaWYgKG9iID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgUHlfU0laRShvYikgPSBuID4gMCA/IHNpemUgOiAtc2l6ZTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBzaXplLTE7IGkrKykgewogICAgICAgICBkID0gMDsKICAgICAgICAgZm9yIChqPTA7IGogPCBQeUxvbmdfTUFSU0hBTF9SQVRJTzsgaisrKSB7CiAgICAgICAgICAgICBtZCA9IHJfc2hvcnQocCk7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtZCA8IDAgfHwgbWQgPiBQeUxvbmdfTUFSU0hBTF9CQVNFKQogICAgICAgICAgICAgICAgIGdvdG8gYmFkX2RpZ2l0OwogICAgICAgICAgICAgZCArPSAoZGlnaXQpbWQgPDwgaipQeUxvbmdfTUFSU0hBTF9TSElGVDsKICAgICAgICAgfQogICAgICAgICBvYi0+b2JfZGlnaXRbaV0gPSBkOwogICAgIH0KKwogICAgIGQgPSAwOwogICAgIGZvciAoaj0wOyBqIDwgc2hvcnRzX2luX3RvcF9kaWdpdDsgaisrKSB7CiAgICAgICAgIG1kID0gcl9zaG9ydChwKTsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBpZiAobWQgPCAwIHx8IG1kID4gUHlMb25nX01BUlNIQUxfQkFTRSkKICAgICAgICAgICAgIGdvdG8gYmFkX2RpZ2l0OwogICAgICAgICAvKiB0b3Btb3N0IG1hcnNoYWwgZGlnaXQgc2hvdWxkIGJlIG5vbnplcm8gKi8KQEAgLTY2Nyw2ICs3ODMsNTkgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLyogYWxsb2NhdGUgdGhlIHJlZmxpc3QgaW5kZXggZm9yIGEgbmV3IG9iamVjdC4gUmV0dXJuIC0xIG9uIGZhaWx1cmUgKi8KK3N0YXRpYyBQeV9zc2l6ZV90CityX3JlZl9yZXNlcnZlKGludCBmbGFnLCBSRklMRSAqcCkKK3sKKyAgICBpZiAoZmxhZykgeyAvKiBjdXJyZW50bHkgb25seSBGTEFHX1JFRiBpcyBkZWZpbmVkICovCisgICAgICAgIFB5X3NzaXplX3QgaWR4ID0gUHlMaXN0X0dFVF9TSVpFKHAtPnJlZnMpOworICAgICAgICBpZiAoaWR4ID49IDB4N2ZmZmZmZmUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoaW5kZXggbGlzdCB0b28gbGFyZ2UpIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocC0+cmVmcywgUHlfTm9uZSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gaWR4OworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKworLyogaW5zZXJ0IHRoZSBuZXcgb2JqZWN0ICdvJyB0byB0aGUgcmVmbGlzdCBhdCBwcmV2aW91c2x5CisgKiBhbGxvY2F0ZWQgaW5kZXggJ2lkeCcuCisgKiAnbycgY2FuIGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugbm90aGluZyBpcyBkb25lLgorICogaWYgJ28nIHdhcyBub24tTlVMTCwgYW5kIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywgJ28nIGlzIHJldHVybmVkLgorICogaWYgJ28nIHdhcyBub24tTlVMTCwgYW5kIHRoZSBmdW5jdGlvbiBmYWlscywgJ28nIGlzIHJlbGVhc2VkIGFuZAorICogTlVMTCByZXR1cm5lZC4gVGhpcyBzaW1wbGlmaWVzIGVycm9yIGNoZWNraW5nIGF0IHRoZSBjYWxsIHNpdGUgc2luY2UKKyAqIGEgc2luZ2xlIHRlc3QgZm9yIE5VTEwgZm9yIHRoZSBmdW5jdGlvbiByZXN1bHQgaXMgZW5vdWdoLgorICovCitzdGF0aWMgUHlPYmplY3QgKgorcl9yZWZfaW5zZXJ0KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGlkeCwgaW50IGZsYWcsIFJGSUxFICpwKQoreworICAgIGlmIChvICE9IE5VTEwgJiYgZmxhZykgeyAvKiBjdXJyZW50bHkgb25seSBGTEFHX1JFRiBpcyBkZWZpbmVkICovCisgICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeUxpc3RfR0VUX0lURU0ocC0+cmVmcywgaWR4KTsKKyAgICAgICAgUHlfSU5DUkVGKG8pOworICAgICAgICBQeUxpc3RfU0VUX0lURU0ocC0+cmVmcywgaWR4LCBvKTsKKyAgICAgICAgUHlfREVDUkVGKHRtcCk7CisgICAgfQorICAgIHJldHVybiBvOworfQorCisvKiBjb21iaW5hdGlvbiBvZiBib3RoIGFib3ZlLCB1c2VkIHdoZW4gYW4gb2JqZWN0IGNhbiBiZQorICogY3JlYXRlZCB3aGVuZXZlciBpdCBpcyBzZWVuIGluIHRoZSBmaWxlLCBhcyBvcHBvc2VkIHRvCisgKiBhZnRlciBoYXZpbmcgbG9hZGVkIGl0cyBzdWItb2JqZWN0cy4KKyAqLworc3RhdGljIFB5T2JqZWN0ICoKK3JfcmVmKFB5T2JqZWN0ICpvLCBpbnQgZmxhZywgUkZJTEUgKnApCit7CisgICAgYXNzZXJ0KGZsYWcgJiBGTEFHX1JFRik7CisgICAgaWYgKG8gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TGlzdF9BcHBlbmQocC0+cmVmcywgbykgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsgLyogcmVsZWFzZSB0aGUgbmV3IG9iamVjdCAqLworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG87Cit9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiByX29iamVjdChSRklMRSAqcCkKQEAgLTY3NCw5ICs4NDMsMTcgQEAKICAgICAvKiBOVUxMIGlzIGEgdmFsaWQgcmV0dXJuIHZhbHVlLCBpdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFucyB0aGF0CiAgICAgICAgYW4gZXhjZXB0aW9uIGlzIHNldC4gKi8KICAgICBQeU9iamVjdCAqdiwgKnYyOworICAgIFB5X3NzaXplX3QgaWR4ID0gMDsKICAgICBsb25nIGksIG47Ci0gICAgaW50IHR5cGUgPSByX2J5dGUocCk7Ci0gICAgUHlPYmplY3QgKnJldHZhbDsKKyAgICBpbnQgdHlwZSwgY29kZSA9IHJfYnl0ZShwKTsKKyAgICBpbnQgZmxhZywgaXNfaW50ZXJuZWQgPSAwOworICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOworCisgICAgaWYgKGNvZGUgPT0gRU9GKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBvYmplY3QgZXhwZWN0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcC0+ZGVwdGgrKzsKIApAQCAtNjg2LDE2ICs4NjMsMTcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgZmxhZyA9IGNvZGUgJiBGTEFHX1JFRjsKKyAgICB0eXBlID0gY29kZSAmIH5GTEFHX1JFRjsKKworI2RlZmluZSBSX1JFRihPKSBkb3tcCisgICAgaWYgKGZsYWcpIFwKKyAgICAgICAgTyA9IHJfcmVmKE8sIGZsYWcsIHApO1wKK30gd2hpbGUgKDApCisKICAgICBzd2l0Y2ggKHR5cGUpIHsKIAotICAgIGNhc2UgRU9GOgotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiRU9GIHJlYWQgd2hlcmUgb2JqZWN0IGV4cGVjdGVkIik7Ci0gICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBUWVBFX05VTEw6Ci0gICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBUWVBFX05PTkU6CkBAIC03MjYsNjcgKzkwNCw2NiBAQAogICAgIGNhc2UgVFlQRV9JTlQ6CiAgICAgICAgIG4gPSByX2xvbmcocCk7CiAgICAgICAgIHJldHZhbCA9IFB5RXJyX09jY3VycmVkKCkgPyBOVUxMIDogUHlMb25nX0Zyb21Mb25nKG4pOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgVFlQRV9JTlQ2NDoKLSAgICAgICAgcmV0dmFsID0gcl9sb25nNjQocCk7CisgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBUWVBFX0xPTkc6CiAgICAgICAgIHJldHZhbCA9IHJfUHlMb25nKHApOworICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFlQRV9GTE9BVDoKICAgICAgICAgewotICAgICAgICAgICAgY2hhciBidWZbMjU2XTsKKyAgICAgICAgICAgIGNoYXIgYnVmWzI1Nl0sICpwdHI7CiAgICAgICAgICAgICBkb3VibGUgZHg7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgbiA9IHJfYnl0ZShwKTsKICAgICAgICAgICAgIGlmIChuID09IEVPRikgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwKICAgICAgICAgICAgICAgICAgICAgIkVPRiByZWFkIHdoZXJlIG9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJfc3RyaW5nKGJ1ZiwgbiwgcCkgIT0gbikKKyAgICAgICAgICAgIHB0ciA9IHJfc3RyaW5nKG4sIHApOworICAgICAgICAgICAgaWYgKHB0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcHRyLCBuKTsKICAgICAgICAgICAgIGJ1ZltuXSA9ICdcMCc7CiAgICAgICAgICAgICBkeCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShidWYsIE5VTEwsIE5VTEwpOwogICAgICAgICAgICAgaWYgKGR4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJldHZhbCA9IFB5RmxvYXRfRnJvbURvdWJsZShkeCk7CisgICAgICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgIGNhc2UgVFlQRV9CSU5BUllfRkxPQVQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmWzhdOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmOwogICAgICAgICAgICAgZG91YmxlIHg7Ci0gICAgICAgICAgICBpZiAocl9zdHJpbmcoKGNoYXIqKWJ1ZiwgOCwgcCkgIT0gOCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICBidWYgPSAodW5zaWduZWQgY2hhciAqKSByX3N0cmluZyg4LCBwKTsKKyAgICAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHggPSBfUHlGbG9hdF9VbnBhY2s4KGJ1ZiwgMSk7Ci0gICAgICAgICAgICBpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dmFsID0gUHlGbG9hdF9Gcm9tRG91YmxlKHgpOworICAgICAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICBjYXNlIFRZUEVfQ09NUExFWDoKICAgICAgICAgewotICAgICAgICAgICAgY2hhciBidWZbMjU2XTsKKyAgICAgICAgICAgIGNoYXIgYnVmWzI1Nl0sICpwdHI7CiAgICAgICAgICAgICBQeV9jb21wbGV4IGM7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgbiA9IHJfYnl0ZShwKTsKICAgICAgICAgICAgIGlmIChuID09IEVPRikgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwKICAgICAgICAgICAgICAgICAgICAgIkVPRiByZWFkIHdoZXJlIG9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJfc3RyaW5nKGJ1ZiwgbiwgcCkgIT0gbikKKyAgICAgICAgICAgIHB0ciA9IHJfc3RyaW5nKG4sIHApOworICAgICAgICAgICAgaWYgKHB0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcHRyLCBuKTsKICAgICAgICAgICAgIGJ1ZltuXSA9ICdcMCc7CiAgICAgICAgICAgICBjLnJlYWwgPSBQeU9TX3N0cmluZ190b19kb3VibGUoYnVmLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgIGlmIChjLnJlYWwgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQpAQCAtNzk3LDExMiArOTc0LDE1MSBAQAogICAgICAgICAgICAgICAgICAgICAiRU9GIHJlYWQgd2hlcmUgb2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocl9zdHJpbmcoYnVmLCBuLCBwKSAhPSBuKQorICAgICAgICAgICAgcHRyID0gcl9zdHJpbmcobiwgcCk7CisgICAgICAgICAgICBpZiAocHRyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtZW1jcHkoYnVmLCBwdHIsIG4pOwogICAgICAgICAgICAgYnVmW25dID0gJ1wwJzsKICAgICAgICAgICAgIGMuaW1hZyA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShidWYsIE5VTEwsIE5VTEwpOwogICAgICAgICAgICAgaWYgKGMuaW1hZyA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZXR2YWwgPSBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KGMpOworICAgICAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICBjYXNlIFRZUEVfQklOQVJZX0NPTVBMRVg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmWzhdOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmOwogICAgICAgICAgICAgUHlfY29tcGxleCBjOwotICAgICAgICAgICAgaWYgKHJfc3RyaW5nKChjaGFyKilidWYsIDgsIHApICE9IDgpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcl9zdHJpbmcoOCwgcCk7CisgICAgICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBjLnJlYWwgPSBfUHlGbG9hdF9VbnBhY2s4KGJ1ZiwgMSk7Ci0gICAgICAgICAgICBpZiAoYy5yZWFsID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICBpZiAoYy5yZWFsID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyX3N0cmluZygoY2hhciopYnVmLCA4LCBwKSAhPSA4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHJfc3RyaW5nKDgsIHApOworICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYy5pbWFnID0gX1B5RmxvYXRfVW5wYWNrOChidWYsIDEpOwotICAgICAgICAgICAgaWYgKGMuaW1hZyA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgaWYgKGMuaW1hZyA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR2YWwgPSBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KGMpOworICAgICAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICBjYXNlIFRZUEVfU1RSSU5HOgotICAgICAgICBuID0gcl9sb25nKHApOwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciAqcHRyOworICAgICAgICAgICAgbiA9IHJfbG9uZyhwKTsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTSVpFMzJfTUFYKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChzdHJpbmcgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKU5VTEwsIG4pOworICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHB0ciA9IHJfc3RyaW5nKG4sIHApOworICAgICAgICAgICAgaWYgKHB0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtY3B5KFB5Qnl0ZXNfQVNfU1RSSU5HKHYpLCBwdHIsIG4pOworICAgICAgICAgICAgcmV0dmFsID0gdjsKKyAgICAgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoc3RyaW5nIHNpemUgb3V0IG9mIHJhbmdlKSIpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopTlVMTCwgbik7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAocl9zdHJpbmcoUHlCeXRlc19BU19TVFJJTkcodiksIG4sIHApICE9IG4pIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR2YWwgPSB2OwotICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVFlQRV9BU0NJSV9JTlRFUk5FRDoKKyAgICAgICAgaXNfaW50ZXJuZWQgPSAxOworICAgIGNhc2UgVFlQRV9BU0NJSToKKyAgICAgICAgbiA9IHJfbG9uZyhwKTsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTSVpFMzJfTUFYKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHVuaWNvZGUgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBnb3RvIF9yZWFkX2FzY2lpOworCisgICAgY2FzZSBUWVBFX1NIT1JUX0FTQ0lJX0lOVEVSTkVEOgorICAgICAgICBpc19pbnRlcm5lZCA9IDE7CisgICAgY2FzZSBUWVBFX1NIT1JUX0FTQ0lJOgorICAgICAgICBuID0gcl9ieXRlKHApOworICAgICAgICBpZiAobiA9PSBFT0YpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwKKyAgICAgICAgICAgICAgICAiRU9GIHJlYWQgd2hlcmUgb2JqZWN0IGV4cGVjdGVkIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIF9yZWFkX2FzY2lpOgorICAgICAgICB7CisgICAgICAgICAgICBjaGFyICpwdHI7CisgICAgICAgICAgICBwdHIgPSByX3N0cmluZyhuLCBwKTsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbUtpbmRBbmREYXRhKFB5VW5pY29kZV8xQllURV9LSU5ELCBwdHIsIG4pOworICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChpc19pbnRlcm5lZCkKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmdik7CisgICAgICAgICAgICByZXR2YWwgPSB2OworICAgICAgICAgICAgUl9SRUYocmV0dmFsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBjYXNlIFRZUEVfSU5URVJORUQ6CisgICAgICAgIGlzX2ludGVybmVkID0gMTsKICAgICBjYXNlIFRZUEVfVU5JQ09ERToKICAgICAgICAgewogICAgICAgICBjaGFyICpidWZmZXI7CiAKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTSVpFMzJfTUFYKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHVuaWNvZGUgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgYnVmZmVyID0gUHlNZW1fTkVXKGNoYXIsIG4pOwotICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG4gIT0gMCkgeworICAgICAgICAgICAgYnVmZmVyID0gcl9zdHJpbmcobiwgcCk7CisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0RlY29kZVVURjgoYnVmZmVyLCBuLCAic3Vycm9nYXRlcGFzcyIpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChyX3N0cmluZyhidWZmZXIsIG4sIHApICE9IG4pIHsKLSAgICAgICAgICAgIFB5TWVtX0RFTChidWZmZXIpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfTmV3KDAsIDApOwogICAgICAgICB9Ci0gICAgICAgIHYgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChidWZmZXIsIG4sICJzdXJyb2dhdGVwYXNzIik7Ci0gICAgICAgIFB5TWVtX0RFTChidWZmZXIpOworICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChpc19pbnRlcm5lZCkKKyAgICAgICAgICAgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKCZ2KTsKICAgICAgICAgcmV0dmFsID0gdjsKKyAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgIGNhc2UgVFlQRV9TTUFMTF9UVVBMRToKKyAgICAgICAgbiA9ICh1bnNpZ25lZCBjaGFyKSByX2J5dGUocCk7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGdvdG8gX3JlYWRfdHVwbGU7CiAgICAgY2FzZSBUWVBFX1RVUExFOgogICAgICAgICBuID0gcl9sb25nKHApOwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAodHVwbGUgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICBfcmVhZF90dXBsZToKICAgICAgICAgdiA9IFB5VHVwbGVfTmV3KG4pOwotICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBSX1JFRih2KTsKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgdjIgPSByX29iamVjdChwKTsKICAgICAgICAgICAgIGlmICggdjIgPT0gTlVMTCApIHsKQEAgLTkyMCwyMCArMTEzNiwxNiBAQAogCiAgICAgY2FzZSBUWVBFX0xJU1Q6CiAgICAgICAgIG4gPSByX2xvbmcocCk7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChsaXN0IHNpemUgb3V0IG9mIHJhbmdlKSIpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHYgPSBQeUxpc3RfTmV3KG4pOwotICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBSX1JFRih2KTsKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIHYyID0gcl9vYmplY3QocCk7CiAgICAgICAgICAgICBpZiAoIHYyID09IE5VTEwgKSB7CkBAIC05NTEsMjAgKzExNjMsMjYgQEAKIAogICAgIGNhc2UgVFlQRV9ESUNUOgogICAgICAgICB2ID0gUHlEaWN0X05ldygpOwotICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBSX1JFRih2KTsKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICprZXksICp2YWw7CiAgICAgICAgICAgICBrZXkgPSByX29iamVjdChwKTsKICAgICAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHZhbCA9IHJfb2JqZWN0KHApOwotICAgICAgICAgICAgaWYgKHZhbCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHYsIGtleSwgdmFsKTsKKyAgICAgICAgICAgIGlmICh2YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHYsIGtleSwgdmFsKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih2YWwpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKQEAgLTk3NiwyMCArMTE5NCwyNiBAQAogICAgIGNhc2UgVFlQRV9TRVQ6CiAgICAgY2FzZSBUWVBFX0ZST1pFTlNFVDoKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTSVpFMzJfTUFYKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHNldCBzaXplIG91dCBvZiByYW5nZSkiKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICB2ID0gKHR5cGUgPT0gVFlQRV9TRVQpID8gUHlTZXRfTmV3KE5VTEwpIDogUHlGcm96ZW5TZXRfTmV3KE5VTEwpOwotICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0eXBlID09IFRZUEVfU0VUKSB7CisgICAgICAgICAgICBSX1JFRih2KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIG11c3QgdXNlIGRlbGF5ZWQgcmVnaXN0cmF0aW9uIG9mIGZyb3plbnNldHMgYmVjYXVzZSB0aGV5IG11c3QKKyAgICAgICAgICAgICAqIGJlIGluaXQgd2l0aCBhIHJlZmNvdW50IG9mIDEKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWR4ID0gcl9yZWZfcmVzZXJ2ZShmbGFnLCBwKTsKKyAgICAgICAgICAgIGlmIChpZHggPCAwKQorICAgICAgICAgICAgICAgIFB5X0NMRUFSKHYpOyAvKiBzaWduYWwgZXJyb3IgKi8KICAgICAgICAgfQorICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgdjIgPSByX29iamVjdChwKTsKICAgICAgICAgICAgIGlmICggdjIgPT0gTlVMTCApIHsKQEAgLTEwMDgsNiArMTIzMiw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYodjIpOwogICAgICAgICB9CisgICAgICAgIGlmICh0eXBlICE9IFRZUEVfU0VUKQorICAgICAgICAgICAgdiA9IHJfcmVmX2luc2VydCh2LCBpZHgsIGZsYWcsIHApOwogICAgICAgICByZXR2YWwgPSB2OwogICAgICAgICBicmVhazsKIApAQCAtMTAyOSw2ICsxMjU1LDEwIEBACiAgICAgICAgICAgICBpbnQgZmlyc3RsaW5lbm87CiAgICAgICAgICAgICBQeU9iamVjdCAqbG5vdGFiID0gTlVMTDsKIAorICAgICAgICAgICAgaWR4ID0gcl9yZWZfcmVzZXJ2ZShmbGFnLCBwKTsKKyAgICAgICAgICAgIGlmIChpZHggPCAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICB2ID0gTlVMTDsKIAogICAgICAgICAgICAgLyogWFhYIGlnbm9yZSBsb25nLT5pbnQgb3ZlcmZsb3dzIGZvciBub3cgKi8KQEAgLTEwODQsNiArMTMxNCw4IEBACiAgICAgICAgICAgICBpZiAobmFtZSA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gY29kZV9lcnJvcjsKICAgICAgICAgICAgIGZpcnN0bGluZW5vID0gKGludClyX2xvbmcocCk7CisgICAgICAgICAgICBpZiAoZmlyc3RsaW5lbm8gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGxub3RhYiA9IHJfb2JqZWN0KHApOwogICAgICAgICAgICAgaWYgKGxub3RhYiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gY29kZV9lcnJvcjsKQEAgLTEwOTQsNiArMTMyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSwgY29uc3RzLCBuYW1lcywgdmFybmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZXZhcnMsIGNlbGx2YXJzLCBmaWxlbmFtZSwgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdGxpbmVubywgbG5vdGFiKTsKKyAgICAgICAgICAgIHYgPSByX3JlZl9pbnNlcnQodiwgaWR4LCBmbGFnLCBwKTsKIAogICAgICAgICAgIGNvZGVfZXJyb3I6CiAgICAgICAgICAgICBQeV9YREVDUkVGKGNvZGUpOwpAQCAtMTEwOSwxMSArMTM0MiwyNyBAQAogICAgICAgICByZXR2YWwgPSB2OwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVFlQRV9SRUY6CisgICAgICAgIG4gPSByX2xvbmcocCk7CisgICAgICAgIGlmIChuIDwgMCB8fCBuID49IFB5TGlzdF9HRVRfU0laRShwLT5yZWZzKSkgeworICAgICAgICAgICAgaWYgKG4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoaW52YWxpZCByZWZlcmVuY2UpIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB2ID0gUHlMaXN0X0dFVF9JVEVNKHAtPnJlZnMsIG4pOworICAgICAgICBpZiAodiA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKGludmFsaWQgcmVmZXJlbmNlKSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUHlfSU5DUkVGKHYpOworICAgICAgICByZXR2YWwgPSB2OworICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8qIEJvZ3VzIGRhdGEgZ290IHdyaXR0ZW4sIHdoaWNoIGlzbid0IGlkZWFsLgogICAgICAgICAgICBUaGlzIHdpbGwgbGV0IHlvdSBrZWVwIHdvcmtpbmcgYW5kIHJlY292ZXIuICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAodW5rbm93biB0eXBlIGNvZGUpIik7Ci0gICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgIGJyZWFrOwogCiAgICAgfQpAQCAtMTEzOSwyMyArMTM4OCwzMyBAQAogUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKEZJTEUgKmZwKQogewogICAgIFJGSUxFIHJmOworICAgIGludCByZXM7CiAgICAgYXNzZXJ0KGZwKTsKICAgICByZi5yZWFkYWJsZSA9IE5VTEw7CiAgICAgcmYuZnAgPSBmcDsKICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKICAgICByZi5lbmQgPSByZi5wdHIgPSBOVUxMOwotICAgIHJldHVybiByX3Nob3J0KCZyZik7CisgICAgcmYuYnVmID0gTlVMTDsKKyAgICByZXMgPSByX3Nob3J0KCZyZik7CisgICAgaWYgKHJmLmJ1ZiAhPSBOVUxMKQorICAgICAgICBQeU1lbV9GUkVFKHJmLmJ1Zik7CisgICAgcmV0dXJuIHJlczsKIH0KIAogbG9uZwogUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoRklMRSAqZnApCiB7CiAgICAgUkZJTEUgcmY7CisgICAgbG9uZyByZXM7CiAgICAgcmYuZnAgPSBmcDsKICAgICByZi5yZWFkYWJsZSA9IE5VTEw7CiAgICAgcmYuY3VycmVudF9maWxlbmFtZSA9IE5VTEw7CiAgICAgcmYucHRyID0gcmYuZW5kID0gTlVMTDsKLSAgICByZXR1cm4gcl9sb25nKCZyZik7CisgICAgcmYuYnVmID0gTlVMTDsKKyAgICByZXMgPSByX2xvbmcoJnJmKTsKKyAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiAjaWZkZWYgSEFWRV9GU1RBVApAQCAtMTIxNCwyMiArMTQ3MywzNiBAQAogICAgIHJmLmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOwogICAgIHJmLmRlcHRoID0gMDsKICAgICByZi5wdHIgPSByZi5lbmQgPSBOVUxMOworICAgIHJmLmJ1ZiA9IE5VTEw7CisgICAgcmYucmVmcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJmLnJlZnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmVzdWx0ID0gcl9vYmplY3QoJnJmKTsKKyAgICBQeV9ERUNSRUYocmYucmVmcyk7CisgICAgaWYgKHJmLmJ1ZiAhPSBOVUxMKQorICAgICAgICBQeU1lbV9GUkVFKHJmLmJ1Zik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHlPYmplY3QgKgotUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKGNoYXIgKnN0ciwgUHlfc3NpemVfdCBsZW4pCitQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY29uc3QgY2hhciAqc3RyLCBQeV9zc2l6ZV90IGxlbikKIHsKICAgICBSRklMRSByZjsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIHJmLmZwID0gTlVMTDsKICAgICByZi5yZWFkYWJsZSA9IE5VTEw7CiAgICAgcmYuY3VycmVudF9maWxlbmFtZSA9IE5VTEw7Ci0gICAgcmYucHRyID0gc3RyOwotICAgIHJmLmVuZCA9IHN0ciArIGxlbjsKKyAgICByZi5wdHIgPSAoY2hhciAqKXN0cjsKKyAgICByZi5lbmQgPSAoY2hhciAqKXN0ciArIGxlbjsKKyAgICByZi5idWYgPSBOVUxMOwogICAgIHJmLmRlcHRoID0gMDsKKyAgICByZi5yZWZzID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmYucmVmcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXN1bHQgPSByX29iamVjdCgmcmYpOworICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKKyAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjQ4LDcgKzE1MjEsMTMgQEAKICAgICB3Zi5lcnJvciA9IFdGRVJSX09LOwogICAgIHdmLmRlcHRoID0gMDsKICAgICB3Zi52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICBpZiAodmVyc2lvbiA+PSAzKSB7CisgICAgICAgIGlmICgod2YucmVmcyA9IFB5RGljdF9OZXcoKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZQorICAgICAgICB3Zi5yZWZzID0gTlVMTDsKICAgICB3X29iamVjdCh4LCAmd2YpOworICAgIFB5X1hERUNSRUYod2YucmVmcyk7CiAgICAgaWYgKHdmLnN0ciAhPSBOVUxMKSB7CiAgICAgICAgIGNoYXIgKmJhc2UgPSBQeUJ5dGVzX0FTX1NUUklORygoUHlCeXRlc09iamVjdCAqKXdmLnN0cik7CiAgICAgICAgIGlmICh3Zi5wdHIgLSBiYXNlID4gUFlfU1NJWkVfVF9NQVgpIHsKQEAgLTEzMjAsNiArMTU5OSw4IEBACiAgICAgICogTWFrZSBhIGNhbGwgdG8gdGhlIHJlYWQgbWV0aG9kLCBidXQgcmVhZCB6ZXJvIGJ5dGVzLgogICAgICAqIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBwYXNzZWQgaW4gYXQgbGVhc3QKICAgICAgKiBoYXMgYSByZWFkIG1ldGhvZCB3aGljaCByZXR1cm5zIGJ5dGVzLgorICAgICAqIFRoaXMgY2FuIGJlIHJlbW92ZWQgaWYgd2UgZ3VhcmFudGVlIGdvb2QgZXJyb3IgaGFuZGxpbmcKKyAgICAgKiBmb3Igcl9zdHJpbmcoKQogICAgICAqLwogICAgIGRhdGEgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGYsICZQeUlkX3JlYWQsICJpIiwgMCk7CiAgICAgaWYgKGRhdGEgPT0gTlVMTCkKQEAgLTEzMzUsNyArMTYxNiwxNSBAQAogICAgICAgICByZi5mcCA9IE5VTEw7CiAgICAgICAgIHJmLnJlYWRhYmxlID0gZjsKICAgICAgICAgcmYuY3VycmVudF9maWxlbmFtZSA9IE5VTEw7Ci0gICAgICAgIHJlc3VsdCA9IHJlYWRfb2JqZWN0KCZyZik7CisgICAgICAgIHJmLnB0ciA9IHJmLmVuZCA9IE5VTEw7CisgICAgICAgIHJmLmJ1ZiA9IE5VTEw7CisgICAgICAgIGlmICgocmYucmVmcyA9IFB5TGlzdF9OZXcoMCkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlYWRfb2JqZWN0KCZyZik7CisgICAgICAgICAgICBQeV9ERUNSRUYocmYucmVmcyk7CisgICAgICAgICAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgICAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IE5VTEw7CiAgICAgfQogICAgIFB5X0RFQ1JFRihkYXRhKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTM5Miw4ICsxNjgxLDExIEBACiAgICAgcmYucHRyID0gczsKICAgICByZi5lbmQgPSBzICsgbjsKICAgICByZi5kZXB0aCA9IDA7CisgICAgaWYgKChyZi5yZWZzID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmVzdWx0ID0gcmVhZF9vYmplY3QoJnJmKTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwKTsKKyAgICBQeV9ERUNSRUYocmYucmVmcyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTQzMyw2ICsxNzI1LDcgQEAKIHZlcnNpb24gLS0gaW5kaWNhdGVzIHRoZSBmb3JtYXQgdGhhdCB0aGUgbW9kdWxlIHVzZXMuIFZlcnNpb24gMCBpcyB0aGVcblwKICAgICBoaXN0b3JpY2FsIGZvcm1hdCwgdmVyc2lvbiAxIHNoYXJlcyBpbnRlcm5lZCBzdHJpbmdzIGFuZCB2ZXJzaW9uIDJcblwKICAgICB1c2VzIGEgYmluYXJ5IGZvcm1hdCBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy5cblwKKyAgICBWZXJzaW9uIDMgc2hhcmVzIGNvbW1vbiBvYmplY3QgcmVmZXJlbmNlcyAoTmV3IGluIHZlcnNpb24gMy40KS5cblwKIFxuXAogRnVuY3Rpb25zOlxuXAogXG5cCmRpZmYgLS1naXQgYS9QeXRob24vbW9kc3VwcG9ydC5jIGIvUHl0aG9uL21vZHN1cHBvcnQuYwppbmRleCA0Mjg5MTRmLi42YzkzOGRkIDEwMDY0NAotLS0gYS9QeXRob24vbW9kc3VwcG9ydC5jCisrKyBiL1B5dGhvbi9tb2RzdXBwb3J0LmMKQEAgLTE2MSw3ICsxNjEsMTcgQEAKICAgICAvKiBOb3RlIHRoYXQgd2UgY2FuJ3QgYmFpbCBpbW1lZGlhdGVseSBvbiBlcnJvciBhcyB0aGlzIHdpbGwgbGVhawogICAgICAgIHJlZmNvdW50cyBvbiBhbnkgJ04nIGFyZ3VtZW50cy4gKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp3ID0gZG9fbWt2YWx1ZShwX2Zvcm1hdCwgcF92YSwgZmxhZ3MpOworICAgICAgICBQeU9iamVjdCAqdzsKKworICAgICAgICBpZiAoaXRlbWZhaWxlZCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CisgICAgICAgICAgICBQeUVycl9GZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7CisgICAgICAgICAgICB3ID0gZG9fbWt2YWx1ZShwX2Zvcm1hdCwgcF92YSwgZmxhZ3MpOworICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShleGNlcHRpb24sIHZhbHVlLCB0Yik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB3ID0gZG9fbWt2YWx1ZShwX2Zvcm1hdCwgcF92YSwgZmxhZ3MpOworICAgICAgICB9CiAgICAgICAgIGlmICh3ID09IE5VTEwpIHsKICAgICAgICAgICAgIGl0ZW1mYWlsZWQgPSAxOwogICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL215c3RydG91bC5jIGIvUHl0aG9uL215c3RydG91bC5jCmluZGV4IDhhNTRjYmYuLjk4NDI5ZDQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9teXN0cnRvdWwuYworKysgYi9QeXRob24vbXlzdHJ0b3VsLmMKQEAgLTkyLDExICs5MiwxMSBAQAogKiogICAgICAgICAgICAgIGV4Y2VwdGlvbnMgLSB3ZSBkb24ndCBjaGVjayBmb3IgdGhlbS4KICovCiB1bnNpZ25lZCBsb25nCi1QeU9TX3N0cnRvdWwocmVnaXN0ZXIgY2hhciAqc3RyLCBjaGFyICoqcHRyLCBpbnQgYmFzZSkKK1B5T1Nfc3RydG91bChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipwdHIsIGludCBiYXNlKQogewotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsgLyogcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiAqLwotICAgIHJlZ2lzdGVyIGludCBjOyAgICAgICAgICAgICAvKiBjdXJyZW50IGlucHV0IGNoYXJhY3RlciAqLwotICAgIHJlZ2lzdGVyIGludCBvdmxpbWl0OyAgICAgICAvKiByZXF1aXJlZCBkaWdpdHMgdG8gb3ZlcmZsb3cgKi8KKyAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7IC8qIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gKi8KKyAgICBpbnQgYzsgICAgICAgICAgICAgLyogY3VycmVudCBpbnB1dCBjaGFyYWN0ZXIgKi8KKyAgICBpbnQgb3ZsaW1pdDsgICAgICAgLyogcmVxdWlyZWQgZGlnaXRzIHRvIG92ZXJmbG93ICovCiAKICAgICAvKiBza2lwIGxlYWRpbmcgd2hpdGUgc3BhY2UgKi8KICAgICB3aGlsZSAoKnN0ciAmJiBQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpzdHIpKSkKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDB4ICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSAxNikgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMG8gKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBiICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgICAgICAgICB3aGlsZSAoUHlfSVNTUEFDRShQeV9DSEFSTUFTSygqc3RyKSkpCiAgICAgICAgICAgICAgICAgICAgICsrc3RyOwogICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMHggKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwbyAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gOCkgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMGIgKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDIpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICAgIC8qIGNhdGNoIHNpbGx5IGJhc2VzICovCiAgICAgaWYgKGJhc2UgPCAyIHx8IGJhc2UgPiAzNikgewogICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0yMTMsNyArMjEzLDcgQEAKICAgICAgICAgaWYgKG92bGltaXQgPiAwKSAvKiBubyBvdmVyZmxvdyBjaGVjayByZXF1aXJlZCAqLwogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIGM7CiAgICAgICAgIGVsc2UgeyAvKiByZXF1aXJlcyBvdmVyZmxvdyBjaGVjayAqLwotICAgICAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB0ZW1wX3Jlc3VsdDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGVtcF9yZXN1bHQ7CiAKICAgICAgICAgICAgIGlmIChvdmxpbWl0IDwgMCkgLyogZ3VhcmFudGVlZCBvdmVyZmxvdyAqLwogICAgICAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3dlZDsKQEAgLTIzOSw3ICsyMzksNyBAQAogCiAgICAgLyogc2V0IHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIHNjYW5uZWQgKi8KICAgICBpZiAocHRyKQotICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAKICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICAgICAgLyogc3Bvb2wgdGhyb3VnaCByZW1haW5pbmcgZGlnaXQgY2hhcmFjdGVycyAqLwogICAgICAgICB3aGlsZSAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKCpzdHIpXSA8IGJhc2UpCiAgICAgICAgICAgICArK3N0cjsKLSAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgIH0KICAgICBlcnJubyA9IEVSQU5HRTsKICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpLTE7CkBAIC0yNjAsNyArMjYwLDcgQEAKICNkZWZpbmUgUFlfQUJTX0xPTkdfTUlOICAgICAgICAgKDAtKHVuc2lnbmVkIGxvbmcpTE9OR19NSU4pCiAKIGxvbmcKLVB5T1Nfc3RydG9sKGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCitQeU9TX3N0cnRvbChjb25zdCBjaGFyICpzdHIsIGNoYXIgKipwdHIsIGludCBiYXNlKQogewogICAgIGxvbmcgcmVzdWx0OwogICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKZGlmZiAtLWdpdCBhL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oIGIvUHl0aG9uL29wY29kZV90YXJnZXRzLmgKaW5kZXggMmQ2YmNkYS4uZjkwYTE3YSAxMDA2NDQKLS0tIGEvUHl0aG9uL29wY29kZV90YXJnZXRzLmgKKysrIGIvUHl0aG9uL29wY29kZV90YXJnZXRzLmgKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAmJlRBUkdFVF9CSU5BUllfT1IsCiAgICAgJiZUQVJHRVRfSU5QTEFDRV9QT1dFUiwKICAgICAmJlRBUkdFVF9HRVRfSVRFUiwKLSAgICAmJlRBUkdFVF9TVE9SRV9MT0NBTFMsCisgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZUQVJHRVRfUFJJTlRfRVhQUiwKICAgICAmJlRBUkdFVF9MT0FEX0JVSUxEX0NMQVNTLAogICAgICYmVEFSR0VUX1lJRUxEX0ZST00sCkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAmJlRBUkdFVF9MSVNUX0FQUEVORCwKICAgICAmJlRBUkdFVF9TRVRfQURELAogICAgICYmVEFSR0VUX01BUF9BREQsCi0gICAgJiZfdW5rbm93bl9vcGNvZGUsCisgICAgJiZUQVJHRVRfTE9BRF9DTEFTU0RFUkVGLAogICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmX3Vua25vd25fb3Bjb2RlLApkaWZmIC0tZ2l0IGEvUHl0aG9uL3BlZXBob2xlLmMgYi9QeXRob24vcGVlcGhvbGUuYwppbmRleCA1ZDUzNjc3Li40MTg1NDYyIDEwMDY0NAotLS0gYS9QeXRob24vcGVlcGhvbGUuYworKysgYi9QeXRob24vcGVlcGhvbGUuYwpAQCAtMjc1LDYgKzI3NSw3IEBACiAgICAgbGVuX2NvbnN0cyA9IFB5TGlzdF9HRVRfU0laRShjb25zdHMpOwogICAgIGlmIChQeUxpc3RfQXBwZW5kKGNvbnN0cywgbmV3Y29uc3QpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihuZXdjb25zdCk7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBQeV9ERUNSRUYobmV3Y29uc3QpOwpAQCAtMzI3LDM3ICszMjgsNiBAQAogICAgIHJldHVybiBibG9ja3M7CiB9CiAKLS8qIEhlbHBlciB0byByZXBsYWNlIExPQURfTkFNRSBOb25lL1RydWUvRmFsc2Ugd2l0aCBMT0FEX0NPTlNUCi0gICBSZXR1cm5zOiAwIGlmIG5vIGNoYW5nZSwgMSBpZiBjaGFuZ2UsIC0xIGlmIGVycm9yICovCi1zdGF0aWMgaW50Ci1sb2FkX2dsb2JhbCh1bnNpZ25lZCBjaGFyICpjb2Rlc3RyLCBQeV9zc2l6ZV90IGksIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjb25zdHMpCi17Ci0gICAgUHlfc3NpemVfdCBqOwotICAgIFB5T2JqZWN0ICpvYmo7Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHN0cmNtcChuYW1lLCAiTm9uZSIpID09IDApCi0gICAgICAgIG9iaiA9IFB5X05vbmU7Ci0gICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJUcnVlIikgPT0gMCkKLSAgICAgICAgb2JqID0gUHlfVHJ1ZTsKLSAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgIkZhbHNlIikgPT0gMCkKLSAgICAgICAgb2JqID0gUHlfRmFsc2U7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLSAgICBmb3IgKGogPSAwOyBqIDwgUHlMaXN0X0dFVF9TSVpFKGNvbnN0cyk7IGorKykgewotICAgICAgICBpZiAoUHlMaXN0X0dFVF9JVEVNKGNvbnN0cywgaikgPT0gb2JqKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChqID09IFB5TGlzdF9HRVRfU0laRShjb25zdHMpKSB7Ci0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGNvbnN0cywgb2JqKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGFzc2VydChQeUxpc3RfR0VUX0lURU0oY29uc3RzLCBqKSA9PSBvYmopOwotICAgIGNvZGVzdHJbaV0gPSBMT0FEX0NPTlNUOwotICAgIFNFVEFSRyhjb2Rlc3RyLCBpLCBqKTsKLSAgICByZXR1cm4gMTsKLX0KLQogLyogUGVyZm9ybSBiYXNpYyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIHRvIGNvbXBvbmVudHMgb2YgYSBjb2RlIG9iamVjdC4KICAgIFRoZSBjb25zdHMgb2JqZWN0IHNob3VsZCBzdGlsbCBiZSBpbiBsaXN0IGZvcm0gdG8gYWxsb3cgbmV3IGNvbnN0YW50cwogICAgdG8gYmUgYXBwZW5kZWQuCkBAIC0zOTIsNyArMzYyLDYgQEAKICAgICBQeV9zc2l6ZV90IGNvbnN0X3N0YWNrX3NpemUgPSAwOwogICAgIGludCBpbl9jb25zdHMgPSAwOyAgLyogd2hldGhlciB3ZSBhcmUgaW4gYSBMT0FEX0NPTlNUIHNlcXVlbmNlICovCiAgICAgdW5zaWduZWQgaW50ICpibG9ja3MgPSBOVUxMOwotICAgIGNoYXIgKm5hbWU7CiAKICAgICAvKiBCYWlsIG91dCBpZiBhbiBleGNlcHRpb24gaXMgc2V0ICovCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCkBAIC00MTMsOCArMzgyLDEwIEBACiAKICAgICAvKiBNYWtlIGEgbW9kaWZpYWJsZSBjb3B5IG9mIHRoZSBjb2RlIHN0cmluZyAqLwogICAgIGNvZGVzdHIgPSAodW5zaWduZWQgY2hhciAqKVB5TWVtX01hbGxvYyhjb2RlbGVuKTsKLSAgICBpZiAoY29kZXN0ciA9PSBOVUxMKQorICAgIGlmIChjb2Rlc3RyID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBleGl0RXJyb3I7CisgICAgfQogICAgIGNvZGVzdHIgPSAodW5zaWduZWQgY2hhciAqKW1lbWNweShjb2Rlc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjb2RlKSwgY29kZWxlbik7CiAKQEAgLTQyOCw4ICszOTksMTAgQEAKIAogICAgIC8qIE1hcHBpbmcgdG8gbmV3IGp1bXAgdGFyZ2V0cyBhZnRlciBOT1BzIGFyZSByZW1vdmVkICovCiAgICAgYWRkcm1hcCA9IChpbnQgKilQeU1lbV9NYWxsb2MoY29kZWxlbiAqIHNpemVvZihpbnQpKTsKLSAgICBpZiAoYWRkcm1hcCA9PSBOVUxMKQorICAgIGlmIChhZGRybWFwID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBleGl0RXJyb3I7CisgICAgfQogCiAgICAgYmxvY2tzID0gbWFya2Jsb2Nrcyhjb2Rlc3RyLCBjb2RlbGVuKTsKICAgICBpZiAoYmxvY2tzID09IE5VTEwpCkBAIC00NzUsMjAgKzQ0OCw2IEBACiAgICAgICAgICAgICAgICAgY29kZXN0cltpKzNdID0gTk9QOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgLyogUmVwbGFjZSBMT0FEX0dMT0JBTC9MT0FEX05BTUUgTm9uZS9UcnVlL0ZhbHNlCi0gICAgICAgICAgICAgICAgICAgd2l0aCBMT0FEX0NPTlNUIE5vbmUvVHJ1ZS9GYWxzZSAqLwotICAgICAgICAgICAgY2FzZSBMT0FEX05BTUU6Ci0gICAgICAgICAgICBjYXNlIExPQURfR0xPQkFMOgotICAgICAgICAgICAgICAgIGogPSBHRVRBUkcoY29kZXN0ciwgaSk7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoUHlUdXBsZV9HRVRfSVRFTShuYW1lcywgaikpOwotICAgICAgICAgICAgICAgIGggPSBsb2FkX2dsb2JhbChjb2Rlc3RyLCBpLCBuYW1lLCBjb25zdHMpOwotICAgICAgICAgICAgICAgIGlmIChoIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBleGl0RXJyb3I7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaCA9PSAwKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBDT05TVF9TVEFDS19QVVNIX09QKGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIExPQURfQ09OU1QgdHJ1ZWNvbnN0CiAgICAgICAgICAgICAgICAgICAgUE9QX0pVTVBfSUZfRkFMU0UgeHguIFRoaXMgaW1wcm92ZXMKICAgICAgICAgICAgICAgICAgICAid2hpbGUgMSIgcGVyZm9ybWFuY2UuICovCmRpZmYgLS1naXQgYS9QeXRob24vcHlhcmVuYS5jIGIvUHl0aG9uL3B5YXJlbmEuYwppbmRleCAwMmEzMWQ4Li4xMDM2MDNmIDEwMDY0NAotLS0gYS9QeXRob24vcHlhcmVuYS5jCisrKyBiL1B5dGhvbi9weWFyZW5hLmMKQEAgLTc3LDcgKzc3LDcgQEAKIHsKICAgICAvKiBBbGxvY2F0ZSBoZWFkZXIgYW5kIGJsb2NrIGFzIG9uZSB1bml0LgogICAgICAgIGFiX21lbSBwb2ludHMganVzdCBwYXN0IGhlYWRlci4gKi8KLSAgICBibG9jayAqYiA9IChibG9jayAqKW1hbGxvYyhzaXplb2YoYmxvY2spICsgc2l6ZSk7CisgICAgYmxvY2sgKmIgPSAoYmxvY2sgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKGJsb2NrKSArIHNpemUpOwogICAgIGlmICghYikKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYi0+YWJfc2l6ZSA9IHNpemU7CkBAIC05Miw3ICs5Miw3IEBACiBibG9ja19mcmVlKGJsb2NrICpiKSB7CiAgICAgd2hpbGUgKGIpIHsKICAgICAgICAgYmxvY2sgKm5leHQgPSBiLT5hYl9uZXh0OwotICAgICAgICBmcmVlKGIpOworICAgICAgICBQeU1lbV9GcmVlKGIpOwogICAgICAgICBiID0gbmV4dDsKICAgICB9CiB9CkBAIC0xMjcsMjAgKzEyNywyMCBAQAogUHlBcmVuYSAqCiBQeUFyZW5hX05ldygpCiB7Ci0gICAgUHlBcmVuYSogYXJlbmEgPSAoUHlBcmVuYSAqKW1hbGxvYyhzaXplb2YoUHlBcmVuYSkpOworICAgIFB5QXJlbmEqIGFyZW5hID0gKFB5QXJlbmEgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5QXJlbmEpKTsKICAgICBpZiAoIWFyZW5hKQogICAgICAgICByZXR1cm4gKFB5QXJlbmEqKVB5RXJyX05vTWVtb3J5KCk7CiAKICAgICBhcmVuYS0+YV9oZWFkID0gYmxvY2tfbmV3KERFRkFVTFRfQkxPQ0tfU0laRSk7CiAgICAgYXJlbmEtPmFfY3VyID0gYXJlbmEtPmFfaGVhZDsKICAgICBpZiAoIWFyZW5hLT5hX2hlYWQpIHsKLSAgICAgICAgZnJlZSgodm9pZCAqKWFyZW5hKTsKKyAgICAgICAgUHlNZW1fRnJlZSgodm9pZCAqKWFyZW5hKTsKICAgICAgICAgcmV0dXJuIChQeUFyZW5hKilQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KICAgICBhcmVuYS0+YV9vYmplY3RzID0gUHlMaXN0X05ldygwKTsKICAgICBpZiAoIWFyZW5hLT5hX29iamVjdHMpIHsKICAgICAgICAgYmxvY2tfZnJlZShhcmVuYS0+YV9oZWFkKTsKLSAgICAgICAgZnJlZSgodm9pZCAqKWFyZW5hKTsKKyAgICAgICAgUHlNZW1fRnJlZSgodm9pZCAqKWFyZW5hKTsKICAgICAgICAgcmV0dXJuIChQeUFyZW5hKilQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KICNpZiBkZWZpbmVkKFB5X0RFQlVHKQpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgKi8KIAogICAgIFB5X0RFQ1JFRihhcmVuYS0+YV9vYmplY3RzKTsKLSAgICBmcmVlKGFyZW5hKTsKKyAgICBQeU1lbV9GcmVlKGFyZW5hKTsKIH0KIAogdm9pZCAqCmRpZmYgLS1naXQgYS9QeXRob24vcHloYXNoLmMgYi9QeXRob24vcHloYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjYjU0NwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi9weWhhc2guYwpAQCAtMCwwICsxLDQyNyBAQAorLyogU2V0IG9mIGhhc2ggdXRpbGl0eSBmdW5jdGlvbnMgdG8gaGVscCBtYWludGFpbmluZyB0aGUgaW52YXJpYW50IHRoYXQKKyAgICBpZiBhPT1iIHRoZW4gaGFzaChhKT09aGFzaChiKQorCisgICBBbGwgdGhlIHV0aWxpdHkgZnVuY3Rpb25zIChfUHlfSGFzaCooKSkgcmV0dXJuICItMSIgdG8gc2lnbmlmeSBhbiBlcnJvci4KKyovCisjaW5jbHVkZSAiUHl0aG9uLmgiCisKKyNpZmRlZiBfX0FQUExFX18KKyMgIGluY2x1ZGUgPGxpYmtlcm4vT1NCeXRlT3JkZXIuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9MRTY0VE9IKSAmJiBkZWZpbmVkKEhBVkVfRU5ESUFOX0gpCisjICBpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9MRTY0VE9IKSAmJiBkZWZpbmVkKEhBVkVfU1lTX0VORElBTl9IKQorIyAgaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX1B5X0hhc2hTZWNyZXRfdCBfUHlfSGFzaFNlY3JldDsKKworI2lmIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfRVhURVJOQUwKK2V4dGVybiBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYzsKKyNlbHNlCitzdGF0aWMgUHlIYXNoX0Z1bmNEZWYgUHlIYXNoX0Z1bmM7CisjZW5kaWYKKworLyogQ291bnQgX1B5X0hhc2hCeXRlcygpIGNhbGxzICovCisjaWZkZWYgUHlfSEFTSF9TVEFUUworI2RlZmluZSBQeV9IQVNIX1NUQVRTX01BWCAzMgorc3RhdGljIFB5X3NzaXplX3QgaGFzaHN0YXRzW1B5X0hBU0hfU1RBVFNfTUFYICsgMV0gPSB7MH07CisjZW5kaWYKKworLyogRm9yIG51bWVyaWMgdHlwZXMsIHRoZSBoYXNoIG9mIGEgbnVtYmVyIHggaXMgYmFzZWQgb24gdGhlIHJlZHVjdGlvbgorICAgb2YgeCBtb2R1bG8gdGhlIHByaW1lIFAgPSAyKipfUHlIQVNIX0JJVFMgLSAxLiAgSXQncyBkZXNpZ25lZCBzbyB0aGF0CisgICBoYXNoKHgpID09IGhhc2goeSkgd2hlbmV2ZXIgeCBhbmQgeSBhcmUgbnVtZXJpY2FsbHkgZXF1YWwsIGV2ZW4gaWYKKyAgIHggYW5kIHkgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuCisKKyAgIEEgcXVpY2sgc3VtbWFyeSBvZiB0aGUgaGFzaGluZyBzdHJhdGVneToKKworICAgKDEpIEZpcnN0IGRlZmluZSB0aGUgJ3JlZHVjdGlvbiBvZiB4IG1vZHVsbyBQJyBmb3IgYW55IHJhdGlvbmFsCisgICBudW1iZXIgeDsgdGhpcyBpcyBhIHN0YW5kYXJkIGV4dGVuc2lvbiBvZiB0aGUgdXN1YWwgbm90aW9uIG9mCisgICByZWR1Y3Rpb24gbW9kdWxvIFAgZm9yIGludGVnZXJzLiAgSWYgeCA9PSBwL3EgKHdyaXR0ZW4gaW4gbG93ZXN0CisgICB0ZXJtcyksIHRoZSByZWR1Y3Rpb24gaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIHJlZHVjdGlvbiBvZiBwIHRpbWVzCisgICB0aGUgaW52ZXJzZSBvZiB0aGUgcmVkdWN0aW9uIG9mIHEsIGFsbCBtb2R1bG8gUDsgaWYgcSBpcyBleGFjdGx5CisgICBkaXZpc2libGUgYnkgUCB0aGVuIGRlZmluZSB0aGUgcmVkdWN0aW9uIHRvIGJlIGluZmluaXR5LiAgU28gd2UndmUKKyAgIGdvdCBhIHdlbGwtZGVmaW5lZCBtYXAKKworICAgICAgcmVkdWNlIDogeyByYXRpb25hbCBudW1iZXJzIH0gLT4geyAwLCAxLCAyLCAuLi4sIFAtMSwgaW5maW5pdHkgfS4KKworICAgKDIpIE5vdyBmb3IgYSByYXRpb25hbCBudW1iZXIgeCwgZGVmaW5lIGhhc2goeCkgYnk6CisKKyAgICAgIHJlZHVjZSh4KSAgIGlmIHggPj0gMAorICAgICAgLXJlZHVjZSgteCkgaWYgeCA8IDAKKworICAgSWYgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uIGlzIGluZmluaXR5ICh0aGlzIGlzIGltcG9zc2libGUgZm9yCisgICBpbnRlZ2VycywgZmxvYXRzIGFuZCBEZWNpbWFscykgdGhlbiB1c2UgdGhlIHByZWRlZmluZWQgaGFzaCB2YWx1ZQorICAgX1B5SEFTSF9JTkYgZm9yIHggPj0gMCwgb3IgLV9QeUhBU0hfSU5GIGZvciB4IDwgMCwgaW5zdGVhZC4KKyAgIF9QeUhBU0hfSU5GLCAtX1B5SEFTSF9JTkYgYW5kIF9QeUhBU0hfTkFOIGFyZSBhbHNvIHVzZWQgZm9yIHRoZQorICAgaGFzaGVzIG9mIGZsb2F0IGFuZCBEZWNpbWFsIGluZmluaXRpZXMgYW5kIG5hbnMuCisKKyAgIEEgc2VsbGluZyBwb2ludCBmb3IgdGhlIGFib3ZlIHN0cmF0ZWd5IGlzIHRoYXQgaXQgbWFrZXMgaXQgcG9zc2libGUKKyAgIHRvIGNvbXB1dGUgaGFzaGVzIG9mIGRlY2ltYWwgYW5kIGJpbmFyeSBmbG9hdGluZy1wb2ludCBudW1iZXJzCisgICBlZmZpY2llbnRseSwgZXZlbiBpZiB0aGUgZXhwb25lbnQgb2YgdGhlIGJpbmFyeSBvciBkZWNpbWFsIG51bWJlcgorICAgaXMgbGFyZ2UuICBUaGUga2V5IHBvaW50IGlzIHRoYXQKKworICAgICAgcmVkdWNlKHggKiB5KSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoeSkgKG1vZHVsbyBfUHlIQVNIX01PRFVMVVMpCisKKyAgIHByb3ZpZGVkIHRoYXQge3JlZHVjZSh4KSwgcmVkdWNlKHkpfSAhPSB7MCwgaW5maW5pdHl9LiAgVGhlIHJlZHVjdGlvbiBvZiBhCisgICBiaW5hcnkgb3IgZGVjaW1hbCBmbG9hdCBpcyBuZXZlciBpbmZpbml0eSwgc2luY2UgdGhlIGRlbm9taW5hdG9yIGlzIGEgcG93ZXIKKyAgIG9mIDIgKGZvciBiaW5hcnkpIG9yIGEgZGl2aXNvciBvZiBhIHBvd2VyIG9mIDEwIChmb3IgZGVjaW1hbCkuICBTbyB3ZSBoYXZlLAorICAgZm9yIG5vbm5lZ2F0aXZlIHgsCisKKyAgICAgIHJlZHVjZSh4ICogMioqZSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKDIqKmUpICUgX1B5SEFTSF9NT0RVTFVTCisKKyAgICAgIHJlZHVjZSh4ICogMTAqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgxMCoqZSkgJSBfUHlIQVNIX01PRFVMVVMKKworICAgYW5kIHJlZHVjZSgxMCoqZSkgY2FuIGJlIGNvbXB1dGVkIGVmZmljaWVudGx5IGJ5IHRoZSB1c3VhbCBtb2R1bGFyCisgICBleHBvbmVudGlhdGlvbiBhbGdvcml0aG0uICBGb3IgcmVkdWNlKDIqKmUpIGl0J3MgZXZlbiBiZXR0ZXI6IHNpbmNlCisgICBQIGlzIG9mIHRoZSBmb3JtIDIqKm4tMSwgcmVkdWNlKDIqKmUpIGlzIDIqKihlIG1vZCBuKSwgYW5kIG11bHRpcGxpY2F0aW9uCisgICBieSAyKiooZSBtb2QgbikgbW9kdWxvIDIqKm4tMSBqdXN0IGFtb3VudHMgdG8gYSByb3RhdGlvbiBvZiBiaXRzLgorCisgICAqLworCitQeV9oYXNoX3QKK19QeV9IYXNoRG91YmxlKGRvdWJsZSB2KQoreworICAgIGludCBlLCBzaWduOworICAgIGRvdWJsZSBtOworICAgIFB5X3VoYXNoX3QgeCwgeTsKKworICAgIGlmICghUHlfSVNfRklOSVRFKHYpKSB7CisgICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh2KSkKKyAgICAgICAgICAgIHJldHVybiB2ID4gMCA/IF9QeUhBU0hfSU5GIDogLV9QeUhBU0hfSU5GOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gX1B5SEFTSF9OQU47CisgICAgfQorCisgICAgbSA9IGZyZXhwKHYsICZlKTsKKworICAgIHNpZ24gPSAxOworICAgIGlmIChtIDwgMCkgeworICAgICAgICBzaWduID0gLTE7CisgICAgICAgIG0gPSAtbTsKKyAgICB9CisKKyAgICAvKiBwcm9jZXNzIDI4IGJpdHMgYXQgYSB0aW1lOyAgdGhpcyBzaG91bGQgd29yayB3ZWxsIGJvdGggZm9yIGJpbmFyeQorICAgICAgIGFuZCBoZXhhZGVjaW1hbCBmbG9hdGluZyBwb2ludC4gKi8KKyAgICB4ID0gMDsKKyAgICB3aGlsZSAobSkgeworICAgICAgICB4ID0gKCh4IDw8IDI4KSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSAyOCk7CisgICAgICAgIG0gKj0gMjY4NDM1NDU2LjA7ICAvKiAyKioyOCAqLworICAgICAgICBlIC09IDI4OworICAgICAgICB5ID0gKFB5X3VoYXNoX3QpbTsgIC8qIHB1bGwgb3V0IGludGVnZXIgcGFydCAqLworICAgICAgICBtIC09IHk7CisgICAgICAgIHggKz0geTsKKyAgICAgICAgaWYgKHggPj0gX1B5SEFTSF9NT0RVTFVTKQorICAgICAgICAgICAgeCAtPSBfUHlIQVNIX01PRFVMVVM7CisgICAgfQorCisgICAgLyogYWRqdXN0IGZvciB0aGUgZXhwb25lbnQ7ICBmaXJzdCByZWR1Y2UgaXQgbW9kdWxvIF9QeUhBU0hfQklUUyAqLworICAgIGUgPSBlID49IDAgPyBlICUgX1B5SEFTSF9CSVRTIDogX1B5SEFTSF9CSVRTLTEtKCgtMS1lKSAlIF9QeUhBU0hfQklUUyk7CisgICAgeCA9ICgoeCA8PCBlKSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSBlKTsKKworICAgIHggPSB4ICogc2lnbjsKKyAgICBpZiAoeCA9PSAoUHlfdWhhc2hfdCktMSkKKyAgICAgICAgeCA9IChQeV91aGFzaF90KS0yOworICAgIHJldHVybiAoUHlfaGFzaF90KXg7Cit9CisKK1B5X2hhc2hfdAorX1B5X0hhc2hQb2ludGVyKHZvaWQgKnApCit7CisgICAgUHlfaGFzaF90IHg7CisgICAgc2l6ZV90IHkgPSAoc2l6ZV90KXA7CisgICAgLyogYm90dG9tIDMgb3IgNCBiaXRzIGFyZSBsaWtlbHkgdG8gYmUgMDsgcm90YXRlIHkgYnkgNCB0byBhdm9pZAorICAgICAgIGV4Y2Vzc2l2ZSBoYXNoIGNvbGxpc2lvbnMgZm9yIGRpY3RzIGFuZCBzZXRzICovCisgICAgeSA9ICh5ID4+IDQpIHwgKHkgPDwgKDggKiBTSVpFT0ZfVk9JRF9QIC0gNCkpOworICAgIHggPSAoUHlfaGFzaF90KXk7CisgICAgaWYgKHggPT0gLTEpCisgICAgICAgIHggPSAtMjsKKyAgICByZXR1cm4geDsKK30KKworUHlfaGFzaF90CitfUHlfSGFzaEJ5dGVzKGNvbnN0IHZvaWQgKnNyYywgUHlfc3NpemVfdCBsZW4pCit7CisgICAgUHlfaGFzaF90IHg7CisgICAgLyoKKyAgICAgIFdlIG1ha2UgdGhlIGhhc2ggb2YgdGhlIGVtcHR5IHN0cmluZyBiZSAwLCByYXRoZXIgdGhhbiB1c2luZworICAgICAgKHByZWZpeCBeIHN1ZmZpeCksIHNpbmNlIHRoaXMgc2xpZ2h0bHkgb2JmdXNjYXRlcyB0aGUgaGFzaCBzZWNyZXQKKyAgICAqLworICAgIGlmIChsZW4gPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyNpZmRlZiBQeV9IQVNIX1NUQVRTCisgICAgaGFzaHN0YXRzWyhsZW4gPD0gUHlfSEFTSF9TVEFUU19NQVgpID8gbGVuIDogMF0rKzsKKyNlbmRpZgorCisjaWYgUHlfSEFTSF9DVVRPRkYgPiAwCisgICAgaWYgKGxlbiA8IFB5X0hBU0hfQ1VUT0ZGKSB7CisgICAgICAgIC8qIE9wdGltaXplIGhhc2hpbmcgb2YgdmVyeSBzbWFsbCBzdHJpbmdzIHdpdGggaW5saW5lIERKQlgzM0EuICovCisgICAgICAgIFB5X3VoYXNoX3QgaGFzaDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHNyYzsKKyAgICAgICAgaGFzaCA9IDUzODE7IC8qIERKQlgzM0Egc3RhcnRzIHdpdGggNTM4MSAqLworCisgICAgICAgIHN3aXRjaChsZW4pIHsKKyAgICAgICAgICAgIC8qICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnAgPT0gaGFzaCAqIDMzICsgKnAgKi8KKyAgICAgICAgICAgIGNhc2UgNzogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgNjogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgNTogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgNDogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgMzogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgMjogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgMTogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBoYXNoIF49IGxlbjsKKyAgICAgICAgaGFzaCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuZGpieDMzYS5zdWZmaXg7CisgICAgICAgIHggPSAoUHlfaGFzaF90KWhhc2g7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBQeV9IQVNIX0NVVE9GRiAqLworICAgICAgICB4ID0gUHlIYXNoX0Z1bmMuaGFzaChzcmMsIGxlbik7CisKKyAgICBpZiAoeCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0yOworICAgIHJldHVybiB4OworfQorCit2b2lkCitfUHlIYXNoX0Zpbmkodm9pZCkKK3sKKyNpZmRlZiBQeV9IQVNIX1NUQVRTCisgICAgaW50IGk7CisgICAgUHlfc3NpemVfdCB0b3RhbCA9IDA7CisgICAgY2hhciAqZm10ID0gIiUyaSAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZCAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIjsKKworICAgIGZwcmludGYoc3RkZXJyLCAibGVuICAgY2FsbHMgICAgdG90YWxcbiIpOworICAgIGZvciAoaSA9IDE7IGkgPD0gUHlfSEFTSF9TVEFUU19NQVg7IGkrKykgeworICAgICAgICB0b3RhbCArPSBoYXNoc3RhdHNbaV07CisgICAgICAgIGZwcmludGYoc3RkZXJyLCBmbXQsIGksIGhhc2hzdGF0c1tpXSwgdG90YWwpOworICAgIH0KKyAgICB0b3RhbCArPSBoYXNoc3RhdHNbMF07CisgICAgZnByaW50ZihzdGRlcnIsICI+ICAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZCAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwKKyAgICAgICAgICAgIGhhc2hzdGF0c1swXSwgdG90YWwpOworI2VuZGlmCit9CisKK1B5SGFzaF9GdW5jRGVmICoKK1B5SGFzaF9HZXRGdW5jRGVmKHZvaWQpCit7CisgICAgcmV0dXJuICZQeUhhc2hfRnVuYzsKK30KKworLyogT3B0aW1pemVkIG1lbWNweSgpIGZvciBXaW5kb3dzICovCisjaWZkZWYgX01TQ19WRVIKKyMgIGlmIFNJWkVPRl9QWV9VSEFTSF9UID09IDQKKyMgICAgZGVmaW5lIFBZX1VIQVNIX0NQWShkc3QsIHNyYykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBkc3RbMF0gPSBzcmNbMF07IGRzdFsxXSA9IHNyY1sxXTsgZHN0WzJdID0gc3JjWzJdOyBkc3RbM10gPSBzcmNbM107IFwKKyAgICAgICB9IHdoaWxlKDApCisjICBlbGlmIFNJWkVPRl9QWV9VSEFTSF9UID09IDgKKyMgICAgZGVmaW5lIFBZX1VIQVNIX0NQWShkc3QsIHNyYykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBkc3RbMF0gPSBzcmNbMF07IGRzdFsxXSA9IHNyY1sxXTsgZHN0WzJdID0gc3JjWzJdOyBkc3RbM10gPSBzcmNbM107IFwKKyAgICAgICBkc3RbNF0gPSBzcmNbNF07IGRzdFs1XSA9IHNyY1s1XTsgZHN0WzZdID0gc3JjWzZdOyBkc3RbN10gPSBzcmNbN107IFwKKyAgICAgICB9IHdoaWxlKDApCisjICBlbHNlCisjICAgIGVycm9yIFNJWkVPRl9QWV9VSEFTSF9UIG11c3QgYmUgNCBvciA4CisjICBlbmRpZiAvKiBTSVpFT0ZfUFlfVUhBU0hfVCAqLworI2Vsc2UgLyogbm90IFdpbmRvd3MgKi8KKyMgIGRlZmluZSBQWV9VSEFTSF9DUFkoZHN0LCBzcmMpIG1lbWNweShkc3QsIHNyYywgU0laRU9GX1BZX1VIQVNIX1QpCisjZW5kaWYgLyogX01TQ19WRVIgKi8KKworCisjaWYgUHlfSEFTSF9BTEdPUklUSE0gPT0gUHlfSEFTSF9GTlYKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb2RpZmllZCBGb3dsZXItTm9sbC1WbyAoRk5WKSBoYXNoIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBQeV9oYXNoX3QKK2Zudihjb25zdCB2b2lkICpzcmMsIFB5X3NzaXplX3QgbGVuKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBzcmM7CisgICAgUHlfdWhhc2hfdCB4OworICAgIFB5X3NzaXplX3QgcmVtYWluZGVyLCBibG9ja3M7CisgICAgdW5pb24geworICAgICAgICBQeV91aGFzaF90IHZhbHVlOworICAgICAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzW1NJWkVPRl9QWV9VSEFTSF9UXTsKKyAgICB9IGJsb2NrOworCisjaWZkZWYgUHlfREVCVUcKKyAgICBhc3NlcnQoX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQpOworI2VuZGlmCisgICAgcmVtYWluZGVyID0gbGVuICUgU0laRU9GX1BZX1VIQVNIX1Q7CisgICAgaWYgKHJlbWFpbmRlciA9PSAwKSB7CisgICAgICAgIC8qIFByb2Nlc3MgYXQgbGVhc3Qgb25lIGJsb2NrIGJ5dGUgYnkgYnl0ZSB0byByZWR1Y2UgaGFzaCBjb2xsaXNpb25zCisgICAgICAgICAqIGZvciBzdHJpbmdzIHdpdGggY29tbW9uIHByZWZpeGVzLiAqLworICAgICAgICByZW1haW5kZXIgPSBTSVpFT0ZfUFlfVUhBU0hfVDsKKyAgICB9CisgICAgYmxvY2tzID0gKGxlbiAtIHJlbWFpbmRlcikgLyBTSVpFT0ZfUFlfVUhBU0hfVDsKKworICAgIHggPSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuZm52LnByZWZpeDsKKyAgICB4IF49IChQeV91aGFzaF90KSAqcCA8PCA3OworICAgIHdoaWxlIChibG9ja3MtLSkgeworICAgICAgICBQWV9VSEFTSF9DUFkoYmxvY2suYnl0ZXMsIHApOworICAgICAgICB4ID0gKF9QeUhBU0hfTVVMVElQTElFUiAqIHgpIF4gYmxvY2sudmFsdWU7CisgICAgICAgIHAgKz0gU0laRU9GX1BZX1VIQVNIX1Q7CisgICAgfQorICAgIC8qIGFkZCByZW1haW5kZXIgKi8KKyAgICBmb3IgKDsgcmVtYWluZGVyID4gMDsgcmVtYWluZGVyLS0pCisgICAgICAgIHggPSAoX1B5SEFTSF9NVUxUSVBMSUVSICogeCkgXiAoUHlfdWhhc2hfdCkgKnArKzsKKyAgICB4IF49IChQeV91aGFzaF90KSBsZW47CisgICAgeCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuZm52LnN1ZmZpeDsKKyAgICBpZiAoeCA9PSAtMSkgeworICAgICAgICB4ID0gLTI7CisgICAgfQorICAgIHJldHVybiB4OworfQorCitzdGF0aWMgUHlIYXNoX0Z1bmNEZWYgUHlIYXNoX0Z1bmMgPSB7Zm52LCAiZm52IiwgOCAqIFNJWkVPRl9QWV9IQVNIX1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgKiBTSVpFT0ZfUFlfSEFTSF9UfTsKKworI2VuZGlmIC8qIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfRk5WICovCisKKworI2lmIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfU0lQSEFTSDI0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIDxNSVQgTGljZW5zZT4KKyBDb3B5cmlnaHQgKGMpIDIwMTMgIE1hcmVrIE1hamtvd3NraSA8bWFyZWtAcG9wY291bnQub3JnPgorCisgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorIFRIRSBTT0ZUV0FSRS4KKyA8L01JVCBMaWNlbnNlPgorCisgT3JpZ2luYWwgbG9jYXRpb246CisgICAgaHR0cHM6Ly9naXRodWIuY29tL21hamVrL2NzaXBoYXNoLworCisgU29sdXRpb24gaW5zcGlyZWQgYnkgY29kZSBmcm9tOgorICAgIFNhbXVlbCBOZXZlcyAoc3VwZXJjb3AvY3J5cHRvX2F1dGgvc2lwaGFzaDI0L2xpdHRsZSkKKyAgICBkamIgKHN1cGVyY29wL2NyeXB0b19hdXRoL3NpcGhhc2gyNC9saXR0bGUyKQorICAgIEplYW4tUGhpbGlwcGUgQXVtYXNzb24gKGh0dHBzOi8vMTMxMDAyLm5ldC9zaXBoYXNoL3NpcGhhc2gyNC5jKQorCisgTW9kaWZpZWQgZm9yIFB5dGhvbiBieSBDaHJpc3RpYW4gSGVpbWVzOgorICAgIC0gQzg5IC8gTVNWQyBjb21wYXRpYmlsaXR5CisgICAgLSBQWV9VSU5UNjRfVCwgUFlfVUlOVDMyX1QgYW5kIFBZX1VJTlQ4X1QKKyAgICAtIF9yb3RsNjQoKSBvbiBXaW5kb3dzCisgICAgLSBsZXRvaDY0KCkgZmFsbGJhY2sKKyovCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBQWV9VSU5UOF9UOworCisvKiBieXRlIHN3YXAgbGl0dGxlIGVuZGlhbiB0byBob3N0IGVuZGlhbgorICogRW5kaWFuIGNvbnZlcnNpb24gbm90IG9ubHkgZW5zdXJlcyB0aGF0IHRoZSBoYXNoIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUKKyAqIHZhbHVlIG9uIGFsbCBwbGF0Zm9ybXMuIEl0IGlzIGFsc28gcmVxdWlyZWQgdG8gZm9yIGEgZ29vZCBkaXNwZXJzaW9uIG9mCisgKiB0aGUgaGFzaCB2YWx1ZXMnIGxlYXN0IHNpZ25pZmljYW50IGJpdHMuCisgKi8KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisjICBkZWZpbmUgX2xlNjR0b2goeCkgKChQWV9VSU5UNjRfVCkoeCkpCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyMgIGRlZmluZSBfbGU2NHRvaCh4KSBPU1N3YXBMaXR0bGVUb0hvc3RJbnQ2NCh4KQorI2VsaWYgZGVmaW5lZChIQVZFX0xFVE9INjQpCisjICBkZWZpbmUgX2xlNjR0b2goeCkgbGU2NHRvaCh4KQorI2Vsc2UKKyMgIGRlZmluZSBfbGU2NHRvaCh4KSAoKChQWV9VSU5UNjRfVCkoeCkgPDwgNTYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA8PCA0MCkgJiAweGZmMDAwMDAwMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPDwgMjQpICYgMHhmZjAwMDAwMDAwMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA8PCA4KSAgJiAweGZmMDAwMDAwMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA+PiA4KSAgJiAweGZmMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPj4gMjQpICYgMHhmZjAwMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA+PiA0MCkgJiAweGZmMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoUFlfVUlOVDY0X1QpKHgpICA+PiA1NikpCisjZW5kaWYKKworCisjaWZkZWYgX01TQ19WRVIKKyMgIGRlZmluZSBST1RBVEUoeCwgYikgIF9yb3RsNjQoeCwgYikKKyNlbHNlCisjICBkZWZpbmUgUk9UQVRFKHgsIGIpIChQWV9VSU5UNjRfVCkoICgoeCkgPDwgKGIpKSB8ICggKHgpID4+ICg2NCAtIChiKSkpICkKKyNlbmRpZgorCisjZGVmaW5lIEhBTEZfUk9VTkQoYSxiLGMsZCxzLHQpICAgICAgICAgXAorICAgIGEgKz0gYjsgYyArPSBkOyAgICAgICAgICAgICBcCisgICAgYiA9IFJPVEFURShiLCBzKSBeIGE7ICAgICAgICAgICBcCisgICAgZCA9IFJPVEFURShkLCB0KSBeIGM7ICAgICAgICAgICBcCisgICAgYSA9IFJPVEFURShhLCAzMik7CisKKyNkZWZpbmUgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKSAgICAgICBcCisgICAgSEFMRl9ST1VORCh2MCx2MSx2Mix2MywxMywxNik7ICAgICAgXAorICAgIEhBTEZfUk9VTkQodjIsdjEsdjAsdjMsMTcsMjEpOyAgICAgIFwKKyAgICBIQUxGX1JPVU5EKHYwLHYxLHYyLHYzLDEzLDE2KTsgICAgICBcCisgICAgSEFMRl9ST1VORCh2Mix2MSx2MCx2MywxNywyMSk7CisKKworc3RhdGljIFB5X2hhc2hfdAorc2lwaGFzaDI0KGNvbnN0IHZvaWQgKnNyYywgUHlfc3NpemVfdCBzcmNfc3opIHsKKyAgICBQWV9VSU5UNjRfVCBrMCA9IF9sZTY0dG9oKF9QeV9IYXNoU2VjcmV0LnNpcGhhc2guazApOworICAgIFBZX1VJTlQ2NF9UIGsxID0gX2xlNjR0b2goX1B5X0hhc2hTZWNyZXQuc2lwaGFzaC5rMSk7CisgICAgUFlfVUlOVDY0X1QgYiA9IChQWV9VSU5UNjRfVClzcmNfc3ogPDwgNTY7CisgICAgY29uc3QgUFlfVUlOVDY0X1QgKmluID0gKFBZX1VJTlQ2NF9UKilzcmM7CisKKyAgICBQWV9VSU5UNjRfVCB2MCA9IGswIF4gMHg3MzZmNmQ2NTcwNzM2NTc1VUxMOworICAgIFBZX1VJTlQ2NF9UIHYxID0gazEgXiAweDY0NmY3MjYxNmU2NDZmNmRVTEw7CisgICAgUFlfVUlOVDY0X1QgdjIgPSBrMCBeIDB4NmM3OTY3NjU2ZTY1NzI2MVVMTDsKKyAgICBQWV9VSU5UNjRfVCB2MyA9IGsxIF4gMHg3NDY1NjQ2Mjc5NzQ2NTczVUxMOworCisgICAgUFlfVUlOVDY0X1QgdDsKKyAgICBQWV9VSU5UOF9UICpwdDsKKyAgICBQWV9VSU5UOF9UICptOworCisgICAgd2hpbGUgKHNyY19zeiA+PSA4KSB7CisgICAgICAgIFBZX1VJTlQ2NF9UIG1pID0gX2xlNjR0b2goKmluKTsKKyAgICAgICAgaW4gKz0gMTsKKyAgICAgICAgc3JjX3N6IC09IDg7CisgICAgICAgIHYzIF49IG1pOworICAgICAgICBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpOworICAgICAgICB2MCBePSBtaTsKKyAgICB9CisKKyAgICB0ID0gMDsKKyAgICBwdCA9IChQWV9VSU5UOF9UICopJnQ7CisgICAgbSA9IChQWV9VSU5UOF9UICopaW47CisgICAgc3dpdGNoIChzcmNfc3opIHsKKyAgICAgICAgY2FzZSA3OiBwdFs2XSA9IG1bNl07CisgICAgICAgIGNhc2UgNjogcHRbNV0gPSBtWzVdOworICAgICAgICBjYXNlIDU6IHB0WzRdID0gbVs0XTsKKyAgICAgICAgY2FzZSA0OiBQeV9NRU1DUFkocHQsIG0sIHNpemVvZihQWV9VSU5UMzJfVCkpOyBicmVhazsKKyAgICAgICAgY2FzZSAzOiBwdFsyXSA9IG1bMl07CisgICAgICAgIGNhc2UgMjogcHRbMV0gPSBtWzFdOworICAgICAgICBjYXNlIDE6IHB0WzBdID0gbVswXTsKKyAgICB9CisgICAgYiB8PSBfbGU2NHRvaCh0KTsKKworICAgIHYzIF49IGI7CisgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKyAgICB2MCBePSBiOworICAgIHYyIF49IDB4ZmY7CisgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKyAgICBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpOworCisgICAgLyogbW9kaWZpZWQgKi8KKyAgICB0ID0gKHYwIF4gdjEpIF4gKHYyIF4gdjMpOworICAgIHJldHVybiAoUHlfaGFzaF90KXQ7Cit9CisKK3N0YXRpYyBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYyA9IHtzaXBoYXNoMjQsICJzaXBoYXNoMjQiLCA2NCwgMTI4fTsKKworI2VuZGlmIC8qIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfU0lQSEFTSDI0ICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9QeXRob24vcHlzdGF0ZS5jIGIvUHl0aG9uL3B5c3RhdGUuYwppbmRleCA3NzJhYTUzLi4yYWMyZmQ1IDEwMDY0NAotLS0gYS9QeXRob24vcHlzdGF0ZS5jCisrKyBiL1B5dGhvbi9weXN0YXRlLmMKQEAgLTYsMTEgKzYsMTEgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDQVVUSU9OCiAKLUFsd2F5cyB1c2UgbWFsbG9jKCkgYW5kIGZyZWUoKSBkaXJlY3RseSBpbiB0aGlzIGZpbGUuICBBIG51bWJlciBvZiB0aGVzZQotZnVuY3Rpb25zIGFyZSBhZHZlcnRpc2VkIGFzIHNhZmUgdG8gY2FsbCB3aGVuIHRoZSBHSUwgaXNuJ3QgaGVsZCwgYW5kIGluCi1hIGRlYnVnIGJ1aWxkIFB5dGhvbiByZWRpcmVjdHMgKGUuZy4pIFB5TWVtX05FVyAoZXRjKSB0byBQeXRob24ncyBkZWJ1Z2dpbmcKLW9ibWFsbG9jIGZ1bmN0aW9ucy4gIFRob3NlIGFyZW4ndCB0aHJlYWQtc2FmZSAodGhleSByZWx5IG9uIHRoZSBHSUwgdG8gYXZvaWQKLXRoZSBleHBlbnNlIG9mIGRvaW5nIHRoZWlyIG93biBsb2NraW5nKS4KK0Fsd2F5cyB1c2UgUHlNZW1fUmF3TWFsbG9jKCkgYW5kIFB5TWVtX1Jhd0ZyZWUoKSBkaXJlY3RseSBpbiB0aGlzIGZpbGUuICBBCitudW1iZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhZHZlcnRpc2VkIGFzIHNhZmUgdG8gY2FsbCB3aGVuIHRoZSBHSUwgaXNuJ3QKK2hlbGQsIGFuZCBpbiBhIGRlYnVnIGJ1aWxkIFB5dGhvbiByZWRpcmVjdHMgKGUuZy4pIFB5TWVtX05FVyAoZXRjKSB0byBQeXRob24ncworZGVidWdnaW5nIG9ibWFsbG9jIGZ1bmN0aW9ucy4gIFRob3NlIGFyZW4ndCB0aHJlYWQtc2FmZSAodGhleSByZWx5IG9uIHRoZSBHSUwKK3RvIGF2b2lkIHRoZSBleHBlbnNlIG9mIGRvaW5nIHRoZWlyIG93biBsb2NraW5nKS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZmRlZiBIQVZFX0RMT1BFTgpAQCAtNjAsNyArNjAsNyBAQAogUHlJbnRlcnByZXRlclN0YXRlX05ldyh2b2lkKQogewogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jKHNpemVvZihQeUludGVycHJldGVyU3RhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtX1Jhd01hbGxvYyhzaXplb2YoUHlJbnRlcnByZXRlclN0YXRlKSk7CiAKICAgICBpZiAoaW50ZXJwICE9IE5VTEwpIHsKICAgICAgICAgSEVBRF9JTklUKCk7CkBAIC03Miw2ICs3Miw3IEBACiAgICAgICAgIGludGVycC0+bW9kdWxlc19ieV9pbmRleCA9IE5VTEw7CiAgICAgICAgIGludGVycC0+c3lzZGljdCA9IE5VTEw7CiAgICAgICAgIGludGVycC0+YnVpbHRpbnMgPSBOVUxMOworICAgICAgICBpbnRlcnAtPmJ1aWx0aW5zX2NvcHkgPSBOVUxMOwogICAgICAgICBpbnRlcnAtPnRzdGF0ZV9oZWFkID0gTlVMTDsKICAgICAgICAgaW50ZXJwLT5jb2RlY19zZWFyY2hfcGF0aCA9IE5VTEw7CiAgICAgICAgIGludGVycC0+Y29kZWNfc2VhcmNoX2NhY2hlID0gTlVMTDsKQEAgLTExNSw2ICsxMTYsNyBAQAogICAgIFB5X0NMRUFSKGludGVycC0+bW9kdWxlc19ieV9pbmRleCk7CiAgICAgUHlfQ0xFQVIoaW50ZXJwLT5zeXNkaWN0KTsKICAgICBQeV9DTEVBUihpbnRlcnAtPmJ1aWx0aW5zKTsKKyAgICBQeV9DTEVBUihpbnRlcnAtPmJ1aWx0aW5zX2NvcHkpOwogICAgIFB5X0NMRUFSKGludGVycC0+aW1wb3J0bGliKTsKIH0KIApAQCAtMTQ4LDcgKzE1MCw3IEBACiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGU6IHJlbWFpbmluZyB0aHJlYWRzIik7CiAgICAgKnAgPSBpbnRlcnAtPm5leHQ7CiAgICAgSEVBRF9VTkxPQ0soKTsKLSAgICBmcmVlKGludGVycCk7CisgICAgUHlNZW1fUmF3RnJlZShpbnRlcnApOwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgaWYgKGludGVycF9oZWFkID09IE5VTEwgJiYgaGVhZF9tdXRleCAhPSBOVUxMKSB7CiAgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhoZWFkX211dGV4KTsKQEAgLTE2OCw3ICsxNzAsNyBAQAogc3RhdGljIFB5VGhyZWFkU3RhdGUgKgogbmV3X3RocmVhZHN0YXRlKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwLCBpbnQgaW5pdCkKIHsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSAoUHlUaHJlYWRTdGF0ZSAqKW1hbGxvYyhzaXplb2YoUHlUaHJlYWRTdGF0ZSkpOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IChQeVRocmVhZFN0YXRlICopUHlNZW1fUmF3TWFsbG9jKHNpemVvZihQeVRocmVhZFN0YXRlKSk7CiAKICAgICBpZiAoX1B5VGhyZWFkU3RhdGVfR2V0RnJhbWUgPT0gTlVMTCkKICAgICAgICAgX1B5VGhyZWFkU3RhdGVfR2V0RnJhbWUgPSB0aHJlYWRzdGF0ZV9nZXRmcmFtZTsKQEAgLTE4Miw3ICsxODQsNiBAQAogICAgICAgICB0c3RhdGUtPnJlY3Vyc2lvbl9jcml0aWNhbCA9IDA7CiAgICAgICAgIHRzdGF0ZS0+dHJhY2luZyA9IDA7CiAgICAgICAgIHRzdGF0ZS0+dXNlX3RyYWNpbmcgPSAwOwotICAgICAgICB0c3RhdGUtPnRpY2tfY291bnRlciA9IDA7CiAgICAgICAgIHRzdGF0ZS0+Z2lsc3RhdGVfY291bnRlciA9IDA7CiAgICAgICAgIHRzdGF0ZS0+YXN5bmNfZXhjID0gTlVMTDsKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtMjA4LDEyICsyMDksMTcgQEAKIAogICAgICAgICB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9uZXN0aW5nID0gMDsKICAgICAgICAgdHN0YXRlLT50cmFzaF9kZWxldGVfbGF0ZXIgPSBOVUxMOworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZSA9IE5VTEw7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEgPSBOVUxMOwogCiAgICAgICAgIGlmIChpbml0KQogICAgICAgICAgICAgX1B5VGhyZWFkU3RhdGVfSW5pdCh0c3RhdGUpOwogCiAgICAgICAgIEhFQURfTE9DSygpOworICAgICAgICB0c3RhdGUtPnByZXYgPSBOVUxMOwogICAgICAgICB0c3RhdGUtPm5leHQgPSBpbnRlcnAtPnRzdGF0ZV9oZWFkOworICAgICAgICBpZiAodHN0YXRlLT5uZXh0KQorICAgICAgICAgICAgdHN0YXRlLT5uZXh0LT5wcmV2ID0gdHN0YXRlOwogICAgICAgICBpbnRlcnAtPnRzdGF0ZV9oZWFkID0gdHN0YXRlOwogICAgICAgICBIRUFEX1VOTE9DSygpOwogICAgIH0KQEAgLTMxNyw2ICszMjMsMzEgQEAKICAgICByZXR1cm4gUHlMaXN0X1NldEl0ZW0oc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgsIGluZGV4LCBQeV9Ob25lKTsKIH0KIAorLyogdXNlZCBieSBpbXBvcnQuYzpQeUltcG9ydF9DbGVhbnVwICovCit2b2lkCitfUHlTdGF0ZV9DbGVhck1vZHVsZXModm9pZCkKK3sKKyAgICBQeUludGVycHJldGVyU3RhdGUgKnN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOworICAgIGlmIChzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCkgeworICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeUxpc3RfR0VUX1NJWkUoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgpOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptID0gUHlMaXN0X0dFVF9JVEVNKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4LCBpKTsKKyAgICAgICAgICAgIGlmIChQeU1vZHVsZV9DaGVjayhtKSkgeworICAgICAgICAgICAgICAgIC8qIGNsZWFudXAgdGhlIHNhdmVkIGNvcHkgb2YgbW9kdWxlIGRpY3RzICovCisgICAgICAgICAgICAgICAgUHlNb2R1bGVEZWYgKm1kID0gUHlNb2R1bGVfR2V0RGVmKG0pOworICAgICAgICAgICAgICAgIGlmIChtZCkKKyAgICAgICAgICAgICAgICAgICAgUHlfQ0xFQVIobWQtPm1fYmFzZS5tX2NvcHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIFNldHRpbmcgbW9kdWxlc19ieV9pbmRleCB0byBOVUxMIGNvdWxkIGJlIGRhbmdlcm91cywgc28gd2UKKyAgICAgICAgICAgY2xlYXIgdGhlIGxpc3QgaW5zdGVhZC4gKi8KKyAgICAgICAgaWYgKFB5TGlzdF9TZXRTbGljZShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBQeUxpc3RfR0VUX1NJWkUoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKQorICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KTsKKyAgICB9Cit9CisKIHZvaWQKIFB5VGhyZWFkU3RhdGVfQ2xlYXIoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQogewpAQCAtMzQ5LDM3ICszODAsMjMgQEAKIHRzdGF0ZV9kZWxldGVfY29tbW9uKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKIHsKICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycDsKLSAgICBQeVRocmVhZFN0YXRlICoqcDsKLSAgICBQeVRocmVhZFN0YXRlICpwcmV2X3AgPSBOVUxMOwogICAgIGlmICh0c3RhdGUgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IE5VTEwgdHN0YXRlIik7CiAgICAgaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7CiAgICAgaWYgKGludGVycCA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeVRocmVhZFN0YXRlX0RlbGV0ZTogTlVMTCBpbnRlcnAiKTsKICAgICBIRUFEX0xPQ0soKTsKLSAgICBmb3IgKHAgPSAmaW50ZXJwLT50c3RhdGVfaGVhZDsgOyBwID0gJigqcCktPm5leHQpIHsKLSAgICAgICAgaWYgKCpwID09IE5VTEwpCi0gICAgICAgICAgICBQeV9GYXRhbEVycm9yKAotICAgICAgICAgICAgICAgICJQeVRocmVhZFN0YXRlX0RlbGV0ZTogaW52YWxpZCB0c3RhdGUiKTsKLSAgICAgICAgaWYgKCpwID09IHRzdGF0ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvKiBTYW5pdHkgY2hlY2suICBUaGVzZSBzdGF0ZXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBidXQgaWYKLSAgICAgICAgICogdGhleSBkbyB3ZSBtdXN0IGFib3J0LiAgT3RoZXJ3aXNlIHdlJ2xsIGVuZCB1cCBzcGlubmluZyBpbgotICAgICAgICAgKiBpbiBhIHRpZ2h0IGxvb3Agd2l0aCB0aGUgbG9jayBoZWxkLiAgQSBzaW1pbGFyIGNoZWNrIGlzIGRvbmUKLSAgICAgICAgICogaW4gdGhyZWFkLmMgZmluZF9rZXkoKS4gICovCi0gICAgICAgIGlmICgqcCA9PSBwcmV2X3ApCi0gICAgICAgICAgICBQeV9GYXRhbEVycm9yKAotICAgICAgICAgICAgICAgICJQeVRocmVhZFN0YXRlX0RlbGV0ZTogc21hbGwgY2lyY3VsYXIgbGlzdCghKSIKLSAgICAgICAgICAgICAgICAiIGFuZCB0c3RhdGUgbm90IGZvdW5kLiIpOwotICAgICAgICBwcmV2X3AgPSAqcDsKLSAgICAgICAgaWYgKCgqcCktPm5leHQgPT0gaW50ZXJwLT50c3RhdGVfaGVhZCkKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCi0gICAgICAgICAgICAgICAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBjaXJjdWxhciBsaXN0KCEpIGFuZCIKLSAgICAgICAgICAgICAgICAiIHRzdGF0ZSBub3QgZm91bmQuIik7Ci0gICAgfQotICAgICpwID0gdHN0YXRlLT5uZXh0OworICAgIGlmICh0c3RhdGUtPnByZXYpCisgICAgICAgIHRzdGF0ZS0+cHJldi0+bmV4dCA9IHRzdGF0ZS0+bmV4dDsKKyAgICBlbHNlCisgICAgICAgIGludGVycC0+dHN0YXRlX2hlYWQgPSB0c3RhdGUtPm5leHQ7CisgICAgaWYgKHRzdGF0ZS0+bmV4dCkKKyAgICAgICAgdHN0YXRlLT5uZXh0LT5wcmV2ID0gdHN0YXRlLT5wcmV2OwogICAgIEhFQURfVU5MT0NLKCk7Ci0gICAgZnJlZSh0c3RhdGUpOworICAgIGlmICh0c3RhdGUtPm9uX2RlbGV0ZSAhPSBOVUxMKSB7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlKHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEpOworICAgIH0KKyAgICBQeU1lbV9SYXdGcmVlKHRzdGF0ZSk7CiB9CiAKIApAQCAtNDE0LDYgKzQzMSw0MyBAQAogI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCiAKIAorLyoKKyAqIERlbGV0ZSBhbGwgdGhyZWFkIHN0YXRlcyBleGNlcHQgdGhlIG9uZSBwYXNzZWQgYXMgYXJndW1lbnQuCisgKiBOb3RlIHRoYXQsIGlmIHRoZXJlIGlzIGEgY3VycmVudCB0aHJlYWQgc3RhdGUsIGl0ICptdXN0KiBiZSB0aGUgb25lCisgKiBwYXNzZWQgYXMgYXJndW1lbnQuICBBbHNvLCB0aGlzIHdvbid0IHRvdWNoIGFueSBvdGhlciBpbnRlcnByZXRlcnMKKyAqIHRoYW4gdGhlIGN1cnJlbnQgb25lLCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoaWNoIHRocmVhZCBzdGF0ZSBzaG91bGQKKyAqIGJlIGtlcHQgaW4gdGhvc2Ugb3RoZXIgaW50ZXJwcmV0ZXJlcy4KKyAqLwordm9pZAorX1B5VGhyZWFkU3RhdGVfRGVsZXRlRXhjZXB0KFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKK3sKKyAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IHRzdGF0ZS0+aW50ZXJwOworICAgIFB5VGhyZWFkU3RhdGUgKnAsICpuZXh0LCAqZ2FyYmFnZTsKKyAgICBIRUFEX0xPQ0soKTsKKyAgICAvKiBSZW1vdmUgYWxsIHRocmVhZCBzdGF0ZXMsIGV4Y2VwdCB0c3RhdGUsIGZyb20gdGhlIGxpbmtlZCBsaXN0IG9mCisgICAgICAgdGhyZWFkIHN0YXRlcy4gIFRoaXMgd2lsbCBhbGxvdyBjYWxsaW5nIFB5VGhyZWFkU3RhdGVfQ2xlYXIoKQorICAgICAgIHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jay4gKi8KKyAgICBnYXJiYWdlID0gaW50ZXJwLT50c3RhdGVfaGVhZDsKKyAgICBpZiAoZ2FyYmFnZSA9PSB0c3RhdGUpCisgICAgICAgIGdhcmJhZ2UgPSB0c3RhdGUtPm5leHQ7CisgICAgaWYgKHRzdGF0ZS0+cHJldikKKyAgICAgICAgdHN0YXRlLT5wcmV2LT5uZXh0ID0gdHN0YXRlLT5uZXh0OworICAgIGlmICh0c3RhdGUtPm5leHQpCisgICAgICAgIHRzdGF0ZS0+bmV4dC0+cHJldiA9IHRzdGF0ZS0+cHJldjsKKyAgICB0c3RhdGUtPnByZXYgPSB0c3RhdGUtPm5leHQgPSBOVUxMOworICAgIGludGVycC0+dHN0YXRlX2hlYWQgPSB0c3RhdGU7CisgICAgSEVBRF9VTkxPQ0soKTsKKyAgICAvKiBDbGVhciBhbmQgZGVhbGxvY2F0ZSBhbGwgc3RhbGUgdGhyZWFkIHN0YXRlcy4gIEV2ZW4gaWYgdGhpcworICAgICAgIGV4ZWN1dGVzIFB5dGhvbiBjb2RlLCB3ZSBzaG91bGQgYmUgc2FmZSBzaW5jZSBpdCBleGVjdXRlcworICAgICAgIGluIHRoZSBjdXJyZW50IHRocmVhZCwgbm90IG9uZSBvZiB0aGUgc3RhbGUgdGhyZWFkcy4gKi8KKyAgICBmb3IgKHAgPSBnYXJiYWdlOyBwOyBwID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gcC0+bmV4dDsKKyAgICAgICAgUHlUaHJlYWRTdGF0ZV9DbGVhcihwKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKKyAgICB9Cit9CisKKwogUHlUaHJlYWRTdGF0ZSAqCiBQeVRocmVhZFN0YXRlX0dldCh2b2lkKQogewpAQCAtNjcxLDE4ICs3MjUsMTggQEAKIAogICAgICAgIFRoZSBvbmx5IHNpdHVhdGlvbiB3aGVyZSB5b3UgY2FuIGxlZ2l0aW1hdGVseSBoYXZlIG1vcmUgdGhhbiBvbmUKICAgICAgICB0aHJlYWQgc3RhdGUgZm9yIGFuIE9TIGxldmVsIHRocmVhZCBpcyB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZQotICAgICAgIGludGVycHJldGVycywgd2hlbjoKKyAgICAgICBpbnRlcnByZXRlcnMuCiAKLSAgICAgICAgICAgYSkgWW91IHNob3VsZG4ndCByZWFsbHkgYmUgdXNpbmcgdGhlIFB5R0lMU3RhdGVfIEFQSXMgYW55d2F5LAotICAgICAgICAgIGFuZDoKKyAgICAgICBZb3Ugc2hvdWxkbid0IHJlYWxseSBiZSB1c2luZyB0aGUgUHlHSUxTdGF0ZV8gQVBJcyBhbnl3YXkgKHNlZSBpc3N1ZXMKKyAgICAgICAjMTA5MTUgYW5kICMxNTc1MSkuCiAKLSAgICAgICAgICAgYikgVGhlIHNsaWdodGx5IG9kZCB3YXkgUHlUaHJlYWRfc2V0X2tleV92YWx1ZSB3b3JrcyAoc2VlCi0gICAgICAgICAgY29tbWVudHMgYnkgaXRzIGltcGxlbWVudGF0aW9uKSBtZWFucyB0aGF0IHRoZSBmaXJzdCB0aHJlYWQKLSAgICAgICAgICBzdGF0ZSBjcmVhdGVkIGZvciB0aGF0IGdpdmVuIE9TIGxldmVsIHRocmVhZCB3aWxsICJ3aW4iLAotICAgICAgICAgIHdoaWNoIHNlZW1zIHJlYXNvbmFibGUgYmVoYXZpb3VyLgorICAgICAgIFRoZSBmaXJzdCB0aHJlYWQgc3RhdGUgY3JlYXRlZCBmb3IgdGhhdCBnaXZlbiBPUyBsZXZlbCB0aHJlYWQgd2lsbAorICAgICAgICJ3aW4iLCB3aGljaCBzZWVtcyByZWFzb25hYmxlIGJlaGF2aW91ci4KICAgICAqLwotICAgIGlmIChQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXksICh2b2lkICopdHN0YXRlKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNvdWxkbid0IGNyZWF0ZSBhdXRvVExTa2V5IG1hcHBpbmciKTsKKyAgICBpZiAoUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXksICh2b2lkICopdHN0YXRlKSA8IDApCisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJDb3VsZG4ndCBjcmVhdGUgYXV0b1RMU2tleSBtYXBwaW5nIik7CisgICAgfQogCiAgICAgLyogUHlHSUxTdGF0ZV9SZWxlYXNlIG11c3Qgbm90IHRyeSB0byBkZWxldGUgdGhpcyB0aHJlYWQgc3RhdGUuICovCiAgICAgdHN0YXRlLT5naWxzdGF0ZV9jb3VudGVyID0gMTsKQEAgLTY5Nyw2ICs3NTEsMTUgQEAKICAgICByZXR1cm4gKFB5VGhyZWFkU3RhdGUgKilQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpOwogfQogCitpbnQKK1B5R0lMU3RhdGVfQ2hlY2sodm9pZCkKK3sKKyAgICAvKiBjYW4ndCB1c2UgUHlUaHJlYWRTdGF0ZV9HZXQoKSBzaW5jZSBpdCB3aWxsIGFzc2VydCB0aGF0IGl0IGhhcyB0aGUgR0lMICovCisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKAorICAgICAgICAmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CisgICAgcmV0dXJuIHRzdGF0ZSAmJiAodHN0YXRlID09IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCkpOworfQorCiBQeUdJTFN0YXRlX1NUQVRFCiBQeUdJTFN0YXRlX0Vuc3VyZSh2b2lkKQogewpAQCAtNzEwLDYgKzc3MywxMSBAQAogICAgIGFzc2VydChhdXRvSW50ZXJwcmV0ZXJTdGF0ZSk7IC8qIFB5X0luaXRpYWxpemUoKSBoYXNuJ3QgYmVlbiBjYWxsZWQhICovCiAgICAgdGN1ciA9IChQeVRocmVhZFN0YXRlICopUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KTsKICAgICBpZiAodGN1ciA9PSBOVUxMKSB7CisgICAgICAgIC8qIEF0IHN0YXJ0dXAsIFB5dGhvbiBoYXMgbm8gY29uY3JldGUgR0lMLiBJZiBQeUdJTFN0YXRlX0Vuc3VyZSgpIGlzCisgICAgICAgICAgIGNhbGxlZCBmcm9tIGEgbmV3IHRocmVhZCBmb3IgdGhlIGZpcnN0IHRpbWUsIHdlIG5lZWQgdGhlIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgR0lMLiAqLworICAgICAgICBQeUV2YWxfSW5pdFRocmVhZHMoKTsKKwogICAgICAgICAvKiBDcmVhdGUgYSBuZXcgdGhyZWFkIHN0YXRlIGZvciB0aGlzIHRocmVhZCAqLwogICAgICAgICB0Y3VyID0gUHlUaHJlYWRTdGF0ZV9OZXcoYXV0b0ludGVycHJldGVyU3RhdGUpOwogICAgICAgICBpZiAodGN1ciA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5c3RydG9kLmMgYi9QeXRob24vcHlzdHJ0b2QuYwppbmRleCA0YWI4ZjA4Li5iOGRkOTE5IDEwMDY0NAotLS0gYS9QeXRob24vcHlzdHJ0b2QuYworKysgYi9QeXRob24vcHlzdHJ0b2QuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiBfUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKIHsKICAgICBjaGFyICpmYWlsX3BvczsKLSAgICBkb3VibGUgdmFsID0gLTEuMDsKKyAgICBkb3VibGUgdmFsOwogICAgIHN0cnVjdCBsY29udiAqbG9jYWxlX2RhdGE7CiAgICAgY29uc3QgY2hhciAqZGVjaW1hbF9wb2ludDsKICAgICBzaXplX3QgZGVjaW1hbF9wb2ludF9sZW47CkBAIC05MjMsNyArOTIzLDcgQEAKIAogc3RhdGljIGNoYXIgKgogZm9ybWF0X2Zsb2F0X3Nob3J0KGRvdWJsZSBkLCBjaGFyIGZvcm1hdF9jb2RlLAotICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBQeV9zc2l6ZV90IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgaW50IHByZWNpc2lvbiwKICAgICAgICAgICAgICAgICAgICBpbnQgYWx3YXlzX2FkZF9zaWduLCBpbnQgYWRkX2RvdF8wX2lmX2ludGVnZXIsCiAgICAgICAgICAgICAgICAgICAgaW50IHVzZV9hbHRfZm9ybWF0dGluZywgY2hhciAqKmZsb2F0X3N0cmluZ3MsIGludCAqdHlwZSkKIHsKQEAgLTEwNTksNyArMTA1OSw3IEBACiAgICAgLyogaWYgdXNpbmcgYW4gZXhwb25lbnQsIHJlc2V0IGRlY2ltYWwgcG9pbnQgcG9zaXRpb24gdG8gMSBhbmQgYWRqdXN0CiAgICAgICAgZXhwb25lbnQgYWNjb3JkaW5nbHkuKi8KICAgICBpZiAodXNlX2V4cCkgewotICAgICAgICBleHAgPSBkZWNwdCAtIDE7CisgICAgICAgIGV4cCA9IChpbnQpZGVjcHQgLSAxOwogICAgICAgICBkZWNwdCA9IDE7CiAgICAgfQogICAgIC8qIGVuc3VyZSB2ZGlnaXRzX3N0YXJ0IDwgZGVjcHQgPD0gdmRpZ2l0c19lbmQsIG9yIHZkaWdpdHNfc3RhcnQgPApkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5dGhvbnJ1bi5jIGIvUHl0aG9uL3B5dGhvbnJ1bi5jCmluZGV4IDkxZDU2YjcuLmU5OTQ3ZTkgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXRob25ydW4uYworKysgYi9QeXRob24vcHl0aG9ucnVuLmMKQEAgLTM1LDEyICszNSw0MiBAQAogI2RlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOworX1B5X0lERU5USUZJRVIoZXhjZXB0aG9vayk7CitfUHlfSURFTlRJRklFUihmbHVzaCk7CitfUHlfSURFTlRJRklFUihsYXN0X3RyYWNlYmFjayk7CitfUHlfSURFTlRJRklFUihsYXN0X3R5cGUpOworX1B5X0lERU5USUZJRVIobGFzdF92YWx1ZSk7CitfUHlfSURFTlRJRklFUihuYW1lKTsKK19QeV9JREVOVElGSUVSKHBzMSk7CitfUHlfSURFTlRJRklFUihwczIpOworX1B5X0lERU5USUZJRVIoc3RkaW4pOworX1B5X0lERU5USUZJRVIoc3Rkb3V0KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CitfUHlfc3RhdGljX3N0cmluZyhQeUlkX3N0cmluZywgIjxzdHJpbmc+Iik7CisKKyNpZmRlZiBQeV9SRUZfREVCVUcKK3N0YXRpYwordm9pZCBfcHJpbnRfdG90YWxfcmVmcyh2b2lkKSB7CisgICAgUHlPYmplY3QgKnhvcHRpb25zLCAqdmFsdWU7CisgICAgX1B5X0lERU5USUZJRVIoc2hvd3JlZmNvdW50KTsKKworICAgIHhvcHRpb25zID0gUHlTeXNfR2V0WE9wdGlvbnMoKTsKKyAgICBpZiAoeG9wdGlvbnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhbHVlID0gX1B5RGljdF9HZXRJdGVtSWQoeG9wdGlvbnMsICZQeUlkX3Nob3dyZWZjb3VudCk7CisgICAgaWYgKHZhbHVlID09IFB5X1RydWUpCisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJbJSIgUFlfRk9STUFUX1NJWkVfVCAiZCByZWZzLCAiCisgICAgICAgICAgICAgICAgIiUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgYmxvY2tzXVxuIiwKKyAgICAgICAgICAgICAgICBfUHlfR2V0UmVmVG90YWwoKSwgX1B5X0dldEFsbG9jYXRlZEJsb2NrcygpKTsKK30KKyNlbmRpZgorCiAjaWZuZGVmIFB5X1JFRl9ERUJVRwogI2RlZmluZSBQUklOVF9UT1RBTF9SRUZTKCkKICNlbHNlIC8qIFB5X1JFRl9ERUJVRyAqLwotI2RlZmluZSBQUklOVF9UT1RBTF9SRUZTKCkgZnByaW50ZihzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICJbJSIgUFlfRk9STUFUX1NJWkVfVCAiZCByZWZzXVxuIiwgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgIF9QeV9HZXRSZWZUb3RhbCgpKQorI2RlZmluZSBQUklOVF9UT1RBTF9SRUZTKCkgX3ByaW50X3RvdGFsX3JlZnMoKQogI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtNTcsNyArODcsNyBAQAogc3RhdGljIHZvaWQgaW5pdHNpdGUodm9pZCk7CiBzdGF0aWMgaW50IGluaXRzdGRpbyh2b2lkKTsKIHN0YXRpYyB2b2lkIGZsdXNoX2lvKHZvaWQpOwotc3RhdGljIFB5T2JqZWN0ICpydW5fbW9kKG1vZF90eSwgY29uc3QgY2hhciAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLAorc3RhdGljIFB5T2JqZWN0ICpydW5fbW9kKG1vZF90eSwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICosIFB5QXJlbmEgKik7CiBzdGF0aWMgUHlPYmplY3QgKnJ1bl9weWNfZmlsZShGSUxFICosIGNvbnN0IGNoYXIgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqKTsKQEAgLTY4LDExICs5OCwxNSBAQAogc3RhdGljIHZvaWQgd2FpdF9mb3JfdGhyZWFkX3NodXRkb3duKHZvaWQpOwogc3RhdGljIHZvaWQgY2FsbF9sbF9leGl0ZnVuY3Modm9pZCk7CiBleHRlcm4gaW50IF9QeVVuaWNvZGVfSW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgX1B5U3RydWN0U2VxdWVuY2VfSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9QeVVuaWNvZGVfRmluaSh2b2lkKTsKIGV4dGVybiBpbnQgX1B5TG9uZ19Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgUHlMb25nX0Zpbmkodm9pZCk7CiBleHRlcm4gaW50IF9QeUZhdWx0aGFuZGxlcl9Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX1B5RmF1bHRoYW5kbGVyX0Zpbmkodm9pZCk7CitleHRlcm4gdm9pZCBfUHlIYXNoX0Zpbmkodm9pZCk7CitleHRlcm4gaW50IF9QeVRyYWNlTWFsbG9jX0luaXQodm9pZCk7CitleHRlcm4gaW50IF9QeVRyYWNlTWFsbG9jX0Zpbmkodm9pZCk7CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogZXh0ZXJuIHZvaWQgX1B5R0lMU3RhdGVfSW5pdChQeUludGVycHJldGVyU3RhdGUgKiwgUHlUaHJlYWRTdGF0ZSAqKTsKQEAgLTkzLDYgKzEyNyw3IEBACiBpbnQgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSA9IDA7IC8qIGZvciAtcyBhbmQgc2l0ZS5weSAqLwogaW50IFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWcgPSAwOyAvKiBVbmJ1ZmZlcmVkIGJpbmFyeSBzdGR7aW4sb3V0LGVycn0gKi8KIGludCBQeV9IYXNoUmFuZG9taXphdGlvbkZsYWcgPSAwOyAvKiBmb3IgLVIgYW5kIFBZVEhPTkhBU0hTRUVEICovCitpbnQgUHlfSXNvbGF0ZWRGbGFnID0gMDsgLyogZm9yIC1JLCBpc29sYXRlIGZyb20gdXNlcidzIGVudiAqLwogCiBQeVRocmVhZFN0YXRlICpfUHlfRmluYWxpemluZyA9IE5VTEw7CiAKQEAgLTExOCw2ICsxNTMsNDUgQEAKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7CiB9CiAKKy8qIEhlbHBlciB0byBhbGxvdyBhbiBlbWJlZGRpbmcgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgdGhlIG5vcm1hbAorICogbWVjaGFuaXNtIHRoYXQgYXR0ZW1wdHMgdG8gZmlndXJlIG91dCBhbiBhcHByb3ByaWF0ZSBJTyBlbmNvZGluZworICovCisKK3N0YXRpYyBjaGFyICpfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CitzdGF0aWMgY2hhciAqX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzID0gTlVMTDsKKworaW50CitQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCit7CisgICAgaWYgKFB5X0lzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICAvKiBUaGlzIGlzIHRvbyBsYXRlIHRvIGhhdmUgYW55IGVmZmVjdCAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIENhbid0IGNhbGwgUHlFcnJfTm9NZW1vcnkoKSBvbiBlcnJvcnMsIGFzIFB5dGhvbiBoYXNuJ3QgYmVlbgorICAgICAqIGluaXRpYWxpc2VkIHlldC4KKyAgICAgKgorICAgICAqIEhvd2V2ZXIsIHRoZSByYXcgbWVtb3J5IGFsbG9jYXRvcnMgYXJlIGluaXRpYWxpc2VkIGFwcHJvcHJpYXRlbHkKKyAgICAgKiBhcyBDIHN0YXRpYyB2YXJpYWJsZXMsIHNvIF9QeU1lbV9SYXdTdHJkdXAgaXMgT0sgZXZlbiB0aG91Z2gKKyAgICAgKiBQeV9Jbml0aWFsaXplIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQuCisgICAgICovCisgICAgaWYgKGVuY29kaW5nKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nID0gX1B5TWVtX1Jhd1N0cmR1cChlbmNvZGluZyk7CisgICAgICAgIGlmICghX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZXJyb3JzKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IF9QeU1lbV9SYXdTdHJkdXAoZXJyb3JzKTsKKyAgICAgICAgaWYgKCFfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZykgeworICAgICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIC0zOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCiAvKiBHbG9iYWwgaW5pdGlhbGl6YXRpb25zLiAgQ2FuIGJlIHVuZG9uZSBieSBQeV9GaW5hbGl6ZSgpLiAgRG9uJ3QKICAgIGNhbGwgdGhpcyB0d2ljZSB3aXRob3V0IGFuIGludGVydmVuaW5nIFB5X0ZpbmFsaXplKCkgY2FsbC4gIFdoZW4KICAgIGluaXRpYWxpemF0aW9ucyBmYWlsLCBhIGZhdGFsIGVycm9yIGlzIGlzc3VlZCBhbmQgdGhlIGZ1bmN0aW9uIGRvZXMKQEAgLTE0Niw3ICsyMjAsNiBAQAogewogICAgIGNoYXIgKm5hbWVfdXRmOCwgKm5hbWVfc3RyOwogICAgIFB5T2JqZWN0ICpjb2RlYywgKm5hbWUgPSBOVUxMOwotICAgIF9QeV9JREVOVElGSUVSKG5hbWUpOwogCiAgICAgY29kZWMgPSBfUHlDb2RlY19Mb29rdXAoZW5jb2RpbmcpOwogICAgIGlmICghY29kZWMpCkBAIC0xNjAsNyArMjMzLDcgQEAKICAgICBuYW1lX3V0ZjggPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWUpOwogICAgIGlmIChuYW1lX3V0ZjggPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBuYW1lX3N0ciA9IHN0cmR1cChuYW1lX3V0ZjgpOworICAgIG5hbWVfc3RyID0gX1B5TWVtX1Jhd1N0cmR1cChuYW1lX3V0ZjgpOwogICAgIFB5X0RFQ1JFRihuYW1lKTsKICAgICBpZiAobmFtZV9zdHIgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMzEzLDcgKzM4Niw4IEBACiAgICAgaWYgKCFQeUJ5dGVBcnJheV9Jbml0KCkpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgYnl0ZWFycmF5Iik7CiAKLSAgICBfUHlGbG9hdF9Jbml0KCk7CisgICAgaWYgKCFfUHlGbG9hdF9Jbml0KCkpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgZmxvYXQiKTsKIAogICAgIGludGVycC0+bW9kdWxlcyA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoaW50ZXJwLT5tb2R1bGVzID09IE5VTEwpCkBAIC0zMjIsNiArMzk2LDggQEAKICAgICAvKiBJbml0IFVuaWNvZGUgaW1wbGVtZW50YXRpb247IHJlbGllcyBvbiB0aGUgY29kZWMgcmVnaXN0cnkgKi8KICAgICBpZiAoX1B5VW5pY29kZV9Jbml0KCkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHVuaWNvZGUiKTsKKyAgICBpZiAoX1B5U3RydWN0U2VxdWVuY2VfSW5pdCgpIDwgMCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSBzdHJ1Y3RzZXEiKTsKIAogICAgIGJpbW9kID0gX1B5QnVpbHRpbl9Jbml0KCk7CiAgICAgaWYgKGJpbW9kID09IE5VTEwpCkBAIC0zNTIsNyArNDI4LDcgQEAKICAgICBwc3RkZXJyID0gUHlGaWxlX05ld1N0ZFByaW50ZXIoZmlsZW5vKHN0ZGVycikpOwogICAgIGlmIChwc3RkZXJyID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IHNldCBwcmVsaW1pbmFyeSBzdGRlcnIiKTsKLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZGVyciIsIHBzdGRlcnIpOworICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIsIHBzdGRlcnIpOwogICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHBzdGRlcnIpOwogICAgIFB5X0RFQ1JFRihwc3RkZXJyKTsKIApAQCAtMzgwLDYgKzQ1Niw5IEBACiAgICAgaWYgKGluc3RhbGxfc2lncykKICAgICAgICAgaW5pdHNpZ3MoKTsgLyogU2lnbmFsIGhhbmRsaW5nIHN0dWZmLCBpbmNsdWRpbmcgaW5pdGludHIoKSAqLwogCisgICAgaWYgKF9QeVRyYWNlTWFsbG9jX0luaXQoKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgdHJhY2VtYWxsb2MiKTsKKwogICAgIGluaXRtYWluKGludGVycCk7IC8qIE1vZHVsZSBfX21haW5fXyAqLwogICAgIGlmIChpbml0c3RkaW8oKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCkBAIC00MzcsMTAgKzUxNiw5IEBACiBzdGF0aWMgdm9pZAogZmx1c2hfc3RkX2ZpbGVzKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKmZvdXQgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOwotICAgIFB5T2JqZWN0ICpmZXJyID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBQeU9iamVjdCAqZm91dCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOworICAgIFB5T2JqZWN0ICpmZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgUHlPYmplY3QgKnRtcDsKLSAgICBfUHlfSURFTlRJRklFUihmbHVzaCk7CiAKICAgICBpZiAoZm91dCAhPSBOVUxMICYmIGZvdXQgIT0gUHlfTm9uZSAmJiAhZmlsZV9pc19jbG9zZWQoZm91dCkpIHsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmb3V0LCAmUHlJZF9mbHVzaCwgIiIpOwpAQCAtNTMwLDEwICs2MDgsNiBAQAogICAgIHdoaWxlIChQeUdDX0NvbGxlY3QoKSA+IDApCiAgICAgICAgIC8qIG5vdGhpbmcgKi87CiAjZW5kaWYKLSAgICAvKiBXZSBydW4gdGhpcyB3aGlsZSBtb3N0IGludGVycHJldGVyIHN0YXRlIGlzIHN0aWxsIGFsaXZlLCBzbyB0aGF0Ci0gICAgICAgZGVidWcgaW5mb3JtYXRpb24gY2FuIGJlIHByaW50ZWQgb3V0ICovCi0gICAgX1B5R0NfRmluaSgpOwotCiAgICAgLyogRGVzdHJveSBhbGwgbW9kdWxlcyAqLwogICAgIFB5SW1wb3J0X0NsZWFudXAoKTsKIApAQCAtNTU5LDYgKzYzMywxMCBAQAogICAgIFB5R0NfQ29sbGVjdCgpOwogI2VuZGlmCiAKKyAgICAvKiBEaXNhYmxlIHRyYWNlbWFsbG9jIGFmdGVyIGFsbCBQeXRob24gb2JqZWN0cyBoYXZlIGJlZW4gZGVzdHJveWVkLAorICAgICAgIHNvIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0cmFjZW1hbGxvYyBpbiBvYmplY3RzIGRlc3RydWN0b3IuICovCisgICAgX1B5VHJhY2VNYWxsb2NfRmluaSgpOworCiAgICAgLyogRGVzdHJveSB0aGUgZGF0YWJhc2UgdXNlZCBieSBfUHlJbXBvcnRfe0ZpeHVwLEZpbmR9RXh0ZW5zaW9uICovCiAgICAgX1B5SW1wb3J0X0ZpbmkoKTsKIApAQCAtNTcyLDYgKzY1MCw4IEBACiAjaWZkZWYgQ09VTlRfQUxMT0NTCiAgICAgZHVtcF9jb3VudHMoc3Rkb3V0KTsKICNlbmRpZgorICAgIC8qIGR1bXAgaGFzaCBzdGF0cyAqLworICAgIF9QeUhhc2hfRmluaSgpOwogCiAgICAgUFJJTlRfVE9UQUxfUkVGUygpOwogCkBAIC01OTYsMTEgKzY3Niw2IEBACiAKICAgICBfUHlFeGNfRmluaSgpOwogCi0gICAgLyogQ2xlYW51cCBhdXRvLXRocmVhZC1zdGF0ZSAqLwotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgX1B5R0lMU3RhdGVfRmluaSgpOwotI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCi0KICAgICAvKiBTdW5kcnkgZmluYWxpemVycyAqLwogICAgIFB5TWV0aG9kX0ZpbmkoKTsKICAgICBQeUZyYW1lX0ZpbmkoKTsKQEAgLTYxNCwxNyArNjg5LDE1IEBACiAgICAgUHlGbG9hdF9GaW5pKCk7CiAgICAgUHlEaWN0X0ZpbmkoKTsKICAgICBQeVNsaWNlX0ZpbmkoKTsKKyAgICBfUHlHQ19GaW5pKCk7CisgICAgX1B5UmFuZG9tX0ZpbmkoKTsKIAogICAgIC8qIENsZWFudXAgVW5pY29kZSBpbXBsZW1lbnRhdGlvbiAqLwogICAgIF9QeVVuaWNvZGVfRmluaSgpOwogCi0gICAgLyogRGVsZXRlIGN1cnJlbnQgdGhyZWFkLiBBZnRlciB0aGlzLCBtYW55IEMgQVBJIGNhbGxzIGJlY29tZSBjcmFzaHkuICovCi0gICAgUHlUaHJlYWRTdGF0ZV9Td2FwKE5VTEwpOwotICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUoaW50ZXJwKTsKLQogICAgIC8qIHJlc2V0IGZpbGUgc3lzdGVtIGRlZmF1bHQgZW5jb2RpbmcgKi8KICAgICBpZiAoIVB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgJiYgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZykgewotICAgICAgICBmcmVlKChjaGFyKilQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSgoY2hhciopUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyk7CiAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSBOVUxMOwogICAgIH0KIApAQCAtNjM2LDYgKzcwOSwxNSBAQAogCiAgICAgUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycygmX1B5UGFyc2VyX0dyYW1tYXIpOwogCisgICAgLyogQ2xlYW51cCBhdXRvLXRocmVhZC1zdGF0ZSAqLworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgX1B5R0lMU3RhdGVfRmluaSgpOworI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCisKKyAgICAvKiBEZWxldGUgY3VycmVudCB0aHJlYWQuIEFmdGVyIHRoaXMsIG1hbnkgQyBBUEkgY2FsbHMgYmVjb21lIGNyYXNoeS4gKi8KKyAgICBQeVRocmVhZFN0YXRlX1N3YXAoTlVMTCk7CisgICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShpbnRlcnApOworCiAjaWZkZWYgUHlfVFJBQ0VfUkVGUwogICAgIC8qIERpc3BsYXkgYWRkcmVzc2VzICgmIHJlZmNudHMpIG9mIGFsbCBvYmplY3RzIHN0aWxsIGFsaXZlLgogICAgICAqIEFuIGFkZHJlc3MgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgcmVwciBvZiB0aGUgb2JqZWN0LCBwcmludGVkCkBAIC03MTgsNyArODAwLDcgQEAKICAgICAgICAgcHN0ZGVyciA9IFB5RmlsZV9OZXdTdGRQcmludGVyKGZpbGVubyhzdGRlcnIpKTsKICAgICAgICAgaWYgKHBzdGRlcnIgPT0gTlVMTCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IHNldCBwcmVsaW1pbmFyeSBzdGRlcnIiKTsKLSAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRlcnIiLCBwc3RkZXJyKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZGVyciwgcHN0ZGVycik7CiAgICAgICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHBzdGRlcnIpOwogICAgICAgICBQeV9ERUNSRUYocHN0ZGVycik7CiAKQEAgLTc3Myw2ICs4NTUsOSBAQAogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9FbmRJbnRlcnByZXRlcjogdGhyZWFkIGlzIG5vdCBjdXJyZW50Iik7CiAgICAgaWYgKHRzdGF0ZS0+ZnJhbWUgIT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfRW5kSW50ZXJwcmV0ZXI6IHRocmVhZCBzdGlsbCBoYXMgYSBmcmFtZSIpOworCisgICAgd2FpdF9mb3JfdGhyZWFkX3NodXRkb3duKCk7CisKICAgICBpZiAodHN0YXRlICE9IGludGVycC0+dHN0YXRlX2hlYWQgfHwgdHN0YXRlLT5uZXh0ICE9IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0VuZEludGVycHJldGVyOiBub3QgdGhlIGxhc3QgdGhyZWFkIik7CiAKQEAgLTgwMiw3ICs4ODcsNyBAQAogfQogCiBzdGF0aWMgd2NoYXJfdCAqZGVmYXVsdF9ob21lID0gTlVMTDsKLXN0YXRpYyB3Y2hhcl90IGVudl9ob21lW1BBVEhfTUFYKzFdOworc3RhdGljIHdjaGFyX3QgZW52X2hvbWVbTUFYUEFUSExFTisxXTsKIAogdm9pZAogUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICpob21lKQpAQCAtODMyLDcgKzkxNyw3IEBACiBzdGF0aWMgdm9pZAogaW5pdG1haW4oUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkOworICAgIFB5T2JqZWN0ICptLCAqZCwgKmxvYWRlcjsKICAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfX21haW5fXyIpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGNyZWF0ZSBfX21haW5fXyBtb2R1bGUiKTsKQEAgLTg1Myw3ICs5MzgsOCBAQAogICAgICAqIGJlIHNldCBpZiBfX21haW5fXyBnZXRzIGZ1cnRoZXIgaW5pdGlhbGl6ZWQgbGF0ZXIgaW4gdGhlIHN0YXJ0dXAKICAgICAgKiBwcm9jZXNzLgogICAgICAqLwotICAgIGlmIChQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIpID09IE5VTEwpIHsKKyAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIpOworICAgIGlmIChsb2FkZXIgPT0gTlVMTCB8fCBsb2FkZXIgPT0gUHlfTm9uZSkgewogICAgICAgICBQeU9iamVjdCAqbG9hZGVyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1aWx0aW5JbXBvcnRlciIpOwogICAgICAgICBpZiAobG9hZGVyID09IE5VTEwpIHsKQEAgLTkwMyw2ICs5ODksNyBAQAogICAgIFB5T2JqZWN0ICptOwogICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInNpdGUiKTsKICAgICBpZiAobSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGltcG9ydCB0aGUgc2l0ZSBtb2R1bGVcbiIpOwogICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICBQeV9GaW5hbGl6ZSgpOwogICAgICAgICBleGl0KDEpOwpAQCAtOTI1LDcgKzEwMTIsNiBAQAogICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwogICAgIF9QeV9JREVOVElGSUVSKGlzYXR0eSk7CiAgICAgX1B5X0lERU5USUZJRVIoVGV4dElPV3JhcHBlcik7Ci0gICAgX1B5X0lERU5USUZJRVIobmFtZSk7CiAgICAgX1B5X0lERU5USUZJRVIobW9kZSk7CiAKICAgICAvKiBzdGRpbiBpcyBhbHdheXMgb3BlbmVkIGluIGJ1ZmZlcmVkIG1vZGUsIGZpcnN0IGJlY2F1c2UgaXQgc2hvdWxkbid0CkBAIC0xMDM1LDcgKzExMjEsNyBAQAogICAgIFB5T2JqZWN0ICpzdGQgPSBOVUxMOwogICAgIGludCBzdGF0dXMgPSAwLCBmZDsKICAgICBQeU9iamVjdCAqIGVuY29kaW5nX2F0dHI7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMLCAqZXJyb3JzOworICAgIGNoYXIgKnB5dGhvbmlvZW5jb2RpbmcgPSBOVUxMLCAqZW5jb2RpbmcsICplcnJvcnM7CiAKICAgICAvKiBIYWNrIHRvIGF2b2lkIGEgbmFzdHkgcmVjdXJzaW9uIGlzc3VlIHdoZW4gUHl0aG9uIGlzIGludm9rZWQKICAgICAgICBpbiB2ZXJib3NlIG1vZGU6IHByZS1pbXBvcnQgdGhlIExhdGluLTEgYW5kIFVURi04IGNvZGVjcyAqLwpAQCAtMTA2NywxNCArMTE1MywyOCBAQAogICAgIH0KICAgICBQeV9ERUNSRUYod3JhcHBlcik7CiAKLSAgICBlbmNvZGluZyA9IFB5X0dFVEVOVigiUFlUSE9OSU9FTkNPRElORyIpOwotICAgIGVycm9ycyA9IE5VTEw7Ci0gICAgaWYgKGVuY29kaW5nKSB7Ci0gICAgICAgIGVuY29kaW5nID0gc3RyZHVwKGVuY29kaW5nKTsKLSAgICAgICAgZXJyb3JzID0gc3RyY2hyKGVuY29kaW5nLCAnOicpOwotICAgICAgICBpZiAoZXJyb3JzKSB7Ci0gICAgICAgICAgICAqZXJyb3JzID0gJ1wwJzsKLSAgICAgICAgICAgIGVycm9ycysrOworICAgIGVuY29kaW5nID0gX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2Rpbmc7CisgICAgZXJyb3JzID0gX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzOworICAgIGlmICghZW5jb2RpbmcgfHwgIWVycm9ycykgeworICAgICAgICBweXRob25pb2VuY29kaW5nID0gUHlfR0VURU5WKCJQWVRIT05JT0VOQ09ESU5HIik7CisgICAgICAgIGlmIChweXRob25pb2VuY29kaW5nKSB7CisgICAgICAgICAgICBjaGFyICplcnI7CisgICAgICAgICAgICBweXRob25pb2VuY29kaW5nID0gX1B5TWVtX1N0cmR1cChweXRob25pb2VuY29kaW5nKTsKKyAgICAgICAgICAgIGlmIChweXRob25pb2VuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnIgPSBzdHJjaHIocHl0aG9uaW9lbmNvZGluZywgJzonKTsKKyAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICAqZXJyID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBlcnIrKzsKKyAgICAgICAgICAgICAgICBpZiAoKmVyciAmJiAhZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKnB5dGhvbmlvZW5jb2RpbmcgJiYgIWVuY29kaW5nKSB7CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBweXRob25pb2VuY29kaW5nOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDk0LDcgKzExOTQsNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9IC8qIGlmIChmZCA8IDApICovCiAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGluX18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkaW4iLCBzdGQpOworICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRpbiwgc3RkKTsKICAgICBQeV9ERUNSRUYoc3RkKTsKIAogICAgIC8qIFNldCBzeXMuc3Rkb3V0ICovCkBAIC0xMTA5LDcgKzEyMDksNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9IC8qIGlmIChmZCA8IDApICovCiAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZG91dF9fIiwgc3RkKTsKLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZG91dCIsIHN0ZCk7CisgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZG91dCwgc3RkKTsKICAgICBQeV9ERUNSRUYoc3RkKTsKIAogI2lmIDEgLyogRGlzYWJsZSB0aGlzIGlmIHlvdSBoYXZlIHRyb3VibGUgZGVidWdnaW5nIGJvb3RzdHJhcCBzdHVmZiAqLwpAQCAtMTEyOSwxOCArMTIyOSwyNCBAQAogICAgICAgIHdoZW4gaW1wb3J0LmMgdHJpZXMgdG8gd3JpdGUgdG8gc3RkZXJyIGluIHZlcmJvc2UgbW9kZS4gKi8KICAgICBlbmNvZGluZ19hdHRyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzdGQsICJlbmNvZGluZyIpOwogICAgIGlmIChlbmNvZGluZ19hdHRyICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3QgY2hhciAqIGVuY29kaW5nOwotICAgICAgICBlbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7Ci0gICAgICAgIGlmIChlbmNvZGluZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqY29kZWNfaW5mbyA9IF9QeUNvZGVjX0xvb2t1cChlbmNvZGluZyk7CisgICAgICAgIGNvbnN0IGNoYXIgKiBzdGRfZW5jb2Rpbmc7CisgICAgICAgIHN0ZF9lbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7CisgICAgICAgIGlmIChzdGRfZW5jb2RpbmcgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvZGVjX2luZm8gPSBfUHlDb2RlY19Mb29rdXAoc3RkX2VuY29kaW5nKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYoY29kZWNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nX2F0dHIpOwogICAgIH0KICAgICBQeUVycl9DbGVhcigpOyAgLyogTm90IGEgZmF0YWwgZXJyb3IgaWYgY29kZWMgaXNuJ3QgYXZhaWxhYmxlICovCiAKLSAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkZXJyIiwgc3RkKTsKKyAgICBpZiAoUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGVycl9fIiwgc3RkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHN0ZCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmIChfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyLCBzdGQpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoc3RkKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAgICAgUHlfREVDUkVGKHN0ZCk7CiAjZW5kaWYKIApAQCAtMTE0OSw4ICsxMjU1LDE2IEBACiAgICAgICAgIHN0YXR1cyA9IC0xOwogICAgIH0KIAotICAgIGlmIChlbmNvZGluZykKLSAgICAgICAgZnJlZShlbmNvZGluZyk7CisgICAgLyogV2Ugd29uJ3QgbmVlZCB0aGVtIGFueW1vcmUuICovCisgICAgaWYgKF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKSB7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CisgICAgfQorICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMgPSBOVUxMOworICAgIH0KKyAgICBQeU1lbV9GcmVlKHB5dGhvbmlvZW5jb2RpbmcpOwogICAgIFB5X1hERUNSRUYoYmltb2QpOwogICAgIFB5X1hERUNSRUYoaW9tb2QpOwogICAgIHJldHVybiBzdGF0dXM7CkBAIC0xMTc1LDM2ICsxMjg5LDQ3IEBACiB9CiAKIGludAotUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlDb21waWxlckZsYWdzICpmbGFncykKIHsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBpbnQgcmV0OworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgKnY7CisgICAgaW50IHJldCwgZXJyOwogICAgIFB5Q29tcGlsZXJGbGFncyBsb2NhbF9mbGFnczsKIAorICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgICBpZiAoZmxhZ3MgPT0gTlVMTCkgewogICAgICAgICBmbGFncyA9ICZsb2NhbF9mbGFnczsKICAgICAgICAgbG9jYWxfZmxhZ3MuY2ZfZmxhZ3MgPSAwOwogICAgIH0KLSAgICB2ID0gUHlTeXNfR2V0T2JqZWN0KCJwczEiKTsKKyAgICB2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BzMSk7CiAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoInBzMSIsIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPj4+ICIpKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BzMSwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI+Pj4gIikpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgIH0KLSAgICB2ID0gUHlTeXNfR2V0T2JqZWN0KCJwczIiKTsKKyAgICB2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BzMik7CiAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoInBzMiIsIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLi4uICIpKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BzMiwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIuLi4gIikpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgIH0KKyAgICBlcnIgPSAtMTsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHJldCA9IFB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoZnAsIGZpbGVuYW1lLCBmbGFncyk7CisgICAgICAgIHJldCA9IFB5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KGZwLCBmaWxlbmFtZSwgZmxhZ3MpOwogICAgICAgICBQUklOVF9UT1RBTF9SRUZTKCk7Ci0gICAgICAgIGlmIChyZXQgPT0gRV9FT0YpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHJldCA9PSBFX0VPRikgeworICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIC8qCiAgICAgICAgIGlmIChyZXQgPT0gRV9OT01FTSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAqLwogICAgIH0KKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBlcnI7CiB9CiAKIC8qIGNvbXB1dGUgcGFyc2VyIGZsYWdzIGJhc2VkIG9uIGNvbXBpbGVyIGZsYWdzICovCkBAIC0xMjMyLDE4ICsxMzU3LDI1IEBACiAjZW5kaWYKIAogaW50Ci1QeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncykKK1B5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KEZJTEUgKmZwLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkLCAqdiwgKncsICpvZW5jID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbSwgKmQsICp2LCAqdywgKm9lbmMgPSBOVUxMLCAqbW9kX25hbWU7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUFyZW5hICphcmVuYTsKICAgICBjaGFyICpwczEgPSAiIiwgKnBzMiA9ICIiLCAqZW5jID0gTlVMTDsKICAgICBpbnQgZXJyY29kZSA9IDA7CiAgICAgX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOworICAgIF9QeV9JREVOVElGSUVSKF9fbWFpbl9fKTsKKworICAgIG1vZF9uYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pOyAvKiBib3Jyb3dlZCAqLworICAgIGlmIChtb2RfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBpZiAoZnAgPT0gc3RkaW4pIHsKICAgICAgICAgLyogRmV0Y2ggZW5jb2RpbmcgZnJvbSBzeXMuc3RkaW4gaWYgcG9zc2libGUuICovCi0gICAgICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGluIik7CisgICAgICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkaW4pOwogICAgICAgICBpZiAodiAmJiB2ICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgIG9lbmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKHYsICZQeUlkX2VuY29kaW5nKTsKICAgICAgICAgICAgIGlmIChvZW5jKQpAQCAtMTI1Miw3ICsxMzg0LDcgQEAKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICB9CiAgICAgfQotICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInBzMSIpOworICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMxKTsKICAgICBpZiAodiAhPSBOVUxMKSB7CiAgICAgICAgIHYgPSBQeU9iamVjdF9TdHIodik7CiAgICAgICAgIGlmICh2ID09IE5VTEwpCkBAIC0xMjY1LDcgKzEzOTcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHcgPSBQeVN5c19HZXRPYmplY3QoInBzMiIpOworICAgIHcgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMyKTsKICAgICBpZiAodyAhPSBOVUxMKSB7CiAgICAgICAgIHcgPSBQeU9iamVjdF9TdHIodyk7CiAgICAgICAgIGlmICh3ID09IE5VTEwpCkBAIC0xMjg1LDkgKzE0MTcsOSBAQAogICAgICAgICBQeV9YREVDUkVGKG9lbmMpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlKGZwLCBmaWxlbmFtZSwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NpbmdsZV9pbnB1dCwgcHMxLCBwczIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsICZlcnJjb2RlLCBhcmVuYSk7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc2luZ2xlX2lucHV0LCBwczEsIHBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgJmVycmNvZGUsIGFyZW5hKTsKICAgICBQeV9YREVDUkVGKHYpOwogICAgIFB5X1hERUNSRUYodyk7CiAgICAgUHlfWERFQ1JFRihvZW5jKTsKQEAgLTEzMDAsNyArMTQzMiw3IEBACiAgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZSgiX19tYWluX18iKTsKKyAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlT2JqZWN0KG1vZF9uYW1lKTsKICAgICBpZiAobSA9PSBOVUxMKSB7CiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEzMTcsNiArMTQ0OSwyMyBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQKK1B5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlDb21waWxlckZsYWdzICpmbGFncykKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgaW50IHJlczsKKworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmVzID0gUHlSdW5fSW50ZXJhY3RpdmVPbmVPYmplY3QoZnAsIGZpbGVuYW1lLCBmbGFncyk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gcmVzOworfQorCisKIC8qIENoZWNrIHdoZXRoZXIgYSBmaWxlIG1heWJlIGEgcHljIGZpbGU6IExvb2sgYXQgdGhlIGV4dGVuc2lvbiwKICAgIHRoZSBmaWxlIHR5cGUsIGFuZCwgaWYgd2UgbWF5IGNsb3NlIGl0LCBhdCB0aGUgZmlyc3QgZmV3IGJ5dGVzLiAqLwogCkBAIC0xMzU3LDggKzE1MDYsOCBAQAogICAgIHJldHVybiAwOwogfQogCi1pbnQKLXN0YXRpYyBzZXRfbWFpbl9sb2FkZXIoUHlPYmplY3QgKmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpsb2FkZXJfbmFtZSkKK3N0YXRpYyBpbnQKK3NldF9tYWluX2xvYWRlcihQeU9iamVjdCAqZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmxvYWRlcl9uYW1lKQogewogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKQEAgLTE0MjUsNyArMTU3NCw3IEBACiAgICAgICAgIC8qIFRyeSB0byBydW4gYSBweWMgZmlsZS4gRmlyc3QsIHJlLW9wZW4gaW4gYmluYXJ5ICovCiAgICAgICAgIGlmIChjbG9zZWl0KQogICAgICAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgaWYgKChweWNfZnAgPSBmb3BlbihmaWxlbmFtZSwgInJiIikpID09IE5VTEwpIHsKKyAgICAgICAgaWYgKChweWNfZnAgPSBfUHlfZm9wZW4oZmlsZW5hbWUsICJyYiIpKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInB5dGhvbjogQ2FuJ3QgcmVvcGVuIC5weWMgZmlsZVxuIik7CiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KQEAgLTE0ODQsOCArMTYzMyw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLXBhcnNlX3N5bnRheF9lcnJvcihQeU9iamVjdCAqZXJyLCBQeU9iamVjdCAqKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKipmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICBpbnQgKmxpbmVubywgaW50ICpvZmZzZXQsIGNvbnN0IGNoYXIgKip0ZXh0KQorcGFyc2Vfc3ludGF4X2Vycm9yKFB5T2JqZWN0ICplcnIsIFB5T2JqZWN0ICoqbWVzc2FnZSwgUHlPYmplY3QgKipmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICBpbnQgKmxpbmVubywgaW50ICpvZmZzZXQsIFB5T2JqZWN0ICoqdGV4dCkKIHsKICAgICBsb25nIGhvbGQ7CiAgICAgUHlPYmplY3QgKnY7CkBAIC0xNDk2LDYgKzE2NDUsNyBAQAogICAgIF9QeV9JREVOVElGSUVSKHRleHQpOwogCiAgICAgKm1lc3NhZ2UgPSBOVUxMOworICAgICpmaWxlbmFtZSA9IE5VTEw7CiAKICAgICAvKiBuZXcgc3R5bGUgZXJyb3JzLiAgYGVycicgaXMgYW4gaW5zdGFuY2UgKi8KICAgICAqbWVzc2FnZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoZXJyLCAmUHlJZF9tc2cpOwpAQCAtMTUwNywxMyArMTY1NywxMyBAQAogICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgaWYgKHYgPT0gUHlfTm9uZSkgewogICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICpmaWxlbmFtZSA9IE5VTEw7CisgICAgICAgICpmaWxlbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX3N0cmluZyk7CisgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICAqZmlsZW5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIGlmICghKmZpbGVuYW1lKQotICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICAqZmlsZW5hbWUgPSB2OwogICAgIH0KIAogICAgIHYgPSBfUHlPYmplY3RfR2V0QXR0cklkKGVyciwgJlB5SWRfbGluZW5vKTsKQEAgLTE1NDcsMTUgKzE2OTcsMTMgQEAKICAgICAgICAgKnRleHQgPSBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgKnRleHQgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIGlmICghKnRleHQpCi0gICAgICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgICAgICp0ZXh0ID0gdjsKICAgICB9CiAgICAgcmV0dXJuIDE7CiAKIGZpbmFsbHk6CiAgICAgUHlfWERFQ1JFRigqbWVzc2FnZSk7CisgICAgUHlfWERFQ1JFRigqZmlsZW5hbWUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNTY2LDkgKzE3MTQsMTUgQEAKIH0KIAogc3RhdGljIHZvaWQKLXByaW50X2Vycm9yX3RleHQoUHlPYmplY3QgKmYsIGludCBvZmZzZXQsIGNvbnN0IGNoYXIgKnRleHQpCitwcmludF9lcnJvcl90ZXh0KFB5T2JqZWN0ICpmLCBpbnQgb2Zmc2V0LCBQeU9iamVjdCAqdGV4dF9vYmopCiB7CisgICAgY2hhciAqdGV4dDsKICAgICBjaGFyICpubDsKKworICAgIHRleHQgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHRleHRfb2JqKTsKKyAgICBpZiAodGV4dCA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAob2Zmc2V0ID49IDApIHsKICAgICAgICAgaWYgKG9mZnNldCA+IDAgJiYgb2Zmc2V0ID09IHN0cmxlbih0ZXh0KSAmJiB0ZXh0W29mZnNldCAtIDFdID09ICdcbicpCiAgICAgICAgICAgICBvZmZzZXQtLTsKQEAgLTE2MjcsNyArMTc4MSwxMiBAQAogICAgIGlmIChQeUxvbmdfQ2hlY2sodmFsdWUpKQogICAgICAgICBleGl0Y29kZSA9IChpbnQpUHlMb25nX0FzTG9uZyh2YWx1ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5T2JqZWN0ICpzeXNfc3RkZXJyID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICAgICAgUHlPYmplY3QgKnN5c19zdGRlcnIgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKKyAgICAgICAgLyogV2UgY2xlYXIgdGhlIGV4Y2VwdGlvbiBoZXJlIHRvIGF2b2lkIHRyaWdnZXJpbmcgdGhlIGFzc2VydGlvbgorICAgICAgICAgKiBpbiBQeU9iamVjdF9TdHIgdGhhdCBlbnN1cmVzIGl0IHdvbid0IHNpbGVudGx5IGxvc2UgZXhjZXB0aW9uCisgICAgICAgICAqIGRldGFpbHMuCisgICAgICAgICAqLworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBpZiAoc3lzX3N0ZGVyciAhPSBOVUxMICYmIHN5c19zdGRlcnIgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KHZhbHVlLCBzeXNfc3RkZXJyLCBQeV9QUklOVF9SQVcpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTY3MCwxMSArMTgyOSwxMSBAQAogICAgICAgICByZXR1cm47CiAgICAgLyogTm93IHdlIGtub3cgdiAhPSBOVUxMIHRvbyAqLwogICAgIGlmIChzZXRfc3lzX2xhc3RfdmFycykgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoImxhc3RfdHlwZSIsIGV4Y2VwdGlvbik7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgibGFzdF92YWx1ZSIsIHYpOwotICAgICAgICBQeVN5c19TZXRPYmplY3QoImxhc3RfdHJhY2ViYWNrIiwgdGIpOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfbGFzdF90eXBlLCBleGNlcHRpb24pOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfbGFzdF92YWx1ZSwgdik7CisgICAgICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9sYXN0X3RyYWNlYmFjaywgdGIpOwogICAgIH0KLSAgICBob29rID0gUHlTeXNfR2V0T2JqZWN0KCJleGNlcHRob29rIik7CisgICAgaG9vayA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9leGNlcHRob29rKTsKICAgICBpZiAoaG9vaykgewogICAgICAgICBQeU9iamVjdCAqYXJncyA9IFB5VHVwbGVfUGFjaygzLCBleGNlcHRpb24sIHYsIHRiKTsKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGhvb2ssIGFyZ3MpOwpAQCAtMTcyNCw5ICsxODgzLDExIEBACiAgICAgX1B5X0lERU5USUZJRVIocHJpbnRfZmlsZV9hbmRfbGluZSk7CiAKICAgICBpZiAoIVB5RXhjZXB0aW9uSW5zdGFuY2VfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiVHlwZUVycm9yOiBwcmludF9leGNlcHRpb24oKTogRXhjZXB0aW9uIGV4cGVjdGVkIGZvciB2YWx1ZSwgIiwgZik7Ci0gICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhQeV9UWVBFKHZhbHVlKS0+dHBfbmFtZSwgZik7Ci0gICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiIGZvdW5kXG4iLCBmKTsKKyAgICAgICAgZXJyID0gUHlGaWxlX1dyaXRlU3RyaW5nKCJUeXBlRXJyb3I6IHByaW50X2V4Y2VwdGlvbigpOiBFeGNlcHRpb24gZXhwZWN0ZWQgZm9yIHZhbHVlLCAiLCBmKTsKKyAgICAgICAgZXJyICs9IFB5RmlsZV9Xcml0ZVN0cmluZyhQeV9UWVBFKHZhbHVlKS0+dHBfbmFtZSwgZik7CisgICAgICAgIGVyciArPSBQeUZpbGVfV3JpdGVTdHJpbmcoIiBmb3VuZFxuIiwgZik7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNzM5LDI3ICsxOTAwLDMwIEBACiAgICAgaWYgKGVyciA9PSAwICYmCiAgICAgICAgIF9QeU9iamVjdF9IYXNBdHRySWQodmFsdWUsICZQeUlkX3ByaW50X2ZpbGVfYW5kX2xpbmUpKQogICAgIHsKLSAgICAgICAgUHlPYmplY3QgKm1lc3NhZ2U7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAqdGV4dDsKKyAgICAgICAgUHlPYmplY3QgKm1lc3NhZ2UsICpmaWxlbmFtZSwgKnRleHQ7CiAgICAgICAgIGludCBsaW5lbm8sIG9mZnNldDsKICAgICAgICAgaWYgKCFwYXJzZV9zeW50YXhfZXJyb3IodmFsdWUsICZtZXNzYWdlLCAmZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5lbm8sICZvZmZzZXQsICZ0ZXh0KSkKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hhciBidWZbMTBdOwotICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIgIEZpbGUgXCIiLCBmKTsKLSAgICAgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiPHN0cmluZz4iLCBmKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoZmlsZW5hbWUsIGYpOwotICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcIiwgbGluZSAiLCBmKTsKLSAgICAgICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgbGluZW5vKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhidWYsIGYpOwotICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGYpOwotICAgICAgICAgICAgaWYgKHRleHQgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBwcmludF9lcnJvcl90ZXh0KGYsIG9mZnNldCwgdGV4dCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGluZTsKKwogICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgIHZhbHVlID0gbWVzc2FnZTsKKworICAgICAgICAgICAgbGluZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIgIEZpbGUgXCIlVVwiLCBsaW5lICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgICAgICAgICAgaWYgKGxpbmUgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdChsaW5lLCBmLCBQeV9QUklOVF9SQVcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaW5lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRleHQgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHByaW50X2Vycm9yX3RleHQoZiwgb2Zmc2V0LCB0ZXh0KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodGV4dCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8qIENhbid0IGJlIGJvdGhlcmVkIHRvIGNoZWNrIGFsbCB0aG9zZQogICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCkgY2FsbHMgKi8KICAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQpAQCAtMTc4OCwxMCArMTk1Miw5IEBACiAgICAgICAgICAgICBlcnIgPSBQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hhciogbW9kc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhtb2R1bGVOYW1lKTsKLSAgICAgICAgICAgIGlmIChtb2RzdHIgJiYgc3RyY21wKG1vZHN0ciwgImJ1aWx0aW5zIikpCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG1vZHVsZU5hbWUsICZQeUlkX2J1aWx0aW5zKSAhPSAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVyciA9IFB5RmlsZV9Xcml0ZVN0cmluZyhtb2RzdHIsIGYpOworICAgICAgICAgICAgICAgIGVyciA9IFB5RmlsZV9Xcml0ZU9iamVjdChtb2R1bGVOYW1lLCBmLCBQeV9QUklOVF9SQVcpOwogICAgICAgICAgICAgICAgIGVyciArPSBQeUZpbGVfV3JpdGVTdHJpbmcoIi4iLCBmKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGVOYW1lKTsKQEAgLTE4ODQsNyArMjA0Nyw3IEBACiBQeUVycl9EaXNwbGF5KFB5T2JqZWN0ICpleGNlcHRpb24sIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRiKQogewogICAgIFB5T2JqZWN0ICpzZWVuOwotICAgIFB5T2JqZWN0ICpmID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBQeU9iamVjdCAqZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIGlmIChQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKHZhbHVlKQogICAgICAgICAmJiB0YiAhPSBOVUxMICYmIFB5VHJhY2VCYWNrX0NoZWNrKHRiKSkgewogICAgICAgICAvKiBQdXQgdGhlIHRyYWNlYmFjayBvbiB0aGUgZXhjZXB0aW9uLCBvdGhlcndpc2UgaXQgd29uJ3QgZ2V0CkBAIC0xOTIwLDM3ICsyMDgzLDU0IEBACiB7CiAgICAgUHlPYmplY3QgKnJldCA9IE5VTEw7CiAgICAgbW9kX3R5IG1vZDsKLSAgICBQeUFyZW5hICphcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisgICAgUHlBcmVuYSAqYXJlbmE7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworCisgICAgZmlsZW5hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9zdHJpbmcpOyAvKiBib3Jyb3dlZCAqLworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKICAgICBpZiAoYXJlbmEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKHN0ciwgIjxzdHJpbmc+Iiwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKICAgICBpZiAobW9kICE9IE5VTEwpCi0gICAgICAgIHJldCA9IHJ1bl9tb2QobW9kLCAiPHN0cmluZz4iLCBnbG9iYWxzLCBsb2NhbHMsIGZsYWdzLCBhcmVuYSk7CisgICAgICAgIHJldCA9IHJ1bl9tb2QobW9kLCBmaWxlbmFtZSwgZ2xvYmFscywgbG9jYWxzLCBmbGFncywgYXJlbmEpOwogICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgcmV0dXJuIHJldDsKIH0KIAogUHlPYmplY3QgKgotUHlSdW5fRmlsZUV4RmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsIFB5T2JqZWN0ICpnbG9iYWxzLAorUHlSdW5fRmlsZUV4RmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywKICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpsb2NhbHMsIGludCBjbG9zZWl0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQogewotICAgIFB5T2JqZWN0ICpyZXQ7CisgICAgUHlPYmplY3QgKnJldCA9IE5VTEw7CiAgICAgbW9kX3R5IG1vZDsKLSAgICBQeUFyZW5hICphcmVuYSA9IFB5QXJlbmFfTmV3KCk7Ci0gICAgaWYgKGFyZW5hID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIFB5QXJlbmEgKmFyZW5hID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CiAKLSAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tRmlsZShmcCwgZmlsZW5hbWUsIE5VTEwsIHN0YXJ0LCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBOVUxMLCBhcmVuYSk7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKKyAgICBpZiAoYXJlbmEgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OworCisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBOVUxMLCBzdGFydCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgTlVMTCwgYXJlbmEpOwogICAgIGlmIChjbG9zZWl0KQogICAgICAgICBmY2xvc2UoZnApOwogICAgIGlmIChtb2QgPT0gTlVMTCkgewotICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBleGl0OwogICAgIH0KICAgICByZXQgPSBydW5fbW9kKG1vZCwgZmlsZW5hbWUsIGdsb2JhbHMsIGxvY2FscywgZmxhZ3MsIGFyZW5hKTsKLSAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOworCitleGl0OgorICAgIFB5X1hERUNSRUYoZmlsZW5hbWUpOworICAgIGlmIChhcmVuYSAhPSBOVUxMKQorICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTE5NTksMTIgKzIxMzksMTEgQEAKIHsKICAgICBQeU9iamVjdCAqZiwgKnI7CiAgICAgUHlPYmplY3QgKnR5cGUsICp2YWx1ZSwgKnRyYWNlYmFjazsKLSAgICBfUHlfSURFTlRJRklFUihmbHVzaCk7CiAKICAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiAqLwogICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOwogCi0gICAgZiA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIGlmIChmICE9IE5VTEwpIHsKICAgICAgICAgciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZiwgJlB5SWRfZmx1c2gsICIiKTsKICAgICAgICAgaWYgKHIpCkBAIC0xOTcyLDcgKzIxNTEsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIH0KLSAgICBmID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKKyAgICBmID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZG91dCk7CiAgICAgaWYgKGYgIT0gTlVMTCkgewogICAgICAgICByID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmLCAmUHlJZF9mbHVzaCwgIiIpOwogICAgICAgICBpZiAocikKQEAgLTE5ODUsMTIgKzIxNjQsMTIgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXJ1bl9tb2QobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLAotICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCitydW5fbW9kKG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMsCisgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgIFB5T2JqZWN0ICp2OwotICAgIGNvID0gUHlBU1RfQ29tcGlsZShtb2QsIGZpbGVuYW1lLCBmbGFncywgYXJlbmEpOworICAgIGNvID0gUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLCBmbGFncywgLTEsIGFyZW5hKTsKICAgICBpZiAoY28gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgdiA9IFB5RXZhbF9FdmFsQ29kZSgoUHlPYmplY3QqKWNvLCBnbG9iYWxzLCBsb2NhbHMpOwpAQCAtMjAzMiw4ICsyMjExLDggQEAKIH0KIAogUHlPYmplY3QgKgotUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQorUHlfQ29tcGlsZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzdHIsIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCiB7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBtb2RfdHkgbW9kOwpAQCAtMjA0MSw3ICsyMjIwLDcgQEAKICAgICBpZiAoYXJlbmEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgYXJlbmEpOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjA1MSwxMSArMjIzMCwyNCBAQAogICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBjbyA9IFB5QVNUX0NvbXBpbGVFeChtb2QsIGZpbGVuYW1lLCBmbGFncywgb3B0aW1pemUsIGFyZW5hKTsKKyAgICBjbyA9IFB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIG9wdGltaXplLCBhcmVuYSk7CiAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopY287CiB9CiAKK1B5T2JqZWN0ICoKK1B5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lLCAqY287CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGNvID0gUHlfQ29tcGlsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIG9wdGltaXplKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBjbzsKK30KKwogLyogRm9yIHVzZSBpbiBQeV9MSU1JVEVEX0FQSSAqLwogI3VuZGVmIFB5X0NvbXBpbGVTdHJpbmcKIFB5T2JqZWN0ICoKQEAgLTIwNjUsNDYgKzIyNTcsNjIgQEAKIH0KIAogc3RydWN0IHN5bXRhYmxlICoKLVB5X1N5bXRhYmxlU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCkKK1B5X1N5bXRhYmxlU3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIgKnN0ciwgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgc3RhcnQpCiB7CiAgICAgc3RydWN0IHN5bXRhYmxlICpzdDsKICAgICBtb2RfdHkgbW9kOwogICAgIFB5Q29tcGlsZXJGbGFncyBmbGFnczsKLSAgICBQeUFyZW5hICphcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisgICAgUHlBcmVuYSAqYXJlbmE7CisKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CiAgICAgaWYgKGFyZW5hID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZmxhZ3MuY2ZfZmxhZ3MgPSAwOwotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmcoc3RyLCBmaWxlbmFtZSwgc3RhcnQsICZmbGFncywgYXJlbmEpOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsICZmbGFncywgYXJlbmEpOwogICAgIGlmIChtb2QgPT0gTlVMTCkgewogICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc3QgPSBQeVN5bXRhYmxlX0J1aWxkKG1vZCwgZmlsZW5hbWUsIDApOworICAgIHN0ID0gUHlTeW10YWJsZV9CdWlsZE9iamVjdChtb2QsIGZpbGVuYW1lLCAwKTsKICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgIHJldHVybiBzdDsKIH0KIAorc3RydWN0IHN5bXRhYmxlICoKK1B5X1N5bXRhYmxlU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgc3RhcnQpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIHN0cnVjdCBzeW10YWJsZSAqc3Q7CisKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3QgPSBQeV9TeW10YWJsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gc3Q7Cit9CisKIC8qIFByZWZlcnJlZCBhY2Nlc3MgdG8gcGFyc2VyIGlzIHRocm91Z2ggQVNULiAqLwogbW9kX3R5Ci1QeVBhcnNlcl9BU1RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQorUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUNvbXBpbGVyRmxhZ3MgbG9jYWxmbGFnczsKICAgICBwZXJyZGV0YWlsIGVycjsKICAgICBpbnQgaWZsYWdzID0gUEFSU0VSX0ZMQUdTKGZsYWdzKTsKIAotICAgIG5vZGUgKm4gPSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeChzLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwgc3RhcnQsICZlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWZsYWdzKTsKKyAgICBub2RlICpuID0gUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QocywgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwgc3RhcnQsICZlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZmxhZ3MpOwogICAgIGlmIChmbGFncyA9PSBOVUxMKSB7CiAgICAgICAgIGxvY2FsZmxhZ3MuY2ZfZmxhZ3MgPSAwOwogICAgICAgICBmbGFncyA9ICZsb2NhbGZsYWdzOwogICAgIH0KICAgICBpZiAobikgewogICAgICAgICBmbGFncy0+Y2ZfZmxhZ3MgfD0gaWZsYWdzICYgUHlDRl9NQVNLOwotICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZShuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKKyAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGVPYmplY3QobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CiAgICAgICAgIFB5Tm9kZV9GcmVlKG4pOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTIxMTYsMjYgKzIzMjQsNDAgQEAKIH0KIAogbW9kX3R5Ci1QeVBhcnNlcl9BU1RGcm9tRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGVuYywKLSAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgY2hhciAqcHMxLAotICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHMyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgKmVycmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK1B5UGFyc2VyX0FTVEZyb21TdHJpbmcoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBtb2RfdHkgbW9kOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KHMsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBtb2Q7Cit9CisKK21vZF90eQorUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoRklMRSAqZnAsIFB5T2JqZWN0ICpmaWxlbmFtZSwgY29uc3QgY2hhciogZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBjaGFyICpwczEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCAqZXJyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQogewogICAgIG1vZF90eSBtb2Q7CiAgICAgUHlDb21waWxlckZsYWdzIGxvY2FsZmxhZ3M7CiAgICAgcGVycmRldGFpbCBlcnI7CiAgICAgaW50IGlmbGFncyA9IFBBUlNFUl9GTEFHUyhmbGFncyk7CiAKLSAgICBub2RlICpuID0gUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeChmcCwgZmlsZW5hbWUsIGVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9QeVBhcnNlcl9HcmFtbWFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBwczEsIHBzMiwgJmVyciwgJmlmbGFncyk7CisgICAgbm9kZSAqbiA9IFB5UGFyc2VyX1BhcnNlRmlsZU9iamVjdChmcCwgZmlsZW5hbWUsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBwczEsIHBzMiwgJmVyciwgJmlmbGFncyk7CiAgICAgaWYgKGZsYWdzID09IE5VTEwpIHsKICAgICAgICAgbG9jYWxmbGFncy5jZl9mbGFncyA9IDA7CiAgICAgICAgIGZsYWdzID0gJmxvY2FsZmxhZ3M7CiAgICAgfQogICAgIGlmIChuKSB7CiAgICAgICAgIGZsYWdzLT5jZl9mbGFncyB8PSBpZmxhZ3MgJiBQeUNGX01BU0s7Ci0gICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlKG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOworICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZU9iamVjdChuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKICAgICAgICAgUHlOb2RlX0ZyZWUobik7CiAgICAgfQogICAgIGVsc2UgewpAQCAtMjE0OCw2ICsyMzcwLDIzIEBACiAgICAgcmV0dXJuIG1vZDsKIH0KIAorbW9kX3R5CitQeVBhcnNlcl9BU1RGcm9tRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBjb25zdCBjaGFyKiBlbmMsCisgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGNoYXIgKnBzMSwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMiwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50ICplcnJjb2RlLAorICAgICAgICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgbW9kX3R5IG1vZDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlT2JqZWN0KGZwLCBmaWxlbmFtZSwgZW5jLCBzdGFydCwgcHMxLCBwczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIGVycmNvZGUsIGFyZW5hKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBtb2Q7Cit9CisKIC8qIFNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIHBhcnNlZmlsZSAtLSByZXR1cm4gbm9kZSBvciBzZXQgZXhjZXB0aW9uICovCiAKIG5vZGUgKgpAQCAtMjQ4NCw2ICsyNzIzLDkgQEAKICAgICBQeU9TX3NldHNpZyhTSUdYRlNaLCBTSUdfSUdOKTsKICNlbmRpZgogICAgIFB5T1NfSW5pdEludGVycnVwdHMoKTsgLyogTWF5IGltcGx5IGluaXRzaWduYWwoKSAqLworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGltcG9ydCBzaWduYWwiKTsKKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvUHl0aG9uL3JhbmRvbS5jIGIvUHl0aG9uL3JhbmRvbS5jCmluZGV4IDMzN2JlODYuLmNkYWNlMDAgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9yYW5kb20uYworKysgYi9QeXRob24vcmFuZG9tLmMKQEAgLTEyLDEzICsxMiw2IEBACiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLXR5cGVkZWYgQk9PTCAoV0lOQVBJICpDUllQVEFDUVVJUkVDT05URVhUQSkoSENSWVBUUFJPViAqcGhQcm92LFwKLSAgICAgICAgICAgICAgTFBDU1RSIHBzekNvbnRhaW5lciwgTFBDU1RSIHBzelByb3ZpZGVyLCBEV09SRCBkd1Byb3ZUeXBlLFwKLSAgICAgICAgICAgICAgRFdPUkQgZHdGbGFncyApOwotdHlwZWRlZiBCT09MIChXSU5BUEkgKkNSWVBUR0VOUkFORE9NKShIQ1JZUFRQUk9WIGhQcm92LCBEV09SRCBkd0xlbixcCi0gICAgICAgICAgICAgIEJZVEUgKnBiQnVmZmVyICk7Ci0KLXN0YXRpYyBDUllQVEdFTlJBTkRPTSBwQ3J5cHRHZW5SYW5kb20gPSBOVUxMOwogLyogVGhpcyBoYW5kbGUgaXMgbmV2ZXIgZXhwbGljaXRseSByZWxlYXNlZC4gSW5zdGVhZCwgdGhlIG9wZXJhdGluZwogICAgc3lzdGVtIHdpbGwgcmVsZWFzZSBpdCB3aGVuIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuICovCiBzdGF0aWMgSENSWVBUUFJPViBoQ3J5cHRQcm92ID0gMDsKQEAgLTI2LDI5ICsxOSw5IEBACiBzdGF0aWMgaW50CiB3aW4zMl91cmFuZG9tX2luaXQoaW50IHJhaXNlKQogewotICAgIEhJTlNUQU5DRSBoQWR2QVBJMzIgPSBOVUxMOwotICAgIENSWVBUQUNRVUlSRUNPTlRFWFRBIHBDcnlwdEFjcXVpcmVDb250ZXh0ID0gTlVMTDsKLQotICAgIC8qIE9idGFpbiBoYW5kbGUgdG8gdGhlIERMTCBjb250YWluaW5nIENyeXB0b0FQSS4gVGhpcyBzaG91bGQgbm90IGZhaWwuICovCi0gICAgaEFkdkFQSTMyID0gR2V0TW9kdWxlSGFuZGxlKCJhZHZhcGkzMi5kbGwiKTsKLSAgICBpZihoQWR2QVBJMzIgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLQotICAgIC8qIE9idGFpbiBwb2ludGVycyB0byB0aGUgQ3J5cHRvQVBJIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGZhaWwgb24gc29tZSBlYXJseQotICAgICAgIHZlcnNpb25zIG9mIFdpbjk1LiAqLwotICAgIHBDcnlwdEFjcXVpcmVDb250ZXh0ID0gKENSWVBUQUNRVUlSRUNPTlRFWFRBKUdldFByb2NBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhBZHZBUEkzMiwgIkNyeXB0QWNxdWlyZUNvbnRleHRBIik7Ci0gICAgaWYgKHBDcnlwdEFjcXVpcmVDb250ZXh0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICBwQ3J5cHRHZW5SYW5kb20gPSAoQ1JZUFRHRU5SQU5ET00pR2V0UHJvY0FkZHJlc3MoaEFkdkFQSTMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ3J5cHRHZW5SYW5kb20iKTsKLSAgICBpZiAocENyeXB0R2VuUmFuZG9tID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KICAgICAvKiBBY3F1aXJlIGNvbnRleHQgKi8KLSAgICBpZiAoISBwQ3J5cHRBY3F1aXJlQ29udGV4dCgmaENyeXB0UHJvdiwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WX1JTQV9GVUxMLCBDUllQVF9WRVJJRllDT05URVhUKSkKKyAgICBpZiAoIUNyeXB0QWNxdWlyZUNvbnRleHQoJmhDcnlwdFByb3YsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1ZfUlNBX0ZVTEwsIENSWVBUX1ZFUklGWUNPTlRFWFQpKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgcmV0dXJuIDA7CkBAIC03Nyw3ICs1MCw3IEBACiAgICAgd2hpbGUgKHNpemUgPiAwKQogICAgIHsKICAgICAgICAgY2h1bmsgPSBzaXplID4gSU5UX01BWCA/IElOVF9NQVggOiBzaXplOwotICAgICAgICBpZiAoIXBDcnlwdEdlblJhbmRvbShoQ3J5cHRQcm92LCBjaHVuaywgYnVmZmVyKSkKKyAgICAgICAgaWYgKCFDcnlwdEdlblJhbmRvbShoQ3J5cHRQcm92LCAoRFdPUkQpY2h1bmssIGJ1ZmZlcikpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIENyeXB0R2VuUmFuZG9tKCkgZmFpbGVkICovCiAgICAgICAgICAgICBpZiAocmFpc2UpCkBAIC05NSw0MCArNjgsMjAgQEAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIAotI2lmZGVmIF9fVk1TCi0vKiBVc2Ugb3BlbnNzbCByYW5kb20gcm91dGluZSAqLwotI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotc3RhdGljIGludAotdm1zX3VyYW5kb20odW5zaWduZWQgY2hhciAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUsIGludCByYWlzZSkKLXsKLSAgICBpZiAoUkFORF9wc2V1ZG9fYnl0ZXMoYnVmZmVyLCBzaXplKSA8IDApIHsKLSAgICAgICAgaWYgKHJhaXNlKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiUkFORF9wc2V1ZG9fYnl0ZXMiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIHRoZSByYW5kb21pemVkIGhhc2ggIgotICAgICAgICAgICAgICAgICAgICAgICAgICAic2VjcmV0IHVzaW5nIFJBTkRfcHNldWRvX2J5dGVzIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBfX1ZNUyAqLwotCi0KLSNpZiAhZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChfX1ZNUykKKyNpZm5kZWYgTVNfV0lORE9XUworc3RhdGljIGludCB1cmFuZG9tX2ZkID0gLTE7CiAKIC8qIFJlYWQgc2l6ZSBieXRlcyBmcm9tIC9kZXYvdXJhbmRvbSBpbnRvIGJ1ZmZlci4KICAgIENhbGwgUHlfRmF0YWxFcnJvcigpIG9uIGVycm9yLiAqLwogc3RhdGljIHZvaWQKLWRldl91cmFuZG9tX25vcmFpc2UoY2hhciAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUpCitkZXZfdXJhbmRvbV9ub3JhaXNlKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplKQogewogICAgIGludCBmZDsKICAgICBQeV9zc2l6ZV90IG47CiAKICAgICBhc3NlcnQgKDAgPCBzaXplKTsKIAotICAgIGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOworICAgIGZkID0gX1B5X29wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJGYWlsZWQgdG8gb3BlbiAvZGV2L3VyYW5kb20iKTsKIApAQCAtMTYwLDE4ICsxMTMsMzAgQEAKICAgICBpZiAoc2l6ZSA8PSAwKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChmZCA8IDApCi0gICAgewotICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOWElPIHx8Ci0gICAgICAgICAgICBlcnJubyA9PSBFTk9ERVYgfHwgZXJybm8gPT0gRUFDQ0VTKQotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9kZXYvdXJhbmRvbSAob3IgZXF1aXZhbGVudCkgbm90IGZvdW5kIik7CisgICAgaWYgKHVyYW5kb21fZmQgPj0gMCkKKyAgICAgICAgZmQgPSB1cmFuZG9tX2ZkOworICAgIGVsc2UgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGZkID0gX1B5X29wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFTlhJTyB8fAorICAgICAgICAgICAgICAgIGVycm5vID09IEVOT0RFViB8fCBlcnJubyA9PSBFQUNDRVMpCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZGV2L3VyYW5kb20gKG9yIGVxdWl2YWxlbnQpIG5vdCBmb3VuZCIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXJhbmRvbV9mZCA+PSAwKSB7CisgICAgICAgICAgICAvKiB1cmFuZG9tX2ZkIHdhcyBpbml0aWFsaXplZCBieSBhbm90aGVyIHRocmVhZCB3aGlsZSB3ZSB3ZXJlCisgICAgICAgICAgICAgICBub3QgaG9sZGluZyB0aGUgR0lMLCBrZWVwIGl0LiAqLworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgZmQgPSB1cmFuZG9tX2ZkOworICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgdXJhbmRvbV9mZCA9IGZkOwogICAgIH0KIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTE5NSwxMyArMTYwLDIxIEBACiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVhZCAlemkgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUpOwotICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgY2xvc2UoZmQpOwogICAgIHJldHVybiAwOwogfQotI2VuZGlmIC8qICFkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKF9fVk1TKSAqLworCitzdGF0aWMgdm9pZAorZGV2X3VyYW5kb21fY2xvc2Uodm9pZCkKK3sKKyAgICBpZiAodXJhbmRvbV9mZCA+PSAwKSB7CisgICAgICAgIGNsb3NlKHVyYW5kb21fZmQpOworICAgICAgICB1cmFuZG9tX2ZkID0gLTE7CisgICAgfQorfQorCisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAvKiBGaWxsIGJ1ZmZlciB3aXRoIHBzZXVkby1yYW5kb20gYnl0ZXMgZ2VuZXJhdGVkIGJ5IGEgbGluZWFyIGNvbmdydWVudAogICAgZ2VuZXJhdG9yIChMQ0cpOgpAQCAtMjQzLDExICsyMTYsNyBAQAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICByZXR1cm4gd2luMzJfdXJhbmRvbSgodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgc2l6ZSwgMSk7CiAjZWxzZQotIyBpZmRlZiBfX1ZNUwotICAgIHJldHVybiB2bXNfdXJhbmRvbSgodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgc2l6ZSwgMSk7Ci0jIGVsc2UKICAgICByZXR1cm4gZGV2X3VyYW5kb21fcHl0aG9uKChjaGFyKilidWZmZXIsIHNpemUpOwotIyBlbmRpZgogI2VuZGlmCiB9CiAKQEAgLTI1NSw4ICsyMjQsOSBAQAogX1B5UmFuZG9tX0luaXQodm9pZCkKIHsKICAgICBjaGFyICplbnY7Ci0gICAgdm9pZCAqc2VjcmV0ID0gJl9QeV9IYXNoU2VjcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKnNlY3JldCA9ICh1bnNpZ25lZCBjaGFyICopJl9QeV9IYXNoU2VjcmV0LnVjOwogICAgIFB5X3NzaXplX3Qgc2VjcmV0X3NpemUgPSBzaXplb2YoX1B5X0hhc2hTZWNyZXRfdCk7CisgICAgYXNzZXJ0KHNlY3JldF9zaXplID09IHNpemVvZihfUHlfSGFzaFNlY3JldC51YykpOwogCiAgICAgaWYgKF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkKQogICAgICAgICByZXR1cm47CkBAIC0yODQsMTggKzI1NCwyMiBAQAogICAgICAgICAgICAgbWVtc2V0KHNlY3JldCwgMCwgc2VjcmV0X3NpemUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgbGNnX3VyYW5kb20oc2VlZCwgKHVuc2lnbmVkIGNoYXIqKXNlY3JldCwgc2VjcmV0X3NpemUpOworICAgICAgICAgICAgbGNnX3VyYW5kb20oc2VlZCwgc2VjcmV0LCBzZWNyZXRfc2l6ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgICAgICAodm9pZCl3aW4zMl91cmFuZG9tKCh1bnNpZ25lZCBjaGFyICopc2VjcmV0LCBzZWNyZXRfc2l6ZSwgMCk7Ci0jZWxzZSAvKiAjaWZkZWYgTVNfV0lORE9XUyAqLwotIyBpZmRlZiBfX1ZNUwotICAgICAgICB2bXNfdXJhbmRvbSgodW5zaWduZWQgY2hhciAqKXNlY3JldCwgc2VjcmV0X3NpemUsIDApOwotIyBlbHNlCi0gICAgICAgIGRldl91cmFuZG9tX25vcmFpc2UoKGNoYXIqKXNlY3JldCwgc2VjcmV0X3NpemUpOwotIyBlbmRpZgorICAgICAgICAodm9pZCl3aW4zMl91cmFuZG9tKHNlY3JldCwgc2VjcmV0X3NpemUsIDApOworI2Vsc2UKKyAgICAgICAgZGV2X3VyYW5kb21fbm9yYWlzZShzZWNyZXQsIHNlY3JldF9zaXplKTsKICNlbmRpZgogICAgIH0KIH0KKwordm9pZAorX1B5UmFuZG9tX0Zpbmkodm9pZCkKK3sKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIGRldl91cmFuZG9tX2Nsb3NlKCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL1B5dGhvbi9zdHJkdXAuYyBiL1B5dGhvbi9zdHJkdXAuYwppbmRleCAyMDE4N2UwLi43NjlkM2RiIDEwMDY0NAotLS0gYS9QeXRob24vc3RyZHVwLmMKKysrIGIvUHl0aG9uL3N0cmR1cC5jCkBAIC02LDcgKzYsNyBAQAogc3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKIHsKIAlpZiAoc3RyICE9IE5VTEwpIHsKLQkJcmVnaXN0ZXIgY2hhciAqY29weSA9IG1hbGxvYyhzdHJsZW4oc3RyKSArIDEpOworCQljaGFyICpjb3B5ID0gbWFsbG9jKHN0cmxlbihzdHIpICsgMSk7CiAJCWlmIChjb3B5ICE9IE5VTEwpCiAJCQlyZXR1cm4gc3RyY3B5KGNvcHksIHN0cik7CiAJfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N5bXRhYmxlLmMgYi9QeXRob24vc3ltdGFibGUuYwppbmRleCAxZTEzYjc5MC4uZGExNjRhYSAxMDA2NDQKLS0tIGEvUHl0aG9uL3N5bXRhYmxlLmMKKysrIGIvUHl0aG9uL3N5bXRhYmxlLmMKQEAgLTM3LDI0ICszNywxNCBAQAogICAgIHN0ZS0+c3RlX3RhYmxlID0gc3Q7CiAgICAgc3RlLT5zdGVfaWQgPSBrOyAvKiBzdGUgb3ducyByZWZlcmVuY2UgdG8gayAqLwogCi0gICAgc3RlLT5zdGVfbmFtZSA9IG5hbWU7CiAgICAgUHlfSU5DUkVGKG5hbWUpOworICAgIHN0ZS0+c3RlX25hbWUgPSBuYW1lOwogCiAgICAgc3RlLT5zdGVfc3ltYm9scyA9IE5VTEw7CiAgICAgc3RlLT5zdGVfdmFybmFtZXMgPSBOVUxMOwogICAgIHN0ZS0+c3RlX2NoaWxkcmVuID0gTlVMTDsKIAotICAgIHN0ZS0+c3RlX3N5bWJvbHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKHN0ZS0+c3RlX3N5bWJvbHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgc3RlLT5zdGVfdmFybmFtZXMgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChzdGUtPnN0ZV92YXJuYW1lcyA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBzdGUtPnN0ZV9jaGlsZHJlbiA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKHN0ZS0+c3RlX2NoaWxkcmVuID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKKyAgICBzdGUtPnN0ZV9kaXJlY3RpdmVzID0gTlVMTDsKIAogICAgIHN0ZS0+c3RlX3R5cGUgPSBibG9jazsKICAgICBzdGUtPnN0ZV91bm9wdGltaXplZCA9IDA7CkBAIC03NSw2ICs2NSwxNSBAQAogICAgIHN0ZS0+c3RlX2NoaWxkX2ZyZWUgPSAwOwogICAgIHN0ZS0+c3RlX2dlbmVyYXRvciA9IDA7CiAgICAgc3RlLT5zdGVfcmV0dXJuc192YWx1ZSA9IDA7CisgICAgc3RlLT5zdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSA9IDA7CisKKyAgICBzdGUtPnN0ZV9zeW1ib2xzID0gUHlEaWN0X05ldygpOworICAgIHN0ZS0+c3RlX3Zhcm5hbWVzID0gUHlMaXN0X05ldygwKTsKKyAgICBzdGUtPnN0ZV9jaGlsZHJlbiA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHN0ZS0+c3RlX3N5bWJvbHMgPT0gTlVMTAorICAgICAgICB8fCBzdGUtPnN0ZV92YXJuYW1lcyA9PSBOVUxMCisgICAgICAgIHx8IHN0ZS0+c3RlX2NoaWxkcmVuID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKIAogICAgIGlmIChQeURpY3RfU2V0SXRlbShzdC0+c3RfYmxvY2tzLCBzdGUtPnN0ZV9pZCwgKFB5T2JqZWN0ICopc3RlKSA8IDApCiAgICAgICAgIGdvdG8gZmFpbDsKQEAgLTEwMiw2ICsxMDEsNyBAQAogICAgIFB5X1hERUNSRUYoc3RlLT5zdGVfc3ltYm9scyk7CiAgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV92YXJuYW1lcyk7CiAgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV9jaGlsZHJlbik7CisgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV9kaXJlY3RpdmVzKTsKICAgICBQeU9iamVjdF9EZWwoc3RlKTsKIH0KIApAQCAtMTg4LDcgKzE4OCw3IEBACiAKIHN0YXRpYyBpZGVudGlmaWVyIHRvcCA9IE5VTEwsIGxhbWJkYSA9IE5VTEwsIGdlbmV4cHIgPSBOVUxMLAogICAgIGxpc3Rjb21wID0gTlVMTCwgc2V0Y29tcCA9IE5VTEwsIGRpY3Rjb21wID0gTlVMTCwKLSAgICBfX2NsYXNzX18gPSBOVUxMLCBfX2xvY2Fsc19fID0gTlVMTDsKKyAgICBfX2NsYXNzX18gPSBOVUxMOwogCiAjZGVmaW5lIEdFVF9JREVOVElGSUVSKFZBUikgXAogICAgICgoVkFSKSA/IChWQVIpIDogKChWQVIpID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIyBWQVIpKSkKQEAgLTIzMyw3ICsyMzMsNyBAQAogI2RlZmluZSBDT01QSUxFUl9TVEFDS19GUkFNRV9TQ0FMRSAzCiAKIHN0cnVjdCBzeW10YWJsZSAqCi1QeVN5bXRhYmxlX0J1aWxkKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpCitQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlGdXR1cmVGZWF0dXJlcyAqZnV0dXJlKQogewogICAgIHN0cnVjdCBzeW10YWJsZSAqc3QgPSBzeW10YWJsZV9uZXcoKTsKICAgICBhc2RsX3NlcSAqc2VxOwpAQCAtMjQyLDcgKzI0MiwxMiBAQAogICAgIGludCByZWN1cnNpb25fbGltaXQgPSBQeV9HZXRSZWN1cnNpb25MaW1pdCgpOwogCiAgICAgaWYgKHN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBzdDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlTeW10YWJsZV9GcmVlKHN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CiAgICAgc3QtPnN0X2ZpbGVuYW1lID0gZmlsZW5hbWU7CiAgICAgc3QtPnN0X2Z1dHVyZSA9IGZ1dHVyZTsKIApAQCAtMzA2LDkgKzMxMSwyMyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitzdHJ1Y3Qgc3ltdGFibGUgKgorUHlTeW10YWJsZV9CdWlsZChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgc3RydWN0IHN5bXRhYmxlICpzdDsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3QgPSBQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGZ1dHVyZSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gc3Q7Cit9CisKIHZvaWQKIFB5U3ltdGFibGVfRnJlZShzdHJ1Y3Qgc3ltdGFibGUgKnN0KQogeworICAgIFB5X1hERUNSRUYoc3QtPnN0X2ZpbGVuYW1lKTsKICAgICBQeV9YREVDUkVGKHN0LT5zdF9ibG9ja3MpOwogICAgIFB5X1hERUNSRUYoc3QtPnN0X3N0YWNrKTsKICAgICBQeU1lbV9GcmVlKCh2b2lkICopc3QpOwpAQCAtMzQ2LDYgKzM2NSwyNCBAQAogICAgIHJldHVybiAoUHlMb25nX0FTX0xPTkcodikgPj4gU0NPUEVfT0ZGU0VUKSAmIFNDT1BFX01BU0s7CiB9CiAKK3N0YXRpYyBpbnQKK2Vycm9yX2F0X2RpcmVjdGl2ZShQeVNURW50cnlPYmplY3QgKnN0ZSwgUHlPYmplY3QgKm5hbWUpCit7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5T2JqZWN0ICpkYXRhOworICAgIGFzc2VydChzdGUtPnN0ZV9kaXJlY3RpdmVzKTsKKyAgICBmb3IgKGkgPSAwOyA7IGkrKykgeworICAgICAgICBkYXRhID0gUHlMaXN0X0dFVF9JVEVNKHN0ZS0+c3RlX2RpcmVjdGl2ZXMsIGkpOworICAgICAgICBhc3NlcnQoUHlUdXBsZV9DaGVja0V4YWN0KGRhdGEpKTsKKyAgICAgICAgaWYgKFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMCkgPT0gbmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdGUtPnN0ZV90YWJsZS0+c3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0FzTG9uZyhQeVR1cGxlX0dFVF9JVEVNKGRhdGEsIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nKFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMikpKTsKKyAgICByZXR1cm4gMDsKK30KKwogCiAvKiBBbmFseXplIHJhdyBzeW1ib2wgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHNjb3BlIG9mIGVhY2ggbmFtZS4KIApAQCAtNDIwLDE2ICs0NTcsMTMgQEAKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lICclVScgaXMgcGFyYW1ldGVyIGFuZCBnbG9iYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfbGluZW5vLCBzdGUtPnN0ZV9jb2xfb2Zmc2V0KTsKLQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGZsYWdzICYgREVGX05PTkxPQ0FMKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBub25sb2NhbCBhbmQgZ2xvYmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGVycm9yX2F0X2RpcmVjdGl2ZShzdGUsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIFNFVF9TQ09QRShzY29wZXMsIG5hbWUsIEdMT0JBTF9FWFBMSUNJVCk7CiAgICAgICAgIGlmIChQeVNldF9BZGQoZ2xvYmFsLCBuYW1lKSA8IDApCkBAIC00NDMsMTkgKzQ3NywxOSBAQAogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lICclVScgaXMgcGFyYW1ldGVyIGFuZCBub25sb2NhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9hdF9kaXJlY3RpdmUoc3RlLCBuYW1lKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWJvdW5kKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbmxvY2FsIGRlY2xhcmF0aW9uIG5vdCBhbGxvd2VkIGF0IG1vZHVsZSBsZXZlbCIpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFQeVNldF9Db250YWlucyhib3VuZCwgbmFtZSkpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gYmluZGluZyBmb3Igbm9ubG9jYWwgJyVVJyBmb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGVycm9yX2F0X2RpcmVjdGl2ZShzdGUsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIFNFVF9TQ09QRShzY29wZXMsIG5hbWUsIEZSRUUpOwogICAgICAgICBzdGUtPnN0ZV9mcmVlID0gMTsKQEAgLTUwMCwxMyArNTM0LDEwIEBACiAKICAgIE5vdGUgdGhhdCB0aGUgY3VycmVudCBibG9jaydzIGZyZWUgdmFyaWFibGVzIGFyZSBpbmNsdWRlZCBpbiBmcmVlLgogICAgVGhhdCdzIHNhZmUgYmVjYXVzZSBubyBuYW1lIGNhbiBiZSBmcmVlIGFuZCBsb2NhbCBpbiB0aGUgc2FtZSBzY29wZS4KLQotICAgVGhlICdyZXN0cmljdGVkJyBhcmd1bWVudCBtYXkgYmUgc2V0IHRvIGEgc3RyaW5nIHRvIHJlc3RyaWN0IHRoZSBhbmFseXNpcwotICAgdG8gdGhlIG9uZSB2YXJpYWJsZSB3aG9zZSBuYW1lIGVxdWFscyB0aGF0IHN0cmluZyAoZS5nLiAiX19jbGFzc19fIikuCiAqLwogCiBzdGF0aWMgaW50Ci1hbmFseXplX2NlbGxzKFB5T2JqZWN0ICpzY29wZXMsIFB5T2JqZWN0ICpmcmVlLCBjb25zdCBjaGFyICpyZXN0cmljdGVkKQorYW5hbHl6ZV9jZWxscyhQeU9iamVjdCAqc2NvcGVzLCBQeU9iamVjdCAqZnJlZSkKIHsKICAgICBQeU9iamVjdCAqbmFtZSwgKnYsICp2X2NlbGw7CiAgICAgaW50IHN1Y2Nlc3MgPSAwOwpAQCAtNTIzLDkgKzU1NCw2IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFQeVNldF9Db250YWlucyhmcmVlLCBuYW1lKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocmVzdHJpY3RlZCAhPSBOVUxMICYmCi0gICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCByZXN0cmljdGVkKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvKiBSZXBsYWNlIExPQ0FMIHdpdGggQ0VMTCBmb3IgdGhpcyBuYW1lLCBhbmQgcmVtb3ZlCiAgICAgICAgICAgIGZyb20gZnJlZS4gSXQgaXMgc2FmZSB0byByZXBsYWNlIHRoZSB2YWx1ZSBvZiBuYW1lCiAgICAgICAgICAgIGluIHRoZSBkaWN0LCBiZWNhdXNlIGl0IHdpbGwgbm90IGNhdXNlIGEgcmVzaXplLgpAQCAtNTQxLDYgKzU2OSwyMCBAQAogICAgIHJldHVybiBzdWNjZXNzOwogfQogCitzdGF0aWMgaW50Citkcm9wX2NsYXNzX2ZyZWUoUHlTVEVudHJ5T2JqZWN0ICpzdGUsIFB5T2JqZWN0ICpmcmVlKQoreworICAgIGludCByZXM7CisgICAgaWYgKCFHRVRfSURFTlRJRklFUihfX2NsYXNzX18pKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXMgPSBQeVNldF9EaXNjYXJkKGZyZWUsIF9fY2xhc3NfXyk7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChyZXMpCisgICAgICAgIHN0ZS0+c3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUgPSAxOworICAgIHJldHVybiAxOworfQorCiAvKiBDaGVjayBmb3IgaWxsZWdhbCBzdGF0ZW1lbnRzIGluIHVub3B0aW1pemVkIG5hbWVzcGFjZXMgKi8KIHN0YXRpYyBpbnQKIGNoZWNrX3Vub3B0aW1pemVkKGNvbnN0IFB5U1RFbnRyeU9iamVjdCogc3RlKSB7CkBAIC01NjQsOCArNjA2LDkgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdGUtPnN0ZV90YWJsZS0+c3RfZmlsZW5hbWUsIHN0ZS0+c3RlX29wdF9saW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGUtPnN0ZV9vcHRfY29sX29mZnNldCk7CisgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3RlLT5zdGVfdGFibGUtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZS0+c3RlX29wdF9saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfb3B0X2NvbF9vZmZzZXQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC03NzEsNyArODE0LDYgQEAKICAgICAgICAgLyogU3BlY2lhbC1jYXNlIF9fY2xhc3NfXyAqLwogICAgICAgICBpZiAoIUdFVF9JREVOVElGSUVSKF9fY2xhc3NfXykpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBhc3NlcnQoUHlTZXRfQ29udGFpbnMobG9jYWwsIF9fY2xhc3NfXykgPT0gMSk7CiAgICAgICAgIGlmIChQeVNldF9BZGQobmV3Ym91bmQsIF9fY2xhc3NfXykgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CkBAIC04MDQsMTEgKzg0Niw5IEBACiAgICAgUHlfREVDUkVGKHRlbXApOwogCiAgICAgLyogQ2hlY2sgaWYgYW55IGxvY2FsIHZhcmlhYmxlcyBtdXN0IGJlIGNvbnZlcnRlZCB0byBjZWxsIHZhcmlhYmxlcyAqLwotICAgIGlmIChzdGUtPnN0ZV90eXBlID09IEZ1bmN0aW9uQmxvY2sgJiYgIWFuYWx5emVfY2VsbHMoc2NvcGVzLCBuZXdmcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCisgICAgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gRnVuY3Rpb25CbG9jayAmJiAhYW5hbHl6ZV9jZWxscyhzY29wZXMsIG5ld2ZyZWUpKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIGVsc2UgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jayAmJiAhYW5hbHl6ZV9jZWxscyhzY29wZXMsIG5ld2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18iKSkKKyAgICBlbHNlIGlmIChzdGUtPnN0ZV90eXBlID09IENsYXNzQmxvY2sgJiYgIWRyb3BfY2xhc3NfZnJlZShzdGUsIG5ld2ZyZWUpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIC8qIFJlY29yZHMgdGhlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzIGluIHRoZSBzeW1ib2wgdGFibGUgZW50cnkgKi8KICAgICBpZiAoIXVwZGF0ZV9zeW1ib2xzKHN0ZS0+c3RlX3N5bWJvbHMsIHNjb3BlcywgYm91bmQsIG5ld2ZyZWUsCkBAIC04OTksMTUgKzkzOSwyMCBAQAogc3RhdGljIGludAogc3ltdGFibGVfd2FybihzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBjaGFyICptc2csIGludCBsaW5lbm8pCiB7Ci0gICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdChQeUV4Y19TeW50YXhXYXJuaW5nLCBtc2csIHN0LT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgTlVMTCwgTlVMTCkgPCAwKSAgICAgeworICAgIFB5T2JqZWN0ICptZXNzYWdlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobXNnKTsKKyAgICBpZiAobWVzc2FnZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1lc3NhZ2UsIHN0LT5zdF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgTlVMTCwgTlVMTCkgPCAwKSAgICAgeworICAgICAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N5bnRheFdhcm5pbmcpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsIG1zZyk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0LT5zdF9maWxlbmFtZSwgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLCBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTk5MCw5ICsxMDM1LDkgQEAKICAgICAgICAgaWYgKChmbGFnICYgREVGX1BBUkFNKSAmJiAodmFsICYgREVGX1BBUkFNKSkgewogICAgICAgICAgICAgLyogSXMgaXQgYmV0dGVyIHRvIHVzZSAnbWFuZ2xlZCcgb3IgJ25hbWUnIGhlcmU/ICovCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsIERVUExJQ0FURV9BUkdVTUVOVCwgbmFtZSk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0LT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LT5zdF9jdXItPnN0ZV9jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgdmFsIHw9IGZsYWc7CkBAIC0xMTAyLDYgKzExNDcsMjUgQEAKIAogCiBzdGF0aWMgaW50CitzeW10YWJsZV9yZWNvcmRfZGlyZWN0aXZlKHN0cnVjdCBzeW10YWJsZSAqc3QsIGlkZW50aWZpZXIgbmFtZSwgc3RtdF90eSBzKQoreworICAgIFB5T2JqZWN0ICpkYXRhOworICAgIGludCByZXM7CisgICAgaWYgKCFzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcykgeworICAgICAgICBzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgICAgIGlmICghc3QtPnN0X2N1ci0+c3RlX2RpcmVjdGl2ZXMpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZGF0YSA9IFB5X0J1aWxkVmFsdWUoIihPaWkpIiwgbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJlcyA9IFB5TGlzdF9BcHBlbmQoc3QtPnN0X2N1ci0+c3RlX2RpcmVjdGl2ZXMsIGRhdGEpOworICAgIFB5X0RFQ1JFRihkYXRhKTsKKyAgICByZXR1cm4gcmVzID09IDA7Cit9CisKKworc3RhdGljIGludAogc3ltdGFibGVfdmlzaXRfc3RtdChzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBzdG10X3R5IHMpCiB7CiAgICAgaWYgKCsrc3QtPnJlY3Vyc2lvbl9kZXB0aCA+IHN0LT5yZWN1cnNpb25fbGltaXQpIHsKQEAgLTExNDYsMTMgKzEyMTAsNiBAQAogICAgICAgICBpZiAoIXN5bXRhYmxlX2VudGVyX2Jsb2NrKHN0LCBzLT52LkNsYXNzRGVmLm5hbWUsIENsYXNzQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilzLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpKQogICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7Ci0gICAgICAgIGlmICghR0VUX0lERU5USUZJRVIoX19jbGFzc19fKSB8fAotICAgICAgICAgICAgIXN5bXRhYmxlX2FkZF9kZWYoc3QsIF9fY2xhc3NfXywgREVGX0xPQ0FMKSB8fAotICAgICAgICAgICAgIUdFVF9JREVOVElGSUVSKF9fbG9jYWxzX18pIHx8Ci0gICAgICAgICAgICAhc3ltdGFibGVfYWRkX2RlZihzdCwgX19sb2NhbHNfXywgREVGX1BBUkFNKSkgewotICAgICAgICAgICAgc3ltdGFibGVfZXhpdF9ibG9jayhzdCwgcyk7Ci0gICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKLSAgICAgICAgfQogICAgICAgICB0bXAgPSBzdC0+c3RfcHJpdmF0ZTsKICAgICAgICAgc3QtPnN0X3ByaXZhdGUgPSBzLT52LkNsYXNzRGVmLm5hbWU7CiAgICAgICAgIFZJU0lUX1NFUShzdCwgc3RtdCwgcy0+di5DbGFzc0RlZi5ib2R5KTsKQEAgLTEyNDAsMTQgKzEyOTcsNyBAQAogICAgICAgICBhc2RsX3NlcSAqc2VxID0gcy0+di5HbG9iYWwubmFtZXM7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhc2RsX3NlcV9MRU4oc2VxKTsgaSsrKSB7CiAgICAgICAgICAgICBpZGVudGlmaWVyIG5hbWUgPSAoaWRlbnRpZmllcilhc2RsX3NlcV9HRVQoc2VxLCBpKTsKLSAgICAgICAgICAgIGxvbmcgY3VyOwotICAgICAgICAgICAgaWYgKHN0LT5zdF9jdXItPnN0ZV90eXBlID09IENsYXNzQmxvY2sgJiYKLSAgICAgICAgICAgICAgICAhUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIl9fY2xhc3NfXyIpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLCAiY2Fubm90IG1ha2UgX19jbGFzc19fIGdsb2JhbCIpOwotICAgICAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyID0gc3ltdGFibGVfbG9va3VwKHN0LCBuYW1lKTsKKyAgICAgICAgICAgIGxvbmcgY3VyID0gc3ltdGFibGVfbG9va3VwKHN0LCBuYW1lKTsKICAgICAgICAgICAgIGlmIChjdXIgPCAwKQogICAgICAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOwogICAgICAgICAgICAgaWYgKGN1ciAmIChERUZfTE9DQUwgfCBVU0UpKSB7CkBAIC0xMjY4LDYgKzEzMTgsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBuYW1lLCBERUZfR0xPQkFMKSkKICAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKKyAgICAgICAgICAgIGlmICghc3ltdGFibGVfcmVjb3JkX2RpcmVjdGl2ZShzdCwgbmFtZSwgcykpCisgICAgICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5Nyw2ICsxMzQ5LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgbmFtZSwgREVGX05PTkxPQ0FMKSkKICAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKKyAgICAgICAgICAgIGlmICghc3ltdGFibGVfcmVjb3JkX2RpcmVjdGl2ZShzdCwgbmFtZSwgcykpCisgICAgICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQwNyw2ICsxNDYxLDcgQEAKICAgICBjYXNlIFN0cl9raW5kOgogICAgIGNhc2UgQnl0ZXNfa2luZDoKICAgICBjYXNlIEVsbGlwc2lzX2tpbmQ6CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKICAgICAgICAgLyogTm90aGluZyB0byBkbyBoZXJlLiAqLwogICAgICAgICBicmVhazsKICAgICAvKiBUaGUgZm9sbG93aW5nIGV4cHJzIGNhbiBiZSBhc3NpZ25tZW50IHRhcmdldHMuICovCkBAIC0xNDk5LDEwICsxNTU0LDEwIEBACiAKICAgICBpZiAoYS0+YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfYXJnYW5ub3RhdGlvbnMoc3QsIGEtPmFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoYS0+dmFyYXJnYW5ub3RhdGlvbikKLSAgICAgICAgVklTSVQoc3QsIGV4cHIsIGEtPnZhcmFyZ2Fubm90YXRpb24pOwotICAgIGlmIChhLT5rd2FyZ2Fubm90YXRpb24pCi0gICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT5rd2FyZ2Fubm90YXRpb24pOworICAgIGlmIChhLT52YXJhcmcgJiYgYS0+dmFyYXJnLT5hbm5vdGF0aW9uKQorICAgICAgICBWSVNJVChzdCwgZXhwciwgYS0+dmFyYXJnLT5hbm5vdGF0aW9uKTsKKyAgICBpZiAoYS0+a3dhcmcgJiYgYS0+a3dhcmctPmFubm90YXRpb24pCisgICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT5rd2FyZy0+YW5ub3RhdGlvbik7CiAgICAgaWYgKGEtPmt3b25seWFyZ3MgJiYgIXN5bXRhYmxlX3Zpc2l0X2FyZ2Fubm90YXRpb25zKHN0LCBhLT5rd29ubHlhcmdzKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHMtPnYuRnVuY3Rpb25EZWYucmV0dXJucykKQEAgLTE1MjEsMTIgKzE1NzYsMTIgQEAKICAgICBpZiAoYS0+a3dvbmx5YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfcGFyYW1zKHN0LCBhLT5rd29ubHlhcmdzKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGEtPnZhcmFyZykgewotICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPnZhcmFyZywgREVGX1BBUkFNKSkKKyAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBhLT52YXJhcmctPmFyZywgREVGX1BBUkFNKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzdC0+c3RfY3VyLT5zdGVfdmFyYXJncyA9IDE7CiAgICAgfQogICAgIGlmIChhLT5rd2FyZykgewotICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPmt3YXJnLCBERUZfUEFSQU0pKQorICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPmt3YXJnLT5hcmcsIERFRl9QQVJBTSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX3ZhcmtleXdvcmRzID0gMTsKICAgICB9CkBAIC0xNTg3LDcgKzE2NDIsNyBAQAogICAgICAgICAgICAgaW50IGxpbmVubyA9IHN0LT5zdF9jdXItPnN0ZV9saW5lbm87CiAgICAgICAgICAgICBpbnQgY29sX29mZnNldCA9IHN0LT5zdF9jdXItPnN0ZV9jb2xfb2Zmc2V0OwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLCBJTVBPUlRfU1RBUl9XQVJOSU5HKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBsaW5lbm8sIGNvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0b3JlX25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9zeXNtb2R1bGUuYyBiL1B5dGhvbi9zeXNtb2R1bGUuYwppbmRleCAyZjcwMGU2Li45ZWMzYmZhIDEwMDY0NAotLS0gYS9QeXRob24vc3lzbW9kdWxlLmMKKysrIGIvUHl0aG9uL3N5c21vZHVsZS5jCkBAIC0zMiwxNSArMzIsMzEgQEAKIGV4dGVybiBjb25zdCBjaGFyICpQeVdpbl9ETExWZXJzaW9uU3RyaW5nOwogI2VuZGlmCiAKLSNpZmRlZiBfX1ZNUwotI2luY2x1ZGUgPHVuaXhsaWIuaD4KLSNlbmRpZgotCiAjaWZkZWYgSEFWRV9MQU5HSU5GT19ICiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KICNlbmRpZgogCitfUHlfSURFTlRJRklFUihfKTsKK19QeV9JREVOVElGSUVSKF9fc2l6ZW9mX18pOworX1B5X0lERU5USUZJRVIoYnVmZmVyKTsKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKK19QeV9JREVOVElGSUVSKGVuY29kaW5nKTsKK19QeV9JREVOVElGSUVSKHBhdGgpOworX1B5X0lERU5USUZJRVIoc3Rkb3V0KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CitfUHlfSURFTlRJRklFUih3cml0ZSk7CisKK1B5T2JqZWN0ICoKK19QeVN5c19HZXRPYmplY3RJZChfUHlfSWRlbnRpZmllciAqa2V5KQoreworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgUHlPYmplY3QgKnNkID0gdHN0YXRlLT5pbnRlcnAtPnN5c2RpY3Q7CisgICAgaWYgKHNkID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlEaWN0X0dldEl0ZW1JZChzZCwga2V5KTsKK30KKwogUHlPYmplY3QgKgogUHlTeXNfR2V0T2JqZWN0KGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC01Miw2ICs2OCwyMSBAQAogfQogCiBpbnQKK19QeVN5c19TZXRPYmplY3RJZChfUHlfSWRlbnRpZmllciAqa2V5LCBQeU9iamVjdCAqdikKK3sKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5T2JqZWN0ICpzZCA9IHRzdGF0ZS0+aW50ZXJwLT5zeXNkaWN0OworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKHNkLCBrZXkpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIF9QeURpY3RfRGVsSXRlbUlkKHNkLCBrZXkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBfUHlEaWN0X1NldEl0ZW1JZChzZCwga2V5LCB2KTsKK30KKworaW50CiBQeVN5c19TZXRPYmplY3QoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKnYpCiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKQEAgLTc5LDggKzExMCw2IEBACiAgICAgUHlPYmplY3QgKmVuY29kZWQsICplc2NhcGVkX3N0ciwgKnJlcHJfc3RyLCAqYnVmZmVyLCAqcmVzdWx0OwogICAgIGNoYXIgKnN0ZG91dF9lbmNvZGluZ19zdHI7CiAgICAgaW50IHJldDsKLSAgICBfUHlfSURFTlRJRklFUihlbmNvZGluZyk7Ci0gICAgX1B5X0lERU5USUZJRVIoYnVmZmVyKTsKIAogICAgIHN0ZG91dF9lbmNvZGluZyA9IF9QeU9iamVjdF9HZXRBdHRySWQob3V0ZiwgJlB5SWRfZW5jb2RpbmcpOwogICAgIGlmIChzdGRvdXRfZW5jb2RpbmcgPT0gTlVMTCkKQEAgLTEwMSw3ICsxMzAsNiBAQAogCiAgICAgYnVmZmVyID0gX1B5T2JqZWN0X0dldEF0dHJJZChvdXRmLCAmUHlJZF9idWZmZXIpOwogICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIod3JpdGUpOwogICAgICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGJ1ZmZlciwgJlB5SWRfd3JpdGUsICIoTykiLCBlbmNvZGVkKTsKICAgICAgICAgUHlfREVDUkVGKGJ1ZmZlcik7CiAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKQEAgLTEzNywxMCArMTY1LDExIEBACiAgICAgUHlPYmplY3QgKm91dGY7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CiAgICAgUHlPYmplY3QgKm1vZHVsZXMgPSBpbnRlcnAtPm1vZHVsZXM7Ci0gICAgUHlPYmplY3QgKmJ1aWx0aW5zID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIik7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIHN0YXRpYyBQeU9iamVjdCAqbmV3bGluZSA9IE5VTEw7CiAgICAgaW50IGVycjsKLSAgICBfUHlfSURFTlRJRklFUihfKTsKIAorICAgIGJ1aWx0aW5zID0gX1B5RGljdF9HZXRJdGVtSWQobW9kdWxlcywgJlB5SWRfYnVpbHRpbnMpOwogICAgIGlmIChidWlsdGlucyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IGJ1aWx0aW5zIG1vZHVsZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE1NSw3ICsxODQsNyBAQAogICAgIH0KICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChidWlsdGlucywgJlB5SWRfXywgUHlfTm9uZSkgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgb3V0ZiA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7CisgICAgb3V0ZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOwogICAgIGlmIChvdXRmID09IE5VTEwgfHwgb3V0ZiA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IHN5cy5zdGRvdXQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzMsNyArMjAyLDEyIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIG91dGYpICE9IDApCisgICAgaWYgKG5ld2xpbmUgPT0gTlVMTCkgeworICAgICAgICBuZXdsaW5lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIlxuIik7CisgICAgICAgIGlmIChuZXdsaW5lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChuZXdsaW5lLCBvdXRmLCBQeV9QUklOVF9SQVcpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKGJ1aWx0aW5zLCAmUHlJZF9fLCBvKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMyOSwxNSArMzYzLDE5IEBACiAKIAogc3RhdGljIFB5T2JqZWN0ICoKLWNhbGxfdHJhbXBvbGluZShQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5T2JqZWN0KiBjYWxsYmFjaywKK2NhbGxfdHJhbXBvbGluZShQeU9iamVjdCogY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqZnJhbWUsIGludCB3aGF0LCBQeU9iamVjdCAqYXJnKQogewotICAgIFB5T2JqZWN0ICphcmdzID0gUHlUdXBsZV9OZXcoMyk7CisgICAgUHlPYmplY3QgKmFyZ3M7CiAgICAgUHlPYmplY3QgKndoYXRzdHI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAorICAgIGFyZ3MgPSBQeVR1cGxlX05ldygzKTsKICAgICBpZiAoYXJncyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZnJhbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBQeV9JTkNSRUYoZnJhbWUpOwogICAgIHdoYXRzdHIgPSB3aGF0c3RyaW5nc1t3aGF0XTsKICAgICBQeV9JTkNSRUYod2hhdHN0cik7CkBAIC0zNDksNyArMzg3LDYgQEAKICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDIsIGFyZyk7CiAKICAgICAvKiBjYWxsIHRoZSBQeXRob24tbGV2ZWwgZnVuY3Rpb24gKi8KLSAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhmcmFtZSk7CiAgICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoY2FsbGJhY2ssIGFyZ3MpOwogICAgIFB5RnJhbWVfTG9jYWxzVG9GYXN0KGZyYW1lLCAxKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCkBAIC0zNjQsMTIgKzQwMSwxMSBAQAogcHJvZmlsZV90cmFtcG9saW5lKFB5T2JqZWN0ICpzZWxmLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKICAgICAgICAgICAgICAgICAgICBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogICAgIGlmIChhcmcgPT0gTlVMTCkKICAgICAgICAgYXJnID0gUHlfTm9uZTsKLSAgICByZXN1bHQgPSBjYWxsX3RyYW1wb2xpbmUodHN0YXRlLCBzZWxmLCBmcmFtZSwgd2hhdCwgYXJnKTsKKyAgICByZXN1bHQgPSBjYWxsX3RyYW1wb2xpbmUoc2VsZiwgZnJhbWUsIHdoYXQsIGFyZyk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXZhbF9TZXRQcm9maWxlKE5VTEwsIE5VTEwpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0zODIsNyArNDE4LDYgQEAKIHRyYWNlX3RyYW1wb2xpbmUoUHlPYmplY3QgKnNlbGYsIFB5RnJhbWVPYmplY3QgKmZyYW1lLAogICAgICAgICAgICAgICAgICBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CiAgICAgUHlPYmplY3QgKmNhbGxiYWNrOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKQEAgLTM5Miw3ICs0MjcsNyBAQAogICAgICAgICBjYWxsYmFjayA9IGZyYW1lLT5mX3RyYWNlOwogICAgIGlmIChjYWxsYmFjayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXN1bHQgPSBjYWxsX3RyYW1wb2xpbmUodHN0YXRlLCBjYWxsYmFjaywgZnJhbWUsIHdoYXQsIGFyZyk7CisgICAgcmVzdWx0ID0gY2FsbF90cmFtcG9saW5lKGNhbGxiYWNrLCBmcmFtZSwgd2hhdCwgYXJnKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKICAgICAgICAgUHlFdmFsX1NldFRyYWNlKE5VTEwsIE5VTEwpOwogICAgICAgICBQeV9DTEVBUihmcmFtZS0+Zl90cmFjZSk7CkBAIC02MTYsNyArNjUxLDcgQEAKICJoYXNoX2luZm9cblwKIFxuXAogQSBzdHJ1Y3Qgc2VxdWVuY2UgcHJvdmlkaW5nIHBhcmFtZXRlcnMgdXNlZCBmb3IgY29tcHV0aW5nXG5cCi1udW1lcmljIGhhc2hlcy4gIFRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkIG9ubHkuIik7CitoYXNoZXMuIFRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkIG9ubHkuIik7CiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIGhhc2hfaW5mb19maWVsZHNbXSA9IHsKICAgICB7IndpZHRoIiwgIndpZHRoIG9mIHRoZSB0eXBlIHVzZWQgZm9yIGhhc2hpbmcsIGluIGJpdHMifSwKQEAgLTYyNSw2ICs2NjAsMTEgQEAKICAgICB7ImluZiIsICJ2YWx1ZSB0byBiZSB1c2VkIGZvciBoYXNoIG9mIGEgcG9zaXRpdmUgaW5maW5pdHkifSwKICAgICB7Im5hbiIsICJ2YWx1ZSB0byBiZSB1c2VkIGZvciBoYXNoIG9mIGEgbmFuIn0sCiAgICAgeyJpbWFnIiwgIm11bHRpcGxpZXIgdXNlZCBmb3IgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIifSwKKyAgICB7ImFsZ29yaXRobSIsICJuYW1lIG9mIHRoZSBhbGdvcml0aG0gZm9yIGhhc2hpbmcgb2Ygc3RyLCBieXRlcyBhbmQgIgorICAgICAgICAgICAgICAgICAgIm1lbW9yeXZpZXdzIn0sCisgICAgeyJoYXNoX2JpdHMiLCAiaW50ZXJuYWwgb3V0cHV0IHNpemUgb2YgaGFzaCBhbGdvcml0aG0ifSwKKyAgICB7InNlZWRfYml0cyIsICJzZWVkIHNpemUgb2YgaGFzaCBhbGdvcml0aG0ifSwKKyAgICB7ImN1dG9mZiIsICJzbWFsbCBzdHJpbmcgb3B0aW1pemF0aW9uIGN1dG9mZiJ9LAogICAgIHtOVUxMLCBOVUxMfQogfTsKIApAQCAtNjMyLDcgKzY3Miw3IEBACiAgICAgInN5cy5oYXNoX2luZm8iLAogICAgIGhhc2hfaW5mb19kb2MsCiAgICAgaGFzaF9pbmZvX2ZpZWxkcywKLSAgICA1LAorICAgIDksCiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNjQwLDkgKzY4MCwxMSBAQAogewogICAgIFB5T2JqZWN0ICpoYXNoX2luZm87CiAgICAgaW50IGZpZWxkID0gMDsKKyAgICBQeUhhc2hfRnVuY0RlZiAqaGFzaGZ1bmM7CiAgICAgaGFzaF9pbmZvID0gUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcoJkhhc2hfSW5mb1R5cGUpOwogICAgIGlmIChoYXNoX2luZm8gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaGFzaGZ1bmMgPSBQeUhhc2hfR2V0RnVuY0RlZigpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKDgqc2l6ZW9mKFB5X2hhc2hfdCkpKTsKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKQEAgLTY1Myw2ICs2OTUsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhfUHlIQVNIX05BTikpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKF9QeUhBU0hfSU1BRykpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoaGFzaGZ1bmMtPm5hbWUpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhoYXNoZnVuYy0+aGFzaF9iaXRzKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoaGFzaGZ1bmMtPnNlZWRfYml0cykpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKFB5X0hBU0hfQ1VUT0ZGKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfQ0xFQVIoaGFzaF9pbmZvKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03NzcsNyArODI3LDcgQEAKIGludGVycHJldGVyIGxvYWRzIGV4dGVuc2lvbiBtb2R1bGVzLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHdpbGwgZW5hYmxlXG5cCiBhIGxhenkgcmVzb2x2aW5nIG9mIHN5bWJvbHMgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUsIGlmIGNhbGxlZCBhc1xuXAogc3lzLnNldGRsb3BlbmZsYWdzKDApLiAgVG8gc2hhcmUgc3ltYm9scyBhY3Jvc3MgZXh0ZW5zaW9uIG1vZHVsZXMsIGNhbGwgYXNcblwKLXN5cy5zZXRkbG9wZW5mbGFncyhjdHlwZXMuUlRMRF9HTE9CQUwpLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIG1vZHVsZXNcblwKK3N5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTCkuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgbW9kdWxlc1xuXAogY2FuIGJlIGZvdW5kIGluIHRoZSBvcyBtb2R1bGUgKFJUTERfeHh4IGNvbnN0YW50cywgZS5nLiBvcy5SVExEX0xBWlkpLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzkzLDcgKzg0Myw3IEBACiAiZ2V0ZGxvcGVuZmxhZ3MoKSAtPiBpbnRcblwKIFxuXAogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvciBkbG9wZW4gY2FsbHMuXG5cCi1UaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIGN0eXBlcyBhbmQgRExGQ04gbW9kdWxlcy4iKTsKK1RoZSBmbGFnIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB0aGUgb3MgbW9kdWxlLiIpOwogCiAjZW5kaWYgIC8qIEhBVkVfRExPUEVOICovCiAKQEAgLTgyMSw3ICs4NzEsNiBAQAogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqZWN0IiwgImRlZmF1bHQiLCAwfTsKICAgICBQeU9iamVjdCAqbywgKmRmbHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptZXRob2Q7Ci0gICAgX1B5X0lERU5USUZJRVIoX19zaXplb2ZfXyk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOmdldHNpemVvZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbywgJmRmbHQpKQpAQCAtODk3LDYgKzk0NiwxOSBAQAogcmVmZXJlbmNlIGFzIGFuIGFyZ3VtZW50IHRvIGdldHJlZmNvdW50KCkuIgogKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK3N5c19nZXRhbGxvY2F0ZWRibG9ja3MoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKCkpOworfQorCitQeURvY19TVFJWQVIoZ2V0YWxsb2NhdGVkYmxvY2tzX2RvYywKKyJnZXRhbGxvY2F0ZWRibG9ja3MoKSAtPiBpbnRlZ2VyXG5cCitcblwKK1JldHVybiB0aGUgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgY3VycmVudGx5IGFsbG9jYXRlZCwgcmVnYXJkbGVzcyBvZiB0aGVpclxuXAorc2l6ZS4iCispOworCiAjaWZkZWYgQ09VTlRfQUxMT0NTCiBzdGF0aWMgUHlPYmplY3QgKgogc3lzX2dldGNvdW50cyhQeU9iamVjdCAqc2VsZikKQEAgLTEwNjUsNiArMTEyNyw4IEBACiAgICAgeyJnZXRkbG9wZW5mbGFncyIsIChQeUNGdW5jdGlvbilzeXNfZ2V0ZGxvcGVuZmxhZ3MsIE1FVEhfTk9BUkdTLAogICAgICBnZXRkbG9wZW5mbGFnc19kb2N9LAogI2VuZGlmCisgICAgeyJnZXRhbGxvY2F0ZWRibG9ja3MiLCAoUHlDRnVuY3Rpb24pc3lzX2dldGFsbG9jYXRlZGJsb2NrcywgTUVUSF9OT0FSR1MsCisgICAgICBnZXRhbGxvY2F0ZWRibG9ja3NfZG9jfSwKICNpZmRlZiBDT1VOVF9BTExPQ1MKICAgICB7ImdldGNvdW50cyIsICAgICAgIChQeUNGdW5jdGlvbilzeXNfZ2V0Y291bnRzLCBNRVRIX05PQVJHU30sCiAjZW5kaWYKQEAgLTExMTcsNyArMTE4MSw3IEBACiAgICAgeyJzZXR0cmFjZSIsICAgICAgICBzeXNfc2V0dHJhY2UsIE1FVEhfTywgc2V0dHJhY2VfZG9jfSwKICAgICB7ImdldHRyYWNlIiwgICAgICAgIHN5c19nZXR0cmFjZSwgTUVUSF9OT0FSR1MsIGdldHRyYWNlX2RvY30sCiAgICAgeyJjYWxsX3RyYWNpbmciLCBzeXNfY2FsbF90cmFjaW5nLCBNRVRIX1ZBUkFSR1MsIGNhbGxfdHJhY2luZ19kb2N9LAotICAgIHsiX2RlYnVnbWFsbG9jc3RhdHMiLCBzeXNfZGVidWdtYWxsb2NzdGF0cywgTUVUSF9WQVJBUkdTLAorICAgIHsiX2RlYnVnbWFsbG9jc3RhdHMiLCBzeXNfZGVidWdtYWxsb2NzdGF0cywgTUVUSF9OT0FSR1MsCiAgICAgIGRlYnVnbWFsbG9jc3RhdHNfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKQEAgLTEyODYsNiArMTM1MCw3IEBACiBleGVjdXRhYmxlIC0tIGFic29sdXRlIHBhdGggb2YgdGhlIGV4ZWN1dGFibGUgYmluYXJ5IG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXJcblwKIGZsb2F0X2luZm8gLS0gYSBzdHJ1Y3Qgc2VxdWVuY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmxvYXQgaW1wbGVtZW50YXRpb24uXG5cCiBmbG9hdF9yZXByX3N0eWxlIC0tIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBzdHlsZSBvZiByZXByKCkgb3V0cHV0IGZvciBmbG9hdHNcblwKK2hhc2hfaW5mbyAtLSBhIHN0cnVjdCBzZXF1ZW5jZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYXNoIGFsZ29yaXRobS5cblwKIGhleHZlcnNpb24gLS0gdmVyc2lvbiBpbmZvcm1hdGlvbiBlbmNvZGVkIGFzIGEgc2luZ2xlIGludGVnZXJcblwKIGltcGxlbWVudGF0aW9uIC0tIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBpbmZvcm1hdGlvbi5cblwKIGludF9pbmZvIC0tIGEgc3RydWN0IHNlcXVlbmNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGludCBpbXBsZW1lbnRhdGlvbi5cblwKQEAgLTEzNTIsMTQgKzE0MTcsMTIgQEAKICAgICB7Im5vX3NpdGUiLCAgICAgICAgICAgICAgICAgIi1TIn0sCiAgICAgeyJpZ25vcmVfZW52aXJvbm1lbnQiLCAgICAgICItRSJ9LAogICAgIHsidmVyYm9zZSIsICAgICAgICAgICAgICAgICAiLXYifSwKLSNpZmRlZiBSSVNDT1MKLSAgICB7InJpc2Nvc193aW1wIiwgICAgICAgICAgICAgIj8/PyJ9LAotI2VuZGlmCiAgICAgLyogeyJ1bmJ1ZmZlcmVkIiwgICAgICAgICAgICAgICAgICAgIi11In0sICovCiAgICAgLyogeyJza2lwX2ZpcnN0IiwgICAgICAgICAgICAgICAgICAgIi14In0sICovCiAgICAgeyJieXRlc193YXJuaW5nIiwgICAgICAgICAgICItYiJ9LAogICAgIHsicXVpZXQiLCAgICAgICAgICAgICAgICAgICAiLXEifSwKICAgICB7Imhhc2hfcmFuZG9taXphdGlvbiIsICAgICAgIi1SIn0sCisgICAgeyJpc29sYXRlZCIsICAgICAgICAgICAgICAgICItSSJ9LAogICAgIHswfQogfTsKIApAQCAtMTM2NywxMSArMTQzMCw3IEBACiAgICAgInN5cy5mbGFncyIsICAgICAgICAvKiBuYW1lICovCiAgICAgZmxhZ3NfX2RvY19fLCAgICAgICAvKiBkb2MgKi8KICAgICBmbGFnc19maWVsZHMsICAgICAgIC8qIGZpZWxkcyAqLwotI2lmZGVmIFJJU0NPUwogICAgIDEzCi0jZWxzZQotICAgIDEyCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTEzOTYsMTQgKzE0NTUsMTIgQEAKICAgICBTZXRGbGFnKFB5X05vU2l0ZUZsYWcpOwogICAgIFNldEZsYWcoUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnKTsKICAgICBTZXRGbGFnKFB5X1ZlcmJvc2VGbGFnKTsKLSNpZmRlZiBSSVNDT1MKLSAgICBTZXRGbGFnKFB5X1JJU0NPU1dpbXBGbGFnKTsKLSNlbmRpZgogICAgIC8qIFNldEZsYWcoc2F3X3VuYnVmZmVyZWRfZmxhZyk7ICovCiAgICAgLyogU2V0RmxhZyhza2lwZmlyc3RsaW5lKTsgKi8KICAgICBTZXRGbGFnKFB5X0J5dGVzV2FybmluZ0ZsYWcpOwogICAgIFNldEZsYWcoUHlfUXVpZXRGbGFnKTsKICAgICBTZXRGbGFnKFB5X0hhc2hSYW5kb21pemF0aW9uRmxhZyk7CisgICAgU2V0RmxhZyhQeV9Jc29sYXRlZEZsYWcpOwogI3VuZGVmIFNldEZsYWcKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CkBAIC0xNTY0LDE4ICsxNjIxLDM1IEBACiBQeU9iamVjdCAqCiBfUHlTeXNfSW5pdCh2b2lkKQogewotICAgIFB5T2JqZWN0ICptLCAqdiwgKnN5c2RpY3QsICp2ZXJzaW9uX2luZm87Ci0gICAgY2hhciAqczsKKyAgICBQeU9iamVjdCAqbSwgKnN5c2RpY3QsICp2ZXJzaW9uX2luZm87CiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzeXNtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN5c2RpY3QgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotI2RlZmluZSBTRVRfU1lTX0ZST01fU1RSSU5HKGtleSwgdmFsdWUpICAgICAgICAgICAgICAgICBcCi0gICAgdiA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAodiAhPSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCBrZXksIHYpOyAgICAgICAgICBcCi0gICAgUHlfWERFQ1JFRih2KQorI2RlZmluZSBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVyhrZXksIHZhbHVlKSAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW50IHJlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqdiA9ICh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICh2ID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXMgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCBrZXksIHYpOyAgICAgICBcCisgICAgICAgIGlmIChyZXMgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU0VUX1NZU19GUk9NX1NUUklORyhrZXksIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGludCByZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKnYgPSAodmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgXAorICAgICAgICBQeV9ERUNSRUYodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChyZXMgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAogICAgIC8qIENoZWNrIHRoYXQgc3RkaW4gaXMgbm90IGEgZGlyZWN0b3J5CiAgICAgVXNpbmcgc2hlbGwgcmVkaXJlY3Rpb24sIHlvdSBjYW4gcmVkaXJlY3Qgc3RkaW4gdG8gYSBkaXJlY3RvcnksCkBAIC0xNTk3LDEwICsxNjcxLDEwIEBACiAKICAgICAvKiBzdGRpbi9zdGRvdXQvc3RkZXJyIGFyZSBub3cgc2V0IGJ5IHB5dGhvbnJ1bi5jICovCiAKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiX19kaXNwbGF5aG9va19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZGlzcGxheWhvb2siKSk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIl9fZXhjZXB0aG9va19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZXhjZXB0aG9vayIpKTsKKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVygiX19kaXNwbGF5aG9va19fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZGlzcGxheWhvb2siKSk7CisgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIl9fZXhjZXB0aG9va19fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZXhjZXB0aG9vayIpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJ2ZXJzaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRWZXJzaW9uKCkpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJoZXh2ZXJzaW9uIiwKQEAgLTE2MzQsMjggKzE3MDgsMjQgQEAKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJpbnRfaW5mbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfR2V0SW5mbygpKTsKICAgICAvKiBpbml0aWFsaXplIGhhc2hfaW5mbyAqLwotICAgIGlmIChIYXNoX0luZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmSGFzaF9JbmZvVHlwZSwgJmhhc2hfaW5mb19kZXNjKTsKKyAgICBpZiAoSGFzaF9JbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZIYXNoX0luZm9UeXBlLCAmaGFzaF9pbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJoYXNoX2luZm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2hhc2hfaW5mbygpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJtYXh1bmljb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZygweDEwRkZGRikpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImJ1aWx0aW5fbW9kdWxlX25hbWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfYnVpbHRpbl9tb2R1bGVfbmFtZXMoKSk7Ci0gICAgewotICAgICAgICAvKiBBc3N1bWVzIHRoYXQgbG9uZ3MgYXJlIGF0IGxlYXN0IDIgYnl0ZXMgbG9uZy4KLSAgICAgICAgICAgU2hvdWxkIGJlIHNhZmUhICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtYmVyID0gMTsKLSAgICAgICAgY2hhciAqdmFsdWU7CisjaWYgUFlfQklHX0VORElBTgorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImJ5dGVvcmRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZygiYmlnIikpOworI2Vsc2UKKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJieXRlb3JkZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoImxpdHRsZSIpKTsKKyNlbmRpZgogCi0gICAgICAgIHMgPSAoY2hhciAqKSAmbnVtYmVyOwotICAgICAgICBpZiAoc1swXSA9PSAwKQotICAgICAgICAgICAgdmFsdWUgPSAiYmlnIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWUgPSAibGl0dGxlIjsKLSAgICAgICAgU0VUX1NZU19GUk9NX1NUUklORygiYnl0ZW9yZGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyh2YWx1ZSkpOwotICAgIH0KICNpZmRlZiBNU19DT1JFRExMCiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZGxsaGFuZGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tVm9pZFB0cihQeVdpbl9ETExoTW9kdWxlKSk7CkBAIC0xNjY4LDIyICsxNzM4LDIyIEBACiAjZW5kaWYKICAgICBpZiAod2Fybm9wdGlvbnMgPT0gTlVMTCkgewogICAgICAgICB3YXJub3B0aW9ucyA9IFB5TGlzdF9OZXcoMCk7CisgICAgICAgIGlmICh3YXJub3B0aW9ucyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9JTkNSRUYod2Fybm9wdGlvbnMpOwogICAgIH0KLSAgICBpZiAod2Fybm9wdGlvbnMgIT0gTlVMTCkgewotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCAid2Fybm9wdGlvbnMiLCB3YXJub3B0aW9ucyk7Ci0gICAgfQorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkdfQk9SUk9XKCJ3YXJub3B0aW9ucyIsIHdhcm5vcHRpb25zKTsKIAotICAgIHYgPSBnZXRfeG9wdGlvbnMoKTsKLSAgICBpZiAodiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJfeG9wdGlvbnMiLCB2KTsKLSAgICB9CisgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIl94b3B0aW9ucyIsIGdldF94b3B0aW9ucygpKTsKIAogICAgIC8qIHZlcnNpb25faW5mbyAqLwotICAgIGlmIChWZXJzaW9uSW5mb1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZWZXJzaW9uSW5mb1R5cGUsICZ2ZXJzaW9uX2luZm9fZGVzYyk7CisgICAgaWYgKFZlcnNpb25JbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZWZXJzaW9uSW5mb1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmVyc2lvbl9pbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICB2ZXJzaW9uX2luZm8gPSBtYWtlX3ZlcnNpb25faW5mbygpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInZlcnNpb25faW5mbyIsIHZlcnNpb25faW5mbyk7CiAgICAgLyogcHJldmVudCB1c2VyIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyAqLwpAQCAtMTY5NCw4ICsxNzY0LDEwIEBACiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaW1wbGVtZW50YXRpb24iLCBtYWtlX2ltcGxfaW5mbyh2ZXJzaW9uX2luZm8pKTsKIAogICAgIC8qIGZsYWdzICovCi0gICAgaWYgKEZsYWdzVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkZsYWdzVHlwZSwgJmZsYWdzX2Rlc2MpOworICAgIGlmIChGbGFnc1R5cGUudHBfbmFtZSA9PSAwKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmRmxhZ3NUeXBlLCAmZmxhZ3NfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImZsYWdzIiwgbWFrZV9mbGFncygpKTsKICAgICAvKiBwcmV2ZW50IHVzZXIgZnJvbSBjcmVhdGluZyBuZXcgaW5zdGFuY2VzICovCiAgICAgRmxhZ3NUeXBlLnRwX2luaXQgPSBOVUxMOwpAQCAtMTcwNSw3ICsxNzc3LDkgQEAKICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgLyogZ2V0d2luZG93c3ZlcnNpb24gKi8KICAgICBpZiAoV2luZG93c1ZlcnNpb25UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmV2luZG93c1ZlcnNpb25UeXBlLCAmd2luZG93c192ZXJzaW9uX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJldpbmRvd3NWZXJzaW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aW5kb3dzX3ZlcnNpb25fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogcHJldmVudCB1c2VyIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyAqLwogICAgIFdpbmRvd3NWZXJzaW9uVHlwZS50cF9pbml0ID0gTlVMTDsKICAgICBXaW5kb3dzVmVyc2lvblR5cGUudHBfbmV3ID0gTlVMTDsKQEAgLTE3NjksNyArMTg0Myw3IEBACiAgICAgUHlPYmplY3QgKnY7CiAgICAgaWYgKCh2ID0gbWFrZXBhdGhvYmplY3QocGF0aCwgREVMSU0pKSA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBjcmVhdGUgc3lzLnBhdGgiKTsKLSAgICBpZiAoUHlTeXNfU2V0T2JqZWN0KCJwYXRoIiwgdikgIT0gMCkKKyAgICBpZiAoX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BhdGgsIHYpICE9IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGFzc2lnbiBzeXMucGF0aCIpOwogICAgIFB5X0RFQ1JFRih2KTsKIH0KQEAgLTE3ODgsMjIgKzE4NjIsNyBAQAogICAgIGlmIChhdiAhPSBOVUxMKSB7CiAgICAgICAgIGludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0jaWZkZWYgX19WTVMKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2OwotCi0gICAgICAgICAgICAvKiBhcmd2WzBdIGlzIHRoZSBzY3JpcHQgcGF0aG5hbWUgaWYga25vd24gKi8KLSAgICAgICAgICAgIGlmIChpID09IDApIHsKLSAgICAgICAgICAgICAgICBjaGFyKiBmbiA9IGRlY2MkdHJhbnNsYXRlX3Ztcyhhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBpZiAoKGZuID09IChjaGFyICopMCkgfHwgZm4gPT0gKGNoYXIgKiktMSkKLSAgICAgICAgICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgZGVjYyR0cmFuc2xhdGVfdm1zKGFyZ3ZbMF0pKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhhcmd2W2ldKTsKLSNlbHNlCiAgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoYXJndltpXSwgLTEpOwotI2VuZGlmCiAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGF2KTsKICAgICAgICAgICAgICAgICBhdiA9IE5VTEw7CkBAIC0xODM4LDcgKzE4OTcsNyBAQAogICAgIHdjaGFyX3QgZnVsbHBhdGhbTUFYX1BBVEhdOwogI2VuZGlmCiAKLSAgICBwYXRoID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoIik7CisgICAgcGF0aCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9wYXRoKTsKICAgICBpZiAocGF0aCA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5MzcsNyArMTk5Niw3IEBACiB2b2lkCiBQeVN5c19TZXRBcmd2KGludCBhcmdjLCB3Y2hhcl90ICoqYXJndikKIHsKLSAgICBQeVN5c19TZXRBcmd2RXgoYXJnYywgYXJndiwgMSk7CisgICAgUHlTeXNfU2V0QXJndkV4KGFyZ2MsIGFyZ3YsIFB5X0lzb2xhdGVkRmxhZyA9PSAwKTsKIH0KIAogLyogUmVpbXBsZW1lbnRhdGlvbiBvZiBQeUZpbGVfV3JpdGVTdHJpbmcoKSBubyBjYWxsaW5nIGluZGlyZWN0bHkKQEAgLTE5NDgsNyArMjAwNyw2IEBACiB7CiAgICAgUHlPYmplY3QgKndyaXRlciA9IE5VTEwsICphcmdzID0gTlVMTCwgKnJlc3VsdCA9IE5VTEw7CiAgICAgaW50IGVycjsKLSAgICBfUHlfSURFTlRJRklFUih3cml0ZSk7CiAKICAgICBpZiAoZmlsZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0yMDI1LDcgKzIwODMsNyBAQAogICovCiAKIHN0YXRpYyB2b2lkCi1zeXNfd3JpdGUoY2hhciAqbmFtZSwgRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKK3N5c193cml0ZShfUHlfSWRlbnRpZmllciAqa2V5LCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIFB5T2JqZWN0ICpmaWxlOwogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CkBAIC0yMDMzLDcgKzIwOTEsNyBAQAogICAgIGludCB3cml0dGVuOwogCiAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7Ci0gICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdChuYW1lKTsKKyAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKGtleSk7CiAgICAgd3JpdHRlbiA9IFB5T1NfdnNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZvcm1hdCwgdmEpOwogICAgIGlmIChzeXNfcHlmaWxlX3dyaXRlKGJ1ZmZlciwgZmlsZSkgIT0gMCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMjA1Myw3ICsyMTExLDcgQEAKICAgICB2YV9saXN0IHZhOwogCiAgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0gICAgc3lzX3dyaXRlKCJzdGRvdXQiLCBzdGRvdXQsIGZvcm1hdCwgdmEpOworICAgIHN5c193cml0ZSgmUHlJZF9zdGRvdXQsIHN0ZG91dCwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KIApAQCAtMjA2MywxOSArMjEyMSwxOSBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfd3JpdGUoInN0ZGVyciIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CisgICAgc3lzX3dyaXRlKCZQeUlkX3N0ZGVyciwgc3RkZXJyLCBmb3JtYXQsIHZhKTsKICAgICB2YV9lbmQodmEpOwogfQogCiBzdGF0aWMgdm9pZAotc3lzX2Zvcm1hdChjaGFyICpuYW1lLCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQorc3lzX2Zvcm1hdChfUHlfSWRlbnRpZmllciAqa2V5LCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIFB5T2JqZWN0ICpmaWxlLCAqbWVzc2FnZTsKICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwogICAgIGNoYXIgKnV0Zjg7CiAKICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKLSAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KG5hbWUpOworICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoa2V5KTsKICAgICBtZXNzYWdlID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmEpOwogICAgIGlmIChtZXNzYWdlICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHN5c19weWZpbGVfd3JpdGVfdW5pY29kZShtZXNzYWdlLCBmaWxlKSAhPSAwKSB7CkBAIC0yMDk1LDcgKzIxNTMsNyBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfZm9ybWF0KCJzdGRvdXQiLCBzdGRvdXQsIGZvcm1hdCwgdmEpOworICAgIHN5c19mb3JtYXQoJlB5SWRfc3Rkb3V0LCBzdGRvdXQsIGZvcm1hdCwgdmEpOwogICAgIHZhX2VuZCh2YSk7CiB9CiAKQEAgLTIxMDUsNiArMjE2Myw2IEBACiAgICAgdmFfbGlzdCB2YTsKIAogICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotICAgIHN5c19mb3JtYXQoInN0ZGVyciIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CisgICAgc3lzX2Zvcm1hdCgmUHlJZF9zdGRlcnIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWQuYyBiL1B5dGhvbi90aHJlYWQuYwppbmRleCBlNTVkMzQyLi5kMWNiMGU2IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkLmMKKysrIGIvUHl0aG9uL3RocmVhZC5jCkBAIC05MSwxMCArOTEsNiBAQAogI2luY2x1ZGUgInRocmVhZF9udC5oIgogI2VuZGlmCiAKLSNpZmRlZiBPUzJfVEhSRUFEUwotI2RlZmluZSBQWVRIUkVBRF9OQU1FICJvczIiCi0jaW5jbHVkZSAidGhyZWFkX29zMi5oIgotI2VuZGlmCiAKIC8qCiAjaWZkZWYgRk9PQkFSX1RIUkVBRFMKQEAgLTIwOSw3ICsyMDUsNyBAQAogICogc2VnZmF1bHRzLiAgTm93IHdlIGxvY2sgdGhlIHdob2xlIHJvdXRpbmUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga2V5ICoKLWZpbmRfa2V5KGludCBrZXksIHZvaWQgKnZhbHVlKQorZmluZF9rZXkoaW50IHNldF92YWx1ZSwgaW50IGtleSwgdm9pZCAqdmFsdWUpCiB7CiAgICAgc3RydWN0IGtleSAqcCwgKnByZXZfcDsKICAgICBsb25nIGlkID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwpAQCAtMjE5LDggKzIxNSwxMSBAQAogICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhrZXltdXRleCwgMSk7CiAgICAgcHJldl9wID0gTlVMTDsKICAgICBmb3IgKHAgPSBrZXloZWFkOyBwICE9IE5VTEw7IHAgPSBwLT5uZXh0KSB7Ci0gICAgICAgIGlmIChwLT5pZCA9PSBpZCAmJiBwLT5rZXkgPT0ga2V5KQorICAgICAgICBpZiAocC0+aWQgPT0gaWQgJiYgcC0+a2V5ID09IGtleSkgeworICAgICAgICAgICAgaWYgKHNldF92YWx1ZSkKKyAgICAgICAgICAgICAgICBwLT52YWx1ZSA9IHZhbHVlOwogICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICB9CiAgICAgICAgIC8qIFNhbml0eSBjaGVjay4gIFRoZXNlIHN0YXRlcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGJ1dCBpZgogICAgICAgICAgKiB0aGV5IGRvIHdlIG11c3QgYWJvcnQuICBPdGhlcndpc2Ugd2UnbGwgZW5kIHVwIHNwaW5uaW5nIGluCiAgICAgICAgICAqIGluIGEgdGlnaHQgbG9vcCB3aXRoIHRoZSBsb2NrIGhlbGQuICBBIHNpbWlsYXIgY2hlY2sgaXMgZG9uZQpAQCAtMjMxLDExICsyMzAsMTEgQEAKICAgICAgICAgaWYgKHAtPm5leHQgPT0ga2V5aGVhZCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInRscyBmaW5kX2tleTogY2lyY3VsYXIgbGlzdCghKSIpOwogICAgIH0KLSAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgIGlmICghc2V0X3ZhbHVlICYmIHZhbHVlID09IE5VTEwpIHsKICAgICAgICAgYXNzZXJ0KHAgPT0gTlVMTCk7CiAgICAgICAgIGdvdG8gRG9uZTsKICAgICB9Ci0gICAgcCA9IChzdHJ1Y3Qga2V5ICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5KSk7CisgICAgcCA9IChzdHJ1Y3Qga2V5ICopUHlNZW1fUmF3TWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5KSk7CiAgICAgaWYgKHAgIT0gTlVMTCkgewogICAgICAgICBwLT5pZCA9IGlkOwogICAgICAgICBwLT5rZXkgPSBrZXk7CkBAIC0yNzQsNyArMjczLDcgQEAKICAgICB3aGlsZSAoKHAgPSAqcSkgIT0gTlVMTCkgewogICAgICAgICBpZiAocC0+a2V5ID09IGtleSkgewogICAgICAgICAgICAgKnEgPSBwLT5uZXh0OwotICAgICAgICAgICAgZnJlZSgodm9pZCAqKXApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXApOwogICAgICAgICAgICAgLyogTkIgVGhpcyBkb2VzICpub3QqIGZyZWUgcC0+dmFsdWUhICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMjgzLDE5ICsyODIsMTIgQEAKICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soa2V5bXV0ZXgpOwogfQogCi0vKiBDb25mdXNpbmc6ICBJZiB0aGUgY3VycmVudCB0aHJlYWQgaGFzIGFuIGFzc29jaWF0aW9uIGZvciBrZXksCi0gKiB2YWx1ZSBpcyBpZ25vcmVkLCBhbmQgMCBpcyByZXR1cm5lZC4gIEVsc2UgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGNyZWF0ZQotICogYW4gYXNzb2NpYXRpb24gb2Yga2V5IHRvIHZhbHVlIGZvciB0aGUgY3VycmVudCB0aHJlYWQuICAwIGlzIHJldHVybmVkCi0gKiBpZiB0aGF0IHN1Y2NlZWRzLCBidXQgLTEgaXMgcmV0dXJuZWQgaWYgdGhlcmUncyBub3QgZW5vdWdoIG1lbW9yeQotICogdG8gY3JlYXRlIHRoZSBhc3NvY2lhdGlvbi4gIHZhbHVlIG11c3Qgbm90IGJlIE5VTEwuCi0gKi8KIGludAogUHlUaHJlYWRfc2V0X2tleV92YWx1ZShpbnQga2V5LCB2b2lkICp2YWx1ZSkKIHsKICAgICBzdHJ1Y3Qga2V5ICpwOwogCi0gICAgYXNzZXJ0KHZhbHVlICE9IE5VTEwpOwotICAgIHAgPSBmaW5kX2tleShrZXksIHZhbHVlKTsKKyAgICBwID0gZmluZF9rZXkoMSwga2V5LCB2YWx1ZSk7CiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGVsc2UKQEAgLTMwOCw3ICszMDAsNyBAQAogdm9pZCAqCiBQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGludCBrZXkpCiB7Ci0gICAgc3RydWN0IGtleSAqcCA9IGZpbmRfa2V5KGtleSwgTlVMTCk7CisgICAgc3RydWN0IGtleSAqcCA9IGZpbmRfa2V5KDAsIGtleSwgTlVMTCk7CiAKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMyOCw3ICszMjAsNyBAQAogICAgIHdoaWxlICgocCA9ICpxKSAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChwLT5rZXkgPT0ga2V5ICYmIHAtPmlkID09IGlkKSB7CiAgICAgICAgICAgICAqcSA9IHAtPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopcCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopcCk7CiAgICAgICAgICAgICAvKiBOQiBUaGlzIGRvZXMgKm5vdCogZnJlZSBwLT52YWx1ZSEgKi8KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zNjEsNyArMzUzLDcgQEAKICAgICB3aGlsZSAoKHAgPSAqcSkgIT0gTlVMTCkgewogICAgICAgICBpZiAocC0+aWQgIT0gaWQpIHsKICAgICAgICAgICAgICpxID0gcC0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilwKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilwKTsKICAgICAgICAgICAgIC8qIE5CIFRoaXMgZG9lcyAqbm90KiBmcmVlIHAtPnZhbHVlISAqLwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTQwMyw4ICszOTUsMTAgQEAKICAgICBpbnQgbGVuOwogI2VuZGlmCiAKLSAgICBpZiAoVGhyZWFkSW5mb1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZUaHJlYWRJbmZvVHlwZSwgJnRocmVhZGluZm9fZGVzYyk7CisgICAgaWYgKFRocmVhZEluZm9UeXBlLnRwX25hbWUgPT0gMCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlRocmVhZEluZm9UeXBlLCAmdGhyZWFkaW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICB0aHJlYWRpbmZvID0gUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcoJlRocmVhZEluZm9UeXBlKTsKICAgICBpZiAodGhyZWFkaW5mbyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9udC5oIGIvUHl0aG9uL3RocmVhZF9udC5oCmluZGV4IDkzOGJmMWUuLmVlMjA3OWYgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfbnQuaAorKysgYi9QeXRob24vdGhyZWFkX250LmgKQEAgLTM0LDcgKzM0LDcgQEAKIFBOUk1VVEVYCiBBbGxvY05vblJlY3Vyc2l2ZU11dGV4KCkKIHsKLSAgICBQTlJNVVRFWCBtID0gKFBOUk1VVEVYKW1hbGxvYyhzaXplb2YoTlJNVVRFWCkpOworICAgIFBOUk1VVEVYIG0gPSAoUE5STVVURVgpUHlNZW1fUmF3TWFsbG9jKHNpemVvZihOUk1VVEVYKSk7CiAgICAgaWYgKCFtKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlDT05EX0lOSVQoJm0tPmN2KSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBtLT5sb2NrZWQgPSAwOwogICAgIHJldHVybiBtOwogZmFpbDoKLSAgICBmcmVlKG0pOworICAgIFB5TWVtX1Jhd0ZyZWUobSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBpZiAobXV0ZXgpIHsKICAgICAgICAgUHlDT05EX0ZJTkkoJm11dGV4LT5jdik7CiAgICAgICAgIFB5TVVURVhfRklOSSgmbXV0ZXgtPmNzKTsKLSAgICAgICAgZnJlZShtdXRleCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobXV0ZXgpOwogICAgIH0KIH0KIApAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgcmVzdWx0ID0gUHlDT05EX1NJR05BTCgmbXV0ZXgtPmN2KTsKICAgICByZXN1bHQgJj0gUHlNVVRFWF9VTkxPQ0soJm11dGV4LT5jcyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKLX0gICAgCit9CiAKICNlbHNlIC8qIGlmICEgX1BZX1VTRV9DVl9MT0NLUyAqLwogCkBAIC0xMzAsNyArMTMwLDcgQEAKIERXT1JECiBFbnRlck5vblJlY3Vyc2l2ZU11dGV4KFBOUk1VVEVYIG11dGV4LCBEV09SRCBtaWxsaXNlY29uZHMpCiB7Ci0gICAgcmV0dXJuIFdhaXRGb3JTaW5nbGVPYmplY3QobXV0ZXgsIG1pbGxpc2Vjb25kcyk7CisgICAgcmV0dXJuIFdhaXRGb3JTaW5nbGVPYmplY3RFeChtdXRleCwgbWlsbGlzZWNvbmRzLCBGQUxTRSk7CiB9CiAKIEJPT0wKQEAgLTM4OSwyMCArMzg5LDExIEBACiAgICAgVGxzRnJlZShrZXkpOwogfQogCi0vKiBXZSBtdXN0IGJlIGNhcmVmdWwgdG8gZW11bGF0ZSB0aGUgc3RyYW5nZSBzZW1hbnRpY3MgaW1wbGVtZW50ZWQgaW4gdGhyZWFkLmMsCi0gKiB3aGVyZSB0aGUgdmFsdWUgaXMgb25seSBzZXQgaWYgaXQgaGFzbid0IGJlZW4gc2V0IGJlZm9yZS4KLSAqLwogaW50CiBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKGludCBrZXksIHZvaWQgKnZhbHVlKQogewogICAgIEJPT0wgb2s7Ci0gICAgdm9pZCAqb2xkdmFsdWU7CiAKLSAgICBhc3NlcnQodmFsdWUgIT0gTlVMTCk7Ci0gICAgb2xkdmFsdWUgPSBUbHNHZXRWYWx1ZShrZXkpOwotICAgIGlmIChvbGR2YWx1ZSAhPSBOVUxMKQotICAgICAgICAvKiBpZ25vcmUgdmFsdWUgaWYgYWxyZWFkeSBzZXQgKi8KLSAgICAgICAgcmV0dXJuIDA7CiAgICAgb2sgPSBUbHNTZXRWYWx1ZShrZXksIHZhbHVlKTsKICAgICBpZiAoIW9rKQogICAgICAgICByZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX29zMi5oIGIvUHl0aG9uL3RocmVhZF9vczIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyNjRiNS4uMDAwMDAwMAotLS0gYS9QeXRob24vdGhyZWFkX29zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qIFRoaXMgY29kZSBpbXBsZW1lbnRlZCBieSBjdmFsZUBuZXRjb20uY29tICovCi0KLSNkZWZpbmUgSU5DTF9ET1NQUk9DRVNTCi0jZGVmaW5lIElOQ0xfRE9TU0VNQVBIT1JFUwotI2luY2x1ZGUgIm9zMi5oIgotI2luY2x1ZGUgImxpbWl0cy5oIgotCi0jaW5jbHVkZSAicHJvY2Vzcy5oIgotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxzeXMvYnVpbHRpbi5oPgotI2luY2x1ZGUgPHN5cy9mbXV0ZXguaD4KLSNlbHNlCi1sb25nIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQodm9pZCk7Ci0jZW5kaWYKLQotLyogZGVmYXVsdCB0aHJlYWQgc3RhY2sgc2l6ZSBvZiA2NGtCICovCi0jaWYgIWRlZmluZWQoVEhSRUFEX1NUQUNLX1NJWkUpCi0jZGVmaW5lIFRIUkVBRF9TVEFDS19TSVpFICAgICAgIDB4MTAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIE9TMl9TVEFDS1NJWkUoeCkgICAgICAgICh4ID8geCA6IFRIUkVBRF9TVEFDS19TSVpFKQotCi0vKgotICogSW5pdGlhbGl6YXRpb24gb2YgdGhlIEMgcGFja2FnZSwgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1QeVRocmVhZF9faW5pdF90aHJlYWQodm9pZCkKLXsKLX0KLQotLyoKLSAqIFRocmVhZCBzdXBwb3J0LgotICovCi1sb25nCi1QeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkKHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0gICAgaW50IHRocmVhZF9pZDsKLQotICAgIHRocmVhZF9pZCA9IF9iZWdpbnRocmVhZChmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT1MyX1NUQUNLU0laRShfcHl0aHJlYWRfc3RhY2tzaXplKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcpOwotCi0gICAgaWYgKHRocmVhZF9pZCA9PSAtMSkgewotICAgICAgICBkcHJpbnRmKCgiX2JlZ2ludGhyZWFkIGZhaWxlZC4gcmV0dXJuICVsZFxuIiwgZXJybm8pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhyZWFkX2lkOwotfQotCi1sb25nCi1QeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KHZvaWQpCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgUFBJQiBwaWI7Ci0gICAgUFRJQiB0aWI7Ci0jZW5kaWYKLQotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHJldHVybiBfZ2V0dGlkKCk7Ci0jZWxzZQotICAgIERvc0dldEluZm9CbG9ja3MoJnRpYiwgJnBpYik7Ci0gICAgcmV0dXJuIHRpYi0+dGliX3B0aWIyLT50aWIyX3VsdGlkOwotI2VuZGlmCi19Ci0KLXZvaWQKLVB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGV4aXQoMCk7Ci0gICAgX2VuZHRocmVhZCgpOwotfQotCi0vKgotICogTG9jayBzdXBwb3J0LiAgVGhpcyBpcyBpbXBsZW1lbnRlZCB3aXRoIGFuIGV2ZW50IHNlbWFwaG9yZSBhbmQgY3JpdGljYWwKLSAqIHNlY3Rpb25zIHRvIG1ha2UgaXQgYmVoYXZlIG1vcmUgbGlrZSBhIHBvc2l4IG11dGV4IHRoYW4gaXRzIE9TLzIKLSAqIGNvdW50ZXJwYXJ0cy4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBvczJfbG9ja190IHsKLSAgICBpbnQgaXNfc2V0OwotICAgIEhFViBjaGFuZ2VkOwotfSAqdHlwZV9vczJfbG9jazsKLQotUHlUaHJlYWRfdHlwZV9sb2NrCi1QeVRocmVhZF9hbGxvY2F0ZV9sb2NrKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBfZm11dGV4ICpzZW0gPSBtYWxsb2Moc2l6ZW9mKF9mbXV0ZXgpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSAtPiAlbHhcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIChsb25nKXNlbSkpOwotICAgIGlmIChfZm11dGV4X2NyZWF0ZShzZW0sIDApKSB7Ci0gICAgICAgIGZyZWUoc2VtKTsKLSAgICAgICAgc2VtID0gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIChQeVRocmVhZF90eXBlX2xvY2spc2VtOwotI2Vsc2UKLSAgICBBUElSRVQgcmM7Ci0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3MyX2xvY2tfdCkpOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2sgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLQotICAgIGxvY2stPmlzX3NldCA9IDA7Ci0KLSAgICBEb3NDcmVhdGVFdmVudFNlbShOVUxMLCAmbG9jay0+Y2hhbmdlZCwgMCwgMCk7Ci0KLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCkgLT4gJXBcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIGxvY2stPmNoYW5nZWQpKTsKLQotICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKWxvY2s7Ci0jZW5kaWYKLX0KLQotdm9pZAotUHlUaHJlYWRfZnJlZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBhTG9jaykKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICB0eXBlX29zMl9sb2NrIGxvY2sgPSAodHlwZV9vczJfbG9jaylhTG9jazsKLSNlbmRpZgotCi0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZnJlZV9sb2NrKCVwKSBjYWxsZWRcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLGFMb2NrKSk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChhTG9jaykgewotICAgICAgICBfZm11dGV4X2Nsb3NlKChfZm11dGV4ICopYUxvY2spOwotICAgICAgICBmcmVlKChfZm11dGV4ICopYUxvY2spOwotICAgIH0KLSNlbHNlCi0gICAgRG9zQ2xvc2VFdmVudFNlbShsb2NrLT5jaGFuZ2VkKTsKLSAgICBmcmVlKGFMb2NrKTsKLSNlbmRpZgotfQotCi0vKgotICogUmV0dXJuIDEgb24gc3VjY2VzcyBpZiB0aGUgbG9jayB3YXMgYWNxdWlyZWQKLSAqCi0gKiBhbmQgMCBpZiB0aGUgbG9jayB3YXMgbm90IGFjcXVpcmVkLgotICovCi1pbnQKLVB5VGhyZWFkX2FjcXVpcmVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgYUxvY2ssIGludCB3YWl0ZmxhZykKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICBpbnQgICBkb25lID0gMDsKLSAgICBVTE9ORyBjb3VudDsKLSAgICBQSUQgICBwaWQgPSAwOwotICAgIFRJRCAgIHRpZCA9IDA7Ci0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spYUxvY2s7Ci0jZW5kaWYKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2FjcXVpcmVfbG9jayglcCwgJWQpIGNhbGxlZFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgYUxvY2ssCi0gICAgICAgICAgICAgd2FpdGZsYWcpKTsKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgLyogYWx3YXlzIHN1Y2Nlc3NmdWwgaWYgdGhlIGxvY2sgZG9lc24ndCBleGlzdCAqLwotICAgIGlmIChhTG9jayAmJgotICAgICAgICBfZm11dGV4X3JlcXVlc3QoKF9mbXV0ZXggKilhTG9jaywgd2FpdGZsYWcgPyAwIDogX0ZNUl9OT1dBSVQpKQotICAgICAgICByZXR1cm4gMDsKLSNlbHNlCi0gICAgd2hpbGUgKCFkb25lKSB7Ci0gICAgICAgIC8qIGlmIHRoZSBsb2NrIGlzIGN1cnJlbnRseSBzZXQsIHdlIGhhdmUgdG8gd2FpdCBmb3IKLSAgICAgICAgICogdGhlIHN0YXRlIHRvIGNoYW5nZQotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGxvY2stPmlzX3NldCkgewotICAgICAgICAgICAgaWYgKCF3YWl0ZmxhZykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIERvc1dhaXRFdmVudFNlbShsb2NrLT5jaGFuZ2VkLCBTRU1fSU5ERUZJTklURV9XQUlUKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGVudGVyIGEgY3JpdGljYWwgc2VjdGlvbiBhbmQgdHJ5IHRvIGdldCB0aGUgc2VtYXBob3JlLiAgSWYKLSAgICAgICAgICogaXQgaXMgc3RpbGwgbG9ja2VkLCB3ZSB3aWxsIHRyeSBhZ2Fpbi4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChEb3NFbnRlckNyaXRTZWMoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGlmICghbG9jay0+aXNfc2V0KSB7Ci0gICAgICAgICAgICBsb2NrLT5pc19zZXQgPSAxOwotICAgICAgICAgICAgRG9zUmVzZXRFdmVudFNlbShsb2NrLT5jaGFuZ2VkLCAmY291bnQpOwotICAgICAgICAgICAgZG9uZSA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBEb3NFeGl0Q3JpdFNlYygpOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX3JlbGVhc2VfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgYUxvY2spCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spYUxvY2s7Ci0jZW5kaWYKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICBhTG9jaykpOwotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoYUxvY2spCi0gICAgICAgIF9mbXV0ZXhfcmVsZWFzZSgoX2ZtdXRleCAqKWFMb2NrKTsKLSNlbHNlCi0gICAgaWYgKCFsb2NrLT5pc19zZXQpIHsKLSAgICAgICAgZHByaW50ZigoIiVsZDogQ291bGQgbm90IFB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgZXJyb3I6ICVsXG4iLAotICAgICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgICAgIGFMb2NrLAotICAgICAgICAgICAgICAgICBHZXRMYXN0RXJyb3IoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKERvc0VudGVyQ3JpdFNlYygpKSB7Ci0gICAgICAgIGRwcmludGYoKCIlbGQ6IENvdWxkIG5vdCBQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGVycm9yOiAlbFxuIiwKLSAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgICAgICBhTG9jaywKLSAgICAgICAgICAgICAgICAgR2V0TGFzdEVycm9yKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxvY2stPmlzX3NldCA9IDA7Ci0gICAgRG9zUG9zdEV2ZW50U2VtKGxvY2stPmNoYW5nZWQpOwotCi0gICAgRG9zRXhpdENyaXRTZWMoKTsKLSNlbmRpZgotfQotCi0vKiBtaW5pbXVtL21heGltdW0gdGhyZWFkIHN0YWNrIHNpemVzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBUSFJFQURfTUlOX1NUQUNLU0laRSAgICAweDgwMDAgICAgICAgICAgLyogMzJrQiAqLwotI2RlZmluZSBUSFJFQURfTUFYX1NUQUNLU0laRSAgICAweDIwMDAwMDAgICAgICAgLyogMzJNQiAqLwotCi0vKiBzZXQgdGhlIHRocmVhZCBzdGFjayBzaXplLgotICogUmV0dXJuIDAgaWYgc2l6ZSBpcyB2YWxpZCwgLTEgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50Ci1fcHl0aHJlYWRfb3MyX3NldF9zdGFja3NpemUoc2l6ZV90IHNpemUpCi17Ci0gICAgLyogc2V0IHRvIGRlZmF1bHQgKi8KLSAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgIF9weXRocmVhZF9zdGFja3NpemUgPSAwOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiB2YWxpZCByYW5nZT8gKi8KLSAgICBpZiAoc2l6ZSA+PSBUSFJFQURfTUlOX1NUQUNLU0laRSAmJiBzaXplIDwgVEhSRUFEX01BWF9TVEFDS1NJWkUpIHsKLSAgICAgICAgX3B5dGhyZWFkX3N0YWNrc2l6ZSA9IHNpemU7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotI2RlZmluZSBUSFJFQURfU0VUX1NUQUNLU0laRSh4KSBfcHl0aHJlYWRfb3MyX3NldF9zdGFja3NpemUoeCkKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfcHRoLmggYi9QeXRob24vdGhyZWFkX3B0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzA0MjY2Li4wMDAwMDAwCi0tLSBhL1B5dGhvbi90aHJlYWRfcHRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotCi0vKiBHTlUgcHRoIHRocmVhZHMgaW50ZXJmYWNlCi0gICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcHRoCi0gICAyMDAwLTA1LTAzIEFuZHkgRHVzdG1hbiA8YW5keUBkdXN0bWFuLm5ldD4KLQotICAgQWRhcHRlZCBmcm9tIFBvc2l4IHRocmVhZHMgaW50ZXJmYWNlCi0gICAxMiBNYXkgMTk5NyAtLSBkYXZpZCBhcm5vbGQgPGRhdmlkYUBwb2JveC5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHB0aC5oPgotCi0vKiBBIHB0aCBtdXRleCBpc24ndCBzdWZmaWNpZW50IHRvIG1vZGVsIHRoZSBQeXRob24gbG9jayB0eXBlCi0gKiBiZWNhdXNlIHB0aCBtdXRleGVzIGNhbiBiZSBhY3F1aXJlZCBtdWx0aXBsZSB0aW1lcyBieSB0aGUKLSAqIHNhbWUgdGhyZWFkLgotICoKLSAqIFRoZSBwdGhfbG9jayBzdHJ1Y3QgaW1wbGVtZW50cyBhIFB5dGhvbiBsb2NrIGFzIGEgImxvY2tlZD8iIGJpdAotICogYW5kIGEgPGNvbmRpdGlvbiwgbXV0ZXg+IHBhaXIuICBJbiBnZW5lcmFsLCBpZiB0aGUgYml0IGNhbiBiZSBhY3F1aXJlZAotICogaW5zdGFudGx5LCBpdCBpcywgZWxzZSB0aGUgcGFpciBpcyB1c2VkIHRvIGJsb2NrIHRoZSB0aHJlYWQgdW50aWwgdGhlCi0gKiBiaXQgaXMgY2xlYXJlZC4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAgICAgICAgICAgICBsb2NrZWQ7IC8qIDA9dW5sb2NrZWQsIDE9bG9ja2VkICovCi0gICAgLyogYSA8Y29uZCwgbXV0ZXg+IHBhaXIgdG8gaGFuZGxlIGFuIGFjcXVpcmUgb2YgYSBsb2NrZWQgbG9jayAqLwotICAgIHB0aF9jb25kX3QgICBsb2NrX3JlbGVhc2VkOwotICAgIHB0aF9tdXRleF90ICBtdXQ7Ci19IHB0aF9sb2NrOwotCi0jZGVmaW5lIENIRUNLX1NUQVRVUyhuYW1lKSAgaWYgKHN0YXR1cyA9PSAtMSkgeyBwcmludGYoIiVkICIsIHN0YXR1cyk7IHBlcnJvcihuYW1lKTsgZXJyb3IgPSAxOyB9Ci0KLXB0aF9hdHRyX3QgUHlUaHJlYWRfYXR0cjsKLQotLyoKLSAqIEluaXRpYWxpemF0aW9uLgotICovCi0KLXN0YXRpYyB2b2lkIFB5VGhyZWFkX19pbml0X3RocmVhZCh2b2lkKQotewotICAgIHB0aF9pbml0KCk7Ci0gICAgUHlUaHJlYWRfYXR0ciA9IHB0aF9hdHRyX25ldygpOwotICAgIHB0aF9hdHRyX3NldChQeVRocmVhZF9hdHRyLCBQVEhfQVRUUl9TVEFDS19TSVpFLCAxPDwxOCk7Ci0gICAgcHRoX2F0dHJfc2V0KFB5VGhyZWFkX2F0dHIsIFBUSF9BVFRSX0pPSU5BQkxFLCBGQUxTRSk7Ci19Ci0KLS8qCi0gKiBUaHJlYWQgc3VwcG9ydC4KLSAqLwotCi0KLWxvbmcgUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKQotewotICAgIHB0aF90IHRoOwotICAgIGRwcmludGYoKCJQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSAgICB0aCA9IHB0aF9zcGF3bihQeVRocmVhZF9hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCogKCopKHZvaWQgKikpZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilhcmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgIHJldHVybiB0aDsKLX0KLQotbG9uZyBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KHZvaWQpCi17Ci0gICAgdm9sYXRpbGUgcHRoX3QgdGhyZWFkaWQ7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLSAgICB0aHJlYWRpZCA9IHB0aF9zZWxmKCk7Ci0gICAgcmV0dXJuIChsb25nKSB0aHJlYWRpZDsKLX0KLQotdm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGV4aXQoMCk7Ci0gICAgfQotfQotCi0vKgotICogTG9jayBzdXBwb3J0LgotICovCi1QeVRocmVhZF90eXBlX2xvY2sgUHlUaHJlYWRfYWxsb2NhdGVfbG9jayh2b2lkKQotewotICAgIHB0aF9sb2NrICpsb2NrOwotICAgIGludCBzdGF0dXMsIGVycm9yID0gMDsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hbGxvY2F0ZV9sb2NrIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSAgICBsb2NrID0gKHB0aF9sb2NrICopIG1hbGxvYyhzaXplb2YocHRoX2xvY2spKTsKLSAgICBtZW1zZXQoKHZvaWQgKilsb2NrLCAnXDAnLCBzaXplb2YocHRoX2xvY2spKTsKLSAgICBpZiAobG9jaykgewotICAgICAgICBsb2NrLT5sb2NrZWQgPSAwOwotICAgICAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfaW5pdCgmbG9jay0+bXV0KTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfaW5pdCIpOwotICAgICAgICBzdGF0dXMgPSBwdGhfY29uZF9pbml0KCZsb2NrLT5sb2NrX3JlbGVhc2VkKTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfY29uZF9pbml0Iik7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZnJlZSgodm9pZCAqKWxvY2spOwotICAgICAgICAgICAgbG9jayA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSAtPiAlcFxuIiwgbG9jaykpOwotICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKSBsb2NrOwotfQotCi12b2lkIFB5VGhyZWFkX2ZyZWVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgbG9jaykKLXsKLSAgICBwdGhfbG9jayAqdGhlbG9jayA9IChwdGhfbG9jayAqKWxvY2s7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZnJlZV9sb2NrKCVwKSBjYWxsZWRcbiIsIGxvY2spKTsKLQotICAgIGZyZWUoKHZvaWQgKil0aGVsb2NrKTsKLX0KLQotaW50IFB5VGhyZWFkX2FjcXVpcmVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgbG9jaywgaW50IHdhaXRmbGFnKQotewotICAgIGludCBzdWNjZXNzOwotICAgIHB0aF9sb2NrICp0aGVsb2NrID0gKHB0aF9sb2NrICopbG9jazsKLSAgICBpbnQgc3RhdHVzLCBlcnJvciA9IDA7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgY2FsbGVkXG4iLCBsb2NrLCB3YWl0ZmxhZykpOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoJnRoZWxvY2stPm11dCwgIXdhaXRmbGFnLCBOVUxMKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzFdIik7Ci0gICAgc3VjY2VzcyA9IHRoZWxvY2stPmxvY2tlZCA9PSAwOwotICAgIGlmIChzdWNjZXNzKSB0aGVsb2NrLT5sb2NrZWQgPSAxOwotICAgIHN0YXR1cyA9IHB0aF9tdXRleF9yZWxlYXNlKCAmdGhlbG9jay0+bXV0ICk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfcmVsZWFzZVsxXSIpOwotCi0gICAgaWYgKCAhc3VjY2VzcyAmJiB3YWl0ZmxhZyApIHsKLSAgICAgICAgLyogY29udGludWUgdHJ5aW5nIHVudGlsIHdlIGdldCB0aGUgbG9jayAqLwotCi0gICAgICAgIC8qIG11dCBtdXN0IGJlIGxvY2tlZCBieSBtZSAtLSBwYXJ0IG9mIHRoZSBjb25kaXRpb24KLSAgICAgICAgICogcHJvdG9jb2wgKi8KLSAgICAgICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoICZ0aGVsb2NrLT5tdXQsICF3YWl0ZmxhZywgTlVMTCApOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzJdIik7Ci0gICAgICAgIHdoaWxlICggdGhlbG9jay0+bG9ja2VkICkgewotICAgICAgICAgICAgc3RhdHVzID0gcHRoX2NvbmRfYXdhaXQoJnRoZWxvY2stPmxvY2tfcmVsZWFzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGhlbG9jay0+bXV0LCBOVUxMKTsKLSAgICAgICAgICAgIENIRUNLX1NUQVRVUygicHRoX2NvbmRfYXdhaXQiKTsKLSAgICAgICAgfQotICAgICAgICB0aGVsb2NrLT5sb2NrZWQgPSAxOwotICAgICAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfcmVsZWFzZSggJnRoZWxvY2stPm11dCApOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9yZWxlYXNlWzJdIik7Ci0gICAgICAgIHN1Y2Nlc3MgPSAxOwotICAgIH0KLSAgICBpZiAoZXJyb3IpIHN1Y2Nlc3MgPSAwOwotICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSAtPiAlZFxuIiwgbG9jaywgd2FpdGZsYWcsIHN1Y2Nlc3MpKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotdm9pZCBQeVRocmVhZF9yZWxlYXNlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2spCi17Ci0gICAgcHRoX2xvY2sgKnRoZWxvY2sgPSAocHRoX2xvY2sgKilsb2NrOwotICAgIGludCBzdGF0dXMsIGVycm9yID0gMDsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGNhbGxlZFxuIiwgbG9jaykpOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoICZ0aGVsb2NrLT5tdXQsIDAsIE5VTEwgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzNdIik7Ci0KLSAgICB0aGVsb2NrLT5sb2NrZWQgPSAwOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X3JlbGVhc2UoICZ0aGVsb2NrLT5tdXQgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9yZWxlYXNlWzNdIik7Ci0KLSAgICAvKiB3YWtlIHVwIHNvbWVvbmUgKGFueW9uZSwgaWYgYW55KSB3YWl0aW5nIG9uIHRoZSBsb2NrICovCi0gICAgc3RhdHVzID0gcHRoX2NvbmRfbm90aWZ5KCAmdGhlbG9jay0+bG9ja19yZWxlYXNlZCwgMCApOwotICAgIENIRUNLX1NUQVRVUygicHRoX2NvbmRfbm90aWZ5Iik7Ci19CmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3B0aHJlYWQuaCBiL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCmluZGV4IGU5MGFlN2UuLmQ5ZjdjNzYgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCisrKyBiL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCkBAIC0yODIsMTQgKzI4MiwxNCBAQAogICAgIGlmICghaW5pdGlhbGl6ZWQpCiAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7CiAKLSAgICBsb2NrID0gKHNlbV90ICopbWFsbG9jKHNpemVvZihzZW1fdCkpOworICAgIGxvY2sgPSAoc2VtX3QgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHNlbV90KSk7CiAKICAgICBpZiAobG9jaykgewogICAgICAgICBzdGF0dXMgPSBzZW1faW5pdChsb2NrLDAsMSk7CiAgICAgICAgIENIRUNLX1NUQVRVUygic2VtX2luaXQiKTsKIAogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilsb2NrKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilsb2NrKTsKICAgICAgICAgICAgIGxvY2sgPSBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgc3RhdHVzID0gc2VtX2Rlc3Ryb3kodGhlbG9jayk7CiAgICAgQ0hFQ0tfU1RBVFVTKCJzZW1fZGVzdHJveSIpOwogCi0gICAgZnJlZSgodm9pZCAqKXRoZWxvY2spOworICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKil0aGVsb2NrKTsKIH0KIAogLyoKQEAgLTQxMCw3ICs0MTAsNyBAQAogICAgIGlmICghaW5pdGlhbGl6ZWQpCiAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7CiAKLSAgICBsb2NrID0gKHB0aHJlYWRfbG9jayAqKSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfbG9jaykpOworICAgIGxvY2sgPSAocHRocmVhZF9sb2NrICopIFB5TWVtX1Jhd01hbGxvYyhzaXplb2YocHRocmVhZF9sb2NrKSk7CiAgICAgaWYgKGxvY2spIHsKICAgICAgICAgbWVtc2V0KCh2b2lkICopbG9jaywgJ1wwJywgc2l6ZW9mKHB0aHJlYWRfbG9jaykpOwogICAgICAgICBsb2NrLT5sb2NrZWQgPSAwOwpAQCAtNDMwLDcgKzQzMCw3IEBACiAgICAgICAgIENIRUNLX1NUQVRVUygicHRocmVhZF9jb25kX2luaXQiKTsKIAogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilsb2NrKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilsb2NrKTsKICAgICAgICAgICAgIGxvY2sgPSAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAgICAgc3RhdHVzID0gcHRocmVhZF9tdXRleF9kZXN0cm95KCAmdGhlbG9jay0+bXV0ICk7CiAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhyZWFkX211dGV4X2Rlc3Ryb3kiKTsKIAotICAgIGZyZWUoKHZvaWQgKil0aGVsb2NrKTsKKyAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopdGhlbG9jayk7CiB9CiAKIFB5TG9ja1N0YXR1cwpAQCAtNjI3LDkgKzYyNyw2IEBACiBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKGludCBrZXksIHZvaWQgKnZhbHVlKQogewogICAgIGludCBmYWlsOwotICAgIHZvaWQgKm9sZFZhbHVlID0gcHRocmVhZF9nZXRzcGVjaWZpYyhrZXkpOwotICAgIGlmIChvbGRWYWx1ZSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKICAgICBmYWlsID0gcHRocmVhZF9zZXRzcGVjaWZpYyhrZXksIHZhbHVlKTsKICAgICByZXR1cm4gZmFpbCA/IC0xIDogMDsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi90cmFjZWJhY2suYyBiL1B5dGhvbi90cmFjZWJhY2suYwppbmRleCA3NDA3NWM5Li4yZWNlMTkyIDEwMDY0NAotLS0gYS9QeXRob24vdHJhY2ViYWNrLmMKKysrIGIvUHl0aG9uL3RyYWNlYmFjay5jCkBAIC0xMyw3ICsxMyw3IEBACiAKICNkZWZpbmUgT0ZGKHgpIG9mZnNldG9mKFB5VHJhY2ViYWNrT2JqZWN0LCB4KQogCi0jZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpCisjZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgKGludClzdHJsZW4oc3RyKSkKICNkZWZpbmUgTUFYX1NUUklOR19MRU5HVEggNTAwCiAjZGVmaW5lIE1BWF9GUkFNRV9ERVBUSCAxMDAKICNkZWZpbmUgTUFYX05USFJFQURTIDEwMApAQCAtMjEsNiArMjEsMTEgQEAKIC8qIEZ1bmN0aW9uIGZyb20gUGFyc2VyL3Rva2VuaXplci5jICovCiBleHRlcm4gY2hhciAqIFB5VG9rZW5pemVyX0ZpbmRFbmNvZGluZ0ZpbGVuYW1lKGludCwgUHlPYmplY3QgKik7CiAKK19QeV9JREVOVElGSUVSKFRleHRJT1dyYXBwZXIpOworX1B5X0lERU5USUZJRVIoY2xvc2UpOworX1B5X0lERU5USUZJRVIob3Blbik7CitfUHlfSURFTlRJRklFUihwYXRoKTsKKwogc3RhdGljIFB5T2JqZWN0ICoKIHRiX2RpcihQeVRyYWNlYmFja09iamVjdCAqc2VsZikKIHsKQEAgLTE1Miw3ICsxNTcsNiBAQAogICAgIGNvbnN0IGNoYXIqIGZpbGVwYXRoOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIFB5T2JqZWN0KiByZXN1bHQ7Ci0gICAgX1B5X0lERU5USUZJRVIob3Blbik7CiAKICAgICBmaWxlYnl0ZXMgPSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKICAgICBpZiAoZmlsZWJ5dGVzID09IE5VTEwpIHsKQEAgLTE2OSw3ICsxNzMsNyBAQAogICAgICAgICB0YWlsKys7CiAgICAgdGFpbGxlbiA9IHN0cmxlbih0YWlsKTsKIAotICAgIHN5c3BhdGggPSBQeVN5c19HZXRPYmplY3QoInBhdGgiKTsKKyAgICBzeXNwYXRoID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BhdGgpOwogICAgIGlmIChzeXNwYXRoID09IE5VTEwgfHwgIVB5TGlzdF9DaGVjayhzeXNwYXRoKSkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBucGF0aCA9IFB5TGlzdF9TaXplKHN5c3BhdGgpOwpAQCAtMjMyLDkgKzIzNiw2IEBACiAgICAgY2hhciBidWZbTUFYUEFUSExFTisxXTsKICAgICBpbnQga2luZDsKICAgICB2b2lkICpkYXRhOwotICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKLSAgICBfUHlfSURFTlRJRklFUihvcGVuKTsKLSAgICBfUHlfSURFTlRJRklFUihUZXh0SU9XcmFwcGVyKTsKIAogICAgIC8qIG9wZW4gdGhlIGZpbGUgKi8KICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKQEAgLTI0NiwxMCArMjQ3LDEyIEBACiAgICAgYmluYXJ5ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChpbywgJlB5SWRfb3BlbiwgIk9zIiwgZmlsZW5hbWUsICJyYiIpOwogCiAgICAgaWYgKGJpbmFyeSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKICAgICAgICAgYmluYXJ5ID0gX1B5X0ZpbmRTb3VyY2VGaWxlKGZpbGVuYW1lLCBidWYsIHNpemVvZihidWYpLCBpbyk7CiAgICAgICAgIGlmIChiaW5hcnkgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGlvKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNjEsNiArMjY0LDggQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGZvdW5kX2VuY29kaW5nID0gUHlUb2tlbml6ZXJfRmluZEVuY29kaW5nRmlsZW5hbWUoZmQsIGZpbGVuYW1lKTsKKyAgICBpZiAoZm91bmRfZW5jb2RpbmcgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICBlbmNvZGluZyA9IChmb3VuZF9lbmNvZGluZyAhPSBOVUxMKSA/IGZvdW5kX2VuY29kaW5nIDogInV0Zi04IjsKICAgICAvKiBSZXNldCBwb3NpdGlvbiAqLwogICAgIGlmIChsc2VlayhmZCwgMCwgU0VFS19TRVQpID09IChvZmZfdCktMSkgewpAQCAtNDY5LDEzICs0NzQsMTMgQEAKICAgICB3cml0ZShmZCwgYnVmZmVyLCBsZW4pOwogfQogCi0vKiBGb3JtYXQgYW4gaW50ZWdlciBpbiByYW5nZSBbMDsgMHhmZmZmZmZmZl0gdG8gaGV4ZGVjaW1hbCBvZiAnd2lkdGgnIGRpZ2l0cywKKy8qIEZvcm1hdCBhbiBpbnRlZ2VyIGluIHJhbmdlIFswOyAweGZmZmZmZmZmXSB0byBoZXhhZGVjaW1hbCBvZiAnd2lkdGgnIGRpZ2l0cywKICAgIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSBmaWxlIGZkLgogCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHNpZ25hbCBzYWZlLiAqLwogCiBzdGF0aWMgdm9pZAotZHVtcF9oZXhhZGVjaW1hbChpbnQgd2lkdGgsIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBmZCkKK2R1bXBfaGV4YWRlY2ltYWwoaW50IGZkLCB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgd2lkdGgpCiB7CiAgICAgaW50IGxlbjsKICAgICBjaGFyIGJ1ZmZlcltzaXplb2YodW5zaWduZWQgbG9uZykgKiAyICsgMV07CkBAIC01NDIsMTUgKzU0NywxNSBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhmZikgewogICAgICAgICAgICAgUFVUUyhmZCwgIlxceCIpOwotICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbCgyLCBjaCwgZmQpOworICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgY2gsIDIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhmZmZmKSB7CiAgICAgICAgICAgICBQVVRTKGZkLCAiXFx1Iik7Ci0gICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKDQsIGNoLCBmZCk7CisgICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCBjaCwgNCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQVVRTKGZkLCAiXFxVIik7Ci0gICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKDgsIGNoLCBmZCk7CisgICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCBjaCwgOCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHRydW5jYXRlZCkKQEAgLTYwMSw3ICs2MDYsNyBAQAogICAgIHVuc2lnbmVkIGludCBkZXB0aDsKIAogICAgIGlmICh3cml0ZV9oZWFkZXIpCi0gICAgICAgIFBVVFMoZmQsICJUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOlxuIik7CisgICAgICAgIFBVVFMoZmQsICJTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6XG4iKTsKIAogICAgIGZyYW1lID0gX1B5VGhyZWFkU3RhdGVfR2V0RnJhbWUodHN0YXRlKTsKICAgICBpZiAoZnJhbWUgPT0gTlVMTCkKQEAgLTYzOSw4ICs2NDQsOCBAQAogICAgICAgICBQVVRTKGZkLCAiQ3VycmVudCB0aHJlYWQgMHgiKTsKICAgICBlbHNlCiAgICAgICAgIFBVVFMoZmQsICJUaHJlYWQgMHgiKTsKLSAgICBkdW1wX2hleGFkZWNpbWFsKHNpemVvZihsb25nKSoyLCAodW5zaWduZWQgbG9uZyl0c3RhdGUtPnRocmVhZF9pZCwgZmQpOwotICAgIFBVVFMoZmQsICI6XG4iKTsKKyAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCAodW5zaWduZWQgbG9uZyl0c3RhdGUtPnRocmVhZF9pZCwgc2l6ZW9mKGxvbmcpKjIpOworICAgIFBVVFMoZmQsICIgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOlxuIik7CiB9CiAKIGNvbnN0IGNoYXIqCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggZmQ3N2U0Yi4uNzkwYjk0NyAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSw1ICsxLDUgQEAKLVRoaXMgaXMgUHl0aG9uIHZlcnNpb24gMy4zLjQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoaXMgaXMgUHl0aG9uIHZlcnNpb24gMy40LjAgcmVsZWFzZSBjYW5kaWRhdGUgMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIENvcHlyaWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwKIDIwMTIsIDIwMTMsIDIwMTQgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTIsOSArNTIsOSBAQAogLS0tLS0tLS0tLQogCiBXZSB0cnkgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgdGhlIGNoYW5nZXMgaW4gdGhlICJXaGF0J3MgTmV3IGluCi1QeXRob24gMy4zIiBkb2N1bWVudCwgZm91bmQgYXQKK1B5dGhvbiAzLjQiIGRvY3VtZW50LCBmb3VuZCBhdAogCi0gICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjMvd2hhdHNuZXcvMy4zLmh0bWwKKyAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC93aGF0c25ldy8zLjQuaHRtbAogCiBGb3IgYSBtb3JlIGRldGFpbGVkIGNoYW5nZSBsb2csIHJlYWQgTWlzYy9ORVdTICh0aG91Z2ggdGhpcyBmaWxlLCB0b28sIGlzCiBpbmNvbXBsZXRlLCBhbmQgYWxzbyBkb2Vzbid0IGxpc3QgYW55dGhpbmcgbWVyZ2VkIGluIGZyb20gdGhlIDIuNyByZWxlYXNlIHVuZGVyCkBAIC02Nyw5ICs2Nyw5IEBACiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKLURvY3VtZW50YXRpb24gZm9yIFB5dGhvbiAzLjMgaXMgb25saW5lLCB1cGRhdGVkIGRhaWx5OgorRG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDMuNCBpcyBvbmxpbmUsIHVwZGF0ZWQgZGFpbHk6CiAKLSAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy8KKyAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC8KIAogSXQgY2FuIGFsc28gYmUgZG93bmxvYWRlZCBpbiBtYW55IGZvcm1hdHMgZm9yIGZhc3RlciBhY2Nlc3MuICBUaGUgZG9jdW1lbnRhdGlvbgogaXMgZG93bmxvYWRhYmxlIGluIEhUTUwsIFBERiwgYW5kIHJlU3RydWN0dXJlZFRleHQgZm9ybWF0czsgdGhlIGxhdHRlciB2ZXJzaW9uCkBAIC05NCw3ICs5NCw3IEBACiBBIHNvdXJjZS10by1zb3VyY2UgdHJhbnNsYXRpb24gdG9vbCwgIjJ0bzMiLCBjYW4gdGFrZSBjYXJlIG9mIHRoZSBtdW5kYW5lIHRhc2sKIG9mIGNvbnZlcnRpbmcgbGFyZ2UgYW1vdW50cyBvZiBzb3VyY2UgY29kZS4gIEl0IGlzIG5vdCBhIGNvbXBsZXRlIHNvbHV0aW9uIGJ1dAogaXMgY29tcGxlbWVudGVkIGJ5IHRoZSBkZXByZWNhdGlvbiB3YXJuaW5ncyBpbiAyLjYuICBTZWUKLWh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zL2xpYnJhcnkvMnRvMy5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLgoraHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvbGlicmFyeS8ydG8zLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAogVGVzdGluZwpAQCAtMTMyLDcgKzEzMiw3IEBACiBJbnN0YWxsIHRoYXQgdmVyc2lvbiB1c2luZyAibWFrZSBpbnN0YWxsIi4gIEluc3RhbGwgYWxsIG90aGVyIHZlcnNpb25zIHVzaW5nCiAibWFrZSBhbHRpbnN0YWxsIi4KIAotRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGluc3RhbGwgUHl0aG9uIDIuNiwgMi43IGFuZCAzLjMgd2l0aCAyLjcgYmVpbmcgdGhlCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBQeXRob24gMi42LCAyLjcgYW5kIDMuNCB3aXRoIDIuNyBiZWluZyB0aGUKIHByaW1hcnkgdmVyc2lvbiwgeW91IHdvdWxkIGV4ZWN1dGUgIm1ha2UgaW5zdGFsbCIgaW4geW91ciAyLjcgYnVpbGQgZGlyZWN0b3J5CiBhbmQgIm1ha2UgYWx0aW5zdGFsbCIgaW4gdGhlIG90aGVycy4KIApAQCAtMTY4LDcgKzE2OCw3IEBACiBSZWxlYXNlIFNjaGVkdWxlCiAtLS0tLS0tLS0tLS0tLS0tCiAKLVNlZSBQRVAgMzk4IGZvciByZWxlYXNlIGRldGFpbHM6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDM5OC8KK1NlZSBQRVAgNDI5IGZvciByZWxlYXNlIGRldGFpbHM6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDQyOS8KIAogCiBDb3B5cmlnaHQgYW5kIExpY2Vuc2UgSW5mb3JtYXRpb24KZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWFtZDY0LmJhdCBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWFtZDY0LmJhdAppbmRleCBkMmZmMjU1Li40YzNiNjdiIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1hbWQ2NC5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0CkBAIC00LDE4ICs0LDE4IEBACiBjYWxsICJUb29sc1xidWlsZGJvdFxleHRlcm5hbC1jb21tb24uYmF0IgogY2FsbCAiJVZTMTAwQ09NTlRPT0xTJVwuLlwuLlxWQ1x2Y3ZhcnNhbGwuYmF0IiB4ODZfYW1kNjQKIAotaWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRjbDg1Zy5kbGwgKAotICAgIGNkIHRjbC04LjUuMTEuMFx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgaW5zdGFsbAoraWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRjbDg2dGcuZGxsICgKKyAgICBjZCB0Y2wtOC42LjEuMFx3aW4KKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgaW5zdGFsbAogICAgIGNkIC4uXC4uCiApCiAKLWlmIG5vdCBleGlzdCB0Y2x0azY0XGJpblx0azg1Zy5kbGwgKAotICAgIGNkIHRrLTguNS4xMS4wXHdpbiAgICAKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGNsZWFuCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBhbGwKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGluc3RhbGwKK2lmIG5vdCBleGlzdCB0Y2x0azY0XGJpblx0azg2dGcuZGxsICgKKyAgICBjZCB0ay04LjYuMS4wXHdpbiAgICAKKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNi4xLjAgY2xlYW4KKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNi4xLjAgYWxsCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjYuMS4wIGluc3RhbGwKICAgICBjZCAuLlwuLgogKQogCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0IGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtY29tbW9uLmJhdAppbmRleCBjNjI3OGIyLi4yNDRhYmQyIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQKQEAgLTMwLDE5ICszMCwyMCBAQAogKQogCiBAcmVtIHRjbC90awotaWYgbm90IGV4aXN0IHRjbC04LjUuMTEuMCAoCi0gICByZCAvcy9xIHRjbHRrIHRjbHRrNjQKLSAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RjbC04LjUuMTEuMAoraWYgbm90IGV4aXN0IHRjbC04LjYuMS4wICgKKyAgIHJkIC9zL3EgdGNsdGsgdGNsdGs2NCB0Y2wtOC41LjExLjAgdGstOC41LjExLjAKKyAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RjbC04LjYuMS4wCiApCi1pZiBub3QgZXhpc3QgdGstOC41LjExLjAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGstOC41LjExLjAKK2lmIG5vdCBleGlzdCB0ay04LjYuMS4wIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RrLTguNi4xLjAKIAogQHJlbSBzcWxpdGUzCi1pZiBub3QgZXhpc3Qgc3FsaXRlLTMuNy4xMiAoCi0gIHJkIC9zL3Egc3FsaXRlLXNvdXJjZS0zLjcuNAotICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9zcWxpdGUtMy43LjEyCitpZiBub3QgZXhpc3Qgc3FsaXRlLTMuOC4xICgKKyAgcmQgL3MvcSBzcWxpdGUtc291cmNlLTMuNy4xMgorICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9zcWxpdGUtMy44LjEKICkKIAogQHJlbSBsem1hCi1pZiBub3QgZXhpc3QgeHotNS4wLjMgKAotICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC94ei01LjAuMworaWYgbm90IGV4aXN0IHh6LTUuMC41ICgKKyAgcmQgL3MvcSB4ei01LjAuMworICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC94ei01LjAuNQogKQpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0IGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0CmluZGV4IGVkNWMxMGUuLmM1ODBhMTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQKQEAgLTQsMTggKzQsMTggQEAKIGNhbGwgIlRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLWNvbW1vbi5iYXQiCiBjYWxsICIlVlMxMDBDT01OVE9PTFMlXHZzdmFyczMyLmJhdCIKIAotaWYgbm90IGV4aXN0IHRjbHRrXGJpblx0Y2w4NWcuZGxsICgKK2lmIG5vdCBleGlzdCB0Y2x0a1xiaW5cdGNsODZ0Zy5kbGwgKAogICAgIEByZW0gYWxsIGFuZCBpbnN0YWxsIG5lZWQgdG8gYmUgc2VwYXJhdGUgaW52b2NhdGlvbnMsIG90aGVyd2lzZSBubWFrZWhscCBpcyBub3QgZm91bmQgb24gaW5zdGFsbAotICAgIGNkIHRjbC04LjUuMTEuMFx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgY2xlYW4gYWxsIAorICAgIGNkIHRjbC04LjYuMS4wXHdpbgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBjbGVhbiBhbGwgCiAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKICAgICBjZCAuLlwuLgogKQogCi1pZiBub3QgZXhpc3QgdGNsdGtcYmluXHRrODVnLmRsbCAoCi0gICAgY2QgdGstOC41LjExLjBcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGNsZWFuCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBpbnN0YWxsCitpZiBub3QgZXhpc3QgdGNsdGtcYmluXHRrODZ0Zy5kbGwgKAorICAgIGNkIHRrLTguNi4xLjBcd2luCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNi4xLjAgY2xlYW4KKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBhbGwKKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBpbnN0YWxsCiAgICAgY2QgLi5cLi4KICkKZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L3Rlc3QuYmF0IGIvVG9vbHMvYnVpbGRib3QvdGVzdC5iYXQKaW5kZXggNGY0YzZhYS4uNGU0ZGIxMCAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvdGVzdC5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvdGVzdC5iYXQKQEAgLTEsMyArMSwzIEBACiBAcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJ0ZXN0IiBzdGVwLgogY2QgUENidWlsZAotY2FsbCBydC5iYXQgLWQgLXEgLXVhbGwgLXJ3VyAtbiAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQorY2FsbCBydC5iYXQgLWQgLXEgLXVhbGwgLXJ3VyAtbiAtLXRpbWVvdXQ9MzYwMCAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQpkaWZmIC0tZ2l0IGEvVG9vbHMvY2xpbmljL2NsaW5pYy5weSBiL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjhhMTQzNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkKQEAgLTAsMCArMSw0MTk5IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisjCisjIEFyZ3VtZW50IENsaW5pYworIyBDb3B5cmlnaHQgMjAxMi0yMDEzIGJ5IExhcnJ5IEhhc3RpbmdzLgorIyBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgorIworCitpbXBvcnQgYWJjCitpbXBvcnQgYXN0CitpbXBvcnQgYXRleGl0CitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgY29weQoraW1wb3J0IGNwcAoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgaW8KK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBvcworaW1wb3J0IHBwcmludAoraW1wb3J0IHJlCitpbXBvcnQgc2hsZXgKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRleHR3cmFwCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdXVpZAorCisjIFRPRE86CisjCisjIHNvb246CisjCisjICogYWxsb3cgbWl4aW5nIGFueSB0d28gb2Yge3Bvc2l0aW9uYWwtb25seSwgcG9zaXRpb25hbC1vci1rZXl3b3JkLAorIyAgIGtleXdvcmQtb25seX0KKyMgICAgICAgKiBkaWN0IGNvbnN0cnVjdG9yIHVzZXMgcG9zaXRpb25hbC1vbmx5IGFuZCBrZXl3b3JkLW9ubHkKKyMgICAgICAgKiBtYXggYW5kIG1pbiB1c2UgcG9zaXRpb25hbCBvbmx5IHdpdGggYW4gb3B0aW9uYWwgZ3JvdXAKKyMgICAgICAgICBhbmQga2V5d29yZC1vbmx5CisjCisKK3ZlcnNpb24gPSAnMScKKworX2VtcHR5ID0gaW5zcGVjdC5fZW1wdHkKK192b2lkID0gaW5zcGVjdC5fdm9pZAorCitOb25lVHlwZSA9IHR5cGUoTm9uZSkKKworY2xhc3MgVW5zcGVjaWZpZWQ6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxVbnNwZWNpZmllZD4nCisKK3Vuc3BlY2lmaWVkID0gVW5zcGVjaWZpZWQoKQorCisKK2NsYXNzIE51bGw6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxOdWxsPicKKworTlVMTCA9IE51bGwoKQorCisKK2NsYXNzIFVua25vd246CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxVbmtub3duPicKKwordW5rbm93biA9IFVua25vd24oKQorCisKK2RlZiBfdGV4dF9hY2N1bXVsYXRvcigpOgorICAgIHRleHQgPSBbXQorICAgIGRlZiBvdXRwdXQoKToKKyAgICAgICAgcyA9ICcnLmpvaW4odGV4dCkKKyAgICAgICAgdGV4dC5jbGVhcigpCisgICAgICAgIHJldHVybiBzCisgICAgcmV0dXJuIHRleHQsIHRleHQuYXBwZW5kLCBvdXRwdXQKKworCitkZWYgdGV4dF9hY2N1bXVsYXRvcigpOgorICAgICIiIgorICAgIENyZWF0ZXMgYSBzaW1wbGUgdGV4dCBhY2N1bXVsYXRvciAvIGpvaW5lci4KKworICAgIFJldHVybnMgYSBwYWlyIG9mIGNhbGxhYmxlczoKKyAgICAgICAgYXBwZW5kLCBvdXRwdXQKKyAgICAiYXBwZW5kIiBhcHBlbmRzIGEgc3RyaW5nIHRvIHRoZSBhY2N1bXVsYXRvci4KKyAgICAib3V0cHV0IiByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgYWNjdW11bGF0b3IKKyAgICAgICBqb2luZWQgdG9nZXRoZXIgKCcnLmpvaW4oYWNjdW11bGF0b3IpKSBhbmQKKyAgICAgICBlbXB0aWVzIHRoZSBhY2N1bXVsYXRvci4KKyAgICAiIiIKKyAgICB0ZXh0LCBhcHBlbmQsIG91dHB1dCA9IF90ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICByZXR1cm4gYXBwZW5kLCBvdXRwdXQKKworCitkZWYgd2Fybl9vcl9mYWlsKGZhaWw9RmFsc2UsICphcmdzLCBmaWxlbmFtZT1Ob25lLCBsaW5lX251bWJlcj1Ob25lKToKKyAgICBqb2luZWQgPSAiICIuam9pbihbc3RyKGEpIGZvciBhIGluIGFyZ3NdKQorICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgaWYgZmFpbDoKKyAgICAgICAgYWRkKCJFcnJvciIpCisgICAgZWxzZToKKyAgICAgICAgYWRkKCJXYXJuaW5nIikKKyAgICBpZiBjbGluaWM6CisgICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlbmFtZSA9IGNsaW5pYy5maWxlbmFtZQorICAgICAgICBpZiBnZXRhdHRyKGNsaW5pYywgJ2Jsb2NrX3BhcnNlcicsIE5vbmUpIGFuZCAobGluZV9udW1iZXIgaXMgTm9uZSk6CisgICAgICAgICAgICBsaW5lX251bWJlciA9IGNsaW5pYy5ibG9ja19wYXJzZXIubGluZV9udW1iZXIKKyAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgYWRkKCcgaW4gZmlsZSAiJyArIGZpbGVuYW1lICsgJyInKQorICAgIGlmIGxpbmVfbnVtYmVyIGlzIG5vdCBOb25lOgorICAgICAgICBhZGQoIiBvbiBsaW5lICIgKyBzdHIobGluZV9udW1iZXIpKQorICAgIGFkZCgnOlxuJykKKyAgICBhZGQoam9pbmVkKQorICAgIHByaW50KG91dHB1dCgpKQorICAgIGlmIGZhaWw6CisgICAgICAgIHN5cy5leGl0KC0xKQorCisKK2RlZiB3YXJuKCphcmdzLCBmaWxlbmFtZT1Ob25lLCBsaW5lX251bWJlcj1Ob25lKToKKyAgICByZXR1cm4gd2Fybl9vcl9mYWlsKEZhbHNlLCAqYXJncywgZmlsZW5hbWU9ZmlsZW5hbWUsIGxpbmVfbnVtYmVyPWxpbmVfbnVtYmVyKQorCitkZWYgZmFpbCgqYXJncywgZmlsZW5hbWU9Tm9uZSwgbGluZV9udW1iZXI9Tm9uZSk6CisgICAgcmV0dXJuIHdhcm5fb3JfZmFpbChUcnVlLCAqYXJncywgZmlsZW5hbWU9ZmlsZW5hbWUsIGxpbmVfbnVtYmVyPWxpbmVfbnVtYmVyKQorCisKK2RlZiBxdW90ZWRfZm9yX2Nfc3RyaW5nKHMpOgorICAgIGZvciBvbGQsIG5ldyBpbiAoCisgICAgICAgICgnXFwnLCAnXFxcXCcpLCAjIG11c3QgYmUgZmlyc3QhCisgICAgICAgICgnIicsICdcXCInKSwKKyAgICAgICAgKCInIiwgIlxcJyIpLAorICAgICAgICApOgorICAgICAgICBzID0gcy5yZXBsYWNlKG9sZCwgbmV3KQorICAgIHJldHVybiBzCisKK2RlZiBjX3JlcHIocyk6CisgICAgcmV0dXJuICciJyArIHMgKyAnIicKKworCitpc19sZWdhbF9jX2lkZW50aWZpZXIgPSByZS5jb21waWxlKCdeW0EtWmEtel9dW0EtWmEtejAtOV9dKiQnKS5tYXRjaAorCitkZWYgaXNfbGVnYWxfcHlfaWRlbnRpZmllcihzKToKKyAgICByZXR1cm4gYWxsKGlzX2xlZ2FsX2NfaWRlbnRpZmllcihmaWVsZCkgZm9yIGZpZWxkIGluIHMuc3BsaXQoJy4nKSkKKworIyBpZGVudGlmaWVycyB0aGF0IGFyZSBva2F5IGluIFB5dGhvbiBidXQgYXJlbid0IGEgZ29vZCBpZGVhIGluIEMuCisjIHNvIGlmIHRoZXkncmUgdXNlZCBBcmd1bWVudCBDbGluaWMgd2lsbCBhZGQgIl92YWx1ZSIgdG8gdGhlIGVuZAorIyBvZiB0aGUgbmFtZSBpbiBDLgorY19rZXl3b3JkcyA9IHNldCgiIiIKK2FzbSBhdXRvIGJyZWFrIGNhc2UgY2hhciBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRvIGRvdWJsZQorZWxzZSBlbnVtIGV4dGVybiBmbG9hdCBmb3IgZ290byBpZiBpbmxpbmUgaW50IGxvbmcKK3JlZ2lzdGVyIHJldHVybiBzaG9ydCBzaWduZWQgc2l6ZW9mIHN0YXRpYyBzdHJ1Y3Qgc3dpdGNoCit0eXBlZGVmIHR5cGVvZiB1bmlvbiB1bnNpZ25lZCB2b2lkIHZvbGF0aWxlIHdoaWxlCisiIiIuc3RyaXAoKS5zcGxpdCgpKQorCitkZWYgZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzKToKKyAgICAjIGZvciBub3csIGp1c3QgY29tcGxhaW4gaWYgd2hhdCB3ZSdyZSBnaXZlbiBpc24ndCBsZWdhbAorICAgIGlmIG5vdCBpc19sZWdhbF9jX2lkZW50aWZpZXIocyk6CisgICAgICAgIGZhaWwoIklsbGVnYWwgQyBpZGVudGlmaWVyOiB7fSIuZm9ybWF0KHMpKQorICAgICMgYnV0IGlmIHdlIHBpY2tlZCBhIEMga2V5d29yZCwgcGljayBzb21ldGhpbmcgZWxzZQorICAgIGlmIHMgaW4gY19rZXl3b3JkczoKKyAgICAgICAgcmV0dXJuIHMgKyAiX3ZhbHVlIgorICAgIHJldHVybiBzCisKK2RlZiByc3RyaXBfbGluZXMocyk6CisgICAgdGV4dCwgYWRkLCBvdXRwdXQgPSBfdGV4dF9hY2N1bXVsYXRvcigpCisgICAgZm9yIGxpbmUgaW4gcy5zcGxpdCgnXG4nKToKKyAgICAgICAgYWRkKGxpbmUucnN0cmlwKCkpCisgICAgICAgIGFkZCgnXG4nKQorICAgIHRleHQucG9wKCkKKyAgICByZXR1cm4gb3V0cHV0KCkKKworZGVmIGxpbmVhcl9mb3JtYXQocywgKiprd2FyZ3MpOgorICAgICIiIgorICAgIFBlcmZvcm0gc3RyLmZvcm1hdC1saWtlIHN1YnN0aXR1dGlvbiwgZXhjZXB0OgorICAgICAgKiBUaGUgc3RyaW5ncyBzdWJzdGl0dXRlZCBtdXN0IGJlIG9uIGxpbmVzIGJ5CisgICAgICAgIHRoZW1zZWx2ZXMuICAoVGhpcyBsaW5lIGlzIHRoZSAic291cmNlIGxpbmUiLikKKyAgICAgICogSWYgdGhlIHN1YnN0aXR1dGlvbiB0ZXh0IGlzIGVtcHR5LCB0aGUgc291cmNlIGxpbmUKKyAgICAgICAgaXMgcmVtb3ZlZCBpbiB0aGUgb3V0cHV0LgorICAgICAgKiBJZiB0aGUgZmllbGQgaXMgbm90IHJlY29nbml6ZWQsIHRoZSBvcmlnaW5hbCBsaW5lCisgICAgICAgIGlzIHBhc3NlZCB1bm1vZGlmaWVkIHRocm91Z2ggdG8gdGhlIG91dHB1dC4KKyAgICAgICogSWYgdGhlIHN1YnN0aXR1dGlvbiB0ZXh0IGlzIG5vdCBlbXB0eToKKyAgICAgICAgICAqIEVhY2ggbGluZSBvZiB0aGUgc3Vic3RpdHV0ZWQgdGV4dCBpcyBpbmRlbnRlZAorICAgICAgICAgICAgYnkgdGhlIGluZGVudCBvZiB0aGUgc291cmNlIGxpbmUuCisgICAgICAgICAgKiBBIG5ld2xpbmUgd2lsbCBiZSBhZGRlZCB0byB0aGUgZW5kLgorICAgICIiIgorCisgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICBmb3IgbGluZSBpbiBzLnNwbGl0KCdcbicpOgorICAgICAgICBpbmRlbnQsIGN1cmx5LCB0cmFpbGluZyA9IGxpbmUucGFydGl0aW9uKCd7JykKKyAgICAgICAgaWYgbm90IGN1cmx5OgorICAgICAgICAgICAgYWRkKGxpbmUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbmFtZSwgY3VybCwgdHJhaWxpbmcgPSB0cmFpbGluZy5wYXJ0aXRpb24oJ30nKQorICAgICAgICBpZiBub3QgY3VybHkgb3IgbmFtZSBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgYWRkKGxpbmUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgdHJhaWxpbmc6CisgICAgICAgICAgICBmYWlsKCJUZXh0IGZvdW5kIGFmdGVyIHsiICsgbmFtZSArICJ9IGJsb2NrIG1hcmtlciEgIEl0IG11c3QgYmUgb24gYSBsaW5lIGJ5IGl0c2VsZi4iKQorICAgICAgICBpZiBpbmRlbnQuc3RyaXAoKToKKyAgICAgICAgICAgIGZhaWwoIk5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgZm91bmQgYmVmb3JlIHsiICsgbmFtZSArICJ9IGJsb2NrIG1hcmtlciEgIEl0IG11c3QgYmUgb24gYSBsaW5lIGJ5IGl0c2VsZi4iKQorCisgICAgICAgIHZhbHVlID0ga3dhcmdzW25hbWVdCisgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdmFsdWUgPSB0ZXh0d3JhcC5pbmRlbnQocnN0cmlwX2xpbmVzKHZhbHVlKSwgaW5kZW50KQorICAgICAgICBhZGQodmFsdWUpCisgICAgICAgIGFkZCgnXG4nKQorCisgICAgcmV0dXJuIG91dHB1dCgpWzotMV0KKworZGVmIGluZGVudF9hbGxfbGluZXMocywgcHJlZml4KToKKyAgICAiIiIKKyAgICBSZXR1cm5zICdzJywgd2l0aCAncHJlZml4JyBwcmVwZW5kZWQgdG8gYWxsIGxpbmVzLgorCisgICAgSWYgdGhlIGxhc3QgbGluZSBpcyBlbXB0eSwgcHJlZml4IGlzIG5vdCBwcmVwZW5kZWQKKyAgICB0byBpdC4gIChJZiBzIGlzIGJsYW5rLCByZXR1cm5zIHMgdW5jaGFuZ2VkLikKKworICAgICh0ZXh0d3JhcC5pbmRlbnQgb25seSBhZGRzIHRvIG5vbi1ibGFuayBsaW5lcy4pCisgICAgIiIiCisgICAgc3BsaXQgPSBzLnNwbGl0KCdcbicpCisgICAgbGFzdCA9IHNwbGl0LnBvcCgpCisgICAgZmluYWwgPSBbXQorICAgIGZvciBsaW5lIGluIHNwbGl0OgorICAgICAgICBmaW5hbC5hcHBlbmQocHJlZml4KQorICAgICAgICBmaW5hbC5hcHBlbmQobGluZSkKKyAgICAgICAgZmluYWwuYXBwZW5kKCdcbicpCisgICAgaWYgbGFzdDoKKyAgICAgICAgZmluYWwuYXBwZW5kKHByZWZpeCkKKyAgICAgICAgZmluYWwuYXBwZW5kKGxhc3QpCisgICAgcmV0dXJuICcnLmpvaW4oZmluYWwpCisKK2RlZiBzdWZmaXhfYWxsX2xpbmVzKHMsIHN1ZmZpeCk6CisgICAgIiIiCisgICAgUmV0dXJucyAncycsIHdpdGggJ3N1ZmZpeCcgYXBwZW5kZWQgdG8gYWxsIGxpbmVzLgorCisgICAgSWYgdGhlIGxhc3QgbGluZSBpcyBlbXB0eSwgc3VmZml4IGlzIG5vdCBhcHBlbmRlZAorICAgIHRvIGl0LiAgKElmIHMgaXMgYmxhbmssIHJldHVybnMgcyB1bmNoYW5nZWQuKQorICAgICIiIgorICAgIHNwbGl0ID0gcy5zcGxpdCgnXG4nKQorICAgIGxhc3QgPSBzcGxpdC5wb3AoKQorICAgIGZpbmFsID0gW10KKyAgICBmb3IgbGluZSBpbiBzcGxpdDoKKyAgICAgICAgZmluYWwuYXBwZW5kKGxpbmUpCisgICAgICAgIGZpbmFsLmFwcGVuZChzdWZmaXgpCisgICAgICAgIGZpbmFsLmFwcGVuZCgnXG4nKQorICAgIGlmIGxhc3Q6CisgICAgICAgIGZpbmFsLmFwcGVuZChsYXN0KQorICAgICAgICBmaW5hbC5hcHBlbmQoc3VmZml4KQorICAgIHJldHVybiAnJy5qb2luKGZpbmFsKQorCisKK2RlZiB2ZXJzaW9uX3NwbGl0dGVyKHMpOgorICAgICIiIlNwbGl0cyBhIHZlcnNpb24gc3RyaW5nIGludG8gYSB0dXBsZSBvZiBpbnRlZ2Vycy4KKworICAgIFRoZSBmb2xsb3dpbmcgQVNDSUkgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCwgYW5kIGVtcGxveQorICAgIHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbnM6CisgICAgICAgIGEgLT4gLTMKKyAgICAgICAgYiAtPiAtMgorICAgICAgICBjIC0+IC0xCisgICAgKFRoaXMgcGVybWl0cyBQeXRob24tc3R5bGUgdmVyc2lvbiBzdHJpbmdzIHN1Y2ggYXMgIjEuNGIzIi4pCisgICAgIiIiCisgICAgdmVyc2lvbiA9IFtdCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGRlZiBmbHVzaCgpOgorICAgICAgICBpZiBub3QgYWNjdW11bGF0b3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uIHN0cmluZzogJyArIHJlcHIocykpCisgICAgICAgIHZlcnNpb24uYXBwZW5kKGludCgnJy5qb2luKGFjY3VtdWxhdG9yKSkpCisgICAgICAgIGFjY3VtdWxhdG9yLmNsZWFyKCkKKworICAgIGZvciBjIGluIHM6CisgICAgICAgIGlmIGMuaXNkaWdpdCgpOgorICAgICAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kKGMpCisgICAgICAgIGVsaWYgYyA9PSAnLic6CisgICAgICAgICAgICBmbHVzaCgpCisgICAgICAgIGVsaWYgYyBpbiAnYWJjJzoKKyAgICAgICAgICAgIGZsdXNoKCkKKyAgICAgICAgICAgIHZlcnNpb24uYXBwZW5kKCdhYmMnLmluZGV4KGMpIC0gMykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0lsbGVnYWwgY2hhcmFjdGVyICcgKyByZXByKGMpICsgJyBpbiB2ZXJzaW9uIHN0cmluZyAnICsgcmVwcihzKSkKKyAgICBmbHVzaCgpCisgICAgcmV0dXJuIHR1cGxlKHZlcnNpb24pCisKK2RlZiB2ZXJzaW9uX2NvbXBhcml0b3IodmVyc2lvbjEsIHZlcnNpb24yKToKKyAgICBpdGVyYXRvciA9IGl0ZXJ0b29scy56aXBfbG9uZ2VzdCh2ZXJzaW9uX3NwbGl0dGVyKHZlcnNpb24xKSwgdmVyc2lvbl9zcGxpdHRlcih2ZXJzaW9uMiksIGZpbGx2YWx1ZT0wKQorICAgIGZvciBpLCAoYSwgYikgaW4gZW51bWVyYXRlKGl0ZXJhdG9yKToKKyAgICAgICAgaWYgYSA8IGI6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgaWYgYSA+IGI6CisgICAgICAgICAgICByZXR1cm4gMQorICAgIHJldHVybiAwCisKKworY2xhc3MgQ1JlbmRlckRhdGE6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyB0byBkZWNsYXJlIHZhcmlhYmxlcy4KKyAgICAgICAgIyBTaG91bGQgYmUgZnVsbCBsaW5lcyB3aXRoIFxuIGVvbCBjaGFyYWN0ZXJzLgorICAgICAgICBzZWxmLmRlY2xhcmF0aW9ucyA9IFtdCisKKyAgICAgICAgIyBUaGUgQyBzdGF0ZW1lbnRzIHJlcXVpcmVkIHRvIGluaXRpYWxpemUgdGhlIHZhcmlhYmxlcyBiZWZvcmUgdGhlIHBhcnNlIGNhbGwuCisgICAgICAgICMgU2hvdWxkIGJlIGZ1bGwgbGluZXMgd2l0aCBcbiBlb2wgY2hhcmFjdGVycy4KKyAgICAgICAgc2VsZi5pbml0aWFsaXplcnMgPSBbXQorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyBuZWVkZWQgdG8gZHluYW1pY2FsbHkgbW9kaWZ5IHRoZSB2YWx1ZXMKKyAgICAgICAgIyBwYXJzZWQgYnkgdGhlIHBhcnNlIGNhbGwsIGJlZm9yZSBjYWxsaW5nIHRoZSBpbXBsLgorICAgICAgICBzZWxmLm1vZGlmaWNhdGlvbnMgPSBbXQorCisgICAgICAgICMgVGhlIGVudHJpZXMgZm9yIHRoZSAia2V5d29yZHMiIGFycmF5IGZvciBQeUFyZ19QYXJzZVR1cGxlLgorICAgICAgICAjIFNob3VsZCBiZSBpbmRpdmlkdWFsIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBuYW1lcy4KKyAgICAgICAgc2VsZi5rZXl3b3JkcyA9IFtdCisKKyAgICAgICAgIyBUaGUgImZvcm1hdCB1bml0cyIgZm9yIFB5QXJnX1BhcnNlVHVwbGUuCisgICAgICAgICMgU2hvdWxkIGJlIGluZGl2aWR1YWwgc3RyaW5ncyB0aGF0IHdpbGwgZ2V0CisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXRzID0gW10KKworICAgICAgICAjIFRoZSB2YXJhcmdzIGFyZ3VtZW50cyBmb3IgUHlBcmdfUGFyc2VUdXBsZS4KKyAgICAgICAgc2VsZi5wYXJzZV9hcmd1bWVudHMgPSBbXQorCisgICAgICAgICMgVGhlIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMgZm9yIHRoZSBpbXBsIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmltcGxfcGFyYW1ldGVycyA9IFtdCisKKyAgICAgICAgIyBUaGUgYXJndW1lbnRzIHRvIHRoZSBpbXBsIGZ1bmN0aW9uIGF0IHRoZSB0aW1lIGl0J3MgY2FsbGVkLgorICAgICAgICBzZWxmLmltcGxfYXJndW1lbnRzID0gW10KKworICAgICAgICAjIEZvciByZXR1cm4gY29udmVydGVyczogdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRoYXQKKyAgICAgICAgIyBzaG91bGQgcmVjZWl2ZSB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGltcGwuCisgICAgICAgIHNlbGYucmV0dXJuX3ZhbHVlID0gInJldHVybl92YWx1ZSIKKworICAgICAgICAjIEZvciByZXR1cm4gY29udmVydGVyczogdGhlIGNvZGUgdG8gY29udmVydCB0aGUgcmV0dXJuCisgICAgICAgICMgdmFsdWUgZnJvbSB0aGUgcGFyc2UgZnVuY3Rpb24uICBUaGlzIGlzIGFsc28gd2hlcmUKKyAgICAgICAgIyB5b3Ugc2hvdWxkIGNoZWNrIHRoZSBfcmV0dXJuX3ZhbHVlIGZvciBlcnJvcnMsIGFuZAorICAgICAgICAjICJnb3RvIGV4aXQiIGlmIHRoZXJlIGFyZSBhbnkuCisgICAgICAgIHNlbGYucmV0dXJuX2NvbnZlcnNpb24gPSBbXQorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBjbGVhbiB1cCBhZnRlciB0aGUgaW1wbCBjYWxsLgorICAgICAgICBzZWxmLmNsZWFudXAgPSBbXQorCisKK2NsYXNzIEZvcm1hdENvdW50ZXJGb3JtYXR0ZXIoc3RyaW5nLkZvcm1hdHRlcik6CisgICAgIiIiCisgICAgVGhpcyBjb3VudHMgaG93IG1hbnkgaW5zdGFuY2VzIG9mIGVhY2ggZm9ybWF0dGVyCisgICAgInJlcGxhY2VtZW50IHN0cmluZyIgYXBwZWFyIGluIHRoZSBmb3JtYXQgc3RyaW5nLgorCisgICAgZS5nLiBhZnRlciBldmFsdWF0aW5nICJzdHJpbmcge2F9LCB7Yn0sIHtjfSwge2F9IgorICAgICAgICAgdGhlIGNvdW50cyBkaWN0IHdvdWxkIG5vdyBsb29rIGxpa2UKKyAgICAgICAgIHsnYSc6IDIsICdiJzogMSwgJ2MnOiAxfQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jb3VudHMgPSBjb2xsZWN0aW9ucy5Db3VudGVyKCkKKworICAgIGRlZiBnZXRfdmFsdWUoc2VsZiwga2V5LCBhcmdzLCBrd2FyZ3MpOgorICAgICAgICBzZWxmLmNvdW50c1trZXldICs9IDEKKyAgICAgICAgcmV0dXJuICcnCisKK2NsYXNzIExhbmd1YWdlKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CisKKyAgICBzdGFydF9saW5lID0gIiIKKyAgICBib2R5X3ByZWZpeCA9ICIiCisgICAgc3RvcF9saW5lID0gIiIKKyAgICBjaGVja3N1bV9saW5lID0gIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHBhc3MKKworICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGNsaW5pYywgc2lnbmF0dXJlcyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwYXJzZV9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdmFsaWRhdGUoc2VsZik6CisgICAgICAgIGRlZiBhc3NlcnRfb25seV9vbmUoYXR0ciwgKmFkZGl0aW9uYWxfZmllbGRzKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgRW5zdXJlcyB0aGF0IHRoZSBzdHJpbmcgZm91bmQgYXQgZ2V0YXR0cihzZWxmLCBhdHRyKQorICAgICAgICAgICAgY29udGFpbnMgZXhhY3RseSBvbmUgZm9ybWF0dGVyIHJlcGxhY2VtZW50IHN0cmluZyBmb3IKKyAgICAgICAgICAgIGVhY2ggdmFsaWQgZmllbGQuICBUaGUgbGlzdCBvZiB2YWxpZCBmaWVsZHMgaXMKKyAgICAgICAgICAgIFsnZHNsX25hbWUnXSBleHRlbmRlZCBieSBhZGRpdGlvbmFsX2ZpZWxkcy4KKworICAgICAgICAgICAgZS5nLgorICAgICAgICAgICAgICAgIHNlbGYuZm10ID0gIntkc2xfbmFtZX0ge2F9IHtifSIKKworICAgICAgICAgICAgICAgICMgdGhpcyBwYXNzZXMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9vbmx5X29uZSgnZm10JywgJ2EnLCAnYicpCisKKyAgICAgICAgICAgICAgICAjIHRoaXMgZmFpbHMsIHRoZSBmb3JtYXQgc3RyaW5nIGhhcyBhIHtifSBpbiBpdAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X29ubHlfb25lKCdmbXQnLCAnYScpCisKKyAgICAgICAgICAgICAgICAjIHRoaXMgZmFpbHMsIHRoZSBmb3JtYXQgc3RyaW5nIGRvZXNuJ3QgaGF2ZSBhIHtjfSBpbiBpdAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X29ubHlfb25lKCdmbXQnLCAnYScsICdiJywgJ2MnKQorCisgICAgICAgICAgICAgICAgIyB0aGlzIGZhaWxzLCB0aGUgZm9ybWF0IHN0cmluZyBoYXMgdHdvIHthfXMgaW4gaXQsCisgICAgICAgICAgICAgICAgIyBpdCBtdXN0IGNvbnRhaW4gZXhhY3RseSBvbmUKKyAgICAgICAgICAgICAgICBzZWxmLmZtdDIgPSAne2RzbF9uYW1lfSB7YX0ge2F9JworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X29ubHlfb25lKCdmbXQyJywgJ2EnKQorCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGZpZWxkcyA9IFsnZHNsX25hbWUnXQorICAgICAgICAgICAgZmllbGRzLmV4dGVuZChhZGRpdGlvbmFsX2ZpZWxkcykKKyAgICAgICAgICAgIGxpbmUgPSBnZXRhdHRyKHNlbGYsIGF0dHIpCisgICAgICAgICAgICBmY2YgPSBGb3JtYXRDb3VudGVyRm9ybWF0dGVyKCkKKyAgICAgICAgICAgIGZjZi5mb3JtYXQobGluZSkKKyAgICAgICAgICAgIGRlZiBsb2NhbF9mYWlsKHNob3VsZF9iZV90aGVyZV9idXRfaXNudCk6CisgICAgICAgICAgICAgICAgaWYgc2hvdWxkX2JlX3RoZXJlX2J1dF9pc250OgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJ7fSB7fSBtdXN0IGNvbnRhaW4ge3t7fX19IGV4YWN0bHkgb25jZSEiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBhdHRyLCBuYW1lKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJ7fSB7fSBtdXN0IG5vdCBjb250YWluIHt7e319fSEiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBhdHRyLCBuYW1lKSkKKworICAgICAgICAgICAgZm9yIG5hbWUsIGNvdW50IGluIGZjZi5jb3VudHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lIGluIGZpZWxkczoKKyAgICAgICAgICAgICAgICAgICAgaWYgY291bnQgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfZmFpbChUcnVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvY2FsX2ZhaWwoRmFsc2UpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWVsZHM6CisgICAgICAgICAgICAgICAgaWYgZmNmLmNvdW50cy5nZXQobmFtZSkgIT0gMToKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxfZmFpbChUcnVlKQorCisgICAgICAgIGFzc2VydF9vbmx5X29uZSgnc3RhcnRfbGluZScpCisgICAgICAgIGFzc2VydF9vbmx5X29uZSgnc3RvcF9saW5lJykKKworICAgICAgICBmaWVsZCA9ICJhcmd1bWVudHMiIGlmICJ7YXJndW1lbnRzfSIgaW4gc2VsZi5jaGVja3N1bV9saW5lIGVsc2UgImNoZWNrc3VtIgorICAgICAgICBhc3NlcnRfb25seV9vbmUoJ2NoZWNrc3VtX2xpbmUnLCBmaWVsZCkKKworCisKK2NsYXNzIFB5dGhvbkxhbmd1YWdlKExhbmd1YWdlKToKKworICAgIGxhbmd1YWdlICAgICAgPSAnUHl0aG9uJworICAgIHN0YXJ0X2xpbmUgICAgPSAiIy8qW3tkc2xfbmFtZX0gaW5wdXRdIgorICAgIGJvZHlfcHJlZml4ICAgPSAiIyIKKyAgICBzdG9wX2xpbmUgICAgID0gIiNbe2RzbF9uYW1lfSBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLyIKKyAgICBjaGVja3N1bV9saW5lID0gIiMvKlt7ZHNsX25hbWV9IGVuZCBnZW5lcmF0ZWQgY29kZToge2FyZ3VtZW50c31dKi8iCisKKworZGVmIHBlcm11dGVfbGVmdF9vcHRpb25fZ3JvdXBzKGwpOgorICAgICIiIgorICAgIEdpdmVuIFsxLCAyLCAzXSwgc2hvdWxkIHlpZWxkOgorICAgICAgICgpCisgICAgICAgKDMsKQorICAgICAgICgyLCAzKQorICAgICAgICgxLCAyLCAzKQorICAgICIiIgorICAgIHlpZWxkIHR1cGxlKCkKKyAgICBhY2N1bXVsYXRvciA9IFtdCisgICAgZm9yIGdyb3VwIGluIHJldmVyc2VkKGwpOgorICAgICAgICBhY2N1bXVsYXRvciA9IGxpc3QoZ3JvdXApICsgYWNjdW11bGF0b3IKKyAgICAgICAgeWllbGQgdHVwbGUoYWNjdW11bGF0b3IpCisKKworZGVmIHBlcm11dGVfcmlnaHRfb3B0aW9uX2dyb3VwcyhsKToKKyAgICAiIiIKKyAgICBHaXZlbiBbMSwgMiwgM10sIHNob3VsZCB5aWVsZDoKKyAgICAgICgpCisgICAgICAoMSwpCisgICAgICAoMSwgMikKKyAgICAgICgxLCAyLCAzKQorICAgICIiIgorICAgIHlpZWxkIHR1cGxlKCkKKyAgICBhY2N1bXVsYXRvciA9IFtdCisgICAgZm9yIGdyb3VwIGluIGw6CisgICAgICAgIGFjY3VtdWxhdG9yLmV4dGVuZChncm91cCkKKyAgICAgICAgeWllbGQgdHVwbGUoYWNjdW11bGF0b3IpCisKKworZGVmIHBlcm11dGVfb3B0aW9uYWxfZ3JvdXBzKGxlZnQsIHJlcXVpcmVkLCByaWdodCk6CisgICAgIiIiCisgICAgR2VuZXJhdG9yIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlIHNldCBvZiBhY2NlcHRhYmxlCisgICAgYXJndW1lbnQgbGlzdHMgZm9yIHRoZSBwcm92aWRlZCBpdGVyYWJsZXMgb2YKKyAgICBhcmd1bWVudCBncm91cHMuICAoQWN0dWFsbHkgaXQgZ2VuZXJhdGVzIGEgdHVwbGUgb2YgdHVwbGVzLikKKworICAgIEFsZ29yaXRobTogcHJlZmVyIGxlZnQgb3B0aW9ucyBvdmVyIHJpZ2h0IG9wdGlvbnMuCisKKyAgICBJZiByZXF1aXJlZCBpcyBlbXB0eSwgbGVmdCBtdXN0IGFsc28gYmUgZW1wdHkuCisgICAgIiIiCisgICAgcmVxdWlyZWQgPSB0dXBsZShyZXF1aXJlZCkKKyAgICByZXN1bHQgPSBbXQorCisgICAgaWYgbm90IHJlcXVpcmVkOgorICAgICAgICBhc3NlcnQgbm90IGxlZnQKKworICAgIGFjY3VtdWxhdG9yID0gW10KKyAgICBjb3VudHMgPSBzZXQoKQorICAgIGZvciByIGluIHBlcm11dGVfcmlnaHRfb3B0aW9uX2dyb3VwcyhyaWdodCk6CisgICAgICAgIGZvciBsIGluIHBlcm11dGVfbGVmdF9vcHRpb25fZ3JvdXBzKGxlZnQpOgorICAgICAgICAgICAgdCA9IGwgKyByZXF1aXJlZCArIHIKKyAgICAgICAgICAgIGlmIGxlbih0KSBpbiBjb3VudHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNvdW50cy5hZGQobGVuKHQpKQorICAgICAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kKHQpCisKKyAgICBhY2N1bXVsYXRvci5zb3J0KGtleT1sZW4pCisgICAgcmV0dXJuIHR1cGxlKGFjY3VtdWxhdG9yKQorCisKK2RlZiBzdHJpcF9sZWFkaW5nX2FuZF90cmFpbGluZ19ibGFua19saW5lcyhzKToKKyAgICBsaW5lcyA9IHMucnN0cmlwKCkuc3BsaXQoJ1xuJykKKyAgICB3aGlsZSBsaW5lczoKKyAgICAgICAgbGluZSA9IGxpbmVzWzBdCisgICAgICAgIGlmIGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGRlbCBsaW5lc1swXQorICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKK0BmdW5jdG9vbHMubHJ1X2NhY2hlKCkKK2RlZiBub3JtYWxpemVfc25pcHBldChzLCAqLCBpbmRlbnQ9MCk6CisgICAgIiIiCisgICAgUmVmb3JtYXRzIHM6CisgICAgICAgICogcmVtb3ZlcyBsZWFkaW5nIGFuZCB0cmFpbGluZyBibGFuayBsaW5lcworICAgICAgICAqIGVuc3VyZXMgdGhhdCBpdCBkb2VzIG5vdCBlbmQgd2l0aCBhIG5ld2xpbmUKKyAgICAgICAgKiBkZWRlbnRzIHNvIHRoZSBmaXJzdCBub253aGl0ZSBjaGFyYWN0ZXIgb24gYW55IGxpbmUgaXMgYXQgY29sdW1uICJpbmRlbnQiCisgICAgIiIiCisgICAgcyA9IHN0cmlwX2xlYWRpbmdfYW5kX3RyYWlsaW5nX2JsYW5rX2xpbmVzKHMpCisgICAgcyA9IHRleHR3cmFwLmRlZGVudChzKQorICAgIGlmIGluZGVudDoKKyAgICAgICAgcyA9IHRleHR3cmFwLmluZGVudChzLCAnICcgKiBpbmRlbnQpCisgICAgcmV0dXJuIHMKKworCitjbGFzcyBDTGFuZ3VhZ2UoTGFuZ3VhZ2UpOgorCisgICAgYm9keV9wcmVmaXggICA9ICIjIgorICAgIGxhbmd1YWdlICAgICAgPSAnQycKKyAgICBzdGFydF9saW5lICAgID0gIi8qW3tkc2xfbmFtZX0gaW5wdXRdIgorICAgIGJvZHlfcHJlZml4ICAgPSAiIgorICAgIHN0b3BfbGluZSAgICAgPSAiW3tkc2xfbmFtZX0gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8iCisgICAgY2hlY2tzdW1fbGluZSA9ICIvKlt7ZHNsX25hbWV9IGVuZCBnZW5lcmF0ZWQgY29kZToge2FyZ3VtZW50c31dKi8iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGZpbGVuYW1lKQorICAgICAgICBzZWxmLmNwcCA9IGNwcC5Nb25pdG9yKGZpbGVuYW1lKQorICAgICAgICBzZWxmLmNwcC5mYWlsID0gZmFpbAorCisgICAgZGVmIHBhcnNlX2xpbmUoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYuY3BwLndyaXRlbGluZShsaW5lKQorCisgICAgZGVmIHJlbmRlcihzZWxmLCBjbGluaWMsIHNpZ25hdHVyZXMpOgorICAgICAgICBmdW5jdGlvbiA9IE5vbmUKKyAgICAgICAgZm9yIG8gaW4gc2lnbmF0dXJlczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobywgRnVuY3Rpb24pOgorICAgICAgICAgICAgICAgIGlmIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJZb3UgbWF5IHNwZWNpZnkgYXQgbW9zdCBvbmUgZnVuY3Rpb24gcGVyIGJsb2NrLlxuRm91bmQgYSBibG9jayBjb250YWluaW5nIGF0IGxlYXN0IHR3bzpcblx0IiArIHJlcHIoZnVuY3Rpb24pICsgIiBhbmQgIiArIHJlcHIobykpCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBvCisgICAgICAgIHJldHVybiBzZWxmLnJlbmRlcl9mdW5jdGlvbihjbGluaWMsIGZ1bmN0aW9uKQorCisgICAgZGVmIGRvY3N0cmluZ19mb3JfY19zdHJpbmcoc2VsZiwgZik6CisgICAgICAgIHRleHQsIGFkZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgICAgICAjIHR1cm4gZG9jc3RyaW5nIGludG8gYSBwcm9wZXJseSBxdW90ZWQgQyBzdHJpbmcKKyAgICAgICAgZm9yIGxpbmUgaW4gZi5kb2NzdHJpbmcuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBhZGQoJyInKQorICAgICAgICAgICAgYWRkKHF1b3RlZF9mb3JfY19zdHJpbmcobGluZSkpCisgICAgICAgICAgICBhZGQoJ1xcbiJcbicpCisKKyAgICAgICAgdGV4dC5wb3AoKQorICAgICAgICBhZGQoJyInKQorICAgICAgICByZXR1cm4gJycuam9pbih0ZXh0KQorCisgICAgZGVmIG91dHB1dF90ZW1wbGF0ZXMoc2VsZiwgZik6CisgICAgICAgIHBhcmFtZXRlcnMgPSBsaXN0KGYucGFyYW1ldGVycy52YWx1ZXMoKSkKKyAgICAgICAgYXNzZXJ0IHBhcmFtZXRlcnMKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocGFyYW1ldGVyc1swXS5jb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKQorICAgICAgICBkZWwgcGFyYW1ldGVyc1swXQorICAgICAgICBjb252ZXJ0ZXJzID0gW3AuY29udmVydGVyIGZvciBwIGluIHBhcmFtZXRlcnNdCisKKyAgICAgICAgaGFzX29wdGlvbl9ncm91cHMgPSBwYXJhbWV0ZXJzIGFuZCAocGFyYW1ldGVyc1swXS5ncm91cCBvciBwYXJhbWV0ZXJzWy0xXS5ncm91cCkKKyAgICAgICAgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyID0gKG5vdCBmLnJldHVybl9jb252ZXJ0ZXIgb3IKKyAgICAgICAgICAgIGYucmV0dXJuX2NvbnZlcnRlci50eXBlID09ICdQeU9iamVjdCAqJykKKworICAgICAgICBwb3NpdGlvbmFsID0gcGFyYW1ldGVycyBhbmQgKHBhcmFtZXRlcnNbLTFdLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQorICAgICAgICBhbGxfYm9yaW5nX29iamVjdHMgPSBGYWxzZSAjIHllcywgdGhpcyB3aWxsIGJlIGZhbHNlIGlmIHRoZXJlIGFyZSAwIHBhcmFtZXRlcnMsIGl0J3MgZmluZQorICAgICAgICBmaXJzdF9vcHRpb25hbCA9IGxlbihwYXJhbWV0ZXJzKQorICAgICAgICBmb3IgaSwgcCBpbiBlbnVtZXJhdGUocGFyYW1ldGVycyk6CisgICAgICAgICAgICBjID0gcC5jb252ZXJ0ZXIKKyAgICAgICAgICAgIGlmIHR5cGUoYykgIT0gb2JqZWN0X2NvbnZlcnRlcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgYy5mb3JtYXRfdW5pdCAhPSAnTyc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHAuZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAgICAgZmlyc3Rfb3B0aW9uYWwgPSBtaW4oZmlyc3Rfb3B0aW9uYWwsIGkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhbGxfYm9yaW5nX29iamVjdHMgPSBUcnVlCisKKyAgICAgICAgbmV3X29yX2luaXQgPSBmLmtpbmQgaW4gKE1FVEhPRF9ORVcsIE1FVEhPRF9JTklUKQorCisgICAgICAgIG1ldGhfbyA9IChsZW4ocGFyYW1ldGVycykgPT0gMSBhbmQKKyAgICAgICAgICAgICAgcGFyYW1ldGVyc1swXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSBhbmQKKyAgICAgICAgICAgICAgbm90IGNvbnZlcnRlcnNbMF0uaXNfb3B0aW9uYWwoKSBhbmQKKyAgICAgICAgICAgICAgaXNpbnN0YW5jZShjb252ZXJ0ZXJzWzBdLCBvYmplY3RfY29udmVydGVyKSBhbmQKKyAgICAgICAgICAgICAgY29udmVydGVyc1swXS5mb3JtYXRfdW5pdCA9PSAnTycgYW5kCisgICAgICAgICAgICAgIG5vdCBuZXdfb3JfaW5pdCkKKworICAgICAgICAjIHdlIGhhdmUgdG8gc2V0IHRoZXNlIHRoaW5ncyBiZWZvcmUgd2UncmUgZG9uZToKKyAgICAgICAgIworICAgICAgICAjIGRvY3N0cmluZ19wcm90b3R5cGUKKyAgICAgICAgIyBkb2NzdHJpbmdfZGVmaW5pdGlvbgorICAgICAgICAjIGltcGxfcHJvdG90eXBlCisgICAgICAgICMgbWV0aG9kZGVmX2RlZmluZQorICAgICAgICAjIHBhcnNlcl9wcm90b3R5cGUKKyAgICAgICAgIyBwYXJzZXJfZGVmaW5pdGlvbgorICAgICAgICAjIGltcGxfZGVmaW5pdGlvbgorICAgICAgICAjIGNwcF9pZgorICAgICAgICAjIGNwcF9lbmRpZgorICAgICAgICAjIG1ldGhvZGRlZl9pZm5kZWYKKworICAgICAgICByZXR1cm5fdmFsdWVfZGVjbGFyYXRpb24gPSAiUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7IgorCisgICAgICAgIG1ldGhvZGRlZl9kZWZpbmUgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICNkZWZpbmUge21ldGhvZGRlZl9uYW1lfSAgICBcXAorICAgICAgICAgICAgICAgIHt7IntuYW1lfSIsIChQeUNGdW5jdGlvbil7Y19iYXNlbmFtZX0sIHttZXRob2RkZWZfZmxhZ3N9LCB7Y19iYXNlbmFtZX1fX2RvY19ffX0sCisgICAgICAgICAgICAiIiIpCisgICAgICAgIGlmIG5ld19vcl9pbml0IGFuZCBub3QgZi5kb2NzdHJpbmc6CisgICAgICAgICAgICBkb2NzdHJpbmdfcHJvdG90eXBlID0gZG9jc3RyaW5nX2RlZmluaXRpb24gPSAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZG9jc3RyaW5nX3Byb3RvdHlwZSA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIFB5RG9jX1ZBUih7Y19iYXNlbmFtZX1fX2RvY19fKTsKKyAgICAgICAgICAgICAgICAiIiIpCisgICAgICAgICAgICBkb2NzdHJpbmdfZGVmaW5pdGlvbiA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIFB5RG9jX1NUUlZBUih7Y19iYXNlbmFtZX1fX2RvY19fLAorICAgICAgICAgICAgICAgIHtkb2NzdHJpbmd9KTsKKyAgICAgICAgICAgICAgICAiIiIpCisgICAgICAgIGltcGxfZGVmaW5pdGlvbiA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQorICAgICAgICAgICAge2NfYmFzZW5hbWV9X2ltcGwoe2ltcGxfcGFyYW1ldGVyc30pCisgICAgICAgICAgICAiIiIpCisgICAgICAgIGltcGxfcHJvdG90eXBlID0gcGFyc2VyX3Byb3RvdHlwZSA9IHBhcnNlcl9kZWZpbml0aW9uID0gTm9uZQorCisgICAgICAgIHBhcnNlcl9wcm90b3R5cGVfa2V5d29yZCA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKKyAgICAgICAgICAgIHtjX2Jhc2VuYW1lfSh7c2VsZl90eXBlfXtzZWxmX25hbWV9LCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKKyAgICAgICAgICAgICIiIikKKworICAgICAgICBwYXJzZXJfcHJvdG90eXBlX3ZhcmFyZ3MgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCisgICAgICAgICAgICB7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKmFyZ3MpCisgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgIyBwYXJzZXJfYm9keV9maWVsZHMgcmVtZW1iZXJzIHRoZSBmaWVsZHMgcGFzc2VkIGluIHRvIHRoZQorICAgICAgICAjIHByZXZpb3VzIGNhbGwgdG8gcGFyc2VyX2JvZHkuIHRoaXMgaXMgdXNlZCBmb3IgYW4gYXdmdWwgaGFjay4KKyAgICAgICAgcGFyc2VyX2JvZHlfZmllbGRzID0gKCkKKyAgICAgICAgZGVmIHBhcnNlcl9ib2R5KHByb3RvdHlwZSwgKmZpZWxkcyk6CisgICAgICAgICAgICBub25sb2NhbCBwYXJzZXJfYm9keV9maWVsZHMKKyAgICAgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgICAgICBhZGQocHJvdG90eXBlKQorICAgICAgICAgICAgcGFyc2VyX2JvZHlfZmllbGRzID0gZmllbGRzCisKKyAgICAgICAgICAgIGZpZWxkcyA9IGxpc3QoZmllbGRzKQorICAgICAgICAgICAgZmllbGRzLmluc2VydCgwLCBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICB7eworICAgICAgICAgICAgICAgICAgICB7cmV0dXJuX3ZhbHVlX2RlY2xhcmF0aW9ufQorICAgICAgICAgICAgICAgICAgICB7ZGVjbGFyYXRpb25zfQorICAgICAgICAgICAgICAgICAgICB7aW5pdGlhbGl6ZXJzfQorICAgICAgICAgICAgICAgICIiIikgKyAiXG4iKQorICAgICAgICAgICAgIyBqdXN0IGltYWdpbmUtLXlvdXIgY29kZSBpcyBoZXJlIGluIHRoZSBtaWRkbGUKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQobm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgICAgIHttb2RpZmljYXRpb25zfQorICAgICAgICAgICAgICAgICAgICB7cmV0dXJuX3ZhbHVlfSA9IHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX2FyZ3VtZW50c30pOworICAgICAgICAgICAgICAgICAgICB7cmV0dXJuX2NvbnZlcnNpb259CisKKyAgICAgICAgICAgICAgICB7ZXhpdF9sYWJlbH0KKyAgICAgICAgICAgICAgICAgICAge2NsZWFudXB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5fdmFsdWU7CisgICAgICAgICAgICAgICAgfX0KKyAgICAgICAgICAgICAgICAiIiIpKQorICAgICAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoKKyAgICAgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgICAgICBhZGQoZmllbGQpCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0KCkKKworICAgICAgICBkZWYgaW5zZXJ0X2tleXdvcmRzKHMpOgorICAgICAgICAgICAgcmV0dXJuIGxpbmVhcl9mb3JtYXQocywgZGVjbGFyYXRpb25zPSJzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7e3trZXl3b3Jkc30sIE5VTEx9fTtcbntkZWNsYXJhdGlvbnN9IikKKworICAgICAgICBpZiBub3QgcGFyYW1ldGVyczoKKyAgICAgICAgICAgICMgbm8gcGFyYW1ldGVycywgTUVUSF9OT0FSR1MKKworICAgICAgICAgICAgZmxhZ3MgPSAiTUVUSF9OT0FSR1MiCisKKyAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgorICAgICAgICAgICAgICAgIHtjX2Jhc2VuYW1lfSh7c2VsZl90eXBlfXtzZWxmX25hbWV9LCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQorICAgICAgICAgICAgICAgICIiIikKKyAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX3Byb3RvdHlwZQorCisgICAgICAgICAgICBpZiBkZWZhdWx0X3JldHVybl9jb252ZXJ0ZXI6CisgICAgICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBwYXJzZXJfcHJvdG90eXBlICsgJ1xuJyArIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICB7eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX2FyZ3VtZW50c30pOworICAgICAgICAgICAgICAgICAgICB9fQorICAgICAgICAgICAgICAgICAgICAiIiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2JvZHkocGFyc2VyX3Byb3RvdHlwZSkKKworICAgICAgICBlbGlmIG1ldGhfbzoKKyAgICAgICAgICAgIGZsYWdzID0gIk1FVEhfTyIKKworICAgICAgICAgICAgbWV0aF9vX3Byb3RvdHlwZSA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCisgICAgICAgICAgICAgICAge2NfYmFzZW5hbWV9KHtpbXBsX3BhcmFtZXRlcnN9KQorICAgICAgICAgICAgICAgICIiIikKKworICAgICAgICAgICAgaWYgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyOgorICAgICAgICAgICAgICAgICMgbWFwcyBwZXJmZWN0bHkgdG8gTUVUSF9PLCBkb2Vzbid0IG5lZWQgYSByZXR1cm4gY29udmVydGVyLgorICAgICAgICAgICAgICAgICMgc28gd2Ugc2tpcCBtYWtpbmcgYSBwYXJzZSBmdW5jdGlvbgorICAgICAgICAgICAgICAgICMgYW5kIGNhbGwgZGlyZWN0bHkgaW50byB0aGUgaW1wbCBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICBpbXBsX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfZGVmaW5pdGlvbiA9ICcnCisgICAgICAgICAgICAgICAgaW1wbF9kZWZpbml0aW9uID0gbWV0aF9vX3Byb3RvdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFNMSUdIVCBIQUNLCisgICAgICAgICAgICAgICAgIyB1c2UgaW1wbF9wYXJhbWV0ZXJzIGZvciB0aGUgcGFyc2VyIGhlcmUhCisgICAgICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IG1ldGhfb19wcm90b3R5cGUKKyAgICAgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUpCisKKyAgICAgICAgZWxpZiBoYXNfb3B0aW9uX2dyb3VwczoKKyAgICAgICAgICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdpdGggb3B0aW9uIGdyb3VwcworICAgICAgICAgICAgIyAod2UgaGF2ZSB0byBnZW5lcmF0ZSBsb3RzIG9mIFB5QXJnX1BhcnNlVHVwbGUgY2FsbHMKKyAgICAgICAgICAgICMgIGluIGEgYmlnIHN3aXRjaCBzdGF0ZW1lbnQpCisKKyAgICAgICAgICAgIGZsYWdzID0gIk1FVEhfVkFSQVJHUyIKKyAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfcHJvdG90eXBlX3ZhcmFyZ3MKKworICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBwYXJzZXJfYm9keShwYXJzZXJfcHJvdG90eXBlLCAnICAgIHtvcHRpb25fZ3JvdXBfcGFyc2luZ30nKQorCisgICAgICAgIGVsaWYgcG9zaXRpb25hbCBhbmQgYWxsX2JvcmluZ19vYmplY3RzOgorICAgICAgICAgICAgIyBwb3NpdGlvbmFsLW9ubHksIGJ1dCBubyBvcHRpb24gZ3JvdXBzLAorICAgICAgICAgICAgIyBhbmQgbm90aGluZyBidXQgbm9ybWFsIG9iamVjdHM6CisgICAgICAgICAgICAjIFB5QXJnX1VucGFja1R1cGxlIQorCisgICAgICAgICAgICBmbGFncyA9ICJNRVRIX1ZBUkFSR1MiCisgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlID0gcGFyc2VyX3Byb3RvdHlwZV92YXJhcmdzCisKKyAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2JvZHkocGFyc2VyX3Byb3RvdHlwZSwgbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAie25hbWV9IiwKKyAgICAgICAgICAgICAgICAgICAge3VucGFja19taW59LCB7dW5wYWNrX21heH0sCisgICAgICAgICAgICAgICAgICAgIHtwYXJzZV9hcmd1bWVudHN9KSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICIiIiwgaW5kZW50PTQpKQorCisgICAgICAgIGVsaWYgcG9zaXRpb25hbDoKKyAgICAgICAgICAgICMgcG9zaXRpb25hbC1vbmx5LCBidXQgbm8gb3B0aW9uIGdyb3VwcworICAgICAgICAgICAgIyB3ZSBvbmx5IG5lZWQgb25lIGNhbGwgdG8gUHlBcmdfUGFyc2VUdXBsZQorCisgICAgICAgICAgICBmbGFncyA9ICJNRVRIX1ZBUkFSR1MiCisgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlID0gcGFyc2VyX3Byb3RvdHlwZV92YXJhcmdzCisKKyAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2JvZHkocGFyc2VyX3Byb3RvdHlwZSwgbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLAorICAgICAgICAgICAgICAgICAgICB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAiIiIsIGluZGVudD00KSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBwb3NpdGlvbmFsLW9yLWtleXdvcmQgYXJndW1lbnRzCisgICAgICAgICAgICBmbGFncyA9ICJNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUyIKKworICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGVfa2V5d29yZAorCisgICAgICAgICAgICBib2R5ID0gbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAgICAgICAgICAgICAie2Zvcm1hdF91bml0c306e25hbWV9IiwgX2tleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICIiIiwgaW5kZW50PTQpCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUsIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgICAgICAgICAgICAgIntmb3JtYXRfdW5pdHN9OntuYW1lfSIsIF9rZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAge3BhcnNlX2FyZ3VtZW50c30pKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgIiIiLCBpbmRlbnQ9NCkpCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IGluc2VydF9rZXl3b3JkcyhwYXJzZXJfZGVmaW5pdGlvbikKKworCisgICAgICAgIGlmIG5ld19vcl9pbml0OgorICAgICAgICAgICAgbWV0aG9kZGVmX2RlZmluZSA9ICcnCisKKyAgICAgICAgICAgIGlmIGYua2luZCA9PSBNRVRIT0RfTkVXOgorICAgICAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfcHJvdG90eXBlX2tleXdvcmQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlX2RlY2xhcmF0aW9uID0gImludCByZXR1cm5fdmFsdWUgPSAtMTsiCisgICAgICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICBzdGF0aWMgaW50CisgICAgICAgICAgICAgICAgICAgIHtjX2Jhc2VuYW1lfSh7c2VsZl90eXBlfXtzZWxmX25hbWV9LCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKKyAgICAgICAgICAgICAgICAgICAgIiIiKQorCisgICAgICAgICAgICBmaWVsZHMgPSBsaXN0KHBhcnNlcl9ib2R5X2ZpZWxkcykKKyAgICAgICAgICAgIHBhcnNlc19wb3NpdGlvbmFsID0gJ01FVEhfTk9BUkdTJyBub3QgaW4gZmxhZ3MKKyAgICAgICAgICAgIHBhcnNlc19rZXl3b3JkcyA9ICdNRVRIX0tFWVdPUkRTJyBpbiBmbGFncworICAgICAgICAgICAgaWYgcGFyc2VzX2tleXdvcmRzOgorICAgICAgICAgICAgICAgIGFzc2VydCBwYXJzZXNfcG9zaXRpb25hbAorCisgICAgICAgICAgICBpZiBub3QgcGFyc2VzX2tleXdvcmRzOgorICAgICAgICAgICAgICAgIGZpZWxkcy5pbnNlcnQoMCwgbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgICAgIGlmICh7c2VsZl90eXBlX2NoZWNrfSFfUHlBcmdfTm9LZXl3b3Jkcygie25hbWV9Iiwga3dhcmdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgIiIiLCBpbmRlbnQ9NCkpCisgICAgICAgICAgICAgICAgaWYgbm90IHBhcnNlc19wb3NpdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBmaWVsZHMuaW5zZXJ0KDAsIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHtzZWxmX3R5cGVfY2hlY2t9IV9QeUFyZ19Ob1Bvc2l0aW9uYWwoIntuYW1lfSIsIGFyZ3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICIiIiwgaW5kZW50PTQpKQorCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUsICpmaWVsZHMpCisgICAgICAgICAgICBpZiBwYXJzZXNfa2V5d29yZHM6CisgICAgICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBpbnNlcnRfa2V5d29yZHMocGFyc2VyX2RlZmluaXRpb24pCisKKworICAgICAgICBpZiBmLm1ldGhvZGRlZl9mbGFnczoKKyAgICAgICAgICAgIGZsYWdzICs9ICd8JyArIGYubWV0aG9kZGVmX2ZsYWdzCisKKyAgICAgICAgbWV0aG9kZGVmX2RlZmluZSA9IG1ldGhvZGRlZl9kZWZpbmUucmVwbGFjZSgne21ldGhvZGRlZl9mbGFnc30nLCBmbGFncykKKworICAgICAgICBtZXRob2RkZWZfaWZuZGVmID0gJycKKyAgICAgICAgY29uZGl0aW9uYWwgPSBzZWxmLmNwcC5jb25kaXRpb24oKQorICAgICAgICBpZiBub3QgY29uZGl0aW9uYWw6CisgICAgICAgICAgICBjcHBfaWYgPSBjcHBfZW5kaWYgPSAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3BwX2lmID0gIiNpZiAiICsgY29uZGl0aW9uYWwKKyAgICAgICAgICAgIGNwcF9lbmRpZiA9ICIjZW5kaWYgLyogIiArIGNvbmRpdGlvbmFsICsgIiAqLyIKKworICAgICAgICAgICAgaWYgbWV0aG9kZGVmX2RlZmluZToKKyAgICAgICAgICAgICAgICBtZXRob2RkZWZfaWZuZGVmID0gbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgICAgICNpZm5kZWYge21ldGhvZGRlZl9uYW1lfQorICAgICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSB7bWV0aG9kZGVmX25hbWV9CisgICAgICAgICAgICAgICAgICAgICNlbmRpZiAvKiAhZGVmaW5lZCh7bWV0aG9kZGVmX25hbWV9KSAqLworICAgICAgICAgICAgICAgICAgICAiIiIpCisKKworICAgICAgICAjIGFkZCAnOycgdG8gdGhlIGVuZCBvZiBwYXJzZXJfcHJvdG90eXBlIGFuZCBpbXBsX3Byb3RvdHlwZQorICAgICAgICAjICh0aGV5IG11c3RuJ3QgYmUgTm9uZSwgYnV0IHRoZXkgY291bGQgYmUgYW4gZW1wdHkgc3RyaW5nLikKKyAgICAgICAgYXNzZXJ0IHBhcnNlcl9wcm90b3R5cGUgaXMgbm90IE5vbmUKKyAgICAgICAgaWYgcGFyc2VyX3Byb3RvdHlwZToKKyAgICAgICAgICAgIGFzc2VydCBub3QgcGFyc2VyX3Byb3RvdHlwZS5lbmRzd2l0aCgnOycpCisgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlICs9ICc7JworCisgICAgICAgIGlmIGltcGxfcHJvdG90eXBlIGlzIE5vbmU6CisgICAgICAgICAgICBpbXBsX3Byb3RvdHlwZSA9IGltcGxfZGVmaW5pdGlvbgorICAgICAgICBpZiBpbXBsX3Byb3RvdHlwZToKKyAgICAgICAgICAgIGltcGxfcHJvdG90eXBlICs9ICI7IgorCisgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2RlZmluaXRpb24ucmVwbGFjZSgie3JldHVybl92YWx1ZV9kZWNsYXJhdGlvbn0iLCByZXR1cm5fdmFsdWVfZGVjbGFyYXRpb24pCisKKyAgICAgICAgZCA9IHsKKyAgICAgICAgICAgICJkb2NzdHJpbmdfcHJvdG90eXBlIiA6IGRvY3N0cmluZ19wcm90b3R5cGUsCisgICAgICAgICAgICAiZG9jc3RyaW5nX2RlZmluaXRpb24iIDogZG9jc3RyaW5nX2RlZmluaXRpb24sCisgICAgICAgICAgICAiaW1wbF9wcm90b3R5cGUiIDogaW1wbF9wcm90b3R5cGUsCisgICAgICAgICAgICAibWV0aG9kZGVmX2RlZmluZSIgOiBtZXRob2RkZWZfZGVmaW5lLAorICAgICAgICAgICAgInBhcnNlcl9wcm90b3R5cGUiIDogcGFyc2VyX3Byb3RvdHlwZSwKKyAgICAgICAgICAgICJwYXJzZXJfZGVmaW5pdGlvbiIgOiBwYXJzZXJfZGVmaW5pdGlvbiwKKyAgICAgICAgICAgICJpbXBsX2RlZmluaXRpb24iIDogaW1wbF9kZWZpbml0aW9uLAorICAgICAgICAgICAgImNwcF9pZiIgOiBjcHBfaWYsCisgICAgICAgICAgICAiY3BwX2VuZGlmIiA6IGNwcF9lbmRpZiwKKyAgICAgICAgICAgICJtZXRob2RkZWZfaWZuZGVmIiA6IG1ldGhvZGRlZl9pZm5kZWYsCisgICAgICAgIH0KKworICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgZm9yZ2V0IHRvIGFzc2lnbiBzb21ldGhpbmcsCisgICAgICAgICMgYW5kIHdyYXAgZWFjaCBub24tZW1wdHkgdmFsdWUgaW4gXG4ncworICAgICAgICBkMiA9IHt9CisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICBhc3NlcnQgdmFsdWUgaXMgbm90IE5vbmUsICJnb3QgYSBOb25lIHZhbHVlIGZvciB0ZW1wbGF0ZSAiICsgcmVwcihuYW1lKQorICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAnXG4nICsgdmFsdWUgKyAnXG4nCisgICAgICAgICAgICBkMltuYW1lXSA9IHZhbHVlCisgICAgICAgIHJldHVybiBkMgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBncm91cF90b192YXJpYWJsZV9uYW1lKGdyb3VwKToKKyAgICAgICAgYWRqZWN0aXZlID0gImxlZnRfIiBpZiBncm91cCA8IDAgZWxzZSAicmlnaHRfIgorICAgICAgICByZXR1cm4gImdyb3VwXyIgKyBhZGplY3RpdmUgKyBzdHIoYWJzKGdyb3VwKSkKKworICAgIGRlZiByZW5kZXJfb3B0aW9uX2dyb3VwX3BhcnNpbmcoc2VsZiwgZiwgdGVtcGxhdGVfZGljdCk6CisgICAgICAgICMgcG9zaXRpb25hbCBvbmx5LCBncm91cGVkLCBvcHRpb25hbCBhcmd1bWVudHMhCisgICAgICAgICMgY2FuIGJlIG9wdGlvbmFsIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LgorICAgICAgICAjIGhlcmUncyBhbiBleGFtcGxlOgorICAgICAgICAjCisgICAgICAgICMgWyBbIFsgQTEgQTIgXSBCMSBCMiBCMyBdIEMxIEMyIF0gRDEgRDIgRDMgWyBFMSBFMiBFMyBbIEYxIEYyIEYzIF0gXQorICAgICAgICAjCisgICAgICAgICMgSGVyZSBncm91cCBEIGFyZSByZXF1aXJlZCwgYW5kIGFsbCBvdGhlciBncm91cHMgYXJlIG9wdGlvbmFsLgorICAgICAgICAjIChHcm91cCBEJ3MgImdyb3VwIiBpcyBhY3R1YWxseSBOb25lLikKKyAgICAgICAgIyBXZSBjYW4gZmlndXJlIG91dCB3aGljaCBzZXRzIG9mIGFyZ3VtZW50cyB3ZSBoYXZlIGJhc2VkIG9uCisgICAgICAgICMgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBpbiB0aGUgdHVwbGUuCisgICAgICAgICMKKyAgICAgICAgIyBOb3RlIHRoYXQgeW91IG5lZWQgdG8gY291bnQgdXAgb24gYm90aCBzaWRlcy4gIEZvciBleGFtcGxlLAorICAgICAgICAjIHlvdSBjb3VsZCBoYXZlIGdyb3VwcyBDK0QsIG9yIEMrRCtFLCBvciBDK0QrRStGLgorICAgICAgICAjCisgICAgICAgICMgV2hhdCBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBsZWFkcyB1cyB0byBhbiBhbWJpZ3VvdXMgcmVzdWx0PworICAgICAgICAjIENsaW5pYyBwcmVmZXJzIGdyb3VwcyBvbiB0aGUgbGVmdC4gIFNvIGluIHRoZSBhYm92ZSBleGFtcGxlLAorICAgICAgICAjIGZpdmUgYXJndW1lbnRzIHdvdWxkIG1hcCB0byBCK0MsIG5vdCBDK0QuCisKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgcGFyYW1ldGVycyA9IGxpc3QoZi5wYXJhbWV0ZXJzLnZhbHVlcygpKQorICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcnNbMF0uY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcik6CisgICAgICAgICAgICBkZWwgcGFyYW1ldGVyc1swXQorCisgICAgICAgIGdyb3VwcyA9IFtdCisgICAgICAgIGdyb3VwID0gTm9uZQorICAgICAgICBsZWZ0ID0gW10KKyAgICAgICAgcmlnaHQgPSBbXQorICAgICAgICByZXF1aXJlZCA9IFtdCisgICAgICAgIGxhc3QgPSB1bnNwZWNpZmllZAorCisgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBncm91cF9pZCA9IHAuZ3JvdXAKKyAgICAgICAgICAgIGlmIGdyb3VwX2lkICE9IGxhc3Q6CisgICAgICAgICAgICAgICAgbGFzdCA9IGdyb3VwX2lkCisgICAgICAgICAgICAgICAgZ3JvdXAgPSBbXQorICAgICAgICAgICAgICAgIGlmIGdyb3VwX2lkIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgbGVmdC5hcHBlbmQoZ3JvdXApCisgICAgICAgICAgICAgICAgZWxpZiBncm91cF9pZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBncm91cCA9IHJlcXVpcmVkCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQuYXBwZW5kKGdyb3VwKQorICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKHApCisKKyAgICAgICAgY291bnRfbWluID0gc3lzLm1heHNpemUKKyAgICAgICAgY291bnRfbWF4ID0gLTEKKworICAgICAgICBhZGQoInN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSkge3tcbiIpCisgICAgICAgIGZvciBzdWJzZXQgaW4gcGVybXV0ZV9vcHRpb25hbF9ncm91cHMobGVmdCwgcmVxdWlyZWQsIHJpZ2h0KToKKyAgICAgICAgICAgIGNvdW50ID0gbGVuKHN1YnNldCkKKyAgICAgICAgICAgIGNvdW50X21pbiA9IG1pbihjb3VudF9taW4sIGNvdW50KQorICAgICAgICAgICAgY291bnRfbWF4ID0gbWF4KGNvdW50X21heCwgY291bnQpCisKKyAgICAgICAgICAgIGlmIGNvdW50ID09IDA6CisgICAgICAgICAgICAgICAgYWRkKCIiIiAgICBjYXNlIDA6CisgICAgICAgIGJyZWFrOworIiIiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGdyb3VwX2lkcyA9IHtwLmdyb3VwIGZvciBwIGluIHN1YnNldH0gICMgZWxpbWluYXRlIGR1cGxpY2F0ZXMKKyAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgZFsnY291bnQnXSA9IGNvdW50CisgICAgICAgICAgICBkWyduYW1lJ10gPSBmLm5hbWUKKyAgICAgICAgICAgIGRbJ2dyb3VwcyddID0gc29ydGVkKGdyb3VwX2lkcykKKyAgICAgICAgICAgIGRbJ2Zvcm1hdF91bml0cyddID0gIiIuam9pbihwLmNvbnZlcnRlci5mb3JtYXRfdW5pdCBmb3IgcCBpbiBzdWJzZXQpCisKKyAgICAgICAgICAgIHBhcnNlX2FyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBmb3IgcCBpbiBzdWJzZXQ6CisgICAgICAgICAgICAgICAgcC5jb252ZXJ0ZXIucGFyc2VfYXJndW1lbnQocGFyc2VfYXJndW1lbnRzKQorICAgICAgICAgICAgZFsncGFyc2VfYXJndW1lbnRzJ10gPSAiLCAiLmpvaW4ocGFyc2VfYXJndW1lbnRzKQorCisgICAgICAgICAgICBncm91cF9pZHMuZGlzY2FyZCgwKQorICAgICAgICAgICAgbGluZXMgPSBbc2VsZi5ncm91cF90b192YXJpYWJsZV9uYW1lKGcpICsgIiA9IDE7IiBmb3IgZyBpbiBncm91cF9pZHNdCisgICAgICAgICAgICBsaW5lcyA9ICJcbiIuam9pbihsaW5lcykKKworICAgICAgICAgICAgcyA9ICIiIgorICAgIGNhc2Uge2NvdW50fToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLCB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIHtncm91cF9ib29sZWFuc30KKyAgICAgICAgYnJlYWs7CisiIiJbMTpdCisgICAgICAgICAgICBzID0gbGluZWFyX2Zvcm1hdChzLCBncm91cF9ib29sZWFucz1saW5lcykKKyAgICAgICAgICAgIHMgPSBzLmZvcm1hdF9tYXAoZCkKKyAgICAgICAgICAgIGFkZChzKQorCisgICAgICAgIGFkZCgiICAgIGRlZmF1bHQ6XG4iKQorICAgICAgICBzID0gJyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInt9IHJlcXVpcmVzIHt9IHRvIHt9IGFyZ3VtZW50cyIpO1xuJworICAgICAgICBhZGQocy5mb3JtYXQoZi5mdWxsX25hbWUsIGNvdW50X21pbiwgY291bnRfbWF4KSkKKyAgICAgICAgYWRkKCcgICAgICAgIGdvdG8gZXhpdDtcbicpCisgICAgICAgIGFkZCgifX0iKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydvcHRpb25fZ3JvdXBfcGFyc2luZyddID0gb3V0cHV0KCkKKworICAgIGRlZiByZW5kZXJfZnVuY3Rpb24oc2VsZiwgY2xpbmljLCBmKToKKyAgICAgICAgaWYgbm90IGY6CisgICAgICAgICAgICByZXR1cm4gIiIKKworICAgICAgICBhZGQsIG91dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBkYXRhID0gQ1JlbmRlckRhdGEoKQorCisgICAgICAgIGFzc2VydCBmLnBhcmFtZXRlcnMsICJXZSBzaG91bGQgYWx3YXlzIGhhdmUgYSAnc2VsZicgYXQgdGhpcyBwb2ludCEiCisgICAgICAgIHBhcmFtZXRlcnMgPSBmLnJlbmRlcl9wYXJhbWV0ZXJzCisgICAgICAgIGNvbnZlcnRlcnMgPSBbcC5jb252ZXJ0ZXIgZm9yIHAgaW4gcGFyYW1ldGVyc10KKworICAgICAgICB0ZW1wbGF0ZXMgPSBzZWxmLm91dHB1dF90ZW1wbGF0ZXMoZikKKworICAgICAgICBmX3NlbGYgPSBwYXJhbWV0ZXJzWzBdCisgICAgICAgIHNlbGZsZXNzID0gcGFyYW1ldGVyc1sxOl0KKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZl9zZWxmLmNvbnZlcnRlciwgc2VsZl9jb252ZXJ0ZXIpLCAiTm8gc2VsZiBwYXJhbWV0ZXIgaW4gIiArIHJlcHIoZi5mdWxsX25hbWUpICsgIiEiCisKKyAgICAgICAgbGFzdF9ncm91cCA9IDAKKyAgICAgICAgZmlyc3Rfb3B0aW9uYWwgPSBsZW4oc2VsZmxlc3MpCisgICAgICAgIHBvc2l0aW9uYWwgPSBzZWxmbGVzcyBhbmQgc2VsZmxlc3NbLTFdLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisgICAgICAgIG5ld19vcl9pbml0ID0gZi5raW5kIGluIChNRVRIT0RfTkVXLCBNRVRIT0RfSU5JVCkKKyAgICAgICAgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyID0gKG5vdCBmLnJldHVybl9jb252ZXJ0ZXIgb3IKKyAgICAgICAgICAgIGYucmV0dXJuX2NvbnZlcnRlci50eXBlID09ICdQeU9iamVjdCAqJykKKyAgICAgICAgaGFzX29wdGlvbl9ncm91cHMgPSBGYWxzZQorCisgICAgICAgICMgb2Zmc2V0IGkgYnkgLTEgYmVjYXVzZSBmaXJzdF9vcHRpb25hbCBuZWVkcyB0byBpZ25vcmUgc2VsZgorICAgICAgICBmb3IgaSwgcCBpbiBlbnVtZXJhdGUocGFyYW1ldGVycywgLTEpOgorICAgICAgICAgICAgYyA9IHAuY29udmVydGVyCisKKyAgICAgICAgICAgIGlmIChpICE9IC0xKSBhbmQgKHAuZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQpOgorICAgICAgICAgICAgICAgIGZpcnN0X29wdGlvbmFsID0gbWluKGZpcnN0X29wdGlvbmFsLCBpKQorCisgICAgICAgICAgICAjIGluc2VydCBncm91cCB2YXJpYWJsZQorICAgICAgICAgICAgZ3JvdXAgPSBwLmdyb3VwCisgICAgICAgICAgICBpZiBsYXN0X2dyb3VwICE9IGdyb3VwOgorICAgICAgICAgICAgICAgIGxhc3RfZ3JvdXAgPSBncm91cAorICAgICAgICAgICAgICAgIGlmIGdyb3VwOgorICAgICAgICAgICAgICAgICAgICBncm91cF9uYW1lID0gc2VsZi5ncm91cF90b192YXJpYWJsZV9uYW1lKGdyb3VwKQorICAgICAgICAgICAgICAgICAgICBkYXRhLmltcGxfYXJndW1lbnRzLmFwcGVuZChncm91cF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5hcHBlbmQoImludCAiICsgZ3JvdXBfbmFtZSArICIgPSAwOyIpCisgICAgICAgICAgICAgICAgICAgIGRhdGEuaW1wbF9wYXJhbWV0ZXJzLmFwcGVuZCgiaW50ICIgKyBncm91cF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBoYXNfb3B0aW9uX2dyb3VwcyA9IFRydWUKKworICAgICAgICAgICAgYy5yZW5kZXIocCwgZGF0YSkKKworICAgICAgICBpZiBoYXNfb3B0aW9uX2dyb3VwcyBhbmQgKG5vdCBwb3NpdGlvbmFsKToKKyAgICAgICAgICAgIGZhaWwoIllvdSBjYW5ub3QgdXNlIG9wdGlvbmFsIGdyb3VwcyAoJ1snIGFuZCAnXScpXG51bmxlc3MgYWxsIHBhcmFtZXRlcnMgYXJlIHBvc2l0aW9uYWwtb25seSAoJy8nKS4iKQorCisgICAgICAgICMgSEFDSworICAgICAgICAjIHdoZW4gd2UncmUgTUVUSF9PLCBidXQgaGF2ZSBhIGN1c3RvbSByZXR1cm4gY29udmVydGVyLAorICAgICAgICAjIHdlIHVzZSAiaW1wbF9wYXJhbWV0ZXJzIiBmb3IgdGhlIHBhcnNpbmcgZnVuY3Rpb24KKyAgICAgICAgIyBiZWNhdXNlIHRoYXQgd29ya3MgYmV0dGVyLiAgYnV0IHRoYXQgbWVhbnMgd2UgbXVzdAorICAgICAgICAjIHN1cHJlc3MgYWN0dWFsbHkgZGVjbGFyaW5nIHRoZSBpbXBsJ3MgcGFyYW1ldGVycworICAgICAgICAjIGFzIHZhcmlhYmxlcyBpbiB0aGUgcGFyc2luZyBmdW5jdGlvbi4gIGJ1dCBzaW5jZSBpdCdzCisgICAgICAgICMgTUVUSF9PLCB3ZSBoYXZlIGV4YWN0bHkgb25lIGFueXdheSwgc28gd2Uga25vdyBleGFjdGx5CisgICAgICAgICMgd2hlcmUgaXQgaXMuCisgICAgICAgIGlmICgiTUVUSF9PIiBpbiB0ZW1wbGF0ZXNbJ21ldGhvZGRlZl9kZWZpbmUnXSBhbmQKKyAgICAgICAgICAgIG5vdCBkZWZhdWx0X3JldHVybl9jb252ZXJ0ZXIpOgorICAgICAgICAgICAgZGF0YS5kZWNsYXJhdGlvbnMucG9wKDApCisKKyAgICAgICAgdGVtcGxhdGVfZGljdCA9IHt9CisKKyAgICAgICAgZnVsbF9uYW1lID0gZi5mdWxsX25hbWUKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZnVsbF9uYW1lJ10gPSBmdWxsX25hbWUKKworICAgICAgICBpZiBuZXdfb3JfaW5pdDoKKyAgICAgICAgICAgIG5hbWUgPSBmLmNscy5uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gZi5uYW1lCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnbmFtZSddID0gbmFtZQorCisgICAgICAgIGlmIGYuY19iYXNlbmFtZToKKyAgICAgICAgICAgIGNfYmFzZW5hbWUgPSBmLmNfYmFzZW5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcyA9IGZ1bGxfbmFtZS5zcGxpdCgiLiIpCisgICAgICAgICAgICBpZiBmaWVsZHNbLTFdID09ICdfX25ld19fJzoKKyAgICAgICAgICAgICAgICBmaWVsZHMucG9wKCkKKyAgICAgICAgICAgIGNfYmFzZW5hbWUgPSAiXyIuam9pbihmaWVsZHMpCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnY19iYXNlbmFtZSddID0gY19iYXNlbmFtZQorCisgICAgICAgIG1ldGhvZGRlZl9uYW1lID0gInt9X01FVEhPRERFRiIuZm9ybWF0KGNfYmFzZW5hbWUudXBwZXIoKSkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnbWV0aG9kZGVmX25hbWUnXSA9IG1ldGhvZGRlZl9uYW1lCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZG9jc3RyaW5nJ10gPSBzZWxmLmRvY3N0cmluZ19mb3JfY19zdHJpbmcoZikKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0WydzZWxmX25hbWUnXSA9IHRlbXBsYXRlX2RpY3RbJ3NlbGZfdHlwZSddID0gdGVtcGxhdGVfZGljdFsnc2VsZl90eXBlX2NoZWNrJ10gPSAnJworICAgICAgICBmX3NlbGYuY29udmVydGVyLnNldF90ZW1wbGF0ZV9kaWN0KHRlbXBsYXRlX2RpY3QpCisKKyAgICAgICAgZi5yZXR1cm5fY29udmVydGVyLnJlbmRlcihmLCBkYXRhKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX3JldHVybl90eXBlJ10gPSBmLnJldHVybl9jb252ZXJ0ZXIudHlwZQorCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2RlY2xhcmF0aW9ucyddID0gIlxuIi5qb2luKGRhdGEuZGVjbGFyYXRpb25zKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0Wydpbml0aWFsaXplcnMnXSA9ICJcblxuIi5qb2luKGRhdGEuaW5pdGlhbGl6ZXJzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0Wydtb2RpZmljYXRpb25zJ10gPSAnXG5cbicuam9pbihkYXRhLm1vZGlmaWNhdGlvbnMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2tleXdvcmRzJ10gPSAnIicgKyAnIiwgIicuam9pbihkYXRhLmtleXdvcmRzKSArICciJworICAgICAgICB0ZW1wbGF0ZV9kaWN0Wydmb3JtYXRfdW5pdHMnXSA9ICcnLmpvaW4oZGF0YS5mb3JtYXRfdW5pdHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3BhcnNlX2FyZ3VtZW50cyddID0gJywgJy5qb2luKGRhdGEucGFyc2VfYXJndW1lbnRzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX3BhcmFtZXRlcnMnXSA9ICIsICIuam9pbihkYXRhLmltcGxfcGFyYW1ldGVycykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnaW1wbF9hcmd1bWVudHMnXSA9ICIsICIuam9pbihkYXRhLmltcGxfYXJndW1lbnRzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydyZXR1cm5fY29udmVyc2lvbiddID0gIiIuam9pbihkYXRhLnJldHVybl9jb252ZXJzaW9uKS5yc3RyaXAoKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydjbGVhbnVwJ10gPSAiIi5qb2luKGRhdGEuY2xlYW51cCkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsncmV0dXJuX3ZhbHVlJ10gPSBkYXRhLnJldHVybl92YWx1ZQorCisgICAgICAgICMgdXNlZCBieSB1bnBhY2sgdHVwbGUgY29kZSBnZW5lcmF0b3IKKyAgICAgICAgaWdub3JlX3NlbGYgPSAtMSBpZiBpc2luc3RhbmNlKGNvbnZlcnRlcnNbMF0sIHNlbGZfY29udmVydGVyKSBlbHNlIDAKKyAgICAgICAgdW5wYWNrX21pbiA9IGZpcnN0X29wdGlvbmFsCisgICAgICAgIHVucGFja19tYXggPSBsZW4oc2VsZmxlc3MpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3VucGFja19taW4nXSA9IHN0cih1bnBhY2tfbWluKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0Wyd1bnBhY2tfbWF4J10gPSBzdHIodW5wYWNrX21heCkKKworICAgICAgICBpZiBoYXNfb3B0aW9uX2dyb3VwczoKKyAgICAgICAgICAgIHNlbGYucmVuZGVyX29wdGlvbl9ncm91cF9wYXJzaW5nKGYsIHRlbXBsYXRlX2RpY3QpCisKKyAgICAgICAgZm9yIG5hbWUsIGRlc3RpbmF0aW9uIGluIGNsaW5pYy5maWVsZF9kZXN0aW5hdGlvbnMuaXRlbXMoKToKKyAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVzW25hbWVdCisgICAgICAgICAgICBpZiBoYXNfb3B0aW9uX2dyb3VwczoKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxpbmVhcl9mb3JtYXQodGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25fZ3JvdXBfcGFyc2luZz10ZW1wbGF0ZV9kaWN0WydvcHRpb25fZ3JvdXBfcGFyc2luZyddKQorICAgICAgICAgICAgdGVtcGxhdGUgPSBsaW5lYXJfZm9ybWF0KHRlbXBsYXRlLAorICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9ucz10ZW1wbGF0ZV9kaWN0WydkZWNsYXJhdGlvbnMnXSwKKyAgICAgICAgICAgICAgICByZXR1cm5fY29udmVyc2lvbj10ZW1wbGF0ZV9kaWN0WydyZXR1cm5fY29udmVyc2lvbiddLAorICAgICAgICAgICAgICAgIGluaXRpYWxpemVycz10ZW1wbGF0ZV9kaWN0Wydpbml0aWFsaXplcnMnXSwKKyAgICAgICAgICAgICAgICBtb2RpZmljYXRpb25zPXRlbXBsYXRlX2RpY3RbJ21vZGlmaWNhdGlvbnMnXSwKKyAgICAgICAgICAgICAgICBjbGVhbnVwPXRlbXBsYXRlX2RpY3RbJ2NsZWFudXAnXSwKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgT25seSBnZW5lcmF0ZSB0aGUgImV4aXQ6IiBsYWJlbAorICAgICAgICAgICAgIyBpZiB3ZSBoYXZlIGFueSBnb3RvcworICAgICAgICAgICAgbmVlZF9leGl0X2xhYmVsID0gImdvdG8gZXhpdDsiIGluIHRlbXBsYXRlCisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxpbmVhcl9mb3JtYXQodGVtcGxhdGUsCisgICAgICAgICAgICAgICAgZXhpdF9sYWJlbD0iZXhpdDoiIGlmIG5lZWRfZXhpdF9sYWJlbCBlbHNlICcnCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICBzID0gdGVtcGxhdGUuZm9ybWF0X21hcCh0ZW1wbGF0ZV9kaWN0KQorCisgICAgICAgICAgICBpZiBjbGluaWMubGluZV9wcmVmaXg6CisgICAgICAgICAgICAgICAgcyA9IGluZGVudF9hbGxfbGluZXMocywgY2xpbmljLmxpbmVfcHJlZml4KQorICAgICAgICAgICAgaWYgY2xpbmljLmxpbmVfc3VmZml4OgorICAgICAgICAgICAgICAgIHMgPSBzdWZmaXhfYWxsX2xpbmVzKHMsIGNsaW5pYy5saW5lX3N1ZmZpeCkKKworICAgICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKHMpCisKKyAgICAgICAgcmV0dXJuIGNsaW5pYy5nZXRfZGVzdGluYXRpb24oJ2Jsb2NrJykuZHVtcCgpCisKKworCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgT3ZlcnJpZGVTdGRpb1dpdGgoc3Rkb3V0KToKKyAgICBzYXZlZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAorICAgIHRyeToKKyAgICAgICAgeWllbGQKKyAgICBmaW5hbGx5OgorICAgICAgICBhc3NlcnQgc3lzLnN0ZG91dCBpcyBzdGRvdXQKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVkX3N0ZG91dAorCisKK2RlZiBjcmVhdGVfcmVnZXgoYmVmb3JlLCBhZnRlciwgd29yZD1UcnVlLCB3aG9sZV9saW5lPVRydWUpOgorICAgICIiIkNyZWF0ZSBhbiByZSBvYmplY3QgZm9yIG1hdGNoaW5nIG1hcmtlciBsaW5lcy4iIiIKKyAgICBncm91cF9yZSA9ICJcdysiIGlmIHdvcmQgZWxzZSAiLisiCisgICAgcGF0dGVybiA9IHIne30oe30pe30nCisgICAgaWYgd2hvbGVfbGluZToKKyAgICAgICAgcGF0dGVybiA9ICdeJyArIHBhdHRlcm4gKyAnJCcKKyAgICBwYXR0ZXJuID0gcGF0dGVybi5mb3JtYXQocmUuZXNjYXBlKGJlZm9yZSksIGdyb3VwX3JlLCByZS5lc2NhcGUoYWZ0ZXIpKQorICAgIHJldHVybiByZS5jb21waWxlKHBhdHRlcm4pCisKKworY2xhc3MgQmxvY2s6CisgICAgciIiIgorICAgIFJlcHJlc2VudHMgYSBzaW5nbGUgYmxvY2sgb2YgdGV4dCBlbWJlZGRlZCBpbgorICAgIGFub3RoZXIgZmlsZS4gIElmIGRzbF9uYW1lIGlzIE5vbmUsIHRoZSBibG9jayByZXByZXNlbnRzCisgICAgdmVyYmF0aW0gdGV4dCwgcmF3IG9yaWdpbmFsIHRleHQgZnJvbSB0aGUgZmlsZSwgaW4KKyAgICB3aGljaCBjYXNlICJpbnB1dCIgd2lsbCBiZSB0aGUgb25seSBub24tZmFsc2UgbWVtYmVyLgorICAgIElmIGRzbF9uYW1lIGlzIG5vdCBOb25lLCB0aGUgYmxvY2sgcmVwcmVzZW50cyBhIENsaW5pYworICAgIGJsb2NrLgorCisgICAgaW5wdXQgaXMgYWx3YXlzIHN0ciwgd2l0aCBlbWJlZGRlZCBcbiBjaGFyYWN0ZXJzLgorICAgIGlucHV0IHJlcHJlc2VudHMgdGhlIG9yaWdpbmFsIHRleHQgZnJvbSB0aGUgZmlsZTsKKyAgICBpZiBpdCdzIGEgQ2xpbmljIGJsb2NrLCBpdCBpcyB0aGUgb3JpZ2luYWwgdGV4dCB3aXRoCisgICAgdGhlIGJvZHlfcHJlZml4IGFuZCByZWR1bmRhbnQgbGVhZGluZyB3aGl0ZXNwYWNlIHJlbW92ZWQuCisKKyAgICBkc2xfbmFtZSBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJZiBzdHIsIGl0J3MgdGhlIHRleHQKKyAgICBmb3VuZCBvbiB0aGUgc3RhcnQgbGluZSBvZiB0aGUgYmxvY2sgYmV0d2VlbiB0aGUgc3F1YXJlCisgICAgYnJhY2tldHMuCisKKyAgICBzaWduYXR1cmVzIGlzIGVpdGhlciBsaXN0IG9yIE5vbmUuICBJZiBpdCdzIGEgbGlzdCwKKyAgICBpdCBtYXkgb25seSBjb250YWluIGNsaW5pYy5Nb2R1bGUsIGNsaW5pYy5DbGFzcywgYW5kCisgICAgY2xpbmljLkZ1bmN0aW9uIG9iamVjdHMuICBBdCB0aGUgbW9tZW50IGl0IHNob3VsZAorICAgIGNvbnRhaW4gYXQgbW9zdCBvbmUgb2YgZWFjaC4KKworICAgIG91dHB1dCBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJZiBzdHIsIGl0J3MgdGhlIG91dHB1dAorICAgIGZyb20gdGhpcyBibG9jaywgd2l0aCBlbWJlZGRlZCAnXG4nIGNoYXJhY3RlcnMuCisKKyAgICBpbmRlbnQgaXMgZWl0aGVyIHN0ciBvciBOb25lLiAgSXQncyB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlCisgICAgdGhhdCB3YXMgZm91bmQgb24gZXZlcnkgbGluZSBvZiBpbnB1dC4gIChJZiBib2R5X3ByZWZpeCBpcworICAgIG5vdCBlbXB0eSwgdGhpcyBpcyB0aGUgaW5kZW50ICphZnRlciogcmVtb3ZpbmcgdGhlCisgICAgYm9keV9wcmVmaXguKQorCisgICAgcHJlaW5kZW50IGlzIGVpdGhlciBzdHIgb3IgTm9uZS4gIEl0J3MgdGhlIHdoaXRlc3BhY2UgdGhhdAorICAgIHdhcyBmb3VuZCBpbiBmcm9udCBvZiBldmVyeSBsaW5lIG9mIGlucHV0ICpiZWZvcmUqIHRoZQorICAgICJib2R5X3ByZWZpeCIgKHNlZSB0aGUgTGFuZ3VhZ2Ugb2JqZWN0KS4gIElmIGJvZHlfcHJlZml4CisgICAgaXMgZW1wdHksIHByZWluZGVudCBtdXN0IGFsd2F5cyBiZSBlbXB0eSB0b28uCisKKyAgICBUbyBpbGx1c3RyYXRlIGluZGVudCBhbmQgcHJlaW5kZW50OiBBc3N1bWUgdGhhdCAnXycKKyAgICByZXByZXNlbnRzIHdoaXRlc3BhY2UuICBJZiB0aGUgYmxvY2sgcHJvY2Vzc2VkIHdhcyBpbiBhCisgICAgUHl0aG9uIGZpbGUsIGFuZCBsb29rZWQgbGlrZSB0aGlzOgorICAgICAgX19fXyMvKltweXRob25dCisgICAgICBfX19fI19fZm9yIGEgaW4gcmFuZ2UoMjApOgorICAgICAgX19fXyNfX19fcHJpbnQoYSkKKyAgICAgIF9fX18jW3B5dGhvbl0qLworICAgICJwcmVpbmRlbnQiIHdvdWxkIGJlICJfX19fIiBhbmQgImluZGVudCIgd291bGQgYmUgIl9fIi4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dCwgZHNsX25hbWU9Tm9uZSwgc2lnbmF0dXJlcz1Ob25lLCBvdXRwdXQ9Tm9uZSwgaW5kZW50PScnLCBwcmVpbmRlbnQ9JycpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpbnB1dCwgc3RyKQorICAgICAgICBzZWxmLmlucHV0ID0gaW5wdXQKKyAgICAgICAgc2VsZi5kc2xfbmFtZSA9IGRzbF9uYW1lCisgICAgICAgIHNlbGYuc2lnbmF0dXJlcyA9IHNpZ25hdHVyZXMgb3IgW10KKyAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKKyAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRlbnQKKyAgICAgICAgc2VsZi5wcmVpbmRlbnQgPSBwcmVpbmRlbnQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgZHNsX25hbWUgPSBzZWxmLmRzbF9uYW1lIG9yICJ0ZXh0IgorICAgICAgICBkZWYgc3VtbWFyaXplKHMpOgorICAgICAgICAgICAgcyA9IHJlcHIocykKKyAgICAgICAgICAgIGlmIGxlbihzKSA+IDMwOgorICAgICAgICAgICAgICAgIHJldHVybiBzWzoyNl0gKyAiLi4uIiArIHNbMF0KKyAgICAgICAgICAgIHJldHVybiBzCisgICAgICAgIHJldHVybiAiIi5qb2luKCgKKyAgICAgICAgICAgICI8QmxvY2sgIiwgZHNsX25hbWUsICIgaW5wdXQ9Iiwgc3VtbWFyaXplKHNlbGYuaW5wdXQpLCAiIG91dHB1dD0iLCBzdW1tYXJpemUoc2VsZi5vdXRwdXQpLCAiPiIpKQorCisKK2NsYXNzIEJsb2NrUGFyc2VyOgorICAgICIiIgorICAgIEJsb2NrLW9yaWVudGVkIHBhcnNlciBmb3IgQXJndW1lbnQgQ2xpbmljLgorICAgIEl0ZXJhdG9yLCB5aWVsZHMgQmxvY2sgb2JqZWN0cy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dCwgbGFuZ3VhZ2UsICosIHZlcmlmeT1UcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgICJpbnB1dCIgc2hvdWxkIGJlIGEgc3RyIG9iamVjdAorICAgICAgICB3aXRoIGVtYmVkZGVkIFxuIGNoYXJhY3RlcnMuCisKKyAgICAgICAgImxhbmd1YWdlIiBzaG91bGQgYmUgYSBMYW5ndWFnZSBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICBsYW5ndWFnZS52YWxpZGF0ZSgpCisKKyAgICAgICAgc2VsZi5pbnB1dCA9IGNvbGxlY3Rpb25zLmRlcXVlKHJldmVyc2VkKGlucHV0LnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpKQorICAgICAgICBzZWxmLmJsb2NrX3N0YXJ0X2xpbmVfbnVtYmVyID0gc2VsZi5saW5lX251bWJlciA9IDAKKworICAgICAgICBzZWxmLmxhbmd1YWdlID0gbGFuZ3VhZ2UKKyAgICAgICAgYmVmb3JlLCBfLCBhZnRlciA9IGxhbmd1YWdlLnN0YXJ0X2xpbmUucGFydGl0aW9uKCd7ZHNsX25hbWV9JykKKyAgICAgICAgYXNzZXJ0IF8gPT0gJ3tkc2xfbmFtZX0nCisgICAgICAgIHNlbGYuZmluZF9zdGFydF9yZSA9IGNyZWF0ZV9yZWdleChiZWZvcmUsIGFmdGVyLCB3aG9sZV9saW5lPUZhbHNlKQorICAgICAgICBzZWxmLnN0YXJ0X3JlID0gY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIpCisgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CisgICAgICAgIHNlbGYubGFzdF9jaGVja3N1bV9yZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sYXN0X2RzbF9uYW1lID0gTm9uZQorICAgICAgICBzZWxmLmRzbF9uYW1lID0gTm9uZQorICAgICAgICBzZWxmLmZpcnN0X2Jsb2NrID0gVHJ1ZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuaW5wdXQ6CisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorCisgICAgICAgICAgICBpZiBzZWxmLmRzbF9uYW1lOgorICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYucGFyc2VfY2xpbmljX2Jsb2NrKHNlbGYuZHNsX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5kc2xfbmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLmZpcnN0X2Jsb2NrID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCisgICAgICAgICAgICBibG9jayA9IHNlbGYucGFyc2VfdmVyYmF0aW1fYmxvY2soKQorICAgICAgICAgICAgaWYgc2VsZi5maXJzdF9ibG9jayBhbmQgbm90IGJsb2NrLmlucHV0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmZpcnN0X2Jsb2NrID0gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBibG9jaworCisKKyAgICBkZWYgaXNfc3RhcnRfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgbWF0Y2ggPSBzZWxmLnN0YXJ0X3JlLm1hdGNoKGxpbmUubHN0cmlwKCkpCisgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5vbmUKKworICAgIGRlZiBfbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5saW5lX251bWJlciArPSAxCisgICAgICAgIGxpbmUgPSBzZWxmLmlucHV0LnBvcCgpCisgICAgICAgIHNlbGYubGFuZ3VhZ2UucGFyc2VfbGluZShsaW5lKQorICAgICAgICByZXR1cm4gbGluZQorCisgICAgZGVmIHBhcnNlX3ZlcmJhdGltX2Jsb2NrKHNlbGYpOgorICAgICAgICBhZGQsIG91dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBzZWxmLmJsb2NrX3N0YXJ0X2xpbmVfbnVtYmVyID0gc2VsZi5saW5lX251bWJlcgorCisgICAgICAgIHdoaWxlIHNlbGYuaW5wdXQ6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fbGluZSgpCisgICAgICAgICAgICBkc2xfbmFtZSA9IHNlbGYuaXNfc3RhcnRfbGluZShsaW5lKQorICAgICAgICAgICAgaWYgZHNsX25hbWU6CisgICAgICAgICAgICAgICAgc2VsZi5kc2xfbmFtZSA9IGRzbF9uYW1lCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGFkZChsaW5lKQorCisgICAgICAgIHJldHVybiBCbG9jayhvdXRwdXQoKSkKKworICAgIGRlZiBwYXJzZV9jbGluaWNfYmxvY2soc2VsZiwgZHNsX25hbWUpOgorICAgICAgICBpbnB1dF9hZGQsIGlucHV0X291dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBzZWxmLmJsb2NrX3N0YXJ0X2xpbmVfbnVtYmVyID0gc2VsZi5saW5lX251bWJlciArIDEKKyAgICAgICAgc3RvcF9saW5lID0gc2VsZi5sYW5ndWFnZS5zdG9wX2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKQorICAgICAgICBib2R5X3ByZWZpeCA9IHNlbGYubGFuZ3VhZ2UuYm9keV9wcmVmaXguZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKQorCisgICAgICAgIGRlZiBpc19zdG9wX2xpbmUobGluZSk6CisgICAgICAgICAgICAjIG1ha2Ugc3VyZSB0byByZWNvZ25pemUgc3RvcCBsaW5lIGV2ZW4gaWYgaXQKKyAgICAgICAgICAgICMgZG9lc24ndCBlbmQgd2l0aCBFT0wgKGl0IGNvdWxkIGJlIHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoc3RvcF9saW5lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJlbWFpbmRlciA9IGxpbmVbbGVuKHN0b3BfbGluZSk6XQorICAgICAgICAgICAgcmV0dXJuIChub3QgcmVtYWluZGVyKSBvciByZW1haW5kZXIuaXNzcGFjZSgpCisKKyAgICAgICAgIyBjb25zdW1lIGJvZHkgb2YgcHJvZ3JhbQorICAgICAgICB3aGlsZSBzZWxmLmlucHV0OgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xpbmUoKQorICAgICAgICAgICAgaWYgaXNfc3RvcF9saW5lKGxpbmUpIG9yIHNlbGYuaXNfc3RhcnRfbGluZShsaW5lKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgYm9keV9wcmVmaXg6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUubHN0cmlwKCkKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGluZS5zdGFydHN3aXRoKGJvZHlfcHJlZml4KQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lW2xlbihib2R5X3ByZWZpeCk6XQorICAgICAgICAgICAgaW5wdXRfYWRkKGxpbmUpCisKKyAgICAgICAgIyBjb25zdW1lIG91dHB1dCBhbmQgY2hlY2tzdW0gbGluZSwgaWYgcHJlc2VudC4KKyAgICAgICAgaWYgc2VsZi5sYXN0X2RzbF9uYW1lID09IGRzbF9uYW1lOgorICAgICAgICAgICAgY2hlY2tzdW1fcmUgPSBzZWxmLmxhc3RfY2hlY2tzdW1fcmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJlZm9yZSwgXywgYWZ0ZXIgPSBzZWxmLmxhbmd1YWdlLmNoZWNrc3VtX2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lLCBhcmd1bWVudHM9J3thcmd1bWVudHN9JykucGFydGl0aW9uKCd7YXJndW1lbnRzfScpCisgICAgICAgICAgICBhc3NlcnQgXyA9PSAne2FyZ3VtZW50c30nCisgICAgICAgICAgICBjaGVja3N1bV9yZSA9IGNyZWF0ZV9yZWdleChiZWZvcmUsIGFmdGVyLCB3b3JkPUZhbHNlKQorICAgICAgICAgICAgc2VsZi5sYXN0X2RzbF9uYW1lID0gZHNsX25hbWUKKyAgICAgICAgICAgIHNlbGYubGFzdF9jaGVja3N1bV9yZSA9IGNoZWNrc3VtX3JlCisKKyAgICAgICAgIyBzY2FuIGZvcndhcmQgZm9yIGNoZWNrc3VtIGxpbmUKKyAgICAgICAgb3V0cHV0X2FkZCwgb3V0cHV0X291dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBhcmd1bWVudHMgPSBOb25lCisgICAgICAgIHdoaWxlIHNlbGYuaW5wdXQ6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fbGluZSgpCisgICAgICAgICAgICBtYXRjaCA9IGNoZWNrc3VtX3JlLm1hdGNoKGxpbmUubHN0cmlwKCkpCisgICAgICAgICAgICBhcmd1bWVudHMgPSBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5vbmUKKyAgICAgICAgICAgIGlmIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgb3V0cHV0X2FkZChsaW5lKQorICAgICAgICAgICAgaWYgc2VsZi5pc19zdGFydF9saW5lKGxpbmUpOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgb3V0cHV0ID0gb3V0cHV0X291dHB1dCgpCisgICAgICAgIGlmIGFyZ3VtZW50czoKKyAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgZm9yIGZpZWxkIGluIHNobGV4LnNwbGl0KGFyZ3VtZW50cyk6CisgICAgICAgICAgICAgICAgbmFtZSwgZXF1YWxzLCB2YWx1ZSA9IGZpZWxkLnBhcnRpdGlvbignPScpCisgICAgICAgICAgICAgICAgaWYgbm90IGVxdWFsczoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiTWFuZ2xlZCBBcmd1bWVudCBDbGluaWMgbWFya2VyIGxpbmU6IHshcn0iLmZvcm1hdChsaW5lKSkKKyAgICAgICAgICAgICAgICBkW25hbWUuc3RyaXAoKV0gPSB2YWx1ZS5zdHJpcCgpCisKKyAgICAgICAgICAgIGlmIHNlbGYudmVyaWZ5OgorICAgICAgICAgICAgICAgIGlmICdpbnB1dCcgaW4gZDoKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBkWydvdXRwdXQnXQorICAgICAgICAgICAgICAgICAgICBpbnB1dF9jaGVja3N1bSA9IGRbJ2lucHV0J10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSA9IGRbJ2NoZWNrc3VtJ10KKyAgICAgICAgICAgICAgICAgICAgaW5wdXRfY2hlY2tzdW0gPSBOb25lCisKKyAgICAgICAgICAgICAgICBjb21wdXRlZCA9IGNvbXB1dGVfY2hlY2tzdW0ob3V0cHV0LCBsZW4oY2hlY2tzdW0pKQorICAgICAgICAgICAgICAgIGlmIGNoZWNrc3VtICE9IGNvbXB1dGVkOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJDaGVja3N1bSBtaXNtYXRjaCFcbkV4cGVjdGVkOiB7fVxuQ29tcHV0ZWQ6IHt9XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIlN1Z2dlc3RlZCBmaXg6IHJlbW92ZSBhbGwgZ2VuZXJhdGVkIGNvZGUgaW5jbHVkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGVuZCBtYXJrZXIsXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9yIHVzZSB0aGUgJy1mJyBvcHRpb24uIgorICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChjaGVja3N1bSwgY29tcHV0ZWQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBwdXQgYmFjayBvdXRwdXQKKyAgICAgICAgICAgIG91dHB1dF9saW5lcyA9IG91dHB1dC5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpCisgICAgICAgICAgICBzZWxmLmxpbmVfbnVtYmVyIC09IGxlbihvdXRwdXRfbGluZXMpCisgICAgICAgICAgICBzZWxmLmlucHV0LmV4dGVuZChyZXZlcnNlZChvdXRwdXRfbGluZXMpKQorICAgICAgICAgICAgb3V0cHV0ID0gTm9uZQorCisgICAgICAgIHJldHVybiBCbG9jayhpbnB1dF9vdXRwdXQoKSwgZHNsX25hbWUsIG91dHB1dD1vdXRwdXQpCisKKworY2xhc3MgQmxvY2tQcmludGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhbmd1YWdlLCBmPU5vbmUpOgorICAgICAgICBzZWxmLmxhbmd1YWdlID0gbGFuZ3VhZ2UKKyAgICAgICAgc2VsZi5mID0gZiBvciBpby5TdHJpbmdJTygpCisKKyAgICBkZWYgcHJpbnRfYmxvY2soc2VsZiwgYmxvY2spOgorICAgICAgICBpbnB1dCA9IGJsb2NrLmlucHV0CisgICAgICAgIG91dHB1dCA9IGJsb2NrLm91dHB1dAorICAgICAgICBkc2xfbmFtZSA9IGJsb2NrLmRzbF9uYW1lCisgICAgICAgIHdyaXRlID0gc2VsZi5mLndyaXRlCisKKyAgICAgICAgYXNzZXJ0IG5vdCAoKGRzbF9uYW1lID09IE5vbmUpIF4gKG91dHB1dCA9PSBOb25lKSksICJ5b3UgbXVzdCBzcGVjaWZ5IGRzbF9uYW1lIGFuZCBvdXRwdXQgdG9nZXRoZXIsIGRzbF9uYW1lICIgKyByZXByKGRzbF9uYW1lKQorCisgICAgICAgIGlmIG5vdCBkc2xfbmFtZToKKyAgICAgICAgICAgIHdyaXRlKGlucHV0KQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd3JpdGUoc2VsZi5sYW5ndWFnZS5zdGFydF9saW5lLmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSkpCisgICAgICAgIHdyaXRlKCJcbiIpCisKKyAgICAgICAgYm9keV9wcmVmaXggPSBzZWxmLmxhbmd1YWdlLmJvZHlfcHJlZml4LmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSkKKyAgICAgICAgaWYgbm90IGJvZHlfcHJlZml4OgorICAgICAgICAgICAgd3JpdGUoaW5wdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBpbnB1dC5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICB3cml0ZShib2R5X3ByZWZpeCkKKyAgICAgICAgICAgICAgICB3cml0ZShsaW5lKQorICAgICAgICAgICAgICAgIHdyaXRlKCJcbiIpCisKKyAgICAgICAgd3JpdGUoc2VsZi5sYW5ndWFnZS5zdG9wX2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKSkKKyAgICAgICAgd3JpdGUoIlxuIikKKworICAgICAgICBpbnB1dCA9ICcnLmpvaW4oYmxvY2suaW5wdXQpCisgICAgICAgIG91dHB1dCA9ICcnLmpvaW4oYmxvY2sub3V0cHV0KQorICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICBpZiBub3Qgb3V0cHV0LmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgICAgIG91dHB1dCArPSAnXG4nCisgICAgICAgICAgICB3cml0ZShvdXRwdXQpCisKKyAgICAgICAgYXJndW1lbnRzPSJvdXRwdXQ9e30gaW5wdXQ9e30iLmZvcm1hdChjb21wdXRlX2NoZWNrc3VtKG91dHB1dCwgMTYpLCBjb21wdXRlX2NoZWNrc3VtKGlucHV0LCAxNikpCisgICAgICAgIHdyaXRlKHNlbGYubGFuZ3VhZ2UuY2hlY2tzdW1fbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUsIGFyZ3VtZW50cz1hcmd1bWVudHMpKQorICAgICAgICB3cml0ZSgiXG4iKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLmYud3JpdGUodGV4dCkKKworCitjbGFzcyBEZXN0aW5hdGlvbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdHlwZSwgY2xpbmljLCAqYXJncyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi50eXBlID0gdHlwZQorICAgICAgICBzZWxmLmNsaW5pYyA9IGNsaW5pYworICAgICAgICB2YWxpZF90eXBlcyA9ICgnYnVmZmVyJywgJ2ZpbGUnLCAnc3VwcHJlc3MnLCAndHdvLXBhc3MnKQorICAgICAgICBpZiB0eXBlIG5vdCBpbiB2YWxpZF90eXBlczoKKyAgICAgICAgICAgIGZhaWwoIkludmFsaWQgZGVzdGluYXRpb24gdHlwZSAiICsgcmVwcih0eXBlKSArICIgZm9yICIgKyBuYW1lICsgIiAsIG11c3QgYmUgIiArICcsICcuam9pbih2YWxpZF90eXBlcykpCisgICAgICAgIGV4dHJhX2FyZ3VtZW50cyA9IDEgaWYgdHlwZSA9PSAiZmlsZSIgZWxzZSAwCisgICAgICAgIGlmIGxlbihhcmdzKSA8IGV4dHJhX2FyZ3VtZW50czoKKyAgICAgICAgICAgIGZhaWwoIk5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBkZXN0aW5hdGlvbiAiICsgbmFtZSArICIgbmV3ICIgKyB0eXBlKQorICAgICAgICBpZiBsZW4oYXJncykgPiBleHRyYV9hcmd1bWVudHM6CisgICAgICAgICAgICBmYWlsKCJUb28gbWFueSBhcmd1bWVudHMgZm9yIGRlc3RpbmF0aW9uICIgKyBuYW1lICsgIiBuZXcgIiArIHR5cGUpCisgICAgICAgIGlmIHR5cGUgPT0nZmlsZSc6CisgICAgICAgICAgICBkID0ge30KKyAgICAgICAgICAgIGZpbGVuYW1lID0gY2xpbmljLmZpbGVuYW1lCisgICAgICAgICAgICBkWydwYXRoJ10gPSBmaWxlbmFtZQorICAgICAgICAgICAgZGlybmFtZSwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgbm90IGRpcm5hbWU6CisgICAgICAgICAgICAgICAgZGlybmFtZSA9ICcuJworICAgICAgICAgICAgZFsnZGlybmFtZSddID0gZGlybmFtZQorICAgICAgICAgICAgZFsnYmFzZW5hbWUnXSA9IGJhc2VuYW1lCisgICAgICAgICAgICBkWydiYXNlbmFtZV9yb290J10sIGRbJ2Jhc2VuYW1lX2V4dGVuc2lvbiddID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBhcmdzWzBdLmZvcm1hdF9tYXAoZCkKKyAgICAgICAgaWYgdHlwZSA9PSAndHdvLXBhc3MnOgorICAgICAgICAgICAgc2VsZi5pZCA9IE5vbmUKKworICAgICAgICBzZWxmLnRleHQsIHNlbGYuYXBwZW5kLCBzZWxmLl9kdW1wID0gX3RleHRfYWNjdW11bGF0b3IoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnR5cGUgPT0gJ2ZpbGUnOgorICAgICAgICAgICAgZmlsZV9yZXByID0gIiAiICsgcmVwcihzZWxmLmZpbGVuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZV9yZXByID0gJycKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oKCI8RGVzdGluYXRpb24gIiwgc2VsZi5uYW1lLCAiICIsIHNlbGYudHlwZSwgZmlsZV9yZXByLCAiPiIpKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnR5cGUgIT0gJ2J1ZmZlcic6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBjbGVhciBkZXN0aW5hdGlvbiIgKyBzZWxmLm5hbWUgKyAiICwgaXQncyBub3Qgb2YgdHlwZSBidWZmZXIiKQorICAgICAgICBzZWxmLnRleHQuY2xlYXIoKQorCisgICAgZGVmIGR1bXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYudHlwZSA9PSAndHdvLXBhc3MnOgorICAgICAgICAgICAgaWYgc2VsZi5pZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuaWQgPSBzdHIodXVpZC51dWlkNCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmlkCisgICAgICAgICAgICBmYWlsKCJZb3UgY2FuIG9ubHkgZHVtcCBhIHR3by1wYXNzIGJ1ZmZlciBleGFjdGx5IG9uY2UhIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2R1bXAoKQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIExhbmd1YWdlIG9iamVjdHMuCisjICJsYW5ndWFnZXMiIG1hcHMgdGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlICgiQyIsICJQeXRob24iKS4KKyMgImV4dGVuc2lvbnMiIG1hcHMgdGhlIGZpbGUgZXh0ZW5zaW9uICgiYyIsICJweSIpLgorbGFuZ3VhZ2VzID0geyAnQyc6IENMYW5ndWFnZSwgJ1B5dGhvbic6IFB5dGhvbkxhbmd1YWdlIH0KK2V4dGVuc2lvbnMgPSB7IG5hbWU6IENMYW5ndWFnZSBmb3IgbmFtZSBpbiAiYyBjYyBjcHAgY3h4IGggaGggaHBwIGh4eCIuc3BsaXQoKSB9CitleHRlbnNpb25zWydweSddID0gUHl0aG9uTGFuZ3VhZ2UKKworCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBtdXN0IGJlIG9mIHRoZSBmb3JtOgorIyAgIGRlZiBmb28obmFtZSwgZGVmYXVsdCwgKiwgLi4uKQorIyBUaGUgY2FsbGFibGUgbWF5IGhhdmUgYW55IG51bWJlciBvZiBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KKyMgVGhlIGNhbGxhYmxlIG11c3QgcmV0dXJuIGEgQ0NvbnZlcnRlciBvYmplY3QuCisjIFRoZSBjYWxsYWJsZSBzaG91bGQgbm90IGNhbGwgYnVpbHRpbnMucHJpbnQuCitjb252ZXJ0ZXJzID0ge30KKworIyBtYXBzIHN0cmluZ3MgdG8gY2FsbGFibGVzLgorIyB0aGVzZSBjYWxsYWJsZXMgZm9sbG93IHRoZSBzYW1lIHJ1bGVzIGFzIHRob3NlIGZvciAiY29udmVydGVycyIgYWJvdmUuCisjIG5vdGUgaG93ZXZlciB0aGF0IHRoZXkgd2lsbCBuZXZlciBiZSBjYWxsZWQgd2l0aCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KK2xlZ2FjeV9jb252ZXJ0ZXJzID0ge30KKworCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBtdXN0IGJlIG9mIHRoZSBmb3JtOgorIyAgIGRlZiBmb28oKiwgLi4uKQorIyBUaGUgY2FsbGFibGUgbWF5IGhhdmUgYW55IG51bWJlciBvZiBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KKyMgVGhlIGNhbGxhYmxlIG11c3QgcmV0dXJuIGEgQ0NvbnZlcnRlciBvYmplY3QuCisjIFRoZSBjYWxsYWJsZSBzaG91bGQgbm90IGNhbGwgYnVpbHRpbnMucHJpbnQuCityZXR1cm5fY29udmVydGVycyA9IHt9CisKK2NsaW5pYyA9IE5vbmUKK2NsYXNzIENsaW5pYzoKKworICAgIHByZXNldHNfdGV4dCA9ICIiIgorcHJlc2V0IGJsb2NrCitldmVyeXRoaW5nIGJsb2NrCitkb2NzdHJpbmdfcHJvdG90eXBlIHN1cHByZXNzCitwYXJzZXJfcHJvdG90eXBlIHN1cHByZXNzCitjcHBfaWYgc3VwcHJlc3MKK2NwcF9lbmRpZiBzdXBwcmVzcworbWV0aG9kZGVmX2lmbmRlZiBidWZmZXIKKworcHJlc2V0IG9yaWdpbmFsCitldmVyeXRoaW5nIGJsb2NrCitkb2NzdHJpbmdfcHJvdG90eXBlIHN1cHByZXNzCitwYXJzZXJfcHJvdG90eXBlIHN1cHByZXNzCitjcHBfaWYgc3VwcHJlc3MKK2NwcF9lbmRpZiBzdXBwcmVzcworbWV0aG9kZGVmX2lmbmRlZiBidWZmZXIKKworcHJlc2V0IGZpbGUKK2V2ZXJ5dGhpbmcgZmlsZQorZG9jc3RyaW5nX3Byb3RvdHlwZSBzdXBwcmVzcworcGFyc2VyX3Byb3RvdHlwZSBzdXBwcmVzcworaW1wbF9kZWZpbml0aW9uIGJsb2NrCisKK3ByZXNldCBidWZmZXIKK2V2ZXJ5dGhpbmcgYnVmZmVyCitkb2NzdHJpbmdfcHJvdG90eXBlIHN1cHByZXNzCitpbXBsX3Byb3RvdHlwZSBzdXBwcmVzcworcGFyc2VyX3Byb3RvdHlwZSBzdXBwcmVzcworaW1wbF9kZWZpbml0aW9uIGJsb2NrCisKK3ByZXNldCBwYXJ0aWFsLWJ1ZmZlcgorZXZlcnl0aGluZyBidWZmZXIKK2RvY3N0cmluZ19wcm90b3R5cGUgYmxvY2sKK2ltcGxfcHJvdG90eXBlIHN1cHByZXNzCittZXRob2RkZWZfZGVmaW5lIGJsb2NrCitwYXJzZXJfcHJvdG90eXBlIGJsb2NrCitpbXBsX2RlZmluaXRpb24gYmxvY2sKKworcHJlc2V0IHR3by1wYXNzCitldmVyeXRoaW5nIGJ1ZmZlcgorZG9jc3RyaW5nX3Byb3RvdHlwZSB0d28tcGFzcworaW1wbF9wcm90b3R5cGUgc3VwcHJlc3MKK21ldGhvZGRlZl9kZWZpbmUgdHdvLXBhc3MKK3BhcnNlcl9wcm90b3R5cGUgdHdvLXBhc3MKK2ltcGxfZGVmaW5pdGlvbiBibG9jaworCisiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYW5ndWFnZSwgcHJpbnRlcj1Ob25lLCAqLCBmb3JjZT1GYWxzZSwgdmVyaWZ5PVRydWUsIGZpbGVuYW1lPU5vbmUpOgorICAgICAgICAjIG1hcHMgc3RyaW5ncyB0byBQYXJzZXIgb2JqZWN0cy4KKyAgICAgICAgIyAoaW5zdGFudGlhdGVkIGZyb20gdGhlICJwYXJzZXJzIiBnbG9iYWwuKQorICAgICAgICBzZWxmLnBhcnNlcnMgPSB7fQorICAgICAgICBzZWxmLmxhbmd1YWdlID0gbGFuZ3VhZ2UKKyAgICAgICAgaWYgcHJpbnRlcjoKKyAgICAgICAgICAgIGZhaWwoIkN1c3RvbSBwcmludGVycyBhcmUgYnJva2VuIHJpZ2h0IG5vdyIpCisgICAgICAgIHNlbGYucHJpbnRlciA9IHByaW50ZXIgb3IgQmxvY2tQcmludGVyKGxhbmd1YWdlKQorICAgICAgICBzZWxmLnZlcmlmeSA9IHZlcmlmeQorICAgICAgICBzZWxmLmZvcmNlID0gZm9yY2UKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYubW9kdWxlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmZ1bmN0aW9ucyA9IFtdCisKKyAgICAgICAgc2VsZi5saW5lX3ByZWZpeCA9IHNlbGYubGluZV9zdWZmaXggPSAnJworCisgICAgICAgIHNlbGYuZGVzdGluYXRpb25zID0ge30KKyAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oImJsb2NrIiwgImJ1ZmZlciIpCisgICAgICAgIHNlbGYuYWRkX2Rlc3RpbmF0aW9uKCJzdXBwcmVzcyIsICJzdXBwcmVzcyIpCisgICAgICAgIHNlbGYuYWRkX2Rlc3RpbmF0aW9uKCJidWZmZXIiLCAiYnVmZmVyIikKKyAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oInR3by1wYXNzIiwgInR3by1wYXNzIikKKyAgICAgICAgaWYgZmlsZW5hbWU6CisgICAgICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigiZmlsZSIsICJmaWxlIiwgIntkaXJuYW1lfS9jbGluaWMve2Jhc2VuYW1lfS5oIikKKworICAgICAgICBkID0gc2VsZi5kZXN0aW5hdGlvbnMuZ2V0CisgICAgICAgIHNlbGYuZmllbGRfZGVzdGluYXRpb25zID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgKCdjcHBfaWYnLCBkKCdzdXBwcmVzcycpKSwKKyAgICAgICAgICAgICgnZG9jc3RyaW5nX3Byb3RvdHlwZScsIGQoJ3N1cHByZXNzJykpLAorICAgICAgICAgICAgKCdkb2NzdHJpbmdfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAorICAgICAgICAgICAgKCdtZXRob2RkZWZfZGVmaW5lJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ2ltcGxfcHJvdG90eXBlJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ3BhcnNlcl9wcm90b3R5cGUnLCBkKCdzdXBwcmVzcycpKSwKKyAgICAgICAgICAgICgncGFyc2VyX2RlZmluaXRpb24nLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgnY3BwX2VuZGlmJywgZCgnc3VwcHJlc3MnKSksCisgICAgICAgICAgICAoJ21ldGhvZGRlZl9pZm5kZWYnLCBkKCdidWZmZXInKSksCisgICAgICAgICAgICAoJ2ltcGxfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAorICAgICAgICApKQorCisgICAgICAgIHNlbGYuZmllbGRfZGVzdGluYXRpb25zX3N0YWNrID0gW10KKworICAgICAgICBzZWxmLnByZXNldHMgPSB7fQorICAgICAgICBwcmVzZXQgPSBOb25lCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYucHJlc2V0c190ZXh0LnN0cmlwKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gJ3ByZXNldCc6CisgICAgICAgICAgICAgICAgc2VsZi5wcmVzZXRzW3ZhbHVlXSA9IHByZXNldCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNlbGYuZ2V0X2Rlc3RpbmF0aW9uKHZhbHVlKQorCisgICAgICAgICAgICBpZiBuYW1lID09ICdldmVyeXRoaW5nJzoKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmZpZWxkX2Rlc3RpbmF0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgcHJlc2V0W25hbWVdID0gZGVzdGluYXRpb24KKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBhc3NlcnQgbmFtZSBpbiBzZWxmLmZpZWxkX2Rlc3RpbmF0aW9ucworICAgICAgICAgICAgcHJlc2V0W25hbWVdID0gZGVzdGluYXRpb24KKworICAgICAgICBnbG9iYWwgY2xpbmljCisgICAgICAgIGNsaW5pYyA9IHNlbGYKKworICAgIGRlZiBnZXRfZGVzdGluYXRpb24oc2VsZiwgbmFtZSwgZGVmYXVsdD11bnNwZWNpZmllZCk6CisgICAgICAgIGQgPSBzZWxmLmRlc3RpbmF0aW9ucy5nZXQobmFtZSkKKyAgICAgICAgaWYgbm90IGQ6CisgICAgICAgICAgICBpZiBkZWZhdWx0IGlzIG5vdCB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICAgICAgZmFpbCgiRGVzdGluYXRpb24gZG9lcyBub3QgZXhpc3Q6ICIgKyByZXByKG5hbWUpKQorICAgICAgICByZXR1cm4gZAorCisgICAgZGVmIGFkZF9kZXN0aW5hdGlvbihzZWxmLCBuYW1lLCB0eXBlLCAqYXJncyk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5kZXN0aW5hdGlvbnM6CisgICAgICAgICAgICBmYWlsKCJEZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0czogIiArIHJlcHIobmFtZSkpCisgICAgICAgIHNlbGYuZGVzdGluYXRpb25zW25hbWVdID0gRGVzdGluYXRpb24obmFtZSwgdHlwZSwgc2VsZiwgKmFyZ3MpCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgaW5wdXQpOgorICAgICAgICBwcmludGVyID0gc2VsZi5wcmludGVyCisgICAgICAgIHNlbGYuYmxvY2tfcGFyc2VyID0gQmxvY2tQYXJzZXIoaW5wdXQsIHNlbGYubGFuZ3VhZ2UsIHZlcmlmeT1zZWxmLnZlcmlmeSkKKyAgICAgICAgZm9yIGJsb2NrIGluIHNlbGYuYmxvY2tfcGFyc2VyOgorICAgICAgICAgICAgZHNsX25hbWUgPSBibG9jay5kc2xfbmFtZQorICAgICAgICAgICAgaWYgZHNsX25hbWU6CisgICAgICAgICAgICAgICAgaWYgZHNsX25hbWUgbm90IGluIHNlbGYucGFyc2VyczoKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGRzbF9uYW1lIGluIHBhcnNlcnMsICJObyBwYXJzZXIgdG8gaGFuZGxlIHshcn0gYmxvY2suIi5mb3JtYXQoZHNsX25hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2Vyc1tkc2xfbmFtZV0gPSBwYXJzZXJzW2RzbF9uYW1lXShzZWxmKQorICAgICAgICAgICAgICAgIHBhcnNlciA9IHNlbGYucGFyc2Vyc1tkc2xfbmFtZV0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCdFeGNlcHRpb24gcmFpc2VkIGR1cmluZyBwYXJzaW5nOlxuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLmZvcm1hdF9leGMoKS5yc3RyaXAoKSkKKyAgICAgICAgICAgIHByaW50ZXIucHJpbnRfYmxvY2soYmxvY2spCisKKyAgICAgICAgc2Vjb25kX3Bhc3NfcmVwbGFjZW1lbnRzID0ge30KKworICAgICAgICBmb3IgbmFtZSwgZGVzdGluYXRpb24gaW4gc2VsZi5kZXN0aW5hdGlvbnMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGRlc3RpbmF0aW9uLnR5cGUgPT0gJ3N1cHByZXNzJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgb3V0cHV0ID0gZGVzdGluYXRpb24uX2R1bXAoKQorCisgICAgICAgICAgICBpZiBkZXN0aW5hdGlvbi50eXBlID09ICd0d28tcGFzcyc6CisgICAgICAgICAgICAgICAgaWYgZGVzdGluYXRpb24uaWQ6CisgICAgICAgICAgICAgICAgICAgIHNlY29uZF9wYXNzX3JlcGxhY2VtZW50c1tkZXN0aW5hdGlvbi5pZF0gPSBvdXRwdXQKKyAgICAgICAgICAgICAgICBlbGlmIG91dHB1dDoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiVHdvLXBhc3MgYnVmZmVyICIgKyByZXByKG5hbWUpICsgIiBub3QgZW1wdHkgYXQgZW5kIG9mIGZpbGUhIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBvdXRwdXQ6CisKKyAgICAgICAgICAgICAgICBibG9jayA9IEJsb2NrKCIiLCBkc2xfbmFtZT0iY2xpbmljIiwgb3V0cHV0PW91dHB1dCkKKworICAgICAgICAgICAgICAgIGlmIGRlc3RpbmF0aW9uLnR5cGUgPT0gJ2J1ZmZlcic6CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmlucHV0ID0gImR1bXAgIiArIG5hbWUgKyAiXG4iCisgICAgICAgICAgICAgICAgICAgIHdhcm4oIkRlc3RpbmF0aW9uIGJ1ZmZlciAiICsgcmVwcihuYW1lKSArICIgbm90IGVtcHR5IGF0IGVuZCBvZiBmaWxlLCBlbXB0eWluZy4iKQorICAgICAgICAgICAgICAgICAgICBwcmludGVyLndyaXRlKCJcbiIpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZXIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBkZXN0aW5hdGlvbi50eXBlID09ICdmaWxlJzoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShkZXN0aW5hdGlvbi5maWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkaXJuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiQ2FuJ3Qgd3JpdGUgdG8gZGVzdGluYXRpb24ge30sICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgbWFrZSBkaXJlY3Rvcnkge30hIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZmlsZW5hbWUsIGRpcm5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJpZnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGRlc3RpbmF0aW9uLmZpbGVuYW1lLCAicnQiKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJfMiA9IEJsb2NrUGFyc2VyKGYucmVhZCgpLCBsYW5ndWFnZT1zZWxmLmxhbmd1YWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3MgPSBsaXN0KHBhcnNlcl8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKGJsb2NrcykgIT0gMSkgb3IgKGJsb2Nrc1swXS5pbnB1dCAhPSAncHJlc2VydmVcbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiTW9kaWZpZWQgZGVzdGluYXRpb24gZmlsZSAiICsgcmVwcihkZXN0aW5hdGlvbi5maWxlbmFtZSkgKyAiLCBub3Qgb3ZlcndyaXRpbmchIikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmlucHV0ID0gJ3ByZXNlcnZlXG4nCisgICAgICAgICAgICAgICAgICAgIHByaW50ZXJfMiA9IEJsb2NrUHJpbnRlcihzZWxmLmxhbmd1YWdlKQorICAgICAgICAgICAgICAgICAgICBwcmludGVyXzIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihkZXN0aW5hdGlvbi5maWxlbmFtZSwgInd0IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUocHJpbnRlcl8yLmYuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdGV4dCA9IHByaW50ZXIuZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgaWYgc2Vjb25kX3Bhc3NfcmVwbGFjZW1lbnRzOgorICAgICAgICAgICAgcHJpbnRlcl8yID0gQmxvY2tQcmludGVyKHNlbGYubGFuZ3VhZ2UpCisgICAgICAgICAgICBwYXJzZXJfMiA9IEJsb2NrUGFyc2VyKHRleHQsIHNlbGYubGFuZ3VhZ2UpCisgICAgICAgICAgICBjaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBibG9jayBpbiBwYXJzZXJfMjoKKyAgICAgICAgICAgICAgICBpZiBibG9jay5kc2xfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGlkLCByZXBsYWNlbWVudCBpbiBzZWNvbmRfcGFzc19yZXBsYWNlbWVudHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlkIGluIGJsb2NrLm91dHB1dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLm91dHB1dCA9IGJsb2NrLm91dHB1dC5yZXBsYWNlKGlkLCByZXBsYWNlbWVudCkKKyAgICAgICAgICAgICAgICBwcmludGVyXzIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgICAgICBpZiBjaGFuZ2VkOgorICAgICAgICAgICAgICAgIHRleHQgPSBwcmludGVyXzIuZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgcmV0dXJuIHRleHQKKworCisgICAgZGVmIF9tb2R1bGVfYW5kX2NsYXNzKHNlbGYsIGZpZWxkcyk6CisgICAgICAgICIiIgorICAgICAgICBmaWVsZHMgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIGZpZWxkIG5hbWVzLgorICAgICAgICByZXR1cm5zIGEgdHVwbGUgb2YgKG1vZHVsZSwgY2xhc3MpLgorICAgICAgICB0aGUgbW9kdWxlIG9iamVjdCBjb3VsZCBhY3R1YWxseSBiZSBzZWxmIChhIGNsaW5pYyBvYmplY3QpLgorICAgICAgICB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXZlciB1c2VkIHRvIGZpbmQgdGhlIHBhcmVudCBvZiB3aGVyZQorICAgICAgICBhIG5ldyBjbGFzcy9tb2R1bGUgc2hvdWxkIGdvLgorICAgICAgICAiIiIKKyAgICAgICAgaW5fY2xhc3NlcyA9IEZhbHNlCisgICAgICAgIHBhcmVudCA9IG1vZHVsZSA9IHNlbGYKKyAgICAgICAgY2xzID0gTm9uZQorICAgICAgICBzb19mYXIgPSBbXQorCisgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBzb19mYXIuYXBwZW5kKGZpZWxkKQorICAgICAgICAgICAgaWYgbm90IGluX2NsYXNzZXM6CisgICAgICAgICAgICAgICAgY2hpbGQgPSBwYXJlbnQubW9kdWxlcy5nZXQoZmllbGQpCisgICAgICAgICAgICAgICAgaWYgY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IG1vZHVsZSA9IGNoaWxkCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaW5fY2xhc3NlcyA9IFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHBhcmVudCwgJ2NsYXNzZXMnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLCBjbHMKKyAgICAgICAgICAgIGNoaWxkID0gcGFyZW50LmNsYXNzZXMuZ2V0KGZpZWxkKQorICAgICAgICAgICAgaWYgbm90IGNoaWxkOgorICAgICAgICAgICAgICAgIGZhaWwoJ1BhcmVudCBjbGFzcyBvciBtb2R1bGUgJyArICcuJy5qb2luKHNvX2ZhcikgKyAiIGRvZXMgbm90IGV4aXN0LiIpCisgICAgICAgICAgICBjbHMgPSBwYXJlbnQgPSBjaGlsZAorCisgICAgICAgIHJldHVybiBtb2R1bGUsIGNscworCisKK2RlZiBwYXJzZV9maWxlKGZpbGVuYW1lLCAqLCBmb3JjZT1GYWxzZSwgdmVyaWZ5PVRydWUsIG91dHB1dD1Ob25lLCBlbmNvZGluZz0ndXRmLTgnKToKKyAgICBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVsxXVsxOl0KKyAgICBpZiBub3QgZXh0ZW5zaW9uOgorICAgICAgICBmYWlsKCJDYW4ndCBleHRyYWN0IGZpbGUgdHlwZSBmb3IgZmlsZSAiICsgcmVwcihmaWxlbmFtZSkpCisKKyAgICB0cnk6CisgICAgICAgIGxhbmd1YWdlID0gZXh0ZW5zaW9uc1tleHRlbnNpb25dKGZpbGVuYW1lKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgZmFpbCgiQ2FuJ3QgaWRlbnRpZnkgZmlsZSB0eXBlIGZvciBmaWxlICIgKyByZXByKGZpbGVuYW1lKSkKKworICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgcmF3ID0gZi5yZWFkKCkKKworICAgICMgZXhpdCBxdWlja2x5IGlmIHRoZXJlIGFyZSBubyBjbGluaWMgbWFya2VycyBpbiB0aGUgZmlsZQorICAgIGZpbmRfc3RhcnRfcmUgPSBCbG9ja1BhcnNlcigiIiwgbGFuZ3VhZ2UpLmZpbmRfc3RhcnRfcmUKKyAgICBpZiBub3QgZmluZF9zdGFydF9yZS5zZWFyY2gocmF3KToKKyAgICAgICAgcmV0dXJuCisKKyAgICBjbGluaWMgPSBDbGluaWMobGFuZ3VhZ2UsIGZvcmNlPWZvcmNlLCB2ZXJpZnk9dmVyaWZ5LCBmaWxlbmFtZT1maWxlbmFtZSkKKyAgICBjb29rZWQgPSBjbGluaWMucGFyc2UocmF3KQorICAgIGlmIChjb29rZWQgPT0gcmF3KSBhbmQgbm90IGZvcmNlOgorICAgICAgICByZXR1cm4KKworICAgIGRpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShmaWxlbmFtZSkgb3IgJy4nCisKKyAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeShwcmVmaXg9ImNsaW5pYyIsIGRpcj1kaXJlY3RvcnkpIGFzIHRtcGRpcjoKKyAgICAgICAgYnl0ZXMgPSBjb29rZWQuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICB0bXBmaWxlbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIsIG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpKQorICAgICAgICB3aXRoIG9wZW4odG1wZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGJ5dGVzKQorICAgICAgICBvcy5yZXBsYWNlKHRtcGZpbGVuYW1lLCBvdXRwdXQgb3IgZmlsZW5hbWUpCisKKworZGVmIGNvbXB1dGVfY2hlY2tzdW0oaW5wdXQsIGxlbmd0aD1Ob25lKToKKyAgICBpbnB1dCA9IGlucHV0IG9yICcnCisgICAgcyA9IGhhc2hsaWIuc2hhMShpbnB1dC5lbmNvZGUoJ3V0Zi04JykpLmhleGRpZ2VzdCgpCisgICAgaWYgbGVuZ3RoOgorICAgICAgICBzID0gc1s6bGVuZ3RoXQorICAgIHJldHVybiBzCisKKworCisKK2NsYXNzIFB5dGhvblBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGJsb2NrKToKKyAgICAgICAgcyA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd2l0aCBPdmVycmlkZVN0ZGlvV2l0aChzKToKKyAgICAgICAgICAgIGV4ZWMoYmxvY2suaW5wdXQpCisgICAgICAgIGJsb2NrLm91dHB1dCA9IHMuZ2V0dmFsdWUoKQorCisKK2NsYXNzIE1vZHVsZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbW9kdWxlPU5vbmUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYubW9kdWxlID0gc2VsZi5wYXJlbnQgPSBtb2R1bGUKKworICAgICAgICBzZWxmLm1vZHVsZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuY2xhc3NlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5mdW5jdGlvbnMgPSBbXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxjbGluaWMuTW9kdWxlICIgKyByZXByKHNlbGYubmFtZSkgKyAiIGF0ICIgKyBzdHIoaWQoc2VsZikpICsgIj4iCisKK2NsYXNzIENsYXNzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBtb2R1bGU9Tm9uZSwgY2xzPU5vbmUsIHR5cGVkZWY9Tm9uZSwgdHlwZV9vYmplY3Q9Tm9uZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgc2VsZi5jbHMgPSBjbHMKKyAgICAgICAgc2VsZi50eXBlZGVmID0gdHlwZWRlZgorICAgICAgICBzZWxmLnR5cGVfb2JqZWN0ID0gdHlwZV9vYmplY3QKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBjbHMgb3IgbW9kdWxlCisKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmZ1bmN0aW9ucyA9IFtdCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPGNsaW5pYy5DbGFzcyAiICsgcmVwcihzZWxmLm5hbWUpICsgIiBhdCAiICsgc3RyKGlkKHNlbGYpKSArICI+IgorCit1bnN1cHBvcnRlZF9zcGVjaWFsX21ldGhvZHMgPSBzZXQoIiIiCisKK19fYWJzX18KK19fYWRkX18KK19fYW5kX18KK19fYnl0ZXNfXworX19jYWxsX18KK19fY29tcGxleF9fCitfX2RlbGl0ZW1fXworX19kaXZtb2RfXworX19lcV9fCitfX2Zsb2F0X18KK19fZmxvb3JkaXZfXworX19nZV9fCitfX2dldGF0dHJfXworX19nZXRhdHRyaWJ1dGVfXworX19nZXRpdGVtX18KK19fZ3RfXworX19oYXNoX18KK19faWFkZF9fCitfX2lhbmRfXworX19pZGl2bW9kX18KK19faWZsb29yZGl2X18KK19faWxzaGlmdF9fCitfX2ltb2RfXworX19pbXVsX18KK19faW5kZXhfXworX19pbnRfXworX19pbnZlcnRfXworX19pb3JfXworX19pcG93X18KK19faXJzaGlmdF9fCitfX2lzdWJfXworX19pdGVyX18KK19faXRydWVkaXZfXworX19peG9yX18KK19fbGVfXworX19sZW5fXworX19sc2hpZnRfXworX19sdF9fCitfX21vZF9fCitfX211bF9fCitfX25lZ19fCitfX25ld19fCitfX25leHRfXworX19vcl9fCitfX3Bvc19fCitfX3Bvd19fCitfX3JhZGRfXworX19yYW5kX18KK19fcmRpdm1vZF9fCitfX3JlcHJfXworX19yZmxvb3JkaXZfXworX19ybHNoaWZ0X18KK19fcm1vZF9fCitfX3JtdWxfXworX19yb3JfXworX19yb3VuZF9fCitfX3Jwb3dfXworX19ycnNoaWZ0X18KK19fcnNoaWZ0X18KK19fcnN1Yl9fCitfX3J0cnVlZGl2X18KK19fcnhvcl9fCitfX3NldGF0dHJfXworX19zZXRpdGVtX18KK19fc3RyX18KK19fc3ViX18KK19fdHJ1ZWRpdl9fCitfX3hvcl9fCisKKyIiIi5zdHJpcCgpLnNwbGl0KCkpCisKKworSU5WQUxJRCwgQ0FMTEFCTEUsIFNUQVRJQ19NRVRIT0QsIENMQVNTX01FVEhPRCwgTUVUSE9EX0lOSVQsIE1FVEhPRF9ORVcgPSAiIiIKK0lOVkFMSUQsIENBTExBQkxFLCBTVEFUSUNfTUVUSE9ELCBDTEFTU19NRVRIT0QsIE1FVEhPRF9JTklULCBNRVRIT0RfTkVXCisiIiIucmVwbGFjZSgiLCIsICIiKS5zdHJpcCgpLnNwbGl0KCkKKworY2xhc3MgRnVuY3Rpb246CisgICAgIiIiCisgICAgTXV0YWJsZSBkdWNrIHR5cGUgZm9yIGluc3BlY3QuRnVuY3Rpb24uCisKKyAgICBkb2NzdHJpbmcgLSBhIHN0ciBjb250YWluaW5nCisgICAgICAgICogZW1iZWRkZWQgbGluZSBicmVha3MKKyAgICAgICAgKiB0ZXh0IG91dGRlbnRlZCB0byB0aGUgbGVmdCBtYXJnaW4KKyAgICAgICAgKiBubyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBJdCB3aWxsIGFsd2F5cyBiZSB0cnVlIHRoYXQKKyAgICAgICAgICAgIChub3QgZG9jc3RyaW5nKSBvciAoKG5vdCBkb2NzdHJpbmdbMF0uaXNzcGFjZSgpKSBhbmQgKGRvY3N0cmluZy5yc3RyaXAoKSA9PSBkb2NzdHJpbmcpKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmFtZXRlcnM9Tm9uZSwgKiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgbW9kdWxlLCBjbHM9Tm9uZSwgY19iYXNlbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICBmdWxsX25hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciwgcmV0dXJuX2Fubm90YXRpb249X2VtcHR5LAorICAgICAgICAgICAgICAgICBkb2NzdHJpbmc9Tm9uZSwga2luZD1DQUxMQUJMRSwgY29leGlzdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgZG9jc3RyaW5nX29ubHk9RmFsc2UpOgorICAgICAgICBzZWxmLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIG9yIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5yZXR1cm5fYW5ub3RhdGlvbiA9IHJldHVybl9hbm5vdGF0aW9uCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5mdWxsX25hbWUgPSBmdWxsX25hbWUKKyAgICAgICAgc2VsZi5tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgc2VsZi5jbHMgPSBjbHMKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBjbHMgb3IgbW9kdWxlCisgICAgICAgIHNlbGYuY19iYXNlbmFtZSA9IGNfYmFzZW5hbWUKKyAgICAgICAgc2VsZi5yZXR1cm5fY29udmVydGVyID0gcmV0dXJuX2NvbnZlcnRlcgorICAgICAgICBzZWxmLmRvY3N0cmluZyA9IGRvY3N0cmluZyBvciAnJworICAgICAgICBzZWxmLmtpbmQgPSBraW5kCisgICAgICAgIHNlbGYuY29leGlzdCA9IGNvZXhpc3QKKyAgICAgICAgc2VsZi5zZWxmX2NvbnZlcnRlciA9IE5vbmUKKyAgICAgICAgIyBkb2NzdHJpbmdfb25seSBtZWFucyAiZG9uJ3QgZ2VuZXJhdGUgYSBtYWNoaW5lLXJlYWRhYmxlCisgICAgICAgICMgc2lnbmF0dXJlLCBqdXN0IGEgbm9ybWFsIGRvY3N0cmluZyIuICBpdCdzIFRydWUgZm9yCisgICAgICAgICMgZnVuY3Rpb25zIHdpdGggb3B0aW9uYWwgZ3JvdXBzIGJlY2F1c2Ugd2UgY2FuJ3QgcmVwcmVzZW50CisgICAgICAgICMgdGhvc2UgYWNjdXJhdGVseSB3aXRoIGluc3BlY3QuU2lnbmF0dXJlIGluIDMuNC4KKyAgICAgICAgc2VsZi5kb2NzdHJpbmdfb25seSA9IGRvY3N0cmluZ19vbmx5CisKKyAgICAgICAgc2VsZi5yZW5kZXJlZF9wYXJhbWV0ZXJzID0gTm9uZQorCisgICAgX19yZW5kZXJfcGFyYW1ldGVyc19fID0gTm9uZQorICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZW5kZXJfcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX19yZW5kZXJfcGFyYW1ldGVyc19fOgorICAgICAgICAgICAgc2VsZi5fX3JlbmRlcl9wYXJhbWV0ZXJzX18gPSBsID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYucGFyYW1ldGVycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBwID0gcC5jb3B5KCkKKyAgICAgICAgICAgICAgICBwLmNvbnZlcnRlci5wcmVfcmVuZGVyKCkKKyAgICAgICAgICAgICAgICBsLmFwcGVuZChwKQorICAgICAgICByZXR1cm4gc2VsZi5fX3JlbmRlcl9wYXJhbWV0ZXJzX18KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtZXRob2RkZWZfZmxhZ3Moc2VsZik6CisgICAgICAgIGlmIHNlbGYua2luZCBpbiAoTUVUSE9EX0lOSVQsIE1FVEhPRF9ORVcpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZmxhZ3MgPSBbXQorICAgICAgICBpZiBzZWxmLmtpbmQgPT0gQ0xBU1NfTUVUSE9EOgorICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKCdNRVRIX0NMQVNTJykKKyAgICAgICAgZWxpZiBzZWxmLmtpbmQgPT0gU1RBVElDX01FVEhPRDoKKyAgICAgICAgICAgIGZsYWdzLmFwcGVuZCgnTUVUSF9TVEFUSUMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYua2luZCA9PSBDQUxMQUJMRSwgInVua25vd24ga2luZDogIiArIHJlcHIoc2VsZi5raW5kKQorICAgICAgICBpZiBzZWxmLmNvZXhpc3Q6CisgICAgICAgICAgICBmbGFncy5hcHBlbmQoJ01FVEhfQ09FWElTVCcpCisgICAgICAgIHJldHVybiAnfCcuam9pbihmbGFncykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8Y2xpbmljLkZ1bmN0aW9uICcgKyBzZWxmLm5hbWUgKyAnPicKKworICAgIGRlZiBjb3B5KHNlbGYsICoqb3ZlcnJpZGVzKToKKyAgICAgICAga3dhcmdzID0geworICAgICAgICAgICAgJ25hbWUnOiBzZWxmLm5hbWUsICdtb2R1bGUnOiBzZWxmLm1vZHVsZSwgJ3BhcmFtZXRlcnMnOiBzZWxmLnBhcmFtZXRlcnMsCisgICAgICAgICAgICAnY2xzJzogc2VsZi5jbHMsICdjX2Jhc2VuYW1lJzogc2VsZi5jX2Jhc2VuYW1lLAorICAgICAgICAgICAgJ2Z1bGxfbmFtZSc6IHNlbGYuZnVsbF9uYW1lLAorICAgICAgICAgICAgJ3JldHVybl9jb252ZXJ0ZXInOiBzZWxmLnJldHVybl9jb252ZXJ0ZXIsICdyZXR1cm5fYW5ub3RhdGlvbic6IHNlbGYucmV0dXJuX2Fubm90YXRpb24sCisgICAgICAgICAgICAnZG9jc3RyaW5nJzogc2VsZi5kb2NzdHJpbmcsICdraW5kJzogc2VsZi5raW5kLCAnY29leGlzdCc6IHNlbGYuY29leGlzdCwKKyAgICAgICAgICAgICdkb2NzdHJpbmdfb25seSc6IHNlbGYuZG9jc3RyaW5nX29ubHksCisgICAgICAgICAgICB9CisgICAgICAgIGt3YXJncy51cGRhdGUob3ZlcnJpZGVzKQorICAgICAgICBmID0gRnVuY3Rpb24oKiprd2FyZ3MpCisKKyAgICAgICAgcGFyYW1ldGVycyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGYucGFyYW1ldGVycy5pdGVtcygpOgorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5jb3B5KGZ1bmN0aW9uPWYpCisgICAgICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gdmFsdWUKKyAgICAgICAgZi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycworICAgICAgICByZXR1cm4gZgorCisKK2NsYXNzIFBhcmFtZXRlcjoKKyAgICAiIiIKKyAgICBNdXRhYmxlIGR1Y2sgdHlwZSBvZiBpbnNwZWN0LlBhcmFtZXRlci4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBraW5kLCAqLCBkZWZhdWx0PV9lbXB0eSwKKyAgICAgICAgICAgICAgICAgZnVuY3Rpb24sIGNvbnZlcnRlciwgYW5ub3RhdGlvbj1fZW1wdHksCisgICAgICAgICAgICAgICAgIGRvY3N0cmluZz1Ob25lLCBncm91cD0wKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmtpbmQgPSBraW5kCisgICAgICAgIHNlbGYuZGVmYXVsdCA9IGRlZmF1bHQKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisgICAgICAgIHNlbGYuY29udmVydGVyID0gY29udmVydGVyCisgICAgICAgIHNlbGYuYW5ub3RhdGlvbiA9IGFubm90YXRpb24KKyAgICAgICAgc2VsZi5kb2NzdHJpbmcgPSBkb2NzdHJpbmcgb3IgJycKKyAgICAgICAgc2VsZi5ncm91cCA9IGdyb3VwCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPGNsaW5pYy5QYXJhbWV0ZXIgJyArIHNlbGYubmFtZSArICc+JworCisgICAgZGVmIGlzX2tleXdvcmRfb25seShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFkKKworICAgIGRlZiBpc19wb3NpdGlvbmFsX29ubHkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisKKyAgICBkZWYgY29weShzZWxmLCAqKm92ZXJyaWRlcyk6CisgICAgICAgIGt3YXJncyA9IHsKKyAgICAgICAgICAgICduYW1lJzogc2VsZi5uYW1lLCAna2luZCc6IHNlbGYua2luZCwgJ2RlZmF1bHQnOnNlbGYuZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgJ2Z1bmN0aW9uJzogc2VsZi5mdW5jdGlvbiwgJ2NvbnZlcnRlcic6IHNlbGYuY29udmVydGVyLCAnYW5ub3RhdGlvbic6IHNlbGYuYW5ub3RhdGlvbiwKKyAgICAgICAgICAgICAgICAgJ2RvY3N0cmluZyc6IHNlbGYuZG9jc3RyaW5nLCAnZ3JvdXAnOiBzZWxmLmdyb3VwLAorICAgICAgICAgICAgfQorICAgICAgICBrd2FyZ3MudXBkYXRlKG92ZXJyaWRlcykKKyAgICAgICAgaWYgJ2NvbnZlcnRlcicgbm90IGluIG92ZXJyaWRlczoKKyAgICAgICAgICAgIGNvbnZlcnRlciA9IGNvcHkuY29weShzZWxmLmNvbnZlcnRlcikKKyAgICAgICAgICAgIGNvbnZlcnRlci5mdW5jdGlvbiA9IGt3YXJnc1snZnVuY3Rpb24nXQorICAgICAgICAgICAga3dhcmdzWydjb252ZXJ0ZXInXSA9IGNvbnZlcnRlcgorICAgICAgICByZXR1cm4gUGFyYW1ldGVyKCoqa3dhcmdzKQorCisKKworY2xhc3MgTGFuZE1pbmU6CisgICAgIyB0cnkgdG8gYWNjZXNzIGFueQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5fX21lc3NhZ2VfXyA9IG1lc3NhZ2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8TGFuZE1pbmUgJyArIHJlcHIoc2VsZi5fX21lc3NhZ2VfXykgKyAiPiIKKworICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluICgnX19yZXByX18nLCAnX19tZXNzYWdlX18nKToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cmlidXRlX18obmFtZSkKKyAgICAgICAgIyByYWlzZSBSdW50aW1lRXJyb3IocmVwcihuYW1lKSkKKyAgICAgICAgZmFpbCgiU3RlcHBlZCBvbiBhIGxhbmQgbWluZSwgdHJ5aW5nIHRvIGFjY2VzcyBhdHRyaWJ1dGUgIiArIHJlcHIobmFtZSkgKyAiOlxuIiArIHNlbGYuX19tZXNzYWdlX18pCisKKworZGVmIGFkZF9jX2NvbnZlcnRlcihmLCBuYW1lPU5vbmUpOgorICAgIGlmIG5vdCBuYW1lOgorICAgICAgICBuYW1lID0gZi5fX25hbWVfXworICAgICAgICBpZiBub3QgbmFtZS5lbmRzd2l0aCgnX2NvbnZlcnRlcicpOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4oJ19jb252ZXJ0ZXInKV0KKyAgICBjb252ZXJ0ZXJzW25hbWVdID0gZgorICAgIHJldHVybiBmCisKK2RlZiBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIoY2xzKToKKyAgICAjIGF1dG9tYXRpY2FsbHkgYWRkIGNvbnZlcnRlciBmb3IgZGVmYXVsdCBmb3JtYXQgdW5pdAorICAgICMgKGJ1dCB3aXRob3V0IHN0b21waW5nIG9uIHRoZSBleGlzdGluZyBvbmUgaWYgaXQncyBhbHJlYWR5CisgICAgIyBzZXQsIGluIGNhc2UgeW91IHN1YmNsYXNzKQorICAgIGlmICgoY2xzLmZvcm1hdF91bml0ICE9ICdPJicpIGFuZAorICAgICAgICAoY2xzLmZvcm1hdF91bml0IG5vdCBpbiBsZWdhY3lfY29udmVydGVycykpOgorICAgICAgICBsZWdhY3lfY29udmVydGVyc1tjbHMuZm9ybWF0X3VuaXRdID0gY2xzCisgICAgICAgIGlmIGNscy5mb3JtYXRfdW5pdDoKKyAgICAgICAgICAgIGxlZ2FjeV9jb252ZXJ0ZXJzW2Nscy5mb3JtYXRfdW5pdF0gPSBjbHMKKyAgICByZXR1cm4gY2xzCisKK2RlZiBhZGRfbGVnYWN5X2NfY29udmVydGVyKGZvcm1hdF91bml0LCAqKmt3YXJncyk6CisgICAgIiIiCisgICAgQWRkcyBhIGxlZ2FjeSBjb252ZXJ0ZXIuCisgICAgIiIiCisgICAgZGVmIGNsb3N1cmUoZik6CisgICAgICAgIGlmIG5vdCBrd2FyZ3M6CisgICAgICAgICAgICBhZGRlZF9mID0gZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkZWRfZiA9IGZ1bmN0b29scy5wYXJ0aWFsKGYsICoqa3dhcmdzKQorICAgICAgICBpZiBmb3JtYXRfdW5pdDoKKyAgICAgICAgICAgIGxlZ2FjeV9jb252ZXJ0ZXJzW2Zvcm1hdF91bml0XSA9IGFkZGVkX2YKKyAgICAgICAgcmV0dXJuIGYKKyAgICByZXR1cm4gY2xvc3VyZQorCitjbGFzcyBDQ29udmVydGVyQXV0b1JlZ2lzdGVyKHR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICBhZGRfY19jb252ZXJ0ZXIoY2xzKQorICAgICAgICBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIoY2xzKQorCitjbGFzcyBDQ29udmVydGVyKG1ldGFjbGFzcz1DQ29udmVydGVyQXV0b1JlZ2lzdGVyKToKKyAgICAiIiIKKyAgICBGb3IgdGhlIGluaXQgZnVuY3Rpb24sIHNlbGYsIG5hbWUsIGZ1bmN0aW9uLCBhbmQgZGVmYXVsdAorICAgIG11c3QgYmUga2V5d29yZC1vci1wb3NpdGlvbmFsIHBhcmFtZXRlcnMuICBBbGwgb3RoZXIKKyAgICBwYXJhbWV0ZXJzIG11c3QgYmUga2V5d29yZC1vbmx5LgorICAgICIiIgorCisgICAgIyBUaGUgQyBuYW1lIHRvIHVzZSBmb3IgdGhpcyB2YXJpYWJsZS4KKyAgICBuYW1lID0gTm9uZQorCisgICAgIyBUaGUgUHl0aG9uIG5hbWUgdG8gdXNlIGZvciB0aGlzIHZhcmlhYmxlLgorICAgIHB5X25hbWUgPSBOb25lCisKKyAgICAjIFRoZSBDIHR5cGUgdG8gdXNlIGZvciB0aGlzIHZhcmlhYmxlLgorICAgICMgJ3R5cGUnIHNob3VsZCBiZSBhIFB5dGhvbiBzdHJpbmcgc3BlY2lmeWluZyB0aGUgdHlwZSwgZS5nLiAiaW50Ii4KKyAgICAjIElmIHRoaXMgaXMgYSBwb2ludGVyIHR5cGUsIHRoZSB0eXBlIHN0cmluZyBzaG91bGQgZW5kIHdpdGggJyAqJy4KKyAgICB0eXBlID0gTm9uZQorCisgICAgIyBUaGUgUHl0aG9uIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyLCBhcyBhIFB5dGhvbiB2YWx1ZS4KKyAgICAjIE9yIHRoZSBtYWdpYyB2YWx1ZSAidW5zcGVjaWZpZWQiIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgIyBPciB0aGUgbWFnaWMgdmFsdWUgInVua25vd24iIGlmIHRoaXMgdmFsdWUgaXMgYSBjYW5ub3QgYmUgZXZhbHVhdGVkCisgICAgIyBhdCBBcmd1bWVudC1DbGluaWMtcHJlcHJvY2Vzc2luZyB0aW1lIChidXQgaXMgcHJlc3VtZWQgdG8gYmUgdmFsaWQKKyAgICAjIGF0IHJ1bnRpbWUpLgorICAgIGRlZmF1bHQgPSB1bnNwZWNpZmllZAorCisgICAgIyBJZiBub3QgTm9uZSwgZGVmYXVsdCBtdXN0IGJlIGlzaW5zdGFuY2UoKSBvZiB0aGlzIHR5cGUuCisgICAgIyAoWW91IGNhbiBhbHNvIHNwZWNpZnkgYSB0dXBsZSBvZiB0eXBlcy4pCisgICAgZGVmYXVsdF90eXBlID0gTm9uZQorCisgICAgIyAiZGVmYXVsdCIgY29udmVydGVkIGludG8gYSBDIHZhbHVlLCBhcyBhIHN0cmluZy4KKyAgICAjIE9yIE5vbmUgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBjX2RlZmF1bHQgPSBOb25lCisKKyAgICAjICJkZWZhdWx0IiBjb252ZXJ0ZWQgaW50byBhIFB5dGhvbiB2YWx1ZSwgYXMgYSBzdHJpbmcuCisgICAgIyBPciBOb25lIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgcHlfZGVmYXVsdCA9IE5vbmUKKworICAgICMgVGhlIGRlZmF1bHQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBDIHZhcmlhYmxlIHdoZW4KKyAgICAjIHRoZXJlIGlzIG5vIGRlZmF1bHQsIGJ1dCBub3Qgc3BlY2lmeWluZyBhIGRlZmF1bHQgbWF5CisgICAgIyByZXN1bHQgaW4gYW4gInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUiIHdhcm5pbmcuICBUaGlzIGNhbgorICAgICMgZWFzaWx5IGhhcHBlbiB3aGVuIHVzaW5nIG9wdGlvbiBncm91cHMtLWFsdGhvdWdoCisgICAgIyBwcm9wZXJseS13cml0dGVuIGNvZGUgd29uJ3QgYWN0dWFsbHkgdXNlIHRoZSB2YXJpYWJsZSwKKyAgICAjIHRoZSB2YXJpYWJsZSBkb2VzIGdldCBwYXNzZWQgaW4gdG8gdGhlIF9pbXBsLiAgKEFoLCBpZgorICAgICMgb25seSBkYXRhZmxvdyBhbmFseXNpcyBjb3VsZCBpbmxpbmUgdGhlIHN0YXRpYyBmdW5jdGlvbiEpCisgICAgIworICAgICMgVGhpcyB2YWx1ZSBpcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcuCisgICAgIyBFdmVyeSBub24tYWJzdHJhY3Qgc3ViY2xhc3Mgc2hvdWxkIHN1cHBseSBhIHZhbGlkIHZhbHVlLgorICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gJ05VTEwnCisKKyAgICAjIFRoZSBDIGNvbnZlcnRlciAqZnVuY3Rpb24qIHRvIGJlIHVzZWQsIGlmIGFueS4KKyAgICAjIChJZiB0aGlzIGlzIG5vdCBOb25lLCBmb3JtYXRfdW5pdCBtdXN0IGJlICdPJicuKQorICAgIGNvbnZlcnRlciA9IE5vbmUKKworICAgICMgU2hvdWxkIEFyZ3VtZW50IENsaW5pYyBhZGQgYSAnJicgYmVmb3JlIHRoZSBuYW1lIG9mCisgICAgIyB0aGUgdmFyaWFibGUgd2hlbiBwYXNzaW5nIGl0IGludG8gdGhlIF9pbXBsIGZ1bmN0aW9uPworICAgIGltcGxfYnlfcmVmZXJlbmNlID0gRmFsc2UKKworICAgICMgU2hvdWxkIEFyZ3VtZW50IENsaW5pYyBhZGQgYSAnJicgYmVmb3JlIHRoZSBuYW1lIG9mCisgICAgIyB0aGUgdmFyaWFibGUgd2hlbiBwYXNzaW5nIGl0IGludG8gUHlBcmdfUGFyc2VUdXBsZSAoQW5kS2V5d29yZHMpPworICAgIHBhcnNlX2J5X3JlZmVyZW5jZSA9IFRydWUKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMgWW91IHNob3VsZG4ndCBuZWVkIHRvIHJlYWQgYW55dGhpbmcgYmVsb3cgdGhpcyBwb2ludCB0byAjIworICAgICMjIHdyaXRlIHlvdXIgb3duIGNvbnZlcnRlciBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgIyMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyBUaGUgImZvcm1hdCB1bml0IiB0byBzcGVjaWZ5IGZvciB0aGlzIHZhcmlhYmxlIHdoZW4KKyAgICAjIHBhcnNpbmcgYXJndW1lbnRzIHVzaW5nIFB5QXJnX1BhcnNlVHVwbGUgKEFuZEtleXdvcmRzKS4KKyAgICAjIEN1c3RvbSBjb252ZXJ0ZXJzIHNob3VsZCBhbHdheXMgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIG9mICdPJicuCisgICAgZm9ybWF0X3VuaXQgPSAnTyYnCisKKyAgICAjIFdoYXQgZW5jb2RpbmcgZG8gd2Ugd2FudCBmb3IgdGhpcyB2YXJpYWJsZT8gIE9ubHkgdXNlZAorICAgICMgYnkgZm9ybWF0IHVuaXRzIHN0YXJ0aW5nIHdpdGggJ2UnLgorICAgIGVuY29kaW5nID0gTm9uZQorCisgICAgIyBTaG91bGQgdGhpcyBvYmplY3QgYmUgcmVxdWlyZWQgdG8gYmUgYSBzdWJjbGFzcyBvZiBhIHNwZWNpZmljIHR5cGU/CisgICAgIyBJZiBub3QgTm9uZSwgc2hvdWxkIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIHBvaW50ZXIgdG8gYQorICAgICMgUHlUeXBlT2JqZWN0IChlLmcuICImUHlVbmljb2RlX1R5cGUiKS4KKyAgICAjIE9ubHkgdXNlZCBieSB0aGUgJ08hJyBmb3JtYXQgdW5pdCAoYW5kIHRoZSAib2JqZWN0IiBjb252ZXJ0ZXIpLgorICAgIHN1YmNsYXNzX29mID0gTm9uZQorCisgICAgIyBEbyB3ZSB3YW50IGFuIGFkamFjZW50ICdfbGVuZ3RoJyB2YXJpYWJsZSBmb3IgdGhpcyB2YXJpYWJsZT8KKyAgICAjIE9ubHkgdXNlZCBieSBmb3JtYXQgdW5pdHMgZW5kaW5nIHdpdGggJyMnLgorICAgIGxlbmd0aCA9IEZhbHNlCisKKyAgICAjIFNob3VsZCB3ZSBzaG93IHRoaXMgcGFyYW1ldGVyIGluIHRoZSBnZW5lcmF0ZWQKKyAgICAjIF9fdGV4dF9zaWduYXR1cmVfXz8gVGhpcyBpcyAqYWxtb3N0KiBhbHdheXMgVHJ1ZS4KKyAgICAjIChJdCdzIG9ubHkgRmFsc2UgZm9yIF9fbmV3X18sIF9faW5pdF9fLCBhbmQgTUVUSF9TVEFUSUMgZnVuY3Rpb25zLikKKyAgICBzaG93X2luX3NpZ25hdHVyZSA9IFRydWUKKworICAgICMgT3ZlcnJpZGVzIHRoZSBuYW1lIHVzZWQgaW4gYSB0ZXh0IHNpZ25hdHVyZS4KKyAgICAjIFRoZSBuYW1lIHVzZWQgZm9yIGEgInNlbGYiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZgorICAgICMgc2VsZiwgdHlwZSwgb3IgbW9kdWxlOyBob3dldmVyIHVzZXJzIGNhbiBzZXQgdGhlaXIgb3duLgorICAgICMgVGhpcyBsZXRzIHRoZSBzZWxmX2NvbnZlcnRlciBvdmVycnVsZSB0aGUgdXNlci1zZXR0YWJsZQorICAgICMgbmFtZSwgKmp1c3QqIGZvciB0aGUgdGV4dCBzaWduYXR1cmUuCisgICAgIyBPbmx5IHNldCBieSBzZWxmX2NvbnZlcnRlci4KKyAgICBzaWduYXR1cmVfbmFtZSA9IE5vbmUKKworICAgICMga2VlcCBpbiBzeW5jIHdpdGggc2VsZl9jb252ZXJ0ZXIuX19pbml0X18hCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHB5X25hbWUsIGZ1bmN0aW9uLCBkZWZhdWx0PXVuc3BlY2lmaWVkLCAqLCBjX2RlZmF1bHQ9Tm9uZSwgcHlfZGVmYXVsdD1Ob25lLCBhbm5vdGF0aW9uPXVuc3BlY2lmaWVkLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5weV9uYW1lID0gcHlfbmFtZQorCisgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkOgorICAgICAgICAgICAgaWYgc2VsZi5kZWZhdWx0X3R5cGUgYW5kIG5vdCBpc2luc3RhbmNlKGRlZmF1bHQsIChzZWxmLmRlZmF1bHRfdHlwZSwgVW5rbm93bikpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5kZWZhdWx0X3R5cGUsIHR5cGUpOgorICAgICAgICAgICAgICAgICAgICB0eXBlc19zdHIgPSBzZWxmLmRlZmF1bHRfdHlwZS5fX25hbWVfXworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHR5cGVzX3N0ciA9ICcsICcuam9pbigoY2xzLl9fbmFtZV9fIGZvciBjbHMgaW4gc2VsZi5kZWZhdWx0X3R5cGUpKQorICAgICAgICAgICAgICAgIGZhaWwoInt9OiBkZWZhdWx0IHZhbHVlIHshcn0gZm9yIGZpZWxkIHt9IGlzIG5vdCBvZiB0eXBlIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBkZWZhdWx0LCBuYW1lLCB0eXBlc19zdHIpKQorICAgICAgICAgICAgc2VsZi5kZWZhdWx0ID0gZGVmYXVsdAorCisgICAgICAgIGlmIGNfZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gY19kZWZhdWx0CisgICAgICAgIGlmIHB5X2RlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLnB5X2RlZmF1bHQgPSBweV9kZWZhdWx0CisKKyAgICAgICAgaWYgYW5ub3RhdGlvbiAhPSB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgIGZhaWwoIlRoZSAnYW5ub3RhdGlvbicgcGFyYW1ldGVyIGlzIG5vdCBjdXJyZW50bHkgcGVybWl0dGVkLiIpCisKKyAgICAgICAgIyB0aGlzIGlzIGRlbGliZXJhdGUsIHRvIHByZXZlbnQgeW91IGZyb20gY2FjaGluZyBpbmZvcm1hdGlvbgorICAgICAgICAjIGFib3V0IHRoZSBmdW5jdGlvbiBpbiB0aGUgaW5pdC4KKyAgICAgICAgIyAodGhhdCBicmVha3MgaWYgd2UgZ2V0IGNsb25lZC4pCisgICAgICAgICMgc28gYWZ0ZXIgdGhpcyBjaGFuZ2Ugd2Ugd2lsbCBub2lzaWx5IGZhaWwuCisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBMYW5kTWluZSgiRG9uJ3QgYWNjZXNzIG1lbWJlcnMgb2Ygc2VsZi5mdW5jdGlvbiBpbnNpZGUgY29udmVydGVyX2luaXQhIikKKyAgICAgICAgc2VsZi5jb252ZXJ0ZXJfaW5pdCgqKmt3YXJncykKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBpc19vcHRpb25hbChzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkKQorCisgICAgZGVmIF9yZW5kZXJfc2VsZihzZWxmLCBwYXJhbWV0ZXIsIGRhdGEpOgorICAgICAgICBzZWxmLnBhcmFtZXRlciA9IHBhcmFtZXRlcgorICAgICAgICBvcmlnaW5hbF9uYW1lID0gc2VsZi5uYW1lCisgICAgICAgIG5hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKG9yaWdpbmFsX25hbWUpCisKKyAgICAgICAgIyBpbXBsX2FyZ3VtZW50cworICAgICAgICBzID0gKCImIiBpZiBzZWxmLmltcGxfYnlfcmVmZXJlbmNlIGVsc2UgIiIpICsgbmFtZQorICAgICAgICBkYXRhLmltcGxfYXJndW1lbnRzLmFwcGVuZChzKQorICAgICAgICBpZiBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHMuYXBwZW5kKHNlbGYubGVuZ3RoX25hbWUoKSkKKworICAgICAgICAjIGltcGxfcGFyYW1ldGVycworICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5hcHBlbmQoc2VsZi5zaW1wbGVfZGVjbGFyYXRpb24oYnlfcmVmZXJlbmNlPXNlbGYuaW1wbF9ieV9yZWZlcmVuY2UpKQorICAgICAgICBpZiBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIGRhdGEuaW1wbF9wYXJhbWV0ZXJzLmFwcGVuZCgiUHlfc3NpemVfY2xlYW5fdCAiICsgc2VsZi5sZW5ndGhfbmFtZSgpKQorCisgICAgZGVmIF9yZW5kZXJfbm9uX3NlbGYoc2VsZiwgcGFyYW1ldGVyLCBkYXRhKToKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXIgPSBwYXJhbWV0ZXIKKyAgICAgICAgb3JpZ2luYWxfbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBuYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihvcmlnaW5hbF9uYW1lKQorCisgICAgICAgICMgZGVjbGFyYXRpb25zCisgICAgICAgIGQgPSBzZWxmLmRlY2xhcmF0aW9uKCkKKyAgICAgICAgZGF0YS5kZWNsYXJhdGlvbnMuYXBwZW5kKGQpCisKKyAgICAgICAgIyBpbml0aWFsaXplcnMKKyAgICAgICAgaW5pdGlhbGl6ZXJzID0gc2VsZi5pbml0aWFsaXplKCkKKyAgICAgICAgaWYgaW5pdGlhbGl6ZXJzOgorICAgICAgICAgICAgZGF0YS5pbml0aWFsaXplcnMuYXBwZW5kKCcvKiBpbml0aWFsaXplcnMgZm9yICcgKyBuYW1lICsgJyAqL1xuJyArIGluaXRpYWxpemVycy5yc3RyaXAoKSkKKworICAgICAgICAjIG1vZGlmaWNhdGlvbnMKKyAgICAgICAgbW9kaWZpY2F0aW9ucyA9IHNlbGYubW9kaWZ5KCkKKyAgICAgICAgaWYgbW9kaWZpY2F0aW9uczoKKyAgICAgICAgICAgIGRhdGEubW9kaWZpY2F0aW9ucy5hcHBlbmQoJy8qIG1vZGlmaWNhdGlvbnMgZm9yICcgKyBuYW1lICsgJyAqL1xuJyArIG1vZGlmaWNhdGlvbnMucnN0cmlwKCkpCisKKyAgICAgICAgIyBrZXl3b3JkcworICAgICAgICBkYXRhLmtleXdvcmRzLmFwcGVuZChwYXJhbWV0ZXIubmFtZSkKKworICAgICAgICAjIGZvcm1hdF91bml0cworICAgICAgICBpZiBzZWxmLmlzX29wdGlvbmFsKCkgYW5kICd8JyBub3QgaW4gZGF0YS5mb3JtYXRfdW5pdHM6CisgICAgICAgICAgICBkYXRhLmZvcm1hdF91bml0cy5hcHBlbmQoJ3wnKQorICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfa2V5d29yZF9vbmx5KCkgYW5kICckJyBub3QgaW4gZGF0YS5mb3JtYXRfdW5pdHM6CisgICAgICAgICAgICBkYXRhLmZvcm1hdF91bml0cy5hcHBlbmQoJyQnKQorICAgICAgICBkYXRhLmZvcm1hdF91bml0cy5hcHBlbmQoc2VsZi5mb3JtYXRfdW5pdCkKKworICAgICAgICAjIHBhcnNlX2FyZ3VtZW50cworICAgICAgICBzZWxmLnBhcnNlX2FyZ3VtZW50KGRhdGEucGFyc2VfYXJndW1lbnRzKQorCisgICAgICAgICMgY2xlYW51cAorICAgICAgICBjbGVhbnVwID0gc2VsZi5jbGVhbnVwKCkKKyAgICAgICAgaWYgY2xlYW51cDoKKyAgICAgICAgICAgIGRhdGEuY2xlYW51cC5hcHBlbmQoJy8qIENsZWFudXAgZm9yICcgKyBuYW1lICsgJyAqL1xuJyArIGNsZWFudXAucnN0cmlwKCkgKyAiXG4iKQorCisgICAgZGVmIHJlbmRlcihzZWxmLCBwYXJhbWV0ZXIsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgcGFyYW1ldGVyIGlzIGEgY2xpbmljLlBhcmFtZXRlciBpbnN0YW5jZS4KKyAgICAgICAgZGF0YSBpcyBhIENSZW5kZXJEYXRhIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVuZGVyX3NlbGYocGFyYW1ldGVyLCBkYXRhKQorICAgICAgICBzZWxmLl9yZW5kZXJfbm9uX3NlbGYocGFyYW1ldGVyLCBkYXRhKQorCisgICAgZGVmIGxlbmd0aF9uYW1lKHNlbGYpOgorICAgICAgICAiIiJDb21wdXRlcyB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRlZCAibGVuZ3RoIiB2YXJpYWJsZS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIoc2VsZi5uYW1lKSArICJfbGVuZ3RoIgorCisgICAgIyBXaHkgaXMgdGhpcyBvbmUgYnJva2VuIG91dCBzZXBhcmF0ZWx5PworICAgICMgRm9yICJwb3NpdGlvbmFsLW9ubHkiIGZ1bmN0aW9uIHBhcnNpbmcsCisgICAgIyB3aGljaCBnZW5lcmF0ZXMgYSBidW5jaCBvZiBQeUFyZ19QYXJzZVR1cGxlIGNhbGxzLgorICAgIGRlZiBwYXJzZV9hcmd1bWVudChzZWxmLCBsaXN0KToKKyAgICAgICAgYXNzZXJ0IG5vdCAoc2VsZi5jb252ZXJ0ZXIgYW5kIHNlbGYuZW5jb2RpbmcpCisgICAgICAgIGlmIHNlbGYuZm9ybWF0X3VuaXQgPT0gJ08mJzoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmNvbnZlcnRlcgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZi5jb252ZXJ0ZXIpCisKKyAgICAgICAgaWYgc2VsZi5lbmNvZGluZzoKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKGNfcmVwcihzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgZWxpZiBzZWxmLnN1YmNsYXNzX29mOgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZi5zdWJjbGFzc19vZikKKworICAgICAgICBsZWdhbF9uYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpCisgICAgICAgIHMgPSAoIiYiIGlmIHNlbGYucGFyc2VfYnlfcmVmZXJlbmNlIGVsc2UgIiIpICsgbGVnYWxfbmFtZQorICAgICAgICBsaXN0LmFwcGVuZChzKQorCisgICAgICAgIGlmIHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoIiYiICsgc2VsZi5sZW5ndGhfbmFtZSgpKQorCisgICAgIworICAgICMgQWxsIHRoZSBmdW5jdGlvbnMgYWZ0ZXIgaGVyZSBhcmUgaW50ZW5kZWQgYXMgZXh0ZW5zaW9uIHBvaW50cy4KKyAgICAjCisKKyAgICBkZWYgc2ltcGxlX2RlY2xhcmF0aW9uKHNlbGYsIGJ5X3JlZmVyZW5jZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBDb21wdXRlcyB0aGUgYmFzaWMgZGVjbGFyYXRpb24gb2YgdGhlIHZhcmlhYmxlLgorICAgICAgICBVc2VkIGluIGNvbXB1dGluZyB0aGUgcHJvdG90eXBlIGRlY2xhcmF0aW9uIGFuZCB0aGUKKyAgICAgICAgdmFyaWFibGUgZGVjbGFyYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBwcm90b3R5cGUgPSBbc2VsZi50eXBlXQorICAgICAgICBpZiBieV9yZWZlcmVuY2Ugb3Igbm90IHNlbGYudHlwZS5lbmRzd2l0aCgnKicpOgorICAgICAgICAgICAgcHJvdG90eXBlLmFwcGVuZCgiICIpCisgICAgICAgIGlmIGJ5X3JlZmVyZW5jZToKKyAgICAgICAgICAgIHByb3RvdHlwZS5hcHBlbmQoJyonKQorICAgICAgICBwcm90b3R5cGUuYXBwZW5kKGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIoc2VsZi5uYW1lKSkKKyAgICAgICAgcmV0dXJuICIiLmpvaW4ocHJvdG90eXBlKQorCisgICAgZGVmIGRlY2xhcmF0aW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIEMgc3RhdGVtZW50IHRvIGRlY2xhcmUgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgIiIiCisgICAgICAgIGRlY2xhcmF0aW9uID0gW3NlbGYuc2ltcGxlX2RlY2xhcmF0aW9uKCldCisgICAgICAgIGRlZmF1bHQgPSBzZWxmLmNfZGVmYXVsdAorICAgICAgICBpZiBub3QgZGVmYXVsdCBhbmQgc2VsZi5wYXJhbWV0ZXIuZ3JvdXA6CisgICAgICAgICAgICBkZWZhdWx0ID0gc2VsZi5jX2lnbm9yZWRfZGVmYXVsdAorICAgICAgICBpZiBkZWZhdWx0OgorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCIgPSAiKQorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKGRlZmF1bHQpCisgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZCgiOyIpCisgICAgICAgIGlmIHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCdcblB5X3NzaXplX2NsZWFuX3QgJykKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZChzZWxmLmxlbmd0aF9uYW1lKCkpCisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoJzsnKQorICAgICAgICBzID0gIiIuam9pbihkZWNsYXJhdGlvbikKKyAgICAgICAgIyBkb3VibGUgdXAgY3VybHktYnJhY2VzLCB0aGlzIHN0cmluZyB3aWxsIGJlIHVzZWQKKyAgICAgICAgIyBhcyBwYXJ0IG9mIGEgZm9ybWF0X21hcCgpIHRlbXBsYXRlIGxhdGVyCisgICAgICAgIHMgPSBzLnJlcGxhY2UoInsiLCAie3siKQorICAgICAgICBzID0gcy5yZXBsYWNlKCJ9IiwgIn19IikKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBzZXQgdXAgdGhpcyB2YXJpYWJsZSBiZWZvcmUgcGFyc2luZy4KKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoaXMgY29kZSBpbmRlbnRlZCBhdCBjb2x1bW4gMC4KKyAgICAgICAgSWYgbm8gaW5pdGlhbGl6YXRpb24gaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIG1vZGlmeShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gbW9kaWZ5IHRoaXMgdmFyaWFibGUgYWZ0ZXIgcGFyc2luZy4KKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoaXMgY29kZSBpbmRlbnRlZCBhdCBjb2x1bW4gMC4KKyAgICAgICAgSWYgbm8gaW5pdGlhbGl6YXRpb24gaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgQyBzdGF0ZW1lbnRzIHJlcXVpcmVkIHRvIGNsZWFuIHVwIGFmdGVyIHRoaXMgdmFyaWFibGUuCisgICAgICAgIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGlzIGNvZGUgaW5kZW50ZWQgYXQgY29sdW1uIDAuCisgICAgICAgIElmIG5vIGNsZWFudXAgaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIHByZV9yZW5kZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBIHNlY29uZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgbGlrZSBjb252ZXJ0ZXJfaW5pdCwKKyAgICAgICAgY2FsbGVkIGp1c3QgYmVmb3JlIHJlbmRlcmluZy4KKyAgICAgICAgWW91IGFyZSBwZXJtaXR0ZWQgdG8gZXhhbWluZSBzZWxmLmZ1bmN0aW9uIGhlcmUuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKworY2xhc3MgYm9vbF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgZGVmYXVsdF90eXBlID0gYm9vbAorICAgIGZvcm1hdF91bml0ID0gJ3AnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAnMCcKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0IGlzIG5vdCB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgIHNlbGYuZGVmYXVsdCA9IGJvb2woc2VsZi5kZWZhdWx0KQorICAgICAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSBzdHIoaW50KHNlbGYuZGVmYXVsdCkpCisKK2NsYXNzIGNoYXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnY2hhcicKKyAgICBkZWZhdWx0X3R5cGUgPSBzdHIKKyAgICBmb3JtYXRfdW5pdCA9ICdjJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIidcMCciCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5kZWZhdWx0LCBzdHIpIGFuZCAobGVuKHNlbGYuZGVmYXVsdCkgIT0gMSk6CisgICAgICAgICAgICBmYWlsKCJjaGFyX2NvbnZlcnRlcjogaWxsZWdhbCBkZWZhdWx0IHZhbHVlICIgKyByZXByKHNlbGYuZGVmYXVsdCkpCisKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ0InLCBiaXR3aXNlPVRydWUpCitjbGFzcyB1bnNpZ25lZF9jaGFyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIGNoYXInCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnYicKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICInXDAnIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBiaXR3aXNlOgorICAgICAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9ICdCJworCitjbGFzcyBieXRlX2NvbnZlcnRlcih1bnNpZ25lZF9jaGFyX2NvbnZlcnRlcik6IHBhc3MKKworY2xhc3Mgc2hvcnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnc2hvcnQnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnaCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9zaG9ydF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBzaG9ydCcKKyAgICBkZWZhdWx0X3R5cGUgPSBpbnQKKyAgICBmb3JtYXRfdW5pdCA9ICdIJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYml0d2lzZT1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBiaXR3aXNlOgorICAgICAgICAgICAgZmFpbCgiVW5zaWduZWQgc2hvcnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ0MnLCB0eXBlcz0nc3RyJykKK2NsYXNzIGludF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnaScKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHR5cGVzPSdpbnQnKToKKyAgICAgICAgaWYgdHlwZXMgPT0gJ3N0cic6CisgICAgICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gJ0MnCisgICAgICAgIGVsaWYgdHlwZXMgIT0gJ2ludCc6CisgICAgICAgICAgICBmYWlsKCJpbnRfY29udmVydGVyOiBpbGxlZ2FsICd0eXBlcycgYXJndW1lbnQiKQorCitjbGFzcyB1bnNpZ25lZF9pbnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgaW50JworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ0knCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBpbnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgbG9uZ19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsb25nJworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ2wnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworY2xhc3MgdW5zaWduZWRfbG9uZ19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBsb25nJworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ2snCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBsb25ncyBtdXN0IGJlIGJpdHdpc2UgKGZvciBub3cpLiIpCisKK2NsYXNzIFBZX0xPTkdfTE9OR19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQWV9MT05HX0xPTkcnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnTCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9QWV9MT05HX0xPTkdfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgUFlfTE9OR19MT05HJworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ0snCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBQWV9MT05HX0xPTkdzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgUHlfc3NpemVfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9zc2l6ZV90JworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ24nCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworCitjbGFzcyBmbG9hdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdmbG9hdCcKKyAgICBkZWZhdWx0X3R5cGUgPSBmbG9hdAorICAgIGZvcm1hdF91bml0ID0gJ2YnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMC4wIgorCitjbGFzcyBkb3VibGVfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnZG91YmxlJworICAgIGRlZmF1bHRfdHlwZSA9IGZsb2F0CisgICAgZm9ybWF0X3VuaXQgPSAnZCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwLjAiCisKKworY2xhc3MgUHlfY29tcGxleF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9jb21wbGV4JworICAgIGRlZmF1bHRfdHlwZSA9IGNvbXBsZXgKKyAgICBmb3JtYXRfdW5pdCA9ICdEJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gInswLjAsIDAuMH0iCisKKworY2xhc3Mgb2JqZWN0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnTycKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBjb252ZXJ0ZXI9Tm9uZSwgdHlwZT1Ob25lLCBzdWJjbGFzc19vZj1Ob25lKToKKyAgICAgICAgaWYgY29udmVydGVyOgorICAgICAgICAgICAgaWYgc3ViY2xhc3Nfb2Y6CisgICAgICAgICAgICAgICAgZmFpbCgib2JqZWN0OiBDYW5ub3QgcGFzcyBpbiBib3RoICdjb252ZXJ0ZXInIGFuZCAnc3ViY2xhc3Nfb2YnIikKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSAnTyYnCisgICAgICAgICAgICBzZWxmLmNvbnZlcnRlciA9IGNvbnZlcnRlcgorICAgICAgICBlbGlmIHN1YmNsYXNzX29mOgorICAgICAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9ICdPIScKKyAgICAgICAgICAgIHNlbGYuc3ViY2xhc3Nfb2YgPSBzdWJjbGFzc19vZgorCisgICAgICAgIGlmIHR5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3MjJywgbGVuZ3RoPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigneScsIHR5cGVzPSJieXRlcyIpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigneSMnLCB0eXBlcz0iYnl0ZXMiLCBsZW5ndGg9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6JywgbnVsbGFibGU9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6IycsIG51bGxhYmxlPVRydWUsIGxlbmd0aD1UcnVlKQorY2xhc3Mgc3RyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2NvbnN0IGNoYXIgKicKKyAgICBkZWZhdWx0X3R5cGUgPSAoc3RyLCBOdWxsLCBOb25lVHlwZSkKKyAgICBmb3JtYXRfdW5pdCA9ICdzJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGVuY29kaW5nPU5vbmUsIHR5cGVzPSJzdHIiLAorICAgICAgICBsZW5ndGg9RmFsc2UsIG51bGxhYmxlPUZhbHNlLCB6ZXJvZXM9RmFsc2UpOgorCisgICAgICAgIHR5cGVzID0gc2V0KHR5cGVzLnN0cmlwKCkuc3BsaXQoKSkKKyAgICAgICAgYnl0ZXNfdHlwZSA9IHNldCgoImJ5dGVzIiwpKQorICAgICAgICBzdHJfdHlwZSA9IHNldCgoInN0ciIsKSkKKyAgICAgICAgYWxsXzNfdHlwZSA9IHNldCgoImJ5dGVhcnJheSIsKSkgfCBieXRlc190eXBlIHwgc3RyX3R5cGUKKyAgICAgICAgaXNfYnl0ZXMgPSB0eXBlcyA9PSBieXRlc190eXBlCisgICAgICAgIGlzX3N0ciA9IHR5cGVzID09IHN0cl90eXBlCisgICAgICAgIGlzX2FsbF8zID0gdHlwZXMgPT0gYWxsXzNfdHlwZQorCisgICAgICAgIHNlbGYubGVuZ3RoID0gYm9vbChsZW5ndGgpCisgICAgICAgIGZvcm1hdF91bml0ID0gTm9uZQorCisgICAgICAgIGlmIGVuY29kaW5nOgorICAgICAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCisKKyAgICAgICAgICAgIGlmIGlzX3N0ciBhbmQgbm90IChsZW5ndGggb3IgemVyb2VzIG9yIG51bGxhYmxlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdlcycKKyAgICAgICAgICAgIGVsaWYgaXNfYWxsXzMgYW5kIG5vdCAobGVuZ3RoIG9yIHplcm9lcyBvciBudWxsYWJsZSk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAnZXQnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbGVuZ3RoIGFuZCB6ZXJvZXMgYW5kIG5vdCBudWxsYWJsZToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdlcyMnCisgICAgICAgICAgICBlbGlmIGlzX2FsbF8zIGFuZCBsZW5ndGggYW5kIG5vdCAobnVsbGFibGUgb3IgemVyb2VzKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdldCMnCisKKyAgICAgICAgICAgIGlmIGZvcm1hdF91bml0LmVuZHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgZmFpbCgiU29ycnk6IGNvZGUgdXNpbmcgZm9ybWF0IHVuaXQgIiwgcmVwcihmb3JtYXRfdW5pdCksICJwcm9iYWJseSBkb2Vzbid0IHdvcmsgcHJvcGVybHkgeWV0LlxuR2l2ZSBMYXJyeSB5b3VyIHRlc3QgY2FzZSBhbmQgaGUnbGwgaXQuIikKKyAgICAgICAgICAgICAgICAjIFRPRE8gc2V0IHBvaW50ZXIgdG8gTlVMTAorICAgICAgICAgICAgICAgICMgVE9ETyBhZGQgY2xlYW51cCBmb3IgYnVmZmVyCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB6ZXJvZXM6CisgICAgICAgICAgICAgICAgZmFpbCgic3RyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgKHplcm9lcyBpcyBvbmx5IGxlZ2FsIHdpdGggYW4gZW5jb2RpbmcpIikKKworICAgICAgICAgICAgaWYgaXNfYnl0ZXMgYW5kIG5vdCAobnVsbGFibGUgb3IgbGVuZ3RoKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd5JworICAgICAgICAgICAgZWxpZiBpc19ieXRlcyBhbmQgbGVuZ3RoIGFuZCBub3QgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneSMnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbm90IChudWxsYWJsZSBvciBsZW5ndGgpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3MnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbGVuZ3RoIGFuZCBub3QgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncyMnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbnVsbGFibGUgIGFuZCBub3QgbGVuZ3RoOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3onCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbnVsbGFibGUgYW5kIGxlbmd0aDoKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd6IycKKworICAgICAgICBpZiBub3QgZm9ybWF0X3VuaXQ6CisgICAgICAgICAgICBmYWlsKCJzdHJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyIpCisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdAorCisKK2NsYXNzIFB5Qnl0ZXNPYmplY3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlCeXRlc09iamVjdCAqJworICAgIGZvcm1hdF91bml0ID0gJ1MnCisKK2NsYXNzIFB5Qnl0ZUFycmF5T2JqZWN0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5Qnl0ZUFycmF5T2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnWScKKworY2xhc3MgdW5pY29kZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeU9iamVjdCAqJworICAgIGRlZmF1bHRfdHlwZSA9IChzdHIsIE51bGwsIE5vbmVUeXBlKQorICAgIGZvcm1hdF91bml0ID0gJ1UnCisKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd1IycsIGxlbmd0aD1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ1onLCBudWxsYWJsZT1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ1ojJywgbnVsbGFibGU9VHJ1ZSwgbGVuZ3RoPVRydWUpCitjbGFzcyBQeV9VTklDT0RFX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X1VOSUNPREUgKicKKyAgICBkZWZhdWx0X3R5cGUgPSAoc3RyLCBOdWxsLCBOb25lVHlwZSkKKyAgICBmb3JtYXRfdW5pdCA9ICd1JworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIG51bGxhYmxlPUZhbHNlLCBsZW5ndGg9RmFsc2UpOgorICAgICAgICBmb3JtYXRfdW5pdCA9ICdaJyBpZiBudWxsYWJsZSBlbHNlICd1JworICAgICAgICBpZiBsZW5ndGg6CisgICAgICAgICAgICBmb3JtYXRfdW5pdCArPSAnIycKKyAgICAgICAgICAgIHNlbGYubGVuZ3RoID0gVHJ1ZQorICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gZm9ybWF0X3VuaXQKKworIworIyBXZSBkZWZpbmUgdGhyZWUgc3RyaW5nIGNvbnZlbnRpb25zIGZvciBidWZmZXIgdHlwZXMgaW4gdGhlICd0eXBlcycgYXJndW1lbnQ6CisjICAnYnVmZmVyJyA6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZQorIyAgJ3J3YnVmZmVyJzogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLCBidXQgbXVzdCBiZSB3cml0ZWFibGUKKyMgICdyb2J1ZmZlcic6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZSwgYnV0IG11c3Qgbm90IGJlIHdyaXRlYWJsZQorIworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3MqJywgdHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJykKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6KicsIHR5cGVzPSdzdHIgYnl0ZXMgYnl0ZWFycmF5IGJ1ZmZlcicsIG51bGxhYmxlPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigndyonLCB0eXBlcz0nYnl0ZWFycmF5IHJ3YnVmZmVyJykKK2NsYXNzIFB5X2J1ZmZlcl9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9idWZmZXInCisgICAgZm9ybWF0X3VuaXQgPSAneSonCisgICAgaW1wbF9ieV9yZWZlcmVuY2UgPSBUcnVlCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAie05VTEwsIE5VTEx9IgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHR5cGVzPSdieXRlcyBieXRlYXJyYXkgYnVmZmVyJywgbnVsbGFibGU9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLmRlZmF1bHQgbm90IGluICh1bnNwZWNpZmllZCwgTm9uZSk6CisgICAgICAgICAgICBmYWlsKCJUaGUgb25seSBsZWdhbCBkZWZhdWx0IHZhbHVlIGZvciBQeV9idWZmZXIgaXMgTm9uZS4iKQorICAgICAgICBzZWxmLmNfZGVmYXVsdCA9IHNlbGYuY19pZ25vcmVkX2RlZmF1bHQKKyAgICAgICAgdHlwZXMgPSBzZXQodHlwZXMuc3RyaXAoKS5zcGxpdCgpKQorICAgICAgICBieXRlc190eXBlID0gc2V0KCgnYnl0ZXMnLCkpCisgICAgICAgIGJ5dGVhcnJheV90eXBlID0gc2V0KCgnYnl0ZWFycmF5JywpKQorICAgICAgICBidWZmZXJfdHlwZSA9IHNldCgoJ2J1ZmZlcicsKSkKKyAgICAgICAgcndidWZmZXJfdHlwZSA9IHNldCgoJ3J3YnVmZmVyJywpKQorICAgICAgICByb2J1ZmZlcl90eXBlID0gc2V0KCgncm9idWZmZXInLCkpCisgICAgICAgIHN0cl90eXBlID0gc2V0KCgnc3RyJywpKQorICAgICAgICBieXRlc19ieXRlYXJyYXlfYnVmZmVyX3R5cGUgPSBieXRlc190eXBlIHwgYnl0ZWFycmF5X3R5cGUgfCBidWZmZXJfdHlwZQorCisgICAgICAgIGZvcm1hdF91bml0ID0gTm9uZQorICAgICAgICBpZiB0eXBlcyA9PSAoc3RyX3R5cGUgfCBieXRlc19ieXRlYXJyYXlfYnVmZmVyX3R5cGUpOgorICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncyonIGlmIG5vdCBudWxsYWJsZSBlbHNlICd6KicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG51bGxhYmxlOgorICAgICAgICAgICAgICAgIGZhaWwoJ1B5X2J1ZmZlcl9jb252ZXJ0ZXI6IGlsbGVnYWwgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIChudWxsYWJsZT1UcnVlKScpCisgICAgICAgICAgICBlbGlmIHR5cGVzID09IChieXRlc19ieXRlYXJyYXlfYnVmZmVyX3R5cGUpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3kqJworICAgICAgICAgICAgZWxpZiB0eXBlcyA9PSAoYnl0ZWFycmF5X3R5cGUgfCByd2J1ZmZlcl90eXBlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd3KicKKyAgICAgICAgaWYgbm90IGZvcm1hdF91bml0OgorICAgICAgICAgICAgZmFpbCgiUHlfYnVmZmVyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMiKQorCisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdAorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIG5hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oWyJpZiAoIiwgbmFtZSwgIi5vYmopXG4gICBQeUJ1ZmZlcl9SZWxlYXNlKCYiLCBuYW1lLCAiKTtcbiJdKQorCisKK2RlZiBjb3JyZWN0X25hbWVfZm9yX3NlbGYoZik6CisgICAgaWYgZi5raW5kIGluIChDQUxMQUJMRSwgTUVUSE9EX0lOSVQpOgorICAgICAgICBpZiBmLmNsczoKKyAgICAgICAgICAgIHJldHVybiAiUHlPYmplY3QgKiIsICJzZWxmIgorICAgICAgICByZXR1cm4gIlB5TW9kdWxlRGVmICoiLCAibW9kdWxlIgorICAgIGlmIGYua2luZCA9PSBTVEFUSUNfTUVUSE9EOgorICAgICAgICByZXR1cm4gInZvaWQgKiIsICJudWxsIgorICAgIGlmIGYua2luZCBpbiAoQ0xBU1NfTUVUSE9ELCBNRVRIT0RfTkVXKToKKyAgICAgICAgcmV0dXJuICJQeVR5cGVPYmplY3QgKiIsICJ0eXBlIgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVW5oYW5kbGVkIHR5cGUgb2YgZnVuY3Rpb24gZjogIiArIHJlcHIoZi5raW5kKSkKKworZGVmIHJlcXVpcmVkX3R5cGVfZm9yX3NlbGZfZm9yX3BhcnNlcihmKToKKyAgICB0eXBlLCBfID0gY29ycmVjdF9uYW1lX2Zvcl9zZWxmKGYpCisgICAgaWYgZi5raW5kIGluIChNRVRIT0RfSU5JVCwgTUVUSE9EX05FVywgU1RBVElDX01FVEhPRCwgQ0xBU1NfTUVUSE9EKToKKyAgICAgICAgcmV0dXJuIHR5cGUKKyAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIHNlbGZfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgICIiIgorICAgIEEgc3BlY2lhbC1jYXNlIGNvbnZlcnRlcjoKKyAgICB0aGlzIGlzIHRoZSBkZWZhdWx0IGNvbnZlcnRlciB1c2VkIGZvciAic2VsZiIuCisgICAgIiIiCisgICAgdHlwZSA9IE5vbmUKKyAgICBmb3JtYXRfdW5pdCA9ICcnCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgdHlwZT1Ob25lKToKKyAgICAgICAgc2VsZi5zcGVjaWZpZWRfdHlwZSA9IHR5cGUKKworICAgIGRlZiBwcmVfcmVuZGVyKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mdW5jdGlvbgorICAgICAgICBkZWZhdWx0X3R5cGUsIGRlZmF1bHRfbmFtZSA9IGNvcnJlY3RfbmFtZV9mb3Jfc2VsZihmKQorICAgICAgICBzZWxmLnNpZ25hdHVyZV9uYW1lID0gZGVmYXVsdF9uYW1lCisgICAgICAgIHNlbGYudHlwZSA9IHNlbGYuc3BlY2lmaWVkX3R5cGUgb3Igc2VsZi50eXBlIG9yIGRlZmF1bHRfdHlwZQorCisgICAgICAgIGtpbmQgPSBzZWxmLmZ1bmN0aW9uLmtpbmQKKyAgICAgICAgbmV3X29yX2luaXQgPSBraW5kIGluIChNRVRIT0RfTkVXLCBNRVRIT0RfSU5JVCkKKworICAgICAgICBpZiAoa2luZCA9PSBTVEFUSUNfTUVUSE9EKSBvciBuZXdfb3JfaW5pdDoKKyAgICAgICAgICAgIHNlbGYuc2hvd19pbl9zaWduYXR1cmUgPSBGYWxzZQorCisgICAgIyB0cF9uZXcgKE1FVEhPRF9ORVcpIGZ1bmN0aW9ucyBhcmUgb2YgdHlwZSBuZXdmdW5jOgorICAgICMgICAgIHR5cGVkZWYgUHlPYmplY3QgKigqbmV3ZnVuYykoc3RydWN0IF90eXBlb2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworICAgICMgUHlUeXBlT2JqZWN0IGlzIGEgdHlwZWRlZiBmb3Igc3RydWN0IF90eXBlb2JqZWN0LgorICAgICMKKyAgICAjIHRwX2luaXQgKE1FVEhPRF9JTklUKSBmdW5jdGlvbnMgYXJlIG9mIHR5cGUgaW5pdHByb2M6CisgICAgIyAgICAgdHlwZWRlZiBpbnQgKCppbml0cHJvYykoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisgICAgIworICAgICMgQWxsIG90aGVyIGZ1bmN0aW9ucyBnZW5lcmF0ZWQgYnkgQXJndW1lbnQgQ2xpbmljIGFyZSBzdG9yZWQgaW4KKyAgICAjIFB5TWV0aG9kRGVmIHN0cnVjdHVyZXMsIGluIHRoZSBtbF9tZXRoIHNsb3QsIHdoaWNoIGlzIG9mIHR5cGUgUHlDRnVuY3Rpb246CisgICAgIyAgICAgdHlwZWRlZiBQeU9iamVjdCAqKCpQeUNGdW5jdGlvbikoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisgICAgIyBIb3dldmVyISAgV2UgaGFiaXR1YWxseSBjYXN0IHRoZXNlIGZ1bmN0aW9ucyB0byBQeUNGdW5jdGlvbiwKKyAgICAjIHNpbmNlIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBrZXl3b3JkIGFyZ3VtZW50cyBkb24ndCBmaXQgdGhpcyBzaWduYXR1cmUKKyAgICAjIGJ1dCBhcmUgc3RvcmVkIHRoZXJlIGFueXdheS4gIFNvIHN0cmljdCB0eXBlIGVxdWFsaXR5IGlzbid0IGltcG9ydGFudAorICAgICMgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAjCisgICAgIyBTbzoKKyAgICAjCisgICAgIyAqIFRoZSBuYW1lIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIGltcGwgYW5kIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIHdpbGwgYWx3YXlzCisgICAgIyAgIGJlIHNlbGYubmFtZS4KKyAgICAjCisgICAgIyAqIFRoZSB0eXBlIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIGltcGwgd2lsbCBhbHdheXMgYmUgb2Ygc2VsZi50eXBlLgorICAgICMKKyAgICAjICogSWYgdGhlIGZ1bmN0aW9uIGlzIG5laXRoZXIgdHBfbmV3IChNRVRIT0RfTkVXKSBub3IgdHBfaW5pdCAoTUVUSE9EX0lOSVQpOgorICAgICMgICAqIFRoZSB0eXBlIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIHBhcnNpbmcgZnVuY3Rpb24gaXMgYWxzbyBzZWxmLnR5cGUuCisgICAgIyAgICAgVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBzdGVwIGludG8gdGhlIHBhcnNpbmcgZnVuY3Rpb24sIHlvdXIgInNlbGYiIHBhcmFtZXRlcgorICAgICMgICAgIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUsIHdoaWNoIG1heSBtYWtlIGRlYnVnZ2luZyBtb3JlIHBsZWFzYW50LgorICAgICMKKyAgICAjICogRWxzZSBpZiB0aGUgZnVuY3Rpb24gaXMgdHBfbmV3IChNRVRIT0RfTkVXKToKKyAgICAjICAgKiBUaGUgdHlwZSBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGlzICJQeVR5cGVPYmplY3QgKiIsCisgICAgIyAgICAgc28gdGhlIHR5cGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiBjYWxsIGlzIGFuIGV4YWN0IG1hdGNoLgorICAgICMgICAqIElmIHNlbGYudHlwZSAhPSAiUHlUeXBlT2JqZWN0ICoiLCB3ZSBjYXN0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gc2VsZi50eXBlCisgICAgIyAgICAgaW4gdGhlIGltcGwgY2FsbC4KKyAgICAjCisgICAgIyAqIEVsc2UgaWYgdGhlIGZ1bmN0aW9uIGlzIHRwX2luaXQgKE1FVEhPRF9JTklUKToKKyAgICAjICAgKiBUaGUgdHlwZSBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGlzICJQeU9iamVjdCAqIiwKKyAgICAjICAgICBzbyB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaXMgYW4gZXhhY3QgbWF0Y2guCisgICAgIyAgICogSWYgc2VsZi50eXBlICE9ICJQeU9iamVjdCAqIiwgd2UgY2FzdCB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHNlbGYudHlwZQorICAgICMgICAgIGluIHRoZSBpbXBsIGNhbGwuCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFyc2VyX3R5cGUoc2VsZik6CisgICAgICAgIHJldHVybiByZXF1aXJlZF90eXBlX2Zvcl9zZWxmX2Zvcl9wYXJzZXIoc2VsZi5mdW5jdGlvbikgb3Igc2VsZi50eXBlCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIHBhcmFtZXRlciwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBwYXJhbWV0ZXIgaXMgYSBjbGluaWMuUGFyYW1ldGVyIGluc3RhbmNlLgorICAgICAgICBkYXRhIGlzIGEgQ1JlbmRlckRhdGEgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmZ1bmN0aW9uLmtpbmQgPT0gU1RBVElDX01FVEhPRDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3JlbmRlcl9zZWxmKHBhcmFtZXRlciwgZGF0YSkKKworICAgICAgICBpZiBzZWxmLnR5cGUgIT0gc2VsZi5wYXJzZXJfdHlwZToKKyAgICAgICAgICAgICMgaW5zZXJ0IGNhc3QgdG8gaW1wbF9hcmd1bWVudFswXSwgYWthIHNlbGYuCisgICAgICAgICAgICAjIHdlIGtub3cgd2UncmUgaW4gdGhlIGZpcnN0IHNsb3QgaW4gYWxsIHRoZSBDUmVuZGVyRGF0YSBsaXN0cywKKyAgICAgICAgICAgICMgYmVjYXVzZSB3ZSByZW5kZXIgcGFyYW1ldGVycyBpbiBvcmRlciwgYW5kIHNlbGYgaXMgYWx3YXlzIGZpcnN0LgorICAgICAgICAgICAgYXNzZXJ0IGxlbihkYXRhLmltcGxfYXJndW1lbnRzKSA9PSAxCisgICAgICAgICAgICBhc3NlcnQgZGF0YS5pbXBsX2FyZ3VtZW50c1swXSA9PSBzZWxmLm5hbWUKKyAgICAgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHNbMF0gPSAnKCcgKyBzZWxmLnR5cGUgKyAiKSIgKyBkYXRhLmltcGxfYXJndW1lbnRzWzBdCisKKyAgICBkZWYgc2V0X3RlbXBsYXRlX2RpY3Qoc2VsZiwgdGVtcGxhdGVfZGljdCk6CisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3NlbGZfbmFtZSddID0gc2VsZi5uYW1lCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3NlbGZfdHlwZSddID0gc2VsZi5wYXJzZXJfdHlwZQorICAgICAgICBraW5kID0gc2VsZi5mdW5jdGlvbi5raW5kCisgICAgICAgIGNscyA9IHNlbGYuZnVuY3Rpb24uY2xzCisKKyAgICAgICAgaWYgKChraW5kIGluIChNRVRIT0RfTkVXLCBNRVRIT0RfSU5JVCkpIGFuZCBjbHMgYW5kIGNscy50eXBlZGVmKToKKyAgICAgICAgICAgIGlmIGtpbmQgPT0gTUVUSE9EX05FVzoKKyAgICAgICAgICAgICAgICBwYXNzZWRfaW5fdHlwZSA9IHNlbGYubmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzZWRfaW5fdHlwZSA9ICdQeV9UWVBFKHt9KScuZm9ybWF0KHNlbGYubmFtZSkKKworICAgICAgICAgICAgbGluZSA9ICcoe3Bhc3NlZF9pbl90eXBlfSA9PSB7dHlwZV9vYmplY3R9KSAmJlxuICAgICAgICAnCisgICAgICAgICAgICBkID0geworICAgICAgICAgICAgICAgICd0eXBlX29iamVjdCc6IHNlbGYuZnVuY3Rpb24uY2xzLnR5cGVfb2JqZWN0LAorICAgICAgICAgICAgICAgICdwYXNzZWRfaW5fdHlwZSc6IHBhc3NlZF9pbl90eXBlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVtcGxhdGVfZGljdFsnc2VsZl90eXBlX2NoZWNrJ10gPSBsaW5lLmZvcm1hdF9tYXAoZCkKKworCisKK2RlZiBhZGRfY19yZXR1cm5fY29udmVydGVyKGYsIG5hbWU9Tm9uZSk6CisgICAgaWYgbm90IG5hbWU6CisgICAgICAgIG5hbWUgPSBmLl9fbmFtZV9fCisgICAgICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCdfcmV0dXJuX2NvbnZlcnRlcicpOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4oJ19yZXR1cm5fY29udmVydGVyJyldCisgICAgcmV0dXJuX2NvbnZlcnRlcnNbbmFtZV0gPSBmCisgICAgcmV0dXJuIGYKKworCitjbGFzcyBDUmV0dXJuQ29udmVydGVyQXV0b1JlZ2lzdGVyKHR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICBhZGRfY19yZXR1cm5fY29udmVydGVyKGNscykKKworY2xhc3MgQ1JldHVybkNvbnZlcnRlcihtZXRhY2xhc3M9Q1JldHVybkNvbnZlcnRlckF1dG9SZWdpc3Rlcik6CisKKyAgICAjIFRoZSBDIHR5cGUgdG8gdXNlIGZvciB0aGlzIHZhcmlhYmxlLgorICAgICMgJ3R5cGUnIHNob3VsZCBiZSBhIFB5dGhvbiBzdHJpbmcgc3BlY2lmeWluZyB0aGUgdHlwZSwgZS5nLiAiaW50Ii4KKyAgICAjIElmIHRoaXMgaXMgYSBwb2ludGVyIHR5cGUsIHRoZSB0eXBlIHN0cmluZyBzaG91bGQgZW5kIHdpdGggJyAqJy4KKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisKKyAgICAjIFRoZSBQeXRob24gZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIsIGFzIGEgUHl0aG9uIHZhbHVlLgorICAgICMgT3IgdGhlIG1hZ2ljIHZhbHVlICJ1bnNwZWNpZmllZCIgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBkZWZhdWx0ID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIHB5X2RlZmF1bHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnB5X2RlZmF1bHQgPSBweV9kZWZhdWx0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucmV0dXJuX2NvbnZlcnRlcl9pbml0KCoqa3dhcmdzKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzID0gJywgJy5qb2luKG5hbWUgKyAnPScgKyByZXByKHZhbHVlKSBmb3IgbmFtZSwgdmFsdWUgaW4ga3dhcmdzLml0ZW1zKCkpCisgICAgICAgICAgICBzeXMuZXhpdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArICcoJyArIHMgKyAnKVxuJyArIHN0cihlKSkKKworICAgIGRlZiByZXR1cm5fY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBkZWNsYXJlKHNlbGYsIGRhdGEsIG5hbWU9Il9yZXR1cm5fdmFsdWUiKToKKyAgICAgICAgbGluZSA9IFtdCisgICAgICAgIGFkZCA9IGxpbmUuYXBwZW5kCisgICAgICAgIGFkZChzZWxmLnR5cGUpCisgICAgICAgIGlmIG5vdCBzZWxmLnR5cGUuZW5kc3dpdGgoJyonKToKKyAgICAgICAgICAgIGFkZCgnICcpCisgICAgICAgIGFkZChuYW1lICsgJzsnKQorICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5hcHBlbmQoJycuam9pbihsaW5lKSkKKyAgICAgICAgZGF0YS5yZXR1cm5fdmFsdWUgPSBuYW1lCisKKyAgICBkZWYgZXJyX29jY3VycmVkX2lmKHNlbGYsIGV4cHIsIGRhdGEpOgorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgnaWYgKCh7fSkgJiYgUHlFcnJfT2NjdXJyZWQoKSlcbiAgICBnb3RvIGV4aXQ7XG4nLmZvcm1hdChleHByKSkKKworICAgIGRlZiBlcnJfb2NjdXJyZWRfaWZfbnVsbF9wb2ludGVyKHNlbGYsIHZhcmlhYmxlLCBkYXRhKToKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoJ2lmICh7fSA9PSBOVUxMKVxuICAgIGdvdG8gZXhpdDtcbicuZm9ybWF0KHZhcmlhYmxlKSkKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgZnVuY3Rpb24gaXMgYSBjbGluaWMuRnVuY3Rpb24gaW5zdGFuY2UuCisgICAgICAgIGRhdGEgaXMgYSBDUmVuZGVyRGF0YSBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworYWRkX2NfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyLCAnb2JqZWN0JykKKworY2xhc3MgTm9uZVR5cGVfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKCcnJworaWYgKF9yZXR1cm5fdmFsdWUgIT0gUHlfTm9uZSkKKyAgICBnb3RvIGV4aXQ7CityZXR1cm5fdmFsdWUgPSBQeV9Ob25lOworUHlfSU5DUkVGKFB5X05vbmUpOworJycnLnN0cmlwKCkpCisKK2NsYXNzIGJvb2xfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gLTEiLCBkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgncmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpO1xuJykKKworY2xhc3MgbG9uZ19yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnbG9uZycKKyAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tTG9uZycKKyAgICBjYXN0ID0gJycKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gLTEiLCBkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgKKyAgICAgICAgICAgICcnLmpvaW4oKCdyZXR1cm5fdmFsdWUgPSAnLCBzZWxmLmNvbnZlcnNpb25fZm4sICcoJywgc2VsZi5jYXN0LCAnX3JldHVybl92YWx1ZSk7XG4nKSkpCisKK2NsYXNzIGludF9yZXR1cm5fY29udmVydGVyKGxvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgY2FzdCA9ICcobG9uZyknCisKK2NsYXNzIGluaXRfcmV0dXJuX2NvbnZlcnRlcihsb25nX3JldHVybl9jb252ZXJ0ZXIpOgorICAgICIiIgorICAgIFNwZWNpYWwgcmV0dXJuIGNvbnZlcnRlciBmb3IgX19pbml0X18gZnVuY3Rpb25zLgorICAgICIiIgorICAgIHR5cGUgPSAnaW50JworICAgIGNhc3QgPSAnKGxvbmcpJworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHBhc3MKKworY2xhc3MgdW5zaWduZWRfbG9uZ19yZXR1cm5fY29udmVydGVyKGxvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBsb25nJworICAgIGNvbnZlcnNpb25fZm4gPSAnUHlMb25nX0Zyb21VbnNpZ25lZExvbmcnCisKK2NsYXNzIHVuc2lnbmVkX2ludF9yZXR1cm5fY29udmVydGVyKHVuc2lnbmVkX2xvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBpbnQnCisgICAgY2FzdCA9ICcodW5zaWduZWQgbG9uZyknCisKK2NsYXNzIFB5X3NzaXplX3RfcmV0dXJuX2NvbnZlcnRlcihsb25nX3JldHVybl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfc3NpemVfdCcKKyAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tU3NpemVfdCcKKworY2xhc3Mgc2l6ZV90X3JldHVybl9jb252ZXJ0ZXIobG9uZ19yZXR1cm5fY29udmVydGVyKToKKyAgICB0eXBlID0gJ3NpemVfdCcKKyAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tU2l6ZV90JworCisKK2NsYXNzIGRvdWJsZV9yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnZG91YmxlJworICAgIGNhc3QgPSAnJworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGVjbGFyZShkYXRhKQorICAgICAgICBzZWxmLmVycl9vY2N1cnJlZF9pZigiX3JldHVybl92YWx1ZSA9PSAtMS4wIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAncmV0dXJuX3ZhbHVlID0gUHlGbG9hdF9Gcm9tRG91YmxlKCcgKyBzZWxmLmNhc3QgKyAnX3JldHVybl92YWx1ZSk7XG4nKQorCitjbGFzcyBmbG9hdF9yZXR1cm5fY29udmVydGVyKGRvdWJsZV9yZXR1cm5fY29udmVydGVyKToKKyAgICB0eXBlID0gJ2Zsb2F0JworICAgIGNhc3QgPSAnKGRvdWJsZSknCisKKworY2xhc3MgRGVjb2RlRlNEZWZhdWx0X3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICdjaGFyIConCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmX251bGxfcG9pbnRlcigiX3JldHVybl92YWx1ZSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoX3JldHVybl92YWx1ZSk7XG4nKQorCisKK2NsYXNzIEluZGVudFN0YWNrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pbmRlbnRzID0gW10KKyAgICAgICAgc2VsZi5tYXJnaW4gPSBOb25lCisKKyAgICBkZWYgX2Vuc3VyZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIGZhaWwoJ0luZGVudFN0YWNrIGV4cGVjdGVkIGluZGVudHMsIGJ1dCBub25lIGFyZSBkZWZpbmVkLicpCisKKyAgICBkZWYgbWVhc3VyZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbGluZSdzIG1hcmdpbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmICdcdCcgaW4gbGluZToKKyAgICAgICAgICAgIGZhaWwoJ1RhYiBjaGFyYWN0ZXJzIGFyZSBpbGxlZ2FsIGluIHRoZSBBcmd1bWVudCBDbGluaWMgRFNMLicpCisgICAgICAgIHN0cmlwcGVkID0gbGluZS5sc3RyaXAoKQorICAgICAgICBpZiBub3QgbGVuKHN0cmlwcGVkKToKKyAgICAgICAgICAgICMgd2UgY2FuJ3QgdGVsbCBhbnl0aGluZyBmcm9tIGFuIGVtcHR5IGxpbmUKKyAgICAgICAgICAgICMgc28ganVzdCBwcmV0ZW5kIGl0J3MgaW5kZW50ZWQgbGlrZSBvdXIgY3VycmVudCBpbmRlbnQKKyAgICAgICAgICAgIHNlbGYuX2Vuc3VyZSgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmRlbnRzWy0xXQorICAgICAgICByZXR1cm4gbGVuKGxpbmUpIC0gbGVuKHN0cmlwcGVkKQorCisgICAgZGVmIGluZmVyKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5mZXIgd2hhdCBpcyBub3cgdGhlIGN1cnJlbnQgbWFyZ2luIGJhc2VkIG9uIHRoaXMgbGluZS4KKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIDEgaWYgd2UgaGF2ZSBpbmRlbnRlZCAob3IgdGhpcyBpcyB0aGUgZmlyc3QgbWFyZ2luKQorICAgICAgICAgICAgMCBpZiB0aGUgbWFyZ2luIGhhcyBub3QgY2hhbmdlZAorICAgICAgICAgICAtTiBpZiB3ZSBoYXZlIGRlZGVudGVkIE4gdGltZXMKKyAgICAgICAgIiIiCisgICAgICAgIGluZGVudCA9IHNlbGYubWVhc3VyZShsaW5lKQorICAgICAgICBtYXJnaW4gPSAnICcgKiBpbmRlbnQKKyAgICAgICAgaWYgbm90IHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5hcHBlbmQoaW5kZW50KQorICAgICAgICAgICAgc2VsZi5tYXJnaW4gPSBtYXJnaW4KKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGN1cnJlbnQgPSBzZWxmLmluZGVudHNbLTFdCisgICAgICAgIGlmIGluZGVudCA9PSBjdXJyZW50OgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgaW5kZW50ID4gY3VycmVudDoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5hcHBlbmQoaW5kZW50KQorICAgICAgICAgICAgc2VsZi5tYXJnaW4gPSBtYXJnaW4KKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICMgaW5kZW50IDwgY3VycmVudAorICAgICAgICBpZiBpbmRlbnQgbm90IGluIHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgb3V0ZGVudC4iKQorICAgICAgICBvdXRkZW50X2NvdW50ID0gMAorICAgICAgICB3aGlsZSBpbmRlbnQgIT0gY3VycmVudDoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5wb3AoKQorICAgICAgICAgICAgY3VycmVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgICAgIG91dGRlbnRfY291bnQgLT0gMQorICAgICAgICBzZWxmLm1hcmdpbiA9IG1hcmdpbgorICAgICAgICByZXR1cm4gb3V0ZGVudF9jb3VudAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlcHRoKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBob3cgbWFueSBtYXJnaW5zIGFyZSBjdXJyZW50bHkgZGVmaW5lZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5pbmRlbnRzKQorCisgICAgZGVmIGluZGVudChzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEluZGVudHMgYSBsaW5lIGJ5IHRoZSBjdXJyZW50bHkgZGVmaW5lZCBtYXJnaW4uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5tYXJnaW4gKyBsaW5lCisKKyAgICBkZWYgZGVkZW50KHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVkZW50cyBhIGxpbmUgYnkgdGhlIGN1cnJlbnRseSBkZWZpbmVkIG1hcmdpbi4KKyAgICAgICAgKFRoZSBpbnZlcnNlIG9mICdpbmRlbnQnLikKKyAgICAgICAgIiIiCisgICAgICAgIG1hcmdpbiA9IHNlbGYubWFyZ2luCisgICAgICAgIGluZGVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aChtYXJnaW4pOgorICAgICAgICAgICAgZmFpbCgnQ2Fubm90IGRlZGVudCwgbGluZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmV2aW91cyBtYXJnaW46JykKKyAgICAgICAgcmV0dXJuIGxpbmVbaW5kZW50Ol0KKworCitjbGFzcyBEU0xQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHNlbGYuY2xpbmljID0gY2xpbmljCisKKyAgICAgICAgc2VsZi5kaXJlY3RpdmVzID0ge30KKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKHNlbGYpOgorICAgICAgICAgICAgIyBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoIGRpcmVjdGl2ZV8gYXJlIGFkZGVkIHRvIGRpcmVjdGl2ZXMKKyAgICAgICAgICAgIF8sIHMsIGtleSA9IG5hbWUucGFydGl0aW9uKCJkaXJlY3RpdmVfIikKKyAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3RpdmVzW2tleV0gPSBnZXRhdHRyKHNlbGYsIG5hbWUpCisKKyAgICAgICAgICAgICMgZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aCBhdF8gYXJlIHRvbywgd2l0aCBhbiBAIGluIGZyb250CisgICAgICAgICAgICBfLCBzLCBrZXkgPSBuYW1lLnBhcnRpdGlvbigiYXRfIikKKyAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3RpdmVzWydAJyArIGtleV0gPSBnZXRhdHRyKHNlbGYsIG5hbWUpCisKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnN0YXRlX2RzbF9zdGFydAorICAgICAgICBzZWxmLnBhcmFtZXRlcl9pbmRlbnQgPSBOb25lCisgICAgICAgIHNlbGYua2V5d29yZF9vbmx5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5ncm91cCA9IDAKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3N0YXJ0CisgICAgICAgIHNlbGYuc2Vlbl9wb3NpdGlvbmFsX3dpdGhfZGVmYXVsdCA9IEZhbHNlCisgICAgICAgIHNlbGYuaW5kZW50ID0gSW5kZW50U3RhY2soKQorICAgICAgICBzZWxmLmtpbmQgPSBDQUxMQUJMRQorICAgICAgICBzZWxmLmNvZXhpc3QgPSBGYWxzZQorICAgICAgICBzZWxmLnBhcmFtZXRlcl9jb250aW51YXRpb24gPSAnJworICAgICAgICBzZWxmLnByZXNlcnZlX291dHB1dCA9IEZhbHNlCisKKyAgICBkZWYgZGlyZWN0aXZlX3ZlcnNpb24oc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBnbG9iYWwgdmVyc2lvbgorICAgICAgICBpZiB2ZXJzaW9uX2NvbXBhcml0b3IodmVyc2lvbiwgcmVxdWlyZWQpIDwgMDoKKyAgICAgICAgICAgIGZhaWwoIkluc3VmZmljaWVudCBDbGluaWMgdmVyc2lvbiFcbiAgVmVyc2lvbjogIiArIHZlcnNpb24gKyAiXG4gIFJlcXVpcmVkOiAiICsgcmVxdWlyZWQpCisKKyAgICBkZWYgZGlyZWN0aXZlX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgZmllbGRzID0gbmFtZS5zcGxpdCgnLicpCisgICAgICAgIG5ldyA9IGZpZWxkcy5wb3AoKQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKyAgICAgICAgaWYgY2xzOgorICAgICAgICAgICAgZmFpbCgiQ2FuJ3QgbmVzdCBhIG1vZHVsZSBpbnNpZGUgYSBjbGFzcyEiKQorCisgICAgICAgIGlmIG5hbWUgaW4gbW9kdWxlLmNsYXNzZXM6CisgICAgICAgICAgICBmYWlsKCJBbHJlYWR5IGRlZmluZWQgbW9kdWxlICIgKyByZXByKG5hbWUpICsgIiEiKQorCisgICAgICAgIG0gPSBNb2R1bGUobmFtZSwgbW9kdWxlKQorICAgICAgICBtb2R1bGUubW9kdWxlc1tuYW1lXSA9IG0KKyAgICAgICAgc2VsZi5ibG9jay5zaWduYXR1cmVzLmFwcGVuZChtKQorCisgICAgZGVmIGRpcmVjdGl2ZV9jbGFzcyhzZWxmLCBuYW1lLCB0eXBlZGVmLCB0eXBlX29iamVjdCk6CisgICAgICAgIGZpZWxkcyA9IG5hbWUuc3BsaXQoJy4nKQorICAgICAgICBpbl9jbGFzc2VzID0gRmFsc2UKKyAgICAgICAgcGFyZW50ID0gc2VsZgorICAgICAgICBuYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgIHNvX2ZhciA9IFtdCisgICAgICAgIG1vZHVsZSwgY2xzID0gc2VsZi5jbGluaWMuX21vZHVsZV9hbmRfY2xhc3MoZmllbGRzKQorCisgICAgICAgIHBhcmVudCA9IGNscyBvciBtb2R1bGUKKyAgICAgICAgaWYgbmFtZSBpbiBwYXJlbnQuY2xhc3NlczoKKyAgICAgICAgICAgIGZhaWwoIkFscmVhZHkgZGVmaW5lZCBjbGFzcyAiICsgcmVwcihuYW1lKSArICIhIikKKworICAgICAgICBjID0gQ2xhc3MobmFtZSwgbW9kdWxlLCBjbHMsIHR5cGVkZWYsIHR5cGVfb2JqZWN0KQorICAgICAgICBwYXJlbnQuY2xhc3Nlc1tuYW1lXSA9IGMKKyAgICAgICAgc2VsZi5ibG9jay5zaWduYXR1cmVzLmFwcGVuZChjKQorCisgICAgZGVmIGRpcmVjdGl2ZV9zZXQoc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiAoImxpbmVfcHJlZml4IiwgImxpbmVfc3VmZml4Iik6CisgICAgICAgICAgICBmYWlsKCJ1bmtub3duIHZhcmlhYmxlIiwgcmVwcihuYW1lKSkKKworICAgICAgICB2YWx1ZSA9IHZhbHVlLmZvcm1hdF9tYXAoeworICAgICAgICAgICAgJ2Jsb2NrIGNvbW1lbnQgc3RhcnQnOiAnLyonLAorICAgICAgICAgICAgJ2Jsb2NrIGNvbW1lbnQgZW5kJzogJyovJywKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgc2VsZi5jbGluaWMuX19kaWN0X19bbmFtZV0gPSB2YWx1ZQorCisgICAgZGVmIGRpcmVjdGl2ZV9kZXN0aW5hdGlvbihzZWxmLCBuYW1lLCBjb21tYW5kLCAqYXJncyk6CisgICAgICAgIGlmIGNvbW1hbmQgPT0gJ25ldyc6CisgICAgICAgICAgICBzZWxmLmNsaW5pYy5hZGRfZGVzdGluYXRpb24obmFtZSwgKmFyZ3MpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBjb21tYW5kID09ICdjbGVhcic6CisgICAgICAgICAgICBzZWxmLmNsaW5pYy5nZXRfZGVzdGluYXRpb24obmFtZSkuY2xlYXIoKQorICAgICAgICBmYWlsKCJ1bmtub3duIGRlc3RpbmF0aW9uIGNvbW1hbmQiLCByZXByKGNvbW1hbmQpKQorCisKKyAgICBkZWYgZGlyZWN0aXZlX291dHB1dChzZWxmLCBmaWVsZCwgZGVzdGluYXRpb249JycpOgorICAgICAgICBmZCA9IHNlbGYuY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9ucworCisgICAgICAgIGlmIGZpZWxkID09ICJwcmVzZXQiOgorICAgICAgICAgICAgcHJlc2V0ID0gc2VsZi5jbGluaWMucHJlc2V0cy5nZXQoZGVzdGluYXRpb24pCisgICAgICAgICAgICBpZiBub3QgcHJlc2V0OgorICAgICAgICAgICAgICAgIGZhaWwoIlVua25vd24gcHJlc2V0ICIgKyByZXByKGRlc3RpbmF0aW9uKSArICIhIikKKyAgICAgICAgICAgIGZkLnVwZGF0ZShwcmVzZXQpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBmaWVsZCA9PSAicHVzaCI6CisgICAgICAgICAgICBzZWxmLmNsaW5pYy5maWVsZF9kZXN0aW5hdGlvbnNfc3RhY2suYXBwZW5kKGZkLmNvcHkoKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGZpZWxkID09ICJwb3AiOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9uc19zdGFjazoKKyAgICAgICAgICAgICAgICBmYWlsKCJDYW4ndCAnb3V0cHV0IHBvcCcsIHN0YWNrIGlzIGVtcHR5ISIpCisgICAgICAgICAgICBwcmV2aW91c19mZCA9IHNlbGYuY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9uc19zdGFjay5wb3AoKQorICAgICAgICAgICAgZmQudXBkYXRlKHByZXZpb3VzX2ZkKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBzZWNyZXQgY29tbWFuZCBmb3IgZGVidWdnaW5nIQorICAgICAgICBpZiBmaWVsZCA9PSAicHJpbnQiOgorICAgICAgICAgICAgc2VsZi5ibG9jay5vdXRwdXQuYXBwZW5kKHBwcmludC5wZm9ybWF0KGZkKSkKKyAgICAgICAgICAgIHNlbGYuYmxvY2sub3V0cHV0LmFwcGVuZCgnXG4nKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZCA9IHNlbGYuY2xpbmljLmdldF9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKworICAgICAgICBpZiBmaWVsZCA9PSAiZXZlcnl0aGluZyI6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBsaXN0KGZkKToKKyAgICAgICAgICAgICAgICBmZFtuYW1lXSA9IGQKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGZpZWxkIG5vdCBpbiBmZDoKKyAgICAgICAgICAgIGZhaWwoIkludmFsaWQgZmllbGQgIiArIHJlcHIoZmllbGQpICsgIiwgbXVzdCBiZSBvbmUgb2Y6XG4gIHByZXNldCBwdXNoIHBvcCBwcmludCBldmVyeXRoaW5nICIgKyAiICIuam9pbihmZCkpCisgICAgICAgIGZkW2ZpZWxkXSA9IGQKKworICAgIGRlZiBkaXJlY3RpdmVfZHVtcChzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5ibG9jay5vdXRwdXQuYXBwZW5kKHNlbGYuY2xpbmljLmdldF9kZXN0aW5hdGlvbihuYW1lKS5kdW1wKCkpCisKKyAgICBkZWYgZGlyZWN0aXZlX3ByaW50KHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5ibG9jay5vdXRwdXQuYXBwZW5kKCcgJy5qb2luKGFyZ3MpKQorICAgICAgICBzZWxmLmJsb2NrLm91dHB1dC5hcHBlbmQoJ1xuJykKKworICAgIGRlZiBkaXJlY3RpdmVfcHJlc2VydmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucHJlc2VydmVfb3V0cHV0OgorICAgICAgICAgICAgZmFpbCgiQ2FuJ3QgaGF2ZSBwcmVzZXJ2ZSB0d2ljZSBpbiBvbmUgYmxvY2shIikKKyAgICAgICAgc2VsZi5wcmVzZXJ2ZV9vdXRwdXQgPSBUcnVlCisKKyAgICBkZWYgYXRfY2xhc3NtZXRob2Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYua2luZCBpcyBub3QgQ0FMTEFCTEU6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBzZXQgQGNsYXNzbWV0aG9kLCBmdW5jdGlvbiBpcyBub3QgYSBub3JtYWwgY2FsbGFibGUiKQorICAgICAgICBzZWxmLmtpbmQgPSBDTEFTU19NRVRIT0QKKworICAgIGRlZiBhdF9zdGF0aWNtZXRob2Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYua2luZCBpcyBub3QgQ0FMTEFCTEU6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBzZXQgQHN0YXRpY21ldGhvZCwgZnVuY3Rpb24gaXMgbm90IGEgbm9ybWFsIGNhbGxhYmxlIikKKyAgICAgICAgc2VsZi5raW5kID0gU1RBVElDX01FVEhPRAorCisgICAgZGVmIGF0X2NvZXhpc3Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY29leGlzdDoKKyAgICAgICAgICAgIGZhaWwoIkNhbGxlZCBAY29leGlzdCB0d2ljZSEiKQorICAgICAgICBzZWxmLmNvZXhpc3QgPSBUcnVlCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgc2VsZi5ibG9jayA9IGJsb2NrCisgICAgICAgIHNlbGYuc2F2ZWRfb3V0cHV0ID0gc2VsZi5ibG9jay5vdXRwdXQKKyAgICAgICAgYmxvY2sub3V0cHV0ID0gW10KKyAgICAgICAgYmxvY2tfc3RhcnQgPSBzZWxmLmNsaW5pYy5ibG9ja19wYXJzZXIubGluZV9udW1iZXIKKyAgICAgICAgbGluZXMgPSBibG9jay5pbnB1dC5zcGxpdCgnXG4nKQorICAgICAgICBmb3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzLCBzZWxmLmNsaW5pYy5ibG9ja19wYXJzZXIuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIpOgorICAgICAgICAgICAgaWYgJ1x0JyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGZhaWwoJ1RhYiBjaGFyYWN0ZXJzIGFyZSBpbGxlZ2FsIGluIHRoZSBDbGluaWMgRFNMLlxuXHQnICsgcmVwcihsaW5lKSwgbGluZV9udW1iZXI9YmxvY2tfc3RhcnQpCisgICAgICAgICAgICBzZWxmLnN0YXRlKGxpbmUpCisKKyAgICAgICAgc2VsZi5uZXh0KHNlbGYuc3RhdGVfdGVybWluYWwpCisgICAgICAgIHNlbGYuc3RhdGUoTm9uZSkKKworICAgICAgICBibG9jay5vdXRwdXQuZXh0ZW5kKHNlbGYuY2xpbmljLmxhbmd1YWdlLnJlbmRlcihjbGluaWMsIGJsb2NrLnNpZ25hdHVyZXMpKQorCisgICAgICAgIGlmIHNlbGYucHJlc2VydmVfb3V0cHV0OgorICAgICAgICAgICAgaWYgYmxvY2sub3V0cHV0OgorICAgICAgICAgICAgICAgIGZhaWwoIidwcmVzZXJ2ZScgb25seSB3b3JrcyBmb3IgYmxvY2tzIHRoYXQgZG9uJ3QgcHJvZHVjZSBhbnkgb3V0cHV0ISIpCisgICAgICAgICAgICBibG9jay5vdXRwdXQgPSBzZWxmLnNhdmVkX291dHB1dAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgIyBpZ25vcmUgY29tbWVudC1vbmx5IGxpbmVzCisgICAgICAgIGlmIGxpbmUubHN0cmlwKCkuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjIElnbm9yZSBlbXB0eSBsaW5lcyB0b28KKyAgICAgICAgIyAoYnV0IG5vdCBpbiBkb2NzdHJpbmcgc2VjdGlvbnMhKQorICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY2FsY3VsYXRlX2luZGVudChsaW5lKToKKyAgICAgICAgcmV0dXJuIGxlbihsaW5lKSAtIGxlbihsaW5lLnN0cmlwKCkpCisKKyAgICBkZWYgbmV4dChzZWxmLCBzdGF0ZSwgbGluZT1Ob25lKToKKyAgICAgICAgIyByZWFsX3ByaW50KHNlbGYuc3RhdGUuX19uYW1lX18sICItPiIsIHN0YXRlLl9fbmFtZV9fLCAiLCBsaW5lPSIsIGxpbmUpCisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZQorICAgICAgICBpZiBsaW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGF0ZShsaW5lKQorCisgICAgZGVmIHN0YXRlX2RzbF9zdGFydChzZWxmLCBsaW5lKToKKyAgICAgICAgIyBzZWxmLmJsb2NrID0gc2VsZi5DbGluaWNPdXRwdXRCbG9jayhzZWxmKQorICAgICAgICBpZiBzZWxmLmlnbm9yZV9saW5lKGxpbmUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBpcyBpdCBhIGRpcmVjdGl2ZT8KKyAgICAgICAgZmllbGRzID0gc2hsZXguc3BsaXQobGluZSkKKyAgICAgICAgZGlyZWN0aXZlX25hbWUgPSBmaWVsZHNbMF0KKyAgICAgICAgZGlyZWN0aXZlID0gc2VsZi5kaXJlY3RpdmVzLmdldChkaXJlY3RpdmVfbmFtZSwgTm9uZSkKKyAgICAgICAgaWYgZGlyZWN0aXZlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSgqZmllbGRzWzE6XSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBmYWlsKHN0cihlKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYubmV4dChzZWxmLnN0YXRlX21vZHVsZW5hbWVfbmFtZSwgbGluZSkKKworICAgIGRlZiBzdGF0ZV9tb2R1bGVuYW1lX25hbWUoc2VsZiwgbGluZSk6CisgICAgICAgICMgbG9va2luZyBmb3IgZGVjbGFyYXRpb24sIHdoaWNoIGVzdGFibGlzaGVzIHRoZSBsZWZ0bW9zdCBjb2x1bW4KKyAgICAgICAgIyBsaW5lIHNob3VsZCBiZQorICAgICAgICAjICAgICBtb2R1bGVuYW1lLmZubmFtZSBbYXMgY19iYXNlbmFtZV0gWy0+IHJldHVybiBhbm5vdGF0aW9uXQorICAgICAgICAjIHNxdWFyZSBicmFja2V0cyBkZW5vdGUgb3B0aW9uYWwgc3ludGF4LgorICAgICAgICAjCisgICAgICAgICMgYWx0ZXJuYXRpdmVseToKKyAgICAgICAgIyAgICAgbW9kdWxlbmFtZS5mbm5hbWUgW2FzIGNfYmFzZW5hbWVdID0gbW9kdWxlbmFtZS5leGlzdGluZ19mbl9uYW1lCisgICAgICAgICMgY2xvbmVzIHRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gY29udmVydGVyIGZyb20gdGhhdAorICAgICAgICAjIGZ1bmN0aW9uLiAgeW91IGNhbid0IG1vZGlmeSB0aGVtLiAgeW91IG11c3QgZW50ZXIgYQorICAgICAgICAjIG5ldyBkb2NzdHJpbmcuCisgICAgICAgICMKKyAgICAgICAgIyAoYnV0IHdlIG1pZ2h0IGZpbmQgYSBkaXJlY3RpdmUgZmlyc3QhKQorICAgICAgICAjCisgICAgICAgICMgdGhpcyBsaW5lIGlzIHBlcm1pdHRlZCB0byBzdGFydCB3aXRoIHdoaXRlc3BhY2UuCisgICAgICAgICMgd2UnbGwgY2FsbCB0aGlzIG51bWJlciBvZiBzcGFjZXMgRiAoZm9yICJmdW5jdGlvbiIpLgorCisgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmluZGVudC5pbmZlcihsaW5lKQorCisgICAgICAgICMgYXJlIHdlIGNsb25pbmc/CisgICAgICAgIGJlZm9yZSwgZXF1YWxzLCBleGlzdGluZyA9IGxpbmUucnBhcnRpdGlvbignPScpCisgICAgICAgIGlmIGVxdWFsczoKKyAgICAgICAgICAgIGZ1bGxfbmFtZSwgXywgY19iYXNlbmFtZSA9IGJlZm9yZS5wYXJ0aXRpb24oJyBhcyAnKQorICAgICAgICAgICAgZnVsbF9uYW1lID0gZnVsbF9uYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGNfYmFzZW5hbWUgPSBjX2Jhc2VuYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGV4aXN0aW5nID0gZXhpc3Rpbmcuc3RyaXAoKQorICAgICAgICAgICAgaWYgKGlzX2xlZ2FsX3B5X2lkZW50aWZpZXIoZnVsbF9uYW1lKSBhbmQKKyAgICAgICAgICAgICAgICAobm90IGNfYmFzZW5hbWUgb3IgaXNfbGVnYWxfY19pZGVudGlmaWVyKGNfYmFzZW5hbWUpKSBhbmQKKyAgICAgICAgICAgICAgICBpc19sZWdhbF9weV9pZGVudGlmaWVyKGV4aXN0aW5nKSk6CisgICAgICAgICAgICAgICAgIyB3ZSdyZSBjbG9uaW5nIQorICAgICAgICAgICAgICAgIGZpZWxkcyA9IFt4LnN0cmlwKCkgZm9yIHggaW4gZXhpc3Rpbmcuc3BsaXQoJy4nKV0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbl9uYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgICAgICAgICAgbW9kdWxlLCBjbHMgPSBzZWxmLmNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcyhmaWVsZHMpCisKKyAgICAgICAgICAgICAgICBmb3IgZXhpc3RpbmdfZnVuY3Rpb24gaW4gKGNscyBvciBtb2R1bGUpLmZ1bmN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhpc3RpbmdfZnVuY3Rpb24ubmFtZSA9PSBmdW5jdGlvbl9uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleGlzdGluZ19mdW5jdGlvbiA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBub3QgZXhpc3RpbmdfZnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJjbGFzcyIsIGNscywgIm1vZHVsZSIsIG1vZHVsZSwgImV4aXN0aW5nIiwgZXhpc3RpbmcpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJjbHMuIGZ1bmN0aW9ucyIsIGNscy5mdW5jdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkNvdWxkbid0IGZpbmQgZXhpc3RpbmcgZnVuY3Rpb24gIiArIHJlcHIoZXhpc3RpbmcpICsgIiEiKQorCisgICAgICAgICAgICAgICAgZmllbGRzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBmdWxsX25hbWUuc3BsaXQoJy4nKV0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbl9uYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgICAgICAgICAgbW9kdWxlLCBjbHMgPSBzZWxmLmNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcyhmaWVsZHMpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgKGV4aXN0aW5nX2Z1bmN0aW9uLmtpbmQgPT0gc2VsZi5raW5kIGFuZCBleGlzdGluZ19mdW5jdGlvbi5jb2V4aXN0ID09IHNlbGYuY29leGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIidraW5kJyBvZiBmdW5jdGlvbiBhbmQgY2xvbmVkIGZ1bmN0aW9uIGRvbid0IG1hdGNoISAgKEBjbGFzc21ldGhvZC9Ac3RhdGljbWV0aG9kL0Bjb2V4aXN0KSIpCisgICAgICAgICAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGV4aXN0aW5nX2Z1bmN0aW9uLmNvcHkobmFtZT1mdW5jdGlvbl9uYW1lLCBmdWxsX25hbWU9ZnVsbF9uYW1lLCBtb2R1bGU9bW9kdWxlLCBjbHM9Y2xzLCBjX2Jhc2VuYW1lPWNfYmFzZW5hbWUsIGRvY3N0cmluZz0nJykKKworICAgICAgICAgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQoc2VsZi5mdW5jdGlvbikKKyAgICAgICAgICAgICAgICAoY2xzIG9yIG1vZHVsZSkuZnVuY3Rpb25zLmFwcGVuZChzZWxmLmZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYubmV4dChzZWxmLnN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsaW5lLCBfLCByZXR1cm5zID0gbGluZS5wYXJ0aXRpb24oJy0+JykKKworICAgICAgICBmdWxsX25hbWUsIF8sIGNfYmFzZW5hbWUgPSBsaW5lLnBhcnRpdGlvbignIGFzICcpCisgICAgICAgIGZ1bGxfbmFtZSA9IGZ1bGxfbmFtZS5zdHJpcCgpCisgICAgICAgIGNfYmFzZW5hbWUgPSBjX2Jhc2VuYW1lLnN0cmlwKCkgb3IgTm9uZQorCisgICAgICAgIGlmIG5vdCBpc19sZWdhbF9weV9pZGVudGlmaWVyKGZ1bGxfbmFtZSk6CisgICAgICAgICAgICBmYWlsKCJJbGxlZ2FsIGZ1bmN0aW9uIG5hbWU6IHt9Ii5mb3JtYXQoZnVsbF9uYW1lKSkKKyAgICAgICAgaWYgY19iYXNlbmFtZSBhbmQgbm90IGlzX2xlZ2FsX2NfaWRlbnRpZmllcihjX2Jhc2VuYW1lKToKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgQyBiYXNlbmFtZToge30iLmZvcm1hdChjX2Jhc2VuYW1lKSkKKworICAgICAgICByZXR1cm5fY29udmVydGVyID0gTm9uZQorICAgICAgICBpZiByZXR1cm5zOgorICAgICAgICAgICAgYXN0X2lucHV0ID0gImRlZiB4KCkgLT4ge306IHBhc3MiLmZvcm1hdChyZXR1cm5zKQorICAgICAgICAgICAgbW9kdWxlID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShhc3RfaW5wdXQpCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbm90IG1vZHVsZToKKyAgICAgICAgICAgICAgICBmYWlsKCJCYWRseS1mb3JtZWQgYW5ub3RhdGlvbiBmb3IgIiArIGZ1bGxfbmFtZSArICI6ICIgKyByZXR1cm5zKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5hbWUsIGxlZ2FjeSwga3dhcmdzID0gc2VsZi5wYXJzZV9jb252ZXJ0ZXIobW9kdWxlLmJvZHlbMF0ucmV0dXJucykKKyAgICAgICAgICAgICAgICBpZiBsZWdhY3k6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkxlZ2FjeSBjb252ZXJ0ZXIgeyFyfSBub3QgYWxsb3dlZCBhcyBhIHJldHVybiBjb252ZXJ0ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiByZXR1cm5fY29udmVydGVyczoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiTm8gYXZhaWxhYmxlIHJldHVybiBjb252ZXJ0ZXIgY2FsbGVkICIgKyByZXByKG5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIgPSByZXR1cm5fY29udmVydGVyc1tuYW1lXSgqKmt3YXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGZhaWwoIkJhZGx5LWZvcm1lZCBhbm5vdGF0aW9uIGZvciAiICsgZnVsbF9uYW1lICsgIjogIiArIHJldHVybnMpCisKKyAgICAgICAgZmllbGRzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBmdWxsX25hbWUuc3BsaXQoJy4nKV0KKyAgICAgICAgZnVuY3Rpb25fbmFtZSA9IGZpZWxkcy5wb3AoKQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKworICAgICAgICBmaWVsZHMgPSBmdWxsX25hbWUuc3BsaXQoJy4nKQorICAgICAgICBpZiBmaWVsZHNbLTFdID09ICdfX25ld19fJzoKKyAgICAgICAgICAgIGlmIChzZWxmLmtpbmQgIT0gQ0xBU1NfTUVUSE9EKSBvciAobm90IGNscyk6CisgICAgICAgICAgICAgICAgZmFpbCgiX19uZXdfXyBtdXN0IGJlIGEgY2xhc3MgbWV0aG9kISIpCisgICAgICAgICAgICBzZWxmLmtpbmQgPSBNRVRIT0RfTkVXCisgICAgICAgIGVsaWYgZmllbGRzWy0xXSA9PSAnX19pbml0X18nOgorICAgICAgICAgICAgaWYgKHNlbGYua2luZCAhPSBDQUxMQUJMRSkgb3IgKG5vdCBjbHMpOgorICAgICAgICAgICAgICAgIGZhaWwoIl9faW5pdF9fIG11c3QgYmUgYSBub3JtYWwgbWV0aG9kLCBub3QgYSBjbGFzcyBvciBzdGF0aWMgbWV0aG9kISIpCisgICAgICAgICAgICBzZWxmLmtpbmQgPSBNRVRIT0RfSU5JVAorICAgICAgICAgICAgaWYgbm90IHJldHVybl9jb252ZXJ0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciA9IGluaXRfcmV0dXJuX2NvbnZlcnRlcigpCisgICAgICAgIGVsaWYgZmllbGRzWy0xXSBpbiB1bnN1cHBvcnRlZF9zcGVjaWFsX21ldGhvZHM6CisgICAgICAgICAgICBmYWlsKGZpZWxkc1stMV0gKyAiIGlzIGEgc3BlY2lhbCBtZXRob2QgYW5kIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gQXJndW1lbnQgQ2xpbmljISAgKFlldC4pIikKKworICAgICAgICBpZiBub3QgcmV0dXJuX2NvbnZlcnRlcjoKKyAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIgPSBDUmV0dXJuQ29udmVydGVyKCkKKworICAgICAgICBpZiBub3QgbW9kdWxlOgorICAgICAgICAgICAgZmFpbCgiVW5kZWZpbmVkIG1vZHVsZSB1c2VkIGluIGRlY2xhcmF0aW9uIG9mICIgKyByZXByKGZ1bGxfbmFtZS5zdHJpcCgpKSArICIuIikKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IEZ1bmN0aW9uKG5hbWU9ZnVuY3Rpb25fbmFtZSwgZnVsbF9uYW1lPWZ1bGxfbmFtZSwgbW9kdWxlPW1vZHVsZSwgY2xzPWNscywgY19iYXNlbmFtZT1jX2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlcj1yZXR1cm5fY29udmVydGVyLCBraW5kPXNlbGYua2luZCwgY29leGlzdD1zZWxmLmNvZXhpc3QpCisgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQoc2VsZi5mdW5jdGlvbikKKworICAgICAgICAjIGluc2VydCBhIHNlbGYgY29udmVydGVyIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgdHlwZSwgbmFtZSA9IGNvcnJlY3RfbmFtZV9mb3Jfc2VsZihzZWxmLmZ1bmN0aW9uKQorICAgICAgICBrd2FyZ3MgPSB7fQorICAgICAgICBpZiBjbHMgYW5kIHR5cGUgPT0gIlB5T2JqZWN0ICoiOgorICAgICAgICAgICAga3dhcmdzWyd0eXBlJ10gPSBjbHMudHlwZWRlZgorICAgICAgICBzYyA9IHNlbGYuZnVuY3Rpb24uc2VsZl9jb252ZXJ0ZXIgPSBzZWxmX2NvbnZlcnRlcihuYW1lLCBuYW1lLCBzZWxmLmZ1bmN0aW9uLCAqKmt3YXJncykKKyAgICAgICAgcF9zZWxmID0gUGFyYW1ldGVyKHNjLm5hbWUsIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSwgZnVuY3Rpb249c2VsZi5mdW5jdGlvbiwgY29udmVydGVyPXNjKQorICAgICAgICBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnNbc2MubmFtZV0gPSBwX3NlbGYKKworICAgICAgICAoY2xzIG9yIG1vZHVsZSkuZnVuY3Rpb25zLmFwcGVuZChzZWxmLmZ1bmN0aW9uKQorICAgICAgICBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXJzX3N0YXJ0KQorCisgICAgIyBOb3cgZW50ZXJpbmcgdGhlIHBhcmFtZXRlcnMgc2VjdGlvbi4gIFRoZSBydWxlcywgZm9ybWFsbHkgc3RhdGVkOgorICAgICMKKyAgICAjICAgKiBBbGwgbGluZXMgbXVzdCBiZSBpbmRlbnRlZCB3aXRoIHNwYWNlcyBvbmx5LgorICAgICMgICAqIFRoZSBmaXJzdCBsaW5lIG11c3QgYmUgYSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24uCisgICAgIyAgICogVGhlIGZpcnN0IGxpbmUgbXVzdCBiZSBpbmRlbnRlZC4KKyAgICAjICAgICAgICogVGhpcyBmaXJzdCBsaW5lIGVzdGFibGlzaGVzIHRoZSBpbmRlbnQgZm9yIHBhcmFtZXRlcnMuCisgICAgIyAgICAgICAqIFdlJ2xsIGNhbGwgdGhpcyBudW1iZXIgb2Ygc3BhY2VzIFAgKGZvciAicGFyYW1ldGVyIikuCisgICAgIyAgICogVGhlbmNlZm9ydGg6CisgICAgIyAgICAgICAqIExpbmVzIGluZGVudGVkIHdpdGggUCBzcGFjZXMgc3BlY2lmeSBhIHBhcmFtZXRlci4KKyAgICAjICAgICAgICogTGluZXMgaW5kZW50ZWQgd2l0aCA+IFAgc3BhY2VzIGFyZSBkb2NzdHJpbmdzIGZvciB0aGUgcHJldmlvdXMKKyAgICAjICAgICAgICAgcGFyYW1ldGVyLgorICAgICMgICAgICAgICAgICogV2UnbGwgY2FsbCB0aGlzIG51bWJlciBvZiBzcGFjZXMgRCAoZm9yICJkb2NzdHJpbmciKS4KKyAgICAjICAgICAgICAgICAqIEFsbCBzdWJzZXF1ZW50IGxpbmVzIGluZGVudGVkIHdpdGggPj0gRCBzcGFjZXMgYXJlIHN0b3JlZCBhcworICAgICMgICAgICAgICAgICAgcGFydCBvZiB0aGUgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmcuCisgICAgIyAgICAgICAgICAgKiBBbGwgbGluZXMgd2lsbCBoYXZlIHRoZSBmaXJzdCBEIHNwYWNlcyBvZiB0aGUgaW5kZW50IHN0cmlwcGVkCisgICAgIyAgICAgICAgICAgICBiZWZvcmUgdGhleSBhcmUgc3RvcmVkLgorICAgICMgICAgICAgICAgICogSXQncyBpbGxlZ2FsIHRvIGhhdmUgYSBsaW5lIHN0YXJ0aW5nIHdpdGggYSBudW1iZXIgb2Ygc3BhY2VzIFgKKyAgICAjICAgICAgICAgICAgIHN1Y2ggdGhhdCBQIDwgWCA8IEQuCisgICAgIyAgICAgICAqIEEgbGluZSB3aXRoIDwgUCBzcGFjZXMgaXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZ1bmN0aW9uCisgICAgIyAgICAgICAgIGRvY3N0cmluZywgd2hpY2ggZW5kcyBwcm9jZXNzaW5nIGZvciBwYXJhbWV0ZXJzIGFuZCBwZXItcGFyYW1ldGVyCisgICAgIyAgICAgICAgIGRvY3N0cmluZ3MuCisgICAgIyAgICAgICAgICAgKiBUaGUgZmlyc3QgbGluZSBvZiB0aGUgZnVuY3Rpb24gZG9jc3RyaW5nIG11c3QgYmUgYXQgdGhlIHNhbWUKKyAgICAjICAgICAgICAgICAgIGluZGVudCBhcyB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisgICAgIyAgICAgICAqIEl0J3MgaWxsZWdhbCB0byBoYXZlIGFueSBsaW5lIGluIHRoZSBwYXJhbWV0ZXJzIHNlY3Rpb24gc3RhcnRpbmcKKyAgICAjICAgICAgICAgd2l0aCBYIHNwYWNlcyBzdWNoIHRoYXQgRiA8IFggPCBQLiAgKEFzIGJlZm9yZSwgRiBpcyB0aGUgaW5kZW50CisgICAgIyAgICAgICAgIG9mIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4pCisgICAgIworICAgICMgQWxzbywgY3VycmVudGx5IEFyZ3VtZW50IENsaW5pYyBwbGFjZXMgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgb24gZ3JvdXBzOgorICAgICMgICAqIEVhY2ggZ3JvdXAgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuCisgICAgIyAgICogRWFjaCBncm91cCBtYXkgY29udGFpbiBhdCBtb3N0IG9uZSBncm91cCwgd2hpY2ggbXVzdCBiZSB0aGUgZnVydGhlc3QKKyAgICAjICAgICB0aGluZyBpbiB0aGUgZ3JvdXAgZnJvbSB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy4gIChUaGUgbmVzdGVkIGdyb3VwCisgICAgIyAgICAgbXVzdCBiZSB0aGUgZmlyc3QgaW4gdGhlIGdyb3VwIHdoZW4gaXQncyBiZWZvcmUgdGhlIHJlcXVpcmVkCisgICAgIyAgICAgcGFyYW1ldGVycywgYW5kIHRoZSBsYXN0IHRoaW5nIGluIHRoZSBncm91cCB3aGVuIGFmdGVyIHRoZSByZXF1aXJlZAorICAgICMgICAgIHBhcmFtZXRlcnMuKQorICAgICMgICAqIFRoZXJlIG1heSBiZSBhdCBtb3N0IG9uZSAodG9wLWxldmVsKSBncm91cCB0byB0aGUgbGVmdCBvciByaWdodCBvZgorICAgICMgICAgIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgICAqIFlvdSBtdXN0IHNwZWNpZnkgYSBzbGFzaCwgYW5kIGl0IG11c3QgYmUgYWZ0ZXIgYWxsIHBhcmFtZXRlcnMuCisgICAgIyAgICAgKEluIG90aGVyIHdvcmRzOiBlaXRoZXIgYWxsIHBhcmFtZXRlcnMgYXJlIHBvc2l0aW9uYWwtb25seSwKKyAgICAjICAgICAgb3Igbm9uZSBhcmUuKQorICAgICMKKyAgICAjICBTYWlkIGFub3RoZXIgd2F5OgorICAgICMgICAqIEVhY2ggZ3JvdXAgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuCisgICAgIyAgICogQWxsIGxlZnQgc3F1YXJlIGJyYWNrZXRzIGJlZm9yZSB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBtdXN0IGJlCisgICAgIyAgICAgY29uc2VjdXRpdmUuICAoWW91IGNhbid0IGhhdmUgYSBsZWZ0IHNxdWFyZSBicmFja2V0IGZvbGxvd2VkCisgICAgIyAgICAgYnkgYSBwYXJhbWV0ZXIsIHRoZW4gYW5vdGhlciBsZWZ0IHNxdWFyZSBicmFja2V0LiAgWW91IGNhbid0CisgICAgIyAgICAgaGF2ZSBhIGxlZnQgc3F1YXJlIGJyYWNrZXQsIGEgcGFyYW1ldGVyLCBhIHJpZ2h0IHNxdWFyZSBicmFja2V0LAorICAgICMgICAgIGFuZCB0aGVuIGEgbGVmdCBzcXVhcmUgYnJhY2tldC4pCisgICAgIyAgICogQWxsIHJpZ2h0IHNxdWFyZSBicmFja2V0cyBhZnRlciB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBtdXN0IGJlCisgICAgIyAgICAgY29uc2VjdXRpdmUuCisgICAgIworICAgICMgVGhlc2UgcnVsZXMgYXJlIGVuZm9yY2VkIHdpdGggYSBzaW5nbGUgc3RhdGUgdmFyaWFibGU6CisgICAgIyAicGFyYW1ldGVyX3N0YXRlIi4gIChQcmV2aW91c2x5IHRoZSBjb2RlIHdhcyBhIG1pYXNtYSBvZiBpZnMgYW5kCisgICAgIyBzZXBhcmF0ZSBib29sZWFuIHN0YXRlIHZhcmlhYmxlcy4pICBUaGUgc3RhdGVzIGFyZToKKyAgICAjCisgICAgIyAgWyBbIGEsIGIsIF0gYywgXSBkLCBlLCBmPTMsIFsgZywgaCwgWyBpIF0gXSAvICAgPC0gbGluZQorICAgICMgMDEgICAyICAgICAgICAgIDMgICAgICAgNCAgICA1ICAgICAgICAgICA2ICAgNyAgIDwtIHN0YXRlIHRyYW5zaXRpb25zCisgICAgIworICAgICMgMDogcHNfc3RhcnQuICBiZWZvcmUgd2UndmUgc2VlbiBhbnl0aGluZy4gIGxlZ2FsIHRyYW5zaXRpb25zIGFyZSB0byAxIG9yIDMuCisgICAgIyAxOiBwc19sZWZ0X3NxdWFyZV9iZWZvcmUuICBsZWZ0IHNxdWFyZSBicmFja2V0cyBiZWZvcmUgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjIDI6IHBzX2dyb3VwX2JlZm9yZS4gIGluIGEgZ3JvdXAsIGJlZm9yZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgMzogcHNfcmVxdWlyZWQuICByZXF1aXJlZCBwYXJhbWV0ZXJzLCBwb3NpdGlvbmFsLW9yLWtleXdvcmQgb3IgcG9zaXRpb25hbC1vbmx5CisgICAgIyAgICAgKHdlIGRvbid0IGtub3cgeWV0KS4gIChyZW51bWJlciBsZWZ0IGdyb3VwcyEpCisgICAgIyA0OiBwc19vcHRpb25hbC4gIHBvc2l0aW9uYWwtb3Ita2V5d29yZCBvciBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycyB0aGF0CisgICAgIyAgICBub3cgbXVzdCBoYXZlIGRlZmF1bHQgdmFsdWVzLgorICAgICMgNTogcHNfZ3JvdXBfYWZ0ZXIuICBpbiBhIGdyb3VwLCBhZnRlciByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgNjogcHNfcmlnaHRfc3F1YXJlX2FmdGVyLiAgcmlnaHQgc3F1YXJlIGJyYWNrZXRzIGFmdGVyIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisgICAgIyA3OiBwc19zZWVuX3NsYXNoLiAgc2VlbiBzbGFzaC4KKyAgICBwc19zdGFydCwgcHNfbGVmdF9zcXVhcmVfYmVmb3JlLCBwc19ncm91cF9iZWZvcmUsIHBzX3JlcXVpcmVkLCBcCisgICAgcHNfb3B0aW9uYWwsIHBzX2dyb3VwX2FmdGVyLCBwc19yaWdodF9zcXVhcmVfYWZ0ZXIsIHBzX3NlZW5fc2xhc2ggPSByYW5nZSg4KQorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcnNfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIHNlbGYuaWdub3JlX2xpbmUobGluZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGlmIHRoaXMgbGluZSBpcyBub3QgaW5kZW50ZWQsIHdlIGhhdmUgbm8gcGFyYW1ldGVycworICAgICAgICBpZiBub3Qgc2VsZi5pbmRlbnQuaW5mZXIobGluZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIHNlbGYucGFyYW1ldGVyX2NvbnRpbnVhdGlvbiA9ICcnCisgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXIsIGxpbmUpCisKKworICAgIGRlZiB0b19yZXF1aXJlZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyYW5zaXRpb24gdG8gdGhlICJyZXF1aXJlZCIgcGFyYW1ldGVyIHN0YXRlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgIT0gc2VsZi5wc19yZXF1aXJlZDoKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19yZXF1aXJlZAorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHAuZ3JvdXAgPSAtcC5ncm91cAorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcihzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfY29udGludWF0aW9uOgorICAgICAgICAgICAgbGluZSA9IHNlbGYucGFyYW1ldGVyX2NvbnRpbnVhdGlvbiArICcgJyArIGxpbmUubHN0cmlwKCkKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX2NvbnRpbnVhdGlvbiA9ICcnCisKKyAgICAgICAgaWYgc2VsZi5pZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAyCisgICAgICAgIGluZGVudCA9IHNlbGYuaW5kZW50LmluZmVyKGxpbmUpCisgICAgICAgIGlmIGluZGVudCA9PSAtMToKKyAgICAgICAgICAgICMgd2Ugb3V0ZGVudGVkLCBtdXN0IGJlIHRvIGRlZmluaXRpb24gY29sdW1uCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIGlmIGluZGVudCA9PSAxOgorICAgICAgICAgICAgIyB3ZSBpbmRlbnRlZCwgbXVzdCBiZSB0byBuZXcgcGFyYW1ldGVyIGRvY3N0cmluZyBjb2x1bW4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXJfZG9jc3RyaW5nX3N0YXJ0LCBsaW5lKQorCisgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoJ1xcJyk6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9jb250aW51YXRpb24gPSBsaW5lWzotMV0KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGxpbmUgPSBsaW5lLmxzdHJpcCgpCisKKyAgICAgICAgaWYgbGluZSBpbiAoJyonLCAnLycsICdbJywgJ10nKToKKyAgICAgICAgICAgIHNlbGYucGFyc2Vfc3BlY2lhbF9zeW1ib2wobGluZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3N0YXJ0LCBzZWxmLnBzX3JlcXVpcmVkKToKKyAgICAgICAgICAgIHNlbGYudG9fcmVxdWlyZWQoKQorICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlOgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2dyb3VwX2JlZm9yZQorICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfZ3JvdXBfYmVmb3JlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuZ3JvdXA6CisgICAgICAgICAgICAgICAgc2VsZi50b19yZXF1aXJlZCgpCisgICAgICAgIGVsaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfZ3JvdXBfYWZ0ZXIsIHNlbGYucHNfb3B0aW9uYWwpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIi5hKSIpCisKKyAgICAgICAgIyBoYW5kbGUgImFzIiBmb3IgIHBhcmFtZXRlcnMgdG9vCisgICAgICAgIGNfbmFtZSA9IE5vbmUKKyAgICAgICAgbmFtZSwgaGF2ZV9hc190b2tlbiwgdHJhaWxpbmcgPSBsaW5lLnBhcnRpdGlvbignIGFzICcpCisgICAgICAgIGlmIGhhdmVfYXNfdG9rZW46CisgICAgICAgICAgICBuYW1lID0gbmFtZS5zdHJpcCgpCisgICAgICAgICAgICBpZiAnICcgbm90IGluIG5hbWU6CisgICAgICAgICAgICAgICAgZmllbGRzID0gdHJhaWxpbmcuc3RyaXAoKS5zcGxpdCgnICcpCisgICAgICAgICAgICAgICAgaWYgbm90IGZpZWxkczoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiSW52YWxpZCAnYXMnIGNsYXVzZSEiKQorICAgICAgICAgICAgICAgIGNfbmFtZSA9IGZpZWxkc1swXQorICAgICAgICAgICAgICAgIGlmIGNfbmFtZS5lbmRzd2l0aCgnOicpOgorICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICc6JworICAgICAgICAgICAgICAgICAgICBjX25hbWUgPSBjX25hbWVbOi0xXQorICAgICAgICAgICAgICAgIGZpZWxkc1swXSA9IG5hbWUKKyAgICAgICAgICAgICAgICBsaW5lID0gJyAnLmpvaW4oZmllbGRzKQorCisgICAgICAgIGJhc2UsIGVxdWFscywgZGVmYXVsdCA9IGxpbmUucnBhcnRpdGlvbignPScpCisgICAgICAgIGlmIG5vdCBlcXVhbHM6CisgICAgICAgICAgICBiYXNlID0gZGVmYXVsdAorICAgICAgICAgICAgZGVmYXVsdCA9IE5vbmUKKworICAgICAgICBtb2R1bGUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzdF9pbnB1dCA9ICJkZWYgeCh7fSk6IHBhc3MiLmZvcm1hdChiYXNlKQorICAgICAgICAgICAgbW9kdWxlID0gYXN0LnBhcnNlKGFzdF9pbnB1dCkKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgdGhlIGxhc3QgPSB3YXMgcHJvYmFibHkgaW5zaWRlIGEgZnVuY3Rpb24gY2FsbCwgbGlrZQorICAgICAgICAgICAgICAgICMgICBpOiBpbnQobnVsbGFibGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICAjIHNvIGFzc3VtZSB0aGVyZSB3YXMgbm8gYWN0dWFsIGRlZmF1bHQgdmFsdWUuCisgICAgICAgICAgICAgICAgZGVmYXVsdCA9IE5vbmUKKyAgICAgICAgICAgICAgICBhc3RfaW5wdXQgPSAiZGVmIHgoe30pOiBwYXNzIi5mb3JtYXQobGluZSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UoYXN0X2lucHV0KQorICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgbm90IG1vZHVsZToKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiBpbnZhbGlkIHBhcmFtZXRlciBkZWNsYXJhdGlvbjpcblx0IiArIGxpbmUpCisKKyAgICAgICAgZnVuY3Rpb25fYXJncyA9IG1vZHVsZS5ib2R5WzBdLmFyZ3MKKyAgICAgICAgcGFyYW1ldGVyID0gZnVuY3Rpb25fYXJncy5hcmdzWzBdCisKKyAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIuYXJnCisgICAgICAgIG5hbWUsIGxlZ2FjeSwga3dhcmdzID0gc2VsZi5wYXJzZV9jb252ZXJ0ZXIocGFyYW1ldGVyLmFubm90YXRpb24pCisKKyAgICAgICAgaWYgbm90IGRlZmF1bHQ6CisgICAgICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9PSBzZWxmLnBzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGZhaWwoIkNhbid0IGhhdmUgYSBwYXJhbWV0ZXIgd2l0aG91dCBhIGRlZmF1bHQgKCIgKyByZXByKHBhcmFtZXRlcl9uYW1lKSArICIpXG5hZnRlciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCEiKQorICAgICAgICAgICAgdmFsdWUgPSB1bnNwZWNpZmllZAorICAgICAgICAgICAgaWYgJ3B5X2RlZmF1bHQnIGluIGt3YXJnczoKKyAgICAgICAgICAgICAgICBmYWlsKCJZb3UgY2FuJ3Qgc3BlY2lmeSBweV9kZWZhdWx0IHdpdGhvdXQgc3BlY2lmeWluZyBhIGRlZmF1bHQgdmFsdWUhIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfcmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX29wdGlvbmFsCisgICAgICAgICAgICBkZWZhdWx0ID0gZGVmYXVsdC5zdHJpcCgpCisgICAgICAgICAgICBiYWQgPSBGYWxzZQorICAgICAgICAgICAgYXN0X2lucHV0ID0gInggPSB7fSIuZm9ybWF0KGRlZmF1bHQpCisgICAgICAgICAgICBiYWQgPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShhc3RfaW5wdXQpCisKKyAgICAgICAgICAgICAgICBpZiAnY19kZWZhdWx0JyBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgICAgICAjIHdlIGNhbiBvbmx5IHJlcHJlc2VudCB2ZXJ5IHNpbXBsZSBkYXRhIHZhbHVlcyBpbiBDLgorICAgICAgICAgICAgICAgICAgICAjIGRldGVjdCB3aGV0aGVyIGRlZmF1bHQgaXMgb2theSwgdmlhIGEgYmxhY2tsaXN0CisgICAgICAgICAgICAgICAgICAgICMgb2YgZGlzYWxsb3dlZCBhc3Qgbm9kZXMuCisgICAgICAgICAgICAgICAgICAgIGNsYXNzIERldGVjdEJhZE5vZGVzKGFzdC5Ob2RlVmlzaXRvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBiYWQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGJhZF9ub2RlKHNlbGYsIG5vZGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmFkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIGlubGluZSBmdW5jdGlvbiBjYWxsCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9DYWxsID0gYmFkX25vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaW5saW5lIGlmIHN0YXRlbWVudCAoInggPSAzIGlmIHkgZWxzZSB6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0X0lmRXhwID0gYmFkX25vZGUKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9MaXN0Q29tcCA9IHZpc2l0X1NldENvbXAgPSBiYWRfbm9kZQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRfRGljdENvbXAgPSB2aXNpdF9HZW5lcmF0b3JFeHAgPSBiYWRfbm9kZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIGxpdGVyYWxzIGZvciBhZHZhbmNlZCB0eXBlcworICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRfRGljdCA9IHZpc2l0X1NldCA9IGJhZF9ub2RlCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9MaXN0ID0gdmlzaXRfVHVwbGUgPSBiYWRfbm9kZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjICJzdGFycmVkIjogImEgPSBbMSwgMiwgM107ICphIgorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRfU3RhcnJlZCA9IGJhZF9ub2RlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYWxsb3cgZWxsaXBzaXMsIGZvciBub3cKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdmlzaXRfRWxsaXBzaXMgPSBiYWRfbm9kZQorCisgICAgICAgICAgICAgICAgICAgIGJsYWNrbGlzdCA9IERldGVjdEJhZE5vZGVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmxhY2tsaXN0LnZpc2l0KG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgYmFkID0gYmxhY2tsaXN0LmJhZAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgaWYgdGhleSBzcGVjaWZ5IGEgY19kZWZhdWx0LCB3ZSBjYW4gYmUgbW9yZSBsZW5pZW50IGFib3V0IHRoZSBkZWZhdWx0IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAjIGJ1dCBhdCBsZWFzdCBtYWtlIGFuIGF0dGVtcHQgYXQgZW5zdXJpbmcgaXQncyBhIHZhbGlkIGV4cHJlc3Npb24uCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZXZhbChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgPT0gdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiJ3Vuc3BlY2lmaWVkJyBpcyBub3QgYSBsZWdhbCBkZWZhdWx0IHZhbHVlISIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICMgcHJvYmFibHkgYSBuYW1lZCBjb25zdGFudAorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCJNYWxmb3JtZWQgZXhwcmVzc2lvbiBnaXZlbiBhcyBkZWZhdWx0IHZhbHVlXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7IXJ9IGNhdXNlZCB7IXJ9Ii5mb3JtYXQoZGVmYXVsdCwgZSkpCisgICAgICAgICAgICAgICAgaWYgYmFkOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJVbnN1cHBvcnRlZCBleHByZXNzaW9uIGFzIGRlZmF1bHQgdmFsdWU6ICIgKyByZXByKGRlZmF1bHQpKQorCisgICAgICAgICAgICAgICAgZXhwciA9IG1vZHVsZS5ib2R5WzBdLnZhbHVlCisgICAgICAgICAgICAgICAgIyBtaWxkIGhhY2s6IGV4cGxpY2l0bHkgc3VwcG9ydCBOVUxMIGFzIGEgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwciwgYXN0Lk5hbWUpIGFuZCBleHByLmlkID09ICdOVUxMJzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOVUxMCisgICAgICAgICAgICAgICAgICAgIHB5X2RlZmF1bHQgPSAnTm9uZScKKyAgICAgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0gIk5VTEwiCisgICAgICAgICAgICAgICAgZWxpZiAoaXNpbnN0YW5jZShleHByLCBhc3QuQmluT3ApIG9yCisgICAgICAgICAgICAgICAgICAgIChpc2luc3RhbmNlKGV4cHIsIGFzdC5VbmFyeU9wKSBhbmQgbm90IGlzaW5zdGFuY2UoZXhwci5vcGVyYW5kLCBhc3QuTnVtKSkpOgorICAgICAgICAgICAgICAgICAgICBjX2RlZmF1bHQgPSBrd2FyZ3MuZ2V0KCJjX2RlZmF1bHQiKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2UoY19kZWZhdWx0LCBzdHIpIGFuZCBjX2RlZmF1bHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiV2hlbiB5b3Ugc3BlY2lmeSBhbiBleHByZXNzaW9uICgiICsgcmVwcihkZWZhdWx0KSArICIpIGFzIHlvdXIgZGVmYXVsdCB2YWx1ZSxcbnlvdSBNVVNUIHNwZWNpZnkgYSB2YWxpZCBjX2RlZmF1bHQuIikKKyAgICAgICAgICAgICAgICAgICAgcHlfZGVmYXVsdCA9IGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmtub3duCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV4cHIsIGFzdC5BdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgICAgICBhID0gW10KKyAgICAgICAgICAgICAgICAgICAgbiA9IGV4cHIKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgaXNpbnN0YW5jZShuLCBhc3QuQXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGEuYXBwZW5kKG4uYXR0cikKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG4sIGFzdC5OYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoIlVuc3VwcG9ydGVkIGRlZmF1bHQgdmFsdWUgIiArIHJlcHIoZGVmYXVsdCkgKyAiIChsb29rZWQgbGlrZSBhIFB5dGhvbiBjb25zdGFudCkiKQorICAgICAgICAgICAgICAgICAgICBhLmFwcGVuZChuLmlkKQorICAgICAgICAgICAgICAgICAgICBweV9kZWZhdWx0ID0gIi4iLmpvaW4ocmV2ZXJzZWQoYSkpCisKKyAgICAgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0ga3dhcmdzLmdldCgiY19kZWZhdWx0IikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKGNfZGVmYXVsdCwgc3RyKSBhbmQgY19kZWZhdWx0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoIldoZW4geW91IHNwZWNpZnkgYSBuYW1lZCBjb25zdGFudCAoIiArIHJlcHIocHlfZGVmYXVsdCkgKyAiKSBhcyB5b3VyIGRlZmF1bHQgdmFsdWUsXG55b3UgTVVTVCBzcGVjaWZ5IGEgdmFsaWQgY19kZWZhdWx0LiIpCisKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBldmFsKHB5X2RlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVua25vd24KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzdC5saXRlcmFsX2V2YWwoZXhwcikKKyAgICAgICAgICAgICAgICAgICAgcHlfZGVmYXVsdCA9IHJlcHIodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChib29sLCBOb25lLl9fY2xhc3NfXykpOgorICAgICAgICAgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0gIlB5XyIgKyBweV9kZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNfZGVmYXVsdCA9IGNfcmVwcih2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNfZGVmYXVsdCA9IHB5X2RlZmF1bHQKKworICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZmFpbCgiU3ludGF4IGVycm9yOiAiICsgcmVwcihlLnRleHQpKQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmtub3duCisgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0ga3dhcmdzLmdldCgiY19kZWZhdWx0IikKKyAgICAgICAgICAgICAgICBweV9kZWZhdWx0ID0gZGVmYXVsdAorICAgICAgICAgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZShjX2RlZmF1bHQsIHN0cikgYW5kIGNfZGVmYXVsdCk6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIldoZW4geW91IHNwZWNpZnkgYSBuYW1lZCBjb25zdGFudCAoIiArIHJlcHIocHlfZGVmYXVsdCkgKyAiKSBhcyB5b3VyIGRlZmF1bHQgdmFsdWUsXG55b3UgTVVTVCBzcGVjaWZ5IGEgdmFsaWQgY19kZWZhdWx0LiIpCisKKyAgICAgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdjX2RlZmF1bHQnLCBjX2RlZmF1bHQpCisgICAgICAgICAgICBrd2FyZ3Muc2V0ZGVmYXVsdCgncHlfZGVmYXVsdCcsIHB5X2RlZmF1bHQpCisKKyAgICAgICAgZGljdCA9IGxlZ2FjeV9jb252ZXJ0ZXJzIGlmIGxlZ2FjeSBlbHNlIGNvbnZlcnRlcnMKKyAgICAgICAgbGVnYWN5X3N0ciA9ICJsZWdhY3kgIiBpZiBsZWdhY3kgZWxzZSAiIgorICAgICAgICBpZiBuYW1lIG5vdCBpbiBkaWN0OgorICAgICAgICAgICAgZmFpbCgne30gaXMgbm90IGEgdmFsaWQge31jb252ZXJ0ZXInLmZvcm1hdChuYW1lLCBsZWdhY3lfc3RyKSkKKyAgICAgICAgIyBpZiB5b3UgdXNlIGEgY19uYW1lIGZvciB0aGUgcGFyYW1ldGVyLCB3ZSBqdXN0IGdpdmUgdGhhdCBuYW1lIHRvIHRoZSBjb252ZXJ0ZXIKKyAgICAgICAgIyBidXQgdGhlIHBhcmFtZXRlciBvYmplY3QgZ2V0cyB0aGUgcHl0aG9uIG5hbWUKKyAgICAgICAgY29udmVydGVyID0gZGljdFtuYW1lXShjX25hbWUgb3IgcGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlcl9uYW1lLCBzZWxmLmZ1bmN0aW9uLCB2YWx1ZSwgKiprd2FyZ3MpCisKKyAgICAgICAga2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWSBpZiBzZWxmLmtleXdvcmRfb25seSBlbHNlIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT1JfS0VZV09SRAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcik6CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzKSA9PSAxOgorICAgICAgICAgICAgICAgIGlmIChzZWxmLnBhcmFtZXRlcl9zdGF0ZSAhPSBzZWxmLnBzX3JlcXVpcmVkKToKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiQSAnc2VsZicgcGFyYW1ldGVyIGNhbm5vdCBiZSBtYXJrZWQgb3B0aW9uYWwuIikKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkEgJ3NlbGYnIHBhcmFtZXRlciBjYW5ub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUuIikKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJBICdzZWxmJyBwYXJhbWV0ZXIgY2Fubm90IGJlIGluIGFuIG9wdGlvbmFsIGdyb3VwLiIpCisgICAgICAgICAgICAgICAga2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorICAgICAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19zdGFydAorICAgICAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy5jbGVhcigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWwoIkEgJ3NlbGYnIHBhcmFtZXRlciwgaWYgc3BlY2lmaWVkLCBtdXN0IGJlIHRoZSB2ZXJ5IGZpcnN0IHRoaW5nIGluIHRoZSBwYXJhbWV0ZXIgYmxvY2suIikKKworICAgICAgICBwID0gUGFyYW1ldGVyKHBhcmFtZXRlcl9uYW1lLCBraW5kLCBmdW5jdGlvbj1zZWxmLmZ1bmN0aW9uLCBjb252ZXJ0ZXI9Y29udmVydGVyLCBkZWZhdWx0PXZhbHVlLCBncm91cD1zZWxmLmdyb3VwKQorCisgICAgICAgIGlmIHBhcmFtZXRlcl9uYW1lIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVyczoKKyAgICAgICAgICAgIGZhaWwoIllvdSBjYW4ndCBoYXZlIHR3byBwYXJhbWV0ZXJzIG5hbWVkICIgKyByZXByKHBhcmFtZXRlcl9uYW1lKSArICIhIikKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzW3BhcmFtZXRlcl9uYW1lXSA9IHAKKworICAgIGRlZiBwYXJzZV9jb252ZXJ0ZXIoc2VsZiwgYW5ub3RhdGlvbik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoYW5ub3RhdGlvbiwgYXN0LlN0cik6CisgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbi5zLCBUcnVlLCB7fQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYW5ub3RhdGlvbiwgYXN0Lk5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb24uaWQsIEZhbHNlLCB7fQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFubm90YXRpb24sIGFzdC5DYWxsKToKKyAgICAgICAgICAgIGZhaWwoIkFubm90YXRpb25zIG11c3QgYmUgZWl0aGVyIGEgbmFtZSwgYSBmdW5jdGlvbiBjYWxsLCBvciBhIHN0cmluZy4iKQorCisgICAgICAgIG5hbWUgPSBhbm5vdGF0aW9uLmZ1bmMuaWQKKyAgICAgICAga3dhcmdzID0ge25vZGUuYXJnOiBhc3QubGl0ZXJhbF9ldmFsKG5vZGUudmFsdWUpIGZvciBub2RlIGluIGFubm90YXRpb24ua2V5d29yZHN9CisgICAgICAgIHJldHVybiBuYW1lLCBGYWxzZSwga3dhcmdzCisKKyAgICBkZWYgcGFyc2Vfc3BlY2lhbF9zeW1ib2woc2VsZiwgc3ltYm9sKToKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPT0gc2VsZi5wc19zZWVuX3NsYXNoOgorICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgc3BlY2lmaWVzICIgKyBzeW1ib2wgKyAiIGFmdGVyIC8sIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIpCisKKyAgICAgICAgaWYgc3ltYm9sID09ICcqJzoKKyAgICAgICAgICAgIGlmIHNlbGYua2V5d29yZF9vbmx5OgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIHVzZXMgJyonIG1vcmUgdGhhbiBvbmNlLiIpCisgICAgICAgICAgICBzZWxmLmtleXdvcmRfb25seSA9IFRydWUKKyAgICAgICAgZWxpZiBzeW1ib2wgPT0gJ1snOgorICAgICAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfc3RhcnQsIHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlCisgICAgICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3JlcXVpcmVkLCBzZWxmLnBzX2dyb3VwX2FmdGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfZ3JvdXBfYWZ0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIi5iKSIpCisgICAgICAgICAgICBzZWxmLmdyb3VwICs9IDEKKyAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24uZG9jc3RyaW5nX29ubHkgPSBUcnVlCisgICAgICAgIGVsaWYgc3ltYm9sID09ICddJzoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhIF0gd2l0aG91dCBhIG1hdGNoaW5nIFsuIikKKyAgICAgICAgICAgIGlmIG5vdCBhbnkocC5ncm91cCA9PSBzZWxmLmdyb3VwIGZvciBwIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKSk6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIGVtcHR5IGdyb3VwLlxuQWxsIGdyb3VwcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhcmFtZXRlci4iKQorICAgICAgICAgICAgc2VsZi5ncm91cCAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19sZWZ0X3NxdWFyZV9iZWZvcmUsIHNlbGYucHNfZ3JvdXBfYmVmb3JlKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfZ3JvdXBfYmVmb3JlCisgICAgICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX2dyb3VwX2FmdGVyLCBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlcik6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYW4gdW5zdXBwb3J0ZWQgZ3JvdXAgY29uZmlndXJhdGlvbi4gKFVuZXhwZWN0ZWQgc3RhdGUgIiArIHN0cihzZWxmLnBhcmFtZXRlcl9zdGF0ZSkgKyAiLmMpIikKKyAgICAgICAgZWxpZiBzeW1ib2wgPT0gJy8nOgorICAgICAgICAgICAgIyBwc19yZXF1aXJlZCBhbmQgcHNfb3B0aW9uYWwgYXJlIGFsbG93ZWQgaGVyZSwgdGhhdCBhbGxvd3MgcG9zaXRpb25hbC1vbmx5IHdpdGhvdXQgb3B0aW9uIGdyb3VwcworICAgICAgICAgICAgIyB0byB3b3JrIChhbmQgaGF2ZSBkZWZhdWx0IHZhbHVlcyEpCisgICAgICAgICAgICBpZiAoc2VsZi5wYXJhbWV0ZXJfc3RhdGUgbm90IGluIChzZWxmLnBzX3JlcXVpcmVkLCBzZWxmLnBzX29wdGlvbmFsLCBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlciwgc2VsZi5wc19ncm91cF9iZWZvcmUpKSBvciBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIuZCkiKQorICAgICAgICAgICAgaWYgc2VsZi5rZXl3b3JkX29ubHk6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgbWl4ZXMga2V5d29yZC1vbmx5IGFuZCBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycywgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIikKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19zZWVuX3NsYXNoCisgICAgICAgICAgICAjIGZpeHVwIHByZWNlZWRpbmcgcGFyYW1ldGVycworICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGlmIChwLmtpbmQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JEIGFuZCBub3QgaXNpbnN0YW5jZShwLmNvbnZlcnRlciwgc2VsZl9jb252ZXJ0ZXIpKToKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgbWl4ZXMga2V5d29yZC1vbmx5IGFuZCBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycywgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIikKKyAgICAgICAgICAgICAgICBwLmtpbmQgPSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkKKworICAgIGRlZiBzdGF0ZV9wYXJhbWV0ZXJfZG9jc3RyaW5nX3N0YXJ0KHNlbGYsIGxpbmUpOgorICAgICAgICBzZWxmLnBhcmFtZXRlcl9kb2NzdHJpbmdfaW5kZW50ID0gbGVuKHNlbGYuaW5kZW50Lm1hcmdpbikKKyAgICAgICAgYXNzZXJ0IHNlbGYuaW5kZW50LmRlcHRoID09IDMKKyAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlcl9kb2NzdHJpbmcsIGxpbmUpCisKKyAgICAjIGV2ZXJ5IGxpbmUgb2YgdGhlIGRvY3N0cmluZyBtdXN0IHN0YXJ0IHdpdGggYXQgbGVhc3QgRiBzcGFjZXMsCisgICAgIyB3aGVyZSBGID4gUC4KKyAgICAjIHRoZXNlIEYgc3BhY2VzIHdpbGwgYmUgc3RyaXBwZWQuCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcl9kb2NzdHJpbmcoc2VsZiwgbGluZSk6CisgICAgICAgIHN0cmlwcGVkID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIHN0cmlwcGVkLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGluZGVudCA9IHNlbGYuaW5kZW50Lm1lYXN1cmUobGluZSkKKyAgICAgICAgaWYgaW5kZW50IDwgc2VsZi5wYXJhbWV0ZXJfZG9jc3RyaW5nX2luZGVudDoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50LmluZmVyKGxpbmUpCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5pbmRlbnQuZGVwdGggPCAzCisgICAgICAgICAgICBpZiBzZWxmLmluZGVudC5kZXB0aCA9PSAyOgorICAgICAgICAgICAgICAgICMgYmFjayB0byBhIHBhcmFtZXRlcgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXIsIGxpbmUpCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5pbmRlbnQuZGVwdGggPT0gMQorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZywgbGluZSkKKworICAgICAgICBhc3NlcnQgc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzCisgICAgICAgIGxhc3RfcGFyYW1ldGVyID0gbmV4dChyZXZlcnNlZChsaXN0KHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKSkpKQorCisgICAgICAgIG5ld19kb2NzdHJpbmcgPSBsYXN0X3BhcmFtZXRlci5kb2NzdHJpbmcKKworICAgICAgICBpZiBuZXdfZG9jc3RyaW5nOgorICAgICAgICAgICAgbmV3X2RvY3N0cmluZyArPSAnXG4nCisgICAgICAgIGlmIHN0cmlwcGVkOgorICAgICAgICAgICAgbmV3X2RvY3N0cmluZyArPSBzZWxmLmluZGVudC5kZWRlbnQobGluZSkKKworICAgICAgICBsYXN0X3BhcmFtZXRlci5kb2NzdHJpbmcgPSBuZXdfZG9jc3RyaW5nCisKKyAgICAjIHRoZSBmaW5hbCBzdGFuemEgb2YgdGhlIERTTCBpcyB0aGUgZG9jc3RyaW5nLgorICAgIGRlZiBzdGF0ZV9mdW5jdGlvbl9kb2NzdHJpbmcoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIHNlbGYuZ3JvdXA6CisgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYSBdIHdpdGhvdXQgYSBtYXRjaGluZyBbLiIpCisKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbmV3X2RvY3N0cmluZyA9IHNlbGYuZnVuY3Rpb24uZG9jc3RyaW5nCisgICAgICAgIGlmIG5ld19kb2NzdHJpbmc6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9ICJcbiIKKyAgICAgICAgaWYgc3RyaXBwZWQ6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5pbmRlbnQuZGVkZW50KGxpbmUpLnJzdHJpcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lID0gJycKKyAgICAgICAgbmV3X2RvY3N0cmluZyArPSBsaW5lCisgICAgICAgIHNlbGYuZnVuY3Rpb24uZG9jc3RyaW5nID0gbmV3X2RvY3N0cmluZworCisgICAgZGVmIGZvcm1hdF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZ1bmN0aW9uCisKKyAgICAgICAgbmV3X29yX2luaXQgPSBmLmtpbmQgaW4gKE1FVEhPRF9ORVcsIE1FVEhPRF9JTklUKQorICAgICAgICBpZiBuZXdfb3JfaW5pdCBhbmQgbm90IGYuZG9jc3RyaW5nOgorICAgICAgICAgICAgIyBkb24ndCByZW5kZXIgYSBkb2NzdHJpbmcgYXQgYWxsLCBubyBzaWduYXR1cmUsIG5vdGhpbmcuCisgICAgICAgICAgICByZXR1cm4gZi5kb2NzdHJpbmcKKworICAgICAgICB0ZXh0LCBhZGQsIG91dHB1dCA9IF90ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgcGFyYW1ldGVycyA9IGYucmVuZGVyX3BhcmFtZXRlcnMKKworICAgICAgICAjIworICAgICAgICAjIyBkb2NzdHJpbmcgZmlyc3QgbGluZQorICAgICAgICAjIworCisgICAgICAgIGlmIG5ld19vcl9pbml0OgorICAgICAgICAgICAgIyBjbGFzc2VzIGdldCAqanVzdCogdGhlIG5hbWUgb2YgdGhlIGNsYXNzCisgICAgICAgICAgICAjIG5vdCBfX25ld19fLCBub3QgX19pbml0X18sIGFuZCBub3QgbW9kdWxlLmNsYXNzbmFtZQorICAgICAgICAgICAgYXNzZXJ0IGYuY2xzCisgICAgICAgICAgICBhZGQoZi5jbHMubmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZChmLm5hbWUpCisgICAgICAgIGFkZCgnKCcpCisKKyAgICAgICAgIyBwb3B1bGF0ZSAicmlnaHRfYnJhY2tldF9jb3VudCIgZmllbGQgZm9yIGV2ZXJ5IHBhcmFtZXRlcgorICAgICAgICBhc3NlcnQgcGFyYW1ldGVycywgIldlIHNob3VsZCBhbHdheXMgaGF2ZSBhIHNlbGYgcGFyYW1ldGVyLiAiICsgcmVwcihmKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXJhbWV0ZXJzWzBdLmNvbnZlcnRlciwgc2VsZl9jb252ZXJ0ZXIpCisgICAgICAgIHBhcmFtZXRlcnNbMF0ucmlnaHRfYnJhY2tldF9jb3VudCA9IDAKKyAgICAgICAgcGFyYW1ldGVyc19hZnRlcl9zZWxmID0gcGFyYW1ldGVyc1sxOl0KKyAgICAgICAgaWYgcGFyYW1ldGVyc19hZnRlcl9zZWxmOgorICAgICAgICAgICAgIyBmb3Igbm93LCB0aGUgb25seSB3YXkgQ2xpbmljIHN1cHBvcnRzIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzCisgICAgICAgICAgICAjIGlzIGlmIGFsbCBvZiB0aGVtIGFyZSBwb3NpdGlvbmFsLW9ubHkuLi4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgLi4uIGV4Y2VwdCBmb3Igc2VsZiEgIHNlbGYgaXMgYWx3YXlzIHBvc2l0aW9uYWwtb25seS4KKworICAgICAgICAgICAgcG9zaXRpb25hbF9vbmx5X3BhcmFtZXRlcnMgPSBbcC5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSBmb3IgcCBpbiBwYXJhbWV0ZXJzX2FmdGVyX3NlbGZdCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXJzX2FmdGVyX3NlbGZbMF0ua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGFsbChwb3NpdGlvbmFsX29ubHlfcGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgICAgICBwLnJpZ2h0X2JyYWNrZXRfY291bnQgPSBhYnMocC5ncm91cCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBkb24ndCBwdXQgYW55IHJpZ2h0IGJyYWNrZXRzIGFyb3VuZCBub24tcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMsIGV2ZXIuCisgICAgICAgICAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyc19hZnRlcl9zZWxmOgorICAgICAgICAgICAgICAgICAgICBwLnJpZ2h0X2JyYWNrZXRfY291bnQgPSAwCisKKyAgICAgICAgcmlnaHRfYnJhY2tldF9jb3VudCA9IDAKKworICAgICAgICBkZWYgZml4X3JpZ2h0X2JyYWNrZXRfY291bnQoZGVzaXJlZCk6CisgICAgICAgICAgICBub25sb2NhbCByaWdodF9icmFja2V0X2NvdW50CisgICAgICAgICAgICBzID0gJycKKyAgICAgICAgICAgIHdoaWxlIHJpZ2h0X2JyYWNrZXRfY291bnQgPCBkZXNpcmVkOgorICAgICAgICAgICAgICAgIHMgKz0gJ1snCisgICAgICAgICAgICAgICAgcmlnaHRfYnJhY2tldF9jb3VudCArPSAxCisgICAgICAgICAgICB3aGlsZSByaWdodF9icmFja2V0X2NvdW50ID4gZGVzaXJlZDoKKyAgICAgICAgICAgICAgICBzICs9ICddJworICAgICAgICAgICAgICAgIHJpZ2h0X2JyYWNrZXRfY291bnQgLT0gMQorICAgICAgICAgICAgcmV0dXJuIHMKKworICAgICAgICBuZWVkX3NsYXNoID0gRmFsc2UKKyAgICAgICAgYWRkZWRfc2xhc2ggPSBGYWxzZQorICAgICAgICBuZWVkX2FfdHJhaWxpbmdfc2xhc2ggPSBGYWxzZQorCisgICAgICAgICMgd2Ugb25seSBuZWVkIGEgdHJhaWxpbmcgc2xhc2g6CisgICAgICAgICMgICAqIGlmIHRoaXMgaXMgbm90IGEgImRvY3N0cmluZ19vbmx5IiBzaWduYXR1cmUKKyAgICAgICAgIyAgICogYW5kIGlmIHRoZSBsYXN0ICpzaG93biogcGFyYW1ldGVyIGlzCisgICAgICAgICMgICAgIHBvc2l0aW9uYWwgb25seQorICAgICAgICBpZiBub3QgZi5kb2NzdHJpbmdfb25seToKKyAgICAgICAgICAgIGZvciBwIGluIHJldmVyc2VkKHBhcmFtZXRlcnMpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBwLmNvbnZlcnRlci5zaG93X2luX3NpZ25hdHVyZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBwLmlzX3Bvc2l0aW9uYWxfb25seSgpOgorICAgICAgICAgICAgICAgICAgICBuZWVkX2FfdHJhaWxpbmdfc2xhc2ggPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKworCisgICAgICAgIGFkZGVkX3N0YXIgPSBGYWxzZQorCisgICAgICAgIGZpcnN0X3BhcmFtZXRlciA9IFRydWUKKyAgICAgICAgbGFzdF9wID0gcGFyYW1ldGVyc1stMV0KKyAgICAgICAgbGluZV9sZW5ndGggPSBsZW4oJycuam9pbih0ZXh0KSkKKyAgICAgICAgaW5kZW50ID0gIiAiICogbGluZV9sZW5ndGgKKyAgICAgICAgZGVmIGFkZF9wYXJhbWV0ZXIodGV4dCk6CisgICAgICAgICAgICBub25sb2NhbCBsaW5lX2xlbmd0aAorICAgICAgICAgICAgbm9ubG9jYWwgZmlyc3RfcGFyYW1ldGVyCisgICAgICAgICAgICBpZiBmaXJzdF9wYXJhbWV0ZXI6CisgICAgICAgICAgICAgICAgcyA9IHRleHQKKyAgICAgICAgICAgICAgICBmaXJzdF9wYXJhbWV0ZXIgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzID0gJyAnICsgdGV4dAorICAgICAgICAgICAgICAgIGlmIGxpbmVfbGVuZ3RoICsgbGVuKHMpID49IDcyOgorICAgICAgICAgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgYWRkKGluZGVudCkKKyAgICAgICAgICAgICAgICAgICAgbGluZV9sZW5ndGggPSBsZW4oaW5kZW50KQorICAgICAgICAgICAgICAgICAgICBzID0gdGV4dAorICAgICAgICAgICAgbGluZV9sZW5ndGggKz0gbGVuKHMpCisgICAgICAgICAgICBhZGQocykKKworICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgaWYgbm90IHAuY29udmVydGVyLnNob3dfaW5fc2lnbmF0dXJlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhc3NlcnQgcC5uYW1lCisKKyAgICAgICAgICAgIGlzX3NlbGYgPSBpc2luc3RhbmNlKHAuY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcikKKyAgICAgICAgICAgIGlmIGlzX3NlbGYgYW5kIGYuZG9jc3RyaW5nX29ubHk6CisgICAgICAgICAgICAgICAgIyB0aGlzIGlzbid0IGEgcmVhbCBtYWNoaW5lLXBhcnNhYmxlIHNpZ25hdHVyZSwKKyAgICAgICAgICAgICAgICAjIHNvIGxldCdzIG5vdCBwcmludCB0aGUgInNlbGYiIHBhcmFtZXRlcgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHAuaXNfcG9zaXRpb25hbF9vbmx5KCk6CisgICAgICAgICAgICAgICAgbmVlZF9zbGFzaCA9IG5vdCBmLmRvY3N0cmluZ19vbmx5CisgICAgICAgICAgICBlbGlmIG5lZWRfc2xhc2ggYW5kIG5vdCAoYWRkZWRfc2xhc2ggb3IgcC5pc19wb3NpdGlvbmFsX29ubHkoKSk6CisgICAgICAgICAgICAgICAgYWRkZWRfc2xhc2ggPSBUcnVlCisgICAgICAgICAgICAgICAgYWRkX3BhcmFtZXRlcignLywnKQorCisgICAgICAgICAgICBpZiBwLmlzX2tleXdvcmRfb25seSgpIGFuZCBub3QgYWRkZWRfc3RhcjoKKyAgICAgICAgICAgICAgICBhZGRlZF9zdGFyID0gVHJ1ZQorICAgICAgICAgICAgICAgIGFkZF9wYXJhbWV0ZXIoJyosJykKKworICAgICAgICAgICAgcF9hZGQsIHBfb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgICAgICBwX2FkZChmaXhfcmlnaHRfYnJhY2tldF9jb3VudChwLnJpZ2h0X2JyYWNrZXRfY291bnQpKQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHAuY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcik6CisgICAgICAgICAgICAgICAgIyBhbm5vdGF0ZSBmaXJzdCBwYXJhbWV0ZXIgYXMgYmVpbmcgYSAic2VsZiIuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgaWYgaW5zcGVjdC5TaWduYXR1cmUgZ2V0cyB0aGlzIGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICMgYW5kIGl0J3MgYWxyZWFkeSBib3VuZCwgdGhlIHNlbGYgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgIyB3aWxsIGJlIHN0cmlwcGVkIG9mZi4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBpZiBpdCdzIG5vdCBib3VuZCwgaXQgc2hvdWxkIGJlIG1hcmtlZAorICAgICAgICAgICAgICAgICMgYXMgcG9zaXRpb25hbC1vbmx5LgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIG5vdGU6IHdlIGRvbid0IHByaW50ICJzZWxmIiBmb3IgX19pbml0X18sCisgICAgICAgICAgICAgICAgIyBiZWNhdXNlIHRoaXMgaXNuJ3QgYWN0dWFsbHkgdGhlIHNpZ25hdHVyZQorICAgICAgICAgICAgICAgICMgZm9yIF9faW5pdF9fLiAgKGl0IGNhbid0IGJlLCBfX2luaXRfXyBkb2Vzbid0CisgICAgICAgICAgICAgICAgIyBoYXZlIGEgZG9jc3RyaW5nLikgIGlmIHRoaXMgaXMgYW4gX19pbml0X18KKyAgICAgICAgICAgICAgICAjIChvciBfX25ld19fKSwgdGhlbiB0aGlzIHNpZ25hdHVyZSBpcyBmb3IKKyAgICAgICAgICAgICAgICAjIGNhbGxpbmcgdGhlIGNsYXNzIHRvIGNvbnRydWN0IGEgbmV3IGluc3RhbmNlLgorICAgICAgICAgICAgICAgIHBfYWRkKCckJykKKworICAgICAgICAgICAgbmFtZSA9IHAuY29udmVydGVyLnNpZ25hdHVyZV9uYW1lIG9yIHAubmFtZQorICAgICAgICAgICAgcF9hZGQobmFtZSkKKworICAgICAgICAgICAgaWYgcC5jb252ZXJ0ZXIuaXNfb3B0aW9uYWwoKToKKyAgICAgICAgICAgICAgICBwX2FkZCgnPScpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBwLmNvbnZlcnRlci5weV9kZWZhdWx0CisgICAgICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlcHIocC5jb252ZXJ0ZXIuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICBwX2FkZCh2YWx1ZSkKKworICAgICAgICAgICAgaWYgKHAgIT0gbGFzdF9wKSBvciBuZWVkX2FfdHJhaWxpbmdfc2xhc2g6CisgICAgICAgICAgICAgICAgcF9hZGQoJywnKQorCisgICAgICAgICAgICBhZGRfcGFyYW1ldGVyKHBfb3V0cHV0KCkpCisKKyAgICAgICAgYWRkKGZpeF9yaWdodF9icmFja2V0X2NvdW50KDApKQorICAgICAgICBpZiBuZWVkX2FfdHJhaWxpbmdfc2xhc2g6CisgICAgICAgICAgICBhZGRfcGFyYW1ldGVyKCcvJykKKyAgICAgICAgYWRkKCcpJykKKworICAgICAgICAjIFBFUCA4IHNheXM6CisgICAgICAgICMKKyAgICAgICAgIyAgICAgVGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5IHdpbGwgbm90IHVzZSBmdW5jdGlvbiBhbm5vdGF0aW9ucworICAgICAgICAjICAgICBhcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIHByZW1hdHVyZSBjb21taXRtZW50IHRvIGEgcGFydGljdWxhcgorICAgICAgICAjICAgICBhbm5vdGF0aW9uIHN0eWxlLiBJbnN0ZWFkLCB0aGUgYW5ub3RhdGlvbnMgYXJlIGxlZnQgZm9yIHVzZXJzCisgICAgICAgICMgICAgIHRvIGRpc2NvdmVyIGFuZCBleHBlcmltZW50IHdpdGggdXNlZnVsIGFubm90YXRpb24gc3R5bGVzLgorICAgICAgICAjCisgICAgICAgICMgdGhlcmVmb3JlIHRoaXMgaXMgY29tbWVudGVkIG91dDoKKyAgICAgICAgIworICAgICAgICAjIGlmIGYucmV0dXJuX2NvbnZlcnRlci5weV9kZWZhdWx0OgorICAgICAgICAjICAgICBhZGQoJyAtPiAnKQorICAgICAgICAjICAgICBhZGQoZi5yZXR1cm5fY29udmVydGVyLnB5X2RlZmF1bHQpCisKKyAgICAgICAgaWYgbm90IGYuZG9jc3RyaW5nX29ubHk6CisgICAgICAgICAgICBhZGQoIlxuLS1cbiIpCisKKyAgICAgICAgZG9jc3RyaW5nX2ZpcnN0X2xpbmUgPSBvdXRwdXQoKQorCisgICAgICAgICMgbm93IGZpeCB1cCB0aGUgcGxhY2VzIHdoZXJlIHRoZSBicmFja2V0cyBsb29rIHdyb25nCisgICAgICAgIGRvY3N0cmluZ19maXJzdF9saW5lID0gZG9jc3RyaW5nX2ZpcnN0X2xpbmUucmVwbGFjZSgnLCBdJywgJyxdICcpCisKKyAgICAgICAgIyBva2F5LiAgbm93IHdlJ3JlIG9mZmljaWFsbHkgYnVpbGRpbmcgdGhlICJwYXJhbWV0ZXJzIiBzZWN0aW9uLgorICAgICAgICAjIGNyZWF0ZSBzdWJzdGl0dXRpb24gdGV4dCBmb3Ige3BhcmFtZXRlcnN9CisgICAgICAgIHNwYWNlcl9saW5lID0gRmFsc2UKKyAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGlmIG5vdCBwLmRvY3N0cmluZy5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzcGFjZXJfbGluZToKKyAgICAgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BhY2VyX2xpbmUgPSBUcnVlCisgICAgICAgICAgICBhZGQoIiAgIikKKyAgICAgICAgICAgIGFkZChwLm5hbWUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGFkZCh0ZXh0d3JhcC5pbmRlbnQocnN0cmlwX2xpbmVzKHAuZG9jc3RyaW5nLnJzdHJpcCgpKSwgIiAgICAiKSkKKyAgICAgICAgcGFyYW1ldGVycyA9IG91dHB1dCgpCisgICAgICAgIGlmIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzICs9ICdcbicKKworICAgICAgICAjIworICAgICAgICAjIyBkb2NzdHJpbmcgYm9keQorICAgICAgICAjIworCisgICAgICAgIGRvY3N0cmluZyA9IGYuZG9jc3RyaW5nLnJzdHJpcCgpCisgICAgICAgIGxpbmVzID0gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gZG9jc3RyaW5nLnNwbGl0KCdcbicpXQorCisgICAgICAgICMgRW5mb3JjZSB0aGUgc3VtbWFyeSBsaW5lIQorICAgICAgICAjIFRoZSBmaXJzdCBsaW5lIG9mIGEgZG9jc3RyaW5nIHNob3VsZCBiZSBhIHN1bW1hcnkgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAjIEl0IHNob3VsZCBmaXQgb24gb25lIGxpbmUgKDgwIGNvbHVtbnM/IDc5IG1heWJlPykgYW5kIGJlIGEgcGFyYWdyYXBoCisgICAgICAgICMgYnkgaXRzZWxmLgorICAgICAgICAjCisgICAgICAgICMgQXJndW1lbnQgQ2xpbmljIGVuZm9yY2VzIHRoZSBmb2xsb3dpbmcgcnVsZToKKyAgICAgICAgIyAgKiBlaXRoZXIgdGhlIGRvY3N0cmluZyBpcyBlbXB0eSwKKyAgICAgICAgIyAgKiBvciBpdCBtdXN0IGhhdmUgYSBzdW1tYXJ5IGxpbmUuCisgICAgICAgICMKKyAgICAgICAgIyBHdWlkbyBzYWlkIENsaW5pYyBzaG91bGQgZW5mb3JjZSB0aGlzOgorICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAxMy1KdW5lLzEyNzExMC5odG1sCisKKyAgICAgICAgaWYgbGVuKGxpbmVzKSA+PSAyOgorICAgICAgICAgICAgaWYgbGluZXNbMV06CisgICAgICAgICAgICAgICAgZmFpbCgiRG9jc3RyaW5nIGZvciAiICsgZi5mdWxsX25hbWUgKyAiIGRvZXMgbm90IGhhdmUgYSBzdW1tYXJ5IGxpbmUhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIkV2ZXJ5IG5vbi1ibGFuayBmdW5jdGlvbiBkb2NzdHJpbmcgbXVzdCBzdGFydCB3aXRoXG4iICsKKyAgICAgICAgICAgICAgICAgICAgImEgc2luZ2xlIGxpbmUgc3VtbWFyeSBmb2xsb3dlZCBieSBhbiBlbXB0eSBsaW5lLiIpCisgICAgICAgIGVsaWYgbGVuKGxpbmVzKSA9PSAxOgorICAgICAgICAgICAgIyB0aGUgZG9jc3RyaW5nIGlzIG9ubHkgb25lIGxpbmUgcmlnaHQgbm93LS10aGUgc3VtbWFyeSBsaW5lLgorICAgICAgICAgICAgIyBhZGQgYW4gZW1wdHkgbGluZSBhZnRlciB0aGUgc3VtbWFyeSBsaW5lIHNvIHdlIGhhdmUgc3BhY2UKKyAgICAgICAgICAgICMgYmV0d2VlbiBpdCBhbmQgdGhlIHtwYXJhbWV0ZXJzfSB3ZSdyZSBhYm91dCB0byBhZGQuCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAgICAgcGFyYW1ldGVyc19tYXJrZXJfY291bnQgPSBsZW4oZG9jc3RyaW5nLnNwbGl0KCd7cGFyYW1ldGVyc30nKSkgLSAxCisgICAgICAgIGlmIHBhcmFtZXRlcnNfbWFya2VyX2NvdW50ID4gMToKKyAgICAgICAgICAgIGZhaWwoJ1lvdSBtYXkgbm90IHNwZWNpZnkge3BhcmFtZXRlcnN9IG1vcmUgdGhhbiBvbmNlIGluIGEgZG9jc3RyaW5nIScpCisKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnNfbWFya2VyX2NvdW50OgorICAgICAgICAgICAgIyBpbnNlcnQgYWZ0ZXIgc3VtbWFyeSBsaW5lCisgICAgICAgICAgICBsaW5lcy5pbnNlcnQoMiwgJ3twYXJhbWV0ZXJzfScpCisKKyAgICAgICAgIyBpbnNlcnQgYXQgZnJvbnQgb2YgZG9jc3RyaW5nCisgICAgICAgIGxpbmVzLmluc2VydCgwLCBkb2NzdHJpbmdfZmlyc3RfbGluZSkKKworICAgICAgICBkb2NzdHJpbmcgPSAiXG4iLmpvaW4obGluZXMpCisKKyAgICAgICAgYWRkKGRvY3N0cmluZykKKyAgICAgICAgZG9jc3RyaW5nID0gb3V0cHV0KCkKKworICAgICAgICBkb2NzdHJpbmcgPSBsaW5lYXJfZm9ybWF0KGRvY3N0cmluZywgcGFyYW1ldGVycz1wYXJhbWV0ZXJzKQorICAgICAgICBkb2NzdHJpbmcgPSBkb2NzdHJpbmcucnN0cmlwKCkKKworICAgICAgICByZXR1cm4gZG9jc3RyaW5nCisKKyAgICBkZWYgc3RhdGVfdGVybWluYWwoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgd2hlbiBwcm9jZXNzaW5nIHRoZSBibG9jayBpcyBkb25lLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IG5vdCBsaW5lCisKKyAgICAgICAgaWYgbm90IHNlbGYuZnVuY3Rpb246CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLmtleXdvcmRfb25seToKKyAgICAgICAgICAgIHZhbHVlcyA9IHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKQorICAgICAgICAgICAgaWYgbm90IHZhbHVlczoKKyAgICAgICAgICAgICAgICBub19wYXJhbWV0ZXJfYWZ0ZXJfc3RhciA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3QodmFsdWVzKSkpCisgICAgICAgICAgICAgICAgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXIgPSBsYXN0X3BhcmFtZXRlci5raW5kICE9IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWQorICAgICAgICAgICAgaWYgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXI6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgc3BlY2lmaWVzICcqJyB3aXRob3V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyd2FyZHMuIikKKworICAgICAgICAjIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIHBhcmFtZXRlciBkb2NzdHJpbmdzCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUuZG9jc3RyaW5nID0gdmFsdWUuZG9jc3RyaW5nLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcgPSBzZWxmLmZvcm1hdF9kb2NzdHJpbmcoKQorCisKKworCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZSBjYWxsYWJsZSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdAorIyB0aGF0IGltcGxlbWVudHMgdGhlIGNsaW5pYyBwYXJzZXIKKyMgaW50ZXJmYWNlIChfX2luaXRfXyBhbmQgcGFyc2UpLgorIworIyBleGFtcGxlIHBhcnNlcnM6CisjICAgImNsaW5pYyIsIGhhbmRsZXMgdGhlIENsaW5pYyBEU0wKKyMgICAicHl0aG9uIiwgaGFuZGxlcyBydW5uaW5nIFB5dGhvbiBjb2RlCisjCitwYXJzZXJzID0geydjbGluaWMnIDogRFNMUGFyc2VyLCAncHl0aG9uJzogUHl0aG9uUGFyc2VyfQorCisKK2NsaW5pYyA9IE5vbmUKKworCitkZWYgbWFpbihhcmd2KToKKyAgICBpbXBvcnQgc3lzCisKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvLm1ham9yIDwgMyBvciBzeXMudmVyc2lvbl9pbmZvLm1pbm9yIDwgMzoKKyAgICAgICAgc3lzLmV4aXQoIkVycm9yOiBjbGluaWMucHkgcmVxdWlyZXMgUHl0aG9uIDMuMyBvciBncmVhdGVyLiIpCisKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBjbWRsaW5lID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItZiIsICItLWZvcmNlIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLW8iLCAiLS1vdXRwdXQiLCB0eXBlPXN0cikKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLS1jb252ZXJ0ZXJzIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLS1tYWtlIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiZmlsZW5hbWUiLCB0eXBlPXN0ciwgbmFyZ3M9IioiKQorICAgIG5zID0gY21kbGluZS5wYXJzZV9hcmdzKGFyZ3YpCisKKyAgICBpZiBucy5jb252ZXJ0ZXJzOgorICAgICAgICBpZiBucy5maWxlbmFtZToKKyAgICAgICAgICAgIHByaW50KCJVc2FnZSBlcnJvcjogY2FuJ3Qgc3BlY2lmeSAtLWNvbnZlcnRlcnMgYW5kIGEgZmlsZW5hbWUgYXQgdGhlIHNhbWUgdGltZS4iKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgtMSkKKyAgICAgICAgY29udmVydGVycyA9IFtdCisgICAgICAgIHJldHVybl9jb252ZXJ0ZXJzID0gW10KKyAgICAgICAgaWdub3JlZCA9IHNldCgiIiIKKyAgICAgICAgICAgIGFkZF9jX2NvbnZlcnRlcgorICAgICAgICAgICAgYWRkX2NfcmV0dXJuX2NvbnZlcnRlcgorICAgICAgICAgICAgYWRkX2RlZmF1bHRfbGVnYWN5X2NfY29udmVydGVyCisgICAgICAgICAgICBhZGRfbGVnYWN5X2NfY29udmVydGVyCisgICAgICAgICAgICAiIiIuc3RyaXAoKS5zcGxpdCgpKQorICAgICAgICBtb2R1bGUgPSBnbG9iYWxzKCkKKyAgICAgICAgZm9yIG5hbWUgaW4gbW9kdWxlOgorICAgICAgICAgICAgZm9yIHN1ZmZpeCwgaWRzIGluICgKKyAgICAgICAgICAgICAgICAoIl9yZXR1cm5fY29udmVydGVyIiwgcmV0dXJuX2NvbnZlcnRlcnMpLAorICAgICAgICAgICAgICAgICgiX2NvbnZlcnRlciIsIGNvbnZlcnRlcnMpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lIGluIGlnbm9yZWQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aChzdWZmaXgpOgorICAgICAgICAgICAgICAgICAgICBpZHMuYXBwZW5kKChuYW1lLCBuYW1lWzotbGVuKHN1ZmZpeCldKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHJpbnQoKQorCisgICAgICAgIHByaW50KCJMZWdhY3kgY29udmVydGVyczoiKQorICAgICAgICBsZWdhY3kgPSBzb3J0ZWQobGVnYWN5X2NvbnZlcnRlcnMpCisgICAgICAgIHByaW50KCcgICAgJyArICcgJy5qb2luKGMgZm9yIGMgaW4gbGVnYWN5IGlmIGNbMF0uaXN1cHBlcigpKSkKKyAgICAgICAgcHJpbnQoJyAgICAnICsgJyAnLmpvaW4oYyBmb3IgYyBpbiBsZWdhY3kgaWYgY1swXS5pc2xvd2VyKCkpKQorICAgICAgICBwcmludCgpCisKKyAgICAgICAgZm9yIHRpdGxlLCBhdHRyaWJ1dGUsIGlkcyBpbiAoCisgICAgICAgICAgICAoIkNvbnZlcnRlcnMiLCAnY29udmVydGVyX2luaXQnLCBjb252ZXJ0ZXJzKSwKKyAgICAgICAgICAgICgiUmV0dXJuIGNvbnZlcnRlcnMiLCAncmV0dXJuX2NvbnZlcnRlcl9pbml0JywgcmV0dXJuX2NvbnZlcnRlcnMpLAorICAgICAgICApOgorICAgICAgICAgICAgcHJpbnQodGl0bGUgKyAiOiIpCisgICAgICAgICAgICBsb25nZXN0ID0gLTEKKyAgICAgICAgICAgIGZvciBuYW1lLCBzaG9ydF9uYW1lIGluIGlkczoKKyAgICAgICAgICAgICAgICBsb25nZXN0ID0gbWF4KGxvbmdlc3QsIGxlbihzaG9ydF9uYW1lKSkKKyAgICAgICAgICAgIGZvciBuYW1lLCBzaG9ydF9uYW1lIGluIHNvcnRlZChpZHMsIGtleT1sYW1iZGEgeDogeFsxXS5sb3dlcigpKToKKyAgICAgICAgICAgICAgICBjbHMgPSBtb2R1bGVbbmFtZV0KKyAgICAgICAgICAgICAgICBjYWxsYWJsZSA9IGdldGF0dHIoY2xzLCBhdHRyaWJ1dGUsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgbm90IGNhbGxhYmxlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKGNhbGxhYmxlKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXJfbmFtZSwgcGFyYW1ldGVyIGluIHNpZ25hdHVyZS5wYXJhbWV0ZXJzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5kZWZhdWx0ICE9IGluc3BlY3QuUGFyYW1ldGVyLmVtcHR5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAne309eyFyfScuZm9ybWF0KHBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChzKQorICAgICAgICAgICAgICAgIHByaW50KCcgICAge30oe30pJy5mb3JtYXQoc2hvcnRfbmFtZSwgJywgJy5qb2luKHBhcmFtZXRlcnMpKSkKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoIkFsbCBjb252ZXJ0ZXJzIGFsc28gYWNjZXB0IChjX2RlZmF1bHQ9Tm9uZSwgcHlfZGVmYXVsdD1Ob25lLCBhbm5vdGF0aW9uPU5vbmUpLiIpCisgICAgICAgIHByaW50KCJBbGwgcmV0dXJuIGNvbnZlcnRlcnMgYWxzbyBhY2NlcHQgKHB5X2RlZmF1bHQ9Tm9uZSkuIikKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGlmIG5zLm1ha2U6CisgICAgICAgIGlmIG5zLm91dHB1dCBvciBucy5maWxlbmFtZToKKyAgICAgICAgICAgIHByaW50KCJVc2FnZSBlcnJvcjogY2FuJ3QgdXNlIC1vIG9yIGZpbGVuYW1lcyB3aXRoIC0tbWFrZS4iKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgtMSkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoJy4nKToKKyAgICAgICAgICAgIGZvciByY3NfZGlyIGluICgnLnN2bicsICcuZ2l0JywgJy5oZycsICdidWlsZCcpOgorICAgICAgICAgICAgICAgIGlmIHJjc19kaXIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICAgICAgZGlycy5yZW1vdmUocmNzX2RpcikKKyAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBub3QgKGZpbGVuYW1lLmVuZHN3aXRoKCcuYycpIG9yIGZpbGVuYW1lLmVuZHN3aXRoKCcuaCcpKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGlmIG5zLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KHBhdGgpCisgICAgICAgICAgICAgICAgcGFyc2VfZmlsZShwYXRoLCBmb3JjZT1ucy5mb3JjZSwgdmVyaWZ5PW5vdCBucy5mb3JjZSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBub3QgbnMuZmlsZW5hbWU6CisgICAgICAgIGNtZGxpbmUucHJpbnRfdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgtMSkKKworICAgIGlmIG5zLm91dHB1dCBhbmQgbGVuKG5zLmZpbGVuYW1lKSA+IDE6CisgICAgICAgIHByaW50KCJVc2FnZSBlcnJvcjogY2FuJ3QgdXNlIC1vIHdpdGggbXVsdGlwbGUgZmlsZW5hbWVzLiIpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgIHN5cy5leGl0KC0xKQorCisgICAgZm9yIGZpbGVuYW1lIGluIG5zLmZpbGVuYW1lOgorICAgICAgICBpZiBucy52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoZmlsZW5hbWUpCisgICAgICAgIHBhcnNlX2ZpbGUoZmlsZW5hbWUsIG91dHB1dD1ucy5vdXRwdXQsIGZvcmNlPW5zLmZvcmNlLCB2ZXJpZnk9bm90IG5zLmZvcmNlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvVG9vbHMvY2xpbmljL2NsaW5pY190ZXN0LnB5IGIvVG9vbHMvY2xpbmljL2NsaW5pY190ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMjEwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9jbGluaWMvY2xpbmljX3Rlc3QucHkKQEAgLTAsMCArMSw4MDEgQEAKKyMgQXJndW1lbnQgQ2xpbmljCisjIENvcHlyaWdodCAyMDEyLTIwMTMgYnkgTGFycnkgSGFzdGluZ3MuCisjIExpY2Vuc2VkIHRvIHRoZSBQU0YgdW5kZXIgYSBjb250cmlidXRvciBhZ3JlZW1lbnQuCisjCisKK2ltcG9ydCBidWlsdGlucworaW1wb3J0IGNsaW5pYworZnJvbSBjbGluaWMgaW1wb3J0IERTTFBhcnNlcgoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW5zcGVjdAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCisKKworY2xhc3MgRmFrZUNvbnZlcnRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYXJncyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5hcmdzID0gYXJncworCisKK2NsYXNzIEZha2VDb252ZXJ0ZXJGYWN0b3J5OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG5hbWUsIGRlZmF1bHQsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIEZha2VDb252ZXJ0ZXIoc2VsZi5uYW1lLCBrd2FyZ3MpCisKKworY2xhc3MgRmFrZUNvbnZlcnRlcnNEaWN0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi51c2VkX2NvbnZlcnRlcnMgPSB7fQorCisgICAgZGVmIGdldChzZWxmLCBuYW1lLCBkZWZhdWx0KToKKyAgICAgICAgcmV0dXJuIHNlbGYudXNlZF9jb252ZXJ0ZXJzLnNldGRlZmF1bHQobmFtZSwgRmFrZUNvbnZlcnRlckZhY3RvcnkobmFtZSkpCisKK2NsaW5pYy5DbGluaWMucHJlc2V0c190ZXh0ID0gJycKK2MgPSBjbGluaWMuQ2xpbmljKGxhbmd1YWdlPSdDJykKKworY2xhc3MgRmFrZUNsaW5pYzoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY29udmVydGVycyA9IEZha2VDb252ZXJ0ZXJzRGljdCgpCisgICAgICAgIHNlbGYubGVnYWN5X2NvbnZlcnRlcnMgPSBGYWtlQ29udmVydGVyc0RpY3QoKQorICAgICAgICBzZWxmLmxhbmd1YWdlID0gY2xpbmljLkNMYW5ndWFnZShOb25lKQorICAgICAgICBzZWxmLmZpbGVuYW1lID0gTm9uZQorICAgICAgICBzZWxmLmJsb2NrX3BhcnNlciA9IGNsaW5pYy5CbG9ja1BhcnNlcignJywgc2VsZi5sYW5ndWFnZSkKKyAgICAgICAgc2VsZi5tb2R1bGVzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmNsYXNzZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIGNsaW5pYy5jbGluaWMgPSBzZWxmCisgICAgICAgIHNlbGYubmFtZSA9ICJGYWtlQ2xpbmljIgorICAgICAgICBzZWxmLmxpbmVfcHJlZml4ID0gc2VsZi5saW5lX3N1ZmZpeCA9ICcnCisgICAgICAgIHNlbGYuZGVzdGluYXRpb25zID0ge30KKyAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oImJsb2NrIiwgImJ1ZmZlciIpCisgICAgICAgIHNlbGYuYWRkX2Rlc3RpbmF0aW9uKCJmaWxlIiwgImJ1ZmZlciIpCisgICAgICAgIHNlbGYuYWRkX2Rlc3RpbmF0aW9uKCJzdXBwcmVzcyIsICJzdXBwcmVzcyIpCisgICAgICAgIGQgPSBzZWxmLmRlc3RpbmF0aW9ucy5nZXQKKyAgICAgICAgc2VsZi5maWVsZF9kZXN0aW5hdGlvbnMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgoCisgICAgICAgICAgICAoJ2RvY3N0cmluZ19wcm90b3R5cGUnLCBkKCdzdXBwcmVzcycpKSwKKyAgICAgICAgICAgICgnZG9jc3RyaW5nX2RlZmluaXRpb24nLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgnbWV0aG9kZGVmX2RlZmluZScsIGQoJ2Jsb2NrJykpLAorICAgICAgICAgICAgKCdpbXBsX3Byb3RvdHlwZScsIGQoJ2Jsb2NrJykpLAorICAgICAgICAgICAgKCdwYXJzZXJfcHJvdG90eXBlJywgZCgnc3VwcHJlc3MnKSksCisgICAgICAgICAgICAoJ3BhcnNlcl9kZWZpbml0aW9uJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ2ltcGxfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAorICAgICAgICApKQorCisgICAgZGVmIGdldF9kZXN0aW5hdGlvbihzZWxmLCBuYW1lKToKKyAgICAgICAgZCA9IHNlbGYuZGVzdGluYXRpb25zLmdldChuYW1lKQorICAgICAgICBpZiBub3QgZDoKKyAgICAgICAgICAgIHN5cy5leGl0KCJEZXN0aW5hdGlvbiBkb2VzIG5vdCBleGlzdDogIiArIHJlcHIobmFtZSkpCisgICAgICAgIHJldHVybiBkCisKKyAgICBkZWYgYWRkX2Rlc3RpbmF0aW9uKHNlbGYsIG5hbWUsIHR5cGUsICphcmdzKToKKyAgICAgICAgaWYgbmFtZSBpbiBzZWxmLmRlc3RpbmF0aW9uczoKKyAgICAgICAgICAgIHN5cy5leGl0KCJEZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0czogIiArIHJlcHIobmFtZSkpCisgICAgICAgIHNlbGYuZGVzdGluYXRpb25zW25hbWVdID0gY2xpbmljLkRlc3RpbmF0aW9uKG5hbWUsIHR5cGUsIHNlbGYsICphcmdzKQorCisgICAgZGVmIGlzX2RpcmVjdGl2ZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIG5hbWUgPT0gIm1vZHVsZSIKKworICAgIGRlZiBkaXJlY3RpdmUoc2VsZiwgbmFtZSwgYXJncyk6CisgICAgICAgIHNlbGYuY2FsbGVkX2RpcmVjdGl2ZXNbbmFtZV0gPSBhcmdzCisKKyAgICBfbW9kdWxlX2FuZF9jbGFzcyA9IGNsaW5pYy5DbGluaWMuX21vZHVsZV9hbmRfY2xhc3MKKworY2xhc3MgQ2xpbmljV2hvbGVGaWxlVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW9sKHNlbGYpOgorICAgICAgICAjIHJlZ3Jlc3Npb24gdGVzdDoKKyAgICAgICAgIyBjbGluaWMncyBibG9jayBwYXJzZXIgZGlkbid0IHJlY29nbml6ZQorICAgICAgICAjIHRoZSAiZW5kIGxpbmUiIGZvciB0aGUgYmxvY2sgaWYgaXQKKyAgICAgICAgIyBkaWRuJ3QgZW5kIGluICJcbiIgKGFzIGluLCB0aGUgbGFzdCkKKyAgICAgICAgIyBieXRlIG9mIHRoZSBmaWxlIHdhcyAnLycuCisgICAgICAgICMgc28gaXQgd291ZGwgc3BpdCBvdXQgYW4gZW5kIGxpbmUgZm9yIHlvdS4KKyAgICAgICAgIyBhbmQgc2luY2UgeW91IHJlYWxseSBhbHJlYWR5IGhhZCBvbmUsCisgICAgICAgICMgdGhlIGxhc3QgbGluZSBvZiB0aGUgYmxvY2sgZ290IGNvcnJ1cHRlZC4KKyAgICAgICAgYyA9IGNsaW5pYy5DbGluaWMoY2xpbmljLkNMYW5ndWFnZShOb25lKSkKKyAgICAgICAgcmF3ID0gIi8qW2NsaW5pY11cbmZvb1xuW2NsaW5pY10qLyIKKyAgICAgICAgY29va2VkID0gYy5wYXJzZShyYXcpLnNwbGl0bGluZXMoKQorICAgICAgICBlbmRfbGluZSA9IGNvb2tlZFsyXS5yc3RyaXAoKQorICAgICAgICAjIHRoaXMgdGVzdCBpcyByZWR1bmRhbnQsIGl0J3MganVzdCBoZXJlIGV4cGxpY2l0bHkgdG8gY2F0Y2gKKyAgICAgICAgIyB0aGUgcmVncmVzc2lvbiB0ZXN0IHNvIHdlIGRvbid0IGZvcmdldCB3aGF0IGl0IGxvb2tlZCBsaWtlCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZW5kX2xpbmUsICJbY2xpbmljXSovW2NsaW5pY10qLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5kX2xpbmUsICJbY2xpbmljXSovIikKKworCisKK2NsYXNzIENsaW5pY0dyb3VwUGVybXV0ZXJUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgX3Rlc3Qoc2VsZiwgbCwgbSwgciwgb3V0cHV0KToKKyAgICAgICAgY29tcHV0ZWQgPSBjbGluaWMucGVybXV0ZV9vcHRpb25hbF9ncm91cHMobCwgbSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGNvbXB1dGVkKQorCisgICAgZGVmIHRlc3RfcmFuZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoW1snc3RhcnQnXV0sIFsnc3RvcCddLCBbWydzdGVwJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAgICgnc3RvcCcsKSwKKyAgICAgICAgICAgICgnc3RhcnQnLCAnc3RvcCcsKSwKKyAgICAgICAgICAgICgnc3RhcnQnLCAnc3RvcCcsICdzdGVwJywpLAorICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9hZGRfd2luZG93KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtbJ3gnLCAneSddXSwgWydjaCddLCBbWydhdHRyJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAgICgnY2gnLCksCisgICAgICAgICAgICAoJ2NoJywgJ2F0dHInKSwKKyAgICAgICAgICAgICgneCcsICd5JywgJ2NoJywpLAorICAgICAgICAgICAgKCd4JywgJ3knLCAnY2gnLCAnYXR0cicpLAorICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9sdWRpY3JvdXMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoW1snYTEnLCAnYTInLCAnYTMnXSwgWydiMScsICdiMiddXSwgWydjMSddLCBbWydkMScsICdkMiddLCBbJ2UxJywgJ2UyJywgJ2UzJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAoJ2MxJywpLAorICAgICAgICAgICgnYjEnLCAnYjInLCAnYzEnKSwKKyAgICAgICAgICAoJ2IxJywgJ2IyJywgJ2MxJywgJ2QxJywgJ2QyJyksCisgICAgICAgICAgKCdhMScsICdhMicsICdhMycsICdiMScsICdiMicsICdjMScpLAorICAgICAgICAgICgnYTEnLCAnYTInLCAnYTMnLCAnYjEnLCAnYjInLCAnYzEnLCAnZDEnLCAnZDInKSwKKyAgICAgICAgICAoJ2ExJywgJ2EyJywgJ2EzJywgJ2IxJywgJ2IyJywgJ2MxJywgJ2QxJywgJ2QyJywgJ2UxJywgJ2UyJywgJ2UzJyksCisgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X3JpZ2h0X29ubHkoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoW10sIFtdLCBbWydhJ10sWydiJ10sWydjJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAoKSwKKyAgICAgICAgICAoJ2EnLCksCisgICAgICAgICAgKCdhJywgJ2InKSwKKyAgICAgICAgICAoJ2EnLCAnYicsICdjJykKKyAgICAgICAgICApKQorCisgICAgZGVmIHRlc3RfaGF2ZV9sZWZ0X29wdGlvbnNfYnV0X3JlcXVpcmVkX2lzX2VtcHR5KHNlbGYpOgorICAgICAgICBkZWYgZm4oKToKKyAgICAgICAgICAgIGNsaW5pYy5wZXJtdXRlX29wdGlvbmFsX2dyb3VwcyhbJ2EnXSwgW10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgZm4pCisKKworY2xhc3MgQ2xpbmljTGluZWFyRm9ybWF0VGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIGlucHV0LCBvdXRwdXQsICoqa3dhcmdzKToKKyAgICAgICAgY29tcHV0ZWQgPSBjbGluaWMubGluZWFyX2Zvcm1hdChpbnB1dCwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBjb21wdXRlZCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZ3Moc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoJycsICcnKQorCisgICAgZGVmIHRlc3Rfc29sb19uZXdsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCdcbicsICdcbicpCisKKyAgICBkZWYgdGVzdF9ub19zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgIiIiLCAiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAge25hbWV9CisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCAiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsIG5hbWU9JycpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfbGluZV9zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAge25hbWV9CisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCAiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICBHQVJHTEUKKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsIG5hbWU9J0dBUkdMRScpCisKKyAgICBkZWYgdGVzdF9tdWx0aWxpbmVfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIHtuYW1lfQorICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgYmluZ2xlCisgICAgICAgICAgYnVuZ2xlCisKKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsIG5hbWU9J2JpbmdsZVxuYnVuZ2xlXG4nKQorCitjbGFzcyBJbmVydFBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGJsb2NrKToKKyAgICAgICAgcGFzcworCitjbGFzcyBDb3B5UGFyc2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGluaWMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBibG9jay5vdXRwdXQgPSBibG9jay5pbnB1dAorCisKK2NsYXNzIENsaW5pY0Jsb2NrUGFyc2VyVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIGlucHV0LCBvdXRwdXQpOgorICAgICAgICBsYW5ndWFnZSA9IGNsaW5pYy5DTGFuZ3VhZ2UoTm9uZSkKKworICAgICAgICBibG9ja3MgPSBsaXN0KGNsaW5pYy5CbG9ja1BhcnNlcihpbnB1dCwgbGFuZ3VhZ2UpKQorICAgICAgICB3cml0ZXIgPSBjbGluaWMuQmxvY2tQcmludGVyKGxhbmd1YWdlKQorICAgICAgICBmb3IgYmxvY2sgaW4gYmxvY2tzOgorICAgICAgICAgICAgd3JpdGVyLnByaW50X2Jsb2NrKGJsb2NrKQorICAgICAgICBvdXRwdXQgPSB3cml0ZXIuZi5nZXR2YWx1ZSgpCisgICAgICAgIGFzc2VydCBvdXRwdXQgPT0gaW5wdXQsICJvdXRwdXQgIT0gaW5wdXQhXG5cbm91dHB1dCAiICsgcmVwcihvdXRwdXQpICsgIlxuXG4gaW5wdXQgIiArIHJlcHIoaW5wdXQpCisKKyAgICBkZWYgcm91bmRfdHJpcChzZWxmLCBpbnB1dCk6CisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0KGlucHV0LCBpbnB1dCkKKworICAgIGRlZiB0ZXN0X3JvdW5kX3RyaXBfMShzZWxmKToKKyAgICAgICAgc2VsZi5yb3VuZF90cmlwKCIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisiIiIpCisgICAgZGVmIHRlc3Rfcm91bmRfdHJpcF8yKHNlbGYpOgorICAgICAgICBzZWxmLnJvdW5kX3RyaXAoIiIiCisgICAgdmVyYmF0aW0gdGV4dCBoZXJlCisgICAgbGFoIGRlZSBkYWgKKy8qW2luZXJ0XQorYWJjCitbaW5lcnRdKi8KK2RlZgorLypbaW5lcnQgY2hlY2tzdW06IDdiMThkMDE3Zjg5ZjYxY2YxN2Q0N2Y5Mjc0OWVhNjkzMGEzZjFkZWJdKi8KK3h5egorIiIiKQorCisgICAgZGVmIF90ZXN0X2NsaW5pYyhzZWxmLCBpbnB1dCwgb3V0cHV0KToKKyAgICAgICAgbGFuZ3VhZ2UgPSBjbGluaWMuQ0xhbmd1YWdlKE5vbmUpCisgICAgICAgIGMgPSBjbGluaWMuQ2xpbmljKGxhbmd1YWdlKQorICAgICAgICBjLnBhcnNlcnNbJ2luZXJ0J10gPSBJbmVydFBhcnNlcihjKQorICAgICAgICBjLnBhcnNlcnNbJ2NvcHknXSA9IENvcHlQYXJzZXIoYykKKyAgICAgICAgY29tcHV0ZWQgPSBjLnBhcnNlKGlucHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgY29tcHV0ZWQpCisKKyAgICBkZWYgdGVzdF9jbGluaWNfMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9jbGluaWMoIiIiCisgICAgdmVyYmF0aW0gdGV4dCBoZXJlCisgICAgbGFoIGRlZSBkYWgKKy8qW2NvcHkgaW5wdXRdCitkZWYKK1tjb3B5IHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCithYmMKKy8qW2NvcHkgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDNjZmQ3NDM2NjFmMDc5NyBpbnB1dD03YjE4ZDAxN2Y4OWY2MWNmXSovCit4eXoKKyIiIiwgIiIiCisgICAgdmVyYmF0aW0gdGV4dCBoZXJlCisgICAgbGFoIGRlZSBkYWgKKy8qW2NvcHkgaW5wdXRdCitkZWYKK1tjb3B5IHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCitkZWYKKy8qW2NvcHkgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9N2IxOGQwMTdmODlmNjFjZiBpbnB1dD03YjE4ZDAxN2Y4OWY2MWNmXSovCit4eXoKKyIiIikKKworCitjbGFzcyBDbGluaWNQYXJzZXJUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90cml2aWFsKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBEU0xQYXJzZXIoRmFrZUNsaW5pYygpKQorICAgICAgICBibG9jayA9IGNsaW5pYy5CbG9jaygibW9kdWxlIG9zXG5vcy5hY2Nlc3MiKQorICAgICAgICBwYXJzZXIucGFyc2UoYmxvY2spCisgICAgICAgIG1vZHVsZSwgZnVuY3Rpb24gPSBibG9jay5zaWduYXR1cmVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImFjY2VzcyIsIGZ1bmN0aW9uLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIm9zIiwgbW9kdWxlLm5hbWUpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfbGluZShzZWxmKToKKyAgICAgICAgYmxvY2sgPSBzZWxmLnBhcnNlKCIjXG5tb2R1bGUgb3Ncbm9zLmFjY2VzcyIpCisgICAgICAgIG1vZHVsZSwgZnVuY3Rpb24gPSBibG9jay5zaWduYXR1cmVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImFjY2VzcyIsIGZ1bmN0aW9uLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIm9zIiwgbW9kdWxlLm5hbWUpCisKKyAgICBkZWYgdGVzdF9wYXJhbShzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgcGF0aDogaW50IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYWNjZXNzIiwgZnVuY3Rpb24ubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycykpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydwYXRoJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgncGF0aCcsIHAubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHAuY29udmVydGVyLCBjbGluaWMuaW50X2NvbnZlcnRlcikKKworICAgIGRlZiB0ZXN0X3BhcmFtX2RlZmF1bHQoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2ZvbGxvd19zeW1saW5rcyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcC5kZWZhdWx0KQorCisgICAgZGVmIHRlc3RfcGFyYW1fd2l0aF9jb250aW51YXRpb25zKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICAgZm9sbG93X3N5bWxpbmtzOiBcXFxuICAgYm9vbCBcXFxuICAgPVxcXG4gICAgVHJ1ZSIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydmb2xsb3dfc3ltbGlua3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHAuZGVmYXVsdCkKKworICAgIGRlZiB0ZXN0X3BhcmFtX2RlZmF1bHRfZXhwcmVzc2lvbihzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgIGZvbGxvd19zeW1saW5rczogaW50KGNfZGVmYXVsdD0nTUFYU0laRScpID0gc3lzLm1heHNpemUiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snZm9sbG93X3N5bWxpbmtzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMubWF4c2l6ZSwgcC5kZWZhdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJNQVhTSVpFIiwgcC5jb252ZXJ0ZXIuY19kZWZhdWx0KQorCisgICAgICAgIHMgPSBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgIGZvbGxvd19zeW1saW5rczogaW50ID0gc3lzLm1heHNpemUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJFcnJvciBvbiBsaW5lIDA6XG5XaGVuIHlvdSBzcGVjaWZ5IGEgbmFtZWQgY29uc3RhbnQgKCdzeXMubWF4c2l6ZScpIGFzIHlvdXIgZGVmYXVsdCB2YWx1ZSxcbnlvdSBNVVNUIHNwZWNpZnkgYSB2YWxpZCBjX2RlZmF1bHQuXG4iKQorCisgICAgZGVmIHRlc3RfcGFyYW1fbm9fZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgb3MKK29zLmFjY2VzcworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICBzb21ldGhpbmdfZWxzZTogc3RyID0gJyciIiIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydmb2xsb3dfc3ltbGlua3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGxlbihmdW5jdGlvbi5wYXJhbWV0ZXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3NvbWV0aGluZ19lbHNlJ10uY29udmVydGVyLCBjbGluaWMuc3RyX2NvbnZlcnRlcikKKworICAgIGRlZiB0ZXN0X3BhcmFtX2RlZmF1bHRfcGFyYW1ldGVyc19vdXRfb2Zfb3JkZXIoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIG9zCitvcy5hY2Nlc3MKKyAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlCisgICAgc29tZXRoaW5nX2Vsc2U6IHN0ciIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiIiJFcnJvciBvbiBsaW5lIDA6CitDYW4ndCBoYXZlIGEgcGFyYW1ldGVyIHdpdGhvdXQgYSBkZWZhdWx0ICgnc29tZXRoaW5nX2Vsc2UnKQorYWZ0ZXIgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQhCisiIiIpCisKKyAgICBkZWYgZGlzYWJsZWRfdGVzdF9jb252ZXJ0ZXJfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICAgcGF0aDogcGF0aF90KGFsbG93X2ZkPTEpIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3BhdGgnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHAuY29udmVydGVyLmFyZ3NbJ2FsbG93X2ZkJ10pCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3Muc3RhdCBhcyBvc19zdGF0X2ZuCisKKyAgIHBhdGg6IHN0cgorICAgICAgIFBhdGggdG8gYmUgZXhhbWluZWQKKworUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiIgorc3RhdCgkbW9kdWxlLCAvLCBwYXRoKQorLS0KKworUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguCisKKyAgcGF0aAorICAgIFBhdGggdG8gYmUgZXhhbWluZWQKKyIiIi5zdHJpcCgpLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9wYXJhbWV0ZXJzX2luX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICB4OiBpbnQKKyAgICAgRG9jdW1lbnRhdGlvbiBmb3IgeC4KKyAgeTogaW50CisKK1RoaXMgaXMgdGhlIGRvY3VtZW50YXRpb24gZm9yIGZvby4KKworT2theSwgd2UncmUgZG9uZSBoZXJlLgorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiIgorYmFyKCRtb2R1bGUsIC8sIHgsIHkpCistLQorCitUaGlzIGlzIHRoZSBkb2N1bWVudGF0aW9uIGZvciBmb28uCisKKyAgeAorICAgIERvY3VtZW50YXRpb24gZm9yIHguCisKK09rYXksIHdlJ3JlIGRvbmUgaGVyZS4KKyIiIi5zdHJpcCgpLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJfcmVncmVzc2lvbl9zcGVjaWFsX2NoYXJhY3Rlcl9pbl9wYXJhbWV0ZXJfY29sdW1uX29mX2RvY3N0cmluZ19maXJzdF9saW5lKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgb3MKK29zLnN0YXQKKyAgICBwYXRoOiBzdHIKK1RoaXMvdXNlZCB0byBicmVhayBDbGluaWMhCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInN0YXQoJG1vZHVsZSwgLywgcGF0aClcbi0tXG5cblRoaXMvdXNlZCB0byBicmVhayBDbGluaWMhIiwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfY19uYW1lKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3Muc3RhdCBhcyBvc19zdGF0X2ZuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib3Nfc3RhdF9mbiIsIGZ1bmN0aW9uLmNfYmFzZW5hbWUpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5fY29udmVydGVyKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3Muc3RhdCAtPiBpbnQiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnVuY3Rpb24ucmV0dXJuX2NvbnZlcnRlciwgY2xpbmljLmludF9yZXR1cm5fY29udmVydGVyKQorCisgICAgZGVmIHRlc3Rfc3RhcihzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgICpcbiAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2ZvbGxvd19zeW1saW5rcyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZLCBwLmtpbmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcC5ncm91cCkKKworICAgIGRlZiB0ZXN0X2dyb3VwKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSB3aW5kb3dcbndpbmRvdy5ib3JkZXJcbiBbXG4gbHMgOiBpbnRcbiBdXG4gL1xuIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2xzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwLmdyb3VwKQorCisgICAgZGVmIHRlc3RfbGVmdF9ncm91cChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGN1cnNlcworY3Vyc2VzLmFkZGNoCisgICBbCisgICB5OiBpbnQKKyAgICAgWS1jb29yZGluYXRlLgorICAgeDogaW50CisgICAgIFgtY29vcmRpbmF0ZS4KKyAgIF0KKyAgIGNoOiBjaGFyCisgICAgIENoYXJhY3RlciB0byBhZGQuCisgICBbCisgICBhdHRyOiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBdCisgICAvCisiIiIpCisgICAgICAgIGZvciBuYW1lLCBncm91cCBpbiAoCisgICAgICAgICAgICAoJ3knLCAtMSksICgneCcsIC0xKSwKKyAgICAgICAgICAgICgnY2gnLCAwKSwKKyAgICAgICAgICAgICgnYXR0cicsIDEpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzW25hbWVdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ3JvdXAsIGdyb3VwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtpbmQsIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jdGlvbi5kb2NzdHJpbmcuc3RyaXAoKSwgIiIiCithZGRjaChbeSwgeCxdIGNoLCBbYXR0cl0pCisKKworICB5CisgICAgWS1jb29yZGluYXRlLgorICB4CisgICAgWC1jb29yZGluYXRlLgorICBjaAorICAgIENoYXJhY3RlciB0byBhZGQuCisgIGF0dHIKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgICAgICAgICAgIiIiLnN0cmlwKCkpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfZ3JvdXBzKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgY3Vyc2VzCitjdXJzZXMuaW1hZ2luYXJ5CisgICBbCisgICBbCisgICB5MTogaW50CisgICAgIFktY29vcmRpbmF0ZS4KKyAgIHkyOiBpbnQKKyAgICAgWS1jb29yZGluYXRlLgorICAgXQorICAgeDE6IGludAorICAgICBYLWNvb3JkaW5hdGUuCisgICB4MjogaW50CisgICAgIFgtY29vcmRpbmF0ZS4KKyAgIF0KKyAgIGNoOiBjaGFyCisgICAgIENoYXJhY3RlciB0byBhZGQuCisgICBbCisgICBhdHRyMTogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgYXR0cjI6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHIzOiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBbCisgICBhdHRyNDogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgYXR0cjU6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHI2OiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBdCisgICBdCisgICAvCisiIiIpCisgICAgICAgIGZvciBuYW1lLCBncm91cCBpbiAoCisgICAgICAgICAgICAoJ3kxJywgLTIpLCAoJ3kyJywgLTIpLAorICAgICAgICAgICAgKCd4MScsIC0xKSwgKCd4MicsIC0xKSwKKyAgICAgICAgICAgICgnY2gnLCAwKSwKKyAgICAgICAgICAgICgnYXR0cjEnLCAxKSwgKCdhdHRyMicsIDEpLCAoJ2F0dHIzJywgMSksCisgICAgICAgICAgICAoJ2F0dHI0JywgMiksICgnYXR0cjUnLCAyKSwgKCdhdHRyNicsIDIpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzW25hbWVdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ3JvdXAsIGdyb3VwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtpbmQsIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmN0aW9uLmRvY3N0cmluZy5zdHJpcCgpLCAiIiIKK2ltYWdpbmFyeShbW3kxLCB5MixdIHgxLCB4MixdIGNoLCBbYXR0cjEsIGF0dHIyLCBhdHRyMywgW2F0dHI0LCBhdHRyNSwKKyAgICAgICAgICBhdHRyNl1dKQorCisKKyAgeTEKKyAgICBZLWNvb3JkaW5hdGUuCisgIHkyCisgICAgWS1jb29yZGluYXRlLgorICB4MQorICAgIFgtY29vcmRpbmF0ZS4KKyAgeDIKKyAgICBYLWNvb3JkaW5hdGUuCisgIGNoCisgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKyAgYXR0cjEKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyMgorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHIzCisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjQKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyNQorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHI2CisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICAiIiIuc3RyaXAoKSkKKworICAgIGRlZiBwYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbChzZWxmLCBzKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbihzKQorICAgICAgICByZXR1cm4gc3Rkb3V0LmdldHZhbHVlKCkKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX3R3b190b3BfZ3JvdXBzX29uX2xlZnQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLnR3b190b3BfZ3JvdXBzX29uX2xlZnQKKyAgICBbCisgICAgZ3JvdXAxIDogaW50CisgICAgXQorICAgIFsKKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgcGFyYW06IGludAorICAgICAgICAgICAgIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsCisgICAgICAgICAgICAoJ0Vycm9yIG9uIGxpbmUgMDpcbicKKyAgICAgICAgICAgICdGdW5jdGlvbiB0d29fdG9wX2dyb3Vwc19vbl9sZWZ0IGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAyLmIpXG4nKSkKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX3R3b190b3BfZ3JvdXBzX29uX3JpZ2h0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLnR3b190b3BfZ3JvdXBzX29uX3JpZ2h0CisgICAgcGFyYW06IGludAorICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgWworICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX3BhcmFtZXRlcl9hZnRlcl9ncm91cF9vbl9yaWdodChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5wYXJhbWV0ZXJfYWZ0ZXJfZ3JvdXBfb25fcmlnaHQKKyAgICBwYXJhbTogaW50CisgICAgWworICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fZ3JvdXBfYWZ0ZXJfcGFyYW1ldGVyX29uX2xlZnQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uZ3JvdXBfYWZ0ZXJfcGFyYW1ldGVyX29uX2xlZnQKKyAgICBbCisgICAgZ3JvdXAyIDogaW50CisgICAgWworICAgIGdyb3VwMSA6IGludAorICAgIF0KKyAgICBdCisgICAgcGFyYW06IGludAorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fZW1wdHlfZ3JvdXBfb25fbGVmdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5lbXB0eV9ncm91cAorICAgIFsKKyAgICBbCisgICAgXQorICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICBwYXJhbTogaW50CisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX19lbXB0eV9ncm91cF9vbl9yaWdodChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5lbXB0eV9ncm91cAorICAgIHBhcmFtOiBpbnQKKyAgICBbCisgICAgWworICAgIF0KKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9ub19wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisKK0RvY3N0cmluZworCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImJhcigkbW9kdWxlLCAvKVxuLS1cblxuRG9jc3RyaW5nIiwgZnVuY3Rpb24uZG9jc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihmdW5jdGlvbi5wYXJhbWV0ZXJzKSkgIyBzZWxmIQorCisgICAgZGVmIHRlc3RfaW5pdF93aXRoX25vX3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBmb28KK2NsYXNzIGZvby5CYXIgInVudXNlZCIgIm5vdG5lZWRlZCIKK2Zvby5CYXIuX19pbml0X18KKworRG9jc3RyaW5nCisKKyIiIiwgc2lnbmF0dXJlc19pbl9ibG9jaz0zLCBmdW5jdGlvbl9pbmRleD0yKQorICAgICAgICAjIHNlbGYgaXMgbm90IGluIHRoZSBzaWduYXR1cmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiQmFyKClcbi0tXG5cbkRvY3N0cmluZyIsIGZ1bmN0aW9uLmRvY3N0cmluZykKKyAgICAgICAgIyBidXQgaXQgKmlzKiBhIHBhcmFtZXRlcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihmdW5jdGlvbi5wYXJhbWV0ZXJzKSkKKworICAgIGRlZiB0ZXN0X2lsbGVnYWxfbW9kdWxlX2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyID0+IGludAorICAgIC8KKyIiIikKKworICAgIGRlZiB0ZXN0X2lsbGVnYWxfY19iYXNlbmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIgYXMgOTM1CisgICAgLworIiIiKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3N0YXIoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgKgorICAgICoKKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfcmVxdWlyZWRfYWZ0ZXJfc3Rhcl93aXRob3V0X2luaXRpYWxfcGFyYW1ldGVyc19vcl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgKgorIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19yZXF1aXJlZF9hZnRlcl9zdGFyX3dpdGhvdXRfaW5pdGlhbF9wYXJhbWV0ZXJzX3dpdGhfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgICoKK0RvY3N0cmluZyBoZXJlLgorIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19yZXF1aXJlZF9hZnRlcl9zdGFyX3dpdGhfaW5pdGlhbF9wYXJhbWV0ZXJzX3dpdGhvdXRfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgIHRoaXM6IGludAorICAgICoKKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfcmVxdWlyZWRfYWZ0ZXJfc3Rhcl93aXRoX2luaXRpYWxfcGFyYW1ldGVyc19hbmRfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgIHRoaXM6IGludAorICAgICoKK0RvY3N0cmluZy4KKyIiIikKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9zbGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAvCisgICAgLworIiIiKQorCisgICAgZGVmIHRlc3RfbWl4X3N0YXJfYW5kX3NsYXNoKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgeDogaW50CisgICB5OiBpbnQKKyAgICoKKyAgIHo6IGludAorICAgLworIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19ub3RfcGVybWl0dGVkX2FmdGVyX3NsYXNoX2Zvcl9ub3coc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgLworICAgIHg6IGludAorIiIiKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fbm90X2F0X2NvbHVtbl8wKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCisgIG1vZHVsZSBmb28KKyAgZm9vLmJhcgorICAgIHg6IGludAorICAgICAgTmVzdGVkIGRvY3N0cmluZyBoZXJlLCBnb2V0aC4KKyAgICAqCisgICAgeTogc3RyCisgIE5vdCBhdCBjb2x1bW4gMCEKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiIKK2JhcigkbW9kdWxlLCAvLCB4LCAqLCB5KQorLS0KKworTm90IGF0IGNvbHVtbiAwIQorCisgIHgKKyAgICBOZXN0ZWQgZG9jc3RyaW5nIGhlcmUsIGdvZXRoLgorIiIiLnN0cmlwKCksIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X3BhcnNlcl9yZWdyZXNzaW9uX3NwZWNpYWxfY2hhcmFjdGVyX2luX3BhcmFtZXRlcl9jb2x1bW5fb2ZfZG9jc3RyaW5nX2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3Muc3RhdAorICAgIHBhdGg6IHN0cgorVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyEKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgic3RhdCgkbW9kdWxlLCAvLCBwYXRoKVxuLS1cblxuVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyEiLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RpdmUoc2VsZik6CisgICAgICAgIGMgPSBGYWtlQ2xpbmljKCkKKyAgICAgICAgcGFyc2VyID0gRFNMUGFyc2VyKGMpCisgICAgICAgIHBhcnNlci5mbGFnID0gRmFsc2UKKyAgICAgICAgcGFyc2VyLmRpcmVjdGl2ZXNbJ3NldGZsYWcnXSA9IGxhbWJkYSA6IHNldGF0dHIocGFyc2VyLCAnZmxhZycsIFRydWUpCisgICAgICAgIGJsb2NrID0gY2xpbmljLkJsb2NrKCJzZXRmbGFnIikKKyAgICAgICAgcGFyc2VyLnBhcnNlKGJsb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFyc2VyLmZsYWcpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfY29udmVydGVycyhzZWxmKToKKyAgICAgICAgYmxvY2sgPSBzZWxmLnBhcnNlKCdtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgcGF0aDogInMiJykKKyAgICAgICAgbW9kdWxlLCBmdW5jdGlvbiA9IGJsb2NrLnNpZ25hdHVyZXMKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKChmdW5jdGlvbi5wYXJhbWV0ZXJzWydwYXRoJ10pLmNvbnZlcnRlciwgY2xpbmljLnN0cl9jb252ZXJ0ZXIpCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgdGV4dCk6CisgICAgICAgIGMgPSBGYWtlQ2xpbmljKCkKKyAgICAgICAgcGFyc2VyID0gRFNMUGFyc2VyKGMpCisgICAgICAgIGJsb2NrID0gY2xpbmljLkJsb2NrKHRleHQpCisgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgcmV0dXJuIGJsb2NrCisKKyAgICBkZWYgcGFyc2VfZnVuY3Rpb24oc2VsZiwgdGV4dCwgc2lnbmF0dXJlc19pbl9ibG9jaz0yLCBmdW5jdGlvbl9pbmRleD0xKToKKyAgICAgICAgYmxvY2sgPSBzZWxmLnBhcnNlKHRleHQpCisgICAgICAgIHMgPSBibG9jay5zaWduYXR1cmVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaWduYXR1cmVzX2luX2Jsb2NrKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzWzBdLCBjbGluaWMuTW9kdWxlKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzW2Z1bmN0aW9uX2luZGV4XSwgY2xpbmljLkZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gc1tmdW5jdGlvbl9pbmRleF0KKworICAgIGRlZiB0ZXN0X3NjYWZmb2xkaW5nKHNlbGYpOgorICAgICAgICAjIHRlc3QgcmVwciBvbiBzcGVjaWFsIHZhbHVlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY2xpbmljLnVuc3BlY2lmaWVkKSwgJzxVbnNwZWNpZmllZD4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY2xpbmljLk5VTEwpLCAnPE51bGw+JykKKworICAgICAgICAjIHRlc3QgdGhhdCBmYWlsIGZhaWxzCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIGNsaW5pYy5mYWlsKCdUaGUgaWdsb29zIGFyZSBtZWx0aW5nIScsIGZpbGVuYW1lPSdjbG93bi50eHQnLCBsaW5lX251bWJlcj02OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0Vycm9yIGluIGZpbGUgImNsb3duLnR4dCIgb24gbGluZSA2OTpcblRoZSBpZ2xvb3MgYXJlIG1lbHRpbmchXG4nKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9jbGluaWMvY3BwLnB5IGIvVG9vbHMvY2xpbmljL2NwcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDk5NTkwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvY2xpbmljL2NwcC5weQpAQCAtMCwwICsxLDE5MSBAQAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCisKK2RlZiBuZWdhdGUoY29uZGl0aW9uKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGEgQ1BQIGNvbmRpdGlvbmFsIHRoYXQgaXMgdGhlIG9wcG9zaXRlIG9mIHRoZSBjb25kaXRpb25hbCBwYXNzZWQgaW4uCisgICAgIiIiCisgICAgaWYgY29uZGl0aW9uLnN0YXJ0c3dpdGgoJyEnKToKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvblsxOl0KKyAgICByZXR1cm4gIiEiICsgY29uZGl0aW9uCisKK2NsYXNzIE1vbml0b3I6CisgICAgIiIiCisgICAgQSBzaW1wbGUgQyBwcmVwcm9jZXNzb3IgdGhhdCBzY2FucyBDIHNvdXJjZSBhbmQgY29tcHV0ZXMsIGxpbmUgYnkgbGluZSwKKyAgICB3aGF0IHRoZSBjdXJyZW50IEMgcHJlcHJvY2Vzc29yICNpZiBzdGF0ZSBpcy4KKworICAgIERvZXNuJ3QgaGFuZGxlIGV2ZXJ5dGhpbmctLWZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSAvKiBpbnNpZGUgYSBDIHN0cmluZywKKyAgICB3aXRob3V0IGEgbWF0Y2hpbmcgKi8gKGFsc28gaW5zaWRlIGEgQyBzdHJpbmcpLCBvciB3aXRoIGEgKi8gaW5zaWRlIGEgQworICAgIHN0cmluZyBidXQgb24gYW5vdGhlciBsaW5lIGFuZCB3aXRoIHByZXByb2Nlc3NvciBtYWNyb3MgaW4gYmV0d2Vlbi4uLgorICAgIHRoZSBwYXJzZXIgd2lsbCBnZXQgbG9zdC4KKworICAgIEFueXdheSB0aGlzIGltcGxlbWVudGF0aW9uIHNlZW1zIHRvIHdvcmsgd2VsbCBlbm91Z2ggZm9yIHRoZSBDUHl0aG9uIHNvdXJjZXMuCisgICAgIiIiCisKKyAgICBpc19hX3NpbXBsZV9kZWZpbmVkID0gcmUuY29tcGlsZShyJ15kZWZpbmVkXHMqXChccypbQS1aYS16MC05X10rXHMqXCkkJykubWF0Y2gKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT1Ob25lLCAqLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgICAgc2VsZi5zdGFjayA9IFtdCisgICAgICAgIHNlbGYuaW5fY29tbWVudCA9IEZhbHNlCisgICAgICAgIHNlbGYuY29udGludWF0aW9uID0gTm9uZQorICAgICAgICBzZWxmLmxpbmVfbnVtYmVyID0gMAorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi52ZXJib3NlID0gdmVyYm9zZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJycuam9pbigoCisgICAgICAgICAgICAnPE1vbml0b3IgJywKKyAgICAgICAgICAgIHN0cihpZChzZWxmKSksCisgICAgICAgICAgICAiIGxpbmU9Iiwgc3RyKHNlbGYubGluZV9udW1iZXIpLAorICAgICAgICAgICAgIiBjb25kaXRpb249IiwgcmVwcihzZWxmLmNvbmRpdGlvbigpKSwKKyAgICAgICAgICAgICI+IikpCisKKyAgICBkZWYgc3RhdHVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYubGluZV9udW1iZXIpLnJqdXN0KDQpICsgIjogIiArIHNlbGYuY29uZGl0aW9uKCkKKworICAgIGRlZiBjb25kaXRpb24oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IHByZXByb2Nlc3NvciBzdGF0ZSwgYXMgYSBzaW5nbGUgI2lmIGNvbmRpdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiICYmICIuam9pbihjb25kaXRpb24gZm9yIHRva2VuLCBjb25kaXRpb24gaW4gc2VsZi5zdGFjaykKKworICAgIGRlZiBmYWlsKHNlbGYsICphKToKKyAgICAgICAgaWYgc2VsZi5maWxlbmFtZToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gIiAiICsgc2VsZi5maWxlbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZW5hbWUgPSAnJworICAgICAgICBwcmludCgiRXJyb3IgYXQiICsgZmlsZW5hbWUsICJsaW5lIiwgc2VsZi5saW5lX251bWJlciwgIjoiKQorICAgICAgICBwcmludCgiICAgIiwgJyAnLmpvaW4oc3RyKHgpIGZvciB4IGluIGEpKQorICAgICAgICBzeXMuZXhpdCgtMSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdGFjazoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRW5kZWQgZmlsZSB3aGlsZSBzdGlsbCBpbiBhIHByZXByb2Nlc3NvciBjb25kaXRpb25hbCBibG9jayEiKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHMpOgorICAgICAgICBmb3IgbGluZSBpbiBzLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgc2VsZi53cml0ZWxpbmUobGluZSkKKworICAgIGRlZiB3cml0ZWxpbmUoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYubGluZV9udW1iZXIgKz0gMQorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisKKyAgICAgICAgZGVmIHBvcF9zdGFjaygpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuc3RhY2s6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIjIiArIHRva2VuICsgIiB3aXRob3V0IG1hdGNoaW5nICNpZiAvICNpZmRlZiAvICNpZm5kZWYhIikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN0YWNrLnBvcCgpCisKKyAgICAgICAgaWYgc2VsZi5jb250aW51YXRpb246CisgICAgICAgICAgICBsaW5lID0gc2VsZi5jb250aW51YXRpb24gKyBsaW5lCisgICAgICAgICAgICBzZWxmLmNvbnRpbnVhdGlvbiA9IE5vbmUKKworICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoJ1xcJyk6CisgICAgICAgICAgICBzZWxmLmNvbnRpbnVhdGlvbiA9IGxpbmVbOi0xXS5yc3RyaXAoKSArICIgIgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyB3ZSBoYXZlIHRvIGlnbm9yZSBwcmVwcm9jZXNzb3IgY29tbWFuZHMgaW5zaWRlIGNvbW1lbnRzCisgICAgICAgICMKKyAgICAgICAgIyB3ZSBhbHNvIGhhdmUgdG8gaGFuZGxlIHRoaXM6CisgICAgICAgICMgICAgIC8qIHN0YXJ0CisgICAgICAgICMgICAgIC4uLgorICAgICAgICAjICAgICAqLyAgIC8qICAgIDwtLSB0cmlja3khCisgICAgICAgICMgICAgIC4uLgorICAgICAgICAjICAgICAqLworICAgICAgICAjIGFuZCB0aGlzOgorICAgICAgICAjICAgICAvKiBzdGFydAorICAgICAgICAjICAgICAuLi4KKyAgICAgICAgIyAgICAgKi8gICAvKiBhbHNvIHRyaWNreSEgKi8KKyAgICAgICAgaWYgc2VsZi5pbl9jb21tZW50OgorICAgICAgICAgICAgaWYgJyovJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICMgc25pcCBvdXQgdGhlIGNvbW1lbnQgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgR0NDIGFsbG93cworICAgICAgICAgICAgICAgICMgICAgLyogY29tbWVudAorICAgICAgICAgICAgICAgICMgICAgKi8gI2luY2x1ZGUgPHN0ZGlvLmg+CisgICAgICAgICAgICAgICAgIyBtYXliZSBvdGhlciBjb21waWxlcnMgdG9vPworICAgICAgICAgICAgICAgIF8sIF8sIGxpbmUgPSBsaW5lLnBhcnRpdGlvbignKi8nKQorICAgICAgICAgICAgICAgIHNlbGYuaW5fY29tbWVudCA9IEZhbHNlCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGlmICcvKicgaW4gbGluZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmluX2NvbW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTmVzdGVkIGJsb2NrIGNvbW1lbnQhIikKKworICAgICAgICAgICAgICAgIGJlZm9yZSwgXywgcmVtYWluZGVyID0gbGluZS5wYXJ0aXRpb24oJy8qJykKKyAgICAgICAgICAgICAgICBjb21tZW50LCBjb21tZW50X2VuZHMsIGFmdGVyID0gcmVtYWluZGVyLnBhcnRpdGlvbignKi8nKQorICAgICAgICAgICAgICAgIGlmIGNvbW1lbnRfZW5kczoKKyAgICAgICAgICAgICAgICAgICAgIyBzbmlwIG91dCB0aGUgY29tbWVudAorICAgICAgICAgICAgICAgICAgICBsaW5lID0gYmVmb3JlLnJzdHJpcCgpICsgJyAnICsgYWZ0ZXIubHN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIGNvbW1lbnQgY29udGludWVzIHRvIGVvbAorICAgICAgICAgICAgICAgIHNlbGYuaW5fY29tbWVudCA9IFRydWUKKyAgICAgICAgICAgICAgICBsaW5lID0gYmVmb3JlLnJzdHJpcCgpCisgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgd2UgYWN0dWFsbHkgaGF2ZSBzb21lIC8vIGNvbW1lbnRzCisgICAgICAgICMgKGJ1dCBibG9jayBjb21tZW50cyB0YWtlIHByZWNlZGVuY2UpCisgICAgICAgIGJlZm9yZSwgbGluZV9jb21tZW50LCBjb21tZW50ID0gbGluZS5wYXJ0aXRpb24oJy8vJykKKyAgICAgICAgaWYgbGluZV9jb21tZW50OgorICAgICAgICAgICAgbGluZSA9IGJlZm9yZS5yc3RyaXAoKQorCisgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGxpbmUgPSBsaW5lWzE6XS5sc3RyaXAoKQorICAgICAgICBhc3NlcnQgbGluZQorCisgICAgICAgIGZpZWxkcyA9IGxpbmUuc3BsaXQoKQorICAgICAgICB0b2tlbiA9IGZpZWxkc1swXS5sb3dlcigpCisgICAgICAgIGNvbmRpdGlvbiA9ICcgJy5qb2luKGZpZWxkc1sxOl0pLnN0cmlwKCkKKworICAgICAgICBpZl90b2tlbnMgPSB7J2lmJywgJ2lmZGVmJywgJ2lmbmRlZid9CisgICAgICAgIGFsbF90b2tlbnMgPSBpZl90b2tlbnMgfCB7J2VsaWYnLCAnZWxzZScsICdlbmRpZid9CisKKyAgICAgICAgaWYgdG9rZW4gbm90IGluIGFsbF90b2tlbnM6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGNoZWF0IGEgbGl0dGxlIGhlcmUsIHRvIHJldXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBpZgorICAgICAgICBpZiB0b2tlbiA9PSAnZWxpZic6CisgICAgICAgICAgICBwb3Bfc3RhY2soKQorICAgICAgICAgICAgdG9rZW4gPSAnaWYnCisKKyAgICAgICAgaWYgdG9rZW4gaW4gaWZfdG9rZW5zOgorICAgICAgICAgICAgaWYgbm90IGNvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkludmFsaWQgZm9ybWF0IGZvciAjIiArIHRva2VuICsgIiBsaW5lOiBubyBhcmd1bWVudCEiKQorICAgICAgICAgICAgaWYgdG9rZW4gPT0gJ2lmJzoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5pc19hX3NpbXBsZV9kZWZpbmVkKGNvbmRpdGlvbik6CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9ICIoIiArIGNvbmRpdGlvbiArICIpIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWVsZHMgPSBjb25kaXRpb24uc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihmaWVsZHMpICE9IDE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiSW52YWxpZCBmb3JtYXQgZm9yICMiICsgdG9rZW4gKyAiIGxpbmU6IHNob3VsZCBiZSBleGFjdGx5IG9uZSBhcmd1bWVudCEiKQorICAgICAgICAgICAgICAgIHN5bWJvbCA9IGZpZWxkc1swXQorICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9ICdkZWZpbmVkKCcgKyBzeW1ib2wgKyAnKScKKyAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAnaWZuZGVmJzoKKyAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uID0gJyEnICsgY29uZGl0aW9uCisKKyAgICAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKCgiaWYiLCBjb25kaXRpb24pKQorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KHNlbGYuc3RhdHVzKCkpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwcmV2aW91c190b2tlbiwgcHJldmlvdXNfY29uZGl0aW9uID0gcG9wX3N0YWNrKCkKKworICAgICAgICBpZiB0b2tlbiA9PSAnZWxzZSc6CisgICAgICAgICAgICBzZWxmLnN0YWNrLmFwcGVuZCgoJ2Vsc2UnLCBuZWdhdGUocHJldmlvdXNfY29uZGl0aW9uKSkpCisgICAgICAgIGVsaWYgdG9rZW4gPT0gJ2VuZGlmJzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoc2VsZi5zdGF0dXMoKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmb3IgZmlsZW5hbWUgaW4gc3lzLmFyZ3ZbMTpdOgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJydCIpIGFzIGY6CisgICAgICAgICAgICBjcHAgPSBNb25pdG9yKGZpbGVuYW1lLCB2ZXJib3NlPVRydWUpCisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChmaWxlbmFtZSkKKyAgICAgICAgICAgIGZvciBsaW5lX251bWJlciwgbGluZSBpbiBlbnVtZXJhdGUoZi5yZWFkKCkuc3BsaXQoJ1xuJyksIDEpOgorICAgICAgICAgICAgICAgIGNwcC53cml0ZWxpbmUobGluZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkgYi9Ub29scy9mcmVlemUvYmtmaWxlLnB5CmluZGV4IDBlODk1ZjIuLjU4MjQ2ZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkKKysrIGIvVG9vbHMvZnJlZXplL2JrZmlsZS5weQpAQCAtNywxMSArNywxMSBAQAogICAgICAgICBzZWxmLl9fYmFja3VwID0gZmlsZSArICd+JwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fX2JhY2t1cCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKGZpbGUsIHNlbGYuX19iYWNrdXApCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLl9fYmFja3VwID0gTm9uZQogICAgICAgICBzZWxmLl9fZmlsZSA9IF9vcmlnX29wZW4oZmlsZSwgbW9kZSwgYnVmc2l6ZSkKICAgICAgICAgc2VsZi5jbG9zZWQgPSBzZWxmLl9fZmlsZS5jbG9zZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkgYi9Ub29scy9mcmVlemUvZnJlZXplLnB5CmluZGV4IGE0MTI2N2EuLjQ3OWNhM2MgMTAwNzU1Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkKKysrIGIvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgIyBkZWZhdWx0IHRoZSBleGNsdWRlIGxpc3QgZm9yIGVhY2ggcGxhdGZvcm0KICAgICBpZiB3aW46IGV4Y2x1ZGUgPSBleGNsdWRlICsgWwogICAgICAgICAnZG9zJywgJ2Rvc3BhdGgnLCAnbWFjJywgJ21hY3BhdGgnLCAnbWFjZnMnLCAnTUFDRlMnLCAncG9zaXgnLAotICAgICAgICAnb3MyJywgJ2NlJywKKyAgICAgICAgJ2NlJywKICAgICAgICAgXQogCiAgICAgZmFpbF9pbXBvcnQgPSBleGNsdWRlWzpdCkBAIC0zMTEsNyArMzExLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MubWtkaXIob2RpcikKICAgICAgICAgICAgIHByaW50KCJDcmVhdGVkIG91dHB1dCBkaXJlY3RvcnkiLCBvZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICB1c2FnZSgnJXM6IG1rZGlyIGZhaWxlZCAoJXMpJyAlIChvZGlyLCBzdHIobXNnKSkpCiAgICAgYmFzZSA9ICcnCiAgICAgaWYgb2RpcjoKZGlmZiAtLWdpdCBhL1Rvb2xzL2dkYi9saWJweXRob24ucHkgYi9Ub29scy9nZGIvbGlicHl0aG9uLnB5CmluZGV4IDFjMmMzY2IuLjJhZDIyZTIgMTAwNzU1Ci0tLSBhL1Rvb2xzL2dkYi9saWJweXRob24ucHkKKysrIGIvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQpAQCAtOTM5LDIxICs5MzksMjYgQEAKIGNsYXNzIFB5U2V0T2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKICAgICBfdHlwZW5hbWUgPSAnUHlTZXRPYmplY3QnCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2R1bW15X2tleShzZWxmKToKKyAgICAgICAgcmV0dXJuIGdkYi5sb29rdXBfZ2xvYmFsX3N5bWJvbCgnX1B5U2V0X0R1bW15JykudmFsdWUoKQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBkdW1teV9wdHIgPSBzZWxmLl9kdW1teV9rZXkoKQorICAgICAgICB0YWJsZSA9IHNlbGYuZmllbGQoJ3RhYmxlJykKKyAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmZpZWxkKCdtYXNrJykgKyAxKToKKyAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KKyAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQorICAgICAgICAgICAgaWYga2V5ICE9IDAgYW5kIGtleSAhPSBkdW1teV9wdHI6CisgICAgICAgICAgICAgICAgeWllbGQgUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoa2V5KQorCiAgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgogICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CiAgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CiAgICAgICAgICAgICByZXR1cm4gUHJveHlBbHJlYWR5VmlzaXRlZCgnJXMoLi4uKScgJSBzZWxmLnNhZmVfdHBfbmFtZSgpKQogICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKIAotICAgICAgICBtZW1iZXJzID0gW10KLSAgICAgICAgdGFibGUgPSBzZWxmLmZpZWxkKCd0YWJsZScpCi0gICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5maWVsZCgnbWFzaycpKzEpOgotICAgICAgICAgICAgc2V0ZW50cnkgPSB0YWJsZVtpXQotICAgICAgICAgICAga2V5ID0gc2V0ZW50cnlbJ2tleSddCi0gICAgICAgICAgICBpZiBrZXkgIT0gMDoKLSAgICAgICAgICAgICAgICBrZXlfcHJveHkgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihrZXkpLnByb3h5dmFsKHZpc2l0ZWQpCi0gICAgICAgICAgICAgICAgaWYga2V5X3Byb3h5ICE9ICc8ZHVtbXkga2V5Pic6Ci0gICAgICAgICAgICAgICAgICAgIG1lbWJlcnMuYXBwZW5kKGtleV9wcm94eSkKKyAgICAgICAgbWVtYmVycyA9IChrZXkucHJveHl2YWwodmlzaXRlZCkgZm9yIGtleSBpbiBzZWxmKQogICAgICAgICBpZiBzZWxmLnNhZmVfdHBfbmFtZSgpID09ICdmcm96ZW5zZXQnOgogICAgICAgICAgICAgcmV0dXJuIGZyb3plbnNldChtZW1iZXJzKQogICAgICAgICBlbHNlOgpAQCAtOTgyLDE4ICs5ODcsMTEgQEAKIAogICAgICAgICBvdXQud3JpdGUoJ3snKQogICAgICAgICBmaXJzdCA9IFRydWUKLSAgICAgICAgdGFibGUgPSBzZWxmLmZpZWxkKCd0YWJsZScpCi0gICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5maWVsZCgnbWFzaycpKzEpOgotICAgICAgICAgICAgc2V0ZW50cnkgPSB0YWJsZVtpXQotICAgICAgICAgICAga2V5ID0gc2V0ZW50cnlbJ2tleSddCi0gICAgICAgICAgICBpZiBrZXkgIT0gMDoKLSAgICAgICAgICAgICAgICBweW9wX2tleSA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGtleSkKLSAgICAgICAgICAgICAgICBrZXlfcHJveHkgPSBweW9wX2tleS5wcm94eXZhbCh2aXNpdGVkKSAjIEZJWE1FIQotICAgICAgICAgICAgICAgIGlmIGtleV9wcm94eSAhPSAnPGR1bW15IGtleT4nOgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmlyc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoJywgJykKLSAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBweW9wX2tleS53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmOgorICAgICAgICAgICAgaWYgbm90IGZpcnN0OgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICAgICAga2V5LndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQogICAgICAgICBvdXQud3JpdGUoJ30nKQogCiAgICAgICAgIGlmIHRwX25hbWUgIT0gJ3NldCc6CkBAIC0xMTc3LDcgKzExNzUsOSBAQAogICAgICAgICAjIENvbnZlcnQgdGhlIGludCBjb2RlIHBvaW50cyB0byB1bmljb2RlIGNoYXJhY3RlcnMsIGFuZCBnZW5lcmF0ZSBhCiAgICAgICAgICMgbG9jYWwgdW5pY29kZSBpbnN0YW5jZS4KICAgICAgICAgIyBUaGlzIHNwbGl0cyBzdXJyb2dhdGUgcGFpcnMgaWYgc2l6ZW9mKFB5X1VOSUNPREUpIGlzIDIgaGVyZSAoaW4gZ2RiKS4KLSAgICAgICAgcmVzdWx0ID0gdScnLmpvaW4oW191bmljaHIodWNzKSBmb3IgdWNzIGluIFB5X1VOSUNPREVzXSkKKyAgICAgICAgcmVzdWx0ID0gdScnLmpvaW4oWworICAgICAgICAgICAgKF91bmljaHIodWNzKSBpZiB1Y3MgPD0gMHgxMGZmZmYgZWxzZSAnXHVmZmZkJykKKyAgICAgICAgICAgIGZvciB1Y3MgaW4gUHlfVU5JQ09ERXNdKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkgYi9Ub29scy9pMThuL21ha2Vsb2NhbGVhbGlhcy5weQppbmRleCA4YjkyYWUxLi4xMDg4N2NlIDEwMDc1NQotLS0gYS9Ub29scy9pMThuL21ha2Vsb2NhbGVhbGlhcy5weQorKysgYi9Ub29scy9pMThuL21ha2Vsb2NhbGVhbGlhcy5weQpAQCAtNyw2ICs3LDcgQEAKIAogIiIiCiBpbXBvcnQgbG9jYWxlCitpbXBvcnQgc3lzCiAKICMgTG9jYXRpb24gb2YgdGhlIGFsaWFzIGZpbGUKIExPQ0FMRV9BTElBUyA9ICcvdXNyL3NoYXJlL1gxMS9sb2NhbGUvbG9jYWxlLmFsaWFzJwpAQCAtNjUsOSArNjYsMzUgQEAKICAgICAgICAgICAgICAgICAgIChrLCBvbGRkYXRhW2tdLCBkYXRhW2tdKSkKICAgICAgICAgIyBBZGRpdGlvbnMgYXJlIG5vdCBtZW50aW9uZWQKIAorZGVmIG9wdGltaXplKGRhdGEpOgorICAgIGxvY2FsZV9hbGlhcyA9IGxvY2FsZS5sb2NhbGVfYWxpYXMKKyAgICBsb2NhbGUubG9jYWxlX2FsaWFzID0gZGF0YS5jb3B5KCkKKyAgICBmb3IgaywgdiBpbiBkYXRhLml0ZW1zKCk6CisgICAgICAgIGRlbCBsb2NhbGUubG9jYWxlX2FsaWFzW2tdCisgICAgICAgIGlmIGxvY2FsZS5ub3JtYWxpemUoaykgIT0gdjoKKyAgICAgICAgICAgIGxvY2FsZS5sb2NhbGVfYWxpYXNba10gPSB2CisgICAgbmV3ZGF0YSA9IGxvY2FsZS5sb2NhbGVfYWxpYXMKKyAgICBlcnJvcnMgPSBjaGVjayhkYXRhKQorICAgIGxvY2FsZS5sb2NhbGVfYWxpYXMgPSBsb2NhbGVfYWxpYXMKKyAgICBpZiBlcnJvcnM6CisgICAgICAgIHN5cy5leGl0KDEpCisgICAgcmV0dXJuIG5ld2RhdGEKKworZGVmIGNoZWNrKGRhdGEpOgorICAgICMgQ2hlY2sgdGhhdCBhbGwgYWxpYXMgZGVmaW5pdGlvbnMgZnJvbSB0aGUgWDExIGZpbGUKKyAgICAjIGFyZSBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGNvcnJlY3QgYWxpYXMgbG9jYWxlcy4KKyAgICBlcnJvcnMgPSAwCisgICAgZm9yIGssIHYgaW4gZGF0YS5pdGVtcygpOgorICAgICAgICBpZiBsb2NhbGUubm9ybWFsaXplKGspICE9IHY6CisgICAgICAgICAgICBwcmludCgnRVJST1I6ICVhIC0+ICVhICE9ICVhJyAlIChrLCBsb2NhbGUubm9ybWFsaXplKGspLCB2KSwKKyAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIGVycm9ycyArPSAxCisgICAgcmV0dXJuIGVycm9ycworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGRhdGEgPSBsb2NhbGUubG9jYWxlX2FsaWFzLmNvcHkoKQogICAgIGRhdGEudXBkYXRlKHBhcnNlKExPQ0FMRV9BTElBUykpCisgICAgZGF0YSA9IG9wdGltaXplKGRhdGEpCiAgICAgcHJpbnRfZGlmZmVyZW5jZXMoZGF0YSwgbG9jYWxlLmxvY2FsZV9hbGlhcykKICAgICBwcmludCgpCiAgICAgcHJpbnQoJ2xvY2FsZV9hbGlhcyA9IHsnKQpkaWZmIC0tZ2l0IGEvVG9vbHMvaTE4bi9tc2dmbXQucHkgYi9Ub29scy9pMThuL21zZ2ZtdC5weQppbmRleCBjZDkwNjkxLi5iMDc1MWExIDEwMDc1NQotLS0gYS9Ub29scy9pMThuL21zZ2ZtdC5weQorKysgYi9Ub29scy9pMThuL21zZ2ZtdC5weQpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICAgIGlmIG9wdCBpbiAoJy1oJywgJy0taGVscCcpOgogICAgICAgICAgICAgdXNhZ2UoMCkKICAgICAgICAgZWxpZiBvcHQgaW4gKCctVicsICctLXZlcnNpb24nKToKLSAgICAgICAgICAgIHByaW50KCJtc2dmbXQucHkiLCBfX3ZlcnNpb25fXywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgcHJpbnQoIm1zZ2ZtdC5weSIsIF9fdmVyc2lvbl9fKQogICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAgZWxpZiBvcHQgaW4gKCctbycsICctLW91dHB1dC1maWxlJyk6CiAgICAgICAgICAgICBvdXRmaWxlID0gYXJnCmRpZmYgLS1naXQgYS9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weSBiL1Rvb2xzL2ltcG9ydGJlbmNoL2ltcG9ydGJlbmNoLnB5CmluZGV4IDcxNGMwZTQuLjYzNWRkNTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ltcG9ydGJlbmNoL2ltcG9ydGJlbmNoLnB5CisrKyBiL1Rvb2xzL2ltcG9ydGJlbmNoL2ltcG9ydGJlbmNoLnB5CkBAIC00Niw4ICs0Niw3IEBACiAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gJycKICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKQogCiAKIGRlZiBidWlsdGluX21vZChzZWNvbmRzLCByZXBlYXQpOgpAQCAtNTYsOSArNTUsOCBAQAogICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQogICAgICMgUmVseWluZyBvbiBidWlsdC1pbiBpbXBvcnRlciBiZWluZyBpbXBsaWNpdC4KLSAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgeWllbGQgcmVzdWx0CisgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcykKIAogCiBkZWYgc291cmNlX3dvX2J5dGVjb2RlKHNlY29uZHMsIHJlcGVhdCk6CkBAIC03Myw5ICs3MSw4IEBACiAgICAgICAgICAgICBsb2FkZXIgPSAoaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTLCBUcnVlKQogICAgICAgICAgICAgc3lzLnBhdGhfaG9va3MuYXBwZW5kKGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2sobG9hZGVyKSkKLSAgICAgICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAgICAgZmluYWxseToKICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQogCkBAIC04OSw5ICs4Niw4IEBACiAgICAgICAgICAgICBvcy51bmxpbmsoYnl0ZWNvZGVfcGF0aCkKICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCiAKQEAgLTEyNyw4ICsxMjMsNyBAQAogICAgICAgICBkZWYgY2xlYW51cCgpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXMucG9wKG5hbWUpCiAgICAgICAgICAgICBvcy51bmxpbmsoaW1wLmNhY2hlX2Zyb21fc291cmNlKG1vZHVsZS5fX2ZpbGVfXykpCi0gICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgY2xlYW51cCwgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGNsZWFudXAsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcykKIAogICAgIHdyaXRpbmdfYnl0ZWNvZGVfYmVuY2htYXJrLl9fZG9jX18gPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdfYnl0ZWNvZGVfYmVuY2htYXJrLl9fZG9jX18uZm9ybWF0KG5hbWUpKQpAQCAtMTQ4LDkgKzE0Myw4IEBACiAgICAgICAgIHN5cy5wYXRoX2hvb2tzLmFwcGVuZChpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKGxvYWRlcikpCiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nW25hbWVdKQogICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbbmFtZV0pKQotICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAKIAogZGVmIF91c2luZ19ieXRlY29kZShtb2R1bGUpOgpAQCAtMTU4LDkgKzE1Miw4IEBACiAgICAgZGVmIHVzaW5nX2J5dGVjb2RlX2JlbmNobWFyayhzZWNvbmRzLCByZXBlYXQpOgogICAgICAgICAiIiJTb3VyY2Ugdy8gYnl0ZWNvZGU6IHt9IiIiCiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtb2R1bGUuX19maWxlX18pCi0gICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcykKIAogICAgIHVzaW5nX2J5dGVjb2RlX2JlbmNobWFyay5fX2RvY19fID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ19ieXRlY29kZV9iZW5jaG1hcmsuX19kb2NfXy5mb3JtYXQobmFtZSkpCmRpZmYgLS1naXQgYS9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkgYi9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkKaW5kZXggNTMwYmM3OS4uNzEyZTU4NCAxMDA2NDQKLS0tIGEvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5CisrKyBiL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weQpAQCAtMjQsNiArMjQsOCBAQAogICAgIHRyeToKICAgICAgICAgcmV0dXJuIG9wZW4oZm4sIG1vZGUsIGVuY29kaW5nPWVuY29kaW5nIG9yIFRFWFRfRU5DT0RJTkcpCiAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgaWYgJ3InIGluIG1vZGU6CisgICAgICAgICAgICBtb2RlICs9ICdVJyAjICdVJyBtb2RlIGlzIG5lZWRlZCBvbmx5IGluIFB5dGhvbiAyLngKICAgICAgICAgcmV0dXJuIG9wZW4oZm4sIG1vZGUpCiAKIGRlZiBnZXRfZmlsZV9zaXplcygpOgpAQCAtMzgwLDcgKzM4Miw3IEBACiAgICAgICAgICAgICBmLndyaXRlKG9zLnVyYW5kb20oc2l6ZSkpCiAgICAgIyBUZXh0IGZpbGVzCiAgICAgY2h1bmsgPSBbXQotICAgIHdpdGggdGV4dF9vcGVuKF9fZmlsZV9fLCAiclUiLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CisgICAgd2l0aCB0ZXh0X29wZW4oX19maWxlX18sICJyIiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgogICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIjIDxpb2JlbmNoIHRleHQgY2h1bmsgbWFya2VyPiIpOgogICAgICAgICAgICAgICAgIGJyZWFrCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbXNpLnB5IGIvVG9vbHMvbXNpL21zaS5weQppbmRleCA1ZWQwMjVkLi5lODE2YzhhIDEwMDY0NAotLS0gYS9Ub29scy9tc2kvbXNpLnB5CisrKyBiL1Rvb2xzL21zaS9tc2kucHkKQEAgLTk5LDcgKzk5LDkgQEAKICAgICAnX211bHRpcHJvY2Vzc2luZy5weWQnLAogICAgICdfbHptYS5weWQnLAogICAgICdfZGVjaW1hbC5weWQnLAotICAgICdfdGVzdGJ1ZmZlci5weWQnCisgICAgJ190ZXN0YnVmZmVyLnB5ZCcsCisgICAgJ190ZXN0aW1wb3J0bXVsdGlwbGUucHlkJywKKyAgICAnX292ZXJsYXBwZWQucHlkJywKIF0KIAogIyBXZWxsLWtub3duIGNvbXBvbmVudCBVVUlEcwpAQCAtMTE5LDYgKzEyMSw3IEBACiAgICAgIjMxIjoiezRhZmNiYTBiLTEzZTQtNDdjMy1iZWJlLTQ3NzQyOGI0NjkxM30iLAogICAgICIzMiI6InszZmY5NTMxNS0xMDk2LTRkMzEtYmQ4Ni02MDFkNTQzOGFkNWV9IiwKICAgICAiMzMiOiJ7Zjc1ODFjYTQtZDM2OC00ZWVhLThmODItZDQ4YzY0YzRmMDQ3fSIsCisgICAgIjM0IjoiezdBMEM1ODEyLTI1ODMtNDBEOS1CQ0JCLUNENzQ4NUYxMTM3N30iLAogICAgIH0gW21ham9yK21pbm9yXQogCiAjIENvbXB1dGUgdGhlIG5hbWUgdGhhdCBTcGhpbnggZ2l2ZXMgdG8gdGhlIGRvY2ZpbGUKQEAgLTQxNyw2ICs0MjAsOCBAQAogCiAgICAgY29tcGlsZWFyZ3MgPSByJy1XaSAiW1RBUkdFVERJUl1MaWJcY29tcGlsZWFsbC5weSIgLWYgLXggImJhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8cHkyX3xsaWIydG8zXFx0ZXN0c3x2ZW52XFxzY3JpcHRzIiAiW1RBUkdFVERJUl1MaWIiJwogICAgIGxpYjJ0bzNhcmdzID0gcictYyAiaW1wb3J0IGxpYjJ0bzMucHlncmFtLCBsaWIydG8zLnBhdGNvbXA7bGliMnRvMy5wYXRjb21wLlBhdHRlcm5Db21waWxlcigpIicKKyAgICB1cGRhdGVwaXBhcmdzID0gcictbSBlbnN1cmVwaXAgLVUnCisgICAgcmVtb3ZlcGlwYXJncyA9IHInLW0gZW5zdXJlcGlwLl91bmluc3RhbGwnCiAgICAgIyBTZWUgIkN1c3RvbUFjdGlvbiBUYWJsZSIKICAgICBhZGRfZGF0YShkYiwgIkN1c3RvbUFjdGlvbiIsIFsKICAgICAgICAgIyBtc2lkYkN1c3RvbUFjdGlvblR5cGVGaXJzdFNlcXVlbmNlICsgbXNpZGJDdXN0b21BY3Rpb25UeXBlVGV4dERhdGEgKyBtc2lkYkN1c3RvbUFjdGlvblR5cGVQcm9wZXJ0eQpAQCAtNDMzLDYgKzQzOCw5IEBACiAgICAgICAgICgiQ29tcGlsZVB5YyIsIDE4LCAicHl0aG9uLmV4ZSIsIGNvbXBpbGVhcmdzKSwKICAgICAgICAgKCJDb21waWxlUHlvIiwgMTgsICJweXRob24uZXhlIiwgIi1PICIrY29tcGlsZWFyZ3MpLAogICAgICAgICAoIkNvbXBpbGVHcmFtbWFyIiwgMTgsICJweXRob24uZXhlIiwgbGliMnRvM2FyZ3MpLAorICAgICAgICAjIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZUluU2NyaXB0ICgxMDI0KTsgcnVuIGR1cmluZyBhY3R1YWwgaW5zdGFsbGF0aW9uCisgICAgICAgICgiVXBkYXRlUGlwIiwgMTgrMTAyNCwgInB5dGhvbi5leGUiLCB1cGRhdGVwaXBhcmdzKSwKKyAgICAgICAgKCJSZW1vdmVQaXAiLCAxOCwgInB5dGhvbi5leGUiLCByZW1vdmVwaXBhcmdzKSwKICAgICAgICAgXSkKIAogICAgICMgVUkgU2VxdWVuY2VzLCBzZWUgIkluc3RhbGxVSVNlcXVlbmNlIFRhYmxlIiwgIlVzaW5nIGEgU2VxdWVuY2UgVGFibGUiCkBAIC00NTksNyArNDY3LDcgQEAKIAogICAgICMgUHJlcGVuZCBUQVJHRVRESVIgdG8gdGhlIHN5c3RlbSBwYXRoLCBhbmQgcmVtb3ZlIGl0IG9uIHVuaW5zdGFsbC4KICAgICBhZGRfZGF0YShkYiwgIkVudmlyb25tZW50IiwKLSAgICAgICAgICAgICBbKCJQYXRoQWRkaXRpb24iLCAiPS0qUGF0aCIsICJbVEFSR0VURElSXTtbfl0iLCAiUkVHSVNUUlkucGF0aCIpXSkKKyAgICAgICAgICAgICBbKCJQYXRoQWRkaXRpb24iLCAiPS0qUGF0aCIsICJbVEFSR0VURElSXTtbVEFSR0VURElSXVNjcmlwdHM7W35dIiwgIlJFR0lTVFJZLnBhdGgiKV0pCiAKICAgICAjIEV4ZWN1dGUgU2VxdWVuY2VzCiAgICAgYWRkX2RhdGEoZGIsICJJbnN0YWxsRXhlY3V0ZVNlcXVlbmNlIiwKQEAgLTQ2OSw2ICs0NzcsMTIgQEAKICAgICAgICAgICAgICAoIlNldExhdW5jaGVyRGlyVG9XaW5kb3dzIiwgJ0xBVU5DSEVSRElSPSIiIGFuZCAnICsgc3lzMzJjb25kLCA3NTMpLAogICAgICAgICAgICAgICgiU2V0TGF1bmNoZXJEaXJUb1RhcmdldCIsICdMQVVOQ0hFUkRJUj0iIiBhbmQgbm90ICcgKyBzeXMzMmNvbmQsIDc1NCksCiAgICAgICAgICAgICAgKCJVcGRhdGVFZGl0SURMRSIsIE5vbmUsIDEwNTApLAorICAgICAgICAgICAgICMgcnVuIGNvbW1hbmQgaWYgaW5zdGFsbCBzdGF0ZSBvZiBwaXAgY2hhbmdlcyB0byBJTlNUQUxMU1RBVEVfTE9DQUwKKyAgICAgICAgICAgICAjIHJ1biBhZnRlciBJbnN0YWxsRmlsZXMKKyAgICAgICAgICAgICAoIlVwZGF0ZVBpcCIsICImcGlwX2ZlYXR1cmU9MyIsIDQwMDEpLAorICAgICAgICAgICAgICMgcmVtb3ZlIHBpcCB3aGVuIHN0YXRlIGNoYW5nZXMgdG8gSU5TVEFMTFNUQVRFX0FCU0VOVAorICAgICAgICAgICAgICMgcnVuIGJlZm9yZSBSZW1vdmVGaWxlcworICAgICAgICAgICAgICgiUmVtb3ZlUGlwIiwgIiZwaXBfZmVhdHVyZT0yIiwgMzQ5OSksCiAgICAgICAgICAgICAgKCJDb21waWxlUHljIiwgIkNPTVBJTEVBTEwiLCA2ODAwKSwKICAgICAgICAgICAgICAoIkNvbXBpbGVQeW8iLCAiQ09NUElMRUFMTCIsIDY4MDEpLAogICAgICAgICAgICAgICgiQ29tcGlsZUdyYW1tYXIiLCAiQ09NUElMRUFMTCIsIDY4MDIpLApAQCAtNzQ4LDcgKzc2Miw4IEBACiAgICAgYWR2YW5jZWQgPSBQeURpYWxvZyhkYiwgIkFkdmFuY2VkRGxnIiwgeCwgeSwgdywgaCwgbW9kYWwsIHRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBpbGVQeWMiLCAiT2siLCAiT2siKQogICAgIGFkdmFuY2VkLnRpdGxlKCJBZHZhbmNlZCBPcHRpb25zIGZvciBbUHJvZHVjdE5hbWVdIikKLSAgICAjIEEgcmFkaW8gZ3JvdXAgd2l0aCB0d28gb3B0aW9uczogYWxsdXNlcnMsIGp1c3RtZQorCisgICAgIyBBIGNoZWNrYm94IHdoZXRoZXIgdG8gYnVpbGQgcHljIGZpbGVzCiAgICAgYWR2YW5jZWQuY2hlY2tib3goIkNvbXBpbGVQeWMiLCAxMzUsIDYwLCAyMzAsIDUwLCAzLAogICAgICAgICAgICAgICAgICAgICAgICJDT01QSUxFQUxMIiwgIkNvbXBpbGUgLnB5IGZpbGVzIHRvIGJ5dGUgY29kZSBhZnRlciBpbnN0YWxsYXRpb24iLCAiT2siKQogCkBAIC04NDUsNyArODYwLDggQEAKICAgICAjIChpLmUuIGFkZGl0aW9uYWwgUHl0aG9uIGxpYnJhcmllcykgbmVlZCB0byBmb2xsb3cgdGhlIHBhcmVudCBmZWF0dXJlLgogICAgICMgRmVhdHVyZXMgdGhhdCBoYXZlIG5vIGFkdmVydGlzZW1lbnQgdHJpZ2dlciAoZS5nLiB0aGUgdGVzdCBzdWl0ZSkKICAgICAjIG11c3Qgbm90IHN1cHBvcnQgYWR2ZXJ0aXNlbWVudAotICAgIGdsb2JhbCBkZWZhdWx0X2ZlYXR1cmUsIHRjbHRrLCBodG1sZmlsZXMsIHRvb2xzLCB0ZXN0c3VpdGUsIGV4dF9mZWF0dXJlLCBwcml2YXRlX2NydCwgcHJlcGVuZF9wYXRoCisgICAgZ2xvYmFsIGRlZmF1bHRfZmVhdHVyZSwgdGNsdGssIGh0bWxmaWxlcywgdG9vbHMsIHRlc3RzdWl0ZQorICAgIGdsb2JhbCBleHRfZmVhdHVyZSwgcHJpdmF0ZV9jcnQsIHByZXBlbmRfcGF0aCwgcGlwX2ZlYXR1cmUKICAgICBkZWZhdWx0X2ZlYXR1cmUgPSBGZWF0dXJlKGRiLCAiRGVmYXVsdEZlYXR1cmUiLCAiUHl0aG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gSW50ZXJwcmV0ZXIgYW5kIExpYnJhcmllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBkaXJlY3RvcnkgPSAiVEFSR0VURElSIikKQEAgLTg2Nyw4ICs4ODMsMTQgQEAKICAgICB0b29scyA9IEZlYXR1cmUoZGIsICJUb29scyIsICJVdGlsaXR5IFNjcmlwdHMiLAogICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKSIsIDksCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yKQorICAgICMgcGlwIGluc3RhbGxhdGlvbiBpc24ndCBlbmFibGVkIGJ5IGRlZmF1bHQgdW50aWwgYSBjbGVhbiB1bmluc3RhbGwgcHJvY2VkdXJlCisgICAgIyBiZWNvbWVzIHBvc3NpYmxlCisgICAgcGlwX2ZlYXR1cmUgPSBGZWF0dXJlKGRiLCAicGlwX2ZlYXR1cmUiLCAicGlwIiwKKyAgICAgICAgICAgICAgICAgICAgIkluc3RhbGwgKG9yIHVwZ3JhZGUgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24pIHBpcCwgIgorICAgICAgICAgICAgICAgICAgICAiYSB0b29sIGZvciBpbnN0YWxsaW5nIGFuZCBtYW5hZ2luZyBQeXRob24gcGFja2FnZXMuIiwgMTEsCisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yfDgpCiAgICAgdGVzdHN1aXRlID0gRmVhdHVyZShkYiwgIlRlc3RzdWl0ZSIsICJUZXN0IHN1aXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKSIsIDExLAorICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pIiwgMTMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBkZWZhdWx0X2ZlYXR1cmUsIGF0dHJpYnV0ZXM9Mnw4KQogICAgICMgcHJlcGVuZF9wYXRoIGlzIGFuIGFkZGl0aW9uYWwgZmVhdHVyZSB3aGljaCBpcyB0byBiZSBvZmYgYnkgZGVmYXVsdC4KICAgICAjIFNpbmNlIHRoZSBkZWZhdWx0IGxldmVsIGZvciB0aGUgYWJvdmUgZmVhdHVyZXMgaXMgMSwgdGhpcyBuZWVkcyB0byBiZQpAQCAtODc2LDcgKzg5OCw3IEBACiAgICAgcHJlcGVuZF9wYXRoID0gRmVhdHVyZShkYiwgIlByZXBlbmRQYXRoIiwgIkFkZCBweXRob24uZXhlIHRvIFBhdGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgIlByZXBlbmQgW1RBUkdFVERJUl0gdG8gdGhlIHN5c3RlbSBQYXRoIHZhcmlhYmxlLiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBhbGxvd3MgeW91IHRvIHR5cGUgJ3B5dGhvbicgaW50byBhIGNvbW1hbmQgIgotICAgICAgICAgICAgICAgICAgICAgICAgInByb21wdCB3aXRob3V0IG5lZWRpbmcgdGhlIGZ1bGwgcGF0aC4iLCAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICJwcm9tcHQgd2l0aG91dCBuZWVkaW5nIHRoZSBmdWxsIHBhdGguIiwgMTUsCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBkZWZhdWx0X2ZlYXR1cmUsIGF0dHJpYnV0ZXM9Mnw4LAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKIApAQCAtOTU0LDggKzk3Niw2IEBACiAgICAgIyBBZGQgYWxsIGV4ZWN1dGFibGVzLCBpY29ucywgdGV4dCBmaWxlcyBpbnRvIHRoZSBUQVJHRVRESVIgY29tcG9uZW50CiAgICAgcm9vdCA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIE5vbmUsIHNyY2RpciwgIlRBUkdFVERJUiIsICJTb3VyY2VEaXIiKQogICAgIGRlZmF1bHRfZmVhdHVyZS5zZXRfY3VycmVudCgpCi0gICAgaWYgbm90IG1zaWxpYi5XaW42NDoKLSAgICAgICAgcm9vdC5hZGRfZmlsZSgiJXMvdzl4cG9wZW4uZXhlIiAlIFBDQlVJTEQpCiAgICAgcm9vdC5hZGRfZmlsZSgiUkVBRE1FLnR4dCIsIHNyYz0iUkVBRE1FIikKICAgICByb290LmFkZF9maWxlKCJORVdTLnR4dCIsIHNyYz0iTWlzYy9ORVdTIikKICAgICBnZW5lcmF0ZV9saWNlbnNlKCkKQEAgLTExODUsNiArMTIwNSw4IEBACiAgICAgICAgICAgICAgICAiRG9jdW1lbnRhdGlvbiIpLAogICAgICAgICAgICAgICAoIlJFR0lTVFJZLnBhdGgiLCBtc2lsaWIuZ2VuX3V1aWQoKSwgIlRBUkdFVERJUiIsIHJlZ2lzdHJ5X2NvbXBvbmVudCwgTm9uZSwKICAgICAgICAgICAgICAgTm9uZSksCisgICAgICAgICAgICAgICgiUkVHSVNUUlkuZW5zdXJlcGlwIiwgbXNpbGliLmdlbl91dWlkKCksICJUQVJHRVRESVIiLCByZWdpc3RyeV9jb21wb25lbnQsICJFbnN1cmVQaXBSdW4iLAorICAgICAgICAgICAgICBOb25lKSwKICAgICAgICAgICAgICAgKCJSRUdJU1RSWS5kZWYiLCBtc2lsaWIuZ2VuX3V1aWQoKSwgIlRBUkdFVERJUiIsIHJlZ2lzdHJ5X2NvbXBvbmVudCwKICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUpXSArIHRjbGRhdGEpCiAgICAgIyBTZWUgIkZlYXR1cmVDb21wb25lbnRzIFRhYmxlIi4KQEAgLTEyMDIsNiArMTIyNCw3IEBACiAgICAgICAgICAgICAgWyhkZWZhdWx0X2ZlYXR1cmUuaWQsICJSRUdJU1RSWSIpLAogICAgICAgICAgICAgICAoaHRtbGZpbGVzLmlkLCAiUkVHSVNUUlkuZG9jIiksCiAgICAgICAgICAgICAgIChwcmVwZW5kX3BhdGguaWQsICJSRUdJU1RSWS5wYXRoIiksCisgICAgICAgICAgICAgIChwaXBfZmVhdHVyZS5pZCwgIlJFR0lTVFJZLmVuc3VyZXBpcCIpLAogICAgICAgICAgICAgICAoZXh0X2ZlYXR1cmUuaWQsICJSRUdJU1RSWS5kZWYiKV0gKwogICAgICAgICAgICAgICB0Y2xkYXRhCiAgICAgICAgICAgICAgICkKQEAgLTEyNjksNiArMTI5MiwxMCBAQAogICAgICAgICAgICAgICAiezYwMjU0Q0E1LTk1M0ItMTFDRi04Qzk2LTAwQUEwMEI4NzA4Q30iLCAiUkVHSVNUUlkuZGVmIiksCiAgICAgICAgICAgICBdKQogCisgICAgIyBQQVRIRVhUCisgICAgYWRkX2RhdGEoZGIsICJFbnZpcm9ubWVudCIsCisgICAgICAgICAgICAgWygiUGF0aEV4dEFkZGl0aW9uIiwgIj0tKlBhdGhFeHQiLCAiW35dOy5QWSIsICJSRUdJU1RSWS5kZWYiKV0pCisKICAgICAjIFJlZ2lzdHJ5IGtleXMKICAgICBwcmVmaXggPSByIlNvZnR3YXJlXCVzUHl0aG9uXFB5dGhvbkNvcmVcJXMiICUgKHRlc3RwcmVmaXgsIHNob3J0X3ZlcnNpb24pCiAgICAgYWRkX2RhdGEoZGIsICJSZWdpc3RyeSIsCkBAIC0xMjg0LDcgKzEzMTEsOSBAQAogICAgICAgICAgICAgICAgIiIsIHIiW1RBUkdFVERJUl1QeXRob24uZXhlIiwgIlJFR0lTVFJZLmRlZiIpLAogICAgICAgICAgICAgICAoIkRpc3BsYXlJY29uIiwgLTEsCiAgICAgICAgICAgICAgICByIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlcyIgJSBwcm9kdWN0X2NvZGUsCi0gICAgICAgICAgICAgICAiRGlzcGxheUljb24iLCAiW1RBUkdFVERJUl1weXRob24uZXhlIiwgIlJFR0lTVFJZIikKKyAgICAgICAgICAgICAgICJEaXNwbGF5SWNvbiIsICJbVEFSR0VURElSXXB5dGhvbi5leGUiLCAiUkVHSVNUUlkiKSwKKyAgICAgICAgICAgICAgIyBGYWtlIHJlZ2lzdHJ5IGVudHJ5IHRvIGFsbG93IGluc3RhbGxlciB0byB0cmFjayB3aGV0aGVyIGVuc3VyZXBpcCBoYXMgYmVlbiBydW4KKyAgICAgICAgICAgICAgKCJFbnN1cmVQaXBSdW4iLCAtMSwgcHJlZml4K3IiXEVuc3VyZVBpcFJ1biIsICIiLCAiIzEiLCAiUkVHSVNUUlkuZW5zdXJlcGlwIiksCiAgICAgICAgICAgICAgIF0pCiAgICAgIyBTaG9ydGN1dHMsIHNlZSAiU2hvcnRjdXQgVGFibGUiCiAgICAgYWRkX2RhdGEoZGIsICJEaXJlY3RvcnkiLApkaWZmIC0tZ2l0IGEvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkgYi9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQppbmRleCBiNTVlMmM2Li44MzdjZDgxIDEwMDY0NAotLS0gYS9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQorKysgYi9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQpAQCAtMzA3LDYgKzMwNyw5IEBACiAgICAgZGVmIF9OYW1lKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKHQuaWQpCiAKKyAgICBkZWYgX05hbWVDb25zdGFudChzZWxmLCB0KToKKyAgICAgICAgc2VsZi53cml0ZShyZXByKHQudmFsdWUpKQorCiAgICAgZGVmIF9OdW0oc2VsZiwgdCk6CiAgICAgICAgICMgU3Vic3RpdHV0ZSBvdmVyZmxvd2luZyBkZWNpbWFsIGxpdGVyYWwgZm9yIEFTVCBpbmZpbml0aWVzLgogICAgICAgICBzZWxmLndyaXRlKHJlcHIodC5uKS5yZXBsYWNlKCJpbmYiLCBJTkZTVFIpKQpAQCAtNTE1LDEwICs1MTgsMTAgQEAKICAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKICAgICAgICAgICAgIHNlbGYud3JpdGUoIioiKQogICAgICAgICAgICAgaWYgdC52YXJhcmc6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZSh0LnZhcmFyZykKLSAgICAgICAgICAgICAgICBpZiB0LnZhcmFyZ2Fubm90YXRpb246CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSh0LnZhcmFyZy5hcmcpCisgICAgICAgICAgICAgICAgaWYgdC52YXJhcmcuYW5ub3RhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFyYXJnYW5ub3RhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnZhcmFyZy5hbm5vdGF0aW9uKQogCiAgICAgICAgICMga2V5d29yZC1vbmx5IGFyZ3VtZW50cwogICAgICAgICBpZiB0Lmt3b25seWFyZ3M6CkBAIC01MzQsMTAgKzUzNywxMCBAQAogICAgICAgICBpZiB0Lmt3YXJnOgogICAgICAgICAgICAgaWYgZmlyc3Q6Zmlyc3QgPSBGYWxzZQogICAgICAgICAgICAgZWxzZTogc2VsZi53cml0ZSgiLCAiKQotICAgICAgICAgICAgc2VsZi53cml0ZSgiKioiK3Qua3dhcmcpCi0gICAgICAgICAgICBpZiB0Lmt3YXJnYW5ub3RhdGlvbjoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoIioqIit0Lmt3YXJnLmFyZykKKyAgICAgICAgICAgIGlmIHQua3dhcmcuYW5ub3RhdGlvbjoKICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCI6ICIpCi0gICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lmt3YXJnYW5ub3RhdGlvbikKKyAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQua3dhcmcuYW5ub3RhdGlvbikKIAogICAgIGRlZiBfa2V5d29yZChzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSh0LmFyZykKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvUkVBRE1FIGIvVG9vbHMvc2NyaXB0cy9SRUFETUUKaW5kZXggZDY1ZDFmZC4uYzZiMjI4MiAxMDA2NDQKLS0tIGEvVG9vbHMvc2NyaXB0cy9SRUFETUUKKysrIGIvVG9vbHMvc2NyaXB0cy9SRUFETUUKQEAgLTIsNjQgKzIsNjggQEAKIHVzZWZ1bCB3aGlsZSBidWlsZGluZywgZXh0ZW5kaW5nIG9yIG1hbmFnaW5nIFB5dGhvbi4gIFNvbWUgKGUuZy4sIGR1dHJlZSBvciBsbGwpCiBhcmUgYWxzbyBnZW5lcmFsbHkgdXNlZnVsIFVOSVggdG9vbHMuCiAKLTJ0bzMgICAgICAgICAgICAgICAgICAgIE1haW4gc2NyaXB0IGZvciBydW5uaW5nIHRoZSAydG8zIGNvbnZlcnNpb24gdG9vbAotYW5hbHl6ZV9keHAucHkgICAgICAgICAgQW5hbHl6ZXMgdGhlIHJlc3VsdCBvZiBzeXMuZ2V0ZHhwKCkKLWJ5ZXh0LnB5ICAgICAgICAgICAgICAgIFByaW50IGxpbmVzL3dvcmRzL2NoYXJzIHN0YXRzIG9mIGZpbGVzIGJ5IGV4dGVuc2lvbgotYnl0ZXllYXJzLnB5ICAgICAgICAgICAgUHJpbnQgcHJvZHVjdCBvZiBhIGZpbGUncyBzaXplIGFuZCBhZ2UKLWNoZWNrcHljLnB5ICAgICAgICAgICAgIENoZWNrIHByZXNlbmNlIGFuZCB2YWxpZGl0eSBvZiAiLnB5YyIgZmlsZXMKLWNsZWFuZnV0dXJlLnB5ICAgICAgICAgIEZpeCByZWR1bmRhbnQgUHl0aG9uIF9fZnV0dXJlX18gc3RhdGVtZW50cwotY29tYmluZXJlZnMucHkgICAgICAgICAgQSBoZWxwZXIgZm9yIGFuYWx5emluZyBQWVRIT05EVU1QUkVGUyBvdXRwdXQKLWNvcHl0aW1lLnB5ICAgICAgICAgICAgIENvcHkgb25lIGZpbGUncyBhdGltZSBhbmQgbXRpbWUgdG8gYW5vdGhlcgotY3JsZi5weSAgICAgICAgICAgICAgICAgQ2hhbmdlIENSTEYgbGluZSBlbmRpbmdzIHRvIExGIChXaW5kb3dzIHRvIFVuaXgpCi1kYjJwaWNrbGUucHkgICAgICAgICAgICBEdW1wIGEgZGF0YWJhc2UgZmlsZSB0byBhIHBpY2tsZQotZGlmZi5weSAgICAgICAgICAgICAgICAgUHJpbnQgZmlsZSBkaWZmcyBpbiBjb250ZXh0LCB1bmlmaWVkLCBvciBuZGlmZiBmb3JtYXRzCi1kdXRyZWUucHkgICAgICAgICAgICAgICBGb3JtYXQgZHUoMSkgb3V0cHV0IGFzIGEgdHJlZSBzb3J0ZWQgYnkgc2l6ZQotZXB0YWdzLnB5ICAgICAgICAgICAgICAgQ3JlYXRlIEVtYWNzIFRBR1MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKLWZpbmRfcmVjdXJzaW9ubGltaXQucHkgIEZpbmQgdGhlIG1heGltdW0gcmVjdXJzaW9uIGxpbWl0IG9uIHRoaXMgbWFjaGluZQotZmluZGRpdi5weSAgICAgICAgICAgICAgQSBncmVwLWxpa2UgdG9vbCB0aGF0IGxvb2tzIGZvciBkaXZpc2lvbiBvcGVyYXRvcnMKLWZpbmRsaW5rc3RvLnB5ICAgICAgICAgIFJlY3Vyc2l2ZWx5IGZpbmQgc3ltYm9saWMgbGlua3MgdG8gYSBnaXZlbiBwYXRoIHByZWZpeAotZmluZG5vY29kaW5nLnB5ICAgICAgICAgRmluZCBzb3VyY2UgZmlsZXMgd2hpY2ggbmVlZCBhbiBlbmNvZGluZyBkZWNsYXJhdGlvbgotZml4Y2lkLnB5ICAgICAgICAgICAgICAgTWFzc2l2ZSBpZGVudGlmaWVyIHN1YnN0aXR1dGlvbiBvbiBDIHNvdXJjZSBmaWxlcwotZml4ZGl2LnB5ICAgICAgICAgICAgICAgVG9vbCB0byBmaXggZGl2aXNpb24gb3BlcmF0b3JzLgotZml4aGVhZGVyLnB5ICAgICAgICAgICAgQWRkIHNvbWUgY3BwIG1hZ2ljIHRvIGEgQyBpbmNsdWRlIGZpbGUKLWZpeG5vdGljZS5weSAgICAgICAgICAgIEZpeCB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiBzb3VyY2UgZmlsZXMKLWZpeHBzLnB5ICAgICAgICAgICAgICAgIEZpeCBQeXRob24gc2NyaXB0cycgZmlyc3QgbGluZSAoaWYgIyEpCi1mdHBtaXJyb3IucHkgICAgICAgICAgICBGVFAgbWlycm9yIHNjcmlwdAotZ29vZ2xlLnB5ICAgICAgICAgICAgICAgT3BlbiBhIHdlYmJyb3dzZXIgd2l0aCBHb29nbGUKLWdwcm9mMmh0bWwucHkgICAgICAgICAgIFRyYW5zZm9ybSBncHJvZigxKSBvdXRwdXQgaW50byB1c2VmdWwgSFRNTAotaDJweS5weSAgICAgICAgICAgICAgICAgVHJhbnNsYXRlICNkZWZpbmUncyBpbnRvIFB5dGhvbiBhc3NpZ25tZW50cwotaGlnaGxpZ2h0LnB5ICAgICAgICAgICAgUHl0aG9uIHN5bnRheCBoaWdobGlnaHRpbmcgd2l0aCBIVE1MIG91dHB1dAotaWRsZTMgICAgICAgICAgICAgICAgICAgTWFpbiBwcm9ncmFtIHRvIHN0YXJ0IElETEUKLWlmZGVmLnB5ICAgICAgICAgICAgICAgIFJlbW92ZSAjaWYobilkZWYgZ3JvdXBzIGZyb20gQyBzb3VyY2VzCi1sZmNyLnB5ICAgICAgICAgICAgICAgICBDaGFuZ2UgTEYgbGluZSBlbmRpbmdzIHRvIENSTEYgKFVuaXggdG8gV2luZG93cykKLWxpbmt0cmVlLnB5ICAgICAgICAgICAgIE1ha2UgYSBjb3B5IG9mIGEgdHJlZSB3aXRoIGxpbmtzIHRvIG9yaWdpbmFsIGZpbGVzCi1sbGwucHkgICAgICAgICAgICAgICAgICBGaW5kIGFuZCBsaXN0IHN5bWJvbGljIGxpbmtzIGluIGN1cnJlbnQgZGlyZWN0b3J5Ci1tYWlsZXJkYWVtb24ucHkgICAgICAgICBQYXJzZSBlcnJvciBtZXNzYWdlcyBmcm9tIG1haWxlciBkYWVtb25zIChTam9lcmQmSmFjaykKLW1ha2VfY3R5cGUucHkgICAgICAgICAgIEdlbmVyYXRlIGN0eXBlLmggcmVwbGFjZW1lbnQgaW4gc3RyaW5nb2JqZWN0LmMKLW1kNXN1bS5weSAgICAgICAgICAgICAgIFByaW50IE1ENSBjaGVja3N1bXMgb2YgYXJndW1lbnQgZmlsZXMKLW1rcmVhbC5weSAgICAgICAgICAgICAgIFR1cm4gYSBzeW1ib2xpYyBsaW5rIGludG8gYSByZWFsIGZpbGUgb3IgZGlyZWN0b3J5Ci1uZGlmZi5weSAgICAgICAgICAgICAgICBJbnRlbGxpZ2VudCBkaWZmIGJldHdlZW4gdGV4dCBmaWxlcyAoVGltIFBldGVycykKLW5tMmRlZi5weSAgICAgICAgICAgICAgIENyZWF0ZSBhIHRlbXBsYXRlIGZvciBQQy9weXRob25fbnQuZGVmIChNYXJjIExlbWJ1cmcpCi1vYmpncmFwaC5weSAgICAgICAgICAgICBQcmludCBvYmplY3QgZ3JhcGggZnJvbSBubSBvdXRwdXQgb24gYSBsaWJyYXJ5Ci1wYXJzZWVudGl0aWVzLnB5ICAgICAgICBVdGlsaXR5IGZvciBwYXJzaW5nIEhUTUwgZW50aXR5IGRlZmluaXRpb25zCi1wYXRjaGNoZWNrLnB5ICAgICAgICAgICBQZXJmb3JtIGNvbW1vbiBjaGVja3MgYW5kIGNsZWFudXAgYmVmb3JlIGNvbW1pdHRpbmcKLXBhdGhmaXgucHkgICAgICAgICAgICAgIENoYW5nZSAjIS91c3IvbG9jYWwvYmluL3B5dGhvbiBpbnRvIHNvbWV0aGluZyBlbHNlCi1wZGVwcy5weSAgICAgICAgICAgICAgICBQcmludCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBQeXRob24gbW9kdWxlcwotcGlja2xlMmRiLnB5ICAgICAgICAgICAgTG9hZCBhIHBpY2tsZSBnZW5lcmF0ZWQgYnkgZGIycGlja2xlLnB5IHRvIGEgZGF0YWJhc2UKLXBpbmRlbnQucHkgICAgICAgICAgICAgIEluZGVudCBQeXRob24gY29kZSwgZ2l2aW5nIGJsb2NrLWNsb3NpbmcgY29tbWVudHMKLXB0YWdzLnB5ICAgICAgICAgICAgICAgIENyZWF0ZSB2aSB0YWdzIGZpbGUgZm9yIFB5dGhvbiBtb2R1bGVzCi1weWRvYzMgICAgICAgICAgICAgICAgICBQeXRob24gZG9jdW1lbnRhdGlvbiBicm93c2VyCi1weXNvdXJjZS5weSAgICAgICAgICAgICBGaW5kIFB5dGhvbiBzb3VyY2UgZmlsZXMKLXJlZGVtby5weSAgICAgICAgICAgICAgIEJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbiBkZW1vbnN0cmF0aW9uIGZhY2lsaXR5Ci1yZWluZGVudC5weSAgICAgICAgICAgICBDaGFuZ2UgLnB5IGZpbGVzIHRvIHVzZSA0LXNwYWNlIGluZGVudHMKLXJlaW5kZW50LXJzdC5weSAgICAgICAgIEZpeC11cCByZVN0cnVjdHVyZWRUZXh0IGZpbGUgd2hpdGVzcGFjZQotcmdyZXAucHkgICAgICAgICAgICAgICAgUmV2ZXJzZSBncmVwIHRocm91Z2ggYSBmaWxlICh1c2VmdWwgZm9yIGJpZyBsb2dmaWxlcykKLXJ1bl90ZXN0cy5weSAgICAgICAgICAgIFJ1biB0aGUgdGVzdCBzdWl0ZSB3aXRoIG1vcmUgc2Vuc2libGUgZGVmYXVsdCBvcHRpb25zCi1zZXJ2ZS5weSAgICAgICAgICAgICAgICBTbWFsbCB3c2dpcmVmLWJhc2VkIHdlYiBzZXJ2ZXIsIHVzZWQgaW4gbWFrZSBzZXJ2ZSBpbiBEb2MKLXN1ZmYucHkgICAgICAgICAgICAgICAgIFNvcnQgYSBsaXN0IG9mIGZpbGVzIGJ5IHN1ZmZpeAotc3ZuZW9sLnB5ICAgICAgICAgICAgICAgU2V0IHN2bjplb2wtc3R5bGUgb24gYWxsIGZpbGVzIGluIGRpcmVjdG9yeQotdGV4aTJodG1sLnB5ICAgICAgICAgICAgQ29udmVydCBHTlUgdGV4aW5mbyBmaWxlcyBpbnRvIEhUTUwKLXRyZWVzeW5jLnB5ICAgICAgICAgICAgIFN5bmNocm9uaXplIHNvdXJjZSB0cmVlcyAodmVyeSBpZGlvc3luY3JhdGljKQotdW50YWJpZnkucHkgICAgICAgICAgICAgUmVwbGFjZSB0YWJzIHdpdGggc3BhY2VzIGluIGFyZ3VtZW50IGZpbGVzCi13aW5fYWRkMnBhdGgucHkgICAgICAgICBBZGQgUHl0aG9uIHRvIHRoZSBzZWFyY2ggcGF0aCBvbiBXaW5kb3dzCi13aGljaC5weSAgICAgICAgICAgICAgICBGaW5kIGEgcHJvZ3JhbSBpbiAkUEFUSAorMnRvMyAgICAgICAgICAgICAgICAgICAgICBNYWluIHNjcmlwdCBmb3IgcnVubmluZyB0aGUgMnRvMyBjb252ZXJzaW9uIHRvb2wKK2FiaXR5cGUucHkgICAgICAgICAgICAgICAgQ29udmVydHMgYSBDIGZpbGUgdG8gdXNlIHRoZSBQRVAgMzg0IHR5cGUgZGVmaW5pdGlvbiBBUEkKK2FuYWx5emVfZHhwLnB5ICAgICAgICAgICAgQW5hbHl6ZXMgdGhlIHJlc3VsdCBvZiBzeXMuZ2V0ZHhwKCkKK2J5ZXh0LnB5ICAgICAgICAgICAgICAgICAgUHJpbnQgbGluZXMvd29yZHMvY2hhcnMgc3RhdHMgb2YgZmlsZXMgYnkgZXh0ZW5zaW9uCitieXRleWVhcnMucHkgICAgICAgICAgICAgIFByaW50IHByb2R1Y3Qgb2YgYSBmaWxlJ3Mgc2l6ZSBhbmQgYWdlCitjaGVja3B5Yy5weSAgICAgICAgICAgICAgIENoZWNrIHByZXNlbmNlIGFuZCB2YWxpZGl0eSBvZiAiLnB5YyIgZmlsZXMKK2NsZWFuZnV0dXJlLnB5ICAgICAgICAgICAgRml4IHJlZHVuZGFudCBQeXRob24gX19mdXR1cmVfXyBzdGF0ZW1lbnRzCitjb21iaW5lcmVmcy5weSAgICAgICAgICAgIEEgaGVscGVyIGZvciBhbmFseXppbmcgUFlUSE9ORFVNUFJFRlMgb3V0cHV0Citjb3B5dGltZS5weSAgICAgICAgICAgICAgIENvcHkgb25lIGZpbGUncyBhdGltZSBhbmQgbXRpbWUgdG8gYW5vdGhlcgorY3JsZi5weSAgICAgICAgICAgICAgICAgICBDaGFuZ2UgQ1JMRiBsaW5lIGVuZGluZ3MgdG8gTEYgKFdpbmRvd3MgdG8gVW5peCkKK2RiMnBpY2tsZS5weSAgICAgICAgICAgICAgRHVtcCBhIGRhdGFiYXNlIGZpbGUgdG8gYSBwaWNrbGUKK2RpZmYucHkgICAgICAgICAgICAgICAgICAgUHJpbnQgZmlsZSBkaWZmcyBpbiBjb250ZXh0LCB1bmlmaWVkLCBvciBuZGlmZiBmb3JtYXRzCitkdXRyZWUucHkgICAgICAgICAgICAgICAgIEZvcm1hdCBkdSgxKSBvdXRwdXQgYXMgYSB0cmVlIHNvcnRlZCBieSBzaXplCitlcHRhZ3MucHkgICAgICAgICAgICAgICAgIENyZWF0ZSBFbWFjcyBUQUdTIGZpbGUgZm9yIFB5dGhvbiBtb2R1bGVzCitmaW5kZGl2LnB5ICAgICAgICAgICAgICAgIEEgZ3JlcC1saWtlIHRvb2wgdGhhdCBsb29rcyBmb3IgZGl2aXNpb24gb3BlcmF0b3JzCitmaW5kbGlua3N0by5weSAgICAgICAgICAgIFJlY3Vyc2l2ZWx5IGZpbmQgc3ltYm9saWMgbGlua3MgdG8gYSBnaXZlbiBwYXRoIHByZWZpeAorZmluZG5vY29kaW5nLnB5ICAgICAgICAgICBGaW5kIHNvdXJjZSBmaWxlcyB3aGljaCBuZWVkIGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uCitmaW5kX3JlY3Vyc2lvbmxpbWl0LnB5ICAgIEZpbmQgdGhlIG1heGltdW0gcmVjdXJzaW9uIGxpbWl0IG9uIHRoaXMgbWFjaGluZQorZmluZC11bmFtZS5weSAgICAgICAgICAgICBMb29rIGZvciB0aGUgZ2l2ZW4gYXJndW1lbnRzIGluIHRoZSBzZXRzIG9mIGFsbCBVbmljb2RlIG5hbWVzCitmaXhjaWQucHkgICAgICAgICAgICAgICAgIE1hc3NpdmUgaWRlbnRpZmllciBzdWJzdGl0dXRpb24gb24gQyBzb3VyY2UgZmlsZXMKK2ZpeGRpdi5weSAgICAgICAgICAgICAgICAgVG9vbCB0byBmaXggZGl2aXNpb24gb3BlcmF0b3JzLgorZml4aGVhZGVyLnB5ICAgICAgICAgICAgICBBZGQgc29tZSBjcHAgbWFnaWMgdG8gYSBDIGluY2x1ZGUgZmlsZQorZml4bm90aWNlLnB5ICAgICAgICAgICAgICBGaXggdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gc291cmNlIGZpbGVzCitmaXhwcy5weSAgICAgICAgICAgICAgICAgIEZpeCBQeXRob24gc2NyaXB0cycgZmlyc3QgbGluZSAoaWYgIyEpCitmdHBtaXJyb3IucHkgICAgICAgICAgICAgIEZUUCBtaXJyb3Igc2NyaXB0CitnZXQtcmVtb3RlLWNlcnRpZmljYXRlLnB5IEZldGNoIHRoZSBjZXJ0aWZpY2F0ZSB0aGF0IHRoZSBzZXJ2ZXIocykgYXJlIHByb3ZpZGluZyBpbiBQRU0gZm9ybQorZ29vZ2xlLnB5ICAgICAgICAgICAgICAgICBPcGVuIGEgd2ViYnJvd3NlciB3aXRoIEdvb2dsZQorZ3Byb2YyaHRtbC5weSAgICAgICAgICAgICBUcmFuc2Zvcm0gZ3Byb2YoMSkgb3V0cHV0IGludG8gdXNlZnVsIEhUTUwKK2gycHkucHkgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlICNkZWZpbmUncyBpbnRvIFB5dGhvbiBhc3NpZ25tZW50cworaGlnaGxpZ2h0LnB5ICAgICAgICAgICAgICBQeXRob24gc3ludGF4IGhpZ2hsaWdodGluZyB3aXRoIEhUTUwgb3V0cHV0CitpZGxlMyAgICAgICAgICAgICAgICAgICAgIE1haW4gcHJvZ3JhbSB0byBzdGFydCBJRExFCitpZmRlZi5weSAgICAgICAgICAgICAgICAgIFJlbW92ZSAjaWYobilkZWYgZ3JvdXBzIGZyb20gQyBzb3VyY2VzCitpbXBvcnRfZGlhZ25vc3RpY3MucHkgICAgIE1pc2NlbGxhbmVvdXMgZGlhZ25vc3RpY3MgZm9yIHRoZSBpbXBvcnQgc3lzdGVtCitsZmNyLnB5ICAgICAgICAgICAgICAgICAgIENoYW5nZSBMRiBsaW5lIGVuZGluZ3MgdG8gQ1JMRiAoVW5peCB0byBXaW5kb3dzKQorbGlua3RyZWUucHkgICAgICAgICAgICAgICBNYWtlIGEgY29weSBvZiBhIHRyZWUgd2l0aCBsaW5rcyB0byBvcmlnaW5hbCBmaWxlcworbGxsLnB5ICAgICAgICAgICAgICAgICAgICBGaW5kIGFuZCBsaXN0IHN5bWJvbGljIGxpbmtzIGluIGN1cnJlbnQgZGlyZWN0b3J5CittYWlsZXJkYWVtb24ucHkgICAgICAgICAgIFBhcnNlIGVycm9yIG1lc3NhZ2VzIGZyb20gbWFpbGVyIGRhZW1vbnMgKFNqb2VyZCZKYWNrKQorbWFrZV9jdHlwZS5weSAgICAgICAgICAgICBHZW5lcmF0ZSBjdHlwZS5oIHJlcGxhY2VtZW50IGluIHN0cmluZ29iamVjdC5jCittZDVzdW0ucHkgICAgICAgICAgICAgICAgIFByaW50IE1ENSBjaGVja3N1bXMgb2YgYXJndW1lbnQgZmlsZXMKK21rcmVhbC5weSAgICAgICAgICAgICAgICAgVHVybiBhIHN5bWJvbGljIGxpbmsgaW50byBhIHJlYWwgZmlsZSBvciBkaXJlY3RvcnkKK25kaWZmLnB5ICAgICAgICAgICAgICAgICAgSW50ZWxsaWdlbnQgZGlmZiBiZXR3ZWVuIHRleHQgZmlsZXMgKFRpbSBQZXRlcnMpCitubTJkZWYucHkgICAgICAgICAgICAgICAgIENyZWF0ZSBhIHRlbXBsYXRlIGZvciBQQy9weXRob25fbnQuZGVmIChNYXJjIExlbWJ1cmcpCitvYmpncmFwaC5weSAgICAgICAgICAgICAgIFByaW50IG9iamVjdCBncmFwaCBmcm9tIG5tIG91dHB1dCBvbiBhIGxpYnJhcnkKK3BhcnNlZW50aXRpZXMucHkgICAgICAgICAgVXRpbGl0eSBmb3IgcGFyc2luZyBIVE1MIGVudGl0eSBkZWZpbml0aW9ucworcGFyc2VfaHRtbDVfZW50aXRpZXMucHkgICBVdGlsaXR5IGZvciBwYXJzaW5nIEhUTUw1IGVudGl0eSBkZWZpbml0aW9ucworcGF0Y2hjaGVjay5weSAgICAgICAgICAgICBQZXJmb3JtIGNvbW1vbiBjaGVja3MgYW5kIGNsZWFudXAgYmVmb3JlIGNvbW1pdHRpbmcKK3BhdGhmaXgucHkgICAgICAgICAgICAgICAgQ2hhbmdlICMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uIGludG8gc29tZXRoaW5nIGVsc2UKK3BkZXBzLnB5ICAgICAgICAgICAgICAgICAgUHJpbnQgZGVwZW5kZW5jaWVzIGJldHdlZW4gUHl0aG9uIG1vZHVsZXMKK3BpY2tsZTJkYi5weSAgICAgICAgICAgICAgTG9hZCBhIHBpY2tsZSBnZW5lcmF0ZWQgYnkgZGIycGlja2xlLnB5IHRvIGEgZGF0YWJhc2UKK3BpbmRlbnQucHkgICAgICAgICAgICAgICAgSW5kZW50IFB5dGhvbiBjb2RlLCBnaXZpbmcgYmxvY2stY2xvc2luZyBjb21tZW50cworcHRhZ3MucHkgICAgICAgICAgICAgICAgICBDcmVhdGUgdmkgdGFncyBmaWxlIGZvciBQeXRob24gbW9kdWxlcworcHlkb2MzICAgICAgICAgICAgICAgICAgICBQeXRob24gZG9jdW1lbnRhdGlvbiBicm93c2VyCitweXNvdXJjZS5weSAgICAgICAgICAgICAgIEZpbmQgUHl0aG9uIHNvdXJjZSBmaWxlcworcmVpbmRlbnQucHkgICAgICAgICAgICAgICBDaGFuZ2UgLnB5IGZpbGVzIHRvIHVzZSA0LXNwYWNlIGluZGVudHMKK3JlaW5kZW50LXJzdC5weSAgICAgICAgICAgRml4LXVwIHJlU3RydWN0dXJlZFRleHQgZmlsZSB3aGl0ZXNwYWNlCityZ3JlcC5weSAgICAgICAgICAgICAgICAgIFJldmVyc2UgZ3JlcCB0aHJvdWdoIGEgZmlsZSAodXNlZnVsIGZvciBiaWcgbG9nZmlsZXMpCitydW5fdGVzdHMucHkgICAgICAgICAgICAgIFJ1biB0aGUgdGVzdCBzdWl0ZSB3aXRoIG1vcmUgc2Vuc2libGUgZGVmYXVsdCBvcHRpb25zCitzZXJ2ZS5weSAgICAgICAgICAgICAgICAgIFNtYWxsIHdzZ2lyZWYtYmFzZWQgd2ViIHNlcnZlciwgdXNlZCBpbiBtYWtlIHNlcnZlIGluIERvYworc3VmZi5weSAgICAgICAgICAgICAgICAgICBTb3J0IGEgbGlzdCBvZiBmaWxlcyBieSBzdWZmaXgKK3N2bmVvbC5weSAgICAgICAgICAgICAgICAgU2V0IHN2bjplb2wtc3R5bGUgb24gYWxsIGZpbGVzIGluIGRpcmVjdG9yeQordGV4aTJodG1sLnB5ICAgICAgICAgICAgICBDb252ZXJ0IEdOVSB0ZXhpbmZvIGZpbGVzIGludG8gSFRNTAordHJlZXN5bmMucHkgICAgICAgICAgICAgICBTeW5jaHJvbml6ZSBzb3VyY2UgdHJlZXMgKHZlcnkgaWRpb3N5bmNyYXRpYykKK3VudGFiaWZ5LnB5ICAgICAgICAgICAgICAgUmVwbGFjZSB0YWJzIHdpdGggc3BhY2VzIGluIGFyZ3VtZW50IGZpbGVzCit3aGljaC5weSAgICAgICAgICAgICAgICAgIEZpbmQgYSBwcm9ncmFtIGluICRQQVRICit3aW5fYWRkMnBhdGgucHkgICAgICAgICAgIEFkZCBQeXRob24gdG8gdGhlIHNlYXJjaCBwYXRoIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkgYi9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5CmluZGV4IGI3OWZmMzcuLjczNmE0NDEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9ieWV4dC5weQpAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICBzZWxmLmFkZHN0YXRzKCI8ZGlyPiIsICJkaXJzIiwgMSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3QgbGlzdCAlczogJXNcbiIgJSAoZGlyLCBlcnIpKQogICAgICAgICAgICAgc2VsZi5hZGRzdGF0cygiPGRpcj4iLCAidW5saXN0YWJsZSIsIDEpCiAgICAgICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvYnl0ZXllYXJzLnB5IGIvVG9vbHMvc2NyaXB0cy9ieXRleWVhcnMucHkKaW5kZXggNDkwYjM3Zi4uZjU4YzM0NiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9ieXRleWVhcnMucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9ieXRleWVhcnMucHkKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBmb3IgZmlsZW5hbWUgaW4gc3lzLmFyZ3ZbMTpdOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdCA9IHN0YXRmdW5jKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJjYW4ndCBzdGF0ICVyOiAlclxuIiAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgICAgIHN0YXR1cyA9IDEKICAgICAgICAgICAgIHN0ID0gKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY2hlY2twaXAucHkgYi9Ub29scy9zY3JpcHRzL2NoZWNrcGlwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhhNjRlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9zY3JpcHRzL2NoZWNrcGlwLnB5CkBAIC0wLDAgKzEsMzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyIiIgorQ2hlY2tzIHRoYXQgdGhlIHZlcnNpb24gb2YgdGhlIHByb2plY3RzIGJ1bmRsZWQgaW4gZW5zdXJlcGlwIGFyZSB0aGUgbGF0ZXN0Cit2ZXJzaW9ucyBhdmFpbGFibGUuCisiIiIKK2ltcG9ydCBlbnN1cmVwaXAKK2ltcG9ydCBqc29uCitpbXBvcnQgdXJsbGliLnJlcXVlc3QKK2ltcG9ydCBzeXMKKworCitkZWYgbWFpbigpOgorICAgIG91dG9mZGF0ZSA9IEZhbHNlCisKKyAgICBmb3IgcHJvamVjdCwgdmVyc2lvbiBpbiBlbnN1cmVwaXAuX1BST0pFQ1RTOgorICAgICAgICBkYXRhID0ganNvbi5sb2Fkcyh1cmxsaWIucmVxdWVzdC51cmxvcGVuKAorICAgICAgICAgICAgImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkve30vanNvbiIuZm9ybWF0KHByb2plY3QpLAorICAgICAgICAgICAgY2FkZWZhdWx0PVRydWUsCisgICAgICAgICkucmVhZCgpLmRlY29kZSgidXRmOCIpKQorICAgICAgICB1cHN0cmVhbV92ZXJzaW9uID0gZGF0YVsiaW5mbyJdWyJ2ZXJzaW9uIl0KKworICAgICAgICBpZiB2ZXJzaW9uICE9IHVwc3RyZWFtX3ZlcnNpb246CisgICAgICAgICAgICBvdXRvZmRhdGUgPSBUcnVlCisgICAgICAgICAgICBwcmludCgiVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHt9IG9uIFB5UEkgaXMge30sIGJ1dCBlbnN1cmVwaXAgIgorICAgICAgICAgICAgICAgICAgImhhcyB7fSIuZm9ybWF0KHByb2plY3QsIHVwc3RyZWFtX3ZlcnNpb24sIHZlcnNpb24pKQorCisgICAgaWYgb3V0b2ZkYXRlOgorICAgICAgICBzeXMuZXhpdCgxKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NoZWNrcHljLnB5IGIvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weQppbmRleCBkNGZkY2UyLi5iYmFhM2QxIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2NoZWNrcHljLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkKQEAgLTUsMTEgKzUsMTEgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogZnJvbSBzdGF0IGltcG9ydCBTVF9NVElNRQotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiAKICMgUEVQIDMxNDcgY29tcGF0aWJpbGl0eSAoUFlDIFJlcG9zaXRvcnkgRGlyZWN0b3JpZXMpCi1jYWNoZV9mcm9tX3NvdXJjZSA9IChpbXAuY2FjaGVfZnJvbV9zb3VyY2UgaWYgaGFzYXR0cihpbXAsICdnZXRfdGFnJykgZWxzZQotICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHBhdGg6IHBhdGggKyAnYycpCitjYWNoZV9mcm9tX3NvdXJjZSA9IChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSBpZiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCisgICAgICAgICAgICAgICAgICAgICBlbHNlIGxhbWJkYSBwYXRoOiBwYXRoICsgJ2MnKQogCiAKIGRlZiBtYWluKCk6CkBAIC0xOCwxMyArMTgsMTMgQEAKICAgICAgICAgc2lsZW50ID0gKHN5cy5hcmd2WzFdID09ICctcycpCiAgICAgZWxzZToKICAgICAgICAgdmVyYm9zZSA9IHNpbGVudCA9IEZhbHNlCi0gICAgTUFHSUMgPSBpbXAuZ2V0X21hZ2ljKCkKKyAgICBNQUdJQyA9IGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUgogICAgIGlmIG5vdCBzaWxlbnQ6CiAgICAgICAgIHByaW50KCdVc2luZyBNQUdJQyB3b3JkJywgcmVwcihNQUdJQykpCiAgICAgZm9yIGRpcm5hbWUgaW4gc3lzLnBhdGg6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcHJpbnQoJ0Nhbm5vdCBsaXN0IGRpcmVjdG9yeScsIHJlcHIoZGlybmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBub3Qgc2lsZW50OgpAQCAtMzQsNyArMzQsNyBAQAogICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgbmFtZSkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHN0ID0gb3Muc3RhdChuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0Nhbm5vdCBzdGF0JywgcmVwcihuYW1lKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9jb3B5dGltZS5weSBiL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkKaW5kZXggZTAyMjBiNS4uNzE1NjgzZiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9jb3B5dGltZS5weQorKysgYi9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5CkBAIC0xMywxMiArMTMsMTIgQEAKICAgICBmaWxlMSwgZmlsZTIgPSBzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0KICAgICB0cnk6CiAgICAgICAgIHN0YXQxID0gb3Muc3RhdChmaWxlMSkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZmlsZTEgKyAnOiBjYW5ub3Qgc3RhdFxuJykKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICB0cnk6CiAgICAgICAgIG9zLnV0aW1lKGZpbGUyLCAoc3RhdDFbU1RfQVRJTUVdLCBzdGF0MVtTVF9NVElNRV0pKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShmaWxlMiArICc6IGNhbm5vdCBjaGFuZ2UgdGltZVxuJykKICAgICAgICAgc3lzLmV4aXQoMikKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9kaWZmLnB5IGIvVG9vbHMvc2NyaXB0cy9kaWZmLnB5CmluZGV4IGY5YjE0YmYuLjhiZTUyN2YgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZGlmZi5weQorKysgYi9Ub29scy9zY3JpcHRzL2RpZmYucHkKQEAgLTM4LDkgKzM4LDkgQEAKIAogICAgIGZyb21kYXRlID0gZmlsZV9tdGltZShmcm9tZmlsZSkKICAgICB0b2RhdGUgPSBmaWxlX210aW1lKHRvZmlsZSkKLSAgICB3aXRoIG9wZW4oZnJvbWZpbGUsICdVJykgYXMgZmY6CisgICAgd2l0aCBvcGVuKGZyb21maWxlKSBhcyBmZjoKICAgICAgICAgZnJvbWxpbmVzID0gZmYucmVhZGxpbmVzKCkKLSAgICB3aXRoIG9wZW4odG9maWxlLCAnVScpIGFzIHRmOgorICAgIHdpdGggb3Blbih0b2ZpbGUpIGFzIHRmOgogICAgICAgICB0b2xpbmVzID0gdGYucmVhZGxpbmVzKCkKIAogICAgIGlmIG9wdGlvbnMudToKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weSBiL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weQppbmRleCBmMjRhNzAyLi5hNzA1ZjU2IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5CkBAIC03MCw3ICs3MCw3IEBACiBkZWYgcHJvY2Vzc2RpcihkaXIsIGxpc3RuYW1lcyk6CiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW4ndCBsaXN0IGRpcmVjdG9yeTogJXNcbiIgJSBkaXIpCiAgICAgICAgIHJldHVybiAxCiAgICAgZmlsZXMgPSBbXQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weSBiL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkKaW5kZXggYjRjMDllZi4uYjkyNGYyNyAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5CkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICBsaW5rdG8gPSBvcy5yZWFkbGluayhuYW1lKQogICAgICAgICAgICAgaWYgcHJvZy5zZWFyY2gobGlua3RvKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBwcmludChuYW1lLCAnLT4nLCBsaW5rdG8pCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weSBiL1Rvb2xzL3NjcmlwdHMvZml4Y2lkLnB5CmluZGV4IDg3ZTJhMDkuLjFlNGM0MjggMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZml4Y2lkLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZml4Y2lkLnB5CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgYmFkID0gMAogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcm5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycihkaXJuYW1lICsgJzogY2Fubm90IGxpc3QgZGlyZWN0b3J5OiAnICsgc3RyKG1zZykgKyAnXG4nKQogICAgICAgICByZXR1cm4gMQogICAgIG5hbWVzLnNvcnQoKQpAQCAtMTc1LDE3ICsxNzUsMTcgQEAKICAgICB0cnk6CiAgICAgICAgIHN0YXRidWYgPSBvcy5zdGF0KGZpbGVuYW1lKQogICAgICAgICBvcy5jaG1vZCh0ZW1wbmFtZSwgc3RhdGJ1ZltTVF9NT0RFXSAmIDBvNzc3NykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKHRlbXBuYW1lICsgJzogd2FybmluZzogY2htb2QgZmFpbGVkICgnICsgc3RyKG1zZykgKyAnKVxuJykKICAgICAjIFRoZW4gbWFrZSBhIGJhY2t1cCBvZiB0aGUgb3JpZ2luYWwgZmlsZSBhcyBmaWxlbmFtZX4KICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgZmlsZW5hbWUgKyAnficpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycihmaWxlbmFtZSArICc6IHdhcm5pbmc6IGJhY2t1cCBmYWlsZWQgKCcgKyBzdHIobXNnKSArICcpXG4nKQogICAgICMgTm93IG1vdmUgdGhlIHRlbXAgZmlsZSB0byB0aGUgb3JpZ2luYWwgZmlsZQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKGZpbGVuYW1lICsgJzogcmVuYW1lIGZhaWxlZCAoJyArIHN0cihtc2cpICsgJylcbicpCiAgICAgICAgIHJldHVybiAxCiAgICAgIyBSZXR1cm4gc3VjY2VzcwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkgYi9Ub29scy9zY3JpcHRzL2Z0cG1pcnJvci5weQppbmRleCA5ZThiZTFkLi5hMWI2ODNhIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2Z0cG1pcnJvci5weQorKysgYi9Ub29scy9zY3JpcHRzL2Z0cG1pcnJvci5weQpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50KCdDcmVhdGluZyBsb2NhbCBkaXJlY3RvcnknLCByZXByKGxvY2FsZGlyKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbWFrZWRpcihsb2NhbGRpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoIkZhaWxlZCB0byBlc3RhYmxpc2ggbG9jYWwgZGlyZWN0b3J5IiwgcmVwcihsb2NhbGRpcikpCiAgICAgICAgICAgICByZXR1cm4KICAgICBpbmZvZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4obG9jYWxkaXIsICcubWlycm9yaW5mbycpCkBAIC0xODMsNyArMTgzLDcgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsodGVtcG5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGlmIG1vZGVbMF0gPT0gJ2wnOgogICAgICAgICAgICAgaWYgdmVyYm9zZToKQEAgLTIxOCwxMSArMjE4LDExIEBACiAgICAgICAgICAgICAgICAgZnAxLmNsb3NlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcyAgICAgICAgICAgICMgSWdub3JlIHRoZSBlcnJvcgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUodGVtcG5hbWUsIGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3QgcmVuYW1lICVyIHRvICVyOiAlcyIgJSAodGVtcG5hbWUsIGZ1bGxuYW1lLCBtc2cpKQogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaW5mb1tmaWxlbmFtZV0gPSBpbmZvc3R1ZmYKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgIHRyeToKICAgICAgICAgaWYgbm90IGxvY2FsZGlyOiBuYW1lcyA9IG9zLmxpc3RkaXIob3MuY3VyZGlyKQogICAgICAgICBlbHNlOiBuYW1lcyA9IG9zLmxpc3RkaXIobG9jYWxkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBuYW1lcyA9IFtdCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgIGlmIG5hbWVbMF0gPT0gJy4nIG9yIG5hbWUgaW4gaW5mbyBvciBuYW1lIGluIHN1YmRpcnM6CkBAIC0zMTIsNyArMzEyLDcgQEAKICAgICBpZiBvcy5wYXRoLmlzZGlyKGZ1bGxuYW1lKSBhbmQgbm90IG9zLnBhdGguaXNsaW5rKGZ1bGxuYW1lKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbmFtZXMgPSBbXQogICAgICAgICBvayA9IDEKICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkBAIC0zMjIsMTMgKzMyMiwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Mucm1kaXIoZnVsbG5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCByZW1vdmUgbG9jYWwgZGlyZWN0b3J5ICVyOiAlcyIgJSAoZnVsbG5hbWUsIG1zZykpCiAgICAgICAgICAgICByZXR1cm4gMAogICAgIGVsc2U6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoIkNhbid0IHJlbW92ZSBsb2NhbCBmaWxlICVyOiAlcyIgJSAoZnVsbG5hbWUsIG1zZykpCiAgICAgICAgICAgICByZXR1cm4gMAogICAgIHJldHVybiAxCkBAIC0zODYsNyArMzg2LDcgQEAKICAgICBiYWNrdXAgPSBvcy5wYXRoLmpvaW4oZGlyLCBmbmFtZSArICd+JykKICAgICB0cnk6CiAgICAgICAgIG9zLnVubGluayhiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgZnAgPSBvcGVuKHRlbXBuYW1lLCAndycpCiAgICAgZnAud3JpdGUoJ3tcbicpCkBAIC0zOTYsNyArMzk2LDcgQEAKICAgICBmcC5jbG9zZSgpCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGJhY2t1cCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICBvcy5yZW5hbWUodGVtcG5hbWUsIGZpbGVuYW1lKQogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5IGIvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weQppbmRleCA5ODJmNDgwLi5lODNmMTk4IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkKQEAgLTMyLDEzICszMiwxMyBAQAogICAgICAgICByZXR1cm4gMQogICAgIHRyeToKICAgICAgICAgb3MubWtkaXIobmV3dHJlZSwgMG83NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50KG5ld3RyZWUgKyAnOiBjYW5ub3QgbWtkaXI6JywgbXNnKQogICAgICAgICByZXR1cm4gMQogICAgIGxpbmtuYW1lID0gb3MucGF0aC5qb2luKG5ld3RyZWUsIGxpbmspCiAgICAgdHJ5OgogICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguam9pbihvcy5wYXJkaXIsIG9sZHRyZWUpLCBsaW5rbmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgaWYgbm90IGxpbmtfbWF5X2ZhaWw6CiAgICAgICAgICAgICBwcmludChsaW5rbmFtZSArICc6IGNhbm5vdCBzeW1saW5rOicsIG1zZykKICAgICAgICAgICAgIHJldHVybiAxCkBAIC01MSw3ICs1MSw3IEBACiAgICAgaWYgZGVidWc6IHByaW50KCdsaW5rbmFtZXMnLCAob2xkLCBuZXcsIGxpbmspKQogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKG9sZCkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQob2xkICsgJzogd2FybmluZzogY2Fubm90IGxpc3RkaXI6JywgbXNnKQogICAgICAgICByZXR1cm4KICAgICBmb3IgbmFtZSBpbiBuYW1lczoKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkgYi9Ub29scy9zY3JpcHRzL25kaWZmLnB5CmluZGV4IDI0MjIwOTEuLmM2ZDA5YjggMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9uZGlmZi5weQpAQCAtNjAsNyArNjAsNyBAQAogIyBjb3VsZG4ndCBiZSBvcGVuZWQKIGRlZiBmb3BlbihmbmFtZSk6CiAgICAgdHJ5OgotICAgICAgICByZXR1cm4gb3BlbihmbmFtZSwgJ1UnKQorICAgICAgICByZXR1cm4gb3BlbihmbmFtZSkKICAgICBleGNlcHQgSU9FcnJvciBhcyBkZXRhaWw6CiAgICAgICAgIHJldHVybiBmYWlsKCJjb3VsZG4ndCBvcGVuICIgKyBmbmFtZSArICI6ICIgKyBzdHIoZGV0YWlsKSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9wYXJzZV9odG1sNV9lbnRpdGllcy5weSBiL1Rvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzAxMTMyOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkKQEAgLTAsMCArMSwxMDUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyIiIgorVXRpbGl0eSBmb3IgcGFyc2luZyBIVE1MNSBlbnRpdHkgZGVmaW5pdGlvbnMgYXZhaWxhYmxlIGZyb206CisKKyAgICBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL2VudGl0aWVzLmpzb24KKworV3JpdHRlbiBieSBFemlvIE1lbG90dGkgYW5kIEl1bGlpYSBQcm9za3VybmlhLgorCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQganNvbgorZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgorZnJvbSBodG1sLmVudGl0aWVzIGltcG9ydCBodG1sNQorCitlbnRpdGllc191cmwgPSAnaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9lbnRpdGllcy5qc29uJworCitkZWYgZ2V0X2pzb24odXJsKToKKyAgICAiIiJEb3dubG9hZCB0aGUganNvbiBmaWxlIGZyb20gdGhlIHVybCBhbmQgcmV0dXJucyBhIGRlY29kZWQgb2JqZWN0LiIiIgorICAgIHdpdGggdXJsb3Blbih1cmwpIGFzIGY6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICByZXR1cm4ganNvbi5sb2FkcyhkYXRhKQorCitkZWYgY3JlYXRlX2RpY3QoZW50aXRpZXMpOgorICAgICIiIkNyZWF0ZSB0aGUgaHRtbDUgZGljdCBmcm9tIHRoZSBkZWNvZGVkIGpzb24gb2JqZWN0LiIiIgorICAgIG5ld19odG1sNSA9IHt9CisgICAgZm9yIG5hbWUsIHZhbHVlIGluIGVudGl0aWVzLml0ZW1zKCk6CisgICAgICAgIG5ld19odG1sNVtuYW1lLmxzdHJpcCgnJicpXSA9IHZhbHVlWydjaGFyYWN0ZXJzJ10KKyAgICByZXR1cm4gbmV3X2h0bWw1CisKK2RlZiBjb21wYXJlX2RpY3RzKG9sZCwgbmV3KToKKyAgICAiIiJDb21wYXJlIHRoZSBvbGQgYW5kIG5ldyBkaWN0cyBhbmQgcHJpbnQgdGhlIGRpZmZlcmVuY2VzLiIiIgorICAgIGFkZGVkID0gbmV3LmtleXMoKSAtIG9sZC5rZXlzKCkKKyAgICBpZiBhZGRlZDoKKyAgICAgICAgcHJpbnQoJ3t9IGVudGl0aWUocykgaGF2ZSBiZWVuIGFkZGVkOicuZm9ybWF0KGxlbihhZGRlZCkpKQorICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQoYWRkZWQpOgorICAgICAgICAgICAgcHJpbnQoJyAgeyFyfTogeyFyfScuZm9ybWF0KG5hbWUsIG5ld1tuYW1lXSkpCisgICAgcmVtb3ZlZCA9IG9sZC5rZXlzKCkgLSBuZXcua2V5cygpCisgICAgaWYgcmVtb3ZlZDoKKyAgICAgICAgcHJpbnQoJ3t9IGVudGl0aWUocykgaGF2ZSBiZWVuIHJlbW92ZWQ6Jy5mb3JtYXQobGVuKHJlbW92ZWQpKSkKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKHJlbW92ZWQpOgorICAgICAgICAgICAgcHJpbnQoJyAgeyFyfTogeyFyfScuZm9ybWF0KG5hbWUsIG9sZFtuYW1lXSkpCisgICAgY2hhbmdlZCA9IHNldCgpCisgICAgZm9yIG5hbWUgaW4gKG9sZC5rZXlzKCkgJiBuZXcua2V5cygpKToKKyAgICAgICAgaWYgb2xkW25hbWVdICE9IG5ld1tuYW1lXToKKyAgICAgICAgICAgIGNoYW5nZWQuYWRkKChuYW1lLCBvbGRbbmFtZV0sIG5ld1tuYW1lXSkpCisgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgcHJpbnQoJ3t9IGVudGl0aWUocykgaGF2ZSBiZWVuIG1vZGlmaWVkOicuZm9ybWF0KGxlbihjaGFuZ2VkKSkpCisgICAgICAgIGZvciBpdGVtIGluIHNvcnRlZChjaGFuZ2VkKToKKyAgICAgICAgICAgIHByaW50KCcgIHshcn06IHshcn0gLT4geyFyfScuZm9ybWF0KCppdGVtKSkKKworZGVmIHdyaXRlX2l0ZW1zKGVudGl0aWVzLCBmaWxlPXN5cy5zdGRvdXQpOgorICAgICIiIldyaXRlIHRoZSBpdGVtcyBvZiB0aGUgZGljdGlvbmFyeSBpbiB0aGUgc3BlY2lmaWVkIGZpbGUuIiIiCisgICAgIyBUaGUga2V5cyBpbiB0aGUgZ2VuZXJhdGVkIGRpY3Rpb25hcnkgc2hvdWxkIGJlIHNvcnRlZAorICAgICMgaW4gYSBjYXNlLWluc2Vuc2l0aXZlIHdheSwgaG93ZXZlciwgd2hlbiB0d28ga2V5cyBhcmUgZXF1YWwsCisgICAgIyB0aGUgdXBwZXJjYXNlIHZlcnNpb24gc2hvdWxkIGNvbWUgZmlyc3Qgc28gdGhhdCB0aGUgcmVzdWx0CisgICAgIyBsb29rcyBsaWtlOiBbJ0FhY3V0ZScsICdhYWN1dGUnLCAnQWFjdXRlOycsICdhYWN1dGU7JywgLi4uXQorICAgICMgVG8gZG8gdGhpcyB3ZSBmaXJzdCBzb3J0IGluIGEgY2FzZS1zZW5zaXRpdmUgd2F5IChzbyBhbGwgdGhlCisgICAgIyB1cHBlcmNhc2UgY2hhcnMgY29tZSBmaXJzdCkgYW5kIHRoZW4gc29ydCB3aXRoIGtleT1zdHIubG93ZXIuCisgICAgIyBTaW5jZSB0aGUgc29ydGluZyBpcyBzdGFibGUgdGhlIHVwcGVyY2FzZSBrZXlzIHdpbGwgZXZlbnR1YWxseQorICAgICMgYmUgYmVmb3JlIHRoZWlyIGVxdWl2YWxlbnQgbG93ZXJjYXNlIHZlcnNpb24uCisgICAga2V5cyA9IHNvcnRlZChlbnRpdGllcy5rZXlzKCkpCisgICAga2V5cyA9IHNvcnRlZChrZXlzLCBrZXk9c3RyLmxvd2VyKQorICAgIHByaW50KCdodG1sNSA9IHsnLCBmaWxlPWZpbGUpCisgICAgZm9yIG5hbWUgaW4ga2V5czoKKyAgICAgICAgcHJpbnQoJyAgICB7IXJ9OiB7IWF9LCcuZm9ybWF0KG5hbWUsIGVudGl0aWVzW25hbWVdKSwgZmlsZT1maWxlKQorICAgIHByaW50KCd9JywgZmlsZT1maWxlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgIyB3aXRob3V0IGFyZ3MgcHJpbnQgYSBkaWZmIGJldHdlZW4gaHRtbC5lbnRpdGllcy5odG1sNSBhbmQgbmV3X2h0bWw1CisgICAgIyB3aXRoIC0tY3JlYXRlIHByaW50IHRoZSBuZXcgaHRtbDUgZGljdAorICAgICMgd2l0aCAtLXBhdGNoIHBhdGNoIHRoZSBMaWIvaHRtbC9lbnRpdGllcy5weSBmaWxlCisgICAgbmV3X2h0bWw1ID0gY3JlYXRlX2RpY3QoZ2V0X2pzb24oZW50aXRpZXNfdXJsKSkKKyAgICBpZiAnLS1jcmVhdGUnIGluIHN5cy5hcmd2OgorICAgICAgICBwcmludCgnIyBtYXAgdGhlIEhUTUw1IG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIHRvIHRoZSAnCisgICAgICAgICAgICAgICdlcXVpdmFsZW50IFVuaWNvZGUgY2hhcmFjdGVyKHMpJykKKyAgICAgICAgcHJpbnQoJyMgR2VuZXJhdGVkIGJ5IHt9LiAgRG8gbm90IGVkaXQgbWFudWFsbHkuJy5mb3JtYXQoX19maWxlX18pKQorICAgICAgICB3cml0ZV9pdGVtcyhuZXdfaHRtbDUpCisgICAgZWxpZiAnLS1wYXRjaCcgaW4gc3lzLmFyZ3Y6CisgICAgICAgIGZuYW1lID0gJ0xpYi9odG1sL2VudGl0aWVzLnB5JworICAgICAgICB0ZW1wX2ZuYW1lID0gZm5hbWUgKyAnLnRlbXAnCisgICAgICAgIHdpdGggb3BlbihmbmFtZSkgYXMgZjEsIG9wZW4odGVtcF9mbmFtZSwgJ3cnKSBhcyBmMjoKKyAgICAgICAgICAgIHNraXAgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjE6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdodG1sNSA9IHsnKToKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVfaXRlbXMobmV3X2h0bWw1LCBmaWxlPWYyKQorICAgICAgICAgICAgICAgICAgICBza2lwID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHNraXA6CisgICAgICAgICAgICAgICAgICAgICMgc2tpcCB0aGUgb2xkIGl0ZW1zIHVudGlsIHRoZSB9CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnfScpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZjIud3JpdGUobGluZSkKKyAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQorICAgICAgICBvcy5yZW5hbWUodGVtcF9mbmFtZSwgZm5hbWUpCisgICAgZWxzZToKKyAgICAgICAgaWYgaHRtbDUgPT0gbmV3X2h0bWw1OgorICAgICAgICAgICAgcHJpbnQoJ1RoZSBjdXJyZW50IGRpY3Rpb25hcnkgaXMgdXBkYXRlZC4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tcGFyZV9kaWN0cyhodG1sNSwgbmV3X2h0bWw1KQorICAgICAgICAgICAgcHJpbnQoJ1J1biAiLi9weXRob24gezB9IC0tcGF0Y2giIHRvIHVwZGF0ZSBMaWIvaHRtbC9lbnRpdGllcy5odG1sICcKKyAgICAgICAgICAgICAgICAgICdvciAiLi9weXRob24gezB9IC0tY3JlYXRlIiB0byBzZWUgdGhlIGdlbmVyYXRlZCAnICdkaWN0aW9uYXJ5LicuZm9ybWF0KF9fZmlsZV9fKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weSBiL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weQppbmRleCAxM2NhODY2Li4yMjQzMmQxIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9wYXRoZml4LnB5CkBAIC03Myw3ICs3Myw3IEBACiAgICAgYmFkID0gMAogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcm5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IGNhbm5vdCBsaXN0IGRpcmVjdG9yeTogJXJcbicgJSAoZGlybmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICBuYW1lcy5zb3J0KCkKQEAgLTEzMSwyNCArMTMxLDI0IEBACiAgICAgICAgIG10aW1lID0gc3RhdGJ1Zi5zdF9tdGltZQogICAgICAgICBhdGltZSA9IHN0YXRidWYuc3RfYXRpbWUKICAgICAgICAgb3MuY2htb2QodGVtcG5hbWUsIHN0YXRidWZbU1RfTU9ERV0gJiAwbzc3NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHdhcm5pbmc6IGNobW9kIGZhaWxlZCAoJXIpXG4nICUgKHRlbXBuYW1lLCBtc2cpKQogICAgICMgVGhlbiBtYWtlIGEgYmFja3VwIG9mIHRoZSBvcmlnaW5hbCBmaWxlIGFzIGZpbGVuYW1lfgogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBmaWxlbmFtZSArICd+JykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogd2FybmluZzogYmFja3VwIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICMgTm93IG1vdmUgdGhlIHRlbXAgZmlsZSB0byB0aGUgb3JpZ2luYWwgZmlsZQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogcmVuYW1lIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICAgICByZXR1cm4gMQogICAgIGlmIHByZXNlcnZlX3RpbWVzdGFtcHM6CiAgICAgICAgIGlmIGF0aW1lIGFuZCBtdGltZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgKGF0aW1lLCBtdGltZSkpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIGVycignJXM6IHJlc2V0IG9mIHRpbWVzdGFtcCBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMQogICAgICMgUmV0dXJuIHN1Y2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weSBiL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weQppbmRleCAyODcyZGMwLi4zMzMzNDIwIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5CkBAIC0zNzYsMTMgKzM3NiwxMyBAQAogICAgIGlmIG9zLnBhdGgubGV4aXN0cyhiYWNrdXApOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW1vdmUoYmFja3VwKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcHJpbnQoIkNhbid0IHJlbW92ZSBiYWNrdXAgJXIiICUgKGJhY2t1cCwpLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICMgZW5kIHRyeQogICAgICMgZW5kIGlmCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGJhY2t1cCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHByaW50KCJDYW4ndCByZW5hbWUgJXIgdG8gJXIiICUgKGZpbGVuYW1lLCBiYWNrdXApLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgIyBlbmQgdHJ5CiAjIGVuZCBkZWYgbWFrZV9iYWNrdXAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcHlkb2NndWkucHl3IGIvVG9vbHMvc2NyaXB0cy9weWRvY2d1aS5weXcKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weSBiL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkKaW5kZXggNGE5MTZlYS4uMTg0MjRkZSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weQorKysgYi9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5CkBAIC01Miw4ICs1Miw4IEBACiByZWN1cnNlID0gRmFsc2UKIGRyeXJ1biA9IEZhbHNlCiBtYWtlYmFja3VwID0gVHJ1ZQorIyBBIHNwZWNpZmllZCBuZXdsaW5lIHRvIGJlIHVzZWQgaW4gdGhlIG91dHB1dCAoc2V0IGJ5IC0tbmV3bGluZSBvcHRpb24pCiBzcGVjX25ld2xpbmUgPSBOb25lCi0iIiJBIHNwZWNpZmllZCBuZXdsaW5lIHRvIGJlIHVzZWQgaW4gdGhlIG91dHB1dCAoc2V0IGJ5IC0tbmV3bGluZSBvcHRpb24pIiIiCiAKIAogZGVmIHVzYWdlKG1zZz1Ob25lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkgYi9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5CmluZGV4IGIyNjQ5YzQuLjY1MmQzOTQgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkKKysrIGIvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weQpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICBwcmludCgiY3JlYXRpbmcgc2xhdmUgZGlyZWN0b3J5Iiwgc2xhdmUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKHNsYXZlKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiY2FuJ3QgbWFrZSBzbGF2ZSBkaXJlY3RvcnkiLCBzbGF2ZSwgIjoiLCBtc2cpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkgYi9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CmluZGV4IDRiNjdjMTUuLjg2MWM4M2MgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKKysrIGIvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQpAQCAtMzksMTEgKzM5LDExIEBACiAgICAgYmFja3VwID0gZmlsZW5hbWUgKyAifiIKICAgICB0cnk6CiAgICAgICAgIG9zLnVubGluayhiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGJhY2t1cCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IiwgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGY6CiAgICAgICAgIGYud3JpdGUobmV3dGV4dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvd2hpY2gucHkgYi9Ub29scy9zY3JpcHRzL3doaWNoLnB5CmluZGV4IDRmYzM3YTAuLmRmNTRjZTAgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvd2hpY2gucHkKKysrIGIvVG9vbHMvc2NyaXB0cy93aGljaC5weQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCBwcm9nKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN0ID0gb3Muc3RhdChmaWxlbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBub3QgU19JU1JFRyhzdFtTVF9NT0RFXSk6CiAgICAgICAgICAgICAgICAgbXNnKGZpbGVuYW1lICsgJzogbm90IGEgZGlzayBmaWxlJykKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvd2luX2FkZDJwYXRoLnB5IGIvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkKaW5kZXggOTI1OWI0NC4uYzg1YmVhNSAxMDA2NDQKLS0tIGEvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkKKysrIGIvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkKQEAgLTMwLDcgKzMwLDcgQEAKICAgICB3aXRoIHdpbnJlZy5DcmVhdGVLZXkoSEtDVSwgRU5WKSBhcyBrZXk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGVudnBhdGggPSB3aW5yZWcuUXVlcnlWYWx1ZUV4KGtleSwgUEFUSClbMF0KLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBlbnZwYXRoID0gREVGQVVMVAogCiAgICAgICAgIHBhdGhzID0gW2VudnBhdGhdCmRpZmYgLS1naXQgYS9Ub29scy9zc2wvdGVzdF9tdWx0aXBsZV92ZXJzaW9ucy5weSBiL1Rvb2xzL3NzbC90ZXN0X211bHRpcGxlX3ZlcnNpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNTdkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9zc2wvdGVzdF9tdWx0aXBsZV92ZXJzaW9ucy5weQpAQCAtMCwwICsxLDI0MSBAQAorIy4vcHl0aG9uCisiIiJSdW4gUHl0aG9uIHRlc3RzIHdpdGggbXVsdGlwbGUgaW5zdGFsbGF0aW9ucyBvZiBPcGVuU1NMCisKK1RoZSBzY3JpcHQKKworICAoMSkgZG93bmxvYWRzIE9wZW5TU0wgdGFyIGJ1bmRsZQorICAoMikgZXh0cmFjdHMgaXQgdG8gLi4vb3BlbnNzbC9zcmMvb3BlbnNzbC1WRVJTSU9OLworICAoMykgY29tcGlsZXMgT3BlblNTTAorICAoNCkgaW5zdGFsbHMgT3BlblNTTCBpbnRvIC4uL29wZW5zc2wvVkVSU0lPTi8KKyAgKDUpIGZvcmNlcyBhIHJlY29tcGlsYXRpb24gb2YgUHl0aG9uIG1vZHVsZXMgdXNpbmcgdGhlCisgICAgICBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgZnJvbSAuLi9vcGVuc3NsL1ZFUlNJT04vCisgICg2KSBydW5zIFB5dGhvbidzIHRlc3Qgc3VpdGUKKworVGhlIHNjcmlwdCBtdXN0IGJlIHJ1biB3aXRoIFB5dGhvbidzIGJ1aWxkIGRpcmVjdG9yeSBhcyBjdXJyZW50IHdvcmtpbmcKK2RpcmVjdG9yeToKKworICAgIC4vcHl0aG9uIFRvb2xzL3NzbC90ZXN0X211bHRpcGxlX3ZlcnNpb25zLnB5CisKK1RoZSBzY3JpcHQgdXNlcyBMRF9SVU5fUEFUSCwgTERfTElCUkFSWV9QQVRILCBDUFBGTEFHUyBhbmQgTERGTEFHUyB0byBiZW5kCitzZWFyY2ggcGF0aHMgZm9yIGhlYWRlciBmaWxlcyBhbmQgc2hhcmVkIGxpYnJhcmllcy4gSXQncyBrbm93biB0byB3b3JrIG9uCitMaW51eCB3aXRoIEdDQyA0LnguCisKKyhjKSAyMDEzIENocmlzdGlhbiBIZWltZXMgPGNocmlzdGlhbkBweXRob24ub3JnPgorIiIiCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgdGFyZmlsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2Zyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIm11bHRpc3NsIikKKworT1BFTlNTTF9WRVJTSU9OUyA9IFsKKyAgICAiMC45LjdtIiwgIjAuOS44aSIsICIwLjkuOGwiLCAiMC45LjhtIiwgIjAuOS44eSIsICIxLjAuMGsiLCAiMS4wLjFlIgorXQorRlVMTF9URVNUUyA9IFsKKyAgICAidGVzdF9hc3luY2lvIiwgInRlc3RfZnRwbGliIiwgInRlc3RfaGFzaGxpYiIsICJ0ZXN0X2h0dHBsaWIiLAorICAgICJ0ZXN0X2ltYXBsaWIiLCAidGVzdF9ubnRwbGliIiwgInRlc3RfcG9wbGliIiwgInRlc3Rfc210cGxpYiIsCisgICAgInRlc3Rfc210cG5ldCIsICJ0ZXN0X3VybGxpYjJfbG9jYWxuZXQiLCAidGVzdF92ZW52IgorXQorTUlOSU1BTF9URVNUUyA9IFsidGVzdF9zc2wiLCAidGVzdF9oYXNobGliIl0KK0NBREVGQVVMVCA9IFRydWUKK0hFUkUgPSBvcy5wYXRoLmFic3BhdGgob3MuZ2V0Y3dkKCkpCitERVNUX0RJUiA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oSEVSRSwgb3MucGFyZGlyLCAib3BlbnNzbCIpKQorCisKK2NsYXNzIEJ1aWxkU1NMOgorICAgIHVybF90ZW1wbGF0ZSA9ICJodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2Uvb3BlbnNzbC17fS50YXIuZ3oiCisKKyAgICBtb2R1bGVfZmlsZXMgPSBbIk1vZHVsZXMvX3NzbC5jIiwKKyAgICAgICAgICAgICAgICAgICAgIk1vZHVsZXMvc29ja2V0bW9kdWxlLmMiLAorICAgICAgICAgICAgICAgICAgICAiTW9kdWxlcy9faGFzaG9wZW5zc2wuYyJdCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmVyc2lvbiwgb3BlbnNzbF9jb21waWxlX2FyZ3M9KCksIGRlc3RkaXI9REVTVF9ESVIpOgorICAgICAgICBzZWxmLl9jaGVja19weXRob25fYnVpbGRkaXIoKQorICAgICAgICBzZWxmLnZlcnNpb24gPSB2ZXJzaW9uCisgICAgICAgIHNlbGYub3BlbnNzbF9jb21waWxlX2FyZ3MgPSBvcGVuc3NsX2NvbXBpbGVfYXJncworICAgICAgICAjIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkKKyAgICAgICAgc2VsZi5pbnN0YWxsX2RpciA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCB2ZXJzaW9uKQorICAgICAgICAjIHNvdXJjZSBmaWxlCisgICAgICAgIHNlbGYuc3JjX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgInNyYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZW5zc2wte30udGFyLmd6Ii5mb3JtYXQodmVyc2lvbikpCisgICAgICAgICMgYnVpbGQgZGlyZWN0b3J5IChyZW1vdmVkIGFmdGVyIGluc3RhbGwpCisgICAgICAgIHNlbGYuYnVpbGRfZGlyID0gb3MucGF0aC5qb2luKGRlc3RkaXIsICJzcmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlbnNzbC17fSIuZm9ybWF0KHZlcnNpb24pKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG9wZW5zc2xfY2xpKHNlbGYpOgorICAgICAgICAiIiJvcGVuc3NsIENMSSBiaW5hcnkiIiIKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxfZGlyLCAiYmluIiwgIm9wZW5zc2wiKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG9wZW5zc2xfdmVyc2lvbihzZWxmKToKKyAgICAgICAgIiIib3V0cHV0IG9mICdiaW4vb3BlbnNzbCB2ZXJzaW9uJyIiIgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbIkxEX0xJQlJBUllfUEFUSCJdID0gc2VsZi5saWJfZGlyCisgICAgICAgIGNtZCA9IFtzZWxmLm9wZW5zc2xfY2xpLCAidmVyc2lvbiJdCisgICAgICAgIHJldHVybiBzZWxmLl9zdWJwcm9jZXNzX291dHB1dChjbWQsIGVudj1lbnYpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHlzc2xfdmVyc2lvbihzZWxmKToKKyAgICAgICAgIiIiVmFsdWUgb2Ygc3NsLk9QRU5TU0xfVkVSU0lPTiIiIgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbIkxEX0xJQlJBUllfUEFUSCJdID0gc2VsZi5saWJfZGlyCisgICAgICAgIGNtZCA9IFsiLi9weXRob24iLCAiLWMiLCAiaW1wb3J0IHNzbDsgcHJpbnQoc3NsLk9QRU5TU0xfVkVSU0lPTikiXQorICAgICAgICByZXR1cm4gc2VsZi5fc3VicHJvY2Vzc19vdXRwdXQoY21kLCBlbnY9ZW52KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGluY2x1ZGVfZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuaW5zdGFsbF9kaXIsICJpbmNsdWRlIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsaWJfZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuaW5zdGFsbF9kaXIsICJsaWIiKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGhhc19vcGVuc3NsKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5pc2ZpbGUoc2VsZi5vcGVuc3NsX2NsaSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYXNfc3JjKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5pc2ZpbGUoc2VsZi5zcmNfZmlsZSkKKworICAgIGRlZiBfc3VicHJvY2Vzc19jYWxsKHNlbGYsIGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCwgZW52PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICBsb2cuZGVidWcoIkNhbGwgJ3t9JyIuZm9ybWF0KCIgIi5qb2luKGNtZCkpKQorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19jYWxsKGNtZCwgc3Rkb3V0PXN0ZG91dCwgZW52PWVudiwgKiprd2FyZ3MpCisKKyAgICBkZWYgX3N1YnByb2Nlc3Nfb3V0cHV0KHNlbGYsIGNtZCwgZW52PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgbG9nLmRlYnVnKCJDYWxsICd7fSciLmZvcm1hdCgiICIuam9pbihjbWQpKSkKKyAgICAgICAgb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBlbnY9ZW52KQorICAgICAgICByZXR1cm4gb3V0LnN0cmlwKCkuZGVjb2RlKCJ1dGYtOCIpCisKKyAgICBkZWYgX2NoZWNrX3B5dGhvbl9idWlsZGRpcihzZWxmKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCJweXRob24iKSBvciBub3Qgb3MucGF0aC5pc2ZpbGUoInNldHVwLnB5Iik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJTY3JpcHQgbXVzdCBiZSBydW4gaW4gUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeSIpCisKKyAgICBkZWYgX2Rvd25sb2FkX29wZW5zc2woc2VsZik6CisgICAgICAgICIiIkRvd25sb2FkIE9wZW5TU0wgc291cmNlIGRpc3QiIiIKKyAgICAgICAgc3JjX2RpciA9IG9zLnBhdGguZGlybmFtZShzZWxmLnNyY19maWxlKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcmNfZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNyY19kaXIpCisgICAgICAgIHVybCA9IHNlbGYudXJsX3RlbXBsYXRlLmZvcm1hdChzZWxmLnZlcnNpb24pCisgICAgICAgIGxvZy5pbmZvKCJEb3dubG9hZGluZyBPcGVuU1NMIGZyb20ge30iLmZvcm1hdCh1cmwpKQorICAgICAgICByZXEgPSB1cmxvcGVuKHVybCwgY2FkZWZhdWx0PUNBREVGQVVMVCkKKyAgICAgICAgIyBLSVNTLCByZWFkIGFsbCwgd3JpdGUgYWxsCisgICAgICAgIGRhdGEgPSByZXEucmVhZCgpCisgICAgICAgIGxvZy5pbmZvKCJTdG9yaW5nIHt9Ii5mb3JtYXQoc2VsZi5zcmNfZmlsZSkpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNyY19maWxlLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhKQorCisgICAgZGVmIF91bnBhY2tfb3BlbnNzbChzZWxmKToKKyAgICAgICAgIiIiVW5wYWNrIHRhci5neiBidW5kbGUiIiIKKyAgICAgICAgIyBjbGVhbnVwCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5idWlsZF9kaXIpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmJ1aWxkX2RpcikKKyAgICAgICAgb3MubWFrZWRpcnMoc2VsZi5idWlsZF9kaXIpCisKKyAgICAgICAgdGYgPSB0YXJmaWxlLm9wZW4oc2VsZi5zcmNfZmlsZSkKKyAgICAgICAgYmFzZSA9ICJvcGVuc3NsLXt9LyIuZm9ybWF0KHNlbGYudmVyc2lvbikKKyAgICAgICAgIyBmb3JjZSBleHRyYWN0aW9uIGludG8gYnVpbGQgZGlyCisgICAgICAgIG1lbWJlcnMgPSB0Zi5nZXRtZW1iZXJzKCkKKyAgICAgICAgZm9yIG1lbWJlciBpbiBtZW1iZXJzOgorICAgICAgICAgICAgaWYgbm90IG1lbWJlci5uYW1lLnN0YXJ0c3dpdGgoYmFzZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtZW1iZXIubmFtZSkKKyAgICAgICAgICAgIG1lbWJlci5uYW1lID0gbWVtYmVyLm5hbWVbbGVuKGJhc2UpOl0KKyAgICAgICAgbG9nLmluZm8oIlVucGFja2luZyBmaWxlcyB0byB7fSIuZm9ybWF0KHNlbGYuYnVpbGRfZGlyKSkKKyAgICAgICAgdGYuZXh0cmFjdGFsbChzZWxmLmJ1aWxkX2RpciwgbWVtYmVycykKKworICAgIGRlZiBfYnVpbGRfb3BlbnNzbChzZWxmKToKKyAgICAgICAgIiIiTm93IGJ1aWxkIG9wZW5zc2wiIiIKKyAgICAgICAgbG9nLmluZm8oIlJ1bm5pbmcgYnVpbGQgaW4ge30iLmZvcm1hdChzZWxmLmluc3RhbGxfZGlyKSkKKyAgICAgICAgY3dkID0gc2VsZi5idWlsZF9kaXIKKyAgICAgICAgY21kID0gWyIuL2NvbmZpZyIsICJzaGFyZWQiLCAiLS1wcmVmaXg9e30iLmZvcm1hdChzZWxmLmluc3RhbGxfZGlyKV0KKyAgICAgICAgY21kLmV4dGVuZChzZWxmLm9wZW5zc2xfY29tcGlsZV9hcmdzKQorICAgICAgICBzZWxmLl9zdWJwcm9jZXNzX2NhbGwoY21kLCBjd2Q9Y3dkKQorICAgICAgICBzZWxmLl9zdWJwcm9jZXNzX2NhbGwoWyJtYWtlIl0sIGN3ZD1jd2QpCisKKyAgICBkZWYgX2luc3RhbGxfb3BlbnNzbChzZWxmLCByZW1vdmU9VHJ1ZSk6CisgICAgICAgIHNlbGYuX3N1YnByb2Nlc3NfY2FsbChbIm1ha2UiLCAiaW5zdGFsbCJdLCBjd2Q9c2VsZi5idWlsZF9kaXIpCisgICAgICAgIGlmIHJlbW92ZToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5idWlsZF9kaXIpCisKKyAgICBkZWYgaW5zdGFsbF9vcGVuc3NsKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5oYXNfb3BlbnNzbDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmhhc19zcmM6CisgICAgICAgICAgICAgICAgc2VsZi5fZG93bmxvYWRfb3BlbnNzbCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiQWxyZWFkeSBoYXMgc3JjIHt9Ii5mb3JtYXQoc2VsZi5zcmNfZmlsZSkpCisgICAgICAgICAgICBzZWxmLl91bnBhY2tfb3BlbnNzbCgpCisgICAgICAgICAgICBzZWxmLl9idWlsZF9vcGVuc3NsKCkKKyAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfb3BlbnNzbCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuaW5mbygiQWxyZWFkeSBoYXMgaW5zdGFsbGF0aW9uIHt9Ii5mb3JtYXQoc2VsZi5pbnN0YWxsX2RpcikpCisgICAgICAgICMgdmFsaWRhdGUgaW5zdGFsbGF0aW9uCisgICAgICAgIHZlcnNpb24gPSBzZWxmLm9wZW5zc2xfdmVyc2lvbgorICAgICAgICBpZiBzZWxmLnZlcnNpb24gbm90IGluIHZlcnNpb246CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHZlcnNpb24pCisKKyAgICBkZWYgdG91Y2hfcHltb2RzKHNlbGYpOgorICAgICAgICAjIGZvcmNlIGEgcmVidWlsZCBvZiBhbGwgbW9kdWxlcyB0aGF0IHVzZSBPcGVuU1NMIEFQSXMKKyAgICAgICAgZm9yIGZuYW1lIGluIHNlbGYubW9kdWxlX2ZpbGVzOgorICAgICAgICAgICAgb3MudXRpbWUoZm5hbWUpCisKKyAgICBkZWYgcmVjb21waWxlX3B5bW9kcyhzZWxmKToKKyAgICAgICAgbG9nLmluZm8oIlVzaW5nIE9wZW5TU0wgYnVpbGQgZnJvbSB7fSIuZm9ybWF0KHNlbGYuYnVpbGRfZGlyKSkKKyAgICAgICAgIyBvdmVyd3JpdGUgaGVhZGVyIGFuZCBsaWJyYXJ5IHNlYXJjaCBwYXRocworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbIkNQUEZMQUdTIl0gPSAiLUl7fSIuZm9ybWF0KHNlbGYuaW5jbHVkZV9kaXIpCisgICAgICAgIGVudlsiTERGTEFHUyJdID0gIi1Me30iLmZvcm1hdChzZWxmLmxpYl9kaXIpCisgICAgICAgICMgc2V0IHJwYXRoCisgICAgICAgIGVudlsiTERfUlVOX1BBVEgiXSA9IHNlbGYubGliX2RpcgorCisgICAgICAgIGxvZy5pbmZvKCJSZWJ1aWxkaW5nIFB5dGhvbiBtb2R1bGVzIikKKyAgICAgICAgc2VsZi50b3VjaF9weW1vZHMoKQorICAgICAgICBjbWQgPSBbIi4vcHl0aG9uIiwgInNldHVwLnB5IiwgImJ1aWxkIl0KKyAgICAgICAgc2VsZi5fc3VicHJvY2Vzc19jYWxsKGNtZCwgZW52PWVudikKKworICAgIGRlZiBjaGVja19weXNzbChzZWxmKToKKyAgICAgICAgdmVyc2lvbiA9IHNlbGYucHlzc2xfdmVyc2lvbgorICAgICAgICBpZiBzZWxmLnZlcnNpb24gbm90IGluIHZlcnNpb246CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHZlcnNpb24pCisKKyAgICBkZWYgcnVuX3B5dGVzdHMoc2VsZiwgKmFyZ3MpOgorICAgICAgICBjbWQgPSBbIi4vcHl0aG9uIiwgIi1tIiwgInRlc3QiXQorICAgICAgICBjbWQuZXh0ZW5kKGFyZ3MpCisgICAgICAgIHNlbGYuX3N1YnByb2Nlc3NfY2FsbChjbWQsIHN0ZG91dD1Ob25lKQorCisgICAgZGVmIHJ1bl9weXRob25fdGVzdHMoc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLnJlY29tcGlsZV9weW1vZHMoKQorICAgICAgICBzZWxmLmNoZWNrX3B5c3NsKCkKKyAgICAgICAgc2VsZi5ydW5fcHl0ZXN0cygqYXJncykKKworCitkZWYgbWFpbigqYXJncyk6CisgICAgYnVpbGRlcnMgPSBbXQorICAgIGZvciB2ZXJzaW9uIGluIE9QRU5TU0xfVkVSU0lPTlM6CisgICAgICAgIGlmIHZlcnNpb24gaW4gKCIwLjkuOGkiLCAiMC45LjhsIik6CisgICAgICAgICAgICBvcGVuc3NsX2NvbXBpbGVfYXJncyA9ICgibm8tYXNtIiwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcGVuc3NsX2NvbXBpbGVfYXJncyA9ICgpCisgICAgICAgIGJ1aWxkZXIgPSBCdWlsZFNTTCh2ZXJzaW9uLCBvcGVuc3NsX2NvbXBpbGVfYXJncykKKyAgICAgICAgYnVpbGRlci5pbnN0YWxsX29wZW5zc2woKQorICAgICAgICBidWlsZGVycy5hcHBlbmQoYnVpbGRlcikKKworICAgIGZvciBidWlsZGVyIGluIGJ1aWxkZXJzOgorICAgICAgICBidWlsZGVyLnJ1bl9weXRob25fdGVzdHMoKmFyZ3MpCisgICAgIyBmaW5hbCB0b3VjaAorICAgIGJ1aWxkZXIudG91Y2hfcHltb2RzKCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5JTkZPLAorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSIqKiogJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2UpcyIpCisgICAgYXJncyA9IHN5cy5hcmd2WzE6XQorICAgIGlmIG5vdCBhcmdzOgorICAgICAgICBhcmdzID0gWyItdW5ldHdvcmsiLCAiLXYiXQorICAgICAgICBhcmdzLmV4dGVuZChGVUxMX1RFU1RTKQorICAgIG1haW4oKmFyZ3MpCmRpZmYgLS1naXQgYS9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weSBiL1Rvb2xzL3N0cmluZ2JlbmNoL3N0cmluZ2JlbmNoLnB5CmluZGV4IDE0MmIzY2EuLjVhYmMyNWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3N0cmluZ2JlbmNoL3N0cmluZ2JlbmNoLnB5CisrKyBiL1Rvb2xzL3N0cmluZ2JlbmNoL3N0cmluZ2JlbmNoLnB5CkBAIC04MDgsNyArODA4LDcgQEAKIHByb2dyYW1tZXJzIHJlcG9ydCBzdWJzdGFudGlhbCBwcm9kdWN0aXZpdHkgZ2FpbnMgYW5kIGZlZWwgdGhlIGxhbmd1YWdlCiBlbmNvdXJhZ2VzIHRoZSBkZXZlbG9wbWVudCBvZiBoaWdoZXIgcXVhbGl0eSwgbW9yZSBtYWludGFpbmFibGUgY29kZS4KIAotUHl0aG9uIHJ1bnMgb24gV2luZG93cywgTGludXgvVW5peCwgTWFjIE9TIFgsIE9TLzIsIEFtaWdhLCBQYWxtCitQeXRob24gcnVucyBvbiBXaW5kb3dzLCBMaW51eC9Vbml4LCBNYWMgT1MgWCwgQW1pZ2EsIFBhbG0KIEhhbmRoZWxkcywgYW5kIE5va2lhIG1vYmlsZSBwaG9uZXMuIFB5dGhvbiBoYXMgYWxzbyBiZWVuIHBvcnRlZCB0byB0aGUKIEphdmEgYW5kIC5ORVQgdmlydHVhbCBtYWNoaW5lcy4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weSBiL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKaW5kZXggZjVhMWFmMy4uZjRjN2MwMyAxMDA2NDQKLS0tIGEvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQorKysgYi9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CkBAIC0yOTAsMjcgKzI5MCwyNyBAQAogCiBjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgogCi0gICAgZGVmIGVuY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6Ci0gICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsZXJyb3JzLGVuY29kaW5nXyVzKQorICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsIGVycm9ycywgZW5jb2RpbmdfJXMpCiAKLSAgICBkZWYgZGVjb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKLSAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxlcnJvcnMsZGVjb2RpbmdfJXMpCisgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCwgZXJyb3JzLCBkZWNvZGluZ18lcykKICcnJyAlIChlbmNvZGluZ25hbWUsIG5hbWUsIHN1ZmZpeCwgc3VmZml4KV0KICAgICBsLmFwcGVuZCgnJydcCiBjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CiAgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgotICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LHNlbGYuZXJyb3JzLGVuY29kaW5nXyVzKVswXQorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LCBzZWxmLmVycm9ycywgZW5jb2RpbmdfJXMpWzBdCiAKIGNsYXNzIEluY3JlbWVudGFsRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKICAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6Ci0gICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZGVjb2RpbmdfJXMpWzBdJycnICUKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCwgc2VsZi5lcnJvcnMsIGRlY29kaW5nXyVzKVswXScnJyAlCiAgICAgICAgIChzdWZmaXgsIHN1ZmZpeCkpCiAKICAgICBsLmFwcGVuZCgnJycKLWNsYXNzIFN0cmVhbVdyaXRlcihDb2RlYyxjb2RlY3MuU3RyZWFtV3JpdGVyKToKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYywgY29kZWNzLlN0cmVhbVdyaXRlcik6CiAgICAgcGFzcwogCi1jbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsY29kZWNzLlN0cmVhbVJlYWRlcik6CitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsIGNvZGVjcy5TdHJlYW1SZWFkZXIpOgogICAgIHBhc3MKIAogIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCkBAIC0zNDMsNyArMzQzLDcgQEAKICAgICBpZiBkZWNvZGluZ190YWJsZV9jb2RlOgogICAgICAgICBsLmFwcGVuZCgnJycKICMjIyBFbmNvZGluZyB0YWJsZQotZW5jb2RpbmdfdGFibGU9Y29kZWNzLmNoYXJtYXBfYnVpbGQoZGVjb2RpbmdfdGFibGUpCitlbmNvZGluZ190YWJsZSA9IGNvZGVjcy5jaGFybWFwX2J1aWxkKGRlY29kaW5nX3RhYmxlKQogJycnKQogICAgIGVsc2U6CiAgICAgICAgIGwuYXBwZW5kKCcnJwpkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgYi9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQppbmRleCBiYzNkMGNiLi4wOTQyNTA4IDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQorKysgYi9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQpAQCAtMzcsNyArMzcsNyBAQAogVkVSU0lPTiA9ICIzLjIiCiAKICMgVGhlIFVuaWNvZGUgRGF0YWJhc2UKLVVOSURBVEFfVkVSU0lPTiA9ICI2LjEuMCIKK1VOSURBVEFfVkVSU0lPTiA9ICI2LjMuMCIKIFVOSUNPREVfREFUQSA9ICJVbmljb2RlRGF0YSVzLnR4dCIKIENPTVBPU0lUSU9OX0VYQ0xVU0lPTlMgPSAiQ29tcG9zaXRpb25FeGNsdXNpb25zJXMudHh0IgogRUFTVEFTSUFOX1dJRFRIID0gIkVhc3RBc2lhbldpZHRoJXMudHh0IgpAQCAtNjgsNyArNjgsNyBAQAogCiBCSURJUkVDVElPTkFMX05BTUVTID0gWyAiIiwgIkwiLCAiTFJFIiwgIkxSTyIsICJSIiwgIkFMIiwgIlJMRSIsICJSTE8iLAogICAgICJQREYiLCAiRU4iLCAiRVMiLCAiRVQiLCAiQU4iLCAiQ1MiLCAiTlNNIiwgIkJOIiwgIkIiLCAiUyIsICJXUyIsCi0gICAgIk9OIiBdCisgICAgIk9OIiwgIkxSSSIsICJSTEkiLCAiRlNJIiwgIlBESSIgXQogCiBFQVNUQVNJQU5XSURUSF9OQU1FUyA9IFsgIkYiLCAiSCIsICJXIiwgIk5hIiwgIkEiLCAiTiIgXQogCkBAIC01NTIsNyArNTUyLDcgQEAKICAgICBwcmludCgiLyogUmV0dXJucyAxIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nIHRoZSBiaWRpcmVjdGlvbmFsIiwgZmlsZT1mcCkKICAgICBwcmludCgiICogdHlwZSAnV1MnLCAnQicgb3IgJ1MnIG9yIHRoZSBjYXRlZ29yeSAnWnMnLCAwIG90aGVyd2lzZS4iLCBmaWxlPWZwKQogICAgIHByaW50KCIgKi8iLCBmaWxlPWZwKQotICAgIHByaW50KCdpbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UocmVnaXN0ZXIgY29uc3QgUHlfVUNTNCBjaCknLCBmaWxlPWZwKQorICAgIHByaW50KCdpbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UoY29uc3QgUHlfVUNTNCBjaCknLCBmaWxlPWZwKQogICAgIHByaW50KCd7JywgZmlsZT1mcCkKICAgICBwcmludCgnICAgIHN3aXRjaCAoY2gpIHsnLCBmaWxlPWZwKQogCkBAIC01NzAsNyArNTcwLDcgQEAKICAgICBwcmludCgiICogcHJvcGVydHkgJ0JLJywgJ0NSJywgJ0xGJyBvciAnTkwnIG9yIGhhdmluZyBiaWRpcmVjdGlvbmFsIiwgZmlsZT1mcCkKICAgICBwcmludCgiICogdHlwZSAnQicsIDAgb3RoZXJ3aXNlLiIsIGZpbGU9ZnApCiAgICAgcHJpbnQoIiAqLyIsIGZpbGU9ZnApCi0gICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKHJlZ2lzdGVyIGNvbnN0IFB5X1VDUzQgY2gpJywgZmlsZT1mcCkKKyAgICBwcmludCgnaW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsoY29uc3QgUHlfVUNTNCBjaCknLCBmaWxlPWZwKQogICAgIHByaW50KCd7JywgZmlsZT1mcCkKICAgICBwcmludCgnICAgIHN3aXRjaCAoY2gpIHsnLCBmaWxlPWZwKQogICAgIGZvciBjb2RlcG9pbnQgaW4gc29ydGVkKGxpbmVicmVha3MpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pY29kZS9weXRob24tbWFwcGluZ3MvQ1AyNzMuVFhUIGIvVG9vbHMvdW5pY29kZS9weXRob24tbWFwcGluZ3MvQ1AyNzMuVFhUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjVlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy91bmljb2RlL3B5dGhvbi1tYXBwaW5ncy9DUDI3My5UWFQKQEAgLTAsMCArMSwyNTggQEAKKzB4MDAJMHgwMDAwCSNOVUxMIChOVUwpCisweDAxCTB4MDAwMQkjU1RBUlQgT0YgSEVBRElORyAoU09IKQorMHgwMgkweDAwMDIJI1NUQVJUIE9GIFRFWFQgKFNUWCkKKzB4MDMJMHgwMDAzCSNFTkQgT0YgVEVYVCAoRVRYKQorMHgwNAkweDAwOUMJI1NUUklORyBURVJNSU5BVE9SIChTVCkKKzB4MDUJMHgwMDA5CSNDSEFSQUNURVIgVEFCVUxBVElPTiAoSFQpCisweDA2CTB4MDA4NgkjU1RBUlQgT0YgU0VMRUNURUQgQVJFQSAoU1NBKQorMHgwNwkweDAwN0YJI0RFTEVURSAoREVMKQorMHgwOAkweDAwOTcJI0VORCBPRiBHVUFSREVEIEFSRUEgKEVQQSkKKzB4MDkJMHgwMDhECSNSRVZFUlNFIExJTkUgRkVFRCAoUkkpCisweDBBCTB4MDA4RQkjU0lOR0xFLVNISUZUIFRXTyAoU1MyKQorMHgwQgkweDAwMEIJI0xJTkUgVEFCVUxBVElPTiAoVlQpCisweDBDCTB4MDAwQwkjRk9STSBGRUVEIChGRikKKzB4MEQJMHgwMDBECSNDQVJSSUFHRSBSRVRVUk4gKENSKQorMHgwRQkweDAwMEUJI1NISUZUIE9VVCAoU08pCisweDBGCTB4MDAwRgkjU0hJRlQgSU4gKFNJKQorMHgxMAkweDAwMTAJI0RBVEFMSU5LIEVTQ0FQRSAoRExFKQorMHgxMQkweDAwMTEJI0RFVklDRSBDT05UUk9MIE9ORSAoREMxKQorMHgxMgkweDAwMTIJI0RFVklDRSBDT05UUk9MIFRXTyAoREMyKQorMHgxMwkweDAwMTMJI0RFVklDRSBDT05UUk9MIFRIUkVFIChEQzMpCisweDE0CTB4MDA5RAkjT1BFUkFUSU5HIFNZU1RFTSBDT01NQU5EIChPU0MpCisweDE1CTB4MDA4NQkjTkVYVCBMSU5FIChORUwpCisweDE2CTB4MDAwOAkjQkFDS1NQQUNFIChCUykKKzB4MTcJMHgwMDg3CSNFTkQgT0YgU0VMRUNURUQgQVJFQSAoRVNBKQorMHgxOAkweDAwMTgJI0NBTkNFTCAoQ0FOKQorMHgxOQkweDAwMTkJI0VORCBPRiBNRURJVU0gKEVNKQorMHgxQQkweDAwOTIJI1BSSVZBVEUgVVNFIFRXTyAoUFUyKQorMHgxQgkweDAwOEYJI1NJTkdMRS1TSElGVCBUSFJFRSAoU1MzKQorMHgxQwkweDAwMUMJI0ZJTEUgU0VQQVJBVE9SIChJUzQpCisweDFECTB4MDAxRAkjR1JPVVAgU0VQQVJBVE9SIChJUzMpCisweDFFCTB4MDAxRQkjUkVDT1JEIFNFUEFSQVRPUiAoSVMyKQorMHgxRgkweDAwMUYJI1VOSVQgU0VQQVJBVE9SIChJUzEpCisweDIwCTB4MDA4MAkjUEFERElORyBDSEFSQUNURVIgKFBBRCkKKzB4MjEJMHgwMDgxCSNISUdIIE9DVEVUIFBSRVNFVCAoSE9QKQorMHgyMgkweDAwODIJI0JSRUFLIFBFUk1JVFRFRCBIRVJFIChCUEgpCisweDIzCTB4MDA4MwkjTk8gQlJFQUsgSEVSRSAoTkJIKQorMHgyNAkweDAwODQJI0lOREVYIChJTkQpCisweDI1CTB4MDAwQQkjTElORSBGRUVEIChMRikKKzB4MjYJMHgwMDE3CSNFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLIChFVEIpCisweDI3CTB4MDAxQgkjRVNDQVBFIChFU0MpCisweDI4CTB4MDA4OAkjQ0hBUkFDVEVSIFRBQlVMQVRJT04gU0VUIChIVFMpCisweDI5CTB4MDA4OQkjQ0hBUkFDVEVSIFRBQlVMQVRJT04gV0lUSCBKVVNUSUZJQ0FUSU9OIChIVEopCisweDJBCTB4MDA4QQkjTElORSBUQUJVTEFUSU9OIFNFVCAoVlRTKQorMHgyQgkweDAwOEIJI1BBUlRJQUwgTElORSBGT1JXQVJEIChQTEQpCisweDJDCTB4MDA4QwkjUEFSVElBTCBMSU5FIEJBQ0tXQVJEIChQTFUpCisweDJECTB4MDAwNQkjRU5RVUlSWSAoRU5RKQorMHgyRQkweDAwMDYJI0FDS05PV0xFREdFIChBQ0spCisweDJGCTB4MDAwNwkjQkVMTCAoQkVMKQorMHgzMAkweDAwOTAJI0RFVklDRSBDT05UUk9MIFNUUklORyAoRENTKQorMHgzMQkweDAwOTEJI1BSSVZBVEUgVVNFIE9ORSAoUFUxKQorMHgzMgkweDAwMTYJI1NZTkNIUk9OT1VTIElETEUgKFNZTikKKzB4MzMJMHgwMDkzCSNTRVQgVFJBTlNNSVQgU1RBVEUgKFNUUykKKzB4MzQJMHgwMDk0CSNDQU5DRUwgQ0hBUkFDVEVSIChDQ0gpCisweDM1CTB4MDA5NQkjTUVTU0FHRSBXQUlUSU5HIChNVykKKzB4MzYJMHgwMDk2CSNTVEFSVCBPRiBHVUFSREVEIEFSRUEgKFNQQSkKKzB4MzcJMHgwMDA0CSNFTkQgT0YgVFJBTlNNSVNTSU9OIChFT1QpCisweDM4CTB4MDA5OAkjU1RBUlQgT0YgU1RSSU5HIChTT1MpCisweDM5CTB4MDA5OQkjU0lOR0xFIEdSQVBISUMgQ0hBUkFDVEVSIElOVFJPRFVDRVIgKFNHQ0kpCisweDNBCTB4MDA5QQkjU0lOR0xFIENIQVJBQ1RFUiBJTlRST0RVQ0VSIChTQ0kpCisweDNCCTB4MDA5QgkjQ09OVFJPTCBTRVFVRU5DRSBJTlRST0RVQ0VSIChDU0kpCisweDNDCTB4MDAxNAkjREVWSUNFIENPTlRST0wgRk9VUiAoREM0KQorMHgzRAkweDAwMTUJI05FR0FUSVZFIEFDS05PV0xFREdFIChOQUspCisweDNFCTB4MDA5RQkjUFJJVkFDWSBNRVNTQUdFIChQTSkKKzB4M0YJMHgwMDFBCSNTVUJTVElUVVRFIChTVUIpCisweDQwCTB4MDAyMAkjU1BBQ0UKKzB4NDEJMHgwMEEwCSNOTy1CUkVBSyBTUEFDRQorMHg0MgkweDAwRTIJI0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorMHg0MwkweDAwN0IJI0xFRlQgQ1VSTFkgQlJBQ0tFVAorMHg0NAkweDAwRTAJI0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkUKKzB4NDUJMHgwMEUxCSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFCisweDQ2CTB4MDBFMwkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERQorMHg0NwkweDAwRTUJI0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorMHg0OAkweDAwRTcJI0xBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorMHg0OQkweDAwRjEJI0xBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREUKKzB4NEEJMHgwMEM0CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisweDRCCTB4MDAyRQkjRlVMTCBTVE9QCisweDRDCTB4MDAzQwkjTEVTUy1USEFOIFNJR04KKzB4NEQJMHgwMDI4CSNMRUZUIFBBUkVOVEhFU0lTCisweDRFCTB4MDAyQgkjUExVUyBTSUdOCisweDRGCTB4MDAyMQkjRVhDTEFNQVRJT04gTUFSSworMHg1MAkweDAwMjYJI0FNUEVSU0FORAorMHg1MQkweDAwRTkJI0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUKKzB4NTIJMHgwMEVBCSNMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKzB4NTMJMHgwMEVCCSNMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworMHg1NAkweDAwRTgJI0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkUKKzB4NTUJMHgwMEVECSNMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFCisweDU2CTB4MDBFRQkjTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisweDU3CTB4MDBFRgkjTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKzB4NTgJMHgwMEVDCSNMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEdSQVZFCisweDU5CTB4MDA3RQkjVElMREUKKzB4NUEJMHgwMERDCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisweDVCCTB4MDAyNAkjRE9MTEFSIFNJR04KKzB4NUMJMHgwMDJBCSNBU1RFUklTSworMHg1RAkweDAwMjkJI1JJR0hUIFBBUkVOVEhFU0lTCisweDVFCTB4MDAzQgkjU0VNSUNPTE9OCisweDVGCTB4MDA1RQkjQ0lSQ1VNRkxFWCBBQ0NFTlQKKzB4NjAJMHgwMDJECSNIWVBIRU4tTUlOVVMKKzB4NjEJMHgwMDJGCSNTT0xJRFVTCisweDYyCTB4MDBDMgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKzB4NjMJMHgwMDVCCSNMRUZUIFNRVUFSRSBCUkFDS0VUCisweDY0CTB4MDBDMAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFCisweDY1CTB4MDBDMQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFCisweDY2CTB4MDBDMwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFCisweDY3CTB4MDBDNQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKzB4NjgJMHgwMEM3CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorMHg2OQkweDAwRDEJI0xBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERQorMHg2QQkweDAwRjYJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisweDZCCTB4MDAyQwkjQ09NTUEKKzB4NkMJMHgwMDI1CSNQRVJDRU5UIFNJR04KKzB4NkQJMHgwMDVGCSNMT1cgTElORQorMHg2RQkweDAwM0UJI0dSRUFURVItVEhBTiBTSUdOCisweDZGCTB4MDAzRgkjUVVFU1RJT04gTUFSSworMHg3MAkweDAwRjgJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFCisweDcxCTB4MDBDOQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFCisweDcyCTB4MDBDQQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKzB4NzMJMHgwMENCCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisweDc0CTB4MDBDOAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFCisweDc1CTB4MDBDRAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCisweDc2CTB4MDBDRQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKzB4NzcJMHgwMENGCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisweDc4CTB4MDBDQwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFCisweDc5CTB4MDA2MAkjR1JBVkUgQUNDRU5UCisweDdBCTB4MDAzQQkjQ09MT04KKzB4N0IJMHgwMDIzCSNOVU1CRVIgU0lHTgorMHg3QwkweDAwQTcJI1NFQ1RJT04gU0lHTgorMHg3RAkweDAwMjcJI0FQT1NUUk9QSEUKKzB4N0UJMHgwMDNECSNFUVVBTFMgU0lHTgorMHg3RgkweDAwMjIJI1FVT1RBVElPTiBNQVJLCisweDgwCTB4MDBEOAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorMHg4MQkweDAwNjEJI0xBVElOIFNNQUxMIExFVFRFUiBBCisweDgyCTB4MDA2MgkjTEFUSU4gU01BTEwgTEVUVEVSIEIKKzB4ODMJMHgwMDYzCSNMQVRJTiBTTUFMTCBMRVRURVIgQworMHg4NAkweDAwNjQJI0xBVElOIFNNQUxMIExFVFRFUiBECisweDg1CTB4MDA2NQkjTEFUSU4gU01BTEwgTEVUVEVSIEUKKzB4ODYJMHgwMDY2CSNMQVRJTiBTTUFMTCBMRVRURVIgRgorMHg4NwkweDAwNjcJI0xBVElOIFNNQUxMIExFVFRFUiBHCisweDg4CTB4MDA2OAkjTEFUSU4gU01BTEwgTEVUVEVSIEgKKzB4ODkJMHgwMDY5CSNMQVRJTiBTTUFMTCBMRVRURVIgSQorMHg4QQkweDAwQUIJI0xFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisweDhCCTB4MDBCQgkjUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisweDhDCTB4MDBGMAkjTEFUSU4gU01BTEwgTEVUVEVSIEVUSCAoSWNlbGFuZGljKQorMHg4RAkweDAwRkQJI0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEUKKzB4OEUJMHgwMEZFCSNMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKKzB4OEYJMHgwMEIxCSNQTFVTLU1JTlVTIFNJR04KKzB4OTAJMHgwMEIwCSNERUdSRUUgU0lHTgorMHg5MQkweDAwNkEJI0xBVElOIFNNQUxMIExFVFRFUiBKCisweDkyCTB4MDA2QgkjTEFUSU4gU01BTEwgTEVUVEVSIEsKKzB4OTMJMHgwMDZDCSNMQVRJTiBTTUFMTCBMRVRURVIgTAorMHg5NAkweDAwNkQJI0xBVElOIFNNQUxMIExFVFRFUiBNCisweDk1CTB4MDA2RQkjTEFUSU4gU01BTEwgTEVUVEVSIE4KKzB4OTYJMHgwMDZGCSNMQVRJTiBTTUFMTCBMRVRURVIgTworMHg5NwkweDAwNzAJI0xBVElOIFNNQUxMIExFVFRFUiBQCisweDk4CTB4MDA3MQkjTEFUSU4gU01BTEwgTEVUVEVSIFEKKzB4OTkJMHgwMDcyCSNMQVRJTiBTTUFMTCBMRVRURVIgUgorMHg5QQkweDAwQUEJI0ZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SCisweDlCCTB4MDBCQQkjTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SCisweDlDCTB4MDBFNgkjTEFUSU4gU01BTEwgTEVUVEVSIEFFCisweDlECTB4MDBCOAkjQ0VESUxMQQorMHg5RQkweDAwQzYJI0xBVElOIENBUElUQUwgTEVUVEVSIEFFCisweDlGCTB4MDBBNAkjQ1VSUkVOQ1kgU0lHTgorMHhBMAkweDAwQjUJI01JQ1JPIFNJR04KKzB4QTEJMHgwMERGCSNMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgUyAoR2VybWFuKQorMHhBMgkweDAwNzMJI0xBVElOIFNNQUxMIExFVFRFUiBTCisweEEzCTB4MDA3NAkjTEFUSU4gU01BTEwgTEVUVEVSIFQKKzB4QTQJMHgwMDc1CSNMQVRJTiBTTUFMTCBMRVRURVIgVQorMHhBNQkweDAwNzYJI0xBVElOIFNNQUxMIExFVFRFUiBWCisweEE2CTB4MDA3NwkjTEFUSU4gU01BTEwgTEVUVEVSIFcKKzB4QTcJMHgwMDc4CSNMQVRJTiBTTUFMTCBMRVRURVIgWAorMHhBOAkweDAwNzkJI0xBVElOIFNNQUxMIExFVFRFUiBZCisweEE5CTB4MDA3QQkjTEFUSU4gU01BTEwgTEVUVEVSIFoKKzB4QUEJMHgwMEExCSNJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLCisweEFCCTB4MDBCRgkjSU5WRVJURUQgUVVFU1RJT04gTUFSSworMHhBQwkweDAwRDAJI0xBVElOIENBUElUQUwgTEVUVEVSIEVUSCAoSWNlbGFuZGljKQorMHhBRAkweDAwREQJI0xBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURQorMHhBRQkweDAwREUJI0xBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOIChJY2VsYW5kaWMpCisweEFGCTB4MDBBRQkjUkVHSVNURVJFRCBTSUdOCisweEIwCTB4MDBBMgkjQ0VOVCBTSUdOCisweEIxCTB4MDBBMwkjUE9VTkQgU0lHTgorMHhCMgkweDAwQTUJI1lFTiBTSUdOCisweEIzCTB4MDBCNwkjTUlERExFIERPVAorMHhCNAkweDAwQTkJI0NPUFlSSUdIVCBTSUdOCisweEI1CTB4MDA0MAkjQ09NTUVSQ0lBTCBBVAorMHhCNgkweDAwQjYJI1BJTENST1cgU0lHTgorMHhCNwkweDAwQkMJI1ZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUgorMHhCOAkweDAwQkQJI1ZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRgorMHhCOQkweDAwQkUJI1ZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSUworMHhCQQkweDAwQUMJI05PVCBTSUdOCisweEJCCTB4MDA3QwkjVkVSVElDQUwgTElORQorMHhCQwkweDIwM0UJI09WRVJMSU5FCisweEJECTB4MDBBOAkjRElBRVJFU0lTCisweEJFCTB4MDBCNAkjQUNVVEUgQUNDRU5UCisweEJGCTB4MDBENwkjTVVMVElQTElDQVRJT04gU0lHTgorMHhDMAkweDAwRTQJI0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisweEMxCTB4MDA0MQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQQorMHhDMgkweDAwNDIJI0xBVElOIENBUElUQUwgTEVUVEVSIEIKKzB4QzMJMHgwMDQzCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisweEM0CTB4MDA0NAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRAorMHhDNQkweDAwNDUJI0xBVElOIENBUElUQUwgTEVUVEVSIEUKKzB4QzYJMHgwMDQ2CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisweEM3CTB4MDA0NwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRworMHhDOAkweDAwNDgJI0xBVElOIENBUElUQUwgTEVUVEVSIEgKKzB4QzkJMHgwMDQ5CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisweENBCTB4MDBBRAkjU09GVCBIWVBIRU4KKzB4Q0IJMHgwMEY0CSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKzB4Q0MJMHgwMEE2CSNCUk9LRU4gQkFSCisweENECTB4MDBGMgkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRQorMHhDRQkweDAwRjMJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEUKKzB4Q0YJMHgwMEY1CSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFCisweEQwCTB4MDBGQwkjTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKzB4RDEJMHgwMDRBCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisweEQyCTB4MDA0QgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSworMHhEMwkweDAwNEMJI0xBVElOIENBUElUQUwgTEVUVEVSIEwKKzB4RDQJMHgwMDRECSNMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisweEQ1CTB4MDA0RQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTgorMHhENgkweDAwNEYJI0xBVElOIENBUElUQUwgTEVUVEVSIE8KKzB4RDcJMHgwMDUwCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisweEQ4CTB4MDA1MQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgUQorMHhEOQkweDAwNTIJI0xBVElOIENBUElUQUwgTEVUVEVSIFIKKzB4REEJMHgwMEI5CSNTVVBFUlNDUklQVCBPTkUKKzB4REIJMHgwMEZCCSNMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKzB4REMJMHgwMDdECSNSSUdIVCBDVVJMWSBCUkFDS0VUCisweERECTB4MDBGOQkjTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRQorMHhERQkweDAwRkEJI0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEUKKzB4REYJMHgwMEZGCSNMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUworMHhFMAkweDAwRDYJI0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKzB4RTEJMHgwMEY3CSNESVZJU0lPTiBTSUdOCisweEUyCTB4MDA1MwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgUworMHhFMwkweDAwNTQJI0xBVElOIENBUElUQUwgTEVUVEVSIFQKKzB4RTQJMHgwMDU1CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisweEU1CTB4MDA1NgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVgorMHhFNgkweDAwNTcJI0xBVElOIENBUElUQUwgTEVUVEVSIFcKKzB4RTcJMHgwMDU4CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisweEU4CTB4MDA1OQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgWQorMHhFOQkweDAwNUEJI0xBVElOIENBUElUQUwgTEVUVEVSIFoKKzB4RUEJMHgwMEIyCSNTVVBFUlNDUklQVCBUV08KKzB4RUIJMHgwMEQ0CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorMHhFQwkweDAwNUMJI1JFVkVSU0UgU09MSURVUworMHhFRAkweDAwRDIJI0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRQorMHhFRQkweDAwRDMJI0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURQorMHhFRgkweDAwRDUJI0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERQorMHhGMAkweDAwMzAJI0RJR0lUIFpFUk8KKzB4RjEJMHgwMDMxCSNESUdJVCBPTkUKKzB4RjIJMHgwMDMyCSNESUdJVCBUV08KKzB4RjMJMHgwMDMzCSNESUdJVCBUSFJFRQorMHhGNAkweDAwMzQJI0RJR0lUIEZPVVIKKzB4RjUJMHgwMDM1CSNESUdJVCBGSVZFCisweEY2CTB4MDAzNgkjRElHSVQgU0lYCisweEY3CTB4MDAzNwkjRElHSVQgU0VWRU4KKzB4RjgJMHgwMDM4CSNESUdJVCBFSUdIVAorMHhGOQkweDAwMzkJI0RJR0lUIE5JTkUKKzB4RkEJMHgwMEIzCSNTVVBFUlNDUklQVCBUSFJFRQorMHhGQgkweDAwREIJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCisweEZDCTB4MDA1RAkjUklHSFQgU1FVQVJFIEJSQUNLRVQKKzB4RkQJMHgwMEQ5CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKKzB4RkUJMHgwMERBCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEUKKzB4RkYJMHgwMDlGCSNBUFBMSUNBVElPTiBQUk9HUkFNIENPTU1BTkQgKEFQQykKKworIAkgIAkgCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggNmJlNDFmNS4uMTAxZGQ0NCAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMSw2ICsxLDYgQEAKICMhIC9iaW4vc2gKICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5IGZvciBweXRob24gMy4zLgorIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkgZm9yIHB5dGhvbiAzLjQuCiAjCiAjIFJlcG9ydCBidWdzIHRvIDxodHRwOi8vYnVncy5weXRob24ub3JnLz4uCiAjCkBAIC01ODAsOCArNTgwLDggQEAKICMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgogUEFDS0FHRV9OQU1FPSdweXRob24nCiBQQUNLQUdFX1RBUk5BTUU9J3B5dGhvbicKLVBBQ0tBR0VfVkVSU0lPTj0nMy4zJwotUEFDS0FHRV9TVFJJTkc9J3B5dGhvbiAzLjMnCitQQUNLQUdFX1ZFUlNJT049JzMuNCcKK1BBQ0tBR0VfU1RSSU5HPSdweXRob24gMy40JwogUEFDS0FHRV9CVUdSRVBPUlQ9J2h0dHA6Ly9idWdzLnB5dGhvbi5vcmcvJwogUEFDS0FHRV9VUkw9JycKIApAQCAtNjIzLDggKzYyMywxMSBAQAogI2VuZGlmIgogCiBhY19zdWJzdF92YXJzPSdMVExJQk9CSlMKK0VOU1VSRVBJUAogU1JDRElSUwogVEhSRUFESEVBREVSUworTElCUEwKK1BZX0VOQUJMRV9TSEFSRUQKIEVYVF9TVUZGSVgKIFNPQUJJCiBMSUJDCkBAIC03MTAsNiArNzEzLDcgQEAKIE1BQ0hERVAKIEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYCiBGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgKK0ZSQU1FV09SS1BZVEhPTlcKIEZSQU1FV09SS0FMVElOU1RBTExMQVNUCiBGUkFNRVdPUktBTFRJTlNUQUxMRklSU1QKIEZSQU1FV09SS0lOU1RBTExMQVNUCkBAIC03OTAsNiArNzk0LDcgQEAKIGVuYWJsZV9zaGFyZWQKIGVuYWJsZV9wcm9maWxpbmcKIHdpdGhfcHlkZWJ1Zword2l0aF9oYXNoX2FsZ29yaXRobQogd2l0aF9saWJzCiB3aXRoX3N5c3RlbV9leHBhdAogd2l0aF9zeXN0ZW1fZmZpCkBAIC04MTEsNiArODE2LDcgQEAKIHdpdGhfbGliYwogZW5hYmxlX2JpZ19kaWdpdHMKIHdpdGhfY29tcHV0ZWRfZ290b3MKK3dpdGhfZW5zdXJlcGlwCiAnCiAgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcwogaG9zdF9hbGlhcwpAQCAtMTM2Miw3ICsxMzY4LDcgQEAKICAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCiAgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KICAgY2F0IDw8X0FDRU9GCi1cYGNvbmZpZ3VyZScgY29uZmlndXJlcyBweXRob24gMy4zIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KK1xgY29uZmlndXJlJyBjb25maWd1cmVzIHB5dGhvbiAzLjQgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgogCiBVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KIApAQCAtMTQyNyw3ICsxNDMzLDcgQEAKIAogaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KICAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCi0gICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBweXRob24gMy4zOiI7OworICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgcHl0aG9uIDMuNDoiOzsKICAgIGVzYWMKICAgY2F0IDw8XF9BQ0VPRgogCkBAIC0xNDUzLDcgKzE0NTksNyBAQAogICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCiAgIC0td2l0aC11bml2ZXJzYWwtYXJjaHM9QVJDSAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgYXJjaGl0ZWN0dXJlcyBmb3IgdW5pdmVyc2FsIGJ1aWxkICgiMzItYml0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIgb3IgImFsbCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICI2NC1iaXQiLCAiMy13YXkiLCAiaW50ZWwiLCAiaW50ZWwtMzIiLCBvciAiYWxsIikKICAgLS13aXRoLWZyYW1ld29yay1uYW1lPUZSQU1FV09SSwogICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBuYW1lIG9mIHRoZSBmcmFtZXdvcmsgYnVpbHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCAtLWVuYWJsZS1mcmFtZXdvcmsKQEAgLTE0NjMsNiArMTQ2OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyCiAgIC0td2l0aC1zdWZmaXg9LmV4ZSAgICAgIHNldCBleGVjdXRhYmxlIHN1ZmZpeAogICAtLXdpdGgtcHlkZWJ1ZyAgICAgICAgICBidWlsZCB3aXRoIFB5X0RFQlVHIGRlZmluZWQKKyAgLS13aXRoLWhhc2gtYWxnb3JpdGhtPVtmbnZ8c2lwaGFzaDI0XQorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgaGFzaCBhbGdvcml0aG0KICAgLS13aXRoLWxpYnM9J2xpYjEgLi4uJyAgbGluayBhZ2FpbnN0IGFkZGl0aW9uYWwgbGlicwogICAtLXdpdGgtc3lzdGVtLWV4cGF0ICAgICBidWlsZCBweWV4cGF0IG1vZHVsZSB1c2luZyBhbiBpbnN0YWxsZWQgZXhwYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeQpAQCAtMTQ5Miw2ICsxNTAwLDggQEAKICAgLS13aXRoKG91dCktY29tcHV0ZWQtZ290b3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGNvbXB1dGVkIGdvdG9zIGluIGV2YWx1YXRpb24gbG9vcCAoZW5hYmxlZCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IG9uIHN1cHBvcnRlZCBjb21waWxlcnMpCisgIC0td2l0aChvdXQpLWVuc3VyZXBpcD1bPXVwZ3JhZGVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YWxsIiBvciAidXBncmFkZSIgdXNpbmcgYnVuZGxlZCBwaXAKIAogU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CiAgIE1BQ0hERVAgICAgIG5hbWUgZm9yIG1hY2hpbmUtZGVwZW5kZW50IGxpYnJhcnkgZmlsZXMKQEAgLTE1NzAsNyArMTU4MCw3IEBACiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KICAgY2F0IDw8XF9BQ0VPRgotcHl0aG9uIGNvbmZpZ3VyZSAzLjMKK3B5dGhvbiBjb25maWd1cmUgMy40CiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkKIAogQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpAQCAtMjQwOSw3ICsyNDE5LDcgQEAKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgogCi1JdCB3YXMgY3JlYXRlZCBieSBweXRob24gJGFzX21lIDMuMywgd2hpY2ggd2FzCitJdCB3YXMgY3JlYXRlZCBieSBweXRob24gJGFzX21lIDMuNCwgd2hpY2ggd2FzCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICAkICQwICRACkBAIC0yOTc5LDcgKzI5ODksNyBAQAogbXYgY29uZmRlZnMuaC5uZXcgY29uZmRlZnMuaAogCiAKLVZFUlNJT049My4zCitWRVJTSU9OPTMuNAogCiAjIFZlcnNpb24gbnVtYmVyIG9mIFB5dGhvbidzIG93biBzaGFyZWQgbGlicmFyeSBmaWxlLgogCkBAIC0zMDM1LDcgKzMwNDUsNyBAQAogCQkjIExvY2F0ZSB0aGUgYmVzdCB1c2FibGUgU0RLLCBzZWUgTWFjL1JFQURNRS50eHQgZm9yIG1vcmUKIAkJIyBpbmZvcm1hdGlvbgogCQllbmFibGV2YWw9ImAvdXNyL2Jpbi94Y29kZWJ1aWxkIC12ZXJzaW9uIC1zZGsgbWFjb3N4IFBhdGggMj4vZGV2L251bGxgIgotCQlpZiB0ZXN0IC16ICIke2VuYWJsZXZhbH0iCisJCWlmICEgKCBlY2hvICRlbmFibGV2YWwgfCBncmVwIC1FICdcLnNkaycgMT4vZGV2L251bGwgKQogCQl0aGVuCiAJCQllbmFibGV2YWw9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkawogCQkJaWYgdGVzdCAhIC1kICIke2VuYWJsZXZhbH0iCkBAIC0zMDc4LDYgKzMwODgsNyBAQAogCiAKIAorQVJDSF9SVU5fMzJCSVQ9IiIKIAogIyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zIHdlIHByZWZlciB0byBzZWxlY3QgJzMyLWJpdCcgaWYgYXZhaWxhYmxlLAogIyBvdGhlcndpc2UgdXNlICdpbnRlbCcKQEAgLTMwODYsNyArMzA5Nyw3IEBACiB0aGVuCiAJaWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgogCXRoZW4KLQkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCisJCWlmIHRlc3QgLXogImAvdXNyL2Jpbi9maWxlIC1MICIke1VOSVZFUlNBTFNES30vdXNyL2xpYi9saWJTeXN0ZW0uZHlsaWIiIHwgZ3JlcCBwcGNgIgogCQl0aGVuCiAJCQlVTklWRVJTQUxfQVJDSFM9ImludGVsIgogCQlmaQpAQCAtMzEwMCwxOSArMzExMSwxOCBAQAogIyBDaGVjayB3aGV0aGVyIC0td2l0aC11bml2ZXJzYWwtYXJjaHMgd2FzIGdpdmVuLgogaWYgdGVzdCAiJHt3aXRoX3VuaXZlcnNhbF9hcmNocytzZXR9IiA9IHNldDsgdGhlbiA6CiAgIHdpdGh2YWw9JHdpdGhfdW5pdmVyc2FsX2FyY2hzOwotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aHZhbCIgPiY1Ci0kYXNfZWNobyAiJHdpdGh2YWwiID4mNjsgfQogCVVOSVZFUlNBTF9BUkNIUz0iJHdpdGh2YWwiCiAKLWVsc2UKLQotIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtVTklWRVJTQUxfQVJDSFN9IiA+JjUKLSRhc19lY2hvICIke1VOSVZFUlNBTF9BUkNIU30iID4mNjsgfQotCiBmaQogCi0KLQoraWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke1VOSVZFUlNBTF9BUkNIU30iID4mNQorJGFzX2VjaG8gIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPiY2OyB9CitlbHNlCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQogCiAKICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZnJhbWV3b3JrLW5hbWUgd2FzIGdpdmVuLgpAQCAtMzE0Nyw2ICszMTU3LDcgQEAKIAkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9CiAJCUZSQU1FV09SS0FMVElOU1RBTExGSVJTVD0KIAkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9CisJCUZSQU1FV09SS1BZVEhPTlc9CiAJCWlmIHRlc3QgIngke3ByZWZpeH0iID0gInhOT05FIjsgdGhlbgogCQkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIke2FjX2RlZmF1bHRfcHJlZml4fSIKIAkJZWxzZQpAQCAtMzE2MSw2ICszMTcyLDcgQEAKIAkJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPSJmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlICIKIAkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scyIKIAkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyIKKwkJRlJBTUVXT1JLUFlUSE9OVz0iZnJhbWV3b3JrcHl0aG9udyIKIAkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCiAKIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiIDsgdGhlbgpAQCAtMzIyOCw2ICszMjQwLDcgQEAKIAlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9CisJRlJBTUVXT1JLUFlUSE9OVz0KIAlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCiAJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJZWxzZQpAQCAtMzI1MCw2ICszMjYzLDcgQEAKIAogCiAKKwogIyNBQ19BUkdfV0lUSChkeWxkLAogIyMgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWR5bGRdLAogIyMgICAgICAgICAgICAgICAgICAgICAgICAgICBbVXNlIChPcGVuU3RlcHxSaGFwc29keSkgZHluYW1pYyBsaW5rZXJdKSkKQEAgLTM0MzEsNiArMzQ0NSwyMSBAQAogCiBmaQogCisjIE9uIEhQLVVYIG1ic3RhdGVfdCByZXF1aXJlcyBfSU5DTFVERV9fU1REQ19BMV9TT1VSQ0UKK2Nhc2UgJGFjX3N5c19zeXN0ZW0gaW4KKyAgaHAqfEhQKikKKyAgICBkZWZpbmVfc3RkY19hMT15ZXM7OworICAqKQorICAgIGRlZmluZV9zdGRjX2ExPW5vOzsKK2VzYWMKKworaWYgdGVzdCAkZGVmaW5lX3N0ZGNfYTEgPSB5ZXMKK3RoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgX0lOQ0xVREVfX1NURENfQTFfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCitmaQorCiAjCiAjIFNHSSBjb21waWxlcnMgYWxsb3cgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIGJvdGggdGhlIEFCSSBhbmQgdGhlCiAjIElTQSBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlc2Ugc3dpdGNoZXMsCkBAIC00ODAxLDE2ICs0ODMwLDE2IEBACiBmaQogaWYgdGVzdCAiJHByZXNldF9jeHgiICE9ICIkQ1hYIgogdGhlbgotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfToKIAogICBCeSBkZWZhdWx0LCBkaXN0dXRpbHMgd2lsbCBidWlsZCBDKysgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBcIiRDWFhcIi4KICAgSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRoZW4gc2V0IENYWCBvbiB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4KICAgIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6CiskYXNfZWNobyAiJGFzX21lOgogCiAgIEJ5IGRlZmF1bHQsIGRpc3R1dGlscyB3aWxsIGJ1aWxkIEMrKyBleHRlbnNpb24gbW9kdWxlcyB3aXRoIFwiJENYWFwiLgogICBJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdGhlbiBzZXQgQ1hYIG9uIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgotICAiID4mMjt9CisgICIgPiY2O30KIGZpCiAKIApAQCAtNTU4NCw2ICs1NjEzLDcgQEAKIAogIyBPdGhlciBwbGF0Zm9ybXMgZm9sbG93CiBpZiB0ZXN0ICRlbmFibGVfc2hhcmVkID0gInllcyI7IHRoZW4KKyAgUFlfRU5BQkxFX1NIQVJFRD0xCiAKICRhc19lY2hvICIjZGVmaW5lIFB5X0VOQUJMRV9TSEFSRUQgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTU2NDEsNiArNTY3MSw3IEBACiAKICAgZXNhYwogZWxzZSAjIHNoYXJlZCBpcyBkaXNhYmxlZAorICBQWV9FTkFCTEVfU0hBUkVEPTAKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCiAgICAgICAgICAgQkxETElCUkFSWT0nJChMSUJSQVJZKScKQEAgLTYzODEsNiArNjQxMiw0OSBAQAogICAgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLVduby11bnVzZWQtcmVzdWx0IgogICAgIGZpCiAKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQuLi4gIiA+JjY7IH0KKyAgICAgYWNfc2F2ZV9jYz0iJENDIgorICAgICBDQz0iJENDIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgaWYgJHthY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgICBhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZz15ZXMKKworZWxzZQorCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgICAgIENDPSIkYWNfc2F2ZV9jYyIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmciID4mNjsgfQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcgPSB5ZXMKKyAgICB0aGVuCisgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICBmaQorCiAgICAgIyBpZiB1c2luZyBnY2Mgb24gYWxwaGEsIHVzZSAtbWllZWUgdG8gZ2V0IChuZWFyKSBmdWxsIElFRUUgNzU0CiAgICAgIyBzdXBwb3J0LiAgV2l0aG91dCB0aGlzLCB0cmVhdG1lbnQgb2Ygc3Vibm9ybWFscyBkb2Vzbid0IGZvbGxvdwogICAgICMgdGhlIHN0YW5kYXJkLgpAQCAtNjM5NCwxMTMgKzY0NjgsMTI0IEBACiAJU0NPX1NWKikKIAkgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLW00ODYgLURTQ081IgogCSAgICA7OwotCSMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KLQlEYXJ3aW4qKQotCSAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAotCSAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KLSAgICAgICAgICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYwotCSAgICB0aGVuCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQiID4mNQorCisgICAgIyBpcyB0aGVyZSBhbnkgb3RoZXIgY29tcGlsZXIgb24gRGFyd2luIGJlc2lkZXMgZ2NjPworICAgIERhcndpbiopCisgICAgICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCisgICAgICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgorICAgICAgICBpZiB0ZXN0ICIke0NDfSIgPSBnY2MKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZC4uLiAiID4mNjsgfQotCQljYXNlICIke1VOSVZFUlNBTFNES30iIGluCi0JCSovTWFjT1NYMTAuNHUuc2RrKQotCQkJIyBCdWlsZCB1c2luZyAxMC40IFNESywgZm9yY2UgdXNhZ2Ugb2YgZ2NjIHdoZW4gdGhlCi0JCQkjIGNvbXBpbGVyIGlzIGdjYywgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgZ2V0IHZlcnkKLQkJCSMgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIHdoZW4gYnVpbGRpbmcgb24gT1NYIDEwLjYKLQkJCUNDPWdjYy00LjAKLQkJCUNQUD1jcHAtNC4wCi0JCQk7OwotCQllc2FjCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorICAgICAgICAgICAgY2FzZSAiJHtVTklWRVJTQUxTREt9IiBpbgorICAgICAgICAgICAgKi9NYWNPU1gxMC40dS5zZGspCisgICAgICAgICAgICAgICAgIyBCdWlsZCB1c2luZyAxMC40IFNESywgZm9yY2UgdXNhZ2Ugb2YgZ2NjIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgIyBjb21waWxlciBpcyBnY2MsIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGdldCB2ZXJ5CisgICAgICAgICAgICAgICAgIyBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZXMgd2hlbiBidWlsZGluZyBvbiBPU1ggMTAuNgorICAgICAgICAgICAgICAgIENDPWdjYy00LjAKKyAgICAgICAgICAgICAgICBDUFA9Y3BwLTQuMAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKICRhc19lY2hvICIkQ0MiID4mNjsgfQotCSAgICBmaQorICAgICAgICBmaQogCisgICAgICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAzMi1iaXQpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDY0LWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBhbGwpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbC0zMikKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9IiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAzLXdheSkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAicHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheSIgIiRMSU5FTk8iIDUKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCiAKLQkgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJVU5JVkVSU0FMX0FSQ0hfRkxBR1M9IiIKLQkgICAgICAgIGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMyLWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9IiIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiNjQtYml0IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgICAgIENGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCisgICAgICAgICAgICBMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCisgICAgICAgICAgICBpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIgorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIENQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAjIENhbGN1bGF0ZSBhbiBhcHByb3ByaWF0ZSBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZDoKKyAgICAgICAgIyBUaGUgZGVwbG95bWVudCB0YXJnZXQgdmFsdWUgaXMgdXNlZCBleHBsaWNpdGx5IHRvIGVuYWJsZSBjZXJ0YWluCisgICAgICAgICMgZmVhdHVyZXMgYXJlIGVuYWJsZWQgKHN1Y2ggYXMgYnVpbHRpbiBsaWJlZGl0IHN1cHBvcnQgZm9yIHJlYWRsaW5lKQorICAgICAgICAjIHRocm91Z2ggdGhlIHVzZSBvZiBBcHBsZSdzIEF2YWlsYWJpbGl5IE1hY3JvcyBhbmQgaXMgdXNlZCBhcyBhCisgICAgICAgICMgY29tcG9uZW50IG9mIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgZGlzdHV0aWxzLmdldF9wbGF0Zm9ybSgpLgorICAgICAgICAjCisgICAgICAgICMgVXNlIHRoZSB2YWx1ZSBmcm9tOgorICAgICAgICAjIDEuIHRoZSBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc3BlY2lmaWVkCisgICAgICAgICMgMi4gdGhlIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbiBvZiB0aGUgYnVpbGQgbWFjaGluZSBpZiA+PSAxMC42CisgICAgICAgICMgMy4gSWYgcnVubmluZyBvbiBPUyBYIDEwLjMgdGhyb3VnaCAxMC41LCB1c2UgdGhlIGxlZ2FjeSB0ZXN0cworICAgICAgICAjICAgICAgIGJlbG93IHRvIHBpY2sgZWl0aGVyIDEwLjMsIDEwLjQsIG9yIDEwLjUgYXMgdGhlIHRhcmdldC4KKyAgICAgICAgIyA0LiBJZiB3ZSBhcmUgcnVubmluZyBvbiBPUyBYIDEwLjIgb3IgZWFybGllciwgZ29vZCBsdWNrIQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJpbnRlbCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIHRvIHVzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGljaCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgdG8gdXNlLi4uICIgPiY2OyB9CisgICAgICAgIGN1cl90YXJnZXQ9YHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uIHwgc2VkICdzL1woMTBcLlswLTldKlwpLiovXDEvJ2AKKyAgICAgICAgaWYgdGVzdCAke2N1cl90YXJnZXR9ICc+JyAxMC4yICYmIFwKKyAgICAgICAgICAgdGVzdCAke2N1cl90YXJnZXR9ICc8JyAxMC42CisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGN1cl90YXJnZXQ9MTAuMworICAgICAgICAgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9CisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgICAgICBhbGx8My13YXl8aW50ZWx8NjQtYml0KQorICAgICAgICAgICAgICAgICAgICAjIFRoZXNlIGNvbmZpZ3VyYXRpb25zIHdlcmUgZmlyc3Qgc3VwcG9ydGVkIGluIDEwLjUKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0nMTAuNScKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiIKKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICMgMTAuNCB3YXMgdGhlIGZpcnN0IHJlbGVhc2UgdG8gc3VwcG9ydCBJbnRlbCBhcmNocworICAgICAgICAgICAgICAgICAgICBjdXJfdGFyZ2V0PSIxMC40IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19CiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMtd2F5IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCisgICAgICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKKyAgICAgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCisgICAgICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KKyAgICAgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKKyAgICAgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICAgICAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIiA+JjUKKyRhc19lY2hvICIkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIiA+JjY7IH0KIAotCQkgZWxzZQotCSAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gInByb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXkiICIkTElORU5PIiA1Ci0KLQkJIGZpCi0KLQotCQlDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgotCQlpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIgotCQl0aGVuCi0JCQlDRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgotCQkJTERGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgotCQkJQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCi0JCWZpCi0JICAgIGZpCi0KLQkgICAgIyBDYWxjdWxhdGUgdGhlIHJpZ2h0IGRlcGxveW1lbnQgdGFyZ2V0IGZvciB0aGlzIGJ1aWxkLgotCSAgICAjCi0JICAgIGN1cl90YXJnZXQ9YHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uIHwgc2VkICdzL1woMTBcLlswLTldKlwpLiovXDEvJ2AKLQkgICAgaWYgdGVzdCAke2N1cl90YXJnZXR9ICc+JyAxMC4yICYmIFwKLQkgICAgICAgdGVzdCAke2N1cl90YXJnZXR9ICc8JyAxMC42Ci0JICAgIHRoZW4KLQkJICAgIGN1cl90YXJnZXQ9MTAuMwotCQkgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9OyB0aGVuCi0JCQkgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxfQVJDSFN9IiA9ICJhbGwiOyB0aGVuCi0JCQkJICAgICMgRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgcGxhdGZvcm0gZm9yIGEKLQkJCQkgICAgIyA0LXdheSB1bml2ZXJzYWwgYnVpbGQgaXMgT1NYIDEwLjUsCi0JCQkJICAgICMgdGhhdCdzIHRoZSBmaXJzdCBPUyByZWxlYXNlIHdoZXJlCi0JCQkJICAgICMgNC13YXkgYnVpbGRzIG1ha2Ugc2Vuc2UuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiMy13YXkiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiaW50ZWwiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiNjQtYml0IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCQkJICAgIGZpCi0JCSAgICBlbHNlCi0JCQkgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiI7IHRoZW4KLQkJCQkgICAgIyBPbiBJbnRlbCBtYWNzIGRlZmF1bHQgdG8gYSBkZXBsb3ltZW50Ci0JCQkJICAgICMgdGFyZ2V0IG9mIDEwLjQsIHRoYXQncyB0aGUgZmlyc3QgT1NYCi0JCQkJICAgICMgcmVsZWFzZSB3aXRoIEludGVsIHN1cHBvcnQuCi0JCQkJICAgIGN1cl90YXJnZXQ9IjEwLjQiCi0JCQkgICAgZmkKLQkJICAgIGZpCi0JICAgIGZpCi0JICAgIENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtJHtjdXJfdGFyZ2V0fX0KLQotCSAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCi0JICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKLQkgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCi0JICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KLQkgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKLQkgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAotCSAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCi0KLQkgICAgOzsKKyAgICAgICAgIyBlbmQgb2YgRGFyd2luKiB0ZXN0cworICAgICAgICA7OwogICAgIGVzYWMKICAgICA7OwogCkBAIC02NTI3LDQ0ICs2NjEyLDYgQEAKIAlCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAkYWNfYXJjaF9mbGFncyIKIGZpCiAKLSMgQ2hlY2sgd2hldGhlciBHQ0Mgc3VwcG9ydHMgUHlBcmdfUGFyc2VUdXBsZSBmb3JtYXQKLWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGdjYyBzdXBwb3J0cyBQYXJzZVR1cGxlIF9fZm9ybWF0X18iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBnY2Mgc3VwcG9ydHMgUGFyc2VUdXBsZSBfX2Zvcm1hdF9fLi4uICIgPiY2OyB9Ci0gIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdmb3JtYXQiCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotICAgIHZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpOwotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUgMSIgPj5jb25mZGVmcy5oCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi1lbHNlCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDRkxBR1M9JHNhdmVfQ0ZMQUdTCi1maQotCiAjIE9uIHNvbWUgY29tcGlsZXJzLCBwdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQgZnVydGhlciBvcHRpb25zCiAjIChlLmcuIE1hY09TIFgpLiBPbiBzb21lIG9mIHRoZXNlIHN5c3RlbXMsIHRoZSBjb21waWxlciB3aWxsIG5vdAogIyBjb21wbGFpbiBpZiB1bmFjY2VwdGVkIG9wdGlvbnMgYXJlIHBhc3NlZCAoZS5nLiBnY2Mgb24gTWFjIE9TIFgpLgpAQCAtNjkzNiw3ICs2OTgzLDggQEAKIHN5cy9zdGF0Lmggc3lzL3N5c2NhbGwuaCBzeXMvc3lzX2RvbWFpbi5oIHN5cy90ZXJtaW8uaCBzeXMvdGltZS5oIFwKIHN5cy90aW1lcy5oIHN5cy90eXBlcy5oIHN5cy91aW8uaCBzeXMvdW4uaCBzeXMvdXRzbmFtZS5oIHN5cy93YWl0LmggcHR5LmggXAogbGlidXRpbC5oIHN5cy9yZXNvdXJjZS5oIG5ldHBhY2tldC9wYWNrZXQuaCBzeXNleGl0cy5oIGJsdWV0b290aC5oIFwKLWJsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggc3Bhd24uaCB1dGlsLmggYWxsb2NhLmgKK2JsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggc3Bhd24uaCB1dGlsLmggYWxsb2NhLmggZW5kaWFuLmggXAorc3lzL2VuZGlhbi5oCiBkbyA6CiAgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgpAQCAtNzIyOSw3ICs3Mjc3LDcgQEAKIAogCiAjIE9uIExpbnV4LCBjYW4uaCBhbmQgY2FuL3Jhdy5oIHJlcXVpcmUgc3lzL3NvY2tldC5oCi1mb3IgYWNfaGVhZGVyIGluIGxpbnV4L2Nhbi5oIGxpbnV4L2Nhbi9yYXcuaAorZm9yIGFjX2hlYWRlciBpbiBsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmggbGludXgvY2FuL2JjbS5oCiBkbyA6CiAgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgpAQCAtNzMxMCw2ICs3MzU4LDQzIEBACiAKIGZpCiAKKyMgYnl0ZSBzd2FwcGluZworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGU2NHRvaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGU2NHRvaC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaWZkZWYgSEFWRV9FTkRJQU5fSAorI2luY2x1ZGUgPGVuZGlhbi5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1NZU19FTkRJQU5fSCkKKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyAgIGxlNjR0b2goMSkKKyAgOworICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hhc19sZTY0dG9oPXllcworZWxzZQorICBhY19jdl9oYXNfbGU2NHRvaD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhc19sZTY0dG9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGFzX2xlNjR0b2giID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X2hhc19sZTY0dG9oIiA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSFRPTEU2NCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKwogIyBFbmFibGluZyBMRlMgb24gU29sYXJpcyAoMi42IHRvIDkpIHdpdGggZ2NjIDIuOTUgdHJpZ2dlcnMgYSBidWcgaW4KICMgdGhlIHN5c3RlbSBoZWFkZXJzOiBJZiBfWE9QRU5fU09VUkNFIGFuZCBfTEFSR0VGSUxFX1NPVVJDRSBhcmUKICMgZGVmaW5lZCwgYnV0IHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHByYWdtYSByZWRlZmluZV9leHRuYW1lLApAQCAtODI3Niw3ICs4MzYxLDYgQEAKIGVzYWMKIAogCi1BUkNIX1JVTl8zMkJJVD0iIgogCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogICBEYXJ3aW4vWzAxNTY3XVwuLiopCkBAIC04MzQ4LDE0ICs4NDMyLDEyIEBACiAgICAgCQk7OwogICAgIAllc2FjCiAKLQkjQVJDSF9SVU5fMzJCSVQ9InRydWUiCiAgICAgZmkKIAogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQiIC1sU3lzdGVtIC1sU3lzdGVtU3R1YnMgLWFyY2hfb25seSAke01BQ09TWF9ERUZBVUxUX0FSQ0h9IgogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQnIC1pbnN0YWxsX25hbWUgJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICQoVkVSU0lPTikgLWN1cnJlbnRfdmVyc2lvbiAkKFZFUlNJT04pJzs7CiBlc2FjCi0KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0tZW5hYmxlLWZyYW1ld29yayIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgLS1lbmFibGUtZnJhbWV3b3JrLi4uICIgPiY2OyB9CiBpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIKQEAgLTg0ODMsOSArODU2NSw2IEBACiAKIAkJaWYgdGVzdCAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gJz4nIDEwLjIKIAkJdGhlbgotCQkJaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJCQlMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCi0JCQlmaQogCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKIAkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCkBAIC04NjEzLDYgKzg2OTIsMTIgQEAKIAkjIC11IGxpYnN5c19zIHB1bGxzIGluIGFsbCBzeW1ib2xzIGluIGxpYnN5cwogCURhcndpbi8qKQogCQlMSU5LRk9SU0hBUkVEPSIkZXh0cmFfdW5kZWZzIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24iCisKKwkJIyBJc3N1ZSAjMTgwNzU6IHRoZSBkZWZhdWx0IG1heGltdW0gc3RhY2sgc2l6ZSAoOE1CeXRlcykgaXMgdG9vCisJCSMgc21hbGwgZm9yIHRoZSBkZWZhdWx0IHJlY3Vyc2lvbiBsaW1pdC4gSW5jcmVhc2UgdGhlIHN0YWNrIHNpemUKKwkJIyB0byBlbnN1cmUgdGhhdCB0ZXN0cyBkb24ndCBjcmFzaAorCQlMSU5LRk9SU0hBUkVEPSItV2wsLXN0YWNrX3NpemUsMTAwMDAwMCAkTElOS0ZPUlNIQVJFRCIKKwogCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIKIAkJdGhlbgogCQkJTElOS0ZPUlNIQVJFRD0iJExJTktGT1JTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCkBAIC04OTY3LDYgKzkwNTIsNzkgQEAKIAkqKSA7OwogZXNhYwogCisjIGNoZWNrIGZvciBzeXN0ZW1zIHRoYXQgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhbGlnbmVkX3JlcXVpcmVkPXllcworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludCBtYWluKCkKK3sKKyAgICBjaGFyIHNbMTZdOworICAgIGludCBpLCAqcDEsICpwMjsKKyAgICBmb3IgKGk9MDsgaSA8IDE2OyBpKyspCisgICAgICAgIHNbaV0gPSBpOworICAgIHAxID0gKGludCopKHMrMSk7CisgICAgcDIgPSAoaW50KikocysyKTsKKyAgICBpZiAoKnAxID09ICpwMikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFsaWduZWRfcmVxdWlyZWQ9bm8KK2Vsc2UKKyAgYWxpZ25lZF9yZXF1aXJlZD15ZXMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2lmIHRlc3QgIiRhbGlnbmVkX3JlcXVpcmVkIiA9IHllcyA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BTElHTkVEX1JFUVVJUkVEIDEiID4+Y29uZmRlZnMuaAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbGlnbmVkX3JlcXVpcmVkIiA+JjUKKyRhc19lY2hvICIkYWxpZ25lZF9yZXF1aXJlZCIgPiY2OyB9CisKKworIyBzdHIsIGJ5dGVzIGFuZCBtZW1vcnl2aWV3IGhhc2ggYWxnb3JpdGhtCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS13aXRoLWhhc2gtYWxnb3JpdGhtIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtLXdpdGgtaGFzaC1hbGdvcml0aG0uLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1oYXNoX2FsZ29yaXRobSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfaGFzaF9hbGdvcml0aG0rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2hhc2hfYWxnb3JpdGhtOworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICIkd2l0aHZhbCIgPiY2OyB9CitjYXNlICIkd2l0aHZhbCIgaW4KKyAgICBzaXBoYXNoMjQpCisgICAgICAgICRhc19lY2hvICIjZGVmaW5lIFB5X0hBU0hfQUxHT1JJVEhNIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIDs7CisgICAgZm52KQorICAgICAgICAkYXNfZWNobyAiI2RlZmluZSBQeV9IQVNIX0FMR09SSVRITSAyIiA+PmNvbmZkZWZzLmgKKworICAgICAgICA7OworICAgICopCisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bmtub3duIGhhc2ggYWxnb3JpdGhtICckd2l0aHZhbCciICIkTElORU5PIiA1CisgICAgICAgIDs7Citlc2FjCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGRlZmF1bHQiID4mNQorJGFzX2VjaG8gImRlZmF1bHQiID4mNjsgfQorZmkKKworCiAjIE1vc3QgU1ZSNCBwbGF0Zm9ybXMgKGUuZy4gU29sYXJpcykgbmVlZCAtbHNvY2tldCBhbmQgLWxuc2wuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0X29wZW4gaW4gLWxuc2wiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRfb3BlbiBpbiAtbG5zbC4uLiAiID4mNjsgfQpAQCAtMTAzMDgsNyArMTA0NjYsNyBAQAogCiAjIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKIGZvciBhY19mdW5jIGluIGFsYXJtIGFjY2VwdDQgc2V0aXRpbWVyIGdldGl0aW1lciBiaW5kX3RleHRkb21haW5fY29kZXNldCBjaG93biBcCi0gY2xvY2sgY29uZnN0ciBjdGVybWlkIGV4ZWN2IGZhY2Nlc3NhdCBmY2htb2QgZmNobW9kYXQgZmNob3duIGZjaG93bmF0IFwKKyBjbG9jayBjb25mc3RyIGN0ZXJtaWQgZHVwMyBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCiAgZmV4ZWN2ZSBmZG9wZW5kaXIgZm9yayBmcGF0aGNvbmYgZnN0YXRhdCBmdGltZSBmdHJ1bmNhdGUgZnV0aW1lc2F0IFwKICBmdXRpbWVucyBmdXRpbWVzIGdhaV9zdHJlcnJvciBcCiAgZ2V0Z3JvdXBsaXN0IGdldGdyb3VwcyBnZXRsb2dpbiBnZXRsb2FkYXZnIGdldHBlZXJuYW1lIGdldHBnaWQgZ2V0cGlkIFwKQEAgLTEwMzI4LDcgKzEwNDg2LDcgQEAKICBzaWd0aW1lZHdhaXQgc2lnd2FpdCBzaWd3YWl0aW5mbyBzbnByaW50ZiBzdHJmdGltZSBzdHJsY3B5IHN5bWxpbmthdCBzeW5jIFwKICBzeXNjb25mIHRjZ2V0cGdycCB0Y3NldHBncnAgdGVtcG5hbSB0aW1lZ20gdGltZXMgdG1wZmlsZSB0bXBuYW0gdG1wbmFtX3IgXAogIHRydW5jYXRlIHVuYW1lIHVubGlua2F0IHVuc2V0ZW52IHV0aW1lbnNhdCB1dGltZXMgd2FpdGlkIHdhaXRwaWQgd2FpdDMgd2FpdDQgXAotIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3cml0ZXYgX2dldHB0eQorIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3bWVtY21wIHdyaXRldiBfZ2V0cHR5CiBkbyA6CiAgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgpAQCAtMTA1ODEsNiArMTA3MzksMzUgQEAKIAogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHJsaW1pdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHJsaW1pdC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKworaW50CittYWluICgpCit7Cit2b2lkICp4PXBybGltaXQKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BSTElNSVQgMSIgPj5jb25mZGVmcy5oCisKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKICMgT24gc29tZSBzeXN0ZW1zIChlZy4gRnJlZUJTRCA1KSwgd2Ugd291bGQgZmluZCBhIGRlZmluaXRpb24gb2YgdGhlCiAjIGZ1bmN0aW9ucyBjdGVybWlkX3IsIHNldGdyb3VwcyBpbiB0aGUgbGlicmFyeSwgYnV0IG5vIHByb3RvdHlwZQogIyAoZS5nLiBiZWNhdXNlIHdlIHVzZSBfWE9QRU5fU09VUkNFKS4gU2VlIHdoZXRoZXIgd2UgY2FuIHRha2UgdGhlaXIKQEAgLTExNDEyLDE5ICsxMTU5OSw2IEBACiAKIGZpCiAKLWFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGN3ZCIgImFjX2N2X2Z1bmNfZ2V0Y3dkIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGN3ZCIgPSB4eWVzOyB0aGVuIDoKLSAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRDV0QgMSIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgY2FzZSAiICRMSUJPQkpTICIgaW4KLSAgKiIgZ2V0Y3dkLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBnZXRjd2QuJGFjX29iamV4dCIKLSA7OwotZXNhYwotCi1maQotCiBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJkdXAiICJhY19jdl9mdW5jX3N0cmR1cCIKIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJkdXAiID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSRFVQIDEiID4+Y29uZmRlZnMuaApAQCAtMTM3NzgsNiArMTM5NTIsMTAgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTERWRVJTSU9OIiA+JjUKICRhc19lY2hvICIkTERWRVJTSU9OIiA+JjY7IH0KIAorCitMSUJQTD0iJHtwcmVmaXh9L2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCisKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJpZ2h0IHNoaWZ0IGV4dGVuZHMgdGhlIHNpZ24gYml0IiA+JjUKQEAgLTE1MTg1LDggKzE1MzYzLDMzIEBACiAgICAgZXNhYwogZmkKIAorIyBlbnN1cmVwaXAgb3B0aW9uCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlbnN1cmVwaXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVuc3VyZXBpcC4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVuc3VyZXBpcCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZW5zdXJlcGlwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lbnN1cmVwaXA7CitlbHNlCisgIHdpdGhfZW5zdXJlcGlwPXVwZ3JhZGUKK2ZpCisKK2Nhc2UgJHdpdGhfZW5zdXJlcGlwIGluICMoCisgIHllc3x1cGdyYWRlKSA6CisgICAgRU5TVVJFUElQPXVwZ3JhZGUgOzsgIygKKyAgaW5zdGFsbCkgOgorICAgIEVOU1VSRVBJUD1pbnN0YWxsIDs7ICMoCisgIG5vKSA6CisgICAgRU5TVVJFUElQPW5vIDs7ICMoCisgICopIDoKKyAgICBhc19mbl9lcnJvciAkPyAiLS13aXRoLWVuc3VyZXBpcD11cGdyYWRlfGluc3RhbGx8bm8iICIkTElORU5PIiA1IDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEVOU1VSRVBJUCIgPiY1CiskYXNfZWNobyAiJEVOU1VSRVBJUCIgPiY2OyB9CisKKwogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLWFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMiCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIE1pc2MvcHl0aG9uLWNvbmZpZy5zaCIKIAogYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1vZHVsZXMvbGRfc29fYWl4IgogCkBAIC0xNTY5Nyw3ICsxNTkwMCw3IEBACiAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKICMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCiBhY19sb2c9IgotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBweXRob24gJGFzX21lIDMuMywgd2hpY2ggd2FzCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy40LCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKQEAgLTE1NzU5LDcgKzE1OTYyLDcgQEAKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKIGFjX2NzX3ZlcnNpb249IlxcCi1weXRob24gY29uZmlnLnN0YXR1cyAzLjMKK3B5dGhvbiBjb25maWcuc3RhdHVzIDMuNAogY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LAogICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKIApAQCAtMTU4OTAsNiArMTYwOTMsNyBAQAogICAgICJNYWtlZmlsZS5wcmUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUucHJlIiA7OwogICAgICJNb2R1bGVzL1NldHVwLmNvbmZpZyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNb2R1bGVzL1NldHVwLmNvbmZpZyIgOzsKICAgICAiTWlzYy9weXRob24ucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWlzYy9weXRob24ucGMiIDs7CisgICAgIk1pc2MvcHl0aG9uLWNvbmZpZy5zaCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNaXNjL3B5dGhvbi1jb25maWcuc2giIDs7CiAgICAgIk1vZHVsZXMvbGRfc29fYWl4IikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1vZHVsZXMvbGRfc29fYWl4IiA7OwogCiAgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDZhNjRiZmYuLjI1ZTFkYzggMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTMsNyArMyw3IEBACiBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogIyBTZXQgVkVSU0lPTiBzbyB3ZSBvbmx5IG5lZWQgdG8gZWRpdCBpbiBvbmUgcGxhY2UgKGkuZS4sIGhlcmUpCi1tNF9kZWZpbmUoUFlUSE9OX1ZFUlNJT04sIDMuMykKK200X2RlZmluZShQWVRIT05fVkVSU0lPTiwgMy40KQogCiBBQ19QUkVSRVEoMi42NSkKIApAQCAtMTUyLDcgKzE1Miw3IEBACiAJCSMgTG9jYXRlIHRoZSBiZXN0IHVzYWJsZSBTREssIHNlZSBNYWMvUkVBRE1FLnR4dCBmb3IgbW9yZQogCQkjIGluZm9ybWF0aW9uCiAJCWVuYWJsZXZhbD0iYC91c3IvYmluL3hjb2RlYnVpbGQgLXZlcnNpb24gLXNkayBtYWNvc3ggUGF0aCAyPi9kZXYvbnVsbGAiCi0JCWlmIHRlc3QgLXogIiR7ZW5hYmxldmFsfSIKKwkJaWYgISAoIGVjaG8gJGVuYWJsZXZhbCB8IGdyZXAgLUUgJ1wuc2RrJyAxPi9kZXYvbnVsbCApCiAJCXRoZW4KIAkJCWVuYWJsZXZhbD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrCiAJCQlpZiB0ZXN0ICEgLWQgIiR7ZW5hYmxldmFsfSIKQEAgLTE4OSw2ICsxODksNyBAQAogQUNfU1VCU1QoVU5JVkVSU0FMU0RLKQogCiBBQ19TVUJTVChBUkNIX1JVTl8zMkJJVCkKK0FSQ0hfUlVOXzMyQklUPSIiCiAKICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3ZSBwcmVmZXIgdG8gc2VsZWN0ICczMi1iaXQnIGlmIGF2YWlsYWJsZSwKICMgb3RoZXJ3aXNlIHVzZSAnaW50ZWwnCkBAIC0xOTcsNyArMTk4LDcgQEAKIHRoZW4KIAlpZiB0ZXN0IC1uICIke1VOSVZFUlNBTFNES30iCiAJdGhlbgotCQlpZiB0ZXN0IC16ICJgL3Vzci9iaW4vZmlsZSAiJHtVTklWRVJTQUxTREt9L3Vzci9saWIvbGliU3lzdGVtLmR5bGliIiB8IGdyZXAgcHBjYCIKKwkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgLUwgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCiAJCXRoZW4KIAkJCVVOSVZFUlNBTF9BUkNIUz0iaW50ZWwiCiAJCWZpCkBAIC0yMDcsMTYgKzIwOCwxNyBAQAogQUNfU1VCU1QoTElQT18zMkJJVF9GTEFHUykKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXVuaXZlcnNhbC1hcmNocykKIEFDX0FSR19XSVRIKHVuaXZlcnNhbC1hcmNocywKLSAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNIXSwgW3NlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIildKSwKKyAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNIXSwgW3NlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiwgImludGVsLTMyIiwgb3IgImFsbCIpXSksCiBbCi0JQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKIAlVTklWRVJTQUxfQVJDSFM9IiR3aXRodmFsIgogXSwKLVsKLSAJQUNfTVNHX1JFU1VMVCgke1VOSVZFUlNBTF9BUkNIU30pCi1dKQotCi0KK1tdKQoraWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgordGhlbgorCUFDX01TR19SRVNVTFQoJHtVTklWRVJTQUxfQVJDSFN9KQorZWxzZQorCUFDX01TR19SRVNVTFQobm8pCitmaQogCiBBQ19BUkdfV0lUSChmcmFtZXdvcmstbmFtZSwKICAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1mcmFtZXdvcmstbmFtZT1GUkFNRVdPUktdLApAQCAtMjQ4LDYgKzI1MCw3IEBACiAJCUZSQU1FV09SS0lOU1RBTExMQVNUPQogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPQorCQlGUkFNRVdPUktQWVRIT05XPQogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSI7IHRoZW4KIAkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJCWVsc2UKQEAgLTI2Miw2ICsyNjUsNyBAQAogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUgIgogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktQWVRIT05XPSJmcmFtZXdvcmtweXRob253IgogCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKIAogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCkBAIC0zMjMsNiArMzI3LDcgQEAKIAlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9CisJRlJBTUVXT1JLUFlUSE9OVz0KIAlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCiAJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJZWxzZQpAQCAtMzQwLDYgKzM0NSw3IEBACiBBQ19TVUJTVChGUkFNRVdPUktJTlNUQUxMTEFTVCkKIEFDX1NVQlNUKEZSQU1FV09SS0FMVElOU1RBTExGSVJTVCkKIEFDX1NVQlNUKEZSQU1FV09SS0FMVElOU1RBTExMQVNUKQorQUNfU1VCU1QoRlJBTUVXT1JLUFlUSE9OVykKIEFDX1NVQlNUKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkKIEFDX1NVQlNUKEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYKQogCkBAIC01MTYsNiArNTIyLDE5IEBACiAgIEFDX0RFRklORShfUE9TSVhfQ19TT1VSQ0UsIDIwMDgwOUwsIERlZmluZSB0byBhY3RpdmF0ZSBmZWF0dXJlcyBmcm9tIElFRUUgU3RkcyAxMDAzLjEtMjAwOCkKIGZpCiAKKyMgT24gSFAtVVggbWJzdGF0ZV90IHJlcXVpcmVzIF9JTkNMVURFX19TVERDX0ExX1NPVVJDRQorY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgorICBocCp8SFAqKQorICAgIGRlZmluZV9zdGRjX2ExPXllczs7CisgICopCisgICAgZGVmaW5lX3N0ZGNfYTE9bm87OworZXNhYworCitpZiB0ZXN0ICRkZWZpbmVfc3RkY19hMSA9IHllcwordGhlbgorICBBQ19ERUZJTkUoX0lOQ0xVREVfX1NURENfQTFfU09VUkNFLCAxLCBEZWZpbmUgdG8gaW5jbHVkZSBtYnN0YXRlX3QgZm9yIG1icnRvd2MpCitmaQorCiAjCiAjIFNHSSBjb21waWxlcnMgYWxsb3cgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIGJvdGggdGhlIEFCSSBhbmQgdGhlCiAjIElTQSBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlc2Ugc3dpdGNoZXMsCkBAIC02OTEsNyArNzEwLDcgQEAKIGZpCiBpZiB0ZXN0ICIkcHJlc2V0X2N4eCIgIT0gIiRDWFgiCiB0aGVuCi0gICAgICAgIEFDX01TR19XQVJOKFsKKyAgICAgICAgQUNfTVNHX05PVElDRShbCiAKICAgQnkgZGVmYXVsdCwgZGlzdHV0aWxzIHdpbGwgYnVpbGQgQysrIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggIiRDWFgiLgogICBJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdGhlbiBzZXQgQ1hYIG9uIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgpAQCAtOTE3LDYgKzkzNiw3IEBACiAKICMgT3RoZXIgcGxhdGZvcm1zIGZvbGxvdwogaWYgdGVzdCAkZW5hYmxlX3NoYXJlZCA9ICJ5ZXMiOyB0aGVuCisgIFBZX0VOQUJMRV9TSEFSRUQ9MQogICBBQ19ERUZJTkUoUHlfRU5BQkxFX1NIQVJFRCwgMSwgW0RlZmluZWQgaWYgUHl0aG9uIGlzIGJ1aWx0IGFzIGEgc2hhcmVkIGxpYnJhcnkuXSkKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCkBAIC05NzIsNiArOTkyLDcgQEAKIAogICBlc2FjCiBlbHNlICMgc2hhcmVkIGlzIGRpc2FibGVkCisgIFBZX0VOQUJMRV9TSEFSRUQ9MAogICBjYXNlICRhY19zeXNfc3lzdGVtIGluCiAgICAgQ1lHV0lOKikKICAgICAgICAgICBCTERMSUJSQVJZPSckKExJQlJBUlkpJwpAQCAtMTE4Miw2ICsxMjAzLDI4IEBACiAgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV25vLXVudXNlZC1yZXN1bHQiCiAgICAgZmkKIAorICAgIEFDX01TR19DSEVDS0lORyhmb3IgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQpCisgICAgIGFjX3NhdmVfY2M9IiRDQyIKKyAgICAgQ0M9IiRDQyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZywKKyAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgIFsKKwkgICBBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSkKKwkgXSxbCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPXllcworCSBdLFsKKyAgICAgICAgICAgYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmc9bm8KKwkgXSkpCisgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICAgICBDQz0iJGFjX3NhdmVfY2MiCisgICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZyA9IHllcworICAgIHRoZW4KKyAgICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgIGZpCisKICAgICAjIGlmIHVzaW5nIGdjYyBvbiBhbHBoYSwgdXNlIC1taWVlZSB0byBnZXQgKG5lYXIpIGZ1bGwgSUVFRSA3NTQKICAgICAjIHN1cHBvcnQuICBXaXRob3V0IHRoaXMsIHRyZWF0bWVudCBvZiBzdWJub3JtYWxzIGRvZXNuJ3QgZm9sbG93CiAgICAgIyB0aGUgc3RhbmRhcmQuCkBAIC0xMTk1LDExMSArMTIzOCwxMjAgQEAKIAlTQ09fU1YqKQogCSAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtbTQ4NiAtRFNDTzUiCiAJICAgIDs7Ci0JIyBpcyB0aGVyZSBhbnkgb3RoZXIgY29tcGlsZXIgb24gRGFyd2luIGJlc2lkZXMgZ2NjPwotCURhcndpbiopCi0JICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCi0JICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgotICAgICAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCi0JICAgIHRoZW4KLQkJQUNfTVNHX0NIRUNLSU5HKHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkKQotCQljYXNlICIke1VOSVZFUlNBTFNES30iIGluCi0JCSovTWFjT1NYMTAuNHUuc2RrKQotCQkJIyBCdWlsZCB1c2luZyAxMC40IFNESywgZm9yY2UgdXNhZ2Ugb2YgZ2NjIHdoZW4gdGhlIAotCQkJIyBjb21waWxlciBpcyBnY2MsIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGdldCB2ZXJ5Ci0JCQkjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42Ci0JCQlDQz1nY2MtNC4wCi0JCQlDUFA9Y3BwLTQuMAotCQkJOzsKLQkJZXNhYwotCQlBQ19NU0dfUkVTVUxUKCRDQykKLQkgICAgZmkKIAorICAgICMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KKyAgICBEYXJ3aW4qKQorICAgICAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAorICAgICAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KKyAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyh3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCkKKyAgICAgICAgICAgIGNhc2UgIiR7VU5JVkVSU0FMU0RLfSIgaW4KKyAgICAgICAgICAgICovTWFjT1NYMTAuNHUuc2RrKQorICAgICAgICAgICAgICAgICMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZQorICAgICAgICAgICAgICAgICMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQorICAgICAgICAgICAgICAgICMgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIHdoZW4gYnVpbGRpbmcgb24gT1NYIDEwLjYKKyAgICAgICAgICAgICAgICBDQz1nY2MtNC4wCisgICAgICAgICAgICAgICAgQ1BQPWNwcC00LjAKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCgkQ0MpCisgICAgICAgIGZpCiAKLQkgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJVU5JVkVSU0FMX0FSQ0hfRkxBR1M9IiIKLQkgICAgICAgIGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMyLWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9IiIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiNjQtYml0IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSIKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgIDMyLWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgNjQtYml0KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSJ0cnVlIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGFsbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsLTMyKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDMtd2F5KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbcHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheV0pCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYwogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJhbGwiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICBDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgorICAgICAgICAgICAgTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgorICAgICAgICAgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImludGVsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgIyBDYWxjdWxhdGUgYW4gYXBwcm9wcmlhdGUgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQ6CisgICAgICAgICMgVGhlIGRlcGxveW1lbnQgdGFyZ2V0IHZhbHVlIGlzIHVzZWQgZXhwbGljaXRseSB0byBlbmFibGUgY2VydGFpbgorICAgICAgICAjIGZlYXR1cmVzIGFyZSBlbmFibGVkIChzdWNoIGFzIGJ1aWx0aW4gbGliZWRpdCBzdXBwb3J0IGZvciByZWFkbGluZSkKKyAgICAgICAgIyB0aHJvdWdoIHRoZSB1c2Ugb2YgQXBwbGUncyBBdmFpbGFiaWxpeSBNYWNyb3MgYW5kIGlzIHVzZWQgYXMgYQorICAgICAgICAjIGNvbXBvbmVudCBvZiB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IGRpc3R1dGlscy5nZXRfcGxhdGZvcm0oKS4KKyAgICAgICAgIworICAgICAgICAjIFVzZSB0aGUgdmFsdWUgZnJvbToKKyAgICAgICAgIyAxLiB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNwZWNpZmllZAorICAgICAgICAjIDIuIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24gb2YgdGhlIGJ1aWxkIG1hY2hpbmUgaWYgPj0gMTAuNgorICAgICAgICAjIDMuIElmIHJ1bm5pbmcgb24gT1MgWCAxMC4zIHRocm91Z2ggMTAuNSwgdXNlIHRoZSBsZWdhY3kgdGVzdHMKKyAgICAgICAgIyAgICAgICBiZWxvdyB0byBwaWNrIGVpdGhlciAxMC4zLCAxMC40LCBvciAxMC41IGFzIHRoZSB0YXJnZXQuCisgICAgICAgICMgNC4gSWYgd2UgYXJlIHJ1bm5pbmcgb24gT1MgWCAxMC4yIG9yIGVhcmxpZXIsIGdvb2QgbHVjayEKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiMy13YXkiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgIEFDX01TR19DSEVDS0lORyh3aGljaCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgdG8gdXNlKQorICAgICAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bWzAtOV1dKlwpLiovXDEvJ2AKKyAgICAgICAgaWYgdGVzdCAke2N1cl90YXJnZXR9ICc+JyAxMC4yICYmIFwKKyAgICAgICAgICAgdGVzdCAke2N1cl90YXJnZXR9ICc8JyAxMC42CisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGN1cl90YXJnZXQ9MTAuMworICAgICAgICAgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9CisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgICAgICBhbGx8My13YXl8aW50ZWx8NjQtYml0KQorICAgICAgICAgICAgICAgICAgICAjIFRoZXNlIGNvbmZpZ3VyYXRpb25zIHdlcmUgZmlyc3Qgc3VwcG9ydGVkIGluIDEwLjUKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0nMTAuNScKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiIKKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICMgMTAuNCB3YXMgdGhlIGZpcnN0IHJlbGVhc2UgdG8gc3VwcG9ydCBJbnRlbCBhcmNocworICAgICAgICAgICAgICAgICAgICBjdXJfdGFyZ2V0PSIxMC40IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19CiAKLQkJIGVsc2UKLQkgICAgICAgICAgIEFDX01TR19FUlJPUihbcHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheV0pCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGlzIHNldCBpbiB0aGUKKyAgICAgICAgIyBlbnZpcm9ubWVudCB3aXRoIGEgdmFsdWUgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IHdlJ2xsIHVzZQorICAgICAgICAjIGluIHRoZSBNYWtlZmlsZSB0byBlbnN1cmUgdGhhdCB3ZSdsbCBnZXQgdGhlIHNhbWUgY29tcGlsZXIKKyAgICAgICAgIyBlbnZpcm9ubWVudCBkdXJpbmcgY29uZmlndXJlIGFuZCBidWlsZCB0aW1lLgorICAgICAgICBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9IiRDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIgorICAgICAgICBleHBvcnQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCisgICAgICAgIEVYUE9SVF9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JycKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUKQogCi0JCSBmaQotCi0KLQkJQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKLQkJdGhlbgotCQkJQ0ZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJCUxERkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCUNQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgotCQlmaQotCSAgICBmaQotCi0JICAgICMgQ2FsY3VsYXRlIHRoZSByaWdodCBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZC4KLQkgICAgIwotCSAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bWzAtOV1dKlwpLiovXDEvJ2AKLQkgICAgaWYgdGVzdCAke2N1cl90YXJnZXR9ICc+JyAxMC4yICYmIFwKLQkgICAgICAgdGVzdCAke2N1cl90YXJnZXR9ICc8JyAxMC42Ci0JICAgIHRoZW4KLQkJICAgIGN1cl90YXJnZXQ9MTAuMwotCQkgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9OyB0aGVuCi0JCQkgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxfQVJDSFN9IiA9ICJhbGwiOyB0aGVuCi0JCQkJICAgICMgRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgcGxhdGZvcm0gZm9yIGEgCi0JCQkJICAgICMgNC13YXkgdW5pdmVyc2FsIGJ1aWxkIGlzIE9TWCAxMC41LCAKLQkJCQkgICAgIyB0aGF0J3MgdGhlIGZpcnN0IE9TIHJlbGVhc2Ugd2hlcmUgCi0JCQkJICAgICMgNC13YXkgYnVpbGRzIG1ha2Ugc2Vuc2UuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiMy13YXkiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiaW50ZWwiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiNjQtYml0IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCQkJICAgIGZpCi0JCSAgICBlbHNlCi0JCQkgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiI7IHRoZW4KLQkJCQkgICAgIyBPbiBJbnRlbCBtYWNzIGRlZmF1bHQgdG8gYSBkZXBsb3ltZW50Ci0JCQkJICAgICMgdGFyZ2V0IG9mIDEwLjQsIHRoYXQncyB0aGUgZmlyc3QgT1NYCi0JCQkJICAgICMgcmVsZWFzZSB3aXRoIEludGVsIHN1cHBvcnQuCi0JCQkJICAgIGN1cl90YXJnZXQ9IjEwLjQiCi0JCQkgICAgZmkKLQkJICAgIGZpCi0JICAgIGZpCi0JICAgIENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtJHtjdXJfdGFyZ2V0fX0KLQkgICAgCi0JICAgICMgTWFrZSBzdXJlIHRoYXQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGlzIHNldCBpbiB0aGUgCi0JICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKLQkgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCi0JICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KLQkgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKLQkgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAotCSAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCi0KLQkgICAgOzsKKyAgICAgICAgIyBlbmQgb2YgRGFyd2luKiB0ZXN0cworICAgICAgICA7OwogICAgIGVzYWMKICAgICA7OwogCkBAIC0xMzI2LDI0ICsxMzc4LDYgQEAKIAlCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAkYWNfYXJjaF9mbGFncyIKIGZpCiAKLSMgQ2hlY2sgd2hldGhlciBHQ0Mgc3VwcG9ydHMgUHlBcmdfUGFyc2VUdXBsZSBmb3JtYXQKLWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLXRoZW4KLSAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgZ2NjIHN1cHBvcnRzIFBhcnNlVHVwbGUgX19mb3JtYXRfXykKLSAgc2F2ZV9DRkxBR1M9JENGTEFHUwotICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV2Zvcm1hdCIKLSAgQUNfQ09NUElMRV9JRkVMU0UoWwotICAgIEFDX0xBTkdfUFJPR1JBTShbW3ZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpO11dLCBbW11dKQotICBdLFsKLSAgICBBQ19ERUZJTkUoSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUsIDEsCi0gICAgICBbRGVmaW5lIGlmIEdDQyBzdXBwb3J0cyBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMiwgMykpKV0pCi0gICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gIF0sWwotICAgIEFDX01TR19SRVNVTFQobm8pCi0gIF0pCi0gIENGTEFHUz0kc2F2ZV9DRkxBR1MKLWZpCi0KICMgT24gc29tZSBjb21waWxlcnMsIHB0aHJlYWRzIGFyZSBhdmFpbGFibGUgd2l0aG91dCBmdXJ0aGVyIG9wdGlvbnMKICMgKGUuZy4gTWFjT1MgWCkuIE9uIHNvbWUgb2YgdGhlc2Ugc3lzdGVtcywgdGhlIGNvbXBpbGVyIHdpbGwgbm90CiAjIGNvbXBsYWluIGlmIHVuYWNjZXB0ZWQgb3B0aW9ucyBhcmUgcGFzc2VkIChlLmcuIGdjYyBvbiBNYWMgT1MgWCkuCkBAIC0xNTI2LDcgKzE1NjAsOCBAQAogc3lzL3N0YXQuaCBzeXMvc3lzY2FsbC5oIHN5cy9zeXNfZG9tYWluLmggc3lzL3Rlcm1pby5oIHN5cy90aW1lLmggXAogc3lzL3RpbWVzLmggc3lzL3R5cGVzLmggc3lzL3Vpby5oIHN5cy91bi5oIHN5cy91dHNuYW1lLmggc3lzL3dhaXQuaCBwdHkuaCBcCiBsaWJ1dGlsLmggc3lzL3Jlc291cmNlLmggbmV0cGFja2V0L3BhY2tldC5oIHN5c2V4aXRzLmggYmx1ZXRvb3RoLmggXAotYmx1ZXRvb3RoL2JsdWV0b290aC5oIGxpbnV4L3RpcGMuaCBzcGF3bi5oIHV0aWwuaCBhbGxvY2EuaCkKK2JsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggc3Bhd24uaCB1dGlsLmggYWxsb2NhLmggZW5kaWFuLmggXAorc3lzL2VuZGlhbi5oKQogQ1BQRkxBR1M9JGFjX3NhdmVfY3BwZmxhZ3MKIEFDX0hFQURFUl9ESVJFTlQKIEFDX0hFQURFUl9NQUpPUgpAQCAtMTU2Niw3ICsxNjAxLDcgQEAKIF0pCiAKICMgT24gTGludXgsIGNhbi5oIGFuZCBjYW4vcmF3LmggcmVxdWlyZSBzeXMvc29ja2V0LmgKLUFDX0NIRUNLX0hFQURFUlMobGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oLCwsWworQUNfQ0hFQ0tfSEVBREVSUyhsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmggbGludXgvY2FuL2JjbS5oLCwsWwogI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC0xNTk3LDYgKzE2MzIsMjIgQEAKICAgICBBQ19ERUZJTkUoSEFWRV9NQUtFREVWLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIG1ha2VkZXYgbWFjcm8uXSkKIGZpCiAKKyMgYnl0ZSBzd2FwcGluZworQUNfTVNHX0NIRUNLSU5HKGZvciBsZTY0dG9oKQorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2lmZGVmIEhBVkVfRU5ESUFOX0gKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfRU5ESUFOX0gpCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VuZGlmCitdXSwgW1sKKyAgIGxlNjR0b2goMSkgXV0pCitdLFthY19jdl9oYXNfbGU2NHRvaD15ZXNdLFthY19jdl9oYXNfbGU2NHRvaD1ub10pCitBQ19NU0dfUkVTVUxUKCRhY19jdl9oYXNfbGU2NHRvaCkKK2lmIHRlc3QgIiRhY19jdl9oYXNfbGU2NHRvaCIgPSAieWVzIjsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX0hUT0xFNjQsIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBsZTY0dG9oKCldKQorZmkKKwogIyBFbmFibGluZyBMRlMgb24gU29sYXJpcyAoMi42IHRvIDkpIHdpdGggZ2NjIDIuOTUgdHJpZ2dlcnMgYSBidWcgaW4KICMgdGhlIHN5c3RlbSBoZWFkZXJzOiBJZiBfWE9QRU5fU09VUkNFIGFuZCBfTEFSR0VGSUxFX1NPVVJDRSBhcmUKICMgZGVmaW5lZCwgYnV0IHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHByYWdtYSByZWRlZmluZV9leHRuYW1lLApAQCAtMTc5OCw3ICsxODQ5LDYgQEAKIGVzYWMKIAogCi1BUkNIX1JVTl8zMkJJVD0iIgogQUNfU1VCU1QoTElCVE9PTF9DUlVGVCkKIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCiAgIERhcndpbi9APDpAMDE1NjdAOj5AXC4uKikgCkBAIC0xODU1LDE0ICsxOTA1LDEyIEBACiAgICAgCQk7OwogICAgIAllc2FjCiAKLQkjQVJDSF9SVU5fMzJCSVQ9InRydWUiCiAgICAgZmkKIAogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQiIC1sU3lzdGVtIC1sU3lzdGVtU3R1YnMgLWFyY2hfb25seSAke01BQ09TWF9ERUZBVUxUX0FSQ0h9IgogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQnIC1pbnN0YWxsX25hbWUgJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICQoVkVSU0lPTikgLWN1cnJlbnRfdmVyc2lvbiAkKFZFUlNJT04pJzs7CiBlc2FjCi0KIEFDX01TR19DSEVDS0lORyhmb3IgLS1lbmFibGUtZnJhbWV3b3JrKQogaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCiB0aGVuCkBAIC0xOTgyLDkgKzIwMzAsNiBAQAogCiAJCWlmIHRlc3QgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9ICc+JyAxMC4yCiAJCXRoZW4KLQkJCWlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCQkJTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgotCQkJZmkKIAkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCiAJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKIAkJCUJMRFNIQVJFRD0iJExEU0hBUkVEIgpAQCAtMjEwOCw2ICsyMTUzLDEyIEBACiAJIyAtdSBsaWJzeXNfcyBwdWxscyBpbiBhbGwgc3ltYm9scyBpbiBsaWJzeXMKIAlEYXJ3aW4vKikgCiAJCUxJTktGT1JTSEFSRUQ9IiRleHRyYV91bmRlZnMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKKworCQkjIElzc3VlICMxODA3NTogdGhlIGRlZmF1bHQgbWF4aW11bSBzdGFjayBzaXplICg4TUJ5dGVzKSBpcyB0b28KKwkJIyBzbWFsbCBmb3IgdGhlIGRlZmF1bHQgcmVjdXJzaW9uIGxpbWl0LiBJbmNyZWFzZSB0aGUgc3RhY2sgc2l6ZQorCQkjIHRvIGVuc3VyZSB0aGF0IHRlc3RzIGRvbid0IGNyYXNoCisJCUxJTktGT1JTSEFSRUQ9Ii1XbCwtc3RhY2tfc2l6ZSwxMDAwMDAwICRMSU5LRk9SU0hBUkVEIgorCiAJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIgogCQl0aGVuCiAJCQlMSU5LRk9SU0hBUkVEPSIkTElOS0ZPUlNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKQEAgLTIyMTIsNiArMjI2Myw1OSBAQAogCSopIDs7CiBlc2FjCiAKKyMgY2hlY2sgZm9yIHN5c3RlbXMgdGhhdCByZXF1aXJlIGFsaWduZWQgbWVtb3J5IGFjY2VzcworQUNfTVNHX0NIRUNLSU5HKGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZCkKK0FDX1RSWV9SVU4oWworaW50IG1haW4oKQoreworICAgIGNoYXIgc1sxNl07CisgICAgaW50IGksICpwMSwgKnAyOworICAgIGZvciAoaT0wOyBpIDwgMTY7IGkrKykKKyAgICAgICAgc1tpXSA9IGk7CisgICAgcDEgPSAoaW50KikocysxKTsKKyAgICBwMiA9IChpbnQqKShzKzIpOworICAgIGlmICgqcDEgPT0gKnAyKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKyAgICAgICAgICAgICAgXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9bm9dLAorICAgICBbYWxpZ25lZF9yZXF1aXJlZD15ZXNdLAorICAgICBbYWxpZ25lZF9yZXF1aXJlZD15ZXNdKQorCitpZiB0ZXN0ICIkYWxpZ25lZF9yZXF1aXJlZCIgPSB5ZXMgOyB0aGVuCisgIEFDX0RFRklORShbSEFWRV9BTElHTkVEX1JFUVVJUkVEXSwgWzFdLAorICAgIFtEZWZpbmUgaWYgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkXSkKK2ZpCitBQ19NU0dfUkVTVUxUKCRhbGlnbmVkX3JlcXVpcmVkKQorCisKKyMgc3RyLCBieXRlcyBhbmQgbWVtb3J5dmlldyBoYXNoIGFsZ29yaXRobQorQUhfVEVNUExBVEUoUHlfSEFTSF9BTEdPUklUSE0sCisgIFtEZWZpbmUgaGFzaCBhbGdvcml0aG0gZm9yIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcuCisgICBTaXBIYXNoMjQ6IDEsIEZOVjogMiwgZXh0ZXJuYWxseSBkZWZpbmVkOiAwXSkKKworQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtaGFzaC1hbGdvcml0aG0pCitkbmwgcXVhZHJpZ3JhcGhzICJAPDpAIiBhbmQgIkA6PkAiIHByb2R1Y2UgIlsiIGFuZCAiXSIgaW4gdGhlIG91dHB1dAorQUNfQVJHX1dJVEgoaGFzaF9hbGdvcml0aG0sCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWhhc2gtYWxnb3JpdGhtPUA8OkBmbnZ8c2lwaGFzaDI0QDo+QF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0IGhhc2ggYWxnb3JpdGhtXSksCitbCitBQ19NU0dfUkVTVUxUKCR3aXRodmFsKQorY2FzZSAiJHdpdGh2YWwiIGluCisgICAgc2lwaGFzaDI0KQorICAgICAgICBBQ19ERUZJTkUoUHlfSEFTSF9BTEdPUklUSE0sIDEpCisgICAgICAgIDs7CisgICAgZm52KQorICAgICAgICBBQ19ERUZJTkUoUHlfSEFTSF9BTEdPUklUSE0sIDIpCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgQUNfTVNHX0VSUk9SKFt1bmtub3duIGhhc2ggYWxnb3JpdGhtICckd2l0aHZhbCddKQorICAgICAgICA7OworZXNhYworXSwKK1tBQ19NU0dfUkVTVUxUKGRlZmF1bHQpXSkKKwogIyBNb3N0IFNWUjQgcGxhdGZvcm1zIChlLmcuIFNvbGFyaXMpIG5lZWQgLWxzb2NrZXQgYW5kIC1sbnNsLgogQUNfQ0hFQ0tfTElCKG5zbCwgdF9vcGVuLCBbTElCUz0iLWxuc2wgJExJQlMiXSkgIyBTVlI0CiBBQ19DSEVDS19MSUIoc29ja2V0LCBzb2NrZXQsIFtMSUJTPSItbHNvY2tldCAkTElCUyJdLCBbXSwgJExJQlMpICMgU1ZSNCBzb2NrZXRzCkBAIC0yODIzLDcgKzI5MjcsNyBAQAogCiAjIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKIEFDX0NIRUNLX0ZVTkNTKGFsYXJtIGFjY2VwdDQgc2V0aXRpbWVyIGdldGl0aW1lciBiaW5kX3RleHRkb21haW5fY29kZXNldCBjaG93biBcCi0gY2xvY2sgY29uZnN0ciBjdGVybWlkIGV4ZWN2IGZhY2Nlc3NhdCBmY2htb2QgZmNobW9kYXQgZmNob3duIGZjaG93bmF0IFwKKyBjbG9jayBjb25mc3RyIGN0ZXJtaWQgZHVwMyBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCiAgZmV4ZWN2ZSBmZG9wZW5kaXIgZm9yayBmcGF0aGNvbmYgZnN0YXRhdCBmdGltZSBmdHJ1bmNhdGUgZnV0aW1lc2F0IFwKICBmdXRpbWVucyBmdXRpbWVzIGdhaV9zdHJlcnJvciBcCiAgZ2V0Z3JvdXBsaXN0IGdldGdyb3VwcyBnZXRsb2dpbiBnZXRsb2FkYXZnIGdldHBlZXJuYW1lIGdldHBnaWQgZ2V0cGlkIFwKQEAgLTI4NDMsNyArMjk0Nyw3IEBACiAgc2lndGltZWR3YWl0IHNpZ3dhaXQgc2lnd2FpdGluZm8gc25wcmludGYgc3RyZnRpbWUgc3RybGNweSBzeW1saW5rYXQgc3luYyBcCiAgc3lzY29uZiB0Y2dldHBncnAgdGNzZXRwZ3JwIHRlbXBuYW0gdGltZWdtIHRpbWVzIHRtcGZpbGUgdG1wbmFtIHRtcG5hbV9yIFwKICB0cnVuY2F0ZSB1bmFtZSB1bmxpbmthdCB1bnNldGVudiB1dGltZW5zYXQgdXRpbWVzIHdhaXRpZCB3YWl0cGlkIHdhaXQzIHdhaXQ0IFwKLSB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd3JpdGV2IF9nZXRwdHkpCisgd2NzY29sbCB3Y3NmdGltZSB3Y3N4ZnJtIHdtZW1jbXAgd3JpdGV2IF9nZXRwdHkpCiAKIEFDX0NIRUNLX0RFQ0woZGlyZmQsCiAgICAgQUNfREVGSU5FKEhBVkVfRElSRkQsIDEsCkBAIC0yOTEwLDYgKzMwMTQsMTYgQEAKICAgIEFDX01TR19SRVNVTFQoeWVzKV0sCiAgIFtBQ19NU0dfUkVTVUxUKG5vKQogXSkKK0FDX01TR19DSEVDS0lORyhmb3IgcHJsaW1pdCkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorICAgIF1dLCBbW3ZvaWQgKng9cHJsaW1pdF1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9QUkxJTUlULCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdwcmxpbWl0JyBmdW5jdGlvbnMuKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pCitdKQorCiAjIE9uIHNvbWUgc3lzdGVtcyAoZWcuIEZyZWVCU0QgNSksIHdlIHdvdWxkIGZpbmQgYSBkZWZpbml0aW9uIG9mIHRoZQogIyBmdW5jdGlvbnMgY3Rlcm1pZF9yLCBzZXRncm91cHMgaW4gdGhlIGxpYnJhcnksIGJ1dCBubyBwcm90b3R5cGUKICMgKGUuZy4gYmVjYXVzZSB3ZSB1c2UgX1hPUEVOX1NPVVJDRSkuIFNlZSB3aGV0aGVyIHdlIGNhbiB0YWtlIHRoZWlyCkBAIC0zMTEwLDcgKzMyMjQsNyBAQAogIyBjaGVjayBmb3IgbG9uZyBmaWxlIHN1cHBvcnQgZnVuY3Rpb25zCiBBQ19DSEVDS19GVU5DUyhmc2VlazY0IGZzZWVrbyBmc3RhdHZmcyBmdGVsbDY0IGZ0ZWxsbyBzdGF0dmZzKQogCi1BQ19SRVBMQUNFX0ZVTkNTKGR1cDIgZ2V0Y3dkIHN0cmR1cCkKK0FDX1JFUExBQ0VfRlVOQ1MoZHVwMiBzdHJkdXApCiBBQ19DSEVDS19GVU5DUyhnZXRwZ3JwLCAKICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDx1bmlzdGQuaD5dXSwgW1tnZXRwZ3JwKDApO11dKV0sCiAgICAgW0FDX0RFRklORShHRVRQR1JQX0hBVkVfQVJHLCAxLCBbRGVmaW5lIGlmIGdldHBncnAoKSBtdXN0IGJlIGNhbGxlZCBhcyBnZXRwZ3JwKDApLl0pXSwKQEAgLTM5ODMsNiArNDA5NywxMSBAQAogTERWRVJTSU9OPSckKFZFUlNJT04pJChBQklGTEFHUyknCiBBQ19NU0dfUkVTVUxUKCRMRFZFUlNJT04pCiAKK2RubCBkZWZpbmUgTElCUEwgYWZ0ZXIgQUJJRkxBR1MgYW5kIExEVkVSU0lPTiBpcyBkZWZpbmVkLgorQUNfU1VCU1QoUFlfRU5BQkxFX1NIQVJFRCkKK0xJQlBMPSIke3ByZWZpeH0vbGliL3B5dGhvbiR7VkVSU0lPTn0vY29uZmlnLSR7TERWRVJTSU9OfSIKK0FDX1NVQlNUKExJQlBMKQorCiAjIENoZWNrIHdoZXRoZXIgcmlnaHQgc2hpZnRpbmcgYSBuZWdhdGl2ZSBpbnRlZ2VyIGV4dGVuZHMgdGhlIHNpZ24gYml0CiAjIG9yIGZpbGxzIHdpdGggemVyb3MgKGxpa2UgdGhlIENyYXkgSjkwLCBhY2NvcmRpbmcgdG8gVGltIFBldGVycykuCiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciByaWdodCBzaGlmdCBleHRlbmRzIHRoZSBzaWduIGJpdCkKQEAgLTQ2NjEsOCArNDc4MCwyMyBAQAogICAgIGVzYWMKIGZpCiAKKyMgZW5zdXJlcGlwIG9wdGlvbgorQUNfTVNHX0NIRUNLSU5HKGZvciBlbnN1cmVwaXApCitBQ19BUkdfV0lUSChlbnN1cmVwaXAsCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgob3V0KS1lbnN1cmVwaXA9QDw6QD11cGdyYWRlQDo+QF0sCisgICAgICAgIFsiaW5zdGFsbCIgb3IgInVwZ3JhZGUiIHVzaW5nIGJ1bmRsZWQgcGlwXSldLAorICAgIFtdLAorICAgIFt3aXRoX2Vuc3VyZXBpcD11cGdyYWRlXSkKK0FTX0NBU0UoJHdpdGhfZW5zdXJlcGlwLAorICAgIFt5ZXN8dXBncmFkZV0sW0VOU1VSRVBJUD11cGdyYWRlXSwKKyAgICBbaW5zdGFsbF0sW0VOU1VSRVBJUD1pbnN0YWxsXSwKKyAgICBbbm9dLFtFTlNVUkVQSVA9bm9dLAorICAgIFtBQ19NU0dfRVJST1IoWy0td2l0aC1lbnN1cmVwaXA9dXBncmFkZXxpbnN0YWxsfG5vXSldKQorQUNfTVNHX1JFU1VMVCgkRU5TVVJFUElQKQorQUNfU1VCU1QoRU5TVVJFUElQKQorCiAjIGdlbmVyYXRlIG91dHB1dCBmaWxlcwotQUNfQ09ORklHX0ZJTEVTKE1ha2VmaWxlLnByZSBNb2R1bGVzL1NldHVwLmNvbmZpZyBNaXNjL3B5dGhvbi5wYykKK0FDX0NPTkZJR19GSUxFUyhNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMgTWlzYy9weXRob24tY29uZmlnLnNoKQogQUNfQ09ORklHX0ZJTEVTKFtNb2R1bGVzL2xkX3NvX2FpeF0sIFtjaG1vZCAreCBNb2R1bGVzL2xkX3NvX2FpeF0pCiBBQ19PVVRQVVQKIApkaWZmIC0tZ2l0IGEvcHljb25maWcuaC5pbiBiL3B5Y29uZmlnLmguaW4KaW5kZXggMDAyMDMwMC4uMzU3NGY2NyAxMDA2NDQKLS0tIGEvcHljb25maWcuaC5pbgorKysgYi9weWNvbmZpZy5oLmluCkBAIC00OSw2ICs0OSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFsYXJtJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0FMQVJNCiAKKy8qIERlZmluZSBpZiBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQgKi8KKyN1bmRlZiBIQVZFX0FMSUdORURfUkVRVUlSRUQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhbGxvY2EuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9BTExPQ0FfSAogCkBAIC02NCw5ICs2Nyw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGF0YW5oJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0FUQU5ICiAKLS8qIERlZmluZSBpZiBHQ0Mgc3VwcG9ydHMgX19hdHRyaWJ1dGVfXygoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpKSkgKi8KLSN1bmRlZiBIQVZFX0FUVFJJQlVURV9GT1JNQVRfUEFSU0VUVVBMRQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0JJTkRfVEVYVERPTUFJTl9DT0RFU0VUCiAKQEAgLTE5Niw5ICsxOTYsMTUgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZHVwMicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9EVVAyCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZHVwMycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9EVVAzCisKIC8qIERlZmluZWQgd2hlbiBhbnkgZHluYW1pYyBtb2R1bGUgbG9hZGluZyBpcyBlbmFibGVkLiAqLwogI3VuZGVmIEhBVkVfRFlOQU1JQ19MT0FESU5HCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZW5kaWFuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRU5ESUFOX0gKKwogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGwnIGZ1bmN0aW9ucy4gKi8KICN1bmRlZiBIQVZFX0VQT0xMCiAKQEAgLTMyMCw5ICszMjYsNiBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRhZGRyaW5mbyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVEFERFJJTkZPCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Y3dkJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0dFVENXRAotCiAvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBmbG9ja2ZpbGUoKSwgZ2V0Y191bmxvY2tlZCgpLCBhbmQgZnVubG9ja2ZpbGUoKSAqLwogI3VuZGVmIEhBVkVfR0VUQ19VTkxPQ0tFRAogCkBAIC00MTEsNiArNDE0LDkgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2hzdHJlcnJvcicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9IU1RSRVJST1IKIAorLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgbGU2NHRvaCgpICovCisjdW5kZWYgSEFWRV9IVE9MRTY0CisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaHlwb3QnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSFlQT1QKIApAQCAtNTA0LDYgKzUxMCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpbmthdCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9MSU5LQVQKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9jYW4vYmNtLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElOVVhfQ0FOX0JDTV9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTElOVVhfQ0FOX0gKIApAQCAtNjI3LDYgKzYzNiw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHByZWFkJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1BSRUFECiAKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3BybGltaXQnIGZ1bmN0aW9ucy4gKi8KKyN1bmRlZiBIQVZFX1BSTElNSVQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwcm9jZXNzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfUFJPQ0VTU19ICiAKQEAgLTkyNCw2ICs5MzYsOSBAQAogICAgKi8KICN1bmRlZiBIQVZFX1NZU19ESVJfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9lbmRpYW4uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfRU5ESUFOX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZXBvbGwuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TWVNfRVBPTExfSAogCkBAIC0xMTIxLDYgKzExMzYsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3N4ZnJtJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1dDU1hGUk0KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3bWVtY21wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1dNRU1DTVAKKwogLyogRGVmaW5lIGlmIHR6c2V0KCkgYWN0dWFsbHkgc3dpdGNoZXMgdGhlIGxvY2FsIHRpbWV6b25lIGluIGEgbWVhbmluZ2Z1bCB3YXkuCiAgICAqLwogI3VuZGVmIEhBVkVfV09SS0lOR19UWlNFVApAQCAtMTE4Nyw2ICsxMjA1LDEwIEBACiAvKiBEZWZpbmVkIGlmIFB5dGhvbiBpcyBidWlsdCBhcyBhIHNoYXJlZCBsaWJyYXJ5LiAqLwogI3VuZGVmIFB5X0VOQUJMRV9TSEFSRUQKIAorLyogRGVmaW5lIGhhc2ggYWxnb3JpdGhtIGZvciBzdHIsIGJ5dGVzIGFuZCBtZW1vcnl2aWV3LiBTaXBIYXNoMjQ6IDEsIEZOVjogMiwKKyAgIGV4dGVybmFsbHkgZGVmaW5lZDogMCAqLworI3VuZGVmIFB5X0hBU0hfQUxHT1JJVEhNCisKIC8qIGFzc3VtZSBDODkgc2VtYW50aWNzIHRoYXQgUkVUU0lHVFlQRSBpcyBhbHdheXMgdm9pZCAqLwogI3VuZGVmIFJFVFNJR1RZUEUKIApAQCAtMTM2MCw2ICsxMzgyLDkgQEAKIC8qIERlZmluZSBvbiBMaW51eCB0byBhY3RpdmF0ZSBhbGwgbGlicmFyeSBmZWF0dXJlcyAqLwogI3VuZGVmIF9HTlVfU09VUkNFCiAKKy8qIERlZmluZSB0byBpbmNsdWRlIG1ic3RhdGVfdCBmb3IgbWJydG93YyAqLworI3VuZGVmIF9JTkNMVURFX19TVERDX0ExX1NPVVJDRQorCiAvKiBUaGlzIG11c3QgYmUgZGVmaW5lZCBvbiBzb21lIHN5c3RlbXMgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydC4gKi8KICN1bmRlZiBfTEFSR0VGSUxFX1NPVVJDRQogCmRpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CmluZGV4IDkwNjQwMTQuLjgyNjllMWMgMTAwNjQ0Ci0tLSBhL3NldHVwLnB5CisrKyBiL3NldHVwLnB5CkBAIC0xLDggKzEsMTAgQEAKICMgQXV0b2RldGVjdGluZyBzZXR1cC5weSBzY3JpcHQgZm9yIGJ1aWxkaW5nIHRoZSBQeXRob24gZXh0ZW5zaW9ucwogIwogCi1pbXBvcnQgc3lzLCBvcywgaW1wLCByZSwgb3B0cGFyc2UKK2ltcG9ydCBzeXMsIG9zLCBpbXBvcnRsaWIubWFjaGluZXJ5LCByZSwgb3B0cGFyc2UKIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgoraW1wb3J0IGltcG9ydGxpYi5fYm9vdHN0cmFwCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXNjb25maWcKIAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwpAQCAtMjU5LDggKzI2MSw5IEBACiAKICAgICAgICAgaWYgbWlzc2luZzoKICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgIHByaW50KCJQeXRob24gYnVpbGQgZmluaXNoZWQsIGJ1dCB0aGUgbmVjZXNzYXJ5IGJpdHMgdG8gYnVpbGQgIgotICAgICAgICAgICAgICAgICAgICJ0aGVzZSBtb2R1bGVzIHdlcmUgbm90IGZvdW5kOiIpCisgICAgICAgICAgICBwcmludCgiUHl0aG9uIGJ1aWxkIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSEiKQorICAgICAgICAgICAgcHJpbnQoIlRoZSBuZWNlc3NhcnkgYml0cyB0byBidWlsZCB0aGVzZSBvcHRpb25hbCBtb2R1bGVzIHdlcmUgbm90ICIKKyAgICAgICAgICAgICAgICAgICJmb3VuZDoiKQogICAgICAgICAgICAgcHJpbnRfdGhyZWVfY29sdW1uKG1pc3NpbmcpCiAgICAgICAgICAgICBwcmludCgiVG8gZmluZCB0aGUgbmVjZXNzYXJ5IGJpdHMsIGxvb2sgaW4gc2V0dXAucHkgaW4iCiAgICAgICAgICAgICAgICAgICAiIGRldGVjdF9tb2R1bGVzKCkgZm9yIHRoZSBtb2R1bGUncyBuYW1lLiIpCkBAIC0zMjUsOCArMzI4LDExIEBACiAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKICAgICAgICAgICAgIHJldHVybgogCisgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcihleHQubmFtZSwgZXh0X2ZpbGVuYW1lKQorICAgICAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oZXh0Lm5hbWUsIGV4dF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1sb2FkZXIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGltcC5sb2FkX2R5bmFtaWMoZXh0Lm5hbWUsIGV4dF9maWxlbmFtZSkKKyAgICAgICAgICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5sb2FkKCkKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIHdoeToKICAgICAgICAgICAgIHNlbGYuZmFpbGVkLmFwcGVuZChleHQubmFtZSkKICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoJyoqKiBXQVJOSU5HOiByZW5hbWluZyAiJXMiIHNpbmNlIGltcG9ydGluZyBpdCcKQEAgLTU4OCwxMCArNTk0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcz1bJ3Rlc3RjYXBpX2xvbmcuaCddKSApCiAgICAgICAgICMgUHl0aG9uIFBFUC0zMTE4IChidWZmZXIgcHJvdG9jb2wpIHRlc3QgbW9kdWxlCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ190ZXN0YnVmZmVyJywgWydfdGVzdGJ1ZmZlci5jJ10pICkKKyAgICAgICAgIyBUZXN0IGxvYWRpbmcgbXVsdGlwbGUgbW9kdWxlcyBmcm9tIG9uZSBjb21waWxlZCBmaWxlIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTY0MjEpCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ190ZXN0aW1wb3J0bXVsdGlwbGUnLCBbJ190ZXN0aW1wb3J0bXVsdGlwbGUuYyddKSApCiAgICAgICAgICMgcHJvZmlsZXIgKF9sc3Byb2YgaXMgZm9yIGNQcm9maWxlLnB5KQogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfbHNwcm9mJywgWydfbHNwcm9mLmMnLCAncm90YXRpbmd0cmVlLmMnXSkgKQogICAgICAgICAjIHN0YXRpYyBVbmljb2RlIGNoYXJhY3RlciBkYXRhYmFzZQogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCd1bmljb2RlZGF0YScsIFsndW5pY29kZWRhdGEuYyddKSApCisgICAgICAgICMgX29wY29kZSBtb2R1bGUKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX29wY29kZScsIFsnX29wY29kZS5jJ10pICkKIAogICAgICAgICAjIE1vZHVsZXMgd2l0aCBzb21lIFVOSVggZGVwZW5kZW5jaWVzIC0tIG9uIGJ5IGRlZmF1bHQ6CiAgICAgICAgICMgKElmIHlvdSBoYXZlIGEgcmVhbGx5IGJhY2t3YXJkIFVOSVgsIHNlbGVjdCBhbmQgc29ja2V0IG1heSBub3QgYmUKQEAgLTc4NCwxMCArNzk0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGluY2ZpbGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBtID0gb3BlbnNzbF92ZXJfcmUubWF0Y2gobGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNzbF92ZXIgPSBldmFsKG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNzbF92ZXIgPSBpbnQobS5ncm91cCgxKSwgMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBwcmludCgiSU9FcnJvciB3aGlsZSByZWFkaW5nIG9wZW5zc2h2Lmg6IiwgbXNnKQotICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAjcHJpbnQoJ29wZW5zc2xfdmVyID0gMHglMDh4JyAlIG9wZW5zc2xfdmVyKQogICAgICAgICBtaW5fb3BlbnNzbF92ZXIgPSAweDAwOTA3MDAwCkBAIC0xNTA5LDEwICsxNTE5LDYgQEAKIAogICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAgICAgICAgZXh0cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbignX2dlc3RhbHQnLCBbJ19nZXN0YWx0LmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfbGlua19hcmdzPVsnLWZyYW1ld29yaycsICdDYXJib24nXSkKLSAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgZXh0cy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbignX3NjcHJveHknLCBbJ19zY3Byb3h5LmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfbGlua19hcmdzPVsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZnJhbWV3b3JrJywgJ1N5c3RlbUNvbmZpZ3VyYXRpb24nLApAQCAtMTUzMyw3ICsxNTM5LDcgQEAKIAogICAgICAgICBpZiAnZCcgbm90IGluIHN5cy5hYmlmbGFnczoKICAgICAgICAgICAgIGV4dCA9IEV4dGVuc2lvbigneHhsaW1pdGVkJywgWyd4eGxpbWl0ZWQuYyddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WygnUHlfTElNSVRFRF9BUEknLCAxKV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3Jvcz1bKCdQeV9MSU1JVEVEX0FQSScsICcweDAzMDQwMDAwJyldKQogICAgICAgICAgICAgc2VsZi5leHRlbnNpb25zLmFwcGVuZChleHQpCiAKICAgICAgICAgcmV0dXJuIG1pc3NpbmcKQEAgLTIxNTYsNyArMjE2Miw3IEBACiBwcm9ncmFtbWFibGUgaW50ZXJmYWNlLgogCiBUaGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIGlzIHBvcnRhYmxlOiBpdCBydW5zIG9uIG1hbnkgYnJhbmRzIG9mIFVOSVgsCi1vbiBXaW5kb3dzLCBET1MsIE9TLzIsIE1hYywgQW1pZ2EuLi4gSWYgeW91ciBmYXZvcml0ZSBzeXN0ZW0gaXNuJ3QKK29uIFdpbmRvd3MsIERPUywgTWFjLCBBbWlnYS4uLiBJZiB5b3VyIGZhdm9yaXRlIHN5c3RlbSBpc24ndAogbGlzdGVkIGhlcmUsIGl0IG1heSBzdGlsbCBiZSBzdXBwb3J0ZWQsIGlmIHRoZXJlJ3MgYSBDIGNvbXBpbGVyIGZvcgogaXQuIEFzayBhcm91bmQgb24gY29tcC5sYW5nLnB5dGhvbiAtLSBvciBqdXN0IHRyeSBjb21waWxpbmcgUHl0aG9uCiB5b3Vyc2VsZi4K